diff --git a/Chapter 13 The Compute Shader/BlurFilter.cpp b/Chapter 13 The Compute Shader/BlurFilter.cpp new file mode 100644 index 0000000..55e1334 --- /dev/null +++ b/Chapter 13 The Compute Shader/BlurFilter.cpp @@ -0,0 +1,119 @@ +#include "BlurFilter.h" +#include "CommandContext.h" + +#include "CompiledShaders/blurHorzCS.h" +#include "CompiledShaders/blurVertCS.h" + +void BlurFilter::init(DXGI_FORMAT format) +{ + _format = format; + + // ������ǩ�� + _rootSignature.Reset(3, 0); + _rootSignature[0].InitAsConstants(0, 12); + _rootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + _rootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + _rootSignature.Finalize(L"blurRS"); + + // ����PSO + _horzPSO.SetRootSignature(_rootSignature); + _horzPSO.SetComputeShader(g_pblurHorzCS, sizeof(g_pblurHorzCS)); + _horzPSO.Finalize(); + + _vertPSO.SetRootSignature(_rootSignature); + _vertPSO.SetComputeShader(g_pblurVertCS, sizeof(g_pblurVertCS)); + _vertPSO.Finalize(); +} + +void BlurFilter::destory() +{ + _bufferA.Destroy(); + _bufferB.Destroy(); +} + +void BlurFilter::update(int w, int h) +{ + if (_w == w && _h == h) + return; + + _w = w; + _h = h; + _bufferA.Create(L"blur A", _w, _h, 1, _format); + _bufferB.Create(L"blur B", _w, _h, 1, _format); +} + +void BlurFilter::doBlur(GpuResource& inBuff, int blurCount) +{ + auto weights = CalcGaussWeights(2.5f); + int blurRadius = (int)weights.size() / 2; + + ComputeContext& context = ComputeContext::Begin(L"blur filter"); + + // ��inBuff������bufferA�� + context.CopyBuffer(_bufferA, inBuff); + + context.SetRootSignature(_rootSignature); + // ����ˮƽ����ֱģ�����еij��� + context.SetConstant(0, blurRadius); + context.SetConstantArray(0, (UINT)weights.size(), weights.data(), 1); + + for (int i = 0; i < blurCount; ++i) + { + // ˮƽ����ģ�� + context.SetPipelineState(_horzPSO); + + // �������������� + context.TransitionResource(_bufferA, D3D12_RESOURCE_STATE_GENERIC_READ); + context.SetDynamicDescriptor(1, 0, _bufferA.GetSRV()); + context.TransitionResource(_bufferB, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(2, 0, _bufferB.GetUAV()); + + UINT numGroupsX = (UINT)ceilf(_w / 256.0f); + context.Dispatch(numGroupsX, _h, 1); + + // ��ֱ����ģ�� + context.SetPipelineState(_vertPSO); + + // ��������������������AB������������_bufferA������� + context.TransitionResource(_bufferB, D3D12_RESOURCE_STATE_GENERIC_READ); + context.SetDynamicDescriptor(1, 0, _bufferB.GetSRV()); + context.TransitionResource(_bufferA, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(2, 0, _bufferA.GetUAV()); + + UINT numGroupsY = (UINT)ceilf(_h / 256.0f); + context.Dispatch(_w, numGroupsY, 1); + } + + context.Finish(true); +} + +std::vector BlurFilter::CalcGaussWeights(float sigma) +{ + float twoSigma2 = 2.0f * sigma * sigma; + + // Estimate the blur radius based on sigma since sigma controls the "width" of the bell curve. + // For example, for sigma = 3, the width of the bell curve is + int blurRadius = (int)ceil(2.0f * sigma); + + std::vector weights; + weights.resize(2 * blurRadius + 1); + + float weightSum = 0.0f; + + for (int i = -blurRadius; i <= blurRadius; ++i) + { + float x = (float)i; + + weights[i + blurRadius] = expf(-x * x / twoSigma2); + + weightSum += weights[i + blurRadius]; + } + + // Divide by the sum so all the weights add up to 1.0. + for (int i = 0; i < weights.size(); ++i) + { + weights[i] /= weightSum; + } + + return weights; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/BlurFilter.h b/Chapter 13 The Compute Shader/BlurFilter.h new file mode 100644 index 0000000..bb04ca0 --- /dev/null +++ b/Chapter 13 The Compute Shader/BlurFilter.h @@ -0,0 +1,45 @@ +#pragma once + +#include "GameCore.h" +#include "ColorBuffer.h" +#include "RootSignature.h" +#include "PipelineState.h" +#include "GpuResource.h" + +class BlurFilter +{ +public: + BlurFilter() = default; + +public: + void init(DXGI_FORMAT format); + void destory(); + + void update(int w, int h); + void doBlur(GpuResource& inBuff, int blurCount); + + ColorBuffer& getOutBuffer() + { + return _bufferA; + } + +private: + std::vector CalcGaussWeights(float sigma); + +private: + int _w = 0; + int _h = 0; + DXGI_FORMAT _format; + + ColorBuffer _bufferA; + ColorBuffer _bufferB; + + + RootSignature _rootSignature; + + // ˮƽģ�� + ComputePSO _horzPSO; + + // ��ֱģ�� + ComputePSO _vertPSO; +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj b/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj new file mode 100644 index 0000000..535c34d --- /dev/null +++ b/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj @@ -0,0 +1,523 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {8512BCED-E5A5-471A-9C80-B0A5D1A27B84} + Chapter13TheComputeShader + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + Compute + 5.0 + Compute + 5.0 + Document + + + Compute + 5.0 + Compute + 5.0 + + + + Pixel + Pixel + + + + + + Compute + 5.0 + Compute + 5.0 + + + + + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compute + 5.0 + Compute + 5.0 + + + Compute + 5.0 + Compute + 5.0 + + + Compute + 5.0 + Compute + 5.0 + + + Vertex + Vertex + + + Compute + 5.0 + Compute + 5.0 + + + + + Document + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj.filters b/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj.filters new file mode 100644 index 0000000..aabfce8 --- /dev/null +++ b/Chapter 13 The Compute Shader/Chapter 13 The Compute Shader.vcxproj.filters @@ -0,0 +1,931 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + 源文件 + + + 源文件 + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + 源文件 + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + 源文件 + + + 源文件 + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + 源文件 + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\default + + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/CameraController.cpp b/Chapter 13 The Compute Shader/Core/CameraController.cpp new file mode 100644 index 0000000..a5d681d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/CameraController.cpp @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(m_WorldUp, Vector3(kXUnitVector))); + m_WorldEast = Cross(m_WorldNorth, m_WorldUp); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 1000.0f; + m_StrafeSpeed = 1000.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(m_WorldUp, camera.GetRightVec())); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = false; + m_FineRotation = false; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // don't apply momentum to mouse inputs + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 13 The Compute Shader/Core/CameraController.h b/Chapter 13 The Compute Shader/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 13 The Compute Shader/Core/EngineProfiling.cpp b/Chapter 13 The Compute Shader/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 13 The Compute Shader/Core/EngineProfiling.h b/Chapter 13 The Compute Shader/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 13 The Compute Shader/Core/EngineTuning.cpp b/Chapter 13 The Compute Shader/Core/EngineTuning.cpp new file mode 100644 index 0000000..f5715ce --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp(log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 13 The Compute Shader/Core/EngineTuning.h b/Chapter 13 The Compute Shader/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 13 The Compute Shader/Core/FileUtility.cpp b/Chapter 13 The Compute Shader/Core/FileUtility.cpp new file mode 100644 index 0000000..5c417b5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (byte*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (byte*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 13 The Compute Shader/Core/FileUtility.h b/Chapter 13 The Compute Shader/Core/FileUtility.h new file mode 100644 index 0000000..0fdd5f6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 13 The Compute Shader/Core/Fonts/consola24.h b/Chapter 13 The Compute Shader/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 13 The Compute Shader/Core/GameCore.cpp b/Chapter 13 The Compute Shader/Core/GameCore.cpp new file mode 100644 index 0000000..80ad66b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/GameCore.cpp @@ -0,0 +1,182 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize((UINT)(UINT64)lParam & 0xFFFF, (UINT)(UINT64)lParam >> 16); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 13 The Compute Shader/Core/GameCore.h b/Chapter 13 The Compute Shader/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/GameInput.cpp b/Chapter 13 The Compute Shader/Core/GameInput.cpp new file mode 100644 index 0000000..5a0431b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/GameInput.cpp @@ -0,0 +1,581 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} diff --git a/Chapter 13 The Compute Shader/Core/GameInput.h b/Chapter 13 The Compute Shader/Core/GameInput.h new file mode 100644 index 0000000..c9b017e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/GameInput.h @@ -0,0 +1,195 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Camera.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..b3faa09 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Camera.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Camera.h b/Chapter 13 The Compute Shader/Core/Graphics/Camera.h new file mode 100644 index 0000000..ff2e782 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Camera.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + const Vector3 GetForwardVec() const { return -m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Color.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Color.h b/Chapter 13 The Compute Shader/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..d4dc1b3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,616 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.h b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..ec9477c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,761 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.h b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Command/readme_command.txt b/Chapter 13 The Compute Shader/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.cpp b/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..c608007 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,143 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.h b/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.cpp b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.h b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.cpp b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.h b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.h b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.h b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.h b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..0a1d6be --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..1c94d8f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/EsramAllocator.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuResource.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Resource/readme_resource.txt b/Chapter 13 The Compute Shader/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..f8e3414 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,73 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.cpp b/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.h b/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 13 The Compute Shader/Core/Graphics/Texture/dds.h b/Chapter 13 The Compute Shader/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 13 The Compute Shader/Core/Graphics/d3dx12.h b/Chapter 13 The Compute Shader/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 13 The Compute Shader/Core/Hash.h b/Chapter 13 The Compute Shader/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 13 The Compute Shader/Core/Math/BoundingPlane.h b/Chapter 13 The Compute Shader/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Math/BoundingSphere.h b/Chapter 13 The Compute Shader/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Math/Common.h b/Chapter 13 The Compute Shader/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Frustum.cpp b/Chapter 13 The Compute Shader/Core/Math/Frustum.cpp new file mode 100644 index 0000000..e72fb09 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Frustum.cpp @@ -0,0 +1,116 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, -NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, -NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, -NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, -NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, -FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, -FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, -FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, -FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = -NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = -NVy * VTan; + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum( const Matrix4& ProjMat ) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / ProjMatF[10]; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // Perspective + float NearClip, FarClip; + + if (RcpZZ > 0.0f) // Reverse Z + { + FarClip = ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + } + else + { + NearClip = ProjMatF[14] * RcpZZ; + FarClip = NearClip / (RcpZZ + 1.0f); + } + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Frustum.h b/Chapter 13 The Compute Shader/Core/Math/Frustum.h new file mode 100644 index 0000000..65093d9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix ); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Math/Functions.inl b/Chapter 13 The Compute Shader/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Math/Matrix3.h b/Chapter 13 The Compute Shader/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Math/Matrix4.h b/Chapter 13 The Compute Shader/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Quaternion.h b/Chapter 13 The Compute Shader/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Random.cpp b/Chapter 13 The Compute Shader/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Random.h b/Chapter 13 The Compute Shader/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 13 The Compute Shader/Core/Math/Scalar.h b/Chapter 13 The Compute Shader/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Math/Transform.h b/Chapter 13 The Compute Shader/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 13 The Compute Shader/Core/Math/Vector.h b/Chapter 13 The Compute Shader/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoRender1CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoRender2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AoRenderCS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/AverageLumaCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BlurCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/BufferCopyPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFCommon.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPass1CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/FXAARootSignature.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/LightingUtil.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 13 The Compute Shader/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticlePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleUtility.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ParticleVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PostEffectsRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PresentHDRPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PresentRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 13 The Compute Shader/Core/Shaders/PresentSDRPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ResolveTAACS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/SSAORS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ShaderUtility.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/SharpenTAACS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TemporalRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TextRS.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TextShadowPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/TextVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ToneMap2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ToneMapCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 13 The Compute Shader/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 13 The Compute Shader/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 13 The Compute Shader/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 13 The Compute Shader/Core/Shaders/billboardGS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/billboardPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/billboardVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/blurHorzCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/blurVertCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/compositeCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/defaultPS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/defaultVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/sobelCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/vecAdd.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/waveDisturbCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/waveUpdateCS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/Shaders/waveVS.hlsl b/Chapter 13 The Compute Shader/Core/Shaders/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Shaders/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/SystemTime.cpp b/Chapter 13 The Compute Shader/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 13 The Compute Shader/Core/SystemTime.h b/Chapter 13 The Compute Shader/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 13 The Compute Shader/Core/Utility.cpp b/Chapter 13 The Compute Shader/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 13 The Compute Shader/Core/Utility.h b/Chapter 13 The Compute Shader/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 13 The Compute Shader/Core/VectorMath.h b/Chapter 13 The Compute Shader/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 13 The Compute Shader/Core/pch.cpp b/Chapter 13 The Compute Shader/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 13 The Compute Shader/Core/pch.h b/Chapter 13 The Compute Shader/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 13 The Compute Shader/Core/sobelFilter.cpp b/Chapter 13 The Compute Shader/Core/sobelFilter.cpp new file mode 100644 index 0000000..3083ec3 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/sobelFilter.cpp @@ -0,0 +1,65 @@ +#include "sobelFilter.h" +#include "CommandContext.h" + +#include "CompiledShaders/sobelCS.h" +#include "CompiledShaders/compositeCS.h" + +void SobelFilter::init(DXGI_FORMAT format) +{ + _format = format; + + // ������ǩ�� + _rootSignature.Reset(2, 0); + _rootSignature[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + _rootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + _rootSignature.Finalize(L"sobel RS"); + + // ����PSO + _sobelPSO.SetRootSignature(_rootSignature); + _sobelPSO.SetComputeShader(g_psobelCS, sizeof(g_psobelCS)); + _sobelPSO.Finalize(); + + _compositePSO.SetRootSignature(_rootSignature); + _compositePSO.SetComputeShader(g_pcompositeCS, sizeof(g_pcompositeCS)); + _compositePSO.Finalize(); +} + +void SobelFilter::destroy() +{ + _buffer.Destroy(); +} + +void SobelFilter::update(int w, int h) +{ + if (_w == h || _h == h) + return; + + _w = w; + _h = h; + _buffer.Create(L"sobel buffer", _w, _h, 1, _format); +} + +void SobelFilter::doSobel(ColorBuffer& inBuff) +{ + ComputeContext& context = ComputeContext::Begin(L"sobel"); + + context.SetRootSignature(_rootSignature); + + // �������Ϊд�룬�Ѽ������ֵ�����_buffer�� + context.SetPipelineState(_sobelPSO); + context.TransitionResource(inBuff, D3D12_RESOURCE_STATE_GENERIC_READ); + context.SetDynamicDescriptor(0, 0, inBuff.GetSRV()); + context.TransitionResource(_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(1, 0, _buffer.GetUAV()); + context.Dispatch((UINT)ceilf(_w / 16.0f), (UINT)ceilf(_h / 16.0f), 1); + + // �ٰ�_buffer��Ϊ���룬inBuff��Ϊ������������ + context.SetPipelineState(_compositePSO); + context.TransitionResource(_buffer, D3D12_RESOURCE_STATE_GENERIC_READ); + context.SetDynamicDescriptor(0, 0, _buffer.GetSRV()); + context.TransitionResource(inBuff, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(1, 0, inBuff.GetUAV()); + context.Dispatch((UINT)ceilf(_w / 256.0f), _h, 1); + + context.Finish(true); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Core/sobelFilter.h b/Chapter 13 The Compute Shader/Core/sobelFilter.h new file mode 100644 index 0000000..70625e1 --- /dev/null +++ b/Chapter 13 The Compute Shader/Core/sobelFilter.h @@ -0,0 +1,30 @@ +#pragma once + +#include "GameCore.h" +#include "ColorBuffer.h" +#include "RootSignature.h" +#include "PipelineState.h" + +class SobelFilter +{ +public: + SobelFilter() = default; + +public: + void init(DXGI_FORMAT format); + void destroy(); + + void update(int w, int h); + void doSobel(ColorBuffer& inBuff); + +private: + int _w = 0; + int _h = 0; + DXGI_FORMAT _format; + + ColorBuffer _buffer; + + RootSignature _rootSignature; + ComputePSO _sobelPSO; + ComputePSO _compositePSO; +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/GameApp.cpp b/Chapter 13 The Compute Shader/GameApp.cpp new file mode 100644 index 0000000..0167eb8 --- /dev/null +++ b/Chapter 13 The Compute Shader/GameApp.cpp @@ -0,0 +1,729 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GeometryGenerator.h" + +#include +#include +#include +#include "GameInput.h" +#include "ReadbackBuffer.h" +#include "CompiledShaders/defaultVS.h" +#include "CompiledShaders/defaultPS.h" +#include "CompiledShaders/billboardVS.h" +#include "CompiledShaders/billboardGS.h" +#include "CompiledShaders/billboardPS.h" +#include "CompiledShaders/vecAdd.h" +#include "CompiledShaders/waveVS.h" + +static float RandF() +{ + return (float)(rand()) / (float)RAND_MAX; +} + +// Returns random float in [a, b). +static float RandF(float a, float b) +{ + return a + RandF() * (b - a); +} + +static int Rand(int a, int b) +{ + return a + rand() % ((b - a) + 1); +} + +void GameApp::Startup(void) +{ + buildLandGeo(); + buildBoxGeo(); + buildWavesGeo(); + buildTreeGeo(); + buildMaterials(); + buildRenderItem(); +// testComputerWork(); + m_waves.init(); + m_blurFilter.init(Graphics::g_SceneColorBuffer.GetFormat()); + m_sobelFilter.init(Graphics::g_SceneColorBuffer.GetFormat()); + + Graphics::g_SceneColorBuffer.SetClearColor({ 0.7f, 0.7f, 0.7f }); + + // ��ǩ�� + m_RootSignature.Reset(5, 3); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerAnisoWrapDesc, D3D12_SHADER_VISIBILITY_PIXEL); + m_RootSignature.InitStaticSampler(1, Graphics::SamplerLinearWrapDesc, D3D12_SHADER_VISIBILITY_VERTEX); + m_RootSignature.InitStaticSampler(2, Graphics::SamplerPointClampDesc, D3D12_SHADER_VISIBILITY_VERTEX); + m_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + m_RootSignature[1].InitAsConstantBuffer(1, D3D12_SHADER_VISIBILITY_ALL); + m_RootSignature[2].InitAsConstantBuffer(2, D3D12_SHADER_VISIBILITY_PIXEL); + m_RootSignature[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + m_RootSignature[4].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1, 1); + m_RootSignature.Finalize(L"box signature", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 } + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + // Ĭ��PSO + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdefaultVS, sizeof(g_pdefaultVS)); + defaultPSO.SetPixelShader(g_pdefaultPS, sizeof(g_pdefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + // alpha test PSO + // ���ڱ�������һЩ����͸���ģ�Ҫ����ʾ������Ķ��� + GraphicsPSO alphaTestPSO = defaultPSO; + auto raster = Graphics::RasterizerDefaultCw; + raster.CullMode = D3D12_CULL_MODE_NONE; + alphaTestPSO.SetRasterizerState(raster); + alphaTestPSO.Finalize(); + m_mapPSO[E_EPT_ALPHATEST] = alphaTestPSO; + + // ͸��PSO ���ư�͸���ľ��� + GraphicsPSO transparencyPSO = defaultPSO; + auto blend = Graphics::BlendTraditional; + // Ŀ���alpha��0������͸��ȥ��Ŀ��Ͳ��ٱ䵭�� + blend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_ZERO; + transparencyPSO.SetBlendState(blend); + transparencyPSO.Finalize(); + m_mapPSO[E_EPT_TRANSPARENT] = transparencyPSO; + + // �����PSO + GraphicsPSO billboardPSO = defaultPSO; + billboardPSO.SetRasterizerState(Graphics::RasterizerDefaultCwMsaa); + blend = Graphics::BlendDisable; + blend.AlphaToCoverageEnable = true; + billboardPSO.SetBlendState(blend); + D3D12_INPUT_ELEMENT_DESC mInputLayoutBB[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "SIZE", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + }; + billboardPSO.SetInputLayout(_countof(mInputLayoutBB), mInputLayoutBB); + billboardPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT); + billboardPSO.SetVertexShader(g_pbillboardVS, sizeof(g_pbillboardVS)); + billboardPSO.SetGeometryShader(g_pbillboardGS, sizeof(g_pbillboardGS)); + billboardPSO.SetPixelShader(g_pbillboardPS, sizeof(g_pbillboardPS)); + billboardPSO.Finalize(); + m_mapPSO[E_EPT_BILLBOARD] = billboardPSO; + + // GPU����ˮ�嶥��PSO + GraphicsPSO gpuWavesPSO = transparencyPSO; + gpuWavesPSO.SetVertexShader(g_pwaveVS, sizeof(g_pwaveVS)); + gpuWavesPSO.Finalize(); + m_mapPSO[E_EPT_GPUWAVES] = gpuWavesPSO; +} + +void GameApp::Cleanup(void) +{ + m_mapGeometries.clear(); + m_mapMaterial.clear(); + m_mapPSO.clear(); + + m_vecAll.clear(); + + m_waves.Destory(); + m_blurFilter.destory(); + m_sobelFilter.destroy(); +} + +void GameApp::Update(float deltaT) +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius* cosf(m_yRotate)* sinf(m_xRotate); + float y = m_radius* sinf(m_yRotate); + float z = -m_radius* cosf(m_yRotate)* cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); + + UpdateWaves(deltaT); + m_blurFilter.update(Graphics::g_DisplayWidth, Graphics::g_DisplayHeight); + m_sobelFilter.update(Graphics::g_DisplayWidth, Graphics::g_DisplayHeight); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + // ���ø�ǩ�� + gfxContext.SetRootSignature(m_RootSignature); + + // ������ʾ����ij��������� + setLightContantsBuff(gfxContext); + gfxContext.SetDynamicDescriptor(4, 0, m_waves.getWavesBuffer().GetSRV()); + + // ��ʼ���� + // ����½�� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // �������� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_ALPHATEST]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::AlphaTest]); + + // ���ƹ������� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_BILLBOARD]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::AlphaTestedTreeSprites]); + + // ����GPU���¶����ˮ�壬��͸�� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_GPUWAVES]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::gpuWaves]); + + // ����͸������ + gfxContext.SetPipelineState(m_mapPSO[E_EPT_TRANSPARENT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Transparent]); + + if (g_blurCount || g_sobel) + { + // �Ȱ��ϱߵĻ������� + gfxContext.Flush(true); + + if (g_blurCount) + { + // ��ʼģ������ + m_blurFilter.doBlur(Graphics::g_SceneColorBuffer, g_blurCount); + gfxContext.CopyBuffer(Graphics::g_SceneColorBuffer, m_blurFilter.getOutBuffer()); + } + + if (g_sobel) + { + // ��ʼ��� + m_sobelFilter.doSobel(Graphics::g_SceneColorBuffer); + } + } + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + if (item->geo->bDynamicVertex) + { + gfxContext.SetDynamicVB(0, item->geo->vecVertex.size(), sizeof(Vertex), item->geo->vecVertex.data()); + } + else + { + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + } + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + obc.texTransform = item->texTransform; + obc.matTransform = Transpose(item->matTransform); + obc.DisplacementMapTexelSize = item->DisplacementMapTexelSize; + obc.GridSpatialStep = item->GridSpatialStep; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + // ������ȾĿ���������ͼ + gfxContext.SetDynamicDescriptor(3, 0, item->mat->srv); + + // ������ȾĿ����������� + MaterialConstants mc; + mc.DiffuseAlbedo = item->mat->diffuseAlbedo; + mc.FresnelR0 = item->mat->fresnelR0; + mc.Roughness = item->mat->roughness; + gfxContext.SetDynamicConstantBufferView(2, sizeof(mc), &mc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::setLightContantsBuff(GraphicsContext& gfxContext) +{ + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.0f, -1.0f, -1.0f }; + psc.Lights[0].Strength = { 1.0f, 1.0f, 0.9f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); +} + +void GameApp::buildLandGeo() +{ + GeometryGenerator geoGen; + GeometryGenerator::MeshData grid = geoGen.CreateGrid(160.0f, 160.0f, 50, 50); + + // + // Extract the vertex elements we are interested and apply the height function to + // each vertex. In addition, color the vertices based on their height so we have + // sandy looking beaches, grassy low hills, and snow mountain peaks. + // + + std::vector vertices(grid.Vertices.size()); + for (size_t i = 0; i < grid.Vertices.size(); ++i) + { + auto& p = grid.Vertices[i].Position; + vertices[i].Pos = p; + vertices[i].Pos.y = GetHillsHeight(p.x, p.z); + vertices[i].Normal = GetHillsNormal(p.x, p.z); + vertices[i].TexC = grid.Vertices[i].TexC; + } + + std::vector indices = grid.GetIndices16(); + + auto geo = std::make_unique(); + geo->name = "landGeo"; + + geo->createVertex(L"landGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"landGeo index", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["land"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildBoxGeo() +{ + GeometryGenerator geoGen; + GeometryGenerator::MeshData box = geoGen.CreateBox(8.0f, 8.0f, 8.0f, 3); + auto totalVertexCount = box.Vertices.size(); + + std::vector vertices(totalVertexCount); + + UINT k = 0; + for (size_t i = 0; i < box.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = box.Vertices[i].Position; + vertices[k].Normal = box.Vertices[i].Normal; + vertices[k].TexC = box.Vertices[i].TexC; + } + + std::vector indices; + indices.insert(indices.end(), std::begin(box.GetIndices16()), std::end(box.GetIndices16())); + + auto geo = std::make_unique(); + geo->name = "boxGeo"; + + geo->createVertex(L"boxGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"boxGeo index", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["box"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildWavesGeo() +{ + GeometryGenerator geoGen; + GeometryGenerator::MeshData grid = geoGen.CreateGrid(160.0f, 160.0f, m_waves.RowCount(), m_waves.ColumnCount()); + + std::vector vertices(grid.Vertices.size()); + for (size_t i = 0; i < grid.Vertices.size(); ++i) + { + vertices[i].Pos = grid.Vertices[i].Position; + vertices[i].Normal = grid.Vertices[i].Normal; + vertices[i].TexC = grid.Vertices[i].TexC; + } + + std::vector indices = grid.Indices32; + + auto geo = std::make_unique(); + geo->name = "wavesGeo"; + + geo->createVertex(L"wavesGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"wavesGeo index", (UINT)indices.size(), sizeof(std::uint32_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["wave"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildTreeGeo() +{ + struct TreeSpriteVertex + { + XMFLOAT3 Pos; + XMFLOAT2 Size; + }; + + static const int treeCount = 16; + std::vector vertices(treeCount); + for (UINT i = 0; i < treeCount; ++i) + { + float x = RandF(-45.0f, 45.0f); + float z = RandF(-45.0f, 45.0f); + float y = GetHillsHeight(x, z); + + // Move tree slightly above land height. + y += 8.0f; + + vertices[i].Pos = XMFLOAT3(x, y, z); + vertices[i].Size = XMFLOAT2(20.0f, 20.0f); + } + + std::vector indices(treeCount); + for (int i = 0; i < treeCount; ++i) + indices[i] = i; + + auto geo = std::make_unique(); + geo->name = "treeSpritesGeo"; + + geo->createVertex(L"treeGeo vertex", (UINT)vertices.size(), sizeof(TreeSpriteVertex), vertices.data()); + geo->createIndex(L"treeGeo index", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["points"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + TextureManager::Initialize(L"Textures/"); + + auto grass = std::make_unique(); + grass->name = "grass"; + grass->diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; + grass->fresnelR0 = { 0.01f, 0.01f, 0.01f }; + grass->roughness = 0.1255f; + grass->srv = TextureManager::LoadFromFile(L"grass", true)->GetSRV(); + + auto water = std::make_unique(); + water->name = "water"; + water->diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 0.5f }; + water->fresnelR0 = { 0.12f, 0.1f, 0.1f }; + water->roughness = 0.0f; + water->srv = TextureManager::LoadFromFile(L"water1", true)->GetSRV(); + + auto wireFence = std::make_unique(); + wireFence->name = "wireFence"; + wireFence->diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 0.3f }; + wireFence->fresnelR0 = { 0.1f, 0.1f, 0.1f }; + wireFence->roughness = 0.25f; + wireFence->srv = TextureManager::LoadFromFile(L"WireFence", true)->GetSRV(); + + auto treeSprites = std::make_unique(); + treeSprites->name = "treeSprites"; + treeSprites->diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; + treeSprites->fresnelR0 = { 0.01f, 0.01f, 0.01f }; + treeSprites->roughness = 0.125f; + treeSprites->srv = TextureManager::LoadFromFile(L"treeArray2", true)->GetSRV(); + + m_mapMaterial[grass->name] = std::move(grass); + m_mapMaterial[water->name] = std::move(water); + m_mapMaterial[wireFence->name] = std::move(wireFence); + m_mapMaterial[treeSprites->name] = std::move(treeSprites); +} + +void GameApp::buildRenderItem() +{ + // ½�� + auto landRItem = std::make_unique(); + landRItem->texTransform = Math::Transpose(Math::Matrix4(Math::AffineTransform(Math::Matrix3::MakeScale(5.0f, 5.0f, 1.0f)))); + landRItem->IndexCount = m_mapGeometries["landGeo"]->geoMap["land"].IndexCount; + landRItem->StartIndexLocation = m_mapGeometries["landGeo"]->geoMap["land"].StartIndexLocation; + landRItem->BaseVertexLocation = m_mapGeometries["landGeo"]->geoMap["land"].BaseVertexLocation; + landRItem->geo = m_mapGeometries["landGeo"].get(); + landRItem->mat = m_mapMaterial["grass"].get(); + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(landRItem.get()); + + // ���� + auto boxRItem = std::make_unique(); + boxRItem->modeToWorld = Math::Transpose(Math::Matrix4(Math::AffineTransform(Math::Vector3{ 3.0f, 2.0f, -9.0f }))); + boxRItem->IndexCount = m_mapGeometries["boxGeo"]->geoMap["box"].IndexCount; + boxRItem->StartIndexLocation = m_mapGeometries["boxGeo"]->geoMap["box"].StartIndexLocation; + boxRItem->BaseVertexLocation = m_mapGeometries["boxGeo"]->geoMap["box"].BaseVertexLocation; + boxRItem->geo = m_mapGeometries["boxGeo"].get(); + boxRItem->mat = m_mapMaterial["wireFence"].get(); + m_vecRenderItems[(int)RenderLayer::AlphaTest].push_back(boxRItem.get()); + + // ��ˮ + auto waterRItem = std::make_unique(); + waterRItem->texTransform = Math::Transpose(Math::Matrix4(Math::AffineTransform(Math::Matrix3::MakeScale(5.0f, 5.0f, 1.0f)))); + waterRItem->DisplacementMapTexelSize.x = 1.0f / m_waves.ColumnCount(); + waterRItem->DisplacementMapTexelSize.y = 1.0f / m_waves.RowCount(); + waterRItem->GridSpatialStep = m_waves.SpatialStep(); + waterRItem->IndexCount = m_mapGeometries["wavesGeo"]->geoMap["wave"].IndexCount; + waterRItem->StartIndexLocation = m_mapGeometries["wavesGeo"]->geoMap["wave"].StartIndexLocation; + waterRItem->BaseVertexLocation = m_mapGeometries["wavesGeo"]->geoMap["wave"].BaseVertexLocation; + waterRItem->geo = m_mapGeometries["wavesGeo"].get(); + waterRItem->mat = m_mapMaterial["water"].get(); + m_pWaveRItem = waterRItem.get(); + m_vecRenderItems[(int)RenderLayer::gpuWaves].push_back(waterRItem.get()); + + auto treeSpritesRitem = std::make_unique(); + treeSpritesRitem->IndexCount = m_mapGeometries["treeSpritesGeo"]->geoMap["points"].IndexCount; + treeSpritesRitem->StartIndexLocation = m_mapGeometries["treeSpritesGeo"]->geoMap["points"].StartIndexLocation; + treeSpritesRitem->BaseVertexLocation = m_mapGeometries["treeSpritesGeo"]->geoMap["points"].BaseVertexLocation; + treeSpritesRitem->geo = m_mapGeometries["treeSpritesGeo"].get(); + treeSpritesRitem->mat = m_mapMaterial["treeSprites"].get(); + treeSpritesRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; + m_vecRenderItems[(int)RenderLayer::AlphaTestedTreeSprites].push_back(treeSpritesRitem.get()); + + m_vecAll.push_back(std::move(landRItem)); + m_vecAll.push_back(std::move(boxRItem)); + m_vecAll.push_back(std::move(waterRItem)); + m_vecAll.push_back(std::move(treeSpritesRitem)); +} + +float GameApp::GetHillsHeight(float x, float z) const +{ + return 0.3f * (z * sinf(0.1f * x) + x * cosf(0.1f * z)); +} + +DirectX::XMFLOAT3 GameApp::GetHillsNormal(float x, float z)const +{ + // n = (-df/dx, 1, -df/dz) + XMFLOAT3 n( + -0.03f * z * cosf(0.1f * x) - 0.3f * cosf(0.1f * z), + 1.0f, + -0.3f * sinf(0.1f * x) + 0.03f * x * sinf(0.1f * z)); + + XMVECTOR unitNormal = XMVector3Normalize(XMLoadFloat3(&n)); + XMStoreFloat3(&n, unitNormal); + + return n; +} + +void GameApp::UpdateWaves(float deltaT) +{ + // Every quarter second, generate a random wave. + static float t_base = 0.0f; + if (t_base >= 0.25f) + { + t_base -= 0.25f; + + + int i = Rand(4, m_waves.RowCount() - 5); + int j = Rand(4, m_waves.ColumnCount() - 5); + + float r = RandF(0.2f, 0.5f); + + m_waves.Disturb(i, j, r); + } + else + { + t_base += deltaT; + } + + // Update the wave simulation. + m_waves.Update(deltaT); + + AnimateMaterials(deltaT); +} + +void GameApp::AnimateMaterials(float deltaT) +{ + // Scroll the water material texture coordinates. + float tu = (float)m_pWaveRItem->matTransform.GetW().GetX(); + float tv = (float)m_pWaveRItem->matTransform.GetW().GetY(); + + tu += 0.1f * deltaT; + tv += 0.02f * deltaT; + + if (tu >= 1.0f) + tu -= 1.0f; + + if (tv >= 1.0f) + tv -= 1.0f; + + m_pWaveRItem->matTransform.SetW({ tu, tv, 0.0f, 1.0f }); +} + +void GameApp::testComputerWork() +{ + // �������� + int nCount = 32; + + // 0. ׼���������� + struct Data + { + XMFLOAT3 v1; + XMFLOAT2 v2; + }; + std::vector dataA(nCount); + std::vector dataB(nCount); + for (int i = 0; i < nCount; ++i) + { + float iii = (float)i; + dataA[i].v1 = XMFLOAT3(iii, iii, iii); + dataA[i].v2 = XMFLOAT2(iii, 0.0f); + + dataB[i].v1 = XMFLOAT3(-iii, iii, 0.0f); + dataB[i].v2 = XMFLOAT2(0.0f, -iii); + } + + // 1. ��������Ĭ�ϻ�����������CS������ + StructuredBuffer bufferA, bufferB; + bufferA.Create(L"bufferA", nCount, sizeof(Data), dataA.data()); + bufferB.Create(L"bufferB", nCount, sizeof(Data), dataB.data()); + + // 2. ����һ����������������ڱ���CS����� + ByteAddressBuffer bufferOut; + bufferOut.Create(L"bufferOut", nCount, sizeof(Data)); + + // 3. ����һ����д�����������ڽ����ϱߵ����� + ReadbackBuffer bufferRB; + bufferRB.Create(L"bufferRB", nCount, sizeof(Data)); + + // 4. ������Ӧ�ĸ�ǩ�� + RootSignature rootSignature; + rootSignature.Reset(3, 0); + rootSignature[0].InitAsBufferSRV(0); + rootSignature[1].InitAsBufferSRV(1); + rootSignature[2].InitAsBufferUAV(0); + rootSignature.Finalize(L"test CS"); + + // 5. ����PSO + ComputePSO pso; + pso.SetRootSignature(rootSignature); + pso.SetComputeShader(g_pvecAdd, sizeof(g_pvecAdd)); + pso.Finalize(); + + // 6. ����һ������������Ļ���׼������ + ComputeContext& context = ComputeContext::Begin(L"test CS"); + + // 7. ���ø�ǩ������Ⱦ��ˮ�ߡ����롢��� + context.SetRootSignature(rootSignature); + context.SetPipelineState(pso); + context.SetBufferSRV(0, bufferA); + context.SetBufferSRV(1, bufferB); + + context.TransitionResource(bufferOut, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetBufferUAV(2, bufferOut); + + // 8. �������� ��Ҫ32���̣߳�ÿ����32���̣߳�Ҳ������Ҫ1���߳��� + context.Dispatch1D(32, 32); + + // 9. ������������ + context.CopyBuffer(bufferRB, bufferOut); + + // 10. ��ʼִ�� + context.Finish(true); + + // 11. �����ص�����д���ļ� + Data* mappedData = (Data*)bufferRB.Map(); + + std::ofstream fout("results.txt"); + + for (int i = 0; i < nCount; ++i) + { + fout << "(" << mappedData[i].v1.x << ", " << mappedData[i].v1.y << ", " << mappedData[i].v1.z << + ", " << mappedData[i].v2.x << ", " << mappedData[i].v2.y << ")" << std::endl; + } + + bufferRB.Unmap(); + + // end. �ͷŻ����� + bufferA.Destroy(); + bufferB.Destroy(); + bufferOut.Destroy(); + bufferRB.Destroy(); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/GameApp.h b/Chapter 13 The Compute Shader/GameApp.h new file mode 100644 index 0000000..09541a2 --- /dev/null +++ b/Chapter 13 The Compute Shader/GameApp.h @@ -0,0 +1,111 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "Waves.h" +#include "BlurFilter.h" +#include "sobelFilter.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + +private: + void buildLandGeo(); + void buildBoxGeo(); + void buildWavesGeo(); + void buildTreeGeo(); + void buildMaterials(); + void buildRenderItem(); + + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + void setLightContantsBuff(GraphicsContext& gfxContext); + +private: + float GetHillsHeight(float x, float z) const; + DirectX::XMFLOAT3 GetHillsNormal(float x, float z) const; + void UpdateWaves(float deltaT); + void AnimateMaterials(float deltaT); + +private: + void testComputerWork(); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + // ����map + std::unordered_map> m_mapMaterial; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + AlphaTest, + Transparent, + AlphaTestedTreeSprites, + gpuWaves, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_ALPHATEST, + E_EPT_TRANSPARENT, + E_EPT_BILLBOARD, + E_EPT_GPUWAVES, + }; + std::unordered_map m_mapPSO; + + // ˮ���� + Waves m_waves{ 256, 256, 0.25f, 0.03f, 2.0f, 0.2f }; + RenderItem* m_pWaveRItem = nullptr; + + // ģ��Ч������ + BlurFilter m_blurFilter; + // sobel��� + SobelFilter m_sobelFilter; + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // �뾶 + float m_radius = 120.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/GeometryGenerator.cpp b/Chapter 13 The Compute Shader/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 13 The Compute Shader/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 13 The Compute Shader/GeometryGenerator.h b/Chapter 13 The Compute Shader/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 13 The Compute Shader/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 13 The Compute Shader/Textures/WireFence.dds b/Chapter 13 The Compute Shader/Textures/WireFence.dds new file mode 100644 index 0000000..fde7cc3 Binary files /dev/null and b/Chapter 13 The Compute Shader/Textures/WireFence.dds differ diff --git a/Chapter 13 The Compute Shader/Textures/grass.dds b/Chapter 13 The Compute Shader/Textures/grass.dds new file mode 100644 index 0000000..3088c1a Binary files /dev/null and b/Chapter 13 The Compute Shader/Textures/grass.dds differ diff --git a/Chapter 13 The Compute Shader/Textures/treeArray2.dds b/Chapter 13 The Compute Shader/Textures/treeArray2.dds new file mode 100644 index 0000000..7396aef Binary files /dev/null and b/Chapter 13 The Compute Shader/Textures/treeArray2.dds differ diff --git a/Chapter 13 The Compute Shader/Textures/water1.dds b/Chapter 13 The Compute Shader/Textures/water1.dds new file mode 100644 index 0000000..b85f7d6 Binary files /dev/null and b/Chapter 13 The Compute Shader/Textures/water1.dds differ diff --git a/Chapter 13 The Compute Shader/Waves.cpp b/Chapter 13 The Compute Shader/Waves.cpp new file mode 100644 index 0000000..b30540c --- /dev/null +++ b/Chapter 13 The Compute Shader/Waves.cpp @@ -0,0 +1,168 @@ +//*************************************************************************************** +// Waves.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "Waves.h" +#include +#include +#include +#include +#include +#include "CommandContext.h" +#include "ReadbackBuffer.h" + +#include "CompiledShaders/waveDisturbCS.h" +#include "CompiledShaders/waveUpdateCS.h" + +using namespace DirectX; + +Waves::Waves(int m, int n, float dx, float dt, float speed, float damping) +{ + mNumRows = m; + mNumCols = n; + + mVertexCount = m*n; + mTriangleCount = (m - 1)*(n - 1) * 2; + + mTimeStep = dt; + mSpatialStep = dx; + + float d = damping*dt + 2.0f; + float e = (speed*speed)*(dt*dt) / (dx*dx); + mK1 = (damping*dt - 2.0f) / d; + mK2 = (4.0f - 8.0f*e) / d; + mK3 = (2.0f*e) / d; +} + +Waves::~Waves() +{ +} + +void Waves::Destory() +{ + _bufferDisturb.Destroy(); + _bufferPre.Destroy(); + _bufferWaves.Destroy(); +} + +int Waves::RowCount()const +{ + return mNumRows; +} + +int Waves::ColumnCount()const +{ + return mNumCols; +} + +int Waves::VertexCount()const +{ + return mVertexCount; +} + +int Waves::TriangleCount()const +{ + return mTriangleCount; +} + +float Waves::Width()const +{ + return mNumCols*mSpatialStep; +} + +float Waves::Depth()const +{ + return mNumRows*mSpatialStep; +} + +float Waves::SpatialStep()const +{ + return mSpatialStep; +} + +void Waves::Update(float dt) +{ + static float t = 0; + + // Accumulate time. + t += dt; + + // Only update the simulation at the specified time step. + if( t >= mTimeStep ) + { + ComputeContext& context = ComputeContext::Begin(L"wave update"); + context.SetRootSignature(_updateRS); + context.SetPipelineState(_updatePSO); + + context.SetConstants(0, mK1, mK2, mK3); + context.TransitionResource(_bufferPre, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(1, 0, _bufferPre.GetUAV()); + context.TransitionResource(_bufferDisturb, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(2, 0, _bufferDisturb.GetUAV()); + context.TransitionResource(_bufferWaves, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(3, 0, _bufferWaves.GetUAV()); + + context.Dispatch(mNumCols / 16, mNumRows / 16, 1); + + context.Finish(true); + + auto buffer = _bufferPre; + _bufferPre = _bufferDisturb; + _bufferDisturb = _bufferWaves; + _bufferWaves = buffer; + + t = 0.0f; + } +} + +void Waves::Disturb(int i, int j, float magnitude) +{ + ComputeContext& context = ComputeContext::Begin(L"wave disturb"); + context.SetRootSignature(_disturbRS); + context.SetPipelineState(_disturbPSO); + // i=row, j=col����������Ҫ������ + context.SetConstants(0, magnitude, j, i); + + context.TransitionResource(_bufferDisturb, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + context.SetDynamicDescriptor(1, 0, _bufferDisturb.GetUAV()); + + context.Dispatch(1, 1, 1); + context.Finish(true); +} + +ColorBuffer& Waves::getWavesBuffer() +{ + return _bufferDisturb; +} + +void Waves::init() +{ + // �������˵ĸ�ǩ�� + _disturbRS.Reset(2, 0); + _disturbRS[0].InitAsConstants(0, 3); // 3��32λ�ij��� + _disturbRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); // �������ֵ + _disturbRS.Finalize(L"disturb RS"); + + // �������˵�PSO + _disturbPSO.SetRootSignature(_disturbRS); + _disturbPSO.SetComputeShader(g_pwaveDisturbCS, sizeof(g_pwaveDisturbCS)); + _disturbPSO.Finalize(); + + // �������²��˶���ĸ�ǩ�� + _updateRS.Reset(4, 0); + _updateRS[0].InitAsConstants(0, 3); + _updateRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + _updateRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 1, 1); + _updateRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 2, 1); + _updateRS.Finalize(L"update RS"); + + // �������²��˶����PSO + _updatePSO.SetRootSignature(_updateRS); + _updatePSO.SetComputeShader(g_pwaveUpdateCS, sizeof(g_pwaveUpdateCS)); + _updatePSO.Finalize(); + + // �洢disturb�������Ȼ����Ϊupdate������ + _bufferDisturb.Create(L"bufferOut", mNumCols, mNumRows, 1, DXGI_FORMAT_R32_FLOAT); + _bufferPre.Create(L"bufferPre", mNumCols, mNumRows, 1, DXGI_FORMAT_R32_FLOAT); + _bufferWaves.Create(L"bufferWaves", mNumCols, mNumRows, 1, DXGI_FORMAT_R32_FLOAT); +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/Waves.h b/Chapter 13 The Compute Shader/Waves.h new file mode 100644 index 0000000..9df9639 --- /dev/null +++ b/Chapter 13 The Compute Shader/Waves.h @@ -0,0 +1,70 @@ +//*************************************************************************************** +// Waves.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Performs the calculations for the wave simulation. After the simulation has been +// updated, the client must copy the current solution into vertex buffers for rendering. +// This class only does the calculations, it does not do any drawing. +//*************************************************************************************** + +#ifndef WAVES_H +#define WAVES_H + +#include +#include +#include "RootSignature.h" +#include "PipelineState.h" +#include "ColorBuffer.h" + +class Waves +{ +public: + Waves(int m, int n, float dx, float dt, float speed, float damping); + Waves(const Waves& rhs) = delete; + Waves& operator=(const Waves& rhs) = delete; + ~Waves(); + + int RowCount()const; + int ColumnCount()const; + int VertexCount()const; + int TriangleCount()const; + float Width()const; + float Depth()const; + float SpatialStep()const; + + void Update(float dt); + void Disturb(int i, int j, float magnitude); + ColorBuffer& getWavesBuffer(); + +public: + void init(); + void Destory(); + +private: + int mNumRows = 0; + int mNumCols = 0; + + int mVertexCount = 0; + int mTriangleCount = 0; + + // Simulation constants we can precompute. + float mK1 = 0.0f; + float mK2 = 0.0f; + float mK3 = 0.0f; + + float mTimeStep = 0.0f; + float mSpatialStep = 0.0f; + + // ������ɲ��˵ĸ�ǩ������ˮ�� + RootSignature _disturbRS; + ComputePSO _disturbPSO; + + // ���²��˶���ĸ�ǩ������ˮ�� + RootSignature _updateRS; + ComputePSO _updatePSO; + + ColorBuffer _bufferDisturb; // disturb�������ͬʱҲ��update������ + ColorBuffer _bufferPre; // ��¼��һ�εĶ�����Ϣ + ColorBuffer _bufferWaves; // update���ɵ����µĶ�����Ϣ +}; + +#endif // WAVES_H \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/d3dUtil.h b/Chapter 13 The Compute Shader/d3dUtil.h new file mode 100644 index 0000000..3eda0f7 --- /dev/null +++ b/Chapter 13 The Compute Shader/d3dUtil.h @@ -0,0 +1,161 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ģ������ +static int g_blurCount = 0; +static bool g_sobel = true; +static float flFrogAlpha = 0.1f; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +__declspec(align(16)) struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + DirectX::XMFLOAT2 DisplacementMapTexelSize = { 1.0f, 1.0f }; + float GridSpatialStep = 1.0f; + float Pad; +}; + +__declspec(align(16)) struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +__declspec(align(16)) struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; + float Roughness = 0.25f; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z, float nx, float ny, float nz, float u, float v) : + Pos(x, y, z), + Normal(nx, ny, nz), + TexC(u, v) {} + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + + bool bDynamicVertex = false; // �Ƿ�̬���� + std::vector vecVertex; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct Material +{ + std::string name; + + Math::Vector4 diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ������ϵ�� + Math::Vector3 fresnelR0 = { 0.01f, 0.01f, 0.01f }; // ����ϵ�� + float roughness = 0.25f; // �ֲڶ� + + D3D12_CPU_DESCRIPTOR_HANDLE srv; // ������ͼ +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // ����ת��������Ҫ���ڶ����Ӧ���������� + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); // ����������ƾ��󣬱���ͨ�������������̬�ƶ����� + + DirectX::XMFLOAT2 DisplacementMapTexelSize = { 1.0f, 1.0f }; + float GridSpatialStep = 1.0f; + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� + Material* mat = nullptr; // ����ָ�룬��������ȾĿ������������Լ�������ͼ +}; \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/main.cpp b/Chapter 13 The Compute Shader/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 13 The Compute Shader/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 13 The Compute Shader/packages.config b/Chapter 13 The Compute Shader/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 13 The Compute Shader/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj b/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj new file mode 100644 index 0000000..1645bda --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj @@ -0,0 +1,513 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {F8F4C4A2-671E-4D6C-A379-2AFB1BA33651} + Chapter14TheTessellationStages + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj.filters b/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj.filters new file mode 100644 index 0000000..7dbb129 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Chapter 14 The Tessellation Stages.vcxproj.filters @@ -0,0 +1,935 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/CameraController.cpp b/Chapter 14 The Tessellation Stages/Core/CameraController.cpp new file mode 100644 index 0000000..a5d681d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/CameraController.cpp @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(m_WorldUp, Vector3(kXUnitVector))); + m_WorldEast = Cross(m_WorldNorth, m_WorldUp); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 1000.0f; + m_StrafeSpeed = 1000.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(m_WorldUp, camera.GetRightVec())); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = false; + m_FineRotation = false; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // don't apply momentum to mouse inputs + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 14 The Tessellation Stages/Core/CameraController.h b/Chapter 14 The Tessellation Stages/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 14 The Tessellation Stages/Core/EngineProfiling.cpp b/Chapter 14 The Tessellation Stages/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 14 The Tessellation Stages/Core/EngineProfiling.h b/Chapter 14 The Tessellation Stages/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 14 The Tessellation Stages/Core/EngineTuning.cpp b/Chapter 14 The Tessellation Stages/Core/EngineTuning.cpp new file mode 100644 index 0000000..f5715ce --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp(log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 14 The Tessellation Stages/Core/EngineTuning.h b/Chapter 14 The Tessellation Stages/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 14 The Tessellation Stages/Core/FileUtility.cpp b/Chapter 14 The Tessellation Stages/Core/FileUtility.cpp new file mode 100644 index 0000000..5c417b5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (byte*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (byte*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/FileUtility.h b/Chapter 14 The Tessellation Stages/Core/FileUtility.h new file mode 100644 index 0000000..0fdd5f6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 14 The Tessellation Stages/Core/Fonts/consola24.h b/Chapter 14 The Tessellation Stages/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 14 The Tessellation Stages/Core/GameCore.cpp b/Chapter 14 The Tessellation Stages/Core/GameCore.cpp new file mode 100644 index 0000000..80ad66b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/GameCore.cpp @@ -0,0 +1,182 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize((UINT)(UINT64)lParam & 0xFFFF, (UINT)(UINT64)lParam >> 16); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/GameCore.h b/Chapter 14 The Tessellation Stages/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/GameInput.cpp b/Chapter 14 The Tessellation Stages/Core/GameInput.cpp new file mode 100644 index 0000000..5a0431b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/GameInput.cpp @@ -0,0 +1,581 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} diff --git a/Chapter 14 The Tessellation Stages/Core/GameInput.h b/Chapter 14 The Tessellation Stages/Core/GameInput.h new file mode 100644 index 0000000..c9b017e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/GameInput.h @@ -0,0 +1,195 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..b3faa09 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.h new file mode 100644 index 0000000..ff2e782 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Camera.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + const Vector3 GetForwardVec() const { return -m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Color.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Color.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..d4dc1b3 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,616 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..ec9477c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,761 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Command/readme_command.txt b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..c608007 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,143 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.h b/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.h b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.h b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..0a1d6be --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..1c94d8f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/EsramAllocator.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuResource.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/readme_resource.txt b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..f8e3414 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,73 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.cpp b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/dds.h b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 14 The Tessellation Stages/Core/Graphics/d3dx12.h b/Chapter 14 The Tessellation Stages/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 14 The Tessellation Stages/Core/Hash.h b/Chapter 14 The Tessellation Stages/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 14 The Tessellation Stages/Core/Math/BoundingPlane.h b/Chapter 14 The Tessellation Stages/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Math/BoundingSphere.h b/Chapter 14 The Tessellation Stages/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Common.h b/Chapter 14 The Tessellation Stages/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Frustum.cpp b/Chapter 14 The Tessellation Stages/Core/Math/Frustum.cpp new file mode 100644 index 0000000..e72fb09 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Frustum.cpp @@ -0,0 +1,116 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, -NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, -NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, -NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, -NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, -FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, -FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, -FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, -FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = -NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = -NVy * VTan; + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum( const Matrix4& ProjMat ) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / ProjMatF[10]; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // Perspective + float NearClip, FarClip; + + if (RcpZZ > 0.0f) // Reverse Z + { + FarClip = ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + } + else + { + NearClip = ProjMatF[14] * RcpZZ; + FarClip = NearClip / (RcpZZ + 1.0f); + } + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Frustum.h b/Chapter 14 The Tessellation Stages/Core/Math/Frustum.h new file mode 100644 index 0000000..65093d9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix ); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Functions.inl b/Chapter 14 The Tessellation Stages/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Matrix3.h b/Chapter 14 The Tessellation Stages/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Matrix4.h b/Chapter 14 The Tessellation Stages/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Quaternion.h b/Chapter 14 The Tessellation Stages/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Random.cpp b/Chapter 14 The Tessellation Stages/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Random.h b/Chapter 14 The Tessellation Stages/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Scalar.h b/Chapter 14 The Tessellation Stages/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Transform.h b/Chapter 14 The Tessellation Stages/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Math/Vector.h b/Chapter 14 The Tessellation Stages/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender1CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AoRenderCS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/AverageLumaCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BlurCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/BufferCopyPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCommon.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass1CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/FXAARootSignature.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUtility.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PostEffectsRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PresentHDRPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PresentRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/PresentSDRPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ResolveTAACS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/SSAORS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ShaderUtility.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/SharpenTAACS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TextRS.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TextShadowPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/TextVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMap2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/LightingUtil.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierDS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierHS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardGS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurVertCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/compositeCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/sobelCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessDS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessHS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessPS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/vecAdd.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveVS.hlsl b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Core/SystemTime.cpp b/Chapter 14 The Tessellation Stages/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 14 The Tessellation Stages/Core/SystemTime.h b/Chapter 14 The Tessellation Stages/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 14 The Tessellation Stages/Core/Utility.cpp b/Chapter 14 The Tessellation Stages/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 14 The Tessellation Stages/Core/Utility.h b/Chapter 14 The Tessellation Stages/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 14 The Tessellation Stages/Core/VectorMath.h b/Chapter 14 The Tessellation Stages/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 14 The Tessellation Stages/Core/pch.cpp b/Chapter 14 The Tessellation Stages/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 14 The Tessellation Stages/Core/pch.h b/Chapter 14 The Tessellation Stages/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 14 The Tessellation Stages/GameApp.cpp b/Chapter 14 The Tessellation Stages/GameApp.cpp new file mode 100644 index 0000000..7ddd879 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/GameApp.cpp @@ -0,0 +1,311 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include "CompiledShaders/tessVS.h" +#include "CompiledShaders/tessHS.h" +#include "CompiledShaders/tessDS.h" +#include "CompiledShaders/tessPS.h" + +#include "CompiledShaders/bezierVS.h" +#include "CompiledShaders/bezierHS.h" +#include "CompiledShaders/bezierDS.h" +#include "CompiledShaders/bezierPS.h" + +void GameApp::Startup(void) +{ + buildQuadPatchGeo(); + buildBezierGeo(); + buildRenderItem(); + + // ������ǩ�� + m_RootSignature.Reset(2, 0); + m_RootSignature[0].InitAsConstantBuffer(0); + m_RootSignature[1].InitAsConstantBuffer(1); + m_RootSignature.Finalize(L"tess RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 } + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + // ���� + auto raster = Graphics::RasterizerDefaultCw; + raster.FillMode = D3D12_FILL_MODE_WIREFRAME; + + // Ĭ��PSO + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(raster); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_ptessVS, sizeof(g_ptessVS)); + defaultPSO.SetHullShader(g_ptessHS, sizeof(g_ptessHS)); + defaultPSO.SetDomainShader(g_ptessDS, sizeof(g_ptessDS)); + defaultPSO.SetPixelShader(g_ptessPS, sizeof(g_ptessPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + + // �������������PSO + GraphicsPSO bezierPSO = defaultPSO; + bezierPSO.SetVertexShader(g_pbezierVS, sizeof(g_pbezierVS)); + bezierPSO.SetHullShader(g_pbezierHS, sizeof(g_pbezierHS)); + bezierPSO.SetDomainShader(g_pbezierDS, sizeof(g_pbezierDS)); + bezierPSO.SetPixelShader(g_pbezierPS, sizeof(g_pbezierPS)); + bezierPSO.Finalize(); + m_mapPSO[E_EPT_BEZIER] = bezierPSO; +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); +} + +void GameApp::Update(float deltaT) +{ + // �л���ȾĿ�� + if (GameInput::IsFirstPressed(GameInput::kKey_f1)) + m_bShowBezier = !m_bShowBezier; + + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius* cosf(m_yRotate)* sinf(m_xRotate); + float y = m_radius* sinf(m_yRotate); + float z = -m_radius* cosf(m_yRotate)* cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + if (!m_bShowBezier) + { + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + } + else + { + gfxContext.SetPipelineState(m_mapPSO[E_EPT_BEZIER]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Bezier]); + } + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::buildQuadPatchGeo() +{ + std::vector vertices = + { + XMFLOAT3(-10.0f, 0.0f, +10.0f), + XMFLOAT3(+10.0f, 0.0f, +10.0f), + XMFLOAT3(-10.0f, 0.0f, -10.0f), + XMFLOAT3(+10.0f, 0.0f, -10.0f) + }; + + std::vector indices = { 0, 1, 2, 3 }; + + auto geo = std::make_unique(); + geo->name = "quadpatchGeo"; + + geo->createVertex(L"quadpatchGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"quadpatchGeo index", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["quadpatch"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildBezierGeo() +{ + std::vector vertices = + { + // Row 0 + XMFLOAT3(-10.0f, -10.0f, +15.0f), + XMFLOAT3(-5.0f, 0.0f, +15.0f), + XMFLOAT3(+5.0f, 0.0f, +15.0f), + XMFLOAT3(+10.0f, 0.0f, +15.0f), + + // Row 1 + XMFLOAT3(-15.0f, 0.0f, +5.0f), + XMFLOAT3(-5.0f, 0.0f, +5.0f), + XMFLOAT3(+5.0f, 20.0f, +5.0f), + XMFLOAT3(+15.0f, 0.0f, +5.0f), + + // Row 2 + XMFLOAT3(-15.0f, 0.0f, -5.0f), + XMFLOAT3(-5.0f, 0.0f, -5.0f), + XMFLOAT3(+5.0f, 0.0f, -5.0f), + XMFLOAT3(+15.0f, 0.0f, -5.0f), + + // Row 3 + XMFLOAT3(-10.0f, 10.0f, -15.0f), + XMFLOAT3(-5.0f, 0.0f, -15.0f), + XMFLOAT3(+5.0f, 0.0f, -15.0f), + XMFLOAT3(+25.0f, 10.0f, -15.0f) + }; + + std::vector indices = + { + 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15 + }; + + auto geo = std::make_unique(); + geo->name = "bezierGeo"; + + geo->createVertex(L"bezierGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"bezierGeo index", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["quadpatch"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildRenderItem() +{ + auto quadPatchRitem = std::make_unique(); + quadPatchRitem->geo = m_mapGeometries["quadpatchGeo"].get(); + quadPatchRitem->PrimitiveType = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST; + quadPatchRitem->IndexCount = quadPatchRitem->geo->geoMap["quadpatch"].IndexCount; + quadPatchRitem->StartIndexLocation = quadPatchRitem->geo->geoMap["quadpatch"].StartIndexLocation; + quadPatchRitem->BaseVertexLocation = quadPatchRitem->geo->geoMap["quadpatch"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(quadPatchRitem.get()); + + auto bezierRitem = std::make_unique(); + bezierRitem->geo = m_mapGeometries["bezierGeo"].get(); + bezierRitem->PrimitiveType = D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST; + bezierRitem->IndexCount = bezierRitem->geo->geoMap["quadpatch"].IndexCount; + bezierRitem->StartIndexLocation = bezierRitem->geo->geoMap["quadpatch"].StartIndexLocation; + bezierRitem->BaseVertexLocation = bezierRitem->geo->geoMap["quadpatch"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Bezier].push_back(bezierRitem.get()); + + m_vecAll.push_back(std::move(quadPatchRitem)); + m_vecAll.push_back(std::move(bezierRitem)); +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/GameApp.h b/Chapter 14 The Tessellation Stages/GameApp.h new file mode 100644 index 0000000..1f7886c --- /dev/null +++ b/Chapter 14 The Tessellation Stages/GameApp.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + +private: + void buildQuadPatchGeo(); + void buildBezierGeo(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + Bezier = 1, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_BEZIER = 2, + }; + std::unordered_map m_mapPSO; + + bool m_bShowBezier = true; + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // �뾶 + float m_radius = 60.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/Textures/WireFence.dds b/Chapter 14 The Tessellation Stages/Textures/WireFence.dds new file mode 100644 index 0000000..fde7cc3 Binary files /dev/null and b/Chapter 14 The Tessellation Stages/Textures/WireFence.dds differ diff --git a/Chapter 14 The Tessellation Stages/Textures/grass.dds b/Chapter 14 The Tessellation Stages/Textures/grass.dds new file mode 100644 index 0000000..3088c1a Binary files /dev/null and b/Chapter 14 The Tessellation Stages/Textures/grass.dds differ diff --git a/Chapter 14 The Tessellation Stages/Textures/treeArray2.dds b/Chapter 14 The Tessellation Stages/Textures/treeArray2.dds new file mode 100644 index 0000000..7396aef Binary files /dev/null and b/Chapter 14 The Tessellation Stages/Textures/treeArray2.dds differ diff --git a/Chapter 14 The Tessellation Stages/Textures/water1.dds b/Chapter 14 The Tessellation Stages/Textures/water1.dds new file mode 100644 index 0000000..b85f7d6 Binary files /dev/null and b/Chapter 14 The Tessellation Stages/Textures/water1.dds differ diff --git a/Chapter 14 The Tessellation Stages/d3dUtil.h b/Chapter 14 The Tessellation Stages/d3dUtil.h new file mode 100644 index 0000000..85cff08 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/d3dUtil.h @@ -0,0 +1,94 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� +}; + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z) : + Pos(x, y, z) {} + + DirectX::XMFLOAT3 Pos; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� +}; \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/main.cpp b/Chapter 14 The Tessellation Stages/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 14 The Tessellation Stages/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 14 The Tessellation Stages/packages.config b/Chapter 14 The Tessellation Stages/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 14 The Tessellation Stages/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj b/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj new file mode 100644 index 0000000..ecd80b0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj @@ -0,0 +1,527 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {3F274302-4DA6-4653-BEA7-D8A4B0284FA4} + Chapter15FirstPersonCameraandDynamicIndexing + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj.filters b/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj.filters new file mode 100644 index 0000000..3244209 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Chapter 15 First Person Camera and Dynamic Indexing.vcxproj.filters @@ -0,0 +1,949 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.cpp new file mode 100644 index 0000000..f5715ce --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp(log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.cpp new file mode 100644 index 0000000..5c417b5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (byte*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (byte*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.h new file mode 100644 index 0000000..0fdd5f6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Fonts/consola24.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.cpp new file mode 100644 index 0000000..80ad66b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.cpp @@ -0,0 +1,182 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize((UINT)(UINT64)lParam & 0xFFFF, (UINT)(UINT64)lParam >> 16); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.cpp new file mode 100644 index 0000000..5a0431b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.cpp @@ -0,0 +1,581 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.h new file mode 100644 index 0000000..c9b017e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/GameInput.h @@ -0,0 +1,195 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..b3faa09 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.h new file mode 100644 index 0000000..ff2e782 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Camera.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + const Vector3 GetForwardVec() const { return -m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..d4dc1b3 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,616 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..ec9477c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,761 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/readme_command.txt b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..c608007 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,143 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..0a1d6be --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..1c94d8f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/EsramAllocator.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuResource.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/readme_resource.txt b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..f8e3414 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,73 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/dds.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/d3dx12.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Hash.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingPlane.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingSphere.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Common.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.cpp new file mode 100644 index 0000000..e72fb09 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.cpp @@ -0,0 +1,116 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, -NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, -NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, -NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, -NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, -FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, -FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, -FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, -FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = -NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = -NVy * VTan; + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum( const Matrix4& ProjMat ) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / ProjMatF[10]; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // Perspective + float NearClip, FarClip; + + if (RcpZZ > 0.0f) // Reverse Z + { + FarClip = ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + } + else + { + NearClip = ProjMatF[14] * RcpZZ; + FarClip = NearClip / (RcpZZ + 1.0f); + } + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.h new file mode 100644 index 0000000..65093d9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix ); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Functions.inl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix3.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix4.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Quaternion.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Scalar.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Transform.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Vector.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender1CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRenderCS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AverageLumaCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BlurCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BufferCopyPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCommon.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass1CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAARootSignature.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUtility.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PostEffectsRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentHDRPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentSDRPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ResolveTAACS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SSAORS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ShaderUtility.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpenTAACS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextRS.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextShadowPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMap2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/LightingUtil.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierDS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierHS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardGS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurVertCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/compositeCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..bfa6887 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,128 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; + float Mpad1; // ռλ�� + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t0); + +Texture2D gDiffuseMap[4] : register(t1); + +SamplerState gsamLinearWrap : register(s0); + +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; + uint vPad0; // ռλ�� + uint vPad1; // ռλ�� + uint vPad2; // ռλ�� +}; + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[gMaterialIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + + diffuseAlbedo *= gDiffuseMap[diffuseTexIndex].Sample(gsamLinearWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - roughness; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..62900c5 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,48 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/sobelCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessDS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessHS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessPS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/vecAdd.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveVS.hlsl b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/VectorMath.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.h b/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.cpp new file mode 100644 index 0000000..ddc193c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.cpp @@ -0,0 +1,456 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include "GeometryGenerator.h" +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + + m_Camera.SetEyeAtUp({ 0.0f, 2.0f, -15.0f }, { 0.0f, 2.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_Camera.SetZRange(1.0f, 10000.0f); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_mapMaterial.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 4, &m_srvs[0]); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + obc.texTransform = item->texTransform; + obc.matTransform = item->matTransform; + obc.MaterialIndex = item->ObjCBIndex; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(4, 1); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature[0].InitAsConstantBuffer(0); + m_RootSignature[1].InitAsConstantBuffer(1); + m_RootSignature[2].InitAsBufferSRV(0); + m_RootSignature[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1, 4); + m_RootSignature.Finalize(L"15 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; +} + +void GameApp::buildGeo() +{ + // ������״���� + GeometryGenerator geoGen; + GeometryGenerator::MeshData box = geoGen.CreateBox(1.0f, 1.0f, 1.0f, 3); + GeometryGenerator::MeshData grid = geoGen.CreateGrid(20.0f, 30.0f, 60, 40); + GeometryGenerator::MeshData sphere = geoGen.CreateSphere(0.5f, 20, 20); + GeometryGenerator::MeshData cylinder = geoGen.CreateCylinder(0.5f, 0.3f, 3.0f, 20, 20); + + // + // We are concatenating all the geometry into one big vertex/index buffer. So + // define the regions in the buffer each submesh covers. + // + + // Cache the vertex offsets to each object in the concatenated vertex buffer. + UINT boxVertexOffset = 0; + UINT gridVertexOffset = (UINT)box.Vertices.size(); + UINT sphereVertexOffset = gridVertexOffset + (UINT)grid.Vertices.size(); + UINT cylinderVertexOffset = sphereVertexOffset + (UINT)sphere.Vertices.size(); + + // Cache the starting index for each object in the concatenated index buffer. + UINT boxIndexOffset = 0; + UINT gridIndexOffset = (UINT)box.Indices32.size(); + UINT sphereIndexOffset = gridIndexOffset + (UINT)grid.Indices32.size(); + UINT cylinderIndexOffset = sphereIndexOffset + (UINT)sphere.Indices32.size(); + + SubmeshGeometry boxSubmesh; + boxSubmesh.IndexCount = (UINT)box.Indices32.size(); + boxSubmesh.StartIndexLocation = boxIndexOffset; + boxSubmesh.BaseVertexLocation = boxVertexOffset; + + SubmeshGeometry gridSubmesh; + gridSubmesh.IndexCount = (UINT)grid.Indices32.size(); + gridSubmesh.StartIndexLocation = gridIndexOffset; + gridSubmesh.BaseVertexLocation = gridVertexOffset; + + SubmeshGeometry sphereSubmesh; + sphereSubmesh.IndexCount = (UINT)sphere.Indices32.size(); + sphereSubmesh.StartIndexLocation = sphereIndexOffset; + sphereSubmesh.BaseVertexLocation = sphereVertexOffset; + + SubmeshGeometry cylinderSubmesh; + cylinderSubmesh.IndexCount = (UINT)cylinder.Indices32.size(); + cylinderSubmesh.StartIndexLocation = cylinderIndexOffset; + cylinderSubmesh.BaseVertexLocation = cylinderVertexOffset; + + // + // Extract the vertex elements we are interested in and pack the + // vertices of all the meshes into one vertex buffer. + // + + auto totalVertexCount = + box.Vertices.size() + + grid.Vertices.size() + + sphere.Vertices.size() + + cylinder.Vertices.size(); + + std::vector vertices(totalVertexCount); + + UINT k = 0; + for (size_t i = 0; i < box.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = box.Vertices[i].Position; + vertices[k].Normal = box.Vertices[i].Normal; + vertices[k].TexC = box.Vertices[i].TexC; + } + + for (size_t i = 0; i < grid.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = grid.Vertices[i].Position; + vertices[k].Normal = grid.Vertices[i].Normal; + vertices[k].TexC = grid.Vertices[i].TexC; + } + + for (size_t i = 0; i < sphere.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = sphere.Vertices[i].Position; + vertices[k].Normal = sphere.Vertices[i].Normal; + vertices[k].TexC = sphere.Vertices[i].TexC; + } + + for (size_t i = 0; i < cylinder.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = cylinder.Vertices[i].Position; + vertices[k].Normal = cylinder.Vertices[i].Normal; + vertices[k].TexC = cylinder.Vertices[i].TexC; + } + + std::vector indices; + indices.insert(indices.end(), std::begin(box.GetIndices16()), std::end(box.GetIndices16())); + indices.insert(indices.end(), std::begin(grid.GetIndices16()), std::end(grid.GetIndices16())); + indices.insert(indices.end(), std::begin(sphere.GetIndices16()), std::end(sphere.GetIndices16())); + indices.insert(indices.end(), std::begin(cylinder.GetIndices16()), std::end(cylinder.GetIndices16())); + + auto geo = std::make_unique(); + geo->name = "shapeGeo"; + + // GPUBuff�࣬�Զ��Ѷ���ͨ���ϴ������������˶�Ӧ��Ĭ�϶��� + geo->createVertex(L"vertex buff", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"index buff", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + geo->geoMap["box"] = boxSubmesh; + geo->geoMap["grid"] = gridSubmesh; + geo->geoMap["sphere"] = sphereSubmesh; + geo->geoMap["cylinder"] = cylinderSubmesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +inline void GameApp::makeMaterials(const std::string& name, const Math::Vector4& diffuseAlbedo, const Math::Vector3& fresnelR0, + const float roughness, const std::string& materialName, int idx) +{ + std::wstring strFile(materialName.begin(), materialName.end()); + auto item = std::make_unique(); + item->name = name; + item->diffuseAlbedo = diffuseAlbedo; + item->fresnelR0 = fresnelR0; + item->roughness = roughness; + item->DiffuseMapIndex = idx; + m_mapMaterial[name] = std::move(item); + + // ��¼���е�SRV + m_srvs[idx] = TextureManager::LoadFromFile(strFile, true)->GetSRV(); +} + +void GameApp::buildMaterials() +{ + TextureManager::Initialize(L"Textures/"); + makeMaterials("brick", { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.1f, "bricks", 0); + makeMaterials("stone", { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.3f, "stone", 1); + makeMaterials("tile", { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.3f, "tile", 2); + makeMaterials("crate", { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.2f, "WoodCrate01", 3); + + // ��¼���е��������� + std::vector vv; + for (auto& item : m_mapMaterial) + { + MaterialConstants t; + t.DiffuseAlbedo = item.second->diffuseAlbedo; + t.FresnelR0 = item.second->fresnelR0; + t.Roughness = item.second->roughness; + t.DiffuseMapIndex = item.second->DiffuseMapIndex; + vv.push_back(std::move(t)); + } + sort(vv.begin(), vv.end(), [](const MaterialConstants& one, const MaterialConstants& two) + { + return one.DiffuseMapIndex < two.DiffuseMapIndex; + }); + m_mats.Create(L"mats", (UINT)vv.size(), sizeof(MaterialConstants), vv.data()); +} + +void GameApp::buildRenderItem() +{ + using namespace Math; + auto boxRitem = std::make_unique(); + boxRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 2.0f, 2.0f), Vector3(0.0f, 1.0f, 0.0f)))); + boxRitem->texTransform = Transpose(Matrix4(kIdentity)); + boxRitem->matTransform = Transpose(Matrix4(kIdentity)); + boxRitem->ObjCBIndex = 3; + boxRitem->mat = m_mapMaterial["crate"].get(); + boxRitem->geo = m_mapGeometries["shapeGeo"].get(); + boxRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + boxRitem->IndexCount = boxRitem->geo->geoMap["box"].IndexCount; + boxRitem->StartIndexLocation = boxRitem->geo->geoMap["box"].StartIndexLocation; + boxRitem->BaseVertexLocation = boxRitem->geo->geoMap["box"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(boxRitem.get()); + m_vecAll.push_back(std::move(boxRitem)); + + auto gridRitem = std::make_unique(); + gridRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + gridRitem->texTransform = Transpose(Matrix4::MakeScale({ 8.0f, 8.0f, 1.0f })); + gridRitem->matTransform = Transpose(Matrix4(kIdentity)); + gridRitem->ObjCBIndex = 2; + gridRitem->mat = m_mapMaterial["tile"].get(); + gridRitem->geo = m_mapGeometries["shapeGeo"].get(); + gridRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + gridRitem->IndexCount = gridRitem->geo->geoMap["grid"].IndexCount; + gridRitem->StartIndexLocation = gridRitem->geo->geoMap["grid"].StartIndexLocation; + gridRitem->BaseVertexLocation = gridRitem->geo->geoMap["grid"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(gridRitem.get()); + m_vecAll.push_back(std::move(gridRitem)); + + for (int i = 0; i < 5; ++i) + { + auto leftCylRitem = std::make_unique(); + leftCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 1.5f, -10.0f + i * 5.0f)))); + leftCylRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->ObjCBIndex = 0; + leftCylRitem->mat = m_mapMaterial["brick"].get(); + leftCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftCylRitem->IndexCount = leftCylRitem->geo->geoMap["cylinder"].IndexCount; + leftCylRitem->StartIndexLocation = leftCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + leftCylRitem->BaseVertexLocation = leftCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftCylRitem.get()); + m_vecAll.push_back(std::move(leftCylRitem)); + + auto rightCylRitem = std::make_unique(); + rightCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 1.5f, -10.0f + i * 5.0f)))); + rightCylRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->ObjCBIndex = 0; + rightCylRitem->mat = m_mapMaterial["brick"].get(); + rightCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightCylRitem->IndexCount = rightCylRitem->geo->geoMap["cylinder"].IndexCount; + rightCylRitem->StartIndexLocation = rightCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + rightCylRitem->BaseVertexLocation = rightCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightCylRitem.get()); + m_vecAll.push_back(std::move(rightCylRitem)); + + auto leftSphereRitem = std::make_unique(); + leftSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 3.5f, -10.0f + i * 5.0f)))); + leftSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->ObjCBIndex = 1; + leftSphereRitem->mat = m_mapMaterial["stone"].get(); + leftSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftSphereRitem->IndexCount = leftSphereRitem->geo->geoMap["sphere"].IndexCount; + leftSphereRitem->StartIndexLocation = leftSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + leftSphereRitem->BaseVertexLocation = leftSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftSphereRitem.get()); + m_vecAll.push_back(std::move(leftSphereRitem)); + + auto rightSphereRitem = std::make_unique(); + rightSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 3.5f, -10.0f + i * 5.0f)))); + rightSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->ObjCBIndex = 1; + rightSphereRitem->mat = m_mapMaterial["stone"].get(); + rightSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightSphereRitem->IndexCount = rightSphereRitem->geo->geoMap["sphere"].IndexCount; + rightSphereRitem->StartIndexLocation = rightSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + rightSphereRitem->BaseVertexLocation = rightSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightSphereRitem.get()); + m_vecAll.push_back(std::move(rightSphereRitem)); + } +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.h b/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.h new file mode 100644 index 0000000..94dadd4 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/GameApp.h @@ -0,0 +1,95 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + +private: + void cameraUpdate(); // camera���� + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + +private: + inline void makeMaterials(const std::string& name, const Math::Vector4& diffuseAlbedo, const Math::Vector3& fresnelR0, + const float roughness, const std::string& materialName, int idx); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + // ����map + std::unordered_map> m_mapMaterial; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + // �洢���е��������� + StructuredBuffer m_mats; + // �洢���е�������Դ + D3D12_CPU_DESCRIPTOR_HANDLE m_srvs[4]; + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + }; + std::unordered_map m_mapPSO; + + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::auto_ptr m_CameraController; + + // �뾶 + float m_radius = 60.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.h b/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Textures/WoodCrate01.dds b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/WoodCrate01.dds new file mode 100644 index 0000000..63abd5a Binary files /dev/null and b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/WoodCrate01.dds differ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Textures/bricks.dds b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/bricks.dds new file mode 100644 index 0000000..60fe972 Binary files /dev/null and b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/bricks.dds differ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Textures/stone.dds b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/stone.dds new file mode 100644 index 0000000..cc02ee3 Binary files /dev/null and b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/stone.dds differ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/Textures/tile.dds b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 15 First Person Camera and Dynamic Indexing/Textures/tile.dds differ diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/d3dUtil.h b/Chapter 15 First Person Camera and Dynamic Indexing/d3dUtil.h new file mode 100644 index 0000000..11b8e66 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/d3dUtil.h @@ -0,0 +1,159 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +__declspec(align(16)) struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; + UINT ObjPad0; + UINT ObjPad1; + UINT ObjPad2; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; + UINT MaterialPad0; // ռλ����16�ֽڶ��� + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z, float nx, float ny, float nz, float u, float v) : + Pos(x, y, z), + Normal(nx, ny, nz), + TexC(u, v) {} + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct Material +{ + std::string name; + + Math::Vector4 diffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ������ϵ�� + Math::Vector3 fresnelR0 = { 0.01f, 0.01f, 0.01f }; // ����ϵ�� + float roughness = 0.25f; // �ֲڶ� + + UINT DiffuseMapIndex = 0; // ��Ӧ��SRV���� +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // ����ת��������Ҫ���ڶ����Ӧ���������� + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); // ����������ƾ��󣬱���ͨ�������������̬�ƶ����� + + UINT ObjCBIndex = -1; // ����������Ŀ��������Ӧ���������� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� + Material* mat = nullptr; // ����ָ�룬��������ȾĿ������������Լ�������ͼ +}; \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/main.cpp b/Chapter 15 First Person Camera and Dynamic Indexing/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 15 First Person Camera and Dynamic Indexing/packages.config b/Chapter 15 First Person Camera and Dynamic Indexing/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 15 First Person Camera and Dynamic Indexing/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj b/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj new file mode 100644 index 0000000..62d89d6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj @@ -0,0 +1,527 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {ADD8FADA-5478-4425-904E-BEF51FAFFA77} + Chapter16InstancingandFrustumCulling + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj.filters b/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj.filters new file mode 100644 index 0000000..3244209 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Chapter 16 Instancing and Frustum Culling.vcxproj.filters @@ -0,0 +1,949 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/CameraController.cpp b/Chapter 16 Instancing and Frustum Culling/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/CameraController.h b/Chapter 16 Instancing and Frustum Culling/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.cpp b/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.h b/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.cpp b/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.cpp new file mode 100644 index 0000000..aa8bba5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, (float)log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp((float)log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return (float)exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.h b/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.cpp b/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.cpp new file mode 100644 index 0000000..5c417b5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (byte*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (byte*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.h b/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.h new file mode 100644 index 0000000..0fdd5f6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Fonts/consola24.h b/Chapter 16 Instancing and Frustum Culling/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/GameCore.cpp b/Chapter 16 Instancing and Frustum Culling/Core/GameCore.cpp new file mode 100644 index 0000000..80ad66b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/GameCore.cpp @@ -0,0 +1,182 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize((UINT)(UINT64)lParam & 0xFFFF, (UINT)(UINT64)lParam >> 16); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/GameCore.h b/Chapter 16 Instancing and Frustum Culling/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/GameInput.cpp b/Chapter 16 Instancing and Frustum Culling/Core/GameInput.cpp new file mode 100644 index 0000000..5a0431b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/GameInput.cpp @@ -0,0 +1,581 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/GameInput.h b/Chapter 16 Instancing and Frustum Culling/Core/GameInput.h new file mode 100644 index 0000000..c9b017e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/GameInput.h @@ -0,0 +1,195 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..486a16f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::Update() +{ + BaseCamera::Update(); + + m_FrustumVS = Frustum(m_ProjMatrix, m_NearClip / m_FarClip); + m_FrustumWS = m_CameraToWorld * m_FrustumVS; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.h new file mode 100644 index 0000000..c093908 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Camera.h @@ -0,0 +1,148 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + virtual void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + const Vector3 GetForwardVec() const { return -m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + const Frustum& GetViewSpaceFrustum() const { return m_FrustumVS; } + const Frustum& GetWorldSpaceFrustum() const { return m_FrustumWS; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + + // ��׶����� + Frustum m_FrustumVS; // View-space view frustum + Frustum m_FrustumWS; // World-space view frustum + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + virtual void Update() override; + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..d4dc1b3 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,616 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..ec9477c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,761 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/readme_command.txt b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..35e5eea --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + // ���������������������shader�����˵��µ� + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..0a1d6be --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..1c94d8f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/EsramAllocator.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuResource.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/readme_resource.txt b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..f8e3414 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,73 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/dds.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Graphics/d3dx12.h b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Hash.h b/Chapter 16 Instancing and Frustum Culling/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingPlane.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingSphere.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Common.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.cpp new file mode 100644 index 0000000..c38f478 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + // �Ѹ�Ϊ��������ϵ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // ��׶�壬�����Զ�������4������ + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = NVy * VTan; + + // ������׶���6���棬�洢���Ƿ������Լ����ϵ�һ���� + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // TODO ���޸�Ϊ��������ϵ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum(const Matrix4& ProjMat, float NearDivFar) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / NearDivFar; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // TODO ���޸�Ϊ��������ϵ + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // ���޸�Ϊ��������ϵ + // Perspective + float NearClip, FarClip; + + FarClip = -ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.h new file mode 100644 index 0000000..86211a8 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix, float NearDivFar); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Functions.inl b/Chapter 16 Instancing and Frustum Culling/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix3.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix4.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Quaternion.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Scalar.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Transform.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Math/Vector.h b/Chapter 16 Instancing and Frustum Culling/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender1CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRenderCS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AverageLumaCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BlurCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BufferCopyPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCommon.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass1CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAARootSignature.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUtility.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PostEffectsRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentHDRPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentSDRPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ResolveTAACS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SSAORS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ShaderUtility.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpenTAACS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextRS.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextShadowPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMap2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/LightingUtil.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierDS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierHS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardGS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurVertCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/compositeCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..b09711b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,121 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; + float Mpad1; // ռλ�� + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t1); + +Texture2D gDiffuseMap[7] : register(t2); + +SamplerState gsamLinearWrap : register(s0); + + +// Constant data that varies per frame. +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[pin.MatIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + + diffuseAlbedo *= gDiffuseMap[diffuseTexIndex].Sample(gsamLinearWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - roughness; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..2d5317e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,71 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/sobelCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessDS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessHS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessPS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/vecAdd.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveVS.hlsl b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.cpp b/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.h b/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Utility.cpp b/Chapter 16 Instancing and Frustum Culling/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 16 Instancing and Frustum Culling/Core/Utility.h b/Chapter 16 Instancing and Frustum Culling/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 16 Instancing and Frustum Culling/Core/VectorMath.h b/Chapter 16 Instancing and Frustum Culling/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/pch.cpp b/Chapter 16 Instancing and Frustum Culling/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 16 Instancing and Frustum Culling/Core/pch.h b/Chapter 16 Instancing and Frustum Culling/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 16 Instancing and Frustum Culling/GameApp.cpp b/Chapter 16 Instancing and Frustum Culling/GameApp.cpp new file mode 100644 index 0000000..ff6c14b --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/GameApp.cpp @@ -0,0 +1,425 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include +#include +#include "GeometryGenerator.h" +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + + m_Camera.SetEyeAtUp({ 0.0f, 0.0f, -15.0f }, { 0.0f, 0.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); + + updateInstanceData(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(0, sizeof(psc), &psc); + + // ����ȫ������������ + gfxContext.SetBufferSRV(3, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(4, 0, 7, &m_srvs[0]); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::RenderUI(class GraphicsContext& gfxContext) +{ + TextContext Text(gfxContext); + Text.Begin(); + + Text.ResetCursor(Graphics::g_DisplayWidth / 2.0f, 5.0f); + Text.SetColor(Color(0.0f, 1.0f, 0.0f)); + + for (auto& e : m_vecAll) + { + std::stringstream ss; + ss << e->name << " : " << e->visibileCount << " / " << e->allCount << "\n"; + + Text.DrawString(ss.str()); + } + + Text.SetTextSize(20.0f); + + Text.End(); +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ���øû���Ŀ����Ҫ���������� + gfxContext.SetBufferSRV(2, item->matrixs); + + // ������Ҫ���Ƶ�Ŀ������ + gfxContext.SetDynamicConstantBufferView(1, item->vDrawObjs.size() * sizeof(item->vDrawObjs[0]), item->vDrawObjs.data()); + + gfxContext.DrawIndexedInstanced(item->IndexCount, item->visibileCount, item->StartIndexLocation, item->BaseVertexLocation, 0); + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(5, 1); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature[0].InitAsConstantBuffer(0); // ͨ�õij��������� + m_RootSignature[1].InitAsConstantBuffer(1); // ����ȾĿ������ + m_RootSignature[2].InitAsBufferSRV(0); // ��ȾĿ��ľ������� + m_RootSignature[3].InitAsBufferSRV(1); // ��ȾĿ����������� + m_RootSignature[4].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 2, 7); // ��ȾĿ������� + m_RootSignature.Finalize(L"16 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; +} + +void GameApp::buildGeo() +{ + std::ifstream fin("Models/skull.txt"); + + if (!fin) + { + MessageBox(0, L"Models/skull.txt not found.", 0, 0); + return; + } + + UINT vcount = 0; + UINT tcount = 0; + std::string ignore; + + fin >> ignore >> vcount; + fin >> ignore >> tcount; + fin >> ignore >> ignore >> ignore >> ignore; + + Math::Vector3 vMin = { FLT_MAX, FLT_MAX, FLT_MAX }; + Math::Vector3 vMax = { FLT_MIN, FLT_MIN, FLT_MIN }; + + std::vector vertices(vcount); + for (UINT i = 0; i < vcount; ++i) + { + fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; + fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; + + XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); + + // ������������ + XMFLOAT3 spherePos; + XMStoreFloat3(&spherePos, XMVector3Normalize(P)); + + float theta = atan2f(spherePos.z, spherePos.x); + + // Put in [0, 2pi]. + if (theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(spherePos.y); + + float u = theta / (2.0f * XM_PI); + float v = phi / XM_PI; + + vertices[i].TexC = { u, v }; + + vMin = Math::Min(vMin, Math::Vector3(P)); + vMax = Math::Max(vMax, Math::Vector3(P)); + } + + fin >> ignore; + fin >> ignore; + fin >> ignore; + + std::vector indices(3 * tcount); + for (UINT i = 0; i < tcount; ++i) + { + fin >> indices[i * 3 + 0] >> indices[i * 3 + 1] >> indices[i * 3 + 2]; + } + + fin.close(); + + auto geo = std::make_unique(); + geo->name = "skullGeo"; + + geo->createVertex(L"skullGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"skullGeo index", (UINT)indices.size(), sizeof(std::int32_t), indices.data()); + + SubmeshGeometry submesh; + submesh.IndexCount = (UINT)indices.size(); + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + submesh.vMin = vMin; + submesh.vMax = vMax; + + geo->geoMap["skull"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + std::vector v = { + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.1f, 0 }, // bricks + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.3f, 1 }, // stone + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.3f, 2 }, // tile + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.2f, 3 }, // checkboard + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 0.0f, 4 }, // ice + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.2f, 5 }, // grass + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.5f, 6 } // skull + }; + + // ���������������� + m_mats.Create(L"skull mats", (UINT)v.size(), sizeof(MaterialConstants), v.data()); + + m_srvs.resize(7); + TextureManager::Initialize(L"Textures/"); + m_srvs[0] = TextureManager::LoadFromFile(L"bricks", true)->GetSRV(); + m_srvs[1] = TextureManager::LoadFromFile(L"stone", true)->GetSRV(); + m_srvs[2] = TextureManager::LoadFromFile(L"tile", true)->GetSRV(); + m_srvs[3] = TextureManager::LoadFromFile(L"WoodCrate01", true)->GetSRV(); + m_srvs[4] = TextureManager::LoadFromFile(L"ice", true)->GetSRV(); + m_srvs[5] = TextureManager::LoadFromFile(L"grass", true)->GetSRV(); + m_srvs[6] = TextureManager::LoadFromFile(L"white1x1", true)->GetSRV(); +} + +void GameApp::buildRenderItem() +{ + // ����125�� + int n = 5; + int nInstanceCount = n * n * n; + + int maxCount = Math::AlignUp(nInstanceCount * 4, 16) / 4; + + auto skullRitem = std::make_unique(); + skullRitem->name = "skull"; + skullRitem->visibileCount = nInstanceCount; + skullRitem->allCount = nInstanceCount; + skullRitem->vDrawObjs.resize(maxCount); + skullRitem->geo = m_mapGeometries["skullGeo"].get(); + skullRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skullRitem->IndexCount = skullRitem->geo->geoMap["skull"].IndexCount; + skullRitem->StartIndexLocation = skullRitem->geo->geoMap["skull"].StartIndexLocation; + skullRitem->BaseVertexLocation = skullRitem->geo->geoMap["skull"].BaseVertexLocation; + skullRitem->vMin = skullRitem->geo->geoMap["skull"].vMin; + skullRitem->vMax = skullRitem->geo->geoMap["skull"].vMax; + + // Ϊ�������Ŀ������nInstanceCount���������ݣ��Էֲ��ڲ�ͬ������λ�� + skullRitem->vObjsData.resize(nInstanceCount); + float width = 200.0f; + float height = 200.0f; + float depth = 200.0f; + + float x = -0.5f * width; + float y = -0.5f * height; + float z = -0.5f * depth; + float dx = width / (n - 1); + float dy = height / (n - 1); + float dz = depth / (n - 1); + for (int k = 0; k < n; ++k) + { + for (int i = 0; i < n; ++i) + { + for (int j = 0; j < n; ++j) + { + int index = k * n * n + i * n + j; + // Position instanced along a 3D grid. + skullRitem->vObjsData[index].World = Math::Transpose(Math::Matrix4( + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + { x + j * dx, y + i * dy, z + k * dz } + )); + skullRitem->vObjsData[index].texTransform = Math::Transpose(Math::Matrix4::MakeScale({2.0f, 2.0f, 1.0f})); + skullRitem->vObjsData[index].MaterialIndex = index % m_mats.GetElementCount(); + } + } + } + + skullRitem->matrixs.Create(L"skull matrixs", nInstanceCount, sizeof(ObjectConstants), skullRitem->vObjsData.data()); + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(skullRitem.get()); + m_vecAll.push_back(std::move(skullRitem)); +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} + +void GameApp::updateInstanceData() +{ + for (auto& e : m_vecAll) + { + e->visibileCount = 0; + for (int i = 0; i < (int)e->vObjsData.size(); ++i) + { + if (g_openFrustumCull) + { + auto& item = e->vObjsData[i]; + auto vMin = Math::Vector3(Math::Transpose(item.World) * e->vMin); + auto vMax = Math::Vector3(Math::Transpose(item.World) * e->vMax); + if (m_Camera.GetWorldSpaceFrustum().IntersectBoundingBox(vMin, vMax)) + { + e->vDrawObjs[e->visibileCount++].x = i; + } + } + else + { + e->vDrawObjs[e->visibileCount++].x = i; + } + } + } +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/GameApp.h b/Chapter 16 Instancing and Frustum Culling/GameApp.h new file mode 100644 index 0000000..26df98c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/GameApp.h @@ -0,0 +1,89 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + virtual void RenderUI(class GraphicsContext& gfxContext) override; + +private: + void cameraUpdate(); // camera���� + void updateInstanceData(); + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + StructuredBuffer m_mats; // t1 �洢���е��������� + std::vector m_srvs; // �洢���е�������Դ + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + }; + std::unordered_map m_mapPSO; + + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::auto_ptr m_CameraController; + + // �뾶 + float m_radius = 60.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.cpp b/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.h b/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 16 Instancing and Frustum Culling/Models/skull.txt b/Chapter 16 Instancing and Frustum Culling/Models/skull.txt new file mode 100644 index 0000000..5e0f3ce --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/Models/skull.txt @@ -0,0 +1,91423 @@ +VertexCount: 31076 +TriangleCount: 60339 +VertexList (pos, normal) +{ + 0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907 + 0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907 + 0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907 + 1.12127 1.64042 -1.94785 -0.0941668 0.904117 0.416779 + 1.04654 1.60198 -1.86107 0.0955379 0.877073 0.47076 + 1.06964 1.60894 -1.87873 0.0955378 0.877073 0.47076 + 1.151 1.65245 -1.7697 -0.378509 0.925514 -0.01241 + 1.11866 1.63277 -1.6602 -0.373131 0.92607 0.0562804 + 1.13374 1.64126 -1.6999 -0.373131 0.92607 0.0562804 + -1.55433 1.51188 0.462787 -0.650629 -0.723091 0.231995 + -1.58157 1.5563 0.524846 -0.650628 -0.723091 0.231995 + -1.63136 1.61203 0.558918 -0.189662 0.407906 -0.893108 + -0.948906 1.69815 -1.06444 0.06309 -0.586398 -0.807562 + -0.883508 1.6865 -1.05088 0.333777 -0.941824 -0.0394929 + -0.901206 1.61571 -1.00085 0.06309 -0.586398 -0.807562 + -0.698766 2.11852 0.21365 0.449339 0.0647742 -0.89101 + -0.800745 2.16722 0.143497 0.233569 0.963598 0.130093 + -0.757773 2.14908 0.186115 0.510221 0.846084 -0.154329 + -0.026884 2.45107 -1.11594 0.569732 0.569877 -0.592153 + -0.026893 2.5207 -1.04894 0.569732 0.569877 -0.592153 + -0.00861 2.52374 -1.02842 -0.412524 0.686678 0.59858 + -0.925082 1.67623 0.632925 0.327682 0.790395 0.517591 + -1.02369 1.81801 0.51875 0.764479 0.632399 0.12507 + -1.07771 1.88665 0.501859 0.768834 0.630814 0.104728 + -1.21447 1.45124 0.759218 -0.977394 0.0525264 0.204796 + -1.24213 1.58922 0.591819 -0.977394 0.0525264 0.204796 + -1.25585 1.60974 0.521077 -0.977394 0.0525264 0.204796 + -1.46174 1.30584 0.581853 0.864067 -0.492757 0.102851 + -1.46161 1.25622 0.403406 0.828898 0.539105 -0.149312 + -1.49721 1.30268 0.373529 0.828898 0.539105 -0.149312 + -1.14801 1.74733 -2.15642 0.627914 0.700696 0.338748 + -1.14244 1.71124 -2.06432 0.928712 0.127139 -0.348326 + -1.11856 1.68698 -2.02151 0.312969 0.890586 0.330011 + -1.0984 1.63391 -1.92098 0.487942 -0.510099 -0.708315 + -1.04635 1.60183 -1.86122 0.772868 0.0817976 -0.629273 + -1.12108 1.64027 -1.948 0.772868 0.0817976 -0.629273 + -1.13384 1.64128 -1.69995 0.359386 0.931225 0.060508 + -1.11876 1.63288 -1.66019 0.359386 0.931225 0.060508 + -1.1511 1.65248 -1.76974 0.66363 0.744796 -0.0698237 + -1.18233 1.23731 -1.58105 -0.922929 -0.0737541 -0.37784 + -1.17721 1.24002 -1.59409 -0.922929 -0.073754 -0.37784 + -1.16328 1.23237 -1.62663 -0.922929 -0.073754 -0.37784 + -0.91314 1.26874 -2.12118 -0.105577 0.815147 0.569551 + -0.898511 1.25175 -2.09719 -0.887193 -0.36437 0.283061 + -0.883033 1.24766 -2.05395 -0.887193 -0.36437 0.283061 + 1.04301 1.16262 -1.8932 0.397469 0.0978369 -0.912385 + 1.01556 1.17173 -1.90419 0.0633285 0.952548 -0.297727 + 0.980129 1.18837 -1.91784 0.397469 0.0978369 -0.912385 + 0.800364 1.32241 -2.89805 0.629678 0.750854 -0.199307 + 0.806559 1.32541 -2.88944 0.823409 -0.271908 -0.49806 + 0.831275 1.27798 -2.82269 0.823409 -0.271908 -0.49806 + -2.04759 1.79087 -0.419645 -0.988527 -0.10864 0.104937 + -2.05701 1.81152 -0.487006 -0.997315 -0.0537478 0.0497454 + -2.05691 1.78848 -0.509912 -0.980777 -0.193847 -0.0223518 + -0.692099 1.2342 -2.95767 -0.573742 0.803924 -0.156607 + -0.695861 1.23354 -2.94732 -0.573742 0.803924 -0.156607 + -0.697976 1.23713 -2.92113 -0.573742 0.803924 -0.156607 + 2.05691 1.78848 -0.509912 0.998191 -0.0583625 -0.0144192 + 2.05701 1.81152 -0.487006 0.997306 -0.0538525 0.0498041 + 2.04758 1.79087 -0.419637 0.988507 -0.108734 0.105031 + 1.24544 1.07804 -1.44958 0.649224 -0.0182511 -0.760378 + 1.21165 1.0146 -1.47691 0.166265 0.745609 -0.645308 + 1.1173 1.02629 -1.55774 0.649224 -0.0182511 -0.760378 + -1.11728 1.02629 -1.55775 -0.649255 -0.0183743 -0.760349 + -1.21163 1.0146 -1.47691 -0.166337 0.745526 -0.645385 + -1.24542 1.07804 -1.44959 -0.649255 -0.0183743 -0.760349 + -0.806332 1.74827 -2.76421 -0.434612 0.209157 0.875994 + -0.814274 1.75317 -2.76932 -0.434612 0.209157 0.875994 + -0.839872 1.7517 -2.78167 -0.434612 0.209157 0.875994 + 0.821988 1.74942 -2.77501 0.329372 -0.519014 0.788757 + 0.814274 1.75317 -2.76932 0.329372 -0.519014 0.788757 + 0.785028 1.76407 -2.74993 0.329372 -0.519014 0.788757 + 0.888762 1.33938 -1.5282 0.00961599 0.997143 0.0749256 + 0.915406 1.33821 -1.5161 0.00961599 0.997143 0.0749256 + 0.921874 1.33846 -1.52023 0.00961599 0.997143 0.0749256 + -0.886486 1.45631 -2.24676 -0.396142 0.917961 0.0204671 + -0.902475 1.44951 -2.25152 -0.396142 0.917961 0.0204671 + -0.927139 1.43888 -2.25177 -0.396142 0.917961 0.0204671 + 1.04271 1.37679 -2.1176 0.2494 -0.0437617 0.967411 + 1.07451 1.36833 -2.12618 0.2494 -0.0437617 0.967411 + 1.08487 1.3765 -2.12848 0.2494 -0.0437617 0.967411 + -0.943902 1.36906 -1.86388 0.166581 0.42439 0.890025 + -0.967246 1.38002 -1.86474 0.166581 0.42439 0.890025 + -0.996414 1.38162 -1.86005 0.166581 0.42439 0.890025 + -0.909016 1.37928 -1.86229 -0.0199364 0.651776 0.75815 + -0.935798 1.39002 -1.87222 -0.0199364 0.651776 0.75815 + -0.977897 1.39575 -1.87826 -0.0199364 0.651776 0.75815 + -0.049274 1.91604 -3.38694 -0.350601 -0.899629 -0.26028 + -0.00609 1.89928 -3.38721 -0.369168 -0.892749 -0.258289 + 0 1.88767 -3.35525 -0.350601 -0.899629 -0.26028 + -0.00609 1.93619 -3.35816 -1 0 0 + -0.00609 1.92264 -3.37029 -1 0 0 + -0.011004 2.20909 -0.926224 0.999938 0.00708208 -0.00860211 + -0.011004 1.92279 -1.16193 0.999938 0.00708208 -0.00860211 + -0.014777 2.65435 -0.998232 0.995471 -0.0158419 0.0937386 + -0.011004 1.92279 -1.16193 0.785848 -0.421049 0.452946 + 0.031727 1.84797 -1.26694 0.686473 -0.714394 -0.13563 + 0.031727 1.84797 -1.26694 -0.882422 -0.413073 0.225172 + 0.064756 1.84625 -1.22456 -0.869915 -0.210535 0.446008 + -0.014777 2.65435 -0.998232 -0.770175 -0.241181 0.590477 + 0.161362 1.08963 0.567937 0.195338 0.92057 0.338221 + 0.15157 1.06403 0.643287 0.195338 0.92057 0.33822 + 0.202299 1.02452 0.721508 0.195338 0.92057 0.33822 + 1.13441 1.64513 -1.92742 0.664039 -0.745121 -0.0620253 + 1.12127 1.64042 -1.94785 0.577008 -0.794899 -0.187611 + 1.15142 1.68191 -2.03092 0.577008 -0.794899 -0.187611 + 1.14237 1.66056 -1.98515 -0.181527 0.904501 0.385909 + 1.15142 1.68191 -2.03092 -0.181527 0.904501 0.385909 + 0.173526 2.0323 -3.02581 0.421532 0.687881 -0.590873 + 0.164996 2.02874 -3.03604 0.421532 0.687881 -0.590873 + 0.156435 2.02905 -3.04178 0.421532 0.687881 -0.590873 + -0.018207 2.29242 -0.86875 -0.16113 0.133196 0.977904 + -0.011004 2.20909 -0.926224 -0.329358 -0.555228 0.763704 + 0.016514 2.25648 -0.879903 -0.329358 -0.555228 0.763704 + -0.011004 2.20909 -0.926224 0.902381 -0.119202 -0.414126 + 0.014767 2.65435 -0.998232 0.630835 -0.424023 -0.649809 + 0.016514 2.25648 -0.879903 0.902381 -0.119202 -0.414126 + -0.042206 0.01602 3.24589 0 0.626778 0.779198 + -0.001795 0.003301 3.25612 -0.369989 -0.0689123 0.926477 + 0.001808 0.003301 3.25612 0 0.626778 0.779198 + -0.972324 1.71963 0.59555 0.307586 0.790657 0.529389 + -0.848978 1.62264 0.668739 0.307586 0.790657 0.529389 + -1.237 1.53076 0.60848 -0.417096 0.181801 0.890494 + -1.26298 1.58624 0.584985 -0.819253 -0.356714 0.448976 + -1.33145 1.63145 0.543685 -0.417096 0.181801 0.890494 + -1.30863 1.42333 0.768356 -0.275156 -0.302959 -0.912417 + -1.35441 1.57088 0.718197 -0.944445 -0.205966 0.256128 + -1.37295 1.58577 0.661806 -0.944445 -0.205966 0.256128 + -0.995136 1.68804 -1.12174 0.696565 0.353522 -0.624355 + -0.971002 1.70035 -1.08785 0.696565 0.353522 -0.624355 + -0.948906 1.69815 -1.06444 0.696565 0.353522 -0.624355 + -0.686108 1.69237 -1.37664 -0.112009 0.079852 0.990494 + -0.668868 1.74969 -1.37931 0.942787 -0.288834 0.166514 + -0.692772 1.67708 -1.37616 -0.112009 0.079852 0.990494 + -0.991592 1.54803 -1.21183 -0.598015 -0.458623 -0.657299 + -0.955511 1.48158 -1.19533 -0.725065 -0.232811 0.648136 + -0.922127 1.44708 -1.17038 -0.725065 -0.232811 0.648136 + -1.02216 1.67959 -1.28351 0.554421 -0.0861091 -0.82777 + -1.00886 1.67572 -1.2742 0.686154 -0.0106421 -0.727379 + -0.994441 1.63158 -1.25995 0.554421 -0.0861091 -0.82777 + 0.02884 1.8545 -1.31386 0.209354 -0.97749 0.0261592 + -0.011004 1.92279 -1.16193 -0.876146 -0.481864 -0.0131942 + -0.566524 1.95757 -2.62998 0.80872 -0.586442 0.0453573 + -0.592266 1.91999 -2.61288 0.735678 -0.623871 -0.263747 + -0.593047 1.92413 -2.62486 0.731705 -0.641824 -0.229498 + -1.14934 1.85886 -1.621 -0.748231 -0.0628384 0.660455 + -1.18042 1.92842 -1.63808 0.695388 0.448556 0.561456 + -1.22327 1.99607 -1.63906 0.695388 0.448556 0.561456 + -0.848896 1.59106 -1.29936 0.0547428 0.991271 -0.119936 + -0.862195 1.59124 -1.28868 -0.607286 0.231798 -0.759916 + -0.906036 1.59329 -1.25302 -0.240133 -0.963498 -0.118355 + 0.040846 2.03476 -3.07187 0.32524 -0.797022 -0.508895 + 0.021963 2.02879 -3.08313 0.412098 0.310944 -0.856439 + -0.030826 2.04626 -3.10218 0.412098 0.310944 -0.856439 + 0.016514 2.25648 -0.879903 0.361972 0.492241 0.791628 + 0.036031 2.2728 -0.898977 0.854781 0.134694 0.501205 + 0.026896 2.5207 -1.04894 0.89138 0.34194 0.297521 + 0.342526 0.826727 1.0007 0.953858 0.107937 0.280186 + 0.321893 0.815854 1.07513 0.953858 0.107937 0.280186 + 0.312155 0.767184 1.12703 0.953858 0.107937 0.280186 + -0.280438 0.691045 1.20391 -0.945571 0.12964 0.298478 + -0.28423 0.755168 1.16405 -0.945571 0.12964 0.298478 + -0.293968 0.803753 1.11209 -0.945571 0.12964 0.298478 + 1.02368 1.78898 0.51143 0.89627 -0.163857 0.41213 + 0.939812 1.7023 0.659358 0.89627 -0.163857 0.41213 + 0.972324 1.71963 0.595543 0.89627 -0.163857 0.41213 + 0.639283 1.82867 -0.742512 0.949949 -0.265038 0.165381 + 0.641212 1.80309 -0.633011 -0.155079 -0.962606 -0.222129 + 0.588889 1.81998 -0.669658 -0.576988 -0.694303 0.430148 + 0.996149 2.87607 -0.646464 0.195019 -0.66248 0.723248 + 0.779571 2.78279 -0.673504 0.195019 -0.66248 0.723249 + 0.739695 2.74565 -0.696773 0.694051 -0.493486 -0.524181 + 2.01559 2.518 -0.205467 -0.398232 -0.638181 0.65889 + 1.85647 2.54302 -0.277405 -0.398232 -0.638181 0.65889 + 1.78909 2.52885 -0.331856 -0.398232 -0.638181 0.65889 + 2.06551 2.37554 -0.14513 0.209248 0.739158 0.640203 + 1.98115 2.45802 -0.212777 0.209248 0.739158 0.640203 + 1.90735 2.49937 -0.236397 0.209248 0.739158 0.640203 + 0.701621 1.59347 -1.07093 -0.310767 -0.590351 -0.744923 + 0.795773 1.58717 -1.10522 -0.407193 -0.681904 -0.607618 + 0.857639 1.53971 -1.09341 -0.310767 -0.59035 -0.744923 + 0.700579 1.79093 -2.19915 0.794599 0.593925 -0.125957 + 0.750666 1.75461 -2.12943 0.145023 -0.880776 -0.45078 + 0.719806 1.76903 -2.18362 0.813011 0.475148 -0.336522 + -0.92271 1.96082 -0.624798 0.172164 -0.446348 0.878142 + -0.929869 1.89636 -0.656157 0.172164 -0.446348 0.878142 + -0.915918 1.85125 -0.681822 0.892288 -0.365755 0.26466 + -1.25705 3.37972 -1.68482 -0.110911 -0.983827 0.14065 + -1.14214 3.39251 -1.50476 -0.110911 -0.983827 0.14065 + -1.11887 3.39705 -1.45464 -0.110911 -0.983827 0.14065 + -0.010689 2.2749 -0.3052 0.629784 0.648282 0.427905 + -0.009414 2.2992 -0.343893 0.629784 0.648282 0.427905 + -0.048528 2.35557 -0.371727 0.629784 0.648282 0.427905 + -1.07094 1.86141 0.481375 -0.876493 -0.32002 0.359647 + -0.972324 1.71963 0.59555 -0.876493 -0.32002 0.359647 + -0.939812 1.7023 0.659365 -0.876493 -0.32002 0.359647 + -1.25585 1.60974 0.521077 0.204306 -0.604269 -0.770141 + -1.18554 1.48162 0.722401 -0.0429436 -0.669492 -0.741577 + -1.21447 1.45124 0.759218 0.24249 -0.645061 -0.724634 + -1.70723 0.427067 1.15213 -0.205891 0.970178 -0.12792 + -1.70775 0.443486 1.2775 -0.205891 0.970178 -0.12792 + -1.7011 0.453737 1.34454 -0.205891 0.970178 -0.12792 + -0.609115 1.90933 -2.58583 -0.554437 0.827813 0.0855872 + -0.571293 1.94331 -2.66948 -0.554437 0.827813 0.0855872 + -0.593047 1.92413 -2.62486 -0.554437 0.827813 0.0855872 + -0.729379 1.60414 -1.84242 -0.735368 0.676003 -0.0474693 + -0.696971 1.63682 -1.87903 -0.82698 -0.194483 -0.527522 + -0.692433 1.63726 -1.94318 -0.735368 0.676003 -0.0474693 + -1.0984 1.63391 -1.92098 -0.244409 0.749525 0.615204 + -1.06945 1.6088 -1.87888 -0.244409 0.749526 0.615204 + -1.04635 1.60183 -1.86122 -0.244409 0.749525 0.615204 + 0.036031 2.2728 -0.898977 -0.996262 0.014774 0.0851082 + 0.03663 2.30385 -0.897355 -0.996262 0.014774 0.0851082 + 0.026896 2.5207 -1.04894 -0.996262 0.014774 0.0851082 + 1.21543 1.25463 0.632758 -0.912708 0.113447 -0.392548 + 1.20241 1.08491 0.659711 -0.928512 0.0122976 -0.371098 + 1.1661 0.918671 0.745052 -0.286635 -0.61351 -0.73583 + 1.33145 1.63145 0.543685 0.417147 0.181782 0.890474 + 1.26299 1.58624 0.584984 0.417147 0.181782 0.890474 + 1.23701 1.53076 0.60848 0.417147 0.181782 0.890474 + 1.37295 1.58577 0.661806 0.944445 -0.205962 0.256133 + 1.35441 1.57088 0.718196 0.944445 -0.205962 0.256133 + 1.30863 1.42333 0.768356 0.275663 -0.291308 -0.916051 + 0.792052 1.49776 -1.24696 -0.0135992 0.985387 0.169787 + 0.828512 1.49337 -1.21855 0.221899 0.853284 -0.471877 + 0.874389 1.49643 -1.23266 -0.449359 0.864271 0.226078 + 0.922122 1.44708 -1.17038 -0.238096 -0.602308 0.761929 + 0.955513 1.48149 -1.19538 0.725133 -0.232945 0.648011 + 0.991592 1.54803 -1.21183 0.601275 -0.451223 -0.659444 + 0.592978 1.92413 -2.62486 -0.733794 -0.641747 -0.222951 + 0.592234 1.92008 -2.61283 -0.738748 -0.623481 -0.255977 + 0.566529 1.95757 -2.62998 -0.805241 -0.592217 0.0294389 + 1.22327 1.99606 -1.63905 -0.695663 0.448589 0.56109 + 1.18043 1.92842 -1.63808 -0.695663 0.448589 0.56109 + 1.14935 1.85886 -1.621 0.743443 -0.0685493 0.665277 + -1.59486 1.39116 0.355271 -0.0661124 0.295114 -0.953172 + -1.51069 1.33656 0.353853 -0.384054 -0.573208 -0.723834 + -1.49721 1.30268 0.373529 -0.328928 -0.706901 -0.626177 + -1.49586 2.56716 -0.58981 -0.607194 -0.445574 -0.65786 + -1.58602 2.58657 -0.536845 -0.516028 -0.066654 -0.853974 + -1.72019 2.70443 -0.464969 -0.717703 -0.338326 -0.608637 + 0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.069411 0.149083 3.81521 0 0.702478 -0.711705 + -1.13431 1.77915 -2.24394 0.748987 0.576371 0.326825 + -1.15072 1.77302 -2.19552 0.796931 0.528217 0.293067 + 1.02369 1.81801 0.518748 -0.769296 0.630583 0.102705 + 1.0777 1.88665 0.501858 -0.548412 -0.0230373 -0.835891 + 1.18729 2.0375 0.396588 -0.788918 0.537794 0.297298 + 1.21543 1.25463 0.632758 -0.943445 0.0893122 -0.319273 + 1.21129 1.35382 0.672741 -0.659387 -0.123053 -0.741665 + 1.26299 1.58624 0.584984 -0.943445 0.0893122 -0.319273 + 0.757834 2.14915 0.186202 -0.510264 0.846046 -0.154393 + 0.800807 2.16729 0.143582 -0.510264 0.846046 -0.154393 + 0.698828 2.11859 0.213736 -0.448671 0.0631055 -0.891466 + 0.001808 0.003301 3.25612 1 0 0 + 0.001808 -0.013762 3.24667 1 0 0 + 0.001808 -0.005483 3.17033 0.46511 -0.884971 -0.0223388 + 0.74827 1.58102 -1.31758 0.185978 0.978799 -0.085815 + 0.748333 1.58493 -1.27294 0.139582 0.986432 -0.0864167 + 0.848893 1.59105 -1.29935 -0.083259 0.992753 -0.0866547 + 0.711042 1.59463 -1.33315 0.839186 0.541675 -0.0485298 + 0.711105 1.59853 -1.28851 0.687275 0.724916 -0.0463682 + 0.699505 1.64767 -1.36081 0.956663 0.288108 0.0423007 + 0.686132 1.69228 -1.37669 0.936448 0.341179 0.0816172 + 0.697732 1.64315 -1.30438 0.94884 0.310267 0.0586247 + 0.656563 1.77702 -1.40086 0.932306 0.350624 0.0887014 + 1.00885 1.67572 -1.27419 0.670214 -0.693233 -0.265032 + 0.977919 1.61141 -1.18422 -0.548297 -0.595979 -0.586669 + 0.946949 1.61536 -1.27285 0.462875 -0.884401 -0.059845 + 0.937006 1.58934 -1.16439 0.0125529 -0.640481 -0.767871 + 0.906036 1.59329 -1.25302 0.240627 -0.963412 -0.118054 + 0.85677 1.58823 -1.32627 0.043441 -0.986395 0.158547 + 0.960259 1.61924 -1.28217 -0.0511243 -0.433055 0.899916 + 1.00885 1.67572 -1.27419 0.578205 -0.561083 0.592339 + 0.963515 1.56736 -1.16991 -0.691064 0.46106 -0.556646 + 0.917637 1.56429 -1.1558 0.00972007 0.191642 -0.981417 + 0.845353 1.58744 -1.19488 0.17914 -0.851587 -0.492654 + 0.801509 1.58539 -1.23054 -0.335613 -0.85461 0.396239 + 0.862192 1.59116 -1.28874 0.0295432 -0.9993 0.0229327 + 0.994443 1.63158 -1.25994 -0.925431 0.375615 -0.0498965 + 1.00885 1.67572 -1.27419 -0.953877 0.267096 -0.137033 + 0.75894 1.61619 -1.24569 -0.790815 -0.347 0.504184 + 0.761569 1.58122 -1.30691 -0.242761 -0.955401 0.168154 + 0.848893 1.59105 -1.29935 0.0612642 -0.998073 0.00988391 + 0.718999 1.61201 -1.32205 -0.802857 -0.23298 0.548763 + 0.74827 1.58102 -1.31758 -0.492294 -0.557249 0.66867 + 0.699021 1.70327 -1.32391 -0.803778 -0.594448 0.0239307 + 0.707462 1.66505 -1.34971 -0.935553 -0.137607 0.325277 + 0.699505 1.64767 -1.36081 -0.840344 0.0395603 0.540607 + 0.711042 1.59463 -1.33315 -0.686943 -0.140715 0.712958 + 0.76871 1.61927 -1.22983 -0.829319 -0.146584 0.539206 + 0.708791 1.70626 -1.3081 -0.838716 -0.095275 0.53617 + 0.789525 1.56678 -1.21471 -0.823792 -0.170977 0.540493 + 0.686132 1.69228 -1.37669 -0.866756 -0.211662 0.45159 + 0.668871 1.74969 -1.37931 -0.92902 -0.312853 0.197597 + 0.656563 1.77702 -1.40086 -0.944761 -0.140863 0.295946 + 0.639302 1.83442 -1.40348 -0.945695 -0.302329 0.119408 + 0.600297 1.9196 -1.45941 -0.935523 -0.35319 -0.00734592 + 0.636604 1.83901 -1.44743 -0.909434 -0.393561 -0.134309 + 0.697732 1.64315 -1.30438 -0.904037 0.0293146 0.426448 + 0.66043 1.78791 -1.35351 -0.858241 -0.478347 0.186029 + 0.626051 1.87036 -1.31612 -0.909292 -0.346445 -0.230571 + 0.599786 1.94895 -1.30965 -0.875446 -0.276772 -0.39622 + 0.613037 1.91293 -1.39706 -0.951128 -0.301862 0.0650784 + 0.654263 1.77702 -1.32405 -0.751583 -0.211272 -0.624889 + 0.619884 1.85947 -1.28666 -0.501873 -0.163251 -0.849396 + 0.589443 1.89582 -1.28503 -0.0798705 -0.0211582 -0.996581 + 0.572223 2.03146 -1.30735 -0.650346 -0.512783 -0.56045 + 0.657449 1.71478 -1.31545 -0.182016 -0.375202 -0.908897 + 0.628195 1.74036 -1.30896 -0.284599 -0.0806566 -0.955247 + 0.597753 1.77671 -1.30732 0.190494 0.01163 -0.981619 + 0.548924 1.83147 -1.32837 0.353545 0.0467009 -0.934251 + 0.56188 1.97841 -1.28267 -0.148599 -0.106591 -0.983136 + 0.684132 1.6989 -1.29475 -0.0788835 -0.724345 -0.68491 + 0.631718 1.61943 -1.2503 0.0298424 -0.668702 -0.742932 + 0.631381 1.67812 -1.30036 0.0169822 -0.488516 -0.87239 + 0.590278 1.68513 -1.29089 -0.376297 -0.43088 -0.820209 + 0.708791 1.70626 -1.3081 -0.0330505 -0.848193 -0.528656 + 0.726242 1.62827 -1.2706 -0.311936 -0.689434 -0.65374 + 0.658401 1.60355 -1.2296 0.185007 -0.812766 -0.552434 + 0.636545 1.55107 -1.1577 0.30473 -0.846636 -0.436287 + 0.605073 1.57287 -1.20325 0.0408359 -0.779023 -0.625664 + 0.604736 1.63147 -1.25336 -0.219954 -0.619859 -0.753257 + 0.750901 1.63563 -1.28395 -0.352328 -0.550117 -0.757123 + 0.770083 1.58651 -1.24989 -0.862131 -0.476999 -0.170882 + 0.711337 1.62078 -1.18883 -0.05394 -0.934159 -0.352757 + 0.689481 1.5683 -1.11694 0.330974 -0.873629 -0.356691 + 0.622039 1.51561 -1.08948 -0.117519 -0.919616 -0.374827 + 0.590567 1.53741 -1.13503 -0.335536 -0.906502 -0.256262 + 0.771717 1.58314 -1.26884 -0.950377 -0.309946 -0.0267693 + 0.790419 1.50113 -1.22799 -0.805017 -0.546168 0.231621 + 0.755178 1.57902 -1.16811 -0.517039 -0.830337 -0.207874 + 0.704378 1.56692 -1.09036 0.112455 -0.869528 -0.480911 + 0.635703 1.4879 -1.04188 -0.0054858 -0.928742 -0.370685 + 0.792052 1.49776 -1.24696 -0.872426 -0.488606 0.0116762 + 0.840998 1.46202 -1.20765 -0.327813 -0.943636 -0.045711 + 0.809256 1.55981 -1.16444 -0.507047 -0.838293 0.200418 + 0.758457 1.54772 -1.08669 -0.29294 -0.824332 -0.484419 + 0.6506 1.48652 -1.0153 -0.164864 -0.611883 -0.773575 + 0.859835 1.52061 -1.14415 -0.563628 -0.7081 0.425344 + 0.6506 1.48652 -1.0153 0.282589 -0.936699 -0.206731 + 0.612757 1.47847 -0.963546 -0.195089 -0.933803 0.29992 + 0.599093 1.50618 -1.01114 -0.791459 -0.597956 -0.126651 + 0.579459 1.54475 -1.05154 -0.850008 -0.526332 0.0214585 + 0.556701 1.56805 -1.18832 -0.580403 -0.7039 -0.409458 + 0.586667 1.54747 -0.91427 -0.844742 -0.444083 0.298665 + 0.567033 1.58604 -0.954669 -0.977182 -0.203594 0.0605327 + 0.567352 1.65255 -1.00526 -0.990658 -0.0825064 0.108583 + 0.545593 1.57539 -1.10483 -0.891632 -0.434143 0.128501 + 0.6172 1.53206 -0.889972 0.030182 -0.796937 0.603307 + 0.612248 1.60182 -0.819792 -0.496877 -0.648056 0.57718 + 0.581715 1.61732 -0.84404 -0.875442 -0.341842 0.341681 + 0.565407 1.66919 -0.887485 -0.990111 -0.0742072 0.119056 + 0.629692 1.50131 -0.961109 0.862344 -0.383833 0.330206 + 0.634135 1.5549 -0.887535 0.907243 -0.352565 0.229366 + 0.630172 1.5876 -0.82637 0.539158 -0.579954 0.610706 + 0.601719 1.6529 -0.769478 -0.577694 -0.438679 0.688353 + 0.6506 1.48652 -1.0153 0.916919 -0.109968 0.383624 + 0.643397 1.56889 -0.998153 0.953583 -0.111151 0.279865 + 0.643726 1.61889 -0.917968 0.983699 -0.140621 0.112079 + 0.639763 1.6516 -0.856812 0.979198 -0.0845448 0.184455 + 0.619643 1.63869 -0.776057 0.471726 -0.542211 0.695329 + 0.664305 1.55402 -1.0524 0.699612 -0.0272337 0.714004 + 0.701621 1.59347 -1.07093 0.503858 0.0379935 0.862951 + 0.658945 1.63178 -1.03008 0.875368 -0.124851 0.467058 + 0.659274 1.68187 -0.949849 0.978211 -0.107128 0.177839 + 0.646938 1.71515 -0.867495 0.982201 -0.0753932 0.172038 + 0.626818 1.70224 -0.78674 0.973819 -0.11088 0.198448 + 0.616518 1.72023 -0.715886 0.952295 -0.110975 0.284286 + 0.795773 1.58717 -1.10522 0.43991 0.00564992 0.898024 + 0.758457 1.54772 -1.08669 0.384658 0.112744 0.916148 + 0.6506 1.48652 -1.0153 0.337107 0.400058 0.85224 + 0.133271 1.97001 -3.02272 0.0154635 -0.521531 -0.853092 + 0.093994 2.00582 -3.01375 -0.0964595 -0.529434 -0.842849 + 0.156435 2.02905 -3.04178 -0.329619 -0.159169 -0.9306 + 0.122012 1.95733 -3.01055 -0.0762406 -0.997074 0.00553609 + 0.082735 1.99305 -3.00163 -0.423956 -0.745927 -0.513667 + 0.080404 2.00707 -3.02371 0.31784 -0.784906 -0.531884 + 0.141832 1.9697 -3.01698 0.779898 -0.625712 0.0155829 + 0.128453 1.99899 -2.99251 0.691133 -0.559822 0.457094 + 0.108633 1.98662 -2.9861 0.501486 -0.407871 0.762989 + 0.156435 2.02905 -3.04178 0.475826 -0.443846 -0.759335 + 0.164996 2.02874 -3.03604 0.4903 -0.436023 -0.754645 + 0.164996 2.02874 -3.03604 0.80018 -0.124512 0.586693 + 0.108633 1.98662 -2.9861 -0.49426 -0.678915 0.542938 + 0.284568 2.00427 -2.96887 0.56808 -0.247494 -0.784877 + 0.261295 1.99188 -2.9818 0.187019 0.265387 -0.94583 + 0.2203 2.03343 -3.02458 -0.0508619 -0.991931 0.116125 + 0.240299 1.98703 -2.9834 -0.0571379 -0.00710554 -0.998341 + 0.199304 2.0285 -3.02623 0.0826115 -0.771611 -0.630708 + 0.156435 2.02905 -3.04178 -0.105135 -0.719327 -0.686669 + 0.263765 1.97714 -2.99568 -0.119907 0.938453 -0.323926 + 0.22481 1.97654 -2.98743 -0.0130644 0.94052 -0.339487 + 0.201344 1.98642 -2.97515 -0.0161998 0.130523 -0.991313 + 0.175566 1.99014 -2.97478 -0.121146 -0.768017 -0.628867 + 0.173526 2.0323 -3.02581 0.0509812 -0.987473 -0.149324 + 0.156435 2.02905 -3.04178 -0.132375 -0.934101 0.33156 + 0.286899 1.98164 -2.99787 -0.241542 0.932903 -0.267114 + 0.293134 1.98928 -3.0755 -0.0133371 0.983189 0.182106 + 0.268182 1.99335 -3.07676 0.253084 0.874727 0.413281 + 0.199857 1.98061 -2.98869 0.204668 0.977909 -0.0424764 + 0.175566 1.99014 -2.97478 0.287814 0.946572 -0.145479 + 0.284568 2.00427 -2.96887 -0.0733668 0.783513 -0.617028 + 0.310171 1.99395 -2.98499 -0.173813 0.973152 -0.150879 + 0.316268 1.99369 -3.07773 -0.223476 0.972495 0.0656668 + 0.319848 1.99731 -3.11521 -0.0681588 0.981479 0.179032 + 0.295996 1.99739 -3.09994 0.460292 -0.348579 0.81647 + 0.24433 1.99334 -3.06154 0.124711 0.929926 0.345956 + 0.161274 1.99295 -2.99625 0.215005 0.976527 0.0129801 + 0.136983 2.00247 -2.98234 0.170644 0.951116 -0.257408 + 0.322326 1.99302 -3.04417 0.00197971 0.999987 -0.00458595 + 0.325906 1.99664 -3.08165 -0.267212 0.961274 0.0674538 + 0.332804 1.99775 -3.02017 0.191921 0.950702 -0.24358 + 0.320649 1.99868 -2.96098 -0.564124 0.814722 0.134134 + 0.32929 2.00113 -2.94802 -0.154741 0.954427 0.255193 + 0.343366 1.99505 -2.9427 0.310494 0.919074 -0.242686 + 0.34688 1.99167 -3.01484 0.425132 0.903039 -0.0615074 + 0.313291 2.00102 -3.03582 0.492869 0.738373 -0.46031 + 0.320286 1.98989 -2.94595 -0.828572 0.0466269 0.557938 + 0.328927 1.99242 -2.93294 -0.700958 0.624826 0.343874 + 0.295702 1.99981 -2.96814 0.373223 0.927739 -0.00221117 + 0.284568 2.00427 -2.96887 0.372151 0.928166 -0.00327953 + 0.365691 1.98304 -2.9843 0.421741 0.906473 0.0210214 + 0.371161 1.97686 -2.92739 0.518874 0.766784 -0.377906 + 0.397432 1.96751 -2.92599 0.320663 0.923046 -0.21251 + 0.391961 1.97369 -2.9829 0.274841 0.958349 0.0776548 + 0.436121 1.96422 -2.97889 0.18569 0.97975 0.0748887 + 0.423477 1.96208 -2.9154 0.25171 0.923845 -0.288363 + 0.462167 1.9588 -2.9683 0.0456098 0.998736 -0.0211222 + 0.356671 2.00434 -2.92579 0.528511 -0.481743 -0.698999 + 0.384466 1.98607 -2.91054 0.263444 -0.0453287 -0.963609 + 0.406745 1.97654 -2.90444 0.373114 0.765192 -0.524659 + 0.348135 2.00185 -2.93868 0.745781 -0.658126 0.103347 + 0.39795 2.0237 -2.97152 0.719518 -0.692725 -0.0492576 + 0.406486 2.02619 -2.95862 0.19985 -0.78305 -0.588976 + 0.428765 2.01675 -2.95248 -0.153313 -0.745058 -0.649141 + 0.406745 1.97654 -2.90444 -0.132424 -0.729384 -0.671166 + 0.44583 1.96623 -2.90117 -0.151335 -0.750736 -0.643034 + 0.350242 1.97577 -2.9623 0.49825 -0.830182 0.250088 + 0.35437 1.97828 -2.99445 0.386881 -0.907121 -0.165695 + 0.402078 2.0262 -3.00365 0.856346 -0.503661 -0.114005 + 0.418264 2.08128 -3.01025 0.7548 -0.317299 -0.574106 + 0.328927 1.99242 -2.93294 0.479015 -0.567757 0.669476 + 0.331034 1.96634 -2.95656 -0.0169217 -0.972696 0.231465 + 0.30645 1.97627 -2.97876 -0.454314 -0.880803 0.133358 + 0.313322 1.9798 -3.00647 -0.180227 -0.93728 -0.298371 + 0.364508 2.01202 -3.06709 0.474649 -0.715071 -0.513208 + 0.36865 2.03918 -3.08753 0.68518 -0.346518 -0.640667 + 0.40622 2.05345 -3.02404 0.881552 -0.238116 -0.407635 + 0.295702 1.99981 -2.96814 -0.65275 -0.623705 0.430011 + 0.231434 2.02898 -3.02386 -0.328901 -0.943378 -0.043141 + 0.238306 2.0325 -3.05156 -0.238856 -0.842117 -0.483514 + 0.32346 2.01354 -3.07911 -0.0808887 -0.797601 -0.597737 + 0.328927 1.99242 -2.93294 -0.649816 -0.538453 0.536477 + 0.156435 2.02905 -3.04178 0.0275726 -0.992469 -0.119352 + 0.284568 2.00427 -2.96887 -0.367788 -0.927873 -0.061516 + 0.156435 2.02905 -3.04178 -0.214287 -0.391188 0.895016 + 0.44583 1.96623 -2.90117 0.249323 0.75169 -0.610573 + 0.462562 1.95177 -2.91213 0.30346 0.951695 -0.0467856 + 0.49606 1.95866 -2.97745 0.0813961 0.993522 0.0793004 + 0.483244 1.9587 -2.99094 0.004039 0.999992 -0.000346849 + 0.517137 1.95856 -3.00009 0.092826 0.992272 0.0823419 + 0.517922 1.95242 -2.95825 0.13078 0.978736 0.158024 + 0.484424 1.94553 -2.89293 0.171707 0.980794 0.092513 + 0.508552 1.94894 -2.92703 0.0423027 0.990757 0.128884 + 0.52042 1.93869 -2.87167 0.428624 0.900379 0.0748257 + 0.44583 1.96623 -2.90117 0.499743 0.810446 -0.305669 + 0.328927 1.99242 -2.93294 -0.026466 0.974304 0.223678 + 0.348135 2.00185 -2.93868 -0.494815 0.672304 -0.550605 + 0.267677 2.00019 -3.0754 0.259724 -0.874459 0.409713 + 0.297587 1.99953 -3.05706 -0.126168 -0.988859 0.0789889 + 0.213992 2.01165 -3.01764 -0.035651 -0.947964 0.316375 + 0.243514 1.99815 -3.05565 0.329877 -0.864645 0.378905 + 0.221579 1.99604 -3.06701 0.0763245 -0.997034 -0.00985793 + 0.197416 1.994 -3.04727 -0.547475 -0.434681 -0.715069 + 0.138523 1.99564 -3.00172 -0.590193 -0.29206 -0.752577 + 0.325906 1.99664 -3.08165 -0.082742 -0.996488 -0.0128938 + 0.322326 1.99302 -3.04417 -0.353591 -0.912555 0.205467 + 0.313291 2.00102 -3.03582 -0.30181 -0.929701 0.21111 + 0.319848 1.99731 -3.11521 -0.0142549 -0.999747 -0.0174161 + 0.332804 1.99775 -3.02017 -0.419856 -0.838005 0.348523 + 0.136983 2.00247 -2.98234 0.245324 -0.883155 -0.399817 + 0.164996 2.02874 -3.03604 0.519605 -0.842885 -0.13984 + 0.76871 1.61927 -1.22983 0.919224 0.339172 -0.199975 + 0.750901 1.63563 -1.28395 0.890788 0.423336 -0.165177 + 0.708791 1.70626 -1.3081 0.870879 0.469742 -0.144616 + 0.789525 1.56678 -1.21471 0.779198 0.138322 -0.611325 + 0.771717 1.58314 -1.26884 0.93754 0.261539 -0.229383 + 0.792052 1.49776 -1.24696 0.747982 0.303256 -0.590389 + 0.825985 1.56239 -1.1863 0.433016 -0.0171771 -0.901222 + 0.874389 1.49643 -1.23266 -0.227826 0.78994 -0.569289 + 0.75894 1.61619 -1.24569 0.465107 -0.328062 -0.822223 + 0.568883 1.86808 -2.71898 -0.52045 0.793298 0.315928 + 0.596791 1.8903 -2.71226 -0.637409 0.710444 0.298294 + 0.56253 1.89213 -2.78983 -0.70778 0.526266 0.471265 + 0.554398 1.87296 -2.73802 0.755214 0.513528 -0.407359 + 0.548045 1.897 -2.80887 0.412423 0.871442 0.265511 + 0.539499 1.90956 -2.78862 0.925239 -0.210193 -0.315836 + 0.56062 1.92182 -2.78625 0.348483 -0.763202 -0.544135 + 0.575518 1.88522 -2.73566 0.394795 -0.738155 -0.54705 + 0.568883 1.86808 -2.71898 0.467932 -0.702741 -0.535906 + 0.540993 1.91304 -2.85124 0.887587 0.458544 0.0439012 + 0.532448 1.92559 -2.83099 0.952967 -0.290272 -0.0871579 + 0.556381 1.93513 -2.81012 0.43379 -0.829295 -0.352272 + 0.63233 1.9467 -2.79915 0.224633 -0.819026 -0.527955 + 0.646581 1.94192 -2.78008 0.121137 -0.906707 -0.403989 + 0.58977 1.88043 -2.71657 0.456878 -0.852569 0.253748 + 0.568883 1.86808 -2.71898 0.47583 -0.7011 -0.531078 + 0.534839 1.92882 -2.85178 0.926069 -0.287059 -0.244934 + 0.558772 1.93836 -2.83091 0.386607 -0.913901 -0.123772 + 0.628091 1.96002 -2.82302 0.325178 -0.872606 -0.364443 + 0.52297 1.93907 -2.90713 0.56514 0.824394 0.0314878 + 0.508552 1.94894 -2.92703 0.519872 0.852978 0.04649 + 0.857639 1.53971 -1.09341 0.209745 0.209288 0.955095 + 0.734627 1.66052 -1.09287 0.272265 -0.276923 0.921513 + 0.691951 1.69874 -1.05208 0.72977 -0.187247 0.657551 + 0.666266 1.73981 -0.991201 0.918423 -0.181836 0.351332 + 0.653929 1.77309 -0.908846 0.980147 -0.0816021 0.180704 + 0.801719 1.66092 -1.09516 -0.0503109 -0.227895 0.972385 + 0.727067 1.74912 -1.07274 0.276988 -0.481855 0.83132 + 0.701382 1.79018 -1.01185 0.770398 -0.17425 0.613289 + 0.665803 1.85544 -0.942675 0.951726 -0.0417351 0.304099 + 0.649583 1.8106 -0.813416 0.981967 -0.133608 0.133752 + 0.924731 1.54019 -1.09564 0.122894 -0.206633 0.97067 + 0.956135 1.59387 -1.09764 0.135844 -0.186392 0.973039 + 0.872103 1.65857 -1.07749 -0.104962 -0.498 0.860801 + 0.797451 1.74686 -1.05501 -0.282399 -0.438527 0.853197 + 0.857639 1.53971 -1.09341 0.0284716 -0.108768 0.993659 + 0.976813 1.48683 -1.12362 0.493183 -0.54229 0.680214 + 1.00822 1.5406 -1.12556 0.817988 -0.259632 0.513309 + 0.989639 1.62409 -1.09438 0.525123 -0.0615618 0.848797 + 0.905607 1.68879 -1.07423 0.279292 -0.713321 0.642783 + 0.883508 1.6865 -1.05088 -0.333675 -0.941855 -0.0396204 + 0.921701 1.47324 -1.1323 -0.217656 -0.728071 0.650029 + 0.977234 1.46075 -1.16166 0.561699 -0.820421 -0.106785 + 1.00584 1.5264 -1.17677 0.909123 -0.355602 -0.216894 + 1.0114 1.59751 -1.17953 0.997605 -0.014321 -0.0676686 + 1.01377 1.61179 -1.12827 0.964203 0.0650206 0.257071 + 0.971005 1.70035 -1.08785 0.673212 0.0295699 0.738858 + 0.922122 1.44708 -1.17038 -0.182077 -0.811392 0.55542 + 0.857639 1.53971 -1.09341 -0.618596 -0.743815 0.253138 + 0.547729 2.0507 -1.40088 -0.559879 -0.824023 0.086733 + 0.531356 2.07762 -1.31671 -0.0112687 -0.95303 0.302666 + 0.474402 2.06298 -1.36495 0.239511 -0.909373 -0.340109 + 0.474158 2.07625 -1.40354 -0.0695818 -0.980446 -0.184076 + 0.465143 2.07809 -1.44612 -0.119267 -0.985195 -0.123147 + 0.538714 2.05245 -1.44351 -0.55642 -0.798752 0.228893 + 0.588596 2.00453 -1.39151 -0.898385 -0.436873 0.0452392 + 0.531356 2.07762 -1.31671 -0.753587 -0.654347 0.062748 + 0.400545 2.05461 -1.39905 0.360664 -0.803443 -0.47371 + 0.400301 2.06788 -1.43764 0.354171 -0.892785 -0.278385 + 0.426899 2.08626 -1.47047 0.106958 -0.971244 -0.212707 + 0.47773 2.07946 -1.47809 -0.393151 -0.918755 0.0363416 + 0.445089 2.02378 -1.34266 0.518758 -0.456248 -0.723 + 0.388764 1.99841 -1.35531 0.279624 -0.388313 -0.87808 + 0.319803 2.01877 -1.40457 0.315089 -0.808891 -0.496401 + 0.359019 2.06661 -1.50784 0.373913 -0.898965 -0.228146 + 0.385616 2.08499 -1.54067 0.255332 -0.966667 0.0189735 + 0.502044 2.03843 -1.29442 0.201838 -0.365986 -0.908469 + 0.412598 1.90184 -1.34124 0.301508 0.0049376 -0.953451 + 0.356273 1.87655 -1.35384 -0.242239 -0.43785 -0.865799 + 0.289944 1.91605 -1.33405 -0.186541 -0.539196 -0.821261 + 0.308022 1.96257 -1.36083 0.10913 -0.57836 -0.80845 + 0.531356 2.07762 -1.31671 0.565559 -0.684525 -0.459966 + 0.575856 2.0112 -1.45386 -0.800007 -0.554324 0.229596 + 0.580338 1.98159 -1.50598 -0.856886 -0.50255 0.114844 + 0.63432 1.85705 -1.49726 -0.944821 -0.325087 0.0403969 + 0.697732 1.64315 -1.30438 -0.768268 -0.612395 -0.186378 + 0.514872 2.03813 -1.48851 -0.659248 -0.721121 0.213018 + 0.497177 2.05931 -1.52979 -0.565527 -0.824655 0.011116 + 0.562643 2.00285 -1.54721 -0.787953 -0.614582 0.037663 + 0.62704 1.86132 -1.54027 -0.920635 -0.387396 0.0485341 + 0.695448 1.66118 -1.35421 -0.862039 -0.496172 -0.103452 + 0.75621 1.58202 -1.2999 -0.267214 -0.962764 -0.0410026 + 0.439282 2.08334 -1.53762 -0.191282 -0.974035 0.121109 + 0.51533 2.05069 -1.57487 -0.607573 -0.792174 -0.0575836 + 0.555363 2.00713 -1.59022 -0.81299 -0.582006 0.0177664 + 0.439486 2.08755 -1.50251 -0.115273 -0.992837 0.031416 + 0.385413 2.08078 -1.57577 0.138568 -0.981181 0.134473 + 0.457435 2.07473 -1.5827 -0.229298 -0.967001 0.111045 + 0.515561 2.0499 -1.62109 -0.53729 -0.841135 0.0617415 + 0.555594 2.00625 -1.63649 -0.827284 -0.561476 0.0185904 + 0.297377 2.03902 -1.49545 0.35498 -0.912076 -0.205198 + 0.29011 2.04489 -1.55221 0.393179 -0.915676 -0.0833482 + 0.3657 2.07343 -1.60525 0.177192 -0.980202 0.0883553 + 0.359616 2.06797 -1.64419 0.124811 -0.987634 0.0948761 + 0.451351 2.06927 -1.62164 -0.148316 -0.980866 0.12611 + 0.258161 1.99109 -1.39224 0.259526 -0.876804 -0.404798 + 0.166984 1.95299 -1.35484 0.273097 -0.880025 -0.388553 + 0.140569 1.94325 -1.36118 0.523372 -0.83758 -0.156656 + 0.270961 2.02929 -1.5018 0.437071 -0.889907 -0.130519 + 0.239043 1.95976 -1.34897 -0.00762572 -0.667344 -0.74471 + 0.147866 1.92165 -1.31156 -0.00968685 -0.754085 -0.656706 + 0.112991 1.89426 -1.27811 0.0651212 -0.828291 -0.556502 + 0.078295 1.88988 -1.28734 0.486043 -0.831921 -0.267713 + 0.152396 1.95209 -1.41768 0.604537 -0.796573 -0.00249135 + 0.220964 1.91315 -1.32224 -0.1379 -0.589326 -0.796039 + 0.186089 1.88576 -1.28879 -0.161239 -0.700465 -0.695234 + 0.099451 1.85062 -1.21534 0.121784 -0.827132 -0.548655 + 0.064756 1.84625 -1.22456 0.345297 -0.803886 -0.48429 + 0.307145 1.88639 -1.30329 -0.0763115 -0.738844 -0.669542 + 0.090122 1.89871 -1.34383 0.601238 -0.796726 -0.0611623 + 0.171544 1.96768 -1.46809 0.512808 -0.85304 -0.0966938 + 0.270397 2.03754 -1.58169 0.41276 -0.904147 -0.110213 + 0.087235 1.90525 -1.39075 0.549947 -0.825664 -0.125846 + 0.171197 1.97345 -1.51008 0.481269 -0.865152 -0.14104 + 0.162867 1.97594 -1.54879 0.44374 -0.873146 -0.20177 + 0.262067 2.04011 -1.62035 0.38276 -0.920835 -0.0745459 + 0.02884 1.85513 -1.35635 0.327307 -0.941844 -0.0761579 + 0.086888 1.91102 -1.43274 0.567938 -0.815084 -0.114392 + 0.089782 1.91973 -1.48143 0.561941 -0.812529 -0.154978 + 0.173147 1.99886 -1.61009 0.431061 -0.885795 -0.171911 + 0.249812 2.03641 -1.65153 0.357099 -0.930957 -0.0761602 + -0.028838 1.8545 -1.31385 -0.210111 -0.977045 0.0351617 + -0.028838 1.85513 -1.35634 -0.348063 -0.934808 -0.0706067 + 0.031734 1.86393 -1.40499 0.337605 -0.933536 -0.120551 + 0.031734 1.86779 -1.44848 0.31907 -0.935751 -0.150211 + 0.100061 1.94265 -1.54273 0.566829 -0.807746 -0.162021 + -0.011004 1.92279 -1.16193 0.000143575 -0.91209 0.409991 + 0.994443 1.63158 -1.25994 0.451141 -0.445626 -0.773233 + 0.955513 1.48149 -1.19538 0.278587 -0.55692 -0.782451 + 0.874389 1.49643 -1.23266 0.306049 -0.442079 -0.843149 + 1.03052 1.69812 -1.27639 0.843935 -0.181655 0.504752 + 1.03288 1.78952 -1.25311 0.91013 -0.0638198 0.409378 + 1.00885 1.67572 -1.27419 0.305529 -0.381384 -0.872467 + 1.03288 1.78952 -1.25311 -0.216746 -0.128378 -0.96775 + 1.0202 1.61368 -1.22695 0.72889 -0.16296 -0.664954 + 0.922122 1.44708 -1.17038 0.256915 -0.513074 -0.818993 + 1.01446 1.69188 -1.20979 0.889155 0.0632542 0.453214 + 0.995087 1.68693 -1.18041 0.934164 0.201385 0.294589 + 0.995136 1.68804 -1.12174 0.938642 0.210084 0.273524 + 1.02713 1.86772 -1.23595 0.827111 -0.0210253 0.561645 + 0.992933 1.94976 -1.19305 0.708781 -0.0524788 0.703473 + 1.05983 1.83094 -1.29605 0.866174 -0.109213 0.487663 + 1.06221 1.92259 -1.27918 0.77134 -0.13212 0.622558 + 1.05748 1.73954 -1.31934 0.844177 -0.0109204 0.535954 + 1.09515 1.77972 -1.37113 0.936955 -0.161103 0.310098 + 1.09753 1.87136 -1.35425 0.820421 -0.209637 0.531942 + 1.12102 1.97158 -1.32344 0.747078 -0.25842 0.612448 + 1.02801 2.00471 -1.23623 0.730534 -0.171177 0.661073 + 1.05056 1.6794 -1.29078 0.719179 0.30666 0.623491 + 1.08036 1.67959 -1.33931 0.952271 0.0121125 0.305014 + 1.08457 1.69014 -1.39597 0.843293 -0.337756 -0.418065 + 1.09936 1.79026 -1.42779 0.817456 -0.444766 -0.365991 + 1.14099 1.87746 -1.41543 0.895959 -0.360931 0.258815 + 1.02216 1.67959 -1.28351 0.305812 0.00347126 0.952086 + 1.05968 1.62708 -1.22854 0.517828 0.615892 0.593744 + 1.07345 1.61946 -1.31076 0.942933 0.332733 -0.0129195 + 1.04813 1.6359 -1.39004 0.636789 -0.437044 -0.635211 + 1.03903 1.79188 -1.47559 0.66187 -0.559084 -0.499352 + 1.03127 1.62727 -1.22128 -0.294471 0.350689 0.88899 + 1.04195 1.61112 -1.2181 -0.0172773 -0.558898 0.829056 + 1.07094 1.61182 -1.22433 0.55557 0.69889 0.450437 + 1.08471 1.6042 -1.30653 -0.344203 0.874207 0.342471 + 1.06697 1.60458 -1.35498 0.910741 0.180925 -0.371236 + 0.970943 1.60308 -1.27899 -0.246095 -0.831474 0.498084 + 1.0649 1.61489 -1.27083 0.065591 -0.996733 -0.0471223 + 1.09389 1.61568 -1.277 -0.931783 -0.287204 -0.222022 + 1.07094 1.61182 -1.22433 0.0094432 -0.997581 -0.0688635 + 0.974214 1.60453 -1.30429 0.153899 -0.967906 0.198678 + 1.06817 1.61633 -1.29612 0.0398838 -0.998653 -0.0331873 + 1.07614 1.61597 -1.3255 -0.632925 -0.737396 0.235907 + 0.958138 1.59199 -1.32117 0.0683383 -0.826753 0.558399 + 1.05513 1.61691 -1.31914 0.149368 -0.986403 0.0685423 + 1.06311 1.61647 -1.34857 -0.252598 -0.914244 0.316782 + 1.06697 1.60458 -1.35498 -0.715491 -0.465826 0.520653 + 0.916015 1.58052 -1.33811 -0.0512089 -0.880662 0.470969 + 1.0045 1.56971 -1.36039 0.384251 -0.865048 0.322558 + 1.03906 1.60429 -1.33608 0.42292 -0.860697 0.283443 + 1.04445 1.60833 -1.36107 0.66917 -0.639706 -0.378136 + 0.999675 1.61762 -1.41156 0.577824 -0.513928 -0.634032 + 0.874885 1.58171 -1.35816 -0.155836 -0.935521 0.317042 + 0.869803 1.55489 -1.40731 -0.117366 -0.951148 0.285557 + 0.962381 1.55824 -1.37732 0.0737749 -0.961406 0.265058 + 0.962586 1.55538 -1.43136 0.16705 -0.984224 -0.0582934 + 1.00391 1.56712 -1.43049 0.500222 -0.861933 -0.0827651 + 1.00949 1.57435 -1.40242 0.746686 -0.664781 0.0229117 + 0.797842 1.56298 -1.45753 -0.373286 -0.8553 0.359333 + 0.828673 1.55607 -1.42736 -0.435269 -0.785725 0.439519 + 0.779727 1.56951 -1.42564 -0.419993 -0.901678 0.102872 + 0.764601 1.55928 -1.50431 -0.560087 -0.819925 0.118428 + 0.795433 1.55237 -1.47414 -0.408857 -0.847247 0.339128 + 0.718965 1.64867 -1.47995 -0.833241 -0.547865 -0.0745153 + 0.709268 1.66856 -1.55219 -0.910085 -0.336092 0.242461 + 0.741883 1.56683 -1.54499 -0.772004 -0.538919 0.337011 + 0.748333 1.58493 -1.27294 -0.168059 -0.98413 0.0569621 + 0.711105 1.59853 -1.28851 -0.392707 -0.580329 -0.713442 + 0.697732 1.64315 -1.30438 -0.36092 -0.406732 -0.839229 + 0.999675 1.61762 -1.41156 -0.606195 -0.520986 0.600917 + 0.617342 1.88121 -1.61252 -0.90865 -0.416987 0.0218258 + 0.614695 1.88295 -1.65654 -0.924023 -0.346765 0.161047 + 0.68655 1.67611 -1.59288 -0.899378 -0.247155 0.360602 + 0.735827 1.56272 -1.57048 -0.763838 -0.554399 0.330445 + 0.789377 1.54835 -1.49958 -0.338769 -0.907886 0.246939 + 0.552946 2.00791 -1.68057 -0.798235 -0.598307 0.069638 + 0.550943 2.00401 -1.7274 -0.801423 -0.589201 0.10278 + 0.602854 1.87946 -1.70009 -0.934379 -0.315812 0.16492 + 0.674709 1.67271 -1.63638 -0.903988 -0.220834 0.366111 + 0.510269 2.04669 -1.66974 -0.477782 -0.872512 0.102211 + 0.508265 2.04278 -1.71657 -0.476349 -0.872615 0.107861 + 0.550714 1.99679 -1.7715 -0.802137 -0.589271 0.0966212 + 0.602625 1.87233 -1.74413 -0.95172 -0.27653 0.13327 + 0.446058 2.06606 -1.67028 -0.136581 -0.986829 0.0866803 + 0.440412 2.06276 -1.71117 -0.132052 -0.985838 0.103375 + 0.507865 2.03663 -1.76551 -0.457713 -0.86867 0.189502 + 0.514368 2.02202 -1.8028 -0.577323 -0.808095 0.11696 + 0.557217 1.98227 -1.80875 -0.824748 -0.543819 0.155086 + 0.34736 2.06418 -1.67543 0.140809 -0.988981 0.0457112 + 0.341714 2.06088 -1.71631 0.118041 -0.992768 0.0218711 + 0.338668 2.061 -1.74972 0.081344 -0.996683 0.00225337 + 0.440012 2.0566 -1.76011 -0.176853 -0.979986 0.091382 + 0.251153 2.04122 -1.70027 0.319286 -0.94645 -0.0478393 + 0.248108 2.04134 -1.73368 0.381642 -0.924035 -0.022558 + 0.264373 2.05085 -1.77315 0.314288 -0.945223 -0.0881893 + 0.339247 2.05993 -1.79147 0.030166 -0.998423 -0.0473315 + 0.174488 2.00368 -1.65883 0.538045 -0.842662 0.0206794 + 0.189027 2.00479 -1.72437 0.501598 -0.864757 -0.0243829 + 0.205292 2.0143 -1.76384 0.356518 -0.923188 -0.143591 + 0.265035 2.05477 -1.80713 0.228708 -0.956795 -0.179543 + 0.339909 2.06385 -1.82546 -0.000285224 -0.995065 -0.0992229 + 0.111065 1.95909 -1.59961 0.587067 -0.809264 -0.0210554 + 0.125604 1.96012 -1.66519 0.335336 -0.92672 -0.169525 + 0.187894 2.01719 -1.79183 0.169331 -0.918047 -0.358491 + 0.247637 2.05774 -1.83508 0.26027 -0.935877 -0.237474 + 0.042738 1.88424 -1.50536 0.33673 -0.88782 -0.313669 + 0.042738 1.90673 -1.53852 0.0774374 -0.866322 -0.493446 + 0.040862 1.9282 -1.58431 -0.118476 -0.798496 -0.590226 + 0.123728 1.98159 -1.71098 -0.161344 -0.893084 -0.419963 + -0.031751 1.86788 -1.44843 -0.348314 -0.926419 -0.142913 + -0.042737 1.88423 -1.50535 -0.331087 -0.895377 -0.297794 + -0.042737 1.90673 -1.53852 0.13453 -0.849144 -0.510741 + -0.040873 1.9282 -1.58431 0.125077 -0.810713 -0.571926 + 0.040862 1.96688 -1.60749 -0.334689 -0.645822 -0.68622 + -0.031751 1.86393 -1.40499 -0.339445 -0.932228 -0.12541 + -0.100078 1.94265 -1.54273 -0.565744 -0.808957 -0.159757 + -0.111065 1.95909 -1.5996 -0.672005 -0.740429 0.0132315 + -0.125604 1.96012 -1.66519 -0.338467 -0.924021 -0.177833 + -0.12374 1.98159 -1.71098 0.0467623 -0.904869 -0.423113 + -0.089799 1.91981 -1.48138 -0.52149 -0.834869 -0.176187 + -0.162859 1.97594 -1.54879 -0.446653 -0.870728 -0.205752 + -0.173139 1.99886 -1.61009 -0.464722 -0.872677 -0.149894 + -0.174485 2.00368 -1.65883 -0.534945 -0.844501 0.0255376 + -0.086886 1.91101 -1.43273 -0.566541 -0.816399 -0.111913 + -0.171197 1.97345 -1.51008 -0.483083 -0.864242 -0.140419 + -0.262059 2.04011 -1.62035 -0.357959 -0.930292 -0.0801356 + -0.249804 2.03641 -1.65153 -0.348048 -0.935789 -0.0562269 + -0.25115 2.04123 -1.70028 -0.346664 -0.937405 -0.033101 + -0.087233 1.90524 -1.39074 -0.527614 -0.838987 -0.13313 + -0.171544 1.96768 -1.46809 -0.512997 -0.852862 -0.0972679 + -0.290109 2.04489 -1.55221 -0.392271 -0.916058 -0.0834259 + -0.270397 2.03754 -1.58169 -0.4122 -0.904524 -0.109213 + -0.031728 1.84797 -1.26694 0.437367 -0.897671 -0.0538279 + -0.090123 1.89872 -1.34384 -0.6065 -0.791501 -0.0753859 + -0.152415 1.95209 -1.41768 -0.604237 -0.7968 -0.0028008 + -0.064756 1.84625 -1.22456 0.0618531 -0.984561 0.163748 + -0.078296 1.88988 -1.28734 -0.788453 -0.592911 -0.163702 + -0.140588 1.94325 -1.36118 -0.523398 -0.837579 -0.156575 + -0.270981 2.02929 -1.5018 -0.437137 -0.889871 -0.130543 + -0.044032 1.92098 -1.1196 -0.0115868 -0.707289 0.706829 + -0.055769 1.94427 -1.11555 -0.910722 -0.180195 0.371638 + -0.099451 1.85062 -1.21534 -0.0480097 -0.996661 -0.0660425 + -0.112991 1.89426 -1.27811 -0.0651286 -0.828299 -0.556488 + -0.166982 1.95299 -1.35484 -0.273241 -0.880027 -0.388448 + -0.011004 2.20909 -0.926224 0.7156 -0.443972 0.539263 + -0.186089 1.88576 -1.28879 0.161232 -0.700466 -0.695235 + -0.220969 1.91315 -1.32224 0.137791 -0.589257 -0.796109 + -0.147871 1.92165 -1.31156 0.00972485 -0.754059 -0.656734 + -0.258158 1.99109 -1.39224 -0.259558 -0.876762 -0.404868 + -0.297374 2.03902 -1.49545 -0.35527 -0.91204 -0.204857 + -0.385413 2.08078 -1.57577 -0.138565 -0.981181 0.134478 + -0.289946 1.91605 -1.33405 0.277019 -0.573605 -0.770868 + -0.239048 1.95976 -1.34897 0.00738439 -0.667543 -0.744535 + -0.319803 2.01877 -1.40457 -0.317686 -0.806755 -0.498218 + -0.359019 2.06661 -1.50784 -0.374431 -0.899556 -0.224946 + -0.385615 2.08499 -1.54067 -0.255338 -0.966666 0.0189713 + -0.307158 1.88639 -1.30328 0.0762721 -0.738896 -0.669489 + 1.04089 1.60615 -1.42989 0.816785 -0.57681 -0.0123572 + 1.03531 1.59883 -1.45802 0.720083 -0.692699 -0.0406009 + 1.07254 1.68849 -1.48572 0.460321 0.326474 0.825542 + 0.958147 1.58084 -1.55326 0.318838 -0.928762 -0.189058 + 0.974159 1.59288 -1.59131 0.252233 -0.962968 -0.0952475 + 1.05132 1.61087 -1.49608 0.251025 -0.956782 -0.146815 + 1.09371 1.62534 -1.52933 0.734313 -0.600706 0.316129 + 1.11344 1.68017 -1.5459 0.899975 -0.129682 0.416207 + 0.91682 1.56909 -1.55411 0.230899 -0.95778 -0.171298 + 0.854296 1.57472 -1.65427 0.127203 -0.985126 -0.115527 + 0.984777 1.59709 -1.6334 0.217578 -0.976041 0.00205133 + 1.06806 1.61524 -1.58263 0.280751 -0.959757 -0.00679284 + 1.11045 1.62969 -1.61588 0.571944 -0.818042 0.0607276 + 0.870008 1.5521 -1.46128 0.102568 -0.994519 -0.0203004 + 0.835008 1.54712 -1.48826 0.0904825 -0.992795 0.0785595 + 0.88182 1.56411 -1.58109 0.333728 -0.928299 -0.163972 + 0.822507 1.53543 -1.53941 0.195749 -0.97751 0.0784601 + 0.808802 1.53514 -1.5703 0.149093 -0.97645 -0.15594 + 0.868116 1.5639 -1.61192 0.561916 -0.744045 -0.361451 + 0.776876 1.53665 -1.55073 -0.327038 -0.918534 0.222127 + 0.766598 1.5343 -1.58024 -0.239272 -0.970949 0.00269664 + 0.780273 1.54606 -1.61161 0.13826 -0.915184 -0.378579 + 0.765583 1.55312 -1.63144 0.167659 -0.857169 -0.486982 + 0.853425 1.57097 -1.63176 -0.00466186 -0.959275 -0.282436 + 0.708811 1.56323 -1.62117 -0.773408 -0.51719 0.366543 + 0.698533 1.56096 -1.65062 -0.690655 -0.685795 0.229522 + 0.738069 1.5453 -1.62151 -0.133907 -0.977187 -0.164845 + 0.710916 1.55531 -1.66445 0.00711219 -0.924414 -0.381325 + 0.750306 1.56372 -1.6498 0.234349 -0.853668 -0.465114 + 0.647693 1.67322 -1.68706 -0.924547 -0.16637 0.342832 + 0.67138 1.57105 -1.69351 -0.72205 -0.660574 0.205637 + 0.594177 1.86686 -1.79246 -0.96086 -0.237148 0.143211 + 0.639244 1.66784 -1.73534 -0.965609 -0.220461 0.137828 + 0.66662 1.5694 -1.74905 -0.563861 -0.822548 -0.0739995 + 0.695639 1.56591 -1.6828 0.0581625 -0.941151 -0.332944 + 0.751176 1.56747 -1.67231 0.050207 -0.994112 -0.096026 + 0.594023 1.85066 -1.8352 -0.96658 -0.252292 0.0455186 + 0.634484 1.66618 -1.79088 -0.959732 -0.279773 0.0253176 + 0.67391 1.57456 -1.78639 -0.470853 -0.849224 -0.238989 + 0.702929 1.57108 -1.72015 0.0412472 -0.996137 -0.0775247 + 0.768767 1.56808 -1.72116 0.0530425 -0.996764 -0.060392 + 0.557063 1.96606 -1.85148 -0.883195 -0.456076 0.109363 + 0.552771 1.96938 -1.88103 -0.887925 -0.459138 -0.0279655 + 0.594288 1.85134 -1.88378 -0.959408 -0.277764 -0.0488163 + 0.634749 1.66686 -1.83946 -0.927225 -0.358029 -0.10986 + 0.510076 2.02542 -1.8323 -0.604471 -0.796521 -0.0129642 + 0.555563 1.97222 -1.92336 -0.894779 -0.431104 -0.116272 + 0.59708 1.85427 -1.92606 -0.943277 -0.295349 -0.151648 + 0.638298 1.6843 -1.89185 -0.883089 -0.410002 -0.228147 + 0.677459 1.59199 -1.83878 -0.51054 -0.791386 -0.336239 + 0.44059 2.05553 -1.80185 -0.227041 -0.973863 0.00660674 + 0.516572 2.02379 -1.88107 -0.665881 -0.737829 -0.110502 + 0.520779 2.02929 -1.92639 -0.654446 -0.741409 -0.148369 + 0.55977 1.97772 -1.96868 -0.890791 -0.400217 -0.215214 + 0.603326 1.86842 -1.97277 -0.92247 -0.311388 -0.228225 + 0.447086 2.0539 -1.85062 -0.268111 -0.961703 -0.0569544 + 0.449094 2.05791 -1.89177 -0.280381 -0.951832 -0.124101 + 0.522501 2.03545 -1.97427 -0.612652 -0.773905 -0.160398 + 0.565518 1.9927 -2.01062 -0.860653 -0.477821 -0.175963 + 0.609074 1.8834 -2.01471 -0.891675 -0.341021 -0.297691 + 0.341917 2.06786 -1.86661 -0.0445563 -0.984371 -0.170377 + 0.340549 2.07585 -1.89925 -0.0944188 -0.969281 -0.227112 + 0.450816 2.06408 -1.93966 -0.300418 -0.939814 -0.16278 + 0.522957 2.04655 -2.01909 -0.582695 -0.798623 -0.150557 + 0.565974 2.00379 -2.05543 -0.830559 -0.50032 -0.244648 + 0.246269 2.06574 -1.86774 0.12086 -0.933249 -0.338289 + 0.259559 2.08354 -1.90636 0.0402131 -0.940388 -0.337718 + 0.338979 2.08419 -1.93909 -0.142759 -0.958185 -0.247996 + 0.449246 2.07242 -1.9795 -0.302975 -0.937516 -0.171086 + 0.17614 2.05015 -1.86073 0.0867517 -0.912287 -0.400258 + 0.18943 2.06804 -1.89932 0.143896 -0.918931 -0.367231 + 0.261 2.09316 -1.93783 -0.00387187 -0.955782 -0.294049 + 0.34042 2.09381 -1.97056 -0.162819 -0.948114 -0.273074 + 0.111974 2.01456 -1.77988 -0.27701 -0.859301 -0.429962 + 0.171277 2.07515 -1.92282 -0.0161006 -0.916453 -0.399819 + 0.242848 2.10027 -1.96134 0.0538339 -0.947297 -0.315802 + 0.337427 2.1054 -2.00943 -0.182357 -0.934912 -0.304442 + 0.437442 2.0831 -2.0248 -0.318361 -0.928611 -0.190599 + 0.035854 1.99695 -1.65639 -0.258966 -0.831457 -0.491545 + 0.106966 2.04463 -1.82877 -0.320906 -0.852873 -0.411858 + 0.158061 2.0999 -1.9735 -0.0158891 -0.920281 -0.390935 + 0.247097 2.11101 -1.99235 -0.0366604 -0.920525 -0.38896 + 0.341676 2.11606 -2.04048 -0.225425 -0.924514 -0.30734 + -0.040873 1.96688 -1.60749 0.447342 -0.605901 -0.657852 + -0.035869 1.99695 -1.65639 0.259909 -0.833199 -0.488085 + 0.035854 2.01767 -1.68967 -0.294139 -0.83197 -0.470434 + 0.093749 2.06938 -1.87943 -0.259546 -0.892635 -0.368563 + -0.111985 2.01456 -1.77988 0.275051 -0.855166 -0.43936 + -0.106981 2.04463 -1.82877 0.292868 -0.860237 -0.417396 + -0.093765 2.06929 -1.87949 0.2604 -0.89144 -0.370846 + -0.035869 2.01767 -1.68967 0.365537 -0.808481 -0.461239 + 0.025987 2.03612 -1.72583 -0.168121 -0.904856 -0.391115 + -0.187894 2.01719 -1.79183 -0.174317 -0.913408 -0.36783 + -0.17614 2.05015 -1.86073 -0.108508 -0.915471 -0.387478 + -0.171277 2.07515 -1.92282 0.011308 -0.913346 -0.407028 + -0.189024 2.00479 -1.72437 -0.486474 -0.872838 -0.0386927 + -0.205292 2.0143 -1.76384 -0.356607 -0.923126 -0.143773 + -0.247637 2.05774 -1.83508 -0.185314 -0.943872 -0.273431 + -0.248104 2.04134 -1.73368 -0.394612 -0.918022 -0.0389338 + -0.264373 2.05085 -1.77315 -0.314272 -0.94523 -0.088168 + -0.265035 2.05477 -1.80713 -0.228408 -0.956859 -0.179586 + -0.341714 2.06088 -1.71631 -0.105217 -0.993904 0.0329194 + -0.338669 2.061 -1.74972 -0.0692507 -0.997581 -0.00607547 + -0.339247 2.05993 -1.79147 -0.0202501 -0.999058 -0.0383757 + -0.339909 2.06385 -1.82546 0.0163608 -0.993846 -0.109556 + -0.34736 2.06418 -1.67543 -0.143915 -0.988425 0.0480109 + -0.440412 2.06276 -1.71117 0.12431 -0.986141 0.109878 + -0.440012 2.0566 -1.76011 0.162983 -0.983239 0.0817146 + -0.44059 2.05553 -1.80185 0.215503 -0.976374 0.0158792 + -0.447086 2.0539 -1.85062 0.262667 -0.962886 -0.0621016 + -0.359616 2.06797 -1.64419 -0.133723 -0.987247 0.0863842 + -0.446058 2.06606 -1.67028 0.140596 -0.985975 0.0899251 + -0.508265 2.04278 -1.71657 0.474703 -0.873774 0.105713 + -0.507865 2.03663 -1.76551 0.482399 -0.865182 0.136935 + -0.510076 2.02542 -1.8323 0.61025 -0.792073 0.0146968 + -0.3657 2.07343 -1.60525 -0.177184 -0.980204 0.088356 + -0.451351 2.06927 -1.62164 0.150486 -0.980798 0.124052 + -0.515571 2.0499 -1.62109 0.543541 -0.836332 0.0714971 + -0.510278 2.04669 -1.66974 0.492073 -0.865777 0.0910711 + -0.550943 2.00401 -1.7274 0.804281 -0.585967 0.0988655 + -0.457435 2.07473 -1.5827 0.229321 -0.966998 0.111025 + -0.515322 2.05069 -1.57487 0.576369 -0.816993 -0.0179433 + -0.555603 2.00625 -1.63649 0.817199 -0.575558 0.0303213 + -0.552956 2.00791 -1.68057 0.793023 -0.606439 0.0578475 + -0.439282 2.08334 -1.53762 0.191301 -0.974031 0.121108 + -0.497169 2.05931 -1.52979 0.558127 -0.829746 0.00398275 + -0.562635 2.00285 -1.54721 0.80071 -0.598515 0.0253719 + -0.555354 2.00713 -1.59022 0.821027 -0.569684 0.0370653 + -0.439484 2.08755 -1.50251 0.115367 -0.992835 0.0311252 + -0.47773 2.07946 -1.47809 0.392774 -0.91892 0.0362546 + -0.514858 2.03812 -1.4885 0.692738 -0.691325 0.205385 + -0.580324 1.98159 -1.50598 0.814622 -0.560088 -0.15064 + -0.63432 1.85705 -1.49726 0.921812 -0.387524 0.00933292 + -0.426897 2.08626 -1.47047 -0.106515 -0.971316 -0.212603 + -0.465143 2.07809 -1.44612 0.1193 -0.985214 -0.122965 + -0.538714 2.05245 -1.44351 0.55632 -0.798899 0.228624 + -0.575842 2.0112 -1.45386 0.771179 -0.440403 0.459704 + -0.600283 1.9196 -1.4594 0.922073 -0.387009 0.00237487 + -0.400301 2.06788 -1.43764 -0.317224 -0.909285 -0.269389 + -0.474158 2.07625 -1.40354 -0.000841495 -0.994941 -0.100453 + -0.547729 2.0507 -1.40088 0.595961 -0.794513 0.116533 + -0.588591 2.00453 -1.39152 0.893102 -0.445823 0.0600933 + -0.400545 2.05461 -1.39905 -0.351901 -0.801865 -0.482884 + -0.474401 2.06298 -1.36495 -0.445921 -0.790117 -0.420558 + -0.531356 2.07762 -1.31671 0.190772 -0.863539 -0.466805 + -0.572218 2.03154 -1.3073 0.643406 -0.517911 -0.563734 + -0.308024 1.96257 -1.36083 0.0454341 -0.434275 -0.899634 + -0.388766 1.99849 -1.35526 -0.301134 -0.3669 -0.880172 + -0.445089 2.02378 -1.34266 -0.518481 -0.45634 -0.72314 + -0.502044 2.03843 -1.29442 -0.201851 -0.365996 -0.908462 + -0.516749 1.9941 -1.29365 -0.16422 -0.00214567 -0.986421 + -0.356275 1.87655 -1.35384 0.209898 -0.484645 -0.849154 + -0.412598 1.90184 -1.34124 -0.301528 0.00494521 -0.953444 + -0.427303 1.85751 -1.34046 -0.0279439 -0.123754 -0.991919 + -0.307158 1.88639 -1.30328 0.544734 -0.814191 -0.200894 + -0.373487 1.84689 -1.32308 0.417849 -0.900289 -0.12199 + -0.436509 1.85922 -1.26723 0.429557 -0.543335 0.721296 + -0.49098 1.81562 -1.26952 0.751295 -0.349062 0.5601 + -0.427958 1.8033 -1.32537 0.457793 -0.606249 0.650299 + -0.475914 1.89309 -1.2211 0.782113 -0.491869 0.382575 + -0.500833 1.82957 -1.20268 0.939012 -0.332084 0.0893095 + -0.51418 1.75007 -1.25658 0.840412 -0.540167 0.0438927 + -0.427958 1.8033 -1.32537 0.652006 -0.0819838 0.753769 + -0.422755 1.953 -1.21965 0.844536 0.00795385 0.535439 + -0.45742 1.9356 -1.16112 0.9233 -0.216313 0.317374 + -0.482339 1.87208 -1.1427 0.945903 -0.307456 0.103623 + -0.506073 1.81232 -1.1118 0.958146 -0.27496 0.0797017 + -0.524033 1.76402 -1.18974 0.942365 -0.331354 0.0464063 + -0.38335 1.9192 -1.26572 0.640686 0.0840649 0.763187 + -0.406668 2.21423 -1.56392 0.802703 0.471233 0.365524 + -0.458864 2.00335 -1.18766 0.948296 0.193561 0.251535 + -0.470622 2.07197 -1.13612 0.989595 0.086953 0.114639 + -0.469178 2.00413 -1.10962 0.972673 0.00364498 0.232153 + -0.307158 1.88639 -1.30328 0.314201 -0.301025 0.900367 + -0.427958 1.8033 -1.32537 0.102436 -0.26789 -0.957988 + -0.503793 1.84717 -1.33935 -0.120804 0.0310537 -0.992191 + -0.548917 1.83148 -1.32838 -0.357764 0.0485685 -0.932548 + -0.561873 1.97841 -1.28268 0.147875 -0.106814 -0.983221 + -0.504448 1.79296 -1.32426 0.174015 -0.517839 -0.837593 + -0.541439 1.73998 -1.3119 0.364933 -0.463747 -0.807318 + -0.597746 1.77671 -1.30732 -0.189676 0.012338 -0.981769 + -0.589436 1.89582 -1.28503 0.103275 -0.0258392 -0.994317 + -0.599781 1.94896 -1.30966 0.87307 -0.263721 -0.410122 + -0.551171 1.69718 -1.24416 0.991708 -0.118923 0.0487045 + -0.542234 1.62171 -1.22585 0.780819 -0.375076 -0.499639 + -0.590268 1.68522 -1.29085 0.221149 -0.440923 -0.869873 + -0.631381 1.67812 -1.30036 -0.0164012 -0.488553 -0.87238 + -0.628198 1.74036 -1.30896 0.284703 -0.080724 -0.955211 + -0.541192 1.70115 -1.16484 0.992566 -0.116392 -0.0355904 + -0.532254 1.62568 -1.14653 0.996308 -0.0840098 0.0176845 + -0.556701 1.56805 -1.18832 0.482479 -0.752529 -0.448235 + -0.427958 1.8033 -1.32537 0.106893 -0.846721 -0.521189 + 0.998147 1.78121 -1.21072 0.176721 0.0027352 0.984257 + 0.973831 1.76895 -1.17167 0.931008 0.205379 0.301735 + 0.97388 1.77014 -1.11294 0.962471 0.214047 0.166836 + 0.948906 1.69815 -1.06444 0.65038 -0.758601 -0.0391053 + 0.97091 1.85955 -1.1818 0.645793 0.0168485 0.763327 + 0.947908 1.85511 -1.16152 0.872688 0.225909 0.432875 + 0.950398 1.84448 -1.0949 0.955143 0.277036 0.104658 + 0.940618 1.79502 -1.02983 0.988135 0.0332332 0.149946 + 0.9641 1.72068 -1.04788 0.953665 -0.172208 0.246715 + 0.901206 1.61571 -1.00085 0.845814 -0.530776 -0.0536267 + 0.965696 2.02809 -1.16413 0.73215 -0.09829 0.674014 + 0.937612 2.10506 -1.11184 0.459765 -0.284535 0.841223 + 0.944987 1.94571 -1.17164 0.118054 -0.164887 0.979222 + 0.914823 2.0173 -1.13822 0.454341 -0.170611 0.874338 + 0.918321 1.93126 -1.14001 0.856898 0.2115 0.470099 + 1.01448 2.0909 -1.18991 0.62502 -0.268693 0.732908 + 0.986391 2.16787 -1.13762 0.613835 -0.297592 0.731194 + 0.964182 2.25192 -1.0832 0.515252 -0.329734 0.791069 + 0.907448 2.17665 -1.07843 0.507999 -0.269674 0.818054 + 1.01446 1.69188 -1.20979 -0.601831 -0.101663 0.792126 + 1.10748 2.05776 -1.27712 0.655601 -0.30825 0.689325 + 1.09549 2.15062 -1.22155 0.636267 -0.307186 0.707673 + 1.07328 2.23468 -1.16714 0.605909 -0.333226 0.722381 + 1.16448 1.97777 -1.38457 0.876606 -0.270515 0.397974 + 1.17192 2.06806 -1.34315 0.851429 -0.241055 0.465792 + 1.15993 2.16082 -1.28762 0.792213 -0.25469 0.554556 + 1.15643 2.2665 -1.23506 0.773664 -0.244587 0.584483 + 1.05397 2.32482 -1.10727 0.575139 -0.330183 0.748462 + 1.17722 1.95109 -1.46175 0.928746 -0.342127 0.142757 + 1.18692 2.03124 -1.42838 0.943336 -0.220648 0.247853 + 1.19436 2.12152 -1.38695 0.912291 -0.221821 0.344267 + 1.20373 2.19955 -1.34889 0.87031 -0.266113 0.41442 + 1.20022 2.30514 -1.29638 0.823583 -0.222867 0.521576 + 1.13559 1.86389 -1.47411 0.772915 -0.587424 -0.239867 + 1.16166 1.92269 -1.53557 0.773735 -0.633217 -0.0192284 + 1.20451 1.99043 -1.53648 0.924552 -0.348469 0.154186 + 1.2142 2.0705 -1.50317 0.940541 -0.271985 0.203488 + 1.23862 2.16438 -1.46977 0.926123 -0.269104 0.264348 + 1.0651 1.85068 -1.53704 0.803781 -0.572182 0.162926 + 1.18043 1.92842 -1.63808 0.800181 -0.549045 0.24137 + 1.22327 1.99606 -1.63905 0.930457 -0.325114 0.168969 + 1.24255 2.08485 -1.60643 0.943292 -0.286116 0.168336 + 1.26697 2.17874 -1.57305 0.900717 -0.375908 0.217721 + 1.00259 1.73764 -1.46965 0.911143 -0.354519 -0.210083 + 1.03402 1.78122 -1.51992 0.819924 -0.155853 0.550849 + 0.98083 1.64894 -1.44662 0.914052 0.402404 0.0507898 + 1.01227 1.69252 -1.49689 0.506191 0.324629 0.798991 + 1.19025 1.85053 -1.68118 0.923312 -0.229289 0.308094 + 0.999675 1.61762 -1.41156 0.0173156 0.75015 0.661041 + 0.9164 1.63825 -0.984295 0.740895 -0.606086 0.289368 + 0.943193 1.68178 -0.955688 0.87374 -0.484211 0.0460162 + 0.912573 1.69183 -0.920301 -0.500376 -0.688659 0.52476 + 0.885779 1.6483 -0.948908 -0.301474 -0.649747 0.697812 + 0.901206 1.61571 -1.00085 0.425495 -0.704292 0.568267 + 0.942229 1.8297 -1.0013 0.994588 0.102939 0.0140512 + 0.944804 1.71646 -0.927156 0.999425 -0.0305215 -0.0147637 + 0.942828 1.68755 -0.866894 0.998141 -0.0411194 0.0449861 + 0.945445 1.76854 -0.856961 0.99584 0.0460406 0.0786322 + 0.934322 1.71336 -0.760589 0.598627 -0.707114 0.376344 + 0.920811 1.92063 -1.0734 0.925506 0.374322 0.0576395 + 0.930003 1.89001 -1.01636 0.953451 0.300533 0.0246987 + 0.947421 1.79745 -0.917232 0.994185 0.101218 0.0367644 + 0.882867 2.01003 -1.11103 0.861614 0.220036 0.457389 + 0.886784 1.98825 -1.04451 0.909922 0.407703 0.0762849 + 0.895976 1.95763 -0.987472 0.920109 0.390461 0.030656 + 0.935195 1.85775 -0.932285 0.962104 0.265439 0.0624326 + 0.879369 2.09615 -1.1092 0.321053 -0.253941 0.912381 + 0.845327 2.17518 -1.06869 0.448241 -0.259466 0.855428 + 0.849735 2.0802 -1.07638 0.878367 0.198379 0.434876 + 0.853651 2.05842 -1.00985 0.91679 0.398687 0.0233236 + 0.881246 1.99862 -0.951473 0.926245 0.376605 -0.0154823 + 0.879442 2.25536 -1.02896 0.267248 -0.391944 0.880317 + 0.845399 2.33448 -0.9884 0.0790563 -0.382344 0.920632 + 0.809396 2.42101 -0.952472 0.270372 -0.321581 0.90746 + 0.808738 2.24592 -1.02162 0.612162 -0.17746 0.770562 + 0.813146 2.15103 -1.02926 0.916703 0.217531 0.335167 + 0.936176 2.33064 -1.03375 0.491946 -0.322704 0.80861 + 0.91135 2.41981 -0.9836 0.385384 -0.286813 0.87705 + 0.875347 2.50634 -0.947673 0.339144 -0.271432 0.900725 + 0.84901 2.5959 -0.908795 0.348091 -0.260138 0.900645 + 0.776939 2.49672 -0.913018 0.150996 -0.336835 0.929377 + 1.02915 2.41408 -1.05708 0.530968 -0.318174 0.785391 + 1.01347 2.5095 -1.00474 0.499452 -0.26853 0.823674 + 0.987138 2.59905 -0.965853 0.474369 -0.204146 0.856328 + 1.11549 2.42714 -1.11729 0.705029 -0.262086 0.658972 + 1.09981 2.52255 -1.06495 0.684773 -0.222131 0.694077 + 1.10261 2.61414 -1.04439 0.712006 -0.102851 0.6946 + 0.958832 2.696 -0.930375 0.47887 -0.227707 0.84784 + 1.13711 2.35673 -1.17514 0.751653 -0.263745 0.60453 + 1.17913 2.52014 -1.17458 0.827472 -0.163829 0.537075 + 1.18193 2.61173 -1.15402 0.747321 -0.218951 0.627353 + 1.0743 2.71118 -1.00886 0.634746 -0.167597 0.754326 + 1.20076 2.44965 -1.23248 0.806375 -0.215933 0.550575 + 1.26461 2.50664 -1.301 0.707621 -0.297575 0.640876 + 1.25061 2.61971 -1.22144 0.662115 -0.340955 0.667348 + 1.17847 2.75048 -1.09314 0.681459 -0.21774 0.698715 + 1.26406 2.36205 -1.36495 0.827636 -0.300358 0.474135 + 1.33952 2.57633 -1.3355 0.677111 -0.40554 0.61405 + 1.32552 2.6894 -1.25595 0.644429 -0.334869 0.68744 + 1.24715 2.75846 -1.16056 0.64424 -0.279807 0.711802 + 1.15569 2.85747 -1.04705 0.643262 -0.174932 0.745394 + 1.24798 2.24232 -1.43177 0.885961 -0.32003 0.33564 + 1.33449 2.41726 -1.46819 0.768124 -0.41294 0.489354 + 1.4176 2.48106 -1.51169 0.562564 -0.550139 0.617146 + 1.42262 2.64013 -1.379 0.606178 -0.441856 0.661295 + 1.35603 2.76998 -1.24792 0.598128 -0.363393 0.714275 + 1.31841 2.29753 -1.535 0.812886 -0.464384 0.351518 + 1.43417 2.38079 -1.61921 0.552759 -0.682558 0.478092 + 1.53345 2.52886 -1.54308 0.396722 -0.594562 0.699363 + 1.49076 2.72627 -1.3838 0.454796 -0.502434 0.735337 + 1.42417 2.85621 -1.25266 0.47138 -0.451471 0.757611 + 1.28924 2.1782 -1.66811 0.884098 -0.433425 0.174684 + 1.34068 2.29708 -1.63003 0.761071 -0.612964 0.212241 + 1.38679 2.33015 -1.6615 0.589487 -0.744131 0.314283 + 1.52086 2.36081 -1.75201 0.317471 -0.810465 0.492299 + 1.55002 2.42859 -1.6506 0.319272 -0.73415 0.59924 + 1.26074 2.09963 -1.71582 0.932064 -0.343325 0.115697 + 1.31454 2.19299 -1.78813 0.81329 -0.555462 0.173264 + 1.36065 2.22605 -1.8196 0.626467 -0.72319 0.290751 + 1.47347 2.31008 -1.79434 0.436712 -0.833116 0.339412 + 1.24146 2.01092 -1.74839 0.965315 -0.257614 0.0424489 + 1.24278 2.03662 -1.8647 0.939585 -0.338999 -0.0475287 + 1.28605 2.1145 -1.83579 0.901687 -0.431892 0.0207403 + 1.29907 2.1611 -1.92471 0.807038 -0.545618 -0.225813 + 1.39568 2.23147 -1.89478 0.597069 -0.780679 -0.184524 + 1.21483 1.91541 -1.79335 0.978002 -0.208562 -0.0036083 + 1.21616 1.94119 -1.90961 0.974387 -0.219436 -0.0491665 + 1.20434 1.9139 -1.99994 0.980805 -0.158822 -0.113129 + 1.21327 1.99216 -2.01029 0.96728 -0.169182 -0.189066 + 1.25581 2.08331 -1.95357 0.909478 -0.351334 -0.222294 + 1.20517 1.85808 -1.77485 0.977937 -0.203172 0.048575 + 1.18278 1.76785 -1.93897 0.9789 -0.193564 -0.0654797 + 1.17096 1.74047 -2.02934 0.959981 -0.25989 -0.104377 + 1.16752 1.80589 -2.15486 0.954694 -0.207466 -0.213347 + 1.17645 1.88415 -2.16522 0.942118 -0.0382446 -0.333092 + 1.17745 1.71176 -1.83562 0.936087 -0.350697 0.0274444 + 1.17311 1.71051 -1.92046 0.938578 -0.339105 -0.0638635 + 1.15142 1.68191 -2.03092 0.968679 -0.207435 -0.1365 + 1.16252 1.70413 -1.742 0.944067 -0.305173 0.124926 + 1.13874 1.64637 -1.84257 0.698468 -0.714866 -0.0333007 + 1.15142 1.68191 -2.03092 0.913985 -0.383838 -0.131527 + 1.1428 1.64929 -1.72542 0.852678 -0.512774 0.100018 + 1.11866 1.63277 -1.6602 0.472415 -0.881191 -0.0180574 + 1.151 1.65245 -1.7697 0.728805 -0.680928 0.0719691 + 1.07868 1.61952 -1.62466 0.260139 -0.963641 -0.0610206 + 1.13374 1.64126 -1.6999 0.395596 -0.91711 0.0491234 + 1.09376 1.62793 -1.66441 0.262589 -0.964091 -0.0396832 + 1.13429 1.63956 -1.72157 0.593647 -0.799579 0.0908634 + 1.15155 1.65076 -1.79137 0.575327 -0.817291 -0.0321529 + 0.983657 1.59513 -1.65601 0.235754 -0.962681 0.132913 + 1.09264 1.62597 -1.68702 0.356762 -0.92549 0.12724 + 1.11412 1.62372 -1.75273 0.461114 -0.886532 0.0378739 + 1.10131 1.61933 -1.80392 0.429413 -0.899486 -0.0808002 + 1.05968 1.60678 -1.84059 0.378753 -0.924359 -0.0458907 + 0.962638 1.58518 -1.67937 0.158432 -0.978443 0.132473 + 1.07247 1.61012 -1.71818 0.354357 -0.923003 0.149987 + 1.05145 1.60017 -1.74154 0.307079 -0.949714 0.0612074 + 1.00982 1.58762 -1.7782 0.172976 -0.98369 -0.0493352 + 1.04654 1.60198 -1.86107 0.174137 -0.96499 -0.19614 + 0.862281 1.57804 -1.67641 0.0931563 -0.990595 -0.100212 + 0.90641 1.58098 -1.68711 0.0536302 -0.99854 -0.00642122 + 0.776752 1.5714 -1.74331 0.194425 -0.953838 -0.228891 + 0.783099 1.58057 -1.76098 0.174883 -0.95598 -0.235623 + 0.827227 1.58351 -1.77167 0.0109612 -0.984911 -0.172712 + 0.953589 1.58342 -1.78594 0.0390918 -0.990586 -0.131189 + 0.733873 1.5759 -1.7889 0.119775 -0.950791 -0.285747 + 0.740219 1.58506 -1.80657 0.219833 -0.880022 -0.420994 + 0.729381 1.60414 -1.84241 0.272837 -0.748053 -0.604961 + 0.782992 1.61007 -1.84089 -0.0277679 -0.867597 -0.496492 + 0.835885 1.59909 -1.83347 -0.0936769 -0.928144 -0.360239 + 0.72052 1.57168 -1.769 -0.00286543 -0.990885 -0.134677 + 0.690812 1.59621 -1.85868 -0.135229 -0.854711 -0.50118 + 0.679974 1.61528 -1.89451 0.377307 -0.765326 -0.521455 + 0.644544 1.69845 -1.93856 -0.850646 -0.419864 -0.316411 + 0.679974 1.61528 -1.89451 -0.933281 -0.34537 0.0985241 + 0.657005 1.72042 -1.98722 -0.799496 -0.443119 -0.405526 + 0.692435 1.63725 -1.94316 -0.716957 -0.539359 -0.441661 + 0.679974 1.61528 -1.89451 -0.726925 -0.53663 -0.428494 + 0.618961 1.9043 -2.05851 -0.866897 -0.378982 -0.323825 + 0.666892 1.74132 -2.03102 -0.734983 -0.471582 -0.487248 + 0.702546 1.66783 -1.99233 -0.0219185 -0.890527 -0.454403 + 0.628127 1.91379 -2.10014 -0.854525 -0.417905 -0.308451 + 0.680883 1.77302 -2.07412 -0.744353 -0.48553 -0.458475 + 0.716537 1.69952 -2.03542 -0.0872129 -0.839277 -0.536664 + 0.575139 2.01336 -2.097 -0.774972 -0.609114 -0.168518 + 0.575473 2.02009 -2.14067 -0.70299 -0.708263 -0.0645623 + 0.637969 1.92843 -2.1431 -0.846333 -0.47816 -0.234698 + 0.690725 1.78757 -2.11712 -0.788109 -0.507852 -0.347807 + 0.729336 1.72366 -2.08744 -0.192497 -0.878335 -0.437576 + 0.511152 2.05723 -2.06439 -0.485559 -0.867525 -0.107859 + 0.511486 2.06396 -2.10805 -0.547314 -0.820497 -0.16502 + 0.58823 2.00932 -2.18261 -0.751994 -0.654913 -0.0747964 + 0.650726 1.91757 -2.18509 -0.872408 -0.471314 -0.129487 + 0.434449 2.09469 -2.06367 -0.372701 -0.893503 -0.250493 + 0.506492 2.07895 -2.15301 -0.544495 -0.829369 -0.125188 + 0.508242 2.08118 -2.19707 -0.544658 -0.837964 -0.0341302 + 0.589979 2.01155 -2.22667 -0.746194 -0.657017 -0.107346 + 0.429455 2.10959 -2.10868 -0.372252 -0.89973 -0.227848 + 0.426015 2.12053 -2.14762 -0.374498 -0.918667 -0.125708 + 0.499475 2.08507 -2.24461 -0.506715 -0.861706 0.0265007 + 0.594652 2.01541 -2.26976 -0.708885 -0.703051 -0.0565841 + 0.338236 2.127 -2.07943 -0.267992 -0.909635 -0.317403 + 0.33785 2.1411 -2.11065 -0.303875 -0.90752 -0.289944 + 0.417248 2.12441 -2.19516 -0.410398 -0.908732 -0.0760271 + 0.48074 2.09326 -2.3066 -0.558767 -0.82853 0.0362838 + 0.510478 2.07515 -2.28504 -0.570969 -0.817278 0.07779 + 0.264106 2.12716 -2.02732 -0.114793 -0.897597 -0.425608 + 0.263721 2.14117 -2.05859 -0.136458 -0.902535 -0.408423 + 0.25955 2.15094 -2.07891 -0.144676 -0.906434 -0.396794 + 0.326549 2.15319 -2.1476 -0.3484 -0.901596 -0.256404 + 0.405947 2.13659 -2.23205 -0.483291 -0.867556 -0.117372 + 0.17507 2.11596 -2.00852 0.00177045 -0.90716 -0.420782 + 0.170899 2.12573 -2.02884 0.0719704 -0.910264 -0.407725 + 0.248157 2.16615 -2.10865 -0.108761 -0.934486 -0.33898 + 0.315156 2.1684 -2.17734 -0.35421 -0.900309 -0.252939 + 0.159007 2.13113 -2.04539 0.120753 -0.926079 -0.357487 + 0.236265 2.17147 -2.12526 0.0254303 -0.970293 -0.240592 + 0.295471 2.1831 -2.2082 -0.188415 -0.975883 -0.110237 + 0.38386 2.15237 -2.27137 -0.476518 -0.87343 -0.100257 + 0.458653 2.10904 -2.34592 -0.60858 -0.793344 0.0153674 + 0.127671 2.12562 -2.04185 -0.054145 -0.936223 -0.34721 + 0.211459 2.17238 -2.14525 0.139326 -0.979542 -0.145211 + 0.270665 2.18392 -2.22823 -0.0497684 -0.993653 -0.100876 + 0.364174 2.16698 -2.30229 -0.502063 -0.845702 -0.18089 + 0.426257 2.13531 -2.39723 -0.677894 -0.732475 -0.062769 + 0.083882 2.08784 -1.9156 -0.264595 -0.900368 -0.345436 + 0.100328 2.13502 -2.05032 -0.104897 -0.948047 -0.300338 + 0.146993 2.16015 -2.15325 0.0947447 -0.974619 -0.202835 + 0.180123 2.16687 -2.14169 0.186481 -0.962434 -0.197349 + 0.025987 2.05142 -1.76373 -0.208507 -0.901287 -0.379745 + 0.056539 2.09723 -1.92407 -0.239743 -0.91712 -0.318456 + 0.072668 2.13843 -2.06243 -0.0528516 -0.962844 -0.264835 + 0.119333 2.16347 -2.1654 -0.0430622 -0.975191 -0.217137 + 0.206692 2.18146 -2.25856 0.148823 -0.987598 -0.0500119 + -0.025977 2.03612 -1.72583 0.168117 -0.905339 -0.389998 + -0.025977 2.05142 -1.76373 0.276984 -0.88459 -0.375207 + 0.011625 2.06196 -1.78159 -0.138052 -0.892613 -0.429166 + 0.042178 2.10776 -1.94192 -0.197782 -0.939715 -0.278958 + -0.083873 2.08784 -1.9156 0.263369 -0.899651 -0.348231 + -0.05653 2.09723 -1.92407 0.240676 -0.915964 -0.321068 + -0.042178 2.10776 -1.94192 0.183491 -0.938271 -0.293221 + -0.011625 2.06196 -1.78159 0.1385 -0.894316 -0.42546 + 0.011625 2.08203 -1.81914 -0.45952 -0.767627 -0.446756 + -0.127671 2.12562 -2.04185 0.0642568 -0.920803 -0.384698 + -0.100328 2.13502 -2.05032 0.0741297 -0.945151 -0.31811 + -0.072668 2.13843 -2.06243 0.0536213 -0.962334 -0.266531 + -0.020866 2.11114 -1.94717 0.410788 -0.874217 -0.258839 + -0.011625 2.08203 -1.81914 0.647897 -0.649197 -0.398462 + -0.158061 2.0999 -1.9735 0.0038983 -0.923565 -0.383421 + -0.17507 2.11596 -2.00852 -0.0538746 -0.910176 -0.410704 + -0.170899 2.12573 -2.02884 -0.0814251 -0.902378 -0.423182 + -0.159006 2.13113 -2.04539 -0.119246 -0.927615 -0.353993 + -0.180123 2.16687 -2.14169 -0.164198 -0.968946 -0.184887 + -0.242848 2.10027 -1.96134 -0.0138784 -0.941603 -0.336439 + -0.247097 2.11101 -1.99235 0.0460035 -0.92402 -0.379565 + -0.264106 2.12716 -2.02732 0.114963 -0.897662 -0.425426 + -0.263721 2.14117 -2.05859 0.136896 -0.902412 -0.408549 + -0.25955 2.15094 -2.07891 0.144677 -0.906435 -0.396793 + -0.189428 2.06804 -1.89932 -0.143543 -0.918847 -0.367581 + -0.260998 2.09316 -1.93783 0.0038661 -0.955783 -0.294049 + -0.340421 2.09381 -1.97056 0.182245 -0.942206 -0.281131 + -0.337429 2.1054 -2.00943 0.185472 -0.93537 -0.301135 + -0.341678 2.11606 -2.04048 0.242006 -0.918396 -0.313022 + -0.259557 2.08354 -1.90636 -0.0403483 -0.940346 -0.337817 + -0.33898 2.08419 -1.93909 0.148525 -0.959011 -0.241326 + -0.437442 2.0831 -2.0248 0.314833 -0.928536 -0.196729 + -0.43445 2.09469 -2.06367 0.365523 -0.89702 -0.248491 + -0.429457 2.10959 -2.10868 0.370975 -0.899499 -0.230824 + -0.246269 2.06574 -1.86774 -0.0986639 -0.945306 -0.310905 + -0.340548 2.07585 -1.89925 0.106115 -0.966711 -0.23283 + -0.449247 2.07242 -1.9795 0.294349 -0.940763 -0.168298 + -0.341916 2.06786 -1.86661 0.0503669 -0.985137 -0.164218 + -0.450815 2.06408 -1.93966 0.29727 -0.94016 -0.166522 + -0.522957 2.04655 -2.01909 0.596232 -0.793401 -0.122566 + -0.511152 2.05723 -2.06439 0.516766 -0.847458 -0.121522 + -0.511485 2.06396 -2.10805 0.538179 -0.823708 -0.178514 + -0.449093 2.05791 -1.89177 0.272106 -0.954851 -0.119236 + -0.520794 2.02929 -1.92639 0.661218 -0.737992 -0.134754 + -0.522516 2.03537 -1.97433 0.643903 -0.743746 -0.179529 + -0.565974 2.00379 -2.05543 0.796459 -0.564439 -0.216935 + -0.516572 2.02379 -1.88107 0.665865 -0.737832 -0.110575 + -0.559785 1.97772 -1.96868 0.876198 -0.436896 -0.203467 + -0.565533 1.99261 -2.01067 0.854261 -0.482859 -0.192575 + -0.552771 1.96938 -1.88103 0.887936 -0.459114 -0.027991 + -0.555563 1.97222 -1.92336 0.89484 -0.430939 -0.116422 + -0.597085 1.85418 -1.9261 0.942802 -0.298046 -0.149304 + -0.603334 1.86842 -1.97277 0.916039 -0.322945 -0.237864 + -0.609082 1.88331 -2.01476 0.890919 -0.346005 -0.294184 + -0.514372 2.02202 -1.8028 0.761433 -0.638277 0.113238 + -0.557067 1.96606 -1.85148 0.883078 -0.456279 0.109467 + -0.594023 1.85066 -1.8352 0.966753 -0.251769 0.0447406 + -0.594293 1.85134 -1.88378 0.957728 -0.282989 -0.0517112 + -0.557221 1.98226 -1.80874 0.824846 -0.543675 0.155067 + -0.594177 1.86686 -1.79246 0.960993 -0.23646 0.143457 + -0.634484 1.66618 -1.79088 0.959525 -0.280525 0.024858 + -0.634754 1.66686 -1.83946 0.92789 -0.356015 -0.110789 + -0.638303 1.68421 -1.8919 0.885992 -0.405678 -0.224598 + -0.550714 1.99679 -1.7715 0.803544 -0.587014 0.0986484 + -0.602625 1.87233 -1.74413 0.958586 -0.260788 0.114468 + -0.639244 1.66784 -1.73534 0.965476 -0.220812 0.138194 + -0.602854 1.87955 -1.70004 0.941382 -0.286731 0.177721 + -0.647692 1.67322 -1.68706 0.924954 -0.195323 0.32605 + -0.671382 1.57105 -1.69351 0.771201 -0.603015 0.204014 + -0.666623 1.5694 -1.74905 0.571741 -0.81744 -0.0700294 + -0.673911 1.57456 -1.78639 0.290986 -0.911775 -0.289815 + -0.614695 1.88295 -1.65654 0.929028 -0.337637 0.151352 + -0.674709 1.67271 -1.63638 0.897458 -0.23081 0.375893 + -0.735823 1.56272 -1.57048 0.766215 -0.550049 0.332204 + -0.708806 1.56324 -1.62117 0.765484 -0.520409 0.378429 + -0.617342 1.88121 -1.61252 0.917994 -0.395065 0.0347914 + -0.68655 1.67611 -1.59288 0.89776 -0.278795 0.341028 + -0.741883 1.56683 -1.54499 0.771661 -0.539409 0.337011 + -0.789372 1.54835 -1.49959 0.339912 -0.907341 0.247369 + -0.62704 1.86132 -1.54027 0.913981 -0.400713 0.0637825 + -0.709268 1.66856 -1.55219 0.905355 -0.343962 0.249045 + -0.764601 1.55928 -1.50431 0.55999 -0.819957 0.11867 + -0.795433 1.55237 -1.47414 0.40947 -0.846557 0.34011 + -0.718965 1.64867 -1.47995 0.840284 -0.537683 -0.0694279 + -0.779727 1.56951 -1.42564 0.418519 -0.902479 0.101849 + -0.797832 1.56316 -1.45743 0.371349 -0.856028 0.359604 + -0.828664 1.55625 -1.42726 0.438238 -0.782213 0.442821 + -0.869795 1.5549 -1.40733 0.118829 -0.950683 0.286499 + -0.695448 1.66118 -1.35421 0.863235 -0.492792 -0.109461 + -0.75621 1.58202 -1.2999 0.267065 -0.962814 -0.0408011 + -0.85677 1.58823 -1.32627 -0.0438062 -0.986232 0.15946 + -0.874876 1.58179 -1.35811 0.155722 -0.935971 0.315768 + -0.916007 1.58053 -1.33812 0.0515232 -0.880915 0.470462 + -0.636581 1.83901 -1.44743 0.909857 -0.392923 -0.133311 + -0.697709 1.64323 -1.30433 0.731193 -0.604022 -0.317039 + -0.711105 1.59853 -1.28851 0.392562 -0.579307 -0.714351 + -0.748335 1.58493 -1.27294 0.167833 -0.984176 0.0568265 + -0.65654 1.77702 -1.40086 0.946832 -0.314013 0.0700285 + -0.686108 1.69237 -1.37664 0.937616 -0.343276 -0.0551146 + -0.639299 1.83442 -1.40348 0.940583 -0.311006 0.136304 + -0.686108 1.69237 -1.37664 0.942462 -0.274508 0.190815 + -0.660427 1.78791 -1.35351 0.938143 -0.341573 -0.0567117 + -0.684331 1.71531 -1.35037 0.936451 -0.275172 0.217579 + -0.692772 1.67708 -1.37616 0.942 -0.303974 0.142255 + -0.613032 1.91293 -1.39706 0.952444 -0.29688 0.0686564 + -0.626048 1.87036 -1.31612 0.906816 -0.350627 -0.233978 + -0.619887 1.85947 -1.28666 0.501903 -0.163292 -0.849369 + -0.654266 1.77702 -1.32406 0.757721 -0.206092 -0.619181 + -0.699814 1.69538 -1.32206 0.673289 -0.67932 -0.291902 + -0.657449 1.71478 -1.31545 0.192012 -0.364222 -0.911303 + -0.699814 1.69538 -1.32206 0.216656 -0.144532 -0.96549 + -0.631718 1.61943 -1.2503 -0.0311826 -0.668894 -0.742703 + -0.658401 1.60355 -1.2296 -0.332418 -0.729388 -0.597906 + -0.684132 1.6989 -1.29475 0.278865 -0.794212 -0.539872 + -0.741925 1.62467 -1.29797 0.704304 -0.653188 -0.278033 + -0.604736 1.63147 -1.25336 0.224865 -0.62885 -0.7443 + -0.605073 1.57287 -1.20325 0.380604 -0.709631 -0.592929 + -0.636539 1.55107 -1.1577 -0.297041 -0.837696 -0.458292 + -0.711337 1.62078 -1.18883 0.101616 -0.871829 -0.479154 + -0.726242 1.62827 -1.2706 0.71587 -0.651824 -0.250309 + -0.590567 1.53741 -1.13503 0.339035 -0.899062 -0.277024 + -0.622033 1.51561 -1.08948 0.343836 -0.87628 -0.337507 + -0.635697 1.4879 -1.04188 0.00751525 -0.934855 -0.35495 + -0.689475 1.5683 -1.11694 -0.350767 -0.863784 -0.361717 + -0.755178 1.57902 -1.16811 0.378852 -0.869663 -0.316478 + -0.545593 1.57539 -1.10483 0.897589 -0.433879 0.0779912 + -0.579459 1.54475 -1.05154 0.767467 -0.641044 -0.00753826 + -0.599094 1.50618 -1.01114 0.793352 -0.600673 -0.0989179 + -0.612758 1.47846 -0.963537 0.279977 -0.883991 0.374396 + -0.650522 1.48642 -1.01532 -0.715281 -0.68983 0.111835 + -0.567352 1.65255 -1.00526 0.992325 -0.0191993 0.122159 + -0.567033 1.58604 -0.954669 0.970839 -0.211109 0.113597 + -0.586668 1.54747 -0.914262 0.806259 -0.525457 0.271736 + -0.617201 1.53206 -0.889963 -0.00423025 -0.831079 0.556138 + -0.554013 1.70283 -1.04696 0.961291 -0.182841 0.206127 + -0.553473 1.76406 -0.988607 0.948561 -0.222102 0.225614 + -0.565723 1.7357 -0.938079 0.992174 -0.124417 -0.0104999 + -0.565405 1.66919 -0.887485 0.988102 -0.0941568 0.121607 + -0.581715 1.61732 -0.84404 0.850924 -0.310676 0.423567 + -0.523232 1.74945 -1.0869 0.932527 -0.334931 0.134959 + -0.522692 1.81068 -1.02855 0.920143 -0.237118 0.311627 + -0.534472 1.87048 -0.966136 0.95338 -0.223758 0.20248 + -0.546722 1.84212 -0.915617 0.977181 -0.159196 0.14062 + -0.503299 1.87251 -1.05165 0.938181 -0.206877 0.277522 + -0.515079 1.9324 -0.989183 0.951914 -0.111092 0.285516 + -0.536851 1.93903 -0.89247 0.976825 -0.131189 0.16912 + -0.567757 1.78059 -0.839841 0.976729 -0.119337 0.178214 + -0.584067 1.72863 -0.796446 0.968529 -0.167063 0.184503 + -0.479565 1.93227 -1.08255 0.963501 -0.125677 0.23637 + -0.492001 2.01237 -1.04649 0.948521 -0.0337905 0.314907 + -0.496957 2.08891 -1.01227 0.973452 -0.0328019 0.226527 + -0.520036 2.00887 -0.955024 0.974866 -0.0986475 0.199762 + -0.481613 2.08432 -1.07351 0.923746 -0.0504893 0.379664 + -0.505886 2.17583 -0.98122 0.992226 0.0217894 0.122524 + -0.509794 2.09676 -0.93526 0.988415 -0.0781303 0.130122 + -0.52661 2.02693 -0.872705 0.98329 -0.138406 0.118259 + -0.490542 2.17132 -1.0424 0.978338 0.0821304 0.190023 + -0.49373 2.54348 -1.26601 0.999342 0.00589675 0.0357823 + -0.506727 2.26545 -0.910037 0.999197 -0.0214141 0.033875 + -0.510635 2.18637 -0.864076 0.996615 -0.0523124 0.0634119 + -0.467295 2.31933 -1.42137 0.985123 0.123665 0.119328 + -0.487215 2.4186 -1.32771 0.995357 0.0661781 0.0698997 + -0.442777 2.26449 -1.53198 0.929293 0.282405 0.238039 + -0.456831 2.73908 -1.99399 0.986106 0.134142 0.0979889 + -0.470319 2.85022 -1.94529 0.9968 0.0652334 0.0461988 + -0.476834 2.9751 -1.88358 0.999986 -0.00210731 0.00484943 + -0.432314 2.68433 -2.10455 0.971987 0.199479 0.124294 + -0.443245 2.88386 -2.37756 0.830384 0.52645 -0.182517 + -0.46452 2.95675 -2.31301 0.896288 0.33638 -0.288992 + -0.478007 3.06789 -2.2643 0.924597 0.171125 -0.340349 + -0.406533 2.64024 -2.2384 0.884267 0.411198 0.221333 + -0.417465 2.83978 -2.51141 0.364933 0.765226 -0.530333 + -0.469929 2.87812 -2.40661 0.14398 0.810099 -0.56834 + -0.491204 2.95109 -2.34201 0.375426 0.547034 -0.748204 + -0.349571 2.16502 -1.59929 0.637748 0.619766 0.457348 + -0.349436 2.59104 -2.27377 0.512443 0.750513 0.417292 + -0.361948 2.7581 -2.62793 0.359333 0.854852 0.374311 + -0.409998 2.77346 -2.58234 0.765625 0.602423 0.225621 + -0.273379 2.13212 -1.6369 0.254902 0.790299 0.557182 + -0.257731 2.58286 -2.30601 0.0841082 0.86008 0.503178 + -0.270242 2.74992 -2.66017 0.578968 0.745126 0.331033 + -0.307158 1.88639 -1.30328 0.267175 0.762781 0.588883 + -0.186089 1.88576 -1.28879 -0.121253 0.80607 0.579265 + -0.182064 2.14381 -1.64916 -0.111481 0.80854 0.577784 + -0.166416 2.59446 -2.3183 -0.2985 0.80161 0.517996 + -0.138812 2.83607 -2.68899 -0.742492 0.669326 -0.0266218 + -0.164632 2.7747 -2.71669 -0.800169 0.471337 -0.370906 + -0.230933 2.71078 -2.69637 -0.569766 0.606267 -0.554803 + -0.095427 2.10859 -1.57575 -0.531619 0.696565 0.481848 + -0.062398 2.67037 -2.31079 -0.395123 0.831159 0.39122 + -0.034794 2.91207 -2.68142 -0.284627 0.948242 0.1408 + -0.034794 2.88076 -2.79778 -0.297152 0.744523 -0.597817 + -0.060614 2.81939 -2.82549 -0.541063 0.486951 -0.68566 + -0.099451 1.85062 -1.21534 -0.795101 0.497334 0.347093 + -0.046205 2.12026 -1.46977 -0.910752 0.371934 0.179433 + -0.013176 2.68204 -2.2048 -0.445739 0.883173 0.14602 + 0.062399 2.67037 -2.31079 0.399386 0.826521 0.396678 + 0.034794 2.91207 -2.68142 0.284652 0.948231 0.140826 + 0.034794 2.88076 -2.79778 0.30504 0.779772 -0.546723 + -0.031447 2.23142 -1.4257 -0.995398 0.0920102 0.0267833 + -0.013176 2.64772 -1.98235 -0.871707 0.443988 -0.207369 + 0.013176 2.64772 -1.98235 0.872058 0.435194 -0.223876 + 0.013176 2.68204 -2.2048 0.445656 0.883314 0.145421 + -0.04101 2.05543 -1.07148 -0.944183 0.197634 -0.263551 + -0.030452 2.20762 -1.25668 -0.998651 0.0512888 -0.00810898 + -0.012182 2.62392 -1.81333 -0.999068 0.0418518 -0.0105813 + 0.00729 2.80633 -1.93447 -0.992372 0.121137 0.0228938 + -0.041014 2.1598 -1.00965 -0.998697 0.0508875 -0.00390431 + -0.04101 2.12203 -1.03943 -0.999756 0.00996567 -0.0197393 + -0.030452 2.27413 -1.22468 -0.998667 -0.00298986 -0.0515299 + -0.02556 2.45654 -1.34582 -0.999583 0.0134728 -0.0255595 + -0.00729 2.80633 -1.93447 -0.610295 -0.0995614 -0.785893 + 0.00729 2.80633 -1.93447 0 -0.553235 -0.833025 + -0.051236 2.00431 -1.06212 -0.685473 -0.375545 0.623773 + -0.036481 2.21983 -0.956232 -0.99162 -0.0178171 0.127951 + -0.026884 2.45107 -1.11594 -0.997671 0.0651839 0.020107 + -0.025563 2.49432 -1.31605 -0.99952 0.0292854 -0.0100625 + -0.03649 2.28937 -0.889273 -0.878614 -0.0850716 0.469894 + -0.026893 2.5207 -1.04894 -0.931517 0.231986 0.280105 + -0.011004 2.20909 -0.926224 0.0760722 -0.561671 0.823856 + 0.00729 2.80633 -1.93447 0 0.314016 -0.949418 + -0.230933 2.71078 -2.69637 0.787045 0.5682 0.240225 + 1.12127 1.64042 -1.94785 -0.317944 -0.790147 -0.524004 + 1.15142 1.68191 -2.03092 0.948434 -0.3157 -0.0284066 + 0.016514 2.25648 -0.879903 0.776853 -0.00706368 0.629642 + -0.409998 2.77346 -2.58234 -0.740481 0.341366 -0.578928 + -0.462462 2.81189 -2.4775 -0.568156 0.516505 -0.640641 + -0.531689 2.93747 -2.3582 0.065333 0.57323 -0.816786 + -0.50897 3.07022 -2.29494 0.46853 0.315402 -0.825228 + -0.413206 2.61819 -2.66241 -0.497029 0.532658 -0.685009 + -0.449813 2.61727 -2.64002 -0.32977 0.609351 -0.721071 + -0.499068 2.81097 -2.45511 -0.21711 0.587325 -0.779687 + -0.361948 2.7581 -2.62793 -0.452281 0.416146 -0.788837 + -0.365156 2.60283 -2.70801 -0.350217 0.538606 -0.766324 + -0.446128 2.39177 -2.86763 -0.414887 0.721435 -0.554437 + -0.475367 2.54895 -2.68768 -0.38227 0.612555 -0.691842 + -0.556401 2.77007 -2.49266 -0.129048 0.635654 -0.761111 + -0.589022 2.89656 -2.39575 -0.194771 0.579782 -0.791149 + -0.270242 2.74992 -2.66017 -0.281987 0.456403 -0.843907 + -0.325847 2.56369 -2.74422 -0.25929 0.594643 -0.761031 + -0.204709 2.60208 -2.77249 -0.525392 0.541078 -0.656656 + -0.230387 2.49807 -2.86374 -0.494574 0.656453 -0.569619 + -0.351525 2.45968 -2.83546 -0.313763 0.705908 -0.635017 + -0.138408 2.666 -2.79281 -0.659639 0.374018 -0.65191 + -0.201101 2.45831 -2.94429 -0.366786 0.729211 -0.577685 + -0.333607 2.29487 -3.0612 -0.368372 0.72948 -0.576334 + -0.38881 2.23339 -3.1151 -0.0893524 0.680593 -0.727193 + -0.406728 2.39811 -2.88941 -0.342595 0.774223 -0.532172 + -0.033806 2.75669 -2.8853 -0.591287 0.455811 -0.665294 + -0.1116 2.60339 -2.85257 -0.551518 0.451658 -0.701307 + -0.145455 2.47997 -2.93701 -0.269226 0.663349 -0.698202 + -0.234477 2.30039 -3.15796 -0.372612 0.690146 -0.62037 + -0.304321 2.25512 -3.14175 -0.593571 0.591758 -0.545431 + -0.350353 2.16381 -3.16919 -0.639689 0.438702 -0.631141 + -0.007876 2.73617 -2.92294 -0.350781 0.468796 -0.810668 + -0.057432 2.52427 -2.95573 -0.592475 0.432198 -0.679837 + -0.091287 2.40085 -3.04016 -0.122002 0.711941 -0.69156 + -0.178832 2.32205 -3.15067 -0.0637383 0.737679 -0.672136 + 0.007879 2.73617 -2.92294 0.345702 0.452125 -0.822237 + -0.007876 2.52092 -3.00333 -0.298719 0.397261 -0.867727 + -0.031502 2.50374 -2.99337 -0.62924 0.354526 -0.691642 + -0.031473 2.38415 -3.06184 -0.22481 0.603237 -0.765223 + -0.047726 2.34737 -3.09734 -0.000692336 0.730375 -0.683046 + 0.033806 2.75669 -2.8853 0.677335 0.354392 -0.644688 + 0.031505 2.50374 -2.99337 0.629258 0.354532 -0.691622 + 0.007879 2.52092 -3.00333 0.298718 0.397264 -0.867726 + -0.007848 2.40133 -3.07179 -0.324993 0.542027 -0.774975 + 0.060613 2.81939 -2.82549 0.635719 0.439739 -0.634422 + 0.1116 2.60339 -2.85257 0.551519 0.451666 -0.701302 + 0.057432 2.52427 -2.95573 0.592496 0.432196 -0.67982 + 0.03148 2.38415 -3.06184 0.224564 0.603292 -0.765251 + 0.007854 2.40133 -3.07179 0.324986 0.542032 -0.774974 + 0.164631 2.7747 -2.71669 0.800169 0.471334 -0.37091 + 0.138407 2.666 -2.79281 0.659627 0.374025 -0.651918 + 0.145455 2.47997 -2.93701 0.268966 0.662206 -0.699386 + 0.091287 2.40085 -3.04016 0.153104 0.703494 -0.694014 + 0.047727 2.34738 -3.09734 0.000404965 0.730374 -0.683048 + 0.138812 2.83607 -2.68899 0.74248 0.669341 -0.0265605 + 0.257731 2.58286 -2.30601 -0.0876816 0.863071 0.497414 + 0.230933 2.71078 -2.69637 0.569748 0.606277 -0.55481 + 0.166417 2.59446 -2.3183 0.288668 0.797265 0.530132 + 0.095427 2.10859 -1.57575 0.527492 0.690172 0.495393 + 0.182065 2.14381 -1.64916 0.0843685 0.821569 0.563832 + 0.273379 2.13212 -1.6369 -0.261582 0.783301 0.563928 + 0.046205 2.12026 -1.46977 0.948433 0.25557 0.187506 + 0.064756 1.84625 -1.22456 0.855419 0.376344 0.355841 + 0.031447 2.23142 -1.4257 0.995229 0.0931339 0.0290761 + 0.036018 2.0989 -1.02776 0.988156 0.106063 -0.110896 + 0.049543 1.96837 -1.07328 0.995808 0.0878904 0.0253151 + 0.064756 1.84625 -1.22456 0.995484 0.091141 0.0265352 + 0.012182 2.62392 -1.81333 0.99935 0.03588 -0.00343977 + 0.030452 2.20762 -1.25668 0.99872 0.050545 -0.00164767 + 0.036617 2.12995 -1.02614 0.999934 -0.0106089 -0.0044382 + 0.00729 2.80633 -1.93447 0.999369 0.0338723 0.0106468 + -0.350353 2.16381 -3.16919 0.0529504 0.631009 -0.773966 + 0.03663 2.30385 -0.897355 0.999827 0.0135726 -0.0127152 + 0.036617 2.19646 -0.99414 0.999907 0.00717034 -0.0116362 + 0.03662 2.23423 -0.964364 0.999869 0.0120505 -0.0108013 + 0.026886 2.45107 -1.11594 0.999407 0.0327774 -0.0105639 + 0.030452 2.27413 -1.22468 0.999662 0.0113855 -0.02336 + 0.025561 2.45654 -1.34582 0.999656 0.0133546 -0.0225628 + 0.025564 2.49432 -1.31605 0.999591 0.0268187 -0.00991077 + 0.008613 2.95866 -1.66912 0.653216 0.699 0.291048 + 0.008613 2.52374 -1.02842 0.354026 0.619904 0.700275 + 0.00729 2.80633 -1.93447 0.999643 0.00881096 -0.0252111 + 0.00729 2.80633 -1.93447 0.999638 0.0166024 -0.0211621 + -0.318018 2.1931 -3.18552 -0.64503 0.530517 -0.54999 + -0.248174 2.23837 -3.20173 -0.409537 0.584682 -0.700304 + -0.191271 2.24886 -3.2109 -0.0693939 0.625955 -0.776766 + -0.129043 2.23586 -3.21559 -0.0403564 0.638843 -0.768278 + -0.116604 2.30914 -3.15531 0.0698724 0.722511 -0.68782 + -0.073042 2.25566 -3.21249 0.0214699 0.603984 -0.796707 + -0.0241 2.22116 -3.23232 0.223686 0.468088 -0.854903 + -0.032099 2.17756 -3.24701 -0.300288 -0.158146 -0.940647 + -0.081041 2.21207 -3.22718 -0.450354 -0.271353 -0.850617 + -0.129043 2.23586 -3.21559 -0.0643849 0.329374 -0.942002 + -0.007848 2.25785 -3.19687 -0.0128833 0.626788 -0.779083 + 0.009784 2.14998 -3.24683 0.286438 -0.361634 -0.887229 + -0.009793 2.14998 -3.24684 -0.283293 -0.388088 -0.877002 + -0.057733 2.16318 -3.18711 -0.683371 -0.50201 -0.530085 + -0.088709 2.19606 -3.17486 -0.599271 -0.631342 -0.492222 + 0.007854 2.25785 -3.19687 0.0135554 0.620051 -0.784445 + 0.024101 2.22116 -3.23232 -0.321714 0.432609 -0.842229 + 0.032099 2.17755 -3.247 0.285428 -0.160409 -0.944881 + 0.035418 2.1356 -3.18694 0.682134 -0.458799 -0.569383 + 0.009784 2.10533 -3.19671 0.312958 -0.725233 -0.613266 + -0.009793 2.10534 -3.19672 -0.312869 -0.724859 -0.613752 + 0.073043 2.25567 -3.2125 -0.0214286 0.603882 -0.796786 + 0.081041 2.21207 -3.22718 0.461091 -0.235483 -0.855537 + 0.057733 2.16318 -3.1871 0.674272 -0.535415 -0.508613 + 0.083967 2.13643 -3.14198 0.599704 -0.300238 -0.741763 + 0.06521 2.11575 -3.14935 0.594944 -0.265207 -0.758753 + 0.116604 2.30914 -3.15531 -0.0651908 0.729148 -0.681244 + 0.129042 2.23586 -3.21559 0.0403984 0.638798 -0.768313 + 0.19127 2.24886 -3.2109 0.0694461 0.62592 -0.776789 + 0.178832 2.32205 -3.15067 0.0561378 0.742644 -0.667329 + 0.234475 2.30039 -3.15796 0.372622 0.690143 -0.620367 + 0.248177 2.23837 -3.20173 0.409587 0.58472 -0.700244 + 0.201098 2.45831 -2.94429 0.366757 0.729216 -0.577696 + 0.304318 2.25512 -3.14175 0.593548 0.591756 -0.545459 + 0.31802 2.1931 -3.18552 0.645089 0.530539 -0.549899 + 0.230391 2.49807 -2.86374 0.494556 0.656466 -0.56962 + 0.333611 2.29487 -3.0612 0.368457 0.72947 -0.576292 + 0.350348 2.16381 -3.16919 0.704639 0.505005 -0.498452 + 0.204709 2.60208 -2.77249 0.525397 0.541079 -0.656651 + 0.351529 2.45968 -2.83546 0.313768 0.705906 -0.635017 + 0.406727 2.39811 -2.88941 0.342517 0.774218 -0.53223 + 0.388809 2.23339 -3.1151 0.0915615 0.6895 -0.718475 + 0.350348 2.16381 -3.16919 -0.088849 0.641514 -0.761949 + 0.393486 2.18026 -3.16149 -0.112469 0.647904 -0.753373 + 0.325847 2.56369 -2.74422 0.259282 0.594632 -0.761043 + 0.446128 2.39177 -2.86763 0.414807 0.721467 -0.554455 + 0.451255 2.25163 -3.07989 0.33271 0.695687 -0.636651 + 0.455932 2.1985 -3.12628 0.402806 0.621866 -0.671588 + 0.393486 2.18026 -3.16149 0.218372 0.652678 -0.725483 + 0.270244 2.74992 -2.66017 0.281983 0.456419 -0.8439 + 0.365158 2.60283 -2.70801 0.350234 0.5386 -0.76632 + 0.36195 2.7581 -2.62793 0.452291 0.416145 -0.788833 + 0.409998 2.77346 -2.58234 0.74047 0.341373 -0.578938 + 0.413206 2.61819 -2.66241 0.497038 0.532655 -0.685005 + 0.462462 2.81189 -2.4775 0.568235 0.516443 -0.640621 + 0.499068 2.81097 -2.45511 0.217087 0.587319 -0.779698 + 0.449813 2.61727 -2.64002 0.329823 0.609345 -0.721052 + 0.417464 2.83978 -2.5114 -0.365156 0.765216 -0.530194 + 0.469928 2.87812 -2.40661 -0.144009 0.810101 -0.568329 + 0.531689 2.93747 -2.3582 -0.169709 0.517115 -0.838923 + 0.556401 2.77007 -2.49266 0.129042 0.635644 -0.76112 + 0.58196 2.70165 -2.54037 0.34765 0.562426 -0.750211 + 0.475371 2.54895 -2.68768 0.382261 0.612566 -0.691837 + 0.443244 2.88386 -2.37756 -0.830348 0.526504 -0.182523 + 0.464522 2.95676 -2.31302 -0.897812 0.3331 -0.288058 + 0.491206 2.9511 -2.34202 -0.374928 0.545713 -0.749418 + 0.549455 3.05667 -2.31108 0.169685 0.422691 -0.890247 + 0.589022 2.89656 -2.39575 0.202176 0.561392 -0.802473 + 0.40654 2.64024 -2.2384 -0.883762 0.41017 0.225221 + 0.43232 2.68433 -2.10455 -0.974885 0.184017 0.125449 + 0.456831 2.73908 -1.99399 -0.986289 0.134004 0.096312 + 0.478009 3.06797 -2.26425 -0.924978 0.172248 -0.338744 + 0.508972 3.07022 -2.29494 -0.467015 0.317391 -0.825324 + 0.409998 2.77346 -2.58234 -0.765625 0.602418 0.225635 + 0.36195 2.7581 -2.62793 -0.359337 0.854849 0.374314 + 0.349436 2.59104 -2.27377 -0.505605 0.758477 0.411187 + 0.406675 2.21423 -1.56392 -0.798571 0.482637 0.359648 + 0.442784 2.26449 -1.53198 -0.932561 0.282969 0.224186 + 0.467295 2.31933 -1.42137 -0.985252 0.122309 0.119664 + 0.470319 2.85022 -1.94529 -0.996754 0.0662457 0.0457528 + 0.349571 2.16502 -1.59929 -0.634105 0.617943 0.46482 + 0.383337 1.9192 -1.26572 -0.672311 -0.00124287 0.740268 + 0.422755 1.95308 -1.2196 -0.704806 -0.0179974 0.709172 + 0.458864 2.00335 -1.18766 -0.964596 0.108898 0.240199 + 0.270244 2.74992 -2.66017 -0.578955 0.745135 0.331035 + 0.230933 2.71078 -2.69637 -0.78703 0.568219 0.24023 + 0.129042 2.23586 -3.21559 0.0644217 0.328979 -0.942137 + 0.307145 1.88639 -1.30329 -0.542571 0.649074 0.533217 + 0.480623 2.19749 -3.09233 0.362943 0.566643 -0.739722 + 0.490656 2.24529 -3.05811 0.520403 0.650578 -0.553108 + 0.509415 2.1894 -3.09931 0.455896 0.622136 -0.636479 + 0.565038 2.15256 -3.06872 0.803158 0.503868 -0.317891 + 0.546279 2.20846 -3.02752 0.677107 0.566185 -0.470064 + 0.576688 2.13834 -3.04387 -0.0601419 -0.217417 -0.974224 + 0.473219 2.43685 -2.79011 0.507879 0.605489 -0.612733 + 0.57337 2.25345 -2.95005 0.345375 0.698932 -0.626266 + 0.599183 2.42489 -2.7486 0.286103 0.68804 -0.666892 + 0.65657 2.36347 -2.79322 0.437725 0.675891 -0.592932 + 0.630757 2.19211 -2.99461 0.225267 0.600956 -0.766881 + 0.601336 2.53699 -2.64617 0.393818 0.578579 -0.714251 + 0.677919 2.54619 -2.58509 0.592926 0.503555 -0.628388 + 0.700677 2.34287 -2.76293 0.705752 0.55509 -0.440216 + 0.702641 2.19183 -2.96792 0.457771 0.586314 -0.668342 + 0.658544 2.71084 -2.47928 0.55527 0.483449 -0.676722 + 0.733518 2.69688 -2.4195 0.668498 0.43335 -0.604416 + 0.751342 2.50776 -2.52614 0.69828 0.443283 -0.562054 + 0.783212 2.34884 -2.62608 0.718171 0.489483 -0.494607 + 0.709789 2.38727 -2.68504 0.779784 0.45942 -0.425288 + 0.636617 2.85949 -2.39415 0.507461 0.494197 -0.70587 + 0.711591 2.84553 -2.33437 0.630863 0.447285 -0.633994 + 0.802339 2.68845 -2.3385 0.726678 0.391408 -0.56457 + 0.820163 2.49925 -2.44519 0.789892 0.356433 -0.499026 + 0.638357 3.03011 -2.26808 0.541585 0.45227 -0.708617 + 0.697201 3.05442 -2.19217 0.576616 0.386934 -0.71958 + 0.770435 2.86984 -2.25847 0.680048 0.405366 -0.610911 + 0.894426 2.68315 -2.21772 0.770299 0.277584 -0.574097 + 0.590762 3.06718 -2.26968 0.476981 0.368642 -0.797867 + 0.588448 3.23589 -2.21229 0.669453 0.211068 -0.712238 + 0.634906 3.22009 -2.17392 0.615188 0.257919 -0.744998 + 0.776695 3.07793 -2.1311 0.493319 0.256638 -0.831128 + 0.862523 2.86462 -2.13763 0.583459 0.34318 -0.736073 + 0.547142 3.22538 -2.25369 0.453372 0.180983 -0.872753 + 0.542813 3.40623 -2.23413 0.578812 0.159623 -0.799686 + 0.57015 3.42786 -2.18299 0.757566 0.203239 -0.620312 + 0.616608 3.41206 -2.14463 0.663809 0.235384 -0.709895 + 0.7144 3.24369 -2.1128 0.581099 0.269512 -0.767911 + 0.513561 3.21526 -2.26297 -0.269929 0.156558 -0.950067 + 0.509232 3.39612 -2.24342 -0.170948 0.0590479 -0.983509 + 0.510975 3.56567 -2.21989 0.668912 0.223092 -0.709075 + 0.538313 3.58721 -2.1688 0.794228 0.304578 -0.52577 + 0.619672 3.48872 -2.11141 0.750214 0.310856 -0.583565 + 0.482598 3.21302 -2.23229 -0.92284 0.0444947 -0.382604 + 0.47536 3.38339 -2.21817 -0.871412 -0.068937 -0.485684 + 0.448788 3.53384 -2.21555 -0.774776 -0.247451 -0.581799 + 0.48266 3.54656 -2.24079 0.00278559 0.0256981 -0.999666 + 0.463356 3.69601 -2.21324 0.670272 0.279488 -0.687475 + 0.476834 2.9751 -1.88358 -0.99997 -0.00143462 0.00754503 + 0.469596 3.14547 -1.86948 -0.994934 -0.0858837 -0.0522469 + 0.451787 3.26083 -1.83669 -0.952288 -0.261039 -0.158135 + 0.399831 3.66393 -2.24569 -0.875164 -0.403234 -0.267377 + 0.49373 2.54348 -1.26601 -0.999343 0.00816976 0.0353259 + 0.494948 2.63292 -1.14452 -0.996782 -0.076722 -0.0232157 + 0.477139 2.7482 -1.11179 -0.987412 -0.143962 -0.0655108 + 0.465519 2.78306 -1.02856 -0.96844 -0.225712 -0.105725 + 0.40283 3.39093 -1.86683 -0.896832 -0.3773 -0.230949 + 0.487215 2.41869 -1.32766 -0.995291 0.0660846 0.0709138 + 0.490541 2.17124 -1.04245 -0.978541 0.0811493 0.189399 + 0.505886 2.17583 -0.98122 -0.992248 0.0075929 0.124039 + 0.506727 2.26545 -0.910037 -0.999323 -0.0209609 0.0302518 + 0.507945 2.3548 -0.788592 -0.998115 -0.0605284 0.010089 + 0.470621 2.07197 -1.13612 -0.988659 0.0860481 0.123083 + 0.481612 2.08431 -1.0735 -0.975834 0.0184801 0.217731 + 0.496957 2.08883 -1.01232 -0.958089 -0.0243643 0.285432 + 0.469177 2.00413 -1.10962 -0.97259 0.00594725 0.232449 + 0.479563 1.93218 -1.0826 -0.949778 -0.124338 0.28716 + 0.491999 2.01237 -1.04649 -0.947713 -0.046703 0.315689 + 0.520036 2.00887 -0.955024 -0.976567 -0.0859685 0.197299 + 0.45742 1.9356 -1.16112 -0.980677 -0.160428 0.111959 + 0.482339 1.87208 -1.1427 -0.947319 -0.302591 0.105005 + 0.503297 1.87252 -1.05166 -0.941491 -0.186516 0.280725 + 0.515077 1.93232 -0.989242 -0.958975 -0.109645 0.261429 + 0.475913 1.89309 -1.2211 -0.806349 -0.425524 0.410767 + 0.500832 1.82957 -1.20268 -0.941159 -0.328798 0.078175 + 0.524033 1.76402 -1.18974 -0.941246 -0.334725 0.0448846 + 0.506073 1.81232 -1.1118 -0.957115 -0.276476 0.0865558 + 0.436496 1.8593 -1.26718 -0.466891 -0.530503 0.707517 + 0.490999 1.81553 -1.26956 -0.75349 -0.555674 0.351396 + 0.514199 1.75007 -1.25657 -0.875709 -0.482828 -0.00331005 + 0.551181 1.69709 -1.24422 -0.903034 -0.323384 -0.282757 + 0.54119 1.70115 -1.16484 -0.985668 -0.0840994 -0.14624 + 0.373475 1.84698 -1.32303 -0.460123 -0.887518 -0.0244592 + 0.427977 1.80321 -1.32542 -0.38086 -0.714159 0.587301 + 0.504467 1.79287 -1.32431 -0.373739 -0.60172 -0.70587 + 0.541449 1.73998 -1.3119 -0.352566 -0.515199 -0.781196 + 0.307145 1.88639 -1.30329 -0.126312 -0.605969 0.785396 + -0.7043 1.56683 -1.09039 -0.0579134 -0.910528 -0.40937 + -0.809256 1.55981 -1.16444 0.621692 -0.782816 0.0264271 + -0.770083 1.58651 -1.24989 0.822565 -0.56759 -0.0350532 + -0.771717 1.58314 -1.26884 0.902702 -0.430264 -0.00125148 + -0.792052 1.49776 -1.24696 0.795663 -0.604491 0.0388702 + -0.758379 1.54753 -1.08676 0.319953 -0.8652 -0.386082 + -0.85984 1.52061 -1.14415 0.578219 -0.689216 0.436628 + -0.790419 1.50113 -1.22799 0.764077 -0.599054 0.239417 + -0.828509 1.49337 -1.21855 -0.171815 0.0361979 -0.984464 + -0.664227 1.55392 -1.05243 0.250962 -0.804405 -0.538471 + -0.841003 1.46202 -1.20765 0.108578 -0.364707 -0.92477 + -0.874387 1.49643 -1.23266 -0.00756757 0.0824023 -0.99657 + -0.917635 1.56429 -1.1558 -0.00963629 0.191667 -0.981413 + -0.825982 1.56239 -1.1863 -0.436581 -0.0238436 -0.899349 + -0.789525 1.56678 -1.21471 -0.764503 0.151685 -0.626519 + -0.792052 1.49776 -1.24696 -0.748 0.303248 -0.590369 + -0.771717 1.58314 -1.26884 -0.889854 0.42572 -0.164081 + -0.963513 1.56736 -1.16992 0.617042 0.228292 -0.753089 + -0.937006 1.58934 -1.16439 -0.0124739 -0.64044 -0.767907 + -0.845353 1.58744 -1.19488 -0.188978 -0.851268 -0.489521 + -0.759733 1.60831 -1.24384 -0.872302 0.409161 -0.267726 + -0.741925 1.62467 -1.29797 -0.865477 0.481194 -0.139294 + -0.699814 1.69538 -1.32206 -0.871046 0.469408 -0.144688 + -0.955511 1.48158 -1.19533 -0.387509 -0.241353 -0.889711 + -0.841003 1.46202 -1.20765 -0.193037 -0.691838 -0.695771 + -0.922127 1.44708 -1.17038 -0.19297 -0.690765 -0.696855 + -0.841003 1.46202 -1.20765 0.592124 -0.497074 0.634277 + -0.921706 1.47324 -1.1323 0.172693 -0.711149 0.681502 + -0.795782 1.58707 -1.10525 0.0980888 -0.358145 0.928499 + -0.857648 1.5397 -1.0934 0.332808 -0.489426 0.80604 + -0.976804 1.48683 -1.12362 -0.443535 -0.546361 0.710469 + -0.922127 1.44708 -1.17038 0.177745 -0.812123 0.555755 + -0.841003 1.46202 -1.20765 0.380096 -0.764325 0.520896 + -0.758379 1.54753 -1.08676 -0.38932 0.061382 0.919055 + -0.701631 1.59346 -1.07091 -0.537525 0.014305 0.843127 + -0.734637 1.66043 -1.09291 -0.280765 -0.308062 0.908993 + -0.801723 1.66092 -1.09515 0.066854 -0.221603 0.972842 + -0.924734 1.54009 -1.09569 -0.129045 -0.237832 0.962696 + -0.664227 1.55392 -1.05243 -0.755839 -0.041935 0.653413 + -0.643397 1.56889 -0.998153 -0.951572 -0.112991 0.285908 + -0.658945 1.63178 -1.03008 -0.874385 -0.0773671 0.479026 + -0.691951 1.69874 -1.05208 -0.677794 -0.20054 0.707375 + -0.727078 1.74912 -1.07274 -0.355439 -0.221842 0.907992 + -0.872106 1.65856 -1.07748 0.0821934 -0.374116 0.923732 + -0.629692 1.50131 -0.961109 -0.864165 -0.378523 0.331571 + -0.643726 1.61889 -0.917968 -0.983074 -0.146316 0.110257 + -0.659274 1.68178 -0.9499 -0.987941 -0.0967153 0.120911 + -0.666266 1.73981 -0.991201 -0.909565 -0.25308 0.32961 + -0.701392 1.79019 -1.01186 -0.871963 -0.165792 0.460644 + -0.634135 1.5549 -0.887535 -0.909793 -0.351305 0.221046 + -0.630176 1.5876 -0.82637 -0.539263 -0.579913 0.610651 + -0.639767 1.6515 -0.856854 -0.97921 -0.0845585 0.184384 + -0.7043 1.56683 -1.09039 -0.60997 0.283033 0.740155 + -0.612248 1.60182 -0.819792 0.555118 -0.578507 0.59764 + -0.619647 1.6386 -0.776098 -0.470889 -0.542769 0.695461 + -0.626818 1.70224 -0.78674 -0.976858 -0.102375 0.187796 + -0.646938 1.71515 -0.867495 -0.977445 -0.0104043 0.210932 + -0.653929 1.77309 -0.908846 -0.976016 -0.0883579 0.19896 + -0.601719 1.6529 -0.769478 0.65135 -0.467801 0.597415 + -0.590095 1.7375 -0.728603 0.841118 -0.367801 0.396539 + -0.616529 1.72023 -0.715886 0.612314 -0.474959 0.632048 + -0.5889 1.81998 -0.669658 0.627277 -0.499679 0.597365 + -0.641223 1.8031 -0.63302 0.587385 -0.566776 0.577706 + -0.572443 1.81332 -0.755521 0.983876 -0.17622 0.0305689 + -0.562466 1.83725 -0.682375 0.896986 -0.323236 0.301553 + -0.552602 1.93633 -0.620381 0.962293 -0.195013 0.189635 + -0.584926 1.90744 -0.569742 0.73605 -0.465421 0.491542 + -0.637249 1.89055 -0.533104 0.00908 -0.757238 0.653076 + -0.557886 1.8775 -0.816694 0.982529 -0.143459 0.118557 + -0.55954 1.90423 -0.743586 0.992212 -0.122825 0.0206999 + -0.549676 2.00331 -0.6816 0.993608 -0.103677 0.0446549 + -0.559972 2.04854 -0.520547 0.940104 -0.248689 0.233148 + -0.592296 2.01965 -0.469899 0.62371 -0.553381 0.552046 + -0.544982 1.96833 -0.804808 0.982153 -0.148528 0.115387 + -0.537917 2.06141 -0.743632 0.983455 -0.155479 0.0929626 + -0.5417 2.10455 -0.577354 0.980999 -0.170093 0.0933201 + -0.540315 2.19079 -0.463918 0.973147 -0.202817 0.108859 + -0.558588 2.13478 -0.407112 0.927606 -0.318897 0.194556 + -0.519544 2.12001 -0.811529 0.989764 -0.116048 0.0830708 + -0.529941 2.16265 -0.639385 0.990571 -0.126732 0.0520317 + -0.522905 2.24451 -0.524367 0.986944 -0.150328 0.0578225 + -0.536521 2.25412 -0.344224 0.959709 -0.274802 0.058674 + -0.557372 2.19883 -0.281854 0.899123 -0.402624 0.171671 + -0.522444 2.21458 -0.698937 0.994634 -0.0896011 0.0517238 + -0.515408 2.29635 -0.583968 0.986639 -0.162866 0.00419181 + -0.519111 2.30785 -0.404672 0.957907 -0.282892 0.0488582 + -0.497717 2.37589 -0.348125 0.914707 -0.39995 -0.057882 + -0.516823 2.31852 -0.290163 0.905928 -0.409674 -0.107056 + -0.513535 2.28095 -0.751484 0.996512 -0.0753354 0.035887 + -0.507187 2.34934 -0.641333 0.991345 -0.128146 -0.0285081 + -0.49643 2.3586 -0.468174 0.954609 -0.297862 -0.000882352 + -0.475036 2.42664 -0.411626 0.941501 -0.331841 -0.058804 + -0.507945 2.35488 -0.788542 0.997951 -0.0633102 0.00921731 + -0.501598 2.42318 -0.678441 0.991835 -0.117823 -0.0487934 + -0.488209 2.41158 -0.525539 0.976829 -0.193367 -0.09173 + -0.466466 2.48194 -0.471415 0.950986 -0.268709 -0.153042 + -0.494948 2.63292 -1.14452 0.996798 -0.076866 -0.0220273 + -0.477139 2.7482 -1.11179 0.985375 -0.15794 -0.063955 + -0.489977 2.45804 -0.595212 0.98076 -0.163975 -0.105934 + -0.468234 2.52849 -0.541039 0.957523 -0.235423 -0.166511 + -0.469596 3.14547 -1.86948 0.994976 -0.0851184 -0.0527081 + -0.451787 3.26083 -1.83669 0.948527 -0.265786 -0.172206 + -0.40283 3.39093 -1.86683 0.897252 -0.375317 -0.232542 + -0.465519 2.78306 -1.02856 0.968669 -0.226854 -0.10108 + -0.452473 2.74238 -0.853301 0.958597 -0.254835 -0.127084 + -0.482601 3.21302 -2.23229 0.920849 0.0522264 -0.386405 + -0.475363 3.3834 -2.21818 0.867229 -0.0766204 -0.491978 + -0.448792 3.53384 -2.21555 0.778464 -0.294577 -0.554272 + -0.513564 3.21526 -2.26297 0.274215 0.163424 -0.947681 + -0.509235 3.39612 -2.24342 0.174029 0.0527565 -0.983326 + -0.482664 3.54656 -2.24079 -0.0558913 -0.0151413 -0.998322 + -0.399835 3.66393 -2.24569 0.433788 -0.242433 -0.867787 + -0.54714 3.22538 -2.25369 -0.459696 0.194748 -0.86646 + -0.542811 3.40624 -2.23414 -0.600675 0.135025 -0.788009 + -0.510975 3.56567 -2.21989 -0.669435 0.227458 -0.707191 + -0.435045 3.67681 -2.2342 -0.398752 0.149052 -0.904865 + -0.393058 3.77165 -2.24425 -0.449267 0.107329 -0.886927 + -0.357848 3.75877 -2.25574 -0.299592 0.0315814 -0.953544 + -0.549455 3.05667 -2.31108 -0.263344 0.31596 -0.911493 + -0.588446 3.23589 -2.21229 -0.654255 0.229934 -0.720472 + -0.570148 3.42786 -2.18299 -0.75517 0.192317 -0.626684 + -0.538313 3.58721 -2.1688 -0.790129 0.308344 -0.529736 + -0.590762 3.06718 -2.26968 -0.460774 0.344314 -0.818007 + -0.638357 3.03011 -2.26808 -0.541586 0.452267 -0.708617 + -0.6349 3.2201 -2.17393 -0.615206 0.257916 -0.744984 + -0.616602 3.41206 -2.14463 -0.663813 0.23537 -0.709897 + -0.619672 3.48872 -2.11141 -0.750212 0.310852 -0.58357 + -0.636617 2.85949 -2.39415 -0.507461 0.494196 -0.705871 + -0.711591 2.84553 -2.33437 -0.630863 0.447285 -0.633993 + -0.770435 2.86984 -2.25847 -0.686712 0.432042 -0.584608 + -0.697201 3.05442 -2.19217 -0.618691 0.351899 -0.702417 + -0.714394 3.24369 -2.1128 -0.581069 0.269497 -0.767939 + -0.581956 2.70165 -2.54037 -0.347692 0.562429 -0.750189 + -0.658544 2.71084 -2.47928 -0.564727 0.471622 -0.677241 + -0.733518 2.69688 -2.4195 -0.664314 0.42752 -0.613118 + -0.802339 2.68845 -2.3385 -0.736232 0.376285 -0.56247 + -0.862522 2.86462 -2.13764 -0.56203 0.360548 -0.744398 + -0.601332 2.537 -2.64618 -0.39382 0.578568 -0.714259 + -0.67792 2.54619 -2.58509 -0.598892 0.509756 -0.617638 + -0.751343 2.50776 -2.52614 -0.692542 0.452599 -0.56173 + -0.820163 2.49925 -2.44519 -0.799046 0.36698 -0.47629 + -0.473219 2.43685 -2.79011 -0.507862 0.605494 -0.612743 + -0.599183 2.42489 -2.7486 -0.286101 0.688043 -0.666891 + -0.65657 2.36347 -2.79322 -0.437782 0.67589 -0.59289 + -0.700677 2.34287 -2.76293 -0.705758 0.555088 -0.440207 + -0.709787 2.38727 -2.68504 -0.7798 0.459401 -0.42528 + -0.57337 2.25345 -2.95005 -0.345234 0.69896 -0.626314 + -0.630757 2.19211 -2.99461 -0.225273 0.600944 -0.766889 + -0.702641 2.19183 -2.96792 -0.457773 0.586308 -0.668346 + -0.746748 2.17122 -2.93763 -0.726054 0.505952 -0.465681 + -0.546279 2.20846 -3.02752 -0.677085 0.566198 -0.47008 + -0.576693 2.13834 -3.04387 0.0911394 -0.189261 -0.977688 + -0.640043 2.12566 -3.02751 -0.475565 -0.117881 -0.871746 + -0.711928 2.12546 -3.00077 -0.456863 0.445075 -0.770185 + -0.745388 2.12484 -2.9707 -0.652627 0.418267 -0.631768 + -0.490656 2.24529 -3.05811 -0.520412 0.65057 -0.553109 + -0.50941 2.1894 -3.09931 -0.455886 0.622112 -0.63651 + -0.565033 2.15256 -3.06872 -0.803082 0.503888 -0.318051 + -0.451256 2.25163 -3.07989 -0.332721 0.695688 -0.636643 + -0.480623 2.19749 -3.09233 -0.36293 0.566636 -0.739733 + -0.393484 2.18027 -3.1615 0.309983 0.609779 -0.729438 + -0.45593 2.1985 -3.12628 -0.402882 0.621838 -0.671568 + -0.372272 2.1636 -3.15483 -0.515333 -0.430193 -0.741192 + -0.7722 2.09951 -2.95763 -0.794376 0.407612 -0.450356 + -0.807259 2.10921 -2.87383 -0.829615 0.434968 -0.35006 + -0.816369 2.15362 -2.79594 -0.75658 0.503765 -0.416902 + -0.78321 2.34884 -2.62608 -0.718184 0.489468 -0.494603 + -0.832711 2.03751 -2.89384 -0.796911 0.429894 -0.424411 + -0.851231 2.13087 -2.76174 -0.766625 0.493754 -0.410479 + -0.818072 2.32609 -2.59188 -0.808241 0.418749 -0.413999 + -0.879773 2.05483 -2.80203 -0.745883 0.479179 -0.462651 + -0.849238 2.29637 -2.54819 -0.807388 0.432161 -0.401698 + -0.85133 2.46952 -2.4015 -0.855075 0.291833 -0.42858 + -0.894426 2.68315 -2.21772 -0.768031 0.274872 -0.578423 + -0.891264 1.98563 -2.84077 -0.593613 -0.298406 -0.74738 + -0.932252 2.02172 -2.75308 -0.791953 0.450271 -0.412391 + -0.877781 2.22032 -2.58847 -0.801371 0.474694 -0.363964 + -0.891187 2.40223 -2.36215 -0.887686 0.261363 -0.379083 + -0.934283 2.61586 -2.17837 -0.808242 0.18417 -0.559309 + -0.975074 2.89702 -2.06695 -0.80171 0.0435097 -0.596128 + -0.943743 1.95252 -2.79183 -0.829521 0.35162 -0.433887 + -0.957339 2.00159 -2.71642 -0.883227 0.374803 -0.281839 + -0.902867 2.20019 -2.5518 -0.867896 0.409687 -0.280915 + -0.902565 2.25588 -2.45786 -0.942132 0.269094 -0.199938 + -0.944732 2.3707 -2.24494 -0.850126 0.222032 -0.47748 + -0.961467 1.93615 -2.75448 -0.85944 0.29645 -0.41651 + -0.976679 1.92511 -2.73795 -0.887227 0.318337 -0.333901 + -0.980083 1.97465 -2.65517 -0.926228 0.326448 -0.188502 + -0.97978 2.03034 -2.56122 -0.892225 0.38394 -0.237748 + -0.95611 2.22434 -2.34064 -0.886865 0.336692 -0.3164 + -1.02199 2.18508 -2.21343 -0.778211 0.262492 -0.570513 + -0.996492 2.4102 -2.17036 -0.660322 0.207774 -0.721668 + -0.999423 1.89818 -2.6767 -0.564249 -0.59868 -0.568512 + -1.01974 1.93901 -2.55022 -0.927356 0.298486 -0.225649 + -0.996071 2.13301 -2.32965 -0.909622 0.327295 -0.255863 + -1.03285 1.85781 -2.57419 -0.797408 -0.476615 -0.370107 + -1.06243 1.89044 -2.4139 -0.936067 0.272282 -0.222802 + -1.08587 1.87405 -2.34371 -0.929636 0.244839 -0.275375 + -1.01952 2.11653 -2.25951 -0.885086 0.279309 -0.372304 + -0.999951 1.87606 -2.63399 0.128967 -0.841571 -0.524525 + -0.988363 1.85496 -2.62205 -0.546797 -0.72186 -0.424183 + -0.992294 1.85263 -2.60982 -0.460463 -0.839095 -0.289642 + -1.01338 1.85759 -2.5856 -0.163371 -0.986546 -0.00610426 + -1.04854 1.80823 -2.42551 -0.0165023 -0.946948 -0.320961 + -1.07554 1.80925 -2.43787 -0.684384 -0.584851 -0.435394 + -0.986254 1.88944 -2.63897 0.382906 -0.823668 -0.418275 + -0.986783 1.86741 -2.59621 0.655489 -0.487962 -0.576392 + -0.972097 1.83359 -2.56863 0.758818 -0.0740781 -0.647076 + -0.988363 1.85496 -2.62205 0.887672 0.45272 -0.0841598 + -0.960509 1.81249 -2.55669 0.775684 0.275018 -0.568049 + -0.940727 1.79069 -2.54593 0.6882 0.706349 0.165686 + -0.977312 1.90902 -2.67488 0.326318 -0.881797 -0.340516 + -0.942907 1.89832 -2.63916 0.0931135 -0.887607 -0.451091 + -0.95185 1.87874 -2.60324 0.204543 -0.79365 -0.572959 + -0.949697 1.86099 -2.5821 0.127297 -0.684584 -0.717733 + -0.935011 1.82717 -2.55452 0.156906 -0.518131 -0.840786 + -0.976679 1.92511 -2.73795 0.408287 -0.885504 -0.221777 + -0.961467 1.93615 -2.75448 0.285962 -0.921694 -0.262116 + -0.9621 1.92007 -2.69142 0.233567 -0.9203 -0.313836 + -0.932709 1.90732 -2.65595 0.0517874 -0.902264 -0.428063 + -0.854408 1.8762 -2.59584 0.0677582 -0.832606 -0.549705 + -0.852255 1.85836 -2.57475 0.0738102 -0.65499 -0.752024 + -0.941467 1.92742 -2.70595 0.119757 -0.936985 -0.328203 + -0.912075 1.91468 -2.67049 -0.113951 -0.929047 -0.351975 + -0.844209 1.88512 -2.61269 -0.0876091 -0.961355 -0.261001 + -0.731115 1.88176 -2.57266 0.240312 -0.969697 -0.0440154 + -0.840742 1.83956 -2.56178 0.175113 -0.652347 -0.737414 + -0.943743 1.95252 -2.79183 0.294881 -0.912308 -0.284147 + -0.923743 1.94387 -2.74325 0.0231523 -0.935339 -0.352995 + -0.892881 1.92997 -2.73397 -0.370541 -0.850887 -0.372411 + -0.881181 1.90619 -2.68198 -0.379758 -0.903856 -0.197049 + -0.813314 1.87664 -2.6242 -0.200225 -0.971413 0.127542 + -0.860402 1.97181 -2.83144 -0.281652 -0.817224 -0.50281 + -0.819887 1.8968 -2.75452 -0.33971 -0.8377 -0.427617 + -0.808187 1.87303 -2.70255 -0.247318 -0.952387 -0.178306 + -0.756234 1.86791 -2.70108 0.0602364 -0.982106 -0.178436 + -0.761362 1.87152 -2.62273 0.0199043 -0.991865 0.125726 + -0.839839 1.97294 -2.84319 0.439026 -0.435866 -0.78567 + -0.799324 1.89793 -2.76628 0.0703518 -0.696227 -0.714366 + -0.768363 1.89362 -2.75541 0.0197245 -0.740419 -0.671856 + -0.736661 1.88587 -2.74199 0.166587 -0.850358 -0.49914 + -0.67396 1.88607 -2.67533 0.224113 -0.970805 -0.0855009 + -0.846348 1.99907 -2.85285 0.424848 -0.589848 -0.68672 + -0.81119 1.93752 -2.78025 0.689812 -0.0718933 -0.72041 + -0.780228 1.9332 -2.76937 0.00172394 -0.355061 -0.934842 + -0.714993 1.95113 -2.79983 -0.0688085 -0.542818 -0.837027 + -0.683291 1.9433 -2.78645 0.134201 -0.766003 -0.628673 + -0.832711 2.03751 -2.89384 0.537891 -0.763711 -0.356958 + -0.825596 1.99728 -2.80676 0.601099 -0.451418 -0.659471 + -0.817699 1.96365 -2.78991 0.654127 -0.16328 -0.738551 + -0.787041 1.95828 -2.78001 -0.00779252 -0.408731 -0.912622 + -0.811959 2.03572 -2.84774 0.589355 -0.663873 -0.460362 + -0.794939 1.99191 -2.79686 0.0151458 -0.52397 -0.851602 + -0.721806 1.97612 -2.81051 -0.173775 -0.479595 -0.860111 + -0.63233 1.9467 -2.79915 -0.226831 -0.830723 -0.508376 + -0.646625 1.94192 -2.78008 -0.135315 -0.895651 -0.423674 + -0.7722 2.09951 -2.95763 0.719673 -0.694112 0.0166993 + -0.793107 2.08309 -2.88218 0.780176 -0.587641 -0.214486 + -0.771598 2.06407 -2.84745 0.0991126 -0.629943 -0.770291 + -0.79045 2.01671 -2.81301 0.17133 -0.576187 -0.799158 + -0.717317 2.00101 -2.82661 -0.193824 -0.528686 -0.826392 + -0.745388 2.12484 -2.9707 0.105438 -0.985176 -0.135318 + -0.766295 2.10833 -2.8953 0.322422 -0.881794 -0.344214 + -0.754926 2.08123 -2.86297 -0.088241 -0.669275 -0.737756 + -0.734795 2.11178 -2.90688 -0.18419 -0.897889 -0.399835 + -0.723426 2.08469 -2.87455 -0.317962 -0.661377 -0.679323 + -0.700645 2.01817 -2.84213 -0.322437 -0.570899 -0.755055 + -0.711928 2.12546 -3.00077 -0.0942479 -0.978302 -0.184505 + -0.701335 2.1124 -2.93695 -0.434316 -0.827924 -0.354839 + -0.70669 2.08199 -2.88367 -0.556543 -0.624325 -0.548159 + -0.683909 2.01546 -2.85125 -0.63762 -0.589122 -0.496363 + -0.679138 2.09519 -2.95214 -0.650221 -0.572981 -0.498904 + -0.684493 2.06486 -2.89881 -0.738842 -0.498467 -0.453479 + -0.671611 2.04896 -2.90707 -0.824363 -0.360687 -0.436269 + -0.671027 1.99965 -2.85946 -0.832657 -0.514013 -0.206091 + -0.619337 2.10537 -3.02358 -0.774776 -0.598747 -0.203037 + -0.658431 2.07491 -2.94821 -0.719512 -0.476982 -0.504768 + -0.656267 2.01889 -2.91698 -0.847577 -0.345666 -0.402651 + -0.645456 2.00311 -2.92446 -0.796217 -0.434369 -0.421144 + -0.660216 1.98387 -2.86694 -0.694732 -0.681264 -0.230709 + -0.610102 2.09214 -3.03065 -0.648038 -0.417286 -0.637118 + -0.643087 2.04483 -2.95812 -0.82228 -0.283918 -0.4932 + -0.633852 2.0316 -2.96519 -0.787272 -0.336108 -0.516947 + -0.632333 1.99251 -2.93589 -0.523645 -0.703772 -0.480105 + -0.598376 2.08982 -3.03804 -0.0216755 -0.397058 -0.917537 + -0.620729 2.02099 -2.97662 -0.599586 -0.548391 -0.582892 + -0.588531 2.10963 -3.04154 0.33991 -0.205779 -0.917669 + -0.588059 2.02391 -2.99407 0.0558765 -0.592923 -0.803318 + -0.609004 2.01859 -2.98406 -0.354576 -0.67891 -0.642928 + -0.582176 1.97927 -2.93717 -0.146671 -0.864848 -0.48013 + -0.568856 2.10302 -2.9977 0.676745 -0.220017 -0.702573 + -0.578214 2.04372 -2.99759 0.511444 -0.27269 -0.814902 + -0.534166 2.00115 -2.96645 0.120555 -0.661453 -0.740234 + -0.561231 1.9846 -2.94719 -0.0037534 -0.81851 -0.57448 + -0.557018 2.13173 -3.00002 0.53759 -0.49929 -0.679489 + -0.540525 2.08938 -2.98327 0.193884 -0.095052 -0.976409 + -0.549883 2.03016 -2.98311 0.22911 -0.262468 -0.937347 + -0.532865 2.15391 -3.00765 0.237224 -0.777528 -0.582387 + -0.505218 2.1392 -2.99357 -0.0178397 -0.464766 -0.885254 + -0.529371 2.1171 -2.98589 0.108102 -0.267392 -0.957505 + -0.476331 2.05192 -2.98459 0.113045 -0.24789 -0.96217 + -0.460613 2.02282 -2.96798 0.248829 -0.520817 -0.816599 + -0.565033 2.15256 -3.06872 0.484069 -0.846474 -0.221718 + -0.521205 2.16814 -3.0325 0.358025 -0.861725 -0.35951 + -0.492418 2.17623 -3.02551 0.15063 -0.831792 -0.534259 + -0.483079 2.14953 -3.00127 -0.129771 -0.496484 -0.858291 + -0.465177 2.07955 -2.98726 -0.0437703 -0.249576 -0.967365 + -0.50941 2.1894 -3.09931 0.368776 -0.902609 -0.222038 + -0.480623 2.19749 -3.09233 0.05889 -0.976603 -0.206831 + -0.449959 2.18494 -3.04079 -0.257076 -0.853096 -0.454026 + -0.440619 2.15824 -3.01654 -0.398102 -0.517548 -0.757403 + -0.443037 2.08988 -2.99495 -0.353468 -0.3979 -0.846603 + -0.406483 2.02619 -2.95862 -0.232996 -0.809607 -0.538749 + -0.428765 2.01675 -2.95248 0.138018 -0.68137 -0.718809 + -0.45593 2.1985 -3.12628 -0.241834 -0.966007 -0.0913623 + -0.425266 2.18595 -3.07474 -0.394178 -0.887344 -0.239257 + -0.404054 2.16929 -3.06809 -0.679295 -0.628527 -0.378831 + -0.415846 2.14963 -3.03183 -0.674938 -0.397921 -0.621384 + -0.418264 2.08128 -3.01025 -0.753756 -0.316226 -0.576067 + -0.393484 2.18027 -3.1615 -0.501108 -0.855941 -0.127496 + -0.371147 2.13183 -3.0994 -0.713108 -0.487069 -0.504223 + -0.38294 2.11217 -3.06315 -0.812176 -0.21162 -0.543679 + -0.370886 2.08425 -3.07699 -0.813072 0.0218246 -0.581754 + -0.406211 2.05336 -3.02409 -0.891624 -0.241537 -0.382971 + -0.350353 2.16381 -3.16919 -0.29822 -0.830397 -0.470644 + -0.349228 2.13195 -3.11381 -0.462097 -0.573419 -0.676503 + -0.35431 2.09602 -3.09818 -0.713984 -0.0871747 -0.694714 + -0.368641 2.03918 -3.08753 -0.684455 -0.346635 -0.641378 + -0.364508 2.01202 -3.06709 -0.474709 -0.715003 -0.513247 + -0.402078 2.0262 -3.00365 -0.84527 -0.509436 -0.161223 + -0.334436 2.13338 -3.1253 0.199361 -0.454001 -0.868411 + -0.339518 2.09737 -3.10972 -0.288629 -0.190774 -0.938242 + -0.352065 2.05095 -3.10872 -0.394263 -0.244131 -0.885978 + -0.323458 2.01354 -3.07911 0.0809718 -0.797337 -0.598077 + -0.35437 1.97828 -2.99445 -0.405852 -0.893079 -0.194152 + -0.310485 2.08449 -3.1044 0.277689 -0.115665 -0.953683 + -0.323032 2.03799 -3.10346 0.139075 -0.466517 -0.87351 + -0.238304 2.0325 -3.05156 0.339023 -0.780841 -0.524738 + -0.31332 1.9798 -3.00647 0.180299 -0.937267 -0.298366 + -0.302064 2.11371 -3.10301 0.450584 -0.0484366 -0.891419 + -0.237878 2.05695 -3.07591 0.529582 -0.39172 -0.752395 + -0.289754 2.15123 -3.09701 0.371972 -0.235149 -0.897965 + -0.229457 2.08617 -3.07451 0.104246 -0.0261088 -0.994209 + -0.208237 2.10715 -3.07546 0.0272764 -0.330273 -0.943491 + -0.322126 2.17091 -3.1193 0.589221 -0.493477 -0.639764 + -0.289791 2.2002 -3.13563 0.407427 -0.790579 -0.457153 + -0.268534 2.17222 -3.09796 0.235879 -0.484311 -0.842498 + -0.350353 2.16381 -3.16919 0.863495 -0.209925 -0.458593 + -1.10664 1.77992 -2.31808 -0.839459 -0.448712 -0.306541 + -1.11354 1.8732 -2.26963 -0.921075 0.202699 -0.332465 + -1.11601 1.94174 -2.22355 -0.733331 0.272861 -0.622714 + -1.08037 1.78631 -2.37834 -0.268936 -0.87116 -0.410797 + -1.06729 1.76693 -2.35678 -0.529537 -0.799574 -0.283322 + -1.07252 1.76395 -2.33541 -0.49166 -0.841967 -0.222176 + -1.0932 1.74848 -2.21302 -0.467606 -0.868302 -0.165517 + -1.12955 1.76009 -2.17713 -0.388941 -0.899444 -0.199311 + -1.13431 1.77915 -2.24394 -0.823167 -0.455097 -0.339533 + -1.05337 1.7853 -2.36599 0.113347 -0.884727 -0.452117 + -1.05223 1.76606 -2.33606 0.501433 -0.546948 -0.670382 + -1.06729 1.76693 -2.35678 0.812098 -0.0785088 -0.578215 + -1.03915 1.74659 -2.31455 0.693161 -0.0985847 -0.714009 + -1.00204 1.70979 -2.2786 -0.0834123 -0.861284 -0.50123 + -1.01319 1.78128 -2.35383 0.00959363 -0.905434 -0.424379 + -1.01205 1.76204 -2.32391 0.0818213 -0.780047 -0.620349 + -0.999293 1.74336 -2.30196 0.114434 -0.668815 -0.734568 + -0.962187 1.70664 -2.26596 0.125684 -0.873764 -0.46983 + -1.00727 1.7068 -2.25724 -0.314082 -0.929948 -0.191178 + -1.02907 1.808 -2.43692 -0.246026 -0.92968 -0.274166 + -1.0031 1.78788 -2.37926 -0.1156 -0.967138 -0.226452 + -0.919578 1.77053 -2.32961 0.0250614 -0.878133 -0.477759 + -0.906824 1.75185 -2.30766 0.150893 -0.811615 -0.564369 + -0.997619 1.80835 -2.48351 -0.424834 -0.870825 -0.247343 + -0.971655 1.78821 -2.42584 -0.241776 -0.964547 -0.105801 + -0.909494 1.77704 -2.35508 -0.0565466 -0.993731 -0.0964449 + -0.809792 1.77706 -2.32613 0.188447 -0.982079 0.00278942 + -0.863841 1.74856 -2.26716 0.367874 -0.886781 -0.279799 + -0.976528 1.80348 -2.50768 -0.503138 -0.838327 -0.209903 + -0.950965 1.78361 -2.44946 -0.350992 -0.93597 -0.0276399 + -0.888804 1.77243 -2.3787 -0.0913196 -0.992784 0.0777251 + -0.944658 1.78837 -2.53371 -0.350349 -0.905888 -0.237954 + -0.919094 1.7685 -2.47549 -0.180214 -0.977904 -0.105958 + -0.875386 1.76883 -2.46366 0.142442 -0.977915 -0.152948 + -0.845095 1.77276 -2.36687 0.0609837 -0.997089 0.0457605 + -0.940727 1.79069 -2.54593 -0.0728904 -0.727367 -0.682366 + -0.903717 1.78657 -2.5308 0.125959 -0.787047 -0.603897 + -0.864548 1.78519 -2.5062 0.291836 -0.861078 -0.416385 + -0.777425 1.78562 -2.40034 0.261389 -0.949915 -0.171279 + -0.743873 1.78945 -2.37079 0.203337 -0.961421 -0.185268 + -0.811544 1.77651 -2.33737 0.111896 -0.993688 -0.00792463 + -0.923498 1.80837 -2.54156 0.18622 -0.36191 -0.913424 + -0.801573 1.83818 -2.53719 0.379027 -0.799878 -0.465332 + -0.766587 1.80198 -2.44288 0.420044 -0.840084 -0.343253 + -0.731199 1.88017 -2.54571 0.395795 -0.903312 -0.165451 + -0.750759 1.86051 -2.52226 0.460266 -0.799169 -0.386632 + -0.715772 1.8243 -2.42795 0.417089 -0.773367 -0.477431 + -0.693494 1.82274 -2.41123 0.357652 -0.725317 -0.588219 + -0.710576 1.80419 -2.39672 0.346268 -0.851554 -0.393642 + -0.63728 1.90316 -2.52174 0.181397 -0.976218 -0.118719 + -0.64211 1.89408 -2.4698 0.165093 -0.924706 -0.343022 + -0.66167 1.87441 -2.44634 0.405501 -0.773259 -0.487483 + -0.639392 1.87276 -2.42967 0.272619 -0.792925 -0.54493 + -0.637196 1.90475 -2.54868 0.227812 -0.973699 -0.00349911 + -0.603434 1.90976 -2.54397 -0.748915 -0.614656 -0.247638 + -0.608264 1.9006 -2.4921 0.0412206 -0.974082 -0.222408 + -0.621012 1.88748 -2.46078 -0.0896543 -0.892265 -0.442522 + -0.642098 1.90017 -2.57856 0.254049 -0.963444 0.0850545 + -0.609115 1.90933 -2.58583 0.475288 -0.879233 0.0324001 + -0.604214 1.91391 -2.55595 -0.156328 -0.973167 -0.168841 + -0.592266 1.91999 -2.61288 -0.640771 -0.737514 -0.213273 + -0.593047 1.92413 -2.62486 -0.640765 -0.737519 -0.213273 + -0.733381 1.87888 -2.59848 0.193993 -0.977533 0.0824332 + -0.644363 1.8973 -2.60438 0.290735 -0.953812 0.0756082 + -0.594698 1.91353 -2.65769 0.610895 -0.78464 0.105579 + -0.571293 1.94331 -2.66948 0.796323 -0.587156 0.145317 + -0.645979 1.89343 -2.65109 0.285741 -0.957429 0.0410105 + -0.596314 1.90958 -2.70445 0.488558 -0.803174 0.340916 + -0.562054 1.91149 -2.78196 0.892178 -0.327389 0.311183 + -0.556875 1.94742 -2.7414 0.783711 -0.595774 0.175642 + -0.596777 1.8903 -2.71226 0.732716 -0.270747 0.624358 + -0.562516 1.89213 -2.78983 0.707667 0.552525 0.440367 + -0.540993 1.91304 -2.85124 0.948403 -0.138484 0.285227 + -1.15743 1.91745 -2.19529 -0.765219 0.152997 -0.625325 + -1.09573 2.14878 -2.15916 -0.644858 0.242609 -0.724775 + -1.10695 2.28195 -2.11301 -0.632824 0.155424 -0.758537 + -1.0332 2.31833 -2.16724 -0.609489 0.191343 -0.769358 + -1.17645 1.88416 -2.16522 -0.942099 -0.0382322 -0.333148 + -1.18765 2.08689 -2.10077 -0.750283 0.168071 -0.639396 + -1.13716 2.12449 -2.13089 -0.641379 0.256433 -0.723101 + -1.14179 2.21318 -2.0973 -0.651842 0.19096 -0.733918 + -1.14109 2.34193 -2.07631 -0.522511 0.0925126 -0.847599 + -1.16752 1.8059 -2.15487 -0.9547 -0.207369 -0.213416 + -1.21327 1.99216 -2.01029 -0.967286 -0.169126 -0.189087 + -1.20666 2.0536 -2.07071 -0.916515 -0.0594466 -0.395557 + -1.2492 2.14475 -2.01399 -0.773145 -0.235086 -0.589051 + -1.19228 2.17558 -2.06719 -0.60126 0.120367 -0.789936 + -1.14801 1.74733 -2.15642 -0.9288 -0.303759 -0.212278 + -1.17096 1.74047 -2.02934 -0.960066 -0.259605 -0.104302 + -1.20434 1.9139 -1.99994 -0.980805 -0.158871 -0.113052 + -1.24278 2.03662 -1.8647 -0.931278 -0.35514 -0.0812146 + -1.2558 2.08331 -1.95357 -0.901063 -0.375583 -0.216848 + -1.15145 1.6819 -2.03091 -0.486241 -0.794128 -0.364597 + -1.18277 1.76785 -1.93897 -0.978926 -0.193431 -0.0654877 + -1.21615 1.94119 -1.90961 -0.974374 -0.219508 -0.0491093 + -1.24146 2.01092 -1.74839 -0.952108 -0.298057 0.0682104 + -1.28605 2.1145 -1.83579 -0.918882 -0.3945 -0.00512896 + -1.29906 2.16111 -1.92472 -0.830483 -0.540358 -0.135319 + -1.17311 1.71051 -1.92046 -0.935592 -0.34672 -0.0667287 + -1.21483 1.91541 -1.79335 -0.97801 -0.208528 -0.0036615 + -1.22327 1.99607 -1.63906 -0.930147 -0.329843 0.161339 + -1.26074 2.09963 -1.71582 -0.933772 -0.32675 0.145961 + -1.14237 1.66056 -1.98515 -0.402532 -0.874839 -0.26949 + -1.12108 1.64027 -1.948 -0.818254 -0.565399 -0.103853 + -1.13441 1.64513 -1.92742 -0.699975 -0.6896 -0.185703 + -1.17745 1.71176 -1.83562 -0.93609 -0.350689 0.0274534 + -1.20517 1.85808 -1.77485 -0.97794 -0.203166 0.0485556 + -1.10948 1.66565 -1.97575 0.135518 -0.874943 -0.464877 + -1.11968 1.6542 -1.95812 0.352141 -0.739179 -0.574118 + -1.12108 1.64027 -1.948 0.595698 -0.510438 -0.620159 + -1.08136 1.64392 -1.93812 -0.00774151 -0.862955 -0.505221 + -1.06945 1.6088 -1.87888 0.00737978 -0.880066 -0.474794 + -1.11856 1.68698 -2.02151 0.237111 -0.830548 -0.503953 + -1.0775 1.66753 -1.97561 -0.00641392 -0.852507 -0.522676 + -1.08771 1.65608 -1.95799 0.0123477 -0.848293 -0.529384 + -1.0079 1.65625 -1.96487 0.024702 -0.857507 -0.513879 + -1.05241 1.61881 -1.89603 -0.00116581 -0.870749 -0.491726 + -1.14801 1.74733 -2.15642 0.258762 -0.859452 -0.440889 + -0.649583 1.8106 -0.813416 -0.980869 -0.14873 0.125599 + -0.661456 1.89294 -0.847236 -0.993982 -0.0438529 0.100377 + -0.665803 1.85544 -0.942675 -0.953548 -0.102119 0.283404 + -0.723908 1.85085 -1.04912 -0.280782 -0.340263 0.897431 + -0.616529 1.72023 -0.715886 -0.981363 -0.163407 0.101122 + -0.639294 1.82867 -0.742512 -0.97765 -0.198828 0.0683203 + -0.656365 1.90801 -0.744739 -0.997035 -0.0769454 0.0010585 + -0.65719 1.99449 -0.872528 -0.921122 -0.271916 0.278562 + -0.688318 1.91609 -0.979938 -0.818349 -0.264622 0.510176 + -0.641223 1.8031 -0.63302 -0.976983 -0.213048 0.0106765 + -0.658294 1.88243 -0.635237 -0.980913 -0.193882 0.0148055 + -0.66404 1.99448 -0.668502 -0.992128 -0.0802442 -0.0961359 + -0.652099 2.00947 -0.770073 -0.995772 -0.0882967 0.0253457 + -0.690586 2.04601 -0.869965 -0.651675 -0.578504 0.490564 + -0.721714 1.96762 -0.977374 -0.0653536 -0.61846 0.783094 + -0.670984 1.91222 -0.532224 -0.785764 -0.522623 0.330819 + -0.67673 2.02426 -0.56549 -0.98629 -0.109726 -0.123255 + -0.675378 2.08841 -0.670391 -0.993583 -0.0114219 -0.112528 + -0.663437 2.10349 -0.771912 -0.857258 -0.417236 0.3017 + -0.745918 2.11019 -0.834725 0.0945999 -0.771066 0.629688 + -0.677353 2.07043 -0.42066 0.168401 -0.700289 0.693712 + -0.719851 2.09289 -0.351357 0.732537 -0.37235 0.569864 + -0.643618 2.04868 -0.42158 -0.110878 -0.720557 0.684473 + -0.642861 2.13821 -0.297858 -0.0476366 -0.950944 0.305674 + -0.683856 2.1495 -0.235005 0.0157995 -0.967238 0.253381 + -0.719851 2.09289 -0.351357 0.159494 -0.906225 0.391558 + -0.726354 2.17204 -0.165652 -0.245095 -0.965109 0.0921618 + -0.591539 2.1091 -0.346226 0.525479 -0.738011 0.423335 + -0.632028 2.15113 -0.149236 0.301249 -0.929363 0.213385 + -0.673023 2.1625 -0.086333 -0.0360688 -0.990365 0.133701 + -0.694818 2.17955 -0.003062 -0.0667867 -0.990247 0.122268 + -0.590323 2.17315 -0.220969 0.797921 -0.567165 0.204074 + -0.559074 2.21804 -0.16272 0.742297 -0.669738 -0.0210964 + -0.600778 2.19602 -0.090987 0.508197 -0.861075 0.0168798 + -0.617838 2.17332 -0.016465 0.151545 -0.987773 -0.0365742 + -0.537674 2.26323 -0.227793 0.874435 -0.483853 -0.0353454 + -0.519612 2.28057 -0.179638 0.688921 -0.661905 -0.295414 + -0.525803 2.23951 -0.112705 0.565716 -0.803141 -0.186895 + -0.542863 2.21689 -0.038133 0.336101 -0.869336 -0.362343 + -0.498212 2.32577 -0.24471 0.77181 -0.582199 -0.255642 + -0.442832 2.38537 -0.239753 0.598936 -0.611056 -0.517577 + -0.445415 2.33028 -0.186529 0.430497 -0.680179 -0.59332 + -0.451606 2.2893 -0.119546 0.345365 -0.810414 -0.473235 + -0.481643 2.38683 -0.29747 0.783133 -0.529422 -0.326214 + -0.426263 2.44644 -0.292521 0.63061 -0.577187 -0.518833 + -0.361921 2.4423 -0.221354 0.219892 -0.676355 -0.702987 + -0.364504 2.38729 -0.16808 0.179872 -0.620493 -0.763305 + -0.35169 2.32451 -0.12374 0.0690669 -0.742476 -0.666302 + -0.462537 2.44419 -0.355431 0.850651 -0.481766 -0.210462 + -0.415492 2.50481 -0.344625 0.694633 -0.557192 -0.454996 + -0.3606 2.49977 -0.271703 0.259769 -0.658679 -0.70616 + -0.266055 2.51805 -0.310551 -0.407732 -0.602135 -0.686432 + -0.267376 2.46057 -0.260203 -0.371141 -0.620333 -0.690971 + -0.446736 2.50631 -0.40663 0.859747 -0.425557 -0.282376 + -0.39969 2.56693 -0.395823 0.677224 -0.54382 -0.495609 + -0.349828 2.55815 -0.323807 0.250919 -0.68534 -0.683629 + -0.271304 2.57523 -0.3564 -0.387972 -0.617953 -0.683821 + -0.438166 2.56162 -0.466418 0.879113 -0.365454 -0.305947 + -0.392707 2.62786 -0.447353 0.688569 -0.493727 -0.531137 + -0.340044 2.61075 -0.377513 0.230001 -0.691242 -0.685044 + -0.26152 2.62783 -0.410106 -0.387313 -0.649707 -0.654117 + -0.439425 2.6232 -0.51988 0.884767 -0.352439 -0.304915 + -0.393966 2.68945 -0.500823 0.718516 -0.526767 -0.454148 + -0.333061 2.67159 -0.4291 0.150934 -0.612573 -0.775869 + -0.26243 2.671 -0.458472 -0.448585 -0.573961 -0.685084 + -0.423663 2.83709 -0.832142 0.899465 -0.382728 -0.210906 + -0.383908 2.96572 -0.936345 0.754844 -0.569141 -0.326019 + -0.328671 2.73479 -0.471964 0.182213 -0.686864 -0.703574 + -0.258041 2.73411 -0.501386 -0.532705 -0.599616 -0.597232 + -0.389784 3.35025 -1.69157 0.907022 -0.377863 -0.185823 + -0.350029 3.47889 -1.79577 0.865349 -0.438158 -0.243288 + -0.31586 3.53684 -1.79416 0.787117 -0.529784 -0.315874 + -0.318614 3.01098 -0.907536 0.688474 -0.621364 -0.374046 + -0.26365 3.18553 -1.08067 0.535459 -0.631209 -0.561124 + -0.357848 3.75877 -2.25574 0.870537 -0.413683 -0.266518 + -0.357848 3.75877 -2.25574 0.824205 -0.477442 -0.304524 + -0.323679 3.81672 -2.25412 0.515322 -0.433265 -0.739408 + -0.260896 3.7114 -1.9673 0.784248 -0.525438 -0.329954 + -0.287798 3.87878 -2.26541 0.547926 -0.423239 -0.721558 + -0.226921 3.78392 -1.9845 0.744677 -0.555421 -0.370085 + -0.320441 3.88862 -2.27345 -0.237887 -0.0412594 -0.970416 + -0.280552 3.9586 -2.28646 -0.248078 0.0220471 -0.968489 + -0.253823 3.9513 -2.28262 0.464591 -0.392343 -0.793865 + -0.201838 4.02314 -2.28604 0.437655 -0.340648 -0.832116 + -0.170029 3.8391 -1.98008 0.612836 -0.657875 -0.437759 + -0.356322 3.82656 -2.26216 -0.260274 -0.0890776 -0.961417 + -0.335666 3.91617 -2.25556 -0.681655 0.292058 -0.670857 + -0.295777 3.98606 -2.26862 -0.686428 0.385977 -0.61631 + -0.238178 4.05334 -2.27375 -0.537741 0.499111 -0.679502 + -0.228567 4.03034 -2.28992 -0.183981 0.171153 -0.967914 + -0.414938 3.79883 -2.22034 -0.720113 0.272106 -0.638275 + -0.378202 3.85375 -2.23826 -0.701246 0.273284 -0.658461 + -0.342256 3.96762 -2.21109 -0.748213 0.449247 -0.488216 + -0.289296 4.02531 -2.231 -0.722365 0.526344 -0.448499 + -0.357848 3.75877 -2.25574 -0.247884 0.172693 -0.953274 + -0.463356 3.69601 -2.21324 -0.678449 0.274489 -0.681441 + -0.429885 3.82907 -2.17531 -0.813272 0.379751 -0.440883 + -0.384793 3.90521 -2.19379 -0.801508 0.391873 -0.451686 + -0.378565 3.95873 -2.14769 -0.829334 0.460094 -0.317047 + -0.335829 4.02806 -2.14717 -0.776441 0.524639 -0.349133 + -0.478303 3.72625 -2.16821 -0.803751 0.342748 -0.486321 + -0.504429 3.73987 -2.11361 -0.82587 0.397715 -0.399702 + -0.423657 3.88259 -2.12921 -0.833771 0.440712 -0.332565 + -0.365999 4.02351 -2.06529 -0.824745 0.498463 -0.267076 + -0.323263 4.09292 -2.06472 -0.806498 0.507759 -0.302889 + -0.564439 3.60092 -2.11415 -0.794199 0.36304 -0.487289 + -0.591852 3.63862 -2.04383 -0.653269 0.433813 -0.620521 + -0.549484 3.70203 -2.04408 -0.757982 0.467353 -0.455021 + -0.501226 3.80578 -2.03256 -0.773217 0.383494 -0.505042 + -0.456171 3.84361 -2.1021 -0.831653 0.446748 -0.329801 + -0.647085 3.52642 -2.0411 -0.496292 0.278787 -0.822175 + -0.700534 3.60249 -2.02207 0.0222737 0.125976 -0.991783 + -0.619137 3.65463 -2.00676 -0.208829 0.341478 -0.916397 + -0.576769 3.71804 -2.007 -0.317497 0.22297 -0.921672 + -0.532606 3.80752 -1.99978 -0.343624 0.303519 -0.888706 + -0.427697 3.95708 -2.04764 -0.0749504 0.101348 -0.992024 + -0.717464 3.32035 -2.07958 -0.430209 0.27129 -0.861 + -0.770078 3.30759 -2.07469 0.18806 0.182001 -0.965147 + -0.6997 3.51375 -2.03617 0.0713413 0.171735 -0.982557 + -0.776695 3.07793 -2.1311 -0.479383 0.210897 -0.851889 + -0.816951 3.26181 -2.10819 0.367657 -0.000813715 -0.929961 + -0.830246 3.43662 -2.09196 0.337313 0.152628 -0.928937 + -0.831081 3.52536 -2.07787 0.0343598 0.437928 -0.898353 + -0.934467 2.91554 -2.08703 -0.430684 0.111011 -0.895649 + -0.84864 3.12885 -2.08049 -0.353126 -0.0253951 -0.935231 + -0.843466 3.22363 -2.09885 -0.166718 -0.253941 -0.952743 + -0.887219 3.33249 -2.16981 0.36213 0.079671 -0.928716 + -0.877119 3.39084 -2.12547 0.415215 0.373389 -0.829564 + -0.988181 3.1422 -2.07001 -0.230553 -0.116348 -0.966079 + -0.983007 3.23697 -2.08837 -0.25442 -0.358061 -0.898367 + -0.913734 3.29439 -2.16042 -0.0756926 -0.44545 -0.892101 + -0.971944 3.33475 -2.15372 -0.454421 -0.144641 -0.878966 + -0.945597 3.3738 -2.16275 -0.139378 0.337716 -0.930872 + -1.02879 3.12367 -2.04993 -0.567989 -0.356446 -0.741845 + -1.13992 3.1959 -2.03623 -0.229918 -0.177834 -0.956824 + -1.04122 3.27733 -2.08166 -0.430465 -0.205168 -0.87898 + -1.0767 3.38613 -2.07192 -0.431981 -0.0467594 -0.90067 + -1.05036 3.42518 -2.08095 -0.347645 0.418403 -0.839096 + -1.01116 3.05512 -1.99999 -0.827572 -0.310506 -0.467665 + -1.06198 3.0943 -1.98165 -0.214445 -0.482203 -0.849407 + -1.07961 3.16294 -2.03154 -0.414817 -0.837076 -0.356693 + -0.975289 2.85138 -2.0535 -0.951523 0.238084 -0.19473 + -1.01137 3.00939 -1.98658 -0.65421 0.00718047 -0.756279 + -1.06208 3.04749 -1.96857 -0.144276 -0.111882 -0.983192 + -1.17824 3.0538 -1.99369 0.0675386 -0.279717 -0.957704 + -1.23855 3.08685 -1.99834 -0.09158 -0.143726 -0.985371 + -1.00064 2.76627 -2.06269 -0.64153 0.199236 -0.740772 + -1.02943 2.93831 -1.99707 -0.35258 0.213584 -0.911081 + -1.08014 2.97632 -1.97911 -0.0795743 0.149333 -0.98558 + -1.17835 3.00699 -1.98062 0.0720652 -0.065211 -0.995266 + -1.31949 3.00873 -1.98584 -0.0162973 -0.0208787 -0.999649 + -0.986043 2.65546 -2.10375 -0.655297 0.19743 -0.729114 + -1.11286 2.67152 -2.02258 -0.301424 0.261841 -0.916833 + -1.05478 2.85312 -2.00632 -0.362516 0.201705 -0.909889 + -1.10555 2.89233 -1.98803 -0.0906678 0.125675 -0.987919 + -1.20375 2.92299 -1.98954 0.0203355 0.0750271 -0.996974 + -1.09827 2.56071 -2.06364 -0.416537 0.204287 -0.885869 + -1.24444 2.67947 -2.00494 -0.0963287 0.107055 -0.989576 + -1.16363 2.71074 -2.0043 -0.108192 0.175012 -0.978604 + -1.28456 2.89182 -1.99014 -0.0221535 0.0461543 -0.998689 + -1.13497 2.46883 -2.06051 -0.43348 0.143259 -0.889703 + -1.24701 2.56134 -2.01134 -0.227772 0.0698009 -0.971209 + -1.42874 2.76685 -1.99049 -0.0696272 0.0429395 -0.996648 + -1.46366 2.88377 -1.98619 -0.0932224 0.0330562 -0.995096 + -1.25313 2.43444 -2.02713 -0.270164 0.073252 -0.960024 + -1.376 2.51822 -1.99585 -0.114477 0.0144164 -0.993321 + -1.43131 2.64864 -1.99695 -0.075487 0.0136572 -0.997053 + -1.63719 2.8068 -1.96728 -0.093509 0.133554 -0.98662 + -1.23734 2.32035 -2.03312 -0.343442 0.0366645 -0.938458 + -1.36021 2.40413 -2.00184 -0.216379 -0.0373293 -0.975596 + -1.53882 2.55361 -1.98375 -0.0473551 -0.0389049 -0.99812 + -1.59413 2.68402 -1.98483 -0.0448303 0.0564439 -0.997399 + -1.17593 2.27307 -2.06064 -0.473531 0.0996804 -0.875119 + -1.25369 2.22285 -2.03966 -0.502976 -0.0939219 -0.859182 + -1.33576 2.3177 -2.00015 -0.399315 -0.189006 -0.89712 + -1.46842 2.37095 -1.97597 -0.223438 -0.345836 -0.911303 + -1.49287 2.45738 -1.97767 -0.116185 -0.0937373 -0.988794 + -1.33127 2.23969 -1.97442 -0.646114 -0.420912 -0.636687 + -1.42789 2.30996 -1.94454 -0.446572 -0.617113 -0.647878 + -1.62731 2.40409 -1.94996 -0.235512 -0.634903 -0.735821 + -1.66729 2.45157 -1.98061 -0.106977 -0.338737 -0.93478 + -1.71324 2.5478 -1.98668 -0.0974185 -0.0390775 -0.994476 + -1.39568 2.23147 -1.89478 -0.626229 -0.755703 -0.191702 + -1.50851 2.3155 -1.86953 -0.340965 -0.935321 -0.0944317 + -1.58678 2.34309 -1.91852 -0.260574 -0.815644 -0.516552 + -1.73092 2.37115 -1.88572 -0.131401 -0.848915 -0.511934 + -1.781 2.40746 -1.9224 -0.142853 -0.706798 -0.692842 + -1.31454 2.19299 -1.78813 -0.813264 -0.555502 0.173263 + -1.36065 2.22605 -1.8196 -0.626462 -0.723195 0.290748 + -1.47348 2.31008 -1.79434 -0.436618 -0.833227 0.339262 + -1.65265 2.34347 -1.83677 -0.127858 -0.990665 0.0472872 + -1.28924 2.1782 -1.66811 -0.884102 -0.433411 0.174695 + -1.34068 2.29708 -1.63003 -0.761031 -0.612996 0.212291 + -1.38679 2.33015 -1.6615 -0.589409 -0.744175 0.314326 + -1.43417 2.38079 -1.61921 -0.55271 -0.682526 0.478193 + -1.52085 2.36072 -1.75206 -0.317515 -0.81048 0.492246 + -1.26697 2.17874 -1.57305 -0.900365 -0.390708 0.19155 + -1.31841 2.29754 -1.53501 -0.823395 -0.449967 0.345761 + -1.24255 2.08486 -1.60644 -0.947869 -0.274829 0.161286 + -1.23862 2.16438 -1.46977 -0.905292 -0.313672 0.286453 + -1.24799 2.24232 -1.43177 -0.8767 -0.305355 0.371694 + -1.26407 2.36213 -1.3649 -0.841359 -0.267282 0.469762 + -1.33449 2.41726 -1.46819 -0.756846 -0.403412 0.51424 + -1.2045 1.99043 -1.53649 -0.917416 -0.362814 0.163444 + -1.2142 2.0705 -1.50317 -0.940018 -0.267209 0.212052 + -1.18692 2.03124 -1.42837 -0.941062 -0.229075 0.248849 + -1.19436 2.12152 -1.38695 -0.92791 -0.233749 0.290421 + -1.20373 2.19955 -1.3489 -0.87935 -0.241729 0.410257 + -1.18042 1.92842 -1.63808 -0.800197 -0.54896 0.241512 + -1.16165 1.92269 -1.53557 -0.773768 -0.633174 -0.0193038 + -1.17722 1.95109 -1.46175 -0.925285 -0.338291 0.171486 + -1.14099 1.87746 -1.41543 -0.897996 -0.356174 0.258347 + -1.16448 1.97777 -1.38457 -0.885871 -0.279823 0.370041 + -1.17192 2.06806 -1.34315 -0.844979 -0.263254 0.465519 + -1.0651 1.85069 -1.53705 -0.803826 -0.572122 0.162914 + -1.03903 1.79188 -1.47559 -0.62161 -0.56532 -0.542231 + -1.13558 1.86389 -1.47411 -0.784048 -0.569633 -0.246549 + -1.03402 1.78121 -1.51991 -0.745892 0.00624042 0.666037 + -1.00259 1.73764 -1.46965 -0.911133 -0.354543 -0.210087 + -1.08457 1.69014 -1.39597 -0.841294 -0.353496 -0.408982 + -1.09935 1.79026 -1.42779 -0.913192 -0.136649 0.383938 + -1.07254 1.68849 -1.48572 -0.493736 0.219424 0.841474 + -1.01226 1.69252 -1.49689 -0.433205 0.25784 0.863627 + -0.98083 1.64894 -1.44662 -0.999595 -0.0181607 0.0219353 + -1.04813 1.6359 -1.39004 -0.63553 -0.439626 -0.634689 + -1.19025 1.85053 -1.68118 -0.923306 -0.229262 0.308131 + -1.11344 1.68017 -1.5459 -0.899984 -0.129642 0.416199 + -1.03534 1.59892 -1.45797 -0.720565 -0.692201 -0.0405528 + -1.04089 1.60615 -1.4299 -0.816759 -0.576836 -0.0128116 + -1.00949 1.57435 -1.40242 -0.72558 -0.687312 0.0336929 + -1.00394 1.56712 -1.43049 -0.480069 -0.87658 -0.0337773 + -1.16252 1.70413 -1.742 -0.944069 -0.305172 0.124916 + -1.1428 1.64929 -1.72542 -0.853456 -0.511329 0.100777 + -1.09371 1.62534 -1.52933 -0.734295 -0.600879 0.315842 + -1.05132 1.61087 -1.49608 -0.25206 -0.956804 -0.144884 + -0.958178 1.58084 -1.55326 -0.318905 -0.928741 -0.189051 + -1.13874 1.64637 -1.84257 -0.734216 -0.678743 -0.0152977 + -1.10131 1.61933 -1.80392 -0.427943 -0.902582 -0.0470206 + -1.11409 1.62372 -1.75273 -0.461266 -0.886452 0.037892 + -1.15152 1.65076 -1.79137 -0.574764 -0.817688 -0.032139 + -1.13426 1.63956 -1.72157 -0.589242 -0.802918 0.0900953 + -1.1511 1.65248 -1.76974 -0.722256 -0.688154 0.069209 + -1.13384 1.64128 -1.69995 -0.387328 -0.920801 0.0458632 + -1.05968 1.60678 -1.84059 -0.360312 -0.931784 -0.0441978 + -1.00982 1.58762 -1.7782 -0.172767 -0.983746 -0.0489417 + -1.05145 1.60017 -1.74154 -0.306909 -0.949764 0.0612722 + -1.07246 1.61012 -1.71817 -0.354464 -0.922949 0.150067 + -1.09263 1.62597 -1.68702 -0.359884 -0.924163 0.128086 + -1.12108 1.64027 -1.948 -0.409749 -0.910838 -0.0498061 + -1.04635 1.60183 -1.86122 -0.390813 -0.919916 -0.0319293 + -1.04089 1.60615 -1.4299 0.101406 0.631667 0.768579 + -0.980616 1.61008 -1.44111 -0.759623 0.365778 0.537754 + -0.981012 1.60939 -1.42411 -0.943301 0.0838024 -0.321186 + -0.999654 1.61778 -1.41144 -0.58114 -0.451522 -0.677056 + -1.00949 1.57435 -1.40242 0.0864199 0.698891 0.709988 + -1.06695 1.60474 -1.35485 -0.911111 0.180789 -0.370394 + -1.07344 1.61946 -1.31076 -0.94261 0.333636 -0.0131445 + -1.08036 1.67959 -1.33931 -0.953034 -0.0079723 0.30276 + -1.09514 1.77971 -1.37112 -0.952395 -0.141753 0.269905 + -1.0847 1.60428 -1.30646 0.344914 0.873386 0.343847 + -1.05967 1.62708 -1.22854 -0.517706 0.616087 0.593648 + -1.05056 1.6794 -1.29078 -0.623353 0.434418 0.650163 + -1.05747 1.73953 -1.31933 -0.608519 -0.141346 0.78085 + -1.05982 1.83094 -1.29605 -0.863655 -0.0959455 0.494869 + -1.07093 1.61181 -1.2243 -0.555215 0.698731 0.451122 + -1.04195 1.61112 -1.2181 0.0177145 -0.558759 0.829141 + -1.03127 1.62727 -1.22128 0.294438 0.350709 0.888993 + -1.02216 1.67959 -1.28351 -0.163998 0.766711 0.620693 + -1.09388 1.61566 -1.27697 0.931842 -0.292028 -0.215386 + -1.07612 1.61612 -1.32537 0.630763 -0.740881 0.230724 + -1.0649 1.61489 -1.27083 -0.0609777 -0.997269 -0.0416578 + -1.07093 1.61181 -1.2243 -0.0100838 -0.997679 -0.0673415 + -0.970943 1.60308 -1.27899 0.24613 -0.83141 0.498173 + -0.960261 1.61924 -1.28217 0.0509955 -0.433233 0.899838 + -1.02216 1.67959 -1.28351 0.562905 0.590162 0.578659 + -1.06695 1.60474 -1.35485 0.715576 -0.465775 0.52058 + -1.06309 1.61663 -1.34844 0.250124 -0.915138 0.316164 + -1.05514 1.61691 -1.31914 -0.152138 -0.986159 0.0659096 + -1.06817 1.61632 -1.29611 0.151025 -0.985457 -0.0778796 + -0.974216 1.60452 -1.30428 -0.15388 -0.967894 0.198749 + -0.999654 1.61778 -1.41144 0.606177 -0.521017 0.600908 + -1.02216 1.67959 -1.28351 -0.230206 0.395678 0.889069 + -1.03906 1.60437 -1.33602 -0.423485 -0.860589 0.282926 + -0.958142 1.59198 -1.32116 -0.0682836 -0.826814 0.558315 + -1.04444 1.60832 -1.36106 -0.674257 -0.633505 -0.379538 + -1.00451 1.56971 -1.36038 -0.38392 -0.868722 0.312933 + -0.962374 1.55825 -1.37734 -0.0735577 -0.961427 0.265043 + -1.00989 1.57366 -1.38542 -0.7333 -0.633382 -0.247181 + -0.962586 1.55538 -1.43136 -0.177867 -0.982673 -0.052131 + -0.870008 1.5521 -1.46128 -0.103584 -0.994415 -0.020232 + -0.834993 1.54703 -1.48831 -0.0902 -0.99277 0.0791909 + -1.00949 1.57435 -1.40242 -0.773667 0.633547 0.00764688 + -1.00949 1.57435 -1.40242 -0.365035 -0.930807 0.0186478 + -0.91682 1.56909 -1.55411 -0.231713 -0.95774 -0.170419 + -0.881805 1.56411 -1.58109 -0.266134 -0.960008 -0.0869348 + -0.822492 1.53543 -1.53941 -0.1957 -0.977601 0.0774421 + -0.776871 1.53666 -1.55074 0.326105 -0.918971 0.221692 + -0.854296 1.57473 -1.65427 -0.126971 -0.986502 -0.103406 + -0.853425 1.57096 -1.63175 -0.183366 -0.937702 -0.295113 + -0.868117 1.5639 -1.61192 -0.556573 -0.663322 -0.500231 + -0.808803 1.53514 -1.5703 -0.14933 -0.976427 -0.155857 + -0.766598 1.5343 -1.58024 0.238431 -0.971158 0.00170524 + -0.97416 1.59288 -1.59131 -0.252404 -0.962905 -0.0954239 + -0.984773 1.59709 -1.6334 -0.217725 -0.976008 0.00221638 + -0.983652 1.59513 -1.65601 -0.23537 -0.962867 0.132239 + -0.962637 1.58526 -1.67932 -0.159118 -0.978441 0.131661 + -0.90641 1.58098 -1.68711 -0.0566384 -0.997395 -0.0446586 + -0.862303 1.57804 -1.67641 -0.0813725 -0.990691 -0.109134 + -0.768767 1.56808 -1.72116 -0.0529709 -0.996773 -0.060315 + -0.751176 1.56748 -1.67232 -0.0502469 -0.994098 -0.0961447 + -0.750306 1.56371 -1.64979 -0.234412 -0.853581 -0.465242 + -1.06806 1.61523 -1.58262 -0.280695 -0.959771 -0.00704812 + -1.07867 1.61952 -1.62466 -0.260978 -0.963437 -0.0606632 + -1.09376 1.62793 -1.66441 -0.262901 -0.963972 -0.0405197 + -1.11045 1.62969 -1.61588 -0.571358 -0.81851 0.0599255 + -1.11876 1.63288 -1.66019 -0.474541 -0.880086 -0.0161062 + -0.95359 1.58342 -1.78594 -0.0391885 -0.990612 -0.130963 + -0.827228 1.58351 -1.77167 -0.0109673 -0.98491 -0.172719 + -0.783121 1.58057 -1.76098 -0.174831 -0.955985 -0.235641 + -0.776774 1.5714 -1.74331 -0.194397 -0.953847 -0.228879 + -0.962247 1.59901 -1.84773 0.0180731 -0.944338 -0.32848 + -0.835885 1.59909 -1.83347 0.0936741 -0.928146 -0.360237 + -0.782991 1.61007 -1.84089 0.0279097 -0.867559 -0.49655 + -0.729379 1.60414 -1.84242 -0.230313 -0.788832 -0.569824 + -0.740212 1.58506 -1.80657 -0.219807 -0.880026 -0.420997 + -1.01211 1.60125 -1.8584 0.0253295 -0.951035 -0.308043 + -0.940837 1.64332 -1.93428 0.0752452 -0.864885 -0.496299 + -0.887944 1.6543 -1.9417 0.134328 -0.844154 -0.518999 + -0.750584 1.64268 -1.87757 0.0117227 -0.799987 -0.599903 + -1.04635 1.60183 -1.86122 0.00874517 -0.947906 -0.318429 + -1.03521 1.60812 -1.87612 0.0296281 -0.902393 -0.429895 + -0.990703 1.64564 -1.9449 0.0524718 -0.871027 -0.488424 + -0.891333 1.6773 -1.97893 0.153092 -0.871262 -0.466332 + -0.753973 1.66567 -1.91479 0.0224135 -0.87181 -0.489332 + -0.707074 1.6674 -1.92818 -0.566941 -0.767826 -0.298363 + -0.692433 1.63726 -1.94318 -0.910186 -0.408722 -0.0671495 + -1.01425 1.66841 -1.98473 0.0153449 -0.852979 -0.52172 + -1.01888 1.6804 -2.0049 0.0210473 -0.855876 -0.516753 + -1.02739 1.69411 -2.02766 -0.0805906 -0.92199 -0.378735 + -1.01531 1.69599 -2.04791 -0.265431 -0.96072 -0.0810168 + -0.985795 1.68354 -2.06893 -0.213297 -0.97662 0.0267923 + -0.937936 1.68407 -2.04925 0.176096 -0.979275 -0.100049 + -0.906403 1.69126 -2.01231 0.475863 -0.795416 -0.375323 + -0.796615 1.70206 -1.98982 0.055276 -0.895607 -0.441399 + -1.08214 1.67944 -1.99584 0.0674367 -0.855493 -0.513404 + -1.10601 1.7037 -2.03866 0.112258 -0.830651 -0.545359 + -1.11452 1.7175 -2.06136 0.160372 -0.807428 -0.567751 + -1.11534 1.73461 -2.08659 -0.0194852 -0.90383 -0.427449 + -1.10326 1.7364 -2.1069 -0.313409 -0.931672 -0.183744 + -1.14514 1.73694 -2.10343 0.788842 -0.485393 -0.376992 + -1.14596 1.75405 -2.12866 0.537945 -0.790808 -0.291955 + -1.06691 1.72479 -2.14278 -0.420761 -0.901761 -0.0989347 + -1.03739 1.71233 -2.1638 -0.453159 -0.888195 -0.0758787 + -1.14801 1.74733 -2.15642 0.998327 0.0327699 -0.0476409 + -1.05909 1.73242 -2.2304 -0.48969 -0.858861 -0.150206 + -0.985578 1.68671 -2.19063 -0.186364 -0.973788 -0.1304 + -0.937719 1.68725 -2.17096 0.199297 -0.973203 -0.114701 + -0.845878 1.71426 -2.08535 0.311308 -0.944806 -0.102125 + -0.814345 1.72146 -2.04842 0.197049 -0.971279 -0.133371 + -0.919204 1.70335 -2.22546 0.319808 -0.906084 -0.277009 + -0.827363 1.73046 -2.13981 0.418124 -0.89073 -0.178248 + -0.780045 1.75154 -2.13453 0.273036 -0.904565 -0.327434 + -0.750666 1.75461 -2.12943 -0.109871 -0.895508 -0.431271 + -0.765201 1.73346 -2.0804 -0.0347549 -0.962335 -0.269637 + -0.816523 1.76973 -2.26183 0.376997 -0.908085 -0.182357 + -0.729958 1.78796 -2.20421 0.253118 -0.927286 -0.275812 + -0.700579 1.79093 -2.19915 -0.743828 -0.298767 -0.597879 + -0.804428 1.78088 -2.30394 0.335722 -0.941955 -0.00349396 + -0.717864 1.79902 -2.24636 0.371396 -0.923487 -0.0961088 + -0.693261 1.81091 -2.24576 -0.233866 -0.954053 -0.187325 + -0.685856 1.80393 -2.25027 -0.984765 -0.124044 -0.121863 + -0.705589 1.77883 -2.23698 -0.781478 0.616823 -0.093918 + -0.750666 1.75461 -2.12943 -0.696716 0.704855 -0.133289 + -0.731575 1.796 -2.30292 0.322661 -0.946137 0.0267417 + -0.706973 1.80789 -2.30233 -0.477063 -0.826336 0.299298 + -0.709495 1.8001 -2.31164 -0.0983555 -0.908419 0.406326 + -0.689605 1.80637 -2.26988 -0.208619 -0.976405 0.0557856 + -0.685589 1.8085 -2.33898 -0.349439 -0.935665 -0.0492316 + -0.689338 1.81093 -2.35859 0.66566 -0.72292 -0.185157 + -0.736939 1.79227 -2.32506 0.100539 -0.889494 0.445749 + -0.739461 1.78448 -2.33438 0.20031 -0.942322 0.268152 + -0.705839 1.79564 -2.33571 0.454571 -0.89069 0.00599458 + -0.741214 1.78393 -2.34563 0.217153 -0.971784 -0.0920932 + -0.707916 1.79867 -2.37156 0.466936 -0.869884 -0.158975 + -0.676915 1.83214 -2.40552 0.77628 -0.628439 -0.0495339 + -0.678992 1.83517 -2.44137 0.699189 -0.706441 -0.109891 + -0.625186 1.8998 -2.49551 0.836443 -0.481083 0.26253 + -0.645874 1.8849 -2.45391 0.899239 -0.353088 0.258259 + -0.658297 1.8637 -2.40698 0.896016 -0.436693 0.0803439 + -0.67171 1.85164 -2.3627 0.933788 -0.343174 0.101344 + -0.685589 1.8085 -2.33898 0.886894 -0.406265 -0.219929 + -0.601053 1.95609 -2.44482 0.761608 -0.602336 0.239047 + -0.623155 1.94846 -2.40779 0.806442 -0.557092 0.198242 + -0.636569 1.9364 -2.36351 0.851163 -0.477634 0.217687 + -0.580364 1.971 -2.48643 0.774992 -0.596831 0.207798 + -0.534165 2.03217 -2.44998 0.710168 -0.694223 0.117115 + -0.539496 2.03274 -2.40997 0.665053 -0.728829 0.162829 + -0.561598 2.0251 -2.37295 0.643269 -0.738155 0.203301 + -0.600397 1.91406 -2.54321 0.837195 -0.502207 0.216549 + -0.555263 1.99129 -2.51618 0.778008 -0.605523 0.167467 + -0.509064 2.05246 -2.47973 0.713234 -0.691458 0.114813 + -0.453323 2.10837 -2.38597 0.689644 -0.720919 0.068306 + -0.458653 2.10904 -2.34592 0.599352 -0.800315 0.0164888 + -0.643531 1.86852 -2.48694 0.854673 -0.416059 0.31053 + -0.618742 1.88277 -2.53462 0.860034 -0.428077 0.277654 + -0.605994 1.89588 -2.56593 0.853302 -0.506708 0.122973 + -0.580252 1.93347 -2.58302 0.835735 -0.54771 0.0394952 + -0.661911 1.8537 -2.45587 0.855295 -0.417418 0.306975 + -0.690866 1.79182 -2.28809 -0.917138 0.398523 -0.00612391 + -0.685589 1.8085 -2.33898 -0.93944 0.342393 0.0148036 + -1.15072 1.77302 -2.19552 -0.347946 -0.908119 -0.232924 + -0.702535 1.66783 -1.99233 -0.883527 -0.463758 -0.0656402 + -0.716526 1.69944 -2.03547 0.0796162 -0.864748 -0.495855 + -0.749716 1.7037 -2.00326 -0.218345 -0.913923 -0.342155 + -0.762541 1.72793 -2.05523 -0.160226 -0.946201 -0.281124 + -0.729351 1.72366 -2.08744 0.19206 -0.878248 -0.437942 + -0.680883 1.77302 -2.07412 0.766567 -0.468225 -0.439476 + -0.702535 1.66783 -1.99233 0.656057 -0.561386 -0.504416 + -0.811685 1.71602 -2.0232 0.119001 -0.934931 -0.334279 + -0.734341 1.74788 -2.13459 0.138231 -0.865202 -0.481993 + -0.695709 1.8117 -2.16432 0.854791 -0.478307 -0.201384 + -0.690719 1.78757 -2.11712 0.789548 -0.503589 -0.35073 + -0.719806 1.76903 -2.18362 0.677607 -0.735353 0.0102454 + -0.698701 1.8166 -2.21121 0.923499 -0.37738 0.0688019 + -0.65072 1.91757 -2.18509 0.869658 -0.479051 -0.119186 + -0.637963 1.92843 -2.1431 0.841574 -0.48477 -0.238224 + -0.628127 1.91379 -2.10014 0.852506 -0.428285 -0.299677 + -0.705589 1.77883 -2.23698 0.927225 -0.331085 0.175035 + -0.684484 1.8263 -2.26462 0.93937 -0.324291 0.111438 + -0.653712 1.92238 -2.23203 0.881598 -0.461787 -0.0976589 + -0.589979 2.01155 -2.22668 0.732055 -0.674682 -0.0943325 + -0.588229 2.00932 -2.18261 0.757157 -0.649671 -0.0681215 + -0.575472 2.02009 -2.14067 0.732037 -0.674041 -0.0989495 + -0.676987 1.83497 -2.31182 0.960058 -0.274072 0.0563378 + -0.658385 1.92633 -2.27507 0.913671 -0.405278 -0.0308882 + -0.594651 2.01542 -2.26977 0.701129 -0.709864 -0.0671595 + -0.690866 1.79182 -2.28809 0.961302 -0.21348 0.174139 + -0.650887 1.9349 -2.32232 0.889135 -0.429839 0.15709 + -0.605655 2.0055 -2.31019 0.727177 -0.679353 0.0984513 + -0.499475 2.08507 -2.24461 0.519983 -0.85397 0.0187846 + -0.685589 1.8085 -2.33898 0.951615 -0.307286 -0.00203496 + -0.591336 2.007 -2.35139 0.682898 -0.660177 0.312756 + -0.510478 2.07515 -2.28504 0.570976 -0.817267 0.077858 + -0.48074 2.09326 -2.3066 0.555463 -0.8312 0.0238116 + -0.417248 2.12441 -2.19516 0.405727 -0.909644 -0.0890718 + -0.508241 2.08118 -2.19707 0.553133 -0.83281 -0.0217055 + -0.38386 2.15237 -2.27137 0.475121 -0.873301 -0.107726 + -0.405947 2.13659 -2.23205 0.470782 -0.87426 -0.118463 + -0.33785 2.1411 -2.11065 0.374059 -0.877031 -0.30149 + -0.338236 2.127 -2.07943 0.277855 -0.912856 -0.29915 + -0.426015 2.12053 -2.14762 0.3304 -0.936474 -0.117699 + -0.426257 2.13531 -2.39723 0.677107 -0.732586 -0.0696004 + -0.364172 2.16698 -2.30229 0.546318 -0.820226 -0.169608 + -0.315156 2.1684 -2.17734 0.375775 -0.891915 -0.251557 + -0.326549 2.15319 -2.1476 0.351074 -0.903235 -0.246807 + -0.481998 2.07939 -2.49098 0.734128 -0.678113 0.0349072 + -0.407235 2.16024 -2.42981 0.587936 -0.808522 -0.0249545 + -0.34515 2.19191 -2.33487 0.37602 -0.920074 -0.109878 + -0.295469 2.1831 -2.2082 0.186945 -0.969252 -0.160008 + -0.535117 2.0107 -2.556 0.793361 -0.603424 0.0803571 + -0.465729 2.09545 -2.52819 0.729711 -0.68172 0.052724 + -0.460517 2.0966 -2.57438 0.675915 -0.725058 0.13202 + -0.402023 2.16139 -2.476 0.480139 -0.866346 0.137519 + -0.36698 2.17379 -2.47308 0.181389 -0.959584 0.215165 + -0.518848 2.02675 -2.59321 0.777784 -0.623559 0.0789044 + -0.501167 2.04318 -2.63445 0.722833 -0.674191 0.151589 + -0.440632 2.10339 -2.61014 0.43435 -0.824677 0.362282 + -0.405589 2.11579 -2.60722 0.267636 -0.902011 0.338745 + -0.592266 1.91999 -2.61288 0.809897 -0.583216 -0.0626508 + -0.398513 3.98461 -2.03812 -0.535311 0.490147 -0.687894 + -0.30799 4.16202 -1.9874 -0.790491 0.519779 -0.323965 + -0.276587 4.16497 -2.0711 -0.739835 0.556714 -0.377773 + -0.282869 4.08583 -2.16703 -0.712881 0.566542 -0.413317 + -0.326369 4.14841 -1.97002 -0.611097 0.596423 -0.520423 + -0.250851 4.29974 -1.89373 -0.693572 0.66508 -0.276816 + -0.261313 4.23416 -1.99374 -0.730399 0.592907 -0.339084 + -0.21748 4.22262 -2.07876 -0.574808 0.683907 -0.449296 + -0.355553 4.12096 -1.97949 -0.460189 0.563263 -0.686266 + -0.292218 4.25662 -1.87365 -0.722555 0.559325 -0.406287 + -0.26923 4.28621 -1.8763 -0.723482 0.579816 -0.374683 + -0.205029 4.34236 -1.89375 -0.550503 0.718014 -0.425915 + -0.215492 4.27678 -1.99376 -0.549715 0.717863 -0.427183 + -0.401211 4.07733 -1.95971 -0.733835 0.549341 -0.399638 + -0.337876 4.21298 -1.85386 -0.72149 0.581723 -0.375568 + -0.285288 4.38676 -1.73806 -0.698805 0.489042 -0.522025 + -0.237996 4.41396 -1.75877 -0.641133 0.550732 -0.534455 + -0.501226 3.80578 -2.03256 0.573652 -0.352441 -0.739398 + -0.719851 2.09289 -0.351357 -0.980183 -0.11691 -0.159915 + -0.733426 2.16917 -0.325479 -0.422968 -0.872168 0.245806 + -0.690305 2.10063 -0.539561 -0.985224 -0.00356063 -0.171232 + -0.665292 2.18573 -0.653752 -0.867224 -0.469909 0.164646 + -0.718769 2.16766 -0.736671 -0.248566 -0.784045 0.56876 + -0.680219 2.19795 -0.522923 -0.979217 -0.152937 -0.133212 + -0.708907 2.22741 -0.610553 -0.547199 -0.797935 0.25273 + -0.762384 2.20935 -0.693472 0.197273 -0.844076 0.498618 + -0.797269 2.10626 -0.78912 0.578752 -0.634939 0.51176 + -0.775359 1.95469 -0.938779 0.588975 -0.498634 0.635982 + -0.77872 2.17722 -0.248824 -0.694277 -0.696737 -0.180378 + -0.796669 2.22433 -0.213417 -0.94676 -0.136116 -0.291749 + -0.698169 2.24505 -0.487516 -0.871912 -0.48212 -0.0856091 + -0.754293 2.27651 -0.547195 0.0832475 -0.964228 0.251662 + -0.830699 2.16795 -0.637373 0.744345 -0.603115 0.286709 + -0.865584 2.06487 -0.733021 0.828694 -0.431946 0.355933 + -0.829931 2.21614 -0.096232 -0.996534 -0.0432626 -0.071053 + -0.743554 2.29407 -0.424208 -0.314497 -0.942117 -0.116222 + -0.776816 2.28588 -0.307023 0.582122 -0.808527 0.0861305 + -0.793376 2.25035 -0.483283 0.723206 -0.681119 0.114231 + -0.806663 2.18697 -0.024113 -0.319221 -0.938301 -0.133004 + -0.833448 2.18638 0.014919 -0.787728 -0.608449 -0.096299 + -0.830529 2.21353 -0.017905 -0.998984 -0.0415037 -0.0175808 + -0.776816 2.28588 -0.307023 -0.968634 -0.196423 -0.152207 + -0.761369 2.17901 -0.100718 -0.104107 -0.994115 0.0299452 + -0.764288 2.1663 0.096893 0.0609571 -0.994559 -0.0844741 + -0.791073 2.16562 0.135874 -0.0875311 -0.989017 -0.119097 + -0.834045 2.18376 0.093254 -0.844415 0.116963 0.522764 + -0.729833 2.18652 0.061879 0.227542 -0.970325 -0.0818157 + -0.690305 2.10063 -0.539561 0.45234 -0.818888 0.353285 + -0.719851 2.09289 -0.351357 -0.980593 -0.190385 0.0468075 + -0.639633 2.19037 0.066806 -0.0936961 -0.995599 -0.0018826 + -0.649184 2.18275 0.132395 0.050891 -0.975688 -0.213172 + -0.683639 2.16254 0.167409 -0.136421 -0.956444 0.258077 + -0.67044 2.19247 0.209165 0.33403 -0.919375 0.207781 + -0.757773 2.14908 0.186115 0.485313 -0.695055 -0.530443 + -0.69311 2.17527 0.216759 0.527183 -0.447327 -0.722479 + -0.544957 2.17091 0.038111 0.107141 -0.970295 -0.216904 + -0.554508 2.1632 0.10366 0.00154227 -0.998902 0.0468303 + -0.556535 2.1815 0.171369 0.115546 -0.918586 0.377952 + -0.543336 2.21135 0.213068 0.0632389 -0.718486 0.692661 + -0.450826 2.24422 -0.055273 0.222567 -0.824429 -0.520366 + -0.452919 2.19833 0.021021 0.28435 -0.89334 -0.347977 + -0.452089 2.18241 0.091793 0.274449 -0.961493 -0.0144336 + -0.454116 2.2007 0.159503 0.179526 -0.951409 0.250184 + -0.35091 2.27944 -0.059467 0.124402 -0.87549 -0.46695 + -0.346556 2.25176 0.008467 0.169659 -0.931193 -0.322639 + -0.345726 2.23594 0.079281 0.245021 -0.955129 -0.166414 + -0.351772 2.22323 0.157091 0.26965 -0.958692 0.0905479 + -0.237927 2.33918 -0.172751 -0.370569 -0.680571 -0.632061 + -0.248223 2.30299 -0.114056 -0.209345 -0.868011 -0.450256 + -0.24387 2.27531 -0.046122 -0.364768 -0.565263 -0.739879 + -0.211494 2.26453 -0.064842 -0.471636 -0.774043 -0.422395 + -0.247164 2.25438 0.014126 -0.0198724 -0.992017 -0.124527 + -0.25074 2.40196 -0.217091 -0.402341 -0.603263 -0.688618 + -0.086589 2.32683 -0.287961 -0.549091 -0.661287 -0.511075 + -0.096886 2.29063 -0.229258 -0.489414 -0.719265 -0.493084 + -0.06451 2.27976 -0.248027 -0.42926 -0.740469 -0.517148 + -0.125703 2.38312 -0.315846 -0.585852 -0.625718 -0.515029 + -0.048528 2.35557 -0.371727 -0.710127 -0.64505 -0.282189 + -0.009414 2.2992 -0.343893 -0.586879 -0.685003 -0.431676 + -0.142339 2.44172 -0.358958 -0.649364 -0.575581 -0.497024 + -0.061399 2.38566 -0.424453 -0.783583 -0.558522 -0.272122 + -0.010689 2.2915 -0.381352 -0.456529 -0.844607 -0.279678 + -0.010689 2.2749 -0.3052 -0.635906 -0.734806 -0.235975 + -0.162727 2.49951 -0.404448 -0.677746 -0.547546 -0.490769 + -0.081787 2.44345 -0.469944 -0.817378 -0.506353 -0.274773 + -0.02356 2.3215 -0.43412 -0.580548 -0.800358 -0.149635 + 0.02356 2.3215 -0.43412 0.564381 -0.814872 -0.132127 + 0.010678 2.29141 -0.381402 0.488746 -0.844055 -0.220678 + -0.167976 2.5567 -0.450297 -0.717515 -0.45609 -0.526455 + -0.089769 2.48429 -0.520287 -0.85363 -0.409796 -0.321533 + -0.02356 2.31923 -0.513395 -0.481353 -0.837175 -0.259687 + 0.02356 2.31923 -0.513395 0.472986 -0.838855 -0.269458 + -0.180935 2.62069 -0.484529 -0.69222 -0.512026 -0.508587 + -0.102728 2.54819 -0.55457 -0.840253 -0.434519 -0.324297 + -0.031542 2.36016 -0.563687 -0.5556 -0.662305 -0.502654 + 0.031537 2.36008 -0.563737 0.554929 -0.662304 -0.503396 + -0.181846 2.66385 -0.532888 -0.725622 -0.652622 -0.218076 + -0.100078 2.57141 -0.606185 -0.823751 -0.557597 -0.102567 + -0.031542 2.40605 -0.616164 -0.56558 -0.684565 -0.459881 + 0.031537 2.40605 -0.616164 0.566461 -0.684378 -0.459075 + -0.154947 2.62717 -0.609756 -0.800089 -0.579183 -0.156221 + -0.073179 2.53464 -0.683094 -0.88261 -0.41589 -0.219168 + -0.028892 2.42927 -0.667781 -0.542946 -0.77979 -0.31167 + 0.02889 2.42927 -0.667781 0.543045 -0.779693 -0.311739 + -0.211292 2.9129 -0.796651 -0.738777 -0.513833 -0.436101 + -0.108198 2.80586 -0.905062 -0.843288 -0.391336 -0.368404 + -0.059065 2.74121 -0.955474 -0.878553 -0.347436 -0.327769 + -0.028892 2.44778 -0.725853 -0.752265 -0.65779 -0.0375527 + 0.02889 2.44778 -0.725853 0.762213 -0.647315 0.00380121 + -0.196517 3.1695 -1.0593 -0.560707 -0.505592 -0.655732 + -0.06391 3.39357 -1.63559 -0.849924 -0.334386 -0.407204 + -0.014777 3.32891 -1.68601 -0.390802 -0.120575 -0.912544 + -0.014777 2.65435 -0.998232 -0.936183 -0.257571 -0.239202 + 0.016514 2.25648 -0.879903 -0.982725 -0.119354 -0.14144 + -0.214432 3.22701 -1.07951 -0.116923 -0.655085 -0.746454 + -0.049135 3.83237 -1.95563 -0.465604 -0.380007 -0.799254 + -0.049135 3.65017 -1.89825 -0.594469 -0.345198 -0.726254 + 0.014767 3.32891 -1.68601 0.348821 -0.516646 -0.781921 + -0.014777 2.65435 -0.998232 0 -0.46053 -0.887644 + -0.120811 3.88058 -1.97892 0.38784 -0.755631 -0.527827 + -0.067051 3.88988 -1.97584 -0.0901157 -0.735746 -0.671236 + 0.049134 3.83237 -1.95562 0.497791 -0.480955 -0.721725 + 0.049134 3.65017 -1.89824 0.594319 -0.342208 -0.72779 + -0.084071 4.11489 -2.27757 0.139527 -0.330621 -0.933393 + -0.030311 4.12419 -2.27447 0.0489921 -0.443205 -0.89508 + 0.030311 4.1242 -2.27448 -0.0201643 -0.424243 -0.905324 + 0.067051 3.88988 -1.97584 0.388566 -0.705807 -0.592329 + 0.196516 3.1695 -1.0593 0.560764 -0.505454 -0.65579 + -0.144946 4.07823 -2.28167 0.276653 -0.300278 -0.912851 + -0.0953 4.14486 -2.27287 -0.104897 0.290836 -0.951005 + -0.030311 4.15293 -2.27666 -0.0222827 0.197133 -0.980124 + 0.030311 4.15293 -2.27666 0.0390194 0.181315 -0.982651 + -0.156175 4.10828 -2.27693 -0.175556 0.314576 -0.932857 + -0.096826 4.17112 -2.26095 -0.224933 0.570322 -0.790024 + -0.031836 4.17919 -2.26473 -0.0592718 0.561371 -0.825439 + 0.031829 4.17919 -2.26474 0.0604002 0.562218 -0.824781 + 0.095301 4.14486 -2.27287 0.0884889 0.282878 -0.955065 + -0.165785 4.13128 -2.26075 -0.413641 0.56131 -0.716821 + -0.094081 4.1974 -2.23568 -0.268107 0.738435 -0.618735 + -0.031836 4.20574 -2.23932 -0.0690251 0.755118 -0.651945 + 0.031829 4.20566 -2.23938 0.0701433 0.754455 -0.652593 + -0.163041 4.15757 -2.23549 -0.498186 0.665898 -0.555329 + -0.155107 4.20838 -2.17409 -0.489497 0.72553 -0.483735 + -0.090118 4.23945 -2.17751 -0.274891 0.810832 -0.516707 + -0.027872 4.2477 -2.1812 -0.0695179 0.832476 -0.549683 + 0.027872 4.2477 -2.1812 0.0698179 0.832529 -0.549564 + -0.231697 4.09259 -2.23614 -0.633747 0.603666 -0.483686 + -0.223763 4.1434 -2.17474 -0.629403 0.628153 -0.457467 + -0.142402 4.26511 -2.08456 -0.427982 0.781915 -0.453255 + -0.077413 4.2961 -2.08803 -0.270787 0.838045 -0.473661 + 0.016514 2.25648 -0.879903 0 -0.627193 0.778864 + -0.140414 4.31927 -1.99955 -0.381968 0.809692 -0.445532 + -0.077222 4.33603 -2.01459 -0.240827 0.869099 -0.432053 + -0.027872 4.30445 -2.0877 -0.070864 0.86523 -0.496341 + 0.027872 4.30445 -2.0877 0.0711782 0.865085 -0.49655 + -0.149779 4.33989 -1.94548 -0.343558 0.828861 -0.44154 + -0.086587 4.35656 -1.96056 -0.253029 0.849795 -0.462412 + -0.027682 4.3443 -2.01431 -0.0764981 0.897563 -0.434198 + 0.027676 4.34431 -2.01432 0.0734926 0.896408 -0.437094 + -0.191334 4.41115 -1.80271 -0.408517 0.694829 -0.591884 + -0.136083 4.4086 -1.85448 -0.373955 0.758172 -0.534166 + -0.090758 4.42195 -1.861 -0.243877 0.790964 -0.561159 + -0.027682 4.36549 -1.96582 -0.0864853 0.875305 -0.475774 + 0.027676 4.3655 -1.96584 0.0836663 0.876806 -0.473509 + -0.215009 4.44355 -1.76142 -0.516817 0.680783 -0.519071 + -0.135694 4.54426 -1.67186 -0.238937 0.724962 -0.646018 + -0.090369 4.55762 -1.67839 -0.247756 0.783397 -0.570005 + -0.031852 4.43088 -1.86627 -0.0892357 0.813982 -0.573994 + 0.031855 4.43088 -1.86627 0.0878237 0.813034 -0.575554 + -0.159369 4.57666 -1.63058 0.0128266 0.522972 -0.852254 + -0.144635 4.68977 -1.56729 0.330427 0.354524 -0.874717 + -0.088188 4.69572 -1.55799 0.0258261 0.351729 -0.935746 + -0.078099 4.62054 -1.59598 0.0842606 0.606381 -0.790698 + -0.031852 4.51372 -1.75675 -0.104115 0.793682 -0.599357 + -0.209419 4.58301 -1.66818 0.0254648 0.475088 -0.87957 + -0.194686 4.69612 -1.60488 0.10529 0.409634 -0.906153 + -0.147078 4.80597 -1.54415 0.121547 0.297353 -0.946999 + -0.090631 4.812 -1.5348 0.0247308 0.225096 -0.974023 + -0.256711 4.55582 -1.64747 -0.70818 0.409758 -0.57496 + -0.237951 4.66941 -1.59862 -0.620995 0.363117 -0.69463 + -0.203348 4.79753 -1.55013 -0.131802 0.363286 -0.922308 + -0.310484 4.52313 -1.57026 -0.802408 0.376124 -0.463327 + -0.291724 4.63672 -1.52141 -0.748005 0.226768 -0.62375 + -0.246614 4.77073 -1.54392 -0.517528 0.212484 -0.828864 + -0.31653 4.85085 -1.50488 -0.300161 0.0195752 -0.953688 + -0.231399 4.89724 -1.51704 -0.0665514 0.275791 -0.958911 + -0.336983 4.39134 -1.6486 -0.765878 0.441601 -0.467353 + -0.388448 4.37418 -1.57967 -0.742577 0.461037 -0.485823 + -0.361948 4.50597 -1.50133 -0.717274 0.342467 -0.606823 + -0.328191 4.64972 -1.48851 -0.549166 0.0699804 -0.832778 + -0.283081 4.78373 -1.51102 -0.575292 -0.107422 -0.810864 + -0.31438 4.29125 -1.78103 -0.86387 0.436561 -0.251282 + -0.366075 4.29584 -1.69158 -0.73677 0.496339 -0.459149 + -0.417436 4.27618 -1.63193 -0.731863 0.493108 -0.470341 + -0.447268 4.41163 -1.46274 -0.705631 0.34455 -0.619169 + -0.382639 4.23564 -1.74191 -0.710522 0.567209 -0.416452 + -0.434 4.21608 -1.68223 -0.776324 0.51782 -0.359422 + -0.484016 4.13257 -1.67439 -0.891224 0.375442 -0.254486 + -0.476256 4.31372 -1.51495 -0.859402 0.39074 -0.329773 + -0.406135 4.15745 -1.81468 -0.72814 0.576172 -0.371265 + -0.463537 4.10564 -1.77914 -0.785553 0.522746 -0.331123 + -0.513553 4.02222 -1.77126 -0.876295 0.4747 -0.0822618 + -0.534289 3.94934 -1.71543 -0.909097 0.267691 0.319193 + -0.508511 4.08163 -1.62556 -0.994447 0.0968672 -0.0411247 + -0.461047 4.0245 -1.90301 -0.753345 0.554199 -0.354027 + -0.518448 3.97269 -1.86747 -0.686953 0.644963 -0.33484 + -0.574631 3.9544 -1.82219 -0.746063 0.661437 -0.0767546 + -0.595367 3.88153 -1.76637 -0.744993 0.460924 0.482217 + -0.459077 3.95874 -2.0149 -0.71835 0.447079 -0.533005 + -0.518913 3.90592 -1.95821 -0.654694 0.517844 -0.550647 + -0.581128 3.8813 -1.91798 -0.593882 0.653541 -0.469243 + -0.63731 3.86293 -1.87275 -0.717521 0.660918 -0.219889 + -0.664799 3.81544 -1.7985 -0.745189 0.551675 0.374632 + -0.57649 3.82336 -2.00542 -0.199712 0.443968 -0.873503 + -0.638704 3.79866 -1.96524 -0.571018 0.687658 -0.448404 + -0.705771 3.78952 -1.8924 -0.674436 0.721331 -0.157537 + -0.733259 3.74194 -1.8182 -0.63824 0.657479 0.400462 + -0.620652 3.73389 -2.01265 -0.0117598 0.101754 -0.99474 + -0.705245 3.728 -1.99306 -0.441691 0.630195 -0.638563 + -0.772312 3.71886 -1.92022 -0.594243 0.758329 -0.267978 + -0.834258 3.66848 -1.83855 -0.566494 0.73125 0.379945 + -0.702049 3.68176 -2.02795 -0.0868603 0.26937 -0.959112 + -0.846738 3.62203 -1.9957 -0.435314 0.661417 -0.610761 + -0.910701 3.59059 -1.97905 -0.431854 0.726968 -0.533872 + -0.836274 3.68742 -1.90357 -0.502088 0.861533 -0.0752853 + -0.843542 3.57578 -2.0306 -0.215124 0.570767 -0.792431 + -0.948754 3.51836 -2.04094 -0.304793 0.657604 -0.688955 + -0.969458 3.54005 -2.00651 -0.349924 0.726273 -0.591677 + -0.96066 3.60365 -1.92487 -0.49498 0.849033 -0.184763 + -0.958644 3.58479 -1.8598 -0.478888 0.77011 0.421423 + -0.936293 3.46802 -2.08816 -0.271233 0.618736 -0.737291 + -1.05115 3.46115 -2.05065 -0.260596 0.671883 -0.693299 + -1.07186 3.48275 -2.01626 -0.307229 0.760497 -0.572062 + -1.01942 3.5531 -1.95232 -0.42653 0.804003 -0.414309 + -1.10742 3.52012 -1.86978 -0.317231 0.863952 0.39109 + -0.935497 3.43206 -2.11846 -0.067642 0.560242 -0.825562 + -1.21528 3.4251 -2.03881 -0.132946 0.343208 -0.929803 + -1.15462 3.4633 -1.99157 -0.297732 0.841876 -0.450112 + -1.10218 3.53356 -1.92768 -0.301341 0.938192 -0.170265 + -1.15429 3.37695 -2.03582 -0.298708 -0.215492 -0.929697 + -1.21141 3.39853 -2.0294 -0.114029 -0.2606 -0.958689 + -1.35098 3.38002 -2.02933 -0.0591391 -0.279084 -0.958444 + -1.35475 3.42672 -2.04083 -0.132516 0.383609 -0.913939 + -1.35795 3.44244 -2.01504 -0.114242 0.947434 -0.298861 + -1.21849 3.44081 -2.01302 -0.103024 0.899356 -0.424906 + -1.1188 3.26806 -2.04562 -0.341523 -0.0244298 -0.939556 + -1.28209 3.29816 -2.00954 -0.181955 -0.0719586 -0.98067 + -1.33921 3.31983 -2.00308 -0.0693361 -0.282772 -0.956678 + -1.34711 3.35337 -2.01998 0.010529 -0.386072 -0.922409 + -1.30321 3.226 -2.00016 -0.179517 -0.0636078 -0.981696 + -1.48786 3.25512 -1.9694 -0.125144 -0.239845 -0.962711 + -1.49576 3.28867 -1.9863 -0.131868 -0.287625 -0.948622 + -1.49195 3.33784 -1.99188 -0.265667 -0.144179 -0.953223 + -1.38414 3.14797 -1.98761 -0.127415 -0.00609528 -0.991831 + -1.4767 3.16306 -1.97075 -0.206201 0.0169054 -0.978363 + -1.70089 3.16095 -1.91709 -0.215306 -0.118051 -0.969385 + -1.68929 3.21364 -1.93175 -0.244063 -0.141248 -0.959418 + -1.68549 3.26274 -1.93739 -0.373132 0.133625 -0.918105 + -1.55622 2.89886 -1.96934 -0.187411 0.102336 -0.976936 + -1.68973 3.06898 -1.9184 -0.229259 0.0713814 -0.970745 + -1.8276 3.12336 -1.88178 -0.236696 -0.000425215 -0.971584 + -1.816 3.17597 -1.8965 -0.319094 0.0325694 -0.947163 + -1.81518 3.23462 -1.87768 -0.419443 0.33053 -0.845469 + -1.7707 2.97684 -1.9164 -0.133249 0.200992 -0.970488 + -1.84137 3.0456 -1.89209 -0.156951 0.206904 -0.96569 + -1.90588 3.15745 -1.86043 -0.444964 0.201379 -0.872613 + -1.90506 3.21602 -1.84167 -0.588689 0.37704 -0.715043 + -1.80062 2.79505 -1.96253 -0.133814 0.152216 -0.979247 + -1.8713 2.86373 -1.93829 -0.294856 0.185338 -0.937395 + -1.91965 3.07969 -1.87075 -0.373913 0.193058 -0.907148 + -1.98323 3.03521 -1.84151 -0.656245 0.193747 -0.729249 + -1.75757 2.67228 -1.98008 -0.124107 0.0468761 -0.991161 + -1.90627 2.66502 -1.94612 -0.391631 0.041007 -0.919208 + -1.93488 2.81925 -1.90905 -0.537433 0.129762 -0.833263 + -1.86195 2.54063 -1.95267 -0.284155 -0.0919722 -0.954357 + -1.98576 2.53832 -1.90667 -0.4989 -0.0543889 -0.864951 + -2.03739 2.64602 -1.85741 -0.635439 0.0875217 -0.767175 + -2.066 2.80025 -1.82034 -0.686532 0.126833 -0.715952 + -2.03558 3.02965 -1.78487 -0.723429 0.249492 -0.643743 + -1.82098 2.45495 -1.95305 -0.228883 -0.375661 -0.898049 + -1.94479 2.45264 -1.90706 -0.350374 -0.327981 -0.877307 + -2.05358 2.41321 -1.84278 -0.494072 -0.300003 -0.816021 + -2.1144 2.48689 -1.80179 -0.669233 -0.0502481 -0.741352 + -1.91748 2.39915 -1.88422 -0.207774 -0.650334 -0.730681 + -2.02627 2.35974 -1.81995 -0.176308 -0.659126 -0.731074 + -2.11269 2.29131 -1.74084 -0.260374 -0.68608 -0.679338 + -2.14522 2.32336 -1.74013 -0.58607 -0.341166 -0.734934 + -2.20604 2.39694 -1.69919 -0.702351 -0.10835 -0.703536 + -1.86741 2.36285 -1.84754 -0.0723934 -0.865948 -0.494868 + -1.99787 2.33884 -1.79176 0.0342845 -0.875306 -0.482353 + -2.0843 2.27043 -1.71266 0.357818 -0.920097 -0.159338 + -2.22028 2.2444 -1.62197 -0.315277 -0.83798 -0.44541 + -2.25281 2.27635 -1.62132 -0.622178 -0.432474 -0.652581 + -1.82591 2.34578 -1.80238 0.0589825 -0.99629 -0.0626645 + -1.95637 2.32169 -1.74665 0.180869 -0.983194 -0.0248368 + -2.07981 2.29329 -1.66846 0.498506 -0.787628 0.362124 + -2.19142 2.26339 -1.55927 0.585489 -0.685228 0.433203 + -2.19591 2.24044 -1.60352 0.265559 -0.960946 0.0778554 + -1.62473 2.36295 -1.77832 -0.0650082 -0.893835 0.443659 + -1.79798 2.36518 -1.74398 0.170597 -0.813671 0.55573 + -1.92422 2.34637 -1.7204 0.339186 -0.744728 0.574745 + -2.04766 2.31797 -1.64221 0.368669 -0.738623 0.564374 + -2.09623 2.36604 -1.57067 0.571067 -0.625583 0.531534 + -1.65389 2.43073 -1.67692 -0.124636 -0.739206 0.661847 + -1.78809 2.42361 -1.69979 0.111038 -0.647294 0.754109 + -1.91434 2.40472 -1.67626 0.369514 -0.597183 0.711922 + -1.96291 2.45279 -1.60472 0.453011 -0.483146 0.749234 + -1.55002 2.42859 -1.6506 -0.319291 -0.734046 0.599359 + -1.6553 2.55664 -1.57659 -0.235761 -0.578077 0.781181 + -1.7895 2.54952 -1.59947 0.049477 -0.51376 0.856506 + -1.98412 2.60114 -1.53767 0.425468 -0.355264 0.832325 + -2.19343 2.3614 -1.44902 0.658474 -0.437393 0.612454 + -1.4176 2.48106 -1.51169 -0.572434 -0.533142 0.62296 + -1.53345 2.52886 -1.54308 -0.381702 -0.58713 0.71385 + -1.61261 2.75404 -1.41731 -0.341463 -0.526345 0.778694 + -1.81071 2.69787 -1.53241 -0.0531796 -0.461109 0.885749 + -1.42262 2.64013 -1.379 -0.646269 -0.448759 0.617213 + -1.49076 2.72627 -1.3838 -0.450147 -0.516117 0.728692 + -1.42417 2.85621 -1.25266 -0.456849 -0.454836 0.764469 + -1.6557 2.9089 -1.34153 -0.371355 -0.448269 0.813112 + -1.8538 2.85272 -1.45663 -0.0043441 -0.48191 0.87621 + -1.33952 2.57633 -1.3355 -0.665193 -0.432081 0.608954 + -1.32552 2.6894 -1.25595 -0.644431 -0.334877 0.687435 + -1.35603 2.76998 -1.24792 -0.596201 -0.342642 0.726044 + -1.26461 2.50664 -1.301 -0.751112 -0.319782 0.577556 + -1.25061 2.61971 -1.22144 -0.662114 -0.340955 0.66735 + -1.24715 2.75846 -1.16056 -0.644224 -0.279814 0.711814 + -1.27766 2.83913 -1.15248 -0.656332 -0.213873 0.723524 + -1.26369 2.93221 -1.11991 -0.543691 -0.377198 0.749748 + -1.20022 2.30514 -1.29638 -0.829237 -0.227693 0.510413 + -1.20076 2.44973 -1.23243 -0.807709 -0.211129 0.550483 + -1.18193 2.61173 -1.15402 -0.757177 -0.231489 0.610816 + -1.17847 2.75048 -1.09314 -0.697503 -0.188561 0.691328 + -1.15569 2.85747 -1.04705 -0.648235 -0.178146 0.740307 + -1.15642 2.2665 -1.23506 -0.768634 -0.25871 0.585039 + -1.13711 2.35673 -1.17514 -0.742867 -0.261386 0.6163 + -1.11549 2.42714 -1.11729 -0.705038 -0.26208 0.658965 + -1.17913 2.52014 -1.17457 -0.82744 -0.163809 0.537131 + -1.10261 2.61414 -1.04439 -0.678291 -0.162712 0.716552 + -1.15994 2.16083 -1.28762 -0.779226 -0.245919 0.576481 + -1.07329 2.23459 -1.16719 -0.602811 -0.330372 0.726273 + -1.05398 2.32482 -1.10727 -0.562054 -0.346554 0.750996 + -1.02917 2.41408 -1.05708 -0.520297 -0.309529 0.795916 + -1.09981 2.52255 -1.06495 -0.684803 -0.222119 0.694052 + -1.10748 2.05776 -1.27712 -0.653928 -0.306117 0.691861 + -1.09549 2.15062 -1.22155 -0.626568 -0.318646 0.711251 + -0.964186 2.25183 -1.08325 -0.534239 -0.306893 0.787658 + -0.93618 2.33064 -1.03375 -0.49618 -0.325829 0.804761 + -0.911368 2.41982 -0.983609 -0.422087 -0.240743 0.874005 + -1.12102 1.97167 -1.3234 -0.710353 -0.293973 0.639515 + -1.01448 2.0909 -1.18991 -0.641829 -0.247052 0.725962 + -0.986391 2.16787 -1.13762 -0.615956 -0.299513 0.728622 + -0.937618 2.10507 -1.11184 -0.461012 -0.290509 0.838494 + -0.907448 2.17665 -1.07843 -0.347757 -0.346562 0.871183 + -1.09753 1.87136 -1.35425 -0.816195 -0.192413 0.544796 + -1.02801 2.00471 -1.23623 -0.738019 -0.181504 0.649911 + -0.992937 1.94976 -1.19306 -0.70954 -0.0574575 0.702319 + -0.965703 2.0281 -1.16413 -0.618031 -0.17955 0.765375 + -1.06221 1.92259 -1.27918 -0.889397 0.073742 0.451149 + -1.02713 1.86773 -1.23596 -0.792379 -0.0446357 0.608394 + -0.99815 1.78121 -1.21072 -0.679744 0.0880096 0.72815 + -0.970916 1.85955 -1.1818 -0.64461 0.0236216 0.764147 + -0.944993 1.94571 -1.17164 -0.49636 -0.0377188 0.867297 + -1.03288 1.78952 -1.25311 -0.915521 -0.0604097 0.397709 + -1.01446 1.69188 -1.20979 -0.879753 0.0666659 0.470735 + -1.0114 1.59751 -1.17953 -0.998089 -0.00594584 -0.061504 + -0.995087 1.68693 -1.18041 -0.933843 0.191168 0.30231 + -0.973838 1.76895 -1.17167 -0.930113 0.206864 0.303474 + -1.03052 1.69812 -1.27639 -0.955703 -0.268696 0.120138 + -1.0202 1.61368 -1.22695 -0.951187 -0.250823 -0.179811 + -1.00583 1.52632 -1.17682 -0.909522 -0.337774 -0.242235 + -1.01377 1.61179 -1.12827 -0.966765 0.0807322 0.242585 + -0.995136 1.68804 -1.12174 -0.936915 0.198063 0.288029 + -1.02216 1.67959 -1.28351 -0.884993 -0.448046 0.126656 + -0.994441 1.63158 -1.25995 -0.884773 -0.448254 0.127458 + -0.800745 2.16722 0.143497 -0.266488 -0.953999 -0.13737 + -0.757773 2.14908 0.186115 -0.266484 -0.954 -0.137366 + -0.977225 1.46075 -1.16166 -0.540388 -0.833129 -0.117799 + -1.00821 1.5406 -1.12556 -0.819157 -0.235047 0.523196 + -0.922127 1.44708 -1.17038 -0.25698 -0.513093 -0.818961 + -0.956138 1.59387 -1.09763 -0.188993 -0.184014 0.964583 + -0.989636 1.62409 -1.09438 -0.525167 -0.061513 0.848773 + -0.905604 1.68879 -1.07423 -0.27887 -0.713951 0.642266 + -0.971002 1.70035 -1.08785 -0.509734 -0.180965 0.841084 + -0.948906 1.69815 -1.06444 -0.61871 -0.785323 -0.0216053 + -0.797461 1.74686 -1.05502 0.348302 -0.398457 0.84848 + -0.837016 1.7382 -1.03661 0.775411 -0.49829 0.387873 + -0.901206 1.61571 -1.00085 0.715941 -0.513326 -0.473208 + -0.854714 1.6674 -0.986595 0.88732 -0.454064 0.080551 + -0.763463 1.84218 -1.03071 0.515865 -0.435311 0.737826 + -0.817107 1.82925 -0.992113 0.72016 -0.382189 0.579052 + -0.848173 1.81015 -0.954435 0.831705 -0.250724 0.495383 + -0.88578 1.6483 -0.948908 0.29959 -0.669645 0.679574 + -0.901206 1.61571 -1.00085 0.693105 -0.685132 0.224053 + -0.826709 1.95084 -0.893124 0.736538 -0.417882 0.531871 + -0.882893 1.77276 -0.908069 0.867289 -0.280717 0.411106 + -0.912574 1.69183 -0.92031 0.393387 -0.722894 0.568042 + -0.943193 1.68178 -0.955688 -0.850662 -0.47655 0.22198 + -0.9164 1.63825 -0.984295 -0.695892 -0.656655 0.290755 + -0.901206 1.61571 -1.00085 -0.425502 -0.704292 0.568261 + -0.861429 1.91345 -0.846758 0.889291 -0.274612 0.365719 + -0.893682 1.87478 -0.783184 0.952703 -0.194267 0.233706 + -0.901912 1.77293 -0.848373 0.938045 -0.280433 0.203542 + -0.931592 1.69201 -0.860605 0.617175 -0.764469 0.186231 + -0.942828 1.68755 -0.866885 0.286173 -0.949441 0.129099 + -0.897836 2.0262 -0.669447 0.954947 -0.251594 0.157406 + -0.906177 1.85878 -0.71386 0.857558 -0.509565 0.0702668 + -0.914407 1.75692 -0.77904 0.971355 -0.133928 0.196298 + -0.923086 1.71773 -0.754359 0.624715 -0.644696 0.440565 + -0.934322 1.71336 -0.760589 -0.598461 -0.707358 0.376152 + -0.869782 2.14179 -0.573461 0.888404 -0.447224 0.103582 + -0.910296 1.95936 -0.588676 0.961004 -0.229764 0.153884 + -0.882242 2.07495 -0.492681 0.941447 -0.330552 0.0664271 + -0.915054 2.03059 -0.423643 0.703566 -0.688659 0.175335 + -0.833842 2.20954 -0.4174 0.843498 -0.529591 0.0896856 + -0.866654 2.16518 -0.348362 0.884182 -0.453976 0.110124 + -0.779985 2.29664 -0.306655 0.78012 -0.618285 0.0955808 + -0.820451 2.25574 -0.240823 0.775963 -0.622929 0.0992019 + -0.84198 2.23368 -0.221018 0.82061 -0.563294 0.0964302 + -0.899356 2.11045 -0.280376 0.81514 -0.559007 0.151852 + -0.848062 2.25593 0.053241 0.726813 -0.686831 -0.00237746 + -0.86959 2.23379 0.072996 0.867972 -0.492529 -0.0635625 + -0.874682 2.17887 -0.153082 0.93638 -0.34992 0.0273723 + -0.872962 2.20626 0.169881 0.949076 -0.200427 -0.243071 + -0.878053 2.15134 -0.056197 0.966319 -0.249561 -0.0628171 + -0.892074 2.13502 -0.102131 0.440964 -0.893313 0.0868521 + -0.923579 2.11023 -0.208393 0.514534 -0.830556 0.213148 + -0.9677 2.00174 -0.371486 0.504991 -0.852363 0.135872 + -0.828119 2.24167 0.237951 0.389455 -0.912287 -0.12672 + -0.822356 2.22867 0.269664 0.624984 -0.414468 -0.661522 + -0.855557 2.12347 0.166472 0.95707 0.0074767 -0.289759 + -0.869578 2.10715 0.120537 0.52764 -0.815524 -0.237731 + -0.928957 2.14091 -0.013939 0.514104 -0.828587 -0.221675 + -0.960462 2.11612 -0.120201 0.114763 -0.949988 0.290435 + -0.689714 2.22859 0.3148 -0.221485 -0.916279 0.333731 + -0.645114 2.2745 0.37449 -0.197541 -0.70019 0.686084 + -0.549107 2.2493 0.375134 -0.182217 -0.884402 0.429687 + -0.504507 2.2952 0.434824 -0.249365 -0.967644 -0.0384942 + -0.695478 2.2415 0.283037 -0.290957 -0.953189 0.0823044 + -0.656684 2.21392 0.282414 -0.340352 -0.706998 0.619931 + -0.570774 2.244 0.324112 0.0107686 -0.880301 0.474292 + -0.451134 2.24204 0.399915 -0.239691 -0.85309 -0.463449 + -0.414515 2.17767 0.436803 -0.770046 -0.633828 -0.0727464 + -0.813755 2.21001 0.167176 -0.653682 -0.725331 0.215857 + -0.774962 2.18234 0.16651 -0.662782 -0.387812 0.640564 + -0.672983 2.13364 0.236662 -0.234453 -0.678889 0.695803 + -0.587072 2.16372 0.27836 0.433978 -0.883631 0.17567 + -0.4728 2.23674 0.348895 -0.0690611 -0.964036 -0.256641 + -0.848062 2.25593 0.053241 -0.899549 -0.436635 0.0126956 + -0.833698 2.22428 -0.017537 -0.972286 -0.201425 -0.118696 + -0.800745 2.16722 0.143497 -0.673742 0.668008 0.31597 + -0.779985 2.29664 -0.306655 -0.961153 -0.268991 -0.0618751 + -0.793376 2.25035 -0.483283 -0.94756 -0.284124 0.146298 + -0.905691 2.11918 0.074307 0.960751 -0.0657779 -0.269501 + -0.927779 1.73612 -0.733023 -0.0606392 -0.762523 0.644113 + -0.910296 1.95936 -0.588676 0.99301 -0.0738874 0.0920415 + -0.800745 2.16722 0.143497 -0.607963 -0.149967 0.779673 + -0.698766 2.11852 0.21365 -0.562192 -0.244004 0.790191 + -0.634104 2.14471 0.244295 0.483673 -0.72715 -0.487148 + -0.49705 2.29366 0.303292 0.132551 -0.898236 -0.419048 + -0.417636 2.26287 0.309421 -0.558912 -0.726121 -0.400456 + -0.393386 2.20586 0.354973 -0.751536 -0.583386 -0.307984 + -0.368257 2.13837 0.383673 -0.842988 -0.492074 -0.217336 + -0.544082 2.27465 0.269227 0.636425 -0.625105 -0.451892 + -0.521412 2.29176 0.261582 0.198375 -0.913628 0.354868 + -0.436632 2.29198 0.270599 -0.349242 -0.918979 0.183051 + -0.341659 2.14994 0.304622 -0.590922 -0.461859 -0.661436 + -0.323066 2.06909 0.320072 -0.787551 -0.396245 -0.471969 + -0.458556 2.21157 0.222087 -0.0816158 -0.864391 0.496151 + -0.360655 2.17914 0.26585 -0.594786 -0.739531 -0.315156 + -0.757773 2.14908 0.186115 0.425881 0.00712076 -0.904751 + -0.356213 2.23418 0.219722 -0.0791444 -0.906976 -0.413679 + -0.255573 2.2155 0.158679 -0.472097 -0.709327 -0.523431 + -0.260015 2.16046 0.204812 -0.546939 -0.531354 -0.646932 + -0.25963 2.10261 0.248802 -0.628203 -0.369867 -0.684514 + -0.25321 2.24159 0.091878 -0.182373 -0.952253 -0.244857 + -0.159262 2.21968 0.033037 -0.309951 -0.870516 -0.382272 + -0.154596 2.18535 0.100294 -0.405122 -0.706198 -0.580655 + -0.154212 2.12742 0.144235 -0.42478 -0.510078 -0.747918 + -0.156899 2.24578 -0.033764 -0.155742 -0.968762 -0.192988 + -0.082695 2.24703 -0.071537 -0.022138 -0.989172 -0.145084 + -0.081395 2.22044 -0.002884 0.0259693 -0.913436 -0.406154 + -0.07673 2.18603 0.064323 -0.0808295 -0.830636 -0.550918 + -0.154394 2.249 -0.110343 -0.250281 -0.94924 -0.190531 + -0.08019 2.25017 -0.148166 0.0928859 -0.990571 -0.100701 + -0.02725 2.24172 -0.024536 0.105285 -0.945042 -0.309532 + -0.02595 2.21513 0.044117 0.183362 -0.83223 -0.523231 + -0.02595 2.16442 0.105158 0.126649 -0.73229 -0.669112 + -0.118724 2.25914 -0.189312 -0.644393 -0.505473 -0.573807 + -0.070071 2.25744 -0.21357 -0.0346311 -0.950151 -0.309862 + -0.02725 2.26148 -0.094764 0.204235 -0.958795 -0.197484 + 0.02725 2.26148 -0.094764 -0.112465 -0.980759 -0.159571 + 0.02725 2.24172 -0.024536 -0.0973461 -0.940416 -0.325793 + -0.015856 2.27806 -0.272286 -0.692326 -0.674947 -0.255208 + -0.017131 2.26876 -0.160169 0.132692 -0.991072 -0.0129884 + 0.017132 2.26876 -0.160169 -0.0970983 -0.995025 0.0222771 + 0.08019 2.25017 -0.148166 -0.0992598 -0.991427 -0.0849676 + 0.082695 2.24703 -0.071537 -0.0676404 -0.980529 -0.184354 + -0.017131 2.25377 -0.233603 -0.672001 -0.739387 -0.0414943 + -0.017131 2.26876 -0.160169 -0.999184 0.0395704 -0.00807802 + 0.010678 2.2749 -0.3052 0.640246 -0.728935 -0.24236 + 0.017132 2.25377 -0.233603 0.12652 -0.980525 -0.150209 + 0.070072 2.25744 -0.21357 0.131999 -0.946954 -0.293008 + 0.118717 2.25914 -0.18932 0.644411 -0.505444 -0.573813 + 0.154394 2.249 -0.110343 0.248355 -0.948936 -0.194524 + 0.009403 2.2992 -0.343893 0.907328 -0.39374 -0.147391 + 0.015857 2.27806 -0.272286 0.680649 -0.659772 -0.318463 + 0.064503 2.27977 -0.248036 0.429281 -0.740471 -0.517127 + 0.211487 2.26453 -0.064851 0.47178 -0.773808 -0.422663 + 0.247164 2.25439 0.014118 0.0696504 -0.988172 -0.136617 + 0.048517 2.35557 -0.371727 0.704882 -0.656029 -0.269754 + 0.125703 2.38312 -0.315846 0.581502 -0.618836 -0.528107 + 0.086589 2.32683 -0.287961 0.542128 -0.665705 -0.512771 + 0.061399 2.38566 -0.424453 0.808042 -0.548472 -0.215049 + 0.142328 2.44172 -0.358949 0.638228 -0.585929 -0.499351 + 0.25074 2.40196 -0.217091 0.412862 -0.596397 -0.688372 + 0.237927 2.33919 -0.172759 0.374804 -0.684412 -0.625381 + 0.081787 2.44345 -0.469944 0.821557 -0.498454 -0.276745 + 0.162716 2.49951 -0.404439 0.672959 -0.54307 -0.502196 + 0.267365 2.46057 -0.260203 0.376942 -0.624658 -0.683899 + 0.364503 2.38729 -0.16808 -0.147701 -0.662525 -0.734333 + 0.089764 2.48429 -0.520287 0.852656 -0.40991 -0.323962 + 0.167976 2.5567 -0.450297 0.720992 -0.452007 -0.525223 + 0.266044 2.51805 -0.310551 0.425678 -0.588121 -0.687686 + 0.360602 2.49977 -0.271703 -0.252078 -0.667705 -0.700447 + 0.361923 2.4423 -0.221354 -0.200971 -0.667831 -0.716667 + 0.102723 2.54819 -0.55457 0.84008 -0.434995 -0.324106 + 0.180935 2.62069 -0.484529 0.693794 -0.514081 -0.504352 + 0.271304 2.57523 -0.3564 0.386137 -0.616703 -0.685986 + 0.100077 2.57141 -0.606185 0.823852 -0.557405 -0.102796 + 0.181855 2.66385 -0.532888 0.313529 -0.948602 0.0430502 + 0.26152 2.62783 -0.410106 0.378469 -0.656392 -0.652618 + 0.340041 2.61075 -0.377513 -0.233545 -0.687877 -0.687228 + 0.349826 2.55815 -0.323807 -0.258667 -0.689309 -0.676716 + 0.073178 2.53464 -0.683094 0.882518 -0.416255 -0.218848 + 0.154956 2.62717 -0.609756 0.790133 -0.588326 -0.171937 + 0.262439 2.671 -0.458472 0.481221 -0.592234 -0.646286 + 0.059054 2.74121 -0.955474 0.878544 -0.347442 -0.327789 + 0.108192 2.80586 -0.905062 0.84321 -0.391443 -0.368469 + 0.25805 2.7342 -0.501336 0.575171 -0.552291 -0.603451 + 0.016514 2.25648 -0.879903 0.997942 -0.0142128 -0.0625224 + -0.9191 1.77532 -0.757703 0.863215 -0.272616 0.424901 + -0.927779 1.73612 -0.733023 0.965021 -0.051872 0.256989 + -0.994441 1.63158 -1.25995 -0.485316 -0.448721 -0.750412 + -0.699814 1.69538 -1.32206 0.90454 -0.205812 0.373428 + -0.704309 1.62413 -1.34845 0.818599 -0.454673 -0.350952 + -0.692772 1.67708 -1.37616 0.976357 -0.216071 -0.00636239 + -0.699505 1.64767 -1.36081 0.120086 -0.480725 -0.86861 + -0.711042 1.59463 -1.33315 0.233098 -0.489048 -0.840534 + -0.719793 1.60413 -1.3202 0.761892 -0.349214 0.5455 + -0.711042 1.59463 -1.33315 0.751826 -0.174539 0.63584 + -0.748272 1.58103 -1.31759 0.447718 -0.677802 0.58321 + -0.761571 1.58121 -1.3069 0.188617 -0.973236 0.131283 + -0.848896 1.59106 -1.29936 -0.0676339 -0.997591 0.015436 + -0.862195 1.59124 -1.28868 -0.0867424 -0.995577 -0.036101 + -0.759733 1.60831 -1.24384 0.640418 -0.650066 0.408998 + -0.801512 1.58539 -1.23054 0.285219 -0.890828 0.353661 + -0.977933 1.61141 -1.18422 0.548729 -0.595782 -0.586464 + -0.946964 1.61536 -1.27285 -0.462913 -0.884374 -0.059952 + -0.994441 1.63158 -1.25995 0.956751 0.248319 -0.151541 + -0.955511 1.48158 -1.19533 0.963046 0.15508 -0.22021 + -1.00886 1.67572 -1.2742 -0.651743 -0.660064 0.373559 + -1.02216 1.67959 -1.28351 -0.574611 -0.57638 0.581041 + -0.710918 1.55531 -1.66445 -0.0168882 -0.92895 -0.369821 + -0.698533 1.56096 -1.65062 0.562251 -0.808668 0.173002 + -0.738069 1.5453 -1.62151 0.133805 -0.977218 -0.164746 + -0.765583 1.55311 -1.63143 -0.167649 -0.857189 -0.48695 + -0.695642 1.56591 -1.6828 -0.777786 -0.411159 -0.475391 + -0.666623 1.5694 -1.74905 -0.761908 0.572093 -0.303654 + -0.780274 1.54606 -1.61161 -0.137724 -0.915593 -0.377784 + -0.70293 1.57108 -1.72015 -0.0398422 -0.994837 -0.0933409 + -0.67746 1.59199 -1.83878 0.508764 -0.797592 -0.324047 + -0.72052 1.57168 -1.769 0.0946379 -0.986478 -0.133807 + -0.733866 1.5759 -1.7889 -0.119709 -0.950796 -0.285755 + -0.690805 1.59621 -1.85868 0.135136 -0.854781 -0.501087 + -0.644552 1.69844 -1.93855 0.851291 -0.416087 -0.319648 + -0.679972 1.61529 -1.89452 0.529116 -0.808327 -0.258155 + -0.657013 1.72041 -1.98721 0.807873 -0.434723 -0.397941 + -0.666892 1.74132 -2.03102 0.736366 -0.464695 -0.491755 + -0.618961 1.9043 -2.05851 0.853878 -0.396202 -0.337516 + -0.692433 1.63726 -1.94318 -0.180185 -0.91296 -0.366112 + -0.692433 1.63726 -1.94318 0.717053 -0.53926 -0.441625 + -0.575139 2.01336 -2.097 0.763209 -0.617583 -0.190008 + -0.506492 2.07895 -2.15301 0.531751 -0.838599 -0.118292 + -0.248157 2.16615 -2.10865 0.108474 -0.934503 -0.339024 + -0.236264 2.17147 -2.12526 -0.0254974 -0.970204 -0.240943 + -0.211458 2.17238 -2.14524 -0.139532 -0.979493 -0.14534 + -0.270663 2.18392 -2.22823 -0.00269414 -0.99329 -0.115618 + -0.239822 2.18818 -2.24701 -0.081898 -0.992073 -0.095312 + -0.146993 2.16015 -2.15325 -0.104751 -0.980314 -0.16737 + -0.119333 2.16347 -2.1654 0.0441472 -0.975183 -0.216954 + -0.314309 2.19617 -2.35364 0.0538928 -0.997682 0.0415453 + -0.268684 2.19336 -2.36638 -0.0585484 -0.995402 0.0758044 + -0.206692 2.18146 -2.25856 -0.157522 -0.986015 -0.0544196 + -0.321355 2.17099 -2.48582 0.0353566 -0.964084 0.263235 + -0.27985 2.16796 -2.50339 -0.0479251 -0.958592 0.280722 + -0.230059 2.1897 -2.37884 -0.128191 -0.98699 0.0970404 + -0.168067 2.17779 -2.27101 -0.0113098 -0.996495 -0.082884 + -0.364216 2.11959 -2.62621 0.160657 -0.921714 0.353033 + -0.322711 2.11657 -2.64377 0.113074 -0.942002 0.315985 + -0.236111 2.15775 -2.5155 -0.0391953 -0.964627 0.260688 + -0.18632 2.17957 -2.3909 -0.0550696 -0.992989 0.104592 + -0.450585 2.06243 -2.70541 0.449636 -0.837078 0.311654 + -0.409212 2.06633 -2.72435 0.292901 -0.8983 0.327514 + -0.370329 2.07271 -2.7538 0.271262 -0.917557 0.2907 + -0.290031 2.11226 -2.67471 0.0813537 -0.955006 0.285209 + -0.481281 2.05005 -2.67016 0.609404 -0.753512 0.246668 + -0.496392 2.00565 -2.75105 0.653384 -0.714778 0.249365 + -0.458077 2.02381 -2.7897 0.484304 -0.818918 0.307934 + -0.419195 2.03027 -2.8191 0.380277 -0.876176 0.29615 + -0.527088 1.99318 -2.71585 0.787791 -0.442397 0.428567 + -0.526564 1.96599 -2.80317 0.736628 -0.61928 0.271795 + -0.48825 1.98423 -2.84176 0.610204 -0.76504 0.205827 + -0.548842 1.974 -2.67123 0.795435 -0.593333 0.123447 + -0.593047 1.92413 -2.62486 0.794315 -0.596341 0.115931 + -0.531743 1.92998 -2.84378 0.823273 -0.5396 0.176218 + -0.51372 1.95601 -2.89967 0.730385 -0.667414 0.145246 + -0.481219 1.9705 -2.93378 0.455656 -0.873991 0.168869 + -0.455748 1.99864 -2.87592 0.439666 -0.871288 0.218064 + -0.374755 2.03635 -2.85183 0.282487 -0.906706 0.313186 + -0.540993 1.91304 -2.85124 0.841803 -0.521316 0.139993 + -0.52297 1.93907 -2.90713 0.825938 -0.544307 0.146821 + -0.508552 1.94894 -2.92703 0.636434 -0.757467 0.145582 + -0.507767 1.95508 -2.96886 0.213725 -0.97544 -0.0532826 + -0.456696 1.97413 -2.95585 0.286324 -0.869506 0.402465 + -0.411309 2.00472 -2.90865 0.31193 -0.904832 0.28979 + -0.334863 2.03597 -2.88316 0.261405 -0.917724 0.299082 + -0.337649 2.06849 -2.78469 0.191887 -0.933404 0.30321 + -0.517922 1.95242 -2.95826 0.1088 -0.983819 -0.14235 + -0.517137 1.95856 -3.00009 0.053763 -0.990498 -0.126585 + -0.483244 1.9587 -2.99094 0.0992161 -0.983626 0.150452 + -0.462167 1.9588 -2.9683 -0.337711 -0.517515 0.786212 + -0.436121 1.96423 -2.9789 0.412128 -0.537216 0.7359 + -0.418222 1.97945 -2.97868 0.274929 -0.612696 0.740957 + -0.372835 2.01005 -2.93147 0.285233 -0.913547 0.289955 + -0.288907 2.03914 -2.91625 0.185164 -0.93607 0.299144 + -0.297757 2.06811 -2.81603 0.14378 -0.946268 0.289663 + -0.391961 1.97369 -2.9829 0.119732 -0.155226 0.980596 + -0.374062 1.98892 -2.98267 0.245697 -0.527914 0.812982 + -0.326879 2.01322 -2.96456 0.261368 -0.902153 0.343229 + -0.243345 2.03958 -2.93603 0.0675455 -0.943215 0.325244 + -0.262208 2.06183 -2.84155 0.0815764 -0.958129 0.27447 + -0.3657 1.98304 -2.9843 0.0994869 -0.131514 0.986309 + -0.26893 2.09855 -2.72197 0.0653673 -0.954627 0.29054 + -0.21501 2.14395 -2.5628 0.0811233 -0.956504 0.280212 + -0.176994 2.15529 -2.54404 0.154638 -0.964924 0.212152 + -0.233381 2.09228 -2.74749 0.0991773 -0.957212 0.271862 + -0.195365 2.10352 -2.72877 0.199717 -0.947145 0.251056 + -0.216646 2.06227 -2.86133 0.164678 -0.944947 0.282767 + -0.151773 2.11226 -2.73851 0.288032 -0.927812 0.237069 + -0.128718 2.16379 -2.55436 0.256177 -0.952474 0.164822 + -0.098774 2.18937 -2.41326 0.121431 -0.991376 0.0492831 + -0.14705 2.18087 -2.40294 0.118078 -0.990372 0.072249 + -0.188123 2.03604 -2.94528 0.166006 -0.932256 0.321465 + -0.173054 2.07101 -2.87106 0.255078 -0.916478 0.308226 + -0.126505 2.07915 -2.88576 0.384142 -0.869572 0.310288 + -0.120238 2.11383 -2.78023 0.435674 -0.869701 0.231964 + -0.284915 2.01668 -2.98715 0.139171 -0.854689 0.500138 + -0.229693 2.01313 -2.99641 0.110544 -0.955673 0.272891 + -0.21399 2.01164 -3.01763 0.0319108 -0.947525 0.318084 + -0.141573 2.04417 -2.95997 0.285424 -0.888593 0.359076 + -0.332098 1.99229 -3.00532 0.233097 -0.965953 0.112253 + -0.313287 2.00102 -3.03582 0.278906 -0.951632 0.12887 + -0.297585 1.99953 -3.05705 0.107263 -0.990981 0.0803216 + -0.3657 1.98304 -2.9843 0.418968 0.366156 0.8309 + 1.14799 1.74733 -2.15643 0.928722 -0.304044 -0.212207 + 1.13429 1.77906 -2.24399 0.815696 -0.46777 -0.34034 + 1.15743 1.91745 -2.19529 0.765258 0.153009 -0.625275 + 1.20667 2.0536 -2.0707 0.916496 -0.0594858 -0.395597 + 1.24921 2.14475 -2.01399 0.800373 -0.233246 -0.552267 + 1.11601 1.94174 -2.22355 0.73333 0.272877 -0.622708 + 1.13715 2.12449 -2.13089 0.641395 0.256459 -0.723077 + 1.18765 2.08689 -2.10077 0.750226 0.168115 -0.639451 + 1.11354 1.8732 -2.26963 0.921117 0.202597 -0.332413 + 1.02199 2.18507 -2.21342 0.778208 0.262519 -0.570505 + 1.09573 2.14878 -2.15916 0.644863 0.242643 -0.724759 + 1.10694 2.28195 -2.11301 0.632316 0.157299 -0.758573 + 1.14176 2.21318 -2.09731 0.651887 0.190926 -0.733887 + 1.08587 1.87405 -2.34371 0.92966 0.244765 -0.275358 + 1.01952 2.11653 -2.25951 0.885084 0.279305 -0.372311 + 1.10662 1.77992 -2.31807 0.836646 -0.450327 -0.311815 + 1.07554 1.80925 -2.43787 0.952325 0.203261 -0.227515 + 1.06243 1.89044 -2.4139 0.936046 0.272328 -0.222833 + 0.996072 2.13292 -2.3297 0.909632 0.327286 -0.255837 + 1.09318 1.74847 -2.21301 0.471848 -0.865716 -0.167019 + 1.05909 1.73242 -2.2304 0.489568 -0.858959 -0.150045 + 1.07252 1.76395 -2.33541 0.512921 -0.821206 -0.250063 + 1.07554 1.80925 -2.43787 0.574721 -0.75459 -0.316684 + 1.06729 1.76693 -2.35678 0.655905 -0.708823 -0.259536 + 1.00205 1.70979 -2.27861 0.093853 -0.847204 -0.522913 + 1.12953 1.76009 -2.17713 0.386969 -0.900022 -0.200537 + 1.10326 1.7364 -2.1069 0.313372 -0.931716 -0.183587 + 1.0669 1.72478 -2.14277 0.420731 -0.901772 -0.0989536 + 1.03738 1.71233 -2.1638 0.453112 -0.888217 -0.0758886 + 1.00727 1.7068 -2.25724 0.400765 -0.898458 -0.179334 + 1.15072 1.77302 -2.19552 0.351682 -0.906842 -0.232286 + 1.14596 1.75405 -2.12866 -0.537992 -0.790792 -0.291912 + 1.11534 1.73461 -2.08659 0.0192434 -0.903832 -0.427454 + 1.01531 1.69599 -2.04791 0.265646 -0.96066 -0.0810202 + 0.985789 1.68354 -2.06893 0.213289 -0.976622 0.0267796 + 0.985572 1.68671 -2.19063 0.186134 -0.974207 -0.127576 + 1.14514 1.73694 -2.10343 -0.789833 -0.484626 -0.375901 + 1.11452 1.7175 -2.06136 -0.12554 -0.820661 -0.557454 + 1.02739 1.69411 -2.02766 0.0801468 -0.921829 -0.379221 + 0.891333 1.6773 -1.97893 -0.153091 -0.871265 -0.466327 + 0.937936 1.68407 -2.04925 -0.17611 -0.979272 -0.100057 + 1.15072 1.77302 -2.19552 -0.797612 0.527641 0.292252 + 1.14799 1.74733 -2.15643 -0.997747 0.0634496 -0.0217945 + 1.14241 1.71125 -2.06434 -0.547246 -0.706409 -0.448896 + 1.10601 1.7037 -2.03866 -0.111 -0.830124 -0.546418 + 1.01888 1.6804 -2.0049 -0.0208503 -0.856074 -0.516433 + 1.13429 1.77906 -2.24399 -0.749858 0.575728 0.32596 + 1.15142 1.68191 -2.03092 -0.798592 -0.54239 -0.260892 + 0.942828 1.68755 -0.866894 -0.285676 -0.949615 0.128919 + 0.931592 1.69201 -0.860605 -0.621255 -0.759147 0.194263 + 0.882892 1.77276 -0.908069 -0.880223 -0.330703 0.340357 + 0.848172 1.81015 -0.954435 -0.824321 -0.264242 0.50067 + 0.923086 1.71773 -0.754359 -0.637496 -0.643845 0.423158 + 0.914407 1.75692 -0.77904 -0.972244 -0.178628 0.151107 + 0.901911 1.77293 -0.848373 -0.941113 -0.262454 0.213132 + 0.8945 1.86096 -0.814435 -0.929991 -0.202739 0.306616 + 0.86143 1.91345 -0.846758 -0.854838 -0.322911 0.406178 + 0.927778 1.73612 -0.733014 0.0604344 -0.762729 0.643888 + 0.927778 1.73612 -0.733014 -0.965046 -0.0519368 0.256883 + 0.919099 1.77531 -0.757695 -0.925774 -0.160899 0.342131 + 0.906995 1.84494 -0.745102 -0.979667 0.0247327 0.199099 + 0.920946 1.88997 -0.719496 -0.948819 -0.13377 0.286092 + 0.898654 2.01237 -0.70069 -0.907191 -0.265216 0.326595 + 0.865585 2.06487 -0.733021 -0.784253 -0.448947 0.428245 + 0.79727 2.10626 -0.78912 -0.590938 -0.620716 0.515271 + 0.82671 1.95084 -0.893124 -0.749553 -0.431167 0.502261 + 0.817107 1.82925 -0.992113 -0.690958 -0.284297 0.664644 + 0.925346 1.94468 -0.654843 -0.963054 -0.202689 0.177324 + 0.903054 2.06699 -0.636095 -0.915931 -0.375406 0.141917 + 0.830701 2.16795 -0.637364 -0.676618 -0.678194 0.286777 + 0.762385 2.20934 -0.693463 -0.222679 -0.898963 0.3772 + 0.718762 2.16758 -0.736722 0.409235 -0.743795 0.528485 + 0.745911 2.11019 -0.834725 -0.0881068 -0.750393 0.655093 + 0.915514 2.00015 -0.555323 -0.951565 -0.30599 -0.0298895 + 0.882244 2.07495 -0.492681 -0.908861 -0.416316 0.0255637 + 0.869784 2.14179 -0.573461 -0.861026 -0.508257 0.0175657 + 0.754295 2.27651 -0.547195 -0.0862156 -0.942741 0.322189 + 0.708909 2.2274 -0.610544 0.357385 -0.884183 0.300825 + 0.665285 2.18573 -0.653752 0.875837 -0.408195 0.257462 + 0.915054 2.03059 -0.423643 -0.703805 -0.6802 0.204906 + 0.833844 2.20954 -0.4174 -0.845466 -0.51177 0.152574 + 0.793378 2.25035 -0.483283 -0.754844 -0.646424 0.111117 + 0.776758 2.28597 -0.306972 -0.581938 -0.808646 0.0862505 + 0.743554 2.29407 -0.424208 0.314961 -0.941988 -0.116012 + 0.866654 2.16518 -0.348362 -0.868133 -0.483363 0.11272 + 0.820451 2.25574 -0.240823 -0.737043 -0.674493 0.0427327 + 0.779985 2.29664 -0.306655 -0.766011 -0.638531 0.0741976 + 0.833698 2.22428 -0.017537 -0.652667 -0.754624 -0.0675919 + 0.9677 2.00174 -0.371486 -0.540538 -0.829977 0.137682 + 0.899356 2.11045 -0.280376 -0.814365 -0.571365 0.101739 + 0.874688 2.17887 -0.153082 -0.936324 -0.350063 0.0274422 + 0.841986 2.2336 -0.221068 -0.821032 -0.56268 0.0964225 + 0.848062 2.25593 0.053241 -0.724839 -0.688894 -0.00578605 + 0.948408 2.01676 -0.468093 -0.440186 -0.896435 -0.0513962 + 1.00105 1.98792 -0.415936 0.491473 -0.781639 -0.384051 + 0.991919 2.0016 -0.299444 0.192013 -0.869892 0.454333 + 0.923575 2.11031 -0.208334 -0.463531 -0.855419 0.231077 + 0.878053 2.15134 -0.056197 -0.966034 -0.250109 -0.0649895 + 0.869596 2.23379 0.072996 -0.867958 -0.492548 -0.0635955 + 0.872962 2.20626 0.169881 -0.949061 -0.200448 -0.243111 + 0.828111 2.24166 0.237958 -0.389069 -0.912578 -0.125804 + 1.018 2.02083 -0.35915 0.968861 -0.247604 0.000397428 + 0.983368 2.07331 -0.217248 0.314194 -0.839755 0.442825 + 0.960458 2.11612 -0.120201 -0.11602 -0.95524 0.272131 + 0.928955 2.14092 -0.013948 -0.514095 -0.828573 -0.221749 + 0.892072 2.13503 -0.10214 -0.74989 -0.652426 -0.109573 + 1.00554 2.1554 -0.369826 0.985544 -0.0256754 -0.167462 + 1.00945 2.09254 -0.276952 0.976226 -0.185235 0.112561 + 1.02436 2.14526 -0.215457 0.965487 -0.257281 -0.0405055 + 1.0088 2.10705 -0.139885 0.60466 -0.750663 0.266256 + 0.985888 2.14995 -0.042786 0.480837 -0.872258 0.0892287 + 0.905681 2.11917 0.074324 0.559914 -0.810846 0.170369 + 0.988594 2.12248 -0.426613 0.930138 -0.0321563 -0.365798 + 1.00756 2.25448 -0.396038 0.97163 -0.0942255 -0.216926 + 1.01462 2.2153 -0.323177 0.987623 -0.0737678 -0.138414 + 1.02953 2.26801 -0.26168 0.872103 -0.363405 -0.327677 + 0.948408 2.01676 -0.468093 0.706343 0.00922063 -0.70781 + 0.905681 2.11917 0.074324 -0.960751 -0.0657405 -0.269511 + 0.855557 2.12347 0.166472 -0.957056 0.00752283 -0.289806 + 0.804931 2.14597 0.266304 -0.707835 0.102181 -0.698948 + 0.822335 2.22876 0.269713 -0.583502 -0.399815 -0.706876 + 0.869576 2.10715 0.120537 -0.527845 -0.815367 -0.237815 + 0.846302 2.08541 0.208805 -0.87344 0.292854 -0.389023 + 0.738914 2.12985 0.32183 -0.655032 -0.00053789 -0.755601 + 0.645094 2.2745 0.37449 -0.445687 -0.88854 -0.108906 + 0.689694 2.22859 0.3148 -0.137128 -0.987659 0.07567 + 0.905681 2.11917 0.074324 -0.107938 -0.933078 -0.343096 + 0.901206 1.61571 -1.00085 -0.0630899 -0.586398 -0.807562 + 0.605962 1.89597 -2.56588 0.923388 0.373922 -0.0868155 + 0.592234 1.92008 -2.61283 0.936869 0.334412 -0.102206 + 0.603401 1.90985 -2.54392 0.747603 -0.617252 -0.245134 + 0.608231 1.90077 -2.492 0.809966 0.583106 -0.0627855 + 0.621039 1.88748 -2.46078 0.657496 0.752541 -0.0371633 + 0.618769 1.88277 -2.53462 0.757364 0.649774 -0.06475 + 0.643558 1.86843 -2.48698 0.630719 0.773953 -0.0564912 + 0.63938 1.87276 -2.42967 0.651434 0.758661 0.00822009 + 0.661899 1.8537 -2.45587 0.813414 0.547971 -0.195155 + 0.672911 1.83834 -2.44066 0.882328 0.221354 -0.415332 + 0.693482 1.82274 -2.41123 0.75964 0.643992 -0.0906696 + 0.678992 1.83517 -2.44137 0.773457 0.623367 -0.114794 + 0.710576 1.80419 -2.39672 0.773541 0.623246 -0.114885 + 0.719806 1.76903 -2.18362 0.780362 0.618151 -0.0944661 + 0.705589 1.77883 -2.23698 0.799448 0.594769 -0.0844562 + 0.690866 1.79182 -2.28809 0.917138 0.398523 -0.00611514 + 0.685856 1.80393 -2.25027 0.826716 0.558339 -0.0692761 + 0.685589 1.8085 -2.33898 0.93944 0.342393 0.0148036 + 0.05808 2.02101 -3.09945 0.166767 0.877209 0.450214 + 0.021963 2.02879 -3.08313 0.255024 0.96108 0.106246 + 0.052011 2.01575 -3.03735 0.774316 0.344201 -0.530999 + 0.080404 2.00707 -3.02371 0.242811 0.966685 0.08101 + 0.086472 2.01224 -3.08588 0.0147812 0.897971 0.439807 + 0.074256 2.02532 -3.10312 -0.0780005 0.745662 0.661743 + 0.048257 2.03376 -3.11254 -0.0341371 -0.0290121 0.998996 + 0.021963 2.02879 -3.08313 0.290487 0.785079 0.547054 + 0.012141 2.04154 -3.09621 0.192698 0.296144 0.935503 + -0.030826 2.04626 -3.10218 -0.0202983 0.708357 0.705563 + 0.128187 1.99744 -3.05683 -0.0637266 0.896948 0.437519 + 0.11597 2.01052 -3.07408 -0.257645 0.673376 0.692953 + 0.106302 2.00064 -3.00818 0.00746884 0.959279 0.282363 + 0.138523 1.99564 -3.00172 0.126377 0.984305 -0.123176 + 0.160408 1.99253 -3.05032 0.0651072 0.828602 0.556039 + 0.145789 2.00213 -3.05075 -0.323149 -0.629332 0.706764 + 0.128453 1.99899 -2.99251 0.00105117 0.997997 -0.0632477 + 0.221579 1.99604 -3.06701 0.0740882 0.981615 0.175904 + 0.267677 2.00019 -3.0754 -0.000177651 0.896667 0.442706 + 0.108633 1.98662 -2.9861 -0.317524 0.785011 0.531917 + 0.197416 1.994 -3.04727 -0.0632734 0.805886 0.588679 + 0.170471 1.99605 -3.05282 -0.124991 -0.154432 0.980065 + 0.153275 2.0171 -3.00969 -0.210018 -0.876372 0.433433 + 0.107118 2.02426 -3.03748 -0.429885 -0.846334 0.314512 + 0.0773 2.03273 -3.06076 -0.503356 -0.823811 0.260709 + 0.11597 2.01052 -3.07408 -0.429506 -0.876949 0.215605 + 0.074256 2.02532 -3.10312 -0.471371 -0.846677 0.246875 + 0.20748 1.99752 -3.04977 0.122771 -0.442068 0.88854 + 0.177958 2.01102 -3.01176 0.0449212 -0.473426 0.879687 + 0.141569 2.04417 -2.95997 -0.302838 -0.880115 0.365633 + 0.988445 1.85505 -2.622 -0.878003 0.477838 -0.0279526 + 0.940809 1.79078 -2.54588 -0.688319 0.706263 0.165561 + 0.96059 1.81258 -2.55664 -0.776608 0.270433 -0.568987 + 0.972108 1.83344 -2.56877 -0.761714 -0.0722076 -0.643877 + 0.999963 1.87599 -2.63407 -0.993306 -0.0704394 -0.0915477 + 0.99941 1.89818 -2.6767 -0.74186 0.590827 0.317122 + 0.93501 1.82717 -2.55451 -0.157193 -0.519338 -0.839987 + 0.986794 1.86725 -2.59635 -0.68801 -0.439859 -0.577205 + 0.986241 1.88944 -2.63897 -0.388349 -0.825609 -0.409335 + 0.99941 1.89818 -2.6767 -0.46223 -0.835078 -0.298311 + 0.977299 1.90902 -2.67488 -0.320458 -0.883482 -0.341711 + 0.976666 1.92511 -2.73795 -0.411386 -0.884875 -0.218535 + 0.923497 1.80836 -2.54154 -0.185011 -0.362747 -0.913337 + 0.852254 1.85836 -2.57474 -0.0736101 -0.654922 -0.752103 + 0.949696 1.86099 -2.58209 -0.114851 -0.669024 -0.734314 + 0.95185 1.87874 -2.60324 -0.0989063 -0.833448 -0.543675 + 0.940809 1.79078 -2.54588 0.0827279 -0.710166 -0.699157 + 0.903715 1.78656 -2.53079 -0.136504 -0.783727 -0.60592 + 0.840741 1.83956 -2.56177 -0.175085 -0.652354 -0.737414 + 0.731119 1.88176 -2.57267 -0.242526 -0.967617 -0.0699833 + 0.854408 1.8762 -2.59584 -0.0676272 -0.832852 -0.549348 + 0.942908 1.89832 -2.63916 -0.0937025 -0.889475 -0.447274 + 0.919104 1.7685 -2.47549 0.179908 -0.978183 -0.103879 + 0.864548 1.78519 -2.5062 -0.291845 -0.861076 -0.416382 + 0.801573 1.83818 -2.53719 -0.374448 -0.802298 -0.464873 + 0.944645 1.78837 -2.53371 0.4061 -0.883839 -0.232188 + 0.950974 1.78361 -2.44946 0.351076 -0.935938 -0.0276754 + 0.888813 1.77243 -2.3787 0.0895855 -0.99265 0.0813651 + 0.845095 1.77276 -2.36687 -0.0551768 -0.996462 0.0633942 + 0.875385 1.76883 -2.46366 -0.142435 -0.977914 -0.152959 + 0.992281 1.85263 -2.60982 0.581792 -0.736947 -0.344131 + 0.976516 1.80348 -2.50768 0.503351 -0.838155 -0.210082 + 0.971656 1.78821 -2.42584 0.241772 -0.964544 -0.10583 + 0.909495 1.77704 -2.35508 0.0545723 -0.993792 -0.0969456 + 0.988445 1.85505 -2.622 0.665404 -0.663961 -0.341165 + 0.99941 1.89818 -2.6767 0.538185 -0.7392 -0.404895 + 1.01338 1.85759 -2.5856 0.401176 -0.839211 -0.367129 + 0.997619 1.80835 -2.48351 0.424748 -0.870826 -0.247491 + 1.00311 1.78787 -2.37925 0.115823 -0.967061 -0.226668 + 1.03285 1.85781 -2.57419 0.784597 -0.47881 -0.393889 + 1.02907 1.808 -2.43692 0.246043 -0.929671 -0.274179 + 1.01319 1.78128 -2.35383 -0.00934356 -0.905481 -0.424285 + 0.919578 1.77053 -2.32961 -0.0249025 -0.878239 -0.477573 + 0.809791 1.777 -2.32622 -0.184381 -0.982652 -0.0199646 + 0.811545 1.77651 -2.33737 -0.0737089 -0.997265 0.00539728 + 1.04854 1.80823 -2.42551 0.0164932 -0.946946 -0.320968 + 1.05337 1.7853 -2.36599 -0.113349 -0.884727 -0.452118 + 1.01205 1.76204 -2.32391 -0.0818345 -0.780033 -0.620364 + 0.999293 1.74336 -2.30196 -0.114029 -0.669421 -0.73408 + 0.906824 1.75185 -2.30766 -0.150546 -0.811826 -0.564158 + 1.07554 1.80925 -2.43787 -0.112449 -0.939684 -0.32303 + 1.08037 1.78631 -2.37835 -0.967737 -0.200749 -0.152265 + 1.05223 1.76606 -2.33607 -0.501349 -0.547009 -0.670396 + 1.03915 1.7466 -2.31456 -0.693142 -0.0989139 -0.713982 + 0.962187 1.70664 -2.26596 -0.139371 -0.869368 -0.474104 + 0.919208 1.70335 -2.22546 -0.319646 -0.906121 -0.277076 + 0.863845 1.74856 -2.26716 -0.36381 -0.889022 -0.277997 + 1.06729 1.76693 -2.35678 -0.858027 0.0242464 -0.513031 + 0.937719 1.68725 -2.17096 -0.199332 -0.973195 -0.114711 + 0.827367 1.73037 -2.13986 -0.4184 -0.89074 -0.177551 + 1.07554 1.80925 -2.43787 -0.56335 0.754606 0.336462 + 0.845878 1.71427 -2.08536 -0.311218 -0.944863 -0.101862 + 0.780043 1.75154 -2.13453 -0.273662 -0.904408 -0.327346 + 0.816521 1.76973 -2.26183 -0.384722 -0.908388 -0.16377 + 0.906401 1.69126 -2.01231 -0.475823 -0.795449 -0.375304 + 0.814343 1.72146 -2.04842 -0.196403 -0.971376 -0.133618 + 0.765186 1.73346 -2.0804 0.0346962 -0.962277 -0.269849 + 0.729957 1.78796 -2.20421 -0.226103 -0.93998 -0.255567 + 0.811683 1.71602 -2.0232 -0.118898 -0.935009 -0.334098 + 0.762526 1.72793 -2.05523 0.15969 -0.946325 -0.28101 + 0.734326 1.74788 -2.13459 -0.13896 -0.86526 -0.481679 + 0.719806 1.76903 -2.18362 0.458204 -0.758763 -0.462956 + 0.796615 1.70206 -1.98982 -0.0554451 -0.895639 -0.441312 + 0.749727 1.7037 -2.00326 0.277602 -0.893677 -0.352531 + 0.753973 1.66567 -1.91479 -0.0225075 -0.871666 -0.489584 + 0.707085 1.6674 -1.92819 0.566041 -0.774363 -0.282772 + 0.696973 1.63682 -1.87902 0.588237 -0.579241 -0.564319 + 0.692435 1.63725 -1.94316 0.895204 -0.440702 -0.0662708 + 0.679974 1.61528 -1.89451 0.841999 -0.437785 -0.315249 + 0.887944 1.6543 -1.9417 -0.134328 -0.844154 -0.518998 + 0.750584 1.64268 -1.87757 -0.0114864 -0.799686 -0.600308 + 0.940837 1.64332 -1.93428 -0.0750667 -0.864966 -0.496185 + 0.990703 1.64564 -1.9449 -0.0530004 -0.871056 -0.488316 + 0.962247 1.59901 -1.84773 -0.0179635 -0.944272 -0.328675 + 1.0079 1.65625 -1.96487 -0.0247148 -0.857414 -0.514033 + 1.03521 1.60812 -1.87612 -0.0262762 -0.904125 -0.42646 + 1.01211 1.60125 -1.8584 -0.0235787 -0.951236 -0.307562 + 1.01425 1.66841 -1.98473 -0.0150394 -0.85289 -0.521874 + 1.08136 1.64392 -1.93812 0.0100114 -0.864092 -0.503234 + 1.05241 1.61881 -1.89603 0.00499999 -0.871903 -0.489654 + 1.06964 1.60894 -1.87873 -0.0283936 -0.873847 -0.485371 + 1.07751 1.66753 -1.97561 0.0187494 -0.846229 -0.532489 + 1.08771 1.65608 -1.95798 -0.0123419 -0.848289 -0.529389 + 1.11968 1.6542 -1.95813 -0.345921 -0.745367 -0.569882 + 1.09859 1.63405 -1.92082 -0.389466 -0.658427 -0.644042 + 1.12127 1.64042 -1.94785 -0.697529 -0.292428 -0.65417 + 1.08214 1.67944 -1.99584 -0.0257029 -0.871891 -0.489025 + 1.10948 1.66565 -1.97575 -0.146814 -0.867404 -0.475453 + 1.14237 1.66056 -1.98515 -0.297753 -0.833052 -0.466227 + 1.11854 1.68699 -2.02152 -0.243061 -0.815177 -0.525745 + 1.15142 1.68191 -2.03092 -0.260626 -0.854212 -0.449885 + 1.15142 1.68191 -2.03092 -0.285007 -0.757116 -0.587832 + 0.695715 1.8117 -2.16432 -0.84513 -0.49006 -0.213534 + 0.698705 1.81652 -2.21126 -0.929584 -0.364112 0.0574169 + 0.719806 1.76903 -2.18362 -0.932769 -0.329769 0.145584 + 0.705589 1.77883 -2.23698 -0.937332 -0.295927 0.183946 + 0.653716 1.92238 -2.23203 -0.861246 -0.493111 -0.122864 + 0.658388 1.92625 -2.27512 -0.904402 -0.426575 -0.00949785 + 0.684488 1.8263 -2.26462 -0.946262 -0.290834 0.141437 + 0.676987 1.83497 -2.31182 -0.954873 -0.289287 0.0673056 + 0.690866 1.79182 -2.28809 -0.961303 -0.213477 0.174136 + 0.685589 1.8085 -2.33898 -0.531176 -0.840559 -0.106357 + 0.605655 2.0055 -2.31019 -0.727267 -0.679278 0.0983055 + 0.650887 1.9349 -2.32232 -0.898501 -0.396874 0.187583 + 0.636569 1.9364 -2.36351 -0.866627 -0.457012 0.200243 + 0.67171 1.85164 -2.3627 -0.9307 -0.356629 0.081325 + 0.591336 2.007 -2.35139 -0.682898 -0.660177 0.312756 + 0.561598 2.0251 -2.37295 -0.632528 -0.746887 0.205107 + 0.623155 1.94846 -2.40779 -0.818553 -0.516234 0.25194 + 0.658297 1.8637 -2.40698 -0.888783 -0.449241 0.0908186 + 0.688957 1.80989 -2.34959 -0.729614 -0.672942 -0.121705 + 0.689224 1.80532 -2.26088 -0.00198846 -0.99766 -0.0683426 + 0.685856 1.80393 -2.25027 -0.14933 -0.973203 -0.174861 + 0.539496 2.03274 -2.40997 -0.662498 -0.733775 0.150567 + 0.601053 1.95609 -2.44482 -0.781668 -0.581461 0.225607 + 0.645874 1.8849 -2.45391 -0.858388 -0.493948 0.13851 + 0.672911 1.83834 -2.44066 -0.686624 -0.701432 -0.191157 + 0.685333 1.81714 -2.39374 -0.669002 -0.728987 -0.144962 + 0.453322 2.10837 -2.38597 -0.689794 -0.720783 0.0682383 + 0.534164 2.03217 -2.44998 -0.71007 -0.694369 0.116843 + 0.58036 1.97108 -2.48638 -0.776028 -0.592062 0.217355 + 0.625181 1.8998 -2.49552 -0.833791 -0.481988 0.269221 + 0.643558 1.86843 -2.48698 -0.859723 -0.427569 0.279395 + 0.618769 1.88277 -2.53462 -0.859778 -0.428671 0.277529 + 0.509063 2.05246 -2.47973 -0.713164 -0.691593 0.114444 + 0.555258 1.99137 -2.51613 -0.779658 -0.603485 0.16715 + 0.600393 1.91406 -2.54321 -0.836679 -0.504813 0.212445 + 0.605962 1.89597 -2.56588 -0.853097 -0.507039 0.123034 + 0.580257 1.93347 -2.58302 -0.829106 -0.557465 0.0426112 + 0.592234 1.92008 -2.61283 -0.809492 -0.583738 -0.0630373 + 0.481998 2.07939 -2.49098 -0.726315 -0.686515 0.0341247 + 0.535122 2.0107 -2.556 -0.797876 -0.594102 0.102163 + 0.518853 2.02675 -2.59321 -0.787628 -0.611561 0.0750756 + 0.465729 2.09545 -2.52819 -0.729191 -0.682697 0.0469641 + 0.407234 2.16024 -2.42981 -0.594599 -0.803673 -0.0237138 + 0.402023 2.16139 -2.476 -0.480142 -0.866346 0.137509 + 0.460517 2.0966 -2.57438 -0.675891 -0.725099 0.131919 + 0.501171 2.04318 -2.63445 -0.726673 -0.664823 0.173081 + 0.548847 1.974 -2.67123 -0.785996 -0.60498 0.127312 + 0.592978 1.92413 -2.62486 -0.795144 -0.59506 0.116829 + 0.345152 2.19191 -2.33487 -0.373347 -0.917638 -0.136206 + 0.36698 2.17379 -2.47308 -0.186296 -0.961549 0.201787 + 0.440632 2.10339 -2.61014 -0.434183 -0.824771 0.362268 + 0.481286 2.05005 -2.67016 -0.629525 -0.738069 0.242801 + 0.239822 2.18818 -2.24701 0.0848382 -0.993234 -0.0793073 + 0.314309 2.19617 -2.35364 -0.0478683 -0.998108 0.0385948 + 0.321355 2.17099 -2.48582 -0.0239328 -0.966633 0.255046 + 0.364216 2.11959 -2.62621 -0.156134 -0.917783 0.365098 + 0.405589 2.11579 -2.60722 -0.28078 -0.895119 0.346302 + 0.268684 2.19336 -2.36638 0.0556852 -0.996435 0.0633834 + 0.27985 2.16797 -2.5034 0.0425746 -0.963081 0.265825 + 0.322711 2.11657 -2.64377 -0.14093 -0.934372 0.327243 + 0.409211 2.06633 -2.72435 -0.33009 -0.881896 0.336599 + 0.450584 2.06243 -2.70541 -0.43858 -0.811436 0.386289 + 0.168068 2.17779 -2.27101 0.00387069 -0.992617 -0.121228 + 0.23006 2.1897 -2.37884 0.110104 -0.988137 0.107063 + 0.236111 2.15775 -2.51551 0.0530436 -0.966552 0.250924 + 0.290031 2.11226 -2.67471 -0.0791806 -0.951862 0.296123 + 0.136501 2.18334 -2.28403 -0.0499216 -0.994533 -0.0917138 + 0.186321 2.17957 -2.3909 0.0636485 -0.988647 0.13611 + 0.176997 2.15529 -2.54403 -0.153803 -0.964792 0.213357 + 0.21501 2.14396 -2.56281 -0.0813519 -0.956509 0.280129 + 0.087766 2.16911 -2.17837 -0.0710534 -0.972233 -0.222967 + 0.06815 2.17549 -2.20082 -0.0365212 -0.98288 -0.180591 + 0.09723 2.18464 -2.29607 -0.0302796 -0.998604 -0.0432892 + 0.14705 2.18087 -2.40294 -0.112111 -0.991343 0.0683447 + 0.051356 2.1418 -2.06767 -0.0580746 -0.96413 -0.258999 + 0.031741 2.14827 -2.09007 -0.108783 -0.964701 -0.239829 + 0.035064 2.17725 -2.21087 -0.0455962 -0.988311 -0.145476 + 0.064144 2.1864 -2.30612 -0.0394146 -0.997158 -0.0642082 + 0.020866 2.11114 -1.94717 -0.403464 -0.881483 -0.245368 + 0.011392 2.12379 -1.95869 -0.715407 -0.675197 -0.179729 + 0.014718 2.14764 -2.07438 -0.473125 -0.860291 -0.189876 + 0.018041 2.17662 -2.19519 -0.20174 -0.961301 -0.187621 + 0.029223 2.18812 -2.31711 -0.150187 -0.984385 -0.0918098 + 0.002151 2.0946 -1.83072 -0.349107 -0.783439 -0.514147 + 0.002151 2.1184 -1.86854 -0.59547 -0.742069 -0.307814 + 0.002151 2.13624 -1.96643 -0.419138 -0.889477 -0.182082 + 0.005477 2.16008 -2.08213 -0.418278 -0.89195 -0.171661 + 0.005477 2.17994 -2.19533 -0.132208 -0.979458 -0.15226 + -0.002113 2.09469 -1.83067 0.328957 -0.789289 -0.518468 + -0.002113 2.11848 -1.86849 -0.0235515 -0.931561 -0.36282 + -0.002113 2.13632 -1.96638 0.402711 -0.894165 -0.195686 + -0.005484 2.16008 -2.08213 0.395542 -0.897507 -0.195008 + -0.011354 2.12388 -1.95864 0.692403 -0.690699 -0.208595 + -0.002113 2.11848 -1.86849 1 0 0 + -0.031741 2.14827 -2.09007 0.1092 -0.964707 -0.239615 + -0.014725 2.14764 -2.07438 0.475505 -0.857196 -0.197762 + -0.018048 2.17662 -2.19519 0.21306 -0.961856 -0.171577 + -0.005484 2.17994 -2.19533 0.12258 -0.982895 -0.137449 + -0.051356 2.1418 -2.06767 0.0567394 -0.963986 -0.259828 + -0.06815 2.17549 -2.20082 0.0365345 -0.98286 -0.180698 + -0.035064 2.17725 -2.21087 0.0456091 -0.988311 -0.145471 + -0.087766 2.16911 -2.17837 0.0702526 -0.972457 -0.222241 + -0.1365 2.18334 -2.28403 0.0793184 -0.993959 -0.0758595 + -0.097229 2.18464 -2.29606 0.0346223 -0.997773 -0.0570121 + -0.064143 2.1864 -2.30612 0.0292856 -0.997033 -0.0711883 + -0.029223 2.18812 -2.31711 0.125127 -0.991131 -0.0447426 + -0.063854 2.19118 -2.4242 -0.00484698 -0.998882 0.0470204 + -0.016659 2.18512 -2.41971 -0.0572962 -0.99722 0.0476374 + -0.016659 2.19144 -2.31725 0.13125 -0.991112 -0.021707 + 0.01666 2.19144 -2.31725 -0.105249 -0.993016 -0.0533088 + -0.066816 2.18306 -2.56814 0.136549 -0.986821 0.0868206 + -0.019621 2.17709 -2.5636 -0.0644406 -0.997621 0.0244778 + 0.019625 2.17709 -2.5636 0.0423929 -0.997362 0.0589169 + 0.01666 2.18512 -2.41971 0.0660385 -0.996058 0.0592181 + -0.097183 2.16536 -2.59609 0.350658 -0.914514 0.201749 + -0.051781 2.15049 -2.76553 0.546643 -0.818045 0.178838 + -0.019621 2.17927 -2.78057 0.345269 -0.928424 0.137175 + 0.019625 2.17927 -2.78057 -0.362621 -0.926028 0.10478 + -0.082149 2.13271 -2.79353 0.430533 -0.87808 0.208848 + -0.049759 2.11734 -2.9173 0.617215 -0.735984 0.27816 + -0.017598 2.14611 -2.93234 0.369743 -0.864803 0.339713 + 0.017596 2.14611 -2.93234 -0.358336 -0.873881 0.328523 + 0.051785 2.15049 -2.76553 -0.512599 -0.848531 0.131292 + -0.088416 2.09802 -2.89905 0.52097 -0.798956 0.300432 + -0.056759 2.07064 -3.00603 0.557569 -0.760354 0.333136 + -0.017598 2.09191 -3.02626 0.309954 -0.849749 0.426445 + 0.017596 2.09191 -3.02626 -0.302777 -0.850348 0.430388 + -0.095416 2.05133 -2.98778 0.46486 -0.813286 0.349959 + -0.10711 2.02426 -3.03749 0.429799 -0.846141 0.315149 + -0.077283 2.03273 -3.06076 0.507711 -0.837308 0.20284 + -0.038122 2.054 -3.08099 0.428458 -0.836678 0.341166 + 0.012141 2.06244 -3.09041 -0.0630865 -0.724519 0.686361 + -0.153267 2.01711 -3.0097 0.263286 -0.879889 0.395571 + -0.14578 2.00214 -3.05077 0.322576 -0.62977 0.706635 + -0.115954 2.01052 -3.07408 0.44436 -0.870199 0.212834 + -0.177958 2.01103 -3.01177 0.0229328 -0.886177 0.462778 + -0.170472 1.99605 -3.05282 0.126099 -0.162419 0.978631 + -0.16041 1.99245 -3.05039 -0.0634353 0.826033 0.560041 + -0.128186 1.99744 -3.05683 0.0508681 0.898799 0.4354 + -0.115954 2.01052 -3.07408 0.2578 0.673148 0.693117 + -0.20748 1.99752 -3.04978 -0.122397 -0.442876 0.888189 + -0.197418 1.99401 -3.04728 0.0639059 0.805355 0.589337 + -0.138525 1.99565 -3.00174 -0.126523 0.98429 -0.12315 + -0.106301 2.00065 -3.00819 -0.0107928 0.95537 0.295214 + -0.086472 2.01224 -3.08588 -0.0123343 0.900004 0.435707 + -0.074239 2.02532 -3.10312 0.0780137 0.745587 0.661826 + -0.243512 1.99814 -3.05565 -0.0650774 -0.980629 0.184748 + -0.267675 2.00019 -3.07539 -0.278348 -0.901611 0.331088 + -0.221581 1.99605 -3.06703 -0.0759167 -0.99706 -0.0103557 + -0.197418 1.99401 -3.04728 0.547496 -0.434578 -0.715116 + -0.138525 1.99565 -3.00174 0.590231 -0.291836 -0.752635 + -0.325906 1.99664 -3.08165 0.0820147 -0.996547 -0.0129895 + -0.295996 1.99739 -3.09994 -0.460867 -0.349252 0.815858 + -0.244328 1.99334 -3.06154 -0.124772 0.929909 0.345979 + -0.322338 1.99302 -3.04417 0.367126 -0.90602 0.210586 + -0.346889 1.99167 -3.01484 0.193866 -0.973581 -0.120645 + -0.3657 1.98304 -2.9843 0.155747 -0.971517 -0.178596 + -0.319848 1.99731 -3.11521 0.0142549 -0.999747 -0.0174161 + -0.080403 2.00708 -3.02372 -0.206357 0.973241 0.101089 + -0.052009 2.01575 -3.03735 -0.774373 0.343769 -0.531196 + -0.058077 2.02101 -3.09945 -0.166707 0.877136 0.450379 + -0.048219 2.03375 -3.11253 0.0336214 -0.0285343 0.999027 + -0.021961 2.02879 -3.08313 -0.338109 0.882253 0.327586 + -0.012102 2.04153 -3.0962 -0.289705 0.0301424 0.956641 + -0.012102 2.06243 -3.0904 0.013743 -0.970612 0.240255 + -0.074239 2.02532 -3.10312 0.465547 -0.827793 0.313089 + 0.038139 2.05391 -3.08104 -0.476639 -0.807923 0.34652 + 0.056757 2.07064 -3.00603 -0.569344 -0.747539 0.342102 + 0.049757 2.11734 -2.9173 -0.625374 -0.735515 0.260626 + 0.095412 2.05133 -2.98777 -0.460017 -0.811154 0.361127 + 0.088411 2.09802 -2.89905 -0.507649 -0.811172 0.290333 + 0.082143 2.1327 -2.79352 -0.430592 -0.878062 0.2088 + 0.06682 2.18306 -2.56814 -0.107911 -0.986458 0.123515 + 0.1265 2.07915 -2.88575 -0.394793 -0.871917 0.289652 + 0.120232 2.11383 -2.78023 -0.435596 -0.869733 0.231995 + 0.097178 2.16536 -2.59608 -0.350573 -0.914514 0.201899 + 0.128721 2.16379 -2.55435 -0.257283 -0.951991 0.165884 + 0.063855 2.19118 -2.4242 -0.000975231 -0.998607 0.0527618 + 0.188124 2.03604 -2.94528 -0.150306 -0.925153 0.348569 + 0.173055 2.07101 -2.87106 -0.22875 -0.929199 0.290281 + 0.151776 2.11226 -2.73851 -0.288771 -0.927944 0.23565 + 0.229697 2.01313 -2.99641 -0.0932213 -0.95808 0.270912 + 0.243346 2.03958 -2.93603 -0.0896241 -0.936437 0.339196 + 0.216647 2.06227 -2.86133 -0.184957 -0.952038 0.243752 + 0.195368 2.10352 -2.72876 -0.198373 -0.947702 0.25002 + 0.284919 2.01668 -2.98715 -0.149152 -0.942242 0.299888 + 0.326879 2.01322 -2.96456 -0.268307 -0.900392 0.3425 + 0.288908 2.03914 -2.91625 -0.189532 -0.940151 0.283185 + 0.262209 2.06183 -2.84155 -0.116807 -0.950909 0.286581 + 0.332102 1.99229 -3.00532 -0.291332 -0.951267 0.101077 + 0.374062 1.98892 -2.98267 -0.273677 -0.581606 0.766052 + 0.372835 2.01005 -2.93147 -0.283981 -0.909524 0.303515 + 0.334864 2.03597 -2.88316 -0.238648 -0.925878 0.292913 + 0.34688 1.99167 -3.01484 -0.156409 -0.971258 -0.179428 + 0.365691 1.98304 -2.9843 -0.155845 -0.971513 -0.178535 + 0.365691 1.98304 -2.9843 -0.418863 0.366701 0.830713 + 0.098775 2.18937 -2.41326 -0.12522 -0.99134 0.0395571 + 0.233381 2.09228 -2.74749 -0.0990519 -0.957195 0.271969 + 0.26893 2.09856 -2.72197 -0.065376 -0.954634 0.290517 + 0.33765 2.06849 -2.78469 -0.215051 -0.92693 0.307496 + 0.297758 2.06811 -2.81603 -0.139598 -0.940116 0.310956 + 0.374756 2.03635 -2.85183 -0.28497 -0.910517 0.299585 + 0.419196 2.03027 -2.8191 -0.367728 -0.882284 0.293855 + 0.37033 2.07271 -2.7538 -0.270668 -0.913019 0.305181 + 0.411303 2.00472 -2.90865 -0.30848 -0.906146 0.289377 + 0.455743 1.99864 -2.87592 -0.440521 -0.871775 0.214361 + 0.48825 1.98423 -2.84176 -0.544509 -0.815323 0.19687 + 0.458077 2.02381 -2.7897 -0.48864 -0.831724 0.263563 + 0.496391 2.00565 -2.75105 -0.626191 -0.738698 0.249418 + 0.45669 1.97413 -2.95585 -0.285572 -0.866724 0.408949 + 0.481213 1.9705 -2.93378 -0.414682 -0.893845 0.170531 + 0.51372 1.95601 -2.89967 -0.735211 -0.660761 0.151195 + 0.526564 1.96599 -2.80317 -0.749502 -0.626188 0.214791 + 0.418222 1.97945 -2.97868 -0.268608 -0.616232 0.740343 + 0.436121 1.96422 -2.97889 -0.412185 -0.536924 0.736082 + 0.462167 1.9588 -2.9683 0.337973 -0.517308 0.786236 + 0.483244 1.9587 -2.99094 -0.099222 -0.98363 0.150426 + 0.507767 1.95508 -2.96886 -0.21824 -0.9754 -0.0310735 + 0.508552 1.94894 -2.92703 -0.919444 0.386207 0.0739347 + 0.391961 1.97369 -2.9829 -0.119741 -0.155146 0.980608 + 0.365691 1.98304 -2.9843 -0.0994297 -0.131447 0.986324 + 0.517137 1.95856 -3.00009 -0.0538259 -0.990492 -0.126603 + 0.517922 1.95242 -2.95825 -0.109137 -0.98378 -0.142361 + 0.508552 1.94894 -2.92703 -0.109161 -0.98378 -0.142338 + 0.571224 1.94331 -2.66948 -0.79599 -0.587679 0.145031 + 0.527093 1.99318 -2.71585 -0.791332 -0.451765 0.411949 + 0.556864 1.94751 -2.74135 -0.744495 -0.641418 0.185232 + 0.609047 1.90942 -2.58578 -0.474647 -0.879605 0.0317055 + 0.700579 1.79093 -2.19915 -0.144659 -0.952667 -0.267395 + 0.717862 1.79902 -2.24636 -0.19776 -0.9714 -0.131429 + 0.804427 1.78079 -2.30399 -0.407845 -0.913024 -0.00711501 + 0.731574 1.796 -2.30293 -0.220019 -0.974287 0.0485341 + 0.736939 1.79212 -2.32521 -0.171861 -0.901383 0.397458 + 0.739461 1.78442 -2.33447 -0.183961 -0.938257 0.292972 + 0.741214 1.78393 -2.34562 -0.189176 -0.976166 -0.106364 + 0.702936 1.8023 -2.31744 0.536282 -0.760112 0.366922 + 0.705458 1.7946 -2.32671 -0.346331 -0.913361 0.214073 + 0.707916 1.79867 -2.37156 -0.373513 -0.908516 -0.187316 + 0.743874 1.78945 -2.37079 -0.203501 -0.961387 -0.185264 + 0.777424 1.78561 -2.40034 -0.261454 -0.949836 -0.171622 + 0.701834 1.80185 -2.37086 -0.531235 -0.834439 -0.146633 + 0.678992 1.83517 -2.44137 -0.470099 -0.831225 -0.296768 + 0.710576 1.80419 -2.39672 -0.346261 -0.851567 -0.39362 + 0.661899 1.8537 -2.45587 -0.45384 -0.76975 -0.448903 + 0.693482 1.82274 -2.41123 -0.357646 -0.724737 -0.588936 + 0.715772 1.8243 -2.42795 -0.417218 -0.773273 -0.477471 + 0.766587 1.80198 -2.44288 -0.420047 -0.840071 -0.343281 + 0.66167 1.87441 -2.44634 -0.405396 -0.773493 -0.487199 + 0.750759 1.86051 -2.52226 -0.472392 -0.813009 -0.340386 + 0.63938 1.87276 -2.42967 -0.272151 -0.793003 -0.545051 + 0.64211 1.89408 -2.4698 -0.166273 -0.924298 -0.343551 + 0.731199 1.88017 -2.54571 -0.474357 -0.869574 -0.137207 + 0.621039 1.88748 -2.46078 0.0885132 -0.891278 -0.444735 + 0.608231 1.90077 -2.492 -0.04725 -0.973987 -0.221623 + 0.63728 1.90316 -2.52174 -0.182826 -0.975969 -0.118569 + 0.6372 1.90475 -2.54868 -0.228304 -0.973585 -0.00300028 + 0.604146 1.91391 -2.55595 0.150155 -0.974546 -0.166474 + 0.642102 1.90017 -2.57856 -0.254315 -0.963386 0.0849251 + 0.592234 1.92008 -2.61283 0.629907 -0.746916 -0.212916 + 0.592978 1.92413 -2.62486 0.629913 -0.746911 -0.212917 + 0.980616 1.61008 -1.44111 0.759422 0.366883 0.537284 + 1.00949 1.57435 -1.40242 -0.0864719 0.698867 0.710005 + 1.04089 1.60615 -1.42989 -0.101678 0.632006 0.768264 + 0.981022 1.60948 -1.42407 0.946317 -0.023956 -0.322352 + 1.00949 1.57435 -1.40242 0.775835 0.630926 0.00358046 + 1.0099 1.57375 -1.38538 0.755706 -0.609669 -0.239191 + 1.00949 1.57435 -1.40242 0.465199 -0.884194 -0.0423172 + -0.915918 1.85125 -0.681822 -0.971441 -0.2338 -0.0405009 + -0.920037 1.95183 -0.55663 -0.995019 -0.0961423 0.0263379 + -0.92271 1.96082 -0.624798 -0.999424 -0.0187193 0.028308 + -0.924635 2.00506 -0.519026 -0.954455 0.0669949 -0.290736 + -0.927308 2.01413 -0.587145 -0.994889 -0.081764 -0.0592547 + -0.927079 2.0888 -0.602681 -0.978241 0.0251031 -0.205949 + -0.920312 2.0305 -0.651286 -0.994058 0.0651446 -0.087207 + -0.929869 1.89636 -0.656157 -0.997049 -0.0766943 -0.00330807 + -0.940043 2.06386 -0.530873 -0.954912 -0.151628 -0.255248 + -0.939814 2.13853 -0.546399 -0.945401 -0.0122623 -0.325679 + -0.917013 2.20864 -0.606034 -0.919853 0.121785 -0.37288 + -0.910245 2.15041 -0.65459 -0.938109 0.168784 -0.302428 + -0.948391 2.01676 -0.468093 -0.468949 -0.844946 -0.257204 + -0.963799 2.07547 -0.479989 -0.884744 -0.118253 -0.450826 + -0.964867 2.1885 -0.493562 -0.913728 -0.0286139 -0.405318 + -0.936145 2.27055 -0.554076 -0.878188 0.0606318 -0.474457 + -0.910296 1.95936 -0.588676 -0.757762 0.463024 -0.459788 + -1.42465 1.65393 0.554738 0.158651 -0.348461 -0.923799 + -1.33145 1.63145 0.543685 -0.0662636 -0.755799 -0.651442 + -1.36103 1.64833 0.656244 -0.44662 -0.894571 0.0165496 + -1.42107 1.71157 0.51291 -0.341219 -0.537438 -0.771187 + -1.32788 1.68917 0.501908 -0.499495 -0.749325 -0.43476 + -1.24213 1.58922 0.591819 0.152189 -0.58564 -0.796156 + -1.4907 1.74001 0.544657 -0.49971 -0.517585 -0.694547 + -1.47947 1.78026 0.487332 -0.513283 -0.578693 -0.633763 + -1.3416 1.70969 0.431165 -0.247209 -0.720373 -0.648036 + -1.25585 1.60974 0.521077 -0.733074 -0.677962 -0.0544878 + -1.24213 1.58922 0.591819 -0.733074 -0.677962 -0.0544896 + -1.55876 1.75007 0.57343 -0.274106 0.0021195 -0.961697 + -1.55474 1.7939 0.567707 -0.574034 -0.467154 -0.672497 + -1.5491 1.8087 0.519079 -0.558101 -0.675418 -0.48201 + -1.48119 1.81453 0.465381 -0.403333 -0.407991 -0.819064 + -1.34332 1.74387 0.409165 0.172048 -0.0571056 -0.983432 + -1.54673 1.70181 0.56561 -0.125475 0.235197 -0.963815 + -1.72344 1.78891 0.607946 0.0614365 0.200849 -0.977694 + -1.73866 1.86406 0.624396 -0.0594945 -0.0861165 -0.994507 + -1.62279 1.80396 0.596478 -0.258931 -0.0251385 -0.965569 + -1.63474 1.85424 0.577997 -0.531421 -0.600955 -0.597029 + -1.5057 1.64402 0.533103 0.00407243 0.4744 -0.8803 + -1.67239 1.66973 0.591376 -0.0118551 0.3349 -0.942179 + -1.71141 1.74066 0.600128 -0.0154851 0.123927 -0.99217 + -1.84873 1.84604 0.584596 0.346673 0.132744 -0.928545 + -1.55433 1.51188 0.462787 0.0783771 0.182104 -0.98015 + -1.78626 1.7063 0.586033 0.116068 0.148598 -0.982063 + -1.82528 1.77714 0.594734 0.284094 0.125119 -0.950598 + -1.47328 1.52179 0.484423 0.576575 0.04319 -0.815902 + -1.4852 1.45922 0.489986 0.674998 0.159123 -0.720457 + -1.6279 1.51032 0.455686 -0.361603 -0.319779 -0.875777 + -1.58157 1.5563 0.524846 0.0200238 0.749896 -0.661252 + -1.36103 1.64833 0.656244 0.718026 -0.156207 -0.678261 + -1.37295 1.58577 0.661806 0.906335 -0.102093 -0.410041 + -1.4117 1.40588 0.573584 0.890971 0.0662854 -0.449195 + -1.44611 1.34345 0.496517 0.862761 0.182988 -0.471338 + -1.51962 1.39679 0.412919 0.598471 0.554336 -0.578398 + -1.60378 1.4514 0.414339 0.252118 0.685964 -0.682561 + -1.6785 1.53268 0.464751 -0.0695768 0.427526 -0.901321 + -1.35441 1.57088 0.718197 0.895974 -0.14791 -0.418751 + -1.39315 1.39099 0.629975 0.925882 -0.376372 0.0329614 + -1.43263 1.30966 0.516243 0.751217 -0.630082 -0.196646 + -1.51069 1.33656 0.353853 0.736424 0.451479 -0.503832 + -1.42226 1.38717 0.695585 0.901474 -0.432822 -0.00318933 + -1.37611 1.46992 0.725658 0.613776 -0.264279 -0.743933 + -1.38745 1.42682 0.758114 0.291409 -0.549019 -0.783364 + -1.43361 1.34407 0.72804 0.871131 -0.370591 -0.322169 + -1.4716 1.28252 0.647242 0.807773 -0.588772 0.0291533 + -1.46161 1.25622 0.403406 0.971141 -0.229602 0.0645576 + -1.47147 1.2329 0.468794 0.970547 -0.240874 -0.0042273 + -1.33033 1.32237 0.775818 -0.0139062 -0.260345 -0.965415 + -1.36663 1.3271 0.796625 -0.0331493 -0.312713 -0.949269 + -1.40545 1.33244 0.772376 0.608169 -0.300587 -0.734696 + -1.42922 1.26703 0.791681 0.265653 -0.4725 -0.84034 + -1.45738 1.27865 0.747345 0.628655 -0.713754 -0.308783 + -1.30379 1.01935 0.842075 -0.701042 -0.274019 -0.658372 + -1.3401 1.02416 0.862932 -0.26384 -0.291012 -0.91962 + -1.39111 1.13398 0.83733 0.120392 -0.243485 -0.962404 + -1.38463 1.23273 0.810888 0.449948 -0.263087 -0.853424 + -1.25658 1.00816 0.761047 -0.816984 -0.227274 -0.529984 + -1.23493 0.81986 0.848598 -0.3394 -0.739154 -0.581773 + -1.28214 0.831044 0.929626 -0.572969 -0.185011 -0.798422 + -1.34743 0.893034 0.898256 0.0404228 -0.329513 -0.943285 + -1.27955 1.43341 0.724495 -0.787108 -0.264702 -0.55713 + -1.2275 1.01816 0.717136 -0.668107 -0.322756 -0.670419 + -1.19119 0.851915 0.802477 0.177938 -0.726068 -0.664201 + -1.19143 0.74391 1.06795 0.121434 -0.810634 -0.572823 + -1.32722 0.760374 0.965028 -0.103016 -0.722529 -0.683622 + -1.37295 1.58577 0.661806 -0.603513 -0.590461 -0.535843 + -1.49721 1.30268 0.373529 0.902449 0.118537 -0.414167 + -1.26058 1.67037 0.479465 0.748008 -0.111949 -0.654179 + -1.27974 1.74305 0.504183 0.532834 -0.346579 -0.771991 + -1.19027 1.54224 0.680788 0.641162 -0.279753 -0.714598 + -1.25585 1.60974 0.521077 0.855809 -0.245671 -0.455232 + -1.36248 1.81655 0.433883 0.428058 0.603827 -0.672428 + -1.40002 1.84843 0.43166 0.645561 0.762778 0.0376799 + -1.51874 1.84632 0.463109 -0.371993 -0.682685 -0.628937 + -1.40002 1.84843 0.43166 -0.31818 -0.808407 -0.495216 + -1.6096 1.89578 0.469648 -0.532898 -0.672036 -0.514185 + -1.49371 1.87369 0.4009 -0.342336 -0.911483 -0.228044 + -1.45697 1.86202 0.356314 -0.354889 -0.929502 0.100401 + -1.36329 1.83676 0.387075 -0.505364 -0.851676 0.138762 + -1.26813 1.77022 0.467517 -0.65214 -0.740768 -0.161171 + -1.62911 1.86903 0.52937 -0.601119 -0.697692 -0.389719 + -1.71663 1.98444 0.482682 -0.280927 -0.831833 -0.47868 + -1.70041 2.01636 0.421399 -0.302824 -0.874058 -0.379895 + -1.58458 1.92315 0.407439 -0.55551 -0.750692 -0.357589 + -1.4805 1.86989 0.323886 -0.530858 -0.844972 -0.0649066 + -1.73614 1.95778 0.542455 -0.386941 -0.789641 -0.476177 + -1.85217 2.01488 0.387354 -0.221925 -0.975061 -0.0020898 + -1.82237 2.0239 0.372136 0.209587 -0.926501 -0.312521 + -1.80615 2.05582 0.310853 0.260895 -0.927769 -0.266794 + -1.68151 2.01991 0.357853 -0.516562 -0.856238 0.00441094 + -1.75061 1.91433 0.605915 -0.198178 -0.546767 -0.813493 + -1.86303 1.97649 0.569659 0.0790728 -0.655159 -0.751342 + -1.84856 2.01994 0.506199 -0.282637 -0.901608 -0.327445 + -1.86395 1.92119 0.601046 0.292483 -0.153384 -0.943889 + -1.9859 2.03839 0.470843 0.378025 -0.690931 -0.616208 + -1.97685 2.07276 0.415306 0.134482 -0.934255 -0.330275 + -1.98985 2.08774 0.344357 -0.133822 -0.991001 -0.00308779 + -1.86155 2.03492 0.43525 -0.59574 -0.802765 0.0257306 + -1.97939 1.91008 0.527281 0.55678 -0.0870311 -0.826088 + -1.98682 1.983 0.502179 0.573622 -0.319895 -0.754073 + -2.10785 2.01579 0.369994 0.72488 -0.523015 -0.448336 + -2.09749 2.04099 0.300132 0.612565 -0.7504 -0.248322 + -2.08845 2.07545 0.244645 0.631907 -0.753134 -0.18298 + -1.95594 1.84118 0.537418 0.318832 -0.267833 -0.909182 + -2.11899 1.92745 0.436187 0.487515 -0.601926 -0.632466 + -2.10042 1.94287 0.395095 0.480734 -0.688386 -0.543158 + -2.21448 1.97213 0.146212 0.340431 -0.938293 -0.0609351 + -2.20412 1.99725 0.076298 0.422197 -0.904346 -0.0625178 + -1.92435 1.7883 0.580401 0.0339354 -0.222883 -0.974254 + -2.0874 1.87467 0.479219 0.111452 -0.663774 -0.739582 + -2.25096 1.97584 0.273977 -0.0299687 -0.985607 -0.166376 + -2.23239 1.99125 0.232885 -0.118591 -0.992596 -0.026269 + -1.73074 1.64424 0.584322 0.0741838 0.316941 -0.94554 + -1.86882 1.72633 0.57874 0.513882 0.526135 -0.677574 + -1.84301 1.69247 0.546183 0.315118 0.669452 -0.672706 + -1.89362 1.71493 0.555299 0.0694684 0.222082 -0.97255 + -2.06103 1.82402 0.535744 0.404489 -0.204117 -0.891474 + -1.68095 1.58851 0.550251 0.225784 0.686037 -0.691647 + -1.65514 1.55474 0.517745 0.280253 0.801447 -0.528338 + -2.11446 1.66752 0.536 -0.668628 -0.425153 0.610067 + -2.07944 1.69408 0.561203 -0.540933 -0.521962 0.659506 + -2.17596 1.71816 0.505099 -0.520638 -0.116165 0.845838 + -2.06416 1.6055 0.555424 -0.736878 -0.396759 0.547351 + -2.02915 1.63206 0.580626 -0.619384 -0.25349 0.743038 + -1.99323 1.67405 0.641699 -0.679049 -0.496245 0.540956 + -2.03536 1.72045 0.660326 -0.396191 -0.82836 0.396045 + -2.09294 1.7091 0.57958 -0.341504 -0.883916 0.31948 + -2.17596 1.71816 0.505099 -0.49317 -0.804002 0.33221 + -2.05331 1.58948 0.539777 -0.539813 -0.340268 -0.769948 + -2.03335 1.52095 0.551873 -0.928457 -0.2446 0.279532 + -1.97254 1.54083 0.602234 -0.716622 -0.156022 0.679787 + -1.93662 1.58282 0.663307 -0.960484 -0.0456554 0.274564 + -2.08416 1.6346 0.53063 -0.525064 -0.671323 -0.5231 + -1.92623 1.52555 0.55051 -0.171319 -0.160066 -0.972126 + -2.0225 1.50484 0.536176 -0.468757 -0.0323017 -0.882736 + -2.02235 1.43909 0.554258 -0.978711 -0.187128 0.084304 + -1.96154 1.45906 0.604668 -0.93673 0.228917 0.264827 + -2.14566 1.68514 0.49968 -0.472258 -0.603201 -0.642744 + -1.95708 1.57075 0.541413 -0.064221 -0.166665 -0.98392 + -1.81379 1.44762 0.531278 -0.346612 -0.0335845 -0.937407 + -1.87226 1.48096 0.546936 -0.240218 -0.125874 -0.962523 + -0.798114 2.04695 0.249812 0.582907 -0.482716 -0.653609 + -0.905691 2.11918 0.074307 0.678748 0.724874 -0.117722 + -0.846312 2.08542 0.208784 0.87355 0.292197 -0.38927 + -0.738912 2.12985 0.321833 0.667648 0.0013291 -0.744476 + -0.690714 2.09138 0.362861 0.713596 -0.0775135 -0.696256 + -0.675598 2.02754 0.398431 0.658085 -0.394429 -0.641366 + -0.815225 2.03678 0.260635 0.448631 -0.71777 -0.532481 + -0.905691 2.11918 0.074307 0.10775 -0.933094 -0.343112 + -0.804951 2.14597 0.266304 0.718092 0.128867 -0.683913 + -0.579075 2.25846 0.43007 0.496331 -0.498872 -0.71048 + -0.547216 2.19947 0.491447 0.522684 -0.400135 -0.75279 + -0.5321 2.13554 0.526966 0.50735 -0.165553 -0.845688 + -0.645114 2.2745 0.37449 0.588502 -0.17204 -0.789979 + -0.4687 2.2542 0.479834 -0.365837 -0.796584 -0.481267 + -0.9191 1.77532 -0.757703 -0.921344 0.26709 0.282469 + -0.938901 1.7913 -0.829386 -0.967888 0.120528 0.220604 + -0.927779 1.73612 -0.733023 -0.859058 0.395144 0.325392 + -0.919516 1.81726 -0.779352 -0.970921 0.0678472 0.229586 + -0.939318 1.83324 -0.851034 -0.993218 0.116063 0.00684519 + -0.945445 1.76854 -0.856961 -0.99584 0.0460393 0.0786314 + -0.927779 1.73612 -0.733023 -0.982974 0.0857149 0.162529 + -0.942828 1.68755 -0.866885 -0.998141 -0.0411133 0.04499 + -0.906177 1.85878 -0.71386 -0.977632 -0.0166357 0.209664 + -0.914713 1.86018 -0.745692 -0.99153 -0.0836206 0.0993798 + -0.926983 1.90829 -0.818027 -0.993211 0.112422 0.0299023 + -0.908131 1.97388 -0.863228 -0.94228 0.295835 -0.156816 + -0.920465 1.89883 -0.896237 -0.96343 0.259979 -0.0649091 + -0.935194 1.85775 -0.932285 -0.962114 0.265406 0.0624215 + -0.947421 1.79744 -0.917223 -0.994183 0.101227 0.0367764 + -0.92218 1.95121 -0.784367 -0.991157 0.125322 0.0436205 + -0.889057 2.0438 -0.824329 -0.920411 0.323342 -0.219759 + -0.853357 2.06532 -0.916001 -0.904602 0.40171 -0.142567 + -0.881246 1.99862 -0.951473 -0.921489 0.379427 -0.0830305 + -0.895974 1.95763 -0.987472 -0.920106 0.390474 0.0305702 + -0.911212 2.02207 -0.740895 -0.968058 0.180607 -0.17391 + -0.87809 2.11465 -0.780856 -0.905549 0.336539 -0.258307 + -0.834284 2.13524 -0.87711 -0.877909 0.411532 -0.244781 + -0.794945 2.19464 -0.931195 -0.908282 0.409743 -0.0844633 + -0.825763 2.12504 -0.97444 -0.912184 0.409762 -0.00392631 + -0.928664 1.90521 -0.720078 -0.967429 -0.0535973 -0.247402 + -0.927471 1.96604 -0.682646 -0.995367 0.0887608 -0.0369671 + -0.910019 2.0829 -0.703454 -0.948029 0.185944 -0.258197 + -0.867241 2.18075 -0.73473 -0.861721 0.329599 -0.385748 + -0.808844 2.2017 -0.834823 -0.854692 0.437788 -0.279004 + -0.867467 2.24817 -0.685917 -0.821212 0.306916 -0.481055 + -0.797996 2.26779 -0.788689 -0.816448 0.413034 -0.403504 + -0.742346 2.33211 -0.841297 -0.895377 0.381106 -0.230344 + -0.769506 2.2611 -0.8889 -0.896867 0.427295 -0.114234 + -0.879963 2.30651 -0.635553 -0.798769 0.254947 -0.544951 + -0.790321 2.32833 -0.73795 -0.783134 0.401007 -0.475284 + -0.734671 2.39274 -0.790508 -0.835662 0.436833 -0.332934 + -0.723082 2.36367 -0.89277 -0.952793 0.234904 0.19237 + -0.750241 2.29266 -0.940374 -0.93994 0.240587 0.242137 + -0.899095 2.36842 -0.583594 -0.744534 0.122759 -0.6562 + -0.802816 2.38658 -0.687645 -0.712985 0.287553 -0.639504 + -0.724962 2.45691 -0.737052 -0.775946 0.283106 -0.563701 + -0.683658 2.44041 -0.844285 -0.952871 0.272195 0.133969 + -0.943494 2.41256 -0.535238 -0.757947 0.0332098 -0.65147 + -0.843535 2.43289 -0.63406 -0.688584 0.153698 -0.708681 + -0.76568 2.50322 -0.683475 -0.628235 0.296858 -0.719164 + -0.673949 2.50458 -0.790829 -0.965184 0.246424 -0.0877197 + -0.961197 2.32062 -0.501188 -0.859715 -0.0457565 -0.50872 + -0.98843 2.44837 -0.481262 -0.618629 -0.390629 -0.681694 + -0.887934 2.47711 -0.585654 -0.605344 -0.0538717 -0.794139 + -0.798624 2.54457 -0.643083 -0.510764 0.1197 -0.851347 + -0.640952 2.57393 -0.734741 -0.958912 0.202906 -0.198285 + -0.989645 2.23551 -0.440186 -0.916228 -0.0672446 -0.394974 + -1.00613 2.35642 -0.447203 -0.88277 -0.081908 -0.46261 + -1.02405 2.3753 -0.403114 -0.918116 -0.253661 -0.304499 + -1.04836 2.45826 -0.454405 -0.665428 -0.475437 -0.575469 + -0.960276 2.50357 -0.553475 -0.434735 -0.480003 -0.761972 + -0.988577 2.12248 -0.426613 -0.934876 -0.0052776 -0.354934 + -1.00756 2.25448 -0.396038 -0.971597 -0.094175 -0.217095 + -1.01663 2.3143 -0.349446 -0.951964 -0.210719 -0.222177 + -1.03504 2.35087 -0.329394 -0.815363 -0.303482 -0.493033 + -1.04245 2.41196 -0.383011 -0.765655 -0.543822 -0.343555 + -1.00104 1.98792 -0.415936 -0.496606 -0.799198 -0.338622 + -1.018 2.02083 -0.35915 -0.965877 -0.258968 -0.00407133 + -1.00554 2.1554 -0.369826 -0.967887 0.00481509 -0.251339 + -0.991923 2.00152 -0.299495 -0.195315 -0.878073 0.436853 + -1.00945 2.09254 -0.276952 -0.968933 -0.19708 0.149428 + -1.01462 2.2153 -0.323177 -0.989167 -0.0561285 -0.135639 + -0.910296 1.95936 -0.588676 -0.140828 -0.910463 0.388876 + -0.983372 2.07331 -0.217248 -0.868739 -0.417688 0.266137 + -1.02436 2.14526 -0.215457 -0.94804 -0.314095 -0.0506466 + -1.02953 2.26801 -0.26168 -0.851984 -0.313542 -0.419303 + -1.06899 2.33969 -0.284833 -0.692449 -0.464131 -0.552355 + -1.08109 2.40086 -0.315784 -0.531204 -0.658702 -0.532855 + -0.985891 2.14995 -0.042786 -0.0406279 -0.98201 0.184409 + -1.0088 2.10705 -0.139893 -0.602097 -0.76224 0.237632 + -1.03829 2.21156 -0.143494 -0.863502 -0.504267 -0.00885052 + -1.08053 2.27656 -0.209287 -0.748895 -0.537308 -0.387887 + -1.11999 2.34824 -0.23243 -0.550238 -0.587228 -0.593635 + -0.905691 2.11918 0.074307 -0.559876 -0.810866 0.170398 + -0.939812 1.7023 0.659365 0.856444 0.472057 -0.208964 + -1.02368 1.78898 0.511438 0.875293 0.159408 -0.456564 + -1.07094 1.86141 0.481375 0.853731 0.506002 -0.122905 + -1.07689 1.85796 0.419351 0.895538 0.126612 -0.426592 + -1.12415 1.9304 0.389289 0.870411 0.488948 0.0575688 + -1.17438 2.06327 0.257947 0.900989 0.163297 -0.401936 + -1.18352 2.10173 0.282137 0.975216 0.190671 -0.112247 + -1.1333 1.96885 0.413481 0.869201 0.494442 0.00400529 + -1.07094 1.86141 0.481375 0.466296 -0.263077 -0.844606 + -1.08471 1.76643 0.448892 0.644822 -0.371989 -0.667704 + -1.19886 1.96262 0.243077 0.696707 -0.225157 -0.681105 + -1.26321 2.0167 0.155611 0.652707 -0.227057 -0.722786 + -1.23873 2.11735 0.170481 0.741797 -0.0562659 -0.66826 + -0.963729 1.67169 0.607384 0.748538 -0.209375 -0.629168 + -1.08988 1.68747 0.501654 0.334339 -0.70916 -0.620733 + -1.20667 1.87117 0.272668 0.581034 -0.372146 -0.723814 + -1.30139 1.91958 0.191021 0.260718 -0.473027 -0.841588 + -0.879863 1.58501 0.755312 0.511077 -0.277831 -0.813394 + -0.897106 1.49916 0.727805 0.499125 -0.113589 -0.859053 + -0.9689 1.59273 0.660146 0.26412 -0.489588 -0.83099 + -1.11069 1.64926 0.56604 -0.104398 -0.871487 -0.479177 + -1.25634 1.77205 0.302146 0.280348 -0.705549 -0.65085 + -0.939812 1.7023 0.659365 0.88661 0.080599 -0.455441 + -1.02369 1.81801 0.51875 0.389526 -0.319725 -0.863739 + -2.01921 2.08801 0.063897 0.891652 -0.363071 -0.270437 + -2.05462 2.14025 -0.122982 0.706738 -0.521509 -0.478068 + -2.02297 2.22611 -0.133903 0.307269 -0.652945 -0.692278 + -2.11 2.13872 -0.166128 -0.0225143 -0.134814 -0.990615 + -2.07834 2.22467 -0.176999 -0.234222 -0.0311514 -0.971684 + -1.99525 2.25385 -0.159755 0.368819 -0.473768 -0.799698 + -2.00431 2.06925 -0.007613 -0.435439 -0.782534 -0.445009 + -2.01921 2.08801 0.063897 -0.963397 -0.228058 -0.140913 + -2.1564 2.07049 -0.153557 0.272909 -0.420879 -0.86509 + -2.21245 2.05771 -0.140023 -0.285395 0.204076 -0.936431 + -2.15347 2.13098 -0.122723 -0.474097 0.330843 -0.81595 + -2.11643 2.21115 -0.126387 -0.731772 0.290711 -0.616439 + -2.0413 2.30484 -0.180664 -0.33293 -0.033589 -0.942353 + -2.08449 2.10682 -0.082678 0.622944 -0.738172 -0.258925 + -2.20285 2.00328 -0.128748 0.393814 -0.715142 -0.577479 + -2.25885 1.98948 -0.127453 0.0654146 -0.410799 -0.909376 + -2.28707 2.03025 -0.12807 0.0726322 0.0373063 -0.996661 + -2.22809 2.10343 -0.110819 -0.108063 0.451365 -0.885772 + -2.04908 2.05457 0.10421 -0.394549 -0.904236 -0.163367 + -2.01921 2.08801 0.063897 0.445365 -0.822987 -0.352623 + -1.96677 2.0257 0.223427 -0.477639 -0.864623 0.155847 + -1.97616 2.04573 0.271322 -0.576478 -0.770909 0.270873 + -2.06277 2.09659 0.177242 -0.0374822 -0.993785 0.104814 + -2.08449 2.10682 -0.082678 -0.913318 -0.402732 0.0604703 + -2.13094 2.03961 -0.057868 0.669738 -0.722122 -0.173179 + -1.95187 2.00685 0.151865 -0.29087 -0.949658 -0.116377 + -1.92207 2.01587 0.136647 0.26746 -0.928651 -0.257044 + -1.90933 2.03896 0.068049 0.0729942 -0.964419 -0.254103 + -2.01921 2.08801 0.063897 -0.772591 -0.634878 0.00569207 + -1.9766 2.09699 -0.033465 -0.181133 -0.798418 -0.574212 + -1.96385 2.12008 -0.10206 -0.502451 -0.590536 -0.631514 + -1.88992 2.05432 0.003641 0.175826 -0.91176 -0.371186 + -1.78673 2.07109 0.246399 -0.195834 -0.98047 0.0180721 + -1.95888 2.33143 -0.179713 -0.160192 -0.365857 -0.916781 + -1.91703 2.39073 -0.221035 -0.199487 -0.259334 -0.944961 + -1.922 2.17939 -0.143383 -0.0811221 -0.538241 -0.838878 + -1.84277 2.10366 -0.031417 0.0408099 -0.879235 -0.474636 + -2.00493 2.38241 -0.200621 -0.402876 -0.110237 -0.908591 + -1.98115 2.45802 -0.212777 -0.401571 0.0593372 -0.913904 + -1.84323 2.43208 -0.244655 -0.338361 -0.225106 -0.913695 + -1.87485 2.22873 -0.178439 -0.194052 -0.47996 -0.855559 + -2.08929 2.29985 -0.133025 -0.702724 0.137258 -0.698097 + -2.06551 2.37554 -0.14513 -0.649134 -0.0154919 -0.760516 + -2.06646 2.47435 -0.164459 -0.589917 -0.069556 -0.804463 + -1.90735 2.49937 -0.236397 -0.324489 -0.273372 -0.905524 + -1.78377 2.48357 -0.285444 -0.551084 -0.389166 -0.738144 + -2.18137 2.18104 -0.066045 -0.610975 0.487603 -0.623661 + -2.15423 2.26975 -0.072682 -0.746867 0.132608 -0.651617 + -2.14124 2.36422 -0.079906 -0.739422 -0.0379092 -0.672174 + -2.1422 2.46302 -0.099236 -0.724802 -0.136636 -0.675272 + -2.01558 2.518 -0.205467 -0.451924 -0.352835 -0.819312 + -2.22713 2.13299 -0.089216 -0.106504 0.701112 -0.705052 + -2.23721 2.19597 -0.019299 -0.401947 0.577828 -0.710319 + -2.20792 2.29565 0.00465 -0.754194 0.195071 -0.627008 + -2.19493 2.39012 -0.002574 -0.82334 -0.045999 -0.565681 + -2.19766 2.49044 -0.027537 -0.819587 -0.122525 -0.559701 + -2.34943 2.14379 -0.120915 0.20603 0.815703 -0.540537 + -2.28297 2.148 -0.04242 0.0294366 0.754191 -0.655995 + -2.39238 2.16494 -0.055148 0.0178468 0.996255 -0.0846045 + -2.29868 2.23092 0.067564 -0.715059 0.543131 -0.440113 + -2.26939 2.33052 0.091463 -0.780482 0.159953 -0.60437 + -2.35039 2.11423 -0.142518 0.187993 0.291966 -0.937771 + -2.45884 2.16073 -0.133652 0.464929 0.746119 -0.4766 + -2.34741 1.98765 -0.137876 0.0395935 -0.34346 -0.938332 + -2.41073 2.07162 -0.152324 0.417677 0.0289103 -0.908135 + -2.47436 2.13853 -0.208818 0.692414 0.4631 -0.553264 + -2.57149 2.19664 -0.189667 0.368222 0.929039 -0.0360333 + -2.41388 1.93289 -0.102239 0.117337 -0.726642 -0.676922 + -2.46026 1.99781 -0.192677 0.407568 -0.490041 -0.770551 + -2.52389 2.06472 -0.24917 0.562199 -0.435811 -0.702852 + -2.57622 2.1621 -0.327435 0.864073 0.345566 -0.366008 + -2.58701 2.17446 -0.264832 0.691813 0.691644 -0.20742 + -2.32532 1.93473 -0.091815 0.282242 -0.835506 -0.471454 + -2.4752 1.90394 -0.065482 -0.184357 -0.928635 -0.321946 + -2.52159 1.96885 -0.155921 -0.216449 -0.819189 -0.531112 + -2.57747 2.04533 -0.243775 -0.224516 -0.830237 -0.510195 + -2.55172 2.0625 -0.290718 0.351439 -0.666144 -0.657832 + -2.26235 1.96594 -0.076878 0.466506 -0.883362 -0.0452016 + -2.38482 1.89739 -0.039944 0.229607 -0.969668 -0.0838089 + -2.52786 1.90878 0.011527 -0.324616 -0.940898 -0.0966134 + -2.59692 1.97242 -0.081094 -0.513403 -0.812734 -0.275465 + -2.6528 2.0488 -0.168998 -0.570032 -0.742784 -0.351191 + -2.15662 2.01839 0.009485 0.535389 -0.844412 -0.0181095 + -2.30984 1.9448 -0.010065 0.423462 -0.896017 0.133542 + -2.43748 1.90232 0.037117 0.135359 -0.982911 0.124752 + -2.56208 1.9173 0.096568 -0.446336 -0.893011 0.0575868 + -2.33788 1.95024 0.068513 0.304299 -0.936248 0.175618 + -2.46552 1.90768 0.115641 0.123459 -0.980982 0.149772 + -2.56497 1.93226 0.183856 -0.439401 -0.891893 0.107025 + -2.63114 1.98094 0.00394 -0.683884 -0.726283 -0.0693862 + -2.69489 2.06219 -0.099988 -0.756224 -0.640445 -0.133998 + -2.35579 1.96937 0.155186 0.250707 -0.952246 0.174281 + -2.46841 1.92264 0.20293 0.153463 -0.981928 0.110753 + -2.55743 1.93752 0.279154 -0.486431 -0.868117 0.0987784 + -2.63891 1.99185 0.10725 -0.72968 -0.682228 0.0461766 + -2.70266 2.07318 0.003376 -0.822254 -0.56912 0.000746165 + -2.35464 1.97552 0.240132 0.23627 -0.968858 0.0740969 + -2.46726 1.92879 0.287876 0.171688 -0.98125 -0.0875881 + -2.51789 1.91892 0.360977 -0.36936 -0.927258 -0.061358 + -2.63136 1.99719 0.2026 -0.729722 -0.675936 0.103038 + -2.69203 2.06454 0.153948 -0.832593 -0.545824 0.0941518 + -2.36393 1.98662 0.325503 0.306812 -0.943564 -0.124715 + -2.42772 1.91018 0.369699 0.270018 -0.903994 -0.331491 + -2.49455 1.90443 0.452073 -0.465108 -0.883359 -0.0578806 + -2.62208 2.00313 0.305904 -0.721649 -0.685928 0.0934048 + -2.68276 2.07057 0.257303 -0.869396 -0.482955 0.104423 + -2.26025 1.98694 0.35935 -0.217413 -0.94835 -0.231006 + -2.3478 1.96087 0.399315 0.250601 -0.780095 -0.573281 + -2.4116 1.88434 0.44346 0.0186851 -0.913316 -0.406823 + -2.45006 1.8742 0.527831 -0.396996 -0.895642 -0.20055 + -2.59874 1.98865 0.397 -0.680365 -0.732865 -0.00338486 + -2.23387 1.93629 0.415874 -0.0206697 -0.684186 -0.729015 + -2.3475 1.89328 0.451581 0.0304835 -0.718822 -0.694525 + -2.36711 1.85411 0.519218 -0.263996 -0.881681 -0.39108 + -2.02509 1.75372 0.534509 0.226373 0.0154897 -0.973918 + -2.23356 1.86879 0.468189 -0.0801071 -0.518449 -0.851348 + -2.29796 1.84198 0.496837 -0.316115 -0.638518 -0.701687 + -2.31758 1.80281 0.564476 -0.530786 -0.824015 -0.198154 + -2.32775 1.80176 0.638488 -0.354247 -0.932081 -0.0757208 + -1.85767 1.64454 0.554014 0.00223835 0.344011 -0.938963 + -1.78295 1.56325 0.503601 -0.316717 0.174407 -0.932348 + -1.98656 1.67634 0.551519 0.0121252 -0.0451675 -0.998906 + -2.19504 1.79142 0.4852 -0.00539201 -0.199273 -0.979929 + -2.25122 1.76773 0.50923 -0.496109 -0.710724 -0.498746 + -1.60429 1.36788 0.3626 -0.552506 -0.452338 -0.700091 + -1.79238 1.54006 0.510978 -0.361389 -0.0101552 -0.93236 + -1.95973 1.60279 0.539327 0.0337568 0.0391626 -0.998662 + -2.1483 1.71718 0.497593 -0.00359493 -0.103174 -0.994657 + -2.17596 1.71816 0.505099 -0.258826 -0.316883 -0.912466 + -1.49721 1.30268 0.373529 -0.0689533 -0.274035 -0.959245 + -1.3001 2.61612 -0.639218 -0.198498 -0.763167 0.614959 + -1.49586 2.56716 -0.58981 0.325213 -0.813204 0.482634 + -1.42854 2.55889 -0.649095 -0.261824 -0.953626 -0.148479 + -1.29075 2.53949 -0.6781 -0.273143 -0.946443 0.17216 + -1.25085 2.53548 -0.642347 -0.422825 -0.891601 0.162072 + -1.2602 2.61211 -0.603465 -0.817925 -0.562122 -0.122549 + -1.39026 2.63554 -0.586252 0.138319 -0.9763 0.166454 + -1.49586 2.56716 -0.58981 0.331158 -0.551235 0.765817 + -1.58602 2.58657 -0.536845 0.286573 -0.582008 0.761014 + -1.38815 2.56513 -0.686901 -0.36841 -0.647767 -0.666838 + -1.25037 2.54573 -0.715897 0.0747647 -0.674029 -0.734912 + -1.20705 2.52844 -0.663145 0.369842 -0.921393 -0.119382 + -1.3163 2.56033 -0.481979 0.0779208 -0.994226 -0.073779 + -1.38229 2.53653 -0.460558 -0.203936 -0.811828 -0.547124 + -1.57837 2.67193 -0.59068 -0.656773 -0.297396 -0.692968 + -1.51214 2.66684 -0.652472 -0.609066 -0.322124 -0.724758 + -1.33797 2.62379 -0.735296 -0.205029 -0.183532 -0.961394 + -1.1783 2.60536 -0.717774 0.255144 -0.437048 -0.862491 + -1.13498 2.58814 -0.664965 0.32786 -0.884544 -0.331798 + -1.6457 2.68019 -0.531396 -0.674609 -0.346892 -0.65159 + -1.68768 2.91119 -0.517889 -0.673386 -0.0672369 -0.736228 + -1.62145 2.9061 -0.57968 -0.722778 -0.104964 -0.683063 + -1.55545 2.87743 -0.65243 -0.700632 -0.122339 -0.702957 + -1.46196 2.7255 -0.700868 -0.532933 -0.234319 -0.813066 + -1.47007 2.61951 -0.553496 0.0691955 -0.996045 0.0557275 + -1.65093 2.62757 -0.481455 -0.442259 -0.871965 -0.209962 + -1.49939 2.62158 -0.514475 -0.182048 -0.886402 -0.425618 + -1.68026 2.62964 -0.442434 -0.511415 -0.808471 -0.291254 + -1.85563 2.74393 -0.352592 -0.687383 -0.376163 -0.621293 + -1.7851 2.74542 -0.40958 -0.653868 -0.154463 -0.740674 + -1.58602 2.58657 -0.536845 -0.714862 -0.552201 -0.429008 + -1.40544 2.59553 -0.522956 -0.091748 -0.826615 -0.555239 + -1.47385 2.56861 -0.483731 -0.0671506 -0.742373 -0.666613 + -1.56168 2.57668 -0.468498 -0.327449 -0.502145 -0.800392 + -1.74718 2.65567 -0.375326 -0.601375 -0.450839 -0.659615 + -1.92255 2.76996 -0.285484 -0.596367 -0.140757 -0.790275 + -1.32563 2.61155 -0.555713 -0.313955 -0.768675 -0.557289 + -1.5158 2.50943 -0.384024 0.0381157 -0.825219 -0.563525 + -1.58421 2.4825 -0.34479 -0.184095 -0.722046 -0.666902 + -1.64313 2.46622 -0.302775 0.153892 -0.89812 -0.411943 + -1.53614 2.52362 -0.437803 0.285919 -0.873028 -0.395059 + -1.44772 2.53598 -0.412815 -0.0344637 -0.87907 -0.475444 + -1.50702 2.42195 -0.279312 0.11945 -0.724956 -0.678359 + -1.5751 2.3954 -0.250513 0.00538386 -0.670113 -0.742239 + -1.58602 2.58657 -0.536845 0.299558 -0.910718 0.284354 + -1.44638 2.46044 -0.300165 0.15228 -0.780961 -0.605731 + -1.51313 2.29001 -0.149574 0.379767 -0.632734 -0.674852 + -1.56252 2.23009 -0.131389 0.175666 -0.618888 -0.765584 + -1.614 2.19748 -0.106921 0.3588 -0.532128 -0.766878 + -1.62659 2.3628 -0.226055 -0.187271 -0.599717 -0.777991 + -1.38039 2.48423 -0.321586 0.103289 -0.850498 -0.515738 + -1.45249 2.32849 -0.170436 0.265634 -0.6968 -0.666265 + -1.40673 2.26514 -0.0839 0.343748 -0.632489 -0.694114 + -1.44143 2.21733 -0.061887 0.333725 -0.500521 -0.798816 + -1.49081 2.1574 -0.043692 0.26466 -0.454164 -0.8507 + -1.31783 2.50633 -0.353252 -0.269259 -0.818702 -0.507175 + -1.39437 2.37983 -0.191359 0.22857 -0.761374 -0.606684 + -1.3486 2.31648 -0.104823 0.153892 -0.768012 -0.621671 + -1.27698 2.27543 -0.022522 0.241215 -0.849161 -0.469831 + -1.31168 2.22762 -0.000509 0.502434 -0.358478 -0.7868 + -1.27251 2.55328 -0.502778 -0.321253 -0.926771 -0.194658 + -1.25834 2.48932 -0.404594 -0.393215 -0.82417 -0.407585 + -1.33181 2.40193 -0.223025 -0.0107838 -0.804446 -0.593928 + -1.30396 2.34659 -0.149771 -0.0339501 -0.780982 -0.62363 + -1.27338 2.29774 -0.092373 -0.0574718 -0.892647 -0.447077 + -1.21302 2.53636 -0.55407 -0.309272 -0.769486 -0.558786 + -1.19745 2.49031 -0.447509 -0.345417 -0.851623 -0.394239 + -1.26661 2.4303 -0.253176 -0.0271631 -0.888749 -0.457588 + -1.23877 2.37488 -0.179981 -0.192944 -0.740977 -0.643214 + -1.22874 2.32785 -0.137321 -0.201154 -0.804231 -0.55924 + -1.05893 2.61404 -0.683015 0.33478 -0.768482 -0.545305 + -1.13696 2.56225 -0.572121 -0.211886 -0.806495 -0.55197 + -1.14564 2.48276 -0.502629 -0.408862 -0.780114 -0.473555 + -1.20572 2.43121 -0.29614 -0.257861 -0.878056 -0.403144 + -1.18009 2.38412 -0.225178 -0.357684 -0.725287 -0.588235 + -1.10129 2.65799 -0.720933 0.176528 -0.169503 -0.969591 + -0.952736 2.65753 -0.671346 0.117545 -0.543568 -0.831094 + -1.08515 2.55479 -0.6272 -0.418655 -0.25149 -0.872629 + -1.09197 2.49324 -0.547582 0.0035975 -0.881634 -0.471921 + -1.14067 2.43669 -0.342226 -0.187104 -0.904363 -0.383561 + -1.26096 2.67633 -0.738513 0.0744521 0.00752472 -0.997196 + -1.18748 2.72607 -0.714866 0.137809 0.221193 -0.965444 + -0.995101 2.70139 -0.709312 0.178388 -0.0654426 -0.981781 + -0.875328 2.66696 -0.670681 0.0796277 -0.327457 -0.941505 + -1.00774 2.56423 -0.626535 0.199668 -0.711624 -0.67359 + -1.40656 2.74411 -0.750897 -0.221084 -0.407019 -0.88626 + -1.33308 2.79385 -0.727258 0.214473 -0.218816 -0.951904 + -1.11543 2.77194 -0.693708 0.168783 0.248755 -0.953747 + -0.923048 2.74734 -0.688105 0.121206 0.193536 -0.973577 + -0.778789 2.66576 -0.665798 -0.0887103 -0.34113 -0.935821 + -1.50006 2.89604 -0.702459 -0.797797 -0.284566 -0.531547 + -1.45443 2.86248 -0.801524 -0.454077 -0.405666 -0.793252 + -1.38219 2.88944 -0.808829 0.0923162 -0.461446 -0.882352 + -1.26083 2.82082 -0.734563 0.285119 -0.354411 -0.890562 + -1.04309 2.83942 -0.656181 0.167087 0.185379 -0.968358 + -1.61028 3.04066 -0.617947 -0.802366 -0.119512 -0.584743 + -1.56896 3.04128 -0.69341 -0.884303 -0.226945 -0.408048 + -1.52334 3.00771 -0.792474 -0.838766 -0.279602 -0.467219 + -1.46456 2.96133 -0.856744 -0.43366 -0.509505 -0.743198 + -1.30813 2.92966 -0.807285 0.338312 -0.37687 -0.862273 + -1.67628 3.06941 -0.545148 -0.726891 -0.05382 -0.684641 + -1.65569 3.23792 -0.566404 -0.787428 -0.254808 -0.561275 + -1.61437 3.23854 -0.641875 -0.890128 -0.183726 -0.417033 + -1.54549 3.15754 -0.791375 -0.887836 -0.374175 -0.267844 + -1.48671 3.11124 -0.855596 -0.59334 -0.175434 -0.785602 + -1.74535 3.11365 -0.478972 -0.678771 -0.0264612 -0.733873 + -1.72475 3.28224 -0.500178 -0.735128 -0.0979724 -0.670812 + -1.65737 3.38525 -0.628392 -0.881319 -0.268854 -0.388581 + -1.82338 3.13348 -0.411117 -0.65923 -0.00961781 -0.75188 + -1.85704 3.26162 -0.378462 -0.66499 -0.035641 -0.746001 + -1.89281 3.42958 -0.364967 -0.677891 -0.0988322 -0.728488 + -1.76052 3.45011 -0.486733 -0.764736 -0.153269 -0.625849 + -1.72596 3.52404 -0.570377 -0.877418 -0.287079 -0.384348 + -1.76571 2.93101 -0.450025 -0.66997 -0.0674115 -0.739321 + -1.93094 3.12032 -0.315717 -0.688146 -0.03703 -0.724626 + -1.9646 3.24846 -0.283062 -0.656972 -0.0300507 -0.753316 + -1.8402 2.95534 -0.383558 -0.688682 -0.0853769 -0.720019 + -2.00248 3.10753 -0.242768 -0.647973 -0.0453044 -0.760315 + -1.49586 2.56716 -0.58981 -0.637179 -0.585839 -0.500795 + -1.91174 2.94255 -0.310608 -0.665606 -0.0556807 -0.744223 + -1.98227 2.94105 -0.25362 -0.558639 0.0198152 -0.829174 + -2.08849 3.05709 -0.174005 -0.576015 0.0573106 -0.815428 + -2.09573 3.21649 -0.178093 -0.630168 -0.0245891 -0.776069 + -2.06155 2.88877 -0.219268 -0.513809 0.0245556 -0.857553 + -2.16776 3.0049 -0.139603 -0.622669 0.148497 -0.768265 + -2.24769 3.06839 -0.04557 -0.709019 0.0349271 -0.704324 + -2.18174 3.16605 -0.10933 -0.657452 0.0110682 -0.753415 + -1.97577 2.71731 -0.247687 -0.45761 -0.00880304 -0.889109 + -2.11477 2.83612 -0.18147 -0.621534 -0.0347292 -0.782617 + -2.22059 2.91037 -0.085081 -0.735021 -0.0397142 -0.67688 + -2.30052 2.97378 0.008902 -0.789742 -0.0420709 -0.611995 + -2.31727 3.15669 0.028492 -0.770474 0.0286842 -0.636825 + -1.83669 2.6434 -0.321467 -0.457957 -0.0221103 -0.8887 + -2.03681 2.65629 -0.224989 -0.534364 -0.0485526 -0.843859 + -2.13665 2.73934 -0.144843 -0.698631 -0.0887716 -0.709954 + -2.24246 2.81351 -0.048503 -0.769853 -0.107974 -0.629022 + -2.3405 2.85857 0.084852 -0.82496 -0.0994869 -0.556366 + -1.6512 2.5644 -0.41463 -0.440221 -0.305126 -0.844455 + -1.72545 2.55667 -0.373052 -0.428378 -0.256508 -0.866427 + -1.89774 2.58237 -0.29876 -0.438942 -0.111462 -0.891575 + -2.07411 2.58682 -0.186068 -0.605043 -0.161246 -0.779694 + -1.59495 2.48724 -0.400794 0.137899 -0.839391 -0.525744 + -1.66919 2.47952 -0.359216 -0.366408 -0.44297 -0.818243 + -1.78908 2.52885 -0.331856 -0.470619 -0.492298 -0.732229 + -1.96138 2.55454 -0.257564 -0.430506 -0.382153 -0.817694 + -1.70194 2.42975 -0.265816 0.645164 -0.737215 -0.200693 + -1.73553 2.35858 -0.256944 0.332164 -0.651797 -0.681783 + -1.78273 2.34838 -0.237672 0.538597 -0.692638 -0.479756 + -1.71639 2.46932 -0.339945 -0.371202 -0.410771 -0.832752 + -1.85647 2.54302 -0.277405 -0.311587 -0.843734 -0.437065 + -1.68551 2.34651 -0.184032 -0.0935676 -0.609139 -0.787525 + -1.71628 2.29053 -0.14388 0.347864 -0.548168 -0.760593 + -1.74988 2.21936 -0.135015 0.186513 -0.612087 -0.76848 + -1.77436 2.17638 -0.08636 0.271163 -0.665157 -0.695728 + -1.8154 2.28022 -0.219228 0.137216 -0.472127 -0.870786 + -1.71639 2.46932 -0.339945 0.907551 -0.4055 0.10918 + -1.63216 2.1283 -0.077687 0.0192926 -0.498098 -0.866906 + -1.66293 2.07241 -0.037486 -0.40343 -0.597529 -0.692967 + -1.68409 2.03939 0.025701 -0.273643 -0.713378 -0.645145 + -1.70857 1.99641 0.074348 -0.572156 -0.73765 -0.358484 + -1.53196 2.1008 -0.030862 0.279885 -0.438283 -0.85415 + -1.55011 2.03162 -0.001628 0.22981 -0.584972 -0.777814 + -1.57347 1.98018 0.03807 -0.00642807 -0.773817 -0.633377 + -1.59463 1.94725 0.1013 -0.107748 -0.887259 -0.448511 + -1.38042 2.10717 0.002718 0.411046 -0.67189 -0.616121 + -1.43484 2.0693 0.0235 0.399968 -0.680769 -0.613661 + -1.4582 2.01786 0.063199 0.345951 -0.577204 -0.739699 + -1.47766 1.95416 0.101329 0.153002 -0.790946 -0.592447 + -1.33928 2.16376 -0.010112 0.468369 -0.342054 -0.814635 + -1.27263 2.16069 0.057417 0.641721 -0.744093 -0.185796 + -1.32704 2.12282 0.078207 0.703728 -0.633441 -0.321744 + -1.37329 2.02361 0.083435 0.334338 -0.352658 -0.873985 + -1.1922 2.27055 0.073518 0.450513 -0.681699 -0.576476 + -1.21979 2.20679 0.063957 0.723967 -0.575963 -0.379656 + -1.19121 2.27081 0.18087 0.69421 -0.717527 -0.056813 + -1.17331 2.26835 0.009938 -0.0378973 -0.999281 0.00106347 + -1.0976 2.3003 0.121208 -0.224908 -0.973844 -0.0323156 + -1.13837 2.31692 0.187409 0.0824058 -0.986284 -0.143015 + -1.12303 2.27615 0.261829 -0.480785 -0.673812 -0.561091 + -1.14682 2.27224 0.275606 0.251423 -0.717666 -0.649417 + -1.17764 2.27532 0.212466 -0.871159 -0.266775 0.412206 + -1.16971 2.29075 -0.059863 -0.283283 -0.931787 -0.226987 + -1.0774 2.23682 -0.044042 -0.552576 -0.818903 0.155106 + -1.07871 2.29809 0.057626 -0.262194 -0.942435 0.207535 + -1.05384 2.25235 0.14565 -0.840032 -0.35726 -0.408303 + -1.08226 2.25953 0.195622 -0.848131 -0.337051 -0.408742 + -1.17186 2.29449 -0.122738 -0.437185 -0.854362 -0.280954 + -1.07955 2.24064 -0.106867 -0.580085 -0.801537 -0.14505 + -1.02273 2.17336 -0.067931 -0.929554 -0.368633 0.00620746 + -1.03478 2.21398 -0.011292 -0.862637 -0.46737 0.193452 + -1.12179 2.30564 -0.172649 -0.512935 -0.728255 -0.454469 + -1.17866 2.339 -0.187233 -0.388309 -0.697699 -0.602023 + -1.11505 2.38959 -0.271264 -0.467927 -0.676145 -0.569097 + -1.087 2.44716 -0.387179 -0.287327 -0.868946 -0.402959 + -1.02021 2.51347 -0.526628 -0.0238733 -0.821431 -0.569808 + -0.935985 2.58446 -0.605581 0.104523 -0.764177 -0.636481 + -0.870966 2.57111 -0.610862 -0.297528 -0.270653 -0.915546 + -0.713771 2.65233 -0.67113 -0.475959 -0.188093 -0.859118 + -0.673895 2.61527 -0.694348 -0.745561 -0.0926619 -0.659964 + -1.02167 2.1516 0.035751 -0.740981 -0.667115 -0.0768413 + -1.03372 2.19214 0.092341 -0.979933 -0.0172478 -0.19858 + -1.0361 2.27517 0.090327 -0.763857 -0.624151 -0.164187 + -0.922802 2.10901 0.085129 -0.0730675 -0.940762 -0.331101 + -0.958577 2.11066 0.163666 -0.403519 -0.847821 -0.344053 + -1.05147 2.16932 0.147664 -0.741176 -0.418416 -0.524963 + -1.10586 2.12196 0.209692 -0.660401 -0.396373 -0.637777 + -1.13427 2.12922 0.259715 -0.902301 -0.177056 -0.39307 + -0.810344 1.97817 0.320542 0.252569 -0.775443 -0.578703 + -0.833391 1.94058 0.379053 0.383086 -0.588722 -0.711794 + -0.981624 2.07298 0.222127 -0.165579 -0.749026 -0.641516 + -1.03601 2.02571 0.284205 -0.172602 -0.721006 -0.671088 + -1.05697 1.97337 0.346654 -0.456815 -0.712095 -0.533142 + -0.670717 1.96894 0.458339 0.5406 -0.452775 -0.709046 + -0.667906 1.89635 0.48865 0.486931 -0.350594 -0.799989 + -0.815929 1.8798 0.41873 0.196764 -0.638051 -0.744429 + -0.836881 1.82746 0.481179 0.137446 -0.657438 -0.740867 + -0.538643 2.04431 0.522979 0.487738 -0.177435 -0.854768 + -0.535832 1.97165 0.553241 0.337731 -0.287496 -0.896261 + -0.544717 1.8913 0.575002 0.281666 -0.394091 -0.874846 + -0.650445 1.83549 0.528277 0.448517 -0.508229 -0.735211 + -0.427416 2.11128 0.562994 -0.244922 -0.165181 -0.955368 + -0.433959 2.01996 0.558956 0.0292519 -0.0334085 -0.999014 + -0.456382 1.94003 0.566206 -0.125882 -0.107125 -0.986244 + -0.465268 1.85968 0.587968 -0.578016 -0.164181 -0.799339 + -0.570279 1.82633 0.611336 0.204365 -0.59909 -0.774161 + -0.436841 2.19521 0.541212 -0.404992 -0.582201 -0.704999 + -0.353586 1.97298 0.525926 -0.695918 -0.130636 -0.706139 + -0.378271 1.89349 0.544613 -0.439686 -0.00325801 -0.898145 + -0.400694 1.81364 0.551913 -0.2421 0.06829 -0.967845 + -0.446909 1.74023 0.544275 -0.46875 0.0966612 -0.878026 + -0.363011 2.05692 0.504144 -0.819735 -0.279144 -0.500113 + -0.301749 1.91849 0.465723 -0.963012 -0.158057 -0.218232 + -0.308399 1.84823 0.493806 -0.830271 -0.0286213 -0.556625 + -0.333084 1.76874 0.512494 -0.586746 -0.028627 -0.809265 + -0.348014 1.70073 0.530483 -0.396609 0.0165682 -0.917838 + -0.378708 2.13667 0.481814 -0.726258 -0.499145 -0.472655 + -0.317446 1.99815 0.443342 -0.914962 -0.251027 -0.31596 + -0.290161 1.78861 0.420064 -0.877068 -0.0629937 -0.476218 + -0.296811 1.71836 0.448148 -0.944697 -0.204777 -0.256153 + -0.280895 1.6451 0.472234 -0.74401 -0.151147 -0.650848 + -0.331639 2.07409 0.420611 -0.910034 -0.398997 -0.112426 + -0.26363 1.85203 0.385818 -0.792137 -0.143332 -0.593275 + -0.206389 1.80208 0.32754 -0.640929 -0.246385 -0.726983 + -0.23292 1.73866 0.361786 -0.617796 -0.251387 -0.745072 + -0.235821 1.6716 0.395736 -0.601231 -0.361446 -0.712655 + -0.277823 1.92789 0.363036 -0.862772 -0.299925 -0.407025 + -0.21079 1.87381 0.301308 -0.693584 -0.301411 -0.654288 + -0.14511 1.84072 0.259615 -0.45794 -0.377817 -0.804702 + -0.135439 1.77259 0.295815 -0.40197 -0.420262 -0.813511 + -0.13834 1.70553 0.329765 -0.409917 -0.406786 -0.816391 + -0.297938 2.00159 0.348771 -0.796957 -0.359634 -0.485306 + -0.230905 1.94743 0.286993 -0.694517 -0.305071 -0.651597 + -0.149511 1.91236 0.233334 -0.432045 -0.321497 -0.842601 + -0.084582 1.92307 0.212986 0.0414754 -0.299385 -0.953231 + -0.081362 1.84769 0.230549 -0.0483851 -0.284384 -0.957489 + -0.241038 2.02176 0.264251 -0.650004 -0.31712 -0.690601 + -0.1517 1.98683 0.207735 -0.424964 -0.322893 -0.845663 + -0.086772 1.99754 0.187387 0.124605 -0.352569 -0.927453 + -0.028371 1.90395 0.240101 0.206269 -0.20136 -0.957553 + -0.025151 1.82848 0.257614 0.208168 -0.0754405 -0.975179 + -0.161833 2.06108 0.184943 -0.470986 -0.361832 -0.804518 + -0.086495 2.06566 0.157802 0.0707083 -0.471308 -0.87913 + -0.028371 1.98169 0.227848 0.262455 -0.257919 -0.929836 + 0.028384 1.98169 0.227848 -0.232164 -0.281559 -0.931034 + 0.028384 1.90395 0.240102 -0.196088 -0.186512 -0.962685 + -0.078873 2.13192 0.117042 0.0419019 -0.640991 -0.766404 + -0.028094 2.04981 0.198263 0.223948 -0.456923 -0.860853 + 0.028086 2.04981 0.198263 -0.223684 -0.456645 -0.86107 + 0.086785 1.99754 0.187387 -0.133314 -0.365728 -0.921125 + 0.084595 1.92307 0.212986 -0.080155 -0.2709 -0.959264 + -0.028094 2.11031 0.157878 0.182796 -0.60551 -0.77456 + 0.028086 2.11031 0.157878 -0.180857 -0.606177 -0.774494 + 0.086487 2.06566 0.157802 -0.0716737 -0.470248 -0.879619 + 0.151697 1.98684 0.207726 0.42598 -0.325174 -0.844276 + 0.025953 2.16442 0.105158 -0.119504 -0.723437 -0.679969 + 0.078865 2.13201 0.117092 -0.0420762 -0.641547 -0.765929 + 0.154209 2.12742 0.144226 0.421737 -0.506752 -0.751891 + 0.16183 2.06108 0.184937 0.445027 -0.38063 -0.8106 + 0.025953 2.21513 0.044117 -0.1192 -0.857985 -0.499653 + 0.076732 2.18603 0.064323 -0.016313 -0.804925 -0.593153 + 0.154605 2.18535 0.100294 0.309959 -0.754485 -0.578513 + 0.259627 2.10262 0.248796 0.637108 -0.363523 -0.679665 + 0.241035 2.02176 0.264245 0.652543 -0.322855 -0.685531 + 0.081398 2.22044 -0.002884 -0.0330055 -0.918829 -0.393273 + 0.15927 2.21967 0.033045 0.303564 -0.865301 -0.398877 + 0.260023 2.16046 0.204816 0.556213 -0.540992 -0.630836 + 0.341669 2.14994 0.304624 0.739955 -0.480742 -0.470482 + 0.156899 2.24578 -0.033764 0.108098 -0.977051 -0.183538 + 0.255581 2.21549 0.158688 0.548452 -0.659496 -0.514068 + 0.35622 2.23418 0.219711 0.302315 -0.925348 -0.228772 + 0.360662 2.17915 0.265841 0.672493 -0.639137 -0.373172 + 0.25321 2.24159 0.091878 0.183784 -0.952974 -0.240965 + 0.351766 2.22323 0.157082 -0.226873 -0.972716 0.0485016 + 0.458563 2.21157 0.222077 -0.0542141 -0.822172 0.566652 + 0.436639 2.29199 0.27059 0.256662 -0.960627 0.106399 + 0.417646 2.26287 0.309422 0.549386 -0.735699 -0.396135 + 0.345719 2.23594 0.079281 -0.218538 -0.965642 -0.140629 + 0.454109 2.20062 0.159444 -0.222399 -0.951529 0.212441 + 0.543356 2.21135 0.213069 -0.063121 -0.718424 0.692736 + 0.521432 2.29176 0.261583 -0.19864 -0.913644 0.354677 + 0.346555 2.25176 0.008467 -0.188592 -0.932179 -0.308991 + 0.452082 2.18241 0.091785 -0.317062 -0.948202 0.0195966 + 0.554508 2.1632 0.10366 -0.0359045 -0.999279 0.0123136 + 0.556535 2.1815 0.171369 -0.161488 -0.896338 0.412916 + 0.67046 2.19247 0.209166 -0.334003 -0.919569 0.206967 + 0.243867 2.27531 -0.046122 0.364803 -0.565114 -0.739976 + 0.350908 2.27944 -0.059467 -0.134923 -0.868025 -0.477838 + 0.452918 2.19833 0.021021 -0.277137 -0.898218 -0.341173 + 0.096883 2.29063 -0.229258 0.489284 -0.71954 -0.492812 + 0.24822 2.30299 -0.114056 0.209344 -0.868014 -0.450252 + 0.35169 2.32451 -0.12374 0.00205613 -0.713908 -0.700236 + 0.450824 2.24422 -0.055273 -0.205456 -0.820718 -0.533113 + 0.451606 2.2893 -0.119546 -0.37794 -0.779885 -0.498939 + 0.542863 2.2168 -0.038182 -0.292597 -0.904761 -0.309508 + 0.544957 2.17091 0.038111 0.019762 -0.948674 -0.315637 + 0.649184 2.18275 0.132395 0.124707 -0.893937 -0.430494 + 0.683639 2.16253 0.167417 0.179414 -0.94545 0.27191 + 0.445414 2.33028 -0.186529 -0.496531 -0.687819 -0.529491 + 0.519611 2.28058 -0.179647 -0.673012 -0.687869 -0.271828 + 0.525802 2.23951 -0.112714 -0.4558 -0.834679 -0.309124 + 0.617838 2.17332 -0.016465 -0.310813 -0.943415 0.115597 + 0.639633 2.19037 0.066806 0.047314 -0.997631 -0.0499374 + 0.442834 2.38537 -0.239753 -0.604136 -0.603835 -0.520003 + 0.4982 2.32577 -0.24471 -0.727964 -0.601011 -0.32993 + 0.559073 2.21804 -0.162728 -0.814487 -0.558261 0.157976 + 0.600777 2.19603 -0.090996 -0.527749 -0.8494 -0.000225221 + 0.673023 2.1625 -0.086333 0.0349253 -0.990374 0.133937 + 0.426266 2.44644 -0.292521 -0.647424 -0.580264 -0.4941 + 0.481631 2.38683 -0.29747 -0.780826 -0.534269 -0.323833 + 0.537662 2.26323 -0.227793 -0.876742 -0.479452 -0.0380599 + 0.590327 2.17315 -0.220969 -0.681039 -0.714986 0.158051 + 0.632032 2.15113 -0.149236 -0.309219 -0.932848 0.184872 + 0.415489 2.50481 -0.344625 -0.692527 -0.560435 -0.454223 + 0.46255 2.44419 -0.355431 -0.810433 -0.503731 -0.299087 + 0.516811 2.31852 -0.290163 -0.919632 -0.389169 -0.0531396 + 0.536521 2.25412 -0.344224 -0.960938 -0.27025 0.0596881 + 0.557372 2.19883 -0.281854 -0.898655 -0.402766 0.173778 + 0.399688 2.56693 -0.395823 -0.670596 -0.542369 -0.5061 + 0.446749 2.50631 -0.40663 -0.856737 -0.433576 -0.279309 + 0.49773 2.37589 -0.348125 -0.917936 -0.391819 -0.0622153 + 0.333062 2.67159 -0.4291 -0.139327 -0.605185 -0.783798 + 0.392709 2.62786 -0.447361 -0.691659 -0.487732 -0.532659 + 0.438169 2.56162 -0.466418 -0.861458 -0.375875 -0.341481 + 0.475049 2.42664 -0.411635 -0.950012 -0.312144 -0.0066024 + 0.328673 2.73479 -0.471964 -0.178235 -0.691386 -0.700156 + 0.393967 2.68945 -0.500823 -0.723978 -0.527399 -0.444641 + 0.439427 2.62312 -0.519938 -0.882883 -0.35938 -0.302263 + 0.466469 2.48194 -0.471415 -0.952664 -0.260561 -0.156651 + 0.49643 2.3586 -0.468174 -0.964303 -0.26474 0.00566451 + 0.26365 3.18553 -1.08067 -0.535437 -0.631319 -0.56102 + 0.318613 3.01098 -0.907536 -0.690458 -0.621868 -0.369523 + 0.383908 2.96572 -0.936345 -0.752941 -0.57307 -0.323527 + 0.423656 2.83709 -0.832142 -0.899409 -0.382795 -0.211024 + 0.468237 2.52849 -0.541048 -0.96266 -0.227596 -0.146579 + 0.211286 2.9128 -0.796693 0.73924 -0.513497 -0.435713 + 0.214432 3.22701 -1.07952 0.11691 -0.655131 -0.746415 + 0.170029 3.8391 -1.98009 -0.624127 -0.64204 -0.445253 + 0.260896 3.7114 -1.9673 -0.741447 -0.559738 -0.370066 + 0.315859 3.53684 -1.79416 -0.788261 -0.526422 -0.318629 + 0.063904 3.39356 -1.63558 0.881494 -0.32128 -0.346047 + -0.011004 2.20909 -0.926224 0 -0.159648 -0.987174 + 0.120811 3.88058 -1.97892 -0.387844 -0.755631 -0.527825 + 0.084072 4.11489 -2.27757 -0.161473 -0.305658 -0.938349 + 0.144953 4.07833 -2.28164 -0.302697 -0.298767 -0.905049 + 0.226921 3.78392 -1.9845 -0.651826 -0.488595 -0.579998 + 0.156182 4.10829 -2.27694 0.172708 0.322697 -0.930612 + 0.228575 4.03035 -2.28994 0.194202 0.166993 -0.966643 + 0.201845 4.02314 -2.28606 -0.43519 -0.372215 -0.819796 + 0.253826 3.95131 -2.28264 -0.471122 -0.386856 -0.792708 + 0.096818 4.17112 -2.26096 0.223833 0.571077 -0.789791 + 0.165782 4.13128 -2.26075 0.419336 0.561333 -0.713486 + 0.238175 4.05342 -2.2737 0.537699 0.500127 -0.678787 + 0.280556 3.95861 -2.28647 0.250303 0.033792 -0.967578 + 0.094074 4.19741 -2.23569 0.266597 0.738094 -0.619793 + 0.163038 4.15765 -2.23543 0.498966 0.664795 -0.55595 + 0.231694 4.09268 -2.23609 0.630681 0.60432 -0.486866 + 0.289297 4.02531 -2.231 0.713252 0.542923 -0.443289 + 0.295778 3.98606 -2.26862 0.639188 0.38878 -0.663542 + 0.090118 4.23945 -2.17751 0.274533 0.810976 -0.516672 + 0.155107 4.20838 -2.17409 0.522863 0.726506 -0.445873 + 0.223763 4.1434 -2.17474 0.622931 0.639694 -0.450276 + 0.282864 4.08583 -2.16703 0.702945 0.566731 -0.429749 + 0.342257 3.96762 -2.21109 0.771023 0.445835 -0.454702 + 0.077413 4.2961 -2.08803 0.270437 0.838046 -0.47386 + 0.142402 4.26511 -2.08456 0.440203 0.76892 -0.463664 + 0.21748 4.22262 -2.07876 0.550759 0.681972 -0.481225 + 0.276581 4.16497 -2.0711 0.73689 0.562623 -0.374763 + 0.335824 4.02814 -2.14711 0.780547 0.516235 -0.352488 + 0.077217 4.33595 -2.01465 0.243611 0.866787 -0.435125 + 0.140414 4.31927 -1.99955 0.393913 0.810496 -0.433508 + 0.215492 4.27678 -1.99376 0.544849 0.723776 -0.423425 + 0.261316 4.23416 -1.99374 0.730379 0.592927 -0.339092 + 0.323258 4.09292 -2.06472 0.818049 0.503243 -0.278464 + 0.086582 4.35657 -1.96057 0.255164 0.850071 -0.460729 + 0.149779 4.33989 -1.94548 0.387382 0.798444 -0.460892 + 0.205029 4.34236 -1.89375 0.547656 0.716354 -0.432332 + 0.250854 4.29974 -1.89373 0.693542 0.665126 -0.276779 + 0.307993 4.16202 -1.9874 0.790539 0.519727 -0.323931 + 0.090761 4.42195 -1.861 0.2451 0.789811 -0.56225 + 0.136076 4.4086 -1.85449 0.374044 0.758101 -0.534203 + 0.191327 4.41115 -1.80271 0.408515 0.694799 -0.591921 + 0.269232 4.28621 -1.8763 0.72102 0.584076 -0.372806 + 0.031855 4.51372 -1.75675 0.0975426 0.796003 -0.597381 + 0.090371 4.55762 -1.67839 0.24802 0.783585 -0.569632 + 0.135687 4.54427 -1.67187 0.238956 0.72497 -0.646002 + 0.159375 4.57666 -1.63058 -0.0272755 0.539777 -0.841366 + 0.215015 4.44355 -1.76142 0.410891 0.620843 -0.667625 + 0.019581 4.57673 -1.67429 0.0822428 0.808915 -0.582145 + 0.078097 4.62054 -1.59598 -0.084314 0.606392 -0.790683 + 0.088187 4.69572 -1.55799 -0.0242987 0.349665 -0.93656 + 0.144635 4.68969 -1.56734 -0.284522 0.404217 -0.869285 + 0.209426 4.5831 -1.66813 0.00589629 0.524071 -0.851654 + -0.019583 4.57673 -1.67429 -0.0824503 0.808871 -0.582176 + 0.019581 4.62602 -1.60127 0.0626536 0.656613 -0.751621 + 0.02967 4.70111 -1.56333 0.0582603 0.322479 -0.944782 + 0.09063 4.812 -1.5348 -0.0225725 0.227466 -0.973524 + 0.147078 4.80597 -1.54415 -0.0877212 0.2508 -0.964056 + -0.019583 4.62602 -1.60127 -0.0626653 0.656621 -0.751613 + -0.029672 4.70111 -1.56333 -0.0602841 0.324572 -0.943938 + 0.02967 4.82222 -1.5379 0.0436184 0.230337 -0.972133 + 0.031893 4.92248 -1.51155 0.0302154 0.302891 -0.952546 + 0.092852 4.91217 -1.5085 0.0337277 0.271666 -0.9618 + -0.029672 4.82222 -1.5379 -0.0449098 0.228458 -0.972517 + -0.031893 4.92248 -1.51155 -0.0509479 0.321189 -0.945643 + 0.031893 5.00159 -1.47878 -0.0240052 0.367767 -0.929608 + 0.098094 4.99545 -1.48494 -0.0148726 0.330447 -0.943707 + -0.092852 4.91218 -1.50851 -0.0203891 0.288639 -0.957221 + -0.031893 5.00159 -1.47878 0.0112348 0.353127 -0.935508 + 0.058347 5.10813 -1.43912 -0.0236694 0.362587 -0.931649 + 0.124549 5.10199 -1.44528 -0.0222974 0.367918 -0.929591 + 0.180374 4.98905 -1.48744 -0.0034224 0.321428 -0.946928 + -0.175129 4.90577 -1.51101 0.0222455 0.304884 -0.95213 + -0.098094 4.99545 -1.48495 0.0330762 0.314555 -0.948663 + -0.124545 5.10199 -1.44528 0.0183492 0.360004 -0.93277 + -0.058344 5.10813 -1.43912 0.028584 0.358655 -0.933033 + -0.314178 4.96879 -1.49417 -0.121927 0.239438 -0.963226 + -0.180371 4.98905 -1.48744 -0.000528955 0.316294 -0.948661 + -0.245024 5.10121 -1.44312 -0.0136319 0.356406 -0.934232 + -0.212368 5.21916 -1.39982 -0.00446196 0.457778 -0.889055 + -0.058344 5.22547 -1.39355 0.0103232 0.465922 -0.884765 + -0.39931 4.92231 -1.48206 -0.256635 0.0693434 -0.964018 + -0.378831 5.08096 -1.44984 -0.101233 0.314973 -0.943686 + -0.332847 5.21829 -1.39771 -0.0324007 0.446595 -0.89415 + -0.229843 5.34087 -1.31843 -0.00111754 0.603123 -0.797648 + -0.47304 4.8423 -1.45428 -0.331432 -0.132738 -0.934095 + -0.575158 4.91974 -1.42141 -0.337859 -0.0384835 -0.94041 + -0.501428 4.99984 -1.44914 -0.271212 0.121322 -0.954843 + -0.506441 5.13501 -1.41247 -0.174721 0.307506 -0.935368 + -0.457463 5.29863 -1.35106 -0.0300837 0.480176 -0.876656 + -0.417519 4.7888 -1.46101 -0.347509 -0.161835 -0.923605 + -0.497081 4.70961 -1.41125 -0.43423 -0.196027 -0.879214 + -0.552602 4.7632 -1.40447 -0.392368 -0.270892 -0.879014 + -0.62043 4.83545 -1.39461 -0.398448 -0.216285 -0.891325 + -0.384069 4.72168 -1.46716 -0.402101 -0.0752056 -0.912501 + -0.44761 4.64259 -1.43078 -0.484941 -0.112088 -0.867334 + -0.567514 4.62001 -1.34906 -0.599506 -0.251952 -0.759679 + -0.61531 4.69129 -1.34531 -0.528167 -0.361802 -0.768205 + -0.683138 4.76353 -1.33545 -0.574009 -0.391888 -0.718984 + -0.391732 4.57063 -1.45213 -0.585631 0.101293 -0.804224 + -0.518043 4.55291 -1.36864 -0.607452 -0.0769277 -0.790623 + -0.569416 4.48354 -1.31309 -0.835857 -0.167358 -0.522814 + -0.605012 4.56017 -1.27502 -0.846825 -0.297333 -0.440999 + -0.652807 4.63153 -1.27122 -0.760136 -0.493465 -0.422712 + -0.477052 4.4763 -1.41354 -0.683593 0.171459 -0.709438 + -0.528424 4.40693 -1.35799 -0.848818 0.0960515 -0.519887 + -0.583852 4.43159 -1.2419 -0.918135 -0.134537 -0.372731 + -0.619448 4.5083 -1.20378 -0.914321 -0.206562 -0.34835 + -0.650159 4.59414 -1.17185 -0.846763 -0.404485 -0.345519 + -0.500752 4.26279 -1.46613 -0.903235 0.254771 -0.345339 + -0.562038 4.35849 -1.3121 -0.922541 0.102806 -0.371952 + -0.627602 4.1418 -1.07658 -0.974118 0.051195 -0.220165 + -0.649416 4.21499 -1.00634 -0.975156 -0.0115375 -0.221218 + -0.654169 4.28647 -0.963151 -0.968055 -0.0879768 -0.234795 + -0.534365 4.21435 -1.42024 -0.937499 0.100705 -0.333097 + -0.6201 4.04521 -1.17587 -0.963158 0.0446895 -0.265197 + -0.768658 3.74322 -0.619611 -0.943966 0.320068 -0.080525 + -0.737398 3.80817 -0.584916 -0.963018 0.236611 -0.128882 + -0.74215 3.87974 -0.541678 -0.966102 0.153859 -0.207302 + -0.484063 4.0017 -1.55352 -0.999533 0.013755 -0.0272776 + -0.569798 3.83247 -1.3092 -0.950406 0.195093 -0.242211 + -0.761156 3.64662 -0.718893 -0.919456 0.351286 -0.176633 + -0.91 3.44794 -0.45138 -0.552901 0.70962 -0.436738 + -0.859614 3.51785 -0.392463 -0.607293 0.649221 -0.457938 + -0.509841 3.86933 -1.64343 -0.912811 0.33702 0.230639 + -0.599227 3.72037 -1.38404 -0.858173 0.510049 -0.0582163 + -0.806855 3.56984 -0.807711 -0.847204 0.510248 -0.147961 + -0.955699 3.37117 -0.540198 -0.592616 0.760361 -0.265814 + -0.588362 3.78145 -1.68063 -0.746333 0.566857 0.348799 + -0.677748 3.63249 -1.42123 -0.699057 0.710278 0.0826107 + -0.836284 3.45774 -0.882547 -0.787825 0.599044 -0.143101 + -1.00753 3.3111 -0.661758 -0.561087 0.818899 -0.120772 + -1.043 3.33197 -0.549702 0.127586 0.78626 -0.60458 + -0.657794 3.71536 -1.71276 -0.663381 0.641159 0.385798 + -0.7262 3.6026 -1.49185 -0.613381 0.77274 0.163206 + -0.858807 3.44275 -0.997782 -0.63744 0.768601 0.0540593 + -1.03005 3.29611 -0.776992 -0.502932 0.863789 0.0304564 + -0.732849 3.66746 -1.731 -0.575377 0.718392 0.390965 + -0.801256 3.55478 -1.51003 -0.515467 0.841093 0.163879 + -0.907259 3.41294 -1.06835 -0.420587 0.882242 0.211555 + -1.03338 3.30779 -0.868825 -0.457397 0.866819 0.198527 + -1.16827 3.23591 -0.834932 -0.032081 0.992397 -0.118825 + -0.833848 3.59399 -1.75135 -0.565725 0.732274 0.379118 + -0.863759 3.53291 -1.58534 -0.523009 0.83752 0.158182 + -0.925856 3.45071 -1.17737 -0.216647 0.945458 0.243255 + -1.05197 3.34555 -0.977836 -0.391998 0.868885 0.302286 + -1.1716 3.24768 -0.926706 -0.409463 0.893203 0.185815 + -0.969964 3.5092 -1.77767 -0.46573 0.78007 0.417836 + -0.999875 3.44811 -1.61167 -0.459858 0.87967 0.121289 + -0.98836 3.42883 -1.25267 -0.4556 0.882473 0.116919 + -1.09283 3.34785 -1.08122 -0.505851 0.842624 0.18466 + -1.21245 3.24989 -1.03014 -0.282424 0.945185 0.163895 + -1.11874 3.44462 -1.78761 -0.278944 0.832069 0.479428 + -1.09957 3.413 -1.67885 -0.315615 0.93014 0.187688 + -1.01918 3.43216 -1.38745 -0.295156 0.951244 0.0895472 + -1.12364 3.35118 -1.21599 -0.5044 0.851531 0.143092 + -1.23216 3.2789 -1.20999 -0.304035 0.93962 0.157086 + -1.30519 3.45113 -1.84669 -0.181255 0.884041 0.430835 + -1.27622 3.41134 -1.79357 -0.162275 0.853107 0.495859 + -1.25705 3.37972 -1.68482 -0.218171 0.956111 0.195583 + -1.11887 3.39705 -1.45464 -0.412461 0.904531 0.108162 + -1.13075 3.36642 -1.32257 -0.526437 0.837185 0.148276 + -1.29995 3.46466 -1.90454 -0.265125 0.959469 -0.0955401 + -1.46391 3.41461 -1.81744 -0.0341149 0.923737 0.381506 + -1.43494 3.37481 -1.76431 -0.0350859 0.889098 0.456369 + -1.35307 3.35536 -1.67502 -0.1563 0.96949 0.188839 + -1.14214 3.39251 -1.50476 -0.284377 0.946908 0.149986 + -1.36382 3.44217 -1.92598 -0.179917 0.982134 -0.0551585 + -1.48277 3.42564 -1.88494 -0.0776707 0.993122 0.0876163 + -1.59004 3.40451 -1.78076 0.119371 0.935239 0.333285 + -1.55599 3.35431 -1.7118 0.113256 0.920255 0.374572 + -1.47412 3.33477 -1.62255 -0.0691088 0.97927 0.190408 + -1.47691 3.4259 -1.974 -0.318429 0.873374 -0.368538 + -1.6089 3.41555 -1.84827 -0.211726 0.960048 -0.182973 + -1.69671 3.41036 -1.72967 0.207314 0.955132 0.211528 + -1.66266 3.36006 -1.66077 0.314831 0.922706 0.222475 + -1.54073 3.32302 -1.56781 0.133456 0.990554 -0.0314893 + -1.49571 3.38455 -2.00338 -0.405016 0.220916 -0.887219 + -1.64401 3.36864 -1.89082 -0.437396 0.700827 -0.563494 + -1.76033 3.36363 -1.82314 -0.364025 0.684239 -0.631905 + -1.72522 3.41054 -1.78059 -0.167285 0.931208 -0.323833 + -1.79723 3.42649 -1.65382 0.258902 0.962067 0.0860093 + -1.66281 3.32729 -1.92019 -0.440612 0.485897 -0.754828 + -1.79251 3.29908 -1.86053 -0.454315 0.47498 -0.753652 + -1.83363 3.39129 -1.76046 -0.398294 0.735366 -0.548269 + -1.82574 3.42676 -1.70469 -0.214448 0.93276 -0.289776 + -1.86581 3.32674 -1.79784 -0.554988 0.533983 -0.637849 + -1.94243 3.33731 -1.68535 -0.700685 0.562802 -0.438514 + -1.92308 3.40147 -1.61709 -0.656105 0.661208 -0.363773 + -1.9152 3.43695 -1.56133 -0.422771 0.883772 -0.200529 + -1.88163 3.43962 -1.53096 0.195688 0.978016 0.0720413 + -1.98168 3.22658 -1.72917 -0.709701 0.412668 -0.57099 + -2.03403 3.22111 -1.67248 -0.706009 0.479468 -0.521212 + -2.04657 3.34112 -1.43756 -0.651581 0.64886 -0.392967 + -2.02722 3.40521 -1.36935 -0.544128 0.69565 -0.469036 + -1.98072 3.43541 -1.38007 -0.294537 0.906434 -0.302696 + -2.14444 3.08049 -1.62792 -0.776127 0.289602 -0.560141 + -2.12598 3.21637 -1.55647 -0.669219 0.556196 -0.492739 + -2.13852 3.33638 -1.32155 -0.395261 0.725467 -0.563442 + -2.08324 3.49396 -1.20809 -0.390149 0.567836 -0.724808 + -2.17485 2.85109 -1.6634 -0.79539 0.200263 -0.572057 + -2.31866 3.01833 -1.37227 -0.833806 0.237462 -0.498376 + -2.27807 3.12168 -1.39247 -0.815392 0.298196 -0.4962 + -2.25962 3.25755 -1.32101 -0.789205 0.330252 -0.517772 + -2.25356 3.33286 -1.28524 -0.579242 0.519918 -0.627825 + -2.24194 2.72805 -1.6143 -0.782503 0.209447 -0.586362 + -2.38575 2.89521 -1.32322 -0.8413 0.23941 -0.484662 + -2.38694 3.07967 -1.2155 -0.899898 0.422306 0.108813 + -2.34636 3.18301 -1.2357 -0.933782 0.248663 -0.25733 + -2.33018 3.2656 -1.21775 -0.914582 0.240842 -0.32486 + -2.16603 2.59459 -1.75254 -0.709151 0.137168 -0.691585 + -2.3903 2.63865 -1.45183 -0.801119 0.225301 -0.554479 + -2.43603 2.83347 -1.26568 -0.824146 0.297454 -0.481979 + -2.46885 2.93672 -1.12491 -0.621371 0.73428 0.273368 + -2.41857 2.99846 -1.18245 -0.859254 0.509805 -0.0422177 + -2.31438 2.50519 -1.59007 -0.763846 0.0744398 -0.641092 + -2.49329 2.5927 -1.31286 -0.825116 0.215545 -0.522229 + -2.53903 2.78753 -1.1267 -0.849247 0.332748 -0.40995 + -2.28302 2.33097 -1.61352 -0.694635 -0.170568 -0.698848 + -2.39136 2.43913 -1.50445 -0.790298 0.0546029 -0.610284 + -2.49452 2.4665 -1.34626 -0.838856 0.0752713 -0.539124 + -2.64128 2.60297 -1.06884 -0.869722 0.227182 -0.438146 + -2.58184 2.76009 -1.05317 -0.831745 0.384051 -0.400879 + -2.40166 2.32341 -1.48662 -0.790425 -0.196533 -0.580176 + -2.50482 2.35078 -1.32843 -0.857148 -0.168307 -0.486795 + -2.64251 2.47677 -1.10226 -0.897715 -0.0294658 -0.439589 + -2.74077 2.4962 -0.832505 -0.979981 0.0277292 -0.197152 + -2.6903 2.62741 -0.943175 -0.924 0.242128 -0.29597 + -2.37144 2.26879 -1.49442 -0.664562 -0.534611 -0.522061 + -2.48835 2.28339 -1.31431 -0.764429 -0.523551 -0.376221 + -2.62715 2.384 -1.08077 -0.882861 -0.275063 -0.380653 + -2.7039 2.38727 -0.910439 -0.880312 -0.385573 -0.276377 + -2.71926 2.48005 -0.931931 -0.882633 0.335294 -0.32945 + -2.34168 2.2341 -1.47373 -0.3536 -0.899385 -0.257049 + -2.45859 2.24861 -1.29367 -0.380601 -0.919034 -0.102559 + -2.58583 2.29395 -1.05661 -0.39012 -0.920493 -0.0223533 + -2.61069 2.3166 -1.06664 -0.789673 -0.549192 -0.273503 + -2.68906 2.3493 -0.878472 -0.772178 -0.619099 -0.143034 + -2.31731 2.23023 -1.45523 0.206065 -0.963579 0.170449 + -2.43314 2.249 -1.27375 0.222823 -0.937244 0.268184 + -2.56038 2.29426 -1.03674 0.234198 -0.930731 0.280876 + -2.62978 2.32533 -0.864149 0.254835 -0.934433 0.248787 + -2.66421 2.32665 -0.868442 -0.39123 -0.919039 0.0480244 + -2.28861 2.25875 -1.43763 0.594899 -0.647939 0.475679 + -2.40444 2.27752 -1.25615 0.675387 -0.554943 0.485686 + -2.52836 2.321 -1.03146 0.717266 -0.534882 0.446576 + -2.59777 2.35215 -0.858812 0.772203 -0.567406 0.285925 + -2.38166 2.37619 -1.23645 0.780595 -0.270465 0.563489 + -2.50558 2.41975 -1.0117 0.85921 -0.219896 0.461956 + -2.57205 2.442 -0.857433 0.944664 -0.2284 0.235463 + -2.60291 2.36298 -0.752564 0.7427 -0.653014 0.14822 + -2.6482 2.34852 -0.75112 0.146052 -0.983998 0.102065 + -2.25441 2.49434 -1.34129 0.691931 -0.254839 0.675491 + -2.41966 2.65186 -1.08493 0.812118 -0.190609 0.551482 + -2.44962 2.72882 -0.999425 0.903561 -0.118441 0.411763 + -2.53554 2.49671 -0.9262 0.904866 -0.172492 0.389185 + -2.0451 2.73408 -1.42993 0.523529 -0.337583 0.782276 + -2.29241 2.76992 -1.18981 0.705283 -0.207141 0.677988 + -2.43195 2.81345 -1.02221 0.731419 0.224719 0.643838 + -2.50149 2.68375 -0.894552 0.912299 -0.144821 0.383062 + -2.538 2.62912 -0.825736 0.870357 -0.0740285 0.486825 + -2.11149 2.90972 -1.33014 0.529617 -0.258764 0.807804 + -2.14282 3.05528 -1.26346 0.49627 -0.218821 0.840139 + -2.32373 2.91548 -1.12313 0.587956 0.0175165 0.808703 + -1.92019 3.02836 -1.35684 0.0963612 -0.429583 0.897872 + -1.99462 3.17363 -1.27045 0.107677 -0.521472 0.846447 + -2.09605 3.15024 -1.26755 0.263202 -0.305561 0.915072 + -2.2651 3.05915 -1.17558 0.53726 -0.0839273 0.83923 + -1.76545 3.0591 -1.32967 -0.245598 -0.431619 0.867978 + -1.83988 3.20445 -1.24323 -0.220652 -0.682028 0.697245 + -2.03489 3.3184 -1.1424 0.0322312 -0.624419 0.780424 + -2.13633 3.2951 -1.13945 0.266788 -0.551032 0.790688 + -2.21834 3.15412 -1.17966 0.500302 -0.335962 0.798015 + -1.49485 2.94623 -1.23198 -0.444425 -0.532135 0.720637 + -1.6046 3.09642 -1.22012 -0.511415 -0.617923 0.597181 + -1.69808 3.18616 -1.16996 -0.45118 -0.748657 0.485746 + -1.91688 3.30486 -1.13415 -0.2609 -0.720263 0.642769 + -1.33436 3.02223 -1.09923 -0.30023 -0.772109 0.560098 + -1.45654 3.06137 -1.05041 -0.388008 -0.800663 0.456496 + -1.55002 3.15102 -1.0003 -0.547426 -0.777128 0.310478 + -1.59496 3.20381 -0.955135 -0.634939 -0.727498 0.259998 + -1.77508 3.28657 -1.06087 -0.486594 -0.717848 0.497916 + -1.14172 2.95056 -1.01449 -0.600859 -0.406927 0.688026 + -1.18623 3.02234 -0.981609 -0.408484 -0.830733 0.378184 + -1.30841 3.06147 -0.932784 -0.210476 -0.97115 0.112102 + -1.43413 3.09074 -0.915481 -0.503019 -0.851738 -0.146679 + -1.05152 2.81816 -0.962764 -0.612905 -0.173159 0.77095 + -1.02259 2.92278 -0.922776 -0.601848 -0.392151 0.695699 + -1.06711 2.99456 -0.889893 -0.490929 -0.751292 0.441077 + -1.0743 2.71117 -1.00885 -0.612019 -0.152118 0.776075 + -0.95884 2.696 -0.930375 -0.480876 -0.224871 0.847461 + -0.946305 2.78767 -0.892355 -0.521581 -0.255388 0.814082 + -0.917374 2.89238 -0.852317 -0.647176 -0.384337 0.658368 + -0.953604 2.96515 -0.807556 -0.554282 -0.75766 0.344562 + -0.987146 2.59906 -0.965861 -0.475489 -0.204962 0.855512 + -0.825757 2.68506 -0.875432 -0.369797 -0.28638 0.883876 + -0.813222 2.77682 -0.837363 -0.574381 -0.474245 0.667217 + -0.842561 2.85913 -0.788723 -0.721909 -0.524633 0.451228 + -0.87879 2.93189 -0.743953 -0.691349 -0.722272 0.0189484 + -1.01349 2.5095 -1.00474 -0.475416 -0.298697 0.827502 + -0.849018 2.5959 -0.908795 -0.345662 -0.263008 0.900747 + -0.77694 2.49672 -0.913018 -0.301612 -0.29547 0.906492 + -0.753679 2.58589 -0.879656 -0.486869 -0.271014 0.830367 + -0.732766 2.65292 -0.837963 -0.772046 -0.394459 0.498345 + -0.875364 2.50634 -0.947682 -0.352174 -0.279786 0.893137 + -0.809399 2.42101 -0.952472 -0.269808 -0.318405 0.908747 + -0.776282 2.32164 -0.982164 -0.598309 -0.179432 0.780917 + -0.744195 2.39376 -0.936474 -0.731219 -0.145468 0.666452 + -0.723282 2.4607 -0.894831 -0.7267 -0.123874 0.675694 + -0.845402 2.33448 -0.9884 -0.194417 -0.344254 0.918527 + -0.808741 2.24592 -1.02162 -0.541358 -0.225661 0.809943 + -0.813146 2.15103 -1.02926 -0.914109 0.232175 0.332415 + -0.782328 2.22055 -0.986063 -0.932343 0.232615 0.276813 + -0.879442 2.25536 -1.02896 -0.267778 -0.395307 0.878651 + -0.84533 2.17518 -1.06869 -0.449074 -0.263539 0.853745 + -0.849735 2.0802 -1.07638 -0.883195 0.195516 0.426309 + -0.879369 2.09615 -1.1092 -0.434824 -0.200162 0.877988 + -0.882867 2.01003 -1.11103 -0.862044 0.212673 0.460055 + -0.853651 2.05842 -1.00985 -0.922479 0.384975 0.028763 + -0.914823 2.0173 -1.13822 -0.453696 -0.16657 0.875451 + -0.918321 1.93126 -1.14001 -0.853472 0.214328 0.475026 + -0.886784 1.98825 -1.04451 -0.9117 0.404844 0.0700266 + -0.930002 1.89001 -1.01636 -0.953447 0.300546 0.0247175 + -0.947915 1.85511 -1.16152 -0.872664 0.223746 0.434046 + -0.920811 1.92063 -1.0734 -0.922426 0.382505 0.0531098 + -0.942229 1.8297 -1.0013 -0.994587 0.102947 0.0140837 + -0.944804 1.71646 -0.927156 -0.999425 -0.0305201 -0.0147665 + -0.950406 1.84448 -1.0949 -0.955758 0.275624 0.102749 + -0.940618 1.79502 -1.02983 -0.987349 0.0696285 0.142455 + -0.973888 1.77006 -1.11299 -0.963183 0.21098 0.166631 + -0.9641 1.72068 -1.04788 -0.981482 -0.172416 0.0834631 + -0.901206 1.61571 -1.00085 -0.845823 -0.530761 -0.0536288 + -0.948906 1.69815 -1.06444 -0.78258 0.137988 0.607064 + -0.683858 2.53744 -0.846346 -0.858172 -0.164745 0.48621 + -0.762105 2.73523 -0.789314 -0.726278 -0.478221 0.493786 + -0.683088 2.60532 -0.795705 -0.77092 -0.263774 0.579747 + -0.761334 2.80318 -0.738623 -0.756367 -0.644287 0.113148 + -0.953552 2.97745 -0.695252 -0.356628 -0.71408 -0.602417 + -0.650091 2.67466 -0.739618 -0.919101 -0.389863 -0.0570955 + -0.836096 2.84874 -0.689923 -0.658549 -0.621486 -0.424344 + -1.04074 2.97995 -0.685998 0.0895136 -0.695155 -0.713265 + -1.02738 3.01237 -0.781739 -0.292768 -0.955866 -0.0246249 + -1.14089 3.04178 -0.864075 -0.270503 -0.946077 0.178231 + -0.739713 2.74565 -0.696773 -0.70068 -0.487566 -0.520891 + -0.925718 2.91973 -0.647078 -0.402639 -0.651497 -0.642987 + -1.11119 2.9363 -0.685384 0.323845 -0.433356 -0.841027 + -1.11457 3.01479 -0.772534 0.135978 -0.865108 -0.482802 + -0.779589 2.78279 -0.673504 -0.509753 -0.442289 -0.737924 + -0.996167 2.87607 -0.646464 0.0903809 -0.00983747 -0.995859 + -1.18849 2.88821 -0.697087 0.428702 -0.204449 -0.880009 + -1.23083 2.97775 -0.795581 0.363353 -0.589363 -0.721544 + -0.82651 2.74605 -0.683273 0.0443094 0.0475857 -0.997884 + -1.19572 3.04732 -0.839083 0.082926 -0.901285 -0.425216 + -1.36324 3.06702 -0.907792 -0.154665 -0.833665 -0.530172 + -1.38286 3.03392 -0.869869 -0.260885 -0.545611 -0.796397 + -1.47907 3.14352 -0.870306 -0.666419 -0.700017 -0.256636 + -1.31198 3.01028 -0.86213 0.148443 -0.670087 -0.727288 + -1.3905 3.00163 -0.85515 0.0343783 -0.33501 -0.941587 + -1.68164 3.35355 -0.865289 -0.685426 -0.54663 0.481027 + -1.19064 2.1133 0.362099 -0.418103 -0.373553 -0.828039 + -1.16685 2.11721 0.348321 -0.60143 -0.400633 -0.691213 + -1.18731 2.03749 0.39659 -0.115408 -0.520295 -0.846153 + -1.08955 1.96145 0.43531 -0.461465 -0.678634 -0.571407 + -1.07771 1.88665 0.501859 -0.404213 -0.649958 -0.643558 + -0.895428 1.6969 0.571713 -0.247759 -0.720322 -0.647882 + -0.925082 1.67623 0.632925 -0.404549 -0.767018 -0.498019 + -0.907269 1.77161 0.505114 -0.110171 -0.644206 -0.756875 + -0.765246 1.66905 0.611158 0.342274 -0.476751 -0.809665 + -0.819324 1.64323 0.607476 -0.00636929 -0.705998 -0.708186 + -0.848978 1.62264 0.668739 -0.231957 -0.826573 -0.512809 + -0.676006 1.77051 0.564613 0.418287 -0.677524 -0.604977 + -0.746393 1.71475 0.588597 0.374677 -0.594613 -0.711374 + -0.632869 1.72466 0.683228 0.2201 -0.242516 -0.94485 + -0.667674 1.64144 0.666177 0.168601 0.0796185 -0.982463 + -0.721751 1.61571 0.662546 -0.0557991 -0.603254 -0.795595 + -0.614016 1.77037 0.660667 0.215028 -0.643981 -0.734201 + -0.537044 1.73605 0.661114 -0.466283 -0.187858 -0.864459 + -0.560694 1.66274 0.668891 -0.345965 0.14876 -0.92638 + -0.595499 1.57951 0.651842 -0.089707 0.299817 -0.94977 + -0.609086 1.49934 0.623102 -0.358854 0.284633 -0.888936 + -0.493306 1.79201 0.611783 -0.563764 -0.158282 -0.810627 + -0.470814 1.59102 0.579113 -0.679126 0.00141297 -0.73402 + -0.494464 1.51771 0.586891 -0.523104 0.173738 -0.834372 + -0.523226 1.45056 0.587791 -0.352038 0.295744 -0.888034 + -0.536813 1.37039 0.559051 -0.0712238 0.434175 -0.898008 + -0.474948 1.67246 0.56804 -0.82181 -0.0489156 -0.567658 + -0.403462 1.55309 0.519801 -0.360455 -0.0122598 -0.932696 + -0.399328 1.47156 0.530822 -0.567327 0.0898514 -0.818576 + -0.430158 1.4069 0.519009 -0.425503 0.281932 -0.859919 + -0.45892 1.33984 0.519959 -0.488517 0.273818 -0.828477 + -0.394229 1.62731 0.522845 -0.176745 0.0650789 -0.982103 + -0.293227 1.44316 0.523598 0.0487424 0.282895 -0.957911 + -0.337539 1.38741 0.477964 -0.087005 0.380719 -0.920589 + -0.36837 1.32276 0.46615 -0.23837 0.353237 -0.904656 + -0.404201 1.26275 0.450694 -0.376759 0.322577 -0.86833 + -0.283994 1.51739 0.526643 -0.34297 -0.183991 -0.921151 + -0.18183 1.41074 0.48616 -0.522886 0.0774162 -0.84888 + -0.221171 1.38548 0.495105 -0.176352 0.438397 -0.881311 + -0.265483 1.32973 0.44947 -0.101295 0.515548 -0.850853 + -0.283711 1.28422 0.428496 -0.164203 0.363246 -0.917109 + -0.295824 1.5771 0.490223 -0.781044 -0.294882 -0.550468 + -0.210234 1.5283 0.447544 -0.526203 -0.426964 -0.735399 + -0.198404 1.46867 0.484013 -0.579941 -0.320817 -0.748829 + -0.219905 1.59834 0.419821 -0.525719 -0.339941 -0.779782 + -0.127071 1.56688 0.393913 -0.431722 -0.304748 -0.848967 + -0.124814 1.48874 0.411456 -0.529382 -0.237627 -0.814425 + -0.10824 1.43089 0.413652 -0.531732 -0.145506 -0.834319 + -0.136742 1.63693 0.36619 -0.403456 -0.404359 -0.820803 + -0.067915 1.63866 0.328985 -0.480558 -0.398719 -0.78108 + -0.066978 1.57055 0.359558 -0.463832 -0.329064 -0.822543 + -0.064721 1.49241 0.377102 -0.23782 -0.23073 -0.943507 + -0.069513 1.70727 0.292561 -0.454163 -0.354367 -0.81741 + -0.022973 1.60797 0.312956 -0.27179 -0.415256 -0.868155 + -0.022036 1.53985 0.343528 -0.275752 -0.443021 -0.853049 + -0.022036 1.47459 0.381172 -0.0526471 -0.342582 -0.938012 + -0.071691 1.77956 0.266749 -0.428516 -0.420676 -0.799628 + -0.022973 1.67413 0.279962 -0.241002 -0.389383 -0.888987 + 0.022972 1.67413 0.279957 0.249451 -0.394279 -0.884488 + 0.022972 1.60797 0.312951 0.273966 -0.41155 -0.869235 + 0.022033 1.53986 0.34352 0.211773 -0.401878 -0.890868 + -0.025151 1.74642 0.25415 -0.168328 -0.228454 -0.958892 + 0.025152 1.74642 0.25415 0.195837 -0.179824 -0.964008 + 0.069512 1.70727 0.292556 0.452452 -0.357785 -0.81687 + 0.067914 1.63867 0.32898 0.473636 -0.395008 -0.78717 + 0.066975 1.57056 0.359551 0.478287 -0.302429 -0.824487 + 0.025152 1.82848 0.257614 -0.094793 -0.165363 -0.981667 + 0.071692 1.77956 0.266749 0.267132 -0.321371 -0.908494 + 0.138335 1.70553 0.329772 0.406794 -0.402298 -0.820168 + 0.136737 1.63693 0.366197 0.382705 -0.417345 -0.824233 + 0.127071 1.56688 0.393913 0.444677 -0.326375 -0.834111 + 0.081363 1.84769 0.230549 0.0179551 -0.328724 -0.944255 + 0.145096 1.84073 0.259605 0.451012 -0.366014 -0.814016 + 0.135424 1.7726 0.295804 0.358816 -0.44562 -0.820167 + 0.235816 1.6716 0.395743 0.612861 -0.352643 -0.707138 + 0.2199 1.59834 0.419828 0.528765 -0.346037 -0.775026 + 0.149508 1.91236 0.233325 0.441942 -0.315568 -0.839705 + 0.206375 1.80209 0.327529 0.727398 -0.140786 -0.671618 + 0.232905 1.73867 0.361775 0.624394 -0.258729 -0.737015 + 0.29681 1.71836 0.448149 0.860846 -0.209775 -0.463615 + 0.210787 1.87381 0.301299 0.692924 -0.298311 -0.656404 + 0.263629 1.85203 0.385818 0.838912 -0.128431 -0.528897 + 0.29016 1.78861 0.420064 0.877701 -0.0393647 -0.477589 + 0.230902 1.94743 0.286985 0.689676 -0.308795 -0.654975 + 0.297934 2.00159 0.348771 0.860567 -0.371393 -0.348555 + 0.277819 1.92789 0.363036 0.865623 -0.292029 -0.406712 + 0.317445 1.99815 0.443342 0.910565 -0.26615 -0.316283 + 0.301748 1.91849 0.465723 0.901525 -0.16344 -0.400674 + 0.323077 2.06909 0.320073 0.791825 -0.387351 -0.472199 + 0.368253 2.13837 0.383673 0.838894 -0.499458 -0.216328 + 0.331635 2.07409 0.420611 0.89681 -0.407382 -0.172546 + 0.378705 2.13667 0.481815 0.845794 -0.477248 -0.238469 + 0.393396 2.20586 0.354975 0.708447 -0.591826 -0.384506 + 0.451134 2.24204 0.399915 0.582689 -0.812491 0.0182176 + 0.414515 2.17767 0.436803 0.791461 -0.605465 -0.0836763 + 0.497044 2.29366 0.303292 -0.0509846 -0.944861 -0.32348 + 0.472794 2.23674 0.348895 0.168552 -0.932217 -0.320253 + 0.549107 2.2493 0.375134 0.127075 -0.879058 0.459466 + 0.504507 2.2952 0.434824 0.161504 -0.978919 -0.125037 + 0.468697 2.2542 0.479835 0.351181 -0.809393 -0.470696 + 0.544082 2.27465 0.269227 -0.636557 -0.624973 -0.45189 + 0.587066 2.16372 0.27836 -0.50263 -0.835519 0.221971 + 0.570767 2.244 0.324112 -0.311043 -0.907562 0.282104 + 0.656683 2.21392 0.282416 0.340378 -0.706974 0.619944 + 0.69311 2.17527 0.216759 -0.526058 -0.447447 -0.723224 + 0.634104 2.14471 0.244295 -0.483446 -0.727164 -0.487352 + 0.672982 2.13364 0.236664 0.233829 -0.679581 0.695337 + 0.757834 2.14915 0.186202 -0.484517 -0.697017 -0.528593 + 0.791075 2.16562 0.135865 0.0890415 -0.989088 -0.117375 + 0.764288 2.1663 0.096893 -0.0659463 -0.990531 -0.120415 + 0.83345 2.18638 0.01491 0.788276 -0.607753 -0.0962156 + 0.834047 2.18376 0.093245 0.846173 0.115969 0.520137 + 0.800807 2.16729 0.143582 0.269573 -0.9536 -0.134083 + 0.757834 2.14915 0.186202 0.269567 -0.953602 -0.134076 + 0.729833 2.18652 0.061879 -0.13134 -0.983256 -0.126323 + 0.806663 2.18697 -0.024105 0.225126 -0.968103 -0.109977 + 0.829873 2.21614 -0.096232 0.996469 -0.0440814 -0.0714557 + 0.83047 2.21361 -0.017854 0.998851 -0.0444163 -0.0179958 + 0.800807 2.16729 0.143582 0.583007 0.746251 0.321266 + 0.774961 2.18234 0.16651 0.662776 -0.386191 0.641549 + 0.694818 2.17955 -0.003062 0.0667963 -0.990243 0.122303 + 0.761369 2.179 -0.100709 0.105361 -0.993434 0.0445938 + 0.733426 2.16917 -0.325479 0.836294 -0.526484 -0.153056 + 0.77872 2.17723 -0.248833 0.689654 -0.697818 -0.19346 + 0.726354 2.17204 -0.165652 0.245391 -0.965046 0.0920265 + 0.719845 2.09289 -0.351357 0.623882 -0.756021 0.197997 + 0.690305 2.10063 -0.539561 0.988101 -0.00750337 -0.153625 + 0.680219 2.19795 -0.522923 0.979196 -0.169943 -0.110879 + 0.683856 2.1495 -0.235005 -0.0153914 -0.967276 0.25326 + 0.677348 2.07035 -0.42071 0.267895 -0.841857 0.468519 + 0.676724 2.02426 -0.56549 0.989777 -0.124688 -0.0692404 + 0.675371 2.08841 -0.670391 0.991742 -0.125312 -0.0272947 + 0.642865 2.13821 -0.29785 -0.133497 -0.911534 0.388954 + 0.643619 2.04868 -0.42158 0.113588 -0.714654 0.690194 + 0.670978 1.91222 -0.532224 0.796404 -0.496356 0.3455 + 0.658296 1.88243 -0.635237 0.982107 -0.188133 0.00841582 + 0.664042 1.99448 -0.668502 0.988357 -0.1008 -0.113968 + 0.591543 2.1091 -0.346226 -0.51506 -0.725892 0.455844 + 0.592297 2.01965 -0.469899 -0.665171 -0.505269 0.549773 + 0.63725 1.89055 -0.533104 0.00704404 -0.770106 0.637877 + 0.641212 1.80309 -0.633011 0.956379 -0.199951 0.212975 + 0.558588 2.13478 -0.407112 -0.926325 -0.323327 0.193344 + 0.559973 2.04854 -0.520547 -0.93419 -0.245391 0.258983 + 0.584927 1.90744 -0.569742 -0.741954 -0.471341 0.476804 + 0.641212 1.80309 -0.633011 -0.572073 -0.628236 0.527306 + 0.540315 2.19079 -0.463918 -0.973453 -0.202623 0.106453 + 0.5417 2.10455 -0.577354 -0.984898 -0.144494 0.095384 + 0.552602 1.93633 -0.620381 -0.958182 -0.216193 0.187479 + 0.562467 1.83725 -0.682375 -0.90242 -0.332575 0.27392 + 0.616518 1.72023 -0.715886 -0.614284 -0.476627 0.628874 + 0.519111 2.30785 -0.404672 -0.956811 -0.283568 0.064045 + 0.522905 2.24451 -0.524367 -0.981203 -0.186234 0.050573 + 0.52994 2.16265 -0.639385 -0.991032 -0.12787 0.0387863 + 0.549676 2.00322 -0.681651 -0.994271 -0.105033 0.0198208 + 0.559541 1.90423 -0.743586 -0.991122 -0.131 0.0227111 + 0.515408 2.29635 -0.583968 -0.986721 -0.16194 -0.0125587 + 0.522443 2.21458 -0.698937 -0.993023 -0.106653 0.0502947 + 0.537916 2.06141 -0.743632 -0.98551 -0.14134 0.0937756 + 0.488206 2.41158 -0.525548 -0.976745 -0.193347 -0.0926653 + 0.507184 2.34934 -0.641333 -0.991555 -0.126623 -0.0280074 + 0.513535 2.28095 -0.751484 -0.996295 -0.075932 0.0403803 + 0.519544 2.12001 -0.811529 -0.988874 -0.115325 0.0939528 + 0.489974 2.45804 -0.595221 -0.98003 -0.167869 -0.106592 + 0.501595 2.42327 -0.678391 -0.991855 -0.118328 -0.047128 + 0.510635 2.18637 -0.864076 -0.996516 -0.0549294 0.0627552 + 0.526611 2.02693 -0.872705 -0.983096 -0.139465 0.118621 + 0.452466 2.74238 -0.853301 -0.958588 -0.254863 -0.127098 + 0.389777 3.35025 -1.69156 -0.90702 -0.377863 -0.185833 + 0.350028 3.47889 -1.79577 -0.86164 -0.439859 -0.253183 + 0.357852 3.75867 -2.25577 -0.378537 -0.320033 -0.868498 + 0.323683 3.81663 -2.25415 -0.55997 -0.402122 -0.724384 + 0.356326 3.82647 -2.2622 0.27545 0.00164683 -0.961314 + 0.393062 3.77164 -2.24423 0.48678 0.0899744 -0.868879 + 0.435041 3.67681 -2.2342 0.383895 0.0863823 -0.919327 + 0.399831 3.66393 -2.24569 0.318722 -0.0261144 -0.947488 + 0.287801 3.87879 -2.26543 -0.54885 -0.430104 -0.71678 + 0.320444 3.88863 -2.27347 0.243756 -0.044005 -0.968838 + 0.335666 3.91617 -2.25556 0.685093 0.277404 -0.673569 + 0.3782 3.85375 -2.23826 0.704552 0.273052 -0.655018 + 0.414936 3.79883 -2.22034 0.719672 0.274838 -0.637602 + 0.38479 3.90521 -2.19379 0.80188 0.390519 -0.452198 + 0.429882 3.82916 -2.17526 0.8114 0.380702 -0.443504 + 0.478303 3.72625 -2.16821 0.803247 0.346498 -0.484492 + 0.378568 3.95873 -2.14769 0.829358 0.460048 -0.31705 + 0.42366 3.88259 -2.12921 0.833792 0.440717 -0.332505 + 0.504429 3.73987 -2.11361 0.832936 0.388421 -0.39414 + 0.366002 4.02351 -2.06529 0.824725 0.498538 -0.266999 + 0.398513 3.98461 -2.03812 0.52043 0.513402 -0.682328 + 0.456171 3.84361 -2.1021 0.829315 0.425742 -0.361911 + 0.549484 3.70203 -2.04408 0.750844 0.413037 -0.515395 + 0.564439 3.60092 -2.11415 0.792874 0.379289 -0.476961 + 0.326371 4.14841 -1.97002 0.575364 0.583458 -0.573178 + 0.427696 3.95708 -2.04764 0.452818 0.461964 -0.762591 + 0.501226 3.80578 -2.03256 0.774085 0.369589 -0.514 + 0.355555 4.12096 -1.97949 0.462404 0.559329 -0.687992 + 0.401214 4.07733 -1.95971 0.738456 0.554933 -0.383056 + 0.459072 3.95874 -2.0149 0.701962 0.46593 -0.538664 + 0.532601 3.80743 -1.99983 0.315249 0.148063 -0.937388 + 0.29222 4.25662 -1.87364 0.736924 0.565396 -0.3705 + 0.337879 4.21298 -1.85387 0.726191 0.575107 -0.376695 + 0.46105 4.0245 -1.90301 0.747877 0.561824 -0.353602 + 0.518908 3.90592 -1.95821 0.685419 0.610261 -0.39722 + 0.576484 3.82328 -2.00548 0.305577 0.375593 -0.874958 + 0.238003 4.41405 -1.75872 0.654101 0.523305 -0.546171 + 0.285288 4.38676 -1.73806 0.697759 0.485415 -0.526787 + 0.314373 4.29125 -1.78103 0.863923 0.436556 -0.251108 + 0.406139 4.15745 -1.81468 0.721169 0.569685 -0.394177 + 0.256711 4.55582 -1.64747 0.702959 0.417535 -0.575772 + 0.336983 4.39134 -1.6486 0.775187 0.429336 -0.463416 + 0.366068 4.29584 -1.69158 0.736767 0.496379 -0.45911 + 0.382632 4.23573 -1.74186 0.710506 0.567284 -0.416377 + 0.463537 4.10564 -1.77914 0.777978 0.536105 -0.327629 + 0.194685 4.69612 -1.60488 -0.137093 0.456697 -0.878995 + 0.237949 4.66941 -1.59862 0.621001 0.363116 -0.694625 + 0.310484 4.52313 -1.57026 0.805047 0.380646 -0.454982 + 0.203348 4.79744 -1.55017 0.0744521 0.312668 -0.94694 + 0.246611 4.77073 -1.54392 0.517578 0.212346 -0.828868 + 0.291722 4.63672 -1.52141 0.747856 0.226739 -0.62394 + 0.361952 4.50588 -1.50138 0.717337 0.342523 -0.606716 + 0.175131 4.90577 -1.51101 -0.0329069 0.297754 -0.954075 + 0.231401 4.89724 -1.51704 0.0738258 0.254109 -0.964354 + 0.316543 4.85085 -1.50488 0.308706 0.0200356 -0.950946 + 0.283094 4.78372 -1.51101 0.575219 -0.107421 -0.810915 + 0.328204 4.64963 -1.48855 0.549114 0.0701608 -0.832797 + 0.314181 4.96879 -1.49417 0.124741 0.240233 -0.962667 + 0.399322 4.9224 -1.48201 0.25692 0.0540487 -0.96492 + 0.417531 4.7888 -1.46101 0.345654 -0.139805 -0.927889 + 0.384082 4.72168 -1.46715 0.402205 -0.0750398 -0.912469 + 0.245031 5.10121 -1.44312 0.0210488 0.360268 -0.932611 + 0.378838 5.08096 -1.44984 0.0946743 0.327072 -0.940245 + 0.501443 4.99974 -1.44918 0.250674 0.122408 -0.960301 + 0.473052 4.8423 -1.45428 0.314939 -0.132493 -0.939819 + 0.332854 5.21829 -1.39771 0.10649 0.373271 -0.92159 + 0.45747 5.29863 -1.35106 0.0276865 0.477643 -0.878118 + 0.585074 5.3526 -1.31374 0.106686 0.475025 -0.873481 + 0.506442 5.13492 -1.41252 0.175392 0.308239 -0.935001 + 0.212371 5.21916 -1.39982 0.00301754 0.457123 -0.889398 + 0.229843 5.34087 -1.31843 -0.00131149 0.605226 -0.796053 + 0.36618 5.37449 -1.29245 -0.0418319 0.616756 -0.786042 + 0.490796 5.45483 -1.24581 -0.0808134 0.665567 -0.74195 + 0.058347 5.22547 -1.39355 -0.0082534 0.463639 -0.885986 + 0.075818 5.34727 -1.31211 -0.000853593 0.607026 -0.794681 + 0.221985 5.48645 -1.18898 -0.00177469 0.661158 -0.750245 + 0.358322 5.52015 -1.16295 0.00660434 0.6685 -0.743683 + 0.482726 5.58027 -1.10407 -0.0234419 0.705847 -0.707976 + -0.075818 5.34727 -1.31211 0.00394171 0.604507 -0.79659 + 0.075818 5.48662 -1.19328 0.0115321 0.655618 -0.755005 + 0.072429 5.69616 -1.00801 0.0122119 0.663558 -0.748025 + 0.218596 5.69599 -1.00371 0.0213943 0.668653 -0.743267 + 0.355916 5.71389 -0.98212 0.0243196 0.675759 -0.736721 + -0.075818 5.48662 -1.19328 -0.00852906 0.658008 -0.752962 + -0.072429 5.69616 -1.00801 -0.0113551 0.662747 -0.748757 + 0.072429 5.97501 -0.760987 0.0188381 0.661816 -0.74943 + 0.216766 5.96896 -0.759101 0.0332929 0.663227 -0.747678 + 0.354086 5.98686 -0.737507 0.0320341 0.666046 -0.745223 + -0.221985 5.48645 -1.18898 -0.00105603 0.663519 -0.748159 + -0.218595 5.69599 -1.00371 -0.0222974 0.667812 -0.743996 + -0.072429 5.97501 -0.760987 -0.0179775 0.66265 -0.748714 + 0.069681 6.1512 -0.605952 0.0212353 0.649818 -0.759793 + 0.214018 6.14506 -0.604125 0.0402827 0.658258 -0.751713 + -0.366178 5.37449 -1.29246 0.0466732 0.608305 -0.79233 + -0.35832 5.52015 -1.16296 0.0333867 0.68461 -0.728144 + -0.355915 5.71389 -0.98212 -0.0243469 0.675759 -0.73672 + -0.216766 5.96896 -0.759101 -0.0342174 0.664055 -0.746901 + -0.490794 5.45483 -1.24581 0.0400022 0.650851 -0.758151 + -0.482724 5.58027 -1.10407 0.0180154 0.713899 -0.700017 + -0.480319 5.77401 -0.923245 -0.0259058 0.676964 -0.73556 + -0.354086 5.98686 -0.737507 -0.0319879 0.666052 -0.745219 + -0.214024 6.14514 -0.604066 -0.0427082 0.656454 -0.753156 + -0.585073 5.3526 -1.31374 -0.101309 0.480809 -0.870953 + -0.625152 5.50066 -1.20399 -0.0437619 0.671224 -0.739962 + -0.617082 5.6261 -1.06225 -0.00699847 0.715133 -0.698953 + -0.621968 5.79243 -0.899559 -0.0313346 0.682893 -0.729846 + -0.498003 5.99299 -0.726127 -0.0340916 0.667247 -0.744056 + -0.648565 5.23973 -1.34765 -0.207584 0.314417 -0.92631 + -0.729833 5.37582 -1.27596 -0.176161 0.459542 -0.87051 + -0.769912 5.52379 -1.16626 -0.116869 0.659197 -0.742833 + -0.763907 5.64422 -1.03944 -0.0865878 0.710005 -0.698853 + -0.768794 5.81046 -0.876784 -0.0847802 0.679394 -0.728859 + -0.643552 5.10455 -1.38431 -0.260173 0.191913 -0.946298 + -0.75869 5.15924 -1.34083 -0.280034 0.219362 -0.934592 + -0.790913 5.27267 -1.2991 -0.268294 0.295482 -0.916902 + -0.87218 5.40876 -1.22741 -0.246897 0.452568 -0.856869 + -0.916419 5.52384 -1.13374 -0.242149 0.635748 -0.732932 + -0.693761 4.99564 -1.38867 -0.278328 0.0317936 -0.95996 + -0.808899 5.05033 -1.34519 -0.318793 0.117759 -0.940481 + -0.874585 5.17472 -1.29805 -0.283043 0.22411 -0.932556 + -0.906808 5.28823 -1.25626 -0.291465 0.29207 -0.910903 + -0.739033 4.91135 -1.36187 -0.380542 -0.250171 -0.890282 + -0.834022 4.97093 -1.34046 -0.349652 -0.150342 -0.924738 + -0.897439 5.07519 -1.31066 -0.287299 0.119157 -0.9504 + -1.06721 5.0593 -1.27034 -0.20662 0.178672 -0.961969 + -1.04436 5.15892 -1.25768 -0.262494 0.256333 -0.930263 + -0.753886 4.85831 -1.3304 -0.518264 -0.445583 -0.729971 + -0.848875 4.91789 -1.309 -0.381662 -0.546568 -0.745384 + -0.935001 4.94725 -1.30045 -0.250948 -0.435305 -0.864601 + -0.922562 4.99579 -1.30592 -0.275955 0.0117628 -0.961099 + -0.707743 4.71343 -1.26267 -0.754112 -0.523825 -0.396135 + -0.778492 4.80821 -1.25762 -0.64273 -0.597651 -0.479281 + -0.858119 4.86914 -1.24797 -0.464162 -0.728206 -0.504251 + -0.705095 4.67604 -1.1633 -0.743944 -0.564044 -0.358332 + -0.778795 4.75395 -1.16045 -0.63737 -0.635574 -0.435665 + -0.858422 4.81498 -1.15075 -0.529484 -0.706651 -0.469351 + -0.946564 4.86002 -1.13477 -0.283752 -0.834323 -0.472642 + -0.944245 4.89859 -1.23938 -0.233714 -0.834893 -0.498328 + -0.68488 4.37231 -0.931225 -0.920786 -0.226122 -0.31784 + -0.713711 4.4393 -0.891461 -0.81785 -0.409644 -0.40412 + -0.787411 4.51721 -0.888613 -0.715847 -0.531571 -0.452764 + -0.840733 4.59343 -0.868419 -0.660605 -0.603681 -0.446284 + -0.735201 3.93699 -0.506827 -0.952922 0.0327594 -0.301441 + -0.764032 4.00398 -0.467072 -0.944732 -0.0579927 -0.322673 + -0.773668 4.10225 -0.429669 -0.892892 -0.220631 -0.392511 + -0.826991 4.17847 -0.409485 -0.848911 -0.359368 -0.387562 + -0.866016 3.63627 -0.323968 -0.515665 0.355658 -0.779485 + -0.859066 3.69351 -0.289117 -0.590769 0.434929 -0.67958 + -0.839342 3.77394 -0.251423 -0.670237 0.351858 -0.653436 + -0.848979 3.8722 -0.21402 -0.626161 0.265036 -0.733266 + -0.828354 3.58281 -0.357777 -0.719455 0.350056 -0.599871 + -0.973384 3.56342 -0.355589 0.229455 0.551609 -0.801921 + -1.05349 3.68378 -0.282855 0.311257 0.603251 -0.734308 + -1.03377 3.76411 -0.245203 -0.0755589 0.395936 -0.915164 + -0.935722 3.50996 -0.389398 -0.0210866 0.595645 -0.802971 + -0.986107 3.44005 -0.448314 0.224153 0.608274 -0.761419 + -1.26445 3.5853 -0.576089 0.596143 0.344512 -0.725207 + -1.25245 3.70489 -0.517631 0.646656 0.477446 -0.594879 + -1.32135 3.47721 -0.677476 0.552852 0.389911 -0.736427 + -1.77462 3.94002 -0.880283 0.564184 0.175329 -0.806818 + -1.76261 4.05962 -0.821833 0.608472 0.144961 -0.780223 + -1.73801 4.16008 -0.797641 0.67549 0.120899 -0.72739 + -1.33256 3.82517 -0.444947 0.69554 0.437485 -0.569939 + -1.09483 3.2719 -0.671261 0.0498391 0.926215 -0.373688 + -1.34655 3.34276 -0.768394 0.487895 0.648745 -0.584027 + -1.74741 3.72033 -0.871373 0.512495 0.196337 -0.835943 + -1.99585 3.86673 -1.01114 0.535749 0.141729 -0.832397 + -2.02305 4.08633 -1.0201 0.705316 -0.031425 -0.708196 + -1.41999 3.30677 -0.932065 0.451377 0.807032 -0.380733 + -1.77261 3.58579 -0.962341 0.541556 0.459701 -0.703841 + -1.97489 3.67645 -1.06076 0.563931 0.390834 -0.727483 + -2.05102 3.88745 -1.04243 0.414272 0.14586 -0.898389 + -1.41563 3.25271 -1.08502 0.203698 0.977548 -0.0539174 + -1.74752 3.40461 -1.07452 0.484354 0.706031 -0.516644 + -1.9498 3.49535 -1.17289 0.620114 0.63803 -0.456482 + -2.03006 3.69726 -1.092 0.419035 0.403192 -0.813539 + -1.43534 3.28172 -1.26488 0.122931 0.985309 0.118547 + -1.74317 3.35054 -1.22748 0.350866 0.931439 -0.0965076 + -1.90418 3.40747 -1.31688 0.490889 0.868698 -0.0662685 + -1.99278 3.52588 -1.20576 0.477286 0.704185 -0.525662 + -1.39002 3.28857 -1.38414 0.0142937 0.966325 0.256926 + -1.68608 3.35453 -1.39578 0.238921 0.963974 0.11692 + -1.84709 3.41146 -1.48519 0.379312 0.912703 0.151973 + -1.94716 3.43808 -1.3497 0.401155 0.905302 -0.139654 + -1.23927 3.29413 -1.31657 -0.307173 0.932089 0.191976 + -1.34359 3.3214 -1.449 -0.0746816 0.97037 0.229792 + -1.64076 3.36138 -1.51505 0.238689 0.970394 0.0369177 + -1.76269 3.39842 -1.608 0.378296 0.915542 0.136654 + -1.19284 3.32696 -1.38142 -0.497938 0.817225 0.290175 + -1.27698 3.33323 -1.50369 -0.379465 0.771364 0.510885 + -1.15402 3.36187 -1.3727 -0.562822 0.788342 0.248492 + -1.23816 3.36814 -1.49496 -0.420223 0.846644 0.326506 + -2.03674 3.52417 -1.2188 -0.20668 0.680349 -0.703142 + -2.07403 3.69546 -1.10509 -0.133465 0.406055 -0.90405 + -2.10814 3.70056 -1.08372 -0.352327 0.320457 -0.879303 + -2.12779 3.92912 -1.0268 -0.48189 0.0725509 -0.873223 + -2.09368 3.92411 -1.04812 -0.217651 0.0481205 -0.97484 + -2.04662 4.10856 -1.05841 0.496568 -0.0961534 -0.862655 + -2.15277 3.49152 -1.19185 -0.22057 0.530183 -0.818691 + -2.17767 3.69811 -1.06748 -0.0261827 0.395142 -0.918247 + -2.1757 3.92894 -1.00148 -0.214309 0.168308 -0.962156 + -2.14407 4.18355 -1.03649 -0.495373 -0.0225646 -0.868387 + -2.08927 4.14522 -1.0641 -0.251775 -0.0967016 -0.962943 + -2.26781 3.48799 -1.15554 -0.433034 0.399989 -0.807769 + -2.25717 3.7201 -1.07276 -0.214088 0.338873 -0.91615 + -2.2552 3.95093 -1.00678 -0.348059 0.285967 -0.892792 + -2.21741 4.1759 -0.951634 -0.817518 0.18664 -0.544821 + -2.19198 4.18327 -1.01121 -0.747521 0.0392026 -0.66308 + -2.32413 3.3409 -1.18198 -0.938841 0.218272 -0.266337 + -2.31998 3.49107 -1.12188 -0.882703 0.171152 -0.437655 + -2.30934 3.72318 -1.0391 -0.768542 0.237593 -0.594048 + -2.28632 3.94674 -0.972512 -0.850108 0.265913 -0.45454 + -2.33304 3.25212 -1.1848 -0.986146 0.0807105 0.144923 + -2.31988 3.32512 -1.13384 -0.988285 -0.00159184 0.152614 + -2.31574 3.47529 -1.07374 -0.86991 -0.154588 0.468359 + -2.32832 3.70336 -0.997166 -0.954095 -0.0450388 0.296099 + -2.30531 3.92699 -0.930517 -0.974764 0.122282 0.186768 + -2.34921 3.16953 -1.20275 -0.971452 0.0462548 0.232685 + -2.3288 3.19885 -1.17333 -0.915978 0.0124456 0.401035 + -2.31564 3.27193 -1.12231 -0.667049 -0.196994 0.718498 + -2.27542 3.46653 -1.04677 -0.276034 -0.323147 0.905197 + -2.28801 3.69459 -0.970183 -0.42858 -0.27725 0.859914 + -2.34791 3.10641 -1.19963 -0.754527 0.288436 0.589486 + -2.3275 3.13582 -1.17016 -0.693225 0.0636203 0.717908 + -2.30229 3.14979 -1.15956 -0.459799 -0.0169939 0.887861 + -2.26361 3.19658 -1.1378 0.108022 -0.319313 0.941473 + -2.27696 3.31872 -1.10056 -0.0500991 -0.323178 0.945011 + -2.37953 3.0253 -1.16654 -0.441648 0.523007 0.72898 + -2.34848 3.02759 -1.15571 -0.466432 0.427424 0.774435 + -2.32327 3.04155 -1.14509 -0.037935 0.189986 0.981054 + -2.1816 3.33755 -1.09758 0.132213 -0.416153 0.899631 + -2.42194 2.92441 -1.12279 -0.0872067 0.584255 0.806871 + -2.39088 2.92679 -1.11191 -0.244572 0.547449 0.800302 + -2.3819 2.89788 -1.09264 0.18471 0.505911 0.842577 + -2.51375 2.87948 -1.06177 -0.497057 0.85052 0.171903 + -2.46684 2.86717 -1.05965 0.204828 0.729196 0.652931 + -2.44093 2.84227 -1.04153 0.239355 0.672351 0.700466 + -2.55656 2.85204 -0.988248 -0.341542 0.926441 0.158288 + -2.51101 2.82575 -0.98151 0.345405 0.755607 0.556554 + -2.48511 2.80086 -0.963391 0.302031 0.775501 0.554414 + -2.48381 2.76838 -0.917348 0.708668 0.414782 0.570742 + -2.63086 2.78461 -0.927457 -0.806476 0.566714 -0.168617 + -2.59755 2.8118 -0.900746 -0.18606 0.933011 0.308013 + -2.55199 2.7856 -0.893959 0.430014 0.725366 0.537524 + -2.52567 2.7659 -0.891038 0.370613 0.735319 0.567407 + -2.52438 2.73342 -0.844986 0.64503 0.432435 0.630028 + -2.66066 2.74987 -0.83028 -0.82744 0.561399 0.0132083 + -2.62735 2.77706 -0.803569 -0.0493439 0.873465 0.484379 + -2.60067 2.72773 -0.789934 0.531507 0.589788 0.607988 + -2.57435 2.70811 -0.786954 0.64034 0.39903 0.656308 + -2.58797 2.60381 -0.767704 0.834478 0.0537793 0.548411 + -2.72259 2.56669 -0.860208 -0.956183 0.231627 -0.179062 + -2.69296 2.68907 -0.747364 -0.889107 0.457443 -0.0153327 + -2.67426 2.71354 -0.70516 -0.838971 0.541086 0.0579133 + -2.74137 2.56587 -0.553589 -0.880493 0.457054 0.125831 + -2.76006 2.54148 -0.595733 -0.936866 0.349607 0.00749561 + -2.79322 2.40892 -0.417933 -0.938189 0.337526 0.076671 + -2.77823 2.47099 -0.568038 -0.987795 0.139993 -0.0682804 + -2.77526 2.41856 -0.604634 -0.952243 -0.234386 -0.195694 + -2.79025 2.35658 -0.454487 -0.94422 -0.283216 -0.16804 + -2.79322 2.40892 -0.417933 -0.994755 -0.0682202 -0.0762121 + -2.7775 2.26562 -0.336527 -0.835773 -0.475701 -0.274212 + -2.80481 2.30012 -0.301482 -0.875531 -0.403008 -0.266514 + -2.75386 2.42636 -0.691736 -0.900818 -0.381683 -0.206991 + -2.7346 2.37815 -0.659845 -0.715397 -0.677388 -0.171325 + -2.75601 2.37036 -0.572744 -0.677809 -0.67288 -0.296322 + -2.7551 2.32544 -0.485146 -0.630155 -0.673156 -0.386995 + -2.73235 2.41021 -0.791162 -0.935062 -0.318862 -0.154873 + -2.71751 2.37223 -0.759195 -0.751532 -0.656511 -0.0647519 + -2.69972 2.35576 -0.656064 -0.34996 -0.931197 -0.101984 + -2.69724 2.3427 -0.584036 -0.326262 -0.894569 -0.305449 + -2.69634 2.29778 -0.49643 -0.379151 -0.778764 -0.499771 + -2.68263 2.34984 -0.755413 -0.31506 -0.946747 0.0663902 + -2.65726 2.35028 -0.663776 0.0794665 -0.994686 -0.0654554 + -2.65478 2.33722 -0.591748 0.131387 -0.942476 -0.307371 + -2.65599 2.29595 -0.515472 0.0694266 -0.82843 -0.555773 + -2.61197 2.36466 -0.665269 0.863419 -0.495081 0.0969687 + -2.6308 2.34821 -0.587988 0.891864 -0.44596 -0.0754884 + -2.63201 2.30695 -0.511721 0.664362 -0.626642 -0.407362 + -2.64478 2.22857 -0.436561 -0.115513 -0.725978 -0.677948 + -2.68512 2.23031 -0.417578 -0.422456 -0.720006 -0.550566 + -2.62188 2.43396 -0.655106 0.915079 0.129608 0.38188 + -2.64071 2.41751 -0.577825 0.838624 0.42812 0.336785 + -2.62464 2.29899 -0.474341 0.965654 0.235955 0.108801 + -2.62827 2.23067 -0.436606 0.624547 -0.494214 -0.604726 + -2.57719 2.45282 -0.751176 0.950076 -0.121724 0.287295 + -2.63265 2.58495 -0.671634 0.792221 0.187362 0.580759 + -2.72643 2.48661 -0.533697 0.706814 0.384221 0.593959 + -2.75702 2.40792 -0.417813 0.326771 0.734124 0.595216 + -2.6713 2.33883 -0.461941 0.66829 0.595627 0.445665 + -2.64759 2.66422 -0.691526 0.617413 0.408156 0.672465 + -2.74137 2.56587 -0.553589 0.678726 0.311166 0.665212 + -2.79322 2.40892 -0.417933 0.730069 0.292584 0.617571 + -2.67426 2.71354 -0.70516 0.585618 0.494254 0.642468 + -2.79322 2.40892 -0.417933 0.0190187 0.771061 0.636477 + -2.76861 2.29912 -0.301354 0.184847 0.822265 0.538249 + -2.67835 2.27482 -0.324272 0.509222 0.781928 0.359558 + -2.63169 2.23507 -0.336622 0.773302 0.630507 0.066812 + -2.6209 2.22272 -0.399226 0.922044 0.387 0.00812664 + -2.80481 2.30012 -0.301482 0.0150156 0.836221 0.548187 + -2.7715 2.24308 -0.168698 0.0686574 0.941178 0.330863 + -2.68124 2.21887 -0.191567 0.252826 0.926529 0.27861 + -2.78894 2.21716 -0.116009 -0.974741 0.183439 0.127398 + -2.75434 2.21575 -0.014957 -0.119126 0.968143 0.220248 + -2.68391 2.19877 -0.072337 0.281741 0.943273 0.175662 + -2.57417 2.17654 -0.070437 0.116701 0.976384 0.181812 + -2.77177 2.18983 0.037742 -0.897126 0.328558 0.295322 + -2.74515 2.15659 0.136712 -0.87528 0.266124 0.40381 + -2.72403 2.18317 0.102277 -0.0532834 0.948269 0.312964 + -2.65361 2.16627 0.044948 0.275911 0.940453 0.198549 + -2.56437 2.16259 -0.001088 0.107395 0.964623 0.240768 + -2.71866 2.09769 0.054926 -0.847469 -0.529968 0.0304928 + -2.69974 2.11281 0.241532 -0.931868 0.263087 0.249814 + -2.67862 2.13939 0.207101 -0.129672 0.955035 0.266634 + -2.59974 2.13291 0.120721 0.151966 0.981231 0.11871 + -2.77295 2.19257 -0.167609 -0.871961 -0.47949 -0.0988584 + -2.74563 2.15807 -0.202654 -0.779736 -0.586112 -0.220195 + -2.70354 2.14469 -0.271672 -0.605016 -0.69265 -0.392673 + -2.64631 2.14052 -0.322056 -0.461534 -0.735068 -0.49665 + -2.62056 2.15769 -0.36899 -0.20352 -0.722511 -0.660725 + -2.74235 2.23447 -0.367186 -0.644679 -0.653046 -0.397391 + -2.60405 2.15979 -0.369034 0.495254 -0.455903 -0.739511 + -2.66377 2.05986 0.383058 -0.862399 -0.504179 0.0455193 + -2.68075 2.1021 0.367288 -0.98935 0.0869814 0.116705 + -2.65377 2.14535 0.367786 -0.625829 0.779616 -0.0231731 + -2.63115 2.14083 0.289608 -0.263948 0.955437 -0.132179 + -2.65958 2.04483 0.483687 -0.902284 -0.425122 -0.0718033 + -2.66952 2.10925 0.515707 -0.970708 0.234125 0.0539545 + -2.64254 2.15241 0.516154 -0.753836 0.65417 -0.0615804 + -2.54722 2.20302 0.444684 -0.44355 0.878741 -0.176288 + -2.52459 2.1986 0.366555 -0.328891 0.92046 -0.211148 + -2.59455 1.97362 0.497629 -0.62556 -0.767548 -0.139802 + -2.66026 2.01101 0.590262 -0.915908 -0.309181 -0.255968 + -2.6702 2.07543 0.622282 -0.99197 0.016934 -0.125338 + -2.64937 2.17764 0.618454 -0.823647 0.470607 -0.316441 + -2.44827 1.85895 0.591642 -0.425711 -0.871234 -0.24438 + -2.59276 1.95846 0.561489 -0.547416 -0.780403 -0.30217 + -2.64805 1.97062 0.596026 -0.673337 -0.516994 -0.52852 + -2.68163 1.94816 0.724126 -0.947784 -0.158946 -0.27648 + -2.40772 1.82859 0.626028 -0.309207 -0.916334 -0.254408 + -2.56371 1.90541 0.638774 -0.421108 -0.815377 -0.397277 + -2.619 1.91757 0.673311 -0.408098 -0.789303 -0.458755 + -2.66943 1.90768 0.72984 -0.835491 -0.540317 -0.100059 + -2.43108 1.83731 0.699726 -0.285353 -0.920983 -0.265262 + -2.52315 1.87505 0.673161 -0.311142 -0.876903 -0.366377 + -2.58025 1.85702 0.72798 -0.337728 -0.737034 -0.585424 + -2.63068 1.84713 0.784507 -0.467577 -0.587057 -0.66086 + -2.35111 1.81048 0.712186 -0.226399 -0.936499 -0.267794 + -2.48818 1.81928 0.754544 -0.155314 -0.723602 -0.672516 + -2.58267 1.73848 0.824504 -0.27478 -0.546245 -0.791273 + -2.62966 1.70621 0.870192 -0.482056 -0.492275 -0.724767 + -2.67768 1.81487 0.830195 -0.561067 -0.484789 -0.670957 + -2.24022 1.7703 0.672387 -0.216768 -0.97406 0.0649485 + -2.25326 1.7895 0.740333 -0.0978414 -0.986684 -0.129931 + -2.32032 1.74681 0.80888 0.0655626 -0.739591 -0.669855 + -2.41817 1.76788 0.780783 -0.0811627 -0.701237 -0.708293 + -2.23005 1.77135 0.598375 -0.39503 -0.914604 0.0863156 + -2.16063 1.76303 0.711379 -0.179924 -0.950519 0.253259 + -2.17367 1.78214 0.779274 0.0584101 -0.993014 -0.102523 + -2.23175 1.7483 0.824294 0.202526 -0.806138 -0.55599 + -2.18945 1.73318 0.523476 -0.468713 -0.850047 0.240265 + -2.16828 1.73679 0.612622 -0.375291 -0.901582 0.215189 + -2.11071 1.74814 0.693367 -0.186954 -0.927475 0.323787 + -2.07002 1.79113 0.816904 -0.136102 -0.976311 -0.168207 + -2.1281 1.7572 0.861874 0.191651 -0.750324 -0.63268 + -1.96398 1.75787 0.800715 -0.61827 -0.765524 -0.178085 + -2.0201 1.77624 0.798892 -0.299101 -0.953547 0.0358793 + -2.07482 1.75424 0.87501 -0.0678023 -0.603834 -0.794221 + -2.39266 1.62727 0.890711 0.178703 -0.409148 -0.894798 + -2.48123 1.62578 0.875297 -0.0509209 -0.564103 -0.824133 + -1.92184 1.71138 0.78204 -0.919863 -0.383005 -0.0846055 + -2.0322 1.70732 0.876675 -0.371098 0.230403 -0.899556 + -2.0187 1.73586 0.876834 -0.549696 -0.251992 -0.796451 + -2.33938 1.62431 0.903847 0.0807427 -0.234473 -0.968764 + -2.35287 1.59576 0.903688 -0.0285176 -0.0623737 -0.997645 + -1.95162 1.54327 0.695609 -0.893541 0.362483 -0.264936 + -1.93684 1.67183 0.814342 -0.742547 0.171886 -0.647363 + -2.1287 1.64025 0.874234 -0.273124 0.369562 -0.888159 + -1.99576 1.4709 0.701758 -0.629161 0.535672 -0.563215 + -2.03334 1.60485 0.811951 -0.363201 0.503872 -0.783708 + -2.09902 1.5652 0.821238 -0.367398 0.493523 -0.788324 + -2.22983 1.57812 0.886249 -0.261304 0.298129 -0.918063 + -2.00568 1.3866 0.610768 -0.776792 0.47007 -0.41908 + -2.10772 1.36445 0.683333 -0.383125 0.545403 -0.745487 + -2.06144 1.43125 0.711045 -0.395991 0.556382 -0.7305 + -2.1753 1.4964 0.804189 -0.355822 0.535242 -0.766099 + -2.30612 1.50933 0.869199 -0.425902 0.407795 -0.807658 + -2.01091 1.34499 0.547637 -0.82101 0.187108 -0.539382 + -2.04117 1.26221 0.547429 -0.823187 0.0125159 -0.567633 + -2.03594 1.30382 0.610558 -0.706906 0.399197 -0.583889 + -1.99104 1.3952 0.534271 -0.362261 -0.0715226 -0.929329 + -1.9796 1.30111 0.52765 -0.0896282 0.0114549 -0.995909 + -1.96357 1.2312 0.53693 0.0409232 -0.119397 -0.992003 + -2.03364 1.17372 0.55069 -0.275874 0.116181 -0.954146 + -1.93628 1.39256 0.520656 -0.356412 -0.348423 -0.866932 + -1.84257 1.26513 0.553172 -0.0791193 -0.224305 -0.971302 + -1.82655 1.19522 0.562451 0.213439 -0.479395 -0.851249 + -1.87035 1.14444 0.593405 0.422897 -0.30261 -0.854158 + -1.95604 1.14272 0.540192 0.24263 -0.00450295 -0.970108 + -1.9422 1.42049 0.512666 -0.241462 0.0906465 -0.966167 + -1.76075 1.29119 0.47323 -0.475316 -0.348325 -0.807926 + -1.78781 1.26248 0.539557 -0.424987 -0.579908 -0.695048 + -1.75005 1.18048 0.619175 0.229811 -0.875825 -0.424403 + -1.96852 1.46025 0.532603 0.279973 0.455906 -0.844846 + -1.81121 1.37251 0.505971 0.110625 0.597934 -0.793875 + -1.76668 1.31913 0.465241 -0.110583 0.0740392 -0.991105 + -1.73453 1.32555 0.469519 -0.598576 -0.0676313 -0.798206 + -1.69201 1.22698 0.438445 -0.849049 -0.159216 -0.503752 + -1.83753 1.41219 0.525857 0.0165979 0.379719 -0.924953 + -1.77906 1.37893 0.510249 -0.454201 0.20119 -0.867885 + -1.77486 1.40457 0.487045 -0.498039 0.350622 -0.793109 + -1.6956 1.2825 0.425286 -0.827926 -0.190966 -0.527323 + -1.66144 1.21731 0.386586 -0.829269 0.00101613 -0.558849 + -1.66855 1.1534 0.384091 -0.927191 -0.0580284 -0.370067 + -1.71907 1.19827 0.504771 -0.799903 -0.540106 -0.261613 + -1.73841 1.37974 0.466652 0.0308051 0.628342 -0.777327 + -1.6236 1.20702 0.333423 -0.510988 0.289906 -0.809225 + -1.58944 1.14192 0.294773 -0.959969 -0.236139 -0.150657 + -1.63799 1.14373 0.332232 -0.71601 0.258553 -0.648444 + -1.72334 1.39731 0.482822 -0.304943 0.269619 -0.913409 + -1.55 1.18402 0.345047 0.372253 0.60795 -0.701302 + -1.58715 1.1821 0.312979 0.214456 0.648658 -0.730241 + -1.54797 1.02022 0.202565 -0.230462 0.523247 -0.820427 + -1.76554 1.46641 0.498735 -0.467581 -0.105256 -0.877661 + -1.52648 1.25231 0.376564 0.193148 0.279237 -0.940596 + -1.53493 1.20159 0.361217 0.208956 0.424488 -0.880992 + -1.47932 1.00796 0.269591 0.943581 -0.0354123 0.329243 + -1.47344 1.01536 0.236374 0.884015 0.398156 -0.244927 + -1.56869 1.32141 0.392476 -0.483494 -0.419662 -0.768191 + -1.46161 1.25622 0.403406 0.33007 0.398658 -0.855643 + -2.17596 1.71816 0.505099 -0.263738 -0.0843385 -0.9609 + -1.54797 1.02022 0.202565 -0.521385 -0.621049 0.585197 + -1.46161 1.25622 0.403406 -0.349121 -0.681257 -0.643431 + -1.59651 1.02203 0.240025 -0.671117 0.289821 -0.682353 + -1.61359 1.00509 0.256167 -0.914185 0.0015515 -0.405295 + -1.67449 1.15068 0.422399 -0.893056 -0.436931 -0.107439 + -1.50234 0.79014 0.055474 -0.353134 0.453329 -0.818406 + -1.51852 0.785997 0.06025 -0.57868 0.344038 -0.739437 + -1.53559 0.768969 0.076342 -0.833049 0.124216 -0.539072 + -1.61953 1.00237 0.294474 -0.954233 -0.297303 -0.0324203 + -1.51479 0.962226 0.156811 0.157683 0.565378 -0.809619 + -1.46917 0.732146 0.009719 0.122346 0.494524 -0.86051 + -1.46578 0.650271 -0.032268 0.197986 -0.209541 -0.957546 + -1.48196 0.646043 -0.027542 -0.427993 -0.309191 -0.849249 + -1.54581 0.757617 0.093804 -0.960131 -0.201784 -0.193471 + -1.51058 1.01353 0.204357 0.382254 0.59817 -0.704326 + -1.4571 0.731029 0.019659 0.786894 0.350643 -0.507787 + -1.45372 0.649152 -0.02233 0.65373 -0.308235 -0.691106 + -1.49218 0.634691 -0.010081 -0.609276 -0.697937 -0.376386 + -1.54175 0.759102 0.133231 -0.736178 -0.58669 0.337397 + -1.44014 0.777232 0.086428 0.965795 0.207333 -0.155736 + -1.45289 0.782328 0.067205 0.737273 0.43294 -0.518644 + -1.44451 0.644244 -0.008829 0.693537 -0.376036 -0.614495 + -1.48298 0.629783 0.00342 -0.32377 -0.946123 0.00487623 + -1.44603 0.769833 0.119646 0.78951 -0.28675 0.542631 + -1.43177 0.639149 0.010395 0.876247 -0.479596 -0.0466862 + -1.46019 0.624934 0.016618 0.112789 -0.969363 0.218207 + -1.51896 0.754167 0.14638 -0.162587 -0.788857 0.59268 + -1.47445 0.755618 0.125869 0.437179 -0.55398 0.708506 + -1.52288 0.986717 0.329392 0.770085 -0.334956 0.542931 + -1.5559 1.0049 0.38149 0.696801 -0.40086 0.594794 + -1.50747 0.773805 0.177967 0.216367 -0.70042 0.680145 + -1.48532 1.13277 0.359413 0.993469 0.0522243 -0.101446 + -1.52888 1.11144 0.419164 0.790188 -0.492035 0.365383 + -1.55706 1.1107 0.472043 0.537579 -0.644801 0.54336 + -1.59401 1.11498 0.500825 0.536835 -0.562131 0.62914 + -1.58579 1.01846 0.423404 0.193689 -0.684936 0.702387 + -1.47688 1.18341 0.374709 0.864777 0.066944 -0.497674 + -1.48993 1.15558 0.452516 0.820847 -0.554378 0.137388 + -1.51811 1.15484 0.505396 0.488966 -0.785006 0.380365 + -1.58083 1.16838 0.550743 0.217533 -0.881851 0.418353 + -1.61778 1.17257 0.579474 0.16423 -0.937898 0.305574 + -1.48452 1.20507 0.546602 0.923418 -0.323581 0.206383 + -1.51974 1.17783 0.595377 0.475071 -0.84225 0.254797 + -1.58246 1.19137 0.640725 0.24207 -0.97019 -0.0115609 + -1.61781 1.15953 0.666276 0.117909 -0.964051 -0.238124 + -1.46161 1.25622 0.403406 0.182702 -0.934433 -0.305706 + -2.22158 1.4297 0.776526 -0.399677 0.576859 -0.712385 + -2.3626 1.4335 0.884137 -0.499741 0.383233 -0.776783 + -2.51607 1.4707 0.967903 -0.314174 -0.156043 -0.936453 + -2.18905 1.30173 0.668175 -0.377341 0.480985 -0.79137 + -2.29883 1.35653 0.762461 -0.457124 0.527599 -0.716015 + -2.43985 1.36033 0.870072 -0.679531 0.528154 -0.509207 + -2.55795 1.29515 1.00677 -0.777668 -0.0362123 -0.627631 + -2.57256 1.39479 0.98279 -0.468191 -0.191573 -0.86261 + -2.11727 1.24109 0.5954 -0.375559 0.364049 -0.852305 + -2.13899 1.16138 0.587867 -0.405973 0.198356 -0.892099 + -2.24957 1.22143 0.65906 -0.461721 0.312796 -0.830044 + -2.35935 1.27623 0.753346 -0.568282 0.37039 -0.734756 + -2.45962 1.2704 0.860231 -0.758861 0.275312 -0.590197 + -2.05536 1.09401 0.543158 -0.24911 0.0975772 -0.963547 + -2.03337 1.0074 0.527763 -0.112446 0.228181 -0.967103 + -2.17506 1.07656 0.587571 -0.391157 0.198376 -0.89869 + -2.28565 1.13661 0.658765 -0.483454 0.248239 -0.839434 + -1.95709 1.06466 0.54279 0.280709 0.104229 -0.954117 + -1.9351 0.978054 0.527395 0.359277 0.250944 -0.898859 + -2.02185 0.925852 0.501813 -0.026173 0.362291 -0.931698 + -2.16355 0.995014 0.561621 -0.30587 0.316225 -0.898023 + -1.87139 1.06639 0.596003 0.608294 0.0443129 -0.792474 + -1.86447 0.985962 0.583301 0.638048 0.223832 -0.736746 + -1.84667 0.90357 0.570806 0.69828 0.0693767 -0.712455 + -1.9173 0.895663 0.514903 0.473333 0.342722 -0.811478 + -1.9978 0.845877 0.461334 0.0371751 0.462423 -0.88588 + -1.79385 1.1297 0.650129 0.586702 -0.485353 -0.648239 + -1.80259 1.06251 0.667518 0.768497 -0.0722046 -0.635767 + -1.79567 0.982171 0.654866 0.808225 0.144551 -0.570857 + -1.78401 0.905763 0.660809 0.837957 0.0601161 -0.542415 + -1.8293 0.835938 0.596148 0.817203 0.0901419 -0.569258 + -1.73359 1.12172 0.728554 0.495678 -0.494808 -0.713771 + -1.74233 1.05453 0.745943 0.680259 -0.162053 -0.714833 + -1.7404 0.972385 0.752615 0.761869 0.0278333 -0.647133 + -1.72873 0.895891 0.758508 0.806428 0.0939876 -0.583815 + -1.72804 1.18235 0.68035 0.285053 -0.847523 -0.447716 + -1.6787 1.12832 0.732518 0.160881 -0.579655 -0.798822 + -1.68426 1.0677 0.780721 -0.0431545 -0.437108 -0.898373 + -1.67503 0.993074 0.804182 0.151432 -0.226414 -0.962187 + -1.67309 0.910845 0.810805 0.535372 -0.088663 -0.83995 + -1.71513 1.18513 0.556936 -0.568156 -0.821054 -0.0554042 + -1.69311 1.18699 0.618111 -0.135757 -0.989895 0.0409699 + -1.66467 1.16989 0.715122 0.133919 -0.807543 -0.574404 + -1.62616 1.00956 0.800619 0.743316 -0.0441051 -0.667485 + -1.60738 0.938321 0.794815 0.196255 -0.0880708 -0.97659 + -1.67055 1.13745 0.474514 -0.813186 -0.578851 0.0604995 + -1.65237 1.13251 0.532479 -0.526637 -0.776519 0.345934 + -1.6239 1.12854 0.542738 0.18189 -0.757081 0.627491 + -1.66465 1.18294 0.628321 -0.202455 -0.976883 0.0686345 + -1.61546 1.00377 0.333852 -0.881271 -0.444839 0.159623 + -1.59728 0.998827 0.391816 -0.626495 -0.653323 0.425057 + -1.61213 1.05113 0.783223 0.555339 -0.294414 -0.777765 + -1.5683 0.988202 0.841219 0.547399 0.0488385 -0.835445 + -1.5629 0.938744 0.837082 0.558675 0.180516 -0.809504 + -1.54412 0.867502 0.831277 0.432244 -0.111071 -0.89489 + -1.59815 0.863693 0.818274 -0.21058 -0.422443 -0.881588 + -1.60952 1.13005 0.79013 0.773799 -0.44207 -0.453661 + -1.56569 1.06712 0.848126 0.525555 -0.0998693 -0.844878 + -1.48094 0.947401 0.878488 0.109901 0.0457181 -0.992891 + -1.47554 0.897944 0.874352 0.555507 -0.0448609 -0.8303 + -1.57418 1.16189 0.764578 0.643914 -0.687121 -0.33651 + -1.54296 1.11265 0.844866 0.306169 -0.354462 -0.883525 + -1.45821 0.993018 0.875278 0.0809339 -0.209781 -0.974393 + -1.4594 0.843428 0.897777 0.648958 -0.222243 -0.727641 + -1.52797 0.812986 0.854702 0.377584 -0.371614 -0.848135 + -1.54804 1.22667 0.747174 0.814744 -0.57145 -0.0981658 + -1.51682 1.17743 0.827461 0.325364 -0.412496 -0.850873 + -1.45391 1.09575 0.847134 -0.0822618 -0.301143 -0.950024 + -1.51282 1.25382 0.698348 0.686531 -0.7209 0.0947574 + -1.4986 1.24995 0.798452 0.370037 -0.665066 -0.64866 + -1.43569 1.16827 0.818123 0.0269922 -0.299273 -0.953786 + -1.39844 1.00285 0.872655 -0.0319888 -0.264807 -0.963771 + -1.40273 0.900111 0.9008 -0.0964257 -0.330437 -0.938889 + -1.42705 0.810131 0.938248 0.268959 -0.383339 -0.883579 + -1.48115 0.749575 0.933935 0.590757 -0.414201 -0.692418 + -1.52058 0.751028 0.891216 0.493563 -0.401586 -0.771443 + -1.59075 0.801736 0.854789 0.124545 -0.357172 -0.925698 + -1.3925 0.822363 0.933659 0.0203045 -0.444787 -0.895406 + -1.41682 0.732299 0.971057 0.277714 -0.437923 -0.855043 + -1.4488 0.716278 0.974406 0.313028 -0.499471 -0.807801 + -1.49687 0.688112 0.95859 0.596314 -0.520787 -0.610893 + -1.33489 0.693301 1.0436 0.393503 -0.576032 -0.716479 + -1.42433 0.648578 1.01686 0.201754 -0.557455 -0.805319 + -1.45478 0.596872 1.05422 -0.0269332 -0.686943 -0.726212 + -1.47925 0.664574 1.01176 0.20294 -0.750257 -0.62923 + -1.50627 0.652275 0.987461 0.678628 -0.670131 -0.300646 + -1.1991 0.676835 1.14652 0.449861 -0.632005 -0.631027 + -1.3424 0.60958 1.08941 0.40311 -0.549624 -0.731721 + -1.45688 0.548566 1.10849 -0.0682584 -0.740357 -0.668739 + -1.54082 0.606679 1.08404 0.0652579 -0.800728 -0.595463 + -1.14769 0.775965 1.02182 0.425913 -0.790026 -0.440974 + -1.07025 0.74551 1.15717 0.460718 -0.742964 -0.485534 + -1.05089 0.714986 1.22064 0.473928 -0.645433 -0.599006 + -1.17527 0.617705 1.20894 0.499067 -0.508761 -0.701495 + -1.1661 0.918671 0.745052 0.286612 -0.613039 -0.736231 + -1.14172 0.8227 0.960676 0.697446 -0.567514 -0.437603 + -1.06428 0.792159 1.09598 0.406018 -0.801647 -0.438761 + -0.948354 0.796696 1.19172 0.380433 -0.849613 -0.36528 + -0.928998 0.766172 1.25519 0.432385 -0.795523 -0.424483 + -1.20241 1.08491 0.659711 -0.821727 -0.175557 -0.542167 + -1.29256 1.60304 0.697494 -0.812119 -0.563741 -0.15053 + -1.21542 1.25462 0.632759 -0.0031453 -0.00839504 -0.99996 + -1.587 0.730286 0.874144 0.0665804 -0.448761 -0.891168 + -1.66934 0.839396 0.83016 0.573369 -0.0696163 -0.816334 + -1.71192 0.812042 0.755739 0.804134 0.0394228 -0.593139 + -1.53629 0.689567 0.915871 0.436515 -0.5196 -0.734486 + -1.59718 0.672544 0.915154 0.449715 -0.429837 -0.782941 + -1.65253 0.75546 0.827341 0.824798 -0.0082988 -0.565367 + -1.69959 0.744897 0.780836 0.756707 -0.0979742 -0.646371 + -1.76663 0.838045 0.6861 0.810457 -0.0213166 -0.58541 + -1.54647 0.631827 0.956881 0.40973 -0.619083 -0.669969 + -1.55587 0.595988 0.985752 0.578711 -0.615123 -0.53546 + -1.59539 0.606046 0.942334 0.438197 -0.540751 -0.718033 + -1.65074 0.688961 0.854519 0.773858 -0.154545 -0.614215 + -1.57421 0.54596 1.0314 0.73269 -0.637314 -0.238741 + -1.61372 0.556018 0.987985 0.602529 -0.590915 -0.53645 + -1.6368 0.619564 0.87692 0.787817 -0.316406 -0.528424 + -1.68565 0.675413 0.803186 0.387969 -0.471947 -0.791673 + -1.7543 0.770899 0.711198 0.769803 -0.295818 -0.565593 + -1.51022 0.651849 1.0122 0.607161 -0.79105 -0.074804 + -1.57817 0.545448 1.05609 0.901714 -0.375559 0.214166 + -1.60585 0.49996 1.10848 0.834642 -0.550431 0.0199433 + -1.62122 0.504521 1.03438 0.342927 -0.836223 -0.42794 + -1.5718 0.593954 1.08447 0.724252 -0.6792 -0.118936 + -1.59948 0.548467 1.13686 0.723504 -0.659554 -0.203789 + -1.62677 0.468698 1.16843 0.780966 -0.620852 -0.0680772 + -1.64214 0.473346 1.09438 0.513707 -0.815679 -0.26603 + -1.6443 0.568153 0.923365 0.467164 -0.655206 -0.593686 + -1.54292 0.558373 1.13831 -0.0577527 -0.810044 -0.583519 + -1.60355 0.505276 1.20727 0.517044 -0.801543 -0.300325 + -1.62257 0.484198 1.25658 0.529428 -0.846497 -0.0561147 + -1.64579 0.44762 1.21774 0.402664 -0.90742 0.120211 + -1.66103 0.442873 1.15136 -0.04617 -0.980104 -0.19304 + -1.54699 0.515182 1.20871 -0.0749877 -0.809016 -0.582983 + -1.52479 0.464575 1.26937 -0.31232 -0.874101 -0.372026 + -1.59744 0.481079 1.30738 -0.0259835 -0.972897 -0.229774 + -1.6726 0.458265 1.2863 0.383771 -0.917937 -0.100556 + -1.68784 0.453432 1.21987 0.295227 -0.952111 0.0795293 + -1.44043 0.486339 1.17467 -0.111137 -0.760384 -0.639894 + -1.41823 0.435732 1.23532 -0.147158 -0.788088 -0.597713 + -1.44873 0.417293 1.32726 -0.541541 -0.783838 -0.303861 + -1.52138 0.433797 1.36528 -0.365322 -0.895546 -0.254041 + -1.32655 0.544633 1.1463 0.351928 -0.596813 -0.721083 + -1.31011 0.482406 1.21249 0.297737 -0.662763 -0.687093 + -1.26219 0.434609 1.27727 0.349234 -0.582392 -0.734068 + -1.27731 0.371808 1.32425 0.240972 -0.661891 -0.709811 + -1.40647 0.371246 1.30042 -0.406111 -0.755673 -0.513841 + -1.15942 0.552757 1.26583 0.500775 -0.466544 -0.729082 + -1.13583 0.493105 1.31715 0.470839 -0.494101 -0.730872 + -1.08792 0.445309 1.38194 0.44709 -0.495578 -0.744656 + -0.987842 0.616329 1.33052 0.433735 -0.464773 -0.771919 + -0.964256 0.556677 1.38184 0.377966 -0.474035 -0.795256 + -0.958075 0.487541 1.42119 0.352676 -0.486815 -0.799144 + -1.06737 0.38742 1.4322 0.417652 -0.529008 -0.738726 + -1.02706 0.655854 1.28306 0.483618 -0.479365 -0.732341 + -0.815221 0.742389 1.35778 0.313595 -0.419724 -0.851757 + -0.79827 0.664136 1.38552 0.264558 -0.375585 -0.888226 + -0.792089 0.594913 1.42482 0.195617 -0.419154 -0.886591 + -0.854442 0.781914 1.31032 0.433389 -0.680396 -0.590962 + -0.695028 0.820486 1.34571 -0.0541374 -0.660398 -0.748961 + -0.708286 0.770455 1.36997 0.016561 -0.390295 -0.920541 + -0.691335 0.692288 1.39776 -0.312427 -0.389432 -0.866448 + -0.812578 0.820227 1.26856 0.348052 -0.885531 -0.307726 + -0.738021 0.83597 1.32369 0.20944 -0.86485 -0.456255 + -0.618769 0.825268 1.31523 -0.701038 -0.67658 -0.225354 + -0.640121 0.757806 1.35788 -0.480281 -0.300874 -0.823896 + -0.653379 0.707775 1.38213 -0.453169 -0.246801 -0.856579 + -0.811583 0.827076 1.2515 0.343971 -0.810517 -0.474075 + -0.661762 0.840666 1.29316 -0.0297325 -0.936742 -0.348755 + -0.660767 0.847515 1.2761 -0.255366 -0.947414 0.192862 + -0.59698 0.776022 1.30872 -0.911292 -0.297893 -0.284263 + -0.862432 0.824007 1.21941 0.406876 -0.822885 -0.396626 + -0.734307 0.862237 1.2566 -0.094028 -0.87659 -0.471962 + -0.864203 0.836358 1.14702 0.425711 -0.872347 -0.240376 + -0.785156 0.85908 1.22446 0.365456 -0.848031 -0.383778 + -0.78827 0.875179 1.17438 -0.0730326 -0.996704 0.0353108 + -0.712689 0.835707 1.21915 -0.655829 -0.635822 0.406962 + -0.687961 0.839972 1.25976 -0.474731 -0.542775 0.692839 + -0.614421 0.825336 1.27931 -0.362325 -0.173236 0.915811 + -0.950125 0.809046 1.11933 0.269323 -0.921694 -0.279185 + -0.867317 0.852369 1.09689 0.477885 -0.790046 -0.383997 + -0.865264 0.89818 1.02414 0.242881 -0.890796 -0.384045 + -1.04637 0.825001 1.03549 0.234761 -0.86554 -0.442411 + -0.932214 0.841889 1.05884 0.331304 -0.843882 -0.42202 + -0.930161 0.8877 0.986093 0.397391 -0.824751 -0.402326 + -0.860678 0.922089 0.953931 0.198095 -0.896026 -0.397361 + -0.826398 0.869631 1.10659 -0.830173 -0.520502 0.199724 + -1.11972 0.886319 0.929887 0.502918 -0.673538 -0.541683 + -0.988034 0.855089 0.986578 0.212904 -0.869801 -0.445105 + -0.960444 0.897098 0.922215 0.218833 -0.770023 -0.599314 + -0.902572 0.92971 0.921729 0.279728 -0.855884 -0.434988 + -1.1441 0.982289 0.714262 0.570624 -0.289262 -0.768581 + -1.13996 1.08149 0.754245 0.881795 -0.00266715 -0.471624 + -1.06139 0.916319 0.880924 0.169801 -0.549543 -0.818028 + -1.05187 0.99702 0.888545 0.28604 -0.290561 -0.913102 + -0.928793 0.949374 0.86747 -0.0679236 -0.763173 -0.642614 + -1.21128 1.35382 0.672742 0.426411 -0.042953 -0.903509 + -1.1853 1.29834 0.696237 0.835049 0.0870797 -0.54324 + -1.13045 1.1621 0.761815 0.894394 0.152379 -0.420523 + -1.20241 1.08491 0.659711 0.928462 0.0122208 -0.371226 + -1.29256 1.60304 0.697494 0.437824 -0.105642 -0.892832 + -2.55227 2.13444 0.203282 -0.144941 0.975208 -0.167216 + -2.46869 2.13569 0.121704 -0.206607 0.964036 -0.167178 + -2.5105 2.12924 0.074687 0.0104376 0.989857 0.141682 + -2.4744 2.21408 0.359739 -0.617388 0.685529 -0.385852 + -2.50208 2.14992 0.196466 -0.336006 0.889614 -0.309334 + -2.39707 2.18859 0.187288 -0.578816 0.703306 -0.412714 + -2.34077 2.15746 0.061211 -0.648427 0.76038 -0.0369516 + -2.38258 2.151 0.014202 -0.200623 0.963665 0.176352 + -2.55404 2.22825 0.546984 -0.691729 0.636677 -0.340814 + -2.54716 2.2602 0.573062 -0.858596 0.267177 -0.437526 + -2.51401 2.31498 0.503967 -0.910698 0.032595 -0.411784 + -2.46937 2.34416 0.416232 -0.868306 0.0381956 -0.494556 + -2.44543 2.27979 0.37632 -0.718041 0.275045 -0.639349 + -2.43045 2.20281 0.26205 -0.612632 0.694204 -0.37784 + -2.68135 2.24606 0.776546 -0.81152 0.410326 -0.416014 + -2.67447 2.278 0.802623 -0.720618 0.411119 -0.558293 + -2.62183 2.30578 0.72291 -0.87712 0.0831844 -0.473013 + -2.58868 2.36048 0.653765 -0.895234 -0.0565549 -0.441993 + -2.69067 2.14011 0.697649 -0.968115 0.0605135 -0.243087 + -2.72265 2.20853 0.85574 -0.939291 0.0748139 -0.334867 + -2.73841 2.35365 0.931195 -0.907184 0.0635316 -0.41591 + -2.68577 2.38143 0.851482 -0.878298 0.0280821 -0.477288 + -2.64802 2.47483 0.752112 -0.90022 -0.0899189 -0.426051 + -2.6886 2.09026 0.768796 -0.968818 -0.0878022 -0.231693 + -2.73772 2.11713 0.89106 -0.940948 0.00987779 -0.338408 + -2.78481 2.16824 1.04533 -0.949733 0.0332333 -0.311293 + -2.76975 2.25965 1.01001 -0.94575 0.0366028 -0.322828 + -2.66813 2.02558 0.693429 -0.997575 0.0600019 -0.0352705 + -2.71138 1.98324 0.833166 -0.941642 0.0235637 -0.33579 + -2.7605 2.01002 0.95538 -0.936041 0.0429695 -0.349257 + -2.72489 1.90573 0.863813 -0.922793 -0.0425729 -0.382938 + -2.81001 1.8243 1.04305 -0.925878 -0.0272132 -0.376842 + -2.86532 1.87272 1.20998 -0.952521 0.000752998 -0.304472 + -2.81581 2.05844 1.12231 -0.944092 0.0713675 -0.321864 + -2.72178 1.82364 0.876602 -0.80842 -0.285164 -0.514916 + -2.8069 1.74221 1.05584 -0.890098 -0.21666 -0.400979 + -2.72186 1.72568 0.947274 -0.734147 -0.372987 -0.567371 + -2.71597 1.64793 0.986144 -0.712937 -0.337375 -0.614735 + -2.80101 1.66446 1.09471 -0.864067 -0.233578 -0.445902 + -2.67776 1.71691 0.900867 -0.615568 -0.460027 -0.639884 + -2.65143 1.66036 0.922402 -0.540757 -0.461793 -0.703086 + -2.66111 1.61844 0.948007 -0.54897 -0.341838 -0.762744 + -2.69851 1.5131 1.03227 -0.708767 -0.344801 -0.615436 + -2.60333 1.64967 0.891728 -0.390486 -0.520427 -0.759392 + -2.5719 1.58847 0.916332 -0.242246 -0.493655 -0.835237 + -2.58158 1.54655 0.941937 -0.266086 -0.418532 -0.868348 + -2.64365 1.48362 0.994138 -0.522657 -0.378444 -0.763943 + -2.51266 1.68707 0.850743 -0.116092 -0.518464 -0.847182 + -2.45401 1.53363 0.915703 -0.112405 -0.304601 -0.945824 + -2.71043 1.46155 1.07875 -0.739514 -0.310717 -0.597138 + -2.81293 1.61291 1.14119 -0.870545 -0.246686 -0.42579 + -2.69582 1.36191 1.10273 -0.749938 -0.445746 -0.488778 + -2.83411 1.59996 1.19782 -0.920479 -0.256511 -0.294823 + -2.92455 1.84272 1.39255 -0.973138 -0.0687242 -0.219724 + -2.90337 1.85575 1.33597 -0.94824 0.0143974 -0.317229 + -2.69088 1.31879 1.16603 -0.83262 -0.488595 -0.260803 + -2.82917 1.55684 1.26112 -0.911736 -0.404557 -0.0712168 + -2.88132 1.67507 1.38653 -0.916345 -0.399691 -0.0236408 + -2.63789 1.20703 1.1818 -0.924112 -0.302307 -0.233726 + -2.73704 1.3818 1.34469 -0.898637 -0.438456 0.0144213 + -2.75066 1.43318 1.4467 -0.893538 -0.394871 0.213698 + -2.8428 1.60821 1.36313 -0.856803 -0.490194 0.159995 + -2.61381 1.14019 1.11437 -0.978571 -0.0727289 -0.192639 + -2.61716 1.10996 1.32433 -0.934912 -0.354656 -0.0126379 + -2.68404 1.27004 1.36046 -0.912307 -0.409137 -0.0174159 + -2.68566 1.28041 1.4271 -0.833467 -0.458792 0.307965 + -2.57772 1.20514 0.996875 -0.904527 0.147861 -0.39996 + -2.60092 1.04733 1.08021 -0.985106 -0.145394 -0.0917945 + -2.59308 1.04304 1.25684 -0.950259 -0.311364 0.00781739 + -2.61877 1.12024 1.39092 -0.928899 -0.346585 0.130485 + -2.56484 1.11228 0.962714 -0.919465 0.105989 -0.378616 + -2.58618 0.98852 1.00507 -0.969967 -0.190865 -0.150778 + -2.58243 1.00189 1.14671 -0.945154 -0.323487 0.0451764 + -2.54816 0.916788 1.24551 -0.924532 -0.377052 0.0554235 + -2.55881 0.957931 1.35565 -0.925182 -0.375946 0.0519808 + -2.50194 1.17043 0.851593 -0.821886 0.309601 -0.478173 + -2.49899 1.08753 0.812577 -0.810373 0.197348 -0.551679 + -2.56188 1.02929 0.923648 -0.93213 0.0344602 -0.36048 + -2.55869 0.93982 0.946217 -0.96478 -0.129222 -0.229133 + -2.56768 0.943084 1.07156 -0.945993 -0.321485 0.0417764 + -2.40168 1.17625 0.744709 -0.619436 0.298552 -0.726062 + -2.41419 1.08425 0.721255 -0.61971 0.265996 -0.738381 + -2.49104 0.990875 0.771388 -0.824036 0.158811 -0.543823 + -2.5344 0.980593 0.864797 -0.924585 0.0233744 -0.380258 + -2.29816 1.04453 0.635261 -0.448085 0.294329 -0.844151 + -2.27494 0.963113 0.591875 -0.410539 0.358633 -0.838355 + -2.40624 0.987598 0.680065 -0.617791 0.253472 -0.744369 + -2.14033 0.913598 0.518236 -0.231781 0.399618 -0.886895 + -2.24601 0.882803 0.540174 -0.375682 0.422097 -0.825044 + -2.37731 0.907288 0.628365 -0.566056 0.310739 -0.763559 + -2.45752 0.899734 0.695248 -0.762946 0.183049 -0.620005 + -2.48473 0.934199 0.747354 -0.875126 0.0847596 -0.476414 + -1.96912 0.765755 0.420306 0.136233 0.291685 -0.946763 + -2.11165 0.833479 0.477208 -0.146208 0.497451 -0.855082 + -2.20315 0.817744 0.481859 -0.324 0.470537 -0.820743 + -2.33615 0.828191 0.564767 -0.558406 0.286279 -0.778606 + -2.41636 0.820637 0.631649 -0.735722 0.114228 -0.667582 + -1.89324 0.815688 0.474423 0.617393 0.322612 -0.717459 + -1.88089 0.74382 0.478903 0.783604 0.124291 -0.608701 + -1.96103 0.67472 0.399785 0.449127 0.333875 -0.828741 + -2.06879 0.768334 0.418843 0.209192 0.663968 -0.717904 + -1.81695 0.764071 0.600627 0.86766 -0.183795 -0.461937 + -1.81262 0.720615 0.663493 0.876135 -0.325717 -0.355382 + -1.87281 0.652784 0.458382 0.832041 0.0362028 -0.553532 + -1.91603 0.534961 0.413056 0.789759 -0.279424 -0.546079 + -1.96117 0.623916 0.370181 0.582356 0.309594 -0.751673 + -1.74998 0.727445 0.774065 0.26545 -0.746467 -0.610183 + -1.80877 0.671025 0.710185 0.86313 -0.426725 -0.270022 + -1.86896 0.60328 0.505124 0.945919 -0.196669 -0.257988 + -1.68642 0.623923 0.855168 -0.0045126 -0.708756 -0.705439 + -1.75074 0.675868 0.825996 0.214467 -0.785796 -0.580112 + -1.8218 0.634855 0.772834 0.833828 -0.514777 -0.199338 + -1.85867 0.560345 0.575091 0.957778 -0.223931 -0.180319 + -1.90574 0.492112 0.483073 0.829766 -0.421959 -0.365293 + -1.69254 0.569577 0.911698 -0.158111 -0.733039 -0.661554 + -1.76377 0.639697 0.888646 0.105377 -0.842898 -0.527655 + -1.82642 0.59689 0.838591 0.7945 -0.584643 -0.1642 + -1.86328 0.522381 0.640847 0.966507 -0.214487 -0.140924 + -1.65042 0.513721 0.979845 0.525468 -0.716742 -0.458436 + -1.70803 0.526187 0.970451 -0.238842 -0.749552 -0.617355 + -1.77926 0.596395 0.94745 0.0728766 -0.840701 -0.536573 + -1.85124 0.55914 0.898178 0.809196 -0.579714 -0.0955744 + -1.66931 0.483248 1.03682 0.266847 -0.854562 -0.445551 + -1.72604 0.479952 1.02813 -0.222569 -0.779222 -0.585898 + -1.80409 0.558557 1.00699 0.0564278 -0.87805 -0.475231 + -1.86902 0.523285 0.957278 0.84407 -0.530537 -0.0779501 + -1.85602 0.483439 0.700495 0.962704 -0.259133 -0.0777881 + -1.68732 0.437013 1.09451 0.485507 -0.842984 -0.231648 + -1.74607 0.451085 1.08933 -0.400766 -0.840026 -0.36571 + -1.82411 0.52969 1.06819 0.0629603 -0.912948 -0.40319 + -1.88128 0.493809 1.02393 0.757383 -0.64941 -0.0680977 + -1.87381 0.447584 0.759596 0.806986 -0.589472 0.036005 + -1.70775 0.443486 1.2775 0.372705 -0.927857 -0.0131178 + -1.70723 0.427067 1.15213 0.206735 -0.977373 -0.0447376 + -1.77727 0.448527 1.15856 -0.429328 -0.85716 -0.284526 + -1.83637 0.500213 1.13484 0.00218417 -0.947644 -0.319322 + -1.64747 0.455233 1.33715 0.287165 -0.957778 0.0140231 + -1.7011 0.453737 1.34454 0.320589 -0.944677 0.0693361 + -1.64082 0.465398 1.40414 -0.00173264 -0.981346 -0.192241 + -1.70716 0.451032 1.41863 0.746003 -0.553233 -0.370692 + -1.73843 0.424595 1.22141 0.0774129 -0.99613 -0.0416256 + -1.48839 0.408059 1.43006 -0.449636 -0.874282 -0.182915 + -1.60783 0.439747 1.46897 -0.101088 -0.935032 -0.339847 + -1.67675 0.424968 1.47897 0.194083 -0.932887 -0.303405 + -1.74448 0.42189 1.2955 0.226335 -0.973954 -0.0136437 + -1.7944 0.430866 1.22575 -0.355016 -0.914442 -0.194316 + -1.417 0.365191 1.40291 -0.655971 -0.738087 -0.157892 + -1.46206 0.367494 1.51932 -0.475959 -0.842572 -0.252063 + -1.57742 0.413598 1.52926 -0.208755 -0.932572 -0.294502 + -1.67259 0.411655 1.55043 0.289223 -0.867086 -0.4056 + -1.76926 0.424379 1.37059 0.07764 -0.991337 -0.105937 + -1.37475 0.319144 1.37606 -0.432593 -0.810749 -0.394397 + -1.39068 0.324625 1.49217 -0.770867 -0.619188 -0.149566 + -1.38133 0.290225 1.57975 -0.80906 -0.568873 -0.147665 + -1.43898 0.324733 1.62698 -0.483201 -0.844856 -0.229641 + -1.46494 0.348315 1.57954 -0.318927 -0.898098 -0.302829 + -1.2514 0.260562 1.46153 0.119277 -0.827592 -0.548511 + -1.36742 0.271559 1.45088 -0.587021 -0.731977 -0.345856 + -1.35807 0.237154 1.53847 -0.627426 -0.748182 -0.215778 + -1.38355 0.264554 1.67781 -0.780556 -0.606511 -0.151251 + -1.44119 0.299154 1.72508 -0.4835 -0.852908 -0.196913 + -1.26555 0.307234 1.38929 0.20303 -0.746738 -0.633372 + -1.03236 0.181381 1.67547 0.111045 -0.884332 -0.453459 + -1.01916 0.153671 1.75087 0.0721301 -0.93162 -0.356205 + -1.24407 0.212977 1.53635 0.0391076 -0.894326 -0.445704 + -1.23482 0.182879 1.61828 -0.0921612 -0.951509 -0.293492 + -1.04651 0.228051 1.60324 0.241731 -0.787234 -0.5673 + -0.878998 0.208596 1.69633 0.14939 -0.785803 -0.600164 + -0.858484 0.160513 1.75982 0.0567368 -0.871973 -0.486255 + -0.845283 0.132889 1.83526 -0.0105737 -0.911851 -0.410385 + -1.00992 0.123663 1.83285 0.0085355 -0.954924 -0.296728 + -1.06378 0.27098 1.53688 0.263569 -0.738922 -0.620101 + -0.896263 0.251439 1.62993 0.203733 -0.725197 -0.65771 + -0.771005 0.252727 1.6505 -0.00640396 -0.731077 -0.682265 + -0.750491 0.20473 1.71403 -0.0403855 -0.772602 -0.633605 + -0.72341 0.149105 1.77358 -0.0860938 -0.840909 -0.534285 + -1.24913 0.397413 1.31329 0.361401 -0.602578 -0.71154 + -1.0356 0.296588 1.52593 0.350375 -0.646162 -0.678021 + -0.912573 0.310585 1.57489 0.271502 -0.633978 -0.724126 + -0.793357 0.317255 1.59913 0.0353987 -0.640977 -0.766743 + -1.05431 0.350224 1.46823 0.383147 -0.593471 -0.707806 + -0.93128 0.364226 1.51718 0.310855 -0.586365 -0.748028 + -0.809666 0.376401 1.54409 0.0933004 -0.592463 -0.800177 + -0.703249 0.385732 1.53053 -0.17649 -0.557519 -0.811186 + -0.673794 0.323089 1.57323 -0.223171 -0.642032 -0.733478 + -0.937526 0.429652 1.47146 0.339301 -0.527993 -0.778523 + -0.810899 0.450873 1.5015 0.117863 -0.513104 -0.850196 + -0.704481 0.460204 1.48794 -0.227218 -0.464816 -0.855756 + -0.574079 0.336989 1.51655 -0.356712 -0.633116 -0.686965 + -0.544624 0.274352 1.55925 -0.322191 -0.722232 -0.612024 + -0.817145 0.516216 1.45572 0.204672 -0.489189 -0.847823 + -0.719093 0.531891 1.45677 -0.106355 -0.390648 -0.914376 + -0.62273 0.398818 1.48366 -0.502321 -0.597337 -0.62519 + -0.513597 0.336729 1.48201 -0.539356 -0.746407 -0.389835 + -0.464946 0.27499 1.51494 -0.272045 -0.728313 -0.628929 + -0.694037 0.610589 1.42586 -0.185737 -0.324988 -0.9273 + -0.637341 0.470503 1.4525 -0.425363 -0.39714 -0.813232 + -0.556858 0.379338 1.4482 -0.387109 -0.551252 -0.739099 + -0.411498 0.244197 1.49247 -0.500021 -0.860111 0.100936 + -0.344818 0.220911 1.52321 -0.278767 -0.909458 -0.308503 + -0.66784 0.546321 1.43458 -0.824893 -0.380433 -0.418118 + -0.587357 0.455156 1.43028 -0.713086 -0.493871 -0.497594 + -0.454759 0.286808 1.45867 -0.542028 -0.820163 -0.183132 + -0.378843 0.25661 1.45817 -0.0156217 -0.773723 -0.633332 + -0.316716 0.227436 1.4939 0.0254412 -0.781327 -0.623603 + -0.665138 0.627934 1.40642 -0.480783 -0.237754 -0.843991 + -0.620104 0.518944 1.3988 -0.643216 -0.356192 -0.67779 + -0.506451 0.320803 1.41179 -0.673958 -0.726159 -0.135919 + -0.430534 0.290693 1.41134 -0.0206024 -0.743793 -0.668092 + -0.608345 0.598784 1.37451 -0.895837 -0.231059 -0.37959 + -0.539198 0.384677 1.38036 -0.758753 -0.614424 -0.216279 + -0.475534 0.339011 1.37125 -0.0499525 -0.602305 -0.796701 + -0.359348 0.340435 1.42019 0.321289 -0.322209 -0.89048 + -0.311006 0.293472 1.45073 0.260868 -0.434924 -0.861852 + -0.617936 0.632074 1.35425 -0.959442 -0.174028 -0.221776 + -0.585745 0.435954 1.33994 -0.852909 -0.519024 -0.0562139 + -0.522081 0.390288 1.33083 -0.172224 -0.660943 -0.730406 + -0.404348 0.388668 1.38004 0.378828 -0.364832 -0.850521 + -0.618333 0.70856 1.35137 -0.695973 -0.0389876 -0.717009 + -0.607887 0.547783 1.32225 -0.921173 -0.209015 -0.328258 + -0.595336 0.469246 1.31968 -0.853359 -0.256599 -0.453802 + -0.553227 0.446257 1.2989 -0.225587 -0.371602 -0.900568 + -0.438301 0.447908 1.33823 0.348344 -0.377143 -0.858149 + -0.608283 0.624181 1.31932 -0.972663 0.0112533 -0.231947 + -0.604949 0.61793 1.29995 -0.942718 -0.0709479 -0.325958 + -0.579984 0.587683 1.26814 -0.649754 -0.342972 -0.678372 + -0.565778 0.524706 1.30142 -0.373989 -0.315839 -0.871997 + -0.469447 0.503789 1.30625 0.214758 -0.460341 -0.861374 + -0.593646 0.769686 1.2893 -0.926238 -0.201482 0.318573 + -0.604988 0.683732 1.27398 -0.973907 -0.224224 0.0350467 + -0.580023 0.653486 1.24217 -0.753327 -0.396395 -0.524757 + -0.52019 0.609442 1.22065 -0.28038 -0.542816 -0.791667 + -0.505983 0.546464 1.25393 -0.0549415 -0.64068 -0.76584 + -0.614421 0.825336 1.27931 -0.019841 -0.183826 -0.982758 + -0.625762 0.739297 1.26394 -0.675628 -0.202438 0.708904 + -0.65049 0.735117 1.22337 -0.742742 -0.665145 0.0769174 + -0.583397 0.700325 1.18764 -0.578078 -0.706451 -0.408353 + -0.524591 0.665486 1.16738 -0.266571 -0.722343 -0.638092 + -0.750817 0.830245 1.15141 -0.594226 -0.793715 0.130048 + -0.656362 0.772864 1.1512 -0.50883 -0.812218 -0.285295 + -0.589269 0.73807 1.11546 -0.475727 -0.802918 -0.359176 + -0.527966 0.712325 1.11285 -0.231629 -0.835416 -0.498426 + -0.761403 0.847206 1.07903 -0.478168 -0.862449 -0.165942 + -0.666948 0.789911 1.07887 -0.427857 -0.882308 -0.196139 + -0.58677 0.76533 1.04744 -0.384727 -0.868118 -0.313617 + -0.528096 0.742561 1.04268 -0.172658 -0.91587 -0.362452 + -0.865264 0.89818 1.02414 -0.863132 0.183568 0.470432 + -2.40148 2.26853 0.27863 -0.855898 0.261633 -0.446079 + -2.35498 2.26205 0.193641 -0.818023 0.283417 -0.500513 + -2.38615 2.4128 0.262939 -0.879792 -0.0017056 -0.475355 + -2.33965 2.40641 0.178006 -0.814221 -0.000115831 -0.580555 + -2.41009 2.47716 0.302859 -0.871212 -0.0786176 -0.48457 + -2.40968 2.60772 0.270929 -0.856088 -0.135507 -0.498749 + -2.33398 2.58486 0.15232 -0.826289 -0.139883 -0.545599 + -2.31542 2.48829 0.153996 -0.689462 -0.100011 -0.717384 + -2.24517 2.41248 0.067503 -0.806713 -0.0430281 -0.589375 + -2.49718 2.52572 0.438165 -0.866028 -0.0962787 -0.490637 + -2.49677 2.65627 0.406242 -0.870145 -0.128671 -0.4757 + -2.43035 2.76938 0.249128 -0.859047 -0.138095 -0.492918 + -2.35465 2.74652 0.130519 -0.833927 -0.147293 -0.531856 + -2.54182 2.49645 0.525851 -0.888186 -0.0924913 -0.450078 + -2.58091 2.74515 0.544287 -0.888185 -0.120127 -0.443505 + -2.49429 2.81905 0.355288 -0.87711 -0.114313 -0.466488 + -2.47963 2.97629 0.295346 -0.872185 -0.0770665 -0.483067 + -2.41569 2.92662 0.189185 -0.854615 -0.0783679 -0.513314 + -2.60116 2.6108 0.624196 -0.89595 -0.110302 -0.43024 + -2.68695 2.89679 0.71864 -0.900823 -0.106143 -0.421013 + -2.66019 3.0171 0.63406 -0.896377 -0.086915 -0.434689 + -2.57843 2.90803 0.493386 -0.885997 -0.104187 -0.451834 + -2.54816 3.04584 0.411292 -0.880319 -0.0648228 -0.469933 + -2.7072 2.76244 0.798549 -0.908201 -0.119095 -0.401231 + -2.76845 3.07492 0.860518 -0.915771 -0.081857 -0.393273 + -2.74168 3.19523 0.775939 -0.910102 -0.0631682 -0.409541 + -2.70095 3.29493 0.677653 -0.893609 -0.0381599 -0.447222 + -2.62992 3.15491 0.551967 -0.885189 -0.04706 -0.462846 + -2.72096 2.63579 0.876315 -0.912156 -0.104979 -0.396169 + -2.81207 2.84551 1.03226 -0.921891 -0.106169 -0.372619 + -2.79831 2.97216 0.954499 -0.924879 -0.10066 -0.366696 + -2.84357 3.31723 0.997227 -0.933814 -0.0304933 -0.356456 + -2.80086 3.39498 0.886163 -0.924031 -0.0232215 -0.381612 + -2.75872 2.54239 0.975684 -0.913895 -0.0672549 -0.400341 + -2.837 2.73734 1.12262 -0.919997 -0.0929037 -0.380755 + -2.90994 3.12542 1.19425 -0.93675 -0.0493234 -0.346507 + -2.87343 3.21447 1.09121 -0.935326 -0.0433438 -0.351122 + -2.89598 3.56679 1.14817 -0.953682 0.0275757 -0.299551 + -2.78123 2.41982 1.05658 -0.931449 -0.0280248 -0.362791 + -2.85952 2.61477 1.20352 -0.925594 -0.0867182 -0.36845 + -2.93487 3.01725 1.2846 -0.941858 -0.0638603 -0.329887 + -2.96473 3.39293 1.3569 -0.962692 0.0326232 -0.268627 + -2.92822 3.48207 1.25391 -0.957043 0.0321749 -0.288154 + -2.81256 2.32573 1.13535 -0.939687 -0.0201803 -0.34144 + -2.88121 2.50385 1.29123 -0.934029 -0.0814847 -0.347778 + -2.96272 2.92172 1.38686 -0.947394 -0.0625004 -0.313907 + -3.02043 3.20382 1.55945 -0.976259 0.0130221 -0.216214 + -2.99258 3.29926 1.45715 -0.969218 0.0229619 -0.245131 + -2.84567 2.22835 1.24362 -0.941299 -0.00359974 -0.337555 + -2.91431 2.40647 1.3995 -0.948569 -0.0835005 -0.305359 + -2.98441 2.8109 1.47462 -0.955763 -0.0713432 -0.285355 + -2.87667 2.11855 1.3206 -0.952512 0.0394207 -0.30194 + -2.93623 2.33865 1.51157 -0.961664 -0.0740546 -0.264042 + -2.99463 2.69059 1.5504 -0.962682 -0.0881337 -0.255882 + -3.05017 2.98744 1.73523 -0.989332 -0.0291787 -0.142728 + -3.03994 3.10766 1.65941 -0.98569 -0.00413942 -0.16852 + -2.91676 2.11445 1.45989 -0.959711 0.0316562 -0.279202 + -2.97632 2.33456 1.65087 -0.978085 -0.0789315 -0.192666 + -3.01655 2.62285 1.66252 -0.980868 -0.105634 -0.163521 + -2.95481 2.09748 1.58589 -0.972261 0.0237855 -0.232688 + -2.99255 2.32319 1.78795 -0.986442 -0.0465786 -0.15736 + -3.01529 2.55297 1.78236 -0.990024 -0.106132 -0.0926679 + -3.0561 2.83204 1.959 -0.996434 -0.0761684 -0.0362971 + -3.05736 2.90192 1.83917 -0.99577 -0.0602179 -0.0693919 + -2.98303 2.14159 1.73209 -0.989139 -0.039658 -0.141534 + -3.02077 2.3673 1.93415 -0.994754 -0.0769954 -0.0673586 + -3.03153 2.54161 1.91944 -0.994429 -0.079158 -0.0696074 + -2.93726 1.8551 1.51631 -0.982642 -0.154902 -0.10208 + -2.99574 2.15389 1.85579 -0.989668 -0.143212 0.00682483 + -3.01987 2.36333 2.07983 -0.987959 -0.142507 0.0602385 + -3.02892 2.52052 2.06117 -0.996994 -0.0773228 0.00494252 + -2.96054 1.88031 1.66985 -0.978932 -0.204185 -0.000654397 + -2.97736 2.1481 2.00502 -0.959616 -0.245991 0.136477 + -3.00149 2.35754 2.22905 -0.970838 -0.212374 0.111225 + -3.02802 2.51664 2.20689 -0.992721 -0.112198 0.0437818 + -3.05121 2.75296 2.22377 -0.994911 -0.0964525 0.0291278 + -2.9046 1.70027 1.54007 -0.866205 -0.499639 0.00702912 + -2.92564 1.84141 1.81123 -0.890258 -0.401248 0.215501 + -2.94247 2.1092 2.14639 -0.939378 -0.310889 0.14463 + -2.97441 2.31554 2.36321 -0.958614 -0.251129 0.134142 + -3.01751 2.4999 2.34988 -0.982392 -0.159453 0.097373 + -2.78394 1.59132 1.59758 -0.787785 -0.605424 0.113386 + -2.75872 1.58567 1.72018 -0.831279 -0.534721 0.151817 + -2.87938 1.69462 1.66267 -0.793194 -0.584787 0.169904 + -2.82662 1.79901 2.02526 -0.876113 -0.44198 0.192559 + -2.74542 1.52447 1.57417 -0.864803 -0.467161 0.184059 + -2.70084 1.45524 1.60888 -0.870726 -0.459715 0.174635 + -2.68044 1.42697 1.65945 -0.904854 -0.420712 0.0651221 + -2.67129 1.41559 1.73735 -0.91534 -0.397516 0.0642925 + -2.67396 1.43037 1.80435 -0.919041 -0.39083 0.0511448 + -2.69898 1.49683 1.84245 -0.910748 -0.407124 0.0692 + -2.70609 1.36395 1.48141 -0.791284 -0.472552 0.388026 + -2.66486 1.33239 1.50287 -0.812307 -0.468514 0.347351 + -2.64446 1.30412 1.55343 -0.939658 -0.326793 0.101235 + -2.62412 1.24978 1.68276 -0.954804 -0.291127 0.05995 + -2.61496 1.2384 1.76067 -0.948755 -0.301912 0.0933429 + -2.64442 1.24894 1.44861 -0.814684 -0.398577 0.421219 + -2.6239 1.22028 1.49886 -0.951316 -0.279558 0.129792 + -2.60356 1.16593 1.62819 -0.958683 -0.274484 0.0747332 + -2.57155 1.11526 1.79054 -0.947149 -0.301288 0.110158 + -2.60791 1.25902 1.86534 -0.939972 -0.329724 0.0879468 + -2.59824 1.09167 1.44121 -0.950671 -0.246932 0.187746 + -2.56943 1.00822 1.47854 -0.935792 -0.340606 0.0909984 + -2.57475 1.08248 1.66552 -0.949045 -0.301088 0.0930595 + -2.52548 0.975537 1.80256 -0.912902 -0.377776 0.15458 + -2.5645 1.13589 1.89522 -0.938668 -0.307645 0.155745 + -2.52091 0.910412 1.57756 -0.911048 -0.401822 0.092363 + -2.52867 0.942755 1.67753 -0.917669 -0.388548 0.0831501 + -2.45901 0.838753 1.79127 -0.815526 -0.553404 0.169296 + -2.45238 0.870138 1.88291 -0.831487 -0.506998 0.227117 + -2.51609 1.00412 1.90324 -0.902943 -0.38792 0.184963 + -2.51029 0.860121 1.45466 -0.898337 -0.434165 0.0670126 + -2.45187 0.773464 1.59656 -0.867058 -0.486056 0.109362 + -2.45124 0.806408 1.69129 -0.872684 -0.466425 0.144465 + -2.35716 0.768187 1.95149 -0.82638 -0.469243 0.3113 + -2.35053 0.799572 2.04313 -0.757813 -0.613114 0.223182 + -2.49949 0.828385 1.35403 -0.890069 -0.450992 0.0661992 + -2.44107 0.741642 1.49587 -0.857665 -0.509839 0.0668962 + -2.37738 0.689151 1.77499 -0.824916 -0.540635 0.165009 + -2.37676 0.722098 1.86973 -0.877664 -0.387375 0.282216 + -2.53911 0.88031 1.14569 -0.92035 -0.384449 0.071797 + -2.49044 0.791906 1.25421 -0.888431 -0.451782 0.0811384 + -2.42665 0.707026 1.40663 -0.863806 -0.497431 0.0800094 + -2.37651 0.663807 1.68489 -0.822636 -0.554232 0.126872 + -2.53166 0.838905 1.05261 -0.91301 -0.40319 0.0620577 + -2.48424 0.761973 1.15306 -0.875184 -0.477214 0.0795046 + -2.42046 0.677093 1.30547 -0.829327 -0.55385 0.0739398 + -2.36209 0.629193 1.59564 -0.780686 -0.619751 0.0802384 + -2.56023 0.901679 0.978482 -0.973021 -0.223459 -0.0574181 + -2.54015 0.858694 0.912934 -0.935028 -0.312015 -0.168429 + -2.51634 0.799821 0.971907 -0.894208 -0.446819 -0.0272932 + -2.46893 0.722889 1.07235 -0.856475 -0.511347 0.0705366 + -2.39861 0.638763 1.21626 -0.814999 -0.574484 0.0757926 + -2.53861 0.896836 0.880669 -0.960877 -0.111013 -0.253756 + -2.51454 0.823445 0.866386 -0.919587 -0.373631 -0.12149 + -2.49074 0.764572 0.925359 -0.887821 -0.454023 -0.0750764 + -2.45263 0.684515 0.975821 -0.851662 -0.523362 0.0276422 + -2.38231 0.600476 1.11978 -0.78982 -0.609055 0.0723661 + -2.52809 0.923916 0.840764 -0.942134 0.0156036 -0.334874 + -2.52028 0.852697 0.830319 -0.955498 -0.204132 -0.212964 + -2.49906 0.810617 0.786604 -0.941473 -0.221403 -0.254182 + -2.49332 0.781365 0.822671 -0.927539 -0.364063 -0.0844333 + -2.48104 0.747248 0.863964 -0.914465 -0.403719 -0.0276527 + -2.50975 0.879778 0.790414 -0.921391 -0.0226009 -0.387978 + -2.48254 0.845314 0.738309 -0.899068 -0.0321586 -0.436625 + -2.47901 0.76723 0.747753 -0.921246 -0.263998 -0.285677 + -2.47308 0.737895 0.783763 -0.903785 -0.408652 -0.127182 + -2.4608 0.703778 0.825056 -0.890975 -0.450108 -0.0597247 + -2.4625 0.80184 0.699408 -0.879635 -0.0610529 -0.471714 + -2.45367 0.732083 0.713031 -0.869966 -0.371918 -0.323783 + -2.44773 0.702748 0.74904 -0.819459 -0.524584 -0.230865 + -2.43712 0.665621 0.797747 -0.850379 -0.495211 -0.177827 + -2.44294 0.667191 0.914427 -0.870124 -0.492801 -0.00557889 + -2.40083 0.774758 0.610516 -0.726129 -0.024312 -0.687128 + -2.44697 0.756048 0.678323 -0.864056 -0.192797 -0.465013 + -2.42472 0.700478 0.684772 -0.78797 -0.521589 -0.327182 + -2.41327 0.679273 0.7131 -0.734305 -0.631986 -0.247767 + -2.40265 0.642147 0.761806 -0.808713 -0.441402 -0.388778 + -2.36064 0.744002 0.573184 -0.72022 -0.10465 -0.685807 + -2.41802 0.724444 0.650064 -0.791102 -0.314027 -0.524923 + -2.39664 0.676451 0.657788 -0.753974 -0.552474 -0.35538 + -2.38518 0.655246 0.686115 -0.781181 -0.571712 -0.2508 + -2.29095 0.754305 0.50994 -0.591253 0.155886 -0.791277 + -2.29897 0.667007 0.517945 -0.74976 -0.244727 -0.614791 + -2.3376 0.653831 0.596767 -0.74753 -0.434721 -0.502211 + -2.37782 0.693687 0.612733 -0.711692 -0.378537 -0.591781 + -2.35641 0.636681 0.641871 -0.759225 -0.502721 -0.413339 + -2.15795 0.743773 0.426982 -0.358854 0.368239 -0.857685 + -2.13163 0.660542 0.387545 -0.441128 0.14915 -0.884964 + -2.22928 0.677311 0.4547 -0.605838 0.0213153 -0.795302 + -2.19049 0.596965 0.432463 -0.654034 -0.283244 -0.701436 + -2.25055 0.615227 0.490032 -0.718078 -0.437556 -0.541211 + -2.06893 0.717615 0.389289 -0.0168169 0.44988 -0.89293 + -2.04261 0.634297 0.349801 -0.0356685 0.264495 -0.963727 + -2.03077 0.576074 0.342247 -0.0478531 -0.0217802 -0.998617 + -2.09283 0.580194 0.365307 -0.450414 -0.079126 -0.889307 + -1.94933 0.565779 0.362676 0.617395 -0.0383686 -0.785717 + -2.0216 0.483798 0.359073 0.03749 -0.57505 -0.817259 + -2.08366 0.48792 0.382134 -0.501791 -0.444887 -0.74181 + -2.13465 0.524988 0.431131 -0.724638 -0.520652 -0.451466 + -2.19471 0.54325 0.4887 -0.681666 -0.526662 -0.507896 + -1.9883 0.45298 0.409452 0.417605 -0.705126 -0.573065 + -2.06513 0.433022 0.407219 -0.264069 -0.739561 -0.619126 + -2.11612 0.470089 0.456215 -0.721532 -0.570265 -0.39267 + -1.89848 0.453085 0.542671 0.793456 -0.534458 -0.291174 + -1.91972 0.415229 0.60264 0.571507 -0.803509 -0.166594 + -2.00954 0.415124 0.469421 0.202572 -0.93421 -0.293626 + -2.08196 0.418872 0.489529 -0.407875 -0.873911 -0.26442 + -1.95867 0.386642 0.672753 0.371757 -0.922483 -0.104025 + -2.02637 0.400974 0.55173 0.016649 -0.980646 -0.195081 + -2.05472 0.382269 0.629927 -0.0656474 -0.97698 -0.202979 + -2.11198 0.414983 0.555663 -0.52412 -0.81267 -0.254686 + -2.14614 0.466201 0.522352 -0.628522 -0.668658 -0.397311 + -1.91275 0.418999 0.82971 0.693866 -0.719589 0.0272241 + -1.98702 0.367937 0.750949 0.331112 -0.939201 -0.0909184 + -2.02519 0.351912 0.827106 0.188981 -0.979275 -0.0728461 + -2.07224 0.36711 0.717184 -0.12392 -0.976833 -0.174473 + -2.12951 0.399824 0.64292 -0.396362 -0.887535 -0.234903 + -1.90422 0.465659 1.09489 0.82056 -0.557494 -0.126022 + -1.9357 0.390763 0.900615 0.652078 -0.757994 0.0154749 + -1.97387 0.374737 0.976771 0.532508 -0.844279 -0.0602339 + -2.04494 0.342123 0.90966 0.25723 -0.959014 -0.118847 + -2.092 0.357321 0.799737 -0.324932 -0.943242 -0.0686484 + -1.8535 0.482553 1.20203 0.205393 -0.902307 -0.379019 + -1.90727 0.422201 1.15736 0.796622 -0.575877 -0.183737 + -1.92036 0.393833 1.2301 0.775941 -0.59943 -0.196465 + -1.98696 0.346454 1.04956 0.585345 -0.799063 -0.137366 + -2.05528 0.326128 0.991967 -0.126362 -0.987207 -0.0972343 + -1.81918 0.433355 1.30084 -0.0277061 -0.977844 -0.207493 + -1.85654 0.439093 1.2645 0.513435 -0.79257 -0.328965 + -1.87002 0.41583 1.3378 0.528912 -0.806925 -0.262914 + -1.92652 0.351051 1.2894 0.706499 -0.678503 -0.20123 + -1.9973 0.330459 1.13187 0.387721 -0.911763 -0.135499 + -1.83267 0.410092 1.37414 0.0622999 -0.986552 -0.151107 + -1.84235 0.406737 1.45075 0.396169 -0.916194 -0.0603194 + -1.87618 0.373049 1.39709 0.738808 -0.658861 -0.141651 + -1.93117 0.334753 1.36423 0.335112 -0.942016 0.0174829 + -1.76511 0.411152 1.4421 0.132338 -0.981785 -0.13633 + -1.7748 0.407712 1.51866 -0.0291195 -0.993767 -0.107607 + -1.85045 0.398633 1.52138 0.425075 -0.904203 -0.0415591 + -1.88427 0.364945 1.46773 0.483536 -0.871073 0.0861698 + -1.65583 0.378339 1.60973 -0.0143902 -0.950904 -0.30915 + -1.65108 0.366233 1.6813 -0.134821 -0.972098 -0.191959 + -1.77005 0.395607 1.59022 -0.0856149 -0.99261 -0.0860006 + -1.85122 0.398926 1.59928 0.155597 -0.985889 0.0617382 + -1.58031 0.394507 1.58953 -0.163262 -0.903683 -0.395856 + -1.56355 0.361189 1.64884 -0.21887 -0.914201 -0.341076 + -1.53758 0.337601 1.69629 -0.246375 -0.942465 -0.225963 + -1.64358 0.352119 1.74875 -0.24884 -0.961295 -0.11828 + -1.77082 0.395987 1.66817 -0.194979 -0.98054 -0.0229125 + -1.53008 0.323491 1.76373 -0.269889 -0.945882 -0.180189 + -1.53293 0.308826 1.84893 -0.293583 -0.952625 -0.0794605 + -1.64093 0.345863 1.82318 -0.306584 -0.950613 -0.048381 + -1.76818 0.389645 1.74255 -0.183639 -0.979459 -0.0832907 + -1.85945 0.40399 1.6747 0.194425 -0.980656 -0.0226389 + -1.44405 0.284483 1.8103 -0.501312 -0.847054 -0.176596 + -1.53307 0.306576 1.92143 -0.37376 -0.920959 -0.110176 + -1.64107 0.343527 1.89563 -0.283628 -0.956871 -0.0628742 + -1.771 0.382386 1.81952 -0.197358 -0.977344 -0.0764759 + -1.86227 0.396732 1.75168 -0.060034 -0.998192 0.00308328 + -1.38511 0.244046 1.77334 -0.795532 -0.578955 -0.178715 + -1.45856 0.269326 1.90935 -0.542716 -0.823284 -0.166318 + -1.46891 0.259892 1.99509 -0.49757 -0.851334 -0.166296 + -1.54342 0.297141 2.00717 -0.394842 -0.906355 -0.150401 + -1.64148 0.337272 1.96966 -0.270629 -0.954985 -0.121503 + -1.35462 0.194096 1.72325 -0.634296 -0.754835 -0.16701 + -1.39962 0.228884 1.8724 -0.709918 -0.687838 -0.151312 + -1.39166 0.208942 1.93914 -0.703805 -0.706451 -0.0747323 + -1.40439 0.215415 2.01313 -0.633085 -0.761753 -0.137605 + -1.35305 0.21461 1.62772 -0.622323 -0.765293 -0.164442 + -1.2298 0.160337 1.70752 -0.152031 -0.962783 -0.223464 + -1.22831 0.141582 1.79381 -0.177832 -0.965211 -0.191688 + -1.34899 0.176277 1.81411 -0.554387 -0.819961 -0.142548 + -1.34103 0.156335 1.88086 -0.523057 -0.840986 -0.1384 + -1.01064 0.104507 1.91102 -0.0511396 -0.973439 -0.223163 + -1.00914 0.085758 1.9973 -0.0735815 -0.977959 -0.195401 + -1.0238 0.072506 2.07605 -0.103697 -0.982693 -0.153494 + -1.22268 0.123849 1.88472 -0.17623 -0.96992 -0.167921 + -0.828999 0.095944 1.90606 -0.083087 -0.935663 -0.342975 + -0.829722 0.076875 1.98428 -0.116355 -0.965344 -0.233608 + -0.833452 0.058511 2.06169 -0.0812208 -0.97989 -0.182262 + -0.848105 0.045259 2.14045 -0.0470974 -0.992081 -0.116435 + -1.02656 0.061384 2.16131 -0.143608 -0.985868 -0.0862618 + -0.707126 0.112246 1.84442 -0.10426 -0.876729 -0.469548 + -0.685094 0.06822 1.91427 -0.102666 -0.928156 -0.357752 + -0.688824 0.049855 1.99168 -0.0446493 -0.992636 -0.112609 + -0.70527 0.051219 2.07712 0.0129491 -0.999305 -0.0349546 + -0.594742 0.15241 1.74105 -0.0968202 -0.826016 -0.555269 + -0.573582 0.116783 1.81176 -0.0538481 -0.892294 -0.448233 + -0.55155 0.072756 1.88162 0.0649407 -0.921598 -0.382675 + -0.549722 0.058582 1.96297 0.0975851 -0.991879 -0.0815633 + -0.621823 0.208035 1.68151 -0.180549 -0.784136 -0.593745 + -0.450434 0.140476 1.73692 -0.0949033 -0.904495 -0.41579 + -0.429275 0.104849 1.80763 -0.0286014 -0.96104 -0.274927 + -0.42024 0.092654 1.88995 0.0786705 -0.97761 -0.195165 + -0.418412 0.078475 1.97131 0.123636 -0.988986 -0.0813699 + -0.651443 0.258561 1.6246 -0.18797 -0.717513 -0.670703 + -0.475349 0.171371 1.66461 -0.195166 -0.877559 -0.437951 + -0.325697 0.165847 1.65678 -0.00118046 -0.927848 -0.372958 + -0.300782 0.134952 1.72909 0.0606308 -0.935267 -0.348712 + -0.289261 0.11663 1.80043 0.0949077 -0.971575 -0.216876 + -0.504969 0.221988 1.60774 -0.245306 -0.762138 -0.599142 + -0.372127 0.188644 1.6019 -0.0691583 -0.825454 -0.560216 + -0.172667 0.169411 1.65301 0.0849025 -0.946659 -0.310851 + -0.140145 0.15994 1.71921 0.135867 -0.958466 -0.250766 + -0.128624 0.141613 1.79056 0.163049 -0.953283 -0.254294 + -0.411782 0.241094 1.55345 -0.280466 -0.850581 -0.444803 + -0.219097 0.192294 1.59817 0.0299338 -0.97964 -0.198516 + -0.077383 0.188657 1.64287 0.293998 -0.882087 -0.368085 + -0.044861 0.179094 1.70903 0.399989 -0.873307 -0.278107 + -0.291654 0.187008 1.56173 -0.247922 -0.960947 0.122945 + -0.185978 0.19434 1.55923 0.213793 -0.883714 -0.416344 + -0.113421 0.19954 1.59562 0.26995 -0.830748 -0.48681 + -0.023065 0.212553 1.65228 0.253661 -0.949396 -0.18521 + -0.250036 0.204145 1.52465 0.117748 -0.750248 -0.650587 + -0.108752 0.245665 1.55153 0.421344 -0.548282 -0.722396 + -0.059102 0.223437 1.60503 0.443465 -0.633577 -0.63397 + 0.023071 0.212553 1.65228 -0.232932 -0.931158 -0.280512 + -0.023065 0.214616 1.66891 0.49486 -0.868783 -0.0181345 + -0.17281 0.255556 1.517 0.31142 -0.477568 -0.821552 + -0.094316 0.306883 1.5237 0.490621 -0.118273 -0.863309 + -0.066104 0.284205 1.55838 0.622683 -0.326266 -0.711208 + -0.016455 0.26198 1.61187 0.347317 -0.362888 -0.864687 + -0.24888 0.264298 1.48646 0.270889 -0.499393 -0.822937 + -0.170386 0.315624 1.49316 0.336756 -0.410803 -0.847252 + -0.044666 0.359282 1.56194 0.40639 -0.713754 -0.57044 + -0.016455 0.33661 1.59661 0.298498 -0.480461 -0.824655 + -0.224871 0.336079 1.46153 0.290301 -0.375165 -0.880328 + -0.044666 0.372658 1.50717 0.175735 -0.837016 -0.518191 + 0.044666 0.372658 1.50717 -0.244256 -0.774419 -0.583622 + 0.044666 0.359282 1.56194 -0.486855 -0.713556 -0.503796 + 0.016455 0.33661 1.59661 -0.298489 -0.480461 -0.824658 + -0.273213 0.382957 1.43094 0.31134 -0.226667 -0.92287 + -0.099152 0.393027 1.47549 0.170834 -0.570332 -0.803454 + 0.044471 0.592403 1.28836 -0.0305786 -0.70551 -0.70804 + -0.338859 0.425044 1.39604 0.398628 -0.302546 -0.865772 + -0.214573 0.417707 1.45135 0.176207 -0.273014 -0.945735 + -0.171573 0.58754 1.30419 0.0149532 -0.710869 -0.703165 + -0.056152 0.56286 1.32833 -0.04853 -0.678418 -0.733072 + -0.372812 0.484198 1.35418 0.452908 -0.369414 -0.811423 + -0.28022 0.459794 1.41645 0.243815 -0.448458 -0.859907 + -0.222009 0.62574 1.26182 0.00246949 -0.699496 -0.714633 + -0.056152 0.989814 0.876228 -0.0716674 -0.711215 -0.699312 + 0.044471 1.01944 0.836308 -0.251443 -0.770222 -0.586118 + -0.405591 0.540158 1.30665 0.424081 -0.468904 -0.77478 + -0.330656 0.497994 1.37408 0.300375 -0.501479 -0.811353 + -0.280438 0.691045 1.20391 -0.191637 -0.620482 -0.760446 + -0.114581 1.05512 0.818315 0.0988504 -0.841224 -0.531573 + -0.442128 0.582833 1.25434 0.42768 -0.547012 -0.71963 + -0.363435 0.553954 1.32656 0.257175 -0.53453 -0.805071 + -0.28423 0.755168 1.16405 0.0341988 -0.690832 -0.722206 + -0.367227 0.618077 1.2867 0.124615 -0.557305 -0.820903 + -0.380763 0.667435 1.2396 0.311923 -0.630579 -0.710686 + -0.293968 0.803753 1.11209 0.0529057 -0.772095 -0.633301 + -0.455664 0.632193 1.20725 0.328751 -0.596318 -0.732344 + -0.460065 0.688236 1.15398 0.354125 -0.721347 -0.595193 + -0.468769 0.724255 1.09359 0.28326 -0.843411 -0.456533 + -0.3905 0.71602 1.18765 0.350846 -0.698669 -0.623513 + -0.399204 0.752039 1.12726 0.432839 -0.791565 -0.431365 + -0.30355 0.842645 1.03113 0.46646 -0.822832 -0.324598 + -0.468899 0.754491 1.02342 0.212639 -0.948744 -0.233814 + -0.462394 0.767838 0.951901 0.0608051 -0.973128 -0.222091 + -0.419837 0.762911 1.05283 0.40376 -0.89112 -0.207083 + -0.324183 0.853516 0.956702 0.213502 -0.976913 0.00758949 + -0.305268 0.847475 0.879167 0.729367 -0.676845 0.0995277 + -0.124163 1.09392 0.737303 0.388621 -0.907413 -0.159923 + -0.525597 0.769822 0.974665 -0.243091 -0.908593 -0.339655 + -0.436888 0.782429 0.890828 -0.118575 -0.980616 -0.155989 + -0.413333 0.776258 0.981316 0.431472 -0.900803 -0.0488351 + -0.58699 0.789665 0.976497 -0.337743 -0.894964 -0.291494 + -0.500091 0.784326 0.913543 -0.186117 -0.94779 -0.258949 + -0.405465 0.790071 0.823591 -0.165292 -0.977783 -0.128911 + -0.394417 0.770217 0.903782 0.213678 -0.975171 0.0581723 + -0.667167 0.814158 1.00787 -0.381927 -0.881872 -0.276467 + -0.566088 0.802553 0.906574 -0.288792 -0.926904 -0.239682 + -0.479189 0.797301 0.843669 -0.191591 -0.965331 -0.177281 + -0.357763 0.788004 0.755173 0.0895674 -0.964573 -0.248148 + -0.362994 0.777859 0.836545 0.310881 -0.950424 0.00686539 + -0.754306 0.855908 0.997757 -0.475686 -0.857574 -0.195679 + -0.74951 0.875033 0.919634 -0.471692 -0.831234 -0.294206 + -0.662371 0.833281 0.929749 -0.378801 -0.892376 -0.245307 + -0.554784 0.816955 0.832629 -0.302037 -0.918025 -0.256912 + -0.431487 0.795234 0.775251 -0.188452 -0.962806 -0.193622 + -0.821812 0.89354 1.03638 -0.296111 -0.916493 -0.268996 + -0.814715 0.902242 0.955106 -0.670643 -0.703059 -0.236528 + -0.800184 0.935 0.882766 -0.58176 -0.723686 -0.37126 + -0.75087 0.903341 0.841204 -0.535807 -0.785773 -0.308985 + -0.651067 0.847683 0.855804 -0.395862 -0.870878 -0.291316 + -0.838622 0.960135 0.881234 -0.166581 -0.88348 -0.437852 + -0.824091 0.992893 0.808894 0.0105744 -0.763329 -0.645923 + -0.796283 1.05165 0.751717 -0.464893 -0.547181 -0.696037 + -0.801544 0.963308 0.804335 -0.893126 -0.344565 -0.289137 + -0.738356 0.929695 0.768755 -0.514745 -0.696352 -0.500132 + -0.880516 0.967757 0.849032 0.0764414 -0.84054 -0.53633 + -0.864227 1.02491 0.785246 -0.0796097 -0.684865 -0.724308 + -0.836419 1.08358 0.728018 -0.177641 -0.52834 -0.830241 + -0.775011 1.09626 0.700851 0.219363 -0.404125 -0.888011 + -0.780272 1.008 0.75352 -0.739608 -0.361515 -0.567703 + -0.912504 1.00652 0.803684 -0.229923 -0.662436 -0.712961 + -0.925344 1.0704 0.75084 -0.381783 -0.518897 -0.764844 + -0.908048 1.13717 0.722007 -0.292062 -0.270252 -0.917422 + -0.819123 1.15034 0.699185 -0.115459 -0.125561 -0.985344 + -0.735288 1.17414 0.702162 -0.574918 -0.0112688 -0.818134 + -1.02022 1.0493 0.8338 -0.420134 -0.335859 -0.843022 + -1.0018 1.08846 0.824958 -0.490644 -0.316394 -0.811889 + -1.01464 1.15234 0.772115 -0.69356 -0.413412 -0.589971 + -1.00783 1.21606 0.740161 -0.498853 -0.246026 -0.831034 + -0.899154 1.20921 0.706027 -0.175162 -0.039471 -0.983748 + -1.15449 1.25662 0.841506 0.565143 0.0883656 -0.820247 + -1.13607 1.2957 0.832614 -0.18194 -0.360993 -0.914649 + -1.10714 1.32608 0.795797 -0.534369 -0.406833 -0.740903 + -1.10033 1.38979 0.763843 -0.296152 -0.327334 -0.897299 + -1.20934 1.39286 0.775928 0.847249 0.0204626 -0.530802 + -1.237 1.53076 0.60848 0.714429 -0.153688 -0.68262 + -1.24213 1.58922 0.591819 0.565643 -0.179735 -0.804825 + -1.21447 1.45124 0.759218 0.991328 0.0526531 -0.1204 + -1.33145 1.63145 0.543685 -0.543737 -0.839083 -0.0170354 + -1.33145 1.63145 0.543685 0.378768 -0.222766 -0.898282 + -1.21447 1.45124 0.759218 -0.379993 -0.544417 -0.747807 + -1.09286 1.46508 0.743649 0.0027724 -0.227357 -0.973807 + -0.998936 1.2881 0.724181 -0.320784 -0.129488 -0.938259 + -1.18281 1.61753 0.660593 0.275143 -0.564068 -0.77854 + -1.06473 1.5217 0.727976 -0.27238 -0.469576 -0.839826 + -0.970805 1.34472 0.708509 -0.0359701 -0.0326016 -0.998821 + -0.894772 1.27125 0.713167 -0.0207977 0.145216 -0.989181 + -0.7794 1.22822 0.700495 -0.199746 0.0276441 -0.979458 + -1.1712 1.6447 0.623927 -0.24367 -0.832528 -0.497517 + -1.00422 1.52625 0.67009 -0.00280247 -0.480093 -0.877213 + -0.932428 1.43269 0.737749 0.381381 -0.0696506 -0.92179 + -0.856396 1.35913 0.742356 0.168024 0.308933 -0.936124 + -0.775018 1.29018 0.707586 -0.0104874 0.387028 -0.922008 + -1.27714 1.73384 0.366533 -0.374423 -0.912398 -0.165342 + -0.799592 1.37863 0.763184 0.241643 0.326155 -0.91391 + -1.3723 1.80029 0.286041 -0.627611 -0.711864 0.315205 + -1.39582 1.80824 0.253663 -0.46484 -0.795354 -0.389019 + -1.45718 1.86782 0.25627 -0.503789 -0.747313 -0.433266 + -1.41241 1.88004 0.223108 -0.297405 -0.475482 -0.827929 + -1.35106 1.82046 0.2205 -0.0313051 -0.583739 -0.811338 + -1.56568 1.92661 0.343843 -0.551292 -0.823554 -0.133553 + -1.54235 1.92454 0.276228 -0.472824 -0.880222 -0.040572 + -1.52271 1.90991 0.211972 -0.234054 -0.95291 -0.192823 + -1.42618 1.90793 0.206006 -0.0561791 -0.788695 -0.612213 + -1.66635 1.9747 0.290952 -0.535822 -0.817738 0.210239 + -1.64671 1.96007 0.226696 -0.464553 -0.880411 0.095215 + -1.61945 1.92603 0.158052 -0.33048 -0.940355 -0.0807135 + -1.50248 1.93303 0.158131 0.00728966 -0.929354 -0.369119 + -1.40595 1.93105 0.152166 0.15712 -0.870197 -0.466981 + -1.77158 2.02597 0.179548 -0.621402 -0.783101 -0.0247466 + -1.73583 2.03045 0.142996 -0.460332 -0.859672 -0.221492 + -1.80703 2.10814 -0.067965 0.195607 -0.7968 -0.571706 + -2.12832 2.55027 -0.13397 -0.689854 -0.160919 -0.705838 + -2.17394 2.66979 -0.105973 -0.750962 -0.0705465 -0.656566 + -2.25662 2.70147 -0.002845 -0.79765 -0.14991 -0.584194 + -2.18378 2.5777 -0.062271 -0.804477 -0.150715 -0.574545 + -2.26645 2.60929 0.040805 -0.813158 -0.171333 -0.556254 + -2.2479 2.5128 0.042531 -0.820598 -0.153481 -0.550511 + -2.37571 3.04191 0.113286 -0.832983 -0.0400175 -0.55185 + -2.38088 3.25584 0.119155 -0.810771 0.0473385 -0.583446 + -2.25132 3.25444 -0.035226 -0.721731 0.0259835 -0.691686 + -2.43932 3.14098 0.203898 -0.84968 -0.0239841 -0.526753 + -2.44382 3.3279 0.219741 -0.842178 0.0874708 -0.532058 + -2.28491 3.35096 0.002008 -0.765119 0.0445854 -0.642344 + -2.17411 3.43345 -0.107079 -0.704157 0.035426 -0.70916 + -2.14052 3.33694 -0.144314 -0.664055 0.0142197 -0.747548 + -2.50785 3.21052 0.319844 -0.873912 0.00319087 -0.486073 + -2.51801 3.37872 0.359921 -0.851918 0.0551105 -0.520766 + -2.44711 3.46454 0.261678 -0.830247 0.0761797 -0.552166 + -2.34785 3.42302 0.102595 -0.819047 0.111565 -0.562775 + -2.26119 3.51529 -0.00802 -0.771448 0.0498969 -0.634333 + -2.58204 3.26134 0.460024 -0.873316 -0.00277948 -0.487147 + -2.59962 3.50006 0.490758 -0.846954 0.00289049 -0.531659 + -2.52873 3.58587 0.392516 -0.832929 -0.00277913 -0.553372 + -2.47465 3.68253 0.300103 -0.840098 -0.0532368 -0.539816 + -2.36046 3.55681 0.151055 -0.830931 0.00181216 -0.556373 + -2.65306 3.40136 0.58571 -0.871641 -0.0167948 -0.489857 + -2.66362 3.68599 0.593915 -0.867821 -0.00513404 -0.49685 + -2.61641 3.79249 0.510856 -0.857105 -0.0178233 -0.514833 + -2.56234 3.88914 0.418443 -0.853785 -0.0404341 -0.519052 + -2.71706 3.58728 0.688875 -0.893354 -0.0102524 -0.449236 + -2.73856 3.90859 0.73135 -0.907438 2.0857e-005 -0.420185 + -2.69136 4.01509 0.648292 -0.887157 -0.00997291 -0.461361 + -2.64914 4.11155 0.555025 -0.884528 -0.0275563 -0.465673 + -2.51631 3.99197 0.330737 -0.859935 -0.0475704 -0.508182 + -2.76012 3.49468 0.787875 -0.91455 -0.016034 -0.404154 + -2.81888 3.72601 0.929804 -0.940141 0.00992018 -0.340642 + -2.77582 3.81861 0.830804 -0.928393 0.00401201 -0.371577 + -2.80241 4.17046 0.902182 -0.94793 0.00487846 -0.318442 + -2.77019 4.2544 0.796595 -0.932733 0.00112957 -0.360565 + -2.85327 3.64454 1.03711 -0.947445 0.0200021 -0.319293 + -2.86699 4.00351 1.11354 -0.965229 0.0167854 -0.260867 + -2.83967 4.08039 1.00158 -0.956757 0.00987816 -0.29072 + -2.83456 4.40331 1.01987 -0.964107 0.0603643 -0.258562 + -2.90137 3.92205 1.22085 -0.96863 0.0299047 -0.246702 + -2.89466 4.25686 1.24234 -0.975151 0.0444389 -0.217036 + -2.86733 4.33374 1.13038 -0.972457 0.0521519 -0.227171 + -2.92656 3.84275 1.33099 -0.972578 0.0410079 -0.228934 + -2.9469 4.10375 1.46152 -0.978346 0.0458449 -0.201833 + -2.92172 4.18305 1.35138 -0.978451 0.0445725 -0.201611 + -2.89572 4.50276 1.32343 -0.974935 0.149329 -0.164933 + -2.8645 4.56131 1.20821 -0.969388 0.161899 -0.184596 + -2.95881 3.75803 1.43673 -0.973203 0.0538567 -0.22355 + -2.97224 4.01901 1.5641 -0.979032 0.0505875 -0.197327 + -2.94816 4.34934 1.53556 -0.981947 0.124941 -0.14202 + -2.92278 4.42895 1.43246 -0.980037 0.133249 -0.147557 + -2.85402 4.73817 1.43067 -0.949257 0.295463 -0.10776 + -2.98331 3.6646 1.53557 -0.977377 0.0574731 -0.203548 + -2.99674 3.92558 1.66294 -0.97907 0.0488919 -0.197565 + -2.9735 4.26459 1.63814 -0.981855 0.125075 -0.142537 + -2.90846 4.59979 1.64576 -0.967813 0.247346 -0.046447 + -2.88307 4.67932 1.54261 -0.961713 0.263951 -0.0737469 + -3.01117 3.57084 1.63576 -0.979552 0.0589202 -0.192371 + -3.0208 3.83789 1.76322 -0.981289 0.0477542 -0.186525 + -2.99948 4.17727 1.73478 -0.982301 0.120258 -0.143604 + -2.95514 4.4525 1.85547 -0.970935 0.235756 -0.0412756 + -2.92916 4.53973 1.75878 -0.96645 0.254427 -0.0352258 + -3.03359 3.47522 1.73278 -0.985593 0.0485326 -0.162024 + -3.04323 3.74227 1.86023 -0.985333 0.0410416 -0.165636 + -3.02354 4.08968 1.8351 -0.98447 0.117686 -0.130267 + -3.0531 3.37906 1.83273 -0.990131 0.0334703 -0.136087 + -3.06252 3.66391 1.96755 -0.990077 0.0307512 -0.137123 + -3.04636 4.01302 1.94028 -0.98691 0.115826 -0.112223 + -2.99596 4.31437 2.09793 -0.971905 0.23494 -0.0142546 + -2.97314 4.39094 1.99271 -0.970877 0.237901 -0.0283056 + -3.06928 3.30294 1.94597 -0.995183 0.00961897 -0.097564 + -3.0787 3.58771 2.08074 -0.995121 0.0150453 -0.0975064 + -3.06565 3.93467 2.04759 -0.990221 0.104895 -0.0919771 + -3.07647 3.21742 2.04991 -0.997908 -0.0162816 -0.0625671 + -3.08895 3.52185 2.21422 -0.998323 -0.000920435 -0.0578908 + -3.0818 3.87102 2.16324 -0.993673 0.0951125 -0.0597268 + -3.0344 4.15634 2.33024 -0.974326 0.223808 0.0244825 + -3.01826 4.2199 2.21454 -0.973043 0.230585 -0.00422352 + -3.08109 3.14025 2.16597 -0.99861 -0.0419668 -0.0319002 + -3.09356 3.44468 2.33028 -0.999739 -0.0187587 -0.0130365 + -3.09204 3.80515 2.29671 -0.996723 0.0797864 -0.0133175 + -3.05381 2.77414 2.08209 -0.996405 -0.084485 -0.00629648 + -3.0788 3.08234 2.28906 -0.997644 -0.0664127 0.0172218 + -3.08929 3.3725 2.4613 -0.998404 -0.0420702 0.037683 + -3.09588 3.72791 2.47051 -0.997261 0.0645251 0.0361433 + -3.06812 3.01108 2.40629 -0.994893 -0.0861612 0.0525723 + -3.07861 3.30131 2.57859 -0.994863 -0.05994 0.0815805 + -3.09161 3.65564 2.60148 -0.995924 0.0343002 0.0834155 + -3.04793 4.00287 2.62426 -0.976937 0.187824 0.101568 + -3.04409 4.0802 2.45051 -0.977306 0.203266 0.059628 + -3.03966 2.71913 2.35896 -0.992734 -0.104479 0.0596978 + -3.05657 2.97725 2.54149 -0.990005 -0.0999076 0.0995394 + -3.0629 3.26618 2.70544 -0.989233 -0.0753762 0.125446 + -3.07773 3.62876 2.73185 -0.99218 0.0308193 0.120949 + -3.02916 2.70248 2.502 -0.985016 -0.130322 0.112954 + -3.03511 2.96217 2.67901 -0.981701 -0.116037 0.150994 + -3.04144 3.2511 2.84297 -0.98389 -0.0914496 0.153614 + -3.06202 3.59362 2.8587 -0.990392 0.018643 0.137027 + -3.02245 3.93634 2.89569 -0.971203 0.17576 0.160849 + -2.99042 2.45789 2.48404 -0.965662 -0.205132 0.159428 + -3.00339 2.67289 2.63705 -0.970397 -0.162974 0.178237 + -3.00934 2.93258 2.81406 -0.97263 -0.138556 0.186526 + -3.01648 3.21906 2.97146 -0.974828 -0.114358 0.191399 + -3.04423 3.55852 2.9869 -0.986437 0.00130627 0.164133 + -2.93387 2.23435 2.47923 -0.94443 -0.28361 0.166182 + -2.9537 2.39974 2.60716 -0.950611 -0.233367 0.204643 + -2.96667 2.61474 2.76017 -0.954502 -0.196147 0.224615 + -2.97642 2.9104 2.94847 -0.956968 -0.16692 0.237381 + -2.98356 3.19688 3.10587 -0.963389 -0.139286 0.229087 + -2.90194 2.0281 2.26247 -0.92667 -0.353867 0.126728 + -2.83818 1.92807 2.39192 -0.922833 -0.360306 0.136231 + -2.88684 2.14071 2.57242 -0.931236 -0.309609 0.192202 + -2.90666 2.30602 2.7003 -0.934106 -0.263819 0.240509 + -2.92343 2.55214 2.87299 -0.93494 -0.22638 0.273201 + -2.76286 1.69898 2.15471 -0.925325 -0.372706 0.0697392 + -2.70903 1.55131 2.28208 -0.92923 -0.35873 0.0885699 + -2.78184 1.79753 2.44243 -0.922195 -0.356699 0.149407 + -2.83049 2.01008 2.62288 -0.920057 -0.332534 0.207163 + -2.72062 1.56338 1.99899 -0.923537 -0.378857 0.0595535 + -2.66678 1.41571 2.12635 -0.930263 -0.361337 0.0636041 + -2.59055 1.28583 2.30111 -0.882091 -0.442249 0.162268 + -2.63475 1.40743 2.3743 -0.892844 -0.411875 0.182176 + -2.70756 1.65364 2.53465 -0.904637 -0.381123 0.190729 + -2.78036 1.65222 1.87671 -0.844322 -0.508604 0.168649 + -2.65077 1.36379 2.06668 -0.930127 -0.363955 0.0489987 + -2.57454 1.23391 2.24143 -0.869265 -0.472003 0.146941 + -2.62574 1.29734 2.02858 -0.905831 -0.423349 0.015689 + -2.57253 1.20236 2.14269 -0.874843 -0.477347 0.0824048 + -2.49688 1.14894 2.35241 -0.797846 -0.577688 0.172392 + -2.47789 1.15753 2.47854 -0.801425 -0.551778 0.230782 + -2.52209 1.27912 2.55174 -0.844095 -0.454112 0.285106 + -2.61058 1.2738 1.93234 -0.91332 -0.407003 0.013949 + -2.55736 1.17874 2.0464 -0.89168 -0.449123 0.0565332 + -2.49804 1.0787 2.15467 -0.845913 -0.49919 0.187725 + -2.49487 1.11739 2.25366 -0.811537 -0.547891 0.203034 + -2.3746 1.0412 2.47782 -0.737199 -0.640993 0.213693 + -2.54855 1.13661 1.98176 -0.923823 -0.352456 0.149419 + -2.48922 1.03649 2.08999 -0.867064 -0.450973 0.211715 + -2.3982 0.9821 2.26839 -0.763188 -0.589093 0.265543 + -2.39503 1.02079 2.36737 -0.778268 -0.575211 0.251857 + -2.50013 1.00485 1.98979 -0.886277 -0.414869 0.205907 + -2.42456 0.923891 2.07661 -0.818905 -0.496968 0.287082 + -2.41365 0.955533 2.1768 -0.774064 -0.567695 0.280263 + -2.26307 0.891843 2.39772 -0.675971 -0.708013 0.204404 + -2.24738 0.891026 2.48613 -0.692788 -0.696211 0.187975 + -2.44299 0.898732 1.98359 -0.831434 -0.499844 0.242637 + -2.31965 0.836749 2.22674 -0.825006 -0.373394 0.424195 + -2.27852 0.865364 2.30618 -0.762481 -0.50065 0.409844 + -2.17378 0.795248 2.41202 -0.706789 -0.56219 0.429408 + -2.14557 0.806572 2.49401 -0.640421 -0.739745 0.206492 + -2.33809 0.811585 2.13373 -0.774895 -0.582227 0.246066 + -2.24336 0.743201 2.25177 -0.697289 -0.652148 0.297474 + -2.21492 0.766726 2.33263 -0.734153 -0.481645 0.478578 + -2.08783 0.74786 2.47611 -0.730279 -0.512078 0.452181 + -2.05961 0.759091 2.55805 -0.647539 -0.745887 0.156029 + -2.2558 0.73119 2.16118 -0.735008 -0.629485 0.252016 + -2.15809 0.695136 2.32363 -0.73305 -0.570873 0.369785 + -2.12965 0.71866 2.40448 -0.748755 -0.436536 0.498801 + -2.04338 0.641992 2.48507 -0.808803 -0.352878 0.470442 + -2.00156 0.671104 2.55665 -0.828498 -0.321208 0.458713 + -2.26814 0.703118 2.0762 -0.789196 -0.499355 0.357509 + -2.17751 0.671424 2.24169 -0.752863 -0.576913 0.316809 + -2.09016 0.602344 2.32814 -0.763927 -0.578689 0.285542 + -2.07074 0.626055 2.41008 -0.79726 -0.480614 0.365221 + -2.28774 0.657029 1.99443 -0.73705 -0.571119 0.361359 + -2.18985 0.643355 2.15671 -0.711715 -0.641943 0.285256 + -2.10681 0.59144 2.24863 -0.729728 -0.642076 0.235023 + -1.99277 0.524004 2.43263 -0.735676 -0.640561 0.220141 + -1.97127 0.522689 2.50491 -0.780389 -0.54591 0.304918 + -2.29048 0.621709 1.9102 -0.667492 -0.702247 0.247594 + -2.18733 0.613612 2.07243 -0.620495 -0.73439 0.27506 + -2.1043 0.561692 2.16436 -0.701603 -0.679374 0.214952 + -2.00942 0.513183 2.35318 -0.71777 -0.668456 0.194866 + -2.28961 0.596452 1.82015 -0.687799 -0.695352 0.208371 + -2.19008 0.578291 1.98821 -0.628913 -0.714082 0.307498 + -2.11079 0.542994 2.08414 -0.708206 -0.657741 0.256555 + -2.03023 0.518534 2.27931 -0.65453 -0.739604 0.156767 + -2.28026 0.562414 1.73771 -0.679328 -0.714799 0.166061 + -2.18691 0.539241 1.90664 -0.6342 -0.724581 0.269764 + -2.10762 0.50394 2.00259 -0.640231 -0.724305 0.255904 + -2.03672 0.499833 2.1991 -0.65951 -0.726239 0.193967 + -2.24905 0.521653 1.65891 -0.684254 -0.716505 0.135709 + -2.17756 0.505198 1.82421 -0.630668 -0.737194 0.242493 + -2.10575 0.4792 1.92564 -0.631569 -0.735123 0.246405 + -2.05096 0.495578 2.12347 -0.484012 -0.859925 0.162056 + -2.33088 0.588432 1.51684 -0.744028 -0.663789 0.0762042 + -2.22442 0.481562 1.57934 -0.694638 -0.708134 0.126589 + -2.17066 0.469328 1.74214 -0.635417 -0.740743 0.218051 + -2.09886 0.44333 1.84357 -0.486876 -0.838458 0.244825 + -2.0491 0.470745 2.04648 -0.495894 -0.846812 0.19235 + -2.30903 0.550103 1.42763 -0.750388 -0.655746 0.0831516 + -2.18976 0.4357 1.50058 -0.672905 -0.732342 0.104283 + -2.14603 0.429243 1.66256 -0.598331 -0.778142 0.191037 + -2.08491 0.41771 1.76634 -0.472304 -0.848543 0.238546 + -2.04536 0.459435 1.97107 -0.214931 -0.962309 0.16663 + -2.27437 0.504326 1.34892 -0.723764 -0.685416 0.0798187 + -2.16101 0.400339 1.41963 -0.643431 -0.761764 0.0755844 + -2.12044 0.391848 1.58513 -0.560477 -0.810525 0.170045 + -2.05932 0.380315 1.68891 -0.289083 -0.92232 0.256431 + -2.03142 0.433901 1.89389 -0.251125 -0.944618 0.211263 + -2.3602 0.564961 1.02569 -0.78062 -0.621002 0.0706385 + -2.25227 0.468723 1.25478 -0.697441 -0.713735 0.0644751 + -2.13629 0.374728 1.33399 -0.611773 -0.79012 0.037991 + -2.09168 0.356484 1.50419 -0.52082 -0.840147 0.151325 + -2.03896 0.35597 1.61188 -0.262853 -0.931513 0.251379 + -2.41926 0.62912 0.887167 -0.834734 -0.550042 0.0259435 + -2.33831 0.524184 0.926321 -0.72016 -0.693218 0.0286187 + -2.22755 0.443112 1.16914 -0.636467 -0.77051 0.0349839 + -2.11923 0.35999 1.24832 -0.541833 -0.839667 -0.0370968 + -2.06554 0.327366 1.42382 -0.458538 -0.882794 0.102062 + -2.39736 0.588431 0.787844 -0.834602 -0.523427 -0.171649 + -2.30226 0.493857 0.894251 -0.593066 -0.804758 -0.0252384 + -2.19151 0.412783 1.13707 -0.558935 -0.828683 -0.0295925 + -2.10625 0.362893 1.15849 -0.572301 -0.81804 -0.0572907 + -2.04848 0.312717 1.33819 -0.402113 -0.914284 0.0488823 + -2.36268 0.60947 0.695201 -0.835358 -0.403851 -0.372937 + -2.35739 0.555668 0.72119 -0.776904 -0.546223 -0.313146 + -2.3056 0.499838 0.79589 -0.61471 -0.786615 -0.0580366 + -2.17853 0.415688 1.04724 -0.503147 -0.861923 -0.0627045 + -2.33391 0.590818 0.650907 -0.78666 -0.467235 -0.403555 + -2.28997 0.514976 0.652872 -0.713512 -0.619832 -0.326663 + -2.23818 0.459146 0.727572 -0.593176 -0.802481 -0.0645463 + -2.18187 0.421669 0.948884 -0.550253 -0.834858 -0.0153152 + -2.2873 0.572308 0.595769 -0.741835 -0.45959 -0.48832 + -2.24336 0.496377 0.597683 -0.680646 -0.579164 -0.448654 + -2.19667 0.44916 0.60447 -0.539142 -0.767248 -0.347357 + -2.20274 0.435055 0.681698 -0.580149 -0.805973 -0.117619 + -0.713836 1.20864 0.668001 -0.550473 0.327647 -0.767872 + -0.76307 1.05071 0.687555 -0.865885 -0.130153 -0.483015 + -0.721154 0.972399 0.702789 -0.591722 -0.587199 -0.552325 + -0.718215 1.30967 0.728414 0.224483 0.627249 -0.745766 + -0.687688 1.26297 0.695711 0.126179 0.626822 -0.768878 + -0.703623 1.13731 0.60416 -0.764048 0.101558 -0.637116 + -0.741618 1.08512 0.653345 -0.824341 -0.0358251 -0.564958 + -0.667994 1.35128 0.798747 -0.0132149 0.405154 -0.914153 + -0.637467 1.30458 0.766045 -0.553887 0.636284 -0.536984 + -0.677474 1.19172 0.63192 -0.755109 0.497765 -0.426661 + -0.793653 1.40654 0.767637 0.0632094 -0.107809 -0.99216 + -0.662055 1.37911 0.803149 -0.456809 -0.424754 -0.781607 + -0.631551 1.33229 0.770247 -0.955349 -0.0691095 -0.287285 + -0.671558 1.21943 0.636123 -0.987962 0.15401 -0.01459 + -0.664457 1.19884 0.575777 -0.801503 0.195911 -0.564988 + -0.831875 1.44489 0.765211 0.345372 0.232124 -0.909305 + -0.694071 1.41874 0.7437 -0.588084 -0.77514 -0.230902 + -0.663568 1.37192 0.710797 -0.897815 -0.419413 0.134243 + -0.656467 1.35125 0.650401 -0.909617 0.1083 -0.401084 + -0.814632 1.53065 0.792667 -0.0193719 -0.0446855 -0.998813 + -0.732294 1.45709 0.741273 -0.556268 -0.16247 -0.814966 + -0.797789 1.57132 0.771423 -0.486179 -0.653187 -0.580497 + -0.715451 1.49768 0.71998 -0.61024 -0.151298 -0.777635 + -0.649712 1.43033 0.669226 -0.703279 0.12038 -0.700647 + -0.60316 1.24951 0.528621 -0.626123 0.163761 -0.762333 + -0.939812 1.7023 0.659365 0.0514114 -0.616467 -0.7857 + -0.097276 1.11213 0.652366 0.640076 -0.765317 -0.0677761 + -0.05827 1.15812 0.604717 0.522918 -0.597341 -0.608063 + -0.069667 1.21195 0.547068 0.540397 -0.65274 -0.530944 + -0.037458 1.25754 0.527104 0.277973 -0.849107 -0.449164 + 0.037461 1.25754 0.527104 -0.287828 -0.866197 -0.408483 + 0.069674 1.21195 0.547068 -0.617967 -0.651894 -0.439489 + 0.106297 0.963787 0.855306 -0.302552 -0.778666 -0.549675 + 0.159893 0.617168 1.26427 -0.00018195 -0.723562 -0.690259 + -0.278381 0.865595 0.794182 0.793877 -0.57517 0.19733 + -0.196947 0.932788 0.689999 0.825396 -0.522807 0.213058 + -0.157942 0.978861 0.642399 0.827801 -0.522574 0.204111 + -0.241614 0.889583 0.738233 0.791228 -0.560691 0.244097 + -0.288895 0.827734 0.717356 0.635839 -0.771518 -0.0216514 + -0.244228 0.870942 0.669121 0.68001 -0.727993 -0.0872503 + -0.219008 0.907592 0.615839 0.652838 -0.737088 -0.174652 + -0.121262 1.0174 0.600437 0.971148 -0.221631 -0.0880376 + -0.120096 1.10255 0.623764 0.401105 -0.241361 -0.883663 + -0.326227 0.801761 0.780547 0.626899 -0.775722 0.0724724 + -0.320431 0.813893 0.691933 0.276914 -0.917187 -0.286508 + -0.309675 0.843907 0.623746 0.234508 -0.872709 -0.428234 + -0.284455 0.880559 0.570464 0.325062 -0.838464 -0.437394 + -0.405103 0.809844 0.705145 -0.138438 -0.935576 -0.324859 + -0.394347 0.839772 0.636909 -0.157283 -0.878174 -0.451743 + -0.376098 0.87127 0.570549 -0.117394 -0.848915 -0.515327 + -0.268356 0.921192 0.510285 0.314855 -0.672168 -0.670117 + -0.182329 0.946137 0.573879 0.682998 -0.663204 -0.306064 + -0.5284 0.831478 0.762472 -0.344344 -0.878752 -0.330487 + -0.50752 0.852181 0.689413 -0.351198 -0.839542 -0.414523 + -0.489271 0.88368 0.623056 -0.383332 -0.760798 -0.523682 + -0.464 0.918458 0.559421 -0.396583 -0.667741 -0.629955 + -0.359999 0.911817 0.510322 -0.120931 -0.733906 -0.668399 + -0.638553 0.874038 0.783357 -0.419054 -0.821211 -0.387307 + -0.617673 0.894655 0.710248 -0.459057 -0.761781 -0.457118 + -0.593 0.932484 0.647928 -0.475582 -0.645681 -0.597426 + -0.56773 0.967259 0.584292 -0.516091 -0.555809 -0.651711 + -0.44088 0.967001 0.506741 -0.420403 -0.499455 -0.7575 + -0.696481 1.01014 0.64042 -0.563423 -0.467338 -0.681285 + -0.658486 1.06232 0.591236 -0.555324 -0.366803 -0.746371 + -0.623498 1.11123 0.54193 -0.55144 -0.212606 -0.806668 + -0.532742 1.01616 0.534987 -0.477022 -0.399104 -0.783049 + -0.562201 1.16198 0.494825 -0.467206 -0.0966409 -0.878851 + -0.508158 1.07115 0.493348 -0.449762 -0.267959 -0.852005 + -0.416295 1.0219 0.465053 -0.416386 -0.309639 -0.854837 + -0.336879 0.960448 0.457692 -0.0367639 -0.638476 -0.768764 + -0.248564 0.979545 0.481016 0.439468 -0.591959 -0.675613 + -0.568156 1.31347 0.519837 -0.248861 0.375811 -0.892656 + -0.520369 1.21784 0.473467 -0.0513135 0.205582 -0.977294 + -0.466326 1.12701 0.471992 -0.371089 -0.0715025 -0.92584 + -0.390225 1.08754 0.441956 -0.417755 -0.14868 -0.896312 + -0.312808 1.02384 0.415092 -0.0392679 -0.411501 -0.910563 + -0.596406 1.32859 0.547445 -0.713339 0.233785 -0.660675 + -0.489027 1.27485 0.512732 -0.189612 0.389764 -0.901183 + -0.637336 1.51437 0.650661 -0.734374 -0.0989793 -0.671489 + -0.703075 1.58181 0.701465 -0.470371 -0.510864 -0.719561 + -0.830301 1.58874 0.707658 -0.532356 -0.805434 -0.260524 + -0.972324 1.71963 0.59555 -0.71085 -0.698134 0.0854449 + -0.939812 1.7023 0.659365 -0.746828 -0.631325 0.208988 + -0.434308 1.19784 0.443518 -0.520866 0.0958387 -0.848242 + -0.358207 1.15828 0.413431 -0.286541 0.00440085 -0.958058 + -0.286738 1.0894 0.391946 0.0889776 -0.153882 -0.984075 + -0.194616 1.1096 0.436545 0.700968 -0.218571 -0.678875 + -0.224494 1.04294 0.438416 0.561182 -0.37126 -0.739757 + -0.319542 1.22421 0.413041 -0.147284 0.193216 -0.970039 + -0.258145 1.16068 0.410479 0.18777 0.0261342 -0.981865 + -0.166023 1.18089 0.455079 0.656369 -0.481118 -0.581124 + -0.131493 1.15639 0.566116 0.652731 -0.576033 -0.492066 + -0.161371 1.08963 0.567937 0.866261 -0.13673 -0.480518 + -0.21948 1.22669 0.410138 0.0613259 -0.0554027 -0.996579 + -0.133813 1.22648 0.435115 0.465124 -0.553232 -0.691082 + -0.160933 1.28092 0.40182 0.0291503 0.0203809 -0.999367 + -0.075267 1.2807 0.426797 0.352949 -0.536901 -0.766267 + -0.142705 1.32643 0.422794 -0.375198 0.498522 -0.781475 + -0.103364 1.35168 0.413848 -0.347091 0.0392415 -0.93701 + -0.058157 1.3369 0.399255 0.187623 -0.214952 -0.958433 + -0.037458 1.26966 0.460324 0.0588953 -0.872721 -0.484653 + 0.037461 1.26966 0.460324 -0.29007 -0.794245 -0.533886 + -0.063033 1.41611 0.399059 -0.142519 -0.196359 -0.970119 + -0.020348 1.32586 0.432783 0.231741 -0.401437 -0.886084 + 0.020343 1.32585 0.43279 -0.252983 -0.437843 -0.862724 + 0.07527 1.2807 0.426797 -0.330844 -0.437348 -0.836223 + 0.133816 1.22648 0.435115 -0.443435 -0.563743 -0.696821 + -0.020348 1.3982 0.403079 -0.0271822 -0.33499 -0.94183 + 0.020343 1.3982 0.403087 -0.0815778 -0.250729 -0.964614 + 0.058152 1.3369 0.399263 -0.100473 -0.294318 -0.950412 + 0.103371 1.35168 0.413852 0.347001 0.0392828 -0.937042 + 0.160933 1.28092 0.40182 -0.0430296 0.0255672 -0.998747 + 0.022033 1.47459 0.381164 0.0315029 -0.376409 -0.925918 + 0.063028 1.41611 0.399067 0.169006 -0.152092 -0.973809 + 0.108247 1.43089 0.413656 0.531612 -0.145584 -0.834382 + 0.064718 1.49242 0.377094 0.317126 -0.287932 -0.903618 + 0.124814 1.48874 0.411456 0.582193 -0.194188 -0.789521 + 0.181837 1.41074 0.486163 0.522952 0.0773544 -0.848844 + 0.221193 1.38548 0.495113 0.176339 0.438415 -0.881304 + 0.142727 1.32642 0.422802 0.375128 0.498526 -0.781505 + 0.198404 1.46867 0.484013 0.565244 -0.297728 -0.769323 + 0.283988 1.51739 0.52664 0.324128 -0.22821 -0.918075 + 0.293227 1.44316 0.523606 0.0526546 0.28335 -0.95757 + 0.265505 1.32973 0.449478 0.101272 0.515591 -0.850829 + 0.283711 1.28422 0.428496 0.193634 0.407203 -0.892576 + 0.210234 1.5283 0.447544 0.45081 -0.475953 -0.755142 + 0.295818 1.5771 0.490221 0.573441 -0.301096 -0.76191 + 0.394222 1.62731 0.522844 0.282031 0.0675666 -0.957023 + 0.403461 1.553 0.51976 0.345415 -0.0507179 -0.937078 + 0.280894 1.6451 0.472234 0.739166 -0.170683 -0.651538 + 0.348007 1.70073 0.530481 0.400072 0.060822 -0.914463 + 0.400693 1.81364 0.551913 0.370849 0.089959 -0.924326 + 0.446908 1.74023 0.544275 0.466976 0.122535 -0.875739 + 0.474947 1.67246 0.56804 0.728444 -0.0387595 -0.684008 + 0.333083 1.76874 0.512495 0.694432 -0.0192365 -0.719301 + 0.378274 1.89349 0.544616 0.438766 -0.0111476 -0.898532 + 0.456381 1.94003 0.566206 0.123192 -0.129377 -0.983913 + 0.465267 1.85968 0.587968 0.345129 -0.159922 -0.92483 + 0.493306 1.79201 0.611783 0.563225 -0.139724 -0.814404 + 0.308398 1.84823 0.493807 0.831084 -0.0086162 -0.556081 + 0.353588 1.97298 0.525929 0.663916 -0.133579 -0.73578 + 0.433961 2.01996 0.558959 0.0721653 -0.0444385 -0.996402 + 0.535835 1.97165 0.553246 -0.334563 -0.292087 -0.895965 + 0.363007 2.05692 0.504145 0.824621 -0.263804 -0.500408 + 0.427419 2.11128 0.562997 0.246753 -0.158179 -0.956082 + 0.532117 2.13554 0.526962 -0.490472 -0.188304 -0.850869 + 0.538659 2.04423 0.522924 -0.400579 -0.128175 -0.907253 + 0.436838 2.19521 0.541213 0.324947 -0.561984 -0.760647 + 0.547218 2.19947 0.491443 -0.535375 -0.40146 -0.743104 + 0.675615 2.02754 0.398427 -0.688805 -0.400184 -0.604484 + 0.670734 1.96894 0.458334 -0.572778 -0.40382 -0.71334 + 0.667909 1.89627 0.488606 -0.493779 -0.352755 -0.794825 + 0.579077 2.25846 0.430067 -0.509442 -0.476457 -0.71656 + 0.690716 2.09138 0.362858 -0.705055 -0.124379 -0.698159 + 0.798104 2.04702 0.249884 -0.583926 -0.481146 -0.653857 + 0.815225 2.03678 0.260635 -0.217635 -0.802835 -0.555059 + 0.905681 2.11917 0.074324 -0.677792 0.725881 -0.117028 + -0.157942 0.978861 0.642399 -0.231013 -0.0754603 -0.97002 + -0.162537 1.00449 0.54461 0.784285 -0.254138 -0.565959 + -2.09165 3.45262 -1.04988 -0.0543093 -0.45732 0.887643 + -2.18006 3.48536 -1.04378 -0.0209092 -0.388401 0.921253 + -2.2058 3.68529 -0.95188 -0.2531 -0.394922 0.883163 + -1.97364 3.439 -1.04168 -0.297213 -0.583841 0.755509 + -2.1174 3.65256 -0.957993 -0.258198 -0.660296 0.705225 + -1.86176 3.43631 -0.971036 -0.505425 -0.593745 0.626109 + -2.00552 3.64988 -0.887349 -0.44918 -0.5374 0.71375 + -2.07039 3.82545 -0.818837 -0.506927 -0.317155 0.801522 + -2.14037 3.9084 -0.844915 -0.519915 -0.226356 0.823682 + -2.20152 3.88538 -0.885033 -0.363834 -0.250587 0.897124 + -1.79986 3.5921 -0.782469 -0.625921 -0.509609 0.590357 + -1.86474 3.76767 -0.713957 -0.683507 -0.470865 0.557767 + -1.97612 3.9831 -0.709897 -0.76075 -0.338078 0.554042 + -2.04609 4.06606 -0.735983 -0.608563 -0.297325 0.735697 + -1.58849 3.30425 -0.777901 -0.914295 -0.357266 0.190855 + -1.70671 3.54272 -0.695131 -0.871353 -0.468831 0.144714 + -1.77531 3.6815 -0.637106 -0.88567 -0.455344 0.090835 + -1.92994 3.90122 -0.673683 -0.853646 -0.465011 0.234633 + -1.82364 3.76664 -0.537178 -0.861739 -0.387494 -0.327496 + -1.84051 3.81505 -0.596833 -0.856313 -0.512053 0.0672991 + -1.94943 4.01591 -0.560924 -0.910745 -0.404165 -0.0848185 + -1.99561 4.09788 -0.597096 -0.909061 -0.406266 0.0925032 + -2.03906 4.19652 -0.66155 -0.785931 -0.500045 0.363687 + -1.8582 3.6928 -0.453484 -0.761729 -0.209058 -0.61324 + -1.93577 3.88299 -0.4305 -0.791942 -0.415927 -0.447026 + -1.95263 3.9314 -0.490156 -0.828293 -0.436161 -0.351701 + -2.03259 4.06293 -0.415175 -0.885005 -0.287457 -0.366244 + -2.03936 4.18336 -0.499351 -0.906514 -0.379454 -0.185058 + -1.93562 3.58438 -0.343901 -0.717892 -0.114539 -0.686668 + -2.05642 3.6944 -0.238661 -0.731413 -0.124679 -0.67044 + -1.979 3.80282 -0.348244 -0.727421 -0.218734 -0.650396 + -2.10697 3.8933 -0.246166 -0.759824 -0.172866 -0.626725 + -2.0358 3.97843 -0.344406 -0.821546 -0.21935 -0.526259 + -2.00939 3.36899 -0.249225 -0.661383 -0.0449468 -0.7487 + -2.0522 3.5238 -0.228167 -0.703479 -0.0532264 -0.70872 + -2.13928 3.60563 -0.129109 -0.740915 -0.0352635 -0.670672 + -2.2237 3.73838 -0.061223 -0.757445 -0.109574 -0.643639 + -2.15021 3.81314 -0.163911 -0.761943 -0.159675 -0.627652 + -2.30656 3.64969 0.04838 -0.8004 -0.0724007 -0.595079 + -2.36788 3.86899 0.100744 -0.817208 -0.0760076 -0.571309 + -2.29439 3.94375 -0.001943 -0.790675 -0.0926866 -0.605179 + -2.24075 4.03992 -0.09271 -0.79328 -0.097494 -0.601 + -2.42075 3.77541 0.197428 -0.843604 -0.0850079 -0.530194 + -2.46344 4.08564 0.234104 -0.870739 -0.0700197 -0.486734 + -2.42688 4.18807 0.142888 -0.852323 -0.075422 -0.517549 + -2.37324 4.28423 0.052122 -0.834333 -0.0749794 -0.546139 + -2.55816 4.3135 0.378037 -0.886111 -0.0396392 -0.461775 + -2.5216 4.41592 0.286831 -0.893206 -0.0227285 -0.449073 + -2.47784 4.52184 0.207375 -0.884018 -0.0024716 -0.467446 + -2.34308 4.40835 -0.01565 -0.845198 -0.0911075 -0.52663 + -2.16957 4.12504 -0.190949 -0.795887 -0.110816 -0.595218 + -2.60312 4.21438 0.46731 -0.874776 -0.0297995 -0.483611 + -2.64047 4.54202 0.519619 -0.88904 0.0479407 -0.455313 + -2.586 4.64014 0.436469 -0.893476 0.0723779 -0.443241 + -2.54224 4.74606 0.357013 -0.898797 0.10193 -0.426349 + -2.68542 4.4429 0.6089 -0.906215 0.0169883 -0.422476 + -2.66822 4.75083 0.630958 -0.911901 0.157781 -0.37887 + -2.61376 4.84895 0.547808 -0.900977 0.177215 -0.396023 + -2.55713 4.93932 0.463279 -0.900637 0.193606 -0.389062 + -2.48569 4.84565 0.275923 -0.900593 0.129705 -0.414859 + -2.72797 4.35094 0.703387 -0.915186 0.0102556 -0.402902 + -2.76089 4.56788 0.813234 -0.941275 0.103216 -0.321478 + -2.71834 4.65994 0.718789 -0.9311 0.130438 -0.340644 + -2.65025 4.94789 0.708834 -0.920467 0.267033 -0.285365 + -2.59492 5.03463 0.622196 -0.909378 0.282126 -0.305673 + -2.80234 4.48734 0.914338 -0.958409 0.0835529 -0.272894 + -2.74932 4.77044 0.885785 -0.940867 0.225482 -0.252838 + -2.70037 4.857 0.796664 -0.931207 0.250401 -0.264863 + -2.61138 5.14084 0.817034 -0.911251 0.354851 -0.209049 + -2.79077 4.6899 0.98689 -0.951738 0.206352 -0.227187 + -2.7084 4.97785 0.998734 -0.931745 0.32956 -0.152452 + -2.65944 5.06441 0.909622 -0.921912 0.338252 -0.188848 + -2.83173 4.63089 1.0977 -0.959075 0.189566 -0.210331 + -2.78712 4.84956 1.20634 -0.930227 0.338752 -0.141156 + -2.74616 4.90857 1.09554 -0.931493 0.333064 -0.146247 + -2.63199 5.20228 1.15381 -0.918214 0.393414 -0.0459125 + -2.60005 5.27246 1.05447 -0.912686 0.399923 -0.0840546 + -2.8228 4.79673 1.31545 -0.93772 0.326351 -0.119063 + -2.69677 5.07788 1.34668 -0.905787 0.420403 -0.0530262 + -2.66975 5.13291 1.25057 -0.912907 0.404943 -0.0512024 + -2.53978 5.40978 1.32602 -0.898035 0.439922 0.00130757 + -2.73246 5.02505 1.45579 -0.888433 0.44311 -0.11975 + -2.59562 5.29916 1.50761 -0.885355 0.464805 -0.0101343 + -2.5686 5.35419 1.4115 -0.894304 0.447457 0.00138431 + -2.42323 5.62676 1.5194 -0.818219 0.574298 0.0264345 + -2.50784 5.47996 1.22667 -0.873247 0.486304 -0.0307972 + -2.77865 4.97933 1.56458 -0.901265 0.419155 -0.109685 + -2.66938 5.20707 1.70372 -0.856494 0.513361 -0.0536392 + -2.62319 5.25279 1.59493 -0.859418 0.506552 -0.0693241 + -2.46568 5.52634 1.67394 -0.85751 0.509483 0.071438 + -2.45206 5.57117 1.60488 -0.859907 0.502524 0.0896057 + -2.80769 4.92047 1.67653 -0.93074 0.365679 0.00157322 + -2.68816 5.16972 1.81502 -0.881842 0.468562 0.0529564 + -2.50869 5.45074 1.83768 -0.820295 0.570351 0.0426088 + -2.49325 5.47997 1.76125 -0.837623 0.544791 0.0398699 + -2.31828 5.7211 1.80079 -0.784604 0.580258 0.218397 + -2.82122 4.86942 1.79256 -0.933617 0.35671 0.0334293 + -2.70169 5.11875 1.9311 -0.89055 0.44423 0.0978837 + -2.55329 5.34863 2.07074 -0.8275 0.544612 0.136531 + -2.52747 5.41347 1.94903 -0.816856 0.569034 0.0945872 + -2.30026 5.70265 1.96015 -0.742642 0.655494 0.137152 + -2.84193 4.80944 1.90563 -0.928767 0.37057 -0.00836971 + -2.71208 5.05683 2.09695 -0.866553 0.493758 0.0727193 + -2.56369 5.28679 2.23664 -0.82575 0.527754 0.199031 + -2.36036 5.57092 2.18392 -0.739523 0.637411 0.21636 + -2.33453 5.63576 2.06221 -0.745054 0.642313 0.1798 + -2.86009 4.78554 2.03663 -0.923899 0.382483 -0.010808 + -2.73024 5.03293 2.22795 -0.788939 0.610517 0.0696004 + -2.58513 5.13559 2.48833 -0.790199 0.568266 0.229475 + -2.41336 5.32076 2.59061 -0.745234 0.597703 0.295596 + -2.39192 5.47197 2.33891 -0.74202 0.614454 0.268054 + -2.87809 4.72406 2.17391 -0.940136 0.337211 0.0493238 + -2.78208 4.9222 2.33093 -0.869903 0.475428 0.13129 + -2.63696 5.02486 2.59132 -0.788866 0.56382 0.244535 + -2.89948 4.61338 2.36022 -0.944468 0.318925 0.079168 + -2.80347 4.81152 2.51723 -0.87635 0.438099 0.200202 + -2.77926 4.7781 2.66272 -0.853893 0.462914 0.237861 + -2.61275 4.99135 2.73675 -0.777742 0.562653 0.280247 + -2.92178 4.51901 2.47688 -0.941396 0.320807 0.104194 + -2.7918 4.70423 2.76488 -0.857363 0.466237 0.218063 + -2.6075 4.91344 2.9007 -0.769537 0.556362 0.313487 + -2.39793 5.14652 2.96539 -0.715766 0.609412 0.341021 + -2.40318 5.22443 2.80145 -0.727052 0.607832 0.319273 + -2.93431 4.44513 2.57904 -0.93877 0.321731 0.123289 + -2.944 4.36891 2.69926 -0.942316 0.300852 0.146728 + -2.82734 4.60859 2.84251 -0.878694 0.435094 0.196444 + -2.64304 4.81781 2.97834 -0.78528 0.53861 0.305343 + -2.93668 4.31809 2.81409 -0.941943 0.287876 0.172833 + -2.82002 4.55769 2.95729 -0.865309 0.411778 0.285796 + -2.76831 4.56016 3.08241 -0.833603 0.455824 0.31198 + -2.59133 4.8202 3.1034 -0.761178 0.551585 0.341118 + -3.03633 3.96322 2.76533 -0.974454 0.17874 0.135982 + -2.92508 4.27844 2.95516 -0.930415 0.302307 0.207214 + -2.75332 4.51485 3.20068 -0.829055 0.476306 0.292917 + -2.56165 4.72498 3.30773 -0.746222 0.550401 0.374448 + -2.91008 4.23313 3.07343 -0.923007 0.310234 0.227627 + -2.89556 4.19064 3.19443 -0.921938 0.304481 0.239418 + -2.77868 4.4125 3.29715 -0.850802 0.436808 0.292122 + -2.58701 4.62271 3.40426 -0.75346 0.533149 0.384772 + -2.35703 4.93946 3.37123 -0.688603 0.6029 0.402911 + -3.00792 3.89376 3.01664 -0.969872 0.166385 0.177947 + -2.99013 3.85874 3.14489 -0.964628 0.158448 0.21068 + -2.88356 4.12758 3.30345 -0.920057 0.276043 0.27802 + -2.76669 4.34953 3.40622 -0.83521 0.402747 0.37446 + -3.01927 3.52656 3.11545 -0.978264 -0.0181472 0.206569 + -2.9702 3.80311 3.25965 -0.957509 0.127008 0.258931 + -2.86364 4.07195 3.41821 -0.903613 0.265969 0.335775 + -2.71835 4.34324 3.50512 -0.804391 0.419175 0.421007 + -2.53868 4.61643 3.50315 -0.738434 0.544643 0.39759 + -2.99093 3.47223 3.23235 -0.966858 -0.0510364 0.250161 + -2.94185 3.7487 3.3765 -0.946037 0.0993097 0.308467 + -2.84152 4.00321 3.52207 -0.890499 0.243175 0.384549 + -2.69623 4.2745 3.60898 -0.813905 0.382305 0.437495 + -2.52007 4.5369 3.64849 -0.73621 0.513257 0.441092 + -2.94526 3.14078 3.22244 -0.947246 -0.168592 0.272583 + -2.95263 3.41614 3.34891 -0.950557 -0.0799189 0.300089 + -2.9106 3.68128 3.48288 -0.930175 0.0592283 0.362306 + -2.81027 3.93579 3.62845 -0.882242 0.215088 0.418791 + -2.65982 4.2023 3.73764 -0.802569 0.364417 0.472316 + -2.93318 2.84781 3.06129 -0.941533 -0.196948 0.273363 + -2.8961 3.06982 3.33155 -0.933504 -0.194095 0.301493 + -2.91085 3.34236 3.45169 -0.934533 -0.111482 0.337964 + -2.86882 3.6075 3.58566 -0.918938 0.0248867 0.393616 + -2.86976 2.44501 2.95194 -0.918618 -0.255853 0.301133 + -2.88402 2.77684 3.17041 -0.922545 -0.225435 0.313192 + -2.82897 2.67436 3.24551 -0.90573 -0.254176 0.339188 + -2.84745 2.98667 3.42657 -0.912453 -0.222497 0.343402 + -2.86219 3.25922 3.54671 -0.929621 -0.13405 0.343271 + -2.85299 2.1988 2.7792 -0.915081 -0.292864 0.277233 + -2.79381 2.07464 2.83085 -0.901153 -0.318168 0.294435 + -2.81471 2.34254 3.02704 -0.900527 -0.281915 0.331021 + -2.77132 1.88583 2.67448 -0.901379 -0.35691 0.245216 + -2.70523 1.74766 2.70259 -0.885211 -0.384821 0.261368 + -2.73262 1.95246 2.88208 -0.885417 -0.343054 0.31361 + -2.75351 2.22044 3.07832 -0.887788 -0.302792 0.346627 + -2.64147 1.51538 2.56272 -0.886635 -0.444319 0.12829 + -2.5387 1.40196 2.66698 -0.848709 -0.455277 0.269102 + -2.63705 1.62676 2.7512 -0.880864 -0.41533 0.227113 + -2.66443 1.83164 2.93074 -0.8636 -0.371295 0.341079 + -2.41932 1.16569 2.65599 -0.757829 -0.486036 0.435274 + -2.27515 1.08933 2.76686 -0.72349 -0.621395 0.300717 + -2.46649 1.2873 2.72756 -0.766638 -0.630721 -0.120241 + -2.56484 1.51211 2.81178 -0.860239 -0.431404 0.271809 + -2.35561 1.04979 2.60395 -0.672192 -0.68579 0.279017 + -2.21144 0.973508 2.71487 -0.721084 -0.577432 0.382898 + -2.10981 0.896364 2.79808 -0.823418 -0.512403 0.243772 + -2.20762 1.03299 2.84985 -0.750614 -0.657077 0.0694844 + -2.39897 1.23088 2.81048 -0.781194 -0.591803 0.198757 + -2.22695 0.911439 2.59657 -0.735958 -0.599618 0.314362 + -2.12532 0.8343 2.67978 -0.71394 -0.635401 0.294203 + -2.07563 0.857085 2.85552 -0.763329 -0.605712 0.224595 + -2.17345 0.993706 2.90729 -0.753335 -0.643149 0.13728 + -2.12988 0.805667 2.58238 -0.656956 -0.733925 0.172516 + -2.03971 0.774912 2.74105 -0.707772 -0.662453 0.245387 + -1.97094 0.723982 2.81546 -0.73055 -0.638569 0.241921 + -2.00686 0.806154 2.92993 -0.72925 -0.638309 0.246488 + -2.04427 0.746279 2.64364 -0.66514 -0.737012 0.120011 + -1.96054 0.673768 2.71784 -0.679722 -0.724682 0.113197 + -1.89341 0.665197 2.89428 -0.741697 -0.621265 0.252815 + -1.92394 0.74449 3.01254 -0.725632 -0.639517 0.253921 + -1.97589 0.68658 2.63224 -0.799499 -0.561566 0.213177 + -1.88301 0.61507 2.7967 -0.813589 -0.496025 0.303368 + -1.82403 0.563674 2.87752 -0.86339 -0.39021 0.319833 + -1.83081 0.619075 2.95577 -0.786076 -0.550375 0.281375 + -1.89952 0.575276 2.72663 -0.856007 -0.363034 0.368046 + -1.84054 0.52388 2.80745 -0.804464 -0.46877 0.364817 + -1.78991 0.540926 2.95392 -0.745189 -0.581831 0.325831 + -1.79669 0.59624 3.03212 -0.765077 -0.50521 0.399274 + -1.9252 0.559805 2.65102 -0.844864 -0.386319 0.370083 + -1.84902 0.490325 2.73637 -0.777631 -0.520484 0.352684 + -1.78719 0.502876 2.88203 -0.665964 -0.658825 0.349917 + -1.73148 0.480153 2.93659 -0.569271 -0.725555 0.386653 + -1.73421 0.51829 3.00853 -0.538427 -0.714791 0.446285 + -1.94391 0.538627 2.57991 -0.804422 -0.471355 0.361564 + -1.86774 0.469151 2.66524 -0.750918 -0.572214 0.329686 + -1.79567 0.469321 2.81095 -0.670839 -0.645173 0.365685 + -1.73252 0.44352 2.86664 -0.572203 -0.725371 0.382648 + -1.88031 0.447599 2.59177 -0.688693 -0.683989 0.240544 + -1.80017 0.435389 2.73712 -0.637175 -0.694699 0.333767 + -1.73702 0.409586 2.79281 -0.552377 -0.75448 0.354455 + -1.66489 0.41602 2.90367 -0.500535 -0.772213 0.391346 + -1.66385 0.452739 2.97367 -0.526799 -0.734419 0.427915 + -1.9018 0.448913 2.5195 -0.717192 -0.665489 0.206787 + -1.81274 0.413835 2.66365 -0.642262 -0.696881 0.319151 + -1.74226 0.381653 2.72039 -0.546807 -0.76448 0.341427 + -1.66729 0.385132 2.83637 -0.458282 -0.815868 0.352615 + -1.91665 0.442788 2.4447 -0.706371 -0.685974 0.174582 + -1.82285 0.386233 2.58806 -0.648848 -0.715846 0.257994 + -1.75237 0.35405 2.6448 -0.477941 -0.833239 0.278003 + -1.67252 0.357199 2.76395 -0.401829 -0.861335 0.310861 + -1.93747 0.448141 2.37083 -0.66322 -0.74147 0.101789 + -1.8377 0.380114 2.51326 -0.618341 -0.771339 0.150635 + -1.75667 0.33829 2.5721 -0.410896 -0.898397 0.155073 + -1.67697 0.338785 2.69304 -0.318146 -0.917909 0.237122 + -1.94748 0.45034 2.29522 -0.652028 -0.747666 0.125917 + -1.84167 0.373013 2.43696 -0.570074 -0.81826 0.0739376 + -1.76064 0.33119 2.4958 -0.392025 -0.916909 0.0747872 + -1.68127 0.323023 2.62034 -0.292781 -0.938828 0.181332 + -1.96172 0.44608 2.2196 -0.545545 -0.835137 0.070196 + -1.85169 0.375125 2.3613 -0.511168 -0.859007 -0.0285292 + -1.75908 0.327635 2.42095 -0.31491 -0.947448 -0.0563375 + -1.68045 0.311597 2.54813 -0.290844 -0.950306 0.111036 + -1.96598 0.448469 2.14407 -0.483277 -0.87237 0.0735853 + -1.84948 0.386313 2.28472 -0.413375 -0.907028 -0.0801349 + -1.75687 0.338735 2.34433 -0.36352 -0.926843 -0.0938897 + -1.67889 0.30813 2.47334 -0.303308 -0.952342 0.0323784 + -1.96224 0.437152 2.06866 -0.373598 -0.925468 0.0627102 + -1.85374 0.388701 2.20919 -0.404561 -0.913232 -0.0483561 + -1.75317 0.342798 2.27029 -0.368158 -0.925502 -0.0889166 + -1.67281 0.301677 2.40131 -0.371055 -0.928604 0.0036374 + -1.9619 0.434756 1.99342 -0.320484 -0.943178 0.0877777 + -1.85671 0.399638 2.13244 -0.326285 -0.943416 -0.0591966 + -1.75615 0.353735 2.19355 -0.37183 -0.923184 -0.0973329 + -1.66911 0.305741 2.32728 -0.361023 -0.930197 -0.0662937 + -1.94478 0.420302 1.91885 -0.242144 -0.966171 0.0887686 + -1.85638 0.397241 2.05719 -0.34773 -0.937278 0.0243521 + -1.75483 0.359828 2.1202 -0.403427 -0.91483 -0.0182605 + -1.66021 0.306524 2.25632 -0.390768 -0.918382 -0.0622521 + -2.01429 0.419449 1.81933 0.000201078 -0.976165 0.217028 + -1.9407 0.415079 1.8431 -0.193123 -0.974072 0.117843 + -1.86792 0.40068 1.98044 -0.27893 -0.960268 0.00916281 + -1.76638 0.363265 2.04344 -0.323562 -0.944997 -0.0478489 + -1.65889 0.312522 2.18293 -0.363883 -0.924314 -0.115032 + -1.99393 0.39519 1.74235 -0.000629854 -0.96888 0.247529 + -1.92829 0.401439 1.76872 -0.0227849 -0.993839 0.108469 + -1.86385 0.395455 1.90469 -0.241658 -0.970327 0.00815342 + -1.76647 0.37023 1.97018 -0.282978 -0.957349 -0.0583555 + -1.64877 0.321744 2.11336 -0.305524 -0.942695 -0.134089 + -2.01282 0.326938 1.53156 -0.00306389 -0.969994 0.243107 + -1.98152 0.381463 1.66792 0.303052 -0.928114 0.216248 + -1.92178 0.39673 1.69228 0.0234258 -0.988778 0.147541 + -1.86879 0.401352 1.82807 -0.0709514 -0.996959 -0.0322347 + -1.77141 0.376127 1.89356 -0.228292 -0.970658 -0.075535 + -1.99759 0.31104 1.4545 0.258246 -0.955681 0.14136 + -1.9663 0.36556 1.59087 0.268162 -0.931293 0.24654 + -1.90934 0.379825 1.61676 0.2331 -0.960014 0.15504 + -1.9927 0.303234 1.36722 0.217083 -0.971962 0.0903619 + -1.95386 0.34866 1.51534 0.303079 -0.937723 0.169764 + -1.90111 0.374766 1.54132 0.321714 -0.936831 0.137285 + -2.04358 0.304913 1.25091 -0.408087 -0.912941 0.00203094 + -1.98685 0.299232 1.28975 0.583597 -0.804124 -0.113135 + -1.94801 0.344573 1.43782 0.417967 -0.900173 0.122445 + -2.10656 0.366408 1.0692 -0.619418 -0.784896 -0.0160926 + -2.04389 0.308428 1.16162 -0.165263 -0.976137 -0.140874 + -2.00195 0.314246 1.20675 0.46818 -0.863876 -0.18581 + -2.10102 0.361741 0.977082 -0.600154 -0.799549 -0.0231476 + -2.05899 0.323441 1.07862 -0.287557 -0.956446 -0.0502304 + -2.17633 0.417002 0.856766 -0.574413 -0.818565 -0.00089604 + -2.14088 0.392912 0.810892 -0.573654 -0.819044 0.00939378 + -2.0973 0.364427 0.890429 -0.593997 -0.804343 -0.0141689 + -2.13557 0.385806 0.720198 -0.454311 -0.884817 -0.103444 + -2.19283 0.513421 0.515565 -0.613024 -0.568446 -0.5487 + -2.28918 0.60205 0.568854 -0.744975 -0.480878 -0.462352 + -1.64886 0.328703 2.0401 -0.300308 -0.947308 -0.111459 + -1.5508 0.28849 2.07756 -0.417531 -0.896406 -0.148742 + -1.56516 0.281293 2.16402 -0.421362 -0.892018 -0.163578 + -1.48961 0.249849 2.09508 -0.498856 -0.852899 -0.153969 + -1.50396 0.242652 2.18155 -0.438085 -0.889565 -0.129441 + -1.57528 0.272073 2.23359 -0.416914 -0.904021 -0.0944887 + -1.58532 0.274212 2.32089 -0.414239 -0.909138 -0.0432954 + -1.42509 0.205372 2.11312 -0.552619 -0.830091 -0.0745739 + -1.43347 0.208092 2.21021 -0.466861 -0.88171 -0.0680356 + -1.52169 0.24162 2.28234 -0.431556 -0.901287 -0.0379507 + -1.53174 0.243759 2.36963 -0.375807 -0.925829 0.040131 + -1.59423 0.273517 2.39189 -0.362183 -0.931812 0.0234357 + -1.34864 0.1531 2.04626 -0.536426 -0.843531 -0.0265117 + -1.34554 0.158488 2.14013 -0.456358 -0.889265 0.0307576 + -1.35392 0.161294 2.23726 -0.422963 -0.905377 0.0373347 + -1.4512 0.206969 2.31095 -0.400125 -0.915105 0.0498191 + -1.45679 0.220878 2.40706 -0.333336 -0.934438 0.125353 + -1.33591 0.146628 1.97227 -0.52148 -0.851632 -0.052743 + -1.22032 0.103022 2.0614 -0.252562 -0.966088 -0.0537253 + -1.22021 0.101478 2.14847 -0.321263 -0.94675 0.0213059 + -1.21711 0.106865 2.24234 -0.342811 -0.938572 0.0395335 + -1.22545 0.112729 1.96998 -0.211424 -0.971177 -0.110067 + -1.02737 0.056695 2.24564 -0.164359 -0.98576 -0.0355564 + -1.02726 0.055147 2.33272 -0.192495 -0.981253 -0.00936353 + -1.02824 0.056105 2.41526 -0.227889 -0.973438 0.0220352 + -0.867153 0.039802 2.2227 -0.0501389 -0.99665 -0.064616 + -0.867964 0.035107 2.30703 -0.0566004 -0.996033 -0.068656 + -0.879902 0.028684 2.38955 -0.124479 -0.990823 -0.0526654 + -0.880885 0.029725 2.47215 -0.202916 -0.976444 -0.0733684 + -1.03752 0.060968 2.49944 -0.198429 -0.976019 -0.0895106 + -0.724318 0.045762 2.15937 0.0411721 -0.997937 -0.0492575 + -0.756667 0.040633 2.24066 0.0373009 -0.997558 -0.0590538 + -0.768605 0.034296 2.32323 -0.0148463 -0.988781 -0.148635 + -0.787987 0.016661 2.40498 -0.0765398 -0.986346 -0.145821 + -0.566167 0.059859 2.04836 0.095351 -0.995418 0.00718027 + -0.583467 0.056534 2.13152 0.0920215 -0.995314 -0.0296966 + -0.615817 0.051409 2.21279 0.0697268 -0.993691 -0.0878428 + -0.637802 0.036659 2.29194 0.0172544 -0.979085 -0.202718 + -0.4243 0.077633 2.05497 0.118094 -0.992988 -0.00533023 + -0.4416 0.074308 2.13813 0.0911641 -0.993795 -0.0637168 + -0.456349 0.065611 2.21919 0.0690841 -0.989662 -0.12568 + -0.478334 0.050861 2.29834 0.0362249 -0.963091 -0.266728 + -0.285543 0.092543 1.96235 0.082683 -0.99299 -0.0844699 + -0.291431 0.091702 2.046 0.0472788 -0.996903 -0.062845 + -0.301232 0.081181 2.12422 -0.00713135 -0.990435 -0.137798 + -0.315981 0.072491 2.20528 -0.0564023 -0.978318 -0.199279 + -0.280226 0.104435 1.88275 0.0850947 -0.984963 -0.150357 + -0.154552 0.107445 1.94174 0.130729 -0.981449 -0.140239 + -0.161487 0.095491 2.01744 0.0906738 -0.986474 -0.136554 + -0.171288 0.084975 2.09565 0.0223911 -0.979078 -0.202248 + -0.183179 0.063995 2.16679 -0.0165967 -0.964244 -0.264497 + -0.149236 0.119336 1.86214 0.144734 -0.970682 -0.191909 + -0.065459 0.122525 1.94562 0.333935 -0.934339 -0.12449 + -0.072394 0.110565 2.02133 0.332738 -0.928511 -0.16478 + -0.079232 0.091678 2.08985 0.304363 -0.929804 -0.206948 + -0.039051 0.157157 1.80163 0.364521 -0.907556 -0.208488 + -0.059663 0.134967 1.87326 0.331259 -0.92966 -0.161244 + -0.023052 0.142337 1.9765 0.252548 -0.958922 -0.129184 + -0.023052 0.132783 2.05185 0.240554 -0.952935 -0.184525 + -0.029889 0.113896 2.12036 0.33783 -0.907215 -0.250663 + -0.029835 0.176438 1.74344 0.509049 -0.819146 -0.264328 + -0.017255 0.16442 1.82885 0.265666 -0.945975 -0.185886 + -0.017255 0.15478 1.90415 0.244123 -0.960376 -0.134465 + 0.023052 0.142337 1.9765 -0.257471 -0.957182 -0.132328 + 0.023052 0.132783 2.05185 -0.243841 -0.954338 -0.172574 + -0.008039 0.211872 1.70326 0.273746 -0.921409 -0.275806 + -0.008039 0.183616 1.7706 0.275276 -0.912485 -0.302645 + 0.00804 0.183611 1.77061 -0.275861 -0.912252 -0.302816 + 0.017255 0.16442 1.82885 -0.252688 -0.950749 -0.179513 + 0.017255 0.15478 1.90415 -0.243275 -0.960318 -0.136405 + 0.00804 0.211867 1.70327 -0.273303 -0.921494 -0.275959 + 0.029836 0.176433 1.74344 -0.508916 -0.819128 -0.264638 + 0.039051 0.157157 1.80163 -0.364626 -0.908268 -0.205173 + 0.059663 0.134967 1.87326 -0.335117 -0.927885 -0.16348 + 0.065459 0.122525 1.94562 -0.333115 -0.93439 -0.126292 + 0.023071 0.214616 1.66891 -0.301299 -0.948176 -0.100904 + 0.044867 0.179094 1.70903 -0.402852 -0.866191 -0.295675 + 0.128624 0.141618 1.79055 -0.156189 -0.955816 -0.249038 + 0.149236 0.119336 1.86214 -0.127307 -0.969749 -0.208277 + 0.077389 0.188657 1.64287 -0.310978 -0.880171 -0.358597 + 0.172667 0.169411 1.65301 -0.111582 -0.9323 -0.344043 + 0.140145 0.15994 1.71921 -0.151988 -0.95824 -0.24223 + 0.289262 0.11663 1.80043 -0.104833 -0.972077 -0.209945 + 0.280227 0.104435 1.88275 -0.0934368 -0.982816 -0.15919 + 0.059101 0.223437 1.60503 -0.492994 -0.625485 -0.604753 + 0.113419 0.19954 1.59562 -0.266812 -0.844287 -0.464748 + 0.219097 0.192294 1.59817 -0.0519375 -0.979975 -0.19223 + 0.325697 0.165847 1.65678 0.0170248 -0.924096 -0.381781 + 0.300782 0.134952 1.72909 -0.0412717 -0.944205 -0.326763 + 0.016455 0.26198 1.61187 -0.33597 -0.439832 -0.832869 + 0.10875 0.245665 1.55153 -0.421674 -0.543614 -0.725724 + 0.185977 0.19434 1.55923 -0.212517 -0.883403 -0.417654 + 0.291654 0.187008 1.56173 0.0826667 -0.965876 -0.245459 + 0.372127 0.188644 1.6019 0.151304 -0.872841 -0.463957 + 0.066104 0.284205 1.55838 -0.622691 -0.326218 -0.711222 + 0.094316 0.306883 1.5237 -0.491361 -0.423392 -0.76112 + 0.172807 0.255556 1.517 -0.31558 -0.476786 -0.820418 + 0.250034 0.204145 1.52465 -0.117479 -0.764324 -0.63404 + 0.170386 0.315624 1.49316 -0.311988 -0.415864 -0.854237 + 0.248877 0.264298 1.48646 -0.26823 -0.470975 -0.840378 + 0.316714 0.227436 1.4939 -0.019341 -0.781214 -0.623964 + 0.411496 0.244192 1.49248 0.389863 -0.898825 -0.200303 + 0.344816 0.220906 1.52322 0.26835 -0.913575 -0.305565 + 0.099147 0.393027 1.47549 -0.178478 -0.571875 -0.80069 + 0.224866 0.336079 1.46153 -0.302939 -0.321099 -0.897287 + 0.311003 0.293472 1.45073 -0.2287 -0.433422 -0.871689 + 0.378839 0.25661 1.45817 0.00399699 -0.732972 -0.680247 + 0.214568 0.417707 1.45135 -0.175932 -0.405625 -0.896948 + 0.273208 0.382957 1.43094 -0.341688 -0.22859 -0.91159 + 0.359344 0.340435 1.42019 -0.313158 -0.371842 -0.87388 + 0.234373 0.595155 1.2896 0.00199342 -0.695913 -0.718123 + 0.280223 0.459798 1.41644 -0.229196 -0.456427 -0.859735 + 0.338862 0.425048 1.39603 -0.39924 -0.299754 -0.866461 + 0.404353 0.388668 1.38004 -0.383904 -0.36497 -0.848183 + 0.430531 0.290693 1.41134 -0.00866732 -0.74897 -0.662547 + 0.180778 0.941774 0.880636 0.0874276 -0.796584 -0.598172 + 0.288601 0.697477 1.20737 0.13617 -0.706496 -0.694494 + 0.284809 0.633355 1.24723 -0.0167387 -0.565796 -0.824375 + 0.330659 0.497998 1.37408 -0.296662 -0.512839 -0.805597 + 0.202299 1.02452 0.721508 -0.237914 -0.808776 -0.537846 + 0.1315 1.15639 0.566116 -0.683273 -0.674188 -0.280372 + 0.194623 1.1096 0.436545 -0.675886 -0.241239 -0.696407 + 0.224485 1.04294 0.438416 -0.60556 -0.420037 -0.675919 + 0.161362 1.08963 0.567937 -0.941146 -0.271414 -0.201444 + 0.202299 1.02452 0.721508 -0.881071 -0.357353 0.30986 + 0.166029 1.18089 0.455079 -0.604039 -0.362134 -0.709926 + 0.258117 1.16069 0.410469 -0.140426 -0.00502579 -0.990078 + 0.286711 1.0894 0.391936 -0.0190481 -0.0590518 -0.998073 + 0.312808 1.02384 0.415092 0.0412183 -0.413174 -0.909719 + 0.248556 0.979544 0.481017 -0.514629 -0.534366 -0.67053 + 0.21948 1.22669 0.410138 -0.111188 -0.156652 -0.981375 + 0.35818 1.15829 0.413422 0.201108 -0.118426 -0.972384 + 0.390198 1.08755 0.441946 0.384308 -0.126856 -0.914448 + 0.416295 1.0219 0.465053 0.410432 -0.317729 -0.854748 + 0.319542 1.22421 0.413041 0.165406 0.183347 -0.969033 + 0.4343 1.19784 0.443514 0.384609 0.101531 -0.917479 + 0.466318 1.12702 0.471987 0.364306 -0.134856 -0.921463 + 0.508152 1.07115 0.493346 0.414522 -0.272607 -0.868249 + 0.44088 0.967001 0.506741 0.418383 -0.49861 -0.759173 + 0.368359 1.32276 0.466147 0.296338 0.350691 -0.888369 + 0.40419 1.26275 0.450692 0.37819 0.34222 -0.86015 + 0.489019 1.27485 0.512728 0.195126 0.447301 -0.872839 + 0.520361 1.21793 0.473514 0.304285 0.210338 -0.929069 + 0.562195 1.16198 0.494822 0.465224 -0.0802301 -0.881549 + 0.337539 1.38741 0.477972 0.094197 0.434565 -0.895701 + 0.430147 1.4069 0.519008 0.423498 0.262598 -0.867001 + 0.458909 1.33976 0.519908 0.437379 0.280545 -0.854397 + 0.536813 1.37039 0.559051 0.0712872 0.434187 -0.897998 + 0.568156 1.31347 0.519837 0.248883 0.375791 -0.892658 + 0.399327 1.47155 0.530832 0.29048 0.1643 -0.94267 + 0.494464 1.51771 0.586891 0.48701 0.173572 -0.855975 + 0.523226 1.45056 0.587791 0.351529 0.285556 -0.891563 + 0.609086 1.49934 0.623102 0.358834 0.284674 -0.888931 + 0.470813 1.59102 0.579113 0.677248 -0.0090501 -0.735699 + 0.560694 1.66274 0.668891 0.346754 0.156162 -0.924865 + 0.595499 1.57951 0.651842 0.130183 0.301985 -0.944382 + 0.537043 1.73605 0.661113 0.489452 -0.183572 -0.852489 + 0.63287 1.72467 0.683221 -0.220073 -0.242601 -0.944835 + 0.667675 1.64153 0.666221 -0.168833 0.0794248 -0.982439 + 0.570279 1.82633 0.611337 -0.200123 -0.601636 -0.773295 + 0.614016 1.77037 0.660667 -0.208448 -0.636527 -0.742552 + 0.765247 1.66905 0.611151 -0.342337 -0.4768 -0.809609 + 0.819324 1.64323 0.607476 0.00663408 -0.706049 -0.708132 + 0.721752 1.61571 0.662546 0.0554567 -0.602927 -0.795867 + 0.544721 1.8913 0.575008 -0.270023 -0.387148 -0.881592 + 0.676006 1.77051 0.564613 -0.42849 -0.691888 -0.581109 + 0.746393 1.71475 0.588597 -0.377476 -0.592926 -0.711302 + 0.907269 1.77161 0.505114 0.119378 -0.583327 -0.803417 + 0.895425 1.6969 0.571711 0.228782 -0.725119 -0.649508 + 0.650448 1.83548 0.528282 -0.454389 -0.500496 -0.736909 + 0.836882 1.82746 0.481179 -0.0777549 -0.654659 -0.751914 + 1.08955 1.96145 0.43531 0.388775 -0.706283 -0.591623 + 1.02369 1.81801 0.518748 -0.557543 0.243408 -0.793661 + 0.833391 1.94058 0.379053 -0.226783 -0.656655 -0.719287 + 0.815929 1.8798 0.41873 -0.190316 -0.630613 -0.752401 + 1.05697 1.97337 0.346654 0.442259 -0.750163 -0.491592 + 0.810344 1.97817 0.320542 -0.246073 -0.765187 -0.594926 + 0.981624 2.07298 0.222127 0.163624 -0.758487 -0.630813 + 1.03601 2.02571 0.284205 0.150126 -0.724684 -0.672529 + 1.10585 2.12196 0.209687 0.660096 -0.396582 -0.637963 + 1.13428 2.12922 0.259715 0.882049 -0.226791 -0.412984 + 0.958577 2.11066 0.163666 0.343393 -0.87323 -0.345759 + 1.05147 2.16932 0.147664 0.741189 -0.418469 -0.524902 + 1.05384 2.25235 0.14565 0.840021 -0.357247 -0.408338 + 1.08226 2.25953 0.195622 0.842923 -0.32878 -0.425892 + 0.922802 2.10901 0.085129 0.0690286 -0.949442 -0.306259 + 1.02166 2.1516 0.03576 0.735983 -0.668118 -0.109302 + 1.03372 2.19214 0.092341 0.979928 -0.0173254 -0.198597 + 1.18729 2.0375 0.396588 0.11454 -0.51983 -0.846556 + 1.16686 2.1173 0.348371 0.604834 -0.408006 -0.683891 + 1.19065 2.1133 0.362098 0.415425 -0.374356 -0.829023 + 1.14683 2.27224 0.275606 -0.251369 -0.703331 -0.664935 + 1.12304 2.27624 0.261878 0.518217 -0.639739 -0.567614 + 1.17763 2.27532 0.212466 -0.466835 -0.86589 -0.179719 + 1.18686 2.17753 0.247647 -0.923615 -0.216732 -0.316169 + 1.19065 2.1133 0.362098 -0.99948 -0.00159498 0.0322018 + 1.1835 2.10173 0.282136 -0.975206 0.190751 -0.112197 + 1.09759 2.3003 0.121208 0.319193 -0.947526 -0.0176331 + 1.13837 2.31692 0.187409 -0.0712604 -0.976293 -0.204385 + 1.19122 2.27081 0.18087 -0.696198 -0.715946 -0.05225 + 1.31347 2.12724 0.109754 -0.793508 -0.28562 -0.53737 + 1.21766 2.18061 0.184504 -0.765389 -0.119618 -0.632354 + 1.07871 2.29808 0.057635 0.297169 -0.94411 0.142642 + 1.19219 2.27055 0.073518 -0.564576 -0.798629 -0.208438 + 1.21979 2.20679 0.063957 -0.756811 -0.543957 -0.362418 + 1.27264 2.16069 0.057417 -0.641701 -0.744126 -0.185731 + 1.32705 2.12282 0.078207 -0.703711 -0.633417 -0.321828 + 1.0361 2.27517 0.090327 0.763837 -0.624206 -0.164072 + 1.0774 2.23681 -0.044033 0.620122 -0.757082 0.20561 + 1.1697 2.29075 -0.059863 0.207982 -0.969606 -0.128869 + 1.17331 2.26835 0.009938 -0.173367 -0.977501 -0.120148 + 1.03478 2.21398 -0.011292 0.862466 -0.467678 0.193468 + 1.02272 2.17335 -0.067922 0.805969 -0.584621 0.0929153 + 1.03829 2.21156 -0.143494 0.865686 -0.486219 -0.119077 + 1.07955 2.24064 -0.106867 0.58024 -0.801442 -0.144955 + 1.08053 2.27656 -0.209287 0.652902 -0.643199 -0.400017 + 1.12179 2.30564 -0.172649 0.512942 -0.728268 -0.454441 + 1.17186 2.29449 -0.122738 0.43716 -0.854415 -0.280829 + 1.22873 2.32785 -0.137321 0.168746 -0.879145 -0.445678 + 1.27338 2.29774 -0.092373 -0.0457302 -0.865845 -0.498218 + 1.06901 2.33969 -0.284824 0.678377 -0.47301 -0.562197 + 1.12 2.34824 -0.23243 0.539317 -0.683937 -0.491291 + 1.17866 2.339 -0.187233 0.356476 -0.702752 -0.615682 + 1.30396 2.34659 -0.149771 0.0614656 -0.782636 -0.619438 + 1.3486 2.31648 -0.104823 -0.0978227 -0.653546 -0.750538 + 1.01663 2.3143 -0.349446 0.951981 -0.210593 -0.22222 + 1.03503 2.35088 -0.329403 0.815209 -0.303388 -0.493346 + 1.11506 2.38959 -0.271264 0.468928 -0.602128 -0.64618 + 1.18011 2.38412 -0.225178 0.373677 -0.721976 -0.582337 + 1.23876 2.37488 -0.179972 0.212932 -0.626427 -0.749833 + 1.02405 2.3753 -0.403114 0.918254 -0.253542 -0.304181 + 1.04244 2.41197 -0.383019 0.765658 -0.543893 -0.343436 + 1.08108 2.40086 -0.315784 0.531257 -0.658405 -0.533169 + 1.14067 2.43669 -0.342226 0.226085 -0.885337 -0.40628 + 0.989653 2.23551 -0.440186 0.936124 -0.103942 -0.335957 + 1.00614 2.35642 -0.447203 0.887363 -0.0667328 -0.456216 + 0.98841 2.44837 -0.48127 0.649857 -0.398456 -0.647239 + 1.04836 2.45826 -0.454405 0.323119 -0.802898 -0.500947 + 1.087 2.44716 -0.387179 0.2938 -0.87552 -0.383597 + 0.964875 2.1885 -0.493562 0.910786 -0.0428506 -0.410649 + 0.961205 2.32061 -0.501179 0.840011 -0.0187463 -0.542245 + 0.943474 2.41256 -0.535247 0.749377 -0.0817093 -0.657083 + 0.960257 2.50357 -0.553484 0.479821 -0.380069 -0.790772 + 1.02021 2.51347 -0.526628 -0.0167753 -0.797881 -0.602581 + 0.963816 2.07556 -0.479939 0.928115 -0.193392 -0.318122 + 0.940043 2.06386 -0.530873 0.954931 -0.151602 -0.255193 + 0.939814 2.13853 -0.546399 0.95328 -0.025994 -0.300968 + 0.936145 2.27055 -0.554076 0.878685 0.0654387 -0.472895 + 0.948408 2.01676 -0.468093 0.903603 -0.298642 -0.307108 + 0.924635 2.00506 -0.519026 0.394429 -0.91787 0.0440384 + 0.927308 2.01413 -0.587145 0.903983 -0.407302 -0.130075 + 0.927079 2.0888 -0.602681 0.977534 0.0101431 -0.210532 + 0.917013 2.20864 -0.606034 0.905177 0.136502 -0.40252 + 0.879951 2.30643 -0.635612 0.803202 0.237296 -0.546404 + 0.899083 2.36834 -0.583653 0.759423 0.123513 -0.638765 + 0.915514 2.00015 -0.555323 0.67694 -0.732603 -0.0710247 + 0.918187 2.00922 -0.623443 0.99943 -0.0337012 -0.00200876 + 0.92031 2.03058 -0.651237 0.999368 0.0300102 0.0190617 + 0.910244 2.15041 -0.65459 0.937828 0.171801 -0.301602 + 0.867467 2.24817 -0.685917 0.809552 0.305848 -0.501082 + 0.802804 2.38658 -0.687645 0.702115 0.288865 -0.650839 + 0.843523 2.4329 -0.634069 0.684831 0.18255 -0.705465 + 0.927469 1.96604 -0.682646 0.997563 0.0666929 -0.0205148 + 0.910018 2.0829 -0.703454 0.939819 0.193352 -0.281702 + 0.867241 2.18075 -0.73473 0.857674 0.340548 -0.385255 + 0.790321 2.32833 -0.73795 0.788343 0.389661 -0.476108 + 0.724965 2.45691 -0.737052 0.73263 0.406756 -0.545712 + 0.925346 1.94468 -0.654843 0.995348 0.00755878 0.0960458 + 0.928663 1.90521 -0.720078 0.978418 -0.199941 0.0521718 + 0.911212 2.02207 -0.740895 0.965652 0.195 -0.171732 + 0.87809 2.11465 -0.780856 0.893804 0.336039 -0.296971 + 0.797996 2.26779 -0.788689 0.827154 0.412986 -0.38113 + 0.915514 2.00015 -0.555323 0.995032 0.0858065 0.050475 + 0.920946 1.88997 -0.719496 0.859532 -0.424604 0.284458 + 0.914712 1.86018 -0.745692 0.941118 -0.259361 0.216859 + 0.922179 1.95121 -0.784367 0.988399 0.142361 -0.0529256 + 0.889057 2.0438 -0.824337 0.91589 0.335957 -0.219723 + 0.808844 2.2017 -0.834823 0.8605 0.426274 -0.278981 + 0.742346 2.33211 -0.841297 0.871273 0.430974 -0.234829 + 0.906995 1.84494 -0.745102 0.843147 -0.274478 0.462347 + 0.919515 1.81725 -0.779344 0.959868 0.0716058 0.271157 + 0.926982 1.90829 -0.818027 0.993211 0.11242 0.0298957 + 0.908131 1.97388 -0.863228 0.929556 0.294501 -0.221798 + 0.834284 2.13524 -0.87711 0.889457 0.411568 -0.198689 + 0.919099 1.77531 -0.757695 0.906247 0.289663 0.307916 + 0.939316 1.83324 -0.851034 0.993216 0.116079 0.00686109 + 0.920465 1.89883 -0.896237 0.959648 0.2734 -0.0657916 + 0.853357 2.06532 -0.916001 0.910547 0.388286 -0.14191 + 0.794945 2.19464 -0.931195 0.904049 0.418535 -0.0867431 + 0.769505 2.2611 -0.8889 0.896928 0.42444 -0.123978 + 0.9389 1.79129 -0.829378 0.967886 0.120559 0.220597 + 0.927778 1.73612 -0.733014 0.859051 0.395155 0.325397 + 0.825763 2.12504 -0.97444 0.914092 0.405114 -0.017842 + 0.782328 2.22055 -0.986063 0.929348 0.23474 0.284974 + 0.750241 2.29266 -0.940374 0.941732 0.232421 0.243149 + 0.723081 2.36367 -0.89277 0.939013 0.244247 0.242068 + 0.776281 2.32164 -0.982164 0.597743 -0.176709 0.78197 + 0.744194 2.39376 -0.936474 0.768441 -0.113274 0.629815 + 0.723281 2.4607 -0.894831 0.728022 -0.132818 0.672565 + 0.683658 2.44041 -0.844285 0.960032 0.245488 0.134442 + 0.753678 2.58589 -0.879656 0.487133 -0.273232 0.829485 + 0.732765 2.65292 -0.837963 0.984934 -0.161452 0.0619613 + 0.762104 2.73531 -0.789264 0.728586 -0.471099 0.49722 + 0.683857 2.53744 -0.846346 0.808967 -0.215405 0.546967 + 0.825749 2.68506 -0.875424 0.371184 -0.287287 0.882999 + 0.813222 2.77682 -0.837363 0.615377 -0.42938 0.661018 + 0.842561 2.85913 -0.788723 0.748743 -0.554919 0.362558 + 0.87879 2.93189 -0.743953 0.694823 -0.718947 0.0183238 + 0.761325 2.80318 -0.738623 0.889461 -0.424716 -0.168745 + 0.946305 2.78767 -0.892355 0.491148 -0.233846 0.8391 + 0.917374 2.89238 -0.852317 0.596918 -0.454373 0.661236 + 0.953604 2.96515 -0.807556 0.55331 -0.751557 0.359179 + 1.05152 2.81816 -0.962764 0.617008 -0.165531 0.76935 + 1.02259 2.92278 -0.922776 0.605181 -0.394181 0.691648 + 1.0671 2.99456 -0.889893 0.509886 -0.741533 0.436055 + 1.02738 3.01237 -0.781739 0.288641 -0.957141 -0.0238343 + 1.14171 2.95065 -1.01444 0.594889 -0.414362 0.688775 + 1.18623 3.02234 -0.981609 0.400739 -0.804318 0.438725 + 1.14088 3.04178 -0.864075 0.278975 -0.957474 0.0736036 + 1.11456 3.01479 -0.772534 -0.128487 -0.875975 -0.464928 + 0.953552 2.97745 -0.695252 0.352744 -0.709932 -0.609564 + 1.27766 2.83913 -1.15248 0.595693 -0.258769 0.760387 + 1.26369 2.93221 -1.11991 0.538965 -0.36915 0.757129 + 1.33436 3.02223 -1.09923 0.374899 -0.757695 0.53418 + 1.30841 3.06147 -0.932784 0.199208 -0.97344 0.112829 + 1.49484 2.94614 -1.23203 0.431399 -0.450109 0.781855 + 1.60459 3.09642 -1.22012 0.46498 -0.637982 0.613818 + 1.45654 3.06128 -1.05046 0.380886 -0.87477 0.299507 + 1.65571 2.9089 -1.34153 0.402663 -0.434872 0.805449 + 1.76546 3.0591 -1.32967 0.273189 -0.5078 0.817011 + 1.69808 3.18616 -1.16996 0.451621 -0.749236 0.484443 + 1.55002 3.15102 -1.0003 0.545271 -0.778457 0.310942 + 1.61261 2.75404 -1.41731 0.335411 -0.520052 0.785522 + 1.8538 2.85272 -1.45663 -0.00908349 -0.450488 0.892736 + 1.9202 3.02836 -1.35684 -0.141619 -0.448079 0.882706 + 1.99461 3.17363 -1.27045 -0.0990468 -0.535452 0.838738 + 1.83988 3.20445 -1.24323 0.20631 -0.689934 0.69385 + 1.6553 2.55664 -1.57659 0.200426 -0.611083 0.765772 + 1.7895 2.54952 -1.59947 -0.0247822 -0.543034 0.839345 + 1.81071 2.69787 -1.53241 0.0930443 -0.437005 0.894634 + 1.98412 2.60123 -1.53762 -0.416579 -0.37579 0.827794 + 2.0451 2.73408 -1.42993 -0.499449 -0.334107 0.799327 + 1.65389 2.43073 -1.67692 0.0984026 -0.720387 0.686557 + 1.78809 2.42361 -1.69979 -0.0579976 -0.613869 0.787274 + 1.91434 2.40472 -1.67626 -0.369532 -0.597193 0.711904 + 1.96291 2.45279 -1.60472 -0.393898 -0.47166 0.788911 + 1.62473 2.36295 -1.77831 0.0484259 -0.900565 0.432015 + 1.79798 2.36518 -1.74398 -0.129398 -0.833912 0.536514 + 1.92422 2.34637 -1.7204 -0.339189 -0.744819 0.574626 + 2.04766 2.31797 -1.64221 -0.368673 -0.738629 0.564365 + 2.09623 2.36604 -1.57067 -0.602334 -0.510557 0.613617 + 1.65265 2.34347 -1.83677 0.130695 -0.990335 0.0464219 + 1.82591 2.34578 -1.80238 -0.0669262 -0.994633 -0.0789024 + 1.95638 2.32169 -1.74666 -0.248998 -0.968228 -0.0231163 + 2.07981 2.29329 -1.66846 -0.462743 -0.781348 0.418765 + 1.50851 2.3155 -1.86953 0.405143 -0.898496 0.169011 + 1.73092 2.37115 -1.88572 0.13724 -0.857311 -0.496168 + 1.86741 2.36285 -1.84754 0.0661882 -0.867166 -0.493601 + 1.99788 2.33885 -1.79177 -0.0445374 -0.841804 -0.537942 + 2.0843 2.27043 -1.71266 -0.227093 -0.959056 -0.169234 + 1.58678 2.34309 -1.91852 0.29018 -0.803058 -0.520474 + 1.62731 2.40409 -1.94996 0.152462 -0.552871 -0.8192 + 1.781 2.40746 -1.9224 0.155324 -0.70291 -0.694113 + 1.91748 2.39915 -1.88422 0.193242 -0.633388 -0.749318 + 2.02626 2.35974 -1.81995 0.190851 -0.658213 -0.728239 + 1.42789 2.30996 -1.94454 0.365639 -0.567879 -0.737442 + 1.46842 2.37095 -1.97597 0.247474 -0.328742 -0.911419 + 1.49287 2.45738 -1.97767 0.159663 -0.138554 -0.9774 + 1.66729 2.45157 -1.98061 0.0760049 -0.35324 -0.93244 + 1.82098 2.45494 -1.95305 0.24581 -0.39973 -0.883059 + 1.33128 2.23969 -1.97442 0.638914 -0.433309 -0.635635 + 1.33576 2.3177 -2.00015 0.510398 -0.249068 -0.823079 + 1.36021 2.40413 -2.00185 0.223148 -0.0276724 -0.974392 + 1.53882 2.55361 -1.98375 0.0424011 -0.0418811 -0.998222 + 1.71324 2.5478 -1.98668 0.104952 -0.049717 -0.993234 + 1.25368 2.22285 -2.03966 0.497939 -0.106475 -0.860651 + 1.23734 2.32035 -2.03313 0.301296 0.0518492 -0.95212 + 1.25312 2.43435 -2.02718 0.262671 0.0598724 -0.963026 + 1.37599 2.51822 -1.99585 0.20468 -0.053114 -0.977387 + 1.59413 2.68402 -1.98483 0.0373841 0.0674627 -0.997021 + 1.19226 2.17559 -2.0672 0.601184 0.120441 -0.789982 + 1.17591 2.27308 -2.06065 0.473602 0.0994598 -0.875105 + 1.14108 2.34184 -2.07636 0.518574 0.0935959 -0.849894 + 1.247 2.56125 -2.01139 0.190673 0.0908362 -0.977442 + 1.4313 2.64864 -1.99694 0.082035 0.0206508 -0.996415 + 1.13496 2.46875 -2.06056 0.43331 0.14307 -0.889816 + 1.24444 2.67947 -2.00494 0.0962112 0.107172 -0.989574 + 1.42874 2.76685 -1.99049 0.0697176 0.0429018 -0.996644 + 1.63719 2.8068 -1.96728 0.0934946 0.133542 -0.986623 + 1.75757 2.67228 -1.98008 0.129854 0.0505806 -0.990242 + 1.03319 2.31833 -2.16724 0.60999 0.191388 -0.76895 + 0.996497 2.4102 -2.17036 0.660312 0.207757 -0.721682 + 1.09827 2.56071 -2.06364 0.416426 0.204381 -0.885899 + 0.944732 2.3707 -2.24494 0.850122 0.222017 -0.477494 + 0.986048 2.65546 -2.10375 0.65528 0.197438 -0.729127 + 1.00064 2.76627 -2.06269 0.641548 0.199214 -0.740763 + 1.11286 2.67152 -2.02258 0.301432 0.261851 -0.916827 + 0.956106 2.22434 -2.34064 0.886879 0.336654 -0.316401 + 0.891187 2.40223 -2.36215 0.887693 0.261349 -0.379075 + 0.934283 2.61586 -2.17837 0.808235 0.184166 -0.55932 + 0.975073 2.89702 -2.06695 0.80162 0.0435633 -0.596244 + 0.979776 2.03034 -2.56122 0.892278 0.383864 -0.237672 + 0.902561 2.25588 -2.45786 0.942154 0.269055 -0.199891 + 1.01974 1.93892 -2.55027 0.927369 0.298454 -0.225638 + 0.99941 1.89818 -2.6767 0.931517 0.290391 -0.218971 + 0.980083 1.97465 -2.65517 0.926274 0.326345 -0.188453 + 0.902867 2.20019 -2.5518 0.867913 0.40967 -0.280888 + 0.927778 1.73612 -0.733014 0.982974 0.0857146 0.162528 + 0.509794 2.09676 -0.93526 -0.995136 -0.0926188 0.0335534 + 0.536853 1.93903 -0.89247 -0.976427 -0.130032 0.172286 + 0.557887 1.87741 -0.816744 -0.982702 -0.142523 0.118253 + 0.544984 1.96833 -0.804808 -0.982382 -0.149969 0.111508 + 0.546724 1.84212 -0.915617 -0.973415 -0.176739 0.145692 + 0.567759 1.7805 -0.83989 -0.981761 -0.131877 0.136946 + 0.572445 1.81332 -0.755521 -0.977391 -0.160809 0.137288 + 0.534472 1.87048 -0.966136 -0.95337 -0.223907 0.202362 + 0.565725 1.7357 -0.938079 -0.991994 -0.100695 0.0762124 + 0.584067 1.72863 -0.796446 -0.971245 -0.148662 0.185966 + 0.522692 1.81068 -1.02855 -0.920148 -0.237118 0.311613 + 0.553473 1.76406 -0.988607 -0.948559 -0.222105 0.225623 + 0.52323 1.74945 -1.08691 -0.955974 -0.247696 0.157356 + 0.554011 1.70283 -1.04696 -0.943987 -0.18619 0.272435 + 0.532253 1.62568 -1.14653 -0.992083 -0.125579 0.0011034 + 0.542243 1.62171 -1.22585 -0.779024 -0.341375 -0.525913 + 0.50379 1.84717 -1.33935 0.121064 0.0314344 -0.992147 + 0.516746 1.9941 -1.29365 0.16402 -0.00232964 -0.986454 + 0.531356 2.07762 -1.31671 -0.202793 -0.227498 -0.952428 + 0.4273 1.85751 -1.34046 0.027498 -0.123479 -0.991966 + 0.427977 1.80321 -1.32542 -0.102736 -0.26681 -0.958258 + 0.307145 1.88639 -1.30329 -0.553259 -0.732472 -0.396724 + 0.590096 1.7375 -0.728603 -0.843983 -0.360656 0.397015 + 0.698828 2.11859 0.213736 0.561962 -0.240564 0.791408 + 0.813747 2.21001 0.167185 0.653596 -0.725447 0.215729 + 0.695469 2.2415 0.283044 0.290899 -0.953211 0.0822541 + 0.800807 2.16729 0.143582 0.607242 -0.146729 0.780851 + 0.833698 2.22428 -0.017537 0.954621 -0.287115 -0.0791371 + 0.848062 2.25593 0.053241 0.880113 -0.473604 0.0331692 + 0.820451 2.25574 -0.240823 0.967446 -0.236273 -0.0906826 + 0.779985 2.29664 -0.306655 0.956183 -0.287545 -0.0550654 + 0.776758 2.28597 -0.306972 0.968082 -0.19913 -0.152197 + 0.793378 2.25035 -0.483283 0.94545 -0.290324 0.147773 + 0.796669 2.22433 -0.213417 0.947011 -0.135195 -0.291364 + 0.698168 2.24505 -0.487516 0.871803 -0.482344 -0.0854645 + 0.66343 2.1034 -0.771961 0.850608 -0.481138 0.212067 + 0.690579 2.04601 -0.869965 0.530727 -0.599501 0.599105 + 0.775351 1.95469 -0.938787 -0.535531 -0.562834 0.629622 + 0.652101 2.00956 -0.770023 0.994828 -0.0958681 0.0335539 + 0.65719 1.99449 -0.872528 0.917711 -0.294289 0.266834 + 0.721707 1.96762 -0.977374 0.0359111 -0.684208 0.728403 + 0.763463 1.84218 -1.03071 -0.548072 -0.408358 0.729973 + 0.854714 1.6674 -0.986595 -0.874925 -0.476245 0.0877331 + 0.656367 1.90801 -0.744739 0.998217 -0.05561 0.0216843 + 0.661456 1.89294 -0.847236 0.998215 -0.0245201 0.0544646 + 0.688318 1.91609 -0.979938 0.791239 -0.269277 0.549027 + 0.723897 1.85084 -1.04911 0.281007 -0.228072 0.932211 + 0.641212 1.80309 -0.633011 0.975034 -0.211814 -0.0666538 + 0.588889 1.81998 -0.669658 0.82384 -0.0340243 0.5658 + 0.901206 1.61571 -1.00085 -0.693109 -0.685132 0.224039 + 0.837016 1.7382 -1.03661 -0.749239 -0.647207 0.140586 + 0.901206 1.61571 -1.00085 -0.715932 -0.513342 -0.473204 + 0.757834 2.14915 0.186202 -0.425153 0.00538387 -0.905105 + -1.17764 2.27532 0.212466 0.843377 -0.296139 -0.44835 + -1.31347 2.12724 0.109754 0.793546 -0.285467 -0.537395 + -1.33453 2.06406 0.095774 0.606277 -0.214905 -0.765666 + -1.30196 1.97625 0.143271 0.467733 -0.51259 -0.720054 + -1.39275 1.95991 0.121567 0.251253 -0.663219 -0.704991 + -1.21767 2.18061 0.184507 0.765395 -0.119622 -0.632346 + -1.31516 1.94747 0.173919 -0.0441729 -0.69767 -0.715056 + -1.18685 2.17753 0.247647 0.923516 -0.216905 -0.316341 + -1.19064 2.1133 0.362099 0.999487 -0.00202297 0.0319622 + -1.18731 2.03749 0.39659 0.788496 0.538188 0.297704 + -1.02369 1.81801 0.51875 0.769241 0.630648 0.102723 + -0.748335 1.58493 -1.27294 -0.139546 0.986449 -0.086292 + -0.748272 1.58103 -1.31759 -0.185898 0.978822 -0.0857284 + -0.711105 1.59853 -1.28851 -0.687442 0.724761 -0.0463128 + -0.711042 1.59463 -1.33315 -0.839139 0.541748 -0.0485361 + -0.699505 1.64767 -1.36081 -0.954206 0.293462 0.0580593 + -0.697709 1.64323 -1.30433 -0.948507 0.311161 0.059277 + -0.686108 1.69237 -1.37664 -0.928851 0.353046 0.112224 + -0.692772 1.67708 -1.37616 -0.851335 0.382325 0.359245 + -0.636581 1.83901 -1.44743 -0.928226 0.359568 0.0954311 + -0.220308 2.03334 -3.02461 -0.0801513 -0.938798 -0.335013 + -0.261303 1.99187 -2.98179 -0.187502 0.265591 -0.945677 + -0.284575 2.00426 -2.96885 -0.568285 -0.248324 -0.784466 + -0.199306 2.0285 -3.02623 0.045883 -0.866926 -0.49632 + -0.240301 1.98703 -2.9834 0.0570533 -0.00749639 -0.998343 + -0.263765 1.97714 -2.99568 0.119604 0.938579 -0.323671 + -0.28691 1.98164 -2.99787 0.221935 0.934964 -0.276743 + -0.284575 2.00426 -2.96885 0.0737328 0.783795 -0.616627 + -0.310183 1.99395 -2.98499 0.176062 0.959149 -0.221438 + -0.173526 2.0323 -3.02582 -0.133698 -0.964241 -0.228831 + -0.201346 1.98642 -2.97515 0.0163988 0.130809 -0.991272 + -0.22481 1.97654 -2.98743 0.0130636 0.940518 -0.339493 + -0.231446 2.02897 -3.02385 0.407855 -0.903828 -0.129423 + -0.306462 1.97626 -2.97875 0.483915 -0.866438 0.122931 + -0.284575 2.00426 -2.96885 0.366653 -0.928229 -0.0628972 + -0.295713 1.99981 -2.96814 0.652643 -0.62387 0.429933 + -0.320303 1.98989 -2.94595 0.796372 0.0261013 0.604244 + -0.331051 1.96634 -2.95656 0.0622725 -0.929419 0.363734 + -0.350253 1.97577 -2.9623 -0.583802 -0.743936 0.32517 + -0.39796 2.02379 -2.97147 -0.488138 -0.872068 0.0348973 + -0.328944 1.99242 -2.93294 0.649816 -0.538453 0.536477 + -0.328944 1.99242 -2.93294 -0.479139 -0.567698 0.669435 + -0.348145 2.00185 -2.93868 -0.745905 -0.657938 0.103655 + -0.356668 2.00434 -2.92579 -0.528691 -0.481318 -0.699156 + -0.384464 1.98607 -2.91054 -0.263055 -0.0453457 -0.963715 + -0.406745 1.97654 -2.90444 0.132234 -0.729845 -0.670702 + -0.343375 1.99505 -2.9427 -0.310433 0.919121 -0.242588 + -0.371171 1.97686 -2.92739 -0.5188 0.766889 -0.377794 + -0.397431 1.96752 -2.926 -0.320649 0.923092 -0.212335 + -0.406745 1.97654 -2.90444 -0.373183 0.765303 -0.524448 + -0.423478 1.96208 -2.9154 -0.262391 0.919116 -0.293898 + -0.44583 1.96623 -2.90117 0.0398298 0.040284 -0.998394 + -0.3657 1.98304 -2.9843 -0.421775 0.906457 0.0210142 + -0.391961 1.97369 -2.9829 -0.274839 0.958352 0.0776163 + -0.436121 1.96423 -2.9789 -0.185733 0.979741 0.0749052 + -0.462167 1.9588 -2.9683 -0.107238 0.990077 0.0908189 + -0.462562 1.95177 -2.91213 -0.169802 0.837056 -0.520101 + -0.346889 1.99167 -3.01484 -0.431965 0.897309 -0.0907949 + -0.329296 2.00112 -2.94802 0.155097 0.954334 0.255325 + -0.33281 1.99774 -3.02016 -0.15277 0.971756 -0.179863 + -0.322338 1.99302 -3.04417 0.20789 0.978012 -0.016584 + -0.328944 1.99242 -2.93294 0.0265057 0.974311 0.223643 + -0.348145 2.00185 -2.93868 0.494962 0.672361 -0.550403 + -0.477678 1.9723 -2.91668 0.0749566 -0.666881 -0.741385 + -0.504744 1.95583 -2.89736 -0.102313 -0.786442 -0.609132 + -0.484424 1.94554 -2.89294 -0.26841 -0.643287 -0.717034 + -0.52042 1.93869 -2.87167 -0.247113 -0.751105 -0.61219 + -0.54074 1.94898 -2.8761 -0.210205 -0.847566 -0.487284 + -0.573469 1.94957 -2.85811 -0.305937 -0.909683 -0.280856 + -0.614905 1.97986 -2.91918 -0.288926 -0.901819 -0.321317 + -0.534839 1.92882 -2.85178 -0.180211 -0.946202 -0.26875 + -0.558772 1.93836 -2.83091 -0.386603 -0.913903 -0.12377 + -0.642788 1.97122 -2.85022 -0.298621 -0.904674 -0.303957 + -0.532448 1.92559 -2.83099 -0.948828 -0.290266 -0.124383 + -0.556381 1.93513 -2.81012 -0.433795 -0.829294 -0.352268 + -0.628091 1.96002 -2.82302 -0.0925388 -0.917999 -0.385634 + -0.175566 1.99014 -2.97479 0.120543 -0.767637 -0.629447 + -0.136983 2.00247 -2.98235 -0.245385 -0.883166 -0.399754 + -0.128457 1.99899 -2.99252 -0.691513 -0.559645 0.456735 + -0.165001 2.02874 -3.03604 -0.37203 -0.914019 -0.16175 + -0.141836 1.9697 -3.01698 -0.780814 -0.624578 0.0152173 + -0.122047 1.95724 -3.0106 0.074926 -0.997181 0.00405767 + -0.108668 1.98654 -2.98615 -0.502205 -0.407388 0.762774 + -0.156423 2.02915 -3.04175 -0.116466 -0.596074 -0.794438 + -0.133259 1.97002 -3.02274 -0.0161232 -0.519196 -0.854503 + -0.082769 1.99305 -3.00163 0.425325 -0.744893 -0.514035 + -0.108668 1.98654 -2.98615 0.495081 -0.678801 0.542331 + -0.175985 2.10943 -3.08141 -0.278335 -0.390708 -0.877426 + -0.150816 2.0951 -3.08878 -0.523344 -0.335971 -0.783093 + -0.132025 2.07441 -3.09614 -0.524532 -0.425441 -0.737473 + -0.123316 2.05662 -3.08433 -0.260741 -0.778195 -0.571338 + -0.133336 2.04513 -3.05403 0.18847 -0.879113 -0.437768 + -0.093982 2.00583 -3.01377 0.0960676 -0.528986 -0.843176 + -0.185473 2.19701 -3.11309 -0.204291 -0.571278 -0.794925 + -0.140105 2.18376 -3.12234 -0.396297 -0.501788 -0.768868 + -0.114936 2.16933 -3.12975 -0.540457 -0.385614 -0.747802 + -0.083959 2.13644 -3.14199 -0.599683 -0.300588 -0.741639 + -0.065169 2.11575 -3.14936 -0.595133 -0.265103 -0.758641 + -0.217725 2.19464 -3.10718 0.00753708 -0.589024 -0.80808 + -0.182079 2.23311 -3.15402 -0.14078 -0.881711 -0.450296 + -0.136711 2.21986 -3.16327 -0.38733 -0.796874 -0.463646 + -0.238982 2.22262 -3.14485 0.191657 -0.861874 -0.469512 + -0.191271 2.24886 -3.2109 -0.0616488 -0.957934 -0.280289 + -0.129043 2.23586 -3.21559 -0.216743 -0.924201 -0.314443 + -0.248174 2.23837 -3.20173 0.268604 -0.92598 -0.265356 + -0.318018 2.1931 -3.18552 0.556114 -0.806754 -0.199714 + -0.350353 2.16381 -3.16919 0.590012 -0.775904 -0.223291 + -0.035427 2.13561 -3.18694 -0.682214 -0.458894 -0.56921 + -0.039535 2.08549 -3.15914 -0.379286 -0.54305 -0.749159 + -0.030826 2.06779 -3.14729 -0.13509 -0.749882 -0.647632 + -0.030826 2.04626 -3.10218 -0.0590464 -0.87446 -0.48149 + 0.039576 2.08557 -3.15907 0.379912 -0.542272 -0.749405 + 0.030828 2.06779 -3.14728 0.135537 -0.748663 -0.648948 + 0.030828 2.04626 -3.10218 0.081593 -0.911789 -0.402473 + 0.132066 2.0744 -3.09612 0.526476 -0.445916 -0.723866 + 0.123318 2.05662 -3.08433 0.411402 -0.759432 -0.503996 + 0.133336 2.04513 -3.05403 -0.0332632 -0.814664 -0.578979 + 0.070894 2.02181 -3.02604 0.351005 -0.486734 -0.799928 + 0.021963 2.02879 -3.08313 0.527441 -0.660561 -0.534289 + 0.150823 2.095 -3.08881 0.524743 -0.335332 -0.78243 + 0.175985 2.10953 -3.08138 0.278799 -0.389795 -0.877685 + 0.208237 2.10715 -3.07546 -0.0254115 -0.317133 -0.94804 + 0.114943 2.16932 -3.12973 0.540321 -0.3855 -0.747959 + 0.140105 2.18376 -3.12235 0.396281 -0.501989 -0.768744 + 0.185474 2.19702 -3.11311 0.204268 -0.571453 -0.794805 + 0.217725 2.19464 -3.10718 -0.00740461 -0.58899 -0.808106 + 0.088709 2.19606 -3.17486 0.617181 -0.628128 -0.47386 + 0.136709 2.21986 -3.16327 0.403162 -0.780595 -0.477631 + 0.182078 2.23311 -3.15402 0.126937 -0.876067 -0.465181 + 0.238985 2.22262 -3.14485 -0.222732 -0.863119 -0.453228 + 0.268534 2.17222 -3.09796 -0.236088 -0.484316 -0.842437 + 0.129042 2.23586 -3.21559 0.442592 -0.837313 -0.320967 + 0.080404 2.00707 -3.02371 0.558278 0.234857 -0.795718 + -0.129043 2.23586 -3.21559 -0.481621 -0.815823 -0.320117 + -0.080403 2.00708 -3.02372 -0.318263 -0.784542 -0.532167 + -0.596777 1.8903 -2.71226 0.637413 0.71044 0.298295 + -0.568869 1.86808 -2.71897 0.520562 0.793228 0.315919 + -0.554396 1.87296 -2.73803 -0.755406 0.513444 -0.407108 + -0.548043 1.89701 -2.80889 -0.412445 0.871443 0.265473 + -0.540993 1.91304 -2.85124 0.186979 0.908097 0.374698 + -0.539497 1.90957 -2.78863 -0.925256 -0.210189 -0.315789 + -0.540993 1.91304 -2.85124 -0.837668 0.545976 0.0149386 + -0.52297 1.93907 -2.90713 -0.555133 0.830707 0.0418757 + -0.575518 1.88522 -2.73566 -0.394493 -0.738218 -0.547184 + -0.56062 1.92182 -2.78625 -0.348486 -0.763191 -0.544148 + -0.568869 1.86808 -2.71897 -0.485676 -0.739604 -0.465945 + -0.589813 1.88044 -2.71658 -0.456706 -0.852813 0.253238 + -0.596777 1.8903 -2.71226 -0.205753 -0.510838 0.834691 + -0.61772 1.90266 -2.70986 -0.369921 -0.770768 -0.518724 + -0.654387 1.90403 -2.71624 0.15042 -0.886631 -0.437332 + -0.596777 1.8903 -2.71226 -0.363154 -0.457952 -0.811418 + 0.700788 1.60693 -3.09201 -0.935445 0.353103 0.0161381 + 0.700286 1.60496 -3.09226 -0.953977 0.189685 0.232263 + 0.713785 1.62766 -3.06485 -0.678695 0.713623 -0.173537 + 0.714287 1.62963 -3.06459 -0.919041 0.367061 0.143628 + 0.719965 1.63784 -3.07821 -0.830357 0.549801 -0.0906978 + 0.721527 1.63887 -3.08342 -0.817532 0.567644 -0.097067 + 0.702351 1.60795 -3.09721 -0.830406 0.556598 -0.0249845 + 0.700286 1.60496 -3.09226 -0.895389 0.430489 -0.113827 + 0.698218 1.60237 -3.10074 -0.935982 0.331597 -0.118238 + 0.735808 1.65866 -3.01872 -0.666743 0.734097 -0.128668 + 0.740829 1.67833 -3.01615 -0.863698 0.403629 0.301843 + 0.746507 1.68655 -3.02977 -0.771492 0.635909 -0.0205227 + 0.723359 1.65031 -3.03058 0.138716 0.819181 -0.556508 + 0.726764 1.6649 -3.00715 -0.0995092 0.980206 -0.171155 + 0.762929 1.68282 -2.988 -0.638984 0.39098 0.662445 + 0.76795 1.70249 -2.98543 -0.594273 0.5275 0.607111 + 0.701336 1.61931 -3.07671 0.328939 0.679388 -0.655921 + 0.683112 1.63959 -3.07115 -0.224761 0.653228 -0.723032 + 0.686517 1.65418 -3.04772 -0.11062 0.929914 -0.350747 + 0.710988 1.66406 -2.99897 -0.186712 0.974499 0.124456 + 0.744332 1.65545 -2.97188 -0.17084 0.85622 0.487546 + 0.700286 1.60496 -3.09226 0.159707 0.720202 -0.675132 + 0.697173 1.59291 -3.09688 -0.813514 0.116336 -0.56979 + 0.695999 1.5703 -3.11698 -0.986078 0.14171 -0.0869993 + 0.694954 1.56084 -3.11312 -0.978094 0.0883813 -0.188468 + 0.689663 1.57411 -3.09402 -0.741581 0.095203 -0.664074 + 0.688751 1.58509 -3.09346 -0.48378 0.0783975 -0.871671 + 0.696261 1.60389 -3.09632 -0.180911 0.450164 -0.874428 + 0.700286 1.60496 -3.09226 0.546028 0.497951 -0.67372 + 0.710325 1.62074 -3.11096 -0.879374 0.475627 -0.0219122 + 0.699405 1.57794 -3.14714 -0.888559 0.212688 -0.406482 + 0.694389 1.50268 -3.15615 -0.90074 0.0799559 -0.426936 + 0.68896 1.48336 -3.10853 -0.982827 0.0246061 -0.182883 + 0.683668 1.49664 -3.08943 -0.944176 -0.0217137 -0.328724 + 0.714458 1.62632 -3.10743 -0.825696 0.563977 0.0124751 + 0.755063 1.6842 -3.10586 -0.76741 0.630373 -0.117099 + 0.713731 1.62839 -3.14112 -0.831432 0.433017 -0.348163 + 0.724048 1.56911 -3.1729 -0.410332 0.178925 -0.894211 + 0.762133 1.69675 -3.08184 -0.736743 0.668983 -0.0983438 + 0.773682 1.70236 -3.1145 -0.399395 0.788765 -0.467262 + 0.73235 1.64655 -3.14976 -0.520148 0.581192 -0.625829 + 0.77521 1.71429 -3.01999 -0.440014 0.893548 0.0892177 + 0.790836 1.72448 -3.07206 -0.25334 0.960429 -0.115734 + 0.80354 1.71436 -3.10247 0.135789 0.848434 -0.511588 + 0.805723 1.6918 -3.12458 0.128472 0.662692 -0.73779 + 0.775865 1.6798 -3.13661 -0.0676384 0.598624 -0.798169 + 0.784145 1.71184 -2.99598 -0.230467 0.940921 0.248098 + 0.818774 1.72266 -3.0542 0.157211 0.987058 -0.0316526 + 0.831478 1.71254 -3.0846 0.385266 0.855034 -0.347111 + 0.810379 1.70534 -2.96548 -0.260932 0.717954 0.645334 + 0.826574 1.71469 -2.97603 0.12208 0.899702 0.419085 + 0.827708 1.72022 -3.03019 0.140143 0.986952 0.0792875 + 0.8513 1.71244 -3.03504 0.561292 0.827393 -0.0192898 + 0.76146 1.66694 -2.97721 -0.365876 0.625914 0.688743 + 0.80891 1.68947 -2.95469 -0.526387 0.535264 0.660613 + 0.819506 1.67489 -2.93533 -0.0602987 0.583959 0.80954 + 0.850166 1.70692 -2.98088 0.568615 0.745217 0.348323 + 0.767406 1.65093 -2.95128 -0.464066 0.686456 0.559841 + 0.772151 1.65318 -2.94903 -0.503024 0.628014 0.593772 + 0.782747 1.63861 -2.92967 -0.368758 0.557467 0.743806 + 0.750278 1.63944 -2.94596 0.0209299 0.823393 0.567086 + 0.759055 1.63552 -2.94107 -0.235389 0.788655 0.567992 + 0.7638 1.63777 -2.93882 -0.437651 0.643943 0.627535 + 0.780306 1.6323 -2.92608 -0.288204 0.647061 0.705868 + 0.815706 1.62228 -2.90612 0.124878 0.479006 0.868883 + 0.728557 1.65461 -2.9637 -0.00793514 0.907688 0.419572 + 0.750129 1.63638 -2.94029 0.18042 0.860595 0.476262 + 0.758906 1.63246 -2.93541 0.0561691 0.788152 0.612912 + 0.76136 1.63146 -2.93523 -0.0293958 0.697708 0.715779 + 0.70868 1.65059 -2.96396 -0.341861 0.822352 0.454827 + 0.742838 1.62485 -2.91521 -0.0152496 0.78271 0.6222 + 0.760134 1.62211 -2.92016 0.272579 0.828643 0.488929 + 0.762588 1.62112 -2.91999 0.0550852 0.817751 0.572931 + 0.795101 1.61183 -2.89945 -0.0469307 0.49094 0.869929 + 0.695763 1.65722 -2.99638 -0.454934 0.8663 0.206297 + 0.678778 1.63089 -2.96438 -0.758219 0.422261 0.496789 + 0.722961 1.62083 -2.91547 -0.40496 0.522384 0.750415 + 0.727908 1.5947 -2.90265 -0.623075 0.124454 0.772197 + 0.752843 1.61059 -2.89508 -0.094553 0.654026 0.75054 + 0.671291 1.64734 -3.04513 -0.759618 0.620622 -0.194444 + 0.665861 1.63752 -2.9968 -0.852983 0.476924 0.212044 + 0.683725 1.60477 -2.95156 -0.787319 0.0556653 0.614028 + 0.666173 1.60744 -3.06324 -0.955854 0.117315 -0.269407 + 0.660742 1.59762 -3.01491 -0.998913 0.0453507 0.0107923 + 0.670611 1.58683 -2.96985 -0.881131 -0.00980823 0.47277 + 0.72847 1.54609 -2.91265 -0.675457 -0.182414 0.714481 + 0.674551 1.60644 -3.08384 -0.623596 0.24512 -0.742324 + 0.67529 1.49763 -3.06883 -0.955341 -0.109941 -0.274294 + 0.675092 1.47307 -3.05471 -0.978055 -0.0556893 -0.200764 + 0.660545 1.57306 -3.00079 -0.991605 -0.0224113 0.127348 + 0.697311 1.61823 -3.08077 0.197968 0.57859 -0.791229 + 0.679223 1.43047 -3.06729 -0.978327 -0.0415076 -0.202863 + 0.665383 1.50919 -3.00677 -0.978842 -0.141584 0.147721 + 0.68851 1.41049 -3.11426 -0.989145 -0.0619066 -0.133268 + 0.686728 1.39615 -3.08333 -0.976048 -0.109724 -0.187857 + 0.677067 1.40267 -3.05111 -0.965029 -0.234309 0.117556 + 0.669514 1.46659 -3.01935 -0.966267 -0.184369 0.179824 + 0.693939 1.4298 -3.16189 -0.896329 -0.00861553 -0.443306 + 0.69819 1.36955 -3.16113 -0.898081 -0.0640788 -0.435136 + 0.694726 1.36325 -3.12214 -0.991672 -0.0822054 -0.0991424 + 0.692944 1.34892 -3.0912 -0.989454 -0.142851 -0.0239792 + 0.684572 1.36835 -3.06714 -0.954512 -0.289552 0.0711758 + 0.716485 1.43006 -3.18433 -0.41442 0.0047709 -0.910073 + 0.720736 1.36981 -3.18358 -0.373408 -0.0469636 -0.926478 + 0.719922 1.28898 -3.17817 -0.383264 -0.0664205 -0.921248 + 0.70197 1.28763 -3.1606 -0.897244 -0.0481392 -0.438902 + 0.698506 1.28133 -3.1216 -0.997817 -0.0432214 -0.0499371 + 0.719033 1.49384 -3.18192 -0.392002 0.0949836 -0.915048 + 0.76129 1.40878 -3.18738 -0.0326972 -0.0248075 -0.999157 + 0.757219 1.36651 -3.18369 -0.0128779 -0.0681832 -0.99759 + 0.756405 1.28568 -3.17829 0.016686 -0.0727226 -0.997213 + 0.763838 1.47256 -3.18497 -0.0105868 0.0574224 -0.998294 + 0.801582 1.39762 -3.18654 0.0371262 -0.0345071 -0.998715 + 0.797511 1.35535 -3.18285 0.0453096 -0.0904423 -0.994871 + 0.788812 1.28247 -3.17667 0.063947 -0.0823329 -0.994551 + 0.750995 1.17563 -3.16969 0.0160812 -0.061235 -0.997994 + 0.769195 1.54989 -3.17987 -0.0249877 0.120279 -0.992426 + 0.813673 1.53427 -3.17938 0.135486 0.108803 -0.984787 + 0.808316 1.45694 -3.18447 0.0694908 0.0581577 -0.995886 + 0.845832 1.38144 -3.18374 0.354266 -0.143398 -0.924085 + 0.833141 1.35149 -3.17915 0.320905 -0.185374 -0.928793 + 0.733622 1.62154 -3.16383 -0.453746 0.321119 -0.831263 + 0.778768 1.60233 -3.1708 0.028152 0.253517 -0.966921 + 0.813206 1.60082 -3.16797 0.137868 0.242546 -0.960294 + 0.857387 1.52845 -3.17019 0.451533 0.117568 -0.884475 + 0.852566 1.44075 -3.18167 0.38889 0.0403665 -0.9204 + 0.777137 1.65479 -3.15069 0.0154395 0.445613 -0.895093 + 0.811574 1.65329 -3.14786 0.0838981 0.451101 -0.88852 + 0.846504 1.64373 -3.14987 0.395785 0.395273 -0.828923 + 0.85692 1.595 -3.15879 0.495367 0.203617 -0.844483 + 0.840653 1.68224 -3.12658 0.376947 0.648321 -0.661506 + 0.863912 1.67388 -3.10907 0.737494 0.536513 -0.41019 + 0.874516 1.63969 -3.12224 0.81587 0.337792 -0.469312 + 0.884932 1.59097 -3.13117 0.835199 0.198623 -0.512827 + 0.886875 1.52234 -3.145 0.822874 0.0787617 -0.562739 + 0.854737 1.70418 -3.06709 0.646513 0.730064 -0.221421 + 0.88195 1.67248 -3.04744 0.888013 0.448523 -0.101287 + 0.892555 1.63829 -3.06061 0.964454 0.25371 -0.0738963 + 0.9003 1.5916 -3.08948 0.971079 0.174759 -0.162678 + 0.902243 1.52298 -3.10331 0.984157 0.0188288 -0.176299 + 0.878514 1.68074 -3.01539 0.886186 0.445666 0.126712 + 0.876869 1.66136 -2.98761 0.895263 0.283128 0.344008 + 0.883256 1.63656 -2.98772 0.932162 0.174993 0.316941 + 0.892188 1.60638 -3.01517 0.978727 0.081796 0.188154 + 0.899933 1.55969 -3.04404 0.986329 -0.0091884 0.164535 + 0.848521 1.68754 -2.95309 0.492205 0.602971 0.627822 + 0.844721 1.63493 -2.92389 0.598312 0.288512 0.747518 + 0.851108 1.61012 -2.92401 0.745631 0.174029 0.643232 + 0.874069 1.58832 -2.95356 0.882402 -0.00570791 0.470462 + 0.883002 1.55814 -2.981 0.923409 -0.11779 0.365297 + 0.833524 1.59783 -2.90054 0.519677 0.0550165 0.85259 + 0.856485 1.57603 -2.93009 0.743148 -0.15405 0.651153 + 0.853575 1.52989 -2.94193 0.746095 -0.207528 0.632672 + 0.874246 1.48103 -2.99973 0.894297 -0.167073 0.415113 + 0.812919 1.58737 -2.89387 0.217734 -0.0105637 0.975951 + 0.810009 1.54124 -2.90571 0.519032 -0.208213 0.829007 + 0.805551 1.45534 -2.91908 0.568426 -0.228602 0.790337 + 0.844819 1.45278 -2.96066 0.768549 -0.257066 0.585874 + 0.876418 1.43272 -3.02103 0.869527 -0.188582 0.456465 + 0.781249 1.53134 -2.89374 0.151456 -0.184957 0.971006 + 0.776791 1.44544 -2.90711 -0.328562 -0.252617 0.910072 + 0.792961 1.41006 -2.92624 0.171971 -0.606728 0.776085 + 0.832229 1.40751 -2.96782 0.673481 -0.419816 0.608422 + 0.777383 1.60064 -2.89336 0.200314 0.424396 0.883042 + 0.775356 1.57809 -2.88406 0.480751 0.039515 0.875966 + 0.75727 1.49267 -2.90546 -0.343978 -0.301939 0.889108 + 0.768564 1.43061 -2.9253 -0.541749 -0.438385 0.717166 + 0.784733 1.39524 -2.94443 -0.0485043 -0.694091 0.718251 + 0.750816 1.58804 -2.88577 -0.300059 0.114674 0.947003 + 0.751378 1.53942 -2.89578 -0.395611 -0.215859 0.892691 + 0.715355 1.52815 -2.93095 -0.702633 -0.207871 0.680512 + 0.728331 1.47624 -2.93836 -0.6625 -0.305273 0.684033 + 0.675449 1.52296 -2.97583 -0.831941 -0.184289 0.523365 + 0.688425 1.47104 -2.98324 -0.771179 -0.302461 0.560179 + 0.739624 1.41418 -2.9582 -0.654186 -0.363178 0.663433 + 0.746833 1.36701 -2.97759 -0.511635 -0.444488 0.735296 + 0.786007 1.36963 -2.96497 0.141565 -0.554925 0.819767 + 0.695978 1.40712 -3.015 -0.773997 -0.350969 0.527019 + 0.703187 1.35996 -3.03439 -0.784807 -0.400852 0.472648 + 0.715481 1.33661 -3.03751 -0.813503 -0.266747 0.516778 + 0.744527 1.32767 -3.00042 -0.587356 -0.254346 0.768323 + 0.783702 1.33029 -2.9878 0.120904 -0.3648 0.923203 + 0.696866 1.34501 -3.07027 -0.914946 -0.298987 0.271072 + 0.70283 1.27277 -3.07349 -0.940969 -0.060861 0.332976 + 0.717646 1.267 -3.04741 -0.837119 -0.0682182 0.54275 + 0.746692 1.25807 -3.01032 -0.555269 -0.103092 0.825256 + 0.698909 1.27668 -3.09442 -0.99453 -0.0551595 0.0887001 + 0.701586 1.16723 -3.09375 -0.993417 -0.0329606 0.109707 + 0.705499 1.16387 -3.07604 -0.935535 -0.0353781 0.351458 + 0.720315 1.1581 -3.04997 -0.833832 -0.0353227 0.550887 + 0.701184 1.17188 -3.12093 -0.998571 -0.0322023 -0.0426532 + 0.705125 1.06853 -3.11732 -0.997987 -0.050053 -0.038954 + 0.705752 1.06448 -3.09411 -0.992409 -0.0495043 0.112581 + 0.709665 1.06112 -3.07641 -0.940536 -0.0444678 0.336771 + 0.703946 1.17691 -3.15202 -0.905141 -0.0426522 -0.422967 + 0.707888 1.07356 -3.14842 -0.924691 -0.0569793 -0.376429 + 0.713241 0.976547 -3.1442 -0.925466 -0.0642167 -0.373347 + 0.710884 0.972315 -3.11638 -0.997643 -0.0566793 -0.0386713 + 0.711511 0.968265 -3.09316 -0.991721 -0.0556331 0.115734 + 0.721898 1.17826 -3.1696 -0.37877 -0.0602308 -0.923529 + 0.72109 1.07123 -3.16464 -0.444997 -0.0453588 -0.894383 + 0.726443 0.974225 -3.16042 -0.580861 -0.0676771 -0.811184 + 0.726527 0.875771 -3.15145 -0.634698 -0.105587 -0.765512 + 0.718143 0.880408 -3.13907 -0.941296 -0.073221 -0.329545 + 0.750186 1.0686 -3.16473 0.00844807 -0.0177461 -0.999807 + 0.745035 0.958311 -3.16628 -0.162641 -0.0515508 -0.985338 + 0.745119 0.859859 -3.15731 -0.234301 -0.1429 -0.961604 + 0.775266 1.06278 -3.16408 0.066902 -0.0214768 -0.997528 + 0.770114 0.952483 -3.16563 0.12031 -0.0438588 -0.991767 + 0.762232 0.852825 -3.15737 0.0680338 -0.151879 -0.986055 + 0.741544 0.769971 -3.13812 -0.229043 -0.313945 -0.9214 + 0.783401 1.17241 -3.16807 0.0703857 -0.0614228 -0.995627 + 0.803682 1.05969 -3.16112 0.403698 -0.0536019 -0.913321 + 0.794329 0.950801 -3.16004 0.448426 -0.070075 -0.891069 + 0.786447 0.851142 -3.15179 0.445215 -0.1548 -0.881941 + 0.811817 1.16932 -3.16512 0.379728 -0.0883243 -0.920872 + 0.821023 1.05585 -3.14529 0.832958 -0.0870153 -0.546451 + 0.81167 0.946961 -3.14421 0.831544 -0.1018 -0.54605 + 0.79914 0.848498 -3.14022 0.814522 -0.168242 -0.555201 + 0.772999 0.76158 -3.13749 0.3191 -0.328354 -0.889021 + 0.824442 1.2786 -3.17296 0.37599 -0.116431 -0.91928 + 0.845429 1.27364 -3.155 0.805996 -0.155493 -0.571132 + 0.832804 1.16437 -3.14715 0.821373 -0.116734 -0.558319 + 0.829853 1.05014 -3.11636 0.987854 -0.100336 -0.118644 + 0.819573 0.942088 -3.11833 0.985848 -0.111342 -0.125325 + 0.859534 1.34392 -3.15667 0.764696 -0.290696 -0.575096 + 0.856502 1.26648 -3.11872 0.976875 -0.167397 -0.133013 + 0.841635 1.15865 -3.11822 0.984171 -0.123086 -0.127505 + 0.82755 1.04513 -3.0913 0.963053 -0.112741 0.244577 + 0.872225 1.37387 -3.16127 0.786749 -0.240202 -0.568621 + 0.870607 1.33676 -3.1204 0.940795 -0.305928 -0.145988 + 0.85376 1.26113 -3.08574 0.959641 -0.168593 0.225091 + 0.838893 1.1533 -3.08524 0.962827 -0.122529 0.240728 + 0.882054 1.43465 -3.15648 0.83209 -0.0378242 -0.553349 + 0.886844 1.37081 -3.11415 0.952646 -0.281034 -0.116129 + 0.883944 1.37025 -3.07144 0.917392 -0.326949 0.226926 + 0.867707 1.3362 -3.07768 0.917191 -0.337814 0.211289 + 0.896673 1.43159 -3.10936 0.982078 -0.104648 -0.156752 + 0.896536 1.41999 -3.07138 0.969828 -0.170033 0.174707 + 0.863826 1.38298 -3.02108 0.785117 -0.292005 0.546191 + 0.850533 1.33146 -3.04056 0.798927 -0.312346 0.513961 + 0.836586 1.25639 -3.04862 0.825092 -0.166957 0.539767 + 0.902105 1.51138 -3.06534 0.985669 -0.0539359 0.159834 + 0.833503 1.38189 -2.98836 0.630331 -0.412928 0.657399 + 0.82021 1.33037 -3.00783 0.585936 -0.318945 0.744952 + 0.812463 1.25423 -3.02293 0.611503 -0.165467 0.773747 + 0.775955 1.25415 -3.0029 0.109863 -0.155232 0.98175 + 0.771958 1.1473 -3.01397 0.127433 -0.105463 0.986224 + 0.801073 1.14736 -3.02995 0.608752 -0.121245 0.784041 + 0.825197 1.14953 -3.05563 0.828094 -0.122487 0.547044 + 0.742695 1.15122 -3.02139 -0.556495 -0.059617 0.82871 + 0.742493 1.04514 -3.02834 -0.503241 -0.0782431 0.860597 + 0.764642 1.03836 -3.02585 0.173733 -0.123124 0.977066 + 0.793758 1.03842 -3.04183 0.603302 -0.134541 0.786082 + 0.813854 1.04135 -3.06169 0.816734 -0.131012 0.561945 + 0.720112 1.05203 -3.05692 -0.845027 -0.0437517 0.532931 + 0.725672 0.955581 -3.05743 -0.855401 -0.0455373 0.515961 + 0.737453 0.933047 -3.04199 -0.535915 -0.0780239 0.840659 + 0.759602 0.926263 -3.03951 0.239594 -0.123193 0.963025 + 0.715225 0.964675 -3.07691 -0.940826 -0.0548141 0.334429 + 0.720464 0.869428 -3.07741 -0.946526 -0.0502731 0.318686 + 0.726842 0.85972 -3.0645 -0.874596 -0.0557324 0.481638 + 0.738623 0.837186 -3.04907 -0.49374 -0.0934459 0.864574 + 0.716751 0.87302 -3.09366 -0.990353 -0.0518002 0.128522 + 0.721533 0.778315 -3.0923 -0.980171 -0.096369 0.173143 + 0.72532 0.775814 -3.08118 -0.934154 -0.102162 0.341935 + 0.731699 0.766105 -3.06827 -0.892646 -0.112527 0.436486 + 0.715786 0.876178 -3.11125 -0.998312 -0.0529804 -0.0237958 + 0.720568 0.781473 -3.10989 -0.994763 -0.0961929 -0.0345456 + 0.727586 0.728534 -3.09845 -0.753101 -0.657734 -0.0149931 + 0.731373 0.726032 -3.08733 -0.896027 -0.413148 0.162615 + 0.73793 0.755901 -3.05943 -0.54205 -0.217014 0.811841 + 0.721855 0.783783 -3.12507 -0.940259 -0.127966 -0.315497 + 0.728872 0.730843 -3.11363 -0.753535 -0.485996 -0.442711 + 0.740176 0.721669 -3.11429 -0.43502 -0.711477 -0.551867 + 0.737605 0.715827 -3.07849 -0.610775 -0.681908 0.402436 + 0.752399 0.748231 -3.05953 0.131267 -0.282889 0.950128 + 0.73024 0.779145 -3.13746 -0.562717 -0.215037 -0.798191 + 0.758657 0.762938 -3.13818 -0.0637806 -0.337891 -0.939022 + 0.755709 0.715314 -3.11404 -0.172974 -0.796798 -0.578958 + 0.753137 0.709472 -3.07824 -0.0550107 -0.868767 0.492156 + 0.770051 0.713956 -3.11335 0.358864 -0.751013 -0.554252 + 0.767678 0.70932 -3.08482 0.434262 -0.824148 0.363588 + 0.76694 0.74808 -3.06611 0.533913 -0.219183 0.816637 + 0.778414 0.831733 -3.06725 0.635848 -0.103489 0.764845 + 0.753092 0.829517 -3.04917 0.274375 -0.12115 0.953961 + 0.785692 0.758936 -3.12592 0.779881 -0.303731 -0.547296 + 0.790005 0.756277 -3.1118 0.946459 -0.280706 -0.159434 + 0.774364 0.711295 -3.09923 0.611396 -0.790103 -0.0439523 + 0.78164 0.750508 -3.07983 0.799905 -0.22335 0.557016 + 0.807043 0.843624 -3.11434 0.978606 -0.1607 -0.128475 + 0.805363 0.839829 -3.09679 0.935664 -0.144888 0.321777 + 0.788325 0.752482 -3.09424 0.941537 -0.257519 0.217237 + 0.793113 0.83416 -3.08097 0.749946 -0.104536 0.653187 + 0.81727 0.937079 -3.09327 0.933411 -0.10991 0.341561 + 0.80502 0.931409 -3.07746 0.764571 -0.123691 0.632559 + 0.784924 0.928477 -3.05759 0.64749 -0.138817 0.749324 + -0.891883 1.52196 -2.6212 -0.22609 0.561287 0.796141 + -0.906756 1.51837 -2.62531 0.10449 0.994419 -0.0145637 + -0.93052 1.51733 -2.62797 0.0584756 0.636585 -0.768986 + -0.892392 1.53419 -2.64619 -0.365591 0.808455 0.461241 + -0.900577 1.5312 -2.64834 0.139518 0.805828 0.575479 + -0.912714 1.52633 -2.6262 0.242418 0.388341 0.889058 + -0.93052 1.51733 -2.62797 -0.419363 0.0396953 0.90695 + -0.877519 1.53779 -2.64208 -0.301602 0.825908 0.476352 + -0.890007 1.54021 -2.65338 -0.225765 0.663121 0.713653 + -0.898192 1.53722 -2.65553 0.107253 0.322486 0.940478 + -0.906535 1.53917 -2.64923 0.655018 0.201444 0.728266 + -0.841083 1.54559 -2.63191 -0.102775 0.670841 0.734445 + -0.818326 1.56307 -2.64951 -0.0447733 0.804111 0.59279 + -0.854762 1.55527 -2.65968 -0.231459 0.809545 0.539503 + -0.875344 1.55504 -2.66534 -0.0540791 0.707923 0.704217 + -0.876163 1.50957 -2.61646 -0.0435633 0.0331228 0.998501 + -0.825363 1.5332 -2.62717 0.190283 0.303543 0.933624 + -0.801154 1.54689 -2.63927 0.39546 0.427512 0.812923 + -0.779329 1.56435 -2.66489 0.592562 0.485385 0.642862 + -0.796501 1.58053 -2.67512 0.103071 0.837004 0.537402 + -0.928499 1.44977 -2.64188 -0.393582 -0.269532 0.878889 + -0.88467 1.4419 -2.63615 -0.0961734 -0.303545 0.947951 + -0.814638 1.48823 -2.62312 0.295047 -0.124756 0.947303 + -0.79043 1.50192 -2.63522 0.601685 0.0229928 0.798403 + -0.969471 1.43614 -2.67626 -0.647472 -0.201327 0.735015 + -0.910615 1.32677 -2.68468 -0.221259 -0.330885 0.917365 + -0.866786 1.3189 -2.67895 0.106557 -0.392402 0.913601 + -0.823145 1.42055 -2.64281 0.267356 -0.355809 0.8955 + -0.788958 1.41557 -2.6663 0.656989 -0.353273 0.666006 + -0.971492 1.50371 -2.66235 -0.693407 -0.0525904 0.718624 + -0.983836 1.51751 -2.67543 -0.75654 0.03766 0.652862 + -0.999264 1.50315 -2.6968 -0.879837 -0.0303789 0.474304 + -0.998304 1.44441 -2.70876 -0.876009 -0.114088 0.468606 + -0.964992 1.35018 -2.68955 -0.491557 -0.234337 0.838724 + -0.940298 1.55651 -2.64549 -0.447077 0.350576 0.822933 + -0.952642 1.57031 -2.65857 -0.461898 0.419921 0.781228 + -0.979896 1.57252 -2.68028 -0.721434 0.400796 0.564708 + -0.995324 1.55816 -2.70165 -0.897094 0.288711 0.334466 + -0.922492 1.56551 -2.64372 0.0630064 0.524095 0.849326 + -0.911465 1.58928 -2.66198 0.190243 0.574209 0.796299 + -0.937803 1.59891 -2.67516 -0.243033 0.734408 0.633703 + -0.965057 1.60113 -2.69687 -0.559648 0.733901 0.384946 + -0.905557 1.54438 -2.64776 0.354318 -0.0592797 0.933244 + -0.894531 1.56815 -2.66602 0.48239 0.337818 0.808195 + -0.867746 1.59585 -2.69256 0.474283 0.485573 0.734353 + -0.885343 1.61232 -2.69242 0.267523 0.705233 0.656565 + -0.911681 1.62195 -2.7056 -0.10586 0.910048 0.400757 + -0.897214 1.54243 -2.65405 0.345225 0.077066 0.93535 + -0.882551 1.55726 -2.66602 0.234796 0.498919 0.834237 + -0.855766 1.58495 -2.69256 0.28742 0.637788 0.714574 + -0.849924 1.60828 -2.71679 0.566754 0.663429 0.488521 + -0.867521 1.62475 -2.71665 0.380702 0.828308 0.411063 + -0.849585 1.5812 -2.68906 -0.0353293 0.798288 0.601239 + -0.828368 1.59373 -2.71497 0.146724 0.943731 0.296383 + -0.834549 1.59748 -2.71847 0.444904 0.799796 0.402973 + -0.834941 1.60577 -2.74159 0.591739 0.774122 0.224898 + -0.864122 1.6263 -2.73181 0.423915 0.889071 0.172767 + -0.829003 1.58143 -2.6834 -0.121484 0.851511 0.510069 + -0.811174 1.5928 -2.7105 -0.0214423 0.983216 0.181182 + -0.811027 1.59247 -2.74355 0.153523 0.985513 0.072074 + -0.819566 1.59496 -2.74326 0.424025 0.889941 0.16795 + -0.778672 1.5919 -2.70222 0.35084 0.880319 0.319296 + -0.772282 1.59501 -2.73269 0.302944 0.940593 0.153327 + -0.793833 1.59155 -2.73908 -0.060727 0.998063 -0.0134772 + -0.803196 1.59435 -2.77524 0.186314 0.976174 0.111227 + -0.811736 1.59684 -2.77495 0.409385 0.900436 0.147034 + -0.760085 1.57115 -2.69963 0.825939 0.432965 0.361061 + -0.753695 1.57426 -2.7301 0.817051 0.471931 0.331223 + -0.751357 1.59298 -2.76679 0.446724 0.879992 0.161407 + -0.769096 1.59685 -2.77483 0.0491148 0.998454 -0.0260182 + -0.790647 1.59339 -2.78122 0.0213143 0.998105 0.0577178 + -0.765915 1.5493 -2.67958 0.848401 0.161521 0.504109 + -0.741668 1.50855 -2.71809 0.880022 0.19405 0.433481 + -0.733332 1.50676 -2.73257 0.956958 0.0327701 0.288369 + -0.745359 1.57248 -2.74458 0.735298 0.470937 0.487396 + -0.777016 1.48688 -2.64992 0.750565 -0.115649 0.650598 + -0.747498 1.4867 -2.69804 0.889495 -0.0654025 0.45224 + -0.738473 1.45156 -2.73762 0.969209 -0.219454 0.111688 + -0.726742 1.56403 -2.75754 0.931474 0.259925 0.25455 + -0.75944 1.41539 -2.71442 0.855891 -0.307935 0.415485 + -0.765923 1.35168 -2.76479 0.958521 -0.283734 0.0270655 + -0.731883 1.50883 -2.76259 0.984025 -0.112073 -0.138327 + -0.746557 1.53971 -2.81573 0.906447 0.0021148 -0.422314 + -0.73274 1.58453 -2.77975 0.824529 0.558302 -0.0919244 + -0.78689 1.3155 -2.7416 0.805312 -0.353729 0.47576 + -0.799393 1.24551 -2.7692 0.854398 -0.260015 0.449884 + -0.773356 1.3433 -2.78776 0.966381 -0.20482 -0.155421 + -0.739316 1.50045 -2.78555 0.945678 -0.13106 -0.297517 + -0.814154 1.31359 -2.71211 0.593899 -0.404248 0.695606 + -0.826657 1.2436 -2.73972 0.661291 -0.338552 0.669385 + -0.848341 1.31858 -2.68862 0.446106 -0.406151 0.797515 + -0.848495 1.23947 -2.7224 0.513131 -0.362928 0.777805 + -0.823961 1.19951 -2.76147 0.67794 -0.307272 0.667818 + -0.86694 1.2398 -2.71272 0.162325 -0.417997 0.893828 + -0.862939 1.19246 -2.73746 0.15102 -0.452062 0.879109 + -0.8458 1.19538 -2.74415 0.512286 -0.367034 0.776434 + -0.901155 1.24515 -2.71393 -0.189097 -0.424621 0.885403 + -0.897154 1.19781 -2.73866 -0.202264 -0.474083 0.856933 + -0.885064 1.11308 -2.78374 -0.203041 -0.486904 0.849529 + -0.857895 1.11402 -2.77952 0.139952 -0.469199 0.871932 + -0.840756 1.11695 -2.78622 0.510101 -0.386238 0.768516 + -0.955531 1.26856 -2.7188 -0.496144 -0.396083 0.772632 + -0.944055 1.19838 -2.75499 -0.510399 -0.452603 0.731193 + -0.931966 1.11365 -2.80007 -0.484807 -0.470809 0.737089 + -0.983141 1.28138 -2.74361 -0.889107 -0.279328 0.36258 + -0.971665 1.21119 -2.77979 -0.893401 -0.307535 0.327502 + -0.95616 1.11954 -2.82119 -0.868557 -0.330632 0.369177 + -0.908684 1.00316 -2.85679 -0.470362 -0.462925 0.751306 + -0.993825 1.35845 -2.72205 -0.905694 -0.185731 0.381081 + -0.988035 1.29495 -2.78707 -0.984831 -0.167623 0.0448501 + -0.975929 1.22491 -2.81432 -0.982278 -0.183621 0.0376019 + -0.960425 1.13325 -2.85572 -0.985402 -0.165077 0.0416373 + -1.01339 1.45412 -2.75603 -0.984817 -0.0887633 0.149187 + -0.998719 1.37202 -2.76552 -0.984029 -0.169562 0.0541816 + -0.990991 1.30479 -2.82818 -0.985617 -0.167175 0.0247397 + -0.978886 1.23475 -2.85543 -0.984693 -0.174093 0.00843553 + -0.963241 1.14511 -2.88537 -0.986167 -0.165736 -0.00230545 + -1.01435 1.51286 -2.74407 -0.987585 0.0792685 0.135622 + -1.0123 1.53068 -2.77243 -0.972831 0.230619 -0.0203678 + -1.01708 1.46156 -2.80018 -0.997232 -0.0441868 -0.0598019 + -1.0024 1.37945 -2.80967 -0.988283 -0.151019 0.0221316 + -0.993265 1.57599 -2.73001 -0.864745 0.486161 0.125953 + -0.983454 1.59551 -2.77394 -0.806544 0.588438 -0.0568123 + -1.00644 1.53931 -2.8072 -0.930646 0.307611 -0.198176 + -1.01122 1.47018 -2.83495 -0.978063 0.0583339 -0.199974 + -0.955245 1.62066 -2.7408 -0.48232 0.859587 0.168754 + -0.946612 1.62905 -2.77789 -0.340305 0.936351 -0.086251 + -0.967775 1.60432 -2.81096 -0.657293 0.687269 -0.309236 + -0.990762 1.54811 -2.84422 -0.836216 0.402474 -0.372502 + -0.903047 1.63034 -2.7427 -0.0882662 0.99462 0.0542233 + -0.925879 1.62295 -2.81582 -0.168011 0.937725 -0.304048 + -0.947043 1.59822 -2.84888 -0.427489 0.715085 -0.553088 + -0.887393 1.63128 -2.73602 0.00295766 0.9891 0.147214 + -0.910225 1.62389 -2.80914 0.102165 0.974336 -0.200577 + -0.905845 1.6127 -2.8457 0.0248469 0.874337 -0.484684 + -0.883994 1.63283 -2.75118 -0.0178476 0.999277 -0.0335799 + -0.879614 1.62164 -2.78774 0.168309 0.947439 -0.272085 + -0.869875 1.58653 -2.88225 -0.0578116 0.809356 -0.584467 + -0.863711 1.54912 -2.92 -0.268314 0.380988 -0.884791 + -0.89968 1.5753 -2.88344 -0.271146 0.550918 -0.789284 + -0.85349 1.62504 -2.76183 0.379809 0.925062 0.00223308 + -0.859971 1.62019 -2.79007 0.0168362 0.970605 -0.240088 + -0.850232 1.58508 -2.88458 0.0153005 0.804867 -0.593257 + -0.835818 1.55511 -2.91418 0.278561 0.479645 -0.832072 + -0.854955 1.47201 -2.93872 -0.063711 0.182406 -0.981157 + -0.824309 1.60451 -2.7716 0.574778 0.802247 0.161339 + -0.82079 1.61174 -2.82678 0.344894 0.935113 -0.0813088 + -0.827271 1.60687 -2.85503 0.149029 0.890965 -0.428919 + -0.812857 1.57691 -2.88462 0.373274 0.661785 -0.650159 + -0.808217 1.60406 -2.83014 0.314385 0.944017 -0.0999674 + -0.795668 1.6031 -2.83612 0.258166 0.929567 -0.263164 + -0.792252 1.56646 -2.87796 0.662158 0.402325 -0.632204 + -0.827063 1.478 -2.93291 0.468141 0.172441 -0.866665 + -0.775063 1.59265 -2.82945 0.473812 0.80152 -0.364785 + -0.77114 1.54396 -2.85738 0.817065 0.136911 -0.560053 + -0.805951 1.4555 -2.91233 0.808165 0.0559644 -0.586291 + -0.824235 1.37254 -2.94607 0.613753 0.122473 -0.77994 + -0.872747 1.46842 -2.93547 -0.0893839 0.29444 -0.951481 + -0.757324 1.58878 -2.8214 0.614111 0.647935 -0.450609 + -0.775446 1.45734 -2.85964 0.898803 -0.0613154 -0.434044 + -0.79373 1.37437 -2.89337 0.912884 0.00115234 -0.408217 + -0.768206 1.41808 -2.82947 0.948323 -0.136453 -0.286467 + -0.780405 1.34771 -2.8475 0.977473 -0.0739796 -0.197671 + -0.800511 1.2866 -2.91908 0.906474 0.0521904 -0.419024 + -0.785555 1.27293 -2.80579 0.983717 -0.124474 0.129641 + -0.785618 1.23892 -2.82147 0.989766 -0.0798494 0.118267 + -0.787186 1.25993 -2.87321 0.988089 -0.00621435 -0.153757 + -0.799455 1.2115 -2.78489 0.864258 -0.211996 0.456198 + -0.798572 1.13536 -2.82202 0.873662 -0.215576 0.436168 + -0.789111 1.14932 -2.85386 0.992109 -0.0734903 0.101584 + -0.79068 1.17034 -2.9056 0.982825 0.0193546 -0.183523 + -0.823078 1.12337 -2.79861 0.67682 -0.321418 0.662273 + -0.8192 1.01195 -2.85771 0.67275 -0.318662 0.667729 + -0.801549 1.02036 -2.87402 0.8689 -0.214634 0.446032 + -0.792088 1.03432 -2.90586 0.995083 -0.0613204 0.0777778 + -0.836878 1.00552 -2.84532 0.476401 -0.389876 0.78806 + -0.830536 0.893194 -2.90304 0.470886 -0.372882 0.799515 + -0.818915 0.897514 -2.9108 0.664699 -0.307494 0.680898 + -0.801264 0.905924 -2.92711 0.874166 -0.203711 0.440836 + -0.848297 1.00313 -2.84221 0.107195 -0.464102 0.879272 + -0.841954 0.890798 -2.89992 0.0966079 -0.440808 0.892387 + -0.833718 0.777782 -2.95507 0.095437 -0.399929 0.911564 + -0.826877 0.779219 -2.95694 0.466962 -0.338023 0.817121 + -0.815256 0.783538 -2.96471 0.665399 -0.278073 0.692762 + -0.875466 1.00218 -2.84643 -0.198566 -0.479279 0.854905 + -0.859798 0.890231 -2.90282 -0.202535 -0.45191 0.868767 + -0.893016 0.891206 -2.91318 -0.444824 -0.444226 0.777685 + -0.871462 0.777799 -2.96418 -0.445752 -0.408124 0.796706 + -0.851562 0.777212 -2.95797 -0.210514 -0.411461 0.886783 + -0.91125 0.894913 -2.92662 -0.755978 -0.381665 0.531816 + -0.889696 0.781507 -2.97762 -0.762165 -0.364953 0.53471 + -0.872875 0.707806 -3.00101 -0.774018 -0.304332 0.555228 + -0.861211 0.705433 -2.99241 -0.469271 -0.289304 0.834319 + -0.841311 0.704848 -2.9862 -0.220981 -0.267276 0.93794 + -0.932878 1.00905 -2.87791 -0.77868 -0.387517 0.493445 + -0.923644 0.903215 -2.94988 -0.945361 -0.269203 0.183908 + -0.897121 0.78648 -2.99155 -0.943409 -0.276693 0.18281 + -0.8803 0.712776 -3.01494 -0.944125 -0.288983 0.158481 + -0.945272 1.01735 -2.90117 -0.952154 -0.248534 0.177858 + -0.925618 0.910994 -2.96936 -0.976745 -0.152146 -0.151068 + -0.899094 0.794259 -3.01104 -0.970179 -0.17407 -0.168677 + -0.881562 0.717753 -3.02741 -0.947249 -0.24901 -0.201775 + -0.948089 1.0292 -2.93081 -0.984171 -0.107365 -0.140996 + -0.918159 0.922154 -2.99485 -0.910556 -0.0551202 -0.409694 + -0.894626 0.800945 -3.02631 -0.902355 -0.0911458 -0.421246 + -0.877095 0.72444 -3.04267 -0.859735 -0.20941 -0.465836 + -0.94063 1.04036 -2.9563 -0.944878 -0.0718342 -0.319445 + -0.910284 0.928679 -3.0089 -0.769099 0.0239422 -0.63868 + -0.886751 0.807467 -3.04036 -0.75314 -0.0109761 -0.657769 + -0.872057 0.728612 -3.05166 -0.701856 -0.167027 -0.692459 + -0.965306 1.15935 -2.92069 -0.973982 -0.126356 -0.18813 + -0.957508 1.16939 -2.94333 -0.886139 -0.0530251 -0.460376 + -0.932832 1.0504 -2.97894 -0.810818 0.000326564 -0.585298 + -0.898042 0.933835 -3.01856 -0.471304 0.125816 -0.872951 + -0.879417 0.810558 -3.04614 -0.465475 0.084202 -0.881046 + -0.98095 1.249 -2.89075 -0.980846 -0.153496 -0.119916 + -0.973979 1.25621 -2.92398 -0.908819 -0.0870864 -0.408 + -0.94395 1.17894 -2.96344 -0.635531 0.0442598 -0.770806 + -0.920591 1.05555 -2.98861 -0.53069 0.0996473 -0.841688 + -0.880745 0.937452 -3.02325 -0.197101 0.180046 -0.963709 + -0.991593 1.30264 -2.87929 -0.983016 -0.1495 -0.106435 + -0.984621 1.30985 -2.91253 -0.91517 -0.0696551 -0.397003 + -0.960421 1.26577 -2.94409 -0.657008 0.0139924 -0.753753 + -0.916401 1.18623 -2.97462 -0.328534 0.116524 -0.937277 + -0.893041 1.06284 -2.99979 -0.242959 0.152349 -0.957998 + -1.003 1.3773 -2.86079 -0.990521 -0.0897947 -0.103947 + -0.994655 1.36584 -2.89536 -0.927406 -0.0223782 -0.373387 + -0.967627 1.31704 -2.93891 -0.662031 0.0267576 -0.748999 + -0.930838 1.33198 -2.95569 -0.323075 0.100271 -0.941046 + -0.923632 1.28072 -2.96087 -0.343138 0.0765542 -0.93616 + -1.00287 1.45872 -2.86952 -0.91665 0.0707902 -0.393373 + -0.977661 1.37303 -2.92174 -0.735059 0.0779156 -0.673512 + -0.942147 1.39065 -2.9436 -0.374008 0.15113 -0.915029 + -0.867606 1.36449 -2.96342 0.0916473 0.176359 -0.98005 + -0.870262 1.29124 -2.97378 0.0425137 0.1387 -0.989422 + -0.996841 1.49407 -2.87139 -0.875051 0.214786 -0.433765 + -0.971629 1.40838 -2.92362 -0.655032 0.127388 -0.744786 + -0.941046 1.48951 -2.92284 -0.281737 0.277741 -0.918414 + -0.878915 1.42316 -2.95133 0.0809528 0.247303 -0.965551 + -0.970527 1.50724 -2.90286 -0.6206 0.297853 -0.725354 + -0.934877 1.53478 -2.90699 -0.140902 0.493199 -0.858429 + -0.964448 1.56129 -2.87568 -0.553006 0.556796 -0.619809 + -0.917472 1.57171 -2.88019 -0.191852 0.567192 -0.800928 + -0.898511 1.25175 -2.09719 0.892978 0.346908 -0.286786 + -0.893679 1.25709 -2.07569 0.456797 0.847666 -0.269812 + -0.883033 1.24766 -2.05395 0.832686 0.550594 0.0589866 + -0.896025 1.26076 -1.99076 0.631475 0.700116 0.333281 + -0.87489 1.21524 -1.98255 0.885859 0.24839 0.391863 + -0.866728 1.19559 -2.00045 0.974383 -0.00889473 0.22472 + -0.874871 1.22801 -2.07185 0.952748 0.274217 0.130675 + -0.871571 1.24751 -2.11555 0.864158 0.412797 0.2878 + -0.88557 1.27604 -2.1347 0.391807 0.787321 0.476039 + -0.906671 1.27018 -2.01251 0.324928 0.94425 -0.0530492 + -0.919716 1.27212 -2.00414 0.0949342 0.98965 0.107614 + -0.930917 1.25764 -1.96193 0.041314 0.776417 0.628863 + -0.91676 1.24203 -1.95501 0.407149 0.495529 0.767255 + -0.917472 1.25296 -2.06952 -0.14029 0.958992 -0.246279 + -0.930517 1.25489 -2.06115 0.0215812 0.955997 -0.292583 + -0.93684 1.25535 -2.06139 0.0257109 0.946378 -0.322037 + -0.941049 1.27345 -2.01668 0.00362017 0.997321 -0.0730553 + -0.95225 1.25897 -1.97446 -0.272476 0.840383 0.468522 + -0.898511 1.25175 -2.09719 -0.201253 0.971477 -0.125416 + -0.922304 1.24762 -2.09102 -0.146563 0.989199 0.00198903 + -0.932343 1.24639 -2.08904 -0.0239433 0.997775 -0.0622208 + -0.938666 1.24684 -2.08927 0.0369946 0.996177 -0.0791387 + -0.956727 1.2527 -2.06544 -0.04595 0.963301 -0.264462 + -0.960936 1.27081 -2.02073 -0.272243 0.959653 -0.0703551 + -0.926001 1.24885 -2.0985 -0.0964539 0.902875 0.418943 + -0.93604 1.24762 -2.09652 -0.0170284 0.960047 0.27932 + -0.950931 1.24801 -2.0982 -0.00550002 0.955936 0.293523 + -0.953558 1.24724 -2.09095 0.0209443 0.998688 -0.0467285 + -0.952937 1.25444 -2.11069 -0.0586869 0.834614 0.5477 + -0.978095 1.2481 -2.099 0.0441309 0.958969 0.280053 + -0.979279 1.24761 -2.09173 0.0563735 0.996304 -0.0648139 + -0.982449 1.25307 -2.06622 -0.0417126 0.989159 -0.140798 + -0.987106 1.25807 -2.02339 -0.273993 0.961183 0.0324747 + -0.940629 1.26583 -2.12249 -0.114706 0.774715 0.62182 + -0.975395 1.27283 -2.13765 -9.02355e-005 0.779726 0.626121 + -0.980101 1.25453 -2.11149 0.10135 0.862903 0.495103 + -0.991501 1.26042 -2.1175 0.265802 0.787418 0.556167 + -0.994803 1.24965 -2.09998 0.293211 0.90135 0.318739 + -0.963088 1.28421 -2.14945 -0.11339 0.75338 0.647735 + -0.986795 1.27872 -2.14366 0.209386 0.77013 0.602542 + -0.898511 1.25175 -2.09719 -0.111811 0.777643 0.618684 + 1.05117 1.12715 -1.90057 0.0662268 -0.171641 0.982931 + 1.04301 1.16262 -1.8932 -0.138049 -0.0522402 0.989047 + 0.980129 1.18837 -1.91784 -0.447262 -0.27944 0.849629 + 1.1199 1.17478 -1.91371 0.473942 0.0978725 0.8751 + 1.08924 1.19869 -1.90469 0.378253 0.22797 0.897193 + 1.06864 1.19787 -1.89697 0.107883 0.209246 0.971894 + 1.04118 1.20698 -1.90796 -0.452956 0.493767 0.742311 + 1.12806 1.13932 -1.92108 0.477789 -0.115971 0.870786 + 1.17441 1.14361 -1.95867 0.801182 0.0679804 0.594547 + 1.15065 1.19284 -1.94371 0.707235 0.395257 0.586166 + 1.07232 1.09107 -1.91115 0.115185 -0.388734 0.914122 + 1.13452 1.09271 -1.93472 0.483907 -0.298475 0.822646 + 1.18087 1.097 -1.97232 0.776563 -0.162315 0.608773 + 0.989426 1.13764 -1.89975 -0.246098 -0.111477 0.962813 + 1.01057 1.10156 -1.91032 -0.255411 -0.553567 0.792672 + 1.00457 1.08538 -1.93131 -0.418346 -0.632369 0.651994 + 1.07934 1.04655 -1.93878 0.0810999 -0.591904 0.801918 + 1.14155 1.04819 -1.96235 0.443516 -0.50213 0.742401 + 0.980129 1.18837 -1.91784 0.134531 0.540413 0.830575 + 0.965973 1.17276 -1.91092 -0.227417 0.232093 0.945735 + 0.919078 1.1614 -1.93562 -0.60827 -0.306227 0.732279 + 0.913074 1.14522 -1.9566 -0.686922 -0.514411 0.513342 + 0.91676 1.24203 -1.95501 -0.407155 0.495529 0.767252 + 0.895625 1.19651 -1.94679 -0.726461 0.0217994 0.686862 + 0.930917 1.25764 -1.96193 -0.041317 0.776415 0.628866 + 0.896025 1.26076 -1.99076 -0.631476 0.700117 0.333279 + 0.87489 1.21524 -1.98255 -0.888637 0.207783 0.408842 + 0.95225 1.25897 -1.97446 0.272492 0.840374 0.468529 + 0.941049 1.27345 -2.01668 0.00364353 0.997716 -0.0674545 + 0.919716 1.27212 -2.00414 -0.0962171 0.989277 0.109874 + 0.906671 1.27018 -2.01251 -0.324939 0.944246 -0.0530534 + 0.883033 1.24766 -2.05395 -0.832981 0.550264 0.0578914 + 0.995964 1.18457 -1.9229 0.354686 0.701349 0.61831 + 0.968084 1.25517 -1.97953 0.38769 0.803675 0.451446 + 0.960936 1.27081 -2.02073 0.244574 0.969016 -0.0345248 + 0.93684 1.25535 -2.06139 -0.0150176 0.941578 -0.33646 + 0.930517 1.25489 -2.06115 -0.0327555 0.950541 -0.308867 + 1.00645 1.17926 -1.92269 -0.070925 0.843162 0.532962 + 1.00474 1.23713 -1.98197 0.164995 0.700408 0.69441 + 0.994254 1.24243 -1.98218 0.308637 0.761385 0.570119 + 0.987106 1.25807 -2.02339 0.260051 0.96521 0.0272653 + 0.982449 1.25307 -2.06622 0.0808846 0.977999 -0.19229 + 0.956727 1.2527 -2.06544 0.00781325 0.953414 -0.301562 + 1.01002 1.23395 -1.97869 -0.313765 0.690069 0.652194 + 1.01179 1.25355 -1.99836 -0.302507 0.6774 0.670536 + 1.00651 1.25674 -2.00165 -0.136821 0.917672 0.373039 + 1.00371 1.25545 -2.02439 0.0084103 0.996068 -0.0881855 + 0.999056 1.25046 -2.06722 0.00821282 0.996386 -0.0845421 + 1.01913 1.22641 -1.96018 -0.62756 0.583376 0.515598 + 1.02713 1.2549 -1.9832 -0.604268 0.609424 0.513286 + 1.02889 1.25904 -1.98622 -0.58748 0.689504 0.423616 + 1.01355 1.2577 -2.00138 -0.396477 0.847567 0.352755 + 1.01075 1.25642 -2.02412 -0.391076 0.919622 -0.0368149 + 1.04919 1.23547 -1.93097 -0.53378 0.63185 0.562001 + 0.980129 1.18837 -1.91784 0.353085 0.914284 0.198533 + -0.265027 1.74133 -3.37072 0.608582 0.176412 0.773632 + -0.261467 1.75486 -3.37977 0.405413 0.43226 0.805476 + -0.286397 1.7575 -3.36864 0.37424 0.926179 -0.046233 + -0.289957 1.74398 -3.35959 0.454078 0.191852 0.870061 + -0.290079 1.69202 -3.35677 0.531317 0.0558839 0.845328 + -0.263388 1.66691 -3.37811 0.721112 -0.0194369 0.692546 + -0.250973 1.65474 -3.39333 0.941656 -0.0536991 0.332266 + -0.252611 1.72917 -3.38594 0.965166 0.24466 -0.0927086 + -0.261467 1.75486 -3.37977 0.821733 0.151318 0.549415 + -0.311519 1.7617 -3.35095 0.347925 0.550309 0.759018 + -0.311641 1.70974 -3.34812 0.366798 0.103597 0.924514 + -0.298838 1.64784 -3.34424 0.595801 0.192498 0.779721 + -0.319147 1.76774 -3.36248 0.229633 0.931589 -0.281798 + -0.337551 1.76806 -3.34796 0.2119 0.658287 0.722327 + -0.363175 1.76019 -3.33739 0.202236 0.59766 0.775824 + -0.337265 1.70187 -3.33755 0.372538 0.188176 0.908738 + -0.302376 1.7471 -3.37552 0.0828534 0.576953 -0.812564 + -0.342152 1.73389 -3.39425 -0.0644843 0.58809 -0.806221 + -0.345179 1.7741 -3.35949 -0.0419621 0.979265 -0.198189 + -0.278095 1.69156 -3.41165 0.165581 0.444574 -0.880305 + -0.325381 1.71326 -3.40729 0.0546254 0.531179 -0.845497 + -0.373982 1.66906 -3.42415 -0.270237 0.446519 -0.85299 + -0.36635 1.72855 -3.39056 -0.288517 0.550972 -0.783063 + -0.369377 1.76876 -3.3558 -0.258623 0.940838 -0.218947 + -0.262116 1.70196 -3.40477 0.256435 0.427005 -0.867126 + -0.265668 1.59394 -3.44147 0.665034 0.156589 -0.730212 + -0.285878 1.6439 -3.43792 0.360814 0.369512 -0.856314 + -0.333165 1.6656 -3.43356 -0.0260002 0.439998 -0.897622 + -0.261467 1.75486 -3.37977 -0.336333 0.405795 -0.84983 + -0.261467 1.75486 -3.37977 0.508502 0.36284 -0.78088 + -0.25326 1.67627 -3.41094 0.757799 0.207451 -0.618631 + -0.251006 1.6008 -3.4046 0.985798 -0.00604765 0.167825 + -0.253294 1.62233 -3.42221 0.907878 0.0770128 -0.412101 + -0.254886 1.56206 -3.39721 0.93169 -0.0672253 0.35698 + -0.252745 1.5134 -3.43101 0.971276 -0.0195466 -0.237152 + -0.26512 1.48501 -3.45027 0.719997 0.00756946 -0.693936 + -0.272148 1.62272 -3.36558 0.792666 0.0339366 0.608711 + -0.275901 1.5648 -3.36241 0.824765 -0.0536535 0.562925 + -0.268812 1.46739 -3.39265 0.89524 -0.119957 0.429134 + -0.256625 1.47467 -3.42362 0.987255 -0.12629 0.0968424 + -0.267812 1.42086 -3.44995 0.835022 -0.127189 -0.535314 + -0.312908 1.59752 -3.31389 0.635482 0.133297 0.760522 + -0.316661 1.5396 -3.31073 0.701162 -0.0253243 0.712552 + -0.289828 1.47013 -3.35786 0.830505 -0.0954493 0.548773 + -0.29734 1.40521 -3.35865 0.844437 -0.131489 0.519265 + -0.275158 1.41654 -3.39595 0.903332 -0.150612 0.401632 + -0.332826 1.64955 -3.32398 0.443863 0.315853 0.838584 + -0.346895 1.59923 -3.29364 0.408375 0.217354 0.886559 + -0.352689 1.52951 -3.28365 0.441666 0.0273881 0.896761 + -0.326163 1.45287 -3.30861 0.718472 -0.0810191 0.690821 + -0.333676 1.38795 -3.30941 0.697126 -0.11975 0.706877 + -0.393265 1.6544 -3.30009 0.323102 0.306307 0.895422 + -0.377439 1.60125 -3.28521 0.286481 0.228842 0.930355 + -0.383233 1.53154 -3.27522 0.206028 0.01021 0.978493 + -0.362191 1.44278 -3.28154 0.320038 -0.0850304 0.943581 + -0.367138 1.38005 -3.28699 0.280995 -0.151444 0.947685 + -0.397704 1.70673 -3.31366 0.366105 0.188659 0.911249 + -0.423719 1.64686 -3.28781 0.262929 0.284979 0.921768 + -0.407894 1.59371 -3.27293 0.248335 0.179211 0.951952 + -0.407762 1.54644 -3.27043 0.198923 0.00279423 0.980011 + -0.398662 1.44285 -3.2826 -0.0962749 -0.153384 0.983466 + -0.387798 1.75425 -3.32289 0.356258 0.527686 0.771121 + -0.418806 1.75845 -3.31183 0.162655 0.640958 0.750144 + -0.428712 1.71092 -3.3026 0.303439 0.181344 0.935435 + -0.437086 1.67696 -3.29285 0.260686 0.234293 0.936563 + -0.438935 1.59252 -3.26779 -0.238769 0.0619927 0.969096 + -0.393999 1.76282 -3.34131 -0.18787 0.973892 -0.127437 + -0.419446 1.76383 -3.32485 -0.140627 0.986581 -0.0829547 + -0.453626 1.75346 -3.31585 -0.603686 0.793128 -0.0806886 + -0.452985 1.74807 -3.30283 -0.393021 0.548496 0.738029 + -0.461359 1.71412 -3.29308 -0.361702 0.314179 0.87776 + -0.405828 1.73146 -3.37114 -0.413503 0.563814 -0.714932 + -0.431275 1.73247 -3.35469 -0.483916 0.569356 -0.664575 + -0.443239 1.71002 -3.36003 -0.612301 0.366396 -0.7006 + -0.46559 1.73101 -3.32119 -0.900693 0.383894 -0.203414 + -0.413459 1.67197 -3.40473 -0.526387 0.42897 -0.734099 + -0.443485 1.65151 -3.38545 -0.702603 0.314714 -0.638204 + -0.421977 1.58169 -3.44311 -0.531918 0.323934 -0.782387 + -0.452003 1.56124 -3.42383 -0.794192 0.255368 -0.551404 + -0.473777 1.52375 -3.39233 -0.94315 0.132378 -0.304867 + -0.467549 1.61552 -3.37163 -0.874239 0.167728 -0.455603 + -0.467302 1.67403 -3.34621 -0.90584 0.185067 -0.381056 + -0.387188 1.59292 -3.45548 -0.302176 0.349149 -0.887009 + -0.392478 1.51526 -3.47722 -0.2913 0.202795 -0.934889 + -0.427267 1.50404 -3.46484 -0.502611 0.155071 -0.850491 + -0.451868 1.50135 -3.44542 -0.758451 0.141644 -0.636152 + -0.346372 1.58946 -3.46489 -0.0950784 0.336429 -0.936897 + -0.356547 1.51892 -3.48286 -0.0839514 0.180585 -0.97997 + -0.392487 1.43292 -3.48973 -0.33083 0.0638047 -0.941531 + -0.42669 1.44214 -3.46954 -0.549193 0.0463773 -0.834408 + -0.451292 1.43946 -3.45012 -0.760532 -0.0217099 -0.648938 + -0.304657 1.58899 -3.46638 0.209098 0.325753 -0.922043 + -0.314833 1.51845 -3.48435 0.19791 0.0728223 -0.977511 + -0.323541 1.44968 -3.48392 0.346154 0.0167443 -0.938028 + -0.356556 1.43658 -3.49537 0.0757598 0.0630933 -0.995128 + -0.284447 1.53902 -3.46994 0.677107 0.0315538 -0.735207 + -0.293155 1.47025 -3.46951 0.528596 -0.0304665 -0.848327 + -0.295847 1.40611 -3.46918 0.543833 -0.0629988 -0.836826 + -0.323849 1.39324 -3.48339 0.405857 -0.054603 -0.912304 + -0.356864 1.38014 -3.49484 0.111892 -0.0929572 -0.989363 + -0.276146 1.37933 -3.44706 0.879099 -0.128788 -0.45891 + -0.290122 1.36875 -3.46237 0.644369 -0.0930436 -0.759034 + -0.318124 1.35588 -3.47658 0.420436 -0.128133 -0.898229 + -0.26297 1.42381 -3.42693 0.985584 -0.15623 0.0649388 + -0.271304 1.38229 -3.42404 0.987079 -0.140247 0.0774975 + -0.278449 1.29525 -3.41344 0.992734 -0.0508365 0.109065 + -0.281624 1.29572 -3.43696 0.913391 -0.110583 -0.391776 + -0.295601 1.28513 -3.45226 0.648705 -0.135066 -0.748958 + -0.281762 1.37604 -3.39747 0.904234 -0.0957594 0.416163 + -0.288907 1.28901 -3.38686 0.889855 0.0141175 0.456024 + -0.293574 1.15781 -3.36481 0.923363 -0.00195039 0.383922 + -0.287422 1.16036 -3.39442 0.996868 -0.0725267 0.0315257 + -0.290597 1.16082 -3.41794 0.920458 -0.13103 -0.368224 + -0.303945 1.36472 -3.36017 0.849301 -0.0899559 0.520188 + -0.307281 1.28333 -3.3581 0.824663 0.0103439 0.565529 + -0.311948 1.15213 -3.33605 0.694553 0.0583915 0.717068 + -0.317682 1.04499 -3.32682 0.684034 0.017217 0.729247 + -0.303511 1.04582 -3.34643 0.915049 -0.042819 0.401063 + -0.333694 1.3502 -3.31774 0.711332 -0.0949383 0.696415 + -0.33703 1.26882 -3.31568 0.63988 -0.0218807 0.768163 + -0.339085 1.15273 -3.31962 0.486193 0.0284324 0.873389 + -0.344819 1.04559 -3.31039 0.36838 0.0573657 0.927904 + -0.367156 1.34229 -3.29532 0.287706 -0.143707 0.946876 + -0.365862 1.26606 -3.30244 0.209757 -0.0547727 0.976218 + -0.367918 1.14997 -3.30638 0.122155 -0.0125416 0.992432 + -0.367929 1.04705 -3.30553 0.0293487 0.0568498 0.997951 + -0.348894 0.95487 -3.30343 0.37192 0.0454904 0.927149 + -0.398451 1.34236 -3.29623 -0.348792 -0.155851 0.924151 + -0.397157 1.26612 -3.30336 -0.320237 -0.0827486 0.943716 + -0.395067 1.15279 -3.31141 -0.377308 -0.0158285 0.925952 + -0.395078 1.04987 -3.31056 -0.337019 0.0398671 0.940654 + -0.403609 1.38012 -3.28805 -0.351364 -0.195463 0.915608 + -0.435699 1.3942 -3.31337 -0.791835 -0.244577 0.559624 + -0.43054 1.35643 -3.32155 -0.783858 -0.151577 0.602155 + -0.422927 1.27418 -3.32113 -0.733292 -0.0584317 0.677398 + -0.439204 1.43827 -3.29809 -0.703119 -0.257571 0.662783 + -0.468309 1.42442 -3.36681 -0.956274 -0.17538 0.234055 + -0.458523 1.38237 -3.36741 -0.946108 -0.159846 0.281653 + -0.450909 1.30012 -3.36699 -0.942399 -0.0715862 0.32674 + -0.423191 1.45776 -3.27781 -0.265779 -0.304789 0.914585 + -0.454815 1.52576 -3.28556 -0.817729 -0.140938 0.558082 + -0.471814 1.4685 -3.35154 -0.951706 -0.172839 0.253736 + -0.473642 1.46386 -3.41391 -0.958757 -0.00928643 -0.284076 + -0.473075 1.42713 -3.40846 -0.978893 -0.117253 -0.167392 + -0.438802 1.54524 -3.26529 -0.356851 -0.0418794 0.933222 + -0.463609 1.56642 -3.29648 -0.895441 -0.0418163 0.443212 + -0.480608 1.50917 -3.36245 -0.997003 -0.0356092 0.0686778 + 0.302376 1.7471 -3.37552 0.605009 0.546625 0.578934 + 0.286397 1.7575 -3.36864 -0.0282659 0.550726 0.834208 + 0.289957 1.74398 -3.35959 -0.378524 0.394632 0.837249 + 0.265027 1.74133 -3.37072 -0.592574 0.151185 0.791201 + 0.263388 1.66691 -3.37811 -0.712373 0.0100714 0.701729 + 0.290079 1.69202 -3.35677 -0.572382 0.0871925 0.815338 + 0.311641 1.70974 -3.34812 -0.376733 0.12915 0.917274 + 0.311519 1.7617 -3.35095 -0.518698 0.59519 0.61376 + 0.302376 1.7471 -3.37552 -0.251226 0.674389 -0.694324 + 0.261467 1.75486 -3.37977 -0.405413 0.43226 0.805476 + 0.261467 1.75486 -3.37977 -0.508502 0.36284 -0.78088 + 0.262116 1.70196 -3.40477 -0.255932 0.424602 -0.868454 + 0.252611 1.72917 -3.38594 -0.965163 0.244672 -0.0927199 + 0.25326 1.67627 -3.41094 -0.722976 0.175062 -0.668325 + 0.250973 1.65474 -3.39333 -0.960679 -0.00159407 0.277656 + 0.261467 1.75486 -3.37977 -0.821733 0.151318 0.549415 + 0.278095 1.69156 -3.41165 -0.176609 0.433651 -0.883604 + 0.253294 1.62233 -3.42221 -0.856372 0.149487 -0.494248 + 0.251006 1.6008 -3.4046 -0.985186 -0.0272702 0.169307 + 0.275901 1.5648 -3.36241 -0.826746 -0.0530138 0.560071 + 0.272148 1.62272 -3.36558 -0.763999 0.0393004 0.64402 + 0.325381 1.71326 -3.40729 -0.0754329 0.536348 -0.840619 + 0.333165 1.6656 -3.43356 0.0310609 0.447888 -0.89355 + 0.285878 1.6439 -3.43792 -0.356144 0.377426 -0.854816 + 0.286397 1.7575 -3.36864 0.142721 0.49512 -0.857022 + 0.261467 1.75486 -3.37977 0.336333 0.405795 -0.84983 + 2.04758 1.79087 -0.419637 -0.249284 0.966606 0.0594206 + 2.06611 1.79246 -0.363198 -0.316726 0.945977 0.0693761 + 2.05691 1.78848 -0.509912 -0.00432426 0.999631 -0.0268118 + 2.03494 1.76178 -0.21826 -0.450717 0.892185 -0.0293273 + 2.0868 1.79252 -0.279496 -0.396395 0.918036 0.00894935 + 2.10728 1.79865 -0.302325 0.225013 0.960324 -0.164764 + 2.08659 1.79868 -0.385977 0.450068 0.868791 -0.206496 + 2.05691 1.78848 -0.509912 -0.298098 0.954508 -0.00716793 + 2.01641 1.76019 -0.274698 -0.646056 0.744558 0.168059 + 1.99292 1.73621 -0.301369 -0.834937 0.550078 0.0171822 + 2.05739 1.77861 -0.145405 -0.149682 0.942619 -0.298437 + 2.10924 1.80934 -0.206632 -0.48522 0.868103 -0.104686 + 2.13002 1.81455 -0.230656 0.10985 0.941445 -0.31877 + 2.01201 1.78593 -0.505683 -0.647752 0.745353 0.157689 + 1.98853 1.76195 -0.532355 -0.808373 0.563605 0.169948 + 2.05701 1.81152 -0.487006 -0.605781 0.768424 0.206288 + 2.02145 1.80658 -0.573053 -0.684981 0.658453 0.311834 + 1.95822 1.80145 -0.69817 -0.902349 0.239872 0.358089 + 1.95457 1.72805 -0.596037 -0.882649 0.420461 0.210103 + 2.05368 1.84205 -0.544286 -0.816998 0.44394 0.368009 + 2.04962 1.87449 -0.581082 -0.807561 0.34688 0.47699 + 2.01739 1.83903 -0.60986 -0.801433 0.276898 0.530125 + 2.04145 1.94214 -0.633857 -0.509342 0.297551 0.807486 + 1.99541 2.02753 -0.68675 -0.451245 0.240122 0.859488 + 1.97135 1.9245 -0.662693 -0.66393 0.110395 0.739601 + 1.99534 2.10094 -0.703895 0.0674122 0.297012 0.952491 + 1.86547 2.21636 -0.792618 -0.671514 0.080592 0.736596 + 1.84979 2.19327 -0.819613 -0.869377 -0.115087 0.480561 + 1.95567 1.90131 -0.689739 -0.912574 -0.0905374 0.398763 + 1.86541 2.28977 -0.809761 -0.103607 0.135346 0.985366 + 1.83866 2.42426 -0.82771 -0.676891 -0.0164193 0.7359 + 1.81648 2.20599 -0.877656 -0.814349 -0.118305 0.56819 + 1.93269 1.9349 -0.794719 -0.938157 -0.168725 0.302311 + 1.93524 1.83504 -0.80315 -0.745945 0.469677 0.472197 + 1.97011 2.21519 -0.731785 -0.441618 0.0311642 0.896662 + 1.94336 2.34968 -0.749733 -0.608066 -0.0518974 0.792188 + 2.02648 2.0249 -0.695197 0.977184 0.208644 0.0397491 + 2.00125 2.13916 -0.723096 0.869589 0.265344 0.416423 + 1.9866 2.29243 -0.724362 -0.495486 -0.0100094 0.868559 + 1.92042 2.52582 -0.743409 -0.584158 8.24479e-005 0.81164 + 1.86427 2.60485 -0.810302 -0.717714 0.0241957 0.695918 + 2.04085 1.94543 -0.658947 0.97875 0.0890772 -0.184696 + 2.00071 1.93192 -0.74635 0.907332 -0.018104 -0.420025 + 1.9952 2.15733 -0.756969 0.955995 0.0692947 -0.285084 + 1.98055 2.3106 -0.758235 0.964562 0.107044 -0.241166 + 1.9866 2.29243 -0.724362 0.987131 0.106805 -0.119018 + 1.96367 2.46847 -0.718087 0.967344 0.154519 -0.200921 + 2.04145 1.94214 -0.633857 0.986129 0.165973 -0.00186748 + 2.04902 1.87778 -0.606172 0.989278 -0.00254245 -0.14602 + 2.01508 1.85244 -0.710092 0.952747 -0.0137097 -0.303456 + 1.97115 1.95368 -0.81144 0.928207 0.0460719 -0.3692 + 1.96563 2.17909 -0.822059 0.910113 0.0404235 -0.412383 + 2.04962 1.87449 -0.581082 0.996867 0.0760077 -0.0218788 + 2.05358 1.81893 -0.567241 0.987726 -0.0195535 -0.154965 + 2.01964 1.79368 -0.671101 0.979189 -0.00273165 -0.202932 + 2.01547 1.73294 -0.734101 0.969893 0.14779 -0.193558 + 1.9663 1.86477 -0.850038 0.956227 0.138399 -0.257828 + 1.9045 2.14994 -0.949971 0.922767 0.0635816 -0.380076 + 2.05368 1.84205 -0.544286 0.997817 0.044314 -0.048968 + 2.05691 1.78848 -0.509912 0.984295 0.0710033 -0.161622 + 1.96367 2.46847 -0.718087 -0.561329 -0.0588435 0.825498 + 1.94728 2.53942 -0.740764 -0.15 0.105041 0.98309 + 1.93692 2.63864 -0.741815 0.92548 -0.00228058 0.37879 + 1.93078 2.6463 -0.737484 -0.10585 0.0512121 0.993062 + 1.87462 2.72542 -0.804329 -0.601269 0.302205 0.739694 + 1.84108 2.75625 -0.85193 -0.678126 0.368373 0.635961 + 1.81909 2.66232 -0.855642 -0.752589 0.108002 0.649574 + 1.93854 2.71913 -0.745837 0.949914 0.201573 0.238813 + 1.93239 2.72679 -0.741506 0.819548 0.497016 0.28516 + 1.90746 2.75606 -0.820608 0.903148 0.362832 -0.229514 + 1.90131 2.76364 -0.816327 0.21572 0.852988 0.475263 + 1.91067 2.6755 -0.81607 0.927014 0.037004 -0.373197 + 1.88433 2.6978 -0.875887 0.907588 0.0219838 -0.419285 + 1.88111 2.77836 -0.880432 0.891321 0.337764 -0.302427 + 1.94728 2.53942 -0.740764 0.955538 0.142827 -0.257968 + 1.92103 2.57619 -0.81506 0.933266 0.123653 -0.337229 + 1.8688 2.6436 -0.913422 0.901446 0.0778739 -0.42583 + 1.84788 2.75571 -0.943395 0.84028 0.151041 -0.520688 + 1.96416 2.38154 -0.780912 0.945128 0.137359 -0.296422 + 1.94617 2.36492 -0.83112 0.907722 0.112059 -0.404332 + 1.90304 2.55966 -0.865218 0.903324 0.130819 -0.408524 + 1.84113 2.55759 -0.989435 0.879284 0.090636 -0.467594 + 1.83235 2.70152 -0.98093 0.841532 0.127519 -0.52494 + 1.94017 2.29025 -0.862401 0.903979 0.0835848 -0.419328 + 1.87537 2.47364 -0.941231 0.8806 0.111494 -0.460556 + 1.82428 2.46175 -1.03645 0.878147 0.110511 -0.465451 + 1.8116 2.64031 -1.02712 0.812591 0.13374 -0.567282 + 1.87904 2.26111 -0.990322 0.876491 0.0896242 -0.473002 + 1.86936 2.39898 -0.972522 0.873941 0.123227 -0.470151 + 1.83396 2.32389 -1.05426 0.836788 0.118065 -0.534646 + 1.79476 2.54448 -1.07413 0.771538 0.117822 -0.625177 + 1.89966 2.06103 -0.988568 0.933014 0.14294 -0.330233 + 1.97308 1.77805 -0.900439 0.956211 0.154462 -0.2486 + 1.90809 1.96695 -1.02102 0.929627 0.168928 -0.3275 + 1.84003 2.13082 -1.11226 0.842112 0.187269 -0.505745 + 1.8316 2.22491 -1.07981 0.875838 0.165954 -0.453175 + 1.77241 2.45597 -1.10923 0.711894 0.120935 -0.691796 + 2.02224 1.64622 -0.784511 0.954705 0.186192 -0.232099 + 1.96957 1.69115 -0.948727 0.945285 0.131515 -0.298563 + 1.90458 1.88014 -1.06926 0.898545 0.12779 -0.419866 + 1.83533 2.04015 -1.14441 0.814819 0.165328 -0.555641 + 2.05874 1.57734 -0.692196 0.955637 0.220504 -0.195282 + 2.06228 1.48826 -0.746906 0.959337 0.133581 -0.248655 + 2.02579 1.55705 -0.839262 0.947982 0.153683 -0.278768 + 1.96564 1.60198 -0.996678 0.927121 0.126419 -0.352796 + 2.04671 1.65056 -0.619819 0.961811 0.219504 -0.163514 + 2.0836 1.60426 -0.499617 0.944556 0.227231 -0.237024 + 2.09564 1.53103 -0.571994 0.962523 0.206975 -0.175247 + 2.09122 1.45139 -0.640447 0.975894 0.0889762 -0.199283 + 2.06073 1.38864 -0.790966 0.960789 0.118105 -0.250872 + 2.05087 1.7113 -0.556819 0.97071 0.08963 -0.222909 + 2.08045 1.67933 -0.46125 0.941754 0.153503 -0.299225 + 2.13379 1.6011 -0.367149 0.923814 0.167903 -0.34406 + 2.12301 1.50724 -0.430988 0.935587 0.191822 -0.296449 + 2.11859 1.42768 -0.499382 0.982869 0.038253 -0.180294 + 1.30253 1.11291 -1.43659 -0.820237 0.429347 0.377985 + 1.24544 1.07804 -1.44958 -0.173027 -0.082297 0.981473 + 1.26037 1.02438 -1.45144 -0.700595 -0.0458828 0.712082 + 1.3426 1.16556 -1.41618 -0.820964 0.52714 0.219409 + 1.3456 1.16561 -1.50585 -0.810721 0.564313 -0.155826 + 1.26874 1.04947 -1.46391 -0.478295 0.655899 -0.583979 + 1.24544 1.07804 -1.44958 -0.0479991 0.416655 -0.907797 + 1.33891 1.09936 -1.36652 -0.778355 0.197498 0.595952 + 1.39323 1.22173 -1.37206 -0.831872 0.518805 0.197055 + 1.38567 1.21834 -1.48539 -0.718961 0.690609 -0.078447 + 1.40949 1.225 -1.56412 -0.608212 0.750192 -0.259402 + 1.35337 1.16552 -1.5321 -0.822267 0.493318 -0.28375 + 1.31526 1.03417 -1.3908 -0.737079 -0.00556368 0.675784 + 1.38245 1.00039 -1.32068 -0.741638 0.0431278 0.669412 + 1.38954 1.15545 -1.32246 -0.800763 0.189376 0.568257 + 1.42804 1.26844 -1.32856 -0.874294 0.46343 0.144372 + 1.42592 1.25813 -1.43972 -0.71915 0.690669 -0.0761482 + 1.31912 0.885883 -1.39596 -0.743856 -0.0551313 0.666062 + 1.3588 0.935104 -1.34501 -0.759096 -0.0387793 0.649823 + 1.43222 0.938435 -1.25338 -0.792483 -0.0251114 0.609377 + 1.41032 1.07485 -1.29766 -0.756665 0.0477295 0.652058 + 1.26424 0.876179 -1.45655 -0.712912 -0.0276757 0.700707 + 1.36481 0.824607 -1.35122 -0.73417 -0.1549 0.66106 + 1.40449 0.873828 -1.30028 -0.767333 -0.0822381 0.635953 + 1.15338 0.931117 -1.57811 -0.750803 -0.0925044 0.654017 + 1.20752 0.861958 -1.50692 -0.735522 0.00278936 0.677495 + 1.26447 0.772444 -1.46028 -0.702389 -0.306301 0.642518 + 1.32119 0.786574 -1.40995 -0.694927 -0.0859872 0.713921 + 1.22106 1.06807 -1.48272 -0.270686 -0.808357 0.522769 + 1.11407 0.974727 -1.60944 -0.586119 -0.266673 0.765082 + 1.05745 0.968945 -1.65383 -0.630711 -0.550673 0.546775 + 1.05439 0.957346 -1.67294 -0.687817 -0.547951 0.476085 + 1.08013 0.917146 -1.67951 -0.745556 -0.464935 0.477475 + 1.10835 0.891593 -1.64305 -0.853496 -0.242545 0.461212 + 1.24544 1.07804 -1.44958 -0.749579 -0.230172 0.620607 + 1.09292 1.01632 -1.59089 -0.442721 -0.5433 0.713318 + 1.03631 1.01054 -1.63527 -0.630817 -0.110333 0.768048 + 0.994771 1.04413 -1.66085 -0.78387 0.19825 0.588425 + 0.99171 1.03263 -1.67992 -0.876001 -0.285815 0.3885 + 1.0238 0.965114 -1.71099 -0.78903 -0.517803 0.330622 + 1.04954 0.924914 -1.71756 -0.744273 -0.545269 0.385667 + 1.05009 1.03581 -1.64904 -0.0977583 0.735303 0.670651 + 1.00856 1.06949 -1.67458 -0.238031 0.660262 0.712317 + 0.969315 1.06119 -1.7084 -0.895747 -0.067017 0.439483 + 1.00141 0.993682 -1.73947 -0.883995 -0.467468 0.00506182 + 1.03953 0.916941 -1.75575 -0.845507 -0.492238 0.206931 + 1.09292 1.01632 -1.59089 -0.526645 0.609847 0.592227 + 0.806559 1.32541 -2.88944 -0.558204 0.564681 0.607901 + 0.806972 1.30427 -2.86942 -0.220093 0.648024 0.729126 + 0.831275 1.27798 -2.82269 -0.239099 0.870245 0.430704 + 0.815389 1.28112 -2.84272 -0.396157 0.70014 0.594023 + 0.812282 1.24475 -2.75953 -0.423957 0.774806 0.468974 + 0.829082 1.2376 -2.73315 -0.299861 0.753459 0.585134 + 0.855869 1.243 -2.7345 -0.191148 0.859784 0.473533 + 0.858063 1.28346 -2.82399 -0.122556 0.90488 0.407643 + 0.81342 1.32127 -2.91208 0.211659 0.926348 0.311577 + 0.765252 1.25011 -2.81322 -0.382628 0.700336 0.602599 + 0.796396 1.24789 -2.77957 -0.449154 0.757355 0.473998 + 0.781786 1.22053 -2.76578 -0.686583 0.412622 0.59862 + 0.802751 1.21632 -2.7361 -0.700208 0.441925 0.560724 + 0.819551 1.20909 -2.70976 -0.648239 0.537428 0.539405 + 0.756835 1.27327 -2.83993 -0.167237 0.642949 0.747428 + 0.740141 1.25385 -2.8313 -0.857479 0.332431 0.392708 + 0.750642 1.22267 -2.79949 -0.816389 0.242884 0.523943 + 0.767105 1.18344 -2.77254 -0.824546 0.0466552 0.563868 + 0.78807 1.17924 -2.74286 -0.819109 0.139 0.556543 + 0.762815 1.34027 -2.88619 -0.0796048 0.626757 0.775138 + 0.746121 1.32086 -2.87756 -0.629411 0.51735 0.579819 + 0.740144 1.22732 -2.83495 -0.942062 0.0918383 0.322623 + 0.750645 1.19614 -2.80314 -0.901227 -0.0012949 0.433346 + 0.806559 1.32541 -2.88944 0.277143 0.663466 0.694985 + 0.762402 1.36142 -2.90621 0.399341 0.900846 0.170304 + 0.743612 1.36243 -2.90876 -0.346555 0.794944 0.49796 + 0.740452 1.32252 -2.89143 -0.730302 0.393102 0.558686 + 0.734475 1.22898 -2.84882 -0.875732 0.197576 0.44052 + 0.723961 1.18408 -2.85365 -0.889039 0.00510389 0.457803 + 0.744275 1.16953 -2.81506 -0.892096 -0.0712825 0.446188 + 0.753638 1.36216 -2.9173 0.381278 0.849204 -0.365348 + 0.734848 1.36318 -2.91986 -0.569972 0.815532 -0.100198 + 0.722285 1.30336 -2.90405 -0.837144 0.290727 0.463323 + 0.719125 1.26344 -2.88671 -0.835075 0.246424 0.491858 + 0.708611 1.21854 -2.89154 -0.884514 0.135836 0.4463 + 0.806559 1.32541 -2.88944 0.644271 0.471065 -0.602504 + 0.747443 1.35908 -2.92595 0.241799 0.709465 -0.661961 + 0.723498 1.34021 -2.93208 -0.826675 0.559168 -0.0627738 + 0.710935 1.28039 -2.91626 -0.938589 0.231137 0.256177 + 0.697968 1.23703 -2.92117 -0.93935 0.23392 0.250806 + 0.686418 1.1672 -2.92422 -0.870361 0.079408 0.48597 + 0.739216 1.34428 -2.94413 -0.163885 0.944227 -0.285616 + 0.715271 1.32541 -2.95025 -0.82395 0.547343 -0.146702 + 0.70882 1.27688 -2.94239 -0.972672 0.20551 0.108054 + 0.695853 1.23354 -2.94732 -0.926637 0.334136 0.172329 + 0.675775 1.18578 -2.9538 -0.814374 0.323878 0.481558 + 0.752272 1.34314 -2.95816 -0.0644487 0.976553 0.205405 + 0.690081 1.32223 -2.99214 -0.707555 0.426026 0.563797 + 0.710462 1.31384 -2.964 -0.868745 0.257874 0.422828 + 0.704011 1.26531 -2.95615 -0.936897 0.25001 0.244376 + 0.692091 1.2342 -2.95767 -0.832678 0.327486 0.446542 + 0.799768 1.35538 -2.98155 0.107882 0.95339 0.281796 + 0.777883 1.36636 -3.02257 0.0510507 0.987437 0.149539 + 0.730388 1.35412 -2.99916 -0.288904 0.894992 0.339889 + 0.850375 1.31449 -2.91732 0.271329 0.876976 0.396602 + 0.836722 1.34868 -2.98676 0.296147 0.940715 0.165382 + 0.846376 1.34513 -3.0218 0.399249 0.901544 -0.166789 + 0.877136 1.30123 -2.90596 0.240545 0.961887 0.130045 + 0.899954 1.31617 -2.97904 0.441076 0.886789 0.13805 + 0.909608 1.31262 -3.01408 0.576954 0.801029 -0.159614 + 0.882594 1.29958 -2.8801 0.154256 0.985508 0.070555 + 0.943709 1.29575 -2.94127 0.33275 0.942986 -0.0074522 + 0.926715 1.30291 -2.96768 0.404418 0.914238 0.0247991 + 0.949318 1.28643 -2.99374 0.662062 0.702712 -0.260518 + 0.933412 1.29065 -3.02023 0.658798 0.675252 -0.331691 + 0.880748 1.29581 -2.84857 0.00134481 0.960866 0.277012 + 0.948567 1.29623 -2.86431 0.221952 0.974397 0.0358988 + 0.949168 1.29402 -2.91547 0.27578 0.961148 -0.0118441 + 0.98106 1.27856 -2.92569 0.794983 0.59719 -0.106617 + 0.966312 1.27927 -2.96733 0.745938 0.617867 -0.248628 + 0.941826 1.27882 -2.78935 0.141964 0.885366 0.442689 + 0.94672 1.29238 -2.83283 0.161147 0.960719 0.225943 + 0.988214 1.27832 -2.83389 0.526555 0.833225 0.168746 + 0.980459 1.28078 -2.87453 0.531262 0.843032 -0.084012 + 0.91914 1.26648 -2.76477 -0.0257045 0.917182 0.397638 + 0.983319 1.26477 -2.79041 0.361393 0.848285 0.387051 + 1.01994 1.25288 -2.85401 0.681815 0.720368 -0.127269 + 1.01218 1.25533 -2.89466 0.720218 0.629439 -0.291707 + 0.986984 1.24749 -2.93948 0.842663 0.395526 -0.365346 + 0.878192 1.22829 -2.69583 -0.202904 0.896 0.394987 + 0.941463 1.25178 -2.72611 -0.0217896 0.928727 0.370124 + 1.0015 1.25512 -2.76769 0.171379 0.98227 -0.0759961 + 1.00108 1.25237 -2.77993 0.335067 0.941782 0.0278619 + 1.0373 1.24602 -2.83274 0.59118 0.795722 -0.131652 + 0.862039 1.21597 -2.67048 -0.353989 0.860613 0.366111 + 0.94738 1.22467 -2.66936 -0.0527854 0.921491 0.384797 + 0.986856 1.22901 -2.68127 0.106088 0.863739 0.492647 + 0.98094 1.25611 -2.73802 0.0255142 0.986986 0.158767 + 0.835042 1.19344 -2.67006 -0.74745 0.498613 0.43898 + 0.876853 1.2022 -2.62483 -0.346184 0.878847 0.328306 + 0.931226 1.21225 -2.64405 -0.0962557 0.94093 0.324631 + 0.82485 1.16142 -2.67061 -0.895127 0.240871 0.375138 + 0.834107 1.13159 -2.62274 -0.899956 0.25666 0.352427 + 0.849856 1.17976 -2.62437 -0.76307 0.514633 0.390995 + 0.883468 1.19496 -2.5945 -0.413403 0.867205 0.277585 + 0.80936 1.17716 -2.71027 -0.851487 0.194764 0.486864 + 0.798097 1.1421 -2.72174 -0.884447 0.0911255 0.457656 + 0.814874 1.13507 -2.68037 -0.920936 0.169296 0.351021 + 0.824131 1.10524 -2.6325 -0.941854 0.0956495 0.322121 + 0.846683 1.11699 -2.58144 -0.850833 0.157033 0.501421 + 0.776807 1.14418 -2.75434 -0.852351 -0.114855 0.510201 + 0.762373 1.12165 -2.79273 -0.893641 -0.0200451 0.448335 + 0.791705 1.10019 -2.72515 -0.910796 0.0867619 0.403637 + 0.808482 1.09317 -2.68378 -0.932208 0.0815051 0.352626 + 0.760734 1.15684 -2.78447 -0.883749 -0.0639518 0.463571 + 0.7463 1.13431 -2.82285 -0.896797 -0.147159 0.417252 + 0.725986 1.14877 -2.86149 -0.873084 -0.0543001 0.484537 + 0.758251 0.991941 -2.78005 -0.907306 0.0560661 0.416715 + 0.686176 1.06194 -2.9165 -0.78003 0.0929665 0.618797 + 0.725744 1.0435 -2.85377 -0.873127 0.0417324 0.485704 + 0.763945 0.810468 -2.75313 -0.950184 0.00335823 0.311672 + 0.784835 0.713102 -2.65509 -0.955928 0.0222523 0.292757 + 0.787583 0.970479 -2.71248 -0.910953 0.083724 0.403924 + 0.647707 1.18379 -2.99095 -0.728875 0.242059 0.640429 + 0.636951 1.07292 -2.96692 -0.694806 0.166539 0.69965 + 0.691375 0.908283 -2.88575 -0.756229 0.0722199 0.650309 + 0.731438 0.862037 -2.82686 -0.863858 0.0379043 0.502307 + 0.664024 1.23221 -2.99482 -0.723184 0.293507 0.625187 + 0.596155 1.19695 -3.04635 -0.673594 0.289111 0.68021 + 0.585399 1.08609 -3.02232 -0.667304 0.215735 0.712857 + 0.642151 0.919266 -2.93618 -0.575568 0.139635 0.805744 + 0.70025 1.26598 -2.9665 -0.839475 0.242667 0.486205 + 0.679869 1.27438 -2.99465 -0.749496 0.213944 0.626485 + 0.619842 1.24071 -3.04454 -0.695664 0.306045 0.649913 + 0.646435 1.3151 -3.04898 -0.703495 0.439975 0.558137 + 0.635687 1.28288 -3.04437 -0.711662 0.302413 0.6341 + 0.595684 1.25431 -3.07788 -0.749735 0.353766 0.559238 + 0.571997 1.21055 -3.0797 -0.599589 0.478256 0.641689 + 0.539081 1.20411 -3.10155 -0.588134 0.349215 0.729484 + 0.700087 1.3477 -3.01025 -0.44719 0.793062 0.413609 + 0.65644 1.34066 -3.06706 -0.487157 0.766258 0.418959 + 0.620873 1.3181 -3.08259 -0.722537 0.40748 0.558481 + 0.610125 1.28579 -3.07802 -0.767265 0.342722 0.542076 + 0.695376 1.35868 -3.08727 -0.190913 0.952482 0.23734 + 0.681277 1.36645 -3.11213 -0.00826762 0.927968 0.372568 + 0.642341 1.34843 -3.09191 -0.327128 0.66882 0.667583 + 0.620269 1.32826 -3.09077 -0.689576 0.437648 0.577018 + 0.725677 1.3651 -3.07618 -0.152684 0.988161 0.0150318 + 0.748237 1.36493 -3.10089 0.0761242 0.996453 -0.0358613 + 0.663343 1.37105 -3.12769 0.0609541 0.975168 0.212913 + 0.644497 1.37624 -3.10808 0.00601558 0.829783 0.558054 + 0.622425 1.35607 -3.10695 -0.496327 0.447925 0.743655 + 0.800443 1.36619 -3.04727 0.297307 0.947271 0.119521 + 0.820561 1.35346 -3.09762 0.331798 0.939532 -0.0847929 + 0.822392 1.35025 -3.13007 0.374969 0.924829 -0.0639524 + 0.750068 1.36172 -3.13333 0.190851 0.981604 0.00546958 + 0.665156 1.37844 -3.1423 -0.0203897 0.8774 0.479326 + 0.828296 1.3515 -3.05063 0.6188 0.741501 0.25935 + 0.848414 1.33877 -3.10098 0.805762 0.588042 0.070385 + 0.850536 1.32721 -3.13796 0.842903 0.519016 -0.141902 + 0.842038 1.33793 -3.14952 0.74284 0.660398 -0.109829 + 0.807773 1.35332 -3.17718 0.344728 0.936776 -0.0601094 + 0.836077 1.34062 -3.04639 0.604754 0.788035 -0.11521 + 0.859362 1.30741 -3.11426 0.91799 0.389819 -0.0730424 + 0.861484 1.29584 -3.15123 0.961286 0.169616 -0.217163 + 0.83701 1.30443 -3.1987 0.873634 0.162979 -0.458477 + 0.828512 1.31515 -3.21027 0.75927 0.18011 -0.625355 + 0.879112 1.29481 -3.08344 0.728265 0.590416 -0.347906 + 0.867142 1.29652 -3.11001 0.798194 0.500449 -0.335318 + 0.860707 1.25354 -3.15315 0.892924 0.028105 -0.449329 + 0.836233 1.26212 -3.20062 0.782612 -0.115591 -0.611683 + 0.889411 1.29932 -3.05886 0.549736 0.69309 -0.466278 + 0.892395 1.25566 -3.09584 0.842981 0.215754 -0.492781 + 0.880425 1.25738 -3.12241 0.85511 0.189574 -0.482544 + 0.871592 1.18768 -3.12529 0.826093 -0.0241988 -0.563014 + 0.913215 1.27735 -3.065 0.517098 0.497921 -0.696193 + 0.906593 1.25503 -3.07875 0.672367 0.222181 -0.706087 + 0.891311 1.19161 -3.0945 0.821475 0.0304554 -0.56943 + 0.940599 1.25994 -3.04386 0.782028 0.31206 -0.539492 + 0.933976 1.23772 -3.05755 0.724393 0.0474008 -0.687756 + 0.905509 1.19098 -3.0774 0.736723 -0.0626343 -0.673287 + 0.924853 1.16125 -3.05211 0.757926 0.092378 -0.645767 + 0.956505 1.25574 -3.01736 0.845158 0.315706 -0.431321 + 0.953321 1.20799 -3.03226 0.76822 -0.0603313 -0.637336 + 0.972236 1.24811 -2.98116 0.901768 0.285438 -0.324561 + 0.983819 1.212 -2.97801 0.900292 0.21221 -0.380053 + 0.968088 1.21962 -3.01421 0.840211 0.113884 -0.530165 + 0.986052 1.14559 -2.97619 0.802296 0.138504 -0.580635 + 0.997624 1.21503 -2.94985 0.843359 0.255684 -0.472622 + 1.00082 1.15722 -2.95813 0.852129 -0.0160561 -0.523085 + 1.04075 1.13677 -2.8959 0.805804 0.287854 -0.517514 + 1.06735 1.08183 -2.90755 0.720687 0.549714 -0.422402 + 1.00278 1.09979 -2.98406 0.711893 0.501873 -0.491254 + 1.02282 1.22287 -2.90504 0.844313 0.311891 -0.435729 + 1.01462 1.16025 -2.92998 0.854996 0.182781 -0.485358 + 1.04895 1.19939 -2.87097 0.81289 0.314196 -0.490399 + 1.09691 1.11595 -2.82104 0.799905 0.313031 -0.512019 + 1.1235 1.06101 -2.83269 0.698799 0.586245 -0.409874 + 1.06631 1.19254 -2.84971 0.784574 0.301124 -0.542004 + 1.0807 1.1925 -2.82743 0.779574 0.356129 -0.515206 + 1.1113 1.11582 -2.79883 0.772065 0.249808 -0.58439 + 1.1847 1.04322 -2.75687 0.678877 0.638404 -0.36272 + 1.05505 1.23363 -2.82227 0.652053 0.745352 -0.138843 + 1.06865 1.22229 -2.81203 0.601831 0.737651 -0.306056 + 1.0943 1.18108 -2.81725 0.665882 0.147786 -0.731274 + 1.10832 1.18096 -2.80125 0.812738 0.211133 -0.543028 + 1.12532 1.1158 -2.78279 0.809449 0.228221 -0.541025 + 1.06907 1.22495 -2.79984 0.367358 0.878654 -0.304985 + 1.10091 1.21132 -2.79184 0.684034 0.566983 -0.458941 + 1.12906 1.16266 -2.76575 0.890237 0.221544 -0.397991 + 1.153 1.14253 -2.72549 0.880135 0.277413 -0.385233 + 1.14926 1.09558 -2.74257 0.83547 0.384426 -0.392692 + 1.05669 1.24472 -2.77308 0.276617 0.938121 -0.208355 + 1.08853 1.23109 -2.76508 0.445763 0.880753 -0.159903 + 1.11572 1.21894 -2.74322 0.682791 0.714263 -0.153706 + 1.12164 1.19301 -2.75633 0.889767 0.334273 -0.310767 + 1.13784 1.18449 -2.71436 0.893461 0.379847 -0.239673 + 1.03613 1.2458 -2.74336 0.212104 0.949005 0.23324 + 1.06359 1.23826 -2.73789 0.240886 0.954662 0.174915 + 1.09078 1.2261 -2.71603 0.235643 0.96309 0.130119 + 1.13191 1.21041 -2.70125 0.770303 0.634702 -0.0615336 + 1.01432 1.22146 -2.67579 0.0882708 0.964511 0.24885 + 1.02305 1.21805 -2.64968 -0.0348986 0.987771 0.151954 + 1.09952 1.22269 -2.68993 0.187654 0.98196 0.023254 + 1.13078 1.21224 -2.64523 0.590672 0.806697 -0.0186057 + 0.990116 1.20637 -2.60766 -0.0839998 0.956858 0.27815 + 1.09838 1.22452 -2.6339 0.133558 0.981804 0.134998 + 1.14095 1.20304 -2.60229 0.560528 0.825679 0.0637312 + 1.15267 1.18141 -2.66743 0.839699 0.516898 -0.166499 + 1.16783 1.13946 -2.67856 0.864399 0.43995 -0.243429 + 0.937842 1.20493 -2.61377 -0.0585684 0.963529 0.261115 + 0.948539 1.19817 -2.59145 -0.0251799 0.950696 0.309101 + 0.967912 1.176 -2.52145 -0.158938 0.929052 0.334067 + 1.06545 1.21285 -2.59188 -0.0449399 0.973614 0.22373 + 0.888448 1.18672 -2.54942 -0.422628 0.850001 0.314456 + 0.899145 1.17995 -2.5271 -0.25357 0.831593 0.494121 + 0.926335 1.16779 -2.50524 0.0118262 0.734204 0.678827 + 0.91171 1.13684 -2.48263 -0.594806 0.556296 0.580294 + 0.982868 1.16997 -2.4862 -0.272244 0.949284 0.157298 + 0.862432 1.16515 -2.58306 -0.843803 0.424433 0.32841 + 0.867412 1.15699 -2.53792 -0.891763 0.293355 0.34453 + 0.88452 1.14899 -2.50448 -0.688939 0.341354 0.639406 + 0.867952 1.10422 -2.55012 -0.888783 0.00310142 0.458318 + 0.885061 1.09631 -2.51663 -0.911197 0.0305639 0.410835 + 0.90077 1.09393 -2.4795 -0.894608 0.159997 0.417226 + 0.834743 1.0821 -2.60222 -0.891384 -0.190872 0.411099 + 0.856012 1.06933 -2.5709 -0.882663 0.107983 0.457434 + 0.876887 1.05242 -2.51521 -0.889029 0.231324 0.395115 + 0.892596 1.05004 -2.47808 -0.906558 0.266655 0.32718 + 0.91422 1.0936 -2.44394 -0.947581 0.260035 0.185669 + 0.819094 1.07002 -2.65349 -0.937619 0.0156662 0.347312 + 0.842512 1.04608 -2.58462 -0.910644 0.16722 0.377843 + 0.863387 1.02917 -2.52894 -0.913336 0.175327 0.367529 + 0.813708 0.928872 -2.64202 -0.924804 0.0743181 0.373113 + 0.837126 0.904844 -2.5732 -0.934105 0.0506815 0.353383 + 0.862232 0.8689 -2.50514 -0.94576 0.0402809 0.322359 + 0.882186 1.00437 -2.45918 -0.948184 0.169656 0.268635 + 0.81096 0.671494 -2.58463 -0.884844 0.0459353 0.463618 + 0.843492 0.617564 -2.52622 -0.916776 -0.0154819 0.399102 + 0.868597 0.581615 -2.45815 -0.939481 -0.0542891 0.338273 + 0.895077 0.562532 -2.3843 -0.94922 -0.0924291 0.300729 + 0.881031 0.844101 -2.43539 -0.959831 0.0229515 0.279638 + 0.79294 0.560906 -2.64128 -0.964058 -0.194843 0.180632 + 0.83036 0.496081 -2.5744 -0.916484 -0.257982 0.30578 + 0.862892 0.442151 -2.51599 -0.888344 -0.401692 0.22246 + 0.904768 0.409989 -2.44929 -0.843064 -0.467362 0.26611 + 0.77205 0.658362 -2.73928 -0.947906 -0.0393929 0.316105 + 0.820585 0.480402 -2.67264 -0.918146 -0.32715 0.223562 + 0.858005 0.415578 -2.60577 -0.845312 -0.436601 0.307939 + 0.910705 0.378083 -2.54642 -0.788636 -0.563118 0.246883 + 0.95258 0.345927 -2.47973 -0.717796 -0.629482 0.297525 + 0.736264 0.710197 -2.81106 -0.863871 0.00460857 0.503692 + 0.77928 0.535043 -2.72769 -0.877255 -0.146152 0.457235 + 0.81956 0.390287 -2.77676 -0.846957 -0.394571 0.35634 + 0.860865 0.33565 -2.72173 -0.84238 -0.459432 0.281633 + 0.911098 0.308272 -2.65471 -0.765361 -0.534496 0.358521 + 0.696201 0.756447 -2.86997 -0.789895 0.0132344 0.613099 + 0.743494 0.586878 -2.79947 -0.898543 -0.126245 0.420337 + 0.771455 0.415147 -2.84922 -0.854741 -0.354118 0.379497 + 0.873381 0.196486 -2.86869 -0.750353 -0.520508 0.407482 + 0.930101 0.177676 -2.79671 -0.746588 -0.556319 0.364849 + 0.650257 0.756918 -2.92238 -0.542823 0.0236162 0.839515 + 0.701816 0.617653 -2.86977 -0.822584 -0.154655 0.547208 + 0.729778 0.44592 -2.91952 -0.828065 -0.328785 0.454102 + 0.825276 0.221345 -2.94114 -0.789122 -0.464703 0.401669 + 0.592856 0.721468 -2.93838 -0.499686 -0.0680936 0.863526 + 0.655872 0.618129 -2.92219 -0.684809 -0.242747 0.687103 + 0.682178 0.444467 -2.9922 -0.710059 -0.376243 0.595196 + 0.772757 0.219313 -3.03282 -0.742349 -0.477129 0.470389 + 0.58475 0.88381 -2.95217 -0.50823 0.150182 0.848026 + 0.542083 0.679823 -2.98485 -0.612835 -0.169475 0.771824 + 0.607761 0.585761 -2.98813 -0.565869 -0.370678 0.736471 + 0.634068 0.412018 -3.0582 -0.638313 -0.416062 0.647649 + 0.725157 0.217773 -3.10556 -0.701475 -0.491603 0.516004 + 0.531513 1.06108 -3.0644 -0.625987 0.244037 0.740667 + 0.530865 0.858806 -2.99426 -0.704745 0.0984981 0.70259 + 0.494928 0.617412 -3.03835 -0.574625 -0.195356 0.794759 + 0.556988 0.544116 -3.0346 -0.399929 -0.435911 0.806249 + 0.582788 0.389107 -3.12352 -0.468106 -0.495807 0.731473 + 0.470823 1.0643 -3.11199 -0.632253 0.192894 0.750366 + 0.48371 0.796392 -3.04775 -0.713334 0.0518902 0.698901 + 0.440181 0.567976 -3.08593 -0.514652 -0.195692 0.834768 + 0.505421 0.495836 -3.08818 -0.369874 -0.45455 0.810295 + 0.531221 0.340828 -3.17709 -0.408243 -0.546315 0.731353 + 0.478391 1.20726 -3.14919 -0.548683 0.279114 0.788062 + 0.411206 1.20736 -3.19318 -0.520528 0.281555 0.806087 + 0.413563 1.03519 -3.15817 -0.588014 0.157852 0.793298 + 0.42645 0.767278 -3.09393 -0.644101 0.0580872 0.762732 + 0.550071 1.24921 -3.12146 -0.519171 0.346405 0.781323 + 0.508176 1.25605 -3.1455 -0.506641 0.261836 0.821436 + 0.477073 1.2723 -3.17425 -0.587973 0.245212 0.770817 + 0.447288 1.22359 -3.17789 -0.531353 0.351651 0.770718 + 0.582987 1.25574 -3.09956 -0.674543 0.373596 0.636724 + 0.571491 1.29953 -3.12541 -0.507356 0.253325 0.82366 + 0.529596 1.30636 -3.14945 -0.481966 0.213162 0.849865 + 0.484204 1.31017 -3.17625 -0.550425 0.128092 0.825 + 0.441119 1.27996 -3.20792 -0.542797 0.227698 0.808409 + 0.597427 1.28713 -3.09974 -0.7191 0.364049 0.591914 + 0.596824 1.29737 -3.10787 -0.628685 0.382611 0.677026 + 0.597092 1.35823 -3.12449 -0.481094 0.399942 0.780125 + 0.540536 1.34948 -3.15254 -0.452757 0.341733 0.823547 + 0.495144 1.35338 -3.17928 -0.367877 0.431313 0.823793 + 0.626563 1.38075 -3.12369 -0.14922 0.981271 0.121821 + 0.570007 1.37209 -3.15169 -0.326274 0.763485 0.557347 + 0.57182 1.37949 -3.16631 -0.243952 0.853876 0.459764 + 0.535893 1.3848 -3.19771 -0.279474 0.862132 0.422637 + 0.501026 1.37766 -3.19754 -0.156716 0.805888 0.57095 + 0.45252 1.35984 -3.19848 -0.478666 0.263273 0.837595 + 0.44825 1.31783 -3.20992 -0.624181 0.036017 0.780449 + 0.633806 1.40745 -3.18594 -0.0523282 0.941843 0.331954 + 0.597879 1.41285 -3.21729 -0.0988632 0.983253 0.153097 + 0.521536 1.39995 -3.26795 -0.0862199 0.988228 0.126376 + 0.486669 1.39281 -3.26778 -0.0158785 0.905248 0.424587 + 0.458403 1.38412 -3.21674 -0.0611349 0.828436 0.556737 + 0.700704 1.3806 -3.14983 0.250097 0.725419 0.641263 + 0.669354 1.40969 -3.19342 0.176446 0.978852 0.103515 + 0.661598 1.4 -3.24124 0.286453 0.924849 -0.250197 + 0.618248 1.4097 -3.25283 0.145553 0.969154 -0.198883 + 0.730432 1.36816 -3.14988 0.2606 0.938643 0.225912 + 0.714159 1.38846 -3.19644 0.406331 0.913714 0.00464153 + 0.706403 1.37868 -3.24431 0.491951 0.764685 -0.416222 + 0.660643 1.36268 -3.328 0.50912 0.763275 -0.397754 + 0.617293 1.37238 -3.33959 0.229824 0.91507 -0.331403 + 0.788137 1.35976 -3.19374 0.343841 0.933367 -0.102948 + 0.743887 1.37593 -3.19654 0.374091 0.927254 -0.0159809 + 0.759644 1.36237 -3.21786 0.387649 0.740591 -0.548865 + 0.734897 1.36508 -3.22996 0.517085 0.301449 -0.801094 + 0.695527 1.3494 -3.28519 0.733434 0.436486 -0.521109 + 0.803894 1.3462 -3.21505 0.433349 0.670951 -0.601692 + 0.775423 1.33123 -3.23053 0.314749 0.335889 -0.887756 + 0.750676 1.33395 -3.24263 0.569269 0.372345 -0.733002 + 0.724021 1.3358 -3.27084 0.611058 0.356967 -0.706528 + 0.827419 1.341 -3.19664 0.711096 0.602111 -0.363049 + 0.804987 1.32035 -3.22868 0.406684 0.242789 -0.880717 + 0.81049 1.2834 -3.23168 0.467265 -0.0275923 -0.883687 + 0.780926 1.29429 -3.23354 0.308523 0.0410823 -0.950329 + 0.758508 1.28489 -3.24767 0.632447 0.0881508 -0.769572 + 0.731854 1.28674 -3.27587 0.743752 0.149028 -0.651632 + 0.798461 1.22376 -3.22077 0.579906 -0.132253 -0.803877 + 0.776043 1.21436 -3.2349 0.635483 -0.0263831 -0.771664 + 0.74007 1.21133 -3.26986 0.755918 0.0101932 -0.654586 + 0.711436 1.20857 -3.31008 0.83955 0.00589757 -0.543251 + 0.70322 1.28398 -3.31609 0.874413 0.145166 -0.462957 + 0.824204 1.20238 -3.18975 0.7643 -0.100354 -0.637004 + 0.831356 1.13163 -3.18461 0.732241 -0.0189649 -0.680782 + 0.792498 1.14151 -3.21772 0.668946 -0.0403856 -0.742213 + 0.756525 1.13848 -3.25267 0.719142 -0.0116432 -0.694766 + 0.729949 1.09364 -3.2816 0.792301 -0.0141198 -0.609967 + 0.878744 1.11684 -3.12019 0.692636 0.2474 -0.677532 + 0.844468 1.01909 -3.16388 0.461867 0.136264 -0.876419 + 0.805611 1.02897 -3.19699 0.673932 0.0307018 -0.738155 + 0.779035 0.984124 -3.22592 0.675871 0.0635502 -0.734275 + 0.941584 1.11545 -3.05998 0.680165 0.47123 -0.561531 + 0.906005 1.05988 -3.15032 0.331442 0.398504 -0.855185 + 0.924277 0.952189 -3.16241 0.39304 0.121718 -0.91143 + 0.862741 0.911406 -3.17596 0.374121 0.163141 -0.912918 + 0.968845 1.05849 -3.09012 0.674047 0.449019 -0.586552 + 0.981885 0.970858 -3.11574 0.682698 0.185786 -0.706687 + 0.924354 0.819293 -3.17382 0.552254 0.13559 -0.822576 + 1.03934 1.04783 -3.00726 0.702325 0.486809 -0.519381 + 1.05238 0.960199 -3.03288 0.733141 0.228749 -0.640452 + 1.04096 0.835847 -3.07489 0.691687 0.109127 -0.713905 + 0.981962 0.837958 -3.12715 0.636854 0.0708287 -0.767724 + 1.1039 1.02987 -2.93075 0.705609 0.53323 -0.46667 + 1.14424 0.938086 -2.94017 0.730665 0.282997 -0.621322 + 1.10361 0.92803 -2.98836 0.712472 0.205664 -0.670884 + 1.09219 0.803672 -3.03036 0.669875 0.166967 -0.723457 + 1.03949 0.728479 -3.08773 0.5943 0.106962 -0.797099 + 1.171 1.00422 -2.86553 0.681395 0.559318 -0.472085 + 1.21134 0.912432 -2.87494 0.719467 0.23453 -0.653729 + 1.24475 0.789843 -2.86081 0.760583 0.196185 -0.61889 + 1.1949 0.799574 -2.92747 0.76117 0.227231 -0.607443 + 1.15427 0.789519 -2.97565 0.701597 0.205424 -0.682322 + 1.23221 0.986422 -2.7897 0.675687 0.613269 -0.409082 + 1.26662 0.915059 -2.81249 0.725456 0.341597 -0.597516 + 1.30003 0.792556 -2.79831 0.599488 0.116832 -0.791811 + 1.2762 0.695953 -2.85739 0.73175 0.312722 -0.605597 + 1.23602 1.03286 -2.68113 0.655973 0.688321 -0.309698 + 1.30144 0.975091 -2.69707 0.660996 0.64522 -0.383112 + 1.33585 0.903728 -2.71987 0.695777 0.480519 -0.53385 + 1.34461 0.824924 -2.77497 0.613318 0.243218 -0.751456 + 1.20058 1.08523 -2.66683 0.805471 0.497716 -0.321706 + 1.2355 1.07169 -2.57379 0.715248 0.670455 -0.197257 + 1.28515 1.0287 -2.58513 0.612554 0.759543 -0.218797 + 1.35057 0.970939 -2.60108 0.628319 0.718758 -0.297661 + 1.38363 0.891352 -2.67423 0.716143 0.510962 -0.475455 + 1.18088 1.1429 -2.63392 0.839339 0.518009 -0.164855 + 1.21363 1.08867 -2.62219 0.867228 0.446428 -0.220494 + 1.212 1.11193 -2.53548 0.756913 0.637373 -0.144352 + 1.27318 1.0645 -2.46373 0.664414 0.731832 -0.151576 + 1.32283 1.02151 -2.47507 0.533209 0.816656 -0.22082 + 1.16285 1.17229 -2.62444 0.834291 0.544902 -0.0839092 + 1.19013 1.12891 -2.58389 0.826729 0.554336 -0.0960763 + 1.1721 1.15831 -2.57441 0.856889 0.512622 -0.0543991 + 1.18127 1.14826 -2.52601 0.805008 0.590456 -0.0576533 + 1.22233 1.10923 -2.49381 0.716509 0.684521 -0.134333 + 1.16169 1.17928 -2.56753 0.757527 0.651927 0.0338273 + 1.11981 1.21108 -2.56861 0.168116 0.985702 0.0113623 + 1.14055 1.18741 -2.53381 0.432184 0.87621 0.213246 + 1.17086 1.16932 -2.51908 0.735448 0.676211 0.043078 + 1.16543 1.17131 -2.46853 0.570611 0.821127 -0.0123467 + 1.1916 1.14556 -2.48434 0.701022 0.707854 -0.0866668 + 1.0804 1.20673 -2.55668 -0.0678785 0.981014 0.181669 + 1.08928 1.18644 -2.47874 0.0821197 0.965555 0.2469 + 1.09447 1.1792 -2.45001 0.0182652 0.997846 0.0630083 + 1.14574 1.18017 -2.50508 0.301642 0.948149 0.100127 + 1.04987 1.18209 -2.46681 -0.127035 0.980773 0.148146 + 1.09184 1.17938 -2.4269 0.0142783 0.999779 -0.0154023 + 1.14031 1.18208 -2.45458 0.148682 0.988638 -0.0221078 + 1.16158 1.17478 -2.43814 0.537232 0.841689 0.0542304 + 0.952427 1.16044 -2.45231 -0.437754 0.897693 -0.0501898 + 1.01943 1.17257 -2.43291 -0.190886 0.981002 0.0346086 + 1.01558 1.17032 -2.39601 -0.0987706 0.990661 0.0939989 + 1.04735 1.17306 -2.38357 -0.1449 0.987065 0.0686003 + 1.08819 1.18004 -2.40846 -0.0644724 0.997895 0.00699668 + 0.925161 1.13651 -2.44707 -0.836032 0.519219 0.177373 + 0.95903 1.1691 -2.4199 -0.3522 0.933655 -0.0651455 + 0.955185 1.16677 -2.38307 -0.358833 0.930344 0.0754888 + 0.93663 1.15101 -2.30578 -0.420606 0.880546 0.21847 + 0.9684 1.15384 -2.29328 -0.202692 0.955332 0.215076 + 0.931764 1.14517 -2.41466 -0.82712 0.562025 -0.000698458 + 0.932578 1.14581 -2.36357 -0.849154 0.528143 -0.00128994 + 0.914023 1.12997 -2.28633 -0.930181 0.367025 -0.00748337 + 0.974547 1.14311 -2.24689 -0.146146 0.96026 0.237787 + 1.08239 1.17791 -2.33317 -0.0478934 0.985577 0.162311 + 0.919198 1.10644 -2.39597 -0.956791 0.290327 0.0161777 + 0.920013 1.10707 -2.34487 -0.944296 0.268242 0.19066 + 0.929803 1.09339 -2.29977 -0.997613 -0.0684833 -0.00881137 + 0.904511 1.05753 -2.44045 -0.951047 0.272972 0.144897 + 0.909489 1.07044 -2.39242 -0.975029 0.202737 0.0906424 + 0.914026 1.05165 -2.35327 -0.971286 0.111476 0.210184 + 0.923815 1.03796 -2.30816 -0.980843 0.0810049 0.177156 + 0.926824 1.07678 -2.2384 -0.974239 -0.198443 -0.107135 + 0.894101 1.01186 -2.42156 -0.94737 0.25029 0.199614 + 0.898638 0.993068 -2.38241 -0.972827 0.0846928 0.215486 + 0.913802 0.9689 -2.31155 -0.976611 0.0558439 0.207637 + 0.923286 0.9505 -2.24968 -0.989984 -0.0133627 0.140548 + 0.9333 1.01948 -2.24635 -0.999525 0.0138456 0.027546 + 0.900385 0.845177 -2.37266 -0.967859 0.00332926 0.251472 + 0.915549 0.821097 -2.30175 -0.970909 -0.0303687 0.237513 + 0.936049 0.81885 -2.23186 -0.968691 -0.0553289 0.242026 + 0.940327 0.92798 -2.17827 -0.974351 -0.13064 0.183231 + 0.92678 0.999707 -2.18871 -0.995003 -0.0861782 0.0504268 + 0.914431 0.563609 -2.32156 -0.899239 -0.120208 0.420618 + 0.934239 0.615486 -2.27582 -0.930408 -0.1012 0.352278 + 0.954739 0.613244 -2.20594 -0.932294 -0.187961 0.309028 + 0.9812 0.627521 -2.12066 -0.931412 -0.205704 0.300262 + 0.953089 0.796417 -2.1604 -0.965353 -0.0840891 0.247028 + 0.931247 0.390906 -2.37543 -0.784739 -0.550677 0.284497 + 0.9674 0.395445 -2.30669 -0.684164 -0.517101 0.514322 + 0.987209 0.44724 -2.26101 -0.744546 -0.366499 0.557969 + 1.00997 0.477562 -2.19773 -0.764592 -0.47245 0.438394 + 1.00436 0.330429 -2.40948 -0.629916 -0.706063 0.323543 + 1.04052 0.334882 -2.34079 -0.603828 -0.723666 0.334215 + 1.07843 0.337759 -2.25998 -0.631622 -0.624216 0.459791 + 1.10119 0.368082 -2.1967 -0.595181 -0.528881 0.605015 + 1.01351 0.260159 -2.51977 -0.696086 -0.611783 0.375747 + 1.06529 0.244662 -2.44953 -0.694796 -0.608913 0.382731 + 1.11078 0.244901 -2.36655 -0.698305 -0.61152 0.37204 + 1.14869 0.247773 -2.28572 -0.680572 -0.612644 0.401857 + 0.963798 0.270777 -2.59536 -0.747005 -0.570387 0.341529 + 1.08132 0.139613 -2.57138 -0.66432 -0.646582 0.374982 + 1.12487 0.148312 -2.48305 -0.66486 -0.644521 0.377562 + 1.17036 0.148551 -2.40006 -0.665451 -0.645935 0.37409 + 1.21585 0.15262 -2.31431 -0.643736 -0.653095 0.398837 + 1.03161 0.150229 -2.64697 -0.682573 -0.623963 0.38048 + 1.0949 0.063421 -2.70421 -0.499715 -0.814254 0.295424 + 1.14295 0.067705 -2.61003 -0.488574 -0.817523 0.30488 + 1.1865 0.076404 -2.5217 -0.51608 -0.800222 0.305461 + 1.23065 0.082109 -2.42798 -0.526274 -0.793275 0.306186 + 0.980334 0.150298 -2.72969 -0.700203 -0.606399 0.376824 + 1.04362 0.063489 -2.78693 -0.506161 -0.812992 0.287829 + 1.10235 0.025305 -2.8486 -0.341774 -0.92234 0.180219 + 1.15152 0.028616 -2.74833 -0.3442 -0.917666 0.198531 + 1.19957 0.032899 -2.65415 -0.372208 -0.898997 0.230793 + 0.989418 0.068168 -2.87763 -0.549534 -0.791573 0.267254 + 1.04815 0.029898 -2.93935 -0.357127 -0.918277 0.17096 + 1.13541 0.009312 -2.87949 0.114029 -0.990566 -0.0760006 + 1.18457 0.012616 -2.77921 -0.215265 -0.968517 0.125045 + 1.23162 0.013941 -2.67851 -0.244951 -0.957156 0.154439 + 0.932698 0.086978 -2.94961 -0.570699 -0.758707 0.314113 + 0.989046 0.03358 -3.04213 -0.366431 -0.909163 0.197867 + 1.02346 0.014294 -3.08632 -0.0908701 -0.992946 0.0761693 + 1.08256 0.010615 -2.98355 0.121831 -0.988497 -0.0896097 + 0.87449 0.089578 -3.03132 -0.57292 -0.734133 0.364433 + 0.930838 0.036182 -3.12383 -0.287014 -0.91081 0.296731 + 0.963492 0.009705 -3.17978 -0.0451712 -0.988402 0.144984 + 1.04045 0.016546 -3.10162 0.331272 -0.932238 -0.145572 + 1.09387 0.020379 -2.98946 0.509725 -0.817379 -0.268464 + 0.821971 0.08746 -3.12305 -0.603842 -0.679487 0.416741 + 0.863394 0.02385 -3.19867 -0.344298 -0.873396 0.344439 + 0.896048 -0.002625 -3.25462 -0.0205348 -0.996729 0.0781625 + 0.980486 0.012045 -3.19503 0.340731 -0.926335 -0.160643 + 0.763439 0.084031 -3.20171 -0.57675 -0.68164 0.450251 + 0.804862 0.020423 -3.27734 -0.407896 -0.860627 0.304863 + 0.835807 -0.002219 -3.32752 -0.0700688 -0.997515 0.00733986 + 0.925137 0.007863 -3.27798 0.360889 -0.898524 -0.249827 + 0.711511 0.081249 -3.27089 -0.558544 -0.696653 0.450226 + 0.741351 0.027227 -3.35152 -0.403801 -0.866071 0.294731 + 0.772297 0.004586 -3.40171 -0.0598842 -0.996163 -0.0638226 + 0.864896 0.00827 -3.35089 0.316588 -0.892167 -0.322197 + 0.67323 0.214898 -3.17478 -0.624533 -0.531767 0.571998 + 0.652094 0.083546 -3.34127 -0.523599 -0.723974 0.449117 + 0.681935 0.029526 -3.4219 -0.386268 -0.885552 0.25806 + 0.704692 0.015375 -3.47239 -0.0465797 -0.993761 -0.101337 + 0.798552 0.018302 -3.42467 0.295475 -0.867659 -0.399828 + 0.62195 0.191992 -3.2401 -0.530702 -0.61379 0.584481 + 0.596305 0.078852 -3.40994 -0.468465 -0.77211 0.429403 + 0.614264 0.039505 -3.49159 -0.34018 -0.90857 0.242441 + 0.637021 0.02535 -3.54207 0.0214712 -0.97588 -0.21725 + 0.730947 0.029087 -3.49534 0.281707 -0.855416 -0.434631 + 0.56616 0.187379 -3.30871 -0.488216 -0.658847 0.572333 + 0.528555 0.085339 -3.47517 -0.411344 -0.815162 0.407807 + 0.546514 0.045994 -3.55683 -0.337205 -0.92125 0.193882 + 0.563558 0.039291 -3.60282 0.0269834 -0.966717 -0.254422 + 0.656432 0.045461 -3.56171 0.296049 -0.784103 -0.54547 + 0.468641 0.323794 -3.23039 -0.279337 -0.626816 0.727374 + 0.50358 0.170259 -3.36206 -0.344741 -0.750712 0.563547 + 0.458603 0.088549 -3.53054 -0.294802 -0.880461 0.371322 + 0.473631 0.061026 -3.62246 -0.23212 -0.960076 0.15612 + 0.490675 0.054324 -3.66846 0.172489 -0.783244 -0.597307 + 0.450674 0.446399 -3.13575 -0.230695 -0.52117 0.821682 + 0.39922 0.297007 -3.26859 -0.227283 -0.67582 0.701149 + 0.433628 0.173555 -3.41737 -0.319599 -0.785446 0.53003 + 0.373358 0.097524 -3.56988 -0.200434 -0.905933 0.372976 + 0.388386 0.070091 -3.66177 -0.147227 -0.978731 0.142862 + 0.38411 0.510512 -3.131 -0.416219 -0.219768 0.882306 + 0.381253 0.419616 -3.17396 -0.229077 -0.521411 0.821982 + 0.320793 0.288955 -3.30525 -0.144923 -0.73143 0.666338 + 0.355201 0.165506 -3.45403 -0.169198 -0.832435 0.527659 + 0.370379 0.709814 -3.139 -0.580902 0.043998 0.812784 + 0.316229 0.474584 -3.16837 -0.38356 -0.201283 0.901314 + 0.313372 0.383687 -3.21133 -0.138834 -0.582747 0.800706 + 0.238392 0.271757 -3.33506 -0.0800217 -0.759537 0.645523 + 0.346861 1.02945 -3.19722 -0.519687 0.140874 0.842663 + 0.282676 1.00031 -3.23375 -0.457483 0.123581 0.880589 + 0.306194 0.680591 -3.17558 -0.504488 0.0540576 0.861725 + 0.251104 0.432437 -3.20417 -0.258066 -0.23745 0.936493 + 0.230971 0.366491 -3.24114 -0.100362 -0.594957 0.797467 + 0.344504 1.20162 -3.23223 -0.463287 0.20697 0.861701 + 0.261176 1.19278 -3.27112 -0.408149 0.202499 0.890173 + 0.212322 0.988001 -3.26123 -0.330996 0.134717 0.933966 + 0.241069 0.63853 -3.21133 -0.379493 0.0552298 0.923544 + 0.159293 0.409373 -3.22522 -0.0779895 -0.249167 0.965315 + 0.405038 1.26374 -3.22322 -0.349371 0.231071 0.908045 + 0.380499 1.26393 -3.22596 -0.28359 0.114307 0.952108 + 0.360752 1.27625 -3.24029 -0.609799 0.256532 0.749891 + 0.324758 1.21402 -3.24652 -0.463511 0.269363 0.844157 + 0.417691 1.33543 -3.23319 -0.441942 0.0954144 0.891954 + 0.393152 1.33563 -3.23594 -0.341058 0.246031 0.907275 + 0.374771 1.3332 -3.24893 -0.65165 0.251949 0.715453 + 0.351967 1.277 -3.25119 -0.612715 0.290973 0.734789 + 0.421961 1.37743 -3.22175 -0.597949 0.288871 0.74767 + 0.401225 1.40643 -3.25577 -0.436917 0.487309 0.756065 + 0.382844 1.404 -3.26876 -0.639616 0.467118 0.610485 + 0.363138 1.38292 -3.27385 -0.545824 0.525512 0.652621 + 0.365986 1.33394 -3.25982 -0.59251 0.215319 0.776254 + 0.437347 1.39596 -3.23444 0.0327572 0.815414 0.57795 + 0.416611 1.42487 -3.26852 0.212195 0.785863 0.580855 + 0.403286 1.43616 -3.27807 -0.12814 0.756958 0.640776 + 0.38358 1.415 -3.28322 -0.67523 0.732613 -0.0856932 + 0.465614 1.40456 -3.28554 0.0890856 0.757408 0.646836 + 0.452289 1.41586 -3.2951 0.217186 0.976129 -0.00175134 + 0.455867 1.41022 -3.31814 0.218478 0.97298 0.0746824 + 0.403286 1.43616 -3.27807 -0.162617 0.373302 -0.913346 + 0.541905 1.39688 -3.30343 0.104012 0.971656 -0.212286 + 0.526225 1.38861 -3.34211 0.228445 0.958278 -0.171801 + 0.497237 1.3962 -3.34946 0.347955 0.936135 -0.0507878 + 0.475313 1.40955 -3.34178 0.539652 0.814042 0.214736 + 0.418215 1.43963 -3.35968 0.112036 0.971377 0.209461 + 0.387158 1.40937 -3.30626 -0.228393 0.946287 0.228862 + 0.601613 1.36411 -3.37827 0.321798 0.901763 -0.288566 + 0.555249 1.37678 -3.40721 0.334122 0.913865 -0.230681 + 0.526261 1.38436 -3.41455 0.235829 0.923571 -0.302325 + 0.485753 1.39471 -3.40748 0.312397 0.898944 -0.307094 + 0.463829 1.40797 -3.39984 0.534539 0.784976 -0.313178 + 0.619329 1.34505 -3.40407 0.474979 0.713402 -0.51522 + 0.572965 1.35764 -3.43306 0.437896 0.663495 -0.606647 + 0.528327 1.36562 -3.44609 0.194917 0.688982 -0.698077 + 0.487819 1.37588 -3.43906 0.152479 0.721684 -0.67522 + 0.657265 1.34065 -3.37004 0.593032 0.666855 -0.451241 + 0.630083 1.32452 -3.4159 0.589529 0.23171 -0.7738 + 0.569569 1.32693 -3.45287 0.434248 0.14585 -0.888908 + 0.524932 1.33491 -3.4659 0.146665 0.230935 -0.961851 + 0.490004 1.34003 -3.46416 0.0897001 0.32474 -0.94154 + 0.692149 1.32736 -3.32722 0.863762 0.366736 -0.345571 + 0.668019 1.32011 -3.38187 0.737632 0.273871 -0.617167 + 0.631042 1.25434 -3.39814 0.489285 -0.235391 -0.839756 + 0.570529 1.25675 -3.43512 0.435845 -0.298502 -0.84908 + 0.516745 1.26462 -3.46175 0.127914 -0.274834 -0.952945 + 0.679089 1.27673 -3.37073 0.759658 -0.00281797 -0.650317 + 0.65761 1.23795 -3.38175 0.477493 -0.192601 -0.857266 + 0.606513 1.1171 -3.35144 0.448723 -0.257495 -0.855771 + 0.685681 1.19519 -3.35049 0.745618 -0.0818122 -0.661333 + 0.664201 1.1564 -3.36151 0.162401 -0.204653 -0.965268 + 0.633081 1.10071 -3.33505 0.0239507 -0.220876 -0.975008 + 0.704194 1.08025 -3.32202 0.731503 -0.0652825 -0.678706 + 0.667664 1.07883 -3.34755 0.0803001 -0.161119 -0.983663 + 0.636544 1.02322 -3.32103 -0.0319817 -0.127823 -0.991281 + 0.613294 0.983224 -3.32556 0.396543 0.075697 -0.91489 + 0.583599 1.12337 -3.3677 0.413698 -0.306237 -0.857364 + 0.708008 0.92919 -3.30037 0.642857 0.0275413 -0.765491 + 0.671478 0.927766 -3.3259 0.305039 0.0231653 -0.952058 + 0.648228 0.887856 -3.33038 0.2457 0.150311 -0.957621 + 0.590379 0.98949 -3.34181 0.474715 0.033359 -0.879507 + 0.55476 1.09691 -3.36786 0.190968 -0.237163 -0.952515 + 0.807312 0.8757 -3.21712 0.561123 0.201085 -0.802936 + 0.736285 0.820761 -3.29156 0.579098 0.206179 -0.788756 + 0.669651 0.802808 -3.33947 0.476023 0.214456 -0.852884 + 0.592546 0.886392 -3.36024 0.44205 0.197623 -0.874949 + 0.833049 0.737981 -3.25239 0.538082 0.232332 -0.81024 + 0.770918 0.732946 -3.30046 0.565695 0.275949 -0.777072 + 0.704285 0.714901 -3.34841 0.44325 0.319158 -0.837656 + 0.613969 0.801339 -3.36932 0.45534 0.205917 -0.866177 + 0.888478 0.773687 -3.21123 0.567982 0.183687 -0.802282 + 0.853694 0.663423 -3.25465 0.650339 -0.0904432 -0.754241 + 0.791563 0.65847 -3.30267 0.763411 0.200832 -0.613897 + 0.784197 0.647313 -3.32094 0.656346 0.549182 -0.51731 + 0.729674 0.650131 -3.36422 0.41197 0.49529 -0.764832 + 0.92887 0.716168 -3.1782 0.664848 -0.0383567 -0.745993 + 0.892994 0.670479 -3.21567 0.76955 -0.160969 -0.617967 + 0.842585 0.617559 -3.24441 0.7351 0.113864 -0.668329 + 0.835219 0.606485 -3.26263 0.801096 0.461663 -0.380937 + 0.980501 0.730595 -3.13999 0.629372 -0.0288895 -0.776567 + 0.920828 0.628098 -3.16606 0.651729 0.0909913 -0.752974 + 0.881886 0.624614 -3.20543 0.722501 0.0317045 -0.690642 + 0.891832 0.577881 -3.21908 0.534798 0.638518 -0.553431 + 0.972459 0.64252 -3.12784 0.520016 0.054793 -0.852397 + 0.994589 0.583223 -3.13074 0.327934 0.629721 -0.704209 + 0.930774 0.581364 -3.17972 0.454383 0.666697 -0.590806 + 1.05871 0.662694 -3.09238 0.458811 0.203702 -0.864869 + 1.08084 0.603397 -3.09528 0.501695 0.29678 -0.812542 + 1.03412 0.56884 -3.14922 0.422113 0.632248 -0.649679 + 0.97031 0.566982 -3.19821 0.381049 0.774132 -0.505491 + 0.917456 0.547772 -3.26173 0.483719 0.717608 -0.501054 + 1.10836 0.726897 -3.03779 0.624903 0.218848 -0.749401 + 1.12758 0.661112 -3.04244 0.623997 0.248429 -0.740885 + 1.14228 0.592282 -3.05423 0.620139 0.26761 -0.737437 + 1.09371 0.52643 -3.11337 0.625206 0.325646 -0.709276 + 1.17045 0.71283 -2.98302 0.695398 0.235141 -0.679065 + 1.18938 0.64572 -2.98918 0.689498 0.263844 -0.674521 + 1.20408 0.57689 -3.00097 0.681756 0.268097 -0.680685 + 1.15514 0.515313 -3.07231 0.618157 0.259105 -0.742123 + 1.22635 0.705679 -2.92404 0.75791 0.250957 -0.602157 + 1.24529 0.638654 -2.93015 0.723852 0.298555 -0.622016 + 1.26352 0.578902 -2.93805 0.71217 0.281597 -0.643052 + 1.21596 0.512611 -3.01483 0.687582 0.257546 -0.678897 + 1.30118 0.653066 -2.85931 0.708234 0.351445 -0.612284 + 1.31942 0.593315 -2.86721 0.748489 0.29479 -0.594023 + 1.2754 0.514542 -2.95198 0.713026 0.240679 -0.658534 + 1.29227 0.447821 -2.95441 0.729493 0.204651 -0.652655 + 1.23276 0.442429 -3.02388 0.710127 0.232011 -0.664748 + 1.32933 0.706247 -2.79182 0.557873 0.252084 -0.790715 + 1.35431 0.66336 -2.79374 0.747785 0.210929 -0.629545 + 1.37088 0.599904 -2.79263 0.809278 0.248619 -0.532219 + 1.32947 0.522163 -2.88898 0.750871 0.252577 -0.610243 + 1.34634 0.455443 -2.89141 0.778821 0.172184 -0.60315 + 1.37391 0.738612 -2.76848 0.655395 0.0481836 -0.753748 + 1.39956 0.667331 -2.71382 0.82527 0.0249825 -0.564186 + 1.41613 0.603874 -2.71271 0.81195 0.247132 -0.528831 + 1.38094 0.528752 -2.81439 0.805896 0.25281 -0.535367 + 1.40063 0.465663 -2.81112 0.821897 0.181855 -0.539828 + 1.39239 0.812546 -2.72934 0.742928 0.323868 -0.585805 + 1.41427 0.75751 -2.72101 0.809959 0.0538787 -0.584006 + 1.43992 0.686233 -2.66636 0.722784 -0.0417284 -0.689813 + 1.46558 0.611347 -2.63985 0.645131 0.159636 -0.74721 + 1.43291 0.53521 -2.72537 0.820223 0.247739 -0.515616 + 1.43613 0.819446 -2.65289 0.798975 0.36091 -0.481023 + 1.45802 0.764408 -2.64456 0.784234 0.188934 -0.591 + 1.48718 0.714298 -2.63396 0.693372 0.122475 -0.710095 + 1.51284 0.639411 -2.60746 0.765854 0.0194789 -0.64272 + 1.48236 0.542768 -2.65247 0.808971 0.129818 -0.573335 + 1.40873 0.912972 -2.60628 0.716328 0.577249 -0.391992 + 1.46124 0.841065 -2.58493 0.769079 0.473773 -0.429017 + 1.50327 0.780374 -2.57541 0.775586 0.379359 -0.504532 + 1.53243 0.730259 -2.56481 0.823798 0.213562 -0.525117 + 1.55426 0.652742 -2.53995 0.866902 0.0218731 -0.497998 + 1.45178 0.922027 -2.49836 0.691849 0.611657 -0.383694 + 1.50043 0.854552 -2.50769 0.740065 0.514944 -0.432593 + 1.54246 0.793947 -2.49812 0.779228 0.437461 -0.448811 + 1.57515 0.749187 -2.48239 0.852548 0.264386 -0.450846 + 1.59698 0.67167 -2.45753 0.909424 0.0398459 -0.413958 + 1.39361 0.979989 -2.49315 0.543362 0.783952 -0.300293 + 1.48815 0.946809 -2.39809 0.641728 0.657973 -0.394026 + 1.53679 0.879339 -2.40742 0.737068 0.533261 -0.415166 + 1.57527 0.815265 -2.41484 0.776954 0.467845 -0.421265 + 1.35937 1.0365 -2.36624 0.420685 0.87693 -0.232417 + 1.43015 0.994892 -2.38437 0.473087 0.818023 -0.32715 + 1.52471 0.991998 -2.27056 0.611797 0.678336 -0.406895 + 1.56388 0.906056 -2.3267 0.727361 0.544335 -0.417906 + 1.60236 0.841891 -2.33416 0.82618 0.428335 -0.365998 + 1.27743 1.06971 -2.41596 0.600584 0.795858 -0.0768686 + 1.28157 1.06511 -2.39559 0.484029 0.874865 0.0181271 + 1.30015 1.05879 -2.37105 0.420067 0.895238 -0.148635 + 1.37522 1.05238 -2.28095 0.312883 0.896626 -0.313314 + 1.46671 1.04008 -2.25684 0.378151 0.848294 -0.370673 + 1.22658 1.11436 -2.44609 0.686137 0.724526 -0.0654051 + 1.23658 1.10612 -2.40041 0.660108 0.750974 0.0171641 + 1.24072 1.1016 -2.37999 0.668683 0.737594 0.093909 + 1.24393 1.09531 -2.36529 0.613106 0.789782 -0.0186014 + 1.2625 1.08908 -2.3407 0.503436 0.835522 -0.220125 + 1.18775 1.14912 -2.45389 0.684302 0.728927 0.0199044 + 1.19962 1.13794 -2.44374 0.660533 0.750396 0.0245554 + 1.20963 1.1297 -2.39806 0.655957 0.754313 0.0270673 + 1.2086 1.12749 -2.36263 0.659315 0.741602 0.123811 + 1.21181 1.12119 -2.34793 0.620873 0.783802 0.0130641 + 1.15943 1.1735 -2.41832 0.50957 0.85734 0.0728458 + 1.1713 1.16232 -2.40817 0.656824 0.753402 0.0311189 + 1.15925 1.17136 -2.38481 0.512867 0.857249 0.0457278 + 1.19758 1.13864 -2.37475 0.649799 0.756277 0.0762025 + 1.16163 1.16328 -2.33763 0.508381 0.823473 0.251873 + 1.13768 1.18233 -2.43142 0.129183 0.990719 0.0422811 + 1.13552 1.18105 -2.41161 0.152814 0.987582 0.0364712 + 1.13186 1.18171 -2.39315 0.173294 0.984571 -0.0242587 + 1.15061 1.17453 -2.34971 0.392002 0.873585 0.288417 + 1.12323 1.18489 -2.35805 0.117122 0.976248 0.182271 + 1.08854 1.16718 -2.28678 0.0116818 0.95891 0.283469 + 1.13451 1.168 -2.2984 0.256328 0.949696 0.179927 + 1.18562 1.14149 -2.33268 0.566389 0.816278 0.113548 + 1.07193 1.13042 -2.19791 0.0266725 0.945007 0.32596 + 1.1179 1.13115 -2.20958 0.172195 0.89986 0.400751 + 1.1585 1.1462 -2.29345 0.466686 0.831772 0.300598 + 1.20242 1.13319 -2.31351 0.395237 0.914411 -0.0874055 + 0.937486 1.13191 -2.21189 -0.332083 0.928381 0.166821 + 1.03487 1.11922 -2.16291 0.0351643 0.953752 0.298532 + 1.04583 1.10626 -2.12786 -0.0446316 0.94583 0.32158 + 1.06895 1.10064 -2.09712 -0.18693 0.960553 0.205902 + 1.10267 1.10541 -2.0876 0.00300693 0.990756 0.135622 + 1.13199 1.10347 -2.11343 0.229389 0.968709 0.0947763 + 1.14066 1.10399 -2.14793 0.244749 0.951117 0.188347 + 1.14071 1.11475 -2.17696 0.163689 0.920856 0.353879 + 1.13323 1.12325 -2.19868 0.129903 0.935574 0.328368 + 0.911044 1.11345 -2.22492 -0.963276 0.268069 0.0154602 + 0.940285 1.12247 -2.14673 -0.328392 0.894372 0.303738 + 0.951245 1.1095 -2.11167 -0.256759 0.809431 0.528107 + 0.9813 1.08014 -2.07162 -0.294401 0.784818 0.545334 + 1.00443 1.07461 -2.04084 -0.398733 0.888064 0.228809 + 0.920305 1.05709 -2.18069 -0.987307 -0.158592 0.00863486 + 0.913844 1.10391 -2.1598 -0.917789 0.344785 0.196943 + 0.924854 1.08378 -2.10833 -0.840551 0.253402 0.478814 + 0.95491 1.05443 -2.06828 -0.765272 0.297479 0.570846 + 0.931315 1.03687 -2.12927 -0.964255 -0.171283 0.202173 + 0.950425 1.01243 -2.07954 -0.927932 -0.106069 0.357339 + 0.969659 0.993571 -2.03348 -0.947 -0.0449968 0.318066 + 0.974144 1.03556 -2.02221 -0.914344 0.118798 0.387119 + 0.988982 1.05418 -2.00106 -0.745034 0.568496 0.348907 + 0.9335 0.994386 -2.14149 -0.970841 -0.132049 0.200078 + 0.952611 0.969858 -2.09181 -0.945439 -0.126386 0.300288 + 0.969799 0.949883 -2.04361 -0.950464 -0.104315 0.292807 + 0.99163 0.99924 -1.9591 -0.934978 0.102049 0.339709 + 1.00647 1.01785 -1.93794 -0.877015 0.331856 0.347444 + 0.947047 0.922664 -2.13107 -0.924332 -0.349831 0.152411 + 0.964235 0.902602 -2.08292 -0.957746 -0.130321 0.256397 + 0.991771 0.955552 -1.96923 -0.952357 -0.101618 0.287559 + 1.014 0.959053 -1.88549 -0.974349 -0.199628 0.103885 + 0.977004 0.797029 -2.08306 -0.954093 -0.100056 0.282305 + 0.986775 0.88534 -2.01142 -0.947548 -0.118233 0.29694 + 1.006 0.870142 -1.95989 -0.932876 -0.157087 0.324139 + 1.011 0.940273 -1.91776 -0.937037 -0.216011 0.274408 + 1.00511 0.628134 -2.04333 -0.896041 -0.25459 0.363722 + 1.03454 0.654822 -1.96195 -0.884102 -0.259336 0.388726 + 0.999544 0.779769 -2.01156 -0.939958 -0.13009 0.315523 + 1.02907 0.790633 -1.93678 -0.917207 -0.137907 0.373782 + 1.03466 0.865062 -1.88869 -0.939729 -0.188265 0.285423 + 1.03643 0.491839 -2.11245 -0.718326 -0.579297 0.385256 + 1.06777 0.515248 -2.0376 -0.669479 -0.593515 0.446697 + 1.09719 0.541936 -1.95623 -0.68675 -0.591894 0.421944 + 1.06407 0.665688 -1.88717 -0.849345 -0.26081 0.458903 + 1.13094 0.40575 -2.14854 -0.575993 -0.604141 0.550678 + 1.16228 0.429159 -2.07369 -0.60288 -0.671368 0.431046 + 1.19008 0.455437 -1.98781 -0.616682 -0.672129 0.409812 + 1.2211 0.481229 -1.89808 -0.663714 -0.67197 0.328541 + 1.12821 0.567733 -1.86651 -0.702856 -0.544659 0.457537 + 1.18918 0.259384 -2.20843 -0.64749 -0.532737 0.54493 + 1.21894 0.297052 -2.16027 -0.659153 -0.474784 0.583179 + 1.2501 0.32239 -2.08156 -0.736925 -0.521878 0.429634 + 1.2779 0.348663 -1.99567 -0.754168 -0.531704 0.385385 + 1.25634 0.164224 -2.23701 -0.670172 -0.628885 0.394174 + 1.29498 0.176688 -2.14659 -0.702887 -0.557584 0.441643 + 1.32614 0.201938 -2.06793 -0.75443 -0.510301 0.41283 + 1.36476 0.21381 -1.97769 -0.768286 -0.518039 0.375996 + 1.27614 0.086092 -2.34228 -0.55246 -0.772458 0.313204 + 1.31981 0.091549 -2.24473 -0.583983 -0.742856 0.327306 + 1.35845 0.104011 -2.15432 -0.634402 -0.692185 0.344113 + 1.39973 0.110487 -2.05993 -0.663337 -0.659972 0.352734 + 1.29001 0.043919 -2.45923 -0.420708 -0.874545 0.241196 + 1.33236 0.04906 -2.35634 -0.450329 -0.860929 0.236654 + 1.37603 0.054431 -2.25884 -0.47066 -0.846477 0.248911 + 1.42215 0.052258 -2.15928 -0.512005 -0.821614 0.250602 + 1.46343 0.05873 -2.06489 -0.505815 -0.81703 0.276792 + 1.24586 0.0383 -2.5529 -0.40197 -0.885474 0.233143 + 1.32447 0.025344 -2.47006 -0.270454 -0.946848 0.174167 + 1.36682 0.030486 -2.36717 -0.197779 -0.972139 0.125815 + 1.4169 0.033245 -2.26275 -0.202524 -0.973683 0.104526 + 1.27791 0.019255 -2.57732 -0.259785 -0.950946 0.167969 + 1.33261 0.023419 -2.47613 0.196222 -0.980274 -0.0236396 + 1.37851 0.030783 -2.37168 0.264077 -0.960865 -0.0836729 + 1.42859 0.03363 -2.26721 0.22163 -0.96943 -0.105291 + 1.28605 0.01733 -2.58338 0.196201 -0.980105 -0.0300053 + 1.31177 0.039233 -2.61412 0.542821 -0.818054 -0.190087 + 1.35501 0.043626 -2.51033 0.539472 -0.821016 -0.186823 + 1.4009 0.050985 -2.40587 0.516667 -0.832304 -0.200813 + 1.24117 0.011804 -2.68801 0.196778 -0.978806 -0.0567286 + 1.26688 0.033708 -2.71875 0.524446 -0.823346 -0.216925 + 1.35264 0.084103 -2.67244 0.679295 -0.68754 -0.256607 + 1.39589 0.088496 -2.56864 0.6508 -0.720002 -0.240951 + 1.43552 0.089799 -2.4631 0.614271 -0.747486 -0.252853 + 1.19412 0.010571 -2.78867 0.200901 -0.974925 -0.0957104 + 1.21938 0.0345 -2.82152 0.489494 -0.828939 -0.27066 + 1.30804 0.080062 -2.77604 0.657698 -0.697242 -0.285109 + 1.3159 0.131596 -2.85429 0.762123 -0.507885 -0.401523 + 1.3605 0.135637 -2.75069 0.78718 -0.513423 -0.34168 + 1.14672 0.019074 -2.8854 0.48808 -0.823107 -0.290298 + 1.17197 0.043004 -2.91825 0.467872 -0.839717 -0.27563 + 1.26054 0.08085 -2.8788 0.651794 -0.680302 -0.335192 + 1.2627 0.132812 -2.9466 0.784661 -0.43852 -0.438187 + 1.11726 0.04216 -3.01339 0.50675 -0.825445 -0.248687 + 1.20361 0.082894 -2.98534 0.615799 -0.705182 -0.35144 + 1.20578 0.134944 -3.05309 0.750552 -0.411881 -0.516745 + 1.23257 0.198224 -3.0411 0.832212 -0.134002 -0.538022 + 1.28577 0.197006 -2.94879 0.82367 -0.270193 -0.498562 + 1.06385 0.038414 -3.1255 0.546693 -0.778636 -0.307982 + 1.14891 0.082051 -3.08048 0.672507 -0.628995 -0.389999 + 1.14272 0.132298 -3.13651 0.762568 -0.319812 -0.562326 + 1.17071 0.195576 -3.11291 0.767707 -0.146829 -0.623753 + 1.00439 0.03507 -3.21691 0.560201 -0.758229 -0.333561 + 1.08511 0.074678 -3.15911 0.657542 -0.599452 -0.456395 + 1.07893 0.12484 -3.21519 0.7338 -0.31935 -0.599628 + 1.10766 0.192935 -3.19634 0.772763 -0.050199 -0.632706 + 0.949043 0.030887 -3.29986 0.549324 -0.724851 -0.415733 + 1.02565 0.071333 -3.25052 0.724519 -0.497494 -0.477045 + 1.0167 0.11971 -3.28931 0.77394 -0.199875 -0.600888 + 1.04185 0.188535 -3.26612 0.744788 -0.0415938 -0.666004 + 0.887218 0.033712 -3.37595 0.504073 -0.713261 -0.487 + 0.966535 0.072591 -3.32869 0.687346 -0.472205 -0.551886 + 0.957584 0.120966 -3.36748 0.753851 -0.176111 -0.633003 + 0.979623 0.183405 -3.34023 0.76658 0.0446406 -0.640595 + 0.820874 0.04374 -3.44972 0.452365 -0.720547 -0.525526 + 0.90471 0.07541 -3.40478 0.655355 -0.46554 -0.594797 + 0.891333 0.117574 -3.44041 0.717991 -0.186819 -0.670513 + 0.916497 0.168037 -3.41381 0.74106 0.043587 -0.670023 + 0.749319 0.051972 -3.51798 0.401379 -0.722141 -0.56339 + 0.834662 0.079343 -3.47739 0.5872 -0.508025 -0.630164 + 0.821285 0.121507 -3.51302 0.665907 -0.201872 -0.718203 + 0.850245 0.164647 -3.48674 0.712563 0.0526355 -0.699631 + 0.674804 0.068439 -3.5843 0.32359 -0.758158 -0.566114 + 0.763107 0.087575 -3.54565 0.533237 -0.526078 -0.662495 + 0.747396 0.126027 -3.58025 0.629351 -0.217549 -0.746049 + 0.779473 0.166045 -3.55116 0.67338 0.0539229 -0.737328 + 0.587938 0.081027 -3.64191 0.273497 -0.725732 -0.631278 + 0.682155 0.090917 -3.60984 0.430722 -0.612291 -0.663007 + 0.666445 0.129282 -3.64449 0.534465 -0.343079 -0.772427 + 0.705585 0.170568 -3.6184 0.661444 0.00572989 -0.749972 + 0.582969 0.059404 -3.62245 0.328086 -0.719442 -0.612178 + 0.495604 0.097005 -3.69178 0.195581 -0.695335 -0.691561 + 0.595289 0.103505 -3.66744 0.321267 -0.631731 -0.705481 + 0.584202 0.141342 -3.69718 0.3921 -0.431442 -0.812475 + 0.636835 0.183147 -3.68218 0.595842 -0.0951547 -0.797445 + 0.490635 0.07538 -3.67233 0.31935 -0.443692 -0.837349 + 0.392792 0.111121 -3.72923 0.153326 -0.651705 -0.742814 + 0.499956 0.118466 -3.71255 0.219973 -0.623153 -0.750528 + 0.488869 0.156304 -3.74229 0.245794 -0.494677 -0.833595 + 0.554592 0.195121 -3.73492 0.445141 -0.198265 -0.873236 + 0.389211 0.068004 -3.70975 0.0901472 -0.756543 -0.647701 + 0.389172 0.088973 -3.71367 0.206662 -0.414812 -0.886127 + 0.285338 0.121152 -3.7546 0.0858579 -0.616796 -0.782426 + 0.397144 0.132582 -3.75 0.172042 -0.581549 -0.795111 + 0.389831 0.172658 -3.77302 0.177267 -0.471326 -0.863961 + 0.280005 0.078806 -3.72246 -0.0160651 -0.903159 -0.429006 + 0.281718 0.099004 -3.73904 0.0738285 -0.616244 -0.784087 + 0.174334 0.128605 -3.76831 0.00536578 -0.681278 -0.732005 + 0.290328 0.147155 -3.77605 0.0913476 -0.556444 -0.825848 + 0.283016 0.187238 -3.79907 0.0716524 -0.397154 -0.914951 + 0.27918 0.080809 -3.67453 -0.0947214 -0.983147 0.156365 + 0.168313 0.087526 -3.72896 -0.0809119 -0.887337 -0.453968 + 0.170026 0.107717 -3.74554 -0.0386115 -0.700158 -0.712943 + 0.059143 0.132298 -3.76991 -0.00293313 -0.707647 -0.70656 + 0.179324 0.15461 -3.78975 0.0395974 -0.518969 -0.853875 + 0.279441 0.105189 -3.59316 -0.115536 -0.91874 0.377582 + 0.174324 0.110026 -3.60193 -0.0329214 -0.934406 0.354685 + 0.174064 0.085731 -3.68326 -0.0660142 -0.990614 0.119694 + 0.054835 0.097839 -3.71703 -0.0334079 -0.971145 -0.236139 + 0.054835 0.111412 -3.74713 -0.00920017 -0.833823 -0.551956 + 0.261284 0.173084 -3.47735 -0.107452 -0.844954 0.523934 + 0.165895 0.160955 -3.49994 0.00289706 -0.861474 0.507794 + 0.060586 0.098942 -3.61633 0.0324895 -0.968829 0.24559 + 0.060586 0.096136 -3.67128 -0.0153833 -0.999194 0.0370713 + -0.054834 0.097839 -3.71703 0.0538067 -0.973959 -0.220247 + 0.143003 0.259629 -3.35765 0.0364686 -0.779498 0.625342 + 0.052156 0.233569 -3.37552 0.0421687 -0.802373 0.595331 + 0.052156 0.149869 -3.51435 0.0120491 -0.876828 0.480654 + -0.052156 0.149869 -3.51435 -0.0193578 -0.8719 0.489301 + -0.060586 0.098947 -3.61634 0.000757084 -0.962699 0.270575 + 0.13916 0.343427 -3.2622 0.0232743 -0.636446 0.77097 + 0.048313 0.317362 -3.28005 0.0248013 -0.66934 0.742542 + -0.052156 0.233564 -3.37551 -0.0603506 -0.81052 0.582593 + 0.048313 0.39542 -3.22765 -0.00128654 -0.283842 0.95887 + -0.048316 0.39542 -3.22765 -0.00859111 -0.291272 0.956602 + -0.048316 0.317362 -3.28005 -0.0297717 -0.664647 0.746564 + -0.143003 0.259629 -3.35765 -0.0297728 -0.78688 0.616388 + 0.159773 0.610328 -3.23008 -0.150103 0.081427 0.985312 + 0.048793 0.596376 -3.23252 -0.016907 0.0980659 0.995036 + -0.048793 0.596376 -3.23252 0.0219971 0.0903335 0.995669 + -0.159296 0.409373 -3.22522 0.0840981 -0.254132 0.963506 + -0.139163 0.343427 -3.2622 -0.00319524 -0.623154 0.782092 + 0.131025 0.959799 -3.27998 -0.229988 0.129924 0.964482 + 0.048793 0.941243 -3.29465 -0.0959883 0.14968 0.984064 + -0.048793 0.941243 -3.29465 0.106681 0.161356 0.981113 + -0.131025 0.959799 -3.27998 0.224561 0.140295 0.964308 + -0.159772 0.610328 -3.23008 0.142823 0.073393 0.987023 + 0.153945 1.1952 -3.31131 -0.174267 0.175552 0.968923 + 0.114166 1.17597 -3.31341 -0.154999 0.130972 0.979194 + 0.031933 1.15733 -3.32813 -0.0904492 0.105169 0.990332 + -0.031937 1.15732 -3.32811 0.09557 0.0980074 0.990586 + 0.190822 1.18046 -3.29858 -0.316954 0.180388 0.931128 + 0.160899 1.2621 -3.32539 -0.0991105 0.23849 0.966074 + 0.11631 1.26212 -3.32542 -0.0824543 0.192453 0.977836 + 0.076531 1.24281 -3.32756 -0.131371 0.153666 0.979351 + 0.197776 1.24736 -3.31266 -0.249331 0.293441 0.92289 + 0.177853 1.30956 -3.33679 -0.049485 0.280975 0.958439 + 0.153964 1.31145 -3.33627 0.0298063 0.229923 0.972752 + 0.109375 1.31139 -3.33635 -0.0939241 0.170043 0.98095 + 0.062433 1.31188 -3.34561 -0.19475 0.221675 0.955475 + 0.203355 1.25836 -3.31571 -0.26872 0.299404 0.915504 + 0.183432 1.32056 -3.33984 -0.0685056 0.292341 0.953857 + 0.170708 1.37497 -3.35408 0.0321088 0.35861 0.932935 + 0.146819 1.37676 -3.35359 0.0127079 0.474305 0.880269 + 0.100607 1.34927 -3.34237 -0.101084 0.327527 0.939419 + 0.280732 1.22028 -3.26996 -0.408561 0.234757 0.882024 + 0.222911 1.28587 -3.31456 -0.402411 0.211562 0.890678 + 0.211256 1.33662 -3.33106 -0.454471 0.24275 0.857046 + 0.186303 1.34668 -3.34808 -0.15653 0.291956 0.943536 + 0.308595 1.21723 -3.25627 -0.428268 0.279597 0.859309 + 0.26534 1.28981 -3.29397 -0.43334 0.192196 0.880498 + 0.253685 1.34056 -3.31048 -0.50602 0.109472 0.855546 + 0.214499 1.40225 -3.35213 -0.47451 0.399363 0.784443 + 0.189546 1.41231 -3.36916 -0.0726872 0.392406 0.916916 + 0.335804 1.2802 -3.26094 -0.416463 0.221702 0.881707 + 0.293203 1.28675 -3.28029 -0.400339 0.192104 0.896005 + 0.296609 1.33174 -3.28701 -0.43812 0.0485444 0.897605 + 0.258705 1.38294 -3.30408 -0.547454 0.241454 0.801245 + 0.33921 1.32519 -3.26767 -0.329269 0.164307 0.929831 + 0.301628 1.37404 -3.28067 -0.244839 0.289297 0.925398 + 0.294955 1.40256 -3.30208 -0.0987777 0.800415 0.591252 + 0.268466 1.40904 -3.31769 -0.178262 0.829259 0.529672 + 0.22426 1.42835 -3.36575 -0.0703497 0.858586 0.50782 + 0.336362 1.37408 -3.28175 -0.125644 0.498092 0.857973 + 0.329689 1.40261 -3.30316 0.0753393 0.797063 0.599178 + 0.291361 1.41354 -3.36028 -0.0218483 0.986369 0.163091 + 0.264872 1.42001 -3.37589 0.223335 0.970896 0.086503 + 0.351495 1.41275 -3.32132 -0.141962 0.868005 0.475829 + 0.313167 1.42367 -3.37844 -0.32941 0.93576 0.125867 + 0.29845 1.41438 -3.42715 -0.0514491 0.977812 -0.203066 + 1.17383 1.1383 -2.28255 0.194613 0.970105 0.14499 + 1.22424 1.13141 -2.28583 0.413817 0.904967 -0.0989409 + 1.22861 1.11298 -2.32871 0.528261 0.821847 -0.213325 + 1.19565 1.13651 -2.25487 0.109195 0.982264 0.152424 + 1.2357 1.12492 -2.25118 0.541182 0.808211 0.2322 + 1.2456 1.11119 -2.3016 0.564608 0.807396 -0.171257 + 1.27949 1.08729 -2.3136 0.475525 0.854761 -0.207989 + 1.20313 1.12802 -2.23314 0.239668 0.884039 0.401291 + 1.2362 1.1012 -2.2137 0.137806 0.951148 0.276272 + 1.25706 1.10469 -2.26695 0.495192 0.86841 -0.0254913 + 1.27976 1.09644 -2.26906 0.372953 0.917345 -0.139225 + 1.316 1.07477 -2.28571 0.385327 0.893984 -0.228726 + 1.20362 1.1043 -2.19567 0.238304 0.889581 0.389688 + 1.24091 1.09246 -2.16535 -0.071895 0.977773 0.196955 + 1.26129 1.10663 -2.2153 0.0715909 0.995352 0.0644136 + 1.28399 1.0983 -2.21747 0.327265 0.944682 -0.0217718 + 1.31627 1.08384 -2.24124 0.347565 0.927761 -0.135862 + 1.20357 1.09346 -2.1667 0.126448 0.954904 0.268644 + 1.24051 1.08368 -2.11575 -0.126674 0.989325 0.0720449 + 1.26601 1.0978 -2.167 -0.0723418 0.989714 0.12342 + 1.29085 1.09788 -2.18675 0.18714 0.982137 -0.019651 + 1.20317 1.08477 -2.11704 0.127915 0.98607 0.106317 + 1.22956 1.08229 -2.07395 -0.133262 0.984262 -0.116057 + 1.28135 1.09502 -2.12479 -0.137151 0.990519 0.00790676 + 1.3062 1.0951 -2.14453 0.0604684 0.995696 -0.0702398 + 1.32313 1.08342 -2.21051 -0.0672484 0.997689 0.0097306 + 1.1945 1.08434 -2.08249 0.164639 0.986353 -0.00122404 + 1.20388 1.08947 -2.01999 0.0502951 0.903703 -0.425196 + 1.27041 1.09363 -2.08299 -0.27621 0.955386 -0.104625 + 1.28695 1.09954 -2.07262 -0.17438 0.976454 -0.127 + 1.3294 1.10126 -2.095 -0.0517155 0.987727 -0.147377 + 1.16882 1.09152 -2.02854 0.0959799 0.994324 -0.0458997 + 1.22043 1.09538 -2.00962 -0.138517 0.979629 -0.145398 + 1.29729 1.10744 -2.02971 -0.135188 0.984822 -0.108855 + 1.33975 1.10917 -2.0521 -0.0840485 0.98392 -0.157597 + 1.1395 1.09346 -2.0027 0.0166381 0.997789 0.0643516 + 1.21825 1.09746 -1.98082 -0.117738 0.992968 0.0123341 + 1.29512 1.10951 -2.0009 -0.169237 0.97886 -0.114858 + 1.33864 1.11785 -1.99854 -0.118338 0.982547 -0.143519 + 1.38558 1.11758 -2.01527 -0.0404582 0.978936 -0.200118 + 1.0773 1.09187 -1.97934 -0.139717 0.980491 0.138261 + 1.08885 1.08668 -1.91054 -0.0543864 0.997953 -0.0336387 + 1.15105 1.08818 -1.93396 -0.0322639 0.997527 0.0624434 + 1.04358 1.08718 -1.98882 -0.335124 0.920743 0.199811 + 1.02814 1.06684 -1.94899 -0.656876 0.724309 0.2095 + 1.04704 1.09328 -1.87537 -0.0568165 0.973459 -0.221696 + 1.14875 1.08447 -1.81252 0.0166636 0.99893 0.0431429 + 1.01312 1.00698 -1.8999 -0.865874 0.464506 0.185732 + 1.03479 1.05596 -1.91095 -0.999783 -0.00282248 0.0206327 + 1.02131 1.08018 -1.88689 -0.783526 0.443773 -0.434916 + 0.983915 1.11468 -1.79325 -0.102163 0.983633 -0.148422 + 1.10695 1.09107 -1.77734 0.193433 0.980445 0.036208 + 1.00757 0.9871 -1.87747 -0.999527 0.0279341 0.0128563 + 1.01754 1.01435 -1.84748 -0.980148 0.0821281 -0.180456 + 1.00406 1.03856 -1.82341 -0.881742 -0.332062 -0.33506 + 0.958184 1.10158 -1.80475 -0.844795 0.338915 -0.414075 + 0.969238 1.11357 -1.74933 -0.426329 0.859398 0.282274 + 1.01144 0.973013 -1.82287 -0.992641 -0.100177 0.0680311 + 1.01199 0.994478 -1.82505 -0.999822 -0.0137948 0.0128437 + 1.01533 0.98769 -1.79489 -0.983281 -0.180019 -0.0274183 + 0.996084 1.02283 -1.77676 -0.852529 -0.450039 -0.265817 + 0.950205 1.08585 -1.75811 -0.997753 0.00627019 0.0667073 + 1.01787 0.944963 -1.83089 -0.948448 -0.308782 0.0714167 + 1.01477 0.966219 -1.79271 -0.977988 -0.167108 0.124954 + 1.03766 0.883841 -1.85642 -0.936011 -0.29024 0.199107 + 1.05344 0.863585 -1.81634 -0.869877 -0.456995 0.185658 + 1.03365 0.924709 -1.79081 -0.918624 -0.378818 0.11237 + 1.02065 0.95854 -1.7576 -0.920918 -0.382938 -0.0725823 + 1.05773 0.785549 -1.86557 -0.899163 -0.216533 0.380289 + 1.09745 0.79464 -1.78372 -0.871335 -0.271412 0.408793 + 1.08484 0.863034 -1.74498 -0.811353 -0.472962 0.34353 + 1.10162 0.703111 -1.81219 -0.838781 -0.265915 0.475117 + 1.14134 0.7122 -1.73033 -0.842879 -0.285457 0.456146 + 1.19672 0.711416 -1.63137 -0.832189 -0.330822 0.444992 + 1.12885 0.794089 -1.71237 -0.849674 -0.358839 0.386378 + 1.16576 0.605239 -1.79147 -0.747742 -0.443804 0.493882 + 1.19759 0.632303 -1.70194 -0.770217 -0.466625 0.434772 + 1.25297 0.631515 -1.60298 -0.718975 -0.531517 0.447844 + 1.24 0.709635 -1.55049 -0.78085 -0.247533 0.573585 + 1.2434 0.501544 -1.78166 -0.723235 -0.581448 0.372624 + 1.27523 0.528608 -1.69214 -0.720071 -0.51528 0.464741 + 1.30463 0.57125 -1.6108 -0.679335 -0.545572 0.490771 + 1.35822 0.581842 -1.52854 -0.656583 -0.539662 0.526938 + 1.30656 0.642111 -1.52073 -0.660908 -0.507948 0.55244 + 1.3082 0.368428 -1.9001 -0.776223 -0.545595 0.315918 + 1.3305 0.388747 -1.78369 -0.756266 -0.57022 0.320797 + 1.36581 0.406463 -1.68898 -0.730104 -0.523775 0.438872 + 1.39521 0.449102 -1.60763 -0.723074 -0.48696 0.489932 + 1.39505 0.233576 -1.88213 -0.767191 -0.520094 0.375393 + 1.4351 0.243462 -1.79225 -0.74423 -0.554587 0.37223 + 1.47042 0.261177 -1.69754 -0.73133 -0.564573 0.38264 + 1.51087 0.270411 -1.60753 -0.737571 -0.529534 0.419025 + 1.48207 0.129597 -1.87343 -0.683504 -0.633734 0.362221 + 1.52211 0.139485 -1.78356 -0.684904 -0.628296 0.368986 + 1.56892 0.142187 -1.69044 -0.68261 -0.632699 0.365698 + 1.43834 0.12236 -1.9697 -0.68387 -0.636318 0.356961 + 1.54867 0.072714 -1.86511 -0.541253 -0.786384 0.297733 + 1.60296 0.071117 -1.76894 -0.548631 -0.785206 0.287151 + 1.64978 0.073826 -1.67583 -0.594865 -0.743055 0.306601 + 1.60938 0.151428 -1.60044 -0.69843 -0.62922 0.340994 + 1.50495 0.06539 -1.96142 -0.529744 -0.799468 0.283236 + 1.55544 0.042441 -1.96028 -0.128213 -0.985428 0.111771 + 1.60319 0.045063 -1.86662 -0.144472 -0.985996 0.0833079 + 1.65748 0.043559 -1.77041 -0.154326 -0.987293 0.0378994 + 1.70933 0.036278 -1.6716 -0.220039 -0.974594 0.0418279 + 1.51392 0.035693 -2.06379 -0.118869 -0.987129 0.106985 + 1.59725 0.050773 -1.9709 0.28735 -0.952473 -0.101115 + 1.645 0.053394 -1.87724 0.255373 -0.957105 -0.136877 + 1.69304 0.049387 -1.7757 0.224058 -0.959964 -0.168126 + 1.74489 0.042194 -1.67685 0.200715 -0.952112 -0.230643 + 1.46302 0.031072 -2.16318 -0.151168 -0.984575 0.0880925 + 1.5377 0.03982 -2.07013 0.281672 -0.956024 -0.0817188 + 1.5584 0.054865 -2.10739 0.448973 -0.873183 -0.189669 + 1.61795 0.065818 -2.00816 0.470416 -0.858163 -0.205585 + 1.67244 0.068455 -1.90453 0.409726 -0.884014 -0.225042 + 1.4868 0.035107 -2.16957 0.295092 -0.946694 -0.129194 + 1.50602 0.052899 -2.20699 0.438454 -0.869963 -0.225661 + 1.58162 0.083373 -2.16217 0.614934 -0.74329 -0.263392 + 1.62722 0.088345 -2.05878 0.60824 -0.742768 -0.279892 + 1.68171 0.091068 -1.9551 0.594195 -0.735021 -0.326614 + 1.44781 0.051335 -2.30468 0.449054 -0.862328 -0.233966 + 1.52924 0.081407 -2.26176 0.526251 -0.802257 -0.281857 + 1.5361 0.121257 -2.34579 0.669314 -0.663609 -0.334129 + 1.5781 0.118879 -2.24587 0.790392 -0.519879 -0.324048 + 1.6237 0.123939 -2.14243 0.808366 -0.48473 -0.334038 + 1.48243 0.090151 -2.36191 0.53415 -0.794824 -0.287989 + 1.48929 0.129995 -2.44592 0.631937 -0.699259 -0.334204 + 1.51576 0.167229 -2.46501 0.774431 -0.511087 -0.37289 + 1.55775 0.164852 -2.3651 0.858598 -0.397825 -0.323334 + 1.59089 0.16895 -2.26439 0.878137 -0.345949 -0.330448 + 1.44616 0.135233 -2.545 0.720464 -0.622236 -0.306194 + 1.47405 0.177061 -2.55984 0.774775 -0.505775 -0.379361 + 1.461 0.248108 -2.6577 0.826048 -0.357328 -0.435846 + 1.50271 0.238276 -2.56287 0.84771 -0.346865 -0.401339 + 1.5414 0.229123 -2.47201 0.854706 -0.369007 -0.365118 + 1.40652 0.13393 -2.65054 0.744357 -0.583335 -0.325043 + 1.43091 0.182214 -2.65897 0.840434 -0.388022 -0.378298 + 1.41123 0.246872 -2.74796 0.8547 -0.287013 -0.432564 + 1.44686 0.33257 -2.73139 0.84968 -0.199013 -0.4883 + 1.49747 0.340717 -2.6479 0.883143 -0.175278 -0.435127 + 1.38632 0.185582 -2.7542 0.834678 -0.375493 -0.402887 + 1.36663 0.250236 -2.84319 0.825653 -0.28402 -0.487473 + 1.39708 0.331328 -2.82164 0.857538 -0.116913 -0.500959 + 1.37354 0.397061 -2.86469 0.823809 0.0155686 -0.566653 + 1.42783 0.407363 -2.78434 0.844701 -0.0024908 -0.535233 + 1.34029 0.187375 -2.85431 0.865257 -0.252638 -0.433018 + 1.31287 0.247542 -2.92752 0.841424 -0.178422 -0.510069 + 1.33473 0.319051 -2.90858 0.822832 -0.0951803 -0.560258 + 1.31119 0.384784 -2.95163 0.773205 0.0210807 -0.633806 + 1.25835 0.25717 -3.02199 0.787327 -0.172088 -0.592032 + 1.28097 0.316272 -2.99296 0.821111 0.0322024 -0.569859 + 1.25167 0.379392 -3.02109 0.757663 0.120298 -0.641464 + 1.19801 0.257929 -3.09751 0.775382 -0.0560858 -0.628996 + 1.22401 0.308672 -3.0596 0.761525 0.0677958 -0.64458 + 1.19471 0.371712 -3.08779 0.701771 0.120874 -0.702074 + 1.13615 0.255278 -3.16932 0.724929 -0.0724772 -0.685 + 1.16367 0.309433 -3.13512 0.744582 0.136117 -0.653506 + 1.13457 0.383945 -3.14298 0.699053 0.226511 -0.678246 + 1.17194 0.445132 -3.08136 0.662967 0.274658 -0.696446 + 1.07432 0.25742 -3.23383 0.73092 0.0408514 -0.68124 + 1.10446 0.320445 -3.19199 0.70577 0.158678 -0.690442 + 1.07535 0.395043 -3.1998 0.681112 0.252963 -0.687093 + 1.11179 0.457364 -3.13654 0.668815 0.333525 -0.664415 + 1.00851 0.253025 -3.30362 0.718451 0.0519048 -0.693639 + 1.04262 0.322675 -3.25645 0.706391 0.17828 -0.685003 + 1.01994 0.404621 -3.25099 0.681459 0.277771 -0.677094 + 1.05221 0.499857 -3.17234 0.645736 0.378265 -0.66328 + 0.944428 0.249624 -3.37032 0.732425 0.115271 -0.671019 + 0.980638 0.325053 -3.31757 0.697502 0.190228 -0.690872 + 0.957952 0.406999 -3.31211 0.678046 0.278316 -0.68029 + 0.996791 0.50944 -3.22354 0.632031 0.444915 -0.634498 + 0.881302 0.234337 -3.44385 0.706798 0.126796 -0.695959 + 0.916559 0.321651 -3.38428 0.696719 0.206907 -0.686856 + 0.899258 0.399787 -3.37301 0.672912 0.279736 -0.68479 + 0.943938 0.490236 -3.28708 0.646297 0.409179 -0.644106 + 0.876258 0.541468 -3.31861 0.473963 0.683883 -0.554674 + 0.817145 0.232554 -3.50676 0.68057 0.157737 -0.715502 + 0.853666 0.326434 -3.44337 0.669238 0.237034 -0.704227 + 0.836365 0.404575 -3.43211 0.633331 0.301495 -0.712736 + 0.885244 0.483021 -3.34798 0.629417 0.379515 -0.678087 + 0.746372 0.233952 -3.57118 0.669883 0.156931 -0.725692 + 0.789509 0.324651 -3.50627 0.662242 0.263051 -0.701598 + 0.769752 0.39896 -3.49018 0.629927 0.332175 -0.702034 + 0.826932 0.46533 -3.40914 0.598605 0.39314 -0.697935 + 0.817946 0.523864 -3.37972 0.648699 0.355459 -0.672933 + 0.680662 0.232892 -3.63234 0.679381 0.154297 -0.71738 + 0.724944 0.323717 -3.56626 0.646391 0.269001 -0.714014 + 0.705187 0.397941 -3.55022 0.552641 0.451557 -0.700488 + 0.760318 0.459718 -3.46722 0.525491 0.431257 -0.733401 + 0.763341 0.514662 -3.43259 0.527047 0.380368 -0.759962 + 0.611912 0.245471 -3.69613 0.608378 0.150566 -0.779235 + 0.659234 0.322565 -3.62746 0.632226 0.313554 -0.708501 + 0.633228 0.392851 -3.6094 0.524499 0.509453 -0.682172 + 0.686246 0.450249 -3.51362 0.447668 0.54437 -0.709404 + 0.689269 0.50519 -3.47898 0.451928 0.465408 -0.761023 + 0.53144 0.25276 -3.74876 0.483301 0.0969158 -0.870073 + 0.592167 0.301591 -3.69274 0.568567 0.318986 -0.758274 + 0.566161 0.371871 -3.67466 0.523248 0.454411 -0.720918 + 0.614287 0.445155 -3.57279 0.526912 0.546538 -0.650891 + 0.608234 0.503811 -3.53379 0.556263 0.458323 -0.69319 + 0.44283 0.266892 -3.78923 0.322154 0.0675238 -0.944276 + 0.511694 0.308967 -3.74531 0.474516 0.321334 -0.819499 + 0.494656 0.378376 -3.71793 0.459761 0.460824 -0.759119 + 0.541237 0.456002 -3.63058 0.527577 0.509415 -0.679823 + 0.535184 0.51466 -3.59158 0.537571 0.473167 -0.697947 + 0.465982 0.209252 -3.7754 0.3021 -0.258712 -0.917498 + 0.355308 0.284864 -3.81136 0.19792 0.0967771 -0.975429 + 0.431191 0.33672 -3.77258 0.354235 0.346198 -0.868714 + 0.414152 0.406132 -3.74521 0.36191 0.489554 -0.79332 + 0.469732 0.4625 -3.67384 0.430857 0.527184 -0.73242 + 0.366945 0.225613 -3.80614 0.181632 -0.242402 -0.953022 + 0.252434 0.307248 -3.82213 0.0817809 0.081911 -0.993279 + 0.343669 0.354777 -3.79466 0.231617 0.325292 -0.916809 + 0.328062 0.418079 -3.7713 0.241082 0.47718 -0.845091 + 0.389347 0.471242 -3.70698 0.340012 0.549087 -0.763475 + 0.26407 0.248002 -3.81692 0.0603427 -0.160659 -0.985164 + 0.147688 0.318304 -3.82488 -0.00684758 0.108863 -0.994033 + 0.248549 0.359507 -3.81045 0.124471 0.288709 -0.949291 + 0.232942 0.422812 -3.7871 0.176342 0.414317 -0.892885 + 0.303257 0.483193 -3.73308 0.279063 0.525115 -0.803977 + 0.176903 0.195293 -3.80722 0.0407228 -0.336927 -0.94065 + 0.157958 0.255972 -3.82512 0.0188621 -0.12006 -0.992587 + 0.046452 0.314111 -3.81882 -0.0291123 0.0995672 -0.994605 + 0.143803 0.370477 -3.81325 -0.00485322 0.230677 -0.973018 + 0.145096 0.431693 -3.79748 0.047996 0.336661 -0.940402 + 0.056722 0.196941 -3.80987 -0.00373321 -0.291163 -0.956666 + 0.056722 0.251864 -3.81901 -0.0298785 -0.0846121 -0.995966 + -0.046453 0.314111 -3.81882 0.0302387 0.0984484 -0.994683 + 0.046452 0.391079 -3.80313 -0.0262006 0.226635 -0.973627 + 0.047745 0.452294 -3.78736 0.0110155 0.228217 -0.973548 + 0.059143 0.156342 -3.79236 0.00529499 -0.546063 -0.837727 + -0.056722 0.196941 -3.80987 -0.00851193 -0.281138 -0.95963 + -0.056722 0.251864 -3.81901 0.0163078 -0.0953417 -0.995311 + -0.147688 0.318304 -3.82488 0.00542591 0.107405 -0.994201 + -0.046453 0.391079 -3.80313 0.0270779 0.227553 -0.973389 + -0.059144 0.132308 -3.76993 0.00680413 -0.70964 -0.704532 + -0.059144 0.156351 -3.79237 -0.00182354 -0.543587 -0.839351 + -0.176904 0.195293 -3.80722 -0.0322481 -0.331945 -0.942747 + -0.157958 0.255972 -3.82512 -0.00591289 -0.134356 -0.990915 + -0.054834 0.111412 -3.74713 0.0307269 -0.824498 -0.56503 + -0.174334 0.128615 -3.76833 -0.00914269 -0.683778 -0.729633 + -0.179325 0.154625 -3.78978 -0.0428574 -0.516867 -0.854992 + -0.290328 0.147155 -3.77605 -0.094679 -0.559306 -0.823537 + -0.283017 0.187238 -3.79907 -0.114784 -0.36001 -0.925861 + -0.168312 0.087521 -3.72895 0.0496754 -0.898873 -0.435385 + -0.170024 0.107717 -3.74554 0.0118117 -0.687459 -0.726127 + -0.281723 0.098999 -3.73903 -0.0584176 -0.603617 -0.795131 + -0.285337 0.121152 -3.7546 -0.091184 -0.614501 -0.783629 + -0.060586 0.096136 -3.67128 0.0466666 -0.998847 0.0113056 + -0.174064 0.085736 -3.68326 0.048937 -0.993376 0.103972 + -0.27918 0.080809 -3.67453 0.0927764 -0.98278 0.159801 + -0.28001 0.078715 -3.7225 0.0430148 -0.907461 -0.417929 + -0.174324 0.110026 -3.60193 0.0166475 -0.929162 0.369299 + -0.279441 0.105189 -3.59316 0.111749 -0.920389 0.374694 + -0.388386 0.070091 -3.66177 0.149617 -0.978069 0.144895 + -0.389216 0.067999 -3.70974 -0.117379 -0.768087 -0.629496 + -0.165895 0.16095 -3.49994 0.00834939 -0.856492 0.516093 + -0.261283 0.173084 -3.47735 0.0987227 -0.837787 0.536998 + -0.373358 0.097524 -3.56988 0.202337 -0.906663 0.370164 + -0.238391 0.271757 -3.33506 0.0595084 -0.770229 0.634984 + -0.320792 0.288955 -3.30525 0.151164 -0.739532 0.655928 + -0.3552 0.165506 -3.45403 0.181601 -0.824866 0.535366 + -0.433629 0.173555 -3.41737 0.311265 -0.773587 0.551976 + -0.458605 0.088544 -3.53053 0.331167 -0.862598 0.382431 + -0.230969 0.366491 -3.24114 0.0995276 -0.594179 0.798151 + -0.31337 0.383687 -3.21133 0.141697 -0.58093 0.801525 + -0.381253 0.419616 -3.17396 0.228272 -0.520139 0.823011 + -0.399221 0.297007 -3.26859 0.174258 -0.706702 0.685717 + -0.251102 0.432437 -3.20417 0.250327 -0.243591 0.937016 + -0.316227 0.474584 -3.16837 0.38403 -0.20214 0.900922 + -0.384109 0.510512 -3.131 0.406972 -0.225809 0.88509 + -0.241066 0.63853 -3.21133 0.377262 0.0614409 0.924066 + -0.306191 0.680596 -3.17559 0.514185 0.0625139 0.855398 + -0.370374 0.709814 -3.139 0.578864 0.0521354 0.813756 + -0.44018 0.567976 -3.08593 0.515034 -0.19669 0.834298 + -0.212319 0.988087 -3.26118 0.324308 0.127323 0.937344 + -0.282673 1.00032 -3.23376 0.461718 0.114725 0.879576 + -0.346856 1.02945 -3.19722 0.511971 0.130633 0.849011 + -0.413558 1.03519 -3.15817 0.595967 0.142712 0.790226 + -0.426445 0.767278 -3.09393 0.659974 0.0706526 0.747959 + -0.153945 1.1952 -3.31132 0.174574 0.17545 0.968887 + -0.190816 1.18047 -3.29859 0.316914 0.180531 0.931114 + -0.26117 1.19278 -3.27112 0.410115 0.201215 0.889561 + -0.344489 1.20163 -3.23224 0.477331 0.195364 0.856731 + -0.114169 1.17588 -3.31345 0.14803 0.126719 0.980831 + -0.11631 1.26212 -3.32543 0.0820971 0.192741 0.977809 + -0.160899 1.2621 -3.32539 0.0995642 0.238302 0.966074 + -0.19777 1.24737 -3.31267 0.249493 0.293113 0.922951 + -0.031937 1.24305 -3.33199 0.0637637 0.156528 0.985613 + -0.076534 1.2428 -3.32755 0.115328 0.181314 0.976639 + -0.062427 1.31189 -3.34562 0.140711 0.170437 0.97527 + -0.109376 1.31139 -3.33635 0.0787367 0.190525 0.97852 + 0.031933 1.24315 -3.33196 -0.0516016 0.145085 0.988073 + -0.017829 1.31214 -3.35006 0.0988941 0.340303 0.935101 + -0.053659 1.34977 -3.35164 0.270054 0.404265 0.873865 + -0.100608 1.34927 -3.34237 0.0763008 0.317099 0.945318 + 0.017835 1.31214 -3.35006 -0.0417941 0.393612 0.918326 + -0.017829 1.37905 -3.39174 0.160566 0.585753 0.794426 + -0.02584 1.40636 -3.41205 -0.00505257 0.861277 0.50811 + -0.061669 1.37709 -3.37195 0.172867 0.766493 0.618551 + -0.088954 1.37642 -3.3624 0.206618 0.720412 0.662054 + 0.017835 1.37904 -3.39173 -0.164955 0.59249 0.788508 + -0.013819 1.41482 -3.4315 -0.0556168 0.987237 0.149232 + -0.055307 1.40668 -3.44081 -0.117956 0.987172 -0.107599 + -0.067327 1.39831 -3.4213 -0.0216331 0.915 0.402873 + -0.094612 1.39773 -3.41171 0.27398 0.870181 0.409537 + 0.053665 1.34977 -3.35164 -0.480395 0.253956 0.83948 + 0.061669 1.37709 -3.37195 -0.172497 0.766738 0.618351 + 0.02584 1.40636 -3.41205 0.0097644 0.844262 0.535842 + 0.088951 1.37642 -3.3624 -0.206806 0.720557 0.661837 + 0.067327 1.39831 -3.4213 0.000186073 0.906139 0.42298 + 0.055319 1.40667 -3.44079 0.0784006 0.992009 -0.0988484 + 0.013832 1.41481 -3.43149 0.0804617 0.993241 0.083655 + 0.135162 1.40392 -3.37363 -0.171998 0.757538 0.629724 + 0.094609 1.39773 -3.41171 -0.26881 0.865612 0.422443 + 0.111364 1.41296 -3.42808 -0.363813 0.900301 0.238952 + 0.151917 1.41924 -3.38996 -0.307755 0.812301 0.495433 + 0.156277 1.43764 -3.42784 -0.285621 0.938718 0.19295 + 0.15292 1.43718 -3.44704 -0.206158 0.926448 -0.314948 + 0.108007 1.4125 -3.44729 -0.321138 0.911293 -0.257713 + 0.173579 1.40108 -3.36231 -0.254519 0.382566 0.88818 + 0.187502 1.42533 -3.37352 -0.0976133 0.863239 0.495267 + 0.184397 1.42224 -3.38296 -0.0686834 0.997477 0.0179669 + 0.188757 1.44073 -3.42079 -0.0162508 0.987682 0.155629 + 0.203469 1.43657 -3.38037 -0.0886693 0.716164 0.692276 + 0.244081 1.42822 -3.39051 0.285648 0.935309 -0.208812 + 0.240976 1.42512 -3.39995 0.171851 0.985119 -0.00276594 + 0.203469 1.43657 -3.38037 -0.273932 -0.186205 -0.943551 + 0.273714 1.41652 -3.42925 0.202362 0.965394 -0.164512 + 0.251959 1.4259 -3.4201 0.374003 0.924182 0.0775175 + 0.289238 1.40217 -3.48199 0.140981 0.891409 -0.430714 + 0.248195 1.41737 -3.46932 0.190556 0.89119 -0.411666 + 0.22644 1.42675 -3.46018 0.170376 0.876864 -0.449534 + 0.19974 1.44151 -3.44094 -0.121399 0.958384 -0.258385 + 0.190844 1.42436 -3.46183 -0.0614585 0.718917 -0.692374 + 0.313974 1.40012 -3.47984 0.0742122 0.891002 -0.447893 + 0.330946 1.38218 -3.50197 0.182925 0.670616 -0.718897 + 0.288755 1.38388 -3.50732 0.0512786 0.653434 -0.755245 + 0.247711 1.399 -3.4947 -0.0481689 0.666744 -0.743729 + 0.217544 1.4096 -3.48106 -0.204916 0.6054 -0.769091 + 0.346548 1.40927 -3.45969 0.00868479 0.878648 -0.477391 + 0.36352 1.39142 -3.48178 0.247026 0.695938 -0.674276 + 0.336869 1.3615 -3.51435 0.221369 0.391135 -0.893314 + 0.294678 1.3632 -3.5197 0.0467424 0.372107 -0.927012 + 0.25492 1.35791 -3.51993 -0.146598 0.337282 -0.929919 + 0.316487 1.42576 -3.40806 -0.338962 0.928199 -0.153462 + 0.364585 1.42065 -3.44061 -0.0226793 0.85014 -0.526069 + 0.389512 1.40048 -3.46206 0.323625 0.674508 -0.663556 + 0.375559 1.35026 -3.50649 0.38076 0.350827 -0.855536 + 0.385872 1.44511 -3.40436 0.212699 0.963748 -0.161084 + 0.410798 1.42493 -3.42582 0.28736 0.811221 -0.509259 + 0.401551 1.3594 -3.48672 0.374962 0.47191 -0.797938 + 0.38448 1.29631 -3.51504 0.269127 0.0632948 -0.961022 + 0.382552 1.44302 -3.37474 -0.0412554 0.987495 0.152158 + 0.431014 1.42252 -3.41704 0.349737 0.802369 -0.48362 + 0.420168 1.36919 -3.47308 0.324627 0.555358 -0.765634 + 0.428869 1.32363 -3.49155 0.49583 0.268433 -0.825891 + 0.410252 1.31375 -3.50525 0.346747 0.223354 -0.910977 + 0.437661 1.43887 -3.38337 0.217246 0.955316 -0.200436 + 0.457182 1.39153 -3.43356 0.356417 0.694627 -0.624868 + 0.440384 1.36678 -3.4643 0.431359 0.501611 -0.749877 + 0.44041 1.31497 -3.48615 0.462112 0.198961 -0.864214 + 0.428342 1.24897 -3.49684 0.418722 -0.0477808 -0.906857 + 0.459366 1.35568 -3.45866 0.298453 0.473778 -0.828529 + 0.459392 1.30386 -3.48052 0.447459 0.0877752 -0.889986 + 0.439884 1.24031 -3.49145 0.443513 -0.11501 -0.888858 + 0.45177 1.11419 -3.4558 0.628216 -0.197709 -0.7525 + 0.402571 1.23153 -3.50663 0.36982 -0.111089 -0.922438 + 0.481817 1.26982 -3.45996 0.35386 -0.164402 -0.920736 + 0.462308 1.20627 -3.47089 0.659232 -0.158976 -0.734942 + 0.500979 1.14196 -3.4007 0.548185 -0.309852 -0.776843 + 0.490441 1.04989 -3.38562 0.673376 -0.0727248 -0.735715 + 0.54169 1.23037 -3.43524 0.316975 -0.420198 -0.850271 + 0.525924 1.10772 -3.37419 0.350719 -0.259242 -0.899883 + 0.523947 1.00931 -3.36355 0.410235 0.0254605 -0.911624 + 0.483309 0.9457 -3.40716 0.38816 0.0450427 -0.920491 + 0.552783 0.998588 -3.35717 0.311503 0.0379845 -0.949486 + 0.554949 0.895571 -3.37554 0.353821 0.217668 -0.909632 + 0.516815 0.905132 -3.3851 0.440698 0.168369 -0.881724 + 0.478449 0.842041 -3.41942 0.343439 0.347188 -0.872645 + 0.453938 0.960764 -3.40646 0.18714 -0.143293 -0.971826 + 0.549585 0.807847 -3.4032 0.369654 0.20877 -0.905412 + 0.51145 0.817408 -3.41276 0.415847 0.319928 -0.851303 + 0.452226 0.777477 -3.47419 0.218744 0.143885 -0.965116 + 0.449078 0.857014 -3.41876 0.182208 0.338376 -0.923202 + 0.562027 0.731222 -3.41288 0.517741 0.338327 -0.785799 + 0.485227 0.752929 -3.46748 0.511071 0.425893 -0.746607 + 0.429639 0.78645 -3.47633 0.315643 0.499265 -0.80691 + 0.426491 0.865992 -3.42091 0.311218 0.263877 -0.912969 + 0.415375 0.969923 -3.43112 0.442703 -0.16193 -0.881925 + 0.62641 0.7248 -3.37895 0.434195 0.284204 -0.854812 + 0.57491 0.667283 -3.44113 0.539399 0.479631 -0.6921 + 0.498111 0.688905 -3.49578 0.533051 0.479051 -0.6974 + 0.419446 0.698937 -3.53976 0.36682 0.526179 -0.767189 + 0.401327 0.760889 -3.50386 0.311133 0.534954 -0.785507 + 0.6518 0.659947 -3.39483 0.434262 0.444228 -0.783632 + 0.608552 0.602889 -3.4668 0.524961 0.515402 -0.677331 + 0.526324 0.622523 -3.52641 0.530705 0.514742 -0.673344 + 0.447658 0.632468 -3.57043 0.410001 0.521637 -0.748194 + 0.685442 0.595548 -3.42048 0.398138 0.516228 -0.758284 + 0.700774 0.548617 -3.4434 0.37111 0.523403 -0.767024 + 0.619739 0.547326 -3.49816 0.532904 0.471288 -0.702781 + 0.53751 0.56696 -3.55777 0.541562 0.467465 -0.698704 + 0.769571 0.623474 -3.37065 0.414621 0.619307 -0.666744 + 0.784903 0.576636 -3.39353 0.514389 0.398737 -0.759218 + 0.824094 0.620744 -3.32732 0.689605 0.667044 -0.281952 + 0.839508 0.585837 -3.34066 0.880302 0.234367 -0.412481 + 0.850633 0.571579 -3.27597 0.691401 0.624303 -0.363607 + 0.202863 1.37775 -3.4871 -0.246237 0.390109 -0.887233 + 0.18102 1.37515 -3.48979 0.284148 0.480033 -0.829957 + 0.169001 1.42167 -3.46457 0.0410484 0.663436 -0.747106 + 0.135567 1.41214 -3.47266 -0.214545 0.785278 -0.580783 + 0.224753 1.36843 -3.50635 -0.415741 0.338208 -0.84426 + 0.23124 1.30733 -3.52613 -0.410462 0.0793803 -0.908416 + 0.20935 1.31665 -3.50687 -0.216845 0.232952 -0.948004 + 0.186503 1.33698 -3.50528 0.399705 0.319828 -0.859038 + 0.265468 1.30618 -3.52993 -0.0489671 0.0972229 -0.994057 + 0.240546 1.23784 -3.52937 -0.139411 -0.0449392 -0.989214 + 0.205617 1.25386 -3.52612 0.0793408 0.0959397 -0.99222 + 0.18277 1.27427 -3.52447 0.278017 0.213043 -0.936653 + 0.305226 1.31147 -3.52969 0.0808413 0.105789 -0.991097 + 0.313998 1.23121 -3.52948 0.11317 -0.0763665 -0.990636 + 0.274773 1.23669 -3.53318 -0.00492439 -0.0564707 -0.998392 + 0.34579 1.30755 -3.5229 0.210507 0.0991929 -0.972547 + 0.354562 1.22729 -3.52269 0.246926 -0.0850897 -0.965291 + 0.328106 1.12278 -3.50867 0.171585 -0.230828 -0.957746 + 0.288882 1.12826 -3.51238 0.130659 -0.194822 -0.972097 + 0.271159 1.09806 -3.51045 0.223639 -0.178084 -0.958265 + 0.413208 1.12335 -3.48046 0.413676 -0.219259 -0.883627 + 0.365199 1.1191 -3.49651 0.305335 -0.240667 -0.921331 + 0.340683 0.972804 -3.45911 0.350587 -0.134777 -0.926782 + 0.321531 0.967345 -3.46626 0.266288 -0.123788 -0.955912 + 0.303809 0.937137 -3.46433 0.208122 -0.0170007 -0.977955 + 0.377776 0.969135 -3.44696 0.340925 -0.160459 -0.926295 + 0.388892 0.865204 -3.43674 0.435932 0.24891 -0.864874 + 0.36058 0.839644 -3.46427 0.336231 0.355347 -0.872168 + 0.341428 0.834182 -3.47141 0.253304 0.3868 -0.886692 + 0.324119 0.755671 -3.53462 0.313321 0.54734 -0.776047 + 0.291475 0.778169 -3.53319 0.408725 0.542398 -0.733994 + 0.308783 0.856679 -3.46998 0.308499 0.272868 -0.911247 + 0.273883 0.94721 -3.48018 0.347105 -0.0545972 -0.936236 + 0.342238 0.693626 -3.57056 0.278259 0.543769 -0.791762 + 0.276321 0.788484 -3.53466 0.0526014 0.542389 -0.838479 + 0.278858 0.866753 -3.48582 0.432091 0.310496 -0.846694 + 0.263704 0.877155 -3.48724 0.0778299 0.264969 -0.961111 + 0.258453 0.951896 -3.4843 0.000965101 -0.07946 -0.996838 + 0.366268 0.635173 -3.60391 0.295469 0.53815 -0.789362 + 0.283918 0.635585 -3.63123 0.275975 0.569554 -0.774239 + 0.259889 0.694043 -3.59788 0.204008 0.580512 -0.78828 + 0.459741 0.576667 -3.60318 0.422799 0.504339 -0.752917 + 0.37835 0.579463 -3.63662 0.319651 0.54525 -0.774936 + 0.295794 0.585203 -3.66637 0.295661 0.573611 -0.763908 + 0.19882 0.638771 -3.65915 0.19567 0.613711 -0.7649 + 0.457415 0.524364 -3.63699 0.426486 0.501637 -0.752642 + 0.37703 0.533192 -3.67008 0.33887 0.534265 -0.774421 + 0.294473 0.538852 -3.69988 0.299305 0.539182 -0.787209 + 0.210359 0.547039 -3.72446 0.243693 0.54762 -0.800454 + 0.210696 0.588303 -3.69433 0.234628 0.586332 -0.775348 + 0.219143 0.491294 -3.75771 0.226493 0.465643 -0.855499 + 0.125856 0.550614 -3.74385 0.164237 0.519415 -0.83859 + 0.126193 0.591881 -3.71373 0.161139 0.615806 -0.771244 + 0.121754 0.635303 -3.67714 0.13727 0.643985 -0.752622 + 0.177596 0.693464 -3.61488 0.148772 0.64176 -0.752337 + 0.131297 0.500173 -3.76809 0.116093 0.402432 -0.908059 + 0.042305 0.554897 -3.75507 0.0635508 0.528745 -0.846398 + 0.042305 0.592503 -3.72521 0.0562201 0.633567 -0.771642 + 0.037866 0.635925 -3.68862 0.0399128 0.675958 -0.735859 + 0.10053 0.689996 -3.63287 0.0719798 0.673846 -0.735357 + 0.047745 0.504458 -3.77931 0.0729337 0.299081 -0.951436 + -0.042299 0.554897 -3.75507 -0.067407 0.531543 -0.844345 + -0.042299 0.592503 -3.72521 -0.0608131 0.630536 -0.773774 + -0.037866 0.635925 -3.68862 -0.0506536 0.684472 -0.727278 + 0.037866 0.679163 -3.64331 -0.00267406 0.708749 -0.705456 + -0.047746 0.452294 -3.78736 0.0304382 0.197922 -0.979745 + -0.047746 0.504458 -3.77931 -0.0424475 0.326367 -0.94429 + -0.125851 0.550614 -3.74385 -0.160109 0.522816 -0.837274 + -0.126187 0.591881 -3.71373 -0.157705 0.613615 -0.773696 + -0.121754 0.635303 -3.67714 -0.12676 0.65031 -0.749018 + -0.145096 0.431693 -3.79748 -0.0623385 0.323363 -0.94422 + -0.131297 0.500178 -3.7681 -0.145146 0.428246 -0.891929 + -0.219143 0.491294 -3.75771 -0.209934 0.478385 -0.852687 + -0.210358 0.547039 -3.72446 -0.244548 0.548124 -0.799848 + -0.210694 0.588303 -3.69433 -0.23583 0.585459 -0.775643 + -0.143803 0.370477 -3.81325 0.00251031 0.232517 -0.972589 + -0.248561 0.359502 -3.81044 -0.121637 0.291314 -0.948863 + -0.232942 0.422812 -3.7871 -0.158052 0.39551 -0.90476 + -0.252446 0.307248 -3.82213 -0.0774734 0.0785539 -0.993895 + -0.35532 0.284859 -3.81135 -0.199613 0.0952325 -0.975236 + -0.343681 0.354772 -3.79465 -0.23448 0.327842 -0.915171 + -0.328062 0.418079 -3.7713 -0.254814 0.466885 -0.846811 + -0.264071 0.247997 -3.81691 -0.0745682 -0.171886 -0.98229 + -0.366946 0.225613 -3.80614 -0.132483 -0.290398 -0.947691 + -0.46598 0.209252 -3.7754 -0.303117 -0.259466 -0.91695 + -0.442819 0.266897 -3.78924 -0.331122 0.0754069 -0.94057 + -0.43118 0.336725 -3.77259 -0.359 0.341411 -0.868653 + -0.389832 0.172658 -3.77302 -0.164427 -0.462954 -0.870998 + -0.488867 0.156299 -3.74228 -0.250614 -0.490366 -0.834706 + -0.5842 0.141337 -3.69717 -0.391415 -0.430963 -0.813059 + -0.55459 0.195116 -3.73491 -0.440772 -0.204233 -0.874076 + -0.531429 0.25276 -3.74876 -0.478224 0.101717 -0.872327 + -0.397143 0.132582 -3.75 -0.165876 -0.58462 -0.794169 + -0.499958 0.118466 -3.71255 -0.223329 -0.626162 -0.747024 + -0.595291 0.103505 -3.66744 -0.313826 -0.635406 -0.70553 + -0.682147 0.090917 -3.60984 -0.426149 -0.606739 -0.671018 + -0.666436 0.129377 -3.64445 -0.515866 -0.36769 -0.773748 + -0.392791 0.111121 -3.72923 -0.149574 -0.648977 -0.74596 + -0.495606 0.097005 -3.69178 -0.205233 -0.691502 -0.692607 + -0.58794 0.081027 -3.64191 -0.270917 -0.723488 -0.634956 + -0.674795 0.068439 -3.5843 -0.302017 -0.766649 -0.5666 + -0.389177 0.088968 -3.71366 -0.237191 -0.396388 -0.886914 + -0.490638 0.07538 -3.67233 -0.347933 -0.472663 -0.80965 + -0.582971 0.059404 -3.62245 -0.295983 -0.729356 -0.616794 + -0.656429 0.045461 -3.56171 -0.300589 -0.794469 -0.527698 + -0.74931 0.051972 -3.51798 -0.404311 -0.725625 -0.556778 + -0.490677 0.054324 -3.66846 -0.271277 -0.764678 -0.584531 + -0.56356 0.039286 -3.60281 -0.0151808 -0.956663 -0.290801 + -0.637018 0.02535 -3.54207 -0.0474612 -0.975787 -0.213512 + -0.704689 0.015375 -3.47239 0.0497116 -0.991183 -0.12282 + -0.730944 0.029087 -3.49534 -0.262881 -0.859505 -0.438343 + -0.473633 0.061026 -3.62246 0.236519 -0.960869 0.144188 + -0.546516 0.045994 -3.55683 0.304335 -0.934442 0.184926 + -0.614262 0.039505 -3.49159 0.342227 -0.909834 0.234698 + -0.681933 0.029531 -3.42191 0.368968 -0.893535 0.255847 + -0.772297 0.004586 -3.40171 0.0500294 -0.996834 -0.0617984 + -0.528557 0.085339 -3.47517 0.405513 -0.811049 0.421613 + -0.596303 0.078852 -3.40994 0.494828 -0.754489 0.431152 + -0.652092 0.083551 -3.34128 0.521612 -0.720876 0.456354 + -0.711505 0.081249 -3.27089 0.568741 -0.688788 0.44956 + -0.741345 0.027227 -3.35152 0.404557 -0.867117 0.290587 + -0.503581 0.170259 -3.36206 0.382646 -0.723755 0.574248 + -0.56616 0.187379 -3.30871 0.483675 -0.646985 0.589464 + -0.62195 0.191992 -3.2401 0.566958 -0.581271 0.583681 + -0.67323 0.214898 -3.17478 0.622908 -0.5263 0.578787 + -0.468642 0.323794 -3.23039 0.287651 -0.643127 0.709679 + -0.531221 0.340828 -3.17709 0.323101 -0.596325 0.734848 + -0.582788 0.389107 -3.12352 0.470962 -0.508368 0.720942 + -0.634068 0.412018 -3.0582 0.618481 -0.435186 0.654289 + -0.450673 0.446399 -3.13575 0.234921 -0.518637 0.822087 + -0.505423 0.495836 -3.08818 0.369441 -0.453015 0.811351 + -0.55699 0.544116 -3.0346 0.409437 -0.430524 0.80437 + -0.60776 0.585761 -2.98813 0.557687 -0.34303 0.755854 + -0.682178 0.444467 -2.9922 0.711149 -0.381336 0.590635 + -0.49493 0.617412 -3.03835 0.563081 -0.203271 0.801013 + -0.542085 0.679823 -2.98485 0.613253 -0.170892 0.771178 + -0.592855 0.721468 -2.93838 0.391013 -0.158552 0.906626 + -0.650256 0.756918 -2.92238 0.560709 -0.0199546 0.827772 + -0.655871 0.618124 -2.92219 0.749676 -0.176908 0.637722 + -0.483712 0.796392 -3.04775 0.710443 0.0649358 0.700752 + -0.530867 0.858801 -2.99425 0.728672 0.117238 0.674754 + -0.584755 0.88381 -2.95217 0.515703 0.130637 0.846749 + -0.470825 1.0643 -3.11199 0.622835 0.17802 0.76183 + -0.531515 1.06107 -3.06439 0.644572 0.214255 0.733909 + -0.585403 1.08609 -3.02232 0.67448 0.232207 0.700826 + -0.636956 1.07292 -2.96692 0.67064 0.202604 0.713578 + -0.642155 0.919266 -2.93618 0.538513 0.108757 0.835569 + -0.411191 1.20737 -3.19319 0.503364 0.263393 0.822951 + -0.478377 1.20727 -3.14921 0.561896 0.270668 0.781673 + -0.539068 1.20412 -3.10156 0.564598 0.326131 0.7582 + -0.571991 1.21055 -3.0797 0.641148 0.346885 0.684544 + -0.596152 1.19696 -3.04635 0.701851 0.271422 0.658586 + -0.380483 1.26394 -3.22597 0.349973 0.242226 0.904901 + -0.405022 1.26374 -3.22323 0.282333 0.308878 0.90823 + -0.441117 1.27996 -3.20793 0.54275 0.227806 0.80841 + -0.447286 1.2236 -3.1779 0.531465 0.351648 0.770641 + -0.508162 1.25605 -3.14551 0.52243 0.305436 0.7961 + -0.324758 1.21402 -3.24652 0.480054 0.237997 0.844337 + -0.360752 1.27625 -3.24029 0.609766 0.256482 0.749935 + -0.393174 1.33562 -3.23593 0.412858 0.166265 0.895491 + -0.417713 1.33543 -3.23319 0.36587 -0.0340581 0.930042 + -0.448258 1.31784 -3.20993 0.587047 0.0656499 0.806886 + -0.308602 1.21724 -3.25628 0.396627 0.337141 0.853828 + -0.351967 1.277 -3.25119 0.613052 0.290892 0.73454 + -0.374757 1.3333 -3.24891 0.66002 0.269898 0.701091 + -0.401247 1.40643 -3.25577 0.458557 0.565264 0.685712 + -0.421983 1.37743 -3.22175 0.479854 0.342175 0.807872 + -0.280751 1.22028 -3.26996 0.415013 0.246145 0.875886 + -0.29321 1.28676 -3.2803 0.400311 0.192049 0.896029 + -0.335811 1.28021 -3.26095 0.416642 0.221769 0.881605 + -0.365972 1.33396 -3.25985 0.570043 0.250602 0.782464 + -0.38283 1.40402 -3.26879 0.617982 0.481989 0.621115 + -0.22293 1.28596 -3.31451 0.403117 0.211752 0.890313 + -0.265359 1.28981 -3.29397 0.432818 0.192407 0.880709 + -0.296601 1.33175 -3.28702 0.389387 0.0914541 0.916523 + -0.339203 1.3252 -3.26767 0.356037 0.195876 0.913712 + -0.363124 1.38293 -3.27388 0.434251 0.348162 0.830788 + -0.203349 1.25836 -3.31571 0.268914 0.296926 0.916253 + -0.21125 1.33662 -3.33106 0.472873 0.215991 0.854248 + -0.253679 1.34056 -3.31048 0.454215 0.0415636 0.889922 + -0.301621 1.37405 -3.28068 0.184177 0.216919 0.958658 + -0.336355 1.37418 -3.28171 0.216154 0.405705 0.888077 + -0.177853 1.30966 -3.33677 0.046587 0.281948 0.958298 + -0.183432 1.32058 -3.33987 0.184337 0.273368 0.944081 + -0.186302 1.34668 -3.34808 0.163969 0.306378 0.937682 + -0.214493 1.40225 -3.35213 0.483943 0.417706 0.768974 + -0.258698 1.38294 -3.30408 0.492748 0.276341 0.825127 + -0.153965 1.31145 -3.33627 -0.0179711 0.23833 0.971018 + -0.170708 1.37498 -3.3541 -0.0879593 0.279533 0.956098 + -0.173578 1.40108 -3.36231 -0.00961449 0.393126 0.919434 + -0.189545 1.41231 -3.36916 0.0731095 0.393161 0.916558 + -0.224264 1.42835 -3.36575 0.0706971 0.86016 0.505101 + -0.146819 1.37676 -3.35359 0.0449542 0.416268 0.90813 + -0.187495 1.4252 -3.37349 0.259943 0.850018 0.458148 + -0.203462 1.43643 -3.38034 0.0906212 0.718171 0.689941 + -0.135165 1.40392 -3.37363 0.262243 0.744137 0.614401 + -0.184397 1.42224 -3.38296 0.271134 0.927153 0.258599 + -0.240976 1.42512 -3.39995 -0.0953237 0.995206 0.0218627 + -0.244074 1.42809 -3.39048 -0.282114 0.937571 -0.203402 + -0.203462 1.43643 -3.38034 0.273906 -0.186256 -0.943549 + -0.111356 1.41296 -3.42808 0.411951 0.891038 0.190648 + -0.15191 1.41924 -3.38996 0.294832 0.849487 0.437546 + -0.188757 1.44073 -3.42079 0.00273671 0.9709 0.239468 + -0.059856 1.40067 -3.4512 -0.0651882 0.889861 -0.451551 + -0.075108 1.39564 -3.46168 0.0534032 0.927157 -0.370848 + -0.094483 1.39846 -3.46257 0.263931 0.905424 -0.332488 + -0.108024 1.41251 -3.4473 0.594 0.795571 -0.119289 + -0.152937 1.43718 -3.44704 0.134764 0.951098 -0.277942 + -0.15627 1.43764 -3.42784 0.245363 0.960705 0.129784 + -0.199714 1.44152 -3.44096 -0.0491463 0.962796 -0.265722 + -0.190848 1.42427 -3.46188 0.0699882 0.706934 -0.703808 + -0.226414 1.42676 -3.46019 -0.169941 0.876752 -0.449919 + -0.251933 1.42591 -3.42012 -0.191869 0.97744 -0.0883005 + -0.169 1.42167 -3.46457 -0.0414682 0.663814 -0.746748 + -0.202867 1.37775 -3.4871 0.281507 0.355621 -0.891228 + -0.224757 1.36843 -3.50635 0.411895 0.33284 -0.848269 + -0.217548 1.4096 -3.48106 0.16487 0.63056 -0.758428 + -0.248204 1.41737 -3.46932 -0.190634 0.891346 -0.411292 + -0.135584 1.41214 -3.47267 0.214519 0.78425 -0.58218 + -0.151647 1.39662 -3.49018 -0.174491 0.673595 -0.718208 + -0.181019 1.37515 -3.48979 -0.284144 0.480028 -0.829961 + -0.186503 1.33698 -3.50528 -0.399625 0.319892 -0.859051 + -0.209365 1.31665 -3.50687 0.237464 0.274236 -0.931882 + -0.122043 1.39809 -3.48794 0.148184 0.822446 -0.549203 + -0.126074 1.37867 -3.50889 -0.012152 0.668185 -0.743896 + -0.153831 1.37137 -3.51385 -0.335538 0.546428 -0.767353 + -0.159315 1.33329 -3.52929 -0.386848 0.284674 -0.877103 + -0.099131 1.38335 -3.5078 0.0769065 0.841667 -0.534492 + -0.117655 1.38251 -3.50654 -0.114319 0.666873 -0.73635 + -0.08848 1.33753 -3.53403 0.096666 0.317675 -0.943259 + -0.128258 1.35342 -3.53255 -0.0913116 0.443083 -0.891818 + -0.135059 1.31346 -3.53994 -0.170567 0.144479 -0.974696 + -0.079756 1.38052 -3.5069 0.187132 0.841228 -0.507263 + -0.094743 1.36776 -3.5264 -0.316799 0.300163 -0.899745 + -0.080061 1.34137 -3.53168 0.0987366 0.286026 -0.953121 + -0.058754 1.33893 -3.52826 0.372046 0.284184 -0.883641 + -0.095281 1.29757 -3.54142 0.078685 0.123629 -0.989204 + -0.046942 1.38944 -3.47895 0.106689 0.861233 -0.496885 + -0.040622 1.37433 -3.49498 0.332874 0.638963 -0.693485 + -0.073436 1.36542 -3.52293 0.299095 0.53609 -0.789398 + -0.03169 1.39448 -3.46848 -0.0312237 0.779153 -0.626056 + -0.020389 1.38216 -3.47973 0.176764 0.613621 -0.769561 + -0.022016 1.35661 -3.49828 0.457628 0.376069 -0.805698 + -0.04225 1.34878 -3.51353 0.457271 0.395466 -0.796561 + -0.018368 1.40455 -3.46031 -0.0775444 0.795788 -0.60059 + -0.007067 1.39222 -3.47157 0.0127303 0.600312 -0.799664 + -0.007067 1.36636 -3.48576 0.180249 0.415998 -0.891322 + -0.013819 1.41047 -3.44996 -0.0705546 0.930499 -0.359435 + 0.013832 1.41055 -3.4499 0.05415 0.915858 -0.397834 + 0.007074 1.39222 -3.47157 -0.0157734 0.626372 -0.779365 + 0.01834 1.40455 -3.46031 -0.0100483 0.803799 -0.594816 + 0.031661 1.39457 -3.46843 0.0321566 0.7794 -0.625701 + 0.020396 1.38225 -3.47968 -0.176175 0.613781 -0.769568 + 0.007074 1.36644 -3.48571 -0.179221 0.416617 -0.891241 + 0.059827 1.40067 -3.4512 0.0313504 0.880414 -0.473169 + 0.046942 1.38944 -3.47895 -0.105918 0.860726 -0.497928 + 0.040618 1.37425 -3.49503 -0.335451 0.641835 -0.68958 + 0.022024 1.35669 -3.49822 -0.457355 0.376553 -0.805626 + 0.006906 1.32209 -3.4975 -0.282331 0.204947 -0.937169 + 0.075108 1.39564 -3.46168 -0.086145 0.896469 -0.434653 + 0.079756 1.38052 -3.5069 -0.187833 0.840961 -0.507448 + 0.073432 1.36533 -3.52298 -0.288449 0.539421 -0.791089 + 0.042246 1.34869 -3.51357 -0.496431 0.365892 -0.787197 + 0.094483 1.39846 -3.46257 -0.231166 0.863868 -0.447543 + 0.099131 1.38335 -3.5078 -0.0774568 0.841973 -0.53393 + 0.094713 1.36778 -3.52642 0.316134 0.300896 -0.899734 + 0.080031 1.34138 -3.53171 -0.0996003 0.274027 -0.956551 + 0.05875 1.33893 -3.52826 -0.37021 0.273795 -0.887683 + 0.122043 1.39809 -3.48794 -0.155638 0.822449 -0.547133 + 0.117625 1.38252 -3.50657 0.115323 0.666777 -0.736281 + 0.088466 1.33752 -3.53402 -0.0944428 0.320119 -0.942658 + 0.066479 1.28183 -3.53956 -0.298008 0.0248699 -0.954239 + 0.051653 1.3072 -3.5327 -0.435792 0.115722 -0.892577 + 0.151647 1.39662 -3.49018 0.176984 0.67318 -0.717987 + 0.12606 1.37867 -3.50889 0.0129282 0.667218 -0.744751 + 0.128244 1.35342 -3.53255 0.0910695 0.443035 -0.891867 + 0.135067 1.31345 -3.53993 0.159501 0.111153 -0.98092 + 0.095289 1.29747 -3.54145 -0.0440092 0.106649 -0.993322 + 0.153831 1.37137 -3.51385 0.335495 0.546419 -0.767378 + 0.159315 1.33329 -3.52929 0.386712 0.284775 -0.87713 + 0.158522 1.25435 -3.53517 0.258226 0.00560321 -0.966068 + 0.122837 1.23369 -3.54737 0.1603 -0.0281909 -0.986666 + 0.094027 1.21796 -3.54554 -0.197356 -0.128487 -0.971875 + 0.2026 1.15117 -3.50946 -0.0385232 -0.237621 -0.970594 + 0.17446 1.14901 -3.5117 0.261492 -0.223895 -0.938879 + 0.138775 1.12834 -3.52391 0.281318 -0.20583 -0.93728 + 0.101669 1.11634 -3.52693 -0.122127 -0.208053 -0.970463 + 0.049246 1.23504 -3.52671 -0.460089 -0.109814 -0.881056 + 0.237529 1.13524 -3.51266 -0.300422 -0.19243 -0.934193 + 0.199765 0.994883 -3.45615 -0.287079 -0.149053 -0.946239 + 0.171624 0.99271 -3.45839 0.4724 -0.128666 -0.871942 + 0.153737 0.971674 -3.47695 0.424746 -0.0277147 -0.904888 + 0.116631 0.959679 -3.47998 0.100339 -0.0814759 -0.991612 + 0.255729 1.10274 -3.51457 -0.0779485 -0.151425 -0.985391 + 0.224304 0.9899 -3.47912 -0.551881 -0.114408 -0.826038 + 0.234171 0.879942 -3.47827 -0.562222 0.116394 -0.818755 + 0.209632 0.884925 -3.4553 -0.123649 0.201072 -0.971741 + 0.188623 0.8582 -3.47441 0.319617 0.414404 -0.852123 + 0.242504 0.9574 -3.48103 -0.169874 -0.0526683 -0.984057 + 0.247755 0.882659 -3.48397 -0.282803 0.165282 -0.94483 + 0.262738 0.785681 -3.529 -0.288017 0.565391 -0.772903 + 0.241729 0.758958 -3.54812 -0.00934317 0.620757 -0.783948 + 0.170736 0.837166 -3.49298 0.137954 0.507563 -0.850499 + 0.159436 0.758378 -3.56511 0.111522 0.648325 -0.753152 + 0.116505 0.772062 -3.55781 0.0292675 0.639227 -0.768461 + 0.127805 0.850848 -3.48568 -0.00138549 0.334279 -0.942473 + 0.085191 0.749427 -3.57601 -0.010711 0.681014 -0.732192 + 0.078727 0.845574 -3.49134 0.111025 0.389887 -0.914145 + 0.067553 0.954492 -3.48559 -0.0841475 -0.0805331 -0.993194 + 0.022527 0.738598 -3.58645 -0.0021121 0.70788 -0.706329 + 0.022527 0.824989 -3.49509 -0.205911 0.446642 -0.870696 + 0.047413 0.822939 -3.50954 -0.213885 0.473741 -0.854297 + 0.035048 0.945606 -3.4772 -0.352676 0.0103365 -0.935688 + 0.056888 1.13333 -3.50816 -0.321801 -0.170372 -0.931352 + -0.037866 0.679168 -3.64332 -0.0184305 0.697304 -0.716538 + -0.022528 0.738598 -3.58645 0.0101019 0.698287 -0.715747 + -0.022528 0.824989 -3.49509 0.22356 0.465964 -0.856095 + -0.010165 0.947661 -3.46276 0.244268 0.00352737 -0.969701 + 0.010163 0.947656 -3.46275 -0.235267 0.0157254 -0.971803 + -0.100529 0.689996 -3.63287 -0.061335 0.66172 -0.747238 + -0.085191 0.749427 -3.57601 -0.00416693 0.672755 -0.739853 + -0.047413 0.822939 -3.50954 0.152378 0.551159 -0.820368 + -0.03505 0.945606 -3.4772 0.345375 -0.00167197 -0.938463 + -0.198824 0.638771 -3.65915 -0.209035 0.627992 -0.74962 + -0.177599 0.693464 -3.61488 -0.164666 0.632744 -0.756651 + -0.159444 0.758378 -3.56511 -0.108944 0.645719 -0.755763 + -0.116506 0.772062 -3.55781 -0.029263 0.639229 -0.768459 + -0.078728 0.845574 -3.49134 -0.110972 0.389815 -0.914182 + -0.283922 0.635585 -3.63123 -0.261182 0.578932 -0.772413 + -0.259892 0.694038 -3.59787 -0.188098 0.563649 -0.804313 + -0.241737 0.759039 -3.54806 -0.0548734 0.61744 -0.784702 + -0.295792 0.585203 -3.66637 -0.295008 0.573145 -0.76451 + -0.378347 0.579463 -3.63662 -0.327201 0.538748 -0.776331 + -0.366271 0.635173 -3.60391 -0.301963 0.546706 -0.78098 + -0.294472 0.538846 -3.69987 -0.298325 0.540013 -0.787012 + -0.377027 0.533192 -3.67008 -0.343154 0.53723 -0.770473 + -0.457412 0.524364 -3.63699 -0.420185 0.50786 -0.752012 + -0.459738 0.576753 -3.60313 -0.419189 0.501755 -0.756653 + -0.447662 0.632468 -3.57043 -0.403088 0.526571 -0.748494 + -0.303257 0.483193 -3.73308 -0.296881 0.543916 -0.784868 + -0.38935 0.471242 -3.70698 -0.348059 0.542941 -0.764245 + -0.469735 0.4625 -3.67384 -0.424179 0.519869 -0.741491 + -0.541235 0.456002 -3.63058 -0.514318 0.520291 -0.681743 + -0.535185 0.51466 -3.59158 -0.538157 0.473573 -0.69722 + -0.414155 0.406132 -3.74521 -0.373511 0.500378 -0.781097 + -0.494659 0.378376 -3.71793 -0.454684 0.466169 -0.758913 + -0.566159 0.371876 -3.67467 -0.519093 0.44633 -0.728925 + -0.511684 0.308967 -3.74531 -0.460029 0.306354 -0.833379 + -0.592165 0.301591 -3.69274 -0.579007 0.31238 -0.753107 + -0.633226 0.392851 -3.6094 -0.550613 0.490718 -0.675294 + -0.614285 0.445155 -3.57279 -0.535048 0.557665 -0.634612 + -0.608234 0.503811 -3.53379 -0.554614 0.460293 -0.693205 + -0.61191 0.245383 -3.69618 -0.617183 0.164426 -0.769447 + -0.68066 0.232892 -3.63234 -0.674761 0.159253 -0.72065 + -0.659232 0.322565 -3.62746 -0.629497 0.306615 -0.713947 + -0.724942 0.323717 -3.56626 -0.645886 0.269511 -0.71428 + -0.705186 0.397941 -3.55022 -0.566836 0.471824 -0.675336 + -0.636826 0.183152 -3.68219 -0.592698 -0.0935264 -0.799976 + -0.705576 0.170573 -3.61841 -0.679548 0.0578139 -0.731349 + -0.779496 0.166131 -3.55111 -0.676408 0.052661 -0.734642 + -0.74637 0.233952 -3.57118 -0.669501 0.156098 -0.726224 + -0.747388 0.126032 -3.58026 -0.631936 -0.219128 -0.743397 + -0.821308 0.121588 -3.51296 -0.685282 -0.159372 -0.710626 + -0.891356 0.117655 -3.44035 -0.715784 -0.185291 -0.673291 + -0.850268 0.164728 -3.48668 -0.701302 0.0115068 -0.712771 + -0.817142 0.232554 -3.50676 -0.680946 0.157225 -0.715257 + -0.763098 0.087575 -3.54565 -0.543683 -0.518915 -0.659648 + -0.834658 0.079343 -3.47739 -0.586614 -0.506409 -0.632008 + -0.904706 0.07541 -3.40478 -0.65785 -0.463285 -0.593802 + -0.966542 0.072591 -3.32869 -0.691116 -0.479752 -0.540552 + -0.957584 0.120966 -3.36748 -0.768471 -0.136347 -0.62519 + -0.82087 0.04374 -3.44972 -0.448737 -0.722323 -0.526198 + -0.887214 0.033712 -3.37595 -0.504798 -0.713993 -0.485173 + -0.94905 0.030974 -3.29981 -0.569094 -0.712661 -0.410178 + -0.798552 0.018302 -3.42467 -0.296489 -0.871084 -0.391543 + -0.864896 0.00827 -3.35089 -0.308312 -0.89423 -0.324494 + -0.925134 0.007858 -3.27797 -0.362021 -0.900442 -0.241133 + -1.0044 0.03507 -3.21691 -0.558394 -0.753938 -0.346083 + -0.835807 -0.002219 -3.32752 0.0706723 -0.997497 -0.00213926 + -0.896045 -0.00263 -3.25461 0.0113316 -0.996675 0.0806855 + -0.963489 0.009705 -3.17978 0.0460634 -0.990561 0.129104 + -0.980483 0.012045 -3.19503 -0.323737 -0.931545 -0.165586 + -0.804855 0.020423 -3.27734 0.400169 -0.864293 0.304734 + -0.863391 0.02385 -3.19867 0.341767 -0.865227 0.366849 + -0.930835 0.036187 -3.12384 0.332217 -0.895097 0.297376 + -1.02345 0.014294 -3.08632 0.11366 -0.991258 0.0669937 + -1.04045 0.016546 -3.10162 -0.330771 -0.929967 -0.160475 + -0.763432 0.084119 -3.20166 0.576011 -0.679436 0.454508 + -0.821968 0.087465 -3.12306 0.556768 -0.713211 0.425839 + -0.874487 0.089583 -3.03133 0.574691 -0.741456 0.346371 + -0.932695 0.086978 -2.94961 0.555391 -0.769562 0.315143 + -0.989043 0.03358 -3.04213 0.366423 -0.907486 0.205433 + -0.725157 0.217773 -3.10556 0.71214 -0.4788 0.513427 + -0.772757 0.219313 -3.03282 0.74329 -0.482304 0.463577 + -0.825276 0.221345 -2.94114 0.779225 -0.477597 0.405844 + -0.873382 0.196486 -2.86869 0.752954 -0.532971 0.386008 + -0.729778 0.44592 -2.91952 0.833864 -0.316914 0.451926 + -0.771455 0.415147 -2.84922 0.852014 -0.346097 0.392797 + -0.819561 0.390287 -2.77676 0.854515 -0.378972 0.355225 + -0.701812 0.617653 -2.86977 0.818919 -0.148005 0.554496 + -0.743489 0.586878 -2.79947 0.899891 -0.122892 0.418443 + -0.779279 0.535043 -2.72769 0.92705 -0.224895 0.300002 + -0.860866 0.33565 -2.72173 0.835946 -0.441921 0.325424 + -0.696197 0.756447 -2.86997 0.788908 0.0101232 0.614427 + -0.736259 0.710197 -2.81106 0.870703 -0.0053864 0.49178 + -0.772049 0.658362 -2.73928 0.950574 -0.0242424 0.309549 + -0.792939 0.560906 -2.64128 0.945914 -0.168161 0.277431 + -0.820584 0.480402 -2.67264 0.901959 -0.363881 0.23251 + -0.691375 0.908283 -2.88575 0.764759 0.0617762 0.641348 + -0.731438 0.862037 -2.82686 0.863204 0.0356039 0.503599 + -0.76395 0.810468 -2.75313 0.937546 0.0290762 0.346643 + -0.686176 1.06194 -2.9165 0.78134 0.0960812 0.616665 + -0.725744 1.0435 -2.85377 0.869827 0.0488439 0.490933 + -0.758256 0.991941 -2.78005 0.905073 0.0472874 0.422619 + -0.787588 0.970479 -2.71248 0.919307 0.063206 0.388433 + -0.78484 0.713096 -2.65508 0.956327 0.0252929 0.291203 + -0.647704 1.1838 -2.99096 0.730735 0.247443 0.636238 + -0.686414 1.1672 -2.92421 0.862902 0.0838233 0.498371 + -0.725982 1.14876 -2.86148 0.882645 -0.0251462 0.469367 + -0.746306 1.13431 -2.82284 0.889112 -0.0362587 0.456251 + -0.76236 1.12166 -2.79273 0.897618 -0.0208858 0.440279 + -0.619839 1.24072 -3.04455 0.693616 0.2983 0.655679 + -0.664021 1.23222 -2.99483 0.72792 0.289704 0.621453 + -0.692099 1.2342 -2.95767 0.857161 0.331456 0.394224 + -0.675783 1.18578 -2.9538 0.816407 0.320006 0.480704 + -0.708607 1.21854 -2.89153 0.884636 0.108438 0.453498 + -0.595678 1.25431 -3.07789 0.74964 0.353486 0.559542 + -0.635705 1.28287 -3.04436 0.731787 0.285136 0.619019 + -0.679887 1.27437 -2.99464 0.74163 0.19584 0.641586 + -0.70025 1.26598 -2.9665 0.839518 0.242642 0.486143 + -0.704011 1.26531 -2.95615 0.936856 0.249922 0.244623 + -0.695861 1.23354 -2.94732 0.935366 0.302221 0.18372 + -0.582981 1.25574 -3.09956 0.671599 0.364336 0.645146 + -0.597425 1.28722 -3.0997 0.742004 0.376349 0.55479 + -0.610123 1.2858 -3.07803 0.766642 0.342624 0.543017 + -0.646453 1.31519 -3.04893 0.709055 0.458261 0.535946 + -0.6901 1.32223 -2.99213 0.70561 0.434965 0.559392 + -0.550057 1.24921 -3.12147 0.486541 0.372525 0.790255 + -0.596822 1.29737 -3.10788 0.671906 0.327617 0.664235 + -0.620871 1.31811 -3.08259 0.754948 0.366346 0.543915 + -0.529577 1.30636 -3.14945 0.480931 0.214275 0.850171 + -0.571472 1.29953 -3.12542 0.496228 0.240126 0.834324 + -0.622424 1.35607 -3.10695 0.496206 0.448015 0.743681 + -0.620268 1.32826 -3.09078 0.698394 0.445526 0.560137 + -0.477071 1.2723 -3.17425 0.588087 0.245457 0.770652 + -0.484212 1.31017 -3.17625 0.574634 0.175209 0.799436 + -0.540517 1.34949 -3.15255 0.452004 0.340472 0.824482 + -0.597073 1.35823 -3.12449 0.481182 0.399079 0.780513 + -0.495152 1.35338 -3.17929 0.417314 0.402569 0.814732 + -0.570031 1.37209 -3.15169 0.326319 0.76413 0.556436 + -0.626587 1.38075 -3.12369 0.149002 0.981322 0.121681 + -0.644495 1.37625 -3.1081 -0.00598481 0.829881 0.557908 + -0.642339 1.34843 -3.09192 0.327896 0.663587 0.672411 + -0.452528 1.35984 -3.19848 0.447026 0.208104 0.869977 + -0.458403 1.38412 -3.21673 0.0612236 0.828206 0.557069 + -0.501026 1.37766 -3.19754 0.156714 0.805843 0.571014 + -0.535893 1.3848 -3.19771 0.279328 0.862153 0.422691 + -0.57182 1.37949 -3.16631 0.24394 0.854031 0.459483 + -0.437333 1.39596 -3.23444 -0.0313357 0.815458 0.577967 + -0.486669 1.39281 -3.26778 -0.00487984 0.951158 0.308667 + -0.521536 1.39995 -3.26795 0.105452 0.987283 0.118962 + -0.597879 1.41285 -3.21729 0.0989004 0.983156 0.153695 + -0.633806 1.40745 -3.18594 0.0527407 0.941863 0.331833 + -0.416597 1.42487 -3.26851 -0.130774 0.790754 0.598002 + -0.4656 1.40456 -3.28554 -0.464568 0.870663 0.161624 + -0.455866 1.41022 -3.31814 -0.231533 0.963696 0.132973 + -0.541909 1.39688 -3.30343 -0.104008 0.971629 -0.212412 + -0.403292 1.43617 -3.27808 0.126301 0.67881 0.723371 + -0.452295 1.41595 -3.29506 -0.375708 0.925981 -0.037452 + -0.383586 1.41509 -3.28317 0.59724 0.801426 -0.0319518 + -0.387157 1.40937 -3.30626 0.172799 0.967918 0.182413 + -0.403292 1.43617 -3.27808 0.162657 0.372724 -0.913575 + -0.329689 1.40261 -3.30316 0.051933 0.813752 0.578887 + -0.351495 1.41275 -3.32132 0.148803 0.913498 0.378656 + -0.418215 1.43963 -3.35968 -0.121709 0.945761 0.301203 + -0.294955 1.40256 -3.30208 0.0990731 0.800527 0.591051 + -0.291361 1.41354 -3.36028 0.0241639 0.962897 0.268787 + -0.313167 1.42367 -3.37844 0.166527 0.962278 0.215151 + -0.382552 1.44302 -3.37474 0.0783278 0.982132 0.17112 + -0.437666 1.43887 -3.38337 -0.365385 0.916094 -0.165124 + -0.268469 1.40904 -3.31769 0.178235 0.829284 0.529641 + -0.264876 1.42001 -3.37589 -0.255714 0.965837 0.0420664 + -0.316495 1.42576 -3.40805 0.129876 0.970776 -0.201809 + -0.273723 1.41652 -3.42925 -0.187884 0.911902 -0.364877 + -0.29845 1.41438 -3.42715 -0.0248339 0.910229 -0.41336 + -0.364593 1.42073 -3.44055 0.0226781 0.850136 -0.526074 + -0.38588 1.4451 -3.40435 -0.101595 0.975382 -0.195727 + -0.431022 1.42252 -3.41704 -0.385412 0.76951 -0.509227 + -0.289247 1.40217 -3.48199 -0.142651 0.89036 -0.432332 + -0.313974 1.40012 -3.47984 -0.0724862 0.889387 -0.451372 + -0.346548 1.40927 -3.45969 -0.0084214 0.878237 -0.478152 + -0.389518 1.40048 -3.46206 -0.273068 0.69308 -0.667139 + -0.410805 1.42493 -3.42582 -0.274452 0.761445 -0.587262 + -0.247715 1.39909 -3.49465 0.0476116 0.667443 -0.743138 + -0.288758 1.38388 -3.50732 -0.0524574 0.654239 -0.754467 + -0.330949 1.38218 -3.50197 -0.181435 0.671538 -0.718414 + -0.363523 1.39142 -3.48178 -0.246849 0.696206 -0.674064 + -0.254924 1.35791 -3.51993 0.146615 0.337262 -0.929924 + -0.294682 1.3632 -3.5197 -0.046744 0.372108 -0.927012 + -0.336873 1.3615 -3.51435 -0.220808 0.39067 -0.893656 + -0.375563 1.35026 -3.50649 -0.380891 0.350707 -0.855527 + -0.401558 1.3594 -3.48672 -0.370166 0.45785 -0.808301 + -0.231255 1.30733 -3.52613 0.326247 0.168402 -0.930163 + -0.265471 1.30618 -3.52993 0.0573695 0.104924 -0.992824 + -0.305229 1.31147 -3.52969 -0.0866864 0.114666 -0.989615 + -0.345791 1.30755 -3.52291 -0.20309 0.107999 -0.973186 + -0.384481 1.29631 -3.51505 -0.291074 0.0906114 -0.9524 + -0.205632 1.25386 -3.52612 -0.00186938 0.03479 -0.999393 + -0.240561 1.23784 -3.52937 0.121702 -0.0731405 -0.989868 + -0.274776 1.23669 -3.53318 0.0149927 -0.0686066 -0.997531 + -0.314001 1.23121 -3.52948 -0.11862 -0.0827736 -0.989483 + -0.354563 1.22729 -3.52269 -0.238059 -0.0971919 -0.966376 + -0.18277 1.27427 -3.52447 -0.27771 0.213127 -0.936725 + -0.158514 1.25436 -3.53517 -0.294021 -0.0103963 -0.955742 + -0.202594 1.15117 -3.50946 0.0477741 -0.219127 -0.974526 + -0.237523 1.13524 -3.51266 0.155527 -0.159038 -0.974945 + -0.271166 1.09805 -3.51044 -0.205029 -0.157363 -0.966023 + -0.122829 1.2337 -3.54739 -0.151469 -0.0569415 -0.986821 + -0.138765 1.12834 -3.52391 -0.303527 -0.224051 -0.926106 + -0.17445 1.14901 -3.5117 -0.255493 -0.237549 -0.937173 + -0.199758 0.994971 -3.4561 0.305179 -0.173767 -0.936307 + -0.224297 0.9899 -3.47912 0.536828 -0.146619 -0.830854 + -0.066486 1.28184 -3.53957 0.297325 0.0274514 -0.954382 + -0.094034 1.21797 -3.54555 0.197254 -0.128294 -0.971922 + -0.10167 1.11635 -3.52693 0.159304 -0.252449 -0.954406 + -0.153727 0.971674 -3.47695 -0.428914 -0.00879569 -0.903303 + -0.171614 0.99271 -3.45839 -0.439955 -0.101958 -0.892213 + -0.051677 1.3072 -3.53271 0.431915 0.117217 -0.894265 + -0.049252 1.23504 -3.52672 0.467704 -0.10956 -0.877069 + -0.056889 1.13333 -3.50816 0.306545 -0.195787 -0.931503 + -0.116632 0.959679 -3.47998 -0.0723335 -0.0508205 -0.996085 + -0.170744 0.837161 -3.49297 -0.0807517 0.532283 -0.842706 + -0.035173 1.31697 -3.51802 0.570229 0.154511 -0.806824 + -0.034443 1.26032 -3.51991 0.518682 -0.0327048 -0.854341 + -0.024385 1.12445 -3.49976 0.0705888 -0.125775 -0.989544 + -0.067554 0.954492 -3.48559 0.0622058 -0.0461901 -0.996994 + -0.021855 1.31235 -3.51002 0.535864 0.139557 -0.83269 + -0.021125 1.2557 -3.5119 0.249718 -0.0230944 -0.968043 + -0.010165 1.11387 -3.50005 -0.035103 -0.135426 -0.990165 + -0.006905 1.3221 -3.49751 0.288907 0.219125 -0.931943 + -0.006905 1.24513 -3.51219 -0.00634015 0.00313263 -0.999975 + 0.006906 1.24504 -3.51223 0.0128487 0.0201976 -0.999713 + 0.010163 1.11387 -3.50005 0.0763811 -0.167599 -0.982892 + 0.021126 1.2557 -3.51189 -0.318241 0.0319158 -0.947472 + 0.024383 1.12445 -3.49976 -0.0754617 -0.140816 -0.987156 + 0.021855 1.31234 -3.51001 -0.570926 0.103883 -0.814403 + 0.034419 1.26032 -3.5199 -0.517014 -0.0240446 -0.855639 + 0.035149 1.31696 -3.51801 -0.570615 0.154536 -0.806546 + -0.697976 1.23713 -2.92113 0.938193 0.224392 0.263518 + -0.719127 1.26344 -2.8867 0.833935 0.245431 0.494284 + -0.723957 1.18398 -2.85369 0.91868 -0.0162691 0.394666 + -0.744281 1.16962 -2.81501 0.892174 -0.0710925 0.446063 + -0.710942 1.28047 -2.91621 0.941252 0.24797 0.229252 + -0.722284 1.30336 -2.90405 0.83628 0.292019 0.46407 + -0.740454 1.32251 -2.89142 0.720709 0.416755 0.55398 + -0.734477 1.22897 -2.84881 0.874796 0.188329 0.446391 + -0.750635 1.19613 -2.80312 0.875663 0.0328588 0.481803 + -0.708827 1.27688 -2.94239 0.967793 0.222699 0.117393 + -0.723505 1.34021 -2.93208 0.833721 0.548095 -0.0670915 + -0.734848 1.36318 -2.91986 0.56904 0.816208 -0.0999884 + -0.743611 1.36243 -2.90876 0.304418 0.772023 0.557952 + -0.710462 1.31384 -2.964 0.897196 0.00296292 0.441624 + -0.715278 1.32541 -2.95025 0.874164 0.40786 0.263606 + -0.73922 1.34428 -2.94413 0.14817 0.94997 -0.274959 + -0.747447 1.35908 -2.92595 -0.241704 0.710506 -0.660878 + -0.753688 1.36208 -2.91735 -0.384206 0.846995 -0.367404 + -0.752272 1.34314 -2.95816 0.0644246 0.97649 0.205708 + -0.800368 1.32232 -2.8981 -0.339659 0.877823 -0.337725 + -0.806609 1.32532 -2.88949 -0.660117 0.706291 0.255732 + -0.762452 1.36133 -2.90626 -0.346835 0.906606 0.240358 + -0.730388 1.35412 -2.99916 0.288946 0.894964 0.339927 + -0.799767 1.35538 -2.98155 -0.107673 0.953461 0.281634 + -0.81342 1.32127 -2.91208 -0.219553 0.93154 0.289879 + -0.806973 1.30427 -2.86942 -0.426794 0.67748 0.599056 + -0.762816 1.34027 -2.88619 0.14582 0.670579 0.727365 + -0.700092 1.3477 -3.01025 0.447027 0.793116 0.413684 + -0.725677 1.3651 -3.07618 0.109228 0.985576 0.129264 + -0.777884 1.36636 -3.02257 -0.0277869 0.987041 0.158041 + -0.846376 1.34513 -3.0218 -0.451253 0.88407 -0.12162 + -0.836724 1.34868 -2.98676 -0.296305 0.940721 0.165069 + -0.656446 1.34066 -3.06706 0.487509 0.768067 0.41522 + -0.695381 1.35868 -3.08727 0.301383 0.889776 0.342734 + -0.665156 1.37845 -3.1423 0.0397632 0.884147 0.465514 + -0.748238 1.36493 -3.10089 -0.118587 0.99198 -0.0437333 + -0.800445 1.36619 -3.04728 -0.235835 0.97156 0.0212905 + -0.681275 1.36646 -3.11215 0.446156 0.694746 0.564156 + -0.663367 1.37105 -3.12769 -0.0320323 0.975216 0.218923 + -0.66935 1.40969 -3.19342 -0.176412 0.978892 0.103199 + -0.7007 1.3806 -3.14983 -0.21487 0.863985 0.45537 + -0.750069 1.36172 -3.13333 -0.201581 0.979425 0.00952228 + -0.820562 1.35346 -3.09763 -0.330672 0.939886 -0.0852659 + -0.661605 1.4 -3.24124 -0.310781 0.908952 -0.277889 + -0.714155 1.38846 -3.19644 -0.406761 0.91352 0.00523802 + -0.743885 1.37593 -3.19654 -0.373163 0.926866 -0.040853 + -0.73043 1.36816 -3.14988 -0.344936 0.934734 0.0853891 + -0.618252 1.40969 -3.25282 -0.145747 0.969107 -0.198969 + -0.66065 1.36268 -3.328 -0.51932 0.766937 -0.376981 + -0.695535 1.34931 -3.28524 -0.665785 0.556929 -0.496548 + -0.70641 1.37868 -3.24431 -0.449078 0.762527 -0.465705 + -0.617297 1.37237 -3.33958 -0.229767 0.915119 -0.331306 + -0.601612 1.36411 -3.37827 -0.321734 0.901716 -0.288782 + -0.619326 1.34505 -3.40407 -0.490089 0.726922 -0.481037 + -0.657254 1.34065 -3.37004 -0.592836 0.667174 -0.451025 + -0.526224 1.38862 -3.34212 -0.238401 0.955782 -0.172177 + -0.555248 1.37678 -3.40721 -0.334303 0.913785 -0.230734 + -0.572962 1.35764 -3.43306 -0.415488 0.680636 -0.603411 + -0.63008 1.32452 -3.4159 -0.607219 0.215558 -0.764735 + -0.668008 1.3202 -3.38182 -0.737567 0.274932 -0.616772 + -0.475318 1.40955 -3.34178 -0.449008 0.8872 0.106145 + -0.497237 1.3962 -3.34946 -0.358989 0.89945 -0.249232 + -0.526261 1.38436 -3.41455 -0.235587 0.923559 -0.302551 + -0.528327 1.36562 -3.44609 -0.187363 0.686163 -0.702905 + -0.569567 1.32693 -3.45287 -0.422742 0.138622 -0.895585 + -0.463834 1.40797 -3.39984 -0.534547 0.785011 -0.313077 + -0.485753 1.39471 -3.40748 -0.31293 0.898748 -0.307128 + -0.487819 1.37588 -3.43906 -0.155624 0.718995 -0.677368 + -0.524932 1.33491 -3.4659 -0.141916 0.236938 -0.961104 + -0.457189 1.39153 -3.43356 -0.280674 0.68233 -0.675017 + -0.490004 1.34003 -3.46416 -0.0970424 0.330048 -0.938963 + -0.48183 1.26982 -3.45996 -0.27983 0.00130047 -0.960049 + -0.516758 1.26462 -3.46175 -0.229068 -0.185606 -0.955551 + -0.570524 1.25675 -3.43512 -0.435926 -0.298686 -0.848973 + -0.459374 1.35568 -3.45866 -0.287349 0.491665 -0.822007 + -0.459392 1.30386 -3.48052 -0.447396 0.0878286 -0.890013 + -0.462321 1.20627 -3.47089 -0.551825 -0.213002 -0.8063 + -0.440392 1.36678 -3.4643 -0.456044 0.517094 -0.724319 + -0.44041 1.31497 -3.48615 -0.461842 0.199007 -0.864348 + -0.439884 1.24031 -3.49145 -0.443041 -0.115054 -0.889088 + -0.451774 1.11419 -3.4558 -0.631497 -0.21112 -0.746083 + -0.500992 1.14196 -3.4007 -0.551265 -0.324636 -0.768582 + -0.420175 1.36919 -3.47308 -0.368042 0.526619 -0.766301 + -0.428884 1.32362 -3.49154 -0.495725 0.268344 -0.825983 + -0.428357 1.24896 -3.49682 -0.418738 -0.0476719 -0.906855 + -0.410267 1.31374 -3.50523 -0.347302 0.223187 -0.910807 + -0.402571 1.23154 -3.50665 -0.378505 -0.11856 -0.917975 + -0.365196 1.11911 -3.49652 -0.303239 -0.238381 -0.922616 + -0.413205 1.12335 -3.48047 -0.415682 -0.21607 -0.883472 + -0.453942 0.960764 -3.40646 -0.344691 0.00182879 -0.938714 + -0.490445 1.04989 -3.38562 -0.596686 -0.127539 -0.792275 + -0.328109 1.12278 -3.50867 -0.162214 -0.24417 -0.956069 + -0.377773 0.969135 -3.44696 -0.338157 -0.164971 -0.926517 + -0.415372 0.969923 -3.43112 -0.444899 -0.164805 -0.880286 + -0.288884 1.12826 -3.51238 -0.135813 -0.201475 -0.970032 + -0.340686 0.972809 -3.45912 -0.334685 -0.119372 -0.934738 + -0.388887 0.865204 -3.43674 -0.435817 0.248918 -0.86493 + -0.426486 0.865992 -3.42091 -0.311655 0.264027 -0.912776 + -0.321534 0.967345 -3.46626 -0.274533 -0.103264 -0.956017 + -0.341429 0.834182 -3.47141 -0.223318 0.416186 -0.88143 + -0.360581 0.839731 -3.46422 -0.345501 0.373164 -0.861033 + -0.429634 0.78645 -3.47633 -0.288984 0.544585 -0.787347 + -0.303815 0.937131 -3.46432 -0.207943 -0.0169981 -0.977993 + -0.308784 0.856679 -3.46998 -0.308517 0.272904 -0.91123 + -0.32412 0.755671 -3.53462 -0.325248 0.548037 -0.770629 + -0.401328 0.760889 -3.50386 -0.310948 0.529622 -0.789184 + -0.452223 0.777477 -3.47419 -0.383998 0.440329 -0.811576 + -0.27389 0.947205 -3.48017 -0.34731 -0.0545515 -0.936162 + -0.278858 0.866753 -3.48582 -0.432233 0.310528 -0.846609 + -0.291475 0.778083 -3.53324 -0.519863 0.734893 -0.435517 + -0.276334 0.788484 -3.53466 -0.0196673 0.522402 -0.852472 + -0.342242 0.693626 -3.57056 -0.287546 0.537936 -0.792428 + -0.255729 1.10274 -3.51457 0.00763824 -0.0249272 -0.99966 + -0.258453 0.951896 -3.4843 -0.000998641 -0.0796473 -0.996822 + -0.263717 0.877155 -3.48724 -0.0774602 0.265318 -0.961044 + -0.242504 0.9574 -3.48103 0.170447 -0.0531088 -0.983935 + -0.247767 0.882745 -3.48392 0.282547 0.164616 -0.945023 + -0.234171 0.879942 -3.47827 0.561333 0.116954 -0.819285 + -0.262738 0.785681 -3.529 0.260835 0.509604 -0.81992 + -0.209632 0.884925 -3.4553 0.123735 0.201055 -0.971734 + -0.188632 0.858195 -3.4744 -0.3209 0.421017 -0.848391 + -0.127806 0.850848 -3.48568 0.0012032 0.334229 -0.942491 + -0.419449 0.698937 -3.53976 -0.361202 0.517912 -0.775435 + -0.485231 0.752929 -3.46748 -0.501751 0.414547 -0.759208 + -0.526323 0.622523 -3.52641 -0.529495 0.513142 -0.675514 + -0.498111 0.688905 -3.49578 -0.531749 0.480195 -0.697607 + -0.537511 0.56696 -3.55777 -0.542696 0.466241 -0.698642 + -0.608552 0.602889 -3.4668 -0.526246 0.514464 -0.677046 + -0.57491 0.667283 -3.44113 -0.5409 0.481648 -0.689523 + -0.56203 0.731222 -3.41288 -0.536445 0.315892 -0.782585 + -0.619739 0.547326 -3.49816 -0.532272 0.470982 -0.703464 + -0.700775 0.548705 -3.44335 -0.414279 0.487641 -0.768491 + -0.685445 0.59546 -3.42053 -0.393888 0.506739 -0.766856 + -0.651803 0.659947 -3.39483 -0.426033 0.449402 -0.785197 + -0.626387 0.724717 -3.37901 -0.44313 0.29615 -0.846127 + -0.68927 0.50519 -3.47898 -0.458667 0.470756 -0.753667 + -0.763342 0.514662 -3.43259 -0.498172 0.412364 -0.762746 + -0.784905 0.576636 -3.39353 -0.510376 0.394981 -0.763876 + -0.769575 0.623479 -3.37066 -0.42582 0.615554 -0.663152 + -0.686245 0.450249 -3.51362 -0.488393 0.515967 -0.70374 + -0.760317 0.459718 -3.46722 -0.509769 0.409101 -0.756817 + -0.826931 0.46533 -3.40914 -0.606798 0.386306 -0.694668 + -0.817946 0.523864 -3.37972 -0.627834 0.33238 -0.703809 + -0.769751 0.39896 -3.49018 -0.594744 0.365778 -0.715882 + -0.836365 0.404575 -3.43211 -0.636286 0.305727 -0.708288 + -0.899257 0.399787 -3.37301 -0.668785 0.284345 -0.686931 + -0.885243 0.483021 -3.34798 -0.627994 0.376449 -0.681109 + -0.876258 0.541468 -3.31861 -0.653415 0.557851 -0.511715 + -0.789506 0.324651 -3.50627 -0.662559 0.263873 -0.70099 + -0.85367 0.326434 -3.44337 -0.675102 0.23173 -0.700385 + -0.916562 0.321651 -3.38428 -0.689992 0.189181 -0.698657 + -0.980646 0.325053 -3.31757 -0.699639 0.188527 -0.689175 + -0.957952 0.406999 -3.31211 -0.677412 0.277269 -0.681347 + -0.881306 0.234342 -3.44386 -0.710566 0.136038 -0.690355 + -0.944432 0.24971 -3.37027 -0.72634 0.120221 -0.67674 + -1.00852 0.253025 -3.30362 -0.721009 0.0577907 -0.690512 + -0.916497 0.168037 -3.41381 -0.744195 0.042118 -0.666633 + -0.979623 0.183405 -3.34023 -0.761718 0.0222245 -0.647528 + -1.04184 0.18854 -3.26613 -0.74849 -0.043733 -0.661703 + -1.07433 0.25742 -3.23383 -0.72919 0.0423298 -0.683 + -1.0167 0.11971 -3.28931 -0.771749 -0.198337 -0.604207 + -1.07892 0.124845 -3.2152 -0.749588 -0.288555 -0.595697 + -1.14271 0.132217 -3.13657 -0.759696 -0.318452 -0.566966 + -1.10765 0.192935 -3.19634 -0.761872 -0.0869551 -0.641865 + -1.02566 0.071333 -3.25052 -0.707459 -0.51346 -0.485655 + -1.08511 0.074678 -3.15911 -0.663352 -0.609216 -0.434534 + -1.14891 0.082051 -3.08048 -0.646054 -0.652184 -0.396573 + -1.20362 0.082894 -2.98534 -0.615211 -0.704137 -0.354551 + -1.20577 0.134949 -3.0531 -0.808709 -0.308618 -0.500744 + -1.06385 0.038414 -3.1255 -0.583036 -0.756388 -0.296557 + -1.11726 0.04216 -3.01339 -0.5059 -0.822782 -0.259027 + -1.17198 0.043004 -2.91825 -0.455321 -0.845817 -0.277984 + -1.09386 0.020379 -2.98946 -0.5307 -0.808432 -0.25455 + -1.14672 0.019074 -2.8854 -0.487059 -0.830987 -0.268763 + -1.21938 0.0345 -2.82152 -0.489515 -0.830114 -0.266994 + -1.26054 0.08085 -2.8788 -0.659247 -0.674555 -0.33222 + -1.2627 0.132817 -2.94661 -0.781702 -0.435847 -0.446071 + -1.08255 0.010615 -2.98355 -0.120284 -0.990917 -0.0601254 + -1.13542 0.009312 -2.87949 -0.137101 -0.988634 -0.0616938 + -1.18458 0.012616 -2.77921 0.214938 -0.971133 0.103456 + -1.19413 0.010571 -2.78867 -0.162578 -0.980218 -0.112874 + -1.04814 0.029898 -2.93935 0.37529 -0.911531 0.168135 + -1.10234 0.025305 -2.8486 0.341399 -0.922831 0.178407 + -1.15151 0.028616 -2.74833 0.34072 -0.918739 0.199571 + -1.23162 0.013941 -2.67851 0.243915 -0.95739 0.154625 + -1.24117 0.011804 -2.68801 -0.19652 -0.978881 -0.0563109 + -0.989415 0.068168 -2.87763 0.550681 -0.795727 0.252129 + -1.04361 0.063489 -2.78693 0.509476 -0.811212 0.287 + -1.09489 0.063421 -2.70421 0.499826 -0.813227 0.298052 + -1.14295 0.067705 -2.61003 0.499514 -0.812636 0.300181 + -1.19957 0.032899 -2.65415 0.371172 -0.901168 0.223891 + -0.930102 0.177676 -2.79671 0.731444 -0.573901 0.368276 + -0.980336 0.150298 -2.72969 0.700095 -0.612051 0.367777 + -1.03161 0.150143 -2.64702 0.672089 -0.633023 0.384159 + -1.08132 0.139613 -2.57138 0.664147 -0.647134 0.374336 + -0.9111 0.308272 -2.65471 0.77121 -0.526868 0.357275 + -0.963799 0.270777 -2.59536 0.745057 -0.560169 0.36208 + -1.01351 0.260159 -2.51977 0.696839 -0.611076 0.375501 + -0.858011 0.415583 -2.60577 0.85481 -0.461343 0.23762 + -0.910711 0.378083 -2.54642 0.76891 -0.587098 0.253167 + -0.952577 0.345927 -2.47973 0.71597 -0.65084 0.252577 + -1.06529 0.244662 -2.44953 0.694772 -0.608019 0.384192 + -0.830366 0.496 -2.57446 0.92631 -0.230387 0.298113 + -0.862898 0.442151 -2.51599 0.873814 -0.374449 0.31022 + -0.904765 0.409989 -2.44929 0.864552 -0.436537 0.248969 + -0.931244 0.390993 -2.37538 0.785399 -0.527753 0.323458 + -1.00436 0.330429 -2.40948 0.608251 -0.720988 0.331974 + -0.810958 0.671494 -2.58463 0.899464 0.0199178 0.436541 + -0.84349 0.617564 -2.52622 0.915709 -0.0203555 0.401326 + -0.868595 0.581615 -2.45815 0.940753 -0.0604942 0.333654 + -0.813706 0.928877 -2.64202 0.925978 0.0806582 0.368861 + -0.837125 0.904849 -2.57321 0.928137 0.0676635 0.366038 + -0.862229 0.8689 -2.50514 0.946262 0.0429775 0.320532 + -0.881028 0.844101 -2.43539 0.957894 0.0304208 0.285505 + -0.895074 0.562532 -2.3843 0.948378 -0.0950314 0.30257 + -0.791692 1.10011 -2.72521 0.906639 0.0671882 0.416523 + -0.80848 1.09317 -2.68379 0.933675 0.0740411 0.350385 + -0.819086 1.07003 -2.65352 0.941812 0.0150642 0.335802 + -0.842504 1.04609 -2.58464 0.909114 0.0981918 0.404809 + -0.863389 1.02916 -2.52893 0.915619 0.173593 0.36264 + -0.776795 1.14418 -2.75435 0.878355 0.0212247 0.477538 + -0.798085 1.14211 -2.72175 0.869721 0.108442 0.481483 + -0.814873 1.13508 -2.68038 0.920951 0.169147 0.351054 + -0.82413 1.10525 -2.63251 0.941899 0.0956513 0.321988 + -0.834735 1.08211 -2.60224 0.910544 0.00363815 0.413396 + -0.76074 1.15692 -2.78442 0.883719 -0.0639152 0.463633 + -0.788046 1.17924 -2.74286 0.817161 0.141228 0.55884 + -0.809336 1.17707 -2.71031 0.852518 0.198846 0.483398 + -0.824851 1.16142 -2.6706 0.891979 0.243592 0.380837 + -0.767094 1.18343 -2.77253 0.833324 0.082408 0.546607 + -0.802728 1.21624 -2.73615 0.70089 0.437004 0.56372 + -0.819528 1.20909 -2.70976 0.66716 0.513197 0.539931 + -0.835043 1.19344 -2.67006 0.747953 0.495711 0.441404 + -0.781776 1.22044 -2.76582 0.704393 0.400478 0.586044 + -0.812288 1.24475 -2.75953 0.424592 0.774234 0.469343 + -0.829088 1.2376 -2.73315 0.362487 0.775994 0.516175 + -0.878192 1.2283 -2.69584 0.188865 0.89445 0.405327 + -0.862039 1.21597 -2.67048 0.353578 0.860882 0.365876 + -0.750632 1.22266 -2.79948 0.803947 0.203722 0.558718 + -0.765252 1.25011 -2.81322 0.381514 0.700577 0.603025 + -0.796396 1.24789 -2.77957 0.4494 0.75685 0.474572 + -0.831281 1.27798 -2.82269 0.235721 0.879753 0.412881 + -0.740139 1.2274 -2.83489 0.949084 0.061087 0.309042 + -0.740136 1.25394 -2.83125 0.856419 0.333671 0.393968 + -0.756836 1.27327 -2.83993 0.164245 0.643231 0.747848 + -0.815389 1.28112 -2.84272 0.244358 0.818869 0.519368 + -0.746116 1.32094 -2.8775 0.628467 0.519046 0.579328 + -0.858062 1.28346 -2.82399 0.122449 0.904965 0.407486 + 1.45261 0.472207 -2.72205 0.846829 0.216699 -0.485719 + 1.47845 0.415515 -2.70086 0.8709 0.0420003 -0.489662 + 1.53616 0.331475 -2.5571 0.877718 -0.231189 -0.419718 + 1.49924 0.468028 -2.63601 0.861062 0.164256 -0.481241 + 1.52509 0.411336 -2.61482 0.889471 -0.00556116 -0.456957 + 1.57127 0.306457 -2.47256 0.896678 -0.249413 -0.365734 + 1.57454 0.233221 -2.37131 0.898987 -0.317792 -0.301381 + 1.54396 0.462983 -2.55687 0.903801 0.104927 -0.41489 + 1.56019 0.386316 -2.53028 0.914206 -0.0691379 -0.399309 + 1.60575 0.310399 -2.37859 0.922365 -0.252243 -0.292603 + 1.60902 0.237071 -2.27738 0.913262 -0.262684 -0.311367 + 1.63386 0.173251 -2.16504 0.893975 -0.285388 -0.345489 + 1.52708 0.537637 -2.57338 0.871701 0.00847439 -0.489964 + 1.5792 0.459677 -2.47515 0.908337 0.0209943 -0.417711 + 1.59543 0.383098 -2.44851 0.924195 -0.103934 -0.367507 + 1.63363 0.327312 -2.28708 0.923524 -0.232254 -0.305224 + 1.56851 0.550967 -2.50587 0.881095 -0.0502244 -0.470264 + 1.61732 0.461668 -2.39239 0.931579 -0.0370847 -0.361642 + 1.62331 0.400016 -2.35701 0.945922 -0.114288 -0.303595 + 1.66959 0.336595 -2.19856 0.89974 -0.255241 -0.354006 + 1.64677 0.245073 -2.17824 0.90529 -0.260687 -0.335399 + 1.60662 0.552958 -2.42312 0.921648 -0.0287569 -0.386961 + 1.64523 0.478729 -2.32075 0.947218 -0.0449714 -0.317419 + 1.65123 0.417072 -2.28535 0.927974 -0.115325 -0.35435 + 1.6967 0.352746 -2.14414 0.880801 -0.27371 -0.386359 + 1.68272 0.254356 -2.08972 0.891986 -0.248242 -0.377805 + 1.62548 0.694368 -2.38345 0.946686 0.0697107 -0.314524 + 1.63512 0.575662 -2.34904 0.946435 0.00129848 -0.322891 + 1.66055 0.507282 -2.271 0.942295 -0.00223324 -0.334775 + 1.67833 0.43314 -2.23098 0.918481 -0.0835185 -0.386545 + 1.60796 0.770499 -2.39911 0.885756 0.282469 -0.368303 + 1.64705 0.719534 -2.29283 0.958266 0.100971 -0.267453 + 1.65044 0.604129 -2.29935 0.953504 0.0396657 -0.298758 + 1.68726 0.517667 -2.19919 0.943339 0.0539296 -0.327419 + 1.62954 0.79567 -2.3085 0.921323 0.258183 -0.290698 + 1.66896 0.729781 -2.21098 0.966131 0.108195 -0.234274 + 1.67234 0.614464 -2.21745 0.957262 0.0796398 -0.278042 + 1.71697 0.522975 -2.10938 0.944673 0.0817996 -0.317651 + 1.70504 0.443523 -2.15917 0.939808 0.00288297 -0.34169 + 1.62358 0.866281 -2.2448 0.869465 0.372424 -0.324547 + 1.65077 0.820142 -2.21909 0.931695 0.251491 -0.262099 + 1.68803 0.731209 -2.11905 0.95566 0.14238 -0.257763 + 1.70205 0.619774 -2.12764 0.945033 0.117978 -0.304949 + 1.59304 0.919411 -2.25863 0.775834 0.500474 -0.384196 + 1.63942 0.904651 -2.16327 0.895177 0.344165 -0.283212 + 1.66984 0.821567 -2.12716 0.949787 0.213068 -0.229142 + 1.71475 0.731724 -2.02935 0.947246 0.171256 -0.270919 + 1.55387 1.00544 -2.20244 0.617275 0.669127 -0.413812 + 1.60888 0.957783 -2.17709 0.788335 0.493296 -0.367678 + 1.65644 0.92519 -2.07784 0.918725 0.29385 -0.263812 + 1.68686 0.842111 -2.04174 0.940862 0.22969 -0.249038 + 1.4908 1.0756 -2.14036 0.26001 0.889867 -0.374875 + 1.54839 1.05144 -2.14471 0.489667 0.728006 -0.479827 + 1.6034 1.00377 -2.11935 0.690615 0.596978 -0.408249 + 1.62395 1.00397 -2.08508 0.80265 0.47478 -0.361021 + 1.6628 0.974096 -1.99975 0.912035 0.303283 -0.276063 + 1.39932 1.0879 -2.16447 0.132861 0.961096 -0.242161 + 1.43855 1.1159 -2.01876 -0.0386831 0.95426 -0.296464 + 1.51379 1.12676 -2.02398 0.0638906 0.914765 -0.398903 + 1.57138 1.1026 -2.02832 0.518408 0.729382 -0.44638 + 1.59193 1.10279 -1.99405 0.673292 0.595965 -0.437611 + 1.34634 1.0895 -2.16103 0.0369523 0.987302 -0.154498 + 1.46346 1.16028 -1.89442 -0.23982 0.942984 -0.230797 + 0.988349 1.08892 -1.69963 -0.36581 0.683973 0.631161 + 1.09227 1.08996 -1.73342 0.261129 0.915849 0.305012 + 1.11248 1.07053 -1.70838 0.166592 0.90663 0.387645 + 1.09541 1.02064 -1.61357 -0.023803 0.962626 0.269788 + 1.15779 1.05545 -1.67285 -0.195693 0.924334 0.327584 + 1.09292 1.01632 -1.59089 -0.354268 0.925022 0.137218 + 1.1173 1.02629 -1.55774 -0.499264 0.859587 0.10884 + -2.0866 1.79868 -0.385969 -0.450143 0.868692 -0.206751 + -2.06612 1.79246 -0.363198 0.317015 0.945894 0.0691808 + -2.05691 1.78848 -0.509912 0.297877 0.954577 -0.00716328 + -2.08681 1.79252 -0.279496 0.39676 0.917871 0.00967817 + -2.03495 1.76178 -0.21826 0.450823 0.892131 -0.029331 + -2.01642 1.76019 -0.274707 0.646245 0.744378 0.168134 + -2.04759 1.79087 -0.419645 0.249125 0.966647 0.0594145 + -2.05691 1.78848 -0.509912 0.00397707 0.999632 -0.0268333 + -2.10728 1.79874 -0.302267 -0.224544 0.960517 -0.164277 + -2.13006 1.81445 -0.230689 -0.110625 0.941329 -0.318846 + -2.10924 1.80934 -0.206632 0.484039 0.86867 -0.105443 + -2.05739 1.77861 -0.145405 0.14963 0.942622 -0.298453 + -1.99295 1.73621 -0.301369 0.83562 0.549196 0.0110664 + -2.11821 1.78343 -0.31315 -0.843627 0.437169 -0.311732 + -2.14098 1.79923 -0.241522 -0.524124 0.721479 -0.452506 + -2.17594 1.86452 -0.096405 0.0643315 0.957873 -0.279893 + -2.15513 1.8594 -0.07235 0.32547 0.872805 -0.363703 + -2.08649 1.7566 -0.414291 -0.938982 0.156244 -0.306431 + -2.1181 1.74126 -0.341513 -0.90115 0.18041 -0.394184 + -2.17356 1.80731 -0.204712 -0.475464 0.696599 -0.537293 + -2.20852 1.87268 -0.059546 -0.019154 0.925532 -0.378184 + -2.05691 1.78848 -0.509912 -0.982277 0.0686332 -0.17442 + -2.08045 1.67933 -0.46125 -0.941302 0.152532 -0.301138 + -2.13064 1.67626 -0.328739 -0.909521 0.135366 -0.392998 + -2.17854 1.69863 -0.236073 -0.852201 0.021149 -0.522787 + -2.16601 1.76363 -0.248856 -0.814249 0.229287 -0.533316 + -2.26032 1.84742 -0.082585 -0.339492 0.733317 -0.589059 + -2.05087 1.7113 -0.556828 -0.967225 0.114483 -0.22665 + -2.08361 1.60417 -0.499667 -0.91313 0.305299 -0.270159 + -2.13379 1.6011 -0.367149 -0.928556 0.176043 -0.326792 + -2.17994 1.62481 -0.232215 -0.826142 0.179614 -0.534067 + -2.01964 1.79368 -0.67111 -0.981152 -0.00407053 -0.193195 + -2.01547 1.73294 -0.734101 -0.972584 0.133596 -0.190349 + -2.04671 1.65056 -0.619819 -0.959585 0.218274 -0.177633 + -2.09564 1.53103 -0.571994 -0.960136 0.200244 -0.19504 + -2.12301 1.50724 -0.430988 -0.952883 0.135384 -0.271449 + -2.16916 1.53095 -0.296056 -0.966723 -0.0486957 -0.25115 + -2.01507 1.85244 -0.710092 -0.952732 -0.0137144 -0.303503 + -1.9663 1.86477 -0.850038 -0.954697 0.138719 -0.263267 + -2.02224 1.64622 -0.784511 -0.958662 0.189841 -0.211963 + -2.05874 1.57734 -0.692196 -0.950602 0.23948 -0.197496 + -2.04901 1.87769 -0.606221 -0.98889 -0.00170281 -0.148637 + -2.04084 1.94534 -0.658996 -0.978647 0.0887841 -0.185384 + -2.02648 2.0249 -0.695197 -0.972804 0.231595 -0.00389074 + -2.00071 1.93192 -0.74635 -0.907793 -0.0136759 -0.419195 + -1.97115 1.95368 -0.81144 -0.928221 0.0460678 -0.369167 + -2.05358 1.81893 -0.567241 -0.978176 -0.129611 -0.162394 + -2.05367 1.84205 -0.544286 -0.998185 0.0436692 -0.0414662 + -2.04962 1.87449 -0.581074 -0.993561 0.11288 -0.0097189 + -2.04145 1.94214 -0.633849 -0.986185 0.165622 -0.00283097 + -1.9953 2.10086 -0.703953 -0.0654755 0.296776 0.9527 + -1.24542 1.07804 -1.44959 0.173142 -0.0822395 0.981457 + -1.30253 1.11291 -1.43659 0.82029 0.42927 0.377958 + -1.26037 1.02438 -1.45144 0.697685 -0.0379477 0.715399 + -1.3426 1.16556 -1.41618 0.818352 0.531273 0.219201 + -1.33891 1.09937 -1.36652 0.779628 0.197893 0.594154 + -1.31527 1.03417 -1.3908 0.737068 -0.00548835 0.675796 + -1.26424 0.876179 -1.45655 0.69155 -0.0476274 0.720756 + -1.20752 0.862044 -1.50687 0.74719 -0.0679487 0.661127 + -1.15338 0.931117 -1.57811 0.759355 -0.0907354 0.644319 + -1.11406 0.974813 -1.60939 0.586011 -0.267587 0.764845 + -1.22105 1.06807 -1.48272 0.27089 -0.808143 0.522995 + -1.24542 1.07804 -1.44959 0.749546 -0.230328 0.620588 + -1.38567 1.21834 -1.48539 0.731757 0.678101 -0.0686348 + -1.42592 1.25813 -1.43972 0.72592 0.685023 -0.0615047 + -1.39323 1.22173 -1.37206 0.833855 0.518408 0.189573 + -1.38954 1.15545 -1.32246 0.800471 0.190871 0.568167 + -1.3456 1.16561 -1.50585 0.807646 0.56773 -0.159343 + -1.42313 1.24458 -1.54323 0.599116 0.767823 -0.226954 + -1.46338 1.28437 -1.49756 0.652605 0.726901 -0.213829 + -1.46073 1.30484 -1.39622 0.812452 0.5688 -0.128014 + -1.42804 1.26844 -1.32856 0.881324 0.448974 0.147277 + -1.26875 1.04947 -1.46391 0.478371 0.656019 -0.583781 + -1.27651 1.04939 -1.49016 0.700866 0.708303 -0.0842194 + -1.35337 1.16552 -1.5321 0.818574 0.503214 -0.27697 + -1.24542 1.07804 -1.44959 0.0475818 0.416344 -0.907961 + -1.24022 1.02623 -1.52285 0.478502 0.862283 0.165843 + -1.33367 1.11258 -1.54161 0.772216 0.605052 -0.19389 + -1.36149 1.14219 -1.57689 0.863292 0.418384 -0.282279 + -1.38119 1.19504 -1.56743 0.798107 0.567022 -0.203743 + -1.18975 1.00904 -1.53268 0.062907 0.995546 0.0702265 + -1.20826 1.07264 -1.66304 0.415145 0.859062 0.299445 + -1.29738 1.08942 -1.5743 0.562487 0.792297 0.236376 + -1.31783 1.10964 -1.60512 0.369622 0.927123 0.0618199 + -1.35577 1.12264 -1.59423 0.659886 0.737977 -0.141213 + -1.09541 1.02064 -1.61357 0.0237913 0.962556 0.270036 + -1.15779 1.05545 -1.67285 0.195469 0.924385 0.327572 + -1.14875 1.08447 -1.81252 -0.0166731 0.99893 0.043146 + -1.22871 1.09286 -1.69385 0.3051 0.943457 0.129627 + -1.11728 1.02629 -1.55775 -0.295542 0.931926 -0.210163 + -1.09291 1.01632 -1.59089 0.442612 -0.543432 0.713286 + -1.05745 0.968945 -1.65383 0.630685 -0.550842 0.546635 + -1.0363 1.01054 -1.63527 0.630821 -0.110549 0.768013 + -0.994768 1.04414 -1.66086 0.655605 0.0954371 0.749048 + -1.00856 1.06949 -1.67458 0.16273 0.701066 0.694281 + -1.05009 1.03582 -1.64905 0.0974265 0.735369 0.670627 + -1.09291 1.01632 -1.59089 0.526572 0.61002 0.592113 + -1.0544 0.957346 -1.67294 0.687805 -0.548067 0.47597 + -0.991716 1.03263 -1.67992 0.815287 -0.473244 0.333686 + -0.969312 1.06119 -1.7084 0.926927 -0.0756831 0.36753 + -0.988349 1.08892 -1.69963 0.365777 0.683989 0.631163 + -1.11248 1.07053 -1.70838 -0.166583 0.90673 0.387415 + -1.08014 0.917146 -1.67951 0.74554 -0.464936 0.477498 + -1.02381 0.965114 -1.71099 0.79491 -0.521387 0.310281 + -1.0014 0.993682 -1.73947 0.892418 -0.451204 -0.00241486 + -1.10836 0.891593 -1.64305 0.853521 -0.242521 0.461178 + -1.09486 0.870919 -1.70684 0.801495 -0.493602 0.337582 + -1.04955 0.924909 -1.71755 0.744193 -0.545299 0.38578 + -1.03953 0.916936 -1.75575 0.824881 -0.548452 0.137012 + -1.02065 0.95854 -1.7576 0.915138 -0.400652 0.0447345 + -1.16249 0.822434 -1.57186 0.836226 -0.343911 0.427143 + -1.12307 0.845368 -1.67038 0.836454 -0.447241 0.316734 + -1.08484 0.863034 -1.74498 0.824632 -0.459995 0.329221 + -1.03365 0.924709 -1.79081 0.894405 -0.425211 0.138694 + -1.01477 0.966219 -1.79271 0.97713 -0.191171 0.0931124 + -1.21154 0.769462 -1.53291 0.787037 -0.409205 0.461653 + -1.17212 0.792308 -1.63148 0.836245 -0.441014 0.325886 + -1.12885 0.794089 -1.71237 0.857283 -0.316273 0.406248 + -1.05344 0.863585 -1.81634 0.872638 -0.440905 0.210011 + -1.26447 0.772444 -1.46028 0.695533 -0.308164 0.649052 + -1.29789 0.714715 -1.48249 0.673517 -0.48752 0.555608 + -1.24 0.709635 -1.55049 0.754407 -0.437563 0.489294 + -1.19672 0.711416 -1.63137 0.830035 -0.332251 0.447941 + -1.32119 0.786574 -1.40995 0.688698 -0.190326 0.699622 + -1.35082 0.717703 -1.40986 0.675227 -0.414784 0.609937 + -1.36445 0.647105 -1.45278 0.645421 -0.514315 0.564723 + -1.30656 0.642106 -1.52072 0.658748 -0.509325 0.55375 + -1.25297 0.631515 -1.60298 0.721021 -0.506995 0.472319 + -1.36481 0.824607 -1.35122 0.724988 -0.153365 0.67147 + -1.39914 0.743891 -1.34262 0.667865 -0.338687 0.662757 + -1.4656 0.683465 -1.31776 0.658023 -0.446382 0.606423 + -1.41728 0.657188 -1.38505 0.61585 -0.508591 0.601717 + -1.31913 0.885966 -1.3959 0.743944 -0.0553597 0.665945 + -1.40449 0.873828 -1.30028 0.755522 -0.134008 0.641271 + -1.44277 0.781924 -1.2839 0.71458 -0.284723 0.63899 + -1.35881 0.935192 -1.34496 0.759032 -0.0386245 0.649907 + -1.43222 0.93844 -1.25339 0.76997 -0.0115449 0.637976 + -1.47412 0.841002 -1.21862 0.738598 -0.213192 0.639548 + -1.53037 0.782376 -1.18348 0.766098 -0.300331 0.568238 + -1.49902 0.723384 -1.2487 0.676639 -0.391776 0.623436 + -1.38245 1.00039 -1.32068 0.741655 0.0422017 0.669453 + -1.46009 1.01299 -1.23031 0.82379 0.000647658 0.566895 + -1.50185 0.905609 -1.17173 0.817054 -0.146961 0.557517 + -1.41032 1.07485 -1.29766 0.752916 0.0473755 0.656409 + -1.48367 1.07867 -1.18368 0.868379 0.0439774 0.493946 + -1.51686 0.973193 -1.12178 0.860304 -0.103619 0.499139 + -1.56396 0.914514 -1.06795 0.816421 -0.169329 0.552073 + -1.54895 0.846931 -1.11789 0.805782 -0.2504 0.53667 + -1.42778 1.21479 -1.28065 0.857926 0.159448 0.488405 + -1.44856 1.13419 -1.25584 0.8129 0.0627485 0.579014 + -1.51747 1.13409 -1.13427 0.895261 0.081783 0.437973 + -1.54043 1.03896 -1.07509 0.875969 -0.085484 0.474732 + -1.45892 1.26563 -1.2397 0.866108 0.153312 0.475766 + -1.48237 1.18961 -1.20643 0.839119 0.0558851 0.541069 + -1.54824 1.19931 -1.08523 0.892584 0.202536 0.402832 + -1.55596 1.11245 -1.01639 0.896302 -0.0196309 0.443009 + -1.45918 1.31928 -1.28762 0.907493 0.396119 0.139806 + -1.482 1.36422 -1.25526 0.905756 0.377442 0.192728 + -1.49134 1.31266 -1.19896 0.837718 0.160443 0.522003 + -1.51478 1.23655 -1.16574 0.833717 0.119872 0.539024 + -1.47664 1.34482 -1.35347 0.858846 0.499496 -0.11352 + -1.49947 1.38977 -1.32112 0.888233 0.452212 -0.0809087 + -1.5168 1.43611 -1.29238 0.904034 0.425647 -0.0393292 + -1.50491 1.40026 -1.23249 0.901912 0.36012 0.238472 + -1.51425 1.3487 -1.17618 0.838207 0.16343 0.520289 + -1.48146 1.32614 -1.4323 0.742308 0.629793 -0.228778 + -1.49738 1.36613 -1.38956 0.781875 0.537231 -0.316314 + -1.5245 1.42932 -1.36002 0.831078 0.470068 -0.29723 + -1.51048 1.35755 -1.41971 0.785497 0.565423 -0.251577 + -1.5376 1.42074 -1.39016 0.809508 0.487 -0.327915 + -1.58824 1.56145 -1.33468 0.864036 0.442911 -0.239315 + -1.54182 1.47566 -1.33128 0.878835 0.438414 -0.18826 + -1.4924 1.31578 -1.48496 0.682665 0.667858 -0.296536 + -1.55899 1.44397 -1.42699 0.863564 0.435221 -0.254636 + -1.60964 1.58459 -1.37157 0.944732 0.322602 -0.0583826 + -1.60153 1.60372 -1.30009 0.914593 0.385592 -0.121815 + -1.55511 1.51792 -1.29669 0.893597 0.437526 -0.100283 + -1.46548 1.23855 -1.61559 0.572906 0.758523 -0.310517 + -1.50726 1.26305 -1.64863 0.644095 0.695631 -0.318179 + -1.53418 1.34028 -1.51799 0.753159 0.579994 -0.310417 + -1.59651 1.47515 -1.4948 0.835756 0.42398 -0.34893 + -1.61771 1.62371 -1.39571 0.917012 0.326939 -0.228471 + -1.4019 1.21062 -1.58843 0.646922 0.697115 -0.309069 + -1.44425 1.20459 -1.66078 0.638012 0.737988 -0.219804 + -1.4398 1.18462 -1.73799 0.48088 0.852271 -0.205886 + -1.48964 1.19978 -1.76384 0.491435 0.835547 -0.245667 + -1.40843 1.18278 -1.6526 0.633276 0.732962 -0.24845 + -1.40398 1.16281 -1.72981 0.522368 0.846345 -0.104075 + -1.41362 1.14503 -1.86862 0.320512 0.934897 -0.152442 + -1.46347 1.16028 -1.89442 0.27376 0.926384 -0.258589 + -1.38772 1.1672 -1.63161 0.825308 0.510224 -0.241945 + -1.38199 1.14774 -1.6489 0.835776 0.54096 -0.0940225 + -1.38227 1.15146 -1.69034 0.556547 0.827417 0.0750823 + -1.37664 1.14592 -1.80136 0.36247 0.928366 -0.0821708 + -1.36011 1.12005 -1.63475 0.592442 0.803189 -0.0624442 + -1.36038 1.12376 -1.67618 0.770781 0.632918 0.0728784 + -1.35493 1.13465 -1.76184 0.683378 0.728207 0.0520413 + -1.35051 1.13019 -1.85951 0.260086 0.96343 -0.0644806 + -1.32217 1.10706 -1.64564 0.220286 0.973971 -0.053426 + -1.32173 1.1061 -1.68638 0.21761 0.975953 -0.0127332 + -1.35104 1.11445 -1.69885 0.586982 0.807809 0.0538187 + -1.34559 1.12525 -1.78456 0.898268 0.432898 0.0755937 + -1.22827 1.0919 -1.73459 0.114962 0.993313 -0.0106827 + -1.31574 1.10599 -1.7686 0.212411 0.976995 0.0190527 + -1.34506 1.11426 -1.78112 0.77047 0.632282 0.0812103 + -1.33747 1.11615 -1.8326 0.837045 0.520751 0.167849 + -1.33801 1.12714 -1.83603 0.692712 0.706621 0.144346 + -1.21204 1.08971 -1.78439 0.116011 0.993232 -0.00562076 + -1.29951 1.1038 -1.8184 0.195488 0.980549 0.0175863 + -1.32299 1.11005 -1.85383 0.418816 0.900976 0.113291 + -1.32052 1.12088 -1.90499 0.453739 0.888132 0.0730834 + -1.33303 1.12393 -1.92846 0.210548 0.975773 -0.0594717 + -1.18366 1.08628 -1.81346 0.0817664 0.996602 -0.00990603 + -1.25696 1.09743 -1.88518 0.169439 0.98513 0.0284454 + -1.28043 1.1036 -1.92066 0.277512 0.95671 0.0877068 + -1.30604 1.11478 -1.92621 0.347487 0.935136 0.0690866 + -1.18596 1.09 -1.9349 0.0767218 0.994352 0.0733329 + -1.22858 1.09393 -1.9143 0.137355 0.989622 0.0422201 + -1.26087 1.10138 -1.96022 0.223457 0.973129 0.0555531 + -1.28648 1.11256 -1.96577 0.319311 0.946757 -0.0411404 + -1.33 1.12081 -1.96347 0.159355 0.984233 -0.0767621 + -1.15105 1.08818 -1.93396 0.0325011 0.997528 0.0623048 + -1.21825 1.09746 -1.98082 0.111722 0.993739 0.000589359 + -1.29512 1.10951 -2.0009 0.184854 0.977755 -0.0991183 + -1.33863 1.11785 -1.99855 0.117618 0.982567 -0.143972 + -1.08885 1.08668 -1.91054 0.0542806 0.997954 -0.0337843 + -1.0773 1.09187 -1.97934 0.13935 0.980498 0.138586 + -1.1395 1.09346 -2.0027 -0.0165511 0.99778 0.0645019 + -1.10695 1.09107 -1.77734 -0.193431 0.980445 0.0362127 + -1.04704 1.09328 -1.87537 0.0569004 0.973453 -0.221701 + -1.02812 1.06684 -1.94899 0.656839 0.724231 0.209884 + -1.04358 1.08719 -1.98883 0.334814 0.920845 0.199859 + -1.10267 1.10541 -2.0876 -0.00308561 0.990809 0.135235 + -1.09227 1.08996 -1.73342 -0.261124 0.915849 0.305016 + -0.983915 1.11468 -1.79325 0.102135 0.983635 -0.148429 + -0.958179 1.10158 -1.80475 0.844946 0.338635 -0.413995 + -1.02131 1.08017 -1.88688 0.783676 0.443465 -0.434961 + -0.969238 1.11357 -1.74933 0.425771 0.859656 0.282329 + -0.950201 1.08593 -1.75806 0.99664 -0.0195232 0.0795413 + -1.00406 1.03856 -1.82341 0.881778 -0.332204 -0.334826 + -1.09291 1.01632 -1.59089 0.354243 0.925053 0.137072 + -1.11728 1.02629 -1.55775 0.499307 0.859589 0.108618 + -0.996081 1.02292 -1.77671 0.876835 -0.433937 -0.207024 + -1.01533 0.98769 -1.79489 0.983354 -0.179662 -0.0271248 + -1.012 0.994478 -1.82505 0.999829 -0.0134116 0.0127323 + -1.01756 1.01435 -1.84748 0.980127 0.0823714 -0.18046 + -1.03481 1.05596 -1.91095 0.999773 -0.00306452 0.0210607 + -1.01144 0.973099 -1.82282 0.987951 -0.128609 0.086098 + -1.00757 0.987186 -1.87742 0.995834 0.0198532 -0.0889959 + -1.01314 1.00706 -1.89985 0.966596 0.238096 0.094885 + -1.00645 1.01785 -1.93794 0.875372 0.325751 0.357224 + -1.01786 0.945051 -1.83084 0.950162 -0.293284 0.10572 + -1.01399 0.959138 -1.88544 0.979392 -0.176513 0.0981545 + -0.99163 0.99924 -1.9591 0.935095 0.101867 0.339441 + -0.988968 1.05418 -2.00106 0.745405 0.568094 0.348771 + -1.00443 1.07461 -2.04084 0.398694 0.888189 0.228391 + -1.03765 0.883927 -1.85637 0.93604 -0.290251 0.198955 + -1.03466 0.865062 -1.88869 0.939733 -0.188261 0.285413 + -1.011 0.940273 -1.91776 0.937055 -0.215974 0.27438 + -0.991771 0.955552 -1.96923 0.9521 -0.101055 0.288605 + -1.09745 0.79464 -1.78372 0.875019 -0.268242 0.402973 + -1.05773 0.785549 -1.86557 0.899101 -0.167006 0.404632 + -1.006 0.870142 -1.95989 0.932887 -0.157103 0.324099 + -0.986775 0.88534 -2.01142 0.946685 -0.121602 0.29833 + -1.14134 0.712286 -1.73028 0.840727 -0.314113 0.441034 + -1.10162 0.703111 -1.81219 0.830778 -0.270314 0.486557 + -1.06407 0.665688 -1.88717 0.847717 -0.277697 0.451952 + -1.02908 0.790633 -1.93678 0.921692 -0.131475 0.364963 + -1.19759 0.632303 -1.70194 0.778508 -0.460176 0.426806 + -1.16577 0.605239 -1.79147 0.737381 -0.493769 0.460935 + -1.12821 0.567733 -1.86651 0.647001 -0.573674 0.502283 + -1.09718 0.541941 -1.95623 0.685948 -0.594715 0.419274 + -1.03454 0.654822 -1.96195 0.879723 -0.263726 0.395646 + -1.27522 0.528608 -1.69214 0.715921 -0.530846 0.453497 + -1.2434 0.501544 -1.78166 0.755033 -0.560987 0.339438 + -1.22111 0.481229 -1.89808 0.675259 -0.644874 0.357998 + -1.19008 0.455437 -1.98781 0.621183 -0.669827 0.406773 + -1.30462 0.57125 -1.6108 0.653371 -0.55673 0.512989 + -1.39521 0.449102 -1.60763 0.720441 -0.496904 0.483789 + -1.36581 0.406463 -1.68898 0.71644 -0.532194 0.451092 + -1.33049 0.388747 -1.78369 0.761052 -0.5572 0.332157 + -1.35822 0.581842 -1.52854 0.656139 -0.535145 0.532073 + -1.43477 0.463087 -1.52806 0.71188 -0.458388 0.532079 + -1.51087 0.270411 -1.60753 0.745923 -0.523087 0.412285 + -1.47041 0.261263 -1.69749 0.734902 -0.55189 0.394128 + -1.4351 0.243462 -1.79225 0.731062 -0.564496 0.383267 + -1.41888 0.576279 -1.46511 0.646976 -0.496289 0.578895 + -1.49543 0.45761 -1.46457 0.752044 -0.40799 0.517661 + -1.55043 0.284485 -1.52791 0.770437 -0.476393 0.423646 + -1.64693 0.158135 -1.50386 0.728119 -0.599991 0.331442 + -1.60938 0.151428 -1.60044 0.702056 -0.62076 0.348962 + -1.47171 0.58636 -1.39737 0.693619 -0.45853 0.555556 + -1.52999 0.476495 -1.38248 0.801063 -0.349192 0.486172 + -1.57685 0.307882 -1.43463 0.806349 -0.444788 0.389828 + -1.67335 0.181532 -1.41058 0.771124 -0.541297 0.33521 + -1.51673 0.601888 -1.32347 0.73258 -0.394978 0.554364 + -1.57501 0.491937 -1.30862 0.854505 -0.282919 0.435635 + -1.6114 0.326762 -1.35253 0.840761 -0.412313 0.350883 + -1.69386 0.205535 -1.30996 0.793536 -0.536675 0.286845 + -1.77078 0.075799 -1.37565 0.68536 -0.682119 0.254942 + -1.55015 0.641811 -1.25441 0.790138 -0.360605 0.495628 + -1.59402 0.539542 -1.22688 0.908984 -0.237773 0.342362 + -1.61983 0.365541 -1.2569 0.889323 -0.339409 0.306442 + -1.70229 0.244309 -1.21432 0.79847 -0.50459 0.328383 + -1.56162 0.702814 -1.18007 0.854852 -0.28339 0.434648 + -1.60549 0.60055 -1.15255 0.907737 -0.230313 0.35067 + -1.63884 0.413152 -1.17517 0.883781 -0.29005 0.367153 + -1.71489 0.294507 -1.11826 0.805347 -0.440134 0.397113 + -1.80779 0.132344 -1.16719 0.711517 -0.611219 0.346634 + -1.58019 0.76737 -1.11449 0.85704 -0.244885 0.453336 + -1.61581 0.67097 -1.08032 0.914331 -0.19806 0.35323 + -1.65143 0.480345 -1.09594 0.885192 -0.269321 0.379343 + -1.72749 0.361699 -1.03904 0.815727 -0.38333 0.433182 + -1.59302 0.838534 -1.04755 0.857829 -0.170253 0.484916 + -1.62864 0.74213 -1.01337 0.907813 -0.148264 0.392291 + -1.66176 0.550679 -1.02377 0.894996 -0.253189 0.367256 + -1.73373 0.435792 -0.954179 0.834671 -0.365902 0.411632 + -1.8313 0.24669 -0.970242 0.726684 -0.513273 0.456597 + -1.58681 0.989069 -1.01928 0.832526 -0.176992 0.524952 + -1.61587 0.913088 -0.998879 0.718302 -0.054998 0.693554 + -1.64391 0.823498 -0.957905 0.803516 0.0356972 0.594212 + -1.66647 0.634013 -0.954109 0.893489 -0.196039 0.404038 + -1.73844 0.519127 -0.884519 0.853437 -0.31061 0.418528 + -1.60233 1.06256 -0.96058 0.600196 -0.284741 0.747454 + -1.66335 0.996747 -0.978581 0.469243 -0.157034 0.868995 + -1.69139 0.907156 -0.937606 0.867169 0.145639 0.476243 + -1.68175 0.715383 -0.898643 0.930508 -0.137929 0.339309 + -1.58673 1.17767 -0.967345 0.866091 0.107659 0.488155 + -1.63217 1.13485 -0.91298 0.53935 -0.251011 0.8038 + -1.69319 1.06903 -0.930981 0.685085 -0.268883 0.677023 + -1.71302 0.976869 -0.880152 0.966357 0.102141 0.236053 + -1.67673 0.798432 -0.840487 0.984347 -0.021866 0.174878 + -1.58645 1.25696 -1.04068 0.88288 0.265888 0.387073 + -1.62401 1.25131 -0.923105 0.859705 0.163754 0.483831 + -1.66946 1.2085 -0.86874 0.731817 -0.180123 0.657267 + -1.71522 1.12579 -0.863086 0.849517 -0.178815 0.496333 + -1.73504 1.03363 -0.812257 0.964998 0.122164 0.232066 + -1.553 1.29421 -1.1212 0.826732 0.142832 0.544163 + -1.59609 1.36052 -1.07345 0.84029 0.142386 0.523106 + -1.62539 1.32331 -0.995411 0.891507 0.26432 0.3679 + -1.66295 1.31767 -0.877832 0.880105 0.197236 0.431872 + -1.69943 1.27083 -0.806712 0.748984 -0.100641 0.654901 + -1.53056 1.3972 -1.16099 0.861567 0.170934 0.477999 + -1.56931 1.3428 -1.10596 0.786053 0.0714698 0.614014 + -1.58452 1.45584 -1.09935 0.816287 0.170745 0.551835 + -1.63139 1.42106 -1.02992 0.841445 0.168355 0.513447 + -1.66069 1.38386 -0.951877 0.886274 0.275812 0.372083 + -1.52672 1.44195 -1.2025 0.908297 0.340478 0.243046 + -1.55774 1.43811 -1.13185 0.825473 0.220466 0.519604 + -1.55391 1.48278 -1.17341 0.886322 0.332952 0.321834 + -1.57536 1.52092 -1.14547 0.884572 0.293971 0.362097 + -1.60743 1.48643 -1.07733 0.81361 0.189247 0.549749 + -1.5386 1.4778 -1.26239 0.91024 0.410397 0.0551191 + -1.55989 1.52355 -1.22323 0.909299 0.401645 0.108891 + -1.5764 1.56368 -1.25754 0.903344 0.42881 -0.00961589 + -1.58134 1.56168 -1.19528 0.92928 0.348741 0.121733 + -1.59512 1.59787 -1.17855 0.918722 0.344777 0.19256 + -1.59827 1.55151 -1.12345 0.85495 0.291415 0.429112 + -1.63962 1.53551 -1.04434 0.80926 0.215384 0.546542 + -1.61323 1.63106 -1.28145 0.950067 0.307948 0.0504122 + -1.5881 1.59102 -1.23889 0.923268 0.383847 -0.015392 + -1.60188 1.6272 -1.22216 0.943095 0.332503 -0.00366988 + -1.61773 1.64263 -1.16089 0.921459 0.298711 0.248366 + -1.62087 1.59636 -1.10574 0.850282 0.294279 0.436372 + -1.63079 1.69475 -1.26975 0.965671 0.259755 -0.00262169 + -1.64063 1.746 -1.29753 0.981808 0.18736 -0.0308098 + -1.65095 1.83516 -1.20736 0.987992 0.134976 0.0751928 + -1.64342 1.75405 -1.19387 0.968595 0.192593 0.157261 + -1.61944 1.69088 -1.21046 0.949872 0.31088 0.033105 + -1.64171 1.70581 -1.14431 0.904836 0.277634 0.322786 + -1.6487 1.78512 -1.32169 0.958587 0.199575 -0.203176 + -1.67051 1.94782 -1.27149 0.967009 0.168724 -0.190856 + -1.66079 1.88642 -1.23514 0.988287 0.139971 -0.0608062 + -1.6578 1.70994 -1.38728 0.685234 0.393604 -0.612805 + -1.65962 1.79027 -1.34981 0.801938 0.270827 -0.532492 + -1.68143 1.95297 -1.29961 0.704724 0.300802 -0.642559 + -1.68429 2.08831 -1.22682 0.967528 0.102554 -0.231025 + -1.67457 2.027 -1.19043 0.99549 0.0922849 0.0219888 + -1.64283 1.63651 -1.43129 0.642264 0.483408 -0.594822 + -1.67945 1.64718 -1.44516 -0.139892 0.500138 -0.854571 + -1.68468 1.72955 -1.40063 -0.00451575 0.429118 -0.903237 + -1.6865 1.80988 -1.36317 0.0242019 0.391968 -0.91966 + -1.62162 1.48795 -1.53037 0.66687 0.527203 -0.526633 + -1.66448 1.57375 -1.48918 -0.128547 0.52756 -0.839736 + -1.72826 1.47856 -1.47591 -0.748902 0.314693 -0.583193 + -1.72777 1.56512 -1.43703 -0.708755 0.288441 -0.643792 + -1.5717 1.37146 -1.5858 0.745003 0.560257 -0.362053 + -1.61248 1.3985 -1.60823 0.581359 0.5953 -0.554652 + -1.65498 1.50123 -1.54717 -0.108795 0.619411 -0.777492 + -1.71876 1.40596 -1.53395 -0.754409 0.329249 -0.567858 + -1.56679 1.29244 -1.68874 0.601428 0.674473 -0.428218 + -1.60758 1.31948 -1.71117 0.326133 0.720529 -0.611944 + -1.63912 1.34099 -1.68663 -0.382134 0.670327 -0.636109 + -1.64584 1.41169 -1.62508 -0.153842 0.639864 -0.752932 + -1.71504 1.32517 -1.58463 -0.798321 0.327842 -0.505176 + -1.54917 1.22917 -1.80395 0.260681 0.875349 -0.407196 + -1.60006 1.21441 -1.83039 -0.172425 0.799119 -0.575915 + -1.60983 1.26131 -1.77081 -0.355723 0.662634 -0.659073 + -1.64137 1.28281 -1.74627 -0.499421 0.596737 -0.628079 + -1.70833 1.25447 -1.64618 -0.826482 0.323048 -0.461051 + -1.53871 1.17114 -1.89964 0.0665979 0.897041 -0.436901 + -1.5896 1.15638 -1.92608 -0.397037 0.790209 -0.466831 + -1.62797 1.10647 -1.93902 -0.765356 0.504198 -0.400018 + -1.62972 1.16616 -1.86822 -0.640316 0.563034 -0.522483 + -1.63948 1.21306 -1.80864 -0.639744 0.540692 -0.546242 + -1.43855 1.1159 -2.01876 0.0727262 0.966674 -0.245464 + -1.51379 1.12676 -2.02398 -0.0953847 0.923993 -0.370322 + -1.57138 1.1026 -2.02832 -0.51876 0.729184 -0.446295 + -1.59193 1.1027 -1.9941 -0.673649 0.595491 -0.437708 + -1.38557 1.11758 -2.01527 0.041107 0.979143 -0.198972 + -1.39932 1.0879 -2.16447 -0.115984 0.958613 -0.260017 + -1.4908 1.0756 -2.14036 -0.301435 0.856809 -0.418347 + -1.54839 1.05144 -2.14471 -0.489676 0.727995 -0.479833 + -1.38749 1.1293 -1.92677 0.203054 0.973422 -0.105919 + -1.38446 1.12618 -1.96176 -0.235509 0.964317 -0.120943 + -1.33975 1.10917 -2.0521 0.0800733 0.983705 -0.160977 + -1.34634 1.0895 -2.16103 -0.0357518 0.987175 -0.155588 + -1.29729 1.10744 -2.02971 0.135192 0.984821 -0.108859 + -1.3294 1.10126 -2.095 0.0444298 0.988207 -0.146535 + -1.30621 1.0951 -2.14454 -0.058199 0.996153 -0.0655115 + -1.32314 1.08343 -2.21052 -0.17548 0.979131 -0.102519 + -1.31599 1.07477 -2.28572 -0.385102 0.894613 -0.226635 + -1.22043 1.09538 -2.00962 0.228125 0.966454 -0.118005 + -1.28695 1.09954 -2.07262 0.178507 0.97375 -0.141231 + -1.27041 1.09363 -2.08299 0.250065 0.960632 -0.121053 + -1.28136 1.09502 -2.12479 0.0811391 0.9951 0.0565034 + -1.29086 1.09788 -2.18676 -0.187011 0.982159 -0.0197482 + -1.20388 1.08947 -2.01999 0.0361177 0.983928 -0.174876 + -1.22956 1.08229 -2.07395 0.133266 0.984258 -0.116087 + -1.24051 1.08368 -2.11575 0.128339 0.988893 0.0749617 + -1.24092 1.09246 -2.16535 0.0765288 0.978473 0.19166 + -1.26601 1.0978 -2.167 0.0684345 0.990901 0.115898 + -1.16882 1.09152 -2.02854 -0.103222 0.993759 -0.0422805 + -1.19449 1.08434 -2.08249 -0.164808 0.986325 -0.00108854 + -1.20317 1.08477 -2.11703 -0.127966 0.986048 0.106457 + -1.13199 1.10347 -2.11344 -0.2288 0.968857 0.0946935 + -1.14066 1.10399 -2.14793 -0.244385 0.951314 0.187826 + -1.20358 1.09346 -2.16669 -0.125805 0.955117 0.268189 + -1.20362 1.1043 -2.19567 -0.238142 0.889549 0.38986 + -1.23619 1.1012 -2.2137 -0.0647689 0.923384 0.378375 + -1.07193 1.13033 -2.19796 -0.024249 0.945075 0.325953 + -1.14071 1.11474 -2.17695 -0.167989 0.918081 0.359036 + -1.20313 1.12802 -2.23314 -0.239696 0.884025 0.401305 + -1.2357 1.12492 -2.25118 -0.444914 0.880695 0.162567 + -1.26129 1.10663 -2.2153 -0.169965 0.971981 0.162373 + -1.06896 1.10064 -2.09713 0.187102 0.960629 0.205391 + -1.04583 1.10626 -2.12786 0.0440734 0.9459 0.321452 + -1.03487 1.11922 -2.16291 -0.0361829 0.953847 0.298104 + -0.974548 1.14311 -2.24689 0.145567 0.960289 0.238026 + -1.08854 1.16718 -2.28678 -0.0115867 0.958846 0.283689 + -1.13452 1.168 -2.2984 -0.256421 0.949666 0.179949 + -1.11791 1.13115 -2.20958 -0.173721 0.914506 0.365375 + -0.9813 1.08014 -2.07162 0.294152 0.784897 0.545355 + -0.951245 1.1095 -2.11168 0.257384 0.809139 0.52825 + -0.940285 1.12247 -2.14673 0.328488 0.894388 0.303587 + -0.937486 1.13191 -2.21189 0.332247 0.928216 0.167415 + -0.954909 1.05443 -2.06828 0.804878 0.278694 0.523929 + -0.924853 1.0837 -2.10838 0.84013 0.22087 0.495377 + -0.913843 1.10392 -2.15981 0.926368 0.335705 0.17072 + -0.911044 1.11345 -2.22492 0.973042 0.225081 0.0502845 + -0.914023 1.13006 -2.28628 0.918688 0.389675 0.0645338 + -0.974143 1.03556 -2.02221 0.914424 0.118565 0.387003 + -0.950424 1.01234 -2.07959 0.936629 -0.07147 0.342955 + -0.931314 1.03687 -2.12927 0.957038 -0.156572 0.244057 + -0.920304 1.05709 -2.18069 0.992451 -0.122179 -0.010626 + -0.926823 1.07678 -2.2384 0.980467 -0.183094 -0.0718396 + -0.969659 0.993571 -2.03348 0.947023 -0.0449454 0.318006 + -0.952612 0.969858 -2.09181 0.945446 -0.12635 0.300279 + -0.933501 0.994386 -2.14149 0.970845 -0.132088 0.200033 + -0.926781 0.999793 -2.18866 0.987968 -0.15197 -0.0287218 + -0.969799 0.949883 -2.04361 0.952234 -0.0972612 0.289467 + -0.947048 0.922664 -2.13107 0.967483 -0.155459 0.199522 + -0.940327 0.928066 -2.17822 0.982403 -0.103286 0.155618 + -0.9333 1.01957 -2.2463 0.998326 -0.0233835 0.052892 + -0.964235 0.902602 -2.08292 0.951822 -0.118642 0.282771 + -0.977004 0.797029 -2.08306 0.955386 -0.097933 0.27865 + -0.953089 0.796417 -2.1604 0.963165 -0.0675538 0.260289 + -0.923287 0.9505 -2.24968 0.979987 0.0275919 0.19714 + -0.999544 0.779769 -2.01156 0.937617 -0.10709 0.330765 + -1.00511 0.628134 -2.04333 0.895379 -0.263211 0.359189 + -0.9812 0.627521 -2.12066 0.92832 -0.210969 0.306128 + -0.954739 0.613244 -2.20594 0.932296 -0.195628 0.304228 + -0.936049 0.81885 -2.23186 0.969981 -0.0499561 0.237994 + -1.06776 0.515253 -2.03761 0.665001 -0.596063 0.44998 + -1.03642 0.491844 -2.11246 0.727047 -0.546295 0.41589 + -1.00996 0.477562 -2.19773 0.794171 -0.449285 0.40919 + -0.987213 0.44724 -2.26101 0.735311 -0.410456 0.539299 + -0.934241 0.615491 -2.27583 0.918927 -0.11539 0.377172 + -1.16227 0.429164 -2.0737 0.603788 -0.668898 0.433607 + -1.13093 0.405755 -2.14855 0.504108 -0.629814 0.590939 + -1.10118 0.368082 -2.1967 0.581672 -0.573917 0.576434 + -1.07843 0.337759 -2.25998 0.66629 -0.604275 0.436931 + -1.2779 0.348663 -1.99567 0.754261 -0.531393 0.385631 + -1.2501 0.32239 -2.08156 0.73718 -0.521743 0.42936 + -1.21894 0.297052 -2.16027 0.650316 -0.512833 0.560439 + -1.18919 0.259384 -2.20843 0.579813 -0.564258 0.587732 + -1.14869 0.247773 -2.28572 0.681187 -0.608254 0.407444 + -1.3082 0.368428 -1.9001 0.787299 -0.536785 0.30335 + -1.36476 0.21381 -1.97769 0.768104 -0.518164 0.376194 + -1.32614 0.201938 -2.06793 0.754365 -0.510653 0.412513 + -1.29498 0.176688 -2.14659 0.725484 -0.542638 0.423339 + -1.25635 0.164224 -2.23701 0.677059 -0.602807 0.422155 + -1.39505 0.233576 -1.88213 0.76082 -0.542501 0.356153 + -1.48207 0.129597 -1.87343 0.682624 -0.634174 0.363108 + -1.43835 0.122355 -1.96969 0.68794 -0.625107 0.368754 + -1.39973 0.110482 -2.05993 0.670276 -0.656216 0.34657 + -1.35845 0.104011 -2.15432 0.639467 -0.678156 0.362197 + -1.52211 0.139485 -1.78356 0.684211 -0.630122 0.367153 + -1.54867 0.072714 -1.86511 0.542206 -0.784721 0.300376 + -1.50496 0.06539 -1.96142 0.523912 -0.80173 0.287656 + -1.46343 0.05873 -2.06489 0.500826 -0.823959 0.265075 + -1.42215 0.052258 -2.15928 0.501515 -0.825834 0.257838 + -1.56892 0.142187 -1.69044 0.686286 -0.630615 0.362403 + -1.60296 0.071117 -1.76894 0.549244 -0.785052 0.286397 + -1.65748 0.043559 -1.77041 0.153631 -0.987522 0.0346111 + -1.60319 0.045063 -1.86662 0.143323 -0.986081 0.0842797 + -1.55544 0.042446 -1.96028 0.12878 -0.985175 0.113338 + -1.70267 0.06714 -1.57905 0.598631 -0.750262 0.280621 + -1.64978 0.073826 -1.67583 0.589737 -0.751714 0.29519 + -1.70933 0.036278 -1.6716 0.206748 -0.977039 0.0514759 + -1.69304 0.049387 -1.7757 -0.22278 -0.96006 -0.169277 + -1.645 0.053394 -1.87724 -0.25473 -0.957594 -0.134631 + -1.74022 0.073933 -1.48242 0.644235 -0.729187 0.230752 + -1.76223 0.029679 -1.57477 0.337237 -0.937576 0.0849903 + -1.74489 0.042194 -1.67685 -0.191787 -0.960279 -0.202689 + -1.72049 0.064447 -1.80299 -0.35515 -0.905699 -0.231467 + -1.83471 0.025187 -1.36499 0.436433 -0.8833 0.171193 + -1.80415 0.023321 -1.47176 0.381871 -0.917714 0.109436 + -1.79512 0.025566 -1.58045 -0.0922438 -0.985356 -0.143401 + -1.82149 0.041109 -1.60877 -0.442671 -0.849374 -0.287412 + -1.77126 0.05782 -1.70511 -0.296105 -0.915917 -0.270956 + -1.86011 0.040048 -1.25573 0.447953 -0.849213 0.279599 + -1.86908 0.015865 -1.36964 -0.120348 -0.991968 0.0389295 + -1.83704 0.019212 -1.47744 -0.121295 -0.989967 -0.0724768 + -1.79129 0.099711 -1.27507 0.710707 -0.63697 0.298606 + -1.87661 0.072682 -1.14785 0.490809 -0.791054 0.365158 + -1.89448 0.030728 -1.26038 -0.0224925 -0.981886 0.188132 + -1.89584 0.031306 -1.39999 -0.544022 -0.826537 -0.14449 + -1.8638 0.034655 -1.50779 -0.533683 -0.81644 -0.220474 + -1.8892 0.11967 -1.04724 0.491107 -0.73462 0.468132 + -1.91654 0.057357 -1.15051 -0.0664251 -0.937121 0.342626 + -1.94594 0.060274 -1.18596 -0.424581 -0.887641 0.178394 + -1.92388 0.03373 -1.29579 -0.512177 -0.858808 -0.0111148 + -1.82039 0.18254 -1.07113 0.715962 -0.563761 0.411792 + -1.90011 0.183815 -0.946342 0.40796 -0.714354 0.568566 + -1.92914 0.104254 -1.04994 -0.0017037 -0.859972 0.510339 + -1.90442 0.264828 -0.848658 0.407666 -0.684278 0.604626 + -1.93193 0.175895 -0.951423 -0.126213 -0.782923 0.609182 + -1.96125 0.164999 -0.98295 -0.4823 -0.704669 0.520412 + -1.95845 0.09336 -1.08147 -0.445979 -0.814433 0.371216 + -1.83755 0.320778 -0.885367 0.743809 -0.490286 0.454277 + -1.90238 0.345574 -0.758916 0.252848 -0.654547 0.712486 + -1.93624 0.256906 -0.853739 -0.186993 -0.718289 0.670145 + -1.83552 0.40161 -0.795576 0.757055 -0.449723 0.473937 + -1.9005 0.439095 -0.683499 0.22376 -0.574554 0.787286 + -1.93979 0.349147 -0.769904 -0.397779 -0.591454 0.701395 + -1.96402 0.330959 -0.803601 -0.719051 -0.454278 0.525925 + -1.96047 0.238717 -0.887436 -0.529062 -0.635927 0.561863 + -1.73691 0.605799 -0.81344 0.879357 -0.306427 0.364464 + -1.83398 0.488196 -0.724546 0.757838 -0.400816 0.514809 + -1.89473 0.542755 -0.617445 0.266518 -0.504582 0.821198 + -1.9379 0.44258 -0.694537 -0.441434 -0.515706 0.734291 + -1.73189 0.688842 -0.755276 0.882044 -0.271597 0.385011 + -1.82821 0.591858 -0.658491 0.746126 -0.372853 0.551613 + -1.89444 0.652219 -0.557439 0.223468 -0.454549 0.862234 + -1.93576 0.547198 -0.624538 -0.425058 -0.461598 0.778622 + -1.69835 0.868144 -0.783033 0.971882 0.0827049 0.220466 + -1.73465 0.775569 -0.692687 0.899378 -0.205636 0.385789 + -1.83097 0.678666 -0.59585 0.702944 -0.354677 0.616502 + -1.89441 0.764101 -0.504826 0.211403 -0.429864 0.877796 + -1.93547 0.65666 -0.564533 -0.489309 -0.39302 0.778532 + -1.72244 0.926738 -0.699321 0.969121 0.0967503 0.226811 + -1.75873 0.834162 -0.608975 0.856447 -0.241278 0.456381 + -1.83094 0.790462 -0.543286 0.675589 -0.349146 0.649366 + -1.90827 0.87039 -0.446126 0.0923059 -0.552086 0.828662 + -1.94212 0.77194 -0.513802 -0.504601 -0.426751 0.750508 + -1.76018 1.08757 -0.733287 0.979458 0.113183 0.166886 + -1.74758 0.980684 -0.62036 0.954768 0.111829 0.275521 + -1.78124 0.914346 -0.53626 0.856383 -0.147809 0.494732 + -1.85344 0.870648 -0.470571 0.553392 -0.437721 0.708631 + -1.74518 1.18812 -0.801049 0.879133 -0.139851 0.455596 + -1.77403 1.13592 -0.650637 0.969242 0.107163 0.221555 + -1.78834 1.03441 -0.536214 0.936855 0.102752 0.334281 + -1.822 0.968071 -0.452114 0.79048 -0.269115 0.550198 + -1.88088 0.964924 -0.39846 0.502809 -0.456807 0.733832 + -1.74325 1.34093 -0.758132 0.887192 0.0441054 0.459288 + -1.75903 1.23639 -0.718449 0.962019 -0.0014114 0.272979 + -1.78886 1.28967 -0.649536 0.944103 0.0596126 0.324217 + -1.80398 1.18699 -0.568694 0.962772 0.0990288 0.251521 + -1.81829 1.08548 -0.45427 0.932449 0.0646542 0.35547 + -1.70677 1.38786 -0.829211 0.871686 0.241045 0.426687 + -1.7464 1.44765 -0.780767 0.896455 0.259433 0.359254 + -1.77308 1.39422 -0.689219 0.904058 0.108271 0.41347 + -1.70032 1.44373 -0.903383 0.876662 0.307219 0.370242 + -1.74034 1.49789 -0.858394 0.866347 0.341449 0.364492 + -1.78704 1.49931 -0.716844 0.874499 0.342764 0.343167 + -1.81373 1.44579 -0.625345 0.924458 0.191136 0.329916 + -1.66357 1.47014 -0.99693 0.838241 0.195143 0.509187 + -1.70359 1.5243 -0.951933 0.829102 0.26667 0.491403 + -1.78188 1.54323 -0.805916 0.828395 0.447641 0.336719 + -1.82859 1.54464 -0.664366 0.848237 0.439456 0.295589 + -1.66809 1.57701 -1.02522 0.792729 0.263704 0.549583 + -1.68527 1.62043 -1.02003 0.763601 0.279338 0.582137 + -1.72078 1.56773 -0.946754 0.786063 0.263578 0.559135 + -1.74954 1.58263 -0.912958 0.807513 0.344869 0.478527 + -1.83001 1.59114 -0.762101 0.826915 0.459996 0.323443 + -1.64934 1.63786 -1.08662 0.833499 0.27127 0.481344 + -1.67123 1.69079 -1.07069 0.812778 0.251001 0.525729 + -1.70927 1.65192 -1.00797 0.766288 0.2652 0.585211 + -1.73804 1.66673 -0.974226 0.80212 0.212312 0.558147 + -1.79767 1.63046 -0.8692 0.811469 0.339352 0.475772 + -1.6636 1.75882 -1.12833 0.940747 0.158885 0.299585 + -1.67721 1.82691 -1.10747 0.904157 0.104037 0.414339 + -1.69524 1.72227 -1.05862 0.791299 0.191216 0.58076 + -1.71156 1.78375 -1.0419 0.836549 0.109677 0.536802 + -1.75646 1.70307 -0.956964 0.800844 0.182837 0.57028 + -1.65796 1.81516 -1.16071 0.960048 0.102709 0.260307 + -1.67156 1.88334 -1.1398 0.949171 0.0938131 0.300456 + -1.69353 1.88847 -1.0907 0.908299 0.0581232 0.414264 + 1.09292 1.01632 -1.59089 0.36811 -0.929741 0.00873225 + 1.24544 1.07804 -1.44958 0.368108 -0.929742 0.00873484 + 1.1173 1.02629 -1.55774 0.36811 -0.929741 0.00873143 + -1.09291 1.01632 -1.59089 -0.367616 -0.92993 0.00940683 + -1.11728 1.02629 -1.55775 -0.367616 -0.92993 0.00940681 + -1.24542 1.07804 -1.44959 -0.367617 -0.92993 0.00940625 + 1.93239 2.72679 -0.741506 -0.916 0.0382739 0.399347 + 1.86777 2.79456 -0.863879 0.112702 0.880319 0.4608 + 1.82515 2.77478 -0.886633 -0.729584 0.436691 0.526317 + 1.80133 2.74089 -0.909921 -0.892707 0.165894 0.41899 + 1.81726 2.72235 -0.875219 -0.845523 0.175199 0.504377 + 1.86198 2.8063 -0.896229 0.50297 0.83669 -0.216727 + 1.85923 2.80544 -0.885537 -0.0592395 0.92662 0.371303 + 1.81661 2.78567 -0.908291 -0.743352 0.45415 0.491097 + 1.79003 2.7526 -0.944002 -0.907992 0.158258 0.38795 + 1.78061 2.68483 -0.955633 -0.949351 0.137416 0.282574 + 1.82875 2.78366 -0.959199 0.561422 0.544702 -0.62298 + 1.80795 2.79902 -0.949217 -0.187596 0.917246 -0.35138 + 1.8052 2.79816 -0.938525 -0.646271 0.729673 0.223407 + 1.77862 2.76509 -0.974238 -0.905423 0.40769 0.118315 + 1.80458 2.75174 -1.00111 0.472688 0.47962 -0.739278 + 1.78378 2.76702 -0.991191 -0.396033 0.746265 -0.535019 + 1.78383 2.69045 -1.04735 0.444954 0.377498 -0.812103 + 1.76305 2.71127 -1.03682 -0.47726 0.585845 -0.654987 + 1.75789 2.70925 -1.01992 -0.963661 0.259097 0.0650122 + 1.7693 2.69654 -0.989714 -0.936065 0.056336 0.347288 + 1.76503 2.61621 -1.08778 0.330892 0.303752 -0.893446 + 1.74425 2.63695 -1.0773 -0.626099 0.41643 -0.659232 + 1.74104 2.63256 -1.0577 -0.984457 0.129693 0.118423 + 1.75246 2.61995 -1.02745 -0.950653 0.0442371 0.307086 + 1.76075 2.60809 -0.991314 -0.972834 0.0960788 0.210627 + 1.74268 2.5277 -1.12287 0.0477392 0.320426 -0.94607 + 1.7312 2.54263 -1.10692 -0.809607 0.320956 -0.491452 + 1.728 2.53824 -1.08732 -0.985972 0.104142 0.130439 + 1.73941 2.52038 -1.0578 -0.950493 0.0418529 0.307916 + 1.7477 2.50862 -1.02162 -0.978792 0.0827069 0.187419 + 1.72818 2.43651 -1.15392 0.0810189 0.330372 -0.940367 + 1.7167 2.45152 -1.13792 -0.854077 0.287388 -0.433546 + 1.7122 2.432 -1.11812 -0.981024 0.0939114 0.169625 + 1.72362 2.41406 -1.08864 -0.950572 0.0560772 0.305399 + 1.73003 2.38788 -1.0561 -0.974624 0.0962894 0.202078 + 1.77005 2.3569 -1.13484 0.713429 0.144014 -0.685769 + 1.72075 2.34607 -1.17588 0.391001 0.21588 -0.894714 + 1.70418 2.37334 -1.1703 -0.650951 0.280336 -0.70546 + 1.69969 2.35382 -1.15051 -0.990737 0.111569 0.0774106 + 1.76262 2.26646 -1.1568 0.658389 0.163777 -0.734643 + 1.71276 2.24476 -1.2068 0.388641 0.245919 -0.887965 + 1.6962 2.27211 -1.20117 -0.564513 0.2812 -0.776049 + 1.68711 2.23536 -1.18593 -0.993446 0.0838867 -0.0776394 + 1.70018 2.27691 -1.12029 -0.973089 0.0769613 0.217197 + 1.75792 2.17579 -1.18895 0.667364 0.202865 -0.716569 + 1.7067 2.15597 -1.23461 0.23055 0.28228 -0.931217 + 1.69337 2.12496 -1.24211 -0.648277 0.243186 -0.721525 + 1.68429 2.08831 -1.22682 -0.981199 0.119198 -0.151789 + 1.68761 2.15846 -1.15573 -0.995449 0.0538875 0.0785941 + 1.8141 1.95582 -1.19674 0.771757 0.171607 -0.612325 + 1.75186 2.08692 -1.21682 0.642961 0.212671 -0.73578 + 1.70639 2.07934 -1.25929 0.253922 0.304421 -0.918069 + 1.69305 2.04842 -1.26673 -0.0811285 0.336144 -0.93831 + 1.68143 1.95297 -1.29961 -0.704906 0.297907 -0.643707 + 1.88335 1.79572 -1.12164 0.871595 0.126337 -0.473668 + 1.80276 1.87013 -1.23573 0.775056 0.188371 -0.603162 + 1.74052 2.00132 -1.25576 0.665366 0.235785 -0.708303 + 1.70175 1.99203 -1.29306 0.152272 0.337195 -0.929039 + 1.69013 1.89658 -1.32594 0.0329159 0.343605 -0.938537 + 1.95992 1.51335 -1.04196 0.932547 0.176951 -0.314714 + 1.87763 1.70717 -1.16687 0.873451 0.157859 -0.460612 + 1.7962 1.78133 -1.27253 0.774396 0.200558 -0.600073 + 1.73589 1.91402 -1.28954 0.632478 0.238087 -0.737079 + 2.02186 1.46779 -0.887253 0.94337 0.137798 -0.301768 + 2.02129 1.37888 -0.937849 0.946085 0.178483 -0.27031 + 1.96479 1.42748 -1.09262 0.919534 0.202505 -0.33682 + 1.87107 1.61838 -1.20367 0.859476 0.181911 -0.477713 + 1.79399 1.69277 -1.30653 0.783743 0.223034 -0.579657 + 2.06017 1.29964 -0.841612 0.963235 0.135786 -0.231821 + 2.05816 1.21379 -0.905509 0.966162 0.135598 -0.219419 + 2.02617 1.29301 -0.988521 0.949195 0.178161 -0.2594 + 1.96847 1.33642 -1.13131 0.913559 0.196022 -0.356349 + 1.87474 1.52722 -1.2424 0.870186 0.218854 -0.441452 + 2.08967 1.35177 -0.684508 0.980638 0.0678055 -0.183716 + 2.08309 1.26324 -0.753163 0.982409 0.074765 -0.171124 + 2.08108 1.17739 -0.817061 0.988014 0.0492373 -0.146304 + 2.05549 1.1299 -0.964603 0.971445 0.0808971 -0.223049 + 2.02351 1.20911 -1.04761 0.945827 0.155188 -0.285182 + 2.10357 1.35566 -0.589833 0.985757 0.040358 -0.163258 + 2.09699 1.26712 -0.658488 0.993712 -0.000132064 -0.111969 + 2.08871 1.18155 -0.736669 0.996009 -0.00997451 -0.0886932 + 2.07962 1.08929 -0.804875 0.995133 -0.077164 -0.0612927 + 2.07198 1.08521 -0.885208 0.990669 -0.0184381 -0.135034 + 2.14132 1.44162 -0.358728 0.979014 -0.170212 -0.112072 + 2.1263 1.3696 -0.449178 0.990215 -0.0964402 -0.100859 + 2.10602 1.28468 -0.5331 0.987303 -0.156358 -0.0280198 + 2.09775 1.19911 -0.611281 0.994332 -0.105224 -0.0152324 + 2.16917 1.53095 -0.296056 0.970738 -0.0371363 -0.237253 + 2.17486 1.49982 -0.209326 0.956756 -0.283565 -0.064881 + 2.14119 1.40637 -0.285263 0.974198 -0.217438 -0.0604918 + 2.12091 1.32145 -0.369194 0.967122 -0.253942 0.0137075 + 2.09766 1.23015 -0.449251 0.979001 -0.202001 0.0274191 + 2.17995 1.62481 -0.232215 0.924273 -0.00134944 -0.381731 + 2.2027 1.58923 -0.146599 0.946364 -0.21384 -0.242214 + 2.23459 1.63726 -0.042976 0.871473 -0.480251 0.0994638 + 2.18673 1.53689 -0.099744 0.89042 -0.438547 0.121769 + 2.15307 1.44336 -0.175734 0.923469 -0.377588 0.0680578 + 2.13064 1.67626 -0.328739 0.908047 0.137683 -0.395594 + 2.17853 1.69854 -0.236123 0.852335 0.0211165 -0.52257 + 2.20713 1.69783 -0.193899 0.838437 -0.0222997 -0.544542 + 2.25308 1.68695 -0.118641 0.913854 -0.256464 -0.314797 + 2.28498 1.73488 -0.015069 0.863761 -0.501686 -0.0472033 + 2.08649 1.75651 -0.414333 0.941138 0.149615 -0.303108 + 2.1181 1.74126 -0.341513 0.899235 0.173892 -0.401419 + 2.166 1.76363 -0.248856 0.814259 0.2293 -0.533295 + 2.25276 1.80374 -0.126729 0.74387 0.255286 -0.617646 + 2.28136 1.80294 -0.084555 0.80767 -0.122768 -0.576712 + 2.1182 1.78343 -0.313159 0.84332 0.437863 -0.311589 + 2.14095 1.79924 -0.241539 0.524803 0.72091 -0.452627 + 2.17356 1.80731 -0.204712 0.475833 0.696268 -0.537395 + 2.17591 1.86453 -0.096423 -0.0647697 0.957956 -0.27951 + 2.20852 1.87268 -0.059546 0.0192487 0.925546 -0.378146 + 2.26032 1.84742 -0.082585 0.339512 0.733387 -0.588961 + 2.30147 1.86921 -0.036331 0.147606 0.602991 -0.783973 + 2.31679 1.83824 -0.046093 0.406966 0.180917 -0.895348 + 2.15513 1.8594 -0.07235 -0.325661 0.872809 -0.363523 + 2.24968 1.89447 -0.013292 0.0940125 0.61456 -0.783248 + 2.33587 1.87955 -0.031042 0.497156 0.502094 -0.707628 + 2.35118 1.84867 -0.040755 0.740308 0.0524998 -0.670215 + 2.04625 1.81044 -0.084535 -0.29816 0.796579 -0.525892 + 2.14399 1.89124 -0.011488 -0.426955 0.672222 -0.604836 + 2.15986 1.95106 0.0341 -0.269385 0.585088 -0.764921 + 2.19351 1.9624 0.028866 -0.19832 0.533223 -0.822401 + 2.23918 1.92694 0.002671 0.000354123 0.505196 -0.863005 + 1.98549 1.76989 -0.0955 -0.587841 0.68839 -0.424925 + 2.06493 1.93633 0.036612 -0.195793 0.646177 -0.737644 + 2.08081 1.99615 0.0822 -0.248424 0.504436 -0.82694 + 2.10964 2.04865 0.097671 -0.238838 0.542146 -0.805627 + 2.14329 2.05998 0.092438 -0.250881 0.672396 -0.696378 + 1.96656 1.69425 -0.164895 -0.762686 0.585145 -0.275527 + 1.90108 1.7297 -0.05469 -0.416517 0.642807 -0.642894 + 2.00417 1.89569 0.025602 -0.345405 0.624199 -0.700765 + 1.9399 1.94676 0.091551 -0.284117 0.614465 -0.73601 + 2.03839 2.02387 0.109794 -0.271635 0.449645 -0.850902 + 1.95085 1.65504 -0.247183 -0.878572 0.446154 -0.170463 + 1.88215 1.65406 -0.124082 -0.780122 0.366224 -0.507238 + 1.85621 1.7471 -0.020024 -0.479762 0.468106 -0.742095 + 1.95931 1.91309 0.060267 -0.320211 0.539667 -0.778604 + 1.97722 1.697 -0.383658 -0.947737 0.305239 0.0928613 + 1.94178 1.60443 -0.321116 -0.898011 0.439216 -0.0257884 + 1.90366 1.58585 -0.184941 -0.92423 0.210981 -0.318253 + 1.92188 1.68619 -0.662742 -0.868341 0.413427 0.273975 + 1.94453 1.65515 -0.450362 -0.889792 0.427568 0.15955 + 1.90903 1.55894 -0.395126 -0.91421 0.39655 0.0834777 + 1.89458 1.53524 -0.258873 -0.954281 0.295487 -0.045118 + 1.88155 1.734 -0.804341 -0.794698 0.347802 0.497482 + 1.87312 1.63301 -0.700431 -0.829292 0.472889 0.297742 + 1.91178 1.60975 -0.524332 -0.903729 0.362156 0.228289 + 1.88306 1.51248 -0.474651 -0.891369 0.404275 0.204997 + 1.88468 1.48434 -0.340922 -0.971865 0.229913 0.0511796 + 1.92426 1.76755 -0.761852 -0.854154 0.29644 0.427252 + 1.81558 1.806 -0.914846 -0.740293 0.142317 0.657048 + 1.8328 1.68082 -0.84203 -0.808046 0.323488 0.492359 + 1.83001 1.59114 -0.762101 -0.826089 0.462812 0.321531 + 1.86867 1.56779 -0.586052 -0.844081 0.45369 0.285819 + 1.85829 1.83954 -0.872349 -0.723624 0.176787 0.667169 + 1.82242 1.95205 -0.922019 -0.597101 0.00831807 0.802123 + 1.78843 2.05003 -0.946326 -0.823241 -0.0835126 0.561516 + 1.77205 1.97564 -0.98287 -0.795458 0.0273482 0.605391 + 1.79158 1.75343 -0.929793 -0.779573 0.181061 0.599569 + 1.89937 1.94763 -0.852761 -0.777405 -0.0751455 0.624496 + 1.78249 2.30397 -0.901962 -0.855789 -0.0775616 0.511478 + 1.76337 2.3391 -0.950211 -0.922985 -0.04299 0.382427 + 1.74699 2.26462 -0.986805 -0.885803 -0.0371201 0.462575 + 1.77868 2.43366 -0.894787 -0.862155 -0.034492 0.505469 + 1.75957 2.4688 -0.943045 -0.945401 0.024567 0.324983 + 1.73501 2.3795 -1.01098 -0.96367 0.0425334 0.263687 + 1.72145 2.09212 -1.04902 -0.872722 -0.00981404 0.488119 + 1.74805 1.92307 -0.997825 -0.782443 0.0616857 0.61966 + 1.79348 2.48173 -0.873041 -0.788227 0.0169487 0.615151 + 1.77315 2.56887 -0.917576 -0.924316 0.0714179 0.374887 + 1.76627 2.60023 -0.951096 -0.966713 0.117521 0.227277 + 1.75268 2.50015 -0.976557 -0.977098 0.084948 0.195096 + 1.78795 2.61693 -0.89583 -0.881208 0.0900346 0.464075 + 1.78612 2.67697 -0.915407 -0.917066 0.240604 0.317962 + -0.978323 1.56018 -2.29297 -0.735672 0.0373439 0.676308 + -0.957668 1.56216 -2.26916 -0.0867878 0.996198 -0.00755631 + -0.921928 1.56547 -2.2434 -0.595457 -0.177077 0.783629 + -0.995792 1.57698 -2.3158 -0.762851 -0.148632 0.629259 + -1.02102 1.49003 -2.36325 -0.778307 -0.263573 0.569883 + -0.986659 1.48947 -2.32574 -0.652615 -0.40069 0.643071 + -0.966005 1.49145 -2.30192 -0.660713 -0.427226 0.6172 + -0.957668 1.56216 -2.26916 -0.662956 -0.188835 0.724452 + -0.924466 1.62071 -2.22722 -0.605303 -0.230266 0.761962 + -0.987141 1.64227 -2.27943 -0.709784 -0.236276 0.663611 + -1.05303 1.60998 -2.37494 -0.902174 -0.190409 0.387074 + -1.03849 1.50683 -2.38608 -0.952761 -0.158236 0.259244 + -1.02274 1.45627 -2.3887 -0.703906 -0.528012 0.475099 + -0.849891 1.58028 -2.18976 -0.503663 -0.297231 0.811158 + -0.928917 1.65604 -2.22124 -0.63435 -0.211001 0.743692 + -0.991591 1.6776 -2.27344 -0.718364 -0.167692 0.675153 + -1.04438 1.67527 -2.33857 -0.839388 -0.127089 0.528465 + -0.847353 1.52504 -2.20593 -0.332792 -0.401038 0.853474 + -0.803225 1.55777 -2.17385 0.0172905 -0.462384 0.886511 + -0.84721 1.6801 -2.14508 -0.474003 -0.234857 0.848624 + -0.843826 1.74823 -2.12572 -0.536354 -0.115995 0.835984 + -0.925533 1.72417 -2.20189 -0.656415 -0.142547 0.74081 + -0.902662 1.50126 -2.24224 -0.434564 -0.472666 0.766642 + -0.858232 1.50344 -2.22114 -0.267051 -0.57633 0.772352 + -0.820847 1.48452 -2.22826 0.0749807 -0.772945 0.630027 + -0.809967 1.50612 -2.21306 0.117651 -0.606083 0.786652 + -0.938402 1.49795 -2.268 -0.586322 -0.401596 0.703525 + -0.929985 1.47636 -2.28303 -0.154777 -0.895837 0.416557 + -0.916757 1.47828 -2.28659 -0.0562905 -0.980846 0.186472 + -0.895943 1.47159 -2.27488 -0.362217 -0.866165 0.344319 + -0.851514 1.47378 -2.25377 -0.152115 -0.848139 0.507466 + -0.957587 1.46986 -2.31696 -0.242345 -0.862889 0.443499 + -0.923997 1.47581 -2.32931 0.213766 -0.956467 0.198684 + -0.91077 1.47773 -2.33286 0.146659 -0.98545 0.0858982 + -0.904677 1.47752 -2.33118 -0.127075 -0.988903 -0.0769603 + -0.883863 1.47083 -2.31947 -0.463197 -0.878129 -0.11974 + -0.965733 1.4575 -2.3428 -0.0335626 -0.810173 0.585229 + -0.932143 1.46345 -2.35515 0.405092 -0.850522 0.33543 + -0.892145 1.48023 -2.36953 0.239076 -0.968836 0.0648013 + -0.886052 1.48002 -2.36785 -0.267837 -0.943374 -0.195724 + -0.988383 1.4557 -2.35119 -0.419168 -0.648732 0.635173 + -0.962566 1.42692 -2.38639 0.211574 -0.901396 0.377786 + -0.945631 1.42706 -2.41825 0.440494 -0.889389 0.122277 + -0.915207 1.4636 -2.38701 0.523848 -0.807688 0.270598 + -0.985216 1.42513 -2.39478 -0.259437 -0.888376 0.378788 + -0.9951 1.42087 -2.41695 -0.331484 -0.919492 0.211313 + -0.978751 1.41416 -2.43431 -0.00302993 -0.999401 0.0344635 + -0.934111 1.43808 -2.46427 0.461561 -0.883787 -0.076694 + -0.88349 1.46958 -2.43114 0.521108 -0.845238 0.118399 + -1.03263 1.45201 -2.41087 -0.884312 -0.430984 0.17957 + -1.02792 1.43867 -2.43989 -0.804007 -0.571435 -0.164423 + -1.01157 1.43196 -2.45725 -0.557874 -0.766235 -0.318841 + -0.967231 1.42517 -2.48034 0.0462574 -0.893403 -0.446869 + -0.908384 1.45247 -2.48527 0.477693 -0.810585 -0.338766 + -1.03378 1.49348 -2.41509 -0.991537 -0.129274 0.011892 + -1.04434 1.51289 -2.45419 -0.974827 -0.205479 -0.0865535 + -1.02199 1.45065 -2.47566 -0.771623 -0.543072 -0.331165 + -0.977657 1.44386 -2.49875 -0.2131 -0.728745 -0.650784 + -0.918406 1.46792 -2.50923 0.456538 -0.66701 -0.588788 + -1.06358 1.62938 -2.41404 -0.995578 -0.0855496 -0.0388107 + -1.05483 1.64907 -2.44998 -0.93666 0.0643339 -0.344282 + -1.04279 1.55116 -2.48648 -0.930687 -0.0742056 -0.35821 + -1.02045 1.48892 -2.50796 -0.762795 -0.378169 -0.52453 + -1.06608 1.70247 -2.37884 -0.987975 0.0566257 0.143871 + -1.05732 1.72216 -2.41478 -0.929807 0.242186 -0.277137 + -1.0388 1.73244 -2.44884 -0.752109 0.349376 -0.55881 + -1.03766 1.66368 -2.47911 -0.738379 0.212933 -0.639887 + -1.02563 1.56577 -2.51562 -0.787121 0.064665 -0.6134 + -1.05047 1.74166 -2.34976 -0.934652 0.113055 0.337112 + -1.05161 1.76093 -2.37974 -0.934433 0.345113 -0.0879335 + -1.0331 1.77121 -2.41381 -0.791675 0.467505 -0.393306 + -1.02877 1.71446 -2.30948 -0.818322 -0.0733619 0.570059 + -1.01603 1.77596 -2.28519 -0.818803 -0.0235674 0.573591 + -1.03164 1.79677 -2.31524 -0.929254 0.133601 0.344439 + -1.03278 1.81604 -2.34523 -0.936369 0.35019 -0.0241015 + -0.978848 1.7391 -2.24915 -0.709422 -0.115477 0.695259 + -0.965064 1.835 -2.2212 -0.730807 -0.0905793 0.676548 + -0.989996 1.85156 -2.25103 -0.828143 0.0130016 0.560365 + -1.0056 1.87237 -2.28108 -0.929679 0.204244 0.306564 + -0.911749 1.82007 -2.17394 -0.640784 -0.149391 0.753046 + -0.931095 1.93246 -2.16816 -0.732297 -0.11865 0.670569 + -0.956027 1.94903 -2.19799 -0.846892 0.010513 0.531661 + -0.965719 1.96289 -2.21997 -0.932072 0.218976 0.288601 + -1.00478 1.88291 -2.30544 -0.908991 0.414745 -0.0414974 + -0.842307 1.78971 -2.12691 -0.559307 -0.0968779 0.82328 + -0.822741 1.87667 -2.09111 -0.526007 -0.246633 0.813934 + -0.892183 1.90702 -2.13813 -0.64141 -0.186451 0.744197 + -0.887574 2.04071 -2.0992 -0.731235 -0.129121 0.669793 + -0.794844 1.75036 -2.09994 -0.0264171 -0.202189 0.97899 + -0.793324 1.79183 -2.10113 -0.0250974 -0.145366 0.98906 + -0.785415 1.86019 -2.07757 -0.00816341 -0.370813 0.928672 + -0.803301 1.97889 -2.0436 -0.537974 -0.279342 0.795331 + -0.848662 2.01527 -2.06917 -0.64428 -0.211466 0.734973 + -0.78226 1.67854 -2.13192 0.250986 -0.265461 0.93088 + -0.770512 1.76357 -2.10983 0.579467 -0.0807575 0.810985 + -0.772874 1.7934 -2.11132 0.600408 -0.105542 0.792698 + -0.764965 1.86176 -2.08775 0.593107 -0.374126 0.71292 + -0.800543 1.65759 -2.12917 0.00205592 -0.182778 0.983152 + -0.760813 1.57338 -2.19175 0.562037 -0.405248 0.721033 + -0.757929 1.69175 -2.14181 0.651087 -0.240095 0.720028 + -0.733084 1.70668 -2.17051 0.817202 -0.157824 0.554322 + -0.742735 1.77732 -2.13783 0.766605 -0.038325 0.640974 + -0.779096 1.55243 -2.18899 0.50512 -0.496959 0.70561 + -0.785838 1.50078 -2.2282 0.411992 -0.688119 0.59729 + -0.763128 1.50201 -2.24492 0.481373 -0.692752 0.537005 + -0.729885 1.58097 -2.2126 0.696314 -0.353577 0.624604 + -0.705041 1.5959 -2.2413 0.917405 -0.187347 0.351096 + -0.81444 1.45243 -2.30017 0.178553 -0.918884 0.35181 + -0.79173 1.45366 -2.31689 0.393858 -0.891762 0.222792 + -0.732201 1.5096 -2.26577 0.71652 -0.593496 0.366554 + -0.727552 1.50758 -2.29468 0.80966 -0.579632 0.0920732 + -0.697095 1.60853 -2.27505 0.970974 -0.149193 0.186951 + -0.845107 1.44169 -2.32568 -0.230677 -0.965962 0.11707 + -0.787081 1.45164 -2.3458 0.470087 -0.880941 0.0544246 + -0.719606 1.52022 -2.32843 0.817049 -0.561168 0.132371 + -0.869282 1.46545 -2.36408 -0.595181 -0.753412 -0.279517 + -0.830525 1.43631 -2.3703 -0.164754 -0.969015 -0.184027 + -0.77798 1.45808 -2.36581 0.548944 -0.83444 0.0486847 + -0.838544 1.47036 -2.40602 -0.475844 -0.68906 -0.546598 + -0.821425 1.44275 -2.39031 -0.140088 -0.908503 -0.393697 + -0.772387 1.45834 -2.39081 0.45948 -0.888067 0.0146243 + -0.714012 1.52048 -2.35343 0.769923 -0.622796 0.139081 + -0.696508 1.54728 -2.34911 0.957258 -0.288905 0.0138323 + -0.855315 1.48492 -2.40979 -0.309046 -0.880299 -0.359949 + -0.837786 1.48875 -2.43245 -0.0879896 -0.845276 -0.527035 + -0.819265 1.478 -2.42592 -0.202526 -0.646646 -0.735413 + -0.802146 1.45039 -2.41021 0.00245151 -0.858773 -0.512351 + -0.739204 1.4759 -2.4068 0.691214 -0.710953 -0.129494 + -0.860427 1.48621 -2.41366 0.200966 -0.979055 -0.032627 + -0.842899 1.49004 -2.43632 0.260622 -0.942107 -0.210977 + -0.839337 1.49281 -2.43923 0.298526 -0.896703 -0.326812 + -0.833691 1.49043 -2.4341 -0.00796357 -0.763876 -0.645313 + -0.815169 1.47968 -2.42758 -0.105872 -0.607902 -0.786922 + -0.857762 1.48397 -2.45214 0.511881 -0.858352 -0.0347629 + -0.8542 1.48674 -2.45505 0.515106 -0.849605 -0.113297 + -0.829639 1.49942 -2.45521 0.302403 -0.935282 -0.183849 + -0.821802 1.49881 -2.44856 0.105673 -0.922353 -0.371616 + -0.816156 1.49644 -2.44343 -0.0263318 -0.810131 -0.585658 + -0.852274 1.49029 -2.4762 0.49115 -0.793029 -0.360384 + -0.827713 1.50296 -2.47636 0.420363 -0.700806 -0.576338 + -0.799746 1.50878 -2.47087 0.361619 -0.634493 -0.683118 + -0.791909 1.50818 -2.46422 0.280423 -0.689507 -0.667789 + -0.862296 1.50574 -2.50017 0.449318 -0.395313 -0.80115 + -0.823302 1.53265 -2.48298 0.410897 -0.153139 -0.898728 + -0.795335 1.53847 -2.47749 0.307128 -0.0294234 -0.951213 + -0.775175 1.53447 -2.46828 0.392769 -0.102806 -0.913873 + -0.783568 1.50665 -2.4605 0.132566 -0.583799 -0.801002 + -0.873375 1.55246 -2.51634 0.601034 -0.153906 -0.784265 + -0.834381 1.57937 -2.49915 0.524368 -0.0215471 -0.851219 + -0.787825 1.60187 -2.46326 0.475107 0.090796 -0.875231 + -0.767666 1.59787 -2.45405 0.634915 0.211303 -0.743124 + -0.766835 1.53293 -2.46456 0.568836 -0.0943859 -0.817017 + -0.898718 1.51097 -2.53465 0.750577 -0.39981 -0.526104 + -0.906936 1.54814 -2.54853 0.666973 -0.145621 -0.730713 + -0.881593 1.58963 -2.53022 0.624693 0.0651682 -0.778146 + -0.856116 1.63222 -2.50569 0.509991 0.178057 -0.841549 + -0.80956 1.65472 -2.4698 0.570199 0.200911 -0.79656 + -0.94644 1.46103 -2.5276 0.198247 -0.852294 -0.484038 + -0.926752 1.50408 -2.55302 0.524936 -0.451182 -0.721718 + -0.938077 1.51208 -2.56524 0.223468 -0.262323 -0.938749 + -0.91826 1.55614 -2.56075 0.399215 0.0428475 -0.915856 + -0.969331 1.45617 -2.51773 -0.152062 -0.801907 -0.577774 + -0.965799 1.50478 -2.56146 -0.191097 -0.30805 -0.93198 + -1.01213 1.50124 -2.52694 -0.737201 -0.30711 -0.601845 + -0.988691 1.49992 -2.55159 -0.499773 -0.35886 -0.788319 + -0.971973 1.56406 -2.55641 -0.321586 0.181791 -0.929265 + -0.944251 1.57137 -2.56018 -0.0446945 0.23323 -0.971394 + -0.911747 1.64053 -2.53192 0.30084 0.302379 -0.904468 + -1.00219 1.56445 -2.54027 -0.600184 0.143902 -0.786811 + -0.972498 1.66507 -2.51892 -0.339214 0.34905 -0.873555 + -0.937738 1.65575 -2.53135 -0.0166662 0.352514 -0.935658 + -0.886271 1.68311 -2.50739 0.35738 0.274521 -0.892702 + -1.00271 1.66546 -2.50279 -0.500502 0.310935 -0.807971 + -0.964559 1.72626 -2.49555 -0.276415 0.374294 -0.885155 + -0.929799 1.71694 -2.50798 0.0111196 0.449004 -0.893461 + -0.862776 1.70508 -2.49231 0.432013 0.303466 -0.849278 + -1.00386 1.73423 -2.47251 -0.489415 0.318101 -0.811963 + -0.962286 1.76365 -2.48349 -0.200547 0.42083 -0.884694 + -0.906304 1.73891 -2.4929 0.207584 0.432738 -0.877295 + -0.827699 1.73417 -2.4562 0.525142 0.363281 -0.76958 + -1.00159 1.77161 -2.46045 -0.540087 0.462084 -0.703409 + -0.987716 1.82698 -2.4258 -0.574031 0.540817 -0.614822 + -0.95015 1.82306 -2.44983 -0.17298 0.542358 -0.822147 + -0.894168 1.79832 -2.45924 0.261396 0.454127 -0.851728 + -0.833309 1.79061 -2.43007 0.507059 0.401788 -0.762534 + -1.01923 1.82657 -2.37916 -0.805096 0.481279 -0.346685 + -0.99123 1.89345 -2.33937 -0.814683 0.50723 -0.281085 + -0.968212 1.90539 -2.37411 -0.614985 0.575999 -0.538534 + -0.930646 1.90147 -2.39814 -0.214773 0.59214 -0.776687 + -0.954505 1.98373 -2.26926 -0.808143 0.543176 -0.227737 + -0.931487 1.99567 -2.304 -0.615686 0.644897 -0.452812 + -0.904952 1.99817 -2.32179 -0.254399 0.684437 -0.683247 + -0.890894 1.89819 -2.40346 0.176766 0.528986 -0.830016 + -0.830036 1.89047 -2.37428 0.530299 0.447076 -0.720351 + -0.964897 1.97343 -2.24433 -0.902333 0.430659 -0.0181286 + -0.901535 2.09321 -2.17986 -0.786094 0.58543 -0.198312 + -0.885057 2.10202 -2.20443 -0.598458 0.68725 -0.411746 + -0.858522 2.10453 -2.22223 -0.212597 0.734758 -0.644153 + -0.8652 1.99489 -2.32711 0.225469 0.599496 -0.767964 + -0.91318 2.07301 -2.13887 -0.921443 0.240205 0.30536 + -0.911928 2.08291 -2.15493 -0.888448 0.45875 0.0144434 + -0.846882 2.19034 -2.0862 -0.757821 0.633696 -0.155358 + -0.830403 2.19916 -2.11077 -0.558099 0.738657 -0.378035 + -0.903487 2.05914 -2.11689 -0.839413 0.0153026 0.543278 + -0.855559 2.1726 -2.05312 -0.901624 0.272233 0.336101 + -0.854308 2.1825 -2.06918 -0.861094 0.50607 0.0490848 + -0.784599 2.27812 -1.99735 -0.723949 0.679316 -0.120111 + -0.833506 2.14229 -2.0213 -0.7259 -0.122689 0.676769 + -0.849419 2.16073 -2.03899 -0.828673 0.0347784 0.558651 + -0.79287 2.26359 -1.96948 -0.87785 0.31294 0.362557 + -0.792025 2.27028 -1.98033 -0.831938 0.548371 0.084665 + -0.807843 2.11933 -2.00318 -0.645171 -0.210074 0.73459 + -0.775984 2.23927 -1.94341 -0.714757 -0.0973061 0.692571 + -0.78673 2.25172 -1.95535 -0.811373 0.0620697 0.581224 + -0.753638 2.31157 -1.92174 -0.735604 0.484882 0.47305 + -0.752792 2.31826 -1.93259 -0.680276 0.703568 0.205468 + -0.762482 2.08295 -1.97761 -0.537501 -0.292838 0.790783 + -0.719688 2.19174 -1.90802 -0.530579 -0.273299 0.802368 + -0.75032 2.21631 -1.92529 -0.633662 -0.191531 0.749525 + -0.721864 2.27609 -1.88848 -0.530824 0.00852193 0.847439 + -0.738832 2.29127 -1.90046 -0.603796 0.0915941 0.791859 + -0.765975 1.96241 -2.03005 -0.0227249 -0.454939 0.890233 + -0.737599 2.0674 -1.97035 -0.0462216 -0.50535 0.861676 + -0.694806 2.17619 -1.90076 -0.0208488 -0.497499 0.867214 + -0.691231 2.25153 -1.8712 -0.399405 -0.0527992 0.915253 + -0.751927 1.96167 -2.03831 0.57048 -0.469926 0.673589 + -0.723551 2.06666 -1.9786 0.54645 -0.554354 0.62776 + -0.685319 2.17569 -1.90633 0.545468 -0.553316 0.629529 + -0.665293 2.24074 -1.87198 0.616946 -0.229921 0.752671 + -0.67478 2.24124 -1.86641 0.0906377 -0.201489 0.975288 + -0.743434 1.86794 -2.11017 0.771105 -0.326619 0.546551 + -0.730396 1.96785 -2.06072 0.757156 -0.414665 0.504745 + -0.708674 2.0705 -1.99447 0.730836 -0.504805 0.459402 + -0.670442 2.17954 -1.9222 0.731534 -0.50667 0.456228 + -0.745097 1.80715 -2.13932 0.782187 -0.101768 0.614676 + -0.713282 1.88189 -2.15177 0.919165 -0.215541 0.329664 + -0.708922 1.97778 -2.09036 0.904023 -0.306665 0.297823 + -0.687199 2.08044 -2.0241 0.885236 -0.395453 0.244895 + -0.65594 2.18625 -1.94222 0.8797 -0.405933 0.247681 + -0.714945 1.8211 -2.18093 0.908057 0.0103445 0.418719 + -0.705524 1.89749 -2.18565 0.999195 0.00369994 -0.0399548 + -0.701163 1.99338 -2.12423 0.99554 -0.0675015 -0.0658986 + -0.681391 2.09276 -2.04693 0.981635 -0.155672 -0.110267 + -0.706562 1.80358 -2.18817 0.901448 0.0921141 0.422974 + -0.696663 1.81764 -2.23517 0.96056 0.278069 0.00165307 + -0.705046 1.83516 -2.22793 0.973749 0.22752 -0.00694964 + -0.718511 1.91654 -2.22502 0.886919 0.240021 -0.39467 + -0.708769 2.01287 -2.1491 0.898348 0.18185 -0.399876 + -0.696911 1.73294 -2.22085 0.936618 -0.0934312 0.337665 + -0.690782 1.74648 -2.26215 0.996843 0.0634328 -0.0477425 + -0.710402 1.81461 -2.29184 0.862524 0.32148 -0.390772 + -0.718033 1.85421 -2.2673 0.862475 0.331309 -0.382586 + -0.690965 1.62207 -2.31635 0.998923 -0.0164482 -0.0433782 + -0.704521 1.74345 -2.31883 0.910927 0.204912 -0.358082 + -0.748398 1.76289 -2.37486 0.682017 0.34605 -0.644284 + -0.754009 1.81933 -2.34872 0.681665 0.404008 -0.610008 + -0.761639 1.85892 -2.32418 0.695985 0.433864 -0.572159 + -0.696827 1.64032 -2.34079 0.954217 0.102061 -0.281164 + -0.711705 1.63495 -2.37702 0.851026 0.138091 -0.506642 + -0.719399 1.73808 -2.35506 0.802015 0.338053 -0.492434 + -0.70237 1.56553 -2.37354 0.921939 -0.00122586 -0.387333 + -0.719395 1.57264 -2.40035 0.810744 0.0651058 -0.581769 + -0.745485 1.659 -2.4139 0.723251 0.197655 -0.661695 + -0.774483 1.6838 -2.4337 0.635835 0.256915 -0.72781 + -0.721699 1.50269 -2.40248 0.885695 -0.348526 -0.306716 + -0.738725 1.5098 -2.42928 0.774464 -0.152584 -0.613941 + -0.753175 1.59668 -2.43723 0.744829 0.155501 -0.648883 + -0.756482 1.47811 -2.43653 0.416224 -0.613345 -0.671242 + -0.752344 1.53175 -2.44773 0.778281 -0.026552 -0.627355 + -0.768963 1.46795 -2.4262 0.166699 -0.821156 -0.545816 + -0.802688 1.48985 -2.43791 -0.105407 -0.689741 -0.716343 + -0.770101 1.50006 -2.45498 0.286894 -0.491131 -0.822485 + -0.820298 1.97496 -2.31063 0.563242 0.456573 -0.688694 + -0.751901 1.94341 -2.26053 0.733487 0.358551 -0.577441 + -0.78673 2.07714 -2.21228 0.592425 0.450911 -0.667617 + -0.742159 2.03974 -2.18461 0.74734 0.340538 -0.57054 + -0.688997 2.11225 -2.0718 0.893224 0.123075 -0.432439 + -0.831632 2.09707 -2.22876 0.256402 0.629752 -0.733261 + -0.75542 2.17348 -2.12149 0.60167 0.431034 -0.67246 + -0.710849 2.13608 -2.09381 0.750729 0.296103 -0.590532 + -0.655268 2.21173 -1.98184 0.897818 0.111921 -0.425907 + -0.650131 2.19857 -1.96504 0.980032 -0.161755 -0.11564 + -0.812239 2.19972 -2.1238 -0.187112 0.768747 -0.611569 + -0.785349 2.19226 -2.13034 0.282734 0.632751 -0.720894 + -0.707219 2.26081 -2.02254 0.612771 0.434798 -0.659896 + -0.67712 2.23555 -2.00384 0.750541 0.302056 -0.587751 + -0.64225 2.2713 -1.93437 0.917244 0.28733 -0.275871 + -0.755307 2.28464 -2.02698 -0.157226 0.801736 -0.576628 + -0.737148 2.2796 -2.03139 0.292386 0.657328 -0.694573 + -0.686797 2.31231 -1.96761 0.634707 0.572917 -0.518568 + -0.656699 2.28706 -1.94892 0.783717 0.435912 -0.442458 + -0.773471 2.28407 -2.01394 -0.529881 0.778732 -0.335862 + -0.724745 2.32977 -1.96905 -0.072796 0.913511 -0.400248 + -0.706586 2.32474 -1.97346 0.349314 0.770202 -0.533637 + -0.701295 2.32979 -1.95471 0.407993 0.909048 -0.0846973 + -0.681506 2.31737 -1.94886 0.622813 0.776928 -0.0921282 + -0.747882 2.32345 -1.94384 -0.580374 0.81407 0.0213808 + -0.736754 2.3294 -1.96044 -0.394038 0.90037 -0.184573 + -0.712922 2.33301 -1.95189 0.152201 0.98824 0.0147047 + -0.702805 2.32088 -1.92498 0.27044 0.870804 0.410564 + -0.691178 2.31766 -1.92781 0.413452 0.840047 0.351253 + -0.732056 2.32883 -1.93265 -0.165332 0.941457 0.293808 + -0.724931 2.33264 -1.94327 -0.0686573 0.982872 0.171023 + -0.736966 2.32364 -1.92139 -0.244051 0.874902 0.418313 + -0.70993 2.31707 -1.91436 0.201495 0.844749 0.495781 + -0.737508 2.31936 -1.91445 -0.294043 0.749937 0.592564 + -0.710472 2.31279 -1.90741 0.164396 0.784888 0.597431 + -0.668617 2.29306 -1.90509 0.481994 0.723886 0.493629 + -0.671906 2.30149 -1.91584 0.479355 0.787921 0.386522 + -0.662234 2.30119 -1.93689 0.700092 0.712291 -0.0501296 + -0.749578 2.30373 -1.9124 -0.689121 0.259375 0.676637 + -0.733448 2.31151 -1.9051 -0.284337 0.59437 0.752248 + -0.726568 2.30354 -1.89746 -0.241862 0.496269 0.833798 + -0.703591 2.30482 -1.89977 0.188003 0.735029 0.65145 + -0.709599 2.28836 -1.88548 -0.18386 0.433298 0.882297 + -0.683977 2.28909 -1.88871 0.261307 0.695252 0.669585 + -0.689985 2.27263 -1.87442 -0.112013 0.404329 0.907729 + -0.673534 2.26235 -1.86962 0.222924 0.348046 0.910587 + -0.677903 2.28876 -1.89228 0.417893 0.701664 0.57709 + -0.66746 2.26203 -1.87319 0.563196 0.358057 0.744718 + -0.657623 2.26457 -1.88368 0.65981 0.377538 0.649705 + -0.648337 2.26887 -1.89649 0.740199 0.40184 0.5391 + -0.644497 2.27701 -1.91159 0.813221 0.500292 0.297287 + -0.647785 2.28544 -1.92234 0.783983 0.614324 0.0893147 + -0.655456 2.24329 -1.88247 0.77951 -0.194699 0.595363 + -0.640954 2.24999 -1.90248 0.914357 -0.116579 0.387764 + -0.637114 2.25814 -1.91758 0.996337 0.0638149 0.0569169 + 0.836968 1.58108 -2.53408 -0.529244 -0.278961 -0.8013 + 0.849002 1.58689 -2.54405 -0.231101 -0.923839 -0.305145 + 0.870453 1.57278 -2.5533 -0.161916 -0.811215 0.561883 + 0.858967 1.55925 -2.59536 -0.480914 -0.834799 0.268014 + 0.892878 1.52828 -2.6236 -0.3311 -0.925079 0.186016 + 0.907121 1.53929 -2.58384 -0.0693211 -0.836373 0.54376 + 0.917493 1.56796 -2.55886 0.40571 -0.477343 0.77945 + 0.880826 1.60145 -2.52833 0.306076 -0.477655 0.823507 + 0.853085 1.62012 -2.50619 0.44327 -0.399519 0.802432 + 0.82717 1.59283 -2.50967 0.356478 -0.630121 0.689834 + 0.836968 1.58108 -2.53408 0.300681 -0.889637 0.34371 + 0.837516 1.57337 -2.58611 -0.143927 -0.947201 0.286522 + 0.846625 1.56037 -2.63923 -0.487877 -0.87038 0.0664382 + 0.880536 1.52939 -2.66746 -0.376819 -0.916215 -0.136225 + 0.920106 1.53063 -2.67928 0.25347 -0.92227 -0.291841 + 0.920658 1.52071 -2.64289 0.146261 -0.984981 -0.0917605 + 0.831839 1.57414 -2.58139 0.293109 -0.940601 0.171338 + 0.825704 1.57004 -2.59471 0.15939 -0.987205 0.00451157 + 0.831381 1.56927 -2.59942 -0.046646 -0.987739 0.148982 + 0.819805 1.56833 -2.57142 0.461567 -0.886976 0.0151249 + 0.800317 1.56093 -2.58798 0.33693 -0.920816 -0.196407 + 0.824463 1.57049 -2.59732 0.065448 -0.989332 -0.130146 + 0.819686 1.57149 -2.61797 0.0288438 -0.996895 -0.0732735 + 0.826604 1.57027 -2.62008 -0.291709 -0.956182 0.0249299 + 0.78938 1.55013 -2.54623 0.299884 -0.920252 0.251408 + 0.769892 1.54273 -2.56278 0.119963 -0.989273 0.083352 + 0.73635 1.54179 -2.59341 -0.00512646 -0.999904 -0.012889 + 0.799076 1.56137 -2.59059 0.274611 -0.92913 -0.247601 + 0.779582 1.56188 -2.52182 0.125974 -0.800099 0.586491 + 0.749654 1.56542 -2.51827 -0.173842 -0.78436 0.595448 + 0.725127 1.55751 -2.54698 -0.31064 -0.85028 0.424883 + 0.691584 1.55657 -2.57761 -0.497564 -0.834238 0.237648 + 0.721856 1.54442 -2.62195 -0.088708 -0.988174 -0.125074 + 0.780614 1.61533 -2.47378 0.161607 -0.480563 0.861941 + 0.750687 1.61887 -2.47023 -0.113863 -0.503501 0.856459 + 0.707459 1.60697 -2.49548 -0.482508 -0.520281 0.704623 + 0.682931 1.59906 -2.52419 -0.5862 -0.583065 0.562499 + 0.806529 1.64262 -2.4703 0.324654 -0.309088 0.893904 + 0.808238 1.67943 -2.46158 0.405139 -0.269722 0.873563 + 0.753714 1.67357 -2.44263 -0.0881242 -0.288874 0.953303 + 0.710487 1.66167 -2.46787 -0.423221 -0.374537 0.824989 + 0.883239 1.67101 -2.50788 0.520974 -0.222013 0.824194 + 0.884948 1.70783 -2.49917 0.520417 -0.0886289 0.849301 + 0.885501 1.73942 -2.50075 0.57843 -0.174445 0.796861 + 0.825457 1.74618 -2.44792 0.484661 -0.335141 0.80795 + 0.770933 1.74032 -2.42897 0.206856 -0.404116 0.891011 + 0.91098 1.65235 -2.53002 0.593177 -0.208412 0.777628 + 0.932378 1.72366 -2.53138 0.622406 -0.100417 0.776226 + 0.932931 1.75525 -2.53296 0.557635 -0.103001 0.823671 + 0.930384 1.78543 -2.5186 0.663167 -0.368326 0.651572 + 0.890599 1.77759 -2.4862 0.595131 -0.436902 0.674489 + 0.937477 1.56351 -2.58027 0.750783 -0.325756 0.574637 + 0.930964 1.6479 -2.55143 0.743431 -0.188964 0.641563 + 0.93984 1.68266 -2.55103 0.721776 -0.21694 0.657249 + 0.96552 1.74357 -2.55903 0.760425 -0.111008 0.639868 + 0.952752 1.77705 -2.54377 0.731841 -0.131457 0.668676 + 0.9349 1.53172 -2.60313 0.49009 -0.786692 0.375403 + 0.960761 1.58365 -2.61395 0.923558 -0.230741 0.306268 + 0.969637 1.61842 -2.61355 0.847841 -0.275641 0.452976 + 0.972983 1.70257 -2.57868 0.819259 -0.171981 0.547026 + 0.958184 1.55185 -2.63682 0.885324 -0.463885 0.0318226 + 0.957632 1.56178 -2.6732 0.80879 -0.587373 -0.0291866 + 0.986209 1.61679 -2.64923 0.910859 -0.341267 0.232106 + 0.989555 1.70095 -2.61435 0.906179 -0.182344 0.381562 + 0.987338 1.76658 -2.58585 0.858615 -0.0559184 0.509562 + 0.96237 1.56839 -2.71456 0.676905 -0.694211 -0.244687 + 0.990947 1.6234 -2.69058 0.952436 -0.304419 -0.0139587 + 1.00914 1.71738 -2.65557 0.97822 -0.14128 0.152072 + 1.00693 1.78301 -2.62707 0.966659 0.0356724 0.253569 + 0.907131 1.55762 -2.73451 0.0904279 -0.865588 -0.492524 + 0.912271 1.57791 -2.76563 0.193799 -0.752384 -0.629572 + 0.967511 1.58868 -2.74568 0.686138 -0.576451 -0.443755 + 0.990624 1.64064 -2.72722 0.944689 -0.219302 -0.243862 + 1.00882 1.73461 -2.6922 0.971831 0.0351207 -0.233048 + 0.867561 1.55638 -2.72269 -0.333967 -0.869329 -0.364325 + 0.886801 1.59359 -2.78687 0.0484448 -0.69519 -0.717192 + 0.96149 1.61897 -2.77657 0.631099 -0.349328 -0.692592 + 0.984603 1.67093 -2.75811 0.85292 -0.0351305 -0.520858 + 0.835961 1.56237 -2.67765 -0.422165 -0.899461 -0.112901 + 0.821584 1.58909 -2.72284 -0.577195 -0.741375 -0.342358 + 0.853184 1.5831 -2.76788 -0.337355 -0.796361 -0.501998 + 0.815939 1.57227 -2.6585 -0.281784 -0.95886 -0.0344407 + 0.80924 1.57376 -2.67852 0.0286495 -0.967249 -0.252208 + 0.806055 1.59391 -2.7076 -0.388355 -0.778758 -0.492663 + 0.812135 1.63108 -2.78261 -0.707527 -0.461325 -0.535336 + 0.828764 1.61901 -2.79522 -0.524726 -0.545668 -0.653383 + 0.808282 1.57371 -2.65728 0.0102338 -0.997671 -0.0674312 + 0.801583 1.5752 -2.67731 0.0205262 -0.985793 -0.166709 + 0.801867 1.57579 -2.67967 0.00979677 -0.909811 -0.414907 + 0.798681 1.59594 -2.70875 0.0660528 -0.814171 -0.576856 + 0.796606 1.6359 -2.76737 -0.555843 -0.550282 -0.62308 + 0.784583 1.564 -2.61912 0.258324 -0.950155 -0.174565 + 0.773179 1.56623 -2.65844 0.224088 -0.959351 -0.171553 + 0.772061 1.57169 -2.68612 0.196159 -0.958583 -0.206494 + 0.772345 1.57227 -2.68849 0.26389 -0.891924 -0.367198 + 0.710069 1.55321 -2.66353 -0.148991 -0.973818 -0.171698 + 0.708951 1.55867 -2.69122 -0.245517 -0.893039 -0.377098 + 0.727387 1.56891 -2.7187 -0.0782791 -0.839603 -0.537531 + 0.734684 1.58857 -2.74297 -0.0566682 -0.63082 -0.773857 + 0.779641 1.59193 -2.71276 0.340283 -0.759882 -0.553884 + 0.671648 1.56884 -2.61368 -0.625943 -0.778312 0.0492529 + 0.659861 1.57763 -2.65526 -0.737212 -0.640644 -0.214694 + 0.667228 1.59578 -2.68959 -0.752914 -0.411699 -0.513443 + 0.685665 1.60601 -2.71707 -0.68077 -0.34087 -0.648352 + 0.706759 1.60945 -2.73933 -0.543492 -0.296008 -0.785491 + 0.627933 1.62419 -2.59563 -0.911088 -0.408095 0.0581156 + 0.628581 1.65253 -2.63233 -0.947183 -0.205286 -0.246379 + 0.635948 1.67068 -2.66666 -0.883542 -0.122301 -0.452101 + 0.658122 1.69592 -2.69818 -0.766696 0.0031688 -0.642002 + 0.679217 1.69936 -2.72044 -0.60579 0.089137 -0.790615 + 0.647869 1.61192 -2.55956 -0.765996 -0.521087 0.376455 + 0.632771 1.68983 -2.52035 -0.78935 -0.323772 0.52163 + 0.607579 1.71319 -2.55455 -0.966156 -0.189301 0.175234 + 0.608227 1.74153 -2.59125 -0.991388 -0.088012 -0.096973 + 0.612124 1.75432 -2.62735 -0.939314 -0.00908203 -0.342937 + 0.667834 1.67697 -2.48499 -0.618388 -0.348957 0.704149 + 0.690167 1.76568 -2.43545 -0.52172 -0.358107 0.774317 + 0.635957 1.81583 -2.45391 -0.735904 -0.295343 0.609276 + 0.610765 1.83919 -2.48811 -0.915532 -0.185415 0.356964 + 0.732821 1.75039 -2.41834 -0.17546 -0.43856 0.881407 + 0.743447 1.80265 -2.39067 -0.177277 -0.554538 0.813056 + 0.697106 1.83315 -2.39531 -0.522479 -0.473941 0.708799 + 0.642895 1.8833 -2.41377 -0.734475 -0.356784 0.57728 + 0.78156 1.79259 -2.4013 0.24011 -0.578732 0.779369 + 0.783061 1.81933 -2.37746 0.237475 -0.558674 0.794663 + 0.744899 1.82951 -2.36703 -0.169312 -0.551006 0.817145 + 0.698558 1.86001 -2.37167 -0.518317 -0.457142 0.722751 + 0.830554 1.78436 -2.43336 0.469313 -0.50653 0.723307 + 0.832056 1.8111 -2.40953 0.481788 -0.512384 0.710875 + 0.78561 1.86204 -2.35542 0.304196 -0.392347 0.86806 + 0.747448 1.87221 -2.34499 -0.0968603 -0.380952 0.919507 + 0.703661 1.89229 -2.35301 -0.443742 -0.315421 0.83881 + 0.891714 1.80518 -2.46391 0.584491 -0.464796 0.665083 + 0.890927 1.85616 -2.43603 0.625132 -0.338618 0.703241 + 0.831269 1.86208 -2.38165 0.535945 -0.351631 0.76754 + 0.786437 1.92585 -2.33228 0.317231 -0.374022 0.871477 + 0.931499 1.81302 -2.49631 0.685991 -0.419362 0.594602 + 0.927125 1.86591 -2.46471 0.676861 -0.311731 0.666846 + 0.884337 1.94192 -2.39379 0.623156 -0.304589 0.720349 + 0.832096 1.92589 -2.35851 0.537725 -0.320904 0.779661 + 0.951119 1.83526 -2.50792 0.815294 -0.309731 0.489247 + 0.946745 1.88814 -2.47632 0.799019 -0.214216 0.561854 + 0.933809 1.95831 -2.43594 0.814003 -0.175048 0.553857 + 0.920535 1.95166 -2.42247 0.698709 -0.268539 0.663093 + 0.871366 2.01493 -2.35083 0.614805 -0.326722 0.717821 + 0.950205 1.80722 -2.5294 0.806295 -0.292485 0.514141 + 0.967303 1.83543 -2.5493 0.906405 -0.180151 0.382067 + 0.968217 1.86347 -2.52782 0.918564 -0.192238 0.345377 + 0.960645 1.90798 -2.49709 0.905291 -0.092692 0.414555 + 0.974569 1.80005 -2.57059 0.84144 -0.0289492 0.539574 + 0.982019 1.86931 -2.57694 0.974105 -0.0520607 0.22002 + 0.982453 1.8984 -2.55738 0.978268 -0.059994 0.198475 + 0.97488 1.94291 -2.52665 0.959882 0.0580655 0.274326 + 0.989285 1.83393 -2.59822 0.949207 0.0791123 0.304544 + 0.984638 1.89665 -2.60977 0.994851 0.0930935 -0.0400536 + 0.985072 1.92573 -2.59022 0.992818 0.117399 -0.0230152 + 0.976227 1.96522 -2.5583 0.968177 0.245205 0.050083 + 0.956177 1.99368 -2.48517 0.961038 0.109783 0.253678 + 1.00836 1.80441 -2.66154 0.964083 0.230153 -0.132563 + 0.99072 1.85533 -2.63269 0.977796 0.209208 -0.0120721 + 0.975678 1.9163 -2.64574 0.938999 0.220034 -0.264322 + 0.975559 1.9466 -2.6284 0.934168 0.263886 -0.240196 + 0.966714 1.98608 -2.59648 0.907218 0.393033 -0.149937 + 0.98876 1.82 -2.69461 0.856976 0.286266 -0.428536 + 0.98176 1.87498 -2.66866 0.911828 0.264892 -0.313692 + 0.960655 1.93025 -2.67183 0.763613 0.325428 -0.557666 + 0.960536 1.96055 -2.6545 0.773513 0.411801 -0.481766 + 0.989218 1.75021 -2.72527 0.836597 0.193717 -0.512424 + 0.967167 1.83358 -2.72033 0.682186 0.333391 -0.650748 + 0.960167 1.88856 -2.69438 0.71344 0.349019 -0.60761 + 0.939981 1.93761 -2.6864 0.449762 0.420299 -0.788076 + 0.939594 1.96849 -2.67014 0.428185 0.548653 -0.718079 + 0.959759 1.68877 -2.78486 0.66902 0.0857639 -0.73828 + 0.964374 1.76805 -2.75202 0.665187 0.286628 -0.689471 + 0.930033 1.84529 -2.73959 0.356475 0.425539 -0.831771 + 0.939493 1.89591 -2.70895 0.426344 0.422212 -0.79998 + 0.894775 1.92671 -2.70593 0.193933 0.417535 -0.887724 + 0.93602 1.63465 -2.79782 0.474063 -0.30298 -0.826721 + 0.92314 1.70255 -2.80862 0.416158 0.195859 -0.887948 + 0.92724 1.77977 -2.77129 0.407635 0.381528 -0.82962 + 0.895508 1.7952 -2.77479 0.0612267 0.434692 -0.898496 + 0.886814 1.83889 -2.75243 -0.0258629 0.491093 -0.870723 + 0.899401 1.64843 -2.82158 0.219461 -0.216447 -0.951308 + 0.891408 1.71798 -2.81212 0.0331725 0.35334 -0.934907 + 0.853578 1.78375 -2.77168 -0.274737 0.406796 -0.871227 + 0.844884 1.82745 -2.74932 -0.141503 0.332949 -0.932267 + 0.896273 1.88951 -2.72178 0.120896 0.43092 -0.894255 + 0.862381 1.6295 -2.81421 -0.150587 -0.418167 -0.895801 + 0.840681 1.667 -2.81473 -0.305041 0.0662291 -0.950034 + 0.877702 1.68593 -2.82211 -0.053599 0.177384 -0.982681 + 0.839872 1.7517 -2.78167 -0.333201 0.384723 -0.860793 + 0.785028 1.76407 -2.74993 -0.352535 0.220555 -0.909436 + 0.822798 1.66471 -2.80807 -0.511128 -0.0265206 -0.859095 + 0.806169 1.67678 -2.79547 -0.583979 0.0337159 -0.811068 + 0.821988 1.74942 -2.77501 -0.391889 0.391583 -0.832518 + 0.798455 1.68053 -2.78978 -0.573549 0.0465163 -0.81785 + 0.814274 1.75317 -2.76932 -0.550827 0.26096 -0.792773 + 0.791942 1.67972 -2.78532 -0.57781 0.0178925 -0.815975 + 0.806332 1.74827 -2.76421 -0.558725 0.207544 -0.802964 + 0.790093 1.63509 -2.76291 -0.0450581 -0.654894 -0.754376 + 0.783999 1.67483 -2.78021 -0.520899 0.00297168 -0.853613 + 0.766685 1.66096 -2.76934 -0.45916 0.0390612 -0.887495 + 0.745381 1.67676 -2.75506 -0.413751 0.191193 -0.890087 + 0.771053 1.63108 -2.76692 -0.0260312 -0.453194 -0.891032 + 0.753738 1.61722 -2.75605 -0.3947 -0.145953 -0.907144 + 0.725814 1.6381 -2.75241 -0.413907 -0.0494596 -0.908974 + 0.698784 1.73801 -2.7231 -0.482258 0.193695 -0.854347 + 0.634298 1.77956 -2.65887 -0.803022 0.0927684 -0.588685 + 0.70475 1.77673 -2.71907 -0.465112 0.121587 -0.876862 + 0.790993 1.80279 -2.74591 -0.195927 0.110458 -0.974377 + 0.602519 1.85409 -2.57044 -0.989775 -0.0171107 -0.141611 + 0.60743 1.84952 -2.60037 -0.940452 -0.0136382 -0.339653 + 0.625217 1.86462 -2.62128 -0.741903 0.261455 -0.617432 + 0.652085 1.79466 -2.67979 -0.690009 0.0510876 -0.721996 + 0.598621 1.84131 -2.53434 -0.993402 -0.0891303 0.0721672 + 0.599069 1.91403 -2.49513 -0.991341 0.0147544 0.130479 + 0.59704 1.91508 -2.53562 -0.994661 0.0833361 -0.0608726 + 0.601951 1.91051 -2.56554 -0.917656 0.185892 -0.351216 + 0.611212 1.91192 -2.4489 -0.902772 -0.222533 0.368078 + 0.611993 1.94024 -2.42795 -0.930858 -0.0550729 0.361208 + 0.606495 1.95083 -2.4826 -0.975055 0.202647 0.0905612 + 0.604467 1.95189 -2.52309 -0.957179 0.280245 -0.072603 + 0.643676 1.91163 -2.39283 -0.727034 -0.314237 0.610472 + 0.620815 1.96969 -2.40936 -0.905041 0.145275 0.399743 + 0.615318 1.98028 -2.46401 -0.950925 0.289127 0.110213 + 0.616228 1.99017 -2.50007 -0.906227 0.416864 -0.070542 + 0.609082 1.94796 -2.55421 -0.851563 0.370101 -0.371302 + 0.64878 1.9439 -2.37416 -0.698782 -0.156308 0.698048 + 0.632582 1.99022 -2.39685 -0.935138 0.0330864 0.352735 + 0.63063 2.01243 -2.43561 -0.979628 0.181901 0.0850901 + 0.631541 2.02232 -2.47167 -0.948994 0.311316 -0.0499301 + 0.620843 1.98625 -2.53119 -0.79502 0.509016 -0.329918 + 0.710074 1.94569 -2.33546 -0.440496 -0.369597 0.818145 + 0.660547 1.96443 -2.36165 -0.676542 -0.246812 0.693811 + 0.635489 2.025 -2.36662 -0.945593 -0.235756 0.224217 + 0.633538 2.0472 -2.40539 -0.999492 -0.0199863 -0.0248049 + 0.63553 2.06394 -2.43221 -0.985003 0.0954169 -0.143749 + 0.753861 1.92561 -2.32744 -0.0779226 -0.387061 0.918756 + 0.70905 1.98909 -2.30845 -0.435597 -0.536 0.723159 + 0.659523 2.00784 -2.33464 -0.696934 -0.465806 0.545259 + 0.62777 2.06848 -2.32943 -0.934597 -0.315599 0.16409 + 0.779803 1.98534 -2.30028 0.304596 -0.458945 0.83462 + 0.747227 1.9851 -2.29544 -0.0902986 -0.542122 0.835434 + 0.694494 2.04529 -2.26765 -0.417284 -0.624472 0.660234 + 0.651803 2.05132 -2.29745 -0.671476 -0.553332 0.492893 + 0.819125 1.9989 -2.31556 0.526806 -0.375013 0.762785 + 0.760585 2.04989 -2.25375 0.304931 -0.525779 0.794087 + 0.732671 2.0413 -2.25464 -0.0799034 -0.619927 0.78058 + 0.677505 2.12639 -2.19846 -0.387856 -0.640766 0.662561 + 0.844465 2.09285 -2.29092 0.616114 -0.364898 0.698035 + 0.799907 2.06345 -2.26903 0.527434 -0.416829 0.740315 + 0.739134 2.13566 -2.18479 0.30962 -0.55993 0.768514 + 0.711221 2.12707 -2.18568 -0.0512291 -0.642287 0.76475 + 0.901706 2.03045 -2.37084 0.692787 -0.27321 0.667385 + 0.874805 2.10837 -2.31093 0.690601 -0.304851 0.655847 + 0.817902 2.18362 -2.21486 0.618527 -0.413089 0.668418 + 0.773344 2.15422 -2.19296 0.527377 -0.464518 0.711405 + 0.711712 2.24639 -2.09058 0.293885 -0.529355 0.795874 + 0.91498 2.03709 -2.3843 0.829221 -0.138502 0.541489 + 0.886092 2.11841 -2.32031 0.829745 -0.162649 0.533919 + 0.855504 2.2129 -2.23729 0.836434 -0.202743 0.509189 + 0.844218 2.20286 -2.22791 0.693456 -0.35549 0.626695 + 0.785192 2.29349 -2.11126 0.582077 -0.399666 0.708134 + 0.947709 1.97814 -2.45671 0.920878 -0.0304977 0.388655 + 0.925 2.04957 -2.40284 0.922237 0.0109609 0.38647 + 0.896112 2.13089 -2.33884 0.92254 -0.00589091 0.385856 + 0.86421 2.22607 -2.25259 0.929283 -0.0420559 0.366965 + 0.821654 2.32176 -2.13275 0.82778 -0.171743 0.53412 + 0.933468 2.06511 -2.43129 0.96132 0.145756 0.233706 + 0.903163 2.14858 -2.36166 0.962891 0.133979 0.234287 + 0.871261 2.24376 -2.27541 0.969106 0.108601 0.221447 + 0.836699 2.35083 -2.16856 0.957603 0.144605 0.249171 + 0.83036 2.33492 -2.14804 0.919974 -0.00651825 0.391925 + 0.957524 2.01599 -2.51681 0.956234 0.283177 0.073668 + 0.933667 2.08186 -2.45844 0.953969 0.293753 0.0604318 + 0.903362 2.16533 -2.38881 0.955816 0.289075 0.0534023 + 0.871323 2.25969 -2.29903 0.96095 0.272592 0.047626 + 0.949723 2.03387 -2.54718 0.895743 0.430067 -0.112632 + 0.925867 2.09974 -2.48881 0.896787 0.427097 -0.115588 + 0.896442 2.1812 -2.41575 0.897696 0.424396 -0.118452 + 0.864403 2.27556 -2.32598 0.897656 0.422454 -0.125483 + 0.952981 1.9998 -2.62055 0.750634 0.546339 -0.371566 + 0.93599 2.04759 -2.57125 0.749261 0.58059 -0.318627 + 0.914418 2.11119 -2.50936 0.753502 0.571078 -0.325739 + 0.884993 2.19264 -2.4363 0.735171 0.582479 -0.346759 + 0.932038 2.00774 -2.6362 0.426825 0.672039 -0.605131 + 0.919314 2.05575 -2.58333 0.446381 0.707449 -0.54796 + 0.897743 2.11935 -2.52144 0.466568 0.68746 -0.556518 + 0.870596 2.19652 -2.4491 0.446092 0.693783 -0.565391 + 0.894387 1.95759 -2.68967 0.181568 0.543906 -0.819267 + 0.893074 2.0071 -2.65126 0.173788 0.671227 -0.720591 + 0.88035 2.0551 -2.5984 0.201658 0.732872 -0.649795 + 0.865733 2.12251 -2.53207 0.222487 0.711071 -0.666991 + 0.828318 1.93192 -2.71699 -0.00385911 0.42863 -0.903472 + 0.827004 1.98142 -2.67858 -0.0542592 0.638747 -0.767501 + 0.828179 2.06209 -2.6036 -0.00900196 0.702534 -0.711593 + 0.813562 2.1295 -2.53728 0.00371492 0.70896 -0.705239 + 0.821635 1.89349 -2.72653 -0.0379539 0.320115 -0.946618 + 0.76261 1.88185 -2.72064 -0.348699 0.31201 -0.883775 + 0.769293 1.92029 -2.7111 -0.3462 0.413572 -0.842083 + 0.774611 1.97526 -2.67192 -0.323512 0.605061 -0.72749 + 0.823133 1.85629 -2.74238 -0.0656082 0.302468 -0.950899 + 0.769243 1.83163 -2.73897 -0.273363 0.176144 -0.945646 + 0.747032 1.84454 -2.72582 -0.444234 0.262938 -0.856458 + 0.717728 1.89175 -2.68815 -0.529601 0.361514 -0.767353 + 0.717287 1.92276 -2.6721 -0.528112 0.448408 -0.72113 + 0.682539 1.78964 -2.70592 -0.608635 -0.0405407 -0.792414 + 0.70215 1.85444 -2.69333 -0.548166 0.326985 -0.769802 + 0.672159 1.89904 -2.64849 -0.609067 0.349716 -0.711854 + 0.671718 1.93004 -2.63245 -0.569186 0.447479 -0.689775 + 0.722605 1.97773 -2.63292 -0.487543 0.574136 -0.657776 + 0.671696 1.85946 -2.66719 -0.608519 0.336563 -0.71863 + 0.62568 1.9042 -2.60259 -0.722428 0.309389 -0.618366 + 0.63281 1.94165 -2.59125 -0.660744 0.428873 -0.616024 + 0.64224 1.9879 -2.56041 -0.582087 0.593427 -0.555895 + 0.681147 1.97629 -2.60161 -0.512187 0.576299 -0.636824 + 0.659411 2.03466 -2.52058 -0.61816 0.581069 -0.529374 + 0.695002 2.04605 -2.54545 -0.546413 0.578407 -0.605704 + 0.73646 2.04749 -2.57676 -0.479866 0.595033 -0.64472 + 0.775786 2.05593 -2.59694 -0.318106 0.643455 -0.696258 + 0.638015 2.03301 -2.49136 -0.83395 0.455184 -0.311985 + 0.66146 2.08837 -2.47088 -0.675343 0.495717 -0.546055 + 0.697051 2.09976 -2.49575 -0.574924 0.544827 -0.61043 + 0.731765 2.11448 -2.51369 -0.505128 0.568826 -0.649063 + 0.771091 2.12291 -2.53387 -0.314378 0.638417 -0.70256 + 0.642004 2.07463 -2.4519 -0.876969 0.321684 -0.356995 + 0.652663 2.13298 -2.42409 -0.702558 0.432981 -0.564747 + 0.683014 2.15348 -2.43972 -0.597597 0.501115 -0.625909 + 0.717728 2.16819 -2.45766 -0.533156 0.535886 -0.654653 + 0.627798 2.10689 -2.38942 -0.981431 0.00851246 -0.191625 + 0.633207 2.11924 -2.40512 -0.886673 0.233692 -0.398998 + 0.635474 2.21187 -2.34328 -0.711483 0.422248 -0.561693 + 0.665825 2.23238 -2.35891 -0.607682 0.499412 -0.617502 + 0.696182 2.2509 -2.37159 -0.548256 0.535068 -0.642742 + 0.625806 2.09016 -2.36259 -0.991313 -0.107273 -0.0761004 + 0.613089 2.18393 -2.31271 -0.980987 0.00471444 -0.194014 + 0.618498 2.19627 -2.32841 -0.889052 0.225481 -0.398428 + 0.614047 2.32153 -2.23386 -0.715106 0.444629 -0.539377 + 0.613417 2.14609 -2.25635 -0.928504 -0.329442 0.171316 + 0.611454 2.16777 -2.28951 -0.990872 -0.109273 -0.0789475 + 0.592208 2.29483 -2.20487 -0.985199 0.0431024 -0.165906 + 0.597071 2.30593 -2.21899 -0.893656 0.252396 -0.371046 + 0.634814 2.13241 -2.22826 -0.662188 -0.563703 0.493706 + 0.592338 2.25919 -2.15187 -0.936909 -0.28433 0.203364 + 0.590573 2.27868 -2.18168 -0.996486 -0.067872 -0.0490905 + 0.588996 2.36206 -2.14054 -0.966485 0.256697 0.00363897 + 0.652901 2.23799 -2.10415 -0.364571 -0.609089 0.704343 + 0.613735 2.24551 -2.12377 -0.641395 -0.534826 0.550066 + 0.589485 2.32996 -2.09262 -0.917093 -0.00982676 0.398553 + 0.587719 2.34945 -2.12243 -0.977948 0.174287 0.115074 + 0.686618 2.23868 -2.09138 -0.0588529 -0.605251 0.793856 + 0.645524 2.31131 -2.05263 -0.380565 -0.298017 0.875417 + 0.606357 2.31883 -2.07225 -0.655361 -0.211977 0.72496 + 0.604448 2.36293 -2.08553 -0.692656 0.468093 0.54874 + 0.603302 2.37558 -2.10487 -0.725614 0.571432 0.383341 + 0.697108 2.3191 -2.04342 0.177742 -0.255731 0.950268 + 0.672013 2.31139 -2.04422 -0.120665 -0.304798 0.944742 + 0.646734 2.34692 -2.05243 -0.341751 0.279793 0.897174 + 0.62132 2.3518 -2.06515 -0.491925 0.326545 0.80708 + 0.653081 2.39392 -2.08458 -0.336742 0.695034 0.635242 + 0.72364 2.33405 -2.04824 0.350697 -0.196004 0.915748 + 0.689506 2.352 -2.04349 -0.0490756 0.28227 0.958079 + 0.673224 2.347 -2.04401 -0.195474 0.259964 0.945626 + 0.678495 2.38904 -2.07185 -0.226056 0.627679 0.744928 + 0.745921 2.26495 -2.09875 0.490999 -0.450093 0.745879 + 0.762911 2.36258 -2.06075 0.441742 -0.145001 0.885347 + 0.741521 2.38546 -2.05643 0.0821967 0.349115 0.933468 + 0.716039 2.36695 -2.04832 0.0397241 0.315208 0.948191 + 0.811507 2.31273 -2.12431 0.685079 -0.325964 0.651471 + 0.783282 2.37806 -2.06938 0.551221 -0.0486067 0.832942 + 0.761891 2.40094 -2.06506 0.175504 0.445567 0.877877 + 0.72026 2.41256 -2.07945 -0.25585 0.724551 0.639974 + 0.694778 2.39405 -2.07133 -0.215268 0.649897 0.728899 + 0.793428 2.38709 -2.07782 0.701245 0.119224 0.70288 + 0.768476 2.4068 -2.07054 0.274707 0.563677 0.778976 + 0.726844 2.41842 -2.08492 -0.129791 0.777026 0.615943 + 0.730957 2.42874 -2.09823 -0.128335 0.815768 0.563961 + 0.800224 2.39736 -2.08975 0.779302 0.271967 0.564555 + 0.775271 2.41707 -2.08247 0.313588 0.665203 0.677619 + 0.806563 2.41327 -2.11027 0.808623 0.411992 0.419991 + 0.779384 2.4274 -2.09579 0.330316 0.736389 0.590442 + 0.836761 2.36676 -2.19219 0.94666 0.313168 0.0758933 + 0.806611 2.42571 -2.12871 0.791962 0.554152 0.256344 + 0.779433 2.43983 -2.11423 0.312905 0.820975 0.477588 + 0.830539 2.38103 -2.21641 0.881532 0.462728 -0.0937213 + 0.800389 2.43997 -2.15293 0.723763 0.684221 0.0894924 + 0.775395 2.44909 -2.12994 0.274214 0.883376 0.38007 + 0.72692 2.43799 -2.11395 -0.146258 0.857057 0.494026 + 0.854282 2.28493 -2.34484 0.731351 0.588777 -0.344192 + 0.820418 2.3904 -2.23527 0.713449 0.628588 -0.309623 + 0.792489 2.44729 -2.16766 0.577168 0.808929 -0.111855 + 0.767495 2.4564 -2.14467 0.187435 0.952813 0.23878 + 0.839885 2.28881 -2.35764 0.422638 0.712098 -0.560619 + 0.807475 2.39389 -2.24678 0.409071 0.746315 -0.525047 + 0.779546 2.45078 -2.17917 0.307423 0.891575 -0.332545 + 0.759097 2.45867 -2.15214 0.0370589 0.995453 0.0877453 + 0.838586 2.19968 -2.45973 0.18498 0.717368 -0.671689 + 0.811783 2.28762 -2.36961 0.162041 0.734636 -0.658826 + 0.779373 2.3927 -2.25875 0.148816 0.764298 -0.627457 + 0.75761 2.44985 -2.18851 0.0810486 0.891237 -0.446238 + 0.79379 2.19329 -2.47214 -0.0312491 0.70472 -0.708797 + 0.766986 2.28123 -2.38203 -0.0604195 0.713955 -0.69758 + 0.739101 2.38695 -2.26991 -0.0684724 0.739944 -0.669175 + 0.717338 2.4441 -2.19967 -0.122586 0.855898 -0.502405 + 0.751319 2.1867 -2.46873 -0.349591 0.620235 -0.702208 + 0.729772 2.26941 -2.38266 -0.367233 0.626148 -0.687808 + 0.701887 2.37513 -2.27055 -0.373887 0.648146 -0.663411 + 0.688289 2.43487 -2.20017 -0.392067 0.765045 -0.510871 + 0.711029 2.45401 -2.16872 -0.212971 0.975971 -0.0460893 + 0.671689 2.35849 -2.26059 -0.553376 0.556712 -0.619553 + 0.658091 2.41823 -2.19021 -0.568242 0.670692 -0.476731 + 0.662386 2.43398 -2.16276 -0.510846 0.858764 -0.0395079 + 0.68198 2.44478 -2.16922 -0.410419 0.909116 -0.0711663 + 0.641333 2.33997 -2.24791 -0.611848 0.519942 -0.596073 + 0.634396 2.40377 -2.18031 -0.621311 0.639083 -0.453371 + 0.63869 2.41953 -2.15286 -0.547701 0.836432 -0.0201219 + 0.672795 2.42573 -2.1222 -0.342466 0.844668 0.411403 + 0.69239 2.43653 -2.12866 -0.295278 0.872108 0.390179 + 0.60711 2.38534 -2.16626 -0.723069 0.575599 -0.381913 + 0.620986 2.40756 -2.14374 -0.601163 0.798868 0.0203085 + 0.655091 2.41377 -2.11308 -0.376575 0.818915 0.433092 + 0.593858 2.37316 -2.15465 -0.882743 0.422708 -0.205139 + 0.607734 2.39539 -2.13214 -0.694391 0.703013 0.153605 + 0.651936 2.40657 -2.10392 -0.381509 0.775641 0.502824 + 0.604579 2.38819 -2.12298 -0.728042 0.614623 0.303635 + 0.718521 2.44026 -2.12142 -0.210033 0.878992 0.428087 + 0.737161 2.45774 -2.16148 -0.1006 0.994919 0.00386093 + -0.861683 1.78372 -1.68945 0.542942 0.676105 -0.498092 + -0.844417 1.76425 -1.68043 0.295676 0.853413 0.429257 + -0.795989 1.7501 -1.67675 0.0704556 0.470165 0.879762 + -0.896655 1.82743 -1.63648 0.819838 0.570199 -0.0523411 + -0.893836 1.82196 -1.6254 0.891577 0.305086 0.334685 + -0.875973 1.76755 -1.63771 0.527652 0.752673 0.393784 + -0.859869 1.76859 -1.6341 -0.509809 0.758022 -0.406813 + -0.828313 1.76528 -1.67683 -0.0515056 0.57841 -0.814119 + -0.795989 1.7501 -1.67675 0.619461 0.360333 -0.697444 + -0.913921 1.84691 -1.6455 0.628337 0.660206 -0.411486 + -0.938856 1.89544 -1.61696 0.553402 0.538562 -0.635372 + -0.921707 1.88933 -1.60415 0.819835 0.433994 -0.373524 + -0.918888 1.88385 -1.59307 0.976606 0.173526 0.127003 + -0.914592 1.82073 -1.59468 0.849752 0.0515985 0.524652 + -0.950332 1.85538 -1.66374 0.228995 0.62174 -0.749 + -0.975267 1.90391 -1.6352 0.215899 0.562513 -0.798102 + -0.973509 1.9577 -1.59711 0.256444 0.558221 -0.789067 + -0.946743 1.95147 -1.58371 0.553459 0.488953 -0.674246 + -0.929595 1.94537 -1.5709 0.841358 0.358801 -0.404202 + -0.874571 1.76401 -1.70684 0.24176 0.499863 -0.831678 + -0.96322 1.83567 -1.68111 -0.00269435 0.560421 -0.828204 + -1.00872 1.84191 -1.66855 -0.371559 0.465291 -0.803398 + -1.0025 1.90419 -1.63537 -0.304839 0.519388 -0.798316 + -0.862319 1.70005 -1.74151 0.254402 0.500152 -0.827724 + -0.965472 1.76805 -1.71504 -0.0500905 0.458199 -0.887437 + -1.01097 1.77429 -1.70247 -0.384834 0.445536 -0.808332 + -1.03461 1.83407 -1.65072 -0.650961 0.392859 -0.649547 + -1.02839 1.89634 -1.61754 -0.678934 0.423899 -0.599466 + -0.798428 1.69134 -1.71503 0.627613 0.409576 -0.66208 + -0.860608 1.62202 -1.78844 0.252982 0.439702 -0.861778 + -0.95322 1.70409 -1.74971 -0.00297674 0.504452 -0.863435 + -1.01937 1.70534 -1.74027 -0.363104 0.497155 -0.788031 + -1.04663 1.76377 -1.67854 -0.648101 0.399675 -0.648248 + -0.76879 1.67356 -1.67546 0.87792 0.252431 -0.406859 + -0.763945 1.5997 -1.71449 0.881476 0.206488 -0.424691 + -0.796717 1.61331 -1.76195 0.639402 0.337439 -0.690869 + -0.766351 1.73233 -1.63718 0.89385 0.216533 -0.392615 + -0.752199 1.66051 -1.6355 0.97648 0.136311 -0.167049 + -0.747354 1.58665 -1.67453 0.979245 0.0889351 -0.182123 + -0.753606 1.5029 -1.71989 0.965301 -0.0427322 -0.25762 + -0.770913 1.51923 -1.75069 0.861404 0.0973666 -0.498501 + -0.769426 1.80185 -1.60854 0.861362 0.282283 -0.42234 + -0.759348 1.79972 -1.57636 0.97648 0.155311 -0.149549 + -0.756274 1.73021 -1.60501 0.980811 0.115874 -0.156792 + -0.750401 1.64607 -1.60312 0.989386 0.00195389 0.145294 + -0.74596 1.57993 -1.63403 0.992367 -0.0378516 0.117364 + -0.805752 1.77556 -1.67281 0.296163 0.483039 -0.823991 + -0.779188 1.82732 -1.60459 0.686472 0.456702 -0.565844 + -0.777499 1.87088 -1.56637 0.735772 0.439402 -0.51533 + -0.805421 1.83416 -1.62143 0.239147 0.611648 -0.754119 + -0.803731 1.87773 -1.5832 0.384125 0.590126 -0.71007 + -0.827982 1.82389 -1.62545 -0.212933 0.608359 -0.764564 + -0.82617 1.87946 -1.58753 -0.0574496 0.608425 -0.791529 + -0.806134 1.92987 -1.54242 0.381638 0.58766 -0.713448 + -0.853077 1.821 -1.61849 -0.558502 0.456633 -0.692504 + -0.851265 1.87658 -1.58058 -0.511802 0.514498 -0.688004 + -0.84702 1.92949 -1.54163 -0.501892 0.544839 -0.671755 + -0.828572 1.93161 -1.54674 -0.04566 0.622728 -0.781105 + -0.884962 1.76516 -1.6048 -0.471562 0.844265 -0.254649 + -0.87817 1.81756 -1.5892 -0.841018 0.311302 -0.442469 + -0.867427 1.86948 -1.56556 -0.823135 0.372758 -0.428369 + -0.896729 1.76634 -1.60699 0.532001 0.687299 0.494565 + -0.91404 1.75833 -1.57116 -0.425466 0.881673 0.204038 + -0.890048 1.80422 -1.56183 -0.945887 0.308043 -0.102017 + -0.879305 1.85613 -1.5382 -0.976116 0.203773 -0.0753241 + -0.925807 1.75951 -1.57334 0.416597 0.58701 0.694166 + -0.913283 1.74562 -1.54745 -0.293624 0.672019 0.679835 + -0.889292 1.79151 -1.53811 -0.883087 0.204614 0.422245 + -0.877897 1.84482 -1.5174 -0.941031 0.000393014 0.33832 + -0.871914 1.91258 -1.5065 -0.980782 0.170719 -0.0944559 + -0.927912 1.80841 -1.56914 0.748761 -0.0563014 0.660444 + -0.955781 1.8022 -1.55238 0.356948 -0.15968 0.920375 + -0.953676 1.75329 -1.55657 0.10946 0.503488 0.85704 + -0.923794 1.74036 -1.53732 0.371164 0.92692 -0.0552796 + -0.923481 1.87607 -1.57706 0.931412 -0.00718635 0.363897 + -0.936802 1.86374 -1.55152 0.768744 -0.134296 0.625297 + -0.955874 1.85768 -1.53792 0.418948 -0.262017 0.869384 + -0.986097 1.80064 -1.54679 0.0576717 -0.220796 0.973614 + -0.988572 1.74562 -1.55695 -0.150924 0.398619 0.904613 + -0.932115 1.93356 -1.54674 0.936475 -0.0628728 0.345052 + -0.941907 1.9245 -1.52797 0.78366 -0.194031 0.590109 + -0.96098 1.91842 -1.51437 0.409649 -0.33383 0.848967 + -0.98619 1.85613 -1.53234 0.0389872 -0.292569 0.955449 + -1.01567 1.7933 -1.55082 -0.297138 -0.14412 0.943895 + -0.927522 1.94134 -1.56276 0.992671 0.10416 0.0612771 + -0.937515 1.98613 -1.51921 0.940351 -0.096075 0.326359 + -0.947307 1.97706 -1.50044 0.781325 -0.248362 0.57258 + -0.96172 1.97249 -1.49016 0.41677 -0.397877 0.817311 + -0.983264 1.91729 -1.51026 0.038501 -0.37452 0.926419 + -0.936118 1.99604 -1.53943 0.837471 0.369266 -0.402846 + -0.934046 1.99201 -1.53129 0.995022 0.0836096 0.0542295 + -0.938812 2.03584 -1.50142 0.990397 0.117413 0.0729926 + -0.942281 2.02995 -1.48935 0.936737 -0.072848 0.342369 + -0.950006 2.02281 -1.47453 0.783275 -0.227616 0.578508 + -0.949082 2.00065 -1.54913 0.554014 0.512331 -0.65619 + -0.95341 2.04363 -1.51755 0.54609 0.555685 -0.626898 + -0.940447 2.03902 -1.50785 0.838202 0.404192 -0.366124 + -0.946611 2.0652 -1.48899 0.766284 0.605202 -0.215731 + -0.944975 2.06202 -1.48256 0.906873 0.366954 0.207187 + -0.975847 2.00687 -1.56253 0.2442 0.588885 -0.770442 + -0.974527 2.04854 -1.52813 0.253542 0.62928 -0.734659 + -0.976944 2.0734 -1.50646 0.216557 0.78221 -0.584167 + -0.955827 2.06849 -1.4959 0.5129 0.716682 -0.472546 + -0.954597 2.07248 -1.48133 0.501042 0.862294 0.0735273 + -0.99642 2.00708 -1.56267 -0.296677 0.590083 -0.750856 + -0.995099 2.04874 -1.52825 -0.305563 0.630162 -0.713812 + -0.991595 2.07352 -1.50661 -0.261439 0.781612 -0.566332 + -0.990813 2.07877 -1.49456 -0.23599 0.934454 -0.266656 + -0.976162 2.07864 -1.49442 0.209394 0.939152 -0.272302 + -1.00074 1.95798 -1.5973 -0.309319 0.560863 -0.767955 + -1.01545 2.00132 -1.54956 -0.671264 0.479027 -0.565631 + -1.01011 2.04419 -1.51791 -0.662031 0.520583 -0.539174 + -1.00661 2.06898 -1.49627 -0.61735 0.681379 -0.393195 + -0.999594 2.0761 -1.48852 -0.449988 0.882143 -0.139047 + -1.01978 1.9522 -1.58419 -0.672114 0.459341 -0.580748 + -1.02503 1.99671 -1.53925 -0.881109 0.341643 -0.326996 + -1.01969 2.03959 -1.5076 -0.87834 0.3744 -0.297227 + -1.01336 2.06577 -1.48866 -0.80597 0.568286 -0.165721 + -1.00634 2.0729 -1.48091 -0.568024 0.818663 0.0844981 + -1.04108 1.89025 -1.60387 -0.878394 0.332351 -0.343462 + -1.03246 1.94612 -1.57052 -0.884638 0.332088 -0.327313 + -1.03476 1.94165 -1.56062 -0.989207 0.14568 0.0157156 + -1.02733 1.99224 -1.52935 -0.991211 0.1318 0.0113462 + -1.02151 2.03608 -1.49979 -0.98602 0.164408 0.0271031 + -1.05554 1.82437 -1.63257 -0.868041 0.324169 -0.376057 + -1.0442 1.88418 -1.5904 -0.984005 0.175679 0.0295085 + -1.04226 1.87778 -1.57615 -0.959584 0.0712467 0.272255 + -1.03281 1.93526 -1.54636 -0.966121 0.00840258 0.257954 + -1.02586 1.98743 -1.51856 -0.969797 -0.0168192 0.243333 + -1.06756 1.75407 -1.66038 -0.735671 0.414641 -0.535594 + -1.05867 1.81829 -1.61909 -0.968395 0.248755 -0.0182061 + -1.05823 1.80894 -1.59774 -0.94289 0.188163 0.27487 + -1.03468 1.86924 -1.55703 -0.861852 -0.0367449 0.505827 + -1.02724 1.92897 -1.53232 -0.875806 -0.108841 0.470232 + -1.05503 1.69481 -1.71634 -0.573101 0.490184 -0.656715 + -1.084 1.69714 -1.68879 -0.674157 0.490231 -0.552437 + -1.08388 1.74579 -1.64166 -0.91784 0.360949 -0.165182 + -1.08344 1.73643 -1.6203 -0.931969 0.222139 0.286508 + -1.05065 1.80039 -1.57863 -0.818814 0.0811334 0.568297 + -1.02788 1.62315 -1.79044 -0.289454 0.509889 -0.81008 + -1.0696 1.63577 -1.75368 -0.520732 0.518179 -0.678476 + -1.09857 1.6381 -1.72614 -0.556987 0.539667 -0.631289 + -1.10032 1.68885 -1.67007 -0.840847 0.477293 -0.25528 + -0.961734 1.6219 -1.79988 -0.010275 0.458752 -0.888505 + -0.964636 1.5442 -1.83363 0.0835684 0.379133 -0.921561 + -1.03632 1.56513 -1.82489 -0.228865 0.492134 -0.839896 + -1.07804 1.57775 -1.78813 -0.498248 0.49233 -0.713695 + -0.86351 1.54431 -1.82219 0.259389 0.267042 -0.92812 + -0.878343 1.44646 -1.8412 0.326135 0.179794 -0.928068 + -0.9756 1.49514 -1.85648 0.186908 0.35741 -0.915054 + -1.04729 1.51607 -1.84774 -0.25159 0.480981 -0.839857 + -1.0753 1.52508 -1.82485 -0.497551 0.457676 -0.736869 + -0.803685 1.53284 -1.79816 0.625118 0.186471 -0.757928 + -0.796508 1.42312 -1.80198 0.74657 -0.0126133 -0.665187 + -0.818518 1.43499 -1.81718 0.496852 0.0713508 -0.864897 + -0.779201 1.40679 -1.77117 0.858954 -0.0209808 -0.511623 + -0.814222 1.33839 -1.80653 0.640426 -0.322429 -0.697061 + -0.829046 1.35425 -1.82431 0.553095 -0.229478 -0.80089 + -0.851056 1.36611 -1.83951 0.440722 -0.141564 -0.88641 + -0.752212 1.49618 -1.6794 0.994201 -0.107525 -0.00179019 + -0.76183 1.39164 -1.74576 0.953425 -0.106439 -0.282224 + -0.79685 1.32324 -1.78111 0.788249 -0.426068 -0.443992 + -0.864718 1.29753 -1.81167 0.346095 -0.613927 -0.709445 + -0.879542 1.31338 -1.82945 0.258197 -0.505559 -0.823252 + -0.757383 1.48395 -1.636 0.944214 -0.153962 0.291127 + -0.767001 1.37943 -1.70236 0.95799 -0.27371 0.0856636 + -0.792378 1.31083 -1.73172 0.819668 -0.570517 -0.0515171 + -0.805334 1.30464 -1.76866 0.690927 -0.647656 -0.321188 + -0.86489 1.28634 -1.80025 0.319797 -0.674995 -0.664915 + -0.758081 1.56626 -1.59838 0.901097 -0.153857 0.405404 + -0.785969 1.473 -1.59462 0.820348 -0.134906 0.555724 + -0.777832 1.37883 -1.62356 0.905003 -0.270068 0.328684 + -0.80321 1.31023 -1.65291 0.785106 -0.58282 0.209593 + -0.762522 1.6324 -1.56747 0.890223 -0.112723 0.441356 + -0.786667 1.5553 -1.557 0.737383 -0.231265 0.634651 + -0.844632 1.49219 -1.52469 0.573965 -0.0973955 0.813067 + -0.814774 1.46235 -1.54842 0.74533 0.0523511 0.664638 + -0.765889 1.69882 -1.54682 0.877079 -0.106486 0.468395 + -0.787836 1.60928 -1.53775 0.698236 -0.180004 0.692868 + -0.837401 1.59422 -1.50277 0.538881 -0.204098 0.817283 + -0.836232 1.54024 -1.52202 0.541309 -0.204292 0.815628 + -0.754476 1.71575 -1.57263 0.983949 -0.010114 0.178165 + -0.769974 1.77104 -1.52429 0.803068 -0.111664 0.585331 + -0.791203 1.67569 -1.51711 0.566783 -0.134394 0.812831 + -0.832232 1.66576 -1.50159 0.583904 0.209753 0.784258 + -0.758561 1.78796 -1.55009 0.983459 0.00664217 0.181008 + -0.764901 1.85098 -1.52125 0.973265 0.0260329 0.228204 + -0.774543 1.8401 -1.50329 0.78652 -0.153738 0.598122 + -0.79282 1.75793 -1.50947 0.432875 -0.146761 0.889427 + -0.765688 1.86275 -1.54751 0.950277 0.239754 -0.198725 + -0.77504 1.9167 -1.51119 0.947341 0.270981 -0.17063 + -0.774462 1.90805 -1.49188 0.973254 0.024937 0.228373 + -0.784104 1.89718 -1.47393 0.785585 -0.20298 0.584513 + -0.797389 1.827 -1.48848 0.457099 -0.276565 0.845324 + -0.786851 1.92484 -1.53005 0.711075 0.476506 -0.517025 + -0.79177 1.97231 -1.49268 0.712307 0.491471 -0.501073 + -0.782852 1.96615 -1.47846 0.944844 0.27537 -0.177317 + -0.782274 1.95751 -1.45914 0.975602 -0.00478825 0.219495 + -0.811053 1.97734 -1.50506 0.371627 0.616783 -0.693881 + -0.812841 2.01759 -1.46816 0.372689 0.654804 -0.657522 + -0.797628 2.01363 -1.45839 0.700356 0.532257 -0.475609 + -0.78871 2.00747 -1.44416 0.942368 0.30002 -0.148092 + -0.828013 1.97864 -1.50834 -0.0387738 0.652543 -0.756759 + -0.829801 2.0189 -1.47144 -0.0453624 0.693058 -0.719453 + -0.816785 2.04146 -1.44513 0.326457 0.793863 -0.513038 + -0.801572 2.03748 -1.43537 0.647661 0.688267 -0.32684 + -0.84646 1.97652 -1.50322 -0.504384 0.566943 -0.651285 + -0.844355 2.01723 -1.4674 -0.493983 0.609319 -0.620251 + -0.828873 2.04234 -1.44754 -0.0306886 0.823086 -0.567087 + -0.829989 2.04737 -1.43556 -0.0497992 0.968762 -0.24294 + -0.817901 2.04647 -1.43316 0.25941 0.937266 -0.232892 + -0.858672 1.97117 -1.49188 -0.825384 0.387134 -0.410937 + -0.856566 2.01188 -1.45606 -0.825313 0.417327 -0.38039 + -0.843427 2.04067 -1.44351 -0.465512 0.753488 -0.464278 + -0.8385 2.04639 -1.43321 -0.312177 0.937369 -0.154544 + -0.863182 1.92239 -1.52662 -0.831654 0.370901 -0.413261 + -0.867404 1.96136 -1.47176 -0.982855 0.158866 -0.0935788 + -0.863455 2.00413 -1.44018 -0.978324 0.192189 -0.0771096 + -0.852103 2.03688 -1.43541 -0.754099 0.607915 -0.248543 + -0.86634 1.95281 -1.45605 -0.952865 -0.103577 0.285166 + -0.862391 1.99558 -1.42447 -0.946617 -0.0891164 0.309796 + -0.858992 2.02914 -1.41954 -0.910348 0.40723 0.0736918 + -0.851204 2.03807 -1.41583 -0.644971 0.725994 0.238632 + -0.847176 2.0426 -1.42511 -0.551467 0.833621 0.0309861 + -0.870505 1.90126 -1.4857 -0.947568 -0.0761338 0.310353 + -0.855242 1.94359 -1.44121 -0.718738 -0.328704 0.612674 + -0.853636 1.98831 -1.41276 -0.719562 -0.311967 0.620409 + -0.85823 2.02307 -1.40831 -0.880551 0.187933 0.435099 + -0.850442 2.032 -1.4046 -0.616316 0.552086 0.561565 + -0.859408 1.89205 -1.47086 -0.719033 -0.273932 0.638712 + -0.84165 1.93848 -1.43341 -0.378928 -0.454768 0.805977 + -0.840044 1.98319 -1.40497 -0.370014 -0.445191 0.815411 + -0.839799 2.01216 -1.39104 -0.346252 -0.125076 0.929766 + -0.849475 2.0158 -1.3966 -0.653254 -0.0181182 0.756922 + -0.8628 1.83228 -1.49721 -0.700578 -0.188892 0.688121 + -0.844815 1.82551 -1.48689 -0.365152 -0.299583 0.881427 + -0.841422 1.88527 -1.46055 -0.36923 -0.390232 0.843439 + -0.8225 1.93631 -1.43091 0.0673759 -0.486757 0.870935 + -0.824935 1.98148 -1.40299 0.0594858 -0.479681 0.875424 + -0.874195 1.77897 -1.51791 -0.631738 -0.0953256 0.769299 + -0.84636 1.76001 -1.5058 -0.325903 -0.246802 0.91262 + -0.818764 1.82256 -1.48349 0.0664525 -0.32836 0.942212 + -0.822272 1.88311 -1.45804 0.0592593 -0.417445 0.906768 + -0.884407 1.72657 -1.53545 -0.153748 0.309262 0.938466 + -0.856572 1.70761 -1.52333 -0.168963 0.220004 0.960755 + -0.820309 1.75707 -1.50241 0.02009 -0.215358 0.976329 + -0.800897 1.88754 -1.46304 0.47293 -0.349431 0.808848 + -0.894918 1.72132 -1.52531 0.600347 0.793044 0.103276 + -0.870112 1.69854 -1.51488 0.573723 0.789857 0.216722 + -0.818692 1.67483 -1.51004 0.131552 0.29778 0.945527 + -0.925882 1.77462 -1.50761 0.502066 0.602654 -0.620273 + -0.903651 1.76204 -1.48842 0.699505 0.533594 -0.475362 + -0.878845 1.73927 -1.47799 0.858185 0.486475 -0.163891 + -0.952938 1.74542 -1.54417 -0.0222476 0.995374 -0.0934673 + -0.955026 1.77968 -1.51447 0.0120528 0.665044 -0.746707 + -0.952568 1.8216 -1.47601 0.0382501 0.685138 -0.727409 + -0.931047 1.81741 -1.4704 0.518223 0.597492 -0.611922 + -0.908816 1.80483 -1.45121 0.764668 0.482294 -0.427406 + -0.987834 1.73775 -1.54454 -0.288217 0.951613 -0.106601 + -0.982022 1.77671 -1.5081 -0.244803 0.672643 -0.6983 + -0.979564 1.81863 -1.46965 -0.337055 0.650955 -0.680185 + -1.01815 1.73827 -1.56097 -0.310807 0.264974 0.912791 + -1.01475 1.72657 -1.54594 -0.445772 0.894263 -0.0397493 + -1.00893 1.76552 -1.50949 -0.55517 0.628102 -0.545229 + -0.994451 1.81507 -1.46328 -0.610959 0.590116 -0.527724 + -0.97368 1.8672 -1.42555 -0.331486 0.667198 -0.667056 + -1.05153 1.72021 -1.57018 -0.678542 0.247599 0.691574 + -1.04813 1.70852 -1.55514 -0.794529 0.488288 0.360968 + -1.01599 1.76034 -1.50129 -0.903596 0.415545 -0.104097 + -1.00151 1.80988 -1.45507 -0.930384 0.336381 -0.145717 + -0.988567 1.86364 -1.41917 -0.628021 0.570687 -0.529061 + -1.0327 1.79865 -1.56084 -0.620006 -0.0294021 0.784046 + -1.06948 1.72195 -1.58796 -0.793704 0.0978317 0.600385 + -1.08878 1.67161 -1.60646 -0.855911 0.180056 0.484764 + -1.04836 1.68864 -1.53604 -0.890805 0.13957 0.43242 + -1.0069 1.85779 -1.53428 -0.33282 -0.248125 0.909761 + -1.02393 1.86315 -1.54429 -0.675669 -0.151786 0.72141 + -1.00397 1.91895 -1.51221 -0.346819 -0.336182 0.875613 + -1.01649 1.92288 -1.51957 -0.680799 -0.233301 0.694322 + -0.984005 1.97135 -1.48604 0.0314484 -0.444111 0.895419 + -0.999619 1.97261 -1.48749 -0.344846 -0.403809 0.84736 + -1.01214 1.97655 -1.49485 -0.686794 -0.286449 0.668028 + -1.0203 1.98114 -1.50452 -0.877307 -0.151552 0.455372 + -0.964419 2.01823 -1.46426 0.407492 -0.389519 0.825969 + -0.982001 2.01733 -1.46101 0.0373872 -0.434607 0.899844 + -0.997615 2.0186 -1.46245 -0.34794 -0.391279 0.851962 + -1.00749 2.02171 -1.46826 -0.680776 -0.273483 0.679523 + -1.01565 2.02629 -1.47792 -0.875941 -0.130227 0.464509 + -0.955171 2.05069 -1.45916 0.720065 0.0675929 0.690606 + -0.965424 2.04743 -1.45186 0.402204 -0.0619828 0.913449 + -0.983006 2.04653 -1.44862 0.0337902 -0.108413 0.993531 + -0.994161 2.04743 -1.44967 -0.306286 -0.0729372 0.949141 + -1.00404 2.05053 -1.45548 -0.635883 0.0332925 0.771067 + -0.947446 2.05783 -1.47398 0.867983 0.213795 0.448215 + -0.956111 2.06645 -1.46899 0.610177 0.586505 0.532631 + -0.960629 2.06227 -1.46033 0.546666 0.49236 0.677302 + -0.970882 2.059 -1.45302 0.286682 0.355062 0.8898 + -0.953641 2.07063 -1.47757 0.593337 0.72326 0.353335 + -0.967214 2.07131 -1.46621 0.265496 0.845889 0.462584 + -0.971731 2.06713 -1.45755 0.221329 0.705967 0.672773 + -0.982013 2.06661 -1.45565 -0.00177327 0.712973 0.701189 + -0.981163 2.05847 -1.45113 0.0549696 0.337265 0.939804 + -0.970723 2.07549 -1.47471 0.179435 0.915809 0.3593 + -0.969766 2.07362 -1.47095 0.15416 0.909084 0.387041 + -0.987789 2.06842 -1.45905 -0.153577 0.806631 0.570754 + -0.992319 2.05937 -1.45218 -0.229001 0.414255 0.880881 + -0.963814 2.07577 -1.48824 0.367629 0.919463 -0.139413 + -0.972252 2.07813 -1.48049 0.234788 0.943636 0.233294 + -0.992911 2.07364 -1.47028 -0.174837 0.875338 0.450795 + -0.990342 2.07074 -1.46379 -0.163391 0.857355 0.488104 + -0.998095 2.06118 -1.45558 -0.422733 0.510091 0.749069 + -0.984601 2.08101 -1.48667 -0.0231295 0.998052 0.0579329 + -0.993381 2.07834 -1.48062 -0.216603 0.949029 0.228971 + -0.99444 2.07629 -1.47606 -0.207986 0.89141 0.402654 + -1.0074 2.07084 -1.47634 -0.605436 0.731746 0.313041 + -1.00647 2.06735 -1.46898 -0.589308 0.661583 0.463707 + -1.00391 2.06445 -1.46249 -0.541286 0.599912 0.589165 + -1.00985 2.05379 -1.4624 -0.810502 0.145974 0.567255 + -1.01517 2.06224 -1.48085 -0.908251 0.392521 0.144941 + -1.01424 2.05876 -1.47348 -0.897053 0.265032 0.353631 + -1.02004 2.03125 -1.48901 -0.965931 0.00602489 0.258728 + -1.10274 1.68609 -1.6388 -0.928522 0.286858 0.235709 + -1.12121 1.65122 -1.66364 -0.900856 0.39323 0.183924 + -1.1061 1.64277 -1.62382 -0.852629 0.243119 0.462511 + -1.08274 1.6196 -1.57935 -0.803775 0.207646 0.55752 + -1.06543 1.64843 -1.56198 -0.836344 0.0856898 0.541467 + -1.11879 1.65398 -1.69492 -0.724962 0.575102 -0.379063 + -1.14137 1.61459 -1.68087 -0.902482 0.424152 0.07497 + -1.12625 1.60613 -1.64105 -0.84108 0.30273 0.448261 + -1.10805 1.58706 -1.76083 -0.511412 0.5276 -0.678303 + -1.12827 1.60294 -1.7296 -0.649726 0.528113 -0.546766 + -1.14801 1.59761 -1.70914 -0.78781 0.5466 -0.283872 + -1.16836 1.5483 -1.68293 -0.938686 0.291499 0.184111 + -1.10532 1.53438 -1.79755 -0.484818 0.473429 -0.735402 + -1.13309 1.54353 -1.7746 -0.606646 0.44187 -0.660857 + -1.15283 1.53819 -1.75413 -0.794711 0.347706 -0.497529 + -1.17501 1.53132 -1.71119 -0.992373 0.118036 -0.0355381 + -1.09534 1.48847 -1.83271 -0.515778 0.38929 -0.763169 + -1.12311 1.49763 -1.80977 -0.609845 0.349881 -0.711107 + -1.15272 1.49406 -1.77795 -0.807926 0.224801 -0.54472 + -1.17489 1.48719 -1.73501 -0.957577 0.110455 -0.266168 + -1.17284 1.51873 -1.66879 -0.9567 0.181032 0.227931 + -1.07225 1.49111 -1.84717 -0.506229 0.397058 -0.765557 + -1.06557 1.4637 -1.86328 -0.488367 0.259635 -0.833119 + -1.11164 1.45681 -1.83562 -0.643574 0.189797 -0.741478 + -1.14125 1.45325 -1.8038 -0.765504 0.0850554 -0.637784 + -1.16209 1.43471 -1.77781 -0.893668 -0.0357329 -0.447304 + -1.04423 1.48211 -1.87005 -0.218264 0.443524 -0.86928 + -1.04247 1.46635 -1.87773 -0.272638 0.0838189 -0.958458 + -1.00107 1.43371 -1.88308 0.105073 0.110682 -0.988286 + -1.05129 1.43838 -1.87943 -0.24013 0.267479 -0.933163 + -1.09737 1.43149 -1.85176 -0.630431 0.0146473 -0.776107 + -1.00247 1.46289 -1.8726 0.202006 0.383679 -0.901101 + -1.00071 1.44711 -1.88027 0.207208 0.318562 -0.924977 + -0.905572 1.40079 -1.86012 0.273116 0.129672 -0.953202 + -1.00389 1.40927 -1.88379 0.091356 -0.043122 -0.994884 + -1.05412 1.41394 -1.88015 -0.361046 -0.127194 -0.923833 + -0.905215 1.41419 -1.85732 0.302473 0.209436 -0.929864 + -0.879577 1.38728 -1.85458 0.391346 0.0133918 -0.920146 + -0.977897 1.39575 -1.87826 0.162585 -0.14137 -0.976515 + -1.03086 1.39979 -1.88477 -0.114306 -0.409271 -0.905225 + -0.909016 1.37928 -1.86229 0.219388 -0.203368 -0.954207 + -0.880494 1.35811 -1.84722 0.260736 -0.32044 -0.910678 + -0.91712 1.35833 -1.85396 0.0698016 -0.443323 -0.89364 + -0.943902 1.36906 -1.86388 -0.0627396 -0.52475 -0.848941 + -0.935798 1.39002 -1.87222 0.0335625 -0.449008 -0.892897 + -0.916168 1.3136 -1.83618 -0.0729311 -0.532352 -0.843375 + -0.960586 1.34898 -1.84185 -0.287512 -0.601493 -0.745347 + -0.967246 1.38002 -1.86474 -0.232559 -0.636904 -0.73503 + -0.996414 1.38162 -1.86005 -0.0993971 -0.755664 -0.647373 + -0.988765 1.39406 -1.87874 0.0326634 -0.61536 -0.787569 + -1.05268 1.39308 -1.8694 -0.307762 -0.665633 -0.679864 + -1.07593 1.40723 -1.86478 -0.539408 -0.326004 -0.776377 + -1.06033 1.38065 -1.85071 -0.252805 -0.744048 -0.618452 + -1.09939 1.39036 -1.83797 -0.549298 -0.490807 -0.676299 + -1.12082 1.41464 -1.82495 -0.717299 -0.125166 -0.685431 + -1.06981 1.35429 -1.81241 -0.23753 -0.775376 -0.585125 + -1.10887 1.36402 -1.79966 -0.471611 -0.630467 -0.616518 + -1.14166 1.3961 -1.79896 -0.72833 -0.303682 -0.614257 + -1.1536 1.37329 -1.7689 -0.797641 -0.374192 -0.473022 + -1.16897 1.41515 -1.74191 -0.967478 -0.131729 -0.215948 + -1.02125 1.36435 -1.83674 -0.175971 -0.734549 -0.655341 + -1.01555 1.35052 -1.81807 -0.107532 -0.847897 -0.519141 + -1.06411 1.34048 -1.79374 -0.130243 -0.877904 -0.460783 + -1.12081 1.34121 -1.76961 -0.391113 -0.683013 -0.616866 + -0.99208 1.36275 -1.84143 -0.224003 -0.731134 -0.644411 + -0.993649 1.35055 -1.82362 -0.224075 -0.842317 -0.490196 + -1.00441 1.33839 -1.79689 -0.0287457 -0.936412 -0.349722 + -1.01752 1.33057 -1.77356 0.129109 -0.99008 -0.0554308 + -1.07722 1.33266 -1.77041 -0.118343 -0.865469 -0.486783 + -0.98393 1.35994 -1.8427 -0.31843 -0.674411 -0.666162 + -0.985499 1.34774 -1.8249 -0.414596 -0.790654 -0.450529 + -0.98251 1.3384 -1.80245 -0.215971 -0.95673 -0.194997 + -0.974722 1.33694 -1.78108 -0.0578647 -0.982442 0.17737 + -0.963161 1.32996 -1.82532 -0.533246 -0.708516 -0.462226 + -0.975116 1.33601 -1.80524 -0.504604 -0.860644 -0.0683099 + -0.918743 1.29457 -1.81965 -0.224243 -0.692597 -0.685583 + -0.952777 1.31823 -1.80566 -0.666774 -0.741382 -0.0759341 + -0.967328 1.33454 -1.78386 -0.495941 -0.83553 0.2365 + -0.918915 1.28339 -1.80822 -0.344704 -0.832042 -0.434609 + -0.94631 1.31106 -1.78594 -0.7073 -0.680454 0.191596 + -0.941823 1.32009 -1.7633 -0.742413 -0.612218 0.27205 + -0.962841 1.34356 -1.76123 -0.45567 -0.809372 0.370515 + -0.912448 1.27623 -1.78851 -0.464107 -0.851731 -0.243226 + -0.905776 1.26502 -1.76626 -0.525256 -0.844972 -0.100638 + -0.908231 1.27295 -1.75308 -0.852086 -0.513351 0.102083 + -0.944279 1.32802 -1.75012 -0.77189 -0.60442 0.197136 + -0.873374 1.26773 -1.7878 0.120622 -0.762145 -0.63607 + -0.866702 1.25654 -1.76555 0.179958 -0.967861 -0.175672 + -0.853746 1.26272 -1.72861 0.36219 -0.930236 -0.0589842 + -0.902844 1.26036 -1.73079 -0.455028 -0.882391 -0.119733 + -0.906507 1.2704 -1.74915 -0.906012 -0.423252 -0.000438769 + -0.854407 1.25904 -1.69102 0.400661 -0.916198 0.00725012 + -0.903505 1.25667 -1.6932 -0.427851 -0.898359 -0.0994688 + -0.943571 1.31249 -1.6796 -0.81202 -0.569409 -0.128053 + -0.933747 1.30773 -1.71638 -0.830983 -0.537681 -0.142713 + -0.93741 1.31778 -1.73474 -0.82851 -0.538919 -0.152109 + -0.824142 1.30322 -1.61679 0.635607 -0.656789 0.40575 + -0.875339 1.25203 -1.6549 0.218927 -0.960509 0.171738 + -0.906429 1.25446 -1.66273 -0.443213 -0.896406 -0.00427416 + -0.828588 1.32435 -1.58429 0.604075 -0.563931 0.563094 + -0.893779 1.26871 -1.61192 0.138584 -0.882422 0.449584 + -0.924869 1.27115 -1.61975 -0.561155 -0.82311 0.0871518 + -0.946496 1.31028 -1.64912 -0.801549 -0.580988 -0.14132 + -0.806637 1.36818 -1.57736 0.752837 -0.299582 0.586078 + -0.888762 1.33938 -1.5282 0.446472 -0.501837 0.740826 + -0.898225 1.28984 -1.57942 0.236675 -0.79988 0.551522 + -0.931525 1.27846 -1.59554 -0.446088 -0.86093 0.244549 + -0.944885 1.30645 -1.6432 -0.818586 -0.564125 -0.108075 + -0.866811 1.38322 -1.52127 0.533514 -0.259367 0.805041 + -0.915406 1.33821 -1.5161 0.146542 -0.625799 0.766095 + -0.898161 1.30431 -1.5557 0.548481 -0.695978 0.463447 + -0.931461 1.29292 -1.57181 -0.134422 -0.885844 0.444084 + -0.89667 1.41305 -1.49754 0.483713 -0.132438 0.865149 + -0.926071 1.48754 -1.48244 0.363866 -0.0126134 0.931366 + -0.958812 1.47239 -1.46701 0.222013 0.168505 0.960373 + -0.929411 1.3979 -1.48212 0.464505 -0.134078 0.875361 + -0.917671 1.53559 -1.47976 0.320139 -0.170836 0.93184 + -0.992002 1.49626 -1.47072 -0.106889 0.113836 0.987733 + -0.975596 1.43157 -1.46301 0.148548 0.0180906 0.98874 + -0.985385 1.40246 -1.46142 0.133275 0.00861454 0.991042 + -0.9392 1.36879 -1.48052 0.529687 -0.136329 0.837166 + -0.909642 1.57166 -1.47418 0.323231 -0.241514 0.914982 + -0.967667 1.5725 -1.4625 -0.132686 -0.192944 0.972197 + -0.975695 1.53644 -1.46807 -0.0810722 -0.07865 0.9936 + -1.02872 1.5178 -1.48609 -0.506208 0.164417 0.846594 + -1.00879 1.45545 -1.46672 -0.239736 0.115339 0.963962 + -0.849331 1.64797 -1.4825 0.606455 -0.0838512 0.790684 + -0.921571 1.62542 -1.45391 0.311314 -0.261905 0.913504 + -0.96191 1.62178 -1.44692 -0.148253 -0.293165 0.944497 + -0.99954 1.58436 -1.4781 -0.583804 -0.0313831 0.811288 + -1.01241 1.55797 -1.48345 -0.520782 0.112509 0.846243 + -0.89595 1.71482 -1.44879 0.651254 -0.120181 0.749283 + -0.924839 1.70033 -1.42998 0.425196 -0.289024 0.857714 + -0.965178 1.6967 -1.42299 -0.10667 -0.376135 0.920404 + -0.993784 1.63365 -1.46253 -0.644593 -0.203386 0.736976 + -1.03451 1.61165 -1.51412 -0.76567 0.0762977 0.638692 + -0.878852 1.73262 -1.46788 0.867103 0.180607 0.464234 + -0.899094 1.78978 -1.42827 0.925539 -0.0306324 0.377411 + -0.911742 1.78053 -1.41565 0.698934 -0.269162 0.662603 + -0.940631 1.76602 -1.39685 0.447424 -0.394469 0.802624 + -0.899087 1.79644 -1.43839 0.936939 0.327141 -0.122981 + -0.906243 1.84754 -1.39768 0.951956 0.259521 -0.16257 + -0.906249 1.84265 -1.39025 0.942178 -0.120714 0.312617 + -0.918897 1.8334 -1.37762 0.707862 -0.371766 0.600601 + -0.915972 1.85595 -1.4105 0.774524 0.461932 -0.432125 + -0.911958 1.89358 -1.35878 0.950607 0.262781 -0.165201 + -0.911964 1.88869 -1.35134 0.943951 -0.153564 0.292189 + -0.921495 1.8817 -1.34177 0.713127 -0.417147 0.563417 + -0.940133 1.82274 -1.3638 0.475995 -0.476833 0.738959 + -0.932314 1.86519 -1.42462 0.52505 0.602032 -0.601564 + -0.935626 1.90917 -1.38255 0.514935 0.630654 -0.580618 + -0.919284 1.89993 -1.36844 0.773918 0.477572 -0.415903 + -0.923294 1.9384 -1.32966 0.767415 0.509108 -0.389721 + -0.915968 1.93204 -1.31999 0.95007 0.28164 -0.134336 + -0.953835 1.86938 -1.43022 0.0313139 0.700647 -0.712821 + -0.95189 1.91233 -1.3868 0.0400432 0.730366 -0.681882 + -0.952452 1.94884 -1.34504 0.0329559 0.76326 -0.645251 + -0.936187 1.94568 -1.34079 0.520211 0.657447 -0.545109 + -0.971735 1.91015 -1.38211 -0.330231 0.696033 -0.637562 + -0.968108 1.94712 -1.34135 -0.322806 0.729585 -0.602911 + -0.950922 1.97011 -1.31884 0.0509809 0.857286 -0.512311 + -0.939359 1.96785 -1.31586 0.480082 0.770957 -0.418506 + -0.926466 1.96057 -1.30472 0.729153 0.6365 -0.251403 + -0.982981 1.90748 -1.37727 -0.620831 0.594702 -0.510782 + -0.979354 1.94445 -1.3365 -0.620038 0.623844 -0.475785 + -0.966579 1.96839 -1.31515 -0.302998 0.828806 -0.470397 + -0.96174 1.9735 -1.30556 -0.206415 0.96463 -0.163957 + -0.952584 1.9745 -1.30772 0.0363779 0.986315 -0.16081 + -0.993755 1.85983 -1.41314 -0.93619 0.299033 -0.184735 + -0.988169 1.90367 -1.37124 -0.936612 0.299991 -0.181005 + -0.983448 1.94144 -1.33175 -0.932314 0.326099 -0.156365 + -0.974644 1.9664 -1.31195 -0.572853 0.746425 -0.338658 + -0.969805 1.9715 -1.30236 -0.434444 0.89926 -0.0509001 + -1.00188 1.79872 -1.4398 -0.984069 0.0783702 0.159582 + -0.994129 1.84866 -1.39787 -0.99149 0.0328186 0.125979 + -0.988447 1.89522 -1.35972 -0.993575 0.0199373 0.111409 + -0.983726 1.933 -1.32021 -0.990769 0.0350772 0.130948 + -0.978738 1.9634 -1.30719 -0.874648 0.484746 -0.00345629 + -1.01623 1.74048 -1.4822 -0.948702 0.168944 0.26725 + -0.995673 1.77835 -1.41304 -0.914287 -0.11021 0.389786 + -0.989565 1.83369 -1.3782 -0.927134 -0.14191 0.346821 + -0.983883 1.88026 -1.34004 -0.927613 -0.177096 0.328893 + -0.980124 1.92119 -1.3047 -0.926822 -0.161084 0.339194 + -1.01002 1.72012 -1.45543 -0.884363 -0.0721925 0.461183 + -0.986358 1.70191 -1.42978 -0.597492 -0.306496 0.740988 + -0.983694 1.76718 -1.39836 -0.637187 -0.33585 0.693684 + -0.977586 1.82251 -1.36353 -0.632741 -0.390838 0.668494 + -0.974832 1.87181 -1.32896 -0.641643 -0.441238 0.627378 + -1.01744 1.65185 -1.48818 -0.816826 -0.104458 0.567348 + -0.962515 1.76197 -1.39159 -0.0408746 -0.466521 0.883565 + -0.962017 1.81868 -1.35854 -0.0486911 -0.536721 0.842354 + -1.04738 1.58525 -1.51946 -0.709079 0.214903 0.671583 + -1.06727 1.53607 -1.52473 -0.704163 0.22816 0.672382 + -1.04955 1.45545 -1.48666 -0.551179 0.162455 0.818419 + -1.10264 1.57041 -1.58462 -0.773551 0.281002 0.568029 + -1.1312 1.49015 -1.58202 -0.801776 0.204968 0.561376 + -1.0881 1.47372 -1.5253 -0.70442 0.195132 0.682434 + -1.08911 1.40826 -1.51204 -0.745394 0.0500508 0.664743 + -1.06464 1.41698 -1.4888 -0.596013 0.102991 0.796342 + -1.13073 1.57656 -1.62691 -0.802559 0.333469 0.494669 + -1.15929 1.49629 -1.62432 -0.877949 0.0822719 0.471633 + -1.16822 1.44519 -1.65465 -0.962054 -0.0510071 0.26805 + -1.16132 1.42747 -1.62544 -0.952895 -0.0187484 0.30272 + -1.14646 1.44239 -1.58743 -0.886167 0.0826178 0.455941 + -1.18177 1.46764 -1.69911 -0.999475 -0.00395709 0.0321609 + -1.16971 1.38401 -1.71198 -0.980138 -0.195089 -0.0356455 + -1.16281 1.36629 -1.68276 -0.954273 -0.243047 0.174045 + -1.15087 1.38488 -1.61849 -0.902374 -0.258588 0.344752 + -1.13601 1.3998 -1.58048 -0.859078 -0.156505 0.487331 + -1.15435 1.34214 -1.73898 -0.838713 -0.427998 -0.336717 + -1.15551 1.33786 -1.69304 -0.908353 -0.40434 0.106789 + -1.14358 1.35647 -1.62877 -0.842491 -0.434269 0.318779 + -1.12177 1.38211 -1.56183 -0.849258 -0.147795 0.50687 + -1.10336 1.42596 -1.53069 -0.776559 0.0606686 0.627116 + -1.14122 1.31857 -1.73434 -0.532018 -0.776227 -0.338274 + -1.14238 1.31428 -1.68841 -0.53909 -0.8226 0.180862 + -1.13185 1.33538 -1.63701 -0.478529 -0.805413 0.349743 + -1.123 1.3416 -1.60631 -0.49341 -0.837358 0.235324 + -1.13473 1.36269 -1.59807 -0.932562 -0.184748 0.310156 + -1.09764 1.31002 -1.73515 -0.0600342 -0.968137 -0.24312 + -1.08148 1.30923 -1.71925 0.173325 -0.957252 -0.231574 + -1.09911 1.30895 -1.69599 0.0262624 -0.986821 0.159673 + -1.08858 1.33004 -1.64459 0.0642073 -0.951029 0.302361 + -1.08388 1.33706 -1.61943 0.00117658 -0.99386 0.110644 + -1.01234 1.33979 -1.75085 0.268562 -0.959749 0.0821983 + -0.998055 1.34162 -1.73825 0.217022 -0.957711 -0.188919 + -1.08335 1.31185 -1.72254 0.428468 -0.728845 -0.534041 + -0.969543 1.34615 -1.75837 0.0101574 -0.956433 0.291774 + -0.965886 1.35 -1.74384 -0.0307256 -0.999527 -0.00144084 + -0.995594 1.34006 -1.73234 0.173426 -0.844825 -0.506155 + -0.959184 1.34741 -1.74669 -0.5284 -0.828906 0.183597 + -0.963425 1.34844 -1.73791 -0.140448 -0.919039 -0.368294 + -0.99372 1.33744 -1.72904 0.0845933 -0.640538 -0.763253 + -0.990595 1.33114 -1.72509 0.13701 -0.886124 -0.442733 + -1.00822 1.33085 -1.70182 0.19308 -0.964863 0.17821 + -0.95694 1.34591 -1.74022 -0.612021 -0.784068 -0.103283 + -0.960751 1.3446 -1.73259 -0.203137 -0.7347 -0.647264 + -0.957626 1.33829 -1.72863 -0.22033 -0.861657 -0.457167 + -0.960991 1.33745 -1.70855 -0.107104 -0.993787 0.0302585 + -1.01772 1.33528 -1.66846 0.135129 -0.971788 0.19331 + -0.942035 1.32651 -1.74363 -0.811014 -0.581756 0.0617796 + -0.954266 1.34206 -1.73489 -0.641603 -0.690389 -0.334229 + -0.951365 1.33587 -1.72993 -0.6809 -0.684109 -0.261477 + -0.95473 1.33503 -1.70984 -0.621785 -0.775724 -0.107869 + -0.970486 1.34187 -1.67517 -0.0865242 -0.99325 0.0772496 + -0.940311 1.32397 -1.7397 -0.825138 -0.555887 -0.100681 + -0.964555 1.33979 -1.67305 -0.588996 -0.805096 -0.070021 + -0.975047 1.343 -1.65421 -0.106749 -0.994286 0.000790287 + -0.969116 1.34092 -1.65209 -0.563581 -0.810951 -0.15727 + -0.975156 1.34222 -1.6462 -0.256534 -0.918018 -0.302379 + -1.01302 1.3423 -1.6433 0.0684837 -0.994645 0.0774064 + -0.967505 1.3371 -1.64616 -0.647959 -0.704487 -0.289564 + -0.972093 1.32925 -1.62651 -0.345998 -0.785019 -0.513839 + -1.00627 1.33112 -1.61759 -0.16015 -0.833879 -0.528202 + -1.01313 1.34151 -1.63528 -0.0436079 -0.956924 -0.287044 + -0.95154 1.31375 -1.61899 -0.655142 -0.70744 -0.265174 + -0.964442 1.32413 -1.62648 -0.415925 -0.775437 -0.475083 + -0.966954 1.3028 -1.59418 -0.0525192 -0.818805 -0.571665 + -1.00113 1.30466 -1.58525 -0.226532 -0.810941 -0.539497 + -0.946222 1.29217 -1.58454 -0.386929 -0.921374 -0.0368235 + -0.959124 1.30255 -1.59204 -0.133294 -0.838926 -0.52767 + -0.965185 1.29072 -1.57667 0.00321453 -0.875983 -0.482332 + -0.99787 1.29022 -1.56055 -0.215064 -0.876743 -0.430197 + -1.05856 1.31114 -1.56816 -0.34662 -0.865903 -0.360648 + -0.939566 1.30239 -1.55634 -0.38153 -0.701608 0.601815 + -0.957355 1.29046 -1.57453 -0.0240168 -0.983625 0.178618 + -0.961993 1.29199 -1.57414 0.182617 -0.817752 0.545832 + -0.964165 1.28973 -1.57497 0.433743 -0.878655 -0.199582 + -0.996851 1.28924 -1.55885 -0.0132995 -0.987392 -0.157734 + -0.924805 1.30314 -1.54361 -0.13515 -0.744394 0.65392 + -0.921874 1.33846 -1.52023 -0.14568 -0.778188 0.610901 + -0.946034 1.30264 -1.56046 -0.34344 -0.565627 0.749743 + -0.950673 1.30417 -1.56006 0.0581413 -0.778074 0.625476 + -0.95556 1.31203 -1.54408 0.373475 -0.801729 0.466634 + -0.977756 1.2971 -1.54699 0.516219 -0.732936 0.443085 + -0.979928 1.29485 -1.54782 0.413325 -0.843953 0.341914 + -1.03297 1.28272 -1.52354 -0.189174 -0.978299 0.084523 + -1.05531 1.2967 -1.54347 -0.565358 -0.794439 -0.221892 + -0.926761 1.34633 -1.50425 -0.144246 -0.947473 0.285463 + -0.965624 1.33399 -1.49664 0.395119 -0.790783 0.467486 + -0.987821 1.31907 -1.49956 0.489562 -0.730359 0.476345 + -1.01605 1.28833 -1.51252 0.288612 -0.884435 0.366711 + -1.04665 1.2969 -1.50157 -0.532196 -0.687789 0.493673 + -0.936756 1.35346 -1.48437 0.581016 -0.413242 0.701179 + -0.975619 1.34114 -1.47677 0.380523 -0.763947 0.52114 + -0.99798 1.32681 -1.47853 0.436767 -0.698445 0.566931 + -1.02621 1.29607 -1.4915 0.0172932 -0.790759 0.611884 + -0.995526 1.34064 -1.46447 0.2745 -0.432883 0.85864 + -1.01789 1.32631 -1.46624 -0.0142333 -0.495639 0.868412 + -1.03833 1.32715 -1.47631 -0.540477 -0.35733 0.761708 + -1.06899 1.31088 -1.52149 -0.716384 -0.627478 0.305066 + -0.99797 1.35597 -1.46064 0.141579 -0.118927 0.982757 + -1.02708 1.35498 -1.46118 -0.341749 -0.06788 0.937337 + -1.06688 1.337 -1.49782 -0.713885 -0.278871 0.642339 + -1.09143 1.34996 -1.52572 -0.79421 -0.296403 0.530449 + -1.09355 1.32383 -1.54939 -0.716845 -0.681378 0.147839 + -1.01449 1.40147 -1.46196 -0.216498 0.182084 0.959153 + -1.05562 1.36483 -1.48268 -0.632206 -0.0377527 0.77388 + -1.02388 1.41698 -1.46886 -0.355908 0.101447 0.928998 + -1.06501 1.38033 -1.48959 -0.620866 -0.0466155 0.78253 + -1.08948 1.37162 -1.51283 -0.725051 -0.191942 0.661406 + -1.12372 1.36045 -1.57473 -0.840676 -0.361587 0.403136 + -1.10928 1.33905 -1.57589 -0.644088 -0.754409 0.12656 + -1.12029 1.3413 -1.59924 -0.509695 -0.845123 0.161175 + -1.08116 1.33676 -1.61236 -0.137504 -0.971094 -0.195111 + -1.0743 1.32636 -1.59466 -0.288154 -0.882814 -0.370955 + -0.942731 1.87105 -1.32796 0.470613 -0.53673 0.700317 + -0.959263 1.86798 -1.32398 -0.0407287 -0.603519 0.796307 + -0.971073 1.91275 -1.29362 -0.629854 -0.437929 0.641484 + -0.925505 1.92119 -1.30457 0.708799 -0.410987 0.573318 + -0.942258 1.91278 -1.29366 0.474868 -0.529428 0.702998 + -0.95879 1.90972 -1.28968 -0.0502332 -0.596344 0.801156 + -0.968843 1.93965 -1.27537 -0.59362 -0.156437 0.789394 + -0.915973 1.92818 -1.31413 0.9417 -0.13543 0.307993 + -0.921247 1.95218 -1.29197 0.878811 0.0971569 0.467175 + -0.928037 1.94721 -1.28517 0.67805 -0.143793 0.720813 + -0.94479 1.9388 -1.27427 0.429764 -0.253191 0.866716 + -0.956559 1.93662 -1.27144 -0.0317741 -0.296374 0.954543 + -0.921242 1.95604 -1.29783 0.888691 0.458377 0.0109046 + -0.928256 1.96346 -1.29133 0.661668 0.710279 0.240207 + -0.928259 1.9612 -1.2879 0.651468 0.469038 0.596316 + -0.935049 1.95622 -1.2811 0.489499 0.261265 0.831944 + -0.93348 1.96797 -1.29823 0.54589 0.837766 0.0123134 + -0.937365 1.96768 -1.28845 0.270531 0.86261 0.427454 + -0.937368 1.96542 -1.28502 0.262033 0.698448 0.665965 + -0.947165 1.96051 -1.27864 0.140392 0.633998 0.760485 + -0.944847 1.95131 -1.27473 0.337241 0.215795 0.916352 + -0.94102 1.97224 -1.30474 0.383802 0.918964 -0.0905595 + -0.944905 1.97195 -1.29496 0.10464 0.94009 0.324471 + -0.951054 1.97051 -1.29305 0.0350931 0.868002 0.495319 + -0.953314 1.95908 -1.27673 0.0168759 0.606118 0.795196 + -0.956616 1.94912 -1.2719 -0.0406626 0.213546 0.976086 + -0.954131 1.97383 -1.29744 0.236857 0.933192 0.270279 + -0.963575 1.96415 -1.28342 -0.26646 0.715367 0.645948 + -0.960497 1.96084 -1.27902 -0.193969 0.652721 0.732347 + -0.963799 1.9509 -1.2742 -0.405418 0.292556 0.866053 + -0.975262 1.94566 -1.28323 -0.861922 0.0563489 0.5039 + -0.963287 1.97281 -1.29528 -0.1506 0.940355 0.305045 + -0.965681 1.97106 -1.2925 -0.311302 0.810207 0.496644 + -0.972324 1.96381 -1.29113 -0.71808 0.511063 0.472415 + -0.970218 1.95691 -1.28205 -0.654836 0.419876 0.628405 + -0.978864 1.95746 -1.29875 -0.932867 0.239561 0.269016 + -0.972199 1.96974 -1.29958 -0.659069 0.721789 0.211303 + -0.789559 1.94929 -1.44557 0.797223 -0.245734 0.551407 + -0.806352 1.93965 -1.43468 0.475559 -0.412121 0.777174 + -0.788254 2.00064 -1.42894 0.972321 0.0246218 0.23235 + -0.795539 1.99244 -1.41536 0.787449 -0.233208 0.57056 + -0.808788 1.98483 -1.40677 0.478136 -0.401277 0.781257 + -0.813198 2.01283 -1.39175 0.406694 -0.104484 0.90757 + -0.82469 2.01045 -1.38907 0.0617445 -0.165163 0.984332 + -0.795223 2.03311 -1.42523 0.855236 0.517339 -0.0305339 + -0.794767 2.02627 -1.40999 0.883444 0.28071 0.375139 + -0.799949 2.02044 -1.40034 0.713175 0.0680769 0.697673 + -0.809004 2.04415 -1.42744 0.459793 0.881303 -0.109063 + -0.802656 2.03978 -1.4173 0.609237 0.770695 0.186706 + -0.802389 2.03578 -1.4084 0.586213 0.66012 0.469675 + -0.807571 2.02994 -1.39874 0.454208 0.468879 0.757527 + -0.822531 2.04825 -1.42455 0.0694523 0.991485 0.110152 + -0.813634 2.04593 -1.41883 0.246162 0.940865 0.232762 + -0.813367 2.04193 -1.40993 0.219155 0.818463 0.531121 + -0.819485 2.04025 -1.40646 0.0644264 0.872314 0.484683 + -0.817687 2.0367 -1.40026 0.173607 0.754034 0.633477 + -0.831042 2.04727 -1.42219 -0.0937982 0.973253 0.209717 + -0.837159 2.04559 -1.41873 -0.214142 0.939507 0.26734 + -0.841188 2.04106 -1.40945 -0.283642 0.856168 0.431883 + -0.83939 2.03751 -1.40323 -0.243246 0.769416 0.590619 + -0.825435 2.03225 -1.39523 0.0387021 0.597015 0.801296 + -0.815319 2.0255 -1.39372 0.278633 0.332372 0.901051 + -0.845322 2.02775 -1.39775 -0.484795 0.411847 0.771593 + -0.83427 2.03325 -1.39638 -0.146429 0.66012 0.73675 + -0.835646 2.02411 -1.39219 -0.227252 0.297854 0.927167 + -0.826811 2.02311 -1.39104 0.022814 0.272858 0.961784 + 0 1.88767 -3.35525 0.954836 0.139621 -0.262288 + -0.00609 1.89928 -3.38721 0.73586 0.391916 -0.552188 + -0.00609 1.92264 -3.37029 0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 0.995304 0.0615783 -0.0746866 + -0.00609 1.93619 -3.35816 0.804944 0.379203 -0.456367 + 0 1.92457 -3.32621 0.995095 0.069045 -0.0708434 + 0 1.97685 -3.27268 0.992394 0.102252 -0.0685482 + -0.00609 1.98847 -3.30463 0.876866 0.357759 -0.321114 + -0.014034 2.05323 -3.24402 0.847172 0.410905 -0.336834 + 0 2.00459 -3.23674 0.987841 0.135558 -0.0761145 + -0.036542 2.02576 -3.30766 0.469584 0.580569 -0.665154 + -0.044486 2.09052 -3.24705 0.596458 0.635622 -0.490125 + -0.014034 2.08098 -3.20808 0.881133 0.428775 -0.199391 + -0.023387 2.12143 -3.14955 0.815642 0.528358 -0.235726 + -0.011587 2.09962 -3.13161 0.964855 0.259286 -0.0427265 + 0 1.98306 -3.19152 0.996986 -0.00648198 0.0773058 + -0.049274 1.91604 -3.38694 0.229826 0.457821 -0.858825 + -0.079725 2.04251 -3.30739 0.188988 0.587024 -0.787202 + -0.0805 2.12506 -3.23831 0.409341 0.71635 -0.565051 + -0.03972 2.11125 -3.19831 0.626549 0.689362 -0.363617 + -0.049073 2.1517 -3.13979 0.618566 0.697315 -0.362115 + -0.136609 2.08013 -3.29146 0.0487676 0.600445 -0.798177 + -0.137384 2.16267 -3.22238 0.22175 0.733824 -0.642129 + -0.075734 2.14578 -3.18957 0.547429 0.728775 -0.411349 + -0.075698 2.17553 -3.13363 0.573402 0.726165 -0.379335 + -0.070733 2.20765 -3.06834 0.585511 0.678113 -0.444229 + -0.128582 1.91321 -3.39442 0.0116184 0.419262 -0.907791 + -0.194055 1.90173 -3.39661 -0.116477 0.390591 -0.913166 + -0.202082 2.06864 -3.29366 -0.12001 0.562741 -0.817876 + -0.183074 2.18144 -3.21184 -0.0442381 0.828972 -0.557538 + -0.106772 2.17875 -3.1773 0.434574 0.770525 -0.4663 + -0.033943 1.8295 -3.41372 0.518421 -0.283289 -0.806837 + -0.113252 1.82668 -3.4212 0.061524 -0.295893 -0.953238 + -0.168645 1.82333 -3.42097 -0.0308865 -0.303605 -0.952297 + -0.232151 1.89626 -3.39129 -0.253492 0.360478 -0.897662 + 0 1.9393 -3.21829 0.982047 -0.14436 0.121427 + 0 1.88998 -3.27556 0.964815 -0.232589 0.122617 + 0 1.86404 -3.32057 0.952614 -0.300232 0.0488543 + 0.00609 1.89928 -3.38721 1 0 0 + 0.00609 1.92264 -3.37029 1 0 0 + 0.00609 1.98847 -3.30463 1 0 0 + 0.00609 1.93619 -3.35816 1 0 0 + 0.049543 1.96837 -1.07328 -0.995507 -0.0901895 -0.0288196 + 0.016514 2.25648 -0.879903 -0.99532 -0.0892786 -0.0369856 + 1.6236 1.20702 0.333423 0.510365 0.290661 -0.809348 + 1.58944 1.14183 0.294724 0.959968 -0.235533 -0.151609 + 1.54797 1.02022 0.202565 0.523282 -0.620808 0.583757 + 1.66144 1.21731 0.386587 0.829473 0.000741546 -0.558546 + 1.63799 1.14373 0.332233 0.716039 0.258524 -0.648423 + 1.59651 1.02203 0.240025 0.672063 0.290901 -0.680961 + 1.54797 1.02022 0.202565 0.226642 0.528293 -0.818254 + 1.6956 1.2825 0.425286 0.827912 -0.190931 -0.527359 + 1.73453 1.32555 0.469515 0.59851 -0.0676555 -0.798253 + 1.692 1.22698 0.438445 0.845628 -0.195696 -0.496605 + 1.66855 1.1534 0.384091 0.935831 -0.0489318 -0.349036 + 1.61359 1.00509 0.256167 0.913109 0.016752 -0.40737 + 1.77486 1.40457 0.487045 0.498028 0.350576 -0.793136 + 1.81379 1.44763 0.531275 0.346877 -0.0339696 -0.937295 + 1.58713 1.18209 0.312985 -0.214621 0.648706 -0.73015 + 1.73839 1.37974 0.466657 -0.0308607 0.628315 -0.777347 + 1.51058 1.01353 0.204356 -0.374377 0.604993 -0.702727 + 1.54999 1.18402 0.345052 -0.372224 0.60787 -0.701387 + 1.53494 1.20168 0.361265 -0.208387 0.42428 -0.881227 + 1.72335 1.39731 0.482819 0.304993 0.269628 -0.913389 + 1.51479 0.962226 0.156811 -0.157681 0.565375 -0.809622 + 1.45289 0.782328 0.067205 -0.72597 0.439872 -0.528659 + 1.47344 1.01536 0.236373 -0.883827 0.40215 -0.239009 + 1.47932 1.00805 0.26964 -0.944953 -0.0140928 0.326903 + 1.46916 0.732146 0.009719 0.102647 0.384459 -0.917418 + 1.4571 0.731029 0.019659 -0.6994 0.421026 -0.57756 + 1.43836 0.646562 -0.011843 -0.689147 -0.261958 -0.675614 + 1.44014 0.777232 0.086428 -0.967332 0.207528 -0.145603 + 1.44603 0.769833 0.119645 -0.805823 -0.299857 0.510622 + 1.50234 0.79014 0.055474 0.350218 0.433111 -0.830519 + 1.45043 0.647681 -0.021782 -0.393666 -0.207783 -0.895463 + 1.45404 0.627251 0.013604 -0.290697 -0.932272 0.215325 + 1.42562 0.641468 0.007382 -0.886585 -0.459955 -0.0490732 + 1.51852 0.785997 0.06025 0.577753 0.321199 -0.750355 + 1.48511 0.641076 -0.02074 0.425259 -0.331964 -0.841994 + 1.46893 0.645218 -0.025515 0.351453 0.393669 -0.849415 + 1.5356 0.768969 0.076342 0.826409 0.117779 -0.550615 + 1.49533 0.629724 -0.003278 0.636739 -0.730776 -0.246027 + 1.47254 0.624788 0.009871 0.0761257 -0.98873 0.128911 + 1.46893 0.645218 -0.025515 -0.0765132 -0.866848 -0.492667 + 1.54581 0.757617 0.093804 0.960075 -0.197828 -0.197786 + 1.54175 0.759103 0.13323 0.734959 -0.571755 0.364598 + 1.51896 0.754167 0.146379 0.402359 -0.716633 0.569687 + 1.46893 0.645218 -0.025515 -0.20936 -0.855931 -0.472811 + 1.61953 1.00237 0.294474 0.955052 -0.29502 -0.0289627 + 1.61547 1.00377 0.333851 0.872187 -0.461668 0.16172 + 1.59729 0.998827 0.391816 0.627257 -0.656573 0.418881 + 1.58579 1.01838 0.423353 -0.192795 -0.685146 0.702428 + 1.50747 0.773805 0.177967 -0.206319 -0.667966 0.715021 + 1.67448 1.15068 0.422399 0.94249 -0.303089 -0.140891 + 1.67055 1.13745 0.474519 0.812658 -0.580282 0.0534738 + 1.65236 1.1325 0.532484 0.499967 -0.79345 0.347087 + 1.6239 1.12854 0.542745 -0.22435 -0.727669 0.648201 + 1.5559 1.00482 0.38144 -0.696829 -0.400836 0.594778 + 1.71906 1.19827 0.504771 0.795508 -0.541855 -0.27122 + 1.71512 1.18512 0.556941 0.593966 -0.802384 -0.0581649 + 1.69311 1.18699 0.618116 0.136508 -0.989503 0.0474213 + 1.66465 1.18294 0.628327 0.200871 -0.977265 0.0678582 + 1.59401 1.11498 0.500832 -0.536172 -0.561187 0.630547 + 1.76075 1.29119 0.47323 0.475269 -0.3485 -0.807878 + 1.78781 1.26248 0.539557 0.424672 -0.579949 -0.695207 + 1.75006 1.18048 0.619176 -0.225521 -0.899222 -0.374887 + 1.7667 1.31913 0.465227 0.11062 0.0739337 -0.991109 + 1.93628 1.39256 0.520656 0.356604 -0.348769 -0.866714 + 1.99104 1.3952 0.534275 0.362224 -0.0715316 -0.929342 + 1.84258 1.26504 0.553125 0.0784366 -0.223787 -0.971477 + 1.82655 1.19522 0.562452 -0.2759 -0.454501 -0.84694 + 1.81123 1.37244 0.505908 -0.110928 0.598447 -0.793445 + 1.94223 1.4205 0.512653 0.241929 0.0903826 -0.966075 + 2.0225 1.50484 0.536169 0.469032 -0.0321816 -0.882595 + 2.02235 1.43909 0.554254 0.998357 -0.0372874 -0.0434996 + 1.9796 1.30111 0.527655 0.0897314 0.0114527 -0.9959 + 1.77906 1.37894 0.510245 0.454176 0.201232 -0.867888 + 1.83752 1.41218 0.525862 -0.0167261 0.380014 -0.924829 + 1.96852 1.46025 0.532606 -0.280149 0.456054 -0.844708 + 1.87225 1.48096 0.54694 0.239515 -0.124146 -0.962923 + 1.92623 1.52564 0.550554 0.172475 -0.161453 -0.971692 + 2.05331 1.58948 0.539771 0.54734 -0.332092 -0.768202 + 2.06414 1.60558 0.55548 0.780939 -0.375439 0.49918 + 2.03333 1.52095 0.551879 0.927057 -0.258818 0.271255 + 1.95708 1.57075 0.541413 0.0655887 -0.168645 -0.983492 + 2.08416 1.6346 0.53063 0.567752 -0.724193 -0.391411 + 2.11451 1.66753 0.53599 0.666764 -0.427903 0.610184 + 2.02913 1.63205 0.580633 0.618854 -0.235073 0.749506 + 1.97252 1.54083 0.60224 0.710247 -0.160271 0.685465 + 1.95975 1.6027 0.539277 -0.0294818 0.0429675 -0.998641 + 2.14566 1.68514 0.49968 0.471094 -0.603399 -0.643414 + 2.17601 1.71808 0.505039 0.493545 -0.803153 0.333705 + 1.76554 1.46641 0.498737 0.555026 -0.166265 -0.815048 + 1.98658 1.67634 0.551519 0.0189887 -0.0624135 -0.99787 + 2.14832 1.71718 0.497593 -0.0606716 -0.0515479 -0.996826 + 2.17601 1.71808 0.505039 0.261306 -0.0843447 -0.961564 + 1.56869 1.32141 0.392478 0.470856 -0.431441 -0.769515 + 1.60429 1.36788 0.362601 0.509988 -0.43286 -0.743333 + 1.79238 1.54006 0.510979 0.368331 -0.00141475 -0.929694 + 1.52649 1.25232 0.376561 -0.192984 0.279094 -0.940672 + 1.46161 1.25622 0.403405 -0.330055 0.398679 -0.85564 + 1.48532 1.13277 0.359413 -0.976364 -0.00819381 -0.215976 + 1.47688 1.18341 0.374709 -0.843832 0.154716 -0.51382 + 1.47147 1.2329 0.468794 -0.970484 -0.240582 -0.016795 + 1.46161 1.25622 0.403405 -0.182658 -0.93444 -0.30571 + 1.52888 1.11144 0.419164 -0.746584 -0.541723 0.386197 + 1.48992 1.15558 0.452516 -0.822669 -0.532214 0.19991 + 1.48452 1.20507 0.546602 -0.87594 -0.449635 0.174809 + 1.4716 1.28252 0.647242 -0.84839 -0.525813 0.0612872 + 1.46174 1.30584 0.581852 -0.861665 -0.490563 0.12993 + 1.46161 1.25622 0.403405 -0.971142 -0.229598 0.0645564 + 1.52288 0.986717 0.329392 -0.765954 -0.330527 0.551422 + 1.55706 1.1107 0.47205 -0.537589 -0.644784 0.543371 + 1.5181 1.15484 0.505402 -0.489018 -0.784974 0.380363 + 1.47445 0.755618 0.125868 -0.576922 -0.479247 0.661425 + 1.46893 0.645218 -0.025515 -0.105967 0.503593 -0.857417 + 1.58083 1.16837 0.550749 -0.21705 -0.88192 0.418456 + 1.58246 1.19137 0.640725 -0.43872 -0.885924 0.150543 + 1.51974 1.17783 0.595377 -0.45268 -0.838773 0.302557 + 1.51282 1.25382 0.698348 -0.681814 -0.722766 0.11287 + 1.61778 1.17266 0.579532 -0.145801 -0.943844 0.296481 + 1.61781 1.15953 0.666276 -0.0959474 -0.982855 -0.15745 + 1.57418 1.16189 0.764578 -0.656618 -0.640319 -0.398554 + 1.54804 1.22667 0.747174 -0.744862 -0.641889 -0.182097 + 1.4986 1.24995 0.798455 -0.203004 -0.719298 -0.664379 + 1.66467 1.16989 0.715122 -0.293473 -0.835617 -0.464346 + 1.60952 1.13005 0.79013 -0.62645 -0.479115 -0.614824 + 1.54296 1.11265 0.844866 -0.310264 -0.353472 -0.882493 + 1.51682 1.17743 0.827462 -0.325504 -0.413572 -0.850297 + 1.6787 1.12823 0.732476 -0.163096 -0.590504 -0.790383 + 1.61213 1.05113 0.783223 -0.548869 -0.241584 -0.800238 + 1.5683 0.988111 0.841178 -0.547422 0.0486342 -0.835442 + 1.56569 1.06703 0.848084 -0.525994 -0.0993635 -0.844664 + 1.45821 0.993018 0.875279 -0.0813083 -0.209352 -0.974454 + 1.72804 1.18235 0.680351 -0.155506 -0.879822 -0.449146 + 1.68426 1.0677 0.780728 -0.125696 -0.429738 -0.894162 + 1.62616 1.00947 0.800577 -0.440865 -0.10875 -0.890961 + 1.56293 0.938751 0.83707 -0.558799 0.180336 -0.809458 + 1.48094 0.947396 0.878496 -0.109455 0.0458741 -0.992932 + 1.79385 1.1297 0.65013 -0.628969 -0.456384 -0.629374 + 1.73359 1.12172 0.728555 -0.484665 -0.476802 -0.733321 + 1.74233 1.05453 0.745943 -0.701051 -0.139494 -0.699335 + 1.67503 0.993074 0.804182 -0.147553 -0.213552 -0.965724 + 1.60738 0.938317 0.794822 -0.189863 -0.0721526 -0.979156 + 1.87035 1.14444 0.593406 -0.490213 -0.410335 -0.768971 + 1.8714 1.0663 0.595953 -0.6176 0.0565013 -0.78446 + 1.80259 1.06251 0.667518 -0.756807 -0.0514879 -0.651608 + 1.95605 1.14271 0.540193 -0.166259 -0.0730329 -0.983374 + 1.9571 1.06466 0.54279 -0.26905 0.113571 -0.956407 + 1.93511 0.978054 0.527395 -0.350577 0.23699 -0.906053 + 1.86448 0.985962 0.583301 -0.651692 0.209617 -0.728944 + 1.79567 0.982171 0.654865 -0.797821 0.127589 -0.589238 + 1.96358 1.2312 0.53693 -0.005607 -0.0794771 -0.996821 + 2.04117 1.26221 0.547429 0.52779 0.198538 -0.825846 + 2.03364 1.17372 0.55069 0.254421 0.0580307 -0.965351 + 2.05537 1.09401 0.543158 0.214348 0.118331 -0.969563 + 2.01091 1.34499 0.547634 0.81624 0.127041 -0.563572 + 2.03594 1.30382 0.610558 0.68583 0.48723 -0.540595 + 2.11727 1.24118 0.595449 0.471294 0.349728 -0.809674 + 2.139 1.16138 0.587867 0.408253 0.205988 -0.889325 + 2.00568 1.3866 0.610764 0.8956 0.389303 -0.215274 + 2.10772 1.36445 0.683332 0.390779 0.544198 -0.742388 + 2.18905 1.30173 0.668173 0.378002 0.493255 -0.783462 + 2.24957 1.22143 0.659059 0.45356 0.315919 -0.833354 + 2.17508 1.07656 0.587571 0.400354 0.195079 -0.895355 + 1.96154 1.45906 0.604665 0.906871 0.294318 0.3016 + 1.95162 1.54327 0.695611 0.848633 0.372677 -0.375412 + 1.99576 1.4709 0.701759 0.63831 0.508945 -0.577525 + 1.93662 1.58282 0.663307 0.960497 -0.0456671 0.274518 + 1.93684 1.67183 0.814343 0.739532 0.196784 -0.643714 + 2.03334 1.60485 0.811952 0.408198 0.516888 -0.752463 + 2.09902 1.56519 0.821239 0.367379 0.493529 -0.788328 + 2.06144 1.43124 0.711046 0.395982 0.556402 -0.73049 + 1.99323 1.67405 0.641699 0.67895 -0.496368 0.540967 + 1.92184 1.71138 0.78204 0.919819 -0.383088 -0.0847195 + 2.03223 1.70722 0.876638 0.371309 0.231117 -0.899285 + 2.12873 1.64024 0.874247 0.273064 0.369404 -0.888244 + 2.0795 1.694 0.561142 0.541121 -0.520916 0.660178 + 2.03537 1.72045 0.660322 0.397973 -0.822373 0.406595 + 1.96398 1.75787 0.800712 0.625753 -0.757657 -0.185443 + 2.0187 1.73586 0.876834 0.549683 -0.251798 -0.796522 + 2.35291 1.59576 0.903702 0.0285107 -0.0624801 -0.997639 + 2.17601 1.71808 0.505039 0.52057 -0.115346 0.845992 + 1.46161 1.25622 0.403405 0.349143 -0.681253 -0.643423 + 1.49721 1.30268 0.373527 -0.37272 -0.374124 -0.849182 + 1.59486 1.39116 0.355271 0.0661859 0.295105 -0.95317 + 1.78295 1.56325 0.503601 0.316794 0.174222 -0.932356 + 1.51069 1.33656 0.353853 0.384043 -0.57319 -0.723854 + 0.671558 1.21943 0.636123 0.983072 0.18314 0.00534615 + 0.677479 1.19172 0.631921 0.799627 0.0806201 0.595061 + 0.703623 1.13731 0.604161 0.7663 0.0905741 -0.636067 + 0.664457 1.19876 0.575727 0.786868 0.20078 -0.583546 + 0.663568 1.37192 0.710797 0.897814 -0.419412 0.134249 + 0.631551 1.33229 0.770247 0.955351 -0.0690554 -0.287291 + 0.637472 1.30458 0.766046 0.553653 0.636433 -0.537048 + 0.677479 1.19172 0.631921 0.973251 0.187902 0.132193 + 0.623492 1.11123 0.541927 0.564488 -0.20943 -0.798431 + 0.60316 1.24951 0.528621 0.62607 0.163866 -0.762354 + 0.656467 1.35125 0.650401 0.909619 0.108296 -0.40108 + 0.694071 1.41874 0.7437 0.588084 -0.775142 -0.230894 + 0.658484 1.06232 0.591236 0.561809 -0.332218 -0.757629 + 0.532736 1.01616 0.534984 0.473469 -0.412744 -0.77812 + 0.696479 1.01014 0.640421 0.599495 -0.459591 -0.655273 + 0.567728 0.967259 0.584293 0.476373 -0.563204 -0.675182 + 0.741618 1.08512 0.653345 0.824359 -0.0358048 -0.564934 + 0.721161 0.972399 0.702789 0.600172 -0.566654 -0.564532 + 0.592998 0.932483 0.647929 0.46096 -0.676248 -0.574633 + 0.489273 0.883681 0.623055 0.38148 -0.760402 -0.525607 + 0.464003 0.918458 0.55942 0.387628 -0.676796 -0.625853 + 0.713836 1.20864 0.668001 0.550632 0.327563 -0.767793 + 0.735281 1.17415 0.702152 0.570207 0.00791372 -0.821463 + 0.763063 1.05071 0.687546 0.771286 -0.231551 -0.592876 + 0.738363 0.929695 0.768755 0.54624 -0.689676 -0.475361 + 0.61768 0.894655 0.710248 0.432531 -0.766956 -0.47402 + 0.677479 1.19172 0.631921 0.432823 0.565969 -0.701671 + 0.687693 1.26305 0.695763 -0.126491 0.626772 -0.768867 + 0.718215 1.30967 0.728414 -0.224358 0.627313 -0.745749 + 0.775011 1.29018 0.707583 0.0104317 0.38707 -0.921991 + 0.77941 1.22822 0.700495 0.213732 0.0171579 -0.976742 + 0.775003 1.09627 0.700841 0.393209 -0.12387 -0.911067 + 0.780265 1.00801 0.753511 0.74184 -0.378022 -0.553871 + 0.667994 1.35128 0.798747 0.0131407 0.405127 -0.914166 + 0.799592 1.37863 0.763184 -0.24156 0.326181 -0.913923 + 0.856388 1.35922 0.742404 -0.168118 0.308778 -0.936159 + 0.894765 1.27125 0.713165 0.0208732 0.145352 -0.98916 + 0.899164 1.20921 0.706027 0.134098 -0.077727 -0.987915 + 0.662054 1.37911 0.803149 0.456739 -0.424743 -0.781654 + 0.677479 1.19172 0.631921 -0.388276 0.644804 -0.658384 + 0.793652 1.40654 0.767637 -0.0631322 -0.107736 -0.992173 + 0.831874 1.44489 0.765213 -0.345299 0.232157 -0.909325 + 0.897125 1.49917 0.7278 -0.489156 -0.074926 -0.868972 + 0.932428 1.43269 0.737749 -0.189256 -0.0589247 -0.980158 + 0.732292 1.45709 0.741276 0.556258 -0.162581 -0.814951 + 0.814631 1.53065 0.792669 0.0196056 -0.0447594 -0.998805 + 0.879882 1.58502 0.755306 -0.45102 -0.287418 -0.844969 + 0.968919 1.59273 0.660141 -0.522094 -0.393728 -0.756569 + 1.00422 1.52625 0.67009 0.0161814 -0.621083 -0.783577 + 0.715451 1.49768 0.719977 0.646056 -0.0668012 -0.760361 + 0.797789 1.57132 0.771421 0.329567 -0.603551 -0.726024 + 0.939812 1.7023 0.659358 -0.0514133 -0.616475 -0.785694 + 0.649712 1.43033 0.669226 0.703275 0.12043 -0.700643 + 0.703075 1.58181 0.701463 0.567189 -0.551004 -0.61212 + 0.830301 1.58874 0.707657 0.436486 -0.872244 -0.220615 + 0.972324 1.71963 0.595543 0.746934 -0.631206 0.208969 + 0.939812 1.7023 0.659358 0.747034 -0.630996 0.209247 + 0.596406 1.32859 0.547445 0.713354 0.233755 -0.66067 + 0.637336 1.51437 0.650661 0.734461 -0.0990238 -0.671388 + 0.593646 0.769686 1.2893 0.92627 -0.201533 0.318446 + 0.614436 0.825338 1.27931 0.0199751 -0.18394 -0.982734 + 0.660776 0.847515 1.2761 0.309724 -0.941107 0.135601 + 0.596975 0.776023 1.30872 0.907173 -0.310714 -0.283714 + 0.604949 0.61793 1.29995 0.942752 -0.0708002 -0.325892 + 0.604988 0.683733 1.27397 0.973905 -0.224235 0.0350467 + 0.625778 0.7393 1.26393 0.675428 -0.202503 0.709077 + 0.614436 0.825338 1.27931 0.362314 -0.173322 0.915799 + 0.661762 0.840666 1.29316 0.237359 -0.93121 -0.276602 + 0.618764 0.825271 1.31522 0.705172 -0.704806 -0.077339 + 0.618328 0.70856 1.35137 0.695864 -0.0389635 -0.717116 + 0.608278 0.624182 1.31932 0.972629 0.0113972 -0.232082 + 0.812578 0.820227 1.26856 -0.348042 -0.885505 -0.30781 + 0.738021 0.83597 1.32369 -0.209302 -0.864843 -0.456333 + 0.695024 0.820489 1.34571 0.0542812 -0.660843 -0.748559 + 0.640117 0.757809 1.35787 0.480275 -0.300903 -0.823889 + 0.617934 0.632076 1.35425 0.959473 -0.173992 -0.221674 + 0.811592 0.827076 1.2515 -0.343823 -0.810948 -0.473445 + 0.928995 0.766171 1.25519 -0.467682 -0.712154 -0.523556 + 0.854439 0.781914 1.31032 -0.439701 -0.678319 -0.588683 + 0.815221 0.742389 1.35778 -0.303508 -0.436673 -0.846876 + 0.708284 0.770454 1.36997 -0.0187659 -0.394964 -0.918505 + 0.734317 0.862237 1.2566 0.0939015 -0.876588 -0.471991 + 0.785162 0.85908 1.22446 -0.365618 -0.847624 -0.384521 + 0.862438 0.824007 1.21941 -0.406828 -0.822903 -0.396638 + 0.948354 0.796696 1.19172 -0.410287 -0.848688 -0.333757 + 0.687977 0.839975 1.25976 0.474716 -0.542805 0.692826 + 0.712689 0.835707 1.21915 0.62195 -0.718834 0.310574 + 0.78827 0.875179 1.17438 0.0673945 -0.996713 0.0449497 + 0.864209 0.836358 1.14702 -0.426044 -0.872168 -0.240436 + 0.950125 0.809046 1.11933 -0.323084 -0.8923 -0.315304 + 0.65049 0.735117 1.22337 0.778201 -0.626407 0.0449143 + 0.656362 0.772864 1.1512 0.598655 -0.781203 -0.177017 + 0.750817 0.830245 1.15141 0.544324 -0.822513 0.164873 + 0.826398 0.869631 1.10659 -0.0233187 -0.974607 -0.222705 + 0.867317 0.852369 1.09689 -0.419848 -0.826584 -0.374816 + 0.583394 0.700325 1.18764 0.57882 -0.707174 -0.406044 + 0.589266 0.73807 1.11546 0.489678 -0.793882 -0.360508 + 0.586773 0.765331 1.04744 0.383968 -0.868039 -0.314765 + 0.666944 0.789911 1.07887 0.440452 -0.873255 -0.208391 + 0.761399 0.847206 1.07903 0.462576 -0.868051 -0.180308 + 0.580026 0.653479 1.24218 0.807556 -0.329218 -0.489355 + 0.527962 0.712325 1.11285 0.209525 -0.843828 -0.494017 + 0.528092 0.742561 1.04268 0.171667 -0.915098 -0.364865 + 0.5256 0.769822 0.974664 0.270024 -0.896064 -0.352358 + 0.579987 0.587676 1.26815 0.662342 -0.364872 -0.654348 + 0.524594 0.665479 1.16739 0.257533 -0.708012 -0.657568 + 0.468772 0.724256 1.09359 -0.26343 -0.85706 -0.442779 + 0.468902 0.754492 1.02342 -0.204557 -0.947174 -0.247018 + 0.462395 0.767841 0.951896 0.00153005 -0.980961 -0.194197 + 0.607885 0.547698 1.32219 0.920988 -0.209194 -0.328664 + 0.565778 0.5247 1.30143 0.531529 -0.227359 -0.815956 + 0.520193 0.609434 1.22066 0.172091 -0.600808 -0.78065 + 0.455669 0.632191 1.20725 -0.328024 -0.597129 -0.732009 + 0.46007 0.688235 1.15398 -0.353447 -0.721074 -0.595926 + 0.595334 0.469248 1.31967 0.853564 -0.256671 -0.453374 + 0.553228 0.446164 1.29886 0.256957 -0.447485 -0.85658 + 0.505984 0.546459 1.25394 0.0193538 -0.536586 -0.843624 + 0.608345 0.598784 1.37451 0.901692 -0.202569 -0.38199 + 0.585745 0.435954 1.33994 0.798244 -0.553802 -0.236875 + 0.522086 0.390288 1.33083 0.176729 -0.659583 -0.73056 + 0.469447 0.503784 1.30626 -0.329217 -0.470044 -0.818948 + 0.653377 0.707774 1.38213 0.500445 -0.257571 -0.826566 + 0.620104 0.518943 1.3988 0.80884 -0.327255 -0.488551 + 0.539198 0.384676 1.38036 0.741735 -0.636758 -0.210636 + 0.475539 0.339011 1.37125 0.0516421 -0.607722 -0.792469 + 0.438306 0.447908 1.33823 -0.349948 -0.372669 -0.85945 + 0.691333 0.692201 1.39771 0.0756771 -0.324047 -0.943009 + 0.665136 0.627933 1.40642 0.480813 -0.231379 -0.845744 + 0.66784 0.546323 1.43458 0.474523 -0.315874 -0.821615 + 0.587339 0.455159 1.43027 0.720245 -0.481984 -0.498937 + 0.506433 0.320807 1.41178 0.6115 -0.747892 -0.258311 + 0.79827 0.664136 1.38552 -0.224547 -0.367723 -0.902418 + 0.792089 0.594912 1.42482 -0.191261 -0.424136 -0.885171 + 0.694037 0.61059 1.42586 0.187231 -0.320463 -0.928573 + 0.964256 0.556677 1.38184 -0.389096 -0.452307 -0.80251 + 0.958075 0.487539 1.42119 -0.369341 -0.487834 -0.790952 + 0.937526 0.429651 1.47146 -0.344313 -0.51796 -0.783049 + 0.817145 0.516214 1.45573 -0.156101 -0.468159 -0.869747 + 0.719093 0.531893 1.45677 0.121676 -0.395528 -0.910358 + 0.987842 0.616329 1.33052 -0.462038 -0.465012 -0.755172 + 1.15942 0.552757 1.26583 -0.479621 -0.489079 -0.728536 + 1.13583 0.493105 1.31715 -0.465161 -0.491342 -0.736348 + 1.08792 0.445309 1.38194 -0.447094 -0.495578 -0.744654 + 1.02706 0.655854 1.28306 -0.477108 -0.492572 -0.727833 + 1.17526 0.617706 1.20894 -0.496012 -0.507105 -0.704852 + 1.32655 0.544633 1.1463 -0.356891 -0.599697 -0.716235 + 1.31011 0.482405 1.21249 -0.317483 -0.648429 -0.691914 + 1.26219 0.434609 1.27727 -0.34923 -0.58241 -0.734055 + 1.05089 0.714985 1.22065 -0.461147 -0.64533 -0.60901 + 1.19909 0.676836 1.14652 -0.429144 -0.648771 -0.628436 + 1.33488 0.693301 1.0436 -0.396769 -0.579324 -0.71201 + 1.34239 0.60958 1.08941 -0.411784 -0.543683 -0.73133 + 1.45688 0.548566 1.10849 0.0567372 -0.730387 -0.680673 + 1.07025 0.74551 1.15717 -0.427829 -0.771936 -0.470189 + 1.14769 0.775965 1.02182 -0.426195 -0.789631 -0.441408 + 1.19143 0.74391 1.06795 -0.104974 -0.797144 -0.594594 + 1.06428 0.792158 1.09598 -0.370419 -0.79465 -0.480959 + 1.14172 0.8227 0.960676 -0.684337 -0.577558 -0.445095 + 1.19119 0.851914 0.802478 -0.182632 -0.725836 -0.66318 + 1.23493 0.81986 0.848598 0.375051 -0.773427 -0.511025 + 0.932215 0.841889 1.05884 -0.309534 -0.837981 -0.449417 + 1.04637 0.825001 1.03549 -0.251448 -0.858541 -0.446857 + 1.11972 0.886319 0.929887 -0.492359 -0.719802 -0.489354 + 0.930162 0.8877 0.986093 -0.372316 -0.845254 -0.383311 + 0.988035 0.855089 0.986578 -0.303414 -0.912191 -0.275403 + 1.06139 0.916319 0.880924 -0.372279 -0.592725 -0.714203 + 1.1441 0.982289 0.714262 -0.481174 -0.287238 -0.828231 + 1.21543 1.25463 0.632758 0.273383 -0.340805 -0.899507 + 0.865264 0.89818 1.02414 -0.219596 -0.89621 -0.385468 + 0.860678 0.922089 0.953931 0.0263632 -0.917131 -0.397713 + 0.902573 0.92971 0.921729 -0.320844 -0.866806 -0.381714 + 0.960445 0.897099 0.922214 -0.206608 -0.779844 -0.590894 + 0.821812 0.89354 1.03638 0.293648 -0.922189 -0.251672 + 0.814715 0.902242 0.955106 0.461388 -0.835719 -0.297816 + 0.838622 0.960135 0.881234 0.166373 -0.875291 -0.454076 + 0.880517 0.967757 0.849032 -0.0888985 -0.831377 -0.548552 + 0.754302 0.855908 0.997757 0.463563 -0.867508 -0.180384 + 0.749509 0.875033 0.919634 0.482272 -0.828576 -0.284386 + 0.800219 0.935087 0.882817 0.579955 -0.732049 -0.357431 + 0.824126 0.992981 0.808944 0.405311 -0.671363 -0.62048 + 0.667163 0.814158 1.00787 0.4065 -0.877395 -0.254825 + 0.662371 0.833281 0.929749 0.372905 -0.896905 -0.237703 + 0.651066 0.847683 0.855804 0.38658 -0.87276 -0.29807 + 0.75087 0.903341 0.841204 0.53932 -0.781601 -0.313424 + 0.80158 0.963308 0.804335 0.701991 -0.56239 -0.436951 + 0.586993 0.789665 0.976497 0.331114 -0.898062 -0.289566 + 0.56609 0.802554 0.906573 0.29108 -0.927231 -0.235615 + 0.554785 0.816956 0.832628 0.317929 -0.909997 -0.266134 + 0.528399 0.831478 0.762472 0.340283 -0.878914 -0.334241 + 0.638559 0.874038 0.783357 0.403963 -0.838962 -0.364632 + 0.500094 0.784327 0.913542 0.188155 -0.9475 -0.258537 + 0.479191 0.797302 0.843667 0.125233 -0.985027 -0.118485 + 0.431488 0.795235 0.775249 0.186393 -0.962749 -0.195885 + 0.405102 0.809844 0.705145 0.154431 -0.929857 -0.333941 + 0.436889 0.782346 0.890773 0.144953 -0.964497 -0.22076 + 0.405466 0.790068 0.823596 0.114393 -0.982008 -0.150246 + 0.357764 0.788001 0.755178 -0.0986554 -0.98039 -0.170593 + 0.320431 0.813892 0.691934 -0.268402 -0.920949 -0.282513 + 0.394347 0.839772 0.636909 0.161998 -0.879637 -0.447208 + 0.394418 0.77022 0.903777 -0.32008 -0.94701 0.0268429 + 0.362995 0.777856 0.83655 -0.334832 -0.939989 -0.0656432 + 0.326228 0.801844 0.780602 -0.569555 -0.815808 0.100323 + 0.288896 0.827734 0.717357 -0.650398 -0.759585 0.0035483 + 0.413333 0.776261 0.981311 -0.441724 -0.896683 -0.0289581 + 0.340494 0.839684 0.921859 -0.75494 -0.651871 0.0716227 + 0.321578 0.833643 0.844325 -0.754277 -0.610662 0.241159 + 0.284811 0.85763 0.788377 -0.834879 -0.470989 0.284862 + 0.41984 0.762912 1.05283 -0.443539 -0.863495 -0.240105 + 0.342526 0.826727 1.0007 -0.525246 -0.805011 -0.275814 + 0.399207 0.75204 1.12726 -0.438023 -0.792164 -0.424984 + 0.321893 0.815854 1.07513 -0.385493 -0.835576 -0.391418 + 0.390505 0.716019 1.18765 -0.280909 -0.715741 -0.639379 + 0.312155 0.767184 1.12703 0.047574 -0.761667 -0.64622 + 0.380768 0.667434 1.23961 -0.22867 -0.657369 -0.718036 + 0.367227 0.618077 1.2867 -0.138123 -0.569559 -0.810262 + 0.204332 1.01157 0.800351 0.140382 -0.956403 -0.256098 + 0.442128 0.582833 1.25434 -0.429512 -0.547422 -0.718226 + 0.405591 0.540158 1.30665 -0.428595 -0.459577 -0.777879 + 0.363435 0.553954 1.32656 -0.234677 -0.535858 -0.811038 + 0.372815 0.484203 1.35417 -0.4545 -0.370133 -0.810204 + 0.454742 0.286813 1.45866 0.529305 -0.829656 -0.177503 + 0.513595 0.336723 1.48201 0.547143 -0.739573 -0.392003 + 0.464944 0.274985 1.51495 0.424898 -0.791161 -0.439916 + 0.556841 0.379342 1.44819 0.660228 -0.616026 -0.429664 + 0.622733 0.398813 1.48367 0.413708 -0.545651 -0.728773 + 0.574081 0.336989 1.51655 0.3484 -0.639017 -0.685766 + 0.544624 0.274352 1.55925 0.29643 -0.707359 -0.641695 + 0.411782 0.241094 1.55345 0.304053 -0.83739 -0.454236 + 0.637341 0.470505 1.4525 0.423389 -0.400165 -0.812779 + 0.704484 0.460203 1.48794 0.235895 -0.452694 -0.859896 + 0.703252 0.385732 1.53053 0.204329 -0.571039 -0.795088 + 0.673794 0.323089 1.57323 0.23101 -0.635907 -0.736381 + 0.810897 0.450873 1.5015 -0.110266 -0.525487 -0.843626 + 0.809665 0.376401 1.54409 -0.0318477 -0.574155 -0.818127 + 0.793357 0.317255 1.59913 -0.0234177 -0.662293 -0.748879 + 0.651443 0.258561 1.6246 0.205977 -0.727571 -0.654381 + 0.931278 0.364221 1.51719 -0.348678 -0.587841 -0.729977 + 0.912571 0.310585 1.57489 -0.280475 -0.617036 -0.735255 + 0.896263 0.251439 1.62993 -0.263604 -0.727988 -0.632887 + 0.878998 0.208596 1.69633 -0.16299 -0.766043 -0.621781 + 0.771006 0.252727 1.6505 0.0630077 -0.716838 -0.694387 + 1.06737 0.38742 1.4322 -0.417632 -0.529055 -0.738705 + 1.05432 0.350224 1.46823 -0.383137 -0.593501 -0.707787 + 1.03561 0.296588 1.52593 -0.350384 -0.64611 -0.678066 + 1.06378 0.27098 1.53688 -0.30591 -0.718648 -0.624472 + 1.24914 0.397413 1.31329 -0.36142 -0.602596 -0.711515 + 1.27731 0.371808 1.32425 -0.239567 -0.659883 -0.712153 + 1.26555 0.307234 1.38929 -0.178416 -0.755017 -0.630965 + 1.04651 0.228051 1.60324 -0.243893 -0.788599 -0.564471 + 1.41823 0.435732 1.23532 0.0978256 -0.745623 -0.659148 + 1.40647 0.371246 1.30042 0.341774 -0.807519 -0.480732 + 1.2514 0.260562 1.46153 -0.117096 -0.825638 -0.551915 + 1.03236 0.181381 1.67547 -0.156214 -0.872193 -0.463547 + 0.858484 0.160513 1.75982 -0.130643 -0.879407 -0.457794 + 1.44043 0.486339 1.17467 0.0991666 -0.767305 -0.633568 + 1.52479 0.464575 1.26937 0.342517 -0.860059 -0.378127 + 1.44873 0.417293 1.32726 0.582041 -0.807053 -0.0994715 + 1.417 0.365191 1.40291 0.682119 -0.710361 -0.173495 + 1.37475 0.319144 1.37606 0.406041 -0.800521 -0.440791 + 1.54292 0.558372 1.13831 0.0788931 -0.798403 -0.596932 + 1.54699 0.515181 1.20871 0.0854089 -0.814929 -0.573233 + 1.60355 0.505276 1.20727 -0.529479 -0.807406 -0.260283 + 1.59744 0.481078 1.30738 0.00332927 -0.929065 -0.369902 + 1.52138 0.433797 1.36528 0.333371 -0.909355 -0.248871 + 1.45478 0.596872 1.05422 0.0269449 -0.68694 -0.726214 + 1.54082 0.606679 1.08404 -0.065265 -0.800736 -0.595452 + 1.5718 0.593954 1.08447 -0.72425 -0.679202 -0.118938 + 1.59948 0.548467 1.13686 -0.754554 -0.615717 -0.227026 + 1.42433 0.648577 1.01687 -0.201513 -0.554291 -0.807561 + 1.47925 0.664574 1.01176 -0.202741 -0.750115 -0.629463 + 1.51022 0.651849 1.0122 -0.606925 -0.791157 -0.0755789 + 1.57817 0.545448 1.05609 -0.901635 -0.375955 0.213802 + 1.60585 0.49996 1.10848 -0.829963 -0.556707 -0.0351931 + 1.41682 0.732298 0.971058 -0.00818089 -0.470001 -0.882628 + 1.42704 0.810131 0.938248 -0.269831 -0.386336 -0.882007 + 1.4488 0.716278 0.974406 -0.366956 -0.483879 -0.794484 + 1.50632 0.652275 0.987461 -0.685511 -0.659946 -0.307483 + 1.57426 0.545874 1.03135 -0.732346 -0.63746 -0.239403 + 1.3925 0.822365 0.933657 -0.0201024 -0.436979 -0.899247 + 1.40273 0.900198 0.900847 -0.261108 -0.310053 -0.914161 + 1.4594 0.843428 0.897777 -0.644665 -0.229194 -0.729299 + 1.48115 0.749575 0.933935 -0.586509 -0.418205 -0.693622 + 1.32722 0.760374 0.965028 -0.0412927 -0.675207 -0.736472 + 1.34742 0.893035 0.898255 0.00805139 -0.32697 -0.945 + 1.39844 1.00285 0.872652 0.0318738 -0.269614 -0.962441 + 1.45392 1.09575 0.847134 0.0879558 -0.302245 -0.949164 + 1.28214 0.831044 0.929625 0.285419 -0.655278 -0.69939 + 1.3401 1.02416 0.862932 0.263538 -0.292307 -0.919296 + 1.39111 1.13398 0.83733 -0.0701664 -0.262316 -0.962428 + 1.43569 1.16827 0.818127 -0.0359714 -0.332134 -0.942546 + 1.25658 1.00816 0.761047 0.808058 -0.242504 -0.536875 + 1.30379 1.01935 0.842075 0.706865 -0.292324 -0.644118 + 1.36663 1.3271 0.796625 0.032978 -0.310657 -0.94995 + 1.38463 1.23273 0.810888 -0.219713 -0.236823 -0.946383 + 1.42922 1.26702 0.791684 -0.521084 -0.321673 -0.790568 + 1.2275 1.01816 0.717136 0.668087 -0.322776 -0.670429 + 1.33033 1.32237 0.775818 0.361061 -0.180405 -0.914926 + 1.38744 1.42682 0.758114 -0.291341 -0.549014 -0.783392 + 1.40544 1.33244 0.772376 -0.608186 -0.300621 -0.734668 + 1.20241 1.08491 0.659711 0.821737 -0.175556 -0.542152 + 1.27955 1.43341 0.724495 0.787079 -0.2647 -0.557172 + 1.37295 1.58577 0.661806 0.603513 -0.590461 -0.535843 + 1.21543 1.25463 0.632758 0.920161 -0.135399 -0.367382 + 1.29257 1.60304 0.697493 0.833208 -0.528713 -0.161949 + 1.26299 1.58624 0.584984 0.813464 -0.56708 -0.129213 + 1.33145 1.63145 0.543685 0.543916 -0.838958 -0.0174777 + 1.36103 1.64833 0.656244 -0.298211 -0.854922 -0.424475 + 1.35441 1.57088 0.718196 -0.903337 -0.116272 -0.412872 + 1.3761 1.46992 0.725657 -0.793977 -0.33983 -0.504099 + 1.4336 1.34407 0.72804 -0.871107 -0.370603 -0.322221 + 1.45738 1.27865 0.747349 -0.632673 -0.65034 -0.420455 + 1.39315 1.39099 0.629974 -0.918886 -0.394522 0.000149688 + 1.42226 1.38717 0.695584 -0.874198 -0.485303 0.0160831 + 1.37295 1.58577 0.661806 -0.906335 -0.102063 -0.410048 + 1.41169 1.40588 0.573584 -0.890991 0.0662353 -0.449163 + 1.43263 1.30966 0.516241 -0.908723 -0.406028 -0.0967652 + 1.46161 1.25622 0.403405 -0.590293 -0.777568 0.216662 + 1.4852 1.45922 0.489986 -0.674987 0.159167 -0.720457 + 1.51961 1.39679 0.412919 -0.598489 0.554314 -0.5784 + 1.44611 1.34345 0.496517 -0.862759 0.182983 -0.471343 + 1.46161 1.25622 0.403405 -0.833932 0.384215 -0.396152 + 1.47328 1.52179 0.484423 -0.55284 0.0157892 -0.833138 + 1.55433 1.51188 0.462787 -0.0458869 0.183572 -0.981935 + 1.6279 1.51032 0.455686 0.361807 -0.319823 -0.875676 + 1.6785 1.53269 0.464743 0.0694811 0.427603 -0.901292 + 1.60378 1.4514 0.414339 -0.25211 0.68595 -0.682579 + 1.33145 1.63145 0.543685 -0.520805 -0.813476 0.258881 + 1.51069 1.33656 0.353853 -0.736409 0.451454 -0.503876 + 1.85767 1.64454 0.554005 -0.00225008 0.343957 -0.938983 + 2.02507 1.75372 0.534508 -0.210753 0.0301314 -0.977075 + 2.19506 1.79142 0.4852 0.00211821 -0.202454 -0.97929 + 1.89362 1.71493 0.55529 -0.0698114 0.222428 -0.972446 + 2.06102 1.82402 0.535743 -0.234465 -0.288846 -0.928221 + 2.23355 1.86879 0.468189 -0.0140452 -0.49414 -0.869269 + 2.29796 1.84198 0.49684 0.293068 -0.701961 -0.649124 + 2.25122 1.76773 0.509233 0.649237 -0.649562 -0.395677 + 2.17601 1.71808 0.505039 0.256217 -0.310771 -0.9153 + 1.84301 1.69247 0.546183 -0.315416 0.669603 -0.672417 + 1.92435 1.7883 0.580415 -0.245577 -0.0998971 -0.964216 + 2.0874 1.87467 0.479216 -0.100475 -0.653987 -0.749804 + 2.23386 1.9363 0.415873 0.00987048 -0.698067 -0.715965 + 1.65514 1.55474 0.517745 -0.280241 0.801455 -0.528332 + 1.68095 1.58851 0.550251 -0.22565 0.685992 -0.691735 + 1.86882 1.72633 0.57874 -0.5141 0.526502 -0.677124 + 1.58157 1.5563 0.524846 0.234794 0.617193 -0.750963 + 1.73074 1.64424 0.584322 -0.0742102 0.317076 -0.945492 + 1.78626 1.70629 0.586049 -0.101839 0.161284 -0.98164 + 1.50569 1.64402 0.533103 0.0164701 0.457677 -0.888966 + 1.63136 1.61203 0.558918 0.155741 0.390001 -0.907548 + 1.67239 1.66973 0.591372 0.0119341 0.334782 -0.94222 + 1.82528 1.77713 0.594749 -0.125755 0.00273734 -0.992058 + 1.42465 1.65393 0.554737 0.125815 0.0144747 -0.991948 + 1.54673 1.70181 0.565607 0.125471 0.235171 -0.963821 + 1.71141 1.74066 0.600124 0.0154467 0.124025 -0.992159 + 1.84873 1.84604 0.584593 -0.366665 0.109098 -0.923934 + 1.95594 1.84108 0.537384 -0.333553 -0.281617 -0.899686 + 1.33145 1.63145 0.543685 -0.007949 0.467433 -0.883993 + 0.504969 0.221988 1.60774 0.237825 -0.766746 -0.596271 + 0.475349 0.171371 1.66461 0.157695 -0.863973 -0.478208 + 0.621823 0.208035 1.68151 0.201233 -0.772149 -0.602736 + 0.594741 0.15241 1.74105 0.136813 -0.846672 -0.514226 + 0.450434 0.140476 1.73692 0.0706211 -0.9128 -0.402254 + 0.429275 0.104849 1.80763 -0.0147282 -0.948953 -0.315074 + 0.750491 0.20473 1.71403 0.0571877 -0.795196 -0.60365 + 0.72341 0.149105 1.77358 0.140004 -0.826015 -0.545983 + 0.707126 0.112246 1.84442 0.116904 -0.886261 -0.44819 + 0.573582 0.116783 1.81176 0.0858164 -0.880066 -0.467033 + 0.845283 0.132889 1.83526 -0.00712098 -0.898008 -0.439922 + 0.828999 0.095944 1.90606 0.0262662 -0.947878 -0.317548 + 0.829722 0.076875 1.98428 0.104221 -0.962419 -0.250775 + 0.685094 0.06822 1.91427 0.135809 -0.91992 -0.367835 + 0.55155 0.072756 1.88162 -0.0154271 -0.9426 -0.333566 + 1.01916 0.153671 1.75087 -0.0749727 -0.932811 -0.352481 + 1.00992 0.123663 1.83285 -0.00953909 -0.954883 -0.296828 + 1.01064 0.104512 1.91101 0.0508786 -0.973464 -0.223114 + 1.00914 0.085753 1.99731 0.0726489 -0.977996 -0.195563 + 0.833452 0.058511 2.06169 0.119228 -0.97156 -0.204585 + 1.24407 0.212977 1.53635 -0.00844745 -0.898485 -0.438923 + 1.23482 0.182879 1.61828 0.0924586 -0.951464 -0.293543 + 1.2298 0.160337 1.70752 0.152977 -0.962698 -0.223184 + 1.22831 0.141582 1.79381 0.178141 -0.965141 -0.191752 + 1.36742 0.271559 1.45088 0.552388 -0.768584 -0.322717 + 1.35807 0.237154 1.53847 0.631495 -0.747611 -0.205653 + 1.35305 0.21461 1.62772 0.639089 -0.74878 -0.175767 + 1.35462 0.194096 1.72325 0.640707 -0.752951 -0.150199 + 1.22268 0.123844 1.88473 0.177579 -0.969734 -0.167572 + 1.39068 0.324625 1.49217 0.779432 -0.616511 -0.111353 + 1.38133 0.290225 1.57975 0.797888 -0.586871 -0.137683 + 1.38355 0.264554 1.67781 0.777919 -0.607992 -0.158705 + 1.38511 0.244046 1.77334 0.763435 -0.628064 -0.150674 + 1.34899 0.176277 1.81411 0.589128 -0.791234 -0.163945 + 1.48839 0.408057 1.43006 0.44459 -0.874828 -0.192395 + 1.46206 0.367494 1.51932 0.470969 -0.846269 -0.249031 + 1.43897 0.324733 1.62698 0.480796 -0.844795 -0.234856 + 1.44119 0.299154 1.72508 0.469891 -0.862275 -0.188902 + 1.44404 0.284487 1.81029 0.493293 -0.849294 -0.188047 + 1.60783 0.439745 1.46897 0.109248 -0.932497 -0.344259 + 1.57742 0.413593 1.52927 0.220968 -0.935259 -0.276521 + 1.58031 0.394507 1.58953 0.163125 -0.903667 -0.395949 + 1.46494 0.348315 1.57954 0.318997 -0.898043 -0.302918 + 1.53758 0.337601 1.69629 0.267681 -0.934524 -0.234546 + 1.64082 0.465397 1.40414 0.046207 -0.99173 -0.11973 + 1.70716 0.451029 1.41863 -0.429796 -0.840721 -0.329337 + 1.67675 0.424968 1.47897 -0.182324 -0.929255 -0.321315 + 1.67259 0.411655 1.55043 -0.0930051 -0.932799 -0.348189 + 1.56355 0.361189 1.64884 0.218852 -0.914201 -0.341086 + 1.64747 0.455233 1.33715 -0.0884755 -0.993173 -0.0760226 + 1.70774 0.443485 1.2775 -0.373478 -0.926359 0.0487167 + 1.7011 0.453736 1.34454 -0.321336 -0.944484 0.0685023 + 1.74448 0.421888 1.2955 -0.229203 -0.973324 0.0102887 + 1.76927 0.424377 1.37059 -0.218054 -0.969941 -0.108015 + 1.62255 0.484202 1.25657 -0.529236 -0.846614 -0.0561619 + 1.67258 0.458269 1.28629 -0.384053 -0.917826 -0.100491 + 1.68785 0.453432 1.21987 -0.292349 -0.951219 0.0985656 + 1.70722 0.427067 1.15213 -0.206535 -0.977385 -0.0454132 + 1.73842 0.424595 1.22141 -0.082505 -0.995759 -0.0407002 + 1.64577 0.44771 1.21778 -0.404307 -0.906621 0.120719 + 1.66104 0.442785 1.15131 -0.327013 -0.943935 -0.0452763 + 1.68733 0.437013 1.09451 -0.2811 -0.906551 -0.314878 + 1.74607 0.451085 1.08933 0.38557 -0.844264 -0.372228 + 1.62677 0.468698 1.16843 -0.740285 -0.670151 -0.0536352 + 1.64214 0.473346 1.09438 -0.512874 -0.818667 -0.25835 + 1.66932 0.483248 1.03682 -0.267884 -0.845797 -0.461373 + 1.70803 0.526187 0.970451 0.249358 -0.749471 -0.613281 + 1.72604 0.479952 1.02813 0.224074 -0.776557 -0.588854 + 1.62122 0.504521 1.03438 -0.537848 -0.768184 -0.347293 + 1.65042 0.513721 0.979845 -0.31386 -0.785172 -0.53385 + 1.69254 0.569577 0.911697 0.164414 -0.724033 -0.669884 + 1.77926 0.596395 0.94745 -0.0748964 -0.843285 -0.532223 + 1.80408 0.558557 1.00699 -0.0652228 -0.876019 -0.477847 + 1.61372 0.556018 0.987985 -0.602199 -0.604026 -0.522023 + 1.6443 0.568153 0.923365 -0.467755 -0.649808 -0.599128 + 1.68642 0.623924 0.855168 0.0633865 -0.722658 -0.688294 + 1.76377 0.639698 0.888645 -0.148995 -0.827491 -0.541349 + 1.82641 0.596891 0.83859 -0.831164 -0.536003 -0.147874 + 1.59539 0.606046 0.942334 -0.640329 -0.465984 -0.610604 + 1.6368 0.619564 0.87692 -0.632854 -0.404949 -0.659934 + 1.68565 0.675408 0.803195 -0.370572 -0.441957 -0.816915 + 1.75074 0.675868 0.825996 -0.219666 -0.795801 -0.564312 + 1.55592 0.595988 0.985752 -0.578901 -0.614615 -0.535838 + 1.59717 0.672538 0.915164 -0.456079 -0.452806 -0.766132 + 1.65074 0.688961 0.854519 -0.768384 -0.140612 -0.624351 + 1.69959 0.744892 0.780844 -0.601941 -0.268584 -0.752017 + 1.74998 0.727353 0.774023 -0.514271 -0.579191 -0.632505 + 1.49687 0.688112 0.95859 -0.854548 -0.403535 -0.326966 + 1.54647 0.631827 0.956881 -0.409921 -0.61929 -0.66966 + 1.587 0.73028 0.874155 -0.323355 -0.404275 -0.855572 + 1.65252 0.755455 0.82735 -0.689923 -0.0795619 -0.719497 + 1.53629 0.689567 0.915871 -0.436454 -0.519615 -0.734512 + 1.52058 0.751028 0.891216 -0.514173 -0.37798 -0.769907 + 1.59075 0.801736 0.854789 -0.129658 -0.369474 -0.920151 + 1.66934 0.83939 0.830171 -0.565248 -0.0487041 -0.823482 + 1.52797 0.812986 0.854702 -0.387274 -0.378952 -0.840485 + 1.59815 0.863693 0.818274 0.00621149 -0.391408 -0.920196 + 1.67309 0.910845 0.810805 -0.389945 -0.130503 -0.911544 + 1.72873 0.895888 0.758512 -0.796035 0.0757938 -0.600486 + 1.71192 0.81204 0.755743 -0.797092 0.0510415 -0.601697 + 1.47557 0.897951 0.87434 -0.555298 -0.0447722 -0.830446 + 1.54415 0.867509 0.831265 -0.432187 -0.111064 -0.894919 + 1.7404 0.972385 0.752615 -0.772429 0.0119071 -0.634989 + 1.784 0.90576 0.660813 -0.844497 0.05193 -0.533037 + 1.76663 0.838042 0.686105 -0.83602 0.0261024 -0.548078 + 1.7543 0.770894 0.711207 -0.781265 -0.311228 -0.541075 + 1.84667 0.90357 0.570808 -0.741144 0.177801 -0.647373 + 1.82929 0.835937 0.59615 -0.846533 0.0632503 -0.528566 + 1.81694 0.764071 0.600627 -0.904114 -0.0662976 -0.422117 + 1.81262 0.720615 0.663493 -0.88331 -0.330036 -0.332925 + 1.80878 0.671025 0.710185 -0.888061 -0.380465 -0.258059 + 1.91729 0.895662 0.514904 -0.395556 0.394136 -0.829573 + 1.89324 0.815687 0.474424 -0.60156 0.290562 -0.74411 + 1.88089 0.74382 0.478903 -0.74833 0.158326 -0.644155 + 1.8728 0.652784 0.458382 -0.82356 0.0196149 -0.566889 + 1.86896 0.603195 0.505073 -0.943057 -0.196082 -0.268691 + 2.02185 0.925852 0.501813 0.0194175 0.366195 -0.930335 + 1.9978 0.845877 0.461334 -0.0378628 0.461631 -0.886264 + 1.96911 0.765755 0.420306 -0.243309 0.337251 -0.90943 + 1.96102 0.67472 0.399785 -0.45954 0.313179 -0.831109 + 1.91603 0.534961 0.413056 -0.78968 -0.27946 -0.546176 + 2.03338 1.0074 0.527763 0.109678 0.224496 -0.968283 + 2.16355 0.995014 0.561621 0.30655 0.316882 -0.89756 + 2.14033 0.913598 0.518236 0.237985 0.395526 -0.887086 + 2.11164 0.833479 0.477208 0.158222 0.508014 -0.846692 + 2.06878 0.768334 0.418843 0.0346415 0.545491 -0.8374 + 2.28565 1.13661 0.658763 0.480438 0.24021 -0.843492 + 2.29816 1.04453 0.635263 0.444883 0.297324 -0.844795 + 2.27494 0.963112 0.591876 0.410017 0.358164 -0.838812 + 2.24601 0.882803 0.540174 0.373561 0.424456 -0.824796 + 2.40167 1.17625 0.744707 0.62545 0.295034 -0.722335 + 2.41419 1.08425 0.721256 0.62007 0.266557 -0.737876 + 2.40624 0.987597 0.680067 0.619445 0.251694 -0.743598 + 2.37731 0.907288 0.628365 0.566246 0.310875 -0.763362 + 2.20315 0.817744 0.481859 0.323724 0.470376 -0.820944 + 2.35935 1.27623 0.753345 0.569768 0.376025 -0.730732 + 2.45962 1.2704 0.860231 0.746365 0.290998 -0.598548 + 2.50194 1.17043 0.851594 0.795723 0.267893 -0.543192 + 2.499 1.08753 0.812577 0.807296 0.204484 -0.553588 + 2.49105 0.990875 0.771388 0.821083 0.155633 -0.549182 + 2.29884 1.35653 0.76246 0.449463 0.529444 -0.719494 + 2.43986 1.36033 0.870073 0.60841 0.399242 -0.685888 + 2.57772 1.20514 0.996876 0.917296 0.16136 -0.364048 + 2.56484 1.11228 0.962714 0.929446 0.0686311 -0.362519 + 2.56189 1.02938 0.923698 0.934205 0.0353729 -0.354978 + 2.22158 1.4297 0.776525 0.399504 0.567108 -0.720268 + 2.36261 1.4335 0.884138 0.465973 0.403284 -0.787547 + 2.57256 1.39479 0.982791 0.549311 -0.135382 -0.824578 + 2.55796 1.29515 1.00677 0.801521 -0.0799392 -0.5926 + 2.61381 1.14019 1.11437 0.978215 -0.0848983 -0.18944 + 2.1753 1.4964 0.804189 0.35581 0.535244 -0.766103 + 2.3061 1.50942 0.869238 0.344642 0.291116 -0.892453 + 2.22982 1.57813 0.886237 0.243367 0.306875 -0.920109 + 2.45399 1.53364 0.915692 0.25468 -0.134575 -0.957616 + 2.51606 1.47071 0.967891 0.330929 -0.163916 -0.92931 + 2.58157 1.54655 0.941937 0.266095 -0.418526 -0.868349 + 2.64364 1.48362 0.994138 0.522602 -0.378271 -0.764067 + 2.69852 1.5131 1.03227 0.708694 -0.344683 -0.615587 + 2.71043 1.46155 1.07875 0.716198 -0.306736 -0.626876 + 2.5719 1.58847 0.916332 0.24231 -0.493795 -0.835136 + 2.6611 1.61844 0.948007 0.549291 -0.341806 -0.762527 + 2.71598 1.64801 0.986193 0.712945 -0.337458 -0.61468 + 2.80102 1.66446 1.09471 0.864027 -0.233586 -0.445976 + 2.81293 1.61291 1.14119 0.873009 -0.225582 -0.432398 + 2.48122 1.62578 0.875297 0.0576972 -0.586627 -0.807799 + 2.60333 1.64967 0.891728 0.39063 -0.520367 -0.75936 + 2.65143 1.66036 0.922402 0.541031 -0.461766 -0.702892 + 2.67776 1.7169 0.900876 0.615671 -0.46008 -0.639747 + 2.72185 1.72568 0.947274 0.734082 -0.373179 -0.567328 + 2.39266 1.62727 0.890711 -0.178698 -0.409407 -0.89468 + 2.32032 1.74681 0.80888 -0.080778 -0.736278 -0.671841 + 2.41817 1.76788 0.780783 0.0867385 -0.663433 -0.743192 + 2.51266 1.68707 0.850743 0.176262 -0.512871 -0.840176 + 2.33938 1.62431 0.903847 -0.0807268 -0.234746 -0.968699 + 2.1281 1.7572 0.861874 -0.191533 -0.75013 -0.632945 + 2.23175 1.7483 0.824294 -0.202616 -0.80611 -0.555997 + 2.25326 1.7895 0.740335 0.113395 -0.981665 -0.153219 + 2.07482 1.75424 0.87501 0.0678055 -0.603834 -0.794221 + 2.07002 1.79113 0.816903 0.136201 -0.976298 -0.168201 + 2.17367 1.78214 0.779273 -0.0585759 -0.993051 -0.102069 + 2.0201 1.77625 0.798888 0.28461 -0.958639 0.00302481 + 2.16063 1.76303 0.711379 0.17972 -0.950578 0.253183 + 2.24023 1.7703 0.672389 0.244021 -0.966599 0.0783627 + 2.32775 1.80176 0.63849 0.343177 -0.937812 -0.0523219 + 2.35111 1.81057 0.712237 0.202888 -0.938995 -0.277712 + 2.11072 1.74814 0.693364 0.17752 -0.928081 0.32734 + 2.16828 1.73679 0.612622 0.375287 -0.901583 0.215191 + 2.23005 1.77134 0.598377 0.433469 -0.900303 0.0394736 + 2.09294 1.7091 0.57958 0.34235 -0.883237 0.320451 + 2.18945 1.73318 0.523476 0.468924 -0.849497 0.241797 + 2.31758 1.80281 0.564478 0.393126 -0.869731 -0.298361 + 1.82181 0.634855 0.772834 -0.836211 -0.515998 -0.185735 + 1.86328 0.522468 0.640895 -0.963848 -0.213776 -0.159052 + 1.85602 0.48344 0.700494 -0.939084 -0.329717 -0.0969986 + 1.85124 0.55914 0.898177 -0.80946 -0.582162 -0.076567 + 1.85867 0.560346 0.57509 -0.942193 -0.275062 -0.191345 + 1.90574 0.492112 0.483073 -0.829741 -0.422046 -0.365249 + 1.89848 0.453085 0.542671 -0.793513 -0.534383 -0.291156 + 1.87381 0.447583 0.759598 -0.806263 -0.589642 0.0475713 + 1.86903 0.523284 0.95728 -0.803541 -0.588331 -0.0904918 + 1.9883 0.45298 0.409452 -0.417599 -0.705123 -0.573072 + 2.00954 0.415124 0.469421 -0.204335 -0.935948 -0.286789 + 1.91972 0.415229 0.60264 -0.549737 -0.81767 -0.170893 + 1.91275 0.418998 0.829711 -0.727032 -0.685426 0.0402044 + 1.94935 0.565786 0.362664 -0.617152 -0.0384118 -0.785906 + 2.02161 0.483805 0.35906 -0.03745 -0.574896 -0.817369 + 2.08366 0.48792 0.382134 0.525269 -0.420733 -0.739646 + 2.06514 0.433022 0.407221 0.26415 -0.739555 -0.619099 + 2.02637 0.400974 0.55173 -0.0700898 -0.977697 -0.197978 + 1.96117 0.623916 0.370181 -0.582338 0.309576 -0.751695 + 2.03079 0.576167 0.342284 0.0479223 -0.0215181 -0.998619 + 2.09283 0.580194 0.365307 0.48037 -0.11017 -0.870119 + 2.13465 0.524988 0.431131 0.689607 -0.423183 -0.587671 + 2.11612 0.470088 0.456217 0.721537 -0.57025 -0.392682 + 2.06893 0.717615 0.389289 0.0168197 0.449892 -0.892925 + 2.0426 0.634297 0.349801 0.0357102 0.264327 -0.963772 + 2.13163 0.660539 0.38755 0.443276 0.150754 -0.883618 + 2.19049 0.596965 0.432463 0.639774 -0.295599 -0.709444 + 2.15795 0.743771 0.426986 0.366044 0.360736 -0.857835 + 2.22929 0.677309 0.454703 0.597338 0.0398495 -0.800999 + 2.29897 0.667008 0.517943 0.739136 -0.248636 -0.625986 + 2.25055 0.615226 0.490033 0.718076 -0.437572 -0.5412 + 2.19471 0.543249 0.488701 0.681708 -0.526608 -0.507895 + 2.29095 0.754304 0.509943 0.590004 0.155228 -0.792338 + 2.36063 0.744003 0.573183 0.723767 -0.0701408 -0.68647 + 2.37781 0.693688 0.612731 0.750656 -0.375087 -0.543898 + 2.33759 0.653832 0.596765 0.73113 -0.500001 -0.464164 + 2.28918 0.60205 0.568855 0.744919 -0.480831 -0.46249 + 2.33615 0.828191 0.564767 0.559638 0.28448 -0.778381 + 2.41636 0.820637 0.631649 0.739303 0.115705 -0.663358 + 2.40083 0.774762 0.610509 0.726021 -0.0241785 -0.687247 + 2.41802 0.724447 0.650057 0.791033 -0.314137 -0.524962 + 2.39662 0.676452 0.657786 0.754001 -0.5525 -0.355283 + 2.45752 0.899734 0.695248 0.764468 0.172604 -0.621125 + 2.48254 0.845314 0.738309 0.892254 -0.0327908 -0.450342 + 2.4625 0.801927 0.699457 0.877721 -0.0342006 -0.47795 + 2.44697 0.756052 0.678316 0.86418 -0.192485 -0.464912 + 2.48473 0.934199 0.747354 0.875184 0.0846304 -0.47633 + 2.50976 0.879865 0.790465 0.92145 -0.0224679 -0.387847 + 2.49905 0.810617 0.786604 0.941661 -0.220736 -0.254069 + 2.479 0.767145 0.747704 0.921024 -0.264187 -0.286217 + 2.45367 0.732084 0.713029 0.860567 -0.394201 -0.322536 + 2.52809 0.924004 0.840815 0.942149 0.0156458 -0.33483 + 2.5386 0.896836 0.880669 0.964608 -0.082113 -0.250576 + 2.52027 0.852697 0.830319 0.949232 -0.204135 -0.239349 + 2.49331 0.781366 0.82267 0.9276 -0.364023 -0.0839421 + 2.5344 0.980681 0.864848 0.928631 -0.00801826 -0.370919 + 2.55869 0.939821 0.946216 0.951577 -0.124901 -0.280894 + 2.54014 0.858694 0.912934 0.939332 -0.313187 -0.13989 + 2.51454 0.823445 0.866386 0.904225 -0.40913 -0.122436 + 2.58618 0.988521 1.00507 0.979071 -0.140135 -0.147585 + 2.56023 0.901679 0.978481 0.954078 -0.290333 -0.0737738 + 2.53165 0.838818 1.05256 0.913538 -0.402561 0.0582432 + 2.51634 0.79982 0.971909 0.883863 -0.466957 -0.027164 + 2.49073 0.764571 0.92536 0.886831 -0.459666 -0.0473023 + 2.60092 1.04733 1.08021 0.98845 -0.138787 -0.0608608 + 2.56768 0.943084 1.07156 0.944623 -0.322299 0.0617331 + 2.5391 0.88031 1.14569 0.924055 -0.37523 0.0729709 + 2.58243 1.00189 1.14671 0.958156 -0.282252 0.0476613 + 2.54816 0.916788 1.24551 0.924885 -0.376572 0.0527289 + 2.49043 0.791906 1.25421 0.887843 -0.45236 0.0842909 + 2.48424 0.761974 1.15306 0.869378 -0.488031 0.0775038 + 2.46892 0.722888 1.07236 0.857893 -0.510084 0.0619184 + 2.59308 1.04304 1.25684 0.950486 -0.310767 0.000276595 + 2.55881 0.957931 1.35565 0.927786 -0.369289 0.0532814 + 2.51029 0.860121 1.45466 0.897745 -0.434915 0.0700224 + 2.49949 0.828385 1.35403 0.886072 -0.459019 0.0646431 + 2.42666 0.707028 1.40663 0.845744 -0.527412 0.0809584 + 2.63788 1.20703 1.1818 0.924135 -0.302237 -0.233726 + 2.61715 1.10987 1.32427 0.934838 -0.354857 -0.0124516 + 2.61877 1.12024 1.39092 0.928873 -0.346621 0.130568 + 2.56943 1.00822 1.47854 0.936878 -0.339198 0.0848845 + 2.69088 1.31879 1.16602 0.832613 -0.488627 -0.260765 + 2.68403 1.27004 1.36046 0.912318 -0.409108 -0.0174877 + 2.68566 1.28041 1.4271 0.833458 -0.458786 0.307997 + 2.69582 1.36191 1.10273 0.747763 -0.449461 -0.488707 + 2.82917 1.55684 1.26112 0.91173 -0.404572 -0.0712022 + 2.73704 1.3818 1.34469 0.898624 -0.438482 0.0144118 + 2.83411 1.59996 1.19782 0.924772 -0.25079 -0.286185 + 2.88133 1.67507 1.38653 0.916335 -0.399711 -0.023677 + 2.84279 1.60821 1.36312 0.856738 -0.490286 0.160061 + 2.75066 1.43318 1.4467 0.893546 -0.394843 0.213716 + 2.90337 1.85575 1.33597 0.949621 0.0161176 -0.312987 + 2.92455 1.84272 1.39255 0.973919 -0.0519995 -0.220858 + 2.86532 1.87264 1.20993 0.952761 0.00404706 -0.303695 + 2.95481 2.09748 1.58589 0.974836 -0.00174564 -0.222915 + 2.98303 2.14159 1.73209 0.988962 -0.0402742 -0.142589 + 2.99574 2.15389 1.85579 0.981807 -0.189344 0.014288 + 2.93726 1.8551 1.51631 0.983621 -0.15214 -0.0966632 + 2.80689 1.74221 1.05584 0.890065 -0.216512 -0.401132 + 2.81001 1.82439 1.0431 0.925427 -0.0260535 -0.37803 + 2.81581 2.05844 1.12231 0.945637 0.0702556 -0.317545 + 2.91676 2.11437 1.45984 0.958892 0.030765 -0.282098 + 2.72177 1.82364 0.876602 0.808816 -0.282963 -0.515509 + 2.72489 1.90582 0.863861 0.923415 -0.0291651 -0.382693 + 2.76051 2.01011 0.95543 0.934749 0.0349288 -0.353588 + 2.7848 2.16815 1.04528 0.950584 0.0400578 -0.307871 + 2.87667 2.11855 1.3206 0.954486 -0.0238058 -0.297303 + 2.67768 1.81486 0.830204 0.559341 -0.493534 -0.666004 + 2.67396 1.9354 0.721423 0.776952 -0.421209 -0.467898 + 2.68502 1.95172 0.749157 0.954307 -0.0233638 -0.297914 + 2.71138 1.98324 0.833165 0.938418 0.0114834 -0.345311 + 2.62967 1.7062 0.870201 0.482092 -0.492265 -0.72475 + 2.58267 1.73848 0.824504 0.270608 -0.514977 -0.81337 + 2.63068 1.84713 0.784507 0.351959 -0.618914 -0.702189 + 2.48818 1.81928 0.754544 0.206464 -0.72191 -0.660468 + 2.58025 1.85702 0.72798 0.356293 -0.776905 -0.519109 + 2.62354 1.94529 0.664895 0.485335 -0.76367 -0.425744 + 2.43108 1.83731 0.699718 0.284864 -0.921229 -0.264933 + 2.52314 1.87505 0.673153 0.380824 -0.851003 -0.361617 + 2.56371 1.90541 0.638774 0.538406 -0.813374 -0.220321 + 2.65259 1.99834 0.58761 0.855624 -0.475973 -0.203363 + 2.40771 1.82859 0.62602 0.309136 -0.916423 -0.254175 + 2.44828 1.85895 0.591641 0.425765 -0.871223 -0.244324 + 2.59276 1.95846 0.561488 0.568262 -0.78942 -0.23215 + 2.45007 1.87419 0.527834 0.393111 -0.89808 -0.197273 + 2.59456 1.9737 0.497681 0.629886 -0.764202 -0.138706 + 2.65958 2.04483 0.483687 0.897798 -0.437804 -0.0478185 + 2.66253 2.06267 0.61958 0.98472 -0.0204596 -0.17294 + 2.36711 1.85411 0.519218 0.266042 -0.869767 -0.415603 + 2.49456 1.90442 0.452076 0.427214 -0.898405 -0.101765 + 2.59875 1.98864 0.397003 0.681887 -0.731436 -0.00562154 + 2.66377 2.05986 0.383058 0.854675 -0.518882 0.0171137 + 2.3475 1.89328 0.451581 0.467733 -0.587779 -0.660107 + 2.3478 1.96087 0.399315 -0.244105 -0.794221 -0.556441 + 2.4116 1.88434 0.44346 -0.106566 -0.913771 -0.392003 + 2.42771 1.91018 0.369699 -0.251129 -0.929934 -0.268622 + 2.51789 1.91892 0.360977 0.367215 -0.928262 -0.0590254 + 2.26025 1.98695 0.359346 0.149794 -0.958924 -0.240888 + 2.36392 1.98662 0.325503 -0.436626 -0.898441 -0.046489 + 2.35463 1.97552 0.240132 -0.267618 -0.963065 0.0297682 + 2.46725 1.92879 0.287876 -0.0923059 -0.988734 -0.117834 + 2.55743 1.93752 0.279154 0.451304 -0.889987 0.0651723 + 2.11899 1.92745 0.436183 -0.150894 -0.777408 -0.610628 + 2.25096 1.97584 0.273974 0.0223312 -0.988689 -0.14831 + 1.97939 1.91008 0.527278 -0.464129 -0.153791 -0.872314 + 2.10042 1.94287 0.395095 -0.460241 -0.664172 -0.589113 + 2.23238 1.99125 0.232885 -0.0799532 -0.996497 -0.0245063 + 2.35579 1.96937 0.155186 -0.271557 -0.943545 0.18968 + 2.46841 1.92264 0.20293 -0.146599 -0.981954 0.119476 + 1.98681 1.983 0.502177 -0.561287 -0.301657 -0.770688 + 2.10785 2.01579 0.369994 -0.645005 -0.583986 -0.492878 + 2.21447 1.97213 0.146212 -0.348375 -0.936876 -0.029968 + 2.33788 1.95024 0.068513 -0.31059 -0.935433 0.168814 + 1.86395 1.92119 0.601043 -0.367421 -0.116224 -0.922764 + 1.86303 1.97649 0.569659 -0.0802777 -0.65664 -0.74992 + 1.98589 2.03839 0.470843 -0.368885 -0.695125 -0.617029 + 2.09749 2.04099 0.300132 -0.607779 -0.747658 -0.267605 + 2.20412 1.99725 0.076298 -0.464977 -0.88396 -0.0491106 + 1.72344 1.78891 0.607946 -0.0683575 0.205625 -0.97624 + 1.73866 1.86406 0.624396 0.0576267 -0.0879699 -0.994455 + 1.75061 1.91433 0.605914 0.221224 -0.551671 -0.804189 + 1.84856 2.01994 0.506199 0.275472 -0.903026 -0.329635 + 1.97685 2.07276 0.415306 -0.133399 -0.933509 -0.332815 + 1.55876 1.75007 0.57343 0.275332 0.00285728 -0.961345 + 1.62279 1.80396 0.596478 0.299484 -0.0830465 -0.95048 + 1.63474 1.85424 0.577997 0.507909 -0.636863 -0.58003 + 1.62911 1.86904 0.529369 0.574287 -0.705876 -0.41465 + 1.73614 1.95778 0.542454 0.4003 -0.775248 -0.488621 + 1.4907 1.74 0.544658 0.499719 -0.517574 -0.694549 + 1.55473 1.7939 0.567707 0.574051 -0.467155 -0.672482 + 1.5491 1.8087 0.519079 0.558113 -0.675436 -0.481971 + 1.6096 1.89578 0.469647 0.534305 -0.669692 -0.515782 + 1.42107 1.71157 0.51291 0.445146 -0.643983 -0.622198 + 1.32788 1.68917 0.501908 0.451926 -0.790947 -0.412512 + 1.3416 1.70969 0.431165 0.204113 -0.701643 -0.682668 + 1.47947 1.78026 0.487332 0.52898 -0.565696 -0.632589 + 1.48119 1.81453 0.465381 0.403264 -0.407623 -0.819281 + 1.51874 1.84632 0.463109 0.371934 -0.682713 -0.628942 + 1.33145 1.63145 0.543685 0.00577073 -0.586066 -0.810243 + 1.24213 1.58922 0.591819 0.405878 -0.653216 -0.639196 + 1.25585 1.60974 0.521077 0.733069 -0.677968 -0.054492 + 0.202299 1.02452 0.721508 0.907211 -0.410738 -0.0908981 + 0.15157 1.06403 0.643287 -0.979472 -0.0908809 0.179929 + 0.234082 0.897133 0.710156 -0.837062 -0.441437 0.323203 + 0.244229 0.870941 0.669123 -0.690048 -0.721132 -0.0616642 + 0.309676 0.843906 0.623748 -0.233073 -0.871502 -0.431464 + 0.152736 0.978969 0.620009 -0.937993 -0.318667 0.136454 + 0.189415 0.940339 0.661921 -0.794578 -0.0695574 0.603164 + 0.219009 0.907591 0.61584 -0.646218 -0.744772 -0.166487 + 0.284455 0.880559 0.570464 -0.312537 -0.845145 -0.433648 + 0.162528 1.00458 0.544659 -0.823551 -0.121026 -0.55418 + 0.182329 0.946137 0.57388 -0.708726 -0.630776 -0.315958 + 0.268357 0.921192 0.510286 -0.309738 -0.667453 -0.677177 + 0.360002 0.911817 0.510322 0.1237 -0.734881 -0.66682 + 0.3761 0.87127 0.570549 0.125586 -0.844819 -0.520105 + 0.336879 0.960448 0.457692 0.042657 -0.633968 -0.772182 + 0.50752 0.852181 0.689413 0.332563 -0.852478 -0.403341 + 0.796318 1.05165 0.751717 0.461918 -0.535962 -0.706666 + 0.836418 1.08358 0.728015 0.175088 -0.526333 -0.832057 + 0.864226 1.02491 0.785242 0.0570301 -0.699887 -0.711974 + 0.819133 1.15034 0.699185 0.171875 -0.0589575 -0.983353 + 0.925343 1.0704 0.750837 0.388301 -0.512821 -0.765661 + 0.912503 1.00653 0.803681 0.233334 -0.666625 -0.707931 + 0.928794 0.949375 0.867469 0.170093 -0.679648 -0.713545 + 0.908058 1.13717 0.722007 0.270862 -0.250709 -0.929397 + 1.01464 1.15234 0.772115 0.64582 -0.423266 -0.635423 + 1.0018 1.08846 0.824958 0.486827 -0.327264 -0.809875 + 1.02022 1.0493 0.8338 0.226322 -0.394117 -0.890758 + 1.05187 0.99702 0.888545 -0.297698 -0.357201 -0.885315 + 0.998934 1.2881 0.724183 0.333965 -0.129558 -0.933639 + 1.00783 1.21606 0.740162 0.499355 -0.244388 -0.831215 + 1.10713 1.32608 0.795797 0.538744 -0.38091 -0.75144 + 1.13606 1.2957 0.832614 0.218669 -0.351567 -0.910266 + 1.15449 1.25662 0.841506 -0.553634 0.133807 -0.82194 + 0.970805 1.34472 0.708509 0.0412451 0.0257167 -0.998818 + 1.09286 1.46508 0.74365 -0.00318308 -0.228903 -0.973444 + 1.10032 1.38979 0.763845 0.283601 -0.326596 -0.901613 + 1.18554 1.48162 0.722401 0.110353 -0.648594 -0.753092 + 1.06473 1.5217 0.727976 0.180033 -0.508141 -0.842248 + 1.18281 1.61753 0.660593 -0.386171 -0.553711 -0.73775 + 1.19027 1.54224 0.680788 -0.646054 -0.296844 -0.703205 + 1.25585 1.60974 0.521077 -0.855804 -0.245678 -0.455239 + 1.26058 1.67037 0.479465 -0.707525 -0.12166 -0.696137 + 1.11069 1.64925 0.566047 0.182669 -0.850071 -0.493975 + 1.17119 1.6447 0.623934 0.239739 -0.799342 -0.550979 + 1.27974 1.74305 0.504183 0.116358 -0.779946 -0.614935 + 1.26813 1.77022 0.467524 0.53658 -0.827109 -0.167254 + 1.40002 1.84843 0.43166 0.318277 -0.808561 -0.494902 + 1.08987 1.68747 0.501654 -0.334451 -0.709302 -0.620511 + 1.27714 1.73384 0.36654 0.362731 -0.922568 -0.131513 + 1.0847 1.76643 0.448892 -0.646018 -0.37113 -0.667026 + 1.25633 1.77205 0.302146 -0.280083 -0.705534 -0.65098 + 1.39581 1.80816 0.253611 0.464538 -0.795514 -0.389053 + 1.3723 1.80029 0.286041 0.62763 -0.711542 0.315894 + 1.36329 1.83676 0.387075 0.505454 -0.851617 0.138795 + 0.963748 1.67169 0.607379 -0.755497 -0.22715 -0.614513 + 1.02368 1.78898 0.51143 -0.892864 0.190919 -0.407853 + 1.07689 1.85796 0.419351 -0.887376 0.140668 -0.439063 + 1.20666 1.87117 0.272668 -0.581059 -0.371834 -0.723955 + 0.939812 1.7023 0.659358 -0.88657 0.0803309 -0.455567 + 1.27974 1.74305 0.504183 -0.8219 0.38494 -0.419883 + 1.36248 1.81655 0.433883 -0.427988 0.603869 -0.672435 + 1.34332 1.74387 0.409165 -0.172196 -0.0570466 -0.98341 + 1.25585 1.60974 0.521077 -0.220231 -0.536248 -0.814823 + 1.40002 1.84843 0.43166 -0.645561 0.762778 0.0376797 + 1.49371 1.87369 0.4009 0.34234 -0.911475 -0.228071 + 1.58458 1.92315 0.407439 0.557262 -0.750147 -0.356003 + 1.71664 1.98444 0.482681 0.278229 -0.831885 -0.480163 + 1.45697 1.86202 0.356314 0.354918 -0.929497 0.10034 + 1.48049 1.86989 0.323885 0.53095 -0.844942 -0.0645404 + 1.56568 1.92661 0.343843 0.60291 -0.771357 -0.203735 + 1.70041 2.01636 0.421399 0.301257 -0.875416 -0.378009 + 1.45717 1.86774 0.25622 0.503959 -0.747068 -0.433491 + 1.54235 1.92454 0.276228 0.504036 -0.863544 -0.0154657 + 1.68151 2.01991 0.357853 0.49261 -0.870166 -0.0121202 + 1.80615 2.05582 0.310851 -0.247213 -0.930943 -0.268756 + 1.35107 1.82046 0.2205 0.0308679 -0.583249 -0.811707 + 1.41242 1.88004 0.223108 0.296819 -0.475157 -0.828326 + 1.42618 1.90793 0.206004 0.0559549 -0.788487 -0.6125 + 1.52271 1.90991 0.211981 0.331174 -0.897673 -0.2907 + 1.66635 1.9747 0.290952 0.460207 -0.837403 0.294899 + 1.3014 1.91958 0.191021 -0.260683 -0.473029 -0.841599 + 1.31516 1.94747 0.173917 0.0440153 -0.697839 -0.7149 + 1.40595 1.93105 0.152164 -0.156965 -0.870254 -0.466927 + 1.50248 1.93302 0.15814 0.0554339 -0.941576 -0.332208 + 1.64671 1.96006 0.226704 0.431689 -0.899067 0.0729549 + 1.19886 1.96262 0.243077 -0.732002 -0.213603 -0.646952 + 1.26321 2.0167 0.155612 -0.652699 -0.227075 -0.722787 + 1.30196 1.97625 0.143271 -0.467895 -0.51246 -0.720041 + 1.39275 1.95991 0.121567 -0.25105 -0.663083 -0.705191 + 1.47766 1.95416 0.101329 -0.0823218 -0.749088 -0.657335 + 1.12415 1.9304 0.389289 -0.904072 0.337209 -0.26257 + 1.17438 2.06327 0.257947 -0.908346 0.140968 -0.393745 + 1.23873 2.11735 0.170481 -0.741687 -0.0562635 -0.668382 + 1.33453 2.06406 0.095774 -0.60626 -0.214866 -0.76569 + 1.37329 2.02361 0.083435 -0.334344 -0.352648 -0.873987 + 1.07094 1.86142 0.481368 -0.784607 0.114513 -0.609327 + 1.13327 1.96877 0.413429 -0.869528 0.493876 0.00283459 + 0.972324 1.71963 0.595543 -0.851201 0.516356 -0.0939909 + 1.02369 1.81801 0.518748 -0.38825 -0.321218 -0.86376 + 1.4582 2.01786 0.063199 -0.312538 -0.605407 -0.731986 + 1.59463 1.94725 0.1013 0.0663678 -0.876901 -0.476067 + 1.61945 1.92603 0.15806 0.243899 -0.969305 0.0310103 + 1.43484 2.0693 0.0235 -0.451963 -0.743282 -0.493215 + 1.57347 1.98018 0.03807 -0.0562376 -0.816198 -0.575029 + 1.66293 2.07241 -0.037486 0.258456 -0.663051 -0.702541 + 1.68409 2.03939 0.025701 0.27263 -0.727827 -0.629238 + 1.70857 1.99641 0.074348 0.490401 -0.804537 -0.335002 + 1.38042 2.10717 0.002718 -0.424909 -0.664467 -0.614765 + 1.55011 2.03162 -0.001628 -0.214168 -0.595484 -0.774294 + 1.63216 2.12829 -0.077678 -0.0197043 -0.489115 -0.871997 + 1.71628 2.29053 -0.143889 -0.350455 -0.527353 -0.774003 + 1.74988 2.21936 -0.135015 -0.0760398 -0.581662 -0.809869 + 1.33928 2.16376 -0.010112 -0.422975 -0.278949 -0.862137 + 1.53196 2.1008 -0.030862 -0.256697 -0.418164 -0.871347 + 1.61401 2.19748 -0.106921 -0.108177 -0.517776 -0.848649 + 1.68551 2.34651 -0.184032 0.0644446 -0.625817 -0.777303 + 1.70192 2.42975 -0.265816 -0.571784 -0.719947 -0.393369 + 1.31168 2.22762 -0.000509 -0.476709 -0.374344 -0.795371 + 1.49081 2.1574 -0.043692 -0.286219 -0.444091 -0.849036 + 1.56252 2.23009 -0.131389 -0.180634 -0.605685 -0.774931 + 1.62659 2.36279 -0.226046 0.192369 -0.61118 -0.767759 + 1.27698 2.27543 -0.022522 -0.270669 -0.862189 -0.428214 + 1.44143 2.21733 -0.061887 -0.372907 -0.561533 -0.738661 + 1.51313 2.29001 -0.149574 -0.289754 -0.611365 -0.736394 + 1.5751 2.3954 -0.250513 -0.0542794 -0.696207 -0.715786 + 1.58421 2.4825 -0.34479 0.0710746 -0.822369 -0.564498 + 1.40673 2.26514 -0.0839 -0.311667 -0.645853 -0.696949 + 1.45249 2.32849 -0.170436 -0.270604 -0.687699 -0.673679 + 1.50702 2.42195 -0.279312 -0.110617 -0.738128 -0.665531 + 1.44772 2.53598 -0.412815 0.0751554 -0.845197 -0.529144 + 1.5158 2.50943 -0.384024 -0.0406863 -0.823733 -0.565516 + 1.39437 2.37983 -0.191359 -0.171735 -0.742652 -0.647283 + 1.44638 2.46044 -0.300165 -0.189766 -0.796118 -0.574618 + 1.38229 2.53653 -0.460558 0.176715 -0.802337 -0.570111 + 1.32563 2.61155 -0.555713 0.316298 -0.76934 -0.555042 + 1.40544 2.59553 -0.522956 0.0654508 -0.851329 -0.520533 + 1.33181 2.40193 -0.223025 -0.00531729 -0.786412 -0.617679 + 1.38039 2.48423 -0.321586 -0.0946595 -0.858646 -0.503752 + 1.3163 2.56033 -0.481979 0.0610148 -0.944679 -0.322272 + 1.2602 2.61211 -0.603465 0.784775 -0.617647 -0.051381 + 1.39026 2.63554 -0.586252 -0.133654 -0.97668 0.168024 + 1.26661 2.4303 -0.253176 0.137693 -0.836198 -0.530861 + 1.31783 2.50633 -0.353252 0.185982 -0.873261 -0.450361 + 1.27251 2.55329 -0.502787 0.338238 -0.92525 -0.171777 + 1.25085 2.53548 -0.642347 0.440322 -0.876021 0.196731 + 1.20572 2.43121 -0.29614 0.252556 -0.874902 -0.413233 + 1.25834 2.48932 -0.404594 0.408645 -0.831082 -0.377243 + 1.21302 2.53637 -0.554078 0.0101246 -0.981543 -0.190975 + 1.20705 2.52844 -0.663154 -0.32234 -0.924094 -0.205299 + 1.29075 2.53949 -0.6781 0.234468 -0.96012 0.152295 + 1.19745 2.49031 -0.447509 0.294009 -0.88254 -0.366991 + 1.13696 2.56225 -0.572121 0.24055 -0.816552 -0.524765 + 1.13498 2.58815 -0.664973 -0.34989 -0.869559 -0.348488 + 1.1783 2.60535 -0.717757 -0.228783 -0.445422 -0.865596 + 1.25037 2.54564 -0.715938 0.00630611 -0.546052 -0.837727 + 1.14564 2.48276 -0.502637 0.414545 -0.783728 -0.462518 + 1.08515 2.55479 -0.6272 0.321934 -0.602177 -0.730576 + 1.05893 2.61404 -0.683015 -0.248084 -0.66334 -0.705999 + 1.09197 2.49324 -0.547582 0.0228098 -0.863729 -0.50344 + 1.00774 2.56423 -0.626535 -0.213493 -0.706061 -0.675202 + 0.952736 2.65753 -0.671346 -0.133289 -0.534675 -0.83448 + 0.995094 2.70139 -0.709304 -0.182556 -0.0647531 -0.981061 + 1.10128 2.65798 -0.720924 -0.190865 -0.241193 -0.951523 + 0.935983 2.58446 -0.605581 -0.0900865 -0.66383 -0.742438 + 0.875326 2.66696 -0.670681 -0.0999409 -0.421074 -0.901503 + 0.923069 2.74734 -0.688105 -0.11676 0.0871691 -0.989327 + 1.18747 2.72598 -0.714907 -0.121215 0.263575 -0.956993 + 1.26096 2.67633 -0.738505 -0.0684365 0.00595046 -0.997638 + 0.870966 2.57111 -0.610862 0.295643 -0.26993 -0.916369 + 0.778787 2.66576 -0.665798 0.0984849 -0.344216 -0.933711 + 0.826531 2.74605 -0.683273 -0.0455286 0.0476413 -0.997826 + 1.11545 2.77194 -0.693708 -0.167445 0.248483 -0.954054 + 1.33308 2.79385 -0.727258 -0.0948411 -0.200281 -0.975137 + 0.798624 2.54457 -0.643083 0.509149 0.133604 -0.850246 + 0.713771 2.65233 -0.67113 0.477435 -0.197945 -0.85608 + 0.779571 2.78279 -0.673504 0.0612776 0.0646197 -0.996027 + 1.04311 2.83942 -0.656181 -0.165697 0.189405 -0.967817 + 0.887914 2.47712 -0.585663 0.573875 -0.0462899 -0.817633 + 0.765683 2.50322 -0.683475 0.594998 0.295082 -0.747599 + 0.673895 2.61527 -0.694348 0.748482 -0.092454 -0.656678 + 0.640955 2.57392 -0.734732 0.967448 0.156922 -0.198544 + 0.650081 2.67466 -0.739609 0.874451 -0.485098 -0.00393705 + 0.9257 2.91973 -0.647078 0.419638 -0.628224 -0.655164 + 0.996149 2.87607 -0.646464 -0.083087 0.000552148 -0.996542 + 0.673952 2.50458 -0.790829 0.967494 0.252412 0.0155832 + 0.683078 2.60532 -0.795705 0.769421 -0.286839 0.570714 + 0.836086 2.84874 -0.689923 0.671471 -0.611283 -0.418879 + 1.04073 2.97995 -0.685998 -0.0815139 -0.694347 -0.715009 + 0.734671 2.39274 -0.790508 0.82232 0.427947 -0.375036 + 1.23082 2.97775 -0.795581 -0.366035 -0.589373 -0.720179 + 1.11118 2.9363 -0.685384 -0.323937 -0.417107 -0.849168 + 1.1885 2.88821 -0.697087 -0.404972 -0.207456 -0.890483 + 1.19572 3.04732 -0.839083 -0.0829407 -0.901272 -0.42524 + 1.31198 3.01028 -0.86213 -0.148386 -0.670049 -0.727335 + 1.3905 3.00163 -0.85515 -0.03438 -0.334962 -0.941604 + 1.30814 2.92966 -0.807285 -0.340962 -0.474834 -0.811343 + 1.36325 3.06702 -0.907792 0.155057 -0.833908 -0.529674 + 1.43413 3.09074 -0.915481 0.502967 -0.851769 -0.146675 + 1.38286 3.03391 -0.869861 0.260468 -0.545147 -0.796851 + 1.47907 3.14352 -0.870306 0.666408 -0.700049 -0.256579 + 1.48671 3.11124 -0.855587 0.593306 -0.175406 -0.785634 + 1.46456 2.96133 -0.856744 0.433671 -0.509201 -0.7434 + 1.3822 2.88936 -0.80888 -0.125509 -0.464528 -0.876619 + 1.59496 3.20381 -0.955135 0.63392 -0.726842 0.264284 + 1.54549 3.15754 -0.791375 0.887634 -0.370916 -0.272996 + 1.52334 3.00771 -0.792474 0.837472 -0.281624 -0.468326 + 1.45443 2.86248 -0.801524 0.44711 -0.59702 -0.666078 + 1.26084 2.82082 -0.734563 -0.277489 -0.275354 -0.920424 + 1.77508 3.28657 -1.06087 0.487567 -0.717152 0.497967 + 1.86176 3.43631 -0.971036 0.518958 -0.61624 0.592394 + 1.68164 3.35355 -0.865289 0.67825 -0.554468 0.482227 + 1.91688 3.30485 -1.13414 0.239255 -0.697744 0.675212 + 1.97363 3.439 -1.04168 0.29723 -0.583833 0.755509 + 2.00552 3.64988 -0.887349 0.457435 -0.53112 0.713208 + 2.03489 3.31849 -1.14235 -0.0182706 -0.615519 0.78791 + 2.09165 3.45262 -1.04988 0.054304 -0.457319 0.887643 + 2.11739 3.65256 -0.957993 0.2582 -0.660345 0.705179 + 2.09605 3.15024 -1.26755 -0.263228 -0.305557 0.915066 + 2.13632 3.2951 -1.13945 -0.266846 -0.550978 0.790706 + 2.1816 3.33755 -1.09758 -0.132174 -0.416136 0.899645 + 2.18006 3.48536 -1.04378 0.0413162 -0.370108 0.92807 + 2.20581 3.68529 -0.95188 0.271468 -0.417502 0.867178 + 2.14282 3.05528 -1.26346 -0.49629 -0.218851 0.840119 + 2.21833 3.15421 -1.17961 -0.500217 -0.336075 0.798021 + 2.2636 3.19658 -1.1378 -0.107978 -0.319223 0.941508 + 2.27696 3.31872 -1.10056 0.050101 -0.323185 0.945009 + 2.27543 3.46653 -1.04677 0.264821 -0.305753 0.914541 + 2.11149 2.90972 -1.33014 -0.521176 -0.281282 0.805764 + 2.32373 2.91548 -1.12313 -0.587964 0.0175507 0.808697 + 2.2651 3.05915 -1.17558 -0.537321 -0.084115 0.839173 + 2.32326 3.04155 -1.14509 0.0336512 0.195202 0.980186 + 2.30229 3.14979 -1.15956 0.552687 0.0674438 0.830656 + 2.25441 2.49434 -1.34129 -0.694787 -0.245086 0.676169 + 2.29241 2.76992 -1.18981 -0.719133 -0.212029 0.661733 + 2.43192 2.81345 -1.02221 -0.700339 0.244804 0.670519 + 2.3819 2.89788 -1.09264 -0.184813 0.50216 0.844795 + 2.19343 2.3614 -1.44902 -0.673294 -0.429962 0.601505 + 2.38166 2.37619 -1.23645 -0.780582 -0.2705 0.56349 + 2.41966 2.65186 -1.08493 -0.812118 -0.190649 0.551468 + 2.19141 2.26339 -1.55927 -0.590204 -0.681517 0.432659 + 2.28861 2.25875 -1.43763 -0.594287 -0.646519 0.478368 + 2.40446 2.27752 -1.25614 -0.677232 -0.554043 0.484142 + 2.50558 2.41975 -1.0117 -0.859194 -0.219936 0.461967 + 2.1959 2.24044 -1.60352 -0.266858 -0.960607 0.0775979 + 2.31731 2.23023 -1.45523 -0.203759 -0.963926 0.171253 + 2.43316 2.24899 -1.27374 -0.221677 -0.938223 0.265702 + 2.56039 2.29426 -1.03674 -0.232768 -0.930696 0.282175 + 2.52838 2.32108 -1.03139 -0.717522 -0.532754 0.448704 + 2.22027 2.24431 -1.62202 0.307573 -0.839233 -0.448427 + 2.34167 2.2341 -1.47373 0.354542 -0.901958 -0.24652 + 2.45861 2.2487 -1.29362 0.378665 -0.919644 -0.104251 + 2.58585 2.29395 -1.05661 0.389559 -0.920836 -0.0174791 + 2.62979 2.32533 -0.864149 -0.241571 -0.944778 0.221443 + 2.11269 2.29132 -1.74085 0.260504 -0.675861 -0.689456 + 2.2528 2.27635 -1.62132 0.618366 -0.417079 -0.666084 + 2.37143 2.26879 -1.49442 0.671909 -0.529926 -0.517413 + 2.48837 2.28339 -1.31431 0.763623 -0.522942 -0.378697 + 2.6107 2.3166 -1.06664 0.791842 -0.547112 -0.271395 + 2.14522 2.32336 -1.74014 0.576688 -0.341687 -0.742079 + 2.20604 2.39694 -1.69919 0.702302 -0.108798 -0.703517 + 2.28302 2.33097 -1.61352 0.694617 -0.170725 -0.698827 + 2.40166 2.32341 -1.48662 0.790406 -0.196616 -0.580172 + 2.50482 2.35078 -1.32843 0.867374 -0.151911 -0.473904 + 2.05358 2.41322 -1.84278 0.495528 -0.304985 -0.813287 + 2.1144 2.48689 -1.80179 0.669009 -0.0503813 -0.741545 + 2.31438 2.50519 -1.59007 0.763922 0.0745473 -0.640988 + 2.39136 2.43913 -1.50445 0.790307 0.0546089 -0.610273 + 2.49453 2.4665 -1.34626 0.847806 0.0654729 -0.526249 + 1.94479 2.45263 -1.90705 0.336243 -0.33616 -0.879737 + 1.98576 2.53833 -1.90668 0.460474 0.023228 -0.887369 + 2.16603 2.59459 -1.75254 0.709055 0.137512 -0.691615 + 1.86195 2.54064 -1.95268 0.310542 -0.0748399 -0.947609 + 2.03739 2.64603 -1.85742 0.618068 0.076534 -0.78239 + 2.24194 2.72805 -1.6143 0.780376 0.208978 -0.589357 + 2.39029 2.63865 -1.45183 0.804111 0.212302 -0.555278 + 2.49329 2.5927 -1.31286 0.82348 0.213687 -0.525565 + 1.90627 2.66503 -1.94613 0.418474 -0.00425106 -0.908219 + 1.93489 2.81924 -1.90904 0.528604 0.120894 -0.840216 + 2.066 2.80025 -1.82034 0.693987 0.113716 -0.71095 + 2.17485 2.85109 -1.6634 0.795705 0.201428 -0.57121 + 2.38575 2.89521 -1.32322 0.838269 0.262333 -0.478002 + 1.80062 2.79505 -1.96253 0.1338 0.15225 -0.979243 + 1.8713 2.86373 -1.93829 0.294788 0.185389 -0.937406 + 1.98323 3.03521 -1.84151 0.634615 0.231175 -0.737443 + 2.03559 3.02965 -1.78487 0.734394 0.272104 -0.621792 + 2.14444 3.08049 -1.62792 0.778636 0.287473 -0.55775 + 1.7707 2.97684 -1.9164 0.133419 0.200884 -0.970487 + 1.84137 3.0456 -1.89209 0.156999 0.206819 -0.9657 + 1.91965 3.07969 -1.87075 0.373964 0.193041 -0.90713 + 1.55622 2.89886 -1.96933 0.187376 0.102362 -0.97694 + 1.68973 3.06889 -1.91844 0.229269 0.0715042 -0.970733 + 1.82756 3.12337 -1.8818 0.236797 -0.000513714 -0.971559 + 1.90584 3.15746 -1.86045 0.444827 0.201356 -0.872688 + 1.46366 2.88377 -1.98619 0.0932554 0.0330778 -0.995093 + 1.4767 3.16306 -1.97075 0.206175 0.0169078 -0.978369 + 1.48786 3.25512 -1.9694 0.107757 -0.245094 -0.963492 + 1.70089 3.16095 -1.91709 0.218922 -0.121734 -0.968119 + 1.81596 3.17598 -1.89651 0.319283 0.0327563 -0.947093 + 1.31949 3.00873 -1.98584 0.016312 -0.0207455 -0.999652 + 1.38414 3.14797 -1.98761 0.127312 -0.00612026 -0.991844 + 1.28456 2.89173 -1.99019 0.0221008 0.0463043 -0.998683 + 1.20375 2.92299 -1.98954 -0.0205017 0.0750963 -0.996966 + 1.17834 3.00699 -1.98062 -0.0720716 -0.0652024 -0.995266 + 1.17824 3.0538 -1.99369 -0.0675442 -0.27984 -0.957668 + 1.23855 3.08685 -1.99834 0.091776 -0.143728 -0.985352 + 1.16363 2.71074 -2.0043 0.108166 0.175013 -0.978607 + 1.10555 2.89233 -1.98803 0.0906666 0.125668 -0.987921 + 1.08014 2.97632 -1.97911 0.0794665 0.149379 -0.985581 + 1.06208 3.04749 -1.96857 0.144114 -0.112001 -0.983202 + 1.06198 3.0943 -1.98165 0.214222 -0.482034 -0.84956 + 1.05478 2.85312 -2.00632 0.362667 0.201661 -0.909838 + 1.02944 2.93831 -1.99707 0.352468 0.213754 -0.911085 + 1.01138 3.00948 -1.98653 0.654139 0.00684707 -0.756344 + 1.01116 3.05512 -1.99999 0.827631 -0.310653 -0.467462 + 1.07961 3.16294 -2.03154 0.414632 -0.837115 -0.356818 + 0.975299 2.85138 -2.0535 0.95144 0.238123 -0.195086 + 1.02879 3.12367 -2.04993 0.56819 -0.356565 -0.741634 + 1.13992 3.19591 -2.03624 0.229932 -0.177704 -0.956845 + 1.3032 3.226 -2.00016 0.179543 -0.063667 -0.981688 + 1.50006 2.89604 -0.702459 0.755571 -0.327893 -0.567096 + 1.40656 2.74411 -0.750897 0.231851 -0.214789 -0.948742 + 1.46196 2.7255 -0.700868 0.551622 -0.228435 -0.802204 + 1.33797 2.62378 -0.735288 0.155368 -0.278657 -0.94774 + 1.56896 3.04128 -0.69341 0.88533 -0.232284 -0.402783 + 1.61028 3.04066 -0.617947 0.802329 -0.119395 -0.584819 + 1.55546 2.87743 -0.65243 0.715171 -0.17481 -0.676736 + 1.61437 3.23854 -0.641875 0.890541 -0.182957 -0.41649 + 1.65569 3.23792 -0.566404 0.78743 -0.254906 -0.561229 + 1.67628 3.06941 -0.545148 0.726877 -0.0537266 -0.684663 + 1.62146 2.9061 -0.57968 0.718332 -0.110391 -0.686886 + 1.58849 3.30425 -0.777901 0.914292 -0.357275 0.190853 + 1.65737 3.38525 -0.628392 0.881303 -0.268859 -0.388612 + 1.72476 3.28224 -0.500178 0.733933 -0.0961806 -0.672378 + 1.74536 3.11365 -0.478972 0.67637 -0.0304491 -0.735933 + 1.70671 3.54272 -0.695131 0.871358 -0.468821 0.144717 + 1.77531 3.6815 -0.637106 0.884812 -0.462439 0.0570738 + 1.72597 3.52404 -0.570377 0.876903 -0.288922 -0.384143 + 1.79986 3.5921 -0.782469 0.615243 -0.491472 0.616386 + 1.86474 3.76767 -0.713957 0.663508 -0.494972 0.561035 + 1.84051 3.81505 -0.596833 0.861095 -0.504246 0.0652007 + 2.07039 3.82544 -0.818829 0.525064 -0.324806 0.786644 + 1.92994 3.90122 -0.673683 0.759256 -0.400809 0.512721 + 1.94943 4.01599 -0.560873 0.89014 -0.44434 -0.101061 + 1.95262 3.9314 -0.490156 0.811097 -0.424423 -0.402477 + 1.82365 3.76664 -0.537178 0.873063 -0.379806 -0.305792 + 2.14037 3.9084 -0.844915 0.519966 -0.226324 0.823658 + 1.97612 3.9831 -0.709897 0.775538 -0.28472 0.56345 + 1.99561 4.09788 -0.597096 0.902196 -0.430551 0.0258403 + 2.03259 4.06293 -0.415175 0.893177 -0.297131 -0.337561 + 2.03579 3.97842 -0.344398 0.861593 -0.0883979 -0.499843 + 2.20153 3.88538 -0.885041 0.352607 -0.269278 0.896191 + 2.13402 4.1046 -0.790138 0.520963 -0.339746 0.783052 + 2.0461 4.06606 -0.735983 0.618441 -0.330479 0.712962 + 2.02928 4.14695 -0.667097 0.75968 -0.528621 0.378743 + 2.03936 4.18336 -0.499351 0.917623 -0.374214 -0.133908 + 2.28373 3.89467 -0.903336 0.592753 -0.181143 0.784749 + 2.19518 4.08157 -0.830255 0.523382 -0.221904 0.822697 + 2.15099 4.25654 -0.721906 0.758773 -0.310386 0.572647 + 2.11721 4.18549 -0.721252 0.711338 -0.450945 0.539116 + 2.07304 4.23252 -0.569301 0.850339 -0.482751 0.209463 + 2.28801 3.69459 -0.970183 0.413654 -0.298851 0.859987 + 2.30531 3.92699 -0.930517 0.976263 0.101939 0.191098 + 2.22707 4.10422 -0.851082 0.721056 -0.093298 0.686567 + 2.18288 4.27918 -0.742733 0.833906 -0.111718 0.540482 + 2.31574 3.47529 -1.07374 0.87692 -0.128845 0.463045 + 2.32832 3.70336 -0.997166 0.960268 -0.0664704 0.271048 + 2.28632 3.94674 -0.972512 0.843449 0.245586 -0.477788 + 2.24854 4.17171 -0.91737 0.929195 0.261675 -0.261004 + 2.24864 4.13654 -0.878263 0.923726 0.0909507 0.3721 + 2.31565 3.27194 -1.12232 0.66785 -0.205359 0.715404 + 2.31988 3.32521 -1.13379 0.989768 -0.00581824 0.142569 + 2.31998 3.49107 -1.12188 0.888669 0.189445 -0.417587 + 2.30934 3.72318 -1.0391 0.77699 0.215255 -0.591568 + 2.2552 3.95093 -1.00678 0.405141 0.219637 -0.88748 + 2.32881 3.19885 -1.17333 0.823816 -0.0686056 0.562691 + 2.33304 3.25212 -1.1848 0.984546 0.104988 0.140167 + 2.33018 3.26569 -1.2177 0.91787 0.250287 -0.308011 + 2.32412 3.3409 -1.18198 0.943948 0.200673 -0.262091 + 2.26781 3.48799 -1.15554 0.408597 0.431151 -0.804461 + 2.3275 3.13582 -1.17017 0.671931 0.116824 0.731342 + 2.34791 3.10642 -1.19964 0.680376 0.194051 0.706705 + 2.34921 3.16953 -1.20275 0.921368 0.170262 0.349415 + 2.34636 3.18301 -1.2357 0.915542 0.285872 -0.28295 + 2.25961 3.25755 -1.32101 0.679149 0.4543 -0.576513 + 2.34847 3.02759 -1.15571 0.476697 0.44267 0.759476 + 2.37953 3.0253 -1.16654 0.465635 0.494731 0.733774 + 2.38695 3.07967 -1.21551 0.913632 0.392814 0.104758 + 2.31866 3.01833 -1.37227 0.830747 0.239178 -0.502646 + 2.27807 3.12168 -1.39247 0.814822 0.293371 -0.499998 + 2.39088 2.92679 -1.11191 0.284346 0.538619 0.793118 + 2.42194 2.92441 -1.12279 0.114789 0.646593 0.754149 + 2.41857 2.99846 -1.18245 0.866542 0.48193 0.129802 + 2.44091 2.84227 -1.04153 -0.237021 0.666068 0.70723 + 2.46684 2.86717 -1.05965 -0.190559 0.726383 0.660345 + 2.46885 2.93672 -1.12491 -0.138387 0.655284 0.742598 + 2.48508 2.80086 -0.963391 -0.378377 0.74819 0.545016 + 2.51101 2.82575 -0.98151 -0.340047 0.770053 0.539803 + 2.51375 2.87948 -1.06177 0.492291 0.844218 0.212004 + 2.48379 2.76838 -0.917348 -0.710214 0.417356 0.566931 + 2.52439 2.73342 -0.844986 -0.644861 0.43255 0.630123 + 2.52569 2.76589 -0.891029 -0.370329 0.735316 0.567598 + 2.552 2.7856 -0.893959 -0.394705 0.725965 0.56319 + 2.55657 2.85204 -0.988248 0.322281 0.935296 0.146135 + 2.44962 2.72882 -0.999425 -0.903528 -0.118642 0.411778 + 2.50149 2.68375 -0.894552 -0.912315 -0.144965 0.382971 + 2.538 2.62912 -0.825736 -0.850754 -0.123915 0.510747 + 2.57436 2.70811 -0.786946 -0.640341 0.399221 0.65619 + 2.60068 2.72773 -0.789934 -0.530689 0.609118 0.58936 + 2.53554 2.49671 -0.9262 -0.904868 -0.172496 0.389177 + 2.57205 2.442 -0.857433 -0.944306 -0.192886 0.266609 + 2.58797 2.60381 -0.767704 -0.882255 -0.0338123 0.469556 + 2.63265 2.58495 -0.671634 -0.796042 0.209686 0.567758 + 2.64759 2.66422 -0.691526 -0.617391 0.408196 0.672461 + 2.62735 2.77706 -0.803569 -0.610821 0.50002 0.613904 + 2.59777 2.35215 -0.858812 -0.794912 -0.551824 0.2522 + 2.5772 2.45282 -0.751176 -0.967617 -0.0713522 0.242127 + 2.62188 2.43396 -0.655106 -0.954579 0.0582228 0.292214 + 2.60292 2.36289 -0.752614 -0.753798 -0.632932 0.176596 + 2.61197 2.36466 -0.665269 -0.859328 -0.500528 0.105009 + 2.64071 2.41751 -0.577825 -0.865074 0.291459 0.408286 + 2.72643 2.48661 -0.533697 -0.677356 0.38995 0.623801 + 2.74137 2.56587 -0.553589 -0.678793 0.311168 0.665142 + 2.64821 2.34852 -0.75112 -0.12657 -0.984292 0.123079 + 2.65726 2.35028 -0.663776 -0.0882357 -0.994597 -0.0546845 + 2.6308 2.34821 -0.587988 -0.886231 -0.452376 -0.099749 + 2.62461 2.29891 -0.474391 -0.966054 0.234751 0.107849 + 2.6713 2.33883 -0.461941 -0.641501 0.594047 0.48537 + 2.66423 2.32665 -0.868442 0.40228 -0.913666 0.0581781 + 2.68265 2.34984 -0.755413 0.321865 -0.945319 0.052682 + 2.69973 2.35576 -0.656064 0.361262 -0.92819 -0.0891837 + 2.65478 2.33721 -0.59174 -0.145298 -0.935081 -0.323284 + 2.68909 2.3493 -0.878472 0.770395 -0.624307 -0.129355 + 2.71754 2.37223 -0.759195 0.746177 -0.661869 -0.0717628 + 2.73462 2.37815 -0.659845 0.711008 -0.684692 -0.1602 + 2.69726 2.3427 -0.584036 0.333435 -0.889399 -0.312715 + 2.65599 2.29595 -0.515472 -0.0595492 -0.822488 -0.565656 + 2.62716 2.384 -1.08077 0.877351 -0.262665 -0.401576 + 2.7039 2.38727 -0.910439 0.880404 -0.385332 -0.27642 + 2.73235 2.41021 -0.791162 0.93514 -0.318611 -0.154919 + 2.75386 2.42636 -0.691736 0.946918 -0.272978 -0.169795 + 2.75602 2.37044 -0.572693 0.674232 -0.674298 -0.301221 + 2.64252 2.47677 -1.10226 0.888004 -0.0482117 -0.4573 + 2.71926 2.48005 -0.931931 0.882656 0.335253 -0.329429 + 2.74077 2.4962 -0.832505 0.980408 0.0271144 -0.195102 + 2.77823 2.47099 -0.568038 0.987616 0.135624 -0.0788729 + 2.77526 2.41856 -0.604634 0.954101 -0.198244 -0.224478 + 2.64128 2.60297 -1.06884 0.875854 0.217192 -0.430937 + 2.53903 2.78753 -1.1267 0.832415 0.367805 -0.414493 + 2.58184 2.76009 -1.05317 0.83692 0.406029 -0.367021 + 2.63086 2.78461 -0.927457 0.806485 0.566707 -0.168599 + 2.6903 2.62741 -0.943175 0.92401 0.242122 -0.295944 + 2.72259 2.56669 -0.860208 0.956179 0.231644 -0.179059 + 2.43603 2.83347 -1.26568 0.831561 0.299208 -0.467954 + 2.46885 2.93672 -1.12491 0.844887 0.357665 -0.397795 + 2.79322 2.409 -0.417882 -0.730368 0.292555 0.617231 + 2.79322 2.409 -0.417882 0.995577 0.00890332 -0.0935304 + 2.79025 2.35658 -0.454487 0.935687 -0.281566 -0.212626 + 2.75511 2.32544 -0.485146 0.633574 -0.668455 -0.389553 + 2.69635 2.29778 -0.49643 0.372962 -0.776324 -0.508153 + 2.80482 2.30012 -0.301482 0.896726 -0.40283 -0.183331 + 2.7775 2.26562 -0.336527 0.814235 -0.518397 -0.261314 + 2.74236 2.23447 -0.367186 0.645912 -0.65418 -0.393504 + 2.68513 2.23031 -0.417569 0.41328 -0.727264 -0.547983 + 2.64477 2.22857 -0.436561 0.126321 -0.737578 -0.663342 + 2.77295 2.19257 -0.167609 0.892697 -0.445818 -0.0658623 + 2.74564 2.15807 -0.202654 0.781382 -0.588638 -0.207236 + 2.70354 2.14469 -0.271672 0.601803 -0.695448 -0.392665 + 2.64631 2.14052 -0.322056 0.462091 -0.736858 -0.49347 + 2.62055 2.15769 -0.36899 0.20344 -0.722506 -0.660755 + 2.77928 2.20864 -0.082238 0.984586 0.110243 0.135782 + 2.70267 2.07318 0.003376 0.836514 -0.547754 0.014477 + 2.6949 2.06228 -0.099938 0.767693 -0.627281 -0.131019 + 2.6528 2.0488 -0.168998 0.569824 -0.742112 -0.352945 + 2.57747 2.04533 -0.243775 0.226749 -0.82943 -0.51052 + 2.55172 2.0625 -0.290718 -0.351892 -0.666295 -0.657436 + 2.709 2.08926 0.088737 0.856384 -0.510245 0.0790959 + 2.63892 1.99185 0.107248 0.755261 -0.652355 0.0633558 + 2.63115 1.98094 0.00394 0.684966 -0.724785 -0.0742184 + 2.59691 1.97242 -0.081094 0.529917 -0.802109 -0.275335 + 2.76211 2.1813 0.071503 0.905551 0.287613 0.311858 + 2.7167 2.13753 0.17632 0.898473 0.237665 0.369136 + 2.6847 2.09356 0.268876 0.909643 -0.405524 0.0900051 + 2.677 2.04529 0.181292 0.818587 -0.573067 0.0388578 + 2.63136 1.99719 0.2026 0.722923 -0.685561 0.0859597 + 2.7715 2.24308 -0.168698 -0.275405 0.906716 0.319404 + 2.75433 2.21575 -0.014957 0.21925 0.951198 0.217145 + 2.72403 2.18316 0.102286 0.0398625 0.92883 0.368355 + 2.76861 2.29912 -0.301354 -0.223355 0.8396 0.495161 + 2.68124 2.21888 -0.191575 -0.231281 0.92765 0.293213 + 2.68391 2.19877 -0.072337 -0.266334 0.949399 0.166457 + 2.65361 2.16627 0.044948 -0.285331 0.934935 0.210909 + 2.67862 2.13939 0.207102 -0.00424041 0.996266 0.0862374 + 2.80482 2.30012 -0.301482 -0.0213744 0.837882 0.545433 + 2.75702 2.40792 -0.417813 -0.356776 0.698251 0.62061 + 2.67835 2.27482 -0.324272 -0.464578 0.825742 0.319871 + 2.57225 2.19177 -0.160632 -0.156026 0.980244 0.121564 + 2.57493 2.17175 -0.041352 -0.13483 0.96413 0.228636 + 2.79322 2.409 -0.417882 -0.0217758 0.77056 0.636995 + 2.63166 2.23499 -0.336672 -0.772075 0.630387 0.0807016 + 2.58701 2.17446 -0.264832 -0.78381 0.566506 -0.254388 + 2.54034 2.19516 -0.206485 -0.179878 0.933812 -0.309254 + 2.39313 2.16016 -0.026063 0.0860057 0.994129 0.0656515 + 2.62087 2.22263 -0.399276 -0.921776 0.387633 0.00839225 + 2.57622 2.1621 -0.327435 -0.910889 0.318364 -0.262537 + 2.52389 2.06481 -0.24912 -0.574172 -0.34192 -0.74392 + 2.47436 2.13853 -0.208818 -0.558872 0.310508 -0.768925 + 2.42769 2.15923 -0.150462 -0.448132 0.726509 -0.520925 + 2.63201 2.30695 -0.511721 -0.66717 -0.619317 -0.413922 + 2.62827 2.23067 -0.436606 -0.635642 -0.504043 -0.584722 + 2.60405 2.15979 -0.369034 -0.495276 -0.455891 -0.739503 + 2.52158 1.96885 -0.155921 0.213752 -0.812116 -0.542934 + 2.46026 1.99781 -0.192677 -0.286723 -0.4782 -0.83013 + 2.41073 2.07162 -0.152324 -0.429304 -0.0775828 -0.899822 + 2.35036 2.11422 -0.142509 -0.317898 0.250277 -0.914495 + 2.4752 1.90394 -0.065482 0.153994 -0.935207 -0.318862 + 2.41388 1.93289 -0.102239 -0.101387 -0.787323 -0.608147 + 2.34741 1.98765 -0.137876 -0.211049 -0.356109 -0.910299 + 2.28704 2.03016 -0.128111 -0.0725027 0.0370631 -0.996679 + 2.52785 1.90878 0.011527 0.323965 -0.942463 -0.082528 + 2.43748 1.90232 0.037117 -0.144141 -0.982497 0.118 + 2.38482 1.89739 -0.039944 -0.283936 -0.958485 -0.0262235 + 2.32532 1.93473 -0.091815 -0.28481 -0.833993 -0.472587 + 2.25885 1.98948 -0.127453 -0.366669 -0.608295 -0.70394 + 2.56209 1.91731 0.096564 0.424164 -0.904233 0.0494767 + 2.46552 1.90768 0.115641 -0.105461 -0.984845 0.137689 + 2.30984 1.9448 -0.010065 -0.341642 -0.939437 0.027197 + 2.26235 1.96594 -0.076878 -0.458021 -0.888087 -0.0389571 + 2.20285 2.00328 -0.128748 -0.300277 -0.684294 -0.664511 + 2.56499 1.93226 0.183852 0.436985 -0.892297 0.113354 + 2.62208 2.00313 0.305904 0.710348 -0.69746 0.0946306 + 2.66772 2.05132 0.284646 0.852719 -0.514268 0.0916429 + 2.68075 2.1021 0.367288 0.991928 0.067784 0.107161 + 2.66952 2.10925 0.515707 0.963936 0.238587 0.11791 + 2.65377 2.14534 0.36779 0.613387 0.789717 0.0101416 + 2.64254 2.15241 0.516157 0.765157 0.642382 -0.0433546 + 2.64936 2.17764 0.618455 0.835803 0.443509 -0.323624 + 2.69067 2.14011 0.697648 0.958104 0.0577956 -0.280527 + 2.67358 2.07899 0.647313 0.958496 -0.0365627 -0.282751 + 2.63114 2.14084 0.289597 0.123464 0.983379 -0.133126 + 2.54722 2.20302 0.444687 0.443546 0.878704 -0.176481 + 2.55403 2.22825 0.546984 0.691815 0.636579 -0.340822 + 2.68134 2.24606 0.776546 0.811488 0.410337 -0.416066 + 2.72266 2.20854 0.855739 0.941793 0.107823 -0.318435 + 2.55226 2.13436 0.203219 0.173224 0.975412 -0.136256 + 2.52459 2.19852 0.366494 0.329327 0.920197 -0.211615 + 2.4744 2.21408 0.359742 0.617685 0.68527 -0.385837 + 2.54716 2.2602 0.573062 0.858658 0.267007 -0.437508 + 2.59974 2.13291 0.120721 -0.124145 0.986088 0.110534 + 2.52106 2.13839 0.03443 -0.0365716 0.979023 0.200441 + 2.50208 2.14992 0.196468 0.292599 0.929108 -0.226149 + 2.34077 2.15746 0.061211 0.640804 0.767535 0.016146 + 2.46869 2.13569 0.121704 0.0926142 0.985538 -0.141904 + 2.43045 2.20281 0.262053 0.612645 0.694194 -0.377837 + 2.29868 2.23092 0.067564 0.712179 0.505665 -0.486932 + 2.39707 2.18859 0.187288 0.578834 0.703298 -0.412702 + 2.40148 2.26853 0.27863 0.855918 0.261603 -0.446058 + 2.23721 2.19597 -0.019299 0.475875 0.54311 -0.691791 + 2.26939 2.33052 0.091463 0.700012 0.215634 -0.680798 + 2.33965 2.40641 0.178006 0.821898 0.0280302 -0.568945 + 2.35498 2.26205 0.193641 0.849162 0.254372 -0.462839 + 2.28297 2.14801 -0.042428 0.0463855 0.823618 -0.565245 + 2.18137 2.18104 -0.066045 0.605212 0.452975 -0.654623 + 2.15423 2.26975 -0.072682 0.723278 0.152528 -0.673501 + 2.20792 2.29565 0.00465 0.76011 0.214829 -0.613255 + 2.36122 2.16345 -0.071967 -0.206332 0.976315 -0.0650779 + 2.34944 2.14371 -0.120982 -0.304404 0.780206 -0.546458 + 2.22713 2.133 -0.089233 0.105905 0.700789 -0.705464 + 2.22806 2.10343 -0.11081 0.108157 0.451318 -0.885784 + 2.11644 2.21114 -0.126378 0.731918 0.290401 -0.616411 + 2.21245 2.05762 -0.140074 0.293347 0.193593 -0.936199 + 2.15347 2.13089 -0.122772 0.617527 0.444233 -0.64909 + 2.04131 2.30483 -0.180655 0.322644 -0.040949 -0.945634 + 2.00494 2.38241 -0.200613 0.402568 -0.110055 -0.90875 + 2.0893 2.29985 -0.133016 0.705511 0.139444 -0.694845 + 2.11 2.13872 -0.166128 -0.223537 -0.273811 -0.935446 + 2.07835 2.22458 -0.177049 0.222904 -0.0150988 -0.974723 + 1.99528 2.25385 -0.159746 -0.159199 -0.427504 -0.889885 + 2.1564 2.07049 -0.153557 -0.269975 -0.424126 -0.864425 + 2.05462 2.14025 -0.122982 -0.620185 -0.543127 -0.566024 + 2.02297 2.22611 -0.133903 -0.311538 -0.629409 -0.71189 + 2.13094 2.03961 -0.057868 -0.623805 -0.751981 -0.213052 + 2.08449 2.10682 -0.082678 -0.60021 -0.740754 -0.301714 + 2.01921 2.08801 0.063897 0.192739 -0.952173 -0.237105 + 2.00431 2.06925 -0.007613 0.27448 -0.884077 -0.378244 + 1.97662 2.09698 -0.033448 0.181554 -0.809946 -0.557697 + 2.15662 2.01839 0.009485 -0.53482 -0.844965 -0.00153331 + 2.06277 2.09659 0.177241 0.0345612 -0.98921 0.142371 + 2.04908 2.05457 0.10421 0.114904 -0.992838 -0.0327054 + 1.96677 2.02569 0.223428 0.477653 -0.864619 0.155825 + 1.95187 2.00685 0.151867 0.291033 -0.949605 -0.116403 + 2.08845 2.07537 0.244596 -0.561086 -0.802972 -0.201041 + 1.98985 2.08774 0.344357 0.133315 -0.991069 -0.00316876 + 1.97616 2.04573 0.271322 0.57649 -0.770898 0.270878 + 1.85216 2.01488 0.387357 0.22185 -0.975078 -0.00215842 + 1.86155 2.03492 0.43525 0.595665 -0.802821 0.0257183 + 1.82237 2.0239 0.372133 -0.209197 -0.925756 -0.314981 + 1.92207 2.01587 0.136644 -0.285996 -0.923519 -0.255575 + 1.96388 2.12008 -0.102051 0.383241 -0.669611 -0.636198 + 1.9589 2.33142 -0.179704 0.157719 -0.352588 -0.922392 + 1.90933 2.03897 0.06804 -0.0732252 -0.965012 -0.251771 + 1.88992 2.05432 0.003641 -0.0878354 -0.908832 -0.407811 + 1.92201 2.1794 -0.143392 0.0832893 -0.543582 -0.835214 + 1.91703 2.39073 -0.221035 0.219575 -0.241535 -0.945224 + 1.98115 2.45802 -0.212777 0.327904 -0.0646981 -0.942493 + 1.78673 2.07109 0.246399 0.191047 -0.979735 0.0601637 + 1.77158 2.02597 0.179548 0.487079 -0.873037 0.0236991 + 1.84277 2.10366 -0.031417 -0.0444197 -0.853981 -0.518405 + 1.87486 2.22874 -0.178448 0.13811 -0.510781 -0.848545 + 1.73583 2.03045 0.142995 0.460923 -0.870142 -0.174365 + 1.80703 2.10814 -0.067965 -0.0507253 -0.767378 -0.639185 + 1.81538 2.28023 -0.219246 -0.14234 -0.458795 -0.877067 + 1.84323 2.43208 -0.244655 0.335595 -0.220068 -0.91594 + 1.90735 2.49937 -0.236397 0.319533 -0.295997 -0.900158 + 1.77436 2.17638 -0.086369 -0.272964 -0.631253 -0.725955 + 1.78271 2.34839 -0.23769 -0.00108266 -0.490935 -0.871196 + 1.78375 2.48358 -0.285453 0.530831 -0.422237 -0.734802 + 1.85647 2.54302 -0.277405 0.425011 -0.439625 -0.791262 + 2.06646 2.47435 -0.164459 0.558592 -0.0959796 -0.823871 + 2.06551 2.37554 -0.14513 0.632379 -0.019087 -0.774424 + 1.73552 2.35858 -0.256944 -0.345065 -0.632219 -0.693707 + 1.71636 2.46933 -0.339962 0.366166 -0.430568 -0.824944 + 1.78909 2.52885 -0.331856 0.473067 -0.45834 -0.752418 + 1.66918 2.47952 -0.359216 0.248827 -0.632041 -0.7339 + 1.72547 2.55667 -0.373052 0.397253 -0.410256 -0.820902 + 1.96138 2.55454 -0.257564 0.492616 -0.264569 -0.829055 + 2.01559 2.518 -0.205467 0.463192 -0.337747 -0.819378 + 1.59493 2.48724 -0.400794 -0.120042 -0.851474 -0.510472 + 1.65122 2.5644 -0.41463 0.436506 -0.305601 -0.84621 + 1.89776 2.58237 -0.29876 0.443604 -0.112468 -0.889138 + 2.07411 2.58682 -0.186068 0.619794 -0.161113 -0.768048 + 1.64313 2.46621 -0.302767 -0.150048 -0.900168 -0.40888 + 1.53613 2.52362 -0.437803 -0.149909 -0.833341 -0.532042 + 1.56169 2.57668 -0.468498 0.378568 -0.409723 -0.829948 + 1.83671 2.6434 -0.321467 0.464005 -0.00484815 -0.885819 + 1.47384 2.56861 -0.483722 0.0647009 -0.740861 -0.668535 + 1.49939 2.62158 -0.514475 0.196966 -0.887411 -0.416781 + 1.74718 2.65567 -0.375326 0.59154 -0.453897 -0.666376 + 1.97576 2.71731 -0.247687 0.489134 -0.00884625 -0.872164 + 2.03681 2.65629 -0.224989 0.544192 0.00825355 -0.83892 + 1.47007 2.61951 -0.553496 0.329449 -0.634657 -0.699052 + 1.68026 2.62964 -0.442434 0.293168 -0.955949 0.0146108 + 1.85564 2.74393 -0.352592 0.676137 -0.38411 -0.628728 + 1.92255 2.76996 -0.285484 0.622414 -0.341049 -0.704476 + 1.65093 2.62757 -0.481455 0.438934 -0.873153 -0.21199 + 1.78511 2.74542 -0.40958 0.648768 -0.141008 -0.747808 + 1.98228 2.94105 -0.25362 0.557283 0.0576714 -0.828317 + 2.06155 2.88886 -0.219218 0.533516 0.0293455 -0.845281 + 2.11476 2.83612 -0.18147 0.61413 -0.0603336 -0.786895 + 1.58602 2.58657 -0.536845 -0.330109 -0.535194 0.777557 + 1.3001 2.61612 -0.639218 0.158389 -0.744872 0.648134 + 1.49586 2.56716 -0.58981 0.251919 -0.959865 0.123272 + 1.42854 2.55889 -0.649095 0.411288 -0.808744 -0.420446 + 1.57837 2.67193 -0.59068 0.656824 -0.297302 -0.69296 + 1.6457 2.68019 -0.531396 0.674596 -0.346656 -0.651728 + 1.72019 2.70443 -0.464969 0.718341 -0.33754 -0.608319 + 1.58602 2.58657 -0.536845 0.545597 -0.114853 -0.83014 + 1.38816 2.56512 -0.686883 0.338592 -0.644105 -0.685918 + 1.51214 2.66684 -0.652472 0.611047 -0.308178 -0.729142 + 1.68768 2.91127 -0.51784 0.673445 -0.0674876 -0.73615 + 1.76571 2.93102 -0.450034 0.669853 -0.0675107 -0.739419 + 1.84021 2.95533 -0.383549 0.689191 -0.0886898 -0.719132 + 2.1422 2.46302 -0.099236 0.729548 -0.141788 -0.669071 + 2.14124 2.36422 -0.079906 0.742069 -0.0321544 -0.669552 + 2.12832 2.55027 -0.13397 0.709349 -0.0465191 -0.70332 + 2.19766 2.49044 -0.027537 0.816983 -0.128346 -0.562197 + 2.19493 2.39012 -0.002574 0.819446 -0.0415006 -0.571652 + 2.18378 2.5777 -0.062271 0.78814 -0.140912 -0.599149 + 2.2479 2.5128 0.042531 0.820571 -0.153507 -0.550544 + 2.24517 2.41248 0.067503 0.806741 -0.0430421 -0.589335 + 2.17394 2.66979 -0.105973 0.744964 -0.0918837 -0.660746 + 2.25661 2.70147 -0.002845 0.79699 -0.149316 -0.585245 + 2.26645 2.60929 0.040805 0.811439 -0.174013 -0.55793 + 2.31542 2.48829 0.153996 0.689504 -0.100045 -0.717339 + 2.13664 2.73934 -0.144843 0.663402 -0.0794197 -0.744037 + 2.24246 2.81351 -0.048503 0.765735 -0.118426 -0.63216 + 2.35465 2.74652 0.130519 0.834302 -0.146591 -0.531461 + 2.33397 2.58486 0.15232 0.826652 -0.140575 -0.544872 + 2.22058 2.91029 -0.08513 0.727762 -0.036209 -0.684873 + 2.30051 2.97377 0.008911 0.791971 -0.0317916 -0.609731 + 2.3405 2.85856 0.084861 0.82764 -0.101053 -0.552087 + 2.41569 2.92662 0.189185 0.853095 -0.0861966 -0.514587 + 2.43035 2.76938 0.249128 0.86287 -0.144026 -0.48447 + 2.16776 3.0049 -0.139603 0.62296 0.0553234 -0.780295 + 2.24769 3.06839 -0.04557 0.731941 0.0314938 -0.68064 + 2.31727 3.15669 0.028492 0.77088 0.0143478 -0.636819 + 2.3757 3.04183 0.113235 0.829544 -0.0391125 -0.55707 + 2.08849 3.05709 -0.174005 0.543878 0.0537137 -0.837443 + 2.18174 3.16605 -0.10933 0.658782 0.0528224 -0.750477 + 2.25132 3.25444 -0.035226 0.704798 0.0233697 -0.709023 + 2.00248 3.10754 -0.242777 0.658333 -0.0938043 -0.746859 + 2.09573 3.2165 -0.178102 0.636156 -0.0218363 -0.771251 + 2.14051 3.33694 -0.144314 0.67452 -0.012615 -0.738148 + 2.28491 3.35096 0.002008 0.762419 0.0577815 -0.644499 + 1.91175 2.94255 -0.310608 0.664754 -0.0562678 -0.744941 + 1.93094 3.12032 -0.315726 0.676071 -0.0459393 -0.735403 + 1.9646 3.24855 -0.283013 0.649527 -0.0104225 -0.760267 + 2.00939 3.36899 -0.249225 0.65077 -0.0521406 -0.757483 + 1.82339 3.13348 -0.411117 0.664302 -0.0175406 -0.747258 + 1.85705 3.26162 -0.378462 0.667157 -0.0338128 -0.744149 + 1.89281 3.42958 -0.364967 0.671593 -0.0810416 -0.736475 + 2.05219 3.5238 -0.228167 0.699825 -0.0415494 -0.713105 + 2.1741 3.43345 -0.107079 0.718241 0.0416658 -0.694546 + 1.76052 3.45011 -0.486733 0.770802 -0.147746 -0.619705 + 1.93562 3.58438 -0.343901 0.698702 -0.124206 -0.704549 + 2.05642 3.6944 -0.238661 0.733739 -0.11795 -0.669114 + 2.13928 3.60563 -0.129109 0.747983 -0.0367563 -0.6627 + 2.26119 3.51529 -0.008028 0.775921 0.162528 -0.609534 + 1.8582 3.6928 -0.453484 0.761915 -0.218033 -0.609874 + 1.979 3.80282 -0.348244 0.728048 -0.218968 -0.649614 + 2.2237 3.73838 -0.061223 0.756632 -0.109457 -0.644614 + 2.30656 3.64969 0.04838 0.775991 -0.159366 -0.610279 + 2.36045 3.55681 0.151055 0.820168 0.00568968 -0.572095 + 1.93576 3.88298 -0.430492 0.718831 -0.507093 -0.47554 + 2.15021 3.81314 -0.163911 0.75771 -0.171942 -0.629532 + 2.29439 3.94375 -0.001943 0.799453 -0.0889737 -0.594104 + 2.36788 3.86899 0.100744 0.81727 -0.0560707 -0.57352 + 2.42075 3.77541 0.197428 0.842863 -0.0853154 -0.531322 + 2.10696 3.8933 -0.246158 0.769274 -0.176576 -0.614034 + 2.24075 4.03992 -0.09271 0.793767 -0.0897396 -0.601565 + 2.42688 4.18807 0.142888 0.851078 -0.090122 -0.517246 + 2.46344 4.08564 0.234104 0.859779 -0.0734938 -0.50535 + 2.51631 3.99197 0.330737 0.860001 -0.0464279 -0.508175 + 2.16957 4.12504 -0.190949 0.799653 -0.109481 -0.590397 + 2.37324 4.28423 0.052122 0.827923 -0.0756678 -0.555713 + 2.47784 4.52184 0.207375 0.883496 -0.0131345 -0.468256 + 2.5216 4.41592 0.286831 0.884281 -0.0259611 -0.466233 + 2.55816 4.3135 0.378037 0.885542 -0.0526453 -0.461567 + 2.13786 4.23703 -0.268518 0.866291 -0.227695 -0.44463 + 2.34308 4.40835 -0.01565 0.844415 -0.0961144 -0.526997 + 2.44768 4.64596 0.139603 0.884656 0.0187437 -0.465867 + 2.54224 4.74606 0.357013 0.906903 0.105023 -0.408041 + 2.586 4.64014 0.436469 0.892505 0.0860047 -0.442762 + 2.14463 4.35754 -0.352645 0.926542 -0.216957 -0.307328 + 2.31137 4.52042 -0.093169 0.866354 -0.073893 -0.493933 + 2.40095 4.75493 0.063448 0.890888 0.0414994 -0.452323 + 2.48569 4.84565 0.275923 0.898858 0.143565 -0.414057 + 2.10681 4.30357 -0.569965 0.944924 -0.28984 0.152024 + 2.13134 4.47389 -0.427379 0.973045 -0.158952 -0.167088 + 2.27085 4.63874 -0.164498 0.894784 -0.0543149 -0.443184 + 2.36043 4.87316 -0.00793 0.887318 0.0862932 -0.453013 + 2.43896 4.95463 0.199769 0.912753 0.166223 -0.373164 + 2.13782 4.43884 -0.629461 0.980683 -0.0642449 0.184751 + 2.16234 4.60916 -0.486875 0.973389 -0.0749846 -0.216544 + 2.25756 4.75509 -0.239223 0.93838 -0.0194372 -0.345058 + 2.30296 4.96977 -0.093867 0.90418 0.115896 -0.411128 + 2.19346 4.36427 -0.7931 0.965098 0.126119 0.229522 + 2.1484 4.52392 -0.679827 0.984557 0.0944007 0.147428 + 2.13064 4.7121 -0.564763 0.977112 0.0765348 -0.19848 + 2.2028 4.84339 -0.336761 0.922989 0.0950288 -0.372909 + 2.2482 5.05807 -0.191405 0.875215 0.205219 -0.438045 + 2.19335 4.39952 -0.832166 0.969171 0.244961 -0.0264674 + 2.12695 4.65774 -0.736409 0.961873 0.244117 -0.123321 + 2.10918 4.84592 -0.621343 0.903046 0.253359 -0.346866 + 2.17109 4.94632 -0.414649 0.912672 0.201131 -0.355776 + 2.17387 5.1368 -0.282967 0.840234 0.298315 -0.452786 + 2.15185 4.49786 -0.87628 0.939317 0.299347 -0.167557 + 2.08545 4.75607 -0.780523 0.871822 0.415455 -0.259467 + 2.03206 4.93082 -0.7006 0.790891 0.414522 -0.450181 + 2.08717 5.00564 -0.514393 0.815822 0.368693 -0.445533 + 2.08995 5.19612 -0.382712 0.789791 0.359419 -0.49704 + 2.21742 4.1759 -0.951634 0.835344 0.251404 -0.488872 + 2.17726 4.38166 -0.952832 0.952819 0.23426 -0.193026 + 2.09335 4.67413 -0.890592 0.854799 0.421801 -0.30233 + 1.98499 4.84801 -0.845362 0.756128 0.517099 -0.401099 + 1.9316 5.02276 -0.765438 0.703633 0.471571 -0.531528 + 2.19199 4.18336 -1.01116 0.713774 0.109885 -0.691702 + 2.15183 4.38913 -1.01236 0.833741 0.260787 -0.486689 + 2.08058 4.50017 -1.05329 0.740992 0.287426 -0.606892 + 2.11876 4.55803 -0.967101 0.86123 0.338772 -0.378835 + 1.9959 4.7827 -0.94005 0.72393 0.539124 -0.43043 + 2.1757 3.92894 -1.00148 0.188805 0.122559 -0.974337 + 2.12779 3.92912 -1.0268 0.48462 0.06873 -0.872021 + 2.14408 4.18354 -1.03648 0.496091 -0.0212207 -0.868011 + 2.12014 4.34516 -1.06081 0.662663 0.046567 -0.747468 + 2.25716 3.7201 -1.07276 0.190899 0.30479 -0.933092 + 2.17766 3.69811 -1.06748 0.0745438 0.343137 -0.936323 + 2.10814 3.70056 -1.08372 0.352806 0.321139 -0.878861 + 2.09368 3.92411 -1.04812 0.215585 0.0446019 -0.975466 + 2.15277 3.49152 -1.19185 0.237933 0.547742 -0.802101 + 2.08324 3.49396 -1.20809 0.390461 0.567218 -0.725123 + 2.03674 3.52417 -1.2188 0.205763 0.679839 -0.703904 + 2.07403 3.69546 -1.10509 0.131744 0.40823 -0.903323 + 2.25356 3.33286 -1.28525 0.520445 0.462624 -0.717716 + 2.13852 3.33639 -1.32156 0.474176 0.653367 -0.590143 + 2.04657 3.34112 -1.43756 0.650325 0.64725 -0.397673 + 2.02722 3.40521 -1.36935 0.549537 0.694587 -0.464282 + 2.12598 3.21637 -1.55647 0.672972 0.560008 -0.483218 + 2.03403 3.22111 -1.67248 0.638922 0.568877 -0.517838 + 1.98168 3.22667 -1.72912 0.725695 0.44367 -0.525855 + 1.94243 3.33731 -1.68535 0.7295 0.535439 -0.425599 + 1.92308 3.40147 -1.61709 0.654967 0.659739 -0.36846 + 1.90506 3.21602 -1.84167 0.595112 0.370107 -0.713346 + 1.81518 3.23462 -1.87768 0.404401 0.31082 -0.860146 + 1.79251 3.29908 -1.86053 0.435239 0.485815 -0.757991 + 1.86581 3.32674 -1.79784 0.557168 0.540749 -0.630202 + 1.83363 3.39129 -1.76046 0.436406 0.713703 -0.547884 + 1.9152 3.43695 -1.56133 0.389217 0.897077 -0.209196 + 1.68929 3.21364 -1.93175 0.26303 -0.129465 -0.956062 + 1.68544 3.26274 -1.93739 0.387176 0.119901 -0.914177 + 1.66277 3.3272 -1.92024 0.478758 0.511757 -0.713369 + 1.76033 3.36363 -1.82314 0.360017 0.675397 -0.643604 + 1.49576 3.28867 -1.9863 0.125192 -0.279595 -0.951921 + 1.49191 3.33776 -1.99193 0.203632 -0.172483 -0.963734 + 1.49567 3.38455 -2.00338 0.376293 0.248437 -0.892571 + 1.4769 3.4259 -1.974 0.340544 0.874706 -0.344848 + 1.644 3.36855 -1.89087 0.402154 0.723094 -0.561611 + 1.33921 3.31982 -2.00306 0.0694265 -0.282559 -0.956734 + 1.34711 3.35336 -2.01996 -0.0106783 -0.386564 -0.922201 + 1.35098 3.38003 -2.02934 0.0591444 -0.279377 -0.958358 + 1.35474 3.42673 -2.04084 0.132508 0.383839 -0.913843 + 1.28209 3.29816 -2.00954 0.182039 -0.0719823 -0.980653 + 1.21141 3.39852 -2.02938 0.113984 -0.260802 -0.95864 + 1.21528 3.4251 -2.03882 0.132837 0.343165 -0.929834 + 1.21849 3.44081 -2.01302 0.103066 0.899404 -0.424794 + 1.35795 3.44244 -2.01504 0.114224 0.947508 -0.298632 + 1.1188 3.26806 -2.04562 0.341523 -0.0242842 -0.93956 + 1.15429 3.37695 -2.03582 0.298403 -0.215147 -0.929875 + 1.04122 3.27733 -2.08167 0.430542 -0.205054 -0.878969 + 1.07671 3.38622 -2.07188 0.431787 -0.0470074 -0.90075 + 0.983008 3.23697 -2.08837 0.254391 -0.358082 -0.898367 + 0.97195 3.33475 -2.15373 0.454453 -0.14448 -0.878975 + 0.945587 3.3738 -2.16275 0.139275 0.337838 -0.930843 + 1.05035 3.42518 -2.08095 0.347749 0.418256 -0.839126 + 0.98818 3.1422 -2.07001 0.230539 -0.116354 -0.966082 + 0.843467 3.22363 -2.09885 0.167231 -0.254299 -0.952557 + 0.913735 3.29439 -2.16042 0.0756546 -0.445483 -0.892088 + 0.887221 3.33249 -2.16981 -0.362102 0.0797176 -0.928723 + 0.935487 3.43206 -2.11846 0.0676357 0.560195 -0.825595 + 0.934466 2.91554 -2.08703 0.430653 0.110974 -0.895669 + 0.848639 3.12885 -2.08049 0.353131 -0.0254059 -0.935229 + 0.816953 3.26172 -2.10824 -0.367019 -0.0012002 -0.930213 + 0.877121 3.39075 -2.12552 -0.415379 0.373403 -0.829476 + 0.85133 2.46952 -2.4015 0.862951 0.265682 -0.429801 + 0.849243 2.29637 -2.54819 0.807398 0.432155 -0.401686 + 0.818076 2.32609 -2.59188 0.808228 0.418766 -0.414007 + 0.877783 2.22032 -2.58847 0.801398 0.474667 -0.363941 + 0.851235 2.13087 -2.76174 0.766622 0.493752 -0.410486 + 0.816371 2.15362 -2.79594 0.756566 0.50377 -0.416923 + 0.807259 2.10921 -2.87383 0.829617 0.434969 -0.350053 + 0.932255 2.02172 -2.75308 0.791971 0.450252 -0.412377 + 0.879776 2.05483 -2.80203 0.745879 0.47917 -0.462666 + 0.83271 2.03751 -2.89384 0.796911 0.429877 -0.424428 + 0.746748 2.17122 -2.93763 0.726052 0.505953 -0.465681 + 0.957339 2.00159 -2.71642 0.882347 0.379622 -0.278119 + 0.943743 1.95252 -2.79183 0.813502 0.37476 -0.444713 + 0.891264 1.98563 -2.84077 0.589267 -0.307134 -0.747284 + 0.976666 1.92511 -2.73795 0.908901 0.308609 -0.280464 + 0.772199 2.09951 -2.95763 0.794364 0.407588 -0.450398 + 0.745388 2.12484 -2.9707 0.652646 0.418271 -0.631746 + 0.711933 2.12546 -3.00077 0.519362 -0.323774 -0.790844 + 0.640049 2.12566 -3.02751 0.400574 -0.144019 -0.904875 + 0.61934 2.10536 -3.02356 0.555988 -0.321682 -0.766419 + 0.61008 2.09215 -3.03068 0.631621 -0.181779 -0.753665 + 0.598376 2.08982 -3.03804 0.0815207 -0.310188 -0.947174 + 0.588527 2.10963 -3.04155 0.728356 0.248811 -0.638429 + 0.679143 2.09519 -2.95214 0.56536 -0.725893 -0.391724 + 0.658435 2.0749 -2.94819 0.71944 -0.477175 -0.504688 + 0.643091 2.04482 -2.95809 0.822419 -0.282537 -0.493761 + 0.633831 2.03161 -2.96522 0.786452 -0.33594 -0.518302 + 0.70134 2.1124 -2.93695 0.482688 -0.831769 -0.274175 + 0.706703 2.08199 -2.88367 0.556804 -0.624279 -0.547947 + 0.684506 2.06486 -2.89881 0.73812 -0.499445 -0.453579 + 0.671639 2.04904 -2.90701 0.824072 -0.361371 -0.436252 + 0.656295 2.01888 -2.91696 0.848419 -0.344976 -0.401468 + 0.745388 2.12484 -2.9707 -0.105507 -0.985152 -0.135438 + 0.734795 2.11178 -2.90688 0.184212 -0.897888 -0.39983 + 0.723426 2.08469 -2.87455 0.318083 -0.661349 -0.679295 + 0.683922 2.01546 -2.85125 0.636825 -0.589376 -0.497082 + 0.671055 1.99973 -2.8594 0.814312 -0.545859 -0.197317 + 0.766295 2.10833 -2.8953 -0.326633 -0.876409 -0.353862 + 0.754926 2.08123 -2.86297 0.0371263 -0.679432 -0.732798 + 0.700645 2.01817 -2.84213 0.322544 -0.57093 -0.754986 + 0.772199 2.09951 -2.95763 -0.706113 -0.706894 0.0413043 + 0.793106 2.08309 -2.88218 -0.608152 -0.721755 -0.330486 + 0.771606 2.06407 -2.84745 -0.0984308 -0.641747 -0.760574 + 0.717325 2.00101 -2.82661 0.193981 -0.528656 -0.826374 + 0.83271 2.03751 -2.89384 -0.748264 -0.618737 -0.239301 + 0.811958 2.03572 -2.84774 -0.589538 -0.643534 -0.488168 + 0.790458 2.01671 -2.81301 -0.0403747 -0.617337 -0.785662 + 0.794947 1.99192 -2.79688 0.00616252 -0.487049 -0.873353 + 0.721814 1.97613 -2.81053 0.173875 -0.479318 -0.860245 + 0.846357 1.99908 -2.85287 -0.995004 -0.0687249 0.0724176 + 0.825605 1.99729 -2.80678 -0.633736 -0.413234 -0.653924 + 0.78705 1.9583 -2.78003 0.00757615 -0.409941 -0.91208 + 0.780231 1.9333 -2.76934 -0.00211998 -0.356229 -0.934396 + 0.714996 1.95114 -2.79984 0.0717885 -0.542636 -0.836895 + 0.683296 1.9433 -2.78645 -0.079781 -0.848488 -0.523167 + 0.817707 1.96366 -2.78993 -0.654148 -0.163456 -0.738494 + 0.811185 1.93751 -2.78023 -0.690024 -0.0724013 -0.720156 + 0.768366 1.89371 -2.75537 -0.0197988 -0.739615 -0.672739 + 0.736666 1.88587 -2.74199 -0.165716 -0.850028 -0.499991 + 0.839834 1.97284 -2.84323 -0.957504 0.152359 -0.244894 + 0.799319 1.89792 -2.76627 -0.0716306 -0.696446 -0.714025 + 0.808198 1.87303 -2.70255 0.247209 -0.952377 -0.17851 + 0.756233 1.86791 -2.70109 -0.0602847 -0.982099 -0.17846 + 0.654392 1.90403 -2.71624 -0.150379 -0.886649 -0.43731 + 0.83271 2.03751 -2.89384 -0.69545 0.393795 0.601062 + 0.642788 1.97122 -2.85022 0.53712 -0.840362 -0.0727665 + 0.66024 1.98387 -2.86694 0.707074 -0.697049 -0.119032 + 0.64548 2.00311 -2.92446 0.795927 -0.435207 -0.420828 + 0.573469 1.94957 -2.85811 0.303614 -0.910307 -0.281355 + 0.614905 1.97986 -2.91918 0.284136 -0.891277 -0.3534 + 0.632357 1.99251 -2.93589 0.500886 -0.719912 -0.480458 + 0.620708 2.02101 -2.97665 0.638933 -0.480235 -0.600949 + 0.52042 1.93869 -2.87167 0.261246 -0.750124 -0.607507 + 0.54074 1.94898 -2.8761 0.208281 -0.856071 -0.473034 + 0.582176 1.97927 -2.93717 0.146442 -0.866962 -0.476373 + 0.609004 2.01859 -2.98406 0.334369 -0.65819 -0.674525 + 0.504744 1.95583 -2.89736 0.0657213 -0.784127 -0.617111 + 0.561231 1.9846 -2.94719 0.00479849 -0.827016 -0.562158 + 0.588059 2.02391 -2.99407 -0.0529281 -0.592872 -0.803555 + 0.57821 2.04381 -2.99755 -0.511442 -0.268182 -0.816398 + 0.588527 2.10963 -3.04155 -0.799168 -0.326007 -0.505025 + 0.484424 1.94553 -2.89293 0.0698482 -0.507247 -0.858966 + 0.44583 1.96623 -2.90117 -0.0076664 -0.382206 -0.924045 + 2.67151 2.02914 0.71846 0.99686 0.0589322 -0.0528951 + 2.6886 2.09035 0.768845 0.943737 -0.200669 -0.262855 + 2.73773 2.11713 0.891059 0.950885 -0.00242421 -0.309534 + 2.76974 2.25956 1.00996 0.948322 0.0343029 -0.31545 + 2.84566 2.22835 1.24362 0.940422 -0.003093 -0.339996 + 2.91431 2.40647 1.3995 0.948849 -0.0790274 -0.305681 + 2.93623 2.33865 1.51157 0.964898 -0.0674303 -0.253821 + 2.73842 2.35373 0.931246 0.894006 0.174965 -0.412481 + 2.81256 2.32573 1.13535 0.938734 -0.0297848 -0.343353 + 2.88121 2.50385 1.29123 0.936162 -0.0799716 -0.342353 + 2.99463 2.69059 1.5504 0.959938 -0.0896236 -0.265495 + 3.01655 2.62285 1.66252 0.979102 -0.125827 -0.159772 + 2.67447 2.278 0.802623 0.720593 0.411058 -0.558369 + 2.68578 2.38143 0.851482 0.888723 0.0336841 -0.457206 + 2.78124 2.41982 1.05658 0.92132 -0.0243742 -0.38804 + 2.85952 2.61477 1.20352 0.925873 -0.0842115 -0.36833 + 2.98441 2.8109 1.47462 0.955422 -0.0749462 -0.285574 + 2.62183 2.30578 0.72291 0.877114 0.0831774 -0.473025 + 2.64802 2.47483 0.752111 0.900968 -0.0820684 -0.426053 + 2.75872 2.54239 0.975685 0.911529 -0.0870234 -0.401923 + 2.837 2.73734 1.12262 0.92231 -0.092091 -0.375318 + 2.96272 2.92172 1.38686 0.945961 -0.0635739 -0.317986 + 2.51401 2.31489 0.503919 0.910713 0.03266 -0.411745 + 2.58868 2.36048 0.653766 0.895251 -0.056553 -0.441959 + 2.60116 2.6108 0.624196 0.898823 -0.110475 -0.424161 + 2.72096 2.63579 0.876314 0.906586 -0.104319 -0.408925 + 2.81207 2.84551 1.03226 0.921419 -0.109802 -0.372733 + 2.46937 2.34416 0.416232 0.86826 0.038163 -0.49464 + 2.54182 2.49645 0.525852 0.888207 -0.0924309 -0.45005 + 2.58091 2.74515 0.544287 0.887911 -0.121179 -0.443767 + 2.7072 2.76244 0.798548 0.906629 -0.127132 -0.40232 + 2.79831 2.97216 0.954499 0.920891 -0.101816 -0.376288 + 2.44543 2.27979 0.37632 0.718057 0.275031 -0.639337 + 2.41009 2.47716 0.302859 0.871211 -0.0786243 -0.484571 + 2.49718 2.52572 0.438165 0.86603 -0.0963212 -0.490626 + 2.38615 2.4128 0.262939 0.879806 -0.00167563 -0.475331 + 2.40968 2.60772 0.270929 0.857919 -0.13133 -0.496717 + 2.49677 2.65618 0.406191 0.867706 -0.125355 -0.481013 + 2.49429 2.81905 0.355288 0.875115 -0.120078 -0.468781 + 2.57843 2.90803 0.493386 0.884851 -0.103434 -0.454246 + 2.68696 2.89679 0.71864 0.901603 -0.106367 -0.419283 + 2.76845 3.07492 0.860518 0.915697 -0.0827831 -0.39325 + 2.47963 2.97629 0.295346 0.874121 -0.0784305 -0.479333 + 2.54816 3.04584 0.411292 0.879667 -0.068648 -0.47061 + 2.66019 3.0171 0.63406 0.896749 -0.0848377 -0.434332 + 2.74168 3.19523 0.775939 0.909137 -0.063492 -0.411628 + 2.43931 3.14098 0.203898 0.850076 -0.0200171 -0.526279 + 2.50785 3.21052 0.319844 0.872276 0.00426763 -0.488996 + 2.62992 3.15491 0.551967 0.886977 -0.047584 -0.459356 + 2.70095 3.29493 0.677653 0.893638 -0.0326435 -0.447599 + 2.38088 3.25584 0.119155 0.815884 0.0478805 -0.57623 + 2.44382 3.3279 0.219741 0.842162 0.110341 -0.527815 + 2.58204 3.26134 0.460024 0.874376 0.00588322 -0.485214 + 2.65307 3.40136 0.58571 0.876219 -0.0151807 -0.481674 + 2.34785 3.42302 0.102595 0.821075 0.111012 -0.559921 + 2.51801 3.37872 0.359921 0.849225 0.0558676 -0.525068 + 2.59962 3.50006 0.490758 0.846312 0.012624 -0.532538 + 2.71706 3.58728 0.688875 0.893513 -0.0167451 -0.448725 + 2.76013 3.49468 0.787875 0.911009 -0.0178989 -0.411998 + 2.44711 3.46454 0.261678 0.828567 0.0508519 -0.557576 + 2.52873 3.58587 0.392516 0.83814 -0.000561049 -0.545455 + 2.66362 3.68599 0.593915 0.860778 -0.00734568 -0.508927 + 2.73856 3.90859 0.73135 0.907451 0.013409 -0.419944 + 2.77582 3.81861 0.830804 0.933799 0.00766403 -0.357717 + 2.47465 3.68253 0.300103 0.840074 -0.0545014 -0.539727 + 2.61642 3.79249 0.510856 0.857008 -0.0257027 -0.514662 + 2.69136 4.01509 0.648292 0.897292 -0.00604435 -0.441395 + 2.80241 4.17046 0.902182 0.942138 0.000324917 -0.335226 + 2.83967 4.08039 1.00158 0.957128 -0.00431602 -0.289633 + 2.56233 3.88914 0.418443 0.854671 -0.0401501 -0.517616 + 2.64914 4.11155 0.555025 0.884611 -0.0234189 -0.465741 + 2.77019 4.2544 0.796595 0.932967 -0.0158803 -0.359612 + 2.80234 4.48734 0.914338 0.955139 0.0781334 -0.285666 + 2.83456 4.40331 1.01987 0.964872 0.0541266 -0.257084 + 2.60312 4.21438 0.46731 0.877797 -0.0286857 -0.478173 + 2.72797 4.35094 0.703387 0.912857 0.00904089 -0.40818 + 2.76089 4.56788 0.813234 0.94214 0.0981501 -0.32053 + 2.79077 4.6899 0.98689 0.949499 0.214131 -0.229346 + 2.83173 4.63089 1.0977 0.960287 0.194486 -0.200061 + 2.68542 4.4429 0.6089 0.906319 0.0123005 -0.422416 + 2.71834 4.65985 0.718739 0.927165 0.125943 -0.352849 + 2.74932 4.77044 0.885785 0.943216 0.229901 -0.23977 + 2.7084 4.97785 0.998734 0.929402 0.336078 -0.152522 + 2.74616 4.90857 1.09554 0.931632 0.33578 -0.138975 + 2.64047 4.54202 0.519628 0.897385 0.0513165 -0.438255 + 2.66822 4.75083 0.630958 0.912169 0.15659 -0.378718 + 2.70037 4.857 0.796664 0.929584 0.255633 -0.265565 + 2.65944 5.06441 0.909622 0.923181 0.341067 -0.177232 + 2.61376 4.84895 0.547808 0.899669 0.176061 -0.399498 + 2.65025 4.94798 0.708883 0.921177 0.268123 -0.282034 + 2.61138 5.14084 0.817034 0.913574 0.348811 -0.209076 + 2.60005 5.27246 1.05447 0.916325 0.391651 -0.0834139 + 2.63199 5.20228 1.15381 0.91877 0.390824 -0.0558353 + 2.55713 4.93932 0.463279 0.90167 0.189749 -0.388569 + 2.59492 5.03463 0.622196 0.908901 0.283452 -0.305867 + 2.55605 5.22749 0.730347 0.893946 0.380737 -0.236431 + 2.55198 5.34889 0.961884 0.87828 0.452994 -0.153039 + 2.50784 5.47996 1.22667 0.872213 0.488792 -0.0180771 + 2.50059 5.03891 0.382189 0.891358 0.21689 -0.398044 + 2.5383 5.125 0.537667 0.901303 0.304185 -0.308422 + 2.49893 5.29793 0.637158 0.883413 0.399328 -0.245192 + 2.49541 5.41053 0.865721 0.857535 0.482417 -0.178629 + 2.43881 5.12605 0.296857 0.896079 0.237447 -0.375049 + 2.47683 5.20264 0.447795 0.888298 0.323433 -0.326065 + 2.43747 5.37556 0.547294 0.870629 0.417207 -0.260659 + 2.4383 5.48096 0.772532 0.857675 0.482028 -0.179004 + 2.39598 5.61798 1.0342 0.827613 0.54967 -0.113666 + 2.37936 5.22093 0.213316 0.876929 0.283483 -0.388114 + 2.41505 5.28978 0.362463 0.879786 0.351102 -0.320475 + 2.37552 5.44264 0.454495 0.857017 0.435614 -0.275249 + 2.38285 5.53666 0.67206 0.846725 0.492349 -0.201616 + 2.37951 5.0495 0.116236 0.89498 0.212028 -0.392497 + 2.31038 5.30304 0.127906 0.863872 0.325878 -0.384094 + 2.34577 5.36623 0.277045 0.857304 0.38771 -0.338689 + 2.30624 5.5191 0.369077 0.841989 0.45216 -0.29429 + 2.3209 5.60374 0.579269 0.829908 0.51656 -0.210756 + 2.32204 5.14603 0.030249 0.889735 0.257918 -0.376631 + 2.23783 5.38581 0.041944 0.841278 0.357507 -0.405512 + 2.2768 5.44834 0.191635 0.850292 0.404467 -0.336764 + 2.23743 5.58643 0.280245 0.83262 0.465317 -0.300374 + 2.25917 5.66193 0.483885 0.820038 0.527487 -0.222024 + 2.24948 5.2288 -0.055713 0.850589 0.325182 -0.413225 + 2.1625 5.46109 -0.042254 0.823091 0.380725 -0.421391 + 2.20301 5.52251 0.10737 0.830445 0.42511 -0.360061 + 2.16364 5.6606 0.195989 0.817953 0.482846 -0.31275 + 2.19036 5.72927 0.395052 0.799878 0.55289 -0.233471 + 2.17516 5.30753 -0.147275 0.830827 0.351023 -0.431867 + 2.07975 5.54245 -0.121966 0.801233 0.389729 -0.454023 + 2.12768 5.59788 0.023222 0.823283 0.430212 -0.370301 + 2.08997 5.72607 0.107994 0.811367 0.491573 -0.316291 + 2.1204 5.78911 0.305796 0.788776 0.566282 -0.239077 + 2.09241 5.38889 -0.226996 0.791544 0.381486 -0.477417 + 1.99624 5.61466 -0.200255 0.774812 0.394399 -0.494081 + 2.0527 5.66198 -0.067605 0.803315 0.43225 -0.40969 + 2.015 5.79017 0.017166 0.786792 0.512218 -0.34437 + 2.04673 5.85449 0.217752 0.784342 0.569674 -0.245519 + 1.9999 5.26727 -0.465553 0.74328 0.410284 -0.528395 + 2.00236 5.46013 -0.309787 0.761803 0.391158 -0.516383 + 1.90669 5.70324 -0.265662 0.726674 0.433134 -0.533235 + 1.96919 5.7342 -0.145894 0.763189 0.464014 -0.449704 + 1.93368 5.85036 -0.06688 0.742615 0.543902 -0.390761 + 2.01005 5.09055 -0.593649 0.773849 0.415489 -0.478044 + 1.897 5.32413 -0.550839 0.699807 0.433177 -0.568003 + 1.91281 5.54861 -0.375237 0.726 0.404402 -0.556223 + 1.80394 5.77041 -0.338008 0.667209 0.460198 -0.585704 + 1.87717 5.79114 -0.227716 0.70867 0.499751 -0.498032 + 1.90715 5.14741 -0.678936 0.69296 0.474293 -0.543003 + 1.79588 5.39142 -0.619783 0.661577 0.447364 -0.601815 + 1.81169 5.61589 -0.444181 0.662366 0.439637 -0.606622 + 1.69468 5.82508 -0.409707 0.590969 0.489442 -0.641251 + 1.77442 5.8584 -0.300021 0.658857 0.520112 -0.543499 + 1.82293 5.09917 -0.833386 0.665469 0.512977 -0.542222 + 1.79847 5.22373 -0.746933 0.660948 0.48498 -0.572663 + 1.68559 5.46478 -0.67924 0.60448 0.475804 -0.638917 + 1.70243 5.67048 -0.51592 0.602893 0.471022 -0.64394 + 1.88753 4.95658 -0.89482 0.706913 0.536145 -0.461326 + 1.70753 5.17999 -0.889376 0.614641 0.525357 -0.588401 + 1.68819 5.29708 -0.806381 0.614619 0.503426 -0.607294 + 1.56957 5.52995 -0.731322 0.555854 0.502461 -0.662238 + 1.87891 4.87863 -0.985402 0.618341 0.538791 -0.572152 + 1.77214 5.03741 -0.950809 0.608016 0.529219 -0.591815 + 1.58714 5.25355 -0.942585 0.559589 0.528346 -0.638523 + 1.5678 5.37064 -0.85959 0.564117 0.52434 -0.637839 + 2.03337 4.6711 -1.00275 0.729694 0.463329 -0.502865 + 1.91638 4.76694 -1.04815 0.615698 0.543182 -0.57085 + 1.74087 4.96192 -1.04267 0.544296 0.511057 -0.665254 + 1.63409 5.12079 -1.00802 0.545805 0.50741 -0.666807 + 1.45903 5.31512 -0.996827 0.505928 0.531538 -0.679341 + 1.99519 4.61324 -1.08894 0.667133 0.366672 -0.648448 + 1.88748 4.71569 -1.13058 0.584667 0.472478 -0.659491 + 1.73303 4.82137 -1.17302 0.464421 0.502104 -0.729524 + 1.76194 4.87261 -1.09058 0.539443 0.5513 -0.636451 + 1.53142 5.08193 -1.11033 0.472589 0.491175 -0.731715 + 2.04889 4.45611 -1.10178 0.625652 0.162118 -0.763071 + 1.96621 4.56012 -1.13792 0.569859 0.226626 -0.789875 + 1.8585 4.66265 -1.17951 0.394964 0.202347 -0.896136 + 2.06534 4.30683 -1.08842 0.165726 -0.190595 -0.967579 + 2.02337 4.39865 -1.12526 0.270114 -0.208268 -0.940033 + 1.94069 4.50266 -1.1614 -0.106776 -0.315449 -0.942916 + 2.08928 4.14522 -1.06409 0.248168 -0.0934227 -0.964202 + 2.0466 4.10856 -1.0584 -0.489524 -0.0754847 -0.868717 + 2.03364 4.27968 -1.06779 -0.542495 -0.301152 -0.784224 + 1.99167 4.3715 -1.10462 -0.611108 -0.504348 -0.610065 + 2.05101 3.88745 -1.04242 -0.392203 0.118485 -0.912216 + 1.99583 3.86673 -1.01114 -0.544096 0.127998 -0.829202 + 2.02304 4.08642 -1.02005 -0.737529 0.0149861 -0.675149 + 2.01007 4.25745 -1.02949 -0.762162 -0.132344 -0.633715 + 2.03007 3.69726 -1.092 -0.411265 0.414258 -0.811943 + 1.9749 3.67645 -1.06076 -0.572579 0.400494 -0.715373 + 1.74742 3.72033 -0.871373 -0.549309 0.216261 -0.80715 + 1.77462 3.94002 -0.880283 -0.570766 0.166296 -0.804097 + 1.76261 4.05962 -0.821833 -0.647748 0.152918 -0.74635 + 1.99278 3.52588 -1.20576 -0.469362 0.695106 -0.544543 + 1.94981 3.49535 -1.17289 -0.628683 0.627639 -0.459158 + 1.74752 3.40461 -1.07452 -0.5071 0.712606 -0.484811 + 1.77261 3.58579 -0.962341 -0.555242 0.442445 -0.704236 + 1.98072 3.43541 -1.38007 0.286957 0.915062 -0.283402 + 1.94716 3.43808 -1.3497 -0.401772 0.90496 -0.140092 + 1.90418 3.40747 -1.31688 -0.490817 0.868704 -0.0667227 + 1.88163 3.43962 -1.53096 -0.195883 0.977953 0.0723714 + 1.84709 3.41146 -1.48519 -0.378316 0.913064 0.152285 + 1.68608 3.35453 -1.39578 -0.240246 0.963322 0.119554 + 1.74316 3.35054 -1.22748 -0.354105 0.930087 -0.0977177 + 1.82574 3.42676 -1.70469 0.218895 0.934977 -0.27911 + 1.79723 3.42649 -1.65382 -0.237571 0.96765 0.0849265 + 1.76269 3.39842 -1.608 -0.368893 0.914219 0.167695 + 1.72522 3.41054 -1.78059 0.148565 0.934332 -0.323964 + 1.69671 3.41036 -1.72967 -0.213004 0.957225 0.195832 + 1.66266 3.36006 -1.66077 -0.329502 0.916902 0.22521 + 1.54073 3.32302 -1.56781 -0.147083 0.986648 0.0699382 + 1.64076 3.36138 -1.51505 -0.263014 0.964016 0.0386954 + 1.6089 3.41555 -1.84827 0.161352 0.946806 -0.278429 + 1.59004 3.40451 -1.78076 -0.118379 0.935399 0.333189 + 1.556 3.35431 -1.7118 -0.112573 0.919986 0.375438 + 1.48277 3.42564 -1.88495 0.155326 0.986915 0.0432823 + 1.46391 3.41461 -1.81744 0.0333653 0.924266 0.380288 + 1.43494 3.37481 -1.76431 0.0337742 0.88904 0.456583 + 1.35307 3.35536 -1.67502 0.160271 0.958432 0.236055 + 1.47412 3.33477 -1.62255 0.0504947 0.979649 0.194263 + 1.36382 3.44218 -1.92599 0.179912 0.982135 -0.0551638 + 1.29996 3.46466 -1.90454 0.265219 0.959441 -0.095561 + 1.30519 3.45113 -1.84669 0.181437 0.884 0.430841 + 1.27622 3.41134 -1.79357 0.16241 0.852996 0.496004 + 1.15463 3.4633 -1.99157 0.297673 0.841896 -0.450113 + 1.1022 3.53356 -1.92768 0.301205 0.938207 -0.17042 + 1.10742 3.52012 -1.86978 0.31716 0.864002 0.391036 + 1.07183 3.48275 -2.01627 0.307296 0.760528 -0.571984 + 1.01939 3.55311 -1.95233 0.426555 0.803947 -0.414391 + 0.96066 3.60365 -1.92487 0.494927 0.84908 -0.18469 + 0.958648 3.58478 -1.85979 0.482183 0.77035 0.417205 + 1.11874 3.44461 -1.78761 0.278898 0.832016 0.479547 + 1.05115 3.46115 -2.05065 0.260583 0.671837 -0.693348 + 0.969432 3.54005 -2.00651 0.349835 0.726283 -0.591716 + 0.9107 3.59059 -1.97905 0.431828 0.726953 -0.533913 + 0.836274 3.68742 -1.90357 0.502162 0.861491 -0.0752784 + 0.834262 3.66848 -1.83855 0.564977 0.733019 0.378793 + 0.936296 3.46802 -2.08816 0.271225 0.618756 -0.737278 + 0.948757 3.51835 -2.04093 0.304695 0.657611 -0.688991 + 0.846731 3.62203 -1.9957 0.435322 0.661427 -0.610745 + 0.772305 3.71886 -1.92022 0.594254 0.758296 -0.268047 + 0.831081 3.52536 -2.07787 -0.00852729 0.39327 -0.919383 + 0.843542 3.57578 -2.0306 0.32367 0.578306 -0.748865 + 0.705238 3.728 -1.99306 0.44169 0.630157 -0.638602 + 0.638711 3.79866 -1.96524 0.570894 0.687529 -0.448759 + 0.705777 3.78952 -1.8924 0.674525 0.721203 -0.157738 + 0.830249 3.43662 -2.09197 -0.337322 0.152765 -0.928912 + 0.700534 3.60249 -2.02207 -0.15147 0.0801534 -0.985207 + 0.702049 3.68176 -2.02795 0.0647169 0.304795 -0.950217 + 0.620649 3.7338 -2.01269 0.0114687 0.101269 -0.994793 + 0.770081 3.3076 -2.0747 -0.188333 0.182023 -0.96509 + 0.699702 3.51375 -2.03617 -0.0713914 0.171692 -0.98256 + 0.647085 3.52642 -2.0411 0.496314 0.278766 -0.822169 + 0.591852 3.63862 -2.04383 0.618985 0.449348 -0.644162 + 0.619134 3.65462 -2.00675 0.208815 0.341377 -0.916438 + 0.717464 3.32035 -2.07958 0.430172 0.271348 -0.861001 + 0.576766 3.71804 -2.007 0.31714 0.222589 -0.921887 + 2.67427 2.71354 -0.70516 -0.585552 0.494316 0.64248 + 1.02369 1.81801 0.518748 -0.770135 0.629929 0.100407 + 0.925079 1.67623 0.632923 -0.31584 -0.363456 -0.876439 + 0.972324 1.71963 0.595543 -0.756445 0.3446 -0.555915 + 0.848978 1.62264 0.668738 0.232188 -0.827003 -0.51201 + 1.02369 1.81801 0.518748 0.487929 -0.727629 -0.482164 + 0.948408 2.01676 -0.468093 -0.0645931 -0.965585 0.251938 + 0.915514 2.00015 -0.555323 -0.344388 -0.914973 0.210287 + 1.23701 1.53076 0.60848 -0.714382 -0.153768 -0.682652 + 1.33145 1.63145 0.543685 -0.378735 -0.222833 -0.898279 + 1.21447 1.45124 0.759218 -0.521178 -0.444237 -0.728716 + 1.25585 1.60974 0.521077 0.910925 -0.408448 0.0581845 + 1.20934 1.39286 0.775928 -0.847225 0.0204599 -0.530839 + 1.1853 1.29834 0.696237 -0.449277 -0.288303 -0.845595 + 1.13045 1.1621 0.761815 -0.819103 0.172255 -0.547174 + 1.26299 1.58624 0.584984 -0.17437 -0.313641 -0.933394 + 1.13996 1.08149 0.754245 -0.871564 0.0509284 -0.48763 + 1.29257 1.60304 0.697493 -0.42515 -0.12688 -0.896186 + 1.37295 1.58577 0.661806 -0.426385 -0.136886 -0.894124 + 0.307145 1.88639 -1.30329 0.0661222 0.806585 0.587409 + 0.186089 1.88576 -1.28879 0.121439 0.805982 0.579349 + 0.099451 1.85062 -1.21534 -0.0995206 0.808565 0.579929 + 0.064756 1.84625 -1.22456 -0.24945 0.786141 0.565471 + 0.874389 1.49643 -1.23266 0.166063 -0.680019 -0.714141 + 0.792052 1.49776 -1.24696 0.1188 -0.656521 -0.744894 + 0.922122 1.44708 -1.17038 0.192259 -0.692053 -0.695772 + 0.508552 1.94894 -2.92703 -0.780217 -0.553978 0.290465 + 0.52297 1.93907 -2.90713 -0.837095 -0.524939 0.153982 + 0.531743 1.92998 -2.84378 -0.892581 -0.423164 0.155665 + 0.562042 1.91149 -2.78196 -0.880935 -0.314045 0.354018 + 0.540993 1.91304 -2.85124 -0.857508 -0.506917 0.0878356 + 0.596303 1.90966 -2.7044 -0.70092 -0.627276 0.339465 + 0.594687 1.91353 -2.65769 -0.614061 -0.784243 0.088835 + 0.596791 1.8903 -2.71226 -0.732456 -0.271992 0.624122 + 0.673959 1.88607 -2.67534 -0.224245 -0.970769 -0.0855689 + 0.645977 1.89343 -2.65109 -0.28634 -0.957263 0.0407023 + 0.644361 1.8973 -2.60438 -0.290762 -0.953806 0.0755789 + 0.733378 1.87888 -2.59848 -0.11827 -0.986878 0.109923 + 0.813326 1.87664 -2.6242 0.196596 -0.971981 0.128851 + 0.844209 1.88512 -2.61269 0.0873606 -0.961378 -0.260999 + 0.76136 1.87152 -2.62273 -0.00669117 -0.982034 0.188584 + 0.881192 1.90619 -2.68198 0.379819 -0.90383 -0.197052 + 0.912075 1.91468 -2.67049 0.113981 -0.929046 -0.351968 + 0.932709 1.90732 -2.65595 -0.061355 -0.901762 -0.427857 + 0.617677 1.90266 -2.70986 0.370197 -0.770326 -0.519184 + 0.596791 1.8903 -2.71226 0.206586 -0.511364 0.834164 + 0.568883 1.86808 -2.71898 0.20596 -0.511065 0.834501 + 0.596791 1.8903 -2.71226 0.363491 -0.456742 -0.811949 + 1.1428 1.64929 -1.72542 -0.401092 0.915994 -0.00893161 + 1.13874 1.64637 -1.84257 -0.2741 0.961098 -0.0340594 + 1.15155 1.65076 -1.79137 -0.0272506 0.996538 -0.0785461 + 0.393486 2.18026 -3.16149 0.377926 -0.716 -0.586954 + 0.372261 2.1636 -3.15483 0.464096 -0.775365 -0.42828 + 0.350348 2.16381 -3.16919 0.321523 -0.800553 -0.505705 + 0.349223 2.13195 -3.11381 0.490387 -0.595144 -0.636651 + 0.334431 2.13339 -3.12531 -0.199286 -0.454074 -0.86839 + 0.371136 2.13183 -3.0994 0.592057 -0.661129 -0.460844 + 0.38294 2.11217 -3.06315 0.804983 -0.204868 -0.556805 + 0.370895 2.08434 -3.07694 0.818381 0.00123083 -0.574674 + 0.354297 2.09602 -3.09818 0.705106 -0.0623241 -0.706357 + 0.339505 2.09737 -3.10972 0.28838 -0.190533 -0.938368 + 0.404042 2.16929 -3.06808 0.679273 -0.628524 -0.378875 + 0.415846 2.14963 -3.03183 0.675007 -0.39771 -0.621444 + 0.393486 2.18026 -3.16149 0.500982 -0.856028 -0.12741 + 0.425268 2.18595 -3.07474 0.394101 -0.887399 -0.239183 + 0.440601 2.15824 -3.01655 0.399007 -0.517363 -0.757052 + 0.443019 2.08989 -2.99497 0.353871 -0.397841 -0.846462 + 0.455932 2.1985 -3.12628 0.241862 -0.966002 -0.091344 + 0.480623 2.19749 -3.09233 -0.0588648 -0.976604 -0.206832 + 0.449959 2.18494 -3.04079 0.257136 -0.853261 -0.453682 + 0.483061 2.14963 -3.00123 0.0814883 -0.519822 -0.850379 + 0.50524 2.13919 -2.99355 0.0266964 -0.487804 -0.872545 + 0.465198 2.07954 -2.98724 0.0433964 -0.24891 -0.967554 + 0.492418 2.17623 -3.02551 -0.176385 -0.80804 -0.562102 + 0.52121 2.16814 -3.0325 -0.343357 -0.861212 -0.374726 + 0.53286 2.15391 -3.00765 -0.2372 -0.777605 -0.582295 + 0.529393 2.117 -2.98592 -0.107761 -0.266479 -0.957797 + 0.509415 2.1894 -3.09931 -0.368745 -0.90262 -0.222047 + 0.565038 2.15256 -3.06872 -0.484107 -0.846432 -0.221797 + 0.557013 2.13173 -3.00002 -0.537375 -0.499236 -0.6797 + 0.540525 2.08937 -2.98326 -0.193184 -0.0956334 -0.976491 + 0.476331 2.05182 -2.98463 -0.10682 -0.242327 -0.964296 + 0.460611 2.02282 -2.96798 -0.171443 -0.57887 -0.797193 + 0.568852 2.10302 -2.9977 -0.676759 -0.220353 -0.702454 + 0.549883 2.03016 -2.9831 -0.239556 -0.25282 -0.937387 + 0.534164 2.00115 -2.96646 -0.121044 -0.661562 -0.740057 + 0.477676 1.9723 -2.91668 -0.140817 -0.783527 -0.605191 + 0.352052 2.05087 -3.10877 0.393683 -0.245151 -0.885954 + 0.323018 2.03798 -3.10345 -0.140404 -0.466361 -0.87338 + 0.310471 2.08448 -3.1044 -0.277882 -0.115503 -0.953646 + 0.237864 2.05686 -3.07595 -0.324359 -0.349116 -0.879153 + 0.229401 2.08615 -3.07449 -0.277474 -0.133379 -0.951429 + 0.302008 2.1137 -3.10299 -0.45046 -0.048573 -0.891475 + 0.322121 2.17092 -3.11931 -0.589253 -0.493426 -0.639774 + 0.350348 2.16381 -3.16919 -0.863471 -0.209912 -0.458643 + 0.289698 2.15122 -3.09699 -0.37193 -0.235035 -0.898013 + 0.289793 2.2002 -3.13563 -0.394012 -0.817502 -0.420054 + 0.350348 2.16381 -3.16919 -0.590066 -0.775858 -0.22331 + 0.31802 2.1931 -3.18552 -0.525173 -0.822986 -0.216533 + 0.248177 2.23837 -3.20173 -0.289099 -0.909547 -0.298572 + 0.19127 2.24886 -3.2109 0.0385587 -0.964608 -0.260852 + 0.129042 2.23586 -3.21559 0.215521 -0.949493 -0.228067 + -0.924635 2.00506 -0.519026 0.958068 -0.105458 0.266429 + -0.920037 1.95183 -0.55663 0.95512 -0.151033 0.254824 + -0.914713 1.86018 -0.745692 0.313962 -0.941078 -0.125697 + -1.37295 1.58577 0.661806 0.426351 -0.136895 -0.894139 + -0.678992 1.83517 -2.44137 -0.769858 0.630129 -0.101274 + -0.661911 1.8537 -2.45587 -0.545686 0.791819 0.274315 + -0.625186 1.8998 -2.49551 -0.346166 0.754879 0.557069 + -0.693494 1.82274 -2.41123 -0.760057 0.643401 -0.0913747 + -0.639392 1.87276 -2.42967 -0.65124 0.758831 0.00788446 + -0.621012 1.88748 -2.46078 -0.656241 0.753659 -0.0366962 + -0.643531 1.86852 -2.48694 -0.614522 0.787777 -0.042064 + -0.618742 1.88277 -2.53462 -0.757163 0.650004 -0.0647919 + -0.710576 1.80419 -2.39672 -0.774003 0.622518 -0.115717 + -0.608264 1.9006 -2.4921 -0.807943 0.585964 -0.0622418 + -0.605994 1.89588 -2.56593 -0.923488 0.373686 -0.0867705 + -0.592266 1.91999 -2.61288 -0.936872 0.3344 -0.102214 + -0.221581 1.99605 -3.06703 -0.0743072 0.98154 0.176233 + -0.267675 2.00019 -3.07539 0.000131986 0.89665 0.44274 + -0.161271 1.99295 -2.99625 -0.215221 0.976479 0.0129731 + -0.136983 2.00247 -2.98235 -0.170746 0.951133 -0.257277 + -0.128457 1.99899 -2.99252 -8.67722e-005 0.998062 -0.062219 + -0.108668 1.98654 -2.98615 0.319866 0.781959 0.535001 + -0.199855 1.98061 -2.98869 -0.204715 0.977897 -0.0425444 + -0.175566 1.99014 -2.97479 -0.287902 0.946501 -0.145769 + -0.268179 1.99335 -3.07676 -0.237126 0.87706 0.417777 + -0.293134 1.98927 -3.07549 0.0324754 0.819348 0.572376 + -0.319848 1.99731 -3.11521 0.0382435 0.990886 0.12916 + -0.31628 1.99369 -3.07773 0.175231 0.978838 0.105689 + -0.325906 1.99664 -3.08165 0.2675 0.96119 0.067504 + -0.320655 1.99868 -2.96098 0.220556 0.965805 0.136293 + -0.295713 1.99981 -2.96814 -0.243513 0.969871 -0.00724026 + -0.284575 2.00426 -2.96885 -0.371288 0.928509 -0.00411823 + -0.328944 1.99242 -2.93294 0.701206 0.624414 0.344119 + -1.15152 1.65076 -1.79137 0.293997 0.955644 -0.0176318 + -1.1428 1.64929 -1.72542 0.397442 0.917063 -0.0321691 + -1.13874 1.64637 -1.84257 0.271888 0.962219 -0.0145619 + 0.012141 2.04154 -3.09621 -6.94118e-005 -0.784969 -0.619535 + -0.012102 2.04153 -3.0962 0.0120096 -0.766179 -0.642514 + -0.021961 2.02879 -3.08313 -0.371428 -0.74644 -0.552149 + 1.02369 1.81801 0.518748 -0.11541 -0.573078 -0.811334 + 0.972324 1.71963 0.595543 -0.115414 -0.573076 -0.811334 + 0.080404 2.00707 -3.02371 -0.117919 0.832655 0.541092 + 0.082735 1.99305 -3.00163 -0.117919 0.832655 0.541093 + 0.108633 1.98662 -2.9861 -0.117919 0.832655 0.541092 + 0.00729 3.0019 -1.86921 0.575951 0.709312 -0.406396 + -0.00729 3.0019 -1.86921 -0.575837 0.709395 -0.406412 + -0.00861 2.95866 -1.66912 -0.653304 0.698657 0.291672 + 0.016514 2.25648 -0.879903 0 0.48573 0.874109 + -1.02369 1.81801 0.51875 0.115235 -0.573168 -0.811295 + -0.972324 1.71963 0.59555 0.115273 -0.573153 -0.8113 + -1.07094 1.86141 0.481375 0.115234 -0.573169 -0.811294 + -0.082769 1.99305 -3.00163 0.117371 0.831776 0.542561 + -0.080403 2.00708 -3.02372 0.118004 0.832569 0.541206 + -0.108668 1.98654 -2.98615 0.116522 0.83071 0.544374 + 2.62735 2.77706 -0.803569 0.799797 0.60024 0.0060576 + 2.67427 2.71354 -0.70516 0.83897 0.541101 0.0577904 + 2.69296 2.68907 -0.747364 0.88912 0.457413 -0.015448 + 2.76006 2.54148 -0.595733 0.936886 0.349556 0.00744066 + 2.66066 2.74987 -0.83028 0.827452 0.561381 0.0132091 + 2.62735 2.77706 -0.803569 0.686197 0.716294 0.126717 + 2.59755 2.8118 -0.900746 0.17471 0.918879 0.353748 + 2.74137 2.56587 -0.553589 0.880466 0.4571 0.125856 + 2.79322 2.409 -0.417882 0.938195 0.337548 0.0764976 + 2.62735 2.77706 -0.803569 -0.747519 0.518851 0.41474 + -0.534839 1.92882 -2.85178 -0.519846 0.852994 0.0464883 + -0.52042 1.93869 -2.87167 -0.428662 0.900362 0.0748143 + -0.508552 1.94894 -2.92703 -0.0961616 0.987912 0.121582 + -0.484424 1.94554 -2.89294 -0.105183 0.980917 0.16352 + -0.517922 1.95242 -2.95826 -0.130694 0.978753 0.157993 + -0.49606 1.95866 -2.97745 -0.0723008 0.993601 0.0867757 + -0.517137 1.95856 -3.00009 -0.092774 0.992281 0.0822934 + -0.483244 1.9587 -2.99094 -0.004039 0.999992 -0.000346849 + 0.9621 1.92007 -2.69142 -0.233448 -0.918965 -0.317814 + 0.941467 1.92742 -2.70595 -0.11974 -0.936938 -0.328343 + 0.961467 1.93616 -2.75449 -0.36455 -0.904699 -0.220507 + 0.923743 1.94387 -2.74325 -0.0220769 -0.935402 -0.352896 + 0.943743 1.95252 -2.79183 -0.300675 -0.911713 -0.279954 + 0.892877 1.92997 -2.73397 0.370485 -0.850968 -0.372282 + 0.819883 1.89681 -2.75453 0.339735 -0.837637 -0.42772 + 0.860398 1.97181 -2.83144 0.276514 -0.74731 -0.604208 + 0.83271 2.03751 -2.89384 0.202295 -0.628225 -0.751272 + 0.839834 1.97284 -2.84323 0.357996 -0.639183 -0.680649 + 0.581134 3.8813 -1.91798 0.593829 0.653635 -0.469179 + 0.637317 3.86293 -1.87275 0.717414 0.661076 -0.219764 + 0.664806 3.81544 -1.79851 0.736779 0.566971 0.368375 + 0.733266 3.74195 -1.81821 0.662141 0.655561 0.363056 + 0.518448 3.97269 -1.86747 0.677603 0.623281 -0.390351 + 0.574631 3.9544 -1.82219 0.776251 0.625737 -0.0767332 + 0.595367 3.88153 -1.76637 0.757146 0.462753 0.461075 + 0.657801 3.71537 -1.71277 0.642688 0.640464 0.420427 + 0.732856 3.66747 -1.731 0.590283 0.699904 0.40212 + 0.513553 4.02222 -1.77126 0.883755 0.445905 0.141934 + 0.534289 3.94934 -1.71543 0.903596 0.288934 0.316279 + 0.588362 3.78145 -1.68063 0.752881 0.555775 0.35254 + 0.7262 3.6026 -1.49185 0.604674 0.781074 0.155863 + 0.434 4.21608 -1.68223 0.744553 0.515752 -0.423841 + 0.484016 4.13257 -1.67439 0.893866 0.367382 -0.25697 + 0.508511 4.08163 -1.62556 0.994108 0.10708 0.01682 + 0.509841 3.86933 -1.64343 0.904911 0.340212 0.25572 + 0.417436 4.27618 -1.63193 0.692139 0.535711 -0.483692 + 0.476256 4.31372 -1.51495 0.859956 0.393163 -0.325421 + 0.500752 4.26279 -1.46613 0.915907 0.192544 -0.352194 + 0.484063 4.0017 -1.55352 0.998355 0.0513136 -0.0255802 + 0.599219 3.72037 -1.38404 0.856827 0.512155 -0.0595347 + 0.388452 4.3741 -1.57972 0.742546 0.461111 -0.4858 + 0.447272 4.41163 -1.46274 0.705612 0.344537 -0.619197 + 0.477044 4.4763 -1.41355 0.689446 0.136094 -0.711437 + 0.528419 4.40693 -1.35799 0.816176 0.0886979 -0.570954 + 0.534365 4.21435 -1.42024 0.910352 0.0809521 -0.40584 + 0.391724 4.57063 -1.45214 0.545024 0.101825 -0.832214 + 0.447602 4.6426 -1.43079 0.483485 -0.0728453 -0.872316 + 0.518036 4.55291 -1.36864 0.644902 -0.0761025 -0.760467 + 0.56941 4.48354 -1.31309 0.840042 -0.116021 -0.529971 + 0.562032 4.35841 -1.31215 0.926941 0.0424404 -0.372798 + 0.497061 4.70962 -1.41126 0.424653 -0.195474 -0.884002 + 0.567495 4.62002 -1.34907 0.599758 -0.258698 -0.757209 + 0.605012 4.56017 -1.27502 0.797508 -0.319706 -0.511634 + 0.583846 4.43159 -1.2419 0.933751 -0.130155 -0.333419 + 0.552582 4.76321 -1.40448 0.392602 -0.260636 -0.882005 + 0.61529 4.69129 -1.34532 0.53872 -0.360494 -0.761462 + 0.652807 4.63153 -1.27122 0.769746 -0.459985 -0.442611 + 0.619448 4.5083 -1.20378 0.909816 -0.246648 -0.333765 + 0.649418 4.2149 -1.00639 0.974289 0.00778448 -0.225168 + 0.620436 4.83545 -1.39461 0.394019 -0.216182 -0.893317 + 0.683144 4.76353 -1.33545 0.572904 -0.397392 -0.716841 + 0.707743 4.71343 -1.26267 0.770551 -0.515583 -0.374733 + 0.650159 4.59414 -1.17185 0.869613 -0.39027 -0.302428 + 0.575173 4.91974 -1.4214 0.33075 -0.0745998 -0.940765 + 0.739039 4.91135 -1.36187 0.383517 -0.242294 -0.891183 + 0.753893 4.85831 -1.3304 0.533711 -0.444865 -0.719199 + 0.778492 4.80821 -1.25762 0.637733 -0.6082 -0.47264 + 0.705095 4.67604 -1.1633 0.749525 -0.551004 -0.366888 + 0.693776 4.99564 -1.38866 0.308646 0.0244211 -0.950863 + 0.834013 4.97092 -1.34045 0.382718 -0.164344 -0.90913 + 0.848867 4.91788 -1.30899 0.410099 -0.50902 -0.756781 + 0.858119 4.86914 -1.24797 0.445101 -0.725131 -0.525425 + 0.778795 4.75395 -1.16045 0.616234 -0.640368 -0.458459 + 0.643568 5.10455 -1.3843 0.265049 0.210269 -0.941029 + 0.758672 5.15924 -1.34083 0.279265 0.219755 -0.934729 + 0.808881 5.05033 -1.34519 0.318184 0.116385 -0.940858 + 0.922553 4.99578 -1.30592 0.245997 -0.0351257 -0.968634 + 0.648566 5.23973 -1.34764 0.185371 0.335003 -0.923802 + 0.790913 5.27267 -1.2991 0.268804 0.295902 -0.916617 + 0.874567 5.17472 -1.29805 0.283764 0.225064 -0.932107 + 0.897421 5.07519 -1.31066 0.288618 0.118343 -0.950102 + 0.729833 5.37574 -1.27601 0.174806 0.45826 -0.871459 + 0.87218 5.40876 -1.22741 0.248098 0.450374 -0.857678 + 1.019 5.38393 -1.18621 0.313164 0.421292 -0.851141 + 0.906808 5.28823 -1.25626 0.288041 0.299199 -0.909677 + 1.04436 5.15892 -1.25768 0.253852 0.263659 -0.930615 + 0.62515 5.50066 -1.20399 0.0408389 0.668229 -0.742834 + 0.76991 5.52379 -1.16626 0.124177 0.654321 -0.745952 + 0.916426 5.52384 -1.13374 0.232846 0.62923 -0.74152 + 1.06325 5.49902 -1.09254 0.328853 0.582912 -0.743014 + 1.17762 5.33694 -1.14963 0.366026 0.39186 -0.84408 + 0.61708 5.6261 -1.06225 0.000841583 0.718679 -0.695341 + 0.763906 5.64422 -1.03944 0.0901012 0.712984 -0.695367 + 0.910422 5.64417 -1.00696 0.181054 0.696969 -0.693869 + 1.05435 5.62891 -0.977733 0.293578 0.657106 -0.69428 + 0.48032 5.7741 -0.923194 0.0257597 0.677039 -0.735496 + 0.621965 5.79243 -0.899559 0.032651 0.684147 -0.728613 + 0.768791 5.81047 -0.876793 0.0821737 0.681606 -0.72709 + 0.912049 5.80252 -0.858229 0.174186 0.667657 -0.723805 + 0.498004 5.99299 -0.726127 0.0341043 0.667242 -0.74406 + 0.639649 6.01133 -0.70249 0.0485558 0.668402 -0.742213 + 0.784456 6.01127 -0.691392 0.0933853 0.669114 -0.737269 + 0.927715 6.00332 -0.672828 0.178047 0.656553 -0.732965 + 0.354184 6.1405 -0.599632 0.0420383 0.663685 -0.74683 + 0.498102 6.14672 -0.588201 0.037142 0.678084 -0.734045 + 0.641316 6.14611 -0.579735 0.0490339 0.678255 -0.733189 + 0.786124 6.14596 -0.568686 0.0892531 0.67008 -0.736903 + 0.347783 6.21394 -0.536426 0.0534637 0.700327 -0.711817 + 0.486205 6.20677 -0.532 0.0466256 0.712976 -0.699636 + 0.62942 6.20606 -0.523584 0.0430745 0.720728 -0.691878 + 0.768288 6.20634 -0.515467 0.0787484 0.717985 -0.69159 + 0.207617 6.2185 -0.54092 0.0496514 0.694268 -0.718002 + 0.205578 6.29899 -0.452748 0.0606583 0.765246 -0.640874 + 0.338572 6.28741 -0.454885 0.0592936 0.768014 -0.637682 + 0.476994 6.28015 -0.4505 0.055858 0.771129 -0.634224 + 0.613773 6.2732 -0.447271 0.0478942 0.776335 -0.628499 + 0.069681 6.23174 -0.539659 0.0300049 0.689998 -0.723189 + 0.067642 6.31215 -0.451527 0.0295687 0.773894 -0.632624 + 0.199352 6.38522 -0.341687 0.0541961 0.80811 -0.586533 + 0.332346 6.37373 -0.343783 0.0659207 0.806264 -0.587871 + 0.4634 6.355 -0.353554 0.0675952 0.809977 -0.582553 + -0.069687 6.1512 -0.605952 -0.0184895 0.648016 -0.761403 + -0.069687 6.23174 -0.539659 -0.0275494 0.691679 -0.721679 + -0.067641 6.31215 -0.451527 -0.0340309 0.776502 -0.629195 + 0.067642 6.39267 -0.339994 0.0191721 0.815805 -0.578009 + -0.207623 6.21858 -0.540869 -0.0528744 0.696325 -0.715776 + -0.205577 6.29899 -0.452748 -0.0572296 0.767845 -0.638074 + -0.067641 6.39267 -0.339994 -0.0230563 0.813379 -0.581277 + 0.072926 6.49919 -0.186687 0.0189729 0.826812 -0.562158 + -0.354189 6.14059 -0.599582 -0.0381478 0.660755 -0.749631 + -0.347788 6.21403 -0.536376 -0.04948 0.702982 -0.709484 + -0.33857 6.28741 -0.454885 -0.0583796 0.767573 -0.638297 + -0.199351 6.38522 -0.341687 -0.0496631 0.80558 -0.590403 + -0.498107 6.14672 -0.588201 -0.042035 0.675381 -0.73627 + -0.48621 6.20677 -0.532 -0.0520818 0.716616 -0.695521 + -0.476992 6.28015 -0.450509 -0.056634 0.770558 -0.634849 + -0.332344 6.37373 -0.343783 -0.0651617 0.806701 -0.587356 + -0.639652 6.01141 -0.702441 -0.046504 0.670334 -0.740601 + -0.641313 6.14602 -0.579793 -0.051567 0.680083 -0.731319 + -0.629416 6.20606 -0.523584 -0.0455203 0.719419 -0.693083 + -0.613771 6.2732 -0.447271 -0.0449501 0.774256 -0.631274 + -0.463398 6.35501 -0.353563 -0.0688198 0.810648 -0.581475 + -0.78446 6.01127 -0.691392 -0.0951146 0.67047 -0.735815 + -0.78612 6.14596 -0.568686 -0.0869705 0.671351 -0.736019 + -0.768285 6.20634 -0.515467 -0.0760132 0.715995 -0.693954 + -0.75264 6.27348 -0.439153 -0.0660012 0.77985 -0.622477 + -0.600177 6.34797 -0.350374 -0.0520031 0.820044 -0.569933 + -0.91205 5.80252 -0.858229 -0.173436 0.667096 -0.724502 + -0.927716 6.00332 -0.672828 -0.177348 0.657377 -0.732395 + -0.927557 6.13356 -0.558203 -0.175299 0.666431 -0.724665 + -0.909722 6.19394 -0.504984 -0.12974 0.699057 -0.703197 + -0.910415 5.64417 -1.00696 -0.192555 0.687661 -0.700032 + -1.05597 5.78718 -0.829051 -0.264599 0.648568 -0.713686 + -1.06648 5.96789 -0.661263 -0.265122 0.642501 -0.718959 + -1.06632 6.09813 -0.546639 -0.230281 0.603317 -0.763531 + -1.06324 5.49902 -1.09254 -0.318562 0.59338 -0.739201 + -1.05434 5.62891 -0.977733 -0.283958 0.650584 -0.704349 + -1.19187 5.58415 -0.948404 -0.379817 0.614733 -0.691262 + -1.1931 5.74158 -0.811476 -0.353448 0.619006 -0.70136 + -1.2036 5.92221 -0.643737 -0.327815 0.615515 -0.716714 + -1.019 5.38393 -1.18621 -0.31372 0.421492 -0.850837 + -1.17762 5.33694 -1.14963 -0.351813 0.42896 -0.831998 + -1.20078 5.45425 -1.0632 -0.406586 0.560646 -0.721363 + -1.06543 5.24125 -1.21968 -0.290697 0.328609 -0.898617 + -1.33486 5.16618 -1.16585 -0.353213 0.408556 -0.841619 + -1.30942 5.2666 -1.11779 -0.431476 0.477366 -0.765474 + -1.33258 5.38391 -1.03137 -0.454259 0.526779 -0.718438 + -1.31379 5.08385 -1.20386 -0.276849 0.362378 -0.889964 + -1.55248 4.99254 -1.1583 -0.431303 0.422065 -0.797395 + -1.53142 5.08193 -1.11033 -0.467322 0.488004 -0.737199 + -1.50598 5.18236 -1.06228 -0.480373 0.496365 -0.723092 + -1.28999 5.02564 -1.23883 -0.217344 0.322205 -0.921382 + -1.52868 4.93441 -1.19322 -0.356476 0.416323 -0.836421 + -1.76193 4.87261 -1.09058 -0.51979 0.552509 -0.651577 + -1.74087 4.96192 -1.04267 -0.544982 0.510329 -0.665251 + -1.07212 4.99461 -1.28169 -0.156104 0.0606465 -0.985877 + -1.29489 4.96095 -1.25018 -0.151152 0.128605 -0.980109 + -1.49436 4.89367 -1.22724 -0.235819 0.258652 -0.936743 + -1.73302 4.82137 -1.17302 -0.448347 0.531427 -0.718728 + -1.08456 4.94607 -1.27621 -0.0841637 -0.491281 -0.866925 + -1.27583 4.91587 -1.2563 -0.0111876 -0.419872 -0.907514 + -1.4753 4.84858 -1.23336 0.102244 -0.476335 -0.873299 + -1.6987 4.78061 -1.20703 -0.266966 0.219296 -0.938423 + -1.07847 4.90973 -1.22087 -0.035921 -0.896767 -0.441043 + -1.26974 4.87952 -1.20094 0.160129 -0.92125 -0.354482 + -1.46561 4.82287 -1.16843 0.321027 -0.910417 -0.260928 + -1.66633 4.75043 -1.21235 0.169585 -0.465591 -0.8686 + -1.08079 4.87115 -1.11625 -0.115012 -0.866484 -0.485775 + -1.24336 4.86956 -1.07869 0.0752373 -0.903988 -0.420886 + -1.43923 4.81291 -1.04616 0.225906 -0.878774 -0.420384 + -1.68114 4.71987 -1.00823 0.432985 -0.831728 -0.347496 + -1.65664 4.72463 -1.14746 0.500267 -0.849623 -0.166955 + -0.928875 4.63847 -0.852437 -0.252961 -0.76193 -0.596215 + -1.02178 4.6337 -0.842966 -0.0532569 -0.737417 -0.673335 + -1.18436 4.63201 -0.805442 -0.0176271 -0.674623 -0.737952 + -1.34289 4.64202 -0.837188 0.109292 -0.694404 -0.711237 + -0.867609 4.24338 -0.363923 -0.527234 -0.622152 -0.578749 + -0.960515 4.23869 -0.354402 0.480363 -0.588512 -0.650312 + -1.03739 4.11413 -0.419655 0.520031 -0.441357 -0.731281 + -1.19592 4.12414 -0.451392 -0.471933 -0.63234 -0.61435 + -0.8402 3.9418 -0.182369 -0.774752 0.224842 -0.590936 + -0.880818 4.00672 -0.136817 -0.0899295 -0.220847 -0.971153 + -0.95769 3.88224 -0.202011 0.572473 0.197903 -0.795682 + -0.966468 3.81265 -0.233661 0.193319 -0.0127319 -0.981053 + -1.12487 3.77236 -0.232082 0.474255 0.543726 -0.692419 + -1.05757 3.82089 -0.220541 -0.354538 -0.0250528 -0.934706 + -1.2339 4.17485 -0.409218 -0.329913 -0.650624 -0.683992 + -1.5848 4.54907 -0.799193 0.281534 -0.620336 -0.732067 + -1.83478 4.60951 -0.994476 0.677948 -0.639851 -0.361908 + -1.34224 3.96063 -0.422972 0.718154 0.155635 -0.678257 + -1.09555 3.87159 -0.178358 -0.221569 -0.200593 -0.95429 + -1.31292 4.05995 -0.369198 0.585482 -0.196147 -0.786598 + -1.66383 4.43409 -0.759232 0.500828 -0.395888 -0.769704 + -1.74769 4.29554 -0.775666 0.660362 -0.0850492 -0.746115 + -1.98545 4.35792 -1.0053 0.807632 -0.302662 -0.50609 + -1.91865 4.47089 -1.01097 0.784101 -0.45186 -0.42545 + -1.92485 4.48456 -1.11024 0.792089 -0.559264 -0.24458 + -1.81028 4.61427 -1.13372 0.638432 -0.748334 -0.180001 + -2.01006 4.25745 -1.02949 0.748011 -0.0552651 -0.661381 + -2.03362 4.27968 -1.06779 0.670132 -0.217338 -0.709709 + -1.99166 4.3715 -1.10463 0.608921 -0.535458 -0.585236 + -2.0653 4.30684 -1.08844 -0.160825 -0.214082 -0.963485 + -2.02333 4.39866 -1.12527 -0.225768 -0.199495 -0.953536 + -1.94069 4.50266 -1.1614 0.113139 -0.296302 -0.948369 + -1.82612 4.63246 -1.18482 0.181481 -0.432468 -0.883196 + -2.1201 4.34508 -1.06087 -0.677014 0.0410826 -0.734823 + -2.04885 4.45612 -1.10179 -0.623093 0.177164 -0.761819 + -1.96621 4.56012 -1.13792 -0.54574 0.227644 -0.80644 + -1.8585 4.66265 -1.17951 -0.402514 0.16736 -0.899985 + -2.15183 4.38913 -1.01236 -0.830673 0.204592 -0.517807 + -2.08058 4.50017 -1.05329 -0.725911 0.294137 -0.621721 + -1.99519 4.61324 -1.08894 -0.664518 0.37643 -0.645536 + -1.88748 4.71569 -1.13058 -0.591656 0.471745 -0.653759 + -2.17726 4.38166 -0.952832 -0.959257 0.218638 -0.178948 + -2.11876 4.55803 -0.967101 -0.858982 0.350757 -0.372987 + -2.03337 4.6711 -1.00275 -0.724799 0.464615 -0.508723 + -1.91638 4.76694 -1.04815 -0.620175 0.533531 -0.57509 + -2.15185 4.49786 -0.87628 -0.93645 0.308829 -0.166392 + -2.09336 4.67413 -0.890592 -0.892186 0.442235 0.091826 + -1.9959 4.7827 -0.94005 -0.723627 0.539447 -0.430537 + -1.87892 4.87863 -0.985402 -0.620665 0.541783 -0.566786 + -1.63409 5.12079 -1.00802 -0.551177 0.5135 -0.657664 + -2.24854 4.17171 -0.91737 -0.934021 0.246431 -0.258603 + -2.19335 4.39952 -0.832166 -0.968594 0.247948 -0.018657 + -2.08545 4.75607 -0.780523 -0.853189 0.384398 -0.352571 + -1.98499 4.84801 -0.845362 -0.766497 0.502366 -0.40014 + -1.88754 4.95658 -0.89482 -0.705758 0.534175 -0.465363 + -2.24864 4.13654 -0.878263 -0.932806 0.0776146 0.351922 + -2.19346 4.36427 -0.7931 -0.967214 0.137153 0.213744 + -2.12695 4.65774 -0.736409 -0.962108 0.243155 -0.123387 + -2.03206 4.93082 -0.7006 -0.788516 0.419337 -0.449888 + -2.28372 3.89467 -0.903336 -0.582355 -0.169603 0.795045 + -2.22706 4.10422 -0.851082 -0.694429 -0.0964978 0.713061 + -2.19937 4.274 -0.786762 -0.831122 -0.0775592 0.550654 + -2.1484 4.52392 -0.679827 -0.971796 0.0667655 0.226176 + -2.19517 4.08157 -0.830255 -0.56557 -0.223907 0.793723 + -2.16748 4.25127 -0.765985 -0.722121 -0.198765 0.662596 + -2.15431 4.43366 -0.67349 -0.871363 -0.0148259 0.490415 + -2.11382 4.41735 -0.623251 -0.951791 -0.149522 0.267838 + -2.13064 4.7121 -0.564763 -0.976898 0.085832 -0.19571 + -2.13402 4.10459 -0.790129 -0.498001 -0.337411 0.798842 + -2.12698 4.23505 -0.715696 -0.743746 -0.32304 0.585223 + -2.08281 4.28208 -0.563746 -0.936643 -0.345893 0.0553052 + -2.13134 4.47389 -0.427379 -0.965133 -0.160885 -0.206481 + -2.16234 4.60916 -0.486875 -0.982702 -0.0955547 -0.158638 + -2.14463 4.35754 -0.352645 -0.933539 -0.21049 -0.29017 + -2.25756 4.75509 -0.239223 -0.922096 -0.0294762 -0.385837 + -2.2028 4.84339 -0.336761 -0.92642 0.0518802 -0.372901 + -2.17109 4.94632 -0.414649 -0.899402 0.188308 -0.394481 + -2.13786 4.23703 -0.268518 -0.871772 -0.208045 -0.443545 + -2.27085 4.63874 -0.164498 -0.892174 -0.0767991 -0.445116 + -2.30296 4.96977 -0.093867 -0.901205 0.134963 -0.411844 + -2.2482 5.05807 -0.191405 -0.883957 0.209873 -0.417819 + -2.17387 5.1368 -0.282967 -0.840107 0.298649 -0.452801 + -2.31137 4.52042 -0.093169 -0.845276 -0.0774828 -0.528682 + -2.40095 4.75493 0.063448 -0.890638 0.0510447 -0.451839 + -2.36043 4.87316 -0.00793 -0.897243 0.0883171 -0.432614 + -2.32204 5.14603 0.030249 -0.881622 0.2533 -0.398223 + -2.24948 5.2288 -0.055713 -0.856936 0.306751 -0.414204 + -2.44768 4.64596 0.139603 -0.897404 0.0206002 -0.440729 + -2.43896 4.95463 0.199769 -0.906639 0.163528 -0.388926 + -2.37951 5.0495 0.116236 -0.897482 0.199988 -0.393103 + -2.31038 5.30304 0.127906 -0.862403 0.329154 -0.384602 + -2.43881 5.12605 0.296857 -0.893345 0.245788 -0.376195 + -2.37936 5.22093 0.213316 -0.885344 0.291531 -0.362181 + -2.2768 5.44834 0.191635 -0.848176 0.401769 -0.345224 + -2.20301 5.52251 0.10737 -0.83241 0.421618 -0.359628 + -2.23783 5.38581 0.041944 -0.844093 0.360321 -0.397084 + -2.50059 5.03891 0.382189 -0.895872 0.22087 -0.385524 + -2.41505 5.28978 0.362463 -0.874239 0.343795 -0.342798 + -2.34577 5.36623 0.277045 -0.861993 0.378289 -0.33744 + -2.23743 5.58643 0.280245 -0.83144 0.467443 -0.300339 + -2.47683 5.20264 0.447795 -0.89023 0.318772 -0.325383 + -2.37552 5.44264 0.454495 -0.857053 0.435546 -0.275244 + -2.30624 5.5191 0.369077 -0.841963 0.452132 -0.294407 + -2.5383 5.125 0.537667 -0.898986 0.300788 -0.318358 + -2.49893 5.29793 0.637158 -0.882619 0.401049 -0.245242 + -2.43747 5.37556 0.547294 -0.871118 0.417913 -0.257881 + -2.3209 5.60374 0.579269 -0.829943 0.516537 -0.210675 + -2.25917 5.66193 0.483885 -0.819998 0.52753 -0.222068 + -2.55605 5.22749 0.730347 -0.895686 0.383347 -0.22537 + -2.4383 5.48096 0.772532 -0.857551 0.481392 -0.181298 + -2.38285 5.53666 0.67206 -0.84802 0.490176 -0.201469 + -2.3171 5.68751 0.806972 -0.804549 0.570822 -0.163898 + -2.24643 5.76781 0.768289 -0.786241 0.59681 -0.160135 + -2.49541 5.41053 0.865721 -0.861749 0.475012 -0.178189 + -2.39597 5.61798 1.0342 -0.827314 0.551849 -0.104947 + -2.37255 5.63181 0.907443 -0.837499 0.532455 -0.122826 + -2.23624 5.85057 1.06814 -0.775175 0.626179 -0.0836794 + -2.16557 5.93087 1.02946 -0.734695 0.674446 -0.073111 + -2.55198 5.3488 0.961835 -0.877918 0.450501 -0.1622 + -2.45255 5.55625 1.13032 -0.830441 0.549581 -0.0912589 + -2.32895 5.74736 1.34111 -0.797503 0.603314 0.00140142 + -2.25966 5.83682 1.19496 -0.775072 0.630476 -0.0419944 + -2.38425 5.67106 1.43747 -0.790769 0.612015 -0.0110311 + -2.19092 5.90505 1.48339 -0.732698 0.676184 0.0769977 + -2.12164 5.99442 1.33719 -0.699589 0.714367 0.0159671 + -2.02499 6.07968 1.26831 -0.65105 0.759028 -0.00317655 + -2.22627 5.84969 1.68367 -0.717874 0.694061 0.0541761 + -2.18728 5.894 1.60172 -0.71018 0.701462 0.0599579 + -1.92557 6.13361 1.57631 -0.622916 0.775782 0.10069 + -1.82892 6.21878 1.50738 -0.580117 0.808073 0.10238 + -2.30466 5.76602 1.73179 -0.76823 0.633415 0.0927775 + -1.98527 6.0613 1.81496 -0.628439 0.761048 0.160846 + -1.92192 6.12256 1.69465 -0.601566 0.793809 0.0893619 + -1.58307 6.34482 1.72328 -0.495569 0.857439 0.1386 + -2.06366 5.97762 1.86309 -0.680883 0.711328 0.174388 + -1.72021 6.22202 1.95958 -0.531449 0.825284 0.190967 + -1.65687 6.28328 1.83927 -0.509354 0.848531 0.143367 + -2.28482 5.73189 1.88371 -0.745343 0.646386 0.163246 + -2.03019 5.98832 1.94595 -0.647969 0.733979 0.203495 + -1.76867 6.15769 2.07459 -0.559481 0.786474 0.26161 + -1.42144 6.34167 2.14354 -0.438062 0.866121 0.2407 + -2.06972 5.91293 2.05774 -0.665501 0.707765 0.237017 + -1.8082 6.0823 2.18638 -0.569094 0.765983 0.299002 + -1.50251 6.21269 2.36954 -0.489143 0.801031 0.345092 + -1.4699 6.27735 2.25855 -0.475747 0.826127 0.301957 + -2.104 5.84604 2.1598 -0.670562 0.698682 0.24938 + -1.87858 6.009 2.24893 -0.590643 0.761647 0.266524 + -2.11294 5.7944 2.27003 -0.666562 0.689565 0.283187 + -1.88752 5.95737 2.35916 -0.585268 0.739929 0.331613 + -1.57288 6.13948 2.43215 -0.520451 0.781261 0.34462 + -2.1445 5.69545 2.42503 -0.660573 0.689119 0.297924 + -1.84999 5.92615 2.48143 -0.564882 0.743964 0.356968 + -1.53535 6.10826 2.55442 -0.489147 0.785305 0.379514 + -1.23443 6.24429 2.6212 -0.395735 0.819675 0.414158 + -1.25699 6.29017 2.51054 -0.416464 0.818024 0.396729 + -2.18262 5.59851 2.57112 -0.670684 0.672163 0.313656 + -1.88811 5.8293 2.62758 -0.573635 0.734894 0.361765 + -1.53756 6.03442 2.69831 -0.487196 0.774542 0.403391 + -1.23664 6.17045 2.76509 -0.391 0.814482 0.428648 + -2.17244 5.50219 2.78196 -0.661462 0.658477 0.358993 + -1.8998 5.71355 2.82708 -0.565085 0.722115 0.399034 + -1.54926 5.91866 2.89781 -0.48609 0.763833 0.424589 + -1.25477 6.06039 2.95013 -0.39671 0.800892 0.448546 + -0.979822 6.24763 2.81382 -0.315632 0.83308 0.454263 + -2.158 5.36113 3.04749 -0.647779 0.655795 0.387705 + -1.88536 5.57239 3.09256 -0.56264 0.714356 0.416092 + -1.57754 5.7544 3.15491 -0.487216 0.755791 0.437492 + -1.28304 5.89613 3.20723 -0.407056 0.786678 0.464158 + -2.38671 5.03469 3.1669 -0.701412 0.601414 0.382522 + -2.14678 5.24937 3.24905 -0.643943 0.63825 0.42187 + -1.88054 5.45252 3.30259 -0.56554 0.700051 0.435996 + -1.57272 5.63453 3.36494 -0.484241 0.75215 0.446968 + -1.28068 5.78732 3.39111 -0.396231 0.786872 0.473111 + -2.10228 5.16854 3.42585 -0.629775 0.641628 0.437833 + -1.83605 5.37169 3.47939 -0.553281 0.684531 0.474655 + -1.55979 5.56028 3.50194 -0.48047 0.73433 0.479487 + -1.26774 5.71298 3.52805 -0.377546 0.780172 0.498788 + -2.32378 4.85822 3.53916 -0.677951 0.600146 0.424509 + -2.06904 5.08721 3.59373 -0.612011 0.641167 0.462977 + -1.7827 5.29043 3.64674 -0.538486 0.68082 0.496504 + -1.50643 5.47902 3.66929 -0.45509 0.713418 0.532849 + -1.24504 5.61941 3.67913 -0.370039 0.752409 0.544933 + -2.30518 4.77869 3.6845 -0.666593 0.588671 0.457296 + -2.04024 5.00608 3.73765 -0.592851 0.634558 0.495846 + -1.7539 5.20939 3.79071 -0.517473 0.668737 0.533866 + -1.43854 5.35952 3.86526 -0.430359 0.696739 0.573887 + -1.17714 5.49992 3.8751 -0.369731 0.731528 0.572857 + -2.48365 4.46478 3.7772 -0.721899 0.478827 0.499586 + -2.26262 4.69396 3.83745 -0.647759 0.559229 0.517369 + -1.99768 4.92135 3.8906 -0.570842 0.618521 0.539973 + -1.71986 5.09801 3.95142 -0.496235 0.654934 0.569923 + -1.4045 5.24815 4.02597 -0.430143 0.683824 0.589374 + -2.41989 4.38871 3.93257 -0.703169 0.451393 0.549361 + -2.19885 4.61797 3.99287 -0.627162 0.539792 0.561509 + -1.94895 4.80519 4.0614 -0.555678 0.590378 0.585386 + -1.67113 4.98185 4.12221 -0.477449 0.632657 0.609744 + -1.36275 5.14531 4.16988 -0.418264 0.65903 0.625087 + -2.62707 4.1322 3.83826 -0.788709 0.331007 0.518047 + -2.57458 4.05159 3.96267 -0.773564 0.310175 0.552621 + -2.3674 4.3081 4.05697 -0.689013 0.416436 0.593163 + -2.14437 4.5084 4.14646 -0.613684 0.496887 0.613593 + -1.89447 4.69571 4.21503 -0.532072 0.557875 0.636926 + -2.77752 3.86569 3.72906 -0.872701 0.18169 0.453191 + -2.73728 3.79021 3.8274 -0.861302 0.154815 0.483932 + -2.53309 3.97831 4.05781 -0.761107 0.296734 0.576771 + -2.29879 4.2055 4.1993 -0.661744 0.378805 0.646994 + -2.07576 4.40579 4.28877 -0.598627 0.463738 0.653141 + -2.82858 3.53202 3.684 -0.914763 0.00252382 0.403983 + -2.78421 3.44796 3.7778 -0.893841 -0.0361337 0.446926 + -2.69578 3.71692 3.92254 -0.84096 0.116687 0.528366 + -2.64521 3.64027 4.0067 -0.825531 0.0542281 0.561746 + -2.53323 3.86313 4.1181 -0.786901 0.226733 0.573915 + -2.81782 3.17507 3.64045 -0.912748 -0.166902 0.372873 + -2.76579 3.06917 3.70128 -0.872649 -0.217023 0.437475 + -2.73363 3.37131 3.86196 -0.839471 -0.0999628 0.534131 + -2.78998 2.87553 3.49106 -0.903807 -0.252249 0.345691 + -2.73795 2.76963 3.5519 -0.907166 -0.258982 0.331629 + -2.68565 2.64337 3.59557 -0.885289 -0.272216 0.377043 + -2.71231 2.98091 3.75194 -0.841354 -0.23272 0.487816 + -2.68015 3.28305 3.91262 -0.813042 -0.150788 0.56234 + -2.7715 2.56331 3.31005 -0.890009 -0.276129 0.362818 + -2.71027 2.44319 3.36151 -0.895795 -0.28226 0.343338 + -2.65797 2.31693 3.40519 -0.890658 -0.303943 0.338153 + -2.59067 2.20433 3.46002 -0.871856 -0.328038 0.363673 + -2.62818 2.5354 3.64319 -0.868149 -0.287172 0.404783 + -2.69228 2.10032 3.12978 -0.866146 -0.332279 0.373338 + -2.61717 1.99095 3.18921 -0.858295 -0.354371 0.371147 + -2.54987 1.87835 3.24403 -0.848873 -0.373395 0.374153 + -2.58932 1.72227 2.99017 -0.846744 -0.385045 0.367103 + -2.5124 1.62377 3.06318 -0.838015 -0.396239 0.375133 + -2.46886 1.78873 3.32206 -0.832631 -0.399723 0.383337 + -2.53005 2.083 3.50337 -0.864435 -0.352253 0.358707 + -2.56756 2.41407 3.68654 -0.840207 -0.302682 0.449929 + -2.48791 1.4137 2.88484 -0.840462 -0.45627 0.292304 + -2.40648 1.33423 2.98427 -0.815559 -0.466775 0.34203 + -2.43139 1.53425 3.14124 -0.8157 -0.4135 0.404538 + -2.34569 1.46559 3.23756 -0.80594 -0.439092 0.397063 + -2.39338 1.69648 3.39225 -0.830078 -0.413424 0.374234 + -2.31754 1.1515 2.90997 -0.771437 -0.600781 0.209635 + -2.2371 1.09047 2.99829 -0.73199 -0.598334 0.325862 + -2.32078 1.26567 3.08063 -0.761775 -0.497766 0.414642 + -2.093 0.932672 2.9956 -0.727344 -0.645048 0.234272 + -2.01009 0.871012 3.0782 -0.706425 -0.601006 0.373839 + -2.1368 1.04701 3.10196 -0.692456 -0.55539 0.460485 + -2.22049 1.22221 3.1843 -0.720047 -0.535747 0.441031 + -1.86134 0.698281 3.07398 -0.655973 -0.645351 0.391435 + -1.92477 0.837049 3.16022 -0.611667 -0.544957 0.573485 + -2.05149 1.01305 3.18398 -0.659113 -0.566861 0.494205 + -2.12533 1.1769 3.28579 -0.671819 -0.578709 0.462337 + -2.26637 1.40325 3.33934 -0.772778 -0.487055 0.406929 + -1.7962 0.650262 3.09175 -0.63669 -0.606658 0.476016 + -1.85963 0.789029 3.178 -0.612233 -0.581127 0.536155 + -1.94244 0.986556 3.28547 -0.629705 -0.577808 0.519239 + -2.01628 1.1504 3.38728 -0.646243 -0.612695 0.454944 + -2.17121 1.35793 3.44083 -0.723357 -0.534965 0.43654 + -1.73412 0.564605 3.06711 -0.515192 -0.640653 0.569333 + -1.73363 0.618536 3.1267 -0.458439 -0.6538 0.601979 + -1.77198 0.749834 3.24148 -0.46805 -0.60495 0.644177 + -1.85479 0.947356 3.34897 -0.666573 -0.594576 0.449621 + -1.66348 0.541346 3.0962 -0.560467 -0.593837 0.577265 + -1.65978 0.59553 3.13895 -0.551915 -0.567521 0.610991 + -1.69813 0.726735 3.25369 -0.538474 -0.657094 0.527517 + -1.66356 0.494942 3.03757 -0.522959 -0.698496 0.488485 + -1.5765 0.47587 3.1152 -0.582342 -0.680957 0.444043 + -1.57356 0.529691 3.20318 -0.690582 -0.549312 0.470481 + -1.56985 0.583876 3.24593 -0.796085 -0.439406 0.416138 + -1.57678 0.433581 3.05125 -0.527025 -0.741342 0.415519 + -1.48361 0.423983 3.15228 -0.54046 -0.751175 0.378997 + -1.46315 0.457696 3.25048 -0.580016 -0.712209 0.395399 + -1.46021 0.511524 3.33845 -0.622179 -0.674229 0.39788 + -1.49536 0.600462 3.45061 -0.665155 -0.655132 0.358289 + -1.58563 0.400431 2.97007 -0.453371 -0.809549 0.372942 + -1.49245 0.390835 3.07109 -0.424568 -0.845336 0.324267 + -1.39311 0.423956 3.28332 -0.466359 -0.811614 0.35184 + -1.37265 0.457671 3.38152 -0.587014 -0.716386 0.377102 + -1.37396 0.50998 3.47732 -0.608254 -0.697137 0.379509 + -1.58803 0.369629 2.90282 -0.382283 -0.861703 0.333658 + -1.50742 0.365528 2.97092 -0.357958 -0.88623 0.294047 + -1.41527 0.367643 3.09466 -0.407665 -0.864922 0.29278 + -1.40031 0.392948 3.19483 -0.34258 -0.889776 0.301559 + -1.59505 0.345333 2.8163 -0.297495 -0.915784 0.269881 + -1.51444 0.341323 2.88444 -0.288884 -0.92649 0.241167 + -1.42643 0.338359 2.99638 -0.361807 -0.897124 0.253505 + -1.31135 0.370899 3.26322 -0.455682 -0.823591 0.337717 + -1.31732 0.41586 3.35094 -0.41413 -0.839218 0.352432 + -1.5995 0.32692 2.74539 -0.241215 -0.940917 0.237678 + -1.52447 0.322081 2.78258 -0.254475 -0.941457 0.221137 + -1.43646 0.319034 2.89445 -0.400886 -0.886323 0.231778 + -1.3225 0.341615 3.16494 -0.433311 -0.844193 0.315563 + -1.60492 0.308399 2.65827 -0.240552 -0.949548 0.201229 + -1.5299 0.303479 2.69539 -0.258209 -0.937699 0.232481 + -1.45863 0.292208 2.75412 -0.398208 -0.886978 0.233882 + -1.43366 0.302875 2.84704 -0.498565 -0.835232 0.231994 + -1.3337 0.312427 3.07849 -0.500614 -0.809059 0.30791 + -1.6041 0.296972 2.58606 -0.26783 -0.951418 0.15189 + -1.53775 0.278788 2.59336 -0.276041 -0.943865 0.181437 + -1.46648 0.267522 2.65207 -0.344302 -0.91691 0.201824 + -1.38725 0.279569 2.84861 -0.413782 -0.884556 0.215276 + -1.36228 0.290151 2.94148 -0.369347 -0.907823 0.198597 + -1.61688 0.289009 2.51586 -0.28857 -0.952577 0.096562 + -1.55053 0.27074 2.5231 -0.251109 -0.961151 0.114601 + -1.6108 0.282559 2.44383 -0.307914 -0.949251 0.064123 + -1.53395 0.261698 2.47116 -0.32043 -0.939161 0.123696 + -1.459 0.23882 2.50859 -0.318432 -0.933297 0.166009 + -1.44907 0.249449 2.58998 -0.316583 -0.935513 0.156813 + -1.38554 0.257779 2.75535 -0.382951 -0.903815 0.190962 + -1.35813 0.192676 2.42711 -0.366869 -0.91929 0.142524 + -1.36248 0.214593 2.51975 -0.360373 -0.915035 0.181227 + -1.35254 0.225228 2.60113 -0.355305 -0.92384 0.142402 + -1.36812 0.239711 2.69324 -0.353859 -0.926213 0.13005 + -1.35254 0.178855 2.33105 -0.375137 -0.915107 0.147824 + -1.22502 0.1292 2.42025 -0.503715 -0.855159 0.122368 + -1.24753 0.147325 2.49866 -0.491099 -0.863072 0.118023 + -1.25187 0.169242 2.5913 -0.529094 -0.8298 0.177456 + -1.26171 0.195051 2.6764 -0.478505 -0.865507 0.148093 + -1.22639 0.11164 2.32647 -0.382186 -0.920909 0.0765589 + -1.09364 0.061061 2.56068 -0.335105 -0.942169 -0.00473835 + -1.11615 0.079097 2.63903 -0.456969 -0.87659 0.150894 + -1.13842 0.10992 2.71005 -0.500592 -0.841312 0.203964 + -1.14825 0.135812 2.7952 -0.542457 -0.7889 0.28875 + -0.896145 0.022032 2.55048 -0.214804 -0.963145 -0.161897 + -0.952262 0.022123 2.61172 -0.203659 -0.978692 -0.0261792 + -0.983929 0.03359 2.68686 -0.249332 -0.949588 0.190041 + -1.00619 0.064412 2.75787 -0.283769 -0.918875 0.274125 + -0.803247 0.008962 2.48331 -0.158851 -0.978311 -0.132942 + -0.814194 0.000593 2.56841 -0.12055 -0.992694 -0.00509737 + -0.845861 0.012058 2.64355 -0.107171 -0.984322 0.14009 + -0.866441 0.031135 2.72791 -0.112306 -0.960205 0.255722 + -0.657184 0.01911 2.37374 -0.0147508 -0.976254 -0.216126 + -0.675869 -0.000111 2.45303 -0.0695588 -0.977366 -0.199795 + -0.686816 -0.008481 2.53812 -0.0908094 -0.994179 -0.0579866 + -0.703071 -0.008483 2.62033 -0.107308 -0.991085 0.078968 + -0.499512 0.022608 2.37428 0.0102038 -0.961159 -0.275806 + -0.518198 0.003392 2.45356 -0.0204655 -0.96135 -0.274569 + -0.539283 -0.019714 2.52918 -0.0416273 -0.990242 -0.132996 + -0.555538 -0.019623 2.61142 -0.0525226 -0.996237 0.0689479 + -0.331538 0.051209 2.27994 -0.100796 -0.937161 -0.334021 + -0.352717 0.023041 2.35593 -0.103715 -0.934538 -0.340415 + -0.367796 -0.000722 2.43029 -0.0973485 -0.946152 -0.308738 + -0.388881 -0.023827 2.5059 -0.056209 -0.982144 -0.179537 + -0.198736 0.042713 2.24145 -0.078837 -0.938607 -0.33586 + -0.21426 0.01562 2.31178 -0.0900101 -0.932855 -0.348827 + -0.229339 -0.00815 2.38615 -0.0575547 -0.96312 -0.262843 + -0.23537 -0.024098 2.46137 -0.00773696 -0.989474 -0.144503 + -0.091123 0.070783 2.16104 0.184411 -0.934218 -0.305335 + -0.102384 0.045062 2.23058 0.130922 -0.939753 -0.31579 + -0.117908 0.017966 2.30092 0.16783 -0.944094 -0.283758 + -0.127574 -0.000582 2.37404 0.191788 -0.961106 -0.198729 + -0.037665 0.080134 2.17804 0.337094 -0.864903 -0.371902 + -0.048927 0.054415 2.24759 0.230597 -0.932495 -0.277991 + -0.059922 0.03462 2.32127 0.240626 -0.944363 -0.224226 + -0.069588 0.016073 2.3944 0.216533 -0.959851 -0.178325 + -0.003058 0.11597 2.14477 0.163545 -0.956035 -0.243415 + -0.010834 0.082213 2.20244 0.3746 -0.851261 -0.367462 + -0.014994 0.056002 2.26444 0.256505 -0.919409 -0.298146 + -0.025989 0.036207 2.33812 -0.15586 -0.944153 -0.290313 + 0.003058 0.11597 2.14477 -0.158852 -0.935086 -0.31683 + -0.003058 0.082127 2.21059 0.187122 -0.896754 -0.401021 + -0.007218 0.056001 2.27264 0.106277 -0.93326 -0.343121 + 0.029889 0.113896 2.12036 -0.433885 -0.852333 -0.292014 + 0.010834 0.082213 2.20244 -0.374604 -0.851261 -0.367459 + 0.003058 0.082127 2.21059 -0.18711 -0.89676 -0.401013 + 0.007227 0.056001 2.27264 -0.106401 -0.933287 -0.343009 + -0.007218 0.024066 2.34035 -0.243394 -0.909678 -0.33652 + 0.079232 0.091678 2.08985 -0.289449 -0.927352 -0.237145 + 0.037665 0.080134 2.17804 -0.359894 -0.871334 -0.333545 + 0.048925 0.054415 2.24759 -0.24533 -0.92584 -0.287459 + 0.015003 0.055997 2.26445 -0.256553 -0.919418 -0.298081 + 0.072394 0.110565 2.02133 -0.329107 -0.930207 -0.162492 + 0.161487 0.095491 2.01744 -0.0685538 -0.985789 -0.153364 + 0.171288 0.084975 2.09565 -0.0115078 -0.98139 -0.191679 + 0.091123 0.070783 2.16104 -0.143059 -0.94941 -0.279562 + 0.102382 0.045057 2.23059 -0.122777 -0.936224 -0.329257 + 0.154552 0.107445 1.94174 -0.120366 -0.984145 -0.130269 + 0.291431 0.091702 2.046 -0.0565842 -0.99577 -0.0723881 + 0.301232 0.081181 2.12422 -0.0199479 -0.992998 -0.116439 + 0.315981 0.072491 2.20528 0.0470769 -0.976937 -0.208274 + 0.183179 0.063995 2.16679 0.0456908 -0.957181 -0.285862 + 0.285543 0.092543 1.96235 -0.101498 -0.992377 -0.0699049 + 0.41841 0.078475 1.97131 -0.11929 -0.989789 -0.0780191 + 0.424298 0.077633 2.05497 -0.114148 -0.99342 -0.00929113 + 0.4416 0.074308 2.13813 -0.0853809 -0.994554 -0.0597712 + 0.42024 0.092654 1.88995 -0.115153 -0.979433 -0.165681 + 0.54972 0.058582 1.96297 -0.101911 -0.991811 -0.0769779 + 0.566166 0.059859 2.04836 -0.0992237 -0.995054 0.00470803 + 0.583467 0.056539 2.13151 -0.0993196 -0.994846 -0.0204205 + 0.688824 0.049855 1.99168 0.0382392 -0.992 -0.120303 + 0.70527 0.051219 2.07712 -0.0494202 -0.998704 -0.0121398 + 0.724318 0.045762 2.15937 -0.0411527 -0.99794 -0.0492164 + 0.615817 0.051409 2.21279 -0.0742989 -0.99312 -0.0905151 + 0.456349 0.065616 2.21918 -0.0626254 -0.989205 -0.132482 + 0.848105 0.045259 2.14045 0.0543518 -0.992657 -0.108063 + 0.867153 0.039802 2.2227 0.0499618 -0.996664 -0.0645339 + 0.867964 0.035107 2.30703 0.0568548 -0.996004 -0.0688691 + 0.756667 0.040633 2.24066 -0.0369891 -0.997551 -0.0593598 + 1.0238 0.072501 2.07606 0.103605 -0.982744 -0.153235 + 1.02656 0.061384 2.16131 0.136539 -0.986719 -0.0879906 + 1.02737 0.056695 2.24564 0.163765 -0.9859 -0.0343876 + 1.02727 0.055147 2.33272 0.203149 -0.979126 -0.00658434 + 0.879902 0.028684 2.38955 0.0652774 -0.997577 -0.0240407 + 1.22545 0.112729 1.96998 0.211976 -0.970946 -0.111036 + 1.22032 0.103022 2.0614 0.259999 -0.964237 -0.0514541 + 1.22022 0.101478 2.14847 0.320432 -0.946994 0.022916 + 1.34103 0.156335 1.88086 0.523063 -0.840983 -0.138394 + 1.33591 0.146628 1.97227 0.521473 -0.851636 -0.0527465 + 1.34864 0.1531 2.04626 0.589787 -0.807353 0.0182312 + 1.21712 0.106865 2.24234 0.333338 -0.942089 0.036791 + 1.39166 0.208942 1.93914 0.703827 -0.70643 -0.0747307 + 1.40439 0.215415 2.01313 0.62135 -0.776022 -0.108235 + 1.34554 0.158488 2.14013 0.474663 -0.880166 0.00172384 + 1.39962 0.228884 1.8724 0.705242 -0.690147 -0.162267 + 1.45855 0.269326 1.90935 0.522432 -0.840345 -0.144514 + 1.46891 0.259892 1.99509 0.49533 -0.852168 -0.168693 + 1.42509 0.205372 2.11312 0.511678 -0.852605 -0.106067 + 1.53293 0.308826 1.84893 0.330094 -0.938016 -0.105662 + 1.53307 0.306576 1.92143 0.391088 -0.916012 -0.0892856 + 1.54342 0.297145 2.00716 0.398761 -0.903806 -0.155318 + 1.48961 0.249849 2.09508 0.496919 -0.854654 -0.150455 + 1.43347 0.208092 2.21021 0.448849 -0.892884 -0.035966 + 1.53008 0.323491 1.76373 0.275938 -0.94598 -0.170235 + 1.64358 0.352114 1.74876 0.253682 -0.959063 -0.125876 + 1.64093 0.345863 1.82318 0.293477 -0.954442 -0.0539524 + 1.64107 0.343527 1.89563 0.281179 -0.957819 -0.0593381 + 1.64148 0.337272 1.96966 0.285172 -0.951481 -0.115591 + 1.65108 0.366223 1.68132 0.184431 -0.967957 -0.170423 + 1.77082 0.395977 1.66818 0.164362 -0.985771 -0.0352348 + 1.76818 0.389645 1.74255 0.185971 -0.978734 -0.0865751 + 1.771 0.382386 1.81952 0.209389 -0.975226 -0.071343 + 1.77141 0.376132 1.89355 0.225647 -0.971576 -0.0715816 + 1.65583 0.378339 1.60973 0.0257995 -0.945029 -0.325967 + 1.77005 0.395597 1.59024 0.0816358 -0.993585 -0.0782656 + 1.85044 0.398633 1.52138 -0.320957 -0.947091 0.00234549 + 1.85122 0.398931 1.59927 -0.151561 -0.987259 0.0484734 + 1.85945 0.403984 1.67471 -0.0536916 -0.998166 0.0279686 + 1.7748 0.407712 1.51866 -0.0619945 -0.989651 -0.129412 + 1.84236 0.406737 1.45075 -0.405369 -0.913879 -0.0223828 + 1.88427 0.36495 1.46772 -0.48708 -0.867401 0.101831 + 1.90111 0.374766 1.54132 -0.396612 -0.911067 0.112498 + 1.90934 0.379825 1.61676 -0.239748 -0.954517 0.177249 + 1.76511 0.411152 1.4421 -0.141135 -0.983091 -0.116677 + 1.83267 0.410092 1.37414 -0.29654 -0.925223 -0.236701 + 1.87618 0.373049 1.39709 -0.648237 -0.751997 -0.119544 + 1.93117 0.334755 1.36422 -0.483302 -0.875141 0.0234159 + 1.81919 0.433354 1.30084 0.00983121 -0.989932 -0.141205 + 1.87003 0.41583 1.3378 -0.51384 -0.795843 -0.320315 + 1.92036 0.393833 1.2301 -0.736894 -0.642779 -0.209338 + 1.92652 0.351051 1.2894 -0.703942 -0.676847 -0.215276 + 1.79441 0.430865 1.22576 0.27621 -0.931744 -0.235715 + 1.85655 0.439092 1.2645 -0.283468 -0.922398 -0.26235 + 1.90726 0.422203 1.15736 -0.792068 -0.57329 -0.209684 + 1.98696 0.346454 1.04956 -0.587609 -0.799014 -0.127645 + 1.9973 0.330459 1.13187 -0.484672 -0.864336 -0.134225 + 1.77727 0.448527 1.15856 0.422272 -0.8665 -0.266203 + 1.8535 0.482551 1.20203 -0.18739 -0.883592 -0.429126 + 1.90421 0.465661 1.09488 -0.756166 -0.637205 -0.148939 + 1.97386 0.374826 0.976819 -0.621314 -0.782562 -0.0395699 + 2.04494 0.342123 0.90966 -0.0715123 -0.991567 -0.108076 + 1.83637 0.500213 1.13484 0.0306055 -0.952491 -0.303024 + 1.88128 0.493808 1.02394 -0.756631 -0.648825 -0.0808453 + 1.93569 0.390765 0.900612 -0.651428 -0.757784 0.0374919 + 1.98702 0.367937 0.75095 -0.327691 -0.940371 -0.0912207 + 2.02519 0.351912 0.827106 -0.189255 -0.979172 -0.0735147 + 1.82411 0.52969 1.06819 -0.0578216 -0.907299 -0.416492 + 1.95867 0.386642 0.672753 -0.371384 -0.92159 -0.112893 + 2.05472 0.382269 0.629927 0.065554 -0.977113 -0.202366 + 2.07224 0.36711 0.717184 0.116856 -0.977633 -0.174868 + 2.092 0.357321 0.799737 0.323412 -0.944409 -0.0591275 + 2.0973 0.364427 0.890429 0.464803 -0.884773 -0.0336758 + 2.05528 0.326128 0.991967 0.128093 -0.985761 -0.108941 + 2.08196 0.418871 0.48953 0.407847 -0.873923 -0.264424 + 2.11199 0.414984 0.555663 0.452122 -0.842762 -0.292126 + 2.12951 0.399825 0.642919 0.387981 -0.897008 -0.211774 + 2.13558 0.38581 0.72019 0.454304 -0.884833 -0.10334 + 2.14615 0.466202 0.52235 0.629181 -0.65078 -0.424989 + 2.19668 0.44916 0.604469 0.572982 -0.750098 -0.330219 + 2.20274 0.43506 0.68169 0.580376 -0.805838 -0.117426 + 2.14088 0.392917 0.810883 0.573695 -0.819015 0.0093976 + 2.10104 0.361741 0.977082 0.600432 -0.799358 -0.0225296 + 2.19285 0.51342 0.515567 0.613053 -0.568272 -0.548847 + 2.24338 0.496376 0.597685 0.680611 -0.579277 -0.44856 + 2.28997 0.514976 0.652872 0.707388 -0.625578 -0.32902 + 2.23818 0.459144 0.727577 0.592941 -0.80241 -0.0675213 + 2.17632 0.417 0.85677 0.561185 -0.827685 -0.00306734 + 2.28732 0.572307 0.59577 0.741811 -0.45929 -0.488639 + 2.33391 0.590818 0.650907 0.779893 -0.436275 -0.448811 + 2.35739 0.555668 0.72119 0.782201 -0.553962 -0.285109 + 2.3056 0.499835 0.795894 0.616967 -0.78481 -0.0585181 + 2.3564 0.636682 0.641869 0.759233 -0.503021 -0.412959 + 2.36268 0.60947 0.695201 0.851453 -0.376784 -0.364775 + 2.40264 0.642146 0.761807 0.836375 -0.468896 -0.283925 + 2.39735 0.588344 0.787796 0.87413 -0.460995 -0.152907 + 2.38517 0.655248 0.686114 0.781124 -0.571727 -0.250944 + 2.41327 0.679275 0.713097 0.753124 -0.608838 -0.24924 + 2.4371 0.665621 0.797747 0.789215 -0.59173 -0.164303 + 2.41924 0.62912 0.887168 0.835089 -0.550095 0.0046775 + 2.42472 0.70048 0.684769 0.799056 -0.522985 -0.296641 + 2.44773 0.702749 0.749038 0.814101 -0.523923 -0.250488 + 2.4608 0.703778 0.825056 0.890907 -0.450235 -0.0597797 + 2.47306 0.737895 0.783762 0.903579 -0.409227 -0.126798 + 2.48104 0.747248 0.863964 0.914526 -0.403579 -0.0276885 + 2.44294 0.667191 0.914427 0.869972 -0.49307 -0.00555513 + 2.45262 0.684514 0.975823 0.861075 -0.507469 0.03202 + 2.3602 0.564961 1.02569 0.768668 -0.635541 0.0723629 + 2.39861 0.638763 1.21626 0.805622 -0.5874 0.0770369 + 2.38231 0.600476 1.11978 0.789314 -0.609268 0.0759963 + 2.25227 0.468723 1.25478 0.698229 -0.713451 0.0588555 + 2.22755 0.443112 1.16914 0.65457 -0.755285 0.0329122 + 2.33831 0.524184 0.926321 0.719688 -0.693494 0.0334011 + 2.42046 0.677095 1.30547 0.828536 -0.554345 0.0789334 + 2.30903 0.550103 1.42763 0.750774 -0.655896 0.0783519 + 2.27437 0.504326 1.34892 0.731443 -0.67743 0.0779699 + 2.16102 0.400339 1.41963 0.648016 -0.757781 0.0764341 + 2.33088 0.588434 1.51684 0.757616 -0.648607 0.0729866 + 2.22441 0.481562 1.57934 0.694352 -0.708428 0.12651 + 2.18975 0.4357 1.50058 0.67295 -0.732255 0.104599 + 2.36209 0.629195 1.59564 0.781334 -0.619837 0.072931 + 2.28026 0.562414 1.73771 0.692251 -0.701816 0.168054 + 2.24905 0.521653 1.65891 0.687522 -0.71591 0.121601 + 2.14602 0.429243 1.66256 0.598414 -0.77815 0.190744 + 2.12043 0.391848 1.58513 0.5609 -0.810215 0.170125 + 2.44107 0.741639 1.49588 0.858054 -0.509507 0.0643884 + 2.37651 0.663807 1.68489 0.810918 -0.571291 0.126642 + 2.28961 0.596452 1.82015 0.691577 -0.69423 0.199415 + 2.17756 0.505198 1.82421 0.626008 -0.737496 0.253404 + 2.17066 0.469328 1.74214 0.614265 -0.75993 0.212565 + 2.45187 0.773462 1.59656 0.874339 -0.47292 0.108989 + 2.37738 0.689146 1.775 0.824266 -0.540742 0.167879 + 2.29048 0.621709 1.9102 0.687285 -0.679971 0.255495 + 2.18691 0.539241 1.90664 0.616385 -0.74181 0.264171 + 2.10576 0.47921 1.92562 0.564836 -0.78536 0.253315 + 2.5209 0.910411 1.57756 0.90282 -0.421401 0.0856562 + 2.45124 0.806408 1.69129 0.875849 -0.46505 0.128908 + 2.37676 0.722098 1.86973 0.839628 -0.462381 0.285005 + 2.28774 0.657035 1.99442 0.726418 -0.57156 0.381623 + 2.19008 0.578291 1.98821 0.623762 -0.714053 0.317883 + 2.52867 0.942755 1.67753 0.912805 -0.396344 0.0984824 + 2.45901 0.838753 1.79127 0.858049 -0.484414 0.17057 + 2.35716 0.768187 1.95149 0.819581 -0.469273 0.32874 + 2.26814 0.703124 2.07619 0.753854 -0.559826 0.343947 + 2.18734 0.613617 2.07242 0.667351 -0.684937 0.292412 + 2.57475 1.08248 1.66552 0.950545 -0.295178 0.0966118 + 2.57155 1.11526 1.79054 0.944891 -0.30605 0.116247 + 2.52548 0.975537 1.80256 0.914342 -0.372792 0.158128 + 2.45238 0.870138 1.88291 0.830781 -0.50723 0.229174 + 2.35053 0.799572 2.04313 0.770175 -0.596041 0.227081 + 2.59824 1.09167 1.44121 0.950668 -0.246942 0.187751 + 2.60356 1.16593 1.62819 0.958696 -0.274437 0.0747358 + 2.62389 1.22028 1.49886 0.951311 -0.279535 0.129874 + 2.64445 1.30412 1.55343 0.939656 -0.326798 0.101239 + 2.62411 1.24978 1.68276 0.954808 -0.291124 0.0599066 + 2.64442 1.24894 1.44861 0.814674 -0.398533 0.421281 + 2.66485 1.33239 1.50287 0.812294 -0.468549 0.347333 + 2.68044 1.42697 1.65945 0.904838 -0.42075 0.0651016 + 2.67129 1.41559 1.73735 0.915336 -0.397523 0.0643014 + 2.61496 1.2384 1.76067 0.948755 -0.301931 0.093284 + 2.70609 1.36395 1.48141 0.791247 -0.472594 0.388049 + 2.70084 1.45524 1.60889 0.870726 -0.459734 0.174591 + 2.78395 1.59133 1.59757 0.787807 -0.605392 0.113405 + 2.67396 1.43038 1.80435 0.919037 -0.390839 0.0511513 + 2.60791 1.25902 1.86534 0.939973 -0.329719 0.0879526 + 2.74541 1.52447 1.57417 0.864816 -0.467209 0.183871 + 2.90461 1.70028 1.54007 0.866201 -0.499645 0.00711979 + 2.87939 1.69471 1.66272 0.793177 -0.58475 0.170111 + 2.75873 1.58567 1.72017 0.831363 -0.534576 0.151868 + 2.69898 1.49683 1.84245 0.910648 -0.407222 0.069928 + 2.96054 1.88031 1.66985 0.99253 -0.119298 -0.0255294 + 2.92564 1.84141 1.81123 0.891443 -0.40446 0.204307 + 2.78036 1.65231 1.87676 0.844401 -0.508476 0.168641 + 2.72062 1.56338 1.99899 0.922727 -0.380864 0.0593083 + 2.97736 2.1481 2.00502 0.959823 -0.24875 0.129861 + 2.94247 2.1092 2.14639 0.951548 -0.269409 0.148241 + 2.90194 2.0281 2.26247 0.92428 -0.348229 0.156342 + 2.82662 1.79901 2.02526 0.855891 -0.478772 0.195521 + 3.01987 2.36333 2.07983 0.987932 -0.144265 0.0563761 + 3.00149 2.35754 2.22905 0.965788 -0.230895 0.118072 + 2.97441 2.31554 2.36321 0.958536 -0.251 0.134936 + 2.93387 2.23443 2.47928 0.944679 -0.282818 0.166119 + 2.83818 1.92807 2.39191 0.920875 -0.365786 0.134867 + 3.02077 2.3673 1.93415 0.993387 0.0078276 -0.114545 + 3.02802 2.51664 2.20689 0.994751 -0.0950307 0.037931 + 3.01751 2.4999 2.34988 0.982252 -0.157549 0.101779 + 2.99042 2.45789 2.48404 0.965403 -0.206231 0.159581 + 2.9537 2.39974 2.60716 0.950701 -0.233574 0.203986 + 2.99255 2.32319 1.78795 0.987705 -0.0415422 -0.15071 + 3.02892 2.52052 2.06117 0.996525 -0.0829995 -0.00695802 + 3.05121 2.75296 2.22377 0.995407 -0.0916072 0.0277883 + 3.03966 2.71913 2.35896 0.992703 -0.102171 0.0640396 + 3.02916 2.70248 2.502 0.987232 -0.116406 0.108735 + 2.97632 2.33456 1.65087 0.977253 -0.0384652 -0.208559 + 3.03153 2.54161 1.91944 0.992019 -0.11236 -0.0572146 + 3.05381 2.77414 2.08209 0.996481 -0.0836835 -0.00470311 + 3.06812 3.01108 2.40629 0.99495 -0.0870433 0.0499732 + 3.05657 2.97725 2.54149 0.987999 -0.114326 0.103863 + 3.01529 2.55297 1.78236 0.986964 -0.113999 -0.113608 + 3.0561 2.83204 1.959 0.996103 -0.0805939 -0.0358342 + 3.0788 3.08234 2.28906 0.997438 -0.0693568 0.017529 + 3.08929 3.3725 2.4613 0.998344 -0.0408288 0.0405364 + 3.07861 3.30131 2.57859 0.995042 -0.0575339 0.0811209 + 3.05736 2.90192 1.83917 0.995429 -0.0615048 -0.07306 + 3.08109 3.14025 2.16597 0.99878 -0.0406927 -0.0279831 + 3.09356 3.44468 2.33028 0.999765 -0.0170492 -0.0134014 + 3.09161 3.65564 2.60148 0.995939 0.0306326 0.0846603 + 3.07773 3.62876 2.73184 0.992443 0.0296511 0.119072 + 3.05017 2.98744 1.73523 0.989288 -0.0302723 -0.142806 + 3.07647 3.21742 2.04991 0.997946 -0.0121458 -0.0629032 + 3.08895 3.52185 2.21422 0.998469 0.000277825 -0.0553154 + 3.09588 3.72791 2.47051 0.997352 0.0638767 0.0347733 + 3.03994 3.10766 1.65941 0.985201 -0.00453093 -0.171341 + 3.06928 3.30294 1.94597 0.995333 0.0101293 -0.0959642 + 3.0787 3.58771 2.08074 0.995121 0.0150615 -0.0975044 + 3.09204 3.80515 2.29671 0.996835 0.0784467 -0.0128625 + 3.02043 3.20382 1.55945 0.976201 0.0156533 -0.2163 + 3.0531 3.37906 1.83273 0.990054 0.0351806 -0.136217 + 3.06252 3.66391 1.96755 0.990079 0.0307592 -0.137101 + 3.0818 3.8711 2.16328 0.993671 0.095148 -0.0597099 + 2.99258 3.29926 1.45715 0.970068 0.0238696 -0.241657 + 3.03359 3.47522 1.73278 0.984992 0.0476094 -0.165905 + 3.04323 3.74227 1.86023 0.98532 0.0411864 -0.165676 + 3.06565 3.93467 2.04759 0.990221 0.104877 -0.0919981 + 2.93487 3.01725 1.2846 0.941673 -0.0671375 -0.329764 + 2.96473 3.39302 1.35695 0.962349 0.0396591 -0.26891 + 3.01117 3.57084 1.63576 0.979717 0.056274 -0.192322 + 3.0208 3.83789 1.76322 0.981362 0.047918 -0.186099 + 3.04636 4.01302 1.94028 0.986886 0.115689 -0.112569 + 2.90994 3.12542 1.19425 0.939049 -0.0476501 -0.340464 + 2.92822 3.48207 1.25391 0.95939 0.0344006 -0.279978 + 2.98331 3.6646 1.53557 0.975552 0.055204 -0.212723 + 2.99674 3.92558 1.66294 0.97917 0.047794 -0.197338 + 3.02354 4.08959 1.83506 0.984495 0.117468 -0.130275 + 2.87343 3.21447 1.09121 0.935428 -0.0378803 -0.351482 + 2.89598 3.56679 1.14817 0.952969 0.0394309 -0.300492 + 2.95881 3.75803 1.43673 0.97358 0.0470454 -0.223447 + 2.97224 4.01901 1.5641 0.978491 0.0493955 -0.200288 + 2.99948 4.17727 1.73478 0.98259 0.121483 -0.140567 + 2.84357 3.31723 0.997228 0.93432 -0.0300914 -0.355161 + 2.85327 3.64454 1.03711 0.95085 0.0234604 -0.308761 + 2.92656 3.84275 1.33099 0.969922 0.0374312 -0.240523 + 2.9469 4.10375 1.46152 0.978436 0.0449607 -0.201595 + 2.9735 4.26459 1.63814 0.98167 0.126259 -0.142764 + 2.80086 3.39498 0.886163 0.924 -0.0217662 -0.381773 + 2.81888 3.72601 0.929804 0.939823 0.0219247 -0.340958 + 2.90137 3.92205 1.22085 0.969124 0.0179812 -0.245919 + 2.92172 4.18305 1.35138 0.978142 0.0438218 -0.203266 + 2.94816 4.34934 1.53556 0.98211 0.125763 -0.140157 + 2.86699 4.00351 1.11354 0.961796 0.0128639 -0.273463 + 2.89466 4.25686 1.24234 0.975437 0.0416533 -0.216304 + 2.92278 4.42895 1.43246 0.979885 0.13416 -0.147738 + 2.88307 4.67932 1.54261 0.961676 0.264774 -0.0712351 + 2.90846 4.59979 1.64576 0.967398 0.248919 -0.0467011 + 2.86733 4.33374 1.13038 0.971432 0.0498883 -0.232014 + 2.89572 4.50276 1.32343 0.975306 0.151458 -0.160747 + 2.85403 4.73817 1.43067 0.953931 0.281099 -0.104879 + 2.8077 4.92047 1.67653 0.931559 0.363585 0.0020652 + 2.82123 4.86942 1.79256 0.933956 0.355987 0.031622 + 2.8645 4.56131 1.20821 0.968644 0.165196 -0.185577 + 2.8228 4.79673 1.31545 0.937833 0.320255 -0.133815 + 2.77865 4.97932 1.56459 0.900078 0.42536 -0.0944897 + 2.66938 5.20707 1.70372 0.861152 0.50567 -0.0521084 + 2.68816 5.16972 1.81502 0.881064 0.469688 0.0558559 + 2.78712 4.84956 1.20634 0.927483 0.345742 -0.142255 + 2.73246 5.02505 1.45579 0.880609 0.457721 -0.122556 + 2.62319 5.25279 1.59493 0.8607 0.503054 -0.0783006 + 2.69677 5.07788 1.34668 0.906637 0.417358 -0.0618144 + 2.59562 5.29916 1.50761 0.888302 0.459158 -0.00966126 + 2.49325 5.47997 1.76125 0.828482 0.5588 0.0368802 + 2.50869 5.45074 1.83768 0.816103 0.575279 0.0550381 + 2.52747 5.41347 1.94903 0.818354 0.566771 0.0952226 + 2.66976 5.13291 1.25057 0.916567 0.396717 -0.0501943 + 2.5686 5.35419 1.4115 0.895084 0.445878 -0.00409296 + 2.45205 5.57126 1.60493 0.855363 0.510268 0.0893337 + 2.46568 5.52634 1.67394 0.855636 0.511427 0.0795583 + 2.53978 5.40978 1.32602 0.891634 0.452755 0.00138334 + 2.42323 5.62676 1.5194 0.820668 0.571308 0.0105456 + 2.22626 5.84969 1.68367 0.715355 0.696712 0.0534761 + 2.30465 5.76602 1.73179 0.768168 0.633483 0.0928311 + 2.31828 5.7211 1.80079 0.784566 0.580301 0.21842 + 2.38425 5.67106 1.43747 0.80256 0.596463 -0.0113856 + 2.18727 5.894 1.60173 0.707731 0.703387 0.0660502 + 1.92192 6.12256 1.69465 0.603293 0.792438 0.0898832 + 1.98527 6.0613 1.81496 0.630317 0.760334 0.156816 + 2.06366 5.97762 1.86309 0.680932 0.711282 0.174382 + 2.45255 5.55625 1.13032 0.834792 0.542952 -0.0912464 + 2.32895 5.74736 1.34111 0.796858 0.604132 0.0064982 + 2.19092 5.90505 1.48339 0.73271 0.676171 0.0769918 + 2.25966 5.83674 1.19491 0.771762 0.634502 -0.0423199 + 2.12164 5.99442 1.33719 0.699671 0.714289 0.0158527 + 1.92557 6.13361 1.57631 0.622918 0.775771 0.100762 + 1.58307 6.34482 1.72328 0.494798 0.857881 0.138622 + 1.65687 6.28328 1.83928 0.508842 0.848622 0.144637 + 2.37255 5.63181 0.907443 0.837481 0.532479 -0.12285 + 2.23624 5.85057 1.06815 0.775208 0.626154 -0.0835615 + 2.02499 6.07968 1.26831 0.651464 0.758672 -0.0033258 + 1.82892 6.21878 1.50738 0.580012 0.80809 0.102846 + 2.3171 5.68751 0.806972 0.804445 0.57095 -0.163963 + 2.24643 5.76772 0.768239 0.7804 0.604823 -0.158636 + 2.16557 5.93087 1.02946 0.734497 0.674131 -0.0778547 + 1.93897 6.14683 1.14961 0.635689 0.771607 -0.0228731 + 1.74926 6.28213 1.38726 0.565457 0.822407 0.0624813 + 2.18471 5.82591 0.672854 0.771632 0.615361 -0.160982 + 2.07956 5.99811 0.910802 0.711352 0.694328 -0.10903 + 1.84073 6.22417 1.02166 0.635503 0.771967 -0.0142103 + 2.09022 5.90723 0.568006 0.747037 0.642696 -0.169937 + 1.98507 6.07943 0.805954 0.701737 0.704546 -0.10574 + 1.70047 6.33976 0.889051 0.602793 0.797458 -0.026489 + 1.54913 6.43287 1.13137 0.529964 0.84682 0.0450993 + 1.65102 6.35946 1.25932 0.558933 0.827692 0.0501974 + 2.02026 5.96716 0.478801 0.746139 0.647236 -0.156082 + 1.84481 6.19502 0.673343 0.672512 0.731975 -0.109273 + 1.56641 6.42612 0.776263 0.551043 0.833121 -0.0475507 + 1.97917 5.98423 0.353645 0.753089 0.635215 -0.171343 + 1.80372 6.21208 0.548196 0.67623 0.724477 -0.133586 + 1.90528 6.04599 0.268878 0.707469 0.675386 -0.208185 + 1.8027 6.13603 0.252724 0.664243 0.717764 -0.208796 + 1.70115 6.30212 0.532041 0.628295 0.7681 -0.123566 + 1.97283 5.91634 0.133034 0.760599 0.589064 -0.272934 + 1.89152 5.97653 0.048988 0.722804 0.620963 -0.303247 + 1.71826 6.19427 0.17425 0.637824 0.737143 -0.223161 + 1.55972 6.38729 0.440731 0.576227 0.800299 -0.165785 + 1.42498 6.51129 0.684952 0.502546 0.863928 -0.0327935 + 1.84166 5.9073 -0.148702 0.700996 0.559618 -0.442078 + 1.80708 6.03477 -0.029486 0.691803 0.63848 -0.337271 + 1.71078 6.09582 -0.096035 0.640532 0.668867 -0.377274 + 1.61436 6.25035 0.099903 0.591625 0.767005 -0.248361 + 1.74535 5.96835 -0.215251 0.652593 0.582886 -0.484114 + 1.63947 6.03127 -0.271635 0.58603 0.608977 -0.534524 + 1.60914 6.16113 -0.145152 0.588265 0.696561 -0.410788 + 1.51273 6.31567 0.050778 0.556136 0.795907 -0.23926 + 1.66853 5.92133 -0.356413 0.58496 0.548362 -0.597596 + 1.53006 6.08995 -0.313864 0.51805 0.632289 -0.576052 + 1.49973 6.2198 -0.187381 0.504857 0.729962 -0.460733 + 1.44807 6.32948 -0.029744 0.486299 0.810333 -0.326916 + 1.34707 6.48501 0.323472 0.434776 0.870944 -0.228966 + 1.5802 5.88425 -0.457982 0.508504 0.520305 -0.68608 + 1.55406 5.9805 -0.404688 0.507557 0.564844 -0.650643 + 1.41123 6.15387 -0.342177 0.429292 0.666181 -0.609845 + 1.38259 6.26348 -0.226426 0.412512 0.760641 -0.501257 + 1.33093 6.37315 -0.068788 0.368896 0.852819 -0.369614 + 1.5864 5.73574 -0.567952 0.526086 0.518095 -0.674397 + 1.4557 5.94005 -0.496631 0.427738 0.539782 -0.725035 + 1.43523 6.04441 -0.432993 0.433227 0.584038 -0.68645 + 1.28798 6.19373 -0.374023 0.358962 0.692118 -0.626194 + 1.25934 6.30343 -0.25822 0.30526 0.801726 -0.513861 + 1.44985 5.60658 -0.768845 0.48268 0.545301 -0.685323 + 1.4619 5.79162 -0.606549 0.449183 0.561326 -0.695088 + 1.33366 5.99449 -0.521319 0.373692 0.559552 -0.739768 + 1.31319 6.09876 -0.457732 0.368104 0.608093 -0.703365 + 1.15742 6.23121 -0.400348 0.255656 0.726888 -0.637395 + 1.44808 5.44719 -0.897173 0.510311 0.543693 -0.666319 + 1.32284 5.6734 -0.794788 0.426016 0.582979 -0.691842 + 1.33489 5.85845 -0.632493 0.40463 0.588736 -0.69976 + 1.20237 6.05825 -0.532572 0.295362 0.578077 -0.76065 + 1.18264 6.13625 -0.484056 0.282958 0.621704 -0.730355 + 1.33258 5.38391 -1.03137 0.458855 0.520082 -0.720393 + 1.32162 5.51597 -0.931708 0.454826 0.579427 -0.676312 + 1.19309 5.74158 -0.811476 0.347673 0.616529 -0.70641 + 1.2036 5.92221 -0.643737 0.325352 0.619168 -0.714687 + 1.06634 6.09804 -0.546688 0.240416 0.595091 -0.766855 + 1.50598 5.18236 -1.06228 0.482678 0.493962 -0.723204 + 1.30942 5.2666 -1.11779 0.390946 0.457269 -0.798791 + 1.20078 5.45425 -1.0632 0.395662 0.555692 -0.731203 + 1.19188 5.58415 -0.948395 0.375159 0.62079 -0.688386 + 1.05597 5.78718 -0.829051 0.263708 0.649597 -0.713079 + 1.33486 5.16617 -1.16584 0.341677 0.42085 -0.840323 + 1.06543 5.24125 -1.21968 0.299315 0.33008 -0.895242 + 1.55249 4.99254 -1.1583 0.409704 0.457924 -0.788954 + 1.31379 5.08385 -1.20386 0.294403 0.368036 -0.881973 + 1.52869 4.93441 -1.19322 0.316268 0.411183 -0.854929 + 1.28999 5.02564 -1.23883 0.238531 0.295858 -0.924971 + 1.06721 5.0593 -1.27034 0.184419 0.161831 -0.969433 + 1.69867 4.78061 -1.20703 0.265382 0.21928 -0.938876 + 1.49433 4.89358 -1.22729 0.236548 0.256727 -0.937089 + 1.29489 4.96095 -1.25018 0.15758 0.131234 -0.978747 + 1.07212 4.99461 -1.28169 0.150994 0.0642519 -0.986444 + 0.934992 4.94724 -1.30044 0.196123 -0.414098 -0.888852 + 1.6663 4.75043 -1.21235 -0.170863 -0.462853 -0.869812 + 1.47527 4.84858 -1.23336 -0.100133 -0.47664 -0.873377 + 1.27583 4.91587 -1.2563 0.0200935 -0.42907 -0.903048 + 1.08456 4.94607 -1.27621 0.0707411 -0.499102 -0.863651 + 1.82612 4.63246 -1.18482 -0.216228 -0.421606 -0.880621 + 1.81028 4.61436 -1.13367 -0.650008 -0.734426 -0.195213 + 1.65664 4.72463 -1.14746 -0.476344 -0.858849 -0.188348 + 1.46561 4.82287 -1.16843 -0.336567 -0.898871 -0.280631 + 1.26974 4.87952 -1.20094 -0.13413 -0.919311 -0.369967 + 1.92484 4.48456 -1.11024 -0.763068 -0.584121 -0.276639 + 1.91864 4.47097 -1.01092 -0.775277 -0.486853 -0.402392 + 1.83478 4.60951 -0.994476 -0.702383 -0.626311 -0.33822 + 1.68114 4.71987 -1.00823 -0.422589 -0.841157 -0.337451 + 1.43923 4.81291 -1.04616 -0.247781 -0.878049 -0.409433 + 1.98546 4.35791 -1.00529 -0.839535 -0.27239 -0.47009 + 1.74769 4.29554 -0.775666 -0.677963 -0.0829774 -0.730397 + 1.66383 4.43409 -0.759232 -0.502433 -0.411924 -0.760183 + 1.5848 4.54907 -0.799193 -0.260257 -0.614766 -0.744533 + 1.73801 4.16008 -0.797641 -0.689331 0.0912442 -0.718677 + 1.34224 3.96063 -0.422972 -0.709361 0.178332 -0.681912 + 1.31292 4.05995 -0.369198 -0.558391 -0.196083 -0.806071 + 1.2339 4.17485 -0.409218 0.3591 -0.757839 -0.544726 + 1.33256 3.82517 -0.444947 -0.67465 0.424733 -0.603696 + 1.06559 3.68669 -0.279894 -0.326294 0.597408 -0.732555 + 1.12487 3.77227 -0.232133 -0.468155 0.519229 -0.715005 + 1.09555 3.87159 -0.178358 0.221535 -0.200561 -0.954305 + 1.19592 4.12414 -0.451392 0.413237 -0.697956 -0.584887 + 1.25245 3.70489 -0.517631 -0.625407 0.508854 -0.591552 + 0.985481 3.56642 -0.352577 -0.308117 0.7636 -0.567432 + 0.871163 3.69651 -0.286106 0.0719273 0.458941 -0.88555 + 0.839349 3.77385 -0.251464 0.581297 0.242737 -0.776642 + 1.03377 3.76403 -0.245252 0.077416 0.391376 -0.916969 + 1.26446 3.5853 -0.576089 -0.561306 0.338549 -0.755195 + 0.928646 3.53155 -0.376982 -0.109366 0.598536 -0.793595 + 0.814329 3.66164 -0.310509 0.671868 0.357362 -0.648758 + 1.32136 3.47721 -0.677476 -0.535059 0.421699 -0.732039 + 1.043 3.33197 -0.54971 -0.121252 0.782648 -0.610541 + 0.986104 3.43997 -0.448364 -0.223074 0.575776 -0.786587 + 0.852539 3.53944 -0.380047 0.588592 0.61112 -0.529237 + 0.821278 3.60439 -0.345361 0.684352 0.512137 -0.519016 + 1.34655 3.34276 -0.768394 -0.471292 0.649683 -0.596487 + 1.09483 3.2719 -0.671261 -0.0538216 0.923937 -0.378739 + 0.955696 3.37117 -0.540198 0.572719 0.758127 -0.311829 + 0.909997 3.44794 -0.45138 0.516243 0.725989 -0.454348 + 1.41999 3.30677 -0.932065 -0.388224 0.859462 -0.332575 + 1.16827 3.23591 -0.834932 0.0315517 0.992507 -0.118042 + 1.03005 3.29611 -0.776992 0.506809 0.861345 0.0350618 + 1.00753 3.3111 -0.661758 0.56267 0.817539 -0.122609 + 0.806855 3.56984 -0.807711 0.884405 0.447961 -0.130988 + 1.41563 3.25271 -1.08502 -0.202463 0.977719 -0.0554406 + 1.21245 3.24989 -1.03014 0.280125 0.94657 0.159798 + 1.1716 3.24768 -0.926706 0.409472 0.893231 0.185664 + 1.43534 3.28172 -1.26487 -0.116243 0.985672 0.122221 + 1.23216 3.2789 -1.20999 0.297731 0.940707 0.162561 + 1.12365 3.35118 -1.21599 0.509116 0.847316 0.151184 + 1.09283 3.34785 -1.08122 0.513307 0.839191 0.179651 + 1.05197 3.34555 -0.977836 0.392107 0.86885 0.302245 + 1.39002 3.28857 -1.38413 0.00897914 0.980383 0.196899 + 1.23927 3.29413 -1.31657 0.313813 0.929036 0.195992 + 1.13075 3.36642 -1.32257 0.512054 0.844147 0.158798 + 1.11887 3.39705 -1.45464 0.421399 0.900394 0.108227 + 1.01918 3.43216 -1.38745 0.430606 0.896281 0.106105 + 1.34359 3.3214 -1.449 0.135 0.962923 0.23357 + 1.19284 3.32696 -1.38142 0.532203 0.813873 0.233175 + 1.15402 3.36187 -1.3727 0.528251 0.826333 0.195258 + 1.14214 3.39251 -1.50476 0.273871 0.956796 0.0976515 + 1.27698 3.33323 -1.50369 0.379779 0.881281 0.281268 + 1.23816 3.36814 -1.49496 0.46431 0.833696 0.298943 + 1.25705 3.37972 -1.68482 0.218195 0.955603 0.198023 + 1.09957 3.413 -1.67886 0.317427 0.929034 0.190097 + 0.999874 3.44811 -1.61167 0.465706 0.87811 0.109729 + 0.969968 3.5092 -1.77767 0.467253 0.778559 0.418951 + 0.863759 3.53291 -1.58534 0.517353 0.841872 0.153613 + 0.988359 3.42883 -1.25268 0.455706 0.881631 0.122713 + 0.925856 3.45071 -1.17737 0.318525 0.916563 0.241773 + 0.833852 3.59399 -1.75135 0.563096 0.732523 0.382535 + 0.801256 3.55478 -1.51003 0.523123 0.840922 0.138537 + 0.907259 3.41294 -1.06835 0.42178 0.880007 0.218378 + 1.03338 3.30779 -0.868825 0.457277 0.866899 0.198452 + 0.858799 3.44275 -0.997782 0.646696 0.760813 0.0542887 + 0.836276 3.45774 -0.882547 0.788437 0.598745 -0.140963 + 0.67774 3.63249 -1.42123 0.699861 0.710048 0.0776311 + 0.569798 3.83247 -1.3092 0.943311 0.192645 -0.270283 + 0.6201 4.04521 -1.17587 0.959146 0.0731005 -0.273306 + 0.761156 3.64662 -0.718893 0.934319 0.346447 -0.0838027 + 0.76866 3.74322 -0.619611 0.962712 0.260601 -0.0726095 + 0.7374 3.80817 -0.584916 0.970592 0.234355 -0.0550305 + 0.74215 3.87974 -0.541678 0.983727 0.1076 -0.14389 + 0.627604 4.1418 -1.07658 0.97003 0.0535131 -0.237019 + 0.654169 4.28647 -0.963151 0.96326 -0.0876276 -0.253871 + 0.68488 4.37231 -0.931225 0.921715 -0.217365 -0.321239 + 0.735201 3.93699 -0.506827 0.969757 -0.00188808 -0.244065 + 0.713711 4.4393 -0.891461 0.794623 -0.407201 -0.450291 + 0.764032 4.00398 -0.467072 0.945572 -0.0942645 -0.311459 + 0.848985 3.8722 -0.214011 0.62404 0.269643 -0.733394 + 0.966475 3.81264 -0.233652 -0.0997424 0.132629 -0.986134 + 0.787411 4.51721 -0.888613 0.721344 -0.515995 -0.461965 + 0.773668 4.10225 -0.429669 0.910142 -0.222538 -0.349453 + 0.826991 4.17847 -0.409485 0.842975 -0.380263 -0.380516 + 0.840212 3.94172 -0.18242 0.774758 0.225008 -0.590865 + 0.858422 4.81498 -1.15075 0.5173 -0.722629 -0.458485 + 0.840733 4.59343 -0.868419 0.647954 -0.597957 -0.471808 + 0.928875 4.63847 -0.852437 0.262761 -0.750193 -0.606768 + 0.867609 4.24338 -0.363923 0.541322 -0.633498 -0.552856 + 0.88083 4.00672 -0.136817 0.0900021 -0.220771 -0.971164 + 0.944245 4.89859 -1.23938 0.249841 -0.820847 -0.513605 + 0.946564 4.86002 -1.13477 0.301342 -0.837809 -0.455269 + 1.07847 4.90973 -1.22087 0.0153075 -0.887378 -0.460789 + 1.08079 4.87115 -1.11625 0.0744267 -0.883695 -0.462108 + 1.02178 4.6337 -0.842966 0.0797526 -0.770377 -0.632581 + 0.960515 4.23869 -0.354402 -0.424609 -0.562054 -0.70979 + 0.957702 3.88216 -0.202061 -0.572487 0.197845 -0.795686 + 1.24336 4.86956 -1.07869 -0.0533823 -0.917012 -0.39527 + 1.18436 4.63201 -0.805442 -0.0252765 -0.704625 -0.709129 + 1.03739 4.11413 -0.419655 -0.530826 -0.3916 -0.751581 + 1.34289 4.64202 -0.837188 -0.117168 -0.675489 -0.728002 + 1.05757 3.82089 -0.220541 0.354544 -0.0249305 -0.934707 + 1.06648 5.96789 -0.661263 0.264126 0.64191 -0.719853 + 0.927575 6.13356 -0.558203 0.151563 0.652038 -0.742883 + 1.04661 6.17613 -0.498132 0.213248 0.662049 -0.718482 + 0.90974 6.19394 -0.504984 0.116691 0.707369 -0.697146 + 0.888864 6.26743 -0.428478 0.102982 0.770998 -0.628456 + 1.02573 6.2497 -0.421567 0.176562 0.757605 -0.628379 + 1.1318 6.31711 -0.291521 0.210692 0.832102 -0.513045 + 0.752642 6.27348 -0.439145 0.0631153 0.78146 -0.620755 + 0.868635 6.33987 -0.329947 0.0882681 0.840034 -0.535306 + 1.0001 6.33551 -0.31279 0.155417 0.835658 -0.526803 + 1.09517 6.43098 -0.085945 0.210194 0.883545 -0.418528 + 1.22271 6.41721 -0.052703 0.262854 0.886367 -0.38113 + 0.732413 6.34592 -0.340615 0.0707171 0.829502 -0.554008 + 0.837548 6.44609 -0.14733 0.113305 0.866333 -0.486445 + 0.969017 6.44173 -0.130172 0.16837 0.877295 -0.44945 + 1.05477 6.5639 0.200029 0.253569 0.915079 -0.313582 + 0.600179 6.34797 -0.350374 0.0550388 0.81839 -0.572021 + 0.579928 6.44836 -0.194862 0.0769101 0.841008 -0.535528 + 0.712162 6.44622 -0.185152 0.109193 0.852182 -0.511725 + 0.798436 6.5756 0.080752 0.172963 0.899828 -0.400491 + 0.928617 6.57474 0.155851 0.206806 0.911084 -0.356591 + 0.464092 6.45655 -0.206243 0.100041 0.828402 -0.551127 + 0.567921 6.58042 0.016008 0.118704 0.882083 -0.455894 + 0.67305 6.57573 0.04293 0.142592 0.887274 -0.438649 + 0.631543 6.67633 0.252485 0.164598 0.929064 -0.331281 + 0.707501 6.68331 0.327598 0.187633 0.937397 -0.293395 + 0.333038 6.47527 -0.196465 0.0718994 0.823045 -0.563407 + 0.359552 6.60168 -0.006219 0.124456 0.874143 -0.469451 + 0.452085 6.58861 0.004627 0.140861 0.880194 -0.453229 + 0.401713 6.71159 0.279412 0.123813 0.93763 -0.324839 + 0.526414 6.68102 0.225571 0.0944628 0.924418 -0.369496 + 0.204636 6.49173 -0.188379 0.0542598 0.823742 -0.564363 + 0.23115 6.61823 0.001916 0.0653113 0.872478 -0.484269 + 0.309179 6.72467 0.268558 0.13867 0.941593 -0.306878 + 0.072926 6.62302 0.00042 0.0159541 0.86912 -0.494343 + 0.052708 6.71495 0.189992 0.0152879 0.93025 -0.366607 + 0.210932 6.71016 0.191489 0.0954653 0.924458 -0.36914 + 0.150956 6.82104 0.562248 0.0391639 0.980834 -0.190868 + -0.072927 6.49919 -0.186687 -0.0199643 0.827386 -0.561278 + -0.072927 6.62302 0.00042 -0.0167477 0.868659 -0.495128 + -0.052709 6.71495 0.190001 -0.0153295 0.930253 -0.366599 + 0.052708 6.80653 0.485178 0.0184563 0.973096 -0.22966 + -0.204636 6.49173 -0.188379 -0.0533229 0.824431 -0.563445 + -0.23115 6.61823 0.001916 -0.0645307 0.872168 -0.484933 + -0.210932 6.71016 0.191489 -0.0954467 0.924459 -0.369142 + -0.052709 6.80653 0.485178 -0.0178497 0.972492 -0.232251 + 0.100983 6.86309 0.880213 0.0293859 0.99735 -0.0665491 + -0.333038 6.47527 -0.196465 -0.0791032 0.826543 -0.557288 + -0.359552 6.60168 -0.006219 -0.133421 0.867632 -0.478971 + -0.309181 6.72467 0.268558 -0.130659 0.937209 -0.323369 + -0.150957 6.82104 0.562248 -0.0420738 0.980531 -0.191803 + -0.464092 6.45655 -0.206243 -0.0954008 0.832238 -0.546148 + -0.452085 6.58861 0.004627 -0.133058 0.876516 -0.462617 + -0.401714 6.71159 0.279412 -0.13257 0.933801 -0.332326 + -0.371308 6.80834 0.581647 -0.118317 0.974849 -0.188863 + -0.579927 6.44836 -0.194862 -0.0836925 0.845523 -0.52734 + -0.56792 6.58042 0.016008 -0.130094 0.875833 -0.464749 + -0.526414 6.68102 0.225571 -0.0944586 0.924423 -0.369486 + -0.71216 6.44622 -0.185152 -0.101872 0.856561 -0.505891 + -0.673048 6.57573 0.04293 -0.136295 0.883186 -0.448782 + -0.631543 6.67633 0.252485 -0.164593 0.929057 -0.331303 + -0.496008 6.77776 0.527814 -0.133023 0.963023 -0.234291 + -0.732411 6.34592 -0.340623 -0.073803 0.831437 -0.550696 + -0.837548 6.44609 -0.14733 -0.123621 0.873256 -0.471318 + -0.798436 6.5756 0.080752 -0.192901 0.890874 -0.411257 + -0.707503 6.68331 0.327598 -0.190056 0.940027 -0.283246 + -0.888862 6.26743 -0.428478 -0.107564 0.77391 -0.624094 + -0.868633 6.33987 -0.329947 -0.0923583 0.838026 -0.537756 + -0.969017 6.44173 -0.130172 -0.155915 0.884453 -0.439811 + -0.928617 6.57474 0.155851 -0.202306 0.908179 -0.366448 + -0.837684 6.68236 0.402646 -0.217927 0.946081 -0.239662 + -1.02573 6.2497 -0.421567 -0.173619 0.759717 -0.626647 + -1.0001 6.33551 -0.31279 -0.151888 0.833586 -0.531097 + -1.09517 6.43098 -0.085945 -0.216241 0.88683 -0.408377 + -1.05477 6.5639 0.200029 -0.266321 0.908536 -0.321926 + -1.04659 6.17613 -0.498132 -0.193025 0.649367 -0.73557 + -1.18263 6.13625 -0.484056 -0.284942 0.620036 -0.731002 + -1.15742 6.23121 -0.400348 -0.268276 0.734648 -0.623153 + -1.13179 6.31711 -0.291521 -0.223336 0.824761 -0.51951 + -1.20237 6.05825 -0.532572 -0.30057 0.580825 -0.756505 + -1.33366 5.99449 -0.521319 -0.372503 0.560866 -0.739372 + -1.31319 6.09876 -0.457732 -0.365083 0.606388 -0.706405 + -1.28798 6.19373 -0.374023 -0.35047 0.69982 -0.622433 + -1.3349 5.85845 -0.632493 -0.398867 0.586366 -0.705039 + -1.4619 5.79162 -0.606549 -0.454494 0.552984 -0.698315 + -1.4557 5.94013 -0.49658 -0.428492 0.540229 -0.724257 + -1.43523 6.04441 -0.432993 -0.433556 0.583714 -0.686518 + -1.32284 5.6734 -0.794788 -0.423715 0.586801 -0.690022 + -1.44985 5.60658 -0.768845 -0.491605 0.549145 -0.675844 + -1.56957 5.53004 -0.731271 -0.551994 0.509857 -0.65981 + -1.5864 5.73574 -0.567952 -0.518539 0.514297 -0.683093 + -1.5802 5.88425 -0.457982 -0.508224 0.520687 -0.685998 + -1.32162 5.51598 -0.931716 -0.442257 0.574315 -0.688891 + -1.44808 5.44719 -0.897173 -0.509501 0.544854 -0.66599 + -1.5678 5.37064 -0.85959 -0.566267 0.52526 -0.635172 + -1.68818 5.29708 -0.806381 -0.613928 0.504444 -0.607148 + -1.68559 5.46478 -0.67924 -0.604512 0.47579 -0.638897 + -1.45903 5.31513 -0.996836 -0.504378 0.530727 -0.681125 + -1.58714 5.25355 -0.942585 -0.560605 0.527016 -0.63873 + -1.70753 5.17999 -0.889376 -0.613308 0.524746 -0.590335 + -1.77214 5.03741 -0.950809 -0.608362 0.528894 -0.591748 + -1.82292 5.09917 -0.833386 -0.666087 0.512101 -0.542293 + -1.79847 5.22373 -0.746933 -0.662188 0.48557 -0.570727 + -1.79588 5.39142 -0.619783 -0.661573 0.447363 -0.60182 + -1.70243 5.67048 -0.51592 -0.602907 0.471024 -0.643925 + -1.9316 5.02276 -0.765438 -0.71001 0.474878 -0.519977 + -1.90715 5.14732 -0.678985 -0.697412 0.46766 -0.543057 + -1.897 5.32413 -0.550839 -0.695725 0.430373 -0.575105 + -1.81169 5.61589 -0.444181 -0.66235 0.439633 -0.606642 + -2.01005 5.09055 -0.593649 -0.77042 0.412825 -0.485828 + -1.9999 5.26727 -0.465553 -0.74792 0.400571 -0.5293 + -1.91281 5.54861 -0.375237 -0.722968 0.411762 -0.55477 + -1.80395 5.77041 -0.338008 -0.665327 0.462519 -0.586017 + -1.69468 5.825 -0.409757 -0.593959 0.491624 -0.636804 + -2.10918 4.84592 -0.621343 -0.935996 0.261187 -0.235995 + -2.08717 5.00564 -0.514393 -0.83689 0.320051 -0.444053 + -2.08995 5.19612 -0.382712 -0.789898 0.359498 -0.496813 + -2.00236 5.46004 -0.309838 -0.767669 0.393788 -0.505585 + -2.09241 5.38889 -0.226996 -0.791638 0.381233 -0.477464 + -1.99624 5.61467 -0.200263 -0.772364 0.398713 -0.494451 + -1.90669 5.70315 -0.265712 -0.73627 0.439559 -0.514484 + -1.77442 5.8584 -0.300021 -0.655078 0.517386 -0.550623 + -1.66854 5.92133 -0.356405 -0.586813 0.546258 -0.597705 + -2.17516 5.30753 -0.147275 -0.830692 0.350951 -0.432186 + -2.1625 5.46109 -0.042254 -0.824536 0.377936 -0.421075 + -2.07975 5.54245 -0.121966 -0.798066 0.386985 -0.46188 + -1.96919 5.7342 -0.145894 -0.758833 0.460048 -0.461008 + -1.87717 5.79115 -0.227725 -0.713284 0.493917 -0.497263 + -2.12768 5.59788 0.023222 -0.824996 0.432441 -0.363835 + -2.0527 5.66198 -0.067605 -0.801166 0.435727 -0.410213 + -1.93369 5.85036 -0.06688 -0.745557 0.539725 -0.390949 + -1.84166 5.9073 -0.148702 -0.698959 0.558146 -0.447135 + -1.74535 5.96835 -0.215251 -0.652918 0.58248 -0.484164 + -2.08997 5.72607 0.107994 -0.810185 0.493532 -0.316268 + -2.01499 5.79017 0.017166 -0.787434 0.512829 -0.341986 + -1.89153 5.97644 0.048937 -0.724223 0.622166 -0.297339 + -1.80708 6.03468 -0.029536 -0.688262 0.642608 -0.336677 + -1.71078 6.09573 -0.096085 -0.641011 0.668949 -0.376313 + -2.16364 5.6606 0.195989 -0.818788 0.483639 -0.309321 + -2.04672 5.85449 0.217752 -0.783916 0.569111 -0.248171 + -1.97283 5.91634 0.133034 -0.761952 0.587214 -0.273145 + -1.90528 6.04599 0.268878 -0.707426 0.675412 -0.208248 + -1.8027 6.13603 0.252724 -0.67177 0.709909 -0.211552 + -2.1204 5.78911 0.305796 -0.790494 0.56386 -0.239125 + -2.02026 5.96716 0.478801 -0.746 0.645657 -0.163129 + -1.97917 5.98423 0.353645 -0.753105 0.635206 -0.171304 + -1.80372 6.21208 0.548196 -0.676236 0.724473 -0.133579 + -1.70115 6.30212 0.532041 -0.629631 0.768257 -0.115527 + -2.19036 5.72927 0.395052 -0.79939 0.552234 -0.236671 + -2.09022 5.90723 0.568006 -0.751131 0.63769 -0.170745 + -1.98507 6.07943 0.805954 -0.702069 0.704841 -0.101476 + -1.84481 6.19502 0.673343 -0.670561 0.733792 -0.109075 + -2.1847 5.826 0.672904 -0.771011 0.614444 -0.16733 + -2.07955 5.99811 0.910802 -0.706213 0.699721 -0.107953 + -1.84073 6.22417 1.02166 -0.639991 0.768235 -0.0150445 + -1.70047 6.33976 0.889043 -0.602231 0.797612 -0.033674 + -1.56641 6.42612 0.776263 -0.561146 0.826161 -0.0507359 + -1.93897 6.14683 1.14961 -0.635619 0.771678 -0.0224062 + -1.65102 6.35946 1.25932 -0.558442 0.827507 0.0581008 + -1.54913 6.43287 1.13137 -0.521506 0.851986 0.046378 + -1.41507 6.51924 1.01858 -0.460664 0.886927 0.0338941 + -1.74926 6.28213 1.38726 -0.565921 0.822091 0.0624477 + -1.47639 6.44575 1.47206 -0.491568 0.861513 0.127104 + -1.3745 6.51916 1.34411 -0.444877 0.89258 0.0733865 + -1.242 6.58068 1.29897 -0.383659 0.9206 0.0728071 + -1.50341 6.40817 1.60316 -0.481719 0.864848 0.141369 + -1.17018 6.56106 1.67595 -0.397218 0.90393 0.158521 + -1.03768 6.62266 1.63085 -0.354024 0.923295 0.148973 + -1.10299 6.64171 1.17946 -0.347552 0.936491 0.0468164 + -1.27606 6.58026 0.899078 -0.393067 0.919313 0.0190205 + -1.29037 6.45835 1.91044 -0.412719 0.888633 0.199984 + -1.19721 6.52356 1.8071 -0.395055 0.898605 0.190893 + -1.36416 6.39673 2.02638 -0.416889 0.884742 0.208411 + -1.08876 6.45985 2.22505 -0.335848 0.902488 0.269669 + -1.02113 6.51363 2.13009 -0.33801 0.902417 0.267195 + -0.92797 6.57875 2.02669 -0.320919 0.915024 0.244421 + -1.14603 6.40479 2.34221 -0.327107 0.898789 0.291853 + -0.883885 6.41497 2.54317 -0.28579 0.882641 0.373188 + -0.827271 6.46639 2.46352 -0.283355 0.895909 0.342136 + -0.759644 6.52008 2.36851 -0.26753 0.911118 0.313516 + -1.22438 6.35483 2.39954 -0.382324 0.863093 0.329997 + -0.962239 6.36502 2.60049 -0.303404 0.866472 0.39645 + -0.674401 6.34161 2.83165 -0.241724 0.854591 0.459613 + -0.644018 6.42086 2.69499 -0.238509 0.871949 0.427572 + -0.587404 6.47226 2.61534 -0.212713 0.888983 0.405539 + -0.93967 6.31905 2.71111 -0.301833 0.847859 0.435926 + -0.714553 6.27018 2.93436 -0.255892 0.844764 0.469992 + -0.488797 6.21125 3.14743 -0.201175 0.856603 0.475143 + -0.45681 6.34753 2.91038 -0.181123 0.86623 0.465661 + -0.426427 6.4267 2.77367 -0.152582 0.884218 0.441449 + -0.78341 6.18987 3.04706 -0.264561 0.846344 0.462287 + -0.557654 6.13094 3.26013 -0.212371 0.845696 0.489589 + -0.327175 6.15706 3.3087 -0.176016 0.856413 0.48536 + -0.295187 6.29334 3.07165 -0.148549 0.870543 0.469135 + -0.271816 6.35498 2.96229 -0.108517 0.88473 0.453296 + -0.997952 6.13756 2.99886 -0.32085 0.828644 0.458699 + -0.788677 6.06704 3.26661 -0.267711 0.830227 0.488931 + -0.756484 5.99632 3.3973 -0.253489 0.812226 0.525387 + -0.525461 6.06022 3.39082 -0.211965 0.830137 0.515696 + -1.00322 6.01473 3.21841 -0.328164 0.816944 0.474247 + -1.00086 5.90592 3.40228 -0.320699 0.794349 0.515908 + -0.741024 5.91316 3.52434 -0.254345 0.801365 0.541408 + -0.549237 5.97989 3.50496 -0.219053 0.815843 0.535179 + -0.985395 5.82275 3.52933 -0.304387 0.788377 0.534612 + -0.729783 5.82241 3.66751 -0.259229 0.808148 0.528863 + -0.537996 5.88923 3.64818 -0.224039 0.816147 0.532644 + -0.369525 6.00461 3.53995 -0.213401 0.819164 0.532381 + -0.345749 6.08485 3.42576 -0.197699 0.837667 0.509146 + -0.962693 5.72918 3.6804 -0.300143 0.794599 0.527756 + -0.706855 5.73509 3.81456 -0.254 0.803469 0.538443 + -0.530927 5.7715 3.8319 -0.219422 0.80903 0.545275 + -0.368029 5.82088 3.82297 -0.202632 0.809693 0.55076 + -0.375098 5.93861 3.63925 -0.214364 0.818796 0.532561 + -0.939765 5.64185 3.82745 -0.309069 0.776639 0.548916 + -0.693585 5.62984 3.97047 -0.250957 0.781071 0.571794 + -0.517658 5.66625 3.9878 -0.202269 0.780697 0.591269 + -0.355791 5.75569 3.91968 -0.174539 0.789348 0.588614 + -0.148623 5.95613 3.70132 -0.0584016 0.8319 0.551844 + -1.12536 5.39736 4.04032 -0.370535 0.719613 0.587249 + -0.887986 5.53922 3.99263 -0.311417 0.757896 0.573248 + -0.661059 5.50964 4.14565 -0.229294 0.759663 0.608553 + -0.488028 5.58849 4.09428 -0.174387 0.769752 0.614061 + -0.326162 5.67794 4.02615 -0.137856 0.770393 0.622487 + -1.08361 5.29444 4.18419 -0.366161 0.688324 0.626208 + -0.85546 5.41902 4.1678 -0.306028 0.728614 0.612754 + -0.593196 5.41042 4.28431 -0.20229 0.732127 0.650438 + -0.420165 5.48927 4.23294 -0.137508 0.754184 0.642104 + -1.02628 5.18841 4.32803 -0.349541 0.649715 0.675049 + -0.798127 5.31308 4.3117 -0.287399 0.691733 0.662501 + -0.503428 5.31304 4.41678 -0.177091 0.717075 0.674124 + -0.331182 5.372 4.38366 -0.103171 0.737736 0.66716 + -1.31486 5.02819 4.31615 -0.401351 0.614235 0.679435 + -0.960334 5.09124 4.44514 -0.334607 0.611648 0.716886 + -0.708359 5.21562 4.44412 -0.272532 0.659536 0.700527 + -0.460431 5.21435 4.5285 -0.165665 0.669186 0.724392 + -1.62324 4.86473 4.26848 -0.454643 0.594602 0.663135 + -1.24892 4.93102 4.43325 -0.382474 0.594292 0.707482 + -0.884017 5.00403 4.55201 -0.317914 0.619029 0.718146 + -0.632041 5.1284 4.55099 -0.254888 0.612736 0.748055 + -1.58155 4.72317 4.41606 -0.445776 0.563813 0.695269 + -1.52887 4.62331 4.52863 -0.448044 0.536642 0.715033 + -1.19624 4.83116 4.54582 -0.379405 0.602297 0.702346 + -0.8515 4.94003 4.62545 -0.291084 0.617352 0.730853 + -0.547303 5.02682 4.65352 -0.217263 0.593083 0.775274 + -1.85277 4.55415 4.36261 -0.511905 0.519943 0.683821 + -1.83964 4.42295 4.46545 -0.501523 0.469936 0.726385 + -1.74296 4.39244 4.5459 -0.48589 0.463178 0.7412 + -1.42798 4.54238 4.6458 -0.410508 0.495965 0.765181 + -1.16372 4.76716 4.61927 -0.363869 0.564561 0.740857 + -2.06263 4.2746 4.3916 -0.617155 0.406621 0.673631 + -1.98966 4.14767 4.51646 -0.567099 0.345091 0.747871 + -1.89297 4.11716 4.5969 -0.521703 0.329784 0.786809 + -1.64207 4.31151 4.66307 -0.458005 0.413415 0.786969 + -2.20914 4.07508 4.35018 -0.653686 0.320396 0.685596 + -2.13616 3.94806 4.47499 -0.638437 0.253364 0.726777 + -2.06758 3.85189 4.55996 -0.605943 0.209711 0.767368 + -1.82588 4.03272 4.66956 -0.51226 0.286029 0.8098 + -2.29894 4.09032 4.25959 -0.663449 0.320368 0.676166 + -2.38769 3.77091 4.29422 -0.691036 0.143444 0.708444 + -2.31605 3.69854 4.37297 -0.697383 0.0957499 0.710273 + -2.24747 3.60237 4.45794 -0.691897 0.0453037 0.720574 + -2.00049 3.76746 4.63261 -0.57921 0.171054 0.79703 + -2.47749 3.78615 4.20362 -0.721096 0.139234 0.678701 + -2.52876 3.47356 4.15646 -0.763446 -0.0618433 0.642904 + -2.45712 3.40119 4.2352 -0.735795 -0.0829159 0.672109 + -2.38262 3.31487 4.29711 -0.716712 -0.133858 0.684402 + -2.16285 3.53564 4.53012 -0.654839 0.000774119 0.755768 + -2.58947 3.5633 4.09222 -0.794708 -0.0122773 0.606867 + -2.61945 3.19332 3.97685 -0.796538 -0.174258 0.578931 + -2.55453 3.08603 4.02568 -0.7719 -0.206428 0.601298 + -2.48002 2.99971 4.08758 -0.742247 -0.229747 0.629512 + -2.65484 2.87294 3.79956 -0.831109 -0.243685 0.499875 + -2.58992 2.76565 3.84838 -0.799379 -0.259682 0.54181 + -2.51848 2.65663 3.89642 -0.768489 -0.278629 0.576013 + -2.40224 2.90154 4.13742 -0.725062 -0.247261 0.642765 + -2.298 3.24814 4.36929 -0.698267 -0.155859 0.698664 + -2.49612 2.30505 3.73457 -0.793725 -0.327676 0.512474 + -2.41321 2.20392 3.79012 -0.761936 -0.340561 0.550883 + -2.4407 2.55846 3.94625 -0.741223 -0.292733 0.604065 + -2.35401 2.47291 4.00843 -0.724726 -0.300728 0.619947 + -2.32092 2.82189 4.19837 -0.715456 -0.255906 0.650104 + -2.45458 1.99083 3.57362 -0.813558 -0.380307 0.439875 + -2.37167 1.88962 3.62912 -0.787821 -0.392009 0.475043 + -2.28419 1.81926 3.71338 -0.75858 -0.395006 0.518196 + -2.32652 2.11846 3.85235 -0.737533 -0.344721 0.580699 + -2.31407 1.63413 3.49404 -0.797395 -0.432701 0.420632 + -2.22659 1.56377 3.5783 -0.765635 -0.459395 0.450287 + -2.13417 1.51403 3.67706 -0.726652 -0.468889 0.502115 + -2.18866 1.74569 3.78762 -0.723026 -0.402654 0.561341 + -2.23098 2.04488 3.9266 -0.712166 -0.351209 0.607842 + -2.07879 1.30819 3.53959 -0.703278 -0.571865 0.422339 + -1.97879 1.26809 3.64004 -0.671623 -0.573026 0.469642 + -2.03389 1.46269 3.76477 -0.683843 -0.48238 0.54742 + -2.08837 1.69435 3.87533 -0.687656 -0.407438 0.600935 + -1.91628 1.1104 3.48777 -0.691861 -0.613134 0.381307 + -1.82446 1.06329 3.59595 -0.703252 -0.586234 0.402201 + -1.87287 1.23073 3.73175 -0.678957 -0.547529 0.489111 + -1.92797 1.42525 3.85644 -0.65843 -0.475953 0.583042 + -1.76298 0.90034 3.4572 -0.703044 -0.61733 0.353033 + -1.6807 0.861303 3.54682 -0.718566 -0.607542 0.33846 + -1.72597 1.01679 3.69349 -0.738108 -0.552772 0.386834 + -1.77437 1.18415 3.82923 -0.685666 -0.506026 0.523258 + -1.61585 0.687698 3.34331 -0.700927 -0.632266 0.330063 + -1.54136 0.704368 3.54803 -0.681439 -0.65312 0.330265 + -1.59424 0.805556 3.65557 -0.707943 -0.62312 0.332472 + -1.63951 0.960962 3.8022 -0.71875 -0.519554 0.46202 + -1.40911 0.598918 3.58948 -0.595074 -0.701076 0.392911 + -1.44189 0.682476 3.68675 -0.598353 -0.702993 0.384416 + -1.49477 0.783663 3.79429 -0.62331 -0.642359 0.445938 + -1.53374 0.918068 3.89229 -0.645928 -0.5159 0.562694 + -1.66388 1.13845 3.91159 -0.661103 -0.46324 0.590213 + -1.2922 0.579149 3.71252 -0.568148 -0.694064 0.442134 + -1.32498 0.662709 3.80979 -0.537153 -0.714817 0.447776 + -1.38252 0.755475 3.88891 -0.558105 -0.650717 0.514864 + -1.42149 0.88988 3.98692 -0.592683 -0.518961 0.61596 + -1.55811 1.09555 4.00168 -0.634315 -0.445343 0.631913 + -1.29235 0.517844 3.6271 -0.609013 -0.672287 0.420873 + -1.15834 0.476777 3.72603 -0.51464 -0.737264 0.437708 + -1.15819 0.538088 3.81144 -0.517753 -0.695951 0.497577 + -1.18742 0.628462 3.90511 -0.504468 -0.708502 0.493494 + -1.24496 0.721228 3.98423 -0.504889 -0.653722 0.56368 + -1.29105 0.465531 3.53131 -0.502943 -0.796814 0.334867 + -1.16866 0.443531 3.64062 -0.475527 -0.815731 0.329327 + -0.999028 0.407612 3.78343 -0.46603 -0.769689 0.436343 + -0.990719 0.457313 3.86275 -0.469713 -0.713855 0.519405 + -1.01995 0.547601 3.95636 -0.454461 -0.691665 0.561306 + -1.31012 0.446865 3.43944 -0.288667 -0.91798 0.272 + -1.18774 0.424785 3.54869 -0.392568 -0.886534 0.244841 + -1.00935 0.374284 3.69795 -0.425504 -0.872298 0.24092 + -0.889601 0.326565 3.73001 -0.410753 -0.885395 0.217618 + -0.878866 0.352189 3.81043 -0.412184 -0.803745 0.429067 + -1.19881 0.406289 3.46332 -0.399887 -0.860391 0.315939 + -1.02128 0.372296 3.6162 -0.358309 -0.922693 0.142307 + -0.901532 0.324581 3.64824 -0.404619 -0.908649 0.103156 + -0.818256 0.295757 3.73317 -0.382532 -0.897228 0.220572 + -0.807521 0.32129 3.81354 -0.356564 -0.827608 0.433505 + -1.19284 0.361408 3.37566 -0.358705 -0.867184 0.345431 + -1.03236 0.353714 3.53078 -0.33854 -0.914424 0.221855 + -0.911372 0.317569 3.56339 -0.388958 -0.907546 0.158343 + -0.829495 0.290214 3.64637 -0.401557 -0.908886 0.112597 + -1.19868 0.33381 3.29126 -0.323772 -0.888675 0.324697 + -1.04472 0.343259 3.44889 -0.260551 -0.940243 0.219219 + -0.923729 0.307112 3.4815 -0.351057 -0.920093 0.173745 + -0.839335 0.283289 3.56156 -0.386883 -0.913465 0.12611 + -1.20987 0.304616 3.20482 -0.319033 -0.889879 0.326088 + -1.05055 0.315746 3.36455 -0.261537 -0.915099 0.306906 + -0.931271 0.292165 3.39719 -0.321118 -0.912818 0.252285 + -0.842599 0.273449 3.47381 -0.355943 -0.922549 0.149022 + -1.22724 0.281244 3.12211 -0.259298 -0.93868 0.227253 + -1.0655 0.294472 3.2842 -0.251211 -0.918822 0.304399 + -0.94622 0.270982 3.31688 -0.269348 -0.913575 0.304684 + -0.850141 0.258502 3.3895 -0.318009 -0.925426 0.20605 + -1.3309 0.296182 3.03103 -0.39134 -0.893669 0.219565 + -1.25861 0.275212 3.03255 -0.336561 -0.911648 0.235848 + -1.08286 0.271099 3.20148 -0.292172 -0.881512 0.370906 + -0.955817 0.242177 3.23497 -0.25585 -0.882947 0.39363 + -0.848922 0.240285 3.30245 -0.263867 -0.928569 0.261024 + -1.27815 0.254457 2.9473 -0.411056 -0.87378 0.259888 + -1.10375 0.236451 3.12569 -0.390361 -0.827473 0.403615 + -0.976704 0.207529 3.15919 -0.257219 -0.864092 0.432647 + -0.858519 0.211475 3.22055 -0.204674 -0.896785 0.392282 + -1.27644 0.232753 2.85409 -0.415409 -0.880744 0.22743 + -1.12329 0.215782 3.04049 -0.389423 -0.865725 0.314438 + -0.987582 0.174583 3.08025 -0.274462 -0.889022 0.366483 + -0.862611 0.172535 3.13899 -0.18557 -0.893917 0.408014 + -1.27729 0.20953 2.76852 -0.396229 -0.90494 0.155195 + -1.1375 0.190275 2.96227 -0.437359 -0.844223 0.309846 + -1.00179 0.149073 3.00203 -0.304167 -0.889565 0.340817 + -0.87349 0.139587 3.06006 -0.178451 -0.904682 0.386918 + -1.13835 0.167054 2.87669 -0.448971 -0.848297 0.280744 + -1.00819 0.121292 2.91955 -0.320266 -0.884921 0.33815 + -0.87924 0.105543 2.97703 -0.192909 -0.916111 0.351464 + -0.740831 0.076886 2.95827 -0.108706 -0.939587 0.32459 + -0.735081 0.110928 3.0413 -0.136091 -0.924316 0.356538 + -1.0181 0.09005 2.83806 -0.310583 -0.899854 0.306268 + -0.885642 0.077761 2.89455 -0.181811 -0.940328 0.287626 + -0.740988 0.051478 2.87467 -0.0965122 -0.960605 0.26062 + -0.579673 0.064888 2.94204 -0.0474531 -0.964764 0.2588 + -0.574499 0.084859 3.02466 -0.0729616 -0.954356 0.289621 + -0.878345 0.056773 2.8081 -0.151753 -0.957061 0.246994 + -0.733691 0.030489 2.78823 -0.110125 -0.967569 0.227339 + -0.579831 0.039477 2.85846 -0.0353697 -0.956076 0.290978 + -0.41875 0.027249 2.82584 -0.0136209 -0.963887 0.265964 + -0.419744 0.045337 2.90591 -0.0571255 -0.974156 0.218534 + -0.723651 0.010684 2.70473 -0.10459 -0.971748 0.211581 + -0.578916 0.01297 2.77557 -0.0522859 -0.963274 0.263381 + -0.417835 0.000743 2.74295 -0.000300291 -0.968764 0.247986 + -0.252623 0.013328 2.77215 0.00742963 -0.973262 0.229576 + -0.253617 0.031415 2.85222 -0.0556276 -0.987708 0.146079 + -0.568876 -0.006835 2.69207 -0.0506149 -0.979906 0.192931 + -0.412647 -0.015497 2.66368 -0.00305939 -0.983551 0.180604 + -0.251053 -0.004567 2.69474 0.0250989 -0.978808 0.203234 + -0.139327 -0.007745 2.68045 0.0573897 -0.991061 0.120432 + -0.140897 0.010143 2.75787 -0.0912459 -0.979674 0.178644 + -0.399308 -0.028286 2.58303 -0.0233685 -0.998705 0.0451859 + -0.245864 -0.020802 2.61547 0.0529546 -0.986704 0.153659 + -0.137669 -0.014182 2.6022 0.111937 -0.988315 0.103456 + -0.086319 0.003583 2.70243 0.0140312 -0.999222 0.0368526 + -0.084593 0.005254 2.78074 -0.139591 -0.98695 0.0802788 + -0.245797 -0.028469 2.53855 0.0323361 -0.999338 0.0166495 + -0.137601 -0.021854 2.52529 0.189968 -0.981789 -0.0016456 + -0.084661 -0.002766 2.62423 0.0693223 -0.996505 0.0466067 + -0.043617 -0.005494 2.63555 -0.372329 -0.928101 0.000368724 + -0.045034 -0.004085 2.71171 -0.40235 -0.914846 0.0342334 + -0.133605 -0.016529 2.44927 0.21348 -0.968449 -0.128582 + -0.080051 -0.001158 2.54624 0.161011 -0.985857 -0.0464948 + -0.039007 -0.003886 2.55757 -0.344754 -0.934951 -0.0837376 + -0.01377 -0.02925 2.6329 -0.323546 -0.945656 -0.0324408 + -0.015187 -0.027839 2.70906 -0.325786 -0.943135 0.0660271 + -0.076054 0.004253 2.47027 0.215494 -0.971138 -0.102244 + -0.036398 0.005475 2.48295 -0.285958 -0.948344 -0.137374 + -0.01377 -0.022748 2.55703 -0.316563 -0.942784 -0.104624 + 0.013768 -0.022748 2.55703 0.31904 -0.942303 -0.101382 + 0.013768 -0.02925 2.6329 0.32558 -0.94486 -0.0351615 + -0.029931 0.017297 2.40708 -0.227768 -0.947469 -0.224554 + -0.01116 -0.013386 2.48242 -0.302209 -0.936814 -0.176206 + 0.011169 -0.013386 2.48242 0.305559 -0.934796 -0.181082 + 0.039005 -0.003886 2.55757 0.342515 -0.936062 -0.0804491 + 0.043615 -0.005498 2.63556 0.370629 -0.928779 -0.00204399 + -0.01116 0.005243 2.40935 -0.265884 -0.930501 -0.251939 + 0.011169 0.005243 2.40935 0.273892 -0.930536 -0.243077 + 0.036407 0.005475 2.48295 0.281456 -0.948855 -0.143028 + 0.080059 -0.001158 2.54624 -0.140097 -0.989657 -0.0308614 + 0.007227 0.024152 2.3404 0.247769 -0.908647 -0.336111 + 0.02994 0.017302 2.40707 0.223806 -0.950036 -0.217585 + 0.069587 0.016073 2.3944 -0.226598 -0.956161 -0.185498 + 0.076054 0.004253 2.47027 -0.219523 -0.97096 -0.0951173 + 0.025998 0.036207 2.33812 0.154177 -0.944426 -0.290325 + 0.05992 0.03462 2.32127 -0.247528 -0.94531 -0.212413 + 0.127574 -0.000582 2.37404 -0.187255 -0.96054 -0.205666 + 0.133604 -0.016529 2.44927 -0.203643 -0.971492 -0.121378 + 0.13761 -0.021854 2.52529 -0.197223 -0.980318 0.00891414 + 0.117906 0.017966 2.30092 -0.154899 -0.948701 -0.275631 + 0.229339 -0.00815 2.38615 0.0517479 -0.961788 -0.268862 + 0.23537 -0.024098 2.46137 -0.00772249 -0.990875 -0.134565 + 0.245797 -0.028469 2.53855 -0.0291239 -0.999364 0.0205959 + 0.137677 -0.014182 2.6022 -0.138502 -0.986774 0.0842314 + 0.198737 0.042713 2.24145 0.0790131 -0.938649 -0.3357 + 0.214261 0.01562 2.31178 0.0905312 -0.93267 -0.349187 + 0.367796 -0.000722 2.43029 0.115602 -0.939701 -0.321868 + 0.388881 -0.023827 2.5059 0.0613183 -0.982643 -0.17508 + 0.399308 -0.028286 2.58303 0.0142192 -0.998566 0.0516119 + 0.331539 0.051209 2.27994 0.100364 -0.937363 -0.333584 + 0.352718 0.023041 2.35593 0.10372 -0.93444 -0.340682 + 0.518198 0.003392 2.45356 0.035725 -0.963758 -0.264377 + 0.539283 -0.019714 2.52918 0.0662853 -0.985258 -0.15771 + 0.555538 -0.019623 2.61142 0.056973 -0.995726 0.072684 + 0.478334 0.050861 2.29834 -0.0256344 -0.965309 -0.259848 + 0.499512 0.022608 2.37428 0.00516555 -0.956491 -0.291716 + 0.675869 -0.000111 2.45303 0.0499337 -0.982121 -0.181507 + 0.686816 -0.008481 2.53812 0.0755558 -0.994653 -0.0704025 + 0.703071 -0.008483 2.62033 0.100154 -0.991217 0.0863581 + 0.637802 0.036659 2.29194 -0.0313835 -0.981711 -0.187772 + 0.657184 0.019105 2.37374 0.00435097 -0.974719 -0.223391 + 0.803247 0.008962 2.48331 0.156777 -0.978263 -0.135727 + 0.814194 0.000593 2.56841 0.11018 -0.99391 0.00170079 + 0.845861 0.012058 2.64355 0.115008 -0.982319 0.147725 + 0.768605 0.034296 2.32323 0.0225806 -0.990275 -0.137281 + 0.787987 0.016661 2.40498 0.162167 -0.96757 -0.193675 + 0.896145 0.022032 2.55048 0.285048 -0.928757 -0.236977 + 0.952262 0.022123 2.61172 0.20575 -0.978294 -0.0246542 + 0.983929 0.03359 2.68686 0.212968 -0.951543 0.221832 + 0.880885 0.02973 2.47214 0.194398 -0.976968 -0.0879949 + 1.03752 0.060968 2.49944 0.23423 -0.967839 -0.0917835 + 1.09364 0.061061 2.56068 0.341591 -0.938987 -0.0402388 + 1.11615 0.079097 2.63903 0.456861 -0.876657 0.150834 + 1.00619 0.064412 2.75787 0.275065 -0.923622 0.26695 + 1.02825 0.056105 2.41526 0.228605 -0.973314 0.0199946 + 1.22639 0.111645 2.32646 0.374927 -0.922438 0.0923994 + 1.22502 0.129205 2.42024 0.429713 -0.896987 0.103732 + 1.24753 0.147325 2.49866 0.491019 -0.863128 0.11794 + 1.35392 0.161294 2.23726 0.465482 -0.882209 0.0709454 + 1.35255 0.178855 2.33105 0.397579 -0.909946 0.118018 + 1.35813 0.192681 2.4271 0.373681 -0.915699 0.147845 + 1.25187 0.169242 2.5913 0.529284 -0.829683 0.177437 + 1.13842 0.10992 2.71005 0.500446 -0.841388 0.204009 + 1.4512 0.206969 2.31095 0.366363 -0.930147 0.0245943 + 1.45678 0.220883 2.40706 0.328811 -0.935288 0.13084 + 1.36247 0.214598 2.51974 0.365674 -0.914245 0.174468 + 1.35254 0.225228 2.60113 0.355286 -0.923857 0.142338 + 1.26171 0.195051 2.6764 0.486274 -0.864128 0.129692 + 1.50397 0.242657 2.18154 0.451819 -0.884025 -0.119834 + 1.5217 0.24162 2.28234 0.434757 -0.899392 -0.0456044 + 1.53175 0.243749 2.36965 0.435367 -0.897784 0.0666279 + 1.459 0.23882 2.50859 0.312116 -0.936378 0.160564 + 1.44907 0.249449 2.58998 0.316463 -0.935557 0.156793 + 1.56516 0.281298 2.16401 0.414802 -0.897318 -0.150865 + 1.57529 0.272073 2.23359 0.384713 -0.91638 -0.110652 + 1.58533 0.274293 2.32094 0.407199 -0.913049 -0.0230182 + 1.53396 0.261693 2.47117 0.32399 -0.939241 0.113384 + 1.4665 0.267522 2.65207 0.343452 -0.91679 0.203806 + 1.5508 0.28849 2.07756 0.423082 -0.894568 -0.144047 + 1.64876 0.321749 2.11335 0.337081 -0.933681 -0.120896 + 1.65888 0.312527 2.18292 0.369771 -0.920408 -0.126962 + 1.66021 0.306524 2.25632 0.379235 -0.922868 -0.0670414 + 1.59423 0.273512 2.3919 0.263957 -0.964513 -0.00646079 + 1.64886 0.328708 2.0401 0.303443 -0.945717 -0.116365 + 1.76637 0.36327 2.04343 0.317971 -0.947264 -0.0398122 + 1.75482 0.359828 2.1202 0.360645 -0.931714 -0.0429499 + 1.75615 0.353735 2.19355 0.373931 -0.922008 -0.100382 + 1.76647 0.370235 1.97017 0.265854 -0.961691 -0.0668771 + 1.86793 0.400675 1.98045 0.314336 -0.948909 0.0276645 + 1.85638 0.397236 2.0572 0.350977 -0.936184 0.0193697 + 1.85669 0.399638 2.13244 0.376879 -0.925698 -0.0323272 + 1.75317 0.342798 2.27029 0.383221 -0.920114 -0.0808235 + 1.86879 0.401352 1.82807 0.171887 -0.98507 0.00964778 + 1.86385 0.395455 1.90469 0.247719 -0.968823 -0.00403978 + 1.94478 0.420302 1.91885 0.238577 -0.966283 0.0968396 + 1.96191 0.434751 1.99342 0.30569 -0.948553 0.0824715 + 1.96222 0.437152 2.06866 0.364602 -0.927875 0.0781899 + 1.86227 0.396727 1.75169 0.0685158 -0.997487 -0.0180336 + 1.9283 0.401439 1.76872 0.0159164 -0.99211 0.124359 + 1.9407 0.415079 1.8431 0.141149 -0.984943 0.099819 + 2.01429 0.419449 1.81933 0.130007 -0.969133 0.209472 + 1.92178 0.396725 1.69229 -0.136905 -0.984372 0.110761 + 1.98152 0.381463 1.66792 -0.17876 -0.959764 0.216558 + 1.99393 0.39519 1.74235 0.00196946 -0.970289 0.241942 + 1.95386 0.34866 1.51534 -0.40336 -0.899508 0.167887 + 1.9663 0.36556 1.59087 -0.268356 -0.930241 0.250272 + 2.01282 0.326943 1.53155 0.00321771 -0.968741 0.248053 + 2.03896 0.355975 1.61187 0.193475 -0.944943 0.263913 + 2.05932 0.380315 1.68891 0.288418 -0.920179 0.264736 + 1.948 0.344573 1.43782 -0.419415 -0.897815 0.134237 + 1.9927 0.303234 1.36722 -0.216156 -0.972486 0.0868707 + 1.9976 0.311036 1.45451 -0.149816 -0.977921 0.145691 + 2.06555 0.327452 1.42387 0.453865 -0.885257 0.101614 + 1.98685 0.299233 1.28975 -0.357079 -0.929721 -0.0900791 + 2.04357 0.304913 1.25091 0.359107 -0.93321 -0.0126455 + 2.04846 0.312631 1.33814 0.398184 -0.915475 0.0579219 + 2.00194 0.314248 1.20674 -0.465474 -0.863371 -0.19474 + 2.05901 0.323441 1.07862 0.301738 -0.952336 -0.0448411 + 2.04391 0.308428 1.16162 0.165733 -0.976004 -0.141239 + 2.10624 0.362893 1.15849 0.574491 -0.815857 -0.0658557 + 2.11922 0.35999 1.24832 0.584053 -0.811367 -0.0237886 + 2.10658 0.366494 1.06925 0.61662 -0.787077 -0.0170255 + 2.18187 0.421666 0.948888 0.549531 -0.835362 -0.0136267 + 2.17853 0.415693 1.04723 0.503162 -0.861917 -0.062667 + 2.30227 0.493861 0.894243 0.593009 -0.804802 -0.025169 + 2.19151 0.412788 1.13706 0.558891 -0.828712 -0.0296052 + 2.1363 0.374728 1.33399 0.612072 -0.789991 0.0358038 + 2.09169 0.356484 1.50419 0.520052 -0.840202 0.153645 + 2.08491 0.41771 1.76634 0.400895 -0.880288 0.253725 + 2.09887 0.44334 1.84355 0.485498 -0.837264 0.251558 + 2.03142 0.433901 1.89389 0.252587 -0.946323 0.201673 + 2.04537 0.459445 1.97105 0.371276 -0.912266 0.172987 + 2.04911 0.470755 2.04646 0.497279 -0.847802 0.184243 + 1.96596 0.448469 2.14407 0.449456 -0.891475 0.0571081 + 1.85372 0.388614 2.20914 0.411948 -0.90918 -0.0607486 + 2.10762 0.50394 2.00259 0.639358 -0.723494 0.26034 + 2.05096 0.495578 2.12347 0.612678 -0.766037 0.194455 + 1.96174 0.44608 2.2196 0.536178 -0.839903 0.0841268 + 1.84949 0.386313 2.28472 0.464605 -0.88401 -0.0516566 + 2.11079 0.542994 2.08414 0.688071 -0.678793 0.256511 + 2.03672 0.499833 2.1991 0.661382 -0.725714 0.189508 + 1.9475 0.45034 2.29522 0.604801 -0.790978 0.0925665 + 2.10428 0.561698 2.16435 0.700684 -0.679434 0.217744 + 2.03022 0.518539 2.2793 0.688775 -0.703435 0.175409 + 1.93746 0.448136 2.37084 0.662402 -0.742008 0.103185 + 1.8517 0.375213 2.36135 0.520052 -0.853017 -0.0436667 + 2.10679 0.59144 2.24863 0.723006 -0.650297 0.233189 + 2.0094 0.513188 2.35317 0.71909 -0.667688 0.192616 + 1.91665 0.442783 2.44471 0.69935 -0.694684 0.168297 + 1.84167 0.373009 2.43697 0.575044 -0.814544 0.0764418 + 1.75909 0.327635 2.42095 0.367097 -0.929696 -0.0300774 + 2.18985 0.64336 2.1567 0.722375 -0.640196 0.261387 + 2.17752 0.67142 2.2417 0.724353 -0.620771 0.299926 + 2.09014 0.602258 2.3281 0.761244 -0.579975 0.290061 + 1.99275 0.524004 2.43263 0.759045 -0.606003 0.237931 + 2.25581 0.731185 2.16119 0.739712 -0.627614 0.242746 + 2.24337 0.743196 2.25178 0.728047 -0.608041 0.316597 + 2.1581 0.695131 2.32363 0.726893 -0.572109 0.379892 + 2.07072 0.626055 2.41008 0.788761 -0.498229 0.360033 + 2.33809 0.811585 2.13373 0.775889 -0.581839 0.243843 + 2.31965 0.836749 2.22674 0.785558 -0.465103 0.408139 + 2.21491 0.766721 2.33263 0.736101 -0.481272 0.475954 + 2.12964 0.71866 2.40448 0.740635 -0.456768 0.492771 + 2.44299 0.898732 1.98359 0.825074 -0.510951 0.241211 + 2.42456 0.923891 2.07661 0.824582 -0.495084 0.273783 + 2.41365 0.955533 2.1768 0.805677 -0.516127 0.290684 + 2.27852 0.865364 2.30618 0.753947 -0.502688 0.422929 + 2.17378 0.795248 2.41202 0.716012 -0.544692 0.43662 + 2.51609 1.00412 1.90324 0.906434 -0.382993 0.178026 + 2.50013 1.00485 1.98979 0.88627 -0.414877 0.205918 + 2.48922 1.03649 2.08999 0.867051 -0.450986 0.211742 + 2.3982 0.9821 2.26839 0.759202 -0.590496 0.273727 + 2.26307 0.891843 2.39772 0.707539 -0.670395 0.223515 + 2.5645 1.13589 1.89522 0.937552 -0.312947 0.151858 + 2.54855 1.13661 1.98176 0.923831 -0.35244 0.149408 + 2.55736 1.17874 2.0464 0.888205 -0.453412 0.0742183 + 2.49803 1.0787 2.15467 0.868311 -0.45539 0.196612 + 2.39503 1.02079 2.36737 0.766934 -0.592084 0.247486 + 2.61058 1.27381 1.93234 0.913306 -0.407036 0.0139468 + 2.57253 1.20236 2.14269 0.847912 -0.525126 0.0727171 + 2.49487 1.11738 2.25367 0.816979 -0.545548 0.186875 + 2.37461 1.04129 2.47787 0.745694 -0.636125 0.198206 + 2.24738 0.891026 2.48613 0.697465 -0.693427 0.180836 + 2.62575 1.29734 2.02858 0.905788 -0.423439 0.01569 + 2.65077 1.36379 2.06668 0.931364 -0.360836 0.0485618 + 2.57453 1.23392 2.24142 0.870335 -0.471684 0.14153 + 2.49688 1.14894 2.35241 0.790432 -0.588937 0.168432 + 2.66678 1.41571 2.12635 0.930563 -0.361042 0.0608322 + 2.59055 1.28584 2.3011 0.884862 -0.436871 0.161748 + 2.47789 1.15753 2.47854 0.800817 -0.552076 0.232175 + 2.35563 1.04979 2.60395 0.721874 -0.618021 0.311366 + 2.22697 0.911444 2.59657 0.710296 -0.635696 0.302276 + 2.76286 1.69898 2.15471 0.924898 -0.372068 0.0782903 + 2.70903 1.55131 2.28208 0.931146 -0.353674 0.0887814 + 2.63475 1.40743 2.3743 0.893463 -0.414586 0.172748 + 2.52209 1.27912 2.55174 0.842105 -0.457189 0.286071 + 2.78184 1.79753 2.44243 0.925221 -0.357334 0.127585 + 2.70756 1.65364 2.53465 0.906463 -0.376509 0.19122 + 2.64147 1.51538 2.56272 0.867698 -0.419687 0.266389 + 2.53871 1.40196 2.66698 0.855162 -0.444665 0.266404 + 2.41932 1.16569 2.65599 0.761665 -0.539585 0.358768 + 2.88684 2.14071 2.57242 0.932067 -0.309508 0.188296 + 2.83049 2.01008 2.62288 0.919731 -0.333562 0.206956 + 2.77132 1.88583 2.67448 0.904144 -0.356213 0.235873 + 2.70523 1.74766 2.70259 0.884542 -0.38671 0.260845 + 2.90666 2.30602 2.7003 0.934483 -0.262375 0.240625 + 2.85299 2.1988 2.7792 0.91438 -0.292627 0.279783 + 2.79381 2.07464 2.83085 0.901854 -0.315692 0.294954 + 2.73262 1.95246 2.88208 0.882984 -0.342887 0.320574 + 2.96667 2.61474 2.76017 0.954485 -0.196217 0.224625 + 2.92343 2.55214 2.87299 0.936017 -0.227377 0.268649 + 2.86976 2.44501 2.95194 0.918081 -0.257978 0.300955 + 2.81471 2.34254 3.02704 0.902224 -0.282631 0.325749 + 3.00339 2.67289 2.63705 0.970403 -0.162995 0.178185 + 2.97642 2.9104 2.94847 0.956962 -0.1669 0.237419 + 2.93318 2.84781 3.06129 0.942228 -0.193862 0.273172 + 2.88402 2.77684 3.17041 0.921825 -0.224337 0.316088 + 2.82897 2.67436 3.24551 0.906141 -0.25235 0.339453 + 3.00934 2.93258 2.81406 0.972651 -0.138453 0.186499 + 3.01648 3.21906 2.97146 0.975071 -0.11567 0.18936 + 2.98356 3.19688 3.10587 0.962453 -0.143341 0.230518 + 2.94526 3.14078 3.22244 0.948179 -0.170598 0.268054 + 2.8961 3.06982 3.33155 0.932595 -0.197519 0.30208 + 3.03511 2.96217 2.67901 0.982085 -0.118509 0.14651 + 3.04144 3.2511 2.84297 0.983367 -0.0948271 0.154909 + 3.01927 3.52656 3.11545 0.978498 -0.0149116 0.205719 + 2.99093 3.47223 3.23235 0.966157 -0.0494565 0.253171 + 2.95263 3.41614 3.34891 0.95105 -0.0763788 0.299451 + 3.0629 3.26618 2.70544 0.989341 -0.0763806 0.123976 + 3.04423 3.55852 2.9869 0.986128 0.00244653 0.165971 + 2.99013 3.85874 3.14489 0.964082 0.163447 0.209359 + 2.9702 3.80311 3.25965 0.957335 0.127249 0.259456 + 2.94185 3.7487 3.3765 0.945998 0.100162 0.308311 + 3.06202 3.59362 2.8587 0.990462 0.0215801 0.136082 + 3.00792 3.89376 3.01664 0.969245 0.167505 0.180294 + 2.88357 4.12758 3.30345 0.921376 0.274884 0.274781 + 2.86363 4.07195 3.41821 0.903764 0.26524 0.335944 + 2.84151 4.00321 3.52207 0.890837 0.242976 0.38389 + 3.02245 3.93634 2.89569 0.970236 0.182804 0.158821 + 2.89556 4.19064 3.19443 0.922974 0.300742 0.240153 + 2.77869 4.4125 3.29715 0.850838 0.436739 0.29212 + 2.76669 4.34953 3.40622 0.835236 0.40272 0.374429 + 2.71836 4.34324 3.50512 0.79382 0.42622 0.433804 + 3.03632 3.96331 2.76538 0.973727 0.180416 0.138948 + 2.91008 4.23313 3.07343 0.924412 0.308683 0.224003 + 2.75332 4.51485 3.20068 0.832435 0.468175 0.296418 + 2.58702 4.62271 3.40426 0.753415 0.53316 0.384844 + 2.53868 4.61643 3.50315 0.740639 0.539317 0.400737 + 3.04793 4.00287 2.62426 0.975742 0.194576 0.100334 + 2.92507 4.27844 2.95516 0.931997 0.296361 0.208689 + 2.76831 4.56016 3.08241 0.838401 0.451904 0.304739 + 2.59133 4.8202 3.1034 0.759681 0.554875 0.339113 + 2.56165 4.72498 3.30773 0.743484 0.551602 0.378109 + 3.04409 4.0802 2.45051 0.976736 0.204721 0.0638477 + 2.93668 4.31809 2.81409 0.943916 0.285296 0.166219 + 2.82002 4.55769 2.95729 0.865283 0.411798 0.285845 + 3.0344 4.15634 2.33024 0.973152 0.228878 0.0242978 + 2.944 4.36891 2.69926 0.945532 0.289744 0.148386 + 2.82734 4.60859 2.84251 0.87868 0.435125 0.196435 + 2.64304 4.81781 2.97834 0.785292 0.538568 0.305387 + 3.01826 4.2199 2.21454 0.972814 0.231584 -0.000810247 + 2.93431 4.44513 2.57904 0.939594 0.320855 0.119229 + 2.7918 4.70423 2.76488 0.857076 0.466827 0.217929 + 2.6075 4.91344 2.9007 0.769773 0.556263 0.313083 + 2.39792 5.14652 2.96539 0.719119 0.603699 0.344114 + 2.99596 4.31437 2.09793 0.970352 0.241258 -0.0145129 + 2.92178 4.51901 2.47688 0.942928 0.316274 0.104198 + 2.77926 4.7781 2.66272 0.853473 0.463221 0.238767 + 2.61275 4.99135 2.73675 0.778012 0.562199 0.280409 + 2.40318 5.22443 2.80145 0.733661 0.604146 0.311045 + 2.97314 4.39094 1.99271 0.970512 0.240119 -0.0212097 + 2.89948 4.61338 2.36022 0.945029 0.318085 0.0757767 + 2.80347 4.81152 2.51723 0.876333 0.438116 0.200233 + 2.63696 5.02486 2.59132 0.788889 0.563776 0.244562 + 2.41336 5.32076 2.59061 0.743277 0.601154 0.293517 + 2.95514 4.4525 1.85547 0.972238 0.230399 -0.0408542 + 2.87809 4.72406 2.17391 0.941433 0.333482 0.0499389 + 2.78208 4.9222 2.33093 0.869906 0.475416 0.131313 + 2.73025 5.03293 2.22795 0.851495 0.517468 0.0847543 + 2.58513 5.13559 2.48833 0.78646 0.567862 0.242929 + 2.92916 4.53973 1.75878 0.966881 0.251215 -0.0450822 + 2.86009 4.78554 2.03663 0.922881 0.385037 -0.00606439 + 2.84193 4.80944 1.90563 0.925108 0.379538 -0.0112586 + 2.71208 5.05683 2.09695 0.874878 0.482649 0.04049 + 2.56369 5.28679 2.23664 0.812925 0.549223 0.19367 + 2.39192 5.47197 2.33891 0.737031 0.616664 0.276605 + 2.70169 5.11875 1.9311 0.889085 0.44734 0.0970254 + 2.55329 5.34863 2.07074 0.828516 0.543798 0.133585 + 2.36036 5.57092 2.18392 0.741282 0.635063 0.217245 + 2.1445 5.69545 2.42503 0.665438 0.6831 0.300943 + 2.33453 5.63576 2.06221 0.747108 0.641041 0.175771 + 2.104 5.84604 2.1598 0.66803 0.701579 0.248037 + 2.11294 5.7944 2.27003 0.663853 0.690611 0.286975 + 2.30026 5.70265 1.96015 0.74683 0.650257 0.139322 + 2.06973 5.91293 2.05774 0.661925 0.709017 0.243206 + 1.8082 6.0823 2.18638 0.566887 0.767757 0.298645 + 1.87858 6.009 2.24893 0.590669 0.761627 0.266522 + 1.88752 5.95737 2.35916 0.585268 0.739929 0.331611 + 2.28482 5.73189 1.88371 0.749847 0.643049 0.155617 + 2.0302 5.98832 1.94595 0.645917 0.736043 0.202563 + 1.76867 6.15769 2.07459 0.558241 0.786444 0.264335 + 1.72022 6.22202 1.95958 0.530466 0.825945 0.190844 + 1.4699 6.27735 2.25855 0.478487 0.824361 0.302455 + 1.50251 6.21269 2.36954 0.49058 0.801251 0.342531 + 1.57288 6.13948 2.43215 0.520422 0.781245 0.344699 + 1.36416 6.39673 2.02638 0.418071 0.884161 0.208509 + 1.42144 6.34167 2.14354 0.438627 0.866187 0.23943 + 1.22438 6.35483 2.39954 0.382326 0.863093 0.329997 + 1.29037 6.45835 1.91044 0.413127 0.888746 0.198635 + 1.08876 6.45985 2.22505 0.337227 0.903197 0.265542 + 1.14603 6.40479 2.34221 0.333728 0.896316 0.291963 + 0.962238 6.36502 2.60049 0.303487 0.866417 0.396505 + 1.25699 6.29017 2.51054 0.416426 0.818026 0.396766 + 1.19721 6.52356 1.8071 0.395743 0.898278 0.191008 + 0.92797 6.57875 2.02669 0.320666 0.914523 0.246619 + 1.02113 6.51363 2.13009 0.335588 0.903247 0.267443 + 0.827272 6.46639 2.46352 0.2759 0.89805 0.342615 + 0.883886 6.41497 2.54317 0.283659 0.880641 0.379486 + 1.50341 6.40817 1.60316 0.481439 0.864822 0.142477 + 1.47639 6.44575 1.47206 0.491586 0.861509 0.127067 + 1.17018 6.56106 1.67595 0.397142 0.903978 0.158438 + 1.03768 6.62266 1.63085 0.354249 0.922635 0.152485 + 1.3745 6.51916 1.34411 0.444843 0.892595 0.0734048 + 1.242 6.58068 1.29897 0.38719 0.919204 0.0717442 + 1.41507 6.51924 1.01858 0.459762 0.887813 0.020166 + 1.10298 6.64171 1.17946 0.347351 0.936704 0.0439558 + 0.911761 6.6831 1.53417 0.316562 0.941743 0.113614 + 1.27606 6.58026 0.899078 0.406722 0.913409 0.016194 + 0.960672 6.69594 1.07172 0.310669 0.950148 0.0265456 + 0.769448 6.73725 1.42637 0.273924 0.95876 0.0757916 + 0.698665 6.70618 1.81299 0.269257 0.941558 0.20241 + 1.34251 6.55074 0.580817 0.451397 0.886043 -0.105678 + 1.19359 6.61972 0.794943 0.361378 0.932412 -0.00367437 + 1.05861 6.66359 0.798562 0.306181 0.951637 -0.025301 + 0.734752 6.76539 0.984238 0.275986 0.961056 0.0142514 + 0.664641 6.76811 1.36752 0.252908 0.965384 0.0638015 + 1.45582 6.44337 0.366384 0.500004 0.834441 -0.231745 + 1.23376 6.59237 0.537905 0.342467 0.923487 -0.172881 + 1.09878 6.63633 0.541574 0.296987 0.943048 -0.149862 + 0.832688 6.73303 0.711083 0.266769 0.960664 -0.0771992 + 0.593452 6.80476 0.946639 0.241569 0.970304 -0.0124353 + 1.28241 6.49882 0.24295 0.391359 0.886621 -0.246457 + 1.17419 6.54288 0.259035 0.314415 0.913465 -0.25831 + 0.979355 6.65734 0.482576 0.267833 0.943903 -0.193167 + 0.837682 6.68236 0.402646 0.22827 0.942763 -0.243087 + 0.691015 6.75805 0.631154 0.240113 0.96354 -0.118057 + 0.571966 6.78465 0.602867 0.157263 0.975067 -0.156566 + 0.474402 6.83137 0.918353 0.173058 0.983976 -0.0429265 + 0.435957 6.83259 1.30843 0.190581 0.979422 0.0664219 + 0.523341 6.80757 1.32997 0.246637 0.965911 0.0786573 + 0.533797 6.77079 1.67088 0.175863 0.975253 0.133994 + 0.496008 6.77776 0.527806 0.133089 0.963008 -0.234315 + 0.371306 6.80834 0.581647 0.114747 0.974147 -0.194603 + 0.321333 6.85039 0.899611 0.0956722 0.993856 -0.0556407 + 0.100983 6.86306 1.27106 0.0305822 0.999006 0.0324287 + 0.282888 6.85153 1.28964 0.0888201 0.995273 0.0392824 + 0.242537 6.83233 1.5989 0.0966845 0.986142 0.134818 + 0.325972 6.80725 1.68334 0.171629 0.965591 0.195392 + 0.413356 6.78223 1.70487 0.172374 0.969258 0.175573 + -0.100983 6.86309 0.880213 -0.0301542 0.997468 -0.0644153 + -0.100983 6.86306 1.27106 -0.0311355 0.999008 0.031849 + -0.060632 6.84387 1.58031 -0.0238566 0.991803 0.125525 + 0.060632 6.84387 1.58031 0.023854 0.991803 0.125527 + -0.321333 6.85039 0.899611 -0.0952661 0.993922 -0.0551612 + -0.282888 6.85153 1.28964 -0.0884482 0.99533 0.0386617 + -0.242537 6.83233 1.5989 -0.0966814 0.986149 0.134768 + -0.060632 6.77963 1.91316 -0.0333648 0.975356 0.218101 + 0.060632 6.77963 1.91316 0.0331918 0.975788 0.216185 + -0.474402 6.83137 0.918353 -0.174478 0.983844 -0.0400988 + -0.435957 6.83259 1.30843 -0.19441 0.978914 0.0626998 + -0.325972 6.80725 1.68334 -0.166641 0.969998 0.177017 + -0.144067 6.75447 1.99756 -0.0560148 0.970728 0.23356 + 0.050108 6.70567 2.20727 0.0191598 0.94888 0.315055 + -0.571968 6.78465 0.602867 -0.165925 0.972859 -0.16129 + -0.593452 6.80476 0.946639 -0.238817 0.971014 -0.00991598 + -0.523341 6.80757 1.32997 -0.2448 0.966687 0.0747638 + -0.413356 6.78223 1.70487 -0.184286 0.968488 0.16754 + -0.294177 6.73724 2.02838 -0.116182 0.964747 0.236148 + -0.691017 6.75805 0.631154 -0.234265 0.962265 -0.138439 + -0.832686 6.73303 0.711083 -0.274443 0.958242 -0.0803349 + -0.734753 6.76539 0.984238 -0.275625 0.961175 0.0131982 + -0.664642 6.76811 1.36752 -0.2502 0.965978 0.0654683 + -0.533797 6.77079 1.67088 -0.175863 0.975253 0.133995 + -0.979353 6.65735 0.482567 -0.273644 0.946061 -0.17346 + -1.05861 6.66359 0.798562 -0.302155 0.952641 -0.0343206 + -0.960673 6.69594 1.07172 -0.311622 0.949848 0.0260678 + -0.769449 6.73725 1.42637 -0.274441 0.958434 0.0780185 + -0.638605 6.73993 1.72974 -0.250156 0.954856 0.160226 + -1.09878 6.63633 0.541574 -0.276758 0.950898 -0.138558 + -1.23376 6.59237 0.537905 -0.342433 0.923507 -0.172844 + -1.19359 6.61972 0.794943 -0.361331 0.93243 -0.00374486 + -1.17419 6.54288 0.259035 -0.310508 0.912125 -0.267606 + -1.28241 6.49882 0.24295 -0.39136 0.886621 -0.246455 + -1.34707 6.48501 0.323472 -0.424825 0.876972 -0.224598 + -1.34251 6.55074 0.580817 -0.451397 0.886043 -0.10568 + -1.42498 6.51129 0.684952 -0.49995 0.864578 -0.050538 + -1.22271 6.41721 -0.052703 -0.252991 0.892369 -0.373729 + -1.33093 6.37315 -0.068788 -0.368897 0.852815 -0.369623 + -1.44807 6.32948 -0.029744 -0.486297 0.810333 -0.326919 + -1.51273 6.31567 0.050778 -0.551009 0.792421 -0.261646 + -1.45582 6.44337 0.366384 -0.504725 0.837727 -0.208485 + -1.25933 6.30343 -0.25822 -0.296176 0.796449 -0.527209 + -1.38258 6.26348 -0.226426 -0.417446 0.756406 -0.503576 + -1.49973 6.2198 -0.187381 -0.500136 0.727892 -0.469082 + -1.60914 6.16113 -0.145152 -0.587997 0.696925 -0.410556 + -1.61436 6.25035 0.099903 -0.599716 0.759521 -0.251929 + -1.41123 6.15387 -0.342177 -0.436526 0.669571 -0.600932 + -1.53005 6.08995 -0.313864 -0.514859 0.636253 -0.574545 + -1.63947 6.03127 -0.271635 -0.585603 0.608756 -0.535242 + -1.55406 5.9805 -0.404688 -0.506626 0.564371 -0.651778 + -1.55972 6.38729 0.440731 -0.571692 0.803866 -0.164217 + -1.71826 6.19427 0.17425 -0.636188 0.735213 -0.233939 + -0.911762 6.6831 1.53417 -0.320456 0.940593 0.112216 + -0.824584 6.64574 1.90967 -0.340674 0.910563 0.234127 + -0.698665 6.70618 1.81299 -0.269471 0.942128 0.199449 + -0.414618 6.72581 1.99439 -0.172457 0.958678 0.226262 + -0.822126 6.61587 2.016 -0.296806 0.916931 0.266727 + -0.531952 6.66896 2.12045 -0.216813 0.939927 0.263683 + -0.474679 6.69206 2.07765 -0.18791 0.948779 0.253983 + -0.269292 6.67497 2.26263 -0.0982188 0.937131 0.334871 + -0.200218 6.68836 2.23805 -0.0539781 0.943883 0.325838 + -0.581012 6.59979 2.28966 -0.258779 0.903052 0.342826 + -0.529493 6.63918 2.22683 -0.206439 0.928025 0.310086 + -0.349068 6.61759 2.37783 -0.140586 0.909918 0.390237 + -0.326565 6.65188 2.30544 -0.147469 0.921502 0.359285 + -0.686856 6.56267 2.30035 -0.269102 0.911541 0.31093 + -0.499961 6.55393 2.46969 -0.173136 0.921233 0.348358 + -0.400587 6.57829 2.44071 -0.159405 0.911399 0.379396 + -0.572748 6.51135 2.53785 -0.227197 0.897176 0.378757 + -0.373621 6.51423 2.60505 -0.120892 0.903409 0.411385 + -0.274247 6.53868 2.5761 -0.0639589 0.911777 0.405674 + -0.141685 6.57025 2.50863 -0.0249631 0.911647 0.410215 + -0.119182 6.60453 2.43624 -0.0373573 0.909668 0.413653 + -0.388277 6.47524 2.68259 -0.121005 0.897519 0.42405 + -0.176785 6.43005 2.81825 -0.0228194 0.905372 0.424005 + -0.044223 6.46171 2.75082 -0.000832044 0.906535 0.42213 + 0.044223 6.46171 2.75082 0.000973426 0.905695 0.423929 + -0.050108 6.61792 2.41166 -0.0153402 0.913002 0.407666 + -0.233666 6.40344 2.87116 -0.0584052 0.901238 0.429371 + -0.044223 6.18267 3.32274 -0.00301525 0.895771 0.444507 + 0.044223 6.18267 3.32274 -0.000375389 0.883408 0.468604 + -0.101104 6.15596 3.37559 -0.0433475 0.880086 0.472831 + -0.124475 6.09432 3.48496 -0.0505963 0.858728 0.509928 + -0.14305 6.0222 3.60207 -0.0458803 0.838137 0.543526 + -0.136385 5.89102 3.79808 -0.0231056 0.815036 0.578949 + -0.096861 5.82595 3.88378 -0.00610063 0.798814 0.601546 + -0.033595 5.77673 3.94804 -0.0139803 0.7893 0.613849 + 0.033595 5.77673 3.94804 0.0141317 0.790106 0.612808 + 0.096861 5.82595 3.88378 -0.000654557 0.802035 0.597277 + 0.136385 5.89102 3.79808 0.00216317 0.818883 0.573956 + 0.148623 5.95613 3.70132 0.0301867 0.834556 0.550095 + 0.143051 6.0222 3.60207 -0.0164265 0.836582 0.547595 + 0.124475 6.09432 3.48496 -0.00245258 0.855128 0.518411 + 0.101105 6.15596 3.37559 0.0263383 0.877671 0.478539 + 0.176785 6.43005 2.81825 0.0228409 0.905335 0.424085 + -0.286638 5.61296 4.1119 -0.106085 0.761138 0.639855 + -0.197655 5.49568 4.26263 -0.0848229 0.748889 0.657245 + -0.134389 5.44638 4.32683 -0.0988236 0.7263 0.680237 + -0.033595 5.41581 4.36878 -0.0330103 0.725782 0.687132 + 0.033595 5.41581 4.36878 0.0330103 0.725782 0.687132 + -0.288186 5.27331 4.49538 -0.0325709 0.704378 0.709077 + -0.237468 5.2187 4.54617 -0.0183962 0.672358 0.739997 + -0.158013 5.22322 4.54455 -0.0644347 0.680698 0.729725 + -0.057219 5.19265 4.58649 -0.0441369 0.651127 0.757684 + -0.375693 5.11286 4.63109 -0.125624 0.626574 0.769171 + -0.324975 5.05817 4.68183 -0.0774454 0.606328 0.791435 + -0.257627 4.99574 4.73155 -0.0446107 0.574868 0.817029 + -0.178172 5.00026 4.72992 -0.00741539 0.578774 0.815455 + -0.551165 4.9418 4.71679 -0.210525 0.561817 0.800025 + -0.449579 4.90913 4.76317 -0.164434 0.535735 0.82822 + -0.38223 4.84671 4.81289 -0.136734 0.522014 0.841905 + -0.332603 4.78451 4.85881 -0.0824376 0.486759 0.869638 + -0.203725 4.79747 4.85657 -0.00671893 0.478783 0.877908 + -0.855362 4.85492 4.68866 -0.282521 0.544077 0.790039 + -0.770678 4.77739 4.76376 -0.247181 0.491926 0.834812 + -0.669092 4.74481 4.81019 -0.23065 0.485812 0.843082 + -0.572613 4.68144 4.87434 -0.217462 0.483731 0.84777 + -0.522986 4.61924 4.92026 -0.175539 0.407963 0.895964 + -1.07525 4.67905 4.71547 -0.319774 0.496196 0.807176 + -0.990563 4.60152 4.79056 -0.277527 0.448864 0.849411 + -0.88492 4.49976 4.87041 -0.266447 0.430218 0.862507 + -0.788441 4.43648 4.93462 -0.225488 0.36933 0.901527 + -1.33951 4.45427 4.74201 -0.37003 0.442199 0.81703 + -1.22576 4.32411 4.85146 -0.321498 0.388917 0.863355 + -1.12011 4.22243 4.93136 -0.275099 0.33054 0.902809 + -1.55192 4.20397 4.75893 -0.425889 0.36072 0.829759 + -1.43817 4.07381 4.86839 -0.37616 0.307449 0.874059 + -1.33197 3.94823 4.94689 -0.323093 0.246229 0.913774 + -1.0017 4.09007 5.00022 -0.214451 0.252546 0.943521 + -1.73573 3.92518 4.76543 -0.498636 0.260969 0.826594 + -1.65182 3.80226 4.84653 -0.456603 0.201046 0.866657 + -1.54562 3.67677 4.92508 -0.406468 0.136203 0.903456 + -1.21356 3.81596 5.0158 -0.253457 0.185034 0.949485 + -1.91851 3.68226 4.70637 -0.571773 0.150984 0.806399 + -1.8346 3.55934 4.78748 -0.524896 0.090492 0.846342 + -1.80006 3.43825 4.8144 -0.519398 0.0106398 0.854466 + -1.70185 3.41556 4.86911 -0.46405 0.011331 0.885737 + -1.42499 3.56737 4.98257 -0.348271 0.0874058 0.93331 + -2.08087 3.45036 4.60384 -0.656406 -0.0199555 0.754144 + -2.00319 3.36563 4.66239 -0.645437 -0.0447652 0.7625 + -1.96864 3.24454 4.68932 -0.671268 -0.0820945 0.736654 + -1.89171 3.14942 4.73467 -0.571543 -0.156056 0.805596 + -1.79349 3.12682 4.78942 -0.495968 -0.163429 0.852823 + -2.21668 3.16849 4.43025 -0.69954 -0.16886 0.694356 + -2.13899 3.08376 4.4888 -0.69583 -0.186715 0.693512 + -2.05366 3.01292 4.5517 -0.686012 -0.20679 0.697585 + -1.97672 2.9178 4.59705 -0.65711 -0.255404 0.709207 + -1.87899 2.85807 4.65711 -0.571738 -0.287899 0.768265 + -2.23071 2.75267 4.26706 -0.705719 -0.266491 0.656463 + -2.14538 2.68183 4.32996 -0.688711 -0.285678 0.666382 + -2.04499 2.64384 4.41137 -0.652489 -0.309448 0.691737 + -1.94726 2.5841 4.47144 -0.605363 -0.340779 0.719309 + -2.2638 2.40369 4.07712 -0.703425 -0.309465 0.639863 + -2.16569 2.34754 4.15417 -0.680711 -0.320905 0.658523 + -2.06529 2.30954 4.23558 -0.647659 -0.3342 0.684725 + -1.95764 2.27166 4.3132 -0.60289 -0.347635 0.718104 + -1.83623 2.54914 4.541 -0.554325 -0.360572 0.750141 + -2.13287 1.98865 4.00359 -0.679998 -0.357046 0.640407 + -2.02705 1.9426 4.08575 -0.647034 -0.363228 0.670383 + -1.9194 1.90472 4.16336 -0.609956 -0.367102 0.702275 + -1.80501 1.87262 4.24177 -0.577531 -0.366554 0.729449 + -1.8466 2.2367 4.38276 -0.566467 -0.355253 0.743579 + -1.98256 1.64831 3.95749 -0.654883 -0.411626 0.633792 + -1.87276 1.60828 4.04202 -0.622294 -0.40827 0.667882 + -1.75837 1.57617 4.12042 -0.594053 -0.396851 0.699722 + -1.64331 1.53754 4.19673 -0.571927 -0.388873 0.722272 + -1.69093 1.83115 4.30698 -0.550829 -0.362976 0.751555 + -1.81817 1.38522 3.94096 -0.643166 -0.457579 0.613969 + -1.70767 1.33952 4.02331 -0.623372 -0.439719 0.646571 + -1.59261 1.30081 4.09957 -0.596504 -0.417843 0.685266 + -1.47608 1.25865 4.17559 -0.577431 -0.406186 0.708228 + -1.52366 1.5029 4.26593 -0.552043 -0.375918 0.744267 + -1.57128 1.79651 4.37618 -0.520854 -0.35673 0.775535 + -1.73252 2.19524 4.44797 -0.536168 -0.356916 0.764941 + -1.44158 1.0534 4.07769 -0.590086 -0.436629 0.679083 + -1.32338 1.02894 4.16285 -0.563054 -0.437388 0.701186 + -1.35746 1.22365 4.248 -0.558534 -0.397408 0.728084 + -1.40504 1.46782 4.33829 -0.549269 -0.363803 0.752297 + -1.3033 0.865423 4.07208 -0.540708 -0.525265 0.657063 + -1.17891 0.862822 4.16378 -0.500702 -0.532997 0.682064 + -1.2026 1.0051 4.24194 -0.530501 -0.446044 0.720842 + -1.23668 1.19981 4.3271 -0.529513 -0.393947 0.75128 + -1.12057 0.718627 4.07593 -0.452997 -0.630202 0.630587 + -1.00324 0.698969 4.13638 -0.417269 -0.645693 0.639506 + -1.05235 0.848683 4.24327 -0.460874 -0.549519 0.696867 + -1.07604 0.990964 4.32143 -0.496606 -0.450763 0.741751 + -0.902619 0.527941 4.01681 -0.342193 -0.679927 0.648539 + -0.823602 0.487744 4.00924 -0.312669 -0.706346 0.63507 + -0.870688 0.690466 4.21011 -0.346131 -0.651755 0.67484 + -0.919796 0.840262 4.31706 -0.395413 -0.570516 0.719833 + -0.870557 0.401885 3.88975 -0.376331 -0.732886 0.566792 + -0.79154 0.361685 3.88218 -0.308815 -0.748816 0.586436 + -0.684415 0.310778 3.87075 -0.315437 -0.755333 0.574432 + -0.698136 0.433094 4.01169 -0.310837 -0.717754 0.623064 + -0.745222 0.635818 4.21257 -0.29312 -0.676987 0.675107 + -0.700396 0.270386 3.80211 -0.346508 -0.848789 0.399361 + -0.546162 0.240623 3.85626 -0.231824 -0.813878 0.532785 + -0.559883 0.362934 3.99721 -0.236413 -0.730003 0.641253 + -0.713744 0.250686 3.72123 -0.369742 -0.907429 0.199658 + -0.567089 0.212172 3.77694 -0.293639 -0.897084 0.330176 + -0.405594 0.146043 3.72688 -0.245452 -0.920474 0.304107 + -0.384667 0.174489 3.80621 -0.151287 -0.855381 0.495415 + -0.724983 0.245138 3.63444 -0.376323 -0.921602 0.0950334 + -0.580437 0.192389 3.69601 -0.330343 -0.9276 0.174448 + -0.419806 0.130899 3.64511 -0.305112 -0.940942 0.14675 + -0.222854 0.076814 3.64279 -0.260964 -0.916226 0.304019 + -0.727814 0.237982 3.54944 -0.362894 -0.925756 0.106225 + -0.579758 0.186964 3.61221 -0.346074 -0.9356 0.0698891 + -0.419127 0.125386 3.56126 -0.333597 -0.94194 0.0382462 + -0.237066 0.061669 3.56102 -0.337644 -0.936637 0.0933161 + -0.731078 0.228144 3.46168 -0.353132 -0.928178 0.117401 + -0.582589 0.17972 3.52715 -0.328464 -0.940223 0.0899577 + -0.41847 0.122742 3.48064 -0.307707 -0.949606 0.0597099 + -0.235534 0.064179 3.48367 -0.346292 -0.937974 -0.0169581 + -0.729601 0.216277 3.37663 -0.325913 -0.931132 0.163626 + -0.579692 0.171394 3.44337 -0.316242 -0.943453 0.099434 + -0.415573 0.114329 3.39681 -0.291532 -0.954205 0.0670897 + -0.234877 0.061445 3.40301 -0.287831 -0.95746 0.0206024 + -0.728382 0.197971 3.28954 -0.300918 -0.931631 0.203743 + -0.578215 0.159527 3.35832 -0.290687 -0.948393 0.126698 + -0.416776 0.109762 3.31652 -0.265352 -0.959941 0.0900068 + -0.240011 0.062836 3.3258 -0.268919 -0.962853 0.0244205 + -0.727645 0.176995 3.20547 -0.240519 -0.908464 0.341826 + -0.572743 0.148067 3.27457 -0.261168 -0.951636 0.161806 + -0.411303 0.098302 3.23277 -0.246099 -0.964385 0.096937 + -0.241214 0.058268 3.24551 -0.232564 -0.971402 0.0478737 + -0.731737 0.138056 3.12391 -0.183317 -0.917877 0.351989 + -0.572005 0.127007 3.19045 -0.192548 -0.954332 0.228419 + -0.413808 0.091427 3.15228 -0.197864 -0.970177 0.14002 + -0.251182 0.05854 3.16844 -0.213808 -0.975344 0.0546902 + -0.571155 0.111987 3.10727 -0.135003 -0.963711 0.230294 + -0.412958 0.07632 3.06904 -0.164885 -0.97552 0.145512 + -0.253687 0.051659 3.08796 -0.17859 -0.981442 0.0698416 + -0.136247 0.029047 3.06873 -0.177746 -0.983472 0.0344942 + -0.128314 0.029368 3.14517 -0.192969 -0.980971 0.0213986 + -0.41457 0.065308 2.98852 -0.0994723 -0.975113 0.198139 + -0.257193 0.049803 3.01057 -0.147046 -0.985872 0.0802129 + -0.139753 0.0271 2.9913 -0.176826 -0.983373 0.0413576 + -0.057365 0.016899 3.09136 -0.189413 -0.981345 0.0329282 + -0.049432 0.017313 3.16785 -0.220177 -0.975448 0.00477787 + -0.258805 0.038703 2.93 -0.094602 -0.987831 0.123453 + -0.144791 0.024377 2.91461 -0.154305 -0.985154 0.075238 + -0.067193 0.015366 3.01382 -0.194394 -0.979884 0.0451481 + -0.022521 0.005565 3.0174 -0.234458 -0.971898 0.0210687 + -0.012693 0.007103 3.09493 -0.545909 -0.836837 0.0410699 + -0.139603 0.017087 2.83684 -0.121366 -0.989332 0.0805702 + -0.072231 0.012645 2.93713 -0.189703 -0.980776 0.0457299 + -0.028391 0.003156 2.93997 -0.208115 -0.977209 0.0418421 + -0.005468 0.001829 3.01207 -0.105693 -0.994375 -0.0068918 + -0.005468 -0.002888 3.08724 -0.415117 -0.909698 0.011265 + -0.083299 0.012198 2.85971 -0.15622 -0.986313 0.0527342 + -0.03946 0.002704 2.86255 -0.327407 -0.941418 0.0808473 + -0.011338 -0.000585 2.93465 -0.122615 -0.989707 0.0738005 + 0.005478 0.001819 3.01208 0.104796 -0.99447 -0.00693339 + -0.043309 -0.002418 2.79002 -0.336811 -0.939596 0.0609669 + -0.011338 -0.012557 2.85838 -0.232525 -0.965861 0.114213 + 0.011342 -0.012567 2.8584 0.224626 -0.969097 0.101952 + 0.011342 -0.000595 2.93466 0.0928812 -0.990405 0.102329 + -0.015187 -0.017678 2.78586 -0.259508 -0.961864 0.0864487 + 0.015202 -0.017673 2.78585 0.243163 -0.964262 0.105216 + 0.039464 0.002694 2.86257 0.339633 -0.938111 0.0678075 + 0.028396 0.003146 2.93999 0.219049 -0.973626 0.063803 + 0.022531 0.005555 3.01741 0.234615 -0.971859 0.0211035 + 0.015202 -0.027834 2.70905 0.317365 -0.946797 0.0534323 + 0.043324 -0.002408 2.79001 0.346204 -0.935126 0.0753743 + 0.083303 0.012198 2.85971 0.172472 -0.982808 0.0658886 + 0.072235 0.012645 2.93713 0.193501 -0.980241 0.0410494 + 0.067193 0.015366 3.01382 0.192719 -0.980283 0.0436479 + 0.045049 -0.00408 2.7117 0.413914 -0.910105 0.0195777 + 0.086319 0.003583 2.70243 0.0410699 -0.996078 0.0783683 + 0.084593 0.005254 2.78074 0.153332 -0.986439 0.0585433 + 0.139607 0.017087 2.83684 0.117096 -0.98928 0.0872591 + 0.144795 0.024377 2.91461 0.144259 -0.987215 0.0677871 + 0.084669 -0.002766 2.62423 -0.0617981 -0.997488 0.0346231 + 0.139327 -0.007745 2.68045 -0.0714778 -0.987192 0.142629 + 0.140897 0.010143 2.75787 0.0428646 -0.988731 0.143434 + 0.253621 0.03142 2.85222 0.0631227 -0.985984 0.15444 + 0.251053 -0.004552 2.69472 -0.0205557 -0.977852 0.208287 + 0.252623 0.013338 2.77213 0.00454647 -0.974858 0.222781 + 0.419748 0.045343 2.9059 0.0382705 -0.972933 0.227898 + 0.414573 0.065225 2.98846 0.0925768 -0.977508 0.189494 + 0.258808 0.038709 2.92999 0.119044 -0.986881 0.109061 + 0.245864 -0.020802 2.61547 -0.0450001 -0.987796 0.149111 + 0.417835 0.000753 2.74293 -0.0102218 -0.967138 0.254046 + 0.41875 0.027259 2.82582 0.009627 -0.965158 0.26149 + 0.579673 0.064888 2.94204 0.0597813 -0.960795 0.270737 + 0.412647 -0.015497 2.66368 0.000161769 -0.984052 0.177879 + 0.578916 0.01297 2.77557 0.0462489 -0.96505 0.257953 + 0.579831 0.039477 2.85846 0.0267341 -0.954405 0.297314 + 0.568876 -0.006835 2.69207 0.058004 -0.980775 0.186324 + 0.733691 0.030489 2.78823 0.118975 -0.968217 0.220002 + 0.740988 0.051478 2.87467 0.10199 -0.958757 0.265297 + 0.740831 0.076886 2.95827 0.0930372 -0.937445 0.335471 + 0.723651 0.010684 2.70473 0.100899 -0.972782 0.2086 + 0.878345 0.056773 2.8081 0.161779 -0.952639 0.257502 + 0.885642 0.077761 2.89455 0.209306 -0.940553 0.26749 + 0.879242 0.105538 2.97704 0.190034 -0.918028 0.348011 + 0.735081 0.110928 3.0413 0.12501 -0.929839 0.346081 + 0.866441 0.031135 2.72791 0.14127 -0.962327 0.232314 + 1.0181 0.09005 2.83806 0.288674 -0.901849 0.321459 + 1.00819 0.121292 2.91955 0.309697 -0.893407 0.325442 + 1.00179 0.149068 3.00204 0.31055 -0.888948 0.336645 + 1.14825 0.135812 2.7952 0.477761 -0.836376 0.268737 + 1.13835 0.167054 2.87669 0.43871 -0.847828 0.29786 + 1.1375 0.190275 2.96227 0.404007 -0.865537 0.296013 + 0.987585 0.174579 3.08026 0.277919 -0.88612 0.370879 + 0.873492 0.139581 3.06007 0.171449 -0.904088 0.391445 + 1.27729 0.20953 2.76852 0.447254 -0.87839 0.168505 + 1.27644 0.232753 2.85409 0.419725 -0.880691 0.219577 + 1.27815 0.254457 2.9473 0.433511 -0.860289 0.268275 + 1.12329 0.215782 3.04049 0.383657 -0.865379 0.322376 + 1.36812 0.239706 2.69325 0.35387 -0.92621 0.130043 + 1.38555 0.257779 2.75535 0.401543 -0.894754 0.195395 + 1.38726 0.279569 2.84861 0.415337 -0.884371 0.213033 + 1.25862 0.275212 3.03255 0.34458 -0.911028 0.226479 + 1.10376 0.236451 3.12569 0.337351 -0.862155 0.377999 + 1.45865 0.292208 2.75412 0.377058 -0.897711 0.227907 + 1.43366 0.302875 2.84704 0.498047 -0.835579 0.231855 + 1.36228 0.290151 2.94148 0.369389 -0.907805 0.198601 + 1.22725 0.281244 3.12211 0.336045 -0.900284 0.2767 + 1.53776 0.278788 2.59336 0.289635 -0.937107 0.194788 + 1.52991 0.303479 2.69539 0.263006 -0.938207 0.224936 + 1.52448 0.322081 2.78258 0.239668 -0.947407 0.212085 + 1.43646 0.319034 2.89445 0.402411 -0.886375 0.228921 + 1.3309 0.296182 3.03103 0.391174 -0.893738 0.219579 + 1.55052 0.27074 2.5231 0.251055 -0.961182 0.114455 + 1.60411 0.296972 2.58606 0.255773 -0.952171 0.167186 + 1.60493 0.308399 2.65827 0.215367 -0.958995 0.184244 + 1.5995 0.32692 2.74539 0.244897 -0.9413 0.232335 + 1.61079 0.282559 2.44383 0.307897 -0.949251 0.0641983 + 1.61687 0.289009 2.51586 0.288656 -0.95256 0.0964765 + 1.68044 0.311601 2.54813 0.280225 -0.954062 0.106022 + 1.68126 0.323028 2.62033 0.290887 -0.93879 0.184549 + 1.67697 0.338785 2.69304 0.347961 -0.902702 0.253084 + 1.67283 0.301677 2.40131 0.326744 -0.944974 -0.0162184 + 1.67891 0.30813 2.47334 0.294815 -0.954304 0.0488664 + 1.76063 0.331107 2.49574 0.393415 -0.916542 0.0719432 + 1.75666 0.338295 2.57209 0.421724 -0.892274 0.161231 + 1.75237 0.35405 2.6448 0.473063 -0.833312 0.286012 + 1.66911 0.305741 2.32728 0.358539 -0.931453 -0.0620026 + 1.75689 0.338735 2.34433 0.370444 -0.922719 -0.106588 + 1.8377 0.380109 2.51327 0.619263 -0.770963 0.14876 + 1.90183 0.448913 2.5195 0.720918 -0.663364 0.200564 + 1.82288 0.386233 2.58806 0.629101 -0.736658 0.248124 + 1.74226 0.381653 2.72039 0.523959 -0.785853 0.328483 + 1.67252 0.357199 2.76395 0.407948 -0.861818 0.301411 + 1.59506 0.345333 2.8163 0.318901 -0.905614 0.27958 + 1.88033 0.447599 2.59177 0.735914 -0.618859 0.274672 + 1.81277 0.413835 2.66365 0.638111 -0.697144 0.326811 + 1.80017 0.435389 2.73712 0.64469 -0.686637 0.336012 + 1.73703 0.409576 2.79283 0.551789 -0.754433 0.355471 + 1.66729 0.385121 2.83638 0.460618 -0.814041 0.353791 + 1.97125 0.522689 2.50491 0.783444 -0.544054 0.300367 + 1.94391 0.538627 2.57991 0.824773 -0.422136 0.376233 + 1.86774 0.469151 2.66524 0.74995 -0.572201 0.331906 + 2.04338 0.641992 2.48507 0.8003 -0.356393 0.482186 + 2.00156 0.671104 2.55665 0.815761 -0.367652 0.446504 + 1.9252 0.559805 2.65102 0.853673 -0.381397 0.354654 + 1.84902 0.490325 2.73637 0.765963 -0.540033 0.348804 + 2.08783 0.747855 2.47611 0.728122 -0.512401 0.455283 + 2.05961 0.759091 2.55805 0.676199 -0.714293 0.180389 + 1.97589 0.68658 2.63224 0.807879 -0.554937 0.198437 + 1.89952 0.575276 2.72663 0.835641 -0.416735 0.35782 + 2.14557 0.806572 2.49401 0.636439 -0.741605 0.212056 + 2.12988 0.805667 2.58238 0.633329 -0.758526 0.153404 + 2.04427 0.746279 2.64364 0.668605 -0.734754 0.114475 + 1.96054 0.673768 2.71784 0.776055 -0.602021 0.187908 + 2.12532 0.8343 2.67978 0.703705 -0.635687 0.317335 + 2.03971 0.774912 2.74105 0.727287 -0.637899 0.253256 + 1.97095 0.723982 2.81546 0.73085 -0.638748 0.240539 + 1.88301 0.61507 2.7967 0.801144 -0.499889 0.329058 + 2.1098 0.896364 2.79808 0.781095 -0.582923 0.22381 + 2.07563 0.857085 2.85552 0.770821 -0.608836 0.187495 + 2.00687 0.806154 2.92993 0.730264 -0.637064 0.246706 + 1.89342 0.665197 2.89428 0.740708 -0.622613 0.252396 + 1.82403 0.563674 2.87752 0.818069 -0.479014 0.318289 + 2.21145 0.973508 2.71487 0.709761 -0.578447 0.402042 + 2.27515 1.08941 2.76691 0.716988 -0.627549 0.303496 + 2.20761 1.03299 2.84985 0.757698 -0.64678 0.087003 + 2.17343 0.993706 2.90729 0.755539 -0.640832 0.135995 + 2.4665 1.2873 2.72756 0.824175 -0.499171 0.267515 + 2.39896 1.23088 2.81049 0.780419 -0.592657 0.19926 + 2.31753 1.15141 2.90992 0.768974 -0.608232 0.196809 + 2.2371 1.09047 2.99829 0.727608 -0.602398 0.328182 + 2.093 0.932672 2.9956 0.73203 -0.621668 0.278677 + 2.63704 1.62676 2.7512 0.879415 -0.415083 0.233099 + 2.56483 1.51211 2.81178 0.861252 -0.429022 0.272368 + 2.48791 1.4137 2.88484 0.839807 -0.455684 0.295089 + 2.40648 1.33423 2.98427 0.816887 -0.464329 0.342191 + 2.66443 1.83164 2.93074 0.862754 -0.373821 0.34046 + 2.58932 1.72218 2.99012 0.848903 -0.385681 0.361406 + 2.5124 1.62377 3.06318 0.837052 -0.398514 0.374873 + 2.43139 1.53416 3.14119 0.817052 -0.414312 0.400963 + 2.75351 2.22044 3.07832 0.887369 -0.304368 0.34632 + 2.69228 2.10032 3.12978 0.872048 -0.335766 0.356081 + 2.61717 1.99095 3.18921 0.856066 -0.360912 0.369992 + 2.54987 1.87835 3.24403 0.852742 -0.377318 0.361196 + 2.7715 2.56331 3.31005 0.888469 -0.275229 0.367249 + 2.71027 2.44319 3.36151 0.897166 -0.27624 0.344651 + 2.65797 2.31693 3.40519 0.882 -0.30097 0.362619 + 2.59067 2.20433 3.46002 0.873434 -0.322625 0.364728 + 2.84745 2.98667 3.42657 0.919023 -0.228203 0.321433 + 2.78998 2.87553 3.49106 0.902217 -0.25822 0.345438 + 2.73795 2.76963 3.5519 0.903081 -0.256803 0.344235 + 2.68565 2.64337 3.59557 0.885822 -0.270075 0.377331 + 2.86219 3.25922 3.54671 0.931082 -0.125918 0.342391 + 2.81782 3.17507 3.64045 0.908045 -0.161303 0.386569 + 2.76579 3.06917 3.70128 0.871917 -0.220282 0.437307 + 2.71231 2.98091 3.75194 0.846006 -0.23613 0.478034 + 2.91085 3.34236 3.45169 0.932995 -0.109232 0.342912 + 2.86882 3.6075 3.58566 0.918821 0.0191131 0.394212 + 2.82858 3.53202 3.684 0.915992 0.00166416 0.401192 + 2.78421 3.44796 3.7778 0.893693 -0.0386005 0.447016 + 2.73363 3.37131 3.86196 0.849296 -0.103629 0.517646 + 2.91061 3.68128 3.48288 0.932271 0.0574913 0.357162 + 2.77752 3.86569 3.72906 0.869644 0.183478 0.458317 + 2.73728 3.79021 3.8274 0.860969 0.157561 0.48364 + 2.69578 3.71683 3.92249 0.839304 0.117564 0.530798 + 2.64521 3.64027 4.0067 0.825363 0.0655243 0.560787 + 2.81027 3.93579 3.62845 0.881263 0.221044 0.417749 + 2.65981 4.2023 3.73764 0.800813 0.365353 0.474568 + 2.62706 4.1322 3.83826 0.788217 0.33311 0.517447 + 2.57458 4.05159 3.96266 0.774472 0.309838 0.551538 + 2.53309 3.97831 4.05781 0.761553 0.295189 0.576975 + 2.69624 4.2745 3.60898 0.811777 0.390578 0.434128 + 2.48365 4.46478 3.7772 0.722277 0.477387 0.500417 + 2.41988 4.38871 3.93257 0.70421 0.451007 0.548344 + 2.3674 4.3081 4.05697 0.688713 0.417396 0.592836 + 2.52007 4.5369 3.64849 0.744217 0.509115 0.432369 + 2.30518 4.77869 3.6845 0.668764 0.58469 0.459231 + 2.26262 4.69396 3.83745 0.650303 0.558412 0.515056 + 2.19885 4.61797 3.99287 0.629096 0.535358 0.563587 + 2.32379 4.85822 3.53916 0.681875 0.598803 0.420096 + 2.06904 5.08721 3.59373 0.609577 0.645066 0.460767 + 2.04024 5.00608 3.73765 0.588631 0.635531 0.499614 + 1.99768 4.92135 3.8906 0.569334 0.621192 0.538497 + 2.35703 4.93946 3.37123 0.691627 0.597259 0.40612 + 2.10228 5.16854 3.42585 0.624334 0.643193 0.443294 + 1.83605 5.37169 3.47939 0.5523 0.686016 0.473653 + 1.7827 5.29043 3.64674 0.528337 0.682205 0.505427 + 2.38671 5.03469 3.1669 0.705799 0.599771 0.376992 + 2.14678 5.24937 3.24905 0.639582 0.645464 0.417506 + 1.88054 5.45252 3.30259 0.564334 0.700318 0.437129 + 2.15799 5.36113 3.04749 0.644118 0.656742 0.392176 + 1.88536 5.57239 3.09256 0.562162 0.71492 0.415768 + 1.57272 5.63453 3.36494 0.485663 0.750627 0.447985 + 1.55978 5.56028 3.50194 0.482617 0.734066 0.477731 + 1.50643 5.47902 3.66929 0.459996 0.706389 0.537976 + 2.17244 5.50219 2.78196 0.660012 0.660936 0.357137 + 1.8998 5.71355 2.82708 0.564536 0.722204 0.399651 + 1.54926 5.91866 2.89781 0.486488 0.76343 0.424859 + 1.57754 5.7544 3.15491 0.487899 0.755819 0.436683 + 1.28068 5.78732 3.39111 0.404312 0.786735 0.466454 + 2.18262 5.59851 2.57112 0.684506 0.666897 0.294448 + 1.8881 5.8293 2.62758 0.574272 0.734283 0.361994 + 1.53756 6.03442 2.69831 0.486178 0.774635 0.40444 + 1.25476 6.06039 2.95013 0.393231 0.80018 0.452858 + 1.28304 5.89613 3.20723 0.40484 0.788817 0.462464 + 1.84999 5.92615 2.48144 0.565953 0.743822 0.355564 + 1.53535 6.10826 2.55442 0.488287 0.786093 0.378989 + 1.23443 6.24429 2.6212 0.396847 0.819859 0.412728 + 1.23664 6.17045 2.76509 0.392648 0.813214 0.429547 + 0.997951 6.13756 2.99886 0.324617 0.825652 0.461434 + 0.939671 6.31905 2.71111 0.300156 0.848784 0.435285 + 0.979823 6.24763 2.81382 0.313377 0.83241 0.457044 + 0.783409 6.18987 3.04706 0.264558 0.846345 0.462287 + 1.00322 6.01473 3.21841 0.332757 0.8177 0.469723 + 1.00086 5.90592 3.40229 0.315086 0.799533 0.511339 + 0.674401 6.34161 2.83165 0.238381 0.852093 0.465954 + 0.714553 6.27018 2.93436 0.245672 0.848341 0.469002 + 0.557653 6.13094 3.26013 0.212372 0.845695 0.489589 + 0.788676 6.06704 3.26661 0.267708 0.830228 0.488932 + 0.756484 5.99632 3.3973 0.250507 0.811743 0.52756 + 0.644018 6.42086 2.69499 0.235396 0.873096 0.426957 + 0.45681 6.34753 2.91038 0.186247 0.864038 0.467707 + 0.488798 6.21125 3.14743 0.201918 0.857328 0.473516 + 0.327174 6.15706 3.3087 0.176032 0.85643 0.485325 + 0.525461 6.06022 3.39082 0.213677 0.828862 0.517039 + 0.587404 6.47226 2.61534 0.210112 0.887176 0.410819 + 0.388277 6.47524 2.68259 0.124825 0.896385 0.425339 + 0.426427 6.4267 2.77367 0.154748 0.885724 0.437659 + 0.271817 6.35498 2.96229 0.108529 0.884751 0.453252 + 0.295187 6.29334 3.07165 0.148546 0.870544 0.469135 + 0.759644 6.52008 2.36851 0.268079 0.912171 0.309962 + 0.572748 6.51135 2.53785 0.227254 0.897194 0.37868 + 0.373621 6.51423 2.60505 0.120753 0.903521 0.411179 + 0.233667 6.40344 2.87116 0.0585024 0.901215 0.429406 + 0.686856 6.56267 2.30035 0.272553 0.910747 0.310249 + 0.49996 6.55393 2.46969 0.173065 0.921237 0.348384 + 0.400587 6.57829 2.44071 0.13517 0.914495 0.381351 + 0.274247 6.53868 2.5761 0.0635051 0.919083 0.388912 + 0.822127 6.61587 2.016 0.296922 0.916884 0.266759 + 0.581013 6.59979 2.28966 0.258678 0.903077 0.342836 + 0.349068 6.61759 2.37783 0.136546 0.902966 0.407439 + 0.141685 6.57025 2.50863 0.037565 0.911875 0.408745 + 0.824584 6.64574 1.90967 0.338734 0.911209 0.23443 + 0.529494 6.63918 2.22683 0.206397 0.927995 0.310203 + 0.531951 6.66896 2.12045 0.217955 0.941752 0.256122 + 0.326565 6.65188 2.30544 0.147469 0.921502 0.359287 + 0.119182 6.60453 2.43624 0.0389747 0.91035 0.412 + 0.474678 6.69206 2.07765 0.193211 0.948023 0.252828 + 0.638605 6.73993 1.72974 0.250156 0.954855 0.160228 + 0.414618 6.72581 1.99439 0.172462 0.958677 0.226265 + 0.269292 6.67497 2.26263 0.0982191 0.937131 0.334871 + 0.200218 6.68836 2.23805 0.0540197 0.94385 0.325928 + 0.050108 6.61792 2.41166 0.0148797 0.913553 0.406449 + 0.294177 6.73724 2.02838 0.112282 0.967813 0.225233 + -0.050108 6.70567 2.20727 -0.0185939 0.950177 0.311156 + 0.144067 6.75447 1.99756 0.0674644 0.97135 0.227878 + 0.345751 6.08485 3.42576 0.197929 0.837581 0.509198 + 0.549237 5.97989 3.50496 0.223845 0.817178 0.531144 + 0.741024 5.91316 3.52434 0.2526 0.803107 0.53964 + 0.369527 6.00461 3.53995 0.21342 0.819175 0.532357 + 0.537997 5.88923 3.64818 0.223215 0.816817 0.531963 + 0.729784 5.82241 3.66751 0.26094 0.808392 0.527648 + 0.985396 5.82275 3.52933 0.295445 0.787513 0.540865 + 0.375098 5.93861 3.63925 0.214275 0.818843 0.532525 + 0.530928 5.7715 3.8319 0.218166 0.808617 0.546391 + 0.706856 5.73509 3.81456 0.255343 0.802228 0.539657 + 0.939765 5.64185 3.82746 0.32104 0.776834 0.541722 + 0.962693 5.72918 3.6804 0.305318 0.789086 0.533033 + 0.368029 5.82088 3.82297 0.202782 0.809691 0.550709 + 0.517657 5.66625 3.9878 0.196518 0.786404 0.585619 + 0.693585 5.62984 3.97047 0.255292 0.782145 0.568397 + 0.887986 5.53922 3.99263 0.313606 0.754968 0.575912 + 1.17714 5.49992 3.8751 0.366756 0.73621 0.568757 + 0.355791 5.75569 3.91968 0.174558 0.789322 0.588643 + 0.488028 5.58849 4.09428 0.165202 0.768102 0.61865 + 0.661059 5.50964 4.14565 0.231286 0.756949 0.611175 + 0.85546 5.41902 4.1678 0.312914 0.72923 0.608529 + 0.326162 5.67794 4.02615 0.137714 0.770415 0.622492 + 0.420165 5.48927 4.23294 0.136756 0.7557 0.640481 + 0.593196 5.41042 4.28431 0.204667 0.732211 0.649598 + 0.798127 5.31308 4.3117 0.28831 0.689753 0.664167 + 1.08361 5.29444 4.18419 0.363359 0.692846 0.622843 + 0.286638 5.61296 4.1119 0.106079 0.761158 0.639833 + 0.331182 5.372 4.38366 0.101051 0.737328 0.667934 + 0.503427 5.31304 4.41678 0.178207 0.714874 0.676164 + 0.708359 5.21562 4.44412 0.274202 0.659676 0.699743 + 0.197655 5.49568 4.26263 0.0849289 0.748852 0.657273 + 0.288186 5.27331 4.49538 0.0325703 0.704415 0.709041 + 0.460431 5.21435 4.5285 0.165698 0.669112 0.724453 + 0.632041 5.1284 4.55099 0.249119 0.622421 0.741979 + 0.960334 5.09124 4.44514 0.333484 0.613815 0.715555 + 0.13439 5.44638 4.32683 0.0988213 0.726283 0.680255 + 0.158013 5.22322 4.54455 0.0596786 0.673818 0.736483 + 0.237468 5.2187 4.54617 0.0182112 0.672397 0.739966 + 0.375694 5.11286 4.63109 0.125884 0.626533 0.769162 + 0.547303 5.02682 4.65352 0.211203 0.592295 0.777547 + 0.057219 5.19265 4.58649 0.0661675 0.636753 0.768224 + 0.057219 4.99359 4.73147 -0.000951834 0.568615 0.822603 + 0.178172 5.00026 4.72992 -0.00246085 0.587644 0.809116 + 0.257627 4.99574 4.73155 0.0446175 0.574868 0.817029 + 0.324975 5.05817 4.68183 0.0774402 0.606287 0.791466 + -0.057219 4.99359 4.73147 0.009684 0.55878 0.82926 + -0.082772 4.79088 4.85818 0.00792762 0.471989 0.881569 + 0.082772 4.79088 4.85818 -0.00729618 0.471345 0.881918 + 0.203725 4.79746 4.85658 0.00614009 0.477745 0.878477 + -0.285444 4.61442 4.94182 -0.00909633 0.34753 0.937625 + -0.082772 4.60556 4.94236 0.00584276 0.338859 0.940819 + 0.082772 4.60556 4.94237 -0.00550107 0.339355 0.940642 + -0.414322 4.60138 4.944 -0.0730218 0.350262 0.933801 + -0.543759 4.3414 5.00711 -0.096371 0.255155 0.962085 + -0.32929 4.34471 5.01577 -0.0174748 0.231047 0.972786 + -0.126618 4.33594 5.01637 0.00453156 0.223685 0.974651 + 0.126618 4.33593 5.01637 -0.0036363 0.222666 0.974888 + -0.652423 4.35926 4.98337 -0.163386 0.293037 0.942037 + -0.865682 4.01294 5.04901 -0.158428 0.20174 0.966541 + -0.630538 3.96772 5.07934 -0.0683377 0.159628 0.984809 + -0.416069 3.97103 5.08801 -0.0130168 0.152022 0.988291 + -0.993086 3.68812 5.07863 -0.145179 0.109087 0.983373 + -0.757941 3.64289 5.10896 -0.0829358 0.0858739 0.992848 + -0.68639 3.5435 5.12112 -0.0908882 0.0567809 0.994241 + -0.617987 3.54915 5.12692 -0.0555106 0.0607834 0.996606 + -0.458076 3.63911 5.12571 -0.00482345 0.0729424 0.997324 + -1.14611 3.67064 5.05489 -0.209345 0.114193 0.971151 + -1.07239 3.31675 5.08426 -0.149515 -0.0227936 0.988497 + -0.958763 3.27031 5.09969 -0.155883 -0.0308165 0.987295 + -0.887212 3.17091 5.11186 -0.186098 -0.111764 0.976154 + -1.35755 3.42205 5.02166 -0.347305 0.0322172 0.937199 + -1.22541 3.29936 5.06057 -0.221265 -0.0421611 0.974302 + -1.21843 3.01113 5.0242 -0.237574 -0.211563 0.94805 + -1.46484 3.21364 4.96944 -0.391974 -0.0899445 0.915569 + -1.33271 3.09095 5.00835 -0.319776 -0.162291 0.933491 + -1.35202 2.81481 4.92064 -0.243946 -0.370148 0.896371 + -1.10481 2.96469 5.03964 -0.147728 -0.250786 0.956704 + -1.58122 3.30616 4.9266 -0.418372 -0.049682 0.906916 + -1.57552 2.96247 4.87328 -0.445247 -0.222031 0.867443 + -1.46629 2.89463 4.90478 -0.373747 -0.274154 0.886088 + -1.44593 2.60017 4.80041 -0.265986 -0.404283 0.875104 + -1.24339 2.76206 4.9082 -0.186225 -0.427257 0.884744 + -1.6919 3.05489 4.8304 -0.476125 -0.19396 0.857721 + -1.66799 2.72722 4.74575 -0.486702 -0.323524 0.811451 + -1.55875 2.65939 4.77724 -0.411929 -0.357509 0.838154 + -1.7774 2.78615 4.69809 -0.525407 -0.309852 0.792426 + -1.72681 2.49021 4.58866 -0.523177 -0.367512 0.768909 + -1.61373 2.43179 4.63605 -0.456024 -0.379509 0.804994 + -1.50091 2.37249 4.65916 -0.365956 -0.379789 0.84961 + -1.61944 2.1369 4.49541 -0.503119 -0.355866 0.787548 + -1.50006 2.09219 4.54966 -0.42656 -0.33998 0.838129 + -1.37672 2.32352 4.68958 -0.306188 -0.35425 0.883604 + -1.33731 2.54742 4.78797 -0.181192 -0.390987 0.902385 + -1.4519 1.7518 4.43043 -0.517268 -0.343495 0.783865 + -1.33155 1.71384 4.49857 -0.466253 -0.310613 0.828329 + -1.37586 2.04314 4.58001 -0.364773 -0.302321 0.880649 + -1.24894 2.0079 4.62565 -0.342694 -0.280648 0.896547 + -1.25794 2.27592 4.70703 -0.27795 -0.313926 0.907851 + -1.28469 1.42995 4.40648 -0.523484 -0.356986 0.773645 + -1.16026 1.40077 4.47283 -0.448639 -0.329041 0.830936 + -1.20462 1.67869 4.54425 -0.388639 -0.278691 0.878232 + -1.11225 1.17063 4.39344 -0.502591 -0.390755 0.771176 + -0.985985 1.14855 4.46448 -0.417304 -0.361795 0.833644 + -1.0296 1.369 4.51986 -0.364949 -0.290132 0.884667 + -1.07396 1.64692 4.59128 -0.327578 -0.257932 0.908935 + -0.949773 0.968969 4.39253 -0.42568 -0.467572 0.774708 + -0.811769 0.938248 4.43574 -0.304831 -0.47348 0.826374 + -0.851214 1.11841 4.50649 -0.295048 -0.344777 0.891109 + -0.89483 1.33894 4.56192 -0.278806 -0.270597 0.921436 + -0.781792 0.809541 4.36027 -0.291312 -0.588875 0.753899 + -0.640455 0.753492 4.35995 -0.218559 -0.616575 0.756351 + -0.671365 0.901889 4.45952 -0.187984 -0.477371 0.858358 + -0.71081 1.08213 4.53032 -0.203492 -0.340799 0.917849 + -0.603886 0.57968 4.2122 -0.204478 -0.682206 0.701985 + -0.457249 0.502509 4.16846 -0.181902 -0.706786 0.683641 + -0.505232 0.693511 4.34644 -0.146638 -0.628048 0.764234 + -0.536142 0.841995 4.44606 -0.114587 -0.508646 0.853316 + -0.413246 0.285763 3.95348 -0.112729 -0.759461 0.640712 + -0.227673 0.222295 3.88321 -0.114031 -0.794323 0.596697 + -0.336282 0.412749 4.11293 -0.221337 -0.757548 0.614109 + -0.384266 0.603749 4.29091 -0.126542 -0.650435 0.748947 + -0.199094 0.111016 3.73595 -0.16742 -0.856193 0.488779 + -0.081146 0.054032 3.68825 -0.160018 -0.818297 0.552073 + -0.118188 0.172667 3.84657 -0.0611245 -0.789582 0.610593 + -0.226797 0.363122 4.07629 -0.155787 -0.757273 0.634246 + -0.104906 0.019918 3.59514 -0.49197 -0.81746 0.299542 + -0.032368 -0.044339 3.60443 -0.279536 -0.828981 0.484407 + -0.032368 0.030536 3.65695 0.0757885 -0.682439 0.727003 + -0.069411 0.149083 3.81521 -0.162708 -0.821924 0.545864 + -0.109104 0.005884 3.52904 -0.53606 -0.840783 0.0756582 + -0.036567 -0.058374 3.53834 -0.300194 -0.948498 -0.10117 + 0.036568 -0.058369 3.53833 0.331794 -0.933619 -0.135158 + 0.032373 -0.044339 3.60443 0.307896 -0.79988 0.515162 + -0.107572 0.008307 3.45165 -0.399618 -0.902064 -0.163052 + -0.036567 -0.018551 3.47337 -0.110209 -0.917471 -0.382232 + 0.036568 -0.018547 3.47336 0.21938 -0.926087 -0.306977 + 0.109105 0.005889 3.52904 0.485817 -0.873742 0.0235984 + 0.10491 0.019918 3.59514 0.438857 -0.827357 0.350549 + -0.107747 0.02312 3.37639 -0.334062 -0.940766 -0.0579841 + -0.036742 -0.00374 3.39811 -0.13722 -0.974925 -0.175192 + 0.036742 -0.00374 3.39811 0.150444 -0.969559 -0.193188 + 0.107573 0.008312 3.45164 0.368661 -0.921873 -0.119331 + -0.112881 0.02451 3.29918 -0.238683 -0.970165 -0.0425471 + -0.036742 0.011515 3.32289 -0.0877069 -0.990913 -0.101977 + 0.036742 0.011515 3.32289 0.127384 -0.989278 -0.0714273 + 0.107747 0.02312 3.37639 0.295661 -0.951092 -0.089489 + 0.235538 0.064179 3.48367 0.349687 -0.936789 -0.0120809 + -0.118346 0.029102 3.22223 -0.206854 -0.978367 0.00299602 + -0.042206 0.01602 3.24589 -0.224925 -0.974235 -0.0165609 + 0.001808 0.003301 3.25612 -0.152057 -0.987796 0.0337263 + -0.00902 0.004506 3.17803 -0.6074 -0.794312 -0.0115841 + -0.001795 -0.013757 3.24666 -0.565669 -0.725684 0.391666 + 0.001808 0.003301 3.25612 -0.000334 -0.484823 0.874612 + 0.001808 -0.013762 3.24667 -0.0023907 -0.887409 0.460977 + -0.001795 -0.005478 3.17033 -0.457664 -0.888022 -0.0442719 + 0.005478 -0.002898 3.08726 0.414386 -0.91003 0.0113895 + 0.009033 0.004594 3.17808 0.571837 -0.819982 0.0251326 + 0.001808 0.003301 3.25612 0.327917 -0.944672 -0.00810761 + 0.012703 0.007093 3.09495 0.545859 -0.836854 0.041393 + 0.049429 0.017318 3.16784 0.223219 -0.974734 0.00823755 + 0.042204 0.016025 3.24588 0.230259 -0.972959 -0.0181781 + 0.112881 0.02451 3.29918 0.225763 -0.973854 -0.025298 + 0.057365 0.016899 3.09136 0.188742 -0.981457 0.0334541 + 0.128312 0.029374 3.14516 0.191887 -0.981143 0.0231842 + 0.118344 0.029107 3.22222 0.202844 -0.979211 -0.000587482 + 0.240013 0.062841 3.32579 0.27246 -0.961723 0.0292462 + 0.234878 0.06145 3.403 0.297965 -0.954448 0.0156532 + 0.136247 0.029047 3.06873 0.179538 -0.983107 0.0355803 + 0.251182 0.05854 3.16844 0.217895 -0.97409 0.0605827 + 0.241214 0.058268 3.24551 0.243353 -0.968986 0.0429475 + 0.415574 0.114334 3.3968 0.28046 -0.957062 0.0733089 + 0.418471 0.122747 3.48063 0.305017 -0.95071 0.0558167 + 0.139753 0.0271 2.9913 0.177521 -0.983276 0.0406776 + 0.257193 0.049803 3.01057 0.153721 -0.984058 0.0894388 + 0.253687 0.051659 3.08796 0.199049 -0.978195 0.0592768 + 0.411303 0.098302 3.23277 0.232739 -0.966894 0.104638 + 0.416776 0.109762 3.31652 0.262048 -0.961217 0.0859871 + 0.412958 0.07632 3.06904 0.143879 -0.976982 0.157498 + 0.413808 0.091427 3.15228 0.192239 -0.972347 0.132612 + 0.572745 0.148072 3.27457 0.266854 -0.949124 0.167191 + 0.578218 0.159532 3.35832 0.300646 -0.946352 0.118451 + 0.579692 0.171394 3.44337 0.318611 -0.942383 0.101989 + 0.57116 0.111997 3.10725 0.1552 -0.955842 0.249555 + 0.57201 0.127017 3.19044 0.22425 -0.952895 0.204211 + 0.728385 0.197976 3.28953 0.291852 -0.93287 0.211131 + 0.729604 0.216282 3.37662 0.320706 -0.933856 0.158303 + 0.731078 0.228144 3.46168 0.349335 -0.929241 0.120313 + 0.574499 0.084859 3.02466 0.0898395 -0.956272 0.278338 + 0.731742 0.138062 3.12391 0.153541 -0.915014 0.37306 + 0.727649 0.177005 3.20545 0.222837 -0.919064 0.325061 + 0.848913 0.240285 3.30245 0.271862 -0.923503 0.270617 + 0.862604 0.172535 3.13899 0.187145 -0.892695 0.409966 + 0.858511 0.211475 3.22055 0.208629 -0.897126 0.389408 + 0.946212 0.270982 3.31688 0.254217 -0.914281 0.315379 + 0.931263 0.292165 3.39719 0.310634 -0.92007 0.238699 + 0.850132 0.258502 3.3895 0.334571 -0.922842 0.190852 + 0.976696 0.207529 3.15919 0.253914 -0.86402 0.434737 + 0.95581 0.242177 3.23497 0.253761 -0.884774 0.390871 + 1.0655 0.294472 3.2842 0.262135 -0.913895 0.309971 + 1.08288 0.271099 3.20148 0.28156 -0.879744 0.383112 + 1.20987 0.304616 3.20482 0.31726 -0.88963 0.328486 + 1.19868 0.33381 3.29126 0.315343 -0.893151 0.320686 + 1.05055 0.315746 3.36455 0.263823 -0.915205 0.304627 + 1.3337 0.312427 3.07849 0.447854 -0.841028 0.303477 + 1.3225 0.341615 3.16494 0.431964 -0.843568 0.319061 + 1.31136 0.370904 3.26321 0.426614 -0.83856 0.338849 + 1.19284 0.361408 3.37566 0.347059 -0.865253 0.361784 + 1.04472 0.343259 3.44889 0.312963 -0.916589 0.248833 + 1.42643 0.338359 2.99638 0.419544 -0.869238 0.261549 + 1.41528 0.367649 3.09465 0.408669 -0.865376 0.290023 + 1.40032 0.392958 3.19481 0.422256 -0.851119 0.311923 + 1.31733 0.415865 3.35093 0.41307 -0.838289 0.35587 + 1.19881 0.406289 3.46332 0.374615 -0.875478 0.305289 + 1.51444 0.341323 2.88444 0.287252 -0.926237 0.244072 + 1.50741 0.365523 2.97093 0.31599 -0.907338 0.277286 + 1.49244 0.390831 3.07109 0.422317 -0.844767 0.328659 + 1.39312 0.42388 3.28325 0.465354 -0.811461 0.35352 + 1.31013 0.446875 3.43942 0.395502 -0.870851 0.291885 + 1.58802 0.369624 2.90283 0.386405 -0.863202 0.324921 + 1.58562 0.400512 2.97013 0.491139 -0.783373 0.380931 + 1.57678 0.433576 3.05126 0.529764 -0.742832 0.409329 + 1.4836 0.423983 3.15228 0.509998 -0.775846 0.371437 + 1.37266 0.457595 3.38146 0.528131 -0.762577 0.373569 + 1.66489 0.416009 2.90369 0.501145 -0.772422 0.390151 + 1.66384 0.452729 2.97368 0.511262 -0.749391 0.420742 + 1.57649 0.475865 3.11521 0.602225 -0.663438 0.444044 + 1.46315 0.457696 3.25048 0.578553 -0.711724 0.398404 + 1.73252 0.44351 2.86665 0.570408 -0.727361 0.381551 + 1.73147 0.480144 2.9366 0.576297 -0.726158 0.374935 + 1.73419 0.51828 3.00855 0.551899 -0.700002 0.453216 + 1.66355 0.495025 3.03763 0.513986 -0.696268 0.501028 + 1.79567 0.469321 2.81095 0.671908 -0.645368 0.363372 + 1.78719 0.502876 2.88203 0.714444 -0.602467 0.355814 + 1.78991 0.540926 2.95392 0.749658 -0.58429 0.310834 + 1.7967 0.596245 3.03211 0.704553 -0.589816 0.394615 + 1.73411 0.56452 3.06706 0.530344 -0.646039 0.54897 + 1.84054 0.52388 2.80745 0.79937 -0.467143 0.37787 + 1.83081 0.618993 2.95571 0.790551 -0.555546 0.257676 + 1.86135 0.698286 3.07397 0.673053 -0.620744 0.402091 + 1.7962 0.650267 3.09174 0.595544 -0.597516 0.536937 + 1.73362 0.618536 3.1267 0.474475 -0.634289 0.61037 + 1.66347 0.54126 3.09615 0.540523 -0.618665 0.570166 + 1.57356 0.529691 3.20318 0.67781 -0.536753 0.502463 + 1.92395 0.74449 3.01254 0.72532 -0.639365 0.255192 + 2.01009 0.871012 3.0782 0.711283 -0.596358 0.372067 + 1.92477 0.837049 3.16022 0.629837 -0.572718 0.524689 + 1.85963 0.789033 3.17799 0.608632 -0.585414 0.535591 + 2.1368 1.04701 3.10196 0.693286 -0.573013 0.437049 + 2.05149 1.01305 3.18398 0.661839 -0.564429 0.493345 + 1.94244 0.986556 3.28547 0.628497 -0.573755 0.525164 + 1.85479 0.947356 3.34897 0.687797 -0.570221 0.449203 + 1.77198 0.749834 3.24148 0.515624 -0.656931 0.550066 + 2.32079 1.26567 3.08063 0.766598 -0.503798 0.39814 + 2.22049 1.22221 3.1843 0.705785 -0.554902 0.440399 + 2.12533 1.1769 3.28579 0.676659 -0.585434 0.446541 + 2.01628 1.1504 3.38728 0.628891 -0.63108 0.454129 + 2.34569 1.46559 3.23756 0.816545 -0.418963 0.397144 + 2.26637 1.40325 3.33934 0.766578 -0.480165 0.426379 + 2.17121 1.35793 3.44083 0.73695 -0.515792 0.43688 + 2.07879 1.30819 3.53959 0.697343 -0.564514 0.441629 + 2.46886 1.78873 3.32206 0.82969 -0.406358 0.382736 + 2.39338 1.69648 3.39225 0.8291 -0.411664 0.37832 + 2.31407 1.63413 3.49404 0.799174 -0.42957 0.420465 + 2.22659 1.56377 3.5783 0.764632 -0.457583 0.453824 + 2.53005 2.083 3.50337 0.855668 -0.34827 0.382805 + 2.45458 1.99083 3.57362 0.812611 -0.382608 0.439629 + 2.37167 1.88962 3.62912 0.791261 -0.394638 0.467083 + 2.28419 1.81926 3.71338 0.757369 -0.397263 0.518242 + 2.62818 2.5354 3.64319 0.865408 -0.285657 0.411666 + 2.56756 2.41416 3.68659 0.840556 -0.301375 0.450154 + 2.49612 2.30505 3.73457 0.793605 -0.327569 0.512728 + 2.41321 2.20392 3.79012 0.761967 -0.340472 0.550895 + 2.65484 2.87294 3.79956 0.830736 -0.245185 0.499761 + 2.58992 2.76565 3.84838 0.802469 -0.261549 0.536317 + 2.51848 2.65663 3.89642 0.768456 -0.278719 0.576013 + 2.4407 2.55846 3.94625 0.741408 -0.292855 0.60378 + 2.68016 3.28305 3.91262 0.812082 -0.160733 0.56097 + 2.61945 3.19332 3.97685 0.800725 -0.175365 0.572788 + 2.55453 3.08603 4.02567 0.771505 -0.209914 0.600596 + 2.48002 2.99971 4.08758 0.743641 -0.230198 0.6277 + 2.58947 3.5633 4.09222 0.787395 -0.00880562 0.616386 + 2.52876 3.47356 4.15646 0.763872 -0.0565466 0.642886 + 2.45712 3.40119 4.2352 0.732608 -0.0814041 0.675765 + 2.38262 3.31487 4.29711 0.716988 -0.13199 0.684476 + 2.53323 3.86313 4.1181 0.786897 0.226721 0.573925 + 2.47749 3.78616 4.20362 0.721098 0.139239 0.678698 + 2.38769 3.77091 4.29422 0.678831 0.148692 0.719083 + 2.31605 3.69854 4.37297 0.697025 0.112261 0.708204 + 2.29894 4.09032 4.25959 0.663444 0.320361 0.676173 + 2.20914 4.07508 4.35018 0.655043 0.312588 0.6879 + 2.13616 3.94806 4.47499 0.648276 0.251111 0.718805 + 2.06758 3.85189 4.55996 0.606905 0.203086 0.768389 + 2.24747 3.60237 4.45794 0.687574 0.0469488 0.724595 + 2.29879 4.2055 4.1993 0.661144 0.378913 0.647544 + 2.07576 4.40579 4.28877 0.599153 0.462425 0.653589 + 2.06263 4.2746 4.3916 0.61716 0.406574 0.673655 + 1.98965 4.14767 4.51646 0.567154 0.345086 0.747831 + 2.14437 4.5084 4.14646 0.614424 0.496759 0.612955 + 1.89447 4.69571 4.21503 0.531597 0.558655 0.636639 + 1.85277 4.55415 4.36261 0.511037 0.519867 0.684528 + 1.83964 4.42295 4.46545 0.501522 0.469933 0.726387 + 1.94895 4.80519 4.0614 0.552897 0.590676 0.587713 + 1.67113 4.98185 4.12221 0.478723 0.630739 0.610731 + 1.62324 4.86473 4.26848 0.457166 0.594734 0.66128 + 1.58155 4.72317 4.41606 0.446919 0.561858 0.696117 + 1.74296 4.39244 4.5459 0.486243 0.455029 0.746001 + 1.71986 5.09801 3.95141 0.497743 0.654933 0.568608 + 1.4045 5.24815 4.02597 0.428489 0.685969 0.588084 + 1.36275 5.14532 4.16988 0.416279 0.658873 0.626577 + 1.31486 5.02819 4.31615 0.399374 0.617523 0.677617 + 1.7539 5.20939 3.79071 0.509878 0.6792 0.527932 + 1.43854 5.35952 3.86526 0.43637 0.696795 0.569261 + 1.12536 5.39737 4.04032 0.362671 0.719854 0.591845 + 1.24504 5.61941 3.67913 0.364099 0.752389 0.548947 + 1.26774 5.71298 3.52805 0.38281 0.774771 0.503175 + 1.02628 5.18841 4.32803 0.347347 0.649667 0.676227 + 1.24892 4.93102 4.43325 0.379631 0.594307 0.708999 + 1.19624 4.83116 4.54582 0.381561 0.598503 0.704419 + 1.52887 4.62331 4.52863 0.445921 0.537041 0.716059 + 0.884016 5.00403 4.55201 0.330896 0.619984 0.711426 + 1.16372 4.76716 4.61927 0.369696 0.564099 0.738321 + 1.42798 4.54238 4.6458 0.409611 0.499168 0.763577 + 1.64207 4.31151 4.66307 0.46973 0.408967 0.782368 + 0.8515 4.94003 4.62545 0.301013 0.60428 0.737724 + 0.85536 4.85492 4.68867 0.282565 0.544035 0.790053 + 1.07525 4.67906 4.71546 0.320392 0.493399 0.808645 + 1.33951 4.45427 4.74201 0.367867 0.442547 0.817818 + 1.55192 4.20397 4.75893 0.426267 0.356838 0.831242 + 0.551163 4.94179 4.7168 0.210461 0.561688 0.800133 + 0.770676 4.77739 4.76376 0.247134 0.491921 0.834828 + 0.990565 4.60152 4.79056 0.280788 0.44819 0.848696 + 1.22576 4.32411 4.85146 0.3211 0.390445 0.862813 + 1.43817 4.07381 4.86839 0.381876 0.306349 0.871964 + 0.449577 4.90912 4.76318 0.16314 0.541058 0.82501 + 0.66909 4.74481 4.81019 0.234444 0.485341 0.842307 + 0.884919 4.49976 4.87041 0.267078 0.41303 0.870675 + 1.12011 4.22235 4.93131 0.258373 0.334263 0.906373 + 1.33197 3.94823 4.94689 0.323482 0.242215 0.914708 + 0.382229 4.84671 4.81289 0.130663 0.522575 0.842521 + 0.572612 4.68144 4.87435 0.21802 0.478742 0.850455 + 0.788441 4.43648 4.93462 0.244569 0.362726 0.899231 + 1.0017 4.09007 5.00022 0.214301 0.261916 0.940997 + 1.21356 3.81596 5.0158 0.258702 0.184379 0.948197 + 0.332602 4.78452 4.8588 0.0823826 0.48666 0.869699 + 0.522985 4.61924 4.92026 0.175513 0.407951 0.895975 + 0.652423 4.35927 4.98336 0.15821 0.277783 0.947526 + 0.414322 4.60138 4.944 0.0730142 0.350317 0.933781 + 0.54376 4.3414 5.00711 0.105858 0.24824 0.962897 + 0.630538 3.96772 5.07934 0.0711827 0.165669 0.983609 + 0.865683 4.01294 5.04901 0.154586 0.204109 0.966666 + 0.285445 4.61442 4.94183 0.00888124 0.347949 0.937471 + 0.32929 4.34471 5.01578 0.0166305 0.229806 0.973094 + 0.126618 4.00777 5.07718 -0.00899253 0.145264 0.989352 + 0.416069 3.97102 5.08802 0.0125617 0.152476 0.988227 + -0.126618 4.00777 5.07718 0.00857274 0.148449 0.988883 + -0.168625 3.67585 5.11488 0.0335816 0.0700883 0.996975 + -0.036021 3.60958 5.11106 0.0340239 0.0444754 0.998431 + 0.036019 3.60958 5.11106 -0.0312578 0.0527594 0.998118 + 0.168625 3.67585 5.11488 -0.0475263 0.0797874 0.995678 + -0.453675 3.28342 5.13379 0.0184732 -0.0443496 0.998845 + -0.276569 3.30822 5.13443 0.00945991 -0.0334062 0.999397 + -0.143965 3.24195 5.13062 0.0491112 -0.0919628 0.994551 + -0.036021 3.22358 5.11523 0.0606462 -0.0963806 0.993495 + 0.036019 3.22358 5.11523 -0.0606653 -0.0963602 0.993496 + -0.613586 3.19338 5.13494 -0.01899 -0.0926544 0.995517 + -0.481604 2.89141 5.07997 -0.00407933 -0.246547 0.969122 + -0.304498 2.9162 5.08063 0.048865 -0.210134 0.976451 + -0.169009 2.89863 5.06505 0.0828932 -0.225449 0.970722 + -0.061064 2.88035 5.04972 0.0588927 -0.255182 0.965098 + -0.739636 3.19127 5.1252 -0.0767826 -0.0885667 0.993106 + -0.748806 2.8824 5.05998 -0.0827097 -0.275901 0.957621 + -0.622755 2.88451 5.06972 -0.0657268 -0.26867 0.960987 + -0.460761 2.49748 4.94567 -0.0748446 -0.294213 0.952805 + -0.808039 3.18561 5.11939 -0.0806067 -0.0878201 0.99287 + -0.861885 2.89341 5.05169 -0.0737692 -0.280627 0.956978 + -0.731464 2.51883 4.92969 -0.104952 -0.332579 0.937217 + -0.601912 2.49058 4.93542 -0.0903038 -0.320347 0.942986 + -0.941057 2.87871 5.04416 -0.131866 -0.28773 0.94859 + -0.966131 2.6097 4.9291 -0.187203 -0.355123 0.915884 + -0.844543 2.52985 4.92141 -0.141239 -0.34552 0.927722 + -0.729918 2.25879 4.83789 -0.145149 -0.336756 0.930337 + -1.0351 2.88445 5.02402 -0.208229 -0.303092 0.929933 + -1.06018 2.61545 4.90895 -0.274133 -0.352606 0.894718 + -0.98127 2.37989 4.83674 -0.220625 -0.358481 0.907092 + -0.859682 2.30012 4.82911 -0.172967 -0.350769 0.920349 + -1.17369 2.68191 4.89262 -0.279532 -0.365124 0.888001 + -1.21853 2.49981 4.80543 -0.296156 -0.35098 0.888316 + -1.10502 2.43343 4.8218 -0.29743 -0.352398 0.887328 + -1.00337 2.1928 4.755 -0.230279 -0.314649 0.920852 + -0.872669 2.14869 4.76999 -0.186075 -0.305523 0.933826 + -1.12712 2.24625 4.74002 -0.280957 -0.318961 0.905167 + -0.985657 1.94226 4.68794 -0.232328 -0.247505 0.940619 + -0.854955 1.89815 4.70294 -0.193071 -0.235839 0.95242 + -0.719277 1.86649 4.72337 -0.184152 -0.223843 0.95707 + -0.742904 2.10736 4.77878 -0.164809 -0.286427 0.943821 + -1.11812 1.97832 4.65868 -0.283296 -0.257614 0.923785 + -0.941492 1.61095 4.6206 -0.243542 -0.23446 0.941125 + -0.802828 1.5775 4.64393 -0.20175 -0.228845 0.952327 + -0.66715 1.54584 4.66436 -0.204871 -0.234155 0.950368 + -0.756166 1.30549 4.58525 -0.187959 -0.253758 0.94883 + -0.618234 1.26053 4.59593 -0.182971 -0.276477 0.943441 + -0.533475 1.49319 4.68135 -0.175303 -0.239478 0.954945 + -0.585319 1.85745 4.74583 -0.163337 -0.216363 0.962553 + -0.608946 2.09832 4.80124 -0.157941 -0.272977 0.948967 + -0.572878 1.03708 4.54095 -0.083161 -0.345928 0.934568 + -0.436992 0.976107 4.51797 -0.0559284 -0.412472 0.909252 + -0.484559 1.20779 4.61287 -0.127697 -0.322557 0.937897 + -0.356444 1.14556 4.59446 -0.0443588 -0.350538 0.935497 + -0.399265 1.46708 4.69638 -0.0729508 -0.240995 0.967781 + -0.400256 0.781019 4.42307 -0.0106649 -0.510206 0.859986 + -0.284118 0.698607 4.36901 0.000932436 -0.554439 0.832224 + -0.308877 0.91388 4.49955 0.0485728 -0.432285 0.900428 + -0.268127 0.521252 4.2368 -0.0753403 -0.663891 0.744025 + -0.16076 0.430421 4.16132 -0.0072755 -0.674685 0.73807 + -0.175686 0.614286 4.31086 0.137063 -0.556624 0.81938 + -0.200446 0.82956 4.44139 0.0596473 -0.491286 0.868953 + -0.11943 0.272204 4.00076 -0.208514 -0.783694 0.585103 + -0.06733 0.225955 3.95507 0.0178055 -0.790443 0.612277 + -0.078383 0.34054 4.076 0.30374 -0.635554 0.709798 + -0.093309 0.524492 4.22559 0.189826 -0.594423 0.781427 + -0.017312 0.102744 3.76948 -0.124459 -0.883564 0.451469 + -0.017312 0.136658 3.83734 -0.204271 -0.829768 0.519383 + -0.028364 0.251335 3.95831 0.19298 -0.696101 0.691521 + -0.028364 0.420627 4.12849 -0.0175842 -0.674384 0.738171 + -0.037326 0.63723 4.28972 0.128472 -0.58124 0.803527 + -0.102271 0.741095 4.38682 0.239922 -0.504773 0.829241 + 0.017312 0.102744 3.76948 0.0866434 -0.844051 0.529216 + 0.017312 0.136658 3.83734 0.20427 -0.82977 0.51938 + 0.028357 0.251335 3.95831 -0.193868 -0.698862 0.688482 + 0.028357 0.420627 4.12849 -0.108218 -0.639865 0.76083 + 0.037325 0.63723 4.28972 -0.129928 -0.586594 0.799391 + 0.06733 0.225955 3.95507 -0.0173498 -0.790553 0.612148 + 0.078376 0.340545 4.07599 -0.14255 -0.696546 0.703209 + 0.093302 0.524492 4.22559 -0.18882 -0.591303 0.784033 + 0.10227 0.741095 4.38682 -0.0782281 -0.572254 0.816337 + 0.069407 0.149078 3.81522 0.168529 -0.826828 0.536613 + 0.119425 0.272204 4.00076 0.170351 -0.771974 0.612403 + 0.16076 0.430421 4.16132 0.00605378 -0.676566 0.736357 + 0.175687 0.614286 4.31086 -0.158377 -0.544376 0.823754 + 0.200447 0.82956 4.44139 -0.0635871 -0.498487 0.864562 + 0.032373 0.030536 3.65695 0.145489 -0.757769 0.636096 + 0.118184 0.172667 3.84657 0.121926 -0.819007 0.56068 + 0.226793 0.363122 4.07629 0.15692 -0.755885 0.63562 + 0.268128 0.521252 4.2368 0.100941 -0.672467 0.733212 + 0.08115 0.054032 3.68825 0.137498 -0.854595 0.500761 + 0.227669 0.22229 3.88322 0.108977 -0.798666 0.591825 + 0.336278 0.412744 4.11294 0.136049 -0.721329 0.679099 + 0.413241 0.285763 3.95348 0.147936 -0.77677 0.612163 + 0.457244 0.502509 4.16846 0.187171 -0.699479 0.689707 + 0.505232 0.693511 4.34644 0.168456 -0.636767 0.752429 + 0.384265 0.603749 4.29091 0.125167 -0.652449 0.747424 + 0.284118 0.698607 4.36901 0.000405746 -0.551966 0.833866 + 0.199095 0.111021 3.73594 0.168197 -0.856183 0.488529 + 0.384668 0.174494 3.8062 0.151031 -0.855663 0.495005 + 0.559882 0.362934 3.99721 0.236794 -0.729579 0.641594 + 0.603885 0.57968 4.2122 0.205733 -0.683039 0.700807 + 0.640456 0.753492 4.35995 0.215102 -0.619996 0.754543 + 0.222855 0.076819 3.64278 0.261264 -0.916036 0.304334 + 0.405595 0.146048 3.72687 0.244611 -0.920584 0.30445 + 0.5671 0.212172 3.77694 0.303262 -0.889085 0.342871 + 0.546173 0.240623 3.85626 0.249228 -0.814257 0.524281 + 0.698136 0.433094 4.01169 0.309269 -0.71703 0.624677 + 0.23707 0.061669 3.56102 0.350144 -0.932646 0.0870095 + 0.41981 0.130899 3.64511 0.302144 -0.942544 0.142547 + 0.580437 0.192389 3.69601 0.336802 -0.926155 0.169712 + 0.700407 0.270469 3.80217 0.325902 -0.850786 0.412252 + 0.684426 0.310778 3.87075 0.306681 -0.766432 0.564384 + 0.419131 0.125386 3.56126 0.322002 -0.945693 0.0444952 + 0.579758 0.186964 3.61221 0.349233 -0.934132 0.0737142 + 0.713744 0.250686 3.72123 0.366499 -0.909607 0.195686 + 0.807504 0.32129 3.81354 0.355221 -0.82918 0.4316 + 0.582589 0.17972 3.52715 0.332727 -0.939061 0.0863546 + 0.724983 0.245138 3.63444 0.371342 -0.92324 0.0986587 + 0.829485 0.290214 3.64637 0.398504 -0.910746 0.108332 + 0.818245 0.295757 3.73317 0.379328 -0.89781 0.223714 + 0.727814 0.237982 3.54944 0.360635 -0.926939 0.103568 + 0.839325 0.283289 3.56156 0.39462 -0.911153 0.118643 + 0.901522 0.324581 3.64824 0.407885 -0.907555 0.0998716 + 0.889591 0.326565 3.73001 0.414165 -0.882604 0.222434 + 0.87885 0.352189 3.81043 0.413976 -0.803967 0.426921 + 0.842589 0.273449 3.47381 0.36121 -0.919414 0.155581 + 0.911362 0.317569 3.56339 0.382289 -0.911803 0.149903 + 1.02128 0.372296 3.6162 0.38698 -0.907799 0.1617 + 1.00935 0.374284 3.69795 0.434578 -0.870421 0.231321 + 0.999038 0.407612 3.78343 0.467217 -0.768616 0.436963 + 0.92372 0.307112 3.4815 0.343319 -0.92175 0.180303 + 1.03236 0.353714 3.53078 0.350733 -0.913232 0.207349 + 1.18774 0.424785 3.54869 0.385461 -0.887364 0.252992 + 1.16866 0.443531 3.64062 0.455006 -0.833079 0.314562 + 1.29106 0.465541 3.5313 0.503585 -0.797351 0.332616 + 1.29236 0.517844 3.6271 0.567315 -0.70587 0.424149 + 1.15835 0.476777 3.72603 0.513923 -0.737074 0.438867 + 1.37396 0.509985 3.47731 0.609641 -0.699364 0.373132 + 1.40912 0.598923 3.58947 0.611471 -0.687514 0.391699 + 1.29221 0.579154 3.71251 0.56437 -0.691397 0.451061 + 1.1582 0.538174 3.81149 0.51694 -0.69684 0.497179 + 1.46022 0.511524 3.33845 0.661922 -0.640609 0.389204 + 1.49537 0.600548 3.45065 0.666996 -0.659474 0.346715 + 1.54136 0.704368 3.54803 0.666631 -0.666083 0.33457 + 1.44189 0.682476 3.68675 0.597719 -0.702049 0.387115 + 1.32498 0.662709 3.80979 0.54056 -0.712473 0.447413 + 1.56986 0.583876 3.24593 0.712371 -0.530732 0.459186 + 1.61585 0.687698 3.34331 0.701167 -0.6334 0.327367 + 1.59424 0.805556 3.65557 0.705947 -0.620175 0.342085 + 1.49477 0.783668 3.79428 0.620268 -0.645179 0.446106 + 1.38252 0.755475 3.88891 0.559501 -0.652639 0.510903 + 1.65977 0.595445 3.1389 0.530351 -0.559547 0.636895 + 1.69813 0.726735 3.25369 0.508273 -0.691615 0.513155 + 1.6807 0.861303 3.54682 0.725403 -0.599312 0.338549 + 1.72597 1.01679 3.69349 0.729961 -0.54229 0.416028 + 1.63951 0.960962 3.8022 0.738618 -0.491797 0.461064 + 1.76298 0.90034 3.4572 0.697311 -0.607765 0.379972 + 1.82446 1.06329 3.59596 0.717629 -0.568598 0.402125 + 1.77437 1.18415 3.82923 0.666476 -0.531775 0.522519 + 1.66388 1.13845 3.91158 0.676316 -0.478514 0.560019 + 1.91628 1.1104 3.48777 0.687528 -0.607123 0.39838 + 1.87287 1.23073 3.73175 0.685338 -0.555294 0.471126 + 1.92797 1.42525 3.85644 0.65931 -0.474878 0.582925 + 1.81817 1.38522 3.94096 0.638687 -0.451324 0.623206 + 1.97879 1.26809 3.64004 0.657222 -0.589996 0.469002 + 2.03389 1.46269 3.76477 0.683295 -0.481485 0.548889 + 1.98256 1.64831 3.95749 0.655709 -0.412744 0.632209 + 1.87276 1.60828 4.04202 0.617402 -0.414599 0.668522 + 2.13417 1.51403 3.67706 0.728469 -0.466285 0.501908 + 2.08837 1.69435 3.87533 0.686929 -0.408522 0.601032 + 2.13287 1.98865 4.00359 0.680107 -0.357191 0.640209 + 2.02705 1.9426 4.08575 0.64693 -0.363393 0.670393 + 2.18866 1.74569 3.78762 0.725366 -0.405236 0.556442 + 2.23098 2.04488 3.9266 0.71235 -0.350831 0.607845 + 2.16569 2.34754 4.15417 0.680814 -0.32071 0.658512 + 2.06529 2.30954 4.23558 0.647547 -0.334039 0.684909 + 2.32652 2.11846 3.85235 0.737179 -0.34434 0.581375 + 2.2638 2.40369 4.07712 0.703857 -0.309903 0.639176 + 2.23071 2.75267 4.26706 0.704848 -0.269927 0.655994 + 2.14538 2.68183 4.32996 0.690635 -0.287135 0.66376 + 2.35401 2.47291 4.00843 0.724547 -0.301144 0.619955 + 2.32092 2.82189 4.19837 0.717417 -0.256977 0.647515 + 2.13899 3.08376 4.4888 0.693077 -0.185557 0.696573 + 2.05366 3.01292 4.5517 0.686493 -0.203207 0.698165 + 2.40224 2.90154 4.13742 0.724859 -0.248558 0.642493 + 2.21668 3.16849 4.43025 0.69993 -0.165775 0.694706 + 2.08087 3.45036 4.60384 0.648443 -0.0183955 0.761041 + 2.00318 3.36563 4.6624 0.645155 -0.0330288 0.763338 + 2.298 3.24814 4.36929 0.6972 -0.155298 0.699853 + 2.16285 3.53564 4.53012 0.655194 0.00920751 0.755404 + 1.91851 3.68226 4.70637 0.572735 0.143768 0.807035 + 2.00049 3.76746 4.63261 0.585234 0.169721 0.792903 + 1.82588 4.03272 4.66956 0.511661 0.297051 0.806203 + 1.73573 3.92518 4.76543 0.490588 0.26284 0.830806 + 1.8346 3.55934 4.78748 0.532126 0.0899927 0.841869 + 1.89297 4.11716 4.5969 0.500414 0.338098 0.797042 + 1.65182 3.80226 4.84653 0.456126 0.205762 0.865801 + 1.54562 3.67677 4.92508 0.401523 0.13732 0.905496 + 1.70185 3.41556 4.86911 0.463396 0.00673877 0.886126 + 1.80006 3.43825 4.8144 0.519388 0.0106047 0.854472 + 1.96864 3.24454 4.68932 0.671263 -0.0821063 0.736658 + 1.42499 3.56737 4.98257 0.348177 0.0926658 0.932837 + 1.58122 3.30616 4.9266 0.425314 -0.0520848 0.903546 + 1.6919 3.0549 4.83039 0.477747 -0.186797 0.858408 + 1.7935 3.12682 4.78942 0.488323 -0.159843 0.857899 + 1.8917 3.14942 4.73467 0.571543 -0.156039 0.8056 + 1.14611 3.67064 5.05489 0.209351 0.114225 0.971146 + 1.35754 3.42205 5.02166 0.347281 0.0322239 0.937207 + 1.46485 3.21364 4.96944 0.39152 -0.0939165 0.915364 + 0.993089 3.68812 5.07862 0.145085 0.108972 0.9834 + 1.22541 3.29936 5.06057 0.221278 -0.0421704 0.974298 + 1.33272 3.09095 5.00835 0.325064 -0.163369 0.931474 + 1.4663 2.89464 4.90477 0.37536 -0.26665 0.887695 + 1.57553 2.96239 4.87323 0.439571 -0.220094 0.870825 + 0.757944 3.6429 5.10895 0.0830556 0.0858306 0.992842 + 0.958766 3.27031 5.09969 0.155946 -0.0305617 0.987293 + 1.07239 3.31675 5.08426 0.149254 -0.0226684 0.988539 + 1.21843 3.01113 5.0242 0.23259 -0.235513 0.943629 + 0.68639 3.5435 5.12112 0.0909173 0.0567912 0.994238 + 0.887212 3.17091 5.11186 0.186094 -0.111762 0.976155 + 0.941054 2.87871 5.04416 0.144061 -0.272918 0.95119 + 1.0351 2.88445 5.02402 0.208241 -0.303094 0.92993 + 1.10481 2.96469 5.03964 0.160819 -0.255759 0.95327 + 0.617988 3.54915 5.12692 0.0554546 0.060742 0.996612 + 0.808039 3.18561 5.11939 0.0806072 -0.0878199 0.99287 + 0.861881 2.89341 5.05169 0.0674412 -0.271256 0.960142 + 0.458076 3.63911 5.12571 0.00855743 0.0767953 0.99701 + 0.613587 3.19338 5.13494 0.0189589 -0.092632 0.99552 + 0.739637 3.19127 5.1252 0.0767833 -0.0885661 0.993106 + 0.748809 2.8824 5.05998 0.0851551 -0.272994 0.958239 + 0.84454 2.52985 4.92141 0.139294 -0.349418 0.926555 + 0.276569 3.30822 5.13443 -0.015804 -0.041527 0.999012 + 0.453675 3.28342 5.13378 -0.0148087 -0.0487054 0.998703 + 0.481604 2.89141 5.07997 0.0128763 -0.237057 0.97141 + 0.622758 2.88451 5.06972 0.0635068 -0.265686 0.961966 + 0.143964 3.24195 5.13062 -0.0490992 -0.091944 0.994553 + 0.169004 2.89863 5.06505 -0.0896965 -0.236381 0.967512 + 0.304498 2.91621 5.08062 -0.0544776 -0.202464 0.977773 + 0.06106 2.88035 5.04972 -0.0461286 -0.269083 0.962012 + 0.06106 2.47763 4.90566 -0.129033 -0.277718 0.951958 + 0.194119 2.46558 4.94153 -0.165542 -0.268496 0.94895 + 0.329613 2.48315 4.9571 0.0125246 -0.292442 0.956201 + -0.061064 2.47763 4.90566 0.136515 -0.287229 0.948084 + -0.066662 2.22117 4.84245 0.130976 -0.0255291 0.991057 + 0.06666 2.22117 4.84245 -0.093112 -0.0629048 0.993667 + 0.199719 2.20912 4.87832 -0.124011 -0.21396 0.968939 + 0.338014 2.20633 4.87336 0.0798532 -0.237676 0.968056 + -0.194123 2.46558 4.94153 0.158418 -0.277759 0.947499 + -0.199721 2.20904 4.87827 0.0723522 -0.165933 0.983479 + -0.066662 2.10356 4.86675 0.0153311 -0.0531574 0.998469 + 0.06666 2.10357 4.86674 0.0296002 -0.0118345 0.999492 + 0.205331 2.10297 4.85859 -0.000590693 -0.163757 0.986501 + -0.329613 2.48315 4.9571 -0.0209634 -0.280896 0.959509 + -0.338025 2.20633 4.87336 -0.0623166 -0.223014 0.972821 + -0.205333 2.10297 4.85859 -0.0433549 -0.203224 0.978172 + -0.193778 1.81952 4.79314 -0.0359448 -0.251317 0.967237 + -0.055108 1.82012 4.80129 -0.0273549 -0.264827 0.963908 + -0.469173 2.22066 4.86194 -0.13962 -0.283734 0.948684 + -0.343636 2.10026 4.85368 -0.113288 -0.220933 0.968687 + -0.316992 1.84324 4.79504 -0.124844 -0.24625 0.961132 + -0.143478 1.37916 4.67886 0.111431 -0.284868 0.952068 + -0.055108 1.27413 4.62718 0.0615891 -0.339909 0.938439 + -0.600366 2.23063 4.84367 -0.132611 -0.311944 0.9408 + -0.477753 2.08844 4.81955 -0.182925 -0.261751 0.947642 + -0.451109 1.83142 4.76091 -0.172841 -0.228024 0.958192 + -0.266692 1.40288 4.68077 -0.0301442 -0.285015 0.958049 + -0.125696 0.992824 4.52421 0.0830763 -0.419569 0.903914 + -0.223871 1.08129 4.57879 0.0707025 -0.372905 0.925172 + -0.037326 0.887793 4.47253 -0.0786295 -0.513223 0.854646 + 0.055106 1.27413 4.62717 -0.0633069 -0.345381 0.936325 + 0.037325 0.887793 4.47253 -0.0045344 -0.478726 0.877952 + 0.143476 1.37917 4.67885 -0.0549522 -0.317859 0.946544 + 0.055106 1.82012 4.80129 0.0198876 -0.254714 0.966812 + 0.125695 0.992824 4.52421 -0.080558 -0.412653 0.907319 + 0.266694 1.40288 4.68077 0.0250415 -0.293139 0.955742 + 0.193777 1.8196 4.79319 0.0436417 -0.241895 0.969321 + 0.343625 2.10025 4.85369 0.13296 -0.202518 0.97021 + 0.223872 1.08129 4.57879 -0.102943 -0.345231 0.932855 + 0.399267 1.46708 4.69638 0.0996345 -0.266208 0.958753 + 0.316994 1.84324 4.79504 0.116424 -0.232371 0.965634 + 0.477742 2.08844 4.81956 0.172771 -0.25193 0.952198 + 0.308878 0.91388 4.49955 0.0230627 -0.476866 0.878673 + 0.356445 1.14556 4.59446 0.0504753 -0.341489 0.938529 + 0.533477 1.49319 4.68135 0.176178 -0.238344 0.955067 + 0.451111 1.83142 4.76091 0.185346 -0.21502 0.95886 + 0.437002 0.976107 4.51797 0.0473672 -0.423403 0.904702 + 0.484569 1.20779 4.61287 0.0907409 -0.286699 0.953714 + 0.667151 1.54584 4.66436 0.201888 -0.231096 0.951754 + 0.585321 1.85745 4.74583 0.164995 -0.21864 0.961755 + 0.608959 2.09832 4.80123 0.165594 -0.264029 0.950193 + 0.400256 0.781019 4.42307 -0.000185284 -0.503147 0.864201 + 0.572888 1.03708 4.54095 0.132448 -0.387693 0.912223 + 0.618244 1.26053 4.59593 0.19345 -0.262811 0.945255 + 0.802826 1.57758 4.64398 0.202981 -0.227326 0.952429 + 0.719279 1.86649 4.72337 0.182769 -0.225335 0.956984 + 0.536141 0.841995 4.44606 0.116833 -0.505686 0.85477 + 0.71081 1.08213 4.53032 0.203883 -0.340475 0.917883 + 0.756166 1.30549 4.58525 0.188774 -0.254654 0.948428 + 0.941491 1.61095 4.6206 0.241126 -0.231558 0.942465 + 0.854954 1.89815 4.70294 0.196229 -0.239324 0.950904 + 0.671365 0.901889 4.45952 0.179325 -0.470172 0.864165 + 0.851214 1.11841 4.50649 0.294277 -0.34399 0.891668 + 0.89483 1.33894 4.56192 0.278438 -0.270967 0.921439 + 1.07396 1.64692 4.59128 0.331799 -0.252466 0.908939 + 0.985656 1.94234 4.68799 0.231211 -0.249054 0.940486 + 0.781792 0.809541 4.36027 0.303734 -0.596549 0.742882 + 0.811769 0.938248 4.43574 0.309418 -0.468492 0.827512 + 0.985987 1.14855 4.46448 0.426726 -0.351933 0.833095 + 1.0296 1.369 4.51986 0.378869 -0.306808 0.873113 + 0.745222 0.635818 4.21257 0.292696 -0.677525 0.674751 + 0.919797 0.840262 4.31706 0.388128 -0.576277 0.719209 + 0.949774 0.968969 4.39253 0.420456 -0.461927 0.780923 + 1.11225 1.17063 4.39344 0.493681 -0.378198 0.7831 + 0.823599 0.487744 4.00924 0.308141 -0.711242 0.631811 + 0.870685 0.690466 4.21011 0.34351 -0.64817 0.679615 + 1.05235 0.848769 4.24332 0.464676 -0.553747 0.69097 + 1.07604 0.990964 4.32143 0.502603 -0.444474 0.741507 + 0.791524 0.361599 3.88213 0.306478 -0.748676 0.58784 + 0.902616 0.527941 4.01681 0.364105 -0.695754 0.619156 + 1.00323 0.698969 4.13638 0.422654 -0.641398 0.640291 + 1.17891 0.862822 4.16378 0.497765 -0.53561 0.682167 + 0.87054 0.401797 3.8897 0.377166 -0.731788 0.567655 + 1.01995 0.547596 3.95637 0.458437 -0.688446 0.562031 + 1.12057 0.718627 4.07593 0.456855 -0.63689 0.62101 + 1.3033 0.865423 4.07208 0.541695 -0.526554 0.655215 + 1.2026 1.0051 4.24194 0.528858 -0.444225 0.723169 + 0.990729 0.457313 3.86275 0.47081 -0.713856 0.518409 + 1.18742 0.628457 3.90512 0.493701 -0.700614 0.515169 + 1.24496 0.721223 3.98424 0.493019 -0.662374 0.564086 + 1.42149 0.889875 3.98692 0.598697 -0.512145 0.615848 + 1.32338 1.02894 4.16285 0.565193 -0.434894 0.701017 + 1.53374 0.918068 3.89229 0.64322 -0.512676 0.568711 + 1.44158 1.0534 4.07769 0.594718 -0.441061 0.672142 + 1.47608 1.25865 4.17559 0.581269 -0.401202 0.707929 + 1.35746 1.22365 4.248 0.557483 -0.395859 0.729731 + 1.23668 1.19981 4.3271 0.530777 -0.392507 0.751142 + 1.55811 1.09555 4.00168 0.629852 -0.451547 0.631974 + 1.59261 1.30081 4.09957 0.591983 -0.411903 0.692743 + 1.52366 1.5029 4.26593 0.556874 -0.382205 0.737435 + 1.40504 1.46782 4.33829 0.54822 -0.365178 0.752396 + 1.28469 1.42995 4.40648 0.524964 -0.358875 0.771765 + 1.70767 1.33952 4.02331 0.627781 -0.433967 0.646192 + 1.64331 1.53754 4.19673 0.567878 -0.394118 0.722624 + 1.69093 1.83115 4.30698 0.549143 -0.360751 0.753857 + 1.57128 1.79651 4.37618 0.522358 -0.354602 0.775499 + 1.4519 1.7518 4.43043 0.505121 -0.327733 0.798401 + 1.75837 1.57626 4.12047 0.598716 -0.403378 0.691973 + 1.80501 1.87262 4.24177 0.578622 -0.364946 0.729391 + 1.73252 2.19524 4.44797 0.535026 -0.35886 0.764831 + 1.61944 2.1369 4.49541 0.506039 -0.35889 0.784298 + 1.50006 2.09219 4.54966 0.418901 -0.351467 0.837253 + 1.9194 1.90472 4.16336 0.608974 -0.365701 0.703856 + 1.8466 2.2367 4.38276 0.567671 -0.356841 0.741899 + 1.83623 2.54914 4.541 0.55545 -0.358178 0.750456 + 1.72681 2.49021 4.58866 0.519334 -0.365533 0.772449 + 1.61373 2.43179 4.63605 0.458219 -0.3744 0.806139 + 1.95764 2.27166 4.3132 0.601845 -0.349297 0.718174 + 1.94726 2.5841 4.47144 0.604456 -0.340142 0.720373 + 1.7774 2.78615 4.69809 0.527126 -0.310637 0.790976 + 1.66799 2.72722 4.74575 0.48511 -0.3282 0.810526 + 1.55876 2.65939 4.77724 0.417146 -0.359934 0.834528 + 2.04499 2.64384 4.41137 0.650129 -0.31547 0.691238 + 1.87899 2.85807 4.65711 0.571262 -0.2896 0.767979 + 1.97672 2.9178 4.59705 0.65247 -0.253819 0.714044 + 1.44593 2.60017 4.80041 0.257662 -0.42463 0.867929 + 1.50091 2.37257 4.65921 0.345915 -0.36824 0.862985 + 1.37587 2.04314 4.58001 0.385219 -0.323978 0.864086 + 1.35201 2.81481 4.92064 0.228274 -0.365585 0.902352 + 1.33731 2.54742 4.78797 0.215805 -0.409421 0.886455 + 1.37672 2.32352 4.68958 0.31693 -0.332352 0.888312 + 1.24894 2.0079 4.62565 0.338407 -0.286289 0.896393 + 1.33155 1.71384 4.49857 0.475129 -0.298176 0.827855 + 1.24339 2.76206 4.9082 0.18998 -0.40872 0.892667 + 1.21853 2.49981 4.80543 0.297067 -0.348958 0.888808 + 1.25794 2.27592 4.70703 0.280022 -0.315419 0.906697 + 1.11812 1.97832 4.65868 0.290981 -0.266915 0.918742 + 1.20462 1.67869 4.54425 0.381834 -0.270176 0.88386 + 1.17369 2.68191 4.89262 0.279532 -0.365117 0.888004 + 1.10502 2.43335 4.82176 0.293681 -0.350358 0.889382 + 1.12712 2.24625 4.74002 0.279282 -0.321578 0.904759 + 1.06018 2.61545 4.90895 0.274134 -0.352617 0.894713 + 0.981271 2.37989 4.83674 0.219137 -0.361744 0.906157 + 1.00337 2.1928 4.755 0.22438 -0.310985 0.923549 + 0.87267 2.14869 4.76999 0.188975 -0.300815 0.934772 + 0.966128 2.6097 4.9291 0.199935 -0.363202 0.910006 + 0.859683 2.30012 4.82911 0.183215 -0.355693 0.916468 + 0.72993 2.25879 4.83789 0.139526 -0.344087 0.928513 + 0.742917 2.10736 4.77878 0.1578 -0.280602 0.946764 + 0.731467 2.51883 4.92969 0.108072 -0.3359 0.935677 + 0.600378 2.23063 4.84367 0.14269 -0.319469 0.936792 + 0.469162 2.22066 4.86194 0.126716 -0.297719 0.946206 + 0.601915 2.49058 4.93542 0.088653 -0.322623 0.942367 + 0.460761 2.49748 4.94567 0.0856858 -0.306807 0.947907 + 1.16027 1.40077 4.47282 0.44072 -0.338532 0.831362 + -0.251458 2.05987 -3.28899 -0.218359 0.538832 -0.813621 + -0.23245 2.17267 -3.20717 -0.21192 0.731562 -0.648002 + -0.152461 2.19752 -3.16676 0.172897 0.865061 -0.470931 + -0.267721 1.89853 -3.37668 -0.307719 0.373517 -0.875097 + -0.310818 1.90591 -3.35837 -0.343209 0.388145 -0.855308 + -0.294555 2.06726 -3.27068 -0.396886 0.55638 -0.730016 + -0.248572 1.81892 -3.40553 -0.299508 -0.421526 -0.855927 + -0.284143 1.82119 -3.39091 -0.352686 -0.476198 -0.805511 + -0.31065 1.83131 -3.38534 -0.541482 -0.328912 -0.773702 + -0.327769 1.9222 -3.34395 -0.545759 0.401431 -0.735527 + -0.329604 2.02374 -3.2783 -0.64101 0.442267 -0.6273 + -0.206741 1.81786 -3.41565 -0.168602 -0.426708 -0.888535 + -0.235338 1.79851 -3.3656 -0.0778444 -0.991165 -0.107389 + -0.281294 1.8027 -3.34962 -0.238713 -0.968073 -0.0764938 + -0.307801 1.81282 -3.34405 -0.507137 -0.84637 -0.162696 + -0.327601 1.8476 -3.37092 -0.780887 -0.129977 -0.611001 + -0.145802 1.79423 -3.3803 -0.00251803 -0.980512 -0.196443 + -0.193506 1.79745 -3.37572 -0.0631678 -0.991158 -0.116684 + -0.090409 1.79758 -3.38053 0.105152 -0.957042 -0.270212 + -0.083178 1.80368 -3.33461 0.0607932 -0.928123 0.367277 + -0.127022 1.80633 -3.32918 -0.00742429 -0.894547 0.446911 + -0.174726 1.80955 -3.3246 0.00547908 -0.909947 0.414689 + -0.033943 1.80588 -3.37903 0.540004 -0.804734 -0.246575 + -0.026712 1.81199 -3.33312 0.564218 -0.798804 0.208735 + -0.026712 1.83793 -3.28811 0.440511 -0.756404 0.483531 + -0.077097 1.85489 -3.27132 -0.0232801 -0.805646 0.59194 + -0.120941 1.85754 -3.26589 0.0676383 -0.836412 0.543911 + 0 1.88767 -3.35525 0.922265 -0.319494 -0.217603 + -0.016252 1.87696 -3.22971 0.521247 -0.694291 0.496248 + -0.066636 1.89392 -3.21292 0.0744862 -0.873026 0.481952 + -0.101804 1.89658 -3.19232 0.119764 -0.914255 0.387032 + -0.141762 1.85626 -3.26403 0.09413 -0.846341 0.524259 + -0.016252 1.92627 -3.17244 0.72321 -0.621892 0.300361 + -0.030875 1.92357 -3.14486 0.480746 -0.803582 0.350913 + -0.066043 1.92622 -3.12427 0.19493 -0.912793 0.358903 + -0.122625 1.89529 -3.19047 0.141095 -0.924313 0.354596 + -0.160705 1.86355 -3.24917 0.177591 -0.870128 0.459716 + -0.011183 1.96532 -3.12314 0.906192 -0.313133 0.284191 + -0.025806 1.96262 -3.09556 0.74708 -0.470955 0.46912 + -0.057187 1.95648 -3.06427 0.495356 -0.693643 0.522954 + -0.120883 1.92386 -3.08813 0.217273 -0.90909 0.355454 + -0.011183 2.00908 -3.09637 0.962129 -0.0397052 0.269686 + -0.041291 1.9961 -3.05045 0.760701 -0.354126 0.543994 + -0.072672 1.98996 -3.01916 0.589456 -0.527498 0.611791 + -0.112028 1.95411 -3.02813 0.351856 -0.794393 0.495113 + -0.147395 1.9172 -3.09252 0.147189 -0.929507 0.338159 + -0.025536 2.06202 -3.04565 0.912294 -0.121763 0.391015 + -0.055645 2.04904 -2.99974 0.795514 -0.294027 0.529816 + -0.080386 2.03729 -2.9747 0.64465 -0.446693 0.620396 + -0.098622 1.98346 -3.00363 0.479707 -0.62103 0.619841 + -0.011587 2.07808 -3.08639 0.98191 0.0245926 0.187744 + -0.051364 2.13434 -2.97331 0.918314 -0.121087 0.376879 + -0.071744 2.11124 -2.94107 0.821001 -0.273425 0.501194 + -0.096485 2.0995 -2.91603 0.555575 -0.471126 0.685111 + -0.106336 2.03079 -2.95916 0.427257 -0.537206 0.727228 + -0.032105 2.15701 -3.05363 0.961641 0.273533 0.0206299 + -0.037415 2.1504 -3.01405 0.970944 0.0436742 0.235287 + -0.061569 2.19045 -2.92543 0.925257 -0.188719 0.329067 + -0.081949 2.16734 -2.89318 0.82727 -0.292898 0.479411 + -0.102944 2.15383 -2.872 0.557112 -0.467825 0.686125 + -0.043906 2.17882 -3.07158 0.808843 0.533337 -0.247638 + -0.044375 2.21465 -3.00057 0.984043 0.173808 -0.0380833 + -0.049685 2.20804 -2.96099 0.980836 -0.0527312 0.187566 + -0.060198 2.2336 -2.89595 0.925279 -0.217824 0.310503 + -0.081358 2.25834 -3.01682 0.422646 0.610891 -0.669464 + -0.054531 2.22951 -3.02005 0.782685 0.464533 -0.414263 + -0.048481 2.27233 -2.96812 0.972569 0.205606 -0.108789 + -0.048313 2.25119 -2.93151 0.991396 -0.0412564 0.124226 + -0.097358 2.23148 -3.06218 0.303969 0.759977 -0.574489 + -0.104256 2.26771 -3.01851 0.221836 0.665219 -0.712932 + -0.077574 2.29006 -2.99257 0.315715 0.665445 -0.676392 + -0.058636 2.28719 -2.9876 0.638596 0.557015 -0.530969 + -0.120311 2.23474 -3.06283 0.230218 0.833097 -0.50294 + -0.127209 2.27097 -3.01915 0.0880916 0.680018 -0.727884 + -0.123349 2.30196 -2.99864 0.11593 0.713936 -0.690547 + -0.100472 2.29943 -2.99426 0.26694 0.718151 -0.642653 + -0.089494 2.35141 -2.90314 0.23161 0.853124 -0.467479 + -0.106736 2.2085 -3.12135 0.490261 0.809485 -0.323075 + -0.138848 2.22171 -3.11437 0.227633 0.891642 -0.391353 + -0.152423 2.24796 -3.05585 0.0904188 0.866021 -0.491764 + -0.154284 2.27313 -3.01843 -0.0152724 0.704336 -0.709703 + -0.184307 2.23498 -3.10511 0.019555 0.937109 -0.348489 + -0.181421 2.25134 -3.04883 -0.0847387 0.893436 -0.441125 + -0.183282 2.27651 -3.01141 -0.194604 0.648238 -0.73615 + -0.183897 2.30362 -2.99704 -0.165107 0.675695 -0.718454 + -0.150424 2.30412 -2.99792 0.00673593 0.721367 -0.692521 + -0.197921 2.21078 -3.1575 -0.0182108 0.862449 -0.505817 + -0.227363 2.23092 -3.09344 -0.287568 0.907389 -0.306512 + -0.224477 2.24728 -3.03716 -0.282637 0.876315 -0.390113 + -0.219971 2.27262 -3.00065 -0.350766 0.62678 -0.69578 + -0.267374 2.17265 -3.19234 -0.427205 0.717835 -0.549735 + -0.232845 2.21076 -3.14267 -0.291392 0.876131 -0.384037 + -0.278273 2.20844 -3.08421 -0.537864 0.794916 -0.280733 + -0.271332 2.2369 -3.01597 -0.513607 0.774855 -0.368521 + -0.266826 2.26223 -2.97946 -0.503052 0.544678 -0.671017 + -0.293459 2.14228 -3.20248 -0.553463 0.636752 -0.536867 + -0.283755 2.18828 -3.13344 -0.581465 0.760323 -0.289495 + -0.30984 2.1579 -3.14358 -0.811951 0.536674 -0.229599 + -0.308809 2.18477 -3.07768 -0.812183 0.552145 -0.188402 + -0.301868 2.21323 -3.00943 -0.781573 0.576371 -0.238622 + -0.328509 2.09876 -3.2101 -0.794375 0.496494 -0.349946 + -0.348331 2.00741 -3.25833 -0.909443 0.262462 -0.322533 + -0.346668 2.05602 -3.20424 -0.944 0.301425 -0.134194 + -0.322175 2.12033 -3.14958 -0.934475 0.348612 -0.0722897 + -0.321143 2.14719 -3.08367 -0.944076 0.31689 -0.0911142 + -0.313911 2.189 -3.00771 -0.931044 0.352826 -0.0931184 + -0.346496 1.90587 -3.32399 -0.884811 0.193 -0.4241 + -0.361012 1.96411 -3.22222 -0.997379 0.035581 -0.0630031 + -0.35935 2.01272 -3.16812 -0.991915 0.0996217 0.0786141 + -0.352907 2.03101 -3.14275 -0.983721 0.110054 0.142062 + -0.340334 2.07758 -3.14371 -0.948807 0.313783 -0.0361418 + -0.33517 1.84774 -3.34792 -0.843722 -0.409428 -0.347134 + -0.345178 1.86107 -3.34457 -0.564471 0.0283059 -0.824968 + -0.35672 1.91106 -3.28705 -0.983636 0.0990789 -0.15048 + -0.353513 1.88831 -3.25743 -0.991042 -0.118767 0.0610789 + -0.357805 1.94136 -3.1926 -0.942532 -0.234948 0.237558 + -0.31537 1.81296 -3.32104 -0.457844 -0.885437 -0.0798684 + -0.340923 1.83189 -3.29333 -0.699523 -0.713746 0.0351388 + -0.350931 1.84522 -3.28997 -0.891516 -0.449983 0.0520898 + -0.355402 1.86627 -3.30763 -0.982489 -0.123404 -0.139592 + -0.349042 1.86726 -3.23978 -0.851427 -0.423322 0.309629 + -0.305358 1.81202 -3.29945 -0.127702 -0.941155 0.31292 + -0.330911 1.83094 -3.27173 -0.348666 -0.83127 0.432923 + -0.277517 1.8115 -3.30338 0.000438635 -0.920624 0.390449 + -0.295121 1.84395 -3.26153 0.092684 -0.82821 0.552701 + -0.296138 1.86434 -3.22731 0.0621897 -0.875939 0.478397 + -0.331928 1.85133 -3.23751 -0.294864 -0.809359 0.50793 + -0.326539 1.90949 -3.16483 -0.716455 -0.513282 0.472476 + -0.231561 1.80731 -3.31936 0.10679 -0.942221 0.317513 + -0.242772 1.84949 -3.25356 0.0126169 -0.859353 0.511228 + -0.267281 1.84343 -3.26547 -0.0228817 -0.812728 0.582194 + -0.272701 1.87554 -3.20482 0.00579415 -0.903613 0.42831 + -0.309425 1.89356 -3.16257 -0.310998 -0.809053 0.498712 + -0.208394 1.81534 -3.30799 0.106514 -0.908215 0.404721 + -0.219605 1.85752 -3.24219 0.0331016 -0.885616 0.463237 + -0.215573 1.88599 -3.1778 -0.015708 -0.930334 0.366377 + -0.248192 1.8816 -3.19291 -0.0110217 -0.919205 0.393625 + -0.193669 1.81684 -3.30973 0.0946689 -0.889434 0.447152 + -0.197347 1.8591 -3.23793 0.0616154 -0.887548 0.456577 + -0.193315 1.88757 -3.17354 0.0470639 -0.93674 0.346847 + -0.182622 1.86061 -3.23967 0.217704 -0.877168 0.427998 + -0.171053 1.8857 -3.18537 0.182903 -0.925894 0.330556 + -0.169656 1.91908 -3.08069 0.07424 -0.933414 0.351037 + -0.222994 1.91107 -3.10367 -0.0173308 -0.941348 0.336991 + -0.255613 1.90667 -3.11878 -0.124156 -0.921583 0.367792 + -0.149137 1.88864 -3.19486 0.215088 -0.92054 0.326103 + -0.165125 1.94022 -3.02443 0.108313 -0.907134 0.406666 + -0.218463 1.93221 -3.04741 -0.111582 -0.898779 0.423964 + -0.253433 1.93131 -3.06382 -0.264142 -0.837594 0.47819 + -0.225351 1.9563 -3.00877 -0.219118 -0.830583 0.511977 + -0.282463 1.94866 -3.05916 -0.49023 -0.724139 0.485075 + -0.283809 1.9294 -3.08511 -0.437836 -0.758427 0.482792 + -0.285988 1.90476 -3.14008 -0.0758485 -0.913571 0.399544 + -0.19038 1.9572 -2.99237 -0.145514 -0.763983 0.628614 + -0.17514 2.01276 -2.94363 0.135703 -0.5745 0.807177 + -0.221486 1.96884 -2.98288 0.121068 -0.834987 0.536786 + -0.142878 1.95267 -3.0086 0.273699 -0.812213 0.515169 + -0.168133 1.96965 -2.97654 0.0953047 -0.689024 0.718445 + -0.129472 1.98201 -2.9841 0.381677 -0.614563 0.690388 + -0.136479 2.02512 -2.9512 0.316344 -0.540863 0.779355 + -0.149155 2.08945 -2.9016 0.195232 -0.562646 0.803314 + -0.182592 2.09 -2.89932 0.0299881 -0.556464 0.83033 + -0.215792 2.08846 -2.89973 -0.117927 -0.545613 0.829698 + -0.20834 2.01122 -2.94405 -0.0712762 -0.585065 0.807848 + -0.119012 2.09512 -2.90956 0.317708 -0.556568 0.767655 + -0.12547 2.14946 -2.86554 0.334991 -0.576663 0.745144 + -0.151331 2.14541 -2.85801 0.174117 -0.61988 0.765135 + -0.184768 2.14596 -2.85572 0.0400575 -0.669956 0.741319 + -0.212844 2.14683 -2.85505 -0.135856 -0.668473 0.731223 + -0.103209 2.20056 -2.84094 0.673171 -0.477386 0.564751 + -0.122263 2.19353 -2.82877 0.460513 -0.614541 0.640521 + -0.148124 2.18949 -2.82124 0.293896 -0.690206 0.661242 + -0.176551 2.18416 -2.81201 0.176259 -0.748459 0.63933 + -0.204628 2.18504 -2.81134 -0.107222 -0.750932 0.651616 + -0.082215 2.21407 -2.86212 0.826353 -0.337796 0.450593 + -0.11137 2.27078 -2.76348 0.680305 -0.514465 0.522025 + -0.130423 2.26376 -2.75131 0.504414 -0.626712 0.593968 + -0.15082 2.25873 -2.74261 0.377074 -0.68718 0.620966 + -0.071664 2.30111 -2.81601 0.924252 -0.212027 0.317494 + -0.093681 2.28158 -2.78219 0.819853 -0.380389 0.427955 + -0.131873 2.36449 -2.64017 0.649771 -0.551772 0.522823 + -0.145505 2.36013 -2.63263 0.471492 -0.659434 0.585528 + -0.165902 2.35511 -2.62392 0.362104 -0.703069 0.612025 + -0.062194 2.31767 -2.84469 0.986158 0.0186609 0.164755 + -0.098132 2.38756 -2.68012 0.90883 -0.248176 0.335314 + -0.114185 2.37528 -2.65887 0.798363 -0.414673 0.436649 + -0.145322 2.44721 -2.53414 0.631681 -0.575774 0.519099 + -0.062361 2.3388 -2.8813 0.945746 0.322243 -0.0415247 + -0.088682 2.4174 -2.73182 0.943167 0.331759 -0.0193032 + -0.088662 2.40411 -2.7088 0.98495 0.021417 0.171507 + -0.117082 2.4663 -2.56721 0.903317 -0.268488 0.334564 + -0.133134 2.45403 -2.54596 0.781937 -0.444957 0.436564 + -0.070556 2.34854 -2.89817 0.610668 0.713171 -0.344199 + -0.096877 2.42714 -2.74869 0.575422 0.75827 -0.306456 + -0.110511 2.49009 -2.60842 0.939899 0.339659 -0.0349542 + -0.110491 2.47681 -2.5854 0.98469 -0.00573657 0.174221 + -0.134346 2.53153 -2.4672 0.892657 -0.0892953 0.441802 + -0.110532 2.42881 -2.75158 0.198245 0.879829 -0.431972 + -0.129787 2.4979 -2.62194 0.189268 0.874336 -0.446894 + -0.116132 2.49623 -2.61905 0.571454 0.754259 -0.323316 + -0.127775 2.55059 -2.50022 0.879144 0.47098 0.0726899 + -0.127755 2.54203 -2.48539 0.94369 0.184184 0.274819 + -0.107449 2.35357 -2.90688 0.192312 0.863848 -0.465599 + -0.128487 2.43097 -2.75532 0.175695 0.883329 -0.434582 + -0.142106 2.49922 -2.62423 0.167668 0.877041 -0.450207 + -0.142187 2.55777 -2.51265 0.171822 0.922607 -0.345359 + -0.133396 2.55673 -2.51085 0.53549 0.814638 -0.222746 + -0.130326 2.3561 -2.91125 0.121261 0.870736 -0.476565 + -0.14484 2.43253 -2.75802 0.107021 0.889835 -0.443555 + -0.158459 2.50078 -2.62693 0.104357 0.882685 -0.458233 + -0.16498 2.56009 -2.51667 0.100141 0.926764 -0.362049 + -0.154506 2.55909 -2.51493 0.155437 0.923946 -0.349517 + -0.154514 2.35691 -2.91266 0.0160742 0.873493 -0.486572 + -0.169028 2.43334 -2.75942 0.0153302 0.892056 -0.451664 + -0.175038 2.50128 -2.6278 0.013682 0.884916 -0.46555 + -0.187987 2.3564 -2.91177 -0.113945 0.863086 -0.492036 + -0.193077 2.43299 -2.75882 -0.106923 0.884529 -0.454067 + -0.199087 2.50094 -2.6272 -0.103096 0.878995 -0.465553 + -0.196999 2.56038 -2.51717 -0.0930509 0.922979 -0.373433 + -0.181559 2.5606 -2.51754 0.0126849 0.92831 -0.37159 + -0.220585 2.29972 -2.98628 -0.327904 0.640685 -0.694263 + -0.218494 2.35289 -2.90569 -0.271071 0.832024 -0.484 + -0.223585 2.42948 -2.75274 -0.248741 0.85982 -0.445911 + -0.220089 2.49869 -2.62331 -0.242939 0.857078 -0.45431 + -0.258012 2.29166 -2.97232 -0.464643 0.583242 -0.666285 + -0.255921 2.34483 -2.89174 -0.400385 0.788459 -0.466931 + -0.250666 2.42435 -2.74386 -0.36815 0.824968 -0.428827 + -0.247171 2.49356 -2.61442 -0.35535 0.82708 -0.435506 + -0.284352 2.27957 -2.96062 -0.637382 0.507025 -0.580232 + -0.275893 2.33922 -2.88201 -0.592933 0.69556 -0.405743 + -0.270638 2.41874 -2.73413 -0.561015 0.737811 -0.375363 + -0.260889 2.49002 -2.60827 -0.54621 0.748479 -0.376076 + -0.235442 2.55483 -2.50754 -0.327434 0.884796 -0.331547 + -0.293166 2.25013 -2.96776 -0.714989 0.465898 -0.521278 + -0.29339 2.27383 -2.95069 -0.849928 0.409895 -0.331072 + -0.28493 2.33348 -2.87208 -0.821451 0.503148 -0.26844 + -0.276981 2.41524 -2.72802 -0.795645 0.548389 -0.257327 + -0.267232 2.48651 -2.60215 -0.780405 0.571807 -0.252992 + -0.305209 2.2259 -2.96604 -0.913315 0.355514 -0.198661 + -0.312744 2.21232 -2.94996 -0.969967 0.232273 -0.0722071 + -0.300925 2.26025 -2.93461 -0.940963 0.29954 -0.157686 + -0.292781 2.32328 -2.85759 -0.922847 0.348015 -0.165039 + -0.284832 2.40503 -2.71352 -0.908802 0.386021 -0.158323 + -0.323131 2.16066 -3.00182 -0.977091 0.21184 -0.0204442 + -0.312674 2.20736 -2.92309 -0.973595 -0.0340987 0.22572 + -0.310056 2.24086 -2.9088 -0.992727 0.0721936 0.0963434 + -0.301912 2.30389 -2.83178 -0.997784 0.0452835 0.0487576 + -0.291723 2.39286 -2.69742 -0.996212 0.0758862 0.0424683 + -0.330363 2.11885 -3.07778 -0.960276 0.276503 -0.0376346 + -0.32306 2.1557 -2.97495 -0.97942 -0.018849 0.200951 + -0.306553 2.13106 -2.94589 -0.797598 -0.354726 0.48786 + -0.298173 2.1898 -2.89418 -0.822847 -0.285061 0.491592 + -0.295555 2.2233 -2.87989 -0.888521 -0.221718 0.401711 + -0.342936 2.07228 -3.07681 -0.986382 0.00243778 0.16445 + -0.326429 2.04764 -3.04775 -0.886975 -0.235309 0.397371 + -0.272273 2.10669 -2.92795 -0.665415 -0.415155 0.620379 + -0.263892 2.16543 -2.87623 -0.632123 -0.513739 0.58008 + -0.262774 2.2018 -2.83487 -0.705051 -0.508618 0.494177 + -0.344862 1.99285 -3.11945 -0.914913 -0.197597 0.351979 + -0.332527 1.99984 -3.08785 -0.866712 -0.279936 0.412851 + -0.282181 2.02501 -2.97729 -0.750679 -0.319663 0.578184 + -0.247373 2.01184 -2.95231 -0.410357 -0.502208 0.761179 + -0.237464 2.09352 -2.90297 -0.44558 -0.482307 0.754214 + -0.351305 1.97457 -3.14482 -0.908708 -0.239193 0.342106 + -0.320039 1.9427 -3.11706 -0.736999 -0.506047 0.448049 + -0.318694 1.96196 -3.09111 -0.768869 -0.482946 0.419052 + -0.306359 1.96895 -3.05951 -0.738873 -0.52726 0.419598 + -0.28828 1.97721 -3.01739 -0.721224 -0.506276 0.472781 + -0.278599 1.9612 -3.03327 -0.437857 -0.798916 0.412329 + -0.260519 1.96946 -2.99115 -0.385691 -0.750131 0.537165 + -0.234516 2.1519 -2.85829 -0.440538 -0.601958 0.666013 + -0.233398 2.18826 -2.81693 -0.414741 -0.68348 0.600703 + -0.259031 2.26576 -2.75796 -0.722329 -0.524375 0.450856 + -0.203814 2.25251 -2.73182 -0.070152 -0.75801 0.64846 + -0.232584 2.25573 -2.73741 -0.424254 -0.69214 0.58391 + -0.257984 2.36276 -2.64031 -0.702431 -0.546811 0.45562 + -0.291812 2.28726 -2.80297 -0.896974 -0.322994 0.301847 + -0.179248 2.2534 -2.73338 0.203954 -0.735972 0.64556 + -0.210942 2.35081 -2.61647 -0.054758 -0.766176 0.640293 + -0.231537 2.35273 -2.61976 -0.406037 -0.703988 0.582696 + -0.249046 2.4439 -2.53038 -0.688999 -0.542046 0.48111 + -0.281624 2.37623 -2.66861 -0.87677 -0.360605 0.318179 + -0.186376 2.35171 -2.61803 0.185515 -0.747591 0.637724 + -0.210276 2.43566 -2.51411 -0.051602 -0.769134 0.637001 + -0.230871 2.43758 -2.5174 -0.395312 -0.700434 0.59424 + -0.240977 2.5156 -2.44155 -0.720253 -0.307776 0.621698 + -0.272686 2.45737 -2.55869 -0.880328 -0.327252 0.343407 + -0.172947 2.43967 -2.52109 0.34674 -0.718014 0.603513 + -0.193421 2.43627 -2.5152 0.182407 -0.756081 0.628545 + -0.2096 2.50807 -2.42651 -0.0610164 -0.596689 0.80015 + -0.222802 2.50928 -2.42857 -0.410159 -0.503335 0.760542 + -0.158954 2.44285 -2.52659 0.455179 -0.677123 0.5782 + -0.179594 2.51086 -2.4314 0.360863 -0.562574 0.743834 + -0.192744 2.50868 -2.4276 0.194926 -0.59648 0.778598 + -0.196838 2.55676 -2.40464 0.0615659 0.247304 0.96698 + -0.21004 2.55797 -2.4067 -0.329769 0.34857 0.877355 + -0.156885 2.51682 -2.44171 0.645516 -0.408913 0.645058 + -0.165601 2.51404 -2.43691 0.476431 -0.514593 0.712887 + -0.183688 2.55895 -2.40844 0.282714 0.313734 0.906446 + -0.225304 2.56665 -2.42497 -0.602512 0.56139 0.567293 + -0.256241 2.52427 -2.45982 -0.873282 -0.109365 0.474782 + -0.144697 2.52364 -2.45353 0.793967 -0.260513 0.549318 + -0.174971 2.56172 -2.41324 0.449796 0.386425 0.805208 + -0.199345 2.58 -2.44491 -0.082826 0.991591 0.0994351 + -0.216786 2.57669 -2.43918 -0.242803 0.959411 0.143451 + -0.220791 2.57447 -2.43529 -0.411202 0.861011 0.299286 + -0.16462 2.56961 -2.42691 0.561152 0.569587 0.600566 + -0.16464 2.57817 -2.44174 0.418249 0.882048 0.216932 + -0.173431 2.57921 -2.44353 0.0786092 0.986949 0.140543 + -0.183906 2.58021 -2.44528 0.0294615 0.993422 0.110656 + -0.218001 2.55814 -2.51328 -0.228921 0.905474 -0.357368 + -0.24916 2.55128 -2.50139 -0.509127 0.82027 -0.260665 + -0.253165 2.54906 -2.4975 -0.717118 0.686214 -0.121872 + -0.258603 2.54263 -2.4884 -0.828347 0.560103 -0.011234 + -0.263116 2.53481 -2.47807 -0.942069 0.269214 0.200073 + -0.27267 2.48008 -2.59304 -0.895014 0.419745 -0.150879 + -0.279561 2.46791 -2.57694 -0.993344 0.0904817 0.0712806 + 1.70947 2.207 -1.0732 -0.932897 0.0215028 0.359501 + 1.68994 2.06329 -1.11309 -0.928746 0.0378035 0.368784 + 1.70339 1.9893 -1.07574 -0.891568 0.0270818 0.452076 + 1.7066 2.25074 -1.08775 -0.946906 0.0705403 0.313677 + 1.68707 2.10694 -1.1277 -0.975667 0.0565817 0.211832 + 1.6801 1.96246 -1.12805 -0.952446 0.0480972 0.300888 + 1.69354 1.88847 -1.0907 -0.887855 0.0584277 0.456399 + 1.72999 1.82017 -1.02458 -0.824997 0.0814265 0.559241 + 1.67403 1.97548 -1.1624 -0.980483 0.0776943 0.180599 + 1.66549 1.89627 -1.1742 -0.963869 0.0805697 0.253901 + 1.67156 1.88333 -1.13979 -0.949116 0.0939896 0.300574 + 1.67721 1.82691 -1.10747 -0.904603 0.0904892 0.416541 + 1.71157 1.78383 -1.04185 -0.835431 0.120999 0.536111 + 1.67457 2.027 -1.19043 -0.994833 0.0992431 0.0214194 + 1.65095 1.83516 -1.20736 -0.986529 0.144783 0.0761403 + 1.65795 1.81516 -1.16071 -0.960089 0.102713 0.260151 + 1.6636 1.75882 -1.12833 -0.91532 0.161804 0.368793 + 1.69524 1.72227 -1.05862 -0.837344 0.205978 0.506387 + 1.67051 1.94782 -1.27149 -0.967205 0.167548 -0.1909 + 1.66079 1.88651 -1.2351 -0.988105 0.13857 -0.0666898 + 1.63079 1.69475 -1.26975 -0.969797 0.24063 -0.0398943 + 1.61944 1.69088 -1.21046 -0.963271 0.262642 0.0559363 + 1.64341 1.75406 -1.19388 -0.903505 0.190167 0.384077 + 1.64871 1.78512 -1.32169 -0.959819 0.202309 -0.194467 + 1.64063 1.74601 -1.29754 -0.981592 0.188498 -0.030748 + 1.61323 1.63098 -1.2815 -0.945025 0.326675 0.0145108 + 1.60187 1.62711 -1.22221 -0.943088 0.33252 -0.00401347 + 1.61773 1.64263 -1.16089 -0.909241 0.305563 0.282688 + 1.65962 1.79027 -1.34981 -0.800425 0.27522 -0.532517 + 1.6578 1.70994 -1.38728 -0.685265 0.39361 -0.612767 + 1.61771 1.62371 -1.39571 -0.925311 0.300882 -0.230802 + 1.60964 1.58459 -1.37157 -0.942423 0.300413 -0.146939 + 1.60154 1.60372 -1.30009 -0.91387 0.387585 -0.120914 + 1.6865 1.80988 -1.36317 -0.0330141 0.40307 -0.914574 + 1.68468 1.72955 -1.40063 0.00451311 0.429125 -0.903234 + 1.67945 1.64718 -1.44516 0.139863 0.500127 -0.854582 + 1.66448 1.57375 -1.48918 0.22822 0.537852 -0.811561 + 1.64283 1.63651 -1.43129 -0.642365 0.485275 -0.593191 + 1.73367 1.82544 -1.32353 0.632844 0.274154 -0.724119 + 1.73005 1.73866 -1.36081 0.654193 0.279369 -0.70284 + 1.73301 1.64749 -1.3925 0.696074 0.278801 -0.661627 + 1.72777 1.56512 -1.43703 0.722036 0.287675 -0.629212 + 1.72826 1.47856 -1.47591 0.749976 0.311276 -0.583646 + 1.8073 1.59501 -1.329 0.790291 0.234705 -0.565998 + 1.81026 1.50393 -1.36065 0.761352 0.208606 -0.613862 + 1.81855 1.40599 -1.38161 0.809609 0.219224 -0.544494 + 1.81903 1.31935 -1.42054 0.824329 0.232015 -0.516383 + 1.88805 1.42946 -1.26487 0.862473 0.198283 -0.465644 + 1.88883 1.33396 -1.29624 0.848639 0.16815 -0.501535 + 1.89712 1.23602 -1.31722 0.89229 0.157549 -0.423081 + 1.89403 1.14413 -1.35127 0.900486 0.162554 -0.403361 + 1.82824 1.22532 -1.44989 0.857478 0.240547 -0.454827 + 1.9662 1.25106 -1.18427 0.897749 0.174042 -0.404667 + 1.96698 1.15547 -1.2157 0.851342 0.0861279 -0.517492 + 1.95399 1.05227 -1.23915 0.88509 0.0718771 -0.459836 + 1.95089 0.960473 -1.27315 0.922425 0.103655 -0.372004 + 2.02124 1.12376 -1.10058 0.943906 0.107475 -0.312234 + 2.01002 1.03308 -1.14751 0.912561 0.0248311 -0.408186 + 1.99703 0.929877 -1.17096 0.921965 0.013977 -0.387022 + 1.97952 0.841297 -1.22353 0.943093 0.0450062 -0.32947 + 1.93121 0.894901 -1.34518 0.937188 0.0959741 -0.335362 + 2.04402 1.04975 -1.03439 0.970161 0.0366551 -0.239675 + 2.0328 0.959071 -1.08132 0.962936 -0.042258 -0.266397 + 2.01409 0.862541 -1.12133 0.963861 -0.0557323 -0.260511 + 1.99658 0.774051 -1.17386 0.972629 -0.0280371 -0.230665 + 2.06051 1.00499 -0.955058 0.988196 -0.0555689 -0.142761 + 2.04378 0.902897 -0.995826 0.982864 -0.124274 -0.136139 + 2.02508 0.806365 -1.03583 0.983887 -0.123265 -0.129508 + 2.00857 0.707927 -1.07553 0.987845 -0.100335 -0.118719 + 1.98022 0.694353 -1.24222 0.968275 -0.0336522 -0.247611 + 2.0661 0.987656 -0.861234 0.991255 -0.121944 -0.0504304 + 2.04937 0.885481 -0.902062 0.986152 -0.155723 -0.0570551 + 2.02757 0.760312 -0.902864 0.986576 -0.157178 -0.0443059 + 2.01107 0.661873 -0.942562 0.992309 -0.118422 -0.0360296 + 2.0847 1.11063 -0.690828 0.99095 -0.134231 -0.00102659 + 2.07118 1.00891 -0.747247 0.989535 -0.14429 0.000143634 + 2.05499 0.905722 -0.797122 0.985056 -0.171725 0.0132001 + 2.03319 0.780641 -0.797873 0.983153 -0.175636 0.0506217 + 2.08462 1.14167 -0.528789 0.972804 -0.21493 0.0863571 + 2.07631 1.0583 -0.619392 0.981467 -0.177007 0.0734189 + 2.06012 0.955113 -0.669267 0.965319 -0.235701 0.112269 + 2.03629 0.845114 -0.720743 0.968054 -0.21256 0.133004 + 2.09548 1.25584 -0.32634 0.905461 -0.382988 0.18292 + 2.07182 1.16429 -0.403371 0.899717 -0.378018 0.2182 + 2.06351 1.08092 -0.493969 0.928445 -0.306689 0.209597 + 2.04628 0.984262 -0.563157 0.914629 -0.324169 0.241595 + 2.11872 1.34714 -0.246282 0.894526 -0.425495 0.137028 + 2.07553 1.27638 -0.230928 0.803187 -0.506288 0.313947 + 2.05188 1.18475 -0.308008 0.827498 -0.457483 0.325509 + 2.03179 1.08707 -0.384218 0.850049 -0.40973 0.330965 + 2.01455 0.990413 -0.453411 0.843974 -0.395673 0.362146 + 2.12035 1.37266 -0.167875 0.830063 -0.497557 0.251857 + 2.09296 1.37722 -0.106179 0.691283 -0.550943 0.467536 + 2.04814 1.28086 -0.169283 0.714323 -0.569529 0.406669 + 2.0211 1.18058 -0.248183 0.73405 -0.526722 0.428642 + 2.001 1.0829 -0.324393 0.698443 -0.519557 0.492177 + 2.15469 1.46887 -0.097327 0.813106 -0.497315 0.302551 + 2.11209 1.46856 -0.032783 0.645814 -0.555379 0.523907 + 2.02482 1.34524 -0.069792 0.392895 -0.628094 0.671663 + 2.01546 1.25513 -0.152315 0.470969 -0.639135 0.608025 + 1.98841 1.15476 -0.231266 0.369836 -0.638807 0.674646 + 2.18873 1.57082 -0.033902 0.766863 -0.523109 0.371858 + 2.14613 1.57059 0.030692 0.668491 -0.511082 0.540291 + 2.04396 1.43658 0.003602 0.426998 -0.634943 0.643832 + 1.97634 1.39651 -0.013797 -0.191043 -0.67037 0.717012 + 1.97747 1.30843 -0.088838 -0.161013 -0.65685 0.736629 + 2.2366 1.67118 0.022866 0.711958 -0.602968 0.359923 + 2.15405 1.65995 0.099917 0.588529 -0.620177 0.518666 + 2.03495 1.51832 0.092235 0.386357 -0.612656 0.689478 + 1.96733 1.47825 0.074836 -0.183369 -0.713998 0.675709 + 2.30028 1.76094 0.076794 0.743493 -0.577635 0.336981 + 2.21773 1.74971 0.153845 0.511923 -0.621409 0.593116 + 2.04287 1.60776 0.161511 0.364529 -0.561598 0.742782 + 1.93928 1.55924 0.143957 -0.180167 -0.693776 0.697291 + 1.92104 1.44646 -0.019105 -0.739905 -0.527243 0.417799 + 2.32127 1.79285 -0.010067 0.840246 -0.535624 -0.0842239 + 2.33657 1.81891 0.081796 0.830153 -0.507981 0.229784 + 2.3157 1.79518 -0.041913 0.8125 -0.373584 -0.447526 + 2.35674 1.84633 -0.008909 0.96658 -0.193091 -0.168636 + 2.36546 1.88611 0.038201 0.987746 -0.155841 0.00845147 + 2.34528 1.85868 0.128906 0.848888 -0.431477 0.305315 + 2.28027 1.75988 -0.080374 0.887248 -0.211176 -0.410117 + 2.32537 1.91211 -0.01503 0.274366 0.425895 -0.862169 + 2.34897 1.93992 0.013602 0.631987 0.451472 -0.629893 + 2.36724 1.92857 0.042453 0.962657 0.182794 -0.199693 + 2.35617 1.95194 0.178382 0.93798 -0.170716 0.301743 + 2.26153 2.01042 0.037081 0.0306458 0.537382 -0.842782 + 2.28513 2.03823 0.065712 0.32017 0.729768 -0.604094 + 2.33417 2.04014 0.1172 0.623085 0.714893 -0.317321 + 2.35243 2.02888 0.146103 0.850756 0.52553 -0.00571994 + 2.35795 1.99449 0.182684 0.938337 0.177979 0.296391 + 2.21586 2.04588 0.063268 -0.0889614 0.6397 -0.763459 + 2.23229 2.08064 0.109466 0.135533 0.889422 -0.436531 + 2.28133 2.08255 0.160956 0.396365 0.911942 -0.1061 + 2.30384 2.06634 0.207823 0.58321 0.754691 0.300513 + 2.15972 2.09474 0.138633 -0.0465934 0.918884 -0.391766 + 2.19296 2.10671 0.200114 0.138424 0.990254 0.0153814 + 2.21547 2.09059 0.247031 0.308259 0.840799 0.44501 + 2.22548 2.04512 0.287584 0.386278 0.573091 0.722742 + 2.30936 2.03194 0.244404 0.667677 0.466693 0.580004 + 2.06722 2.07637 0.125264 -0.213807 0.715928 -0.66463 + 2.06868 2.09668 0.172282 -0.154962 0.955069 -0.252647 + 2.10191 2.10864 0.233762 -0.0297638 0.996132 0.082677 + 2.11664 2.09202 0.285745 0.126242 0.846815 0.516689 + 1.99034 2.06431 0.145555 -0.349591 0.712653 -0.608204 + 1.99179 2.08462 0.192572 -0.281934 0.926048 -0.250896 + 1.97828 2.09008 0.273113 -0.201683 0.971979 0.120754 + 1.99301 2.07346 0.325096 -0.0465262 0.841273 0.538605 + 2.12665 2.04664 0.326349 0.246298 0.530786 0.810927 + 1.97494 1.98465 0.109118 -0.33246 0.566044 -0.754364 + 1.92688 2.02509 0.144879 -0.284269 0.599323 -0.748333 + 1.86678 2.02229 0.164923 -0.340007 0.709316 -0.617467 + 1.88359 2.04991 0.211892 -0.35373 0.90158 -0.249056 + 1.81352 1.9195 0.12256 -0.322076 0.547825 -0.77211 + 1.75341 1.9167 0.142605 -0.438961 0.414584 -0.79714 + 1.73438 1.97249 0.188775 -0.572091 0.647194 -0.503838 + 1.7512 2.00011 0.235745 -0.534351 0.839487 -0.0986473 + 1.87008 2.05545 0.292484 -0.360957 0.922306 0.138063 + 1.77848 1.88161 0.104993 -0.479598 0.76479 -0.430211 + 1.72363 1.8572 0.131276 -0.922634 0.0408691 -0.383505 + 1.71488 1.87816 0.156571 -0.917652 0.0475583 -0.394528 + 1.69585 1.93395 0.202742 -0.924586 0.208421 -0.318907 + 1.78656 1.8729 0.074278 -0.450833 0.632716 -0.629618 + 1.73172 1.84849 0.100561 -0.859066 0.215164 -0.464445 + 1.72141 1.84774 0.19585 -0.919133 -0.393719 -0.0133936 + 1.71266 1.8687 0.221145 -0.920921 -0.383631 0.0687863 + 1.80597 1.83923 0.042994 -0.4178 0.411838 -0.809835 + 1.75682 1.79571 0.071374 -0.862163 -0.117462 -0.492825 + 1.74652 1.79497 0.166664 -0.90685 -0.420786 0.0237309 + 1.71044 1.88591 0.258945 -0.894354 -0.39077 0.217782 + 1.69363 1.95115 0.240542 -0.930314 0.366292 -0.0185871 + 1.80707 1.70358 0.008356 -0.884428 -0.0258417 -0.465961 + 1.84763 1.61518 -0.058342 -0.939199 -0.0838011 -0.33299 + 1.79353 1.68774 0.086183 -0.915349 -0.400036 -0.0459052 + 1.86913 1.54697 -0.119202 -0.968741 -0.071143 -0.237656 + 1.83409 1.59935 0.019485 -0.904695 -0.425944 0.00991559 + 1.85245 1.60663 0.108876 -0.728893 -0.609277 0.312243 + 1.80713 1.67712 0.149785 -0.770186 -0.583953 0.256538 + 1.88609 1.47278 -0.186297 -0.998635 0.0506971 -0.0125523 + 1.87462 1.52017 -0.039378 -0.898153 -0.427624 0.102274 + 1.89298 1.52745 0.050015 -0.705448 -0.608514 0.363392 + 1.8862 1.64258 0.21421 -0.27612 -0.720871 0.635691 + 1.84087 1.71298 0.255069 -0.651491 -0.635158 0.414891 + 1.87618 1.42189 -0.268346 -0.996064 0.016844 0.0870237 + 1.89158 1.44598 -0.106472 -0.942362 -0.289633 0.16753 + 1.86885 1.35294 -0.337923 -0.979877 0.00763949 0.199458 + 1.90639 1.358 -0.168095 -0.9417 -0.229522 0.246012 + 1.93585 1.35848 -0.080729 -0.733469 -0.461113 0.499398 + 1.93698 1.27049 -0.155721 -0.741454 -0.401711 0.53747 + 1.85871 1.43788 -0.420448 -0.961644 0.205777 0.181372 + 1.85085 1.29307 -0.412823 -0.968556 0.0391518 0.245698 + 1.89905 1.28905 -0.237671 -0.943827 -0.129409 0.304046 + 1.92234 1.18614 -0.219015 -0.69095 -0.372551 0.619511 + 1.96811 1.21832 -0.17136 -0.0948823 -0.646467 0.757019 + 1.84298 1.48933 -0.552965 -0.912855 0.300427 0.276476 + 1.84071 1.37809 -0.49529 -0.966285 0.11132 0.232166 + 1.82658 1.23187 -0.486835 -0.962105 0.0355134 0.270355 + 1.88441 1.2047 -0.300965 -0.937289 -0.0666557 0.342119 + 1.89832 1.10095 -0.296262 -0.726026 -0.295838 0.620779 + 1.82859 1.54464 -0.664366 -0.853786 0.424573 0.30131 + 1.81373 1.44579 -0.625345 -0.91646 0.219698 0.334416 + 1.81147 1.33455 -0.567678 -0.951584 0.096741 0.29177 + 1.80398 1.18699 -0.568694 -0.958656 0.0965626 0.267685 + 1.86015 1.14351 -0.374978 -0.929323 0.0243971 0.368461 + 1.78188 1.54323 -0.805916 -0.828759 0.447392 0.336152 + 1.74035 1.49789 -0.858394 -0.864628 0.355173 0.355346 + 1.78706 1.49931 -0.716844 -0.873598 0.343412 0.344811 + 1.77308 1.39422 -0.689219 -0.920959 0.123895 0.369439 + 1.78887 1.28967 -0.649536 -0.948651 0.0275966 0.315117 + 1.79768 1.63054 -0.869151 -0.8072 0.338824 0.48335 + 1.74955 1.58263 -0.912958 -0.810723 0.334747 0.480283 + 1.70359 1.5243 -0.951933 -0.83526 0.265906 0.481285 + 1.70034 1.44373 -0.903383 -0.877824 0.306469 0.368106 + 1.74642 1.44774 -0.780717 -0.897925 0.23803 0.370234 + 1.75647 1.70315 -0.956914 -0.80009 0.198643 0.566036 + 1.73805 1.66673 -0.974234 -0.817519 0.214121 0.534617 + 1.70923 1.65183 -1.00802 -0.766276 0.265323 0.58517 + 1.72073 1.56773 -0.946754 -0.785855 0.263163 0.559623 + 1.68522 1.62034 -1.02008 -0.76353 0.279533 0.582137 + 1.66809 1.577 -1.02521 -0.795263 0.243144 0.555372 + 1.66357 1.47014 -0.99693 -0.835576 0.210523 0.507437 + 1.66068 1.38386 -0.951877 -0.886614 0.265384 0.378797 + 1.67123 1.69079 -1.07069 -0.805884 0.286591 0.51809 + 1.64934 1.63786 -1.08662 -0.85063 0.271332 0.450341 + 1.63962 1.53542 -1.04439 -0.793347 0.215067 0.569514 + 1.60744 1.48643 -1.07733 -0.816076 0.175225 0.550742 + 1.63139 1.42106 -1.02992 -0.848007 0.169924 0.502006 + 1.64171 1.7058 -1.1443 -0.906867 0.266878 0.326141 + 1.62087 1.59636 -1.10574 -0.845629 0.314286 0.431435 + 1.59827 1.55151 -1.12345 -0.866794 0.292173 0.404108 + 1.98978 1.6911 0.231766 0.262485 -0.587353 0.765584 + 1.98945 1.75703 0.288962 0.357307 -0.655906 0.66492 + 1.8863 1.73845 0.328145 0.0159542 -0.745426 0.666398 + 1.8458 1.74 0.305064 -0.526804 -0.688234 0.49881 + 2.2174 1.81556 0.210993 0.426864 -0.604969 0.672161 + 2.14869 1.86319 0.301296 0.402667 -0.549092 0.732365 + 2.03042 1.82386 0.333414 0.38261 -0.563965 0.731815 + 1.92727 1.80528 0.372597 0.278413 -0.51425 0.811192 + 2.31566 1.8655 0.18929 0.664612 -0.516192 0.540219 + 2.24695 1.91313 0.279592 0.500297 -0.44567 0.742348 + 2.22239 1.94999 0.310547 0.441435 -0.206128 0.873296 + 2.13676 1.92875 0.342738 0.35553 -0.227517 0.906551 + 2.32655 1.95876 0.238765 0.766278 -0.176219 0.617871 + 2.30199 1.99562 0.269721 0.649086 0.102996 0.75371 + 2.21811 2.00879 0.3129 0.395035 0.248026 0.884551 + 2.13248 1.98755 0.345091 0.308353 0.136688 0.9414 + 2.01849 1.88934 0.374807 0.327816 -0.276444 0.903391 + 2.02889 1.97432 0.382406 0.234953 0.116625 0.964985 + 1.95482 1.94111 0.397731 0.212943 0.0215192 0.976828 + 1.94442 1.85613 0.390132 0.216446 -0.262399 0.940371 + 1.86725 1.78376 0.373066 -0.111711 -0.563103 0.818801 + 2.02307 2.03341 0.363662 0.135103 0.530452 0.83688 + 1.91758 1.99965 0.388944 -0.0136993 0.499708 0.866085 + 1.92943 1.95493 0.405201 0.24524 0.181315 0.952356 + 1.8844 1.83461 0.3906 0.0565497 -0.312228 0.948323 + 1.88753 2.03961 0.350326 -0.248674 0.779322 0.575169 + 1.78108 1.97992 0.360723 -0.478586 0.63171 0.609835 + 1.83084 1.95588 0.403754 -0.270964 0.449504 0.85119 + 1.84269 1.91125 0.420061 -0.107942 -0.0450639 0.993135 + 1.85901 1.84842 0.398071 -0.0344053 -0.398678 0.916445 + 1.76363 1.99576 0.302879 -0.534506 0.803617 0.26173 + 1.70607 1.9468 0.307678 -0.897708 0.252123 0.361323 + 1.72681 1.93728 0.344367 -0.776633 0.065298 0.62656 + 1.77658 1.91316 0.387347 -0.630922 -0.0637786 0.77322 + 1.79859 1.88451 0.394568 -0.53452 -0.331479 0.777438 + 1.73118 1.87639 0.295635 -0.789293 -0.469433 0.39579 + 1.75319 1.84774 0.302855 -0.776952 -0.480615 0.406638 + 1.81491 1.82177 0.372629 -0.527449 -0.4648 0.711168 + 1.82675 1.78531 0.349985 -0.555107 -0.631421 0.541446 + 1.76504 1.81136 0.280262 -0.792617 -0.509043 0.335608 + 1.76011 1.78434 0.230267 -0.864917 -0.42226 0.27132 + 1.58453 1.45584 -1.09935 -0.802301 0.163224 0.57417 + 1.59609 1.36052 -1.07345 -0.839104 0.14781 0.523504 + 1.62538 1.32332 -0.99542 -0.890444 0.265153 0.369868 + 1.57536 1.52092 -1.14547 -0.878333 0.317695 0.357213 + 1.55389 1.48278 -1.17341 -0.895957 0.331959 0.295066 + 1.55777 1.43811 -1.13185 -0.825413 0.220356 0.519746 + 1.58134 1.56168 -1.19528 -0.921888 0.3531 0.159505 + 1.55987 1.52346 -1.22328 -0.918088 0.380083 0.11248 + 1.53859 1.4778 -1.26239 -0.907779 0.412614 0.0754066 + 1.5267 1.44186 -1.20255 -0.901004 0.362714 0.237974 + 1.53059 1.39729 -1.16094 -0.86159 0.171245 0.477847 + 1.59512 1.59787 -1.17855 -0.924556 0.325277 0.198473 + 1.58809 1.59093 -1.23894 -0.9231 0.384251 -0.0154084 + 1.5764 1.56368 -1.25754 -0.903209 0.4291 -0.00931362 + 1.55512 1.51801 -1.29664 -0.89359 0.437548 -0.100239 + 1.5168 1.43611 -1.29238 -0.914226 0.403938 -0.0320071 + 1.50491 1.40026 -1.23249 -0.910542 0.356512 0.209312 + 1.51426 1.3487 -1.17618 -0.839164 0.154629 0.521435 + 1.56933 1.34288 -1.10591 -0.785845 0.0716688 0.614257 + 1.58824 1.56145 -1.33468 -0.864739 0.441311 -0.239729 + 1.54182 1.47566 -1.33128 -0.863572 0.438451 -0.249004 + 1.49947 1.38977 -1.32112 -0.887005 0.458013 -0.0587064 + 1.482 1.36422 -1.25526 -0.895911 0.40474 0.183106 + 1.49135 1.31266 -1.19896 -0.831164 0.159119 0.532773 + 1.5376 1.42074 -1.39016 -0.804266 0.480961 -0.349045 + 1.52449 1.42932 -1.36002 -0.806215 0.502831 -0.311736 + 1.47664 1.34482 -1.35347 -0.873371 0.474939 -0.107961 + 1.45918 1.31928 -1.28762 -0.910555 0.393848 0.125594 + 1.45892 1.26563 -1.2397 -0.86702 0.148839 0.475524 + 1.55899 1.44397 -1.42699 -0.867956 0.423709 -0.259082 + 1.53418 1.34028 -1.51799 -0.775167 0.564166 -0.284311 + 1.50517 1.32765 -1.47451 -0.693466 0.6526 -0.305315 + 1.51048 1.35755 -1.41971 -0.742662 0.584706 -0.326452 + 1.49738 1.36613 -1.38956 -0.781909 0.537167 -0.316338 + 1.59651 1.47515 -1.4948 -0.838945 0.433246 -0.329347 + 1.5717 1.37146 -1.5858 -0.780036 0.504412 -0.370287 + 1.56679 1.29244 -1.68873 -0.615639 0.681116 -0.39632 + 1.50726 1.26305 -1.64863 -0.619662 0.728836 -0.291233 + 1.47825 1.25041 -1.60514 -0.622239 0.734984 -0.269477 + 1.62162 1.48795 -1.53037 -0.6741 0.515948 -0.52857 + 1.61249 1.3985 -1.60824 -0.597468 0.605622 -0.525599 + 1.60758 1.31948 -1.71117 -0.331996 0.708153 -0.623136 + 1.60007 1.21433 -1.83044 0.171037 0.802544 -0.571549 + 1.54917 1.22917 -1.80395 -0.316075 0.83959 -0.441797 + 1.65498 1.50123 -1.54717 0.118303 0.602727 -0.789129 + 1.64584 1.41169 -1.62508 0.180601 0.667739 -0.722155 + 1.63913 1.34099 -1.68663 0.485408 0.577644 -0.656283 + 1.64138 1.28281 -1.74627 0.499445 0.59676 -0.628038 + 1.60984 1.26131 -1.77081 0.354721 0.662943 -0.659302 + 1.71876 1.40596 -1.53395 0.759519 0.328406 -0.561499 + 1.71504 1.32517 -1.58463 0.800481 0.321174 -0.506041 + 1.70833 1.25447 -1.64618 0.834385 0.320584 -0.44836 + 1.69567 1.18769 -1.7125 0.856598 0.299539 -0.420138 + 1.6395 1.21314 -1.80858 0.639438 0.540823 -0.546471 + 1.82453 1.14454 -1.50056 0.854569 0.227015 -0.467093 + 1.80562 1.07001 -1.56648 0.868029 0.226457 -0.441863 + 1.79295 1.00322 -1.6328 0.882549 0.22458 -0.413123 + 1.7691 0.950287 -1.71131 0.899067 0.22975 -0.372685 + 1.69378 1.11793 -1.77487 0.876339 0.305138 -0.372721 + 1.90324 1.05011 -1.38061 0.940898 0.159919 -0.298558 + 1.88766 0.978483 -1.44294 0.908477 0.130693 -0.396974 + 1.86874 0.903956 -1.50886 0.919014 0.113824 -0.377436 + 1.84544 0.846043 -1.58295 0.923027 0.116013 -0.366827 + 1.91563 0.823272 -1.40751 0.925274 0.0637843 -0.373899 + 1.88919 0.755559 -1.47603 0.93202 0.0461949 -0.35945 + 1.86589 0.69756 -1.55017 0.946661 0.0574913 -0.317061 + 1.84155 0.660377 -1.63517 0.95274 0.0719376 -0.295147 + 1.82158 0.793109 -1.66147 0.933142 0.131926 -0.334428 + 1.95983 0.77573 -1.29557 0.943286 0.050874 -0.32806 + 1.9371 0.70295 -1.36411 0.933537 0.016757 -0.35809 + 1.91065 0.635231 -1.43262 0.940694 0.0153696 -0.338908 + 1.8863 0.579432 -1.50997 0.952915 0.0469511 -0.299582 + 1.95748 0.621574 -1.31076 0.951806 -0.0396771 -0.304122 + 1.92874 0.541985 -1.37811 0.953258 -0.0440531 -0.298928 + 1.90438 0.486181 -1.45545 0.964023 0.0614641 -0.258617 + 1.88613 0.445995 -1.54445 0.960478 0.103117 -0.258551 + 1.86197 0.542251 -1.59497 0.95571 0.0853998 -0.281646 + 1.99221 0.628315 -1.14384 0.987686 -0.0739775 -0.137858 + 1.97947 0.54448 -1.21083 0.978644 -0.0415123 -0.201329 + 1.95073 0.464891 -1.27818 0.963453 0.014457 -0.267487 + 1.94019 0.396175 -1.36396 0.957087 0.164188 -0.238802 + 2.00034 0.561665 -0.990198 0.993099 -0.108892 -0.0435471 + 1.9876 0.477829 -1.05719 0.998822 -9.28516e-005 -0.0485147 + 1.99081 0.394963 -1.14666 0.993859 0.013095 -0.109873 + 1.98028 0.326333 -1.23239 0.980332 0.132749 -0.146041 + 2.01226 0.657475 -0.819343 0.987232 -0.15183 0.0481693 + 2.00153 0.557266 -0.866979 0.993478 -0.108648 0.0346047 + 1.99419 0.452858 -0.919338 0.998614 -0.0452626 0.0268432 + 1.99741 0.369992 -1.00881 0.999767 -0.00279491 0.0214261 + 2.01535 0.722029 -0.742154 0.972088 -0.178786 0.151921 + 1.99507 0.593357 -0.747888 0.976081 -0.155522 0.151918 + 1.98773 0.488861 -0.800298 0.986084 -0.113757 0.121233 + 1.98427 0.380212 -0.861711 0.986503 -0.106008 0.124799 + 2.02245 0.874262 -0.614633 0.929315 -0.276767 0.244488 + 2.00529 0.764217 -0.656829 0.944617 -0.210281 0.251951 + 1.98501 0.635545 -0.662561 0.948275 -0.171097 0.267396 + 1.97703 0.517647 -0.708554 0.954295 -0.165996 0.24853 + 1.9935 0.882653 -0.514565 0.862711 -0.332253 0.381233 + 1.97634 0.772609 -0.556762 0.851082 -0.287047 0.439617 + 1.96969 0.657329 -0.607493 0.855888 -0.236219 0.460061 + 1.96171 0.539344 -0.653536 0.791871 -0.31462 0.523406 + 1.97703 0.986076 -0.393898 0.663247 -0.524674 0.533686 + 1.95598 0.878317 -0.455052 0.538996 -0.472276 0.697452 + 1.94212 0.77194 -0.513802 0.503137 -0.428994 0.750212 + 1.93547 0.65666 -0.564533 0.487376 -0.39072 0.780899 + 1.93571 0.964666 -0.374015 0.129455 -0.613249 0.779209 + 1.90827 0.87039 -0.446126 -0.0730224 -0.535608 0.841304 + 1.89441 0.764101 -0.504826 -0.209419 -0.432517 0.876968 + 1.89444 0.652219 -0.557439 -0.221493 -0.452192 0.863981 + 1.95968 1.0614 -0.30456 0.291985 -0.632291 0.717601 + 1.88088 0.964924 -0.39846 -0.495392 -0.451569 0.742073 + 1.85344 0.870648 -0.470571 -0.542136 -0.458412 0.704235 + 1.83094 0.790462 -0.543286 -0.660761 -0.340721 0.668807 + 1.94409 1.13304 -0.248657 -0.191081 -0.597667 0.778641 + 1.91535 1.03977 -0.321901 -0.27071 -0.614998 0.740604 + 1.822 0.968071 -0.452114 -0.813169 -0.191859 0.549496 + 1.78124 0.914346 -0.53626 -0.861443 -0.148911 0.485531 + 1.75873 0.834162 -0.608975 -0.86638 -0.201307 0.457013 + 1.85647 1.04292 -0.375554 -0.799086 -0.19388 0.569098 + 1.81829 1.08548 -0.45427 -0.929991 0.0950057 0.355091 + 1.78834 1.03441 -0.536214 -0.943985 0.106347 0.312381 + 1.74758 0.980684 -0.62036 -0.948823 0.151941 0.276855 + 1.77403 1.13592 -0.650637 -0.973769 0.0566799 0.220368 + 1.76018 1.08757 -0.733287 -0.975327 0.108805 0.192092 + 1.73504 1.03363 -0.812257 -0.964946 0.12261 0.232047 + 1.72244 0.926738 -0.699321 -0.969064 0.0966896 0.227081 + 1.75903 1.23639 -0.718449 -0.933234 -0.0317795 0.357862 + 1.74518 1.18803 -0.801099 -0.879111 -0.198859 0.433151 + 1.71522 1.12579 -0.863086 -0.791667 -0.201756 0.576678 + 1.71302 0.976869 -0.880152 -0.966437 0.102223 0.235689 + 1.74325 1.34093 -0.758132 -0.880187 0.0909851 0.465824 + 1.69942 1.27075 -0.806761 -0.836947 -0.0703456 0.542745 + 1.66946 1.2085 -0.86874 -0.732137 -0.145528 0.66543 + 1.63217 1.13485 -0.91298 -0.624685 -0.244123 0.741737 + 1.69319 1.06903 -0.930981 -0.682886 -0.308829 0.662036 + 1.70676 1.38777 -0.829262 -0.8727 0.240032 0.425181 + 1.66294 1.31767 -0.877841 -0.88034 0.206199 0.427181 + 1.62401 1.25131 -0.923105 -0.857357 0.165391 0.487427 + 1.58673 1.17767 -0.967345 -0.864335 0.0943314 0.493991 + 1.60233 1.06256 -0.96058 -0.593298 -0.332617 0.733051 + 1.58645 1.25696 -1.04068 -0.881474 0.28495 0.376574 + 1.54824 1.19931 -1.08523 -0.894809 0.200963 0.398661 + 1.51747 1.13409 -1.13427 -0.898731 0.153436 0.410781 + 1.55596 1.11245 -1.01639 -0.888552 -0.0141568 0.458557 + 1.55301 1.29429 -1.12115 -0.82964 0.142834 0.539718 + 1.51479 1.23664 -1.16569 -0.83315 0.124071 0.53895 + 1.48237 1.18961 -1.20643 -0.843278 0.0572872 0.534416 + 1.48367 1.07867 -1.18368 -0.878202 0.0399063 0.476623 + 1.44856 1.13419 -1.25584 -0.812248 0.0665417 0.579505 + 1.46009 1.01299 -1.23031 -0.835144 0.044783 0.548205 + 1.54043 1.03896 -1.07509 -0.863095 -0.131112 0.487726 + 1.58681 0.989069 -1.01928 -0.710331 -0.192575 0.677012 + 1.42778 1.21479 -1.28065 -0.85326 0.157485 0.497137 + 1.46073 1.30484 -1.39622 -0.813722 0.57069 -0.110313 + 1.44974 1.26479 -1.51845 -0.594693 0.768678 -0.23553 + 1.48146 1.32614 -1.4323 -0.725099 0.641886 -0.249429 + 1.47615 1.29624 -1.48712 -0.566957 0.752009 -0.336217 + 1.45184 1.21897 -1.63648 -0.559207 0.780175 -0.280383 + 1.48964 1.19978 -1.76384 -0.47794 0.83265 -0.279763 + 1.43979 1.18462 -1.73799 -0.447951 0.873471 -0.190759 + 1.41602 1.19716 -1.6283 -0.620747 0.728048 -0.290895 + 1.38771 1.1672 -1.63161 -0.743786 0.559587 -0.365574 + 1.38119 1.19504 -1.56743 -0.775228 0.596055 -0.209141 + 1.5387 1.17114 -1.89964 -0.106165 0.916496 -0.385699 + 1.41362 1.14503 -1.86862 -0.319305 0.934196 -0.15913 + 1.37663 1.14592 -1.80136 -0.41811 0.903719 -0.09207 + 1.40397 1.16281 -1.72981 -0.539043 0.838513 -0.0795562 + 1.58961 1.1563 -1.92613 0.371172 0.790447 -0.487262 + 1.62973 1.16616 -1.86822 0.701789 0.539025 -0.465773 + 1.62799 1.10638 -1.93907 0.76729 0.497841 -0.404252 + 1.63031 1.05287 -2.00698 0.798148 0.485847 -0.356248 + 1.6801 1.06513 -1.84902 0.884092 0.315177 -0.345029 + 1.67836 1.00543 -1.91982 0.907555 0.3063 -0.287269 + 1.75542 0.897488 -1.78546 0.909556 0.230262 -0.34596 + 1.7298 0.86485 -1.87113 0.922923 0.230535 -0.308328 + 1.71425 0.833595 -1.95099 0.936017 0.2267 -0.269218 + 1.74214 0.723213 -1.93861 0.938724 0.19566 -0.28375 + 1.79718 0.760102 -1.7523 0.938004 0.156933 -0.309064 + 1.77156 0.727377 -1.83802 0.925709 0.203147 -0.319051 + 1.76037 0.623595 -1.94926 0.937715 0.153794 -0.311508 + 1.72877 0.620289 -2.03794 0.944454 0.133595 -0.300264 + 1.81715 0.627372 -1.726 0.963781 0.101073 -0.2468 + 1.78979 0.627846 -1.84862 0.953463 0.141691 -0.266142 + 1.81014 0.522261 -1.81735 0.965712 0.0847973 -0.245377 + 1.78193 0.519971 -1.91998 0.952571 0.0837122 -0.292575 + 1.75033 0.516578 -2.0087 0.942768 0.0952932 -0.319544 + 1.83749 0.521787 -1.69473 0.964391 0.103509 -0.243383 + 1.83638 0.413125 -1.73832 0.959552 0.108642 -0.259726 + 1.80817 0.410835 -1.84095 0.961632 0.0819259 -0.261825 + 1.77306 0.429219 -1.96599 0.951472 0.069319 -0.299828 + 1.7397 0.435529 -2.06672 0.9414 0.0153384 -0.336944 + 1.86166 0.425444 -1.64426 0.956767 0.120679 -0.264637 + 1.90282 0.328456 -1.54907 0.946218 0.190039 -0.261833 + 1.87754 0.316044 -1.64317 0.945123 0.163967 -0.282591 + 1.8437 0.321936 -1.74858 0.952746 0.0741091 -0.29459 + 1.80858 0.340319 -1.87362 0.946973 -0.0228189 -0.320502 + 1.92194 0.355984 -1.45294 0.948587 0.183001 -0.258252 + 1.96 0.235763 -1.42632 0.963929 0.0755163 -0.255224 + 1.93246 0.229713 -1.52304 0.954348 0.00484252 -0.298657 + 1.89862 0.235606 -1.62845 0.920979 -0.0812703 -0.381042 + 1.85498 0.253233 -1.72317 0.916886 -0.102173 -0.385852 + 1.97913 0.263295 -1.33021 0.980224 0.0763599 -0.182566 + 1.9978 0.223203 -1.19056 0.999099 0.00454468 -0.042206 + 1.99354 0.170387 -1.28388 0.987074 -0.0353957 -0.156306 + 1.966 0.164338 -1.38061 0.966422 -0.0921063 -0.239884 + 1.94276 0.159406 -1.48706 0.938742 -0.107998 -0.32726 + 1.99895 0.286242 -1.09275 0.999457 0.0299574 -0.0137188 + 1.99281 0.211628 -1.03391 0.978934 -0.174571 0.10589 + 1.98855 0.158812 -1.12723 0.994071 -0.0975026 0.0481312 + 1.99174 0.109062 -1.23506 0.875254 -0.479624 -0.0623798 + 1.9685 0.104039 -1.34156 0.932262 -0.290786 -0.215244 + 1.98581 0.296467 -0.94566 0.991516 -0.0642481 0.112993 + 1.97373 0.305143 -0.850089 0.93049 -0.243527 0.273649 + 1.98072 0.220307 -0.938347 0.877151 -0.355734 0.322583 + 1.98151 0.146584 -1.03386 0.863007 -0.413602 0.290091 + 1.9847 0.096749 -1.14174 0.857099 -0.495846 0.139706 + 1.97356 0.409 -0.769973 0.951985 -0.185096 0.243854 + 1.96402 0.330958 -0.8036 0.719105 -0.455412 0.524869 + 1.96047 0.238716 -0.887436 0.544927 -0.623345 0.560799 + 1.96125 0.164999 -0.98295 0.480761 -0.701365 0.526266 + 1.95846 0.09336 -1.08147 0.398876 -0.843646 0.359388 + 1.96385 0.434814 -0.723485 0.783438 -0.36088 0.505956 + 1.9379 0.44258 -0.694537 0.445 -0.519247 0.729628 + 1.93977 0.349149 -0.769906 0.383093 -0.609971 0.693668 + 1.93622 0.256907 -0.853742 0.176949 -0.707156 0.684558 + 1.93193 0.175897 -0.951427 0.113965 -0.791755 0.600113 + 1.93576 0.547198 -0.624538 0.428931 -0.455461 0.780111 + 1.9005 0.439095 -0.683499 -0.228906 -0.580071 0.781741 + 1.90237 0.345576 -0.758919 -0.242611 -0.669729 0.701857 + 1.9044 0.264829 -0.84866 -0.385373 -0.672833 0.631493 + 1.90011 0.183817 -0.946346 -0.403227 -0.72259 0.561491 + 1.89473 0.542755 -0.617445 -0.270596 -0.498903 0.823331 + 1.82821 0.591857 -0.65849 -0.743771 -0.37207 0.55531 + 1.83398 0.488284 -0.724495 -0.756749 -0.40291 0.514775 + 1.83552 0.40161 -0.795575 -0.767168 -0.449772 0.457338 + 1.83097 0.678666 -0.59585 -0.696655 -0.366538 0.616703 + 1.73189 0.688842 -0.755276 -0.88312 -0.268487 0.384726 + 1.73691 0.605799 -0.81344 -0.881337 -0.306718 0.359401 + 1.73845 0.519127 -0.884519 -0.848222 -0.325539 0.417785 + 1.83755 0.320778 -0.885367 -0.750635 -0.477231 0.456943 + 1.73465 0.775569 -0.692687 -0.905329 -0.20541 0.371734 + 1.69835 0.868144 -0.783033 -0.971914 0.0823167 0.22047 + 1.67673 0.798432 -0.840487 -0.95697 -0.0222398 0.289333 + 1.68175 0.715383 -0.898643 -0.920956 -0.192014 0.339072 + 1.69139 0.907156 -0.937606 -0.86201 0.1953 0.467757 + 1.64391 0.823498 -0.957905 -0.897776 0.0385864 0.438759 + 1.62864 0.74213 -1.01337 -0.908609 -0.141116 0.393086 + 1.66647 0.634013 -0.954109 -0.887547 -0.197212 0.416374 + 1.73373 0.435792 -0.954179 -0.823002 -0.366495 0.433992 + 1.66335 0.996747 -0.978581 -0.595002 -0.162131 0.787202 + 1.61587 0.913088 -0.998879 -0.716985 -0.0043455 0.697075 + 1.59302 0.838534 -1.04755 -0.841369 -0.174901 0.511379 + 1.61581 0.67097 -1.08032 -0.919365 -0.196055 0.341073 + 1.66176 0.550679 -1.02377 -0.893757 -0.258638 0.366475 + 1.56395 0.914514 -1.06795 -0.817058 -0.159239 0.55413 + 1.54895 0.846936 -1.1179 -0.832362 -0.242245 0.498488 + 1.58019 0.76737 -1.11449 -0.856175 -0.252863 0.450583 + 1.60549 0.600545 -1.15254 -0.907584 -0.23119 0.350488 + 1.51686 0.973193 -1.12178 -0.846371 -0.0954106 0.523978 + 1.50185 0.905609 -1.17173 -0.794253 -0.206077 0.571572 + 1.53037 0.782376 -1.18348 -0.767121 -0.279822 0.577257 + 1.56162 0.702814 -1.18007 -0.816341 -0.303426 0.491447 + 1.47412 0.841002 -1.21862 -0.731233 -0.211109 0.648638 + 1.49902 0.723297 -1.24875 -0.717535 -0.378423 0.584756 + 1.44277 0.781924 -1.2839 -0.700884 -0.320116 0.637407 + 1.46561 0.683379 -1.31781 -0.657722 -0.428735 0.619344 + 1.55015 0.641811 -1.25441 -0.787389 -0.377322 0.48749 + 1.59402 0.539542 -1.22688 -0.908403 -0.238131 0.343653 + 1.65143 0.480345 -1.09594 -0.885784 -0.269028 0.378167 + 1.39914 0.743891 -1.34262 -0.661716 -0.339201 0.668636 + 1.41728 0.657188 -1.38505 -0.633818 -0.499654 0.590441 + 1.51673 0.601888 -1.32347 -0.718708 -0.40455 0.565507 + 1.57501 0.491937 -1.30862 -0.85682 -0.216954 0.46775 + 1.63884 0.413147 -1.17516 -0.883952 -0.289295 0.367339 + 1.35082 0.717703 -1.40986 -0.659248 -0.463665 0.591952 + 1.36445 0.647105 -1.45278 -0.645063 -0.510812 0.568299 + 1.47172 0.58636 -1.39737 -0.693542 -0.477079 0.53981 + 1.52999 0.476495 -1.38248 -0.822814 -0.331198 0.461827 + 1.61983 0.365541 -1.2569 -0.869424 -0.356363 0.34221 + 1.21154 0.769462 -1.53291 -0.730088 -0.589616 0.345433 + 1.29789 0.714715 -1.48249 -0.688886 -0.481824 0.541555 + 1.41889 0.576279 -1.46511 -0.645059 -0.497596 0.579911 + 1.49544 0.45761 -1.46457 -0.751038 -0.351266 0.559065 + 1.16249 0.822434 -1.57186 -0.836205 -0.343661 0.427386 + 1.17212 0.792308 -1.63148 -0.828446 -0.447297 0.337049 + 1.12307 0.845368 -1.67038 -0.836426 -0.447318 0.316699 + 1.09485 0.870919 -1.70684 -0.80139 -0.493808 0.337534 + 1.43477 0.463087 -1.52806 -0.727208 -0.445268 0.522402 + 1.57685 0.307882 -1.43463 -0.788277 -0.459401 0.409352 + 1.6114 0.326762 -1.35253 -0.831172 -0.443992 0.334699 + 1.69386 0.205535 -1.30996 -0.792732 -0.537131 0.288213 + 1.70229 0.244309 -1.21432 -0.797824 -0.506063 0.327684 + 1.55043 0.284485 -1.52791 -0.764261 -0.500115 0.407174 + 1.64693 0.15814 -1.50387 -0.716971 -0.606196 0.344208 + 1.67335 0.181537 -1.41059 -0.762058 -0.56271 0.32035 + 1.79129 0.099711 -1.27507 -0.711496 -0.635652 0.299535 + 1.74022 0.073938 -1.48243 -0.65837 -0.709218 0.252109 + 1.77078 0.075799 -1.37565 -0.693189 -0.677378 0.246269 + 1.86011 0.040048 -1.25573 -0.455616 -0.847977 0.27083 + 1.80779 0.132344 -1.16719 -0.712253 -0.610894 0.345694 + 1.70267 0.06714 -1.57905 -0.601434 -0.748713 0.278758 + 1.76223 0.029679 -1.57477 -0.345 -0.931193 0.117703 + 1.80415 0.023321 -1.47176 -0.389471 -0.915324 0.102441 + 1.83471 0.025187 -1.36499 -0.440512 -0.879021 0.182404 + 1.79512 0.025571 -1.58045 0.106565 -0.985244 -0.133933 + 1.83704 0.019212 -1.47744 0.12631 -0.988382 -0.0845405 + 1.86908 0.015865 -1.36964 0.126595 -0.990912 0.0454667 + 1.89448 0.030728 -1.26038 0.0266796 -0.98352 0.178819 + 1.77127 0.05782 -1.70511 0.358809 -0.895134 -0.264559 + 1.8215 0.041109 -1.60877 0.441333 -0.846886 -0.296662 + 1.8638 0.034655 -1.50779 0.509336 -0.82995 -0.227507 + 1.89584 0.03122 -1.40004 0.543211 -0.827716 -0.140745 + 1.72048 0.064447 -1.80299 0.355504 -0.906246 -0.22877 + 1.78786 0.081215 -1.75983 0.604423 -0.718133 -0.344902 + 1.83784 0.07849 -1.66291 0.696546 -0.612632 -0.373504 + 1.88013 0.072038 -1.56194 0.766398 -0.552423 -0.327815 + 1.91872 0.068677 -1.45832 0.838603 -0.4831 -0.251711 + 1.73707 0.087843 -1.85771 0.551596 -0.767886 -0.325718 + 1.72202 0.125014 -1.9457 0.802322 -0.412461 -0.431457 + 1.76963 0.12724 -1.84895 0.854101 -0.297045 -0.426937 + 1.81961 0.124515 -1.75203 0.856929 -0.288681 -0.427008 + 1.86571 0.123374 -1.65405 0.882445 -0.269715 -0.385415 + 1.66667 0.12824 -2.04308 0.835569 -0.388266 -0.388681 + 1.6716 0.181256 -2.06591 0.873684 -0.292629 -0.388645 + 1.71921 0.18357 -1.96911 0.881119 -0.203479 -0.42688 + 1.76707 0.188831 -1.87443 0.880938 -0.198953 -0.429379 + 1.81318 0.18769 -1.77645 0.882777 -0.183771 -0.432358 + 1.73059 0.259704 -1.99498 0.863772 -0.295049 -0.408466 + 1.76911 0.263281 -1.91358 0.870296 -0.266004 -0.414521 + 1.86033 0.185653 -1.68272 0.908296 -0.134305 -0.396183 + 1.90429 0.120099 -1.55038 0.905735 -0.239975 -0.349366 + 1.94675 0.0711 -1.35412 0.780844 -0.586923 -0.214018 + 1.73522 0.35624 -2.06279 0.90498 -0.19652 -0.377347 + 1.76987 0.348244 -1.97034 0.911582 -0.16943 -0.374581 + 1.81627 0.261243 -1.81985 0.883376 -0.231303 -0.407609 + 1.89912 0.177033 -1.58179 0.882229 -0.23454 -0.408245 + 1.94308 0.111478 -1.44945 0.843749 -0.440494 -0.306679 + 1.97217 0.063662 -1.24623 0.807091 -0.590304 -0.012087 + 1.92387 0.033643 -1.29584 0.411073 -0.910514 -0.0445405 + 1.91655 0.057357 -1.15051 0.0733815 -0.934442 0.348472 + 1.94593 0.060274 -1.18596 0.422043 -0.884609 0.198362 + 1.92914 0.104259 -1.04994 -0.00254531 -0.856029 0.516921 + 1.87661 0.072687 -1.14786 -0.494284 -0.785778 0.3718 + 1.8892 0.11967 -1.04724 -0.482991 -0.733323 0.478495 + 1.8204 0.18254 -1.07113 -0.722261 -0.552088 0.416578 + 1.71489 0.294507 -1.11826 -0.79533 -0.443032 0.413731 + 1.83131 0.24669 -0.970242 -0.734923 -0.511781 0.444935 + 1.72749 0.361699 -1.03904 -0.810573 -0.397433 0.430138 + 1.38447 1.12618 -1.96176 -0.114715 0.985001 -0.128893 + 1.38749 1.12929 -1.92676 -0.278228 0.957846 -0.0715501 + 1.35051 1.13018 -1.8595 -0.258671 0.963354 -0.070976 + 1.35498 1.13465 -1.76183 -0.680226 0.730672 0.0583947 + 1.33 1.12081 -1.96346 -0.159644 0.984173 -0.0769253 + 1.33303 1.12393 -1.92846 -0.213748 0.975039 -0.0600933 + 1.32053 1.12089 -1.905 -0.453605 0.888262 0.0723449 + 1.33802 1.12715 -1.83604 -0.750727 0.65288 0.100786 + 1.28648 1.11256 -1.96577 -0.249703 0.968222 0.0139225 + 1.30604 1.11478 -1.92621 -0.346332 0.93557 0.0690164 + 1.26087 1.10138 -1.96022 -0.254065 0.942033 0.219144 + 1.28043 1.1036 -1.92066 -0.277523 0.956721 0.0875538 + 1.32299 1.11005 -1.85383 -0.422881 0.901229 0.0946451 + 1.33748 1.11624 -1.83255 -0.784888 0.605502 0.131596 + 1.3456 1.12534 -1.78452 -0.939363 0.316012 0.133168 + 1.18596 1.09 -1.9349 -0.0767119 0.994353 0.0733291 + 1.22858 1.09393 -1.9143 -0.137347 0.989618 0.0423287 + 1.25696 1.09743 -1.88518 -0.170066 0.985021 0.0284881 + 1.29951 1.1038 -1.8184 -0.213624 0.97669 0.0209931 + 1.34507 1.11445 -1.78104 -0.769977 0.632049 0.0874601 + 1.18366 1.08628 -1.81346 -0.0815065 0.996623 -0.00999 + 1.21204 1.08971 -1.78439 -0.116009 0.993231 -0.00582218 + 1.22826 1.0919 -1.7346 -0.115033 0.993305 -0.0106372 + 1.31574 1.10599 -1.7686 -0.215214 0.97637 0.019584 + 1.35105 1.11454 -1.69881 -0.579294 0.815113 -0.00308249 + 1.22871 1.09286 -1.69385 -0.305127 0.94344 0.129688 + 1.32172 1.1061 -1.68638 -0.24173 0.970171 -0.0182939 + 1.36043 1.12385 -1.67613 -0.643485 0.764167 0.0444444 + 1.38231 1.15154 -1.69029 -0.711543 0.702625 -0.00493221 + 1.20826 1.07264 -1.66304 -0.415146 0.859061 0.299444 + 1.31783 1.10964 -1.60512 -0.369736 0.927105 0.0614085 + 1.32217 1.10705 -1.64564 -0.22033 0.973962 -0.053412 + 1.36011 1.12005 -1.63475 -0.590569 0.805355 -0.0513001 + 1.24022 1.02623 -1.52285 -0.478502 0.862266 0.165929 + 1.29738 1.08942 -1.5743 -0.56295 0.792059 0.236071 + 1.33367 1.11267 -1.54156 -0.77242 0.604664 -0.194292 + 1.35577 1.12264 -1.59423 -0.659742 0.738045 -0.14153 + 1.38199 1.14774 -1.6489 -0.816197 0.573819 -0.0674902 + 1.18976 1.00904 -1.53268 -0.0624446 0.995592 0.0699848 + 1.27652 1.04939 -1.49016 -0.700979 0.70817 -0.0844012 + 1.1173 1.02629 -1.55774 0.294382 0.932429 -0.209558 + 1.36149 1.14219 -1.57689 -0.863237 0.418501 -0.282274 + -1.70337 1.98922 -1.07579 0.891611 0.0298264 0.451819 + -1.6801 1.96255 -1.12801 0.952713 0.0524449 0.299312 + -1.68994 2.0633 -1.1131 0.938931 0.0320593 0.34261 + -1.72145 2.09212 -1.04902 0.901242 0.00129184 0.433315 + -1.72998 1.82017 -1.02458 0.804155 0.0712945 0.590129 + -1.67403 1.97548 -1.1624 0.979369 0.0811721 0.185062 + -1.68707 2.10694 -1.1277 0.975783 0.0546045 0.211815 + -1.7066 2.25074 -1.08775 0.96142 0.0621275 0.267977 + -1.70947 2.207 -1.0732 0.933052 0.0165296 0.359362 + -1.66549 1.89627 -1.1742 0.963879 0.0805039 0.253882 + -1.68761 2.15846 -1.15573 0.98872 0.0635271 0.135634 + -1.70018 2.27683 -1.12034 0.973309 0.0739352 0.217262 + -1.73003 2.38788 -1.0561 0.974417 0.106487 0.19792 + -1.73501 2.3795 -1.01098 0.961666 0.0476262 0.270056 + -1.74699 2.26462 -0.986805 0.885762 -0.0339763 0.462894 + -1.74805 1.92307 -0.997825 0.783753 0.0445339 0.619474 + -1.7916 1.75351 -0.929734 0.771075 0.182649 0.609985 + -1.72361 2.41406 -1.08864 0.944074 0.0660568 0.323049 + -1.73941 2.52038 -1.0578 0.950436 0.0423528 0.308022 + -1.74771 2.50862 -1.02162 0.979238 0.0813547 0.185672 + -1.71219 2.43192 -1.11818 0.98004 0.110151 0.165491 + -1.728 2.53833 -1.08728 0.985819 0.104593 0.131228 + -1.74105 2.63265 -1.05765 0.984489 0.129136 0.118763 + -1.75246 2.61995 -1.02745 0.950897 0.0438008 0.306393 + -1.76075 2.60818 -0.991272 0.972825 0.0989987 0.20931 + -1.69968 2.35382 -1.15051 0.993282 0.10702 0.0440168 + -1.70418 2.37334 -1.1703 0.985378 0.154616 -0.0715803 + -1.7167 2.45151 -1.13791 0.853954 0.272302 -0.443412 + -1.7312 2.54263 -1.10692 0.847461 0.271339 -0.456272 + -1.68711 2.23536 -1.18593 0.992992 0.0891708 -0.0775557 + -1.69619 2.27211 -1.20117 0.564763 0.283507 -0.775027 + -1.69337 2.12496 -1.24211 0.64998 0.232885 -0.723388 + -1.7067 2.15597 -1.23462 -0.279038 0.259524 -0.924546 + -1.71276 2.24476 -1.2068 -0.407443 0.252831 -0.877535 + -1.72075 2.34607 -1.17588 -0.389299 0.227154 -0.892663 + -1.70418 2.37334 -1.1703 -0.226178 0.325351 -0.918145 + -1.69304 2.04842 -1.26673 0.635359 0.313566 -0.705688 + -1.70637 2.07934 -1.25929 -0.253434 0.304553 -0.91816 + -1.75185 2.08692 -1.21682 -0.667682 0.212853 -0.713369 + -1.75791 2.17579 -1.18895 -0.668498 0.198866 -0.716632 + -1.76262 2.26646 -1.1568 -0.705615 0.16858 -0.68825 + -1.70174 1.99203 -1.29306 -0.152096 0.337167 -0.929078 + -1.73589 1.91402 -1.28954 -0.633696 0.238057 -0.736042 + -1.74052 2.00132 -1.25576 -0.665436 0.235665 -0.708278 + -1.8141 1.95582 -1.19674 -0.771143 0.175993 -0.611854 + -1.83533 2.04016 -1.14442 -0.805799 0.167127 -0.568117 + -1.69013 1.89667 -1.32589 -0.182584 0.357967 -0.915709 + -1.73367 1.82544 -1.32353 -0.632928 0.274196 -0.724029 + -1.7962 1.78133 -1.27253 -0.774322 0.200739 -0.600107 + -1.80276 1.87013 -1.23573 -0.774089 0.18849 -0.604365 + -1.88335 1.79572 -1.12164 -0.880744 0.124553 -0.456921 + -1.73005 1.73866 -1.36081 -0.654207 0.279361 -0.70283 + -1.79399 1.69277 -1.30653 -0.783721 0.223039 -0.579685 + -1.87107 1.61838 -1.20367 -0.874201 0.181608 -0.450324 + -1.87763 1.70717 -1.16687 -0.875535 0.149056 -0.459588 + -1.73301 1.64749 -1.3925 -0.6948 0.283038 -0.661168 + -1.8073 1.59501 -1.329 -0.790297 0.234706 -0.565988 + -1.88805 1.42946 -1.26487 -0.863437 0.198477 -0.46377 + -1.87474 1.52722 -1.2424 -0.870276 0.218614 -0.441393 + -1.81026 1.50393 -1.36065 -0.785988 0.211472 -0.58095 + -1.88883 1.33387 -1.29629 -0.84692 0.174672 -0.502211 + -1.9662 1.25106 -1.18427 -0.897676 0.174362 -0.404693 + -1.96847 1.33642 -1.13131 -0.9132 0.196119 -0.357215 + -1.96479 1.42748 -1.09262 -0.917288 0.211393 -0.337485 + -1.81855 1.40599 -1.38161 -0.810558 0.216017 -0.544364 + -1.89712 1.23594 -1.31727 -0.861848 0.154234 -0.483145 + -1.96698 1.15547 -1.2157 -0.874299 0.0864331 -0.477629 + -2.02124 1.12376 -1.10058 -0.940833 0.106489 -0.321703 + -1.81903 1.31935 -1.42054 -0.833639 0.232664 -0.500913 + -1.89403 1.14413 -1.35127 -0.899525 0.167263 -0.403581 + -1.95399 1.05227 -1.23915 -0.886003 0.0653478 -0.459051 + -1.99703 0.929877 -1.17096 -0.922634 0.0143854 -0.385408 + -2.01002 1.03308 -1.14751 -0.91261 0.0244684 -0.408099 + -1.82824 1.22532 -1.44989 -0.858232 0.238178 -0.454653 + -1.90324 1.05011 -1.38061 -0.920302 0.164658 -0.35487 + -1.95089 0.960473 -1.27315 -0.928163 0.0991291 -0.35873 + -1.82453 1.14454 -1.50056 -0.860847 0.22471 -0.45656 + -1.88766 0.978483 -1.44294 -0.908312 0.134507 -0.396077 + -1.93121 0.894901 -1.34518 -0.937381 0.0888712 -0.336777 + -1.95983 0.77573 -1.29557 -0.944314 0.050614 -0.32513 + -1.97952 0.841297 -1.22353 -0.9431 0.0422474 -0.329815 + -1.80562 1.07001 -1.56648 -0.869394 0.219808 -0.442537 + -1.86874 0.903956 -1.50886 -0.912923 0.118603 -0.39052 + -1.91563 0.823277 -1.40752 -0.929996 0.0592713 -0.362761 + -1.69567 1.18769 -1.7125 -0.854825 0.305633 -0.419359 + -1.79295 1.00322 -1.6328 -0.886963 0.221574 -0.405219 + -1.84544 0.846043 -1.58295 -0.922975 0.113518 -0.367737 + -1.88919 0.755559 -1.47603 -0.931817 0.0420228 -0.360486 + -1.69378 1.11793 -1.77487 -0.869063 0.308485 -0.386737 + -1.7691 0.950287 -1.71131 -0.900283 0.221805 -0.374558 + -1.82158 0.793109 -1.66147 -0.935243 0.129371 -0.32952 + -1.86589 0.69756 -1.55017 -0.945273 0.0597576 -0.320763 + -1.91065 0.635231 -1.43262 -0.939002 0.0160366 -0.343539 + -1.6801 1.06513 -1.84902 -0.881764 0.323823 -0.342974 + -1.75542 0.897488 -1.78546 -0.914065 0.225605 -0.337028 + -1.79718 0.760102 -1.7523 -0.93734 0.141684 -0.318307 + -1.84155 0.660377 -1.63517 -0.952917 0.0749478 -0.293824 + -1.67836 1.00534 -1.91987 -0.899867 0.312027 -0.304759 + -1.7298 0.86485 -1.87113 -0.924424 0.217459 -0.313292 + -1.77156 0.727377 -1.83802 -0.938751 0.181689 -0.292807 + -1.81715 0.627372 -1.726 -0.960318 0.10939 -0.25656 + -1.86197 0.542246 -1.59496 -0.958595 0.0820601 -0.272693 + -1.6628 0.974096 -1.99975 -0.911455 0.30585 -0.275147 + -1.71425 0.833595 -1.95099 -0.936695 0.225613 -0.267771 + -1.74214 0.723213 -1.93861 -0.939716 0.203829 -0.274566 + -1.78979 0.627846 -1.84862 -0.954913 0.155289 -0.253033 + -1.63031 1.05278 -2.00703 -0.79804 0.48585 -0.356486 + -1.65644 0.92519 -2.07784 -0.917015 0.295446 -0.267945 + -1.68686 0.842111 -2.04174 -0.941348 0.222886 -0.253348 + -1.71475 0.731724 -2.02935 -0.943961 0.179191 -0.277177 + -1.76037 0.623595 -1.94926 -0.9418 0.144527 -0.303522 + -1.62395 1.00388 -2.08513 -0.802861 0.474627 -0.360754 + -1.60888 0.957783 -2.17709 -0.788335 0.493322 -0.367644 + -1.63942 0.904651 -2.16327 -0.898923 0.326404 -0.292229 + -1.66984 0.821567 -2.12716 -0.946163 0.21842 -0.238889 + -1.6034 1.00377 -2.11935 -0.690982 0.596727 -0.407997 + -1.55387 1.00544 -2.20244 -0.617303 0.669101 -0.413813 + -1.59304 0.919411 -2.25863 -0.775756 0.500543 -0.384263 + -1.62358 0.866281 -2.2448 -0.878785 0.366838 -0.305233 + -1.46671 1.04008 -2.25685 -0.389992 0.848392 -0.357962 + -1.52471 0.991998 -2.27056 -0.612036 0.677482 -0.407958 + -1.56387 0.906056 -2.3267 -0.721933 0.548584 -0.421745 + -1.60236 0.841891 -2.33416 -0.83178 0.403929 -0.380766 + -1.65077 0.820142 -2.21909 -0.926539 0.292141 -0.237023 + -1.37522 1.05239 -2.28095 -0.277282 0.920443 -0.2755 + -1.35936 1.03642 -2.36629 -0.38834 0.884189 -0.259619 + -1.43014 0.994897 -2.38438 -0.483021 0.803818 -0.347228 + -1.48814 0.946809 -2.39809 -0.644772 0.656604 -0.391332 + -1.53679 0.879425 -2.40737 -0.736605 0.535769 -0.412752 + -1.30013 1.0588 -2.37107 -0.413034 0.903358 -0.115531 + -1.27743 1.06971 -2.41596 -0.596696 0.798163 -0.0830052 + -1.32284 1.02151 -2.47507 -0.523589 0.830042 -0.192055 + -1.39362 0.979989 -2.49315 -0.564237 0.774675 -0.285509 + -1.45177 0.922027 -2.49836 -0.688375 0.625886 -0.366615 + -1.27948 1.08729 -2.31361 -0.477194 0.853377 -0.209844 + -1.26248 1.08908 -2.34071 -0.50428 0.835202 -0.219407 + -1.24392 1.09539 -2.36524 -0.612632 0.790124 -0.0196539 + -1.28157 1.06511 -2.39559 -0.386614 0.920236 0.0607796 + -1.31626 1.08384 -2.24124 -0.539697 0.832647 -0.1242 + -1.27975 1.09644 -2.26906 -0.373528 0.917056 -0.139588 + -1.25706 1.10469 -2.26695 -0.51825 0.850804 -0.0868846 + -1.2456 1.11119 -2.3016 -0.55435 0.813754 -0.174641 + -1.22861 1.11298 -2.32871 -0.526312 0.826119 -0.201303 + -1.28398 1.0983 -2.21747 -0.327419 0.944631 -0.0216478 + -1.22424 1.13141 -2.28583 -0.415646 0.902694 -0.111275 + -1.20242 1.13319 -2.31351 -0.397821 0.913572 -0.0844049 + -1.21181 1.12119 -2.34793 -0.623263 0.78189 0.0138067 + -1.24071 1.1016 -2.37999 -0.671903 0.734678 0.0937815 + -1.23658 1.10612 -2.40041 -0.662028 0.74935 0.0139587 + -1.18562 1.14149 -2.33268 -0.565484 0.814708 0.128369 + -1.2086 1.12749 -2.36263 -0.658181 0.741127 0.132398 + -1.19759 1.13864 -2.37475 -0.645347 0.760108 0.0759098 + -1.20962 1.1297 -2.39806 -0.654382 0.755825 0.0226384 + -1.22658 1.11436 -2.44609 -0.68521 0.725387 -0.0655798 + -1.17383 1.1383 -2.28255 -0.194727 0.971349 0.136242 + -1.1585 1.1462 -2.29345 -0.472865 0.828992 0.298616 + -1.16163 1.16328 -2.33763 -0.504202 0.826222 0.251274 + -1.15063 1.17453 -2.34971 -0.36474 0.873196 0.323253 + -1.19565 1.13651 -2.25487 -0.109197 0.982267 0.152406 + -1.13323 1.12325 -2.19868 -0.202951 0.936813 0.284941 + -1.08239 1.17791 -2.33317 0.0467369 0.985681 0.162016 + -1.12323 1.18488 -2.35804 -0.121405 0.97306 0.195995 + -1.15926 1.17136 -2.38481 -0.514572 0.856113 0.0478178 + -1.1713 1.16232 -2.40817 -0.65713 0.753116 0.0315561 + -1.19962 1.13795 -2.44375 -0.663176 0.748434 0.00659296 + -0.968399 1.15384 -2.29328 0.202304 0.95554 0.214516 + -1.04735 1.17306 -2.38357 0.140036 0.988195 0.0621329 + -1.08819 1.18004 -2.40845 0.127357 0.990857 -0.044536 + -1.13186 1.18171 -2.39315 -0.167956 0.985579 -0.0206364 + -1.15944 1.1735 -2.41832 -0.511552 0.856371 0.0703066 + -0.936631 1.15101 -2.30577 0.419649 0.881265 0.217411 + -0.955186 1.16676 -2.38306 0.358932 0.930285 0.0757467 + -1.01558 1.17032 -2.39601 0.0984417 0.990638 0.0945756 + -0.932578 1.14581 -2.36357 0.836361 0.547373 -0.029708 + -0.931757 1.14517 -2.41466 0.816887 0.576744 0.00785208 + -0.959034 1.1691 -2.41991 0.352482 0.933536 -0.0653192 + -1.01943 1.17257 -2.43292 0.1906 0.981061 0.03452 + -1.04987 1.18209 -2.46681 0.143806 0.979138 0.143559 + -0.920012 1.10707 -2.34487 0.991735 0.123413 0.0350695 + -0.919192 1.10644 -2.39597 0.958062 0.285307 0.0267738 + -0.925154 1.13651 -2.44707 0.83272 0.530471 0.158676 + -0.952431 1.16044 -2.45231 0.437461 0.897856 -0.0498172 + -0.98287 1.16997 -2.4862 0.271842 0.94942 0.157177 + -0.929802 1.09338 -2.29976 0.987913 -0.148206 0.0454186 + -0.923815 1.03796 -2.30816 0.980927 0.0807736 0.176798 + -0.914026 1.05165 -2.35327 0.97129 0.111056 0.210386 + -0.909485 1.07044 -2.39242 0.975036 0.202639 0.0907886 + -0.914214 1.0936 -2.44394 0.951115 0.251325 0.179487 + -0.913802 0.9689 -2.31155 0.976617 0.0560245 0.207558 + -0.898638 0.993068 -2.38241 0.972779 0.0847546 0.215679 + -0.894097 1.01186 -2.42156 0.947415 0.250139 0.199586 + -0.904507 1.05752 -2.44045 0.951095 0.272874 0.144766 + -0.915551 0.821097 -2.30175 0.967868 -0.0135223 0.251094 + -0.900387 0.845177 -2.37266 0.968886 0.00923174 0.247334 + -0.882188 1.00437 -2.45918 0.947986 0.167926 0.270412 + -0.892598 1.05003 -2.47807 0.902205 0.273671 0.333364 + -0.900778 1.09393 -2.4795 0.903358 0.217654 0.369556 + -0.914433 0.563609 -2.32156 0.899078 -0.127257 0.418884 + -0.876889 1.05242 -2.5152 0.889144 0.246558 0.385527 + -0.967405 0.395445 -2.30669 0.570663 -0.556743 0.60364 + -1.04052 0.334882 -2.34079 0.619429 -0.682168 0.388528 + -1.11079 0.244901 -2.36655 0.703855 -0.607116 0.368781 + -1.17036 0.148551 -2.40006 0.66486 -0.649604 0.368748 + -1.12487 0.148312 -2.48305 0.663812 -0.645286 0.3781 + -1.1865 0.076404 -2.5217 0.517336 -0.79615 0.313861 + -1.21585 0.15262 -2.31431 0.638596 -0.65645 0.401583 + -1.27615 0.086092 -2.34228 0.554654 -0.766439 0.323928 + -1.23066 0.082109 -2.42798 0.534141 -0.789679 0.301829 + -1.31981 0.091549 -2.24473 0.59906 -0.735708 0.316007 + -1.33237 0.04906 -2.35634 0.443284 -0.863344 0.241114 + -1.29002 0.043919 -2.45923 0.419095 -0.877292 0.23392 + -1.24587 0.0383 -2.5529 0.392885 -0.888393 0.237485 + -1.37603 0.054431 -2.25884 0.463887 -0.856336 0.226932 + -1.4169 0.033245 -2.26275 0.208912 -0.972733 0.100728 + -1.36682 0.030486 -2.36717 0.198967 -0.971232 0.130842 + -1.32447 0.025344 -2.47006 0.277403 -0.945532 0.170342 + -1.27791 0.019255 -2.57732 0.259595 -0.951121 0.167271 + -1.46302 0.031072 -2.16318 0.15235 -0.983932 0.0930932 + -1.42859 0.03363 -2.26721 -0.223407 -0.967988 -0.114405 + -1.37851 0.030783 -2.37168 -0.268104 -0.959969 -0.0811185 + -1.33261 0.023419 -2.47613 -0.196511 -0.980076 -0.0288872 + -1.28605 0.01733 -2.58338 -0.195131 -0.980299 -0.0306362 + -1.51392 0.035698 -2.0638 0.120761 -0.986976 0.106278 + -1.4868 0.035107 -2.16957 -0.297794 -0.946035 -0.127816 + -1.50602 0.052899 -2.20699 -0.437889 -0.86945 -0.228715 + -1.44781 0.051335 -2.30468 -0.456397 -0.858905 -0.232344 + -1.4009 0.050985 -2.40587 -0.516667 -0.83205 -0.201862 + -1.5377 0.03982 -2.07013 -0.282159 -0.955628 -0.0846247 + -1.55839 0.054865 -2.10739 -0.4377 -0.878496 -0.191476 + -1.52924 0.081407 -2.26176 -0.515163 -0.808473 -0.284568 + -1.48243 0.090151 -2.36191 -0.534614 -0.795466 -0.285344 + -1.43552 0.089799 -2.4631 -0.611384 -0.749514 -0.253845 + -1.59725 0.050773 -1.9709 -0.287284 -0.9526 -0.100105 + -1.61793 0.06573 -2.00821 -0.471077 -0.85864 -0.202049 + -1.5816 0.083373 -2.16217 -0.614495 -0.742501 -0.266625 + -1.53613 0.121343 -2.34574 -0.66917 -0.663885 -0.333867 + -1.67245 0.068455 -1.90453 -0.430918 -0.87444 -0.222854 + -1.62721 0.088345 -2.05878 -0.626175 -0.728733 -0.277223 + -1.62369 0.123851 -2.14248 -0.809031 -0.485348 -0.331521 + -1.57809 0.118879 -2.24587 -0.749995 -0.579813 -0.318315 + -1.68172 0.091068 -1.9551 -0.595255 -0.735456 -0.32369 + -1.66666 0.12824 -2.04308 -0.755778 -0.53652 -0.375428 + -1.59088 0.16895 -2.26439 -0.908197 -0.257935 -0.329617 + -1.55774 0.164852 -2.3651 -0.857896 -0.397119 -0.326055 + -1.51578 0.167229 -2.46501 -0.778409 -0.505108 -0.372754 + -1.73708 0.087843 -1.85771 -0.537741 -0.776549 -0.328338 + -1.72202 0.125014 -1.9457 -0.804256 -0.413509 -0.426828 + -1.63385 0.173256 -2.16505 -0.892198 -0.284677 -0.35063 + -1.57455 0.233216 -2.3713 -0.897305 -0.314701 -0.309528 + -1.78785 0.081215 -1.75983 -0.602447 -0.714889 -0.354953 + -1.76961 0.12724 -1.84895 -0.848033 -0.313932 -0.42695 + -1.6716 0.181256 -2.06591 -0.907151 -0.163127 -0.3879 + -1.64677 0.245073 -2.17824 -0.906566 -0.262149 -0.330782 + -1.60902 0.237071 -2.27738 -0.899618 -0.300264 -0.317062 + -1.83783 0.078495 -1.66292 -0.731957 -0.578616 -0.359781 + -1.81959 0.124515 -1.75203 -0.857016 -0.289019 -0.426605 + -1.71919 0.183482 -1.96917 -0.880981 -0.203089 -0.427348 + -1.88014 0.072038 -1.56194 -0.767076 -0.55394 -0.323643 + -1.8657 0.123287 -1.6541 -0.906288 -0.185652 -0.379704 + -1.76705 0.188831 -1.87443 -0.883857 -0.186407 -0.42901 + -1.73059 0.259704 -1.99498 -0.864404 -0.295783 -0.406593 + -1.68272 0.254356 -2.08972 -0.885282 -0.269026 -0.379342 + -1.91872 0.068677 -1.45832 -0.824943 -0.501848 -0.260033 + -1.90428 0.120012 -1.55043 -0.904734 -0.239795 -0.352072 + -1.81316 0.187605 -1.7765 -0.883902 -0.18487 -0.429582 + -1.94676 0.071188 -1.35406 -0.78137 -0.592719 -0.195308 + -1.94308 0.111483 -1.44946 -0.918032 -0.263003 -0.296726 + -1.86032 0.185567 -1.68277 -0.889791 -0.216255 -0.401877 + -1.8163 0.261243 -1.81985 -0.884339 -0.231715 -0.40528 + -1.76915 0.263281 -1.91358 -0.857215 -0.303184 -0.416248 + -1.97218 0.063662 -1.24623 -0.657513 -0.749939 -0.0725779 + -1.9685 0.104044 -1.34157 -0.931463 -0.290266 -0.219367 + -1.89912 0.177033 -1.58179 -0.88379 -0.23562 -0.404226 + -1.98469 0.096754 -1.14175 -0.856678 -0.494602 0.146529 + -1.99175 0.109062 -1.23506 -0.921411 -0.378697 -0.0871208 + -1.94276 0.159406 -1.48706 -0.867182 -0.354308 -0.349945 + -1.89862 0.235611 -1.62845 -0.922587 -0.0831037 -0.376731 + -1.85498 0.253237 -1.72318 -0.875598 -0.250563 -0.412973 + -1.9815 0.146589 -1.03387 -0.756034 -0.578494 0.306198 + -1.98856 0.158812 -1.12723 -0.994374 -0.0986883 0.0384729 + -1.96601 0.164424 -1.38056 -0.968948 -0.093475 -0.228914 + -1.98072 0.220307 -0.938348 -0.877316 -0.356528 0.321254 + -1.99281 0.211628 -1.03391 -0.984552 -0.147455 0.0944188 + -1.99355 0.170473 -1.28383 -0.875953 -0.46704 -0.120749 + -1.96 0.235677 -1.42637 -0.96396 0.0753148 -0.255163 + -1.93247 0.229627 -1.52309 -0.954284 0.00366101 -0.29888 + -1.97373 0.305144 -0.85009 -0.949834 -0.192936 0.246152 + -1.98581 0.296467 -0.94566 -0.99183 -0.0657703 0.109308 + -1.9978 0.223203 -1.19056 -0.999247 0.00558986 -0.0383945 + -1.96385 0.434813 -0.723484 -0.791408 -0.351018 0.500459 + -1.97356 0.409 -0.769972 -0.951961 -0.184389 0.244482 + -1.98427 0.380217 -0.861719 -0.98546 -0.111371 0.128314 + -1.99895 0.286242 -1.09275 -0.999664 -0.024943 0.00706155 + -1.96171 0.539431 -0.653485 -0.792064 -0.315157 0.522792 + -1.97703 0.517646 -0.708553 -0.952197 -0.172335 0.252232 + -1.98773 0.488861 -0.800298 -0.986037 -0.11302 0.122301 + -1.9974 0.369992 -1.00881 -0.999786 -0.00325218 0.0204195 + -1.98028 0.326333 -1.23239 -0.978903 0.132828 -0.155258 + -1.96969 0.65733 -0.607494 -0.848082 -0.247574 0.468469 + -1.98501 0.635545 -0.662562 -0.948366 -0.174676 0.264745 + -1.99507 0.593357 -0.747888 -0.975685 -0.156634 0.153314 + -1.99419 0.452858 -0.919338 -0.999438 -0.0288507 0.0170785 + -1.97634 0.772609 -0.556763 -0.850695 -0.285233 0.441543 + -2.00529 0.764217 -0.656829 -0.94617 -0.206749 0.249032 + -2.01535 0.722029 -0.742154 -0.972116 -0.178315 0.152296 + -2.00153 0.557266 -0.866979 -0.993446 -0.109064 0.034209 + -1.9876 0.477829 -1.05719 -0.99718 -0.0037107 -0.0749563 + -1.95598 0.878317 -0.455052 -0.559245 -0.496608 0.663796 + -1.99349 0.882653 -0.514565 -0.861348 -0.334405 0.38243 + -2.02245 0.874262 -0.614633 -0.929341 -0.277309 0.243772 + -2.03629 0.845109 -0.720735 -0.947825 -0.255022 0.19129 + -2.01226 0.657475 -0.819343 -0.988316 -0.146658 0.0415088 + -1.93571 0.964666 -0.374015 -0.10366 -0.579508 0.808347 + -1.97703 0.986076 -0.393898 -0.676771 -0.503894 0.536723 + -2.01455 0.990413 -0.453411 -0.843885 -0.395258 0.362808 + -2.04627 0.984262 -0.563157 -0.915534 -0.322419 0.240508 + -2.06012 0.955113 -0.669267 -0.965758 -0.232337 0.115463 + -1.95968 1.0614 -0.304562 -0.286001 -0.63837 0.714623 + -2.001 1.0829 -0.324395 -0.703933 -0.524519 0.478913 + -2.0318 1.08707 -0.384218 -0.848563 -0.412 0.331958 + -2.06352 1.08092 -0.493969 -0.928484 -0.306902 0.209113 + -1.91534 1.03977 -0.321901 0.298187 -0.584626 0.754518 + -1.98842 1.15476 -0.231268 -0.359145 -0.62848 0.689947 + -2.0211 1.18058 -0.248185 -0.738508 -0.518872 0.430555 + -2.05189 1.18475 -0.308008 -0.827528 -0.457102 0.325968 + -1.85646 1.04292 -0.375555 0.795385 -0.19138 0.575096 + -1.94408 1.13313 -0.248607 0.194199 -0.601948 0.774562 + -2.01546 1.25513 -0.152315 -0.480432 -0.627259 0.612969 + -2.04814 1.28086 -0.169283 -0.702556 -0.559663 0.439536 + -1.89832 1.10095 -0.296262 0.585955 -0.505802 0.633104 + -1.92234 1.18614 -0.219013 0.693387 -0.377439 0.613804 + -1.96811 1.21832 -0.171359 0.0206645 -0.679714 0.733186 + -2.02483 1.34524 -0.069792 -0.399811 -0.633933 0.662027 + -1.86015 1.14351 -0.374978 0.923293 0.0230016 0.383408 + -1.88441 1.2047 -0.300965 0.937177 -0.0676176 0.34224 + -1.93698 1.27049 -0.155719 0.801202 -0.320647 0.505233 + -1.97748 1.30843 -0.088837 0.159109 -0.653027 0.740433 + -1.82658 1.23187 -0.486835 0.959575 0.0779347 0.270447 + -1.85085 1.29307 -0.412823 0.968752 0.0391377 0.244924 + -1.86885 1.35294 -0.337923 0.9799 0.00934479 0.199271 + -1.89905 1.28905 -0.237671 0.943557 -0.129305 0.304926 + -1.93585 1.35848 -0.080727 0.734889 -0.467839 0.490983 + -1.81146 1.33455 -0.567678 0.959934 0.109406 0.257987 + -1.84072 1.37809 -0.49529 0.959493 0.148617 0.239345 + -1.85872 1.43788 -0.420448 0.968057 0.219129 0.121856 + -1.88469 1.48434 -0.340922 0.960459 0.271951 0.0596735 + -1.87618 1.42189 -0.268346 0.99453 0.0176527 0.102947 + -1.84299 1.48933 -0.552965 0.905606 0.28427 0.314752 + -1.88307 1.51248 -0.474651 0.920278 0.342515 0.189135 + -1.90903 1.55894 -0.395126 0.913094 0.387587 0.126632 + -1.86867 1.56779 -0.586052 0.844163 0.453842 0.285335 + -1.91179 1.60975 -0.524332 0.884484 0.421175 0.200747 + -1.94178 1.60443 -0.321116 0.915049 0.402104 -0.0315978 + -1.89459 1.53524 -0.258873 0.950323 0.30069 -0.0804451 + -1.88608 1.47278 -0.186297 0.999663 -0.025758 -0.00321867 + -1.87313 1.63301 -0.700431 0.824208 0.475242 0.307937 + -1.92189 1.68619 -0.662742 0.874562 0.387361 0.291708 + -1.94454 1.65515 -0.450362 0.891517 0.426598 0.152355 + -1.97724 1.697 -0.383658 0.924263 0.375769 0.0673527 + -1.95085 1.65504 -0.247183 0.89539 0.435085 -0.0947499 + -1.83282 1.6809 -0.841971 0.806269 0.33302 0.488906 + -1.88157 1.734 -0.804341 0.79783 0.347586 0.492596 + -1.95459 1.72805 -0.596037 0.880661 0.420793 0.217645 + -1.8156 1.80599 -0.914837 0.738931 0.133514 0.66042 + -1.85829 1.83954 -0.872349 0.712938 0.172409 0.679702 + -1.92426 1.76755 -0.761844 0.804968 0.445729 0.391602 + -1.98855 1.76204 -0.532305 0.835529 0.513459 0.195577 + -1.77205 1.97564 -0.98287 0.710944 -0.0156977 0.703073 + -1.78843 2.05003 -0.946326 0.823193 -0.0835351 0.561582 + -1.82242 1.95205 -0.922019 0.597077 0.00829871 0.802141 + -1.93524 1.83504 -0.803141 0.833598 0.211904 0.510108 + -1.95822 1.80145 -0.698161 0.913507 0.240093 0.32842 + -1.76337 2.3391 -0.950211 0.922975 -0.0429746 0.382453 + -1.78249 2.30397 -0.901962 0.855773 -0.0775873 0.511501 + -1.81647 2.2059 -0.877697 0.814325 -0.118375 0.56821 + -1.89937 1.94763 -0.852761 0.777452 -0.0752609 0.624423 + -1.93269 1.9349 -0.794719 0.938156 -0.168714 0.302323 + -1.75957 2.46879 -0.943036 0.945399 0.0245559 0.324987 + -1.77868 2.43366 -0.894787 0.862175 -0.0345068 0.505434 + -1.83865 2.42426 -0.82771 0.70206 -0.0359695 0.711209 + -1.84979 2.19327 -0.819613 0.869369 -0.115066 0.480581 + -1.95567 1.90131 -0.689739 0.912627 -0.0905058 0.398649 + -1.75268 2.50016 -0.976565 0.9771 0.0824444 0.196159 + -1.77315 2.56887 -0.917576 0.924301 0.071436 0.374919 + -1.78795 2.61693 -0.89583 0.881218 0.0900881 0.464047 + -1.79348 2.48173 -0.873041 0.788265 0.0169569 0.615102 + -1.76627 2.60023 -0.951096 0.966019 0.119021 0.229435 + -1.78613 2.67697 -0.915407 0.927593 0.161559 0.336852 + -1.81909 2.66232 -0.855642 0.752669 0.107855 0.649505 + -1.86426 2.60485 -0.810302 0.721259 0.0397575 0.691524 + -1.78062 2.68492 -0.955583 0.956455 0.129544 0.261555 + -1.80134 2.74089 -0.909921 0.885734 0.219629 0.408947 + -1.81727 2.72244 -0.875169 0.830836 0.180625 0.52639 + -1.84106 2.75625 -0.851922 0.677954 0.368343 0.636162 + -1.76931 2.69654 -0.989714 0.936114 0.0566238 0.347108 + -1.79004 2.7526 -0.944002 0.908019 0.158139 0.387935 + -1.82513 2.77478 -0.886624 0.729699 0.436906 0.525979 + -1.7579 2.70925 -1.01992 0.963718 0.258817 0.0652807 + -1.77862 2.76509 -0.974238 0.90547 0.407531 0.118499 + -1.8052 2.79816 -0.938525 0.646307 0.729636 0.223426 + -1.81661 2.78567 -0.908291 0.743381 0.454403 0.490819 + -1.86775 2.79455 -0.86387 0.537195 0.581952 0.610535 + -1.74425 2.63695 -1.0773 0.626532 0.427098 -0.651955 + -1.76305 2.71127 -1.03682 0.463925 0.596348 -0.655089 + -1.78378 2.76702 -0.991191 0.395354 0.742639 -0.540539 + -1.80795 2.79902 -0.949217 0.187592 0.917222 -0.351445 + -1.74268 2.5277 -1.12287 -0.0488763 0.305199 -0.951034 + -1.76503 2.61621 -1.08778 -0.368311 0.31913 -0.873214 + -1.78383 2.69045 -1.04735 -0.444662 0.382017 -0.810147 + -1.80458 2.75174 -1.00111 -0.460354 0.477401 -0.74844 + -1.82875 2.78366 -0.959199 -0.561231 0.5448 -0.623067 + -1.72818 2.43651 -1.15392 0.0153373 0.273364 -0.961788 + -1.7724 2.45598 -1.10924 -0.734968 0.123263 -0.666804 + -1.79475 2.54449 -1.07414 -0.772937 0.107699 -0.625276 + -1.81161 2.64031 -1.02712 -0.822024 0.133012 -0.5537 + -1.83236 2.70152 -0.98093 -0.843192 0.116224 -0.524898 + -1.77005 2.3569 -1.13484 -0.715717 0.134452 -0.685326 + -1.83396 2.32389 -1.05426 -0.836003 0.121886 -0.535017 + -1.82428 2.46176 -1.03646 -0.845391 0.0969951 -0.525267 + -1.84113 2.55759 -0.989435 -0.879065 0.0968489 -0.46676 + -1.8688 2.64369 -0.913372 -0.89814 0.0772281 -0.432874 + -1.8316 2.22491 -1.07981 -0.843554 0.163224 -0.511638 + -1.89966 2.06103 -0.988568 -0.933401 0.14116 -0.329902 + -1.87904 2.2611 -0.990313 -0.876503 0.089622 -0.472981 + -1.86937 2.39898 -0.972513 -0.873943 0.123206 -0.470153 + -1.87537 2.47364 -0.941231 -0.880607 0.111525 -0.460536 + -1.84003 2.13082 -1.11226 -0.839926 0.195803 -0.506148 + -1.90809 1.96695 -1.02102 -0.932285 0.169191 -0.319717 + -1.9045 2.14994 -0.949971 -0.92276 0.0636023 -0.38009 + -1.90458 1.88014 -1.06926 -0.900005 0.118722 -0.419399 + -1.97308 1.77805 -0.900439 -0.955821 0.156521 -0.248812 + -1.96957 1.69115 -0.948727 -0.937747 0.132989 -0.32085 + -2.02579 1.55705 -0.839262 -0.947964 0.15376 -0.278787 + -1.96564 1.60198 -0.996678 -0.925672 0.134525 -0.353601 + -2.02186 1.46779 -0.887253 -0.943343 0.137763 -0.301869 + -2.06228 1.48826 -0.746906 -0.959362 0.133604 -0.248546 + -2.09122 1.45139 -0.640447 -0.974431 0.0962247 -0.20304 + -1.95992 1.51335 -1.04196 -0.923642 0.178625 -0.339085 + -2.02129 1.37888 -0.937849 -0.94504 0.182911 -0.271004 + -2.06073 1.38864 -0.790966 -0.960796 0.118039 -0.250875 + -2.08967 1.35177 -0.684508 -0.980061 0.065485 -0.187594 + -2.11859 1.4276 -0.499441 -0.983277 0.0389271 -0.177909 + -2.02617 1.29301 -0.988521 -0.947385 0.177116 -0.266628 + -2.06017 1.29964 -0.841612 -0.964425 0.136427 -0.226433 + -2.08309 1.26324 -0.753163 -0.979789 0.0907949 -0.17824 + -2.10357 1.35566 -0.589833 -0.988026 0.0150411 -0.153556 + -2.02351 1.20911 -1.04761 -0.944788 0.160515 -0.285676 + -2.05816 1.21379 -0.905509 -0.96694 0.130825 -0.21889 + -2.08108 1.17739 -0.817061 -0.987623 0.0473868 -0.149515 + -2.09699 1.26712 -0.658488 -0.993989 0.00114169 -0.109477 + -2.12631 1.36968 -0.449128 -0.98963 -0.0982745 -0.104761 + -2.05549 1.1299 -0.964603 -0.972881 0.0812402 -0.216569 + -2.07198 1.08522 -0.885216 -0.990384 -0.0118836 -0.137833 + -2.08871 1.18155 -0.736669 -0.996322 -0.0308005 -0.0799573 + -2.09774 1.19902 -0.611331 -0.993967 -0.107858 -0.0199089 + -2.10602 1.28468 -0.5331 -0.992525 -0.103797 -0.0641862 + -2.04402 1.04975 -1.03439 -0.970439 0.030296 -0.239437 + -2.06051 1.00508 -0.955007 -0.987998 -0.0560364 -0.143945 + -2.07962 1.08938 -0.804825 -0.995261 -0.0763985 -0.0601538 + -2.0328 0.959071 -1.08132 -0.962637 -0.0424637 -0.267444 + -2.04378 0.902897 -0.995826 -0.983016 -0.121232 -0.13778 + -2.0661 0.987661 -0.861243 -0.990934 -0.125045 -0.0491213 + -2.07118 1.00899 -0.747187 -0.989622 -0.143696 0.000826782 + -2.08471 1.11063 -0.690828 -0.990304 -0.138888 0.0027783 + -2.01409 0.862541 -1.12133 -0.963874 -0.0552808 -0.260559 + -2.02508 0.806365 -1.03583 -0.983527 -0.124181 -0.131357 + -2.04937 0.885476 -0.902053 -0.98657 -0.153917 -0.0546657 + -1.99658 0.774051 -1.17386 -0.971801 -0.0279902 -0.234136 + -2.00857 0.707927 -1.07553 -0.986996 -0.112858 -0.114464 + -2.02757 0.760312 -0.902864 -0.986431 -0.158308 -0.0435122 + -2.03319 0.780641 -0.797873 -0.982325 -0.181062 0.0474664 + -2.05499 0.905722 -0.797122 -0.986957 -0.16097 -0.00194736 + -1.98022 0.694353 -1.24222 -0.968386 -0.0316358 -0.247441 + -1.99221 0.628315 -1.14384 -0.988532 -0.0728051 -0.132303 + -2.01107 0.661873 -0.942562 -0.991753 -0.120767 -0.042911 + -1.9371 0.70295 -1.36411 -0.933596 0.0203236 -0.357751 + -1.95748 0.621574 -1.31076 -0.953344 -0.0400655 -0.299216 + -1.97947 0.54448 -1.21083 -0.977391 -0.104149 -0.184012 + -2.00034 0.561665 -0.990198 -0.993735 -0.101515 -0.0467479 + -1.92874 0.541985 -1.37811 -0.953065 -0.0468341 -0.299122 + -1.95073 0.464891 -1.27818 -0.97211 0.0194808 -0.233714 + -1.8863 0.579432 -1.50997 -0.952219 0.0337673 -0.303544 + -1.90438 0.486181 -1.45545 -0.961391 0.064499 -0.267521 + -1.94019 0.396175 -1.36396 -0.963416 0.121826 -0.23872 + -1.99081 0.395049 -1.14661 -0.989561 0.0761923 -0.122326 + -1.88613 0.445995 -1.54445 -0.960159 0.115062 -0.254667 + -1.92194 0.355984 -1.45294 -0.951354 0.181882 -0.248686 + -1.83749 0.521787 -1.69473 -0.964718 0.118015 -0.235353 + -1.86166 0.425444 -1.64426 -0.958609 0.117814 -0.259208 + -1.90282 0.328364 -1.54911 -0.94618 0.190271 -0.261801 + -1.97912 0.263295 -1.33021 -0.977919 0.100252 -0.183366 + -1.81013 0.522261 -1.81735 -0.964761 0.0864903 -0.248507 + -1.83638 0.413125 -1.73832 -0.959356 0.0927667 -0.266516 + -1.87754 0.315958 -1.64322 -0.945104 0.164066 -0.282596 + -1.78193 0.519976 -1.91999 -0.950571 0.057625 -0.305113 + -1.80817 0.410835 -1.84095 -0.960484 0.0840346 -0.265345 + -1.8437 0.321936 -1.74858 -0.948369 0.178105 -0.26244 + -1.75033 0.516583 -2.00871 -0.945673 0.0907224 -0.312206 + -1.77306 0.429219 -1.96599 -0.95427 0.0938365 -0.283836 + -1.80858 0.340319 -1.87362 -0.945998 -0.0213889 -0.323466 + -1.72877 0.620289 -2.03794 -0.943108 0.126186 -0.30761 + -1.70205 0.619774 -2.12764 -0.950979 0.10299 -0.291603 + -1.71697 0.522889 -2.10943 -0.94546 0.0895083 -0.313198 + -1.7397 0.435529 -2.06672 -0.942173 0.0140033 -0.334835 + -1.68803 0.731209 -2.11905 -0.956964 0.154947 -0.245381 + -1.66896 0.729781 -2.21098 -0.961123 0.122954 -0.247236 + -1.67234 0.614464 -2.21745 -0.954832 0.0675853 -0.289359 + -1.68726 0.517582 -2.19924 -0.942297 0.055448 -0.330155 + -1.62954 0.79567 -2.3085 -0.916133 0.262274 -0.303172 + -1.64705 0.719534 -2.29283 -0.958629 0.105311 -0.264463 + -1.65044 0.604129 -2.29935 -0.958592 0.0284245 -0.283361 + -1.66056 0.507282 -2.271 -0.944086 0.0219805 -0.328965 + -1.70504 0.443523 -2.15917 -0.937578 -0.00732861 -0.347698 + -1.57527 0.815265 -2.41484 -0.786469 0.463635 -0.408055 + -1.60796 0.770587 -2.39906 -0.883805 0.304206 -0.355453 + -1.62548 0.694363 -2.38344 -0.944528 0.0736135 -0.320073 + -1.63512 0.575657 -2.34903 -0.945393 -0.00628874 -0.325871 + -1.64524 0.478729 -2.32075 -0.939555 -0.0369874 -0.340395 + -1.54246 0.793947 -2.49812 -0.778423 0.444319 -0.443439 + -1.57515 0.749187 -2.48239 -0.854523 0.262989 -0.447915 + -1.59698 0.67167 -2.45753 -0.908288 0.0341742 -0.416948 + -1.60662 0.552963 -2.42312 -0.920288 -0.0260881 -0.390371 + -1.50042 0.854638 -2.50764 -0.755032 0.504357 -0.418987 + -1.50328 0.780374 -2.57541 -0.772967 0.380888 -0.507392 + -1.53243 0.730259 -2.56481 -0.822976 0.207752 -0.528725 + -1.55426 0.652742 -2.53995 -0.869186 0.0190255 -0.494118 + -1.40873 0.913059 -2.60623 -0.707436 0.582214 -0.400701 + -1.46124 0.841065 -2.58493 -0.773094 0.446835 -0.450182 + -1.43613 0.819446 -2.65289 -0.798962 0.360914 -0.481042 + -1.45803 0.764403 -2.64455 -0.795105 0.293892 -0.530504 + -1.48719 0.714293 -2.63396 -0.751387 0.0945052 -0.653059 + -1.35057 0.970934 -2.60107 -0.634369 0.702594 -0.322394 + -1.38363 0.891352 -2.67423 -0.716114 0.510931 -0.475532 + -1.39239 0.812546 -2.72934 -0.74291 0.323901 -0.585809 + -1.41428 0.75751 -2.72101 -0.7928 0.0651492 -0.60599 + -1.28516 1.0287 -2.58513 -0.594154 0.769993 -0.232576 + -1.23603 1.03277 -2.68117 -0.654781 0.69439 -0.298471 + -1.30145 0.975091 -2.69707 -0.664642 0.642797 -0.380873 + -1.33585 0.903728 -2.71987 -0.681349 0.452028 -0.575703 + -1.27319 1.0645 -2.46373 -0.662391 0.733103 -0.154267 + -1.23551 1.07169 -2.57379 -0.714719 0.672558 -0.191943 + -1.20058 1.08523 -2.66683 -0.793243 0.509164 -0.333941 + -1.18471 1.04321 -2.75686 -0.666151 0.649363 -0.366838 + -1.22233 1.10923 -2.49381 -0.729059 0.666569 -0.155428 + -1.21201 1.11193 -2.53548 -0.773572 0.619555 -0.133186 + -1.19013 1.12891 -2.58389 -0.826646 0.554456 -0.0960993 + -1.21363 1.08867 -2.62219 -0.867134 0.446604 -0.220507 + -1.19159 1.14556 -2.48434 -0.731957 0.678813 -0.0587482 + -1.18126 1.14826 -2.52601 -0.815828 0.569804 -0.098732 + -1.17209 1.15831 -2.57441 -0.84457 0.531328 -0.0662785 + -1.18088 1.1429 -2.63392 -0.839225 0.5182 -0.164836 + -1.16783 1.13946 -2.67856 -0.872127 0.381376 -0.306507 + -1.18777 1.14912 -2.45389 -0.690687 0.722938 0.0176511 + -1.16542 1.17131 -2.46853 -0.560574 0.828096 0.00376736 + -1.17085 1.16932 -2.51908 -0.694251 0.719653 -0.0107273 + -1.16168 1.17937 -2.56748 -0.763728 0.645469 -0.00946441 + -1.1616 1.17478 -2.43814 -0.537117 0.841758 0.0543007 + -1.1403 1.18208 -2.45458 -0.148686 0.988614 -0.0231118 + -1.14573 1.18009 -2.50514 -0.300884 0.948428 0.0997637 + -1.14055 1.18732 -2.53386 -0.431706 0.876175 0.214351 + -1.14094 1.20304 -2.60229 -0.572271 0.817286 0.0674576 + -1.13768 1.18233 -2.43142 -0.129509 0.990662 0.0426188 + -1.09447 1.17921 -2.45001 -0.0558176 0.993542 0.0987885 + -1.08928 1.18644 -2.47874 -0.0957059 0.969905 0.223885 + -1.11981 1.21108 -2.56861 -0.168447 0.98564 0.0118046 + -1.13552 1.18105 -2.41161 -0.145418 0.988941 0.0291549 + -1.09184 1.17938 -2.4269 0.109258 0.99367 -0.0261175 + -1.0804 1.20673 -2.55668 0.0681394 0.981004 0.181625 + -0.967913 1.176 -2.52145 0.158523 0.9292 0.333852 + -1.06545 1.21285 -2.59188 0.0449928 0.973577 0.223881 + -1.09838 1.22453 -2.63391 -0.134256 0.981751 0.134686 + -1.13079 1.21216 -2.64528 -0.583304 0.812253 0.00105262 + -1.16283 1.17229 -2.62444 -0.833004 0.548775 -0.0703607 + -0.911718 1.13693 -2.48258 0.675808 0.505001 0.536896 + -0.926335 1.16779 -2.50524 -0.011886 0.735221 0.677723 + -0.990116 1.20637 -2.60766 0.0790973 0.956466 0.28092 + -1.02305 1.21805 -2.64968 0.0225568 0.986295 0.163444 + -0.885069 1.09631 -2.51663 0.889157 0.0688556 0.452392 + -0.884528 1.14908 -2.50443 0.676666 0.2882 0.677542 + -0.899145 1.17995 -2.5271 0.253383 0.832005 0.493522 + -0.948538 1.19817 -2.59145 0.0255572 0.950254 0.310427 + -0.94738 1.22467 -2.66936 0.0601982 0.925018 0.375122 + -0.856004 1.06934 -2.57092 0.861692 0.116377 0.493905 + -0.867959 1.10431 -2.55008 0.87148 -0.0567673 0.487134 + -0.867418 1.15699 -2.53792 0.856337 0.330428 0.396868 + -0.88845 1.18671 -2.54941 0.422347 0.85005 0.314702 + -0.937843 1.20493 -2.61377 0.078891 0.955981 0.282623 + -0.84669 1.11707 -2.58139 0.896595 0.100933 0.431195 + -0.862438 1.16515 -2.58307 0.834094 0.470844 0.287389 + -0.88347 1.19496 -2.5945 0.413193 0.867419 0.277229 + -0.834108 1.13159 -2.62274 0.899935 0.258385 0.351218 + -0.849857 1.17975 -2.62436 0.765879 0.512534 0.38825 + -0.876853 1.2022 -2.62483 0.345542 0.878935 0.328747 + -0.931226 1.21225 -2.64405 0.157951 0.938008 0.308532 + -0.941463 1.25178 -2.72611 0.0463528 0.911807 0.407994 + -0.980939 1.25611 -2.73802 -0.124525 0.955234 0.268369 + -0.986855 1.22901 -2.68127 -0.0860182 0.929966 0.357442 + -0.855869 1.243 -2.7345 0.149777 0.897169 0.415517 + -0.91914 1.26648 -2.76477 0.0567207 0.916672 0.395594 + -1.0015 1.25512 -2.76769 -0.274863 0.961474 -0.00433306 + -1.03613 1.2458 -2.74336 -0.199231 0.950363 0.23899 + -0.880748 1.29581 -2.84857 -0.00167506 0.960918 0.276828 + -0.941826 1.27882 -2.78935 -0.105791 0.914751 0.38992 + -0.882594 1.29958 -2.8801 -0.162982 0.983306 0.0809091 + -0.94672 1.29238 -2.83283 -0.160976 0.960792 0.225757 + -0.988215 1.27832 -2.83389 -0.466197 0.873957 0.137331 + -0.983321 1.26477 -2.79041 -0.400141 0.892953 0.20621 + -0.850377 1.31449 -2.91732 -0.282936 0.919806 0.271854 + -0.877135 1.30123 -2.90596 -0.300999 0.948933 0.0944764 + -0.949167 1.29401 -2.91546 -0.275316 0.96128 -0.0118887 + -0.948567 1.29623 -2.86431 -0.221607 0.974469 0.0360735 + -0.899956 1.31617 -2.97904 -0.428834 0.890801 0.150248 + -0.926715 1.30291 -2.96768 -0.404979 0.914011 0.0239883 + -0.943709 1.29575 -2.94127 -0.333011 0.942891 -0.0077541 + -0.981064 1.27856 -2.9257 -0.675549 0.704626 -0.217107 + -0.980463 1.28078 -2.87453 -0.512733 0.857576 -0.0408408 + -0.909608 1.31262 -3.01408 -0.524969 0.825447 -0.207473 + -0.949326 1.28635 -2.99379 -0.704705 0.666207 -0.244047 + -0.96632 1.27919 -2.96738 -0.744648 0.609156 -0.272815 + -0.986988 1.24749 -2.93948 -0.835253 0.356501 -0.41864 + -1.01219 1.25533 -2.89466 -0.787824 0.568261 -0.237514 + -0.889411 1.29932 -3.05886 -0.526052 0.749129 -0.402584 + -0.913215 1.27735 -3.065 -0.633356 0.477886 -0.608675 + -0.933412 1.29065 -3.02023 -0.669073 0.636878 -0.383051 + -0.956513 1.25574 -3.01736 -0.84996 0.354623 -0.389629 + -0.972244 1.24811 -2.98116 -0.89113 0.307196 -0.333943 + -0.836077 1.34062 -3.04639 -0.736355 0.622526 -0.265035 + -0.879112 1.29481 -3.08344 -0.670374 0.630444 -0.39133 + -0.906593 1.25503 -3.07875 -0.689439 0.168004 -0.704592 + -0.940599 1.25994 -3.04386 -0.77263 0.321629 -0.547355 + -0.9681 1.2197 -3.01414 -0.860102 0.0940931 -0.50137 + -0.828288 1.35158 -3.05058 -0.624178 0.777037 -0.0813382 + -0.867142 1.29652 -3.11001 -0.834016 0.520162 -0.18398 + -0.880425 1.25738 -3.12241 -0.895863 0.120374 -0.427714 + -0.892395 1.25566 -3.09584 -0.837736 0.200515 -0.507929 + -0.848405 1.33885 -3.10093 -0.805847 0.585174 0.0904521 + -0.859353 1.30749 -3.11421 -0.88592 0.463174 -0.0248135 + -0.861481 1.29584 -3.15123 -0.909019 0.257874 -0.327393 + -0.860701 1.25353 -3.15314 -0.847179 -0.0782314 -0.525516 + -0.891311 1.19161 -3.0945 -0.764881 0.317403 -0.560547 + -0.822393 1.35025 -3.13007 -0.335236 0.940074 -0.062271 + -0.842034 1.33802 -3.14948 -0.73097 0.654264 -0.193963 + -0.850533 1.32721 -3.13796 -0.88922 0.425233 -0.168716 + -0.837007 1.30443 -3.1987 -0.866915 0.155506 -0.473578 + -0.836227 1.26211 -3.20061 -0.794169 -0.140755 -0.591172 + -0.807774 1.35332 -3.17719 -0.343641 0.937186 -0.0599436 + -0.827415 1.34108 -3.19659 -0.710348 0.603132 -0.362819 + -0.828508 1.31515 -3.21027 -0.780578 0.211785 -0.588086 + -0.788135 1.35976 -3.19374 -0.344028 0.933357 -0.102414 + -0.803897 1.3462 -3.21505 -0.433188 0.670717 -0.602069 + -0.80499 1.32035 -3.22868 -0.383956 0.26671 -0.883993 + -0.810492 1.2834 -3.23168 -0.423018 -0.0677639 -0.903583 + -0.824198 1.20238 -3.18974 -0.746425 -0.103299 -0.657404 + -0.759647 1.36245 -3.21781 -0.352857 0.757129 -0.549771 + -0.775426 1.33123 -3.23053 -0.314824 0.336035 -0.887675 + -0.780928 1.29429 -3.23354 -0.308369 0.0410189 -0.950382 + -0.798463 1.22376 -3.22077 -0.571091 -0.225615 -0.789274 + -0.734881 1.36517 -3.22991 -0.510718 0.679211 -0.527105 + -0.75066 1.33395 -3.24263 -0.56923 0.372221 -0.733095 + -0.758515 1.28489 -3.24766 -0.628664 0.0801214 -0.773538 + -0.77605 1.21436 -3.23489 -0.650392 -0.0290112 -0.759044 + -0.724005 1.3358 -3.27084 -0.611347 0.357093 -0.706215 + -0.731861 1.28674 -3.27586 -0.746686 0.145284 -0.649116 + -0.740077 1.21133 -3.26985 -0.758034 0.0150473 -0.652041 + -0.703222 1.28398 -3.31608 -0.871041 0.128482 -0.474111 + -0.711438 1.20857 -3.31007 -0.827377 0.0219875 -0.561216 + -0.729951 1.09364 -3.2816 -0.799537 0.024507 -0.600116 + -0.756525 1.13848 -3.25267 -0.71915 -0.0116248 -0.694757 + -0.692139 1.32737 -3.32723 -0.863614 0.367076 -0.345582 + -0.679091 1.27673 -3.37073 -0.768159 -0.0132553 -0.640122 + -0.685683 1.19519 -3.35049 -0.753651 -0.0625606 -0.654291 + -0.704195 1.08025 -3.32202 -0.713854 -0.0462183 -0.698768 + -0.631037 1.25434 -3.39814 -0.489264 -0.235466 -0.839747 + -0.657607 1.23794 -3.38175 -0.477437 -0.192609 -0.857296 + -0.664199 1.15631 -3.36156 -0.161871 -0.204568 -0.965375 + -0.667673 1.07883 -3.34755 -0.0804065 -0.16128 -0.983628 + -0.583594 1.12337 -3.3677 -0.413194 -0.305865 -0.85774 + -0.606508 1.1171 -3.35144 -0.448663 -0.257233 -0.855881 + -0.633078 1.1007 -3.33504 -0.023857 -0.220987 -0.974985 + -0.636552 1.02322 -3.32103 0.0327785 -0.128015 -0.99123 + -0.541689 1.23037 -3.43524 -0.317245 -0.420334 -0.850103 + -0.554759 1.09699 -3.36781 -0.191171 -0.237253 -0.952452 + -0.590393 0.98949 -3.34181 -0.485612 0.0171394 -0.874006 + -0.613308 0.983305 -3.3255 -0.376048 0.0441672 -0.925547 + -0.525923 1.10772 -3.37419 -0.351974 -0.259034 -0.899453 + -0.523938 1.00931 -3.36355 -0.410158 0.0258807 -0.911647 + -0.552774 0.998588 -3.35717 -0.312055 0.0387584 -0.949273 + -0.59256 0.886387 -3.36023 -0.447357 0.20609 -0.870286 + -0.516806 0.905132 -3.3851 -0.440406 0.167995 -0.881941 + -0.554941 0.895571 -3.37554 -0.353946 0.217305 -0.909671 + -0.549588 0.807847 -3.4032 -0.434649 0.27002 -0.859168 + -0.613945 0.801257 -3.36938 -0.465565 0.196425 -0.86294 + -0.648242 0.887851 -3.33037 -0.238582 0.156511 -0.958427 + -0.483313 0.9457 -3.40716 -0.352928 0.129484 -0.926647 + -0.478446 0.842036 -3.41942 -0.343401 0.347352 -0.872595 + -0.511454 0.817408 -3.41276 -0.373646 0.39511 -0.839212 + -0.449075 0.857102 -3.41871 -0.181931 0.337697 -0.923505 + -1.15269 1.18141 -2.66743 -0.871896 0.470712 -0.135007 + -1.153 1.14253 -2.72549 -0.915223 0.211874 -0.342748 + -1.14926 1.09558 -2.74257 -0.82447 0.379249 -0.420022 + -1.13193 1.21032 -2.7013 -0.71007 0.693272 -0.123184 + -1.13785 1.1844 -2.71441 -0.891173 0.360217 -0.275779 + -1.12906 1.16266 -2.76575 -0.89021 0.221673 -0.397979 + -1.12532 1.1158 -2.78279 -0.82497 -0.0490651 -0.563043 + -1.09691 1.11595 -2.82104 -0.805106 0.309681 -0.505868 + -1.09952 1.22269 -2.68993 -0.188756 0.981753 0.0230639 + -1.09078 1.2261 -2.71603 -0.236185 0.96295 0.130168 + -1.1157 1.21894 -2.74322 -0.668408 0.703396 -0.241793 + -1.12163 1.19302 -2.75634 -0.864647 0.383575 -0.324431 + -1.10832 1.18096 -2.80125 -0.784085 0.256464 -0.565187 + -1.01432 1.22146 -2.67579 -0.154738 0.968056 0.197288 + -1.06359 1.23826 -2.73789 -0.251442 0.943282 0.216784 + -1.08851 1.23109 -2.76508 -0.509744 0.844013 -0.166745 + -1.10089 1.21141 -2.79179 -0.643317 0.553659 -0.528777 + -1.05669 1.24472 -2.77308 -0.264462 0.935019 -0.236217 + -1.06907 1.22495 -2.79984 -0.463944 0.800522 -0.379369 + -1.09432 1.18106 -2.81722 -0.684007 0.204102 -0.700341 + -1.11132 1.1158 -2.79879 -0.539026 0.721 -0.435442 + -1.00108 1.25237 -2.77993 -0.484721 0.873235 -0.050064 + -1.06865 1.22229 -2.81203 -0.698494 0.68337 -0.212396 + -1.08073 1.19248 -2.8274 -0.779709 0.356109 -0.515014 + -1.06632 1.19253 -2.8497 -0.78751 0.313911 -0.530365 + -1.05505 1.23363 -2.82227 -0.65206 0.745344 -0.138853 + -1.0373 1.24602 -2.83274 -0.637136 0.760528 -0.12512 + -1.04896 1.19939 -2.87096 -0.808506 0.321565 -0.492864 + -1.04076 1.13677 -2.8959 -0.802866 0.287136 -0.522454 + -1.01994 1.25288 -2.85401 -0.690285 0.692207 -0.21061 + -1.02282 1.22287 -2.90504 -0.844319 0.311836 -0.435756 + -1.01462 1.16025 -2.92998 -0.847699 0.0952491 -0.521856 + -0.98606 1.14559 -2.97619 -0.807124 0.140914 -0.573318 + -1.06735 1.08183 -2.90755 -0.71221 0.557681 -0.426321 + -0.997624 1.21503 -2.94985 -0.843424 0.255487 -0.472612 + -0.983832 1.21207 -2.97794 -0.900273 0.212269 -0.380067 + -1.00083 1.1573 -2.95806 -0.874113 -0.195654 -0.444575 + -0.953329 1.20799 -3.03226 -0.761881 -0.082279 -0.64247 + -0.924861 1.16125 -3.05211 -0.759065 0.0913809 -0.64457 + -0.94158 1.11554 -3.05993 -0.671967 0.478682 -0.565087 + -1.00278 1.09979 -2.98406 -0.715202 0.509992 -0.477906 + -0.933976 1.23772 -3.05755 -0.724362 0.0473782 -0.68779 + -0.905509 1.19098 -3.0774 -0.756984 -0.0196027 -0.653139 + -0.871586 1.18768 -3.12528 -0.819592 -0.0165358 -0.572709 + -0.878753 1.11692 -3.12013 -0.743617 0.354148 -0.56711 + -0.831364 1.13163 -3.1846 -0.693751 0.0361876 -0.719306 + -0.906013 1.05988 -3.15032 -0.511791 0.295604 -0.806652 + -0.96884 1.05849 -3.09012 -0.670227 0.442286 -0.595968 + -1.03934 1.04783 -3.00726 -0.70953 0.480407 -0.515534 + -1.10391 1.02987 -2.93075 -0.700279 0.522208 -0.486732 + -0.792498 1.14151 -3.21772 -0.668955 -0.0403599 -0.742206 + -0.844477 1.01909 -3.16388 -0.435912 0.0641955 -0.897697 + -0.862737 0.911411 -3.17597 -0.314487 0.204616 -0.926947 + -0.924274 0.952194 -3.16241 -0.401295 0.14305 -0.904709 + -0.981885 0.970853 -3.11573 -0.692672 0.171191 -0.700642 + -0.805611 1.02897 -3.19699 -0.673897 0.0307071 -0.738187 + -0.779037 0.984124 -3.22592 -0.685824 0.0585476 -0.725408 + -0.807312 0.8757 -3.21712 -0.561078 0.201036 -0.802979 + -0.888474 0.773687 -3.21123 -0.563203 0.163526 -0.809976 + -0.708009 0.929185 -3.30036 -0.640215 0.0185042 -0.767973 + -0.736285 0.820761 -3.29156 -0.579149 0.206094 -0.788741 + -0.770918 0.732946 -3.30046 -0.565777 0.276 -0.776994 + -0.833049 0.737981 -3.25239 -0.538052 0.232206 -0.810297 + -0.671487 0.927766 -3.3259 -0.305046 0.0231465 -0.952056 + -0.669628 0.802808 -3.33947 -0.467802 0.19936 -0.861055 + -0.704261 0.714906 -3.34842 -0.437763 0.323929 -0.838709 + -0.729677 0.650131 -3.36422 -0.429278 0.544317 -0.720722 + -0.784197 0.647313 -3.32094 -0.656441 0.549434 -0.516922 + -0.791553 0.658465 -3.30266 -0.763638 0.201061 -0.61354 + -0.853684 0.663413 -3.25463 -0.650272 -0.0904644 -0.754296 + -0.824094 0.620744 -3.32732 -0.689668 0.667002 -0.281899 + -0.835219 0.606485 -3.26263 -0.793486 0.461746 -0.396448 + -0.842575 0.617554 -3.2444 -0.680987 0.225742 -0.696633 + -0.881885 0.624614 -3.20543 -0.71574 0.01508 -0.698204 + -0.892993 0.670473 -3.21566 -0.728335 -0.127559 -0.673244 + -0.839508 0.585837 -3.34066 -0.767933 0.434601 -0.470532 + -0.850633 0.571579 -3.27597 -0.699861 0.656442 -0.281565 + -0.891828 0.577886 -3.21909 -0.516642 0.648426 -0.559128 + -0.917453 0.547777 -3.26174 -0.481756 0.711617 -0.511383 + -0.970307 0.566982 -3.19821 -0.398424 0.769379 -0.499313 + -0.930771 0.581369 -3.17973 -0.457876 0.689703 -0.560945 + -0.920827 0.628098 -3.16606 -0.668567 0.0729528 -0.740065 + -0.943938 0.49023 -3.28707 -0.644385 0.410786 -0.644998 + -0.996791 0.50944 -3.22354 -0.632229 0.445744 -0.633719 + -1.05221 0.499862 -3.17235 -0.648677 0.374187 -0.662723 + -1.03412 0.568928 -3.14917 -0.543396 0.784954 -0.297604 + -0.994583 0.583223 -3.13074 -0.406932 0.601124 -0.68779 + -1.01994 0.404621 -3.25099 -0.682462 0.276672 -0.676534 + -1.07535 0.395043 -3.1998 -0.685545 0.259637 -0.68016 + -1.13457 0.383945 -3.14298 -0.694294 0.232501 -0.681101 + -1.11179 0.457364 -3.13654 -0.655355 0.3179 -0.685164 + -1.0937 0.52643 -3.11337 -0.59319 0.365523 -0.717299 + -1.04263 0.322675 -3.25645 -0.703613 0.169594 -0.690049 + -1.10444 0.320445 -3.19199 -0.710552 0.154784 -0.686409 + -1.16366 0.309347 -3.13517 -0.729849 0.084507 -0.678365 + -1.22401 0.308672 -3.0596 -0.772003 0.0621487 -0.632574 + -1.19471 0.371712 -3.08779 -0.707413 0.13203 -0.69436 + -1.13614 0.255278 -3.16932 -0.736031 -0.048465 -0.675211 + -1.19799 0.257929 -3.09751 -0.771599 -0.0537367 -0.633836 + -1.25835 0.25717 -3.02199 -0.825489 -0.0769077 -0.559154 + -1.17071 0.195581 -3.11292 -0.775988 -0.151882 -0.612188 + -1.23257 0.198234 -3.04111 -0.796209 -0.240811 -0.555032 + -1.28577 0.197006 -2.94879 -0.82635 -0.272375 -0.492907 + -1.31288 0.247537 -2.92751 -0.837482 -0.174951 -0.517703 + -1.3159 0.131596 -2.85429 -0.813168 -0.425584 -0.397033 + -1.3605 0.135637 -2.75069 -0.785636 -0.511692 -0.347776 + -1.34029 0.187375 -2.85431 -0.811358 -0.375442 -0.448042 + -1.30803 0.080062 -2.77604 -0.657718 -0.697751 -0.283814 + -1.35263 0.084103 -2.67244 -0.676531 -0.689855 -0.257693 + -1.39589 0.088496 -2.56864 -0.650732 -0.720374 -0.24002 + -1.40652 0.13393 -2.65054 -0.787216 -0.523908 -0.325286 + -1.38632 0.185582 -2.7542 -0.835594 -0.376829 -0.399728 + -1.26687 0.033708 -2.71875 -0.527483 -0.821637 -0.216043 + -1.31176 0.039233 -2.61412 -0.542936 -0.817674 -0.191389 + -1.35501 0.043626 -2.51033 -0.541844 -0.819614 -0.186114 + -1.44616 0.135233 -2.545 -0.71925 -0.622187 -0.309132 + -1.48932 0.129995 -2.44592 -0.627934 -0.70319 -0.3335 + -1.43091 0.182214 -2.65897 -0.802916 -0.458224 -0.381257 + -1.41122 0.246872 -2.74796 -0.851353 -0.282496 -0.442033 + -1.36663 0.250236 -2.84319 -0.859513 -0.20662 -0.467489 + -1.47407 0.177061 -2.55984 -0.774972 -0.505297 -0.379597 + -1.46101 0.248108 -2.6577 -0.842072 -0.32881 -0.42755 + -1.39707 0.331328 -2.82164 -0.842121 -0.163062 -0.514045 + -1.33472 0.319051 -2.90858 -0.829021 -0.0990452 -0.550377 + -1.28097 0.316267 -2.99295 -0.803522 -0.0413684 -0.593836 + -1.50272 0.238276 -2.56287 -0.84679 -0.344521 -0.405281 + -1.44686 0.33257 -2.73139 -0.851905 -0.201614 -0.483332 + -1.37354 0.397148 -2.86464 -0.818817 0.0195779 -0.573721 + -1.31119 0.384784 -2.95163 -0.779952 0.0353195 -0.624842 + -1.25167 0.379392 -3.02109 -0.750007 0.127781 -0.64897 + -1.54141 0.229118 -2.47201 -0.878911 -0.321167 -0.352658 + -1.49748 0.340717 -2.6479 -0.876334 -0.194716 -0.440596 + -1.47845 0.415515 -2.70086 -0.872163 0.0408533 -0.487507 + -1.42783 0.407368 -2.78435 -0.842552 -0.00890266 -0.538541 + -1.53617 0.331558 -2.55704 -0.880085 -0.235715 -0.412175 + -1.52509 0.411422 -2.61477 -0.910456 0.0523829 -0.410276 + -1.45261 0.472207 -2.72205 -0.847584 0.222339 -0.481837 + -1.40063 0.465663 -2.81112 -0.820573 0.182764 -0.541532 + -1.34634 0.455443 -2.89141 -0.772425 0.145223 -0.618279 + -1.57128 0.306542 -2.47251 -0.835394 -0.370571 -0.405948 + -1.5602 0.386404 -2.53023 -0.910678 -0.0614836 -0.408516 + -1.49925 0.468028 -2.63601 -0.869102 0.155199 -0.469655 + -1.43292 0.53521 -2.72537 -0.822372 0.245145 -0.513427 + -1.60575 0.310399 -2.37859 -0.920906 -0.250653 -0.298506 + -1.59543 0.38301 -2.44856 -0.932298 -0.0776528 -0.353257 + -1.54397 0.462983 -2.55687 -0.894162 0.0689012 -0.442411 + -1.52708 0.537637 -2.57338 -0.856026 0.0321084 -0.515935 + -1.48236 0.542768 -2.65247 -0.830761 0.187923 -0.523947 + -1.63363 0.327312 -2.28708 -0.933057 -0.197409 -0.300721 + -1.62331 0.400011 -2.357 -0.941493 -0.10647 -0.319773 + -1.5792 0.459672 -2.47514 -0.914495 0.0123474 -0.404409 + -1.66959 0.336595 -2.19856 -0.898147 -0.253989 -0.358917 + -1.65123 0.417072 -2.28535 -0.920044 -0.146869 -0.363247 + -1.61732 0.461668 -2.39239 -0.919441 -0.0799871 -0.385007 + -1.5685 0.550967 -2.50587 -0.883756 -0.0422909 -0.466032 + -1.6967 0.352746 -2.14414 -0.887069 -0.25059 -0.387702 + -1.67834 0.433221 -2.23093 -0.924063 -0.0900735 -0.371476 + -1.73525 0.356326 -2.06274 -0.904216 -0.195466 -0.379718 + -1.76991 0.348332 -1.97029 -0.923692 -0.111495 -0.366554 + -1.51283 0.639411 -2.60746 -0.747482 -0.0418051 -0.662965 + -1.46558 0.611434 -2.6398 -0.735773 0.0833317 -0.672082 + -1.41613 0.603874 -2.71271 -0.812837 0.249557 -0.526324 + -1.43993 0.686228 -2.66635 -0.701385 -0.130788 -0.700681 + -1.39955 0.667331 -2.71382 -0.806797 0.0380626 -0.589602 + -1.37089 0.599904 -2.79263 -0.806693 0.251944 -0.534576 + -1.38094 0.528752 -2.81439 -0.805135 0.251071 -0.537327 + -1.37391 0.738612 -2.76848 -0.636777 -0.0527125 -0.769244 + -1.32933 0.706247 -2.79182 -0.676599 0.20304 -0.707805 + -1.35431 0.66336 -2.79374 -0.767904 0.325738 -0.55156 + -1.30118 0.653066 -2.85931 -0.724483 0.340029 -0.599587 + -1.31941 0.593228 -2.86727 -0.749196 0.296524 -0.592266 + -1.34461 0.824924 -2.77497 -0.411356 0.40117 -0.818443 + -1.30003 0.792471 -2.79836 -0.618966 0.188194 -0.762538 + -1.2762 0.695953 -2.85739 -0.741885 0.343054 -0.576125 + -1.26662 0.915059 -2.81249 -0.753054 0.313349 -0.578552 + -1.21134 0.912351 -2.875 -0.729015 0.258014 -0.634008 + -1.24475 0.789848 -2.86082 -0.767324 0.187833 -0.613133 + -1.22635 0.705679 -2.92404 -0.747082 0.262215 -0.610828 + -1.23221 0.986335 -2.78975 -0.674975 0.608715 -0.416983 + -1.17101 1.00413 -2.86558 -0.688502 0.55266 -0.469608 + -1.14424 0.938086 -2.94017 -0.725606 0.288729 -0.624605 + -1.1949 0.799579 -2.92748 -0.754747 0.20571 -0.622929 + -1.12351 1.06101 -2.83269 -0.701325 0.593726 -0.394505 + -1.05238 0.960199 -3.03288 -0.726634 0.219754 -0.65093 + -1.10361 0.92803 -2.98836 -0.712459 0.205663 -0.670898 + -1.15427 0.789519 -2.97565 -0.701545 0.205512 -0.682349 + -1.17045 0.712744 -2.98307 -0.696069 0.236238 -0.677997 + -1.24529 0.638654 -2.93015 -0.718489 0.283709 -0.635045 + -0.981962 0.837958 -3.12715 -0.648643 0.086705 -0.756138 + -1.04096 0.835841 -3.07488 -0.676754 0.135161 -0.723696 + -1.09219 0.803672 -3.03036 -0.669838 0.166998 -0.723484 + -1.10836 0.726897 -3.03779 -0.624304 0.219397 -0.749739 + -1.18938 0.64572 -2.98918 -0.69001 0.263171 -0.674261 + -0.92435 0.819293 -3.17382 -0.649633 0.0631261 -0.757623 + -0.928869 0.716082 -3.17825 -0.668462 -0.0290365 -0.74318 + -0.980501 0.730595 -3.13999 -0.596225 0.010625 -0.802747 + -1.03949 0.728479 -3.08773 -0.63342 0.171974 -0.754456 + -1.12758 0.661112 -3.04244 -0.623165 0.247104 -0.742028 + -0.972459 0.64252 -3.12784 -0.49703 0.0221792 -0.86745 + -1.05871 0.662694 -3.09238 -0.507377 0.168821 -0.845025 + -1.14228 0.592368 -3.05418 -0.6203 0.267425 -0.737368 + -1.20409 0.576976 -3.00092 -0.681562 0.267929 -0.680946 + -1.26352 0.578902 -2.93805 -0.708927 0.284702 -0.645265 + -1.08084 0.603397 -3.09528 -0.462074 0.24442 -0.852494 + -1.15515 0.515401 -3.07226 -0.618284 0.259328 -0.741939 + -1.21596 0.512611 -3.01483 -0.687406 0.257678 -0.679026 + -1.2754 0.514542 -2.95198 -0.711823 0.238095 -0.660771 + -1.32947 0.522163 -2.88898 -0.753782 0.249189 -0.608044 + -1.17193 0.445132 -3.08136 -0.670714 0.267724 -0.691712 + -1.23275 0.442429 -3.02388 -0.703146 0.21641 -0.677312 + -1.29227 0.447909 -2.95436 -0.739324 0.196686 -0.643984 + -2.07631 1.05829 -0.619383 -0.984776 -0.161989 0.0630468 + -2.08462 1.14167 -0.528789 -0.972802 -0.215204 0.0856987 + -2.09766 1.23015 -0.449251 -0.96778 -0.24505 0.0579026 + -2.07183 1.16429 -0.40337 -0.90215 -0.373365 0.216157 + -2.09548 1.25584 -0.32634 -0.904996 -0.386754 0.17721 + -2.1209 1.32137 -0.369243 -0.96768 -0.251537 0.0180005 + -2.1412 1.40637 -0.285263 -0.964817 -0.26175 -0.0248056 + -2.07553 1.27638 -0.230928 -0.778319 -0.533494 0.331065 + -2.12035 1.37266 -0.167875 -0.831185 -0.492366 0.258278 + -2.11872 1.34714 -0.246282 -0.930117 -0.355499 0.0922128 + -2.15307 1.44336 -0.175734 -0.923882 -0.376226 0.0699626 + -2.17486 1.4999 -0.209276 -0.957722 -0.281004 -0.0616842 + -2.09296 1.37722 -0.106179 -0.686569 -0.557314 0.46693 + -2.11209 1.46856 -0.032785 -0.646813 -0.556234 0.521764 + -2.1547 1.46887 -0.097327 -0.826761 -0.481316 0.291204 + -2.18874 1.57082 -0.033902 -0.766564 -0.524893 0.369955 + -2.18673 1.53689 -0.099744 -0.870768 -0.469572 0.145828 + -2.04395 1.43658 0.003601 -0.425691 -0.636428 0.643232 + -2.03494 1.51832 0.092234 -0.385641 -0.612214 0.690272 + -2.14612 1.57059 0.03069 -0.668946 -0.510348 0.540422 + -1.97635 1.39651 -0.013794 0.0907708 -0.70271 0.705663 + -1.96734 1.47825 0.074839 0.181619 -0.708776 0.681652 + -2.04287 1.60776 0.161511 -0.408368 -0.500057 0.763662 + -2.15405 1.65995 0.099917 -0.546278 -0.586471 0.598024 + -2.2366 1.67118 0.022866 -0.638983 -0.645383 0.418547 + -1.92104 1.44646 -0.019103 0.780813 -0.482862 0.396455 + -1.89298 1.52745 0.050015 0.705753 -0.604032 0.370214 + -1.93928 1.55924 0.143957 0.207741 -0.688047 0.695295 + -1.98979 1.6911 0.231766 -0.283109 -0.594299 0.752767 + -1.90639 1.358 -0.168095 0.948273 -0.205625 0.24186 + -1.89158 1.44598 -0.106472 0.943949 -0.296139 0.145811 + -1.87462 1.52017 -0.039377 0.914213 -0.394759 0.0915382 + -1.85245 1.60663 0.108876 0.704914 -0.629211 0.327399 + -1.8862 1.64258 0.21421 0.276049 -0.725521 0.63041 + -1.86913 1.54697 -0.119201 0.973441 -0.0658189 -0.21927 + -1.84762 1.61518 -0.058341 0.937781 -0.141336 -0.317161 + -1.83409 1.59935 0.019485 0.901535 -0.432666 -0.00585471 + -1.79353 1.68774 0.086182 0.903663 -0.426788 -0.0352704 + -1.80712 1.67712 0.149782 0.770121 -0.584024 0.256575 + -1.90366 1.58585 -0.184941 0.900212 0.304796 -0.310995 + -1.88215 1.65406 -0.124082 0.734553 0.357577 -0.576689 + -1.80707 1.70358 0.008356 0.879021 -0.0303957 -0.475814 + -1.96656 1.69425 -0.164886 0.815085 0.494977 -0.301056 + -1.98548 1.76989 -0.0955 0.587809 0.688393 -0.424966 + -1.90107 1.7297 -0.054687 0.416509 0.642809 -0.642897 + -1.85621 1.7471 -0.020024 0.479751 0.468105 -0.742103 + -1.75682 1.79571 0.071374 0.860873 -0.0825552 -0.502078 + -2.04625 1.81044 -0.084535 0.29823 0.796599 -0.525822 + -2.00417 1.89569 0.025604 0.345333 0.624215 -0.700786 + -1.95931 1.91309 0.060267 0.320098 0.539902 -0.778488 + -1.80597 1.83923 0.042994 0.417825 0.411959 -0.809761 + -2.01202 1.78593 -0.505692 0.647339 0.745688 0.157802 + -2.02144 1.80659 -0.573062 0.685061 0.658367 0.311841 + -2.05701 1.81152 -0.487006 0.605798 0.768393 0.206351 + -2.05367 1.84205 -0.544286 0.817012 0.443929 0.367991 + -2.01739 1.83902 -0.609851 0.801432 0.276919 0.530116 + -2.04962 1.87449 -0.581074 0.807571 0.346906 0.476953 + -2.04145 1.94214 -0.633849 0.508707 0.297805 0.807793 + -1.97133 1.92451 -0.662711 0.664323 0.110262 0.739268 + -1.99539 2.02754 -0.686759 0.450854 0.240487 0.859591 + -1.86546 2.21637 -0.792627 0.671205 0.0809145 0.736842 + -1.86537 2.28969 -0.80982 0.100236 0.135708 0.985665 + -1.97007 2.21519 -0.731793 0.441884 0.0308854 0.89654 + -2.00125 2.13916 -0.723096 -0.909366 0.200364 0.364564 + -1.94335 2.34968 -0.749733 0.602343 -0.0633986 0.795716 + -1.9866 2.29243 -0.724362 0.495295 -0.00991002 0.868668 + -1.92042 2.52582 -0.743409 0.632544 -0.0129348 0.774417 + -1.96367 2.46847 -0.718087 -0.522958 0.087648 0.84784 + -1.87463 2.72542 -0.804338 0.70776 0.274569 0.650913 + -1.93079 2.6463 -0.737493 0.108039 0.0688432 0.99176 + -1.93692 2.63864 -0.741815 -0.967517 0.129701 0.217 + -1.94728 2.53942 -0.740764 -0.942284 0.120314 -0.312449 + -1.98055 2.3106 -0.758235 -0.964562 0.107045 -0.241166 + -1.9866 2.29243 -0.724362 -0.987131 0.106807 -0.119016 + -1.90132 2.76373 -0.816285 0.528351 0.56562 0.633181 + -1.9324 2.7268 -0.741515 -0.133289 0.598016 0.790323 + -1.93854 2.71913 -0.745837 -0.955142 0.192124 0.225371 + -2.14399 1.89124 -0.011488 0.426955 0.672227 -0.604831 + -2.06494 1.93633 0.036612 0.195836 0.646167 -0.737643 + -1.93989 1.94675 0.091568 0.284015 0.614345 -0.73615 + -2.15986 1.95106 0.0341 0.269388 0.585078 -0.764927 + -2.0808 1.99615 0.082202 0.248486 0.50442 -0.826931 + -2.19351 1.9624 0.028866 0.198285 0.533191 -0.822429 + -2.10963 2.04865 0.097671 0.238839 0.542194 -0.805594 + -2.06721 2.07636 0.125269 0.213802 0.715921 -0.664639 + -2.03838 2.02386 0.109799 0.271657 0.449616 -0.85091 + -2.23917 1.92694 0.002679 -0.000378154 0.505122 -0.863048 + -2.21586 2.04588 0.063268 0.0890033 0.639748 -0.763414 + -2.14329 2.05998 0.092438 0.250808 0.672469 -0.696334 + -2.15972 2.09474 0.138641 0.0354119 0.920513 -0.389104 + -2.24964 1.89447 -0.013284 -0.0940971 0.614787 -0.78306 + -2.32536 1.91211 -0.01503 -0.274091 0.4257 -0.862354 + -2.26152 2.01042 0.037081 -0.0305131 0.537276 -0.842854 + -2.28514 2.03824 0.065703 -0.320131 0.729777 -0.604103 + -2.23229 2.08063 0.109474 -0.131286 0.898211 -0.419501 + -2.30144 1.86929 -0.036272 -0.147104 0.603321 -0.783814 + -2.33583 1.87963 -0.030984 -0.497391 0.502262 -0.707344 + -2.35673 1.84625 -0.008958 -0.96642 -0.193908 -0.168619 + -2.34898 1.93992 0.013602 -0.632048 0.451421 -0.629869 + -2.25277 1.80374 -0.126729 -0.744028 0.255098 -0.617533 + -2.31679 1.83824 -0.046093 -0.406846 0.181152 -0.895355 + -2.35118 1.84867 -0.040755 -0.740287 0.0530725 -0.670193 + -2.20712 1.69775 -0.19395 -0.83829 -0.0221298 -0.544775 + -2.28134 1.80294 -0.084555 -0.80772 -0.123241 -0.576541 + -2.3157 1.79518 -0.041913 -0.812506 -0.373635 -0.447471 + -2.32125 1.79285 -0.010065 -0.840183 -0.535749 -0.0840558 + -2.28025 1.75988 -0.080374 -0.887256 -0.211078 -0.41015 + -2.28498 1.73488 -0.015069 -0.882903 -0.461293 -0.0876999 + -2.33655 1.81891 0.081797 -0.830046 -0.508139 0.229823 + -2.25308 1.68695 -0.118641 -0.922409 -0.241731 -0.301209 + -2.23459 1.63726 -0.042976 -0.866257 -0.491669 0.0886564 + -2.30028 1.76094 0.076794 -0.746337 -0.569201 0.344952 + -2.21773 1.74971 0.153845 -0.494162 -0.635582 0.59316 + -2.34528 1.85868 0.128905 -0.84888 -0.431524 0.305269 + -2.20269 1.58923 -0.146599 -0.944752 -0.300742 -0.130379 + -2.14133 1.44162 -0.358728 -0.979075 -0.0336256 -0.200702 + -1.98942 1.75695 0.288917 -0.356772 -0.656255 0.664864 + -2.21737 1.81556 0.210996 -0.427094 -0.604982 0.672003 + -2.31566 1.8655 0.189291 -0.664597 -0.516207 0.540222 + -2.35617 1.95194 0.178382 -0.937982 -0.170715 0.301738 + -2.36546 1.88611 0.038201 -0.987757 -0.155769 0.00846897 + -1.8863 1.73845 0.328145 -0.0158764 -0.745407 0.666421 + -2.03039 1.82377 0.333367 -0.381333 -0.563144 0.733113 + -2.14866 1.86319 0.301299 -0.403642 -0.547401 0.733093 + -2.24695 1.91313 0.279594 -0.500256 -0.445701 0.742358 + -2.32655 1.95876 0.238766 -0.76628 -0.176209 0.617872 + -1.8458 1.74 0.305064 0.52681 -0.688237 0.498799 + -1.86725 1.78376 0.373066 0.111726 -0.563128 0.818782 + -1.92727 1.80528 0.372597 -0.278403 -0.514301 0.811163 + -1.94441 1.85603 0.390103 -0.216515 -0.262564 0.940309 + -2.0185 1.88934 0.374807 -0.322445 -0.281857 0.903651 + -1.84087 1.71298 0.255067 0.651502 -0.63517 0.414853 + -1.76504 1.81136 0.280262 0.792631 -0.509071 0.335533 + -1.82675 1.78531 0.349985 0.555052 -0.631462 0.541454 + -1.81491 1.82177 0.372629 0.527454 -0.464782 0.711175 + -1.88439 1.83451 0.390573 -0.0563916 -0.312353 0.948291 + -1.76011 1.78434 0.230264 0.864915 -0.42226 0.271326 + -1.74652 1.79497 0.166664 0.908399 -0.416978 0.0306689 + -1.75319 1.84774 0.302856 0.777004 -0.480524 0.406646 + -1.73164 1.84857 0.10061 0.858913 0.21563 -0.464513 + -1.72133 1.84783 0.1959 0.911492 -0.410839 0.0198552 + -1.71044 1.88591 0.258945 0.894286 -0.39135 0.217018 + -1.73118 1.87639 0.295633 0.789309 -0.46938 0.395821 + -1.79859 1.8846 0.394619 0.534401 -0.330996 0.777726 + -1.78655 1.87289 0.074295 0.450527 0.632341 -0.630214 + -1.72356 1.85728 0.131326 0.922665 0.0418918 -0.383321 + -1.71488 1.87816 0.156571 0.917837 0.0483912 -0.393997 + -1.71266 1.8687 0.221145 0.901692 -0.422774 0.0906235 + -1.77846 1.88169 0.105061 0.479172 0.764593 -0.431034 + -1.81352 1.9195 0.12256 0.322027 0.547946 -0.772045 + -1.75341 1.9167 0.142605 0.43893 0.414666 -0.797115 + -1.69585 1.93395 0.202742 0.924585 0.208427 -0.318907 + -1.69363 1.95115 0.240542 0.930307 0.366312 -0.0185843 + -1.97494 1.98465 0.109118 0.33233 0.565857 -0.754561 + -1.92688 2.02509 0.144879 0.284258 0.599303 -0.748353 + -1.86677 2.02229 0.164923 0.340009 0.709329 -0.617451 + -1.73438 1.97249 0.188775 0.5721 0.6472 -0.503819 + -1.7512 2.00011 0.235748 0.509114 0.857031 -0.0793692 + -1.99032 2.0643 0.14556 0.34963 0.712652 -0.608183 + -1.99179 2.08462 0.19257 0.282208 0.925875 -0.251225 + -1.88359 2.0499 0.211896 0.37028 0.89876 -0.234783 + -1.76364 1.99576 0.302883 0.515872 0.823652 0.235529 + -1.70607 1.9468 0.307678 0.897687 0.252079 0.361406 + -2.06867 2.09668 0.17228 0.154743 0.954999 -0.253045 + -1.97827 2.09008 0.273111 0.201643 0.971959 0.120974 + -1.87008 2.05545 0.292487 0.39163 0.913235 0.112371 + -1.88752 2.03961 0.350326 0.241186 0.790539 0.562918 + -1.78108 1.97992 0.360723 0.487772 0.628816 0.605532 + -2.10191 2.10864 0.233761 0.0295365 0.996133 0.0827478 + -2.11664 2.09202 0.285748 -0.130634 0.849911 0.510476 + -1.99301 2.07346 0.325098 0.0538973 0.842256 0.536377 + -2.19296 2.1067 0.200123 -0.143025 0.98971 0.00429181 + -2.21547 2.09059 0.247028 -0.303141 0.843637 0.44315 + -2.12665 2.04664 0.326351 -0.25651 0.524742 0.811695 + -2.02307 2.03341 0.363666 -0.129289 0.522003 0.843088 + -1.91758 1.99965 0.388943 -0.00327734 0.49643 0.86807 + -2.28133 2.08254 0.160965 -0.38893 0.914944 -0.107751 + -2.30384 2.06635 0.20782 -0.586204 0.755072 0.293651 + -2.30936 2.03195 0.244401 -0.672984 0.459557 0.579569 + -2.22548 2.04512 0.287581 -0.382665 0.570306 0.726855 + -2.33417 2.04015 0.1172 -0.62313 0.714879 -0.317265 + -2.35243 2.02888 0.146103 -0.850768 0.52551 -0.00573434 + -2.35795 1.99449 0.182684 -0.938336 0.177983 0.296392 + -2.30199 1.99562 0.269721 -0.649089 0.103014 0.753705 + -2.36724 1.92857 0.042453 -0.96268 0.182775 -0.1996 + -1.85923 2.80544 -0.885537 -0.0566575 0.92097 0.385491 + -1.86198 2.8063 -0.896229 -0.517549 0.834665 -0.188356 + -1.88113 2.77837 -0.880441 -0.887676 0.347976 -0.301568 + -1.86775 2.79455 -0.86387 -0.756149 0.653669 -0.0309293 + -1.90746 2.75606 -0.820608 -0.904711 0.358815 -0.229673 + -1.90132 2.76373 -0.816285 -0.760978 0.645608 -0.0640537 + -1.84789 2.75571 -0.943404 -0.840199 0.151155 -0.520786 + -1.88434 2.69789 -0.875845 -0.907581 0.0217136 -0.419316 + -1.91067 2.6755 -0.816061 -0.931754 0.0461627 -0.360143 + -1.92103 2.57619 -0.81506 -0.933255 0.123665 -0.337255 + -1.96416 2.38154 -0.780912 -0.945125 0.137365 -0.29643 + -1.90304 2.55966 -0.865218 -0.903307 0.130846 -0.408553 + -1.94617 2.36492 -0.83112 -0.907722 0.112067 -0.404328 + -1.94017 2.29025 -0.862401 -0.903977 0.083575 -0.419334 + -1.96563 2.17909 -0.822059 -0.910114 0.0404193 -0.412383 + -1.9952 2.15733 -0.756969 -0.959982 0.0516612 -0.275255 + -2.21811 2.00879 0.3129 -0.395003 0.247979 0.884579 + -2.22239 1.94999 0.310547 -0.441301 -0.206085 0.873374 + -2.13677 1.92867 0.342689 -0.371068 -0.23758 0.897699 + -2.13249 1.98755 0.345092 -0.317924 0.147624 0.936553 + -2.0289 1.97432 0.382406 -0.221898 0.126425 0.966839 + -1.95482 1.94101 0.397702 -0.213087 0.0210479 0.976806 + -1.92943 1.95493 0.405201 -0.24607 0.181724 0.952064 + -1.83084 1.95588 0.403753 0.275392 0.424646 0.862459 + -1.85901 1.84842 0.398071 0.0344284 -0.398228 0.91664 + -1.84269 1.91125 0.420061 0.107803 -0.0448686 0.993159 + -1.77658 1.91316 0.387345 0.631121 -0.0633982 0.773089 + -1.72682 1.93728 0.344364 0.776531 0.065288 0.626688 + 0.265668 1.59394 -3.44147 -0.667019 0.166743 -0.726142 + 0.284447 1.53902 -3.46994 -0.563875 0.0938647 -0.820508 + 0.26512 1.48501 -3.45027 -0.794046 -0.0651636 -0.604355 + 0.252745 1.5134 -3.43101 -0.970392 -0.0302874 -0.239628 + 0.304657 1.58899 -3.46638 -0.221908 0.303297 -0.926697 + 0.314833 1.51845 -3.48435 -0.220254 0.0978511 -0.970522 + 0.293155 1.47025 -3.46951 -0.519442 -0.0479388 -0.85316 + 0.346372 1.58946 -3.46489 0.107909 0.325204 -0.939467 + 0.356547 1.51892 -3.48286 0.107521 0.208874 -0.972014 + 0.356556 1.43658 -3.49537 -0.064939 0.0445557 -0.996894 + 0.323541 1.44968 -3.48392 -0.390399 -0.0312012 -0.920117 + 0.373982 1.66906 -3.42415 0.264824 0.45265 -0.851456 + 0.387188 1.59292 -3.45548 0.297383 0.343534 -0.890813 + 0.392478 1.51526 -3.47722 0.283267 0.214176 -0.93482 + 0.36635 1.72855 -3.39056 0.291239 0.554463 -0.779584 + 0.413459 1.67197 -3.40473 0.501149 0.410395 -0.761856 + 0.421977 1.58169 -3.44311 0.534741 0.319278 -0.782377 + 0.427267 1.50404 -3.46484 0.518054 0.172092 -0.837857 + 0.392487 1.43292 -3.48973 0.328875 0.0593423 -0.942507 + 0.342152 1.73389 -3.39425 0.0705888 0.584627 -0.808226 + 0.369377 1.76876 -3.3558 0.299537 0.925098 -0.233389 + 0.393999 1.76282 -3.34131 0.171309 0.970884 -0.167442 + 0.405828 1.73146 -3.37114 0.367337 0.605201 -0.706255 + 0.319147 1.76774 -3.36248 -0.363273 0.88824 -0.281182 + 0.345179 1.7741 -3.35949 0.0515844 0.981405 -0.184885 + 0.337551 1.76806 -3.34796 -0.201914 0.661603 0.722158 + 0.363175 1.76019 -3.33739 -0.215014 0.620562 0.754103 + 0.337265 1.70187 -3.33755 -0.347902 0.210406 0.913615 + 0.387798 1.75425 -3.32289 -0.319804 0.552437 0.769765 + 0.418806 1.75845 -3.31183 -0.164774 0.642272 0.748557 + 0.419446 1.76383 -3.32485 0.134831 0.987542 -0.0811213 + 0.431275 1.73247 -3.35469 0.486535 0.577384 -0.655677 + 0.332826 1.64955 -3.32398 -0.425334 0.293407 0.856156 + 0.397704 1.70673 -3.31366 -0.351565 0.176201 0.919432 + 0.428712 1.71092 -3.3026 -0.311634 0.164589 0.935839 + 0.452985 1.74807 -3.30283 0.393021 0.548492 0.738032 + 0.453626 1.75346 -3.31585 0.603686 0.793128 -0.0806897 + 0.298838 1.64784 -3.34424 -0.609866 0.173755 0.773222 + 0.346895 1.59923 -3.29364 -0.383659 0.251729 0.888503 + 0.377439 1.60125 -3.28521 -0.306163 0.253198 0.91769 + 0.393265 1.6544 -3.30009 -0.326688 0.302077 0.895558 + 0.437086 1.67696 -3.29285 -0.316021 0.238812 0.918205 + 0.312908 1.59752 -3.31389 -0.642238 0.142921 0.753063 + 0.352689 1.52951 -3.28365 -0.419835 0.000676443 0.9076 + 0.383233 1.53154 -3.27522 -0.225939 -0.0242077 0.973841 + 0.407894 1.59371 -3.27293 -0.236023 0.191441 0.952703 + 0.423719 1.64686 -3.28781 -0.264426 0.294095 0.91847 + 0.316661 1.5396 -3.31073 -0.707172 -0.0350756 0.706171 + 0.362191 1.44278 -3.28154 -0.298055 -0.0522237 0.953119 + 0.398662 1.44285 -3.2826 -0.069011 -0.0751676 0.99478 + 0.423191 1.45776 -3.27781 0.289214 -0.189953 0.938229 + 0.407762 1.54644 -3.27043 -0.177209 -0.0131404 0.984086 + 0.326163 1.45287 -3.30861 -0.719861 -0.0786141 0.689652 + 0.333676 1.38795 -3.30941 -0.705045 -0.130222 0.697103 + 0.367138 1.38005 -3.28699 -0.276767 -0.156631 0.948086 + 0.403609 1.38012 -3.28805 0.349415 -0.208838 0.913398 + 0.289828 1.47013 -3.35786 -0.834231 -0.104086 0.541502 + 0.29734 1.40521 -3.35865 -0.844975 -0.130331 0.518681 + 0.303945 1.36472 -3.36017 -0.845094 -0.0826799 0.528186 + 0.333694 1.3502 -3.31774 -0.718814 -0.0813498 0.690426 + 0.367156 1.34229 -3.29532 -0.275882 -0.129906 0.952373 + 0.254886 1.56206 -3.39721 -0.930224 -0.05773 0.362424 + 0.268812 1.46739 -3.39265 -0.892278 -0.125632 0.433656 + 0.275158 1.41654 -3.39595 -0.901246 -0.144495 0.408505 + 0.256625 1.47467 -3.42362 -0.991866 -0.126913 0.00975066 + 0.26297 1.42381 -3.42693 -0.988636 -0.141041 0.052024 + 0.271304 1.38229 -3.42404 -0.987434 -0.136579 0.0794979 + 0.281762 1.37604 -3.39747 -0.904888 -0.0941318 0.41511 + 0.267812 1.42086 -3.44995 -0.841517 -0.112645 -0.528355 + 0.276146 1.37933 -3.44706 -0.878157 -0.125465 -0.461627 + 0.281624 1.29572 -3.43696 -0.912371 -0.112645 -0.393562 + 0.278449 1.29525 -3.41344 -0.991527 -0.0594747 0.115489 + 0.288907 1.28901 -3.38686 -0.895488 -0.00221955 0.44508 + 0.295847 1.40611 -3.46918 -0.546644 -0.06583 -0.834773 + 0.290122 1.36875 -3.46237 -0.644234 -0.0933342 -0.759112 + 0.295601 1.28513 -3.45226 -0.645878 -0.131112 -0.752098 + 0.323849 1.39324 -3.48339 -0.4014 -0.0628578 -0.913743 + 0.318124 1.35588 -3.47658 -0.413183 -0.123718 -0.902205 + 0.320655 1.28102 -3.46597 -0.406774 -0.140159 -0.902713 + 0.305931 1.16446 -3.44053 -0.660656 -0.161543 -0.733102 + 0.356864 1.38014 -3.49484 -0.126362 -0.104413 -0.986474 + 0.355104 1.34286 -3.48744 -0.124435 -0.162046 -0.978906 + 0.357635 1.26799 -3.47682 -0.100965 -0.154143 -0.982876 + 0.364915 1.16385 -3.46031 -0.0166002 -0.170351 -0.985244 + 0.330986 1.16034 -3.45424 -0.328372 -0.167938 -0.929499 + 0.390251 1.37789 -3.49104 0.323731 -0.107509 -0.940021 + 0.388491 1.34061 -3.48364 0.322521 -0.169001 -0.931353 + 0.388798 1.26766 -3.47239 0.336895 -0.133383 -0.932046 + 0.424454 1.38712 -3.47086 0.637503 -0.106994 -0.762982 + 0.41784 1.34853 -3.46632 0.644539 -0.161419 -0.747338 + 0.418147 1.27557 -3.45507 0.674683 -0.102163 -0.731003 + 0.420471 1.16378 -3.43851 0.69635 -0.123519 -0.706994 + 0.396078 1.16351 -3.45588 0.369856 -0.156008 -0.915897 + 0.42669 1.44214 -3.46954 0.57362 0.0147284 -0.818989 + 0.450724 1.40273 -3.44467 0.809558 -0.13664 -0.570917 + 0.44411 1.36414 -3.44013 0.819897 -0.167748 -0.547384 + 0.437236 1.28207 -3.43037 0.847101 -0.10886 -0.520163 + 0.451868 1.50135 -3.44542 0.75674 0.145404 -0.63734 + 0.451292 1.43946 -3.45012 0.746997 -0.0444644 -0.663338 + 0.473075 1.42713 -3.40846 0.977177 -0.124535 -0.172094 + 0.463289 1.38508 -3.40906 0.967762 -0.176429 -0.179751 + 0.456415 1.303 -3.3993 0.982106 -0.107288 -0.154783 + 0.452003 1.56124 -3.42383 0.773725 0.237624 -0.587269 + 0.473642 1.46386 -3.41391 0.960039 0.0136139 -0.279535 + 0.473777 1.52375 -3.39233 0.955927 0.0753839 -0.283763 + 0.468309 1.42442 -3.36681 0.957288 -0.169204 0.234457 + 0.443485 1.65151 -3.38545 0.708183 0.304848 -0.636824 + 0.467549 1.61552 -3.37163 0.90485 0.194828 -0.378534 + 0.443239 1.71002 -3.36003 0.648642 0.379142 -0.659935 + 0.467302 1.67403 -3.34621 0.90668 0.181422 -0.380812 + 0.471733 1.65052 -3.32651 0.999425 0.0229898 0.024907 + 0.47438 1.60094 -3.34175 0.998348 0.0525115 0.0233387 + 0.46559 1.73101 -3.32119 0.900692 0.383895 -0.203416 + 0.470021 1.70751 -3.30149 0.930142 0.184118 0.317704 + 0.460963 1.61601 -3.28124 0.860879 -0.0208798 0.508381 + 0.463609 1.56642 -3.29648 0.915187 -0.0595862 0.398601 + 0.480608 1.50917 -3.36245 0.992185 -0.121239 -0.0295068 + 0.461359 1.71412 -3.29308 0.361682 0.314186 0.877766 + 0.452301 1.62262 -3.27282 0.280367 0.15948 0.946552 + 0.438802 1.54524 -3.26529 0.335463 -0.0716281 0.939326 + 0.454815 1.52576 -3.28556 0.818003 -0.145224 0.55658 + 0.471814 1.4685 -3.35154 0.966979 -0.154681 0.202545 + 0.438935 1.59252 -3.26779 0.0108353 0.129298 0.991547 + 0.439204 1.43827 -3.29809 0.751344 -0.257961 0.607403 + 0.435699 1.3942 -3.31337 0.788243 -0.238693 0.567185 + 0.43054 1.35643 -3.32155 0.782094 -0.155106 0.603549 + 0.458523 1.38237 -3.36741 0.946408 -0.164189 0.278126 + 0.450909 1.30012 -3.36699 0.942797 -0.0712561 0.325664 + 0.398451 1.34236 -3.29623 0.354706 -0.16248 0.920752 + 0.397157 1.26612 -3.30336 0.329467 -0.0687138 0.941663 + 0.422927 1.27418 -3.32113 0.735323 -0.0603398 0.675025 + 0.365862 1.26606 -3.30244 -0.204552 -0.0618665 0.976899 + 0.367918 1.14997 -3.30638 -0.119159 -0.00973971 0.992827 + 0.395067 1.15279 -3.31141 0.388679 -0.030788 0.920859 + 0.420837 1.16085 -3.32918 0.681105 -0.0179885 0.731965 + 0.33703 1.26882 -3.31568 -0.632024 -0.0120533 0.774855 + 0.339085 1.15273 -3.31962 -0.469592 0.00475506 0.882871 + 0.344819 1.04559 -3.31039 -0.377088 0.0431288 0.925173 + 0.367929 1.04705 -3.30553 -0.0184225 0.0426845 0.998919 + 0.395078 1.04987 -3.31056 0.340251 0.0451459 0.93925 + 0.307281 1.28333 -3.3581 -0.828768 0.0211548 0.559192 + 0.311948 1.15213 -3.33605 -0.710893 0.0245632 0.702872 + 0.317682 1.04499 -3.32682 -0.682288 0.014202 0.730945 + 0.293574 1.15781 -3.36481 -0.925671 0.00561856 0.378289 + 0.303511 1.04582 -3.34643 -0.916007 -0.047497 0.39834 + 0.329822 0.954448 -3.31498 -0.676156 -0.00282454 0.736753 + 0.348894 0.95487 -3.30343 -0.371924 0.0454988 0.927148 + 0.372004 0.956326 -3.29858 -0.0154366 0.0687572 0.997514 + 0.287422 1.16036 -3.39442 -0.997203 -0.065219 0.0364992 + 0.297359 1.04837 -3.37604 -0.992668 -0.120871 0.000150586 + 0.311327 0.95707 -3.3554 -0.987401 -0.158198 0.00336663 + 0.31565 0.955279 -3.33459 -0.915218 -0.0813393 0.394663 + 0.290597 1.16082 -3.41794 -0.921012 -0.134551 -0.365558 + 0.301268 1.051 -3.39826 -0.90197 -0.188114 -0.388668 + 0.315236 0.959704 -3.37762 -0.890033 -0.23234 -0.39225 + 0.328431 0.873081 -3.3548 -0.886415 -0.254119 -0.386901 + 0.325983 0.871432 -3.34088 -0.981615 -0.190785 -0.00569755 + 0.316602 1.05464 -3.42085 -0.638082 -0.236829 -0.732641 + 0.326013 0.962261 -3.3935 -0.63212 -0.281234 -0.722033 + 0.339208 0.875641 -3.37068 -0.62173 -0.300516 -0.723285 + 0.337573 1.05768 -3.43306 -0.308942 -0.251902 -0.917115 + 0.346984 0.965303 -3.4057 -0.295352 -0.300099 -0.907032 + 0.352342 0.877546 -3.37832 -0.298787 -0.310867 -0.902268 + 0.351308 0.793622 -3.34521 -0.585632 -0.423575 -0.6911 + 0.371502 1.06119 -3.43913 0.0309075 -0.247693 -0.968346 + 0.37083 0.967765 -3.40997 0.0277507 -0.296955 -0.954488 + 0.376188 0.880008 -3.38259 0.0347298 -0.304417 -0.951905 + 0.376782 0.796802 -3.35506 0.035141 -0.412539 -0.910262 + 0.364442 0.795528 -3.35285 -0.263673 -0.424739 -0.866068 + 0.39633 1.06279 -3.43432 0.387835 -0.228971 -0.892836 + 0.395658 0.969371 -3.40516 0.391539 -0.274302 -0.878326 + 0.391738 0.881014 -3.37958 0.38545 -0.279704 -0.879314 + 0.392332 0.79781 -3.35205 0.384028 -0.387575 -0.838039 + 0.382539 0.754393 -3.32904 0.181054 -0.791563 -0.58365 + 0.420724 1.06306 -3.41696 0.734404 -0.181368 -0.654031 + 0.412802 0.969561 -3.39296 0.723538 -0.225647 -0.652362 + 0.408883 0.881203 -3.36738 0.727975 -0.226399 -0.647144 + 0.401204 0.797906 -3.34574 0.695371 -0.345796 -0.629988 + 0.432571 1.06185 -3.3955 0.940653 -0.13046 -0.313293 + 0.424649 0.968343 -3.3715 0.941315 -0.152493 -0.301117 + 0.416303 0.880442 -3.35394 0.938142 -0.159108 -0.30753 + 0.408624 0.797144 -3.3323 0.912442 -0.283093 -0.295479 + 0.391411 0.754491 -3.32273 0.561809 -0.759451 -0.328031 + 0.439561 1.17028 -3.41382 0.930157 -0.0724923 -0.359933 + 0.436006 1.05872 -3.36246 0.995432 -0.0690331 0.0659534 + 0.427063 0.966141 -3.34828 0.994488 -0.0852665 0.0610133 + 0.418717 0.87824 -3.33072 0.993833 -0.0883535 0.0669986 + 0.409874 0.796004 -3.32028 0.971425 -0.23337 0.0432731 + 0.442996 1.16715 -3.38078 0.997977 -0.0625481 0.011358 + 0.430379 1.05593 -3.34019 0.892014 -0.0178645 0.451655 + 0.421436 0.963358 -3.32601 0.88581 -0.0133015 0.463858 + 0.415192 0.876496 -3.31677 0.889175 -0.0271198 0.456762 + 0.43749 1.16426 -3.34847 0.902508 -0.0270727 0.429822 + 0.413725 1.05252 -3.32091 0.627153 0.0315384 0.778257 + 0.409732 0.960962 -3.31246 0.627747 0.0405266 0.777361 + 0.403488 0.8741 -3.30322 0.625487 0.0261601 0.779796 + 0.406349 0.794262 -3.30633 0.87843 -0.178117 0.443436 + 0.391084 0.958309 -3.30211 0.327523 0.0676271 0.94242 + 0.391809 0.872439 -3.29673 0.334886 0.0463619 0.941117 + 0.400293 0.793021 -3.29932 0.642422 -0.139952 0.753464 + 0.392661 0.753352 -3.31071 0.647935 -0.74603 0.153683 + 0.372728 0.870455 -3.2932 -0.019793 0.0439646 0.998837 + 0.388614 0.791359 -3.29284 0.343248 -0.117086 0.931918 + 0.386604 0.752111 -3.3037 0.377316 -0.761029 0.5277 + 0.3702 0.753119 -3.32683 -0.235483 -0.821502 -0.519309 + 0.358254 0.869543 -3.29624 -0.36548 0.0180216 0.930645 + 0.378739 0.790332 -3.29101 0.00538248 -0.12188 0.99253 + 0.37673 0.751086 -3.30187 -0.0604947 -0.782837 0.61928 + 0.339181 0.869123 -3.3078 -0.681102 -0.036879 0.731259 + 0.354396 0.789204 -3.30003 -0.659567 -0.201385 0.724165 + 0.364265 0.78942 -3.29405 -0.36391 -0.150492 0.919196 + 0.36686 0.750868 -3.30785 -0.464317 -0.814603 0.347609 + 0.330306 0.869642 -3.32007 -0.910449 -0.11033 0.398635 + 0.34552 0.789724 -3.31231 -0.886416 -0.281632 0.367356 + 0.343283 0.79065 -3.32308 -0.938966 -0.343858 -0.010273 + 0.364623 0.751795 -3.31862 -0.525326 -0.836273 -0.157102 + 0.345731 0.792301 -3.33699 -0.829666 -0.399699 -0.389737 + -0.47438 1.60094 -3.34175 -0.998548 0.0478403 0.0247741 + -0.471733 1.65052 -3.32651 -0.998958 0.0267621 0.0369747 + -0.470021 1.70751 -3.30149 -0.930142 0.184117 0.317705 + -0.460963 1.61601 -3.28124 -0.840998 -0.0602027 0.537679 + -0.452301 1.62262 -3.27282 -0.285647 0.127585 0.949804 + -0.450724 1.40273 -3.44467 -0.822092 -0.154132 -0.548096 + -0.44411 1.36414 -3.44013 -0.822268 -0.162143 -0.545514 + -0.463289 1.38508 -3.40906 -0.967857 -0.173152 -0.182406 + -0.424454 1.38712 -3.47086 -0.63199 -0.11611 -0.766229 + -0.41784 1.34853 -3.46632 -0.637304 -0.152999 -0.755271 + -0.418147 1.27557 -3.45507 -0.67149 -0.107858 -0.733122 + -0.437236 1.28207 -3.43037 -0.836829 -0.094783 -0.539196 + -0.456415 1.303 -3.3993 -0.983046 -0.0984923 -0.154663 + -0.390251 1.37789 -3.49104 -0.320413 -0.102923 -0.94167 + -0.388491 1.34061 -3.48364 -0.325017 -0.165811 -0.931059 + -0.388798 1.26766 -3.47239 -0.335987 -0.132759 -0.932463 + -0.355104 1.34286 -3.48744 0.122498 -0.165151 -0.978631 + -0.357635 1.26799 -3.47682 0.0907829 -0.143128 -0.985532 + -0.396078 1.16351 -3.45588 -0.368948 -0.157235 -0.916054 + -0.420471 1.16378 -3.43851 -0.694889 -0.121614 -0.708759 + -0.439561 1.17028 -3.41382 -0.920821 -0.0992477 -0.377145 + -0.320655 1.28102 -3.46597 0.410875 -0.133275 -0.901898 + -0.330986 1.16034 -3.45424 0.334008 -0.177682 -0.925671 + -0.364915 1.16385 -3.46031 0.00839878 -0.178721 -0.983864 + -0.371502 1.06119 -3.43913 -0.0279949 -0.251818 -0.96737 + -0.39633 1.06279 -3.43432 -0.390612 -0.232627 -0.890678 + -0.305931 1.16446 -3.44053 0.663043 -0.157854 -0.731749 + -0.316602 1.05464 -3.42085 0.638639 -0.238218 -0.731705 + -0.337573 1.05768 -3.43306 0.307337 -0.253666 -0.917168 + -0.301268 1.051 -3.39826 0.900542 -0.191215 -0.390462 + -0.315236 0.959704 -3.37762 0.890032 -0.232343 -0.392249 + -0.326013 0.962261 -3.3935 0.632114 -0.281237 -0.722037 + -0.346984 0.965303 -3.4057 0.295358 -0.30009 -0.907034 + -0.297359 1.04837 -3.37604 0.992453 -0.122614 0.00156549 + -0.311327 0.95707 -3.3554 0.987401 -0.158204 0.00336517 + -0.325983 0.871432 -3.34088 0.981615 -0.190784 -0.00569855 + -0.328431 0.873081 -3.3548 0.886413 -0.254123 -0.386902 + -0.339208 0.875641 -3.37068 0.621727 -0.300518 -0.723287 + -0.31565 0.955279 -3.33459 0.91522 -0.0813439 0.394659 + -0.330306 0.869642 -3.32007 0.910452 -0.110335 0.398628 + -0.34552 0.789724 -3.31231 0.886415 -0.281638 0.367354 + -0.343283 0.79065 -3.32308 0.938965 -0.34386 -0.0102755 + -0.345731 0.792301 -3.33699 0.829667 -0.399694 -0.38974 + -0.329822 0.954448 -3.31498 0.676153 -0.0028278 0.736756 + -0.339181 0.869123 -3.3078 0.681096 -0.0368787 0.731265 + -0.354396 0.789204 -3.30003 0.659564 -0.201387 0.724167 + -0.36686 0.750868 -3.30785 0.464297 -0.814623 0.347587 + -0.364623 0.751795 -3.31862 0.525295 -0.836294 -0.15709 + -0.358254 0.869543 -3.29624 0.365474 0.0180213 0.930647 + -0.364265 0.78942 -3.29405 0.363908 -0.150485 0.919198 + -0.37673 0.751086 -3.30187 0.0604816 -0.782851 0.619263 + -0.3702 0.753119 -3.32683 0.23548 -0.821508 -0.519301 + -0.351308 0.793622 -3.34521 0.585636 -0.423567 -0.691101 + -0.372728 0.870455 -3.2932 0.0198033 0.0439575 0.998837 + -0.378739 0.790332 -3.29101 -0.00537795 -0.121875 0.992531 + -0.386604 0.752111 -3.3037 -0.377289 -0.761048 0.527693 + -0.391411 0.754491 -3.32273 -0.561795 -0.759461 -0.328034 + -0.372004 0.956326 -3.29858 0.0154422 0.0687606 0.997514 + -0.391809 0.872439 -3.29673 -0.334895 0.0463577 0.941115 + -0.388614 0.791359 -3.29284 -0.343249 -0.117084 0.931918 + -0.400293 0.793021 -3.29932 -0.642421 -0.139949 0.753465 + -0.392661 0.753352 -3.31071 -0.647973 -0.745994 0.153699 + -0.391084 0.958309 -3.30211 -0.327529 0.0676302 0.942418 + -0.403488 0.8741 -3.30322 -0.625483 0.0261647 0.779799 + -0.406349 0.794262 -3.30633 -0.87843 -0.178117 0.443436 + -0.409874 0.796004 -3.32028 -0.971425 -0.23337 0.0432729 + -0.413725 1.05252 -3.32091 -0.63141 0.0243428 0.775067 + -0.409732 0.960962 -3.31246 -0.627746 0.0405256 0.777363 + -0.415192 0.876496 -3.31677 -0.889174 -0.027121 0.456764 + -0.418717 0.87824 -3.33072 -0.993833 -0.0883571 0.066996 + -0.408624 0.797144 -3.3323 -0.912442 -0.283092 -0.29548 + -0.420837 1.16085 -3.32918 -0.675561 -0.0286615 0.736747 + -0.430379 1.05593 -3.34019 -0.890612 -0.0217687 0.454244 + -0.421436 0.963358 -3.32601 -0.885809 -0.0132984 0.46386 + -0.427063 0.966141 -3.34828 -0.994488 -0.0852656 0.0610127 + -0.416303 0.880442 -3.35394 -0.938142 -0.159109 -0.30753 + -0.43749 1.16426 -3.34847 -0.906926 -0.0422804 0.419162 + -0.436006 1.05872 -3.36246 -0.995242 -0.0756892 0.0613517 + -0.424649 0.968343 -3.3715 -0.941315 -0.152494 -0.301117 + -0.408883 0.881203 -3.36738 -0.727975 -0.226398 -0.647145 + -0.401204 0.797906 -3.34574 -0.695371 -0.345795 -0.629987 + -0.442996 1.16715 -3.38078 -0.996657 -0.0780272 0.0242265 + -0.432571 1.06185 -3.3955 -0.9415 -0.136262 -0.308238 + -0.420724 1.06306 -3.41696 -0.728733 -0.19097 -0.657631 + -0.412802 0.969561 -3.39296 -0.723536 -0.22565 -0.652363 + -0.395658 0.969371 -3.40516 -0.391539 -0.274303 -0.878325 + -0.391738 0.881014 -3.37958 -0.385449 -0.279706 -0.879314 + -0.392332 0.79781 -3.35205 -0.384025 -0.387571 -0.838041 + -0.382539 0.754393 -3.32904 -0.181055 -0.791577 -0.583631 + -0.37083 0.967765 -3.40997 -0.0277503 -0.296946 -0.954491 + -0.376188 0.880008 -3.38259 -0.0347356 -0.304427 -0.951902 + -0.376782 0.796802 -3.35506 -0.0351403 -0.412532 -0.910265 + -0.364442 0.795528 -3.35285 0.263674 -0.424733 -0.86607 + -0.352342 0.877546 -3.37832 0.298794 -0.310871 -0.902265 + 1.05998 1.28532 -1.98015 -0.500479 0.759671 0.415235 + 1.06342 1.2998 -2.01482 -0.517699 0.831014 0.203478 + 1.03233 1.27353 -2.02089 -0.633506 0.767002 0.101876 + 1.0713 1.23734 -1.91791 -0.0643823 0.603396 0.794839 + 1.08209 1.28719 -1.9671 -0.214468 0.799704 0.560782 + 1.09271 1.31195 -2.01471 -0.13582 0.96152 0.238813 + 1.06884 1.30877 -2.05737 -0.537622 0.838544 0.088352 + 1.0919 1.23816 -1.92563 0.420318 0.490951 0.763086 + 1.09677 1.28702 -1.96546 0.298827 0.738398 0.604542 + 1.10739 1.31177 -2.01308 0.352868 0.901107 0.251974 + 1.12879 1.30312 -2.07197 0.626266 0.763814 0.156139 + 1.09813 1.32091 -2.05726 0.111312 0.977553 0.178884 + 1.12 1.21675 -1.93469 0.599104 0.437506 0.670569 + 1.12487 1.26561 -1.97452 0.690203 0.521998 0.501135 + 1.13795 1.28203 -2.02425 0.75444 0.588814 0.290031 + 1.1713 1.20323 -1.99566 0.833927 0.388517 0.391945 + 1.18439 1.21965 -2.04539 0.870532 0.398339 0.288964 + 1.18982 1.23474 -2.09363 0.871282 0.439525 0.218367 + 1.15935 1.27338 -2.08314 0.762269 0.6116 0.211874 + 1.19506 1.154 -2.01062 0.920235 0.20978 0.330394 + 1.2081 1.16085 -2.06177 0.955203 0.204545 0.21389 + 1.21353 1.17594 -2.11001 0.970073 0.197506 0.141242 + 1.21609 1.18911 -2.15515 0.976443 0.180113 0.118824 + 1.19843 1.24064 -2.13741 0.885469 0.425197 0.187491 + 1.20655 1.08999 -2.02667 0.937487 -0.0336583 0.346388 + 1.21959 1.09684 -2.07782 0.988019 0.0576245 0.14317 + 1.22 1.10578 -2.12788 0.996792 0.0579571 0.0552058 + 1.22256 1.11894 -2.17302 0.998966 0.0334086 0.0308387 + 1.18376 1.04641 -1.99763 0.722806 -0.372566 0.582019 + 1.20943 1.0394 -2.05198 0.908588 -0.233349 0.346433 + 1.22159 1.03917 -2.09959 0.983991 -0.117904 0.133641 + 1.222 1.04811 -2.14965 0.999124 -0.0418097 0.00180435 + 1.18223 0.997715 -2.03899 0.729089 -0.380592 0.56884 + 1.20455 0.99636 -2.08217 0.900865 -0.276688 0.334495 + 1.21671 0.996135 -2.12977 0.977165 -0.187159 0.100602 + 1.14002 0.999492 -2.00372 0.425208 -0.488246 0.762112 + 1.14063 0.93424 -2.03183 0.470183 -0.250193 0.846364 + 1.17278 0.933552 -2.05711 0.754682 -0.220611 0.617889 + 1.19509 0.932198 -2.10029 0.923103 -0.217563 0.317091 + 1.08136 0.999866 -1.98372 0.0634823 -0.564175 0.823211 + 1.08197 0.934614 -2.01182 0.0409518 -0.313055 0.948852 + 1.09487 0.851658 -2.03071 0.0281718 -0.123912 0.991893 + 1.12967 0.851577 -2.03907 0.426521 -0.090523 0.899936 + 1.16182 0.850889 -2.06436 0.784998 -0.118003 0.608156 + 1.03277 1.04274 -1.95099 -0.33406 -0.624074 0.706354 + 1.03478 0.996049 -1.99593 -0.512928 -0.514025 0.687519 + 1.04575 0.934113 -2.02012 -0.533249 -0.314454 0.785344 + 0.99361 1.0303 -2.00338 -0.592228 -0.645924 0.481715 + 1.0085 0.994477 -2.03599 -0.718557 -0.48874 0.494781 + 1.01947 0.932542 -2.06017 -0.809346 -0.243989 0.534254 + 1.03355 0.850267 -2.06046 -0.757823 -0.144672 0.636219 + 1.05866 0.851156 -2.039 -0.441995 -0.170734 0.880619 + 0.965412 1.07295 -1.98369 -0.613215 -0.625939 0.481837 + 0.933796 1.08842 -2.01277 -0.716398 -0.644078 0.268213 + 0.941223 1.0742 -2.03529 -0.766172 -0.600485 0.228906 + 0.963119 1.03383 -2.04639 -0.737233 -0.550657 0.391489 + 0.881459 1.1607 -1.98568 -0.818843 -0.322511 0.47485 + 0.878107 1.14727 -2.04762 -0.86756 -0.488698 0.0922717 + 0.885534 1.13305 -2.07014 -0.824237 -0.565784 0.0228514 + 0.911168 1.10379 -2.07578 -0.810394 -0.580309 0.0806388 + 0.933064 1.06342 -2.08687 -0.864379 -0.449233 0.225916 + 0.866728 1.19559 -2.00045 -0.965484 -0.0195621 0.259728 + 0.863375 1.18217 -2.06239 -0.991553 -0.127445 0.0240845 + 0.860076 1.20167 -2.10609 -0.973416 0.0488518 0.223772 + 0.855496 1.19582 -2.12385 -0.981997 -0.165933 0.090262 + 0.869982 1.15731 -2.1148 -0.873213 -0.484643 -0.051195 + 0.874871 1.22801 -2.07185 -0.94291 0.313074 0.113599 + 0.871571 1.24751 -2.11555 -0.81898 0.455663 0.348774 + 0.85353 1.2736 -2.17525 -0.857345 0.418926 0.299099 + 0.84895 1.26775 -2.19301 -0.98093 0.134181 -0.140613 + 0.88557 1.27604 -2.1347 -0.380004 0.772985 0.508026 + 0.867528 1.30213 -2.1944 -0.653736 0.737199 0.170783 + 0.877653 1.31105 -2.22518 -0.54257 0.787879 -0.291314 + 0.862907 1.29195 -2.22695 -0.826247 0.292857 -0.481197 + 0.853252 1.22412 -2.18659 -0.924319 -0.253923 -0.284881 + 0.893679 1.25709 -2.07569 0.0220694 0.998675 0.0464986 + 0.898511 1.25175 -2.09719 0.449089 0.871824 0.195555 + 0.91314 1.26874 -2.12118 0.021591 0.790447 0.61215 + 0.91607 1.31578 -2.18266 -0.17146 0.904902 0.389556 + 0.926195 1.32469 -2.21344 -0.121501 0.992012 0.0339035 + 0.917472 1.25296 -2.06952 0.14029 0.958992 -0.246279 + 0.922304 1.24762 -2.09102 0.146563 0.989199 0.00198903 + 0.926001 1.24885 -2.0985 0.0781883 0.90069 0.42737 + 0.940629 1.26583 -2.12249 0.121554 0.768717 0.627933 + 0.94364 1.30847 -2.16914 0.135608 0.817423 0.559849 + 0.932343 1.24639 -2.08904 0.0239433 0.997775 -0.0622208 + 0.93604 1.24762 -2.09652 0.012227 0.936827 0.349578 + 0.938666 1.24684 -2.08927 -0.0369945 0.996177 -0.0791387 + 0.950931 1.24801 -2.0982 0.0329205 0.94512 0.325061 + 0.952937 1.25444 -2.11069 0.144166 0.841326 0.520947 + 0.975395 1.27283 -2.13765 0.00538565 0.796846 0.604158 + 0.963088 1.28421 -2.14945 0.158221 0.74151 0.65202 + 0.953558 1.24724 -2.09095 -0.0209443 0.998688 -0.0467285 + 0.978095 1.2481 -2.099 -0.0331501 0.962586 0.268941 + 0.980101 1.25453 -2.11149 -0.0531189 0.850111 0.523917 + 0.979279 1.24761 -2.09173 -0.0563735 0.996304 -0.0648139 + 0.994803 1.24965 -2.09998 -0.224654 0.906298 0.357987 + 0.991501 1.26042 -2.1175 -0.270358 0.780272 0.563988 + 0.986795 1.27872 -2.14366 -0.254009 0.772631 0.581825 + 0.98358 1.289 -2.15871 -0.126906 0.760235 0.637133 + 0.995988 1.24916 -2.09271 -0.0851331 0.996341 -0.0075334 + 1.00349 1.2501 -2.09354 -0.434017 0.87176 0.227296 + 1.00125 1.25445 -2.10147 -0.511975 0.684279 0.519272 + 0.997946 1.26522 -2.11898 -0.516598 0.662751 0.542114 + 0.992867 1.28516 -2.14769 -0.517531 0.654433 0.551252 + 1.00656 1.2514 -2.06805 -0.397021 0.917475 -0.0247556 + 1.02759 1.27069 -2.09037 -0.659037 0.69473 0.288132 + 1.02535 1.27504 -2.0983 -0.603356 0.608743 0.515163 + 1.01366 1.28604 -2.12274 -0.622116 0.563451 0.543594 + 1.02814 1.26851 -2.06481 -0.663078 0.74807 0.0268115 + 1.06829 1.31095 -2.08292 -0.552074 0.827128 0.105229 + 1.0671 1.31137 -2.09074 -0.55557 0.745859 0.367472 + 1.02682 1.28381 -2.10704 -0.585811 0.600035 0.544778 + 1.09933 1.3241 -2.08277 0.103469 0.990292 0.092818 + 1.09813 1.32451 -2.09058 0.0774698 0.989796 0.119592 + 1.06857 1.32014 -2.09948 -0.357598 0.793443 0.492516 + 1.0547 1.32472 -2.11767 -0.399745 0.758346 0.514892 + 1.04153 1.32695 -2.13338 -0.438641 0.683399 0.583575 + 1.12999 1.30631 -2.09748 0.402923 0.905217 0.135041 + 1.10025 1.32588 -2.1048 0.21047 0.959276 0.188393 + 1.08638 1.33047 -2.12299 0.081562 0.927425 0.365007 + 1.07524 1.34267 -2.14156 0.0262889 0.851369 0.523909 + 1.13211 1.30768 -2.11169 0.598068 0.748019 0.287719 + 1.13483 1.32016 -2.13533 0.542154 0.780571 0.31109 + 1.12368 1.33237 -2.1539 0.493946 0.820482 0.287796 + 1.10077 1.35398 -2.1694 0.27772 0.95455 0.108191 + 1.06475 1.35282 -2.1585 -0.171872 0.961852 0.21284 + 1.16797 1.27928 -2.12693 0.761453 0.586076 0.276956 + 1.17068 1.29177 -2.15056 0.77724 0.586511 0.227824 + 1.1614 1.30587 -2.17791 0.729902 0.683551 -0.000959145 + 1.20333 1.24534 -2.18178 0.904887 0.423654 0.0411874 + 1.19404 1.25944 -2.20913 0.843087 0.504866 -0.185241 + 1.17222 1.27705 -2.23502 0.701489 0.584242 -0.408135 + 1.13848 1.32748 -2.19342 0.605265 0.780558 -0.156151 + 1.22099 1.1938 -2.19952 0.984256 0.171117 -0.0442632 + 1.21118 1.20584 -2.23352 0.897353 0.248278 -0.364851 + 1.18935 1.22346 -2.2594 0.716623 0.315702 -0.62192 + 1.16151 1.23532 -2.27643 0.445482 0.349786 -0.824133 + 1.15208 1.28048 -2.25538 0.457027 0.584309 -0.670604 + 1.22206 1.14287 -2.21088 0.992774 0.0491199 -0.10949 + 1.21225 1.15491 -2.24488 0.892032 0.106052 -0.439353 + 1.19043 1.15683 -2.27277 0.686954 0.15626 -0.709702 + 1.16259 1.1687 -2.28979 0.479238 0.194392 -0.855887 + 1.22178 1.05825 -2.19106 0.998525 -0.0463214 -0.0283155 + 1.22129 1.08217 -2.22892 0.985702 0.00100377 -0.168497 + 1.21091 1.09261 -2.25966 0.883572 0.077633 -0.461816 + 1.18908 1.09453 -2.28755 0.709144 0.147439 -0.689475 + 1.21672 1.00479 -2.21402 0.981893 -0.179261 -0.0612473 + 1.21572 1.01392 -2.24892 0.972811 -0.11192 -0.202762 + 1.20533 1.02435 -2.27965 0.874005 -0.00766102 -0.485856 + 1.21694 0.994661 -2.17261 0.987063 -0.159318 -0.0180065 + 1.20229 0.929581 -2.1775 0.897026 -0.340019 -0.282367 + 1.18536 0.92208 -2.19428 0.684215 -0.566058 -0.459814 + 1.18263 0.925247 -2.21716 0.800222 -0.577455 0.161837 + 1.19733 0.936526 -2.23764 0.914921 -0.381313 0.132361 + 1.20206 0.931056 -2.13466 0.96795 -0.229049 0.102999 + 1.18161 0.848802 -2.12835 0.9718 -0.232379 -0.0400575 + 1.17411 0.848005 -2.15023 0.831795 -0.331734 -0.445049 + 1.15718 0.840503 -2.16701 0.636737 -0.24471 -0.731221 + 1.17464 0.849946 -2.09397 0.941004 -0.149959 0.303355 + 1.16603 0.768546 -2.09129 0.964699 -0.0548629 0.257579 + 1.16863 0.769838 -2.11595 0.988116 -0.109205 -0.108175 + 1.16113 0.769041 -2.13784 0.881889 -0.134174 -0.451961 + 1.15321 0.769489 -2.06168 0.791262 -0.0205788 0.611131 + 1.15215 0.686861 -2.05711 0.785551 -0.0148813 0.618618 + 1.16406 0.690491 -2.08423 0.964006 -0.00472616 0.265839 + 1.16666 0.691784 -2.10889 0.99467 -0.00626989 -0.102915 + 1.13029 0.768856 -2.04348 0.441823 -0.000572975 0.897102 + 1.12924 0.686226 -2.03891 0.428056 -0.0320119 0.903185 + 1.13621 0.587613 -2.05397 0.432606 -0.165015 0.886353 + 1.15403 0.589054 -2.06807 0.78537 -0.0896097 0.612506 + 1.16595 0.592685 -2.09518 0.965714 -0.0177749 0.258999 + 1.0955 0.768938 -2.03512 0.0102689 -0.00240859 0.999944 + 1.09711 0.686301 -2.0312 0.0065365 -0.0522498 0.998613 + 1.10408 0.587688 -2.04625 -0.0021076 -0.225797 0.974172 + 1.06671 0.769714 -2.04136 -0.441448 -0.018945 0.897087 + 1.06833 0.687077 -2.03744 -0.448153 -0.0774159 0.890598 + 1.08172 0.589274 -2.05105 -0.44449 -0.257877 0.857862 + 1.12386 0.47308 -2.08207 0.00682784 -0.426215 0.904596 + 1.0416 0.768826 -2.06282 -0.764613 -0.039805 0.64326 + 1.04521 0.690924 -2.05702 -0.760811 -0.0866785 0.643159 + 1.05861 0.59312 -2.07063 -0.757637 -0.257227 0.59985 + 1.08718 0.477048 -2.099 -0.716519 -0.446145 0.536242 + 1.1015 0.474666 -2.08687 -0.434988 -0.45779 0.775379 + 1.02846 0.770206 -2.08467 -0.944289 -0.0839063 0.318242 + 1.03207 0.692305 -2.07887 -0.945825 -0.103693 0.307675 + 1.04842 0.596061 -2.08753 -0.931336 -0.235435 0.277819 + 1.077 0.479988 -2.11589 -0.885545 -0.409333 0.219671 + 1.11186 0.421268 -2.1308 -0.520964 -0.842644 0.136188 + 1.01351 0.849065 -2.09167 -0.934 -0.155291 0.32176 + 1.02616 0.76936 -2.10888 -0.992172 -0.121291 -0.0297297 + 1.03002 0.695723 -2.10101 -0.99381 -0.106443 -0.0317969 + 1.04637 0.599478 -2.10967 -0.978798 -0.197055 -0.0558987 + 1.07573 0.482105 -2.12961 -0.929249 -0.360717 -0.0798702 + 0.999435 0.931338 -2.09138 -0.808717 -0.275684 0.519591 + 1.01121 0.848216 -2.11588 -0.963468 -0.266946 0.0216602 + 1.02911 0.770366 -2.12836 -0.940629 -0.146486 -0.306199 + 1.03297 0.696732 -2.12049 -0.945599 -0.11165 -0.305575 + 1.04869 0.601661 -2.12474 -0.934774 -0.158737 -0.317805 + 0.978011 0.997999 -2.079 -0.709799 -0.511257 0.484564 + 0.972961 0.929833 -2.1305 -0.920958 -0.348939 0.173427 + 0.979065 0.922293 -2.15239 -0.848147 -0.495076 -0.188536 + 1.01732 0.840676 -2.13777 -0.901475 -0.317098 -0.294604 + 0.951538 0.996494 -2.11812 -0.860916 -0.408472 0.303272 + 0.978927 0.926189 -2.17924 -0.747799 -0.64023 0.175791 + 1.02388 0.894998 -2.16015 -0.401774 -0.577137 -0.710979 + 1.02568 0.840159 -2.15425 -0.599736 -0.22659 -0.767446 + 1.03748 0.769849 -2.14484 -0.695031 -0.167143 -0.699282 + 0.917717 1.07644 -2.13672 -0.924901 -0.373323 0.0720254 + 0.936191 1.00951 -2.16796 -0.938098 -0.339544 0.0684168 + 0.963497 0.938828 -2.19881 -0.879676 -0.463391 0.106956 + 0.895616 1.12806 -2.12044 -0.850682 -0.522942 -0.0535753 + 0.914917 1.08625 -2.20238 -0.939312 -0.26993 -0.211734 + 0.934132 1.02369 -2.22206 -0.948817 -0.241037 -0.204075 + 0.961437 0.953005 -2.25291 -0.931587 -0.308391 -0.192461 + 0.867738 1.18561 -2.17754 -0.865158 -0.410179 -0.288539 + 0.892817 1.13787 -2.1861 -0.898418 -0.36582 -0.242943 + 0.912048 1.16244 -2.2362 -0.741425 -0.199704 -0.640631 + 0.931123 1.09699 -2.24512 -0.793727 -0.121234 -0.59607 + 0.886969 1.21019 -2.22764 -0.697033 -0.253338 -0.670794 + 0.931082 1.25449 -2.2667 -0.496383 -0.0603342 -0.866004 + 0.949901 1.17835 -2.26912 -0.549463 -0.0739628 -0.832238 + 0.968976 1.1129 -2.27805 -0.502827 -0.04349 -0.863292 + 0.867208 1.24832 -2.22053 -0.739263 -0.192247 -0.645393 + 0.911322 1.29262 -2.25959 -0.458741 0.154976 -0.874951 + 0.95385 1.31284 -2.26747 -0.175347 0.690413 -0.701843 + 0.96008 1.28314 -2.28307 -0.261777 0.222177 -0.939207 + 0.978899 1.20701 -2.2855 -0.239876 0.0117626 -0.970732 + 0.926069 1.31171 -2.25781 -0.30531 0.70978 -0.634821 + 0.953976 1.32582 -2.2231 0.0342874 0.996947 -0.0701552 + 0.988777 1.31557 -2.2638 0.260973 0.793595 -0.549637 + 0.995008 1.28587 -2.2794 0.155317 0.385048 -0.909733 + 0.960743 1.32387 -2.20375 0.234705 0.934046 0.269205 + 0.995544 1.31361 -2.24446 0.0722315 0.958511 0.275753 + 1.01332 1.3184 -2.2382 -0.41811 0.862893 -0.283899 + 1.03281 1.27082 -2.2821 0.0358828 0.357108 -0.933374 + 0.980918 1.30501 -2.19008 0.402933 0.839999 0.363383 + 1.00405 1.30768 -2.23924 -0.281354 0.823435 0.492743 + 0.963815 1.28962 -2.15547 0.192433 0.761993 0.618333 + 0.984307 1.29441 -2.16473 -0.11699 0.889984 0.440729 + 0.989425 1.29907 -2.18486 0.103819 0.970214 0.218876 + 0.994769 1.30012 -2.18287 -0.530824 0.846309 0.0445665 + 1.00404 1.31084 -2.18183 -0.762132 0.645132 0.0543976 + 0.989652 1.29545 -2.16274 -0.485407 0.791507 0.371345 + 1.00858 1.30598 -2.15145 -0.702517 0.597802 0.386137 + 1.03105 1.3371 -2.15031 -0.520343 0.761098 0.387264 + 1.02651 1.34196 -2.1807 -0.463705 0.885612 0.0258765 + 1.05061 1.34378 -2.1937 -0.156115 0.946896 -0.281098 + 1.03742 1.32022 -2.25119 -0.0504328 0.766035 -0.640818 + 1.08663 1.34494 -2.2046 0.0211869 0.883564 -0.46783 + 1.07665 1.30058 -2.25546 0.135038 0.654696 -0.743732 + 1.07203 1.25118 -2.28636 0.0414754 0.317842 -0.947236 + 1.0167 1.19196 -2.28819 -0.0603842 0.114855 -0.991545 + 1.11835 1.3309 -2.21378 0.341041 0.797469 -0.497729 + 1.10837 1.28654 -2.26464 0.105259 0.564383 -0.818775 + 1.1178 1.24139 -2.28569 0.144738 0.343141 -0.928065 + 1.09284 1.20037 -2.29555 -0.0275252 0.162899 -0.986259 + 1.13861 1.19058 -2.29487 0.21427 0.212422 -0.953396 + 1.14382 1.12486 -2.30849 0.180341 0.202571 -0.962519 + 1.09754 1.1286 -2.30501 -0.0863768 0.163649 -0.98273 + 1.0214 1.12019 -2.29765 -0.234945 0.0613805 -0.970069 + 1.1678 1.10298 -2.30341 0.513874 0.193492 -0.83576 + 1.16584 1.03957 -2.31782 0.508209 0.128806 -0.851547 + 1.14473 1.04282 -2.32601 0.171387 0.175421 -0.969461 + 1.09845 1.04656 -2.32253 -0.16029 0.156543 -0.974578 + 1.18713 1.03112 -2.30196 0.706941 0.0671098 -0.704082 + 1.17165 0.958611 -2.31734 0.715925 -0.0592651 -0.695658 + 1.15719 0.962818 -2.33057 0.533968 0.0190873 -0.845289 + 1.13607 0.966066 -2.33875 0.147679 0.105123 -0.983433 + 1.18985 0.951844 -2.29503 0.857141 -0.159269 -0.48984 + 1.1573 0.873995 -2.31263 0.89054 -0.175441 -0.419713 + 1.14982 0.878091 -2.32685 0.775457 -0.0886108 -0.625152 + 1.13536 0.882297 -2.34008 0.628111 -0.00830906 -0.778079 + 1.19632 0.945651 -2.27253 0.939227 -0.262051 -0.22177 + 1.16377 0.867801 -2.29013 0.945305 -0.270189 -0.182747 + 1.14423 0.789423 -2.31181 0.985597 -0.125514 -0.113334 + 1.1409 0.791504 -2.32781 0.936473 -0.0553848 -0.34634 + 1.13343 0.795599 -2.34203 0.828379 0.00282698 -0.560161 + 1.16295 0.863015 -2.27155 0.914036 -0.377747 0.147802 + 1.14342 0.784636 -2.29323 0.965048 -0.194038 0.176158 + 1.13797 0.70623 -2.31128 0.981378 -0.0362149 0.188641 + 1.13845 0.705678 -2.32895 0.995329 -0.00336656 -0.0964816 + 1.13513 0.707759 -2.34495 0.936861 0.0132466 -0.349451 + 1.14825 0.851736 -2.25108 0.793352 -0.418347 0.442242 + 1.13618 0.782888 -2.27523 0.851006 -0.250532 0.461543 + 1.13074 0.704483 -2.29328 0.871564 -0.0617221 0.486381 + 1.1363 0.615698 -2.29634 0.876214 0.10804 0.469655 + 1.14159 0.612412 -2.30958 0.978392 0.100237 0.180833 + 1.13375 0.847744 -2.23277 0.535838 -0.43715 0.722341 + 1.12168 0.778896 -2.25693 0.567932 -0.297964 0.767248 + 1.11761 0.705719 -2.27586 0.585761 -0.117022 0.801991 + 1.12317 0.616935 -2.27891 0.585473 0.0943926 0.805178 + 1.13814 0.898036 -2.20703 0.438425 -0.799892 0.409824 + 1.10266 0.89077 -2.19775 0.171176 -0.891553 0.419323 + 1.09827 0.840477 -2.22349 0.139698 -0.415647 0.898733 + 1.09638 0.779218 -2.24812 0.147142 -0.315785 0.937352 + 1.14087 0.89487 -2.18415 0.181535 -0.651745 -0.736392 + 1.10379 0.887968 -2.17995 -0.056183 -0.669864 -0.740355 + 1.05801 0.890812 -2.18881 -0.0683178 -0.921668 0.381917 + 1.06003 0.842575 -2.22376 -0.0370483 -0.466899 0.883534 + 1.05814 0.781314 -2.24839 -0.118949 -0.308103 0.943888 + 1.14119 0.839975 -2.17954 0.290378 -0.135224 -0.947309 + 1.10412 0.833077 -2.17534 -0.147752 -0.117206 -0.982055 + 1.05913 0.888012 -2.17101 -0.257002 -0.666987 -0.699342 + 1.02374 0.898894 -2.187 -0.312877 -0.853588 0.416529 + 1.14987 0.770103 -2.1543 0.720032 -0.147736 -0.678033 + 1.13389 0.769575 -2.16683 0.322624 -0.153736 -0.933959 + 1.10545 0.770067 -2.16789 -0.096934 -0.1288 -0.986922 + 1.06094 0.833172 -2.1651 -0.271326 -0.115415 -0.955543 + 1.14854 0.696128 -2.14536 0.728905 -0.0266264 -0.684096 + 1.13383 0.698417 -2.15678 0.339681 -0.0545352 -0.938958 + 1.10539 0.69891 -2.15785 -0.103199 -0.0689841 -0.992266 + 1.06227 0.770162 -2.15765 -0.332669 -0.141325 -0.932394 + 1.1598 0.695065 -2.1289 0.895542 -0.0176321 -0.444628 + 1.16114 0.598766 -2.13427 0.896834 0.0679929 -0.437111 + 1.1524 0.601022 -2.147 0.735166 0.0813882 -0.672984 + 1.13769 0.60331 -2.15842 0.343561 0.0724325 -0.936333 + 1.16799 0.595484 -2.11426 0.994751 0.0322279 -0.0971157 + 1.17101 0.479522 -2.13682 0.984385 -0.113959 -0.134164 + 1.16676 0.481555 -2.14921 0.888762 -0.0654523 -0.453672 + 1.15803 0.483812 -2.16194 0.720971 -0.0421243 -0.691684 + 1.16896 0.476723 -2.11774 0.954935 -0.182944 0.23373 + 1.15345 0.42109 -2.14024 0.643304 -0.760109 -0.0916182 + 1.1492 0.423124 -2.15263 0.513027 -0.709054 -0.483783 + 1.14009 0.424542 -2.15971 0.129355 -0.650965 -0.748006 + 1.14892 0.485228 -2.16902 0.351338 -0.0311114 -0.935731 + 1.16158 0.474473 -2.10095 0.783568 -0.266171 0.561404 + 1.14607 0.418842 -2.12345 0.415155 -0.834931 0.361299 + 1.12617 0.418888 -2.11867 -0.143097 -0.873927 0.464516 + 1.14375 0.473033 -2.08685 0.413466 -0.365003 0.834158 + 1.02577 0.850658 -2.22195 -0.383354 -0.55021 0.741828 + 1.03522 0.783103 -2.25302 -0.470771 -0.306281 0.827385 + 1.05701 0.707977 -2.2673 -0.116851 -0.16208 0.979835 + 1.01641 0.853552 -2.23117 -0.754539 -0.485275 0.44179 + 1.02586 0.785997 -2.26224 -0.820055 -0.239906 0.519572 + 1.03409 0.709764 -2.27193 -0.494739 -0.174611 0.851319 + 1.00098 0.866192 -2.25074 -0.871518 -0.440288 0.215877 + 1.01861 0.788239 -2.27782 -0.938213 -0.176467 0.297683 + 1.02532 0.709987 -2.2807 -0.823235 -0.152377 0.546869 + 1.04215 0.62187 -2.28487 -0.789832 -0.192263 0.582409 + 1.05092 0.621647 -2.2761 -0.479042 -0.111171 0.870724 + 0.995492 0.872387 -2.27345 -0.951575 -0.292723 -0.0939096 + 1.01313 0.794434 -2.30052 -0.986528 -0.13705 0.0893289 + 1.01268 0.711888 -2.31788 -0.987929 -0.106946 0.11207 + 1.01807 0.712229 -2.29628 -0.940514 -0.124627 0.316073 + 1.03636 0.619611 -2.29634 -0.907596 -0.225532 0.354126 + 0.968884 0.959752 -2.28037 -0.780075 -0.105775 -0.61668 + 1.00294 0.879134 -2.30091 -0.925343 -0.168031 -0.339861 + 1.013 0.796612 -2.3188 -0.980697 -0.0319422 -0.192904 + 0.950337 1.03443 -2.26481 -0.743805 -0.0289728 -0.667769 + 1.00071 0.962823 -2.29867 -0.456441 0.10721 -0.883271 + 1.00844 0.882676 -2.31566 -0.698545 0.0236632 -0.715174 + 1.0185 0.800157 -2.33354 -0.750151 0.0916483 -0.654885 + 0.982165 1.0375 -2.28311 -0.452766 0.0518603 -0.89012 + 1.03711 0.965133 -2.31498 -0.349584 0.138326 -0.926637 + 1.04484 0.884987 -2.33197 -0.337747 0.168016 -0.92612 + 1.0424 0.800438 -2.34678 -0.371493 0.168365 -0.913042 + 1.01742 0.713383 -2.35019 -0.762061 -0.0197523 -0.647204 + 1.03459 1.04479 -2.30271 -0.326657 0.0684687 -0.94266 + 1.10097 0.9669 -2.3348 -0.197787 0.142765 -0.969793 + 1.08924 0.885849 -2.34433 -0.192659 0.160198 -0.968101 + 1.0868 0.801298 -2.35914 -0.167292 0.177914 -0.969722 + 1.12434 0.885013 -2.34828 0.264996 0.092495 -0.959803 + 1.11343 0.800102 -2.36117 0.279094 0.135057 -0.950719 + 1.08213 0.711068 -2.3752 -0.179845 0.0387804 -0.98293 + 1.04131 0.713664 -2.36342 -0.382405 0.0322836 -0.923431 + 1.12445 0.797383 -2.35297 0.695644 0.0563259 -0.716175 + 1.11905 0.709535 -2.36943 0.687185 0.0367277 -0.725553 + 1.10876 0.709872 -2.37723 0.264532 0.041797 -0.963471 + 1.11486 0.60827 -2.36842 0.258883 -0.159847 -0.95259 + 1.09444 0.609757 -2.36693 -0.185086 -0.210049 -0.960012 + 1.12802 0.707751 -2.35849 0.829758 0.0260422 -0.557515 + 1.13219 0.609351 -2.35256 0.821458 -0.024545 -0.56974 + 1.12515 0.607935 -2.36061 0.677186 -0.0720334 -0.732277 + 1.1393 0.60936 -2.33903 0.932486 0.020612 -0.360618 + 1.15191 0.500329 -2.31369 0.929786 -0.122929 -0.346967 + 1.14743 0.496383 -2.32059 0.815537 -0.217254 -0.536376 + 1.14039 0.494966 -2.32864 0.669375 -0.25898 -0.696323 + 1.14208 0.61186 -2.32725 0.991352 0.0600068 -0.116704 + 1.15469 0.502829 -2.30192 0.993291 -0.0827761 -0.0807485 + 1.14351 0.450377 -2.29177 0.659772 -0.727186 0.189476 + 1.13903 0.446433 -2.29866 0.516083 -0.853316 -0.0742224 + 1.15469 0.508324 -2.29292 0.982488 0.00623827 0.186223 + 1.14352 0.455873 -2.28276 0.614539 -0.584816 0.529463 + 1.13594 0.461731 -2.2739 0.284404 -0.474977 0.832773 + 1.13274 0.444378 -2.30264 0.110688 -0.94111 -0.319467 + 1.13409 0.49291 -2.33262 0.268242 -0.385113 -0.883025 + 1.1494 0.511608 -2.27968 0.856033 0.0202964 0.516522 + 1.14182 0.517466 -2.27081 0.587188 0.053829 0.807659 + 1.12253 0.520015 -2.26434 0.155237 -0.00723777 0.987851 + 1.11479 0.462892 -2.27405 -0.179241 -0.531526 0.82786 + 1.10388 0.619483 -2.27244 0.160199 0.0342834 0.986489 + 1.10138 0.521175 -2.26449 -0.096181 -0.0634202 0.993341 + 1.08372 0.521401 -2.2679 -0.386055 -0.157544 0.908923 + 1.07832 0.518992 -2.27237 -0.694707 -0.302119 0.652768 + 1.10939 0.460482 -2.27852 -0.423215 -0.645372 0.635911 + 1.09232 0.706041 -2.26706 0.148063 -0.150144 0.977514 + 1.06858 0.62142 -2.27269 -0.104782 -0.0165703 0.994357 + 1.07254 0.516733 -2.28383 -0.815608 -0.336935 0.470382 + 1.06895 0.510228 -2.29484 -0.867531 -0.398146 0.298111 + 1.10581 0.453976 -2.28953 -0.541841 -0.740233 0.398074 + 1.03097 0.61927 -2.31794 -0.958479 -0.239242 0.155182 + 1.03061 0.616257 -2.33139 -0.95443 -0.272163 -0.122433 + 1.0686 0.507215 -2.30829 -0.904745 -0.425569 0.0181301 + 1.07128 0.502696 -2.31543 -0.753701 -0.5066 -0.418677 + 1.10849 0.449455 -2.29667 -0.435324 -0.89232 -0.119407 + 1.01255 0.714067 -2.33616 -0.981893 -0.065473 -0.177761 + 1.03548 0.615573 -2.34542 -0.7422 -0.269034 -0.613807 + 1.05363 0.612355 -2.35515 -0.393364 -0.240066 -0.887487 + 1.08943 0.499476 -2.32516 -0.389011 -0.453864 -0.801672 + 1.11368 0.494398 -2.33113 -0.203735 -0.437988 -0.87559 + 1.04073 0.698706 -2.13558 -0.713148 -0.104059 -0.693247 + 1.05645 0.603637 -2.13983 -0.704541 -0.0801143 -0.705127 + 1.06553 0.699021 -2.1484 -0.349855 -0.0813898 -0.933261 + 1.07573 0.604393 -2.14977 -0.35183 0.0035847 -0.936057 + 1.08285 0.485512 -2.15402 -0.681325 -0.204194 -0.702923 + 1.07804 0.484288 -2.14468 -0.889979 -0.307988 -0.336274 + 1.1156 0.604282 -2.15922 -0.0967296 0.0416103 -0.99444 + 1.12682 0.4862 -2.16981 -0.102032 -0.050279 -0.99351 + 1.10213 0.486269 -2.16396 -0.339421 -0.0902369 -0.936296 + 1.1154 0.424609 -2.15386 -0.371155 -0.692349 -0.618786 + 1.11059 0.423385 -2.14451 -0.561708 -0.79476 -0.229869 + -0.997946 1.26522 -2.11898 0.513961 0.664279 0.54275 + -1.00125 1.25445 -2.10147 0.49388 0.722412 0.483947 + -0.995988 1.24916 -2.09271 0.137383 0.988455 0.0638961 + -0.992867 1.28516 -2.14769 0.517531 0.654433 0.551252 + -1.01366 1.28604 -2.12274 0.618266 0.564757 0.546623 + -1.02682 1.28381 -2.10704 0.605076 0.584117 0.541008 + -1.02535 1.27504 -2.0983 0.618559 0.607946 0.497781 + -0.98358 1.289 -2.15871 0.12037 0.770654 0.625782 + -0.989652 1.29545 -2.16274 0.485407 0.791507 0.371345 + -1.00858 1.30598 -2.15145 0.679477 0.608474 0.409963 + -1.04153 1.32695 -2.13338 0.471476 0.673538 0.569261 + -1.0547 1.32472 -2.11767 0.399746 0.758346 0.514892 + -0.963815 1.28962 -2.15547 -0.183418 0.76356 0.61914 + -0.984307 1.29441 -2.16473 0.184608 0.909914 0.371453 + -0.994769 1.30012 -2.18287 0.530824 0.846309 0.0445665 + -1.00404 1.31084 -2.18183 0.762133 0.645131 0.0543958 + -1.03105 1.3371 -2.15031 0.545055 0.711874 0.442889 + -0.94364 1.30847 -2.16914 -0.129731 0.826017 0.548513 + -0.960743 1.32387 -2.20375 -0.24203 0.92725 0.285708 + -0.980918 1.30501 -2.19008 -0.409937 0.822185 0.394923 + -0.989425 1.29907 -2.18486 -0.0279772 0.965028 0.26065 + -1.00405 1.30768 -2.23924 0.00391974 0.973144 -0.230163 + -0.91607 1.31578 -2.18266 0.146177 0.911733 0.383894 + -0.926195 1.32469 -2.21344 0.147343 0.988701 0.0275828 + -0.953976 1.32582 -2.2231 -0.0476521 0.994555 -0.0926787 + -0.995544 1.31361 -2.24446 -0.480832 0.87652 0.0226444 + -0.867528 1.30213 -2.1944 0.64391 0.737506 0.203627 + -0.877653 1.31105 -2.22518 0.52307 0.79705 -0.301842 + -0.926069 1.31171 -2.25781 0.30531 0.70978 -0.634821 + -0.95385 1.31284 -2.26747 0.142053 0.726263 -0.672579 + -0.988777 1.31557 -2.2638 -0.284012 0.824853 -0.48883 + -0.85353 1.2736 -2.17525 0.858587 0.42444 0.28754 + -0.862907 1.29195 -2.22695 0.811404 0.257808 -0.524556 + -0.911322 1.29262 -2.25959 0.503629 0.168112 -0.847406 + -0.96008 1.28314 -2.28307 0.17252 0.194486 -0.965615 + -0.860076 1.20167 -2.10609 0.977829 0.0527667 0.202649 + -0.855496 1.19582 -2.12385 0.978324 -0.177524 0.106618 + -0.84895 1.26775 -2.19301 0.979329 0.151404 -0.134134 + -0.867208 1.24832 -2.22053 0.739929 -0.204522 -0.640839 + -0.863375 1.18217 -2.06239 0.993131 -0.0925709 0.0715634 + -0.869982 1.15731 -2.1148 0.884538 -0.464575 -0.0419891 + -0.853252 1.22412 -2.18659 0.910534 -0.270865 -0.312346 + -0.867738 1.18561 -2.17754 0.87106 -0.384364 -0.30581 + -0.886969 1.21019 -2.22764 0.715305 -0.245911 -0.654115 + -0.881459 1.1607 -1.98568 0.836032 -0.418033 0.355386 + -0.878107 1.14727 -2.04762 0.861581 -0.493556 0.11866 + -0.895625 1.19651 -1.94679 0.679581 0.0758583 0.729668 + -0.919078 1.1614 -1.93562 0.592096 -0.306943 0.745123 + -0.913074 1.14522 -1.9566 0.648751 -0.560217 0.515052 + -0.933796 1.08842 -2.01277 0.695637 -0.667017 0.26679 + -0.965973 1.17276 -1.91092 0.227956 0.232167 0.945587 + -0.989426 1.13764 -1.89975 0.246311 -0.112053 0.962692 + -1.01057 1.10156 -1.91032 0.289681 -0.495879 0.81865 + -1.00457 1.08538 -1.93131 0.531615 -0.606849 0.590863 + -0.965412 1.07295 -1.98369 0.62144 -0.626088 0.470984 + -0.980129 1.18837 -1.91784 -0.155311 0.546138 0.823172 + -1.05117 1.12715 -1.90057 -0.0720222 -0.172502 0.982373 + -1.07232 1.09107 -1.91115 -0.167933 -0.338119 0.925999 + -1.07934 1.04655 -1.93878 -0.0952247 -0.598105 0.79574 + -1.03277 1.04274 -1.95099 0.337861 -0.646305 0.684207 + -0.968084 1.25517 -1.97953 -0.387692 0.803678 0.451438 + -0.995964 1.18457 -1.9229 -0.352308 0.648609 0.674675 + -0.994254 1.24243 -1.98218 -0.313337 0.772476 0.552359 + -1.00474 1.23713 -1.98197 -0.164995 0.700408 0.69441 + -1.00645 1.17926 -1.92269 0.17016 0.608507 0.77509 + -1.00371 1.25545 -2.02439 0.0514151 0.998662 0.00544936 + -1.00651 1.25674 -2.00165 0.345471 0.887877 0.303849 + -1.01179 1.25355 -1.99836 0.302508 0.6774 0.670536 + -1.01002 1.23395 -1.97869 0.313765 0.690069 0.652194 + -0.999056 1.25046 -2.06722 -0.00821282 0.996386 -0.0845421 + -1.00656 1.2514 -2.06805 0.397023 0.917475 -0.0247581 + -1.01075 1.25642 -2.02412 0.39108 0.91962 -0.0368103 + -1.01355 1.2577 -2.00138 0.396477 0.847567 0.352755 + -1.00349 1.2501 -2.09354 0.379706 0.883014 0.275881 + -1.02759 1.27069 -2.09037 0.666809 0.684758 0.294061 + -1.02814 1.26851 -2.06481 0.657845 0.752402 0.0336234 + -1.03233 1.27353 -2.02089 0.621997 0.778144 0.0872426 + -1.02889 1.25904 -1.98622 0.587514 0.689515 0.423552 + -1.06829 1.31095 -2.08292 0.542167 0.832557 0.113592 + -1.06884 1.30877 -2.05737 0.545276 0.832817 0.0953446 + -1.06342 1.2998 -2.01482 0.52789 0.827737 0.190221 + -1.05998 1.28532 -1.98015 0.500475 0.759674 0.415236 + -1.02713 1.2549 -1.9832 0.604321 0.609386 0.513268 + -1.0671 1.31137 -2.09074 0.543852 0.75975 0.356376 + -1.09813 1.32451 -2.09058 -0.0774698 0.989796 0.119592 + -1.09933 1.3241 -2.08277 -0.103469 0.990292 0.0928181 + -1.09813 1.32091 -2.05726 -0.0662083 0.990246 0.122598 + -1.09271 1.31195 -2.01471 0.192334 0.93755 0.289841 + -1.06857 1.32014 -2.09948 0.357598 0.793443 0.492516 + -1.10025 1.32588 -2.1048 -0.21047 0.959276 0.188393 + -1.12999 1.30631 -2.09748 -0.583818 0.800172 0.137405 + -1.12879 1.30312 -2.07197 -0.634952 0.759198 0.143021 + -1.10739 1.31177 -2.01308 -0.37813 0.865314 0.329014 + -1.08638 1.33047 -2.12299 -0.0815611 0.927425 0.365008 + -1.13483 1.32016 -2.13533 -0.546919 0.78092 0.301735 + -1.13211 1.30768 -2.11169 -0.602332 0.741187 0.296374 + -1.16797 1.27928 -2.12693 -0.741695 0.596655 0.306418 + -1.15935 1.27338 -2.08314 -0.766914 0.602076 0.222145 + -1.07524 1.34267 -2.14156 -0.0555998 0.875751 0.479551 + -1.12368 1.33237 -2.1539 -0.487332 0.824377 0.287941 + -1.17068 1.29177 -2.15056 -0.756138 0.618157 0.214795 + -1.19843 1.24064 -2.13741 -0.8893 0.4146 0.193011 + -1.18982 1.23474 -2.09363 -0.863451 0.44763 0.232551 + -1.06475 1.35282 -2.1585 0.101397 0.965176 0.241151 + -1.10077 1.35398 -2.1694 -0.265897 0.951102 0.157173 + -1.13848 1.32748 -2.19342 -0.592972 0.789267 -0.159502 + -1.1614 1.30587 -2.17791 -0.728637 0.684893 0.00321937 + -1.20333 1.24534 -2.18178 -0.907637 0.418511 0.0323098 + -1.02651 1.34196 -2.1807 0.542868 0.839361 -0.0277047 + -1.05061 1.34378 -2.1937 0.165444 0.948647 -0.269625 + -1.08663 1.34494 -2.2046 -0.102595 0.902739 -0.417776 + -1.01332 1.3184 -2.2382 0.547404 0.720786 -0.425225 + -1.03742 1.32022 -2.25119 0.117719 0.732925 -0.670047 + -1.07665 1.30058 -2.25546 -0.14845 0.629303 -0.762851 + -1.10837 1.28654 -2.26464 -0.148225 0.589922 -0.793739 + -1.11835 1.3309 -2.21378 -0.335664 0.820271 -0.463125 + -1.03281 1.27082 -2.2821 -0.0395279 0.360896 -0.931768 + -1.07203 1.25118 -2.28636 -0.0492017 0.326226 -0.94401 + -1.1178 1.24139 -2.28569 -0.153469 0.33296 -0.930368 + -1.15208 1.28048 -2.25538 -0.445637 0.593702 -0.670019 + -1.17222 1.27705 -2.23502 -0.703084 0.590601 -0.396059 + -0.995008 1.28587 -2.2794 -0.0708546 0.313121 -0.947066 + -1.0167 1.19196 -2.28819 0.145802 0.063277 -0.987288 + -1.09284 1.20037 -2.29555 0.0156244 0.15068 -0.988459 + -1.13861 1.19058 -2.29487 -0.199552 0.197976 -0.959679 + -1.16151 1.23532 -2.27643 -0.4365 0.339639 -0.833135 + -0.978899 1.20701 -2.2855 0.214445 -0.105507 -0.971021 + -0.949901 1.17835 -2.26912 0.487822 -0.0853515 -0.86876 + -1.0214 1.12019 -2.29765 0.226025 0.0597328 -0.972288 + -1.09754 1.1286 -2.30501 0.0923096 0.155919 -0.983447 + -0.931082 1.25449 -2.2667 0.502481 -0.101082 -0.858659 + -0.912048 1.16244 -2.2362 0.742272 -0.204591 -0.638103 + -0.931123 1.09699 -2.24512 0.800447 -0.114848 -0.588298 + -0.968976 1.1129 -2.27805 0.489197 -0.0102413 -0.872113 + -0.892817 1.13787 -2.1861 0.889539 -0.374692 -0.261394 + -0.914917 1.08625 -2.20238 0.938747 -0.273717 -0.209362 + -0.950337 1.03443 -2.26481 0.756223 -0.0757755 -0.649911 + -0.982165 1.0375 -2.28311 0.431807 0.0327135 -0.901373 + -1.03459 1.04479 -2.30271 0.305288 0.0956658 -0.947442 + -0.895616 1.12806 -2.12044 0.830532 -0.556333 -0.0266369 + -0.917717 1.07644 -2.13672 0.926829 -0.364878 0.0886172 + -0.936191 1.00951 -2.16796 0.938149 -0.340312 0.0637488 + -0.934132 1.02369 -2.22206 0.945119 -0.246923 -0.213961 + -0.961437 0.953005 -2.25291 0.932227 -0.305135 -0.194536 + -0.963497 0.938828 -2.19881 0.880176 -0.456005 0.131715 + -1.00098 0.866192 -2.25074 0.886738 -0.412694 0.208279 + -0.995492 0.872387 -2.27345 0.953943 -0.288193 -0.0832949 + -1.00294 0.879134 -2.30091 0.925387 -0.111381 -0.36229 + -0.968884 0.959752 -2.28037 0.77473 -0.113828 -0.621962 + -0.978927 0.926189 -2.17924 0.752956 -0.639752 0.154192 + -1.01641 0.853552 -2.23117 0.753174 -0.482156 0.447498 + -1.02586 0.785997 -2.26224 0.815901 -0.248553 0.522042 + -1.01861 0.788239 -2.27782 0.939258 -0.18201 0.290975 + -1.01313 0.794434 -2.30052 0.99075 -0.111301 0.0776356 + -0.979065 0.922293 -2.15239 0.807931 -0.559457 -0.185083 + -1.02374 0.898894 -2.187 0.312873 -0.85359 0.416526 + -1.02577 0.850658 -2.22195 0.388857 -0.542864 0.744371 + -1.03522 0.783103 -2.25302 0.481767 -0.320266 0.815678 + -0.972961 0.929833 -2.1305 0.900174 -0.380436 0.212027 + -1.01732 0.840676 -2.13777 0.899668 -0.248521 -0.358937 + -1.02388 0.894998 -2.16015 0.462293 -0.62034 -0.633611 + -1.05913 0.888012 -2.17101 0.251894 -0.67017 -0.698155 + -1.05801 0.890812 -2.18881 0.0859891 -0.913209 0.398315 + -0.951538 0.996494 -2.11812 0.859201 -0.369314 0.354092 + -0.999435 0.931338 -2.09138 0.804647 -0.246179 0.540315 + -1.01351 0.849065 -2.09167 0.913003 -0.197079 0.35719 + -1.01121 0.848216 -2.11588 0.945877 -0.324019 -0.0181096 + -0.933064 1.06342 -2.08687 0.858895 -0.460662 0.223808 + -0.978011 0.997999 -2.079 0.758528 -0.453955 0.467504 + -1.01947 0.932542 -2.06017 0.795258 -0.263178 0.54617 + -0.911168 1.10379 -2.07578 0.80663 -0.588071 0.0593278 + -0.963119 1.03383 -2.04639 0.748008 -0.578389 0.3255 + -0.99361 1.0303 -2.00338 0.615135 -0.625954 0.479364 + -1.0085 0.994477 -2.03599 0.722616 -0.497106 0.480324 + -0.885534 1.13305 -2.07014 0.797171 -0.603043 0.0292839 + -0.941223 1.0742 -2.03529 0.771318 -0.587966 0.243647 + -1.03478 0.996049 -1.99593 0.468903 -0.551507 0.689906 + -1.08136 0.999866 -1.98372 -0.0548452 -0.570719 0.819312 + -1.08197 0.934614 -2.01182 -0.0357968 -0.30742 0.9509 + -1.04575 0.934113 -2.02012 0.540151 -0.332626 0.773044 + -1.05866 0.851156 -2.039 0.465684 -0.1441 0.87314 + -1.03355 0.850267 -2.06046 0.744675 -0.111229 0.658094 + -1.14002 0.999492 -2.00372 -0.428208 -0.490105 0.759233 + -1.14063 0.93424 -2.03183 -0.472585 -0.247653 0.845773 + -1.12967 0.851577 -2.03907 -0.435333 -0.102752 0.894387 + -1.09487 0.851658 -2.03071 -0.0171549 -0.138014 0.990282 + -1.14155 1.04819 -1.96235 -0.444964 -0.499886 0.743049 + -1.18376 1.04641 -1.99763 -0.72388 -0.373934 0.579802 + -1.18223 0.997715 -2.03899 -0.731642 -0.377332 0.567733 + -1.17278 0.933552 -2.05711 -0.757249 -0.227732 0.612137 + -1.13452 1.09271 -1.93472 -0.473356 -0.29061 0.831553 + -1.18087 1.097 -1.97232 -0.786382 -0.145549 0.600349 + -1.20943 1.0394 -2.05198 -0.907324 -0.236158 0.347839 + -1.20455 0.99636 -2.08217 -0.90108 -0.279217 0.331802 + -1.19509 0.932198 -2.10029 -0.924229 -0.21468 0.315773 + -1.12806 1.13932 -1.92108 -0.47885 -0.113127 0.870577 + -1.17441 1.14361 -1.95867 -0.801984 0.0666919 0.593611 + -1.19506 1.154 -2.01062 -0.920036 0.189181 0.343139 + -1.20655 1.08999 -2.02667 -0.935891 -0.0299462 0.351015 + -1.22159 1.03917 -2.09959 -0.98391 -0.117636 0.134473 + -1.04301 1.16262 -1.8932 0.133149 -0.0513431 0.989765 + -1.1199 1.17478 -1.91371 -0.493117 0.0888113 0.865418 + -1.15065 1.19284 -1.94371 -0.71697 0.309258 0.624751 + -1.01556 1.17173 -1.90419 0.760199 -0.0698092 0.645929 + -1.06864 1.19787 -1.89697 -0.0668883 0.269033 0.960805 + -1.08924 1.19869 -1.90469 -0.396321 0.285385 0.872631 + -1.12 1.21675 -1.93469 -0.551201 0.431076 0.714388 + -1.01913 1.22641 -1.96018 0.627543 0.583386 0.515606 + -1.04118 1.20698 -1.90796 0.402937 0.535494 0.742218 + -1.04919 1.23547 -1.93097 0.51686 0.609857 0.600775 + -1.0713 1.23734 -1.91791 0.102608 0.579982 0.808142 + -1.0919 1.23816 -1.92563 -0.405117 0.512916 0.756834 + -1.08209 1.28719 -1.9671 0.201602 0.787771 0.582042 + -1.09677 1.28702 -1.96546 -0.269858 0.725272 0.63337 + -1.12487 1.26561 -1.97452 -0.688063 0.521079 0.505022 + -1.1713 1.20323 -1.99566 -0.841512 0.383715 0.38029 + -1.13795 1.28203 -2.02425 -0.762557 0.584175 0.277931 + -1.18439 1.21965 -2.04539 -0.866383 0.413741 0.279642 + -1.2081 1.16085 -2.06177 -0.952283 0.209359 0.222093 + -1.21353 1.17594 -2.11001 -0.969684 0.200845 0.139194 + -1.21959 1.09684 -2.07782 -0.987542 0.0428089 0.151421 + -1.21609 1.18911 -2.15515 -0.976556 0.180552 0.117213 + -1.22 1.10578 -2.12788 -0.998328 0.0453873 0.0357814 + -1.222 1.04811 -2.14965 -0.999567 -0.0291064 -0.0042963 + -1.21694 0.994661 -2.17261 -0.985818 -0.165691 -0.0266178 + -1.21671 0.996135 -2.12977 -0.974455 -0.197491 0.106937 + -1.22099 1.1938 -2.19952 -0.981535 0.183936 -0.052501 + -1.22256 1.11894 -2.17302 -0.999135 0.0174052 0.037759 + -1.22178 1.05825 -2.19106 -0.99895 -0.0413191 -0.0198028 + -1.19404 1.25944 -2.20913 -0.842281 0.506105 -0.185525 + -1.21118 1.20584 -2.23352 -0.898297 0.250219 -0.361183 + -1.22206 1.14287 -2.21088 -0.990419 0.0363191 -0.13323 + -1.22129 1.08217 -2.22892 -0.98527 0.00674648 -0.170875 + -1.18935 1.22346 -2.2594 -0.719424 0.310921 -0.621094 + -1.21225 1.15491 -2.24488 -0.894669 0.0980596 -0.435835 + -1.21091 1.09261 -2.25966 -0.885664 0.0811615 -0.457179 + -1.21572 1.01392 -2.24892 -0.973416 -0.110442 -0.200661 + -1.21672 1.00479 -2.21402 -0.984798 -0.163603 -0.0583763 + -1.19043 1.15683 -2.27277 -0.690651 0.159853 -0.7053 + -1.18908 1.09453 -2.28755 -0.712265 0.140421 -0.687722 + -1.18713 1.03112 -2.30196 -0.710449 0.0709391 -0.700164 + -1.20533 1.02435 -2.27965 -0.87336 -0.00392701 -0.487059 + -1.16259 1.1687 -2.28979 -0.476371 0.199149 -0.856394 + -1.1678 1.10298 -2.30341 -0.508134 0.186461 -0.840852 + -1.16584 1.03957 -2.31782 -0.506369 0.133145 -0.851976 + -1.15719 0.962818 -2.33057 -0.535158 0.0205648 -0.844501 + -1.17165 0.958611 -2.31734 -0.715913 -0.0580579 -0.695771 + -1.14382 1.12486 -2.30849 -0.171817 0.212831 -0.961864 + -1.14473 1.04282 -2.32601 -0.167486 0.17144 -0.970854 + -1.13607 0.966066 -2.33875 -0.138194 0.121932 -0.982871 + -1.09845 1.04656 -2.32253 0.179509 0.174572 -0.968143 + -1.10097 0.9669 -2.3348 0.191406 0.149956 -0.969988 + -1.12434 0.885013 -2.34828 -0.253533 0.0805339 -0.963969 + -1.13536 0.882297 -2.34008 -0.632201 -0.0214727 -0.774507 + -1.14982 0.878091 -2.32685 -0.769442 -0.0947641 -0.631647 + -1.03711 0.965133 -2.31498 0.356648 0.1458 -0.922792 + -1.04484 0.884987 -2.33197 0.344746 0.158787 -0.925169 + -1.08924 0.885849 -2.34433 0.191035 0.15841 -0.968717 + -1.0868 0.801298 -2.35914 0.169472 0.175315 -0.969816 + -1.11343 0.800102 -2.36117 -0.281418 0.130983 -0.950604 + -1.00071 0.962823 -2.29867 0.46774 0.0829306 -0.879967 + -1.00844 0.882676 -2.31566 0.731944 0.0655467 -0.678204 + -1.0185 0.800157 -2.33354 0.746164 0.10086 -0.658078 + -1.0424 0.800438 -2.34678 0.376242 0.174763 -0.90989 + -1.013 0.796612 -2.3188 0.984096 -0.0173709 -0.176788 + -1.01255 0.714067 -2.33616 0.981993 -0.0676485 -0.176391 + -1.01742 0.713383 -2.35019 0.761943 -0.0199871 -0.647335 + -1.04131 0.713664 -2.36342 0.383081 0.0313276 -0.923183 + -1.01268 0.711888 -2.31788 0.987855 -0.108988 0.110743 + -1.03097 0.61927 -2.31794 0.958563 -0.239018 0.155006 + -1.03061 0.616257 -2.33139 0.955511 -0.269124 -0.120714 + -1.03548 0.615573 -2.34542 0.742011 -0.268425 -0.614302 + -1.01807 0.712229 -2.29628 0.940291 -0.125168 0.316522 + -1.03636 0.619611 -2.29634 0.907352 -0.22889 0.352592 + -1.07254 0.516733 -2.28383 0.823433 -0.33009 0.461518 + -1.06895 0.510228 -2.29484 0.869973 -0.390427 0.301186 + -1.0686 0.507215 -2.30829 0.904745 -0.425569 0.0181301 + -1.02532 0.709987 -2.2807 0.824082 -0.15566 0.544664 + -1.04215 0.62187 -2.28487 0.791337 -0.190151 0.581058 + -1.07832 0.518992 -2.27237 0.694781 -0.297948 0.654604 + -1.10939 0.460482 -2.27852 0.423204 -0.645375 0.635916 + -1.10581 0.453976 -2.28953 0.541849 -0.740229 0.398071 + -1.03409 0.709764 -2.27193 0.494388 -0.175086 0.851425 + -1.05092 0.621647 -2.2761 0.479625 -0.113771 0.870067 + -1.08372 0.521401 -2.2679 0.389703 -0.154769 0.907843 + -1.11479 0.462892 -2.27405 0.179231 -0.531548 0.827848 + -1.14352 0.455873 -2.28276 -0.614396 -0.584942 0.529491 + -1.05814 0.781314 -2.24839 0.106915 -0.323176 0.94028 + -1.05701 0.707977 -2.2673 0.117343 -0.162842 0.979649 + -1.06858 0.62142 -2.27269 0.105327 -0.0159405 0.99431 + -1.10138 0.521175 -2.26449 0.0961818 -0.0634178 0.993341 + -1.13594 0.461731 -2.2739 -0.284397 -0.475026 0.832748 + -1.06003 0.842575 -2.22376 0.0480452 -0.477106 0.877531 + -1.09638 0.779218 -2.24812 -0.146904 -0.316047 0.937301 + -1.09232 0.706041 -2.26706 -0.147655 -0.149629 0.977655 + -1.10388 0.619483 -2.27244 -0.159453 0.0332052 0.986647 + -1.12253 0.520015 -2.26434 -0.155235 -0.00723967 0.987851 + -1.09827 0.840477 -2.22349 -0.160293 -0.437186 0.884972 + -1.12168 0.778896 -2.25693 -0.567481 -0.297125 0.767908 + -1.11761 0.705719 -2.27586 -0.585134 -0.117937 0.802315 + -1.12317 0.616935 -2.27891 -0.586304 0.0930942 0.804724 + -1.14182 0.517466 -2.27081 -0.588514 0.0556494 0.806569 + -1.10266 0.89077 -2.19775 -0.197894 -0.879598 0.432603 + -1.13814 0.898036 -2.20703 -0.464844 -0.809113 0.359521 + -1.13375 0.847744 -2.23277 -0.574906 -0.38876 0.719965 + -1.13618 0.782888 -2.27523 -0.856429 -0.239476 0.457362 + -1.13074 0.704483 -2.29328 -0.87211 -0.063217 0.485208 + -1.10379 0.887968 -2.17995 0.060497 -0.673013 -0.737153 + -1.14087 0.89487 -2.18415 -0.0875418 -0.608867 -0.788427 + -1.18263 0.925247 -2.21716 -0.622278 -0.778185 0.0848483 + -1.14825 0.851736 -2.25108 -0.786011 -0.394068 0.476337 + -1.14342 0.784636 -2.29323 -0.964957 -0.187838 0.183233 + -1.06094 0.833172 -2.1651 0.279115 -0.124189 -0.952193 + -1.10412 0.833077 -2.17534 0.161889 -0.102368 -0.981485 + -1.14119 0.839975 -2.17954 -0.229248 -0.208736 -0.950723 + -1.18536 0.92208 -2.19428 -0.57468 -0.717364 -0.393868 + -1.02568 0.840159 -2.15425 0.655604 -0.151227 -0.739806 + -1.03748 0.769849 -2.14484 0.687521 -0.151285 -0.710231 + -1.06227 0.770162 -2.15765 0.34487 -0.126877 -0.930036 + -1.10545 0.770067 -2.16789 0.106903 -0.140537 -0.984287 + -1.02911 0.770366 -2.12836 0.942205 -0.142091 -0.303413 + -1.03297 0.696732 -2.12049 0.945662 -0.111886 -0.305296 + -1.04073 0.698706 -2.13558 0.712414 -0.10528 -0.693817 + -1.06553 0.699021 -2.1484 0.349788 -0.081262 -0.933298 + -1.02616 0.76936 -2.10888 0.992449 -0.118358 -0.032174 + -1.03002 0.695723 -2.10101 0.993768 -0.106764 -0.0320364 + -1.04637 0.599478 -2.10967 0.978674 -0.197789 -0.0554709 + -1.04869 0.601661 -2.12474 0.934463 -0.159424 -0.318376 + -1.05645 0.603637 -2.13983 0.704596 -0.080267 -0.705054 + -1.02846 0.770206 -2.08467 0.944851 -0.0875422 0.315585 + -1.03207 0.692305 -2.07887 0.945868 -0.103481 0.307612 + -1.04842 0.596061 -2.08753 0.931367 -0.236396 0.276896 + -1.0416 0.768826 -2.06282 0.762627 -0.0432898 0.645388 + -1.04521 0.690924 -2.05702 0.760141 -0.0851726 0.644152 + -1.05861 0.59312 -2.07063 0.757117 -0.258057 0.60015 + -1.077 0.479988 -2.11589 0.885547 -0.409332 0.219669 + -1.06671 0.769714 -2.04136 0.441229 -0.018642 0.897201 + -1.06833 0.687077 -2.03744 0.44869 -0.0766497 0.890394 + -1.08172 0.589274 -2.05105 0.444696 -0.258233 0.857648 + -1.1015 0.474666 -2.08687 0.434987 -0.457791 0.77538 + -1.08718 0.477048 -2.099 0.716515 -0.446151 0.536242 + -1.0955 0.768938 -2.03512 -0.0096505 -0.00163475 0.999952 + -1.09711 0.686301 -2.0312 -0.00672013 -0.0519661 0.998626 + -1.10408 0.587688 -2.04625 0.00189308 -0.226072 0.974109 + -1.12386 0.47308 -2.08207 -0.00682588 -0.426211 0.904598 + -1.12617 0.418888 -2.11867 0.143104 -0.873915 0.464536 + -1.13029 0.768856 -2.04348 -0.442236 6.37393e-006 0.896899 + -1.12924 0.686226 -2.03891 -0.428091 -0.032047 0.903167 + -1.13621 0.587613 -2.05397 -0.432652 -0.164941 0.886344 + -1.14375 0.473033 -2.08685 -0.413464 -0.365003 0.834158 + -1.14607 0.418842 -2.12345 -0.415151 -0.834933 0.361298 + -1.15321 0.769489 -2.06168 -0.790741 -0.0193701 0.611845 + -1.15215 0.686861 -2.05711 -0.785308 -0.0153978 0.618914 + -1.15403 0.589054 -2.06807 -0.785343 -0.0895455 0.612551 + -1.16158 0.474473 -2.10095 -0.783567 -0.26617 0.561405 + -1.16182 0.850889 -2.06436 -0.789171 -0.111564 0.603956 + -1.16603 0.768546 -2.09129 -0.966794 -0.0468868 0.25122 + -1.16406 0.690491 -2.08423 -0.964123 -0.0053059 0.265404 + -1.16595 0.592685 -2.09518 -0.965689 -0.0179263 0.259082 + -1.16896 0.476723 -2.11774 -0.954937 -0.18294 0.233728 + -1.17464 0.849946 -2.09397 -0.940809 -0.148815 0.304521 + -1.16863 0.769838 -2.11595 -0.989999 -0.098763 -0.100731 + -1.16666 0.691784 -2.10889 -0.994627 -0.00561677 -0.103375 + -1.16799 0.595484 -2.11426 -0.994743 0.032077 -0.0972466 + -1.20206 0.931056 -2.13466 -0.965125 -0.24409 0.0946233 + -1.18161 0.848802 -2.12835 -0.975642 -0.210354 -0.0622393 + -1.16113 0.769041 -2.13784 -0.883528 -0.140874 -0.446691 + -1.1598 0.695065 -2.1289 -0.895884 -0.0166744 -0.443975 + -1.16114 0.598766 -2.13427 -0.896871 0.0678782 -0.437052 + -1.20229 0.929581 -2.1775 -0.910707 -0.382372 -0.156217 + -1.17411 0.848005 -2.15023 -0.855011 -0.2943 -0.427018 + -1.14987 0.770103 -2.1543 -0.714222 -0.15701 -0.682081 + -1.14854 0.696128 -2.14536 -0.728383 -0.0255434 -0.684694 + -1.1524 0.601022 -2.147 -0.7351 0.0812548 -0.673072 + -1.19733 0.936526 -2.23764 -0.910781 -0.412197 -0.0239214 + -1.15718 0.840503 -2.16701 -0.664751 -0.3096 -0.679893 + -1.19632 0.945651 -2.27253 -0.938886 -0.264204 -0.220656 + -1.16377 0.867801 -2.29013 -0.944612 -0.271212 -0.184802 + -1.16295 0.863015 -2.27155 -0.908683 -0.389057 0.151425 + -1.18985 0.951844 -2.29503 -0.858413 -0.157394 -0.488215 + -1.1573 0.873995 -2.31263 -0.890423 -0.18813 -0.414433 + -1.1409 0.791504 -2.32781 -0.934481 -0.0598672 -0.350944 + -1.14423 0.789423 -2.31181 -0.985035 -0.132769 -0.109896 + -1.13343 0.795599 -2.34203 -0.830751 -0.00657771 -0.556605 + -1.12802 0.707751 -2.35849 -0.829548 0.0253955 -0.557858 + -1.13513 0.707759 -2.34495 -0.936996 0.0127874 -0.349106 + -1.13845 0.705678 -2.32895 -0.995218 -0.00478094 -0.0975668 + -1.13797 0.70623 -2.31128 -0.981244 -0.0370933 0.189168 + -1.12445 0.797383 -2.35297 -0.69148 0.0503562 -0.720639 + -1.11905 0.709535 -2.36943 -0.687322 0.0365727 -0.725432 + -1.12515 0.607935 -2.36061 -0.677289 -0.0719191 -0.732193 + -1.13219 0.609351 -2.35256 -0.821535 -0.024576 -0.569628 + -1.1393 0.60936 -2.33903 -0.932397 0.0198639 -0.36089 + -1.10876 0.709872 -2.37723 -0.264773 0.0421609 -0.963389 + -1.11486 0.60827 -2.36842 -0.25921 -0.160316 -0.952423 + -1.13409 0.49291 -2.33262 -0.268775 -0.384067 -0.883319 + -1.14039 0.494966 -2.32864 -0.668861 -0.258289 -0.697073 + -1.14743 0.496383 -2.32059 -0.816314 -0.21488 -0.536151 + -1.08213 0.711068 -2.3752 0.1795 0.038333 -0.983011 + -1.09444 0.609757 -2.36693 0.18542 -0.210577 -0.959832 + -1.11368 0.494398 -2.33113 0.20415 -0.437528 -0.875724 + -1.13274 0.444378 -2.30264 -0.110693 -0.941104 -0.319485 + -1.13903 0.446433 -2.29866 -0.516098 -0.853304 -0.0742616 + -1.05363 0.612355 -2.35515 0.393394 -0.239989 -0.887494 + -1.08943 0.499476 -2.32516 0.388475 -0.452992 -0.802425 + -1.10849 0.449455 -2.29667 0.435325 -0.89232 -0.119399 + -1.14351 0.450377 -2.29177 -0.659804 -0.72715 0.189505 + -1.07128 0.502696 -2.31543 0.753702 -0.506603 -0.418673 + -1.15469 0.502829 -2.30192 -0.993581 -0.0799511 -0.0800288 + -1.15191 0.500329 -2.31369 -0.929023 -0.120917 -0.349708 + -1.14208 0.61186 -2.32725 -0.991341 0.0601525 -0.116724 + -1.15469 0.508324 -2.29292 -0.983315 0.00974674 0.181647 + -1.14159 0.612412 -2.30958 -0.978726 0.0985513 0.179955 + -1.1363 0.615698 -2.29634 -0.876296 0.108311 0.469441 + -1.1494 0.511608 -2.27968 -0.85582 0.0211998 0.516839 + -1.13389 0.769575 -2.16683 -0.332162 -0.167181 -0.928288 + -1.13383 0.698417 -2.15678 -0.340758 -0.0530967 -0.93865 + -1.13769 0.60331 -2.15842 -0.343528 0.0724807 -0.936341 + -1.10539 0.69891 -2.15785 0.103182 -0.0690151 -0.992265 + -1.1156 0.604282 -2.15922 0.09669 0.0416671 -0.994442 + -1.14892 0.485228 -2.16902 -0.351338 -0.0311122 -0.935732 + -1.15803 0.483812 -2.16194 -0.72097 -0.0421274 -0.691685 + -1.16676 0.481555 -2.14921 -0.888763 -0.0654538 -0.45367 + -1.07573 0.604393 -2.14977 0.35174 0.0034731 -0.936091 + -1.10213 0.486269 -2.16396 0.339424 -0.0902265 -0.936296 + -1.12682 0.4862 -2.16981 0.102029 -0.0502667 -0.993511 + -1.14009 0.424542 -2.15971 -0.129369 -0.650949 -0.748016 + -1.1492 0.423124 -2.15263 -0.51305 -0.709021 -0.483806 + -1.08285 0.485512 -2.15402 0.681322 -0.204196 -0.702925 + -1.1154 0.424609 -2.15386 0.371179 -0.692332 -0.61879 + -1.15345 0.42109 -2.14024 -0.643329 -0.760089 -0.0916043 + -1.17101 0.479522 -2.13682 -0.984385 -0.113959 -0.134165 + -1.07804 0.484288 -2.14468 0.889978 -0.307993 -0.336272 + -1.11059 0.423385 -2.14451 0.561725 -0.794749 -0.229867 + -1.07573 0.482105 -2.12961 0.92925 -0.360716 -0.0798683 + -1.11186 0.421268 -2.1308 0.520977 -0.842635 0.136198 + -0.82689 1.29929 -2.95643 0.617033 0.112407 -0.778867 + -0.803656 1.18343 -2.94072 0.894638 0.0821922 -0.439167 + -0.830034 1.19612 -2.97807 0.575668 0.130191 -0.807252 + -0.863031 1.19676 -2.98754 0.0166199 0.127931 -0.991644 + -0.807811 1.06184 -2.97689 0.813349 0.110984 -0.571092 + -0.829019 1.06609 -2.99239 0.448895 0.146127 -0.881556 + -0.862015 1.06673 -3.00185 0.0786585 0.166031 -0.982978 + -0.849719 0.941343 -3.02531 0.0819267 0.201683 -0.976018 + -0.794835 1.04874 -2.94176 0.979301 0.0348408 -0.199389 + -0.798052 0.929471 -2.98389 0.970016 0.0461573 -0.238617 + -0.807629 0.936939 -3.00444 0.786653 0.140009 -0.601311 + -0.828837 0.941197 -3.01994 0.43165 0.200252 -0.879533 + -0.843533 0.816506 -3.05207 0.0783337 0.171048 -0.982144 + -0.795305 0.91505 -2.94799 0.995247 -0.057503 0.0785865 + -0.798724 0.797702 -2.99535 0.996104 -0.0539096 0.0697939 + -0.800369 0.806341 -3.01686 0.969461 0.0372879 -0.242393 + -0.809946 0.813808 -3.03741 0.778168 0.12367 -0.61576 + -0.822651 0.81636 -3.04669 0.433601 0.172667 -0.884407 + -0.804682 0.788575 -2.97448 0.872766 -0.186689 0.451029 + -0.805048 0.714447 -3.00096 0.881252 -0.124899 0.455846 + -0.801237 0.720285 -3.01431 0.99601 -0.0639239 0.0622769 + -0.802882 0.728925 -3.03582 0.957643 -0.0363168 -0.285659 + -0.809008 0.733702 -3.04896 0.761482 -0.0171783 -0.647958 + -0.815622 0.709411 -2.99118 0.654729 -0.166238 0.737356 + -0.807446 0.681117 -3.00185 0.834553 -0.416012 0.361185 + -0.803635 0.686956 -3.0152 0.92744 -0.370181 -0.0531234 + -0.804799 0.693068 -3.03042 0.872678 -0.351701 -0.338731 + -0.810925 0.697845 -3.04357 0.669432 -0.359414 -0.650141 + -0.823056 0.706647 -2.98622 0.458703 -0.203063 0.865076 + -0.814927 0.677555 -2.99494 0.659907 -0.466328 0.589118 + -0.819794 0.667873 -3.01333 0.486103 -0.860276 -0.15372 + -0.820959 0.673984 -3.02855 0.422828 -0.775228 -0.469296 + -0.829896 0.705212 -2.98435 0.077535 -0.248857 0.965432 + -0.822361 0.674792 -2.98997 0.462891 -0.501642 0.730813 + -0.827276 0.664309 -3.00642 0.317967 -0.947171 0.0420035 + -0.829948 0.675789 -3.03512 0.171503 -0.756659 -0.630915 + -0.819914 0.699651 -3.05013 0.37952 -0.37678 -0.844986 + -0.838616 0.673413 -2.9905 -0.194177 -0.541105 0.818231 + -0.827201 0.673775 -2.98865 0.11899 -0.537847 0.834603 + -0.832115 0.663293 -3.0051 0.0671628 -0.987654 0.141525 + -0.848286 0.671955 -3.03015 -0.208749 -0.833694 -0.511251 + -0.852695 0.673826 -2.99489 -0.408041 -0.55183 0.727314 + -0.846194 0.663707 -3.00949 -0.21056 -0.976556 0.0447526 + -0.864359 0.676199 -3.00349 -0.69588 -0.578278 0.425847 + -0.851447 0.667225 -3.01935 -0.318841 -0.903232 -0.287251 + -0.869612 0.679716 -3.01335 -0.820938 -0.567324 0.0648371 + -0.870874 0.684691 -3.02581 -0.789372 -0.543081 -0.286279 + -0.867713 0.689422 -3.03662 -0.685388 -0.5203 -0.509442 + -0.862675 0.693595 -3.0456 -0.533849 -0.493039 -0.686963 + -0.843098 0.674141 -3.03424 -0.0384283 -0.784368 -0.619105 + -0.857487 0.695782 -3.0497 -0.296759 -0.452413 -0.840985 + -0.846422 0.698094 -3.0527 -0.0778333 -0.423467 -0.902562 + -0.833272 0.699745 -3.05357 0.107 -0.398343 -0.910974 + -0.864723 0.731701 -3.05745 -0.413359 -0.105227 -0.904468 + -0.853658 0.734015 -3.06045 -0.154796 -0.063681 -0.985892 + -0.835072 0.736347 -3.06168 0.096749 -0.0343065 -0.994717 + -0.821714 0.736253 -3.05825 0.4175 -0.0164649 -0.908528 + -0.86212 0.814174 -3.05083 -0.183754 0.14366 -0.972418 + -0.070894 2.02181 -3.02604 -0.351185 -0.486508 -0.799987 + -0.040846 2.03476 -3.07187 -0.372013 -0.802254 -0.4669 + -0.080403 2.00708 -3.02372 -0.558122 0.235277 -0.795704 + -0.030826 2.04626 -3.10218 -0.309191 -0.850815 -0.424871 + -1.1518 1.21652 -1.61535 0.813943 0.53967 0.215065 + -1.16328 1.23237 -1.62663 0.616382 0.766541 0.180245 + -1.17721 1.24002 -1.59409 0.691274 0.67049 0.269413 + -1.14452 1.22624 -1.65987 0.710171 0.627744 0.318738 + -1.17429 1.24694 -1.67216 0.188218 0.975681 0.11234 + -1.19304 1.25307 -1.63892 0.083585 0.996385 0.015198 + -1.19615 1.24703 -1.59924 0.0373945 0.968421 0.246499 + -1.18233 1.23731 -1.58105 0.412191 0.831347 0.372773 + -1.16573 1.22416 -1.58282 0.700347 0.634798 0.326414 + -1.14814 1.19983 -1.59413 0.864129 0.455547 0.213911 + -1.12654 1.17353 -1.6363 0.875409 0.430507 0.219824 + -1.14016 1.21833 -1.66015 0.831478 0.448836 0.327399 + -1.16642 1.2016 -1.54698 0.717277 0.584391 0.379476 + -1.15433 1.20203 -1.57527 0.828044 0.486586 0.278527 + -1.13279 1.16309 -1.58257 0.864448 0.461387 0.199629 + -1.12289 1.15684 -1.61507 0.867814 0.459347 0.18947 + -1.17154 1.19889 -1.53394 0.721351 0.623456 0.301588 + -1.15501 1.17947 -1.53944 0.797235 0.557655 0.231165 + -1.1396 1.16384 -1.55976 0.828252 0.508773 0.234838 + -1.13898 1.16529 -1.56371 0.841758 0.469011 0.267341 + -1.18622 1.21333 -1.53064 0.144157 0.779501 0.609587 + -1.17515 1.19341 -1.50857 0.166792 0.669407 0.72393 + -1.16047 1.17898 -1.51187 0.726234 0.6837 0.0716787 + -1.14895 1.16741 -1.52325 0.744014 0.665116 0.0637527 + -1.13354 1.15178 -1.54357 0.741743 0.66919 0.0447282 + -1.20004 1.22305 -1.54884 -0.245882 0.825386 0.508213 + -1.22353 1.20559 -1.54599 -0.492435 0.631944 0.59846 + -1.1988 1.18236 -1.51373 -0.413272 0.316245 0.853929 + -1.17096 1.17815 -1.50282 -0.236947 0.209962 0.948563 + -1.13805 1.15763 -1.49276 0.478373 0.620586 0.621315 + -1.2268 1.23779 -1.60672 -0.462326 0.854276 0.237628 + -1.2503 1.22033 -1.60387 -0.595991 0.753614 0.277239 + -1.26994 1.18244 -1.56291 -0.607054 0.584953 0.53788 + -1.24521 1.15922 -1.53065 -0.467365 0.262882 0.844075 + -1.2237 1.24384 -1.6464 -0.351053 0.935219 0.0461254 + -1.25515 1.22844 -1.65651 -0.595962 0.800467 0.0638908 + -1.27484 1.19579 -1.60417 -0.685577 0.687122 0.240517 + -1.21478 1.24832 -1.69966 -0.218898 0.975726 -0.0064918 + -1.24624 1.23292 -1.70978 -0.563604 0.821039 -0.0908034 + -1.27969 1.20389 -1.65681 -0.731631 0.680197 0.045267 + -1.30767 1.16744 -1.61603 -0.748444 0.646171 0.149315 + -1.15936 1.24648 -1.6915 0.0740504 0.994067 0.0796742 + -1.19986 1.24786 -1.719 0.135244 0.981135 0.13814 + -1.19101 1.25262 -1.75145 -0.245512 0.969061 -0.0253769 + -1.22682 1.23532 -1.76812 -0.520721 0.822891 -0.227374 + -1.27636 1.20376 -1.71496 -0.724124 0.678678 -0.122643 + -1.14441 1.24339 -1.68242 0.475142 0.795742 0.375546 + -1.14064 1.24395 -1.68931 0.632451 0.766567 -0.111269 + -1.15559 1.24705 -1.69839 0.233247 0.968775 0.0840832 + -1.14674 1.25181 -1.73084 0.124247 0.938051 0.323456 + -1.14005 1.23548 -1.6827 0.773546 0.460447 0.435449 + -1.1216 1.21657 -1.69108 0.683372 0.55418 0.475276 + -1.11538 1.23673 -1.7187 0.460284 0.699311 0.546903 + -1.12011 1.26981 -1.78105 0.0104717 0.993792 0.110756 + -1.12101 1.20809 -1.68446 0.735095 0.457936 0.49993 + -1.08343 1.1595 -1.69198 0.731326 0.491405 0.472951 + -1.0772 1.17965 -1.71961 0.780871 0.436186 0.447193 + -1.08338 1.23484 -1.76714 0.861807 0.388328 0.326329 + -1.08874 1.25473 -1.76892 0.693427 0.627103 0.354825 + -1.12257 1.19901 -1.67431 0.765491 0.439672 0.4698 + -1.08845 1.16054 -1.68583 0.702295 0.491362 0.515116 + -1.10764 1.15354 -1.6541 0.743204 0.493837 0.451412 + -1.09001 1.15145 -1.67567 0.666241 0.516837 0.53759 + -1.07935 1.13428 -1.67115 0.558308 0.73313 0.388346 + -1.06831 1.13347 -1.6858 0.559514 0.731183 0.390275 + -1.12523 1.17286 -1.63994 0.843722 0.440262 0.307087 + -1.10786 1.13774 -1.63375 0.676676 0.692175 0.251005 + -1.09697 1.13638 -1.64958 0.572945 0.733106 0.366456 + -1.09287 1.13322 -1.6451 0.234372 0.967523 0.0947054 + -1.07244 1.1308 -1.6701 0.214581 0.972135 0.0943862 + -1.10917 1.13841 -1.6301 0.744588 0.64682 0.164962 + -1.10375 1.13459 -1.62927 0.313406 0.946367 0.0785241 + -1.11518 1.14157 -1.61069 0.795907 0.588065 0.143917 + -1.10792 1.13486 -1.61614 0.396428 0.916976 0.0447292 + -1.09318 1.13501 -1.59889 -0.0225756 0.998791 -0.0436686 + -1.06772 1.13385 -1.63014 -0.0166203 0.996653 -0.0800437 + -1.12508 1.14782 -1.57819 0.802741 0.578767 0.143649 + -1.11393 1.13803 -1.59673 0.516961 0.854926 0.0430419 + -1.09734 1.13528 -1.58575 0.00605762 0.999704 -0.0235447 + -1.05145 1.14076 -1.55772 0.0269644 0.997118 0.0709071 + -1.026 1.1396 -1.58897 0.0133328 0.998487 -0.0533424 + -1.13034 1.15099 -1.56329 0.768774 0.601694 0.216682 + -1.12257 1.14348 -1.56836 0.685363 0.723943 0.0786301 + -1.11314 1.13602 -1.57487 0.342866 0.939144 0.0212346 + -1.10211 1.13791 -1.52383 0.0537726 0.994806 0.0864288 + -1.13097 1.14954 -1.55934 0.581345 0.772665 0.255004 + -1.12783 1.14665 -1.55347 0.646818 0.76134 0.0445799 + -1.12178 1.14147 -1.54651 0.60311 0.797592 0.0102085 + -1.11791 1.13865 -1.51295 0.427715 0.898547 0.0983524 + -1.1046 1.13139 -1.49304 0.434298 0.415728 0.799096 + -1.1304 1.14888 -1.5377 0.672577 0.739937 -0.01153 + -1.12653 1.14606 -1.50415 0.775354 0.591616 0.220947 + -1.13386 1.14237 -1.48701 0.221928 0.293768 0.929757 + -1.11446 1.10698 -1.49489 0.29937 -0.314541 0.9008 + -1.05394 1.13424 -1.52692 0.428142 0.558098 0.710789 + -1.14372 1.11795 -1.48887 -0.186679 -0.223078 0.956759 + -1.12869 1.08069 -1.50374 0.232113 -0.536397 0.81142 + -1.09287 1.10325 -1.50889 0.492498 -0.3841 0.780969 + -1.03235 1.13051 -1.54092 0.552382 0.337196 0.762347 + -0.999891 1.13813 -1.5774 0.481411 0.796235 0.366406 + -1.17155 1.12216 -1.49978 -0.30745 -0.0241445 0.951258 + -1.17813 1.08863 -1.50066 -0.136299 -0.130837 0.98199 + -1.17566 1.04028 -1.52032 0.171254 -0.555759 0.813513 + -1.05405 1.09393 -1.54388 0.439416 -0.581948 0.684288 + -1.01822 1.11649 -1.54903 0.625466 -0.141629 0.76729 + -1.25178 1.12568 -1.53153 -0.390272 0.0428611 0.919701 + -1.2251 1.04822 -1.51723 -0.21691 -0.174327 0.9605 + -1.26669 0.996962 -1.53783 -0.257195 -0.133228 0.957132 + -1.15987 1.02611 -1.5406 0.331425 -0.504712 0.797134 + -1.28649 1.12987 -1.54719 -0.534693 0.204524 0.819922 + -1.2598 1.05241 -1.5329 -0.440201 -0.00444185 0.897888 + -1.30278 1.15409 -1.57476 -0.672972 0.52839 0.517602 + -1.31696 1.10538 -1.56332 -0.643491 0.133371 0.753745 + -1.32384 1.04994 -1.56825 -0.636775 -0.00811588 0.771007 + -1.33324 1.12961 -1.59089 -0.837511 0.404491 0.367372 + -1.35127 1.06406 -1.60065 -0.9218 0.108571 0.372151 + -1.3307 0.948515 -1.57777 -0.655872 -0.0559886 0.752793 + -1.33758 1.12621 -1.6301 -0.909445 0.414581 0.032126 + -1.35561 1.06066 -1.63986 -0.987661 0.155767 0.0161997 + -1.36051 0.965594 -1.63921 -0.999318 0.0347534 0.0124411 + -1.35813 0.962637 -1.61017 -0.92529 0.0114431 0.379088 + -1.30765 1.16858 -1.66663 -0.79448 0.607075 -0.0161678 + -1.33756 1.12735 -1.6807 -0.909474 0.413124 -0.0467562 + -1.353 1.05999 -1.68694 -0.986757 0.139214 -0.083241 + -1.30432 1.16844 -1.72478 -0.784255 0.599512 -0.159781 + -1.33158 1.12212 -1.74451 -0.892684 0.393691 -0.219369 + -1.34702 1.05476 -1.75074 -0.965512 0.104425 -0.2385 + -1.3467 0.967896 -1.74254 -0.955544 -0.0526543 -0.290109 + -1.35789 0.964919 -1.68628 -0.991809 0.0181614 -0.126428 + -1.25695 1.20615 -1.7733 -0.691642 0.673097 -0.261861 + -1.28331 1.16656 -1.78776 -0.753806 0.587742 -0.29383 + -1.31057 1.12024 -1.80749 -0.837042 0.364792 -0.407784 + -1.32535 1.05232 -1.80703 -0.887057 0.0773299 -0.455137 + -1.19359 1.23505 -1.82475 -0.419456 0.854243 -0.307125 + -1.22478 1.21164 -1.8386 -0.582233 0.722302 -0.373208 + -1.25114 1.17205 -1.85306 -0.701379 0.518325 -0.489292 + -1.26801 1.1126 -1.87214 -0.745186 0.26811 -0.610586 + -1.28279 1.04467 -1.87168 -0.763994 0.0206289 -0.644893 + -1.15778 1.25235 -1.80808 -0.310736 0.925767 -0.215405 + -1.13853 1.24819 -1.84913 -0.215625 0.874465 -0.434531 + -1.16126 1.22772 -1.86882 -0.294339 0.773852 -0.560819 + -1.19245 1.20432 -1.88267 -0.40641 0.656733 -0.635242 + -1.21375 1.16608 -1.89675 -0.521956 0.457768 -0.719729 + -1.10086 1.26565 -1.8221 0.078099 0.936389 -0.342164 + -1.10685 1.23112 -1.87862 0.137703 0.772327 -0.62012 + -1.12959 1.21066 -1.89831 -0.109243 0.611496 -0.78367 + -1.16024 1.18686 -1.90753 -0.181874 0.482633 -0.856731 + -1.18154 1.14862 -1.92161 -0.221684 0.362805 -0.905112 + -1.08652 1.26484 -1.8125 0.662975 0.739671 -0.115547 + -1.09251 1.23031 -1.86901 0.523146 0.726083 -0.446231 + -1.08924 1.199 -1.90521 0.226763 0.361181 -0.904504 + -1.1199 1.1752 -1.91443 0.0693779 0.255317 -0.964365 + -1.12806 1.14005 -1.92234 0.143658 0.236854 -0.960865 + -1.08115 1.24495 -1.81071 0.913911 0.403845 -0.0409388 + -1.07628 1.23323 -1.82709 0.716987 0.673658 -0.179208 + -1.08764 1.2186 -1.8854 -0.0570125 0.793379 -0.606052 + -1.06864 1.19837 -1.89783 0.479789 0.439876 -0.759152 + -1.07014 1.21301 -1.77236 0.885817 0.393767 0.24551 + -1.06911 1.22632 -1.80518 0.872861 0.475095 0.111347 + -1.05986 1.21106 -1.85611 0.805129 0.593015 -0.0100665 + -1.06703 1.21797 -1.87802 0.62398 0.680078 -0.384894 + -1.06396 1.15782 -1.72483 0.827478 0.429376 0.361824 + -1.05999 1.17763 -1.76494 0.910434 0.353712 0.21447 + -1.05896 1.19094 -1.79776 0.929684 0.342674 0.135138 + -1.05943 1.14206 -1.71456 0.366442 0.819707 0.440228 + -1.05545 1.16187 -1.75467 0.590011 0.717794 0.369674 + -1.05414 1.17831 -1.79423 0.653776 0.706785 0.270245 + -1.05504 1.19843 -1.85259 0.541744 0.647105 0.53644 + -1.06328 1.13243 -1.69196 0.321215 0.903325 0.284297 + -1.05648 1.14191 -1.71326 -0.373283 0.869794 0.322675 + -1.05115 1.15936 -1.75153 -0.231955 0.894033 0.383278 + -1.04984 1.1758 -1.7911 0.138394 0.940918 0.309065 + -1.06034 1.13228 -1.69065 -0.0676292 0.936335 0.344534 + -1.04408 1.15099 -1.71148 -0.525715 0.74924 0.40282 + -1.03874 1.16844 -1.74975 -0.590614 0.781073 0.202731 + -1.03559 1.17519 -1.79432 -0.106554 0.992456 0.0606458 + -1.04079 1.19782 -1.85581 0.622197 0.782675 -0.0170445 + -1.0614 1.12998 -1.68476 0.128998 0.96563 0.225652 + -1.03405 1.1332 -1.68362 -0.214049 0.838197 0.501606 + -1.03005 1.14648 -1.69451 -0.391976 0.650539 0.650502 + -1.00964 1.18895 -1.7286 -0.388124 0.874277 0.291546 + -1.00648 1.1957 -1.77317 -0.1889 0.97201 -0.139694 + -1.04729 1.13142 -1.65514 -0.0217426 0.996611 -0.0793298 + -1.03512 1.1309 -1.67772 -0.09636 0.98406 0.149465 + -0.986618 1.13712 -1.671 -0.200551 0.802443 0.562019 + -0.982616 1.1504 -1.68189 -0.144633 0.674377 0.724084 + -0.995607 1.18444 -1.71163 -0.203481 0.773205 0.600623 + -0.999435 1.13483 -1.64199 0.0095085 0.998627 -0.051512 + -0.98726 1.13431 -1.66458 -0.0946696 0.976705 0.192575 + -0.961984 1.1384 -1.66464 0.176129 0.824478 0.537786 + -0.960015 1.15492 -1.68632 0.244961 0.722833 0.646147 + -0.973007 1.18895 -1.71607 0.162 0.881003 0.44451 + -0.973326 1.13336 -1.63041 0.460189 0.8677 0.187942 + -0.962626 1.13559 -1.65822 0.419187 0.849423 0.320568 + -1.04301 1.16369 -1.89506 0.641505 0.209774 -0.737879 + -1.05117 1.12854 -1.90297 0.46863 0.0867594 -0.879124 + -1.01517 1.16314 -1.85303 0.560835 0.672519 -0.482889 + -0.988936 1.16213 -1.8385 0.40744 0.716395 -0.566366 + -0.977838 1.14693 -1.8422 0.723758 0.222992 -0.65303 + -0.998882 1.12702 -1.86773 0.690737 0.0460577 -0.721638 + -1.07232 1.0927 -1.91396 0.428812 -0.130145 -0.89397 + -0.980251 1.19469 -1.75863 0.12658 0.989644 -0.0676923 + -0.94695 1.18602 -1.7729 0.48833 0.832204 -0.262622 + -0.935851 1.17081 -1.7766 0.878816 0.325905 -0.348523 + -0.935857 1.13387 -1.77346 0.92725 -0.19477 -0.319799 + -0.956901 1.11396 -1.79899 0.821214 -0.339429 -0.45869 + -0.939705 1.18028 -1.73033 0.675076 0.686576 0.269973 + -0.931083 1.16012 -1.73146 0.960105 0.197341 0.198129 + -0.931089 1.12317 -1.72831 0.980433 -0.174479 0.091144 + -0.961336 1.05217 -1.72489 0.895242 -0.440978 -0.0638771 + -0.957499 1.15374 -1.6868 0.63839 0.543671 0.544868 + -0.948877 1.13357 -1.68792 0.894693 0.164174 0.415416 + -0.9502 1.09972 -1.68082 0.931964 -0.189302 0.309205 + -0.980447 1.02872 -1.6774 0.856722 -0.427014 0.289285 + -0.959468 1.13722 -1.66512 0.757239 0.449467 0.473888 + -0.958693 1.12583 -1.66401 0.923881 0.0713782 0.375965 + -0.960016 1.09198 -1.65691 0.935204 -0.231583 0.267885 + -1.00444 1.01455 -1.64558 0.757798 -0.465029 0.4577 + -1.03712 0.93285 -1.67943 0.807823 -0.506017 0.302273 + -0.961898 1.13456 -1.65811 0.8641 0.342155 0.369136 + -0.961123 1.12317 -1.657 0.93835 0.0745864 0.337544 + -0.966322 1.11954 -1.63973 0.943453 0.125872 0.30668 + -0.965214 1.08835 -1.63965 0.922635 -0.248744 0.294739 + -0.972599 1.13233 -1.6303 0.852504 0.403099 0.332789 + -0.979487 1.11131 -1.59494 0.883959 -0.0678965 0.462608 + -0.992963 1.08999 -1.58691 0.679336 -0.410759 0.608095 + -0.97869 1.06703 -1.63161 0.808976 -0.460306 0.365617 + -0.985764 1.1241 -1.58551 0.819341 0.247266 0.517242 + -1.03826 1.07976 -1.56416 0.446988 -0.513588 0.732413 + -1.02023 1.03424 -1.60761 0.592786 -0.493577 0.636385 + -1.06552 1.02402 -1.58486 0.431567 -0.465307 0.772812 + -1.1043 0.977292 -1.58919 0.430605 -0.403009 0.807566 + -1.04598 0.98177 -1.62157 0.593446 -0.47395 0.650533 + -1.08365 0.92021 -1.6318 0.484688 -0.463338 0.741886 + -1.06112 0.918685 -1.64761 0.650244 -0.484492 0.585192 + -1.19864 0.979392 -1.54493 0.212781 -0.24088 0.946943 + -1.21682 0.926985 -1.55393 0.249666 -0.307984 0.918048 + -1.14197 0.915734 -1.59942 0.445605 -0.417303 0.792019 + -1.28486 0.944555 -1.54683 -0.292539 -0.120495 0.948632 + -1.29003 0.878772 -1.56184 -0.235722 -0.31146 0.920558 + -1.24364 0.873129 -1.56804 0.22376 -0.41958 0.879707 + -1.1688 0.861879 -1.61352 0.511217 -0.572815 0.640734 + -1.33586 0.882732 -1.59277 -0.6367 -0.158724 0.754599 + -1.3311 0.828058 -1.60292 -0.506381 -0.235732 0.829463 + -1.29043 0.824147 -1.59318 -0.0849646 -0.394886 0.914793 + -1.24404 0.818505 -1.59938 0.313648 -0.456375 0.832674 + -1.36025 0.886229 -1.61648 -0.900588 -0.0728978 0.428518 + -1.35549 0.831554 -1.62663 -0.843479 -0.0971261 0.528308 + -1.36057 0.765387 -1.63744 -0.802727 -0.0312921 0.595525 + -1.33929 0.763181 -1.62236 -0.42135 -0.169906 0.89084 + -1.29862 0.759271 -1.61262 -0.0593078 -0.262465 0.963117 + -1.36263 0.889184 -1.64552 -0.999225 0.0302591 -0.0251901 + -1.36415 0.834711 -1.65179 -0.996871 0.0135084 0.0778825 + -1.36923 0.768544 -1.66259 -0.992765 0.0931242 0.0758048 + -1.35755 0.891501 -1.68179 -0.981983 -0.00598264 -0.188876 + -1.35907 0.837027 -1.68806 -0.940961 0.0707402 -0.331041 + -1.36453 0.767713 -1.6887 -0.933128 0.12783 -0.336053 + -1.37998 0.688661 -1.67276 -0.986713 0.147294 0.0685649 + -1.34636 0.894477 -1.73805 -0.846224 -0.129515 -0.516847 + -1.3389 0.837203 -1.72269 -0.792548 -0.0575711 -0.607086 + -1.34436 0.767888 -1.72333 -0.747919 0.110828 -0.654473 + -1.36143 0.682262 -1.7248 -0.748795 0.126558 -0.650607 + -1.37528 0.68783 -1.69886 -0.922368 0.161823 -0.350787 + -1.32271 0.888801 -1.75658 -0.475248 -0.267235 -0.838287 + -1.31525 0.831528 -1.74122 -0.391519 -0.128805 -0.91111 + -1.32367 0.764451 -1.74011 -0.380362 0.0609298 -0.922828 + -1.31465 0.889273 -1.76194 -0.76204 -0.580068 -0.287778 + -1.28797 0.866962 -1.73616 0.258117 -0.439166 -0.860528 + -1.28675 0.827511 -1.74491 0.248239 0.0274827 -0.968309 + -1.29517 0.760435 -1.74379 0.126475 -0.0316701 -0.991464 + -1.31543 0.895608 -1.78808 -0.883307 -0.348088 -0.314012 + -1.27992 0.832313 -1.76981 -0.964941 -0.20549 0.163289 + -1.27991 0.867435 -1.74151 -0.589249 -0.786826 0.183549 + -1.25538 0.857214 -1.71958 0.433939 -0.370166 -0.821385 + -1.32503 0.965453 -1.79882 -0.882958 -0.118448 -0.454264 + -1.2885 0.895743 -1.82849 -0.752232 -0.272463 -0.599926 + -1.26984 0.839253 -1.81832 -0.793728 -0.203505 -0.57322 + -1.2807 0.838646 -1.79595 -0.925832 -0.275072 -0.259172 + -1.2981 0.965589 -1.83923 -0.774983 -0.144185 -0.615314 + -1.26695 0.894931 -1.8507 -0.594654 -0.273573 -0.756006 + -1.24829 0.838441 -1.84053 -0.616306 -0.186162 -0.765187 + -1.25826 0.763103 -1.82955 -0.652943 0.0485137 -0.755852 + -1.26993 0.764796 -1.81515 -0.835315 0.0870977 -0.542828 + -1.24683 1.04103 -1.90683 -0.579888 -0.078901 -0.810866 + -1.26214 0.961948 -1.87438 -0.582076 -0.219862 -0.782847 + -1.23521 0.892172 -1.86625 -0.265912 -0.28973 -0.919428 + -1.23163 0.837205 -1.85103 -0.283736 -0.199385 -0.937944 + -1.24161 0.761868 -1.84005 -0.304829 -0.0524921 -0.950959 + -1.23062 1.10662 -1.91583 -0.562408 0.209926 -0.799768 + -1.20421 1.03673 -1.9268 -0.219289 -0.219022 -0.950759 + -1.23039 0.959189 -1.88993 -0.254691 -0.320733 -0.912284 + -1.20377 0.888107 -1.86701 0.0862194 -0.299128 -0.95031 + -1.188 1.10233 -1.93581 -0.199873 0.123153 -0.972051 + -1.15876 1.03287 -1.92612 0.13594 -0.327879 -0.934888 + -1.18494 0.955324 -1.88926 0.107907 -0.402031 -0.909245 + -1.13452 1.09375 -1.93653 0.180881 0.00568228 -0.983489 + -1.09656 1.03181 -1.90356 0.446193 -0.406472 -0.797303 + -1.13972 0.947954 -1.87361 0.402614 -0.437176 -0.804226 + -1.15854 0.880738 -1.85136 0.417151 -0.295916 -0.859313 + -1.04309 1.03272 -1.86026 0.649039 -0.459616 -0.606219 + -1.08625 0.948863 -1.83031 0.612569 -0.45869 -0.64371 + -1.12481 0.87388 -1.82472 0.645294 -0.321917 -0.692795 + -1.16808 0.828247 -1.84439 0.405757 -0.224436 -0.885996 + -1.20019 0.833142 -1.85179 0.0821968 -0.211977 -0.973812 + -1.02003 1.09118 -1.87873 0.652416 -0.306213 -0.693244 + -0.979965 1.0555 -1.78051 0.807229 -0.44619 -0.386389 + -1.04295 0.938143 -1.77506 0.769567 -0.458511 -0.444449 + -1.0815 0.863159 -1.76947 0.779966 -0.454658 -0.430046 + -1.02432 0.934806 -1.71944 0.867248 -0.497598 -0.0166589 + -1.07187 0.858508 -1.73225 0.820758 -0.570805 -0.0231943 + -1.12004 0.816937 -1.78948 0.818467 -0.401411 -0.411072 + -1.13435 0.821389 -1.81775 0.729012 -0.276011 -0.626386 + -1.08468 0.856552 -1.69225 0.725396 -0.61261 0.313864 + -1.11669 0.810805 -1.72692 0.740051 -0.617224 0.267132 + -1.11041 0.812285 -1.75226 0.821316 -0.566217 -0.0695551 + -1.15065 0.7456 -1.76694 0.878009 -0.478635 -0.00302057 + -1.15429 0.746264 -1.79033 0.849647 -0.425348 -0.311735 + -1.09781 0.856221 -1.66961 0.564729 -0.625645 0.538191 + -1.12983 0.810472 -1.70429 0.596127 -0.63071 0.496827 + -1.16417 0.74514 -1.72641 0.688353 -0.475692 0.547619 + -1.15693 0.74412 -1.7416 0.817737 -0.497499 0.289486 + -1.12035 0.857744 -1.65381 0.210287 -0.553266 0.806025 + -1.14075 0.811055 -1.6949 0.286026 -0.604535 0.743456 + -1.17509 0.745721 -1.71702 0.425244 -0.389938 0.816771 + -1.14508 0.857131 -1.65365 0.185317 -0.774849 0.604373 + -1.16548 0.81044 -1.69474 0.0133857 -0.469183 0.883 + -1.1907 0.748059 -1.71192 0.149476 -0.258656 0.954334 + -1.21592 0.662056 -1.72454 0.442536 -0.276745 0.85298 + -1.15275 0.856415 -1.64339 0.518608 -0.821939 0.235503 + -1.18493 0.849387 -1.68039 -0.296294 -0.760227 0.578156 + -1.19112 0.813612 -1.69258 -0.260851 -0.283671 0.922761 + -1.21634 0.751233 -1.70976 -0.130893 -0.128592 0.983021 + -1.2038 0.80959 -1.64923 0.816235 -0.526653 0.23748 + -1.19259 0.848672 -1.67012 0.533736 -0.749676 -0.391296 + -1.21685 0.851241 -1.69701 -0.205818 -0.924368 0.32122 + -1.22304 0.815468 -1.70921 -0.534893 -0.078298 0.841284 + -1.23805 0.754552 -1.71673 -0.456727 0.0331711 0.888988 + -1.21985 0.815055 -1.61937 0.579261 -0.552402 0.599423 + -1.24668 0.751744 -1.6372 0.65626 -0.420439 0.626541 + -1.23437 0.748589 -1.65778 0.83242 -0.434956 0.343353 + -1.1988 0.810177 -1.67648 0.923295 -0.245162 -0.295673 + -1.27087 0.755194 -1.61721 0.33568 -0.362953 0.869244 + -1.29516 0.680623 -1.63684 0.356918 -0.302108 0.883934 + -1.27825 0.67452 -1.65169 0.664624 -0.3768 0.64521 + -1.26595 0.671366 -1.67227 0.838794 -0.410489 0.357664 + -1.22937 0.749173 -1.68503 0.917546 -0.35948 -0.169954 + -1.32291 0.684698 -1.63226 -0.0565957 -0.176729 0.982631 + -1.34395 0.612136 -1.64165 -0.0384887 -0.0723164 0.996639 + -1.3278 0.606846 -1.64451 0.361937 -0.225801 0.904442 + -1.31089 0.600744 -1.65936 0.662737 -0.347735 0.66322 + -1.35212 0.687546 -1.639 -0.411111 -0.0666491 0.909145 + -1.37316 0.614981 -1.64839 -0.411776 0.0551519 0.909614 + -1.38826 0.545838 -1.64715 -0.41253 -0.000709895 0.910944 + -1.37589 0.541235 -1.64422 -0.0791485 -0.11612 0.990077 + -1.35974 0.535943 -1.64708 0.303378 -0.251926 0.918964 + -1.3734 0.68975 -1.65408 -0.805994 0.0598112 0.588894 + -1.38608 0.61591 -1.65754 -0.79111 0.145988 0.593997 + -1.40118 0.546766 -1.6563 -0.791716 0.0694493 0.606929 + -1.39819 0.503755 -1.65766 -0.618787 -0.395946 0.678476 + -1.38582 0.499151 -1.65473 -0.133645 -0.54085 0.830434 + -1.39266 0.61482 -1.67623 -0.983018 0.173513 0.0597387 + -1.4047 0.544119 -1.66455 -0.98952 0.0496573 0.135587 + -1.40171 0.501108 -1.66591 -0.874062 -0.442184 0.201219 + -1.39721 0.492211 -1.67724 -0.732737 -0.647838 -0.208333 + -1.39059 0.610268 -1.69228 -0.933316 0.131539 -0.334094 + -1.40264 0.539568 -1.6806 -0.965288 0.018016 -0.260567 + -1.39814 0.53067 -1.69193 -0.843184 -0.101343 -0.527987 + -1.37674 0.604702 -1.71822 -0.76852 0.0508278 -0.637804 + -1.36507 0.59865 -1.72853 -0.434249 -0.103099 -0.894873 + -1.38647 0.524618 -1.70224 -0.526548 -0.260895 -0.809124 + -1.37838 0.519222 -1.70333 -0.083132 -0.473219 -0.877013 + -1.38912 0.486813 -1.67833 -0.229277 -0.925448 -0.301625 + -1.34073 0.678825 -1.74158 -0.384824 0.0306201 -0.922482 + -1.3448 0.594307 -1.7314 0.0631948 -0.274048 -0.959638 + -1.32047 0.67448 -1.74446 0.0937599 -0.105011 -0.990041 + -1.32986 0.59129 -1.72547 0.436207 -0.387375 -0.812197 + -1.36343 0.516208 -1.69739 0.366982 -0.587052 -0.721591 + -1.37942 0.486098 -1.66976 0.209021 -0.969626 0.127025 + -1.27009 0.75642 -1.73415 0.505485 -0.107906 -0.856061 + -1.29539 0.670466 -1.73482 0.488378 -0.22358 -0.843504 + -1.30815 0.589689 -1.70631 0.711051 -0.461767 -0.530263 + -1.35373 0.515493 -1.68883 0.616047 -0.636111 -0.464596 + -1.25415 0.817762 -1.72833 0.574157 0.0596323 -0.816571 + -1.24023 0.75033 -1.70818 0.772867 -0.203311 -0.601116 + -1.27368 0.668865 -1.71566 0.742142 -0.314891 -0.591667 + -1.30116 0.591384 -1.69213 0.870314 -0.485337 -0.0836741 + -1.34673 0.517187 -1.67464 0.777869 -0.626086 0.0541774 + -1.22429 0.811672 -1.70237 0.682156 -0.0598078 -0.728756 + -1.26282 0.667708 -1.69251 0.906823 -0.40609 -0.112972 + -1.30428 0.59504 -1.67189 0.815265 -0.427575 0.390541 + -1.34704 0.522626 -1.66585 0.734782 -0.502853 0.455229 + -1.21809 0.850167 -1.696 0.526666 -0.446044 -0.723649 + -1.25413 0.858289 -1.72059 0.208099 -0.786046 -0.582088 + -1.35365 0.528329 -1.65332 0.556322 -0.412501 0.721352 + -1.37972 0.491535 -1.66098 0.124974 -0.762276 0.635072 + -1.24979 0.66784 -1.71765 -0.112638 -0.0326382 0.9931 + -1.23153 0.664393 -1.71944 0.176531 -0.155192 0.971984 + -1.2715 0.671159 -1.72463 -0.450643 0.109135 0.886008 + -1.29816 0.588448 -1.72706 -0.443615 0.119314 0.88824 + -1.28508 0.586268 -1.72283 -0.113897 -0.00515318 0.993479 + -1.26683 0.582821 -1.72462 0.184181 -0.129991 0.974258 + -1.25756 0.580225 -1.72786 0.446164 -0.251055 0.859017 + -1.28955 0.672873 -1.73814 -0.674392 0.189741 0.713578 + -1.31621 0.590162 -1.74058 -0.685128 0.197335 0.701184 + -1.33453 0.50927 -1.73622 -0.693294 0.0812979 0.716054 + -1.32646 0.508505 -1.73018 -0.464583 0.0186473 0.885333 + -1.31338 0.506325 -1.72595 -0.129231 -0.101578 0.986398 + -1.26296 0.759495 -1.73507 -0.68021 0.13025 0.721353 + -1.27643 0.761618 -1.75234 -0.86222 0.148656 0.48423 + -1.30303 0.674996 -1.75542 -0.862277 0.245344 0.44304 + -1.32451 0.590198 -1.75123 -0.867476 0.231661 0.440248 + -1.24795 0.820411 -1.72754 -0.624756 -0.0924609 0.775327 + -1.27373 0.829557 -1.74847 -0.8414 -0.121963 0.52647 + -1.28262 0.764374 -1.77369 -0.983958 0.150091 0.0964282 + -1.30777 0.674078 -1.7713 -0.961895 0.259908 0.0848916 + -1.32925 0.58928 -1.76711 -0.971299 0.226082 0.0739249 + -1.25413 0.858289 -1.72059 -0.61572 -0.238468 0.751013 + -1.28079 0.764191 -1.79278 -0.955152 0.134387 -0.263863 + -1.30594 0.673894 -1.79039 -0.934884 0.230209 -0.270178 + -1.32841 0.587097 -1.77896 -0.947175 0.175993 -0.268117 + -1.34511 0.507897 -1.75403 -0.990582 0.0831378 0.108793 + -1.34282 0.509307 -1.74687 -0.886829 0.110661 0.448652 + -1.29853 0.670716 -1.80716 -0.827046 0.17455 -0.534348 + -1.321 0.583919 -1.79573 -0.84331 0.108462 -0.526368 + -1.34128 0.502486 -1.77348 -0.879601 -0.0519997 -0.472861 + -1.34427 0.505713 -1.76588 -0.972061 0.0335479 -0.23232 + -1.28687 0.669023 -1.82156 -0.660963 0.100971 -0.743594 + -1.31422 0.580905 -1.80472 -0.683627 0.0211274 -0.729525 + -1.3345 0.499472 -1.78246 -0.727215 -0.133726 -0.673257 + -1.34018 0.460173 -1.75922 -0.721267 -0.662777 -0.201248 + -1.34317 0.463401 -1.75163 -0.83499 -0.535898 0.124922 + -1.27515 0.666054 -1.82951 -0.330546 -0.033392 -0.943199 + -1.3025 0.577936 -1.81267 -0.353727 -0.124803 -0.926985 + -1.3295 0.496792 -1.78609 -0.421067 -0.291774 -0.858819 + -1.33518 0.457491 -1.76285 -0.387157 -0.813576 -0.433825 + -1.32506 0.454956 -1.76054 0.126224 -0.945408 -0.300452 + -1.22073 0.758715 -1.84149 0.0617394 -0.146667 -0.987257 + -1.25427 0.662903 -1.83094 0.0529423 -0.17021 -0.983985 + -1.29003 0.575013 -1.81366 0.0185095 -0.259151 -0.965659 + -1.31703 0.493869 -1.78709 -0.0330283 -0.419408 -0.907197 + -1.18862 0.753823 -1.83409 0.393387 -0.24493 -0.886147 + -1.23124 0.659392 -1.82564 0.368974 -0.283606 -0.885113 + -1.26701 0.571504 -1.80835 0.362422 -0.371118 -0.85494 + -1.30691 0.491333 -1.78477 0.284784 -0.517688 -0.806782 + -1.1686 0.750717 -1.8186 0.687829 -0.348035 -0.636995 + -1.21123 0.656288 -1.81015 0.693421 -0.398107 -0.600565 + -1.25483 0.570414 -1.79884 0.672462 -0.457695 -0.581644 + -1.29473 0.490244 -1.77525 0.630615 -0.591165 -0.50284 + -1.20059 0.656724 -1.78915 0.84698 -0.449841 -0.283315 + -1.24419 0.570849 -1.77784 0.839321 -0.487404 -0.240787 + -1.28979 0.491493 -1.7658 0.781526 -0.592364 -0.19576 + -1.32012 0.456206 -1.75109 0.339759 -0.928743 0.148326 + -1.19694 0.656058 -1.76576 0.883955 -0.464723 0.0515346 + -1.2417 0.572741 -1.76335 0.876001 -0.476175 0.0766831 + -1.2873 0.493385 -1.75131 0.809403 -0.570089 0.140946 + -1.32163 0.459255 -1.74252 0.246058 -0.835561 0.491216 + -1.33281 0.464045 -1.73842 -0.364345 -0.550672 0.751008 + -1.20104 0.658888 -1.74681 0.834271 -0.442455 0.328976 + -1.24579 0.575573 -1.74439 0.826078 -0.437528 0.355195 + -1.28881 0.496432 -1.74274 0.763788 -0.516423 0.387214 + -1.29293 0.498939 -1.73328 0.632428 -0.4608 0.622655 + -1.32487 0.461252 -1.73929 0.00788462 -0.705532 0.708634 + -1.20827 0.65991 -1.73162 0.709103 -0.393732 0.584934 + -1.24991 0.578077 -1.73494 0.704896 -0.375251 0.60192 + -1.29617 0.500936 -1.73006 0.393521 -0.330076 0.858016 + -1.30544 0.503532 -1.72682 0.146181 -0.223438 0.963694 + -1.34088 0.46481 -1.74447 -0.701639 -0.490977 0.516377 + 1.21809 0.850167 -1.696 -0.548293 -0.43388 -0.714929 + 1.21685 0.851241 -1.69701 0.197383 -0.922357 0.332112 + 1.25413 0.858289 -1.72059 -0.208099 -0.786046 -0.582088 + 1.19259 0.848672 -1.67012 -0.511167 -0.623797 -0.591258 + 1.18493 0.849387 -1.68039 0.190407 -0.815477 0.546573 + 1.22304 0.815468 -1.70921 0.518788 -0.107786 0.848081 + 1.25413 0.858289 -1.72059 0.625772 -0.225621 0.746662 + 1.25538 0.857214 -1.71958 -0.421665 -0.35137 -0.835905 + 1.25415 0.817762 -1.72833 -0.549194 0.0365944 -0.834893 + 1.22429 0.811672 -1.70237 -0.681171 -0.0501868 -0.730402 + 1.1988 0.810177 -1.67648 -0.857195 -0.332449 -0.393312 + 1.15275 0.856415 -1.64339 -0.626169 -0.72323 0.291291 + 1.27991 0.867435 -1.74151 0.569222 -0.764404 0.302774 + 1.28797 0.866962 -1.73616 -0.109099 -0.49856 -0.859962 + 1.28675 0.827511 -1.74491 -0.196893 0.0947836 -0.975833 + 1.29517 0.760435 -1.74379 -0.135655 -0.0233792 -0.99048 + 1.27009 0.75642 -1.73415 -0.499556 -0.0934479 -0.861226 + 1.24023 0.75033 -1.70818 -0.753126 -0.224603 -0.618348 + 1.31465 0.889273 -1.76194 0.710133 -0.618406 -0.336579 + 1.32271 0.888801 -1.75658 0.443989 -0.469326 -0.763287 + 1.31525 0.831528 -1.74122 0.311686 -0.0395906 -0.94936 + 1.32367 0.764451 -1.74011 0.381067 0.0621822 -0.922454 + 1.27373 0.829557 -1.74847 0.810154 -0.176227 0.559102 + 1.27992 0.832313 -1.76981 0.961408 -0.254101 0.105481 + 1.2807 0.838646 -1.79595 0.927453 -0.249346 -0.278671 + 1.31543 0.895608 -1.78808 0.913532 -0.304259 -0.269972 + 1.32503 0.965453 -1.79882 0.87695 -0.113739 -0.466928 + 1.24795 0.820411 -1.72754 0.62223 -0.0906251 0.777571 + 1.26296 0.759495 -1.73507 0.671479 0.10361 0.733744 + 1.27643 0.761618 -1.75234 0.873216 0.130011 0.469672 + 1.28262 0.764374 -1.77369 0.984603 0.141256 0.102976 + 1.23805 0.754552 -1.71673 0.443221 0.0446638 0.895299 + 1.2715 0.671159 -1.72463 0.449938 0.10697 0.886631 + 1.28955 0.672873 -1.73814 0.674795 0.189325 0.713308 + 1.30303 0.674996 -1.75542 0.862185 0.243559 0.444204 + 1.21634 0.751233 -1.70976 0.141813 -0.104214 0.984392 + 1.24979 0.66784 -1.71765 0.112364 -0.0324403 0.993137 + 1.28508 0.586268 -1.72283 0.113872 -0.00523079 0.993482 + 1.29816 0.588448 -1.72706 0.443642 0.119288 0.88823 + 1.31621 0.590162 -1.74058 0.684747 0.195752 0.701999 + 1.19112 0.813612 -1.69258 0.202745 -0.241276 0.949042 + 1.1907 0.748059 -1.71192 -0.16271 -0.248935 0.954755 + 1.23153 0.664393 -1.71944 -0.17639 -0.154736 0.972082 + 1.26683 0.582821 -1.72462 -0.184172 -0.129999 0.974259 + 1.16548 0.81044 -1.69474 0.0226165 -0.417339 0.908469 + 1.17509 0.745721 -1.71702 -0.419574 -0.369373 0.829169 + 1.21592 0.662056 -1.72454 -0.441814 -0.277283 0.853179 + 1.25756 0.580225 -1.72786 -0.446223 -0.251636 0.858816 + 1.14508 0.857131 -1.65365 -0.124138 -0.77728 0.616786 + 1.12035 0.857744 -1.65381 -0.267113 -0.640483 0.720022 + 1.14075 0.811055 -1.6949 -0.279355 -0.609574 0.741876 + 1.16417 0.74514 -1.72641 -0.690738 -0.473472 0.54654 + 1.20827 0.65991 -1.73162 -0.709149 -0.393261 0.585195 + 1.14197 0.915734 -1.59942 -0.448773 -0.443226 0.775986 + 1.08365 0.92021 -1.6318 -0.469013 -0.469758 0.7479 + 1.09781 0.856221 -1.66961 -0.556509 -0.631063 0.540424 + 1.12983 0.810472 -1.70429 -0.595984 -0.631843 0.495557 + 1.15693 0.74412 -1.7416 -0.818988 -0.492915 0.293757 + 1.1688 0.861879 -1.61352 -0.560633 -0.545675 0.622839 + 1.21682 0.926985 -1.55393 -0.255195 -0.305567 0.917335 + 1.19864 0.979392 -1.54493 -0.218822 -0.246223 0.944188 + 1.1043 0.977292 -1.58919 -0.422671 -0.407423 0.809541 + 1.04598 0.98177 -1.62157 -0.573951 -0.437501 0.692223 + 1.21985 0.815055 -1.61937 -0.576147 -0.51818 0.632095 + 1.24364 0.873129 -1.56804 -0.221803 -0.41454 0.882587 + 1.28486 0.944555 -1.54683 0.276366 -0.148209 0.949556 + 1.2038 0.80959 -1.64923 -0.736277 -0.600769 0.311404 + 1.23437 0.748589 -1.65778 -0.832457 -0.434978 0.343233 + 1.24668 0.751744 -1.6372 -0.655125 -0.421254 0.627181 + 1.24404 0.818505 -1.59938 -0.348707 -0.430911 0.832297 + 1.22937 0.749173 -1.68503 -0.906507 -0.398512 -0.139406 + 1.26282 0.667708 -1.69251 -0.9062 -0.407158 -0.114123 + 1.26595 0.671366 -1.67227 -0.836919 -0.412759 0.359439 + 1.27825 0.67452 -1.65169 -0.664823 -0.376757 0.645031 + 1.27087 0.755194 -1.61721 -0.333621 -0.357892 0.87213 + 1.27368 0.668865 -1.71566 -0.742318 -0.316019 -0.590843 + 1.30815 0.589689 -1.70631 -0.709063 -0.463714 -0.531224 + 1.30116 0.591384 -1.69213 -0.868888 -0.488436 -0.080394 + 1.30428 0.59504 -1.67189 -0.814595 -0.430454 0.388774 + 1.29539 0.670466 -1.73482 -0.48673 -0.224985 -0.844083 + 1.32986 0.59129 -1.72547 -0.436227 -0.387501 -0.812126 + 1.36343 0.516208 -1.69739 -0.366981 -0.587045 -0.721598 + 1.35373 0.515493 -1.68883 -0.616046 -0.636111 -0.464597 + 1.34673 0.517187 -1.67464 -0.777869 -0.626087 0.054178 + 1.32047 0.67448 -1.74446 -0.0934206 -0.10416 -0.990163 + 1.3448 0.594307 -1.7314 -0.0611467 -0.27569 -0.9593 + 1.37838 0.519222 -1.70333 0.0842907 -0.468101 -0.879646 + 1.38912 0.486813 -1.67833 0.225362 -0.925361 -0.304828 + 1.37942 0.486098 -1.66976 -0.211728 -0.969301 0.125008 + 1.34073 0.678825 -1.74158 0.385073 0.0304306 -0.922384 + 1.36507 0.59865 -1.72853 0.433895 -0.10473 -0.894855 + 1.38647 0.524618 -1.70224 0.520707 -0.25766 -0.813926 + 1.39721 0.492211 -1.67724 0.735598 -0.640528 -0.220498 + 1.34436 0.767888 -1.72333 0.746827 0.112378 -0.655455 + 1.36143 0.682262 -1.7248 0.74854 0.125395 -0.651125 + 1.37674 0.604702 -1.71822 0.768535 0.0509314 -0.637777 + 1.39814 0.53067 -1.69193 0.843978 -0.0967356 -0.527583 + 1.40171 0.501108 -1.66591 0.87014 -0.446797 0.207916 + 1.3389 0.837203 -1.72269 0.759674 -0.111511 -0.640673 + 1.36453 0.767713 -1.6887 0.932446 0.123349 -0.3396 + 1.37528 0.68783 -1.69886 0.922372 0.161819 -0.350778 + 1.39059 0.610268 -1.69228 0.933247 0.128924 -0.335304 + 1.40264 0.539568 -1.6806 0.963166 0.0223621 -0.267975 + 1.34636 0.894477 -1.73805 0.86535 -0.165577 -0.473027 + 1.35907 0.837027 -1.68806 0.955833 0.0249475 -0.292851 + 1.36923 0.768544 -1.66259 0.992958 0.0878036 0.0795294 + 1.37998 0.688661 -1.67276 0.986852 0.146617 0.0680247 + 1.39266 0.61482 -1.67623 0.982998 0.173677 0.0595979 + 1.3467 0.967896 -1.74254 0.960473 -0.0256225 -0.277191 + 1.35755 0.891501 -1.68179 0.986235 0.0156398 -0.164607 + 1.36263 0.889184 -1.64552 0.999993 -0.00243655 -0.00293139 + 1.36415 0.834711 -1.65179 0.994039 0.037213 0.102476 + 1.34702 1.05476 -1.75074 0.964219 0.107724 -0.242232 + 1.35789 0.964919 -1.68628 0.992226 0.0148382 -0.123562 + 1.36051 0.965594 -1.63921 0.99908 0.0394581 0.0167727 + 1.36025 0.886229 -1.61648 0.903254 -0.0813383 0.421327 + 1.35549 0.831554 -1.62663 0.849166 -0.0854645 0.521165 + 1.32535 1.05232 -1.80703 0.885253 0.0719435 -0.459513 + 1.31057 1.12024 -1.80749 0.807813 0.398079 -0.434709 + 1.33158 1.12212 -1.74451 0.89117 0.403837 -0.206715 + 1.353 1.05999 -1.68694 0.986423 0.142722 -0.0812388 + 1.35561 1.06066 -1.63986 0.988684 0.148389 0.0220381 + 1.28279 1.04467 -1.87168 0.769698 0.0132059 -0.638272 + 1.26801 1.1126 -1.87214 0.756012 0.297679 -0.582952 + 1.28331 1.16656 -1.78776 0.753863 0.573264 -0.321029 + 1.30432 1.16844 -1.72478 0.79082 0.592522 -0.153365 + 1.2981 0.965589 -1.83923 0.772878 -0.148182 -0.61701 + 1.26214 0.961948 -1.87438 0.582068 -0.220083 -0.78279 + 1.24683 1.04103 -1.90683 0.570824 -0.0947412 -0.815588 + 1.23062 1.10662 -1.91583 0.562232 0.208256 -0.800328 + 1.25114 1.17205 -1.85306 0.724346 0.49767 -0.477125 + 1.2885 0.895743 -1.82849 0.753784 -0.280068 -0.59445 + 1.26695 0.894931 -1.8507 0.592787 -0.275484 -0.756778 + 1.23039 0.959189 -1.88993 0.253063 -0.323021 -0.91193 + 1.20421 1.03673 -1.9268 0.223994 -0.222487 -0.948855 + 1.188 1.10233 -1.93581 0.196024 0.118531 -0.973409 + 1.26984 0.839253 -1.81832 0.801169 -0.1953 -0.565673 + 1.24829 0.838441 -1.84053 0.611811 -0.176999 -0.770946 + 1.23521 0.892172 -1.86625 0.265435 -0.291855 -0.918893 + 1.18494 0.955324 -1.88926 -0.114054 -0.398877 -0.909884 + 1.28079 0.764191 -1.79278 0.954485 0.125052 -0.270779 + 1.26993 0.764796 -1.81515 0.831109 0.0944805 -0.548024 + 1.25826 0.763103 -1.82955 0.656106 0.0562471 -0.75257 + 1.23163 0.837205 -1.85103 0.291033 -0.192085 -0.937232 + 1.30594 0.673894 -1.79039 0.934947 0.230086 -0.270064 + 1.29853 0.670716 -1.80716 0.826929 0.173397 -0.534903 + 1.28687 0.669023 -1.82156 0.660613 0.101342 -0.743855 + 1.24161 0.761868 -1.84005 0.301939 -0.0496857 -0.952031 + 1.20019 0.833142 -1.85179 -0.0964308 -0.198477 -0.97535 + 1.30777 0.674078 -1.7713 0.962334 0.258563 0.0840204 + 1.32925 0.58928 -1.76711 0.971405 0.225445 0.074475 + 1.32841 0.587097 -1.77896 0.947238 0.174707 -0.268732 + 1.321 0.583919 -1.79573 0.843154 0.108687 -0.526573 + 1.32451 0.590198 -1.75123 0.867958 0.230823 0.439739 + 1.34282 0.509307 -1.74687 0.886698 0.110139 0.449039 + 1.34511 0.507897 -1.75403 0.990643 0.0826856 0.108576 + 1.34427 0.505713 -1.76588 0.971849 0.0342016 -0.23311 + 1.33453 0.50927 -1.73622 0.693299 0.081291 0.71605 + 1.34088 0.46481 -1.74447 0.701632 -0.490993 0.51637 + 1.34317 0.463401 -1.75163 0.834988 -0.535899 0.124931 + 1.34128 0.502486 -1.77348 0.879749 -0.0511724 -0.472677 + 1.32646 0.508505 -1.73018 0.464579 0.0186363 0.885336 + 1.33281 0.464045 -1.73842 0.36434 -0.550687 0.750999 + 1.32487 0.461252 -1.73929 -0.00786567 -0.705549 0.708618 + 1.34018 0.460173 -1.75922 0.721272 -0.662768 -0.201258 + 1.3345 0.499472 -1.78246 0.726094 -0.132574 -0.674694 + 1.31338 0.506325 -1.72595 0.129204 -0.101559 0.986404 + 1.30544 0.503532 -1.72682 -0.146174 -0.223403 0.963703 + 1.29617 0.500936 -1.73006 -0.394578 -0.329484 0.857758 + 1.29293 0.498939 -1.73328 -0.632603 -0.459841 0.623185 + 1.32163 0.459255 -1.74252 -0.24603 -0.835576 0.491205 + 1.24991 0.578077 -1.73494 -0.702934 -0.376909 0.603178 + 1.24579 0.575573 -1.74439 -0.825597 -0.439372 0.354038 + 1.28881 0.496432 -1.74274 -0.763788 -0.516423 0.387214 + 1.2873 0.493385 -1.75131 -0.809403 -0.570089 0.140946 + 1.32012 0.456206 -1.75109 -0.339764 -0.928738 0.14834 + 1.20104 0.658888 -1.74681 -0.83228 -0.444679 0.331014 + 1.2417 0.572741 -1.76335 -0.874146 -0.479077 0.0797117 + 1.24419 0.570849 -1.77784 -0.837363 -0.48997 -0.242391 + 1.28979 0.491493 -1.7658 -0.781526 -0.592364 -0.19576 + 1.19694 0.656058 -1.76576 -0.883318 -0.466063 0.0503526 + 1.20059 0.656724 -1.78915 -0.846339 -0.45279 -0.280518 + 1.25483 0.570414 -1.79884 -0.672513 -0.459272 -0.580341 + 1.29473 0.490244 -1.77525 -0.630615 -0.591166 -0.50284 + 1.32506 0.454956 -1.76054 -0.126233 -0.945401 -0.300469 + 1.15065 0.7456 -1.76694 -0.871576 -0.49022 0.00625768 + 1.15429 0.746264 -1.79033 -0.844154 -0.43147 -0.31818 + 1.21123 0.656288 -1.81015 -0.690879 -0.400442 -0.601941 + 1.26701 0.571504 -1.80835 -0.361255 -0.372013 -0.855045 + 1.30691 0.491333 -1.78477 -0.284784 -0.517688 -0.806782 + 1.11669 0.810805 -1.72692 -0.746864 -0.610341 0.263964 + 1.11041 0.812285 -1.75226 -0.827491 -0.558442 -0.0583179 + 1.12004 0.816937 -1.78948 -0.810732 -0.443788 -0.381794 + 1.1686 0.750717 -1.8186 -0.687723 -0.344695 -0.638923 + 1.08468 0.856552 -1.69225 -0.722899 -0.621558 0.301797 + 1.07187 0.858508 -1.73225 -0.81501 -0.579183 -0.0174824 + 1.0815 0.863159 -1.76947 -0.784326 -0.452098 -0.424783 + 1.13435 0.821389 -1.81775 -0.698072 -0.302654 -0.648919 + 1.18862 0.753823 -1.83409 -0.393365 -0.244961 -0.886148 + 1.06112 0.918685 -1.64761 -0.648941 -0.505591 0.568554 + 1.03712 0.93285 -1.67943 -0.803525 -0.510116 0.306804 + 1.02432 0.934806 -1.71944 -0.861644 -0.50683 -0.0263222 + 1.04295 0.938143 -1.77506 -0.77018 -0.432909 -0.468414 + 1.12481 0.87388 -1.82472 -0.637052 -0.293299 -0.712839 + 1.00444 1.01455 -1.64558 -0.746856 -0.47727 0.463054 + 0.980447 1.02872 -1.6774 -0.856365 -0.450425 0.252501 + 0.961336 1.05217 -1.72489 -0.901465 -0.426153 -0.07586 + 0.979965 1.0555 -1.78051 -0.80676 -0.44746 -0.385897 + 1.08625 0.948863 -1.83031 -0.6332 -0.44364 -0.634224 + 1.02023 1.03424 -1.60761 -0.594641 -0.491949 0.635916 + 0.97869 1.06703 -1.63161 -0.791135 -0.441865 0.422918 + 0.965214 1.08835 -1.63965 -0.922307 -0.214208 0.321658 + 0.960016 1.09198 -1.65691 -0.943323 -0.173494 0.282914 + 0.9502 1.09972 -1.68082 -0.93635 -0.178899 0.302067 + 1.06552 1.02402 -1.58486 -0.428089 -0.457374 0.779454 + 0.992963 1.08999 -1.58691 -0.626555 -0.264091 0.73327 + 0.979487 1.11131 -1.59494 -0.843646 -0.079108 0.531039 + 0.966322 1.11954 -1.63973 -0.942605 0.107551 0.316115 + 1.15987 1.02611 -1.5406 -0.27684 -0.50029 0.820408 + 1.03826 1.07976 -1.56416 -0.472331 -0.504813 0.722542 + 0.985764 1.1241 -1.58551 -0.808884 0.152459 0.567858 + 0.972599 1.13233 -1.6303 -0.850327 0.404567 0.336556 + 1.2598 1.05241 -1.5329 0.346077 -0.101342 0.932717 + 1.2251 1.04822 -1.51723 0.302238 -0.561291 0.770458 + 1.17566 1.04028 -1.52032 -0.074169 -0.659413 0.748113 + 1.05405 1.09393 -1.54388 -0.435095 -0.581989 0.687009 + 1.01822 1.11649 -1.54903 -0.668494 -0.18548 0.720217 + 1.26669 0.996962 -1.53783 0.191982 -0.0791861 0.978199 + 1.31696 1.10538 -1.56332 0.666769 0.11968 0.735592 + 1.28649 1.12987 -1.54719 0.435305 0.353619 0.827927 + 1.25178 1.12568 -1.53153 0.431625 0.0910794 0.897443 + 1.32384 1.04994 -1.56825 0.642907 0.00888994 0.765893 + 1.33324 1.12961 -1.59089 0.818431 0.471312 0.328689 + 1.30278 1.15409 -1.57476 0.682287 0.52096 0.512919 + 1.24521 1.15922 -1.53065 0.498784 0.239579 0.832956 + 1.17813 1.08863 -1.50066 0.1363 -0.130833 0.98199 + 1.3307 0.948515 -1.57777 0.67135 -0.0722876 0.737607 + 1.35813 0.962637 -1.61017 0.923359 0.00169523 0.383934 + 1.35127 1.06406 -1.60065 0.915402 0.118461 0.384716 + 1.33758 1.12621 -1.6301 0.898998 0.43401 0.0586277 + 1.29003 0.878772 -1.56184 0.250202 -0.330333 0.910098 + 1.33586 0.882732 -1.59277 0.61858 -0.181907 0.764375 + 1.29043 0.824147 -1.59318 0.12362 -0.355734 0.926375 + 1.3311 0.828058 -1.60292 0.473589 -0.19945 0.857866 + 1.29862 0.759271 -1.61262 0.0570947 -0.26075 0.963717 + 1.33929 0.763181 -1.62236 0.432294 -0.151859 0.888853 + 1.36057 0.765387 -1.63744 0.795157 -0.0192338 0.606098 + 1.32291 0.684698 -1.63226 0.0576233 -0.174582 0.982955 + 1.35212 0.687546 -1.639 0.410493 -0.066075 0.909467 + 1.3734 0.68975 -1.65408 0.805779 0.0590131 0.589269 + 1.38608 0.61591 -1.65754 0.791353 0.145577 0.593775 + 1.29516 0.680623 -1.63684 -0.354644 -0.30368 0.884311 + 1.3278 0.606846 -1.64451 -0.362319 -0.227353 0.9039 + 1.34395 0.612136 -1.64165 0.0398257 -0.0732493 0.996518 + 1.37316 0.614981 -1.64839 0.411718 0.0550103 0.90965 + 1.40118 0.546766 -1.6563 0.792155 0.0704706 0.606238 + 1.31089 0.600744 -1.65936 -0.659093 -0.350419 0.665434 + 1.35974 0.535943 -1.64708 -0.303379 -0.251928 0.918963 + 1.37589 0.541235 -1.64422 0.0791505 -0.116121 0.990076 + 1.38826 0.545838 -1.64715 0.41253 -0.000709368 0.910944 + 1.35365 0.528329 -1.65332 -0.556322 -0.412501 0.721352 + 1.38582 0.499151 -1.65473 0.134339 -0.539775 0.831021 + 1.39819 0.503755 -1.65766 0.617782 -0.403418 0.674981 + 1.4047 0.544119 -1.66455 0.989441 0.0503563 0.135904 + 1.34704 0.522626 -1.66585 -0.734782 -0.502853 0.45523 + 1.37972 0.491535 -1.66098 -0.130943 -0.7598 0.636834 + 1.33756 1.12735 -1.6807 0.899008 0.433057 -0.0651639 + 1.30767 1.16744 -1.61603 0.751556 0.642952 0.14757 + 1.27484 1.19579 -1.60417 0.676003 0.692793 0.251113 + 1.26994 1.18244 -1.56291 0.594763 0.609173 0.524562 + 1.30765 1.16858 -1.66663 0.789852 0.613264 -0.00639229 + 1.27969 1.20389 -1.65681 0.750076 0.657762 0.06881 + 1.2503 1.22033 -1.60387 0.614372 0.724107 0.313396 + 1.22353 1.20559 -1.54599 0.490416 0.63407 0.597869 + 1.1988 1.18236 -1.51373 0.414068 0.322931 0.851037 + 1.27636 1.20376 -1.71496 0.727289 0.673415 -0.132524 + 1.25515 1.22844 -1.65651 0.599518 0.798301 0.0573963 + 1.2268 1.23779 -1.60672 0.443813 0.858264 0.257707 + 1.20004 1.22305 -1.54884 0.250062 0.813578 0.524937 + 1.25695 1.20615 -1.7733 0.709569 0.659615 -0.247832 + 1.24624 1.23292 -1.70978 0.563551 0.82102 -0.0913027 + 1.21478 1.24832 -1.69966 0.221589 0.973985 -0.0474401 + 1.2237 1.24384 -1.6464 0.380929 0.922439 0.0632341 + 1.19615 1.24703 -1.59924 0.00214134 0.971592 0.236654 + 1.22478 1.21164 -1.8386 0.583801 0.705317 -0.402125 + 1.22682 1.23532 -1.76812 0.509135 0.83909 -0.191594 + 1.19986 1.24786 -1.719 0.117689 0.993019 -0.00784904 + 1.17429 1.24694 -1.67216 -0.287387 0.954447 0.0802453 + 1.19304 1.25307 -1.63892 -0.113058 0.989083 0.0945102 + 1.21375 1.16608 -1.89675 0.525675 0.470143 -0.708965 + 1.19245 1.20432 -1.88267 0.427158 0.649849 -0.628675 + 1.19359 1.23505 -1.82475 0.382408 0.865841 -0.32262 + 1.15778 1.25235 -1.80808 0.309068 0.932818 -0.185276 + 1.19101 1.25262 -1.75145 0.222814 0.974623 -0.0215485 + 1.18154 1.14862 -1.92161 0.211974 0.368095 -0.905303 + 1.16024 1.18686 -1.90753 0.191426 0.484875 -0.853377 + 1.12959 1.21066 -1.89831 0.0964721 0.611775 -0.785127 + 1.16126 1.22772 -1.86882 0.293262 0.79612 -0.52933 + 1.13452 1.09375 -1.93653 -0.173957 0.000954272 -0.984753 + 1.12806 1.14005 -1.92234 -0.145607 0.229769 -0.962291 + 1.1199 1.1752 -1.91443 -0.0879885 0.265306 -0.960141 + 1.08924 1.199 -1.90521 -0.195084 0.408978 -0.891448 + 1.10685 1.23112 -1.87862 -0.10731 0.783951 -0.611479 + 1.15876 1.03287 -1.92612 -0.1449 -0.34348 -0.927914 + 1.07232 1.0927 -1.91396 -0.433302 -0.141605 -0.890055 + 1.05117 1.12854 -1.90297 -0.439325 0.0584886 -0.896422 + 1.04301 1.16369 -1.89506 -0.564069 0.298349 -0.769944 + 1.09656 1.03181 -1.90356 -0.430267 -0.417745 -0.800224 + 1.02003 1.09118 -1.87873 -0.662863 -0.295883 -0.687798 + 0.998882 1.12702 -1.86773 -0.717754 0.0474396 -0.694678 + 1.01517 1.16314 -1.85303 -0.622892 0.599402 -0.502715 + 1.06864 1.19837 -1.89783 -0.480862 0.453194 -0.750591 + 1.13972 0.947954 -1.87361 -0.401986 -0.434215 -0.806142 + 1.04309 1.03272 -1.86026 -0.659759 -0.491604 -0.568369 + 0.956901 1.11396 -1.79899 -0.830602 -0.345704 -0.436564 + 1.20377 0.888107 -1.86701 -0.0877738 -0.299745 -0.949973 + 1.15854 0.880738 -1.85136 -0.418316 -0.296385 -0.858584 + 1.16808 0.828247 -1.84439 -0.397459 -0.211075 -0.893014 + 1.22073 0.758715 -1.84149 -0.0593844 -0.141982 -0.988086 + 1.25427 0.662903 -1.83094 -0.052426 -0.170628 -0.98394 + 1.23124 0.659392 -1.82564 -0.368729 -0.282576 -0.885544 + 1.27515 0.666054 -1.82951 0.330582 -0.0332534 -0.943191 + 1.3025 0.577936 -1.81267 0.353378 -0.124558 -0.927151 + 1.29003 0.575013 -1.81366 -0.0180117 -0.257694 -0.966059 + 1.31703 0.493869 -1.78709 0.0330283 -0.419408 -0.907197 + 1.31422 0.580905 -1.80472 0.683558 0.0207569 -0.729601 + 1.3295 0.496792 -1.78609 0.421723 -0.289783 -0.859172 + 0.931089 1.12317 -1.72831 -0.978758 -0.194938 0.0634939 + 0.935857 1.13387 -1.77346 -0.919801 -0.247786 -0.304249 + 0.977838 1.14693 -1.8422 -0.713433 0.226004 -0.663276 + 0.931083 1.16012 -1.73146 -0.960069 0.198083 0.197561 + 0.935851 1.17081 -1.7766 -0.878816 0.325906 -0.348523 + 0.94695 1.18602 -1.7729 -0.48833 0.832204 -0.262623 + 0.988936 1.16213 -1.8385 -0.402617 0.708069 -0.580119 + 0.948877 1.13357 -1.68792 -0.892675 0.166538 0.418804 + 0.957499 1.15374 -1.6868 -0.638327 0.543842 0.54477 + 0.939705 1.18028 -1.73033 -0.675073 0.686574 0.269985 + 0.980251 1.19469 -1.75863 -0.12658 0.989644 -0.067691 + 1.00648 1.1957 -1.77317 0.157047 0.984631 -0.0764015 + 0.958693 1.12583 -1.66401 -0.923881 0.0713783 0.375965 + 0.959468 1.13722 -1.66512 -0.763965 0.448867 0.463547 + 0.961984 1.1384 -1.66464 -0.150821 0.847836 0.508357 + 0.960015 1.15492 -1.68632 -0.231263 0.714546 0.660259 + 0.973007 1.18895 -1.71607 -0.146352 0.885847 0.44029 + 0.961123 1.12317 -1.657 -0.944149 0.0637159 0.3233 + 0.961898 1.13456 -1.65811 -0.86494 0.328445 0.379478 + 0.962626 1.13559 -1.65822 -0.384087 0.851115 0.357884 + 0.98726 1.13431 -1.66458 0.0946759 0.976704 0.192577 + 0.986618 1.13712 -1.671 0.171918 0.817894 0.549084 + 0.973326 1.13336 -1.63041 -0.460195 0.867698 0.187938 + 0.999435 1.13483 -1.64199 -0.00800085 0.998667 -0.0509874 + 1.03512 1.1309 -1.67772 0.0963545 0.98406 0.149475 + 0.999891 1.13813 -1.5774 -0.449345 0.806446 0.384361 + 1.026 1.1396 -1.58897 -0.0212212 0.999774 0.00117188 + 1.04729 1.13142 -1.65514 0.0204046 0.996962 -0.0751674 + 1.0614 1.12998 -1.68476 -0.107709 0.976572 0.186297 + 1.03405 1.1332 -1.68362 0.191697 0.818682 0.541306 + 1.03235 1.13051 -1.54092 -0.497561 0.542741 0.676657 + 1.05145 1.14076 -1.55772 -0.105228 0.99035 0.0901874 + 1.06772 1.13385 -1.63014 0.00884612 0.99668 -0.0809341 + 1.07244 1.1308 -1.6701 -0.214586 0.972134 0.0943835 + 1.09287 1.10325 -1.50889 -0.492499 -0.384104 0.780967 + 1.05394 1.13424 -1.52692 -0.446676 0.563416 0.695013 + 1.10211 1.13791 -1.52383 -0.0537607 0.994807 0.0864238 + 1.09734 1.13528 -1.58575 -0.00605762 0.999704 -0.0235447 + 1.09318 1.13501 -1.59889 0.022918 0.998904 -0.0407987 + 1.12869 1.08069 -1.50374 -0.232114 -0.536396 0.81142 + 1.11446 1.10698 -1.49489 -0.29937 -0.314541 0.9008 + 1.1046 1.13139 -1.49304 -0.458934 0.390508 0.798049 + 1.11791 1.13865 -1.51295 -0.446601 0.894469 0.0217219 + 1.11314 1.13602 -1.57487 -0.342866 0.939144 0.0212346 + 1.17155 1.12216 -1.49978 0.307449 -0.0241423 0.951258 + 1.14372 1.11795 -1.48887 0.186679 -0.223078 0.956759 + 1.13386 1.14237 -1.48701 -0.186214 0.291295 0.938334 + 1.12653 1.14606 -1.50415 -0.647431 0.753133 0.116726 + 1.17096 1.17815 -1.50282 0.236949 0.209959 0.948563 + 1.13805 1.15763 -1.49276 -0.478373 0.620586 0.621315 + 1.14895 1.16741 -1.52325 -0.744014 0.665116 0.0637527 + 1.1304 1.14888 -1.5377 -0.672577 0.739937 -0.01153 + 1.12178 1.14147 -1.54651 -0.60311 0.797593 0.0102085 + 1.17515 1.19341 -1.50857 -0.165826 0.67002 0.723585 + 1.16047 1.17898 -1.51187 -0.726234 0.6837 0.0716787 + 1.15501 1.17947 -1.53944 -0.797237 0.557654 0.231161 + 1.13354 1.15178 -1.54357 -0.741743 0.66919 0.0447282 + 1.12783 1.14665 -1.55347 -0.646818 0.76134 0.0445799 + 1.18622 1.21333 -1.53064 -0.11433 0.781566 0.613256 + 1.17154 1.19889 -1.53394 -0.721351 0.623456 0.301588 + 1.18233 1.23731 -1.58105 -0.372176 0.833383 0.408606 + 1.16642 1.2016 -1.54698 -0.717277 0.584391 0.379476 + 1.15433 1.20203 -1.57527 -0.828045 0.486584 0.278528 + 1.13898 1.16529 -1.56371 -0.841731 0.46904 0.267378 + 1.1396 1.16384 -1.55976 -0.828227 0.508822 0.234821 + 1.17721 1.24002 -1.59409 -0.507342 0.841389 0.186192 + 1.16573 1.22416 -1.58282 -0.700347 0.634798 0.326414 + 1.14814 1.19983 -1.59413 -0.864127 0.455548 0.213915 + 1.13279 1.16309 -1.58257 -0.864448 0.461387 0.199629 + 1.13034 1.15099 -1.56329 -0.768774 0.601694 0.216682 + 1.16328 1.23237 -1.62663 -0.61144 0.773041 0.168965 + 1.1518 1.21652 -1.61535 -0.814916 0.539121 0.212746 + 1.12289 1.15684 -1.61507 -0.859806 0.468007 0.204214 + 1.12508 1.14782 -1.57819 -0.802741 0.578767 0.143649 + 1.14452 1.22624 -1.65987 -0.706122 0.636983 0.309264 + 1.12523 1.17286 -1.63994 -0.843051 0.441654 0.306933 + 1.12654 1.17353 -1.6363 -0.875013 0.431726 0.219009 + 1.11518 1.14157 -1.61069 -0.797432 0.584675 0.149189 + 1.15936 1.24648 -1.6915 -0.0984614 0.978831 0.179428 + 1.14441 1.24339 -1.68242 -0.331272 0.812617 0.479492 + 1.14005 1.23548 -1.6827 -0.773546 0.460447 0.435449 + 1.14016 1.21833 -1.66015 -0.806717 0.448639 0.384619 + 1.15559 1.24705 -1.69839 -0.0439641 0.990115 0.13319 + 1.14064 1.24395 -1.68931 -0.571651 0.786284 0.234463 + 1.1216 1.21657 -1.69108 -0.697917 0.530416 0.481218 + 1.12101 1.20809 -1.68446 -0.733733 0.458449 0.501458 + 1.12257 1.19901 -1.67431 -0.765486 0.439666 0.469813 + 1.14674 1.25181 -1.73084 -0.102324 0.967737 0.230249 + 1.11538 1.23673 -1.7187 -0.460284 0.699311 0.546903 + 1.08343 1.1595 -1.69198 -0.731771 0.490975 0.47271 + 1.08845 1.16054 -1.68583 -0.704059 0.484914 0.518805 + 1.12011 1.26981 -1.78105 0.0548266 0.989651 0.132607 + 1.08874 1.25473 -1.76892 -0.693427 0.627103 0.354825 + 1.08338 1.23484 -1.76714 -0.855613 0.392694 0.337221 + 1.0772 1.17965 -1.71961 -0.78087 0.436185 0.447197 + 1.13853 1.24819 -1.84913 0.252862 0.868842 -0.425647 + 1.10086 1.26565 -1.8221 -0.0780995 0.936389 -0.342164 + 1.08652 1.26484 -1.8125 -0.662975 0.739671 -0.115547 + 1.08115 1.24495 -1.81071 -0.910834 0.409938 -0.0483 + 1.09251 1.23031 -1.86901 -0.530404 0.739301 -0.414857 + 1.07628 1.23323 -1.82709 -0.716986 0.673658 -0.179208 + 1.06911 1.22632 -1.80518 -0.884144 0.459173 0.0863142 + 1.07014 1.21301 -1.77236 -0.888492 0.383056 0.252684 + 1.06396 1.15782 -1.72483 -0.827479 0.429374 0.361824 + 1.08764 1.2186 -1.8854 -0.276174 0.767923 -0.577946 + 1.06703 1.21797 -1.87802 -0.512825 0.767519 -0.38461 + 1.05986 1.21106 -1.85611 -0.890276 0.450345 -0.0678118 + 1.05896 1.19094 -1.79776 -0.929683 0.342675 0.13514 + 1.05999 1.17763 -1.76494 -0.910434 0.353713 0.214469 + 1.04079 1.19782 -1.85581 -0.544305 0.834781 -0.0829051 + 1.05504 1.19843 -1.85259 -0.564073 0.763002 0.315673 + 1.05414 1.17831 -1.79423 -0.653776 0.706785 0.270245 + 1.05545 1.16187 -1.75467 -0.590011 0.717794 0.369674 + 1.05943 1.14206 -1.71456 -0.366442 0.819707 0.440228 + 1.03559 1.17519 -1.79432 0.317053 0.912267 0.259317 + 1.04984 1.1758 -1.7911 -0.138394 0.940918 0.309064 + 1.05115 1.15936 -1.75153 0.231955 0.894033 0.383278 + 1.05648 1.14191 -1.71326 0.321558 0.868807 0.37653 + 1.06328 1.13243 -1.69196 -0.337153 0.854265 0.395677 + 1.00964 1.18895 -1.7286 0.318432 0.90407 0.285059 + 1.03874 1.16844 -1.74975 0.590607 0.78108 0.202727 + 1.04408 1.15099 -1.71148 0.560772 0.694133 0.451347 + 1.03005 1.14648 -1.69451 0.338196 0.687524 0.642599 + 1.06034 1.13228 -1.69065 0.173358 0.90809 0.381208 + 0.995607 1.18444 -1.71163 0.195642 0.805308 0.559646 + 0.982616 1.1504 -1.68189 0.092698 0.640677 0.762195 + 1.06831 1.13347 -1.6858 -0.575276 0.724091 0.38046 + 1.09001 1.15145 -1.67567 -0.685546 0.508367 0.521142 + 1.10764 1.15354 -1.6541 -0.743202 0.49384 0.451412 + 1.07935 1.13428 -1.67115 -0.556622 0.739256 0.37904 + 1.09697 1.13638 -1.64958 -0.572935 0.733111 0.36646 + 1.10786 1.13774 -1.63375 -0.676676 0.692175 0.251005 + 1.10917 1.13841 -1.6301 -0.747052 0.644488 0.162936 + 1.09287 1.13322 -1.6451 -0.233288 0.968642 0.0854976 + 1.10375 1.13459 -1.62927 -0.296519 0.951917 0.0770099 + 1.10792 1.13486 -1.61614 -0.396428 0.916976 0.0447292 + 1.11393 1.13803 -1.59673 -0.516961 0.854926 0.043042 + 1.12257 1.14348 -1.56836 -0.685363 0.723943 0.07863 + 1.13097 1.14954 -1.55934 -0.581345 0.772665 0.255004 + 1.33518 0.457491 -1.76285 0.387157 -0.813576 -0.433825 + -0.700788 1.60693 -3.09201 0.87201 0.456421 0.176857 + -0.700286 1.60496 -3.09226 0.792166 0.124176 0.597539 + -0.696261 1.60389 -3.09632 0.75288 0.497834 -0.430503 + -0.713785 1.62766 -3.06485 0.678695 0.713623 -0.173537 + -0.702351 1.60795 -3.09721 0.764365 0.640976 -0.0699637 + -0.721527 1.63887 -3.08342 0.817512 0.56768 -0.0970227 + -0.719965 1.63784 -3.07821 0.830319 0.549856 -0.0907127 + -0.714287 1.62963 -3.06459 0.919042 0.367061 0.143628 + -0.698218 1.60237 -3.10074 0.882124 0.319834 -0.345778 + -0.710325 1.62074 -3.11096 0.879372 0.475631 -0.0219134 + -0.714458 1.62632 -3.10743 0.825694 0.563981 0.012463 + -0.762133 1.69675 -3.08184 0.679542 0.710222 -0.183868 + -0.697173 1.59291 -3.09688 0.817646 0.0776346 -0.570463 + -0.695999 1.5703 -3.11698 0.986147 0.1404 -0.0883226 + -0.713731 1.62839 -3.14112 0.839795 0.437362 -0.32165 + -0.755063 1.6842 -3.10586 0.730315 0.675564 -0.10126 + -0.688751 1.58509 -3.09346 0.483798 0.0783854 -0.871662 + -0.689663 1.57411 -3.09402 0.741627 0.0952044 -0.664023 + -0.694954 1.56084 -3.11312 0.978316 0.0897861 -0.186645 + -0.699405 1.57794 -3.14714 0.891748 0.207378 -0.402218 + -0.697311 1.61823 -3.08077 -0.197968 0.57859 -0.791229 + -0.674551 1.60644 -3.08384 0.623596 0.245119 -0.742324 + -0.683668 1.49664 -3.08943 0.938475 -0.0149984 -0.345021 + -0.68896 1.48336 -3.10853 0.984847 0.0140192 -0.172859 + -0.694389 1.50268 -3.15615 0.900856 0.0805795 -0.426573 + -0.700286 1.60496 -3.09226 -0.421139 0.65229 -0.630206 + -0.701336 1.61931 -3.07671 -0.328939 0.679388 -0.655921 + -0.683112 1.63959 -3.07115 0.224761 0.653228 -0.723032 + -0.666173 1.60744 -3.06324 0.955854 0.117313 -0.269409 + -0.67529 1.49763 -3.06883 0.964503 -0.0654329 -0.255836 + -0.686728 1.39615 -3.08333 0.977257 -0.0740926 -0.198693 + -0.723359 1.65031 -3.03058 -0.138716 0.81918 -0.556508 + -0.726764 1.6649 -3.00715 0.0886504 0.983024 -0.160638 + -0.686517 1.65418 -3.04772 0.11062 0.929914 -0.350747 + -0.671291 1.64734 -3.04513 0.759615 0.620625 -0.194446 + -0.660742 1.59762 -3.01491 0.998512 0.0457029 -0.0297487 + -0.735808 1.65866 -3.01872 0.666743 0.734097 -0.128668 + -0.762929 1.68282 -2.988 0.661077 0.346894 0.665314 + -0.76146 1.66694 -2.97721 0.502776 0.643523 0.577144 + -0.744332 1.65545 -2.97188 0.149607 0.885156 0.440587 + -0.710988 1.66406 -2.99897 0.186712 0.974499 0.124456 + -0.740829 1.67833 -3.01615 0.863698 0.403629 0.301843 + -0.76795 1.70249 -2.98543 0.604639 0.564535 0.561882 + -0.810379 1.70534 -2.96548 0.234079 0.696843 0.677951 + -0.80891 1.68947 -2.95469 0.316091 0.624754 0.713981 + -0.746507 1.68655 -3.02977 0.764846 0.644089 -0.0126078 + -0.784145 1.71184 -2.99598 0.309967 0.926418 0.213707 + -0.826574 1.71469 -2.97603 -0.0946936 0.911122 0.40111 + -0.848521 1.68754 -2.95309 -0.531113 0.545634 0.64823 + -0.790836 1.72448 -3.07206 0.277811 0.945056 -0.172307 + -0.77521 1.71429 -3.01999 0.481611 0.861845 0.158979 + -0.827708 1.72022 -3.03019 -0.140146 0.986951 0.0792854 + -0.8513 1.71244 -3.03504 -0.559275 0.828597 -0.0252733 + -0.850166 1.70692 -2.98088 -0.588849 0.746378 0.310125 + -0.80354 1.71436 -3.10247 0.0154224 0.882826 -0.469447 + -0.818774 1.72266 -3.0542 -0.165976 0.985525 -0.0345319 + -0.854737 1.70418 -3.06709 -0.635124 0.741478 -0.216395 + -0.878514 1.68074 -3.01539 -0.885677 0.449688 0.115577 + -0.876869 1.66136 -2.98761 -0.881197 0.294044 0.370176 + -0.773682 1.70236 -3.1145 0.415285 0.887866 -0.198074 + -0.805723 1.6918 -3.12458 -0.0900347 0.638744 -0.764134 + -0.840653 1.68224 -3.12658 -0.394434 0.629292 -0.669637 + -0.831478 1.71254 -3.0846 -0.398061 0.861189 -0.31607 + -0.73235 1.64655 -3.14976 0.513004 0.593254 -0.620384 + -0.775865 1.6798 -3.13661 0.0795118 0.603871 -0.793106 + -0.811574 1.65329 -3.14786 -0.102929 0.430473 -0.896716 + -0.733622 1.62154 -3.16383 0.350697 0.329787 -0.8765 + -0.777137 1.65479 -3.15069 -0.00986803 0.439864 -0.89801 + -0.813206 1.60082 -3.16797 -0.161349 0.265461 -0.950525 + -0.85692 1.595 -3.15879 -0.477052 0.227239 -0.848989 + -0.846504 1.64373 -3.14987 -0.360266 0.361162 -0.860099 + -0.724048 1.56911 -3.1729 0.411711 0.179164 -0.893529 + -0.778768 1.60233 -3.1708 -0.0260258 0.256338 -0.966236 + -0.813673 1.53427 -3.17938 -0.128089 0.119226 -0.98457 + -0.719033 1.49384 -3.18192 0.404354 0.0846973 -0.910673 + -0.769195 1.54989 -3.17987 0.0139145 0.128051 -0.99167 + -0.808316 1.45694 -3.18447 -0.0547645 0.046343 -0.997423 + -0.852566 1.44075 -3.18167 -0.393856 0.030329 -0.918672 + -0.857387 1.52845 -3.17019 -0.4561 0.122059 -0.881518 + -0.693939 1.4298 -3.16189 0.897554 -0.0132109 -0.440707 + -0.716485 1.43006 -3.18433 0.416663 0.00902267 -0.909016 + -0.763838 1.47256 -3.18497 0.00751894 0.0515189 -0.998644 + -0.76129 1.40878 -3.18738 0.0179453 -0.015389 -0.999721 + -0.801582 1.39762 -3.18654 -0.0330196 -0.0281901 -0.999057 + -0.68851 1.41049 -3.11426 0.993445 -0.0466734 -0.104351 + -0.694726 1.36325 -3.12214 0.991643 -0.0796369 -0.1015 + -0.69819 1.36955 -3.16113 0.901623 -0.0574822 -0.428686 + -0.720736 1.36981 -3.18358 0.383088 -0.057623 -0.921913 + -0.692944 1.34892 -3.0912 0.988056 -0.150464 -0.0332515 + -0.698909 1.27668 -3.09442 0.995134 -0.0496643 0.0850939 + -0.698506 1.28133 -3.1216 0.998452 -0.0355661 -0.0427657 + -0.70197 1.28763 -3.1606 0.89746 -0.0489395 -0.438373 + -0.684572 1.36835 -3.06714 0.953507 -0.295606 0.0586556 + -0.696866 1.34501 -3.07027 0.914862 -0.299159 0.271168 + -0.70283 1.27277 -3.07349 0.941181 -0.0619246 0.332179 + -0.679223 1.43047 -3.06729 0.92128 0.018115 -0.388478 + -0.677067 1.40267 -3.05111 0.970728 -0.214989 0.107085 + -0.703187 1.35996 -3.03439 0.790129 -0.399228 0.465095 + -0.715481 1.33661 -3.03751 0.823762 -0.289854 0.487238 + -0.717646 1.267 -3.04741 0.83722 -0.0679653 0.542626 + -0.675092 1.47307 -3.05471 0.984177 -0.0643738 -0.165081 + -0.669514 1.46659 -3.01935 0.966297 -0.190461 0.173189 + -0.688425 1.47104 -2.98324 0.753977 -0.323037 0.571984 + -0.695978 1.40712 -3.015 0.770471 -0.342081 0.537916 + -0.660545 1.57306 -3.00079 0.990586 -0.0330301 0.132844 + -0.665383 1.50919 -3.00677 0.984457 -0.120521 0.127743 + -0.675449 1.52296 -2.97583 0.830708 -0.177822 0.527544 + -0.728331 1.47624 -2.93836 0.664829 -0.308652 0.680247 + -0.665861 1.63752 -2.9968 0.852699 0.476346 0.214474 + -0.678778 1.63089 -2.96438 0.74837 0.433046 0.502407 + -0.683725 1.60477 -2.95156 0.800462 0.0485411 0.597414 + -0.670611 1.58683 -2.96985 0.909758 0.226955 0.347608 + -0.715355 1.52815 -2.93095 0.699701 -0.20971 0.682965 + -0.695763 1.65722 -2.99638 0.454934 0.8663 0.206297 + -0.70868 1.65059 -2.96396 0.341868 0.822353 0.45482 + -0.722961 1.62083 -2.91547 0.463381 0.545157 0.698629 + -0.727908 1.5947 -2.90265 0.633652 0.0798204 0.769489 + -0.728557 1.65461 -2.9637 0.0113152 0.90852 0.417688 + -0.742838 1.62485 -2.91521 -0.037868 0.83699 0.545906 + -0.752843 1.61059 -2.89508 0.0477925 0.635702 0.770454 + -0.750816 1.58804 -2.88577 0.300055 0.114677 0.947004 + -0.72847 1.54609 -2.91265 0.672044 -0.190225 0.715661 + -0.750278 1.63944 -2.94596 -0.0419403 0.82293 0.566594 + -0.750129 1.63638 -2.94029 -0.196128 0.856373 0.47766 + -0.760134 1.62211 -2.92016 -0.272601 0.828617 0.488961 + -0.777383 1.60064 -2.89336 -0.0725441 0.524825 0.848113 + -0.767406 1.65093 -2.95128 0.464054 0.686469 0.559834 + -0.759055 1.63552 -2.94107 0.235389 0.788655 0.567992 + -0.758906 1.63246 -2.93541 -0.0561691 0.788152 0.612912 + -0.76136 1.63146 -2.93523 0.0293959 0.697708 0.715779 + -0.762588 1.62112 -2.91999 -0.0550318 0.817711 0.572993 + -0.772151 1.65318 -2.94903 0.50303 0.628038 0.593741 + -0.7638 1.63777 -2.93882 0.437651 0.643943 0.627535 + -0.780306 1.6323 -2.92608 0.362909 0.634026 0.682868 + -0.795101 1.61183 -2.89945 0.0527002 0.497856 0.865657 + -0.819506 1.67489 -2.93533 0.0561581 0.616276 0.785525 + -0.782747 1.63861 -2.92967 0.424833 0.578091 0.696655 + -0.815706 1.62228 -2.90612 -0.178331 0.424784 0.887556 + -0.812919 1.58737 -2.89387 -0.329742 -0.00853355 0.944033 + -0.775356 1.57809 -2.88406 -0.0982588 0.0244805 0.99486 + -0.844721 1.63493 -2.92389 -0.610742 0.334372 0.717767 + -0.833524 1.59783 -2.90054 -0.501494 0.00354065 0.865154 + -0.856485 1.57603 -2.93009 -0.739695 -0.15111 0.655757 + -0.853575 1.52989 -2.94193 -0.728686 -0.230587 0.644861 + -0.810009 1.54124 -2.90571 -0.505813 -0.202465 0.838547 + -0.883256 1.63656 -2.98772 -0.932027 0.164436 0.322934 + -0.851108 1.61012 -2.92401 -0.798286 0.13481 0.586997 + -0.874069 1.58832 -2.95356 -0.88325 0.00170727 0.4689 + -0.883002 1.55814 -2.981 -0.944823 -0.13053 0.30045 + -0.844819 1.45278 -2.96066 -0.762443 -0.236235 0.602389 + -0.892188 1.60638 -3.01517 -0.979897 0.0684396 0.187397 + -0.88195 1.67248 -3.04744 -0.903471 0.421792 -0.0763669 + -0.892555 1.63829 -3.06061 -0.96299 0.264708 -0.0507928 + -0.899933 1.55969 -3.04404 -0.977814 -0.00851941 0.209302 + -0.874246 1.48103 -2.99973 -0.895229 -0.163218 0.414637 + -0.863912 1.67388 -3.10907 -0.735786 0.533196 -0.417517 + -0.874516 1.63969 -3.12224 -0.805323 0.351388 -0.477473 + -0.9003 1.5916 -3.08948 -0.976471 0.154134 -0.15082 + -0.902105 1.51138 -3.06534 -0.985345 -0.0566175 0.1609 + -0.884932 1.59097 -3.13117 -0.833899 0.194448 -0.51653 + -0.886875 1.52234 -3.145 -0.828293 0.0661672 -0.556374 + -0.902243 1.52298 -3.10331 -0.983168 0.0133235 -0.182215 + -0.896536 1.41999 -3.07138 -0.969009 -0.152395 0.194414 + -0.876418 1.43272 -3.02103 -0.872716 -0.171951 0.456947 + -0.882054 1.43465 -3.15648 -0.834092 -0.0343469 -0.550555 + -0.896673 1.43159 -3.10936 -0.981895 -0.088221 -0.167628 + -0.886844 1.37081 -3.11415 -0.946378 -0.294861 -0.13201 + -0.883944 1.37025 -3.07144 -0.901172 -0.352952 0.251623 + -0.863826 1.38298 -3.02108 -0.797005 -0.327477 0.507485 + -0.845832 1.38144 -3.18374 -0.365779 -0.13663 -0.920618 + -0.872225 1.37387 -3.16127 -0.788234 -0.246012 -0.564062 + -0.859534 1.34392 -3.15667 -0.77261 -0.284055 -0.567791 + -0.870607 1.33676 -3.1204 -0.942007 -0.299468 -0.151464 + -0.867707 1.3362 -3.07768 -0.91754 -0.325362 0.228605 + -0.797511 1.35535 -3.18285 -0.0383612 -0.0950201 -0.994736 + -0.833141 1.35149 -3.17915 -0.33025 -0.201621 -0.922108 + -0.757219 1.36651 -3.18369 0.00559388 -0.0770702 -0.99701 + -0.756405 1.28568 -3.17829 -0.0128796 -0.0767177 -0.99697 + -0.788812 1.28247 -3.17667 -0.0668274 -0.0866222 -0.993997 + -0.824442 1.2786 -3.17296 -0.375244 -0.117156 -0.919492 + -0.845429 1.27364 -3.155 -0.806172 -0.15623 -0.570682 + -0.719922 1.28898 -3.17817 0.382609 -0.0673176 -0.921455 + -0.721898 1.17826 -3.1696 0.381692 -0.0653494 -0.921976 + -0.750995 1.17563 -3.16969 -0.0169892 -0.0626134 -0.997893 + -0.783401 1.17241 -3.16807 -0.0691604 -0.0628298 -0.995625 + -0.703946 1.17691 -3.15202 0.903222 -0.0484222 -0.426432 + -0.707888 1.07356 -3.14842 0.923046 -0.0505435 -0.381355 + -0.72109 1.07123 -3.16464 0.441413 -0.0515657 -0.895821 + -0.750186 1.0686 -3.16473 1.25246e-005 -0.0283135 -0.999599 + -0.701184 1.17188 -3.12093 0.998569 -0.0326852 -0.0423313 + -0.705125 1.06853 -3.11732 0.998025 -0.049581 -0.0385655 + -0.710884 0.972315 -3.11638 0.997622 -0.0573218 -0.038262 + -0.713241 0.976547 -3.1442 0.924653 -0.0672904 -0.374817 + -0.726443 0.974225 -3.16042 0.551747 -0.042467 -0.832929 + -0.701586 1.16723 -3.09375 0.993363 -0.0320286 0.110476 + -0.705752 1.06448 -3.09411 0.992459 -0.0490947 0.112318 + -0.711511 0.968265 -3.09316 0.991759 -0.0566243 0.114921 + -0.716751 0.87302 -3.09366 0.990209 -0.0530098 0.12914 + -0.715786 0.876178 -3.11125 0.998434 -0.0512606 -0.0224004 + -0.705499 1.16387 -3.07604 0.936145 -0.0328721 0.350075 + -0.709665 1.06112 -3.07641 0.941353 -0.0471569 0.334113 + -0.715225 0.964675 -3.07691 0.941111 -0.053516 0.333834 + -0.720464 0.869428 -3.07741 0.948357 -0.0567908 0.312079 + -0.720315 1.1581 -3.04997 0.833103 -0.0337943 0.552084 + -0.720112 1.05203 -3.05692 0.845269 -0.04334 0.532581 + -0.725672 0.955581 -3.05743 0.859626 -0.0495315 0.508517 + -0.726842 0.85972 -3.0645 0.874302 -0.0569026 0.482035 + -0.72532 0.775814 -3.08118 0.935201 -0.0985868 0.340116 + -0.742695 1.15122 -3.02139 0.553754 -0.0650853 0.830133 + -0.742493 1.04514 -3.02834 0.494536 -0.0672188 0.866554 + -0.737453 0.933047 -3.04199 0.534197 -0.0828218 0.841293 + -0.738623 0.837186 -3.04907 0.48591 -0.0853355 0.869833 + -0.746692 1.25807 -3.01032 0.552602 -0.09964 0.827467 + -0.775955 1.25415 -3.0029 -0.1075 -0.151712 0.982561 + -0.771958 1.1473 -3.01397 -0.122854 -0.111231 0.986172 + -0.764642 1.03836 -3.02585 -0.175392 -0.124385 0.976609 + -0.744527 1.32767 -3.00042 0.569215 -0.276986 0.774127 + -0.783702 1.33029 -2.9878 -0.108099 -0.376409 0.920126 + -0.812463 1.25423 -3.02293 -0.611576 -0.165372 0.77371 + -0.801073 1.14736 -3.02995 -0.607806 -0.119498 0.785043 + -0.793758 1.03842 -3.04183 -0.597205 -0.143892 0.789076 + -0.746833 1.36701 -2.97759 0.50708 -0.430176 0.746872 + -0.786007 1.36963 -2.96497 -0.146804 -0.558744 0.816243 + -0.82021 1.33037 -3.00783 -0.591072 -0.326004 0.737804 + -0.836586 1.25639 -3.04862 -0.825053 -0.166857 0.539857 + -0.739624 1.41418 -2.9582 0.61681 -0.390308 0.683524 + -0.784733 1.39524 -2.94443 0.0154982 -0.666832 0.745047 + -0.833503 1.38189 -2.98836 -0.592472 -0.454608 0.665062 + -0.850533 1.33146 -3.04056 -0.808966 -0.298991 0.506141 + -0.75727 1.49267 -2.90546 0.478589 -0.229456 0.847527 + -0.768564 1.43061 -2.9253 0.547875 -0.475624 0.688197 + -0.792961 1.41006 -2.92624 -0.171974 -0.606727 0.776085 + -0.832229 1.40751 -2.96782 -0.642983 -0.420387 0.640194 + -0.751378 1.53942 -2.89578 0.401628 -0.223447 0.888125 + -0.781249 1.53134 -2.89374 -0.161111 -0.182067 0.969997 + -0.776791 1.44544 -2.90711 0.1735 -0.356821 0.91792 + -0.805551 1.45534 -2.91908 -0.583928 -0.211372 0.783805 + -0.85376 1.26113 -3.08574 -0.960066 -0.167307 0.224236 + -0.838893 1.1533 -3.08524 -0.962806 -0.122283 0.240939 + -0.825197 1.14953 -3.05563 -0.828872 -0.120879 0.546223 + -0.856502 1.26648 -3.11872 -0.977335 -0.16589 -0.131519 + -0.841635 1.15865 -3.11822 -0.98418 -0.122884 -0.127629 + -0.829853 1.05014 -3.11636 -0.987791 -0.100641 -0.118913 + -0.82755 1.04513 -3.0913 -0.964916 -0.105535 0.240416 + -0.813854 1.04135 -3.06169 -0.814651 -0.125386 0.566235 + -0.832804 1.16437 -3.14715 -0.822315 -0.115083 -0.557273 + -0.821023 1.05585 -3.14529 -0.833394 -0.0887406 -0.545508 + -0.81167 0.946961 -3.14421 -0.831525 -0.101834 -0.546074 + -0.819573 0.942088 -3.11833 -0.985849 -0.111316 -0.125341 + -0.81727 0.937079 -3.09327 -0.936686 -0.125531 0.326895 + -0.811817 1.16932 -3.16512 -0.379046 -0.0868437 -0.921294 + -0.803682 1.05969 -3.16112 -0.406789 -0.0495096 -0.912179 + -0.794329 0.950801 -3.16004 -0.452282 -0.0774234 -0.888508 + -0.786447 0.851142 -3.15179 -0.440704 -0.160811 -0.883131 + -0.79914 0.848498 -3.14022 -0.814523 -0.168243 -0.5552 + -0.775266 1.06278 -3.16408 -0.0622994 -0.0139068 -0.997961 + -0.770114 0.952483 -3.16563 -0.113135 -0.0522288 -0.992206 + -0.762232 0.852825 -3.15737 -0.0708876 -0.156051 -0.985202 + -0.745035 0.958311 -3.16628 0.165553 -0.042963 -0.985265 + -0.745119 0.859859 -3.15731 0.220004 -0.131641 -0.966576 + -0.758657 0.762938 -3.13818 0.0550191 -0.328372 -0.942945 + -0.772999 0.76158 -3.13749 -0.313277 -0.317313 -0.895081 + -0.785692 0.758936 -3.12592 -0.779879 -0.303734 -0.547297 + -0.726527 0.875771 -3.15145 0.637624 -0.0976846 -0.764129 + -0.73024 0.779145 -3.13746 0.579893 -0.229939 -0.78157 + -0.741544 0.769971 -3.13812 0.226529 -0.320206 -0.919866 + -0.740176 0.721669 -3.11429 0.417408 -0.711078 -0.565807 + -0.755709 0.715314 -3.11404 0.172148 -0.797448 -0.578309 + -0.718143 0.880408 -3.13907 0.939885 -0.0677119 -0.33471 + -0.721855 0.783783 -3.12507 0.940257 -0.12797 -0.315498 + -0.728872 0.730843 -3.11363 0.755628 -0.465799 -0.460497 + -0.727586 0.728534 -3.09845 0.8942 -0.447648 0.00409192 + -0.737605 0.715827 -3.07849 0.597383 -0.684818 0.417323 + -0.720568 0.781473 -3.10989 0.994763 -0.0961954 -0.0345439 + -0.721533 0.778315 -3.0923 0.979906 -0.0915413 0.177214 + -0.731373 0.726032 -3.08733 0.918867 -0.247338 0.307421 + -0.73793 0.755901 -3.05943 0.541771 -0.217753 0.81183 + -0.752399 0.748231 -3.05953 -0.118103 -0.297788 0.947298 + -0.753137 0.709472 -3.07824 0.0544323 -0.869105 0.491624 + -0.774364 0.711295 -3.09923 -0.605963 -0.794246 -0.044521 + -0.770051 0.713956 -3.11335 -0.357824 -0.752905 -0.552355 + -0.731699 0.766105 -3.06827 0.893625 -0.114176 0.434048 + -0.753092 0.829517 -3.04917 -0.267056 -0.108626 0.957539 + -0.76694 0.74808 -3.06611 -0.541848 -0.236166 0.806614 + -0.759602 0.926263 -3.03951 -0.241779 -0.119321 0.962967 + -0.778414 0.831733 -3.06725 -0.639391 -0.0982445 0.76258 + -0.793113 0.83416 -3.08097 -0.755826 -0.117781 0.644092 + -0.78164 0.750508 -3.07983 -0.804877 -0.215327 0.552999 + -0.767678 0.70932 -3.08482 -0.432226 -0.826862 0.359834 + -0.784924 0.928477 -3.05759 -0.64256 -0.129857 0.755151 + -0.80502 0.931409 -3.07746 -0.760192 -0.133541 0.635827 + -0.805363 0.839829 -3.09679 -0.933723 -0.150671 0.324746 + -0.788325 0.752482 -3.09424 -0.942382 -0.245713 0.227026 + -0.807043 0.843624 -3.11434 -0.978575 -0.16081 -0.128571 + -0.790005 0.756277 -3.1118 -0.946458 -0.280709 -0.159433 + -0.106343 0.878927 -3.34614 0.362612 -0.0130587 0.931849 + -0.118475 0.842721 -3.34595 0.166227 -0.123161 0.978366 + -0.110367 0.844247 -3.35106 0.516151 -0.813737 0.267245 + -0.124122 0.879198 -3.34372 -0.0237039 0.0262078 0.999375 + -0.133302 0.844537 -3.34848 -0.418236 -0.77872 0.467625 + -0.098235 0.880453 -3.35125 0.620088 -0.0692167 0.781473 + -0.082945 0.960539 -3.37009 0.599546 0.0773708 0.796591 + -0.105239 0.956342 -3.35604 0.327362 0.126304 0.936419 + -0.123019 0.956611 -3.35362 -0.0428739 0.14651 0.98828 + -0.138949 0.881012 -3.34624 -0.349957 -0.0045157 0.936755 + -0.088223 0.883575 -3.36059 0.861612 -0.23212 0.451381 + -0.072933 0.963663 -3.37943 0.773581 0.011667 0.63359 + -0.057545 1.05444 -3.40151 0.769322 0.0293213 0.638188 + -0.074516 1.04927 -3.38601 0.590202 0.0879483 0.802451 + -0.09681 1.04507 -3.37197 0.331846 0.132761 0.933945 + -0.108929 0.846051 -3.35592 0.531956 -0.796498 -0.287425 + -0.086785 0.885379 -3.36544 0.924554 -0.376917 -0.0559803 + -0.064728 0.968621 -3.39278 0.974747 -0.17852 0.134159 + -0.04934 1.0594 -3.41486 0.978964 -0.1059 0.174397 + -0.133971 0.849398 -3.36091 -0.374838 -0.728683 -0.573164 + -0.124687 0.850417 -3.36488 -0.0825503 -0.726829 -0.681839 + -0.113113 0.848798 -3.36239 0.224854 -0.747704 -0.624804 + -0.088296 0.889645 -3.37606 0.76816 -0.449907 -0.455536 + -0.066239 0.972886 -3.4034 0.847901 -0.310072 -0.430021 + -0.118475 0.842721 -3.34595 -0.0524469 -0.93101 -0.361206 + -0.136798 0.847063 -3.35448 -0.644376 -0.753483 -0.13055 + -0.15653 0.892167 -3.37189 -0.890448 -0.359363 -0.279214 + -0.153703 0.894503 -3.37832 -0.674709 -0.410682 -0.613277 + -0.14235 0.897646 -3.38808 -0.417194 -0.439866 -0.795278 + -0.152406 0.885082 -3.35423 -0.741875 -0.129474 0.65792 + -0.155902 0.88761 -3.36023 -0.946909 -0.249627 0.202609 + -0.17198 0.972621 -3.38504 -0.9643 -0.0919351 0.248343 + -0.172608 0.977179 -3.3967 -0.945945 -0.215313 -0.242544 + -0.162365 0.965675 -3.36855 -0.699381 0.0543021 0.712683 + -0.173576 1.05657 -3.38854 -0.70759 0.0642443 0.703697 + -0.18319 1.06351 -3.40504 -0.966261 -0.0545806 0.251715 + -0.183701 1.07108 -3.42438 -0.954115 -0.168561 -0.247492 + -0.164834 0.983602 -3.4144 -0.715077 -0.306015 -0.628507 + -0.148908 0.961604 -3.36056 -0.363474 0.127128 0.92289 + -0.151989 1.05016 -3.37509 -0.362219 0.1422 0.921182 + -0.182779 1.15464 -3.4068 -0.744595 0.0048785 0.667499 + -0.192791 1.16341 -3.42762 -0.977179 -0.0950015 0.18999 + -0.193301 1.17098 -3.44696 -0.954633 -0.154396 -0.254632 + -0.126099 1.04517 -3.36815 -0.0556157 0.15951 0.985628 + -0.120362 1.14332 -3.38379 -0.0355452 0.101679 0.994182 + -0.161192 1.14824 -3.39335 -0.374325 0.0748327 0.924273 + -0.166337 1.23463 -3.39624 -0.36861 -0.0912887 0.925091 + -0.196173 1.24694 -3.41281 -0.763863 -0.176581 0.620752 + -0.091073 1.14322 -3.38761 0.332416 0.0869823 0.939113 + -0.082343 1.22998 -3.39421 0.376697 -0.0499367 0.92499 + -0.125506 1.22972 -3.38668 -0.0387002 -0.0562603 0.997666 + -0.062932 1.14852 -3.40534 0.602212 0.0456936 0.797028 + -0.054202 1.23528 -3.41194 0.635332 -0.0503034 0.770599 + -0.039483 1.31898 -3.41339 0.690144 -0.142272 0.709549 + -0.079466 1.29589 -3.38419 0.412329 -0.155274 0.897705 + -0.122629 1.29563 -3.37666 0.00508542 -0.179858 0.98368 + -0.045961 1.1537 -3.42083 0.788275 0.00197918 0.615321 + -0.03486 1.24243 -3.43173 0.820211 -0.0729481 0.56739 + -0.020141 1.32613 -3.43318 0.907723 -0.15571 0.389608 + -0.011027 1.37809 -3.43342 0.904738 -0.252158 0.343314 + -0.033067 1.36756 -3.40765 0.720628 -0.225701 0.655556 + -0.03672 1.15996 -3.43768 0.984746 -0.101403 0.141399 + -0.025619 1.24869 -3.44858 0.992954 -0.0971488 0.0678533 + -0.020138 1.3201 -3.44856 0.984085 -0.132565 -0.118338 + -0.011025 1.37206 -3.4488 0.954851 -0.235054 -0.181681 + -0.051485 1.06648 -3.43248 0.880501 -0.236271 -0.410967 + -0.038864 1.16704 -3.4553 0.901422 -0.170848 -0.397805 + -0.030731 1.24856 -3.46418 0.885025 -0.089912 -0.456778 + -0.02525 1.31997 -3.46416 0.752804 -0.052248 -0.656168 + -0.019385 1.36442 -3.4612 0.71315 -0.158792 -0.68279 + -0.062989 1.07403 -3.45028 0.62977 -0.285083 -0.722576 + -0.053384 1.17657 -3.47777 0.658552 -0.200392 -0.725363 + -0.045251 1.2581 -3.48665 0.687995 0.0143905 -0.725573 + -0.040422 1.30972 -3.47184 0.527488 0.0333045 -0.84891 + -0.034557 1.35416 -3.46888 0.504975 -0.0713019 -0.860184 + -0.077743 0.980436 -3.4212 0.585176 -0.365 -0.724116 + -0.083243 1.08047 -3.46442 0.358027 -0.305043 -0.882477 + -0.073639 1.18301 -3.49191 0.382668 -0.207642 -0.90025 + -0.070166 1.25611 -3.50245 0.424421 -0.0109552 -0.905399 + -0.09248 0.89239 -3.38254 0.533952 -0.469653 -0.70308 + -0.104595 0.89648 -3.39094 0.260587 -0.476158 -0.839862 + -0.089859 0.984527 -3.4296 0.330789 -0.380542 -0.863578 + -0.104442 1.08492 -3.47127 0.0839557 -0.308391 -0.947548 + -0.107434 1.18723 -3.50136 0.0833086 -0.217474 -0.972504 + -0.116169 0.898099 -3.39343 0.0201028 -0.469621 -0.882639 + -0.111057 0.988976 -3.43646 0.0608176 -0.382686 -0.921874 + -0.132096 1.08551 -3.46917 -0.216844 -0.304605 -0.927467 + -0.133066 0.898663 -3.39205 -0.207426 -0.453354 -0.866859 + -0.127953 0.989541 -3.43507 -0.20885 -0.370352 -0.905108 + -0.157624 1.08271 -3.45826 -0.473128 -0.286403 -0.833141 + -0.165186 1.18429 -3.48549 -0.504392 -0.21294 -0.836806 + -0.135089 1.18782 -3.49926 -0.232552 -0.226026 -0.945955 + -0.153481 0.986745 -3.42415 -0.453962 -0.345674 -0.821236 + -0.175927 1.0775 -3.44208 -0.745893 -0.244613 -0.619523 + -0.183489 1.17908 -3.4693 -0.758234 -0.190554 -0.623514 + -0.192842 1.26553 -3.47934 -0.762133 -0.0916269 -0.640904 + -0.168579 1.25838 -3.49837 -0.517788 -0.0802621 -0.851736 + -0.202654 1.25742 -3.457 -0.940079 -0.141508 -0.310204 + -0.217438 1.34522 -3.45249 -0.913601 -0.1639 -0.372116 + -0.198307 1.32203 -3.4742 -0.704839 -0.0588379 -0.706923 + -0.174044 1.31488 -3.49323 -0.536643 -0.0347598 -0.843093 + -0.138482 1.26191 -3.51215 -0.215974 -0.0617531 -0.974444 + -0.206185 1.25572 -3.43363 -0.981405 -0.174053 0.0809284 + -0.220969 1.34351 -3.42911 -0.97659 -0.20886 -0.0514645 + -0.235157 1.39875 -3.42348 -0.938221 -0.330245 -0.103346 + -0.227261 1.39459 -3.45194 -0.896375 -0.298373 -0.32785 + -0.208129 1.3714 -3.47365 -0.75561 -0.241405 -0.608915 + -0.216163 1.33037 -3.4005 -0.834021 -0.251043 0.491311 + -0.23035 1.38562 -3.39487 -0.846167 -0.397572 0.354878 + -0.240846 1.40782 -3.38741 -0.853154 -0.306734 0.421951 + -0.246637 1.42629 -3.42525 -0.972225 -0.215448 -0.0914337 + -0.238741 1.42212 -3.45371 -0.88983 -0.204054 -0.408122 + -0.186326 1.31806 -3.38394 -0.380923 -0.241721 0.892451 + -0.193244 1.36576 -3.37333 -0.420574 -0.359847 0.832843 + -0.203739 1.38796 -3.36587 -0.440712 -0.314686 0.840682 + -0.233773 1.47268 -3.36828 -0.568142 -0.0261557 0.822515 + -0.247411 1.47396 -3.38664 -0.925928 -0.0468269 0.374787 + -0.129546 1.34333 -3.36606 -0.0229383 -0.380094 0.924663 + -0.129607 1.36256 -3.35343 -0.018699 -0.351372 0.936049 + -0.122787 1.41055 -3.34648 0.0740658 -0.0906146 0.993128 + -0.196918 1.43595 -3.35892 -0.247167 -0.0614541 0.967022 + -0.07305 1.34448 -3.37845 0.479049 -0.312017 0.820462 + -0.073112 1.36371 -3.36582 0.453341 -0.297844 0.840101 + -0.069783 1.41068 -3.36405 0.4847 -0.0663472 0.87216 + -0.117553 1.48198 -3.34654 0.0960616 -0.0144337 0.995271 + -0.164313 1.51504 -3.35114 -0.151542 0.0317332 0.987941 + -0.024941 1.39305 -3.40588 0.734603 -0.180485 0.654052 + -0.021612 1.44002 -3.40411 0.722868 -0.0173732 0.690768 + -0.064549 1.48211 -3.36411 0.542368 -0.0188203 0.83993 + -0.094516 1.52942 -3.34775 0.219293 0.0386151 0.974894 + -0.002901 1.40358 -3.43164 0.92223 -0.184969 0.339527 + 0.001168 1.44139 -3.43087 0.933247 -0.0297194 0.358005 + -0.021597 1.51175 -3.41137 0.748304 0.0181527 0.663108 + -0.013123 1.57046 -3.41925 0.914963 -0.040804 0.401468 + -0.056075 1.54083 -3.37199 0.71383 -0.0931773 0.694093 + -0.002896 1.3993 -3.45006 0.955614 -0.188155 -0.226717 + 0.001172 1.43711 -3.44928 0.955307 -0.0328413 -0.293784 + 0.001183 1.51311 -3.43813 0.989659 0.138968 0.0355261 + -0.011257 1.39166 -3.46246 0.703873 -0.169762 -0.689742 + -0.011073 1.44453 -3.46711 0.620548 0.046224 -0.782804 + -0.011063 1.52054 -3.45595 0.863862 0.088788 -0.495841 + -0.029536 1.38166 -3.47059 0.522139 -0.138507 -0.841538 + -0.029353 1.43453 -3.47524 0.575167 -0.06648 -0.81533 + -0.041779 1.51527 -3.50199 0.720635 -0.0311367 -0.692616 + -0.039756 1.59678 -3.49803 0.671506 0.042351 -0.739788 + -0.009039 1.60204 -3.45199 0.934666 -0.0735715 -0.347833 + -0.057839 1.37151 -3.48744 0.550857 -0.158949 -0.819324 + -0.054059 1.41429 -3.49364 0.595397 -0.144842 -0.790268 + -0.066486 1.49502 -3.5204 0.455704 -0.0515371 -0.888638 + -0.046079 1.64023 -3.49797 0.366265 0.195073 -0.909833 + -0.009016 1.72638 -3.45139 0.791461 0.0559912 -0.60865 + -0.06286 1.34401 -3.48573 0.544074 -0.0714078 -0.835993 + -0.101424 1.36259 -3.51539 0.317609 -0.165723 -0.933628 + -0.097644 1.40537 -3.52159 0.312029 -0.151729 -0.937879 + -0.065337 1.30773 -3.48765 0.526927 0.0953753 -0.844542 + -0.099036 1.33258 -3.50934 0.348894 -0.0589408 -0.935307 + -0.139275 1.33491 -3.513 -0.210491 -0.127275 -0.969275 + -0.141663 1.36492 -3.51906 -0.186031 -0.171324 -0.967492 + -0.101513 1.29631 -3.51126 0.253415 0.0453247 -0.966295 + -0.136033 1.29788 -3.51151 -0.209251 -0.0067073 -0.977839 + -0.177285 1.35191 -3.49472 -0.567322 -0.207713 -0.796869 + -0.184847 1.37756 -3.50042 -0.561368 -0.242097 -0.791363 + -0.103962 1.26034 -3.5119 0.131742 -0.0675522 -0.98898 + -0.215691 1.39704 -3.47935 -0.761032 -0.232816 -0.605497 + -0.241301 1.48495 -3.45658 -0.863912 -0.018531 -0.503302 + -0.218252 1.45987 -3.48222 -0.722114 -0.0439708 -0.690375 + -0.191368 1.42331 -3.50452 -0.556715 -0.0956094 -0.825183 + -0.148184 1.41067 -3.52316 -0.23442 -0.113724 -0.96546 + -0.123403 1.43634 -3.52897 -0.00501192 -0.0748548 -0.997182 + -0.253202 1.49243 -3.42449 -0.993295 -0.0314111 -0.111258 + -0.241996 1.59388 -3.44778 -0.857664 0.0824427 -0.507558 + -0.208758 1.54906 -3.49504 -0.634685 0.103079 -0.765865 + -0.181874 1.51251 -3.51734 -0.455282 0.0289566 -0.889876 + -0.157093 1.53818 -3.52316 -0.221255 0.149735 -0.963652 + -0.251002 1.57982 -3.39807 -0.922518 0.0173927 0.385562 + -0.253897 1.60135 -3.41568 -0.993631 0.0333873 -0.107627 + -0.238164 1.68532 -3.43339 -0.814071 0.214718 -0.539616 + -0.237364 1.57854 -3.37971 -0.615142 0.0878097 0.783511 + -0.234255 1.66947 -3.3863 -0.26206 -0.0333192 0.964476 + -0.249449 1.65451 -3.39346 -0.782252 -0.0145871 0.622791 + -0.252343 1.67604 -3.41108 -0.976304 0.130603 -0.17255 + -0.201168 1.55176 -3.3605 -0.296178 0.079298 0.951835 + -0.191027 1.58842 -3.36185 -0.195249 0.225642 0.954444 + -0.227224 1.6152 -3.38105 -0.197949 0.162864 0.966587 + -0.141276 1.56247 -3.35235 -0.0350407 0.18479 0.982153 + -0.143849 1.5932 -3.36212 0.00507204 0.329282 0.944218 + -0.193209 1.61933 -3.37365 -0.13668 0.296282 0.94527 + -0.225862 1.63376 -3.38559 0.167431 0.158994 0.972979 + -0.077163 1.57536 -3.35946 0.187325 0.222172 0.956843 + -0.079736 1.60609 -3.36923 0.102458 0.32863 0.938885 + -0.146032 1.62411 -3.37392 0.0161638 0.312995 0.949617 + -0.154579 1.64638 -3.37962 0.0426798 0.158979 0.986359 + -0.191848 1.63789 -3.37818 -0.123865 0.178654 0.976084 + -0.064608 1.54626 -3.36014 0.563743 -0.176207 0.806936 + -0.047256 1.5922 -3.37184 0.597639 0.0307288 0.801176 + -0.03764 1.62064 -3.38122 0.521036 0.141413 0.841739 + -0.068242 1.64546 -3.38563 0.114253 0.32247 0.939659 + -0.076789 1.66772 -3.39133 0.126788 0.181867 0.975115 + -0.021648 1.62986 -3.40189 0.798985 -0.086193 0.595142 + -0.012032 1.65829 -3.41127 0.769181 -0.0241418 0.638574 + -0.026146 1.66 -3.39762 0.465442 0.150505 0.872188 + -0.046152 1.69277 -3.39845 0.189343 0.128388 0.973481 + -0.148311 1.67115 -3.38142 0.0817894 0.0698268 0.994201 + -0.013115 1.62442 -3.41374 0.799651 -0.0706683 0.596291 + -0.003494 1.68935 -3.41994 0.782296 -0.0420202 0.621488 + -0.017607 1.69106 -3.4063 0.502039 0.0614457 0.862659 + -0.03203 1.74658 -3.40808 0.241514 0.0497681 0.96912 + -0.117674 1.6962 -3.38854 0.186673 0.0520213 0.981044 + 0.001204 1.6343 -3.43293 0.99647 -0.0624539 0.0560929 + 0.001212 1.68825 -3.42743 0.957973 -0.0297576 0.285309 + 0.00122 1.74377 -3.42341 0.952214 0.0484955 0.301557 + -0.003485 1.74487 -3.41593 0.633891 0.0715405 0.770106 + -0.041176 1.76728 -3.40588 0.299384 -0.0336773 0.953538 + 0.001227 1.75864 -3.43234 0.967184 0.197943 -0.159293 + -0.012625 1.78903 -3.41537 0.642229 0.234497 0.729762 + -0.082733 1.7756 -3.38966 0.234333 0.0185598 0.971979 + -0.126819 1.71691 -3.38634 0.1818 -0.0311398 0.982842 + -0.185579 1.66266 -3.37999 -0.0478121 0.0405391 0.998033 + -0.015339 1.76984 -3.45134 0.516497 0.33758 -0.786938 + -0.018947 1.81086 -3.42742 0.528296 0.839127 -0.129493 + -0.012619 1.80389 -3.4243 0.810861 0.573147 0.118353 + -0.054183 1.79735 -3.39915 0.312284 0.311382 0.897508 + -0.034331 1.77586 -3.45177 0.0653851 0.434678 -0.898209 + -0.037939 1.81688 -3.42785 0.170847 0.959794 -0.222725 + -0.060512 1.80431 -3.40227 0.146369 0.7268 0.671072 + -0.090427 1.62068 -3.50581 0.0462415 0.238949 -0.96993 + -0.078679 1.75631 -3.45961 0.00857797 0.384404 -0.923125 + -0.092595 1.81509 -3.42965 -0.0471287 0.921497 -0.385516 + -0.073656 1.81358 -3.41959 -0.0212948 0.938497 0.344631 + -0.096229 1.801 -3.39401 0.0430479 0.644191 0.763652 + -0.092244 1.526 -3.52778 0.200049 0.1253 -0.971741 + -0.155275 1.63286 -3.50119 -0.185561 0.254511 -0.9491 + -0.158067 1.74829 -3.46422 -0.144246 0.355974 -0.923296 + -0.171983 1.80707 -3.43425 -0.201026 0.862613 -0.464207 + -0.204926 1.6405 -3.48065 -0.546569 0.196231 -0.814098 + -0.207717 1.75593 -3.44368 -0.625529 0.318462 -0.712247 + -0.205488 1.79827 -3.42416 -0.563403 0.744809 -0.357542 + -0.180756 1.79915 -3.40445 -0.14267 0.948382 0.283227 + -0.228842 1.73752 -3.40879 -0.894368 0.327622 -0.304582 + -0.226613 1.77986 -3.38927 -0.699862 0.483846 0.52544 + -0.21426 1.79034 -3.39435 -0.354112 0.752381 0.555453 + -0.161817 1.79763 -3.39439 -0.0671082 0.738359 0.67106 + -0.243022 1.72825 -3.38648 -0.86226 0.338485 0.376743 + -0.227827 1.7432 -3.37932 -0.465084 0.283924 0.838501 + -0.215475 1.75369 -3.38439 0.0842919 0.184764 0.979161 + -0.184037 1.77387 -3.38475 -0.0551369 0.242618 0.968554 + -0.118449 1.77725 -3.38438 0.0616458 0.176749 0.982323 + -0.193972 1.69836 -3.3807 -0.037276 0.00223762 0.999302 + -0.162534 1.71855 -3.38106 0.0579043 0.00773888 0.998292 + 0.136798 0.847063 -3.35448 0.644273 -0.753569 -0.130558 + 0.133302 0.844537 -3.34848 0.418209 -0.778785 0.467541 + 0.118475 0.842721 -3.34595 0.0524625 -0.930993 -0.361248 + 0.152406 0.885082 -3.35423 0.741876 -0.129478 0.657917 + 0.138949 0.881012 -3.34624 0.345055 0.00308332 0.938577 + 0.124122 0.879198 -3.34372 0.0272044 0.0313708 0.999137 + 0.118475 0.842721 -3.34595 -0.166227 -0.123161 0.978366 + 0.133971 0.849398 -3.36091 0.374832 -0.728703 -0.573143 + 0.15653 0.892167 -3.37189 0.890448 -0.359363 -0.279214 + 0.155902 0.88761 -3.36023 0.946909 -0.249627 0.202609 + 0.162365 0.965675 -3.36855 0.698251 0.0564672 0.713622 + 0.148908 0.961604 -3.36056 0.362444 0.125742 0.923485 + 0.124687 0.850417 -3.36488 0.0825573 -0.726833 -0.681835 + 0.14235 0.897646 -3.38808 0.417194 -0.439866 -0.795278 + 0.153703 0.894503 -3.37832 0.674709 -0.410682 -0.613277 + 0.172608 0.977179 -3.3967 0.945946 -0.215314 -0.242543 + 0.17198 0.972621 -3.38504 0.964299 -0.0919315 0.248345 + 0.113113 0.848798 -3.36239 -0.224884 -0.747657 -0.624849 + 0.104595 0.89648 -3.39094 -0.259116 -0.473458 -0.841841 + 0.116169 0.898099 -3.39343 -0.0231674 -0.466681 -0.884122 + 0.133066 0.898663 -3.39205 0.207424 -0.453352 -0.866861 + 0.110367 0.844247 -3.35106 -0.51614 -0.813736 0.267271 + 0.108929 0.846051 -3.35592 -0.532043 -0.796446 -0.287409 + 0.088296 0.889645 -3.37606 -0.76816 -0.449908 -0.455535 + 0.09248 0.89239 -3.38254 -0.533949 -0.469652 -0.703082 + 0.089859 0.984527 -3.4296 -0.329647 -0.38184 -0.863441 + 0.088223 0.883575 -3.36059 -0.864952 -0.22641 0.447881 + 0.086785 0.885379 -3.36544 -0.933112 -0.357289 -0.0405903 + 0.064728 0.968621 -3.39278 -0.974249 -0.180286 0.135409 + 0.066239 0.972886 -3.4034 -0.847902 -0.310072 -0.430021 + 0.077743 0.980436 -3.4212 -0.585075 -0.364686 -0.724355 + 0.098235 0.880453 -3.35125 -0.620086 -0.0692159 0.781475 + 0.072933 0.963663 -3.37943 -0.776025 0.00563757 0.630677 + 0.057545 1.05444 -3.40151 -0.768709 0.0279504 0.638987 + 0.04934 1.0594 -3.41486 -0.979012 -0.109645 0.171793 + 0.051485 1.06648 -3.43248 -0.880498 -0.236275 -0.410971 + 0.106343 0.878927 -3.34614 -0.362615 -0.0130616 0.931847 + 0.105239 0.956342 -3.35604 -0.326999 0.126899 0.936466 + 0.082945 0.960539 -3.37009 -0.599746 0.0777342 0.796406 + 0.074516 1.04927 -3.38601 -0.59053 0.0874151 0.802267 + 0.045961 1.1537 -3.42083 -0.789501 -0.000536091 0.613749 + 0.123019 0.956611 -3.35362 0.0459985 0.143033 0.988648 + 0.126099 1.04517 -3.36815 0.054473 0.157725 0.985979 + 0.09681 1.04507 -3.37197 -0.331635 0.132492 0.934058 + 0.091073 1.14322 -3.38761 -0.335557 0.0824387 0.938406 + 0.062932 1.14852 -3.40534 -0.600801 0.0431508 0.798233 + 0.151989 1.05016 -3.37509 0.364926 0.138766 0.920637 + 0.161192 1.14824 -3.39335 0.373293 0.0729476 0.924841 + 0.120362 1.14332 -3.38379 0.0377029 0.0986842 0.994404 + 0.173576 1.05657 -3.38854 0.708296 0.0659715 0.702826 + 0.182779 1.15464 -3.4068 0.750561 -0.0066001 0.660768 + 0.196173 1.24694 -3.41281 0.77225 -0.159824 0.614887 + 0.166337 1.23463 -3.39624 0.375199 -0.0994423 0.921595 + 0.125506 1.22972 -3.38668 0.0332146 -0.0631781 0.997449 + 0.18319 1.06351 -3.40504 0.965254 -0.0474452 0.25697 + 0.192791 1.16341 -3.42762 0.977809 -0.0918353 0.188295 + 0.206185 1.25572 -3.43363 0.982062 -0.157466 0.103726 + 0.183701 1.07108 -3.42438 0.954114 -0.168562 -0.247493 + 0.193301 1.17098 -3.44696 0.958867 -0.143556 -0.244877 + 0.202654 1.25742 -3.457 0.940065 -0.13318 -0.313912 + 0.220969 1.34351 -3.42911 0.975769 -0.21253 -0.0520201 + 0.175927 1.0775 -3.44208 0.746257 -0.244036 -0.619312 + 0.183489 1.17908 -3.4693 0.75846 -0.191307 -0.623009 + 0.192842 1.26553 -3.47934 0.776011 -0.074095 -0.626352 + 0.198307 1.32203 -3.4742 0.726964 -0.0842817 -0.681484 + 0.217438 1.34522 -3.45249 0.915272 -0.162842 -0.368456 + 0.164834 0.983602 -3.4144 0.715204 -0.30648 -0.628135 + 0.157624 1.08271 -3.45826 0.473671 -0.287328 -0.832513 + 0.165186 1.18429 -3.48549 0.50443 -0.212649 -0.836858 + 0.168579 1.25838 -3.49837 0.516899 -0.079055 -0.852388 + 0.153481 0.986745 -3.42415 0.45316 -0.346539 -0.821314 + 0.132096 1.08551 -3.46917 0.215124 -0.306558 -0.927224 + 0.135089 1.18782 -3.49926 0.226565 -0.218286 -0.949221 + 0.138482 1.26191 -3.51215 0.212535 -0.0665339 -0.974886 + 0.127953 0.989541 -3.43507 0.208443 -0.369834 -0.905414 + 0.104442 1.08492 -3.47127 -0.082372 -0.310089 -0.947132 + 0.107434 1.18723 -3.50136 -0.0774923 -0.209999 -0.974626 + 0.103962 1.26034 -3.5119 -0.165686 -0.0385802 -0.985424 + 0.136033 1.29788 -3.51151 0.197503 0.00587325 -0.980285 + 0.111057 0.988976 -3.43646 -0.0611133 -0.383501 -0.921516 + 0.083243 1.08047 -3.46442 -0.358615 -0.306165 -0.88185 + 0.073639 1.18301 -3.49191 -0.38366 -0.20649 -0.900093 + 0.070166 1.25611 -3.50245 -0.40029 0.0243961 -0.916064 + 0.062989 1.07403 -3.45028 -0.629491 -0.285434 -0.722681 + 0.053384 1.17657 -3.47777 -0.658474 -0.200181 -0.725493 + 0.045251 1.2581 -3.48665 -0.663545 -0.01177 -0.748044 + 0.065337 1.30773 -3.48765 -0.513251 0.0778075 -0.854705 + 0.101513 1.29631 -3.51126 -0.289925 0.0125623 -0.956967 + 0.038864 1.16704 -3.4553 -0.896698 -0.179268 -0.404716 + 0.030731 1.24856 -3.46418 -0.886965 -0.107098 -0.449247 + 0.02525 1.31997 -3.46416 -0.762912 -0.0254145 -0.646002 + 0.040422 1.30972 -3.47184 -0.441165 0.123454 -0.888894 + 0.03672 1.15996 -3.43768 -0.984215 -0.10424 0.143019 + 0.025619 1.24869 -3.44858 -0.992268 -0.113612 0.0499617 + 0.020138 1.3201 -3.44856 -0.983841 -0.105445 -0.1447 + 0.019385 1.36442 -3.4612 -0.71315 -0.158792 -0.68279 + 0.034557 1.35416 -3.46888 -0.506327 -0.069517 -0.859535 + 0.03486 1.24243 -3.43173 -0.81622 -0.0825906 0.571808 + 0.020141 1.32613 -3.43318 -0.91029 -0.149717 0.38595 + 0.011025 1.37206 -3.4488 -0.954851 -0.235054 -0.181681 + 0.011257 1.39166 -3.46246 -0.705798 -0.165854 -0.688725 + 0.029536 1.38166 -3.47059 -0.50628 -0.123329 -0.853505 + 0.054202 1.23528 -3.41194 -0.642404 -0.0605293 0.763972 + 0.039483 1.31898 -3.41339 -0.688684 -0.144229 0.710571 + 0.033067 1.36756 -3.40765 -0.729707 -0.229854 0.643968 + 0.011027 1.37809 -3.43342 -0.906878 -0.247609 0.340972 + 0.002896 1.3993 -3.45006 -0.954732 -0.179947 -0.236867 + 0.082343 1.22998 -3.39421 -0.371166 -0.0581707 0.926743 + 0.079466 1.29589 -3.38419 -0.406767 -0.150988 0.900968 + 0.07305 1.34448 -3.37845 -0.476082 -0.317518 0.820078 + 0.073112 1.36371 -3.36582 -0.455116 -0.307591 0.835618 + 0.024941 1.39305 -3.40588 -0.73676 -0.177454 0.652453 + 0.122629 1.29563 -3.37666 -0.00834578 -0.178819 0.983847 + 0.129546 1.34333 -3.36606 0.0326732 -0.370994 0.92806 + 0.129607 1.36256 -3.35343 0.0419869 -0.366039 0.929652 + 0.122787 1.41055 -3.34648 -0.0563654 -0.068589 0.996051 + 0.069783 1.41068 -3.36405 -0.503245 -0.0429086 0.863078 + 0.186326 1.31806 -3.38394 0.386595 -0.234423 0.891959 + 0.193244 1.36576 -3.37333 0.411674 -0.355328 0.839206 + 0.203739 1.38796 -3.36587 0.449204 -0.297792 0.842339 + 0.196918 1.43595 -3.35892 0.323566 -0.0701775 0.9436 + 0.216163 1.33037 -3.4005 0.835803 -0.264212 0.481274 + 0.23035 1.38562 -3.39487 0.844753 -0.400001 0.355516 + 0.240846 1.40782 -3.38741 0.842707 -0.272854 0.464108 + 0.235157 1.39875 -3.42348 0.936443 -0.33423 -0.106606 + 0.246637 1.42629 -3.42525 0.973179 -0.207393 -0.0995559 + 0.253202 1.49243 -3.42449 0.992725 -0.0366179 -0.114701 + 0.247411 1.47396 -3.38664 0.901998 -0.0992285 0.420182 + 0.227261 1.39459 -3.45194 0.896336 -0.305675 -0.321162 + 0.238741 1.42212 -3.45371 0.893249 -0.19723 -0.403988 + 0.241301 1.48495 -3.45658 0.85445 -0.00846099 -0.519464 + 0.253897 1.60135 -3.41568 0.995215 0.0188373 -0.0958803 + 0.208129 1.3714 -3.47365 0.75453 -0.243187 -0.609545 + 0.215691 1.39704 -3.47935 0.745912 -0.216412 -0.629905 + 0.218252 1.45987 -3.48222 0.722687 -0.0414908 -0.689929 + 0.241996 1.59388 -3.44778 0.854788 0.0715361 -0.514023 + 0.177285 1.35191 -3.49472 0.554495 -0.198112 -0.808261 + 0.184847 1.37756 -3.50042 0.560997 -0.240097 -0.792234 + 0.191368 1.42331 -3.50452 0.598302 -0.122097 -0.791914 + 0.208758 1.54906 -3.49504 0.673867 0.0754104 -0.734994 + 0.174044 1.31488 -3.49323 0.538996 -0.0313707 -0.841724 + 0.139275 1.33491 -3.513 0.208385 -0.128411 -0.96958 + 0.141663 1.36492 -3.51906 0.204341 -0.191438 -0.959998 + 0.148184 1.41067 -3.52316 0.281806 -0.0985886 -0.954393 + 0.181874 1.51251 -3.51734 0.453933 0.0225164 -0.890751 + 0.099036 1.33258 -3.50934 -0.33649 -0.0718157 -0.938945 + 0.101424 1.36259 -3.51539 -0.315509 -0.164939 -0.934478 + 0.123403 1.43634 -3.52897 0.00318025 -0.053921 -0.99854 + 0.06286 1.34401 -3.48573 -0.544687 -0.0711034 -0.835619 + 0.057839 1.37151 -3.48744 -0.560434 -0.144803 -0.815442 + 0.054059 1.41429 -3.49364 -0.619498 -0.16478 -0.767509 + 0.097644 1.40537 -3.52159 -0.335099 -0.150186 -0.930136 + 0.029353 1.43453 -3.47524 -0.549058 -0.133942 -0.824982 + 0.066486 1.49502 -3.5204 -0.464117 -0.0279521 -0.885333 + 0.092244 1.526 -3.52778 -0.201548 0.125674 -0.971383 + 0.157093 1.53818 -3.52316 0.219024 0.148888 -0.964293 + 0.011073 1.44453 -3.46711 -0.701663 -0.0462202 -0.711008 + 0.041779 1.51527 -3.50199 -0.659504 0.0362806 -0.750825 + 0.090427 1.62068 -3.50581 -0.0789496 0.214656 -0.973494 + 0.155275 1.63286 -3.50119 0.181658 0.25687 -0.94922 + 0.204926 1.6405 -3.48065 0.553611 0.213123 -0.805042 + -0.001172 1.43711 -3.44928 -0.953563 -0.0380412 -0.298782 + 0.011063 1.52054 -3.45595 -0.832286 0.0430625 -0.552671 + 0.009039 1.60204 -3.45199 -0.857011 0.00284538 -0.515291 + 0.039756 1.59678 -3.49803 -0.547017 0.0302118 -0.836576 + 0.002901 1.40358 -3.43164 -0.923075 -0.188257 0.335399 + -0.001168 1.44139 -3.43087 -0.934062 -0.0272306 0.35607 + -0.001183 1.51311 -3.43813 -0.997473 0.0436565 0.0560497 + -0.001204 1.6343 -3.43293 -0.997772 -0.0301779 0.0594994 + 0.009016 1.72638 -3.45139 -0.792856 0.0694456 -0.605439 + 0.021612 1.44002 -3.40411 -0.697793 0.00819096 0.716253 + 0.021597 1.51175 -3.41137 -0.743377 0.00729435 0.668832 + 0.064549 1.48211 -3.36411 -0.54446 -0.0033888 0.83878 + 0.056075 1.54083 -3.37199 -0.71319 -0.108131 0.692581 + 0.013123 1.57046 -3.41925 -0.736621 -0.0302573 0.675628 + 0.117553 1.48198 -3.34654 -0.0977576 -0.0105094 0.995155 + 0.064608 1.54626 -3.36014 -0.575365 -0.11508 0.80976 + 0.013115 1.62442 -3.41374 -0.798984 -0.0661801 0.597699 + -0.001212 1.68825 -3.42743 -0.957608 -0.0312965 0.28637 + 0.164313 1.51504 -3.35114 0.149745 0.0264483 0.988371 + 0.141276 1.56247 -3.35235 0.0652717 0.203226 0.976954 + 0.094516 1.52942 -3.34775 -0.230284 -0.00764833 0.973093 + 0.047256 1.5922 -3.37184 -0.618391 0.00652165 0.785844 + 0.021648 1.62986 -3.40189 -0.801785 -0.0833689 0.591769 + 0.233773 1.47268 -3.36828 0.605837 -0.21071 0.767178 + 0.201168 1.55176 -3.3605 0.277501 0.0926896 0.956244 + 0.143849 1.5932 -3.36212 0.0172028 0.307579 0.951367 + 0.077163 1.57536 -3.35946 -0.184267 0.217304 0.958553 + 0.03764 1.62064 -3.38122 -0.523824 0.144665 0.839452 + 0.237364 1.57854 -3.37971 0.60568 0.0752778 0.79214 + 0.227224 1.6152 -3.38105 0.490765 0.229968 0.840395 + 0.191027 1.58842 -3.36185 0.15985 0.189648 0.968753 + 0.251002 1.57982 -3.39807 0.928625 -0.00304574 0.371007 + 0.249449 1.65451 -3.39346 0.781966 0.00512945 0.6233 + 0.225862 1.63376 -3.38559 0.23243 0.123383 0.964755 + 0.193209 1.61933 -3.37365 0.1369 0.296086 0.9453 + 0.146032 1.62411 -3.37392 -0.0189266 0.311497 0.950059 + 0.252343 1.67604 -3.41108 0.977085 0.145859 -0.155013 + 0.243022 1.72825 -3.38648 0.862257 0.338479 0.376756 + 0.227827 1.7432 -3.37932 0.465086 0.283922 0.838501 + 0.234255 1.66947 -3.3863 0.262314 -0.0480649 0.963785 + 0.238164 1.68532 -3.43339 0.721099 0.315619 -0.616767 + 0.228842 1.73752 -3.40879 0.884248 0.298036 -0.359554 + 0.226613 1.77986 -3.38927 0.699862 0.483846 0.52544 + 0.215475 1.75369 -3.38439 -0.101678 0.212118 0.97194 + 0.193972 1.69836 -3.3807 0.0147462 -0.000807294 0.999891 + 0.207717 1.75593 -3.44368 0.639032 0.293813 -0.710853 + 0.205488 1.79827 -3.42416 0.557475 0.742844 -0.37068 + 0.21426 1.79034 -3.39435 0.240132 0.743464 0.624178 + 0.158067 1.74829 -3.46422 0.149806 0.361443 -0.920281 + 0.171983 1.80707 -3.43425 0.210681 0.857248 -0.469829 + 0.180756 1.79915 -3.40445 0.186924 0.858491 0.477549 + 0.184037 1.77387 -3.38475 0.185257 0.36676 0.911683 + 0.078679 1.75631 -3.45961 -0.0180836 0.408411 -0.912619 + 0.092595 1.81509 -3.42965 -0.0998686 0.905177 -0.413135 + 0.073656 1.81358 -3.41959 -0.0489731 0.989422 -0.136549 + 0.161817 1.79763 -3.39439 0.117239 0.72963 0.673717 + 0.046079 1.64023 -3.49797 -0.35891 0.17425 -0.916963 + 0.034331 1.77586 -3.45177 -0.0388783 0.452067 -0.891136 + 0.015339 1.76984 -3.45134 -0.622701 0.309822 -0.718508 + 0.018947 1.81086 -3.42742 -0.516286 0.847025 -0.126479 + 0.037939 1.81688 -3.42785 -0.0844579 0.962918 -0.256235 + 0.060512 1.80431 -3.40227 -0.119611 0.685296 0.718375 + 0.096229 1.801 -3.39401 -0.0685941 0.624635 0.777898 + 0.012619 1.80389 -3.4243 -0.808603 0.564728 0.165056 + 0.054183 1.79735 -3.39915 -0.274466 0.318251 0.907405 + -0.001227 1.75864 -3.43234 -0.923257 0.257088 -0.285486 + 0.012625 1.78903 -3.41537 -0.64193 0.232742 0.730587 + 0.041176 1.76728 -3.40588 -0.304434 -0.0354456 0.951874 + 0.082733 1.7756 -3.38966 -0.232686 0.0457158 0.971477 + 0.118449 1.77725 -3.38438 -0.064762 0.178125 0.981874 + -0.00122 1.74377 -3.42341 -0.952216 0.0484923 0.30155 + 0.003485 1.74487 -3.41593 -0.632229 0.0733501 0.771302 + 0.03203 1.74658 -3.40808 -0.245848 0.0569166 0.967636 + 0.126819 1.71691 -3.38634 -0.177767 -0.045177 0.983035 + 0.162534 1.71855 -3.38106 -0.0562797 -0.0297123 0.997973 + 0.003494 1.68935 -3.41994 -0.78273 -0.0442299 0.620788 + 0.017607 1.69106 -3.4063 -0.488889 0.0536665 0.870694 + 0.046152 1.69277 -3.39845 -0.216602 0.0555768 0.974677 + 0.117674 1.6962 -3.38854 -0.154953 0.0559571 0.986336 + 0.012032 1.65829 -3.41127 -0.811477 -0.0666819 0.580567 + 0.026146 1.66 -3.39762 -0.4667 0.160985 0.869641 + 0.068242 1.64546 -3.38563 -0.108861 0.314174 0.943103 + 0.076789 1.66772 -3.39133 -0.125249 0.187527 0.974241 + 0.148311 1.67115 -3.38142 -0.0959864 0.0838564 0.991844 + 0.079736 1.60609 -3.36923 -0.0877122 0.33747 0.937241 + 0.154579 1.64638 -3.37962 -0.0428927 0.159269 0.986303 + 0.185579 1.66266 -3.37999 0.0509642 0.0400256 0.997898 + 0.191848 1.63789 -3.37818 0.124288 0.178936 0.975979 + -0.599647 0.53971 -3.10657 -0.395676 -0.882245 0.255117 + -0.586175 0.537351 -3.1025 0.0382405 -0.36898 0.92865 + -0.595384 0.580943 -3.08802 -0.141179 -0.173689 0.974629 + -0.576324 0.581513 -3.08902 0.232008 -0.168986 0.957923 + -0.59542 0.685736 -3.08962 -0.121704 0.0199639 0.992366 + -0.608855 0.583301 -3.0921 -0.40878 -0.186391 0.893396 + -0.621625 0.587169 -3.09879 -0.660344 -0.229308 0.715097 + -0.604914 0.543026 -3.11231 -0.598562 -0.793658 -0.108764 + -0.586175 0.537351 -3.1025 -0.000228404 -0.865987 -0.500066 + -0.571676 0.540546 -3.10803 0.494248 -0.846384 0.198376 + -0.561824 0.584708 -3.09456 0.558671 -0.186206 0.808216 + -0.551338 0.69182 -3.10017 0.52954 -0.0151439 0.84815 + -0.57636 0.686306 -3.09062 0.203849 0.0121425 0.978927 + -0.548117 0.591963 -3.10712 0.851263 -0.231359 0.470982 + -0.53763 0.699075 -3.11274 0.829607 -0.0636566 0.554708 + -0.523051 0.832381 -3.11654 0.778822 -0.0757542 0.622653 + -0.546327 0.812116 -3.10224 0.450073 -0.0204718 0.892757 + -0.571349 0.806601 -3.09268 0.137602 0.00995666 0.990437 + -0.566059 0.547996 -3.12093 0.607158 -0.724393 -0.326519 + -0.542499 0.599414 -3.12001 0.964921 -0.256918 0.0540361 + -0.527938 0.711931 -3.13499 0.986514 -0.114807 0.11666 + -0.513358 0.845238 -3.1388 0.981421 -0.121584 0.148425 + -0.605372 0.551679 -3.12737 -0.504871 -0.67326 -0.540209 + -0.591256 0.557566 -3.13757 -0.130253 -0.617476 -0.775731 + -0.577719 0.556843 -3.13631 0.13361 -0.639392 -0.757183 + -0.572659 0.555143 -3.13333 0.351091 -0.658123 -0.66604 + -0.54317 0.60936 -3.13725 0.876287 -0.286262 -0.387524 + -0.528608 0.721878 -3.15223 0.930118 -0.147194 -0.336475 + -0.511998 0.863474 -3.1584 0.945316 -0.118789 -0.303755 + -0.489735 1.01464 -3.13553 0.901997 -0.0358544 0.43025 + -0.513404 0.976579 -3.11442 0.590583 0.0166264 0.806806 + -0.536681 0.956314 -3.10013 0.301924 0.0503119 0.952004 + -0.539998 0.734214 -3.17363 0.788439 -0.157609 -0.594578 + -0.523388 0.875809 -3.1798 0.838502 -0.0856873 -0.538119 + -0.504907 1.04257 -3.16877 0.705771 -0.141211 -0.694224 + -0.488374 1.03288 -3.15513 0.894771 -0.120026 -0.430093 + -0.54977 0.616509 -3.14965 0.721342 -0.297364 -0.625492 + -0.557715 0.622536 -3.16013 0.549172 -0.304284 -0.778345 + -0.547943 0.740242 -3.18411 0.605163 -0.172563 -0.777174 + -0.53772 0.8772 -3.20066 0.671627 -0.123976 -0.730443 + -0.562775 0.624236 -3.16311 0.296171 -0.306305 -0.904688 + -0.556674 0.743174 -3.18924 0.337225 -0.194882 -0.921032 + -0.546451 0.880131 -3.2058 0.532273 -0.163371 -0.83066 + -0.539913 1.02456 -3.23291 0.784993 -0.168188 -0.596237 + -0.519239 1.04396 -3.18963 0.864432 -0.133117 -0.484806 + -0.575448 0.625885 -3.166 0.122911 -0.305821 -0.944122 + -0.569347 0.744823 -3.19213 0.135442 -0.219633 -0.966135 + -0.568121 0.873315 -3.22124 0.357146 -0.20475 -0.911331 + -0.588986 0.626609 -3.16726 -0.0837429 -0.299688 -0.950355 + -0.59271 0.746072 -3.19432 -0.0911789 -0.225703 -0.96992 + -0.591484 0.874562 -3.22342 -0.0441116 -0.246588 -0.968116 + -0.595496 1.0057 -3.25953 0.0893871 -0.245153 -0.965355 + -0.561584 1.01774 -3.24835 0.499579 -0.220708 -0.837681 + -0.60783 0.623089 -3.16117 -0.369648 -0.296901 -0.88046 + -0.611554 0.742554 -3.18823 -0.387965 -0.223543 -0.894154 + -0.620733 0.865637 -3.21597 -0.347217 -0.240953 -0.906301 + -0.621945 0.617204 -3.15097 -0.634042 -0.296573 -0.714167 + -0.635913 0.732394 -3.17062 -0.682062 -0.203838 -0.702311 + -0.645092 0.855476 -3.19836 -0.667173 -0.225454 -0.709966 + -0.660103 0.982023 -3.22652 -0.700863 -0.177584 -0.690837 + -0.624745 0.996771 -3.25208 -0.349333 -0.23417 -0.907266 + -0.631252 0.607295 -3.13376 -0.89556 -0.282222 -0.343979 + -0.64522 0.722485 -3.15341 -0.93676 -0.164801 -0.308741 + -0.659537 0.840098 -3.17165 -0.938084 -0.166875 -0.303565 + -0.630794 0.598641 -3.1187 -0.961021 -0.276293 -0.0100051 + -0.644429 0.707551 -3.12743 -0.989904 -0.109532 0.089957 + -0.658747 0.825165 -3.14567 -0.990262 -0.108617 0.0870886 + -0.673401 0.944969 -3.16209 -0.992213 -0.0530139 0.112706 + -0.674548 0.966645 -3.1998 -0.954531 -0.106706 -0.278361 + -0.626892 0.590484 -3.10453 -0.894568 -0.257589 0.365233 + -0.640528 0.699396 -3.11326 -0.88819 -0.0642961 0.454956 + -0.652691 0.812505 -3.12367 -0.883752 -0.0458961 0.4657 + -0.631437 0.693674 -3.10335 -0.61341 -0.0107478 0.789691 + -0.643601 0.806782 -3.11376 -0.630678 0.012058 0.775951 + -0.654151 0.924001 -3.12571 -0.622811 0.0443697 0.781113 + -0.667346 0.932309 -3.14009 -0.882415 -0.0134584 0.470278 + -0.618668 0.689806 -3.09666 -0.377197 0.0148861 0.926013 + -0.623781 0.803205 -3.10198 -0.402424 0.0313399 0.914917 + -0.634331 0.920423 -3.11392 -0.467161 0.0675622 0.881587 + -0.633643 1.04941 -3.12692 -0.40268 0.106096 0.909171 + -0.656342 1.0555 -3.13793 -0.585255 0.0550094 0.808981 + -0.600533 0.799135 -3.09494 -0.187967 0.0320471 0.981652 + -0.600585 0.924214 -3.09811 -0.254847 0.0736175 0.964175 + -0.599897 1.0532 -3.11111 -0.197205 0.168661 0.965745 + -0.571401 0.931682 -3.09585 -0.011632 0.0780312 0.996883 + -0.565238 1.05913 -3.11408 0.028076 0.184629 0.982407 + -0.590086 1.18348 -3.14239 0.138166 0.106386 0.984679 + -0.6301 1.19278 -3.13251 -0.0959655 0.0186021 0.995211 + -0.652799 1.19887 -3.14352 -0.784218 0.0287844 0.619817 + -0.530518 1.08377 -3.11835 0.165178 0.233346 0.958262 + -0.525271 1.19402 -3.15892 0.345001 0.213429 0.914014 + -0.555427 1.18942 -3.14536 0.225628 0.164157 0.960284 + -0.550287 1.27386 -3.15673 0.358751 -0.0906592 0.92902 + -0.59209 1.27668 -3.14199 0.268557 -0.134915 0.953769 + -0.504713 1.10571 -3.13411 0.439081 0.202716 0.875279 + -0.499466 1.21596 -3.17468 0.597109 0.190043 0.779323 + -0.492573 1.29355 -3.19233 0.78127 -0.0963477 0.616713 + -0.520131 1.27847 -3.17029 0.539567 -0.0830959 0.837832 + -0.481043 1.14377 -3.15522 0.72075 0.231674 0.653335 + -0.484796 1.23645 -3.19877 0.908286 0.105071 0.404941 + -0.477903 1.31404 -3.21642 0.962426 -0.177176 0.205777 + -0.4776 1.16244 -3.18029 0.947886 -0.0993064 -0.302738 + -0.481353 1.25512 -3.22384 0.99649 -0.0675314 -0.0494694 + -0.473405 1.33018 -3.25521 0.967246 -0.224523 -0.118427 + -0.460659 1.3721 -3.21381 0.947386 -0.201999 0.248306 + -0.494132 1.17213 -3.19393 0.621326 -0.407455 -0.669279 + -0.489383 1.26154 -3.26528 0.904318 -0.265871 -0.333947 + -0.481436 1.3366 -3.29665 0.919086 -0.253146 -0.30199 + -0.467885 1.3967 -3.30982 0.926739 -0.178114 -0.330802 + -0.456161 1.38825 -3.2526 0.973562 -0.205812 -0.0990929 + -0.51007 1.16584 -3.22143 0.878434 -0.250658 -0.406847 + -0.505321 1.25524 -3.29279 0.807945 -0.354259 -0.470878 + -0.497544 1.32711 -3.32836 0.81523 -0.298071 -0.496543 + -0.530744 1.14643 -3.26471 0.800967 -0.259368 -0.539611 + -0.523834 1.23336 -3.30446 0.711637 -0.361869 -0.602182 + -0.516057 1.30523 -3.34003 0.574913 -0.369233 -0.730166 + -0.510161 1.35627 -3.35803 0.521897 -0.224078 -0.823051 + -0.483994 1.38721 -3.34153 0.779375 -0.155347 -0.606994 + -0.554839 1.13258 -3.27977 0.492474 -0.292327 -0.819765 + -0.547929 1.21951 -3.31952 0.234365 -0.381114 -0.894329 + -0.54183 1.29023 -3.34464 0.127748 -0.388829 -0.91241 + -0.588752 1.12054 -3.29094 0.060928 -0.246485 -0.96723 + -0.571211 1.21744 -3.31362 -0.193696 -0.296705 -0.935119 + -0.565112 1.28817 -3.33874 -0.250429 -0.354414 -0.900931 + -0.571065 1.33621 -3.3588 -0.207175 -0.273593 -0.939268 + -0.535934 1.34128 -3.36264 0.136599 -0.265788 -0.954305 + -0.620091 1.11109 -3.28075 -0.396794 -0.180007 -0.900084 + -0.60255 1.20799 -3.30343 -0.364755 -0.194845 -0.910488 + -0.599507 1.281 -3.32394 -0.365231 -0.331205 -0.870005 + -0.655449 1.09635 -3.25519 -0.736141 -0.084263 -0.671562 + -0.635353 1.19906 -3.28293 -0.711862 -0.0973557 -0.695538 + -0.63231 1.27207 -3.30345 -0.668897 -0.302297 -0.679112 + -0.651824 1.31642 -3.31503 -0.68029 -0.350574 -0.643664 + -0.60546 1.32904 -3.344 -0.384072 -0.2997 -0.873309 + -0.673716 1.09031 -3.22162 -0.974606 0.0245032 -0.222582 + -0.65362 1.19303 -3.24936 -0.944054 0.0317371 -0.328261 + -0.655198 1.28001 -3.25948 -0.945845 -0.236045 -0.222844 + -0.672569 1.06863 -3.1839 -0.99552 0.0529502 0.0783397 + -0.659673 1.21423 -3.19885 -0.999563 0.0254922 -0.0149709 + -0.661251 1.30121 -3.20897 -0.979716 -0.200277 -0.00677262 + -0.681044 1.35648 -3.19517 -0.957619 -0.286415 0.030529 + -0.674712 1.32436 -3.27106 -0.92112 -0.353839 -0.162284 + -0.669537 1.06381 -3.15232 -0.911409 0.0557262 0.407711 + -0.65664 1.2094 -3.16726 -0.991558 0.015298 0.128755 + -0.661988 1.30826 -3.16319 -0.97416 -0.221999 0.0415746 + -0.681781 1.36353 -3.1494 -0.965138 -0.258043 0.0438349 + -0.69142 1.39961 -3.20542 -0.989456 -0.144563 -0.00880469 + -0.658146 1.29773 -3.13945 -0.805085 -0.301235 0.510975 + -0.676183 1.34892 -3.11645 -0.770492 -0.343897 0.536728 + -0.688456 1.41574 -3.10452 -0.792945 -0.183318 0.581062 + -0.694053 1.43035 -3.13747 -0.990135 -0.120375 0.0717083 + -0.632104 1.28597 -3.13211 -0.056002 -0.210062 0.976083 + -0.650141 1.33717 -3.10911 -0.123922 -0.362223 0.923817 + -0.663083 1.43514 -3.08933 -0.162551 -0.104915 0.981106 + -0.694699 1.50129 -3.10261 -0.830008 0.0232654 0.557266 + -0.595426 1.3246 -3.12652 0.274753 -0.25648 0.926676 + -0.592426 1.37152 -3.1152 0.34967 -0.208938 0.913278 + -0.647141 1.3841 -3.09778 0.0446279 -0.20144 0.978483 + -0.610696 1.49529 -3.0929 0.257429 -0.0587408 0.96451 + -0.669327 1.52069 -3.08742 -0.321728 0.0169348 0.946681 + -0.553622 1.32178 -3.14126 0.359052 -0.207137 0.910042 + -0.553749 1.3855 -3.13142 0.409103 -0.159627 0.898418 + -0.594754 1.44425 -3.10136 0.321298 -0.1072 0.940891 + -0.559255 1.52791 -3.11476 0.525865 -0.00144729 0.850567 + -0.630192 1.55703 -3.08185 0.100977 0.00421621 0.99488 + -0.511293 1.3278 -3.15936 0.556579 -0.206374 0.804754 + -0.511419 1.39152 -3.14952 0.546418 -0.0832728 0.833362 + -0.556076 1.45823 -3.11757 0.498239 -0.0479288 0.865714 + -0.518278 1.5461 -3.14755 0.615737 0.0208376 0.787676 + -0.578752 1.58965 -3.10371 0.481484 0.0939817 0.871402 + -0.483735 1.34288 -3.1814 0.78377 -0.196626 0.589103 + -0.476746 1.40784 -3.17703 0.747944 -0.0508529 0.661811 + -0.515098 1.47642 -3.15036 0.618598 0.015804 0.785548 + -0.45367 1.43706 -3.20944 0.918614 -0.0757433 0.387829 + -0.480425 1.49274 -3.17787 0.649703 -0.0134271 0.76007 + -0.48108 1.54865 -3.17669 0.625375 0.0117252 0.780236 + -0.505491 1.60545 -3.16036 0.59917 0.120357 0.791524 + -0.445592 1.45761 -3.24887 0.994259 -0.0965756 -0.0460731 + -0.448117 1.50459 -3.20464 0.867023 -0.0560747 0.495103 + -0.448771 1.5605 -3.20346 0.825698 -0.0102778 0.564019 + -0.468293 1.608 -3.18951 0.651428 0.105774 0.751301 + -0.511716 1.65707 -3.16855 0.560681 0.227697 0.79611 + -0.457315 1.46607 -3.30609 0.927942 -0.0428979 -0.370247 + -0.451384 1.55784 -3.28539 0.917649 0.0563454 -0.393377 + -0.440038 1.52514 -3.24407 0.997817 -0.0386578 -0.0535343 + -0.44228 1.59049 -3.2147 0.911159 0.0678879 0.406424 + -0.461802 1.63799 -3.20075 0.718727 0.172063 0.673665 + -0.479175 1.46326 -3.34309 0.709444 0.0159014 -0.704582 + -0.473244 1.55503 -3.32238 0.735131 0.147445 -0.661697 + -0.478094 1.62457 -3.30764 0.610939 0.257808 -0.748524 + -0.451207 1.62985 -3.27541 0.89141 0.0858259 -0.444996 + -0.439861 1.59715 -3.23409 0.997209 0.0732936 -0.0142172 + -0.505342 1.43232 -3.35958 0.470989 0.00252229 -0.882135 + -0.511446 1.53358 -3.35532 0.429737 0.164057 -0.887925 + -0.516295 1.60312 -3.34057 0.416979 0.309491 -0.854602 + -0.537834 1.40705 -3.37375 0.182857 -0.0822492 -0.979693 + -0.543937 1.50831 -3.36949 0.303683 0.0899715 -0.948516 + -0.537023 1.60222 -3.34832 0.184123 0.368034 -0.9114 + -0.511614 1.6777 -3.29858 0.28937 0.526455 -0.799444 + -0.572964 1.40198 -3.36991 -0.202334 -0.168695 -0.964678 + -0.574402 1.46469 -3.38058 -0.0760759 -0.0126248 -0.997022 + -0.579204 1.5192 -3.3771 -0.193519 0.176511 -0.965088 + -0.548739 1.56282 -3.36601 0.316272 0.24226 -0.917214 + -0.613389 1.3855 -3.35319 -0.410076 -0.176219 -0.894866 + -0.614827 1.44822 -3.36385 -0.511316 -0.027955 -0.858938 + -0.61217 1.51388 -3.35691 -0.602245 0.206249 -0.771208 + -0.57272 1.58157 -3.35632 -0.320473 0.419932 -0.84909 + -0.561004 1.62097 -3.33863 -0.333849 0.508427 -0.793755 + -0.659754 1.37288 -3.32422 -0.703646 -0.128658 -0.698806 + -0.664568 1.44361 -3.31868 -0.778445 0.0472612 -0.625931 + -0.66191 1.50927 -3.31174 -0.759013 0.167191 -0.629243 + -0.605686 1.57624 -3.33613 -0.557732 0.40186 -0.726253 + -0.685088 1.36749 -3.28131 -0.94787 -0.157782 -0.276854 + -0.689902 1.43823 -3.27578 -0.953167 -0.00851331 -0.302326 + -0.689713 1.50917 -3.26688 -0.934219 0.121313 -0.335437 + -0.651512 1.5761 -3.29962 -0.691041 0.356942 -0.628533 + -0.695203 1.43541 -3.17712 -0.996594 -0.0814507 -0.0129031 + -0.693685 1.47402 -3.24747 -0.994809 -0.00486001 -0.101647 + -0.696247 1.54582 -3.18751 -0.98585 0.153649 -0.0670154 + -0.679315 1.57599 -3.25476 -0.892513 0.288802 -0.346431 + -0.64218 1.63361 -3.26286 -0.620717 0.576953 -0.530882 + -0.700219 1.51068 -3.1681 -0.999331 0.0341685 -0.0130322 + -0.699069 1.50562 -3.12845 -0.992633 0.0457791 0.112181 + -0.68932 1.58412 -3.16583 -0.966944 0.254928 0.0055216 + -0.672388 1.61429 -3.23308 -0.864085 0.404913 -0.299003 + -0.681454 1.58115 -3.10895 -0.855246 0.300638 0.422103 + -0.685824 1.58547 -3.1348 -0.93901 0.297114 0.173158 + -0.662005 1.66235 -3.18016 -0.789805 0.607915 -0.0815297 + -0.631797 1.68167 -3.20994 -0.577602 0.725212 -0.374758 + -0.596354 1.63375 -3.29937 -0.509814 0.600107 -0.61641 + -0.669976 1.57825 -3.09243 -0.573563 0.209215 0.791994 + -0.644528 1.66153 -3.13093 -0.566316 0.625387 0.536821 + -0.658509 1.6637 -3.14912 -0.761311 0.573747 0.302028 + -0.616199 1.70786 -3.17339 -0.466202 0.884441 0.0204983 + -0.586291 1.68653 -3.23816 -0.442823 0.760081 -0.47559 + -0.630841 1.61459 -3.08686 -0.0659155 0.32616 0.943014 + -0.63305 1.65863 -3.1144 -0.293166 0.660131 0.691578 + -0.587185 1.68532 -3.13944 0.142529 0.609273 0.780046 + -0.602219 1.70569 -3.1552 -0.13366 0.816413 0.561787 + -0.584976 1.64128 -3.1119 0.369978 0.364401 0.854592 + -0.527694 1.69846 -3.172 0.405885 0.534781 0.741125 + -0.542727 1.71883 -3.18776 0.0864944 0.93909 0.332609 + -0.570693 1.71273 -3.20162 -0.280839 0.926943 -0.248809 + -0.55558 1.6976 -3.25378 -0.517705 0.769314 -0.37435 + -0.473636 1.66762 -3.19725 0.65203 0.228858 0.722828 + -0.489614 1.70901 -3.2007 0.430944 0.54735 0.717423 + -0.505275 1.72271 -3.2178 0.0235698 0.984215 0.1754 + -0.53324 1.7166 -3.23165 -0.302276 0.938104 -0.169085 + -0.455115 1.66861 -3.22165 0.891253 0.240903 0.384231 + -0.466949 1.69824 -3.21814 0.778274 0.294762 0.554442 + -0.486203 1.72094 -3.212 0.293686 0.834376 0.466439 + -0.479063 1.71713 -3.24826 0.180208 0.931448 -0.316118 + -0.514641 1.71965 -3.26057 -0.104614 0.921259 -0.374616 + -0.452697 1.67527 -3.24104 0.934911 0.205384 0.28941 + -0.463538 1.71018 -3.22945 0.79587 0.39513 0.458763 + -0.459991 1.71537 -3.24245 0.685288 0.726361 -0.0527265 + -0.462616 1.69921 -3.26817 0.580206 0.523166 -0.624226 + -0.44915 1.68046 -3.25404 0.968713 0.217705 -0.119158 + -0.464674 1.6486 -3.28953 0.645647 0.253095 -0.720474 + -0.498194 1.70173 -3.28048 0.14585 0.642187 -0.752545 + -0.536981 1.70065 -3.28269 -0.317241 0.762649 -0.56367 + -0.565644 1.64481 -3.31499 -0.496902 0.601337 -0.625685 + -0.532342 1.6768 -3.30633 -0.0263397 0.614403 -0.788553 + 0.586175 0.537351 -3.1025 0.000243815 -0.866319 -0.499491 + 0.571676 0.540546 -3.10803 -0.494402 -0.846208 0.19874 + 0.577719 0.556843 -3.13631 -0.133621 -0.639282 -0.757274 + 0.566059 0.547996 -3.12093 -0.607597 -0.724037 -0.326491 + 0.572659 0.555143 -3.13333 -0.351091 -0.658123 -0.66604 + 0.557715 0.622536 -3.16013 -0.549172 -0.304283 -0.778345 + 0.562775 0.624236 -3.16311 -0.296171 -0.306302 -0.904689 + 0.575448 0.625885 -3.166 -0.122914 -0.30581 -0.944125 + 0.591256 0.557566 -3.13757 0.130257 -0.617514 -0.775699 + 0.599647 0.53971 -3.10657 0.39564 -0.88214 0.255535 + 0.548117 0.591963 -3.10712 -0.851261 -0.231359 0.470985 + 0.542499 0.599414 -3.12001 -0.96492 -0.256926 0.0540289 + 0.54317 0.60936 -3.13725 -0.876285 -0.286263 -0.387527 + 0.54977 0.616509 -3.14965 -0.721344 -0.297361 -0.625491 + 0.547943 0.740242 -3.18411 -0.610035 -0.1674 -0.77449 + 0.561824 0.584708 -3.09456 -0.55867 -0.186201 0.808219 + 0.53763 0.699075 -3.11274 -0.823995 -0.0514958 0.564251 + 0.527938 0.711931 -3.13499 -0.986741 -0.113444 0.116068 + 0.528608 0.721878 -3.15223 -0.931691 -0.144223 -0.333394 + 0.539998 0.734214 -3.17363 -0.788 -0.154734 -0.595913 + 0.576324 0.581513 -3.08902 -0.232011 -0.168985 0.957922 + 0.57636 0.686306 -3.09062 -0.19836 0.0200232 0.979925 + 0.551338 0.69182 -3.10017 -0.53232 -0.00919047 0.846493 + 0.546327 0.812116 -3.10224 -0.448823 -0.0142062 0.893508 + 0.523051 0.832381 -3.11654 -0.781541 -0.0682296 0.620112 + 0.586175 0.537351 -3.1025 -0.0382405 -0.36898 0.92865 + 0.595384 0.580943 -3.08802 0.14118 -0.173692 0.974628 + 0.59542 0.685736 -3.08962 0.116646 0.0276129 0.99279 + 0.600533 0.799135 -3.09494 0.188462 0.0350788 0.981454 + 0.571349 0.806601 -3.09268 -0.142137 0.0174456 0.989693 + 0.608855 0.583301 -3.0921 0.408782 -0.186392 0.893395 + 0.618668 0.689806 -3.09666 0.378271 0.0167921 0.925543 + 0.623781 0.803205 -3.10198 0.394585 0.0423474 0.917883 + 0.621625 0.587169 -3.09879 0.660343 -0.229307 0.715098 + 0.631437 0.693674 -3.10335 0.61122 -0.00708814 0.791429 + 0.643601 0.806782 -3.11376 0.630021 0.0108439 0.776503 + 0.634331 0.920423 -3.11392 0.460695 0.0582786 0.885643 + 0.604914 0.543026 -3.11231 0.599491 -0.793042 -0.10814 + 0.626892 0.590484 -3.10453 0.894568 -0.257591 0.365234 + 0.640528 0.699396 -3.11326 0.888186 -0.0642877 0.454964 + 0.652691 0.812505 -3.12367 0.883749 -0.0458952 0.465705 + 0.605372 0.551679 -3.12737 0.504876 -0.673182 -0.540301 + 0.630794 0.598641 -3.1187 0.96102 -0.276298 -0.0100097 + 0.644429 0.707551 -3.12743 0.989905 -0.109532 0.0899532 + 0.658747 0.825165 -3.14567 0.990262 -0.108622 0.0870825 + 0.667346 0.932309 -3.14009 0.883841 -0.00785025 0.467721 + 0.60783 0.623089 -3.16117 0.369652 -0.296886 -0.880464 + 0.621945 0.617204 -3.15097 0.634053 -0.296556 -0.714165 + 0.631252 0.607295 -3.13376 0.895559 -0.282223 -0.343981 + 0.64522 0.722485 -3.15341 0.936761 -0.164802 -0.30874 + 0.659537 0.840098 -3.17165 0.938084 -0.166874 -0.303564 + 0.588986 0.626609 -3.16726 0.0837446 -0.299678 -0.950358 + 0.611554 0.742554 -3.18823 0.385992 -0.219779 -0.89594 + 0.635913 0.732394 -3.17062 0.682056 -0.203846 -0.702315 + 0.569347 0.744823 -3.19213 -0.153065 -0.198109 -0.968155 + 0.59271 0.746072 -3.19432 0.095782 -0.220521 -0.970668 + 0.591484 0.874562 -3.22342 0.0317438 -0.231361 -0.97235 + 0.620733 0.865637 -3.21597 0.343933 -0.244555 -0.906589 + 0.645092 0.855476 -3.19836 0.667174 -0.225451 -0.709966 + 0.556674 0.743174 -3.18924 -0.327316 -0.176342 -0.928314 + 0.546451 0.880131 -3.2058 -0.569295 -0.120708 -0.813224 + 0.568121 0.873315 -3.22124 -0.354692 -0.199356 -0.913483 + 0.53772 0.8772 -3.20066 -0.66086 -0.0869969 -0.74545 + 0.519239 1.04396 -3.18963 -0.865697 -0.130476 -0.483265 + 0.539913 1.02456 -3.23291 -0.790094 -0.178882 -0.586305 + 0.561584 1.01774 -3.24835 -0.494967 -0.229583 -0.838033 + 0.523388 0.875809 -3.1798 -0.828502 -0.099929 -0.550999 + 0.504907 1.04257 -3.16877 -0.701565 -0.125339 -0.701496 + 0.494132 1.17213 -3.19393 -0.702786 -0.297564 -0.646179 + 0.51007 1.16584 -3.22143 -0.883429 -0.260642 -0.389383 + 0.530744 1.14643 -3.26471 -0.793758 -0.276857 -0.541571 + 0.511998 0.863474 -3.1584 -0.945307 -0.128199 -0.299932 + 0.488374 1.03288 -3.15513 -0.907395 -0.0970555 -0.408919 + 0.4776 1.16244 -3.18029 -0.942434 -0.0736707 -0.326177 + 0.513358 0.845238 -3.1388 -0.980347 -0.103779 0.167779 + 0.489735 1.01464 -3.13553 -0.901546 -0.0392282 0.430902 + 0.481043 1.14377 -3.15522 -0.784117 0.158754 0.599965 + 0.481353 1.25512 -3.22384 -0.987784 -0.134563 -0.0785871 + 0.513404 0.976579 -3.11442 -0.620808 -0.00632017 0.783937 + 0.504713 1.10571 -3.13411 -0.43755 0.197514 0.877233 + 0.499466 1.21596 -3.17468 -0.560644 0.224104 0.797155 + 0.484796 1.23645 -3.19877 -0.909717 0.11299 0.39956 + 0.536681 0.956314 -3.10013 -0.299688 0.0448607 0.952982 + 0.530518 1.08377 -3.11835 -0.212246 0.192842 0.958 + 0.525271 1.19402 -3.15892 -0.354516 0.225312 0.907498 + 0.520131 1.27847 -3.17029 -0.522122 -0.06221 0.850599 + 0.492573 1.29355 -3.19233 -0.785878 -0.0859075 0.612386 + 0.571401 0.931682 -3.09585 -0.0186609 0.0506652 0.998541 + 0.565238 1.05913 -3.11408 -0.0270512 0.17978 0.983335 + 0.555427 1.18942 -3.14536 -0.22573 0.16772 0.959643 + 0.550287 1.27386 -3.15673 -0.377021 -0.0697977 0.923571 + 0.600585 0.924214 -3.09811 0.26355 0.0591017 0.962834 + 0.599897 1.0532 -3.11111 0.172546 0.132078 0.976106 + 0.590086 1.18348 -3.14239 -0.159698 0.122843 0.979493 + 0.59209 1.27668 -3.14199 -0.260878 -0.122862 0.957522 + 0.553622 1.32178 -3.14126 -0.370477 -0.22021 0.90236 + 0.633643 1.04941 -3.12692 0.424491 0.0719949 0.902565 + 0.6301 1.19278 -3.13251 0.110953 0.0452532 0.992795 + 0.632104 1.28597 -3.13211 0.0597121 -0.214011 0.975004 + 0.650141 1.33717 -3.10911 0.130295 -0.352698 0.926621 + 0.595426 1.3246 -3.12652 -0.269633 -0.261987 0.92664 + 0.656342 1.0555 -3.13793 0.591563 0.0726874 0.802976 + 0.652799 1.19887 -3.14352 0.805247 -0.0103013 0.59285 + 0.658146 1.29773 -3.13945 0.807861 -0.295182 0.510125 + 0.676183 1.34892 -3.11645 0.76637 -0.33731 0.546716 + 0.647141 1.3841 -3.09778 0.0196004 -0.208752 0.977772 + 0.654151 0.924001 -3.12571 0.625688 0.0396191 0.779066 + 0.669537 1.06381 -3.15232 0.902329 0.0752977 0.42442 + 0.65664 1.2094 -3.16726 0.9916 0.0126026 0.128726 + 0.661988 1.30826 -3.16319 0.972988 -0.22795 0.0365212 + 0.681781 1.36353 -3.1494 0.967543 -0.250185 0.0355947 + 0.672569 1.06863 -3.1839 0.995392 0.0595037 0.0751907 + 0.659673 1.21423 -3.19885 0.999634 0.0247544 -0.0109318 + 0.661251 1.30121 -3.20897 0.976592 -0.214797 0.011416 + 0.673401 0.944969 -3.16209 0.990919 -0.0358034 0.129608 + 0.673716 1.09031 -3.22162 0.981413 0.0772892 -0.175653 + 0.65362 1.19303 -3.24936 0.951391 0.015203 -0.307611 + 0.655198 1.28001 -3.25948 0.945373 -0.237076 -0.223751 + 0.674548 0.966645 -3.1998 0.954604 -0.107671 -0.277738 + 0.655449 1.09635 -3.25519 0.734716 -0.0814427 -0.673469 + 0.635353 1.19906 -3.28293 0.702803 -0.113193 -0.702321 + 0.63231 1.27207 -3.30345 0.667225 -0.299354 -0.682054 + 0.674712 1.32436 -3.27106 0.922116 -0.337831 -0.188608 + 0.660103 0.982023 -3.22652 0.698063 -0.181005 -0.69278 + 0.620091 1.11109 -3.28075 0.407212 -0.167293 -0.897881 + 0.60255 1.20799 -3.30343 0.37079 -0.203717 -0.906098 + 0.599507 1.281 -3.32394 0.37684 -0.318738 -0.869711 + 0.624745 0.996771 -3.25208 0.350796 -0.236701 -0.906044 + 0.588752 1.12054 -3.29094 -0.0477699 -0.263829 -0.963386 + 0.571211 1.21744 -3.31362 0.221806 -0.250833 -0.942276 + 0.565112 1.28817 -3.33874 0.235505 -0.334477 -0.912503 + 0.60546 1.32904 -3.344 0.381397 -0.294914 -0.876106 + 0.595496 1.0057 -3.25953 -0.105458 -0.262441 -0.959168 + 0.554839 1.13258 -3.27977 -0.518927 -0.321927 -0.791883 + 0.547929 1.21951 -3.31952 -0.249059 -0.359619 -0.899246 + 0.54183 1.29023 -3.34464 -0.0740494 -0.338382 -0.938091 + 0.523834 1.23336 -3.30446 -0.697298 -0.358713 -0.620564 + 0.516057 1.30523 -3.34003 -0.582081 -0.354316 -0.731876 + 0.535934 1.34128 -3.36264 -0.137462 -0.260306 -0.955691 + 0.571065 1.33621 -3.3588 0.201581 -0.280311 -0.938505 + 0.505321 1.25524 -3.29279 -0.818346 -0.327323 -0.472408 + 0.497544 1.32711 -3.32836 -0.816902 -0.301401 -0.49176 + 0.483994 1.38721 -3.34153 -0.775746 -0.161629 -0.609995 + 0.510161 1.35627 -3.35803 -0.488695 -0.194202 -0.850566 + 0.489383 1.26154 -3.26528 -0.904968 -0.270941 -0.328062 + 0.481436 1.3366 -3.29665 -0.915867 -0.261005 -0.305063 + 0.467885 1.3967 -3.30982 -0.928441 -0.188584 -0.320053 + 0.457315 1.46607 -3.30609 -0.927096 -0.0425561 -0.372401 + 0.479175 1.46326 -3.34309 -0.658218 0.0666085 -0.749875 + 0.473405 1.33018 -3.25521 -0.967109 -0.225588 -0.117519 + 0.456161 1.38825 -3.2526 -0.976451 -0.197322 -0.087216 + 0.445592 1.45761 -3.24887 -0.993196 -0.110171 -0.0377359 + 0.477903 1.31404 -3.21642 -0.960145 -0.167453 0.223787 + 0.460659 1.3721 -3.21381 -0.94851 -0.199063 0.246379 + 0.45367 1.43706 -3.20944 -0.939605 -0.120269 0.320434 + 0.440038 1.52514 -3.24407 -0.998748 -0.0292534 -0.0405875 + 0.483735 1.34288 -3.1814 -0.7891 -0.202178 0.580039 + 0.476746 1.40784 -3.17703 -0.74284 -0.0650878 0.666298 + 0.448117 1.50459 -3.20464 -0.872914 -0.0389951 0.486313 + 0.439861 1.59715 -3.23409 -0.998251 0.0590164 -0.00333648 + 0.451384 1.55784 -3.28539 -0.923745 0.0418626 -0.380713 + 0.511293 1.3278 -3.15936 -0.555793 -0.207193 0.805087 + 0.511419 1.39152 -3.14952 -0.521974 -0.0549894 0.851187 + 0.480425 1.49274 -3.17787 -0.626794 0.0123308 0.779088 + 0.48108 1.54865 -3.17669 -0.625956 0.0126517 0.779755 + 0.448771 1.5605 -3.20346 -0.827301 0.0108676 0.561654 + 0.553749 1.3855 -3.13142 -0.438725 -0.116221 0.891074 + 0.515098 1.47642 -3.15036 -0.60825 -0.00548743 0.793726 + 0.518278 1.5461 -3.14755 -0.617348 0.0191448 0.786457 + 0.468293 1.608 -3.18951 -0.655544 0.0993218 0.748597 + 0.592426 1.37152 -3.1152 -0.329543 -0.19098 0.924623 + 0.556076 1.45823 -3.11757 -0.529834 -0.0763028 0.844662 + 0.559255 1.52791 -3.11476 -0.52542 -0.0022562 0.85084 + 0.505491 1.60545 -3.16036 -0.596333 0.115572 0.794374 + 0.461802 1.63799 -3.20075 -0.728222 0.170082 0.663902 + 0.594754 1.44425 -3.10136 -0.320473 -0.108846 0.940983 + 0.610696 1.49529 -3.0929 -0.300197 -0.069006 0.951378 + 0.578752 1.58965 -3.10371 -0.455998 0.109159 0.883261 + 0.663083 1.43514 -3.08933 0.1661 -0.119303 0.978865 + 0.630192 1.55703 -3.08185 -0.10993 0.030537 0.99347 + 0.584976 1.64128 -3.1119 -0.376148 0.36761 0.850515 + 0.511716 1.65707 -3.16855 -0.528292 0.248882 0.811767 + 0.473636 1.66762 -3.19725 -0.654973 0.238546 0.717012 + 0.688456 1.41574 -3.10452 0.785701 -0.191776 0.588129 + 0.669327 1.52069 -3.08742 0.343381 0.0137743 0.939095 + 0.669976 1.57825 -3.09243 0.545064 0.242442 0.802575 + 0.630841 1.61459 -3.08686 0.0365782 0.313114 0.949011 + 0.587185 1.68532 -3.13944 -0.243375 0.578913 0.778221 + 0.694053 1.43035 -3.13747 0.98998 -0.126578 0.062592 + 0.699069 1.50562 -3.12845 0.992826 0.0512256 0.108035 + 0.694699 1.50129 -3.10261 0.831711 0.0149211 0.555008 + 0.681454 1.58115 -3.10895 0.85654 0.306446 0.415247 + 0.63305 1.65863 -3.1144 0.303509 0.605713 0.735523 + 0.695203 1.43541 -3.17712 0.994445 -0.105055 -0.00647968 + 0.700219 1.51068 -3.1681 0.999117 0.0413441 -0.00750497 + 0.685824 1.58547 -3.1348 0.953066 0.263568 0.148983 + 0.658509 1.6637 -3.14912 0.758979 0.576913 0.301865 + 0.644528 1.66153 -3.13093 0.593316 0.610819 0.524287 + 0.681044 1.35648 -3.19517 0.96115 -0.273334 0.0384635 + 0.69142 1.39961 -3.20542 0.988231 -0.150775 0.025803 + 0.693685 1.47402 -3.24747 0.984788 -0.00702456 -0.173617 + 0.685088 1.36749 -3.28131 0.939304 -0.178376 -0.293071 + 0.689902 1.43823 -3.27578 0.945442 0.0647043 -0.3193 + 0.664568 1.44361 -3.31868 0.772747 0.0315309 -0.633931 + 0.689713 1.50917 -3.26688 0.936623 0.0982223 -0.336288 + 0.659754 1.37288 -3.32422 0.700141 -0.11796 -0.704193 + 0.613389 1.3855 -3.35319 0.438298 -0.151212 -0.886019 + 0.614827 1.44822 -3.36385 0.520671 -0.036705 -0.852968 + 0.61217 1.51388 -3.35691 0.583947 0.183285 -0.79083 + 0.66191 1.50927 -3.31174 0.762714 0.1616 -0.626221 + 0.651824 1.31642 -3.31503 0.692214 -0.337772 -0.637769 + 0.572964 1.40198 -3.36991 0.180221 -0.134421 -0.974398 + 0.574402 1.46469 -3.38058 -0.0310583 -0.0582377 -0.997819 + 0.537834 1.40705 -3.37375 -0.178854 -0.0681361 -0.981514 + 0.543937 1.50831 -3.36949 -0.294815 0.0607852 -0.953619 + 0.548739 1.56282 -3.36601 -0.170037 0.270589 -0.947559 + 0.579204 1.5192 -3.3771 0.20674 0.158669 -0.965444 + 0.505342 1.43232 -3.35958 -0.470406 0.00257515 -0.882446 + 0.511446 1.53358 -3.35532 -0.48973 0.124315 -0.862966 + 0.537023 1.60222 -3.34832 -0.177116 0.384811 -0.905842 + 0.57272 1.58157 -3.35632 0.313933 0.408095 -0.857266 + 0.605686 1.57624 -3.33613 0.552667 0.405386 -0.728163 + 0.473244 1.55503 -3.32238 -0.72584 0.125452 -0.676327 + 0.478094 1.62457 -3.30764 -0.543061 0.294721 -0.786272 + 0.516295 1.60312 -3.34057 -0.420779 0.315638 -0.850481 + 0.532342 1.6768 -3.30633 0.048752 0.589195 -0.806519 + 0.561004 1.62097 -3.33863 0.273532 0.518614 -0.810074 + 0.451207 1.62985 -3.27541 -0.90451 0.100457 -0.414452 + 0.464674 1.6486 -3.28953 -0.642418 0.275969 -0.71494 + 0.511614 1.6777 -3.29858 -0.347331 0.436341 -0.830041 + 0.498194 1.70173 -3.28048 -0.230112 0.644323 -0.729312 + 0.536981 1.70065 -3.28269 0.370334 0.757388 -0.537788 + 0.44915 1.68046 -3.25404 -0.968714 0.217707 -0.119152 + 0.462616 1.69921 -3.26817 -0.580206 0.523167 -0.624225 + 0.452697 1.67527 -3.24104 -0.934911 0.205382 0.289412 + 0.459991 1.71537 -3.24245 -0.685288 0.726361 -0.0527265 + 0.479063 1.71713 -3.24826 -0.15561 0.937762 -0.310464 + 0.514641 1.71965 -3.26057 0.0862263 0.949963 -0.300226 + 0.44228 1.59049 -3.2147 -0.92994 0.0129552 0.367484 + 0.455115 1.66861 -3.22165 -0.891256 0.240899 0.384227 + 0.466949 1.69824 -3.21814 -0.778274 0.294762 0.554442 + 0.463538 1.71018 -3.22945 -0.79587 0.39513 0.458763 + 0.486203 1.72094 -3.212 -0.361332 0.839313 0.406194 + 0.489614 1.70901 -3.2007 -0.53588 0.426681 0.728544 + 0.527694 1.69846 -3.172 -0.387392 0.504702 0.771494 + 0.505275 1.72271 -3.2178 0.0152854 0.997239 0.0726618 + 0.53324 1.7166 -3.23165 0.277026 0.943507 -0.1818 + 0.55558 1.6976 -3.25378 0.525324 0.776818 -0.347259 + 0.565644 1.64481 -3.31499 0.489238 0.61329 -0.620099 + 0.602219 1.70569 -3.1552 0.117109 0.851477 0.511149 + 0.542727 1.71883 -3.18776 -0.0753783 0.939426 0.334361 + 0.570693 1.71273 -3.20162 0.284602 0.933741 -0.217093 + 0.586291 1.68653 -3.23816 0.434657 0.765782 -0.473975 + 0.596354 1.63375 -3.29937 0.515409 0.604416 -0.607483 + 0.616199 1.70786 -3.17339 0.424719 0.90491 0.0274165 + 0.662005 1.66235 -3.18016 0.83368 0.541835 -0.106734 + 0.631797 1.68167 -3.20994 0.564281 0.719699 -0.4045 + 0.64218 1.63361 -3.26286 0.61592 0.582273 -0.530661 + 0.651512 1.5761 -3.29962 0.694891 0.364893 -0.619661 + 0.68932 1.58412 -3.16583 0.968412 0.249146 0.0102062 + 0.672388 1.61429 -3.23308 0.864893 0.406283 -0.294778 + 0.696247 1.54582 -3.18751 0.986079 0.153325 -0.0643388 + 0.679315 1.57599 -3.25476 0.894676 0.284279 -0.344587 + -0.791942 1.67972 -2.78532 0.57781 0.0178925 -0.815975 + -0.814274 1.75317 -2.76932 0.5203 0.360047 -0.774374 + -0.806332 1.74827 -2.76421 0.525217 0.247992 -0.814031 + -0.798455 1.68053 -2.78978 0.573549 0.0465163 -0.817849 + -0.821988 1.74942 -2.77501 0.392105 0.393541 -0.831492 + -0.839872 1.7517 -2.78167 0.324098 0.346841 -0.880149 + -0.783999 1.67483 -2.78021 0.520899 0.00297169 -0.853613 + -0.790093 1.63509 -2.76291 0.0406251 -0.657813 -0.752085 + -0.796606 1.6359 -2.76737 0.556685 -0.551575 -0.621182 + -0.806169 1.67678 -2.79547 0.58398 0.0337181 -0.811068 + -0.766685 1.66096 -2.76934 0.516122 0.0149379 -0.856385 + -0.771053 1.63108 -2.76692 0.0382173 -0.475519 -0.878875 + -0.798681 1.59594 -2.70875 -0.0721774 -0.809432 -0.582761 + -0.806055 1.59391 -2.7076 0.346035 -0.808587 -0.475865 + -0.785028 1.76407 -2.74993 0.397479 0.181623 -0.899457 + -0.745381 1.67676 -2.75506 0.406251 0.141869 -0.902681 + -0.753738 1.61722 -2.75605 0.0231711 -0.459699 -0.887772 + -0.779641 1.59193 -2.71276 -0.331518 -0.754291 -0.566692 + -0.801867 1.57579 -2.67967 -0.0110228 -0.910444 -0.413485 + -0.790993 1.80279 -2.74591 0.275007 0.172826 -0.945782 + -0.698784 1.73801 -2.7231 0.50199 0.185631 -0.844717 + -0.679217 1.69936 -2.72044 0.629685 0.134055 -0.765197 + -0.725814 1.6381 -2.75241 0.355598 -0.0303209 -0.934147 + -0.734684 1.58857 -2.74297 0.0327962 -0.619907 -0.78399 + -0.853578 1.78375 -2.77168 0.220067 0.407499 -0.886293 + -0.844884 1.82745 -2.74932 0.163304 0.275887 -0.947216 + -0.769243 1.83163 -2.73897 0.27562 0.220377 -0.935664 + -0.70475 1.77673 -2.71907 0.421994 0.128815 -0.8974 + -0.658122 1.69592 -2.69818 0.752723 0.0196255 -0.658044 + -0.891408 1.71798 -2.81212 -0.0288314 0.365883 -0.930214 + -0.895508 1.7952 -2.77479 -0.0844793 0.454784 -0.886586 + -0.886814 1.83889 -2.75243 -0.0429062 0.443317 -0.895338 + -0.823133 1.85629 -2.74238 0.0960795 0.302845 -0.948184 + -0.747032 1.84454 -2.72582 0.413157 0.274891 -0.86818 + -0.877702 1.68593 -2.82211 0.0811858 0.173054 -0.981561 + -0.92314 1.70255 -2.80862 -0.434134 0.205941 -0.876993 + -0.92724 1.77977 -2.77129 -0.408501 0.381335 -0.829283 + -0.930033 1.84529 -2.73959 -0.358719 0.425365 -0.830895 + -0.896273 1.88951 -2.72178 -0.13649 0.4492 -0.882944 + -0.840681 1.667 -2.81473 0.317423 0.0409339 -0.9474 + -0.862381 1.6295 -2.81421 0.133586 -0.421408 -0.896978 + -0.899401 1.64843 -2.82158 -0.219311 -0.271845 -0.937018 + -0.959759 1.68877 -2.78486 -0.66129 0.110325 -0.741973 + -0.822798 1.66471 -2.80807 0.497409 -0.0407565 -0.866558 + -0.828764 1.61901 -2.79522 0.533216 -0.552134 -0.640959 + -0.886801 1.59359 -2.78687 -0.0550033 -0.675752 -0.735074 + -0.93602 1.63465 -2.79782 -0.445682 -0.311752 -0.839153 + -0.812135 1.63108 -2.78261 0.700325 -0.474183 -0.533568 + -0.853184 1.5831 -2.76788 0.363031 -0.782004 -0.506634 + -0.912271 1.57791 -2.76563 -0.193856 -0.75236 -0.629582 + -0.96149 1.61897 -2.77657 -0.630373 -0.365855 -0.684675 + -0.821584 1.58909 -2.72284 0.582354 -0.740776 -0.334836 + -0.835961 1.56237 -2.67765 0.502603 -0.853749 -0.136023 + -0.867561 1.55638 -2.72269 0.331162 -0.864951 -0.377081 + -0.907131 1.55762 -2.73451 -0.126398 -0.87775 -0.462145 + -0.967511 1.58868 -2.74568 -0.695097 -0.574968 -0.431569 + -0.80924 1.57376 -2.67852 0.270974 -0.922729 -0.274124 + -0.815939 1.57227 -2.6585 0.29356 -0.955485 0.0294999 + -0.846625 1.56037 -2.63923 0.499598 -0.859789 0.105657 + -0.880536 1.52939 -2.66746 0.362825 -0.921217 -0.140417 + -0.920106 1.53063 -2.67928 -0.314388 -0.874317 -0.369771 + -0.801583 1.5752 -2.67731 -0.0205262 -0.985793 -0.166709 + -0.808282 1.57371 -2.65728 -0.0105827 -0.997689 -0.0671084 + -0.826604 1.57027 -2.62008 0.279188 -0.959767 0.0300253 + -0.858967 1.55925 -2.59536 0.443394 -0.850433 0.283133 + -0.772061 1.57169 -2.68612 -0.196182 -0.958584 -0.206469 + -0.773179 1.56623 -2.65844 -0.205305 -0.967011 -0.150798 + -0.819686 1.57149 -2.61797 -0.0290257 -0.996849 -0.0738163 + -0.831381 1.56927 -2.59942 0.216451 -0.966743 0.136227 + -0.772345 1.57227 -2.68849 -0.261866 -0.892961 -0.366123 + -0.708951 1.55867 -2.69122 0.297745 -0.893899 -0.335102 + -0.710069 1.55321 -2.66353 0.179969 -0.963283 -0.199239 + -0.784583 1.564 -2.61912 -0.247033 -0.951614 -0.182772 + -0.727387 1.56891 -2.7187 0.0782802 -0.839601 -0.537534 + -0.685665 1.60601 -2.71707 0.685552 -0.337869 -0.644875 + -0.667228 1.59578 -2.68959 0.745192 -0.437352 -0.5034 + -0.659861 1.57763 -2.65526 0.747017 -0.635531 -0.195105 + -0.721856 1.54442 -2.62195 0.0933065 -0.989797 -0.107679 + -0.706759 1.60945 -2.73933 0.543491 -0.296007 -0.785492 + -0.635948 1.67068 -2.66666 0.875226 -0.1293 -0.466112 + -0.628581 1.65253 -2.63233 0.938848 -0.25293 -0.233646 + -0.671648 1.56884 -2.61368 0.655234 -0.754728 0.0324623 + -0.73635 1.54179 -2.59341 0.0294985 -0.999311 -0.0225176 + -0.799076 1.56137 -2.59059 -0.27454 -0.929179 -0.247497 + -0.824463 1.57049 -2.59732 -0.065448 -0.989332 -0.130146 + -0.825704 1.57004 -2.59471 -0.15939 -0.987205 0.00451154 + -0.837516 1.57337 -2.58611 0.1607 -0.924362 0.346021 + -0.691584 1.55657 -2.57761 0.495977 -0.831434 0.250447 + -0.769892 1.54273 -2.56278 -0.114509 -0.986836 0.114198 + -0.800317 1.56093 -2.58798 -0.336817 -0.92085 -0.196442 + -0.819805 1.56833 -2.57142 -0.461571 -0.886975 0.0151249 + -0.831839 1.57414 -2.58139 -0.293109 -0.940601 0.171338 + -0.647869 1.61192 -2.55956 0.751836 -0.537037 0.382536 + -0.725127 1.55751 -2.54698 0.322835 -0.844862 0.426597 + -0.78938 1.55013 -2.54623 -0.279208 -0.925488 0.255957 + -0.836968 1.58108 -2.53408 -0.531703 -0.77134 0.349752 + -0.849002 1.58689 -2.54405 -0.198611 -0.853073 0.482514 + -0.627933 1.62419 -2.59563 0.895932 -0.443789 -0.0188942 + -0.607579 1.71319 -2.55455 0.961848 -0.209037 0.176497 + -0.632771 1.68983 -2.52035 0.796637 -0.332407 0.504851 + -0.682931 1.59906 -2.52419 0.595678 -0.623201 0.506742 + -0.608227 1.74153 -2.59125 0.988661 -0.093604 -0.117422 + -0.598621 1.84131 -2.53434 0.995656 -0.0682184 0.0633647 + -0.610765 1.83919 -2.48811 0.915465 -0.179423 0.360182 + -0.635957 1.81583 -2.45391 0.735505 -0.293353 0.610718 + -0.667834 1.67697 -2.48499 0.608988 -0.369415 0.701901 + -0.612124 1.75432 -2.62735 0.93876 -0.0190606 -0.344043 + -0.602519 1.85409 -2.57044 0.990159 -0.0120693 -0.139424 + -0.59704 1.91508 -2.53562 0.991416 0.110059 -0.070574 + -0.599069 1.91403 -2.49513 0.986942 0.0314197 0.157982 + -0.611212 1.91192 -2.4489 0.926831 -0.158407 0.340429 + -0.634298 1.77956 -2.65887 0.81776 0.0940477 -0.567824 + -0.60743 1.84952 -2.60037 0.919925 0.10691 -0.377237 + -0.601951 1.91051 -2.56554 0.916953 0.183154 -0.354474 + -0.652085 1.79466 -2.67979 0.700277 0.195223 -0.686659 + -0.625217 1.86462 -2.62128 0.745472 0.264673 -0.611734 + -0.62568 1.9042 -2.60259 0.726355 0.303311 -0.616774 + -0.609082 1.94796 -2.55421 0.843702 0.381512 -0.377644 + -0.682539 1.78964 -2.70592 0.54287 0.185755 -0.819016 + -0.671696 1.85946 -2.66719 0.610272 0.334825 -0.717955 + -0.672159 1.89904 -2.64849 0.61009 0.351035 -0.710327 + -0.671718 1.93004 -2.63245 0.56861 0.44856 -0.689548 + -0.63281 1.94165 -2.59125 0.661195 0.429934 -0.6148 + -0.70215 1.85444 -2.69333 0.547532 0.325593 -0.770842 + -0.717728 1.89175 -2.68815 0.546454 0.346397 -0.762494 + -0.717287 1.92276 -2.6721 0.533751 0.454755 -0.712958 + -0.681147 1.97629 -2.60161 0.508432 0.569605 -0.645791 + -0.76261 1.88185 -2.72064 0.346042 0.291973 -0.891632 + -0.769293 1.92029 -2.7111 0.336904 0.418033 -0.843649 + -0.774611 1.97526 -2.67192 0.326314 0.606909 -0.724693 + -0.722605 1.97773 -2.63292 0.49186 0.57027 -0.657925 + -0.821635 1.89349 -2.72653 0.0229753 0.337679 -0.940981 + -0.828318 1.93192 -2.71699 -0.0504029 0.400772 -0.91479 + -0.827004 1.98142 -2.67858 0.0468778 0.647493 -0.760628 + -0.775786 2.05593 -2.59694 0.316922 0.644763 -0.695587 + -0.894775 1.92671 -2.70593 -0.163856 0.429055 -0.888292 + -0.894387 1.95759 -2.68967 -0.166821 0.526362 -0.833734 + -0.893074 2.0071 -2.65126 -0.132478 0.695714 -0.705997 + -0.88035 2.0551 -2.5984 -0.182775 0.717491 -0.672161 + -0.828179 2.06209 -2.6036 -0.00471381 0.692041 -0.721843 + -0.939981 1.93761 -2.6864 -0.445685 0.415391 -0.792979 + -0.939594 1.96849 -2.67014 -0.444465 0.534299 -0.71901 + -0.932038 2.00774 -2.6362 -0.434742 0.68001 -0.590412 + -0.919314 2.05575 -2.58333 -0.452493 0.701658 -0.550387 + -0.865733 2.12251 -2.53207 -0.223287 0.710371 -0.66747 + -0.939493 1.89591 -2.70895 -0.425375 0.416242 -0.803616 + -0.960655 1.93025 -2.67183 -0.775159 0.30184 -0.554996 + -0.960536 1.96055 -2.6545 -0.772933 0.411177 -0.483228 + -0.952981 1.9998 -2.62055 -0.747207 0.551452 -0.370921 + -0.93599 2.04759 -2.57125 -0.748226 0.579306 -0.323362 + -0.960167 1.88856 -2.69438 -0.715761 0.349496 -0.604598 + -0.975678 1.9163 -2.64574 -0.933873 0.210408 -0.289154 + -0.975559 1.9466 -2.6284 -0.934795 0.261847 -0.23999 + -0.966714 1.98608 -2.59648 -0.907364 0.393622 -0.147483 + -0.967167 1.83358 -2.72033 -0.678341 0.340172 -0.651258 + -0.98876 1.82 -2.69461 -0.843179 0.265588 -0.467453 + -0.98176 1.87498 -2.66866 -0.889918 0.319809 -0.32522 + -0.984638 1.89665 -2.60977 -0.995455 0.0869279 -0.0388972 + -0.985072 1.92573 -2.59022 -0.992825 0.118331 -0.0172081 + -0.964374 1.76805 -2.75202 -0.660491 0.281924 -0.695895 + -0.989218 1.75021 -2.72527 -0.8451 0.167064 -0.507835 + -1.00836 1.80441 -2.66154 -0.972147 0.198398 -0.124776 + -0.99072 1.85533 -2.63269 -0.973704 0.224957 0.0359918 + -0.982019 1.86931 -2.57694 -0.977464 -0.0539966 0.204077 + -0.984603 1.67093 -2.75811 -0.882443 -0.0137757 -0.470218 + -0.990624 1.64064 -2.72722 -0.946781 -0.20896 -0.244827 + -1.00882 1.73461 -2.6922 -0.964303 0.0181394 -0.264178 + -1.00914 1.71738 -2.65557 -0.981669 -0.122694 0.145849 + -1.00693 1.78301 -2.62707 -0.9627 0.040933 0.267458 + -0.96237 1.56839 -2.71456 -0.62331 -0.755816 -0.200568 + -0.990947 1.6234 -2.69058 -0.945689 -0.321992 -0.0446497 + -0.986209 1.61679 -2.64923 -0.930161 -0.305232 0.204042 + -0.989555 1.70095 -2.61435 -0.901705 -0.174052 0.39577 + -0.987338 1.76658 -2.58585 -0.864124 -0.0264926 0.502581 + -0.957632 1.56178 -2.6732 -0.748753 -0.643059 -0.160759 + -0.920658 1.52071 -2.64289 -0.235248 -0.971297 -0.0352134 + -0.958184 1.55185 -2.63682 -0.828443 -0.556163 0.0660652 + -0.960761 1.58365 -2.61395 -0.861433 -0.259178 0.43676 + -0.969637 1.61842 -2.61355 -0.837963 -0.221706 0.498663 + -0.972983 1.70257 -2.57868 -0.802892 -0.206512 0.559212 + -0.892878 1.52828 -2.6236 0.341683 -0.91388 0.219261 + -0.9349 1.53172 -2.60313 -0.485599 -0.779924 0.394858 + -0.937477 1.56351 -2.58027 -0.713627 -0.37592 0.591118 + -0.930964 1.6479 -2.55143 -0.742944 -0.186842 0.642748 + -0.93984 1.68266 -2.55103 -0.690224 -0.213433 0.691402 + -0.907121 1.53929 -2.58384 0.0272401 -0.829286 0.55816 + -0.917493 1.56796 -2.55886 -0.414358 -0.493459 0.764726 + -0.91098 1.65235 -2.53002 -0.598383 -0.165821 0.783863 + -0.870453 1.57278 -2.5533 0.204894 -0.767801 0.607042 + -0.880826 1.60145 -2.52833 -0.260776 -0.499113 0.826367 + -0.853085 1.62012 -2.50619 -0.442946 -0.440621 0.780802 + -0.883239 1.67101 -2.50788 -0.538309 -0.215685 0.81468 + -0.82717 1.59283 -2.50967 -0.414279 -0.631358 0.65556 + -0.806529 1.64262 -2.4703 -0.390172 -0.333282 0.858306 + -0.808238 1.67943 -2.46158 -0.41718 -0.25338 0.872788 + -0.884948 1.70783 -2.49917 -0.578255 -0.137293 0.804221 + -0.932378 1.72366 -2.53138 -0.623133 -0.107127 0.774745 + -0.779582 1.56188 -2.52182 -0.112349 -0.809437 0.576358 + -0.780614 1.61533 -2.47378 -0.184575 -0.537896 0.822557 + -0.753714 1.67357 -2.44263 0.0275537 -0.358409 0.933158 + -0.825457 1.74618 -2.44792 -0.484789 -0.329762 0.810085 + -0.749654 1.56542 -2.51827 0.163701 -0.804854 0.570449 + -0.750687 1.61887 -2.47023 0.154318 -0.531271 0.833029 + -0.710487 1.66167 -2.46787 0.421 -0.37668 0.825149 + -0.732821 1.75039 -2.41834 0.189249 -0.403489 0.895199 + -0.770933 1.74032 -2.42897 -0.255983 -0.367724 0.894009 + -0.707459 1.60697 -2.49548 0.435904 -0.558892 0.705427 + -0.690167 1.76568 -2.43545 0.509453 -0.355384 0.783684 + -0.697106 1.83315 -2.39531 0.528657 -0.461935 0.712136 + -0.743447 1.80265 -2.39067 0.156302 -0.545101 0.823671 + -0.642895 1.8833 -2.41377 0.723963 -0.353518 0.592371 + -0.643676 1.91163 -2.39283 0.72154 -0.326284 0.610671 + -0.698558 1.86001 -2.37167 0.521743 -0.457078 0.720322 + -0.744899 1.82951 -2.36703 0.169652 -0.550515 0.817405 + -0.78156 1.79259 -2.4013 -0.232799 -0.568733 0.78889 + -0.611993 1.94024 -2.42795 0.940178 -0.0642109 0.334577 + -0.64878 1.9439 -2.37416 0.691696 -0.153799 0.705622 + -0.703661 1.89229 -2.35301 0.442762 -0.317334 0.838606 + -0.747448 1.87221 -2.34499 0.0964543 -0.380229 0.919849 + -0.783061 1.81933 -2.37746 -0.238089 -0.558351 0.794706 + -0.606495 1.95083 -2.4826 0.97823 0.177073 0.108223 + -0.615318 1.98028 -2.46401 0.952364 0.286998 0.10313 + -0.620815 1.96969 -2.40936 0.904435 0.131668 0.405784 + -0.660547 1.96443 -2.36165 0.677487 -0.244718 0.693631 + -0.604467 1.95189 -2.52309 0.956868 0.281856 -0.0704339 + -0.616228 1.99017 -2.50007 0.922045 0.382861 -0.0570147 + -0.63063 2.01243 -2.43561 0.977425 0.195109 0.0810696 + -0.632582 1.99022 -2.39685 0.927693 0.0367494 0.371531 + -0.620843 1.98625 -2.53119 0.794554 0.503069 -0.340008 + -0.638015 2.03301 -2.49136 0.816237 0.485109 -0.31373 + -0.631541 2.02232 -2.47167 0.948275 0.315435 -0.0357073 + -0.633538 2.0472 -2.40539 0.999548 -0.0195783 -0.0228 + -0.64224 1.9879 -2.56041 0.611052 0.567786 -0.551574 + -0.659411 2.03466 -2.52058 0.626613 0.591763 -0.507122 + -0.642004 2.07463 -2.4519 0.874311 0.319315 -0.365538 + -0.63553 2.06394 -2.43221 0.984795 0.0972452 -0.143952 + -0.695002 2.04605 -2.54545 0.526019 0.600353 -0.602396 + -0.697051 2.09976 -2.49575 0.568416 0.54089 -0.619953 + -0.66146 2.08837 -2.47088 0.684603 0.4793 -0.549173 + -0.633207 2.11924 -2.40512 0.886307 0.235552 -0.398717 + -0.73646 2.04749 -2.57676 0.482143 0.597229 -0.64098 + -0.731765 2.11448 -2.51369 0.514485 0.554786 -0.653848 + -0.683014 2.15348 -2.43972 0.593593 0.509452 -0.622981 + -0.652663 2.13298 -2.42409 0.706599 0.4343 -0.55866 + -0.771091 2.12291 -2.53387 0.311195 0.636454 -0.705751 + -0.751319 2.1867 -2.46873 0.34495 0.628141 -0.697459 + -0.717728 2.16819 -2.45766 0.538277 0.537825 -0.648847 + -0.665825 2.23238 -2.35891 0.606256 0.498854 -0.619354 + -0.813562 2.1295 -2.53728 0.00273403 0.701855 -0.712315 + -0.79379 2.19329 -2.47214 0.0409115 0.709869 -0.703144 + -0.729772 2.26941 -2.38266 0.364625 0.625057 -0.690183 + -0.696182 2.2509 -2.37159 0.549229 0.532916 -0.643699 + -0.838586 2.19968 -2.45973 -0.189411 0.723393 -0.663947 + -0.811783 2.28762 -2.36961 -0.164354 0.733101 -0.659963 + -0.766986 2.28123 -2.38203 0.0618663 0.711739 -0.699714 + -0.701887 2.37513 -2.27055 0.373886 0.648147 -0.663412 + -0.897743 2.11935 -2.52144 -0.467667 0.688372 -0.554465 + -0.870596 2.19652 -2.4491 -0.442411 0.697236 -0.564034 + -0.839885 2.28881 -2.35764 -0.421895 0.710917 -0.562673 + -0.779373 2.3927 -2.25875 -0.148816 0.764298 -0.627456 + -0.739101 2.38695 -2.26991 0.0684736 0.739947 -0.669171 + -0.914418 2.11119 -2.50936 -0.754422 0.569669 -0.326073 + -0.884993 2.19264 -2.4363 -0.735518 0.583563 -0.34419 + -0.854282 2.28493 -2.34484 -0.731699 0.588301 -0.344265 + -0.820418 2.3904 -2.23527 -0.713451 0.628584 -0.309628 + -0.807475 2.39389 -2.24678 -0.409072 0.746312 -0.525051 + -0.949723 2.03387 -2.54718 -0.896401 0.428703 -0.112598 + -0.925867 2.09974 -2.48881 -0.896788 0.42718 -0.115278 + -0.896442 2.1812 -2.41575 -0.897487 0.424849 -0.118412 + -0.864403 2.27556 -2.32598 -0.897659 0.422328 -0.125891 + -0.957524 2.01599 -2.51681 -0.955873 0.283779 0.0760023 + -0.933667 2.08186 -2.45844 -0.955482 0.288736 0.0607038 + -0.903362 2.16533 -2.38881 -0.955779 0.289147 0.0536657 + -0.871323 2.25969 -2.29903 -0.961071 0.272168 0.0476102 + -0.976227 1.96522 -2.5583 -0.969524 0.239674 0.0507815 + -0.97488 1.94291 -2.52665 -0.965659 0.054861 0.253954 + -0.956177 1.99368 -2.48517 -0.958448 0.136292 0.250603 + -0.933468 2.06511 -2.43129 -0.962056 0.14511 0.231065 + -0.982453 1.8984 -2.55738 -0.978913 -0.0512429 0.197746 + -0.960645 1.90798 -2.49709 -0.903533 -0.108241 0.414622 + -0.947709 1.97814 -2.45671 -0.913408 -0.0244175 0.406312 + -0.925 2.04957 -2.40284 -0.92221 0.0065995 0.386634 + -0.968217 1.86347 -2.52782 -0.913737 -0.190978 0.358624 + -0.951119 1.83526 -2.50792 -0.817247 -0.303458 0.489919 + -0.946745 1.88814 -2.47632 -0.80619 -0.218147 0.549972 + -0.933809 1.95831 -2.43594 -0.816448 -0.163882 0.553674 + -0.967303 1.83543 -2.5493 -0.906375 -0.180192 0.382119 + -0.950205 1.80722 -2.5294 -0.804771 -0.291616 0.517014 + -0.931499 1.81302 -2.49631 -0.68208 -0.41811 0.59996 + -0.927125 1.86591 -2.46471 -0.675243 -0.315787 0.666578 + -0.920535 1.95166 -2.42247 -0.696359 -0.265959 0.666596 + -0.989285 1.83393 -2.59822 -0.949426 0.0785087 0.304017 + -0.974569 1.80005 -2.57059 -0.854614 -0.0328341 0.518224 + -0.952752 1.77705 -2.54377 -0.725919 -0.154795 0.670135 + -0.930384 1.78543 -2.5186 -0.669148 -0.361581 0.64923 + -0.96552 1.74357 -2.55903 -0.734927 -0.0970597 0.671164 + -0.932931 1.75525 -2.53296 -0.622377 -0.13721 0.770598 + -0.890599 1.77759 -2.4862 -0.592495 -0.434254 0.678508 + -0.891714 1.80518 -2.46391 -0.591678 -0.458083 0.663383 + -0.890927 1.85616 -2.43603 -0.624096 -0.337144 0.704867 + -0.885501 1.73942 -2.50075 -0.614311 -0.143049 0.775989 + -0.830554 1.78436 -2.43336 -0.486673 -0.493024 0.721164 + -0.832056 1.8111 -2.40953 -0.479915 -0.510504 0.713489 + -0.831269 1.86208 -2.38165 -0.54148 -0.345909 0.766255 + -0.78561 1.86204 -2.35542 -0.303951 -0.391738 0.868421 + -0.832096 1.92589 -2.35851 -0.543115 -0.325954 0.773809 + -0.884337 1.94192 -2.39379 -0.618329 -0.312631 0.721063 + -0.901706 2.03045 -2.37084 -0.693712 -0.270323 0.667599 + -0.753861 1.92561 -2.32744 0.0779647 -0.387109 0.918732 + -0.786437 1.92585 -2.33228 -0.313226 -0.378699 0.870906 + -0.819125 1.9989 -2.31556 -0.528493 -0.371839 0.763172 + -0.871366 2.01493 -2.35083 -0.613353 -0.325804 0.719479 + -0.710074 1.94569 -2.33546 0.434301 -0.365764 0.823164 + -0.747227 1.9851 -2.29544 0.0956462 -0.547987 0.831001 + -0.779803 1.98534 -2.30028 -0.303947 -0.458488 0.835108 + -0.799907 2.06345 -2.26903 -0.528842 -0.417472 0.738947 + -0.659523 2.00784 -2.33464 0.700719 -0.468635 0.537935 + -0.70905 1.98909 -2.30845 0.427835 -0.54444 0.721486 + -0.732671 2.0413 -2.25464 0.0843659 -0.616527 0.782801 + -0.760585 2.04989 -2.25375 -0.305038 -0.525347 0.794331 + -0.635489 2.025 -2.36662 0.94458 -0.239428 0.224594 + -0.651803 2.05132 -2.29745 0.677115 -0.546148 0.493192 + -0.694494 2.04529 -2.26765 0.413323 -0.619917 0.666983 + -0.711221 2.12707 -2.18568 0.0531025 -0.645284 0.762095 + -0.625806 2.09016 -2.36259 0.991254 -0.107836 -0.0760717 + -0.62777 2.06848 -2.32943 0.934487 -0.315185 0.165504 + -0.634814 2.13241 -2.22826 0.664094 -0.56651 0.487899 + -0.677505 2.12639 -2.19846 0.37949 -0.648561 0.659815 + -0.627798 2.10689 -2.38942 0.981496 0.00857287 -0.191293 + -0.611454 2.16777 -2.28951 0.990879 -0.109259 -0.0788736 + -0.613417 2.14609 -2.25635 0.927569 -0.332111 0.171223 + -0.613735 2.24551 -2.12377 0.646305 -0.527545 0.551349 + -0.618498 2.19627 -2.32841 0.888655 0.225263 -0.399435 + -0.613089 2.18393 -2.31271 0.980988 0.00482185 -0.194007 + -0.590573 2.27868 -2.18168 0.996485 -0.0678742 -0.0490926 + -0.592338 2.25919 -2.15187 0.936746 -0.283858 0.20477 + -0.635474 2.21187 -2.34328 0.711877 0.421106 -0.562051 + -0.597071 2.30593 -2.21899 0.893656 0.252396 -0.371047 + -0.592208 2.29483 -2.20487 0.985199 0.0430999 -0.165908 + -0.587719 2.34945 -2.12243 0.977946 0.174291 0.115079 + -0.641333 2.33997 -2.24791 0.611847 0.519943 -0.596073 + -0.614047 2.32153 -2.23386 0.715105 0.444631 -0.539377 + -0.593858 2.37316 -2.15465 0.882743 0.422712 -0.205132 + -0.588996 2.36206 -2.14054 0.966483 0.256705 0.00364073 + -0.671689 2.35849 -2.26059 0.553377 0.556708 -0.619557 + -0.634396 2.40377 -2.18031 0.621311 0.639082 -0.453372 + -0.60711 2.38534 -2.16626 0.723068 0.575599 -0.381914 + -0.607734 2.39539 -2.13214 0.694396 0.703007 0.153606 + -0.688289 2.43487 -2.20017 0.392066 0.765047 -0.510869 + -0.658091 2.41823 -2.19021 0.56824 0.670697 -0.476727 + -0.63869 2.41953 -2.15286 0.547702 0.836432 -0.020122 + -0.620986 2.40756 -2.14374 0.601163 0.798868 0.0203085 + -0.717338 2.4441 -2.19967 0.122588 0.855893 -0.502413 + -0.68198 2.44478 -2.16922 0.410428 0.909111 -0.0711744 + -0.662386 2.43398 -2.16276 0.510841 0.858766 -0.0395177 + -0.672795 2.42573 -2.1222 0.342374 0.84465 0.411516 + -0.655091 2.41377 -2.11308 0.376578 0.818919 0.433082 + -0.75761 2.44985 -2.18851 -0.0810503 0.891235 -0.44624 + -0.737161 2.45774 -2.16148 0.100596 0.99492 0.00386728 + -0.711029 2.45401 -2.16872 0.212976 0.97597 -0.0460878 + -0.69239 2.43653 -2.12866 0.290984 0.865544 0.40763 + -0.651936 2.40657 -2.10392 0.381553 0.775628 0.502811 + -0.779546 2.45078 -2.17917 -0.30742 0.891579 -0.332536 + -0.759097 2.45867 -2.15214 -0.0370713 0.995453 0.0877433 + -0.718521 2.44026 -2.12142 0.219071 0.868666 0.444328 + -0.792489 2.44729 -2.16766 -0.577158 0.808936 -0.111851 + -0.767495 2.4564 -2.14467 -0.187437 0.952816 0.238767 + -0.72692 2.43799 -2.11395 0.16542 0.847576 0.504233 + -0.694778 2.39405 -2.07133 0.223661 0.664216 0.713297 + -0.830539 2.38103 -2.21641 -0.881533 0.462726 -0.0937226 + -0.800389 2.43997 -2.15293 -0.723763 0.684222 0.0894853 + -0.775395 2.44909 -2.12994 -0.27419 0.883387 0.380063 + -0.779433 2.43983 -2.11423 -0.312894 0.82097 0.477604 + -0.730957 2.42874 -2.09823 0.159078 0.813555 0.559305 + -0.836761 2.36676 -2.19219 -0.946661 0.313167 0.0758939 + -0.806611 2.42571 -2.12871 -0.791968 0.554141 0.256348 + -0.871261 2.24376 -2.27541 -0.969185 0.108523 0.221141 + -0.836699 2.35083 -2.16856 -0.957604 0.144603 0.24917 + -0.806563 2.41327 -2.11027 -0.808616 0.411995 0.420001 + -0.779384 2.4274 -2.09579 -0.330332 0.736373 0.590454 + -0.903163 2.14858 -2.36166 -0.963085 0.132569 0.23429 + -0.86421 2.22607 -2.25259 -0.929285 -0.0416828 0.367004 + -0.83036 2.33492 -2.14804 -0.919975 -0.00651979 0.391924 + -0.800224 2.39736 -2.08975 -0.779297 0.271983 0.564554 + -0.775271 2.41707 -2.08247 -0.313604 0.665206 0.677608 + -0.896112 2.13089 -2.33884 -0.923206 -0.00632996 0.384253 + -0.886092 2.11841 -2.32031 -0.829607 -0.163921 0.533744 + -0.855504 2.2129 -2.23729 -0.836295 -0.202665 0.509448 + -0.821654 2.32176 -2.13275 -0.82778 -0.171744 0.53412 + -0.793428 2.38709 -2.07782 -0.701245 0.119225 0.702881 + -0.91498 2.03709 -2.3843 -0.831333 -0.140003 0.537851 + -0.874805 2.10837 -2.31093 -0.69172 -0.305455 0.654385 + -0.844218 2.20286 -2.22791 -0.693835 -0.354028 0.627102 + -0.811507 2.31273 -2.12431 -0.686514 -0.326457 0.649711 + -0.783282 2.37806 -2.06938 -0.551401 -0.0454096 0.833003 + -0.844465 2.09285 -2.29092 -0.615169 -0.367549 0.697477 + -0.817902 2.18362 -2.21486 -0.614205 -0.411344 0.67346 + -0.785192 2.29349 -2.11126 -0.579815 -0.40725 0.705664 + -0.773344 2.15422 -2.19296 -0.529769 -0.458467 0.713549 + -0.745921 2.26495 -2.09875 -0.494194 -0.451275 0.74305 + -0.72364 2.33405 -2.04824 -0.34988 -0.199049 0.915403 + -0.762911 2.36258 -2.06075 -0.438923 -0.143965 0.886916 + -0.739134 2.13566 -2.18479 -0.308667 -0.559451 0.769245 + -0.711712 2.24639 -2.09058 -0.294868 -0.527391 0.796813 + -0.697108 2.3191 -2.04342 -0.181196 -0.257626 0.949103 + -0.689506 2.352 -2.04349 0.0490756 0.28227 0.958079 + -0.716039 2.36695 -2.04832 -0.0397312 0.315207 0.948191 + -0.686618 2.23868 -2.09138 0.0611307 -0.603543 0.794984 + -0.672013 2.31139 -2.04422 0.122587 -0.307639 0.943574 + -0.673224 2.347 -2.04401 0.195474 0.259964 0.945626 + -0.678495 2.38904 -2.07185 0.225076 0.653767 0.722447 + -0.652901 2.23799 -2.10415 0.360663 -0.604149 0.710582 + -0.645524 2.31131 -2.05263 0.378136 -0.301161 0.875394 + -0.646734 2.34692 -2.05243 0.341751 0.27979 0.897175 + -0.653081 2.39392 -2.08458 0.320756 0.702836 0.634931 + -0.606357 2.31883 -2.07225 0.656619 -0.213063 0.723502 + -0.62132 2.3518 -2.06515 0.49193 0.326543 0.807077 + -0.604448 2.36293 -2.08553 0.692662 0.468086 0.54874 + -0.589485 2.32996 -2.09262 0.916922 -0.0124601 0.398871 + -0.603302 2.37558 -2.10487 0.725618 0.571427 0.383339 + -0.604579 2.38819 -2.12298 0.728045 0.614623 0.303626 + -0.741521 2.38546 -2.05643 -0.0821952 0.34911 0.93347 + -0.761891 2.40094 -2.06506 -0.175504 0.445567 0.877877 + -0.768476 2.4068 -2.07054 -0.274707 0.563677 0.778976 + -0.72026 2.41256 -2.07945 0.308817 0.760275 0.571501 + -0.726844 2.41842 -2.08492 0.191441 0.782105 0.59301 + 0.866811 1.38322 -1.52127 -0.509732 -0.270871 0.81658 + 0.888762 1.33938 -1.5282 -0.391881 -0.471329 0.790113 + 0.921874 1.33846 -1.52023 -0.116059 -0.65072 0.750396 + 0.828588 1.32435 -1.58429 -0.60527 -0.562075 0.563667 + 0.898161 1.30431 -1.5557 -0.316667 -0.763451 0.562908 + 0.924805 1.30314 -1.54361 0.135117 -0.744381 0.653942 + 0.915406 1.33821 -1.5161 0.00953819 -0.626113 0.779674 + 0.89667 1.41305 -1.49754 -0.495776 -0.133595 0.858113 + 0.814774 1.46235 -1.54842 -0.737016 -0.0651564 0.672727 + 0.806637 1.36818 -1.57736 -0.752968 -0.298712 0.586353 + 0.824142 1.30322 -1.61679 -0.629169 -0.6642 0.403714 + 0.898225 1.28984 -1.57942 -0.208773 -0.833488 0.511578 + 0.926761 1.34633 -1.50425 -0.600554 -0.62624 0.49715 + 0.936756 1.35346 -1.48437 -0.504794 -0.492368 0.709053 + 0.9392 1.36879 -1.48052 -0.402691 -0.122078 0.907158 + 0.929411 1.3979 -1.48212 -0.410404 -0.0659627 0.909515 + 0.926071 1.48754 -1.48244 -0.401241 -0.0239835 0.915658 + 0.844632 1.49219 -1.52469 -0.510054 -0.104623 0.853756 + 0.95556 1.31203 -1.54408 -0.379859 -0.790566 0.480325 + 0.965624 1.33399 -1.49664 -0.395119 -0.790783 0.467486 + 0.975619 1.34114 -1.47677 -0.380523 -0.763947 0.52114 + 0.995526 1.34064 -1.46447 -0.293498 -0.438771 0.849316 + 0.99797 1.35597 -1.46064 -0.150647 -0.106925 0.982788 + 0.950673 1.30417 -1.56006 -0.114048 -0.778626 0.617036 + 0.977756 1.2971 -1.54699 -0.506473 -0.73627 0.448767 + 0.987821 1.31907 -1.49956 -0.48958 -0.730349 0.476342 + 0.99798 1.32681 -1.47853 -0.436769 -0.698436 0.566939 + 1.01789 1.32631 -1.46624 0.0174018 -0.50152 0.864971 + 0.946034 1.30264 -1.56046 0.192164 -0.772265 0.605541 + 0.957355 1.29046 -1.57453 -0.0499628 -0.979301 0.196147 + 0.961993 1.29199 -1.57414 -0.198049 -0.657096 0.727325 + 0.939566 1.30239 -1.55634 0.407837 -0.71324 0.57005 + 0.946222 1.29217 -1.58454 0.394508 -0.91883 -0.0107361 + 0.959124 1.30255 -1.59204 0.133294 -0.838926 -0.52767 + 0.965185 1.29072 -1.57667 0.0689261 -0.849407 -0.523218 + 0.964165 1.28973 -1.57497 -0.181322 -0.982719 -0.0372109 + 0.931461 1.29292 -1.57181 0.134422 -0.885844 0.444084 + 0.931525 1.27846 -1.59554 0.384723 -0.896589 0.219353 + 0.95154 1.31375 -1.61899 0.641728 -0.736824 -0.212781 + 0.964442 1.32413 -1.62648 0.567989 -0.741769 -0.356607 + 0.966954 1.3028 -1.59418 0.0595751 -0.82353 -0.564136 + 0.924869 1.27115 -1.61975 0.540982 -0.82872 0.143394 + 0.944885 1.30645 -1.6432 0.803033 -0.582996 -0.123504 + 0.967505 1.3371 -1.64616 0.658293 -0.689032 -0.303126 + 0.972093 1.32925 -1.62651 0.337234 -0.790846 -0.510721 + 0.893779 1.26871 -1.61192 -0.098346 -0.873571 0.476656 + 0.906429 1.25446 -1.66273 0.462154 -0.886723 0.0116895 + 0.946496 1.31028 -1.64912 0.802415 -0.579369 -0.143043 + 0.969116 1.34092 -1.65209 0.561264 -0.812192 -0.159142 + 0.975156 1.34222 -1.6462 0.251508 -0.916943 -0.309773 + 0.875339 1.25203 -1.6549 -0.228851 -0.95378 0.194758 + 0.903505 1.25667 -1.6932 0.446769 -0.886119 -0.123247 + 0.943571 1.31249 -1.6796 0.809917 -0.571829 -0.130559 + 0.964555 1.33979 -1.67305 0.586218 -0.807387 -0.0668959 + 0.975047 1.343 -1.65421 0.138191 -0.990111 -0.0241573 + 0.80321 1.31023 -1.65291 -0.783326 -0.588685 0.199623 + 0.854407 1.25904 -1.69102 -0.440659 -0.897492 -0.0181088 + 0.902844 1.26036 -1.73079 0.40965 -0.878652 -0.24527 + 0.933747 1.30773 -1.71638 0.824156 -0.551179 -0.130266 + 0.95473 1.33503 -1.70984 0.621941 -0.775626 -0.107677 + 0.777832 1.37883 -1.62356 -0.930319 -0.211131 0.299885 + 0.792378 1.31083 -1.73172 -0.84136 -0.534063 -0.0830089 + 0.853746 1.26272 -1.72861 -0.369615 -0.928217 -0.0424014 + 0.906507 1.2704 -1.74915 0.423343 -0.821167 -0.382708 + 0.785969 1.473 -1.59462 -0.846604 -0.16432 0.506223 + 0.767001 1.37943 -1.70236 -0.957579 -0.275349 0.0849986 + 0.805334 1.30464 -1.76866 -0.703685 -0.638823 -0.311018 + 0.836232 1.54024 -1.52202 -0.559196 -0.213109 0.801177 + 0.786667 1.5553 -1.557 -0.72738 -0.247653 0.63999 + 0.757383 1.48395 -1.636 -0.930436 -0.203747 0.304592 + 0.917671 1.53559 -1.47976 -0.330372 -0.162615 0.929737 + 0.909642 1.57166 -1.47418 -0.333655 -0.250322 0.908853 + 0.837401 1.59422 -1.50277 -0.534312 -0.213828 0.817795 + 0.787836 1.60928 -1.53775 -0.701103 -0.178686 0.690308 + 0.758081 1.56626 -1.59838 -0.905764 -0.162278 0.391481 + 0.975695 1.53644 -1.46807 0.0978063 -0.0286618 0.994793 + 0.967667 1.5725 -1.4625 0.142435 -0.198551 0.969685 + 0.96191 1.62178 -1.44692 0.143792 -0.300523 0.942873 + 0.921571 1.62542 -1.45391 -0.301745 -0.277767 0.912028 + 0.958812 1.47239 -1.46701 -0.220395 0.0473985 0.974258 + 0.992002 1.49626 -1.47072 0.224827 0.0821256 0.970932 + 1.01241 1.55797 -1.48345 0.517338 0.113537 0.848216 + 0.99954 1.58436 -1.4781 0.580086 -0.0410519 0.81352 + 0.993784 1.63365 -1.46253 0.654745 -0.211883 0.725544 + 0.975596 1.43157 -1.46301 -0.125646 0.0106064 0.992018 + 1.00879 1.45545 -1.46672 0.252986 0.135154 0.957983 + 1.04955 1.45545 -1.48666 0.541948 0.172206 0.82258 + 1.02872 1.5178 -1.48609 0.503214 0.153758 0.850373 + 0.985385 1.40246 -1.46142 -0.126807 0.023592 0.991647 + 1.02388 1.41698 -1.46886 0.34373 0.106926 0.932961 + 1.06464 1.41698 -1.4888 0.587574 0.0937868 0.803717 + 1.10336 1.42596 -1.53069 0.769865 0.0661277 0.634772 + 1.0881 1.47372 -1.5253 0.705216 0.195286 0.681567 + 1.02708 1.35498 -1.46118 0.346921 -0.0640374 0.935706 + 1.01449 1.40147 -1.46196 0.216544 0.182118 0.959136 + 1.06501 1.38033 -1.48959 0.608449 -0.018807 0.79337 + 1.08948 1.37162 -1.51283 0.772983 -0.116767 0.623588 + 1.08911 1.40826 -1.51204 0.750265 0.0419963 0.659803 + 1.03833 1.32715 -1.47631 0.529763 -0.351632 0.77182 + 1.05562 1.36483 -1.48268 0.615018 -0.0358755 0.787697 + 1.06688 1.337 -1.49782 0.708889 -0.282648 0.64621 + 1.09143 1.34996 -1.52572 0.810164 -0.310612 0.497146 + 1.12177 1.38211 -1.56183 0.8468 -0.146448 0.511353 + 1.02621 1.29607 -1.4915 -0.0305767 -0.765769 0.642388 + 1.04665 1.2969 -1.50157 0.535785 -0.689587 0.487242 + 1.01605 1.28833 -1.51252 -0.334495 -0.876337 0.346622 + 1.03297 1.28272 -1.52354 0.194203 -0.97962 0.0512818 + 1.05531 1.2967 -1.54347 0.455162 -0.868409 -0.196707 + 1.06899 1.31088 -1.52149 0.709269 -0.612839 0.348377 + 1.09355 1.32383 -1.54939 0.748358 -0.648722 0.138276 + 0.979928 1.29485 -1.54782 -0.413328 -0.844 0.341795 + 0.996851 1.28924 -1.55885 0.0130213 -0.987396 -0.157735 + 0.99787 1.29022 -1.56055 0.21101 -0.874689 -0.436342 + 1.00113 1.30466 -1.58525 0.193832 -0.827729 -0.526587 + 1.05856 1.31114 -1.56816 0.337129 -0.861516 -0.379649 + 1.00627 1.33112 -1.61759 0.15531 -0.831116 -0.53397 + 1.0743 1.32636 -1.59466 0.262229 -0.894482 -0.36213 + 1.10928 1.33905 -1.57589 0.653786 -0.737074 0.171127 + 1.12372 1.36045 -1.57473 0.840681 -0.361592 0.403122 + 1.01313 1.34151 -1.63528 0.0540003 -0.955113 -0.291278 + 1.08116 1.33676 -1.61236 0.105224 -0.962444 -0.25026 + 1.12029 1.3413 -1.59924 0.546743 -0.824729 0.14455 + 1.13473 1.36269 -1.59807 0.869037 -0.356882 0.342651 + 1.01302 1.3423 -1.6433 -0.0787759 -0.994839 0.0639435 + 1.08388 1.33706 -1.61943 -0.0128107 -0.993122 0.116384 + 1.123 1.3416 -1.60631 0.496762 -0.83345 0.242051 + 1.14358 1.35647 -1.62877 0.844084 -0.425937 0.32573 + 1.13601 1.3998 -1.58048 0.861222 -0.160689 0.482158 + 0.970486 1.34187 -1.67517 0.0973232 -0.99146 0.0868046 + 1.01772 1.33528 -1.66846 -0.181854 -0.956707 0.227246 + 1.08858 1.33004 -1.64459 -0.0611224 -0.950204 0.305576 + 1.13185 1.33538 -1.63701 0.458953 -0.809627 0.365878 + 0.960991 1.33745 -1.70855 0.106363 -0.993829 0.0314786 + 1.00822 1.33085 -1.70182 -0.205089 -0.964112 0.168598 + 1.09911 1.30895 -1.69599 0.000168908 -0.993586 0.11308 + 1.14238 1.31428 -1.68841 0.53171 -0.829166 0.172534 + 0.957626 1.33829 -1.72863 0.22033 -0.861657 -0.457167 + 0.990595 1.33114 -1.72509 -0.136992 -0.88613 -0.442726 + 1.08148 1.30923 -1.71925 0.0157102 -0.955463 -0.294693 + 1.08335 1.31185 -1.72254 -0.0535052 -0.954854 -0.292217 + 0.951365 1.33587 -1.72993 0.680666 -0.684464 -0.261157 + 0.954266 1.34206 -1.73489 0.641603 -0.690388 -0.334229 + 0.960751 1.3446 -1.73259 0.203137 -0.7347 -0.647264 + 0.99372 1.33744 -1.72904 -0.0845932 -0.640538 -0.763253 + 0.995594 1.34006 -1.73234 -0.173426 -0.844825 -0.506155 + 0.93741 1.31778 -1.73474 0.828706 -0.538748 -0.151651 + 0.940311 1.32397 -1.7397 0.825138 -0.555887 -0.100681 + 0.942035 1.32651 -1.74363 0.811014 -0.581756 0.0617797 + 0.95694 1.34591 -1.74022 0.612021 -0.784068 -0.103283 + 0.963425 1.34844 -1.73791 0.140448 -0.919039 -0.368295 + 0.908231 1.27295 -1.75308 0.68021 -0.723059 0.120418 + 0.944279 1.32802 -1.75012 0.77189 -0.60442 0.197136 + 0.959184 1.34741 -1.74669 0.5284 -0.828906 0.183597 + 0.965886 1.35 -1.74384 0.0307256 -0.999527 -0.00144085 + 0.998055 1.34162 -1.73825 -0.217014 -0.957713 -0.188921 + 0.905776 1.26502 -1.76626 0.486282 -0.873507 0.0227194 + 0.941823 1.32009 -1.7633 0.754334 -0.588451 0.291044 + 0.962841 1.34356 -1.76123 0.45567 -0.809372 0.370515 + 0.969543 1.34615 -1.75837 -0.0101898 -0.956427 0.291793 + 1.01234 1.33979 -1.75085 -0.198914 -0.978947 0.0457937 + 0.866702 1.25654 -1.76555 -0.179958 -0.967861 -0.175672 + 0.873374 1.26773 -1.7878 -0.171095 -0.797875 -0.578033 + 0.912448 1.27623 -1.78851 0.481969 -0.849188 -0.215839 + 0.94631 1.31106 -1.78594 0.741521 -0.652515 0.156112 + 0.967328 1.33454 -1.78386 0.495941 -0.83553 0.2365 + 0.79685 1.32324 -1.78111 -0.790395 -0.426187 -0.440045 + 0.86489 1.28634 -1.80025 -0.354786 -0.651905 -0.670184 + 0.918915 1.28339 -1.80822 0.379433 -0.805714 -0.454814 + 0.952777 1.31823 -1.80566 0.666774 -0.741382 -0.0759342 + 0.76183 1.39164 -1.74576 -0.947077 -0.179023 -0.266452 + 0.814222 1.33839 -1.80653 -0.64372 -0.302701 -0.702848 + 0.864718 1.29753 -1.81167 -0.346094 -0.613928 -0.709444 + 0.918743 1.29457 -1.81965 0.224238 -0.692603 -0.685579 + 0.752212 1.49618 -1.6794 -0.995593 -0.0876368 0.033378 + 0.753606 1.5029 -1.71989 -0.961439 0.0233884 -0.27402 + 0.779201 1.40679 -1.77117 -0.832177 -0.0421317 -0.552907 + 0.829046 1.35425 -1.82431 -0.571572 -0.223133 -0.789631 + 0.879542 1.31338 -1.82945 -0.258196 -0.505559 -0.823253 + 0.74596 1.57993 -1.63403 -0.990521 -0.0607009 0.123224 + 0.747354 1.58665 -1.67453 -0.978295 0.0855167 -0.188749 + 0.770913 1.51923 -1.75069 -0.859402 0.0941858 -0.502551 + 0.796508 1.42312 -1.80198 -0.742 0.0132376 -0.670269 + 0.851056 1.36611 -1.83951 -0.444579 -0.16388 -0.880621 + 0.750401 1.64607 -1.60312 -0.990187 -0.00110638 0.139745 + 0.752199 1.66051 -1.6355 -0.975527 0.141205 -0.168546 + 0.76879 1.67356 -1.67546 -0.878867 0.253999 -0.403828 + 0.763945 1.5997 -1.71449 -0.884763 0.196587 -0.422549 + 0.762522 1.6324 -1.56747 -0.887756 -0.122147 0.443812 + 0.754476 1.71575 -1.57263 -0.984377 -0.0015908 0.176066 + 0.756274 1.73021 -1.60501 -0.980692 0.114585 -0.158469 + 0.791203 1.67569 -1.51711 -0.541301 -0.153592 0.826682 + 0.765889 1.69882 -1.54682 -0.859758 -0.0853924 0.503511 + 0.758561 1.78796 -1.55009 -0.982815 0.0079859 0.184422 + 0.818692 1.67483 -1.51004 -0.258377 0.0298413 0.965583 + 0.79282 1.75793 -1.50947 -0.467429 -0.178363 0.86585 + 0.769974 1.77104 -1.52429 -0.796549 -0.132821 0.589804 + 0.849331 1.64797 -1.4825 -0.590317 -0.0861354 0.802562 + 0.832232 1.66576 -1.50159 -0.23267 0.674029 0.701106 + 0.856572 1.70761 -1.52333 0.21422 0.202849 0.955491 + 0.84636 1.76001 -1.5058 0.351995 -0.201517 0.914051 + 0.820309 1.75707 -1.50241 -0.0505897 -0.183514 0.981714 + 0.924839 1.70033 -1.42998 -0.396303 -0.26986 0.877564 + 0.89595 1.71482 -1.44879 -0.662965 -0.0660972 0.745727 + 0.878852 1.73262 -1.46788 -0.912664 0.153712 0.378705 + 0.870112 1.69854 -1.51488 -0.575398 0.769583 0.276873 + 0.884407 1.72657 -1.53545 0.16572 0.351825 0.921279 + 0.965178 1.6967 -1.42299 0.0971641 -0.366115 0.925483 + 0.962515 1.76197 -1.39159 0.0494668 -0.456948 0.888117 + 0.940631 1.76602 -1.39685 -0.45406 -0.382372 0.804749 + 0.911742 1.78053 -1.41565 -0.702718 -0.271822 0.657495 + 0.986358 1.70191 -1.42978 0.60395 -0.293491 0.741018 + 0.983694 1.76718 -1.39836 0.632074 -0.331551 0.700397 + 0.977586 1.82251 -1.36353 0.632742 -0.390931 0.668439 + 0.962017 1.81868 -1.35854 0.0486928 -0.536832 0.842283 + 0.940133 1.82274 -1.3638 -0.475986 -0.476836 0.738962 + 1.01744 1.65185 -1.48818 0.82055 -0.083874 0.565388 + 1.01002 1.72012 -1.45543 0.90937 -0.0896113 0.406221 + 0.995673 1.77835 -1.41304 0.915394 -0.101612 0.389524 + 1.03451 1.61165 -1.51412 0.752299 0.0800696 0.653938 + 1.04836 1.68864 -1.53604 0.907406 0.138091 0.396919 + 1.01623 1.74048 -1.4822 0.956033 0.113264 0.270504 + 1.00188 1.79872 -1.4398 0.984819 0.0772673 0.155437 + 1.04738 1.58525 -1.51946 0.706893 0.198983 0.678754 + 1.06543 1.64843 -1.56198 0.834485 0.137703 0.533547 + 1.04813 1.70852 -1.55514 0.845394 0.424976 0.323581 + 1.01599 1.76034 -1.50129 0.901143 0.432403 -0.031131 + 1.00151 1.80988 -1.45507 0.932042 0.33166 -0.145943 + 1.06727 1.53607 -1.52473 0.708083 0.225767 0.669065 + 1.08274 1.6196 -1.57935 0.802613 0.210258 0.558215 + 1.10264 1.57041 -1.58462 0.770191 0.26683 0.579316 + 1.1061 1.64277 -1.62382 0.850943 0.239853 0.467297 + 1.08878 1.67161 -1.60646 0.851207 0.17636 0.494311 + 1.06948 1.72195 -1.58796 0.804773 0.154899 0.573015 + 1.05153 1.72021 -1.57018 0.653806 0.253555 0.712915 + 1.1312 1.49015 -1.58202 0.766807 0.236065 0.596892 + 1.15929 1.49629 -1.62432 0.888797 0.159086 0.429804 + 1.13073 1.57656 -1.62691 0.822449 0.302319 0.481851 + 1.14646 1.44239 -1.58743 0.863653 0.0225176 0.503583 + 1.16822 1.44519 -1.65465 0.974154 -0.0688945 0.215121 + 1.17284 1.51873 -1.66879 0.944891 0.177707 0.274956 + 1.16836 1.5483 -1.68293 0.926131 0.321747 0.196877 + 1.12625 1.60613 -1.64105 0.867512 0.311741 0.387608 + 1.15087 1.38488 -1.61849 0.892281 -0.270739 0.361296 + 1.16132 1.42747 -1.62544 0.953786 -0.0460698 0.296934 + 1.16281 1.36629 -1.68276 0.955738 -0.252189 0.151544 + 1.16971 1.38401 -1.71198 0.985208 -0.168634 -0.030454 + 1.16897 1.41515 -1.74191 0.97297 -0.133001 -0.188784 + 1.18177 1.46764 -1.69911 0.995487 -0.083494 0.0451023 + 1.17501 1.53132 -1.71119 0.956087 0.246035 -0.15926 + 1.15551 1.33786 -1.69304 0.921014 -0.380675 0.0825778 + 1.15435 1.34214 -1.73898 0.867569 -0.408862 -0.283118 + 1.1536 1.37329 -1.7689 0.806537 -0.338132 -0.484938 + 1.14166 1.3961 -1.79896 0.716646 -0.309902 -0.624803 + 1.16209 1.43471 -1.77781 0.894252 -0.0437264 -0.445423 + 1.14122 1.31857 -1.73434 0.537613 -0.77381 -0.33495 + 1.12081 1.34121 -1.76961 0.351543 -0.678879 -0.644625 + 1.10887 1.36402 -1.79966 0.451306 -0.65054 -0.610836 + 1.12082 1.41464 -1.82495 0.716457 -0.19234 -0.670593 + 1.14125 1.45325 -1.8038 0.776066 0.0901003 -0.624182 + 1.09764 1.31002 -1.73515 -0.00304124 -0.960758 -0.277372 + 1.07722 1.33266 -1.77041 0.0673833 -0.886457 -0.457879 + 1.06411 1.34048 -1.79374 0.184022 -0.869776 -0.457848 + 1.06981 1.35429 -1.81241 0.260993 -0.787811 -0.557886 + 1.09939 1.39036 -1.83797 0.587326 -0.491057 -0.643359 + 1.01752 1.33057 -1.77356 -0.0327945 -0.998722 0.0384657 + 1.00441 1.33839 -1.79689 0.0841538 -0.910443 -0.404983 + 1.01555 1.35052 -1.81807 0.106838 -0.847384 -0.520121 + 1.02125 1.36435 -1.83674 0.116995 -0.785207 -0.60808 + 1.06033 1.38065 -1.85071 0.264508 -0.734201 -0.625288 + 0.974722 1.33694 -1.78108 0.0378411 -0.981341 0.188514 + 0.98251 1.3384 -1.80245 0.194066 -0.954064 -0.228256 + 0.993649 1.35055 -1.82362 0.225469 -0.841464 -0.491021 + 0.99208 1.36275 -1.84143 0.224675 -0.731475 -0.64379 + 0.996414 1.38162 -1.86005 0.114721 -0.768803 -0.629111 + 0.975116 1.33601 -1.80524 0.504604 -0.860644 -0.0683099 + 0.985499 1.34774 -1.8249 0.414596 -0.790654 -0.450529 + 0.98393 1.35994 -1.8427 0.31843 -0.674411 -0.666162 + 0.967246 1.38002 -1.86474 0.122181 -0.64373 -0.755436 + 0.988765 1.39406 -1.87874 -0.00797693 -0.589412 -0.807793 + 0.963161 1.32996 -1.82532 0.533264 -0.708512 -0.462212 + 0.960586 1.34898 -1.84185 0.343788 -0.601851 -0.720822 + 0.943902 1.36906 -1.86388 0.0775461 -0.468257 -0.880183 + 0.935798 1.39002 -1.87222 -0.179161 0.289045 -0.940401 + 0.916168 1.3136 -1.83618 0.0631166 -0.548984 -0.833447 + 0.91712 1.35833 -1.85396 -0.174175 -0.385521 -0.906111 + 0.909016 1.37928 -1.86229 -0.235678 -0.29067 -0.927344 + 0.879577 1.38728 -1.85458 -0.356619 0.0186646 -0.934063 + 0.977897 1.39575 -1.87826 -0.162868 -0.130107 -0.978032 + 0.880494 1.35811 -1.84722 -0.260736 -0.32044 -0.910678 + 0.818518 1.43499 -1.81718 -0.53672 0.102321 -0.837533 + 0.905572 1.40079 -1.86012 -0.28874 0.137098 -0.947541 + 0.803685 1.53284 -1.79816 -0.635609 0.163136 -0.754578 + 0.86351 1.54431 -1.82219 -0.276032 0.278569 -0.919894 + 0.878343 1.44646 -1.8412 -0.332643 0.155606 -0.930126 + 0.905215 1.41419 -1.85732 -0.321859 0.203044 -0.924759 + 0.796717 1.61331 -1.76195 -0.639976 0.338044 -0.690042 + 0.860608 1.62202 -1.78844 -0.25166 0.441123 -0.861439 + 0.964636 1.5442 -1.83363 -0.0582802 0.404076 -0.912867 + 0.9756 1.49514 -1.85648 -0.131803 0.335862 -0.932644 + 1.00247 1.46289 -1.8726 -0.190298 0.414101 -0.890116 + 0.798428 1.69134 -1.71503 -0.636144 0.392341 -0.664371 + 0.862319 1.70005 -1.74151 -0.24999 0.501494 -0.828257 + 0.961734 1.6219 -1.79988 -0.00855115 0.473337 -0.88084 + 1.03632 1.56513 -1.82489 0.26045 0.469349 -0.843728 + 1.04729 1.51607 -1.84774 0.24433 0.475268 -0.845235 + 0.766351 1.73233 -1.63718 -0.897547 0.206641 -0.389499 + 0.795989 1.7501 -1.67675 -0.765693 0.326224 -0.55434 + 0.805752 1.77556 -1.67281 -0.333036 0.580864 -0.742754 + 0.769426 1.80185 -1.60854 -0.85964 0.279734 -0.427514 + 0.779188 1.82732 -1.60459 -0.698909 0.455559 -0.551355 + 0.805421 1.83416 -1.62143 -0.203184 0.643701 -0.737811 + 0.827982 1.82389 -1.62545 0.262275 0.564566 -0.782609 + 0.828313 1.76528 -1.67683 0.209881 0.771557 -0.600541 + 0.759348 1.79972 -1.57636 -0.980372 0.136129 -0.142617 + 0.765688 1.86275 -1.54751 -0.95088 0.246581 -0.187147 + 0.777499 1.87088 -1.56637 -0.730178 0.446996 -0.516753 + 0.803731 1.87773 -1.5832 -0.368998 0.576876 -0.728735 + 0.764901 1.85098 -1.52125 -0.973073 0.0188829 0.229721 + 0.774462 1.90805 -1.49188 -0.973258 0.0249355 0.228355 + 0.77504 1.9167 -1.51119 -0.947347 0.270956 -0.170635 + 0.786851 1.92484 -1.53005 -0.711056 0.476532 -0.517027 + 0.774543 1.8401 -1.50329 -0.790856 -0.158585 0.591098 + 0.784104 1.89718 -1.47393 -0.785578 -0.20298 0.584522 + 0.789559 1.94929 -1.44557 -0.797212 -0.245721 0.55143 + 0.782274 1.95751 -1.45914 -0.975601 -0.00475762 0.219498 + 0.782852 1.96615 -1.47846 -0.944843 0.275386 -0.177298 + 0.797389 1.827 -1.48848 -0.458213 -0.274597 0.845362 + 0.800897 1.88754 -1.46304 -0.472918 -0.349431 0.808855 + 0.806352 1.93965 -1.43468 -0.475561 -0.412114 0.777177 + 0.818764 1.82256 -1.48349 -0.0645829 -0.326339 0.943044 + 0.822272 1.88311 -1.45804 -0.0592591 -0.417456 0.906763 + 0.8225 1.93631 -1.43091 -0.0673611 -0.486741 0.870945 + 0.824935 1.98148 -1.40299 -0.0595168 -0.479643 0.875443 + 0.808788 1.98483 -1.40677 -0.478088 -0.401238 0.781306 + 0.844815 1.82551 -1.48689 0.368747 -0.302957 0.878774 + 0.841422 1.88527 -1.46055 0.369227 -0.39024 0.843436 + 0.84165 1.93848 -1.43341 0.378912 -0.454753 0.805993 + 0.840044 1.98319 -1.40497 0.370029 -0.44517 0.815415 + 0.82469 2.01045 -1.38907 -0.0618344 -0.16525 0.984311 + 0.8628 1.83228 -1.49721 0.69882 -0.193724 0.688565 + 0.859408 1.89205 -1.47086 0.719024 -0.273931 0.638722 + 0.855242 1.94359 -1.44121 0.718737 -0.328703 0.612676 + 0.853636 1.98831 -1.41276 0.719534 -0.311942 0.620453 + 0.874195 1.77897 -1.51791 0.676469 -0.125144 0.725761 + 0.877897 1.84482 -1.5174 0.939806 0.00209016 0.341701 + 0.870505 1.90126 -1.4857 0.947571 -0.0761223 0.310346 + 0.86634 1.95281 -1.45605 0.952866 -0.103574 0.285165 + 0.862391 1.99558 -1.42447 0.946617 -0.0891164 0.309796 + 0.889292 1.79151 -1.53811 0.884927 0.139111 0.444469 + 0.879305 1.85613 -1.5382 0.975399 0.206905 -0.0760704 + 0.871914 1.91258 -1.5065 0.980783 0.170718 -0.0944488 + 0.867404 1.96136 -1.47176 0.982856 0.158859 -0.0935781 + 0.863455 2.00413 -1.44018 0.978324 0.192191 -0.0771038 + 0.913283 1.74562 -1.54745 0.224599 0.679926 0.698037 + 0.91404 1.75833 -1.57116 0.444114 0.870108 0.213715 + 0.890048 1.80422 -1.56183 0.936161 0.350899 -0.0217378 + 0.867427 1.86948 -1.56556 0.823437 0.37336 -0.427263 + 0.863182 1.92239 -1.52662 0.831641 0.370929 -0.413261 + 0.894918 1.72132 -1.52531 -0.588939 0.801163 0.106246 + 0.923794 1.74036 -1.53732 -0.38094 0.924197 -0.0272937 + 0.952938 1.74542 -1.54417 -0.00632487 0.993386 -0.114652 + 0.903651 1.76204 -1.48842 -0.702699 0.533287 -0.470976 + 0.925882 1.77462 -1.50761 -0.514275 0.588201 -0.624133 + 0.955026 1.77968 -1.51447 -0.0257015 0.676512 -0.735984 + 0.878845 1.73927 -1.47799 -0.907971 0.386447 -0.162008 + 0.899087 1.79644 -1.43839 -0.935934 0.318857 -0.149525 + 0.908816 1.80483 -1.45121 -0.777495 0.459167 -0.42973 + 0.931047 1.81741 -1.4704 -0.516242 0.596004 -0.61504 + 0.899094 1.78978 -1.42827 -0.925104 -0.0390471 0.3777 + 0.906243 1.84754 -1.39768 -0.951968 0.259491 -0.162547 + 0.915972 1.85595 -1.4105 -0.7745 0.461961 -0.432136 + 0.906249 1.84265 -1.39025 -0.942177 -0.120717 0.312617 + 0.911958 1.89358 -1.35878 -0.950611 0.262794 -0.165158 + 0.919284 1.89993 -1.36844 -0.773901 0.477597 -0.415907 + 0.932314 1.86519 -1.42462 -0.525027 0.602043 -0.601574 + 0.918897 1.8334 -1.37762 -0.707853 -0.371746 0.600623 + 0.911964 1.88869 -1.35134 -0.943951 -0.153564 0.292189 + 0.915968 1.93204 -1.31999 -0.95007 0.28164 -0.134336 + 0.923294 1.9384 -1.32966 -0.767422 0.509113 -0.389702 + 0.935626 1.90917 -1.38255 -0.51493 0.630635 -0.580643 + 0.942731 1.87105 -1.32796 -0.470611 -0.536769 0.700289 + 0.921495 1.8817 -1.34177 -0.713131 -0.417184 0.563385 + 0.915973 1.92818 -1.31413 -0.9417 -0.13543 0.307993 + 0.921242 1.95604 -1.29783 -0.888689 0.45838 0.0109117 + 0.926466 1.96057 -1.30472 -0.729134 0.636521 -0.251405 + 0.959263 1.86798 -1.32398 0.0407104 -0.60349 0.79633 + 0.942258 1.91278 -1.29366 -0.474826 -0.529396 0.703051 + 0.925505 1.92119 -1.30457 -0.708821 -0.410939 0.573326 + 0.921247 1.95218 -1.29197 -0.87881 0.0971644 0.467175 + 0.974832 1.87181 -1.32896 0.641662 -0.441204 0.627383 + 0.971073 1.91275 -1.29362 0.629866 -0.437903 0.641489 + 0.95879 1.90972 -1.28968 0.0502157 -0.596327 0.801169 + 0.983883 1.88026 -1.34004 0.927611 -0.177112 0.32889 + 0.980124 1.92119 -1.3047 0.926811 -0.161075 0.339229 + 0.975262 1.94566 -1.28323 0.861922 0.0563042 0.503905 + 0.968843 1.93965 -1.27537 0.593637 -0.156446 0.78938 + 0.956559 1.93662 -1.27144 0.0317551 -0.296395 0.954537 + 0.989565 1.83369 -1.3782 0.927127 -0.141926 0.346831 + 0.988447 1.89522 -1.35972 0.993572 0.019941 0.111432 + 0.983726 1.933 -1.32021 0.990768 0.035094 0.130949 + 0.978864 1.95746 -1.29875 0.932867 0.239561 0.269015 + 0.994129 1.84866 -1.39787 0.991489 0.0328007 0.12599 + 0.988169 1.90367 -1.37124 0.9366 0.300031 -0.181001 + 0.983448 1.94144 -1.33175 0.932314 0.326099 -0.156365 + 0.978738 1.9634 -1.30719 0.874662 0.484722 -0.00345886 + 0.993755 1.85983 -1.41314 0.936184 0.299037 -0.184759 + 0.982981 1.90748 -1.37727 0.62084 0.594711 -0.510761 + 0.979354 1.94445 -1.3365 0.620038 0.623844 -0.475785 + 0.974644 1.9664 -1.31195 0.572848 0.746418 -0.338683 + 0.988567 1.86364 -1.41917 0.628031 0.57067 -0.529069 + 0.971735 1.91015 -1.38211 0.330232 0.696066 -0.637526 + 0.968108 1.94712 -1.34135 0.322806 0.729585 -0.602911 + 0.966579 1.96839 -1.31515 0.302928 0.828847 -0.470369 + 0.969805 1.9715 -1.30236 0.434397 0.899283 -0.0508902 + 0.994451 1.81507 -1.46328 0.618416 0.597983 -0.50988 + 0.979564 1.81863 -1.46965 0.323729 0.665091 -0.672943 + 0.97368 1.8672 -1.42555 0.331487 0.667147 -0.667107 + 0.95189 1.91233 -1.3868 -0.0400755 0.730379 -0.681865 + 0.952452 1.94884 -1.34504 -0.0328945 0.763208 -0.645315 + 1.00893 1.76552 -1.50949 0.509336 0.67916 -0.528506 + 0.982022 1.77671 -1.5081 0.240849 0.671748 -0.700533 + 0.952568 1.8216 -1.47601 -0.040789 0.682803 -0.729463 + 0.953835 1.86938 -1.43022 -0.031336 0.700593 -0.712873 + 1.01475 1.72657 -1.54594 0.392391 0.91356 -0.106943 + 0.987834 1.73775 -1.54454 0.313461 0.941122 -0.126613 + 1.01815 1.73827 -1.56097 0.333278 0.293653 0.895932 + 0.988572 1.74562 -1.55695 0.176454 0.371544 0.911492 + 1.0327 1.79865 -1.56084 0.604262 -0.0691682 0.793778 + 1.01567 1.7933 -1.55082 0.325016 -0.171933 0.929948 + 0.986097 1.80064 -1.54679 -0.0383162 -0.199551 0.979138 + 0.953676 1.75329 -1.55657 -0.141179 0.479831 0.865928 + 1.05065 1.80039 -1.57863 0.823027 0.076056 0.562887 + 1.02393 1.86315 -1.54429 0.670406 -0.146151 0.727458 + 1.0069 1.85779 -1.53428 0.33041 -0.252079 0.909552 + 0.98619 1.85613 -1.53234 -0.0360483 -0.296041 0.954495 + 0.955781 1.8022 -1.55238 -0.367072 -0.147251 0.918464 + 1.05823 1.80894 -1.59774 0.943709 0.18023 0.277363 + 1.04226 1.87778 -1.57615 0.957066 0.075958 0.279741 + 1.03468 1.86924 -1.55703 0.863438 -0.0279794 0.503678 + 1.01649 1.92288 -1.51957 0.68078 -0.233348 0.694325 + 1.08344 1.73643 -1.6203 0.922525 0.23309 0.307599 + 1.08388 1.74579 -1.64166 0.9155 0.365741 -0.167607 + 1.05867 1.81829 -1.61909 0.962981 0.269164 0.0147819 + 1.0442 1.88418 -1.5904 0.982566 0.183879 0.0274396 + 1.03281 1.93526 -1.54636 0.966128 0.0083907 0.257928 + 1.10274 1.68609 -1.6388 0.928477 0.285324 0.237742 + 1.10032 1.68885 -1.67007 0.844187 0.489356 -0.218812 + 1.06756 1.75407 -1.66038 0.735995 0.409781 -0.53888 + 1.05554 1.82437 -1.63257 0.854704 0.351647 -0.381871 + 1.04108 1.89025 -1.60387 0.87975 0.337209 -0.335155 + 1.12121 1.65122 -1.66364 0.905436 0.387623 0.173016 + 1.11879 1.65398 -1.69492 0.765653 0.540044 -0.349468 + 1.084 1.69714 -1.68879 0.660941 0.508547 -0.551849 + 1.04663 1.76377 -1.67854 0.640029 0.411969 -0.648571 + 1.14137 1.61459 -1.68087 0.896607 0.422757 0.131803 + 1.14801 1.59761 -1.70914 0.845088 0.449594 -0.289295 + 1.12827 1.60294 -1.7296 0.628582 0.502555 -0.593568 + 1.09857 1.6381 -1.72614 0.558262 0.535911 -0.633358 + 1.15283 1.53819 -1.75413 0.793974 0.346618 -0.499462 + 1.13309 1.54353 -1.7746 0.585097 0.46513 -0.664316 + 1.10532 1.53438 -1.79755 0.488058 0.479183 -0.729509 + 1.10805 1.58706 -1.76083 0.578885 0.469159 -0.66692 + 1.0696 1.63577 -1.75368 0.52483 0.515647 -0.677246 + 1.17489 1.48719 -1.73501 0.946845 0.0903226 -0.30875 + 1.15272 1.49406 -1.77795 0.81882 0.196125 -0.539507 + 1.12311 1.49763 -1.80977 0.610504 0.350364 -0.710303 + 1.11164 1.45681 -1.83562 0.647869 0.179895 -0.740205 + 1.09534 1.48847 -1.83271 0.513726 0.392367 -0.762977 + 1.07225 1.49111 -1.84717 0.507356 0.398034 -0.764303 + 1.0753 1.52508 -1.82485 0.489936 0.46432 -0.737814 + 1.07804 1.57775 -1.78813 0.494471 0.485232 -0.721144 + 1.09737 1.43149 -1.85176 0.629567 0.0139265 -0.776821 + 1.06557 1.4637 -1.86328 0.52843 0.279584 -0.80162 + 1.04247 1.46635 -1.87773 0.193359 0.303913 -0.932871 + 1.04423 1.48211 -1.87005 0.177522 0.470682 -0.86426 + 1.07593 1.40723 -1.86478 0.535037 -0.298819 -0.790217 + 1.05129 1.43838 -1.87943 0.321225 0.11378 -0.940143 + 1.00071 1.44711 -1.88027 -0.182705 0.30798 -0.933685 + 1.05268 1.39308 -1.8694 0.307762 -0.665634 -0.679863 + 1.05412 1.41394 -1.88015 0.38233 -0.112089 -0.917202 + 1.00389 1.40927 -1.88379 -0.0913485 -0.0431159 -0.994885 + 1.00107 1.43371 -1.88308 -0.108481 0.116047 -0.987302 + 1.03086 1.39979 -1.88477 0.114306 -0.409271 -0.905225 + 1.02788 1.62315 -1.79044 0.301681 0.519481 -0.799455 + 1.01937 1.70534 -1.74027 0.356645 0.504052 -0.786597 + 1.05503 1.69481 -1.71634 0.578423 0.494647 -0.648654 + 0.95322 1.70409 -1.74971 -0.00172616 0.500178 -0.865921 + 0.965472 1.76805 -1.71504 0.0389043 0.468356 -0.882683 + 1.01097 1.77429 -1.70247 0.388503 0.449961 -0.804115 + 0.874571 1.76401 -1.70684 -0.215765 0.50595 -0.835141 + 0.96322 1.83567 -1.68111 -0.0164933 0.516224 -0.856295 + 1.00872 1.84191 -1.66855 0.387605 0.458023 -0.799986 + 1.03461 1.83407 -1.65072 0.649079 0.390356 -0.652931 + 0.861683 1.78372 -1.68945 -0.597936 0.623598 -0.503586 + 0.950332 1.85538 -1.66374 -0.317726 0.610017 -0.725899 + 0.975267 1.90391 -1.6352 -0.208535 0.561856 -0.800519 + 1.0025 1.90419 -1.63537 0.298996 0.514333 -0.803781 + 1.02839 1.89634 -1.61754 0.674428 0.430963 -0.599515 + 0.844417 1.76425 -1.68043 -0.452432 0.794534 -0.404995 + 0.913921 1.84691 -1.6455 -0.614085 0.644286 -0.455846 + 0.938856 1.89544 -1.61696 -0.542202 0.550342 -0.634933 + 0.859869 1.76859 -1.6341 0.445026 0.793956 -0.41423 + 0.875973 1.76755 -1.63771 -0.527664 0.752669 0.393777 + 0.893836 1.82196 -1.6254 -0.896356 0.299268 0.327085 + 0.896655 1.82743 -1.63648 -0.824761 0.562959 -0.0533535 + 0.921707 1.88933 -1.60415 -0.823308 0.447233 -0.349494 + 0.853077 1.821 -1.61849 0.512321 0.398105 -0.760947 + 0.87817 1.81756 -1.5892 0.818018 0.351029 -0.455659 + 0.884962 1.76516 -1.6048 0.466176 0.828904 -0.309189 + 0.896729 1.76634 -1.60699 -0.550414 0.680166 0.484168 + 0.82617 1.87946 -1.58753 0.0376388 0.588746 -0.807441 + 0.851265 1.87658 -1.58058 0.511033 0.515434 -0.687876 + 0.828572 1.93161 -1.54674 0.0456439 0.622702 -0.781127 + 0.84702 1.92949 -1.54163 0.501914 0.544805 -0.671766 + 0.806134 1.92987 -1.54242 -0.381639 0.587692 -0.713421 + 0.811053 1.97734 -1.50506 -0.37163 0.616737 -0.693921 + 0.828013 1.97864 -1.50834 0.0387334 0.652557 -0.756749 + 0.84646 1.97652 -1.50322 0.504421 0.566935 -0.651264 + 0.858672 1.97117 -1.49188 0.825376 0.387123 -0.410963 + 0.79177 1.97231 -1.49268 -0.712301 0.491453 -0.501101 + 0.797628 2.01363 -1.45839 -0.700366 0.532269 -0.475582 + 0.812841 2.01759 -1.46816 -0.372757 0.654729 -0.657558 + 0.829801 2.0189 -1.47144 0.045444 0.692976 -0.719527 + 0.844355 2.01723 -1.4674 0.493983 0.609319 -0.620251 + 0.78871 2.00747 -1.44416 -0.942371 0.300011 -0.148091 + 0.801572 2.03748 -1.43537 -0.64767 0.688258 -0.32684 + 0.816785 2.04146 -1.44513 -0.326553 0.793927 -0.512877 + 0.828873 2.04234 -1.44754 0.0308448 0.823181 -0.566941 + 0.788254 2.00064 -1.42894 -0.972322 0.0246197 0.232345 + 0.795223 2.03311 -1.42523 -0.855234 0.517342 -0.0305192 + 0.809004 2.04415 -1.42744 -0.459798 0.881304 -0.109035 + 0.817901 2.04647 -1.43316 -0.259383 0.937276 -0.232882 + 0.829989 2.04737 -1.43556 0.0498086 0.96876 -0.242947 + 0.795539 1.99244 -1.41536 -0.787446 -0.233218 0.570559 + 0.794767 2.02627 -1.40999 -0.883441 0.280727 0.375132 + 0.802389 2.03578 -1.4084 -0.586227 0.657626 0.473145 + 0.802656 2.03978 -1.4173 -0.609266 0.770668 0.186721 + 0.813198 2.01283 -1.39175 -0.406642 -0.104597 0.90758 + 0.799949 2.02044 -1.40034 -0.713163 0.0680816 0.697684 + 0.807571 2.02994 -1.39874 -0.452224 0.47853 0.752663 + 0.813367 2.04193 -1.40993 -0.224276 0.858176 0.461773 + 0.813634 2.04593 -1.41883 -0.252492 0.939872 0.229973 + 0.826811 2.02311 -1.39104 -0.0227871 0.272833 0.961792 + 0.815319 2.0255 -1.39372 -0.278669 0.332357 0.901045 + 0.817687 2.0367 -1.40026 -0.17387 0.738249 0.651734 + 0.819485 2.04025 -1.40646 0.00673967 0.884454 0.466579 + 0.831042 2.04727 -1.42219 0.0951323 0.973182 0.209445 + 0.835646 2.02411 -1.39219 0.227234 0.297828 0.92718 + 0.825435 2.03225 -1.39523 -0.0522344 0.571525 0.818921 + 0.83427 2.03325 -1.39638 0.170607 0.635874 0.7527 + 0.83939 2.03751 -1.40323 0.261961 0.77336 0.577314 + 0.839799 2.01216 -1.39104 0.346306 -0.12512 0.929741 + 0.849475 2.0158 -1.3966 0.653227 -0.0182164 0.756943 + 0.845322 2.02775 -1.39775 0.484766 0.411856 0.771606 + 0.85823 2.02307 -1.40831 0.880558 0.187929 0.435087 + 0.850442 2.032 -1.4046 0.6102 0.563452 0.556936 + 0.858992 2.02914 -1.41954 0.910346 0.407234 0.0736904 + 0.851204 2.03807 -1.41583 0.640972 0.726727 0.247025 + 0.841188 2.04106 -1.40945 0.311558 0.836697 0.45041 + 0.837159 2.04559 -1.41873 0.214142 0.939507 0.26734 + 0.852103 2.03688 -1.43541 0.7541 0.607915 -0.24854 + 0.847176 2.0426 -1.42511 0.551476 0.833615 0.0309872 + 0.856566 2.01188 -1.45606 0.825309 0.417335 -0.38039 + 0.843427 2.04067 -1.44351 0.465508 0.753491 -0.464277 + 0.8385 2.04639 -1.43321 0.312172 0.937369 -0.154554 + 0.822531 2.04825 -1.42455 -0.0694684 0.992306 0.102483 + 0.925807 1.75951 -1.57334 -0.411299 0.597867 0.688032 + 0.927912 1.80841 -1.56914 -0.726434 -0.0335528 0.686417 + 0.914592 1.82073 -1.59468 -0.849276 0.0526088 0.525322 + 0.955874 1.85768 -1.53792 -0.411358 -0.254141 0.875327 + 0.936802 1.86374 -1.55152 -0.772608 -0.123482 0.622759 + 0.923481 1.87607 -1.57706 -0.918817 0.0106625 0.394539 + 0.918888 1.88385 -1.59307 -0.970753 0.209136 0.117899 + 0.983264 1.91729 -1.51026 -0.0385597 -0.374533 0.926412 + 0.96098 1.91842 -1.51437 -0.409665 -0.333792 0.848975 + 0.941907 1.9245 -1.52797 -0.783661 -0.194019 0.590112 + 0.932115 1.93356 -1.54674 -0.936473 -0.062891 0.345054 + 0.927522 1.94134 -1.56276 -0.992672 0.104155 0.0612658 + 1.00397 1.91895 -1.51221 0.346889 -0.336199 0.875579 + 0.999619 1.97261 -1.48749 0.344914 -0.403702 0.847384 + 0.984005 1.97135 -1.48604 -0.0315257 -0.444023 0.895461 + 0.96172 1.97249 -1.49016 -0.416772 -0.39788 0.817308 + 0.947307 1.97706 -1.50044 -0.781325 -0.248361 0.57258 + 1.01214 1.97655 -1.49485 0.686758 -0.286408 0.668082 + 1.00749 2.02171 -1.46826 0.680776 -0.273483 0.679523 + 0.997615 2.0186 -1.46245 0.347852 -0.391195 0.852036 + 0.982001 2.01733 -1.46101 -0.0372974 -0.434504 0.899897 + 1.0203 1.98114 -1.50452 0.877327 -0.151467 0.455362 + 1.01565 2.02629 -1.47792 0.875941 -0.130227 0.464509 + 1.00985 2.05379 -1.4624 0.810516 0.146105 0.567201 + 1.00404 2.05053 -1.45548 0.635856 0.0333121 0.771089 + 0.994161 2.04743 -1.44967 0.306196 -0.0730943 0.949158 + 1.02724 1.92897 -1.53232 0.875826 -0.108865 0.470189 + 1.02586 1.98743 -1.51856 0.969797 -0.0168192 0.243333 + 1.02004 2.03125 -1.48901 0.965931 0.00602489 0.258728 + 1.01424 2.05876 -1.47348 0.896998 0.265072 0.353739 + 1.02733 1.99224 -1.52935 0.991211 0.1318 0.0113461 + 1.02151 2.03608 -1.49979 0.98602 0.164408 0.0271031 + 1.01517 2.06224 -1.48085 0.908245 0.392535 0.144937 + 1.0074 2.07084 -1.47634 0.60545 0.731745 0.313018 + 1.00647 2.06735 -1.46898 0.589432 0.661352 0.463879 + 1.03476 1.94165 -1.56062 0.989212 0.145646 0.015722 + 1.02503 1.99671 -1.53925 0.881103 0.341627 -0.32703 + 1.01969 2.03959 -1.5076 0.87834 0.3744 -0.297227 + 1.01336 2.06577 -1.48866 0.805969 0.568291 -0.165708 + 1.00634 2.0729 -1.48091 0.568049 0.818645 0.0845042 + 1.03246 1.94612 -1.57052 0.884622 0.332104 -0.327339 + 1.01545 2.00132 -1.54956 0.671293 0.478968 -0.565645 + 1.01011 2.04419 -1.51791 0.662039 0.520592 -0.539155 + 1.00661 2.06898 -1.49627 0.617417 0.681319 -0.393193 + 1.01978 1.9522 -1.58419 0.672125 0.459333 -0.580742 + 0.99642 2.00708 -1.56267 0.296671 0.590118 -0.750831 + 0.995099 2.04874 -1.52825 0.305392 0.630297 -0.713766 + 0.991595 2.07352 -1.50661 0.261216 0.78147 -0.566631 + 1.00074 1.95798 -1.5973 0.309374 0.560855 -0.767938 + 0.975847 2.00687 -1.56253 -0.244207 0.588952 -0.770389 + 0.974527 2.04854 -1.52813 -0.253411 0.629372 -0.734625 + 0.976944 2.0734 -1.50646 -0.216389 0.782104 -0.58437 + 0.990813 2.07877 -1.49456 0.23579 0.934527 -0.266576 + 0.973509 1.9577 -1.59711 -0.25647 0.558232 -0.78905 + 0.949082 2.00065 -1.54913 -0.554 0.512349 -0.656187 + 0.95341 2.04363 -1.51755 -0.546134 0.555732 -0.626817 + 0.946743 1.95147 -1.58371 -0.553467 0.488961 -0.674233 + 0.936118 1.99604 -1.53943 -0.83747 0.369265 -0.402848 + 0.940447 2.03902 -1.50785 -0.838137 0.404328 -0.366122 + 0.946611 2.0652 -1.48899 -0.766267 0.605144 -0.215955 + 0.955827 2.06849 -1.4959 -0.513041 0.716547 -0.472599 + 0.929595 1.94537 -1.5709 -0.841353 0.358811 -0.404203 + 0.934046 1.99201 -1.53129 -0.995019 0.0836439 0.0542248 + 0.938812 2.03584 -1.50142 -0.990397 0.117413 0.0729926 + 0.937515 1.98613 -1.51921 -0.940343 -0.096062 0.326385 + 0.942281 2.02995 -1.48935 -0.936737 -0.0728499 0.342369 + 0.944975 2.06202 -1.48256 -0.90688 0.366934 0.20719 + 0.953641 2.07063 -1.47757 -0.585212 0.724342 0.364494 + 0.954597 2.07248 -1.48133 -0.51175 0.85593 0.0741257 + 0.950006 2.02281 -1.47453 -0.783276 -0.227617 0.578506 + 0.947446 2.05783 -1.47398 -0.867967 0.213803 0.448244 + 0.956111 2.06645 -1.46899 -0.591633 0.615421 0.520794 + 0.969766 2.07362 -1.47095 -0.17785 0.90143 0.394705 + 0.970723 2.07549 -1.47471 -0.160577 0.906602 0.390241 + 0.964419 2.01823 -1.46426 -0.407496 -0.389513 0.82597 + 0.955171 2.05069 -1.45916 -0.720075 0.0676277 0.690593 + 0.960629 2.06227 -1.46033 -0.546737 0.492337 0.677261 + 0.967214 2.07131 -1.46621 -0.300105 0.858053 0.416751 + 0.965424 2.04743 -1.45186 -0.402195 -0.0619763 0.913454 + 0.970882 2.059 -1.45302 -0.286665 0.355037 0.889816 + 0.971731 2.06713 -1.45755 -0.223775 0.703876 0.674154 + 0.982013 2.06661 -1.45565 0.00366276 0.709287 0.704911 + 0.987789 2.06842 -1.45905 0.154454 0.806582 0.570587 + 0.983006 2.04653 -1.44862 -0.033658 -0.108566 0.993519 + 0.981163 2.05847 -1.45113 -0.0549915 0.337246 0.939809 + 0.992319 2.05937 -1.45218 0.229077 0.414214 0.880881 + 0.998095 2.06118 -1.45558 0.42272 0.510028 0.749119 + 0.990342 2.07074 -1.46379 0.162296 0.858346 0.486725 + 0.992911 2.07364 -1.47028 0.173208 0.87531 0.451476 + 0.972252 2.07813 -1.48049 -0.178992 0.958553 0.221672 + 1.00391 2.06445 -1.46249 0.541523 0.599848 0.589012 + 0.99444 2.07629 -1.47606 0.207902 0.891464 0.402577 + 0.993381 2.07834 -1.48062 0.216081 0.949075 0.229271 + 0.984601 2.08101 -1.48667 0.0231545 0.998041 0.0581277 + 0.976162 2.07864 -1.49442 -0.209449 0.939131 -0.27233 + 0.963814 2.07577 -1.48824 -0.367743 0.913219 -0.175487 + 0.999594 2.0761 -1.48852 0.450022 0.882156 -0.138853 + 0.936187 1.94568 -1.34079 -0.520259 0.657385 -0.545139 + 0.939359 1.96785 -1.31586 -0.480165 0.770993 -0.418343 + 0.950922 1.97011 -1.31884 -0.0508115 0.857391 -0.512151 + 0.93348 1.96797 -1.29823 -0.545887 0.837769 0.0122377 + 0.94102 1.97224 -1.30474 -0.384694 0.918542 -0.0910491 + 0.952584 1.9745 -1.30772 -0.0324882 0.983424 -0.178388 + 0.96174 1.9735 -1.30556 0.206319 0.96462 -0.164136 + 0.928256 1.96346 -1.29133 -0.661678 0.710269 0.240211 + 0.937365 1.96768 -1.28845 -0.283502 0.862474 0.419243 + 0.944905 1.97195 -1.29496 -0.157603 0.927137 0.339969 + 0.954131 1.97383 -1.29744 -0.0301258 0.953895 0.298624 + 0.963287 1.97281 -1.29528 0.142587 0.936476 0.320439 + 0.928259 1.9612 -1.2879 -0.651478 0.469036 0.596306 + 0.937368 1.96542 -1.28502 -0.27234 0.691559 0.669011 + 0.947165 1.96051 -1.27864 -0.139935 0.633509 0.760976 + 0.951054 1.97051 -1.29305 -0.00989646 0.810656 0.585439 + 0.963575 1.96415 -1.28342 0.266397 0.715895 0.645389 + 0.928037 1.94721 -1.28517 -0.678027 -0.143787 0.720837 + 0.935049 1.95622 -1.2811 -0.489486 0.261186 0.831977 + 0.944847 1.95131 -1.27473 -0.337323 0.215754 0.916332 + 0.953314 1.95908 -1.27673 -0.0168759 0.606118 0.795196 + 0.960497 1.96084 -1.27902 0.193969 0.65272 0.732347 + 0.94479 1.9388 -1.27427 -0.429763 -0.253205 0.866713 + 0.956616 1.94912 -1.2719 0.0406909 0.213526 0.976089 + 0.963799 1.9509 -1.2742 0.405407 0.292528 0.866067 + 0.970218 1.95691 -1.28205 0.654834 0.419877 0.628407 + 0.972324 1.96381 -1.29113 0.718078 0.511066 0.472414 + 0.965681 1.97106 -1.2925 0.297962 0.813113 0.500065 + 0.972199 1.96974 -1.29958 0.659057 0.721784 0.211354 + -0.899092 1.49376 -2.24544 0.347716 0.20168 -0.915652 + -0.886486 1.45631 -2.24676 0.411627 -0.152926 -0.89843 + -0.927139 1.43888 -2.25177 0.296551 -0.376099 -0.877842 + -0.848608 1.46705 -2.22149 0.566933 0.0178786 -0.82357 + -0.871592 1.43878 -2.22644 0.360939 -0.50584 -0.783485 + -0.887581 1.43198 -2.23119 0.350441 -0.71197 -0.608514 + -0.902475 1.44951 -2.25152 0.336819 -0.586789 -0.736363 + -0.95769 1.49484 -2.26045 0.215931 0.188097 -0.95812 + -0.924909 1.56648 -2.22949 0.338979 0.369488 -0.865201 + -0.861214 1.50451 -2.22016 0.485139 0.278077 -0.829043 + -0.954314 1.44138 -2.26401 0.319065 -0.257022 -0.912216 + -1.03233 1.48352 -2.27793 0.0674862 0.214674 -0.974351 + -1.04491 1.57445 -2.23899 0.000782238 0.376687 -0.92634 + -0.983508 1.56755 -2.24452 0.0830266 0.318008 -0.944446 + -1.0136 1.39205 -2.2446 0.0963116 -0.826824 -0.554154 + -1.02895 1.43006 -2.28148 0.0655307 -0.332016 -0.940995 + -1.0787 1.49585 -2.27286 -0.224748 0.226038 -0.947837 + -1.09129 1.58679 -2.23392 -0.109045 0.414363 -0.903555 + -1.0558 1.63596 -2.21233 -0.0471832 0.478576 -0.876777 + -0.986422 1.38955 -2.23237 0.208585 -0.792402 -0.573229 + -1.05482 1.38207 -2.20798 -0.410894 -0.870223 -0.271806 + -1.04752 1.38995 -2.23971 -0.286681 -0.846133 -0.449303 + -1.06288 1.42796 -2.27657 -0.383985 -0.436768 -0.813504 + -0.920256 1.42007 -2.23255 0.326465 -0.727625 -0.60331 + -0.920522 1.4091 -2.21389 0.375115 -0.848851 -0.372479 + -0.986688 1.37858 -2.21372 0.192482 -0.924479 -0.329073 + -0.895592 1.4307 -2.23229 0.263162 -0.746972 -0.610555 + -0.895922 1.41692 -2.20714 0.2813 -0.882887 -0.376006 + -0.928203 1.39501 -2.17716 0.324915 -0.938226 -0.119002 + -0.958305 1.38611 -2.16114 0.239838 -0.965313 0.103189 + -1.01679 1.36969 -2.19769 -0.0104022 -0.97555 -0.219531 + -0.887911 1.4182 -2.20603 0.0154502 -0.854308 -0.519537 + -0.903603 1.40282 -2.17041 0.118208 -0.958889 -0.257991 + -0.915701 1.39729 -2.13927 -0.029742 -0.999541 -0.00581299 + -0.940077 1.39375 -2.14157 0.176815 -0.968049 0.177812 + -0.87123 1.41119 -2.20415 -0.0824662 -0.779439 -0.621027 + -0.896651 1.40107 -2.16767 -0.226856 -0.910269 -0.346333 + -0.908748 1.39554 -2.13654 -0.427898 -0.867193 -0.254716 + -0.930671 1.40194 -2.11612 -0.0845671 -0.988612 0.12448 + -0.848054 1.43546 -2.2199 0.426623 -0.310922 -0.849306 + -0.847692 1.40788 -2.19762 0.19371 -0.655241 -0.730162 + -0.87997 1.39407 -2.16579 -0.432775 -0.744314 -0.508628 + -0.828642 1.45837 -2.20087 0.71805 -0.0727985 -0.692174 + -0.828088 1.42677 -2.19929 0.716303 -0.313041 -0.623631 + -0.830224 1.39283 -2.17614 0.624853 -0.447201 -0.639976 + -0.849827 1.37393 -2.17447 -0.0464246 -0.709832 -0.70284 + -0.824036 1.48986 -2.20217 0.636989 0.0877634 -0.765861 + -0.809707 1.45721 -2.1801 0.8428 -0.128338 -0.522701 + -0.799637 1.43961 -2.15706 0.777028 -0.169717 -0.606155 + -0.820154 1.37524 -2.1531 0.688939 -0.52652 -0.498136 + -0.85573 1.3557 -2.14582 -0.207085 -0.775424 -0.596518 + -0.813156 1.51146 -2.18697 0.688529 0.276065 -0.670609 + -0.805101 1.4887 -2.1814 0.89159 -0.0452952 -0.450573 + -0.791442 1.54012 -2.13914 0.866171 0.159485 -0.473616 + -0.850334 1.5261 -2.20495 0.504239 0.355548 -0.786974 + -0.799498 1.56287 -2.14471 0.744863 0.249575 -0.618782 + -0.916339 1.61308 -2.20198 0.354047 0.483464 -0.800571 + -0.841764 1.57271 -2.17745 0.550908 0.341102 -0.761676 + -0.789347 1.64319 -2.10231 0.809707 0.176438 -0.559683 + -0.994392 1.62906 -2.21786 0.11842 0.507327 -0.853578 + -0.92079 1.6404 -2.18212 0.305759 0.493066 -0.814492 + -0.831614 1.65302 -2.13505 0.528621 0.326104 -0.783719 + -0.998842 1.65637 -2.198 0.120238 0.517731 -0.847053 + -0.980605 1.70774 -2.17046 0.111612 0.414575 -0.903145 + -0.917688 1.70239 -2.15691 0.312348 0.331844 -0.890123 + -0.828512 1.71502 -2.10984 0.505614 0.222222 -0.83365 + -1.05076 1.68208 -2.18405 -0.0544873 0.516237 -0.854711 + -1.03252 1.73344 -2.15652 -0.112033 0.492671 -0.862974 + -0.999865 1.7905 -2.12876 -0.118145 0.530815 -0.839212 + -0.953246 1.792 -2.13158 0.0717505 0.465315 -0.882232 + -0.890328 1.78665 -2.11804 0.304835 0.362288 -0.880808 + -1.10063 1.64679 -2.2006 -0.163567 0.499036 -0.851004 + -1.09559 1.6929 -2.17231 -0.146371 0.547252 -0.82407 + -1.07481 1.74248 -2.14068 -0.193684 0.595922 -0.779335 + -1.04216 1.79953 -2.11292 -0.403665 0.681592 -0.610317 + -0.972288 1.8385 -2.09677 -0.170103 0.76314 -0.623443 + -1.13472 1.63559 -2.19829 -0.528753 0.406951 -0.744857 + -1.13202 1.7126 -2.15023 -0.518974 0.539562 -0.662977 + -1.11124 1.76217 -2.11859 -0.383798 0.765009 -0.517166 + -1.07684 1.78557 -2.08856 -0.500082 0.800928 -0.329291 + -1.12538 1.57558 -2.23162 -0.478761 0.307786 -0.822226 + -1.14556 1.56771 -2.21169 -0.924732 0.0127687 -0.380405 + -1.15054 1.62825 -2.18043 -0.94355 0.149282 -0.295684 + -1.14784 1.70525 -2.13236 -0.93001 0.311295 -0.19539 + -1.12989 1.75606 -2.09305 -0.802141 0.597122 -0.00389197 + -1.08355 1.46722 -2.27512 -0.436262 -0.104335 -0.89375 + -1.13023 1.54695 -2.23386 -0.734542 0.00769043 -0.67852 + -1.12601 1.49299 -2.22076 -0.922489 -0.292095 -0.252379 + -1.14477 1.55028 -2.18632 -0.983483 -0.176684 -0.0393022 + -1.14975 1.61081 -2.15505 -0.999238 -0.0371698 0.0119378 + -1.11068 1.47223 -2.24293 -0.844428 -0.314825 -0.433389 + -1.09001 1.43298 -2.24439 -0.757829 -0.511739 -0.404745 + -1.12245 1.47471 -2.19044 -0.928743 -0.347266 -0.129775 + -1.1412 1.532 -2.156 -0.978863 -0.204467 -0.00462601 + -1.0973 1.42511 -2.21268 -0.809678 -0.528579 -0.255001 + -1.1238 1.4619 -2.14593 -0.955007 -0.280978 -0.0949409 + -1.1384 1.52996 -2.09554 -0.984644 -0.174196 0.0114794 + -1.14607 1.58662 -2.06973 -0.992666 -0.0603977 0.104715 + -1.14887 1.58865 -2.13019 -0.996988 -0.0766038 0.0120895 + -1.09865 1.4123 -2.16816 -0.817352 -0.52306 -0.241544 + -1.1117 1.39962 -2.10918 -0.880765 -0.418878 -0.220893 + -1.12189 1.4465 -2.09138 -0.982189 -0.169339 -0.0814219 + -1.13649 1.51456 -2.04099 -0.990881 -0.0860551 0.103681 + -1.078 1.38547 -2.16349 -0.560756 -0.776008 -0.288729 + -1.10301 1.40494 -2.14053 -0.674597 -0.676213 -0.296066 + -1.09355 1.37119 -2.09712 -0.555811 -0.775705 -0.298924 + -1.12052 1.38342 -2.03799 -0.925874 -0.376859 0.0270859 + -1.13071 1.43029 -2.0202 -0.981496 -0.15405 0.113725 + -1.03997 1.37308 -2.15319 -0.00310849 -0.999983 0.0049718 + -1.072 1.36994 -2.13355 -0.182406 -0.949212 -0.256367 + -1.08236 1.37812 -2.13585 -0.63064 -0.703357 -0.327997 + -1.08487 1.3765 -2.12848 -0.639089 -0.69553 -0.328335 + -1.02978 1.37531 -2.15087 0.183394 -0.96671 0.178434 + -1.06181 1.37216 -2.13123 0.22663 -0.973001 0.0436826 + -1.07451 1.36833 -2.12618 -0.192974 -0.95056 -0.243304 + -1.01155 1.38294 -2.1313 0.197974 -0.957821 0.208292 + -1.03001 1.38062 -2.12265 0.242302 -0.967651 0.0702951 + -1.04271 1.37679 -2.1176 0.30303 -0.928481 -0.214701 + -1.04961 1.36119 -2.08699 0.152833 -0.914261 -0.375193 + -0.955048 1.39841 -2.11842 0.172716 -0.955008 0.241098 + -0.973508 1.39608 -2.10977 0.238834 -0.96828 0.0734327 + -0.976448 1.39491 -2.1025 0.292233 -0.931926 -0.214739 + -0.983343 1.37932 -2.07189 0.297877 -0.864302 -0.405279 + -0.940627 1.40425 -2.10236 0.0119251 -0.999809 0.0154635 + -0.943567 1.40308 -2.09509 0.0806325 -0.946819 -0.3115 + -0.949257 1.38472 -2.06144 0.0515516 -0.875933 -0.47967 + -0.995344 1.34393 -2.00981 0.267433 -0.876904 -0.399398 + -1.05697 1.33738 -2.04067 0.00316493 -0.938374 -0.345607 + -0.925917 1.4005 -2.11096 -0.465319 -0.868053 -0.173098 + -0.935873 1.40281 -2.09718 -0.372385 -0.871111 -0.320149 + -0.941563 1.38446 -2.06353 -0.386165 -0.779534 -0.493156 + -0.95376 1.34832 -1.99973 -0.369016 -0.776274 -0.511102 + -0.961258 1.34933 -1.99936 0.0632665 -0.877436 -0.475503 + -0.903042 1.38081 -2.11155 -0.642412 -0.674715 -0.363411 + -0.914566 1.36855 -2.07365 -0.624128 -0.648387 -0.435957 + -0.926763 1.33242 -2.00984 -0.490945 -0.811288 -0.317466 + -0.961228 1.33076 -1.96753 -0.169257 -0.984944 -0.035164 + -0.968726 1.33177 -1.96715 -0.0120355 -0.992256 -0.123627 + -0.885873 1.37584 -2.13714 -0.591827 -0.709596 -0.382381 + -0.855708 1.33141 -2.11817 -0.109685 -0.882587 -0.457176 + -0.867232 1.31915 -2.08026 -0.244785 -0.896655 -0.368904 + -0.820131 1.35095 -2.12545 0.509325 -0.684733 -0.521276 + -0.805212 1.33538 -2.08529 0.580008 -0.755738 -0.304057 + -0.869015 1.31044 -2.04502 -0.125359 -0.972412 -0.196723 + -0.864873 1.304 -1.99944 -0.0532372 -0.997076 0.0548167 + -0.922622 1.32598 -1.96426 -0.182374 -0.961751 0.20439 + -0.77699 1.42361 -2.13262 0.758175 -0.255066 -0.600093 + -0.762071 1.40805 -2.09246 0.839452 -0.341345 -0.422852 + -0.806994 1.32668 -2.05006 0.49444 -0.842977 -0.211944 + -0.782071 1.50568 -2.13663 0.721418 0.143125 -0.677548 + -0.759425 1.48967 -2.11219 0.853145 0.0876704 -0.514253 + -0.737945 1.48817 -2.06393 0.922728 0.0628149 -0.380298 + -0.734565 1.38336 -2.02192 0.84881 -0.469183 -0.243698 + -0.762784 1.59643 -2.05332 0.881025 0.21473 -0.421529 + -0.741304 1.59492 -2.00506 0.900503 0.170746 -0.399924 + -0.710439 1.46348 -1.99338 0.975812 -0.0635473 -0.209172 + -0.739676 1.37208 -1.97537 0.778311 -0.611871 0.140875 + -0.812106 1.3154 -2.0035 0.401367 -0.915608 0.0237888 + -0.772155 1.63086 -2.05582 0.914181 0.10517 -0.391424 + -0.739236 1.6697 -1.97481 0.893909 0.0177221 -0.447898 + -0.710255 1.56845 -1.95041 0.971957 0.0764396 -0.222389 + -0.710269 1.54832 -1.89964 0.951423 -0.12042 0.28336 + -0.710452 1.44335 -1.94262 0.931513 -0.282433 0.22916 + -0.776665 1.70487 -2.06958 0.810363 0.0258287 -0.585358 + -0.759473 1.69255 -2.0231 0.922959 -0.0681686 -0.378814 + -0.729217 1.71242 -1.96378 0.913225 -0.00884209 -0.407359 + -0.708187 1.64323 -1.92017 0.97974 0.0129378 -0.199856 + -0.758738 1.75839 -2.05214 0.823093 0.0326935 -0.566965 + -0.749453 1.73526 -2.01205 0.935118 -0.0904782 -0.342591 + -0.739652 1.76789 -1.98901 0.962083 0.022823 -0.271801 + -0.727109 1.75134 -1.95088 0.944277 0.104782 -0.312027 + -0.705916 1.68333 -1.91339 0.979498 -0.00719142 -0.201327 + -0.810585 1.76854 -2.09241 0.488766 0.221227 -0.8439 + -0.791228 1.81115 -2.06378 0.557852 0.537038 -0.632764 + -0.748937 1.79101 -2.02909 0.851041 0.319981 -0.416343 + -0.870971 1.82926 -2.08941 0.308356 0.544939 -0.779717 + -0.848521 1.85072 -2.05959 0.381558 0.567316 -0.729771 + -0.786292 1.81982 -2.03777 0.606728 0.612492 -0.50669 + -0.744001 1.79968 -2.00307 0.896375 0.304134 -0.322514 + -0.925669 1.84 -2.09959 0.0886677 0.660748 -0.745352 + -0.903219 1.86146 -2.06977 0.117257 0.633783 -0.764572 + -0.889381 1.90294 -2.04387 0.134329 0.422129 -0.896528 + -0.85084 1.88291 -2.04043 0.394515 0.426646 -0.813837 + -0.939863 1.861 -2.06729 -0.174519 0.730715 -0.659999 + -0.926026 1.90248 -2.04141 -0.198054 0.430141 -0.880769 + -0.924929 1.9648 -2.02233 -0.145931 0.346733 -0.926542 + -0.892353 1.96327 -2.02012 0.220558 0.385362 -0.896019 + -0.853812 1.94323 -2.01666 0.443739 0.460189 -0.768975 + -1.01063 1.83274 -2.08394 -0.39026 0.82766 -0.403332 + -0.978204 1.85524 -2.05445 -0.368115 0.76447 -0.529223 + -0.957905 1.89687 -2.03116 -0.438548 0.465725 -0.768619 + -1.04531 1.81879 -2.05957 -0.59268 0.777709 -0.209522 + -1.01618 1.84657 -2.03436 -0.595286 0.722832 -0.350924 + -0.995883 1.8882 -2.01106 -0.646086 0.509964 -0.5679 + -0.975807 1.94944 -1.98993 -0.766071 0.32879 -0.552297 + -0.956808 1.9592 -2.01208 -0.589911 0.296411 -0.751096 + -1.06679 1.80356 -2.03872 -0.714434 0.694392 0.0860424 + -1.03766 1.83134 -2.0135 -0.796864 0.603949 -0.0159384 + -1.01403 1.8742 -1.9934 -0.8602 0.465125 -0.209081 + -1.09549 1.77946 -2.06302 -0.643207 0.761377 0.0811836 + -1.06837 1.78834 -2.0124 -0.757219 0.570832 0.317442 + -1.0501 1.80483 -1.99789 -0.817893 0.509632 0.267071 + -1.02647 1.84769 -1.9778 -0.882684 0.309897 0.353317 + -1.09708 1.76425 -2.0367 -0.761274 0.548182 0.34635 + -1.06596 1.7651 -1.96907 -0.789962 0.506357 0.345777 + -1.12907 1.73891 -2.06777 -0.889246 0.352855 0.291091 + -1.12418 1.7134 -2.0251 -0.869672 0.365851 0.331397 + -1.09218 1.73874 -1.99404 -0.791561 0.482669 0.374782 + -1.14702 1.68809 -2.10709 -0.988099 0.110558 0.106949 + -1.14066 1.67979 -2.04604 -0.959844 0.190917 0.205548 + -1.11048 1.67767 -1.96451 -0.871971 0.241375 0.425916 + -1.08523 1.7041 -1.93404 -0.82439 0.345556 0.448299 + -1.05901 1.73045 -1.90908 -0.79467 0.37722 0.475611 + -1.14614 1.66593 -2.08223 -0.994723 0.0386123 0.0950579 + -1.14059 1.60047 -2.03354 -0.974829 -0.0492873 0.21744 + -1.12697 1.64406 -1.98544 -0.932018 0.0984178 0.348792 + -1.08672 1.64681 -1.9115 -0.826502 0.118699 0.550277 + -1.06147 1.67324 -1.88104 -0.765794 0.13863 0.627965 + -1.12764 1.56808 -1.99769 -0.964985 -0.0361345 0.259805 + -1.11401 1.61167 -1.94958 -0.894939 0.0504442 0.443328 + -1.05772 1.62163 -1.86933 -0.753993 0.0847421 0.651393 + -1.01885 1.64567 -1.83592 -0.630773 0.126082 0.765655 + -1.11346 1.54151 -1.94398 -0.897603 -0.0242042 0.44014 + -1.08501 1.58649 -1.90741 -0.801013 0.00445237 0.59863 + -1.03918 1.60236 -1.84948 -0.646277 -0.109597 0.755192 + -1.12231 1.48799 -1.98729 -0.958534 -0.0410942 0.281998 + -1.106 1.4838 -1.94016 -0.787083 -0.19816 0.584152 + -1.08758 1.52264 -1.91138 -0.696611 -0.1574 0.699971 + -1.05913 1.56764 -1.87481 -0.670339 -0.144468 0.727856 + -1.11441 1.4261 -1.97307 -0.832293 -0.237944 0.50067 + -1.06537 1.47382 -1.91368 -0.604304 -0.279018 0.746301 + -1.04694 1.51267 -1.8849 -0.486776 -0.296557 0.821646 + -1.03598 1.56173 -1.86204 -0.448857 -0.302856 0.840718 + -1.01603 1.59645 -1.83673 -0.364481 -0.398658 0.841561 + -1.10104 1.3795 -1.98664 -0.736316 -0.47224 0.48459 + -1.09989 1.41162 -1.9656 -0.648861 -0.346348 0.677512 + -1.05085 1.45934 -1.90621 -0.591681 -0.206393 0.779305 + -1.00846 1.50637 -1.86986 -0.363339 -0.247272 0.898244 + -1.08144 1.34347 -1.99944 -0.612244 -0.705318 0.357328 + -1.04294 1.35016 -1.9651 -0.455384 -0.62214 0.636841 + -1.04907 1.39376 -1.9313 -0.532662 -0.50549 0.678786 + -1.04792 1.42587 -1.91027 -0.575188 -0.282947 0.767528 + -1.00553 1.4729 -1.87392 -0.386326 -0.206374 0.898978 + -1.10092 1.34738 -2.0508 -0.597087 -0.781405 -0.181368 + -1.05999 1.32342 -2.00723 -0.314764 -0.949148 -0.00648119 + -1.02149 1.3301 -1.97289 -0.187316 -0.880038 0.436401 + -1.00874 1.35683 -1.93603 -0.363404 -0.642582 0.674556 + -1.01487 1.40043 -1.90222 -0.40065 -0.450113 0.798046 + -0.976767 1.38693 -1.89556 -0.212181 -0.516547 0.829553 + -0.955031 1.42883 -1.87211 -0.134559 -0.352529 0.926076 + -0.993137 1.44233 -1.87877 -0.309951 -0.286288 0.906625 + -0.992956 1.34349 -1.94269 -0.126707 -0.816649 0.563054 + -0.960983 1.37358 -1.90222 -0.183924 -0.580943 0.792892 + -0.897501 1.43092 -1.87013 0.0120944 -0.367199 0.930064 + -0.921796 1.52442 -1.84221 -0.128176 -0.282323 0.950718 + -0.998746 1.33032 -1.97424 0.0103125 -0.961874 0.273297 + -0.970212 1.3437 -1.94403 -0.122453 -0.856635 0.501181 + -0.948804 1.35617 -1.91136 -0.25078 -0.702371 0.666172 + -0.893374 1.36083 -1.90056 -0.0224523 -0.58474 0.81091 + -0.905553 1.37825 -1.89143 -0.0392813 -0.425965 0.903886 + -0.998363 1.32996 -1.97637 0.113476 -0.989752 -0.0866871 + -0.969109 1.33213 -1.96502 -0.0793471 -0.941174 0.328475 + -0.962097 1.33641 -1.9534 -0.13941 -0.895945 0.421719 + -0.940689 1.34888 -1.92073 -0.143787 -0.858118 0.492908 + -0.954216 1.33504 -1.9559 -0.0982329 -0.912804 0.396409 + -0.909096 1.33982 -1.92908 -0.13624 -0.850832 0.507467 + -0.848994 1.34274 -1.91206 0.121809 -0.651268 0.749007 + -0.805417 1.37274 -1.90596 0.342821 -0.493843 0.79912 + -0.864716 1.32173 -1.94058 -0.0353278 -0.903518 0.427092 + -0.811948 1.33311 -1.94464 0.377319 -0.826003 0.418747 + -0.768371 1.36311 -1.93854 0.560555 -0.661809 0.497782 + -0.797364 1.42541 -1.88466 0.265085 -0.440463 0.857743 + -0.739147 1.43438 -1.90578 0.614423 -0.424512 0.665036 + -0.800958 1.50662 -1.84181 0.164989 -0.388572 0.906527 + -0.864266 1.5265 -1.84023 -0.0492242 -0.327377 0.943611 + -0.742741 1.5156 -1.86294 0.614545 -0.321978 0.720184 + -0.743671 1.58188 -1.83554 0.641008 -0.270021 0.718468 + -0.787413 1.572 -1.81563 0.205742 -0.347698 0.914755 + -0.85072 1.59187 -1.81405 -0.0574968 -0.37744 0.924247 + -0.711199 1.61461 -1.87225 0.935213 -0.109471 0.336739 + -0.708928 1.65471 -1.86548 0.942386 -0.0692211 0.327286 + -0.741793 1.62937 -1.82166 0.655061 -0.159911 0.73846 + -0.785535 1.61948 -1.80175 0.232587 -0.247171 0.940643 + -0.703809 1.72224 -1.90049 0.992577 0.103451 -0.0639395 + -0.711709 1.70214 -1.8583 0.904742 0.0544195 0.422468 + -0.744575 1.67681 -1.81449 0.660655 -0.0312616 0.750038 + -0.780673 1.66025 -1.79405 0.296559 -0.121798 0.947216 + -0.842039 1.62036 -1.79979 -0.0169634 -0.318493 0.947774 + -0.724012 1.78422 -1.92417 0.948119 0.167234 -0.270374 + -0.713326 1.77037 -1.89423 0.98975 0.140091 -0.0277306 + -0.721226 1.75027 -1.85204 0.903527 0.0572023 0.424697 + -0.751963 1.73191 -1.81056 0.672115 -0.0263851 0.739977 + -0.788062 1.71535 -1.79012 0.199623 -0.0654664 0.977683 + -0.736555 1.80077 -1.96229 0.967159 0.133638 -0.216206 + -0.736368 1.83852 -1.93163 0.961441 0.140857 -0.236199 + -0.726314 1.83497 -1.90204 0.945646 0.155665 -0.285521 + -0.715627 1.82111 -1.87211 0.999403 0.0345378 -0.000400484 + -0.725543 1.80598 -1.84147 0.912115 -0.0939597 0.399021 + -0.743814 1.83743 -1.97241 0.723326 0.456486 -0.518093 + -0.736551 1.89566 -1.90307 0.794033 0.364331 -0.486594 + -0.726497 1.89212 -1.87348 0.944126 0.154961 -0.290884 + -0.717133 1.8795 -1.84616 0.999894 0.0117124 -0.00861892 + -0.727049 1.86436 -1.81551 0.857643 -0.161196 0.488327 + -0.761862 1.84348 -1.975 0.351154 0.757904 -0.549792 + -0.749461 1.89927 -1.91012 0.410827 0.60628 -0.680915 + -0.748343 1.96032 -1.86717 0.346225 0.506933 -0.789397 + -0.735433 1.95672 -1.86013 0.72398 0.339969 -0.600228 + -0.725891 1.95057 -1.84504 0.913436 0.168941 -0.370261 + -0.778005 1.84923 -1.98921 0.738713 0.659058 0.141227 + -0.791416 1.85339 -1.94798 -0.189425 0.894161 -0.405703 + -0.792228 1.90588 -1.91082 -0.309004 0.590827 -0.745279 + -0.76751 1.90531 -1.91271 0.131846 0.653479 -0.745374 + -0.76429 1.96284 -1.86876 0.0632462 0.563842 -0.823457 + -0.784655 1.86838 -2.00259 0.829928 0.510829 -0.224218 + -0.828373 1.92925 -1.96297 0.899974 0.332641 0.281773 + -0.807559 1.85914 -1.96219 0.577452 0.640379 0.506423 + -0.818141 1.85194 -1.92974 -0.297812 0.919837 -0.255359 + -0.788611 1.85201 -2.0186 0.615083 0.429164 -0.661431 + -0.849856 1.95961 -2.00064 0.66663 0.488395 -0.563093 + -0.835023 1.94841 -1.97634 0.888805 0.447232 -0.100042 + -0.892646 2.02482 -1.99562 0.302756 0.388906 -0.87011 + -0.87111 2.01902 -1.98352 0.705783 0.361712 -0.609126 + -0.856278 2.00783 -1.95922 0.922003 0.285453 -0.261586 + -0.851627 1.99948 -1.94063 0.980289 0.17805 0.0856201 + -0.832983 1.92248 -1.94618 0.828313 0.154885 0.538431 + -0.925222 2.02636 -1.99782 -0.162053 0.389442 -0.906683 + -0.921799 2.08898 -1.96949 -0.153016 0.451938 -0.878828 + -0.895326 2.08771 -1.96769 0.308953 0.432891 -0.846849 + -0.873791 2.08192 -1.9556 0.725954 0.333154 -0.601663 + -0.948669 2.02264 -1.98866 -0.597721 0.346066 -0.723165 + -0.945246 2.08526 -1.96032 -0.608751 0.38613 -0.693056 + -0.939173 2.14027 -1.93175 -0.59624 0.47166 -0.649642 + -0.921589 2.14313 -1.93873 -0.160704 0.54685 -0.821663 + -0.895116 2.14186 -1.93694 0.317027 0.525182 -0.789733 + -0.967668 2.01288 -1.9665 -0.843969 0.273105 -0.46166 + -0.960694 2.07717 -1.94198 -0.843239 0.292986 -0.450674 + -0.954621 2.13217 -1.91341 -0.835798 0.359526 -0.414949 + -0.976243 2.00544 -1.95092 -0.963318 0.211039 -0.165772 + -0.969269 2.06972 -1.92641 -0.970206 0.185074 -0.156359 + -0.961027 2.12683 -1.90189 -0.961423 0.236467 -0.140529 + -0.944656 2.18136 -1.88442 -0.823786 0.424218 -0.376054 + -0.993954 1.93544 -1.97227 -0.923256 0.334014 -0.189825 + -0.975963 1.99982 -1.93825 -0.953652 0.074504 0.291542 + -0.969034 2.06551 -1.91693 -0.965248 0.022212 0.26039 + -0.960792 2.12263 -1.8924 -0.961549 0.0362511 0.272229 + -0.951062 2.17602 -1.8729 -0.952511 0.289073 -0.0957111 + -0.993675 1.92983 -1.9596 -0.914322 0.188608 0.35839 + -0.981995 1.92345 -1.94256 -0.76866 0.0297373 0.638966 + -0.967909 1.99389 -1.92317 -0.833792 -0.0381279 0.55076 + -0.96098 2.05958 -1.90185 -0.842948 -0.0899276 0.530426 + -0.954734 2.11813 -1.88125 -0.844093 -0.0971345 0.527325 + -1.01479 1.84131 -1.96075 -0.733716 0.382931 0.56127 + -0.972792 1.85284 -1.93957 -0.47498 0.395604 0.786061 + -0.964709 1.91481 -1.92212 -0.601728 -0.124145 0.788994 + -0.950622 1.98525 -1.90273 -0.611008 -0.132087 0.780527 + -0.946914 2.05248 -1.88496 -0.630339 -0.180557 0.755031 + -1.01408 1.83106 -1.94101 -0.402072 0.911785 -0.0835868 + -0.972088 1.84258 -1.91983 -0.0493733 0.97005 -0.237836 + -0.937711 1.85232 -1.92473 -0.310743 0.412287 0.856422 + -0.929628 1.91428 -1.90729 -0.228028 -0.178993 0.95706 + -0.929162 1.98119 -1.89321 -0.226462 -0.213016 0.950441 + -1.02479 1.83536 -1.92346 -0.7718 0.626895 -0.106433 + -0.980764 1.88526 -1.86563 -0.438602 0.762872 -0.475032 + -0.960507 1.89046 -1.87556 -0.113201 0.727348 -0.676868 + -0.925232 1.8928 -1.86607 0.252741 0.618774 -0.743802 + -0.936812 1.84492 -1.91034 0.058177 0.982972 -0.174304 + -1.04769 1.78159 -1.95457 -0.846836 0.445254 0.29089 + -1.03028 1.81533 -1.93018 -0.908675 0.135185 0.395011 + -0.998351 1.88183 -1.83149 -0.95513 0.235038 0.180233 + -0.991474 1.88956 -1.84808 -0.703425 0.640085 -0.309006 + -1.03082 1.77568 -1.89927 -0.852478 0.290877 0.434363 + -1.01341 1.80942 -1.87489 -0.906329 0.0132432 0.422365 + -1.00384 1.8618 -1.83821 -0.92452 0.0180254 0.380707 + -1.03131 1.70976 -1.86119 -0.699678 0.256514 0.666822 + -1.00313 1.75498 -1.85138 -0.737897 0.156586 0.656497 + -0.987221 1.80629 -1.83345 -0.786645 -0.128956 0.603788 + -0.977649 1.85867 -1.79678 -0.790764 -0.239965 0.563125 + -0.988692 1.68218 -1.81608 -0.534021 0.0845056 0.841237 + -0.959144 1.73527 -1.80948 -0.546456 0.0397479 0.836544 + -0.94324 1.78657 -1.79155 -0.577563 -0.223854 0.785055 + -0.94535 1.84504 -1.7678 -0.595817 -0.341886 0.726716 + -0.943913 1.66603 -1.7953 -0.239564 -0.0683772 0.96847 + -0.914365 1.71912 -1.78871 -0.168197 -0.112645 0.979296 + -0.906958 1.77198 -1.77752 -0.190975 -0.25599 0.947627 + -0.960783 1.62859 -1.80535 -0.227515 -0.27877 0.933019 + -0.887647 1.66415 -1.79206 -0.0331019 -0.0842228 0.995897 + -0.870092 1.70105 -1.79431 0.0448651 -0.0469819 0.997888 + -0.862685 1.75391 -1.78312 0.400713 -0.187489 0.896815 + -1.00031 1.62638 -1.81606 -0.378879 0.0463277 0.924286 + -0.976505 1.59867 -1.82601 -0.180738 -0.434372 0.882414 + -0.904516 1.62672 -1.80212 -0.0723308 -0.33345 0.939989 + -0.837177 1.66114 -1.7921 0.00625998 -0.0740852 0.997232 + -0.997493 1.55542 -1.847 -0.275753 -0.329017 0.903166 + -0.913198 1.59822 -1.81636 -0.118441 -0.379362 0.917636 + -0.934186 1.55499 -1.83735 -0.232062 -0.309494 0.92215 + -0.819622 1.69804 -1.79435 -0.0387735 -0.0124649 0.99917 + -0.847077 1.76163 -1.79512 0.402029 0.219578 0.888908 + -0.890218 1.83336 -1.76077 0.479761 -0.214307 0.850824 + -0.909069 1.83044 -1.75378 -0.0338413 -0.37442 0.926642 + -0.783995 1.77461 -1.7851 0.238725 -0.120581 0.963572 + -0.815555 1.75729 -1.78932 -0.208152 -0.0193717 0.977905 + -0.833175 1.76433 -1.79935 -0.247763 0.510755 0.823251 + -0.855159 1.79369 -1.81726 0.695281 0.54204 0.471992 + -0.87461 1.84108 -1.77277 0.786497 -0.0558778 0.615061 + -0.75628 1.78762 -1.79999 0.66541 -0.112653 0.737929 + -0.783561 1.84073 -1.77594 0.200331 -0.173153 0.964306 + -0.800585 1.84202 -1.77801 -0.327447 -0.106802 0.938814 + -0.818206 1.84905 -1.78803 -0.57954 -0.0510728 0.813342 + -0.755847 1.85374 -1.79084 0.611386 -0.19037 0.768092 + -0.753817 1.91743 -1.77039 0.584204 -0.278586 0.762296 + -0.773635 1.91234 -1.76087 0.180416 -0.265426 0.9471 + -0.790659 1.91362 -1.76293 -0.309668 -0.191506 0.93136 + -0.725019 1.92805 -1.79507 0.842438 -0.206819 0.497519 + -0.723834 1.99148 -1.76811 0.833647 -0.213473 0.509374 + -0.745486 1.98371 -1.75005 0.581502 -0.294912 0.75821 + -0.765304 1.97862 -1.74053 0.162009 -0.305813 0.938207 + -0.775719 1.9795 -1.74215 -0.316414 -0.230686 0.920145 + -0.716527 1.93795 -1.81772 0.999876 -0.0118021 0.0103936 + -0.715341 2.00138 -1.79076 0.999976 0.00545464 -0.00425521 + -0.716837 2.05794 -1.76226 0.99738 0.0615047 0.0380841 + -0.722807 2.05105 -1.74667 0.837025 -0.159141 0.523511 + -0.744459 2.04328 -1.72861 0.580613 -0.259033 0.771875 + -0.722661 2.01034 -1.81018 0.910634 0.185386 -0.369294 + -0.724157 2.0669 -1.78166 0.905955 0.242654 -0.346937 + -0.728679 2.11732 -1.75165 0.898159 0.300915 -0.320562 + -0.723833 2.11158 -1.73951 0.990132 0.132257 0.046338 + -0.729803 2.1047 -1.72392 0.82113 -0.108661 0.560301 + -0.732204 2.0165 -1.82526 0.708452 0.339918 -0.618508 + -0.730445 2.07118 -1.79156 0.711197 0.378445 -0.592434 + -0.734966 2.1216 -1.76153 0.694493 0.435892 -0.572431 + -0.734305 2.14794 -1.73562 0.82005 0.543113 -0.180403 + -0.72946 2.1422 -1.72349 0.909871 0.37377 0.180084 + -0.740157 2.01864 -1.82947 0.348781 0.478228 -0.806008 + -0.738398 2.07332 -1.79576 0.336615 0.500332 -0.797721 + -0.739627 2.12288 -1.76388 0.331996 0.53867 -0.774347 + -0.73814 2.15072 -1.74126 0.641562 0.656093 -0.397416 + -0.756103 2.02117 -1.83105 0.063508 0.533867 -0.84318 + -0.749025 2.07478 -1.79672 0.0591768 0.53596 -0.842167 + -0.750255 2.12433 -1.76486 0.0568512 0.563051 -0.824464 + -0.742801 2.152 -1.74362 0.307206 0.74766 -0.588752 + -0.773934 2.02176 -1.82983 -0.232359 0.554955 -0.798771 + -0.766856 2.07537 -1.79551 -0.234625 0.542753 -0.806455 + -0.761515 2.12477 -1.7641 -0.227951 0.558949 -0.797254 + -0.749178 2.1527 -1.74422 0.0699498 0.767372 -0.637375 + -0.745359 2.15596 -1.73553 0.212772 0.96367 -0.161454 + -0.789008 1.96341 -1.86688 -0.258714 0.57469 -0.776401 + -0.807276 1.96045 -1.8583 -0.58624 0.522215 -0.619366 + -0.792203 2.0188 -1.82125 -0.58549 0.521059 -0.621047 + -0.779339 2.07346 -1.78972 -0.581931 0.493149 -0.646653 + -0.818952 1.90443 -1.89258 -0.611658 0.497217 -0.615345 + -0.824707 1.95308 -1.84008 -0.839777 0.421408 -0.342331 + -0.804526 2.01368 -1.80835 -0.832331 0.429817 -0.349976 + -0.791662 2.06835 -1.77682 -0.846286 0.38395 -0.3693 + -0.849933 1.84528 -1.90432 -0.442666 0.896629 0.0102066 + -0.836383 1.89708 -1.87436 -0.836863 0.412073 -0.360355 + -0.831377 1.94503 -1.82226 -0.959859 0.28037 -0.00798095 + -0.811196 2.00563 -1.79054 -0.95888 0.283788 0.00376616 + -0.796166 2.06289 -1.76471 -0.971396 0.235862 -0.0275504 + -0.828463 1.85617 -1.9411 0.457776 0.63637 0.620866 + -0.860255 1.8495 -1.91568 0.25669 0.654807 0.710871 + -0.891764 1.84878 -1.90985 -0.0265467 0.540643 0.840833 + -0.890865 1.84138 -1.89545 0.264813 0.962688 -0.0557235 + -0.868025 1.83181 -1.87504 0.480848 0.868278 0.12198 + -0.859635 1.83394 -1.87879 -0.572641 0.751897 0.326701 + -0.853887 1.91951 -1.92509 0.681865 0.0276575 0.730955 + -0.868325 1.91479 -1.91271 0.436889 -0.0447324 0.898403 + -0.899833 1.91406 -1.90688 0.0856429 -0.115061 0.98966 + -0.856237 1.99271 -1.92384 0.898733 0.0264964 0.437696 + -0.864832 1.98759 -1.91067 0.763181 -0.0754142 0.641769 + -0.879269 1.98287 -1.89829 0.472665 -0.168787 0.864927 + -0.899367 1.98098 -1.89281 0.133559 -0.226189 0.964884 + -0.857158 2.06436 -1.91706 0.995708 0.0793665 0.0476076 + -0.860908 2.05907 -1.90378 0.918178 -0.0545638 0.392392 + -0.869502 2.05395 -1.89061 0.772328 -0.142413 0.619055 + -0.880929 2.05021 -1.88067 0.495327 -0.225271 0.83899 + -0.901027 2.04832 -1.87518 0.132524 -0.270489 0.953558 + -0.861808 2.0727 -1.93566 0.931351 0.210518 -0.2971 + -0.867014 2.12826 -1.90784 0.927464 0.263012 -0.265772 + -0.863574 2.12212 -1.8939 0.991933 0.113423 0.0566146 + -0.867324 2.11682 -1.88062 0.916317 -0.0513061 0.397153 + -0.87367 2.11305 -1.87094 0.77529 -0.154392 0.612444 + -0.878996 2.13748 -1.92777 0.715735 0.41222 -0.563736 + -0.883524 2.18432 -1.89326 0.719656 0.474219 -0.50716 + -0.875746 2.17829 -1.88002 0.917037 0.323776 -0.232834 + -0.872306 2.17216 -1.86609 0.983122 0.156257 0.0951539 + -0.874821 2.1688 -1.85752 0.909935 -0.0128292 0.414553 + -0.899644 2.1887 -1.90242 0.303733 0.602417 -0.738133 + -0.899835 2.21595 -1.87905 0.29912 0.768633 -0.565447 + -0.889857 2.21324 -1.87334 0.648607 0.66545 -0.369439 + -0.882079 2.20722 -1.8601 0.845047 0.525506 -0.0986827 + -0.879976 2.2035 -1.85141 0.900993 0.392586 0.184629 + -0.916994 2.18952 -1.9036 -0.145667 0.624458 -0.767355 + -0.917186 2.21677 -1.88024 -0.148733 0.79045 -0.594195 + -0.913686 2.22178 -1.86936 -0.0757237 0.959204 -0.272385 + -0.904212 2.22133 -1.86872 0.199324 0.946208 -0.254874 + -0.894234 2.21862 -1.86301 0.491371 0.869143 -0.0560893 + -0.934578 2.18666 -1.89663 -0.60088 0.537352 -0.591773 + -0.92809 2.21496 -1.87591 -0.531203 0.721473 -0.444186 + -0.92459 2.21998 -1.86504 -0.401493 0.908865 -0.11299 + -0.91427 2.22287 -1.85953 -0.0943551 0.987527 0.126045 + -0.904796 2.22242 -1.85888 0.167034 0.975496 0.143206 + -0.938168 2.20966 -1.86371 -0.751742 0.617742 -0.23082 + -0.930047 2.21705 -1.85831 -0.508322 0.860752 0.0267324 + -0.919726 2.21994 -1.85279 -0.199258 0.93073 0.306655 + -0.900609 2.2191 -1.8516 0.24828 0.911126 0.328947 + -0.890047 2.21531 -1.85573 0.581041 0.804545 0.122876 + -0.942085 2.20654 -1.85644 -0.861492 0.507481 0.0171726 + -0.933964 2.21393 -1.85105 -0.563602 0.794978 0.224414 + -0.919546 2.21771 -1.84761 -0.154374 0.905053 0.396292 + -0.900429 2.21687 -1.84642 0.225836 0.89461 0.385579 + -0.887945 2.21159 -1.84705 0.606595 0.726205 0.323526 + -0.950847 2.17345 -1.86696 -0.952334 0.078585 0.294762 + -0.941871 2.20398 -1.85051 -0.864557 0.320035 0.387451 + -0.933822 2.2126 -1.84796 -0.559385 0.693128 0.454601 + -0.919404 2.21638 -1.84453 -0.161879 0.912198 0.376417 + -0.944789 2.16896 -1.85581 -0.837255 -0.0691901 0.542417 + -0.938143 2.20116 -1.84379 -0.771091 0.19883 0.604885 + -0.930094 2.20979 -1.84125 -0.532186 0.60023 0.597078 + -0.940668 2.11102 -1.86436 -0.628058 -0.206575 0.750247 + -0.935579 2.16434 -1.84469 -0.631606 -0.184478 0.753021 + -0.928933 2.19654 -1.83267 -0.57054 0.0866882 0.816682 + -0.925103 2.20724 -1.83516 -0.44788 0.487353 0.749593 + -0.920719 2.2149 -1.84083 -0.294218 0.865521 0.405351 + -0.924527 2.10799 -1.85717 -0.233295 -0.298719 0.925387 + -0.919437 2.16131 -1.8375 -0.219988 -0.290115 0.931364 + -0.918901 2.19468 -1.82816 -0.221872 0.0014846 0.975074 + -0.915071 2.20537 -1.83064 -0.141283 0.377201 0.915292 + -0.915728 2.21235 -1.83474 -0.144588 0.722509 0.676073 + -0.925454 2.04843 -1.87543 -0.224325 -0.259764 0.939256 + -0.9001 2.10789 -1.85691 0.138099 -0.312533 0.939815 + -0.903484 2.16126 -1.83738 0.131391 -0.302029 0.944201 + -0.902948 2.19464 -1.82803 0.135924 -0.00864692 0.990682 + -0.906382 2.20538 -1.83059 0.089429 0.38116 0.920173 + -0.885096 2.10931 -1.861 0.492325 -0.257347 0.831498 + -0.888481 2.16268 -1.84146 0.494971 -0.237133 0.835926 + -0.893706 2.19554 -1.83051 0.451474 0.0490219 0.890937 + -0.89714 2.20628 -1.83307 0.352343 0.484708 0.80057 + -0.881167 2.16503 -1.84784 0.768296 -0.127721 0.627223 + -0.886392 2.19788 -1.83688 0.715913 0.154928 0.680784 + -0.893239 2.20754 -1.8365 0.49748 0.577045 0.647713 + -0.903138 2.21362 -1.83813 0.220427 0.843785 0.489325 + -0.907039 2.21236 -1.8347 0.096214 0.748224 0.656433 + -0.882491 2.20014 -1.84284 0.835106 0.247086 0.491473 + -0.889338 2.20981 -1.84245 0.563963 0.650341 0.508924 + -0.901823 2.2151 -1.84183 0.202977 0.883083 0.423042 + -0.898077 1.8886 -1.8564 0.518111 0.556197 -0.649774 + -0.875236 1.87903 -1.83599 0.846299 0.387714 -0.365316 + -0.92575 1.94566 -1.82462 0.171458 0.593205 -0.786581 + -0.898595 1.94146 -1.81495 0.542702 0.516385 -0.662435 + -0.883017 1.93465 -1.80089 0.847656 0.360433 -0.389317 + -0.868018 1.8683 -1.81446 0.971283 0.213673 -0.104658 + -0.947222 1.9451 -1.82456 -0.227698 0.618468 -0.752098 + -0.926855 2.00147 -1.78457 0.173959 0.564206 -0.8071 + -0.904837 1.99813 -1.77673 0.537006 0.499941 -0.679473 + -0.889259 1.99131 -1.76266 0.854599 0.344783 -0.38831 + -0.875799 1.92392 -1.77936 0.98336 0.176696 -0.0422115 + -0.967479 1.93991 -1.81463 -0.59938 0.549396 -0.582158 + -0.964441 1.99668 -1.77653 -0.612914 0.458499 -0.643518 + -0.948327 2.00093 -1.78451 -0.264128 0.550108 -0.792223 + -0.929849 2.05409 -1.74962 0.168641 0.545752 -0.820801 + -0.907831 2.05075 -1.74177 0.544322 0.479941 -0.688019 + -0.979742 1.93388 -1.803 -0.82864 0.422735 -0.366948 + -0.976704 1.99065 -1.76489 -0.840179 0.333522 -0.427624 + -0.971109 2.04514 -1.73312 -0.833151 0.349815 -0.428356 + -0.961994 2.04944 -1.74159 -0.611665 0.45846 -0.644733 + -0.94588 2.05369 -1.74957 -0.258507 0.539275 -0.801471 + -0.986619 1.92615 -1.78642 -0.990239 0.0496371 0.130245 + -0.982223 1.9849 -1.75249 -0.996053 0.0474061 0.0750426 + -0.976628 2.03938 -1.72072 -0.991546 0.0751098 0.105804 + -0.967821 2.09275 -1.6951 -0.984165 0.139841 0.108922 + -0.964161 2.09645 -1.70299 -0.825811 0.386307 -0.410856 + -0.974871 1.91696 -1.76556 -0.80809 -0.248648 0.534008 + -0.970475 1.97571 -1.73163 -0.803979 -0.234041 0.546665 + -0.967581 2.03238 -1.70531 -0.80249 -0.182964 0.567921 + -0.942573 1.90333 -1.73659 -0.575579 -0.362017 0.733247 + -0.943649 1.96439 -1.70755 -0.581096 -0.3389 0.739915 + -0.940755 2.02107 -1.68121 -0.577969 -0.280643 0.766284 + -0.94082 2.07818 -1.66356 -0.583374 -0.22183 0.781324 + -0.958773 2.08575 -1.67969 -0.792195 -0.133038 0.59559 + -0.919433 1.89794 -1.72668 -0.0542489 -0.408274 0.911246 + -0.92051 1.959 -1.69764 -0.0193238 -0.407389 0.91305 + -0.923508 2.01709 -1.67346 -0.0343958 -0.340261 0.939702 + -0.900583 1.90086 -1.73367 0.534187 -0.289061 0.79441 + -0.906322 1.96132 -1.70327 0.542863 -0.31848 0.777091 + -0.90932 2.01941 -1.6791 0.551249 -0.263009 0.791802 + -0.914512 2.0758 -1.65953 0.549208 -0.200559 0.811262 + -0.923574 2.07421 -1.65581 -0.0139618 -0.270927 0.962499 + -0.887602 1.90638 -1.74452 0.78684 -0.161921 0.595537 + -0.893341 1.96685 -1.71412 0.78975 -0.200115 0.57987 + -0.899932 2.02347 -1.68723 0.788215 -0.162624 0.593524 + -0.877244 1.91512 -1.76182 0.952226 0.00601591 0.305335 + -0.885018 1.97388 -1.72792 0.953755 -0.0384077 0.298121 + -0.891609 2.03049 -1.70102 0.951921 -0.0154722 0.305951 + -0.899657 2.08452 -1.67669 0.944719 0.0220269 0.327141 + -0.905124 2.07985 -1.66766 0.786176 -0.108657 0.608376 + -0.864252 1.84981 -1.79008 0.966876 0.0489869 0.250502 + -0.883573 1.98269 -1.74545 0.987444 0.152307 -0.0419132 + -0.890487 2.03708 -1.71403 0.987584 0.1536 -0.0329262 + -0.858926 1.81218 -1.84164 0.664845 0.675499 0.318875 + -0.841258 1.79639 -1.82149 -0.61065 0.425129 0.66811 + -0.850536 1.81431 -1.84539 -0.607895 0.5645 0.558393 + -0.834888 1.8565 -1.80171 -0.826924 -0.00906901 0.562241 + -0.844166 1.87442 -1.82561 -0.962704 0.0740148 0.260237 + -0.846085 1.88573 -1.84883 -0.973236 0.229664 -0.00818601 + -0.804706 1.91816 -1.76949 -0.561861 -0.120121 0.818464 + -0.821388 1.92561 -1.78316 -0.789027 -0.0112169 0.614255 + -0.829458 1.93372 -1.79905 -0.936361 0.121828 0.32922 + -0.789766 1.98404 -1.74871 -0.561475 -0.147216 0.814293 + -0.801708 1.9894 -1.75827 -0.777055 -0.03013 0.628711 + -0.809777 1.99751 -1.77415 -0.934908 0.128643 0.330754 + -0.794748 2.05477 -1.74833 -0.945186 0.0750444 0.317791 + -0.777267 2.04384 -1.72806 -0.571272 -0.174297 0.80204 + -0.789209 2.04921 -1.73761 -0.787247 -0.069725 0.612683 + -0.779755 2.10356 -1.71724 -0.783138 -0.0685071 0.618063 + -0.785294 2.10913 -1.72796 -0.948193 0.0738797 0.308985 + -0.78617 2.11424 -1.73815 -0.973798 0.226272 -0.0227727 + -0.768143 2.0409 -1.72353 -0.332436 -0.23951 0.912207 + -0.763122 2.09719 -1.70674 -0.340436 -0.212928 0.915841 + -0.772245 2.10013 -1.71128 -0.573704 -0.159394 0.803404 + -0.766734 2.1336 -1.70203 -0.508138 0.111972 0.853966 + -0.774245 2.13703 -1.70799 -0.708054 0.190319 0.680028 + -0.757729 2.04002 -1.72191 0.178542 -0.291066 0.939895 + -0.757071 2.09656 -1.70567 0.150243 -0.246523 0.95742 + -0.75523 2.13133 -1.69808 0.152532 0.0355986 0.987657 + -0.761281 2.13195 -1.69915 -0.310536 0.0692003 0.948039 + -0.743801 2.09981 -1.71239 0.579289 -0.207903 0.788163 + -0.74713 2.13302 -1.70226 0.527554 0.0640502 0.847103 + -0.755835 2.14043 -1.70129 0.0990452 0.516459 0.850565 + -0.759235 2.14083 -1.70197 -0.171923 0.532972 0.828482 + -0.764689 2.14247 -1.70485 -0.328024 0.515329 0.79173 + -0.733132 2.13791 -1.7138 0.77269 0.169625 0.6117 + -0.739654 2.14489 -1.71206 0.539825 0.511604 0.668469 + -0.747735 2.14211 -1.70547 0.367001 0.499715 0.784598 + -0.754787 2.14898 -1.7107 0.0287611 0.813766 0.58048 + -0.735982 2.14919 -1.72174 0.660969 0.69888 0.273288 + -0.741885 2.15134 -1.71689 0.366379 0.80411 0.468159 + -0.749965 2.14857 -1.71031 0.121882 0.75127 0.648644 + -0.738873 2.15246 -1.72863 0.591972 0.802438 0.0752545 + -0.744775 2.15462 -1.72378 0.250857 0.930569 0.26667 + -0.747427 2.15531 -1.72503 0.102425 0.964875 0.241921 + -0.752249 2.15573 -1.72543 0.0567275 0.966348 0.250906 + -0.742707 2.15526 -1.73428 0.426068 0.902384 -0.0645667 + -0.751736 2.15664 -1.73613 0.064452 0.980341 -0.186489 + -0.758081 2.15687 -1.73569 -0.0867116 0.979051 -0.184228 + -0.758594 2.15595 -1.72499 0.0179766 0.970601 0.240022 + -0.760438 2.15313 -1.74346 -0.200144 0.761241 -0.616809 + -0.768046 2.15199 -1.74006 -0.515642 0.704922 -0.487029 + -0.765689 2.15572 -1.73229 -0.331076 0.93559 -0.122717 + -0.762939 2.15581 -1.72408 -0.0825165 0.974132 0.210374 + -0.758188 2.14939 -1.71139 0.0361829 0.838524 0.543662 + -0.773998 2.12286 -1.75831 -0.590362 0.494304 -0.638073 + -0.781665 2.11969 -1.75026 -0.844155 0.382533 -0.375594 + -0.775713 2.14882 -1.73203 -0.773952 0.592416 -0.2237 + -0.769972 2.15396 -1.7278 -0.517527 0.85566 0.00334636 + -0.778422 2.14553 -1.72462 -0.884606 0.458474 0.0852825 + -0.772681 2.15067 -1.72039 -0.6473 0.715473 0.262872 + -0.767222 2.15404 -1.71959 -0.264127 0.903473 0.337598 + -0.766757 2.15118 -1.71388 -0.249765 0.81174 0.527917 + -0.762532 2.14923 -1.71048 -0.0513883 0.783867 0.618798 + -0.777547 2.14042 -1.71443 -0.85531 0.30921 0.415733 + -0.772216 2.14781 -1.71469 -0.625173 0.616445 0.478701 + -0.768914 2.14442 -1.70824 -0.461629 0.545008 0.699903 + -0.896173 2.04571 -1.73124 0.852378 0.33821 -0.39883 + -0.902247 2.09678 -1.70099 0.853588 0.353568 -0.382593 + -0.898535 2.0911 -1.6897 0.982411 0.18483 -0.0265714 + -0.913905 2.10183 -1.71152 0.534685 0.493855 -0.685725 + -0.915885 2.1311 -1.69088 0.512512 0.679784 -0.524619 + -0.908567 2.12793 -1.68416 0.789026 0.558116 -0.256796 + -0.904856 2.12225 -1.67287 0.914534 0.39122 0.102834 + -0.928436 2.10401 -1.71672 0.17659 0.556279 -0.812016 + -0.930417 2.13328 -1.69608 0.143695 0.746448 -0.649743 + -0.928869 2.13787 -1.6866 0.130476 0.937204 -0.323457 + -0.920691 2.13664 -1.68365 0.369071 0.896298 -0.245837 + -0.913373 2.13348 -1.67694 0.594563 0.803065 0.0397582 + -0.944467 2.1036 -1.71668 -0.265249 0.55625 -0.787546 + -0.940495 2.13301 -1.69609 -0.238828 0.748553 -0.61857 + -0.938947 2.1376 -1.68661 -0.203807 0.950276 -0.235453 + -0.930782 2.13926 -1.67936 -0.00554265 0.994069 0.108607 + -0.922603 2.13803 -1.67642 0.21954 0.957616 0.18648 + -0.955045 2.10075 -1.71145 -0.603677 0.485447 -0.632388 + -0.951073 2.13016 -1.69085 -0.558143 0.689945 -0.460926 + -0.944925 2.13601 -1.68367 -0.388554 0.915155 -0.107322 + -0.93676 2.13768 -1.67643 -0.167905 0.95056 0.261235 + -0.920523 2.13485 -1.67008 0.222289 0.894467 0.387965 + -0.956856 2.1275 -1.68586 -0.747685 0.606096 -0.271319 + -0.950708 2.13335 -1.67869 -0.505349 0.861755 0.0447305 + -0.941192 2.13458 -1.67025 -0.18028 0.922367 0.34167 + -0.935932 2.13522 -1.67151 -0.00962236 0.895916 0.44412 + -0.960516 2.1238 -1.67797 -0.903379 0.365592 0.224163 + -0.952845 2.13125 -1.67428 -0.622023 0.705203 0.340259 + -0.943329 2.13249 -1.66584 -0.33745 0.772634 0.53774 + -0.933078 2.12816 -1.65663 -0.149264 0.699564 0.698806 + -0.928012 2.12912 -1.65881 0.066609 0.816345 0.573711 + -0.954746 2.11933 -1.66807 -0.752944 0.118138 0.647394 + -0.947075 2.12678 -1.66438 -0.588024 0.406755 0.699127 + -0.936824 2.12246 -1.65517 -0.45541 0.349474 0.818822 + -0.92593 2.12005 -1.65015 0.0135759 0.440806 0.897499 + -0.936793 2.11176 -1.65195 -0.528903 0.0184661 0.848481 + -0.925899 2.10935 -1.64693 -0.0298801 -0.00698216 0.999529 + -0.916837 2.11094 -1.65066 0.515214 0.0619137 0.854822 + -0.920864 2.121 -1.65233 0.34043 0.495817 0.79892 + -0.922753 2.12975 -1.66006 0.159706 0.786187 0.596996 + -0.919695 2.13239 -1.66517 0.249706 0.844514 0.473754 + -0.911034 2.11345 -1.65579 0.719545 0.133633 0.681467 + -0.915061 2.12352 -1.65745 0.509886 0.52847 0.678775 + -0.912004 2.12616 -1.66256 0.611037 0.59839 0.518231 + -0.911292 2.13029 -1.6706 0.652367 0.709064 0.267667 + -0.905567 2.11812 -1.66483 0.875649 0.252918 0.411426 + 1.04961 1.36119 -2.08699 -0.131768 -0.902901 -0.409154 + 1.04271 1.37679 -2.1176 -0.250658 -0.939358 -0.234046 + 1.08487 1.3765 -2.12848 0.533065 -0.771504 -0.347309 + 0.976448 1.39491 -2.1025 -0.287715 -0.931588 -0.222181 + 1.03001 1.38062 -2.12265 -0.242302 -0.967651 0.0702951 + 1.06181 1.37216 -2.13123 -0.22663 -0.973001 0.0436826 + 1.07451 1.36833 -2.12618 0.16456 -0.954374 -0.249179 + 1.09355 1.37119 -2.09712 0.46366 -0.80056 -0.379636 + 1.05697 1.33738 -2.04067 -0.0863122 -0.907604 -0.410859 + 0.995344 1.34393 -2.00981 -0.275708 -0.879949 -0.386879 + 0.983343 1.37932 -2.07189 -0.295348 -0.865756 -0.404025 + 1.1117 1.39962 -2.10918 0.894676 -0.351076 -0.276225 + 1.10092 1.34738 -2.0508 0.601411 -0.777036 -0.185796 + 1.05999 1.32342 -2.00723 0.20829 -0.974853 0.0792307 + 0.998363 1.32996 -1.97637 -0.128317 -0.9871 -0.0957466 + 0.961258 1.34933 -1.99936 -0.052712 -0.881542 -0.469153 + 1.10301 1.40494 -2.14053 0.848584 -0.463426 -0.255227 + 1.12189 1.4465 -2.09138 0.981421 -0.174417 -0.0799454 + 1.12052 1.38342 -2.03799 0.931466 -0.358136 0.0641006 + 1.10104 1.3795 -1.98664 0.776029 -0.415731 0.474285 + 1.08144 1.34347 -1.99944 0.627897 -0.648194 0.430801 + 1.08236 1.37812 -2.13585 0.564459 -0.731405 -0.382665 + 1.078 1.38547 -2.16349 0.54335 -0.80397 -0.241668 + 1.09865 1.4123 -2.16816 0.835809 -0.506503 -0.211843 + 1.1238 1.4619 -2.14593 0.95782 -0.27263 -0.0908475 + 1.072 1.36994 -2.13355 0.190886 -0.904042 -0.382455 + 1.03997 1.37308 -2.15319 0.0163271 -0.999835 0.00795208 + 1.05482 1.38207 -2.20798 0.451542 -0.858432 -0.243319 + 1.0973 1.42511 -2.21268 0.803472 -0.541293 -0.24786 + 1.12245 1.47471 -2.19044 0.935144 -0.336898 -0.10957 + 1.02978 1.37531 -2.15087 -0.183818 -0.967505 0.173624 + 1.01679 1.36969 -2.19769 -0.00580261 -0.991659 -0.128757 + 1.04752 1.38995 -2.23971 0.323173 -0.811759 -0.486421 + 1.09001 1.43298 -2.24439 0.74219 -0.521644 -0.420764 + 1.11068 1.47223 -2.24293 0.844709 -0.298068 -0.444548 + 1.01155 1.38294 -2.1313 -0.197945 -0.957816 0.208344 + 0.958305 1.38611 -2.16114 -0.236594 -0.966147 0.102877 + 0.928203 1.39501 -2.17716 -0.334852 -0.935599 -0.111925 + 0.986688 1.37858 -2.21372 -0.246594 -0.923243 -0.294642 + 1.0136 1.39205 -2.2446 -0.0996887 -0.773555 -0.62584 + 0.973508 1.39608 -2.10977 -0.238834 -0.96828 0.0734327 + 0.955048 1.39841 -2.11842 -0.172716 -0.955008 0.241098 + 0.940077 1.39375 -2.14157 -0.191601 -0.966244 0.172228 + 0.903603 1.40282 -2.17041 -0.0885365 -0.967359 -0.237438 + 0.920522 1.4091 -2.21389 -0.378917 -0.845978 -0.375157 + 0.943567 1.40308 -2.09509 -0.0862686 -0.945055 -0.315323 + 0.940627 1.40425 -2.10236 -0.0119251 -0.999809 0.0154635 + 0.930671 1.40194 -2.11612 0.0881901 -0.988164 0.125516 + 0.915701 1.39729 -2.13927 0.0471119 -0.998054 -0.0408384 + 0.949257 1.38472 -2.06144 -0.055475 -0.878471 -0.474565 + 0.941563 1.38446 -2.06353 0.387593 -0.780663 -0.490242 + 0.935873 1.40281 -2.09718 0.418348 -0.846774 -0.32857 + 0.925917 1.4005 -2.11096 0.473359 -0.856025 -0.207731 + 0.95376 1.34832 -1.99973 0.326307 -0.834517 -0.443965 + 0.926763 1.33242 -2.00984 0.502812 -0.809181 -0.303985 + 0.914566 1.36855 -2.07365 0.611121 -0.669775 -0.421821 + 0.903042 1.38081 -2.11155 0.647879 -0.671728 -0.359214 + 0.961228 1.33076 -1.96753 -0.231518 -0.965319 -0.120657 + 0.954216 1.33504 -1.9559 0.0567867 -0.973061 0.223446 + 0.922622 1.32598 -1.96426 0.265338 -0.949518 0.167367 + 0.869015 1.31044 -2.04502 0.203827 -0.946168 -0.251438 + 0.968726 1.33177 -1.96715 0.0193318 -0.990625 -0.135232 + 0.969109 1.33213 -1.96502 0.0525341 -0.955666 0.289728 + 0.962097 1.33641 -1.9534 0.105094 -0.897294 0.428742 + 0.940689 1.34888 -1.92073 0.130125 -0.851872 0.507328 + 0.909096 1.33982 -1.92908 0.149481 -0.834531 0.530296 + 0.998746 1.33032 -1.97424 -0.00829376 -0.962241 0.272072 + 0.970212 1.3437 -1.94403 0.089345 -0.898757 0.429248 + 0.948804 1.35617 -1.91136 0.175166 -0.708052 0.68409 + 0.893374 1.36083 -1.90056 0.0448855 -0.599964 0.798767 + 0.864716 1.32173 -1.94058 0.0047596 -0.896294 0.443434 + 1.02149 1.3301 -1.97289 0.187403 -0.875971 0.444471 + 0.992956 1.34349 -1.94269 0.16134 -0.821775 0.546494 + 0.960983 1.37358 -1.90222 0.191438 -0.565118 0.802492 + 0.905553 1.37825 -1.89143 0.0205218 -0.444223 0.895681 + 0.848994 1.34274 -1.91206 -0.123856 -0.657224 0.743449 + 1.04294 1.35016 -1.9651 0.438506 -0.631287 0.639679 + 1.00874 1.35683 -1.93603 0.364965 -0.651724 0.664873 + 0.976767 1.38693 -1.89556 0.215561 -0.517039 0.828374 + 0.955031 1.42883 -1.87211 0.152066 -0.332594 0.93073 + 1.04907 1.39376 -1.9313 0.520519 -0.487289 0.701148 + 1.01487 1.40043 -1.90222 0.450038 -0.412157 0.792208 + 0.993137 1.44233 -1.87877 0.29903 -0.286766 0.910135 + 1.09989 1.41162 -1.9656 0.717945 -0.359919 0.595829 + 1.04792 1.42587 -1.91027 0.446156 -0.373659 0.813218 + 1.00553 1.4729 -1.87392 0.392448 -0.225212 0.891776 + 0.921796 1.52442 -1.84221 0.0999696 -0.232572 0.967428 + 1.13071 1.43029 -2.0202 0.989073 -0.102223 0.106236 + 1.11441 1.4261 -1.97307 0.825519 -0.358387 0.435977 + 1.05085 1.45934 -1.90621 0.593301 -0.167812 0.787295 + 1.00846 1.50637 -1.86986 0.580374 -0.226143 0.782321 + 1.12231 1.48799 -1.98729 0.967294 -0.0513573 0.248405 + 1.106 1.4838 -1.94016 0.818237 -0.0995733 0.566192 + 1.06537 1.47382 -1.91368 0.574682 -0.272768 0.771582 + 1.04694 1.51267 -1.8849 0.47682 -0.326702 0.816032 + 0.997493 1.55542 -1.847 0.271337 -0.334732 0.902403 + 1.13649 1.51456 -2.04099 0.983587 -0.142519 0.110659 + 1.12764 1.56808 -1.99769 0.952457 -0.0314376 0.303048 + 1.11346 1.54151 -1.94398 0.897598 -0.00508183 0.440786 + 1.08758 1.52264 -1.91138 0.716932 -0.166609 0.676941 + 1.03598 1.56173 -1.86204 0.467024 -0.312896 0.827034 + 1.1384 1.52996 -2.09554 0.985516 -0.168419 0.0198111 + 1.14059 1.60047 -2.03354 0.976671 -0.0318639 0.212362 + 1.11401 1.61167 -1.94958 0.891091 -0.0355853 0.452428 + 1.08501 1.58649 -1.90741 0.824324 -0.00211003 0.566115 + 1.05913 1.56764 -1.87481 0.663177 -0.174442 0.727851 + 1.1412 1.532 -2.156 0.970231 -0.241954 0.0105141 + 1.14887 1.58865 -2.13019 0.997047 -0.071887 0.0270195 + 1.14607 1.58662 -2.06973 0.984424 -0.110699 0.136586 + 1.14066 1.67979 -2.04604 0.965172 0.162581 0.204963 + 1.12697 1.64406 -1.98544 0.933678 0.097892 0.344475 + 1.12601 1.49299 -2.22076 0.922224 -0.292944 -0.252363 + 1.14477 1.55028 -2.18632 0.982319 -0.180492 -0.0497236 + 1.14975 1.61081 -2.15505 0.999523 -0.0288958 0.0108836 + 1.14614 1.66593 -2.08223 0.991982 0.0749081 0.101791 + 1.14556 1.56771 -2.21169 0.899218 0.0634379 -0.432878 + 1.15054 1.62825 -2.18043 0.941677 0.144045 -0.30413 + 1.14702 1.68809 -2.10709 0.987258 0.107658 0.117178 + 1.12907 1.73891 -2.06777 0.877959 0.386478 0.282528 + 1.12418 1.7134 -2.0251 0.855721 0.369959 0.361762 + 1.13023 1.54695 -2.23386 0.737889 0.0181865 -0.674677 + 1.13472 1.63559 -2.19829 0.534063 0.397288 -0.746284 + 1.14784 1.70525 -2.13236 0.930519 0.309847 -0.195269 + 1.12989 1.75606 -2.09305 0.79998 0.599973 0.00799541 + 1.08355 1.46722 -2.27512 0.49076 -0.106603 -0.864749 + 1.0787 1.49585 -2.27286 0.228593 0.23567 -0.944566 + 1.12538 1.57558 -2.23162 0.527381 0.300771 -0.794611 + 1.06288 1.42796 -2.27657 0.387442 -0.455687 -0.801398 + 1.02895 1.43006 -2.28148 -0.0718649 -0.335529 -0.939285 + 1.03233 1.48352 -2.27793 -0.0574481 0.196585 -0.978802 + 1.09129 1.58679 -2.23392 0.0858916 0.436199 -0.895742 + 1.10063 1.64679 -2.2006 0.157825 0.492696 -0.85577 + 0.954314 1.44138 -2.26401 -0.264294 -0.290317 -0.919709 + 0.95769 1.49484 -2.26045 -0.220935 0.189697 -0.956662 + 0.983508 1.56755 -2.24452 -0.125779 0.370253 -0.920376 + 1.04491 1.57445 -2.23899 0.0250319 0.401769 -0.915399 + 0.986422 1.38955 -2.23237 -0.266731 -0.759487 -0.593324 + 0.927139 1.43888 -2.25177 -0.278707 -0.624851 -0.729304 + 0.902475 1.44951 -2.25152 -0.307582 -0.287589 -0.90702 + 0.886486 1.45631 -2.24676 -0.451423 -0.138814 -0.881446 + 0.899092 1.49376 -2.24544 -0.364987 0.230434 -0.902045 + 0.920256 1.42007 -2.23255 -0.331344 -0.728773 -0.599251 + 0.895592 1.4307 -2.23229 -0.261028 -0.749166 -0.608781 + 0.887581 1.43198 -2.23119 -0.350441 -0.71197 -0.608514 + 0.895922 1.41692 -2.20714 -0.271922 -0.878812 -0.392106 + 0.887911 1.4182 -2.20603 -0.0235074 -0.849692 -0.526755 + 0.871592 1.43878 -2.22644 -0.360939 -0.50584 -0.783485 + 0.848608 1.46705 -2.22149 -0.631461 0.0930117 -0.769809 + 0.861214 1.50451 -2.22016 -0.501608 0.260556 -0.824924 + 0.896651 1.40107 -2.16767 0.250692 -0.885279 -0.391707 + 0.87123 1.41119 -2.20415 0.132127 -0.714936 -0.686592 + 0.848054 1.43546 -2.2199 -0.426623 -0.310922 -0.849306 + 0.828642 1.45837 -2.20087 -0.697863 -0.0299321 -0.715606 + 0.908748 1.39554 -2.13654 0.451296 -0.861089 -0.234217 + 0.885873 1.37584 -2.13714 0.60735 -0.672591 -0.422785 + 0.87997 1.39407 -2.16579 0.433408 -0.748956 -0.50122 + 0.849827 1.37393 -2.17447 0.00936951 -0.75254 -0.65848 + 0.847692 1.40788 -2.19762 -0.303254 -0.567248 -0.765681 + 0.855708 1.33141 -2.11817 0.165908 -0.852228 -0.496168 + 0.85573 1.3557 -2.14582 0.178927 -0.766808 -0.616433 + 0.867232 1.31915 -2.08026 0.304715 -0.901031 -0.308695 + 0.805212 1.33538 -2.08529 -0.534241 -0.772149 -0.344053 + 0.820131 1.35095 -2.12545 -0.514085 -0.672283 -0.532684 + 0.820154 1.37524 -2.1531 -0.597739 -0.559523 -0.574145 + 0.830224 1.39283 -2.17614 -0.624861 -0.447197 -0.639971 + 0.806994 1.32668 -2.05006 -0.452102 -0.873865 -0.178784 + 0.734565 1.38336 -2.02192 -0.851573 -0.466162 -0.239826 + 0.762071 1.40805 -2.09246 -0.841218 -0.317852 -0.437405 + 0.77699 1.42361 -2.13262 -0.786059 -0.231106 -0.573325 + 0.812106 1.3154 -2.0035 -0.407687 -0.912606 0.0306993 + 0.739676 1.37208 -1.97537 -0.764618 -0.62717 0.148381 + 0.710452 1.44335 -1.94262 -0.930888 -0.275506 0.239881 + 0.710439 1.46348 -1.99338 -0.975935 -0.0621682 -0.209013 + 0.737945 1.48817 -2.06393 -0.919145 0.0581182 -0.389608 + 0.864873 1.304 -1.99944 0.0540454 -0.997151 0.0526146 + 0.811948 1.33311 -1.94464 -0.373796 -0.826429 0.42106 + 0.768371 1.36311 -1.93854 -0.56393 -0.669294 0.483765 + 0.739147 1.43438 -1.90578 -0.620506 -0.418801 0.663007 + 0.805417 1.37274 -1.90596 -0.306034 -0.517645 0.798991 + 0.797364 1.42541 -1.88466 -0.231579 -0.402922 0.885452 + 0.742741 1.5156 -1.86294 -0.617854 -0.326273 0.715403 + 0.710269 1.54832 -1.89964 -0.953683 -0.108947 0.280392 + 0.710255 1.56845 -1.95041 -0.975956 0.087641 -0.199573 + 0.897501 1.43092 -1.87013 -0.0429599 -0.343876 0.938032 + 0.864266 1.5265 -1.84023 0.0512776 -0.341215 0.938586 + 0.800958 1.50662 -1.84181 -0.11434 -0.430144 0.89549 + 0.787413 1.572 -1.81563 -0.202424 -0.344449 0.916722 + 0.743671 1.58188 -1.83554 -0.64638 -0.260911 0.71702 + 0.934186 1.55499 -1.83735 0.12861 -0.315775 0.940077 + 0.85072 1.59187 -1.81405 0.0914737 -0.395346 0.913966 + 0.842039 1.62036 -1.79979 0.0335323 -0.298541 0.953808 + 0.785535 1.61948 -1.80175 -0.237605 -0.245062 0.939941 + 0.741793 1.62937 -1.82166 -0.661079 -0.167372 0.73141 + 0.976505 1.59867 -1.82601 0.176379 -0.430619 0.885131 + 0.913198 1.59822 -1.81636 0.0915963 -0.421893 0.902007 + 0.904516 1.62672 -1.80212 0.0674758 -0.330093 0.941534 + 0.887647 1.66415 -1.79206 0.0163266 -0.114962 0.993236 + 0.837177 1.66114 -1.7921 -0.0135795 -0.0687643 0.99754 + 1.01603 1.59645 -1.83673 0.396192 -0.345262 0.85078 + 0.960783 1.62859 -1.80535 0.20275 -0.281948 0.937762 + 0.943913 1.66603 -1.7953 0.244554 -0.072172 0.966946 + 1.03918 1.60236 -1.84948 0.639783 -0.108202 0.760901 + 1.00031 1.62638 -1.81606 0.432675 -0.148971 0.889157 + 0.988692 1.68218 -1.81608 0.529352 0.130746 0.838267 + 0.914365 1.71912 -1.78871 0.175173 -0.0901935 0.980398 + 1.05772 1.62163 -1.86933 0.754501 0.0404257 0.655053 + 1.01885 1.64567 -1.83592 0.672378 0.124962 0.729584 + 1.03131 1.70976 -1.86119 0.706374 0.254549 0.660485 + 1.00313 1.75498 -1.85138 0.738261 0.158549 0.655617 + 0.959144 1.73527 -1.80948 0.549438 0.0376273 0.834686 + 1.08672 1.64681 -1.9115 0.833922 0.118009 0.539118 + 1.06147 1.67324 -1.88104 0.762678 0.199765 0.615156 + 1.08523 1.7041 -1.93404 0.82692 0.346528 0.442856 + 1.05901 1.73045 -1.90908 0.797211 0.368281 0.478356 + 1.11048 1.67767 -1.96451 0.866277 0.271214 0.419533 + 1.09218 1.73874 -1.99404 0.794826 0.475509 0.377017 + 1.06596 1.7651 -1.96907 0.7875 0.507225 0.350095 + 1.04769 1.78159 -1.95457 0.851349 0.423118 0.310122 + 1.03082 1.77568 -1.89927 0.858434 0.286772 0.425268 + 1.09708 1.76425 -2.0367 0.761803 0.548151 0.345234 + 1.06837 1.78834 -2.0124 0.769436 0.550463 0.323972 + 1.0501 1.80483 -1.99789 0.825668 0.496217 0.268407 + 1.03028 1.81533 -1.93018 0.91773 0.353515 0.181102 + 1.01341 1.80942 -1.87489 0.90755 0.0206805 0.419434 + 1.09549 1.77946 -2.06302 0.672094 0.735425 0.0862512 + 1.06679 1.80356 -2.03872 0.710694 0.694644 0.111284 + 1.03766 1.83134 -2.0135 0.796052 0.605024 -0.0157297 + 1.01403 1.8742 -1.9934 0.858363 0.456876 -0.233403 + 1.02647 1.84769 -1.9778 0.86251 0.431032 0.265119 + 1.11124 1.76217 -2.11859 0.467288 0.724432 -0.506793 + 1.07684 1.78557 -2.08856 0.512797 0.833744 -0.204717 + 1.04531 1.81879 -2.05957 0.567436 0.796265 -0.209709 + 1.01618 1.84657 -2.03436 0.58554 0.706496 -0.397501 + 0.995883 1.8882 -2.01106 0.664036 0.489033 -0.5656 + 1.13202 1.7126 -2.15023 0.51832 0.538245 -0.664558 + 1.07481 1.74248 -2.14068 0.188278 0.55397 -0.810968 + 1.04216 1.79953 -2.11292 0.33298 0.722024 -0.606469 + 1.01063 1.83274 -2.08394 0.384714 0.821899 -0.420092 + 0.978204 1.85524 -2.05445 0.38405 0.755937 -0.530155 + 1.09559 1.6929 -2.17231 0.161811 0.538864 -0.826706 + 1.03252 1.73344 -2.15652 0.10317 0.497943 -0.861051 + 0.999865 1.7905 -2.12876 0.133453 0.56295 -0.815646 + 0.972288 1.8385 -2.09677 0.188299 0.754744 -0.628415 + 1.0558 1.63596 -2.21233 0.0817682 0.450228 -0.889162 + 1.05076 1.68208 -2.18405 0.0516619 0.509271 -0.859054 + 0.980605 1.70774 -2.17046 -0.107032 0.418275 -0.901992 + 0.953246 1.792 -2.13158 -0.0773757 0.468702 -0.879961 + 0.925669 1.84 -2.09959 -0.0907293 0.658803 -0.746825 + 0.994392 1.62906 -2.21786 -0.128752 0.49772 -0.857728 + 0.998842 1.65637 -2.198 -0.141639 0.527294 -0.837794 + 0.917688 1.70239 -2.15691 -0.311428 0.330996 -0.89076 + 0.890328 1.78665 -2.11804 -0.289286 0.384223 -0.876748 + 0.870971 1.82926 -2.08941 -0.321082 0.546554 -0.773424 + 0.916339 1.61308 -2.20198 -0.392093 0.504401 -0.769313 + 0.92079 1.6404 -2.18212 -0.35224 0.456584 -0.816981 + 0.828512 1.71502 -2.10984 -0.526938 0.193591 -0.827562 + 0.810585 1.76854 -2.09241 -0.507016 0.231429 -0.830286 + 0.791228 1.81115 -2.06378 -0.527558 0.582797 -0.618086 + 0.924909 1.56648 -2.22949 -0.332458 0.377131 -0.864433 + 0.841764 1.57271 -2.17745 -0.527686 0.378091 -0.760654 + 0.831614 1.65302 -2.13505 -0.520594 0.319383 -0.791818 + 0.776665 1.70487 -2.06958 -0.815377 0.0302016 -0.578142 + 0.850334 1.5261 -2.20495 -0.490665 0.347792 -0.79893 + 0.813156 1.51146 -2.18697 -0.696756 0.253608 -0.670979 + 0.799498 1.56287 -2.14471 -0.777025 0.258523 -0.573933 + 0.789347 1.64319 -2.10231 -0.814045 0.161517 -0.557891 + 0.824036 1.48986 -2.20217 -0.588341 0.0462795 -0.807288 + 0.805101 1.4887 -2.1814 -0.831474 -0.0140934 -0.555385 + 0.791442 1.54012 -2.13914 -0.864894 0.196373 -0.461948 + 0.772155 1.63086 -2.05582 -0.87607 0.108306 -0.469863 + 0.759473 1.69255 -2.0231 -0.920174 -0.0291921 -0.39042 + 0.809707 1.45721 -2.1801 -0.819657 -0.154198 -0.551712 + 0.782071 1.50568 -2.13663 -0.831698 0.136923 -0.538081 + 0.762784 1.59643 -2.05332 -0.880222 0.198039 -0.431266 + 0.828088 1.42677 -2.19929 -0.716303 -0.313041 -0.623631 + 0.799637 1.43961 -2.15706 -0.77218 -0.162138 -0.614368 + 0.759425 1.48967 -2.11219 -0.851914 0.0911327 -0.515691 + 0.741304 1.59492 -2.00506 -0.900082 0.175812 -0.398675 + 0.739236 1.6697 -1.97481 -0.907583 0.0297168 -0.41882 + 0.749453 1.73526 -2.01205 -0.93301 -0.0940985 -0.34733 + 0.758738 1.75839 -2.05214 -0.818666 0.0477827 -0.572279 + 0.708187 1.64323 -1.92017 -0.978804 0.0175715 -0.204042 + 0.705916 1.68333 -1.91339 -0.980359 -0.00673064 -0.197104 + 0.729217 1.71242 -1.96378 -0.913426 -0.00944856 -0.406895 + 0.727109 1.75134 -1.95088 -0.94254 0.10088 -0.318499 + 0.739652 1.76789 -1.98901 -0.963745 0.00697495 -0.266732 + 0.711199 1.61461 -1.87225 -0.941705 -0.118846 0.314748 + 0.708928 1.65471 -1.86548 -0.946007 -0.052359 0.319889 + 0.711709 1.70214 -1.8583 -0.917127 0.0404303 0.396538 + 0.703809 1.72224 -1.90049 -0.994198 0.0904608 -0.0582032 + 0.744575 1.67681 -1.81449 -0.666117 -0.0195497 0.745591 + 0.751963 1.73191 -1.81056 -0.668395 -0.0232224 0.743444 + 0.721226 1.75027 -1.85204 -0.902406 0.0478873 0.428218 + 0.713326 1.77037 -1.89423 -0.990421 0.124422 -0.0598802 + 0.780673 1.66025 -1.79405 -0.271075 -0.10147 0.957195 + 0.788062 1.71535 -1.79012 -0.200506 -0.0641711 0.977588 + 0.783995 1.77461 -1.7851 -0.236756 -0.118803 0.964278 + 0.75628 1.78762 -1.79999 -0.674165 -0.0951991 0.73242 + 0.819622 1.69804 -1.79435 0.0485028 0.00473611 0.998812 + 0.815555 1.75729 -1.78932 0.309013 -0.0623261 0.949013 + 0.800585 1.84202 -1.77801 0.32229 -0.117136 0.939366 + 0.783561 1.84073 -1.77594 -0.198504 -0.174913 0.964366 + 0.755847 1.85374 -1.79084 -0.630083 -0.210916 0.747335 + 0.870092 1.70105 -1.79431 -0.0810427 -0.0310603 0.996226 + 0.833175 1.76433 -1.79935 0.249001 0.177868 0.95203 + 0.818206 1.84905 -1.78803 0.614126 -0.0835115 0.784777 + 0.804706 1.91816 -1.76949 0.563755 -0.114943 0.817905 + 0.790659 1.91362 -1.76293 0.305111 -0.187189 0.933739 + 0.906958 1.77198 -1.77752 0.215707 -0.280146 0.935408 + 0.862685 1.75391 -1.78312 -0.354468 -0.168924 0.919683 + 0.847077 1.76163 -1.79512 -0.356989 0.598706 0.717015 + 0.855159 1.79369 -1.81726 -0.736962 0.546199 0.398187 + 0.841258 1.79639 -1.82149 0.550371 0.433013 0.713856 + 0.94324 1.78657 -1.79155 0.579369 -0.218619 0.785198 + 0.909069 1.83044 -1.75378 0.0654777 -0.338629 0.938639 + 0.890218 1.83336 -1.76077 -0.505792 -0.156398 0.84836 + 0.87461 1.84108 -1.77277 -0.753847 -0.0273371 0.656481 + 0.864252 1.84981 -1.79008 -0.96432 0.122361 0.234765 + 0.987221 1.80629 -1.83345 0.787426 -0.129193 0.602719 + 0.977649 1.85867 -1.79678 0.77756 -0.252236 0.576001 + 0.94535 1.84504 -1.7678 0.594435 -0.340595 0.728452 + 0.942573 1.90333 -1.73659 0.577675 -0.358421 0.733366 + 0.919433 1.89794 -1.72668 0.0523185 -0.405825 0.912452 + 1.00384 1.8618 -1.83821 0.936587 -0.00700767 0.350366 + 0.986619 1.92615 -1.78642 0.989079 0.060796 0.134264 + 0.974871 1.91696 -1.76556 0.807561 -0.248096 0.535064 + 1.02479 1.83536 -1.92346 0.800739 0.551633 -0.233494 + 0.998351 1.88183 -1.83149 0.930695 0.362723 -0.0473265 + 1.01408 1.83106 -1.94101 0.502432 0.86199 0.0673412 + 0.991474 1.88956 -1.84808 0.718025 0.624288 -0.307741 + 0.979742 1.93388 -1.803 0.830766 0.42629 -0.357918 + 1.01479 1.84131 -1.96075 0.549778 0.561393 0.618532 + 0.972088 1.84258 -1.91983 0.128016 0.976777 -0.171811 + 0.980764 1.88526 -1.86563 0.414956 0.735274 -0.535895 + 0.967479 1.93991 -1.81463 0.59376 0.557094 -0.580599 + 0.976704 1.99065 -1.76489 0.840678 0.332292 -0.427601 + 0.981995 1.92345 -1.94256 0.777505 0.0759679 0.624272 + 0.964709 1.91481 -1.92212 0.564554 -0.0897525 0.820502 + 0.972792 1.85284 -1.93957 0.443915 0.344486 0.827205 + 0.993675 1.92983 -1.9596 0.906861 0.197278 0.372404 + 0.967909 1.99389 -1.92317 0.830085 -0.0334193 0.556634 + 0.950622 1.98525 -1.90273 0.608777 -0.137099 0.781405 + 0.929628 1.91428 -1.90729 0.198376 -0.21833 0.955499 + 0.937711 1.85232 -1.92473 0.283853 0.429933 0.857079 + 0.993954 1.93544 -1.97227 0.919246 0.34275 -0.193675 + 0.976243 2.00544 -1.95092 0.96373 0.224933 -0.143631 + 0.975963 1.99982 -1.93825 0.953762 0.0821907 0.289106 + 0.96098 2.05958 -1.90185 0.84267 -0.0909533 0.530693 + 0.975807 1.94944 -1.98993 0.778914 0.357394 -0.515327 + 0.967668 2.01288 -1.9665 0.837103 0.28847 -0.464805 + 0.969269 2.06972 -1.92641 0.970206 0.185074 -0.156359 + 0.969034 2.06551 -1.91693 0.965329 0.022023 0.260104 + 0.956808 1.9592 -2.01208 0.564425 0.333935 -0.754925 + 0.948669 2.02264 -1.98866 0.600319 0.349677 -0.719266 + 0.945246 2.08526 -1.96032 0.608493 0.386501 -0.693075 + 0.960694 2.07717 -1.94198 0.843505 0.293524 -0.449826 + 0.957905 1.89687 -2.03116 0.416051 0.439163 -0.796265 + 0.926026 1.90248 -2.04141 0.186541 0.442705 -0.877049 + 0.924929 1.9648 -2.02233 0.131254 0.330282 -0.934712 + 0.925222 2.02636 -1.99782 0.158286 0.393945 -0.905402 + 0.939863 1.861 -2.06729 0.172178 0.727475 -0.66418 + 0.889381 1.90294 -2.04387 -0.129103 0.42459 -0.896134 + 0.892353 1.96327 -2.02012 -0.187615 0.373806 -0.908333 + 0.892646 2.02482 -1.99562 -0.314878 0.374548 -0.872104 + 0.903219 1.86146 -2.06977 -0.122963 0.636648 -0.761288 + 0.85084 1.88291 -2.04043 -0.376885 0.418507 -0.826323 + 0.853812 1.94323 -2.01666 -0.459155 0.420616 -0.78247 + 0.87111 2.01902 -1.98352 -0.695745 0.350758 -0.626823 + 0.895326 2.08771 -1.96769 -0.30918 0.433095 -0.846662 + 0.848521 1.85072 -2.05959 -0.405127 0.522966 -0.749919 + 0.788611 1.85201 -2.0186 -0.64903 0.450425 -0.613088 + 0.784655 1.86838 -2.00259 -0.876543 0.418205 -0.23828 + 0.849856 1.95961 -2.00064 -0.754811 0.451659 -0.475673 + 0.786292 1.81982 -2.03777 -0.580243 0.61506 -0.533873 + 0.744001 1.79968 -2.00307 -0.912313 0.24411 -0.328778 + 0.743814 1.83743 -1.97241 -0.794396 0.460891 -0.395619 + 0.761862 1.84348 -1.975 -0.25849 0.922216 -0.287577 + 0.778005 1.84923 -1.98921 -0.610409 0.790295 0.0532384 + 0.748937 1.79101 -2.02909 -0.846565 0.317533 -0.427201 + 0.736555 1.80077 -1.96229 -0.965925 0.131235 -0.223082 + 0.736368 1.83852 -1.93163 -0.9573 0.158464 -0.241797 + 0.724012 1.78422 -1.92417 -0.953863 0.142895 -0.264056 + 0.726314 1.83497 -1.90204 -0.947127 0.159876 -0.27819 + 0.736551 1.89566 -1.90307 -0.792095 0.360144 -0.492831 + 0.749461 1.89927 -1.91012 -0.414055 0.60128 -0.683389 + 0.76751 1.90531 -1.91271 -0.0971631 0.622788 -0.776334 + 0.715627 1.82111 -1.87211 -0.998546 0.0534961 -0.00655442 + 0.717133 1.8795 -1.84616 -0.999897 0.0132344 -0.00559226 + 0.726497 1.89212 -1.87348 -0.948664 0.136484 -0.285321 + 0.725891 1.95057 -1.84504 -0.917238 0.176364 -0.35717 + 0.735433 1.95672 -1.86013 -0.714273 0.360113 -0.600111 + 0.725543 1.80598 -1.84147 -0.894003 -0.068371 0.442813 + 0.727049 1.86436 -1.81551 -0.846168 -0.192158 0.497066 + 0.725019 1.92805 -1.79507 -0.844133 -0.209695 0.493424 + 0.716527 1.93795 -1.81772 -0.999717 -0.0202522 0.0124381 + 0.753817 1.91743 -1.77039 -0.580353 -0.285006 0.762864 + 0.745486 1.98371 -1.75005 -0.58294 -0.296831 0.756355 + 0.723834 1.99148 -1.76811 -0.833189 -0.214658 0.509626 + 0.715341 2.00138 -1.79076 -0.999973 0.00719864 -0.00103465 + 0.773635 1.91234 -1.76087 -0.187794 -0.274986 0.94293 + 0.765304 1.97862 -1.74053 -0.161586 -0.306435 0.938076 + 0.757729 2.04002 -1.72191 -0.177307 -0.289303 0.940673 + 0.744459 2.04328 -1.72861 -0.581416 -0.257542 0.771769 + 0.722807 2.05105 -1.74667 -0.837077 -0.159195 0.523411 + 0.775719 1.9795 -1.74215 0.316008 -0.231557 0.920065 + 0.768143 2.0409 -1.72353 0.331014 -0.238025 0.913112 + 0.763122 2.09719 -1.70674 0.339834 -0.214049 0.915804 + 0.757071 2.09656 -1.70567 -0.149467 -0.247627 0.957257 + 0.743801 2.09981 -1.71239 -0.579808 -0.208486 0.787627 + 0.789766 1.98404 -1.74871 0.561519 -0.147349 0.814238 + 0.777267 2.04384 -1.72806 0.571743 -0.172917 0.802004 + 0.772245 2.10013 -1.71128 0.573608 -0.159297 0.803491 + 0.761281 2.13195 -1.69915 0.309632 0.0701278 0.948267 + 0.75523 2.13133 -1.69808 -0.151824 0.0365892 0.98773 + 0.801708 1.9894 -1.75827 0.777185 -0.029527 0.628579 + 0.789209 2.04921 -1.73761 0.787039 -0.0694886 0.612977 + 0.779755 2.10356 -1.71724 0.783201 -0.0682216 0.618015 + 0.766734 2.1336 -1.70203 0.508286 0.112287 0.853837 + 0.759235 2.14083 -1.70197 0.177648 0.542294 0.821193 + 0.821388 1.92561 -1.78316 0.78452 -0.00693025 0.620065 + 0.829458 1.93372 -1.79905 0.936034 0.129826 0.327087 + 0.809777 1.99751 -1.77415 0.934855 0.128683 0.330889 + 0.794748 2.05477 -1.74833 0.945182 0.075546 0.317685 + 0.834888 1.8565 -1.80171 0.816972 -0.0563333 0.573919 + 0.844166 1.87442 -1.82561 0.957298 0.0828217 0.276984 + 0.831377 1.94503 -1.82226 0.959814 0.280534 -0.0075723 + 0.811196 2.00563 -1.79054 0.958774 0.284147 0.0036961 + 0.796166 2.06289 -1.76471 0.971383 0.235931 -0.027415 + 0.850536 1.81431 -1.84539 0.611634 0.551724 0.567013 + 0.859635 1.83394 -1.87879 0.567337 0.754982 0.328832 + 0.846085 1.88573 -1.84883 0.967324 0.253153 -0.01407 + 0.824707 1.95308 -1.84008 0.83936 0.422156 -0.34243 + 0.858926 1.81218 -1.84164 -0.660746 0.680623 0.316491 + 0.868025 1.83181 -1.87504 -0.478892 0.86608 0.143415 + 0.890865 1.84138 -1.89545 -0.279342 0.95786 -0.0668777 + 0.860255 1.8495 -1.91568 -0.240463 0.636096 0.733185 + 0.849933 1.84528 -1.90432 0.446095 0.89494 0.00901771 + 0.868018 1.8683 -1.81446 -0.971487 0.2145 -0.10101 + 0.875236 1.87903 -1.83599 -0.851069 0.377747 -0.364676 + 0.898077 1.8886 -1.8564 -0.523654 0.560859 -0.641267 + 0.877244 1.91512 -1.76182 -0.957147 -0.00180678 0.289598 + 0.875799 1.92392 -1.77936 -0.98671 0.157721 -0.0390768 + 0.883017 1.93465 -1.80089 -0.847461 0.360132 -0.390018 + 0.898595 1.94146 -1.81495 -0.543497 0.515266 -0.662655 + 0.925232 1.8928 -1.86607 -0.25583 0.616446 -0.744678 + 0.887602 1.90638 -1.74452 -0.786311 -0.163794 0.595724 + 0.893341 1.96685 -1.71412 -0.790203 -0.200638 0.579071 + 0.885018 1.97388 -1.72792 -0.953747 -0.0384268 0.298145 + 0.883573 1.98269 -1.74545 -0.987445 0.152247 -0.0421075 + 0.900583 1.90086 -1.73367 -0.53599 -0.290869 0.792534 + 0.906322 1.96132 -1.70327 -0.543394 -0.31746 0.777137 + 0.90932 2.01941 -1.6791 -0.550898 -0.262686 0.792153 + 0.899932 2.02347 -1.68723 -0.788573 -0.16142 0.593377 + 0.891609 2.03049 -1.70102 -0.951993 -0.0156148 0.305721 + 0.92051 1.959 -1.69764 0.0210432 -0.40515 0.914008 + 0.923508 2.01709 -1.67346 0.0357212 -0.342055 0.939001 + 0.923574 2.07421 -1.65581 0.0142829 -0.270472 0.962622 + 0.914512 2.0758 -1.65953 -0.549411 -0.200134 0.81123 + 0.905124 2.07985 -1.66766 -0.786453 -0.108989 0.607959 + 0.943649 1.96439 -1.70755 0.580547 -0.338264 0.740637 + 0.940755 2.02107 -1.68121 0.577304 -0.281991 0.76629 + 0.94082 2.07818 -1.66356 0.583681 -0.222137 0.781007 + 0.925899 2.10935 -1.64693 0.029823 -0.00713463 0.99953 + 0.916837 2.11094 -1.65066 -0.515326 0.0618104 0.854763 + 0.970475 1.97571 -1.73163 0.803525 -0.235237 0.546819 + 0.967581 2.03238 -1.70531 0.801857 -0.182254 0.569042 + 0.958773 2.08575 -1.67969 0.792263 -0.132821 0.595549 + 0.954746 2.11933 -1.66807 0.753159 0.117968 0.647174 + 0.936793 2.11176 -1.65195 0.529231 0.0192267 0.84826 + 0.982223 1.9849 -1.75249 0.996304 0.0460889 0.0724849 + 0.976628 2.03938 -1.72072 0.9914 0.0774988 0.105446 + 0.967821 2.09275 -1.6951 0.984288 0.139482 0.108269 + 0.960516 2.1238 -1.67797 0.903246 0.36591 0.224178 + 0.971109 2.04514 -1.73312 0.833021 0.349648 -0.428745 + 0.964161 2.09645 -1.70299 0.825535 0.386871 -0.41088 + 0.956856 2.1275 -1.68586 0.747496 0.605392 -0.273407 + 0.950708 2.13335 -1.67869 0.498957 0.865425 0.045627 + 0.952845 2.13125 -1.67428 0.622953 0.705195 0.33857 + 0.961994 2.04944 -1.74159 0.612238 0.457524 -0.644854 + 0.955045 2.10075 -1.71145 0.604372 0.486384 -0.631003 + 0.951073 2.13016 -1.69085 0.559774 0.688294 -0.461416 + 0.944925 2.13601 -1.68367 0.388572 0.916539 -0.094704 + 0.941192 2.13458 -1.67025 0.182079 0.925098 0.333228 + 0.964441 1.99668 -1.77653 0.613458 0.459099 -0.642572 + 0.94588 2.05369 -1.74957 0.258464 0.539225 -0.801519 + 0.944467 2.1036 -1.71668 0.265112 0.556414 -0.787476 + 0.940495 2.13301 -1.69609 0.238927 0.748629 -0.61844 + 0.938947 2.1376 -1.68661 0.204473 0.950056 -0.235765 + 0.948327 2.00093 -1.78451 0.263794 0.550583 -0.792004 + 0.926855 2.00147 -1.78457 -0.173881 0.56434 -0.807022 + 0.929849 2.05409 -1.74962 -0.168649 0.54576 -0.820795 + 0.928436 2.10401 -1.71672 -0.176536 0.556341 -0.811985 + 0.930417 2.13328 -1.69608 -0.143699 0.746423 -0.649771 + 0.947222 1.9451 -1.82456 0.241432 0.632124 -0.736295 + 0.92575 1.94566 -1.82462 -0.184273 0.60462 -0.774905 + 0.904837 1.99813 -1.77673 -0.537046 0.499979 -0.679414 + 0.907831 2.05075 -1.74177 -0.544256 0.480037 -0.688004 + 0.913905 2.10183 -1.71152 -0.534856 0.494059 -0.685445 + 0.960507 1.89046 -1.87556 0.165345 0.686349 -0.708227 + 0.936812 1.84492 -1.91034 -0.0543891 0.98242 -0.178588 + 0.891764 1.84878 -1.90985 0.0324371 0.55205 0.83318 + 0.899833 1.91406 -1.90688 -0.0479227 -0.162398 0.985561 + 0.868325 1.91479 -1.91271 -0.443809 -0.0519622 0.894614 + 0.853887 1.91951 -1.92509 -0.676503 0.0106423 0.736363 + 0.828463 1.85617 -1.9411 -0.456195 0.637005 0.621378 + 0.929162 1.98119 -1.89321 0.230535 -0.217435 0.94846 + 0.899367 1.98098 -1.89281 -0.126952 -0.218565 0.967529 + 0.879269 1.98287 -1.89829 -0.478062 -0.15888 0.863837 + 0.864832 1.98759 -1.91067 -0.75344 -0.0640075 0.654394 + 0.832983 1.92248 -1.94618 -0.810904 0.1688 0.560304 + 0.925454 2.04843 -1.87543 0.224618 -0.259326 0.939306 + 0.901027 2.04832 -1.87518 -0.132784 -0.270145 0.953619 + 0.880929 2.05021 -1.88067 -0.495057 -0.224936 0.839239 + 0.946914 2.05248 -1.88496 0.630728 -0.180969 0.754608 + 0.940668 2.11102 -1.86436 0.628021 -0.206684 0.750247 + 0.924527 2.10799 -1.85717 0.233477 -0.298934 0.925271 + 0.9001 2.10789 -1.85691 -0.138219 -0.312687 0.939746 + 0.954734 2.11813 -1.88125 0.843894 -0.0968828 0.527689 + 0.944789 2.16896 -1.85581 0.837255 -0.0691901 0.542417 + 0.935579 2.16434 -1.84469 0.631484 -0.184358 0.753153 + 0.919437 2.16131 -1.8375 0.220317 -0.289643 0.931433 + 0.960792 2.12263 -1.8924 0.961567 0.0367741 0.272098 + 0.950847 2.17345 -1.86696 0.952334 0.078585 0.294762 + 0.941871 2.20398 -1.85051 0.864669 0.319585 0.387574 + 0.938143 2.20116 -1.84379 0.770907 0.198926 0.605087 + 0.928933 2.19654 -1.83267 0.570529 0.0865833 0.816701 + 0.961027 2.12683 -1.90189 0.961423 0.236467 -0.140529 + 0.951062 2.17602 -1.8729 0.952518 0.289049 -0.0957081 + 0.942085 2.20654 -1.85644 0.861593 0.507321 0.0168428 + 0.933964 2.21393 -1.85105 0.553784 0.802768 0.221106 + 0.933822 2.2126 -1.84796 0.568285 0.691198 0.446428 + 0.954621 2.13217 -1.91341 0.83602 0.359056 -0.414908 + 0.944656 2.18136 -1.88442 0.823919 0.424527 -0.375412 + 0.938168 2.20966 -1.86371 0.752221 0.617217 -0.230665 + 0.930047 2.21705 -1.85831 0.501655 0.863752 0.0476899 + 0.919546 2.21771 -1.84761 0.17016 0.908978 0.380533 + 0.939173 2.14027 -1.93175 0.596336 0.471743 -0.649493 + 0.934578 2.18666 -1.89663 0.600289 0.538164 -0.591635 + 0.92809 2.21496 -1.87591 0.530881 0.721187 -0.445033 + 0.92459 2.21998 -1.86504 0.399588 0.909732 -0.112772 + 0.919726 2.21994 -1.85279 0.230901 0.918102 0.322139 + 0.921589 2.14313 -1.93873 0.160283 0.547275 -0.821462 + 0.916994 2.18952 -1.9036 0.145744 0.624578 -0.767242 + 0.917186 2.21677 -1.88024 0.148921 0.790319 -0.594321 + 0.913686 2.22178 -1.86936 0.0757486 0.95921 -0.272357 + 0.91427 2.22287 -1.85953 0.0940792 0.987495 0.1265 + 0.921799 2.08898 -1.96949 0.152714 0.451574 -0.879067 + 0.895116 2.14186 -1.93694 -0.317397 0.524734 -0.789881 + 0.899644 2.1887 -1.90242 -0.303831 0.602517 -0.73801 + 0.899835 2.21595 -1.87905 -0.299331 0.768468 -0.56556 + 0.904212 2.22133 -1.86872 -0.199345 0.946212 -0.254843 + 0.878996 2.13748 -1.92777 -0.715695 0.412176 -0.563818 + 0.883524 2.18432 -1.89326 -0.720061 0.473578 -0.507184 + 0.889857 2.21324 -1.87334 -0.648738 0.665584 -0.368968 + 0.894234 2.21862 -1.86301 -0.493346 0.868025 -0.0560627 + 0.904796 2.22242 -1.85888 -0.166693 0.975492 0.143627 + 0.873791 2.08192 -1.9556 -0.726092 0.332862 -0.601659 + 0.867014 2.12826 -1.90784 -0.927344 0.263403 -0.265803 + 0.875746 2.17829 -1.88002 -0.916976 0.323491 -0.233472 + 0.882079 2.20722 -1.8601 -0.844685 0.526049 -0.098896 + 0.890047 2.21531 -1.85573 -0.58156 0.804469 0.120906 + 0.861808 2.0727 -1.93566 -0.931239 0.210147 -0.29771 + 0.863574 2.12212 -1.8939 -0.991948 0.11335 0.056486 + 0.872306 2.17216 -1.86609 -0.983111 0.156341 0.0951378 + 0.879976 2.2035 -1.85141 -0.900921 0.392675 0.184789 + 0.887945 2.21159 -1.84705 -0.607071 0.725596 0.323999 + 0.856278 2.00783 -1.95922 -0.92024 0.289877 -0.262926 + 0.851627 1.99948 -1.94063 -0.979133 0.181526 0.0913567 + 0.857158 2.06436 -1.91706 -0.995731 0.0790079 0.0477189 + 0.860908 2.05907 -1.90378 -0.918356 -0.0549317 0.391925 + 0.867324 2.11682 -1.88062 -0.916341 -0.0511572 0.397118 + 0.835023 1.94841 -1.97634 -0.889433 0.443063 -0.112271 + 0.828373 1.92925 -1.96297 -0.891338 0.365361 0.268382 + 0.856237 1.99271 -1.92384 -0.900809 0.0466987 0.431696 + 0.869502 2.05395 -1.89061 -0.772457 -0.142099 0.618966 + 0.87367 2.11305 -1.87094 -0.775228 -0.154306 0.612545 + 0.874821 2.1688 -1.85752 -0.909935 -0.0128292 0.414553 + 0.807559 1.85914 -1.96219 -0.577743 0.604271 0.548698 + 0.818141 1.85194 -1.92974 0.302951 0.921965 -0.241248 + 0.836383 1.89708 -1.87436 0.831891 0.401223 -0.383376 + 0.791416 1.85339 -1.94798 0.123175 0.915019 -0.384146 + 0.818952 1.90443 -1.89258 0.632706 0.468125 -0.61688 + 0.807276 1.96045 -1.8583 0.58967 0.526938 -0.612067 + 0.792228 1.90588 -1.91082 0.284287 0.566471 -0.773493 + 0.789008 1.96341 -1.86688 0.25191 0.581649 -0.773451 + 0.792203 2.0188 -1.82125 0.585316 0.521297 -0.62101 + 0.804526 2.01368 -1.80835 0.832291 0.42969 -0.350226 + 0.76429 1.96284 -1.86876 -0.0581199 0.570618 -0.819156 + 0.756103 2.02117 -1.83105 -0.0623032 0.532735 -0.843986 + 0.773934 2.02176 -1.82983 0.232007 0.554454 -0.799221 + 0.766856 2.07537 -1.79551 0.234987 0.542396 -0.80659 + 0.779339 2.07346 -1.78972 0.581655 0.492699 -0.647245 + 0.748343 1.96032 -1.86717 -0.351489 0.51174 -0.783949 + 0.740157 2.01864 -1.82947 -0.34869 0.478313 -0.805998 + 0.738398 2.07332 -1.79576 -0.3372 0.500836 -0.797157 + 0.749025 2.07478 -1.79672 -0.0584302 0.537012 -0.841548 + 0.732204 2.0165 -1.82526 -0.708769 0.340289 -0.61794 + 0.730445 2.07118 -1.79156 -0.711328 0.378164 -0.592456 + 0.734966 2.1216 -1.76153 -0.69487 0.436483 -0.571522 + 0.739627 2.12288 -1.76388 -0.33169 0.539084 -0.774189 + 0.750255 2.12433 -1.76486 -0.0566549 0.562851 -0.824615 + 0.722661 2.01034 -1.81018 -0.909772 0.188637 -0.369772 + 0.724157 2.0669 -1.78166 -0.905764 0.242222 -0.347735 + 0.728679 2.11732 -1.75165 -0.897377 0.302976 -0.320811 + 0.73814 2.15072 -1.74126 -0.643105 0.654374 -0.397757 + 0.742801 2.152 -1.74362 -0.30661 0.74703 -0.589861 + 0.716837 2.05794 -1.76226 -0.997465 0.0599044 0.0384125 + 0.723833 2.11158 -1.73951 -0.989987 0.132896 0.0475782 + 0.72946 2.1422 -1.72349 -0.910106 0.37306 0.18037 + 0.734305 2.14794 -1.73562 -0.819941 0.542475 -0.182804 + 0.742707 2.15526 -1.73428 -0.426477 0.902393 -0.0616823 + 0.729803 2.1047 -1.72392 -0.820825 -0.109767 0.560533 + 0.733132 2.13791 -1.7138 -0.772121 0.169991 0.612318 + 0.735982 2.14919 -1.72174 -0.659354 0.699094 0.276622 + 0.738873 2.15246 -1.72863 -0.589454 0.80434 0.0747119 + 0.74713 2.13302 -1.70226 -0.527838 0.0644643 0.846895 + 0.747735 2.14211 -1.70547 -0.393081 0.478583 0.78514 + 0.739654 2.14489 -1.71206 -0.539771 0.510412 0.669423 + 0.741885 2.15134 -1.71689 -0.36697 0.80375 0.468315 + 0.744775 2.15462 -1.72378 -0.252655 0.930683 0.264564 + 0.755835 2.14043 -1.70129 -0.0906096 0.506884 0.857238 + 0.749965 2.14857 -1.71031 -0.15674 0.777761 0.608704 + 0.747427 2.15531 -1.72503 -0.100544 0.965803 0.238989 + 0.745359 2.15596 -1.73553 -0.209376 0.964792 -0.159177 + 0.749178 2.1527 -1.74422 -0.0701187 0.767268 -0.637482 + 0.754787 2.14898 -1.7107 -0.00569586 0.830362 0.557195 + 0.752249 2.15573 -1.72543 -0.0574738 0.966419 0.250462 + 0.751736 2.15664 -1.73613 -0.0661334 0.980626 -0.184387 + 0.760438 2.15313 -1.74346 0.20133 0.760372 -0.617495 + 0.761515 2.12477 -1.7641 0.228157 0.559199 -0.79702 + 0.758188 2.14939 -1.71139 -0.0235534 0.830253 0.556888 + 0.758594 2.15595 -1.72499 -0.0195186 0.970111 0.241873 + 0.758081 2.15687 -1.73569 0.0870593 0.979106 -0.183771 + 0.768046 2.15199 -1.74006 0.515266 0.704438 -0.488126 + 0.773998 2.12286 -1.75831 0.589916 0.494925 -0.638003 + 0.764689 2.14247 -1.70485 0.298738 0.537768 0.788392 + 0.762532 2.14923 -1.71048 0.0175476 0.755446 0.654976 + 0.762939 2.15581 -1.72408 0.0822876 0.974278 0.209788 + 0.765689 2.15572 -1.73229 0.331157 0.93556 -0.12273 + 0.768914 2.14442 -1.70824 0.461596 0.544316 0.700464 + 0.766757 2.15118 -1.71388 0.255066 0.808469 0.530396 + 0.767222 2.15404 -1.71959 0.269103 0.903174 0.334457 + 0.769972 2.15396 -1.7278 0.517533 0.855657 0.00326413 + 0.775713 2.14882 -1.73203 0.773721 0.592705 -0.223731 + 0.774245 2.13703 -1.70799 0.707927 0.19039 0.68014 + 0.777547 2.14042 -1.71443 0.855317 0.309276 0.415669 + 0.772216 2.14781 -1.71469 0.625895 0.616268 0.477985 + 0.772681 2.15067 -1.72039 0.647825 0.714857 0.263253 + 0.785294 2.10913 -1.72796 0.948142 0.0739607 0.309122 + 0.78617 2.11424 -1.73815 0.973838 0.226102 -0.0227383 + 0.778422 2.14553 -1.72462 0.884421 0.458702 0.0859739 + 0.791662 2.06835 -1.77682 0.846224 0.384069 -0.369317 + 0.781665 2.11969 -1.75026 0.844128 0.382453 -0.375736 + 0.885096 2.10931 -1.861 -0.492323 -0.25735 0.831498 + 0.881167 2.16503 -1.84784 -0.768296 -0.127721 0.627223 + 0.882491 2.20014 -1.84284 -0.83509 0.247449 0.491319 + 0.888481 2.16268 -1.84146 -0.49489 -0.237045 0.835998 + 0.886392 2.19788 -1.83688 -0.716074 0.154806 0.680641 + 0.889338 2.20981 -1.84245 -0.564553 0.650166 0.508492 + 0.900429 2.21687 -1.84642 -0.227003 0.894601 0.384914 + 0.903484 2.16126 -1.83738 -0.131675 -0.301653 0.944281 + 0.902948 2.19464 -1.82803 -0.136214 -0.00892645 0.990639 + 0.893706 2.19554 -1.83051 -0.451247 0.0485204 0.891079 + 0.89714 2.20628 -1.83307 -0.35182 0.48497 0.800642 + 0.893239 2.20754 -1.8365 -0.497469 0.577537 0.647283 + 0.918901 2.19468 -1.82816 0.222272 0.00112368 0.974984 + 0.915071 2.20537 -1.83064 0.14154 0.377498 0.915129 + 0.906382 2.20538 -1.83059 -0.0896858 0.381444 0.920031 + 0.925103 2.20724 -1.83516 0.448575 0.487065 0.749366 + 0.915728 2.21235 -1.83474 0.140901 0.72642 0.672653 + 0.907039 2.21236 -1.8347 -0.0912971 0.754418 0.650014 + 0.903138 2.21362 -1.83813 -0.218948 0.843849 0.489879 + 0.901823 2.2151 -1.84183 -0.204192 0.882249 0.424197 + 0.930094 2.20979 -1.84125 0.546616 0.568964 0.614403 + 0.920719 2.2149 -1.84083 0.242641 0.857192 0.454254 + 0.919404 2.21638 -1.84453 0.135654 0.921799 0.363159 + 0.900609 2.2191 -1.8516 -0.248187 0.91117 0.328896 + 0.889259 1.99131 -1.76266 -0.85481 0.344293 -0.388281 + 0.896173 2.04571 -1.73124 -0.852418 0.338285 -0.39868 + 0.902247 2.09678 -1.70099 -0.85347 0.353831 -0.382613 + 0.890487 2.03708 -1.71403 -0.98762 0.153378 -0.0328996 + 0.898535 2.0911 -1.6897 -0.982408 0.184851 -0.0265324 + 0.904856 2.12225 -1.67287 -0.914644 0.390943 0.102908 + 0.908567 2.12793 -1.68416 -0.78897 0.557867 -0.25751 + 0.915885 2.1311 -1.69088 -0.512878 0.679409 -0.524748 + 0.899657 2.08452 -1.67669 -0.944725 0.0221626 0.327113 + 0.905567 2.11812 -1.66483 -0.875972 0.252655 0.410899 + 0.912004 2.12616 -1.66256 -0.610862 0.59892 0.517825 + 0.911292 2.13029 -1.6706 -0.652341 0.709068 0.267719 + 0.913373 2.13348 -1.67694 -0.594521 0.803097 0.0397485 + 0.911034 2.11345 -1.65579 -0.71961 0.134254 0.681276 + 0.915061 2.12352 -1.65745 -0.509172 0.528733 0.679106 + 0.922753 2.12975 -1.66006 -0.159706 0.786187 0.596996 + 0.919695 2.13239 -1.66517 -0.249706 0.844514 0.473754 + 0.920523 2.13485 -1.67008 -0.222632 0.89424 0.38829 + 0.920864 2.121 -1.65233 -0.341149 0.497431 0.797609 + 0.928012 2.12912 -1.65881 -0.0659301 0.816484 0.573592 + 0.935932 2.13522 -1.67151 0.00962237 0.895916 0.44412 + 0.93676 2.13768 -1.67643 0.179858 0.948193 0.261878 + 0.922603 2.13803 -1.67642 -0.222073 0.957394 0.184606 + 0.92593 2.12005 -1.65015 -0.0114474 0.442266 0.896811 + 0.933078 2.12816 -1.65663 0.149333 0.700705 0.697648 + 0.943329 2.13249 -1.66584 0.335832 0.77314 0.538026 + 0.936824 2.12246 -1.65517 0.455469 0.349439 0.818804 + 0.947075 2.12678 -1.66438 0.588022 0.406693 0.699164 + 0.930782 2.13926 -1.67936 0.00629828 0.994425 0.105257 + 0.920691 2.13664 -1.68365 -0.368899 0.896251 -0.246268 + 0.928869 2.13787 -1.6866 -0.13089 0.93705 -0.323736 + 0 1.98306 -3.19152 -0.99528 -0.010888 0.0964296 + 0 1.9393 -3.21829 -0.940716 -0.259577 0.218341 + 0.011183 1.96532 -3.12314 -0.905221 -0.310724 0.289873 + 0.016252 1.92627 -3.17244 -0.857915 -0.416422 0.300957 + 0.025806 1.96262 -3.09556 -0.724444 -0.507575 0.466421 + 0.041291 1.9961 -3.05045 -0.764239 -0.356634 0.537355 + 0.011183 2.00908 -3.09637 -0.939303 -0.144079 0.311371 + 0.011587 2.07808 -3.08639 -0.980061 0.0792124 0.182224 + 0 2.00459 -3.23674 -0.973679 0.196861 -0.11487 + 0.016252 1.87696 -3.22971 -0.535559 -0.712149 0.453895 + 0.030875 1.92357 -3.14486 -0.461445 -0.77026 0.440191 + 0.066043 1.92622 -3.12427 -0.260557 -0.883968 0.388215 + 0.057187 1.95648 -3.06427 -0.507634 -0.703139 0.497899 + 0 1.88998 -3.27556 -0.875856 -0.426886 0.225044 + 0.026712 1.83793 -3.28811 -0.400048 -0.7914 0.46222 + 0.066636 1.89392 -3.21292 -0.0503872 -0.878531 0.475021 + 0.101804 1.89658 -3.19232 -0.126564 -0.917524 0.377002 + 0.120883 1.92386 -3.08813 -0.231901 -0.911108 0.340741 + 0.112028 1.95411 -3.02813 -0.359108 -0.787007 0.501659 + 0.026712 1.81199 -3.33312 -0.545924 -0.802074 0.242167 + 0.077097 1.85489 -3.27132 0.00157891 -0.826563 0.562842 + 0.120941 1.85754 -3.26589 -0.0603898 -0.839102 0.540611 + 0.122625 1.89529 -3.19047 -0.131006 -0.929045 0.345995 + 0 1.86404 -3.32057 -0.894591 -0.441082 0.0717885 + 0.033943 1.80588 -3.37903 -0.547599 -0.802874 -0.235647 + 0.083178 1.80368 -3.33461 -0.0615579 -0.92657 0.37105 + 0.127022 1.80633 -3.32918 -0.0079336 -0.904958 0.425426 + 0.141762 1.85626 -3.26403 -0.0875726 -0.841725 0.532757 + 0.149137 1.88864 -3.19486 -0.20373 -0.917412 0.341832 + 0.033943 1.8295 -3.41372 -0.500882 -0.310218 -0.808011 + 0.090409 1.79758 -3.38053 -0.08195 -0.966312 -0.243976 + 0.145802 1.79423 -3.3803 0.0072954 -0.980094 -0.198399 + 0.174726 1.80955 -3.3246 0.0311282 -0.915235 0.401715 + 0 1.88767 -3.35525 -0.96781 -0.142006 -0.207794 + 0.00609 1.89928 -3.38721 -0.721413 0.195641 -0.664295 + 0.049274 1.91604 -3.38694 -0.12575 0.450442 -0.883906 + 0.113252 1.82668 -3.4212 -0.0559755 -0.293479 -0.954325 + 0.168645 1.82333 -3.42097 0.0508069 -0.332007 -0.941908 + 0.193506 1.79745 -3.37572 0.0426891 -0.989388 -0.138884 + 0.00609 1.92264 -3.37029 -0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 -0.982417 0.118768 -0.144051 + 0.00609 1.93619 -3.35816 -0.981516 0.131151 -0.139377 + 0 1.92457 -3.32621 -0.981236 0.134574 -0.13808 + 0.00609 1.98847 -3.30463 -0.872749 0.354069 -0.336073 + 0 1.97685 -3.27268 -0.971776 0.195948 -0.13136 + 0.014034 2.05323 -3.24402 -0.843647 0.422991 -0.330663 + 0.036542 2.02576 -3.30766 -0.464882 0.588192 -0.661752 + 0.079725 2.04251 -3.30739 -0.194271 0.591029 -0.782907 + 0.128582 1.91321 -3.39442 -0.0139732 0.422247 -0.906373 + 0.014034 2.08098 -3.20808 -0.828285 0.472356 -0.301369 + 0.03972 2.11125 -3.19831 -0.630499 0.681409 -0.371689 + 0.044486 2.09052 -3.24705 -0.586181 0.630257 -0.509086 + 0.0805 2.12506 -3.23831 -0.419995 0.695904 -0.582513 + 0.136609 2.08013 -3.29146 -0.0614619 0.587716 -0.806729 + 0.011587 2.09962 -3.13161 -0.965461 0.260081 -0.0155791 + 0.023387 2.12143 -3.14955 -0.804061 0.549432 -0.227179 + 0.049073 2.1517 -3.13979 -0.614227 0.698253 -0.367652 + 0.075698 2.17553 -3.13363 -0.579977 0.716229 -0.388127 + 0.075734 2.14578 -3.18957 -0.59953 0.710085 -0.369247 + 0.037415 2.1504 -3.01405 -0.971596 0.0427349 0.232755 + 0.032105 2.15701 -3.05363 -0.966259 0.256482 0.0236783 + 0.043906 2.17882 -3.07158 -0.808726 0.533994 -0.246602 + 0.070733 2.20765 -3.06834 -0.58317 0.68184 -0.441595 + 0.097358 2.23148 -3.06218 -0.366643 0.790961 -0.489851 + 0.025536 2.06202 -3.04565 -0.906932 -0.11691 0.40473 + 0.051364 2.13434 -2.97331 -0.920072 -0.106101 0.377108 + 0.049685 2.20804 -2.96099 -0.976256 -0.0867732 0.198479 + 0.044375 2.21465 -3.00057 -0.9845 0.167476 -0.0520691 + 0.054531 2.22951 -3.02005 -0.785559 0.457976 -0.416119 + 0.055645 2.04904 -2.99974 -0.795289 -0.293652 0.530361 + 0.071744 2.11124 -2.94107 -0.816098 -0.270674 0.510607 + 0.081949 2.16734 -2.89318 -0.827892 -0.292275 0.478716 + 0.061569 2.19045 -2.92543 -0.923689 -0.18738 0.334195 + 0.048313 2.25119 -2.93151 -0.989208 -0.0356674 0.142113 + 0.080386 2.03729 -2.9747 -0.634606 -0.439718 0.63555 + 0.096485 2.0995 -2.91603 -0.5474 -0.489529 0.67876 + 0.102944 2.15383 -2.872 -0.574535 -0.483042 0.660742 + 0.082215 2.21407 -2.86212 -0.828354 -0.339528 0.44559 + 0.060198 2.2336 -2.89595 -0.923701 -0.222862 0.311625 + 0.072672 1.98996 -3.01916 -0.595095 -0.51768 0.614711 + 0.106336 2.03079 -2.95916 -0.425211 -0.539635 0.726629 + 0.119012 2.09512 -2.90956 -0.328898 -0.564679 0.756944 + 0.12547 2.14946 -2.86554 -0.317259 -0.597508 0.736431 + 0.098622 1.98346 -3.00363 -0.463877 -0.607233 0.645047 + 0.136479 2.02512 -2.9512 -0.311761 -0.53891 0.782547 + 0.149155 2.08945 -2.9016 -0.17283 -0.59087 0.788036 + 0.151331 2.14541 -2.85801 -0.195786 -0.639847 0.743144 + 0.122263 2.19353 -2.82877 -0.443179 -0.599339 0.666622 + 0.142878 1.95267 -3.0086 -0.270855 -0.804568 0.528496 + 0.129472 1.98201 -2.9841 -0.404392 -0.59007 0.698773 + 0.17514 2.01276 -2.94363 -0.165022 -0.532694 0.830063 + 0.182592 2.09 -2.89932 -0.0485238 -0.573594 0.817701 + 0.184768 2.14596 -2.85572 -0.0173365 -0.686329 0.727084 + 0.165125 1.94022 -3.02443 -0.0854405 -0.901983 0.423234 + 0.168133 1.96965 -2.97654 -0.132315 -0.700096 0.701682 + 0.20834 2.01122 -2.94405 0.088305 -0.57761 0.811523 + 0.215792 2.08846 -2.89973 0.123167 -0.550777 0.825515 + 0.147395 1.9172 -3.09252 -0.145158 -0.940262 0.307955 + 0.169656 1.91908 -3.08069 -0.0464452 -0.941227 0.334567 + 0.218463 1.93221 -3.04741 0.11532 -0.900849 0.418535 + 0.19038 1.9572 -2.99237 0.108938 -0.801353 0.588189 + 0.171053 1.8857 -3.18537 -0.182418 -0.926094 0.330263 + 0.193315 1.88757 -3.17354 -0.0469233 -0.936726 0.346904 + 0.222994 1.91107 -3.10367 0.0353866 -0.935889 0.350513 + 0.253433 1.93131 -3.06382 0.228484 -0.860089 0.456117 + 0.225351 1.9563 -3.00877 0.225062 -0.829787 0.510686 + 0.160705 1.86355 -3.24917 -0.156846 -0.878514 0.451235 + 0.182622 1.86061 -3.23967 -0.217331 -0.876959 0.428614 + 0.197347 1.8591 -3.23793 -0.0620503 -0.887299 0.457001 + 0.215573 1.88599 -3.1778 0.0195867 -0.932825 0.359796 + 0.193669 1.81684 -3.30973 -0.105814 -0.892904 0.437637 + 0.208394 1.81534 -3.30799 -0.10561 -0.894851 0.433692 + 0.219605 1.85752 -3.24219 -0.00433524 -0.875537 0.483132 + 0.248192 1.8816 -3.19291 0.0234285 -0.916136 0.400183 + 0.255613 1.90667 -3.11878 0.124299 -0.923002 0.364167 + 0.231561 1.80731 -3.31936 -0.058717 -0.932487 0.3564 + 0.242772 1.84949 -3.25356 -0.00824802 -0.863014 0.505113 + 0.272701 1.87554 -3.20482 -0.0106207 -0.898285 0.439285 + 0.285988 1.90476 -3.14008 0.233641 -0.858608 0.456294 + 0.283809 1.9294 -3.08511 0.452937 -0.767087 0.45434 + 0.235338 1.79851 -3.3656 0.090422 -0.988383 -0.122159 + 0.277517 1.8115 -3.30338 -0.0569388 -0.899895 0.432374 + 0.267281 1.84343 -3.26547 -0.0257778 -0.836133 0.547921 + 0.296138 1.86434 -3.22731 -0.0895534 -0.88083 0.464886 + 0.248572 1.81892 -3.40553 0.299515 -0.421536 -0.855919 + 0.281294 1.8027 -3.34962 0.216724 -0.970377 -0.106766 + 0.305358 1.81202 -3.29945 0.152238 -0.925993 0.345486 + 0.295121 1.84395 -3.26153 -0.101654 -0.821508 0.561062 + 0.206741 1.81786 -3.41565 0.143199 -0.441032 -0.885994 + 0.232151 1.89626 -3.39129 0.243695 0.511986 -0.823701 + 0.284143 1.82119 -3.39091 0.371882 -0.455109 -0.809061 + 0.31065 1.83131 -3.38534 0.511998 -0.299473 -0.805093 + 0.307801 1.81282 -3.34405 0.537248 -0.82021 -0.196521 + 0.194055 1.90173 -3.39661 0.12717 0.394011 -0.910266 + 0.267721 1.89853 -3.37668 0.307938 0.369786 -0.876603 + 0.310818 1.90591 -3.35837 0.334714 0.372684 -0.86549 + 0.327601 1.8476 -3.37092 0.758231 -0.144147 -0.635851 + 0.202082 2.06864 -3.29366 0.125529 0.556933 -0.821016 + 0.251458 2.05987 -3.28899 0.221157 0.542595 -0.810358 + 0.294555 2.06726 -3.27068 0.390434 0.56245 -0.728843 + 0.327769 1.9222 -3.34395 0.571264 0.376209 -0.729468 + 0.183074 2.18144 -3.21184 0.00165362 0.778244 -0.627959 + 0.23245 2.17267 -3.20717 0.232169 0.716735 -0.657562 + 0.267374 2.17265 -3.19234 0.426883 0.733695 -0.528642 + 0.293459 2.14228 -3.20248 0.625964 0.613739 -0.481138 + 0.329604 2.02374 -3.2783 0.659824 0.450233 -0.6016 + 0.137384 2.16267 -3.22238 -0.219062 0.743651 -0.63166 + 0.152461 2.19752 -3.16676 -0.210607 0.866301 -0.452954 + 0.197921 2.21078 -3.1575 0.0375035 0.889359 -0.455669 + 0.232845 2.21076 -3.14267 0.296118 0.873431 -0.386566 + 0.106772 2.17875 -3.1773 -0.427461 0.790057 -0.439417 + 0.106736 2.2085 -3.12135 -0.426032 0.811318 -0.400325 + 0.138848 2.22171 -3.11437 -0.234384 0.886546 -0.398873 + 0.184307 2.23498 -3.10511 -0.00357815 0.932072 -0.362256 + 0.120311 2.23474 -3.06283 -0.193911 0.860723 -0.470697 + 0.152423 2.24796 -3.05585 -0.14364 0.885115 -0.44265 + 0.181421 2.25134 -3.04883 0.0985539 0.90078 -0.422945 + 0.224477 2.24728 -3.03716 0.298593 0.866268 -0.400528 + 0.227363 2.23092 -3.09344 0.299926 0.908853 -0.28988 + 0.104256 2.26771 -3.01851 -0.22022 0.666688 -0.71206 + 0.127209 2.27097 -3.01915 -0.0826443 0.674335 -0.733786 + 0.154284 2.27313 -3.01843 0.01283 0.70368 -0.710401 + 0.183282 2.27651 -3.01141 0.176401 0.660773 -0.729563 + 0.219971 2.27262 -3.00065 0.356232 0.630064 -0.690013 + 0.081358 2.25834 -3.01682 -0.384387 0.596691 -0.704419 + 0.077574 2.29006 -2.99257 -0.298043 0.685559 -0.664213 + 0.100472 2.29943 -2.99426 -0.264599 0.717063 -0.644832 + 0.123349 2.30196 -2.99864 -0.127208 0.703607 -0.69911 + 0.150424 2.30412 -2.99792 0.00570241 0.713725 -0.700403 + 0.058636 2.28719 -2.9876 -0.646188 0.564057 -0.514082 + 0.070556 2.34854 -2.89817 -0.609092 0.714759 -0.343694 + 0.089494 2.35141 -2.90314 -0.22653 0.849564 -0.476367 + 0.107449 2.35357 -2.90688 -0.199395 0.858703 -0.472091 + 0.048481 2.27233 -2.96812 -0.968842 0.220467 -0.112871 + 0.062361 2.3388 -2.8813 -0.945728 0.322515 -0.0397923 + 0.096877 2.42714 -2.74869 -0.576003 0.758634 -0.304459 + 0.110532 2.42881 -2.75158 -0.19695 0.880716 -0.430755 + 0.128487 2.43097 -2.75532 -0.176351 0.883779 -0.433398 + 0.062194 2.31767 -2.84469 -0.986202 0.0171115 0.164661 + 0.088662 2.40411 -2.7088 -0.985079 0.0213175 0.170777 + 0.088682 2.4174 -2.73182 -0.942924 0.33246 -0.0190805 + 0.116132 2.49623 -2.61905 -0.572733 0.752949 -0.324105 + 0.071664 2.30111 -2.81601 -0.923915 -0.211881 0.318571 + 0.098132 2.38756 -2.68012 -0.907022 -0.257442 0.333218 + 0.110491 2.47681 -2.5854 -0.984614 -0.00297979 0.17472 + 0.110511 2.49009 -2.60842 -0.939902 0.339566 -0.0357608 + 0.093681 2.28158 -2.78219 -0.821189 -0.376285 0.429021 + 0.114185 2.37528 -2.65887 -0.79993 -0.415573 0.432911 + 0.133134 2.45403 -2.54596 -0.783163 -0.441784 0.437586 + 0.117082 2.4663 -2.56721 -0.903004 -0.268295 0.335562 + 0.127755 2.54203 -2.48539 -0.943685 0.184185 0.274834 + 0.103209 2.20056 -2.84094 -0.688975 -0.449882 0.56826 + 0.11137 2.27078 -2.76348 -0.679841 -0.514178 0.522912 + 0.131873 2.36449 -2.64017 -0.647215 -0.556778 0.520683 + 0.145322 2.44721 -2.53414 -0.630956 -0.575294 0.520511 + 0.144697 2.52364 -2.45353 -0.793994 -0.260526 0.549272 + 0.130423 2.26376 -2.75131 -0.499731 -0.633473 0.590746 + 0.145505 2.36013 -2.63263 -0.472907 -0.660406 0.583287 + 0.158954 2.44285 -2.52659 -0.456109 -0.67579 0.579027 + 0.165601 2.51404 -2.43691 -0.47646 -0.51462 0.712848 + 0.156885 2.51682 -2.44171 -0.645485 -0.408996 0.645036 + 0.148124 2.18949 -2.82124 -0.326076 -0.658011 0.678746 + 0.15082 2.25873 -2.74261 -0.380528 -0.689831 0.615899 + 0.165902 2.35511 -2.62392 -0.360201 -0.705527 0.610317 + 0.172947 2.43967 -2.52109 -0.346157 -0.717571 0.604373 + 0.176551 2.18416 -2.81201 -0.151618 -0.726648 0.670071 + 0.179248 2.2534 -2.73338 -0.201631 -0.738453 0.643454 + 0.186376 2.35171 -2.61803 -0.186437 -0.748343 0.636572 + 0.193421 2.43627 -2.5152 -0.182371 -0.756111 0.62852 + 0.212844 2.14683 -2.85505 0.133067 -0.672037 0.728463 + 0.204628 2.18504 -2.81134 0.101424 -0.746688 0.657396 + 0.203814 2.25251 -2.73182 0.0662125 -0.761723 0.64451 + 0.210942 2.35081 -2.61647 0.0537737 -0.765219 0.64152 + 0.234516 2.1519 -2.85829 0.446414 -0.60538 0.658961 + 0.233398 2.18826 -2.81693 0.416562 -0.681186 0.602048 + 0.232584 2.25573 -2.73741 0.42393 -0.691837 0.584503 + 0.231537 2.35273 -2.61976 0.408628 -0.700848 0.584667 + 0.237464 2.09352 -2.90297 0.444641 -0.484327 0.753473 + 0.272273 2.10669 -2.92795 0.629365 -0.397285 0.667881 + 0.263892 2.16543 -2.87623 0.65527 -0.474676 0.587625 + 0.262774 2.2018 -2.83487 0.719145 -0.515406 0.466033 + 0.259031 2.26576 -2.75796 0.721058 -0.526535 0.450373 + 0.247373 2.01184 -2.95231 0.403912 -0.497653 0.767591 + 0.282181 2.02501 -2.97729 0.736136 -0.348947 0.579949 + 0.306553 2.13106 -2.94589 0.810757 -0.307662 0.498014 + 0.298173 2.1898 -2.89418 0.778725 -0.264114 0.569061 + 0.295555 2.2233 -2.87989 0.864391 -0.287674 0.412397 + 0.221486 1.96884 -2.98288 -0.484795 -0.751198 0.447968 + 0.260519 1.96946 -2.99115 0.370745 -0.762606 0.530075 + 0.28828 1.97721 -3.01739 0.724165 -0.508492 0.465854 + 0.326429 2.04764 -3.04775 0.88662 -0.239082 0.395909 + 0.278599 1.9612 -3.03327 0.439232 -0.799267 0.410181 + 0.306359 1.96895 -3.05951 0.729328 -0.544323 0.414479 + 0.332527 1.99984 -3.08785 0.891649 -0.243803 0.381474 + 0.342936 2.07228 -3.07681 0.985922 0.0249179 0.165339 + 0.32306 2.1557 -2.97495 0.978776 -0.0177249 0.204163 + 0.282463 1.94866 -3.05916 0.509809 -0.707417 0.489547 + 0.318694 1.96196 -3.09111 0.760424 -0.483414 0.433666 + 0.344862 1.99285 -3.11945 0.916704 -0.145094 0.372292 + 0.352907 2.03101 -3.14275 0.982521 0.0985971 0.157897 + 0.320039 1.9427 -3.11706 0.694908 -0.56921 0.439435 + 0.351305 1.97457 -3.14482 0.919293 -0.236531 0.314569 + 0.35935 2.01272 -3.16812 0.993852 0.081452 0.0749959 + 0.340334 2.07758 -3.14371 0.946487 0.321179 -0.0317194 + 0.330363 2.11885 -3.07778 0.956347 0.284882 -0.0651359 + 0.309425 1.89356 -3.16257 0.302947 -0.791075 0.531436 + 0.326539 1.90949 -3.16483 0.727698 -0.514849 0.453195 + 0.357805 1.94136 -3.1926 0.940288 -0.249177 0.23188 + 0.361012 1.96411 -3.22222 0.998481 0.0372942 -0.040564 + 0.346668 2.05602 -3.20424 0.937829 0.30651 -0.162877 + 0.331928 1.85133 -3.23751 0.306091 -0.812713 0.495788 + 0.349042 1.86726 -3.23978 0.870889 -0.358238 0.336477 + 0.353513 1.88831 -3.25743 0.985139 -0.119263 0.123603 + 0.35672 1.91106 -3.28705 0.989724 0.0466327 -0.135173 + 0.348331 2.00741 -3.25833 0.903131 0.287127 -0.319236 + 0.330911 1.83094 -3.27173 0.358215 -0.823468 0.43998 + 0.350931 1.84522 -3.28997 0.890751 -0.450789 0.0578904 + 0.355402 1.86627 -3.30763 0.98249 -0.123401 -0.139594 + 0.346496 1.90587 -3.32399 0.883539 0.195579 -0.425567 + 0.340923 1.83189 -3.29333 0.699523 -0.713746 0.0351388 + 0.345178 1.86107 -3.34457 0.892365 -0.124907 -0.433685 + 0.31537 1.81296 -3.32104 0.457845 -0.885437 -0.0798701 + 0.33517 1.84774 -3.34792 0.779244 -0.574442 -0.25059 + 0.328509 2.09876 -3.2101 0.790439 0.512685 -0.335203 + 0.322175 2.12033 -3.14958 0.90517 0.399851 -0.144176 + 0.30984 2.1579 -3.14358 0.821859 0.504243 -0.265115 + 0.308809 2.18477 -3.07768 0.825271 0.541897 -0.158983 + 0.321143 2.14719 -3.08367 0.94544 0.31208 -0.0935356 + 0.283755 2.18828 -3.13344 0.564403 0.765534 -0.308881 + 0.278273 2.20844 -3.08421 0.523013 0.809301 -0.267374 + 0.301868 2.21323 -3.00943 0.788454 0.563203 -0.247271 + 0.313911 2.189 -3.00771 0.924042 0.360955 -0.125928 + 0.323131 2.16066 -3.00182 0.971173 0.237335 -0.0222277 + 0.271332 2.2369 -3.01597 0.497154 0.772586 -0.394903 + 0.293166 2.25013 -2.96776 0.722421 0.469087 -0.508001 + 0.305209 2.2259 -2.96604 0.910251 0.363985 -0.197375 + 0.312744 2.21232 -2.94996 0.968041 0.247167 -0.0424808 + 0.266826 2.26223 -2.97946 0.488189 0.561875 -0.667808 + 0.284352 2.27957 -2.96062 0.639842 0.501999 -0.581893 + 0.29339 2.27383 -2.95069 0.848913 0.409085 -0.334657 + 0.300925 2.26025 -2.93461 0.947726 0.279217 -0.154444 + 0.312674 2.20736 -2.92309 0.977756 0.00806135 0.209591 + 0.220585 2.29972 -2.98628 0.340832 0.629452 -0.6983 + 0.258012 2.29166 -2.97232 0.450733 0.571723 -0.685546 + 0.275893 2.33922 -2.88201 0.595605 0.697231 -0.398904 + 0.28493 2.33348 -2.87208 0.817844 0.51008 -0.266364 + 0.292781 2.32328 -2.85759 0.923464 0.348876 -0.159686 + 0.183897 2.30362 -2.99704 0.150005 0.66498 -0.731642 + 0.218494 2.35289 -2.90569 0.273723 0.833447 -0.480043 + 0.255921 2.34483 -2.89174 0.393057 0.795372 -0.4614 + 0.270638 2.41874 -2.73413 0.562921 0.735598 -0.376851 + 0.154514 2.35691 -2.91266 -0.0158405 0.873646 -0.486305 + 0.187987 2.3564 -2.91177 0.111028 0.86511 -0.48914 + 0.223585 2.42948 -2.75274 0.250266 0.858612 -0.447385 + 0.250666 2.42435 -2.74386 0.366872 0.824302 -0.431198 + 0.130326 2.3561 -2.91125 -0.121138 0.870615 -0.476818 + 0.169028 2.43334 -2.75942 -0.0153648 0.892081 -0.451615 + 0.193077 2.43299 -2.75882 0.107115 0.884647 -0.45379 + 0.199087 2.50094 -2.6272 0.103591 0.878641 -0.466111 + 0.220089 2.49869 -2.62331 0.242581 0.856881 -0.454872 + 0.14484 2.43253 -2.75802 -0.106327 0.890275 -0.442837 + 0.175038 2.50128 -2.6278 -0.0138048 0.884837 -0.465695 + 0.181559 2.5606 -2.51754 -0.0126555 0.928296 -0.371626 + 0.196999 2.56038 -2.51717 0.0930237 0.922967 -0.373468 + 0.218001 2.55814 -2.51328 0.228898 0.905491 -0.35734 + 0.142106 2.49922 -2.62423 -0.168129 0.876718 -0.450663 + 0.158459 2.50078 -2.62693 -0.104242 0.882604 -0.458414 + 0.16498 2.56009 -2.51667 -0.100165 0.926753 -0.362072 + 0.183906 2.58021 -2.44528 -0.0294621 0.993425 0.110624 + 0.199345 2.58 -2.44491 0.0828306 0.991592 0.0994189 + 0.129787 2.4979 -2.62194 -0.188868 0.874047 -0.447627 + 0.154506 2.55909 -2.51493 -0.155421 0.923938 -0.349547 + 0.173431 2.57921 -2.44353 -0.0786497 0.987 0.140158 + 0.16462 2.56961 -2.42691 -0.558005 0.570445 0.60268 + 0.133396 2.55673 -2.51085 -0.535557 0.814656 -0.222517 + 0.142187 2.55777 -2.51265 -0.171673 0.92269 -0.345211 + 0.16464 2.57817 -2.44174 -0.418282 0.882038 0.216908 + 0.127775 2.55059 -2.50022 -0.879124 0.471016 0.0726969 + 0.134346 2.53153 -2.4672 -0.892653 -0.089424 0.441785 + 0.174971 2.56172 -2.41324 -0.449944 0.386282 0.805194 + 0.196838 2.55676 -2.40464 -0.0523309 0.265583 0.962667 + 0.225304 2.56665 -2.42497 0.590286 0.572147 0.569395 + 0.220791 2.57447 -2.43529 0.403568 0.859036 0.314943 + 0.216786 2.57669 -2.43918 0.243009 0.959452 0.142824 + 0.183688 2.55895 -2.40844 -0.287777 0.310995 0.905796 + 0.192744 2.50868 -2.4276 -0.194902 -0.596464 0.778617 + 0.2096 2.50807 -2.42651 0.0609267 -0.5966 0.800222 + 0.21004 2.55797 -2.4067 0.321175 0.359835 0.875994 + 0.179594 2.51086 -2.4314 -0.360888 -0.562538 0.743849 + 0.210276 2.43566 -2.51411 0.0515216 -0.769203 0.636925 + 0.222802 2.50928 -2.42857 0.410237 -0.503183 0.7606 + 0.230871 2.43758 -2.5174 0.396325 -0.701317 0.592521 + 0.249046 2.4439 -2.53038 0.68725 -0.545273 0.479963 + 0.240977 2.5156 -2.44155 0.720232 -0.307771 0.621725 + 0.256241 2.52427 -2.45982 0.873291 -0.109277 0.474786 + 0.263116 2.53481 -2.47807 0.942119 0.269204 0.199852 + 0.257984 2.36276 -2.64031 0.700476 -0.545316 0.460395 + 0.272686 2.45737 -2.55869 0.88059 -0.32745 0.342545 + 0.281624 2.37623 -2.66861 0.880159 -0.35035 0.320274 + 0.291723 2.39286 -2.69742 0.996291 0.0757537 0.0407992 + 0.279561 2.46791 -2.57694 0.993548 0.0884857 0.0709342 + 0.258603 2.54263 -2.4884 0.828547 0.559805 -0.0113391 + 0.291812 2.28726 -2.80297 0.895909 -0.322015 0.306028 + 0.301912 2.30389 -2.83178 0.996739 0.0627705 0.0506977 + 0.284832 2.40503 -2.71352 0.910551 0.381245 -0.159843 + 0.27267 2.48008 -2.59304 0.895134 0.419879 -0.14979 + 0.310056 2.24086 -2.9088 0.997111 0.056401 0.0508826 + 0.276981 2.41524 -2.72802 0.795297 0.548125 -0.258963 + 0.267232 2.48651 -2.60215 0.779501 0.573323 -0.252347 + 0.260889 2.49002 -2.60827 0.546615 0.748691 -0.375064 + 0.24916 2.55128 -2.50139 0.509127 0.820271 -0.260664 + 0.253165 2.54906 -2.4975 0.717119 0.686213 -0.121872 + 0.247171 2.49356 -2.61442 0.354357 0.827964 -0.434635 + 0.235442 2.55483 -2.50754 0.327443 0.884803 -0.331518 + 0.851447 0.667225 -3.01935 0.318816 -0.903238 -0.287258 + 0.869612 0.679716 -3.01335 0.820938 -0.567324 0.0648372 + 0.864359 0.676199 -3.00349 0.69588 -0.578278 0.425847 + 0.870874 0.684691 -3.02581 0.789372 -0.543081 -0.286279 + 0.8803 0.712776 -3.01494 0.944125 -0.288983 0.158482 + 0.872875 0.707806 -3.00101 0.774018 -0.30433 0.555229 + 0.846194 0.663707 -3.00949 0.210564 -0.976555 0.0447499 + 0.820959 0.673984 -3.02855 -0.422815 -0.775235 -0.469295 + 0.829948 0.675789 -3.03512 -0.171502 -0.756667 -0.630905 + 0.843098 0.674141 -3.03424 0.0384074 -0.784413 -0.619048 + 0.848286 0.671955 -3.03015 0.20868 -0.833725 -0.511229 + 0.852695 0.673826 -2.99489 0.408041 -0.55183 0.727314 + 0.838616 0.673413 -2.9905 0.194177 -0.541105 0.818231 + 0.832115 0.663293 -3.0051 -0.0671604 -0.987652 0.141536 + 0.861211 0.705433 -2.99241 0.469274 -0.289306 0.834317 + 0.841311 0.704848 -2.9862 0.220978 -0.267279 0.937939 + 0.829896 0.705212 -2.98435 -0.077535 -0.248857 0.965432 + 0.827201 0.673775 -2.98865 -0.11899 -0.537847 0.834603 + 0.827276 0.664309 -3.00642 -0.317975 -0.947168 0.0420103 + 0.889696 0.781507 -2.97762 0.762165 -0.364953 0.53471 + 0.871462 0.777799 -2.96418 0.445755 -0.408123 0.796704 + 0.851562 0.777212 -2.95797 0.210513 -0.411461 0.886783 + 0.897121 0.78648 -2.99155 0.94341 -0.276691 0.182812 + 0.923644 0.903215 -2.94988 0.945482 -0.26884 0.183818 + 0.91125 0.894913 -2.92662 0.754541 -0.378117 0.536372 + 0.893016 0.891206 -2.91318 0.448379 -0.439797 0.778161 + 0.899094 0.794259 -3.01104 0.97018 -0.174067 -0.168677 + 0.925618 0.910994 -2.96936 0.976833 -0.151923 -0.150722 + 0.948089 1.0292 -2.93081 0.982228 -0.13104 -0.134372 + 0.945272 1.01735 -2.90117 0.951211 -0.234074 0.201014 + 0.932878 1.00905 -2.87791 0.790174 -0.366975 0.490871 + 0.881562 0.717753 -3.02741 0.947249 -0.24901 -0.201777 + 0.894626 0.800945 -3.02631 0.902356 -0.0911452 -0.421244 + 0.918159 0.922154 -2.99485 0.911002 -0.0636841 -0.407455 + 0.94063 1.04036 -2.9563 0.938728 -0.0819218 -0.334782 + 0.867713 0.689422 -3.03662 0.685388 -0.5203 -0.509442 + 0.877095 0.72444 -3.04267 0.859736 -0.209409 -0.465835 + 0.886751 0.807467 -3.04036 0.75314 -0.0109769 -0.657768 + 0.910284 0.928679 -3.0089 0.764004 0.0181506 -0.644956 + 0.932832 1.0504 -2.97894 0.812524 -0.0100643 -0.58284 + 0.862675 0.693595 -3.0456 0.533849 -0.493039 -0.686963 + 0.872057 0.728612 -3.05166 0.701856 -0.167027 -0.692459 + 0.864723 0.731701 -3.05745 0.413359 -0.105228 -0.904467 + 0.879417 0.810558 -3.04614 0.465475 0.0842015 -0.881047 + 0.898042 0.933835 -3.01856 0.474358 0.118234 -0.872356 + 0.857487 0.695782 -3.0497 0.296759 -0.452413 -0.840985 + 0.846422 0.698094 -3.0527 0.077843 -0.423482 -0.902554 + 0.853658 0.734015 -3.06045 0.154806 -0.063675 -0.985891 + 0.86212 0.814174 -3.05083 0.183754 0.143665 -0.972417 + 0.833272 0.699745 -3.05357 -0.107014 -0.398356 -0.910967 + 0.835072 0.736347 -3.06168 -0.0967604 -0.0342941 -0.994717 + 0.843533 0.816506 -3.05207 -0.0783359 0.171052 -0.982143 + 0.849719 0.941343 -3.02531 -0.0830815 0.203479 -0.975548 + 0.880745 0.937452 -3.02325 0.191597 0.174301 -0.965873 + 0.819914 0.699651 -3.05013 -0.37952 -0.37678 -0.844986 + 0.821714 0.736253 -3.05825 -0.4175 -0.0164593 -0.908528 + 0.822651 0.81636 -3.04669 -0.4336 0.172664 -0.884408 + 0.810925 0.697845 -3.04357 -0.669432 -0.359414 -0.650141 + 0.809008 0.733702 -3.04896 -0.761481 -0.0171776 -0.64796 + 0.809946 0.813808 -3.03741 -0.778167 0.123668 -0.615762 + 0.807629 0.936939 -3.00444 -0.789425 0.144693 -0.59655 + 0.828837 0.941197 -3.01994 -0.43045 0.202061 -0.879707 + 0.804799 0.693068 -3.03042 -0.872678 -0.351701 -0.338731 + 0.802882 0.728925 -3.03582 -0.957643 -0.0363178 -0.285658 + 0.800369 0.806341 -3.01686 -0.969461 0.0372871 -0.242394 + 0.803635 0.686956 -3.0152 -0.92744 -0.370181 -0.0531234 + 0.801237 0.720285 -3.01431 -0.99601 -0.0639219 0.0622794 + 0.798724 0.797702 -2.99535 -0.996103 -0.0539146 0.069792 + 0.795305 0.91505 -2.94799 -0.995219 -0.0570797 0.0792543 + 0.798052 0.929471 -2.98389 -0.969257 0.0522117 -0.240448 + 0.819794 0.667873 -3.01333 -0.486103 -0.860276 -0.15372 + 0.807446 0.681117 -3.00185 -0.834553 -0.416012 0.361185 + 0.805048 0.714447 -3.00096 -0.881252 -0.124895 0.455846 + 0.804682 0.788575 -2.97448 -0.872765 -0.186694 0.451028 + 0.814927 0.677555 -2.99494 -0.659907 -0.466328 0.589118 + 0.815622 0.709411 -2.99118 -0.65473 -0.166237 0.737356 + 0.815256 0.783538 -2.96471 -0.665398 -0.278073 0.692763 + 0.818915 0.897514 -2.9108 -0.665063 -0.307959 0.680333 + 0.801264 0.905924 -2.92711 -0.874384 -0.202992 0.440735 + 0.822361 0.674792 -2.98997 -0.462891 -0.501642 0.730813 + 0.823056 0.706647 -2.98622 -0.458703 -0.203063 0.865076 + 0.826877 0.779219 -2.95694 -0.466963 -0.338022 0.817121 + 0.833718 0.777782 -2.95507 -0.0954386 -0.399931 0.911563 + 0.841954 0.890798 -2.89992 -0.0969014 -0.441116 0.892203 + 0.830536 0.893194 -2.90304 -0.470514 -0.373588 0.799405 + 0.836878 1.00552 -2.84532 -0.477814 -0.391402 0.786446 + 0.8192 1.01195 -2.85771 -0.672451 -0.319296 0.667728 + 0.859798 0.890231 -2.90282 0.202751 -0.452229 0.868551 + 0.875466 1.00218 -2.84643 0.200141 -0.477651 0.855449 + 0.848297 1.00313 -2.84221 -0.105753 -0.466369 0.878246 + 0.908684 1.00316 -2.85679 0.470976 -0.464217 0.750123 + 0.931966 1.11365 -2.80007 0.488923 -0.465928 0.737472 + 0.885064 1.11308 -2.78374 0.204333 -0.488674 0.848201 + 0.857895 1.11402 -2.77952 -0.139748 -0.468734 0.872215 + 0.95616 1.11954 -2.82119 0.869869 -0.337797 0.359473 + 0.971665 1.21119 -2.77979 0.891112 -0.313301 0.328271 + 0.944055 1.19838 -2.75499 0.5148 -0.458275 0.724545 + 0.897154 1.19781 -2.73866 0.200184 -0.475786 0.856478 + 0.960425 1.13325 -2.85572 0.981694 -0.184667 0.0466304 + 0.975929 1.22491 -2.81432 0.982269 -0.183722 0.0373476 + 0.988035 1.29495 -2.78707 0.984449 -0.169569 0.0458892 + 0.983141 1.28138 -2.74361 0.887274 -0.273865 0.371138 + 0.955531 1.26856 -2.7188 0.500711 -0.389928 0.772816 + 0.963241 1.14511 -2.88537 0.987696 -0.155803 0.0135023 + 0.978886 1.23475 -2.85543 0.983966 -0.178071 0.0100942 + 0.990991 1.30479 -2.82818 0.985617 -0.167205 0.0245254 + 1.0024 1.37945 -2.80967 0.985122 -0.168223 0.035168 + 0.998719 1.37202 -2.76552 0.985564 -0.147887 0.0824256 + 0.965306 1.15935 -2.92069 0.974438 -0.121203 -0.189156 + 0.98095 1.249 -2.89075 0.981216 -0.151818 -0.119026 + 0.991593 1.30264 -2.87929 0.983173 -0.146881 -0.108614 + 1.003 1.3773 -2.86079 0.988694 -0.0982873 -0.113239 + 0.957508 1.16939 -2.94333 0.884532 -0.0546885 -0.463262 + 0.973979 1.25621 -2.92398 0.908274 -0.0804567 -0.410566 + 0.984621 1.30985 -2.91253 0.9153 -0.069382 -0.396751 + 0.994655 1.36584 -2.89536 0.92607 -0.01737 -0.376951 + 0.94395 1.17894 -2.96344 0.635193 0.0479606 -0.770863 + 0.960421 1.26577 -2.94409 0.657157 0.014158 -0.753621 + 0.967627 1.31704 -2.93891 0.655652 0.0455098 -0.753691 + 0.977661 1.37303 -2.92174 0.726886 0.066789 -0.683503 + 0.920591 1.05555 -2.98861 0.523067 0.092324 -0.847276 + 0.893041 1.06284 -2.99979 0.250513 0.13904 -0.958077 + 0.916401 1.18623 -2.97462 0.331534 0.119403 -0.935857 + 0.923632 1.28072 -2.96087 0.333564 0.0919017 -0.938237 + 0.930838 1.33198 -2.95569 0.32228 0.100601 -0.941284 + 0.862015 1.06673 -3.00185 -0.0930138 0.149708 -0.984345 + 0.863031 1.19676 -2.98754 -0.0262476 0.142536 -0.989442 + 0.870262 1.29124 -2.97378 -0.0348798 0.14459 -0.988877 + 0.867606 1.36449 -2.96342 -0.0869442 0.168138 -0.981922 + 0.829019 1.06609 -2.99239 -0.466055 0.1694 -0.868387 + 0.830034 1.19612 -2.97807 -0.578483 0.123211 -0.806335 + 0.82689 1.29929 -2.95643 -0.622048 0.116936 -0.774198 + 0.824235 1.37254 -2.94607 -0.619418 0.136247 -0.773148 + 0.878915 1.42316 -2.95133 -0.0380619 0.219382 -0.974896 + 0.807811 1.06184 -2.97689 -0.804075 0.136537 -0.578637 + 0.803656 1.18343 -2.94072 -0.892393 0.0765409 -0.444721 + 0.800511 1.2866 -2.91908 -0.905135 0.056257 -0.421386 + 0.79373 1.37437 -2.89337 -0.91074 -0.00292007 -0.412971 + 0.794835 1.04874 -2.94176 -0.979457 0.0351137 -0.198571 + 0.79068 1.17034 -2.9056 -0.98229 0.0251107 -0.185674 + 0.787186 1.25993 -2.87321 -0.988512 -0.00607771 -0.151021 + 0.792088 1.03432 -2.90586 -0.995417 -0.0572252 0.0766229 + 0.789111 1.14932 -2.85386 -0.992042 -0.0730683 0.102535 + 0.785618 1.23892 -2.82147 -0.991297 -0.0667583 0.113465 + 0.785555 1.27293 -2.80579 -0.987158 -0.13056 0.0920463 + 0.780405 1.34771 -2.8475 -0.977326 -0.0775253 -0.197035 + 0.801549 1.02036 -2.87402 -0.869399 -0.215553 0.444615 + 0.798572 1.13536 -2.82202 -0.875234 -0.210778 0.43536 + 0.799455 1.2115 -2.78489 -0.864011 -0.211666 0.456818 + 0.823078 1.12337 -2.79861 -0.676623 -0.321179 0.66259 + 0.823961 1.19951 -2.76147 -0.680204 -0.303292 0.667336 + 0.826657 1.2436 -2.73972 -0.655104 -0.327709 0.680768 + 0.799393 1.24551 -2.7692 -0.852055 -0.262258 0.453015 + 0.840756 1.11695 -2.78622 -0.510907 -0.384712 0.768746 + 0.8458 1.19538 -2.74415 -0.512158 -0.366866 0.776598 + 0.848495 1.23947 -2.7224 -0.525255 -0.346325 0.777281 + 0.848341 1.31858 -2.68862 -0.427432 -0.373272 0.823389 + 0.814154 1.31359 -2.71211 -0.596345 -0.401894 0.694877 + 0.862939 1.19246 -2.73746 -0.151772 -0.451115 0.879466 + 0.86694 1.2398 -2.71272 -0.156535 -0.411 0.898096 + 0.866786 1.3189 -2.67895 -0.147481 -0.343734 0.927414 + 0.901155 1.24515 -2.71393 0.176547 -0.412627 0.893627 + 0.910615 1.32677 -2.68468 0.203045 -0.35524 0.912457 + 0.88467 1.4419 -2.63615 0.0975733 -0.29901 0.949248 + 0.823145 1.42055 -2.64281 -0.254054 -0.36839 0.894285 + 0.788958 1.41557 -2.6663 -0.658524 -0.357761 0.662083 + 0.964992 1.35018 -2.68955 0.541089 -0.285627 0.790974 + 0.928499 1.44977 -2.64188 0.372655 -0.23721 0.89714 + 0.993825 1.35845 -2.72205 0.911373 -0.171806 0.374007 + 0.969471 1.43614 -2.67626 0.68521 -0.154782 0.711709 + 0.971492 1.50371 -2.66235 0.686943 -0.0475973 0.725151 + 0.93052 1.51733 -2.62797 0.380104 0.0317999 0.924397 + 0.998304 1.44441 -2.70876 0.883783 -0.132819 0.44865 + 0.983836 1.51751 -2.67543 0.757126 0.0418961 0.651924 + 0.940298 1.55651 -2.64549 0.447017 0.349456 0.823442 + 0.912714 1.52633 -2.6262 -0.240188 0.318376 0.917031 + 1.01339 1.45412 -2.75603 0.978367 -0.121227 0.167636 + 1.01435 1.51286 -2.74407 0.982578 0.0926606 0.161106 + 0.999264 1.50315 -2.6968 0.879387 -0.0311814 0.475086 + 0.979896 1.57252 -2.68028 0.716569 0.396413 0.573922 + 0.952642 1.57031 -2.65857 0.464902 0.418634 0.780135 + 1.01708 1.46156 -2.80018 0.998404 -0.0315648 -0.0468365 + 1.0123 1.53068 -2.77243 0.967634 0.250998 -0.0261525 + 0.995324 1.55816 -2.70165 0.900846 0.277037 0.334255 + 0.993265 1.57599 -2.73001 0.866177 0.485478 0.118526 + 0.965057 1.60113 -2.69687 0.535909 0.752794 0.382234 + 1.01122 1.47018 -2.83495 0.973282 0.0795468 -0.215392 + 1.00644 1.53931 -2.8072 0.930777 0.311429 -0.191484 + 1.00287 1.45872 -2.86952 0.917485 0.0800331 -0.389635 + 0.990762 1.54811 -2.84422 0.841094 0.39288 -0.371762 + 0.983454 1.59551 -2.77394 0.794316 0.604476 -0.0605886 + 0.955245 1.62066 -2.7408 0.484304 0.859181 0.165101 + 0.937803 1.59891 -2.67516 0.247132 0.744325 0.620408 + 0.971629 1.40838 -2.92362 0.655861 0.129806 -0.743637 + 0.996841 1.49407 -2.87139 0.903119 0.203476 -0.378119 + 0.964448 1.56129 -2.87568 0.546169 0.541281 -0.639308 + 0.967775 1.60432 -2.81096 0.657387 0.695881 -0.289123 + 0.942147 1.39065 -2.9436 0.374446 0.141876 -0.91633 + 0.970527 1.50724 -2.90286 0.590546 0.324545 -0.738868 + 0.941046 1.48951 -2.92284 0.286459 0.288637 -0.913581 + 0.934877 1.53478 -2.90699 0.18499 0.476648 -0.85941 + 0.947043 1.59822 -2.84888 0.316259 0.758959 -0.569175 + 0.872747 1.46842 -2.93547 0.154293 0.365492 -0.917938 + 0.917472 1.57171 -2.88019 0.184943 0.609851 -0.770634 + 0.925879 1.62295 -2.81582 0.0718792 0.909705 -0.408988 + 0.946612 1.62905 -2.77789 0.371293 0.925037 -0.0802927 + 0.911681 1.62195 -2.7056 0.117381 0.907897 0.402425 + 0.854955 1.47201 -2.93872 0.0327013 0.263722 -0.964044 + 0.89968 1.5753 -2.88344 0.280801 0.555829 -0.782435 + 0.905845 1.6127 -2.8457 0.327695 0.84772 -0.417117 + 0.910225 1.62389 -2.80914 -0.0735407 0.960341 -0.268956 + 0.903047 1.63034 -2.7427 0.0882651 0.99462 0.054223 + 0.827063 1.478 -2.93291 -0.480537 0.0809781 -0.873228 + 0.863711 1.54912 -2.92 0.268319 0.380992 -0.884788 + 0.869875 1.58653 -2.88225 0.057822 0.809352 -0.584471 + 0.879614 1.62164 -2.78774 -0.187019 0.951832 -0.242983 + 0.883994 1.63283 -2.75118 -0.0812795 0.994301 -0.0689816 + 0.805951 1.4555 -2.91233 -0.744406 0.0263358 -0.667208 + 0.792252 1.56646 -2.87796 -0.642678 0.398049 -0.654616 + 0.812857 1.57691 -2.88462 -0.389562 0.605829 -0.693695 + 0.835818 1.55511 -2.91418 -0.324844 0.469796 -0.820834 + 0.850232 1.58508 -2.88458 -0.0153157 0.804865 -0.59326 + 0.775446 1.45734 -2.85964 -0.898482 -0.0583242 -0.435118 + 0.77114 1.54396 -2.85738 -0.81786 0.134304 -0.559524 + 0.775063 1.59265 -2.82945 -0.513242 0.749024 -0.418982 + 0.795668 1.6031 -2.83612 -0.345461 0.910066 -0.22899 + 0.827271 1.60687 -2.85503 -0.0618566 0.900525 -0.430381 + 0.768206 1.41808 -2.82947 -0.948919 -0.135946 -0.284729 + 0.746557 1.53971 -2.81573 -0.906071 0.00205724 -0.42312 + 0.73274 1.58453 -2.77975 -0.825055 0.557522 -0.0919416 + 0.757324 1.58878 -2.8214 -0.614104 0.647941 -0.450609 + 0.769096 1.59685 -2.77483 -0.114859 0.990661 0.0734657 + 0.773356 1.3433 -2.78776 -0.966627 -0.238336 -0.0939651 + 0.739316 1.50045 -2.78555 -0.944983 -0.133906 -0.298457 + 0.726742 1.56403 -2.75754 -0.931549 0.260433 0.253754 + 0.751357 1.59298 -2.76679 -0.240599 0.890541 0.386068 + 0.78689 1.3155 -2.7416 -0.840496 -0.346318 0.416689 + 0.765923 1.35168 -2.76479 -0.936364 -0.35089 0.00990299 + 0.731883 1.50883 -2.76259 -0.984198 -0.114301 -0.135238 + 0.733332 1.50676 -2.73257 -0.943657 -0.00553194 0.33088 + 0.745359 1.57248 -2.74458 -0.697359 0.536889 0.474806 + 0.75944 1.41539 -2.71442 -0.852801 -0.309414 0.420705 + 0.738473 1.45156 -2.73762 -0.96379 -0.19406 0.18289 + 0.741668 1.50855 -2.71809 -0.909563 0.0675171 0.410045 + 0.753695 1.57426 -2.7301 -0.816777 0.482081 0.316975 + 0.772282 1.59501 -2.73269 -0.30776 0.942392 0.131077 + 0.777016 1.48688 -2.64992 -0.745128 -0.120863 0.655879 + 0.747498 1.4867 -2.69804 -0.93 -0.0932768 0.355526 + 0.760085 1.57115 -2.69963 -0.771774 0.448889 0.450404 + 0.778672 1.5919 -2.70222 -0.355355 0.879471 0.316628 + 0.793833 1.59155 -2.73908 0.0471479 0.99863 0.0226985 + 0.79043 1.50192 -2.63522 -0.601224 0.0167222 0.798906 + 0.765915 1.5493 -2.67958 -0.838299 0.223582 0.497258 + 0.779329 1.56435 -2.66489 -0.6216 0.494891 0.607204 + 0.796501 1.58053 -2.67512 -0.124875 0.83979 0.528354 + 0.811174 1.5928 -2.7105 0.00448316 0.984772 0.17379 + 0.814638 1.48823 -2.62312 -0.301328 -0.130506 0.944547 + 0.801154 1.54689 -2.63927 -0.382496 0.43066 0.817453 + 0.876163 1.50957 -2.61646 0.122089 0.0101106 0.992468 + 0.825363 1.5332 -2.62717 -0.192875 0.325132 0.925791 + 0.818326 1.56307 -2.64951 0.0231986 0.761024 0.648309 + 0.829003 1.58143 -2.6834 0.139615 0.876151 0.461375 + 0.891883 1.52196 -2.6212 0.294532 0.437669 0.849528 + 0.841083 1.54559 -2.63191 0.0869169 0.673175 0.734357 + 0.854762 1.55527 -2.65968 0.246094 0.802935 0.542894 + 0.849585 1.5812 -2.68906 0.028948 0.799637 0.599785 + 0.828368 1.59373 -2.71497 -0.146724 0.943731 0.296383 + 0.906756 1.51837 -2.62531 0.241505 0.178512 0.953839 + 0.892392 1.53419 -2.64619 0.365591 0.808455 0.461241 + 0.877519 1.53779 -2.64208 0.3016 0.825909 0.476352 + 0.875344 1.55504 -2.66534 0.0528466 0.701093 0.711109 + 0.900577 1.5312 -2.64834 -0.139518 0.805828 0.575479 + 0.898192 1.53722 -2.65553 -0.107253 0.322486 0.940478 + 0.890007 1.54021 -2.65338 0.225765 0.663121 0.713653 + 0.882551 1.55726 -2.66602 -0.230452 0.497604 0.836231 + 0.855766 1.58495 -2.69256 -0.287616 0.642058 0.710661 + 0.906535 1.53917 -2.64923 -0.819228 0.0445195 0.571737 + 0.897214 1.54243 -2.65405 -0.345225 0.0770661 0.93535 + 0.894531 1.56815 -2.66602 -0.482399 0.359026 0.798994 + 0.867746 1.59585 -2.69256 -0.452473 0.486781 0.747203 + 0.905557 1.54438 -2.64776 -0.730401 0.130773 0.670383 + 0.922492 1.56551 -2.64372 -0.0548526 0.535001 0.843069 + 0.911465 1.58928 -2.66198 -0.213208 0.576573 0.788737 + 0.885343 1.61232 -2.69242 -0.270854 0.684834 0.676492 + 0.867521 1.62475 -2.71665 -0.380702 0.828308 0.411063 + 0.849924 1.60828 -2.71679 -0.566754 0.663429 0.488521 + 0.834549 1.59748 -2.71847 -0.444904 0.799796 0.402973 + 0.887393 1.63128 -2.73602 -0.00295766 0.9891 0.147214 + 0.864122 1.6263 -2.73181 -0.418768 0.898419 0.132196 + 0.834941 1.60577 -2.74159 -0.591739 0.774122 0.224898 + 0.819566 1.59496 -2.74326 -0.424025 0.889941 0.16795 + 0.811027 1.59247 -2.74355 -0.158013 0.985071 0.0683118 + 0.859971 1.62019 -2.79007 -0.00638076 0.975498 -0.219917 + 0.85349 1.62504 -2.76183 -0.225497 0.974133 0.0147131 + 0.824309 1.60451 -2.7716 -0.574778 0.802247 0.161339 + 0.811736 1.59684 -2.77495 -0.409385 0.900436 0.147034 + 0.82079 1.61174 -2.82678 -0.344921 0.935104 -0.0813087 + 0.808217 1.60406 -2.83014 -0.287445 0.956637 0.0471191 + 0.803196 1.59435 -2.77524 -0.197297 0.972608 0.122916 + 0.790647 1.59339 -2.78122 0.0407557 0.991065 0.127002 + -0.987946 0.54202 -2.82794 -0.314751 -0.758104 -0.571148 + -0.992571 0.541618 -2.82296 -0.569927 -0.754823 -0.324693 + -1.00242 0.583273 -2.8373 -0.815654 -0.202245 -0.542039 + -0.976634 0.541924 -2.83037 0.100624 -0.766488 -0.634327 + -0.994128 0.540551 -2.81285 -0.642338 -0.764717 0.0510794 + -1.00847 0.581138 -2.81623 -0.983805 -0.178851 -0.0118184 + -1.00691 0.582204 -2.82634 -0.943677 -0.181814 -0.276437 + -0.997797 0.583674 -2.84229 -0.571961 -0.227226 -0.788181 + -0.986215 0.583895 -2.84767 -0.304596 -0.252698 -0.918349 + -1.00283 0.663444 -2.84326 -0.835847 -0.00616028 -0.548928 + -0.994011 0.664209 -2.85276 -0.576813 0.0030646 -0.816871 + -0.98243 0.664431 -2.85815 -0.313747 0.00128624 -0.949506 + -0.974903 0.583799 -2.8501 0.0217153 -0.287315 -0.95759 + -1.00732 0.662375 -2.83229 -0.959787 -0.0229856 -0.279786 + -1.01479 0.756517 -2.81332 -0.95891 -0.0201159 -0.282998 + -1.00774 0.761453 -2.82961 -0.833612 0.0594109 -0.549146 + -0.998922 0.76222 -2.83911 -0.577752 0.132626 -0.805366 + -1.01029 0.66034 -2.81301 -0.998687 -0.0512168 -0.00136146 + -1.01776 0.754481 -2.79404 -0.994497 -0.10342 -0.0167141 + -1.03214 0.858538 -2.75211 -0.985839 -0.16284 -0.0400509 + -1.02803 0.86965 -2.77662 -0.948941 -0.0583881 -0.310003 + -1.02098 0.874586 -2.79292 -0.830327 0.0456073 -0.555407 + -1.0061 0.579608 -2.80309 -0.923809 -0.190563 0.332058 + -1.00792 0.65881 -2.79987 -0.938901 -0.0955369 0.330663 + -1.01401 0.748649 -2.77438 -0.929067 -0.20081 0.310661 + -1.00127 0.578569 -2.79511 -0.709695 -0.217832 0.669986 + -0.998712 0.656831 -2.78467 -0.70851 -0.156058 0.688229 + -1.0048 0.746669 -2.75918 -0.699229 -0.308102 0.645098 + -1.01553 0.844499 -2.71281 -0.693573 -0.408079 0.593657 + -1.02839 0.852705 -2.73245 -0.922258 -0.280452 0.266057 + -0.989302 0.539512 -2.80488 -0.405061 -0.796087 0.449633 + -0.987738 0.577242 -2.78706 -0.369587 -0.249088 0.895187 + -0.985181 0.655504 -2.77662 -0.378359 -0.202362 0.903269 + -0.983544 0.743223 -2.74693 -0.368515 -0.363068 0.855791 + -0.964997 0.54048 -2.8207 0.474206 -0.819737 -0.321187 + -0.965146 0.539398 -2.81088 0.491292 -0.86562 0.0966106 + -0.969837 0.538851 -2.80456 0.327982 -0.876319 0.352835 + -0.975509 0.538725 -2.80177 0.0185124 -0.842729 0.53802 + -0.958226 0.58268 -2.84484 0.432045 -0.335508 -0.837121 + -0.946589 0.581236 -2.83517 0.676192 -0.372969 -0.635342 + -0.93824 0.5794 -2.82101 0.867774 -0.417927 -0.268896 + -0.93839 0.578319 -2.81119 0.895972 -0.43483 0.0903149 + -0.944182 0.663127 -2.85751 0.467419 -0.0700287 -0.881258 + -0.921991 0.660374 -2.83908 0.74617 -0.123118 -0.654273 + -0.913643 0.658539 -2.82492 0.937074 -0.192651 -0.291167 + -0.96086 0.664247 -2.86277 0.0563659 -0.0250413 -0.998096 + -0.959166 0.764559 -2.85158 0.0537748 0.187621 -0.980768 + -0.932966 0.762391 -2.84343 0.485805 0.152339 -0.860689 + -0.910775 0.759637 -2.825 0.756753 0.0901468 -0.647456 + -0.980736 0.764743 -2.84695 -0.304099 0.179204 -0.935633 + -0.990514 0.882944 -2.81263 -0.30217 0.236289 -0.923505 + -0.960445 0.886619 -2.81796 0.0612607 0.275325 -0.959397 + -0.934244 0.884451 -2.80981 0.476268 0.247302 -0.843807 + -1.0087 0.88042 -2.8048 -0.569491 0.158833 -0.806506 + -1.02948 0.984916 -2.773 -0.513901 0.119045 -0.849549 + -0.999928 0.98995 -2.78141 -0.246516 0.216802 -0.944577 + -0.969859 0.993627 -2.78674 0.0678551 0.286352 -0.955719 + -1.04177 0.979082 -2.76111 -0.809357 -0.0504991 -0.585142 + -1.07819 1.07044 -2.72921 -0.786941 -0.0644471 -0.613653 + -1.05317 1.08021 -2.74869 -0.467517 0.108565 -0.877292 + -1.02362 1.08524 -2.75711 -0.136557 0.231771 -0.963138 + -1.05198 0.967463 -2.73606 -0.93176 -0.161194 -0.32533 + -1.0884 1.05881 -2.70415 -0.934144 -0.221527 -0.279822 + -1.1102 1.13024 -2.67529 -0.962788 -0.170737 -0.209495 + -1.09758 1.13993 -2.71023 -0.803817 -0.0485517 -0.592892 + -1.07256 1.1497 -2.72971 -0.451082 0.111016 -0.885551 + -1.05609 0.956349 -2.71154 -0.959942 -0.271394 -0.0696948 + -1.08784 1.03906 -2.65981 -0.927381 -0.334875 -0.1668 + -1.10964 1.11049 -2.63095 -0.973536 -0.159467 -0.1637 + -1.04433 0.934346 -2.68809 -0.884365 -0.395589 0.247806 + -1.07608 1.01706 -2.63636 -0.757746 -0.613392 -0.222645 + -1.10668 1.01755 -2.59929 -0.828392 -0.202933 -0.522097 + -1.11904 1.09943 -2.58885 -0.927921 -0.0735344 -0.365452 + -1.11888 1.17747 -2.60983 -0.982429 -0.141328 -0.121902 + -1.03147 0.926142 -2.66845 -0.694617 -0.511805 0.505532 + -1.03839 0.968117 -2.63106 -0.684226 -0.727598 0.0493492 + -1.0459 0.957702 -2.60835 -0.184515 -0.37947 -0.906618 + -1.0836 1.00664 -2.61366 -0.592849 -0.434478 -0.678056 + -0.999984 0.910055 -2.65635 -0.372424 -0.582502 0.72249 + -1.00689 0.95203 -2.61896 -0.331301 -0.938719 0.0951107 + -1.01399 0.943052 -2.6019 0.129016 -0.445886 -0.885743 + -1.04918 0.898729 -2.61392 -0.0529593 0.0569046 -0.996974 + -1.07173 0.899269 -2.60639 -0.405539 -0.00624258 -0.914056 + -0.994271 0.841053 -2.70056 -0.365717 -0.47914 0.797919 + -0.963302 0.907958 -2.64809 -0.151555 -0.634684 0.757764 + -0.968171 0.946924 -2.60376 0.0340642 -0.987818 0.151841 + -0.97527 0.937947 -2.5867 0.418812 -0.50291 -0.756094 + -1.01727 0.884079 -2.60747 0.307674 0.0320804 -0.950951 + -0.957588 0.838956 -2.6923 -0.118971 -0.495253 0.860564 + -0.935371 0.839004 -2.69171 0.208339 -0.498087 0.841727 + -0.930745 0.916726 -2.63758 0.198954 -0.67443 0.711028 + -0.935615 0.955693 -2.59324 0.395482 -0.858067 0.32759 + -0.957243 0.741721 -2.74101 -0.124383 -0.381788 0.915842 + -0.935026 0.741769 -2.74041 0.211622 -0.38868 0.896741 + -0.920299 0.842552 -2.6982 0.549024 -0.438814 0.711347 + -0.915673 0.920278 -2.64408 0.57365 -0.56935 0.588868 + -0.895865 0.994424 -2.56815 0.752412 -0.588411 0.296054 + -0.958881 0.654004 -2.7707 -0.120793 -0.232502 0.965066 + -0.944736 0.653521 -2.77047 0.216364 -0.27377 0.937143 + -0.924211 0.742007 -2.74573 0.54312 -0.34933 0.763537 + -0.973945 0.576454 -2.78396 -0.130357 -0.2819 0.950547 + -0.9598 0.575973 -2.78373 0.206821 -0.349201 0.913938 + -0.954129 0.576099 -2.78652 0.518299 -0.395967 0.758008 + -0.933921 0.65376 -2.77579 0.54817 -0.289151 0.784793 + -0.91239 0.745039 -2.75548 0.723318 -0.306289 0.618869 + -0.946598 0.576588 -2.79314 0.686164 -0.416993 0.596068 + -0.92639 0.654249 -2.78241 0.720128 -0.286822 0.631783 + -0.903445 0.746082 -2.76754 0.884646 -0.241201 0.399029 + -0.896025 0.852877 -2.72309 0.891074 -0.267069 0.366963 + -0.908478 0.845585 -2.70795 0.727199 -0.366495 0.580398 + -0.941907 0.577135 -2.79946 0.819992 -0.429957 0.377822 + -0.917445 0.655293 -2.79446 0.875863 -0.274623 0.396796 + -0.897932 0.751349 -2.78499 0.98174 -0.150554 0.116279 + -0.913927 0.656476 -2.8062 0.962182 -0.246831 0.11524 + -0.897648 0.753411 -2.80372 0.961171 -0.0370835 -0.273451 + -0.890144 0.868814 -2.76442 0.960253 0.0147177 -0.278741 + -0.890512 0.858144 -2.74054 0.983523 -0.144417 0.108748 + -0.903272 0.875039 -2.78571 0.760855 0.163609 -0.627959 + -0.896103 0.980307 -2.74972 0.735065 0.154117 -0.660248 + -0.877059 0.968103 -2.72052 0.9489 -0.0632538 -0.309173 + -0.877426 0.957433 -2.69664 0.977035 -0.203195 0.0641377 + -0.885224 0.944204 -2.66774 0.895272 -0.314113 0.315945 + -0.927075 0.98972 -2.77383 0.483844 0.279546 -0.829306 + -0.929983 1.08219 -2.74118 0.396745 0.276298 -0.875359 + -0.870745 1.07144 -2.71135 0.692486 0.143328 -0.707051 + -0.8517 1.05924 -2.68214 0.973654 -0.115735 -0.196477 + -0.972767 1.0861 -2.75409 0.18173 0.303736 -0.935264 + -0.982147 1.15875 -2.73476 0.176171 0.238138 -0.95512 + -0.92431 1.14823 -2.71871 0.39196 0.236135 -0.889161 + -0.865072 1.13749 -2.68888 0.675691 0.15232 -0.721276 + -1.033 1.1579 -2.73778 -0.0890978 0.208882 -0.973874 + -1.04063 1.20456 -2.72877 -0.0802344 0.17825 -0.980709 + -0.985439 1.21494 -2.72337 0.171817 0.205438 -0.96347 + -0.927602 1.20442 -2.70733 0.379789 0.193926 -0.904518 + -1.08019 1.19637 -2.72071 -0.446707 0.1081 -0.888125 + -1.05709 1.25883 -2.71753 -0.13398 0.195056 -0.971598 + -1.0019 1.26921 -2.71213 0.0225795 0.210716 -0.977286 + -0.984992 1.30116 -2.70562 0.140018 0.185003 -0.972712 + -1.10738 1.18459 -2.69952 -0.805599 -0.0198727 -0.592128 + -1.11733 1.24921 -2.68462 -0.794659 0.0311664 -0.606255 + -1.09014 1.26099 -2.7058 -0.485336 0.12697 -0.865059 + -1.07067 1.34969 -2.69638 -0.180003 0.238498 -0.954315 + -1.05377 1.38164 -2.68987 -0.106737 0.242077 -0.964368 + -1.12001 1.17491 -2.66458 -0.972212 -0.163175 -0.167862 + -1.13216 1.23954 -2.65219 -0.974899 -0.0986769 -0.199586 + -1.12611 1.3255 -2.66586 -0.836427 0.12502 -0.533629 + -1.10373 1.35185 -2.68466 -0.564978 0.229499 -0.792546 + -1.13103 1.2421 -2.59744 -0.966651 -0.194082 -0.167089 + -1.14094 1.31582 -2.63344 -0.948642 0.019755 -0.315733 + -1.12174 1.38945 -2.64227 -0.842108 0.353837 -0.407005 + -1.09936 1.4158 -2.66107 -0.672427 0.52691 -0.519815 + -1.07108 1.41769 -2.67773 -0.276262 0.482141 -0.831396 + -1.14208 1.23005 -2.55351 -0.871477 -0.182165 -0.45535 + -1.15182 1.31268 -2.59848 -0.95788 -0.0562028 -0.281614 + -1.14786 1.37391 -2.57907 -0.920862 0.340431 -0.190051 + -1.13698 1.37706 -2.61403 -0.904803 0.30131 -0.300904 + -1.12827 1.16642 -2.56773 -0.916539 -0.061185 -0.395238 + -1.16281 1.20696 -2.51987 -0.92866 -0.141896 -0.342717 + -1.16287 1.30063 -2.55454 -0.953061 -0.0623715 -0.296284 + -1.14901 1.14333 -2.53409 -0.931537 -0.0856704 -0.353411 + -1.16746 1.19466 -2.47423 -0.981166 -0.192589 -0.0149439 + -1.17659 1.27611 -2.50215 -0.980289 -0.0477509 -0.191711 + -1.17577 1.33363 -2.48915 -0.97345 0.196955 -0.116637 + -1.16205 1.35816 -2.54154 -0.934091 0.318295 -0.16175 + -1.13759 1.0955 -2.55319 -0.933664 -0.0882777 -0.347099 + -1.14487 1.08771 -2.51268 -0.982363 -0.17545 -0.0646565 + -1.15628 1.13553 -2.49358 -0.979493 -0.197892 -0.0378522 + -1.16203 1.19729 -2.42483 -0.96313 -0.212242 0.165327 + -1.18124 1.2638 -2.45652 -0.995258 -0.0882707 0.0408512 + -1.12524 1.01362 -2.56363 -0.932185 -0.114105 -0.343527 + -1.13119 1.0094 -2.5323 -0.985767 -0.153511 -0.0685375 + -1.14009 1.08092 -2.46934 -0.968452 -0.216815 0.122851 + -1.15085 1.13817 -2.44417 -0.960275 -0.239364 0.143447 + -1.09481 0.910179 -2.59202 -0.704523 -0.0747894 -0.705729 + -1.10833 0.908268 -2.57246 -0.913468 -0.0840931 -0.398127 + -1.11428 0.904054 -2.54113 -0.991308 -0.12334 -0.0457847 + -1.12641 1.00262 -2.48896 -0.966953 -0.200898 0.156975 + -1.13367 1.07878 -2.43703 -0.929554 -0.265516 0.255794 + -1.08755 0.812336 -2.59548 -0.716041 0.0111244 -0.697969 + -1.10107 0.810427 -2.57592 -0.918004 -0.0165467 -0.396226 + -1.10538 0.80779 -2.55604 -0.997308 -0.0511498 -0.052539 + -1.11079 0.899823 -2.51437 -0.972073 -0.15423 0.176883 + -1.07207 0.812925 -2.60711 -0.464603 0.0257185 -0.885145 + -1.08934 0.722745 -2.59886 -0.72634 0.0638837 -0.68436 + -1.09904 0.721375 -2.58483 -0.919626 0.0253502 -0.391975 + -1.10334 0.71874 -2.56495 -0.998755 -0.0314128 -0.0387619 + -1.10189 0.803559 -2.52927 -0.964486 -0.0998696 0.244527 + -1.04952 0.812386 -2.61464 -0.0957679 0.0246049 -0.9951 + -1.05769 0.722945 -2.61589 -0.11051 0.0712287 -0.991319 + -1.07386 0.723332 -2.61049 -0.464771 0.0795255 -0.881852 + -1.07647 0.635409 -2.62083 -0.465279 0.146974 -0.872877 + -1.08626 0.635036 -2.61347 -0.722362 0.10618 -0.683315 + -1.02754 0.810431 -2.61238 0.256405 0.00952811 -0.966522 + -1.03571 0.720992 -2.61362 0.265148 0.0393083 -0.963406 + -1.0464 0.633785 -2.62479 0.26744 0.132617 -0.954405 + -1.0603 0.635021 -2.62623 -0.0989332 0.158532 -0.982385 + -0.998872 0.806418 -2.59956 0.546377 -0.037292 -0.836709 + -1.01516 0.718116 -2.60443 0.548501 -0.00795568 -0.836112 + -1.02585 0.630909 -2.6156 0.561694 0.0751344 -0.823927 + -0.988605 0.880068 -2.59465 0.48462 -0.0115258 -0.874649 + -0.982965 0.80307 -2.58489 0.797365 -0.1232 -0.590789 + -0.999249 0.714768 -2.58976 0.818729 -0.0850094 -0.567853 + -1.01579 0.628792 -2.60633 0.824133 -0.0222502 -0.565959 + -1.04 0.546065 -2.63712 0.544353 -0.00889895 -0.838809 + -0.946387 0.944402 -2.56808 0.641839 -0.436344 -0.630593 + -0.959722 0.886523 -2.57604 0.732243 -0.142287 -0.666014 + -0.974575 0.799283 -2.56353 0.934766 -0.196028 -0.296286 + -0.993234 0.71205 -2.57445 0.945974 -0.146481 -0.289268 + -1.00978 0.626076 -2.59102 0.952396 -0.113574 -0.282919 + -0.906638 0.983132 -2.54299 0.872801 -0.483719 -0.0650645 + -0.951332 0.882736 -2.55468 0.919928 -0.28694 -0.267203 + -0.971928 0.796861 -2.54853 0.971119 -0.235169 -0.0403012 + -0.990587 0.70963 -2.55944 0.97929 -0.200358 -0.0291048 + -1.0081 0.624545 -2.58153 0.980802 -0.192545 -0.0308896 + -0.868778 1.06759 -2.53626 0.949754 -0.235756 0.20588 + -0.901376 0.991044 -2.52247 0.858472 -0.389563 0.333567 + -0.94607 0.890647 -2.53416 0.936379 -0.35099 0.00107427 + -0.974151 0.795004 -2.53492 0.901483 -0.272687 0.33611 + -0.992181 0.708298 -2.54969 0.903423 -0.259877 0.341015 + -0.87787 1.01106 -2.57668 0.878134 -0.395548 0.269114 + -0.86407 1.08456 -2.57384 0.979385 -0.173585 0.103312 + -0.861687 1.11392 -2.56091 0.978598 -0.167926 0.11894 + -0.866668 1.10639 -2.51694 0.947761 -0.203811 0.245379 + -0.882104 1.09696 -2.48575 0.784606 -0.298018 0.543672 + -0.884215 1.05816 -2.50507 0.791205 -0.320051 0.521116 + -0.897678 0.936912 -2.6526 0.773609 -0.457386 0.438552 + -0.873162 1.02803 -2.61425 0.965281 -0.241889 0.098597 + -0.854529 1.09843 -2.61509 0.956135 -0.22225 0.190814 + -0.865363 1.04126 -2.64315 0.950426 -0.257208 0.174742 + -0.840866 1.11642 -2.65408 0.982724 -0.0997397 -0.155904 + -0.837332 1.14079 -2.6466 0.979192 -0.0863826 -0.183631 + -0.852146 1.12779 -2.60216 0.956995 -0.206165 0.204099 + -0.861538 1.16186 -2.68141 0.692888 0.152478 -0.704738 + -0.868219 1.24203 -2.66812 0.574125 0.158542 -0.803271 + -0.833628 1.23334 -2.64018 0.855648 0.0787174 -0.511537 + -0.831071 1.17745 -2.63209 0.988874 -0.12975 -0.0727619 + -0.845885 1.16446 -2.58764 0.947227 -0.255703 0.193329 + -0.934282 1.28459 -2.69404 0.364794 0.175382 -0.914422 + -0.938761 1.37007 -2.67991 0.370436 0.210525 -0.904686 + -0.890704 1.39669 -2.64796 0.555286 0.257318 -0.790851 + -0.856113 1.388 -2.62003 0.800786 0.230611 -0.552776 + -0.989471 1.38663 -2.69149 0.118226 0.249029 -0.961253 + -0.94975 1.43807 -2.66388 0.28463 0.384371 -0.878205 + -0.901693 1.4647 -2.63194 0.39648 0.78005 -0.484072 + -0.880149 1.47123 -2.59456 0.309016 0.882258 -0.355148 + -0.860366 1.44322 -2.59861 0.765271 0.403725 -0.501364 + -1.00678 1.42268 -2.67934 -0.00878301 0.438802 -0.898541 + -0.984619 1.43677 -2.67203 0.091524 0.393432 -0.914787 + -0.947564 1.47536 -2.64032 0.317784 0.868931 -0.379435 + -0.920867 1.45928 -2.62568 0.00754016 0.935387 0.353545 + -0.899324 1.46581 -2.5883 -0.338502 0.940963 0.00201027 + -1.05423 1.44533 -2.65705 -0.257718 0.683011 -0.68343 + -1.03207 1.45942 -2.64973 -0.172442 0.66318 -0.728324 + -0.982433 1.47406 -2.64846 0.0170604 0.710272 -0.70372 + -0.968794 1.48219 -2.62952 0.131853 0.980579 0.145185 + -0.942097 1.46611 -2.61488 0.339007 0.806508 0.484375 + -1.08251 1.44345 -2.64039 -0.528518 0.689857 -0.494738 + -1.06681 1.46496 -2.62013 -0.320482 0.885042 -0.337626 + -1.04387 1.46803 -2.63609 -0.297217 0.870988 -0.391206 + -0.994238 1.48267 -2.63483 -0.113418 0.983473 -0.141127 + -1.00639 1.47073 -2.61217 0.0165182 0.857013 0.51503 + -1.09875 1.45047 -2.60848 -0.700871 0.635293 -0.324317 + -1.08305 1.47199 -2.58823 -0.251531 0.967592 -0.0223144 + -1.05477 1.46814 -2.60152 0.0747224 0.986398 0.146409 + -1.03184 1.47121 -2.61748 -0.137016 0.985399 0.101065 + -1.11399 1.43808 -2.58024 -0.851421 0.515949 -0.0942342 + -1.09815 1.46439 -2.55821 -0.427883 0.864768 0.262854 + -1.07211 1.46623 -2.58029 0.266523 0.90494 0.331737 + -1.12543 1.41096 -2.55294 -0.858748 0.512325 0.00866501 + -1.10958 1.43727 -2.53091 -0.809966 0.586366 -0.0113725 + -1.0872 1.45862 -2.55028 0.092161 0.902814 0.420039 + -1.05158 1.44868 -2.55174 0.311533 0.870532 0.380948 + -1.13962 1.39521 -2.51541 -0.823225 0.544266 -0.161477 + -1.12271 1.42414 -2.49449 -0.77304 0.612434 -0.165331 + -1.10257 1.4502 -2.51064 -0.299789 0.941673 0.152899 + -1.08047 1.43007 -2.47989 0.376654 0.853787 0.359415 + -1.0651 1.43849 -2.51953 0.365384 0.852791 0.373151 + -1.16035 1.38697 -2.47996 -0.880904 0.437562 -0.180407 + -1.14345 1.41591 -2.45904 -0.746913 0.66481 -0.0122075 + -1.1157 1.43707 -2.47422 -0.296097 0.947993 0.11677 + -1.17934 1.31858 -2.44536 -0.986818 0.127857 0.0992117 + -1.16392 1.37191 -2.43618 -0.923474 0.334044 0.188704 + -1.14797 1.4016 -2.42365 -0.817402 0.519555 0.248833 + -1.12068 1.42832 -2.43095 -0.202895 0.94604 0.252669 + -1.16889 1.31433 -2.39827 -0.94343 0.166749 0.286592 + -1.1542 1.34868 -2.39596 -0.866943 0.32898 0.374409 + -1.13825 1.37837 -2.38343 -0.881053 0.316462 0.351563 + -1.12732 1.39703 -2.37291 -0.529964 0.647941 0.547092 + -1.12521 1.41402 -2.39556 -0.350048 0.839598 0.415381 + -1.17078 1.25956 -2.40942 -0.969906 -0.093237 0.22492 + -1.16267 1.24834 -2.38147 -0.931278 -0.153555 0.330367 + -1.16159 1.27016 -2.37019 -0.912586 -0.0845404 0.400049 + -1.16229 1.3028 -2.37069 -0.907364 0.131461 0.39926 + -1.1476 1.33715 -2.36837 -0.883226 0.307158 0.354352 + -1.15392 1.18608 -2.39687 -0.932328 -0.232701 0.276793 + -1.14588 1.18477 -2.37766 -0.793191 -0.286797 0.537211 + -1.1448 1.20659 -2.36638 -0.662665 -0.263007 0.701215 + -1.14957 1.27336 -2.35176 -0.668089 -0.106751 0.736383 + -1.15027 1.30599 -2.35226 -0.788477 0.0708074 0.610974 + -1.14443 1.13603 -2.41186 -0.924183 -0.273419 0.266698 + -1.1364 1.13472 -2.39265 -0.623701 -0.392 0.676264 + -1.11827 1.21179 -2.35083 -0.32055 -0.321119 0.89114 + -1.12305 1.27855 -2.33621 -0.444598 -0.212916 0.870057 + -1.12625 1.07567 -2.41973 -0.638675 -0.380241 0.668963 + -1.0902 1.07266 -2.41137 -0.121017 -0.383263 0.915677 + -1.10035 1.13172 -2.38429 -0.129938 -0.43067 0.893107 + -1.09442 1.18844 -2.3562 -0.116724 -0.426738 0.896811 + -1.05547 1.29095 -2.308 -0.219863 -0.323458 0.920345 + -1.11906 0.99834 -2.46379 -0.926896 -0.238494 0.289801 + -1.11163 0.995224 -2.44649 -0.649722 -0.320546 0.689283 + -1.08301 0.991956 -2.43864 -0.147539 -0.316111 0.93718 + -1.02824 1.06834 -2.41296 0.11534 -0.358159 0.926509 + -1.03359 1.12844 -2.38576 0.0974313 -0.429509 0.897791 + -1.10344 0.895543 -2.48919 -0.855178 -0.230617 0.464205 + -1.08971 0.892558 -2.47588 -0.501698 -0.292002 0.814269 + -1.06108 0.889287 -2.46803 -0.176379 -0.264115 0.948227 + -1.02105 0.987635 -2.44024 0.144667 -0.28957 0.946161 + -0.976925 1.05923 -2.42945 0.406835 -0.341488 0.847273 + -1.0945 0.800461 -2.51207 -0.82724 -0.159649 0.538689 + -1.08077 0.797475 -2.49876 -0.528353 -0.206582 0.823509 + -1.0614 0.795053 -2.49203 -0.219275 -0.227354 0.948804 + -1.0297 0.886628 -2.46568 0.0942056 -0.248579 0.96402 + -1.09345 0.712609 -2.52855 -0.824138 -0.154251 0.54498 + -1.08361 0.710468 -2.51901 -0.537036 -0.224478 0.813143 + -1.06424 0.708045 -2.51229 -0.220167 -0.267298 0.938125 + -1.03002 0.792394 -2.48968 0.124432 -0.250754 0.96002 + -0.991862 0.88563 -2.47769 0.498035 -0.264229 0.82592 + -1.10084 0.715706 -2.54576 -0.963889 -0.0867551 0.251777 + -1.09617 0.628966 -2.56769 -0.958431 -0.1488 0.24345 + -1.0915 0.627008 -2.55681 -0.820519 -0.238549 0.519464 + -1.08166 0.624867 -2.54726 -0.530318 -0.328996 0.78136 + -1.09868 0.632 -2.58687 -0.99689 -0.0619289 -0.0487431 + -1.09027 0.546235 -2.61337 -0.976583 -0.203776 -0.069003 + -1.08899 0.544675 -2.60351 -0.934365 -0.294292 0.200884 + -1.08432 0.542717 -2.59263 -0.791189 -0.393918 0.467813 + -1.09595 0.633667 -2.59945 -0.921519 0.0295332 -0.38721 + -1.08755 0.547902 -2.62594 -0.906116 -0.0936438 -0.412535 + -1.0736 0.503052 -2.63077 -0.657908 -0.698812 -0.280747 + -1.07232 0.501492 -2.6209 -0.5838 -0.803005 0.119837 + -1.08257 0.548607 -2.63315 -0.722697 -0.00993852 -0.691093 + -1.06862 0.503757 -2.63797 -0.43344 -0.630561 -0.643834 + -1.04974 0.502079 -2.63603 0.422817 -0.686014 -0.592124 + -1.06726 0.500393 -2.61599 -0.293236 -0.877788 0.378816 + -1.07925 0.541618 -2.58772 -0.521292 -0.480551 0.705213 + -1.07278 0.548979 -2.6405 -0.460169 0.0463358 -0.886622 + -1.06447 0.54878 -2.64328 -0.112793 0.0671714 -0.991345 + -1.06031 0.503558 -2.64075 -0.00466644 -0.612756 -0.790258 + -1.05057 0.547545 -2.64185 0.268025 0.0477428 -0.962228 + -1.02995 0.543948 -2.62785 0.809955 -0.125096 -0.572995 + -1.04665 0.500682 -2.62816 0.554375 -0.805866 -0.207959 + -1.02685 0.542552 -2.61998 0.926257 -0.225626 -0.301896 + -1.02518 0.541021 -2.61049 0.947032 -0.316871 -0.0521857 + -1.04747 0.499998 -2.62314 0.470175 -0.872482 0.133079 + -1.026 0.540337 -2.60548 0.860336 -0.419876 0.28901 + -1.03266 0.539402 -2.59588 0.688047 -0.48246 0.542055 + -1.05569 0.499412 -2.61513 0.147088 -0.899721 0.410934 + -1.05544 0.539107 -2.5826 0.0808372 -0.541862 0.836571 + -1.06701 0.540086 -2.58347 -0.222008 -0.524589 0.8219 + -1.0097 0.623214 -2.57178 0.895208 -0.292463 0.336255 + -1.01635 0.62228 -2.56218 0.730253 -0.346055 0.589048 + -1.04087 0.538816 -2.58787 0.468018 -0.521577 0.713384 + -1.04691 0.621429 -2.54133 0.105559 -0.398375 0.911128 + -1.06941 0.623335 -2.54301 -0.227649 -0.374916 0.898674 + -1.00271 0.706819 -2.53452 0.740571 -0.287232 0.607497 + -1.03234 0.621138 -2.54659 0.488824 -0.386642 0.782023 + -1.01869 0.705681 -2.51892 0.508876 -0.303807 0.805448 + -1.04174 0.706138 -2.5106 0.108581 -0.296112 0.948961 + -0.984676 0.793525 -2.51975 0.742323 -0.268092 0.61407 + -0.948293 0.888791 -2.52055 0.845078 -0.322484 0.426435 + -0.969564 0.887221 -2.49944 0.684999 -0.270924 0.676296 + -1.00697 0.791935 -2.498 0.51377 -0.263712 0.816392 + -0.926244 0.989602 -2.50043 0.660527 -0.31281 0.682535 + -0.947515 0.988032 -2.47932 0.635129 -0.288974 0.716313 + -0.909084 1.05672 -2.48303 0.614267 -0.367071 0.698524 + -0.94123 1.06063 -2.45651 0.56421 -0.377053 0.734506 + -0.983211 0.986638 -2.45225 0.443925 -0.279269 0.851434 + -0.909294 1.08518 -2.46457 0.606607 -0.376106 0.700409 + -0.941441 1.08909 -2.43805 0.532076 -0.394407 0.749226 + -0.871687 1.15593 -2.47057 0.810704 -0.268079 0.520473 + -0.898877 1.14416 -2.44938 0.669766 -0.327231 0.666583 + -0.929246 1.15389 -2.41 0.563535 -0.376751 0.735178 + -0.982273 1.11932 -2.40225 0.312706 -0.407609 0.857945 + -0.856009 1.16132 -2.50709 0.945087 -0.228352 0.233808 + -0.855299 1.23129 -2.46941 0.894735 -0.194911 0.401819 + -0.875496 1.23743 -2.42759 0.796799 -0.267322 0.541895 + -0.905865 1.24716 -2.38821 0.690921 -0.389738 0.608878 + -0.970078 1.18412 -2.3742 0.384688 -0.480377 0.788196 + -0.851029 1.16885 -2.55106 0.961848 -0.248345 0.114771 + -0.829275 1.24505 -2.54502 0.97641 -0.118939 0.180213 + -0.839621 1.23668 -2.50593 0.950809 -0.132504 0.280009 + -0.85271 1.29318 -2.44602 0.953834 -0.0165858 0.299875 + -0.824131 1.24066 -2.58161 0.994979 -0.0936058 0.0354266 + -0.831513 1.32636 -2.53217 0.980253 0.0789056 0.181322 + -0.841858 1.31798 -2.49307 0.951932 0.0791292 0.295911 + -0.85511 1.31488 -2.44981 0.952903 0.156852 0.259565 + -0.826689 1.29654 -2.58971 0.982066 0.109822 -0.153249 + -0.830941 1.35176 -2.56829 0.982874 0.16182 -0.0881616 + -0.851209 1.42879 -2.51838 0.929606 0.220327 0.295445 + -0.869253 1.38921 -2.46263 0.833821 0.316261 0.452463 + -0.882504 1.38611 -2.41937 0.905215 0.348195 0.24361 + -0.850637 1.45419 -2.5545 0.914089 0.399522 -0.0694501 + -0.869045 1.47487 -2.50963 0.450371 0.815023 0.36456 + -0.870421 1.4822 -2.55045 0.265064 0.96055 -0.0841732 + -0.896257 1.46308 -2.48865 -0.22154 0.858129 0.463178 + -0.887089 1.43529 -2.45388 0.299955 0.446597 0.842958 + -0.897632 1.47042 -2.52947 -0.390441 0.91849 0.0627135 + -0.920107 1.45833 -2.51853 -0.542513 0.832476 0.112527 + -0.925061 1.44439 -2.48453 -0.512913 0.744366 0.427597 + -0.915893 1.4166 -2.44975 -0.0692827 0.607753 0.791098 + -0.921798 1.45373 -2.57736 -0.519678 0.852963 -0.0488796 + -0.953587 1.43266 -2.53555 -0.581827 0.808137 0.0916093 + -0.958541 1.41872 -2.50155 -0.567659 0.787052 0.241481 + -0.967459 1.40174 -2.46741 -0.469628 0.78452 0.404941 + -0.934989 1.44534 -2.58484 -0.3171 0.864272 0.390489 + -0.966778 1.42428 -2.54303 -0.389897 0.896888 0.208741 + -0.983379 1.4083 -2.51108 -0.357696 0.877568 0.319262 + -0.992297 1.39131 -2.47694 -0.270847 0.886126 0.376061 + -0.976856 1.38687 -2.4505 -0.376359 0.853842 0.359594 + -0.945825 1.4539 -2.59787 0.00862971 0.854386 0.519567 + -0.97287 1.42479 -2.54844 -0.0404514 0.90323 0.427246 + -0.989471 1.40881 -2.51649 -0.00380139 0.904273 0.426938 + -1.00051 1.38963 -2.47497 0.0981652 0.898424 0.428016 + -0.996782 1.38135 -2.45573 -0.215565 0.906702 0.362523 + -1.01012 1.45852 -2.59516 0.111829 0.831013 0.544896 + -0.983706 1.43335 -2.56148 0.110045 0.853486 0.509364 + -1.00783 1.42542 -2.53927 0.226335 0.85279 0.470661 + -1.03424 1.45059 -2.57296 0.242654 0.877825 0.412967 + -1.01887 1.40624 -2.49774 0.29741 0.849331 0.436101 + -1.03239 1.39605 -2.46553 0.355674 0.821062 0.44649 + -1.00499 1.37967 -2.45376 0.0919162 0.894453 0.437612 + -0.999376 1.37777 -2.44788 -0.206506 0.923662 0.322806 + -0.979449 1.38329 -2.44266 -0.34661 0.918114 0.192165 + -0.925289 1.40173 -2.43285 -0.0513829 0.945575 0.321322 + -1.04273 1.38481 -2.43909 0.429836 0.801685 0.415382 + -1.01192 1.37339 -2.43923 0.121277 0.893529 0.432317 + -1.0063 1.37149 -2.43335 -0.233676 0.931842 0.277609 + -0.980221 1.38175 -2.42299 -0.371224 0.917588 0.142217 + -1.08827 1.42286 -2.45185 0.426117 0.859083 0.283552 + -1.05053 1.3776 -2.41105 0.568071 0.769255 0.292475 + -1.02226 1.36215 -2.41278 0.155148 0.896973 0.413967 + -1.01648 1.3611 -2.40822 -0.265174 0.926222 0.267946 + -0.990394 1.37137 -2.39786 -0.464011 0.87689 0.125531 + -1.09325 1.41411 -2.40858 0.415229 0.863528 0.286189 + -1.05104 1.3772 -2.40825 0.622306 0.746965 0.23405 + -1.02852 1.35678 -2.39971 0.28 0.90287 0.32623 + -1.02274 1.35574 -2.39516 -0.194354 0.944319 0.265495 + -1.00467 1.35807 -2.36786 -0.560909 0.798007 0.220376 + -1.09274 1.4032 -2.37737 0.320379 0.825035 0.465483 + -1.05053 1.3663 -2.37704 0.560245 0.79439 0.234669 + -1.02904 1.35638 -2.39692 0.355279 0.908303 0.220823 + -1.026 1.35042 -2.37727 0.289123 0.927375 0.237451 + -1.0197 1.34977 -2.37551 -0.30177 0.900714 0.312488 + -1.09486 1.38622 -2.35472 0.171952 0.832809 0.526176 + -1.04089 1.3488 -2.32091 0.425237 0.813488 0.39675 + -1.01635 1.33292 -2.32115 -0.0999424 0.994492 0.03158 + -1.12788 1.37252 -2.34763 -0.633704 0.60949 0.476384 + -1.10435 1.37495 -2.33329 -0.135443 0.802191 0.581503 + -1.05038 1.33753 -2.29949 0.06645 0.512045 0.856385 + -1.00133 1.34122 -2.31349 -0.338204 0.889775 0.306462 + -1.1388 1.35386 -2.35816 -0.912977 0.308797 0.266679 + -1.13502 1.34588 -2.32554 -0.785912 0.247448 0.566667 + -1.11149 1.3483 -2.31119 -0.291618 0.4455 0.846457 + -1.14148 1.32271 -2.34204 -0.858726 0.0330041 0.511372 + -1.12248 1.30853 -2.32584 -0.532563 -0.299047 0.7918 + -1.11603 1.3317 -2.30933 -0.439293 -0.140627 0.887269 + -1.05491 1.32093 -2.29762 -0.134271 -0.0906387 0.986791 + -0.999054 1.29229 -2.29894 -0.0651794 -0.270499 0.960511 + -0.98857 1.33391 -2.29523 -0.0910672 0.402129 0.911043 + -0.965906 1.38361 -2.34665 -0.464614 0.819483 0.335532 + -1.03163 1.2676 -2.31336 -0.0915104 -0.415923 0.904784 + -0.995083 1.20985 -2.34325 0.151109 -0.564242 0.811663 + -0.964126 1.2872 -2.29852 0.219764 -0.340606 0.914162 + -0.953642 1.32882 -2.2948 0.231449 0.138884 0.962882 + -0.953148 1.3763 -2.32838 -0.177089 0.709115 0.682492 + -1.02766 1.18516 -2.35767 0.0769188 -0.490747 0.8679 + -0.939121 1.26148 -2.32947 0.581246 -0.483077 0.65482 + -0.923982 1.32046 -2.31195 0.674161 -0.168656 0.71907 + -0.934902 1.34106 -2.30356 0.369274 0.260791 0.891978 + -0.890725 1.30614 -2.37069 0.828578 -0.213496 0.517569 + -0.902689 1.36227 -2.33865 0.836963 0.104198 0.537249 + -0.913609 1.38287 -2.33026 0.432614 0.508049 0.744803 + -0.934407 1.38854 -2.33714 -0.142712 0.75657 0.638149 + -0.925721 1.40547 -2.36051 -0.125967 0.953721 0.273036 + -0.872908 1.29932 -2.4042 0.872746 -0.143765 0.466525 + -0.884871 1.35545 -2.37217 0.908713 0.0655302 0.412246 + -0.88727 1.37715 -2.37596 0.902866 0.301393 0.306588 + -0.904923 1.3998 -2.35364 0.546583 0.695006 0.467133 + -0.900157 1.40875 -2.39705 0.37271 0.927874 0.0116933 + -0.926061 1.40019 -2.41319 -0.211593 0.973755 -0.0838376 + -0.951625 1.39691 -2.37665 -0.432442 0.901477 -0.0182436 + 0.987946 0.54202 -2.82794 0.314747 -0.758113 -0.571138 + 0.997797 0.583674 -2.84229 0.57196 -0.227225 -0.788182 + 1.00242 0.583273 -2.8373 0.815654 -0.202245 -0.542038 + 0.986215 0.583895 -2.84767 0.304597 -0.252697 -0.918349 + 0.994011 0.664209 -2.85276 0.576401 0.00390892 -0.817158 + 1.00283 0.663444 -2.84326 0.836168 -0.00551554 -0.548446 + 0.992571 0.541618 -2.82296 0.569947 -0.754798 -0.324716 + 0.969837 0.538851 -2.80456 -0.327952 -0.876351 0.352783 + 0.965146 0.539398 -2.81088 -0.49127 -0.865631 0.0966238 + 0.964997 0.54048 -2.8207 -0.47421 -0.819732 -0.321191 + 0.976634 0.541924 -2.83037 -0.100627 -0.76649 -0.634324 + 1.00691 0.582204 -2.82634 0.943677 -0.181814 -0.276437 + 1.00847 0.581138 -2.81623 0.983805 -0.178851 -0.0118181 + 0.994128 0.540551 -2.81285 0.64231 -0.764739 0.0511094 + 1.00732 0.662375 -2.83229 0.959681 -0.0220629 -0.280224 + 1.01029 0.66034 -2.81301 0.998707 -0.0508264 -0.000970925 + 1.00792 0.65881 -2.79987 0.939053 -0.0949233 0.330406 + 1.0061 0.579608 -2.80309 0.923809 -0.190563 0.332058 + 1.00774 0.761453 -2.82961 0.833553 0.059638 -0.549211 + 1.01479 0.756517 -2.81332 0.959144 -0.0194904 -0.282245 + 1.01776 0.754481 -2.79404 0.994713 -0.101179 -0.0175988 + 0.998922 0.76222 -2.83911 0.577709 0.132539 -0.80541 + 1.0087 0.88042 -2.8048 0.56572 0.167668 -0.807371 + 1.02098 0.874586 -2.79292 0.829802 0.0448848 -0.55625 + 1.02803 0.86965 -2.77662 0.948995 -0.0606477 -0.309405 + 0.980736 0.764743 -2.84695 0.304326 0.178861 -0.935625 + 0.990514 0.882944 -2.81263 0.307028 0.241703 -0.920496 + 0.999928 0.98995 -2.78141 0.232054 0.24215 -0.94208 + 1.02948 0.984916 -2.773 0.516343 0.120489 -0.847863 + 1.04177 0.979082 -2.76111 0.808312 -0.0403719 -0.587369 + 0.98243 0.664431 -2.85815 0.314251 0.00198932 -0.949338 + 0.959166 0.764559 -2.85158 -0.0536553 0.187806 -0.980739 + 0.960445 0.886619 -2.81796 -0.060877 0.274796 -0.959573 + 0.969859 0.993627 -2.78674 -0.0467908 0.309176 -0.949853 + 0.974903 0.583799 -2.8501 -0.0217184 -0.287312 -0.957591 + 0.96086 0.664247 -2.86277 -0.0562559 -0.0251938 -0.998098 + 0.932966 0.762391 -2.84343 -0.485838 0.152383 -0.860663 + 0.934244 0.884451 -2.80981 -0.476559 0.246822 -0.843783 + 0.927075 0.98972 -2.77383 -0.465841 0.261126 -0.845461 + 0.958226 0.58268 -2.84484 -0.432043 -0.335505 -0.837123 + 0.944182 0.663127 -2.85751 -0.467496 -0.0702007 -0.881203 + 0.910775 0.759637 -2.825 -0.75646 0.0909882 -0.64768 + 0.903272 0.875039 -2.78571 -0.760424 0.163012 -0.628636 + 0.896103 0.980307 -2.74972 -0.746515 0.121203 -0.654237 + 0.946589 0.581236 -2.83517 -0.67619 -0.372972 -0.635342 + 0.921991 0.660374 -2.83908 -0.745374 -0.12414 -0.654986 + 0.897648 0.753411 -2.80372 -0.961171 -0.0370587 -0.273452 + 0.890144 0.868814 -2.76442 -0.960313 0.0142307 -0.27856 + 0.877059 0.968103 -2.72052 -0.958223 -0.0487882 -0.28183 + 0.93824 0.5794 -2.82101 -0.867769 -0.417936 -0.268899 + 0.913643 0.658539 -2.82492 -0.937 -0.194307 -0.290302 + 0.897932 0.751349 -2.78499 -0.981591 -0.151304 0.116561 + 0.890512 0.858144 -2.74054 -0.983584 -0.146602 0.105215 + 0.877426 0.957433 -2.69664 -0.984458 -0.166027 0.0572543 + 0.93839 0.578319 -2.81119 -0.895967 -0.43484 0.0903148 + 0.913927 0.656476 -2.8062 -0.962066 -0.247728 0.114276 + 0.903445 0.746082 -2.76754 -0.884753 -0.241502 0.39861 + 0.896025 0.852877 -2.72309 -0.889135 -0.272227 0.367874 + 0.885224 0.944204 -2.66774 -0.902343 -0.331362 0.275638 + 0.941907 0.577135 -2.79946 -0.819989 -0.429965 0.377819 + 0.917445 0.655293 -2.79446 -0.875195 -0.276001 0.397313 + 0.91239 0.745039 -2.75548 -0.722376 -0.307996 0.619121 + 0.908478 0.845585 -2.70795 -0.728064 -0.367845 0.578457 + 0.897678 0.936912 -2.6526 -0.746277 -0.50435 0.434397 + 0.946598 0.576588 -2.79314 -0.68616 -0.416997 0.596069 + 0.92639 0.654249 -2.78241 -0.720316 -0.287327 0.631338 + 0.924211 0.742007 -2.74573 -0.543434 -0.349792 0.763102 + 0.920299 0.842552 -2.6982 -0.546813 -0.44217 0.710972 + 0.915673 0.920278 -2.64408 -0.571542 -0.567879 0.592328 + 0.954129 0.576099 -2.78652 -0.518299 -0.395967 0.758008 + 0.933921 0.65376 -2.77579 -0.547721 -0.289795 0.78487 + 0.935026 0.741769 -2.74041 -0.210655 -0.389935 0.896423 + 0.935371 0.839004 -2.69171 -0.213408 -0.503343 0.837319 + 0.930745 0.916726 -2.63758 -0.200866 -0.671679 0.713091 + 0.9598 0.575973 -2.78373 -0.206821 -0.349201 0.913938 + 0.944736 0.653521 -2.77047 -0.216427 -0.27386 0.937102 + 0.957243 0.741721 -2.74101 0.124426 -0.381724 0.915863 + 0.957588 0.838956 -2.6923 0.124447 -0.501602 0.856101 + 0.975509 0.538725 -2.80177 -0.0185124 -0.842729 0.53802 + 0.973945 0.576454 -2.78396 0.13036 -0.281896 0.950548 + 0.958881 0.654004 -2.7707 0.12086 -0.232587 0.965037 + 0.983544 0.743223 -2.74693 0.368552 -0.363115 0.855755 + 0.994271 0.841053 -2.70056 0.367816 -0.476657 0.798442 + 0.989302 0.539512 -2.80488 0.40503 -0.796139 0.44957 + 0.987738 0.577242 -2.78706 0.369585 -0.249085 0.895189 + 0.985181 0.655504 -2.77662 0.378428 -0.202257 0.903263 + 1.0048 0.746669 -2.75918 0.700584 -0.305787 0.64473 + 1.00127 0.578569 -2.79511 0.709695 -0.217832 0.669987 + 0.998712 0.656831 -2.78467 0.708462 -0.155975 0.688297 + 1.01401 0.748649 -2.77438 0.928875 -0.199865 0.31184 + 1.02839 0.852705 -2.73245 0.918584 -0.290291 0.268205 + 1.01553 0.844499 -2.71281 0.693033 -0.407387 0.594761 + 1.03214 0.858538 -2.75211 0.984747 -0.167407 -0.0474118 + 1.05609 0.956349 -2.71154 0.955449 -0.287842 -0.0653049 + 1.04433 0.934346 -2.68809 0.882035 -0.387309 0.268338 + 1.03147 0.926142 -2.66845 0.705381 -0.496106 0.506277 + 0.999984 0.910055 -2.65635 0.387036 -0.59509 0.704323 + 1.05198 0.967463 -2.73606 0.925331 -0.168578 -0.339625 + 1.0884 1.05881 -2.70415 0.93478 -0.2186 -0.280001 + 1.08784 1.03906 -2.65981 0.946229 -0.323299 0.011355 + 1.07608 1.01706 -2.63636 0.88807 -0.437073 -0.142472 + 1.03839 0.968117 -2.63106 0.690054 -0.723252 0.0270575 + 1.07819 1.07044 -2.72921 0.780503 -0.0701201 -0.621207 + 1.09758 1.13993 -2.71023 0.802931 -0.0429362 -0.594524 + 1.1102 1.13024 -2.67529 0.958558 -0.177376 -0.222946 + 1.10964 1.11049 -2.63095 0.969999 -0.177352 -0.166275 + 1.0836 1.00664 -2.61366 0.639169 -0.303516 -0.706641 + 1.05317 1.08021 -2.74869 0.465188 0.112529 -0.87803 + 1.07256 1.1497 -2.72971 0.446705 0.107534 -0.888195 + 1.08019 1.19637 -2.72071 0.441207 0.118918 -0.889491 + 1.10738 1.18459 -2.69952 0.810642 -0.014027 -0.585374 + 1.12001 1.17491 -2.66458 0.973171 -0.137212 -0.184691 + 1.02362 1.08524 -2.75711 0.130927 0.226315 -0.965215 + 1.033 1.1579 -2.73778 0.0918917 0.203959 -0.974657 + 1.04063 1.20456 -2.72877 0.0883932 0.184283 -0.97889 + 1.09014 1.26099 -2.7058 0.484544 0.125036 -0.865785 + 1.11733 1.24921 -2.68462 0.795821 0.0283972 -0.604866 + 0.972767 1.0861 -2.75409 -0.170756 0.289218 -0.941911 + 0.982147 1.15875 -2.73476 -0.175982 0.238265 -0.955123 + 0.985439 1.21494 -2.72337 -0.188342 0.232976 -0.95407 + 1.0019 1.26921 -2.71213 -0.119223 0.198162 -0.972891 + 1.05709 1.25883 -2.71753 0.146855 0.176704 -0.973247 + 0.929983 1.08219 -2.74118 -0.385176 0.292744 -0.87518 + 0.92431 1.14823 -2.71871 -0.391233 0.235568 -0.889631 + 0.927602 1.20442 -2.70733 -0.372542 0.201684 -0.905834 + 0.870745 1.07144 -2.71135 -0.699818 0.150315 -0.698327 + 0.865072 1.13749 -2.68888 -0.675653 0.152855 -0.721199 + 0.861538 1.16186 -2.68141 -0.682124 0.143505 -0.717017 + 0.868219 1.24203 -2.66812 -0.580575 0.15414 -0.799483 + 0.934282 1.28459 -2.69404 -0.353678 0.168968 -0.919979 + 0.8517 1.05924 -2.68214 -0.971742 -0.136094 -0.192859 + 0.840866 1.11642 -2.65408 -0.983871 -0.0973136 -0.150093 + 0.837332 1.14079 -2.6466 -0.979924 -0.0931913 -0.176251 + 0.831071 1.17745 -2.63209 -0.978199 -0.0947031 -0.18482 + 0.865363 1.04126 -2.64315 -0.951262 -0.264788 0.158077 + 0.854529 1.09843 -2.61509 -0.957178 -0.218926 0.189424 + 0.852146 1.12779 -2.60216 -0.957166 -0.20616 0.203302 + 0.845885 1.16446 -2.58764 -0.945983 -0.25868 0.195448 + 0.873162 1.02803 -2.61425 -0.972441 -0.212683 0.0955218 + 0.86407 1.08456 -2.57384 -0.979238 -0.172113 0.107099 + 0.861687 1.11392 -2.56091 -0.977969 -0.170595 0.120308 + 0.851029 1.16885 -2.55106 -0.963132 -0.237416 0.126533 + 0.824131 1.24066 -2.58161 -0.995574 -0.083762 0.0426153 + 0.87787 1.01106 -2.57668 -0.90883 -0.377834 0.17683 + 0.868778 1.06759 -2.53626 -0.949647 -0.230657 0.212056 + 0.866668 1.10639 -2.51694 -0.948296 -0.206688 0.240863 + 0.856009 1.16132 -2.50709 -0.949884 -0.216402 0.225587 + 0.895865 0.994424 -2.56815 -0.695386 -0.694595 0.184325 + 0.901376 0.991044 -2.52247 -0.8106 -0.424983 0.402886 + 0.884215 1.05816 -2.50507 -0.796943 -0.331244 0.505133 + 0.882104 1.09696 -2.48575 -0.787024 -0.292682 0.543076 + 0.871687 1.15593 -2.47057 -0.792053 -0.221006 0.569042 + 0.935615 0.955693 -2.59324 -0.389208 -0.860238 0.329405 + 0.946387 0.944402 -2.56808 -0.679977 -0.499001 -0.537242 + 0.906638 0.983132 -2.54299 -0.8216 -0.565443 -0.0724466 + 0.963302 0.907958 -2.64809 0.140922 -0.643664 0.752222 + 0.968171 0.946924 -2.60376 -0.0518793 -0.982319 0.179883 + 0.97527 0.937947 -2.5867 -0.423606 -0.498285 -0.756485 + 0.959722 0.886523 -2.57604 -0.762568 -0.106516 -0.638079 + 0.951332 0.882736 -2.55468 -0.924249 -0.24845 -0.289889 + 1.00689 0.95203 -2.61896 0.35333 -0.92978 0.10328 + 1.01399 0.943052 -2.6019 -0.132118 -0.450158 -0.883121 + 0.988605 0.880068 -2.59465 -0.472837 0.00799295 -0.881114 + 0.998872 0.806418 -2.59956 -0.536595 -0.0478441 -0.842483 + 0.982965 0.80307 -2.58489 -0.800322 -0.138274 -0.583408 + 1.0459 0.957702 -2.60835 0.0874554 -0.346659 -0.933905 + 1.01727 0.884079 -2.60747 -0.320112 0.0429812 -0.946404 + 1.02754 0.810431 -2.61238 -0.262063 -0.00013178 -0.965051 + 1.04918 0.898729 -2.61392 0.0245274 0.017327 -0.999549 + 1.04952 0.812386 -2.61464 0.103179 0.0159324 -0.994535 + 1.03571 0.720992 -2.61362 -0.265146 0.0393099 -0.963407 + 1.01516 0.718116 -2.60443 -0.548501 -0.00795235 -0.836112 + 0.999249 0.714768 -2.58976 -0.81873 -0.085002 -0.567852 + 1.07173 0.899269 -2.60639 0.429908 -0.0426861 -0.901863 + 1.07207 0.812925 -2.60711 0.461009 0.0202921 -0.887164 + 1.07386 0.723332 -2.61049 0.46477 0.0795256 -0.881853 + 1.05769 0.722945 -2.61589 0.11051 0.0712288 -0.991319 + 1.10668 1.01755 -2.59929 0.772028 -0.15355 -0.616761 + 1.09481 0.910179 -2.59202 0.699479 -0.0814139 -0.710001 + 1.08755 0.812336 -2.59548 0.718718 0.00540434 -0.695281 + 1.11904 1.09943 -2.58885 0.935383 -0.0609495 -0.348344 + 1.12524 1.01362 -2.56363 0.934191 -0.109256 -0.339634 + 1.10833 0.908268 -2.57246 0.915023 -0.0934332 -0.392433 + 1.10107 0.810427 -2.57592 0.917366 -0.0182307 -0.397626 + 1.12827 1.16642 -2.56773 0.916495 -0.0637501 -0.394933 + 1.13759 1.0955 -2.55319 0.932415 -0.075096 -0.353501 + 1.13119 1.0094 -2.5323 0.985605 -0.154897 -0.0677514 + 1.11428 0.904054 -2.54113 0.991718 -0.120902 -0.0433471 + 1.10538 0.80779 -2.55604 0.997264 -0.053058 -0.0514714 + 1.11888 1.17747 -2.60983 0.984639 -0.134004 -0.111936 + 1.13103 1.2421 -2.59744 0.963626 -0.22808 -0.139301 + 1.14208 1.23005 -2.55351 0.900858 -0.150553 -0.407171 + 1.14901 1.14333 -2.53409 0.924846 -0.0943328 -0.368457 + 1.13216 1.23954 -2.65219 0.965927 -0.123771 -0.227299 + 1.15182 1.31268 -2.59848 0.966166 -0.0273945 -0.256462 + 1.16287 1.30063 -2.55454 0.955692 -0.096258 -0.278186 + 1.17659 1.27611 -2.50215 0.971841 -0.0666209 -0.226025 + 1.16281 1.20696 -2.51987 0.927666 -0.101556 -0.359335 + 1.14094 1.31582 -2.63344 0.936773 0.0667136 -0.34352 + 1.13698 1.37706 -2.61403 0.907712 0.317374 -0.274468 + 1.14786 1.37391 -2.57907 0.892462 0.397913 -0.212549 + 1.16205 1.35816 -2.54154 0.931142 0.308527 -0.194385 + 1.12611 1.3255 -2.66586 0.828528 0.117144 -0.547557 + 1.12174 1.38945 -2.64227 0.847024 0.342069 -0.406866 + 1.11399 1.43808 -2.58024 0.869691 0.485386 -0.0896594 + 1.12543 1.41096 -2.55294 0.863571 0.502391 -0.0429885 + 1.13962 1.39521 -2.51541 0.783226 0.594915 -0.180646 + 1.10373 1.35185 -2.68466 0.558573 0.241557 -0.793503 + 1.09936 1.4158 -2.66107 0.63565 0.483752 -0.601609 + 1.09875 1.45047 -2.60848 0.698105 0.641172 -0.318666 + 1.09815 1.46439 -2.55821 0.424709 0.862599 0.274855 + 1.07067 1.34969 -2.69638 0.181525 0.227355 -0.956744 + 1.07108 1.41769 -2.67773 0.295818 0.468546 -0.83244 + 1.08251 1.44345 -2.64039 0.47912 0.716705 -0.506732 + 1.06681 1.46496 -2.62013 0.324433 0.889911 -0.320627 + 1.08305 1.47199 -2.58823 0.233902 0.971903 -0.0263657 + 0.984992 1.30116 -2.70562 -0.15007 0.150493 -0.977155 + 1.05377 1.38164 -2.68987 0.0639528 0.246367 -0.967064 + 1.00678 1.42268 -2.67934 0.0303983 0.440531 -0.897223 + 1.05423 1.44533 -2.65705 0.25189 0.674749 -0.693733 + 1.04387 1.46803 -2.63609 0.281663 0.877357 -0.388472 + 0.989471 1.38663 -2.69149 -0.129266 0.252697 -0.958872 + 0.984619 1.43677 -2.67203 -0.0806959 0.452751 -0.887978 + 1.03207 1.45942 -2.64973 0.172443 0.663187 -0.728318 + 0.994238 1.48267 -2.63483 0.113418 0.983473 -0.141127 + 1.03184 1.47121 -2.61748 0.122801 0.972111 0.199798 + 0.938761 1.37007 -2.67991 -0.370233 0.213149 -0.904154 + 0.94975 1.43807 -2.66388 -0.299035 0.398689 -0.866963 + 0.982433 1.47406 -2.64846 -0.0170661 0.710269 -0.703724 + 0.968794 1.48219 -2.62952 -0.131853 0.980579 0.145185 + 1.00639 1.47073 -2.61217 -0.00772869 0.860127 0.510021 + 0.890704 1.39669 -2.64796 -0.546375 0.237799 -0.803073 + 0.901693 1.4647 -2.63194 -0.248292 0.809819 -0.531549 + 0.920867 1.45928 -2.62568 -0.0361548 0.971886 -0.232661 + 0.947564 1.47536 -2.64032 -0.427905 0.810497 -0.399991 + 0.942097 1.46611 -2.61488 -0.136237 0.922781 0.360437 + 0.833628 1.23334 -2.64018 -0.844625 0.0435963 -0.53358 + 0.856113 1.388 -2.62003 -0.803156 0.231255 -0.549055 + 0.880149 1.47123 -2.59456 -0.322878 0.874982 -0.360773 + 0.899324 1.46581 -2.5883 0.313253 0.949669 0.0014485 + 0.826689 1.29654 -2.58971 -0.985476 0.105748 -0.132868 + 0.830941 1.35176 -2.56829 -0.983881 0.156422 -0.0866655 + 0.860366 1.44322 -2.59861 -0.707207 0.393229 -0.587562 + 0.870421 1.4822 -2.55045 -0.321848 0.946217 -0.0329823 + 0.829275 1.24505 -2.54502 -0.977149 -0.117161 0.177352 + 0.831513 1.32636 -2.53217 -0.979601 0.0821127 0.183413 + 0.850637 1.45419 -2.5545 -0.901783 0.432183 -0.00239404 + 0.839621 1.23668 -2.50593 -0.949246 -0.134066 0.284532 + 0.841858 1.31798 -2.49307 -0.954846 0.101224 0.279325 + 0.869253 1.38921 -2.46263 -0.909505 0.226027 0.348873 + 0.851209 1.42879 -2.51838 -0.927781 0.236296 0.288768 + 0.855299 1.23129 -2.46941 -0.894114 -0.187062 0.4069 + 0.85271 1.29318 -2.44602 -0.943243 -0.05159 0.328073 + 0.85511 1.31488 -2.44981 -0.939949 0.187947 0.284906 + 0.882504 1.38611 -2.41937 -0.796883 0.548155 0.253977 + 0.887089 1.43529 -2.45388 -0.315207 0.615308 0.722524 + 0.898877 1.14416 -2.44938 -0.704967 -0.285147 0.649395 + 0.875496 1.23743 -2.42759 -0.797324 -0.276447 0.536518 + 0.872908 1.29932 -2.4042 -0.854907 -0.177021 0.487645 + 0.884871 1.35545 -2.37217 -0.912129 0.0578571 0.4058 + 0.88727 1.37715 -2.37596 -0.904135 0.306716 0.297431 + 0.909294 1.08518 -2.46457 -0.608674 -0.388468 0.691815 + 0.929246 1.15389 -2.41 -0.565243 -0.396482 0.723396 + 0.905865 1.24716 -2.38821 -0.75964 -0.321651 0.565233 + 0.890725 1.30614 -2.37069 -0.832401 -0.226854 0.505615 + 0.902689 1.36227 -2.33865 -0.828869 0.0837425 0.55314 + 0.909084 1.05672 -2.48303 -0.595346 -0.388792 0.703138 + 0.94123 1.06063 -2.45651 -0.555259 -0.370464 0.744609 + 0.941441 1.08909 -2.43805 -0.436782 -0.466273 0.769293 + 0.970078 1.18412 -2.3742 -0.38829 -0.493812 0.778062 + 0.939121 1.26148 -2.32947 -0.574656 -0.442021 0.688758 + 0.926244 0.989602 -2.50043 -0.660747 -0.319605 0.679166 + 0.947515 0.988032 -2.47932 -0.640773 -0.281272 0.71435 + 0.976925 1.05923 -2.42945 -0.427862 -0.319987 0.845306 + 0.982273 1.11932 -2.40225 -0.323441 -0.428492 0.843671 + 0.995083 1.20985 -2.34325 -0.157687 -0.516432 0.841684 + 0.94607 0.890647 -2.53416 -0.94841 -0.314742 0.0381689 + 0.948293 0.888791 -2.52055 -0.866167 -0.286237 0.409663 + 0.969564 0.887221 -2.49944 -0.68352 -0.268036 0.678939 + 0.983211 0.986638 -2.45225 -0.445047 -0.282407 0.849811 + 1.02824 1.06834 -2.41296 -0.117636 -0.360854 0.925174 + 0.974575 0.799283 -2.56353 -0.935873 -0.193842 -0.294221 + 0.971928 0.796861 -2.54853 -0.971737 -0.232327 -0.0418498 + 0.974151 0.795004 -2.53492 -0.90073 -0.261043 0.347191 + 0.984676 0.793525 -2.51975 -0.749839 -0.256518 0.609869 + 0.991862 0.88563 -2.47769 -0.505107 -0.255457 0.824383 + 0.993234 0.71205 -2.57445 -0.945975 -0.146477 -0.289266 + 0.990587 0.70963 -2.55944 -0.97929 -0.200358 -0.0291079 + 0.992181 0.708298 -2.54969 -0.903422 -0.259878 0.341015 + 1.00271 0.706819 -2.53452 -0.740571 -0.287228 0.607499 + 1.00697 0.791935 -2.498 -0.512016 -0.260521 0.818516 + 1.01579 0.628792 -2.60633 -0.824134 -0.0222522 -0.565958 + 1.00978 0.626076 -2.59102 -0.952397 -0.113574 -0.282916 + 1.0081 0.624545 -2.58153 -0.980802 -0.192541 -0.0308912 + 1.0097 0.623214 -2.57178 -0.895208 -0.292463 0.336256 + 1.02585 0.630909 -2.6156 -0.561691 0.0751339 -0.823928 + 1.02995 0.543948 -2.62785 -0.809956 -0.125098 -0.572994 + 1.02685 0.542552 -2.61998 -0.926257 -0.225626 -0.301896 + 1.02518 0.541021 -2.61049 -0.947032 -0.316871 -0.0521857 + 1.026 0.540337 -2.60548 -0.860336 -0.419876 0.28901 + 1.0464 0.633785 -2.62479 -0.267439 0.132618 -0.954405 + 1.05057 0.547545 -2.64185 -0.268027 0.0477455 -0.962227 + 1.04 0.546065 -2.63712 -0.544351 -0.00889653 -0.83881 + 1.04974 0.502079 -2.63603 -0.422816 -0.686006 -0.592134 + 1.04665 0.500682 -2.62816 -0.554379 -0.805867 -0.207947 + 1.0603 0.635021 -2.62623 0.0989327 0.158535 -0.982384 + 1.06447 0.54878 -2.64328 0.112793 0.0671725 -0.991345 + 1.06031 0.503558 -2.64075 0.00466642 -0.612756 -0.790258 + 1.07647 0.635409 -2.62083 0.465277 0.146974 -0.872878 + 1.07278 0.548979 -2.6405 0.460168 0.0463376 -0.886622 + 1.06862 0.503757 -2.63797 0.433434 -0.630586 -0.643814 + 1.04747 0.499998 -2.62314 -0.470179 -0.872482 0.133066 + 1.03266 0.539402 -2.59588 -0.688048 -0.482461 0.542053 + 1.08626 0.635036 -2.61347 0.722361 0.106177 -0.683317 + 1.08257 0.548607 -2.63315 0.722697 -0.00993789 -0.691094 + 1.0736 0.503052 -2.63077 0.65789 -0.698827 -0.280752 + 1.05569 0.499412 -2.61513 -0.147125 -0.899693 0.410983 + 1.08934 0.722745 -2.59886 0.72634 0.0638904 -0.68436 + 1.09595 0.633667 -2.59945 0.92152 0.0295302 -0.387206 + 1.08755 0.547902 -2.62594 0.906116 -0.0936436 -0.412535 + 1.09027 0.546235 -2.61337 0.976583 -0.203776 -0.0690043 + 1.07232 0.501492 -2.6209 0.583831 -0.802985 0.11982 + 1.09904 0.721375 -2.58483 0.919627 0.0253546 -0.391973 + 1.09868 0.632 -2.58687 0.99689 -0.0619245 -0.0487428 + 1.08899 0.544675 -2.60351 0.934364 -0.294293 0.200884 + 1.08432 0.542717 -2.59263 0.791187 -0.393912 0.467821 + 1.06726 0.500393 -2.61599 0.293305 -0.877701 0.378963 + 1.10334 0.71874 -2.56495 0.998754 -0.031418 -0.0387635 + 1.09617 0.628966 -2.56769 0.958432 -0.148798 0.243447 + 1.0915 0.627008 -2.55681 0.820517 -0.23856 0.519462 + 1.07925 0.541618 -2.58772 0.521297 -0.480539 0.705217 + 1.10084 0.715706 -2.54576 0.963889 -0.0867574 0.251776 + 1.09345 0.712609 -2.52855 0.824137 -0.154241 0.544984 + 1.08166 0.624867 -2.54726 0.530313 -0.329002 0.781362 + 1.06941 0.623335 -2.54301 0.227654 -0.374912 0.898674 + 1.06701 0.540086 -2.58347 0.22201 -0.524586 0.821901 + 1.10189 0.803559 -2.52927 0.963508 -0.0936371 0.250766 + 1.0945 0.800461 -2.51207 0.830416 -0.152188 0.535956 + 1.08361 0.710468 -2.51901 0.537032 -0.224469 0.813148 + 1.11079 0.899823 -2.51437 0.971224 -0.157704 0.178472 + 1.10344 0.895543 -2.48919 0.852377 -0.221128 0.473873 + 1.08077 0.797475 -2.49876 0.531209 -0.210876 0.820578 + 1.0614 0.795053 -2.49203 0.216387 -0.231473 0.948471 + 1.06424 0.708045 -2.51229 0.220171 -0.267296 0.938124 + 1.12641 1.00262 -2.48896 0.966955 -0.19798 0.160628 + 1.11906 0.99834 -2.46379 0.923091 -0.248697 0.293349 + 1.08971 0.892558 -2.47588 0.513149 -0.276033 0.812701 + 1.14487 1.08771 -2.51268 0.981384 -0.178742 -0.0702674 + 1.14009 1.08092 -2.46934 0.964278 -0.230723 0.13013 + 1.13367 1.07878 -2.43703 0.929718 -0.269078 0.251437 + 1.11163 0.995224 -2.44649 0.656345 -0.339259 0.67388 + 1.15628 1.13553 -2.49358 0.97966 -0.196767 -0.039355 + 1.15085 1.13817 -2.44417 0.960349 -0.237198 0.146514 + 1.14443 1.13603 -2.41186 0.924564 -0.272338 0.266483 + 1.12625 1.07567 -2.41973 0.63928 -0.37914 0.66901 + 1.08301 0.991956 -2.43864 0.148433 -0.315211 0.937342 + 1.16746 1.19466 -2.47423 0.983086 -0.183135 -0.00209252 + 1.16203 1.19729 -2.42483 0.967483 -0.199114 0.155979 + 1.15392 1.18608 -2.39687 0.932199 -0.23209 0.277739 + 1.1364 1.13472 -2.39265 0.612832 -0.36903 0.698751 + 1.18124 1.2638 -2.45652 0.994293 -0.0962252 0.0460668 + 1.17078 1.25956 -2.40942 0.97265 -0.104292 0.207548 + 1.16267 1.24834 -2.38147 0.927814 -0.166154 0.333996 + 1.14588 1.18477 -2.37766 0.679575 -0.334967 0.652667 + 1.10035 1.13172 -2.38429 0.143664 -0.416404 0.897758 + 1.17934 1.31858 -2.44536 0.984294 0.13707 0.111249 + 1.16889 1.31433 -2.39827 0.9439 0.193923 0.267294 + 1.16229 1.3028 -2.37069 0.906753 0.132379 0.400344 + 1.16159 1.27016 -2.37019 0.904673 -0.0830735 0.41793 + 1.1448 1.20659 -2.36638 0.634223 -0.301725 0.711845 + 1.17577 1.33363 -2.48915 0.981536 0.163274 -0.0996451 + 1.16392 1.37191 -2.43618 0.927317 0.317474 0.198224 + 1.1542 1.34868 -2.39596 0.889209 0.310727 0.335792 + 1.1476 1.33715 -2.36837 0.885633 0.29452 0.359044 + 1.16035 1.38697 -2.47996 0.874099 0.472542 -0.112492 + 1.14797 1.4016 -2.42365 0.816306 0.520095 0.251286 + 1.13825 1.37837 -2.38343 0.879846 0.321204 0.350283 + 1.1388 1.35386 -2.35816 0.908964 0.309905 0.278824 + 1.12271 1.42414 -2.49449 0.77297 0.613209 -0.162766 + 1.14345 1.41591 -2.45904 0.745012 0.666919 -0.0132562 + 1.12521 1.41402 -2.39556 0.350047 0.839597 0.415385 + 1.12732 1.39703 -2.37291 0.529964 0.647941 0.547092 + 1.12788 1.37252 -2.34763 0.633704 0.60949 0.476384 + 1.10958 1.43727 -2.53091 0.807849 0.589261 -0.0123 + 1.10257 1.4502 -2.51064 0.299789 0.941673 0.152899 + 1.1157 1.43707 -2.47422 0.296098 0.947993 0.116767 + 1.12068 1.42832 -2.43095 0.202895 0.94604 0.252669 + 1.0872 1.45862 -2.55028 -0.101398 0.902043 0.419567 + 1.0651 1.43849 -2.51953 -0.365941 0.850762 0.377215 + 1.08047 1.43007 -2.47989 -0.400776 0.844491 0.355264 + 1.08827 1.42286 -2.45185 -0.426107 0.859088 0.283549 + 1.09325 1.41411 -2.40858 -0.415227 0.863527 0.286196 + 1.07211 1.46623 -2.58029 -0.266725 0.903942 0.334284 + 1.05158 1.44868 -2.55174 -0.321343 0.865676 0.383853 + 1.03239 1.39605 -2.46553 -0.310864 0.836032 0.452122 + 1.04273 1.38481 -2.43909 -0.428083 0.807162 0.406491 + 1.05053 1.3776 -2.41105 -0.56815 0.769207 0.292449 + 1.05477 1.46814 -2.60152 -0.0989378 0.98452 0.144679 + 1.03424 1.45059 -2.57296 -0.239177 0.872383 0.426313 + 1.01887 1.40624 -2.49774 -0.296905 0.851189 0.43281 + 1.01012 1.45852 -2.59516 -0.193792 0.797486 0.571367 + 1.00783 1.42542 -2.53927 -0.193781 0.858121 0.475477 + 0.989471 1.40881 -2.51649 0.00476487 0.906329 0.422545 + 1.00051 1.38963 -2.47497 -0.0955533 0.897131 0.431307 + 0.945825 1.4539 -2.59787 -0.0250903 0.822875 0.567669 + 0.983706 1.43335 -2.56148 -0.110033 0.853487 0.509366 + 0.97287 1.42479 -2.54844 0.0404528 0.903227 0.427253 + 0.966778 1.42428 -2.54303 0.380226 0.893452 0.239106 + 0.983379 1.4083 -2.51108 0.336158 0.889576 0.309279 + 0.934989 1.44534 -2.58484 0.390867 0.828509 0.400994 + 0.953587 1.43266 -2.53555 0.603205 0.790734 0.104323 + 0.958541 1.41872 -2.50155 0.537446 0.790063 0.294878 + 0.992297 1.39131 -2.47694 0.263415 0.883641 0.387029 + 0.921798 1.45373 -2.57736 0.507489 0.845633 0.165406 + 0.920107 1.45833 -2.51853 0.542512 0.832478 0.112524 + 0.925061 1.44439 -2.48453 0.558694 0.691864 0.457368 + 0.915893 1.4166 -2.44975 0.316288 0.703462 0.636477 + 0.967459 1.40174 -2.46741 0.423473 0.820583 0.383816 + 0.897632 1.47042 -2.52947 0.392928 0.916927 0.0696626 + 0.896257 1.46308 -2.48865 0.221543 0.858125 0.463184 + 0.925289 1.40173 -2.43285 0.137979 0.919375 0.36839 + 0.869045 1.47487 -2.50963 -0.481698 0.812999 0.327109 + 0.976856 1.38687 -2.4505 0.376357 0.853843 0.359594 + 0.979449 1.38329 -2.44266 0.323786 0.929389 0.177196 + 0.996782 1.38135 -2.45573 0.215565 0.906702 0.362523 + 0.926061 1.40019 -2.41319 0.10809 0.988204 -0.108484 + 0.980221 1.38175 -2.42299 0.400273 0.912347 0.0860484 + 0.999376 1.37777 -2.44788 0.224358 0.929167 0.293788 + 1.00499 1.37967 -2.45376 -0.0919162 0.894453 0.437612 + 0.900157 1.40875 -2.39705 -0.392869 0.91051 -0.128943 + 0.951625 1.39691 -2.37665 0.405354 0.911567 0.0687989 + 0.990394 1.37137 -2.39786 0.505034 0.851674 0.139969 + 1.0063 1.37149 -2.43335 0.249941 0.925642 0.284107 + 1.01192 1.37339 -2.43923 -0.121277 0.893529 0.432317 + 0.904923 1.3998 -2.35364 -0.546584 0.695006 0.467132 + 0.925721 1.40547 -2.36051 0.166479 0.943247 0.287351 + 0.934407 1.38854 -2.33714 0.154179 0.776337 0.611171 + 0.965906 1.38361 -2.34665 0.442761 0.835566 0.325258 + 0.913609 1.38287 -2.33026 -0.427888 0.509488 0.746548 + 0.934902 1.34106 -2.30356 -0.36947 0.224604 0.90169 + 0.953642 1.32882 -2.2948 -0.261363 0.113784 0.95851 + 0.953148 1.3763 -2.32838 0.178339 0.705545 0.685858 + 1.00133 1.34122 -2.31349 0.581175 0.611366 0.537091 + 1.00467 1.35807 -2.36786 0.560645 0.797741 0.222008 + 0.923982 1.32046 -2.31195 -0.564815 -0.21977 0.795415 + 0.964126 1.2872 -2.29852 -0.272026 -0.322621 0.906596 + 0.98857 1.33391 -2.29523 0.3075 0.366199 0.878261 + 0.999054 1.29229 -2.29894 0.202249 -0.194391 0.959848 + 1.03163 1.2676 -2.31336 0.0884451 -0.287302 0.953748 + 1.01635 1.33292 -2.32115 0.246751 0.578691 0.777323 + 1.0197 1.34977 -2.37551 0.301769 0.900714 0.312488 + 1.02274 1.35574 -2.39516 0.202451 0.942425 0.266175 + 1.02766 1.18516 -2.35767 0.0305372 -0.452893 0.891042 + 1.09442 1.18844 -2.3562 0.157629 -0.433256 0.88738 + 1.11827 1.21179 -2.35083 0.331964 -0.368864 0.868182 + 1.05547 1.29095 -2.308 -0.0301127 -0.185052 0.982267 + 1.04089 1.3488 -2.32091 -0.507567 0.665734 0.546968 + 1.03359 1.12844 -2.38576 -0.0801297 -0.444578 0.892149 + 1.12305 1.27855 -2.33621 0.393966 -0.259332 0.881781 + 1.0902 1.07266 -2.41137 0.119314 -0.380754 0.916946 + 1.02105 0.987635 -2.44024 -0.154308 -0.278709 0.947898 + 1.0297 0.886628 -2.46568 -0.103472 -0.260766 0.959841 + 1.06108 0.889287 -2.46803 0.183974 -0.274038 0.943958 + 1.03002 0.792394 -2.48968 -0.12729 -0.247442 0.960505 + 1.04174 0.706138 -2.5106 -0.108579 -0.29611 0.948962 + 1.04691 0.621429 -2.54133 -0.105556 -0.398376 0.911128 + 1.01869 0.705681 -2.51892 -0.508879 -0.303801 0.805449 + 1.03234 0.621138 -2.54659 -0.488823 -0.386644 0.782022 + 1.05544 0.539107 -2.5826 -0.0808367 -0.541862 0.836571 + 1.01635 0.62228 -2.56218 -0.730254 -0.346054 0.589046 + 1.04087 0.538816 -2.58787 -0.468016 -0.521579 0.713384 + 1.02226 1.36215 -2.41278 -0.155148 0.896973 0.413967 + 1.02852 1.35678 -2.39971 -0.28 0.90287 0.32623 + 1.05104 1.3772 -2.40825 -0.622327 0.746934 0.23409 + 1.01648 1.3611 -2.40822 0.267526 0.927142 0.26237 + 1.02904 1.35638 -2.39692 -0.355279 0.908303 0.220823 + 1.05053 1.3663 -2.37704 -0.604503 0.774731 0.185385 + 1.09274 1.4032 -2.37737 -0.291054 0.854274 0.430702 + 1.09486 1.38622 -2.35472 -0.0296707 0.815359 0.578194 + 1.10435 1.37495 -2.33329 0.135446 0.80219 0.581503 + 1.13502 1.34588 -2.32554 0.785912 0.247448 0.566667 + 1.05038 1.33753 -2.29949 -0.531035 0.271629 0.802633 + 1.11149 1.3483 -2.31119 0.291618 0.4455 0.846457 + 1.026 1.35042 -2.37727 -0.289128 0.927375 0.237444 + 1.11603 1.3317 -2.30933 0.439293 -0.140627 0.887269 + 1.05491 1.32093 -2.29762 -0.377026 -0.174552 0.909606 + 1.12248 1.30853 -2.32584 0.517317 -0.279085 0.809008 + 1.14148 1.32271 -2.34204 0.858726 0.0330041 0.511372 + 1.15027 1.30599 -2.35226 0.805698 0.0997527 0.583866 + 1.14957 1.27336 -2.35176 0.685183 -0.13648 0.71547 + -0.872043 1.89298 -1.22862 0.906308 0.309655 -0.287609 + -0.870466 1.89166 -1.22009 0.991227 0.124971 0.0430212 + -0.875993 1.86509 -1.23433 0.963138 -0.268909 -0.00727253 + -0.878416 1.90396 -1.21984 0.682344 0.718651 -0.133966 + -0.876839 1.90264 -1.21131 0.798859 0.588623 0.123882 + -0.873278 1.89039 -1.20845 0.877273 -0.0865625 0.472121 + -0.878806 1.86382 -1.22269 0.80529 -0.438182 0.39938 + -0.878324 1.8668 -1.24714 0.923999 -0.0316581 -0.381081 + -0.878844 1.8951 -1.23876 0.630611 0.522384 -0.573974 + -0.881941 1.90506 -1.22509 0.505147 0.792278 -0.342232 + -0.890991 1.82377 -1.25843 0.98238 -0.186885 0.00167389 + -0.893321 1.82549 -1.27123 0.92697 0.0239723 -0.374368 + -0.885126 1.86893 -1.25728 0.665671 0.256176 -0.700896 + -0.887826 1.89661 -1.24271 0.263853 0.670355 -0.693546 + -0.890922 1.90658 -1.22905 0.207468 0.850413 -0.483482 + -0.89469 1.82278 -1.24289 0.816384 -0.373652 0.440341 + -0.896376 1.771 -1.26494 0.873595 -0.112767 0.473409 + -0.892676 1.772 -1.28048 0.997121 0.0667434 0.035995 + -0.895936 1.77431 -1.29849 0.912621 0.230447 -0.337665 + -0.902286 1.82802 -1.2849 0.63934 0.29314 -0.710854 + -0.904845 1.82269 -1.23241 0.494555 -0.435937 0.751914 + -0.910577 1.77123 -1.25016 0.535428 -0.248437 0.807215 + -0.886475 1.71007 -1.2832 0.871928 -0.0515183 0.486916 + -0.88112 1.71182 -1.3056 0.990685 0.130028 0.0404335 + -0.88438 1.71413 -1.3236 0.912671 0.289861 -0.288119 + -0.88896 1.86373 -1.21221 0.483747 -0.495917 0.721148 + -0.903325 1.86447 -1.20606 0.132739 -0.436019 0.890094 + -0.924168 1.82424 -1.22396 0.108913 -0.391933 0.913524 + -0.9299 1.77278 -1.24171 0.142829 -0.285525 0.947668 + -0.880026 1.89016 -1.20144 0.579182 -0.214051 0.786594 + -0.89439 1.89091 -1.19529 0.162861 -0.23394 0.958514 + -0.90428 1.89206 -1.19567 -0.285973 -0.110498 0.951845 + -0.918214 1.86636 -1.2066 -0.333127 -0.221324 0.916538 + -0.878296 1.90197 -1.20528 0.783152 0.41717 0.461132 + -0.885044 1.90176 -1.19827 0.539733 0.162079 0.826086 + -0.89249 1.90214 -1.19508 0.214635 0.115231 0.969873 + -0.902379 1.90329 -1.19545 -0.289263 0.279122 0.915651 + -0.915198 1.89422 -1.20284 -0.647449 0.106059 0.754693 + -0.885643 1.90921 -1.20591 0.42256 0.901865 0.0898981 + -0.8871 1.90855 -1.19987 0.43175 0.7354 0.522282 + -0.894546 1.90894 -1.19668 0.0793515 0.716269 0.693298 + -0.900206 1.91005 -1.20039 -0.135364 0.87971 0.455837 + -0.908039 1.90442 -1.19917 -0.53612 0.404426 0.740955 + -0.889304 1.90999 -1.20868 0.215372 0.972149 0.0924182 + -0.887159 1.91034 -1.21301 0.493206 0.851323 0.178879 + -0.902818 1.91189 -1.21188 -0.138249 0.990397 -0.000590168 + -0.904962 1.91155 -1.20754 -0.246723 0.962109 0.116081 + -0.903867 1.91083 -1.20316 -0.236963 0.89282 0.383042 + -0.913211 1.9058 -1.20534 -0.67462 0.574165 0.463921 + -0.890685 1.91144 -1.21827 0.242829 0.956785 -0.159989 + -0.899021 1.91234 -1.21824 -0.0579772 0.985062 -0.162145 + -0.912241 1.90737 -1.21786 -0.545397 0.824269 -0.152059 + -0.914307 1.90651 -1.20973 -0.679593 0.722295 0.128231 + -0.899259 1.90748 -1.22901 -0.0452893 0.874012 -0.48379 + -0.908445 1.90781 -1.22421 -0.382049 0.863201 -0.330035 + -0.920418 1.89784 -1.2256 -0.698801 0.678636 -0.226122 + -0.922484 1.89698 -1.21745 -0.821951 0.564428 0.0762759 + -0.920371 1.8956 -1.209 -0.811236 0.318425 0.490409 + -0.903908 1.89837 -1.24266 -0.0996361 0.746249 -0.658168 + -0.913094 1.8987 -1.23785 -0.449539 0.75322 -0.480181 + -0.935862 1.8728 -1.2436 -0.734935 0.627395 -0.257385 + -0.938796 1.87199 -1.23129 -0.856756 0.510932 0.070134 + -0.936683 1.87061 -1.22284 -0.833461 0.274293 0.479694 + -0.898674 1.87111 -1.26329 0.247186 0.504264 -0.827416 + -0.914757 1.87286 -1.26323 -0.126644 0.629636 -0.766498 + -0.928538 1.87366 -1.25585 -0.512226 0.675654 -0.530204 + -0.961024 1.83316 -1.2666 -0.810346 0.510056 -0.288413 + -0.963958 1.83235 -1.2543 -0.919178 0.391394 0.0438425 + -0.915835 1.83019 -1.29091 0.233277 0.472791 -0.849736 + -0.937617 1.83285 -1.29074 -0.171827 0.568522 -0.804524 + -0.951398 1.83367 -1.28336 -0.572521 0.576395 -0.583084 + -0.904902 1.77684 -1.31216 0.636783 0.383808 -0.668729 + -0.923847 1.78005 -1.32045 0.226508 0.47211 -0.851943 + -0.94563 1.78271 -1.32028 -0.181963 0.492792 -0.850909 + -0.964985 1.78391 -1.3099 -0.639266 0.428759 -0.638361 + -0.897349 1.7179 -1.34324 0.626536 0.441472 -0.642305 + -0.916294 1.72112 -1.35154 0.237272 0.482735 -0.843012 + -0.947541 1.72482 -1.35133 -0.21631 0.420502 -0.881129 + -0.966896 1.726 -1.34095 -0.635336 0.344638 -0.691067 + -0.974611 1.7834 -1.29314 -0.883852 0.322957 -0.338385 + -0.869117 1.64944 -1.35508 0.96164 0.229512 -0.150244 + -0.882085 1.65322 -1.37472 0.737273 0.457839 -0.496801 + -0.898097 1.66592 -1.38022 0.34574 0.527152 -0.776257 + -0.929344 1.6696 -1.38002 -0.174811 0.420133 -0.890466 + -0.875055 1.65277 -1.32577 0.976768 0.0268427 0.212611 + -0.861878 1.58725 -1.38164 0.810577 0.58253 0.0601896 + -0.847109 1.57183 -1.41682 0.606951 0.544404 -0.578994 + -0.863122 1.58453 -1.42233 0.2779 0.460555 -0.843007 + -0.88041 1.65102 -1.30338 0.863869 -0.111854 0.491141 + -0.884443 1.60108 -1.31182 0.726892 0.579662 0.368266 + -0.867816 1.59058 -1.35233 0.791151 0.604791 0.0911428 + -0.838959 1.57718 -1.37458 -0.0929606 0.915269 -0.39197 + -0.904427 1.65354 -1.28173 0.504421 -0.221484 0.834568 + -0.90846 1.6036 -1.29017 0.351924 0.557286 0.752052 + -0.880133 1.59288 -1.26871 0.437136 0.885603 -0.156908 + -0.86893 1.59311 -1.27569 -0.345372 0.881904 0.320881 + -0.870447 1.59662 -1.30624 -0.182747 0.976742 -0.112155 + -0.900676 1.7103 -1.26843 0.566795 -0.183282 0.803213 + -0.932203 1.65554 -1.26966 0.248465 -0.263881 0.932004 + -0.950853 1.59833 -1.28282 0.0634073 0.500791 0.863243 + -0.908318 1.60006 -1.27887 0.0903891 0.971264 -0.220174 + -0.928452 1.71229 -1.25636 0.179959 -0.215087 0.959871 + -0.966784 1.65206 -1.26669 -0.179798 -0.0784023 0.980574 + -0.985434 1.59485 -1.27985 0.0396224 0.37881 0.924626 + -0.95071 1.59479 -1.27152 -0.189605 0.935081 -0.299456 + -0.950772 1.77543 -1.24251 -0.353209 -0.232864 0.9061 + -0.949324 1.71495 -1.25716 -0.30387 -0.149123 0.94097 + -0.987782 1.65617 -1.28064 -0.572072 0.200185 0.795399 + -1.02909 1.58369 -1.27341 -0.486597 0.588652 0.645532 + -0.986353 1.58749 -1.26568 -0.283168 0.945129 -0.162931 + -0.939057 1.82614 -1.2245 -0.353492 -0.224564 0.908083 + -0.95363 1.82897 -1.23424 -0.681336 -0.0257633 0.731517 + -0.965345 1.77828 -1.25224 -0.682496 -0.133003 0.718686 + -0.970322 1.71906 -1.2711 -0.666648 -0.0469242 0.743895 + -1.00127 1.65438 -1.2915 -0.823559 0.305949 0.477646 + -0.929133 1.86853 -1.21377 -0.659105 0.0268868 0.75157 + -0.96118 1.83107 -1.24331 -0.869195 0.177609 0.46147 + -0.976077 1.78081 -1.26509 -0.896511 0.00725937 0.442961 + -0.981054 1.7216 -1.28396 -0.886765 0.072845 0.456445 + -0.978855 1.78209 -1.27609 -0.982353 0.185872 0.0208488 + -0.985075 1.72368 -1.29993 -0.97906 0.203571 0.00074545 + -1.00529 1.65647 -1.30746 -0.954991 0.288837 -0.0675579 + -1.02939 1.58151 -1.30581 -0.802917 0.410275 -0.432433 + -1.04258 1.58189 -1.28426 -0.819923 0.552277 0.150722 + -0.980832 1.72499 -1.31697 -0.891432 0.267849 -0.36552 + -0.993663 1.65649 -1.33417 -0.860176 0.273327 -0.430569 + -0.979727 1.6575 -1.35814 -0.677031 0.312093 -0.666503 + -0.99587 1.58131 -1.37529 -0.700148 0.312471 -0.641993 + -1.01775 1.58153 -1.33251 -0.862554 0.302415 -0.405643 + -0.945141 1.64544 -1.38566 -0.364868 0.352261 -0.861849 + -0.961283 1.56924 -1.40281 -0.412822 0.280314 -0.866603 + -0.959292 1.50938 -1.42342 -0.340609 0.325865 -0.881928 + -1.01072 1.52239 -1.39266 -0.605649 0.402589 -0.686376 + -1.03261 1.52261 -1.34987 -0.674224 0.515633 -0.528719 + -0.878919 1.56037 -1.42798 -0.195071 0.310706 -0.930274 + -0.876928 1.5005 -1.44858 -0.144409 0.311681 -0.939149 + -0.91434 1.41689 -1.47011 -0.156472 0.311528 -0.937266 + -0.963096 1.45929 -1.44114 -0.315615 0.356528 -0.87936 + -1.01453 1.4723 -1.41038 -0.425182 0.364873 -0.828304 + -0.846034 1.46578 -1.46154 0.233616 0.241625 -0.941828 + -0.883447 1.38217 -1.48305 0.124474 0.13202 -0.983401 + -0.898388 1.34766 -1.48767 0.123335 -0.0950757 -0.9878 + -0.917624 1.35307 -1.48944 -0.00480222 -0.000494099 -0.999988 + -0.931404 1.37385 -1.48235 -0.146305 0.292848 -0.944899 + -0.825578 1.46091 -1.45214 0.562182 0.189546 -0.804999 + -0.858552 1.35956 -1.47319 0.409302 -0.0362143 -0.91168 + -0.873494 1.32504 -1.47781 0.291707 -0.289544 -0.911631 + -0.905805 1.32772 -1.47999 0.00711285 -0.419096 -0.907914 + -0.800462 1.47952 -1.42216 0.661257 0.205826 -0.72137 + -0.801622 1.36272 -1.44547 0.660726 -0.0894884 -0.745274 + -0.838096 1.3547 -1.4638 0.431881 -0.0956025 -0.896849 + -0.847121 1.30088 -1.4556 0.404243 -0.428369 -0.808139 + -0.878787 1.29238 -1.45967 0.135536 -0.536607 -0.832876 + -0.82419 1.56177 -1.40977 0.337066 0.553259 -0.761768 + -0.797539 1.54957 -1.40402 0.52542 0.33391 -0.782584 + -0.747944 1.46971 -1.36831 0.844839 0.0521338 -0.532475 + -0.776506 1.38133 -1.41549 0.844492 -0.077987 -0.52986 + -0.81319 1.62786 -1.33727 -0.337585 0.68048 -0.650372 + -0.796629 1.62009 -1.34554 0.206189 0.637418 -0.742418 + -0.769978 1.60789 -1.33978 0.543432 0.457793 -0.703638 + -0.745021 1.53976 -1.35016 0.834634 0.182101 -0.519833 + -0.853821 1.58612 -1.34676 -0.128819 0.933463 -0.334743 + -0.828052 1.63679 -1.30945 -0.693575 0.576219 -0.432348 + -0.810805 1.6878 -1.27831 -0.72497 0.464106 -0.508944 + -0.799337 1.68411 -1.29216 -0.350305 0.581457 -0.734298 + -0.782775 1.67633 -1.30044 0.167974 0.577252 -0.799103 + -0.838414 1.63727 -1.28553 -0.833488 0.531842 -0.149804 + -0.821167 1.68827 -1.25439 -0.948822 0.280937 -0.144264 + -0.815791 1.74438 -1.22561 -0.951264 0.268122 -0.152338 + -0.808645 1.74381 -1.24229 -0.747752 0.428121 -0.507523 + -0.797176 1.7401 -1.25615 -0.399648 0.532433 -0.746188 + -0.836896 1.63376 -1.25498 -0.888111 0.302075 0.346423 + -0.820232 1.68161 -1.23398 -0.957166 0.0693887 0.281101 + -0.824419 1.61758 -1.23136 -0.776615 0.159603 0.609423 + -0.807755 1.66545 -1.21036 -0.814483 -0.0830342 0.574216 + -0.806145 1.72636 -1.18875 -0.832721 -0.106153 0.543422 + -0.814856 1.73774 -1.2052 -0.961599 0.0447122 0.270793 + -0.850108 1.57875 -1.2451 -0.318682 0.693232 0.64643 + -0.835122 1.56096 -1.22364 -0.173449 0.690433 0.702295 + -0.809434 1.59979 -1.20989 -0.461089 -0.0244787 0.887016 + -0.796131 1.65424 -1.19988 -0.500294 -0.183112 0.846272 + -0.861311 1.57852 -1.23812 0.733863 0.679289 -0.00336986 + -0.849239 1.56173 -1.2133 0.777123 0.629332 0.0044704 + -0.8172 1.54075 -1.19538 0.0108935 0.571457 0.82056 + -0.794672 1.59027 -1.20888 -0.164164 0.049896 0.98517 + -0.781369 1.64472 -1.19888 0.0255952 -0.226581 0.973656 + -0.87211 1.63319 -1.23201 0.695116 0.40654 -0.592907 + -0.857655 1.61714 -1.21114 0.903617 0.223761 -0.365251 + -0.845582 1.60035 -1.18631 0.984695 0.170564 -0.0358382 + -0.831316 1.54152 -1.18504 0.775414 0.236603 0.58545 + -0.900294 1.64037 -1.24217 0.225142 0.590236 -0.775198 + -0.895755 1.68979 -1.20754 0.258425 0.552647 -0.792336 + -0.873755 1.68132 -1.19933 0.706402 0.434756 -0.558555 + -0.8593 1.66527 -1.17846 0.935592 0.270435 -0.227009 + -0.937101 1.64394 -1.24057 -0.1319 0.592101 -0.794996 + -0.932562 1.69336 -1.20595 -0.127838 0.56311 -0.816434 + -0.929618 1.74917 -1.16933 -0.134395 0.560104 -0.817448 + -0.903856 1.7466 -1.17053 0.228236 0.535647 -0.813013 + -0.881855 1.73813 -1.16231 0.695428 0.406208 -0.592768 + -0.972744 1.63665 -1.23472 -0.516066 0.56559 -0.64326 + -0.95376 1.69237 -1.19926 -0.514852 0.532319 -0.671985 + -0.950816 1.74817 -1.16265 -0.54821 0.518082 -0.656549 + -0.921356 1.79703 -1.13685 -0.137817 0.605058 -0.784163 + -0.895594 1.79447 -1.13804 0.230032 0.510906 -0.828288 + -0.985381 1.63085 -1.22063 -0.705974 0.603704 -0.370328 + -0.966397 1.68657 -1.18517 -0.872173 0.383358 -0.303894 + -0.95951 1.7442 -1.1529 -0.878662 0.362855 -0.310305 + -0.945054 1.79252 -1.1222 -0.826534 0.520191 -0.215043 + -0.93636 1.7965 -1.13195 -0.517403 0.627547 -0.581789 + -1.03001 1.57633 -1.25923 -0.575224 0.816809 -0.044055 + -1.0336 1.58068 -1.23618 -0.825629 0.542276 0.155799 + -0.988965 1.63519 -1.19758 -0.863934 0.503604 -0.0010976 + -0.970598 1.67943 -1.1668 -0.972993 0.229908 0.0206435 + -1.0855 1.52355 -1.28503 -0.72666 0.68691 0.0109257 + -1.07278 1.5156 -1.24957 -0.700988 0.495403 0.513022 + -1.03741 1.56026 -1.23476 -0.691879 0.213944 0.689588 + -0.986193 1.62416 -1.16889 -0.877818 0.208357 0.431304 + -0.967825 1.6684 -1.13811 -0.926718 0.0253183 0.374902 + -1.07231 1.52317 -1.30657 -0.63163 0.658588 -0.409031 + -1.1273 1.48199 -1.31873 -0.739385 0.631231 -0.234218 + -1.13437 1.47422 -1.2827 -0.842878 0.500701 0.19712 + -1.12165 1.46626 -1.24724 -0.689001 0.49929 0.525345 + -1.06195 1.51683 -1.33241 -0.530995 0.650958 -0.542492 + -1.11694 1.47565 -1.34457 -0.570321 0.593929 -0.567435 + -1.14774 1.43202 -1.33843 -0.881684 0.283683 -0.377038 + -1.15481 1.42424 -1.30241 -0.959185 0.275677 -0.0629799 + -1.07912 1.46677 -1.37376 -0.469743 0.541887 -0.696921 + -1.08654 1.42099 -1.39583 -0.492779 0.340748 -0.800662 + -1.12435 1.42987 -1.36663 -0.631998 0.330444 -0.700989 + -1.13619 1.36352 -1.37206 -0.836011 0.0723177 -0.543926 + -1.15203 1.37176 -1.33905 -0.949427 0.00150368 -0.313985 + -1.04978 1.47254 -1.39122 -0.510367 0.488991 -0.707399 + -1.05458 1.42328 -1.4134 -0.461849 0.324665 -0.825402 + -1.07643 1.36615 -1.41705 -0.456017 0.238863 -0.857317 + -1.11281 1.36137 -1.40025 -0.631286 0.163749 -0.758066 + -1.01932 1.42304 -1.43253 -0.428746 0.335059 -0.838995 + -1.04447 1.36845 -1.43462 -0.44154 0.212789 -0.871644 + -1.06289 1.32996 -1.4339 -0.433489 0.0534646 -0.899572 + -1.09927 1.32518 -1.4171 -0.566949 -0.13472 -0.812662 + -1.124 1.32265 -1.39441 -0.748603 -0.231306 -0.621362 + -0.999749 1.41196 -1.44675 -0.424941 0.315738 -0.848372 + -1.02934 1.36782 -1.44163 -0.450422 0.213904 -0.866813 + -1.04776 1.32933 -1.44091 -0.303422 -0.169625 -0.937637 + -1.0756 1.31095 -1.42544 -0.359296 -0.502092 -0.786645 + -1.10033 1.30842 -1.40275 -0.512621 -0.65194 -0.558743 + -0.98016 1.41624 -1.45338 -0.313735 0.356921 -0.879874 + -0.983801 1.36316 -1.47119 -0.44886 0.0466153 -0.892385 + -1.00976 1.35673 -1.45584 -0.476266 0.0428696 -0.878255 + -1.0232 1.32438 -1.44257 -0.164124 -0.561058 -0.811343 + -1.05104 1.306 -1.4271 -0.0461919 -0.735399 -0.676058 + -0.964212 1.36744 -1.47782 -0.278073 0.249054 -0.927711 + -0.950432 1.34667 -1.48492 -0.232695 -0.107729 -0.966565 + -0.959516 1.32626 -1.47543 -0.356838 -0.346624 -0.867478 + -0.975488 1.31856 -1.45992 -0.631631 -0.347653 -0.69295 + -0.986845 1.32558 -1.45128 -0.397712 -0.560167 -0.726662 + -0.997242 1.33079 -1.45792 -0.129543 -0.505558 -0.853012 + -0.92504 1.33313 -1.48176 -0.0503172 -0.374275 -0.925951 + -0.934125 1.31272 -1.47229 -0.0393786 -0.431432 -0.901286 + -0.953963 1.27147 -1.45152 -0.264284 -0.525873 -0.808462 + -0.969935 1.26377 -1.436 -0.5675 -0.62204 -0.539453 + -0.998013 1.28192 -1.41023 -0.681843 -0.57079 -0.457481 + -0.911098 1.29504 -1.46185 0.0410974 -0.496129 -0.867276 + -0.930936 1.2538 -1.44108 -0.0590664 -0.697573 -0.714075 + -0.956661 1.2448 -1.41453 -0.432946 -0.8877 -0.15667 + -0.893346 1.23712 -1.42343 0.13856 -0.841047 -0.522915 + -0.919071 1.22812 -1.39687 -0.226062 -0.973651 -0.030003 + -0.964953 1.26802 -1.36961 -0.365829 -0.845304 0.389398 + -0.984739 1.26295 -1.38875 -0.470922 -0.870186 0.144946 + -0.86168 1.24562 -1.41937 0.371123 -0.764703 -0.52678 + -0.89989 1.22817 -1.37247 -0.159891 -0.981796 0.102529 + -0.945771 1.26806 -1.34521 -0.4441 -0.803746 0.39594 + -0.988898 1.28436 -1.35462 -0.193064 -0.899432 0.392108 + -1.00868 1.27929 -1.37378 -0.205944 -0.946629 0.247952 + -0.810647 1.30891 -1.43728 0.663836 -0.38671 -0.640139 + -0.797745 1.30144 -1.40886 0.786186 -0.463423 -0.408841 + -0.848779 1.23816 -1.39094 0.408277 -0.865968 -0.288807 + -0.884292 1.22887 -1.33956 -0.202803 -0.96004 0.192857 + -0.940004 1.27931 -1.31705 -0.474272 -0.783072 0.402324 + -0.781434 1.29574 -1.36206 0.810838 -0.512512 -0.282618 + -0.833181 1.23887 -1.35803 0.484309 -0.865139 -0.130303 + -0.868618 1.23326 -1.31297 -0.10185 -0.938913 0.328737 + -0.92433 1.28369 -1.29046 -0.48995 -0.794124 0.359606 + -0.969913 1.30349 -1.30289 -0.26035 -0.878781 0.399952 + -0.760195 1.37562 -1.3687 0.893713 -0.185094 -0.408676 + -0.744214 1.35836 -1.33319 0.945043 -0.275886 -0.175448 + -0.769769 1.30105 -1.3271 0.854378 -0.519446 -0.014623 + -0.821516 1.24417 -1.32307 0.499518 -0.864519 0.0555766 + -0.731964 1.45244 -1.3328 0.992013 -0.0319239 -0.122028 + -0.742543 1.37551 -1.30253 0.966831 -0.210614 0.144497 + -0.768097 1.31819 -1.29644 0.892271 -0.438289 0.108423 + -0.804387 1.25859 -1.2947 0.630796 -0.774476 0.0477846 + -0.851488 1.24768 -1.28461 -0.067139 -0.931338 0.357913 + -0.731258 1.53341 -1.31358 0.998527 -0.0148241 0.0521915 + -0.741959 1.47673 -1.30362 0.901197 -0.00626066 0.433365 + -0.737625 1.4509 -1.30698 0.948698 0.0533647 0.311649 + -0.748204 1.37398 -1.2767 0.956536 -0.145545 0.252698 + -0.73042 1.58921 -1.28664 0.996852 -0.0416892 -0.0674328 + -0.754843 1.53399 -1.27322 0.864178 -0.240312 0.442093 + -0.765543 1.47731 -1.26327 0.86311 0.0311546 0.504054 + -0.771192 1.37805 -1.22652 0.854608 0.073574 0.514034 + -0.766858 1.35223 -1.22987 0.887648 -0.0364215 0.459079 + -0.744183 1.59556 -1.32321 0.797809 0.277038 -0.535491 + -0.73886 1.65542 -1.28029 0.804516 0.334796 -0.490577 + -0.729767 1.64655 -1.26158 0.988651 0.118691 -0.0920931 + -0.735051 1.58088 -1.25955 0.924088 -0.288213 0.250988 + -0.764655 1.66775 -1.29685 0.51872 0.478771 -0.708313 + -0.767748 1.72589 -1.25841 0.507052 0.46029 -0.728719 + -0.749705 1.71721 -1.2469 0.781544 0.341015 -0.522396 + -0.740612 1.70835 -1.2282 0.98953 0.115902 -0.0860029 + -0.734398 1.63822 -1.23451 0.936057 -0.0757107 0.343605 + -0.785869 1.73448 -1.26199 0.104175 0.541907 -0.833957 + -0.775806 1.7833 -1.22897 0.112083 0.538153 -0.835361 + -0.762937 1.77707 -1.22652 0.484678 0.387595 -0.784129 + -0.744894 1.76839 -1.21501 0.779226 0.193029 -0.596278 + -0.787113 1.78893 -1.22313 -0.34934 0.613948 -0.707834 + -0.755451 1.82303 -1.20038 0.1374 0.551877 -0.822528 + -0.742583 1.81679 -1.19792 0.497042 0.347328 -0.795181 + -0.729409 1.81058 -1.18933 0.77529 0.121646 -0.619781 + -0.73841 1.76216 -1.20164 0.97978 -0.0917826 -0.177783 + -0.795407 1.79133 -1.21336 -0.658041 0.586085 -0.472744 + -0.764379 1.82667 -1.19626 -0.277715 0.681506 -0.677069 + -0.741745 1.84601 -1.18167 0.204181 0.659839 -0.723134 + -0.733057 1.84215 -1.17988 0.514365 0.496153 -0.699472 + -0.802553 1.79192 -1.19667 -0.882195 0.461421 -0.0939292 + -0.772673 1.82908 -1.18649 -0.579913 0.69253 -0.429073 + -0.750673 1.84965 -1.17755 -0.188094 0.794018 -0.578062 + -0.743052 1.85483 -1.16918 0.00447195 0.913352 -0.407147 + -0.738424 1.85294 -1.17131 0.27292 0.812698 -0.514817 + -0.801975 1.78702 -1.18221 -0.911946 0.234796 0.336491 + -0.778137 1.82888 -1.1742 -0.800014 0.597594 -0.0534719 + -0.756334 1.85098 -1.17113 -0.449576 0.819039 -0.35645 + -0.793264 1.77565 -1.16576 -0.782719 0.0284441 0.621725 + -0.777559 1.82398 -1.15972 -0.844614 0.357656 0.398383 + -0.761798 1.85078 -1.15885 -0.657911 0.752358 0.0333343 + -0.751545 1.85605 -1.1564 -0.326852 0.940235 0.0955249 + -0.748713 1.85615 -1.16277 -0.217755 0.957264 -0.190338 + -0.784826 1.76798 -1.15815 -0.511949 -0.171132 0.841797 + -0.771158 1.81581 -1.14754 -0.725054 0.144512 0.673359 + -0.761438 1.84749 -1.14925 -0.684288 0.573735 0.450087 + -0.794522 1.71516 -1.17827 -0.534363 -0.246129 0.808626 + -0.774765 1.76119 -1.15758 -0.0640767 -0.360595 0.930519 + -0.754731 1.8035 -1.13919 -0.0356894 -0.330692 0.943064 + -0.76272 1.80815 -1.13993 -0.445973 -0.098756 0.889581 + -0.78446 1.70838 -1.1777 -0.0523457 -0.337575 0.939842 + -0.763914 1.75726 -1.16133 0.283687 -0.432456 0.855864 + -0.74388 1.79956 -1.14295 0.298472 -0.448309 0.842576 + -0.734015 1.8273 -1.13362 0.388158 -0.136265 0.911463 + -0.741401 1.82964 -1.13126 0.107301 -0.0399785 0.993422 + -0.766167 1.63927 -1.20409 0.390237 -0.20961 0.896537 + -0.769258 1.70293 -1.18292 0.332011 -0.329471 0.883865 + -0.74944 1.75483 -1.17051 0.626237 -0.428749 0.651154 + -0.733049 1.79826 -1.14971 0.615789 -0.479637 0.625101 + -0.774195 1.59321 -1.20828 0.302909 -0.051395 0.951633 + -0.745318 1.63607 -1.21726 0.715067 -0.168922 0.67834 + -0.754784 1.7005 -1.1921 0.668835 -0.257342 0.697448 + -0.796723 1.54369 -1.19477 0.41874 0.0558634 0.906386 + -0.753347 1.59002 -1.22145 0.722071 -0.200015 0.662275 + -0.743863 1.70264 -1.20935 0.934175 -0.0959354 0.343675 + -0.865981 1.48471 -1.16314 0.40967 -0.0576064 0.910413 + -0.823026 1.46197 -1.17892 0.487505 0.0327931 0.872504 + -0.804852 1.47827 -1.19603 0.789687 -0.00834706 0.613453 + -0.796371 1.52699 -1.20372 0.878679 -0.194765 0.435878 + -0.850865 1.53594 -1.16128 0.655846 -0.118078 0.745603 + -0.926244 1.49054 -1.13347 0.22992 -0.104114 0.967624 + -0.957644 1.41559 -1.13398 0.174036 -0.0592022 0.982958 + -0.896919 1.43523 -1.15219 0.300657 -0.0208961 0.953503 + -0.853963 1.41249 -1.16796 0.30365 -0.0227408 0.952512 + -0.871136 1.58554 -1.14314 0.621126 -0.119351 0.774569 + -0.911128 1.54176 -1.13161 0.227288 -0.127485 0.965447 + -0.959461 1.50028 -1.13282 -0.360415 0.0938556 0.928058 + -0.990861 1.42533 -1.13332 -0.302588 0.130339 0.944168 + -0.976872 1.35841 -1.13414 0.101286 -0.115824 0.988092 + -0.851587 1.59112 -1.1669 0.861823 0.0620139 0.503404 + -0.876677 1.64231 -1.1261 0.62087 -0.184222 0.76196 + -0.900081 1.58792 -1.12604 0.266269 -0.213279 0.940007 + -0.937216 1.59524 -1.12558 -0.298504 -0.193999 0.934484 + -0.948263 1.54908 -1.13115 -0.399725 0.0225855 0.916357 + -0.855673 1.6544 -1.1612 0.983547 0.13168 0.123674 + -0.861678 1.64516 -1.14179 0.859872 -0.0649668 0.506359 + -0.887343 1.7067 -1.10138 0.59639 -0.26688 0.75703 + -0.905622 1.64469 -1.10901 0.241066 -0.27587 0.930474 + -0.868179 1.71596 -1.13054 0.994723 0.0547532 0.0867635 + -0.872343 1.70956 -1.11707 0.867025 -0.132453 0.480337 + -0.871456 1.76321 -1.09177 0.847421 -0.340439 0.407405 + -0.882147 1.76099 -1.0807 0.567752 -0.422483 0.706517 + -0.90756 1.70853 -1.08935 0.233078 -0.324331 0.916779 + -0.871806 1.72683 -1.1478 0.93999 0.223535 -0.25778 + -0.869894 1.77725 -1.11761 0.927553 0.0460175 -0.370847 + -0.867292 1.76962 -1.10525 0.988085 -0.150058 -0.0342125 + -0.879943 1.78854 -1.13211 0.668 0.295993 -0.682762 + -0.863138 1.82711 -1.10443 0.686355 0.24909 -0.68328 + -0.855652 1.81903 -1.09362 0.914461 -0.0115536 -0.404508 + -0.85305 1.8114 -1.08127 0.973057 -0.221965 -0.0623749 + -0.856177 1.80659 -1.07119 0.842332 -0.399671 0.361579 + -0.878788 1.83304 -1.11036 0.244258 0.523043 -0.816556 + -0.867431 1.85564 -1.09128 0.298002 0.713316 -0.634331 + -0.857132 1.85179 -1.0873 0.700486 0.527575 -0.480608 + -0.849646 1.84372 -1.07649 0.937572 0.293633 -0.186383 + -0.897558 1.83475 -1.10967 -0.1086 0.648312 -0.75359 + -0.886201 1.85735 -1.09059 -0.0874498 0.798326 -0.595842 + -0.880174 1.86256 -1.08044 -0.0212004 0.947889 -0.317893 + -0.870445 1.86166 -1.0808 0.230179 0.915618 -0.329637 + -0.860146 1.85782 -1.07682 0.607765 0.788699 -0.0925984 + -0.912562 1.83421 -1.10477 -0.476359 0.708658 -0.520467 + -0.896175 1.85682 -1.08738 -0.408271 0.816717 -0.407784 + -0.890148 1.86201 -1.07722 -0.294137 0.949637 -0.108037 + -0.878847 1.864 -1.07216 0.00391151 0.988105 0.153731 + -0.869117 1.86311 -1.07252 0.275387 0.948594 0.155986 + -0.91926 1.83109 -1.09737 -0.760482 0.631842 -0.149811 + -0.902873 1.85371 -1.07998 -0.686894 0.723839 -0.0650683 + -0.89362 1.8604 -1.07339 -0.46137 0.879973 0.113075 + -0.882319 1.86238 -1.06833 -0.109051 0.905853 0.409314 + -0.865237 1.85893 -1.06692 0.370934 0.853788 0.365314 + -0.948172 1.78724 -1.10924 -0.919925 0.3827 0.0853091 + -0.922378 1.82582 -1.0844 -0.85215 0.502488 0.146106 + -0.904925 1.85022 -1.07134 -0.767874 0.612468 0.187758 + -0.895672 1.85692 -1.06475 -0.510303 0.809169 0.291266 + -0.8803 1.85971 -1.0642 0.0638386 0.904216 0.422277 + -0.963711 1.73707 -1.13453 -0.979912 0.198758 0.0163388 + -0.946256 1.77957 -1.08917 -0.888549 0.20346 0.4112 + -0.920922 1.82009 -1.06974 -0.830829 0.32796 0.449628 + -0.903469 1.84451 -1.05668 -0.736943 0.455267 0.499646 + -0.894917 1.85396 -1.05715 -0.514719 0.71296 0.476184 + -0.961795 1.7294 -1.11447 -0.937814 0.0362235 0.345242 + -0.937389 1.77329 -1.07643 -0.674792 -0.0327488 0.737281 + -0.912055 1.81381 -1.057 -0.626707 0.0496546 0.777671 + -0.897618 1.84035 -1.04833 -0.547161 0.254233 0.797484 + -0.955425 1.65951 -1.12022 -0.686783 -0.168119 0.707153 + -0.949395 1.72051 -1.09659 -0.69239 -0.15808 0.703993 + -0.919181 1.76651 -1.0674 -0.272467 -0.264192 0.925183 + -0.898515 1.80898 -1.05025 -0.247126 -0.216284 0.944537 + -0.963392 1.60487 -1.13858 -0.64414 -0.148649 0.750325 + -0.929249 1.64988 -1.10723 -0.243327 -0.282701 0.927832 + -0.931187 1.71372 -1.08756 -0.279694 -0.290582 0.915059 + -0.902365 1.76281 -1.06867 0.194324 -0.405529 0.893188 + -0.990011 1.60374 -1.16747 -0.790188 0.0614481 0.609776 + -0.97759 1.55466 -1.16298 -0.70395 0.0336149 0.709453 + -1.00421 1.55353 -1.19186 -0.753481 0.145523 0.641163 + -1.03957 1.50887 -1.20666 -0.644419 0.380784 0.66312 + -0.988788 1.50586 -1.16464 -0.645305 0.220088 0.731534 + -1.09297 1.44319 -1.20978 -0.589007 0.397904 0.70338 + -1.06975 1.42015 -1.1794 -0.539634 0.343438 0.768665 + -1.01636 1.48583 -1.17629 -0.548849 0.35996 0.754449 + -1.15167 1.42218 -1.25256 -0.857123 0.312085 0.409808 + -1.12299 1.39912 -1.2151 -0.700725 0.1988 0.685173 + -1.11115 1.37852 -1.19769 -0.719032 0.175663 0.67241 + -1.08528 1.38534 -1.17552 -0.595048 0.27492 0.755207 + -1.01843 1.40529 -1.14496 -0.434601 0.216568 0.874197 + -1.1603 1.41239 -1.27724 -0.971525 0.219627 0.0889032 + -1.14928 1.36379 -1.24717 -0.884151 -0.0473791 0.464792 + -1.13744 1.34319 -1.22976 -0.844491 -0.0214769 0.535139 + -1.10434 1.33974 -1.18294 -0.69842 -0.0383065 0.714662 + -1.07848 1.34656 -1.16078 -0.535038 -0.0589606 0.842768 + -1.15752 1.35991 -1.31387 -0.987781 -0.0721246 -0.138155 + -1.15791 1.354 -1.27186 -0.979507 -0.109869 0.168806 + -1.14028 1.32026 -1.23683 -0.87522 -0.17426 0.451247 + -1.10719 1.31682 -1.19002 -0.672604 -0.271434 0.688424 + -1.05663 1.3173 -1.15837 -0.303517 -0.441757 0.844232 + -1.13984 1.33089 -1.36139 -0.919016 -0.152475 -0.36354 + -1.14995 1.32335 -1.3271 -0.951244 -0.250584 -0.179842 + -1.15034 1.31745 -1.28508 -0.966005 -0.258375 -0.00879001 + -1.14609 1.30588 -1.26206 -0.932197 -0.295606 0.208866 + -1.12251 1.28682 -1.22596 -0.711889 -0.462359 0.528619 + -1.12878 1.30845 -1.37287 -0.717244 -0.572547 -0.397179 + -1.1389 1.30092 -1.33857 -0.809437 -0.473829 -0.346839 + -1.13466 1.27087 -1.31396 -0.76777 -0.560942 -0.309632 + -1.13041 1.25932 -1.29094 -0.547328 -0.832256 0.0882171 + -1.12832 1.27245 -1.2512 -0.556755 -0.761701 0.331414 + -1.10613 1.29619 -1.37587 -0.386289 -0.848846 -0.360889 + -1.10453 1.28748 -1.35446 -0.379836 -0.767747 -0.516032 + -1.1003 1.25744 -1.32985 -0.13971 -0.905314 -0.401109 + -1.09158 1.25722 -1.30268 0.184173 -0.976334 0.11337 + -1.07767 1.29616 -1.40574 -0.256972 -0.864061 -0.432855 + -1.0541 1.28699 -1.38359 -0.20425 -0.941605 -0.267698 + -1.0525 1.27827 -1.36219 0.00662837 -0.964312 -0.264685 + -1.03138 1.2821 -1.34221 0.195588 -0.979978 -0.0372543 + -1.02267 1.2819 -1.31504 0.312634 -0.939515 0.139894 + -1.05239 1.28725 -1.38674 -0.144581 -0.938619 -0.313194 + -1.02715 1.28029 -1.38065 -0.147197 -0.986975 -0.0649175 + -1.01639 1.28195 -1.37049 -0.0297525 -0.977967 0.206628 + -0.995269 1.28579 -1.35051 0.0726601 -0.976132 0.20466 + -1.02576 1.29708 -1.4081 -0.0238752 -0.836328 -0.54771 + -1.02544 1.28055 -1.3838 -0.290863 -0.850832 -0.437588 + -1.01945 1.27762 -1.38393 -0.213561 -0.962452 -0.167564 + -1.01536 1.29187 -1.40145 -0.20208 -0.76181 -0.615475 + -1.00937 1.28894 -1.4016 -0.543251 -0.532229 -0.649315 + -0.975681 1.29224 -1.33105 -0.237009 -0.882469 0.406295 + -0.982052 1.29366 -1.32695 0.158455 -0.94054 0.30046 + -1.01727 1.29321 -1.28847 0.357158 -0.914166 0.191672 + -1.08949 1.27036 -1.26294 0.175018 -0.96174 0.21077 + -0.976651 1.30498 -1.30037 0.143032 -0.925213 0.351458 + -0.97443 1.31079 -1.28553 0.111352 -0.989558 0.0915218 + -1.00854 1.29778 -1.2616 0.267142 -0.95562 -0.124199 + -1.08077 1.27493 -1.23607 0.117449 -0.991031 0.0637386 + -1.10087 1.27697 -1.21521 -0.289717 -0.842208 0.454697 + -0.967692 1.30929 -1.28807 -0.283755 -0.931474 0.227685 + -0.972711 1.31055 -1.28343 -0.0629002 -0.98014 -0.188068 + -1.00682 1.29754 -1.2595 0.13348 -0.93992 -0.314219 + -1.03364 1.27882 -1.21467 0.0470027 -0.991369 -0.122387 + -1.05374 1.28086 -1.19382 -0.11955 -0.891196 0.437582 + -0.951437 1.30384 -1.27738 -0.391854 -0.912337 0.118712 + -0.956456 1.30509 -1.27275 -0.171368 -0.957468 -0.23214 + -0.973217 1.29523 -1.24871 0.00416175 -0.919687 -0.392631 + -1.00003 1.27652 -1.20389 -0.15396 -0.971044 -0.182677 + -0.921645 1.2939 -1.25628 -0.349703 -0.934104 0.0718102 + -0.928007 1.29472 -1.25153 -0.148986 -0.943339 -0.296506 + -0.944768 1.28487 -1.2275 -0.075795 -0.884943 -0.459491 + -0.894538 1.27375 -1.26936 -0.424659 -0.805226 0.413854 + -0.873612 1.2749 -1.24928 -0.359625 -0.856121 0.371114 + -0.890082 1.28386 -1.24262 -0.316667 -0.947785 0.0377581 + -0.896444 1.28468 -1.23787 -0.183211 -0.919789 -0.347019 + -0.907848 1.27721 -1.22204 -0.128606 -0.849989 -0.510862 + -0.830563 1.24882 -1.26453 0.0500492 -0.973579 0.222797 + -0.824941 1.26014 -1.23715 0.134504 -0.954576 0.265882 + -0.841411 1.2691 -1.23049 -0.440981 -0.86615 -0.235201 + -0.852815 1.26164 -1.21466 -0.0481074 -0.976155 -0.211675 + -0.804118 1.26001 -1.27021 0.639207 -0.761723 0.105795 + -0.798497 1.27132 -1.24282 0.657952 -0.709903 0.25127 + -0.792617 1.28394 -1.22778 0.722049 -0.624145 0.298476 + -0.830468 1.26529 -1.20629 0.368574 -0.830541 0.417558 + -0.767829 1.31962 -1.27193 0.87545 -0.481816 0.0379594 + -0.761949 1.33225 -1.25689 0.934551 -0.326203 0.142147 + -0.780603 1.31049 -1.21006 0.790034 -0.326356 0.518978 + -0.818454 1.29184 -1.18857 0.474744 -0.42833 0.768864 + -0.80509 1.36213 -1.18251 0.528553 -0.0371004 0.848089 + -0.830741 1.31746 -1.17781 0.312874 -0.149178 0.938006 + -0.913342 1.25765 -1.1709 0.157883 -0.755623 0.635694 + -0.935689 1.254 -1.17927 -0.149671 -0.978562 0.141473 + -0.97261 1.26164 -1.18472 -0.194946 -0.980533 0.0234855 + -0.786916 1.37844 -1.19961 0.795651 -0.0962921 0.598053 + -0.879614 1.36781 -1.16327 0.252023 -0.0747617 0.964829 + -0.925629 1.28328 -1.16015 0.232275 -0.209838 0.949745 + -0.781268 1.4777 -1.23637 0.862814 0.0326103 0.504469 + -0.772786 1.52642 -1.24407 0.842236 -0.253051 0.47603 + -0.752994 1.57331 -1.2304 0.795897 -0.349974 0.49403 + -0.916147 1.37805 -1.15235 0.2884 -0.10794 0.951407 + -0.962162 1.29351 -1.14923 0.11506 -0.380154 0.917738 + -0.997406 1.27631 -1.15377 -0.28009 -0.711521 0.644428 + -1.01212 1.34121 -1.13867 -0.187961 -0.197365 0.962142 + -1.02483 1.29119 -1.17293 -0.333986 -0.746365 0.575667 + -1.08555 1.30697 -1.17926 -0.430371 -0.486571 0.760283 + -1.03396 1.37048 -1.14108 -0.276228 0.0983286 0.956049 + -0.881699 1.8053 -1.05151 0.224009 -0.41161 0.883401 + -0.884078 1.83552 -1.04158 -0.147377 0.043993 0.988101 + -0.866868 1.80436 -1.06011 0.560762 -0.461412 0.687492 + -0.872943 1.83326 -1.04231 0.280845 -0.0786284 0.956527 + -0.870912 1.84504 -1.04603 0.346052 0.388959 0.853791 + -0.882047 1.8473 -1.0453 -0.0799213 0.439578 0.894642 + -0.889066 1.8498 -1.0488 -0.354846 0.543174 0.760951 + -0.851051 1.83385 -1.05827 0.861569 -0.0510504 0.505067 + -0.858111 1.83233 -1.05092 0.628433 -0.114909 0.76933 + -0.863225 1.84456 -1.05049 0.539952 0.391118 0.745304 + -0.869399 1.85334 -1.05423 0.335924 0.772242 0.539256 + -0.877086 1.85383 -1.04977 0.164155 0.747204 0.644002 + -0.847924 1.83866 -1.06835 0.985729 0.12353 0.114364 + -0.854544 1.84856 -1.06307 0.763419 0.544449 0.347515 + -0.856165 1.84608 -1.05784 0.693148 0.44524 0.56684 + -0.86484 1.85376 -1.05757 0.395155 0.744711 0.537827 + -0.856266 1.85362 -1.07121 0.738622 0.66465 0.112596 + -0.863219 1.85625 -1.06279 0.427837 0.802477 0.415915 + -0.884859 1.8593 -1.06086 -0.100546 0.974081 0.202626 + -0.884105 1.85633 -1.05326 -0.120769 0.838497 0.531355 + -0.741661 1.75646 -1.18278 0.901418 -0.322646 0.288696 + -0.72527 1.79989 -1.16198 0.882191 -0.401839 0.245487 + -0.722925 1.80436 -1.17595 0.960255 -0.19539 -0.199333 + -0.715678 1.83173 -1.16247 0.992216 0.0606605 -0.108756 + -0.718023 1.82726 -1.14849 0.927909 -0.120958 0.352639 + -0.723183 1.82601 -1.14039 0.699441 -0.170049 0.694166 + -0.719883 1.83594 -1.17128 0.812393 0.29715 -0.501716 + -0.722907 1.84586 -1.16508 0.738021 0.601064 -0.306672 + -0.718702 1.84165 -1.15626 0.904508 0.422866 0.0552204 + -0.719918 1.83933 -1.14902 0.884694 0.276454 0.375354 + -0.725078 1.83808 -1.14091 0.670735 0.225041 0.706733 + -0.729735 1.84908 -1.16954 0.540625 0.683133 -0.490973 + -0.727286 1.85203 -1.15864 0.668437 0.742372 0.0455698 + -0.727866 1.85081 -1.15354 0.505989 0.833739 0.221031 + -0.72402 1.8482 -1.15171 0.65874 0.729355 0.184669 + -0.725235 1.84589 -1.14446 0.627696 0.584031 0.514689 + -0.734115 1.85525 -1.16309 0.404735 0.885162 -0.229518 + -0.738743 1.85714 -1.16096 0.175885 0.981258 -0.0787225 + -0.741575 1.85703 -1.15459 0.111935 0.981126 0.157681 + -0.742155 1.85581 -1.14948 0.0830682 0.919877 0.383309 + -0.738837 1.85158 -1.14317 0.165112 0.81137 0.560729 + -0.734991 1.84898 -1.14134 0.28898 0.734137 0.614438 + -0.73085 1.84656 -1.14096 0.41381 0.578669 0.702783 + -0.730692 1.83876 -1.1374 0.461874 0.259079 0.848263 + -0.751185 1.85277 -1.14682 -0.338569 0.797565 0.49926 + -0.747867 1.84854 -1.14049 -0.240256 0.671139 0.70132 + -0.742219 1.8435 -1.13543 -0.00154157 0.516416 0.856336 + -0.738078 1.84109 -1.13504 0.251153 0.363366 0.897155 + -0.755037 1.83934 -1.13707 -0.550152 0.370944 0.748153 + -0.749389 1.83431 -1.13199 -0.282888 0.174373 0.943169 + 0.872043 1.89298 -1.22862 -0.906308 0.309655 -0.287609 + 0.878324 1.8668 -1.24714 -0.923999 -0.0316581 -0.381081 + 0.875993 1.86509 -1.23433 -0.963138 -0.268909 -0.00727253 + 0.878844 1.8951 -1.23876 -0.630611 0.522384 -0.573974 + 0.885126 1.86893 -1.25728 -0.665671 0.256176 -0.700896 + 0.893321 1.82549 -1.27123 -0.92697 0.0239723 -0.374368 + 0.890991 1.82377 -1.25843 -0.98238 -0.186885 0.00167389 + 0.870466 1.89166 -1.22009 -0.991227 0.124971 0.0430212 + 0.878416 1.90396 -1.21984 -0.68511 0.715364 -0.137398 + 0.881941 1.90506 -1.22509 -0.505147 0.792278 -0.342232 + 0.890922 1.90658 -1.22905 -0.207644 0.850486 -0.483278 + 0.887826 1.89661 -1.24271 -0.263922 0.670285 -0.693587 + 0.878806 1.86382 -1.22269 -0.805291 -0.438182 0.39938 + 0.873278 1.89039 -1.20845 -0.877273 -0.0865625 0.472121 + 0.876839 1.90264 -1.21131 -0.797739 0.590288 0.123178 + 0.887159 1.91034 -1.21301 -0.368141 0.929522 0.0214756 + 0.890685 1.91144 -1.21827 -0.242699 0.956851 -0.159792 + 0.89469 1.82278 -1.24289 -0.816301 -0.373796 0.440374 + 0.904845 1.82269 -1.23241 -0.494589 -0.436018 0.751845 + 0.88896 1.86373 -1.21221 -0.483747 -0.495917 0.721148 + 0.880026 1.89016 -1.20144 -0.579202 -0.214069 0.786574 + 0.878296 1.90197 -1.20528 -0.783152 0.41717 0.461132 + 0.896376 1.771 -1.26494 -0.873527 -0.112645 0.473562 + 0.910577 1.77123 -1.25016 -0.535568 -0.248242 0.807182 + 0.924168 1.82424 -1.22396 -0.108986 -0.391865 0.913545 + 0.903325 1.86447 -1.20606 -0.132739 -0.436019 0.890094 + 0.89439 1.89091 -1.19529 -0.162816 -0.233976 0.958512 + 0.892676 1.772 -1.28048 -0.997109 0.066978 0.0358879 + 0.88112 1.71182 -1.3056 -0.987083 0.147237 0.0631539 + 0.886475 1.71007 -1.2832 -0.875618 -0.0391503 0.481415 + 0.900676 1.7103 -1.26843 -0.562681 -0.176691 0.807571 + 0.9299 1.77278 -1.24171 -0.142804 -0.28556 0.947661 + 0.895936 1.77431 -1.29849 -0.912612 0.230391 -0.337727 + 0.88438 1.71413 -1.3236 -0.894988 0.328628 -0.301662 + 0.869117 1.64944 -1.35508 -0.960438 0.257667 -0.105674 + 0.875055 1.65277 -1.32577 -0.976358 0.0243469 0.214784 + 0.88041 1.65102 -1.30338 -0.857546 -0.096681 0.505241 + 0.902286 1.82802 -1.2849 -0.63934 0.29314 -0.710854 + 0.904902 1.77684 -1.31216 -0.63683 0.383698 -0.668748 + 0.897349 1.7179 -1.34324 -0.632185 0.451788 -0.629468 + 0.882085 1.65322 -1.37472 -0.699378 0.503023 -0.507778 + 0.898674 1.87111 -1.26329 -0.247416 0.504394 -0.827268 + 0.915835 1.83019 -1.29091 -0.233422 0.47246 -0.84988 + 0.923847 1.78005 -1.32045 -0.22648 0.472037 -0.851991 + 0.916294 1.72112 -1.35154 -0.228769 0.490876 -0.840658 + 0.898097 1.66592 -1.38022 -0.32626 0.507299 -0.797623 + 0.903908 1.89837 -1.24266 0.100322 0.745915 -0.658442 + 0.914757 1.87286 -1.26323 0.126985 0.630355 -0.765851 + 0.937617 1.83285 -1.29074 0.171946 0.568439 -0.804557 + 0.94563 1.78271 -1.32028 0.181882 0.492761 -0.850944 + 0.947541 1.72482 -1.35133 0.216111 0.426551 -0.878265 + 0.899259 1.90748 -1.22901 0.0454413 0.874112 -0.483594 + 0.913094 1.8987 -1.23785 0.449427 0.75285 -0.480867 + 0.928538 1.87366 -1.25585 0.511887 0.675928 -0.530182 + 0.951398 1.83367 -1.28336 0.572537 0.57642 -0.583045 + 0.964985 1.78391 -1.3099 0.639097 0.429007 -0.638363 + 0.899021 1.91234 -1.21824 0.057848 0.985096 -0.161983 + 0.908445 1.90781 -1.22421 0.382049 0.863201 -0.330035 + 0.920418 1.89784 -1.2256 0.698801 0.678636 -0.226122 + 0.935862 1.8728 -1.2436 0.734935 0.627395 -0.257385 + 0.961024 1.83316 -1.2666 0.810346 0.510054 -0.288416 + 0.902818 1.91189 -1.21188 0.156502 0.987667 0.00451603 + 0.912241 1.90737 -1.21786 0.542561 0.827549 -0.14419 + 0.922484 1.89698 -1.21745 0.821951 0.564428 0.0762759 + 0.938796 1.87199 -1.23129 0.856756 0.510932 0.070134 + 0.963958 1.83235 -1.2543 0.919178 0.391394 0.0438425 + 0.889304 1.90999 -1.20868 -0.107866 0.985112 0.133863 + 0.904962 1.91155 -1.20754 0.258502 0.961302 0.0952659 + 0.914307 1.90651 -1.20973 0.672262 0.729944 0.12347 + 0.920371 1.8956 -1.209 0.811236 0.318425 0.490409 + 0.936683 1.87061 -1.22284 0.833461 0.274293 0.479694 + 0.885643 1.90921 -1.20591 -0.431256 0.890088 0.147522 + 0.900206 1.91005 -1.20039 0.13545 0.879705 0.455821 + 0.903867 1.91083 -1.20316 0.236963 0.89282 0.383042 + 0.913211 1.9058 -1.20534 0.67462 0.574165 0.463921 + 0.8871 1.90855 -1.19987 -0.432099 0.735092 0.522427 + 0.894546 1.90894 -1.19668 -0.0791984 0.71599 0.693603 + 0.902379 1.90329 -1.19545 0.28921 0.279154 0.915659 + 0.908039 1.90442 -1.19917 0.53613 0.404511 0.740902 + 0.915198 1.89422 -1.20284 0.647464 0.10605 0.754681 + 0.885044 1.90176 -1.19827 -0.539796 0.162203 0.826021 + 0.89249 1.90214 -1.19508 -0.214567 0.115304 0.969879 + 0.90428 1.89206 -1.19567 0.285952 -0.110533 0.951848 + 0.918214 1.86636 -1.2066 0.333127 -0.221324 0.916538 + 0.929133 1.86853 -1.21377 0.659105 0.0268868 0.75157 + 0.95363 1.82897 -1.23424 0.681336 -0.0257633 0.731517 + 0.96118 1.83107 -1.24331 0.869195 0.177609 0.46147 + 0.939057 1.82614 -1.2245 0.35354 -0.224459 0.90809 + 0.950772 1.77543 -1.24251 0.353381 -0.233111 0.90597 + 0.965345 1.77828 -1.25224 0.682393 -0.133226 0.718742 + 0.976077 1.78081 -1.26509 0.896513 0.00726872 0.442958 + 0.978855 1.78209 -1.27609 0.982352 0.185873 0.0208511 + 0.949324 1.71495 -1.25716 0.292957 -0.170495 0.940802 + 0.970322 1.71906 -1.2711 0.671748 -0.0529879 0.738882 + 0.981054 1.7216 -1.28396 0.885054 0.0616257 0.46139 + 0.928452 1.71229 -1.25636 -0.164525 -0.231082 0.958923 + 0.932203 1.65554 -1.26966 -0.223342 -0.225336 0.948336 + 0.966784 1.65206 -1.26669 0.232722 -0.11764 0.965402 + 0.987782 1.65617 -1.28064 0.55103 0.113918 0.826673 + 0.904427 1.65354 -1.28173 -0.519262 -0.205645 0.829504 + 0.90846 1.6036 -1.29017 -0.405016 0.511616 0.757767 + 0.950853 1.59833 -1.28282 -0.0497196 0.491563 0.869421 + 0.985434 1.59485 -1.27985 0.0444115 0.467994 0.882615 + 0.884443 1.60108 -1.31182 -0.727831 0.557227 0.399701 + 0.870447 1.59662 -1.30624 0.221189 0.971373 -0.0866567 + 0.908318 1.60006 -1.27887 -0.0959085 0.971723 -0.215768 + 0.95071 1.59479 -1.27152 0.165589 0.943181 -0.288081 + 0.867816 1.59058 -1.35233 -0.78464 0.61236 0.0967258 + 0.861878 1.58725 -1.38164 -0.861407 0.481143 0.162726 + 0.853821 1.58612 -1.34676 0.123938 0.937864 -0.324115 + 0.847109 1.57183 -1.41682 -0.55664 0.415593 -0.719329 + 0.82419 1.56177 -1.40977 -0.312548 0.545862 -0.777398 + 0.838959 1.57718 -1.37458 0.0167008 0.918155 -0.395869 + 0.828052 1.63679 -1.30945 0.661584 0.604942 -0.443116 + 0.863122 1.58453 -1.42233 -0.300306 0.376533 -0.876378 + 0.878919 1.56037 -1.42798 0.000490382 0.28073 -0.959786 + 0.797539 1.54957 -1.40402 -0.521969 0.331794 -0.785787 + 0.796629 1.62009 -1.34554 -0.152186 0.621972 -0.768108 + 0.81319 1.62786 -1.33727 0.332519 0.657284 -0.676319 + 0.929344 1.6696 -1.38002 0.104402 0.416431 -0.903153 + 0.945141 1.64544 -1.38566 0.358129 0.318716 -0.87759 + 0.979727 1.6575 -1.35814 0.695454 0.298398 -0.653683 + 0.961283 1.56924 -1.40281 0.387895 0.301147 -0.871119 + 0.966896 1.726 -1.34095 0.635205 0.344313 -0.691349 + 0.993663 1.65649 -1.33417 0.860705 0.275485 -0.428129 + 1.01775 1.58153 -1.33251 0.825631 0.358422 -0.435738 + 0.99587 1.58131 -1.37529 0.704373 0.325369 -0.630867 + 0.980832 1.72499 -1.31697 0.899691 0.251182 -0.35702 + 0.985075 1.72368 -1.29993 0.981643 0.190319 -0.012446 + 1.00529 1.65647 -1.30746 0.933858 0.341612 -0.10588 + 0.974611 1.7834 -1.29314 0.883863 0.323067 -0.338252 + 1.00127 1.65438 -1.2915 0.783175 0.352818 0.512013 + 1.04258 1.58189 -1.28426 0.803695 0.593714 0.0397228 + 1.02939 1.58151 -1.30581 0.807925 0.41078 -0.422513 + 1.07231 1.52317 -1.30657 0.666608 0.636141 -0.388534 + 1.06195 1.51683 -1.33241 0.557698 0.624062 -0.547284 + 1.03261 1.52261 -1.34987 0.649056 0.453575 -0.610734 + 1.02909 1.58369 -1.27341 0.37508 0.682689 0.627097 + 1.03741 1.56026 -1.23476 0.828056 0.359635 0.4301 + 1.0855 1.52355 -1.28503 0.760083 0.648752 -0.0373316 + 0.986353 1.58749 -1.26568 0.255703 0.940471 -0.223896 + 1.03001 1.57633 -1.25923 0.556939 0.822223 0.11734 + 0.972744 1.63665 -1.23472 0.4639 0.61487 -0.637755 + 0.985381 1.63085 -1.22063 0.711481 0.636714 -0.297304 + 0.988965 1.63519 -1.19758 0.87874 0.477179 0.0107998 + 1.0336 1.58068 -1.23618 0.902987 0.425588 0.0590622 + 0.937101 1.64394 -1.24057 0.108348 0.564176 -0.818514 + 0.932562 1.69336 -1.20595 0.125424 0.565252 -0.815328 + 0.95376 1.69237 -1.19926 0.516272 0.534465 -0.669186 + 0.966397 1.68657 -1.18517 0.864679 0.398109 -0.306332 + 0.900294 1.64037 -1.24217 -0.203537 0.578861 -0.789616 + 0.895755 1.68979 -1.20754 -0.262848 0.546604 -0.795069 + 0.903856 1.7466 -1.17053 -0.228396 0.53578 -0.812881 + 0.929618 1.74917 -1.16933 0.134549 0.560237 -0.817332 + 0.950816 1.74817 -1.16265 0.548122 0.518158 -0.656562 + 0.880133 1.59288 -1.26871 -0.440186 0.888957 -0.126459 + 0.87211 1.63319 -1.23201 -0.692026 0.412763 -0.592222 + 0.873755 1.68132 -1.19933 -0.702369 0.431544 -0.566081 + 0.86893 1.59311 -1.27569 0.333308 0.88666 0.320531 + 0.850108 1.57875 -1.2451 0.31737 0.70288 0.636581 + 0.861311 1.57852 -1.23812 -0.724329 0.689417 -0.00716767 + 0.857655 1.61714 -1.21114 -0.908471 0.230149 -0.348871 + 0.8593 1.66527 -1.17846 -0.942939 0.245602 -0.224824 + 0.836896 1.63376 -1.25498 0.887013 0.30805 0.343966 + 0.824419 1.61758 -1.23136 0.7879 0.153334 0.596408 + 0.809434 1.59979 -1.20989 0.468844 0.0923743 0.878437 + 0.835122 1.56096 -1.22364 0.2324 0.689456 0.686033 + 0.849239 1.56173 -1.2133 -0.76983 0.631154 0.0949045 + 0.838414 1.63727 -1.28553 0.829743 0.542126 -0.132761 + 0.820232 1.68161 -1.23398 0.958758 0.0668034 0.276261 + 0.807755 1.66545 -1.21036 0.817494 -0.06223 0.572566 + 0.810805 1.6878 -1.27831 0.723873 0.458609 -0.515447 + 0.821167 1.68827 -1.25439 0.951288 0.273571 -0.142159 + 0.814856 1.73774 -1.2052 0.961599 0.044988 0.270747 + 0.799337 1.68411 -1.29216 0.368262 0.568784 -0.735436 + 0.808645 1.74381 -1.24229 0.747747 0.428131 -0.507521 + 0.815791 1.74438 -1.22561 0.951262 0.268211 -0.152195 + 0.782775 1.67633 -1.30044 -0.167767 0.577624 -0.798877 + 0.785869 1.73448 -1.26199 -0.104131 0.541873 -0.833985 + 0.797176 1.7401 -1.25615 0.399636 0.532444 -0.746187 + 0.787113 1.78893 -1.22313 0.34934 0.613948 -0.707834 + 0.795407 1.79133 -1.21336 0.658041 0.586085 -0.472744 + 0.764655 1.66775 -1.29685 -0.519034 0.478927 -0.707978 + 0.767748 1.72589 -1.25841 -0.506997 0.460352 -0.728718 + 0.762937 1.77707 -1.22652 -0.485036 0.387786 -0.783812 + 0.775806 1.7833 -1.22897 -0.112055 0.538206 -0.835331 + 0.769978 1.60789 -1.33978 -0.530959 0.481728 -0.697151 + 0.73886 1.65542 -1.28029 -0.801528 0.341671 -0.490728 + 0.749705 1.71721 -1.2469 -0.781608 0.341088 -0.522253 + 0.744894 1.76839 -1.21501 -0.779076 0.193733 -0.596245 + 0.744183 1.59556 -1.32321 -0.806924 0.284152 -0.517813 + 0.729767 1.64655 -1.26158 -0.988843 0.121566 -0.0860849 + 0.740612 1.70835 -1.2282 -0.989546 0.115787 -0.085973 + 0.73841 1.76216 -1.20164 -0.979651 -0.0920684 -0.178347 + 0.729409 1.81058 -1.18933 -0.774944 0.121421 -0.620257 + 0.745021 1.53976 -1.35016 -0.857666 0.140928 -0.494518 + 0.731258 1.53341 -1.31358 -0.992166 -0.120595 -0.032611 + 0.73042 1.58921 -1.28664 -0.99532 0.0286265 -0.0922976 + 0.734398 1.63822 -1.23451 -0.93395 -0.0838859 0.347418 + 0.743863 1.70264 -1.20935 -0.93418 -0.0959446 0.343659 + 0.800462 1.47952 -1.42216 -0.654995 0.201962 -0.728143 + 0.747944 1.46971 -1.36831 -0.821622 0.0109213 -0.569928 + 0.731964 1.45244 -1.3328 -0.994701 0.0114356 -0.102175 + 0.737625 1.4509 -1.30698 -0.950366 0.0642186 0.304435 + 0.741959 1.47673 -1.30362 -0.951476 0.0479465 0.303965 + 0.825578 1.46091 -1.45214 -0.554062 0.229852 -0.800114 + 0.776506 1.38133 -1.41549 -0.878261 -0.00475248 -0.478157 + 0.760195 1.37562 -1.3687 -0.886336 -0.153831 -0.436743 + 0.744214 1.35836 -1.33319 -0.927914 -0.30871 -0.208981 + 0.846034 1.46578 -1.46154 -0.251322 0.276228 -0.92765 + 0.838096 1.3547 -1.4638 -0.415187 -0.111923 -0.902825 + 0.801622 1.36272 -1.44547 -0.651956 -0.0785874 -0.754173 + 0.810647 1.30891 -1.43728 -0.651862 -0.39695 -0.646148 + 0.797745 1.30144 -1.40886 -0.78557 -0.469365 -0.403207 + 0.876928 1.5005 -1.44858 0.132816 0.318797 -0.938471 + 0.883447 1.38217 -1.48305 -0.172928 0.145219 -0.97417 + 0.858552 1.35956 -1.47319 -0.415022 -0.074743 -0.906736 + 0.878787 1.29238 -1.45967 -0.187484 -0.482284 -0.855717 + 0.847121 1.30088 -1.4556 -0.344237 -0.382087 -0.857619 + 0.959292 1.50938 -1.42342 0.335554 0.318392 -0.886583 + 0.963096 1.45929 -1.44114 0.316869 0.355454 -0.879344 + 0.91434 1.41689 -1.47011 0.15869 0.319272 -0.934282 + 1.01072 1.52239 -1.39266 0.689735 0.308729 -0.654944 + 1.01453 1.4723 -1.41038 0.461231 0.414974 -0.784259 + 0.98016 1.41624 -1.45338 0.317951 0.362398 -0.876114 + 0.931404 1.37385 -1.48235 0.150924 0.292162 -0.944385 + 1.04978 1.47254 -1.39122 0.453557 0.540576 -0.708564 + 1.05458 1.42328 -1.4134 0.465144 0.328523 -0.822018 + 1.01932 1.42304 -1.43253 0.431923 0.331593 -0.838742 + 0.999749 1.41196 -1.44675 0.422067 0.320541 -0.848005 + 0.964212 1.36744 -1.47782 0.2982 0.188931 -0.935618 + 1.07912 1.46677 -1.37376 0.46458 0.535617 -0.705181 + 1.08654 1.42099 -1.39583 0.507833 0.322928 -0.798638 + 1.04447 1.36845 -1.43462 0.433339 0.224583 -0.8728 + 1.02934 1.36782 -1.44163 0.443659 0.159694 -0.881853 + 1.00976 1.35673 -1.45584 0.530498 0.0172642 -0.84751 + 1.11694 1.47565 -1.34457 0.615662 0.561044 -0.553345 + 1.12435 1.42987 -1.36663 0.633974 0.337756 -0.695699 + 1.07643 1.36615 -1.41705 0.46611 0.247746 -0.849331 + 1.06289 1.32996 -1.4339 0.433489 0.0534647 -0.899572 + 1.04776 1.32933 -1.44091 0.254579 -0.142309 -0.956524 + 1.1273 1.48199 -1.31873 0.730982 0.646021 -0.219823 + 1.14774 1.43202 -1.33843 0.886451 0.265743 -0.378927 + 1.11281 1.36137 -1.40025 0.602261 0.218063 -0.767939 + 1.09927 1.32518 -1.4171 0.557531 -0.140522 -0.818176 + 1.0756 1.31095 -1.42544 0.359296 -0.502092 -0.786645 + 1.13437 1.47422 -1.2827 0.801884 0.580395 0.141858 + 1.15481 1.42424 -1.30241 0.961423 0.240654 -0.133238 + 1.13619 1.36352 -1.37206 0.845504 0.0866211 -0.526896 + 1.124 1.32265 -1.39441 0.752232 -0.259531 -0.605633 + 1.10033 1.30842 -1.40275 0.512621 -0.65194 -0.558743 + 1.07278 1.5156 -1.24957 0.686427 0.548963 0.476925 + 1.12165 1.46626 -1.24724 0.671236 0.507542 0.540226 + 1.15167 1.42218 -1.25256 0.851174 0.254951 0.458806 + 1.1603 1.41239 -1.27724 0.983932 0.155433 0.0878491 + 1.15203 1.37176 -1.33905 0.929861 0.0917609 -0.356285 + 1.03957 1.50887 -1.20666 0.635208 0.390244 0.666498 + 1.09297 1.44319 -1.20978 0.589965 0.380588 0.712105 + 1.12299 1.39912 -1.2151 0.714026 0.198628 0.671352 + 1.14928 1.36379 -1.24717 0.888024 -0.0493068 0.457146 + 1.15791 1.354 -1.27186 0.960906 -0.173744 0.215576 + 1.00421 1.55353 -1.19186 0.737266 0.0997922 0.668191 + 1.01636 1.48583 -1.17629 0.554872 0.331603 0.762992 + 1.06975 1.42015 -1.1794 0.531778 0.347786 0.772177 + 1.08528 1.38534 -1.17552 0.582804 0.25968 0.770004 + 1.11115 1.37852 -1.19769 0.731748 0.138143 0.667429 + 0.990011 1.60374 -1.16747 0.810996 0.0240756 0.584556 + 0.963392 1.60487 -1.13858 0.646056 -0.107365 0.755701 + 0.97759 1.55466 -1.16298 0.733845 0.00551385 0.679294 + 0.988788 1.50586 -1.16464 0.63886 0.238227 0.73151 + 1.01843 1.40529 -1.14496 0.379943 0.231609 0.895545 + 0.986193 1.62416 -1.16889 0.920829 0.262327 0.288544 + 0.967825 1.6684 -1.13811 0.925109 0.026811 0.378754 + 0.955425 1.65951 -1.12022 0.689505 -0.170272 0.703982 + 0.937216 1.59524 -1.12558 0.255904 -0.164941 0.952527 + 0.948263 1.54908 -1.13115 0.376309 -0.0268754 0.926104 + 0.970598 1.67943 -1.1668 0.971454 0.235007 0.0323743 + 0.963711 1.73707 -1.13453 0.979887 0.198885 0.0163293 + 0.961795 1.7294 -1.11447 0.937887 0.0361091 0.345057 + 0.949395 1.72051 -1.09659 0.69234 -0.15825 0.704004 + 0.929249 1.64988 -1.10723 0.246628 -0.276896 0.928711 + 0.95951 1.7442 -1.1529 0.878679 0.362987 -0.310103 + 0.945054 1.79252 -1.1222 0.826759 0.519852 -0.214996 + 0.948172 1.78724 -1.10924 0.920011 0.382565 0.0849929 + 0.946256 1.77957 -1.08917 0.888531 0.203626 0.411155 + 0.93636 1.7965 -1.13195 0.517344 0.627447 -0.581949 + 0.91926 1.83109 -1.09737 0.760489 0.631822 -0.149855 + 0.922378 1.82582 -1.0844 0.852175 0.502442 0.146117 + 0.920922 1.82009 -1.06974 0.830829 0.32796 0.449628 + 0.937389 1.77329 -1.07643 0.674702 -0.0326782 0.737367 + 0.921356 1.79703 -1.13685 0.137795 0.605047 -0.784175 + 0.912562 1.83421 -1.10477 0.476359 0.708658 -0.520467 + 0.902873 1.85371 -1.07998 0.686777 0.723948 -0.0650869 + 0.904925 1.85022 -1.07134 0.76785 0.612483 0.187805 + 0.895594 1.79447 -1.13804 -0.229959 0.511102 -0.828187 + 0.878788 1.83304 -1.11036 -0.244041 0.52293 -0.816693 + 0.897558 1.83475 -1.10967 0.108401 0.647948 -0.753932 + 0.896175 1.85682 -1.08738 0.408285 0.81675 -0.407705 + 0.879943 1.78854 -1.13211 -0.667891 0.295933 -0.682894 + 0.863138 1.82711 -1.10443 -0.686341 0.249155 -0.683271 + 0.867431 1.85564 -1.09128 -0.297956 0.713357 -0.634306 + 0.886201 1.85735 -1.09059 0.0874 0.798347 -0.595821 + 0.890148 1.86201 -1.07722 0.294309 0.949582 -0.10806 + 0.881855 1.73813 -1.16231 -0.695486 0.406079 -0.59279 + 0.869894 1.77725 -1.11761 -0.927555 0.0460724 -0.370837 + 0.855652 1.81903 -1.09362 -0.91446 -0.0115547 -0.404512 + 0.857132 1.85179 -1.0873 -0.700516 0.527592 -0.480545 + 0.871806 1.72683 -1.1478 -0.939929 0.223364 -0.258151 + 0.867292 1.76962 -1.10525 -0.988095 -0.150014 -0.0341174 + 0.85305 1.8114 -1.08127 -0.973045 -0.222022 -0.0623643 + 0.847924 1.83866 -1.06835 -0.985721 0.123547 0.114415 + 0.849646 1.84372 -1.07649 -0.937522 0.293781 -0.186399 + 0.855673 1.6544 -1.1612 -0.987949 0.121134 0.0963535 + 0.868179 1.71596 -1.13054 -0.994725 0.054719 0.0867662 + 0.871456 1.76321 -1.09177 -0.847421 -0.340439 0.407405 + 0.856177 1.80659 -1.07119 -0.842373 -0.399871 0.361263 + 0.851051 1.83385 -1.05827 -0.861721 -0.0505548 0.504858 + 0.845582 1.60035 -1.18631 -0.998571 0.0519338 -0.0125878 + 0.861678 1.64516 -1.14179 -0.862892 -0.0525943 0.502644 + 0.872343 1.70956 -1.11707 -0.867016 -0.132437 0.480358 + 0.851587 1.59112 -1.1669 -0.910225 0.0169641 0.413766 + 0.871136 1.58554 -1.14314 -0.632264 -0.102075 0.767999 + 0.876677 1.64231 -1.1261 -0.616535 -0.179227 0.766657 + 0.887343 1.7067 -1.10138 -0.596558 -0.266608 0.756993 + 0.831316 1.54152 -1.18504 -0.668939 0.574605 0.47154 + 0.850865 1.53594 -1.16128 -0.598038 -0.059599 0.799249 + 0.900081 1.58792 -1.12604 -0.25884 -0.202557 0.944443 + 0.905622 1.64469 -1.10901 -0.247844 -0.268388 0.930882 + 0.90756 1.70853 -1.08935 -0.232993 -0.324206 0.916845 + 0.8172 1.54075 -1.19538 -0.222111 0.448176 0.865913 + 0.796371 1.52699 -1.20372 -0.6791 -0.17792 0.712157 + 0.865981 1.48471 -1.16314 -0.429084 -0.0594261 0.901308 + 0.911128 1.54176 -1.13161 -0.218763 -0.134349 0.966485 + 0.794672 1.59027 -1.20888 0.0241634 0.111627 0.993456 + 0.796723 1.54369 -1.19477 -0.298448 -0.136837 0.944566 + 0.781369 1.64472 -1.19888 -0.0332926 -0.246044 0.968687 + 0.766167 1.63927 -1.20409 -0.3666 -0.229803 0.901552 + 0.774195 1.59321 -1.20828 -0.284964 -0.0249724 0.958213 + 0.753347 1.59002 -1.22145 -0.748606 -0.191462 0.634768 + 0.752994 1.57331 -1.2304 -0.799915 -0.341954 0.493158 + 0.796131 1.65424 -1.19988 0.475111 -0.168223 0.863696 + 0.78446 1.70838 -1.1777 0.0523447 -0.337577 0.939841 + 0.769258 1.70293 -1.18292 -0.332044 -0.329531 0.88383 + 0.745318 1.63607 -1.21726 -0.718234 -0.176283 0.6731 + 0.794522 1.71516 -1.17827 0.534357 -0.246125 0.808632 + 0.774765 1.76119 -1.15758 0.0640766 -0.360595 0.930519 + 0.763914 1.75726 -1.16133 -0.282903 -0.432999 0.855849 + 0.74944 1.75483 -1.17051 -0.626443 -0.429482 0.650473 + 0.754784 1.7005 -1.1921 -0.668803 -0.257403 0.697457 + 0.806145 1.72636 -1.18875 0.8327 -0.106115 0.543462 + 0.784826 1.76798 -1.15815 0.511949 -0.171132 0.841797 + 0.754731 1.8035 -1.13919 0.0353615 -0.330528 0.943134 + 0.74388 1.79956 -1.14295 -0.298056 -0.446937 0.843451 + 0.801975 1.78702 -1.18221 0.912047 0.23468 0.336295 + 0.793264 1.77565 -1.16576 0.782726 0.0284399 0.621717 + 0.771158 1.81581 -1.14754 0.72509 0.144497 0.673324 + 0.76272 1.80815 -1.13993 0.445967 -0.0988095 0.889579 + 0.741401 1.82964 -1.13126 -0.10746 -0.0404948 0.993384 + 0.802553 1.79192 -1.19667 0.882359 0.461122 -0.0938562 + 0.778137 1.82888 -1.1742 0.800014 0.597594 -0.0534719 + 0.777559 1.82398 -1.15972 0.844614 0.357656 0.398383 + 0.761438 1.84749 -1.14925 0.684258 0.573743 0.450123 + 0.755037 1.83934 -1.13707 0.550136 0.371064 0.748106 + 0.772673 1.82908 -1.18649 0.579913 0.69253 -0.429073 + 0.756334 1.85098 -1.17113 0.449574 0.819048 -0.356432 + 0.761798 1.85078 -1.15885 0.657893 0.752374 0.0333235 + 0.751545 1.85605 -1.1564 0.318978 0.941965 0.104663 + 0.751185 1.85277 -1.14682 0.333104 0.803652 0.493138 + 0.764379 1.82667 -1.19626 0.277715 0.681506 -0.677069 + 0.750673 1.84965 -1.17755 0.187976 0.794057 -0.578047 + 0.743052 1.85483 -1.16918 -0.00451143 0.913251 -0.407371 + 0.748713 1.85615 -1.16277 0.217819 0.957252 -0.190325 + 0.741575 1.85703 -1.15459 -0.0977939 0.980734 0.169109 + 0.755451 1.82303 -1.20038 -0.1374 0.551877 -0.822528 + 0.741745 1.84601 -1.18167 -0.204156 0.659915 -0.723072 + 0.738424 1.85294 -1.17131 -0.272659 0.812695 -0.51496 + 0.734115 1.85525 -1.16309 -0.401512 0.893973 -0.199001 + 0.738743 1.85714 -1.16096 -0.208965 0.976508 -0.0525801 + 0.742583 1.81679 -1.19792 -0.497364 0.34637 -0.795397 + 0.733057 1.84215 -1.17988 -0.514376 0.496156 -0.699462 + 0.729735 1.84908 -1.16954 -0.540659 0.683093 -0.49099 + 0.727286 1.85203 -1.15864 -0.57471 0.818156 -0.0181353 + 0.719883 1.83594 -1.17128 -0.812385 0.297167 -0.501719 + 0.722907 1.84586 -1.16508 -0.73852 0.592507 -0.321752 + 0.718702 1.84165 -1.15626 -0.907116 0.417053 0.056634 + 0.72402 1.8482 -1.15171 -0.667438 0.706083 0.236586 + 0.727866 1.85081 -1.15354 -0.412949 0.86115 0.296467 + 0.722925 1.80436 -1.17595 -0.960445 -0.19422 -0.199558 + 0.715678 1.83173 -1.16247 -0.992218 0.0606729 -0.108729 + 0.719918 1.83933 -1.14902 -0.884731 0.276412 0.375296 + 0.72527 1.79989 -1.16198 -0.882196 -0.401556 0.245931 + 0.718023 1.82726 -1.14849 -0.928105 -0.120268 0.352358 + 0.725078 1.83808 -1.14091 -0.670801 0.225145 0.706637 + 0.725235 1.84589 -1.14446 -0.608543 0.606769 0.511378 + 0.741661 1.75646 -1.18278 -0.901015 -0.323545 0.288946 + 0.733049 1.79826 -1.14971 -0.616365 -0.47901 0.625015 + 0.723183 1.82601 -1.14039 -0.699206 -0.169596 0.694513 + 0.735051 1.58088 -1.25955 -0.916573 -0.241584 0.318641 + 0.754843 1.53399 -1.27322 -0.837855 -0.282676 0.467004 + 0.772786 1.52642 -1.24407 -0.842439 -0.254015 0.475156 + 0.765543 1.47731 -1.26327 -0.862801 0.0320055 0.504529 + 0.781268 1.4777 -1.23637 -0.863051 0.0330505 0.504035 + 0.804852 1.47827 -1.19603 -0.765667 0.0301711 0.64253 + 0.823026 1.46197 -1.17892 -0.485722 0.0725922 0.871094 + 0.771192 1.37805 -1.22652 -0.864946 0.0852553 0.494571 + 0.786916 1.37844 -1.19961 -0.763687 0.0299913 0.64489 + 0.80509 1.36213 -1.18251 -0.602154 -0.177118 0.778486 + 0.853963 1.41249 -1.16796 -0.298656 -0.0246048 0.954044 + 0.896919 1.43523 -1.15219 -0.342073 -0.0846641 0.935852 + 0.766858 1.35223 -1.22987 -0.884744 -0.0354246 0.464729 + 0.780603 1.31049 -1.21006 -0.777689 -0.318832 0.541799 + 0.818454 1.29184 -1.18857 -0.485622 -0.407024 0.77363 + 0.830741 1.31746 -1.17781 -0.362327 -0.138754 0.921665 + 0.748204 1.37398 -1.2767 -0.955035 -0.0941958 0.281133 + 0.761949 1.33225 -1.25689 -0.928583 -0.335763 0.158102 + 0.792617 1.28394 -1.22778 -0.682674 -0.668313 0.295491 + 0.830468 1.26529 -1.20629 -0.392183 -0.886371 0.246048 + 0.742543 1.37551 -1.30253 -0.972277 -0.195585 0.128157 + 0.767829 1.31962 -1.27193 -0.881021 -0.471925 0.0329901 + 0.798497 1.27132 -1.24282 -0.614543 -0.717929 0.326979 + 0.841411 1.2691 -1.23049 0.0483444 -0.99745 0.0524926 + 0.769769 1.30105 -1.3271 -0.84912 -0.528196 0.00219716 + 0.768097 1.31819 -1.29644 -0.877566 -0.470584 0.0918125 + 0.804118 1.26001 -1.27021 -0.609436 -0.788784 0.0800402 + 0.824941 1.26014 -1.23715 -0.140329 -0.717787 0.681974 + 0.781434 1.29574 -1.36206 -0.828096 -0.492192 -0.268334 + 0.821516 1.24417 -1.32307 -0.513552 -0.855765 0.0626942 + 0.804387 1.25859 -1.2947 -0.655639 -0.754998 -0.0107978 + 0.851488 1.24768 -1.28461 0.0906039 -0.930692 0.354406 + 0.830563 1.24882 -1.26453 -0.0780739 -0.985026 0.153713 + 0.848779 1.23816 -1.39094 -0.425209 -0.860416 -0.280859 + 0.833181 1.23887 -1.35803 -0.482021 -0.867208 -0.12492 + 0.884292 1.22887 -1.33956 0.185294 -0.962391 0.198668 + 0.868618 1.23326 -1.31297 0.106269 -0.931696 0.347347 + 0.86168 1.24562 -1.41937 -0.373122 -0.754965 -0.539267 + 0.919071 1.22812 -1.39687 0.211984 -0.976651 -0.0348715 + 0.89989 1.22817 -1.37247 0.165118 -0.979979 0.111251 + 0.893346 1.23712 -1.42343 -0.150887 -0.857482 -0.491892 + 0.956661 1.2448 -1.41453 0.428213 -0.870625 -0.242168 + 0.984739 1.26295 -1.38875 0.484595 -0.863757 0.138175 + 0.964953 1.26802 -1.36961 0.371698 -0.807456 0.4581 + 0.945771 1.26806 -1.34521 0.484522 -0.788113 0.379627 + 0.930936 1.2538 -1.44108 0.0917345 -0.701302 -0.706937 + 0.953963 1.27147 -1.45152 0.265328 -0.542998 -0.796714 + 0.969935 1.26377 -1.436 0.54423 -0.636801 -0.546166 + 0.911098 1.29504 -1.46185 -0.027406 -0.472332 -0.880994 + 0.934125 1.31272 -1.47229 0.0393782 -0.431434 -0.901285 + 0.959516 1.32626 -1.47543 0.333047 -0.34087 -0.87914 + 0.975488 1.31856 -1.45992 0.641872 -0.290741 -0.709556 + 0.998013 1.28192 -1.41023 0.705395 -0.566574 -0.425925 + 0.873494 1.32504 -1.47781 -0.515247 -0.358328 -0.778538 + 0.905805 1.32772 -1.47999 -0.00710404 -0.419085 -0.907919 + 0.92504 1.33313 -1.48176 0.0503172 -0.374276 -0.925951 + 0.898388 1.34766 -1.48767 -0.142098 -0.143099 -0.979454 + 0.917624 1.35307 -1.48944 0.0449983 -0.0314999 -0.99849 + 0.950432 1.34667 -1.48492 0.288354 -0.105204 -0.951727 + 0.983801 1.36316 -1.47119 0.427236 0.0722023 -0.901253 + 0.997242 1.33079 -1.45792 0.338374 -0.520203 -0.78415 + 0.986845 1.32558 -1.45128 0.402605 -0.714741 -0.571887 + 1.00937 1.28894 -1.4016 0.472226 -0.650258 -0.595119 + 1.0232 1.32438 -1.44257 0.404531 -0.0596138 -0.91258 + 1.05104 1.306 -1.4271 0.0790811 -0.738515 -0.669584 + 1.02576 1.29708 -1.4081 0.0205149 -0.849385 -0.527375 + 1.01536 1.29187 -1.40145 0.20208 -0.76181 -0.615475 + 1.01945 1.27762 -1.38393 0.346569 -0.921783 -0.173801 + 1.07767 1.29616 -1.40574 0.25697 -0.864048 -0.432882 + 1.05239 1.28725 -1.38674 0.144398 -0.938631 -0.313242 + 1.02544 1.28055 -1.3838 0.290863 -0.850832 -0.437588 + 1.10613 1.29619 -1.37587 0.386258 -0.84887 -0.360866 + 1.0541 1.28699 -1.38359 0.204119 -0.941706 -0.267443 + 1.02715 1.28029 -1.38065 0.147197 -0.986975 -0.0649175 + 1.01639 1.28195 -1.37049 0.0297525 -0.977967 0.206628 + 1.00868 1.27929 -1.37378 0.220717 -0.885921 0.407955 + 1.12878 1.30845 -1.37287 0.717244 -0.572547 -0.397179 + 1.10453 1.28748 -1.35446 0.319302 -0.807367 -0.496191 + 1.0525 1.27827 -1.36219 0.10893 -0.99363 -0.0288568 + 1.03138 1.2821 -1.34221 -0.175038 -0.98392 -0.0355458 + 0.995269 1.28579 -1.35051 -0.0469675 -0.966821 0.2511 + 1.13984 1.33089 -1.36139 0.917546 -0.153986 -0.366603 + 1.1389 1.30092 -1.33857 0.809431 -0.473841 -0.346838 + 1.1003 1.25744 -1.32985 0.136053 -0.906038 -0.40073 + 1.14995 1.32335 -1.3271 0.95016 -0.256995 -0.176491 + 1.15034 1.31745 -1.28508 0.970828 -0.237921 0.0297829 + 1.13466 1.27087 -1.31396 0.726152 -0.622382 -0.292138 + 1.09158 1.25722 -1.30268 -0.128954 -0.987603 0.0895049 + 1.15752 1.35991 -1.31387 0.988885 -0.0691208 -0.131642 + 1.14609 1.30588 -1.26206 0.942912 -0.258518 0.209964 + 1.13041 1.25932 -1.29094 0.521823 -0.852761 0.0223515 + 0.734015 1.8273 -1.13362 -0.38767 -0.136647 0.911613 + 0.730692 1.83876 -1.1374 -0.461778 0.259218 0.848273 + 0.73085 1.84656 -1.14096 -0.42357 0.611243 0.668559 + 0.738078 1.84109 -1.13504 -0.251027 0.36332 0.897209 + 0.734991 1.84898 -1.14134 -0.27851 0.735778 0.617303 + 0.742219 1.8435 -1.13543 0.000378643 0.525177 0.850993 + 0.747867 1.84854 -1.14049 0.230892 0.671632 0.703988 + 0.738837 1.85158 -1.14317 -0.160839 0.793045 0.587547 + 0.749389 1.83431 -1.13199 0.282749 0.17442 0.943202 + 0.742155 1.85581 -1.14948 -0.0534366 0.930321 0.362833 + 1.08949 1.27036 -1.26294 -0.156516 -0.960898 0.228423 + 1.01727 1.29321 -1.28847 -0.336425 -0.923691 0.18334 + 1.02267 1.2819 -1.31504 -0.329628 -0.937452 0.11193 + 0.982052 1.29366 -1.32695 -0.134854 -0.947086 0.291276 + 1.12832 1.27245 -1.2512 0.488962 -0.768771 0.412198 + 1.12251 1.28682 -1.22596 0.646731 -0.599199 0.47191 + 1.10087 1.27697 -1.21521 0.338222 -0.85436 0.394557 + 1.08077 1.27493 -1.23607 -0.133126 -0.988798 0.0675028 + 1.14028 1.32026 -1.23683 0.914638 -0.114474 0.387727 + 1.10719 1.31682 -1.19002 0.682683 -0.280201 0.674857 + 1.08555 1.30697 -1.17926 0.426656 -0.506852 0.749043 + 1.05374 1.28086 -1.19382 0.0737402 -0.896939 0.435963 + 1.03364 1.27882 -1.21467 -0.0694869 -0.996927 -0.0361688 + 1.13744 1.34319 -1.22976 0.852005 -0.0366785 0.522247 + 1.10434 1.33974 -1.18294 0.720211 -0.0105243 0.693675 + 1.07848 1.34656 -1.16078 0.52262 -0.0298057 0.852044 + 1.05663 1.3173 -1.15837 0.359655 -0.420748 0.832838 + 1.02483 1.29119 -1.17293 0.375889 -0.877397 0.298131 + 1.03396 1.37048 -1.14108 0.326725 0.0856427 0.941231 + 1.01212 1.34121 -1.13867 0.1634 -0.155607 0.974211 + 0.997406 1.27631 -1.15377 0.25638 -0.731277 0.632063 + 0.97261 1.26164 -1.18472 0.163784 -0.986261 0.0215399 + 1.00003 1.27652 -1.20389 0.204927 -0.964084 -0.168955 + 0.957644 1.41559 -1.13398 -0.129767 -0.0796128 0.988343 + 0.976872 1.35841 -1.13414 -0.0756399 -0.0869513 0.993337 + 0.962162 1.29351 -1.14923 -0.140313 -0.292265 0.945988 + 0.925629 1.28328 -1.16015 -0.131081 -0.334809 0.933124 + 0.990861 1.42533 -1.13332 0.295741 -0.0188302 0.955082 + 0.926244 1.49054 -1.13347 -0.217439 -0.081181 0.972692 + 0.916147 1.37805 -1.15235 -0.293647 -0.10503 0.950127 + 0.879614 1.36781 -1.16327 -0.248977 -0.0661522 0.966247 + 0.959461 1.50028 -1.13282 0.359934 0.0942121 0.928209 + 0.931187 1.71372 -1.08756 0.279745 -0.290635 0.915027 + 0.902365 1.76281 -1.06867 -0.194326 -0.405531 0.893186 + 0.882147 1.76099 -1.0807 -0.567749 -0.422487 0.706517 + 0.919181 1.76651 -1.0674 0.272466 -0.264192 0.925184 + 0.898515 1.80898 -1.05025 0.247126 -0.216284 0.944537 + 0.881699 1.8053 -1.05151 -0.224009 -0.41161 0.883401 + 0.866868 1.80436 -1.06011 -0.560519 -0.461661 0.687523 + 0.912055 1.81381 -1.057 0.626707 0.0496546 0.777671 + 0.897618 1.84035 -1.04833 0.547167 0.254229 0.797481 + 0.884078 1.83552 -1.04158 0.147373 0.0439851 0.988102 + 0.872943 1.83326 -1.04231 -0.280863 -0.0786144 0.956523 + 0.858111 1.83233 -1.05092 -0.628119 -0.114445 0.769655 + 0.903469 1.84451 -1.05668 0.736949 0.455244 0.499659 + 0.894917 1.85396 -1.05715 0.514668 0.712968 0.476228 + 0.889066 1.8498 -1.0488 0.354849 0.543194 0.760936 + 0.882047 1.8473 -1.0453 0.0798997 0.439588 0.894639 + 0.870912 1.84504 -1.04603 -0.346091 0.388921 0.853792 + 0.895672 1.85692 -1.06475 0.520328 0.803319 0.289719 + 0.884859 1.8593 -1.06086 0.0866897 0.92823 0.361766 + 0.884105 1.85633 -1.05326 0.102357 0.844771 0.525247 + 0.877086 1.85383 -1.04977 -0.163248 0.759263 0.629976 + 0.89362 1.8604 -1.07339 0.46141 0.879977 0.112877 + 0.882319 1.86238 -1.06833 0.0863302 0.933093 0.349118 + 0.8803 1.85971 -1.0642 -0.183544 0.880091 0.437895 + 0.869399 1.85334 -1.05423 -0.332736 0.773294 0.539725 + 0.863225 1.84456 -1.05049 -0.539929 0.391074 0.745344 + 0.878847 1.864 -1.07216 0.0074882 0.990518 0.13718 + 0.869117 1.86311 -1.07252 -0.28309 0.948041 0.145182 + 0.865237 1.85893 -1.06692 -0.372999 0.852487 0.366248 + 0.863219 1.85625 -1.06279 -0.427837 0.802477 0.415915 + 0.86484 1.85376 -1.05757 -0.395155 0.744711 0.537827 + 0.880174 1.86256 -1.08044 0.0210911 0.947838 -0.318054 + 0.870445 1.86166 -1.0808 -0.230059 0.9156 -0.329773 + 0.860146 1.85782 -1.07682 -0.607892 0.7886 -0.092616 + 0.856266 1.85362 -1.07121 -0.738656 0.664643 0.112411 + 0.854544 1.84856 -1.06307 -0.763381 0.544531 0.347471 + 0.856165 1.84608 -1.05784 -0.69307 0.445276 0.566906 + 0.913342 1.25765 -1.1709 -0.108216 -0.744451 0.658849 + 0.935689 1.254 -1.17927 0.187011 -0.952847 0.238977 + 0.944768 1.28487 -1.2275 0.0501451 -0.883317 -0.466086 + 0.973217 1.29523 -1.24871 -0.00638026 -0.920206 -0.391384 + 0.852815 1.26164 -1.21466 -0.0344646 -0.967893 -0.248989 + 0.907848 1.27721 -1.22204 0.132768 -0.844577 -0.518712 + 0.896444 1.28468 -1.23787 0.189388 -0.919245 -0.345138 + 0.928007 1.29472 -1.25153 0.146829 -0.945375 -0.291044 + 0.890082 1.28386 -1.24262 0.315179 -0.944327 0.0943839 + 0.921645 1.2939 -1.25628 0.355093 -0.932088 0.0715549 + 0.951437 1.30384 -1.27738 0.392175 -0.908203 0.14617 + 0.956456 1.30509 -1.27275 0.153834 -0.959353 -0.236595 + 1.00682 1.29754 -1.2595 -0.128268 -0.940916 -0.313409 + 0.873612 1.2749 -1.24928 0.34608 -0.860455 0.37396 + 0.894538 1.27375 -1.26936 0.418576 -0.850683 0.318014 + 0.92433 1.28369 -1.29046 0.46639 -0.806028 0.364415 + 0.940004 1.27931 -1.31705 0.476945 -0.780841 0.403498 + 0.969913 1.30349 -1.30289 0.272122 -0.87837 0.392958 + 0.967692 1.30929 -1.28807 0.302757 -0.923166 0.236858 + 0.972711 1.31055 -1.28343 0.0634832 -0.975958 -0.208507 + 0.975681 1.29224 -1.33105 0.232301 -0.89181 0.388214 + 0.976651 1.30498 -1.30037 -0.163974 -0.931391 0.324997 + 0.97443 1.31079 -1.28553 -0.158101 -0.98158 0.107263 + 1.00854 1.29778 -1.2616 -0.260384 -0.959425 -0.108187 + 0.988898 1.28436 -1.35462 0.162558 -0.90241 0.399038 + 0.662234 2.30119 -1.93689 -0.700089 0.712293 -0.0501403 + 0.671906 2.30149 -1.91584 -0.479282 0.787934 0.386586 + 0.691178 2.31766 -1.92781 -0.413431 0.84002 0.351343 + 0.647785 2.28544 -1.92234 -0.783983 0.614324 0.0893147 + 0.668617 2.29306 -1.90509 -0.481967 0.723909 0.493623 + 0.703591 2.30482 -1.89977 -0.188053 0.735071 0.651388 + 0.681506 2.31737 -1.94886 -0.622821 0.77692 -0.0921334 + 0.686797 2.31231 -1.96761 -0.63471 0.57292 -0.518561 + 0.656699 2.28706 -1.94892 -0.783715 0.435917 -0.442455 + 0.64225 2.2713 -1.93437 -0.917245 0.287327 -0.27587 + 0.644497 2.27701 -1.91159 -0.813221 0.500292 0.297287 + 0.701295 2.32979 -1.95471 -0.407999 0.909046 -0.0846932 + 0.706586 2.32474 -1.97346 -0.349319 0.770202 -0.533635 + 0.707219 2.26081 -2.02254 -0.612769 0.434793 -0.659901 + 0.67712 2.23555 -2.00384 -0.75054 0.302052 -0.587754 + 0.655268 2.21173 -1.98184 -0.897819 0.111924 -0.425904 + 0.702805 2.32088 -1.92498 -0.270463 0.870784 0.410591 + 0.712922 2.33301 -1.95189 -0.152197 0.988241 0.0147135 + 0.724745 2.32977 -1.96905 0.0727982 0.913513 -0.400243 + 0.755307 2.28464 -2.02698 0.157231 0.801729 -0.576636 + 0.737148 2.2796 -2.03139 -0.292383 0.657319 -0.694581 + 0.70993 2.31707 -1.91436 -0.201646 0.844682 0.495834 + 0.732056 2.32883 -1.93265 0.165328 0.941452 0.293827 + 0.724931 2.33264 -1.94327 0.0686308 0.982874 0.171022 + 0.736754 2.3294 -1.96044 0.394043 0.900366 -0.184581 + 0.710472 2.31279 -1.90741 -0.164522 0.784902 0.597379 + 0.737508 2.31936 -1.91445 0.294043 0.749937 0.592564 + 0.736966 2.32364 -1.92139 0.244051 0.874902 0.418313 + 0.752792 2.31826 -1.93259 0.680277 0.703568 0.205465 + 0.747882 2.32345 -1.94384 0.580389 0.814059 0.0213778 + 0.726568 2.30354 -1.89746 0.241862 0.496269 0.833798 + 0.733448 2.31151 -1.9051 0.284337 0.59437 0.752248 + 0.749578 2.30373 -1.9124 0.689121 0.259375 0.676637 + 0.753638 2.31157 -1.92174 0.735604 0.484882 0.47305 + 0.709599 2.28836 -1.88548 0.183861 0.433306 0.882293 + 0.721864 2.27609 -1.88848 0.530826 0.00852059 0.847438 + 0.738832 2.29127 -1.90046 0.603796 0.0915974 0.791859 + 0.775984 2.23927 -1.94341 0.714757 -0.0973038 0.692571 + 0.78673 2.25172 -1.95535 0.811373 0.0620712 0.581223 + 0.683977 2.28909 -1.88871 -0.261317 0.69527 0.669562 + 0.689985 2.27263 -1.87442 0.111999 0.404332 0.907729 + 0.691231 2.25153 -1.8712 0.399406 -0.0528014 0.915252 + 0.719688 2.19174 -1.90802 0.53058 -0.273297 0.802368 + 0.75032 2.21631 -1.92529 0.63366 -0.191532 0.749527 + 0.677903 2.28876 -1.89228 -0.417846 0.701722 0.577054 + 0.673534 2.26235 -1.86962 -0.222932 0.348037 0.910589 + 0.67478 2.24124 -1.86641 -0.0906435 -0.201483 0.975289 + 0.694806 2.17619 -1.90076 0.0208483 -0.4975 0.867213 + 0.762482 2.08295 -1.97761 0.537573 -0.292529 0.790849 + 0.648337 2.26887 -1.89649 -0.7402 0.401833 0.539106 + 0.657623 2.26457 -1.88368 -0.659817 0.377533 0.6497 + 0.66746 2.26203 -1.87319 -0.563192 0.358048 0.744725 + 0.665293 2.24074 -1.87198 -0.61694 -0.22991 0.75268 + 0.637114 2.25814 -1.91758 -0.996338 0.0638111 0.056914 + 0.640954 2.24999 -1.90248 -0.914357 -0.116577 0.387766 + 0.655456 2.24329 -1.88247 -0.779515 -0.194685 0.59536 + 0.685319 2.17569 -1.90633 -0.545464 -0.553322 0.629527 + 0.650131 2.19857 -1.96504 -0.980034 -0.161747 -0.115636 + 0.65594 2.18625 -1.94222 -0.879701 -0.405931 0.247681 + 0.670442 2.17954 -1.9222 -0.731532 -0.506676 0.456224 + 0.723551 2.06666 -1.9786 -0.546446 -0.554346 0.627772 + 0.737599 2.0674 -1.97035 0.0459017 -0.505137 0.861818 + 0.688997 2.11225 -2.0718 -0.894282 0.123659 -0.430078 + 0.681391 2.09276 -2.04693 -0.981672 -0.15543 -0.110278 + 0.687199 2.08044 -2.0241 -0.88522 -0.395371 0.245087 + 0.708674 2.0705 -1.99447 -0.730846 -0.50479 0.459403 + 0.751927 1.96167 -2.03831 -0.570912 -0.469382 0.673602 + 0.710849 2.13608 -2.09381 -0.750137 0.29866 -0.589997 + 0.708769 2.01287 -2.1491 -0.899456 0.175576 -0.400191 + 0.701163 1.99338 -2.12423 -0.995136 -0.0689562 -0.070356 + 0.708922 1.97778 -2.09036 -0.903962 -0.306828 0.29784 + 0.730396 1.96785 -2.06072 -0.757159 -0.414667 0.504739 + 0.75542 2.17348 -2.12149 -0.603776 0.431726 -0.670125 + 0.78673 2.07714 -2.21228 -0.596372 0.440829 -0.670828 + 0.742159 2.03974 -2.18461 -0.741328 0.338106 -0.579756 + 0.718511 1.91654 -2.22502 -0.891145 0.244126 -0.382443 + 0.785349 2.19226 -2.13034 -0.281568 0.635452 -0.718972 + 0.831632 2.09707 -2.22876 -0.251725 0.627628 -0.736694 + 0.820298 1.97496 -2.31063 -0.571162 0.460803 -0.679289 + 0.751901 1.94341 -2.26053 -0.726163 0.374811 -0.576371 + 0.812239 2.19972 -2.1238 0.188133 0.768188 -0.611958 + 0.858522 2.10453 -2.22223 0.211752 0.733062 -0.64636 + 0.904952 1.99817 -2.32179 0.262376 0.678786 -0.685864 + 0.8652 1.99489 -2.32711 -0.219965 0.608386 -0.76255 + 0.830036 1.89047 -2.37428 -0.546517 0.425606 -0.721234 + 0.773471 2.28407 -2.01394 0.529883 0.778731 -0.33586 + 0.830403 2.19916 -2.11077 0.558014 0.738237 -0.378981 + 0.885057 2.10202 -2.20443 0.597761 0.687941 -0.411606 + 0.931487 1.99567 -2.304 0.613714 0.639803 -0.46261 + 0.930646 1.90147 -2.39814 0.226818 0.609783 -0.75942 + 0.784599 2.27812 -1.99735 0.723945 0.679322 -0.120109 + 0.846882 2.19034 -2.0862 0.758185 0.633255 -0.15538 + 0.901535 2.09321 -2.17986 0.786074 0.585602 -0.197883 + 0.954505 1.98373 -2.26926 0.809839 0.540711 -0.227581 + 0.792025 2.27028 -1.98033 0.831936 0.548373 0.0846659 + 0.854308 2.1825 -2.06918 0.861191 0.505947 0.0486537 + 0.911928 2.08291 -2.15493 0.887771 0.460059 0.0144161 + 0.964897 1.97343 -2.24433 0.902781 0.429595 -0.0208545 + 0.99123 1.89345 -2.33937 0.815671 0.516376 -0.260839 + 0.79287 2.26359 -1.96948 0.877851 0.312938 0.362557 + 0.855559 2.1726 -2.05312 0.901852 0.271475 0.336101 + 0.91318 2.07301 -2.13887 0.92096 0.240574 0.306524 + 0.965719 1.96289 -2.21997 0.93116 0.223686 0.287935 + 0.849419 2.16073 -2.03899 0.829023 0.0346302 0.558142 + 0.903487 2.05914 -2.11689 0.839363 0.0165293 0.543321 + 0.956027 1.94903 -2.19799 0.844699 0.0120483 0.535106 + 1.0056 1.87237 -2.28108 0.934882 0.198655 0.294163 + 1.00478 1.88291 -2.30544 0.913272 0.405469 -0.0391094 + 0.833506 2.14229 -2.0213 0.725894 -0.122797 0.676757 + 0.887574 2.04071 -2.0992 0.730839 -0.12894 0.67026 + 0.931095 1.93246 -2.16816 0.731589 -0.1219 0.670759 + 0.965064 1.835 -2.2212 0.736589 -0.0954219 0.669576 + 0.989996 1.85156 -2.25103 0.82632 -0.00260556 0.563195 + 0.807843 2.11933 -2.00318 0.64524 -0.210103 0.734521 + 0.848662 2.01527 -2.06917 0.6443 -0.211368 0.734984 + 0.892183 1.90702 -2.13813 0.643306 -0.187598 0.74227 + 0.911749 1.82007 -2.17394 0.650473 -0.131969 0.747977 + 0.978848 1.7391 -2.24915 0.708725 -0.114661 0.696105 + 0.803301 1.97889 -2.0436 0.538112 -0.279418 0.795212 + 0.822741 1.87667 -2.09111 0.525186 -0.248529 0.813888 + 0.842307 1.78971 -2.12691 0.526758 -0.0699772 0.84713 + 0.843826 1.74823 -2.12572 0.53618 -0.104514 0.837609 + 0.925533 1.72417 -2.20189 0.663526 -0.150284 0.732904 + 0.765975 1.96241 -2.03005 0.0228253 -0.454682 0.890361 + 0.785415 1.86019 -2.07757 0.0106474 -0.372981 0.927778 + 0.793324 1.79183 -2.10113 0.0268625 -0.142978 0.989361 + 0.764965 1.86176 -2.08775 -0.591649 -0.372034 0.715221 + 0.772874 1.7934 -2.11132 -0.599304 -0.107782 0.793232 + 0.770512 1.76357 -2.10983 -0.574246 -0.0769935 0.815054 + 0.794844 1.75036 -2.09994 0.00249596 -0.151938 0.988387 + 0.743434 1.86794 -2.11017 -0.773143 -0.32292 0.545868 + 0.745097 1.80715 -2.13932 -0.7821 -0.101872 0.614769 + 0.742735 1.77732 -2.13783 -0.768007 -0.0310783 0.639687 + 0.757929 1.69175 -2.14181 -0.646067 -0.254363 0.719651 + 0.713282 1.88189 -2.15177 -0.919171 -0.21556 0.329633 + 0.714945 1.8211 -2.18093 -0.908906 0.0141856 0.41676 + 0.706562 1.80358 -2.18817 -0.905076 0.0886619 0.415905 + 0.696911 1.73294 -2.22085 -0.941771 -0.0615691 0.33057 + 0.733084 1.70668 -2.17051 -0.811331 -0.152904 0.564236 + 0.705524 1.89749 -2.18565 -0.999159 0.00731655 -0.0403444 + 0.705046 1.83516 -2.22793 -0.973747 0.227527 -0.0069306 + 0.696663 1.81764 -2.23517 -0.962601 0.27088 0.00478115 + 0.690782 1.74648 -2.26215 -0.99685 0.0690316 -0.0390361 + 0.718033 1.85421 -2.2673 -0.868714 0.318007 -0.379747 + 0.710402 1.81461 -2.29184 -0.863541 0.328343 -0.382737 + 0.704521 1.74345 -2.31883 -0.930635 0.170969 -0.323555 + 0.761639 1.85892 -2.32418 -0.678895 0.418539 -0.603264 + 0.754009 1.81933 -2.34872 -0.642565 0.443453 -0.624868 + 0.719399 1.73808 -2.35506 -0.80952 0.246333 -0.532914 + 0.696827 1.64032 -2.34079 -0.950187 0.090559 -0.298235 + 0.833309 1.79061 -2.43007 -0.516089 0.41206 -0.750905 + 0.827699 1.73417 -2.4562 -0.547419 0.351054 -0.759667 + 0.748398 1.76289 -2.37486 -0.658395 0.341972 -0.670501 + 0.745485 1.659 -2.4139 -0.717426 0.197369 -0.668091 + 0.711705 1.63495 -2.37702 -0.860826 0.114814 -0.495779 + 0.890894 1.89819 -2.40346 -0.188617 0.537879 -0.821651 + 0.894168 1.79832 -2.45924 -0.254788 0.460794 -0.850148 + 0.862776 1.70508 -2.49231 -0.430393 0.308177 -0.848404 + 0.774483 1.6838 -2.4337 -0.63756 0.246803 -0.729798 + 0.95015 1.82306 -2.44983 0.176843 0.539151 -0.823433 + 0.962286 1.76365 -2.48349 0.209413 0.433209 -0.876628 + 0.906304 1.73891 -2.4929 -0.209751 0.427739 -0.879229 + 0.968212 1.90539 -2.37411 0.592635 0.59902 -0.538478 + 0.987716 1.82698 -2.4258 0.57409 0.53914 -0.616237 + 1.00159 1.77161 -2.46045 0.608269 0.398638 -0.686365 + 0.964559 1.72626 -2.49555 0.329537 0.341156 -0.880351 + 0.929799 1.71694 -2.50798 -0.0314069 0.389298 -0.920576 + 1.01923 1.82657 -2.37916 0.807799 0.478478 -0.344266 + 1.0331 1.77121 -2.41381 0.783063 0.450379 -0.428918 + 1.00386 1.73423 -2.47251 0.52275 0.357287 -0.774002 + 0.972498 1.66507 -2.51892 0.338263 0.347848 -0.874403 + 1.03278 1.81604 -2.34523 0.933579 0.358352 -0.00378537 + 1.05161 1.76093 -2.37974 0.955417 0.284174 -0.0801475 + 1.0388 1.73244 -2.44884 0.706026 0.416678 -0.572631 + 1.03766 1.66368 -2.47911 0.743369 0.220584 -0.631463 + 1.00271 1.66546 -2.50279 0.492539 0.322597 -0.808292 + 1.03164 1.79677 -2.31524 0.92868 0.139109 0.343806 + 1.05047 1.74166 -2.34976 0.946588 0.106863 0.304224 + 1.05732 1.72216 -2.41478 0.935485 0.249442 -0.250294 + 1.01603 1.77596 -2.28519 0.814951 -0.0213268 0.579137 + 1.02877 1.71446 -2.30948 0.817695 -0.0764495 0.570552 + 1.06608 1.70247 -2.37884 0.98671 0.0764947 0.143359 + 1.06358 1.62938 -2.41404 0.99761 -0.0690584 -0.00230886 + 1.05483 1.64907 -2.44998 0.935142 0.0744831 -0.346356 + 0.991591 1.6776 -2.27344 0.722945 -0.170166 0.669622 + 0.987141 1.64227 -2.27943 0.721815 -0.203222 0.661577 + 1.04438 1.67527 -2.33857 0.849455 -0.135481 0.509972 + 0.928917 1.65604 -2.22124 0.654501 -0.1902 0.731746 + 0.84721 1.6801 -2.14508 0.527051 -0.253871 0.811028 + 0.924466 1.62071 -2.22722 0.622346 -0.244183 0.74368 + 0.800543 1.65759 -2.12917 -0.0247224 -0.361444 0.932066 + 0.849891 1.58028 -2.18976 0.479407 -0.337192 0.810229 + 0.847353 1.52504 -2.20593 0.252695 -0.351903 0.901282 + 0.921928 1.56547 -2.2434 0.564408 -0.195119 0.802105 + 0.78226 1.67854 -2.13192 -0.493658 -0.315895 0.810254 + 0.779096 1.55243 -2.18899 -0.485447 -0.488332 0.725171 + 0.803225 1.55777 -2.17385 0.0303811 -0.497011 0.867212 + 0.809967 1.50612 -2.21306 -0.113894 -0.627807 0.769991 + 0.858232 1.50344 -2.22114 0.321648 -0.523018 0.7893 + 0.729885 1.58097 -2.2126 -0.703871 -0.362518 0.610857 + 0.760813 1.57338 -2.19175 -0.567238 -0.393033 0.723717 + 0.763128 1.50201 -2.24492 -0.484207 -0.696389 0.529703 + 0.785838 1.50078 -2.2282 -0.339161 -0.732162 0.590685 + 0.705041 1.5959 -2.2413 -0.896007 -0.260487 0.359607 + 0.727552 1.50758 -2.29468 -0.815277 -0.566922 0.117993 + 0.732201 1.5096 -2.26577 -0.768822 -0.534011 0.351773 + 0.79173 1.45366 -2.31689 -0.400011 -0.886361 0.233142 + 0.81444 1.45243 -2.30017 -0.179193 -0.917239 0.355757 + 0.697095 1.60853 -2.27505 -0.975359 -0.177916 0.13046 + 0.719606 1.52022 -2.32843 -0.85424 -0.509483 0.103445 + 0.77798 1.45808 -2.36581 -0.542994 -0.839117 0.0322331 + 0.787081 1.45164 -2.3458 -0.471582 -0.880553 0.0472935 + 0.690965 1.62207 -2.31635 -0.997444 -0.0628849 -0.033923 + 0.714012 1.52048 -2.35343 -0.793156 -0.580599 0.18387 + 0.772387 1.45834 -2.39081 -0.459482 -0.888067 0.0146262 + 0.821425 1.44275 -2.39031 0.148141 -0.908183 -0.391481 + 0.830525 1.43631 -2.3703 0.170821 -0.965349 -0.197284 + 0.70237 1.56553 -2.37354 -0.919136 0.0165323 -0.393594 + 0.696508 1.54728 -2.34911 -0.888356 -0.330987 0.318233 + 0.739204 1.4759 -2.4068 -0.691215 -0.710952 -0.129493 + 0.768963 1.46795 -2.4262 -0.166699 -0.821156 -0.545815 + 0.802146 1.45039 -2.41021 -0.00244717 -0.858773 -0.51235 + 0.719395 1.57264 -2.40035 -0.822621 0.0772144 -0.563324 + 0.721699 1.50269 -2.40248 -0.885696 -0.348539 -0.306698 + 0.738725 1.5098 -2.42928 -0.774139 -0.165761 -0.610927 + 0.756482 1.47811 -2.43653 -0.416224 -0.613345 -0.671242 + 0.753175 1.59668 -2.43723 -0.76287 0.129119 -0.633528 + 0.752344 1.53175 -2.44773 -0.755237 -0.0412167 -0.654154 + 0.767666 1.59787 -2.45405 -0.587676 0.212831 -0.780602 + 0.766835 1.53293 -2.46456 -0.568832 -0.0943899 -0.817019 + 0.770101 1.50006 -2.45498 -0.286893 -0.491131 -0.822485 + 0.802688 1.48985 -2.43791 0.105407 -0.689741 -0.716343 + 0.787825 1.60187 -2.46326 -0.533387 0.17952 -0.826602 + 0.775175 1.53447 -2.46828 -0.407422 -0.0929335 -0.908499 + 0.783568 1.50665 -2.4605 -0.132566 -0.583799 -0.801002 + 0.816156 1.49644 -2.44343 0.0263318 -0.810131 -0.585658 + 0.815169 1.47968 -2.42758 0.105876 -0.607886 -0.786934 + 0.80956 1.65472 -2.4698 -0.585929 0.192644 -0.787131 + 0.834381 1.57937 -2.49915 -0.527979 -0.00901256 -0.849209 + 0.795335 1.53847 -2.47749 -0.379415 -0.0965355 -0.920177 + 0.799746 1.50878 -2.47087 -0.314491 -0.660004 -0.682268 + 0.791909 1.50818 -2.46422 -0.287499 -0.728917 -0.621308 + 0.856116 1.63222 -2.50569 -0.508646 0.182654 -0.841378 + 0.881593 1.58963 -2.53022 -0.500878 0.0741193 -0.862338 + 0.873375 1.55246 -2.51634 -0.599841 -0.147045 -0.786491 + 0.823302 1.53265 -2.48298 -0.344404 -0.261738 -0.901598 + 0.886271 1.68311 -2.50739 -0.339354 0.282606 -0.897202 + 0.911747 1.64053 -2.53192 -0.305904 0.280891 -0.909683 + 0.906936 1.54814 -2.54853 -0.663379 -0.0685556 -0.745136 + 0.898718 1.51097 -2.53465 -0.606455 -0.350795 -0.713552 + 0.862296 1.50574 -2.50017 -0.575435 -0.420625 -0.701391 + 0.937738 1.65575 -2.53135 0.0331199 0.344394 -0.938241 + 0.91826 1.55614 -2.56075 -0.45608 0.0795948 -0.886372 + 0.938077 1.51208 -2.56524 -0.208019 -0.339887 -0.917172 + 0.926752 1.50408 -2.55302 -0.463644 -0.477295 -0.746474 + 0.918406 1.46792 -2.50923 -0.527312 -0.596774 -0.604817 + 0.971973 1.56406 -2.55641 0.32753 0.173357 -0.928801 + 0.944251 1.57137 -2.56018 0.0427712 0.23108 -0.971994 + 0.965799 1.50478 -2.56146 0.17225 -0.313621 -0.933794 + 0.94644 1.46103 -2.5276 -0.194366 -0.720725 -0.665416 + 0.908384 1.45247 -2.48527 -0.463667 -0.826135 -0.320178 + 1.00219 1.56445 -2.54027 0.590486 0.130656 -0.796401 + 1.02563 1.56577 -2.51562 0.794473 0.0464434 -0.605522 + 1.01213 1.50124 -2.52694 0.72676 -0.313253 -0.611304 + 0.988691 1.49992 -2.55159 0.497268 -0.350932 -0.793455 + 1.04279 1.55116 -2.48648 0.926479 -0.07608 -0.368575 + 1.02045 1.48892 -2.50796 0.760931 -0.387235 -0.520608 + 0.969331 1.45617 -2.51773 0.300105 -0.695323 -0.653041 + 0.967231 1.42517 -2.48034 -0.0577114 -0.910767 -0.408869 + 0.934111 1.43808 -2.46427 -0.466483 -0.875083 -0.128933 + 1.04434 1.51289 -2.45419 0.968865 -0.236268 -0.0740094 + 1.02199 1.45065 -2.47566 0.765352 -0.543841 -0.344198 + 0.977657 1.44386 -2.49875 0.381989 -0.697831 -0.605901 + 1.05303 1.60998 -2.37494 0.900478 -0.194567 0.388951 + 1.03378 1.49348 -2.41509 0.992777 -0.119957 -0.00224613 + 1.01157 1.43196 -2.45725 0.598278 -0.744309 -0.296761 + 0.978751 1.41416 -2.43431 0.00739088 -0.999733 -0.0218946 + 0.945631 1.42706 -2.41825 -0.512825 -0.852041 0.105055 + 0.995792 1.57698 -2.3158 0.814002 -0.169589 0.555555 + 1.03849 1.50683 -2.38608 0.951259 0.306815 0.0311561 + 1.03263 1.45201 -2.41087 0.884312 -0.430984 0.17957 + 1.02792 1.43867 -2.43989 0.847379 -0.409527 -0.337988 + 0.978323 1.56018 -2.29297 0.769817 -0.174749 0.613877 + 1.02102 1.49003 -2.36325 0.778311 -0.263564 0.569882 + 1.02274 1.45627 -2.3887 0.703907 -0.528014 0.475096 + 0.9951 1.42087 -2.41695 0.402973 -0.893083 0.200042 + 0.985216 1.42513 -2.39478 0.233794 -0.893681 0.382981 + 0.957668 1.56216 -2.26916 0.654388 -0.16491 0.737958 + 0.986659 1.48947 -2.32574 0.698985 -0.326803 0.636097 + 0.988383 1.4557 -2.35119 0.448933 -0.670597 0.590558 + 0.938402 1.49795 -2.268 0.552054 -0.445063 0.705092 + 0.966005 1.49145 -2.30192 0.652621 -0.41273 0.635405 + 0.957587 1.46986 -2.31696 0.157069 -0.863637 0.479019 + 0.965733 1.4575 -2.3428 -0.0787737 -0.871895 0.483315 + 0.962566 1.42692 -2.38639 -0.203534 -0.909628 0.362148 + 0.902662 1.50126 -2.24224 0.42143 -0.450761 0.786899 + 0.895943 1.47159 -2.27488 0.229536 -0.931329 0.282736 + 0.916757 1.47828 -2.28659 0.143584 -0.964206 0.222912 + 0.929985 1.47636 -2.28303 0.0357375 -0.826778 0.561391 + 0.851514 1.47378 -2.25377 0.17846 -0.865555 0.467938 + 0.883863 1.47083 -2.31947 0.387042 -0.922057 -0.0029441 + 0.904677 1.47752 -2.33118 0.127075 -0.988903 -0.0769601 + 0.91077 1.47773 -2.33286 -0.147609 -0.984598 0.093687 + 0.923997 1.47581 -2.32931 -0.21377 -0.956465 0.198686 + 0.820847 1.48452 -2.22826 -0.251544 -0.757459 0.602479 + 0.845107 1.44169 -2.32568 0.270701 -0.949947 0.155957 + 0.869282 1.46545 -2.36408 0.594121 -0.753967 -0.280275 + 0.886052 1.48002 -2.36785 0.268451 -0.941958 -0.201619 + 0.892145 1.48023 -2.36953 -0.253546 -0.965472 0.0598149 + 0.860427 1.48621 -2.41366 -0.200694 -0.979229 -0.0288473 + 0.88349 1.46958 -2.43114 -0.485173 -0.865108 0.127257 + 0.915207 1.4636 -2.38701 -0.519909 -0.826232 0.216876 + 0.855315 1.48492 -2.40979 0.312712 -0.879647 -0.358375 + 0.837786 1.48875 -2.43245 0.0879896 -0.845276 -0.527035 + 0.842899 1.49004 -2.43632 -0.260622 -0.942107 -0.210977 + 0.857762 1.48397 -2.45214 -0.511883 -0.85835 -0.0347977 + 0.838544 1.47036 -2.40602 0.475879 -0.690743 -0.544438 + 0.819265 1.478 -2.42592 0.202534 -0.646646 -0.735411 + 0.833691 1.49043 -2.4341 0.00796357 -0.763876 -0.645313 + 0.839337 1.49281 -2.43923 -0.298526 -0.896703 -0.326812 + 0.8542 1.48674 -2.45505 -0.515067 -0.849626 -0.113324 + 0.821802 1.49881 -2.44856 -0.105673 -0.922353 -0.371616 + 0.829639 1.49942 -2.45521 -0.302403 -0.935282 -0.183849 + 0.852274 1.49029 -2.4762 -0.537337 -0.739943 -0.404663 + 0.827713 1.50296 -2.47636 -0.289065 -0.662239 -0.69129 + 0.932143 1.46345 -2.35515 -0.39054 -0.855965 0.338825 + -0.477956 2.44876 -2.42829 -0.713782 -0.394723 0.578541 + -0.467398 2.44058 -2.42085 -0.524332 -0.503582 0.686644 + -0.455121 2.49752 -2.38613 -0.168457 0.0900533 0.981587 + -0.48166 2.36212 -2.53005 -0.723287 -0.5024 0.473762 + -0.464037 2.34847 -2.51762 -0.53005 -0.616581 0.58213 + -0.447121 2.34366 -2.51467 -0.0655915 -0.719394 0.691498 + -0.450482 2.43577 -2.4179 -0.046679 -0.601423 0.797566 + -0.465679 2.5057 -2.39357 -0.383277 0.30033 0.873442 + -0.492046 2.45967 -2.43823 -0.713777 -0.394727 0.578544 + -0.495751 2.37304 -2.53998 -0.723126 -0.502265 0.474151 + -0.484332 2.25592 -2.64186 -0.720373 -0.483533 0.497251 + -0.440329 2.49849 -2.38915 0.316756 0.157133 0.935401 + -0.476236 2.51388 -2.40102 -0.566382 0.416233 0.71131 + -0.502604 2.46785 -2.44568 -0.829634 -0.25995 0.494099 + -0.513374 2.38669 -2.55241 -0.843808 -0.375323 0.383565 + -0.43569 2.43673 -2.42093 0.302498 -0.558936 0.772065 + -0.418756 2.44069 -2.42749 0.521749 -0.469847 0.712054 + -0.429745 2.50345 -2.39596 0.461368 0.283595 0.840662 + -0.424327 2.51521 -2.40944 0.601343 0.599238 0.528489 + -0.467152 2.52407 -2.41326 -0.203465 0.952545 0.226404 + -0.474164 2.52076 -2.40874 -0.44632 0.824317 0.348282 + -0.422429 2.34527 -2.51972 0.298635 -0.675887 0.673791 + -0.405496 2.34923 -2.52628 0.515755 -0.591514 0.619764 + -0.408173 2.44566 -2.43429 0.639148 -0.39315 0.661001 + -0.398907 2.45053 -2.44081 0.703453 -0.336243 0.626175 + -0.426444 2.50578 -2.39893 0.585456 0.381841 0.715149 + -0.440365 2.23543 -2.62505 -0.048931 -0.705347 0.707172 + -0.415673 2.23704 -2.6301 0.297261 -0.667154 0.683039 + -0.389712 2.24311 -2.64016 0.518166 -0.584773 0.624134 + -0.387829 2.35752 -2.53764 0.639941 -0.516832 0.568648 + -0.378564 2.36239 -2.54416 0.707258 -0.463213 0.53406 + -0.466709 2.24227 -2.62943 -0.523434 -0.600563 0.604434 + -0.44074 2.1104 -2.74687 -0.0493188 -0.687421 0.724583 + -0.404898 2.11274 -2.75421 0.302735 -0.655908 0.691474 + -0.378937 2.1188 -2.76427 0.517269 -0.583588 0.625986 + -0.372046 2.2514 -2.65151 0.639663 -0.514842 0.570761 + -0.4943 2.13491 -2.76878 -0.696929 -0.476595 0.535861 + -0.467083 2.11724 -2.75126 -0.489428 -0.592811 0.639558 + -0.442331 2.02299 -2.82772 -0.0314512 -0.640199 0.767565 + -0.40649 2.02533 -2.83506 0.318501 -0.62997 0.708305 + -0.374365 2.03609 -2.84565 0.530869 -0.575813 0.621786 + -0.505944 2.2722 -2.65711 -0.721319 -0.48383 0.495588 + -0.515912 2.15119 -2.78403 -0.733482 -0.445994 0.512926 + -0.502179 2.0455 -2.85321 -0.690503 -0.424785 0.58546 + -0.474962 2.02784 -2.83569 -0.487818 -0.526032 0.696652 + -0.452376 1.96882 -2.8685 -0.00947196 -0.619013 0.785324 + -0.523567 2.28586 -2.66954 -0.840828 -0.363677 0.400933 + -0.539896 2.17133 -2.80264 -0.852082 -0.322402 0.412326 + -0.553113 2.08232 -2.89334 -0.841536 -0.268257 0.468887 + -0.529129 2.06217 -2.87472 -0.725858 -0.391548 0.565526 + -0.513307 1.9881 -2.90143 -0.704606 -0.30485 0.640778 + -0.519036 2.39674 -2.56253 -0.993684 -0.0101956 0.111752 + -0.532252 2.30126 -2.68505 -0.993001 -0.000787938 0.118101 + -0.548581 2.18674 -2.81815 -0.988103 -0.0106538 0.153427 + -0.564027 2.1075 -2.90947 -0.977349 0.0339309 0.208896 + -0.568557 2.0192 -2.94789 -0.822824 -0.216137 0.52559 + -0.508266 2.4779 -2.45579 -0.964535 0.124737 0.23262 + -0.515576 2.40822 -2.57542 -0.924263 0.345164 -0.163094 + -0.528792 2.31274 -2.69794 -0.932179 0.328645 -0.15177 + -0.545174 2.20307 -2.83628 -0.939959 0.316103 -0.128668 + -0.56062 2.12383 -2.92759 -0.948636 0.316125 0.0124357 + -0.506193 2.48478 -2.46351 -0.887713 0.459375 -0.0306548 + -0.500131 2.49158 -2.47168 -0.702651 0.676886 -0.219333 + -0.509514 2.41502 -2.58358 -0.737999 0.578881 -0.346776 + -0.520503 2.32296 -2.7101 -0.751494 0.56082 -0.347473 + -0.536884 2.21329 -2.84844 -0.767794 0.551236 -0.326545 + -0.493119 2.4949 -2.47621 -0.490723 0.802906 -0.338427 + -0.49781 2.42055 -2.59114 -0.516982 0.720761 -0.461771 + -0.508799 2.32849 -2.71765 -0.52511 0.704602 -0.477279 + -0.522297 2.22082 -2.85854 -0.538309 0.705294 -0.461285 + -0.477694 2.49933 -2.48308 -0.36364 0.848718 -0.383984 + -0.482385 2.42499 -2.59801 -0.391614 0.770759 -0.502562 + -0.486967 2.33492 -2.72754 -0.398568 0.753249 -0.523219 + -0.500465 2.22725 -2.86843 -0.400833 0.761233 -0.509762 + -0.535618 2.15706 -2.94556 -0.526022 0.814297 -0.245401 + -0.461591 2.50266 -2.48885 -0.290495 0.869366 -0.399768 + -0.455504 2.43055 -2.60765 -0.313959 0.794689 -0.519518 + -0.460086 2.34048 -2.73717 -0.31707 0.776471 -0.544572 + -0.466308 2.23432 -2.88067 -0.314123 0.788051 -0.529435 + -0.451048 2.52741 -2.41903 -0.0854002 0.974261 0.208619 + -0.443246 2.50551 -2.4944 -0.210098 0.889037 -0.406783 + -0.437159 2.43339 -2.6132 -0.234496 0.814507 -0.53065 + -0.433981 2.34442 -2.74496 -0.236167 0.794165 -0.559934 + -0.439661 2.52833 -2.42158 0.06001 0.981835 0.179995 + -0.431859 2.50643 -2.49695 -0.0612857 0.912063 -0.405445 + -0.418151 2.43494 -2.61744 -0.075994 0.839986 -0.53726 + -0.414973 2.34596 -2.7492 -0.0696229 0.814534 -0.575923 + -0.4286 2.5258 -2.42033 0.448094 0.854593 0.262455 + -0.416879 2.50535 -2.49781 0.149029 0.915236 -0.374345 + -0.403171 2.43386 -2.61831 0.140231 0.841267 -0.522117 + -0.393462 2.34401 -2.75001 0.15221 0.807642 -0.56969 + -0.415832 2.23983 -2.89347 -0.0594768 0.811874 -0.580796 + -0.391312 2.48349 -2.47758 0.926959 0.357546 0.11361 + -0.395585 2.49407 -2.48847 0.823627 0.565352 -0.0449028 + -0.405817 2.50282 -2.49657 0.495461 0.826532 -0.26714 + -0.384707 2.42964 -2.61623 0.522457 0.743262 -0.417852 + -0.374997 2.33978 -2.74793 0.532501 0.698704 -0.47776 + -0.389873 2.47013 -2.4633 0.952587 0.195579 0.233082 + -0.367343 2.40322 -2.58996 0.972079 0.234349 -0.0119956 + -0.374474 2.42088 -2.60813 0.864561 0.465673 -0.188901 + -0.39199 2.4607 -2.45278 0.939376 0.0621409 0.33721 + -0.369437 2.37412 -2.55811 0.970087 -0.0648975 0.233922 + -0.365904 2.38986 -2.57567 0.989964 0.0803018 0.116288 + -0.352711 2.30859 -2.71715 0.96659 0.236506 -0.0988375 + -0.395605 2.45286 -2.44378 0.853254 -0.153288 0.498458 + -0.373052 2.36627 -2.54911 0.87559 -0.272512 0.398848 + -0.350354 2.27359 -2.679 0.985335 -0.0106209 0.170298 + -0.346821 2.28933 -2.69655 0.993311 0.107274 0.0427142 + -0.357841 2.25887 -2.66151 0.707496 -0.462844 0.534064 + -0.35233 2.26275 -2.66646 0.91187 -0.217126 0.348351 + -0.329112 2.15478 -2.81047 0.991712 0.127836 -0.0128568 + -0.338253 2.17287 -2.83091 0.962373 0.234008 -0.138124 + -0.344143 2.19213 -2.8515 0.967022 0.220721 -0.127082 + -0.339088 2.13831 -2.79074 0.707338 -0.467927 0.529828 + -0.331088 2.14395 -2.79793 0.914263 -0.230053 0.333465 + -0.319993 2.06227 -2.90625 0.997595 0.0415473 -0.0554786 + -0.329134 2.08035 -2.92669 0.967249 0.207806 -0.145763 + -0.353293 2.13085 -2.78075 0.639947 -0.51686 0.568615 + -0.331183 2.05649 -2.87513 0.703264 -0.491482 0.513678 + -0.323182 2.06213 -2.88232 0.911156 -0.269459 0.311748 + -0.323851 2.01424 -2.94759 0.992628 -0.0747521 0.0954014 + -0.348721 2.04813 -2.86213 0.640271 -0.53231 0.553804 + -0.335699 2.01663 -2.91063 0.649697 -0.540085 0.534979 + -0.327041 2.0141 -2.92366 0.857244 -0.379026 0.348528 + -0.381088 1.98997 -2.88234 0.532462 -0.585967 0.610842 + -0.353237 2.00827 -2.89763 0.65041 -0.539372 0.534831 + -0.338162 1.98742 -2.93632 0.65371 -0.528527 0.541592 + -0.329504 1.9849 -2.94935 0.831056 -0.389802 0.396738 + -0.413213 1.9792 -2.87175 0.331722 -0.638423 0.694534 + -0.422761 1.94126 -2.90427 0.297743 -0.670594 0.67945 + -0.383209 1.9579 -2.91144 0.523002 -0.591302 0.613865 + -0.355358 1.9762 -2.92673 0.648929 -0.531535 0.544392 + -0.461924 1.93088 -2.90102 0.0978693 -0.695188 0.712134 + -0.482886 1.89872 -2.93538 0.194687 -0.808608 0.555202 + -0.423224 1.92193 -2.92251 0.283896 -0.751676 0.595303 + -0.383672 1.93857 -2.92968 0.521782 -0.682096 0.512337 + -0.352138 1.95325 -2.95268 0.634726 -0.640366 0.432497 + -0.499306 1.93196 -2.90716 -0.480046 -0.286154 0.82926 + -0.49686 1.91642 -2.91029 -0.178898 -0.514258 0.838769 + -0.517822 1.88427 -2.94465 0.0771349 -0.809935 0.581426 + -0.520296 1.84983 -3.0054 0.147517 -0.871697 0.467315 + -0.489461 1.86738 -2.9882 0.240102 -0.863495 0.44354 + -0.485006 1.97367 -2.87647 -0.504201 -0.427606 0.75029 + -0.527606 1.94638 -2.93211 -0.713167 -0.134316 0.688006 + -0.540477 1.89771 -2.94495 -0.668362 -0.157002 0.727078 + -0.538031 1.88218 -2.94808 -0.457874 -0.632475 0.624762 + -0.540505 1.84774 -3.00883 0.044525 -0.793317 0.607178 + -0.540257 2.00477 -2.92293 -0.712884 -0.319851 0.624093 + -0.550425 1.95592 -2.95582 -0.717065 -0.137263 0.683357 + -0.563295 1.90724 -2.96866 -0.778807 -0.187871 0.598468 + -0.567529 1.8399 -3.00697 -0.104567 -0.651089 0.751764 + -0.535155 1.79806 -3.09115 0.340148 -0.840625 0.421483 + -0.578725 1.97035 -2.98078 -0.856759 -0.160377 0.490146 + -0.579954 1.94416 -2.99674 -0.905186 -0.104193 0.412046 + -0.599692 1.88911 -3.03888 -0.925468 0.00617519 0.378775 + -0.583033 1.85218 -3.0108 -0.714014 -0.257658 0.650996 + -0.589618 1.99987 -2.99685 -0.958446 -0.0246769 0.284204 + -0.590847 1.97369 -3.01281 -0.93631 -0.0896753 0.339532 + -0.579471 2.04438 -2.96402 -0.95826 -0.00316714 0.285881 + -0.584399 2.04968 -2.99969 -0.9862 0.146474 0.077163 + -0.59468 1.9906 -3.02123 -0.984201 0.0671927 0.163807 + -0.609711 1.92795 -3.07071 -0.97534 0.0723991 0.208497 + -0.605878 1.91104 -3.06229 -0.954416 -0.00805304 0.298371 + -0.574252 2.09419 -2.96686 -0.964908 0.251883 0.0742159 + -0.578828 2.08162 -3.00726 -0.931109 0.357932 -0.070149 + -0.58911 2.02254 -3.02881 -0.985573 0.159402 0.0568875 + -0.608203 1.94353 -3.09701 -0.979045 0.179536 0.0961097 + -0.637013 1.84059 -3.16702 -0.989931 0.0571008 0.129519 + -0.550205 2.14953 -2.93546 -0.813702 0.558485 -0.161193 + -0.563837 2.11988 -2.97473 -0.882279 0.460366 -0.0982188 + -0.560378 2.11072 -3.00768 -0.785948 0.55163 -0.279265 + -0.586662 2.05445 -3.04743 -0.913065 0.377179 -0.155077 + -0.605755 1.97545 -3.11563 -0.912638 0.369376 -0.17508 + -0.545387 2.14899 -2.97514 -0.661954 0.723716 -0.195068 + -0.533728 2.13537 -3.02469 -0.558143 0.735336 -0.384393 + -0.560011 2.0791 -3.06445 -0.729394 0.562423 -0.389442 + -0.576123 1.99168 -3.14484 -0.719048 0.536651 -0.44156 + -0.508183 2.17016 -2.95508 -0.398298 0.861567 -0.31474 + -0.517952 2.16209 -2.98466 -0.386136 0.884778 -0.260897 + -0.491183 2.14407 -3.04 -0.266413 0.856064 -0.44292 + -0.516853 2.10795 -3.09817 -0.470965 0.730318 -0.494801 + -0.532964 2.02054 -3.17856 -0.54834 0.591358 -0.591286 + -0.474026 2.17723 -2.96733 -0.19824 0.90362 -0.3797 + -0.475407 2.1708 -2.99997 -0.150471 0.936653 -0.316291 + -0.452411 2.14003 -3.06474 0.13632 0.845895 -0.515633 + -0.478081 2.10392 -3.12291 -0.0964758 0.803228 -0.587807 + -0.440204 2.23825 -2.88846 -0.218931 0.800731 -0.557583 + -0.441222 2.17234 -2.98279 -0.0221138 0.893085 -0.449343 + -0.442603 2.16591 -3.01543 0.329022 0.885641 -0.327695 + -0.422268 2.10312 -3.09402 0.426462 0.765735 -0.481436 + -0.41685 2.17391 -2.9878 0.0676328 0.792689 -0.605863 + -0.41246 2.12899 -3.04471 0.39343 0.758927 -0.518886 + -0.386349 2.06833 -3.10966 0.584743 0.673021 -0.4529 + -0.438839 2.08711 -3.14356 0.237809 0.786797 -0.569558 + -0.39432 2.23788 -2.89427 0.187654 0.788698 -0.585441 + -0.389817 2.15261 -2.99969 0.337419 0.731922 -0.591979 + -0.385427 2.10769 -3.0566 0.506834 0.693966 -0.511401 + -0.356933 2.02515 -3.1269 0.744423 0.553287 -0.373775 + -0.40292 2.05232 -3.15919 0.498005 0.678042 -0.540601 + -0.370119 2.2312 -2.89033 0.55757 0.66381 -0.498469 + -0.365615 2.14594 -2.99574 0.580164 0.6196 -0.528683 + -0.356011 2.06451 -3.07384 0.730735 0.537446 -0.420926 + -0.359842 2.32626 -2.73533 0.881773 0.405898 -0.240257 + -0.354964 2.21767 -2.87772 0.879801 0.390288 -0.271342 + -0.346571 2.11936 -2.98543 0.898082 0.354904 -0.259793 + -0.336966 2.03794 -3.06353 0.903413 0.351656 -0.245321 + -0.33575 2.09382 -2.95921 0.964039 0.230572 -0.132159 + -0.325227 2.00706 -3.03519 0.97344 0.195244 -0.119562 + -0.318612 1.99359 -3.00267 0.999024 0.0441667 0.000984841 + -0.321743 1.93023 -3.0794 0.923229 -0.337234 0.184178 + -0.319477 1.95721 -3.08768 0.993013 0.115719 0.0230935 + -0.331216 1.98809 -3.11602 0.909569 0.348049 -0.227037 + -0.358045 2.01003 -3.15456 0.726752 0.554167 -0.40587 + -0.324871 1.97717 -2.97205 0.932115 -0.277305 0.232944 + -0.319632 1.95652 -3.02713 0.961816 -0.252597 0.105375 + -0.334942 1.96447 -2.96227 0.726288 -0.560023 0.398598 + -0.33031 1.95675 -2.98498 0.753021 -0.580483 0.309837 + -0.332421 1.93045 -3.03725 0.716742 -0.641948 0.272365 + -0.362896 1.9105 -3.02897 0.579969 -0.751693 0.313997 + -0.34472 1.86875 -3.17277 0.67375 -0.714126 0.189961 + -0.317757 1.91413 -3.10763 0.770193 -0.558397 0.308213 + -0.31549 1.94111 -3.11592 0.989176 0.135782 -0.0556295 + -0.332328 1.97298 -3.14368 0.882671 0.379849 -0.27678 + -0.39443 1.89582 -3.00597 0.504745 -0.794646 0.337297 + -0.375195 1.84879 -3.16449 0.555768 -0.786484 0.269377 + -0.351296 1.8498 -3.23371 0.795118 -0.606203 -0.0174379 + -0.324332 1.89519 -3.16858 0.943972 -0.319452 -0.0828742 + -0.320957 1.92094 -3.15613 0.975908 0.0775858 -0.203921 + -0.4298 1.89059 -2.97533 0.340549 -0.843884 0.414593 + -0.427918 1.82882 -3.13141 0.439417 -0.839304 0.320127 + -0.441853 1.79071 -3.20774 0.415366 -0.848534 0.327813 + -0.38913 1.81069 -3.24081 0.605902 -0.736656 0.300367 + -0.361202 1.8383 -3.26571 0.940777 -0.274952 0.198343 + -0.463288 1.82359 -3.10077 0.344215 -0.874378 0.342021 + -0.494123 1.80604 -3.11798 0.365028 -0.861032 0.354088 + -0.489767 1.77749 -3.19558 0.294228 -0.919954 0.259065 + -0.460883 1.78007 -3.21531 0.294097 -0.914398 0.278177 + -0.422959 1.78291 -3.25752 0.447344 -0.881616 0.150454 + -0.530799 1.76951 -3.16875 0.324337 -0.918588 0.225834 + -0.540533 1.76076 -3.22843 0.11771 -0.991447 -0.0563651 + -0.494135 1.76554 -3.25139 0.10449 -0.994485 0.0090278 + -0.465251 1.76812 -3.27113 0.118759 -0.99217 -0.0386631 + -0.441989 1.77227 -3.2651 0.359206 -0.933256 0.00197985 + -0.558435 1.76325 -3.1555 0.293737 -0.920608 0.257293 + -0.568169 1.7545 -3.21518 0.0503074 -0.985755 -0.160488 + -0.587769 1.76593 -3.24254 -0.312762 -0.882471 -0.351318 + -0.554822 1.76938 -3.27247 -0.175481 -0.8986 -0.402149 + -0.508423 1.77416 -3.29543 -0.113135 -0.912836 -0.392339 + -0.573037 1.77082 -3.12331 0.180184 -0.906545 0.381721 + -0.580638 1.74965 -3.18292 0.0527998 -0.998467 0.0166229 + -0.600238 1.76109 -3.21029 -0.421898 -0.876679 -0.231162 + -0.562179 1.79022 -3.08929 0.225778 -0.856873 0.463457 + -0.610853 1.77971 -3.09411 -0.470898 -0.791309 0.389981 + -0.614004 1.77602 -3.11247 -0.397612 -0.832013 0.386857 + -0.595239 1.75722 -3.15073 -0.0711713 -0.950787 0.301559 + -0.599995 1.7991 -3.06009 -0.234115 -0.753129 0.614806 + -0.615499 1.81139 -3.06392 -0.866322 -0.235792 0.440327 + -0.618651 1.8077 -3.08228 -0.976566 -0.0945631 0.19333 + -0.624255 1.77598 -3.12444 -0.803737 -0.542337 0.244699 + -0.605489 1.75718 -3.16271 -0.458868 -0.884725 0.0818619 + -0.621003 1.81115 -3.103 -0.983966 0.0241603 0.176711 + -0.626607 1.77943 -3.14516 -0.914191 -0.396809 0.0824398 + -0.630666 1.78308 -3.1656 -0.897546 -0.423464 0.122836 + -0.609548 1.76084 -3.18315 -0.552403 -0.829464 -0.0827085 + -0.631179 1.79085 -3.23334 -0.847462 -0.372282 -0.378436 + -0.627189 1.83308 -3.12642 -0.971678 -0.00707808 0.236202 + -0.640489 1.7906 -3.20621 -0.926867 -0.352008 -0.130414 + -0.635505 1.85617 -3.19331 -0.953631 0.243531 -0.176862 + -0.613937 1.79682 -3.27088 -0.740642 -0.283997 -0.608929 + -0.618263 1.86215 -3.23085 -0.821367 0.35397 -0.447281 + -0.58863 1.87838 -3.26006 -0.580097 0.468114 -0.666601 + -0.58099 1.80027 -3.30081 -0.514348 -0.234756 -0.824825 + -0.532948 1.87658 -3.28699 -0.37928 0.454166 -0.806152 + -0.525308 1.79846 -3.32774 -0.282127 -0.243749 -0.927896 + -0.48922 1.79653 -3.33282 -0.0552429 -0.355778 -0.932936 + -0.472335 1.77223 -3.30051 0.10049 -0.896944 -0.430574 + -0.48838 2.02688 -3.19909 -0.257283 0.649077 -0.715894 + -0.488365 1.88292 -3.30753 -0.317856 0.41292 -0.853501 + -0.468522 1.81279 -3.33568 0.0380865 -0.158595 -0.986609 + -0.449139 2.01008 -3.21974 -0.0256102 0.686103 -0.727054 + -0.448111 1.89804 -3.30834 -0.169706 0.506088 -0.845621 + -0.428268 1.82792 -3.3365 0.158438 -0.403155 -0.901312 + -0.420566 1.99496 -3.23476 0.177246 0.670731 -0.720211 + -0.419538 1.88293 -3.32336 -0.0389268 0.42072 -0.906355 + -0.406468 1.84413 -3.33754 0.288276 -0.158864 -0.944277 + -0.390086 1.82357 -3.29044 0.532366 -0.645625 -0.547499 + -0.403222 2.00625 -3.21301 0.470228 0.653122 -0.593564 + -0.393954 1.89485 -3.30799 0.404817 0.51302 -0.756924 + -0.380884 1.85606 -3.32217 0.653747 -0.0107281 -0.756637 + -0.368286 1.83979 -3.29148 0.654441 -0.599344 -0.460971 + -0.358347 1.96397 -3.20837 0.70129 0.516857 -0.490969 + -0.368483 1.91092 -3.27321 0.7171 0.437002 -0.542952 + -0.376611 1.90614 -3.28625 0.597778 0.485397 -0.638005 + -0.36934 1.85773 -3.30622 0.807147 0.00516889 -0.590328 + -0.356741 1.84146 -3.27553 0.997983 -0.061069 0.0173252 + -0.337794 1.95281 -3.18389 0.850943 0.383801 -0.358599 + -0.347931 1.89976 -3.24873 0.881533 0.202841 -0.426328 + -0.351306 1.87401 -3.26118 0.94511 -0.0207821 -0.326092 + -0.361212 1.86251 -3.29318 0.892142 0.0802041 -0.444579 + -0.365609 1.82155 -3.26492 0.83111 -0.546298 -0.103993 + -0.428375 1.79264 -3.29734 0.48171 -0.587432 -0.650292 + -0.449073 1.77638 -3.29447 0.352737 -0.821275 -0.448424 + -0.370069 1.81839 -3.25511 0.747716 -0.381009 0.543831 + -0.403898 1.79062 -3.27181 0.558526 -0.807993 -0.187608 + 0.465679 2.5057 -2.39357 0.383464 0.300067 0.87345 + 0.455121 2.49752 -2.38613 0.168342 0.0901796 0.981595 + 0.467398 2.44058 -2.42085 0.524332 -0.503585 0.686643 + 0.474164 2.52076 -2.40874 0.446181 0.824383 0.348303 + 0.424327 2.51521 -2.40944 -0.601315 0.599213 0.528549 + 0.426444 2.50578 -2.39893 -0.585541 0.381774 0.715116 + 0.429745 2.50345 -2.39596 -0.461452 0.283428 0.840673 + 0.440329 2.49849 -2.38915 -0.316583 0.157404 0.935414 + 0.43569 2.43673 -2.42093 -0.302496 -0.558937 0.772066 + 0.450482 2.43577 -2.4179 0.0466769 -0.601423 0.797566 + 0.477956 2.44876 -2.42829 0.713783 -0.394725 0.578538 + 0.492046 2.45967 -2.43823 0.713778 -0.394725 0.578543 + 0.476236 2.51388 -2.40102 0.56647 0.416188 0.711265 + 0.464037 2.34847 -2.51762 0.530505 -0.615793 0.582549 + 0.48166 2.36212 -2.53005 0.723126 -0.502302 0.474111 + 0.495751 2.37304 -2.53998 0.723281 -0.501903 0.474297 + 0.502604 2.46785 -2.44568 0.829633 -0.259951 0.4941 + 0.508266 2.4779 -2.45579 0.964536 0.124737 0.232619 + 0.447121 2.34366 -2.51467 0.0649277 -0.718758 0.692222 + 0.466709 2.24227 -2.62943 0.525797 -0.602265 0.600678 + 0.484332 2.25592 -2.64186 0.718824 -0.487143 0.495967 + 0.505944 2.2722 -2.65711 0.720384 -0.483322 0.49744 + 0.513374 2.38669 -2.55241 0.843805 -0.375318 0.383574 + 0.422429 2.34527 -2.51972 -0.298634 -0.675886 0.673792 + 0.415673 2.23704 -2.6301 -0.297262 -0.667155 0.683037 + 0.440365 2.23543 -2.62505 0.0485824 -0.705731 0.706812 + 0.467083 2.11724 -2.75126 0.491269 -0.589695 0.641026 + 0.418756 2.44069 -2.42749 -0.521748 -0.469846 0.712056 + 0.405496 2.34923 -2.52628 -0.515754 -0.591516 0.619763 + 0.389712 2.24311 -2.64016 -0.518166 -0.584775 0.624133 + 0.404898 2.11274 -2.75421 -0.301854 -0.655118 0.692607 + 0.44074 2.1104 -2.74687 0.0485278 -0.686716 0.725304 + 0.408173 2.44566 -2.43429 -0.639148 -0.393146 0.661004 + 0.387829 2.35752 -2.53764 -0.639941 -0.516836 0.568644 + 0.372046 2.2514 -2.65151 -0.639663 -0.51484 0.570763 + 0.353293 2.13085 -2.78075 -0.640012 -0.516908 0.568498 + 0.378937 2.1188 -2.76427 -0.518318 -0.581978 0.626616 + 0.398907 2.45053 -2.44081 -0.703453 -0.33624 0.626176 + 0.378564 2.36239 -2.54416 -0.707258 -0.463217 0.534056 + 0.357841 2.25887 -2.66151 -0.707496 -0.462841 0.534066 + 0.339088 2.13831 -2.79074 -0.707264 -0.468092 0.529781 + 0.348721 2.04813 -2.86213 -0.637327 -0.536612 0.553048 + 0.395605 2.45286 -2.44378 -0.853254 -0.153287 0.498458 + 0.373052 2.36627 -2.54911 -0.874014 -0.271512 0.402965 + 0.35233 2.26275 -2.66646 -0.911269 -0.221579 0.347118 + 0.331088 2.14395 -2.79793 -0.914335 -0.230114 0.333224 + 0.39199 2.4607 -2.45278 -0.939377 0.0621389 0.337209 + 0.369437 2.37412 -2.55811 -0.970159 -0.0588267 0.235225 + 0.350354 2.27359 -2.679 -0.988654 -0.0142267 0.149537 + 0.329112 2.15478 -2.81047 -0.989325 0.145438 -0.00917028 + 0.323182 2.06213 -2.88232 -0.909419 -0.276355 0.310781 + 0.389873 2.47013 -2.4633 -0.952587 0.195578 0.233081 + 0.365904 2.38986 -2.57567 -0.989218 0.0809957 0.122012 + 0.346821 2.28933 -2.69655 -0.996135 0.0796166 0.0371043 + 0.338253 2.17287 -2.83091 -0.96365 0.236449 -0.12438 + 0.391312 2.48349 -2.47758 -0.926958 0.357549 0.113613 + 0.367343 2.40322 -2.58996 -0.970324 0.241592 -0.0101971 + 0.352711 2.30859 -2.71715 -0.966257 0.23593 -0.103361 + 0.395585 2.49407 -2.48847 -0.823625 0.565355 -0.0449006 + 0.374474 2.42088 -2.60813 -0.864413 0.465584 -0.189794 + 0.359842 2.32626 -2.73533 -0.881861 0.405688 -0.240289 + 0.354964 2.21767 -2.87772 -0.87871 0.389522 -0.275936 + 0.344143 2.19213 -2.8515 -0.967179 0.219972 -0.127186 + 0.4286 2.5258 -2.42033 -0.448167 0.85458 0.262371 + 0.405817 2.50282 -2.49657 -0.495462 0.826531 -0.26714 + 0.384707 2.42964 -2.61623 -0.523026 0.74259 -0.418334 + 0.374997 2.33978 -2.74793 -0.533984 0.69952 -0.474903 + 0.439661 2.52833 -2.42158 -0.060127 0.98191 0.179549 + 0.416879 2.50535 -2.49781 -0.149029 0.915236 -0.374344 + 0.403171 2.43386 -2.61831 -0.139572 0.840839 -0.522982 + 0.393462 2.34401 -2.75001 -0.150557 0.809282 -0.567799 + 0.451048 2.52741 -2.41903 0.0862815 0.974705 0.20617 + 0.443246 2.50551 -2.4944 0.2101 0.889036 -0.406784 + 0.431859 2.50643 -2.49695 0.0612857 0.912063 -0.405445 + 0.418151 2.43494 -2.61744 0.0754965 0.839603 -0.537929 + 0.467152 2.52407 -2.41326 0.203434 0.952476 0.226723 + 0.477694 2.49933 -2.48308 0.363639 0.848718 -0.383985 + 0.461591 2.50266 -2.48885 0.290495 0.869365 -0.399772 + 0.437159 2.43339 -2.6132 0.234317 0.814669 -0.53048 + 0.500131 2.49158 -2.47168 0.702651 0.676885 -0.219334 + 0.493119 2.4949 -2.47621 0.490724 0.802906 -0.338426 + 0.482385 2.42499 -2.59801 0.391382 0.770999 -0.502375 + 0.455504 2.43055 -2.60765 0.314064 0.794766 -0.519337 + 0.506193 2.48478 -2.46351 0.887714 0.459374 -0.0306559 + 0.509514 2.41502 -2.58358 0.737313 0.580051 -0.346281 + 0.49781 2.42055 -2.59114 0.517101 0.720842 -0.461512 + 0.486967 2.33492 -2.72754 0.398478 0.75318 -0.523389 + 0.460086 2.34048 -2.73717 0.317193 0.776348 -0.544676 + 0.519036 2.39674 -2.56253 0.993684 -0.0101844 0.111755 + 0.515576 2.40822 -2.57542 0.924382 0.345337 -0.16205 + 0.520503 2.32296 -2.7101 0.751029 0.560399 -0.349153 + 0.508799 2.32849 -2.71765 0.526003 0.703496 -0.477927 + 0.500465 2.22725 -2.86843 0.396569 0.765459 -0.50676 + 0.532252 2.30126 -2.68505 0.993247 -0.00113793 0.116011 + 0.528792 2.31274 -2.69794 0.933213 0.325278 -0.152669 + 0.536884 2.21329 -2.84844 0.761954 0.561361 -0.322955 + 0.522297 2.22082 -2.85854 0.540792 0.707033 -0.455685 + 0.523567 2.28586 -2.66954 0.841516 -0.361218 0.401712 + 0.548581 2.18674 -2.81815 0.988053 -0.00889096 0.153856 + 0.545174 2.20307 -2.83628 0.940753 0.317705 -0.118523 + 0.550205 2.14953 -2.93546 0.797245 0.555925 -0.235262 + 0.515912 2.15119 -2.78403 0.733084 -0.447089 0.512542 + 0.539896 2.17133 -2.80264 0.852708 -0.322727 0.410776 + 0.564027 2.1075 -2.90947 0.982603 0.031333 0.183055 + 0.56062 2.12383 -2.92759 0.95932 0.282243 0.00663171 + 0.4943 2.13491 -2.76878 0.695511 -0.475713 0.538481 + 0.529129 2.06217 -2.87472 0.728156 -0.392582 0.561843 + 0.553113 2.08232 -2.89334 0.840567 -0.272223 0.46834 + 0.579471 2.04438 -2.96402 0.957588 0.00358822 0.28812 + 0.474962 2.02784 -2.83569 0.482724 -0.523383 0.702173 + 0.502179 2.0455 -2.85321 0.693874 -0.417087 0.587007 + 0.540257 2.00477 -2.92293 0.710967 -0.324395 0.623934 + 0.568557 2.0192 -2.94789 0.820231 -0.21499 0.530094 + 0.442331 2.02299 -2.82772 0.0282829 -0.643783 0.764685 + 0.485006 1.97367 -2.87647 0.486894 -0.450797 0.748142 + 0.513307 1.9881 -2.90143 0.712533 -0.309086 0.629891 + 0.550425 1.95592 -2.95582 0.743826 -0.15307 0.65061 + 0.578725 1.97035 -2.98078 0.83414 -0.22848 0.502003 + 0.40649 2.02533 -2.83506 -0.314874 -0.633726 0.706573 + 0.413213 1.9792 -2.87175 -0.323645 -0.632704 0.703519 + 0.452376 1.96882 -2.8685 0.0186772 -0.625472 0.780023 + 0.374365 2.03609 -2.84565 -0.534402 -0.578503 0.616237 + 0.381088 1.98997 -2.88234 -0.538388 -0.578161 0.613082 + 0.383209 1.9579 -2.91144 -0.527345 -0.593125 0.608367 + 0.422761 1.94126 -2.90427 -0.30955 -0.658637 0.685839 + 0.461924 1.93088 -2.90102 -0.0944718 -0.667806 0.738316 + 0.353237 2.00827 -2.89763 -0.647689 -0.53793 0.539565 + 0.355358 1.9762 -2.92673 -0.649371 -0.530818 0.544563 + 0.352138 1.95325 -2.95268 -0.631407 -0.639341 0.438826 + 0.383672 1.93857 -2.92968 -0.518595 -0.686122 0.510193 + 0.423224 1.92193 -2.92251 -0.317513 -0.759529 0.567715 + 0.331183 2.05649 -2.87513 -0.706079 -0.494343 0.507028 + 0.335699 2.01663 -2.91063 -0.659364 -0.528935 0.534291 + 0.338162 1.98742 -2.93632 -0.653415 -0.528365 0.542106 + 0.327041 2.0141 -2.92366 -0.856837 -0.37716 0.35154 + 0.329504 1.9849 -2.94935 -0.831056 -0.389802 0.396738 + 0.334942 1.96447 -2.96227 -0.730143 -0.552643 0.401842 + 0.332421 1.93045 -3.03725 -0.718248 -0.64155 0.269319 + 0.362896 1.9105 -3.02897 -0.571065 -0.761074 0.307656 + 0.319993 2.06227 -2.90625 -0.998576 0.0508423 -0.0161631 + 0.323851 2.01424 -2.94759 -0.966206 -0.201075 0.161291 + 0.324871 1.97717 -2.97205 -0.932115 -0.277305 0.232944 + 0.33031 1.95675 -2.98498 -0.735857 -0.599684 0.314473 + 0.329134 2.08035 -2.92669 -0.959403 0.242602 -0.143843 + 0.318612 1.99359 -3.00267 -0.999245 0.0363079 -0.0137993 + 0.319632 1.95652 -3.02713 -0.968928 -0.224482 0.103861 + 0.321743 1.93023 -3.0794 -0.917648 -0.357241 0.174069 + 0.33575 2.09382 -2.95921 -0.96425 0.231084 -0.129701 + 0.325227 2.00706 -3.03519 -0.974958 0.191433 -0.113185 + 0.319477 1.95721 -3.08768 -0.992596 0.121279 -0.00670317 + 0.346571 2.11936 -2.98543 -0.896873 0.358838 -0.258561 + 0.336966 2.03794 -3.06353 -0.903769 0.351223 -0.244631 + 0.331216 1.98809 -3.11602 -0.900398 0.373777 -0.222653 + 0.31549 1.94111 -3.11592 -0.991997 0.111723 -0.0588171 + 0.370119 2.2312 -2.89033 -0.561163 0.658409 -0.501592 + 0.365615 2.14594 -2.99574 -0.599545 0.630378 -0.493122 + 0.356011 2.06451 -3.07384 -0.731845 0.533857 -0.423555 + 0.356933 2.02515 -3.1269 -0.755486 0.545516 -0.362839 + 0.332328 1.97298 -3.14368 -0.881472 0.379587 -0.280928 + 0.39432 2.23788 -2.89427 -0.174521 0.77983 -0.601172 + 0.389817 2.15261 -2.99969 -0.318464 0.754588 -0.57374 + 0.385427 2.10769 -3.0566 -0.480978 0.6926 -0.537555 + 0.386349 2.06833 -3.10966 -0.585664 0.671772 -0.453564 + 0.358045 2.01003 -3.15456 -0.72638 0.554229 -0.406451 + 0.414973 2.34596 -2.7492 0.0685461 0.815429 -0.574785 + 0.415832 2.23983 -2.89347 0.0498165 0.803606 -0.593073 + 0.41685 2.17391 -2.9878 -0.174051 0.838852 -0.515785 + 0.41246 2.12899 -3.04471 -0.394787 0.756238 -0.521774 + 0.422268 2.10312 -3.09402 -0.485888 0.743637 -0.459256 + 0.433981 2.34442 -2.74496 0.236487 0.794435 -0.559416 + 0.440204 2.23825 -2.88846 0.227816 0.793079 -0.564912 + 0.441222 2.17234 -2.98279 0.0827411 0.927144 -0.365455 + 0.442603 2.16591 -3.01543 -0.122953 0.890915 -0.43721 + 0.452411 2.14003 -3.06474 -0.129889 0.862102 -0.489805 + 0.466308 2.23432 -2.88067 0.308979 0.784427 -0.53778 + 0.474026 2.17723 -2.96733 0.186901 0.909097 -0.372305 + 0.475407 2.1708 -2.99997 0.145123 0.932714 -0.330127 + 0.491183 2.14407 -3.04 0.2971 0.83821 -0.457314 + 0.508183 2.17016 -2.95508 0.396365 0.860939 -0.31887 + 0.517952 2.16209 -2.98466 0.415619 0.867041 -0.274773 + 0.533728 2.13537 -3.02469 0.551186 0.717458 -0.425968 + 0.535618 2.15706 -2.94556 0.588208 0.759652 -0.277381 + 0.545387 2.14899 -2.97514 0.68128 0.705538 -0.195127 + 0.560378 2.11072 -3.00768 0.780776 0.558476 -0.280166 + 0.560011 2.0791 -3.06445 0.704083 0.595278 -0.387184 + 0.563837 2.11988 -2.97473 0.880972 0.46392 -0.0930985 + 0.578828 2.08162 -3.00726 0.888715 0.348437 -0.297956 + 0.58911 2.02254 -3.02881 0.981821 0.180999 0.0571482 + 0.586662 2.05445 -3.04743 0.916753 0.393011 -0.0714607 + 0.574252 2.09419 -2.96686 0.967748 0.246266 0.0530802 + 0.584399 2.04968 -2.99969 0.984454 0.156511 0.0797096 + 0.59468 1.9906 -3.02123 0.984021 0.0671062 0.16492 + 0.609711 1.92795 -3.07071 0.9743 0.0797177 0.210678 + 0.608203 1.94353 -3.09701 0.982589 0.178461 0.0516783 + 0.589618 1.99987 -2.99685 0.959156 -0.0248068 0.281788 + 0.590847 1.97369 -3.01281 0.935666 -0.10425 0.337136 + 0.605878 1.91104 -3.06229 0.94264 -0.00330866 0.333796 + 0.579954 1.94416 -2.99674 0.878459 -0.0938714 0.468506 + 0.599692 1.88911 -3.03888 0.926364 -0.0041942 0.376605 + 0.627189 1.83308 -3.12642 0.971195 -0.0175188 0.237643 + 0.637013 1.84059 -3.16702 0.993609 0.0480325 0.102144 + 0.635505 1.85617 -3.19331 0.945681 0.271976 -0.178088 + 0.563295 1.90724 -2.96866 0.79862 -0.0668863 0.598108 + 0.583033 1.85218 -3.0108 0.697145 -0.29103 0.655202 + 0.621003 1.81115 -3.103 0.979705 0.033747 0.197582 + 0.626607 1.77943 -3.14516 0.914192 -0.396809 0.0824398 + 0.630666 1.78308 -3.1656 0.897543 -0.42347 0.122837 + 0.527606 1.94638 -2.93211 0.717319 -0.119366 0.686443 + 0.540477 1.89771 -2.94495 0.664981 -0.153377 0.730941 + 0.499306 1.93196 -2.90716 0.678483 -0.214103 0.702724 + 0.49686 1.91642 -2.91029 0.20049 -0.56045 0.803554 + 0.538031 1.88218 -2.94808 0.386241 -0.607282 0.694281 + 0.517822 1.88427 -2.94465 -0.076252 -0.809571 0.582048 + 0.520296 1.84983 -3.0054 -0.128805 -0.891481 0.434363 + 0.540505 1.84774 -3.00883 -0.0731721 -0.843703 0.5318 + 0.567529 1.8399 -3.00697 0.059863 -0.39891 0.915034 + 0.615499 1.81139 -3.06392 0.900657 -0.0611883 0.430202 + 0.482886 1.89872 -2.93538 -0.190985 -0.81101 0.55298 + 0.489461 1.86738 -2.9882 -0.241588 -0.863665 0.442401 + 0.494123 1.80604 -3.11798 -0.344642 -0.862688 0.370123 + 0.535155 1.79806 -3.09115 -0.357319 -0.827483 0.433123 + 0.562179 1.79022 -3.08929 -0.236796 -0.861985 0.44823 + 0.4298 1.89059 -2.97533 -0.349195 -0.83856 0.418186 + 0.463288 1.82359 -3.10077 -0.342999 -0.86568 0.364622 + 0.441853 1.79071 -3.20774 -0.421799 -0.8487 0.319051 + 0.460883 1.78007 -3.21531 -0.294596 -0.916755 0.269766 + 0.489767 1.77749 -3.19558 -0.305673 -0.914792 0.264043 + 0.39443 1.89582 -3.00597 -0.50588 -0.795311 0.334016 + 0.427918 1.82882 -3.13141 -0.46362 -0.823519 0.326915 + 0.38913 1.81069 -3.24081 -0.522032 -0.800828 0.293527 + 0.422959 1.78291 -3.25752 -0.456297 -0.884217 0.0997665 + 0.441989 1.77227 -3.2651 -0.359205 -0.933256 0.00197763 + 0.375195 1.84879 -3.16449 -0.540362 -0.784873 0.303287 + 0.370069 1.81839 -3.25511 -0.711498 -0.68577 0.153266 + 0.403898 1.79062 -3.27181 -0.513455 -0.833937 -0.20227 + 0.428375 1.79264 -3.29734 -0.471256 -0.709989 -0.523292 + 0.449073 1.77638 -3.29447 -0.381119 -0.814187 -0.438004 + 0.34472 1.86875 -3.17277 -0.687105 -0.696643 0.206338 + 0.351296 1.8498 -3.23371 -0.90718 -0.414301 -0.073333 + 0.361202 1.8383 -3.26571 -0.969213 -0.231546 0.0837408 + 0.365609 1.82155 -3.26492 -0.826156 -0.558216 -0.0765548 + 0.390086 1.82357 -3.29044 -0.540085 -0.644964 -0.540675 + 0.317757 1.91413 -3.10763 -0.770193 -0.558397 0.308213 + 0.324332 1.89519 -3.16858 -0.943974 -0.319444 -0.0828771 + 0.351306 1.87401 -3.26118 -0.94511 -0.0207816 -0.326092 + 0.361212 1.86251 -3.29318 -0.892142 0.0802041 -0.444579 + 0.356741 1.84146 -3.27553 -0.99919 -0.0183303 0.0358235 + 0.320957 1.92094 -3.15613 -0.975908 0.0775768 -0.203923 + 0.347931 1.89976 -3.24873 -0.881531 0.20285 -0.426328 + 0.368483 1.91092 -3.27321 -0.711821 0.444313 -0.543964 + 0.376611 1.90614 -3.28625 -0.598068 0.486209 -0.637114 + 0.36934 1.85773 -3.30622 -0.807147 0.00516891 -0.590328 + 0.337794 1.95281 -3.18389 -0.860206 0.35781 -0.363342 + 0.358347 1.96397 -3.20837 -0.697123 0.514911 -0.498885 + 0.403222 2.00625 -3.21301 -0.48681 0.639599 -0.59492 + 0.420566 1.99496 -3.23476 -0.182199 0.653628 -0.734558 + 0.393954 1.89485 -3.30799 -0.404817 0.51302 -0.756924 + 0.40292 2.05232 -3.15919 -0.535239 0.676635 -0.505652 + 0.438839 2.08711 -3.14356 -0.24278 0.770125 -0.589886 + 0.449139 2.01008 -3.21974 0.0836736 0.6568 -0.749408 + 0.419538 1.88293 -3.32336 0.0169297 0.440701 -0.897494 + 0.478081 2.10392 -3.12291 0.145707 0.789356 -0.596395 + 0.48838 2.02688 -3.19909 0.254254 0.645091 -0.720564 + 0.488365 1.88292 -3.30753 0.289611 0.449635 -0.844958 + 0.448111 1.89804 -3.30834 0.176563 0.512221 -0.840509 + 0.516853 2.10795 -3.09817 0.495025 0.750287 -0.4382 + 0.532964 2.02054 -3.17856 0.572164 0.556786 -0.602178 + 0.576123 1.99168 -3.14484 0.703388 0.52433 -0.47992 + 0.532948 1.87658 -3.28699 0.413036 0.489111 -0.768226 + 0.525308 1.79846 -3.32774 0.30126 -0.271825 -0.913977 + 0.48922 1.79653 -3.33282 0.0262133 -0.390716 -0.920138 + 0.468522 1.81279 -3.33568 -0.0195938 -0.163252 -0.98639 + 0.605755 1.97545 -3.11563 0.922118 0.340633 -0.183487 + 0.58863 1.87838 -3.26006 0.557067 0.501212 -0.662165 + 0.58099 1.80027 -3.30081 0.535555 -0.220468 -0.815215 + 0.618263 1.86215 -3.23085 0.821617 0.357311 -0.444155 + 0.613937 1.79682 -3.27088 0.738998 -0.26562 -0.619134 + 0.554822 1.76938 -3.27247 0.177147 -0.900383 -0.397404 + 0.508423 1.77416 -3.29543 0.099608 -0.91513 -0.390661 + 0.472335 1.77223 -3.30051 -0.106219 -0.892306 -0.438757 + 0.631179 1.79085 -3.23334 0.853445 -0.369386 -0.367675 + 0.600238 1.76109 -3.21029 0.423074 -0.874949 -0.235527 + 0.587769 1.76593 -3.24254 0.35698 -0.865769 -0.350725 + 0.568169 1.7545 -3.21518 -0.03959 -0.991969 -0.120124 + 0.540533 1.76076 -3.22843 -0.135904 -0.989401 -0.0511395 + 0.640489 1.7906 -3.20621 0.94394 -0.289701 -0.158275 + 0.609548 1.76084 -3.18315 0.552403 -0.829464 -0.0827067 + 0.580638 1.74965 -3.18292 -0.0528003 -0.998467 0.0166281 + 0.558435 1.76325 -3.1555 -0.301912 -0.9153 0.2666 + 0.530799 1.76951 -3.16875 -0.317559 -0.917524 0.239387 + 0.605489 1.75718 -3.16271 0.458868 -0.884725 0.0818619 + 0.595239 1.75722 -3.15073 0.0709899 -0.954808 0.288621 + 0.573037 1.77082 -3.12331 -0.225378 -0.896046 0.382501 + 0.624255 1.77598 -3.12444 0.803737 -0.542336 0.244699 + 0.614004 1.77602 -3.11247 0.525441 -0.773302 0.354846 + 0.610853 1.77971 -3.09411 0.476413 -0.775423 0.414428 + 0.599995 1.7991 -3.06009 0.234117 -0.753126 0.614809 + 0.618651 1.8077 -3.08228 0.976578 -0.0944165 0.19334 + 0.494135 1.76554 -3.25139 -0.107306 -0.994213 0.00500804 + 0.465251 1.76812 -3.27113 -0.132568 -0.990637 -0.0326267 + 0.428268 1.82792 -3.3365 -0.176466 -0.290291 -0.940527 + 0.406468 1.84413 -3.33754 -0.302134 -0.164667 -0.938936 + 0.368286 1.83979 -3.29148 -0.655701 -0.550843 -0.516361 + 0.380884 1.85606 -3.32217 -0.653746 -0.0107272 -0.756638 + -0.557574 1.95467 -2.75219 0.90941 -0.0278976 0.414965 + -0.591195 1.94736 -2.68493 0.685719 -0.153302 0.711539 + -0.582635 1.9028 -2.69995 0.672119 -0.0751704 0.736618 + -0.576773 2.03351 -2.69323 0.87722 -0.209859 0.431792 + -0.603725 2.00268 -2.66108 0.651073 -0.313118 0.691419 + -0.65083 1.99416 -2.64194 0.100098 -0.505881 0.856776 + -0.6383 1.93884 -2.66579 0.086709 -0.348989 0.933107 + -0.6215 1.87741 -2.6876 0.125868 -0.266063 0.955703 + -0.549014 1.91012 -2.7672 0.94613 -0.00324097 0.323771 + -0.540029 1.95215 -2.79381 0.986923 0.106444 0.121046 + -0.559228 2.03099 -2.73484 0.984424 0.10089 0.14398 + -0.582231 2.12162 -2.61887 0.942312 -0.202078 0.266856 + -0.563942 1.87344 -2.71651 0.785614 -0.0785967 0.613705 + -0.560132 1.84076 -2.74265 0.891084 -0.336763 0.304238 + -0.545204 1.87744 -2.79335 0.959721 -0.112755 0.257337 + -0.536207 1.89321 -2.82428 0.998619 0.00428827 0.0523511 + -0.542424 1.9554 -2.81462 0.959283 0.232865 -0.159846 + -0.602807 1.84804 -2.70416 0.37489 -0.240105 0.895437 + -0.593886 1.81248 -2.71632 0.563545 -0.436019 0.701644 + -0.584623 1.81375 -2.72933 0.732246 -0.52654 0.431938 + -0.578252 1.79374 -2.78086 0.756421 -0.565337 0.328971 + -0.648715 1.7972 -2.70334 -0.0223477 -0.185469 0.982396 + -0.639794 1.76164 -2.7155 0.426045 -0.565836 0.705915 + -0.641574 1.74647 -2.75072 0.591306 -0.75103 0.293787 + -0.632311 1.74775 -2.76373 0.544872 -0.76406 0.345435 + -0.602743 1.76674 -2.76753 0.651479 -0.677267 0.341884 + -0.698685 1.85599 -2.71767 -0.362385 -0.180903 0.914304 + -0.731885 1.82353 -2.72971 -0.430119 -0.0689101 0.900138 + -0.681915 1.76474 -2.71539 -0.276162 -0.262936 0.924446 + -0.665852 1.74009 -2.72235 0.138845 -0.690283 0.710093 + -0.715485 1.91742 -2.69586 -0.347155 -0.423126 0.836927 + -0.777419 1.86789 -2.75917 -0.645701 -0.160296 0.746576 + -0.753448 1.83334 -2.74042 -0.543407 -0.0223325 0.839172 + -0.71418 1.75095 -2.73674 -0.490167 -0.397708 0.775606 + -0.698117 1.7263 -2.7437 -0.140991 -0.713704 0.686111 + -0.701491 2.01968 -2.63472 -0.302852 -0.519986 0.798683 + -0.745543 2.03331 -2.65112 -0.626794 -0.376569 0.682148 + -0.759537 1.93105 -2.71226 -0.604477 -0.351736 0.714765 + -0.644579 2.08591 -2.57095 0.0991367 -0.646994 0.756023 + -0.69524 2.11143 -2.56373 -0.36146 -0.588378 0.723296 + -0.727539 2.12957 -2.57257 -0.646524 -0.442853 0.621198 + -0.767489 2.04796 -2.67431 -0.822872 -0.221839 0.523134 + -0.785949 1.96684 -2.73182 -0.822726 -0.198455 0.53267 + -0.609183 2.09079 -2.58673 0.652594 -0.501539 0.567962 + -0.637776 2.19722 -2.46583 0.0609133 -0.678577 0.731999 + -0.678501 2.20954 -2.46987 -0.381566 -0.599171 0.703847 + -0.7108 2.22767 -2.47871 -0.678731 -0.43337 0.592887 + -0.749485 2.14421 -2.59576 -0.834976 -0.264766 0.482405 + -0.579138 2.22859 -2.5094 0.945477 -0.24025 0.219893 + -0.60238 2.20209 -2.48161 0.654067 -0.534983 0.53478 + -0.625194 2.30896 -2.36457 0.0832905 -0.657513 0.748825 + -0.66592 2.32128 -2.36861 -0.40161 -0.578409 0.710037 + -0.688934 2.3344 -2.37654 -0.691224 -0.413747 0.592472 + -0.576987 2.15463 -2.65067 0.994317 0.0949441 -0.0481533 + -0.573893 2.2616 -2.54119 0.996191 0.0534127 -0.0689259 + -0.572847 2.36653 -2.42594 0.996661 0.0662524 -0.0477294 + -0.576804 2.3416 -2.40205 0.947136 -0.219572 0.233928 + -0.600047 2.3151 -2.37426 0.659253 -0.51116 0.551454 + -0.570883 2.07068 -2.72723 0.939214 0.290662 -0.182735 + -0.592754 2.19486 -2.6868 0.910156 0.29793 -0.287845 + -0.587346 2.29606 -2.5723 0.914533 0.287886 -0.284168 + -0.5863 2.40099 -2.45705 0.913618 0.30641 -0.267237 + -0.55408 1.99509 -2.80701 0.929924 0.321134 -0.179204 + -0.58665 2.11092 -2.76336 0.89976 0.35383 -0.255412 + -0.616992 2.12624 -2.81177 0.640275 0.582698 -0.500511 + -0.612134 2.21989 -2.70614 0.683011 0.530756 -0.50179 + -0.606726 2.32109 -2.59164 0.683378 0.538591 -0.492863 + -0.554558 1.92862 -2.88943 0.907005 0.299255 -0.29629 + -0.562318 1.98001 -2.854 0.879112 0.354949 -0.318079 + -0.594889 2.09583 -2.81035 0.814339 0.455069 -0.360227 + -0.538602 1.89646 -2.8451 0.984215 0.0743721 -0.160589 + -0.545167 1.89124 -2.8865 0.976989 0.0944499 -0.191237 + -0.563849 1.89026 -2.95209 0.880184 0.282394 -0.381485 + -0.596077 1.95895 -2.95063 0.791354 0.433904 -0.430681 + -0.603837 2.01035 -2.9152 0.772773 0.443957 -0.453568 + -0.537723 1.8242 -2.8348 0.979183 -0.201119 -0.0274185 + -0.545798 1.83268 -2.864 0.965192 -0.126982 -0.228648 + -0.552363 1.82746 -2.9054 0.962773 -0.238395 -0.127421 + -0.554457 1.85289 -2.94916 0.960343 0.0362309 -0.276455 + -0.579126 1.88838 -2.98191 0.799307 0.300351 -0.520478 + -0.54672 1.80842 -2.80386 0.821386 -0.380042 0.425316 + -0.573284 1.75936 -2.86084 0.702268 -0.700419 0.127406 + -0.563727 1.77151 -2.88367 0.86613 -0.47246 -0.163098 + -0.571803 1.77999 -2.91288 0.890954 -0.373242 -0.258636 + -0.604816 1.74469 -2.83784 0.602023 -0.760474 0.243409 + -0.634648 1.70481 -2.92819 0.710141 -0.703781 -0.0198286 + -0.630071 1.71904 -2.9497 0.762702 -0.632085 -0.136945 + -0.620515 1.73118 -2.97252 0.726169 -0.685072 -0.0579214 + -0.626104 1.73156 -2.82037 0.59418 -0.774158 0.218241 + -0.655936 1.69168 -2.91072 0.531648 -0.826498 0.185071 + -0.67741 1.66562 -2.96674 0.566761 -0.812379 0.137197 + -0.667234 1.67281 -2.98919 0.737882 -0.66847 -0.093157 + -0.662657 1.68703 -3.01069 0.783699 -0.620388 -0.0305707 + -0.655672 1.71257 -2.81656 0.470155 -0.84746 0.246507 + -0.675411 1.68708 -2.88916 0.442259 -0.864809 0.237724 + -0.696884 1.66102 -2.94518 0.535717 -0.821316 0.196078 + -0.71439 1.63416 -3.0018 0.491678 -0.868581 -0.0618075 + -0.704214 1.64134 -3.02425 0.455574 -0.85629 -0.243353 + -0.691288 1.70242 -2.79813 0.336486 -0.896316 0.288783 + -0.711027 1.67694 -2.87073 0.396841 -0.86886 0.295971 + -0.720272 1.65889 -2.90357 0.518363 -0.781804 0.34653 + -0.712321 1.65017 -2.94006 0.613486 -0.759573 0.216065 + -0.667632 1.72493 -2.75756 0.432372 -0.860979 0.267899 + -0.68558 1.71445 -2.77081 0.232079 -0.886915 0.399401 + -0.743351 1.68614 -2.80264 0.0837186 -0.904358 0.418483 + -0.752385 1.67622 -2.81787 0.157499 -0.854919 0.494275 + -0.761631 1.65818 -2.8507 0.301615 -0.858643 0.414439 + -0.716065 1.71582 -2.75695 -0.0793514 -0.659711 0.747318 + -0.737643 1.69816 -2.77531 -0.0770784 -0.786541 0.612709 + -0.774219 1.69796 -2.79495 -0.531175 -0.531719 0.659642 + -0.783253 1.68804 -2.81018 -0.542748 -0.546194 0.638041 + -0.781818 1.65907 -2.84148 -0.312299 -0.809132 0.497771 + -0.735743 1.76076 -2.74744 -0.500528 -0.249321 0.829042 + -0.737034 1.73069 -2.75591 -0.343014 -0.309937 0.886724 + -0.758612 1.71303 -2.77428 -0.513006 -0.381767 0.768817 + -0.785062 1.75884 -2.78734 -0.785536 -0.170354 0.594906 + -0.768164 1.80399 -2.7582 -0.650416 -0.165031 0.741433 + -0.769455 1.77391 -2.76666 -0.644992 -0.187123 0.740926 + -0.792135 1.83855 -2.77695 -0.776888 -0.126564 0.616787 + -0.805177 1.78506 -2.81554 -0.85547 -0.142984 0.497721 + -0.802457 1.69142 -2.83538 -0.822484 -0.344203 0.452818 + -0.803831 1.90368 -2.77872 -0.843747 -0.114244 0.524443 + -0.82819 1.86377 -2.8299 -0.897452 -0.0935231 0.431085 + -0.841232 1.81029 -2.8685 -0.94383 -0.0815744 0.320205 + -0.822571 1.71764 -2.86359 -0.906432 -0.243485 0.345104 + -0.819798 1.9372 -2.81047 -0.911377 -0.0355782 0.410032 + -0.844157 1.89729 -2.86166 -0.978818 0.0351742 0.201689 + -0.849986 1.82833 -2.91261 -0.999344 -0.00411076 0.0359906 + -0.836928 1.73303 -2.90586 -0.958848 -0.221468 0.177658 + -0.801696 1.99261 -2.7507 -0.90194 -0.118134 0.415389 + -0.827717 1.9709 -2.82736 -0.974883 0.101854 0.198061 + -0.837639 1.93666 -2.89927 -0.983112 0.166995 -0.0748587 + -0.843468 1.8677 -2.95023 -0.957006 0.163848 -0.23936 + -0.845683 1.75107 -2.94998 -0.990866 -0.124945 -0.0507323 + -0.783236 2.07373 -2.69319 -0.907264 -0.114002 0.404816 + -0.809615 2.02631 -2.76759 -0.969992 0.0729852 0.231922 + -0.820122 2.0107 -2.8405 -0.963493 0.266953 0.0204414 + -0.830043 1.97645 -2.91241 -0.939583 0.28446 -0.190437 + -0.82513 1.87171 -2.99403 -0.880289 0.188788 -0.43526 + -0.762063 2.1617 -2.61279 -0.916748 -0.142246 0.373283 + -0.789946 2.09269 -2.7091 -0.973877 0.0676066 0.216778 + -0.786084 2.12532 -2.73327 -0.969274 0.245629 0.0131943 + -0.805753 2.05895 -2.79176 -0.964472 0.262928 0.0257243 + -0.801246 2.05817 -2.875 -0.883436 0.4276 -0.191569 + -0.73924 2.26522 -2.5111 -0.919386 -0.153615 0.362121 + -0.768773 2.18065 -2.6287 -0.980017 0.0452351 0.193705 + -0.766666 2.2036 -2.64979 -0.973657 0.227875 0.00802571 + -0.774881 2.15574 -2.76266 -0.888346 0.424037 -0.176162 + -0.786876 2.10642 -2.82626 -0.87499 0.449723 -0.179282 + -0.726663 2.24773 -2.49406 -0.854989 -0.255992 0.451067 + -0.714466 2.36952 -2.40378 -0.917555 -0.155807 0.36581 + -0.745029 2.28153 -2.5248 -0.981192 0.0368969 0.189472 + -0.742922 2.30448 -2.54589 -0.973479 0.22872 0.00503501 + -0.755463 2.23402 -2.67918 -0.889083 0.417508 -0.187666 + -0.704796 2.35446 -2.39188 -0.851793 -0.2565 0.456789 + -0.689272 2.47895 -2.29452 -0.88547 -0.0613379 0.460631 + -0.720255 2.38584 -2.41748 -0.98056 0.0410558 0.191874 + -0.718676 2.4032 -2.43332 -0.972384 0.232999 0.0134098 + -0.733201 2.33058 -2.57124 -0.889196 0.418412 -0.185099 + -0.666223 2.45027 -2.27264 -0.622171 -0.331825 0.709081 + -0.679602 2.46388 -2.28262 -0.78906 -0.196564 0.58202 + -0.654271 2.5352 -2.24488 -0.455756 0.357844 0.815006 + -0.692919 2.48925 -2.30308 -0.947203 0.126682 0.294547 + -0.69134 2.50661 -2.31892 -0.939614 0.322157 0.115499 + -0.643209 2.43715 -2.26472 -0.356077 -0.448493 0.819795 + -0.640891 2.52159 -2.2349 -0.260414 0.183163 0.947964 + -0.618804 2.5151 -2.23258 0.297855 0.0935705 0.950014 + -0.657918 2.5455 -2.25344 -0.535416 0.559567 0.632625 + -0.621121 2.43066 -2.2624 0.0927458 -0.506198 0.857416 + -0.595973 2.4368 -2.27209 0.659874 -0.359071 0.660026 + -0.60427 2.53197 -2.24989 0.686074 0.447887 0.573324 + -0.581439 2.45367 -2.28939 0.926129 -0.10229 0.363074 + -0.577483 2.4786 -2.31328 0.982456 0.175701 0.0625236 + -0.612769 2.55385 -2.26927 0.579746 0.771434 0.262266 + -0.585982 2.50048 -2.33267 0.907511 0.394451 -0.144336 + -0.600589 2.51935 -2.34722 0.685012 0.64206 -0.344264 + -0.626817 2.56116 -2.27229 0.302716 0.924591 0.231287 + -0.600907 2.41987 -2.4716 0.688193 0.554461 -0.467935 + -0.614638 2.52666 -2.35024 0.424 0.789962 -0.442926 + -0.632574 2.5333 -2.35231 0.268719 0.841433 -0.468808 + -0.640409 2.56396 -2.27254 0.0596477 0.97778 0.200968 + -0.623337 2.43172 -2.47629 0.407308 0.705702 -0.579729 + -0.641273 2.43835 -2.47837 0.25651 0.753121 -0.605815 + -0.646166 2.5361 -2.35256 0.0847524 0.876576 -0.473741 + -0.662438 2.53685 -2.3505 -0.14152 0.88569 -0.442181 + -0.651889 2.56221 -2.26917 -0.387354 0.864684 0.319811 + -0.629155 2.33295 -2.59633 0.403918 0.687019 -0.604033 + -0.652948 2.34175 -2.59907 0.251386 0.733471 -0.631526 + -0.662951 2.44292 -2.47871 0.0652099 0.787272 -0.613149 + -0.679223 2.44367 -2.47664 -0.159763 0.792598 -0.588442 + -0.673919 2.5351 -2.34713 -0.543304 0.784142 -0.299902 + -0.638004 2.23347 -2.71156 0.40011 0.677521 -0.617153 + -0.661796 2.24227 -2.7143 0.249581 0.721971 -0.645343 + -0.686989 2.24749 -2.71481 0.054629 0.756829 -0.651326 + -0.674625 2.34631 -2.59941 0.0535402 0.765986 -0.640624 + -0.642862 2.13981 -2.8172 0.385694 0.674261 -0.629772 + -0.66832 2.15902 -2.80953 0.242971 0.707254 -0.663895 + -0.693513 2.16424 -2.81003 0.132661 0.751706 -0.646017 + -0.72417 2.17647 -2.79772 -0.114863 0.784211 -0.60977 + -0.71035 2.24921 -2.71041 -0.172622 0.764017 -0.621675 + -0.62594 2.04075 -2.91662 0.397854 0.662912 -0.63424 + -0.639089 2.05134 -2.90518 0.132592 0.706807 -0.694869 + -0.664548 2.07055 -2.8975 0.317957 0.664696 -0.676079 + -0.70217 2.11799 -2.87233 0.243338 0.723504 -0.646009 + -0.732827 2.13022 -2.86002 -0.129863 0.763007 -0.633211 + -0.633091 1.98217 -2.98009 0.398518 0.645396 -0.65165 + -0.64624 1.99277 -2.96864 0.10887 0.734336 -0.669999 + -0.680429 2.01413 -2.95621 0.179709 0.67802 -0.712736 + -0.718051 2.06157 -2.93104 0.0714772 0.661859 -0.746213 + -0.611355 1.95708 -2.98045 0.686247 0.487926 -0.539438 + -0.637404 1.9462 -3.00835 0.390239 0.518796 -0.760634 + -0.665356 1.96838 -3.00144 0.167982 0.623371 -0.763669 + -0.699545 1.98975 -2.98901 0.0575373 0.688263 -0.723176 + -0.757578 1.995 -2.9828 -0.113592 0.618749 -0.777333 + -0.615668 1.92111 -3.00871 0.640755 0.393981 -0.658947 + -0.628382 1.87494 -3.04685 0.629016 0.354429 -0.691895 + -0.646766 1.88913 -3.04918 0.31548 0.484313 -0.816035 + -0.674717 1.9113 -3.04227 0.106511 0.542112 -0.833529 + -0.713644 1.91231 -3.04069 -0.0536119 0.528878 -0.847003 + -0.574841 1.84957 -2.99428 0.824434 0.14509 -0.547044 + -0.611383 1.8823 -3.02108 0.746249 0.255239 -0.614789 + -0.62545 1.80917 -3.06735 0.936792 0.0537605 -0.345732 + -0.628602 1.80548 -3.08571 0.778873 0.208287 -0.591586 + -0.646986 1.81966 -3.08803 0.348425 0.41703 -0.839456 + -0.55886 1.83319 -2.95833 0.945288 -0.186222 -0.267866 + -0.579244 1.82987 -3.00346 0.830313 0.0130896 -0.557144 + -0.608451 1.81652 -3.04159 0.812581 0.0343134 -0.581838 + -0.607899 1.78621 -3.03232 0.857571 -0.192391 -0.477029 + -0.626676 1.77042 -3.0709 0.961313 -0.107693 -0.253534 + -0.572194 1.79384 -2.94126 0.894994 -0.406265 -0.184213 + -0.578691 1.79957 -2.99419 0.878506 -0.321653 -0.353223 + -0.610714 1.75622 -3.01849 0.876862 -0.376808 -0.298544 + -0.629491 1.74042 -3.05707 0.936372 -0.288158 -0.200432 + -0.610323 1.74237 -2.99011 0.809745 -0.573259 -0.125249 + -0.636893 1.71667 -3.04421 0.852395 -0.520264 -0.0524109 + -0.641123 1.70815 -3.06481 0.771026 -0.547568 -0.325098 + -0.633721 1.73191 -3.07768 0.839998 -0.379005 -0.388276 + -0.629827 1.76674 -3.08925 0.889746 -0.119215 -0.440614 + -0.647085 1.70548 -3.02662 0.774087 -0.632234 0.0327205 + -0.653828 1.68914 -3.05635 0.674865 -0.680502 -0.285437 + -0.679261 1.69753 -3.08295 0.288505 -0.608058 -0.739615 + -0.666556 1.71654 -3.09141 0.342584 -0.569633 -0.747097 + -0.648761 1.73238 -3.09523 0.525446 -0.498374 -0.689587 + -0.6694 1.6707 -3.04041 0.632742 -0.757309 -0.16162 + -0.701236 1.67604 -3.07083 0.246896 -0.672 -0.698182 + -0.732385 1.72797 -3.10979 -0.219813 -0.267371 -0.938187 + -0.70419 1.74452 -3.12064 -0.0828964 -0.259953 -0.962057 + -0.686395 1.76035 -3.12446 0.0478373 -0.00262665 -0.998852 + -0.73605 1.64668 -3.05466 0.0382262 -0.790154 -0.611715 + -0.766549 1.68541 -3.08471 -0.385052 -0.464277 -0.79761 + -0.75436 1.70648 -3.09767 -0.287688 -0.315132 -0.904393 + -0.755636 1.79727 -3.09326 -0.47889 0.233674 -0.846204 + -0.754643 1.63341 -3.02767 -0.260362 -0.905142 -0.33605 + -0.785142 1.67213 -3.05771 -0.629832 -0.526763 -0.570818 + -0.80043 1.74889 -3.06583 -0.778712 -0.051527 -0.625262 + -0.788241 1.76996 -3.0788 -0.651549 0.0998846 -0.752002 + -0.729827 1.62331 -2.99668 0.236524 -0.960203 -0.148551 + -0.763973 1.63233 -2.97724 -0.466552 -0.881515 -0.0725268 + -0.803181 1.67052 -3.02929 -0.767807 -0.537371 -0.348862 + -0.818469 1.74728 -3.03741 -0.880974 -0.0545623 -0.470009 + -0.739157 1.62223 -2.94625 0.183848 -0.972274 0.144513 + -0.781466 1.64126 -2.93816 -0.550098 -0.835065 -0.0076684 + -0.820674 1.67945 -2.99021 -0.837698 -0.513628 -0.185605 + -0.836807 1.74327 -2.9936 -0.949727 -0.10786 -0.293914 + -0.747108 1.63095 -2.90975 0.264774 -0.925529 0.270724 + -0.767295 1.63184 -2.90053 -0.227959 -0.959113 0.167738 + -0.815193 1.67187 -2.90431 -0.815049 -0.566475 0.121658 + -0.82955 1.68726 -2.94658 -0.883619 -0.468202 0.0022076 + -0.801022 1.66245 -2.86669 -0.738001 -0.621782 0.262185 + -0.804283 1.89025 -3.02002 -0.731289 0.281872 -0.6211 + -0.815445 1.98414 -2.93955 -0.832256 0.392559 -0.391469 + -0.794598 2.00269 -2.96554 -0.595379 0.579553 -0.556455 + -0.771678 1.91756 -3.03448 -0.339907 0.451845 -0.824802 + -0.786647 2.06586 -2.90214 -0.595149 0.568378 -0.568105 + -0.755071 2.06926 -2.91379 -0.285953 0.661055 -0.693713 + -0.764403 2.12682 -2.84837 -0.553939 0.681562 -0.478148 + -0.752407 2.17614 -2.78478 -0.557694 0.691893 -0.458542 + -0.738588 2.24888 -2.69747 -0.570708 0.670019 -0.474729 + -0.716326 2.34544 -2.58953 -0.562853 0.677362 -0.473685 + -0.697987 2.34803 -2.59502 -0.175162 0.768317 -0.615635 + -0.697562 2.44109 -2.47116 -0.580256 0.688482 -0.43508 + -0.708955 2.4293 -2.45867 -0.894523 0.417737 -0.159138 + -0.685311 2.52331 -2.33464 -0.863245 0.503124 -0.0409141 + -0.727441 1.81382 -3.10411 -0.29665 0.377363 -0.877266 + -0.688514 1.81281 -3.10569 0.112141 0.401656 -0.908899 + -0.644867 1.76721 -3.1068 0.547638 -0.0186949 -0.836507 + 0.549014 1.91012 -2.7672 -0.984284 0.12032 0.12926 + 0.582635 1.9028 -2.69995 -0.669006 -0.0734864 0.739615 + 0.591195 1.94736 -2.68493 -0.698662 -0.123012 0.704797 + 0.563942 1.87344 -2.71651 -0.776688 -0.12469 0.617421 + 0.602807 1.84804 -2.70416 -0.311947 -0.272558 0.910165 + 0.6215 1.87741 -2.6876 -0.0889264 -0.375767 0.922438 + 0.6383 1.93884 -2.66579 -0.103685 -0.360115 0.927128 + 0.557574 1.95467 -2.75219 -0.913303 -0.0406652 0.405246 + 0.545204 1.87744 -2.79335 -0.96965 -0.0373939 0.241621 + 0.560132 1.84076 -2.74265 -0.841935 -0.30809 0.442974 + 0.603725 2.00268 -2.66108 -0.672136 -0.324644 0.665462 + 0.576773 2.03351 -2.69323 -0.918948 -0.116325 0.376832 + 0.559228 2.03099 -2.73484 -0.970389 0.146713 0.191889 + 0.540029 1.95215 -2.79381 -0.986709 0.0598402 0.151075 + 0.536207 1.89321 -2.82428 -0.998262 0.00129864 0.0589168 + 0.65083 1.99416 -2.64194 -0.131342 -0.47987 0.867453 + 0.609183 2.09079 -2.58673 -0.652399 -0.501865 0.567897 + 0.582231 2.12162 -2.61887 -0.947589 -0.207469 0.242964 + 0.576987 2.15463 -2.65067 -0.995985 0.0730764 -0.0517066 + 0.570883 2.07068 -2.72723 -0.983129 0.181351 0.0238725 + 0.701491 2.01968 -2.63472 0.305489 -0.515511 0.800578 + 0.69524 2.11143 -2.56373 0.354199 -0.584732 0.729816 + 0.644579 2.08591 -2.57095 -0.098464 -0.645845 0.757093 + 0.60238 2.20209 -2.48161 -0.653687 -0.534556 0.53567 + 0.715485 1.91742 -2.69586 0.341287 -0.418115 0.841845 + 0.759537 1.93105 -2.71226 0.616324 -0.306288 0.725488 + 0.745543 2.03331 -2.65112 0.6294 -0.378401 0.678726 + 0.727539 2.12957 -2.57257 0.650472 -0.43314 0.623921 + 0.678501 2.20954 -2.46987 0.379118 -0.603495 0.701472 + 0.698685 1.85599 -2.71767 0.237737 -0.204068 0.949651 + 0.648715 1.7972 -2.70334 0.0146635 -0.118088 0.992895 + 0.681915 1.76474 -2.71539 0.284735 -0.261406 0.922276 + 0.731885 1.82353 -2.72971 0.407925 -0.172844 0.896505 + 0.593886 1.81248 -2.71632 -0.636707 -0.339494 0.69235 + 0.639794 1.76164 -2.7155 -0.437006 -0.565265 0.699643 + 0.665852 1.74009 -2.72235 -0.13692 -0.695432 0.705427 + 0.71418 1.75095 -2.73674 0.426291 -0.320638 0.845853 + 0.584623 1.81375 -2.72933 -0.737073 -0.444665 0.508918 + 0.641574 1.74647 -2.75072 -0.598462 -0.737459 0.313046 + 0.667632 1.72493 -2.75756 -0.378946 -0.860555 0.34036 + 0.698117 1.7263 -2.7437 0.100129 -0.720514 0.686173 + 0.602743 1.76674 -2.76753 -0.641636 -0.673453 0.367103 + 0.632311 1.74775 -2.76373 -0.561822 -0.751114 0.346674 + 0.655672 1.71257 -2.81656 -0.47005 -0.85029 0.236769 + 0.68558 1.71445 -2.77081 -0.266447 -0.888021 0.374733 + 0.578252 1.79374 -2.78086 -0.701199 -0.630529 0.332796 + 0.604816 1.74469 -2.83784 -0.611485 -0.767432 0.192702 + 0.626104 1.73156 -2.82037 -0.58202 -0.783918 0.216158 + 0.54672 1.80842 -2.80386 -0.851015 -0.441567 0.284241 + 0.573284 1.75936 -2.86084 -0.673664 -0.729542 0.118091 + 0.630071 1.71904 -2.9497 -0.768607 -0.631468 -0.102424 + 0.634648 1.70481 -2.92819 -0.762872 -0.646528 -0.00526637 + 0.655936 1.69168 -2.91072 -0.534027 -0.828216 0.169922 + 0.537723 1.8242 -2.8348 -0.982672 -0.182463 -0.0325847 + 0.563727 1.77151 -2.88367 -0.866779 -0.471762 -0.161659 + 0.620515 1.73118 -2.97252 -0.703479 -0.70778 -0.0645406 + 0.647085 1.70548 -3.02662 -0.77346 -0.632644 0.0389986 + 0.662657 1.68703 -3.01069 -0.783826 -0.620231 -0.0305102 + 0.545798 1.83268 -2.864 -0.9674 -0.121431 -0.222243 + 0.571803 1.77999 -2.91288 -0.920957 -0.288673 -0.261737 + 0.610323 1.74237 -2.99011 -0.805913 -0.573224 -0.148047 + 0.636893 1.71667 -3.04421 -0.863633 -0.50186 -0.0476784 + 0.538602 1.89646 -2.8451 -0.989077 0.042865 -0.141026 + 0.545167 1.89124 -2.8865 -0.976249 0.0934415 -0.195463 + 0.552363 1.82746 -2.9054 -0.955981 -0.270213 -0.114393 + 0.572194 1.79384 -2.94126 -0.894126 -0.406437 -0.188011 + 0.542424 1.9554 -2.81462 -0.952158 0.243726 -0.18437 + 0.55408 1.99509 -2.80701 -0.930638 0.316891 -0.18301 + 0.562318 1.98001 -2.854 -0.88973 0.335911 -0.309103 + 0.554558 1.92862 -2.88943 -0.917363 0.300563 -0.260974 + 0.554457 1.85289 -2.94916 -0.961892 0.0318981 -0.271561 + 0.58665 2.11092 -2.76336 -0.934307 0.28971 -0.207698 + 0.594889 2.09583 -2.81035 -0.819504 0.428236 -0.380825 + 0.603837 2.01035 -2.9152 -0.781359 0.446163 -0.436367 + 0.596077 1.95895 -2.95063 -0.817915 0.401187 -0.412389 + 0.563849 1.89026 -2.95209 -0.880828 0.289969 -0.374245 + 0.592754 2.19486 -2.6868 -0.913407 0.300285 -0.274802 + 0.612134 2.21989 -2.70614 -0.678529 0.540584 -0.497361 + 0.616992 2.12624 -2.81177 -0.597247 0.583082 -0.550738 + 0.62594 2.04075 -2.91662 -0.393634 0.675562 -0.623432 + 0.611355 1.95708 -2.98045 -0.686796 0.451121 -0.569913 + 0.573893 2.2616 -2.54119 -0.996181 0.0533981 -0.0690851 + 0.587346 2.29606 -2.5723 -0.914569 0.287738 -0.284201 + 0.606726 2.32109 -2.59164 -0.683334 0.538572 -0.492945 + 0.638004 2.23347 -2.71156 -0.400008 0.677465 -0.61728 + 0.642862 2.13981 -2.8172 -0.390747 0.666457 -0.634943 + 0.579138 2.22859 -2.5094 -0.945474 -0.240265 0.219892 + 0.576804 2.3416 -2.40205 -0.947163 -0.219598 0.233795 + 0.572847 2.36653 -2.42594 -0.996664 0.066203 -0.0477373 + 0.5863 2.40099 -2.45705 -0.913605 0.306404 -0.267288 + 0.600907 2.41987 -2.4716 -0.688218 0.554409 -0.46796 + 0.600047 2.3151 -2.37426 -0.658353 -0.512858 0.550951 + 0.595973 2.4368 -2.27209 -0.659755 -0.35898 0.660195 + 0.581439 2.45367 -2.28939 -0.926143 -0.102081 0.363096 + 0.577483 2.4786 -2.31328 -0.98245 0.175707 0.0625927 + 0.637776 2.19722 -2.46583 -0.0590804 -0.68011 0.730725 + 0.625194 2.30896 -2.36457 -0.0842026 -0.658642 0.74773 + 0.621121 2.43066 -2.2624 -0.0928065 -0.506128 0.857451 + 0.618804 2.5151 -2.23258 -0.297719 0.0939191 0.950022 + 0.60427 2.53197 -2.24989 -0.682101 0.452262 0.574628 + 0.66592 2.32128 -2.36861 0.399618 -0.577219 0.712126 + 0.643209 2.43715 -2.26472 0.356109 -0.44842 0.819821 + 0.640891 2.52159 -2.2349 0.258997 0.189058 0.947195 + 0.612769 2.55385 -2.26927 -0.575663 0.772802 0.267189 + 0.585982 2.50048 -2.33267 -0.907487 0.394512 -0.144316 + 0.7108 2.22767 -2.47871 0.683211 -0.435451 0.586178 + 0.688934 2.3344 -2.37654 0.690992 -0.414727 0.592057 + 0.666223 2.45027 -2.27264 0.618234 -0.329916 0.713402 + 0.654271 2.5352 -2.24488 0.44901 0.363471 0.816259 + 0.726663 2.24773 -2.49406 0.85417 -0.260787 0.449872 + 0.704796 2.35446 -2.39188 0.853745 -0.257361 0.452642 + 0.679602 2.46388 -2.28262 0.78958 -0.191073 0.583142 + 0.689272 2.47895 -2.29452 0.885445 -0.0613291 0.46068 + 0.657918 2.5455 -2.25344 0.530299 0.561257 0.635432 + 0.749485 2.14421 -2.59576 0.833167 -0.263514 0.486202 + 0.762063 2.1617 -2.61279 0.916813 -0.141575 0.373377 + 0.73924 2.26522 -2.5111 0.919297 -0.153564 0.362369 + 0.714466 2.36952 -2.40378 0.91753 -0.156153 0.365726 + 0.692919 2.48925 -2.30308 0.947193 0.126733 0.294556 + 0.767489 2.04796 -2.67431 0.822472 -0.223583 0.523021 + 0.783236 2.07373 -2.69319 0.907812 -0.114247 0.403515 + 0.768773 2.18065 -2.6287 0.980203 0.0451205 0.192783 + 0.745029 2.28153 -2.5248 0.981188 0.0369572 0.189486 + 0.720255 2.38584 -2.41748 0.980578 0.0410447 0.191788 + 0.785949 1.96684 -2.73182 0.809728 -0.195122 0.553414 + 0.801696 1.99261 -2.7507 0.902906 -0.0985288 0.418394 + 0.789946 2.09269 -2.7091 0.973876 0.0675064 0.216816 + 0.786084 2.12532 -2.73327 0.969087 0.245989 0.0189807 + 0.766666 2.2036 -2.64979 0.973806 0.227241 0.00792497 + 0.777419 1.86789 -2.75917 0.7657 -0.163234 0.62214 + 0.803831 1.90368 -2.77872 0.839231 -0.163904 0.518485 + 0.819798 1.9372 -2.81047 0.941424 -0.0259053 0.33623 + 0.809615 2.02631 -2.76759 0.968965 0.072907 0.2362 + 0.805753 2.05895 -2.79176 0.964401 0.263179 0.0258432 + 0.753448 1.83334 -2.74042 0.612595 -0.195606 0.765811 + 0.792135 1.83855 -2.77695 0.787746 -0.0899971 0.609391 + 0.82819 1.86377 -2.8299 0.877799 -0.0868702 0.471087 + 0.844157 1.89729 -2.86166 0.971741 0.107343 0.21023 + 0.735743 1.76076 -2.74744 0.525423 -0.207513 0.825148 + 0.768164 1.80399 -2.7582 0.676137 -0.174936 0.715706 + 0.805177 1.78506 -2.81554 0.850898 -0.147504 0.504197 + 0.841232 1.81029 -2.8685 0.931471 -0.147372 0.33263 + 0.737034 1.73069 -2.75591 0.424886 -0.34653 0.836295 + 0.769455 1.77391 -2.76666 0.680699 -0.161788 0.714474 + 0.785062 1.75884 -2.78734 0.789779 -0.118538 0.601829 + 0.822571 1.71764 -2.86359 0.923573 -0.185293 0.335677 + 0.836928 1.73303 -2.90586 0.955423 -0.207571 0.209954 + 0.716065 1.71582 -2.75695 0.0695719 -0.699572 0.711167 + 0.737643 1.69816 -2.77531 0.140438 -0.800231 0.583016 + 0.758612 1.71303 -2.77428 0.504171 -0.442634 0.741543 + 0.774219 1.69796 -2.79495 0.499399 -0.534125 0.682137 + 0.802457 1.69142 -2.83538 0.819097 -0.342598 0.460116 + 0.691288 1.70242 -2.79813 -0.32445 -0.901512 0.28637 + 0.743351 1.68614 -2.80264 -0.0654722 -0.888995 0.453211 + 0.752385 1.67622 -2.81787 -0.157498 -0.854917 0.494279 + 0.783253 1.68804 -2.81018 0.550407 -0.533286 0.642385 + 0.711027 1.67694 -2.87073 -0.403975 -0.871298 0.278647 + 0.720272 1.65889 -2.90357 -0.547251 -0.764205 0.341331 + 0.761631 1.65818 -2.8507 -0.301597 -0.85865 0.414438 + 0.781818 1.65907 -2.84148 0.312298 -0.809132 0.49777 + 0.801022 1.66245 -2.86669 0.728979 -0.632091 0.262775 + 0.675411 1.68708 -2.88916 -0.408762 -0.884918 0.223233 + 0.696884 1.66102 -2.94518 -0.519993 -0.821012 0.235681 + 0.712321 1.65017 -2.94006 -0.632162 -0.737903 0.236368 + 0.747108 1.63095 -2.90975 -0.305723 -0.909531 0.28158 + 0.767295 1.63184 -2.90053 0.239336 -0.946983 0.214342 + 0.67741 1.66562 -2.96674 -0.582521 -0.80071 0.139761 + 0.71439 1.63416 -3.0018 -0.520992 -0.851917 -0.0529496 + 0.729827 1.62331 -2.99668 -0.225954 -0.969403 -0.0959314 + 0.739157 1.62223 -2.94625 -0.150652 -0.976093 0.156674 + 0.763973 1.63233 -2.97724 0.468076 -0.879589 -0.0850188 + 0.667234 1.67281 -2.98919 -0.738943 -0.668196 -0.0864664 + 0.704214 1.64134 -3.02425 -0.434164 -0.867534 -0.242663 + 0.73605 1.64668 -3.05466 -0.0408443 -0.788118 -0.614167 + 0.754643 1.63341 -3.02767 0.346965 -0.87892 -0.327283 + 0.6694 1.6707 -3.04041 -0.633511 -0.754661 -0.170739 + 0.701236 1.67604 -3.07083 -0.254173 -0.670281 -0.697223 + 0.75436 1.70648 -3.09767 0.287692 -0.323204 -0.901539 + 0.766549 1.68541 -3.08471 0.384265 -0.464444 -0.797893 + 0.785142 1.67213 -3.05771 0.634145 -0.548943 -0.544538 + 0.653828 1.68914 -3.05635 -0.659393 -0.693103 -0.291219 + 0.679261 1.69753 -3.08295 -0.293756 -0.630656 -0.718318 + 0.732385 1.72797 -3.10979 0.219546 -0.268859 -0.937824 + 0.788241 1.76996 -3.0788 0.658577 0.10265 -0.745479 + 0.80043 1.74889 -3.06583 0.779611 -0.0495978 -0.624297 + 0.641123 1.70815 -3.06481 -0.770568 -0.551637 -0.319251 + 0.666556 1.71654 -3.09141 -0.350205 -0.56881 -0.744185 + 0.70419 1.74452 -3.12064 0.0900232 -0.266866 -0.95952 + 0.727441 1.81382 -3.10411 0.255883 0.342015 -0.904184 + 0.755636 1.79727 -3.09326 0.492668 0.197896 -0.847417 + 0.629491 1.74042 -3.05707 -0.936978 -0.289343 -0.195839 + 0.633721 1.73191 -3.07768 -0.86158 -0.346916 -0.37058 + 0.648761 1.73238 -3.09523 -0.517603 -0.456057 -0.723946 + 0.686395 1.76035 -3.12446 -0.126139 -0.0451415 -0.990985 + 0.610714 1.75622 -3.01849 -0.892413 -0.349026 -0.285971 + 0.626676 1.77042 -3.0709 -0.958337 -0.117576 -0.260318 + 0.629827 1.76674 -3.08925 -0.878585 -0.0664066 -0.472946 + 0.644867 1.76721 -3.1068 -0.57333 0.0117399 -0.81924 + 0.607899 1.78621 -3.03232 -0.885647 -0.220565 -0.408632 + 0.608451 1.81652 -3.04159 -0.820529 0.0580835 -0.568646 + 0.62545 1.80917 -3.06735 -0.925097 0.0770647 -0.371829 + 0.628602 1.80548 -3.08571 -0.71194 0.141799 -0.687775 + 0.646986 1.81966 -3.08803 -0.368301 0.385008 -0.84624 + 0.578691 1.79957 -2.99419 -0.810243 -0.480429 -0.3357 + 0.579244 1.82987 -3.00346 -0.830311 0.0130861 -0.557146 + 0.611383 1.8823 -3.02108 -0.746254 0.255242 -0.614782 + 0.628382 1.87494 -3.04685 -0.628016 0.358793 -0.690553 + 0.646766 1.88913 -3.04918 -0.337487 0.493804 -0.801411 + 0.55886 1.83319 -2.95833 -0.945288 -0.186223 -0.267866 + 0.574841 1.84957 -2.99428 -0.822734 0.141529 -0.550526 + 0.579126 1.88838 -2.98191 -0.792407 0.308772 -0.526072 + 0.615668 1.92111 -3.00871 -0.635237 0.39336 -0.664637 + 0.633091 1.98217 -2.98009 -0.362506 0.645152 -0.672584 + 0.637404 1.9462 -3.00835 -0.390901 0.516721 -0.761706 + 0.674717 1.9113 -3.04227 -0.100272 0.552101 -0.827726 + 0.688514 1.81281 -3.10569 -0.129446 0.42285 -0.896907 + 0.64624 1.99277 -2.96864 -0.106922 0.737932 -0.666351 + 0.665356 1.96838 -3.00144 -0.156582 0.619203 -0.76946 + 0.713644 1.91231 -3.04069 0.0249015 0.554894 -0.831549 + 0.771678 1.91756 -3.03448 0.394279 0.500449 -0.770776 + 0.639089 2.05134 -2.90518 -0.176378 0.719694 -0.671514 + 0.680429 2.01413 -2.95621 -0.274626 0.678414 -0.681421 + 0.699545 1.98975 -2.98901 -0.0893502 0.632676 -0.769244 + 0.757578 1.995 -2.9828 0.176583 0.578985 -0.795986 + 0.804283 1.89025 -3.02002 0.724997 0.299677 -0.620139 + 0.66832 2.15902 -2.80953 -0.265073 0.720217 -0.641111 + 0.664548 2.07055 -2.8975 -0.321556 0.655354 -0.683456 + 0.718051 2.06157 -2.93104 -0.0644764 0.685328 -0.725374 + 0.755071 2.06926 -2.91379 0.232986 0.696261 -0.678925 + 0.794598 2.00269 -2.96554 0.567044 0.521304 -0.637733 + 0.661796 2.24227 -2.7143 -0.249679 0.721832 -0.64546 + 0.693513 2.16424 -2.81003 -0.115482 0.772102 -0.624918 + 0.70217 2.11799 -2.87233 -0.180041 0.710531 -0.680244 + 0.732827 2.13022 -2.86002 0.126589 0.755794 -0.642457 + 0.786647 2.06586 -2.90214 0.613934 0.613305 -0.496933 + 0.652948 2.34175 -2.59907 -0.251377 0.733465 -0.631537 + 0.674625 2.34631 -2.59941 -0.0533376 0.766246 -0.640329 + 0.686989 2.24749 -2.71481 -0.0489092 0.75303 -0.656166 + 0.71035 2.24921 -2.71041 0.169442 0.760574 -0.626751 + 0.72417 2.17647 -2.79772 0.11058 0.786538 -0.607561 + 0.629155 2.33295 -2.59633 -0.403955 0.686956 -0.604079 + 0.641273 2.43835 -2.47837 -0.256526 0.753098 -0.605836 + 0.662951 2.44292 -2.47871 -0.0646949 0.786927 -0.613645 + 0.697987 2.34803 -2.59502 0.174809 0.768606 -0.615374 + 0.623337 2.43172 -2.47629 -0.407274 0.705687 -0.57977 + 0.632574 2.5333 -2.35231 -0.268762 0.84145 -0.468751 + 0.646166 2.5361 -2.35256 -0.0847157 0.876607 -0.473691 + 0.662438 2.53685 -2.3505 0.141376 0.885775 -0.442058 + 0.679223 2.44367 -2.47664 0.159384 0.792206 -0.589072 + 0.600589 2.51935 -2.34722 -0.685051 0.642073 -0.344162 + 0.614638 2.52666 -2.35024 -0.42396 0.790017 -0.442867 + 0.626817 2.56116 -2.27229 -0.287078 0.912462 0.291545 + 0.640409 2.56396 -2.27254 -0.0666836 0.972072 0.225009 + 0.651889 2.56221 -2.26917 0.380173 0.865309 0.326663 + 0.673919 2.5351 -2.34713 0.543364 0.784178 -0.299702 + 0.697562 2.44109 -2.47116 0.581835 0.686478 -0.436137 + 0.716326 2.34544 -2.58953 0.56339 0.677932 -0.472228 + 0.738588 2.24888 -2.69747 0.571243 0.669361 -0.475013 + 0.69134 2.50661 -2.31892 0.93955 0.322188 0.11593 + 0.685311 2.52331 -2.33464 0.863028 0.503507 -0.040793 + 0.708955 2.4293 -2.45867 0.894238 0.417316 -0.16182 + 0.733201 2.33058 -2.57124 0.888569 0.419915 -0.184707 + 0.718676 2.4032 -2.43332 0.97246 0.232687 0.0133409 + 0.742922 2.30448 -2.54589 0.973484 0.228702 0.00487676 + 0.755463 2.23402 -2.67918 0.889004 0.417398 -0.188284 + 0.752407 2.17614 -2.78478 0.557229 0.691422 -0.459816 + 0.774881 2.15574 -2.76266 0.886149 0.428971 -0.17528 + 0.764403 2.12682 -2.84837 0.553754 0.681939 -0.477824 + 0.786876 2.10642 -2.82626 0.873886 0.449182 -0.185898 + 0.801246 2.05817 -2.875 0.881539 0.431406 -0.191777 + 0.815445 1.98414 -2.93955 0.865807 0.333068 -0.373422 + 0.82513 1.87171 -2.99403 0.87668 0.18386 -0.444553 + 0.820122 2.0107 -2.8405 0.963403 0.267659 0.0146105 + 0.830043 1.97645 -2.91241 0.942145 0.221111 -0.251937 + 0.837639 1.93666 -2.89927 0.981306 0.183179 -0.0590205 + 0.843468 1.8677 -2.95023 0.963375 0.135425 -0.231447 + 0.818469 1.74728 -3.03741 0.879163 -0.0480265 -0.474094 + 0.827717 1.9709 -2.82736 0.983188 0.0436214 0.177307 + 0.849986 1.82833 -2.91261 0.999864 -0.0122529 0.0110046 + 0.836807 1.74327 -2.9936 0.952236 -0.101471 -0.28801 + 0.845683 1.75107 -2.94998 0.99173 -0.115351 -0.0562623 + 0.82955 1.68726 -2.94658 0.888007 -0.45982 0.00279802 + 0.820674 1.67945 -2.99021 0.836294 -0.517847 -0.180129 + 0.803181 1.67052 -3.02929 0.726909 -0.581746 -0.364932 + 0.815193 1.67187 -2.90431 0.815013 -0.566879 0.120007 + 0.781466 1.64126 -2.93816 0.600422 -0.799324 -0.0239625 +} +TriangleList +{ + 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 88 + 92 93 94 + 95 96 94 + 97 98 99 + 100 101 102 + 103 104 105 + 3 106 107 + 108 109 110 + 111 112 113 + 114 115 116 + 117 118 119 + 120 21 121 + 122 123 124 + 125 126 127 + 128 129 130 + 131 132 133 + 134 135 136 + 137 138 139 + 140 97 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 30 + 246 247 248 + 249 250 251 + 252 253 254 + 255 256 257 + 258 259 260 + 259 258 261 + 261 262 259 + 262 261 263 + 262 263 264 + 264 265 262 + 265 264 266 + 267 268 269 + 269 268 270 + 270 271 269 + 269 271 272 + 273 269 272 + 274 269 273 + 270 268 275 + 275 276 270 + 277 270 276 + 270 277 271 + 271 277 278 + 278 279 271 + 271 279 272 + 280 275 268 + 225 275 280 + 268 281 280 + 282 278 277 + 283 278 282 + 278 283 279 + 279 283 284 + 279 284 272 + 282 285 283 + 286 283 285 + 283 286 284 + 285 282 287 + 287 288 285 + 285 288 289 + 289 290 285 + 285 290 286 + 287 282 291 + 291 292 287 + 293 291 282 + 294 289 288 + 288 295 294 + 296 294 295 + 295 297 296 + 298 296 297 + 299 296 298 + 296 299 300 + 301 295 288 + 295 301 302 + 302 297 295 + 297 302 303 + 303 304 297 + 297 304 298 + 288 287 301 + 305 301 287 + 302 301 305 + 305 306 302 + 302 306 307 + 307 303 302 + 308 303 307 + 304 303 308 + 309 305 287 + 310 305 309 + 305 310 306 + 306 310 311 + 311 307 306 + 307 311 312 + 312 313 307 + 307 313 308 + 314 309 287 + 315 309 314 + 309 315 316 + 309 316 310 + 311 310 316 + 317 311 316 + 312 311 317 + 287 318 314 + 319 314 318 + 320 314 319 + 314 320 315 + 315 320 321 + 321 322 315 + 316 315 322 + 322 323 316 + 316 323 317 + 318 324 319 + 325 319 324 + 326 319 325 + 319 326 320 + 320 326 327 + 327 321 320 + 328 321 327 + 321 328 329 + 329 322 321 + 324 330 325 + 331 325 330 + 332 325 331 + 325 332 326 + 327 326 332 + 332 333 327 + 334 327 333 + 327 334 328 + 330 335 331 + 336 331 335 + 337 331 336 + 331 337 332 + 332 337 338 + 338 333 332 + 339 333 338 + 336 340 337 + 338 337 340 + 340 336 226 + 333 341 334 + 342 334 341 + 328 334 342 + 342 343 328 + 328 343 344 + 344 329 328 + 345 329 344 + 322 329 345 + 345 323 322 + 346 343 342 + 343 346 347 + 347 344 343 + 344 347 348 + 348 349 344 + 344 349 345 + 342 350 346 + 346 350 351 + 351 352 346 + 346 352 353 + 353 347 346 + 348 347 353 + 350 342 354 + 354 355 350 + 350 355 356 + 356 351 350 + 357 351 356 + 352 351 357 + 358 354 342 + 359 354 358 + 355 354 359 + 359 360 355 + 355 360 361 + 361 356 355 + 356 361 362 + 356 362 357 + 358 363 359 + 359 363 364 + 364 365 359 + 360 359 365 + 365 366 360 + 361 360 366 + 366 367 361 + 362 361 367 + 367 368 362 + 362 368 369 + 370 364 363 + 363 371 370 + 340 370 371 + 371 363 372 + 373 374 375 + 374 373 376 + 376 377 374 + 374 377 378 + 373 379 376 + 376 379 380 + 381 376 380 + 379 373 382 + 383 379 382 + 380 379 384 + 385 377 376 + 386 387 388 + 388 387 389 + 389 390 388 + 388 390 391 + 389 387 392 + 392 393 389 + 393 394 389 + 389 394 390 + 390 394 395 + 395 396 390 + 390 396 397 + 387 398 392 + 399 392 398 + 399 393 392 + 393 399 400 + 400 401 393 + 394 393 401 + 402 394 401 + 398 387 403 + 404 398 403 + 405 398 404 + 398 405 399 + 399 405 406 + 406 400 399 + 400 406 407 + 408 400 407 + 400 408 401 + 408 409 401 + 401 409 402 + 409 410 402 + 404 411 405 + 405 411 412 + 412 406 405 + 411 404 413 + 404 414 413 + 414 415 413 + 413 415 416 + 416 417 413 + 413 417 418 + 419 414 404 + 415 414 419 + 419 420 415 + 421 419 404 + 422 421 404 + 423 417 416 + 416 424 423 + 423 424 425 + 425 426 423 + 425 427 426 + 427 425 428 + 428 429 427 + 424 416 430 + 430 431 424 + 425 424 431 + 431 432 425 + 432 428 425 + 433 430 416 + 433 434 430 + 434 435 430 + 431 430 435 + 431 435 436 + 436 437 431 + 438 437 436 + 433 439 434 + 434 439 440 + 440 441 434 + 434 441 442 + 435 434 442 + 439 433 443 + 443 444 439 + 439 444 445 + 440 439 445 + 445 446 440 + 447 440 446 + 440 447 441 + 441 447 448 + 448 449 441 + 441 449 442 + 444 419 445 + 419 450 445 + 445 450 451 + 445 451 452 + 452 446 445 + 453 446 452 + 446 453 447 + 448 447 453 + 454 419 444 + 452 451 455 + 451 450 456 + 456 388 451 + 451 388 457 + 428 432 458 + 459 428 458 + 428 459 460 + 460 429 428 + 429 460 461 + 460 462 461 + 462 460 463 + 460 459 464 + 464 463 460 + 465 463 464 + 464 466 465 + 464 459 467 + 416 415 468 + 416 468 469 + 408 407 470 + 471 470 407 + 470 471 472 + 472 473 470 + 474 470 473 + 475 474 473 + 474 475 476 + 407 477 471 + 471 477 478 + 471 478 479 + 472 471 479 + 477 407 480 + 478 481 479 + 395 482 396 + 396 482 380 + 380 483 396 + 484 485 486 + 485 484 487 + 487 488 485 + 489 488 487 + 489 487 490 + 490 224 489 + 276 224 490 + 224 276 275 + 275 491 224 + 490 487 492 + 277 490 492 + 276 490 277 + 493 494 495 + 496 493 495 + 497 496 495 + 498 496 497 + 496 498 499 + 499 500 496 + 501 496 500 + 502 497 495 + 497 502 503 + 498 497 503 + 499 498 503 + 503 504 499 + 505 499 504 + 500 499 505 + 500 505 506 + 506 507 500 + 500 507 508 + 509 503 502 + 503 509 510 + 510 504 503 + 504 510 511 + 504 511 505 + 502 512 509 + 509 512 466 + 512 513 466 + 514 515 364 + 364 515 516 + 516 365 364 + 366 365 516 + 516 517 366 + 366 517 518 + 518 367 366 + 516 515 519 + 519 520 516 + 517 516 520 + 520 521 517 + 518 517 521 + 521 522 518 + 523 518 522 + 367 518 523 + 523 368 367 + 524 519 515 + 519 524 525 + 525 526 519 + 519 526 527 + 527 520 519 + 521 520 527 + 515 528 524 + 529 524 528 + 525 524 529 + 529 530 525 + 531 525 530 + 526 525 531 + 531 532 526 + 526 532 533 + 527 526 533 + 528 534 529 + 535 529 534 + 529 535 536 + 536 530 529 + 530 536 537 + 537 538 530 + 530 538 531 + 539 531 538 + 532 531 539 + 534 540 535 + 540 534 340 + 340 534 541 + 541 179 340 + 542 543 544 + 544 545 542 + 542 545 546 + 546 547 542 + 548 542 547 + 549 542 548 + 548 308 549 + 545 544 550 + 550 551 545 + 546 545 551 + 551 552 546 + 553 546 552 + 553 547 546 + 550 544 554 + 554 555 550 + 556 550 555 + 550 556 557 + 557 551 550 + 551 557 558 + 558 552 551 + 559 554 544 + 559 560 554 + 554 560 561 + 561 555 554 + 555 561 562 + 562 563 555 + 555 563 556 + 544 564 559 + 308 548 304 + 304 548 565 + 565 298 304 + 566 298 565 + 298 566 299 + 567 299 566 + 568 299 567 + 547 565 548 + 569 565 547 + 565 569 566 + 566 569 570 + 570 571 566 + 566 571 567 + 572 567 571 + 573 567 572 + 567 573 568 + 568 573 574 + 547 553 569 + 570 569 553 + 575 570 553 + 576 570 575 + 570 576 577 + 577 571 570 + 571 577 572 + 553 578 575 + 579 575 578 + 575 579 580 + 575 580 576 + 581 576 580 + 577 576 581 + 581 582 577 + 572 577 582 + 552 578 553 + 558 578 552 + 578 558 579 + 579 558 583 + 584 579 583 + 585 579 584 + 579 585 580 + 580 585 586 + 586 587 580 + 580 587 581 + 558 557 583 + 588 583 557 + 583 588 589 + 583 589 590 + 590 591 583 + 583 591 584 + 557 556 588 + 592 588 556 + 589 588 592 + 592 593 589 + 589 593 594 + 590 589 594 + 594 595 590 + 596 590 595 + 591 590 596 + 556 563 592 + 597 592 563 + 592 597 593 + 593 597 598 + 598 594 593 + 594 598 599 + 594 599 600 + 600 595 594 + 563 562 597 + 598 597 562 + 562 601 598 + 595 600 96 + 96 602 595 + 595 602 596 + 603 596 602 + 591 596 603 + 603 584 591 + 604 584 603 + 584 604 585 + 602 96 140 + 140 605 602 + 602 605 603 + 606 603 605 + 603 606 604 + 604 606 607 + 607 608 604 + 585 604 608 + 608 586 585 + 605 140 609 + 609 610 605 + 605 610 606 + 607 606 610 + 610 611 607 + 612 607 611 + 607 612 613 + 613 608 607 + 609 140 614 + 614 615 609 + 616 609 615 + 610 609 616 + 616 611 610 + 611 616 617 + 617 618 611 + 611 618 612 + 614 140 619 + 620 621 622 + 621 620 623 + 623 228 621 + 228 623 624 + 625 623 620 + 626 627 228 + 228 627 536 + 536 535 228 + 228 535 628 + 536 627 629 + 629 537 536 + 630 537 629 + 538 537 630 + 630 631 538 + 538 631 539 + 632 629 627 + 629 632 633 + 627 624 632 + 632 624 634 + 634 635 632 + 633 632 635 + 636 634 624 + 637 634 636 + 634 637 638 + 638 635 634 + 635 638 639 + 639 640 635 + 635 640 633 + 624 623 636 + 641 636 623 + 642 636 641 + 636 642 637 + 637 642 643 + 643 644 637 + 637 644 645 + 645 638 637 + 639 638 645 + 646 641 623 + 647 641 646 + 647 648 641 + 641 648 642 + 643 642 648 + 649 643 648 + 650 643 649 + 644 643 650 + 274 646 623 + 273 646 274 + 651 646 273 + 646 651 647 + 651 652 647 + 652 653 647 + 648 647 653 + 653 654 648 + 648 654 655 + 655 649 648 + 651 273 656 + 656 652 651 + 657 652 656 + 652 657 658 + 658 659 652 + 656 273 272 + 660 656 272 + 657 656 660 + 660 661 657 + 657 661 658 + 661 662 658 + 654 658 662 + 658 654 653 + 663 660 272 + 664 660 663 + 664 661 660 + 662 661 664 + 665 662 664 + 662 665 666 + 662 666 654 + 667 663 272 + 668 663 667 + 668 669 663 + 663 669 664 + 664 669 665 + 669 670 665 + 671 665 670 + 272 672 667 + 673 667 672 + 673 674 667 + 667 674 668 + 668 674 675 + 675 676 668 + 676 677 668 + 678 672 272 + 678 679 672 + 672 679 673 + 272 680 678 + 681 678 680 + 678 681 682 + 679 678 682 + 673 679 682 + 574 680 272 + 680 574 573 + 573 683 680 + 680 683 684 + 684 681 680 + 685 681 684 + 682 681 685 + 574 272 284 + 284 686 574 + 574 686 687 + 687 688 574 + 665 689 666 + 572 683 573 + 683 572 690 + 690 684 683 + 684 690 691 + 691 692 684 + 684 692 685 + 693 685 692 + 682 685 693 + 693 694 682 + 682 694 673 + 582 690 572 + 691 690 582 + 582 695 691 + 691 695 696 + 696 697 691 + 692 691 697 + 697 698 692 + 692 698 693 + 695 582 581 + 581 699 695 + 695 699 700 + 700 696 695 + 701 696 700 + 696 701 702 + 702 697 696 + 698 697 702 + 699 581 587 + 587 703 699 + 700 699 703 + 703 704 700 + 705 700 704 + 700 705 701 + 701 705 706 + 706 707 701 + 702 701 707 + 708 703 587 + 703 708 709 + 709 704 703 + 704 709 710 + 710 711 704 + 704 711 705 + 706 705 711 + 587 586 708 + 708 586 608 + 608 613 708 + 708 613 712 + 712 709 708 + 710 709 712 + 712 713 710 + 710 713 714 + 714 715 710 + 711 710 715 + 716 712 613 + 713 712 716 + 716 717 713 + 713 717 718 + 718 714 713 + 719 714 718 + 714 719 720 + 720 715 714 + 613 612 716 + 716 612 618 + 618 721 716 + 717 716 721 + 721 722 717 + 717 722 723 + 723 718 717 + 719 718 723 + 723 724 719 + 720 719 724 + 725 721 618 + 721 725 726 + 726 722 721 + 722 726 727 + 727 728 722 + 722 728 723 + 618 617 725 + 725 617 729 + 729 730 725 + 726 725 730 + 730 731 726 + 727 726 731 + 731 732 727 + 733 727 732 + 728 727 733 + 734 729 617 + 735 729 734 + 729 735 736 + 736 730 729 + 730 736 737 + 737 731 730 + 731 737 738 + 738 732 731 + 617 616 734 + 615 734 616 + 739 734 615 + 734 739 735 + 735 739 740 + 740 741 735 + 735 741 742 + 742 736 735 + 737 736 742 + 615 743 739 + 740 739 743 + 743 744 740 + 745 740 744 + 741 740 745 + 745 746 741 + 741 746 747 + 747 742 741 + 743 615 614 + 614 748 743 + 743 748 749 + 749 744 743 + 744 749 750 + 750 751 744 + 744 751 745 + 748 614 752 + 752 753 748 + 749 748 753 + 753 754 749 + 750 749 754 + 95 752 614 + 755 752 95 + 753 752 755 + 755 756 753 + 753 756 757 + 757 754 753 + 754 757 758 + 754 758 750 + 95 759 755 + 755 759 760 + 761 755 760 + 756 755 761 + 761 762 756 + 757 756 762 + 763 757 762 + 758 757 763 + 764 759 95 + 761 765 762 + 762 765 766 + 766 767 762 + 762 767 763 + 768 763 767 + 763 768 769 + 763 769 758 + 750 758 769 + 770 750 769 + 751 750 770 + 771 766 765 + 772 766 771 + 767 766 772 + 767 772 768 + 773 768 772 + 769 768 773 + 773 774 769 + 769 774 775 + 775 770 769 + 776 771 765 + 777 677 676 + 676 778 777 + 779 777 778 + 778 676 780 + 778 780 781 + 781 782 778 + 778 782 783 + 783 784 778 + 784 779 778 + 780 676 675 + 675 785 780 + 780 785 786 + 781 780 786 + 787 781 786 + 788 781 787 + 788 782 781 + 782 788 789 + 789 783 782 + 675 790 785 + 785 790 791 + 791 792 785 + 785 792 786 + 790 675 674 + 674 673 790 + 791 790 673 + 694 791 673 + 793 791 694 + 791 793 792 + 792 793 794 + 794 795 792 + 792 795 786 + 694 796 793 + 794 793 796 + 796 797 794 + 798 794 797 + 794 798 795 + 795 798 799 + 799 800 795 + 795 800 786 + 796 694 693 + 693 801 796 + 796 801 802 + 802 797 796 + 803 797 802 + 797 803 798 + 799 798 803 + 803 804 799 + 805 799 804 + 799 805 800 + 801 693 698 + 698 806 801 + 802 801 806 + 807 802 806 + 802 807 804 + 803 802 804 + 702 806 698 + 806 702 808 + 808 809 806 + 806 809 807 + 810 807 809 + 807 810 811 + 811 804 807 + 804 811 805 + 812 805 811 + 800 805 812 + 812 786 800 + 707 808 702 + 813 808 707 + 809 808 813 + 813 814 809 + 809 814 810 + 815 810 814 + 811 810 815 + 815 816 811 + 811 816 812 + 817 812 816 + 812 817 786 + 707 818 813 + 813 818 819 + 819 820 813 + 814 813 820 + 820 821 814 + 814 821 815 + 818 707 706 + 818 706 822 + 822 819 818 + 823 819 822 + 819 823 824 + 824 820 819 + 821 820 824 + 824 825 821 + 821 825 826 + 826 815 821 + 822 706 711 + 711 827 822 + 828 822 827 + 822 828 823 + 823 828 829 + 829 830 823 + 824 823 830 + 830 831 824 + 825 824 831 + 715 827 711 + 827 715 720 + 720 832 827 + 827 832 828 + 829 828 832 + 832 833 829 + 834 829 833 + 829 834 835 + 835 830 829 + 830 835 836 + 836 831 830 + 832 720 837 + 837 833 832 + 833 837 838 + 838 839 833 + 833 839 834 + 840 834 839 + 835 834 840 + 840 841 835 + 836 835 841 + 724 837 720 + 838 837 724 + 724 842 838 + 838 842 843 + 843 844 838 + 839 838 844 + 844 845 839 + 839 845 840 + 842 724 723 + 723 846 842 + 842 846 847 + 847 843 842 + 848 843 847 + 843 848 849 + 849 844 843 + 845 844 849 + 846 723 728 + 728 850 846 + 846 850 851 + 851 847 846 + 848 847 851 + 851 852 848 + 849 848 852 + 852 853 849 + 854 849 853 + 849 854 845 + 733 850 728 + 850 733 855 + 855 856 850 + 850 856 851 + 857 851 856 + 851 857 858 + 858 852 851 + 852 858 859 + 859 853 852 + 855 733 860 + 860 861 855 + 862 855 861 + 856 855 862 + 862 863 856 + 856 863 857 + 732 860 733 + 864 860 732 + 860 864 865 + 865 861 860 + 861 865 866 + 866 867 861 + 861 867 862 + 868 862 867 + 863 862 868 + 732 738 864 + 864 738 869 + 869 870 864 + 864 870 871 + 871 865 864 + 866 865 871 + 869 738 737 + 737 872 869 + 872 873 869 + 874 869 873 + 870 869 874 + 742 872 737 + 872 742 747 + 747 875 872 + 872 875 876 + 876 873 872 + 873 876 877 + 873 877 874 + 875 747 878 + 878 879 875 + 876 875 879 + 879 880 876 + 877 876 880 + 880 881 877 + 874 877 881 + 882 878 747 + 883 878 882 + 878 883 884 + 884 879 878 + 879 884 885 + 885 880 879 + 880 885 886 + 886 881 880 + 747 746 882 + 887 882 746 + 888 882 887 + 882 888 883 + 889 883 888 + 884 883 889 + 889 890 884 + 884 890 891 + 891 885 884 + 886 885 891 + 746 745 887 + 892 887 745 + 893 887 892 + 887 893 888 + 888 893 894 + 894 895 888 + 888 895 889 + 896 889 895 + 890 889 896 + 745 751 892 + 770 892 751 + 897 892 770 + 892 897 893 + 894 893 897 + 897 898 894 + 899 894 898 + 895 894 899 + 899 900 895 + 895 900 896 + 770 901 897 + 897 901 902 + 902 898 897 + 898 902 903 + 903 904 898 + 898 904 899 + 901 770 775 + 775 905 901 + 901 905 906 + 902 901 906 + 906 907 902 + 903 902 907 + 907 908 903 + 909 903 908 + 904 903 909 + 910 905 775 + 905 910 911 + 911 906 905 + 911 912 906 + 906 912 913 + 913 907 906 + 907 913 914 + 914 908 907 + 910 775 774 + 774 915 910 + 911 910 915 + 915 916 911 + 912 911 916 + 916 917 912 + 912 917 918 + 918 913 912 + 914 913 918 + 915 774 773 + 773 919 915 + 915 919 920 + 920 916 915 + 916 920 921 + 921 917 916 + 917 921 922 + 922 918 917 + 919 773 923 + 923 924 919 + 919 924 925 + 925 920 919 + 921 920 925 + 925 926 921 + 921 926 927 + 922 921 927 + 772 923 773 + 771 923 772 + 923 771 928 + 928 924 923 + 924 928 929 + 929 925 924 + 925 929 926 + 926 929 930 + 930 927 926 + 928 771 931 + 931 932 928 + 928 932 930 + 930 929 928 + 933 932 931 + 932 933 934 + 934 935 932 + 934 933 936 + 936 937 934 + 938 934 937 + 939 934 938 + 940 936 933 + 941 936 940 + 936 941 942 + 942 937 936 + 937 942 943 + 943 944 937 + 937 944 938 + 933 945 940 + 946 940 945 + 947 940 946 + 940 947 941 + 941 947 948 + 948 949 941 + 942 941 949 + 950 945 933 + 932 951 930 + 952 930 951 + 930 952 927 + 927 952 953 + 953 954 927 + 927 954 922 + 951 955 952 + 952 955 956 + 956 953 952 + 957 953 956 + 954 953 957 + 957 958 954 + 954 958 959 + 959 922 954 + 918 922 959 + 960 956 955 + 956 960 961 + 961 962 956 + 956 962 957 + 957 962 963 + 963 964 957 + 958 957 964 + 955 938 960 + 960 938 944 + 944 965 960 + 961 960 965 + 965 966 961 + 967 961 966 + 962 961 967 + 938 955 968 + 629 969 630 + 970 630 969 + 631 630 970 + 970 971 631 + 539 631 971 + 972 539 971 + 532 539 972 + 969 973 970 + 974 970 973 + 971 970 974 + 974 975 971 + 971 975 976 + 976 977 971 + 971 977 972 + 978 972 977 + 979 973 969 + 973 979 980 + 980 981 973 + 973 981 974 + 974 981 982 + 982 983 974 + 975 974 983 + 969 633 979 + 984 979 633 + 980 979 984 + 984 985 980 + 980 985 986 + 986 987 980 + 981 980 987 + 987 982 981 + 633 969 988 + 633 640 984 + 989 984 640 + 984 989 990 + 990 985 984 + 985 990 991 + 991 986 985 + 640 639 989 + 989 639 992 + 992 993 989 + 990 989 993 + 993 994 990 + 991 990 994 + 994 995 991 + 996 991 995 + 986 991 996 + 645 992 639 + 992 645 997 + 997 998 992 + 992 998 999 + 999 993 992 + 994 993 999 + 999 1000 994 + 994 1000 1001 + 1001 995 994 + 997 645 644 + 644 1002 997 + 997 1002 1003 + 1003 1004 997 + 998 997 1004 + 1004 1005 998 + 998 1005 1006 + 1006 999 998 + 1000 999 1006 + 650 1002 644 + 1002 650 1007 + 1007 1003 1002 + 1003 1007 1008 + 1003 1008 1009 + 1009 1004 1003 + 1005 1004 1009 + 1009 1010 1005 + 1005 1010 1011 + 1011 1006 1005 + 1007 650 1012 + 1012 1013 1007 + 1008 1007 1013 + 1013 234 1008 + 649 1012 650 + 1012 649 1014 + 1012 1014 1015 + 1015 1013 1012 + 234 1013 1015 + 1015 779 234 + 234 779 784 + 784 1016 234 + 234 1016 1009 + 1014 649 655 + 655 671 1014 + 1015 1014 1017 + 977 1018 978 + 1018 977 976 + 976 1019 1018 + 1018 1019 1020 + 1020 1021 1018 + 1022 1018 1021 + 1019 976 1023 + 1023 1024 1019 + 1019 1024 1025 + 1026 1025 1024 + 1027 1025 1026 + 1023 976 975 + 975 1028 1023 + 1028 1029 1023 + 1030 1023 1029 + 1023 1030 1024 + 1024 1030 1026 + 983 1028 975 + 1028 983 1031 + 1031 1032 1028 + 1028 1032 1033 + 1033 1029 1028 + 1029 1033 1034 + 1029 1034 1030 + 1026 1030 1034 + 1031 983 982 + 982 1035 1031 + 1031 1035 1036 + 1036 1037 1031 + 1032 1031 1037 + 1037 1038 1032 + 1033 1032 1038 + 1038 1039 1033 + 1034 1033 1039 + 1040 1035 982 + 1035 1040 1041 + 1041 1036 1035 + 1036 1041 1042 + 1042 1043 1036 + 1036 1043 1044 + 1044 1037 1036 + 1038 1037 1044 + 982 987 1040 + 1040 987 986 + 986 1045 1040 + 1040 1045 1046 + 1046 1041 1040 + 1042 1041 1046 + 1046 1047 1042 + 1042 1047 1048 + 1048 1049 1042 + 1043 1042 1049 + 996 1045 986 + 1045 996 1050 + 1050 1046 1045 + 1046 1050 1051 + 1051 1047 1046 + 1047 1051 1052 + 1052 1048 1047 + 1053 1050 996 + 1051 1050 1053 + 1053 1054 1051 + 1051 1054 1055 + 1055 1052 1051 + 1056 1052 1055 + 1048 1052 1056 + 996 1057 1053 + 1058 1053 1057 + 1058 1054 1053 + 1054 1058 1059 + 1059 1055 1054 + 1060 1055 1059 + 1055 1060 1056 + 995 1057 996 + 1057 995 1001 + 1001 1061 1057 + 1057 1061 1058 + 1059 1058 1061 + 1061 1062 1059 + 1062 1063 1059 + 1064 1059 1063 + 1059 1064 1060 + 1061 1001 1065 + 1065 1062 1061 + 1066 1062 1065 + 1062 1066 1067 + 1067 1063 1062 + 1063 1067 1068 + 1063 1068 1064 + 1069 1064 1068 + 1060 1064 1069 + 1065 1001 1000 + 1000 1070 1065 + 1071 1065 1070 + 1065 1071 1066 + 1066 1071 1072 + 1072 1073 1066 + 1067 1066 1073 + 1073 1074 1067 + 1068 1067 1074 + 1006 1070 1000 + 1070 1006 1011 + 1011 1075 1070 + 1070 1075 1071 + 1071 1075 1076 + 1076 1072 1071 + 1077 1072 1076 + 1073 1072 1077 + 1077 1078 1073 + 1073 1078 1079 + 1079 1074 1073 + 1075 1011 1080 + 1080 1081 1075 + 1075 1081 1076 + 1081 1082 1076 + 1083 1076 1082 + 1083 1084 1076 + 1076 1084 1077 + 1085 1080 1011 + 1086 1080 1085 + 1081 1080 1086 + 1081 1086 1087 + 1087 1082 1081 + 1088 1082 1087 + 1082 1088 1083 + 1011 1010 1085 + 1089 1085 1010 + 1085 1089 1090 + 1090 1091 1085 + 1085 1091 1086 + 1086 1091 1092 + 1092 1093 1086 + 1093 1087 1086 + 1088 1087 1093 + 1010 1009 1089 + 1094 1089 1009 + 1090 1089 1094 + 1094 1095 1090 + 1090 1095 1096 + 1096 1097 1090 + 1097 1098 1090 + 1091 1090 1098 + 1098 1092 1091 + 1099 1094 1009 + 1100 1094 1099 + 1100 1095 1094 + 1095 1100 1101 + 1101 1096 1095 + 1101 1102 1096 + 1096 1102 1103 + 1103 1097 1096 + 1016 1099 1009 + 1104 1099 1016 + 1099 1104 1105 + 1099 1105 1100 + 1100 1105 1106 + 1016 1107 1104 + 1108 1104 1107 + 1105 1104 1108 + 1108 103 1105 + 1105 103 1109 + 784 1107 1016 + 1107 784 783 + 783 1110 1107 + 1107 1110 1108 + 783 789 1110 + 1110 789 1111 + 1111 1112 1110 + 1111 789 788 + 788 1113 1111 + 1114 1111 1113 + 1113 1115 1114 + 1116 1114 1115 + 1112 1114 1116 + 1116 1117 1112 + 787 1113 788 + 1115 1113 787 + 1115 787 1118 + 1118 1119 1115 + 1115 1119 1116 + 1120 1116 1119 + 1117 1116 1120 + 1117 1120 1121 + 1121 1108 1117 + 1108 1121 1122 + 1122 103 1108 + 1118 787 786 + 1123 1118 786 + 1124 1118 1123 + 1124 1119 1118 + 1119 1124 1120 + 1121 1120 1124 + 1124 1125 1121 + 1122 1121 1125 + 1125 1126 1122 + 1127 1122 1126 + 103 1122 1127 + 786 1128 1123 + 1128 1129 1123 + 1126 1123 1129 + 1126 1125 1123 + 1123 1125 1124 + 1130 1128 786 + 1130 1131 1128 + 1128 1131 1132 + 1132 1129 1128 + 1132 1133 1129 + 1129 1133 1126 + 786 817 1130 + 1134 1130 817 + 1131 1130 1134 + 1134 1135 1131 + 1132 1131 1135 + 1135 1136 1132 + 1136 1137 1132 + 1137 1138 1132 + 1133 1132 1138 + 817 1139 1134 + 1140 1134 1139 + 1135 1134 1140 + 1135 1140 1141 + 1141 1136 1135 + 816 1139 817 + 1139 816 815 + 815 826 1139 + 1139 826 1140 + 1140 826 825 + 825 1142 1140 + 1142 1143 1140 + 831 1142 825 + 1142 831 836 + 836 1144 1142 + 1142 1144 1145 + 1145 1146 1142 + 1144 836 1147 + 1147 1148 1144 + 1144 1148 1149 + 1149 1145 1144 + 841 1147 836 + 1150 1147 841 + 1148 1147 1150 + 1150 1151 1148 + 1148 1151 1152 + 1152 1149 1148 + 841 1153 1150 + 1150 1153 1154 + 1154 1155 1150 + 1151 1150 1155 + 1155 1156 1151 + 1151 1156 1157 + 1157 1152 1151 + 1153 841 840 + 840 1158 1153 + 1153 1158 1159 + 1159 1154 1153 + 1160 1154 1159 + 1154 1160 1161 + 1161 1155 1154 + 1156 1155 1161 + 1158 840 845 + 845 854 1158 + 1159 1158 854 + 854 1162 1159 + 1163 1159 1162 + 1159 1163 1160 + 1160 1163 1164 + 1164 1165 1160 + 1161 1160 1165 + 853 1162 854 + 1162 853 859 + 859 1166 1162 + 1162 1166 1163 + 1164 1163 1166 + 1166 1167 1164 + 1168 1164 1167 + 1164 1168 1169 + 1169 1165 1164 + 1166 859 1170 + 1170 1167 1166 + 1167 1170 1171 + 1171 1172 1167 + 1167 1172 1168 + 1168 1172 1173 + 1173 1174 1168 + 1169 1168 1174 + 1175 1170 859 + 1171 1170 1175 + 1175 1176 1171 + 1171 1176 1177 + 1177 1178 1171 + 1172 1171 1178 + 1178 1179 1172 + 1172 1179 1173 + 859 858 1175 + 1180 1175 858 + 1176 1175 1180 + 1176 1180 1181 + 1181 1177 1176 + 1182 1177 1181 + 1177 1182 1183 + 1183 1178 1177 + 1179 1178 1183 + 858 857 1180 + 1181 1180 857 + 1184 1181 857 + 1182 1181 1184 + 1184 1185 1182 + 1183 1182 1185 + 1185 1186 1183 + 1187 1183 1186 + 1183 1187 1179 + 1179 1187 1188 + 1188 1173 1179 + 1189 1184 857 + 1190 1184 1189 + 1190 1185 1184 + 1185 1190 1191 + 1191 1186 1185 + 1192 1186 1191 + 1186 1192 1187 + 1187 1192 1193 + 1188 1187 1193 + 857 863 1189 + 863 1194 1189 + 1195 1189 1194 + 1189 1195 1196 + 1196 1197 1189 + 1189 1197 1190 + 1191 1190 1197 + 868 1194 863 + 1194 868 1198 + 1198 1199 1194 + 1194 1199 1195 + 1200 1195 1199 + 1196 1195 1200 + 1200 1201 1196 + 1202 1196 1201 + 1197 1196 1202 + 1198 868 1203 + 1203 1204 1198 + 1205 1198 1204 + 1199 1198 1205 + 1205 1206 1199 + 1199 1206 1200 + 867 1203 868 + 1207 1203 867 + 1203 1207 1208 + 1208 1204 1203 + 1204 1208 1209 + 1209 1210 1204 + 1204 1210 1205 + 1211 1205 1210 + 1206 1205 1211 + 867 866 1207 + 1212 1207 866 + 1208 1207 1212 + 1212 1213 1208 + 1208 1213 1214 + 1214 1209 1208 + 1215 1209 1214 + 1210 1209 1215 + 1215 1216 1210 + 1210 1216 1211 + 866 1217 1212 + 1217 1218 1212 + 1218 1219 1212 + 1219 1220 1212 + 1221 1212 1220 + 1213 1212 1221 + 871 1217 866 + 1217 871 1222 + 1222 1223 1217 + 1217 1223 1224 + 1224 1218 1217 + 1218 1224 1225 + 1218 1225 1226 + 1226 1219 1218 + 1222 871 1227 + 1227 1228 1222 + 1222 1228 1229 + 1229 1230 1222 + 1223 1222 1230 + 1230 1231 1223 + 1224 1223 1231 + 870 1227 871 + 1232 1227 870 + 1227 1232 1228 + 1228 1232 1233 + 1233 1229 1228 + 1234 1229 1233 + 1229 1234 1235 + 1235 1230 1229 + 1230 1235 1236 + 1236 1231 1230 + 870 1237 1232 + 1232 1237 1238 + 1238 1233 1232 + 1239 1233 1238 + 1233 1239 1234 + 874 1237 870 + 1237 874 1240 + 1240 1238 1237 + 1241 1238 1240 + 1238 1241 1239 + 1242 1239 1241 + 1234 1239 1242 + 1242 1243 1234 + 1234 1243 1244 + 1244 1235 1234 + 1236 1235 1244 + 881 1240 874 + 1245 1240 881 + 1240 1245 1241 + 1241 1245 1246 + 1246 1247 1241 + 1241 1247 1242 + 1248 1242 1247 + 1243 1242 1248 + 881 886 1245 + 1246 1245 886 + 886 1249 1246 + 1250 1246 1249 + 1247 1246 1250 + 1250 1251 1247 + 1247 1251 1248 + 891 1249 886 + 1249 891 1252 + 1252 1253 1249 + 1249 1253 1250 + 1250 1253 1254 + 1254 1255 1250 + 1251 1250 1255 + 1255 1256 1251 + 1248 1251 1256 + 1252 891 1257 + 1257 1258 1252 + 1252 1258 1259 + 1259 1260 1252 + 1253 1252 1260 + 1260 1254 1253 + 890 1257 891 + 1261 1257 890 + 1257 1261 1258 + 1258 1261 1262 + 1262 1259 1258 + 1263 1259 1262 + 1259 1263 1264 + 1264 1260 1259 + 1260 1264 1265 + 1265 1254 1260 + 890 1266 1261 + 1261 1266 1267 + 1267 1262 1261 + 1268 1262 1267 + 1262 1268 1263 + 896 1266 890 + 1266 896 1269 + 1269 1267 1266 + 1270 1267 1269 + 1267 1270 1268 + 1271 1268 1270 + 1263 1268 1271 + 1271 1272 1263 + 1263 1272 1273 + 1273 1264 1263 + 1265 1264 1273 + 1274 1269 896 + 1275 1269 1274 + 1269 1275 1270 + 1270 1275 1276 + 1276 1277 1270 + 1270 1277 1271 + 896 900 1274 + 1278 1274 900 + 1279 1274 1278 + 1274 1279 1275 + 1276 1275 1279 + 1279 1280 1276 + 1281 1276 1280 + 1277 1276 1281 + 900 899 1278 + 1282 1278 899 + 1283 1278 1282 + 1278 1283 1279 + 1279 1283 1284 + 1284 1280 1279 + 1280 1284 1285 + 1280 1285 1281 + 899 904 1282 + 909 1282 904 + 1286 1282 909 + 1282 1286 1283 + 1283 1286 1287 + 1284 1283 1287 + 1287 1288 1284 + 1285 1284 1288 + 1288 1289 1285 + 1285 1289 1290 + 1281 1285 1290 + 909 1291 1286 + 1286 1291 1292 + 1292 1287 1286 + 1293 1287 1292 + 1287 1293 1294 + 1294 1288 1287 + 1294 1289 1288 + 1289 1294 1295 + 1295 1290 1289 + 1291 909 1296 + 1296 1297 1291 + 1292 1291 1297 + 1297 1298 1292 + 1298 1299 1292 + 1293 1292 1299 + 908 1296 909 + 1300 1296 908 + 1296 1300 1301 + 908 914 1300 + 1302 1300 914 + 1303 1300 1302 + 1302 132 1303 + 1304 132 1302 + 132 1304 1305 + 1305 1306 132 + 914 1307 1302 + 1308 1302 1307 + 1302 1308 1304 + 1304 1308 1309 + 1309 1310 1304 + 1304 1310 1311 + 918 1307 914 + 959 1307 918 + 1307 959 1308 + 1308 959 958 + 958 1309 1308 + 964 1309 958 + 1309 964 1310 + 1310 964 963 + 963 1312 1310 + 1310 1312 1313 + 963 1314 1312 + 1312 1314 1315 + 1315 1316 1312 + 1312 1316 1311 + 1317 1311 1316 + 1314 963 1318 + 1318 1319 1314 + 1314 1319 1320 + 1320 1315 1314 + 1321 1315 1320 + 1316 1315 1321 + 1321 1322 1316 + 1316 1322 1317 + 962 1318 963 + 967 1318 962 + 1318 967 1323 + 1323 1319 1318 + 1319 1323 1324 + 1324 1320 1319 + 1320 1324 1325 + 1325 1326 1320 + 1320 1326 1321 + 1327 1321 1326 + 1322 1321 1327 + 1323 967 1328 + 1328 1329 1323 + 1324 1323 1329 + 1329 1330 1324 + 1325 1324 1330 + 1330 1331 1325 + 1332 1325 1331 + 1326 1325 1332 + 966 1328 967 + 1333 1328 966 + 1328 1333 1334 + 1334 1329 1328 + 1329 1334 1335 + 1335 1330 1329 + 1330 1335 1336 + 1336 1331 1330 + 966 1337 1333 + 1333 1337 1338 + 1338 1339 1333 + 1334 1333 1339 + 1339 1340 1334 + 1335 1334 1340 + 1340 1341 1335 + 1336 1335 1341 + 1337 966 965 + 965 1342 1337 + 1337 1342 1343 + 1343 1338 1337 + 1343 1344 1338 + 1338 1344 1345 + 1345 1339 1338 + 1340 1339 1345 + 1342 965 944 + 944 943 1342 + 1342 943 1346 + 1346 1343 1342 + 1344 1343 1346 + 1346 1347 1344 + 1345 1344 1347 + 1348 1345 1347 + 1349 1345 1348 + 1345 1349 1340 + 1340 1349 1350 + 1350 1341 1340 + 1351 1346 943 + 1347 1346 1351 + 1351 1352 1347 + 1347 1352 1353 + 1353 1354 1347 + 1347 1354 1348 + 943 942 1351 + 949 1351 942 + 1352 1351 949 + 949 1355 1352 + 1355 1353 1352 + 1356 1353 1355 + 1353 1356 1357 + 1357 1354 1353 + 1354 1357 1358 + 1358 1348 1354 + 1359 1355 949 + 1355 1359 1356 + 1356 1359 1360 + 1360 1361 1356 + 1357 1356 1361 + 1361 1362 1357 + 1358 1357 1362 + 949 948 1359 + 1359 948 1363 + 1363 1364 1359 + 1359 1364 1360 + 1363 948 947 + 947 1365 1363 + 1366 1363 1365 + 1364 1363 1366 + 1366 1367 1364 + 1364 1367 1368 + 1368 1360 1364 + 946 1365 947 + 1369 1365 946 + 1365 1369 1366 + 1366 1369 1370 + 1370 1371 1366 + 1367 1366 1371 + 1371 1372 1367 + 1368 1367 1372 + 946 1373 1369 + 1369 1373 1374 + 1374 1370 1369 + 1374 1375 1370 + 1370 1375 1376 + 1376 1371 1370 + 1372 1371 1376 + 1373 946 1377 + 1377 1378 1373 + 1373 1378 1379 + 1379 1380 1373 + 1380 1374 1373 + 945 1377 946 + 1381 1377 945 + 1378 1377 1381 + 1381 1382 1378 + 1378 1382 1383 + 1383 1379 1378 + 945 1384 1381 + 1381 1384 1385 + 1385 1386 1381 + 1382 1381 1386 + 1386 1387 1382 + 1382 1387 1388 + 1388 1389 1382 + 1389 1390 1382 + 1391 1386 1385 + 1386 1391 1392 + 1392 1387 1386 + 1387 1392 1393 + 1393 1388 1387 + 1388 1393 1394 + 1388 1394 1395 + 1395 1389 1388 + 1385 1396 1391 + 1391 1396 760 + 760 1397 1391 + 1392 1391 1397 + 1397 1398 1392 + 1392 1398 1399 + 1393 1392 1399 + 1399 1400 1393 + 1394 1393 1400 + 1400 1401 1394 + 1395 1394 1401 + 1402 1397 760 + 1398 1397 1402 + 1402 1403 1398 + 1398 1403 1404 + 1404 1405 1398 + 1398 1405 1399 + 760 1406 1402 + 1406 1407 1402 + 1403 1402 1407 + 1407 1408 1403 + 1403 1408 1409 + 1406 760 1410 + 1410 1411 1406 + 1406 1411 1412 + 1412 1407 1406 + 1407 1412 1408 + 1408 1412 1413 + 1413 1414 1408 + 1408 1414 1415 + 1410 760 1416 + 1416 1417 1410 + 1410 1417 1418 + 1418 1419 1410 + 1411 1410 1419 + 1419 1413 1411 + 1411 1413 1412 + 759 1416 760 + 111 1416 759 + 1417 1416 111 + 111 1420 1417 + 1417 1420 1421 + 1421 1418 1417 + 759 1422 111 + 1404 1403 1423 + 1424 1383 1382 + 1127 1425 103 + 1426 1101 1100 + 20 1421 1420 + 1420 111 20 + 20 111 1427 + 1375 1374 1428 + 1428 1429 1375 + 1375 1429 1430 + 1430 1376 1375 + 1431 1376 1430 + 1376 1431 1372 + 1432 1429 1428 + 1429 1432 1433 + 1433 1434 1429 + 1429 1434 1430 + 1432 1428 1435 + 1435 1436 1432 + 1432 1436 1437 + 1433 1432 1437 + 1438 1433 1437 + 1439 1433 1438 + 1433 1439 1434 + 1434 1439 1440 + 1440 1430 1434 + 1436 1435 1441 + 1436 1441 1390 + 1390 1442 1436 + 1436 1442 1437 + 1442 1390 1443 + 1442 1443 1444 + 1444 1445 1442 + 1442 1445 1437 + 1443 1390 1389 + 1389 1446 1443 + 1444 1443 1446 + 1447 1444 1446 + 1448 1444 1447 + 1445 1444 1448 + 1445 1448 1449 + 1449 1450 1445 + 1445 1450 1437 + 1446 1389 1395 + 1446 1395 1451 + 1451 1452 1446 + 1446 1452 1453 + 1453 1447 1446 + 1454 1447 1453 + 1455 1447 1454 + 1447 1455 1448 + 1448 1455 1456 + 1451 1395 1401 + 1457 1451 1401 + 1458 1451 1457 + 1458 1452 1451 + 1452 1458 1459 + 1459 1453 1452 + 1460 1453 1459 + 1453 1460 1454 + 1461 1457 1401 + 1462 1457 1461 + 1463 1457 1462 + 1457 1463 1458 + 1458 1463 1464 + 1464 1465 1458 + 1465 1459 1458 + 1466 1461 1401 + 1467 1461 1466 + 1468 1461 1467 + 1461 1468 1462 + 1469 1462 1468 + 1463 1462 1469 + 1469 1464 1463 + 1401 1470 1466 + 1471 1466 1470 + 1466 1471 1472 + 1466 1472 1467 + 1473 1467 1472 + 1468 1467 1473 + 1473 1474 1468 + 1468 1474 1469 + 1475 1470 1401 + 1470 1475 1476 + 1470 1476 1471 + 1477 1471 1476 + 1472 1471 1477 + 1477 1478 1472 + 1472 1478 1479 + 1479 1473 1472 + 1401 1480 1475 + 1475 1480 1481 + 1482 1475 1481 + 1476 1475 1482 + 1401 1400 1480 + 1480 1400 1399 + 1399 1483 1480 + 1480 1483 1481 + 1483 1399 1484 + 1484 1485 1483 + 1483 1485 1486 + 1486 1481 1483 + 1484 1399 1405 + 1405 1487 1484 + 1484 1487 1488 + 1487 1405 1404 + 1404 1489 1487 + 1487 1489 1490 + 1490 1491 1487 + 1487 1491 1492 + 1489 1404 1493 + 1493 1494 1489 + 1490 1489 1494 + 1494 1495 1490 + 155 1490 1495 + 1491 1490 155 + 155 1427 1491 + 1496 1493 1404 + 1449 1448 1497 + 1495 1498 155 + 1498 1495 1499 + 1499 1500 1498 + 1498 1500 1501 + 1501 156 1498 + 1499 1495 1494 + 1494 1502 1499 + 1503 1499 1502 + 1500 1499 1503 + 1503 1504 1500 + 1504 1501 1500 + 1505 1501 1504 + 156 1501 1505 + 1505 1506 156 + 156 1506 1427 + 1493 1502 1494 + 1502 1493 1507 + 1507 1503 1502 + 1504 1503 1508 + 1455 1509 1456 + 1510 1509 1455 + 1455 1454 1510 + 1511 1510 1454 + 1454 1460 1511 + 1512 1511 1460 + 1460 1513 1512 + 1512 1513 1514 + 1459 1513 1460 + 1513 1459 1465 + 1465 1514 1513 + 1514 1465 1515 + 1514 1515 1516 + 1516 1517 1514 + 1514 1517 1518 + 1515 1465 1464 + 1464 1519 1515 + 1515 1519 1520 + 1520 1521 1515 + 1521 1516 1515 + 1522 1516 1521 + 1516 1522 1523 + 1523 1517 1516 + 1519 1464 1469 + 1519 1469 1474 + 1474 1524 1519 + 1519 1524 1520 + 1474 1473 1524 + 1524 1473 1479 + 1479 1525 1524 + 1524 1525 1520 + 1525 1526 1520 + 1527 1520 1526 + 1520 1527 1528 + 1520 1528 1529 + 1529 1521 1520 + 1525 1479 1530 + 1525 1530 1531 + 1531 1526 1525 + 1532 1526 1531 + 1526 1532 1527 + 1527 1532 1533 + 1533 1534 1527 + 1528 1527 1534 + 1530 1479 1478 + 1478 1535 1530 + 1530 1535 1536 + 1537 1536 1535 + 1535 1538 1537 + 1537 1538 1539 + 1539 1540 1537 + 1535 1478 1477 + 1477 1538 1535 + 1538 1477 1541 + 1541 1539 1538 + 1539 1541 1542 + 1539 1542 1543 + 1543 1540 1539 + 1541 1477 1476 + 1544 1541 1476 + 1542 1541 1544 + 1544 1545 1542 + 1542 1545 1546 + 1546 1543 1542 + 1476 1547 1544 + 1548 1544 1547 + 1545 1544 1548 + 1545 1548 1549 + 1549 1550 1545 + 1545 1550 1551 + 1550 1552 1551 + 1482 1547 1476 + 1547 1482 1553 + 1547 1553 1548 + 1548 1553 1554 + 1554 1549 1548 + 1555 1549 1554 + 1555 1550 1549 + 1550 1555 1556 + 1556 1557 1550 + 1553 1482 1558 + 1558 1559 1553 + 1553 1559 1554 + 1558 1560 1559 + 1559 1560 1561 + 1561 1562 1559 + 1559 1562 1554 + 1561 1563 1562 + 1562 1563 1564 + 1564 1565 1562 + 1562 1565 1554 + 1563 1561 1566 + 1566 1567 1563 + 1563 1567 1568 + 1568 1564 1563 + 1569 1564 1568 + 1564 1569 1565 + 1565 1569 1570 + 1570 1571 1565 + 1565 1571 1554 + 1572 1567 1566 + 1567 1572 1573 + 1573 1574 1567 + 1567 1574 1568 + 1575 1568 1574 + 1576 1568 1575 + 1568 1576 1569 + 1572 1566 1577 + 1577 1578 1572 + 1572 1578 1579 + 1579 1573 1572 + 1580 1573 1579 + 1573 1580 1581 + 1581 1574 1573 + 1574 1581 1575 + 1577 1566 1582 + 1582 1583 1577 + 1583 1584 1577 + 1585 1577 1584 + 1577 1585 1586 + 1586 1578 1577 + 1578 1586 1587 + 1587 1579 1578 + 1588 1579 1587 + 1579 1588 1580 + 1481 1584 1583 + 1589 1584 1481 + 1584 1589 1585 + 1585 1589 1590 + 1590 1591 1585 + 1586 1585 1591 + 1591 1592 1586 + 1587 1586 1592 + 1583 1593 1481 + 1481 1593 1594 + 1595 1531 1530 + 1596 1590 1589 + 1589 1486 1596 + 1481 1486 1589 + 1597 1556 1555 + 1555 1598 1597 + 1598 1599 1597 + 1600 1599 1598 + 1598 1601 1600 + 1602 1600 1601 + 1554 1598 1555 + 1601 1598 1554 + 1601 1554 1603 + 1603 1604 1601 + 1601 1604 1602 + 1571 1603 1554 + 1605 1603 1571 + 1605 1604 1603 + 1604 1605 1606 + 1606 1607 1604 + 1604 1607 1602 + 1571 1608 1605 + 1605 1608 1609 + 1606 1605 1609 + 1610 1606 1609 + 1611 1606 1610 + 1607 1606 1611 + 1570 1608 1571 + 1608 1570 1612 + 1612 1609 1608 + 1609 1612 1613 + 1613 1614 1609 + 1609 1614 1615 + 1615 1616 1609 + 1609 1616 1610 + 1617 1612 1570 + 1613 1612 1617 + 1617 1618 1613 + 1619 1613 1618 + 1614 1613 1619 + 1619 1620 1614 + 1615 1614 1620 + 1570 1569 1617 + 1569 1576 1617 + 1621 1617 1576 + 1617 1621 1618 + 1618 1621 1622 + 1622 1623 1618 + 1618 1623 1619 + 1624 1619 1623 + 1620 1619 1624 + 1576 1625 1621 + 1621 1625 1626 + 1626 1627 1621 + 1627 1622 1621 + 1628 1622 1627 + 1623 1622 1628 + 1628 1629 1623 + 1623 1629 1624 + 1575 1625 1576 + 1625 1575 1630 + 1630 1626 1625 + 1626 1630 1631 + 1631 1632 1626 + 1626 1632 1633 + 1633 1627 1626 + 1633 1634 1627 + 1627 1634 1628 + 1630 1575 1581 + 1581 1635 1630 + 1631 1630 1635 + 1635 1636 1631 + 1637 1631 1636 + 1632 1631 1637 + 1637 1638 1632 + 1632 1638 1639 + 1639 1633 1632 + 1634 1633 1639 + 1640 1635 1581 + 1635 1640 1641 + 1641 1636 1635 + 1636 1641 1642 + 1642 1643 1636 + 1636 1643 1637 + 1644 1637 1643 + 1638 1637 1644 + 1581 1580 1640 + 1645 1640 1580 + 1641 1640 1645 + 1645 1646 1641 + 1641 1646 1647 + 1647 1642 1641 + 1648 1642 1647 + 1580 1588 1645 + 1649 1645 1588 + 1645 1649 1650 + 1650 1646 1645 + 1646 1650 1651 + 1651 1647 1646 + 1647 1651 1652 + 1652 1653 1647 + 1647 1653 1648 + 1588 1654 1649 + 1649 1654 1655 + 1655 1656 1649 + 1656 1657 1649 + 1650 1649 1657 + 1657 1658 1650 + 1651 1650 1658 + 1587 1654 1588 + 1654 1587 1659 + 1659 1655 1654 + 1660 1655 1659 + 1655 1660 1661 + 1661 1656 1655 + 1592 1659 1587 + 1662 1659 1592 + 1659 1662 1660 + 1660 1662 1663 + 1663 1664 1660 + 1660 1664 1661 + 1665 1661 1664 + 1656 1661 1665 + 1592 1666 1662 + 1662 1666 1667 + 1667 1663 1662 + 1668 1663 1667 + 1664 1663 1668 + 1668 1669 1664 + 1664 1669 1665 + 1670 1666 1592 + 1666 1670 1671 + 1671 1667 1666 + 1667 1671 1672 + 1672 1673 1667 + 1667 1673 1668 + 1592 1591 1670 + 1670 1591 1590 + 1590 1674 1670 + 1670 1674 1675 + 1675 1671 1670 + 1672 1671 1675 + 1675 1676 1672 + 1672 1676 1677 + 1677 1678 1672 + 1673 1672 1678 + 1679 1674 1590 + 1674 1679 1680 + 1680 1675 1674 + 1675 1680 1681 + 1681 1676 1675 + 1676 1681 1682 + 1682 1677 1676 + 1590 1683 1679 + 1332 1684 1326 + 1326 1684 1327 + 1685 1327 1684 + 1686 1327 1685 + 1327 1686 1322 + 1317 1322 1686 + 1686 1687 1317 + 1688 1687 1686 + 1684 1689 1685 + 1690 1685 1689 + 1691 1685 1690 + 1685 1691 1686 + 1686 1691 1688 + 1688 1691 1692 + 1693 1689 1684 + 1691 1694 1692 + 1694 1695 1692 + 1696 1692 1695 + 1697 1692 1696 + 1692 1697 1698 + 1698 1699 1692 + 1698 1700 1699 + 1695 1701 1696 + 1702 1696 1701 + 1697 1696 1702 + 1702 1703 1697 + 1697 1703 1704 + 1704 1698 1697 + 1700 1698 1704 + 1704 1705 1700 + 1706 1705 1704 + 1701 1695 1707 + 1707 1695 1708 + 1708 1709 1707 + 1690 1710 1691 + 1710 1690 1711 + 1711 1690 1712 + 1712 1713 1711 + 1714 1711 1713 + 1715 1711 1714 + 1711 1715 1716 + 1717 1712 1690 + 1718 1712 1717 + 1712 1718 1719 + 1719 1713 1712 + 1713 1719 1720 + 1720 1721 1713 + 1713 1721 1714 + 1717 1722 1718 + 1718 1722 1723 + 1723 1724 1718 + 1719 1718 1724 + 1724 1725 1719 + 1720 1719 1725 + 1725 1726 1720 + 1727 1720 1726 + 1721 1720 1727 + 1728 1723 1722 + 1729 1723 1728 + 1723 1729 1730 + 1730 1724 1723 + 1724 1730 1731 + 1731 1725 1724 + 1725 1731 1732 + 1732 1726 1725 + 1722 1332 1728 + 1331 1728 1332 + 1733 1728 1331 + 1728 1733 1729 + 1729 1733 1734 + 1734 1735 1729 + 1730 1729 1735 + 1736 1332 1722 + 1331 1336 1733 + 1734 1733 1336 + 1336 1737 1734 + 1738 1734 1737 + 1738 1735 1734 + 1735 1738 1739 + 1739 1740 1735 + 1735 1740 1730 + 1731 1730 1740 + 1740 1741 1731 + 1732 1731 1741 + 1341 1737 1336 + 1737 1341 1350 + 1350 1742 1737 + 1737 1742 1738 + 1738 1742 1743 + 1743 1744 1738 + 1745 1744 1743 + 1744 1745 1746 + 1742 1350 1747 + 1747 1743 1742 + 1748 1743 1747 + 1743 1748 1745 + 1745 1748 1749 + 1749 1750 1745 + 1746 1745 1750 + 1750 1751 1746 + 1747 1350 1349 + 1349 1752 1747 + 1753 1747 1752 + 1747 1753 1748 + 1748 1753 1754 + 1754 1749 1748 + 1755 1749 1754 + 1749 1755 1756 + 1756 1750 1749 + 1348 1752 1349 + 1757 1752 1348 + 1752 1757 1753 + 1753 1757 1758 + 1758 1754 1753 + 1759 1754 1758 + 1754 1759 1755 + 1755 1759 1760 + 1760 1761 1755 + 1756 1755 1761 + 1348 1358 1757 + 1757 1358 1762 + 1762 1758 1757 + 1763 1758 1762 + 1758 1763 1759 + 1759 1763 1764 + 1764 1760 1759 + 1765 1760 1764 + 1760 1765 1766 + 1766 1761 1760 + 1362 1762 1358 + 1767 1762 1362 + 1762 1767 1763 + 1763 1767 1768 + 1768 1764 1763 + 1769 1764 1768 + 1764 1769 1765 + 1765 1769 1770 + 1770 1771 1765 + 1766 1765 1771 + 1362 1772 1767 + 1767 1772 1773 + 1773 1768 1767 + 1774 1768 1773 + 1768 1774 1769 + 1769 1774 1775 + 1775 1770 1769 + 1772 1362 1361 + 1361 1776 1772 + 1772 1776 1777 + 1777 1773 1772 + 1778 1773 1777 + 1773 1778 1774 + 1774 1778 1779 + 1779 1775 1774 + 1776 1361 1360 + 1360 1780 1776 + 1776 1780 1781 + 1781 1777 1776 + 1782 1777 1781 + 1777 1782 1778 + 1778 1782 1783 + 1783 1779 1778 + 1784 1780 1360 + 1780 1784 1785 + 1785 1781 1780 + 1781 1785 1786 + 1786 1787 1781 + 1781 1787 1782 + 1782 1787 1788 + 1788 1783 1782 + 1360 1368 1784 + 1784 1368 1789 + 1789 1790 1784 + 1785 1784 1790 + 1790 1791 1785 + 1786 1785 1791 + 1372 1789 1368 + 1792 1789 1372 + 1789 1792 1793 + 1793 1790 1789 + 1790 1793 1794 + 1794 1791 1790 + 1795 1791 1794 + 1791 1795 1786 + 1372 1431 1792 + 1796 1792 1431 + 1793 1792 1796 + 1796 1797 1793 + 1793 1797 1798 + 1798 1794 1793 + 1799 1794 1798 + 1794 1799 1795 + 1795 1799 1800 + 1800 1801 1795 + 1431 1802 1796 + 1803 1796 1802 + 1796 1803 1804 + 1804 1797 1796 + 1797 1804 1805 + 1805 1798 1797 + 1430 1802 1431 + 1806 1802 1430 + 1802 1806 1803 + 1803 1806 1807 + 1808 1803 1807 + 1804 1803 1808 + 1808 1809 1804 + 1804 1809 1810 + 1805 1804 1810 + 1430 1440 1806 + 1806 1440 1811 + 1811 1807 1806 + 1812 1807 1811 + 1807 1812 1813 + 1813 1814 1807 + 1807 1814 1808 + 1815 1808 1814 + 1808 1815 1809 + 1811 1440 1439 + 1439 1816 1811 + 1816 1817 1811 + 1812 1811 1817 + 1817 1818 1812 + 1812 1818 1819 + 1819 1813 1812 + 1820 1813 1819 + 1814 1813 1820 + 1438 1816 1439 + 1438 1821 1816 + 1816 1821 1822 + 1822 1817 1816 + 1817 1822 1823 + 1823 1818 1817 + 1818 1823 1824 + 1824 1819 1818 + 1821 1438 1825 + 1825 1826 1821 + 1822 1821 1826 + 1826 1827 1822 + 1827 1828 1822 + 1828 1829 1822 + 1823 1822 1829 + 1437 1825 1438 + 1830 1825 1437 + 1825 1830 1826 + 1826 1830 1831 + 1831 1827 1826 + 1832 1827 1831 + 1827 1832 1833 + 1833 1828 1827 + 1437 1834 1830 + 1830 1834 1835 + 1831 1830 1835 + 1836 1831 1835 + 1832 1831 1836 + 1836 1837 1832 + 1832 1837 1838 + 1833 1832 1838 + 1437 1839 1834 + 1834 1839 1840 + 1840 1841 1834 + 1834 1841 1835 + 1839 1437 1450 + 1450 1842 1839 + 1839 1842 1843 + 1843 1840 1839 + 1450 1449 1842 + 1842 1449 1844 + 1844 1845 1842 + 1842 1845 1843 + 1846 1844 1449 + 1456 1846 1449 + 1838 1847 1833 + 1848 1833 1847 + 1848 1828 1833 + 1828 1848 1849 + 1849 1829 1828 + 1849 1850 1829 + 1829 1850 1823 + 1847 1851 1848 + 1849 1848 1851 + 1852 1849 1851 + 1850 1849 1852 + 1852 1853 1850 + 1850 1853 1824 + 1824 1823 1850 + 1854 1852 1851 + 1855 1852 1854 + 1852 1855 1853 + 1853 1855 1856 + 1856 1824 1853 + 1819 1824 1856 + 1856 1857 1819 + 1819 1857 1820 + 1858 1854 1851 + 1859 1854 1858 + 1859 1860 1854 + 1854 1860 1855 + 1855 1860 1861 + 1861 1856 1855 + 1857 1856 1861 + 1861 1862 1857 + 1857 1862 1863 + 1820 1857 1863 + 1858 1864 1859 + 1865 1859 1864 + 1860 1859 1865 + 1865 1866 1860 + 1860 1866 1861 + 1866 1867 1861 + 1868 1861 1867 + 1868 1862 1861 + 1864 1869 1865 + 1869 1870 1865 + 1871 1865 1870 + 1871 1866 1865 + 1866 1871 1872 + 1872 1867 1866 + 1872 1873 1867 + 1867 1873 1868 + 1868 1873 1874 + 1875 1868 1874 + 1862 1868 1875 + 1870 1876 1871 + 1872 1871 1876 + 1877 1872 1876 + 1873 1872 1877 + 1877 1878 1873 + 1873 1878 1874 + 1879 1877 1876 + 1880 1877 1879 + 1880 1878 1877 + 1878 1880 1881 + 1881 1882 1878 + 1878 1882 1874 + 1876 1883 1879 + 1883 1884 1879 + 1884 1885 1879 + 1885 1886 1879 + 1887 1879 1886 + 1879 1887 1888 + 1879 1888 1880 + 1883 1876 1889 + 1890 1883 1889 + 1890 1891 1883 + 1892 1883 1891 + 1893 1892 1891 + 1893 1894 1892 + 1895 1889 1876 + 1889 1895 1896 + 1896 1897 1889 + 1889 1897 1898 + 1898 1890 1889 + 1891 1890 1898 + 1898 1899 1891 + 1893 1891 1899 + 1900 1895 1876 + 1895 1900 1901 + 1901 1902 1895 + 1896 1895 1902 + 1902 1903 1896 + 1904 1896 1903 + 1904 1897 1896 + 1897 1904 1905 + 1905 1898 1897 + 1905 1899 1898 + 1906 1902 1901 + 1902 1906 1907 + 1907 1903 1902 + 1908 1903 1907 + 1903 1908 1904 + 1904 1908 1909 + 1905 1904 1909 + 1910 1905 1909 + 1899 1905 1910 + 1906 1901 1911 + 1911 1912 1906 + 1907 1906 1912 + 1912 1913 1907 + 1913 1914 1907 + 1908 1907 1914 + 1914 1915 1908 + 1908 1915 1909 + 1858 1912 1911 + 1912 1858 1916 + 1916 1913 1912 + 1917 1913 1916 + 1913 1917 1918 + 1918 1914 1913 + 1915 1914 1918 + 1915 1918 1919 + 1919 1920 1915 + 1915 1920 1909 + 1921 1916 1858 + 1917 1916 1921 + 1921 1922 1917 + 1918 1917 1922 + 1922 1923 1918 + 1923 1924 1918 + 1924 1919 1918 + 1925 1919 1924 + 1920 1919 1925 + 1926 1921 1858 + 1927 1921 1926 + 1927 1922 1921 + 1922 1927 1928 + 1928 1923 1922 + 1929 1923 1928 + 1923 1929 1930 + 1930 1924 1923 + 1931 1926 1858 + 1932 1926 1931 + 1932 1933 1926 + 1926 1933 1927 + 1927 1933 1934 + 1928 1927 1934 + 1929 1928 1934 + 1931 1935 1932 + 1936 1932 1935 + 1933 1932 1936 + 1936 1934 1933 + 1937 1934 1936 + 1934 1937 1929 + 1929 1937 1938 + 1938 1939 1929 + 1939 1930 1929 + 1935 1931 1940 + 1940 1941 1935 + 1935 1941 1942 + 1942 1943 1935 + 1935 1943 1936 + 1937 1936 1943 + 1943 1944 1937 + 1937 1944 1938 + 1941 1940 1945 + 1945 1946 1941 + 1942 1941 1946 + 1946 1947 1942 + 1944 1942 1947 + 1944 1943 1942 + 1948 1946 1945 + 1946 1948 1949 + 1949 1947 1946 + 1950 1947 1949 + 1947 1950 1944 + 1944 1950 1938 + 1948 1945 1951 + 1951 1952 1948 + 1949 1948 1952 + 1952 1953 1949 + 1950 1949 1953 + 1953 1954 1950 + 1950 1954 1938 + 1952 1951 1836 + 1836 1955 1952 + 1952 1955 1956 + 1956 1953 1952 + 1954 1953 1956 + 1954 1956 1957 + 1957 1958 1954 + 1954 1958 1938 + 1955 1836 1959 + 1959 1960 1955 + 1956 1955 1960 + 1960 1957 1956 + 1961 1957 1960 + 1958 1957 1961 + 1958 1961 1962 + 1962 1963 1958 + 1958 1963 1938 + 1964 1959 1836 + 1965 1959 1964 + 1959 1965 1960 + 1960 1965 1961 + 1961 1965 1962 + 1965 1966 1962 + 1967 1962 1966 + 1963 1962 1967 + 1968 1964 1836 + 1969 1964 1968 + 1964 1969 1966 + 1964 1966 1965 + 1970 1968 1836 + 1971 1968 1970 + 1968 1971 1972 + 1968 1972 1969 + 1969 1972 1973 + 1967 1969 1973 + 1966 1969 1967 + 1835 1970 1836 + 1974 1970 1835 + 1970 1974 1975 + 1970 1975 1971 + 1971 1975 1976 + 1976 1977 1971 + 1972 1971 1977 + 1977 1973 1972 + 1835 1978 1974 + 1979 1974 1978 + 1975 1974 1979 + 1979 1980 1975 + 1975 1980 1976 + 1981 1978 1835 + 1978 1981 1982 + 1982 1983 1978 + 1978 1983 1979 + 1984 1979 1983 + 1984 1980 1979 + 1980 1984 1985 + 1985 1976 1980 + 1981 1835 1986 + 1986 1987 1981 + 1982 1981 1987 + 1987 1988 1982 + 1988 1989 1982 + 1990 1982 1989 + 1990 1983 1982 + 1983 1990 1984 + 1991 1987 1986 + 1987 1991 1992 + 1992 1988 1987 + 1992 1993 1988 + 1988 1993 1994 + 1994 1989 1988 + 1995 1989 1994 + 1989 1995 1990 + 1990 1995 1996 + 1984 1990 1996 + 1996 1997 1984 + 1997 1985 1984 + 1993 1992 1998 + 1998 1999 1993 + 1994 1993 1999 + 1999 2000 1994 + 2000 2001 1994 + 1995 1994 2001 + 2001 2002 1995 + 1995 2002 1996 + 1998 2003 1999 + 1999 2003 1846 + 1846 2000 1999 + 1846 2004 2000 + 2000 2004 2005 + 2005 2001 2000 + 2002 2001 2005 + 2002 2005 2006 + 2006 2007 2002 + 2002 2007 1996 + 2004 1846 2008 + 2008 2009 2004 + 2004 2009 2010 + 2005 2004 2010 + 2010 2006 2005 + 2011 2006 2010 + 2007 2006 2011 + 2007 2011 2012 + 2012 2013 2007 + 2007 2013 1996 + 2014 2009 2008 + 2009 2014 2015 + 2015 2010 2009 + 2015 2016 2010 + 2010 2016 2011 + 2011 2016 2017 + 2017 2012 2011 + 2018 2012 2017 + 2013 2012 2018 + 2019 2015 2014 + 2016 2015 2019 + 2019 2020 2016 + 2016 2020 2017 + 2021 2017 2020 + 2021 2022 2017 + 2017 2022 2018 + 2014 2023 2019 + 2024 2019 2023 + 2024 2020 2019 + 2020 2024 2021 + 2025 2023 2014 + 2026 2023 2025 + 2023 2026 2024 + 2024 2026 2027 + 2021 2024 2027 + 2014 2028 2025 + 2025 2028 2029 + 2029 2030 2025 + 2026 2025 2030 + 2030 2027 2026 + 2028 2014 2031 + 1881 1880 1888 + 2032 1881 1888 + 2033 1881 2032 + 2033 1882 1881 + 1882 2033 2034 + 2034 1874 1882 + 1888 2035 2032 + 2035 2036 2032 + 2036 2037 2032 + 2038 2032 2037 + 2032 2038 2039 + 2039 2040 2032 + 2032 2040 2033 + 2041 2035 1888 + 2041 2042 2035 + 2043 2035 2042 + 2044 2043 2042 + 2044 2045 2043 + 1888 1887 2041 + 2046 2041 1887 + 2042 2041 2046 + 2046 2047 2042 + 2042 2047 2048 + 2048 2044 2042 + 2045 2044 2048 + 2048 2049 2045 + 2050 2045 2049 + 2036 2045 2050 + 2050 2037 2036 + 1887 2051 2046 + 2051 2052 2046 + 2053 2046 2052 + 2053 2047 2046 + 2047 2053 2054 + 2054 2048 2047 + 2054 2049 2048 + 1886 2051 1887 + 2055 2051 1886 + 2051 2055 2056 + 2056 2052 2051 + 2057 2052 2056 + 2052 2057 2053 + 2053 2057 2058 + 2054 2053 2058 + 2059 2054 2058 + 2049 2054 2059 + 2055 1886 1885 + 1885 2060 2055 + 2056 2055 2060 + 2060 2061 2056 + 2057 2056 2061 + 2061 2062 2057 + 2057 2062 2058 + 2063 2060 1885 + 2060 2063 2064 + 2064 2061 2060 + 2062 2061 2064 + 2062 2064 2065 + 2065 2066 2062 + 2062 2066 2058 + 2063 1885 1884 + 1884 2067 2063 + 2063 2067 2068 + 2064 2063 2068 + 2068 2069 2064 + 2069 2065 2064 + 2070 2065 2069 + 2066 2065 2070 + 2066 2070 2071 + 2071 2072 2066 + 2066 2072 2058 + 2073 2068 2067 + 1910 2068 2073 + 2068 1910 2074 + 2074 2069 2068 + 2074 2075 2069 + 2069 2075 2070 + 2067 1893 2073 + 2073 1893 1899 + 1910 2073 1899 + 2074 1910 1909 + 1909 2076 2074 + 2076 2077 2074 + 2075 2074 2077 + 2077 2078 2075 + 2070 2075 2078 + 2078 2079 2070 + 2079 2080 2070 + 2080 2071 2070 + 2081 2076 1909 + 2076 2081 2082 + 2076 2082 2083 + 2083 2077 2076 + 2077 2083 2078 + 2078 2083 2084 + 2084 2079 2078 + 1909 2085 2081 + 2086 2081 2085 + 2082 2081 2086 + 2086 2087 2082 + 2082 2087 2088 + 2088 2084 2082 + 2084 2083 2082 + 1909 2089 2085 + 2085 2089 2090 + 2090 2091 2085 + 2085 2091 2086 + 2092 2086 2091 + 2091 2093 2092 + 2089 1909 2094 + 2094 2095 2089 + 2089 2095 2096 + 2096 2090 2089 + 2097 2090 2096 + 1920 2094 1909 + 2098 2094 1920 + 2094 2098 2095 + 2095 2098 2099 + 2099 2096 2095 + 2096 2099 2100 + 2100 2101 2096 + 2096 2101 2097 + 1920 1925 2098 + 2099 2098 1925 + 2102 2099 1925 + 2100 2099 2102 + 2102 2103 2100 + 2103 2104 2100 + 2091 2090 144 + 2034 2033 2040 + 2105 2034 2040 + 2106 2034 2105 + 1874 2034 2106 + 1874 2106 2107 + 2107 2108 1874 + 1874 2108 1875 + 2109 2105 2040 + 2110 2105 2109 + 2105 2110 2111 + 2105 2111 2106 + 2107 2106 2111 + 2111 2112 2107 + 2113 2107 2112 + 2108 2107 2113 + 2114 2109 2040 + 2115 2109 2114 + 2109 2115 2116 + 2109 2116 2110 + 2110 2116 2117 + 2118 2110 2117 + 2111 2110 2118 + 2118 2112 2111 + 2119 2114 2040 + 2120 2114 2119 + 2121 2114 2120 + 2114 2121 2115 + 2115 2121 2122 + 2122 2123 2115 + 2116 2115 2123 + 2123 2117 2116 + 2119 2124 2120 + 2125 2120 2124 + 2121 2120 2125 + 2125 2126 2121 + 2121 2126 2122 + 2127 2122 2126 + 2128 2122 2127 + 2122 2128 2129 + 2129 2123 2122 + 2130 2125 2124 + 2131 2125 2130 + 2131 2126 2125 + 2126 2131 2127 + 2132 2127 2131 + 2133 2127 2132 + 2127 2133 2128 + 2124 2134 2130 + 2134 2135 2130 + 2135 2136 2130 + 2137 2130 2136 + 2130 2137 2138 + 2130 2138 2131 + 2131 2138 2132 + 2139 2134 2124 + 2139 2140 2134 + 2141 2134 2140 + 33 2141 2140 + 2142 33 2140 + 2143 33 2142 + 2124 2144 2139 + 2145 2139 2144 + 2139 2145 2146 + 2140 2139 2146 + 2140 2146 2142 + 2147 2142 2146 + 2147 2148 2142 + 2142 2148 2143 + 2144 2124 2149 + 1741 1740 1739 + 1739 2150 1741 + 1741 2150 2151 + 2151 2152 1741 + 1741 2152 1732 + 2153 1732 2152 + 1726 1732 2153 + 2150 1739 2154 + 2154 2155 2150 + 2150 2155 2156 + 2156 2151 2150 + 2157 2151 2156 + 2151 2157 2158 + 2158 2152 2151 + 2152 2158 2153 + 2154 1739 1738 + 2159 2155 2154 + 2155 2159 2160 + 2160 2156 2155 + 2156 2160 2161 + 2161 2162 2156 + 2156 2162 2157 + 2163 2157 2162 + 2158 2157 2163 + 2163 2164 2158 + 2153 2158 2164 + 2160 2159 1751 + 1751 2165 2160 + 2161 2160 2165 + 2165 2166 2161 + 2167 2161 2166 + 2162 2161 2167 + 2167 2168 2162 + 2162 2168 2163 + 2169 2163 2168 + 2164 2163 2169 + 2170 2165 1751 + 2165 2170 2171 + 1751 2172 2170 + 2170 2172 2173 + 2173 2174 2170 + 2175 2170 2174 + 2174 2176 2175 + 2172 1751 1750 + 1750 1756 2172 + 2172 1756 2177 + 2177 2173 2172 + 2178 2173 2177 + 2173 2178 2179 + 2179 2174 2173 + 2174 2179 2180 + 2180 2176 2174 + 1761 2177 1756 + 2181 2177 1761 + 2177 2181 2178 + 2178 2181 2182 + 2182 2183 2178 + 2179 2178 2183 + 2183 2184 2179 + 2180 2179 2184 + 1761 1766 2181 + 2181 1766 2185 + 2185 2182 2181 + 2186 2182 2185 + 2182 2186 2187 + 2187 2183 2182 + 2183 2187 2188 + 2188 2184 2183 + 1771 2185 1766 + 2189 2185 1771 + 2185 2189 2186 + 2186 2189 2190 + 2190 2191 2186 + 2187 2186 2191 + 2191 2192 2187 + 2188 2187 2192 + 1771 2193 2189 + 2189 2193 2194 + 2194 2190 2189 + 2195 2190 2194 + 2190 2195 2196 + 2196 2191 2190 + 2191 2196 2197 + 2197 2192 2191 + 2193 1771 1770 + 1770 2198 2193 + 2193 2198 2199 + 2199 2194 2193 + 2200 2194 2199 + 2194 2200 2195 + 2195 2200 2201 + 2201 2202 2195 + 2196 2195 2202 + 2198 1770 1775 + 1775 2203 2198 + 2198 2203 2204 + 2204 2199 2198 + 2205 2199 2204 + 2199 2205 2200 + 2200 2205 2206 + 2206 2201 2200 + 2203 1775 1779 + 1779 2207 2203 + 2203 2207 2208 + 2208 2204 2203 + 2209 2204 2208 + 2204 2209 2205 + 2205 2209 2210 + 2210 2206 2205 + 2207 1779 1783 + 1783 2211 2207 + 2207 2211 2212 + 2212 2208 2207 + 2213 2208 2212 + 2208 2213 2209 + 2209 2213 2214 + 2214 2210 2209 + 2211 1783 1788 + 1788 2215 2211 + 2211 2215 2216 + 2216 2212 2211 + 2217 2212 2216 + 2212 2217 2213 + 2213 2217 2218 + 2218 2214 2213 + 2219 2215 1788 + 2215 2219 2220 + 2220 2216 2215 + 2216 2220 2221 + 2221 2222 2216 + 2216 2222 2217 + 2217 2222 2223 + 2218 2217 2223 + 2219 1788 1787 + 1787 1786 2219 + 2220 2219 1786 + 1786 1795 2220 + 1795 2224 2220 + 2221 2220 2225 + 2225 2226 2221 + 2227 2221 2226 + 2222 2221 2227 + 2227 2223 2222 + 2226 2228 2227 + 2229 2227 2228 + 2223 2227 2229 + 2230 2228 2226 + 2228 2230 2231 + 2231 2232 2228 + 2228 2232 2229 + 2229 2232 2233 + 2234 2229 2233 + 2229 2234 2223 + 2226 2235 2230 + 2236 2230 2235 + 2231 2230 2236 + 2236 2237 2231 + 2231 2237 2238 + 2238 2239 2231 + 2232 2231 2239 + 2239 2233 2232 + 1800 2235 2226 + 2235 1800 2240 + 2240 2241 2235 + 2235 2241 2236 + 2242 2236 2241 + 2236 2242 2243 + 2243 2237 2236 + 2226 2244 1800 + 2240 1800 1799 + 1799 2245 2240 + 2246 2240 2245 + 2240 2246 2247 + 2247 2241 2240 + 2241 2247 2242 + 2242 2247 2248 + 2248 2249 2242 + 2243 2242 2249 + 1798 2245 1799 + 2250 2245 1798 + 2245 2250 2246 + 2246 2250 2251 + 2252 2246 2251 + 2247 2246 2252 + 2252 2248 2247 + 2252 2253 2248 + 2248 2253 2254 + 2254 2249 2248 + 1798 1805 2250 + 2250 1805 2255 + 2255 2251 2250 + 2251 2255 2256 + 2256 2257 2251 + 2251 2257 2258 + 2258 2259 2251 + 2251 2259 2252 + 2253 2252 2259 + 1810 2255 1805 + 2256 2255 1810 + 1810 2260 2256 + 2256 2260 2261 + 2261 2262 2256 + 2257 2256 2262 + 2262 2263 2257 + 2257 2263 2264 + 2264 2258 2257 + 2265 2258 2264 + 2266 2260 1810 + 2260 2266 2267 + 2267 2268 2260 + 2260 2268 2261 + 2266 1810 1809 + 1809 1815 2266 + 2266 1815 2269 + 2267 2266 2269 + 2270 2267 2269 + 2271 2267 2270 + 2271 2268 2267 + 2268 2271 2272 + 2272 2261 2268 + 1814 2269 1815 + 1820 2269 1814 + 2269 1820 2273 + 2273 2274 2269 + 2269 2274 2275 + 2275 2270 2269 + 2276 2270 2275 + 2276 2277 2270 + 2270 2277 2271 + 1863 2273 1820 + 2278 2273 1863 + 2273 2278 2274 + 2274 2278 2279 + 2279 2275 2274 + 2279 2280 2275 + 2275 2280 2276 + 2276 2280 2281 + 2281 2282 2276 + 2277 2276 2282 + 1863 2283 2278 + 2278 2283 2284 + 2279 2278 2284 + 2285 2279 2284 + 2280 2279 2285 + 2285 2281 2280 + 2281 2285 2286 + 2281 2286 2287 + 2287 2282 2281 + 2283 1863 2288 + 2283 2288 2289 + 2289 2290 2283 + 2283 2290 2284 + 2288 1863 2291 + 2291 2292 2288 + 2288 2292 2293 + 2293 2289 2288 + 2294 2289 2293 + 2294 2290 2289 + 2290 2294 2295 + 2295 2284 2290 + 2296 2291 1863 + 2297 2291 2296 + 2291 2297 2292 + 2292 2297 2298 + 2298 2293 2292 + 2298 2299 2293 + 2293 2299 2294 + 2294 2299 2300 + 2300 2295 2294 + 2301 2296 1863 + 2302 2296 2301 + 2302 2303 2296 + 2296 2303 2297 + 2298 2297 2303 + 2303 2304 2298 + 2299 2298 2304 + 2304 2305 2299 + 2299 2305 2300 + 1862 2301 1863 + 1875 2301 1862 + 2301 1875 2306 + 2301 2306 2302 + 2302 2306 2307 + 2307 2308 2302 + 2303 2302 2308 + 2308 2304 2303 + 2308 2305 2304 + 2305 2308 2307 + 2307 2309 2305 + 2305 2309 2300 + 2306 1875 2108 + 2108 2310 2306 + 2306 2310 2307 + 2310 2311 2307 + 2312 2307 2311 + 2312 2309 2307 + 2309 2312 2313 + 2313 2300 2309 + 2113 2310 2108 + 2310 2113 2314 + 2314 2311 2310 + 2311 2314 2315 + 2315 2316 2311 + 2311 2316 2312 + 2312 2316 2317 + 2313 2312 2317 + 2318 2314 2113 + 2315 2314 2318 + 2318 2319 2315 + 2320 2315 2319 + 2316 2315 2320 + 2320 2321 2316 + 2316 2321 2317 + 2113 2322 2318 + 2323 2318 2322 + 2318 2323 2324 + 2324 2319 2318 + 2319 2324 2325 + 2325 2326 2319 + 2319 2326 2320 + 2112 2322 2113 + 2112 2118 2322 + 2322 2118 2323 + 2117 2323 2118 + 2324 2323 2117 + 2117 2327 2324 + 2324 2327 2328 + 2328 2325 2324 + 2329 2325 2328 + 2325 2329 2330 + 2330 2326 2325 + 2326 2330 2331 + 2331 2320 2326 + 2327 2117 2123 + 2123 2129 2327 + 2327 2129 2332 + 2332 2328 2327 + 2328 2332 2333 + 2333 2334 2328 + 2328 2334 2329 + 2329 2334 2335 + 2335 2336 2329 + 2330 2329 2336 + 2332 2129 2337 + 2337 2338 2332 + 2333 2332 2338 + 2338 2339 2333 + 2340 2333 2339 + 2334 2333 2340 + 2340 2335 2334 + 2129 2128 2337 + 2341 2337 2128 + 2337 2341 2342 + 2337 2342 2343 + 2343 2338 2337 + 2338 2343 2339 + 2339 2343 2344 + 2344 2345 2339 + 2339 2345 2340 + 2128 2133 2341 + 2346 2341 2133 + 2342 2341 2346 + 2346 2347 2342 + 2342 2347 2344 + 2344 2343 2342 + 2133 2348 2346 + 2349 2346 2348 + 2347 2346 2349 + 2349 2350 2347 + 2347 2350 2351 + 2351 2352 2347 + 2347 2352 2344 + 2132 2348 2133 + 2348 2132 2353 + 2353 2354 2348 + 2348 2354 2349 + 2349 2354 2355 + 2355 2356 2349 + 2350 2349 2356 + 2356 2357 2350 + 2351 2350 2357 + 2353 2132 2358 + 2358 2359 2353 + 2360 2353 2359 + 2354 2353 2360 + 2360 2355 2354 + 2355 2360 2361 + 2361 2362 2355 + 2355 2362 2363 + 2363 2356 2355 + 2357 2356 2363 + 2358 2364 2359 + 2359 2364 2365 + 2365 2366 2359 + 2359 2366 2360 + 2361 2360 2366 + 2364 2358 145 + 145 2367 2364 + 2364 2367 2368 + 2368 2365 2364 + 2369 2365 2368 + 2366 2365 2369 + 2369 2370 2366 + 2366 2370 2361 + 2367 145 2371 + 2371 2372 2367 + 2367 2372 2373 + 2373 2368 2367 + 2373 2374 2368 + 2368 2374 2369 + 2371 145 2375 + 2375 2376 2371 + 2371 2376 2377 + 2377 2378 2371 + 2379 2378 2377 + 2377 2380 2379 + 2375 145 2132 + 2138 2375 2132 + 2381 2375 2138 + 2375 2381 2376 + 2376 2381 2382 + 2382 2383 2376 + 2376 2383 2377 + 2383 2384 2377 + 2385 2377 2384 + 2385 2380 2377 + 2138 2137 2381 + 2381 2137 2386 + 2382 2381 2386 + 2136 2386 2137 + 2387 2386 2136 + 2386 2387 2388 + 2388 2389 2386 + 2388 2390 2389 + 2391 2389 2390 + 2392 2391 2390 + 2136 2393 2387 + 2387 2393 2394 + 2394 2395 2387 + 2387 2395 2396 + 2396 2388 2387 + 2390 2388 2396 + 2396 2397 2390 + 2392 2390 2397 + 2393 2136 2398 + 2398 2399 2393 + 2394 2393 2399 + 2372 2371 2400 + 2400 2401 2372 + 2372 2401 2402 + 2373 2372 2402 + 2402 2403 2373 + 2374 2373 2403 + 2400 2404 2401 + 2403 2405 2374 + 2374 2405 2406 + 2369 2374 2406 + 2406 2407 2369 + 2370 2369 2407 + 2407 2408 2370 + 2361 2370 2408 + 2405 2409 2406 + 2410 2406 2409 + 2411 2406 2410 + 2406 2411 2412 + 2412 2407 2406 + 2407 2412 2413 + 2413 2408 2407 + 2409 2414 2410 + 2410 2414 2415 + 2416 2410 2415 + 2411 2410 2416 + 2416 2417 2411 + 2414 2409 2418 + 2419 2418 2409 + 2420 2418 2419 + 2421 2418 2420 + 2420 2415 2421 + 2422 2415 2420 + 2415 2422 2423 + 2423 2416 2415 + 2423 2424 2416 + 2425 2419 2409 + 2426 2419 2425 + 2419 2426 2427 + 2427 2428 2419 + 2419 2428 2420 + 2422 2420 2428 + 2428 2429 2422 + 2422 2429 1293 + 2423 2422 1293 + 2425 2430 2426 + 2412 2411 2431 + 2429 2428 2427 + 2429 2427 2432 + 2432 2433 2429 + 2429 2433 1293 + 2433 1295 1293 + 1295 1294 1293 + 2427 2426 2432 + 2426 2434 2432 + 2435 2432 2434 + 2433 2432 2435 + 2433 2435 2436 + 2436 1295 2433 + 1295 2436 1290 + 2426 2403 2434 + 2403 2402 2434 + 2437 2434 2402 + 2434 2437 2435 + 2435 2437 2438 + 2438 2436 2435 + 1290 2436 2438 + 2438 2439 1290 + 1290 2439 2440 + 2440 1281 1290 + 2441 2437 2402 + 2401 2441 2402 + 2437 2442 2438 + 2442 2380 2438 + 2443 2438 2380 + 2443 2439 2438 + 2439 2443 2444 + 2444 2440 2439 + 2444 2445 2440 + 2440 2445 2446 + 2446 1281 2440 + 1281 2446 1277 + 2380 2385 2443 + 2443 2385 2447 + 2447 2448 2443 + 2448 2449 2443 + 2449 2444 2443 + 2445 2444 2449 + 2449 2450 2445 + 2446 2445 2450 + 2450 2451 2446 + 1277 2446 2451 + 2385 2452 2447 + 2452 2453 2447 + 2453 2454 2447 + 2454 2455 2447 + 2455 2456 2447 + 2456 2457 2447 + 2458 2447 2457 + 2447 2458 2459 + 2447 2459 2460 + 2460 2448 2447 + 2384 2452 2385 + 2452 2384 2461 + 2452 2461 2462 + 2462 2453 2452 + 2453 2462 2463 + 2453 2463 2397 + 2397 2454 2453 + 2461 2384 2383 + 2383 2464 2461 + 2461 2464 2465 + 2465 2462 2461 + 2463 2462 2465 + 2465 2392 2463 + 2463 2392 2397 + 2382 2464 2383 + 2464 2382 2465 + 2382 2391 2465 + 2454 2397 2396 + 2454 2396 2395 + 2395 2455 2454 + 2455 2395 2394 + 2455 2394 2466 + 2466 2456 2455 + 2456 2466 2467 + 2456 2467 2468 + 2468 2457 2456 + 2457 2468 2469 + 2457 2469 2458 + 2470 2466 2394 + 2467 2466 2470 + 2470 2471 2467 + 2467 2471 2472 + 2472 2473 2467 + 2473 2474 2467 + 2474 2468 2467 + 2469 2468 2474 + 2475 2470 2394 + 2476 2470 2475 + 2476 2471 2470 + 2471 2476 2477 + 2477 2472 2471 + 2477 2478 2472 + 2472 2478 206 + 206 2473 2472 + 2479 2475 2394 + 2480 2475 2479 + 2481 2475 2480 + 2475 2481 2476 + 2476 2481 2482 + 2482 2477 2476 + 2478 2477 2482 + 2482 2483 2478 + 206 2478 2483 + 2483 2484 206 + 2485 206 2484 + 2479 2143 2480 + 2480 2143 2148 + 2481 2480 2148 + 2148 2147 2481 + 2481 2147 2482 + 2147 2486 2482 + 2486 2487 2482 + 2487 2488 2482 + 2488 2489 2482 + 2489 2490 2482 + 2490 2491 2482 + 2491 2492 2482 + 2493 2482 2492 + 2482 2493 2483 + 2146 2486 2147 + 2486 2146 2145 + 2486 2145 2494 + 2494 2487 2486 + 2487 2494 2495 + 2487 2495 2496 + 2496 2488 2487 + 2488 2496 2497 + 2488 2497 2498 + 2498 2489 2488 + 2144 2494 2145 + 2495 2494 2144 + 2144 31 2495 + 2495 31 2499 + 2499 2496 2495 + 2497 2496 2499 + 2499 2500 2497 + 2497 2500 2039 + 2039 2498 2497 + 2501 2498 2039 + 2489 2498 2501 + 2489 2501 2502 + 2502 2490 2489 + 31 2503 2499 + 2503 245 2499 + 2500 2499 245 + 2039 2038 2501 + 2501 2038 2504 + 2504 2502 2501 + 2505 2502 2504 + 2490 2502 2505 + 2490 2505 2506 + 2506 2491 2490 + 2491 2506 2507 + 2491 2507 2508 + 2508 2492 2491 + 2037 2504 2038 + 2050 2504 2037 + 2504 2050 2505 + 2505 2050 2049 + 2049 2509 2505 + 2509 2506 2505 + 2507 2506 2509 + 2509 2510 2507 + 2507 2510 2511 + 2511 2512 2507 + 2512 2513 2507 + 2513 2508 2507 + 2059 2509 2049 + 2059 2510 2509 + 2510 2059 2514 + 2514 2511 2510 + 2514 2515 2511 + 2511 2515 2516 + 2516 2512 2511 + 2517 2514 2059 + 2515 2514 2517 + 2517 2518 2515 + 2515 2518 2519 + 2516 2515 2519 + 2520 2516 2519 + 2521 2516 2520 + 2522 2516 2521 + 2058 2517 2059 + 2523 2517 2058 + 2517 2523 2518 + 2518 2523 2524 + 2524 2519 2518 + 2519 2524 2525 + 2519 2525 2526 + 2526 2520 2519 + 2527 2520 2526 + 2526 2528 2527 + 2058 2529 2523 + 2529 2524 2523 + 2525 2524 2529 + 2529 2530 2525 + 2531 2525 2530 + 2525 2531 2526 + 2528 2526 2531 + 2058 2530 2529 + 2532 2530 2058 + 2530 2532 2533 + 2531 2530 2533 + 2534 2531 2533 + 2531 2534 2528 + 2072 2532 2058 + 2072 2071 2532 + 2532 2071 2533 + 2071 2080 2533 + 2533 2080 2535 + 2533 2535 2534 + 2534 2535 2536 + 2536 2537 2534 + 2528 2534 2537 + 2537 2538 2528 + 2528 2538 2539 + 2539 2540 2528 + 2541 2537 2536 + 2537 2541 2542 + 2542 2538 2537 + 2538 2542 2543 + 2543 2539 2538 + 2536 2544 2541 + 2541 2544 2545 + 2545 2546 2541 + 2542 2541 2546 + 2546 2547 2542 + 2543 2542 2547 + 2544 2536 2548 + 2548 2549 2544 + 2544 2549 2550 + 2550 2545 2544 + 2551 2545 2550 + 2545 2551 2552 + 2552 2546 2545 + 2547 2546 2552 + 2548 2536 2553 + 2553 2554 2548 + 2548 2554 2555 + 2555 2556 2548 + 2549 2548 2556 + 2557 2553 2536 + 2520 2558 2521 + 2520 2559 2558 + 2040 2039 2500 + 2500 2560 2040 + 2484 2561 2485 + 2562 2561 2484 + 2484 2563 2562 + 2562 2563 2564 + 2564 2565 2562 + 2566 2562 2565 + 2567 2562 2566 + 2563 2484 2483 + 2483 2493 2563 + 2564 2563 2493 + 2493 2568 2564 + 2513 2564 2568 + 2564 2513 2565 + 2513 2569 2565 + 2565 2569 2570 + 2570 2571 2565 + 2565 2571 2566 + 2492 2568 2493 + 2492 2508 2568 + 2568 2508 2513 + 2569 2513 2512 + 2512 2572 2569 + 2569 2572 2573 + 2573 2570 2569 + 2574 2570 2573 + 2570 2574 2575 + 2575 2571 2570 + 2571 2575 2576 + 2576 2566 2571 + 2577 2572 2512 + 2572 2577 2578 + 2578 2573 2572 + 2579 2573 2578 + 2573 2579 2574 + 2574 2579 2580 + 2580 2581 2574 + 2575 2574 2581 + 2581 2582 2575 + 2576 2575 2582 + 2583 2578 2577 + 2584 2578 2583 + 2578 2584 2579 + 2579 2584 2585 + 2585 2580 2579 + 2577 2586 2583 + 2539 2583 2586 + 2587 2583 2539 + 2583 2587 2584 + 2584 2587 2588 + 2588 2585 2584 + 2589 2585 2588 + 2580 2585 2589 + 2586 2590 2539 + 2539 2543 2587 + 2587 2543 2591 + 2591 2588 2587 + 2592 2588 2591 + 2588 2592 2589 + 2589 2592 2593 + 2594 2589 2593 + 2595 2589 2594 + 2589 2595 2580 + 2547 2591 2543 + 2592 2591 2547 + 2547 2593 2592 + 2552 2593 2547 + 2593 2552 2596 + 2596 2597 2593 + 2593 2597 2594 + 2598 2594 2597 + 2594 2598 2599 + 2599 2600 2594 + 2594 2600 2595 + 2596 2552 2601 + 2601 2602 2596 + 2603 2596 2602 + 2596 2603 2604 + 2604 2597 2596 + 2597 2604 2598 + 2552 2551 2601 + 2605 2601 2551 + 2606 2601 2605 + 2601 2606 2607 + 2607 2602 2601 + 2608 2602 2607 + 2602 2608 2603 + 2551 2550 2605 + 2605 2550 2549 + 2549 2609 2605 + 2610 2605 2609 + 2605 2610 2606 + 2606 2610 2611 + 2611 2612 2606 + 2606 2612 2613 + 2607 2606 2613 + 2556 2609 2549 + 2609 2556 142 + 142 2614 2609 + 2609 2614 2610 + 2611 2610 2614 + 2614 2615 2611 + 2616 2611 2615 + 2612 2611 2616 + 2612 2616 2617 + 2617 2613 2612 + 142 2556 2555 + 2555 2618 142 + 2619 2259 2258 + 2259 2619 2253 + 2254 2253 2619 + 2620 2254 2619 + 2621 2254 2620 + 2254 2621 2622 + 2622 2249 2254 + 2249 2622 2243 + 2619 2623 2620 + 2624 2620 2623 + 2620 2624 2625 + 2620 2625 2621 + 2626 2621 2625 + 2622 2621 2626 + 2627 2623 2619 + 2623 2627 2628 + 2628 2629 2623 + 2623 2629 2624 + 2630 2624 2629 + 2625 2624 2630 + 2630 2631 2625 + 2625 2631 2626 + 2619 2265 2627 + 2632 2627 2265 + 2628 2627 2632 + 2632 2633 2628 + 2628 2633 2634 + 2634 2635 2628 + 2629 2628 2635 + 2636 2265 2619 + 2637 2166 2165 + 2166 2637 2638 + 2638 2639 2166 + 2166 2639 2167 + 2640 2167 2639 + 2168 2167 2640 + 2640 2641 2168 + 2168 2641 2169 + 2639 2642 2640 + 2643 2640 2642 + 2641 2640 2643 + 2643 2644 2641 + 2641 2644 2645 + 2645 2169 2641 + 2646 2169 2645 + 2169 2646 2164 + 2647 2642 2639 + 2642 2647 2648 + 2648 2649 2642 + 2642 2649 2643 + 2650 2643 2649 + 2644 2643 2650 + 2650 2651 2644 + 2644 2651 2652 + 2652 2645 2644 + 2653 2648 2647 + 2654 2648 2653 + 2648 2654 2649 + 2649 2654 2650 + 2650 2654 2655 + 2656 2650 2655 + 2651 2650 2656 + 2647 2657 2653 + 2657 2658 2653 + 2659 2653 2658 + 2659 2660 2653 + 2653 2660 2654 + 2661 2657 2647 + 2662 2657 2661 + 2657 2662 2663 + 2663 2658 2657 + 2663 2664 2658 + 2658 2664 2659 + 2659 2664 16 + 2647 2638 2661 + 2176 2661 2638 + 2665 2661 2176 + 2661 2665 2662 + 2666 2638 2647 + 2638 2667 2176 + 2176 2180 2665 + 2665 2180 2668 + 2668 2669 2665 + 2662 2665 2669 + 2669 2670 2662 + 2662 2670 2671 + 2663 2662 2671 + 2672 2663 2671 + 2671 2673 2672 + 2184 2668 2180 + 2674 2668 2184 + 2668 2674 2675 + 2675 2669 2668 + 2669 2675 2676 + 2676 2670 2669 + 2670 2676 2677 + 2677 2671 2670 + 2184 2188 2674 + 2674 2188 2678 + 2678 2679 2674 + 2675 2674 2679 + 2679 2680 2675 + 2676 2675 2680 + 2680 2681 2676 + 2677 2676 2681 + 2192 2678 2188 + 2682 2678 2192 + 2678 2682 2683 + 2683 2679 2678 + 2679 2683 2684 + 2684 2680 2679 + 2680 2684 2685 + 2685 2681 2680 + 2192 2197 2682 + 2682 2197 2686 + 2686 2687 2682 + 2683 2682 2687 + 2687 2688 2683 + 2683 2688 2689 + 2684 2683 2689 + 2689 2690 2684 + 2685 2684 2690 + 2691 2686 2197 + 2692 2686 2691 + 2686 2692 2693 + 2693 2687 2686 + 2693 2688 2687 + 2688 2693 2694 + 2694 2689 2688 + 2197 2196 2691 + 2202 2691 2196 + 2695 2691 2202 + 2691 2695 2692 + 2692 2695 2696 + 2696 2697 2692 + 2692 2697 2694 + 2694 2693 2692 + 2202 2698 2695 + 2695 2698 2699 + 2699 2696 2695 + 2700 2696 2699 + 2696 2700 2701 + 2698 2202 2201 + 2201 2702 2698 + 2698 2702 2703 + 2703 2699 2698 + 2704 2699 2703 + 2699 2704 2700 + 2700 2704 2705 + 2705 2706 2700 + 2701 2700 2706 + 2702 2201 2206 + 2206 2707 2702 + 2702 2707 2708 + 2708 2703 2702 + 2709 2703 2708 + 2703 2709 2704 + 2704 2709 2710 + 2710 2705 2704 + 2707 2206 2210 + 2210 2711 2707 + 2707 2711 2712 + 2712 2708 2707 + 2713 2708 2712 + 2708 2713 2709 + 2709 2713 2714 + 2714 2710 2709 + 2711 2210 2214 + 2214 2715 2711 + 2711 2715 2716 + 2716 2712 2711 + 2717 2712 2716 + 2712 2717 2713 + 2713 2717 2718 + 2718 2714 2713 + 2715 2214 2218 + 2218 2719 2715 + 2715 2719 2720 + 2720 2716 2715 + 2721 2716 2720 + 2716 2721 2717 + 2717 2721 2722 + 2722 2718 2717 + 2719 2218 2723 + 2723 2724 2719 + 2719 2724 2725 + 2725 2720 2719 + 2726 2720 2725 + 2720 2726 2721 + 2721 2726 2727 + 2727 2722 2721 + 2723 2218 2223 + 2728 2723 2223 + 2729 2723 2728 + 2729 2724 2723 + 2724 2729 2730 + 2730 2725 2724 + 2730 2731 2725 + 2725 2731 2726 + 2726 2731 2732 + 2223 2733 2728 + 2734 2728 2733 + 2734 2735 2728 + 2728 2735 2729 + 2729 2735 2736 + 2736 2730 2729 + 2737 2730 2736 + 2738 2733 2223 + 2738 2739 2733 + 2733 2739 2734 + 2740 2734 2739 + 2735 2734 2740 + 2740 2741 2735 + 2735 2741 2736 + 2223 2234 2738 + 2742 2738 2234 + 2739 2738 2742 + 2742 2743 2739 + 2739 2743 2740 + 2743 2744 2740 + 2744 2745 2740 + 2746 2740 2745 + 2746 2741 2740 + 2234 2747 2742 + 2748 2742 2747 + 2742 2748 2749 + 2749 2743 2742 + 2743 2749 2750 + 2750 2744 2743 + 2233 2747 2234 + 2751 2747 2233 + 2747 2751 2748 + 2752 2748 2751 + 2749 2748 2752 + 2752 2753 2749 + 2749 2753 2754 + 2754 2750 2749 + 2755 2750 2754 + 2744 2750 2755 + 2233 2239 2751 + 2751 2239 2238 + 2238 2756 2751 + 2751 2756 2752 + 2757 2752 2756 + 2752 2757 2758 + 2758 2753 2752 + 2753 2758 2759 + 2759 2754 2753 + 2760 2756 2238 + 2756 2760 2757 + 2757 2760 2761 + 2761 2762 2757 + 2758 2757 2762 + 2762 2763 2758 + 2758 2763 2764 + 2764 2759 2758 + 2238 2765 2760 + 2760 2765 2766 + 2766 2761 2760 + 2761 2766 2626 + 2626 2767 2761 + 2761 2767 2768 + 2768 2762 2761 + 2763 2762 2768 + 2765 2238 2237 + 2237 2243 2765 + 2765 2243 2622 + 2622 2766 2765 + 2626 2766 2622 + 2727 2726 2769 + 2767 2626 2631 + 2631 2770 2767 + 2767 2770 2771 + 2771 2768 2767 + 2772 2768 2771 + 2768 2772 2763 + 2763 2772 2773 + 2773 2764 2763 + 2770 2631 2630 + 2630 2774 2770 + 2770 2774 2775 + 2775 2771 2770 + 2776 2771 2775 + 2771 2776 2772 + 2772 2776 2777 + 2777 2773 2772 + 2774 2630 2778 + 2778 2779 2774 + 2774 2779 2780 + 2780 2775 2774 + 2781 2775 2780 + 2775 2781 2776 + 2776 2781 2782 + 2782 2777 2776 + 2778 2630 2629 + 2629 2783 2778 + 2784 2778 2783 + 2784 2779 2778 + 2779 2784 2785 + 2785 2780 2779 + 2786 2780 2785 + 2780 2786 2781 + 2781 2786 2787 + 2787 2782 2781 + 2635 2783 2629 + 2788 2783 2635 + 2783 2788 2784 + 2784 2788 2789 + 2789 2790 2784 + 2790 2791 2784 + 2791 2785 2784 + 2792 2785 2791 + 2785 2792 2786 + 2635 2793 2788 + 2788 2793 2794 + 2794 2789 2788 + 2795 2789 2794 + 2789 2795 2796 + 2796 2790 2789 + 2793 2635 2634 + 2634 2797 2793 + 2794 2793 2797 + 2797 2798 2794 + 2799 2794 2798 + 2794 2799 2795 + 2800 2797 2634 + 2797 2800 2801 + 2801 2798 2797 + 2801 2802 2798 + 2798 2802 2799 + 2799 2802 2803 + 2803 2804 2799 + 2795 2799 2804 + 2634 2805 2800 + 2800 2805 2806 + 2806 2807 2800 + 2801 2800 2807 + 2808 2801 2807 + 2802 2801 2808 + 2808 2809 2802 + 2802 2809 2803 + 2805 2634 2810 + 2810 2811 2805 + 2805 2811 2812 + 2812 2806 2805 + 2813 2806 2812 + 2813 2807 2806 + 2633 2810 2634 + 2814 2810 2633 + 2814 2811 2810 + 2811 2814 2815 + 2815 2812 2811 + 2812 2815 2816 + 2816 2817 2812 + 2812 2817 2813 + 2633 2818 2814 + 2814 2818 2819 + 2819 2815 2814 + 2816 2815 2819 + 2819 2820 2816 + 2816 2820 2821 + 2821 2822 2816 + 2817 2816 2822 + 2818 2633 2632 + 2632 2823 2818 + 2818 2823 2824 + 2824 2819 2818 + 2820 2819 2824 + 2824 2825 2820 + 2820 2825 2826 + 2826 2821 2820 + 2823 2632 2827 + 2827 2828 2823 + 2823 2828 2829 + 2829 2824 2823 + 2825 2824 2829 + 2829 2830 2825 + 2825 2830 2831 + 2831 2826 2825 + 2265 2827 2632 + 2264 2827 2265 + 2828 2827 2264 + 2264 2832 2828 + 2828 2832 2833 + 2833 2829 2828 + 2829 2833 2834 + 2834 2830 2829 + 2830 2834 2835 + 2835 2831 2830 + 2832 2264 2263 + 2263 2836 2832 + 2832 2836 2837 + 2837 2833 2832 + 2834 2833 2837 + 2837 2838 2834 + 2834 2838 2839 + 2839 2835 2834 + 2262 2836 2263 + 2836 2262 2261 + 2261 2840 2836 + 2836 2840 2837 + 2841 2837 2840 + 2841 2838 2837 + 2838 2841 2842 + 2842 2843 2838 + 2838 2843 2839 + 2844 2840 2261 + 2840 2844 2841 + 2841 2844 2845 + 2842 2841 2845 + 2845 2846 2842 + 2847 2842 2846 + 2847 2843 2842 + 2843 2847 2848 + 2848 2839 2843 + 2261 2272 2844 + 2844 2272 2849 + 2849 2845 2844 + 2845 2849 2850 + 2845 2850 2851 + 2851 2846 2845 + 2852 2846 2851 + 2846 2852 2847 + 2847 2852 2853 + 2853 2848 2847 + 2854 2849 2272 + 2850 2849 2854 + 2854 2287 2850 + 2850 2287 2855 + 2851 2850 2855 + 2856 2851 2855 + 2852 2851 2856 + 2856 2857 2852 + 2852 2857 2853 + 2272 2271 2854 + 2271 2277 2854 + 2282 2854 2277 + 2854 2282 2287 + 2287 2286 2855 + 2286 2858 2855 + 2858 2859 2855 + 2860 2855 2859 + 2860 2861 2855 + 2855 2861 2862 + 2862 2863 2855 + 2855 2863 2856 + 2864 2858 2286 + 2864 2865 2858 + 2858 2865 2866 + 2866 2859 2858 + 2866 2867 2859 + 2859 2867 2860 + 2286 2285 2864 + 2284 2864 2285 + 2865 2864 2284 + 2284 2868 2865 + 2865 2868 2869 + 2869 2866 2865 + 2867 2866 2869 + 2869 2870 2867 + 2860 2867 2870 + 2870 2871 2860 + 2861 2860 2871 + 2295 2868 2284 + 2868 2295 2300 + 2300 2872 2868 + 2868 2872 2869 + 2872 2873 2869 + 2874 2869 2873 + 2869 2874 2875 + 2875 2870 2869 + 2870 2875 2876 + 2876 2871 2870 + 2313 2872 2300 + 2872 2313 2877 + 2877 2873 2872 + 2877 2878 2873 + 2873 2878 2874 + 2879 2874 2878 + 2875 2874 2879 + 2879 2880 2875 + 2875 2880 2881 + 2881 2876 2875 + 2317 2877 2313 + 2878 2877 2317 + 2317 2882 2878 + 2878 2882 2879 + 2882 2883 2879 + 2884 2879 2883 + 2884 2880 2879 + 2880 2884 2885 + 2885 2881 2880 + 2886 2882 2317 + 2882 2886 2887 + 2887 2883 2882 + 2887 2888 2883 + 2883 2888 2884 + 2884 2888 2889 + 2885 2884 2889 + 2886 2317 2321 + 2321 2890 2886 + 2886 2890 2891 + 2887 2886 2891 + 2891 2892 2887 + 2888 2887 2892 + 2892 2889 2888 + 2890 2321 2320 + 2320 2331 2890 + 2890 2331 2893 + 2893 2891 2890 + 2891 2893 2894 + 2894 2895 2891 + 2891 2895 2896 + 2896 2892 2891 + 2892 2896 2897 + 2897 2889 2892 + 2898 2893 2331 + 2894 2893 2898 + 2898 2899 2894 + 2894 2899 2900 + 2900 2901 2894 + 2895 2894 2901 + 2331 2330 2898 + 2336 2898 2330 + 2898 2336 2902 + 2902 2899 2898 + 2899 2902 2903 + 2903 2900 2899 + 2900 2903 2904 + 2904 2905 2900 + 2900 2905 2906 + 2906 2901 2900 + 2902 2336 2335 + 2335 2907 2902 + 2902 2907 2908 + 2908 2903 2902 + 2904 2903 2908 + 2908 2909 2904 + 2910 2904 2909 + 2905 2904 2910 + 2910 2911 2905 + 2906 2905 2911 + 2907 2335 2340 + 2340 2912 2907 + 2907 2912 2913 + 2913 2908 2907 + 2908 2913 2914 + 2914 2909 2908 + 2909 2914 2915 + 2915 2916 2909 + 2909 2916 2910 + 2912 2340 2917 + 2917 2918 2912 + 2913 2912 2918 + 2918 2919 2913 + 2914 2913 2919 + 2919 2920 2914 + 2914 2920 2921 + 2921 2915 2914 + 2345 2917 2340 + 2922 2917 2345 + 2917 2922 2923 + 2923 2918 2917 + 2918 2923 2924 + 2924 2919 2918 + 2924 2920 2919 + 2920 2924 2925 + 2925 2921 2920 + 2345 2926 2922 + 2927 2922 2926 + 2923 2922 2927 + 2927 2928 2923 + 2924 2923 2928 + 2928 2925 2924 + 2929 2925 2928 + 2925 2929 2930 + 2930 2921 2925 + 2344 2926 2345 + 2926 2344 2931 + 2931 2932 2926 + 2926 2932 2927 + 2933 2927 2932 + 2927 2933 2934 + 2934 2928 2927 + 2928 2934 2929 + 2352 2931 2344 + 2935 2931 2352 + 2931 2935 2936 + 2936 2932 2931 + 2932 2936 2933 + 2933 2936 2937 + 2938 2933 2937 + 2934 2933 2938 + 2938 2939 2934 + 2929 2934 2939 + 2352 2940 2935 + 2935 2940 2941 + 2941 2942 2935 + 2936 2935 2942 + 2942 2937 2936 + 2943 2940 2352 + 2940 2943 2944 + 2944 2941 2940 + 2945 2941 2944 + 2941 2945 2946 + 2946 2942 2941 + 2942 2946 2947 + 2947 2937 2942 + 2352 2351 2943 + 2943 2351 2948 + 2948 2949 2943 + 2943 2949 2950 + 2950 2944 2943 + 2945 2944 2950 + 2950 2951 2945 + 2945 2951 2952 + 2952 2946 2945 + 2947 2946 2952 + 2357 2948 2351 + 2953 2948 2357 + 2949 2948 2953 + 2953 2954 2949 + 2949 2954 2955 + 2955 2956 2949 + 2949 2956 2950 + 2957 2950 2956 + 2951 2950 2957 + 2357 2958 2953 + 2959 2953 2958 + 2954 2953 2959 + 2959 2960 2954 + 2955 2954 2960 + 2960 2961 2955 + 2962 2955 2961 + 2955 2962 2956 + 2956 2962 2957 + 2363 2958 2357 + 2958 2363 2963 + 2963 2964 2958 + 2958 2964 2959 + 2965 2959 2964 + 2959 2965 2966 + 2966 2960 2959 + 2960 2966 2967 + 2967 2961 2960 + 2963 2363 2362 + 2362 2968 2963 + 2969 2963 2968 + 2963 2969 2970 + 2970 2964 2963 + 2964 2970 2965 + 2965 2970 2971 + 2971 2972 2965 + 2966 2965 2972 + 2973 2968 2362 + 2974 2968 2973 + 2968 2974 2969 + 2969 2974 2975 + 2975 2976 2969 + 2970 2969 2976 + 2976 2971 2970 + 2362 2361 2973 + 2408 2973 2361 + 2977 2973 2408 + 2973 2977 2974 + 2974 2977 2978 + 2978 2975 2974 + 2979 2975 2978 + 2975 2979 2980 + 2980 2976 2975 + 2976 2980 2981 + 2981 2971 2976 + 2408 2413 2977 + 2978 2977 2413 + 2413 2982 2978 + 2983 2978 2982 + 2978 2983 2979 + 2979 2983 2984 + 2984 2985 2979 + 2979 2985 2986 + 2986 2980 2979 + 2981 2980 2986 + 2987 2982 2413 + 2988 2982 2987 + 2982 2988 2983 + 2983 2988 2989 + 2989 2984 2983 + 2990 2984 2989 + 2984 2990 2991 + 2991 2985 2984 + 2413 2412 2987 + 2987 2412 2992 + 2993 2987 2992 + 2664 2663 2994 + 2663 2995 2994 + 1714 2996 1715 + 2996 1714 2997 + 2997 2989 2996 + 2996 2989 2988 + 2988 134 2996 + 2998 2996 134 + 2997 1714 1721 + 1721 2999 2997 + 2997 2999 3000 + 3000 2990 2997 + 2989 2997 2990 + 1727 2999 1721 + 2999 1727 3001 + 3001 3000 2999 + 3002 3000 3001 + 3000 3002 2991 + 2991 2990 3000 + 13 3001 1727 + 3002 3001 13 + 13 3003 3002 + 1727 3004 13 + 3004 3005 13 + 3006 13 3005 + 3005 3007 3006 + 1726 3004 1727 + 2153 3004 1726 + 3004 2153 3008 + 3008 3005 3004 + 3005 3008 3009 + 3009 3007 3005 + 3007 3009 3010 + 3010 3011 3007 + 3012 3007 3011 + 2164 3008 2153 + 3009 3008 2164 + 2164 2646 3009 + 3009 2646 3013 + 3013 3010 3009 + 3014 3010 3013 + 3011 3010 3014 + 3014 3015 3011 + 3011 3015 3016 + 3016 3017 3011 + 3011 3017 3018 + 2645 3013 2646 + 3013 2645 2652 + 2652 3019 3013 + 3013 3019 3014 + 3014 3019 3020 + 3020 3021 3014 + 3015 3014 3021 + 3021 3022 3015 + 3015 3022 3023 + 3016 3015 3023 + 3019 2652 3024 + 3024 3020 3019 + 3025 3020 3024 + 3020 3025 3026 + 3026 3021 3020 + 3021 3026 3027 + 3027 3022 3021 + 3022 3027 3028 + 3028 3023 3022 + 3024 2652 2651 + 2651 3029 3024 + 3030 3024 3029 + 3029 3031 3030 + 3030 3031 3032 + 2656 3029 2651 + 3029 2656 3033 + 3033 3031 3029 + 3031 3033 3034 + 3034 3032 3031 + 3033 2656 3035 + 3035 3036 3033 + 3034 3033 3036 + 3036 3037 3034 + 3038 3034 3037 + 3032 3034 3038 + 3039 3036 3035 + 3036 3039 3040 + 3040 3037 3036 + 3040 3041 3037 + 3037 3041 3038 + 3042 3040 3039 + 3041 3040 3042 + 3042 3043 3041 + 3038 3041 3043 + 3043 3044 3038 + 3044 3045 3038 + 3046 3038 3045 + 3038 3046 3032 + 3039 3047 3042 + 3047 3048 3042 + 3049 3042 3048 + 3049 3043 3042 + 3043 3049 3050 + 3050 3044 3043 + 3050 3051 3044 + 3044 3051 3052 + 3052 3045 3044 + 3053 3048 3047 + 3048 3053 3054 + 3054 3053 3055 + 3055 3056 3054 + 3047 3057 3053 + 3053 3057 3058 + 3055 3053 3058 + 3058 3059 3055 + 3060 3055 3059 + 3055 3060 3061 + 3061 3056 3055 + 3057 3047 3062 + 3057 3062 3063 + 3063 3058 3057 + 3064 3058 3063 + 3058 3064 3065 + 3065 3059 3058 + 3066 3059 3065 + 3059 3066 3060 + 3062 3047 3067 + 3067 3068 3062 + 3062 3068 2659 + 3063 3062 2659 + 3069 3063 2659 + 3070 3068 3067 + 3068 3070 2660 + 2660 2659 3068 + 2660 3070 3071 + 3052 3051 3072 + 3028 3027 3073 + 3024 3074 3025 + 3064 3063 3075 + 3075 3076 3064 + 3064 3076 3077 + 3077 3065 3064 + 3078 3065 3077 + 3065 3078 3066 + 3066 3078 3079 + 3079 3080 3066 + 3060 3066 3080 + 3080 3081 3060 + 3061 3060 3081 + 3077 3082 3078 + 3078 3082 3083 + 3079 3078 3083 + 3083 3084 3079 + 3085 3079 3084 + 3079 3085 3086 + 3086 3080 3079 + 3082 3077 2673 + 3082 2673 2671 + 2671 3083 3082 + 2677 3083 2671 + 3083 2677 3087 + 3087 3084 3083 + 3088 3084 3087 + 3084 3088 3085 + 2673 3077 15 + 15 3089 2673 + 2681 3087 2677 + 3090 3087 2681 + 3087 3090 3088 + 3088 3090 3091 + 3091 3092 3088 + 3085 3088 3092 + 3092 3093 3085 + 3086 3085 3093 + 2681 2685 3090 + 3090 2685 3094 + 3094 3091 3090 + 3095 3091 3094 + 3091 3095 3096 + 3096 3092 3091 + 3092 3096 3097 + 3097 3093 3092 + 2690 3094 2685 + 3098 3094 2690 + 3094 3098 3095 + 3095 3098 3099 + 3099 3100 3095 + 3096 3095 3100 + 3100 3101 3096 + 3097 3096 3101 + 2690 3102 3098 + 3098 3102 3103 + 3103 3099 3098 + 3104 3099 3103 + 3099 3104 3105 + 3105 3100 3099 + 3100 3105 3106 + 3106 3101 3100 + 3102 2690 2689 + 2689 3107 3102 + 3103 3102 3107 + 3107 3108 3103 + 3109 3103 3108 + 3103 3109 3104 + 3104 3109 3110 + 3110 3111 3104 + 3105 3104 3111 + 3107 2689 2694 + 3107 2694 3112 + 3112 3108 3107 + 3113 3108 3112 + 3108 3113 3109 + 3109 3113 3114 + 3114 3110 3109 + 3115 3110 3114 + 3110 3115 3116 + 3116 3111 3110 + 2697 3112 2694 + 3112 2697 2701 + 3117 3112 2701 + 3112 3117 3118 + 3117 2701 3119 + 3119 3120 3117 + 3113 3117 3120 + 3120 3114 3113 + 3121 3114 3120 + 3114 3121 3115 + 3115 3121 3122 + 3122 3123 3115 + 3116 3115 3123 + 2706 3119 2701 + 3124 3119 2706 + 3119 3124 3125 + 3125 3120 3119 + 3120 3125 3121 + 3121 3125 3126 + 3126 3122 3121 + 3126 3127 3122 + 3122 3127 3128 + 3128 3123 3122 + 2706 3129 3124 + 3124 3129 3130 + 3130 3131 3124 + 3124 3131 3126 + 3126 3125 3124 + 3129 2706 2705 + 2705 3132 3129 + 3130 3129 3132 + 3132 3133 3130 + 3134 3130 3133 + 3130 3134 3135 + 3135 3131 3130 + 3132 2705 2710 + 2710 3136 3132 + 3132 3136 3137 + 3137 3133 3132 + 3138 3133 3137 + 3133 3138 3134 + 3139 3134 3138 + 3135 3134 3139 + 3136 2710 2714 + 2714 3140 3136 + 3137 3136 3140 + 3140 3141 3137 + 3142 3137 3141 + 3137 3142 3138 + 3138 3142 3143 + 3143 3144 3138 + 3138 3144 3139 + 3140 2714 2718 + 2718 3145 3140 + 3140 3145 3146 + 3146 3141 3140 + 3147 3141 3146 + 3141 3147 3142 + 3143 3142 3147 + 3145 2718 2722 + 2722 3148 3145 + 3146 3145 3148 + 3148 3149 3146 + 3150 3146 3149 + 3146 3150 3147 + 3147 3150 3151 + 3151 3152 3147 + 3147 3152 3143 + 3148 2722 2727 + 2727 3153 3148 + 3148 3153 3154 + 3154 3149 3148 + 3155 3149 3154 + 3149 3155 3150 + 3151 3150 3155 + 3153 2727 115 + 115 3156 3153 + 3154 3153 3156 + 3156 3157 3154 + 3158 3154 3157 + 3154 3158 3155 + 115 2727 3159 + 3160 3026 3025 + 3027 3026 3160 + 3160 3161 3027 + 2987 134 2988 + 134 2987 3162 + 3162 1707 134 + 3163 1305 1304 + 3164 1305 3163 + 3164 3165 1305 + 3166 3165 3164 + 3167 3166 3164 + 3163 3168 3164 + 3169 3164 3168 + 3170 3169 3168 + 3168 3171 3170 + 3172 3170 3171 + 3171 3173 3172 + 3174 3168 3163 + 3168 3174 3175 + 3175 3171 3168 + 3173 3171 3175 + 3173 3175 1703 + 1703 150 3173 + 1703 3175 3174 + 150 1703 1702 + 150 1702 3176 + 3176 3177 150 + 150 3177 1293 + 1293 3172 150 + 1299 3172 1293 + 1701 3176 1702 + 138 3176 1701 + 1701 3178 138 + 3179 3178 1701 + 3177 2423 1293 + 2423 3177 3180 + 3181 2423 3180 + 3177 3176 3180 + 1272 1271 3182 + 3182 1271 3183 + 3183 3184 3182 + 3185 3182 3184 + 3182 3185 2460 + 3186 3182 2460 + 3182 3186 3187 + 1277 3183 1271 + 2451 3183 1277 + 3183 2451 3184 + 3184 2451 2450 + 2450 3188 3184 + 3184 3188 3185 + 2448 3185 3188 + 2448 2460 3185 + 2449 3188 2450 + 3188 2449 2448 + 3186 2460 2459 + 2459 3189 3186 + 1272 3186 3189 + 3189 1273 1272 + 3190 1273 3189 + 1273 3190 1265 + 3191 3189 2459 + 3189 3191 3190 + 3190 3191 3192 + 3192 3193 3190 + 1265 3190 3193 + 3194 1265 3193 + 1254 1265 3194 + 3194 1255 1254 + 2459 2458 3191 + 3192 3191 2458 + 2458 2469 3192 + 2474 3192 2469 + 3193 3192 2474 + 3193 2474 2473 + 2473 3195 3193 + 3193 3195 3194 + 3196 3194 3195 + 1255 3194 3196 + 3196 1256 1255 + 1256 3196 3197 + 3197 3198 1256 + 1256 3198 1248 + 3199 3195 2473 + 3195 3200 3196 + 3196 3200 2567 + 2567 3197 3196 + 2566 3197 2567 + 3198 3197 2566 + 2566 2576 3198 + 3198 2576 3201 + 3201 1248 3198 + 1248 3201 1243 + 1243 3201 2582 + 2582 1244 1243 + 3202 1244 2582 + 1244 3202 1236 + 2582 3201 2576 + 2582 2581 3202 + 3202 2581 2580 + 2580 2595 3202 + 1236 3202 2595 + 2595 2600 1236 + 1231 1236 2600 + 2600 2599 1231 + 1231 2599 1224 + 1225 1224 2599 + 2599 2598 1225 + 1226 1225 2598 + 2598 2604 1226 + 3203 1226 2604 + 1219 1226 3203 + 1219 3203 3204 + 3204 1220 1219 + 1220 3204 3205 + 1220 3205 1221 + 2604 2603 3203 + 3204 3203 2603 + 2603 2608 3204 + 3205 3204 2608 + 2608 3206 3205 + 1221 3205 3206 + 3206 3207 1221 + 3208 1221 3207 + 1221 3208 1213 + 1213 3208 3209 + 3209 1214 1213 + 2607 3206 2608 + 3206 2607 3210 + 3210 3207 3206 + 3207 3210 3211 + 3211 3212 3207 + 3207 3212 3208 + 3209 3208 3212 + 2613 3210 2607 + 3211 3210 2613 + 2613 3213 3211 + 3211 3213 3214 + 3214 3215 3211 + 3212 3211 3215 + 3215 3216 3212 + 3212 3216 3209 + 3213 2613 2617 + 2617 3217 3213 + 3213 3217 3218 + 3218 3214 3213 + 3219 3214 3218 + 3214 3219 3220 + 3220 3215 3214 + 3216 3215 3220 + 3217 2617 3221 + 3221 3222 3217 + 3218 3217 3222 + 3222 3223 3218 + 3224 3218 3223 + 3218 3224 3219 + 3225 3221 2617 + 3226 3221 3225 + 3221 3226 3227 + 3227 3222 3221 + 3222 3227 3228 + 3228 3223 3222 + 2617 2616 3225 + 2615 3225 2616 + 3229 3225 2615 + 3225 3229 3226 + 3226 3229 2097 + 3230 3226 2097 + 3227 3226 3230 + 3230 3231 3227 + 3228 3227 3231 + 2615 3232 3229 + 3229 3232 3233 + 3233 2097 3229 + 3232 2615 2614 + 2614 142 3232 + 3233 3232 142 + 2097 2101 3230 + 3234 3230 2101 + 3231 3230 3234 + 3234 3235 3231 + 3231 3235 3236 + 3236 3237 3231 + 3231 3237 3228 + 3238 3228 3237 + 3223 3228 3238 + 2101 2100 3234 + 3239 3234 2100 + 3235 3234 3239 + 3239 3240 3235 + 3235 3240 3241 + 3235 3241 3236 + 3241 3242 3236 + 3243 3236 3242 + 3236 3243 3244 + 3244 3237 3236 + 3237 3244 3238 + 3245 3238 3244 + 3246 3238 3245 + 3238 3246 3223 + 3241 3247 3242 + 3247 3248 3242 + 3242 3248 3249 + 3242 3249 3243 + 3243 3249 3250 + 3250 3251 3243 + 3251 3252 3243 + 3244 3243 3252 + 3252 3253 3244 + 3244 3253 3245 + 3254 3245 3253 + 3255 3245 3254 + 3245 3255 3246 + 3251 3256 3252 + 3256 3257 3252 + 3252 3257 3258 + 3258 3253 3252 + 3253 3258 3254 + 3259 3254 3258 + 3260 3254 3259 + 3254 3260 3255 + 3257 3256 3261 + 3223 3246 3224 + 3262 3224 3246 + 3219 3224 3262 + 3262 3263 3219 + 3219 3263 3264 + 3220 3219 3264 + 3246 3255 3262 + 3265 3262 3255 + 3263 3262 3265 + 3263 3265 3266 + 3266 3264 3263 + 3255 3260 3265 + 3266 3265 3260 + 3260 3267 3266 + 3268 3266 3267 + 3264 3266 3268 + 3268 3269 3264 + 3264 3269 3270 + 3270 3271 3264 + 3264 3271 3220 + 3259 3267 3260 + 3267 3259 3272 + 3272 3273 3267 + 3267 3273 3268 + 3268 3273 3274 + 3274 3275 3268 + 3269 3268 3275 + 3272 3259 3276 + 3276 3277 3272 + 3272 3277 3278 + 3279 3272 3278 + 3273 3272 3279 + 3279 3274 3273 + 3258 3276 3259 + 3280 3276 3258 + 3277 3276 3280 + 3280 3281 3277 + 3277 3281 3282 + 3282 3278 3277 + 3258 3257 3280 + 3283 3280 3257 + 1102 1101 1109 + 1109 3284 1102 + 1102 3284 3285 + 1103 1102 3285 + 3286 1103 3285 + 3287 1103 3286 + 3287 1097 1103 + 1097 3287 3288 + 3288 1098 1097 + 1092 1098 3288 + 3289 3286 3285 + 3290 3286 3289 + 3290 3291 3286 + 3286 3291 3287 + 3288 3287 3291 + 3285 3292 3289 + 3293 3289 3292 + 3294 3289 3293 + 3289 3294 3290 + 3290 3294 3295 + 3295 3296 3290 + 3291 3290 3296 + 3297 3292 3285 + 3297 3298 3292 + 3292 3298 3293 + 3285 3299 3297 + 3297 3299 3300 + 3300 3301 3297 + 3298 3297 3301 + 3301 3302 3298 + 3293 3298 3302 + 3303 3299 3285 + 3299 3303 3304 + 3304 3305 3299 + 3299 3305 3306 + 3305 3307 3306 + 3308 3307 3305 + 3285 3309 3303 + 3303 3309 3310 + 3310 3311 3303 + 3304 3303 3311 + 3311 3312 3304 + 3313 3304 3312 + 3305 3304 3313 + 3305 3313 3308 + 3309 3285 3314 + 3314 3315 3309 + 3309 3315 3316 + 3316 3310 3309 + 3317 3310 3316 + 3311 3310 3317 + 3311 3317 3318 + 3318 3312 3311 + 3319 3312 3318 + 3312 3319 3313 + 3308 3313 3319 + 3315 3320 3316 + 3320 3321 3316 + 3316 3321 3322 + 3316 3322 3317 + 3317 3322 3323 + 3318 3317 3323 + 3324 3318 3323 + 3319 3318 3324 + 3325 3320 3315 + 3320 3325 3326 + 3326 3327 3320 + 3321 3320 3327 + 3328 3321 3327 + 3322 3321 3328 + 3328 3329 3322 + 3322 3329 3323 + 3326 3325 3330 + 3327 3326 3331 + 1020 1019 3332 + 3332 3333 1020 + 3334 1020 3333 + 1020 3334 3335 + 3335 1021 1020 + 3336 3333 3332 + 3333 3336 3337 + 3337 3338 3333 + 3333 3338 3334 + 3334 3338 3339 + 3339 3340 3334 + 3335 3334 3340 + 3332 1027 3336 + 1027 3341 3336 + 3337 3336 3342 + 3342 3343 3337 + 3344 3337 3343 + 3338 3337 3344 + 3344 3339 3338 + 3339 3344 3345 + 3345 3346 3339 + 3339 3346 3347 + 3347 3340 3339 + 3340 3347 3348 + 3348 3349 3340 + 3340 3349 3335 + 3350 3335 3349 + 1021 3335 3350 + 3346 3345 3351 + 3351 3352 3346 + 3347 3346 3352 + 3353 3347 3352 + 3348 3347 3353 + 3353 3354 3348 + 3348 3354 3355 + 3355 3356 3348 + 3349 3348 3356 + 3357 3352 3351 + 3352 3357 3358 + 3358 3359 3352 + 3352 3359 3353 + 3360 3353 3359 + 3353 3360 3361 + 3361 3354 3353 + 3354 3361 3362 + 3362 3355 3354 + 3363 3358 3357 + 3364 3358 3363 + 3358 3364 3365 + 3365 3359 3358 + 3359 3365 3360 + 3360 3365 3366 + 3366 3367 3360 + 3361 3360 3367 + 3363 3368 3364 + 3369 3364 3368 + 3365 3364 3369 + 3369 3370 3365 + 3371 3370 3369 + 3368 3363 3372 + 3372 3373 3368 + 3368 3373 3374 + 3374 3375 3368 + 3368 3375 3369 + 3376 3369 3375 + 3372 3363 3377 + 3377 3378 3372 + 3379 3372 3378 + 3373 3372 3379 + 3379 3380 3373 + 3373 3380 3381 + 3381 3374 3373 + 3382 3374 3381 + 3375 3374 3382 + 3375 3382 3376 + 3376 3382 3383 + 3384 3376 3383 + 3378 3385 3379 + 3386 3379 3385 + 3380 3379 3386 + 3386 3387 3380 + 3380 3387 3388 + 3388 3389 3380 + 3380 3389 3381 + 3390 3385 3378 + 3391 3385 3390 + 3385 3391 3386 + 3386 3391 3392 + 3392 3393 3386 + 3387 3386 3393 + 3393 3394 3387 + 3387 3394 3395 + 3378 3396 3390 + 3397 3390 3396 + 3398 3390 3397 + 3390 3398 3391 + 3391 3398 3399 + 3399 3392 3391 + 3396 3378 3400 + 3401 3388 3387 + 3381 3383 3382 + 3383 3381 3402 + 3383 3402 3403 + 3403 3404 3383 + 3383 3404 3384 + 3402 3381 3389 + 3389 3405 3402 + 3402 3405 3406 + 3403 3402 3406 + 3406 3407 3403 + 3408 3403 3407 + 3403 3408 3409 + 3409 3404 3403 + 3389 3388 3405 + 3405 3388 3410 + 3410 3406 3405 + 972 533 532 + 3411 533 972 + 3412 3413 3414 + 3414 3415 3412 + 3412 3415 3416 + 3416 3417 3412 + 3418 3417 3416 + 3418 3416 3419 + 3419 3420 3418 + 3418 3420 3421 + 3420 3419 3422 + 3420 3422 3423 + 3422 3424 3423 + 3425 3426 181 + 181 3426 3427 + 3427 3428 181 + 3427 3429 3428 + 3430 3431 3432 + 3430 3432 3433 + 3433 3434 3430 + 3430 3434 3435 + 3436 3430 3435 + 3437 3430 3436 + 3436 3438 3437 + 3437 3438 3439 + 3440 3434 3433 + 3434 3440 3441 + 3441 3435 3434 + 3433 3442 3440 + 3440 3442 3443 + 3443 3444 3440 + 3445 3440 3444 + 3445 3441 3440 + 3443 3442 3446 + 3443 3446 410 + 410 409 3443 + 3447 3443 409 + 409 408 3447 + 3448 3447 408 + 3442 3449 3446 + 3450 3444 3443 + 3444 3450 3451 + 3444 3451 3445 + 3452 3445 3451 + 3452 3453 3445 + 3445 3453 3454 + 3454 3455 3445 + 3456 3455 3454 + 3450 3457 3451 + 3458 3451 3457 + 3451 3458 3452 + 3452 3458 472 + 3459 3452 472 + 3453 3452 3459 + 473 3457 3450 + 3458 3457 473 + 473 472 3458 + 3460 3461 3462 + 3460 3462 3463 + 3463 3464 3460 + 3460 3464 3465 + 3466 3463 3462 + 3467 3463 3466 + 3464 3463 3467 + 3464 3467 3468 + 3468 3469 3464 + 3469 3468 3470 + 3470 3471 3469 + 3472 3466 3462 + 3473 3466 3472 + 3474 3466 3473 + 3466 3474 3467 + 3474 3475 3467 + 3475 3468 3467 + 3470 3468 3475 + 3462 3476 3472 + 3476 3477 3472 + 3472 3477 3478 + 3472 3478 3473 + 3473 3478 3479 + 3480 3473 3479 + 3474 3473 3480 + 3480 3475 3474 + 3481 3475 3480 + 3475 3481 3470 + 3477 3476 3482 + 3483 3477 3482 + 3478 3477 3483 + 3483 3484 3478 + 3478 3484 3479 + 3476 3485 3482 + 3486 3482 3485 + 3482 3486 3487 + 3482 3487 3488 + 3488 3489 3482 + 3482 3489 3483 + 3490 3485 3476 + 3490 3491 3485 + 3485 3491 3486 + 3492 3486 3491 + 3487 3486 3492 + 3492 3493 3487 + 3488 3487 3493 + 3476 3494 3490 + 3490 3494 3495 + 3496 3490 3495 + 3491 3490 3496 + 3496 3497 3491 + 3491 3497 3492 + 3498 3492 3497 + 3492 3498 3493 + 3499 3496 3495 + 3500 3496 3499 + 3496 3500 3497 + 3497 3500 3498 + 3501 3498 3500 + 3493 3498 3501 + 3501 3502 3493 + 3493 3502 3503 + 3503 3504 3493 + 3504 3488 3493 + 3499 3505 3500 + 3500 3505 3501 + 3505 3506 3501 + 3507 3501 3506 + 3501 3507 3502 + 3502 3507 3508 + 3508 3509 3502 + 3502 3509 3503 + 3510 3505 3499 + 3505 3510 3511 + 3511 3506 3505 + 3511 3512 3506 + 3506 3512 3507 + 3508 3507 3512 + 3512 3513 3508 + 3514 3508 3513 + 3508 3514 3509 + 3509 3514 3515 + 3515 3516 3509 + 3509 3516 3503 + 3512 3511 3517 + 3517 3513 3512 + 3517 3308 3513 + 3513 3308 3514 + 3514 3308 3319 + 3515 3514 3319 + 3319 3518 3515 + 3519 3515 3518 + 3515 3519 3516 + 3517 3511 3520 + 3324 3518 3319 + 3521 3518 3324 + 3518 3521 3519 + 3522 3519 3521 + 3516 3519 3522 + 3522 3523 3516 + 3516 3523 3503 + 3521 3324 3524 + 3524 3525 3521 + 3521 3525 3526 + 3526 182 3521 + 182 3522 3521 + 3527 3522 182 + 3522 3527 3523 + 3323 3524 3324 + 3528 3524 3323 + 3528 3525 3524 + 3525 3528 3529 + 3529 3526 3525 + 3526 3529 1157 + 1157 3530 3526 + 182 3526 3530 + 3531 182 3530 + 3323 3532 3528 + 3529 3528 3532 + 3532 3533 3529 + 1157 3529 3533 + 3533 1152 1157 + 1149 1152 3533 + 3534 3532 3323 + 3532 3534 3535 + 3535 3533 3532 + 3533 3535 1149 + 1149 3535 3536 + 3536 3537 1149 + 3538 3537 3536 + 3536 1136 3538 + 3534 3323 3539 + 3539 3540 3534 + 3534 3540 3536 + 3536 3535 3534 + 3541 3539 3323 + 1137 3539 3541 + 1137 3540 3539 + 3540 1137 1136 + 1136 3536 3540 + 3542 3541 3323 + 3543 3541 3542 + 3543 1138 3541 + 3541 1138 1137 + 3544 3542 3323 + 3545 3542 3544 + 3545 3546 3542 + 3542 3546 3543 + 3543 3546 1126 + 1126 1133 3543 + 1138 3543 1133 + 3547 3544 3323 + 3548 3544 3547 + 3548 3549 3544 + 3544 3549 3545 + 3545 3549 3550 + 3550 1127 3545 + 1127 3546 3545 + 3546 1127 1126 + 3329 3547 3323 + 3551 3547 3329 + 3551 3552 3547 + 3547 3552 3548 + 3548 3552 3553 + 3548 3553 3554 + 3549 3548 3554 + 3554 3550 3549 + 3550 3554 3555 + 3329 3556 3551 + 3551 3556 3557 + 3552 3551 3557 + 3557 3553 3552 + 3558 3553 3557 + 3553 3558 1425 + 1425 3554 3553 + 3328 3556 3329 + 3556 3328 3327 + 3327 3559 3556 + 3556 3559 3557 + 3558 3557 3559 + 3559 3560 3558 + 3561 3559 3327 + 3530 1157 1156 + 1156 3562 3530 + 3530 3562 3563 + 3563 3564 3530 + 3565 3564 3563 + 1161 3562 1156 + 3562 1161 3566 + 3566 3563 3562 + 3563 3566 3567 + 3567 3568 3563 + 3563 3568 3565 + 3565 3568 3569 + 3569 3570 3565 + 3571 3570 3569 + 1165 3566 1161 + 3567 3566 1165 + 1165 1169 3567 + 3567 1169 3572 + 3572 3573 3567 + 3568 3567 3573 + 3573 3569 3568 + 3569 3573 3574 + 3574 3575 3569 + 3569 3575 3571 + 1174 3572 1169 + 3576 3572 1174 + 3572 3576 3574 + 3574 3573 3572 + 3576 1174 1173 + 1173 3577 3576 + 3574 3576 3577 + 3577 3578 3574 + 3575 3574 3578 + 3578 3579 3575 + 3575 3579 3580 + 3580 3571 3575 + 3571 3580 3581 + 3582 3571 3581 + 3583 3577 1173 + 3577 3583 3584 + 3584 3578 3577 + 3579 3578 3584 + 3584 3585 3579 + 3579 3585 3586 + 3586 3587 3579 + 3579 3587 3580 + 1173 1188 3583 + 3583 1188 3588 + 3588 3589 3583 + 3584 3583 3589 + 3589 3590 3584 + 3585 3584 3590 + 3590 3591 3585 + 3586 3585 3591 + 3591 3592 3586 + 3593 3592 3591 + 1193 3588 1188 + 3594 3588 1193 + 3594 3589 3588 + 3589 3594 3595 + 3595 3590 3589 + 3591 3590 3595 + 3595 3596 3591 + 3591 3596 3593 + 3597 3593 3596 + 3596 3598 3597 + 3599 3597 3598 + 1193 3600 3594 + 3595 3594 3600 + 3600 3601 3595 + 3596 3595 3601 + 3601 3598 3596 + 3598 3601 3602 + 3602 231 3598 + 3598 231 3599 + 3603 3600 1193 + 3600 3603 3602 + 3602 3601 3600 + 1193 3604 3603 + 3603 3604 3605 + 3605 3606 3603 + 3602 3603 3606 + 3606 3607 3602 + 231 3602 3607 + 3607 3608 231 + 231 3608 3609 + 3604 1193 1192 + 1192 3610 3604 + 3604 3610 3611 + 3611 3605 3604 + 3612 3605 3611 + 3612 3606 3605 + 3606 3612 3613 + 3613 3607 3606 + 3608 3607 3613 + 1191 3610 1192 + 3610 1191 3614 + 3614 3615 3610 + 3610 3615 3611 + 3616 3611 3615 + 3611 3616 3617 + 3617 3618 3611 + 3611 3618 3612 + 3613 3612 3618 + 1197 3614 1191 + 1202 3614 1197 + 3615 3614 1202 + 1202 3619 3615 + 3615 3619 3616 + 3620 3616 3619 + 3617 3616 3620 + 3620 3621 3617 + 3622 3617 3621 + 3618 3617 3622 + 3622 3623 3618 + 3618 3623 3613 + 3619 1202 3624 + 3624 3625 3619 + 3619 3625 3620 + 3626 3620 3625 + 3620 3626 3627 + 3627 3621 3620 + 1201 3624 1202 + 3628 3624 1201 + 3625 3624 3628 + 3628 3629 3625 + 3625 3629 3626 + 3626 3629 3630 + 3630 3631 3626 + 3627 3626 3631 + 1201 3632 3628 + 3628 3632 3633 + 3633 3634 3628 + 3629 3628 3634 + 3634 3635 3629 + 3629 3635 3630 + 3632 1201 1200 + 1200 3636 3632 + 3632 3636 3637 + 3637 3633 3632 + 3638 3633 3637 + 3633 3638 3639 + 3639 3634 3633 + 3635 3634 3639 + 3636 1200 1206 + 1206 3640 3636 + 3637 3636 3640 + 3640 3641 3637 + 3641 3642 3637 + 3638 3637 3642 + 3642 3643 3638 + 3638 3643 3644 + 3644 3639 3638 + 1211 3640 1206 + 3640 1211 3645 + 3645 3641 3640 + 3641 3645 3646 + 3646 3647 3641 + 3641 3647 3648 + 3648 3642 3641 + 3642 3648 3649 + 3649 3643 3642 + 3645 1211 1216 + 1216 3650 3645 + 3646 3645 3650 + 3650 3651 3646 + 3651 3652 3646 + 3652 3647 3646 + 3647 3652 3653 + 3648 3647 3653 + 3649 3648 3653 + 3654 3650 1216 + 3650 3654 3652 + 3652 3655 3650 + 1216 1215 3654 + 3654 1215 3656 + 3656 3657 3654 + 3652 3654 3657 + 3657 3653 3652 + 3653 3657 3658 + 3658 3659 3653 + 3653 3659 3649 + 1215 3660 3656 + 3661 3656 3660 + 3656 3661 3662 + 3656 3662 3658 + 3658 3657 3656 + 1214 3660 1215 + 3660 1214 3209 + 3209 3663 3660 + 3660 3663 3661 + 3661 3663 3664 + 3664 3665 3661 + 3662 3661 3665 + 3665 3666 3662 + 3662 3666 3667 + 3667 3658 3662 + 3659 3658 3667 + 3663 3209 3216 + 3216 3664 3663 + 3220 3664 3216 + 3664 3220 3271 + 3271 3665 3664 + 3665 3271 3270 + 3270 3666 3665 + 3666 3270 3668 + 3668 3667 3666 + 3667 3668 3669 + 3669 3670 3667 + 3667 3670 3659 + 3649 3659 3670 + 3670 3671 3649 + 3643 3649 3671 + 3668 3270 3269 + 3672 3668 3269 + 3669 3668 3672 + 3672 3673 3669 + 3669 3673 3674 + 3674 3675 3669 + 3670 3669 3675 + 3675 3671 3670 + 3269 3676 3672 + 3677 3672 3676 + 3672 3677 3678 + 3678 3673 3672 + 3673 3678 3679 + 3679 3674 3673 + 3275 3676 3269 + 3676 3275 3680 + 3676 3680 3677 + 3681 3677 3680 + 3678 3677 3681 + 3681 3682 3678 + 3679 3678 3682 + 3682 3683 3679 + 3684 3679 3683 + 3674 3679 3684 + 3680 3275 3274 + 3274 3685 3680 + 3680 3685 3681 + 3686 3681 3685 + 3681 3686 3687 + 3687 3682 3681 + 3682 3687 3688 + 3688 3683 3682 + 3689 3685 3274 + 3685 3689 3686 + 3686 3689 3690 + 3690 3691 3686 + 3687 3686 3691 + 3691 3692 3687 + 3687 3692 3693 + 3688 3687 3693 + 3274 3279 3689 + 3689 3279 3694 + 3694 3690 3689 + 3695 3690 3694 + 3690 3695 3696 + 3696 3691 3690 + 3692 3691 3696 + 3697 3694 3279 + 3695 3694 3697 + 3697 3698 3695 + 3698 3699 3695 + 3699 3700 3695 + 3700 3701 3695 + 3278 3697 3279 + 3702 3697 3278 + 3702 3698 3697 + 3698 3702 3703 + 3703 3699 3698 + 3704 3699 3703 + 3699 3704 3705 + 3705 3700 3699 + 3706 3700 3705 + 3700 3706 3701 + 3706 3707 3701 + 3278 3708 3702 + 3708 3703 3702 + 3708 3278 3282 + 3282 3709 3708 + 3708 3709 3710 + 3710 3711 3708 + 3711 3710 3712 + 3709 3282 3713 + 3713 3714 3709 + 3709 3714 3715 + 3716 3713 3282 + 3282 3281 3716 + 3281 3717 3716 + 3717 3281 3280 + 3718 3717 3280 + 3719 3714 3713 + 3705 3720 3706 + 3706 3720 3721 + 3721 3722 3706 + 3707 3706 3722 + 3723 3707 3722 + 3721 3724 3722 + 3722 3724 3723 + 3724 3725 3723 + 3723 3725 3726 + 3723 3726 3692 + 3692 3727 3723 + 3696 3727 3692 + 3726 3725 3438 + 3438 3693 3726 + 3692 3726 3693 + 3693 3438 3436 + 3693 3436 3456 + 3456 3728 3693 + 3693 3728 3688 + 3729 3688 3728 + 3683 3688 3729 + 3729 3730 3683 + 3683 3730 3684 + 3454 3728 3456 + 3728 3454 3729 + 3729 3454 3453 + 3453 3731 3729 + 3730 3729 3731 + 3731 3732 3730 + 3730 3732 3733 + 3733 3684 3730 + 3734 3684 3733 + 3684 3734 3674 + 3459 3731 3453 + 3732 3731 3459 + 3459 3735 3732 + 3732 3735 3736 + 3736 3733 3732 + 3733 3736 3737 + 3733 3737 3734 + 3734 3737 3738 + 3739 3734 3738 + 3674 3734 3739 + 3739 3675 3674 + 3735 3459 3740 + 3740 3741 3735 + 3735 3741 3742 + 3742 3736 3735 + 3737 3736 3742 + 3742 3738 3737 + 3740 3459 472 + 472 3743 3740 + 3744 3740 3743 + 3741 3740 3744 + 3744 3745 3741 + 3741 3745 3746 + 3746 3742 3741 + 3738 3742 3746 + 479 3743 472 + 3747 3743 479 + 3743 3747 3744 + 3744 3747 3748 + 3748 3749 3744 + 3745 3744 3749 + 3749 3750 3745 + 3746 3745 3750 + 479 3751 3747 + 3747 3751 3752 + 3752 3748 3747 + 3753 3748 3752 + 3748 3753 3754 + 3754 3749 3748 + 3750 3749 3754 + 3751 479 3755 + 3755 3756 3751 + 3752 3751 3757 + 3671 3675 3739 + 3739 3644 3671 + 3671 3644 3643 + 3644 3739 3758 + 3758 3639 3644 + 3639 3758 3635 + 3635 3758 3738 + 3738 3630 3635 + 3738 3758 3739 + 3746 3630 3738 + 3630 3746 3759 + 3759 3631 3630 + 3759 3760 3631 + 3631 3760 3627 + 3761 3627 3760 + 3621 3627 3761 + 3750 3759 3746 + 3760 3759 3750 + 3750 3762 3760 + 3760 3762 3761 + 3763 3761 3762 + 3761 3763 3764 + 3764 3765 3761 + 3761 3765 3621 + 3621 3765 3622 + 3754 3762 3750 + 3762 3754 3763 + 3766 3763 3754 + 3764 3763 3766 + 3766 3767 3764 + 3764 3767 3768 + 3768 3769 3764 + 3765 3764 3769 + 3769 3622 3765 + 3622 3769 3770 + 3770 3623 3622 + 3754 3753 3766 + 3771 3766 3753 + 3767 3766 3771 + 3771 3772 3767 + 3767 3772 3773 + 3773 3768 3767 + 3774 3768 3773 + 3768 3774 3770 + 3770 3769 3768 + 3753 3775 3771 + 3771 3775 3776 + 3776 3777 3771 + 3777 3778 3771 + 3772 3771 3778 + 3778 3779 3772 + 3773 3772 3779 + 3779 3780 3773 + 3752 3775 3753 + 3775 3752 3781 + 3781 3776 3775 + 3782 3781 3752 + 3778 3783 3779 + 3779 3783 3784 + 3784 3785 3779 + 3786 3609 3608 + 3608 3787 3786 + 3786 3787 3770 + 3770 3774 3786 + 3774 3788 3786 + 3789 3786 3788 + 3613 3787 3608 + 3787 3613 3623 + 3623 3770 3787 + 3790 3582 3581 + 3527 3790 3581 + 182 3790 3527 + 3581 3791 3527 + 3523 3527 3791 + 3791 3792 3523 + 3523 3792 3503 + 3793 3791 3581 + 3791 3793 3792 + 3792 3793 3794 + 3794 3503 3792 + 3794 3795 3503 + 3503 3795 3796 + 3796 3504 3503 + 3581 3797 3793 + 3797 3794 3793 + 3794 3797 3798 + 3795 3794 3798 + 3796 3795 3798 + 3799 3796 3798 + 3800 3796 3799 + 3796 3800 3504 + 3504 3800 3801 + 3801 3488 3504 + 3798 3797 3581 + 3581 3580 3798 + 3802 3798 3580 + 3798 3802 3799 + 3803 3799 3802 + 3803 3804 3799 + 3799 3804 3800 + 3801 3800 3804 + 3587 3802 3580 + 3587 3586 3802 + 3802 3586 3803 + 3805 3803 3586 + 3804 3806 3801 + 3806 3807 3801 + 3807 3808 3801 + 3489 3801 3808 + 3801 3489 3488 + 3809 3807 3806 + 3807 3809 3810 + 3807 3810 3484 + 3484 3808 3807 + 3483 3808 3484 + 3808 3483 3489 + 3806 3811 3809 + 3812 3809 3811 + 3810 3809 3812 + 3812 3813 3810 + 3810 3813 3479 + 3484 3810 3479 + 3811 3814 3812 + 3814 3815 3812 + 3816 3812 3815 + 3812 3816 3813 + 3813 3816 3817 + 3817 3479 3813 + 3815 3414 3816 + 3817 3816 3414 + 3414 3818 3817 + 3819 3817 3818 + 3817 3819 3479 + 3414 3820 3818 + 3820 3821 3818 + 3822 3823 3824 + 3822 3824 779 + 779 1015 3822 + 3825 3822 1015 + 3826 3822 3825 + 3825 3827 3826 + 3825 1015 671 + 670 3825 671 + 3825 670 3827 + 3827 670 669 + 669 668 3827 + 3828 3827 668 + 3829 3830 3831 + 3831 3830 3832 + 3832 3833 3831 + 3831 3833 3834 + 3834 3835 3831 + 3836 3831 3835 + 3832 3837 3833 + 3833 3837 3838 + 3838 3834 3833 + 3839 3834 3838 + 3834 3839 3840 + 3840 3835 3834 + 3837 3832 3841 + 3841 3842 3837 + 3837 3842 3843 + 3843 3838 3837 + 3844 3838 3843 + 3838 3844 3839 + 3841 3832 3845 + 3846 3847 3848 + 3847 3846 3849 + 3849 3850 3847 + 3847 3850 3851 + 3852 3849 3846 + 3853 3849 3852 + 3850 3849 3853 + 3853 3854 3850 + 3850 3854 3855 + 3855 3856 3850 + 3857 3852 3846 + 3858 3852 3857 + 3859 3852 3858 + 3852 3859 3853 + 3860 3853 3859 + 3854 3853 3860 + 3860 3861 3854 + 196 3854 3861 + 3862 3857 3846 + 3863 3857 3862 + 3857 3863 3864 + 3864 3865 3857 + 3857 3865 3858 + 3858 3865 3866 + 3859 3858 3866 + 3846 3867 3862 + 3868 3862 3867 + 3862 3868 3869 + 3862 3869 3863 + 3870 3863 3869 + 3864 3863 3870 + 3871 3867 3846 + 11 3867 3871 + 3867 11 3868 + 3872 3868 11 + 3869 3868 3872 + 3872 3873 3869 + 3869 3873 3870 + 3846 3874 3871 + 3871 3874 3875 + 3876 3871 3875 + 3877 3871 3876 + 3878 3874 3846 + 3874 3878 3879 + 3879 3875 3874 + 3880 3875 3879 + 3875 3880 3881 + 3881 3882 3875 + 3875 3882 3883 + 3883 3884 3875 + 3884 3876 3875 + 3880 3879 3885 + 3885 3886 3880 + 3880 3886 3887 + 3887 3881 3880 + 3888 3881 3887 + 3881 3888 3882 + 3882 3888 235 + 235 3883 3882 + 3889 3886 3885 + 3886 3889 27 + 27 3887 3886 + 237 3887 27 + 3885 3890 3889 + 3889 3890 3891 + 3891 3892 3889 + 27 3889 3892 + 3893 27 3892 + 3894 27 3893 + 3893 3895 3894 + 3890 3885 125 + 125 3896 3890 + 3891 3890 3896 + 3896 3897 3891 + 3898 3891 3897 + 3898 3892 3891 + 3892 3898 3899 + 3899 3900 3892 + 3892 3900 3893 + 3901 3896 125 + 3896 3901 3902 + 3902 3897 3896 + 3897 3902 3903 + 3903 3904 3897 + 3897 3904 3898 + 3898 3904 3899 + 125 3905 3901 + 3901 3905 3906 + 3906 3907 3901 + 3902 3901 3907 + 3907 3908 3902 + 3903 3902 3908 + 3905 125 3909 + 3909 3910 3905 + 3906 3905 3910 + 3910 3911 3906 + 3912 3906 3911 + 3906 3912 3913 + 3913 3907 3906 + 3909 125 3914 + 3887 3915 3888 + 3861 3916 196 + 3917 3916 3861 + 3918 3916 3917 + 3916 3918 197 + 197 3919 3916 + 3861 3920 3917 + 3917 3920 3921 + 3861 3860 3920 + 3920 3860 3922 + 3922 3923 3920 + 3922 3860 3859 + 3924 3922 3859 + 3925 3922 3924 + 3922 3925 3923 + 3923 3925 3926 + 3926 3927 3923 + 3923 3927 3928 + 3928 3917 3923 + 3859 3929 3924 + 3930 3924 3929 + 3924 3930 3931 + 3931 3932 3924 + 3924 3932 3925 + 3925 3932 3933 + 3933 3926 3925 + 3866 3929 3859 + 3934 3929 3866 + 3929 3934 3930 + 3930 3934 3935 + 3935 3936 3930 + 3931 3930 3936 + 3936 3937 3931 + 3938 3931 3937 + 3932 3931 3938 + 3866 3939 3934 + 3934 3939 3940 + 3940 3941 3934 + 3934 3941 3935 + 3939 3866 3865 + 3865 3864 3939 + 3940 3939 3864 + 3864 3942 3940 + 3943 3940 3942 + 3941 3940 3943 + 3943 3944 3941 + 3941 3944 3945 + 3945 3946 3941 + 3941 3946 3935 + 3870 3942 3864 + 3942 3870 3947 + 3947 3948 3942 + 3942 3948 3943 + 3943 3948 3949 + 3949 3950 3943 + 3944 3943 3950 + 3950 3951 3944 + 3945 3944 3951 + 3947 3870 3873 + 3873 3952 3947 + 3947 3952 3953 + 3953 3954 3947 + 3948 3947 3954 + 3954 3949 3948 + 3955 3949 3954 + 3949 3955 3956 + 3956 3950 3949 + 3952 3873 3872 + 3872 3957 3952 + 3952 3957 3958 + 3958 3953 3952 + 3959 3953 3958 + 3953 3959 3960 + 3960 3954 3953 + 3954 3960 3955 + 3957 3872 3961 + 3961 3962 3957 + 3957 3962 3963 + 3963 3964 3957 + 3964 3965 3957 + 3965 3958 3957 + 11 3961 3872 + 3966 3961 11 + 3966 3962 3961 + 3962 3966 3967 + 3967 3963 3962 + 3876 3963 3967 + 3963 3876 3884 + 3884 3964 3963 + 11 3877 3966 + 3877 3967 3966 + 3876 3967 3877 + 3968 3969 3970 + 3969 3968 3971 + 3971 3972 3969 + 3969 3972 3973 + 3973 3974 3969 + 3974 3975 3969 + 3976 3969 3975 + 3977 3971 3968 + 3978 3971 3977 + 3972 3971 3978 + 3978 3979 3972 + 3972 3979 3980 + 3980 3973 3972 + 3968 3981 3977 + 3982 3977 3981 + 3983 3977 3982 + 3977 3983 3978 + 3984 3978 3983 + 3979 3978 3984 + 3984 3985 3979 + 3980 3979 3985 + 3986 3981 3968 + 3987 3981 3986 + 3981 3987 3982 + 3982 3987 3988 + 3988 3989 3982 + 3983 3982 3989 + 3968 3976 3986 + 3990 3991 3992 + 3990 3992 3993 + 3993 3994 3990 + 3990 3994 3995 + 3995 3996 3990 + 3997 3990 3996 + 3998 3993 3992 + 3999 3993 3998 + 3993 3999 4000 + 4000 3994 3993 + 3994 4000 4001 + 4001 3995 3994 + 3049 3998 3992 + 3048 3998 3049 + 4002 3998 3048 + 3998 4002 3999 + 3999 4002 3056 + 3056 4003 3999 + 4000 3999 4003 + 3992 3050 3049 + 3051 3050 3992 + 3992 3997 3051 + 4004 4005 4006 + 4005 4004 4007 + 4007 4008 4005 + 4009 4005 4008 + 4010 4005 4009 + 4009 3028 4010 + 4009 4011 3028 + 4007 4004 4012 + 4013 4007 4012 + 4014 4007 4013 + 4014 4008 4007 + 4008 4014 4015 + 4015 4016 4008 + 4008 4016 4009 + 4016 4017 4009 + 4017 4018 4009 + 4011 4009 4018 + 4013 4019 4014 + 4015 4014 4019 + 4019 4020 4015 + 4021 4015 4020 + 4015 4021 4022 + 4022 4016 4015 + 4016 4022 4023 + 4023 4017 4016 + 4024 4019 4013 + 4019 4024 4025 + 4025 4020 4019 + 4026 4020 4025 + 4020 4026 4021 + 4021 4026 4027 + 4027 4028 4021 + 4022 4021 4028 + 4013 4029 4024 + 4024 4029 4030 + 4030 4031 4024 + 4024 4031 4032 + 4032 4025 4024 + 4033 4025 4032 + 4025 4033 4026 + 4029 4013 3829 + 3829 3836 4029 + 3836 4030 4029 + 3835 4030 3836 + 4031 4030 3835 + 3835 3840 4031 + 4031 3840 4034 + 4034 4032 4031 + 4035 4032 4034 + 4032 4035 4033 + 4033 4035 4036 + 4036 4037 4033 + 4026 4033 4037 + 4037 4027 4026 + 4038 4034 3840 + 4039 4034 4038 + 4034 4039 4035 + 4035 4039 4040 + 4040 4036 4035 + 4041 4036 4040 + 4036 4041 4042 + 4042 4037 4036 + 3840 3839 4038 + 4043 4038 3839 + 4044 4038 4043 + 4038 4044 4039 + 4039 4044 4045 + 4045 4040 4039 + 4046 4040 4045 + 4040 4046 4041 + 3839 3844 4043 + 4047 4043 3844 + 4048 4043 4047 + 4043 4048 4044 + 4044 4048 4049 + 4049 4045 4044 + 4050 4045 4049 + 4045 4050 4046 + 3844 4051 4047 + 4052 4047 4051 + 4053 4047 4052 + 4047 4053 4048 + 4048 4053 4054 + 4054 4049 4048 + 4055 4049 4054 + 4049 4055 4050 + 3843 4051 3844 + 4051 3843 4056 + 4056 4057 4051 + 4051 4057 4052 + 4052 4057 4058 + 4059 4052 4058 + 4060 4052 4059 + 4052 4060 4053 + 4056 3843 3842 + 3842 4061 4056 + 4062 4056 4061 + 4057 4056 4062 + 4062 4058 4057 + 4062 4063 4058 + 4058 4063 4064 + 4064 4065 4058 + 4058 4065 4059 + 4066 4061 3842 + 4061 4066 4067 + 4067 4068 4061 + 4061 4068 4062 + 4063 4062 4068 + 3842 3841 4066 + 4066 3841 3032 + 3032 3046 4066 + 4066 3046 4069 + 4069 4067 4066 + 4070 4067 4069 + 4067 4070 4071 + 4071 4068 4067 + 4068 4071 4063 + 3032 3841 4072 + 3045 4069 3046 + 4069 3045 3052 + 3052 4073 4069 + 4069 4073 4070 + 4074 4070 4073 + 4071 4070 4074 + 4074 4075 4071 + 4063 4071 4075 + 4075 4076 4063 + 4076 4064 4063 + 4077 4064 4076 + 4064 4077 4065 + 4073 3052 4078 + 4078 4079 4073 + 4073 4079 4074 + 4080 4074 4079 + 4074 4080 4081 + 4081 4075 4074 + 4075 4081 4082 + 4082 4076 4075 + 4078 3052 4083 + 4084 4085 4086 + 4086 4085 4087 + 4087 4088 4086 + 4089 4088 4087 + 4088 4089 4090 + 4090 4091 4088 + 4092 4088 4091 + 4093 4087 4085 + 4094 4087 4093 + 4087 4094 4089 + 4089 4094 4095 + 4095 4096 4089 + 4090 4089 4096 + 4085 4097 4093 + 4098 4093 4097 + 4099 4093 4098 + 4093 4099 4094 + 4094 4099 4100 + 4095 4094 4100 + 4101 4097 4085 + 4097 4101 4102 + 4102 4103 4097 + 4097 4103 4098 + 4104 4098 4103 + 4105 4098 4104 + 4098 4105 4099 + 4085 4106 4101 + 4091 4107 4092 + 4108 4109 4110 + 4110 4109 4111 + 4111 4112 4110 + 4113 4110 4112 + 4114 4110 4113 + 4110 4114 4115 + 4116 4111 4109 + 4117 4111 4116 + 4111 4117 4118 + 4118 4112 4111 + 4112 4118 4119 + 4119 4120 4112 + 4112 4120 4113 + 4109 4121 4116 + 4122 4116 4121 + 4123 4116 4122 + 4116 4123 4117 + 4124 4117 4123 + 4118 4117 4124 + 4124 4125 4118 + 4119 4118 4125 + 4126 4121 4109 + 4109 4127 4126 + 4126 4127 4128 + 4128 4129 4126 + 4130 4126 4129 + 4131 4126 4130 + 3946 4129 4128 + 4129 3946 3945 + 4129 3945 4130 + 3951 4130 3945 + 4132 4130 3951 + 4130 4132 4121 + 4121 4132 4122 + 4128 3935 3946 + 3935 4128 4133 + 3935 4133 4134 + 4134 3936 3935 + 3936 4134 4135 + 4135 3937 3936 + 4133 4128 4136 + 4136 4114 4133 + 4133 4114 4137 + 4137 4134 4133 + 4135 4134 4137 + 4137 4138 4135 + 4139 4135 4138 + 3937 4135 4139 + 4139 4140 3937 + 3937 4140 3938 + 4113 4137 4114 + 4137 4113 4141 + 4141 4138 4137 + 4138 4141 4142 + 4142 4143 4138 + 4138 4143 4139 + 4144 4139 4143 + 4140 4139 4144 + 4141 4113 4120 + 4120 4145 4141 + 4142 4141 4145 + 4145 4146 4142 + 4147 4142 4146 + 4143 4142 4147 + 4147 4148 4143 + 4143 4148 4144 + 4149 4145 4120 + 4145 4149 4150 + 4150 4146 4145 + 4146 4150 4151 + 4151 4152 4146 + 4146 4152 4147 + 4153 4147 4152 + 4148 4147 4153 + 4120 4119 4149 + 4149 4119 4154 + 4154 4155 4149 + 4150 4149 4155 + 4155 4156 4150 + 4151 4150 4156 + 4156 4157 4151 + 4158 4151 4157 + 4152 4151 4158 + 4154 4119 4125 + 4125 4159 4154 + 4160 4154 4159 + 4154 4160 4161 + 4161 4155 4154 + 4155 4161 4162 + 4162 4156 4155 + 4156 4162 4163 + 4163 4157 4156 + 4164 4159 4125 + 4159 4164 4165 + 4159 4165 4160 + 4160 4165 4166 + 4167 4160 4166 + 4161 4160 4167 + 4167 4168 4161 + 4162 4161 4168 + 4125 4169 4164 + 4170 4164 4169 + 4165 4164 4170 + 4170 4166 4165 + 4124 4169 4125 + 4169 4124 4171 + 4171 4172 4169 + 4169 4172 4170 + 4172 4173 4170 + 4174 4170 4173 + 4166 4170 4174 + 4123 4171 4124 + 4175 4171 4123 + 4172 4171 4175 + 4175 4176 4172 + 4172 4176 4177 + 4177 4173 4172 + 4173 4177 4178 + 4178 4179 4173 + 4173 4179 4174 + 4123 4180 4175 + 4181 4175 4180 + 4176 4175 4181 + 4181 4182 4176 + 4177 4176 4182 + 4182 4183 4177 + 4183 4184 4177 + 4178 4177 4184 + 4122 4180 4123 + 4180 4122 4185 + 4185 4186 4180 + 4180 4186 4181 + 4187 4181 4186 + 4182 4181 4187 + 4187 4188 4182 + 4182 4188 4189 + 4189 4183 4182 + 4185 4122 4132 + 4132 4190 4185 + 4191 4185 4190 + 4186 4185 4191 + 4191 4192 4186 + 4186 4192 4187 + 4193 4187 4192 + 4188 4187 4193 + 3951 4190 4132 + 4190 3951 3950 + 3950 3956 4190 + 4190 3956 4191 + 4194 4191 3956 + 4192 4191 4194 + 4194 4195 4192 + 4192 4195 4193 + 4196 4193 4195 + 4197 4193 4196 + 4193 4197 4188 + 4188 4197 4198 + 4198 4189 4188 + 3956 3955 4194 + 4199 4194 3955 + 4195 4194 4199 + 4199 4200 4195 + 4195 4200 4196 + 4201 4196 4200 + 4202 4196 4201 + 4196 4202 4197 + 4197 4202 4203 + 4203 4198 4197 + 3955 3960 4199 + 4204 4199 3960 + 4200 4199 4204 + 4204 4205 4200 + 4200 4205 4201 + 4206 4201 4205 + 4207 4201 4206 + 4201 4207 4202 + 4202 4207 4208 + 4203 4202 4208 + 3960 3959 4204 + 4209 4204 3959 + 4205 4204 4209 + 4209 4210 4205 + 4205 4210 4206 + 4211 4206 4210 + 4212 4206 4211 + 4206 4212 4207 + 4207 4212 4213 + 4213 4208 4207 + 3959 4214 4209 + 4215 4209 4214 + 4210 4209 4215 + 4215 4216 4210 + 4210 4216 4211 + 4217 4211 4216 + 4218 4211 4217 + 4211 4218 4212 + 4213 4212 4218 + 3958 4214 3959 + 4214 3958 3965 + 3965 4219 4214 + 4214 4219 4215 + 4220 4215 4219 + 4216 4215 4220 + 4220 4221 4216 + 4216 4221 4217 + 4219 3965 4222 + 4222 4223 4219 + 4219 4223 4220 + 4224 4220 4223 + 4221 4220 4224 + 4224 4225 4221 + 4221 4225 4226 + 4217 4221 4226 + 4222 3965 3964 + 3964 4227 4222 + 4222 4227 4228 + 4229 4222 4228 + 4223 4222 4229 + 4229 4230 4223 + 4223 4230 4224 + 4231 4224 4230 + 4225 4224 4231 + 3884 4227 3964 + 4227 3884 3883 + 3883 4228 4227 + 235 4228 3883 + 4228 235 4232 + 4232 4233 4228 + 4228 4233 4229 + 4234 4229 4233 + 4230 4229 4234 + 4234 4235 4230 + 4230 4235 4231 + 4231 4235 4236 + 4237 4232 235 + 4238 4239 4240 + 4240 4241 4238 + 4238 4241 4242 + 4242 4243 4238 + 4244 4238 4243 + 4245 4238 4244 + 4244 4246 4245 + 4241 4240 4247 + 4247 4248 4241 + 4241 4248 4249 + 4249 4242 4241 + 4250 4242 4249 + 4242 4250 4251 + 4251 4243 4242 + 4247 4240 4252 + 4252 4253 4247 + 4254 4247 4253 + 4248 4247 4254 + 4254 4255 4248 + 4248 4255 4256 + 4256 4249 4248 + 4257 4252 4240 + 4258 4252 4257 + 4252 4258 4259 + 4259 4253 4252 + 4253 4259 4260 + 4260 4261 4253 + 4253 4261 4254 + 4240 238 4257 + 4262 4263 4246 + 4263 4262 4264 + 4264 4265 4263 + 4263 4265 4266 + 4266 4267 4263 + 4268 4263 4267 + 4267 240 4268 + 4264 4262 4269 + 4269 4270 4264 + 4271 4264 4270 + 4265 4264 4271 + 4271 4272 4265 + 4265 4272 4273 + 4273 4266 4265 + 4274 4269 4262 + 4275 4269 4274 + 4269 4275 4276 + 4276 4270 4269 + 4270 4276 4277 + 4277 4278 4270 + 4270 4278 4271 + 4262 4244 4274 + 4243 4274 4244 + 4279 4274 4243 + 4274 4279 4275 + 4275 4279 4280 + 4280 4281 4275 + 4276 4275 4281 + 4282 4244 4262 + 4243 4251 4279 + 4279 4251 4283 + 4283 4280 4279 + 4284 4280 4283 + 4280 4284 4285 + 4285 4281 4280 + 4281 4285 4286 + 4286 4287 4281 + 4281 4287 4276 + 4277 4276 4287 + 4288 4283 4251 + 4289 4283 4288 + 4283 4289 4284 + 4284 4289 4290 + 4290 4291 4284 + 4285 4284 4291 + 4291 4292 4285 + 4286 4285 4292 + 4251 4250 4288 + 4293 4288 4250 + 4294 4288 4293 + 4288 4294 4289 + 4289 4294 4295 + 4295 4290 4289 + 4296 4290 4295 + 4290 4296 4297 + 4297 4291 4290 + 4250 4298 4293 + 4299 4293 4298 + 4300 4293 4299 + 4293 4300 4294 + 4294 4300 4301 + 4301 4295 4294 + 4302 4295 4301 + 4295 4302 4296 + 4249 4298 4250 + 4298 4249 4256 + 4256 4303 4298 + 4298 4303 4299 + 4304 4299 4303 + 4305 4299 4304 + 4299 4305 4300 + 4300 4305 4306 + 4306 4301 4300 + 4307 4301 4306 + 4301 4307 4302 + 4303 4256 4308 + 4308 4309 4303 + 4303 4309 4304 + 4310 4304 4309 + 4311 4304 4310 + 4304 4311 4305 + 4305 4311 4312 + 4312 4306 4305 + 4308 4256 4255 + 4255 4313 4308 + 4314 4308 4313 + 4309 4308 4314 + 4314 4315 4309 + 4309 4315 4310 + 4316 4310 4315 + 4317 4310 4316 + 4310 4317 4311 + 4318 4313 4255 + 4313 4318 4319 + 4319 4320 4313 + 4313 4320 4314 + 4321 4314 4320 + 4315 4314 4321 + 4321 4322 4315 + 4315 4322 4316 + 4255 4254 4318 + 4318 4254 4261 + 4261 4323 4318 + 4319 4318 4323 + 4323 4324 4319 + 4325 4319 4324 + 4320 4319 4325 + 4325 4326 4320 + 4320 4326 4321 + 4327 4321 4326 + 4322 4321 4327 + 4328 4323 4261 + 4323 4328 4329 + 4329 4324 4323 + 4324 4329 4330 + 4330 4331 4324 + 4324 4331 4325 + 4332 4325 4331 + 4326 4325 4332 + 4261 4260 4328 + 4328 4260 4333 + 4333 4334 4328 + 4329 4328 4334 + 4334 4335 4329 + 4330 4329 4335 + 4335 4336 4330 + 4337 4330 4336 + 4331 4330 4337 + 4338 4333 4260 + 4333 4338 4339 + 4333 4339 4340 + 4340 4334 4333 + 4335 4334 4340 + 4340 4341 4335 + 4335 4341 4342 + 4342 4336 4335 + 4260 4259 4338 + 4343 4338 4259 + 4339 4338 4343 + 4343 4344 4339 + 4340 4339 4344 + 4345 4340 4344 + 4341 4340 4345 + 4259 4258 4343 + 4346 4343 4258 + 4343 4346 4347 + 4347 4344 4343 + 4344 4347 4348 + 4348 4349 4344 + 4344 4349 4350 + 4350 4345 4344 + 4258 4351 4346 + 4352 4346 4351 + 4347 4346 4352 + 4352 4353 4347 + 4348 4347 4353 + 4257 4351 4258 + 4351 4257 240 + 240 4354 4351 + 4351 4354 4352 + 4355 4352 4354 + 4353 4352 4355 + 240 4257 4356 + 4354 240 4267 + 4267 4357 4354 + 4354 4357 4355 + 4355 4357 4358 + 4358 4359 4355 + 4360 4355 4359 + 4355 4360 4353 + 4357 4267 4266 + 4266 4358 4357 + 4358 4266 4273 + 4273 4361 4358 + 4358 4361 4362 + 4362 4359 4358 + 4359 4362 4363 + 4363 4364 4359 + 4359 4364 4360 + 4361 4273 4365 + 4365 4366 4361 + 4361 4366 4367 + 4367 4362 4361 + 4363 4362 4367 + 4367 4368 4363 + 4369 4363 4368 + 4364 4363 4369 + 4365 4273 4272 + 4272 4370 4365 + 4371 4365 4370 + 4366 4365 4371 + 4371 4372 4366 + 4366 4372 4373 + 4373 4367 4366 + 4367 4373 4374 + 4374 4368 4367 + 4375 4370 4272 + 4370 4375 4376 + 4376 4377 4370 + 4370 4377 4371 + 4378 4371 4377 + 4372 4371 4378 + 4272 4271 4375 + 4375 4271 4278 + 4278 4379 4375 + 4376 4375 4379 + 4379 4380 4376 + 4381 4376 4380 + 4377 4376 4381 + 4381 4382 4377 + 4377 4382 4378 + 4383 4379 4278 + 4379 4383 4384 + 4384 4380 4379 + 4380 4384 4385 + 4385 4386 4380 + 4380 4386 4381 + 4387 4381 4386 + 4382 4381 4387 + 4278 4277 4383 + 4383 4277 4388 + 4388 4389 4383 + 4384 4383 4389 + 4389 4390 4384 + 4385 4384 4390 + 4390 4391 4385 + 4392 4385 4391 + 4393 4385 4392 + 4287 4388 4277 + 4394 4388 4287 + 4388 4394 4395 + 4395 4389 4388 + 4389 4395 4396 + 4396 4390 4389 + 4390 4396 4397 + 4397 4391 4390 + 4287 4286 4394 + 4394 4286 4398 + 4398 4399 4394 + 4395 4394 4399 + 4399 4400 4395 + 4396 4395 4400 + 4400 4401 4396 + 4397 4396 4401 + 4292 4398 4286 + 4402 4398 4292 + 4398 4402 4403 + 4403 4399 4398 + 4399 4403 4404 + 4404 4400 4399 + 4400 4404 4405 + 4405 4401 4400 + 4292 4406 4402 + 4407 4402 4406 + 4403 4402 4407 + 4407 4408 4403 + 4404 4403 4408 + 4409 4404 4408 + 4405 4404 4409 + 4406 4292 4291 + 4291 4297 4406 + 4406 4297 4410 + 4410 4411 4406 + 4406 4411 4407 + 4412 4407 4411 + 4407 4412 4408 + 4410 4297 4296 + 4296 4413 4410 + 4414 4410 4413 + 4411 4410 4414 + 4414 4415 4411 + 4411 4415 4412 + 4412 4415 4416 + 4416 4417 4412 + 4417 4418 4412 + 4419 4413 4296 + 4413 4419 4420 + 4420 4421 4413 + 4413 4421 4414 + 4414 4421 4422 + 4422 4423 4414 + 4415 4414 4423 + 4423 4416 4415 + 4296 4302 4419 + 4419 4302 4307 + 4307 4424 4419 + 4420 4419 4424 + 4424 4425 4420 + 4420 4425 4080 + 4080 4426 4420 + 4426 4427 4420 + 4421 4420 4427 + 4428 4424 4307 + 4428 4425 4424 + 4425 4428 4081 + 4081 4080 4425 + 4307 4429 4428 + 4428 4429 4082 + 4082 4081 4428 + 4306 4429 4307 + 4429 4306 4312 + 4312 4082 4429 + 4082 4312 4430 + 4430 4076 4082 + 4076 4430 4077 + 4077 4430 4317 + 4317 4431 4077 + 4065 4077 4431 + 4430 4312 4311 + 4311 4317 4430 + 4431 4059 4065 + 4432 4059 4431 + 4059 4432 4060 + 4060 4432 4433 + 4433 4434 4060 + 4053 4060 4434 + 4434 4054 4053 + 4431 4316 4432 + 4432 4316 4322 + 4322 4433 4432 + 4327 4433 4322 + 4433 4327 4435 + 4435 4434 4433 + 4434 4435 4436 + 4436 4054 4434 + 4054 4436 4055 + 4316 4431 4317 + 4079 4426 4080 + 4437 4426 4079 + 4426 4437 4438 + 4438 4427 4426 + 4438 4439 4427 + 4427 4439 4421 + 4421 4439 4422 + 4079 4078 4437 + 4437 4078 4440 + 4440 4441 4437 + 4437 4441 4442 + 4442 4438 4437 + 4439 4438 4442 + 4442 4422 4439 + 4443 4422 4442 + 4422 4443 4444 + 4444 4423 4422 + 3997 4440 4078 + 3996 4440 3997 + 4440 3996 4445 + 4445 4441 4440 + 4441 4445 4446 + 4446 4447 4441 + 4441 4447 4442 + 4443 4442 4447 + 4447 4448 4443 + 4443 4448 4449 + 4449 4444 4443 + 4445 3996 3995 + 3995 4450 4445 + 4446 4445 4450 + 4450 4451 4446 + 4452 4446 4451 + 4447 4446 4452 + 4452 4448 4447 + 4448 4452 4453 + 4453 4449 4448 + 4454 4450 3995 + 4450 4454 4455 + 4455 4451 4450 + 4451 4455 4456 + 4456 4457 4451 + 4451 4457 4452 + 4453 4452 4457 + 3995 4001 4454 + 4454 4001 4458 + 4458 4459 4454 + 4455 4454 4459 + 4459 4460 4455 + 4456 4455 4460 + 4460 4461 4456 + 4462 4456 4461 + 4457 4456 4462 + 4463 4458 4001 + 4464 4458 4463 + 4458 4464 4465 + 4465 4459 4458 + 4459 4465 4466 + 4466 4460 4459 + 4460 4466 4467 + 4467 4461 4460 + 4001 4000 4463 + 4003 4463 4000 + 4468 4463 4003 + 4463 4468 4464 + 4464 4468 4469 + 4469 4470 4464 + 4465 4464 4470 + 4470 4471 4465 + 4466 4465 4471 + 4471 4472 4466 + 4467 4466 4472 + 4003 4473 4468 + 4468 4473 4474 + 4474 4469 4468 + 4475 4469 4474 + 4469 4475 4476 + 4476 4470 4469 + 4470 4476 4477 + 4477 4471 4470 + 4473 4003 3056 + 3056 3061 4473 + 4473 3061 4478 + 4478 4474 4473 + 4479 4474 4478 + 4474 4479 4475 + 4475 4479 4480 + 4480 4481 4475 + 4476 4475 4481 + 4481 4482 4476 + 4477 4476 4482 + 3081 4478 3061 + 4483 4478 3081 + 4478 4483 4479 + 4479 4483 4484 + 4484 4480 4479 + 4485 4480 4484 + 4480 4485 4486 + 4486 4481 4480 + 4481 4486 4487 + 4487 4482 4481 + 3081 4488 4483 + 4483 4488 4489 + 4489 4484 4483 + 4490 4484 4489 + 4484 4490 4485 + 4485 4490 4491 + 4491 4492 4485 + 4486 4485 4492 + 4488 3081 3080 + 3080 3086 4488 + 4488 3086 4493 + 4493 4489 4488 + 4494 4489 4493 + 4489 4494 4490 + 4490 4494 4495 + 4495 4491 4490 + 4496 4491 4495 + 4491 4496 4497 + 4497 4492 4491 + 3093 4493 3086 + 4498 4493 3093 + 4493 4498 4494 + 4494 4498 4499 + 4499 4495 4494 + 4500 4495 4499 + 4495 4500 4496 + 4496 4500 4501 + 4501 4502 4496 + 4497 4496 4502 + 3093 3097 4498 + 4498 3097 4503 + 4503 4499 4498 + 4504 4499 4503 + 4499 4504 4500 + 4500 4504 4505 + 4505 4501 4500 + 4506 4501 4505 + 4501 4506 4507 + 4507 4502 4501 + 3101 4503 3097 + 4508 4503 3101 + 4503 4508 4504 + 4504 4508 4509 + 4509 4505 4504 + 4510 4505 4509 + 4505 4510 4506 + 4511 4506 4510 + 4507 4506 4511 + 3101 3106 4508 + 4508 3106 4512 + 4512 4509 4508 + 4513 4509 4512 + 4509 4513 4510 + 4510 4513 4514 + 4514 4515 4510 + 4510 4515 4511 + 4516 4512 3106 + 4517 4512 4516 + 4512 4517 4513 + 4514 4513 4517 + 4517 4518 4514 + 4519 4514 4518 + 4514 4519 4520 + 4520 4515 4514 + 3106 3105 4516 + 3111 4516 3105 + 4521 4516 3111 + 4516 4521 4517 + 4517 4521 4522 + 4522 4518 4517 + 4523 4518 4522 + 4518 4523 4519 + 4524 4519 4523 + 4520 4519 4524 + 3111 3116 4521 + 4522 4521 3116 + 3116 4525 4522 + 4526 4522 4525 + 4522 4526 4523 + 4523 4526 4527 + 4527 4528 4523 + 4523 4528 4524 + 3123 4525 3116 + 4529 4525 3123 + 4525 4529 4526 + 4527 4526 4529 + 4529 4530 4527 + 4531 4527 4530 + 4527 4531 4532 + 4532 4528 4527 + 4528 4532 4533 + 4533 4524 4528 + 3123 3128 4529 + 4529 3128 4534 + 4534 4530 4529 + 4535 4530 4534 + 4530 4535 4531 + 4536 4531 4535 + 4532 4531 4536 + 4536 4537 4532 + 4533 4532 4537 + 4534 3128 3127 + 4538 4534 3127 + 4539 4534 4538 + 4534 4539 4535 + 4535 4539 4540 + 4540 4541 4535 + 4535 4541 4536 + 4542 4536 4541 + 4542 4537 4536 + 3127 4543 4538 + 4544 4538 4543 + 4545 4538 4544 + 4538 4545 4539 + 4540 4539 4545 + 4546 4543 3127 + 4547 4543 4546 + 4543 4547 4544 + 4544 4547 3135 + 3135 4548 4544 + 4549 4544 4548 + 4544 4549 4545 + 3127 3126 4546 + 3131 4546 3126 + 4547 4546 3131 + 3131 3135 4547 + 3139 4548 3135 + 4550 4548 3139 + 4548 4550 4549 + 4551 4549 4550 + 4545 4549 4551 + 4551 4552 4545 + 4545 4552 4540 + 4553 4540 4552 + 4540 4553 4554 + 4554 4541 4540 + 4541 4554 4542 + 3139 4555 4550 + 4550 4555 4556 + 4556 4557 4550 + 4550 4557 4551 + 4558 4551 4557 + 4551 4558 4559 + 4559 4552 4551 + 4552 4559 4553 + 4555 3139 3144 + 3144 4560 4555 + 4556 4555 4560 + 4560 4561 4556 + 4562 4556 4561 + 4556 4562 4563 + 4563 4557 4556 + 4557 4563 4558 + 4564 4558 4563 + 4559 4558 4564 + 4560 3144 3143 + 3143 4565 4560 + 4560 4565 4566 + 4566 4561 4560 + 4567 4561 4566 + 4561 4567 4562 + 4568 4562 4567 + 4563 4562 4568 + 4568 4569 4563 + 4563 4569 4564 + 4565 3143 3152 + 3152 4570 4565 + 4566 4565 4570 + 4570 4571 4566 + 4572 4566 4571 + 4566 4572 4567 + 4567 4572 4573 + 4573 4574 4567 + 4567 4574 4568 + 4570 3152 3151 + 3151 4575 4570 + 4570 4575 4576 + 4576 4571 4570 + 4577 4571 4576 + 4571 4577 4572 + 4573 4572 4577 + 4575 3151 4578 + 4578 4579 4575 + 4576 4575 4579 + 4579 4580 4576 + 4581 4576 4580 + 4576 4581 4577 + 3155 4578 3151 + 4582 4578 3155 + 4579 4578 4582 + 4582 4583 4579 + 4579 4583 4584 + 4584 4580 4579 + 4585 4580 4584 + 4580 4585 4581 + 4586 4581 4585 + 4577 4581 4586 + 3155 3158 4582 + 4582 3158 4587 + 4587 4588 4582 + 4583 4582 4588 + 4588 4589 4583 + 4584 4583 4589 + 4589 4590 4584 + 4591 4584 4590 + 4584 4591 4585 + 3158 4592 4587 + 4592 2746 4587 + 2746 4593 4587 + 4594 4587 4593 + 4595 4587 4594 + 4587 4595 4596 + 4596 4588 4587 + 3157 4592 3158 + 4592 3157 4597 + 4592 4597 2741 + 2741 2746 4592 + 4597 3157 3156 + 3156 2736 4597 + 2741 4597 2736 + 3156 115 2736 + 2736 115 2737 + 2737 115 4598 + 2745 4593 2746 + 4593 2745 4599 + 4593 4599 4594 + 4594 4599 4600 + 4600 4601 4594 + 4602 4594 4601 + 4594 4602 4595 + 4599 2745 2744 + 2744 4600 4599 + 2755 4600 2744 + 4600 2755 4603 + 4603 4601 4600 + 4601 4603 4604 + 4604 4605 4601 + 4601 4605 4602 + 4602 4605 4606 + 4595 4602 4606 + 4603 2755 4607 + 4607 4608 4603 + 4604 4603 4608 + 4608 4609 4604 + 4610 4604 4609 + 4605 4604 4610 + 4610 4606 4605 + 2754 4607 2755 + 4611 4607 2754 + 4607 4611 4612 + 4612 4608 4607 + 4608 4612 4613 + 4613 4609 4608 + 4609 4613 4614 + 4614 4615 4609 + 4609 4615 4610 + 2754 2759 4611 + 4611 2759 2764 + 2764 4616 4611 + 4611 4616 4617 + 4617 4612 4611 + 4613 4612 4617 + 4617 4618 4613 + 4613 4618 4619 + 4619 4614 4613 + 4620 4614 4619 + 4615 4614 4620 + 4616 2764 2773 + 2773 4621 4616 + 4616 4621 4622 + 4622 4617 4616 + 4618 4617 4622 + 4622 4623 4618 + 4618 4623 4624 + 4624 4619 4618 + 4625 4619 4624 + 4619 4625 4620 + 4621 2773 2777 + 2777 4626 4621 + 4622 4621 4626 + 4626 4627 4622 + 4623 4622 4627 + 4627 4628 4623 + 4623 4628 4629 + 4629 4624 4623 + 4630 4624 4629 + 4624 4630 4625 + 4626 2777 2782 + 2782 4631 4626 + 4626 4631 4632 + 4632 4627 4626 + 4628 4627 4632 + 4632 4633 4628 + 4628 4633 4634 + 4634 4629 4628 + 4629 4634 4635 + 4629 4635 4630 + 4631 2782 2787 + 2787 4636 4631 + 4632 4631 4636 + 4636 4637 4632 + 4633 4632 4637 + 4637 4638 4633 + 4633 4638 4639 + 4639 4634 4633 + 4635 4634 4639 + 4636 2787 4640 + 4640 4641 4636 + 4636 4641 4642 + 4642 4637 4636 + 4638 4637 4642 + 4638 4642 4643 + 4643 4644 4638 + 4638 4644 4639 + 4640 2787 2786 + 2786 2792 4640 + 4645 4640 2792 + 4641 4640 4645 + 4645 4646 4641 + 4642 4641 4646 + 4646 4647 4642 + 4647 4648 4642 + 4648 4643 4642 + 4649 4643 4648 + 4644 4643 4649 + 2792 4650 4645 + 4651 4645 4650 + 4645 4651 4646 + 4646 4651 4652 + 4652 4647 4646 + 4653 4647 4652 + 4647 4653 4654 + 4654 4648 4647 + 2791 4650 2792 + 2791 4655 4650 + 4650 4655 4651 + 4652 4651 4655 + 4655 4656 4652 + 4657 4652 4656 + 4652 4657 4653 + 4653 4657 4658 + 4658 4659 4653 + 4654 4653 4659 + 4655 2791 2790 + 2790 4656 4655 + 4660 4656 2790 + 4656 4660 4657 + 4658 4657 4660 + 4660 4661 4658 + 4662 4658 4661 + 4658 4662 4663 + 4663 4659 4658 + 2790 2796 4660 + 4660 2796 4664 + 4664 4661 4660 + 4665 4661 4664 + 4661 4665 4662 + 4666 4662 4665 + 4663 4662 4666 + 4666 4667 4663 + 4668 4663 4667 + 4659 4663 4668 + 4664 2796 2795 + 2795 4669 4664 + 4670 4664 4669 + 4664 4670 4665 + 4665 4670 4671 + 4671 4672 4665 + 4665 4672 4666 + 2804 4669 2795 + 4669 2804 4673 + 4673 4674 4669 + 4669 4674 4670 + 4671 4670 4674 + 4674 4675 4671 + 4676 4671 4675 + 4671 4676 4677 + 4677 4672 4671 + 4673 2804 2803 + 2803 4678 4673 + 4679 4673 4678 + 4674 4673 4679 + 4679 4675 4674 + 4680 4675 4679 + 4675 4680 4676 + 4681 4676 4680 + 4677 4676 4681 + 4682 4678 2803 + 4678 4682 4683 + 4683 4684 4678 + 4678 4684 4679 + 4684 4685 4679 + 4686 4679 4685 + 4679 4686 4680 + 2803 4687 4682 + 4682 4687 4688 + 4688 4689 4682 + 4682 4689 4690 + 4690 4683 4682 + 4687 2803 2809 + 2809 4691 4687 + 4688 4687 4691 + 4691 4692 4688 + 4693 4688 4692 + 4688 4693 4694 + 4694 4689 4688 + 4689 4694 4695 + 4695 4690 4689 + 4691 2809 2808 + 4691 2808 4696 + 4696 4692 4691 + 4697 4692 4696 + 4692 4697 4693 + 4693 4697 4698 + 4698 4699 4693 + 4694 4693 4699 + 4699 4700 4694 + 4695 4694 4700 + 2807 4696 2808 + 4701 4696 2807 + 4696 4701 4697 + 4697 4701 4702 + 4702 4698 4697 + 4703 4698 4702 + 4698 4703 4704 + 4704 4699 4698 + 4699 4704 4705 + 4705 4700 4699 + 2807 2813 4701 + 4701 2813 4706 + 4706 4702 4701 + 4707 4702 4706 + 4702 4707 4703 + 4703 4707 4708 + 4708 4709 4703 + 4704 4703 4709 + 4709 4710 4704 + 4705 4704 4710 + 2813 2817 4706 + 2822 4706 2817 + 4711 4706 2822 + 4706 4711 4707 + 4707 4711 4712 + 4712 4708 4707 + 4713 4708 4712 + 4708 4713 4714 + 4714 4709 4708 + 4709 4714 4715 + 4715 4710 4709 + 2822 4716 4711 + 4711 4716 4717 + 4717 4712 4711 + 4718 4712 4717 + 4712 4718 4713 + 4713 4718 4719 + 4719 4720 4713 + 4714 4713 4720 + 4716 2822 2821 + 2821 4721 4716 + 4716 4721 4722 + 4722 4717 4716 + 4723 4717 4722 + 4717 4723 4718 + 4718 4723 4724 + 4724 4719 4718 + 4721 2821 2826 + 2826 4725 4721 + 4721 4725 4726 + 4726 4722 4721 + 4727 4722 4726 + 4722 4727 4723 + 4723 4727 4728 + 4728 4724 4723 + 4729 4724 4728 + 4719 4724 4729 + 4725 2826 2831 + 2831 4730 4725 + 4725 4730 4731 + 4731 4726 4725 + 4732 4726 4731 + 4726 4732 4727 + 4727 4732 4733 + 4733 4728 4727 + 4730 2831 2835 + 2835 4734 4730 + 4730 4734 4735 + 4735 4731 4730 + 4736 4731 4735 + 4731 4736 4732 + 4733 4732 4736 + 4736 4737 4733 + 4738 4733 4737 + 4728 4733 4738 + 4734 2835 2839 + 2839 4739 4734 + 4735 4734 4739 + 4739 4740 4735 + 4741 4735 4740 + 4735 4741 4736 + 4736 4741 4742 + 4742 4737 4736 + 4743 4737 4742 + 4737 4743 4738 + 4739 2839 2848 + 2848 4744 4739 + 4739 4744 4745 + 4745 4740 4739 + 4746 4740 4745 + 4740 4746 4741 + 4741 4746 4747 + 4747 4742 4741 + 4743 4742 4747 + 4747 4748 4743 + 4738 4743 4748 + 4744 2848 2853 + 2853 4749 4744 + 4744 4749 4750 + 4750 4745 4744 + 4751 4745 4750 + 4745 4751 4746 + 4746 4751 4752 + 4752 4747 4746 + 4747 4752 4753 + 4753 4748 4747 + 4749 2853 4754 + 4754 4755 4749 + 4749 4755 4756 + 4756 4750 4749 + 4757 4750 4756 + 4750 4757 4751 + 4752 4751 4757 + 4757 4758 4752 + 4753 4752 4758 + 4754 2853 2857 + 2857 4759 4754 + 4760 4754 4759 + 4755 4754 4760 + 4760 4761 4755 + 4755 4761 4762 + 4762 4756 4755 + 4763 4756 4762 + 4759 2857 2856 + 4759 2856 2863 + 2863 4764 4759 + 4759 4764 4760 + 4764 4765 4760 + 4766 4760 4765 + 4761 4760 4766 + 4766 4767 4761 + 4761 4767 4768 + 4768 4762 4761 + 2862 4764 2863 + 4764 2862 4769 + 4769 4765 4764 + 4770 4765 4769 + 4765 4770 4766 + 4771 4766 4770 + 4767 4766 4771 + 4771 4772 4767 + 4767 4772 4773 + 4773 4768 4767 + 4769 2862 2861 + 2861 4774 4769 + 4775 4769 4774 + 4769 4775 4770 + 4770 4775 4776 + 4776 4777 4770 + 4770 4777 4771 + 4778 4771 4777 + 4772 4771 4778 + 2871 4774 2861 + 4779 4774 2871 + 4774 4779 4775 + 4776 4775 4779 + 4779 4780 4776 + 4781 4776 4780 + 4776 4781 4782 + 4782 4777 4776 + 4777 4782 4778 + 2871 2876 4779 + 4779 2876 2881 + 2881 4780 4779 + 4783 4780 2881 + 4780 4783 4781 + 4781 4783 4784 + 4784 4785 4781 + 4782 4781 4785 + 4785 4786 4782 + 4782 4786 4787 + 4787 4778 4782 + 2881 2885 4783 + 4783 2885 4788 + 4788 4784 4783 + 4784 4788 4789 + 4789 4790 4784 + 4784 4790 4791 + 4791 4785 4784 + 4785 4791 4792 + 4792 4786 4785 + 2889 4788 2885 + 4789 4788 2889 + 2889 2897 4789 + 4789 2897 4793 + 4793 4794 4789 + 4790 4789 4794 + 4794 4795 4790 + 4790 4795 4796 + 4796 4791 4790 + 4792 4791 4796 + 4797 4793 2897 + 4793 4797 4798 + 4798 4799 4793 + 4793 4799 4800 + 4800 4794 4793 + 4794 4800 4801 + 4801 4795 4794 + 2897 2896 4797 + 4802 4797 2896 + 4798 4797 4802 + 4802 4803 4798 + 4804 4798 4803 + 4799 4798 4804 + 4804 4805 4799 + 4800 4799 4805 + 4805 4806 4800 + 4801 4800 4806 + 2896 2895 4802 + 2895 4807 4802 + 4808 4802 4807 + 4802 4808 4809 + 4809 4803 4802 + 4803 4809 4810 + 4810 4811 4803 + 4803 4811 4804 + 2901 4807 2895 + 4807 2901 2906 + 2906 4812 4807 + 4807 4812 4808 + 4813 4808 4812 + 4809 4808 4813 + 4813 4814 4809 + 4810 4809 4814 + 4812 2906 4815 + 4815 4816 4812 + 4812 4816 4813 + 4816 4817 4813 + 4818 4813 4817 + 4813 4818 4819 + 4819 4814 4813 + 2911 4815 2906 + 4820 4815 2911 + 4816 4815 4820 + 4816 4820 4821 + 4821 4817 4816 + 4822 4817 4821 + 4817 4822 4818 + 4818 4822 4823 + 4824 4818 4823 + 4819 4818 4824 + 2911 4825 4820 + 4821 4820 4825 + 4825 4826 4821 + 4827 4821 4826 + 4821 4827 4822 + 4822 4827 4828 + 4828 4829 4822 + 4822 4829 4823 + 4830 4825 2911 + 4825 4830 4831 + 4831 4826 4825 + 4826 4831 4832 + 4832 4833 4826 + 4826 4833 4827 + 4827 4833 4834 + 4834 4828 4827 + 2911 2910 4830 + 4830 2910 2916 + 2916 4835 4830 + 4830 4835 4836 + 4836 4831 4830 + 4832 4831 4836 + 4836 4837 4832 + 4832 4837 4838 + 4838 4839 4832 + 4833 4832 4839 + 4839 4834 4833 + 4840 4835 2916 + 4835 4840 4841 + 4841 4836 4835 + 4836 4841 4842 + 4842 4837 4836 + 4837 4842 4843 + 4843 4838 4837 + 2916 2915 4840 + 4840 2915 2921 + 2921 2930 4840 + 4840 2930 4844 + 4844 4841 4840 + 4842 4841 4844 + 4844 4845 4842 + 4842 4845 4846 + 4846 4843 4842 + 4847 4843 4846 + 4843 4847 4848 + 4848 4838 4843 + 2930 4849 4844 + 4850 4844 4849 + 4845 4844 4850 + 4845 4850 4851 + 4851 4852 4845 + 4845 4852 4846 + 4853 4849 2930 + 4854 4849 4853 + 4849 4854 4850 + 4850 4854 4855 + 4855 4851 4850 + 4856 4851 4855 + 4851 4856 4852 + 4852 4856 4857 + 4857 4846 4852 + 2930 2929 4853 + 2939 4853 2929 + 4858 4853 2939 + 4853 4858 4854 + 4854 4858 4859 + 4859 4860 4854 + 4854 4860 4855 + 2939 4861 4858 + 4859 4858 4861 + 4861 4862 4859 + 4862 4863 4859 + 4864 4859 4863 + 4859 4864 4860 + 4861 2939 2938 + 2938 4865 4861 + 4861 4865 4866 + 4866 4862 4861 + 4867 4862 4866 + 4862 4867 4868 + 4868 4863 4862 + 4868 4869 4863 + 4863 4869 4864 + 4865 2938 4870 + 4870 4871 4865 + 4865 4871 4872 + 4872 4866 4865 + 4873 4866 4872 + 4866 4873 4867 + 2937 4870 2938 + 4874 4870 2937 + 4870 4874 4875 + 4875 4871 4870 + 4871 4875 4876 + 4876 4872 4871 + 4872 4876 4877 + 4877 4878 4872 + 4872 4878 4873 + 2937 2947 4874 + 4874 2947 4879 + 4879 4880 4874 + 4875 4874 4880 + 4880 4881 4875 + 4876 4875 4881 + 4882 4876 4881 + 4877 4876 4882 + 2952 4879 2947 + 4879 2952 4883 + 4883 4884 4879 + 4879 4884 4885 + 4885 4880 4879 + 4881 4880 4885 + 4883 2952 2951 + 2951 4886 4883 + 4883 4886 4887 + 4887 4888 4883 + 4884 4883 4888 + 4888 4889 4884 + 4884 4889 4890 + 4890 4885 4884 + 2957 4886 2951 + 4886 2957 4891 + 4891 4887 4886 + 4892 4887 4891 + 4887 4892 4893 + 4893 4888 4887 + 4888 4893 4894 + 4894 4889 4888 + 4889 4894 4895 + 4895 4890 4889 + 4896 4891 2957 + 4897 4891 4896 + 4891 4897 4892 + 4892 4897 4898 + 4898 4899 4892 + 4893 4892 4899 + 4899 4900 4893 + 4894 4893 4900 + 2957 2962 4896 + 2961 4896 2962 + 4901 4896 2961 + 4896 4901 4897 + 4897 4901 4902 + 4902 4898 4897 + 4903 4898 4902 + 4898 4903 4904 + 4904 4899 4898 + 4899 4904 4905 + 4905 4900 4899 + 2961 2967 4901 + 4901 2967 4906 + 4906 4902 4901 + 4907 4902 4906 + 4902 4907 4903 + 4903 4907 4908 + 4908 4909 4903 + 4904 4903 4909 + 4909 4042 4904 + 4905 4904 4042 + 4910 4906 2967 + 4911 4906 4910 + 4906 4911 4907 + 4907 4911 4912 + 4912 4908 4907 + 4028 4908 4912 + 4908 4028 4027 + 4027 4909 4908 + 2967 2966 4910 + 2972 4910 2966 + 4913 4910 2972 + 4910 4913 4911 + 4911 4913 4914 + 4914 4912 4911 + 4915 4912 4914 + 4912 4915 4028 + 4028 4915 4022 + 4023 4022 4915 + 2972 4916 4913 + 4913 4916 4917 + 4917 4914 4913 + 4918 4914 4917 + 4914 4918 4915 + 4915 4918 4023 + 4919 4023 4918 + 4017 4023 4919 + 4916 2972 2971 + 2971 2981 4916 + 4916 2981 4920 + 4920 4917 4916 + 4921 4917 4920 + 4917 4921 4918 + 4918 4921 4919 + 4922 4919 4921 + 4017 4919 4922 + 4922 4018 4017 + 4923 4018 4922 + 4018 4923 4011 + 2986 4920 2981 + 4924 4920 2986 + 4920 4924 4921 + 4921 4924 4922 + 4924 4925 4922 + 4923 4922 4925 + 4925 3016 4923 + 4011 4923 3016 + 2986 4926 4924 + 4924 4926 4927 + 4927 4925 4924 + 3016 4925 4927 + 4927 3017 3016 + 3017 4927 3003 + 3003 4928 3017 + 4926 2986 2985 + 2985 2991 4926 + 4926 2991 4929 + 3003 4927 4926 + 4909 4027 4037 + 4037 4042 4909 + 4042 4041 4905 + 4930 4905 4041 + 4900 4905 4930 + 4930 4931 4900 + 4900 4931 4894 + 4895 4894 4931 + 4041 4046 4930 + 4932 4930 4046 + 4931 4930 4932 + 4932 4933 4931 + 4931 4933 4895 + 4934 4895 4933 + 4890 4895 4934 + 4046 4050 4932 + 4935 4932 4050 + 4933 4932 4935 + 4935 4936 4933 + 4933 4936 4934 + 4937 4934 4936 + 4938 4934 4937 + 4934 4938 4890 + 4890 4938 4939 + 4939 4885 4890 + 4050 4055 4935 + 4940 4935 4055 + 4936 4935 4940 + 4940 4941 4936 + 4936 4941 4937 + 4942 4937 4941 + 4943 4937 4942 + 4937 4943 4938 + 4939 4938 4943 + 4055 4436 4940 + 4944 4940 4436 + 4941 4940 4944 + 4944 4945 4941 + 4941 4945 4942 + 4946 4942 4945 + 4947 4942 4946 + 4942 4947 4943 + 4436 4435 4944 + 4948 4944 4435 + 4945 4944 4948 + 4948 4332 4945 + 4945 4332 4946 + 4331 4946 4332 + 4337 4946 4331 + 4946 4337 4947 + 4435 4327 4948 + 4326 4948 4327 + 4332 4948 4326 + 4885 4939 4881 + 4881 4939 4949 + 4949 4950 4881 + 4881 4950 4882 + 4951 4882 4950 + 4882 4951 4952 + 4882 4952 4877 + 4943 4949 4939 + 4953 4949 4943 + 4949 4953 4950 + 4950 4953 4951 + 4954 4951 4953 + 4952 4951 4954 + 4954 4342 4952 + 4952 4342 4341 + 4877 4952 4341 + 4955 4877 4341 + 4878 4877 4955 + 4943 4947 4953 + 4953 4947 4954 + 4947 4337 4954 + 4336 4954 4337 + 4954 4336 4342 + 4956 4417 4416 + 4416 4957 4956 + 4958 4956 4957 + 4957 4959 4958 + 4959 4960 4958 + 4961 4960 4959 + 4960 4961 4962 + 4957 4416 4423 + 4423 4444 4957 + 4957 4444 4449 + 4449 4959 4957 + 4963 4959 4449 + 4959 4963 4961 + 4961 4963 4964 + 4964 4965 4961 + 4962 4961 4965 + 4965 4966 4962 + 4449 4453 4963 + 4963 4453 4967 + 4967 4968 4963 + 4963 4968 4964 + 4969 4964 4968 + 4969 4970 4964 + 4964 4970 4971 + 4971 4965 4964 + 4971 4966 4965 + 4457 4967 4453 + 4462 4967 4457 + 4967 4462 4972 + 4972 4968 4967 + 4968 4972 4969 + 4969 4972 4973 + 4973 4974 4969 + 4970 4969 4974 + 4974 4975 4970 + 4970 4975 4976 + 4971 4970 4976 + 4972 4462 4977 + 4977 4973 4972 + 4978 4973 4977 + 4973 4978 4979 + 4979 4974 4973 + 4974 4979 4980 + 4980 4975 4974 + 4975 4980 4981 + 4981 4976 4975 + 4461 4977 4462 + 4982 4977 4461 + 4977 4982 4978 + 4978 4982 4983 + 4983 4984 4978 + 4979 4978 4984 + 4984 4985 4979 + 4980 4979 4985 + 4985 4986 4980 + 4981 4980 4986 + 4461 4467 4982 + 4982 4467 4987 + 4987 4983 4982 + 4988 4983 4987 + 4983 4988 4989 + 4989 4984 4983 + 4984 4989 4990 + 4990 4985 4984 + 4985 4990 4991 + 4991 4986 4985 + 4472 4987 4467 + 4992 4987 4472 + 4987 4992 4988 + 4988 4992 4993 + 4993 4994 4988 + 4989 4988 4994 + 4994 4995 4989 + 4990 4989 4995 + 4995 4996 4990 + 4991 4990 4996 + 4472 4997 4992 + 4992 4997 4998 + 4998 4999 4992 + 4992 4999 4993 + 4997 4472 4471 + 4471 4477 4997 + 4997 4477 5000 + 5000 4998 4997 + 5001 4998 5000 + 4998 5001 5002 + 5002 4999 4998 + 4999 5002 5003 + 5003 4993 4999 + 4482 5000 4477 + 5004 5000 4482 + 5000 5004 5001 + 5001 5004 5005 + 5005 5006 5001 + 5002 5001 5006 + 5006 5007 5002 + 5003 5002 5007 + 4482 4487 5004 + 5004 4487 5008 + 5008 5005 5004 + 5009 5005 5008 + 5005 5009 5010 + 5010 5006 5005 + 5006 5010 5011 + 5011 5007 5006 + 5012 5008 4487 + 5013 5008 5012 + 5008 5013 5009 + 5009 5013 5014 + 5014 5015 5009 + 5010 5009 5015 + 5015 5016 5010 + 5011 5010 5016 + 4487 4486 5012 + 4492 5012 4486 + 5017 5012 4492 + 5012 5017 5013 + 5013 5017 5018 + 5018 5014 5013 + 5019 5014 5018 + 5014 5019 5020 + 5020 5015 5014 + 5015 5020 5021 + 5021 5016 5015 + 4492 4497 5017 + 5017 4497 5022 + 5022 5018 5017 + 5023 5018 5022 + 5018 5023 5019 + 5024 5019 5023 + 5020 5019 5024 + 5024 5025 5020 + 5020 5025 5026 + 5026 5021 5020 + 4502 5022 4497 + 5027 5022 4502 + 5022 5027 5023 + 5023 5027 5028 + 5028 5029 5023 + 5023 5029 5024 + 5030 5024 5029 + 5024 5030 5031 + 5031 5025 5024 + 4502 4507 5027 + 5028 5027 4507 + 4507 5032 5028 + 5033 5028 5032 + 5028 5033 5034 + 5034 5029 5028 + 5029 5034 5030 + 5035 5030 5034 + 5031 5030 5035 + 4511 5032 4507 + 5036 5032 4511 + 5032 5036 5033 + 5037 5033 5036 + 5034 5033 5037 + 5037 5038 5034 + 5034 5038 5035 + 4511 5039 5036 + 5036 5039 5040 + 5040 5041 5036 + 5036 5041 5037 + 5042 5037 5041 + 5037 5042 5043 + 5043 5038 5037 + 5039 4511 4515 + 4515 4520 5039 + 5040 5039 4520 + 4520 5044 5040 + 5045 5040 5044 + 5040 5045 5046 + 5046 5041 5040 + 5041 5046 5042 + 5047 5042 5046 + 5043 5042 5047 + 4524 5044 4520 + 5048 5044 4524 + 5044 5048 5045 + 5049 5045 5048 + 5046 5045 5049 + 5049 5050 5046 + 5046 5050 5047 + 4524 4533 5048 + 5048 4533 5051 + 5051 5052 5048 + 5048 5052 5049 + 5053 5049 5052 + 5049 5053 5054 + 5054 5050 5049 + 5050 5054 5055 + 5055 5047 5050 + 5051 4533 4537 + 4537 5056 5051 + 5057 5051 5056 + 5051 5057 5058 + 5058 5052 5051 + 5052 5058 5053 + 5053 5058 5059 + 3409 5053 5059 + 5054 5053 3409 + 5060 5056 4537 + 5060 5061 5056 + 5056 5061 5057 + 5062 5057 5061 + 5058 5057 5062 + 5062 5059 5058 + 4537 4542 5060 + 5063 5060 4542 + 5064 5063 4542 + 5065 5064 4542 + 5066 5064 5065 + 5066 5067 5064 + 5064 5067 5068 + 5068 5069 5064 + 4542 4554 5065 + 5070 5065 4554 + 5071 5065 5070 + 5065 5071 5066 + 5072 5066 5071 + 5067 5066 5072 + 5072 5073 5067 + 5074 5067 5073 + 5075 5074 5073 + 4554 4553 5070 + 5070 4553 4559 + 4559 5076 5070 + 5077 5070 5076 + 5070 5077 5071 + 5071 5077 5078 + 5078 5079 5071 + 5071 5079 5072 + 4564 5076 4559 + 5080 5076 4564 + 5076 5080 5077 + 5078 5077 5080 + 5080 5081 5078 + 5082 5078 5081 + 5078 5082 5083 + 5083 5079 5078 + 4564 5084 5080 + 5080 5084 5085 + 5085 5081 5080 + 5086 5081 5085 + 5081 5086 5082 + 5087 5082 5086 + 5083 5082 5087 + 5084 4564 4569 + 4569 5088 5084 + 5085 5084 5088 + 5088 5089 5085 + 5090 5085 5089 + 5085 5090 5086 + 5086 5090 5091 + 5091 5092 5086 + 5086 5092 5087 + 5088 4569 4568 + 4568 5093 5088 + 5088 5093 5094 + 5094 5089 5088 + 5095 5089 5094 + 5089 5095 5090 + 5091 5090 5095 + 5095 5096 5091 + 5093 4568 4574 + 4574 5097 5093 + 5094 5093 5097 + 5097 5098 5094 + 5099 5094 5098 + 5094 5099 5095 + 5095 5099 168 + 168 5100 5095 + 5097 4574 4573 + 4573 5101 5097 + 5097 5101 5102 + 5102 5098 5097 + 5103 5098 5102 + 5098 5103 5099 + 168 5099 5103 + 5103 5104 168 + 5105 168 5104 + 5101 4573 5106 + 5106 5107 5101 + 5102 5101 5107 + 5107 5108 5102 + 5109 5102 5108 + 5102 5109 5103 + 5103 5109 5110 + 5110 5104 5103 + 4577 5106 4573 + 4586 5106 4577 + 5107 5106 4586 + 4586 5111 5107 + 5107 5111 5112 + 5112 5108 5107 + 5113 5108 5112 + 5108 5113 5109 + 5110 5109 5113 + 5111 4586 5114 + 5114 5115 5111 + 5112 5111 5115 + 5115 5116 5112 + 5117 5112 5116 + 5112 5117 5113 + 4585 5114 4586 + 5118 5114 4585 + 5115 5114 5118 + 5118 5119 5115 + 5115 5119 1658 + 1658 5116 5115 + 5120 5116 1658 + 5116 5120 5117 + 5121 5117 5120 + 5113 5117 5121 + 4585 4591 5118 + 5118 4591 5122 + 5122 1652 5118 + 5119 5118 1652 + 1652 1651 5119 + 1658 5119 1651 + 4590 5122 4591 + 5122 4590 5123 + 5122 5123 1653 + 1653 1652 5122 + 5123 4590 4589 + 4589 5124 5123 + 1653 5123 5124 + 1648 1653 5124 + 5124 5125 1648 + 5124 4589 4588 + 4588 4596 5124 + 5124 4596 5126 + 5126 5125 5124 + 5125 5126 5127 + 5127 5128 5125 + 5125 5128 5129 + 5129 5130 5125 + 1642 5130 5129 + 5126 4596 4595 + 4595 5131 5126 + 5127 5126 5131 + 5131 5132 5127 + 5127 5132 5133 + 5133 5134 5127 + 5128 5127 5134 + 5134 5135 5128 + 5129 5128 5135 + 4606 5131 4595 + 5132 5131 4606 + 4606 4610 5132 + 5132 4610 4615 + 4615 5133 5132 + 4620 5133 4615 + 5133 4620 5136 + 5136 5134 5133 + 5134 5136 5137 + 5137 5135 5134 + 5135 5137 5138 + 5138 1644 5135 + 5135 1644 5129 + 1643 5129 1644 + 5129 1643 1642 + 5139 5136 4620 + 5137 5136 5139 + 5139 5140 5137 + 5137 5140 5141 + 5141 5138 5137 + 1638 5138 5141 + 1644 5138 1638 + 4620 4625 5139 + 5142 5139 4625 + 5139 5142 5140 + 5140 5142 5143 + 5143 5144 5140 + 5140 5144 5141 + 5145 5141 5144 + 5146 5141 5145 + 5141 5146 1638 + 1638 5146 1639 + 4625 4630 5142 + 5143 5142 4630 + 4630 4635 5143 + 4635 5147 5143 + 5148 5143 5147 + 5144 5143 5148 + 5148 5149 5144 + 5144 5149 5145 + 4639 5147 4635 + 5150 5147 4639 + 5147 5150 5148 + 5148 5150 5151 + 5151 5152 5148 + 5149 5148 5152 + 5152 5153 5149 + 5145 5149 5153 + 4639 5154 5150 + 5150 5154 5155 + 5155 5151 5150 + 5156 5151 5155 + 5151 5156 5157 + 5157 5152 5151 + 5152 5157 5158 + 5158 5153 5152 + 5154 4639 4644 + 4644 5159 5154 + 5154 5159 5160 + 5155 5154 5160 + 5160 5161 5155 + 5162 5155 5161 + 5155 5162 5156 + 4649 5159 4644 + 5159 4649 5163 + 5163 5160 5159 + 5164 5160 5163 + 5160 5164 5165 + 5165 5161 5160 + 5161 5165 5166 + 5161 5166 5162 + 5167 5162 5166 + 5156 5162 5167 + 5163 4649 5168 + 5168 5169 5163 + 5170 5163 5169 + 5163 5170 5164 + 4648 5168 4649 + 5171 5168 4648 + 5168 5171 5172 + 5172 5169 5168 + 5169 5172 5173 + 5169 5173 5170 + 5174 5170 5173 + 5164 5170 5174 + 4648 4654 5171 + 5171 4654 5175 + 5175 5176 5171 + 5171 5176 5177 + 5172 5171 5177 + 5177 5178 5172 + 5173 5172 5178 + 5178 5179 5173 + 5173 5179 5174 + 4659 5175 4654 + 4668 5175 4659 + 5176 5175 4668 + 4668 5180 5176 + 5176 5180 5181 + 5181 5177 5176 + 5182 5177 5181 + 5177 5182 5183 + 5183 5178 5177 + 5179 5178 5183 + 5180 4668 5184 + 5184 5185 5180 + 5181 5180 5185 + 5186 5181 5185 + 5187 5181 5186 + 5181 5187 5182 + 4667 5184 4668 + 5188 5184 4667 + 5184 5188 5189 + 5189 5185 5184 + 5185 5189 5190 + 5190 5191 5185 + 5185 5191 5186 + 4667 5192 5188 + 5188 5192 5193 + 5193 5194 5188 + 5189 5188 5194 + 5194 5195 5189 + 5190 5189 5195 + 5192 4667 4666 + 4666 5196 5192 + 5192 5196 5197 + 5197 5193 5192 + 5198 5193 5197 + 5193 5198 5199 + 5199 5194 5193 + 5194 5199 5200 + 5200 5195 5194 + 5196 4666 4672 + 4672 4677 5196 + 5197 5196 4677 + 4677 5201 5197 + 5202 5197 5201 + 5197 5202 5198 + 5198 5202 5203 + 5203 5204 5198 + 5199 5198 5204 + 5204 5205 5199 + 5200 5199 5205 + 4681 5201 4677 + 5206 5201 4681 + 5201 5206 5202 + 5203 5202 5206 + 5206 5207 5203 + 5208 5203 5207 + 5203 5208 5209 + 5209 5204 5203 + 5204 5209 5210 + 5210 5205 5204 + 4681 5211 5206 + 5206 5211 5212 + 5212 5207 5206 + 5213 5207 5212 + 5207 5213 5208 + 5214 5208 5213 + 5209 5208 5214 + 5214 5215 5209 + 5210 5209 5215 + 5211 4681 5216 + 5216 5217 5211 + 5212 5211 5217 + 5217 5218 5212 + 5219 5212 5218 + 5212 5219 5213 + 4680 5216 4681 + 5220 5216 4680 + 5217 5216 5220 + 5220 5221 5217 + 5217 5221 5222 + 5222 5218 5217 + 5223 5218 5222 + 5218 5223 5219 + 5224 5219 5223 + 5213 5219 5224 + 4680 4686 5220 + 5220 4686 5225 + 5225 5226 5220 + 5221 5220 5226 + 5226 5227 5221 + 5222 5221 5227 + 5227 5228 5222 + 5229 5222 5228 + 5222 5229 5223 + 4685 5225 4686 + 5225 4685 5230 + 5230 5231 5225 + 5225 5231 5232 + 5232 5226 5225 + 5227 5226 5232 + 5232 5233 5227 + 5227 5233 5234 + 5234 5228 5227 + 5230 4685 4684 + 4684 5235 5230 + 5230 5235 5236 + 5236 5237 5230 + 5231 5230 5237 + 5237 5238 5231 + 5232 5231 5238 + 5238 5239 5232 + 5233 5232 5239 + 5235 4684 4683 + 4683 5240 5235 + 5235 5240 5241 + 5241 5236 5235 + 5242 5236 5241 + 5236 5242 5243 + 5243 5237 5236 + 5238 5237 5243 + 5240 4683 4690 + 4690 5244 5240 + 5240 5244 5245 + 5245 5241 5240 + 5246 5241 5245 + 5241 5246 5242 + 5242 5246 5247 + 5247 5248 5242 + 5243 5242 5248 + 5249 5244 4690 + 5244 5249 5250 + 5250 5245 5244 + 5245 5250 5251 + 5251 5252 5245 + 5245 5252 5246 + 5247 5246 5252 + 4690 4695 5249 + 5249 4695 5253 + 5253 5254 5249 + 5250 5249 5254 + 5254 5255 5250 + 5251 5250 5255 + 4700 5253 4695 + 5256 5253 4700 + 5253 5256 5257 + 5257 5254 5253 + 5254 5257 5258 + 5258 5255 5254 + 5255 5258 5259 + 5259 5260 5255 + 5255 5260 5251 + 4700 4705 5256 + 5256 4705 5261 + 5261 5262 5256 + 5257 5256 5262 + 5262 5263 5257 + 5258 5257 5263 + 5263 5264 5258 + 5259 5258 5264 + 4710 5261 4705 + 5265 5261 4710 + 5261 5265 5266 + 5266 5262 5261 + 5262 5266 5267 + 5267 5263 5262 + 5263 5267 5268 + 5268 5264 5263 + 4710 4715 5265 + 5265 4715 5269 + 5269 5270 5265 + 5266 5265 5270 + 5270 5271 5266 + 5267 5266 5271 + 5271 5272 5267 + 5268 5267 5272 + 5269 4715 4714 + 4714 5273 5269 + 5274 5269 5273 + 5270 5269 5274 + 5274 5275 5270 + 5270 5275 5276 + 5276 5271 5270 + 5272 5271 5276 + 4720 5273 4714 + 5273 4720 5277 + 5273 5277 5274 + 5274 5277 5278 + 5278 5279 5274 + 5279 5280 5274 + 5275 5274 5280 + 5277 4720 4719 + 4719 5278 5277 + 4729 5278 4719 + 5278 4729 5281 + 5281 5279 5278 + 5282 5279 5281 + 5279 5282 5283 + 5283 5280 5279 + 5280 5283 5284 + 5284 5285 5280 + 5280 5285 5275 + 5281 4729 5286 + 5286 5287 5281 + 5288 5281 5287 + 5281 5288 5282 + 5282 5288 5289 + 5289 5290 5282 + 5283 5282 5290 + 4728 5286 4729 + 4738 5286 4728 + 5286 4738 5291 + 5291 5287 5286 + 5292 5287 5291 + 5287 5292 5288 + 5288 5292 5293 + 5293 5289 5288 + 5294 5289 5293 + 5290 5289 5294 + 5295 5291 4738 + 5296 5291 5295 + 5291 5296 5292 + 5292 5296 5297 + 5297 5293 5292 + 5298 5293 5297 + 5293 5298 5294 + 4748 5295 4738 + 5299 5295 4748 + 5300 5295 5299 + 5295 5300 5296 + 5296 5300 5301 + 5301 5297 5296 + 5302 5297 5301 + 5297 5302 5298 + 4748 4753 5299 + 5303 5299 4753 + 5304 5299 5303 + 5299 5304 5300 + 5300 5304 5305 + 5305 5301 5300 + 5306 5301 5305 + 5301 5306 5302 + 4753 5307 5303 + 5308 5303 5307 + 5309 5303 5308 + 5303 5309 5304 + 5304 5309 5310 + 5310 5305 5304 + 4787 5305 5310 + 5305 4787 5306 + 4758 5307 4753 + 5311 5307 4758 + 5307 5311 5308 + 5311 5312 5308 + 4773 5308 5312 + 5308 4773 5309 + 5309 4773 4772 + 4772 5310 5309 + 4778 5310 4772 + 5310 4778 4787 + 4758 5313 5311 + 5311 5313 5314 + 5314 5312 5311 + 4768 5312 5314 + 5312 4768 4773 + 5313 4758 4757 + 4757 4763 5313 + 5313 4763 5314 + 4762 5314 4763 + 5314 4762 4768 + 5306 4787 4786 + 4786 4792 5306 + 5302 5306 4792 + 4792 5315 5302 + 5298 5302 5315 + 5315 5316 5298 + 5294 5298 5316 + 4796 5315 4792 + 5316 5315 4796 + 4796 5317 5316 + 5316 5317 5318 + 5318 5319 5316 + 5316 5319 5294 + 5320 5294 5319 + 5294 5320 5290 + 5317 4796 5321 + 5321 5322 5317 + 5318 5317 5322 + 5322 5323 5318 + 5324 5318 5323 + 5318 5324 5325 + 5325 5319 5318 + 5319 5325 5320 + 4795 5321 4796 + 5326 5321 4795 + 5321 5326 5327 + 5327 5322 5321 + 5322 5327 5328 + 5328 5323 5322 + 5323 5328 5329 + 5329 5330 5323 + 5323 5330 5324 + 4795 4801 5326 + 5326 4801 5331 + 5331 5332 5326 + 5327 5326 5332 + 5332 5333 5327 + 5328 5327 5333 + 5333 5334 5328 + 5329 5328 5334 + 4806 5331 4801 + 5331 4806 5335 + 5335 5336 5331 + 5331 5336 5337 + 5337 5332 5331 + 5332 5337 5338 + 5338 5333 5332 + 5333 5338 5339 + 5339 5334 5333 + 5335 4806 4805 + 4805 5340 5335 + 5341 5335 5340 + 5336 5335 5341 + 5341 5342 5336 + 5337 5336 5342 + 5343 5337 5342 + 5338 5337 5343 + 5343 5344 5338 + 5339 5338 5344 + 5345 5340 4805 + 5340 5345 5346 + 5346 5341 5340 + 5342 5341 5346 + 5346 5347 5342 + 5342 5347 5348 + 5348 5349 5342 + 5342 5349 5343 + 4805 4804 5345 + 5345 4804 4811 + 4811 5350 5345 + 5345 5350 5351 + 5351 5346 5345 + 5347 5346 5351 + 5351 5352 5347 + 5348 5347 5352 + 4869 5348 5352 + 5353 5348 4869 + 5349 5348 5353 + 5350 4811 4810 + 4810 5354 5350 + 5350 5354 5355 + 5355 5351 5350 + 5351 5355 5356 + 5356 5352 5351 + 5352 5356 4860 + 4860 4864 5352 + 5352 4864 4869 + 5354 4810 5357 + 5357 5358 5354 + 5354 5358 5359 + 5359 5355 5354 + 5356 5355 5359 + 5359 4855 5356 + 4860 5356 4855 + 4814 5357 4810 + 5360 5357 4814 + 5358 5357 5360 + 5360 5361 5358 + 5358 5361 5362 + 5362 5359 5358 + 5359 5362 5363 + 5363 4855 5359 + 4855 5363 4856 + 4857 4856 5363 + 4814 4819 5360 + 5360 4819 5364 + 5364 5365 5360 + 5361 5360 5365 + 5365 5366 5361 + 5362 5361 5366 + 5366 5367 5362 + 5363 5362 5367 + 5367 5368 5363 + 5363 5368 4857 + 4824 5364 4819 + 5369 5364 4824 + 5364 5369 5370 + 5370 5365 5364 + 5366 5365 5370 + 5370 5371 5366 + 5366 5371 5372 + 5372 5367 5366 + 5372 5368 5367 + 5368 5372 5373 + 5373 4857 5368 + 5369 4824 5374 + 5374 5375 5369 + 5370 5369 5375 + 5375 5376 5370 + 5377 5376 5375 + 5375 5378 5377 + 5377 5378 5379 + 4823 5374 4824 + 5378 5374 4823 + 5378 5375 5374 + 4823 5380 5378 + 5378 5380 5379 + 5381 5380 4823 + 5380 5381 5382 + 5382 5383 5380 + 5383 5382 5384 + 5384 5385 5383 + 4823 5386 5381 + 5381 5386 5387 + 5387 5388 5381 + 5382 5381 5388 + 5388 5389 5382 + 5384 5382 5389 + 5386 4823 4829 + 4829 5390 5386 + 5387 5386 5390 + 5390 5391 5387 + 5392 5387 5391 + 5388 5387 5392 + 5392 5393 5388 + 5388 5393 5394 + 5394 5389 5388 + 4828 5390 4829 + 5390 4828 4834 + 4834 5391 5390 + 5391 4834 4839 + 4839 5395 5391 + 5391 5395 5392 + 5396 5392 5395 + 5393 5392 5396 + 5396 5397 5393 + 5393 5397 5398 + 5398 5394 5393 + 5395 4839 4838 + 4838 4848 5395 + 5395 4848 5396 + 5399 5396 4848 + 5397 5396 5399 + 5399 5400 5397 + 5397 5400 5401 + 5401 5398 5397 + 5402 5398 5401 + 5398 5402 5403 + 5403 5394 5398 + 4848 4847 5399 + 5404 5399 4847 + 5400 5399 5404 + 5404 5405 5400 + 5400 5405 5406 + 5406 5401 5400 + 5407 5401 5406 + 5401 5407 5402 + 4847 5408 5404 + 5409 5404 5408 + 5404 5409 5410 + 5410 5405 5404 + 5405 5410 5411 + 5411 5412 5405 + 5405 5412 5406 + 4846 5408 4847 + 5408 4846 4857 + 4857 5373 5408 + 5408 5373 5409 + 5409 5373 5372 + 5413 5409 5372 + 5410 5409 5413 + 5413 5414 5410 + 5410 5414 5415 + 5372 5371 5413 + 5416 5413 5371 + 5413 5416 5414 + 5371 5370 5416 + 5417 5411 5410 + 5418 5411 5417 + 5411 5418 5419 + 5419 5412 5411 + 5412 5419 5420 + 5420 5406 5412 + 5421 5406 5420 + 5406 5421 5407 + 5417 5422 5418 + 5423 5418 5422 + 5419 5418 5423 + 5423 5424 5419 + 5419 5424 4174 + 5420 5419 4174 + 4174 4179 5420 + 5421 5420 4179 + 4179 4178 5421 + 5407 5421 4178 + 5425 5423 5422 + 5426 5423 5425 + 5424 5423 5426 + 5426 5427 5424 + 5424 5427 5428 + 5428 4174 5424 + 4174 5428 4166 + 5425 5429 5426 + 5426 5429 5430 + 5430 5431 5426 + 5427 5426 5431 + 5431 5432 5427 + 5428 5427 5432 + 5432 5433 5428 + 4166 5428 5433 + 5429 5425 5434 + 5429 5434 4208 + 4208 5430 5429 + 5435 5430 4208 + 5430 5435 5436 + 5436 5431 5430 + 5431 5436 5437 + 5437 5432 5431 + 5434 5425 5438 + 5438 4203 5434 + 4208 5434 4203 + 5385 5438 5425 + 5439 5438 5385 + 5438 5439 4198 + 4198 4203 5438 + 5385 5384 5439 + 5440 5439 5384 + 4198 5439 5440 + 5440 4189 4198 + 4183 4189 5440 + 5440 5441 4183 + 4183 5441 5442 + 5442 4184 4183 + 5384 5443 5440 + 5441 5440 5443 + 5443 5403 5441 + 5442 5441 5403 + 5403 5402 5442 + 5444 5442 5402 + 5444 4184 5442 + 4184 5444 4178 + 4178 5444 5407 + 5389 5443 5384 + 5443 5389 5394 + 5394 5403 5443 + 5402 5407 5444 + 4208 4213 5435 + 5435 4213 5445 + 5445 5446 5435 + 5435 5446 5447 + 5447 5448 5435 + 5448 5436 5435 + 4218 5445 4213 + 5449 5445 4218 + 5445 5449 5450 + 5450 5446 5445 + 5446 5450 5451 + 5451 5447 5446 + 5447 5451 5452 + 5447 5452 5453 + 5453 5448 5447 + 4218 5454 5449 + 5455 5449 5454 + 5450 5449 5455 + 5455 5456 5450 + 5451 5450 5456 + 5457 5451 5456 + 5452 5451 5457 + 4217 5454 4218 + 5454 4217 5458 + 5458 5459 5454 + 5454 5459 5455 + 5459 5460 5455 + 5461 5455 5460 + 5456 5455 5461 + 5458 4217 4226 + 4226 5462 5458 + 5463 5458 5462 + 5458 5463 5459 + 5459 5463 5464 + 5464 5460 5459 + 5460 5464 5465 + 5460 5465 5461 + 5466 5462 4226 + 5466 5467 5462 + 5462 5467 5463 + 5463 5467 5468 + 5468 5464 5463 + 5465 5464 5468 + 5468 5469 5465 + 5461 5465 5469 + 4226 5470 5466 + 5471 5466 5470 + 5467 5466 5471 + 5471 5468 5467 + 5468 5471 5472 + 5472 5469 5468 + 5469 5472 5473 + 5473 5474 5469 + 5469 5474 5461 + 5470 4226 5475 + 5475 5476 5470 + 5470 5476 5477 + 5477 5478 5470 + 5470 5478 5471 + 5472 5471 5478 + 5475 4226 4225 + 4225 5479 5475 + 5480 5475 5479 + 5476 5475 5480 + 5480 5481 5476 + 5476 5481 5482 + 5482 5477 5476 + 4231 5479 4225 + 5479 4231 5483 + 5483 5484 5479 + 5479 5484 5480 + 5484 5485 5480 + 5486 5480 5485 + 5480 5486 5481 + 5481 5486 5487 + 5487 5482 5481 + 3976 5483 4231 + 3975 5483 3976 + 5483 3975 5484 + 5484 3975 3974 + 3974 5485 5484 + 5485 3974 5488 + 5488 5489 5485 + 5485 5489 5486 + 5486 5489 5490 + 5490 5487 5486 + 5491 5487 5490 + 5487 5491 5482 + 5482 5491 5492 + 5492 5477 5482 + 5488 3974 3973 + 3973 5493 5488 + 5488 5493 5494 + 5494 5495 5488 + 5489 5488 5495 + 5495 5490 5489 + 5495 5496 5490 + 5490 5496 5491 + 5491 5496 5497 + 5492 5491 5497 + 3980 5493 3973 + 5493 3980 5498 + 5498 5499 5493 + 5493 5499 5494 + 5500 5494 5499 + 5500 5497 5494 + 5494 5497 5496 + 5496 5495 5494 + 3985 5498 3980 + 5501 5498 3985 + 5499 5498 5501 + 5501 5502 5499 + 5499 5502 5500 + 5500 5502 5503 + 5503 5504 5500 + 5497 5500 5504 + 3985 5505 5501 + 5501 5505 5506 + 5506 5507 5501 + 5502 5501 5507 + 5507 5503 5502 + 5503 5507 5508 + 5503 5508 5509 + 5509 5504 5503 + 5510 5505 3985 + 5505 5510 5511 + 5511 5512 5505 + 5505 5512 5506 + 3985 3984 5510 + 5510 3984 5513 + 5513 5514 5510 + 5511 5510 5514 + 5514 5515 5511 + 5516 5511 5515 + 5512 5511 5516 + 5513 3984 3983 + 5517 5513 3983 + 5518 5513 5517 + 5518 5514 5513 + 5514 5518 5519 + 5519 5515 5514 + 5515 5519 5520 + 5520 5521 5515 + 5515 5521 5516 + 5522 5517 3983 + 5523 5517 5522 + 5523 5524 5517 + 5517 5524 5518 + 5519 5518 5524 + 5525 5519 5524 + 5520 5519 5525 + 3983 5526 5522 + 5527 5522 5526 + 5528 5522 5527 + 5522 5528 5523 + 5523 5528 5529 + 5530 5523 5529 + 5524 5523 5530 + 3989 5526 3983 + 5526 3989 5531 + 5526 5531 5527 + 5532 5527 5531 + 5528 5527 5532 + 5532 5529 5528 + 5531 3989 3988 + 3988 5532 5531 + 5532 3988 5529 + 5529 3988 5533 + 5533 5534 5529 + 5529 5534 5535 + 5535 5530 5529 + 5536 5530 5535 + 5537 5530 5536 + 5530 5537 5524 + 5538 5533 3988 + 5539 5533 5538 + 5534 5533 5539 + 5534 5539 5540 + 5540 5535 5534 + 5541 5535 5540 + 5535 5541 5536 + 5542 5538 3988 + 5543 5538 5542 + 5538 5543 5544 + 5538 5544 5539 + 5539 5544 5545 + 5546 5542 3988 + 5547 5542 5546 + 5547 5548 5542 + 5542 5548 5543 + 5543 5548 5549 + 5549 5550 5543 + 5544 5543 5550 + 4234 5546 3988 + 4233 5546 4234 + 5551 5546 4233 + 5546 5551 5547 + 5547 5551 5552 + 3987 4234 3988 + 4235 4234 3987 + 3987 3986 4235 + 4235 3986 5553 + 5554 5540 5539 + 4233 4232 5551 + 5551 4232 237 + 237 5555 5551 + 5541 5540 5545 + 5545 5556 5541 + 5541 5556 5557 + 5557 5536 5541 + 5558 5536 5557 + 5536 5558 5537 + 5556 5545 5559 + 5559 5560 5556 + 5556 5560 5561 + 5561 5557 5556 + 5562 5557 5561 + 5557 5562 5558 + 5559 5545 5563 + 5563 5564 5559 + 5565 5559 5564 + 5560 5559 5565 + 5565 5566 5560 + 5566 5561 5560 + 5567 5561 5566 + 5561 5567 5562 + 5568 5563 5545 + 5569 5563 5568 + 5569 5564 5563 + 5564 5569 5570 + 5570 5565 5564 + 5565 5570 5571 + 5571 5566 5565 + 5566 5571 5567 + 5572 5567 5571 + 5562 5567 5572 + 5544 5568 5545 + 5550 5568 5544 + 5568 5550 5573 + 5573 5574 5568 + 5568 5574 5569 + 5570 5569 5574 + 5574 5575 5570 + 5575 5576 5570 + 5576 5571 5570 + 5571 5576 5572 + 5573 5550 5549 + 5549 5577 5573 + 5577 5578 5573 + 5574 5573 5578 + 5578 5575 5574 + 5575 5578 5579 + 5576 5575 5579 + 5576 5579 5580 + 5580 5572 5576 + 5581 5577 5549 + 5577 5581 5579 + 5579 5578 5577 + 5549 5582 5581 + 5581 5582 5583 + 5583 5584 5581 + 5581 5584 5580 + 5580 5579 5581 + 5582 5549 5585 + 5585 5586 5582 + 5583 5582 5586 + 5586 5587 5583 + 5587 5588 5583 + 5589 5583 5588 + 5583 5589 5584 + 5548 5585 5549 + 5590 5585 5548 + 5586 5585 5590 + 5590 5591 5586 + 5586 5591 5592 + 5592 5587 5586 + 5593 5587 5592 + 5587 5593 5594 + 5594 5588 5587 + 5548 5547 5590 + 3895 5590 5547 + 5591 5590 3895 + 3895 5595 5591 + 5592 5591 5595 + 5595 5596 5592 + 5593 5592 5596 + 5596 5597 5593 + 5593 5597 5598 + 5598 5594 5593 + 5599 3895 5547 + 5508 5507 5506 + 5506 5600 5508 + 5508 5600 5601 + 5601 5509 5508 + 5602 5509 5601 + 5504 5509 5602 + 5600 5506 5603 + 5603 5604 5600 + 5600 5604 5605 + 5605 5601 5600 + 5601 5605 5606 + 5606 5607 5601 + 5601 5607 5602 + 5603 5506 5512 + 5512 5608 5603 + 5603 5608 5609 + 5609 5610 5603 + 5604 5603 5610 + 5610 5611 5604 + 5605 5604 5611 + 5611 5612 5605 + 5606 5605 5612 + 5516 5608 5512 + 5608 5516 5613 + 5613 5609 5608 + 5609 5613 5614 + 5614 5615 5609 + 5609 5615 5616 + 5616 5610 5609 + 5611 5610 5616 + 5613 5516 5521 + 5521 5617 5613 + 5614 5613 5617 + 5617 5618 5614 + 5619 5614 5618 + 5615 5614 5619 + 5619 5620 5615 + 5616 5615 5620 + 5621 5617 5521 + 5617 5621 5622 + 5622 5618 5617 + 5618 5622 5623 + 5623 5624 5618 + 5618 5624 5619 + 5625 5619 5624 + 5620 5619 5625 + 5521 5520 5621 + 5621 5520 5626 + 5626 5627 5621 + 5622 5621 5627 + 5627 5628 5622 + 5623 5622 5628 + 5628 5629 5623 + 5630 5623 5629 + 5624 5623 5630 + 5525 5626 5520 + 5631 5626 5525 + 5626 5631 5632 + 5632 5627 5626 + 5627 5632 5633 + 5633 5628 5627 + 5628 5633 5634 + 5634 5629 5628 + 5525 5635 5631 + 5631 5635 5636 + 5636 5637 5631 + 5632 5631 5637 + 5637 5638 5632 + 5633 5632 5638 + 5638 5639 5633 + 5634 5633 5639 + 5635 5525 5640 + 5640 5641 5635 + 5636 5635 5641 + 5642 5636 5641 + 5643 5636 5642 + 5636 5643 5644 + 5644 5637 5636 + 5640 5525 5524 + 5524 5537 5640 + 5645 5640 5537 + 5641 5640 5645 + 5645 5646 5641 + 5641 5646 5647 + 5647 5648 5641 + 5641 5648 5642 + 5537 5558 5645 + 5649 5645 5558 + 5646 5645 5649 + 5649 5650 5646 + 5647 5646 5650 + 5650 5589 5647 + 5588 5647 5589 + 5647 5588 5594 + 5594 5648 5647 + 5558 5562 5649 + 5572 5649 5562 + 5650 5649 5572 + 5572 5580 5650 + 5650 5580 5584 + 5584 5589 5650 + 5648 5594 5598 + 5598 5642 5648 + 5651 5642 5598 + 5642 5651 5643 + 5643 5651 5652 + 5652 5653 5643 + 5644 5643 5653 + 5653 5654 5644 + 5655 5644 5654 + 5637 5644 5655 + 5598 5656 5651 + 5651 5656 5657 + 5657 5652 5651 + 5652 5657 5658 + 5652 5658 5659 + 5659 5653 5652 + 5654 5653 5659 + 5656 5598 5597 + 5597 5660 5656 + 5656 5660 5661 + 5661 5657 5656 + 5658 5657 5661 + 5661 5662 5658 + 5659 5658 5662 + 5663 5659 5662 + 5654 5659 5663 + 5663 5664 5654 + 5654 5664 5655 + 5660 5597 5596 + 5596 5665 5660 + 5660 5665 5666 + 5666 5661 5660 + 5661 5666 5667 + 5667 5662 5661 + 5665 5596 5595 + 5595 5668 5665 + 5665 5668 5669 + 5669 5666 5665 + 5667 5666 5669 + 5669 5670 5667 + 5671 5667 5670 + 5662 5667 5671 + 5668 5595 3895 + 3895 3893 5668 + 5668 3893 3900 + 3900 5669 5668 + 5669 3900 3899 + 3899 5670 5669 + 5670 3899 3904 + 3904 3903 5670 + 5670 3903 5671 + 3908 5671 3903 + 5672 5671 3908 + 5671 5672 5662 + 5662 5672 5673 + 5673 5663 5662 + 5674 5663 5673 + 5663 5674 5675 + 5675 5664 5663 + 5664 5675 5676 + 5676 5655 5664 + 3908 5677 5672 + 5672 5677 5678 + 5678 5673 5672 + 5679 5673 5678 + 5673 5679 5674 + 5680 5674 5679 + 5675 5674 5680 + 5677 3908 3907 + 3907 3913 5677 + 5677 3913 5681 + 5681 5678 5677 + 5682 5678 5681 + 5678 5682 5679 + 5679 5682 5683 + 5683 5684 5679 + 5679 5684 5685 + 5685 5680 5679 + 5686 5681 3913 + 5687 5681 5686 + 5681 5687 5682 + 5683 5682 5687 + 5688 5683 5687 + 5689 5683 5688 + 5684 5683 5689 + 3913 3912 5686 + 5686 3912 5690 + 5690 5691 5686 + 5691 5692 5686 + 5693 5686 5692 + 5686 5693 5687 + 3911 5690 3912 + 5690 3911 5694 + 5694 5695 5690 + 5690 5695 5696 + 5696 5691 5690 + 5697 5691 5696 + 5691 5697 5698 + 5698 5692 5691 + 5694 3911 3910 + 3910 5699 5694 + 3909 5699 3910 + 5699 3909 5700 + 5700 5701 5699 + 5655 5638 5637 + 5638 5655 5676 + 5676 5639 5638 + 5639 5676 5702 + 5702 5703 5639 + 5639 5703 5634 + 5704 5634 5703 + 5629 5634 5704 + 5702 5676 5675 + 5675 5705 5702 + 5706 5702 5705 + 5703 5702 5706 + 5706 5707 5703 + 5703 5707 5704 + 5708 5704 5707 + 5709 5704 5708 + 5704 5709 5629 + 5629 5709 5630 + 5680 5705 5675 + 5705 5680 5710 + 5705 5710 5706 + 5706 5710 5711 + 5711 5712 5706 + 5707 5706 5712 + 5712 5713 5707 + 5707 5713 5708 + 5710 5680 5685 + 5685 5711 5710 + 5711 5685 5714 + 5711 5714 5715 + 5715 5712 5711 + 5713 5712 5715 + 5715 5716 5713 + 5713 5716 5717 + 5717 5708 5713 + 5718 5708 5717 + 5708 5718 5709 + 5714 5685 5719 + 5719 5720 5714 + 5714 5720 5721 + 5721 5722 5714 + 5722 5715 5714 + 5716 5715 5722 + 5684 5719 5685 + 5723 5719 5684 + 5720 5719 5723 + 5720 5723 5724 + 5724 5721 5720 + 5725 5721 5724 + 5721 5725 5726 + 5726 5722 5721 + 5727 5722 5726 + 5722 5727 5716 + 5684 5689 5723 + 5723 5689 5728 + 5728 5724 5723 + 5729 5724 5728 + 5724 5729 5725 + 5725 5729 5730 + 5730 5731 5725 + 5725 5731 5732 + 5732 5726 5725 + 5688 5728 5689 + 5733 5728 5688 + 5728 5733 5729 + 5729 5733 5734 + 5734 5735 5729 + 5735 5730 5729 + 5736 5730 5735 + 5736 5731 5730 + 5731 5736 5737 + 5737 5732 5731 + 5688 5738 5733 + 5733 5738 5739 + 5739 5734 5733 + 5740 5734 5739 + 5734 5740 5741 + 5741 5735 5734 + 5738 5688 5742 + 5742 5743 5738 + 5738 5743 5744 + 5739 5738 5744 + 5745 5739 5744 + 5746 5739 5745 + 5739 5746 5740 + 5687 5742 5688 + 5747 5742 5687 + 5742 5747 5748 + 5748 5743 5742 + 5743 5748 5749 + 5749 5744 5743 + 5687 5693 5747 + 5750 5747 5693 + 5748 5747 5750 + 5750 5751 5748 + 5749 5748 5751 + 5751 5752 5749 + 5753 5749 5752 + 5753 5744 5749 + 5693 5754 5750 + 5755 5750 5754 + 5750 5755 5756 + 5756 5751 5750 + 5751 5756 5757 + 5757 5752 5751 + 5692 5754 5693 + 5758 5754 5692 + 5754 5758 5755 + 5755 5758 5759 + 5759 5760 5755 + 5756 5755 5760 + 5760 5761 5756 + 5757 5756 5761 + 5692 5698 5758 + 5758 5698 5762 + 5762 5763 5758 + 5758 5763 5759 + 5764 5759 5763 + 5765 5759 5764 + 5759 5765 5766 + 5766 5760 5759 + 5767 5762 5698 + 5768 5762 5767 + 5768 5763 5762 + 5763 5768 5764 + 5764 5768 5769 + 5770 5764 5769 + 5765 5764 5770 + 5698 5697 5767 + 5697 5771 5767 + 5772 5767 5771 + 5769 5767 5772 + 5767 5769 5768 + 5773 5771 5697 + 5774 5771 5773 + 5771 5774 5772 + 5772 5774 5775 + 5775 5776 5772 + 5776 5777 5772 + 5769 5772 5777 + 5777 5778 5769 + 5697 5779 5773 + 5780 5773 5779 + 5774 5773 5780 + 5780 5775 5774 + 5775 5780 5781 + 5696 5779 5697 + 5779 5696 5782 + 5782 5783 5779 + 5779 5783 5780 + 5781 5780 5783 + 5783 5784 5781 + 5785 5781 5784 + 5786 5781 5785 + 5782 5696 5695 + 5695 5787 5782 + 5788 5782 5787 + 5783 5782 5788 + 5788 5784 5783 + 5784 5788 5789 + 5789 5790 5784 + 5784 5790 5785 + 5791 5787 5695 + 5787 5791 5792 + 5792 5793 5787 + 5787 5793 5788 + 5789 5788 5793 + 5793 5794 5789 + 5795 5789 5794 + 5790 5789 5795 + 5695 5694 5791 + 5701 5791 5694 + 5792 5791 5701 + 5701 5796 5792 + 5796 5797 5792 + 5797 5798 5792 + 5793 5792 5798 + 5798 5794 5793 + 5694 5799 5701 + 5796 5701 5800 + 5437 5436 5448 + 5448 5801 5437 + 5437 5801 5802 + 5802 5803 5437 + 5432 5437 5803 + 5803 5433 5432 + 5801 5448 5453 + 5801 5453 5804 + 5804 5805 5801 + 5801 5805 5802 + 5806 5802 5805 + 5807 5802 5806 + 5802 5807 5808 + 5808 5803 5802 + 5433 5803 5808 + 5433 5808 4166 + 5804 5453 5452 + 5452 5809 5804 + 5809 5810 5804 + 5810 5811 5804 + 5811 5812 5804 + 5812 5813 5804 + 5814 5804 5813 + 5814 5805 5804 + 5457 5809 5452 + 5457 5815 5809 + 5809 5815 5816 + 5816 5810 5809 + 5816 5817 5810 + 5810 5817 5818 + 5818 5811 5810 + 5815 5457 5819 + 5819 5820 5815 + 5815 5820 5821 + 5821 5816 5815 + 5817 5816 5821 + 5821 5822 5817 + 5817 5822 5823 + 5823 5818 5817 + 5456 5819 5457 + 5824 5819 5456 + 5820 5819 5824 + 5824 5825 5820 + 5820 5825 5826 + 5826 5827 5820 + 5820 5827 5821 + 5456 5828 5824 + 5828 5829 5824 + 5825 5824 5829 + 5829 5830 5825 + 5826 5825 5830 + 5461 5828 5456 + 5828 5461 5831 + 5831 5829 5828 + 5829 5831 5832 + 5832 5830 5829 + 5830 5832 5833 + 5833 5834 5830 + 5830 5834 5826 + 5835 5831 5461 + 5832 5831 5835 + 5835 5836 5832 + 5833 5832 5836 + 5474 5835 5461 + 5837 5835 5474 + 5835 5837 5836 + 5836 5837 5838 + 5838 5839 5836 + 5836 5839 5833 + 5474 5840 5837 + 5838 5837 5840 + 5840 5841 5838 + 5841 5842 5838 + 5843 5838 5842 + 5839 5838 5843 + 5840 5474 5473 + 5840 5473 5844 + 5844 5841 5840 + 5841 5844 5845 + 5841 5845 5846 + 5846 5842 5841 + 5842 5846 5847 + 5842 5847 5843 + 5844 5473 5472 + 5472 5848 5844 + 5845 5844 5848 + 5848 5492 5845 + 5845 5492 5497 + 5846 5845 5497 + 5497 5849 5846 + 5847 5846 5849 + 5478 5848 5472 + 5848 5478 5477 + 5477 5492 5848 + 5504 5849 5497 + 5602 5849 5504 + 5849 5602 5847 + 5847 5602 5607 + 5843 5847 5607 + 5607 5850 5843 + 5839 5843 5850 + 5850 5851 5839 + 5839 5851 5833 + 5852 5850 5607 + 5850 5852 5853 + 5853 5851 5850 + 5851 5853 5854 + 5854 5855 5851 + 5851 5855 5833 + 5607 5606 5852 + 5856 5852 5606 + 5853 5852 5856 + 5856 5857 5853 + 5853 5857 5858 + 5854 5853 5858 + 5859 5856 5606 + 5860 5856 5859 + 5857 5856 5860 + 5857 5860 5861 + 5861 5862 5857 + 5857 5862 5858 + 5863 5859 5606 + 5864 5859 5863 + 5865 5859 5864 + 5859 5865 5860 + 5860 5865 5866 + 5861 5860 5866 + 5606 5867 5863 + 5868 5863 5867 + 5869 5863 5868 + 5863 5869 5864 + 5870 5864 5869 + 5865 5864 5870 + 5870 5866 5865 + 5612 5867 5606 + 5871 5867 5612 + 5867 5871 5868 + 5872 5868 5871 + 5873 5868 5872 + 5868 5873 5869 + 5869 5873 5874 + 5874 5875 5869 + 5869 5875 5870 + 5612 5876 5871 + 5871 5876 5877 + 5877 5878 5871 + 5871 5878 5872 + 5879 5872 5878 + 5880 5872 5879 + 5872 5880 5873 + 5874 5873 5880 + 5876 5612 5611 + 5611 5881 5876 + 5876 5881 5882 + 5882 5877 5876 + 5883 5877 5882 + 5877 5883 5884 + 5884 5878 5877 + 5878 5884 5879 + 5616 5881 5611 + 5881 5616 5885 + 5885 5882 5881 + 5882 5885 5886 + 5886 5887 5882 + 5882 5887 5883 + 5620 5885 5616 + 5886 5885 5620 + 5620 5888 5886 + 5889 5886 5888 + 5887 5886 5889 + 5889 5890 5887 + 5883 5887 5890 + 5890 5891 5883 + 5891 5892 5883 + 5884 5883 5892 + 5625 5888 5620 + 5888 5625 5893 + 5893 5894 5888 + 5888 5894 5889 + 5895 5889 5894 + 5889 5895 5896 + 5896 5890 5889 + 5890 5896 5897 + 5897 5891 5890 + 5893 5625 5898 + 5898 5899 5893 + 5900 5893 5899 + 5894 5893 5900 + 5900 5901 5894 + 5894 5901 5895 + 5624 5898 5625 + 5630 5898 5624 + 5898 5630 5902 + 5902 5899 5898 + 5899 5902 5903 + 5903 5904 5899 + 5899 5904 5900 + 5900 5904 5905 + 5906 5900 5905 + 5901 5900 5906 + 5902 5630 5709 + 5709 5718 5902 + 5903 5902 5718 + 5718 5907 5903 + 5908 5903 5907 + 5904 5903 5908 + 5908 5909 5904 + 5904 5909 5905 + 5717 5907 5718 + 5907 5717 5910 + 5910 5911 5907 + 5907 5911 5908 + 5912 5908 5911 + 5909 5908 5912 + 5912 5913 5909 + 5909 5913 5914 + 5914 5905 5909 + 5910 5717 5716 + 5716 5727 5910 + 5915 5910 5727 + 5911 5910 5915 + 5915 5916 5911 + 5911 5916 5912 + 5917 5912 5916 + 5913 5912 5917 + 5917 5918 5913 + 5914 5913 5918 + 5727 5919 5915 + 5920 5915 5919 + 5916 5915 5920 + 5920 5921 5916 + 5916 5921 5917 + 5922 5917 5921 + 5918 5917 5922 + 5726 5919 5727 + 5919 5726 5732 + 5732 5923 5919 + 5919 5923 5920 + 5924 5920 5923 + 5921 5920 5924 + 5924 5925 5921 + 5921 5925 5922 + 5926 5922 5925 + 5927 5922 5926 + 5922 5927 5918 + 5923 5732 5737 + 5737 5928 5923 + 5923 5928 5924 + 5929 5924 5928 + 5925 5924 5929 + 5929 5930 5925 + 5925 5930 5926 + 5931 5926 5930 + 5932 5926 5931 + 5926 5932 5927 + 5928 5737 5933 + 5933 5934 5928 + 5928 5934 5929 + 5935 5929 5934 + 5930 5929 5935 + 5935 5936 5930 + 5930 5936 5931 + 5933 5737 5736 + 5736 5937 5933 + 5938 5933 5937 + 5937 5939 5938 + 5940 5938 5939 + 5941 5938 5940 + 5938 5941 5934 + 5934 5941 5935 + 5735 5937 5736 + 5939 5937 5735 + 5735 5741 5939 + 5939 5741 5942 + 5942 5943 5939 + 5939 5943 5940 + 5944 5940 5943 + 5945 5940 5944 + 5940 5945 5941 + 5941 5945 5946 + 5946 5935 5941 + 5936 5935 5946 + 5947 5942 5741 + 5948 5942 5947 + 5942 5948 5949 + 5949 5943 5942 + 5943 5949 5944 + 5950 5944 5949 + 5951 5944 5950 + 5944 5951 5945 + 5741 5740 5947 + 5952 5947 5740 + 5953 5947 5952 + 5947 5953 5948 + 5948 5953 5954 + 5954 5955 5948 + 5955 5956 5948 + 5949 5948 5956 + 5740 5746 5952 + 5957 5952 5746 + 5958 5952 5957 + 5952 5958 5953 + 5953 5958 5959 + 5959 5954 5953 + 5960 5954 5959 + 5954 5960 5961 + 5961 5955 5954 + 5746 5962 5957 + 5963 5957 5962 + 5957 5963 5964 + 5964 5965 5957 + 5957 5965 5958 + 5958 5965 5966 + 5966 5959 5958 + 5745 5962 5746 + 5967 5962 5745 + 5962 5967 5963 + 5963 5967 5968 + 5968 5969 5963 + 5964 5963 5969 + 5969 5970 5964 + 5971 5964 5970 + 5965 5964 5971 + 5971 5966 5965 + 5745 5972 5967 + 5967 5972 5973 + 5973 5968 5967 + 5974 5968 5973 + 5968 5974 5975 + 5975 5969 5968 + 5969 5975 5976 + 5976 5970 5969 + 5972 5745 5977 + 5977 5978 5972 + 5972 5978 5979 + 5979 5973 5972 + 5980 5973 5979 + 5973 5980 5974 + 5744 5977 5745 + 5981 5977 5744 + 5978 5977 5981 + 5978 5981 5982 + 5982 5979 5978 + 5983 5979 5982 + 5979 5983 5980 + 5980 5983 5984 + 5984 5985 5980 + 5974 5980 5985 + 5744 5753 5981 + 5982 5981 5753 + 5753 5986 5982 + 5987 5982 5986 + 5982 5987 5983 + 5983 5987 5988 + 5988 5984 5983 + 5989 5984 5988 + 5984 5989 5990 + 5990 5985 5984 + 5752 5986 5753 + 5991 5986 5752 + 5986 5991 5987 + 5987 5991 5992 + 5992 5988 5987 + 5993 5988 5992 + 5988 5993 5989 + 5989 5993 5994 + 5994 5995 5989 + 5990 5989 5995 + 5752 5757 5991 + 5991 5757 5996 + 5996 5992 5991 + 5997 5992 5996 + 5992 5997 5993 + 5993 5997 5998 + 5998 5994 5993 + 5999 5994 5998 + 5994 5999 6000 + 6000 5995 5994 + 5761 5996 5757 + 6001 5996 5761 + 5996 6001 5997 + 5997 6001 6002 + 6002 5998 5997 + 6003 5998 6002 + 5998 6003 5999 + 5999 6003 6004 + 6004 6005 5999 + 6000 5999 6005 + 5761 6006 6001 + 6001 6006 6007 + 6007 6002 6001 + 6008 6002 6007 + 6002 6008 6003 + 6003 6008 6009 + 6009 6004 6003 + 6006 5761 5760 + 5760 5766 6006 + 6006 5766 6010 + 6010 6007 6006 + 6011 6007 6010 + 6007 6011 6008 + 6008 6011 6012 + 6012 6009 6008 + 6013 6009 6012 + 6009 6013 6014 + 6014 6004 6009 + 6015 6010 5766 + 6016 6010 6015 + 6010 6016 6011 + 6011 6016 6017 + 6017 6012 6011 + 6018 6012 6017 + 6012 6018 6013 + 5766 5765 6015 + 5765 6019 6015 + 6020 6015 6019 + 6021 6015 6020 + 6015 6021 6016 + 6017 6016 6021 + 6021 6022 6017 + 6023 6017 6022 + 6017 6023 6018 + 5770 6019 5765 + 6024 6019 5770 + 6019 6024 6020 + 6020 6024 6025 + 6025 6026 6020 + 6026 6027 6020 + 6021 6020 6027 + 6027 6022 6021 + 6028 6022 6027 + 6022 6028 6023 + 6024 5770 6029 + 6029 6025 6024 + 6025 6029 6030 + 6025 6030 6031 + 6031 6026 6025 + 6032 6026 6031 + 6026 6032 6033 + 6033 6027 6026 + 6027 6033 6028 + 6029 5770 5769 + 5769 6034 6029 + 6030 6029 5778 + 5778 6035 6030 + 6030 6035 6036 + 6036 6037 6030 + 6037 6031 6030 + 6038 6031 6037 + 6031 6038 6032 + 6035 5778 5777 + 6035 5777 5776 + 5776 6036 6035 + 6036 5776 6039 + 6039 6040 6036 + 6036 6040 6041 + 6041 6037 6036 + 6042 6037 6041 + 6037 6042 6038 + 6039 5776 5775 + 5775 5786 6039 + 6043 6039 5786 + 6040 6039 6043 + 6043 6044 6040 + 6040 6044 6045 + 6045 6041 6040 + 6046 6041 6045 + 6041 6046 6042 + 6047 5786 5775 + 5805 5814 5806 + 5806 5814 6048 + 6048 6049 5806 + 5807 5806 6049 + 6049 4167 5807 + 5807 4167 4166 + 4166 5808 5807 + 5813 6048 5814 + 6050 6048 5813 + 6048 6050 6051 + 6051 6049 6048 + 6049 6051 4168 + 4168 4167 6049 + 6050 5813 5812 + 5812 6052 6050 + 6051 6050 6052 + 6052 6053 6051 + 6053 6054 6051 + 6054 6055 6051 + 4168 6051 6055 + 6055 6056 4168 + 4168 6056 4162 + 6057 6052 5812 + 6052 6057 6058 + 6058 6053 6052 + 6059 6053 6058 + 6053 6059 6060 + 6060 6054 6053 + 6057 5812 5811 + 5811 6061 6057 + 6057 6061 6062 + 6062 6058 6057 + 6063 6058 6062 + 6058 6063 6059 + 6059 6063 6064 + 6064 6065 6059 + 6060 6059 6065 + 5818 6061 5811 + 6061 5818 5823 + 5823 6066 6061 + 6061 6066 6062 + 6067 6062 6066 + 6062 6067 6068 + 6068 6069 6062 + 6062 6069 6063 + 6063 6069 6070 + 6070 6064 6063 + 6071 6066 5823 + 6066 6071 6067 + 6072 6067 6071 + 6068 6067 6072 + 6072 6073 6068 + 6068 6073 6074 + 6074 6075 6068 + 6069 6068 6075 + 6075 6070 6069 + 5823 6076 6071 + 6071 6076 6077 + 6077 6078 6071 + 6071 6078 6072 + 6079 6072 6078 + 6072 6079 6080 + 6080 6073 6072 + 6076 5823 5822 + 5822 6081 6076 + 6077 6076 6081 + 6081 6082 6077 + 6083 6077 6082 + 6077 6083 6084 + 6084 6078 6077 + 6078 6084 6079 + 6085 6079 6084 + 6080 6079 6085 + 6081 5822 5821 + 5821 6086 6081 + 6081 6086 6087 + 6087 6082 6081 + 6088 6082 6087 + 6082 6088 6083 + 6089 6083 6088 + 6084 6083 6089 + 6089 6090 6084 + 6084 6090 6085 + 6086 5821 5827 + 5827 6091 6086 + 6087 6086 6091 + 6091 6092 6087 + 6093 6087 6092 + 6087 6093 6088 + 6088 6093 6094 + 6094 6095 6088 + 6088 6095 6089 + 6091 5827 5826 + 5826 6096 6091 + 6091 6096 6097 + 6097 6092 6091 + 6098 6092 6097 + 6092 6098 6093 + 6094 6093 6098 + 6096 5826 5834 + 5834 6099 6096 + 6097 6096 6099 + 6099 6100 6097 + 6101 6097 6100 + 6097 6101 6098 + 6098 6101 6102 + 6102 6103 6098 + 6098 6103 6094 + 6099 5834 5833 + 5833 6104 6099 + 6099 6104 6105 + 6105 6100 6099 + 6106 6100 6105 + 6100 6106 6101 + 6102 6101 6106 + 6104 5833 5855 + 5855 6107 6104 + 6105 6104 6107 + 6107 6108 6105 + 6109 6105 6108 + 6105 6109 6106 + 6106 6109 6110 + 6110 6111 6106 + 6106 6111 6102 + 6107 5855 5854 + 5854 6112 6107 + 6107 6112 6113 + 6113 6108 6107 + 6114 6108 6113 + 6108 6114 6109 + 6110 6109 6114 + 6112 5854 6115 + 6115 6116 6112 + 6113 6112 6116 + 6116 6117 6113 + 6118 6113 6117 + 6113 6118 6114 + 5858 6115 5854 + 6119 6115 5858 + 6116 6115 6119 + 6119 6120 6116 + 6116 6120 6121 + 6121 6117 6116 + 6122 6117 6121 + 6117 6122 6118 + 6123 6118 6122 + 6114 6118 6123 + 5858 6124 6119 + 6125 6119 6124 + 6120 6119 6125 + 6125 6126 6120 + 6121 6120 6126 + 6126 6127 6121 + 6128 6121 6127 + 6121 6128 6122 + 6124 5858 6129 + 6124 6129 6130 + 6130 6131 6124 + 6124 6131 6125 + 6132 6125 6131 + 6126 6125 6132 + 6129 5858 5862 + 5862 6133 6129 + 6129 6133 6134 + 6134 6135 6129 + 6135 6136 6129 + 6136 6137 6129 + 6137 6138 6129 + 6138 6130 6129 + 6133 5862 5861 + 6133 5861 6139 + 6139 6134 6133 + 6134 6139 6140 + 6134 6140 6141 + 6141 6135 6134 + 6135 6141 6142 + 6135 6142 6143 + 6143 6136 6135 + 5866 6139 5861 + 6140 6139 5866 + 5866 6144 6140 + 6141 6140 6144 + 6144 6145 6141 + 6142 6141 6145 + 6145 6146 6142 + 6142 6146 6147 + 6147 6143 6142 + 6148 6143 6147 + 6136 6143 6148 + 6144 5866 5870 + 6144 5870 6149 + 6149 6145 6144 + 6145 6149 6146 + 6146 6149 6150 + 6150 6151 6146 + 6146 6151 6147 + 6152 6147 6151 + 6153 6147 6152 + 6147 6153 6148 + 6150 6149 5870 + 5875 6150 5870 + 6154 6150 5875 + 6151 6150 6154 + 6154 6155 6151 + 6151 6155 6152 + 6152 6155 6156 + 6156 6157 6152 + 6158 6152 6157 + 6152 6158 6153 + 5875 6159 6154 + 6154 6159 6160 + 6160 6161 6154 + 6155 6154 6161 + 6161 6156 6155 + 6162 6156 6161 + 6156 6162 6163 + 6163 6157 6156 + 6164 6159 5875 + 6159 6164 6165 + 6165 6160 6159 + 6166 6160 6165 + 6160 6166 6167 + 6167 6161 6160 + 6161 6167 6162 + 5875 5874 6164 + 6164 5874 6168 + 6168 6169 6164 + 6164 6169 6170 + 6170 6165 6164 + 6171 6165 6170 + 6165 6171 6166 + 5880 6168 5874 + 6172 6168 5880 + 6168 6172 6173 + 6173 6169 6168 + 6169 6173 6174 + 6174 6170 6169 + 6175 6170 6174 + 6170 6175 6171 + 5880 6176 6172 + 6172 6176 6177 + 6177 6178 6172 + 6173 6172 6178 + 6178 6179 6173 + 6173 6179 6180 + 6180 6174 6173 + 5879 6176 5880 + 6176 5879 6181 + 6181 6177 6176 + 6182 6177 6181 + 6177 6182 6183 + 6183 6178 6177 + 6178 6183 6184 + 6184 6179 6178 + 6179 6184 6185 + 6185 6180 6179 + 6181 5879 5884 + 5884 6186 6181 + 6187 6181 6186 + 6181 6187 6182 + 6182 6187 6188 + 6188 6189 6182 + 6183 6182 6189 + 6189 6190 6183 + 6184 6183 6190 + 5892 6186 5884 + 6191 6186 5892 + 6186 6191 6187 + 6188 6187 6191 + 6191 6192 6188 + 6193 6188 6192 + 6188 6193 6194 + 6194 6189 6188 + 6189 6194 6195 + 6195 6190 6189 + 6191 5892 5891 + 5891 6192 6191 + 6196 6192 5891 + 6192 6196 6193 + 6197 6193 6196 + 6194 6193 6197 + 6197 6198 6194 + 6195 6194 6198 + 6198 6199 6195 + 6200 6195 6199 + 6195 6200 6190 + 6190 6200 6184 + 5891 5897 6196 + 6196 5897 6201 + 6201 6202 6196 + 6196 6202 6197 + 6203 6197 6202 + 6198 6197 6203 + 6203 6204 6198 + 6198 6204 6205 + 6205 6199 6198 + 6206 6201 5897 + 6207 6201 6206 + 6207 6202 6201 + 6202 6207 6203 + 6208 6203 6207 + 6204 6203 6208 + 6208 6209 6204 + 6205 6204 6209 + 6210 6206 5897 + 6211 6206 6210 + 6206 6211 6212 + 6212 6213 6206 + 6206 6213 6207 + 6207 6213 6208 + 6214 6208 6213 + 6208 6214 6209 + 5897 5896 6210 + 6215 6210 5896 + 6210 6215 6216 + 6216 6217 6210 + 6210 6217 6211 + 6211 6217 6218 + 6218 6219 6211 + 6212 6211 6219 + 5896 5895 6215 + 6220 6215 5895 + 6216 6215 6220 + 6220 6221 6216 + 6216 6221 6222 + 6222 6223 6216 + 6217 6216 6223 + 6223 6218 6217 + 5895 5901 6220 + 5906 6220 5901 + 5906 6221 6220 + 6221 5906 6224 + 6224 6222 6221 + 6222 6224 6225 + 6222 6225 6226 + 6226 6223 6222 + 6218 6223 6226 + 6226 6227 6218 + 6218 6227 6228 + 6228 6219 6218 + 5905 6224 5906 + 6225 6224 5905 + 5905 6229 6225 + 6226 6225 6229 + 6230 6226 6229 + 6227 6226 6230 + 6230 6231 6227 + 6228 6227 6231 + 6229 5905 5914 + 5914 6232 6229 + 6229 6232 6233 + 6233 6234 6229 + 6229 6234 6230 + 6235 6230 6234 + 6235 6231 6230 + 6232 5914 5918 + 5918 5927 6232 + 6232 5927 5932 + 5932 6233 6232 + 6236 6233 5932 + 6234 6233 6236 + 6236 6237 6234 + 6234 6237 6235 + 6235 6237 6238 + 6238 6239 6235 + 6231 6235 6239 + 6239 6240 6231 + 6231 6240 6228 + 5932 6241 6236 + 6242 6236 6241 + 6237 6236 6242 + 6242 6238 6237 + 6238 6242 6243 + 6243 6244 6238 + 6238 6244 6245 + 6245 6239 6238 + 6240 6239 6245 + 5931 6241 5932 + 6241 5931 6246 + 6246 6247 6241 + 6241 6247 6242 + 6243 6242 6247 + 6247 6248 6243 + 6249 6243 6248 + 6244 6243 6249 + 6249 6250 6244 + 6245 6244 6250 + 6246 5931 5936 + 5936 6251 6246 + 6252 6246 6251 + 6247 6246 6252 + 6252 6248 6247 + 6248 6252 6253 + 6253 6254 6248 + 6248 6254 6249 + 6255 6249 6254 + 6250 6249 6255 + 5946 6251 5936 + 6251 5946 6256 + 6256 6257 6251 + 6251 6257 6252 + 6253 6252 6257 + 6257 6258 6253 + 6259 6253 6258 + 6254 6253 6259 + 6259 6260 6254 + 6254 6260 6255 + 6256 5946 5945 + 5945 5951 6256 + 6261 6256 5951 + 6257 6256 6261 + 6261 6258 6257 + 6258 6261 6262 + 6262 6263 6258 + 6258 6263 6259 + 6264 6259 6263 + 6260 6259 6264 + 5951 6265 6261 + 6262 6261 6265 + 6265 6266 6262 + 6267 6262 6266 + 6263 6262 6267 + 6267 6268 6263 + 6263 6268 6264 + 5950 6265 5951 + 6265 5950 6269 + 6269 6266 6265 + 6266 6269 6270 + 6270 6271 6266 + 6266 6271 6267 + 6272 6267 6271 + 6268 6267 6272 + 6269 5950 6273 + 6273 6274 6269 + 6270 6269 6274 + 6274 6275 6270 + 6276 6270 6275 + 6271 6270 6276 + 6276 6277 6271 + 6271 6277 6272 + 5949 6273 5950 + 5956 6273 5949 + 6274 6273 5956 + 6274 5956 5955 + 5955 6275 6274 + 6278 6275 5955 + 6275 6278 6276 + 6276 6278 6279 + 6279 6280 6276 + 6277 6276 6280 + 6280 6281 6277 + 6277 6281 6282 + 6282 6272 6277 + 5955 5961 6278 + 6278 5961 6283 + 6283 6279 6278 + 6284 6279 6283 + 6279 6284 6285 + 6285 6280 6279 + 6281 6280 6285 + 6285 6286 6281 + 6281 6286 6287 + 6287 6282 6281 + 6283 5961 5960 + 5960 6288 6283 + 6289 6283 6288 + 6283 6289 6284 + 6284 6289 6290 + 6290 6291 6284 + 6284 6291 6292 + 6292 6285 6284 + 6286 6285 6292 + 6293 6288 5960 + 6294 6288 6293 + 6288 6294 6289 + 6289 6294 6295 + 6295 6296 6289 + 6296 6290 6289 + 5960 6297 6293 + 6293 6297 6298 + 6298 6299 6293 + 6300 6293 6299 + 6293 6300 6294 + 6294 6300 6301 + 6301 6295 6294 + 5959 6297 5960 + 6297 5959 5966 + 5966 6298 6297 + 6302 6298 5966 + 6298 6302 6303 + 6303 6299 6298 + 6299 6303 6304 + 6304 6305 6299 + 6299 6305 6300 + 6301 6300 6305 + 5966 5971 6302 + 6302 5971 6306 + 6306 6307 6302 + 6303 6302 6307 + 6307 6308 6303 + 6304 6303 6308 + 6308 6309 6304 + 6310 6304 6309 + 6305 6304 6310 + 5970 6306 5971 + 6311 6306 5970 + 6306 6311 6312 + 6312 6307 6306 + 6307 6312 6313 + 6313 6308 6307 + 6308 6313 6314 + 6314 6309 6308 + 5970 5976 6311 + 6311 5976 6315 + 6315 6316 6311 + 6312 6311 6316 + 6316 6317 6312 + 6313 6312 6317 + 6317 6318 6313 + 6314 6313 6318 + 6319 6315 5976 + 6320 6315 6319 + 6315 6320 6321 + 6321 6316 6315 + 6316 6321 6322 + 6322 6317 6316 + 6317 6322 6323 + 6323 6318 6317 + 5976 5975 6319 + 6324 6319 5975 + 6325 6319 6324 + 6319 6325 6320 + 6320 6325 6326 + 6326 6327 6320 + 6321 6320 6327 + 6327 6328 6321 + 6322 6321 6328 + 5975 5974 6324 + 5985 6324 5974 + 6329 6324 5985 + 6324 6329 6325 + 6325 6329 6330 + 6330 6326 6325 + 6331 6326 6330 + 6326 6331 6332 + 6332 6327 6326 + 6327 6332 6333 + 6333 6328 6327 + 5985 5990 6329 + 6329 5990 6334 + 6334 6330 6329 + 6335 6330 6334 + 6330 6335 6331 + 6336 6331 6335 + 6332 6331 6336 + 6336 6337 6332 + 6333 6332 6337 + 5995 6334 5990 + 6338 6334 5995 + 6334 6338 6335 + 6335 6338 6339 + 6339 6340 6335 + 6335 6340 6336 + 6341 6336 6340 + 6341 6337 6336 + 5995 6000 6338 + 6338 6000 6342 + 6342 6339 6338 + 6343 6339 6342 + 6339 6343 6344 + 6344 6340 6339 + 6340 6344 6341 + 6345 6341 6344 + 6346 6341 6345 + 6341 6346 6337 + 6005 6342 6000 + 6347 6342 6005 + 6342 6347 6343 + 6343 6347 6348 + 6348 6349 6343 + 6344 6343 6349 + 6349 6350 6344 + 6344 6350 6345 + 6005 6351 6347 + 6347 6351 6352 + 6352 6348 6347 + 6353 6348 6352 + 6348 6353 6354 + 6354 6349 6348 + 6349 6354 6350 + 6351 6005 6004 + 6004 6014 6351 + 6351 6014 6355 + 6355 6352 6351 + 6356 6352 6355 + 6352 6356 6353 + 6353 6356 6357 + 6357 6358 6353 + 6354 6353 6358 + 6358 6359 6354 + 6350 6354 6359 + 6360 6355 6014 + 6361 6355 6360 + 6355 6361 6356 + 6356 6361 6362 + 6357 6356 6362 + 6014 6013 6360 + 6363 6360 6013 + 6364 6360 6363 + 6360 6364 6361 + 6361 6364 6365 + 6365 6366 6361 + 6361 6366 6362 + 6013 6018 6363 + 6367 6363 6018 + 6368 6363 6367 + 6363 6368 6364 + 6365 6364 6368 + 6369 6365 6368 + 6366 6365 6369 + 6369 6370 6366 + 6366 6370 6371 + 6371 6362 6366 + 6018 6023 6367 + 6372 6367 6023 + 6373 6367 6372 + 6367 6373 6368 + 6368 6373 6369 + 6374 6369 6373 + 6370 6369 6374 + 6374 6375 6370 + 6371 6370 6375 + 6023 6028 6372 + 6376 6372 6028 + 6377 6372 6376 + 6372 6377 6373 + 6373 6377 6374 + 6378 6374 6377 + 6377 6379 6378 + 6378 6379 6380 + 6381 6378 6380 + 6028 6033 6376 + 6382 6376 6033 + 6379 6376 6382 + 6376 6379 6377 + 6033 6032 6382 + 6383 6382 6032 + 6380 6382 6383 + 6382 6380 6379 + 6032 6038 6383 + 6384 6383 6038 + 6385 6383 6384 + 6383 6385 6380 + 6380 6385 6381 + 6381 6385 6386 + 6386 6387 6381 + 6375 6381 6387 + 6381 6375 6374 + 6038 6042 6384 + 6388 6384 6042 + 6386 6384 6388 + 6384 6386 6385 + 6042 6046 6388 + 6389 6388 6046 + 6390 6388 6389 + 6388 6390 6386 + 6386 6390 6391 + 6391 6387 6386 + 6387 6391 6392 + 6392 6393 6387 + 6387 6393 6375 + 6046 6394 6389 + 6395 6389 6394 + 6396 6389 6395 + 6389 6396 6390 + 6391 6390 6396 + 6392 6391 6396 + 6045 6394 6046 + 6394 6045 6397 + 6397 6398 6394 + 6394 6398 6395 + 6399 6395 6398 + 6400 6395 6399 + 6395 6400 6396 + 6396 6400 6392 + 6397 6045 6044 + 6044 6401 6397 + 6402 6397 6401 + 6398 6397 6402 + 6402 6403 6398 + 6398 6403 6399 + 6404 6399 6403 + 6405 6399 6404 + 6399 6405 6400 + 6392 6400 6405 + 6406 6401 6044 + 6401 6406 6407 + 6407 6408 6401 + 6401 6408 6402 + 6409 6402 6408 + 6403 6402 6409 + 6409 6410 6403 + 6403 6410 6404 + 6044 6043 6406 + 6406 6043 6411 + 6411 6412 6406 + 6407 6406 6412 + 6412 6413 6407 + 6414 6407 6413 + 6408 6407 6414 + 6414 6415 6408 + 6408 6415 6409 + 5786 6411 6043 + 5785 6411 5786 + 6411 5785 6416 + 6416 6412 6411 + 6412 6416 6417 + 6417 6413 6412 + 6413 6417 6418 + 6418 6419 6413 + 6413 6419 6414 + 6420 6414 6419 + 6415 6414 6420 + 6416 5785 5790 + 5790 6421 6416 + 6417 6416 6421 + 6421 6422 6417 + 6418 6417 6422 + 6422 6423 6418 + 6424 6418 6423 + 6419 6418 6424 + 6424 6425 6419 + 6419 6425 6420 + 5795 6421 5790 + 6421 5795 6426 + 6426 6422 6421 + 6422 6426 6427 + 6427 6423 6422 + 6423 6427 6428 + 6428 6429 6423 + 6423 6429 6424 + 6430 6424 6429 + 6425 6424 6430 + 6426 5795 6431 + 6431 6432 6426 + 6427 6426 6432 + 6432 6433 6427 + 6428 6427 6433 + 6433 6434 6428 + 6435 6428 6434 + 6429 6428 6435 + 5794 6431 5795 + 6436 6431 5794 + 6431 6436 6437 + 6437 6432 6431 + 6432 6437 6438 + 6438 6433 6432 + 6433 6438 6439 + 6439 6434 6433 + 5794 5798 6436 + 6436 5798 5797 + 5797 6440 6436 + 6437 6436 6440 + 6440 198 6437 + 6440 5797 6441 + 6440 6441 6442 + 6442 6443 6440 + 6441 5797 5796 + 5796 123 6441 + 5700 123 5796 + 123 5700 3848 + 3848 6444 123 + 6442 6441 6445 + 6438 6437 6446 + 6446 197 6438 + 6439 6438 197 + 197 3918 6439 + 6447 6439 3918 + 6434 6439 6447 + 6447 6448 6434 + 6434 6448 6435 + 3918 6449 6447 + 6450 6447 6449 + 6448 6447 6450 + 6450 6451 6448 + 6448 6451 6452 + 6452 6435 6448 + 6453 6435 6452 + 6435 6453 6429 + 3917 6449 3918 + 6449 3917 3928 + 3928 6454 6449 + 6449 6454 6450 + 6455 6450 6454 + 6451 6450 6455 + 6455 6456 6451 + 6451 6456 6457 + 6457 6452 6451 + 6458 6452 6457 + 6452 6458 6453 + 6454 3928 6459 + 6459 4104 6454 + 6454 4104 6455 + 4103 6455 4104 + 6456 6455 4103 + 4103 4102 6456 + 6456 4102 6460 + 6460 6457 6456 + 6458 6457 6460 + 6459 3928 3927 + 3927 6461 6459 + 6459 6461 6462 + 4105 6459 6462 + 4104 6459 4105 + 3926 6461 3927 + 6461 3926 3933 + 3933 6462 6461 + 3933 6463 6462 + 6462 6463 6464 + 6464 6465 6462 + 6462 6465 4105 + 4099 4105 6465 + 6465 4100 4099 + 6463 3933 6466 + 6466 6467 6463 + 6463 6467 6468 + 6468 6469 6463 + 6469 6464 6463 + 4100 6464 6469 + 4100 6465 6464 + 3932 6466 3933 + 3938 6466 3932 + 6466 3938 6470 + 6470 6467 6466 + 6467 6470 6471 + 6471 6468 6467 + 6468 6471 6472 + 6472 6473 6468 + 6468 6473 6474 + 6474 6469 6468 + 6470 3938 4140 + 4140 6475 6470 + 6471 6470 6475 + 6475 6476 6471 + 6472 6471 6476 + 6476 4397 6472 + 4401 6472 4397 + 6473 6472 4401 + 4401 4405 6473 + 6474 6473 4405 + 4144 6475 4140 + 6475 4144 6477 + 6477 6476 6475 + 6476 6477 4391 + 4391 4397 6476 + 6477 4144 4148 + 4148 4392 6477 + 4391 6477 4392 + 4153 4392 4148 + 4392 4153 4386 + 4386 4153 4387 + 4152 4387 4153 + 4158 4387 4152 + 4387 4158 4382 + 4382 4158 6478 + 6478 4378 4382 + 6479 4378 6478 + 4378 6479 4372 + 4372 6479 6480 + 6480 4373 4372 + 4157 6478 4158 + 6481 6478 4157 + 6478 6481 6479 + 6479 6481 6482 + 6482 6480 6479 + 6480 6482 6054 + 6054 6060 6480 + 6480 6060 4374 + 4374 4373 6480 + 4157 4163 6481 + 6481 4163 6483 + 6483 6482 6481 + 6054 6482 6483 + 6483 6055 6054 + 6483 6056 6055 + 6056 6483 4163 + 4163 4162 6056 + 6065 4374 6060 + 4368 4374 6065 + 6065 6484 4368 + 4368 6484 4369 + 6485 4369 6484 + 6486 4369 6485 + 4369 6486 4364 + 4360 4364 6486 + 6484 6065 6064 + 6064 6487 6484 + 6484 6487 6485 + 6488 6485 6487 + 6489 6485 6488 + 6485 6489 6486 + 6486 6489 6490 + 6490 6491 6486 + 6486 6491 4360 + 4353 4360 6491 + 6487 6064 6070 + 6070 6492 6487 + 6487 6492 6488 + 6493 6488 6492 + 6488 6493 6494 + 6494 6495 6488 + 6488 6495 6489 + 6489 6495 6496 + 6496 6490 6489 + 6497 6492 6070 + 6492 6497 6493 + 6498 6493 6497 + 6494 6493 6498 + 6498 6499 6494 + 6494 6499 6500 + 6500 6501 6494 + 6495 6494 6501 + 6501 6496 6495 + 6070 6075 6497 + 6497 6075 6074 + 6074 6502 6497 + 6497 6502 6498 + 6503 6498 6502 + 6498 6503 6504 + 6504 6499 6498 + 6499 6504 6505 + 6505 6500 6499 + 6506 6502 6074 + 6502 6506 6503 + 6507 6503 6506 + 6504 6503 6507 + 6507 6508 6504 + 6504 6508 6509 + 6509 6505 6504 + 6510 6505 6509 + 6500 6505 6510 + 6074 6511 6506 + 6506 6511 6512 + 6512 6513 6506 + 6506 6513 6507 + 6514 6507 6513 + 6507 6514 6515 + 6515 6508 6507 + 6511 6074 6073 + 6073 6080 6511 + 6512 6511 6080 + 6080 6516 6512 + 6517 6512 6516 + 6512 6517 6518 + 6518 6513 6512 + 6513 6518 6514 + 6519 6514 6518 + 6515 6514 6519 + 6085 6516 6080 + 6520 6516 6085 + 6516 6520 6517 + 6521 6517 6520 + 6518 6517 6521 + 6521 6522 6518 + 6518 6522 6519 + 6085 6523 6520 + 6520 6523 6524 + 6524 6525 6520 + 6520 6525 6521 + 6526 6521 6525 + 6521 6526 6527 + 6527 6522 6521 + 6523 6085 6090 + 6090 6528 6523 + 6524 6523 6528 + 6528 6529 6524 + 6530 6524 6529 + 6524 6530 6531 + 6531 6525 6524 + 6525 6531 6526 + 6532 6526 6531 + 6527 6526 6532 + 6528 6090 6089 + 6089 6533 6528 + 6528 6533 6534 + 6534 6529 6528 + 6535 6529 6534 + 6529 6535 6530 + 6536 6530 6535 + 6531 6530 6536 + 6536 6537 6531 + 6531 6537 6532 + 6533 6089 6095 + 6095 6538 6533 + 6534 6533 6538 + 6538 6539 6534 + 6540 6534 6539 + 6534 6540 6535 + 6535 6540 6541 + 6541 6542 6535 + 6535 6542 6536 + 6538 6095 6094 + 6094 6543 6538 + 6538 6543 6544 + 6544 6539 6538 + 6545 6539 6544 + 6539 6545 6540 + 6541 6540 6545 + 6543 6094 6103 + 6103 6546 6543 + 6544 6543 6546 + 6546 6547 6544 + 6548 6544 6547 + 6544 6548 6545 + 6545 6548 6549 + 6549 6550 6545 + 6545 6550 6541 + 6546 6103 6102 + 6102 6551 6546 + 6546 6551 6552 + 6552 6547 6546 + 6553 6547 6552 + 6547 6553 6548 + 6549 6548 6553 + 6551 6102 6111 + 6111 6554 6551 + 6552 6551 6554 + 6554 6555 6552 + 6556 6552 6555 + 6552 6556 6553 + 6553 6556 6557 + 6557 6558 6553 + 6553 6558 6549 + 6554 6111 6110 + 6110 6559 6554 + 6554 6559 6560 + 6560 6555 6554 + 6561 6555 6560 + 6555 6561 6556 + 6557 6556 6561 + 6559 6110 6562 + 6562 6563 6559 + 6560 6559 6563 + 6563 6564 6560 + 6565 6560 6564 + 6560 6565 6561 + 6114 6562 6110 + 6123 6562 6114 + 6563 6562 6123 + 6123 6566 6563 + 6563 6566 6567 + 6567 6564 6563 + 6568 6564 6567 + 6564 6568 6565 + 6569 6565 6568 + 6561 6565 6569 + 6569 6570 6561 + 6561 6570 6557 + 6566 6123 6571 + 6571 6572 6566 + 6567 6566 6572 + 6572 6573 6567 + 6574 6567 6573 + 6567 6574 6568 + 6122 6571 6123 + 6575 6571 6122 + 6572 6571 6575 + 6575 6576 6572 + 6572 6576 6577 + 6577 6573 6572 + 6578 6573 6577 + 6573 6578 6574 + 6579 6574 6578 + 6568 6574 6579 + 6122 6128 6575 + 6575 6128 6580 + 6580 6581 6575 + 6576 6575 6581 + 6581 6582 6576 + 6577 6576 6582 + 6582 6583 6577 + 6584 6577 6583 + 6577 6584 6578 + 6127 6580 6128 + 6580 6127 6585 + 6585 6586 6580 + 6580 6586 6587 + 6587 6581 6580 + 6582 6581 6587 + 6587 6588 6582 + 6582 6588 6589 + 6589 6583 6582 + 6585 6127 6126 + 6126 6590 6585 + 6585 6590 6591 + 6591 6592 6585 + 6586 6585 6592 + 6592 6593 6586 + 6587 6586 6593 + 6593 6594 6587 + 6588 6587 6594 + 6132 6590 6126 + 6590 6132 6595 + 6595 6591 6590 + 6591 6595 6596 + 6596 6597 6591 + 6591 6597 6598 + 6598 6592 6591 + 6593 6592 6598 + 6599 6595 6132 + 6596 6595 6599 + 6599 6600 6596 + 6596 6600 6601 + 6601 6602 6596 + 6597 6596 6602 + 6602 6603 6597 + 6598 6597 6603 + 6132 6604 6599 + 6138 6599 6604 + 6599 6138 6605 + 6605 6600 6599 + 6600 6605 6606 + 6606 6601 6600 + 6131 6604 6132 + 6130 6604 6131 + 6604 6130 6138 + 6605 6138 6137 + 6137 6607 6605 + 6605 6607 6608 + 6608 6606 6605 + 6609 6606 6608 + 6601 6606 6609 + 6609 6610 6601 + 6601 6610 6611 + 6611 6602 6601 + 6603 6602 6611 + 6607 6137 6612 + 6607 6612 6613 + 6613 6608 6607 + 6608 6613 6614 + 6614 6615 6608 + 6608 6615 6609 + 6616 6609 6615 + 6610 6609 6616 + 6612 6137 6136 + 6136 6148 6612 + 6612 6148 6617 + 6617 6613 6612 + 6614 6613 6617 + 6617 6618 6614 + 6619 6614 6618 + 6615 6614 6619 + 6619 6620 6615 + 6615 6620 6616 + 6148 6153 6617 + 6621 6617 6153 + 6621 6618 6617 + 6618 6621 6622 + 6622 6623 6618 + 6618 6623 6619 + 6624 6619 6623 + 6619 6624 6625 + 6625 6620 6619 + 6153 6158 6621 + 6621 6158 6626 + 6626 6622 6621 + 6627 6622 6626 + 6622 6627 6628 + 6628 6623 6622 + 6623 6628 6624 + 6624 6628 6629 + 6629 6630 6624 + 6625 6624 6630 + 6157 6626 6158 + 6631 6626 6157 + 6626 6631 6627 + 6627 6631 6632 + 6632 6633 6627 + 6628 6627 6633 + 6633 6629 6628 + 6634 6629 6633 + 6629 6634 6635 + 6635 6630 6629 + 6157 6163 6631 + 6631 6163 6636 + 6636 6632 6631 + 6637 6632 6636 + 6632 6637 6638 + 6638 6633 6632 + 6633 6638 6634 + 6634 6638 6639 + 6639 6640 6634 + 6635 6634 6640 + 6641 6636 6163 + 6642 6636 6641 + 6636 6642 6637 + 6637 6642 6643 + 6643 6644 6637 + 6638 6637 6644 + 6644 6639 6638 + 6163 6162 6641 + 6645 6641 6162 + 6646 6641 6645 + 6641 6646 6642 + 6642 6646 6647 + 6647 6643 6642 + 6648 6643 6647 + 6643 6648 6649 + 6649 6644 6643 + 6162 6167 6645 + 6650 6645 6167 + 6651 6645 6650 + 6645 6651 6646 + 6646 6651 6652 + 6652 6647 6646 + 6653 6647 6652 + 6647 6653 6648 + 6167 6166 6650 + 6654 6650 6166 + 6655 6650 6654 + 6650 6655 6651 + 6651 6655 6656 + 6656 6652 6651 + 6657 6652 6656 + 6652 6657 6653 + 6166 6171 6654 + 6658 6654 6171 + 6659 6654 6658 + 6654 6659 6655 + 6655 6659 6660 + 6660 6656 6655 + 6661 6656 6660 + 6656 6661 6657 + 6171 6175 6658 + 6662 6658 6175 + 6663 6658 6662 + 6658 6663 6659 + 6659 6663 6664 + 6664 6660 6659 + 6665 6660 6664 + 6660 6665 6661 + 6175 6666 6662 + 6667 6662 6666 + 6668 6662 6667 + 6662 6668 6663 + 6663 6668 6669 + 6669 6664 6663 + 6670 6664 6669 + 6664 6670 6665 + 6174 6666 6175 + 6666 6174 6180 + 6180 6671 6666 + 6666 6671 6667 + 6672 6667 6671 + 6673 6667 6672 + 6667 6673 6668 + 6668 6673 6674 + 6674 6669 6668 + 6675 6669 6674 + 6669 6675 6670 + 6671 6180 6185 + 6185 6676 6671 + 6671 6676 6672 + 6677 6672 6676 + 6678 6672 6677 + 6672 6678 6673 + 6673 6678 6679 + 6679 6674 6673 + 6680 6674 6679 + 6674 6680 6675 + 6676 6185 6681 + 6681 6682 6676 + 6676 6682 6677 + 6683 6677 6682 + 6684 6677 6683 + 6677 6684 6678 + 6678 6684 6685 + 6685 6679 6678 + 6681 6185 6184 + 6686 6681 6184 + 6687 6681 6686 + 6682 6681 6687 + 6687 6688 6682 + 6682 6688 6683 + 6689 6683 6688 + 6690 6683 6689 + 6683 6690 6684 + 6184 6200 6686 + 6199 6686 6200 + 6691 6686 6199 + 6686 6691 6687 + 6692 6687 6691 + 6688 6687 6692 + 6692 6693 6688 + 6688 6693 6689 + 6694 6689 6693 + 6695 6689 6694 + 6689 6695 6690 + 6199 6205 6691 + 6691 6205 6696 + 6696 6697 6691 + 6691 6697 6698 + 6698 6692 6691 + 6699 6692 6698 + 6693 6692 6699 + 6693 6699 6694 + 6209 6696 6205 + 6700 6696 6209 + 6696 6700 6701 + 6701 6697 6696 + 6697 6701 6702 + 6702 6698 6697 + 6703 6698 6702 + 6698 6703 6699 + 6694 6699 6703 + 6209 6214 6700 + 6700 6214 6212 + 6704 6700 6212 + 6701 6700 6704 + 6704 6705 6701 + 6701 6705 6706 + 6706 6707 6701 + 6707 6702 6701 + 6213 6212 6214 + 6429 6453 6430 + 6708 6430 6453 + 6709 6430 6708 + 6430 6709 6425 + 6425 6709 6710 + 6710 6420 6425 + 6453 6458 6708 + 6458 6711 6708 + 6711 6712 6708 + 6713 6708 6712 + 6714 6708 6713 + 6708 6714 6709 + 6710 6709 6714 + 6460 6711 6458 + 6715 6711 6460 + 6711 6715 6716 + 6716 6712 6711 + 6717 6712 6716 + 6712 6717 6713 + 6715 6460 6718 + 6718 6719 6715 + 6715 6719 6720 + 6720 6716 6715 + 6717 6716 6720 + 6720 6721 6717 + 6717 6721 6722 + 6713 6717 6722 + 6723 6718 6460 + 6724 6718 6723 + 6719 6718 6724 + 6719 6724 6725 + 6725 6720 6719 + 6721 6720 6725 + 6721 6725 6726 + 6726 6722 6721 + 4102 6723 6460 + 6727 6723 4102 + 6728 6723 6727 + 6723 6728 6724 + 6724 6728 6726 + 6726 6725 6724 + 4102 4101 6727 + 6729 6727 4101 + 6728 6727 6729 + 6729 6730 6728 + 6728 6730 6726 + 6730 6731 6726 + 6732 6726 6731 + 6732 6722 6726 + 4101 6733 6729 + 6375 6393 6371 + 6393 6734 6371 + 6734 6735 6371 + 6735 6736 6371 + 6736 6737 6371 + 6737 6738 6371 + 6738 6739 6371 + 6740 6371 6739 + 6371 6740 6741 + 6741 6362 6371 + 6742 6734 6393 + 6743 6734 6742 + 6734 6743 6744 + 6744 6735 6734 + 6393 6392 6742 + 6405 6742 6392 + 6745 6742 6405 + 6742 6745 6743 + 6743 6745 6746 + 6746 6747 6743 + 6743 6747 6748 + 6748 6744 6743 + 6749 6744 6748 + 6744 6749 6750 + 6405 6751 6745 + 6745 6751 6746 + 6752 6746 6751 + 6746 6752 6753 + 6753 6747 6746 + 6747 6753 6754 + 6754 6748 6747 + 6404 6751 6405 + 6751 6404 6752 + 6752 6404 6410 + 6410 6755 6752 + 6753 6752 6755 + 6755 6756 6753 + 6754 6753 6756 + 6756 6757 6754 + 6758 6754 6757 + 6748 6754 6758 + 6758 6759 6748 + 6748 6759 6749 + 6760 6755 6410 + 6755 6760 6761 + 6761 6756 6755 + 6756 6761 6762 + 6762 6757 6756 + 6757 6762 6763 + 6763 6764 6757 + 6757 6764 6758 + 6410 6409 6760 + 6760 6409 6415 + 6415 6765 6760 + 6761 6760 6765 + 6765 6766 6761 + 6762 6761 6766 + 6766 6767 6762 + 6763 6762 6767 + 6767 6768 6763 + 6769 6763 6768 + 6764 6763 6769 + 6420 6765 6415 + 6765 6420 6710 + 6710 6766 6765 + 6766 6710 6770 + 6770 6767 6766 + 6767 6770 6771 + 6771 6768 6767 + 6768 6771 6772 + 6772 6773 6768 + 6768 6773 6769 + 6714 6770 6710 + 6771 6770 6714 + 6714 6713 6771 + 6772 6771 6713 + 6722 6772 6713 + 6774 6772 6722 + 6773 6772 6774 + 6774 6775 6773 + 6773 6775 6776 + 6776 6769 6773 + 6777 6769 6776 + 6769 6777 6764 + 6764 6777 6778 + 6778 6758 6764 + 6722 6732 6774 + 6774 6732 6779 + 6779 6780 6774 + 6775 6774 6780 + 6780 6781 6775 + 6775 6781 6782 + 6782 6776 6775 + 6783 6776 6782 + 6776 6783 6777 + 6732 6784 6779 + 4976 6779 6784 + 4981 6779 4976 + 6779 4981 6785 + 6785 6780 6779 + 6781 6780 6785 + 6731 6784 6732 + 6784 6731 6786 + 6784 6786 4976 + 4976 6786 6787 + 6787 4971 4976 + 4966 4971 6787 + 6787 6788 4966 + 4966 6788 6789 + 6786 6731 6730 + 6730 6787 6786 + 6788 6787 6730 + 6730 6729 6788 + 6788 6729 6790 + 6790 6789 6788 + 4986 6785 4981 + 6791 6785 4986 + 6785 6791 6781 + 6781 6791 6792 + 6792 6782 6781 + 6793 6782 6792 + 6782 6793 6783 + 6783 6793 6794 + 6794 6795 6783 + 6777 6783 6795 + 4986 4991 6791 + 6791 4991 6796 + 6796 6792 6791 + 6797 6792 6796 + 6792 6797 6793 + 6793 6797 6798 + 6798 6794 6793 + 6799 6794 6798 + 6794 6799 6800 + 6800 6795 6794 + 4996 6796 4991 + 6801 6796 4996 + 6796 6801 6797 + 6797 6801 6802 + 6802 6798 6797 + 6736 6798 6802 + 6798 6736 6799 + 6799 6736 6735 + 6735 6750 6799 + 6750 6800 6799 + 4996 6803 6801 + 6801 6803 6804 + 6804 6802 6801 + 6737 6802 6804 + 6802 6737 6736 + 6803 4996 4995 + 4995 6805 6803 + 6803 6805 6806 + 6804 6803 6806 + 6806 6807 6804 + 6808 6804 6807 + 6804 6808 6737 + 6737 6808 6809 + 6809 6738 6737 + 6805 4995 4994 + 6805 4994 4993 + 4993 6806 6805 + 5003 6806 4993 + 6806 5003 6810 + 6810 6807 6806 + 6811 6807 6810 + 6807 6811 6808 + 6808 6811 6812 + 6812 6809 6808 + 6813 6809 6812 + 6809 6813 6814 + 6814 6738 6809 + 5007 6810 5003 + 6815 6810 5007 + 6810 6815 6811 + 6811 6815 6816 + 6816 6812 6811 + 6817 6812 6816 + 6812 6817 6813 + 6813 6817 6818 + 6819 6813 6818 + 6814 6813 6819 + 5007 5011 6815 + 6815 5011 6820 + 6820 6816 6815 + 6821 6816 6820 + 6816 6821 6817 + 6817 6821 6822 + 6822 6818 6817 + 5016 6820 5011 + 6823 6820 5016 + 6820 6823 6821 + 6822 6821 6823 + 6823 6824 6822 + 6825 6822 6824 + 6825 6818 6822 + 6818 6825 6826 + 6826 6827 6818 + 6818 6827 6819 + 5016 5021 6823 + 6823 5021 5026 + 5026 6824 6823 + 6828 6824 5026 + 6824 6828 6825 + 6825 6828 6829 + 6829 6830 6825 + 6830 6826 6825 + 6831 6826 6830 + 6826 6831 6827 + 6827 6831 6832 + 6832 6819 6827 + 5026 6833 6828 + 6828 6833 6834 + 6834 6829 6828 + 6835 6829 6834 + 6829 6835 6836 + 6836 6830 6829 + 6833 5026 5025 + 5025 5031 6833 + 6834 6833 5031 + 5031 6837 6834 + 6838 6834 6837 + 6834 6838 6835 + 6835 6838 6839 + 6839 6840 6835 + 6835 6840 6841 + 6841 6836 6835 + 5035 6837 5031 + 6842 6837 5035 + 6837 6842 6838 + 6839 6838 6842 + 6842 6843 6839 + 6844 6839 6843 + 6839 6844 6845 + 6845 6840 6839 + 6840 6845 6846 + 6846 6841 6840 + 5035 6847 6842 + 6842 6847 6848 + 6848 6843 6842 + 6849 6843 6848 + 6843 6849 6844 + 6850 6844 6849 + 6845 6844 6850 + 6847 5035 5038 + 5038 5043 6847 + 6848 6847 5043 + 5043 6851 6848 + 6852 6848 6851 + 6848 6852 6849 + 6849 6852 6853 + 6853 6854 6849 + 6849 6854 6850 + 5047 6851 5043 + 6855 6851 5047 + 6851 6855 6852 + 6853 6852 6855 + 6855 6856 6853 + 6857 6853 6856 + 6853 6857 6858 + 6858 6854 6853 + 6854 6858 6859 + 6859 6850 6854 + 5047 5055 6855 + 6855 5055 6860 + 6860 6856 6855 + 6861 6856 6860 + 6856 6861 6857 + 6857 6861 6862 + 6862 6863 6857 + 6858 6857 6863 + 6860 5055 5054 + 5054 3408 6860 + 3407 6860 3408 + 6860 3407 6861 + 6861 3407 3406 + 3406 6862 6861 + 3406 6864 6862 + 3409 3408 5054 + 6750 6735 6865 + 6795 6778 6777 + 6866 6778 6795 + 6778 6866 6759 + 6759 6758 6778 + 6795 6800 6866 + 6866 6800 6750 + 6750 6749 6866 + 6749 6759 6866 + 4869 4868 5353 + 5353 4868 4867 + 4867 6867 5353 + 6867 6868 5353 + 5349 5353 6868 + 6868 5343 5349 + 5343 6868 6869 + 6869 5344 5343 + 6870 6867 4867 + 6871 6867 6870 + 6867 6871 6869 + 6869 6868 6867 + 4867 4873 6870 + 6870 4873 4878 + 4878 6872 6870 + 6871 6870 6872 + 6872 6873 6871 + 6869 6871 6873 + 6873 6874 6869 + 6874 6875 6869 + 6875 6876 6869 + 5344 6869 6876 + 4955 6872 4878 + 6872 4955 6877 + 6877 6873 6872 + 6873 6877 6878 + 6878 6874 6873 + 6879 6874 6878 + 6874 6879 6880 + 6880 6875 6874 + 6877 4955 6881 + 6881 6882 6877 + 6878 6877 6882 + 6882 6883 6878 + 6884 6878 6883 + 6878 6884 6879 + 4341 6881 4955 + 4345 6881 4341 + 4345 6882 6881 + 6882 4345 4350 + 4350 6883 6882 + 6883 4350 6885 + 6885 6886 6883 + 6883 6886 6884 + 6887 6884 6886 + 6879 6884 6887 + 6887 6888 6879 + 6879 6888 6889 + 6889 6880 6879 + 6885 4350 4349 + 4349 6890 6885 + 6891 6885 6890 + 6886 6885 6891 + 6891 6892 6886 + 6886 6892 6887 + 6893 6887 6892 + 6887 6893 6894 + 6894 6888 6887 + 6890 4349 4348 + 4348 6895 6890 + 6890 6895 6896 + 6896 6897 6890 + 6890 6897 6891 + 6898 6891 6897 + 6891 6898 6899 + 6899 6892 6891 + 6892 6899 6893 + 6895 4348 6900 + 6900 6901 6895 + 6896 6895 6901 + 6901 6902 6896 + 6903 6896 6902 + 6896 6903 6904 + 6904 6897 6896 + 6897 6904 6898 + 4353 6900 4348 + 6491 6900 4353 + 6900 6491 6490 + 6490 6901 6900 + 6901 6490 6496 + 6496 6902 6901 + 6905 6902 6496 + 6902 6905 6903 + 6906 6903 6905 + 6904 6903 6906 + 6906 6907 6904 + 6904 6907 6908 + 6908 6898 6904 + 6899 6898 6908 + 6496 6501 6905 + 6905 6501 6500 + 6500 6909 6905 + 6905 6909 6906 + 6910 6906 6909 + 6906 6910 6911 + 6911 6907 6906 + 6907 6911 6912 + 6912 6908 6907 + 6510 6909 6500 + 6909 6510 6910 + 6913 6910 6510 + 6911 6910 6913 + 6913 6914 6911 + 6911 6914 6915 + 6915 6912 6911 + 6916 6912 6915 + 6908 6912 6916 + 6916 6917 6908 + 6908 6917 6899 + 6510 6918 6913 + 6919 6913 6918 + 6913 6919 6920 + 6920 6914 6913 + 6914 6920 6921 + 6921 6915 6914 + 6509 6918 6510 + 6922 6918 6509 + 6918 6922 6919 + 6923 6919 6922 + 6920 6919 6923 + 6923 6924 6920 + 6920 6924 6925 + 6925 6921 6920 + 6926 6921 6925 + 6915 6921 6926 + 6509 6927 6922 + 6922 6927 6928 + 6928 6929 6922 + 6922 6929 6923 + 6930 6923 6929 + 6923 6930 6931 + 6931 6924 6923 + 6927 6509 6508 + 6508 6515 6927 + 6928 6927 6515 + 6515 6932 6928 + 6933 6928 6932 + 6928 6933 6934 + 6934 6929 6928 + 6929 6934 6930 + 6935 6930 6934 + 6931 6930 6935 + 6519 6932 6515 + 6936 6932 6519 + 6932 6936 6933 + 6937 6933 6936 + 6934 6933 6937 + 6937 6938 6934 + 6934 6938 6935 + 6519 6939 6936 + 6936 6939 6940 + 6940 6941 6936 + 6936 6941 6937 + 6942 6937 6941 + 6937 6942 6943 + 6943 6938 6937 + 6939 6519 6522 + 6522 6527 6939 + 6940 6939 6527 + 6527 6944 6940 + 6945 6940 6944 + 6940 6945 6946 + 6946 6941 6940 + 6941 6946 6942 + 6947 6942 6946 + 6943 6942 6947 + 6532 6944 6527 + 6948 6944 6532 + 6944 6948 6945 + 6949 6945 6948 + 6946 6945 6949 + 6949 6950 6946 + 6946 6950 6947 + 6951 6947 6950 + 6952 6947 6951 + 6947 6952 6943 + 6532 6953 6948 + 6948 6953 6954 + 6954 6955 6948 + 6948 6955 6949 + 6956 6949 6955 + 6950 6949 6956 + 6956 6957 6950 + 6950 6957 6951 + 6953 6532 6537 + 6537 6958 6953 + 6954 6953 6958 + 6958 6959 6954 + 6960 6954 6959 + 6955 6954 6960 + 6960 6961 6955 + 6955 6961 6956 + 6962 6956 6961 + 6957 6956 6962 + 6958 6537 6536 + 6536 6963 6958 + 6958 6963 6964 + 6964 6959 6958 + 6959 6964 6965 + 6965 6966 6959 + 6959 6966 6960 + 6967 6960 6966 + 6961 6960 6967 + 6963 6536 6542 + 6542 6968 6963 + 6964 6963 6968 + 6968 6969 6964 + 6965 6964 6969 + 6969 6970 6965 + 6971 6965 6970 + 6966 6965 6971 + 6971 6972 6966 + 6966 6972 6967 + 6968 6542 6541 + 6541 6973 6968 + 6968 6973 6974 + 6974 6969 6968 + 6969 6974 6975 + 6975 6970 6969 + 6970 6975 6976 + 6976 6977 6970 + 6970 6977 6971 + 6973 6541 6550 + 6550 6978 6973 + 6974 6973 6978 + 6978 6979 6974 + 6975 6974 6979 + 6979 6980 6975 + 6976 6975 6980 + 6978 6550 6549 + 6549 6981 6978 + 6978 6981 6982 + 6982 6979 6978 + 6982 6980 6979 + 6980 6982 6983 + 6983 6984 6980 + 6980 6984 6976 + 6981 6549 6558 + 6558 6985 6981 + 6982 6981 6985 + 6985 6983 6982 + 6986 6983 6985 + 6983 6986 6987 + 6987 6984 6983 + 6984 6987 6988 + 6988 6989 6984 + 6984 6989 6976 + 6985 6558 6557 + 6557 6990 6985 + 6985 6990 6986 + 6986 6990 6991 + 6991 6992 6986 + 6987 6986 6992 + 6992 6993 6987 + 6988 6987 6993 + 6990 6557 6570 + 6570 6991 6990 + 6991 6570 6569 + 6569 6994 6991 + 6991 6994 6995 + 6995 6992 6991 + 6995 6993 6992 + 6993 6995 6996 + 6996 6997 6993 + 6993 6997 6988 + 6994 6569 6998 + 6998 6999 6994 + 6995 6994 6999 + 6999 6996 6995 + 7000 6996 6999 + 6996 7000 7001 + 7001 6997 6996 + 6568 6998 6569 + 6579 6998 6568 + 6999 6998 6579 + 6579 7002 6999 + 6999 7002 7000 + 7000 7002 7003 + 7003 7004 7000 + 7001 7000 7004 + 7004 7005 7001 + 7006 7001 7005 + 6997 7001 7006 + 7002 6579 7007 + 7007 7003 7002 + 7003 7007 7008 + 7008 7009 7003 + 7003 7009 7010 + 7010 7004 7003 + 7010 7005 7004 + 6578 7007 6579 + 7008 7007 6578 + 6578 6584 7008 + 7008 6584 7011 + 7011 7012 7008 + 7009 7008 7012 + 7012 7013 7009 + 7010 7009 7013 + 7013 7014 7010 + 7005 7010 7014 + 7014 7015 7005 + 7005 7015 7006 + 6583 7011 6584 + 7011 6583 6589 + 6589 7016 7011 + 7011 7016 7017 + 7017 7012 7011 + 7013 7012 7017 + 7017 7018 7013 + 7013 7018 7019 + 7019 7014 7013 + 7014 7019 7020 + 7020 7015 7014 + 7016 6589 7021 + 7021 7022 7016 + 7017 7016 7022 + 7022 7023 7017 + 7018 7017 7023 + 7023 7024 7018 + 7019 7018 7024 + 7024 7025 7019 + 7020 7019 7025 + 7026 7021 6589 + 7027 7021 7026 + 7022 7021 7027 + 7027 7028 7022 + 7022 7028 7029 + 7029 7023 7022 + 7024 7023 7029 + 6589 6588 7026 + 6594 7026 6588 + 7026 6594 7030 + 7030 7031 7026 + 7026 7031 7027 + 7027 7031 7032 + 7032 7033 7027 + 7028 7027 7033 + 7033 7034 7028 + 7029 7028 7034 + 7030 6594 6593 + 6593 7035 7030 + 7030 7035 7036 + 7036 7037 7030 + 7031 7030 7037 + 7037 7032 7031 + 6598 7035 6593 + 7035 6598 7038 + 7038 7036 7035 + 7036 7038 7039 + 7039 7040 7036 + 7036 7040 7041 + 7041 7037 7036 + 7032 7037 7041 + 6603 7038 6598 + 7039 7038 6603 + 6603 7042 7039 + 7039 7042 7043 + 7043 7044 7039 + 7040 7039 7044 + 7044 7045 7040 + 7041 7040 7045 + 6611 7042 6603 + 7042 6611 7046 + 7046 7043 7042 + 7043 7046 7047 + 7047 7048 7043 + 7043 7048 7049 + 7049 7044 7043 + 7045 7044 7049 + 7050 7046 6611 + 7047 7046 7050 + 7050 7051 7047 + 7047 7051 7052 + 7052 7053 7047 + 7048 7047 7053 + 7053 7054 7048 + 7049 7048 7054 + 6611 6610 7050 + 6616 7050 6610 + 7051 7050 6616 + 6616 7055 7051 + 7051 7055 7056 + 7056 7052 7051 + 7057 7052 7056 + 7052 7057 7058 + 7058 7053 7052 + 7054 7053 7058 + 7055 6616 6620 + 6620 6625 7055 + 7055 6625 7059 + 7059 7056 7055 + 7060 7056 7059 + 7056 7060 7057 + 7057 7060 7061 + 7061 7062 7057 + 7058 7057 7062 + 6630 7059 6625 + 7063 7059 6630 + 7059 7063 7060 + 7060 7063 7064 + 7064 7061 7060 + 7065 7061 7064 + 7061 7065 7066 + 7066 7062 7061 + 6630 6635 7063 + 7063 6635 7067 + 7067 7064 7063 + 7068 7064 7067 + 7064 7068 7065 + 7065 7068 7069 + 7069 7070 7065 + 7066 7065 7070 + 6640 7067 6635 + 7071 7067 6640 + 7067 7071 7068 + 7068 7071 7072 + 7072 7069 7068 + 7073 7069 7072 + 7069 7073 7074 + 7074 7070 7069 + 6640 7075 7071 + 7071 7075 7076 + 7076 7072 7071 + 7077 7072 7076 + 7072 7077 7073 + 7073 7077 7078 + 7078 7079 7073 + 7074 7073 7079 + 7075 6640 6639 + 6639 7080 7075 + 7075 7080 7081 + 7081 7076 7075 + 7082 7076 7081 + 7076 7082 7077 + 7077 7082 7083 + 7083 7078 7077 + 7080 6639 6644 + 6644 6649 7080 + 7080 6649 7084 + 7084 7081 7080 + 7085 7081 7084 + 7081 7085 7082 + 7082 7085 7086 + 7086 7083 7082 + 7087 7083 7086 + 7083 7087 7088 + 7088 7078 7083 + 7089 7084 6649 + 7090 7084 7089 + 7084 7090 7085 + 7085 7090 7091 + 7091 7086 7085 + 7092 7086 7091 + 7086 7092 7087 + 6649 6648 7089 + 7093 7089 6648 + 7094 7089 7093 + 7089 7094 7090 + 7090 7094 7095 + 7095 7091 7090 + 7096 7091 7095 + 7091 7096 7092 + 6648 6653 7093 + 7097 7093 6653 + 7098 7093 7097 + 7093 7098 7094 + 7094 7098 7099 + 7099 7095 7094 + 7100 7095 7099 + 7095 7100 7096 + 6653 6657 7097 + 7101 7097 6657 + 7102 7097 7101 + 7097 7102 7098 + 7098 7102 7103 + 7103 7099 7098 + 7104 7099 7103 + 7099 7104 7100 + 6657 6661 7101 + 7105 7101 6661 + 7106 7101 7105 + 7101 7106 7102 + 7102 7106 7107 + 7107 7103 7102 + 7108 7103 7107 + 7103 7108 7104 + 6661 6665 7105 + 7109 7105 6665 + 7110 7105 7109 + 7105 7110 7106 + 7106 7110 7111 + 7111 7107 7106 + 7112 7107 7111 + 7107 7112 7108 + 6665 6670 7109 + 7113 7109 6670 + 7114 7109 7113 + 7109 7114 7110 + 7110 7114 7115 + 7115 7111 7110 + 7116 7111 7115 + 7111 7116 7112 + 6670 6675 7113 + 7117 7113 6675 + 7118 7113 7117 + 7113 7118 7114 + 7114 7118 7119 + 7119 7115 7114 + 7120 7115 7119 + 7115 7120 7116 + 6675 6680 7117 + 7121 7117 6680 + 7122 7117 7121 + 7117 7122 7118 + 7118 7122 7123 + 7123 7119 7118 + 7124 7119 7123 + 7119 7124 7120 + 6680 7125 7121 + 7126 7121 7125 + 7127 7121 7126 + 7121 7127 7122 + 7122 7127 7128 + 7128 7123 7122 + 7129 7123 7128 + 7123 7129 7124 + 6679 7125 6680 + 7125 6679 6685 + 6685 7130 7125 + 7125 7130 7126 + 7131 7126 7130 + 7132 7126 7131 + 7126 7132 7127 + 7127 7132 7133 + 7133 7128 7127 + 7134 7128 7133 + 7128 7134 7129 + 7130 6685 7135 + 7135 7136 7130 + 7130 7136 7131 + 7137 7131 7136 + 7138 7131 7137 + 7131 7138 7132 + 7132 7138 7139 + 7139 7133 7132 + 7135 6685 6684 + 6684 6690 7135 + 7140 7135 6690 + 7136 7135 7140 + 7140 7141 7136 + 7136 7141 7137 + 7142 7137 7141 + 6287 7137 7142 + 7137 6287 7138 + 7138 6287 6286 + 6286 7139 7138 + 6690 6695 7140 + 7143 7140 6695 + 7141 7140 7143 + 7143 7144 7141 + 7141 7144 7142 + 7145 7142 7144 + 6282 7142 7145 + 7142 6282 6287 + 6695 7146 7143 + 7147 7143 7146 + 7144 7143 7147 + 7147 7148 7144 + 7144 7148 7145 + 6268 7145 7148 + 6272 7145 6268 + 7145 6272 6282 + 6694 7146 6695 + 7146 6694 7149 + 7149 7150 7146 + 7146 7150 7147 + 7151 7147 7150 + 7148 7147 7151 + 7151 6264 7148 + 7148 6264 6268 + 6703 7149 6694 + 7152 7149 6703 + 7150 7149 7152 + 7152 7153 7150 + 7150 7153 7151 + 6260 7151 7153 + 6264 7151 6260 + 6703 7154 7152 + 7152 7154 7155 + 7155 7156 7152 + 7153 7152 7156 + 7156 6255 7153 + 7153 6255 6260 + 6702 7154 6703 + 7154 6702 6707 + 6707 7155 7154 + 7155 6707 7157 + 7155 7157 6250 + 6250 7156 7155 + 6255 7156 6250 + 7157 6707 6706 + 6706 6245 7157 + 6250 7157 6245 + 6245 6706 6240 + 6240 6706 6705 + 6705 7158 6240 + 6240 7158 6228 + 7159 6228 7158 + 6228 7159 6219 + 6219 7159 6212 + 6212 7159 6704 + 7158 6705 6704 + 7158 6704 7159 + 6292 7139 6286 + 7139 6292 7160 + 7160 7133 7139 + 7133 7160 7134 + 7134 7160 7161 + 7161 7162 7134 + 7129 7134 7162 + 7160 6292 6291 + 6291 7161 7160 + 7161 6291 6290 + 6290 7163 7161 + 7161 7163 7164 + 7164 7162 7161 + 7165 7162 7164 + 7162 7165 7129 + 7124 7129 7165 + 7165 7166 7124 + 7120 7124 7166 + 7163 6290 6296 + 6296 7167 7163 + 7163 7167 7168 + 7168 7164 7163 + 7169 7164 7168 + 7164 7169 7165 + 7165 7169 7170 + 7170 7166 7165 + 7171 7166 7170 + 7166 7171 7120 + 7116 7120 7171 + 7167 6296 7172 + 7172 7173 7167 + 7167 7173 7174 + 7174 7168 7167 + 7175 7168 7174 + 7168 7175 7169 + 7169 7175 7176 + 7176 7170 7169 + 7172 6296 6295 + 6295 7177 7172 + 7172 7177 7178 + 7178 7179 7172 + 7173 7172 7179 + 7179 7180 7173 + 7174 7173 7180 + 6301 7177 6295 + 7177 6301 7181 + 7181 7178 7177 + 7182 7178 7181 + 7178 7182 7183 + 7183 7179 7178 + 7179 7183 7184 + 7184 7180 7179 + 6305 7181 6301 + 6310 7181 6305 + 7181 6310 7182 + 7182 6310 7185 + 7185 7186 7182 + 7183 7182 7186 + 7186 7187 7183 + 7184 7183 7187 + 7187 7188 7184 + 7189 7184 7188 + 7180 7184 7189 + 6309 7185 6310 + 7190 7185 6309 + 7185 7190 7191 + 7191 7186 7185 + 7186 7191 7192 + 7192 7187 7186 + 7187 7192 7193 + 7193 7188 7187 + 6309 6314 7190 + 7190 6314 7194 + 7194 7195 7190 + 7191 7190 7195 + 7195 7196 7191 + 7192 7191 7196 + 7196 7197 7192 + 7193 7192 7197 + 6318 7194 6314 + 7198 7194 6318 + 7194 7198 7199 + 7199 7195 7194 + 7195 7199 7200 + 7200 7196 7195 + 7196 7200 7201 + 7201 7197 7196 + 6318 6323 7198 + 7198 6323 7202 + 7202 7203 7198 + 7199 7198 7203 + 7203 7204 7199 + 7200 7199 7204 + 7204 7205 7200 + 7201 7200 7205 + 7206 7202 6323 + 7207 7202 7206 + 7202 7207 7208 + 7208 7203 7202 + 7203 7208 7209 + 7209 7204 7203 + 7204 7209 7210 + 7210 7205 7204 + 6323 6322 7206 + 6328 7206 6322 + 7211 7206 6328 + 7206 7211 7207 + 7212 7207 7211 + 7208 7207 7212 + 7212 7213 7208 + 7208 7213 7214 + 7214 7209 7208 + 7210 7209 7214 + 6328 6333 7211 + 7211 6333 7215 + 7215 7216 7211 + 7211 7216 7212 + 7217 7212 7216 + 7213 7212 7217 + 7217 7218 7213 + 7213 7218 7219 + 7219 7214 7213 + 7215 6333 6337 + 6337 7220 7215 + 7221 7215 7220 + 7216 7215 7221 + 7221 7222 7216 + 7216 7222 7217 + 7223 7217 7222 + 7218 7217 7223 + 7223 7224 7218 + 7219 7218 7224 + 7225 7220 6337 + 7220 7225 7226 + 7220 7226 7221 + 7221 7226 7227 + 7227 7228 7221 + 7222 7221 7228 + 7228 7229 7222 + 7222 7229 7223 + 6337 6346 7225 + 7230 7225 6346 + 7226 7225 7230 + 7230 7227 7226 + 7227 7230 7231 + 7227 7231 7232 + 7232 7228 7227 + 7229 7228 7232 + 7232 7233 7229 + 7229 7233 7234 + 7234 7223 7229 + 7224 7223 7234 + 7235 7230 6346 + 7231 7230 7235 + 7235 7236 7231 + 7232 7231 7236 + 7237 7232 7236 + 7233 7232 7237 + 7237 7238 7233 + 7234 7233 7238 + 6345 7235 6346 + 7235 6345 7239 + 7239 7236 7235 + 7236 7239 7240 + 7240 7241 7236 + 7236 7241 7237 + 7242 7237 7241 + 7237 7242 7243 + 7243 7238 7237 + 7239 6345 7244 + 7244 7245 7239 + 7239 7245 7246 + 7246 7240 7239 + 7247 7240 7246 + 7240 7247 7248 + 7248 7241 7240 + 7241 7248 7242 + 7249 7244 6345 + 7250 7244 7249 + 7245 7244 7250 + 7250 7251 7245 + 7245 7251 7252 + 7252 7246 7245 + 7253 7246 7252 + 7246 7253 7247 + 6350 7249 6345 + 6359 7249 6350 + 7249 6359 7254 + 7249 7254 7250 + 7250 7254 7255 + 7255 7256 7250 + 7251 7250 7256 + 7256 7257 7251 + 7252 7251 7257 + 7254 6359 6358 + 6358 7255 7254 + 7255 6358 6357 + 6357 7258 7255 + 7255 7258 7259 + 7259 7256 7255 + 7257 7256 7259 + 7259 7260 7257 + 7257 7260 7261 + 7261 7262 7257 + 7257 7262 7252 + 7258 6357 7263 + 7263 7264 7258 + 7259 7258 7264 + 7264 7265 7259 + 7260 7259 7265 + 7265 7266 7260 + 7261 7260 7266 + 6362 7263 6357 + 7267 7263 6362 + 7264 7263 7267 + 7267 7268 7264 + 7264 7268 7269 + 7269 7265 7264 + 7266 7265 7269 + 6362 6741 7267 + 7267 6741 7270 + 7270 7271 7267 + 7268 7267 7271 + 7271 7272 7268 + 7269 7268 7272 + 7272 7273 7269 + 7274 7269 7273 + 7269 7274 7266 + 7275 7270 6741 + 7270 7275 7276 + 7276 7277 7270 + 7270 7277 7278 + 7278 7271 7270 + 7272 7271 7278 + 6741 6740 7275 + 7275 6740 7279 + 6740 7280 7279 + 6739 7280 6740 + 7281 7280 6739 + 7280 7281 7282 + 7282 7283 7280 + 7280 7283 7284 + 6739 7285 7281 + 7281 7285 7286 + 7286 7287 7281 + 7281 7287 7288 + 7288 7282 7281 + 7289 7282 7288 + 7283 7282 7289 + 7285 6739 6738 + 6738 6814 7285 + 7286 7285 6814 + 6814 7290 7286 + 7291 7286 7290 + 7286 7291 7292 + 7292 7287 7286 + 7287 7292 7293 + 7293 7288 7287 + 6819 7290 6814 + 7294 7290 6819 + 7290 7294 7291 + 7295 7291 7294 + 7292 7291 7295 + 7295 7296 7292 + 7292 7296 7297 + 7297 7293 7292 + 7298 7293 7297 + 7288 7293 7298 + 6819 6832 7294 + 7294 6832 7299 + 7299 7300 7294 + 7294 7300 7295 + 7301 7295 7300 + 7295 7301 7302 + 7302 7296 7295 + 7296 7302 7303 + 7303 7297 7296 + 7299 6832 6831 + 6831 7304 7299 + 7305 7299 7304 + 7299 7305 7306 + 7306 7300 7299 + 7300 7306 7301 + 7307 7301 7306 + 7302 7301 7307 + 7307 7308 7302 + 7303 7302 7308 + 6830 7304 6831 + 7309 7304 6830 + 7304 7309 7305 + 7310 7305 7309 + 7306 7305 7310 + 7310 7311 7306 + 7306 7311 7307 + 7312 7307 7311 + 7312 7308 7307 + 6830 6836 7309 + 7309 6836 6841 + 6841 7313 7309 + 7309 7313 7310 + 7314 7310 7313 + 7310 7314 7315 + 7315 7311 7310 + 7311 7315 7312 + 7316 7313 6841 + 7313 7316 7314 + 7317 7314 7316 + 7315 7314 7317 + 7317 7318 7315 + 7312 7315 7318 + 6841 6846 7316 + 7316 6846 7319 + 7319 7320 7316 + 7316 7320 7317 + 7321 7317 7320 + 7321 7318 7317 + 7318 7321 7322 + 7322 7323 7318 + 7318 7323 7312 + 7319 6846 6845 + 6845 7324 7319 + 7325 7319 7324 + 7319 7325 7326 + 7326 7320 7319 + 7320 7326 7321 + 7321 7326 7327 + 7327 7328 7321 + 7328 7322 7321 + 6850 7324 6845 + 7329 7324 6850 + 7324 7329 7325 + 7330 7325 7329 + 7326 7325 7330 + 7330 7327 7326 + 7331 7327 7330 + 7327 7331 247 + 247 7328 7327 + 7328 247 7332 + 6850 6859 7329 + 7329 6859 7333 + 7333 7334 7329 + 7329 7334 7330 + 7335 7330 7334 + 7330 7335 7331 + 7333 6859 6858 + 6858 7336 7333 + 7337 7333 7336 + 7333 7337 7338 + 7338 7334 7333 + 7334 7338 7335 + 7335 7338 7339 + 7339 7340 7335 + 7331 7335 7340 + 6863 7336 6858 + 7341 7336 6863 + 7336 7341 7337 + 7342 7337 7341 + 7338 7337 7342 + 7342 7339 7338 + 7342 7343 7339 + 7339 7343 7344 + 7344 7340 7339 + 6863 7345 7341 + 7341 7345 3394 + 3394 7346 7341 + 7341 7346 7342 + 7346 7347 7342 + 7343 7342 7347 + 7345 6863 6862 + 6862 3410 7345 + 3394 7345 3410 + 7348 247 7331 + 7331 7349 7348 + 7349 7350 7348 + 7351 7350 7349 + 7340 7349 7331 + 7352 7349 7340 + 7349 7352 7351 + 7353 7351 7352 + 7354 7351 7353 + 7351 7354 7355 + 7355 7354 7356 + 7356 248 7355 + 7340 7344 7352 + 7352 7344 7357 + 7357 7358 7352 + 7352 7358 7359 + 7359 7353 7352 + 7360 7353 7359 + 7360 7361 7353 + 7353 7361 7354 + 7356 7354 7361 + 7357 7344 7343 + 7362 7357 7343 + 7363 7357 7362 + 7358 7357 7363 + 7363 7364 7358 + 7358 7364 7365 + 7365 7359 7358 + 7366 7359 7365 + 7359 7366 7360 + 7343 7367 7362 + 7368 7362 7367 + 7362 7368 7369 + 7369 7370 7362 + 7362 7370 7363 + 7347 7367 7343 + 7371 7367 7347 + 7367 7371 7368 + 7368 7371 7372 + 7372 7373 7368 + 7373 7374 7368 + 7369 7368 7374 + 7371 7347 7346 + 7346 7372 7371 + 7372 7346 3394 + 3394 3393 7372 + 7372 3393 3392 + 3392 7373 7372 + 7373 3392 3399 + 3399 7375 7373 + 7373 7375 7376 + 7376 7374 7373 + 7377 7374 7376 + 7374 7377 7369 + 7369 7377 7378 + 7378 7379 7369 + 7370 7369 7379 + 7375 3399 7380 + 7380 7381 7375 + 7376 7375 7381 + 7381 7382 7376 + 7377 7376 7382 + 7382 7378 7377 + 7383 7378 7382 + 7378 7383 7384 + 7384 7379 7378 + 7380 3399 7385 + 7385 7386 7380 + 7387 7380 7386 + 7380 7387 7388 + 7388 7381 7380 + 7381 7388 7389 + 7389 7382 7381 + 7382 7389 7383 + 3399 3398 7385 + 3397 7385 3398 + 7390 7385 3397 + 7385 7390 7391 + 7391 7386 7385 + 7391 7392 7386 + 7386 7392 7387 + 7393 7387 7392 + 7388 7387 7393 + 7390 3397 7394 + 7394 7395 7390 + 7390 7395 7396 + 7396 7397 7390 + 7397 7391 7390 + 7392 7391 7397 + 7397 7398 7392 + 7392 7398 7393 + 3396 7394 3397 + 7399 7394 3396 + 7395 7394 7399 + 7399 7400 7395 + 7395 7400 7401 + 7401 7396 7395 + 7402 7396 7401 + 7396 7402 7403 + 7403 7397 7396 + 3396 7404 7399 + 7399 7404 7405 + 7405 7406 7399 + 7400 7399 7406 + 7406 7407 7400 + 7401 7400 7407 + 7408 7404 3396 + 7404 7408 7409 + 7409 7405 7404 + 7410 7405 7409 + 7405 7410 7411 + 7411 7406 7405 + 7407 7406 7411 + 7411 7412 7407 + 7407 7412 7413 + 7413 7414 7407 + 7407 7414 7401 + 7410 7409 7415 + 7415 7416 7410 + 7411 7410 7416 + 7416 7417 7411 + 7412 7411 7417 + 7417 7418 7412 + 7413 7412 7418 + 7418 7419 7413 + 7420 7413 7419 + 7413 7420 7421 + 7421 7414 7413 + 7422 7417 7416 + 7418 7417 7422 + 7422 7423 7418 + 7418 7423 7424 + 7424 7419 7418 + 7425 7419 7424 + 7419 7425 7420 + 7426 7420 7425 + 7421 7420 7426 + 7416 7427 7422 + 7428 7422 7427 + 7423 7422 7428 + 7428 7429 7423 + 7424 7423 7429 + 7429 7430 7424 + 7431 7424 7430 + 7424 7431 7425 + 7427 7416 7432 + 7427 7433 7428 + 7434 7428 7433 + 7428 7434 7435 + 7435 7429 7428 + 7429 7435 7436 + 7436 7430 7429 + 7437 7430 7436 + 7430 7437 7431 + 7438 7431 7437 + 7425 7431 7438 + 7433 7439 7434 + 7440 7434 7439 + 7435 7434 7440 + 7440 7441 7435 + 7435 7441 7442 + 7442 7436 7435 + 7443 7436 7442 + 7436 7443 7437 + 7444 7440 7439 + 7445 7440 7444 + 7440 7445 7441 + 7441 7445 7446 + 7446 7442 7441 + 7447 7442 7446 + 7442 7447 7443 + 7448 7443 7447 + 7437 7443 7448 + 7448 7449 7437 + 7437 7449 7438 + 7444 7450 7445 + 7445 7450 1026 + 7446 7445 1026 + 1034 7446 1026 + 1039 7446 1034 + 7446 1039 7447 + 7451 7450 7444 + 7447 1039 1038 + 1038 7452 7447 + 7447 7452 7448 + 7453 7448 7452 + 7448 7453 7454 + 7454 7449 7448 + 7449 7454 7455 + 7455 7438 7449 + 1044 7452 1038 + 7452 1044 7453 + 7456 7453 1044 + 7454 7453 7456 + 7456 7457 7454 + 7454 7457 7458 + 7458 7455 7454 + 7459 7455 7458 + 7438 7455 7459 + 1044 1043 7456 + 1049 7456 1043 + 7456 1049 7460 + 7460 7457 7456 + 7457 7460 7461 + 7461 7458 7457 + 7458 7461 7462 + 7462 7463 7458 + 7458 7463 7459 + 7460 1049 1048 + 1048 7464 7460 + 7460 7464 7465 + 7465 7461 7460 + 7462 7461 7465 + 7465 7466 7462 + 7462 7466 7467 + 7467 7468 7462 + 7463 7462 7468 + 1056 7464 1048 + 7464 1056 7469 + 7469 7465 7464 + 7465 7469 7470 + 7470 7466 7465 + 7466 7470 7471 + 7471 7467 7466 + 7472 7469 1056 + 7470 7469 7472 + 7472 7473 7470 + 7471 7470 7473 + 7473 7474 7471 + 7475 7471 7474 + 7467 7471 7475 + 1056 1060 7472 + 1069 7472 1060 + 7473 7472 1069 + 1069 7476 7473 + 7473 7476 7477 + 7477 7474 7473 + 7478 7474 7477 + 7474 7478 7475 + 7479 7475 7478 + 7480 7475 7479 + 7475 7480 7467 + 7476 1069 7481 + 7481 7482 7476 + 7476 7482 7483 + 7483 7477 7476 + 7484 7477 7483 + 7477 7484 7478 + 1068 7481 1069 + 1074 7481 1068 + 7481 1074 1079 + 1079 7482 7481 + 7482 1079 7485 + 7485 7483 7482 + 7483 7485 7486 + 7486 7487 7483 + 7483 7487 7484 + 7488 7485 1079 + 7486 7485 7488 + 7488 7489 7486 + 7490 7486 7489 + 7487 7486 7490 + 7490 7491 7487 + 7484 7487 7491 + 7492 7488 1079 + 7493 7488 7492 + 7489 7488 7493 + 7493 7494 7489 + 7489 7494 7495 + 7495 7496 7489 + 7489 7496 7490 + 1079 1078 7492 + 7497 7492 1078 + 7492 7497 7498 + 7498 7499 7492 + 7492 7499 7493 + 7493 7499 7500 + 7500 7501 7493 + 7494 7493 7501 + 1078 1077 7497 + 7497 1077 1084 + 1084 7502 7497 + 7498 7497 7502 + 7502 7503 7498 + 7498 7503 7504 + 7504 7505 7498 + 7499 7498 7505 + 7505 7500 7499 + 7506 7502 1084 + 7502 7506 7507 + 7507 7503 7502 + 7503 7507 7508 + 7508 7504 7503 + 7508 7509 7504 + 7504 7509 7510 + 7510 7505 7504 + 7500 7505 7510 + 1084 1083 7506 + 7511 7506 1083 + 7507 7506 7511 + 7511 7512 7507 + 7507 7512 7513 + 7513 7508 7507 + 7509 7508 7513 + 7513 7514 7509 + 7510 7509 7514 + 1083 1088 7511 + 1088 7515 7511 + 7516 7511 7515 + 7512 7511 7516 + 7516 7517 7512 + 7512 7517 7518 + 7518 7513 7512 + 7513 7518 7519 + 7519 7514 7513 + 1093 7515 1088 + 7520 7515 1093 + 7515 7520 7516 + 7516 7520 7521 + 7521 7522 7516 + 7517 7516 7522 + 7522 7523 7517 + 7518 7517 7523 + 7523 7524 7518 + 7519 7518 7524 + 1093 7525 7520 + 7520 7525 7526 + 7526 7521 7520 + 7521 7526 7527 + 7527 7528 7521 + 7521 7528 7529 + 7529 7522 7521 + 7525 1093 1092 + 1092 7530 7525 + 7525 7530 7531 + 7531 7526 7525 + 7527 7526 7531 + 7531 7532 7527 + 7533 7527 7532 + 7528 7527 7533 + 7533 7534 7528 + 7529 7528 7534 + 3288 7530 1092 + 7530 3288 7535 + 7535 7531 7530 + 7532 7531 7535 + 7535 7536 7532 + 7532 7536 7537 + 7537 7538 7532 + 7532 7538 7533 + 7539 7533 7538 + 7534 7533 7539 + 7540 7535 3288 + 7536 7535 7540 + 7540 7541 7536 + 7536 7541 7542 + 7542 7537 7536 + 7543 7537 7542 + 7537 7543 7544 + 7544 7538 7537 + 7538 7544 7539 + 3291 7540 3288 + 3296 7540 3291 + 7541 7540 3296 + 7541 3296 3295 + 3295 7542 7541 + 7545 7542 3295 + 7542 7545 7543 + 7546 7543 7545 + 7544 7543 7546 + 7546 7547 7544 + 7544 7547 7548 + 7548 7539 7544 + 7549 7539 7548 + 7539 7549 7534 + 3295 7550 7545 + 7545 7550 7551 + 7551 7552 7545 + 7545 7552 7546 + 7550 3295 3294 + 3294 3293 7550 + 7551 7550 3293 + 7553 7551 3293 + 7554 7551 7553 + 7552 7551 7554 + 7552 7554 7555 + 7555 7556 7552 + 7552 7556 7546 + 7557 7553 3293 + 7558 7553 7557 + 7558 7559 7553 + 7553 7559 7554 + 7554 7559 7560 + 7555 7554 7560 + 3302 7557 3293 + 7561 7557 3302 + 7562 7557 7561 + 7557 7562 7558 + 3302 7563 7561 + 7561 7563 7564 + 7564 7565 7561 + 7562 7561 7565 + 7565 7566 7562 + 7558 7562 7566 + 7563 3302 3301 + 7563 3301 3300 + 3300 3499 7563 + 7563 3499 7564 + 1027 1026 7450 + 7450 7567 1027 + 1658 1657 5120 + 5120 1657 1656 + 1656 7568 5120 + 5120 7568 5121 + 7569 5121 7568 + 5121 7569 7570 + 7570 7571 5121 + 5121 7571 5113 + 1665 7568 1656 + 7568 1665 7569 + 7569 1665 1669 + 7572 7569 1669 + 7570 7569 7572 + 7572 7573 7570 + 7574 7570 7573 + 7571 7570 7574 + 7574 5110 7571 + 5113 7571 5110 + 1669 7575 7572 + 7576 7572 7575 + 7573 7572 7576 + 7576 353 7573 + 7573 353 352 + 352 7577 7573 + 7573 7577 7574 + 7578 7575 1669 + 7579 7575 7578 + 7575 7579 7576 + 348 7576 7579 + 353 7576 348 + 1669 1668 7578 + 7580 7578 1668 + 7579 7578 7580 + 7580 7581 7579 + 7579 7581 348 + 349 348 7581 + 7581 7582 349 + 345 349 7582 + 1668 1673 7580 + 1678 7580 1673 + 7580 1678 7582 + 7582 7581 7580 + 7582 1678 1677 + 1677 7583 7582 + 7582 7583 345 + 323 345 7583 + 7583 317 323 + 317 7583 1677 + 1677 1682 317 + 317 1682 312 + 7584 312 1682 + 313 312 7584 + 7584 7585 313 + 308 313 7585 + 7586 308 7585 + 7585 559 7586 + 1682 1681 7584 + 7587 7584 1681 + 7585 7584 7587 + 7585 7587 560 + 560 559 7585 + 1681 7588 7587 + 7587 7588 1679 + 1679 561 7587 + 561 560 7587 + 562 561 1679 + 1679 7589 562 + 357 7577 352 + 7577 357 7590 + 7590 7574 7577 + 5110 7574 7590 + 7590 5104 5110 + 5104 7590 5105 + 5105 7590 362 + 7590 357 362 + 5061 7591 5062 + 5075 5062 7591 + 5075 5059 5062 + 5059 5075 7592 + 7592 7593 5059 + 5059 7593 3409 + 3404 3409 7593 + 7591 7594 5075 + 7593 3384 3404 + 7592 3384 7593 + 3384 7592 7595 + 7595 7596 3384 + 7597 7596 7595 + 5073 7595 7592 + 7598 7595 5073 + 5073 7599 7598 + 7600 7598 7599 + 7592 5075 5073 + 5072 7599 5073 + 7599 5072 7601 + 7601 3367 7599 + 7602 3367 7601 + 3367 7602 3361 + 3361 7602 5083 + 5083 3362 3361 + 5079 7601 5072 + 7602 7601 5079 + 5079 5083 7602 + 5087 3362 5083 + 3355 3362 5087 + 5087 7603 3355 + 3355 7603 7604 + 7604 3356 3355 + 7605 3356 7604 + 3356 7605 3349 + 3349 7605 3350 + 7603 5087 5092 + 5092 7606 7603 + 7604 7603 7606 + 7606 7607 7604 + 7608 7604 7607 + 7604 7608 7605 + 7605 7608 7609 + 7609 3350 7605 + 7610 3350 7609 + 3350 7610 1021 + 7606 5092 5091 + 5091 7611 7606 + 7606 7611 7612 + 7612 7607 7606 + 7607 7612 522 + 522 7613 7607 + 7607 7613 7608 + 7608 7613 7614 + 7614 7609 7608 + 7611 5091 7615 + 7615 166 7611 + 7611 166 523 + 523 7612 7611 + 522 7612 523 + 368 523 166 + 166 369 368 + 7616 369 166 + 1021 7610 7617 + 7613 522 521 + 521 7614 7613 + 527 7614 521 + 7614 527 7618 + 7618 7609 7614 + 7609 7618 7610 + 7610 7618 533 + 533 7619 7610 + 533 7618 527 + 5061 5060 7620 + 7620 254 5061 + 4408 4412 7621 + 7621 7622 4408 + 4408 7622 7623 + 7623 4409 4408 + 7624 4409 7623 + 4409 7624 7625 + 4409 7625 4405 + 7621 7626 7622 + 7622 7626 4096 + 4096 7623 7622 + 4096 4095 7623 + 7623 4095 7624 + 7624 4095 4100 + 4100 7627 7624 + 7625 7624 7627 + 7626 7621 4417 + 4417 7628 7626 + 7626 7628 4090 + 4096 7626 4090 + 7629 7628 4417 + 7628 7629 7630 + 7630 4090 7628 + 4091 4090 7630 + 4091 7630 23 + 23 7631 4091 + 6469 7627 4100 + 6474 7627 6469 + 7627 6474 7625 + 4405 7625 6474 + 148 7632 7633 + 7633 7632 7634 + 7634 7635 7633 + 7636 7635 7634 + 7636 7634 7637 + 7637 7638 7636 + 7639 7636 7638 + 7638 7637 7640 + 7641 7642 7643 + 7642 7641 7644 + 7644 7645 7642 + 7645 7646 7642 + 7646 7647 7642 + 7648 7642 7647 + 7647 7649 7648 + 7644 7641 2021 + 7650 7644 2021 + 7651 7644 7650 + 7644 7651 7645 + 7645 7651 7652 + 7652 7646 7645 + 7641 7653 2021 + 2022 2021 7653 + 7653 7654 2022 + 2018 2022 7654 + 7653 7641 7655 + 7656 7653 7655 + 7653 7656 7654 + 7654 7656 7657 + 7657 7658 7654 + 7654 7658 2018 + 7658 7659 2018 + 2013 2018 7659 + 7659 7660 2013 + 2013 7660 1996 + 7658 7657 7661 + 7659 7658 7662 + 7663 7659 7662 + 7660 7659 7663 + 7660 7663 7664 + 7664 1996 7660 + 1996 7664 7665 + 1996 7665 7666 + 7666 1997 1996 + 7664 7663 7667 + 7667 7668 7664 + 7668 7665 7664 + 7665 7668 7669 + 7665 7669 7670 + 7669 7671 7670 + 7672 7670 7671 + 7673 7668 7667 + 7668 7673 7674 + 7674 7669 7668 + 7674 7675 7669 + 7669 7675 7676 + 7676 7671 7669 + 7677 7671 7676 + 7671 7677 7672 + 7678 7673 7667 + 7678 7667 7679 + 7679 7680 7678 + 7678 7680 7681 + 7682 7679 7667 + 7683 7682 7667 + 1997 7666 7672 + 1997 7672 7684 + 7684 1985 1997 + 1985 7684 1976 + 1976 7684 7685 + 7685 1977 1976 + 1973 1977 7685 + 7672 7677 7684 + 7677 7686 7684 + 7686 7685 7684 + 7685 7686 7687 + 7688 7685 7687 + 7685 7688 1973 + 1973 7688 7689 + 7689 7690 1973 + 1973 7690 1967 + 1963 1967 7690 + 7688 7687 7691 + 7689 7688 7691 + 7691 7692 7689 + 7693 7689 7692 + 7693 7690 7689 + 7690 7693 1963 + 1963 7693 1938 + 7692 7691 7694 + 7695 7692 7694 + 7696 7692 7695 + 7692 7696 7693 + 7693 7696 1938 + 7694 7691 3240 + 7650 7697 7651 + 7650 7698 7697 + 7698 7650 7699 + 7650 7700 7699 + 7700 7701 7699 + 7699 7701 7702 + 7702 7703 7699 + 7700 7650 2021 + 7704 7700 2021 + 7701 7700 7704 + 7704 7705 7701 + 7705 7702 7701 + 7706 7702 7705 + 7702 7706 7707 + 7704 2021 2027 + 2027 7708 7704 + 7708 7709 7704 + 7709 7710 7704 + 7710 7711 7704 + 7711 7712 7704 + 7713 7704 7712 + 7704 7713 7705 + 7714 7708 2027 + 7708 7714 7715 + 7708 7715 7716 + 7716 7709 7708 + 7709 7716 7717 + 7709 7717 7718 + 7718 7710 7709 + 2027 7719 7714 + 7720 7714 7719 + 7715 7714 7720 + 7720 7721 7715 + 7715 7721 1523 + 1523 7716 7715 + 7717 7716 1523 + 2027 2030 7719 + 7719 2030 2029 + 2029 7722 7719 + 7719 7722 7720 + 7723 7720 7722 + 7721 7720 7723 + 7723 7724 7721 + 7725 7722 2029 + 7722 7725 7723 + 2029 7726 7725 + 7726 2029 2028 + 2028 7727 7726 + 1523 1522 7717 + 7717 1522 7728 + 7728 7718 7717 + 7729 7718 7728 + 7710 7718 7729 + 7710 7729 7730 + 7730 7711 7710 + 7711 7730 7731 + 1521 7728 1522 + 1529 7728 1521 + 7728 1529 7729 + 7729 1529 7732 + 7730 7729 7732 + 7732 7733 7730 + 7731 7730 7733 + 7733 7734 7731 + 7734 151 7731 + 1529 1528 7732 + 1534 7732 1528 + 7732 1534 7735 + 7732 7735 7736 + 7736 7733 7732 + 7734 7733 7736 + 7734 7736 7737 + 7737 151 7734 + 7738 151 7737 + 151 7738 3432 + 3432 7739 151 + 7735 1534 1533 + 1533 7740 7735 + 7735 7740 382 + 7740 7741 382 + 7741 7742 382 + 1533 7743 7740 + 7740 7743 7744 + 7744 7741 7740 + 7744 7745 7741 + 7741 7745 7746 + 7746 7742 7741 + 7743 1533 1532 + 1532 7747 7743 + 7744 7743 7747 + 7747 7748 7744 + 7745 7744 7748 + 7748 7749 7745 + 7746 7745 7749 + 7749 7750 7746 + 7751 7746 7750 + 7746 7751 7742 + 1531 7747 1532 + 7747 1531 7752 + 7752 7748 7747 + 7749 7748 7752 + 7753 3432 7738 + 374 7753 7738 + 391 374 7738 + 7738 7737 391 + 391 7737 7735 + 7737 7736 7735 + 1517 1523 7721 + 7721 7754 1517 + 7705 7713 7706 + 7755 7706 7713 + 2103 7756 7757 + 2103 7757 7758 + 7758 7759 2103 + 2103 7759 7760 + 7759 7758 7761 + 7759 7761 7694 + 7694 7762 7759 + 7763 7762 7694 + 7761 7758 7764 + 7764 7765 7761 + 7765 7694 7761 + 7765 7695 7694 + 7696 7695 7765 + 7765 1938 7696 + 7764 7758 7766 + 7766 7767 7764 + 1938 7764 7767 + 1938 7765 7764 + 7766 7768 7767 + 7768 7769 7767 + 1939 7767 7769 + 7767 1939 1938 + 1939 7769 7770 + 7770 1930 1939 + 1930 7770 1924 + 1924 7770 1925 + 1925 7770 7769 + 7769 7771 1925 + 7772 7773 7774 + 7774 7775 7772 + 7776 7772 7775 + 7776 7777 7772 + 7777 7778 7772 + 7779 7772 7778 + 7779 7778 7780 + 7775 7774 7781 + 7781 7782 7775 + 7775 7782 7783 + 7783 7776 7775 + 7777 7776 7783 + 7784 7781 7774 + 7781 7784 7785 + 7786 7781 7785 + 7782 7781 7786 + 7786 7787 7782 + 7783 7782 7787 + 7788 7784 7774 + 7789 7784 7788 + 7784 7789 7790 + 7790 7785 7784 + 7790 7791 7785 + 7792 7785 7791 + 7792 7786 7785 + 7788 7774 7793 + 7780 7794 7773 + 7794 7780 7795 + 7795 7796 7794 + 7797 7794 7796 + 7797 7798 7794 + 7798 7799 7794 + 7794 7799 7800 + 7795 7780 7801 + 7802 7795 7801 + 7795 7802 7803 + 7803 7804 7795 + 7804 7796 7795 + 7796 7804 7805 + 7805 7797 7796 + 7798 7797 7805 + 7801 7780 7778 + 7806 7801 7778 + 7801 7806 7807 + 7807 7808 7801 + 7801 7808 7802 + 7809 7802 7808 + 7803 7802 7809 + 7777 7806 7778 + 7807 7806 7777 + 7777 7810 7807 + 7811 7807 7810 + 7808 7807 7811 + 7811 7812 7808 + 7808 7812 7809 + 7783 7810 7777 + 7810 7783 7813 + 7813 7814 7810 + 7810 7814 7811 + 7814 7815 7811 + 7815 7816 7811 + 7816 7817 7811 + 7812 7811 7817 + 7813 7783 7787 + 7787 7818 7813 + 7819 7813 7818 + 7819 7814 7813 + 7814 7819 7820 + 7820 7815 7814 + 7816 7815 7820 + 7818 7787 7821 + 7822 7818 7821 + 7822 7823 7818 + 7818 7823 7819 + 7819 7823 7824 + 7820 7819 7824 + 7787 7786 7821 + 7821 7786 7825 + 7825 7826 7821 + 7821 7826 7827 + 7822 7821 7827 + 7828 7822 7827 + 7823 7822 7828 + 7828 7824 7823 + 7792 7825 7786 + 7829 7825 7792 + 7829 7826 7825 + 7829 7830 7826 + 7826 7830 7831 + 7831 7827 7826 + 7792 7832 7829 + 7833 7829 7832 + 7829 7833 7834 + 7830 7829 7834 + 7831 7830 7834 + 7835 7831 7834 + 7831 7835 7836 + 7836 7827 7831 + 7832 7792 7837 + 7838 7832 7837 + 7832 7838 7833 + 7838 7839 7833 + 7834 7833 7839 + 7839 7840 7834 + 7834 7840 7835 + 7837 7792 7791 + 7841 7837 7791 + 7842 7837 7841 + 7838 7837 7842 + 7843 7838 7842 + 7843 7839 7838 + 7840 7839 7843 + 7843 7844 7840 + 7844 7835 7840 + 7845 7835 7844 + 7835 7845 7836 + 7791 7846 7841 + 7847 7841 7846 + 7841 7847 7848 + 7841 7848 7842 + 7842 7848 7849 + 7850 7842 7849 + 7850 7843 7842 + 7844 7843 7850 + 7846 7791 7790 + 7851 7846 7790 + 7851 7852 7846 + 7846 7852 7847 + 7853 7847 7852 + 7848 7847 7853 + 7853 7849 7848 + 7851 7790 7789 + 7854 7851 7789 + 7852 7851 7854 + 7854 7855 7852 + 7852 7855 7856 + 7856 7853 7852 + 7857 7853 7856 + 7853 7857 7849 + 7789 7858 7854 + 7859 7854 7858 + 7859 7855 7854 + 7855 7859 7860 + 7860 7861 7855 + 7855 7861 7856 + 7789 7862 7858 + 7862 7798 7858 + 7805 7858 7798 + 7858 7805 7859 + 7860 7859 7805 + 7863 7860 7805 + 7864 7860 7863 + 7860 7864 7861 + 7788 7862 7789 + 7862 7788 7800 + 7800 7799 7862 + 7862 7799 7798 + 7805 7804 7863 + 7804 7865 7863 + 7865 7866 7863 + 7867 7863 7866 + 7863 7867 7868 + 7863 7868 7864 + 7869 7865 7804 + 7865 7869 7870 + 7870 7871 7865 + 7865 7871 7872 + 7872 7866 7865 + 7873 7866 7872 + 7866 7873 7867 + 7804 7803 7869 + 7874 7869 7803 + 7870 7869 7874 + 7874 7875 7870 + 7870 7875 7876 + 7876 7877 7870 + 7871 7870 7877 + 7877 7878 7871 + 7872 7871 7878 + 7803 7879 7874 + 7880 7874 7879 + 7874 7880 7881 + 7881 7875 7874 + 7875 7881 7882 + 7882 7876 7875 + 7809 7879 7803 + 7883 7879 7809 + 7879 7883 7880 + 7884 7880 7883 + 7881 7880 7884 + 7884 7885 7881 + 7881 7885 7886 + 7886 7882 7881 + 7887 7882 7886 + 7876 7882 7887 + 7809 7888 7883 + 7883 7888 7889 + 7889 7890 7883 + 7883 7890 7884 + 7891 7884 7890 + 7884 7891 7892 + 7892 7885 7884 + 7888 7809 7893 + 7893 7894 7888 + 7888 7894 7895 + 7895 7889 7888 + 7896 7889 7895 + 7890 7889 7896 + 7896 7897 7890 + 7890 7897 7891 + 7812 7893 7809 + 7898 7893 7812 + 7898 7894 7893 + 7894 7898 7899 + 7899 7895 7894 + 7895 7899 7900 + 7900 7901 7895 + 7895 7901 7896 + 7812 7817 7898 + 7898 7817 7816 + 7898 7816 7899 + 7900 7899 7816 + 7816 7902 7900 + 7900 7902 7903 + 7903 7904 7900 + 7901 7900 7904 + 7904 7905 7901 + 7896 7901 7905 + 7905 7906 7896 + 7897 7896 7906 + 7820 7902 7816 + 7902 7820 7907 + 7907 7903 7902 + 7908 7903 7907 + 7903 7908 7909 + 7909 7904 7903 + 7905 7904 7909 + 7909 7910 7905 + 7905 7910 7911 + 7911 7906 7905 + 7824 7907 7820 + 7908 7907 7824 + 7824 7912 7908 + 7909 7908 7912 + 7912 7913 7909 + 7913 7914 7909 + 7914 7915 7909 + 7910 7909 7915 + 7915 7916 7910 + 7911 7910 7916 + 7912 7824 7828 + 7912 7828 7917 + 7917 7913 7912 + 7918 7913 7917 + 7913 7918 7919 + 7919 7914 7913 + 7920 7914 7919 + 7914 7920 7921 + 7921 7915 7914 + 7916 7915 7921 + 7827 7917 7828 + 7918 7917 7827 + 7827 7836 7918 + 7919 7918 7836 + 7836 7922 7919 + 7920 7919 7922 + 7922 7923 7920 + 7921 7920 7923 + 7923 7924 7921 + 7925 7921 7924 + 7921 7925 7916 + 7926 7922 7836 + 7926 7923 7922 + 7923 7926 7927 + 7927 7924 7923 + 7924 7927 7928 + 7928 7929 7924 + 7924 7929 7925 + 7930 7925 7929 + 7916 7925 7930 + 7836 7845 7926 + 7926 7845 7931 + 7931 7927 7926 + 7928 7927 7931 + 7931 7932 7928 + 7933 7928 7932 + 7929 7928 7933 + 7933 7934 7929 + 7929 7934 7930 + 7845 7935 7931 + 7935 7936 7931 + 7937 7931 7936 + 7931 7937 7938 + 7938 7932 7931 + 7932 7938 7933 + 7938 7939 7933 + 7934 7933 7939 + 7844 7935 7845 + 7850 7935 7844 + 7935 7850 7940 + 7940 7936 7935 + 7940 7941 7936 + 7936 7941 7937 + 7937 7941 7857 + 7857 7942 7937 + 7942 7943 7937 + 7938 7937 7943 + 7940 7850 7849 + 7941 7940 7849 + 7849 7857 7941 + 7856 7942 7857 + 7856 7944 7942 + 7942 7944 7945 + 7945 7943 7942 + 7946 7943 7945 + 7943 7946 7938 + 7938 7946 7947 + 7947 7948 7938 + 7948 7939 7938 + 7934 7939 7948 + 7944 7856 7861 + 7861 7864 7944 + 7945 7944 7864 + 7864 7868 7945 + 7949 7945 7868 + 7945 7949 7946 + 7946 7949 7950 + 7950 7947 7946 + 7947 7950 7951 + 7951 7952 7947 + 7947 7952 7953 + 7953 7948 7947 + 7868 7867 7949 + 7949 7867 7873 + 7873 7950 7949 + 7950 7873 7954 + 7951 7950 7954 + 7951 7954 7955 + 7955 7956 7951 + 7952 7951 7956 + 7956 7957 7952 + 7953 7952 7957 + 7872 7954 7873 + 7954 7872 7958 + 7958 7955 7954 + 7955 7958 7959 + 7959 7960 7955 + 7955 7960 7961 + 7961 7956 7955 + 7957 7956 7961 + 7878 7958 7872 + 7959 7958 7878 + 7878 7962 7959 + 7959 7962 7963 + 7963 7964 7959 + 7960 7959 7964 + 7964 7965 7960 + 7961 7960 7965 + 7966 7962 7878 + 7962 7966 7967 + 7967 7963 7962 + 7963 7967 7968 + 7968 7969 7963 + 7963 7969 7970 + 7970 7964 7963 + 7965 7964 7970 + 7878 7877 7966 + 7966 7877 7876 + 7876 7971 7966 + 7966 7971 7972 + 7972 7967 7966 + 7968 7967 7972 + 7972 7973 7968 + 7968 7973 7974 + 7974 7975 7968 + 7969 7968 7975 + 7887 7971 7876 + 7971 7887 7976 + 7976 7972 7971 + 7972 7976 7977 + 7977 7973 7972 + 7973 7977 7978 + 7978 7974 7973 + 7979 7976 7887 + 7977 7976 7979 + 7979 7980 7977 + 7977 7980 7981 + 7981 7978 7977 + 7982 7978 7981 + 7974 7978 7982 + 7887 7983 7979 + 7984 7979 7983 + 7979 7984 7985 + 7985 7980 7979 + 7980 7985 7986 + 7986 7981 7980 + 7886 7983 7887 + 7987 7983 7886 + 7983 7987 7984 + 7988 7984 7987 + 7985 7984 7988 + 7988 7989 7985 + 7985 7989 7990 + 7990 7986 7985 + 7991 7986 7990 + 7981 7986 7991 + 7886 7992 7987 + 7987 7992 7993 + 7993 7994 7987 + 7987 7994 7988 + 7995 7988 7994 + 7988 7995 7996 + 7996 7989 7988 + 7992 7886 7885 + 7885 7892 7992 + 7993 7992 7892 + 7892 7997 7993 + 7998 7993 7997 + 7993 7998 7999 + 7999 7994 7993 + 7994 7999 7995 + 8000 7995 7999 + 7996 7995 8000 + 8001 7997 7892 + 8002 7997 8001 + 7997 8002 7998 + 8003 7998 8002 + 7999 7998 8003 + 8003 8004 7999 + 7999 8004 8000 + 7892 7891 8001 + 8001 7891 7897 + 7897 8005 8001 + 8006 8001 8005 + 8001 8006 8002 + 8002 8006 8007 + 8007 8008 8002 + 8002 8008 8003 + 7906 8005 7897 + 8005 7906 7911 + 7911 8009 8005 + 8005 8009 8006 + 8007 8006 8009 + 8009 8010 8007 + 8011 8007 8010 + 8007 8011 8012 + 8012 8008 8007 + 8008 8012 8013 + 8013 8003 8008 + 8009 7911 8014 + 8014 8010 8009 + 7930 8010 8014 + 8010 7930 8011 + 8015 8011 7930 + 8012 8011 8015 + 8015 8016 8012 + 8012 8016 8017 + 8017 8013 8012 + 7916 8014 7911 + 7930 8014 7916 + 7934 8015 7930 + 7948 8015 7934 + 8015 7948 7953 + 7953 8016 8015 + 8016 7953 8018 + 8018 8017 8016 + 8017 8018 8019 + 8019 8020 8017 + 8017 8020 8021 + 8021 8013 8017 + 8003 8013 8021 + 8021 8004 8003 + 7957 8018 7953 + 8019 8018 7957 + 7957 8022 8019 + 8019 8022 8023 + 8023 8024 8019 + 8020 8019 8024 + 8024 8025 8020 + 8021 8020 8025 + 8025 8026 8021 + 8004 8021 8026 + 8026 8000 8004 + 7961 8022 7957 + 8022 7961 8027 + 8027 8023 8022 + 8023 8027 8028 + 8028 8029 8023 + 8023 8029 8030 + 8030 8024 8023 + 8025 8024 8030 + 7965 8027 7961 + 8028 8027 7965 + 7965 8031 8028 + 8028 8031 8032 + 8032 8033 8028 + 8029 8028 8033 + 8033 8034 8029 + 8030 8029 8034 + 7970 8031 7965 + 8031 7970 8035 + 8035 8032 8031 + 8032 8035 8036 + 8036 8037 8032 + 8032 8037 8038 + 8038 8033 8032 + 8034 8033 8038 + 8039 8035 7970 + 8036 8035 8039 + 8039 8040 8036 + 8041 8036 8040 + 8037 8036 8041 + 8041 8042 8037 + 8042 8038 8037 + 8043 8038 8042 + 8038 8043 8034 + 7970 7969 8039 + 7975 8039 7969 + 8039 7975 8044 + 8044 8040 8039 + 8040 8044 8045 + 8045 8041 8040 + 8042 8041 8045 + 8045 8046 8042 + 8046 8047 8042 + 8042 8047 8043 + 8048 8043 8047 + 8034 8043 8048 + 8044 7975 7974 + 7974 8049 8044 + 8045 8044 8049 + 8045 8049 7982 + 8046 8045 7982 + 8046 7982 8050 + 8051 8046 8050 + 8047 8046 8051 + 8051 8052 8047 + 8047 8052 8048 + 7982 8049 7974 + 7981 8050 7982 + 7991 8050 7981 + 8051 8050 7991 + 8053 8051 7991 + 8051 8053 8054 + 8054 8052 8051 + 8052 8054 8055 + 8055 8048 8052 + 8048 8055 8056 + 8056 8057 8048 + 8048 8057 8034 + 8053 7991 8058 + 8053 8058 8059 + 8060 8053 8059 + 8053 8060 8054 + 8054 8060 8061 + 8054 8061 8055 + 8056 8055 8061 + 7990 8058 7991 + 8059 8058 7990 + 7990 8062 8059 + 8059 8062 8063 + 8063 8064 8059 + 8060 8059 8064 + 8060 8064 8061 + 8061 8064 8063 + 8063 8065 8061 + 8061 8065 8056 + 8062 7990 7989 + 7989 7996 8062 + 8063 8062 7996 + 7996 8066 8063 + 8065 8063 8066 + 8066 8067 8065 + 8056 8065 8067 + 8067 8068 8056 + 8057 8056 8068 + 8068 8030 8057 + 8034 8057 8030 + 8000 8066 7996 + 8067 8066 8000 + 8000 8026 8067 + 8067 8026 8025 + 8025 8068 8067 + 8030 8068 8025 + 8069 8070 8071 + 8072 8070 8069 + 8070 8072 8073 + 8074 8070 8073 + 8070 8074 8075 + 8069 8076 8072 + 8077 8072 8076 + 8072 8077 8078 + 8073 8072 8078 + 8078 8079 8073 + 8079 8074 8073 + 8069 8080 8076 + 8076 8080 8081 + 8081 8082 8076 + 8082 8083 8076 + 8083 8077 8076 + 8080 8069 8084 + 8084 8085 8080 + 8080 8085 8086 + 8086 8081 8080 + 8081 8086 8087 + 8088 8081 8087 + 8082 8081 8088 + 8084 8069 8075 + 8084 8075 8089 + 8089 8090 8084 + 8091 8084 8090 + 8084 8091 8085 + 8085 8091 8092 + 8092 8086 8085 + 8086 8092 8087 + 8093 8089 8075 + 8094 8089 8093 + 8089 8094 8095 + 8095 8090 8089 + 8096 8090 8095 + 8090 8096 8091 + 8091 8096 8097 + 8092 8091 8097 + 8075 8098 8093 + 8093 8098 8099 + 8099 8100 8093 + 8100 8101 8093 + 8102 8093 8101 + 8093 8102 8094 + 8098 8075 8103 + 8098 8103 8104 + 8104 8099 8098 + 8099 8104 8105 + 8099 8105 8106 + 8106 8100 8099 + 8103 8075 8074 + 8074 8107 8103 + 8103 8107 8108 + 8104 8103 8108 + 8108 8109 8104 + 8105 8104 8109 + 8109 8110 8105 + 8106 8105 8110 + 8107 8074 8079 + 8079 8111 8107 + 8107 8111 8112 + 8112 8108 8107 + 8108 8112 8113 + 8113 8114 8108 + 8108 8114 8115 + 8115 8109 8108 + 8110 8109 8115 + 8111 8079 8116 + 8111 8116 8112 + 8116 8117 8112 + 8113 8112 8117 + 8117 8118 8113 + 8113 8118 8119 + 8113 8119 8120 + 8114 8113 8120 + 8115 8114 8120 + 8079 8078 8116 + 8116 8078 8077 + 8117 8116 8077 + 8083 8117 8077 + 8118 8117 8083 + 8083 8121 8118 + 8118 8121 8122 + 8122 8123 8118 + 8118 8123 8119 + 8124 8119 8123 + 8119 8124 8125 + 8120 8119 8125 + 8121 8083 8082 + 8082 8126 8121 + 8122 8121 8126 + 8127 8122 8126 + 8128 8122 8127 + 8122 8128 8129 + 8129 8123 8122 + 8123 8129 8124 + 8088 8126 8082 + 8126 8088 8130 + 8130 8127 8126 + 8131 8127 8130 + 8131 8132 8127 + 8127 8132 8128 + 8133 8128 8132 + 8133 8134 8128 + 8134 8129 8128 + 8130 8088 8087 + 8135 8130 8087 + 8130 8135 8136 + 8131 8130 8136 + 8131 8136 8137 + 8137 8138 8131 + 8132 8131 8138 + 8138 8139 8132 + 8139 8133 8132 + 8087 8140 8135 + 8141 8135 8140 + 8135 8141 8136 + 8136 8141 8142 + 8142 8143 8136 + 8136 8143 8137 + 8144 8140 8087 + 8140 8144 8145 + 8140 8145 8141 + 8142 8141 8145 + 8146 8142 8145 + 8147 8142 8146 + 8143 8142 8147 + 8137 8143 8147 + 8087 8092 8144 + 8097 8144 8092 + 8145 8144 8097 + 8097 8148 8145 + 8145 8148 8146 + 8149 8146 8148 + 8146 8149 8150 + 8146 8150 8147 + 8147 8150 8151 + 8151 8152 8147 + 8152 8137 8147 + 8153 8148 8097 + 8148 8153 8149 + 8149 8153 8154 + 8155 8149 8154 + 8150 8149 8155 + 8155 8156 8150 + 8150 8156 8151 + 8097 8157 8153 + 8153 8157 8158 + 8158 8154 8153 + 8157 8097 8096 + 8096 8159 8157 + 8157 8159 8160 + 8160 8158 8157 + 8161 8158 8160 + 8154 8158 8161 + 8095 8159 8096 + 8159 8095 8162 + 8162 8160 8159 + 8160 8162 8163 + 8163 8164 8160 + 8160 8164 8161 + 8165 8162 8095 + 8163 8162 8165 + 8165 8166 8163 + 8163 8166 8167 + 8167 8168 8163 + 8164 8163 8168 + 8168 8169 8164 + 8161 8164 8169 + 8095 8094 8165 + 8170 8165 8094 + 8165 8170 8171 + 8171 8166 8165 + 8166 8171 8172 + 8172 8167 8166 + 8094 8102 8170 + 8173 8170 8102 + 8171 8170 8173 + 8173 8174 8171 + 8171 8174 8175 + 8175 8172 8171 + 8176 8172 8175 + 8167 8172 8176 + 8102 8177 8173 + 8178 8173 8177 + 8173 8178 8179 + 8179 8174 8173 + 8174 8179 8180 + 8180 8175 8174 + 8101 8177 8102 + 8177 8101 8181 + 8181 8182 8177 + 8177 8182 8178 + 8183 8178 8182 + 8179 8178 8183 + 8183 8184 8179 + 8179 8184 8185 + 8185 8180 8179 + 8181 8101 8100 + 8100 8186 8181 + 8181 8186 8187 + 8187 8188 8181 + 8182 8181 8188 + 8188 8189 8182 + 8182 8189 8183 + 8106 8186 8100 + 8186 8106 8190 + 8190 8187 8186 + 8187 8190 8191 + 8191 8192 8187 + 8187 8192 8193 + 8193 8188 8187 + 8189 8188 8193 + 8110 8190 8106 + 8191 8190 8110 + 8110 8194 8191 + 8191 8194 8195 + 8195 8196 8191 + 8192 8191 8196 + 8196 8197 8192 + 8193 8192 8197 + 8115 8194 8110 + 8194 8115 8198 + 8198 8195 8194 + 8198 8199 8195 + 8195 8199 8200 + 8200 8196 8195 + 8197 8196 8200 + 8201 8198 8115 + 8201 8202 8198 + 8202 8199 8198 + 8199 8202 8203 + 8200 8199 8203 + 8120 8201 8115 + 8201 8120 8125 + 8204 8201 8125 + 8202 8201 8204 + 8202 8204 8205 + 8205 8203 8202 + 8205 8206 8203 + 8203 8206 8207 + 8207 8208 8203 + 8203 8208 8200 + 8204 8125 8209 + 8204 8209 8205 + 8209 8210 8205 + 8206 8205 8210 + 8210 8211 8206 + 8206 8211 8207 + 8211 8212 8207 + 8213 8207 8212 + 8207 8213 8208 + 8125 8124 8209 + 8124 8214 8209 + 8215 8209 8214 + 8209 8215 8216 + 8216 8210 8209 + 8216 8211 8210 + 8211 8216 8217 + 8217 8212 8211 + 8124 8129 8214 + 8129 8134 8214 + 8215 8214 8134 + 8134 8218 8215 + 8216 8215 8218 + 8218 8217 8216 + 8218 8219 8217 + 8220 8217 8219 + 8212 8217 8220 + 8220 8221 8212 + 8212 8221 8213 + 8218 8134 8133 + 8218 8133 8139 + 8139 8219 8218 + 8222 8219 8139 + 8219 8222 8220 + 8223 8220 8222 + 8221 8220 8223 + 8223 8224 8221 + 8221 8224 8225 + 8213 8221 8225 + 8226 8213 8225 + 8208 8213 8226 + 8139 8138 8222 + 8222 8138 8227 + 8222 8227 8223 + 8151 8223 8227 + 8224 8223 8151 + 8151 8228 8224 + 8224 8228 8229 + 8229 8225 8224 + 8138 8137 8227 + 8137 8152 8227 + 8227 8152 8151 + 8228 8151 8156 + 8156 8230 8228 + 8228 8230 8231 + 8231 8229 8228 + 8232 8229 8231 + 8225 8229 8232 + 8156 8155 8230 + 8230 8155 8233 + 8233 8231 8230 + 8231 8233 8234 + 8234 8235 8231 + 8231 8235 8232 + 8154 8233 8155 + 8234 8233 8154 + 8154 8236 8234 + 8234 8236 8237 + 8237 8238 8234 + 8235 8234 8238 + 8238 8239 8235 + 8232 8235 8239 + 8161 8236 8154 + 8236 8161 8240 + 8240 8237 8236 + 8237 8240 8241 + 8241 8242 8237 + 8237 8242 8243 + 8243 8238 8237 + 8239 8238 8243 + 8169 8240 8161 + 8241 8240 8169 + 8169 8244 8241 + 8241 8244 8245 + 8245 8246 8241 + 8242 8241 8246 + 8246 8247 8242 + 8243 8242 8247 + 8248 8244 8169 + 8244 8248 8249 + 8249 8245 8244 + 8245 8249 8250 + 8250 8251 8245 + 8245 8251 8252 + 8252 8246 8245 + 8247 8246 8252 + 8169 8168 8248 + 8248 8168 8167 + 8167 8253 8248 + 8248 8253 8254 + 8254 8249 8248 + 8250 8249 8254 + 8176 8253 8167 + 8253 8176 8255 + 8255 8254 8253 + 8254 8255 8256 + 8256 8257 8254 + 8254 8257 8250 + 8258 8255 8176 + 8256 8255 8258 + 8258 8259 8256 + 8256 8259 8260 + 8260 8261 8256 + 8257 8256 8261 + 8261 8262 8257 + 8262 8250 8257 + 8176 8263 8258 + 8264 8258 8263 + 8258 8264 8265 + 8265 8259 8258 + 8259 8265 8266 + 8266 8260 8259 + 8175 8263 8176 + 8267 8263 8175 + 8263 8267 8264 + 8268 8264 8267 + 8265 8264 8268 + 8268 8269 8265 + 8265 8269 8270 + 8270 8266 8265 + 8175 8180 8267 + 8267 8180 8185 + 8185 8271 8267 + 8267 8271 8268 + 8272 8268 8271 + 8268 8272 8273 + 8273 8269 8268 + 8269 8273 8274 + 8274 8270 8269 + 8275 8271 8185 + 8271 8275 8272 + 8276 8272 8275 + 8273 8272 8276 + 8276 8277 8273 + 8273 8277 8278 + 8278 8274 8273 + 8185 8279 8275 + 8275 8279 8280 + 8280 8281 8275 + 8275 8281 8276 + 8282 8276 8281 + 8276 8282 8283 + 8283 8277 8276 + 8279 8185 8184 + 8184 8284 8279 + 8280 8279 8284 + 8284 8285 8280 + 8286 8280 8285 + 8280 8286 8287 + 8287 8281 8280 + 8281 8287 8282 + 8288 8282 8287 + 8283 8282 8288 + 8284 8184 8183 + 8183 8289 8284 + 8284 8289 8290 + 8290 8285 8284 + 8291 8285 8290 + 8285 8291 8286 + 8292 8286 8291 + 8287 8286 8292 + 8292 8293 8287 + 8287 8293 8288 + 8289 8183 8189 + 8189 8294 8289 + 8290 8289 8294 + 8294 8295 8290 + 8296 8290 8295 + 8290 8296 8291 + 8291 8296 8297 + 8297 8298 8291 + 8291 8298 8292 + 8193 8294 8189 + 8294 8193 8299 + 8299 8295 8294 + 8299 8300 8295 + 8295 8300 8296 + 8296 8300 8301 + 8301 8297 8296 + 8302 8297 8301 + 8297 8302 8303 + 8303 8298 8297 + 8304 8299 8193 + 8300 8299 8304 + 8304 8305 8300 + 8300 8305 8301 + 8306 8301 8305 + 8307 8301 8306 + 8301 8307 8302 + 8197 8304 8193 + 8308 8304 8197 + 8308 8305 8304 + 8305 8308 8306 + 8309 8306 8308 + 8307 8306 8309 + 8309 8226 8307 + 8302 8307 8226 + 8225 8302 8226 + 8303 8302 8225 + 8197 8310 8308 + 8308 8310 8309 + 8311 8309 8310 + 8226 8309 8311 + 8226 8311 8208 + 8208 8311 8200 + 8310 8200 8311 + 8200 8310 8197 + 8312 8313 8314 + 8315 8314 8313 + 8315 8316 8314 + 8314 8316 8317 + 8317 8318 8314 + 8314 8318 8319 + 8319 8320 8314 + 8320 42 8314 + 8313 8321 8315 + 8315 8321 8322 + 8322 8323 8315 + 8323 8324 8315 + 8316 8315 8324 + 8325 8321 8313 + 8321 8325 8326 + 8326 8322 8321 + 8322 8326 8327 + 8327 8328 8322 + 8322 8328 8329 + 8329 8323 8322 + 8325 8313 8330 + 8330 8331 8325 + 8325 8331 8332 + 8332 8326 8325 + 8327 8326 8332 + 8332 8333 8327 + 8333 8334 8327 + 8334 8335 8327 + 8335 8328 8327 + 8328 8335 8329 + 8330 8336 8331 + 8331 8336 8332 + 8336 8337 8332 + 8333 8332 8337 + 8333 8337 8338 + 8338 8339 8333 + 8333 8339 8334 + 8338 8337 8336 + 8340 8338 8336 + 8341 8338 8340 + 8339 8338 8341 + 8342 8339 8341 + 8339 8342 8334 + 8342 8343 8334 + 8334 8343 8344 + 8344 8335 8334 + 8340 8336 8345 + 8346 8340 8345 + 8347 8340 8346 + 8340 8347 8341 + 8341 8347 8348 + 8348 8349 8341 + 8342 8341 8349 + 42 8345 8336 + 8350 8345 42 + 8345 8350 8346 + 8351 8346 8350 + 8351 8348 8346 + 8348 8347 8346 + 8336 8352 42 + 8353 8354 8355 + 8356 8354 8353 + 8357 8354 8356 + 8357 8358 8354 + 8354 8358 8359 + 8359 46 8354 + 8353 8360 8356 + 8356 8360 8361 + 8361 8362 8356 + 8357 8356 8362 + 8360 8353 8363 + 8363 8364 8360 + 8360 8364 8365 + 8365 8361 8360 + 8363 8353 8366 + 8366 8367 8363 + 8363 8367 8368 + 8369 8363 8368 + 8364 8363 8369 + 8369 8370 8364 + 8365 8364 8370 + 8366 8353 8371 + 8371 8372 8366 + 8373 8366 8372 + 8373 8367 8366 + 8367 8373 8374 + 8374 8368 8367 + 8375 8372 8371 + 8375 8376 8372 + 8372 8376 8373 + 8374 8373 8376 + 8371 8377 8375 + 8375 8377 8378 + 8376 8375 8378 + 8378 8379 8376 + 8376 8379 8374 + 8380 8377 8371 + 8377 8380 8381 + 8381 8382 8377 + 8377 8382 8378 + 8382 8383 8378 + 8384 8378 8383 + 8384 8379 8378 + 8380 8371 8385 + 8385 8386 8380 + 8380 8386 8387 + 8380 8387 8381 + 8388 8381 8387 + 8381 8388 8389 + 8389 8382 8381 + 8383 8382 8389 + 8390 8385 8371 + 8385 8390 8391 + 8392 8385 8391 + 8392 8386 8385 + 8386 8392 8393 + 8393 8387 8386 + 8387 8393 8394 + 8394 8395 8387 + 8387 8395 8388 + 8396 8391 8390 + 8391 8396 8397 + 8397 8398 8391 + 8392 8391 8398 + 8392 8398 8393 + 8398 8399 8393 + 8393 8399 8400 + 8394 8393 8400 + 8401 8396 8390 + 8396 8401 8402 + 8402 8397 8396 + 8402 8403 8397 + 8403 8404 8397 + 8398 8397 8404 + 8398 8404 8405 + 8405 8399 8398 + 46 8401 8390 + 46 8359 8401 + 8401 8359 8406 + 8406 8402 8401 + 8403 8402 8406 + 46 8390 8407 + 8408 8409 8410 + 8411 8408 8410 + 8408 8411 8412 + 8412 8413 8408 + 8408 8413 8414 + 8414 8415 8408 + 8408 8415 8416 + 8417 8411 8410 + 8412 8411 8417 + 8417 8418 8412 + 8419 8412 8418 + 8413 8412 8419 + 8420 8417 8410 + 8421 8417 8420 + 8418 8417 8421 + 8418 8421 8422 + 8422 8423 8418 + 8418 8423 8419 + 8410 8424 8420 + 8425 8420 8424 + 8425 8426 8420 + 8420 8426 8421 + 8422 8421 8426 + 8427 8424 8410 + 8424 8427 8428 + 8424 8428 8425 + 8425 8428 8429 + 8429 8430 8425 + 8426 8425 8430 + 8430 8431 8426 + 8426 8431 8422 + 8410 8432 8427 + 8427 8432 8433 + 8433 8434 8427 + 8428 8427 8434 + 8434 8435 8428 + 8428 8435 8429 + 8432 8410 8436 + 8432 8437 8415 + 8415 8438 8432 + 8432 8438 8433 + 8415 8414 8438 + 8438 8414 8439 + 8439 8440 8438 + 8438 8440 8433 + 8439 8414 8413 + 8441 8439 8413 + 8442 8439 8441 + 8442 8440 8439 + 8440 8442 8443 + 8443 8433 8440 + 8413 8444 8441 + 8444 8445 8441 + 8446 8441 8445 + 8446 8447 8441 + 8441 8447 8442 + 8442 8447 8448 + 8448 8443 8442 + 8419 8444 8413 + 8449 8444 8419 + 8444 8449 8450 + 8450 8445 8444 + 8451 8445 8450 + 8445 8451 8446 + 8446 8451 8452 + 8452 8453 8446 + 8447 8446 8453 + 8449 8419 8454 + 8454 8455 8449 + 8450 8449 8455 + 8455 8456 8450 + 8457 8450 8456 + 8450 8457 8451 + 8451 8457 8458 + 8458 8452 8451 + 8423 8454 8419 + 8459 8454 8423 + 8455 8454 8459 + 8459 8460 8455 + 8455 8460 8461 + 8461 8456 8455 + 8462 8456 8461 + 8456 8462 8457 + 8457 8462 8463 + 8463 8458 8457 + 8423 8464 8459 + 8465 8459 8464 + 8460 8459 8465 + 8465 8466 8460 + 8460 8466 8467 + 8467 8461 8460 + 8468 8461 8467 + 8461 8468 8462 + 8464 8423 8422 + 8422 8469 8464 + 8464 8469 8470 + 8470 8471 8464 + 8464 8471 8465 + 8471 8472 8465 + 8473 8465 8472 + 8466 8465 8473 + 8469 8422 8474 + 8469 8474 8475 + 8475 8470 8469 + 8470 8475 8476 + 8477 8470 8476 + 8471 8470 8477 + 8471 8477 8478 + 8478 8472 8471 + 8422 8431 8474 + 8479 8474 8431 + 8474 8479 8480 + 8480 8475 8474 + 8480 8476 8475 + 8476 8480 8481 + 8481 8482 8476 + 8477 8476 8482 + 8478 8477 8482 + 8431 8430 8479 + 8479 8430 8429 + 8429 8483 8479 + 8479 8483 8484 + 8484 8481 8479 + 8481 8480 8479 + 8485 8483 8429 + 8483 8485 8486 + 8486 8484 8483 + 8484 8486 8487 + 8487 8488 8484 + 8484 8488 8489 + 8489 8481 8484 + 8481 8489 8482 + 8429 8490 8485 + 8485 8490 8491 + 8491 8492 8485 + 8485 8492 8493 + 8493 8486 8485 + 8487 8486 8493 + 8490 8429 8435 + 8435 8494 8490 + 8491 8490 8494 + 8494 8495 8491 + 8496 8491 8495 + 8491 8496 8497 + 8497 8492 8491 + 8492 8497 8498 + 8498 8493 8492 + 8494 8435 8434 + 8434 8499 8494 + 8494 8499 8500 + 8500 8495 8494 + 8495 8500 8501 + 8501 8502 8495 + 8495 8502 8496 + 8499 8434 8433 + 8433 8503 8499 + 8500 8499 8503 + 8501 8500 8503 + 8503 8504 8501 + 8501 8504 8505 + 8505 8506 8501 + 8502 8501 8506 + 8506 8507 8502 + 8496 8502 8507 + 8504 8503 8433 + 8433 8443 8504 + 8504 8443 8448 + 8448 8505 8504 + 8505 8448 8508 + 8508 8509 8505 + 8505 8509 8510 + 8510 8506 8505 + 8507 8506 8510 + 8508 8448 8511 + 8511 8512 8508 + 8508 8512 8513 + 8513 8514 8508 + 8509 8508 8514 + 8514 8515 8509 + 8510 8509 8515 + 8447 8511 8448 + 8453 8511 8447 + 8511 8453 8516 + 8516 8512 8511 + 8512 8516 8517 + 8517 8513 8512 + 8513 8517 8518 + 8518 8519 8513 + 8513 8519 8520 + 8520 8514 8513 + 8515 8514 8520 + 8516 8453 8452 + 8452 8521 8516 + 8516 8521 8522 + 8522 8517 8516 + 8518 8517 8522 + 8522 8523 8518 + 8518 8523 8524 + 8524 8525 8518 + 8519 8518 8525 + 8526 8521 8452 + 8521 8526 8527 + 8527 8522 8521 + 8522 8527 8528 + 8528 8523 8522 + 8523 8528 8529 + 8529 8524 8523 + 8452 8458 8526 + 8526 8458 8463 + 8463 8530 8526 + 8526 8530 8531 + 8531 8527 8526 + 8528 8527 8531 + 8531 8532 8528 + 8528 8532 8533 + 8533 8529 8528 + 8534 8529 8533 + 8524 8529 8534 + 8535 8530 8463 + 8530 8535 8536 + 8536 8531 8530 + 8531 8536 8537 + 8537 8532 8531 + 8532 8537 8538 + 8538 8533 8532 + 8463 8539 8535 + 8535 8539 8540 + 8540 8541 8535 + 8535 8541 8542 + 8542 8536 8535 + 8537 8536 8542 + 8539 8463 8462 + 8462 8468 8539 + 8539 8468 8543 + 8543 8540 8539 + 8544 8540 8543 + 8540 8544 8545 + 8545 8541 8540 + 8541 8545 8546 + 8546 8542 8541 + 8468 8547 8543 + 8548 8543 8547 + 8543 8548 8549 + 8543 8549 8544 + 8544 8549 8550 + 8550 8551 8544 + 8545 8544 8551 + 8467 8547 8468 + 8547 8467 8552 + 8547 8552 8548 + 8548 8552 8473 + 8553 8548 8473 + 8549 8548 8553 + 8553 8554 8549 + 8549 8554 8550 + 8552 8467 8466 + 8466 8473 8552 + 8555 8556 8557 + 8558 8557 8556 + 8557 8558 8559 + 8559 8560 8557 + 8557 8560 8561 + 8561 8562 8557 + 8557 8562 8563 + 8556 8564 8558 + 8565 8566 8567 + 8566 8568 8567 + 8568 8569 8567 + 8567 8569 8559 + 8559 8558 8567 + 8570 8567 8558 + 8568 8566 8571 + 8572 8568 8571 + 8569 8568 8572 + 8572 8573 8569 + 8569 8573 8574 + 8574 8575 8569 + 8575 8559 8569 + 8560 8559 8575 + 8563 8571 8566 + 8576 8571 8563 + 8571 8576 8577 + 8577 8578 8571 + 8571 8578 8572 + 8566 8579 8563 + 8580 8579 8566 + 8581 8582 8583 + 8584 8582 8581 + 8584 8585 8582 + 8582 8585 8586 + 8586 8587 8582 + 8582 8587 8588 + 8581 8589 8584 + 8584 8589 8590 + 8591 8584 8590 + 8585 8584 8591 + 8591 8592 8585 + 8585 8592 8593 + 8593 8586 8585 + 8581 8594 8589 + 8589 8594 8595 + 8595 8590 8589 + 8594 8581 8596 + 8596 8597 8594 + 8594 8597 8598 + 8598 8595 8594 + 8599 8595 8598 + 8590 8595 8599 + 8597 8596 8600 + 8597 8600 8601 + 8601 8602 8597 + 8597 8602 8598 + 8602 8601 8603 + 8602 8603 8604 + 8604 8605 8602 + 8602 8605 8598 + 8606 8604 8603 + 8607 8604 8606 + 8607 8605 8604 + 8605 8607 8608 + 8608 8609 8605 + 8605 8609 8598 + 8606 8610 8607 + 8607 8610 8611 + 8608 8607 8611 + 8612 8608 8611 + 8613 8608 8612 + 8608 8613 8609 + 8609 8613 8614 + 8614 8598 8609 + 8610 8606 8615 + 8610 8615 8616 + 8616 8611 8610 + 8615 8606 8617 + 8617 8618 8615 + 8615 8618 8619 + 8619 8616 8615 + 8620 8616 8619 + 8616 8620 8621 + 8621 8611 8616 + 8622 8617 8606 + 8623 8617 8622 + 8617 8623 8624 + 8624 8618 8617 + 8618 8624 8625 + 8625 8626 8618 + 8626 8625 8627 + 8628 8622 8606 + 8629 8622 8628 + 8622 8629 8630 + 8622 8630 8623 + 8631 8623 8630 + 8624 8623 8631 + 8631 8632 8624 + 8625 8624 8632 + 8628 8633 8629 + 8629 8633 8634 + 8630 8629 8634 + 8634 8635 8630 + 8630 8635 8636 + 8636 8637 8630 + 8637 8631 8630 + 8638 8631 8637 + 8632 8631 8638 + 8633 8639 8634 + 8640 8634 8639 + 8639 58 8640 + 8619 8641 8620 + 8641 8642 8620 + 8642 8643 8620 + 8643 8644 8620 + 8621 8620 8644 + 8644 8645 8621 + 8621 8645 8646 + 8647 8621 8646 + 8611 8621 8647 + 8643 8648 8644 + 8648 8649 8644 + 8648 8650 8649 + 8650 8651 8649 + 8648 8643 8652 + 8652 8650 8648 + 8650 8652 8653 + 8653 8654 8650 + 8651 8650 8654 + 8652 8643 8655 + 8655 8656 8652 + 8652 8656 8657 + 8657 8653 8652 + 8658 8653 8657 + 8653 8658 8654 + 8659 8656 8655 + 8656 8659 8660 + 8660 8661 8656 + 8656 8661 8657 + 8662 8657 8661 + 8663 8657 8662 + 8657 8663 8658 + 8659 8655 8627 + 8627 8625 8659 + 8660 8659 8625 + 8664 8660 8625 + 8665 8660 8664 + 8660 8665 8661 + 8661 8665 8662 + 8666 8662 8665 + 8667 8662 8666 + 8662 8667 8663 + 8632 8664 8625 + 8668 8664 8632 + 8664 8668 8669 + 8664 8669 8665 + 8665 8669 8666 + 8670 8666 8669 + 8671 8666 8670 + 8666 8671 8667 + 8632 8638 8668 + 8668 8638 8672 + 8670 8668 8672 + 8669 8668 8670 + 8637 8672 8638 + 8672 8637 8673 + 8673 8674 8672 + 8672 8674 8675 + 8675 8676 8672 + 8672 8676 8670 + 8677 8670 8676 + 8670 8677 8671 + 8673 8637 8636 + 8636 8678 8673 + 8679 8673 8678 + 8674 8673 8679 + 8679 8680 8674 + 8674 8680 8681 + 8681 8675 8674 + 8682 8678 8636 + 8678 8682 8683 + 8683 8684 8678 + 8678 8684 8679 + 8685 8679 8684 + 8680 8679 8685 + 8636 8686 8682 + 8682 8686 8687 + 8687 8688 8682 + 8683 8682 8688 + 8688 8689 8683 + 8690 8683 8689 + 8684 8683 8690 + 8686 8636 8635 + 8635 8691 8686 + 8687 8686 8691 + 8691 8692 8687 + 8693 8687 8692 + 8687 8693 8694 + 8694 8688 8687 + 8688 8694 8695 + 8695 8689 8688 + 8691 8635 8634 + 8634 57 8691 + 8696 8697 8698 + 8699 8696 8698 + 8700 8696 8699 + 8700 8701 8696 + 8696 8701 61 + 61 8702 8696 + 8703 8699 8698 + 8704 8699 8703 + 8705 8699 8704 + 8699 8705 8700 + 8700 8705 8706 + 8707 8700 8706 + 8701 8700 8707 + 8698 8708 8703 + 8709 8703 8708 + 8710 8703 8709 + 8703 8710 8704 + 8711 8704 8710 + 8712 8704 8711 + 8704 8712 8705 + 8713 8708 8698 + 8708 8713 8714 + 8708 8714 8709 + 8715 8709 8714 + 8716 8709 8715 + 8709 8716 8710 + 8698 8717 8713 + 8718 8713 8717 + 8714 8713 8718 + 8718 8719 8714 + 8714 8719 8715 + 8717 8698 8720 + 8720 8721 8717 + 8717 8721 8722 + 8722 8723 8717 + 8717 8723 8718 + 8720 8698 8724 + 8724 8725 8720 + 8720 8725 8726 + 8726 8727 8720 + 8727 8728 8720 + 8728 8729 8720 + 8721 8720 8729 + 8730 8724 8698 + 8724 8731 8725 + 8725 8731 8732 + 8732 8726 8725 + 8726 8732 8733 + 8726 8733 8734 + 8734 8727 8726 + 8727 8734 8735 + 8727 8735 8736 + 8736 8728 8727 + 8733 8732 8737 + 8737 8738 8733 + 8734 8733 8738 + 8739 8734 8738 + 8735 8734 8739 + 8739 8740 8735 + 8735 8740 8741 + 8741 8736 8735 + 8737 8732 8742 + 8743 8744 8745 + 8744 8746 8745 + 8747 8745 8746 + 8747 8748 8745 + 8745 8748 8749 + 8749 8750 8745 + 8745 8750 8751 + 8751 48 8745 + 8752 8746 8744 + 8752 8753 8746 + 8746 8753 8747 + 8747 8753 8754 + 8754 8755 8747 + 8748 8747 8755 + 8755 8756 8748 + 8749 8748 8756 + 8744 8757 8752 + 8752 8757 8758 + 8758 8759 8752 + 8753 8752 8759 + 8759 8754 8753 + 8760 8754 8759 + 8754 8760 8761 + 8761 8755 8754 + 8762 8757 8744 + 8757 8762 8763 + 8763 8758 8757 + 8764 8758 8763 + 8759 8758 8764 + 8765 8759 8764 + 8759 8765 8760 + 8762 8744 8766 + 8766 8767 8762 + 8762 8767 8768 + 8768 8769 8762 + 8769 8763 8762 + 8764 8763 8769 + 8769 8770 8764 + 8764 8770 8771 + 8765 8764 8771 + 8771 8772 8765 + 8760 8765 8772 + 8767 8773 8768 + 8773 8774 8768 + 8775 8768 8774 + 8768 8775 8776 + 8776 8769 8768 + 8770 8769 8776 + 8770 8776 8777 + 8777 8771 8770 + 8773 8767 8778 + 8773 8778 48 + 48 8779 8773 + 8774 8773 8779 + 8779 8780 8774 + 8775 8774 8780 + 8780 8781 8775 + 8775 8781 8782 + 8776 8775 8782 + 8782 8777 8776 + 8783 8777 8782 + 8771 8777 8783 + 8784 8779 48 + 8779 8784 8780 + 8784 8785 8780 + 8781 8780 8785 + 8785 8786 8781 + 8781 8786 8787 + 8787 8782 8781 + 8788 8782 8787 + 8782 8788 8783 + 8784 48 8751 + 8751 8789 8784 + 8784 8789 8790 + 8790 8791 8784 + 8791 8785 8784 + 8786 8785 8791 + 8791 8792 8786 + 8787 8786 8792 + 8793 8787 8792 + 8787 8793 8788 + 8794 8789 8751 + 8789 8794 8795 + 8795 8796 8789 + 8789 8796 8790 + 8794 8751 8797 + 8797 8798 8794 + 8794 8798 8799 + 8795 8794 8799 + 8800 8797 8751 + 8801 8797 8800 + 8801 8798 8797 + 8798 8801 8802 + 8802 8799 8798 + 8803 8800 8751 + 8804 8800 8803 + 8804 8805 8800 + 8800 8805 8801 + 8801 8805 8806 + 8806 8807 8801 + 8807 8802 8801 + 8808 8803 8751 + 8809 8803 8808 + 8809 8810 8803 + 8803 8810 8804 + 8804 8810 8811 + 8811 8812 8804 + 8805 8804 8812 + 8812 8806 8805 + 8750 8808 8751 + 8813 8808 8750 + 8813 8814 8808 + 8808 8814 8809 + 8809 8814 8815 + 8815 8816 8809 + 8810 8809 8816 + 8816 8811 8810 + 8750 8817 8813 + 8818 8813 8817 + 8814 8813 8818 + 8818 8815 8814 + 8819 8815 8818 + 8815 8819 8820 + 8820 8816 8815 + 8816 8820 8821 + 8821 8811 8816 + 8749 8817 8750 + 8817 8749 8822 + 8822 8823 8817 + 8817 8823 8824 + 8824 8825 8817 + 8825 8818 8817 + 8826 8818 8825 + 8818 8826 8819 + 8822 8749 8756 + 8827 8822 8756 + 8828 8822 8827 + 8823 8822 8828 + 8823 8828 8829 + 8829 8830 8823 + 8823 8830 8824 + 8756 8831 8827 + 8832 8827 8831 + 8827 8832 8833 + 8827 8833 8828 + 8834 8831 8756 + 8831 8834 8835 + 8835 8836 8831 + 8831 8836 8832 + 8837 8832 8836 + 8833 8832 8837 + 8756 8838 8834 + 8834 8838 8839 + 8839 8840 8834 + 8835 8834 8840 + 8840 8841 8835 + 8842 8835 8841 + 8836 8835 8842 + 8838 8756 8755 + 8755 8761 8838 + 8838 8761 8843 + 8843 8839 8838 + 8839 8843 8844 + 8844 8845 8839 + 8839 8845 8846 + 8846 8840 8839 + 8840 8846 8841 + 8847 8843 8761 + 8844 8843 8847 + 8847 8848 8844 + 8844 8848 8849 + 8850 8844 8849 + 8845 8844 8850 + 8761 8760 8847 + 8772 8847 8760 + 8772 8848 8847 + 8848 8772 8771 + 8771 8849 8848 + 8783 8849 8771 + 8849 8783 8851 + 8851 8852 8849 + 8849 8852 8850 + 8853 8850 8852 + 8850 8853 8854 + 8854 8855 8850 + 8850 8855 8845 + 8851 8783 8856 + 8856 8857 8851 + 8858 8851 8857 + 8851 8858 8859 + 8859 8852 8851 + 8852 8859 8853 + 8783 8788 8856 + 8860 8856 8788 + 8861 8856 8860 + 8856 8861 8862 + 8862 8857 8856 + 8863 8857 8862 + 8857 8863 8858 + 8788 8793 8860 + 8860 8793 8864 + 8864 8865 8860 + 8866 8860 8865 + 8860 8866 8861 + 8792 8864 8793 + 8864 8792 8791 + 8864 8791 8790 + 8790 8865 8864 + 8865 8790 8867 + 8867 8868 8865 + 8865 8868 8866 + 8869 8866 8868 + 8861 8866 8869 + 8869 8870 8861 + 8861 8870 8871 + 8862 8861 8871 + 8867 8790 8872 + 8872 8873 8867 + 8874 8867 8873 + 8868 8867 8874 + 8874 8875 8868 + 8868 8875 8869 + 8796 8872 8790 + 8876 8872 8796 + 8873 8872 8876 + 8873 8876 8877 + 8877 8878 8873 + 8873 8878 8879 + 8879 8874 8873 + 8796 8880 8876 + 8876 8880 8881 + 8877 8876 8881 + 8882 8877 8881 + 8883 8877 8882 + 8883 8878 8877 + 8878 8883 8884 + 8884 8879 8878 + 8796 8795 8880 + 8880 8795 8885 + 8885 8881 8880 + 8885 8886 8881 + 8881 8886 8887 + 8887 8888 8881 + 8881 8888 8889 + 8889 8882 8881 + 8890 8885 8795 + 8886 8885 8890 + 8890 8891 8886 + 8887 8886 8891 + 8891 8892 8887 + 8892 8893 8887 + 8894 8887 8893 + 8887 8894 8888 + 8895 8890 8795 + 8896 8890 8895 + 8896 8891 8890 + 8891 8896 8897 + 8897 8892 8891 + 8898 8892 8897 + 8892 8898 8899 + 8899 8893 8892 + 8799 8895 8795 + 8900 8895 8799 + 8901 8895 8900 + 8895 8901 8896 + 8896 8901 8902 + 8902 8897 8896 + 8898 8897 8902 + 8902 8903 8898 + 8899 8898 8903 + 8799 8904 8900 + 8905 8900 8904 + 8901 8900 8905 + 8905 8906 8901 + 8901 8906 8902 + 8907 8902 8906 + 8903 8902 8907 + 8904 8799 8802 + 8904 8802 8807 + 8807 8908 8904 + 8904 8908 8909 + 8909 8905 8904 + 8910 8905 8909 + 8910 8906 8905 + 8906 8910 8907 + 8911 8908 8807 + 8908 8911 8912 + 8912 8909 8908 + 8912 8913 8909 + 8909 8913 8910 + 8910 8913 8914 + 8907 8910 8914 + 8911 8807 8806 + 8806 8915 8911 + 8911 8915 8916 + 8916 8912 8911 + 8913 8912 8916 + 8916 8914 8913 + 8915 8806 8812 + 8812 8917 8915 + 8915 8917 8918 + 8918 8919 8915 + 8915 8919 8916 + 8920 8916 8919 + 8920 8914 8916 + 8917 8812 8811 + 8811 8821 8917 + 8918 8917 8821 + 8821 8921 8918 + 8922 8918 8921 + 8922 8919 8918 + 8919 8922 8920 + 8920 8922 8923 + 8923 8924 8920 + 8924 8925 8920 + 8914 8920 8925 + 8926 8921 8821 + 8927 8921 8926 + 8921 8927 8922 + 8922 8927 8923 + 8928 8923 8927 + 8929 8923 8928 + 8923 8929 8930 + 8930 8924 8923 + 8821 8820 8926 + 8926 8820 8819 + 8819 8928 8926 + 8927 8926 8928 + 8931 8928 8819 + 8928 8931 8929 + 8929 8931 8932 + 8932 8933 8929 + 8929 8933 8934 + 8934 8930 8929 + 8819 8826 8931 + 8931 8826 8935 + 8935 8932 8931 + 8935 8936 8932 + 8936 8937 8932 + 8933 8932 8937 + 8933 8937 8938 + 8938 8939 8933 + 8933 8939 8934 + 8825 8935 8826 + 8935 8825 8936 + 8936 8825 8940 + 8936 8940 8941 + 8937 8936 8941 + 8941 8938 8937 + 8942 8938 8941 + 8939 8938 8942 + 8939 8942 8943 + 8943 8944 8939 + 8939 8944 8934 + 8825 8824 8940 + 8940 8824 8945 + 8940 8945 8946 + 8946 8941 8940 + 8941 8946 8947 + 8947 8948 8941 + 8941 8948 8942 + 8942 8948 8949 + 8949 8943 8942 + 8945 8824 8830 + 8830 8950 8945 + 8946 8945 8950 + 8950 8951 8946 + 8947 8946 8951 + 8951 8952 8947 + 8953 8947 8952 + 8948 8947 8953 + 8953 8949 8948 + 8950 8830 8829 + 8950 8829 8954 + 8954 8951 8950 + 8952 8951 8954 + 8952 8954 8955 + 8955 8956 8952 + 8952 8956 8953 + 8957 8953 8956 + 8949 8953 8957 + 8954 8829 8828 + 8955 8954 8828 + 8958 8955 8828 + 8959 8955 8958 + 8959 8956 8955 + 8956 8959 8957 + 8960 8957 8959 + 8961 8957 8960 + 8957 8961 8949 + 8949 8961 8962 + 8962 8943 8949 + 8828 8833 8958 + 8833 8963 8958 + 8963 8964 8958 + 8965 8958 8964 + 8965 8966 8958 + 8958 8966 8959 + 8959 8966 8960 + 8837 8963 8833 + 8837 8967 8963 + 8963 8967 8968 + 8968 8964 8963 + 8968 8969 8964 + 8964 8969 8965 + 8965 8969 8970 + 8971 8965 8970 + 8966 8965 8971 + 8967 8837 8972 + 8972 8973 8967 + 8968 8967 8973 + 8973 8974 8968 + 8969 8968 8974 + 8974 8970 8969 + 8836 8972 8837 + 8842 8972 8836 + 8972 8842 8975 + 8975 8973 8972 + 8973 8975 8976 + 8976 8974 8973 + 8974 8976 8977 + 8977 8970 8974 + 8975 8842 8978 + 8978 8979 8975 + 8976 8975 8979 + 8979 8980 8976 + 8977 8976 8980 + 8980 8981 8977 + 8982 8977 8981 + 8970 8977 8982 + 8841 8978 8842 + 8983 8978 8841 + 8979 8978 8983 + 8983 8984 8979 + 8979 8984 8985 + 8985 8980 8979 + 8981 8980 8985 + 8841 8846 8983 + 8983 8846 8845 + 8986 8983 8845 + 8984 8983 8986 + 8986 8987 8984 + 8984 8987 8988 + 8988 8985 8984 + 8989 8985 8988 + 8985 8989 8981 + 8845 8855 8986 + 8990 8986 8855 + 8986 8990 8991 + 8991 8987 8986 + 8987 8991 8992 + 8992 8988 8987 + 8988 8992 8993 + 8993 8994 8988 + 8988 8994 8989 + 8855 8854 8990 + 8990 8854 8995 + 8995 8996 8990 + 8991 8990 8996 + 8996 8997 8991 + 8992 8991 8997 + 8997 8998 8992 + 8993 8992 8998 + 8999 8995 8854 + 9000 8995 8999 + 8995 9000 9001 + 9001 8996 8995 + 8996 9001 9002 + 9002 8997 8996 + 8997 9002 9003 + 9003 8998 8997 + 8854 8853 8999 + 9004 8999 8853 + 9005 8999 9004 + 8999 9005 9000 + 9000 9005 9006 + 9006 9007 9000 + 9001 9000 9007 + 9007 9008 9001 + 9002 9001 9008 + 8853 8859 9004 + 9009 9004 8859 + 9010 9004 9009 + 9004 9010 9005 + 9005 9010 9011 + 9011 9006 9005 + 9012 9006 9011 + 9006 9012 9013 + 9013 9007 9006 + 8859 8858 9009 + 9014 9009 8858 + 9015 9009 9014 + 9009 9015 9010 + 9010 9015 9016 + 9016 9011 9010 + 9017 9011 9016 + 9011 9017 9012 + 8858 8863 9014 + 9018 9014 8863 + 9019 9014 9018 + 9014 9019 9015 + 9015 9019 9020 + 9020 9016 9015 + 9021 9016 9020 + 9016 9021 9017 + 8863 9022 9018 + 9023 9018 9022 + 9024 9018 9023 + 9018 9024 9019 + 9019 9024 9025 + 9025 9020 9019 + 9026 9020 9025 + 9020 9026 9021 + 8862 9022 8863 + 9022 8862 9027 + 9027 9028 9022 + 9022 9028 9023 + 9029 9023 9028 + 9030 9023 9029 + 9023 9030 9024 + 9024 9030 9031 + 9031 9025 9024 + 8871 9027 8862 + 9032 9027 8871 + 9028 9027 9032 + 9032 9033 9028 + 9028 9033 9029 + 9034 9029 9033 + 9035 9029 9034 + 9029 9035 9030 + 9030 9035 9036 + 9036 9031 9030 + 8871 9037 9032 + 9032 9037 9038 + 9038 9039 9032 + 9033 9032 9039 + 9039 9040 9033 + 9033 9040 9034 + 9037 8871 9041 + 9041 9042 9037 + 9037 9042 9043 + 9043 9044 9037 + 9037 9044 9038 + 9041 8871 8870 + 8870 9045 9041 + 9041 9045 9046 + 9042 9041 9046 + 9046 9047 9042 + 9043 9042 9047 + 9047 9048 9043 + 9049 9043 9048 + 9049 9044 9043 + 9045 8870 8869 + 9050 9045 8869 + 9045 9050 9046 + 9050 9051 9046 + 9052 9046 9051 + 9046 9052 9053 + 9053 9047 9046 + 9047 9053 9054 + 9054 9048 9047 + 8875 9050 8869 + 8875 8874 9050 + 9050 8874 9051 + 8874 8879 9051 + 8879 8884 9051 + 9051 8884 9052 + 9052 8884 9055 + 9053 9052 9055 + 9055 9056 9053 + 9054 9053 9056 + 8884 8883 9055 + 8882 9055 8883 + 9056 9055 8882 + 9056 8882 8889 + 8889 9057 9056 + 9056 9057 9054 + 9057 9058 9054 + 9058 9059 9054 + 9060 9054 9059 + 9048 9054 9060 + 9060 9061 9048 + 9048 9061 9049 + 9062 9057 8889 + 9057 9062 9063 + 9063 9058 9057 + 9058 9063 9064 + 9058 9064 9065 + 9065 9059 9058 + 9066 9059 9065 + 9059 9066 9060 + 9062 8889 9067 + 9067 9068 9062 + 9062 9068 9069 + 9063 9062 9069 + 9069 9070 9063 + 9064 9063 9070 + 9071 9067 8889 + 9072 9067 9071 + 9072 9068 9067 + 9068 9072 9073 + 9073 9069 9068 + 9074 9069 9073 + 9069 9074 9075 + 9075 9070 9069 + 8888 9071 8889 + 9076 9071 8888 + 9076 9077 9071 + 9071 9077 9072 + 9073 9072 9077 + 9077 9078 9073 + 9078 9079 9073 + 9080 9073 9079 + 9073 9080 9074 + 8888 8894 9076 + 9081 9076 8894 + 9077 9076 9081 + 9081 9078 9077 + 9082 9078 9081 + 9078 9082 9083 + 9083 9079 9078 + 9083 9084 9079 + 9079 9084 9080 + 9085 9081 8894 + 9081 9085 8899 + 9086 9081 8899 + 9081 9086 9082 + 8893 9085 8894 + 8899 9085 8893 + 9086 8899 8903 + 9087 9086 8903 + 9082 9086 9087 + 9087 9088 9082 + 9082 9088 9089 + 9089 9083 9082 + 9084 9083 9089 + 9089 9090 9084 + 9080 9084 9090 + 9091 9087 8903 + 9091 9088 9087 + 9088 9091 9092 + 9092 9089 9088 + 9090 9089 9092 + 9092 9093 9090 + 9090 9093 9094 + 9094 9095 9090 + 9090 9095 9080 + 8903 9096 9091 + 9091 9096 9097 + 9092 9091 9097 + 9097 9098 9092 + 9093 9092 9098 + 9098 9099 9093 + 9093 9099 9100 + 9100 9094 9093 + 8907 9096 8903 + 9096 8907 9101 + 9101 9097 9096 + 9102 9097 9101 + 9097 9102 9103 + 9103 9098 9097 + 9099 9098 9103 + 9099 9103 9104 + 9104 9100 9099 + 9101 8907 8914 + 8914 9105 9101 + 9106 9101 9105 + 9101 9106 9102 + 9102 9106 9107 + 9107 9108 9102 + 9103 9102 9108 + 9104 9103 9108 + 8925 9105 8914 + 9109 9105 8925 + 9105 9109 9106 + 9106 9109 9110 + 9110 9107 9106 + 9111 9107 9110 + 9108 9107 9111 + 8925 9112 9109 + 9109 9112 9113 + 9113 9110 9109 + 9110 9113 9114 + 9114 9115 9110 + 9110 9115 9111 + 9112 8925 8924 + 8924 9116 9112 + 9112 9116 9117 + 9113 9112 9117 + 9117 9118 9113 + 9114 9113 9118 + 9118 9119 9114 + 9120 9114 9119 + 9115 9114 9120 + 9116 8924 8930 + 8930 9121 9116 + 9116 9121 9122 + 9122 9117 9116 + 9117 9122 9123 + 9123 9124 9117 + 9117 9124 9125 + 9125 9118 9117 + 9118 9125 9119 + 9121 8930 8934 + 8934 9126 9121 + 9121 9126 9127 + 9127 9122 9121 + 9123 9122 9127 + 9127 9128 9123 + 9129 9123 9128 + 9124 9123 9129 + 9126 8934 9130 + 9130 9131 9126 + 9126 9131 9132 + 9132 9127 9126 + 9127 9132 9133 + 9133 9128 9127 + 9130 8934 8944 + 8944 9134 9130 + 9130 9134 9135 + 9135 9136 9130 + 9131 9130 9136 + 9136 9137 9131 + 9131 9137 9138 + 9138 9132 9131 + 9133 9132 9138 + 9134 8944 8943 + 8943 8962 9134 + 9134 8962 9139 + 9139 9140 9134 + 9134 9140 9135 + 9141 9135 9140 + 9142 9135 9141 + 9135 9142 9143 + 9143 9136 9135 + 9137 9136 9143 + 9144 9139 8962 + 9145 9139 9144 + 9140 9139 9145 + 9140 9145 9141 + 9141 9145 9146 + 9146 9147 9141 + 9148 9141 9147 + 9141 9148 9142 + 8962 8961 9144 + 8960 9144 8961 + 9144 8960 9149 + 9149 9146 9144 + 9144 9146 9145 + 9149 8960 9150 + 9150 9151 9149 + 9152 9149 9151 + 9146 9149 9152 + 9152 9147 9146 + 9147 9152 9153 + 9153 9154 9147 + 9147 9154 9148 + 9155 9150 8960 + 9156 9150 9155 + 9151 9150 9156 + 9151 9156 9157 + 9157 9158 9151 + 9151 9158 9152 + 9153 9152 9158 + 8966 9155 8960 + 8971 9155 8966 + 9155 8971 9159 + 9155 9159 9156 + 9157 9156 9159 + 9160 9157 9159 + 9161 9157 9160 + 9161 9158 9157 + 9158 9161 9153 + 9162 9153 9161 + 9154 9153 9162 + 9159 8971 9163 + 9163 9164 9159 + 9159 9164 9165 + 9165 9166 9159 + 9166 9167 9159 + 9167 9160 9159 + 9163 8971 8970 + 8970 9168 9163 + 9169 9163 9168 + 9163 9169 9164 + 9164 9169 9170 + 9170 9165 9164 + 9170 9171 9165 + 9165 9171 9172 + 9172 9166 9165 + 8982 9168 8970 + 9173 9168 8982 + 9168 9173 9169 + 9170 9169 9173 + 9173 9174 9170 + 9171 9170 9174 + 9174 9175 9171 + 9172 9171 9175 + 9176 9172 9175 + 9177 9172 9176 + 9172 9177 9166 + 8982 9178 9173 + 9173 9178 9179 + 9179 9174 9173 + 9174 9179 9180 + 9180 9175 9174 + 9178 8982 9181 + 9181 9182 9178 + 9179 9178 9182 + 9182 9183 9179 + 9180 9179 9183 + 9183 9184 9180 + 9185 9180 9184 + 9175 9180 9185 + 8981 9181 8982 + 9186 9181 8981 + 9181 9186 9182 + 9182 9186 9187 + 9187 9183 9182 + 9184 9183 9187 + 9187 9188 9184 + 9184 9188 9189 + 9189 9190 9184 + 9184 9190 9185 + 8981 8989 9186 + 9187 9186 8989 + 9191 9187 8989 + 9188 9187 9191 + 9191 9192 9188 + 9188 9192 9193 + 9193 9189 9188 + 9194 9189 9193 + 9189 9194 9195 + 9195 9190 9189 + 8989 8994 9191 + 9196 9191 8994 + 9191 9196 9197 + 9197 9192 9191 + 9192 9197 9198 + 9198 9193 9192 + 9193 9198 9199 + 9199 9200 9193 + 9193 9200 9194 + 8994 8993 9196 + 9196 8993 9201 + 9201 9202 9196 + 9197 9196 9202 + 9202 9203 9197 + 9198 9197 9203 + 9203 9204 9198 + 9199 9198 9204 + 8998 9201 8993 + 9205 9201 8998 + 9201 9205 9206 + 9206 9202 9201 + 9202 9206 9207 + 9207 9203 9202 + 9203 9207 9208 + 9208 9204 9203 + 8998 9003 9205 + 9205 9003 9209 + 9209 9210 9205 + 9206 9205 9210 + 9210 9211 9206 + 9207 9206 9211 + 9211 9212 9207 + 9208 9207 9212 + 9213 9209 9003 + 9214 9209 9213 + 9209 9214 9215 + 9215 9210 9209 + 9210 9215 9216 + 9216 9211 9210 + 9211 9216 9217 + 9217 9212 9211 + 9003 9002 9213 + 9008 9213 9002 + 9218 9213 9008 + 9213 9218 9214 + 9214 9218 9219 + 9219 9220 9214 + 9215 9214 9220 + 9220 9221 9215 + 9216 9215 9221 + 9221 9222 9216 + 9217 9216 9222 + 9008 9223 9218 + 9218 9223 9224 + 9224 9219 9218 + 9219 9224 9225 + 9225 9226 9219 + 9219 9226 9227 + 9227 9220 9219 + 9221 9220 9227 + 9223 9008 9007 + 9007 9013 9223 + 9223 9013 9228 + 9228 9224 9223 + 9225 9224 9228 + 9228 9229 9225 + 9230 9225 9229 + 9226 9225 9230 + 9230 9231 9226 + 9226 9231 9232 + 9232 9227 9226 + 9233 9228 9013 + 9228 9233 9234 + 9234 9229 9228 + 9229 9234 9235 + 9235 9236 9229 + 9229 9236 9230 + 9013 9012 9233 + 9237 9233 9012 + 9234 9233 9237 + 9237 9238 9234 + 9235 9234 9238 + 9238 9239 9235 + 9240 9235 9239 + 9235 9240 9241 + 9241 9236 9235 + 9012 9017 9237 + 9242 9237 9017 + 9237 9242 9243 + 9243 9238 9237 + 9238 9243 9244 + 9244 9239 9238 + 9245 9239 9244 + 9239 9245 9240 + 9017 9021 9242 + 9246 9242 9021 + 9243 9242 9246 + 9246 9247 9243 + 9244 9243 9247 + 9247 9248 9244 + 9249 9244 9248 + 9244 9249 9245 + 9021 9026 9246 + 9250 9246 9026 + 9246 9250 9251 + 9251 9247 9246 + 9247 9251 9252 + 9252 9248 9247 + 9253 9248 9252 + 9248 9253 9249 + 9026 9254 9250 + 9255 9250 9254 + 9251 9250 9255 + 9255 9256 9251 + 9252 9251 9256 + 9256 9257 9252 + 9258 9252 9257 + 9252 9258 9253 + 9025 9254 9026 + 9254 9025 9031 + 9031 9259 9254 + 9254 9259 9255 + 9260 9255 9259 + 9255 9260 9261 + 9261 9256 9255 + 9256 9261 9262 + 9262 9257 9256 + 9263 9257 9262 + 9257 9263 9258 + 9259 9031 9036 + 9036 9264 9259 + 9259 9264 9260 + 9265 9260 9264 + 9261 9260 9265 + 9265 9266 9261 + 9262 9261 9266 + 9266 9267 9262 + 9268 9262 9267 + 9262 9268 9263 + 9264 9036 9269 + 9269 9270 9264 + 9264 9270 9265 + 9271 9265 9270 + 9265 9271 9272 + 9272 9266 9265 + 9266 9272 9273 + 9273 9267 9266 + 9269 9036 9035 + 9035 9274 9269 + 9275 9269 9274 + 9270 9269 9275 + 9275 9276 9270 + 9270 9276 9271 + 9277 9271 9276 + 9272 9271 9277 + 9277 9278 9272 + 9273 9272 9278 + 9034 9274 9035 + 9274 9034 9279 + 9279 9280 9274 + 9274 9280 9275 + 9281 9275 9280 + 9276 9275 9281 + 9281 9282 9276 + 9276 9282 9277 + 9279 9034 9040 + 9040 9283 9279 + 9284 9279 9283 + 9280 9279 9284 + 9284 9285 9280 + 9280 9285 9281 + 9286 9281 9285 + 9282 9281 9286 + 9287 9283 9040 + 9283 9287 9288 + 9288 9289 9283 + 9283 9289 9284 + 9290 9284 9289 + 9285 9284 9290 + 9290 9291 9285 + 9285 9291 9286 + 9040 9039 9287 + 9287 9039 9038 + 9038 9292 9287 + 9287 9292 9293 + 9293 9288 9287 + 9294 9288 9293 + 9289 9288 9294 + 9294 9295 9289 + 9289 9295 9290 + 9296 9290 9295 + 9291 9290 9296 + 9292 9038 9297 + 9297 9298 9292 + 9292 9298 9299 + 9299 9300 9292 + 9292 9300 9293 + 9297 9038 9044 + 9044 9049 9297 + 9297 9049 9061 + 9061 9301 9297 + 9298 9297 9301 + 9301 9302 9298 + 9299 9298 9302 + 9302 9303 9299 + 9304 9299 9303 + 9304 9300 9299 + 9305 9301 9061 + 9301 9305 9306 + 9306 9302 9301 + 9302 9306 9307 + 9307 9303 9302 + 9303 9307 9308 + 9308 9309 9303 + 9303 9309 9304 + 9061 9060 9305 + 9305 9060 9066 + 9066 9310 9305 + 9306 9305 9310 + 9310 9311 9306 + 9306 9311 9312 + 9307 9306 9312 + 9312 9313 9307 + 9313 9308 9307 + 9314 9310 9066 + 9311 9310 9314 + 9311 9314 9315 + 9315 9312 9311 + 9066 9065 9314 + 9314 9065 9064 + 9315 9314 9064 + 9316 9315 9064 + 9313 9315 9316 + 9313 9317 9315 + 9064 9318 9316 + 9318 9319 9316 + 9319 9320 9316 + 9320 9321 9316 + 9322 9316 9321 + 9322 9323 9316 + 9316 9323 9313 + 9070 9318 9064 + 9070 9075 9318 + 9318 9075 9324 + 9324 9319 9318 + 9324 9325 9319 + 9319 9325 9326 + 9326 9320 9319 + 9326 9327 9320 + 9320 9327 9328 + 9328 9321 9320 + 9324 9075 9074 + 9329 9324 9074 + 9325 9324 9329 + 9329 9330 9325 + 9326 9325 9330 + 9330 9331 9326 + 9327 9326 9331 + 9331 9332 9327 + 9328 9327 9332 + 9074 9333 9329 + 9334 9329 9333 + 9329 9334 9335 + 9335 9330 9329 + 9330 9335 9336 + 9336 9331 9330 + 9331 9336 9337 + 9337 9332 9331 + 9338 9333 9074 + 9339 9333 9338 + 9333 9339 9334 + 9340 9334 9339 + 9335 9334 9340 + 9340 9341 9335 + 9335 9341 9342 + 9342 9336 9335 + 9337 9336 9342 + 9074 9080 9338 + 9095 9338 9080 + 9339 9338 9095 + 9095 9343 9339 + 9339 9343 9340 + 9343 9344 9340 + 9345 9340 9344 + 9341 9340 9345 + 9343 9095 9094 + 9094 9346 9343 + 9343 9346 9347 + 9347 9344 9343 + 9348 9344 9347 + 9344 9348 9345 + 9346 9094 9100 + 9100 9349 9346 + 9346 9349 9350 + 9350 9347 9346 + 9348 9347 9350 + 9350 9351 9348 + 9345 9348 9351 + 9351 9352 9345 + 9353 9345 9352 + 9345 9353 9341 + 9354 9349 9100 + 9349 9354 9355 + 9355 9350 9349 + 9350 9355 9351 + 9351 9355 9356 + 9356 9352 9351 + 9357 9352 9356 + 9352 9357 9353 + 9358 9353 9357 + 9341 9353 9358 + 9100 9104 9354 + 9354 9104 9359 + 9359 9360 9354 + 9355 9354 9360 + 9360 9361 9355 + 9361 9356 9355 + 9362 9356 9361 + 9356 9362 9357 + 9108 9359 9104 + 9363 9359 9108 + 9360 9359 9363 + 9363 9364 9360 + 9360 9364 9365 + 9365 9361 9360 + 9366 9361 9365 + 9361 9366 9362 + 9108 9367 9363 + 9368 9363 9367 + 9364 9363 9368 + 9368 9369 9364 + 9364 9369 9370 + 9370 9371 9364 + 9371 9365 9364 + 9111 9367 9108 + 9367 9111 9372 + 9372 9373 9367 + 9367 9373 9368 + 9374 9368 9373 + 9369 9368 9374 + 9369 9374 9375 + 9375 9370 9369 + 9372 9111 9115 + 9115 9376 9372 + 9377 9372 9376 + 9372 9377 9378 + 9378 9373 9372 + 9373 9378 9374 + 9374 9378 9379 + 9375 9374 9379 + 9120 9376 9115 + 9380 9376 9120 + 9376 9380 9377 + 9377 9380 9381 + 9381 9382 9377 + 9378 9377 9382 + 9382 9379 9378 + 9120 9383 9380 + 9380 9383 9384 + 9384 9381 9380 + 9385 9381 9384 + 9381 9385 9386 + 9386 9382 9381 + 9382 9386 9387 + 9387 9379 9382 + 9383 9120 9388 + 9388 9389 9383 + 9383 9389 9390 + 9390 9384 9383 + 9391 9384 9390 + 9384 9391 9385 + 9119 9388 9120 + 9392 9388 9119 + 9389 9388 9392 + 9392 9393 9389 + 9389 9393 9394 + 9394 9390 9389 + 9395 9390 9394 + 9390 9395 9391 + 9119 9125 9392 + 9392 9125 9124 + 9124 9396 9392 + 9393 9392 9396 + 9396 9397 9393 + 9393 9397 9398 + 9398 9394 9393 + 9399 9394 9398 + 9394 9399 9395 + 9129 9396 9124 + 9397 9396 9129 + 9129 9400 9397 + 9397 9400 9401 + 9401 9398 9397 + 9402 9398 9401 + 9398 9402 9399 + 9399 9402 9403 + 9403 9404 9399 + 9395 9399 9404 + 9400 9129 9405 + 9405 9406 9400 + 9400 9406 9407 + 9407 9401 9400 + 9408 9401 9407 + 9401 9408 9402 + 9402 9408 9409 + 9409 9403 9402 + 9128 9405 9129 + 9410 9405 9128 + 9406 9405 9410 + 9410 9411 9406 + 9406 9411 9412 + 9412 9407 9406 + 9413 9407 9412 + 9407 9413 9408 + 9408 9413 9414 + 9414 9409 9408 + 9128 9133 9410 + 9410 9133 9415 + 9415 9416 9410 + 9411 9410 9416 + 9416 9417 9411 + 9411 9417 9418 + 9418 9412 9411 + 9419 9412 9418 + 9412 9419 9413 + 9138 9415 9133 + 9138 9420 9415 + 9415 9420 9421 + 9421 9416 9415 + 9417 9416 9421 + 9421 9422 9417 + 9417 9422 9423 + 9423 9418 9417 + 9424 9418 9423 + 9418 9424 9419 + 9420 9138 9425 + 9425 9426 9420 + 9420 9426 9427 + 9427 9421 9420 + 9422 9421 9427 + 9427 9428 9422 + 9422 9428 9429 + 9429 9423 9422 + 9137 9425 9138 + 9430 9425 9137 + 9426 9425 9430 + 9430 9431 9426 + 9426 9431 9432 + 9432 9427 9426 + 9428 9427 9432 + 9432 9433 9428 + 9428 9433 9434 + 9434 9429 9428 + 9137 9435 9430 + 9436 9430 9435 + 9431 9430 9436 + 9436 9437 9431 + 9432 9431 9437 + 9437 9438 9432 + 9433 9432 9438 + 9143 9435 9137 + 9435 9143 9439 + 9439 9440 9435 + 9435 9440 9436 + 9441 9436 9440 + 9436 9441 9442 + 9442 9437 9436 + 9437 9442 9443 + 9443 9438 9437 + 9439 9143 9444 + 9444 9445 9439 + 9445 9446 9439 + 9447 9439 9446 + 9440 9439 9447 + 9447 9448 9440 + 9440 9448 9441 + 9143 9142 9444 + 9449 9444 9142 + 9444 9449 9450 + 9444 9450 9451 + 9451 9445 9444 + 9445 9451 9452 + 9445 9452 9453 + 9453 9446 9445 + 9142 9148 9449 + 9449 9148 9154 + 9154 9454 9449 + 9454 9455 9449 + 9450 9449 9455 + 9455 9456 9450 + 9450 9456 9457 + 9457 9451 9450 + 9457 9458 9451 + 9458 9452 9451 + 9162 9454 9154 + 9454 9162 9459 + 9454 9459 9460 + 9460 9455 9454 + 9455 9460 9456 + 9456 9460 9461 + 9461 9462 9456 + 9456 9462 9457 + 9463 9457 9462 + 9458 9457 9463 + 9459 9162 9464 + 9464 9465 9459 + 9459 9465 9461 + 9461 9460 9459 + 9161 9464 9162 + 9160 9464 9161 + 9465 9464 9160 + 9465 9160 9167 + 9167 9466 9465 + 9465 9466 9461 + 9467 9461 9466 + 9462 9461 9467 + 9462 9467 9463 + 9468 9466 9167 + 9466 9468 9467 + 9467 9468 9177 + 9463 9467 9177 + 9177 9469 9463 + 9469 9470 9463 + 9471 9463 9470 + 9463 9471 9458 + 9468 9167 9166 + 9166 9177 9468 + 9176 9469 9177 + 9469 9176 9472 + 9469 9472 9473 + 9473 9470 9469 + 9474 9470 9473 + 9470 9474 9471 + 9475 9471 9474 + 9458 9471 9475 + 9472 9176 9476 + 9476 9477 9472 + 9472 9477 9478 + 9478 9479 9472 + 9479 9480 9472 + 9480 9481 9472 + 9481 9482 9472 + 9482 9483 9472 + 9483 9484 9472 + 9484 9473 9472 + 9476 9176 9175 + 9175 9485 9476 + 9486 9476 9485 + 9476 9486 9477 + 9477 9486 9487 + 9487 9478 9477 + 9487 9488 9478 + 9478 9488 9489 + 9489 9479 9478 + 9185 9485 9175 + 9485 9185 9490 + 9490 9491 9485 + 9485 9491 9486 + 9487 9486 9491 + 9491 9492 9487 + 9488 9487 9492 + 9492 9493 9488 + 9489 9488 9493 + 9490 9185 9190 + 9190 9195 9490 + 9494 9490 9195 + 9491 9490 9494 + 9494 9492 9491 + 9492 9494 9495 + 9495 9493 9492 + 9493 9495 9496 + 9496 9497 9493 + 9493 9497 9498 + 9498 9489 9493 + 9195 9499 9494 + 9495 9494 9499 + 9499 9500 9495 + 9496 9495 9500 + 9500 9501 9496 + 9502 9496 9501 + 9496 9502 9497 + 9497 9502 9503 + 9503 9498 9497 + 9504 9499 9195 + 9499 9504 9500 + 9500 9504 9505 + 9505 9501 9500 + 9506 9501 9505 + 9501 9506 9502 + 9502 9506 9507 + 9503 9502 9507 + 9195 9194 9504 + 9505 9504 9194 + 9508 9505 9194 + 9509 9505 9508 + 9505 9509 9506 + 9506 9509 9510 + 9510 9511 9506 + 9506 9511 9507 + 9194 9200 9508 + 9512 9508 9200 + 9508 9512 9513 + 9513 9514 9508 + 9508 9514 9509 + 9509 9514 9515 + 9515 9510 9509 + 9516 9510 9515 + 9511 9510 9516 + 9200 9199 9512 + 9512 9199 9517 + 9517 9518 9512 + 9513 9512 9518 + 9518 9519 9513 + 9520 9513 9519 + 9514 9513 9520 + 9520 9515 9514 + 9204 9517 9199 + 9521 9517 9204 + 9517 9521 9522 + 9522 9518 9517 + 9518 9522 9523 + 9523 9519 9518 + 9519 9523 9524 + 9524 9525 9519 + 9519 9525 9520 + 9204 9208 9521 + 9521 9208 9526 + 9526 9527 9521 + 9522 9521 9527 + 9527 9528 9522 + 9523 9522 9528 + 9528 9529 9523 + 9524 9523 9529 + 9212 9526 9208 + 9530 9526 9212 + 9526 9530 9531 + 9531 9527 9526 + 9527 9531 9532 + 9532 9528 9527 + 9528 9532 9533 + 9533 9529 9528 + 9212 9217 9530 + 9530 9217 9534 + 9534 9535 9530 + 9531 9530 9535 + 9535 9536 9531 + 9532 9531 9536 + 9536 9537 9532 + 9533 9532 9537 + 9222 9534 9217 + 9534 9222 9538 + 9538 9539 9534 + 9534 9539 9540 + 9540 9535 9534 + 9536 9535 9540 + 9540 9541 9536 + 9536 9541 9542 + 9542 9537 9536 + 9538 9222 9221 + 9221 9543 9538 + 9544 9538 9543 + 9539 9538 9544 + 9544 9545 9539 + 9539 9545 9546 + 9546 9540 9539 + 9541 9540 9546 + 9227 9543 9221 + 9543 9227 9232 + 9232 9547 9543 + 9543 9547 9544 + 9548 9544 9547 + 9544 9548 9549 + 9549 9545 9544 + 9545 9549 9550 + 9550 9546 9545 + 9551 9547 9232 + 9547 9551 9548 + 9548 9551 9552 + 9552 9553 9548 + 9549 9548 9553 + 9553 9554 9549 + 9550 9549 9554 + 9232 9555 9551 + 9551 9555 9556 + 9556 9552 9551 + 9557 9552 9556 + 9552 9557 9558 + 9558 9553 9552 + 9553 9558 9559 + 9559 9554 9553 + 9555 9232 9231 + 9231 9560 9555 + 9555 9560 9561 + 9561 9556 9555 + 9562 9556 9561 + 9556 9562 9557 + 9557 9562 9563 + 9563 9564 9557 + 9558 9557 9564 + 9560 9231 9230 + 9230 9565 9560 + 9560 9565 9566 + 9566 9561 9560 + 9567 9561 9566 + 9561 9567 9562 + 9562 9567 9568 + 9568 9563 9562 + 9565 9230 9236 + 9236 9241 9565 + 9565 9241 9569 + 9569 9566 9565 + 9570 9566 9569 + 9566 9570 9567 + 9567 9570 9571 + 9571 9568 9567 + 9572 9568 9571 + 9568 9572 9573 + 9573 9563 9568 + 9574 9569 9241 + 9575 9569 9574 + 9569 9575 9570 + 9570 9575 9576 + 9576 9571 9570 + 9577 9571 9576 + 9571 9577 9572 + 9241 9240 9574 + 9578 9574 9240 + 9579 9574 9578 + 9574 9579 9575 + 9575 9579 9580 + 9580 9576 9575 + 9581 9576 9580 + 9576 9581 9577 + 9240 9245 9578 + 9582 9578 9245 + 9583 9578 9582 + 9578 9583 9579 + 9579 9583 9584 + 9584 9580 9579 + 9585 9580 9584 + 9580 9585 9581 + 9245 9249 9582 + 9586 9582 9249 + 9587 9582 9586 + 9582 9587 9583 + 9583 9587 9588 + 9588 9584 9583 + 9589 9584 9588 + 9584 9589 9585 + 9249 9253 9586 + 9590 9586 9253 + 9591 9586 9590 + 9586 9591 9587 + 9587 9591 9592 + 9592 9588 9587 + 9593 9588 9592 + 9588 9593 9589 + 9253 9258 9590 + 9594 9590 9258 + 9595 9590 9594 + 9590 9595 9591 + 9591 9595 9596 + 9596 9592 9591 + 9597 9592 9596 + 9592 9597 9593 + 9258 9263 9594 + 9598 9594 9263 + 9599 9594 9598 + 9594 9599 9595 + 9595 9599 9600 + 9600 9596 9595 + 9601 9596 9600 + 9596 9601 9597 + 9263 9268 9598 + 9602 9598 9268 + 9603 9598 9602 + 9598 9603 9599 + 9599 9603 9604 + 9604 9600 9599 + 9605 9600 9604 + 9600 9605 9601 + 9268 9606 9602 + 9607 9602 9606 + 9608 9602 9607 + 9602 9608 9603 + 9603 9608 9609 + 9609 9604 9603 + 9610 9604 9609 + 9604 9610 9605 + 9267 9606 9268 + 9606 9267 9273 + 9273 9611 9606 + 9606 9611 9607 + 9612 9607 9611 + 9613 9607 9612 + 9607 9613 9608 + 9608 9613 9614 + 9614 9609 9608 + 9615 9609 9614 + 9609 9615 9610 + 9611 9273 9616 + 9616 9617 9611 + 9611 9617 9612 + 9618 9612 9617 + 9619 9612 9618 + 9612 9619 9613 + 9613 9619 9620 + 9620 9614 9613 + 9278 9616 9273 + 9621 9616 9278 + 9617 9616 9621 + 9621 9622 9617 + 9617 9622 9618 + 9623 9618 9622 + 9624 9618 9623 + 9618 9624 9619 + 9619 9624 9625 + 9625 9620 9619 + 9278 9626 9621 + 9627 9621 9626 + 9622 9621 9627 + 9627 9628 9622 + 9622 9628 9623 + 9629 9623 9628 + 9630 9623 9629 + 9623 9630 9624 + 9626 9278 9277 + 9277 9631 9626 + 9626 9631 9632 + 9632 9633 9626 + 9626 9633 9627 + 9634 9627 9633 + 9628 9627 9634 + 9634 9635 9628 + 9628 9635 9629 + 9631 9277 9282 + 9282 9636 9631 + 9631 9636 9637 + 9637 9632 9631 + 9638 9632 9637 + 9632 9638 9639 + 9639 9633 9632 + 9633 9639 9634 + 9640 9634 9639 + 9635 9634 9640 + 9286 9636 9282 + 9636 9286 9641 + 9641 9637 9636 + 9637 9641 9642 + 9642 9643 9637 + 9637 9643 9638 + 9638 9643 9644 + 9644 9645 9638 + 9639 9638 9645 + 9641 9286 9291 + 9291 9646 9641 + 9642 9641 9646 + 9646 9647 9642 + 9648 9642 9647 + 9643 9642 9648 + 9648 9644 9643 + 9296 9646 9291 + 9646 9296 9649 + 9649 9647 9646 + 9647 9649 9650 + 9650 9651 9647 + 9647 9651 9648 + 9652 9648 9651 + 9644 9648 9652 + 9649 9296 9653 + 9653 9654 9649 + 9650 9649 9654 + 9654 9655 9650 + 9656 9650 9655 + 9651 9650 9656 + 9656 9657 9651 + 9651 9657 9652 + 9295 9653 9296 + 9658 9653 9295 + 9653 9658 9659 + 9659 9654 9653 + 9654 9659 9660 + 9660 9655 9654 + 9655 9660 9661 + 9661 9662 9655 + 9655 9662 9656 + 9295 9294 9658 + 9658 9294 9663 + 9663 9664 9658 + 9659 9658 9664 + 9664 9665 9659 + 9660 9659 9665 + 9665 9666 9660 + 9661 9660 9666 + 9294 9667 9663 + 9668 9663 9667 + 9669 9663 9668 + 9663 9669 9670 + 9670 9664 9663 + 9665 9664 9670 + 9293 9667 9294 + 9671 9667 9293 + 9667 9671 9668 + 9668 9671 9672 + 9672 9673 9668 + 9669 9668 9673 + 9673 9674 9669 + 9669 9674 9675 + 9675 9670 9669 + 9676 9671 9293 + 9672 9671 9676 + 9677 9672 9676 + 9672 9677 9678 + 9672 9678 9679 + 9679 9673 9672 + 9673 9679 9680 + 9680 9674 9673 + 9676 9293 9681 + 9681 9682 9676 + 9676 9682 9683 + 9683 9684 9676 + 9684 9677 9676 + 9678 9677 9684 + 9685 9681 9293 + 9686 9681 9685 + 9682 9681 9686 + 9682 9686 9687 + 9687 9683 9682 + 9688 9683 9687 + 9683 9688 9689 + 9689 9684 9683 + 9300 9685 9293 + 9690 9685 9300 + 9691 9685 9690 + 9685 9691 9686 + 9686 9691 9692 + 9692 9687 9686 + 9693 9687 9692 + 9687 9693 9688 + 9300 9304 9690 + 9690 9304 9309 + 9309 9694 9690 + 9691 9690 9694 + 9694 9692 9691 + 9695 9692 9694 + 9692 9695 9693 + 9693 9695 9696 + 9696 9697 9693 + 9688 9693 9697 + 9697 9698 9688 + 9689 9688 9698 + 9699 9694 9309 + 9694 9699 9695 + 9695 9699 9700 + 9700 9696 9695 + 9696 9700 9701 + 9696 9701 9702 + 9702 9697 9696 + 9698 9697 9702 + 9309 9308 9699 + 9699 9308 9323 + 9323 9703 9699 + 9703 9700 9699 + 9701 9700 9703 + 9703 9704 9701 + 9701 9704 9705 + 9702 9701 9705 + 9308 9313 9323 + 9474 9473 9484 + 9484 9706 9474 + 9474 9706 9475 + 9707 9475 9706 + 9708 9475 9707 + 9475 9708 9458 + 9452 9458 9708 + 9709 9706 9484 + 9706 9709 9707 + 9710 9707 9709 + 9711 9707 9710 + 9707 9711 9708 + 9708 9711 9712 + 9712 9453 9708 + 9708 9453 9452 + 9709 9484 9483 + 9483 9713 9709 + 9709 9713 9710 + 9714 9710 9713 + 9715 9710 9714 + 9710 9715 9711 + 9712 9711 9715 + 9715 9716 9712 + 9717 9712 9716 + 9453 9712 9717 + 9717 9446 9453 + 9718 9713 9483 + 9713 9718 9714 + 9719 9714 9718 + 9720 9714 9719 + 9714 9720 9715 + 9715 9720 9721 + 9721 9716 9715 + 9722 9716 9721 + 9716 9722 9717 + 9718 9483 9482 + 9482 9723 9718 + 9718 9723 9719 + 9724 9719 9723 + 9725 9719 9724 + 9719 9725 9720 + 9721 9720 9725 + 9725 9726 9721 + 9722 9721 9726 + 9727 9723 9482 + 9723 9727 9724 + 9728 9724 9727 + 9729 9724 9728 + 9724 9729 9725 + 9725 9729 9730 + 9730 9726 9725 + 9731 9726 9730 + 9726 9731 9722 + 9727 9482 9481 + 9481 9732 9727 + 9727 9732 9728 + 9733 9728 9732 + 9734 9728 9733 + 9728 9734 9729 + 9729 9734 9735 + 9730 9729 9735 + 9735 9736 9730 + 9731 9730 9736 + 9737 9732 9481 + 9732 9737 9733 + 9738 9733 9737 + 9734 9733 9738 + 9738 9735 9734 + 9735 9738 9739 + 9735 9739 9740 + 9740 9736 9735 + 9737 9481 9480 + 9480 9741 9737 + 9737 9741 9742 + 9742 9738 9737 + 9739 9738 9742 + 9742 9743 9739 + 9740 9739 9743 + 9743 9744 9740 + 9745 9740 9744 + 9736 9740 9745 + 9746 9741 9480 + 9741 9746 9747 + 9747 9748 9741 + 9741 9748 9742 + 9746 9480 9479 + 9479 9749 9746 + 9746 9749 9750 + 9747 9746 9750 + 9751 9747 9750 + 9752 9747 9751 + 9748 9747 9752 + 9489 9749 9479 + 9749 9489 9498 + 9498 9750 9749 + 9503 9750 9498 + 9750 9503 9753 + 9753 9754 9750 + 9750 9754 9755 + 9755 9751 9750 + 9756 9751 9755 + 9751 9756 9757 + 9751 9757 9752 + 9758 9753 9503 + 9759 9753 9758 + 9759 9754 9753 + 9754 9759 9760 + 9760 9755 9754 + 9760 9761 9755 + 9755 9761 9756 + 9762 9756 9761 + 9757 9756 9762 + 9507 9758 9503 + 9763 9758 9507 + 9763 9764 9758 + 9758 9764 9759 + 9760 9759 9764 + 9764 9765 9760 + 9765 9766 9760 + 9761 9760 9766 + 9766 9767 9761 + 9761 9767 9762 + 9507 9768 9763 + 9769 9763 9768 + 9769 9765 9763 + 9765 9764 9763 + 9768 9507 9770 + 9768 9770 9771 + 9771 9772 9768 + 9768 9772 9769 + 9773 9769 9772 + 9769 9773 9765 + 9765 9773 8740 + 8740 9766 9765 + 9767 9766 8740 + 9770 9507 9511 + 9511 9516 9770 + 9770 9516 9774 + 9774 9775 9770 + 9775 9771 9770 + 9776 9771 9775 + 9771 9776 8741 + 8741 9772 9771 + 9772 8741 9773 + 8740 9773 8741 + 9515 9774 9516 + 9777 9774 9515 + 9774 9777 9778 + 9778 9775 9774 + 9775 9778 9779 + 9779 9780 9775 + 9775 9780 9776 + 9515 9520 9777 + 9777 9520 9525 + 9525 9781 9777 + 9778 9777 9781 + 9781 9782 9778 + 9779 9778 9782 + 9782 9783 9779 + 9784 9779 9783 + 9780 9779 9784 + 9785 9781 9525 + 9781 9785 9786 + 9786 9782 9781 + 9782 9786 9787 + 9787 9783 9782 + 9783 9787 9788 + 9788 9789 9783 + 9783 9789 9784 + 9525 9524 9785 + 9785 9524 9790 + 9790 9791 9785 + 9786 9785 9791 + 9791 9792 9786 + 9787 9786 9792 + 9792 9793 9787 + 9788 9787 9793 + 9529 9790 9524 + 9794 9790 9529 + 9790 9794 9795 + 9795 9791 9790 + 9791 9795 9796 + 9796 9792 9791 + 9792 9796 9797 + 9797 9793 9792 + 9529 9533 9794 + 9798 9794 9533 + 9795 9794 9798 + 9798 9799 9795 + 9796 9795 9799 + 9799 9800 9796 + 9797 9796 9800 + 9533 9801 9798 + 9802 9798 9801 + 9798 9802 9803 + 9803 9799 9798 + 9799 9803 9804 + 9804 9800 9799 + 9805 9800 9804 + 9800 9805 9797 + 9537 9801 9533 + 9801 9537 9542 + 9542 9806 9801 + 9801 9806 9802 + 9802 9806 9807 + 9807 9808 9802 + 9803 9802 9808 + 9808 9809 9803 + 9803 9809 9810 + 9810 9804 9803 + 9806 9542 9811 + 9811 9807 9806 + 9812 9807 9811 + 9807 9812 9813 + 9813 9808 9807 + 9808 9813 9814 + 9814 9809 9808 + 9809 9814 9815 + 9815 9810 9809 + 9811 9542 9541 + 9541 9816 9811 + 9817 9811 9816 + 9811 9817 9812 + 9812 9817 9818 + 9818 9819 9812 + 9813 9812 9819 + 9819 9820 9813 + 9814 9813 9820 + 9546 9816 9541 + 9821 9816 9546 + 9816 9821 9817 + 9817 9821 9822 + 9822 9818 9817 + 9823 9818 9822 + 9818 9823 9824 + 9824 9819 9818 + 9819 9824 9825 + 9825 9820 9819 + 9546 9550 9821 + 9821 9550 9826 + 9826 9822 9821 + 9827 9822 9826 + 9822 9827 9823 + 9823 9827 9828 + 9828 9829 9823 + 9824 9823 9829 + 9829 9830 9824 + 9825 9824 9830 + 9554 9826 9550 + 9831 9826 9554 + 9826 9831 9827 + 9827 9831 9832 + 9832 9828 9827 + 9833 9828 9832 + 9828 9833 9834 + 9834 9829 9828 + 9829 9834 9835 + 9835 9830 9829 + 9554 9559 9831 + 9831 9559 9836 + 9836 9832 9831 + 9837 9832 9836 + 9832 9837 9833 + 9833 9837 9838 + 9838 9839 9833 + 9834 9833 9839 + 9839 9840 9834 + 9835 9834 9840 + 9841 9836 9559 + 9842 9836 9841 + 9836 9842 9837 + 9837 9842 9843 + 9843 9838 9837 + 9844 9838 9843 + 9838 9844 9845 + 9845 9839 9838 + 9559 9558 9841 + 9564 9841 9558 + 9846 9841 9564 + 9841 9846 9842 + 9842 9846 9847 + 9847 9843 9842 + 9848 9843 9847 + 9843 9848 9844 + 9844 9848 9849 + 9849 9850 9844 + 9845 9844 9850 + 9564 9851 9846 + 9846 9851 9852 + 9852 9847 9846 + 9853 9847 9852 + 9847 9853 9848 + 9848 9853 9854 + 9854 9849 9848 + 9851 9564 9563 + 9563 9573 9851 + 9851 9573 9855 + 9855 9852 9851 + 9856 9852 9855 + 9852 9856 9853 + 9853 9856 9857 + 9857 9854 9853 + 9403 9854 9857 + 9854 9403 9409 + 9409 9849 9854 + 9858 9855 9573 + 9859 9855 9858 + 9855 9859 9856 + 9856 9859 9860 + 9860 9857 9856 + 9404 9857 9860 + 9857 9404 9403 + 9573 9572 9858 + 9861 9858 9572 + 9862 9858 9861 + 9858 9862 9859 + 9859 9862 9863 + 9863 9860 9859 + 9864 9860 9863 + 9860 9864 9404 + 9404 9864 9395 + 9391 9395 9864 + 9572 9577 9861 + 9865 9861 9577 + 9866 9861 9865 + 9861 9866 9862 + 9862 9866 9867 + 9867 9863 9862 + 9868 9863 9867 + 9863 9868 9864 + 9864 9868 9391 + 9385 9391 9868 + 9577 9581 9865 + 9869 9865 9581 + 9870 9865 9869 + 9865 9870 9866 + 9866 9870 9871 + 9871 9867 9866 + 9872 9867 9871 + 9867 9872 9868 + 9868 9872 9385 + 9386 9385 9872 + 9581 9585 9869 + 9873 9869 9585 + 9874 9869 9873 + 9869 9874 9870 + 9870 9874 9875 + 9875 9871 9870 + 9876 9871 9875 + 9871 9876 9872 + 9872 9876 9386 + 9387 9386 9876 + 9585 9589 9873 + 9877 9873 9589 + 9878 9873 9877 + 9873 9878 9874 + 9874 9878 9879 + 9879 9875 9874 + 9880 9875 9879 + 9875 9880 9876 + 9876 9880 9387 + 9881 9387 9880 + 9379 9387 9881 + 9589 9593 9877 + 9882 9877 9593 + 9883 9877 9882 + 9877 9883 9878 + 9878 9883 9884 + 9884 9879 9878 + 9885 9879 9884 + 9879 9885 9880 + 9880 9885 9881 + 9593 9597 9882 + 9886 9882 9597 + 9887 9882 9886 + 9882 9887 9883 + 9883 9887 9888 + 9888 9884 9883 + 9889 9884 9888 + 9884 9889 9885 + 9885 9889 9890 + 9890 9881 9885 + 9597 9601 9886 + 9891 9886 9601 + 9892 9886 9891 + 9886 9892 9887 + 9887 9892 9893 + 9893 9888 9887 + 9894 9888 9893 + 9888 9894 9889 + 9889 9894 9895 + 9895 9890 9889 + 9601 9605 9891 + 9896 9891 9605 + 9897 9891 9896 + 9891 9897 9892 + 9892 9897 9898 + 9898 9893 9892 + 9899 9893 9898 + 9893 9899 9894 + 9894 9899 9900 + 9900 9895 9894 + 9605 9610 9896 + 9901 9896 9610 + 9902 9896 9901 + 9896 9902 9897 + 9897 9902 9903 + 9903 9898 9897 + 9904 9898 9903 + 9898 9904 9899 + 9899 9904 9905 + 9905 9900 9899 + 9610 9615 9901 + 9906 9901 9615 + 9907 9901 9906 + 9901 9907 9902 + 9902 9907 9908 + 9908 9903 9902 + 9909 9903 9908 + 9903 9909 9904 + 9904 9909 9910 + 9910 9905 9904 + 9615 9911 9906 + 9912 9906 9911 + 9913 9906 9912 + 9906 9913 9907 + 9907 9913 9914 + 9914 9908 9907 + 9915 9908 9914 + 9908 9915 9909 + 9614 9911 9615 + 9911 9614 9620 + 9620 9916 9911 + 9911 9916 9912 + 9917 9912 9916 + 9918 9912 9917 + 9912 9918 9913 + 9913 9918 9919 + 9919 9914 9913 + 9920 9914 9919 + 9914 9920 9915 + 9916 9620 9625 + 9625 9921 9916 + 9916 9921 9917 + 9922 9917 9921 + 9923 9917 9922 + 9917 9923 9918 + 9918 9923 9924 + 9924 9919 9918 + 9925 9919 9924 + 9919 9925 9920 + 9921 9625 9926 + 9926 9927 9921 + 9921 9927 9922 + 9928 9922 9927 + 9929 9922 9928 + 9922 9929 9923 + 9923 9929 9930 + 9930 9924 9923 + 9926 9625 9624 + 9624 9630 9926 + 9931 9926 9630 + 9927 9926 9931 + 9931 9932 9927 + 9927 9932 9928 + 9933 9928 9932 + 9934 9928 9933 + 9928 9934 9929 + 9929 9934 9935 + 9935 9930 9929 + 9630 9936 9931 + 9937 9931 9936 + 9932 9931 9937 + 9937 9938 9932 + 9932 9938 9933 + 9939 9933 9938 + 9940 9933 9939 + 9933 9940 9934 + 9629 9936 9630 + 9936 9629 9941 + 9941 9942 9936 + 9936 9942 9937 + 9943 9937 9942 + 9938 9937 9943 + 9943 9944 9938 + 9938 9944 9939 + 9941 9629 9635 + 9635 9945 9941 + 9946 9941 9945 + 9942 9941 9946 + 9946 9947 9942 + 9942 9947 9943 + 9943 9947 9948 + 9948 9949 9943 + 9944 9943 9949 + 9640 9945 9635 + 9945 9640 9950 + 9950 9951 9945 + 9945 9951 9946 + 9946 9951 9952 + 9952 9953 9946 + 9947 9946 9953 + 9953 9948 9947 + 9950 9640 9954 + 9954 9955 9950 + 9950 9955 9956 + 9956 9957 9950 + 9951 9950 9957 + 9957 9952 9951 + 9639 9954 9640 + 9645 9954 9639 + 9955 9954 9645 + 9645 9958 9955 + 9955 9958 9959 + 9959 9956 9955 + 9960 9956 9959 + 9956 9960 9961 + 9961 9957 9956 + 9952 9957 9961 + 9958 9645 9644 + 9644 9962 9958 + 9959 9958 9962 + 9962 9963 9959 + 9964 9959 9963 + 9959 9964 9960 + 9652 9962 9644 + 9962 9652 9965 + 9965 9963 9962 + 9963 9965 9966 + 9966 9967 9963 + 9963 9967 9964 + 9964 9967 9968 + 9968 9969 9964 + 9960 9964 9969 + 9970 9965 9652 + 9966 9965 9970 + 9970 9971 9966 + 9966 9971 9972 + 9972 9973 9966 + 9967 9966 9973 + 9973 9968 9967 + 9652 9657 9970 + 9974 9970 9657 + 9970 9974 9975 + 9975 9971 9970 + 9971 9975 9976 + 9976 9972 9971 + 9657 9656 9974 + 9977 9974 9656 + 9975 9974 9977 + 9977 9978 9975 + 9975 9978 9979 + 9979 9976 9975 + 9980 9976 9979 + 9972 9976 9980 + 9656 9662 9977 + 9981 9977 9662 + 9977 9981 9982 + 9982 9978 9977 + 9978 9982 9983 + 9983 9979 9978 + 9979 9983 9984 + 9984 9985 9979 + 9979 9985 9980 + 9662 9661 9981 + 9981 9661 9986 + 9986 9987 9981 + 9982 9981 9987 + 9987 9988 9982 + 9983 9982 9988 + 9989 9983 9988 + 9984 9983 9989 + 9661 9990 9986 + 9991 9986 9990 + 9992 9986 9991 + 9986 9992 9993 + 9993 9987 9986 + 9988 9987 9993 + 9666 9990 9661 + 9990 9666 9994 + 9994 9995 9990 + 9990 9995 9991 + 9991 9995 9996 + 9996 9997 9991 + 9992 9991 9997 + 9994 9666 9665 + 9665 9998 9994 + 9999 9994 9998 + 9995 9994 9999 + 9999 9996 9995 + 10000 9996 9999 + 9996 10000 10001 + 10001 9997 9996 + 9670 9998 9665 + 9998 9670 9675 + 9675 10002 9998 + 9998 10002 9999 + 10003 9999 10002 + 9999 10003 10000 + 10000 10003 10004 + 10004 10005 10000 + 10000 10005 10006 + 10006 10001 10000 + 10007 10002 9675 + 10002 10007 10003 + 10004 10003 10007 + 10008 10004 10007 + 10004 10008 10009 + 10010 10004 10009 + 10010 10005 10004 + 10005 10010 10011 + 10011 10006 10005 + 9675 10012 10007 + 10007 10012 10013 + 10013 10014 10007 + 10007 10014 10008 + 10012 9675 9674 + 9674 9680 10012 + 10012 9680 10015 + 10015 10013 10012 + 10016 10013 10015 + 10014 10013 10016 + 10014 10016 10017 + 10017 10018 10014 + 10014 10018 10008 + 10019 10015 9680 + 10015 10019 10020 + 10015 10020 10016 + 10016 10020 10021 + 10017 10016 10021 + 9680 9679 10019 + 10022 10019 9679 + 10020 10019 10022 + 10022 10021 10020 + 10022 10023 10021 + 10021 10023 10024 + 10024 10025 10021 + 10021 10025 10017 + 9679 9678 10022 + 9678 10026 10022 + 10026 10027 10022 + 10027 10028 10022 + 10023 10022 10028 + 10028 10029 10023 + 10024 10023 10029 + 9684 10026 9678 + 9684 9689 10026 + 10027 10026 9689 + 10030 10027 9689 + 9698 10030 9689 + 10031 10030 9698 + 9698 9702 10031 + 10032 10031 9702 + 10027 10031 10032 + 10027 10033 10031 + 10032 9702 9705 + 9705 10034 10032 + 10034 10035 10032 + 10029 10032 10035 + 10029 10028 10032 + 10032 10028 10027 + 10036 10034 9705 + 10036 10037 10034 + 10034 10037 10038 + 10038 10035 10034 + 10038 10039 10035 + 10035 10039 10029 + 10029 10039 10040 + 10040 10024 10029 + 9705 10041 10036 + 10036 10041 10042 + 10042 10043 10036 + 10037 10036 10043 + 10043 10044 10037 + 10044 10045 10037 + 10045 10038 10037 + 10046 10041 9705 + 10041 10046 10047 + 10047 10042 10041 + 10048 10042 10047 + 10042 10048 10049 + 10049 10043 10042 + 10043 10049 10050 + 10050 10044 10043 + 10046 9705 10051 + 10051 10052 10046 + 10046 10052 10053 + 10053 10047 10046 + 10054 10047 10053 + 10048 10047 10054 + 9704 10051 9705 + 10055 10051 9704 + 10055 10052 10051 + 10052 10055 10056 + 10056 10053 10052 + 10057 10053 10056 + 10053 10057 10054 + 10058 10054 10057 + 10048 10054 10058 + 9704 10059 10055 + 10056 10055 10059 + 10060 10056 10059 + 10061 10056 10060 + 10056 10061 10057 + 10057 10061 10062 + 10062 10063 10057 + 10057 10063 10058 + 9703 10059 9704 + 10059 9703 9323 + 9323 9322 10059 + 10059 9322 10060 + 9322 10064 10060 + 10065 10060 10064 + 10066 10060 10065 + 10060 10066 10061 + 10062 10061 10066 + 10066 10067 10062 + 10068 10062 10067 + 10068 10063 10062 + 9321 10064 9322 + 9328 10064 9321 + 10064 9328 10065 + 9332 10065 9328 + 10069 10065 9332 + 10065 10069 10066 + 10066 10069 10070 + 10070 10067 10066 + 10071 10067 10070 + 10067 10071 10068 + 10068 10071 10072 + 10073 10068 10072 + 10063 10068 10073 + 10073 10058 10063 + 9332 9337 10069 + 10070 10069 9337 + 9337 10074 10070 + 10071 10070 10074 + 10074 10075 10071 + 10071 10075 10072 + 9342 10074 9337 + 10074 9342 10076 + 10076 10075 10074 + 10075 10076 10077 + 10077 10072 10075 + 10076 9342 10078 + 10078 10079 10076 + 10076 10079 10080 + 10080 10077 10076 + 10081 10077 10080 + 10072 10077 10081 + 9341 10078 9342 + 9358 10078 9341 + 10079 10078 9358 + 10079 9358 10082 + 10082 10080 10079 + 10080 10082 10083 + 10083 10084 10080 + 10080 10084 10081 + 10085 10081 10084 + 10086 10081 10085 + 10081 10086 10072 + 9357 10082 9358 + 10083 10082 9357 + 9357 9362 10083 + 10087 10083 9362 + 10084 10083 10087 + 10087 10088 10084 + 10084 10088 10085 + 10089 10085 10088 + 10085 10089 10090 + 10085 10090 10086 + 9362 9366 10087 + 10091 10087 9366 + 10088 10087 10091 + 10091 10092 10088 + 10088 10092 10089 + 10093 10089 10092 + 10090 10089 10093 + 10093 10094 10090 + 10086 10090 10094 + 10094 10095 10086 + 10072 10086 10095 + 9366 10096 10091 + 10097 10091 10096 + 10092 10091 10097 + 10097 10098 10092 + 10092 10098 10099 + 10099 10100 10092 + 10100 10093 10092 + 9365 10096 9366 + 10096 9365 9371 + 9371 10101 10096 + 10096 10101 10097 + 10102 10097 10101 + 10097 10102 10103 + 10103 10098 10097 + 10098 10103 10104 + 10104 10099 10098 + 10105 10101 9371 + 10101 10105 10102 + 10102 10105 10106 + 10106 10107 10102 + 10103 10102 10107 + 10107 10108 10103 + 10104 10103 10108 + 9371 10109 10105 + 10105 10109 10110 + 10110 10106 10105 + 9900 10106 10110 + 10106 9900 9905 + 9905 10107 10106 + 10107 9905 9910 + 9910 10108 10107 + 10109 9371 9370 + 9370 10111 10109 + 10110 10109 10111 + 10111 10112 10110 + 9895 10110 10112 + 10110 9895 9900 + 9370 9375 10111 + 10111 9375 10113 + 10113 10112 10111 + 9890 10112 10113 + 10112 9890 9895 + 9379 10113 9375 + 9881 10113 9379 + 10113 9881 9890 + 10039 10038 10040 + 10038 10045 10040 + 10114 10040 10045 + 10040 10114 10115 + 10115 10116 10040 + 10040 10116 10024 + 10117 10024 10116 + 10024 10117 10025 + 10045 10118 10114 + 10114 10118 10119 + 10119 10120 10114 + 10121 10114 10120 + 10121 10115 10114 + 10118 10045 10044 + 10044 10050 10118 + 10119 10118 10050 + 10050 10122 10119 + 10123 10119 10122 + 10120 10119 10123 + 10123 10124 10120 + 10120 10124 10125 + 10125 10121 10120 + 10126 10122 10050 + 10122 10126 10127 + 10127 10128 10122 + 10122 10128 10123 + 10050 10049 10126 + 10126 10049 10048 + 10048 10129 10126 + 10127 10126 10129 + 10129 10130 10127 + 10131 10127 10130 + 10128 10127 10131 + 10131 10132 10128 + 10128 10132 10133 + 10123 10128 10133 + 10058 10129 10048 + 10129 10058 10073 + 10073 10130 10129 + 10130 10073 10134 + 10134 10135 10130 + 10130 10135 10131 + 10136 10131 10135 + 10131 10136 10137 + 10137 10132 10131 + 10132 10137 10138 + 10138 10133 10132 + 10072 10134 10073 + 10095 10134 10072 + 10135 10134 10095 + 10095 10139 10135 + 10135 10139 10136 + 10136 10139 10140 + 10140 10141 10136 + 10137 10136 10141 + 10141 10142 10137 + 10138 10137 10142 + 10139 10095 10094 + 10094 10140 10139 + 10094 10093 10140 + 10140 10093 10100 + 10100 10141 10140 + 10142 10141 10100 + 10100 10143 10142 + 10142 10143 10144 + 10144 10145 10142 + 10142 10145 10138 + 10146 10138 10145 + 10133 10138 10146 + 10143 10100 10099 + 10099 10147 10143 + 10144 10143 10147 + 10148 10144 10147 + 10149 10144 10148 + 10145 10144 10149 + 10145 10149 10146 + 10146 10149 10150 + 10150 10151 10146 + 10133 10146 10151 + 10152 10147 10099 + 10147 10152 10153 + 10153 10154 10147 + 10147 10154 10148 + 10099 10104 10152 + 10152 10104 10155 + 10155 10156 10152 + 10153 10152 10156 + 10156 10157 10153 + 10158 10153 10157 + 10154 10153 10158 + 10108 10155 10104 + 10159 10155 10108 + 10155 10159 10160 + 10160 10156 10155 + 10156 10160 10161 + 10161 10157 10156 + 10157 10161 10162 + 10162 10163 10157 + 10157 10163 10158 + 10108 9910 10159 + 10159 9910 9909 + 9909 9915 10159 + 10160 10159 9915 + 9915 9920 10160 + 10161 10160 9920 + 9920 9925 10161 + 10162 10161 9925 + 9925 10164 10162 + 10165 10162 10164 + 10163 10162 10165 + 10165 10166 10163 + 10163 10166 10167 + 10167 10158 10163 + 10168 10158 10167 + 10158 10168 10154 + 9924 10164 9925 + 10164 9924 9930 + 9930 10169 10164 + 10164 10169 10165 + 10170 10165 10169 + 10166 10165 10170 + 10170 10171 10166 + 10166 10171 10172 + 10172 10167 10166 + 10173 10167 10172 + 10167 10173 10168 + 10169 9930 9935 + 9935 10174 10169 + 10169 10174 10170 + 10175 10170 10174 + 10171 10170 10175 + 10175 10176 10171 + 10171 10176 10177 + 10177 10172 10171 + 10178 10172 10177 + 10172 10178 10173 + 10174 9935 10179 + 10179 10180 10174 + 10174 10180 10175 + 10181 10175 10180 + 10176 10175 10181 + 10181 10182 10176 + 10176 10182 10183 + 10183 10177 10176 + 10179 9935 9934 + 9934 9940 10179 + 10184 10179 9940 + 10180 10179 10184 + 10184 10185 10180 + 10180 10185 10181 + 10181 10185 10186 + 10186 10187 10181 + 10182 10181 10187 + 10187 10188 10182 + 10183 10182 10188 + 9940 10189 10184 + 10184 10189 10190 + 10190 10191 10184 + 10185 10184 10191 + 10191 10186 10185 + 9939 10189 9940 + 10189 9939 10192 + 10192 10190 10189 + 10190 10192 10193 + 10193 10194 10190 + 10190 10194 10195 + 10195 10191 10190 + 10186 10191 10195 + 10196 10192 9939 + 10193 10192 10196 + 10196 10197 10193 + 10193 10197 10198 + 10198 10199 10193 + 10194 10193 10199 + 10199 10200 10194 + 10195 10194 10200 + 9939 9944 10196 + 9949 10196 9944 + 10196 9949 10201 + 10201 10197 10196 + 10197 10201 10202 + 10202 10198 10197 + 10198 10202 10203 + 10203 10204 10198 + 10198 10204 10205 + 10205 10199 10198 + 10200 10199 10205 + 10201 9949 9948 + 9948 10206 10201 + 10201 10206 10207 + 10207 10202 10201 + 10203 10202 10207 + 10207 10208 10203 + 10203 10208 10209 + 10209 10210 10203 + 10204 10203 10210 + 10211 10206 9948 + 10206 10211 10212 + 10212 10207 10206 + 10207 10212 10213 + 10213 10208 10207 + 10208 10213 10214 + 10214 10209 10208 + 9948 9953 10211 + 10211 9953 9952 + 9952 10215 10211 + 10211 10215 10216 + 10216 10212 10211 + 10213 10212 10216 + 10216 10217 10213 + 10213 10217 10218 + 10218 10214 10213 + 10219 10214 10218 + 10209 10214 10219 + 9961 10215 9952 + 10215 9961 10220 + 10220 10216 10215 + 10216 10220 10221 + 10221 10217 10216 + 10217 10221 10222 + 10222 10218 10217 + 10218 10222 10223 + 10223 10224 10218 + 10218 10224 10219 + 10220 9961 9960 + 9960 10225 10220 + 10221 10220 10225 + 10225 10226 10221 + 10222 10221 10226 + 10226 10227 10222 + 10223 10222 10227 + 10227 10228 10223 + 10229 10223 10228 + 10224 10223 10229 + 9969 10225 9960 + 10226 10225 9969 + 9969 10230 10226 + 10226 10230 10231 + 10231 10227 10226 + 10228 10227 10231 + 10231 10232 10228 + 10228 10232 10233 + 10233 10234 10228 + 10228 10234 10229 + 10230 9969 9968 + 9968 10235 10230 + 10230 10235 10236 + 10236 10231 10230 + 10232 10231 10236 + 10236 10237 10232 + 10232 10237 10238 + 10238 10233 10232 + 10239 10235 9968 + 10235 10239 10240 + 10240 10236 10235 + 10236 10240 10241 + 10241 10237 10236 + 10237 10241 10242 + 10242 10238 10237 + 9968 9973 10239 + 10239 9973 9972 + 9972 10243 10239 + 10239 10243 10244 + 10244 10240 10239 + 10241 10240 10244 + 10244 10245 10241 + 10241 10245 10246 + 10246 10242 10241 + 10247 10242 10246 + 10238 10242 10247 + 9980 10243 9972 + 10243 9980 10248 + 10248 10244 10243 + 10244 10248 10249 + 10249 10245 10244 + 10245 10249 10250 + 10250 10246 10245 + 10246 10250 10251 + 10251 10252 10246 + 10246 10252 10247 + 10253 10248 9980 + 10249 10248 10253 + 10253 10254 10249 + 10249 10254 10255 + 10255 10250 10249 + 10251 10250 10255 + 9980 9985 10253 + 10256 10253 9985 + 10253 10256 10257 + 10257 10254 10253 + 10254 10257 10258 + 10258 10255 10254 + 10255 10258 10259 + 10259 10260 10255 + 10255 10260 10251 + 9985 9984 10256 + 10256 9984 10261 + 10262 10256 10261 + 10257 10256 10262 + 10262 10263 10257 + 10258 10257 10263 + 10263 10264 10258 + 10264 10265 10258 + 10259 10258 10265 + 9989 10261 9984 + 10261 9989 10266 + 10266 10267 10261 + 10261 10267 10268 + 10268 10269 10261 + 10261 10269 10262 + 10270 10262 10269 + 10263 10262 10270 + 10266 9989 10271 + 10271 10272 10266 + 10273 10266 10272 + 10267 10266 10273 + 10273 10274 10267 + 10267 10274 10275 + 10275 10268 10267 + 10276 10271 9989 + 10277 10271 10276 + 10272 10271 10277 + 10278 10272 10277 + 10272 10278 10273 + 10279 10273 10278 + 10273 10279 10280 + 10280 10274 10273 + 10281 10276 9989 + 10282 10276 10281 + 10283 10276 10282 + 10276 10283 10277 + 10284 10277 10283 + 10284 10278 10277 + 10285 10278 10284 + 10278 10285 10279 + 9988 10281 9989 + 10286 10281 9988 + 10287 10281 10286 + 10281 10287 10282 + 10288 10282 10287 + 10283 10282 10288 + 10288 10289 10283 + 10283 10289 10284 + 10290 10284 10289 + 10284 10290 10285 + 9988 10291 10286 + 10292 10286 10291 + 10287 10286 10292 + 10292 10293 10287 + 10287 10293 10288 + 10294 10288 10293 + 10288 10294 10295 + 10295 10289 10288 + 10289 10295 10290 + 9993 10291 9988 + 10291 9993 10296 + 10296 10297 10291 + 10291 10297 10292 + 10297 10298 10292 + 10299 10292 10298 + 10292 10299 10300 + 10300 10293 10292 + 10293 10300 10294 + 10296 9993 9992 + 9992 10301 10296 + 10302 10296 10301 + 10302 10297 10296 + 10297 10302 10298 + 10302 10303 10298 + 10303 10304 10298 + 10298 10304 10299 + 10305 10299 10304 + 10300 10299 10305 + 9997 10301 9992 + 10306 10301 9997 + 10301 10306 10302 + 10303 10302 10306 + 10307 10303 10306 + 10304 10303 10307 + 10307 10308 10304 + 10304 10308 10305 + 9997 10001 10306 + 10306 10001 10006 + 10006 10309 10306 + 10306 10309 10310 + 10310 10307 10306 + 10307 10310 10311 + 10312 10307 10311 + 10312 10313 10307 + 10011 10309 10006 + 10309 10011 10314 + 10314 10315 10309 + 10309 10315 10310 + 10316 10310 10315 + 10311 10310 10316 + 10314 10011 10009 + 10009 10317 10314 + 10317 10318 10314 + 10318 10319 10314 + 10319 10320 10314 + 10320 10321 10314 + 10321 10322 10314 + 10314 10322 10315 + 10011 10010 10009 + 10315 10322 10316 + 10323 10316 10322 + 10311 10316 10323 + 10324 10323 10322 + 10325 10323 10324 + 10326 10323 10325 + 10323 10326 10311 + 10322 10321 10324 + 10321 10327 10324 + 10328 10324 10327 + 10324 10328 10329 + 10329 10330 10324 + 10324 10330 10325 + 10331 10325 10330 + 10326 10325 10331 + 10321 10332 10327 + 10332 10333 10327 + 10334 10327 10333 + 10327 10334 10328 + 10328 10334 10335 + 10335 10336 10328 + 10329 10328 10336 + 10320 10332 10321 + 10332 10320 10319 + 10319 10337 10332 + 10332 10337 10338 + 10333 10332 10338 + 10339 10333 10338 + 10333 10339 10334 + 10334 10339 10340 + 10340 10335 10334 + 10319 10341 10337 + 10337 10341 10342 + 10337 10342 10338 + 10343 10338 10342 + 10344 10338 10343 + 10338 10344 10339 + 10339 10344 10345 + 10345 10340 10339 + 10346 10341 10319 + 10347 10341 10346 + 10341 10347 10342 + 10342 10347 10348 + 10342 10348 10343 + 10343 10348 10349 + 10350 10343 10349 + 10344 10343 10350 + 10350 10345 10344 + 10318 10346 10319 + 10318 10351 10346 + 10346 10351 10352 + 10352 10353 10346 + 10346 10353 10347 + 10348 10347 10353 + 10353 10349 10348 + 10351 10318 10317 + 10317 10354 10351 + 10351 10354 10355 + 10352 10351 10355 + 10355 10356 10352 + 10356 10357 10352 + 10352 10357 10349 + 10349 10353 10352 + 10317 10358 10354 + 10354 10358 10359 + 10359 10355 10354 + 10355 10359 10360 + 10356 10355 10360 + 10358 10317 10009 + 10009 10361 10358 + 10358 10361 10362 + 10363 10358 10362 + 10363 10359 10358 + 10360 10359 10363 + 10009 10008 10361 + 10361 10008 10362 + 10008 10018 10362 + 10362 10018 10017 + 10364 10362 10017 + 10362 10364 10363 + 10364 10365 10363 + 10365 10366 10363 + 10367 10363 10366 + 10363 10367 10360 + 10368 10364 10017 + 10365 10364 10368 + 10365 10368 10369 + 10366 10365 10369 + 10370 10366 10369 + 10371 10366 10370 + 10366 10371 10367 + 10367 10371 10372 + 10372 10360 10367 + 10373 10368 10017 + 10368 10373 10369 + 10374 10369 10373 + 10369 10374 10370 + 10374 10375 10370 + 10376 10370 10375 + 10370 10376 10371 + 10377 10373 10017 + 10374 10373 10377 + 10377 10378 10374 + 10374 10378 10379 + 10379 10375 10374 + 10375 10379 10380 + 10381 10375 10380 + 10375 10381 10376 + 10025 10377 10017 + 10377 10025 10117 + 10382 10377 10117 + 10382 10378 10377 + 10378 10382 10383 + 10383 10379 10378 + 10380 10379 10383 + 10384 10380 10383 + 10380 10384 10385 + 10385 10386 10380 + 10386 10381 10380 + 10382 10117 10387 + 10387 10388 10382 + 10388 10383 10382 + 10388 10384 10383 + 10384 10388 10389 + 10384 10389 10390 + 10390 10391 10384 + 10384 10391 10385 + 10116 10387 10117 + 10387 10116 10115 + 10392 10387 10115 + 10388 10387 10392 + 10389 10388 10392 + 10390 10389 10392 + 10392 10393 10390 + 10394 10390 10393 + 10391 10390 10394 + 10394 10395 10391 + 10391 10395 10396 + 10396 10385 10391 + 10392 10115 10121 + 10121 10393 10392 + 10125 10393 10121 + 10393 10125 10394 + 10394 10125 10124 + 10124 10397 10394 + 10397 10398 10394 + 10395 10394 10398 + 10398 10399 10395 + 10396 10395 10399 + 10399 10400 10396 + 10401 10396 10400 + 10401 10385 10396 + 10402 10397 10124 + 10403 10397 10402 + 10397 10403 10404 + 10404 10398 10397 + 10398 10404 10405 + 10405 10399 10398 + 10399 10405 10406 + 10406 10400 10399 + 10124 10123 10402 + 10407 10402 10123 + 10408 10402 10407 + 10402 10408 10403 + 10403 10408 10409 + 10409 10410 10403 + 10404 10403 10410 + 10410 10411 10404 + 10405 10404 10411 + 10133 10407 10123 + 10151 10407 10133 + 10407 10151 10412 + 10407 10412 10408 + 10408 10412 10413 + 10413 10409 10408 + 10414 10409 10413 + 10409 10414 10410 + 10410 10414 10415 + 10415 10411 10410 + 10416 10411 10415 + 10411 10416 10405 + 10406 10405 10416 + 10412 10151 10150 + 10150 10413 10412 + 10413 10150 10148 + 10413 10148 10414 + 10415 10414 10148 + 10154 10415 10148 + 10417 10415 10154 + 10415 10417 10416 + 10416 10417 10418 + 10418 10419 10416 + 10416 10419 10406 + 10148 10150 10149 + 10154 10168 10417 + 10417 10168 10173 + 10173 10420 10417 + 10420 10418 10417 + 10421 10418 10420 + 10419 10418 10421 + 10419 10421 10422 + 10422 10406 10419 + 10400 10406 10422 + 10423 10420 10173 + 10420 10423 10424 + 10424 10425 10420 + 10420 10425 10421 + 10421 10425 10426 + 10426 10422 10421 + 10427 10422 10426 + 10422 10427 10400 + 10400 10427 10401 + 10173 10178 10423 + 10423 10178 10428 + 10428 10429 10423 + 10424 10423 10429 + 10429 10430 10424 + 10424 10430 10431 + 10431 10432 10424 + 10425 10424 10432 + 10432 10426 10425 + 10177 10428 10178 + 10428 10177 10183 + 10183 10433 10428 + 10428 10433 10434 + 10434 10429 10428 + 10429 10434 10435 + 10435 10430 10429 + 10430 10435 10436 + 10436 10431 10430 + 10433 10183 10437 + 10437 10438 10433 + 10433 10438 10439 + 10434 10433 10439 + 10439 10440 10434 + 10435 10434 10440 + 10440 10441 10435 + 10436 10435 10441 + 10188 10437 10183 + 10442 10437 10188 + 10438 10437 10442 + 10442 10443 10438 + 10438 10443 10444 + 10444 10439 10438 + 10188 10445 10442 + 10442 10445 10446 + 10446 10447 10442 + 10443 10442 10447 + 10448 10445 10188 + 10445 10448 10449 + 10449 10446 10445 + 10446 10449 10450 + 10450 10451 10446 + 10446 10451 10452 + 10452 10447 10446 + 10188 10187 10448 + 10448 10187 10186 + 10186 10453 10448 + 10448 10453 10454 + 10454 10449 10448 + 10450 10449 10454 + 10454 10455 10450 + 10450 10455 10456 + 10456 10457 10450 + 10451 10450 10457 + 10195 10453 10186 + 10453 10195 10458 + 10458 10454 10453 + 10454 10458 10459 + 10459 10455 10454 + 10455 10459 10460 + 10460 10456 10455 + 10200 10458 10195 + 10459 10458 10200 + 10200 10461 10459 + 10459 10461 10462 + 10462 10460 10459 + 10463 10460 10462 + 10456 10460 10463 + 10463 10464 10456 + 10456 10464 10465 + 10465 10457 10456 + 10205 10461 10200 + 10461 10205 10466 + 10466 10462 10461 + 10462 10466 10467 + 10467 10468 10462 + 10462 10468 10463 + 10463 10468 10469 + 10469 10470 10463 + 10464 10463 10470 + 10471 10466 10205 + 10467 10466 10471 + 10471 10472 10467 + 10467 10472 10473 + 10473 10474 10467 + 10468 10467 10474 + 10474 10469 10468 + 10205 10204 10471 + 10210 10471 10204 + 10471 10210 10475 + 10475 10472 10471 + 10472 10475 10476 + 10476 10473 10472 + 10473 10476 10477 + 10477 10478 10473 + 10473 10478 10479 + 10479 10474 10473 + 10469 10474 10479 + 10475 10210 10209 + 10209 10480 10475 + 10475 10480 10481 + 10481 10476 10475 + 10477 10476 10481 + 10481 10482 10477 + 10477 10482 10483 + 10483 10484 10477 + 10478 10477 10484 + 10219 10480 10209 + 10480 10219 10485 + 10485 10481 10480 + 10481 10485 10486 + 10486 10482 10481 + 10482 10486 10487 + 10487 10483 10482 + 10488 10485 10219 + 10486 10485 10488 + 10488 10489 10486 + 10486 10489 10490 + 10490 10487 10486 + 10491 10487 10490 + 10483 10487 10491 + 10219 10224 10488 + 10229 10488 10224 + 10488 10229 10492 + 10492 10489 10488 + 10489 10492 10493 + 10493 10490 10489 + 10490 10493 10494 + 10494 10495 10490 + 10490 10495 10491 + 10492 10229 10234 + 10234 10496 10492 + 10493 10492 10496 + 10496 10497 10493 + 10494 10493 10497 + 10497 10498 10494 + 10499 10494 10498 + 10495 10494 10499 + 10499 10500 10495 + 10491 10495 10500 + 10496 10234 10233 + 10233 10501 10496 + 10496 10501 10502 + 10502 10497 10496 + 10498 10497 10502 + 10502 10503 10498 + 10498 10503 10504 + 10504 10505 10498 + 10498 10505 10499 + 10501 10233 10238 + 10238 10506 10501 + 10501 10506 10507 + 10507 10502 10501 + 10503 10502 10507 + 10507 10508 10503 + 10503 10508 10509 + 10509 10504 10503 + 10247 10506 10238 + 10506 10247 10510 + 10510 10507 10506 + 10507 10510 10511 + 10511 10508 10507 + 10508 10511 10512 + 10512 10509 10508 + 10513 10510 10247 + 10511 10510 10513 + 10513 10514 10511 + 10511 10514 10515 + 10515 10512 10511 + 10516 10512 10515 + 10509 10512 10516 + 10247 10252 10513 + 10517 10513 10252 + 10513 10517 10518 + 10518 10514 10513 + 10514 10518 10519 + 10519 10515 10514 + 10515 10519 10520 + 10520 10521 10515 + 10515 10521 10516 + 10252 10251 10517 + 10522 10517 10251 + 10518 10517 10522 + 10522 10523 10518 + 10518 10523 10524 + 10524 10519 10518 + 10520 10519 10524 + 10251 10260 10522 + 10525 10522 10260 + 10522 10525 10526 + 10526 10523 10522 + 10523 10526 10527 + 10527 10524 10523 + 10524 10527 10528 + 10528 10529 10524 + 10524 10529 10520 + 10260 10259 10525 + 10525 10259 10530 + 10531 10525 10530 + 10526 10525 10531 + 10531 10532 10526 + 10527 10526 10532 + 10532 10533 10527 + 10533 10534 10527 + 10528 10527 10534 + 10265 10530 10259 + 10530 10265 10535 + 10535 10536 10530 + 10530 10536 10537 + 10537 10538 10530 + 10530 10538 10531 + 10539 10531 10538 + 10532 10531 10539 + 10535 10265 10264 + 10264 10540 10535 + 10541 10535 10540 + 10536 10535 10541 + 10541 10542 10536 + 10536 10542 10543 + 10543 10537 10536 + 10543 10544 10537 + 10544 10545 10537 + 10540 10264 10546 + 10540 10546 10547 + 10547 10548 10540 + 10540 10548 10541 + 10549 10541 10548 + 10541 10549 10550 + 10550 10542 10541 + 10546 10264 10263 + 10263 10551 10546 + 10547 10546 10551 + 10552 10547 10551 + 10553 10547 10552 + 10547 10553 10548 + 10548 10553 10549 + 10270 10551 10263 + 10551 10270 10554 + 10554 10555 10551 + 10551 10555 10552 + 10556 10552 10555 + 10552 10556 10557 + 10552 10557 10553 + 10549 10553 10557 + 10554 10270 10558 + 10558 10559 10554 + 10560 10554 10559 + 10554 10560 10561 + 10561 10555 10554 + 10555 10561 10556 + 10269 10558 10270 + 10558 10269 10268 + 10558 10268 10275 + 10275 10559 10558 + 10562 10559 10275 + 10559 10562 10560 + 10563 10560 10562 + 10561 10560 10563 + 10563 10564 10561 + 10561 10564 10556 + 10564 10565 10556 + 10565 10566 10556 + 10566 10557 10556 + 10557 10566 10549 + 10275 10567 10562 + 10562 10567 10568 + 10568 10569 10562 + 10562 10569 10570 + 10570 10571 10562 + 10571 10563 10562 + 10567 10275 10274 + 10274 10280 10567 + 10568 10567 10280 + 10280 10572 10568 + 10573 10568 10572 + 10573 10569 10568 + 10569 10573 10574 + 10574 10570 10569 + 10574 10575 10570 + 10570 10575 10576 + 10576 10571 10570 + 10577 10572 10280 + 10578 10572 10577 + 10572 10578 10573 + 10573 10578 10579 + 10574 10573 10579 + 10580 10574 10579 + 10575 10574 10580 + 10280 10279 10577 + 10577 10279 10285 + 10285 10581 10577 + 10577 10581 10582 + 10578 10577 10582 + 10578 10582 10579 + 10583 10581 10285 + 10285 10290 10583 + 10583 10290 10295 + 10584 10583 10295 + 10582 10583 10584 + 10582 10585 10583 + 10295 10586 10584 + 10586 10587 10584 + 10588 10584 10587 + 10579 10584 10588 + 10584 10579 10582 + 10589 10586 10295 + 10590 10586 10589 + 10586 10590 10591 + 10591 10587 10586 + 10591 10592 10587 + 10587 10592 10588 + 10593 10588 10592 + 10579 10588 10593 + 10295 10294 10589 + 10589 10294 10300 + 10300 10594 10589 + 10590 10589 10594 + 10594 10595 10590 + 10590 10595 10311 + 10591 10590 10311 + 10596 10591 10311 + 10592 10591 10596 + 10305 10594 10300 + 10595 10594 10305 + 10595 10305 10312 + 10595 10312 10311 + 10305 10308 10312 + 10311 10326 10596 + 10326 10597 10596 + 10597 10598 10596 + 10599 10596 10598 + 10596 10599 10600 + 10596 10600 10592 + 10592 10600 10601 + 10601 10593 10592 + 10331 10597 10326 + 10597 10331 10602 + 10597 10602 10603 + 10603 10598 10597 + 10598 10603 10604 + 10598 10604 10599 + 10605 10599 10604 + 10600 10599 10605 + 10605 10606 10600 + 10600 10606 10601 + 10602 10331 10607 + 10607 10608 10602 + 10603 10602 10608 + 10609 10603 10608 + 10604 10603 10609 + 10609 10610 10604 + 10604 10610 10605 + 10607 10331 10330 + 10611 10607 10330 + 10608 10607 10611 + 10612 10608 10611 + 10608 10612 10613 + 10613 10609 10608 + 10609 10613 10614 + 10614 10610 10609 + 10610 10614 10615 + 10615 10605 10610 + 10330 10329 10611 + 10611 10329 10616 + 10616 10617 10611 + 10612 10611 10617 + 10617 10618 10612 + 10613 10612 10618 + 10618 10619 10613 + 10614 10613 10619 + 10619 10620 10614 + 10615 10614 10620 + 10336 10616 10329 + 10616 10336 10621 + 10621 10622 10616 + 10616 10622 10623 + 10623 10617 10616 + 10618 10617 10623 + 10623 10624 10618 + 10618 10624 10625 + 10625 10619 10618 + 10620 10619 10625 + 10621 10336 10335 + 10335 10626 10621 + 10621 10626 10627 + 10628 10621 10627 + 10622 10621 10628 + 10628 10629 10622 + 10622 10629 10630 + 10623 10622 10630 + 10335 10340 10626 + 10626 10340 10345 + 10345 10627 10626 + 10631 10627 10345 + 10627 10631 10632 + 10632 10633 10627 + 10627 10633 10628 + 10634 10628 10633 + 10628 10634 10635 + 10635 10629 10628 + 10345 10350 10631 + 10631 10350 10636 + 10636 10637 10631 + 10632 10631 10637 + 10637 10638 10632 + 10639 10632 10638 + 10632 10639 10640 + 10640 10633 10632 + 10633 10640 10634 + 10636 10350 10349 + 10349 10641 10636 + 10642 10636 10641 + 10637 10636 10642 + 10637 10642 10643 + 10643 10638 10637 + 10644 10638 10643 + 10638 10644 10639 + 10645 10639 10644 + 10640 10639 10645 + 10646 10641 10349 + 10641 10646 10647 + 10641 10647 10642 + 10642 10647 10648 + 10648 10643 10642 + 10649 10643 10648 + 10643 10649 10644 + 10349 10357 10646 + 10646 10357 10356 + 10646 10356 10650 + 10647 10646 10650 + 10650 10651 10647 + 10647 10651 10648 + 10652 10648 10651 + 10436 10648 10652 + 10648 10436 10649 + 10441 10649 10436 + 10644 10649 10441 + 10653 10650 10356 + 10650 10653 10654 + 10654 10651 10650 + 10651 10654 10652 + 10652 10654 10655 + 10655 10656 10652 + 10431 10652 10656 + 10652 10431 10436 + 10356 10360 10653 + 10372 10653 10360 + 10654 10653 10372 + 10372 10655 10654 + 10657 10655 10372 + 10655 10657 10658 + 10658 10656 10655 + 10432 10656 10658 + 10656 10432 10431 + 10372 10659 10657 + 10657 10659 10660 + 10657 10660 10401 + 10658 10657 10401 + 10401 10427 10658 + 10426 10658 10427 + 10658 10426 10432 + 10371 10659 10372 + 10661 10659 10371 + 10659 10661 10660 + 10660 10661 10386 + 10660 10386 10385 + 10385 10401 10660 + 10371 10376 10661 + 10376 10381 10661 + 10381 10386 10661 + 10662 10538 10537 + 10538 10662 10539 + 10663 10539 10662 + 10664 10539 10663 + 10539 10664 10532 + 10532 10664 10665 + 10665 10533 10532 + 10662 10666 10663 + 10666 10667 10663 + 10668 10663 10667 + 10663 10668 10669 + 10663 10669 10664 + 10664 10669 10670 + 10670 10665 10664 + 10671 10666 10662 + 10672 10666 10671 + 10666 10672 10673 + 10673 10667 10666 + 10673 10674 10667 + 10667 10674 10668 + 10662 10545 10671 + 10545 10544 10671 + 10671 10544 10675 + 10676 10671 10675 + 10671 10676 10672 + 10672 10676 10677 + 10677 10678 10672 + 10673 10672 10678 + 10678 10679 10673 + 10674 10673 10679 + 10675 10544 10543 + 10675 10543 10542 + 10542 10550 10675 + 10676 10675 10550 + 10677 10676 10550 + 10680 10677 10550 + 10681 10677 10680 + 10681 10678 10677 + 10679 10678 10681 + 10682 10679 10681 + 10682 10683 10679 + 10679 10683 10674 + 10674 10683 10668 + 10684 10680 10550 + 10685 10680 10684 + 10686 10680 10685 + 10680 10686 10681 + 10682 10681 10686 + 10687 10682 10686 + 10683 10682 10687 + 10687 10688 10683 + 10683 10688 10668 + 10550 10689 10684 + 10690 10684 10689 + 10690 10691 10684 + 10684 10691 10685 + 10685 10691 10692 + 10692 10693 10685 + 10686 10685 10693 + 10694 10689 10550 + 10695 10689 10694 + 10689 10695 10690 + 10690 10695 10696 + 10697 10690 10696 + 10691 10690 10697 + 10697 10698 10691 + 10691 10698 10692 + 10550 10549 10694 + 10566 10694 10549 + 10695 10694 10566 + 10566 10699 10695 + 10695 10699 10696 + 10699 10566 10565 + 10699 10565 10700 + 10699 10700 10696 + 10565 10564 10700 + 10700 10564 10563 + 10700 10563 10571 + 10571 10696 10700 + 10696 10571 10576 + 10696 10576 10701 + 10701 10702 10696 + 10696 10702 10703 + 10703 10697 10696 + 10704 10697 10703 + 10697 10704 10698 + 10705 10701 10576 + 10706 10701 10705 + 10702 10701 10706 + 10702 10706 10707 + 10707 10708 10702 + 10702 10708 10703 + 10576 10575 10705 + 10575 10709 10705 + 10710 10705 10709 + 10705 10710 10711 + 10711 10712 10705 + 10705 10712 10706 + 10707 10706 10712 + 10580 10709 10575 + 10580 10713 10709 + 10709 10713 10710 + 10710 10713 10714 + 10714 10715 10710 + 10715 10716 10710 + 10711 10710 10716 + 10713 10580 10717 + 10717 10714 10713 + 10717 10718 10714 + 10714 10718 10719 + 10719 10715 10714 + 10720 10715 10719 + 10715 10720 10721 + 10721 10716 10715 + 10717 10580 10579 + 10579 10722 10717 + 10722 10723 10717 + 10718 10717 10723 + 10723 10724 10718 + 10719 10718 10724 + 10724 10725 10719 + 10726 10719 10725 + 10719 10726 10720 + 10593 10722 10579 + 10722 10593 10727 + 10722 10727 10728 + 10728 10723 10722 + 10723 10728 10724 + 10724 10728 10729 + 10729 10725 10724 + 10730 10725 10729 + 10725 10730 10726 + 10727 10593 10601 + 10601 10731 10727 + 10728 10727 10731 + 10729 10728 10731 + 10732 10729 10731 + 10729 10732 10730 + 10730 10732 10733 + 10733 10734 10730 + 10726 10730 10734 + 10735 10726 10734 + 10720 10726 10735 + 10736 10731 10601 + 10731 10736 10732 + 10732 10736 10737 + 10737 10733 10732 + 10738 10733 10737 + 10734 10733 10738 + 10601 10739 10736 + 10736 10739 10740 + 10740 10737 10736 + 10737 10740 10741 + 10737 10741 10738 + 10742 10738 10741 + 10743 10738 10742 + 10738 10743 10734 + 10739 10601 10606 + 10606 10744 10739 + 10739 10744 10745 + 10745 10740 10739 + 10740 10745 10746 + 10741 10740 10746 + 10741 10746 10742 + 10744 10606 10605 + 10605 10615 10744 + 10744 10615 10747 + 10747 10745 10744 + 10745 10747 10746 + 10746 10747 10620 + 10620 10748 10746 + 10746 10748 10742 + 10620 10747 10615 + 10625 10748 10620 + 10748 10625 10749 + 10749 10750 10748 + 10748 10750 10742 + 10751 10742 10750 + 10752 10742 10751 + 10742 10752 10743 + 10753 10749 10625 + 10754 10749 10753 + 10750 10749 10754 + 10754 10755 10750 + 10750 10755 10751 + 10625 10624 10753 + 10756 10753 10624 + 10757 10753 10756 + 10753 10757 10754 + 10758 10754 10757 + 10755 10754 10758 + 10758 10759 10755 + 10751 10755 10759 + 10624 10623 10756 + 10630 10756 10623 + 10760 10756 10630 + 10756 10760 10757 + 10757 10760 10761 + 10761 10762 10757 + 10757 10762 10758 + 10763 10758 10762 + 10758 10763 10759 + 10630 10764 10760 + 10761 10760 10764 + 10764 10765 10761 + 10766 10761 10765 + 10762 10761 10766 + 10766 10767 10762 + 10762 10767 10763 + 10768 10763 10767 + 10759 10763 10768 + 10769 10764 10630 + 10764 10769 10770 + 10770 10765 10764 + 10770 10771 10765 + 10765 10771 10766 + 10766 10771 10772 + 10773 10766 10772 + 10767 10766 10773 + 10769 10630 10774 + 10774 10775 10769 + 10769 10775 10776 + 10776 10770 10769 + 10771 10770 10776 + 10776 10772 10771 + 10629 10774 10630 + 10777 10774 10629 + 10777 10775 10774 + 10775 10777 10778 + 10778 10776 10775 + 10772 10776 10778 + 10772 10778 10779 + 10779 10780 10772 + 10772 10780 10443 + 10443 10773 10772 + 10629 10635 10777 + 10778 10777 10635 + 10635 10779 10778 + 10781 10779 10635 + 10781 10780 10779 + 10780 10781 10782 + 10782 10444 10780 + 10780 10444 10443 + 10635 10634 10781 + 10781 10634 10640 + 10640 10782 10781 + 10645 10782 10640 + 10782 10645 10439 + 10439 10444 10782 + 10439 10645 10783 + 10783 10440 10439 + 10441 10440 10783 + 10441 10783 10644 + 10644 10783 10645 + 10447 10773 10443 + 10773 10447 10452 + 10452 10784 10773 + 10773 10784 10767 + 10767 10784 10785 + 10785 10768 10767 + 10784 10452 10786 + 10786 10787 10784 + 10784 10787 10785 + 10788 10786 10452 + 10789 10786 10788 + 10787 10786 10789 + 10789 10790 10787 + 10787 10790 10791 + 10791 10785 10787 + 10452 10451 10788 + 10457 10788 10451 + 10788 10457 10465 + 10465 10792 10788 + 10788 10792 10789 + 10789 10792 10793 + 10793 10794 10789 + 10790 10789 10794 + 10794 10795 10790 + 10790 10795 10796 + 10796 10791 10790 + 10792 10465 10797 + 10797 10793 10792 + 10793 10797 10798 + 10798 10799 10793 + 10793 10799 10800 + 10800 10794 10793 + 10795 10794 10800 + 10801 10797 10465 + 10798 10797 10801 + 10801 10802 10798 + 10798 10802 10803 + 10803 10804 10798 + 10799 10798 10804 + 10465 10464 10801 + 10470 10801 10464 + 10801 10470 10805 + 10805 10802 10801 + 10802 10805 10806 + 10806 10803 10802 + 10803 10806 10807 + 10807 10808 10803 + 10803 10808 10809 + 10809 10804 10803 + 10805 10470 10469 + 10469 10810 10805 + 10805 10810 10811 + 10811 10806 10805 + 10807 10806 10811 + 10811 10812 10807 + 10807 10812 10813 + 10813 10814 10807 + 10808 10807 10814 + 10479 10810 10469 + 10810 10479 10815 + 10815 10811 10810 + 10811 10815 10816 + 10816 10812 10811 + 10812 10816 10817 + 10817 10813 10812 + 10818 10815 10479 + 10816 10815 10818 + 10818 10819 10816 + 10816 10819 10820 + 10820 10817 10816 + 10821 10817 10820 + 10813 10817 10821 + 10479 10478 10818 + 10484 10818 10478 + 10818 10484 10822 + 10822 10819 10818 + 10819 10822 10823 + 10823 10820 10819 + 10820 10823 10824 + 10824 10825 10820 + 10820 10825 10821 + 10822 10484 10483 + 10483 10826 10822 + 10822 10826 10827 + 10827 10823 10822 + 10824 10823 10827 + 10827 10828 10824 + 10824 10828 10829 + 10829 10830 10824 + 10825 10824 10830 + 10491 10826 10483 + 10826 10491 10831 + 10831 10827 10826 + 10827 10831 10832 + 10832 10828 10827 + 10828 10832 10833 + 10833 10829 10828 + 10500 10831 10491 + 10832 10831 10500 + 10500 10834 10832 + 10832 10834 10835 + 10835 10833 10832 + 10836 10833 10835 + 10829 10833 10836 + 10836 10837 10829 + 10829 10837 10838 + 10838 10830 10829 + 10839 10834 10500 + 10834 10839 10840 + 10840 10835 10834 + 10835 10840 10841 + 10841 10842 10835 + 10835 10842 10836 + 10500 10499 10839 + 10839 10499 10505 + 10505 10843 10839 + 10840 10839 10843 + 10843 10844 10840 + 10841 10840 10844 + 10844 10845 10841 + 10846 10841 10845 + 10842 10841 10846 + 10846 10847 10842 + 10836 10842 10847 + 10843 10505 10504 + 10504 10848 10843 + 10843 10848 10849 + 10849 10844 10843 + 10845 10844 10849 + 10849 10850 10845 + 10845 10850 10851 + 10851 10852 10845 + 10845 10852 10846 + 10848 10504 10509 + 10509 10853 10848 + 10848 10853 10854 + 10854 10849 10848 + 10850 10849 10854 + 10854 10855 10850 + 10850 10855 10856 + 10856 10851 10850 + 10516 10853 10509 + 10853 10516 10857 + 10857 10854 10853 + 10854 10857 10858 + 10858 10855 10854 + 10855 10858 10859 + 10859 10856 10855 + 10860 10857 10516 + 10858 10857 10860 + 10860 10861 10858 + 10858 10861 10862 + 10862 10859 10858 + 10863 10859 10862 + 10856 10859 10863 + 10516 10521 10860 + 10864 10860 10521 + 10860 10864 10865 + 10865 10861 10860 + 10861 10865 10866 + 10866 10862 10861 + 10862 10866 10867 + 10867 10868 10862 + 10862 10868 10863 + 10521 10520 10864 + 10869 10864 10520 + 10865 10864 10869 + 10869 10870 10865 + 10865 10870 10871 + 10871 10866 10865 + 10867 10866 10871 + 10520 10529 10869 + 10872 10869 10529 + 10869 10872 10873 + 10873 10870 10869 + 10870 10873 10874 + 10874 10871 10870 + 10871 10874 10875 + 10875 10876 10871 + 10871 10876 10867 + 10529 10528 10872 + 10872 10528 10877 + 10877 10878 10872 + 10878 10879 10872 + 10873 10872 10879 + 10879 10880 10873 + 10874 10873 10880 + 10880 10881 10874 + 10875 10874 10881 + 10534 10877 10528 + 10877 10534 10882 + 10882 10883 10877 + 10877 10883 10884 + 10884 10878 10877 + 10885 10878 10884 + 10878 10885 10886 + 10886 10879 10878 + 10880 10879 10886 + 10882 10534 10533 + 10533 10887 10882 + 10888 10882 10887 + 10883 10882 10888 + 10888 10889 10883 + 10883 10889 10890 + 10890 10884 10883 + 10885 10884 10890 + 10887 10533 10665 + 10887 10665 10670 + 10670 10891 10887 + 10887 10891 10888 + 10892 10888 10891 + 10888 10892 10893 + 10893 10889 10888 + 10889 10893 10894 + 10894 10890 10889 + 10895 10891 10670 + 10891 10895 10892 + 10896 10892 10895 + 10893 10892 10896 + 10896 10897 10893 + 10893 10897 10898 + 10898 10899 10893 + 10899 10894 10893 + 10670 10900 10895 + 10895 10900 10901 + 10901 10902 10895 + 10895 10902 10896 + 10903 10896 10902 + 10903 10897 10896 + 10900 10670 10904 + 10904 10905 10900 + 10901 10900 10905 + 10905 10906 10901 + 10907 10901 10906 + 10907 10902 10901 + 10902 10907 10903 + 10669 10904 10670 + 10908 10904 10669 + 10908 10905 10904 + 10905 10908 10688 + 10688 10906 10905 + 10687 10906 10688 + 10906 10687 10907 + 10907 10687 10686 + 10903 10907 10686 + 10909 10903 10686 + 10897 10903 10909 + 10669 10668 10908 + 10688 10908 10668 + 9849 9409 9414 + 9414 9850 9849 + 9850 9414 10910 + 10910 10911 9850 + 9850 10911 9845 + 10912 9845 10911 + 9839 9845 10912 + 10912 9840 9839 + 10910 9414 9413 + 9413 9419 10910 + 10913 10910 9419 + 10911 10910 10913 + 10913 10914 10911 + 10911 10914 10912 + 10915 10912 10914 + 9840 10912 10915 + 10915 10916 9840 + 9840 10916 9835 + 9419 9424 10913 + 10917 10913 9424 + 10914 10913 10917 + 10917 10918 10914 + 10914 10918 10915 + 10919 10915 10918 + 10916 10915 10919 + 10919 10920 10916 + 10916 10920 10921 + 10921 9835 10916 + 9830 9835 10921 + 9424 10922 10917 + 10923 10917 10922 + 10918 10917 10923 + 10923 10924 10918 + 10918 10924 10919 + 10925 10919 10924 + 10920 10919 10925 + 9423 10922 9424 + 10922 9423 9429 + 9429 10926 10922 + 10922 10926 10923 + 10927 10923 10926 + 10924 10923 10927 + 10927 10928 10924 + 10924 10928 10925 + 10929 10925 10928 + 10930 10925 10929 + 10925 10930 10920 + 10926 9429 9434 + 9434 10931 10926 + 10926 10931 10927 + 10932 10927 10931 + 10928 10927 10932 + 10932 10933 10928 + 10928 10933 10929 + 10934 10929 10933 + 10935 10929 10934 + 10929 10935 10930 + 10931 9434 10936 + 10936 10937 10931 + 10931 10937 10932 + 10938 10932 10937 + 10933 10932 10938 + 10938 10939 10933 + 10933 10939 10934 + 10936 9434 9433 + 9433 10940 10936 + 10941 10936 10940 + 10937 10936 10941 + 10941 10942 10937 + 10937 10942 10938 + 10943 10938 10942 + 10939 10938 10943 + 9438 10940 9433 + 10940 9438 9443 + 9443 10944 10940 + 10940 10944 10941 + 10945 10941 10944 + 10942 10941 10945 + 10945 10946 10942 + 10942 10946 10943 + 10947 10943 10946 + 10948 10943 10947 + 10943 10948 10939 + 10944 9443 10949 + 10949 10950 10944 + 10944 10950 10945 + 10951 10945 10950 + 10946 10945 10951 + 10951 10952 10946 + 10946 10952 10947 + 10953 10949 9443 + 10954 10949 10953 + 10950 10949 10954 + 10954 10955 10950 + 10950 10955 10951 + 10956 10951 10955 + 10952 10951 10956 + 9443 9442 10953 + 10957 10953 9442 + 10953 10957 10958 + 10953 10958 10954 + 10959 10954 10958 + 10955 10954 10959 + 10959 10960 10955 + 10955 10960 10956 + 9442 9441 10957 + 10957 9441 9448 + 9448 10961 10957 + 10961 10962 10957 + 10958 10957 10962 + 10962 10963 10958 + 10958 10963 10964 + 10964 10959 10958 + 10965 10959 10964 + 10960 10959 10965 + 10966 10961 9448 + 10961 10966 10967 + 10967 10968 10961 + 10961 10968 10969 + 10969 10962 10961 + 10963 10962 10969 + 10963 10969 10970 + 10970 10964 10963 + 9448 9447 10966 + 10966 9447 9717 + 10971 10966 9717 + 10967 10966 10971 + 10971 9745 10967 + 10972 10967 9745 + 10968 10967 10972 + 9446 9717 9447 + 9745 10971 9736 + 9736 10971 9731 + 9722 9731 10971 + 9717 9722 10971 + 8740 8739 9767 + 9767 8739 10973 + 10973 9762 9767 + 9762 10973 10974 + 9762 10974 9757 + 9752 9757 10974 + 8738 10973 8739 + 10974 10973 8738 + 8738 10975 10974 + 10974 10975 9752 + 8738 8737 10975 + 10975 8737 10976 + 10976 10977 10975 + 10975 10977 9752 + 10976 8737 10978 + 10978 10979 10976 + 10980 10981 10982 + 10983 10981 10980 + 10981 10983 10984 + 10981 10984 10985 + 10985 10986 10981 + 10981 10986 10987 + 10980 10988 10983 + 10983 10988 10989 + 10989 10990 10983 + 10984 10983 10990 + 10990 10991 10984 + 10984 10991 10992 + 10992 10985 10984 + 10980 10993 10988 + 10988 10993 10994 + 10994 10989 10988 + 10989 10994 10995 + 10989 10995 10996 + 10996 10990 10989 + 10991 10990 10996 + 10993 10980 10997 + 10997 10998 10993 + 10994 10993 10998 + 10999 10994 10998 + 10995 10994 10999 + 10999 11000 10995 + 10996 10995 11000 + 11001 10997 10980 + 11002 10997 11001 + 10998 10997 11002 + 11002 11003 10998 + 10998 11003 11004 + 11004 11005 10998 + 10998 11005 10999 + 11006 10999 11005 + 10999 11006 11000 + 11001 11007 11002 + 11008 11002 11007 + 11003 11002 11008 + 11008 11009 11003 + 11003 11009 11010 + 11004 11003 11010 + 11011 11007 11001 + 11007 11011 11012 + 11012 11013 11007 + 11007 11013 11008 + 11014 11008 11013 + 11009 11008 11014 + 11014 11015 11009 + 11009 11015 11016 + 11016 11010 11009 + 11012 11011 11017 + 11018 11012 11017 + 11019 11012 11018 + 11013 11012 11019 + 11019 11020 11013 + 11013 11020 11014 + 11021 11017 11011 + 11017 11021 11022 + 11017 11022 11023 + 11023 11024 11017 + 11017 11024 11025 + 11025 11018 11017 + 11011 11026 11021 + 11021 11026 11027 + 11027 11028 11021 + 11022 11021 11028 + 11028 11029 11022 + 11022 11029 11030 + 11030 11023 11022 + 53 11026 11011 + 52 11027 11026 + 11026 11001 52 + 11031 11032 11033 + 11032 11034 11033 + 11034 11035 11033 + 11035 11036 11033 + 11037 11033 11036 + 11033 11037 11038 + 11038 11039 11033 + 11033 11039 11040 + 11040 11041 11033 + 11033 11041 11042 + 11043 11034 11032 + 11034 11043 11044 + 11044 11045 11034 + 11034 11045 11046 + 11046 11035 11034 + 11032 11047 11043 + 11048 11043 11047 + 11044 11043 11048 + 11048 11049 11044 + 11050 11044 11049 + 11045 11044 11050 + 11050 11051 11045 + 11046 11045 11051 + 11032 11052 11047 + 11047 11052 11053 + 11053 11054 11047 + 11047 11054 11048 + 11052 11032 11055 + 11055 64 11052 + 11053 11052 64 + 11056 11053 64 + 11057 11053 11056 + 11053 11057 11054 + 11054 11057 11058 + 11058 11059 11054 + 11054 11059 11048 + 64 11060 11056 + 11061 11056 11060 + 11061 11062 11056 + 11056 11062 11057 + 11057 11062 11063 + 11063 11064 11057 + 11064 11058 11057 + 11065 11060 64 + 11066 11060 11065 + 11060 11066 11061 + 11061 11066 11067 + 11068 11061 11067 + 11062 11061 11068 + 11068 11063 11062 + 64 11069 11065 + 11040 11070 11041 + 11070 11040 11071 + 11071 11072 11070 + 11073 11072 11071 + 11072 11073 11074 + 11074 11075 11072 + 11076 11072 11075 + 11071 11040 11039 + 11077 11071 11039 + 11073 11071 11077 + 11077 11078 11073 + 11073 11078 11079 + 11074 11073 11079 + 11079 11080 11074 + 11081 11074 11080 + 11081 11075 11074 + 11082 11077 11039 + 11083 11077 11082 + 11083 11078 11077 + 11078 11083 11084 + 11084 11079 11078 + 11039 11085 11082 + 11086 11082 11085 + 11082 11086 11087 + 11082 11087 11083 + 11083 11087 11088 + 11088 11089 11083 + 11089 11084 11083 + 11090 11085 11039 + 11091 11085 11090 + 11085 11091 11086 + 11092 11086 11091 + 11087 11086 11092 + 11092 11088 11087 + 11093 11088 11092 + 11088 11093 11094 + 11094 11089 11088 + 11039 11038 11090 + 11095 11090 11038 + 11091 11090 11095 + 11095 11096 11091 + 11091 11096 11097 + 11097 11092 11091 + 11098 11092 11097 + 11092 11098 11093 + 11038 11099 11095 + 11100 11095 11099 + 11095 11100 11101 + 11101 11096 11095 + 11096 11101 11102 + 11102 11097 11096 + 11103 11099 11038 + 11104 11099 11103 + 11099 11104 11100 + 11105 11100 11104 + 11101 11100 11105 + 11105 11106 11101 + 11101 11106 11107 + 11107 11102 11101 + 11038 11037 11103 + 11108 11103 11037 + 11109 11103 11108 + 11103 11109 11104 + 11104 11109 11110 + 11110 11111 11104 + 11104 11111 11105 + 11037 11112 11108 + 11113 11108 11112 + 11114 11108 11113 + 11108 11114 11109 + 11110 11109 11114 + 11036 11112 11037 + 11115 11112 11036 + 11112 11115 11113 + 11116 11113 11115 + 11117 11113 11116 + 11113 11117 11114 + 11114 11117 11118 + 11118 11119 11114 + 11114 11119 11110 + 11115 11036 11035 + 11035 11120 11115 + 11115 11120 11116 + 11121 11116 11120 + 11122 11116 11121 + 11116 11122 11117 + 11118 11117 11122 + 11123 11120 11035 + 11120 11123 11121 + 11124 11121 11123 + 11125 11121 11124 + 11121 11125 11122 + 11122 11125 11126 + 11126 11127 11122 + 11122 11127 11118 + 11035 11046 11123 + 11123 11046 11128 + 11128 11129 11123 + 11123 11129 11124 + 11130 11124 11129 + 11131 11124 11130 + 11124 11131 11125 + 11126 11125 11131 + 11051 11128 11046 + 11132 11128 11051 + 11128 11132 11133 + 11133 11129 11128 + 11129 11133 11130 + 11134 11130 11133 + 11135 11130 11134 + 11130 11135 11131 + 11051 11136 11132 + 11132 11136 11137 + 11137 11138 11132 + 11133 11132 11138 + 11138 11139 11133 + 11133 11139 11134 + 11140 11136 11051 + 11136 11140 11141 + 11141 11137 11136 + 11137 11141 11142 + 11142 11143 11137 + 11137 11143 11144 + 11144 11138 11137 + 11051 11050 11140 + 11140 11050 11145 + 11145 11146 11140 + 11140 11146 11147 + 11147 11141 11140 + 11142 11141 11147 + 11049 11145 11050 + 11148 11145 11049 + 11146 11145 11148 + 11146 11148 11149 + 11149 11147 11146 + 11147 11149 11150 + 11150 11151 11147 + 11147 11151 11142 + 11049 11152 11148 + 11149 11148 11152 + 11153 11149 11152 + 11150 11149 11153 + 11153 11154 11150 + 11155 11150 11154 + 11151 11150 11155 + 11155 11156 11151 + 11142 11151 11156 + 11157 11152 11049 + 11152 11157 11158 + 11158 11159 11152 + 11152 11159 11153 + 11160 11153 11159 + 11153 11160 11161 + 11161 11154 11153 + 11049 11048 11157 + 11157 11048 11162 + 11162 11163 11157 + 11157 11163 11164 + 11164 11165 11157 + 11165 11158 11157 + 11059 11162 11048 + 11166 11162 11059 + 11162 11166 11163 + 11163 11166 11167 + 11167 11164 11163 + 11168 11164 11167 + 11164 11168 11169 + 11169 11165 11164 + 11059 11170 11166 + 11167 11166 11170 + 11170 11171 11167 + 11171 11172 11167 + 11173 11167 11172 + 11167 11173 11168 + 11059 11058 11170 + 11170 11058 11064 + 11064 11171 11170 + 11064 11174 11171 + 11171 11174 11175 + 11175 11172 11171 + 11172 11175 11176 + 11172 11176 11173 + 11177 11173 11176 + 11168 11173 11177 + 11174 11064 11063 + 11063 11178 11174 + 11174 11178 11179 + 11179 11180 11174 + 11180 11175 11174 + 11176 11175 11180 + 11180 11181 11176 + 11176 11181 11177 + 11068 11178 11063 + 11178 11068 11182 + 11182 11179 11178 + 11182 11183 11179 + 11179 11183 11184 + 11184 11180 11179 + 11180 11184 11181 + 11181 11184 11185 + 11185 11186 11181 + 11181 11186 11177 + 11182 11068 11067 + 11187 11182 11067 + 11183 11182 11187 + 11187 11188 11183 + 11184 11183 11188 + 11188 11189 11184 + 11189 11185 11184 + 11190 11185 11189 + 11186 11185 11190 + 11186 11190 11191 + 11191 11177 11186 + 11067 11192 11187 + 11193 11187 11192 + 11187 11193 11188 + 11188 11193 11194 + 11194 11189 11188 + 11189 11194 11195 + 11189 11195 11190 + 11191 11190 11195 + 11196 11192 11067 + 11192 11196 11197 + 11192 11197 11193 + 11194 11193 11197 + 11197 11198 11194 + 11195 11194 11198 + 11198 11199 11195 + 11195 11199 11200 + 11200 11191 11195 + 11067 11201 11196 + 11202 11196 11201 + 11197 11196 11202 + 11202 11198 11197 + 11198 11202 11203 + 11203 11199 11198 + 11199 11203 11204 + 11204 11200 11199 + 11067 11205 11201 + 11201 11205 11206 + 11206 11207 11201 + 11201 11207 11202 + 11205 11067 11208 + 11208 11209 11205 + 11205 11209 11210 + 11206 11205 11210 + 11210 11211 11206 + 11212 11206 11211 + 11212 11207 11206 + 11213 11208 11067 + 11214 11208 11213 + 11208 11214 11209 + 11209 11214 11215 + 11215 11216 11209 + 11209 11216 11210 + 11081 11213 11067 + 11080 11213 11081 + 11213 11080 11217 + 11213 11217 11214 + 11215 11214 11217 + 11217 11218 11215 + 11219 11215 11218 + 11216 11215 11219 + 11066 11081 11067 + 11075 11081 11066 + 11066 11065 11075 + 11075 11065 11220 + 11065 11221 11220 + 11217 11080 11079 + 11079 11218 11217 + 11222 11218 11079 + 11218 11222 11219 + 11219 11222 11223 + 11223 11224 11219 + 11224 11225 11219 + 11216 11219 11225 + 11225 11226 11216 + 11216 11226 11210 + 11079 11084 11222 + 11222 11084 11089 + 11089 11223 11222 + 11223 11089 11094 + 11223 11094 11227 + 11227 11224 11223 + 11228 11224 11227 + 11224 11228 11229 + 11229 11225 11224 + 11229 11226 11225 + 11226 11229 11230 + 11230 11210 11226 + 11227 11094 11093 + 11231 11227 11093 + 11228 11227 11231 + 11231 11232 11228 + 11229 11228 11232 + 11230 11229 11232 + 11233 11230 11232 + 11234 11230 11233 + 11234 11210 11230 + 11210 11234 11235 + 11235 11211 11210 + 11236 11231 11093 + 11236 11232 11231 + 11232 11236 11237 + 11237 11238 11232 + 11232 11238 11239 + 11239 11233 11232 + 11093 11098 11236 + 11236 11098 11240 + 11240 11241 11236 + 11241 11237 11236 + 11242 11237 11241 + 11237 11242 11238 + 11238 11242 11243 + 11243 11239 11238 + 11097 11240 11098 + 11244 11240 11097 + 11240 11244 11245 + 11245 11241 11240 + 11241 11245 11246 + 11246 11247 11241 + 11241 11247 11242 + 11243 11242 11247 + 11097 11102 11244 + 11244 11102 11107 + 11107 11248 11244 + 11244 11248 11249 + 11249 11245 11244 + 11246 11245 11249 + 11249 11250 11246 + 11246 11250 11251 + 11251 11252 11246 + 11247 11246 11252 + 11253 11248 11107 + 11248 11253 11254 + 11254 11249 11248 + 11249 11254 11255 + 11255 11250 11249 + 11250 11255 11256 + 11256 11251 11250 + 11107 11257 11253 + 11253 11257 11258 + 11258 11259 11253 + 11253 11259 11260 + 11260 11254 11253 + 11255 11254 11260 + 11257 11107 11106 + 11106 11261 11257 + 11258 11257 11261 + 11261 11262 11258 + 11263 11258 11262 + 11258 11263 11264 + 11264 11259 11258 + 11259 11264 11265 + 11265 11260 11259 + 11261 11106 11105 + 11105 11266 11261 + 11261 11266 11267 + 11267 11262 11261 + 11268 11262 11267 + 11262 11268 11263 + 11263 11268 11269 + 11269 11270 11263 + 11264 11263 11270 + 11266 11105 11111 + 11111 11271 11266 + 11267 11266 11271 + 11271 11272 11267 + 11273 11267 11272 + 11267 11273 11268 + 11268 11273 11274 + 11274 11269 11268 + 11271 11111 11110 + 11110 11275 11271 + 11271 11275 11276 + 11276 11272 11271 + 11277 11272 11276 + 11272 11277 11273 + 11274 11273 11277 + 11277 11278 11274 + 11279 11274 11278 + 11269 11274 11279 + 11275 11110 11119 + 11119 11280 11275 + 11276 11275 11280 + 11280 11281 11276 + 11282 11276 11281 + 11276 11282 11277 + 11277 11282 11283 + 11283 11278 11277 + 11280 11119 11118 + 11118 11284 11280 + 11280 11284 11285 + 11285 11281 11280 + 11286 11281 11285 + 11281 11286 11282 + 11283 11282 11286 + 11286 11287 11283 + 11288 11283 11287 + 11278 11283 11288 + 11284 11118 11127 + 11127 11289 11284 + 11285 11284 11289 + 11289 11290 11285 + 11291 11285 11290 + 11285 11291 11286 + 11286 11291 11292 + 11292 11287 11286 + 11289 11127 11126 + 11126 11293 11289 + 11289 11293 11294 + 11294 11290 11289 + 11295 11290 11294 + 11290 11295 11291 + 11292 11291 11295 + 11295 11296 11292 + 11297 11292 11296 + 11287 11292 11297 + 11293 11126 11298 + 11298 11299 11293 + 11294 11293 11299 + 11299 11300 11294 + 11301 11294 11300 + 11294 11301 11295 + 11295 11301 11302 + 11302 11296 11295 + 11131 11298 11126 + 11303 11298 11131 + 11299 11298 11303 + 11303 11304 11299 + 11299 11304 11305 + 11305 11300 11299 + 11306 11300 11305 + 11300 11306 11301 + 11302 11301 11306 + 11131 11135 11303 + 11303 11135 11307 + 11307 11308 11303 + 11304 11303 11308 + 11308 11309 11304 + 11305 11304 11309 + 11309 11310 11305 + 11311 11305 11310 + 11305 11311 11306 + 11134 11307 11135 + 11307 11134 11312 + 11312 11313 11307 + 11307 11313 11314 + 11314 11308 11307 + 11309 11308 11314 + 11314 11315 11309 + 11309 11315 11316 + 11316 11310 11309 + 11312 11134 11139 + 11139 11317 11312 + 11312 11317 11318 + 11318 11319 11312 + 11313 11312 11319 + 11319 11320 11313 + 11314 11313 11320 + 11320 11321 11314 + 11315 11314 11321 + 11317 11139 11138 + 11138 11144 11317 + 11317 11144 11322 + 11322 11323 11317 + 11317 11323 11318 + 11324 11318 11323 + 11325 11318 11324 + 11318 11325 11326 + 11326 11319 11318 + 11320 11319 11326 + 11327 11322 11144 + 11328 11322 11327 + 11328 11323 11322 + 11323 11328 11324 + 11324 11328 11329 + 11329 11330 11324 + 11331 11324 11330 + 11324 11331 11325 + 11144 11143 11327 + 11332 11327 11143 + 11327 11332 11333 + 11333 11329 11327 + 11327 11329 11328 + 11143 11142 11332 + 11156 11332 11142 + 11333 11332 11156 + 11156 11334 11333 + 11335 11333 11334 + 11329 11333 11335 + 11335 11330 11329 + 11330 11335 11336 + 11336 11337 11330 + 11330 11337 11331 + 11338 11331 11337 + 11325 11331 11338 + 11334 11156 11155 + 11334 11155 11339 + 11339 11340 11334 + 11334 11340 11335 + 11336 11335 11340 + 11340 11341 11336 + 11342 11336 11341 + 11337 11336 11342 + 11342 11343 11337 + 11337 11343 11338 + 11344 11339 11155 + 11341 11339 11344 + 11341 11340 11339 + 11345 11344 11155 + 11346 11344 11345 + 11344 11346 11347 + 11347 11348 11344 + 11344 11348 11341 + 11341 11348 11342 + 11349 11342 11348 + 11343 11342 11349 + 11154 11345 11155 + 11350 11345 11154 + 11345 11350 11351 + 11351 11352 11345 + 11345 11352 11346 + 11154 11161 11350 + 11350 11161 11353 + 11353 11354 11350 + 11351 11350 11354 + 11354 11355 11351 + 11356 11351 11355 + 11352 11351 11356 + 11356 11357 11352 + 11346 11352 11357 + 11161 11358 11353 + 11359 11353 11358 + 11360 11353 11359 + 11353 11360 11361 + 11361 11354 11353 + 11355 11354 11361 + 11362 11358 11161 + 11363 11358 11362 + 11358 11363 11359 + 11359 11363 11364 + 11364 11365 11359 + 11360 11359 11365 + 11161 11160 11362 + 11362 11160 11366 + 11366 11367 11362 + 11368 11362 11367 + 11362 11368 11363 + 11363 11368 11369 + 11369 11364 11363 + 11159 11366 11160 + 11366 11159 11158 + 11158 11370 11366 + 11366 11370 11371 + 11371 11367 11366 + 11367 11371 11372 + 11372 11373 11367 + 11367 11373 11368 + 11368 11373 11374 + 11374 11369 11368 + 11370 11158 11165 + 11165 11375 11370 + 11370 11375 11376 + 11371 11370 11376 + 11376 11377 11371 + 11372 11371 11377 + 11377 11378 11372 + 11379 11372 11378 + 11373 11372 11379 + 11379 11374 11373 + 11375 11165 11169 + 11169 11380 11375 + 11375 11380 11381 + 11381 11376 11375 + 11376 11381 11382 + 11382 11383 11376 + 11376 11383 11384 + 11384 11377 11376 + 11378 11377 11384 + 11380 11169 11385 + 11385 11386 11380 + 11381 11380 11386 + 11386 11387 11381 + 11387 11388 11381 + 11382 11381 11388 + 11389 11385 11169 + 11390 11385 11389 + 11386 11385 11390 + 11390 11391 11386 + 11386 11391 11392 + 11392 11387 11386 + 11169 11168 11389 + 11168 11393 11389 + 11393 11394 11389 + 11395 11389 11394 + 11396 11389 11395 + 11389 11396 11390 + 11177 11393 11168 + 11177 11191 11393 + 11393 11191 11200 + 11200 11394 11393 + 11200 11204 11394 + 11394 11204 11395 + 11395 11204 11203 + 11203 11397 11395 + 11398 11395 11397 + 11395 11398 11396 + 11396 11398 11399 + 11399 11400 11396 + 11396 11400 11401 + 11390 11396 11401 + 11402 11397 11203 + 11397 11402 11403 + 11397 11403 11398 + 11399 11398 11403 + 11403 11404 11399 + 11404 11405 11399 + 11406 11399 11405 + 11399 11406 11400 + 11203 11202 11402 + 11407 11402 11202 + 11403 11402 11407 + 11407 11404 11403 + 11407 11408 11404 + 11404 11408 11409 + 11409 11405 11404 + 11405 11409 11410 + 11410 11411 11405 + 11405 11411 11406 + 11412 11407 11202 + 11408 11407 11412 + 11412 11413 11408 + 11408 11413 11414 + 11414 11409 11408 + 11410 11409 11414 + 11207 11412 11202 + 11415 11412 11207 + 11415 11413 11412 + 11413 11415 11416 + 11416 11414 11413 + 11416 11417 11414 + 11414 11417 11410 + 11410 11417 11418 + 11418 11419 11410 + 11411 11410 11419 + 11207 11212 11415 + 11415 11212 11420 + 11416 11415 11420 + 11421 11416 11420 + 11417 11416 11421 + 11421 11418 11417 + 11421 11422 11418 + 11418 11422 11423 + 11423 11419 11418 + 11424 11419 11423 + 11419 11424 11411 + 11212 11425 11420 + 11425 11426 11420 + 11426 11427 11420 + 11428 11420 11427 + 11420 11428 11429 + 11420 11429 11430 + 11430 11431 11420 + 11420 11431 11421 + 11211 11425 11212 + 11425 11211 11235 + 11425 11235 11432 + 11432 11426 11425 + 11426 11432 11433 + 11426 11433 11434 + 11434 11427 11426 + 11427 11434 11435 + 11427 11435 11428 + 11436 11432 11235 + 11433 11432 11436 + 11436 11437 11433 + 11433 11437 11438 + 11438 11434 11433 + 11435 11434 11438 + 11438 11439 11435 + 11435 11439 11440 + 11428 11435 11440 + 11235 11234 11436 + 11234 11441 11436 + 11442 11436 11441 + 11436 11442 11443 + 11443 11437 11436 + 11437 11443 11444 + 11444 11438 11437 + 11438 11444 11445 + 11445 11439 11438 + 11233 11441 11234 + 11441 11233 11446 + 11441 11446 11442 + 11447 11442 11446 + 11443 11442 11447 + 11447 11448 11443 + 11443 11448 11449 + 11449 11444 11443 + 11445 11444 11449 + 11446 11233 11239 + 11239 11450 11446 + 11446 11450 11447 + 11451 11447 11450 + 11447 11451 11448 + 11448 11451 11452 + 11452 11449 11448 + 11453 11449 11452 + 11449 11453 11445 + 11450 11239 11243 + 11243 11454 11450 + 11450 11454 11451 + 11451 11454 11455 + 11452 11451 11455 + 11455 11456 11452 + 11457 11452 11456 + 11452 11457 11453 + 11454 11243 11458 + 11458 11455 11454 + 11459 11455 11458 + 11455 11459 11460 + 11460 11456 11455 + 11456 11460 11461 + 11461 11462 11456 + 11456 11462 11457 + 11247 11458 11243 + 11252 11458 11247 + 11458 11252 11459 + 11459 11252 11251 + 11251 11463 11459 + 11459 11463 11464 + 11464 11460 11459 + 11461 11460 11464 + 11464 11465 11461 + 11461 11465 11466 + 11466 11467 11461 + 11462 11461 11467 + 11468 11463 11251 + 11463 11468 11469 + 11469 11464 11463 + 11464 11469 11470 + 11470 11465 11464 + 11465 11470 11471 + 11471 11466 11465 + 11251 11256 11468 + 11468 11256 11472 + 11472 11473 11468 + 11468 11473 11474 + 11474 11469 11468 + 11470 11469 11474 + 11474 11475 11470 + 11470 11475 11476 + 11476 11471 11470 + 11472 11256 11255 + 11255 11477 11472 + 11478 11472 11477 + 11472 11478 11479 + 11479 11473 11472 + 11473 11479 11480 + 11480 11474 11473 + 11474 11480 11481 + 11481 11475 11474 + 11260 11477 11255 + 11482 11477 11260 + 11477 11482 11478 + 11478 11482 11483 + 11483 11484 11478 + 11479 11478 11484 + 11484 11485 11479 + 11479 11485 11486 + 11486 11480 11479 + 11481 11480 11486 + 11260 11265 11482 + 11482 11265 11487 + 11487 11483 11482 + 11488 11483 11487 + 11483 11488 11489 + 11489 11484 11483 + 11485 11484 11489 + 11489 11490 11485 + 11485 11490 11491 + 11491 11486 11485 + 11487 11265 11264 + 11264 11492 11487 + 11493 11487 11492 + 11487 11493 11488 + 11488 11493 11494 + 11494 11495 11488 + 11488 11495 11496 + 11496 11489 11488 + 11490 11489 11496 + 11270 11492 11264 + 11492 11270 11497 + 11497 11498 11492 + 11492 11498 11493 + 11493 11498 11499 + 11499 11494 11493 + 11500 11494 11499 + 11494 11500 11501 + 11501 11495 11494 + 11497 11270 11269 + 11269 11502 11497 + 11503 11497 11502 + 11498 11497 11503 + 11503 11499 11498 + 11504 11499 11503 + 11499 11504 11500 + 11505 11500 11504 + 11501 11500 11505 + 11279 11502 11269 + 11502 11279 11506 + 11506 11507 11502 + 11502 11507 11503 + 11508 11503 11507 + 11503 11508 11504 + 11504 11508 11509 + 11509 11510 11504 + 11504 11510 11505 + 11511 11506 11279 + 11512 11506 11511 + 11506 11512 11513 + 11513 11507 11506 + 11507 11513 11508 + 11509 11508 11513 + 11279 11514 11511 + 11515 11511 11514 + 11516 11511 11515 + 11511 11516 11512 + 11517 11512 11516 + 11513 11512 11517 + 11517 11518 11513 + 11513 11518 11509 + 11278 11514 11279 + 11288 11514 11278 + 11514 11288 11515 + 11519 11515 11288 + 11520 11515 11519 + 11515 11520 11516 + 11516 11520 11521 + 11521 11522 11516 + 11516 11522 11517 + 11288 11523 11519 + 11524 11519 11523 + 11525 11519 11524 + 11519 11525 11520 + 11521 11520 11525 + 11287 11523 11288 + 11297 11523 11287 + 11523 11297 11524 + 11526 11524 11297 + 11527 11524 11526 + 11524 11527 11525 + 11525 11527 11528 + 11528 11529 11525 + 11525 11529 11521 + 11297 11530 11526 + 11531 11526 11530 + 11532 11526 11531 + 11526 11532 11527 + 11528 11527 11532 + 11296 11530 11297 + 11533 11530 11296 + 11530 11533 11531 + 11534 11531 11533 + 11535 11531 11534 + 11531 11535 11532 + 11532 11535 11536 + 11536 11537 11532 + 11532 11537 11528 + 11296 11302 11533 + 11533 11302 11538 + 11538 11539 11533 + 11533 11539 11534 + 11540 11534 11539 + 11541 11534 11540 + 11534 11541 11535 + 11536 11535 11541 + 11306 11538 11302 + 11542 11538 11306 + 11538 11542 11543 + 11543 11539 11538 + 11539 11543 11540 + 11544 11540 11543 + 11545 11540 11544 + 11540 11545 11541 + 11306 11311 11542 + 11542 11311 11546 + 11546 11547 11542 + 11543 11542 11547 + 11547 11548 11543 + 11543 11548 11544 + 11549 11544 11548 + 11550 11544 11549 + 11544 11550 11545 + 11310 11546 11311 + 11546 11310 11316 + 11316 11551 11546 + 11546 11551 11552 + 11552 11547 11546 + 11547 11552 11553 + 11553 11548 11547 + 11548 11553 11549 + 11554 11549 11553 + 11555 11549 11554 + 11549 11555 11550 + 11551 11316 11556 + 11556 11557 11551 + 11552 11551 11557 + 11557 11558 11552 + 11553 11552 11558 + 11558 11559 11553 + 11553 11559 11554 + 11560 11556 11316 + 11561 11556 11560 + 11557 11556 11561 + 11561 11562 11557 + 11557 11562 11563 + 11563 11558 11557 + 11558 11563 11564 + 11564 11559 11558 + 11316 11315 11560 + 11321 11560 11315 + 11560 11321 11565 + 11565 11566 11560 + 11560 11566 11561 + 11561 11566 11567 + 11567 11568 11561 + 11562 11561 11568 + 11568 11569 11562 + 11563 11562 11569 + 11565 11321 11320 + 11320 11570 11565 + 11565 11570 11571 + 11571 11572 11565 + 11566 11565 11572 + 11572 11567 11566 + 11326 11570 11320 + 11570 11326 11573 + 11573 11571 11570 + 11571 11573 11574 + 11574 11575 11571 + 11571 11575 11576 + 11576 11572 11571 + 11567 11572 11576 + 11577 11573 11326 + 11574 11573 11577 + 11577 11578 11574 + 11579 11574 11578 + 11575 11574 11579 + 11579 11580 11575 + 11576 11575 11580 + 11326 11325 11577 + 11338 11577 11325 + 11578 11577 11338 + 11338 11581 11578 + 11578 11581 11582 + 11582 11583 11578 + 11578 11583 11584 + 11584 11579 11578 + 11585 11579 11584 + 11580 11579 11585 + 11581 11338 11343 + 11343 11586 11581 + 11581 11586 11587 + 11587 11582 11581 + 11588 11582 11587 + 11588 11583 11582 + 11583 11588 11589 + 11589 11584 11583 + 11590 11584 11589 + 11584 11590 11585 + 11349 11586 11343 + 11586 11349 11591 + 11591 11587 11586 + 11587 11591 11592 + 11592 11593 11587 + 11587 11593 11588 + 11588 11593 11594 + 11594 11589 11588 + 11595 11589 11594 + 11589 11595 11590 + 11591 11349 11347 + 11347 11596 11591 + 11592 11591 11596 + 11596 11597 11592 + 11598 11592 11597 + 11593 11592 11598 + 11598 11594 11593 + 11348 11347 11349 + 11599 8724 11600 + 11600 11601 11599 + 11041 11602 11603 + 11603 11604 11041 + 8644 11605 8651 + 8651 8645 8644 + 8645 8651 11606 + 11606 8646 8645 + 8646 11606 11607 + 8646 11607 11608 + 11608 11609 8646 + 8646 11609 8647 + 11606 8651 8654 + 8654 11610 11606 + 11610 11611 11606 + 11607 11606 11611 + 11611 11612 11607 + 11607 11612 11613 + 11613 11608 11607 + 11614 11608 11613 + 11609 11608 11614 + 11615 11610 8654 + 11616 11610 11615 + 11610 11616 11617 + 11617 11611 11610 + 11617 11612 11611 + 11612 11617 11618 + 11618 11613 11612 + 8654 8658 11615 + 11615 8658 8663 + 8663 11619 11615 + 11616 11615 11619 + 11619 11620 11616 + 11616 11620 11618 + 11617 11616 11618 + 11621 11619 8663 + 11619 11621 11622 + 11622 11620 11619 + 11620 11622 11623 + 11623 11618 11620 + 11613 11618 11623 + 11623 11624 11613 + 11613 11624 11614 + 8663 8667 11621 + 11625 11621 8667 + 11622 11621 11625 + 11625 11626 11622 + 11623 11622 11626 + 11626 11627 11623 + 11624 11623 11627 + 11627 11628 11624 + 11624 11628 11629 + 11629 11614 11624 + 8667 8671 11625 + 11630 11625 8671 + 11625 11630 11631 + 11631 11626 11625 + 11626 11631 11632 + 11632 11627 11626 + 11628 11627 11632 + 11632 11633 11628 + 11628 11633 11634 + 11634 11629 11628 + 8671 8677 11630 + 11635 11630 8677 + 11631 11630 11635 + 11635 11636 11631 + 11632 11631 11636 + 11636 11637 11632 + 11633 11632 11637 + 11637 11638 11633 + 11633 11638 11639 + 11639 11634 11633 + 8677 11640 11635 + 11641 11635 11640 + 11635 11641 11642 + 11642 11636 11635 + 11636 11642 11643 + 11643 11637 11636 + 11638 11637 11643 + 8676 11640 8677 + 11640 8676 8675 + 8675 11644 11640 + 11640 11644 11641 + 11645 11641 11644 + 11642 11641 11645 + 11645 11646 11642 + 11643 11642 11646 + 11646 11647 11643 + 11648 11643 11647 + 11643 11648 11638 + 11644 8675 8681 + 8681 11649 11644 + 11644 11649 11645 + 11650 11645 11649 + 11645 11650 11651 + 11651 11646 11645 + 11646 11651 11652 + 11652 11647 11646 + 11653 11647 11652 + 11647 11653 11648 + 11649 8681 11654 + 11654 11655 11649 + 11649 11655 11650 + 11656 11650 11655 + 11651 11650 11656 + 11656 11657 11651 + 11651 11657 11658 + 11652 11651 11658 + 11654 8681 8680 + 8680 11659 11654 + 11660 11654 11659 + 11655 11654 11660 + 11660 11661 11655 + 11655 11661 11656 + 11662 11656 11661 + 11662 11657 11656 + 11657 11662 11663 + 11663 11658 11657 + 8685 11659 8680 + 11659 8685 11664 + 11664 11665 11659 + 11659 11665 11660 + 11666 11660 11665 + 11661 11660 11666 + 11666 11667 11661 + 11661 11667 11662 + 11663 11662 11667 + 11664 8685 11668 + 11668 11669 11664 + 11670 11664 11669 + 11665 11664 11670 + 11670 11671 11665 + 11665 11671 11666 + 11672 11666 11671 + 11667 11666 11672 + 8684 11668 8685 + 8690 11668 8684 + 11668 8690 11673 + 11673 11669 11668 + 11669 11673 11674 + 11674 11675 11669 + 11669 11675 11670 + 11676 11670 11675 + 11671 11670 11676 + 11676 11677 11671 + 11671 11677 11672 + 11673 8690 11678 + 11678 11679 11673 + 11674 11673 11679 + 11679 11680 11674 + 11681 11674 11680 + 11675 11674 11681 + 11681 11682 11675 + 11675 11682 11676 + 8689 11678 8690 + 11683 11678 8689 + 11678 11683 11684 + 11684 11679 11678 + 11679 11684 11685 + 11685 11680 11679 + 11680 11685 11686 + 11686 11687 11680 + 11680 11687 11681 + 8689 8695 11683 + 11683 8695 11688 + 11688 11689 11683 + 11684 11683 11689 + 11689 11690 11684 + 11685 11684 11690 + 11690 11691 11685 + 11686 11685 11691 + 11692 11688 8695 + 11693 11688 11692 + 11688 11693 11694 + 11694 11689 11688 + 11689 11694 11695 + 11695 11690 11689 + 11690 11695 11696 + 11696 11691 11690 + 8695 8694 11692 + 11697 11692 8694 + 11698 11692 11697 + 11692 11698 11693 + 11693 11698 11699 + 11699 11700 11693 + 11694 11693 11700 + 11700 11701 11694 + 11695 11694 11701 + 8694 8693 11697 + 11697 8693 11702 + 11702 11703 11697 + 11703 11704 11697 + 11705 11697 11704 + 11697 11705 11698 + 11698 11705 11706 + 11706 11699 11698 + 8692 11702 8693 + 11702 8692 11707 + 11707 11708 11702 + 11702 11708 11709 + 11709 11703 11702 + 11703 11709 11710 + 11703 11710 11711 + 11711 11704 11703 + 11707 8692 8691 + 8691 8640 11707 + 8587 11707 8640 + 11708 11707 8587 + 8587 11712 11708 + 11708 11712 11713 + 11713 11714 11708 + 11714 11709 11708 + 11710 11709 11714 + 8586 11712 8587 + 11712 8586 8593 + 8593 11713 11712 + 11715 11713 8593 + 11713 11715 11716 + 11716 11714 11713 + 11716 11717 11714 + 11714 11717 11710 + 11710 11717 11718 + 11718 11719 11710 + 11719 11711 11710 + 11715 8593 8592 + 8592 11720 11715 + 11716 11715 11720 + 11721 11716 11720 + 11717 11716 11721 + 11721 11718 11717 + 11721 11722 11718 + 11718 11722 11723 + 11723 11719 11718 + 11720 8592 8591 + 11720 8591 11724 + 11724 11725 11720 + 11720 11725 11726 + 11726 11727 11720 + 11727 11728 11720 + 11728 11721 11720 + 11722 11721 11728 + 11724 8591 8590 + 11729 11724 8590 + 11730 11724 11729 + 11725 11724 11730 + 11725 11730 11731 + 11731 11726 11725 + 11726 11731 11732 + 11726 11732 11733 + 11733 11727 11726 + 8590 11734 11729 + 11735 11729 11734 + 11729 11735 11736 + 11729 11736 11730 + 11730 11736 11737 + 11731 11730 11737 + 11738 11731 11737 + 11732 11731 11738 + 11739 11734 8590 + 11740 11734 11739 + 11734 11740 11735 + 11741 11735 11740 + 11736 11735 11741 + 11741 11742 11736 + 11736 11742 11737 + 8590 11743 11739 + 11744 11739 11743 + 11745 11739 11744 + 11739 11745 11740 + 8599 11743 8590 + 11743 8599 11746 + 11746 11747 11743 + 11743 11747 11744 + 11748 11744 11747 + 11749 11744 11748 + 11744 11749 11745 + 11750 11746 8599 + 11751 11746 11750 + 11747 11746 11751 + 11751 11752 11747 + 11747 11752 11748 + 11753 11748 11752 + 11754 11748 11753 + 11748 11754 11749 + 8599 11755 11750 + 11756 11750 11755 + 11757 11750 11756 + 11750 11757 11751 + 11758 11751 11757 + 11752 11751 11758 + 11758 11759 11752 + 11752 11759 11753 + 8598 11755 8599 + 11760 11755 8598 + 11755 11760 11756 + 11756 11760 11761 + 11761 11762 11756 + 11762 11763 11756 + 11764 11756 11763 + 11756 11764 11757 + 8598 8614 11760 + 11760 8614 11765 + 11765 11761 11760 + 8612 11761 11765 + 11761 8612 11766 + 11766 11762 11761 + 11766 11767 11762 + 11762 11767 11768 + 11768 11763 11762 + 8614 8613 11765 + 8612 11765 8613 + 11766 8612 8611 + 11769 11766 8611 + 11767 11766 11769 + 11769 11770 11767 + 11767 11770 11771 + 11771 11768 11767 + 11772 11768 11771 + 11763 11768 11772 + 11772 11773 11763 + 11763 11773 11764 + 8611 11774 11769 + 11775 11769 11774 + 11769 11775 11770 + 11770 11775 11776 + 11776 11777 11770 + 11770 11777 11771 + 8647 11774 8611 + 11774 8647 11778 + 11774 11778 11775 + 11776 11775 11778 + 11778 11779 11776 + 11629 11776 11779 + 11776 11629 11634 + 11634 11777 11776 + 11777 11634 11639 + 11639 11771 11777 + 11778 8647 11609 + 11609 11779 11778 + 11614 11779 11609 + 11779 11614 11629 + 11780 11781 11782 + 11783 11780 11782 + 11784 11780 11783 + 11780 11784 11785 + 11780 11785 11786 + 11786 11787 11780 + 11782 11788 11783 + 11788 11789 11783 + 11790 11783 11789 + 11791 11783 11790 + 11783 11791 11784 + 11792 11784 11791 + 11785 11784 11792 + 11793 11788 11782 + 11794 11788 11793 + 11788 11794 11795 + 11795 11789 11788 + 11796 11789 11795 + 11789 11796 11790 + 11782 11797 11793 + 11798 11793 11797 + 11799 11793 11798 + 11793 11799 11794 + 11794 11799 11800 + 11800 11801 11794 + 11795 11794 11801 + 11797 11782 11802 + 11802 11803 11797 + 11797 11803 11804 + 11804 11805 11797 + 11797 11805 11798 + 11802 11782 11787 + 11787 11806 11802 + 11807 11802 11806 + 11807 11808 11802 + 11808 11809 11802 + 11803 11802 11809 + 11809 11810 11803 + 11810 11804 11803 + 11806 11787 11786 + 11806 11786 11811 + 11811 11807 11806 + 11807 11811 11812 + 11807 11812 11808 + 11812 11813 11808 + 11813 11814 11808 + 11808 11814 11815 + 11815 11809 11808 + 11811 11786 11785 + 11816 11811 11785 + 11812 11811 11816 + 11816 11817 11812 + 11813 11812 11817 + 11818 11813 11817 + 11814 11813 11818 + 11818 11819 11814 + 11814 11819 11815 + 11785 11820 11816 + 11821 11816 11820 + 11821 11817 11816 + 11817 11821 11822 + 11822 11823 11817 + 11817 11823 11818 + 11792 11820 11785 + 11792 11824 11820 + 11820 11824 11821 + 11821 11824 11825 + 11822 11821 11825 + 11825 11826 11822 + 11827 11822 11826 + 11822 11827 11828 + 11828 11823 11822 + 11824 11792 11829 + 11829 11825 11824 + 11829 11830 11825 + 11825 11830 11831 + 11831 11826 11825 + 11831 11832 11826 + 11826 11832 11827 + 11833 11827 11832 + 11828 11827 11833 + 11791 11829 11792 + 11830 11829 11791 + 11791 11834 11830 + 11830 11834 11835 + 11831 11830 11835 + 11835 11836 11831 + 11832 11831 11836 + 11836 11837 11832 + 11832 11837 11838 + 11838 11833 11832 + 11790 11834 11791 + 11834 11790 11839 + 11839 11835 11834 + 11835 11839 11840 + 11840 11841 11835 + 11835 11841 11842 + 11842 11836 11835 + 11836 11842 11837 + 11843 11839 11790 + 11840 11839 11843 + 11843 11844 11840 + 11840 11844 11845 + 11845 11846 11840 + 11841 11840 11846 + 11846 11847 11841 + 11842 11841 11847 + 11790 11796 11843 + 11848 11843 11796 + 11843 11848 11849 + 11849 11844 11843 + 11844 11849 11850 + 11850 11845 11844 + 11796 11851 11848 + 11848 11851 11852 + 11852 11853 11848 + 11849 11848 11853 + 11853 11854 11849 + 11850 11849 11854 + 11795 11851 11796 + 11851 11795 11855 + 11855 11852 11851 + 11852 11855 11856 + 11856 11857 11852 + 11852 11857 11858 + 11858 11853 11852 + 11854 11853 11858 + 11801 11855 11795 + 11856 11855 11801 + 11801 11859 11856 + 11860 11856 11859 + 11857 11856 11860 + 11860 11861 11857 + 11857 11861 11862 + 11862 11858 11857 + 11863 11858 11862 + 11858 11863 11854 + 11864 11859 11801 + 11859 11864 11865 + 11865 11866 11859 + 11859 11866 11860 + 11867 11860 11866 + 11861 11860 11867 + 11801 11800 11864 + 11864 11800 11868 + 11868 11869 11864 + 11865 11864 11869 + 11869 11870 11865 + 11871 11865 11870 + 11866 11865 11871 + 11871 11872 11866 + 11866 11872 11867 + 11873 11868 11800 + 11874 11868 11873 + 11869 11868 11874 + 11875 11869 11874 + 11869 11875 11876 + 11876 11870 11869 + 11800 11799 11873 + 11799 11877 11873 + 11878 11873 11877 + 11879 11873 11878 + 11873 11879 11874 + 11874 11879 11880 + 11880 11881 11874 + 11875 11874 11881 + 11798 11877 11799 + 11798 11882 11877 + 11877 11882 11878 + 11878 11882 11883 + 11883 11884 11878 + 11885 11878 11884 + 11878 11885 11879 + 11879 11885 11886 + 11886 11880 11879 + 11882 11798 11805 + 11805 11883 11882 + 11883 11805 11804 + 11804 11887 11883 + 11883 11887 11888 + 11888 11884 11883 + 11888 11889 11884 + 11884 11889 11885 + 11886 11885 11889 + 11889 11890 11886 + 11891 11886 11890 + 11880 11886 11891 + 11887 11804 11810 + 11810 11892 11887 + 11888 11887 11892 + 11893 11888 11892 + 11889 11888 11893 + 11893 11890 11889 + 11894 11890 11893 + 11890 11894 11891 + 11892 11810 11809 + 11809 11815 11892 + 11892 11815 11895 + 11895 11896 11892 + 11892 11896 11893 + 11897 11893 11896 + 11893 11897 11894 + 11819 11895 11815 + 11898 11895 11819 + 11895 11898 11899 + 11899 11896 11895 + 11896 11899 11897 + 11900 11897 11899 + 11894 11897 11900 + 11900 11901 11894 + 11894 11901 11902 + 11891 11894 11902 + 11819 11903 11898 + 11903 11904 11898 + 11904 11905 11898 + 11899 11898 11905 + 11905 11906 11899 + 11899 11906 11900 + 11907 11900 11906 + 11900 11907 11901 + 11903 11819 11818 + 11903 11818 11908 + 11904 11903 11908 + 11909 11904 11908 + 11904 11909 11910 + 11910 11911 11904 + 11905 11904 11911 + 11912 11905 11911 + 11906 11905 11912 + 11908 11818 11823 + 11823 11828 11908 + 11913 11908 11828 + 11913 11909 11908 + 11913 11914 11909 + 11914 11910 11909 + 11910 11914 11915 + 11915 11916 11910 + 11911 11910 11916 + 11916 11917 11911 + 11912 11911 11917 + 11833 11913 11828 + 11913 11833 11918 + 11918 11914 11913 + 11914 11918 11915 + 11918 11919 11915 + 11915 11919 11920 + 11915 11920 11916 + 11920 11921 11916 + 11916 11921 11917 + 11918 11833 11838 + 11838 11922 11918 + 11919 11918 11922 + 11923 11919 11922 + 11920 11919 11923 + 11923 11924 11920 + 11921 11920 11924 + 11925 11921 11924 + 11926 11921 11925 + 11921 11926 11917 + 11927 11922 11838 + 11922 11927 11928 + 11928 11923 11922 + 11923 11928 11929 + 11929 11924 11923 + 11924 11929 11930 + 11930 11925 11924 + 11931 11925 11930 + 11925 11931 11926 + 11838 11932 11927 + 11927 11932 11933 + 11933 11934 11927 + 11927 11934 11935 + 11935 11928 11927 + 11929 11928 11935 + 11935 11936 11929 + 11930 11929 11936 + 11932 11838 11937 + 11937 11938 11932 + 11938 11933 11932 + 11938 11939 11933 + 11939 11940 11933 + 11934 11933 11940 + 11941 11937 11838 + 11942 11937 11941 + 11942 11939 11937 + 11939 11938 11937 + 11837 11941 11838 + 11943 11941 11837 + 11943 11944 11941 + 11941 11944 11942 + 11945 11942 11944 + 11939 11942 11945 + 11945 11946 11939 + 11939 11946 11940 + 11947 11940 11946 + 11940 11947 11934 + 11837 11842 11943 + 11847 11943 11842 + 11944 11943 11847 + 11847 11948 11944 + 11944 11948 11945 + 11949 11945 11948 + 11946 11945 11949 + 11949 11950 11946 + 11946 11950 11947 + 11951 11947 11950 + 11934 11947 11951 + 11951 11935 11934 + 11936 11935 11951 + 11952 11948 11847 + 11948 11952 11949 + 11953 11949 11952 + 11950 11949 11953 + 11953 11954 11950 + 11950 11954 11951 + 11955 11951 11954 + 11951 11955 11936 + 11847 11846 11952 + 11952 11846 11845 + 11845 11956 11952 + 11952 11956 11953 + 11957 11953 11956 + 11953 11957 11958 + 11958 11954 11953 + 11954 11958 11955 + 11959 11955 11958 + 11936 11955 11959 + 11960 11956 11845 + 11956 11960 11957 + 11957 11960 11961 + 11961 11962 11957 + 11958 11957 11962 + 11962 11963 11958 + 11958 11963 11964 + 11964 11959 11958 + 11845 11850 11960 + 11960 11850 11965 + 11965 11961 11960 + 11961 11965 11966 + 11966 11967 11961 + 11961 11967 11968 + 11968 11962 11961 + 11963 11962 11968 + 11854 11965 11850 + 11966 11965 11854 + 11854 11863 11966 + 11969 11966 11863 + 11967 11966 11969 + 11969 11970 11967 + 11967 11970 11971 + 11971 11968 11967 + 11972 11968 11971 + 11968 11972 11963 + 11963 11972 11973 + 11973 11964 11963 + 11863 11974 11969 + 11975 11969 11974 + 11970 11969 11975 + 11975 11976 11970 + 11970 11976 11977 + 11977 11971 11970 + 11978 11971 11977 + 11971 11978 11972 + 11862 11974 11863 + 11974 11862 11979 + 11979 11980 11974 + 11974 11980 11975 + 11981 11975 11980 + 11976 11975 11981 + 11981 11982 11976 + 11977 11976 11982 + 11979 11862 11861 + 11861 11983 11979 + 11984 11979 11983 + 11980 11979 11984 + 11984 11985 11980 + 11980 11985 11981 + 11986 11981 11985 + 11982 11981 11986 + 11867 11983 11861 + 11983 11867 11987 + 11987 11988 11983 + 11983 11988 11984 + 11989 11984 11988 + 11985 11984 11989 + 11989 11990 11985 + 11985 11990 11986 + 11987 11867 11872 + 11872 11991 11987 + 11992 11987 11991 + 11988 11987 11992 + 11992 11993 11988 + 11988 11993 11989 + 11994 11989 11993 + 11989 11994 11995 + 11990 11989 11995 + 11996 11991 11872 + 11991 11996 11997 + 11997 11998 11991 + 11991 11998 11992 + 11992 11998 11999 + 11999 12000 11992 + 11993 11992 12000 + 11872 11871 11996 + 11996 11871 12001 + 12001 12002 11996 + 11997 11996 12002 + 12002 12003 11997 + 12004 11997 12003 + 11998 11997 12004 + 12004 11999 11998 + 11870 12001 11871 + 12005 12001 11870 + 12001 12005 12006 + 12006 12002 12001 + 12002 12006 12007 + 12007 12003 12002 + 12003 12007 12008 + 12008 12009 12003 + 12003 12009 12004 + 11870 11876 12005 + 12005 11876 12010 + 12010 12011 12005 + 12006 12005 12011 + 12011 12012 12006 + 12007 12006 12012 + 12012 12013 12007 + 12008 12007 12013 + 12014 12010 11876 + 12015 12010 12014 + 12010 12015 12016 + 12016 12011 12010 + 12011 12016 12017 + 12017 12012 12011 + 12012 12017 12018 + 12018 12013 12012 + 11876 11875 12014 + 11881 12014 11875 + 12019 12014 11881 + 12014 12019 12015 + 12020 12015 12019 + 12016 12015 12020 + 12020 12021 12016 + 12017 12016 12021 + 12021 12022 12017 + 12018 12017 12022 + 11881 12023 12019 + 12019 12023 12024 + 12024 12025 12019 + 12019 12025 12020 + 12026 12020 12025 + 12020 12026 12027 + 12027 12021 12020 + 12023 11881 11880 + 11880 12028 12023 + 12024 12023 12028 + 12028 12029 12024 + 12030 12024 12029 + 12025 12024 12030 + 12031 12025 12030 + 12025 12031 12026 + 11891 12028 11880 + 12028 11891 12032 + 12032 12029 12028 + 12033 12029 12032 + 12029 12033 12030 + 12030 12033 12034 + 12034 12035 12030 + 12031 12030 12035 + 12035 12036 12031 + 12026 12031 12036 + 11902 12032 11891 + 12037 12032 11902 + 12032 12037 12033 + 12033 12037 12038 + 12038 12039 12033 + 12033 12039 12034 + 11902 12040 12037 + 12038 12037 12040 + 12040 12041 12038 + 12042 12038 12041 + 12038 12042 12039 + 12039 12042 12043 + 12043 12034 12039 + 12040 11902 12044 + 12040 12044 12045 + 12045 12041 12040 + 12046 12041 12045 + 12041 12046 12042 + 12043 12042 12046 + 11936 12043 12046 + 11959 12043 11936 + 11959 12034 12043 + 12044 11902 11901 + 11901 11907 12044 + 12045 12044 11907 + 12047 12045 11907 + 12048 12045 12047 + 12045 12048 12046 + 12046 12048 11931 + 11931 11930 12046 + 12046 11930 11936 + 12049 12047 11907 + 12050 12047 12049 + 12051 12047 12050 + 12047 12051 12048 + 11931 12048 12051 + 12051 11926 11931 + 12051 12050 11926 + 12050 11917 11926 + 11917 12050 11912 + 11906 12049 11907 + 11912 12049 11906 + 12049 11912 12050 + 12034 11959 11964 + 11964 12035 12034 + 12035 11964 11973 + 11973 12036 12035 + 12036 11973 12052 + 12052 12053 12036 + 12036 12053 12026 + 12027 12026 12053 + 12052 11973 11972 + 11972 11978 12052 + 12054 12052 11978 + 12053 12052 12054 + 12054 12055 12053 + 12053 12055 12027 + 12056 12027 12055 + 12021 12027 12056 + 12056 12022 12021 + 11978 12057 12054 + 12058 12054 12057 + 12055 12054 12058 + 12058 12059 12055 + 12055 12059 12056 + 12060 12056 12059 + 12022 12056 12060 + 12060 12061 12022 + 12022 12061 12018 + 11977 12057 11978 + 12057 11977 12062 + 12062 12063 12057 + 12057 12063 12058 + 12064 12058 12063 + 12059 12058 12064 + 12064 12065 12059 + 12059 12065 12060 + 12066 12060 12065 + 12061 12060 12066 + 11982 12062 11977 + 12067 12062 11982 + 12063 12062 12067 + 12067 12068 12063 + 12063 12068 12064 + 12069 12064 12068 + 12065 12064 12069 + 12069 12070 12065 + 12065 12070 12066 + 11982 12071 12067 + 12072 12067 12071 + 12068 12067 12072 + 12072 12073 12068 + 12068 12073 12069 + 12073 12074 12069 + 12074 12075 12069 + 12075 12070 12069 + 11986 12071 11982 + 12071 11986 12076 + 12076 12077 12071 + 12071 12077 12072 + 12078 12072 12077 + 12078 12073 12072 + 12078 12074 12073 + 12074 12078 12079 + 12079 12080 12074 + 12075 12074 12080 + 12076 11986 11990 + 11990 11995 12076 + 12081 12076 11995 + 12081 12077 12076 + 12081 12082 12077 + 12077 12082 12078 + 12079 12078 12082 + 11995 12083 12081 + 12084 12081 12083 + 12084 12079 12081 + 12079 12082 12081 + 12083 11995 11994 + 12085 12083 11994 + 12084 12083 12085 + 12086 12084 12085 + 12084 12086 12087 + 12079 12084 12087 + 12087 12088 12079 + 12088 12080 12079 + 12080 12088 12089 + 12089 12075 12080 + 12075 12089 12070 + 12085 11994 12090 + 12090 12091 12085 + 12086 12085 12091 + 12086 12091 12092 + 12093 12086 12092 + 12086 12093 12087 + 11993 12090 11994 + 12000 12090 11993 + 12091 12090 12000 + 12092 12091 12000 + 12092 12000 11999 + 11999 12094 12092 + 12093 12092 12094 + 12095 12093 12094 + 12093 12095 12087 + 12096 12094 11999 + 12094 12096 12095 + 12095 12096 12097 + 12098 12095 12097 + 12095 12098 12087 + 12096 11999 12004 + 12097 12096 12004 + 12009 12097 12004 + 12099 12097 12009 + 12097 12099 12098 + 12098 12099 12100 + 12098 12100 12101 + 12087 12098 12101 + 12087 12101 12102 + 12087 12102 12103 + 12088 12087 12103 + 12088 12103 12089 + 12070 12089 12103 + 12099 12009 12008 + 12099 12008 12104 + 12104 12100 12099 + 12101 12100 12104 + 12101 12104 12105 + 12101 12105 12106 + 12106 12102 12101 + 12102 12106 12066 + 12103 12102 12066 + 12103 12066 12070 + 12013 12104 12008 + 12105 12104 12013 + 12013 12018 12105 + 12105 12018 12061 + 12061 12106 12105 + 12066 12106 12061 + 12107 12108 12109 + 12110 12109 12108 + 12109 12110 12111 + 12111 12112 12109 + 12109 12112 12113 + 12113 12114 12109 + 12109 12114 12115 + 12115 12116 12109 + 12116 12117 12109 + 12108 12118 12110 + 12119 12110 12118 + 12111 12110 12119 + 12119 12120 12111 + 12111 12120 12121 + 12121 12122 12111 + 12112 12111 12122 + 12108 12123 12118 + 12118 12123 12124 + 12124 12125 12118 + 12118 12125 12119 + 12123 12108 12126 + 12124 12123 12126 + 12126 12127 12124 + 12128 12124 12127 + 12128 12125 12124 + 12125 12128 12129 + 12129 12130 12125 + 12125 12130 12119 + 12108 12117 12126 + 12126 12117 12131 + 12126 12131 12132 + 12132 12127 12126 + 12127 12132 12133 + 12133 12134 12127 + 12127 12134 12128 + 12129 12128 12134 + 12131 12117 12116 + 12116 12135 12131 + 12131 12135 12136 + 12132 12131 12136 + 12136 12137 12132 + 12133 12132 12137 + 12137 12138 12133 + 12139 12133 12138 + 12134 12133 12139 + 12140 12135 12116 + 12135 12140 12141 + 12141 12136 12135 + 12141 12142 12136 + 12136 12142 12143 + 12143 12137 12136 + 12138 12137 12143 + 12140 12116 12115 + 12115 12144 12140 + 12140 12144 12145 + 12141 12140 12145 + 12145 12146 12141 + 12142 12141 12146 + 12146 12147 12142 + 12143 12142 12147 + 12148 12144 12115 + 12144 12148 12149 + 12149 12145 12144 + 12145 12149 12150 + 12150 12151 12145 + 12145 12151 12152 + 12152 12146 12145 + 12147 12146 12152 + 12148 12115 12114 + 12114 12153 12148 + 12148 12153 12154 + 12154 12149 12148 + 12150 12149 12154 + 12154 12155 12150 + 12150 12155 12156 + 12156 12157 12150 + 12151 12150 12157 + 12113 12153 12114 + 12153 12113 12158 + 12158 12159 12153 + 12153 12159 12154 + 12159 12160 12154 + 12161 12154 12160 + 12154 12161 12162 + 12162 12155 12154 + 12156 12155 12162 + 12163 12158 12113 + 12164 12158 12163 + 12158 12164 12159 + 12159 12164 12165 + 12165 12160 12159 + 12165 12166 12160 + 12160 12166 12161 + 12113 12112 12163 + 12122 12163 12112 + 12163 12122 12167 + 12163 12167 12164 + 12164 12167 12168 + 12165 12164 12168 + 12168 12169 12165 + 12166 12165 12169 + 12169 12170 12166 + 12161 12166 12170 + 12170 12171 12161 + 12162 12161 12171 + 12167 12122 12121 + 12121 12168 12167 + 12172 12168 12121 + 12168 12172 12173 + 12173 12169 12168 + 12170 12169 12173 + 12173 12174 12170 + 12170 12174 12175 + 12175 12171 12170 + 12121 12176 12172 + 12172 12176 12177 + 12177 12178 12172 + 12173 12172 12178 + 12178 12179 12173 + 12174 12173 12179 + 12179 12180 12174 + 12175 12174 12180 + 12176 12121 12120 + 12120 12181 12176 + 12176 12181 12182 + 12182 12177 12176 + 12183 12177 12182 + 12177 12183 12178 + 12178 12183 12184 + 12184 12179 12178 + 12180 12179 12184 + 12181 12120 12119 + 12119 12185 12181 + 12181 12185 12186 + 12186 12187 12181 + 12181 12187 12182 + 12185 12119 12130 + 12130 12188 12185 + 12188 12186 12185 + 12188 12189 12186 + 12189 12190 12186 + 12191 12186 12190 + 12186 12191 12192 + 12192 12187 12186 + 12188 12130 12129 + 12188 12129 12193 + 12188 12193 12189 + 12193 12194 12189 + 12189 12194 12195 + 12190 12189 12195 + 12196 12190 12195 + 12197 12190 12196 + 12190 12197 12191 + 12193 12129 12198 + 12198 12199 12193 + 12194 12193 12199 + 12200 12194 12199 + 12195 12194 12200 + 12200 12201 12195 + 12196 12195 12201 + 12198 12129 12134 + 12139 12198 12134 + 12199 12198 12139 + 12139 12202 12199 + 12199 12202 12203 + 12203 12200 12199 + 12200 12203 12204 + 12204 12201 12200 + 12201 12204 12205 + 12205 12206 12201 + 12201 12206 12196 + 12202 12139 12207 + 12207 12208 12202 + 12203 12202 12208 + 12208 12209 12203 + 12204 12203 12209 + 12209 12210 12204 + 12204 12210 12211 + 12211 12205 12204 + 12138 12207 12139 + 12212 12207 12138 + 12208 12207 12212 + 12212 12213 12208 + 12208 12213 12214 + 12214 12209 12208 + 12210 12209 12214 + 12214 12215 12210 + 12210 12215 12216 + 12216 12211 12210 + 12138 12217 12212 + 12212 12217 12218 + 12218 12219 12212 + 12213 12212 12219 + 12219 12220 12213 + 12214 12213 12220 + 12220 12221 12214 + 12215 12214 12221 + 12143 12217 12138 + 12217 12143 12222 + 12222 12218 12217 + 12218 12222 12223 + 12223 12224 12218 + 12218 12224 12225 + 12225 12219 12218 + 12220 12219 12225 + 12147 12222 12143 + 12223 12222 12147 + 12147 12226 12223 + 12223 12226 12227 + 12227 12228 12223 + 12224 12223 12228 + 12228 12229 12224 + 12225 12224 12229 + 12152 12226 12147 + 12226 12152 12230 + 12230 12227 12226 + 12227 12230 12231 + 12231 12232 12227 + 12227 12232 12233 + 12233 12228 12227 + 12229 12228 12233 + 12234 12230 12152 + 12231 12230 12234 + 12234 12235 12231 + 12236 12231 12235 + 12232 12231 12236 + 12236 12237 12232 + 12232 12237 12238 + 12238 12233 12232 + 12152 12151 12234 + 12157 12234 12151 + 12234 12157 12239 + 12239 12235 12234 + 12235 12239 12240 + 12240 12241 12235 + 12235 12241 12236 + 12242 12236 12241 + 12237 12236 12242 + 12239 12157 12156 + 12156 12243 12239 + 12240 12239 12243 + 12243 12244 12240 + 12245 12240 12244 + 12241 12240 12245 + 12245 12246 12241 + 12241 12246 12242 + 12247 12243 12156 + 12243 12247 12248 + 12248 12244 12243 + 12244 12248 12249 + 12249 12250 12244 + 12244 12250 12245 + 12251 12245 12250 + 12246 12245 12251 + 12156 12252 12247 + 12247 12252 12253 + 12253 12254 12247 + 12248 12247 12254 + 12254 12255 12248 + 12249 12248 12255 + 12252 12156 12162 + 12253 12252 12162 + 12162 12256 12253 + 12257 12253 12256 + 12253 12257 12258 + 12258 12254 12253 + 12254 12258 12259 + 12259 12255 12254 + 12171 12256 12162 + 12260 12256 12171 + 12256 12260 12257 + 12261 12257 12260 + 12258 12257 12261 + 12261 12262 12258 + 12259 12258 12262 + 12262 12263 12259 + 12264 12259 12263 + 12255 12259 12264 + 12171 12175 12260 + 12260 12175 12265 + 12265 12266 12260 + 12260 12266 12261 + 12267 12261 12266 + 12261 12267 12268 + 12268 12262 12261 + 12262 12268 12269 + 12269 12263 12262 + 12180 12265 12175 + 12270 12265 12180 + 12266 12265 12270 + 12270 12271 12266 + 12266 12271 12267 + 12272 12267 12271 + 12268 12267 12272 + 12272 12273 12268 + 12269 12268 12273 + 12180 12274 12270 + 12275 12270 12274 + 12271 12270 12275 + 12275 12276 12271 + 12271 12276 12272 + 12277 12272 12276 + 12272 12277 12278 + 12278 12273 12272 + 12184 12274 12180 + 12274 12184 12279 + 12279 12280 12274 + 12274 12280 12275 + 12281 12275 12280 + 12275 12281 12282 + 12282 12276 12275 + 12276 12282 12277 + 12283 12277 12282 + 12278 12277 12283 + 12284 12279 12184 + 12285 12279 12284 + 12280 12279 12285 + 12285 12286 12280 + 12280 12286 12281 + 12281 12286 12287 + 12287 12288 12281 + 12282 12281 12288 + 12184 12183 12284 + 12182 12284 12183 + 12289 12284 12182 + 12284 12289 12285 + 12290 12285 12289 + 12286 12285 12290 + 12290 12287 12286 + 12290 12291 12287 + 12287 12291 12292 + 12292 12288 12287 + 12293 12288 12292 + 12288 12293 12282 + 12282 12293 12283 + 12182 12294 12289 + 12289 12294 12295 + 12295 12296 12289 + 12289 12296 12290 + 12291 12290 12296 + 12296 12297 12291 + 12291 12297 12298 + 12292 12291 12298 + 12294 12182 12187 + 12187 12192 12294 + 12192 12299 12294 + 12299 12295 12294 + 12297 12295 12299 + 12295 12297 12296 + 12300 12299 12192 + 12299 12300 12301 + 12299 12301 12297 + 12297 12301 12298 + 12192 12191 12300 + 12300 12191 12197 + 12197 12302 12300 + 12301 12300 12302 + 12302 12303 12301 + 12303 12302 12304 + 12303 12304 12305 + 12303 12305 12298 + 12304 12302 12197 + 12197 12306 12304 + 12307 12304 12306 + 12304 12307 12305 + 12305 12307 12308 + 12305 12308 12309 + 12309 12298 12305 + 12196 12306 12197 + 12306 12196 12206 + 12206 12310 12306 + 12310 12307 12306 + 12308 12307 12310 + 12310 12311 12308 + 12308 12311 12312 + 12312 12309 12308 + 12313 12309 12312 + 12298 12309 12313 + 12310 12206 12205 + 12205 12311 12310 + 12311 12205 12211 + 12211 12312 12311 + 12216 12312 12211 + 12312 12216 12313 + 12313 12216 12314 + 12315 12313 12314 + 12298 12313 12315 + 12315 12316 12298 + 12298 12316 12292 + 12216 12215 12314 + 12221 12314 12215 + 12314 12221 12317 + 12317 12318 12314 + 12314 12318 12319 + 12319 12320 12314 + 12314 12320 12315 + 12317 12221 12220 + 12220 12321 12317 + 12317 12321 12322 + 12322 12323 12317 + 12318 12317 12323 + 12323 12324 12318 + 12319 12318 12324 + 12225 12321 12220 + 12321 12225 12325 + 12325 12322 12321 + 12322 12325 12326 + 12326 12327 12322 + 12322 12327 12328 + 12328 12323 12322 + 12324 12323 12328 + 12229 12325 12225 + 12326 12325 12229 + 12229 12329 12326 + 12330 12326 12329 + 12327 12326 12330 + 12330 12331 12327 + 12328 12327 12331 + 12331 12332 12328 + 12333 12328 12332 + 12328 12333 12324 + 12233 12329 12229 + 12329 12233 12238 + 12238 12334 12329 + 12329 12334 12330 + 12335 12330 12334 + 12331 12330 12335 + 12335 12336 12331 + 12331 12336 12337 + 12337 12332 12331 + 12338 12332 12337 + 12332 12338 12333 + 12334 12238 12339 + 12339 12340 12334 + 12334 12340 12335 + 12341 12335 12340 + 12336 12335 12341 + 12341 12342 12336 + 12336 12342 12343 + 12343 12337 12336 + 12339 12238 12237 + 12237 12344 12339 + 12345 12339 12344 + 12340 12339 12345 + 12345 12346 12340 + 12340 12346 12341 + 12347 12341 12346 + 12342 12341 12347 + 12242 12344 12237 + 12344 12242 12348 + 12348 12349 12344 + 12344 12349 12345 + 12350 12345 12349 + 12346 12345 12350 + 12350 12351 12346 + 12346 12351 12347 + 12348 12242 12246 + 12246 12352 12348 + 12353 12348 12352 + 12349 12348 12353 + 12353 12354 12349 + 12349 12354 12350 + 12355 12350 12354 + 12351 12350 12355 + 12251 12352 12246 + 12352 12251 12356 + 12356 12357 12352 + 12352 12357 12353 + 12358 12353 12357 + 12354 12353 12358 + 12358 12359 12354 + 12354 12359 12355 + 12356 12251 12360 + 12360 12361 12356 + 12362 12356 12361 + 12357 12356 12362 + 12362 12363 12357 + 12357 12363 12358 + 12364 12358 12363 + 12359 12358 12364 + 12250 12360 12251 + 12365 12360 12250 + 12360 12365 12366 + 12366 12361 12360 + 12361 12366 12367 + 12367 12368 12361 + 12361 12368 12362 + 12369 12362 12368 + 12363 12362 12369 + 12250 12249 12365 + 12365 12249 12370 + 12370 12371 12365 + 12366 12365 12371 + 12371 12372 12366 + 12367 12366 12372 + 12372 12373 12367 + 12374 12367 12373 + 12368 12367 12374 + 12255 12370 12249 + 12264 12370 12255 + 12370 12264 12375 + 12375 12371 12370 + 12371 12375 12376 + 12376 12372 12371 + 12372 12376 12377 + 12377 12373 12372 + 12373 12377 12378 + 12378 12379 12373 + 12373 12379 12374 + 12375 12264 12380 + 12380 12381 12375 + 12376 12375 12381 + 12381 12382 12376 + 12376 12382 12383 + 12383 12377 12376 + 12378 12377 12383 + 12263 12380 12264 + 12384 12380 12263 + 12380 12384 12385 + 12385 12381 12380 + 12381 12385 12386 + 12386 12382 12381 + 12382 12386 12387 + 12387 12383 12382 + 12263 12269 12384 + 12384 12269 12388 + 12388 12389 12384 + 12385 12384 12389 + 12389 12390 12385 + 12386 12385 12390 + 12390 12391 12386 + 12387 12386 12391 + 12273 12388 12269 + 12392 12388 12273 + 12388 12392 12393 + 12393 12389 12388 + 12389 12393 12394 + 12394 12390 12389 + 12390 12394 12395 + 12395 12391 12390 + 12273 12278 12392 + 12392 12278 12396 + 12396 12397 12392 + 12393 12392 12397 + 12397 12398 12393 + 12394 12393 12398 + 12398 12399 12394 + 12395 12394 12399 + 12283 12396 12278 + 12400 12396 12283 + 12396 12400 12401 + 12401 12397 12396 + 12397 12401 12402 + 12402 12398 12397 + 12398 12402 12403 + 12403 12399 12398 + 12283 12404 12400 + 12400 12404 12405 + 12405 12406 12400 + 12401 12400 12406 + 12406 12407 12401 + 12402 12401 12407 + 12404 12283 12293 + 12293 12408 12404 + 12404 12408 12409 + 12405 12404 12409 + 12409 12410 12405 + 12411 12405 12410 + 12405 12411 12412 + 12412 12406 12405 + 12292 12408 12293 + 12408 12292 12316 + 12316 12409 12408 + 12316 12315 12409 + 12409 12315 12413 + 12413 12410 12409 + 12413 12414 12410 + 12410 12414 12411 + 12415 12411 12414 + 12412 12411 12415 + 12415 12416 12412 + 12417 12412 12416 + 12406 12412 12417 + 12417 12407 12406 + 12320 12413 12315 + 12414 12413 12320 + 12320 12418 12414 + 12414 12418 12415 + 12419 12415 12418 + 12415 12419 12420 + 12420 12416 12415 + 12416 12420 12421 + 12421 12422 12416 + 12416 12422 12417 + 12319 12418 12320 + 12418 12319 12419 + 12324 12419 12319 + 12420 12419 12324 + 12324 12333 12420 + 12421 12420 12333 + 12333 12338 12421 + 12423 12421 12338 + 12422 12421 12423 + 12423 12424 12422 + 12422 12424 12425 + 12425 12417 12422 + 12407 12417 12425 + 12425 12426 12407 + 12407 12426 12402 + 12338 12427 12423 + 12428 12423 12427 + 12424 12423 12428 + 12428 12429 12424 + 12424 12429 12430 + 12430 12425 12424 + 12426 12425 12430 + 12430 12431 12426 + 12402 12426 12431 + 12431 12403 12402 + 12337 12427 12338 + 12427 12337 12343 + 12343 12432 12427 + 12427 12432 12428 + 12433 12428 12432 + 12429 12428 12433 + 12433 12434 12429 + 12429 12434 12435 + 12435 12430 12429 + 12431 12430 12435 + 12432 12343 12436 + 12436 12437 12432 + 12432 12437 12433 + 12438 12433 12437 + 12434 12433 12438 + 12438 12439 12434 + 12434 12439 12440 + 12440 12435 12434 + 12436 12343 12342 + 12342 12441 12436 + 12442 12436 12441 + 12437 12436 12442 + 12442 12443 12437 + 12437 12443 12438 + 12444 12438 12443 + 12439 12438 12444 + 12347 12441 12342 + 12441 12347 12445 + 12445 12446 12441 + 12441 12446 12442 + 12447 12442 12446 + 12443 12442 12447 + 12447 12448 12443 + 12443 12448 12444 + 12445 12347 12351 + 12351 12449 12445 + 12450 12445 12449 + 12446 12445 12450 + 12450 12451 12446 + 12446 12451 12447 + 12452 12447 12451 + 12448 12447 12452 + 12355 12449 12351 + 12449 12355 12453 + 12453 12454 12449 + 12449 12454 12450 + 12455 12450 12454 + 12451 12450 12455 + 12455 12456 12451 + 12451 12456 12452 + 12453 12355 12359 + 12359 12457 12453 + 12458 12453 12457 + 12454 12453 12458 + 12458 12459 12454 + 12454 12459 12455 + 12460 12455 12459 + 12456 12455 12460 + 12460 12461 12456 + 12452 12456 12461 + 12364 12457 12359 + 12457 12364 12462 + 12462 12463 12457 + 12457 12463 12458 + 12464 12458 12463 + 12459 12458 12464 + 12464 12465 12459 + 12459 12465 12460 + 12460 12465 12466 + 12461 12460 12466 + 12467 12462 12364 + 12468 12462 12467 + 12462 12468 12469 + 12463 12462 12469 + 12463 12469 12464 + 12464 12469 12470 + 12465 12464 12470 + 12470 12466 12465 + 12364 12471 12467 + 12472 12467 12471 + 12467 12472 12473 + 12473 12474 12467 + 12467 12474 12468 + 12363 12471 12364 + 12369 12471 12363 + 12471 12369 12472 + 12472 12369 12475 + 12475 12476 12472 + 12476 12477 12472 + 12477 12473 12472 + 12473 12477 12478 + 12474 12473 12478 + 12478 12479 12474 + 12468 12474 12479 + 12368 12475 12369 + 12374 12475 12368 + 12475 12374 12480 + 12480 12476 12475 + 12476 12480 12481 + 12481 12477 12476 + 12477 12481 12482 + 12482 12478 12477 + 12478 12482 12483 + 12479 12478 12483 + 12470 12479 12483 + 12468 12479 12470 + 12469 12468 12470 + 12480 12374 12379 + 12379 12484 12480 + 12484 12485 12480 + 12485 12481 12480 + 12481 12485 12482 + 12483 12482 12485 + 12486 12484 12379 + 12484 12486 12487 + 12487 12485 12484 + 12485 12487 12483 + 12379 12378 12486 + 12486 12378 12488 + 12488 12489 12486 + 12489 12490 12486 + 12490 12487 12486 + 12487 12490 12483 + 12383 12488 12378 + 12491 12488 12383 + 12488 12491 12492 + 12492 12489 12488 + 12489 12492 12493 + 12493 12490 12489 + 12490 12493 12494 + 12494 12483 12490 + 12383 12387 12491 + 12491 12387 12495 + 12495 12496 12491 + 12492 12491 12496 + 12496 12497 12492 + 12497 12498 12492 + 12498 12493 12492 + 12493 12498 12494 + 12391 12495 12387 + 12499 12495 12391 + 12495 12499 12500 + 12500 12496 12495 + 12496 12500 12501 + 12501 12497 12496 + 12497 12501 12502 + 12502 12498 12497 + 12498 12502 12494 + 12391 12395 12499 + 12499 12395 12503 + 12503 12504 12499 + 12500 12499 12504 + 12504 12505 12500 + 12501 12500 12505 + 12505 12506 12501 + 12502 12501 12506 + 12399 12503 12395 + 12507 12503 12399 + 12503 12507 12508 + 12508 12504 12503 + 12504 12508 12509 + 12509 12505 12504 + 12505 12509 12510 + 12510 12506 12505 + 12399 12403 12507 + 12507 12403 12431 + 12431 12511 12507 + 12508 12507 12511 + 12511 12512 12508 + 12509 12508 12512 + 12512 12513 12509 + 12510 12509 12513 + 12513 12514 12510 + 12515 12510 12514 + 12506 12510 12515 + 12435 12511 12431 + 12511 12435 12440 + 12440 12512 12511 + 12512 12440 12516 + 12516 12513 12512 + 12513 12516 12517 + 12517 12514 12513 + 12514 12517 12518 + 12518 12519 12514 + 12514 12519 12515 + 12516 12440 12439 + 12439 12520 12516 + 12517 12516 12520 + 12520 12521 12517 + 12521 12522 12517 + 12522 12518 12517 + 12523 12518 12522 + 12518 12523 12524 + 12519 12518 12524 + 12515 12519 12524 + 12444 12520 12439 + 12520 12444 12525 + 12525 12521 12520 + 12521 12525 12526 + 12526 12522 12521 + 12522 12526 12527 + 12527 12523 12522 + 12525 12444 12448 + 12448 12528 12525 + 12528 12529 12525 + 12529 12526 12525 + 12526 12529 12527 + 12530 12527 12529 + 12527 12530 12466 + 12523 12527 12466 + 12452 12528 12448 + 12528 12452 12531 + 12531 12529 12528 + 12529 12531 12530 + 12531 12461 12530 + 12466 12530 12461 + 12531 12452 12461 + 12466 12470 12483 + 12523 12466 12483 + 12483 12494 12523 + 12494 12532 12523 + 12532 12524 12523 + 12524 12532 12533 + 12533 12515 12524 + 12515 12533 12506 + 12506 12533 12502 + 12502 12532 12494 + 12502 12533 12532 + 12534 12535 12536 + 12537 12535 12534 + 12537 12538 12535 + 12538 12539 12535 + 12535 12539 12540 + 12540 12541 12535 + 12535 12541 12542 + 12534 12543 12537 + 12537 12543 12544 + 12544 12545 12537 + 12545 12546 12537 + 12546 12538 12537 + 12547 12538 12546 + 12539 12538 12547 + 12543 12534 12548 + 12543 12548 12549 + 12549 12544 12543 + 12544 12549 12550 + 12550 12551 12544 + 12544 12551 12552 + 12552 12545 12544 + 12552 12546 12545 + 12548 12534 12553 + 12553 12554 12548 + 12548 12554 12555 + 12555 12556 12548 + 12556 12549 12548 + 12550 12549 12556 + 12553 12534 12542 + 12557 12553 12542 + 12558 12553 12557 + 12558 12554 12553 + 12554 12558 12559 + 12559 12555 12554 + 12560 12555 12559 + 12555 12560 12561 + 12561 12556 12555 + 12542 12562 12557 + 12563 12557 12562 + 12564 12557 12563 + 12557 12564 12558 + 12559 12558 12564 + 12564 12565 12559 + 12566 12559 12565 + 12559 12566 12560 + 12567 12562 12542 + 12562 12567 12568 + 12568 12569 12562 + 12562 12569 12563 + 12542 12570 12567 + 12571 12567 12570 + 12568 12567 12571 + 12571 12572 12568 + 12568 12572 12573 + 12573 12574 12568 + 12569 12568 12574 + 12575 12570 12542 + 12570 12575 12576 + 12576 12577 12570 + 12570 12577 12571 + 12578 12571 12577 + 12571 12578 12579 + 12579 12572 12571 + 12575 12542 12580 + 12580 12581 12575 + 12575 12581 12582 + 12576 12575 12582 + 12541 12580 12542 + 12583 12580 12541 + 12583 12581 12580 + 12581 12583 12584 + 12584 12582 12581 + 12541 12585 12583 + 12583 12585 12586 + 12586 12584 12583 + 12587 12584 12586 + 12582 12584 12587 + 12588 12585 12541 + 12585 12588 12589 + 12589 12586 12585 + 12586 12589 12590 + 12590 12591 12586 + 12586 12591 12587 + 12541 12540 12588 + 12588 12540 12592 + 12592 12593 12588 + 12589 12588 12593 + 12593 12594 12589 + 12590 12589 12594 + 12592 12540 12539 + 12539 12595 12592 + 12596 12592 12595 + 12592 12596 12597 + 12597 12593 12592 + 12593 12597 12598 + 12598 12594 12593 + 12547 12595 12539 + 12599 12595 12547 + 12595 12599 12596 + 12600 12596 12599 + 12597 12596 12600 + 12600 12601 12597 + 12597 12601 12602 + 12602 12598 12597 + 12603 12598 12602 + 12594 12598 12603 + 12547 12604 12599 + 12599 12604 12605 + 12605 12606 12599 + 12599 12606 12607 + 12607 12600 12599 + 12604 12547 12608 + 12608 12609 12604 + 12605 12604 12609 + 12609 12610 12605 + 12611 12605 12610 + 12605 12611 12612 + 12612 12606 12605 + 12546 12608 12547 + 12613 12608 12546 + 12609 12608 12613 + 12613 12614 12609 + 12609 12614 12615 + 12615 12610 12609 + 12616 12610 12615 + 12610 12616 12611 + 12617 12611 12616 + 12612 12611 12617 + 12546 12618 12613 + 12619 12613 12618 + 12614 12613 12619 + 12619 12620 12614 + 12615 12614 12620 + 12620 12621 12615 + 12622 12615 12621 + 12615 12622 12616 + 12552 12618 12546 + 12618 12552 12623 + 12623 12624 12618 + 12618 12624 12619 + 12624 12625 12619 + 12625 12626 12619 + 12620 12619 12626 + 12626 12627 12620 + 12621 12620 12627 + 12628 12623 12552 + 12623 12628 12629 + 12630 12623 12629 + 12624 12623 12630 + 12630 12625 12624 + 12625 12630 12631 + 12631 12632 12625 + 12626 12625 12632 + 12552 12551 12628 + 12633 12628 12551 + 12628 12633 12634 + 12634 12629 12628 + 12629 12634 12635 + 12635 12636 12629 + 12630 12629 12636 + 12636 12631 12630 + 12637 12631 12636 + 12637 12632 12631 + 12551 12550 12633 + 12638 12633 12550 + 12634 12633 12638 + 12638 12639 12634 + 12634 12639 12640 + 12640 12635 12634 + 12635 12640 12641 + 12642 12635 12641 + 12642 12636 12635 + 12550 12643 12638 + 12644 12638 12643 + 12638 12644 12645 + 12645 12639 12638 + 12640 12639 12645 + 12646 12640 12645 + 12647 12640 12646 + 12647 12641 12640 + 12556 12643 12550 + 12648 12643 12556 + 12643 12648 12644 + 12649 12644 12648 + 12645 12644 12649 + 12649 12650 12645 + 12646 12645 12650 + 12650 12651 12646 + 12651 12652 12646 + 12652 12647 12646 + 12556 12561 12648 + 12648 12561 12653 + 12653 12654 12648 + 12648 12654 12649 + 12649 12654 12655 + 12656 12649 12655 + 12650 12649 12656 + 12657 12650 12656 + 12651 12650 12657 + 12653 12561 12560 + 12560 12658 12653 + 12659 12653 12658 + 12654 12653 12659 + 12655 12654 12659 + 12655 12659 12660 + 12660 12661 12655 + 12655 12661 12656 + 12661 12662 12656 + 12657 12656 12662 + 12663 12658 12560 + 12664 12658 12663 + 12658 12664 12659 + 12660 12659 12664 + 12664 12665 12660 + 12666 12660 12665 + 12660 12666 12667 + 12667 12661 12660 + 12662 12661 12667 + 12560 12566 12663 + 12663 12566 12668 + 12668 12669 12663 + 12670 12663 12669 + 12663 12670 12664 + 12664 12670 12671 + 12671 12665 12664 + 12672 12665 12671 + 12665 12672 12666 + 12565 12668 12566 + 12668 12565 12673 + 12673 12674 12668 + 12668 12674 12675 + 12675 12669 12668 + 12676 12669 12675 + 12669 12676 12670 + 12671 12670 12676 + 12673 12565 12564 + 12564 12677 12673 + 12673 12677 12678 + 12678 12679 12673 + 12674 12673 12679 + 12679 12680 12674 + 12675 12674 12680 + 12563 12677 12564 + 12677 12563 12681 + 12681 12678 12677 + 12678 12681 12682 + 12682 12683 12678 + 12678 12683 12684 + 12684 12679 12678 + 12679 12684 12685 + 12685 12680 12679 + 12686 12681 12563 + 12682 12681 12686 + 12563 12569 12686 + 12574 12686 12569 + 12686 12574 12687 + 12687 12688 12686 + 12686 12688 12682 + 12687 12574 12573 + 12573 12689 12687 + 12687 12689 12690 + 12690 12691 12687 + 12688 12687 12691 + 12691 12692 12688 + 12682 12688 12692 + 12689 12573 12693 + 12693 12694 12689 + 12689 12694 12695 + 12695 12690 12689 + 12696 12690 12695 + 12690 12696 12697 + 12697 12691 12690 + 12692 12691 12697 + 12693 12573 12572 + 12572 12579 12693 + 12698 12693 12579 + 12694 12693 12698 + 12698 12699 12694 + 12694 12699 12700 + 12700 12701 12694 + 12701 12695 12694 + 12702 12695 12701 + 12702 12696 12695 + 12579 12703 12698 + 12704 12698 12703 + 12698 12704 12705 + 12705 12699 12698 + 12699 12705 12706 + 12706 12700 12699 + 12707 12703 12579 + 12708 12703 12707 + 12703 12708 12704 + 12704 12708 12709 + 12709 12710 12704 + 12705 12704 12710 + 12579 12578 12707 + 12711 12707 12578 + 12712 12707 12711 + 12707 12712 12708 + 12708 12712 12713 + 12713 12714 12708 + 12708 12714 12709 + 12578 12715 12711 + 12716 12711 12715 + 12717 12711 12716 + 12711 12717 12712 + 12712 12717 12718 + 12713 12712 12718 + 12577 12715 12578 + 12715 12577 12576 + 12576 12719 12715 + 12715 12719 12716 + 12716 12719 12720 + 12720 12721 12716 + 12722 12716 12721 + 12716 12722 12717 + 12719 12576 12723 + 12723 12720 12719 + 12720 12723 12724 + 12724 12725 12720 + 12720 12725 12726 + 12726 12721 12720 + 12727 12721 12726 + 12721 12727 12722 + 12582 12723 12576 + 12724 12723 12582 + 12582 12728 12724 + 12724 12728 12729 + 12729 12730 12724 + 12725 12724 12730 + 12730 12731 12725 + 12726 12725 12731 + 12587 12728 12582 + 12728 12587 12732 + 12732 12729 12728 + 12729 12732 12733 + 12733 12734 12729 + 12730 12729 12734 + 12735 12730 12734 + 12731 12730 12735 + 12736 12732 12587 + 12732 12736 12737 + 12733 12732 12737 + 12738 12733 12737 + 12734 12733 12738 + 12738 12739 12734 + 12735 12734 12739 + 12587 12591 12736 + 12740 12736 12591 + 12737 12736 12740 + 12741 12737 12740 + 12742 12737 12741 + 12737 12742 12738 + 12742 12743 12738 + 12743 12744 12738 + 12744 12739 12738 + 12591 12590 12740 + 12745 12740 12590 + 12741 12740 12745 + 12745 12746 12741 + 12741 12746 12747 + 12747 12742 12741 + 12748 12742 12747 + 12748 12743 12742 + 12590 12749 12745 + 12750 12745 12749 + 12745 12750 12751 + 12751 12746 12745 + 12752 12746 12751 + 12746 12752 12747 + 12748 12747 12752 + 12594 12749 12590 + 12603 12749 12594 + 12749 12603 12750 + 12753 12750 12603 + 12751 12750 12753 + 12753 12754 12751 + 12751 12754 12755 + 12755 12752 12751 + 12756 12752 12755 + 12756 12757 12752 + 12752 12757 12748 + 12603 12758 12753 + 12759 12753 12758 + 12754 12753 12759 + 12760 12754 12759 + 12761 12754 12760 + 12754 12761 12755 + 12755 12761 12762 + 12756 12755 12762 + 12602 12758 12603 + 12763 12758 12602 + 12758 12763 12759 + 12764 12759 12763 + 12760 12759 12764 + 12764 12765 12760 + 12760 12765 12766 + 12766 12767 12760 + 12767 12761 12760 + 12602 12768 12763 + 12763 12768 12769 + 12769 12770 12763 + 12763 12770 12764 + 12771 12764 12770 + 12772 12764 12771 + 12772 12765 12764 + 12768 12602 12601 + 12601 12773 12768 + 12769 12768 12773 + 12773 12774 12769 + 12775 12769 12774 + 12769 12775 12776 + 12776 12770 12769 + 12770 12776 12771 + 12773 12601 12600 + 12600 12777 12773 + 12773 12777 12778 + 12778 12774 12773 + 12779 12774 12778 + 12774 12779 12775 + 12727 12775 12779 + 12776 12775 12727 + 12727 12780 12776 + 12771 12776 12780 + 12777 12600 12781 + 12781 12782 12777 + 12782 12778 12777 + 12778 12782 12718 + 12783 12778 12718 + 12778 12783 12779 + 12600 12607 12781 + 12781 12607 12784 + 12784 12785 12781 + 12781 12785 12786 + 12786 12782 12781 + 12718 12782 12786 + 12784 12607 12787 + 12787 12788 12784 + 12784 12788 12789 + 12789 12790 12784 + 12785 12784 12790 + 12790 12791 12785 + 12786 12785 12791 + 12606 12787 12607 + 12606 12612 12787 + 12612 12792 12787 + 12787 12792 12793 + 12793 12788 12787 + 12788 12793 12794 + 12794 12789 12788 + 12792 12612 12795 + 12796 12792 12795 + 12793 12792 12796 + 12796 12797 12793 + 12793 12797 12798 + 12798 12794 12793 + 12799 12794 12798 + 12789 12794 12799 + 12617 12795 12612 + 12800 12795 12617 + 12795 12800 12801 + 12801 12796 12795 + 12802 12796 12801 + 12802 12797 12796 + 12798 12797 12802 + 12803 12798 12802 + 12804 12798 12803 + 12798 12804 12799 + 12617 12805 12800 + 12800 12805 12672 + 12672 12806 12800 + 12800 12806 12807 + 12801 12800 12807 + 12808 12801 12807 + 12802 12801 12808 + 12805 12617 12809 + 12809 12810 12805 + 12805 12810 12666 + 12666 12672 12805 + 12616 12809 12617 + 12811 12809 12616 + 12811 12810 12809 + 12811 12812 12810 + 12810 12812 12667 + 12667 12666 12810 + 12616 12622 12811 + 12811 12622 12813 + 12813 12814 12811 + 12814 12815 12811 + 12815 12812 12811 + 12667 12812 12815 + 12815 12816 12667 + 12816 12662 12667 + 12621 12813 12622 + 12813 12621 12817 + 12817 12818 12813 + 12813 12818 12819 + 12819 12814 12813 + 12819 12820 12814 + 12820 12815 12814 + 12815 12820 12821 + 12821 12816 12815 + 12817 12621 12627 + 12817 12627 12822 + 12822 12823 12817 + 12818 12817 12823 + 12823 12824 12818 + 12819 12818 12824 + 12824 12825 12819 + 12825 12826 12819 + 12826 12820 12819 + 12827 12822 12627 + 12828 12822 12827 + 12828 12829 12822 + 12823 12822 12829 + 12830 12823 12829 + 12830 12824 12823 + 12627 12626 12827 + 12632 12827 12626 + 12827 12632 12831 + 12828 12827 12831 + 12832 12828 12831 + 12829 12828 12832 + 12832 12833 12829 + 12830 12829 12833 + 12833 12834 12830 + 12834 12835 12830 + 12830 12835 12824 + 12637 12831 12632 + 12831 12637 12836 + 12836 12837 12831 + 12832 12831 12837 + 12838 12832 12837 + 12833 12832 12838 + 12838 12834 12833 + 12834 12838 12839 + 12839 12835 12834 + 12824 12835 12839 + 12839 12825 12824 + 12839 12826 12825 + 12637 12840 12836 + 12840 12841 12836 + 12842 12836 12841 + 12836 12842 12843 + 12843 12837 12836 + 12837 12843 12838 + 12844 12838 12843 + 12838 12844 12839 + 12839 12844 12826 + 12636 12840 12637 + 12642 12840 12636 + 12840 12642 12841 + 12642 12845 12841 + 12841 12845 12846 + 12846 12847 12841 + 12841 12847 12842 + 12641 12845 12642 + 12846 12845 12641 + 12641 12647 12846 + 12846 12647 12652 + 12847 12846 12652 + 12652 12848 12847 + 12842 12847 12848 + 12848 12849 12842 + 12842 12849 12850 + 12843 12842 12850 + 12850 12844 12843 + 12850 12851 12844 + 12851 12826 12844 + 12820 12826 12851 + 12848 12652 12651 + 12848 12651 12852 + 12848 12852 12853 + 12853 12849 12848 + 12850 12849 12853 + 12850 12853 12851 + 12851 12853 12821 + 12821 12820 12851 + 12852 12651 12657 + 12657 12854 12852 + 12854 12853 12852 + 12853 12854 12821 + 12821 12854 12816 + 12854 12662 12816 + 12662 12854 12657 + 12671 12806 12672 + 12806 12671 12855 + 12855 12807 12806 + 12676 12855 12671 + 12856 12855 12676 + 12807 12855 12856 + 12856 12857 12807 + 12807 12857 12858 + 12858 12859 12807 + 12807 12859 12808 + 12676 12860 12856 + 12861 12856 12860 + 12857 12856 12861 + 12861 12862 12857 + 12858 12857 12862 + 12675 12860 12676 + 12860 12675 12863 + 12863 12864 12860 + 12860 12864 12861 + 12864 12865 12861 + 12866 12861 12865 + 12862 12861 12866 + 12680 12863 12675 + 12867 12863 12680 + 12863 12867 12868 + 12868 12864 12863 + 12864 12868 12869 + 12869 12865 12864 + 12869 12870 12865 + 12865 12870 12866 + 12680 12685 12867 + 12871 12867 12685 + 12868 12867 12871 + 12871 12872 12868 + 12868 12872 12873 + 12873 12869 12868 + 12870 12869 12873 + 12873 12874 12870 + 12866 12870 12874 + 12875 12866 12874 + 12862 12866 12875 + 12685 12876 12871 + 12877 12871 12876 + 12871 12877 12878 + 12878 12872 12871 + 12872 12878 12879 + 12879 12873 12872 + 12873 12879 12880 + 12880 12874 12873 + 12881 12876 12685 + 12881 12882 12876 + 12876 12882 12877 + 12877 12882 12883 + 12883 12884 12877 + 12878 12877 12884 + 12884 12885 12878 + 12879 12878 12885 + 12685 12684 12881 + 12881 12684 12683 + 12683 12886 12881 + 12882 12881 12886 + 12886 12887 12882 + 12882 12887 12883 + 12888 12883 12887 + 12889 12883 12888 + 12883 12889 12890 + 12890 12884 12883 + 12885 12884 12890 + 12891 12886 12683 + 12887 12886 12891 + 12887 12891 12888 + 12888 12891 12682 + 12892 12888 12682 + 12889 12888 12892 + 12892 12893 12889 + 12893 12894 12889 + 12894 12890 12889 + 12683 12682 12891 + 12892 12895 12893 + 12895 12892 12896 + 12896 12897 12895 + 12895 12897 12898 + 12899 12895 12898 + 12892 12692 12896 + 12697 12896 12692 + 12896 12697 12900 + 12900 12897 12896 + 12897 12900 12901 + 12901 12898 12897 + 12902 12898 12901 + 12692 12892 12682 + 12899 12898 12903 + 12903 12904 12899 + 12893 12899 12904 + 12904 12894 12893 + 12894 12904 12905 + 12894 12905 12890 + 12905 12906 12890 + 12890 12906 12885 + 12905 12904 12903 + 12903 12907 12905 + 12906 12905 12907 + 12907 12908 12906 + 12885 12906 12908 + 12908 12909 12885 + 12885 12909 12879 + 12880 12879 12909 + 12910 12907 12903 + 12907 12910 12911 + 12911 12908 12907 + 12908 12911 12912 + 12912 12909 12908 + 12909 12912 12880 + 12880 12912 12913 + 12913 12914 12880 + 12874 12880 12914 + 12903 12915 12910 + 12910 12915 12916 + 12916 12917 12910 + 12910 12917 12918 + 12918 12911 12910 + 12912 12911 12918 + 12918 12913 12912 + 12919 12915 12903 + 12920 12915 12919 + 12920 12916 12915 + 12921 12916 12920 + 12917 12916 12921 + 12917 12921 12922 + 12922 12923 12917 + 12917 12923 12918 + 12902 12919 12903 + 12924 12919 12902 + 12919 12924 12925 + 12925 12920 12919 + 12926 12920 12925 + 12920 12926 12921 + 12921 12926 12927 + 12927 12922 12921 + 12924 12902 12901 + 12925 12924 12901 + 12901 12928 12925 + 12929 12925 12928 + 12925 12929 12926 + 12926 12929 12927 + 12930 12928 12901 + 12931 12928 12930 + 12928 12931 12929 + 12932 12929 12931 + 12929 12932 12927 + 12901 12900 12930 + 12930 12900 12697 + 12697 12696 12930 + 12933 12930 12696 + 12930 12933 12931 + 12931 12933 12934 + 12931 12934 12932 + 12932 12934 12935 + 12936 12932 12935 + 12932 12936 12927 + 12696 12702 12933 + 12937 12933 12702 + 12933 12937 12934 + 12935 12934 12937 + 12937 12938 12935 + 12935 12938 12939 + 12939 12940 12935 + 12936 12935 12940 + 12702 12941 12937 + 12938 12937 12941 + 12941 12942 12938 + 12938 12942 12943 + 12943 12944 12938 + 12944 12945 12938 + 12945 12939 12938 + 12701 12941 12702 + 12942 12941 12701 + 12942 12701 12700 + 12700 12943 12942 + 12946 12943 12700 + 12943 12946 12947 + 12947 12944 12943 + 12944 12947 12948 + 12948 12949 12944 + 12944 12949 12950 + 12950 12945 12944 + 12700 12706 12946 + 12946 12706 12951 + 12951 12952 12946 + 12946 12952 12953 + 12953 12947 12946 + 12948 12947 12953 + 12954 12951 12706 + 12955 12951 12954 + 12955 12952 12951 + 12952 12955 12956 + 12956 12953 12952 + 12957 12953 12956 + 12953 12957 12948 + 12706 12705 12954 + 12705 12958 12954 + 12959 12954 12958 + 12960 12954 12959 + 12954 12960 12955 + 12960 12961 12955 + 12961 12956 12955 + 12962 12956 12961 + 12956 12962 12957 + 12710 12958 12705 + 12958 12710 12963 + 12958 12963 12959 + 12964 12959 12963 + 12965 12959 12964 + 12959 12965 12960 + 12960 12965 12966 + 12966 12961 12960 + 12963 12710 12709 + 12709 12967 12963 + 12963 12967 12964 + 12967 12709 12968 + 12967 12968 12969 + 12969 12970 12967 + 12967 12970 12964 + 12968 12709 12714 + 12714 12971 12968 + 12968 12971 12972 + 12972 12969 12968 + 12973 12969 12972 + 12973 12970 12969 + 12970 12973 12974 + 12974 12975 12970 + 12970 12975 12964 + 12971 12714 12713 + 12713 12976 12971 + 12971 12976 12977 + 12977 12978 12971 + 12971 12978 12972 + 12979 12972 12978 + 12980 12972 12979 + 12972 12980 12973 + 12974 12973 12980 + 12976 12713 12981 + 12981 12982 12976 + 12977 12976 12982 + 12982 12983 12977 + 12984 12977 12983 + 12977 12984 12985 + 12985 12978 12977 + 12978 12985 12979 + 12718 12981 12713 + 12986 12981 12718 + 12982 12981 12986 + 12986 12987 12982 + 12982 12987 12988 + 12988 12983 12982 + 12989 12983 12988 + 12983 12989 12984 + 12990 12984 12989 + 12985 12984 12990 + 12718 12991 12986 + 12986 12991 12992 + 12992 12993 12986 + 12987 12986 12993 + 12993 12994 12987 + 12988 12987 12994 + 12786 12991 12718 + 12991 12786 12995 + 12995 12992 12991 + 12992 12995 12996 + 12996 12997 12992 + 12992 12997 12998 + 12998 12993 12992 + 12994 12993 12998 + 12791 12995 12786 + 12996 12995 12791 + 12791 12999 12996 + 13000 12996 12999 + 12997 12996 13000 + 13000 13001 12997 + 12998 12997 13001 + 13001 13002 12998 + 13003 12998 13002 + 12998 13003 12994 + 13004 12999 12791 + 12999 13004 13005 + 13005 13006 12999 + 12999 13006 13000 + 13006 13007 13000 + 13007 13008 13000 + 13001 13000 13008 + 12791 12790 13004 + 13004 12790 12789 + 12789 13009 13004 + 13004 13009 13010 + 13010 13005 13004 + 13005 13010 13011 + 13012 13005 13011 + 13006 13005 13012 + 13012 13007 13006 + 12799 13009 12789 + 13009 12799 13013 + 13013 13010 13009 + 13011 13010 13013 + 13014 13011 13013 + 13015 13011 13014 + 13012 13011 13015 + 13015 13016 13012 + 13007 13012 13016 + 13016 13017 13007 + 13008 13007 13017 + 13018 13013 12799 + 13014 13013 13018 + 13018 13019 13014 + 13014 13019 13020 + 13020 13015 13014 + 13021 13015 13020 + 13021 13022 13015 + 13016 13015 13022 + 12799 12804 13018 + 13018 12804 13023 + 13024 13018 13023 + 13019 13018 13024 + 13025 13019 13024 + 13026 13019 13025 + 13019 13026 13020 + 13020 13026 13027 + 13021 13020 13027 + 13023 12804 12803 + 13023 12803 13028 + 13028 13029 13023 + 13023 13029 13030 + 13030 13024 13023 + 13025 13024 13030 + 13030 13031 13025 + 13032 13025 13031 + 13032 13026 13025 + 13028 12803 12802 + 12802 13033 13028 + 13034 13028 13033 + 13028 13034 13035 + 13035 13029 13028 + 13029 13035 13036 + 13036 13030 13029 + 13030 13036 13037 + 13037 13031 13030 + 12808 13033 12802 + 13038 13033 12808 + 13033 13038 13034 + 13034 13038 13039 + 13039 13040 13034 + 13035 13034 13040 + 13040 13041 13035 + 13035 13041 13042 + 13042 13036 13035 + 13037 13036 13042 + 12808 13043 13038 + 13038 13043 12989 + 12989 13039 13038 + 12988 13039 12989 + 13039 12988 13044 + 13044 13040 13039 + 13040 13044 13045 + 13045 13041 13040 + 13043 12808 12859 + 12859 12990 13043 + 12989 13043 12990 + 12990 12859 12858 + 12858 13046 12990 + 12990 13046 12985 + 12979 12985 13046 + 13046 13047 12979 + 13048 12979 13047 + 12979 13048 12980 + 13046 12858 13049 + 13049 13047 13046 + 13047 13049 13050 + 13050 13051 13047 + 13047 13051 13048 + 13048 13051 13052 + 13052 13053 13048 + 12980 13048 13053 + 13049 12858 12862 + 12862 13054 13049 + 13050 13049 13054 + 13054 13055 13050 + 13050 13055 13056 + 13056 13057 13050 + 13057 13058 13050 + 13051 13050 13058 + 12875 13054 12862 + 12875 13055 13054 + 13055 12875 13059 + 13059 13056 13055 + 13060 13056 13059 + 13056 13060 13061 + 13061 13057 13056 + 13062 13057 13061 + 13057 13062 13063 + 13063 13058 13057 + 12874 13059 12875 + 12914 13059 12874 + 13059 12914 13060 + 13060 12914 12913 + 12913 13064 13060 + 13060 13064 13065 + 13065 13061 13060 + 13062 13061 13065 + 13065 13066 13062 + 13062 13066 13067 + 13067 13063 13062 + 13068 13063 13067 + 13068 13058 13063 + 13058 13068 13051 + 13051 13068 13052 + 13064 12913 12918 + 12918 13069 13064 + 13064 13069 13070 + 13070 13065 13064 + 13065 13070 13071 + 13071 13066 13065 + 13066 13071 13072 + 13072 13073 13066 + 13066 13073 13067 + 13069 12918 12923 + 12923 13074 13069 + 13069 13074 13075 + 13075 13076 13069 + 13076 13070 13069 + 13071 13070 13076 + 13076 13077 13071 + 13071 13077 13078 + 13078 13072 13071 + 13074 12923 12922 + 12922 13079 13074 + 13074 13079 13080 + 13080 13081 13074 + 13074 13081 13075 + 13079 12922 12927 + 12927 13082 13079 + 13079 13082 13080 + 13082 13083 13080 + 13084 13080 13083 + 13080 13084 13081 + 13081 13084 13075 + 12936 13082 12927 + 13082 12936 13085 + 13085 13083 13082 + 13083 13085 13086 + 13083 13086 13084 + 13087 13084 13086 + 13084 13087 13075 + 13075 13087 13088 + 13075 13088 13089 + 13089 13076 13075 + 13077 13076 13089 + 13085 12936 12940 + 13090 13085 12940 + 13085 13090 13086 + 13086 13090 13091 + 13086 13091 13087 + 13088 13087 13091 + 13091 13092 13088 + 13088 13092 13093 + 13093 13089 13088 + 13094 13089 13093 + 13089 13094 13077 + 12940 13095 13090 + 13096 13090 13095 + 13090 13096 13091 + 13092 13091 13096 + 13096 13097 13092 + 13092 13097 13098 + 13098 13093 13092 + 13099 13093 13098 + 13093 13099 13094 + 13095 12940 12939 + 13095 12939 13100 + 13100 13096 13095 + 13097 13096 13100 + 13100 12950 13097 + 13098 13097 12950 + 12950 12949 13098 + 13101 13098 12949 + 13098 13101 13099 + 13099 13101 13102 + 13094 13099 13102 + 12939 12945 13100 + 12945 12950 13100 + 12949 12948 13101 + 13103 13101 12948 + 13101 13103 13102 + 13102 13103 13104 + 13105 13102 13104 + 13102 13105 13094 + 13077 13094 13105 + 13105 13078 13077 + 12948 12957 13103 + 13106 13103 12957 + 13103 13106 13104 + 13107 13104 13106 + 13104 13107 13108 + 13108 13109 13104 + 13109 13105 13104 + 13109 13078 13105 + 12957 12962 13106 + 13106 12962 13110 + 13110 13111 13106 + 13111 13107 13106 + 13112 13107 13111 + 13107 13112 13113 + 13113 13108 13107 + 12961 13110 12962 + 13114 13110 12961 + 13110 13114 13115 + 13115 13111 13110 + 13111 13115 13112 + 13112 13115 13116 + 13113 13112 13116 + 13116 13117 13113 + 13118 13113 13117 + 13108 13113 13118 + 12961 12966 13114 + 13114 12966 13119 + 13114 13119 13120 + 13120 13115 13114 + 13115 13120 13116 + 13121 13116 13120 + 13121 13122 13116 + 13116 13122 13123 + 13123 13117 13116 + 12966 13124 13119 + 13124 12964 13119 + 13119 12964 13125 + 13125 13126 13119 + 13119 13126 13120 + 13126 13127 13120 + 13127 13121 13120 + 13124 12966 12965 + 12964 13124 12965 + 13127 13126 13125 + 13127 13125 13128 + 13121 13127 13128 + 13128 13129 13121 + 13122 13121 13129 + 13129 13130 13122 + 13130 13123 13122 + 13131 13123 13130 + 13117 13123 13131 + 13132 13117 13131 + 13117 13132 13118 + 13125 13133 13128 + 13134 13128 13133 + 13128 13134 13135 + 13135 13129 13128 + 13130 13129 13135 + 13136 13130 13135 + 13130 13136 13131 + 13136 13137 13131 + 13132 13131 13137 + 13133 13125 12964 + 13138 13133 12964 + 13134 13133 13138 + 13138 13139 13134 + 13135 13134 13139 + 13139 13140 13135 + 13136 13135 13140 + 13140 13141 13136 + 13136 13141 13137 + 12975 13138 12964 + 13142 13138 12975 + 13139 13138 13142 + 13139 13142 13140 + 13142 13143 13140 + 13140 13143 13141 + 13141 13143 13144 + 13144 13137 13141 + 13145 13137 13144 + 13137 13145 13132 + 13118 13132 13145 + 12975 13146 13142 + 13142 13146 13147 + 13143 13142 13147 + 13147 13144 13143 + 13148 13144 13147 + 13144 13148 13145 + 13145 13148 13149 + 13149 13150 13145 + 13145 13150 13118 + 12975 12974 13146 + 13146 12974 13151 + 13151 13147 13146 + 13147 13151 13152 + 13147 13152 13148 + 13149 13148 13152 + 13153 13151 12974 + 13152 13151 13153 + 13153 13154 13152 + 13152 13154 13149 + 13154 13155 13149 + 13156 13149 13155 + 13149 13156 13157 + 13157 13150 13149 + 12980 13153 12974 + 13053 13153 12980 + 13153 13053 13154 + 13154 13053 13052 + 13052 13155 13154 + 13067 13155 13052 + 13155 13067 13156 + 13073 13156 13067 + 13073 13158 13156 + 13158 13157 13156 + 13157 13158 13159 + 13159 13160 13157 + 13150 13157 13160 + 13160 13118 13150 + 13118 13160 13108 + 13067 13052 13068 + 13108 13160 13159 + 13159 13109 13108 + 13109 13159 13078 + 13078 13159 13158 + 13158 13072 13078 + 13072 13158 13073 + 12994 13044 12988 + 13045 13044 12994 + 12994 13003 13045 + 13045 13003 13161 + 13161 13162 13045 + 13041 13045 13162 + 13162 13042 13041 + 13163 13042 13162 + 13042 13163 13037 + 13002 13161 13003 + 13161 13002 13164 + 13164 13165 13161 + 13162 13161 13165 + 13166 13162 13165 + 13166 13163 13162 + 13167 13163 13166 + 13037 13163 13167 + 13164 13002 13168 + 13164 13168 13169 + 13169 13170 13164 + 13165 13164 13170 + 13170 13171 13165 + 13166 13165 13171 + 13171 13172 13166 + 13172 13167 13166 + 13002 13001 13168 + 13008 13168 13001 + 13168 13008 13173 + 13173 13169 13168 + 13174 13169 13173 + 13174 13175 13169 + 13170 13169 13175 + 13176 13170 13175 + 13176 13171 13170 + 13017 13173 13008 + 13174 13173 13017 + 13017 13177 13174 + 13174 13177 13178 + 13175 13174 13178 + 13178 13179 13175 + 13176 13175 13179 + 13179 13180 13176 + 13180 13181 13176 + 13176 13181 13171 + 13182 13177 13017 + 13177 13182 13183 + 13183 13178 13177 + 13178 13183 13180 + 13180 13179 13178 + 13182 13017 13016 + 13182 13016 13022 + 13183 13182 13022 + 13184 13183 13022 + 13180 13183 13184 + 13184 13185 13180 + 13181 13180 13185 + 13185 13186 13181 + 13171 13181 13186 + 13186 13172 13171 + 13186 13167 13172 + 13022 13187 13184 + 13187 13188 13184 + 13188 13189 13184 + 13184 13189 13185 + 13185 13189 13190 + 13190 13186 13185 + 13186 13190 13167 + 13191 13167 13190 + 13167 13191 13037 + 13187 13022 13021 + 13192 13187 13021 + 13187 13192 13193 + 13193 13188 13187 + 13188 13193 13194 + 13194 13195 13188 + 13189 13188 13195 + 13195 13190 13189 + 13195 13191 13190 + 13195 13196 13191 + 13191 13196 13037 + 13196 13031 13037 + 13021 13027 13192 + 13192 13027 13197 + 13193 13192 13197 + 13197 13194 13193 + 13196 13194 13197 + 13195 13194 13196 + 13197 13027 13026 + 13197 13026 13032 + 13197 13032 13196 + 13031 13196 13032 + 12717 12783 12718 + 12779 12783 12717 + 12717 12722 12779 + 12779 12722 12727 + 12726 12780 12727 + 12780 12726 13198 + 13198 13199 12780 + 12780 13199 12771 + 12772 12771 13199 + 12731 13198 12726 + 13198 12731 13200 + 13201 13198 13200 + 13201 13199 13198 + 13201 13202 13199 + 13199 13202 12772 + 12772 13202 13203 + 13203 13204 12772 + 12765 12772 13204 + 12735 13200 12731 + 13200 12735 13205 + 13205 13206 13200 + 13201 13200 13206 + 13206 13207 13201 + 13207 13203 13201 + 13203 13202 13201 + 12739 13205 12735 + 13205 12739 13208 + 13209 13205 13208 + 13209 13206 13205 + 13209 13210 13206 + 13206 13210 13211 + 13211 13207 13206 + 13211 13203 13207 + 12744 13208 12739 + 13208 12744 13212 + 13212 13213 13208 + 13209 13208 13213 + 13213 13214 13209 + 13214 13210 13209 + 13210 13214 13215 + 13215 13216 13210 + 13216 13211 13210 + 12744 12743 13212 + 13217 13212 12743 + 13212 13217 13214 + 13214 13213 13212 + 12743 12748 13217 + 13218 13217 12748 + 13217 13218 13215 + 13214 13217 13215 + 12748 12757 13218 + 12757 12756 13218 + 12756 13219 13218 + 13215 13218 13219 + 13215 13219 13220 + 13220 13216 13215 + 13221 13216 13220 + 13216 13221 13222 + 13222 13211 13216 + 13211 13222 13203 + 13219 12756 12762 + 12762 13220 13219 + 13220 12762 13223 + 13224 13220 13223 + 13220 13224 13221 + 13221 13224 13225 + 13225 13226 13221 + 13226 13222 13221 + 13203 13222 13226 + 13226 13204 13203 + 13223 12762 12761 + 13223 12761 12767 + 13223 12767 13225 + 13223 13225 13224 + 12767 12766 13225 + 13226 13225 12766 + 13226 12766 13204 + 13204 12766 12765 + 13227 13228 13229 + 13230 13227 13229 + 13230 13229 13231 + 13232 13230 13231 + 13233 13232 13231 + 13231 13234 13233 + 13233 13234 13235 + 13236 13233 13235 + 13237 13234 13231 + 13234 13237 13238 + 13238 13235 13234 + 13239 13235 13238 + 13235 13239 13236 + 13236 13239 13240 + 13240 13241 13236 + 13242 13236 13241 + 13231 13228 13237 + 13237 13228 13243 + 13243 13244 13237 + 13237 13244 13245 + 13245 13238 13237 + 13246 13238 13245 + 13238 13246 13239 + 13239 13246 13247 + 13247 13240 13239 + 13248 13244 13243 + 13244 13248 13249 + 13249 13245 13244 + 13250 13245 13249 + 13245 13250 13246 + 13247 13246 13250 + 13250 13251 13247 + 13252 13247 13251 + 13240 13247 13252 + 13243 13253 13248 + 13248 13253 13254 + 13254 13255 13248 + 13249 13248 13255 + 13255 13256 13249 + 13257 13249 13256 + 13249 13257 13250 + 13253 13243 13258 + 13258 13259 13253 + 13254 13253 13259 + 13259 13260 13254 + 13261 13254 13260 + 13255 13254 13261 + 13227 13258 13243 + 13242 13262 13263 + 13236 13242 13263 + 13233 13236 13263 + 13232 13233 13263 + 13230 13232 13263 + 13227 13230 13263 + 13263 13264 13227 + 13265 13266 13267 + 13266 13268 13267 + 98 13269 2731 + 13269 13270 2731 + 13271 13272 13273 + 13274 13272 13271 + 13272 13274 13275 + 13272 13275 13276 + 13276 13277 13272 + 13271 13278 13274 + 13274 13278 13279 + 13280 13274 13279 + 13275 13274 13280 + 13280 13281 13275 + 13275 13281 13282 + 13282 13276 13275 + 13271 13283 13278 + 13278 13283 13284 + 13284 13279 13278 + 13283 13271 13285 + 13285 13286 13283 + 13284 13283 13286 + 13285 13271 13277 + 13287 13285 13277 + 13288 13285 13287 + 13285 13288 13286 + 13286 13288 13289 + 13289 13290 13286 + 13286 13290 13284 + 13277 13291 13287 + 13292 13287 13291 + 13293 13287 13292 + 13287 13293 13288 + 13288 13293 13294 + 13289 13288 13294 + 13295 13291 13277 + 13291 13295 13296 + 13291 13296 13292 + 13297 13292 13296 + 13298 13292 13297 + 13292 13298 13293 + 13293 13298 13299 + 13299 13294 13293 + 13277 13300 13295 + 13301 13295 13300 + 13296 13295 13301 + 13301 13297 13296 + 13297 13301 13302 + 13302 13303 13297 + 13297 13303 13298 + 13303 13299 13298 + 13304 13300 13277 + 13300 13304 13305 + 13305 13306 13300 + 13277 13276 13304 + 13304 13276 13282 + 13282 13307 13304 + 13307 13305 13304 + 13308 13305 13307 + 13305 13308 13309 + 13309 13310 13305 + 13311 13307 13282 + 13307 13311 13308 + 13312 13308 13311 + 13309 13308 13312 + 13312 13313 13309 + 13302 13309 13313 + 13309 13302 13301 + 13314 13309 13301 + 13282 13315 13311 + 13311 13315 13316 + 13316 13312 13311 + 13313 13312 13316 + 13316 13317 13313 + 13313 13317 13318 + 13318 13319 13313 + 13313 13319 13302 + 13315 13282 13281 + 13281 13320 13315 + 13316 13315 13320 + 13320 13321 13316 + 13317 13316 13321 + 13321 13322 13317 + 13317 13322 13323 + 13323 13318 13317 + 13324 13318 13323 + 13319 13318 13324 + 13320 13281 13280 + 13280 13325 13320 + 13320 13325 13326 + 13326 13321 13320 + 13322 13321 13326 + 13326 13327 13322 + 13322 13327 13328 + 13328 13323 13322 + 13329 13323 13328 + 13323 13329 13324 + 13325 13280 13330 + 13330 13331 13325 + 13326 13325 13331 + 13332 13326 13331 + 13327 13326 13332 + 13330 13280 13279 + 13279 13333 13330 + 13334 13330 13333 + 13334 13331 13330 + 13331 13334 13335 + 13335 13336 13331 + 13331 13336 13337 + 13337 13332 13331 + 13338 13333 13279 + 13338 13339 13333 + 13333 13339 13334 + 13334 13339 13340 + 13335 13334 13340 + 13341 13335 13340 + 13342 13335 13341 + 13335 13342 13336 + 13279 13343 13338 + 13343 13344 13338 + 13339 13338 13344 + 13344 13345 13339 + 13339 13345 13340 + 13279 13284 13343 + 13343 13284 13346 + 13346 13344 13343 + 13344 13346 13345 + 13345 13346 13347 + 13347 13340 13345 + 13347 13348 13340 + 13340 13348 13349 + 13349 13350 13340 + 13340 13350 13341 + 13347 13346 13284 + 13351 13347 13284 + 13348 13347 13351 + 13351 13352 13348 + 13348 13352 13349 + 13352 13353 13349 + 13354 13349 13353 + 13349 13354 13355 + 13355 13350 13349 + 13356 13351 13284 + 13357 13351 13356 + 13357 13352 13351 + 13352 13357 13358 + 13358 13353 13352 + 13359 13356 13284 + 13360 13356 13359 + 13361 13356 13360 + 13356 13361 13357 + 13362 13357 13361 + 13290 13359 13284 + 13363 13359 13290 + 13359 13363 13364 + 13364 13365 13359 + 13359 13365 13360 + 13290 13366 13363 + 13367 13363 13366 + 13290 13289 13366 + 13366 13289 13368 + 13368 13369 13366 + 13366 13369 13370 + 13370 13371 13366 + 13294 13368 13289 + 13372 13368 13294 + 13368 13372 13373 + 13373 13369 13368 + 13369 13373 13374 + 13374 13370 13369 + 13375 13370 13374 + 13370 13375 13376 + 13376 13377 13370 + 13294 13378 13372 + 13372 13378 13324 + 13379 13372 13324 + 13373 13372 13379 + 13379 13380 13373 + 13374 13373 13380 + 13378 13294 13299 + 13299 13381 13378 + 13378 13381 13319 + 13319 13324 13378 + 13381 13299 13303 + 13303 13302 13381 + 13319 13381 13302 + 13300 13382 13301 + 13324 13329 13379 + 13383 13379 13329 + 13380 13379 13383 + 13380 13383 13384 + 13384 13385 13380 + 13380 13385 13374 + 13386 13374 13385 + 13374 13386 13375 + 13329 13387 13383 + 13383 13387 13388 + 13388 13384 13383 + 13389 13384 13388 + 13384 13389 13390 + 13390 13385 13384 + 13385 13390 13386 + 13391 13386 13390 + 13375 13386 13391 + 13328 13387 13329 + 13387 13328 13392 + 13392 13388 13387 + 13393 13388 13392 + 13388 13393 13389 + 13394 13389 13393 + 13390 13389 13394 + 13394 13395 13390 + 13390 13395 13391 + 13392 13328 13327 + 13396 13392 13327 + 13397 13392 13396 + 13392 13397 13393 + 13393 13397 13398 + 13398 13399 13393 + 13393 13399 13394 + 13400 13394 13399 + 13395 13394 13400 + 13327 13401 13396 + 13402 13396 13401 + 13403 13396 13402 + 13396 13403 13397 + 13398 13397 13403 + 13403 13404 13398 + 13405 13398 13404 + 13405 13399 13398 + 13399 13405 13400 + 13332 13401 13327 + 13401 13332 13406 + 13406 13407 13401 + 13401 13407 13402 + 13402 13407 13408 + 13408 13409 13402 + 13410 13402 13409 + 13402 13410 13403 + 13406 13332 13337 + 13337 13411 13406 + 13406 13411 13412 + 13412 13413 13406 + 13407 13406 13413 + 13413 13408 13407 + 13414 13411 13337 + 13411 13414 13415 + 13415 13412 13411 + 13412 13415 13416 + 13416 13417 13412 + 13412 13417 13418 + 13418 13413 13412 + 13408 13413 13418 + 13337 13419 13414 + 13414 13419 13420 + 13420 13421 13414 + 13414 13421 13422 + 13422 13415 13414 + 13416 13415 13422 + 13419 13337 13336 + 13336 13342 13419 + 13420 13419 13342 + 13342 13423 13420 + 13424 13420 13423 + 13420 13424 13425 + 13425 13421 13420 + 13421 13425 13426 + 13426 13422 13421 + 13341 13423 13342 + 13427 13423 13341 + 13423 13427 13424 + 13428 13424 13427 + 13425 13424 13428 + 13428 13429 13425 + 13426 13425 13429 + 13429 13430 13426 + 13431 13426 13430 + 13422 13426 13431 + 13341 13432 13427 + 13427 13432 13433 + 13433 13434 13427 + 13427 13434 13428 + 13432 13341 13350 + 13350 13355 13432 + 13432 13355 13435 + 13435 13433 13432 + 13436 13433 13435 + 13433 13436 13437 + 13437 13434 13433 + 13434 13437 13438 + 13438 13439 13434 + 13434 13439 13428 + 13440 13435 13355 + 13440 13441 13435 + 13435 13441 13436 + 13442 13436 13441 + 13437 13436 13442 + 13442 13443 13437 + 13438 13437 13443 + 13355 13354 13440 + 13440 13354 13444 + 13445 13440 13444 + 13441 13440 13445 + 13445 13446 13441 + 13441 13446 13442 + 13446 13447 13442 + 13448 13442 13447 + 13442 13448 13443 + 13353 13444 13354 + 13449 13444 13353 + 13364 13363 13450 + 13450 13451 13364 + 13452 13364 13451 + 13365 13364 13452 + 13452 13453 13365 + 13360 13365 13453 + 13451 13454 13452 + 13455 13456 13457 + 13458 13455 13457 + 13459 13455 13458 + 13459 13460 13455 + 13455 13460 13461 + 13461 13462 13455 + 13463 13458 13457 + 13464 13458 13463 + 13465 13458 13464 + 13458 13465 13459 + 13466 13459 13465 + 13460 13459 13466 + 13457 13467 13463 + 13468 13463 13467 + 13463 13468 7297 + 7297 7303 13463 + 13463 7303 13464 + 13469 13467 13457 + 13470 13467 13469 + 13467 13470 13468 + 7298 13468 13470 + 7297 13468 7298 + 13457 13471 13469 + 13472 13469 13471 + 13473 13469 13472 + 13469 13473 13470 + 13470 13473 13474 + 13474 13475 13470 + 13470 13475 7298 + 13457 13476 13471 + 13471 13476 13477 + 13477 13478 13471 + 13471 13478 13472 + 13479 13472 13478 + 13480 13472 13479 + 13472 13480 13473 + 13474 13473 13480 + 13476 13457 13481 + 13481 13482 13476 + 13476 13482 13483 + 13483 13484 13476 + 13484 13485 13476 + 13485 13477 13476 + 13486 13477 13485 + 13478 13477 13486 + 13486 13487 13478 + 13478 13487 13479 + 13488 13483 13482 + 13489 13483 13488 + 13483 13489 13490 + 13490 13484 13483 + 13490 13491 13484 + 13484 13491 13492 + 13492 13485 13484 + 13482 13461 13488 + 13488 13461 13460 + 13460 13493 13488 + 13489 13488 13493 + 13461 13482 13494 + 13466 13493 13460 + 13466 13495 13493 + 13493 13495 13489 + 13489 13495 13496 + 13496 13497 13489 + 13497 13498 13489 + 13498 13490 13489 + 13491 13490 13498 + 13495 13466 13499 + 13499 13496 13495 + 13500 13496 13499 + 13496 13500 13501 + 13501 13497 13496 + 13502 13497 13501 + 13497 13502 13503 + 13503 13498 13497 + 13499 13466 13465 + 13504 13499 13465 + 13500 13499 13504 + 13504 13505 13500 + 13501 13500 13505 + 13505 13506 13501 + 13465 13507 13504 + 13508 13504 13507 + 13505 13504 13508 + 13508 13509 13505 + 13505 13509 13510 + 13510 13511 13505 + 13512 13507 13465 + 13513 13507 13512 + 13507 13513 13508 + 13508 13513 7312 + 7323 13508 7312 + 13509 13508 7323 + 13465 13464 13512 + 7308 13512 13464 + 13513 13512 7308 + 7308 7312 13513 + 13464 7303 7308 + 13514 13515 13516 + 13517 13514 13516 + 13518 13514 13517 + 13519 13514 13518 + 13514 13519 13520 + 13520 13521 13514 + 13516 13522 13517 + 13522 13523 13517 + 13524 13517 13523 + 13517 13524 13525 + 13517 13525 13518 + 13526 13522 13516 + 13526 13527 13522 + 13522 13527 13528 + 13528 13523 13522 + 13523 13528 13529 + 13523 13529 13524 + 13530 13524 13529 + 13525 13524 13530 + 13516 13531 13526 + 13532 13526 13531 + 13527 13526 13532 + 13532 13533 13527 + 13528 13527 13533 + 13533 13534 13528 + 13534 13535 13528 + 13529 13528 13535 + 13536 13531 13516 + 13531 13536 13537 + 13537 13538 13531 + 13531 13538 13539 + 13539 13532 13531 + 13536 13516 13521 + 13521 13540 13536 + 13536 13540 13541 + 13541 13542 13536 + 13542 13537 13536 + 13543 13537 13542 + 13543 13538 13537 + 13538 13543 13544 + 13544 13539 13538 + 13540 13521 13520 + 13540 13520 13545 + 13545 13541 13540 + 13541 13545 13546 + 13546 13547 13541 + 13541 13547 13548 + 13548 13542 13541 + 13549 13542 13548 + 13542 13549 13543 + 13544 13543 13549 + 13545 13520 13519 + 13550 13545 13519 + 13546 13545 13550 + 13550 13551 13546 + 13546 13551 13552 + 13552 13553 13546 + 13547 13546 13553 + 13553 13554 13547 + 13548 13547 13554 + 13519 13555 13550 + 13556 13550 13555 + 13550 13556 13557 + 13557 13551 13550 + 13551 13557 13558 + 13558 13552 13551 + 13559 13555 13519 + 13560 13555 13559 + 13555 13560 13556 + 13561 13556 13560 + 13557 13556 13561 + 13561 13562 13557 + 13557 13562 13563 + 13563 13558 13557 + 13519 13518 13559 + 13559 13518 13564 + 13564 13565 13559 + 13566 13559 13565 + 13559 13566 13560 + 13560 13566 13567 + 13567 13568 13560 + 13560 13568 13561 + 13518 13525 13564 + 13530 13564 13525 + 13564 13530 13569 + 13564 13569 13570 + 13570 13565 13564 + 13571 13565 13570 + 13565 13571 13566 + 13567 13566 13571 + 13569 13530 13572 + 13572 13573 13569 + 13569 13573 13574 + 13574 13570 13569 + 13575 13570 13574 + 13570 13575 13571 + 13576 13572 13530 + 13577 13572 13576 + 13573 13572 13577 + 13577 13578 13573 + 13573 13578 13579 + 13579 13574 13573 + 13580 13574 13579 + 13574 13580 13575 + 13529 13576 13530 + 13535 13576 13529 + 13576 13535 13581 + 13581 13582 13576 + 13576 13582 13577 + 13577 13582 13583 + 13583 13584 13577 + 13578 13577 13584 + 13584 13585 13578 + 13579 13578 13585 + 13581 13535 13534 + 13534 13586 13581 + 13581 13586 13587 + 13587 13588 13581 + 13582 13581 13588 + 13588 13583 13582 + 13589 13586 13534 + 13586 13589 13590 + 13590 13587 13586 + 13587 13590 13591 + 13591 13592 13587 + 13587 13592 13593 + 13593 13588 13587 + 13583 13588 13593 + 13534 13594 13589 + 13589 13594 13595 + 13595 13596 13589 + 13589 13596 13597 + 13597 13590 13589 + 13591 13590 13597 + 13594 13534 13533 + 13533 13598 13594 + 13594 13598 13599 + 13599 13595 13594 + 13600 13595 13599 + 13595 13600 13601 + 13601 13596 13595 + 13596 13601 13602 + 13602 13597 13596 + 13598 13533 13532 + 13532 13603 13598 + 13598 13603 13604 + 13604 13599 13598 + 13599 13604 13605 + 13605 13606 13599 + 13599 13606 13600 + 13607 13600 13606 + 13601 13600 13607 + 13603 13532 13539 + 13539 13608 13603 + 13604 13603 13608 + 13608 13609 13604 + 13609 13610 13604 + 13605 13604 13610 + 13608 13539 13544 + 13544 13611 13608 + 13608 13611 13612 + 13612 13609 13608 + 13613 13609 13612 + 13609 13613 13614 + 13614 13610 13609 + 13611 13544 13615 + 13615 13616 13611 + 13612 13611 13616 + 13616 13617 13612 + 216 13612 13617 + 13612 216 13613 + 13549 13615 13544 + 13618 13615 13549 + 13616 13615 13618 + 13618 13619 13616 + 13616 13619 13620 + 13620 13617 13616 + 13621 13617 13620 + 13617 13621 216 + 216 13621 13622 + 13549 13623 13618 + 13618 13623 13624 + 13624 13625 13618 + 13619 13618 13625 + 13625 13626 13619 + 13620 13619 13626 + 13548 13623 13549 + 13623 13548 13627 + 13627 13624 13623 + 13624 13627 13628 + 13628 13629 13624 + 13624 13629 13630 + 13630 13625 13624 + 13626 13625 13630 + 13554 13627 13548 + 13628 13627 13554 + 13554 13631 13628 + 13628 13631 13632 + 13632 13633 13628 + 13629 13628 13633 + 13633 13634 13629 + 13630 13629 13634 + 13635 13631 13554 + 13631 13635 13636 + 13636 13632 13631 + 13632 13636 13637 + 13637 13638 13632 + 13632 13638 13639 + 13639 13633 13632 + 13634 13633 13639 + 13554 13553 13635 + 13635 13553 13552 + 13552 13640 13635 + 13635 13640 13641 + 13641 13636 13635 + 13637 13636 13641 + 13641 13642 13637 + 13637 13642 13643 + 13643 13644 13637 + 13638 13637 13644 + 13645 13640 13552 + 13640 13645 13646 + 13646 13641 13640 + 13641 13646 13647 + 13647 13642 13641 + 13642 13647 13648 + 13648 13643 13642 + 13552 13558 13645 + 13645 13558 13563 + 13563 13649 13645 + 13645 13649 13650 + 13650 13646 13645 + 13647 13646 13650 + 13650 13651 13647 + 13647 13651 13652 + 13652 13648 13647 + 13653 13648 13652 + 13643 13648 13653 + 13654 13649 13563 + 13649 13654 13655 + 13655 13650 13649 + 13650 13655 13656 + 13656 13651 13650 + 13651 13656 13657 + 13657 13652 13651 + 13563 13658 13654 + 13654 13658 13659 + 13659 13660 13654 + 13660 13655 13654 + 13656 13655 13660 + 13660 13661 13656 + 13657 13656 13661 + 13658 13563 13562 + 13562 13662 13658 + 13659 13658 13662 + 13662 13663 13659 + 7284 13659 13663 + 13659 7284 13661 + 13661 13660 13659 + 13662 13562 13561 + 13561 13664 13662 + 13662 13664 13665 + 13665 13663 13662 + 13664 13561 13568 + 13568 13666 13664 + 13665 13664 13666 + 13667 13665 13666 + 13666 13568 13567 + 13567 13668 13666 + 13666 13668 13667 + 13667 13668 13669 + 13669 7276 13667 + 13670 13667 7276 + 13667 13670 13663 + 13663 13670 7284 + 13668 13567 13671 + 13671 13669 13668 + 13669 13671 13672 + 13672 13673 13669 + 13669 13673 7277 + 7277 7276 13669 + 13571 13671 13567 + 13672 13671 13571 + 13571 13575 13672 + 13672 13575 13580 + 13580 13674 13672 + 13673 13672 13674 + 13674 7278 13673 + 7277 13673 7278 + 7272 13674 13580 + 7278 13674 7272 + 13580 7273 7272 + 13579 7273 13580 + 7273 13579 7274 + 13585 7274 13579 + 7266 7274 13585 + 13585 13675 7266 + 7266 13675 7261 + 13676 7261 13675 + 7261 13676 13677 + 13677 7262 7261 + 13678 13675 13585 + 13675 13678 13676 + 13679 13676 13678 + 13677 13676 13679 + 13679 13680 13677 + 13677 13680 13681 + 13681 13682 13677 + 7262 13677 13682 + 13682 7252 7262 + 13585 13584 13678 + 13678 13584 13583 + 13583 13683 13678 + 13678 13683 13679 + 13684 13679 13683 + 13679 13684 13685 + 13685 13680 13679 + 13680 13685 13686 + 13686 13681 13680 + 13593 13683 13583 + 13683 13593 13684 + 13687 13684 13593 + 13685 13684 13687 + 13687 13688 13685 + 13685 13688 13689 + 13689 13686 13685 + 13690 13686 13689 + 13681 13686 13690 + 13593 13592 13687 + 13691 13687 13592 + 13687 13691 13692 + 13692 13688 13687 + 13688 13692 13693 + 13693 13689 13688 + 13689 13693 13694 + 13694 13695 13689 + 13689 13695 13690 + 13592 13591 13691 + 13691 13591 13696 + 13696 13697 13691 + 13692 13691 13697 + 13697 13698 13692 + 13692 13698 13699 + 13699 13693 13692 + 13694 13693 13699 + 13597 13696 13591 + 13597 13602 13696 + 13696 13602 13700 + 13700 13697 13696 + 13697 13700 13698 + 13698 13700 13701 + 13701 13699 13698 + 13699 13701 13702 + 13702 13703 13699 + 13699 13703 13694 + 13701 13700 13602 + 13704 13701 13602 + 13702 13701 13704 + 13704 13705 13702 + 13706 13702 13705 + 13703 13702 13706 + 13706 13707 13703 + 13694 13703 13707 + 13707 13708 13694 + 13695 13694 13708 + 13709 13704 13602 + 13710 13704 13709 + 13705 13704 13710 + 13710 13711 13705 + 13705 13711 13712 + 13712 13713 13705 + 13705 13713 13706 + 13602 13601 13709 + 13607 13709 13601 + 13709 13607 13714 + 13714 13715 13709 + 13709 13715 13710 + 13710 13715 13716 + 13717 13710 13716 + 13711 13710 13717 + 13717 13718 13711 + 13712 13711 13718 + 13714 13607 13719 + 13719 13720 13714 + 13714 13720 13721 + 13721 13722 13714 + 13715 13714 13722 + 13722 13716 13715 + 13719 13607 13606 + 13606 13723 13719 + 13724 13719 13723 + 13720 13719 13724 + 13720 13724 13725 + 13725 13721 13720 + 13721 13725 13726 + 13721 13726 13727 + 13727 13722 13721 + 13716 13722 13727 + 13728 13723 13606 + 13723 13728 13729 + 13729 13730 13723 + 13723 13730 13724 + 13724 13730 13731 + 13731 13725 13724 + 13726 13725 13731 + 13731 13732 13726 + 13727 13726 13732 + 13606 13605 13728 + 13733 13728 13605 + 13729 13728 13733 + 13733 13734 13729 + 13729 13734 13400 + 13735 13729 13400 + 13730 13729 13735 + 13735 13736 13730 + 13730 13736 13731 + 13605 13737 13733 + 13738 13733 13737 + 13733 13738 13739 + 13739 13734 13733 + 13734 13739 13740 + 13740 13400 13734 + 13400 13740 13395 + 13610 13737 13605 + 13741 13737 13610 + 13737 13741 13738 + 13742 13738 13741 + 13739 13738 13742 + 13742 13743 13739 + 13739 13743 13744 + 13744 13740 13739 + 13395 13740 13744 + 13744 13391 13395 + 13610 13614 13741 + 13741 13614 13745 + 13745 13746 13741 + 13741 13746 13742 + 13747 13742 13746 + 13742 13747 13748 + 13748 13743 13742 + 13743 13748 13749 + 13749 13744 13743 + 13750 13745 13614 + 222 13745 13750 + 13745 222 13751 + 13751 13746 13745 + 13746 13751 13747 + 13752 13747 13751 + 13748 13747 13752 + 13752 13753 13748 + 13753 13749 13748 + 13614 13613 13750 + 13754 13750 13613 + 13750 13754 13755 + 13750 13755 222 + 222 13755 13756 + 13613 216 13754 + 13755 13754 13757 + 13757 13758 13755 + 13759 13758 13757 + 13758 13759 13760 + 13760 13761 13758 + 13751 222 13762 + 13762 13763 13751 + 13751 13763 13752 + 13764 13752 13763 + 13752 13764 13753 + 13753 13764 13765 + 13765 13749 13753 + 13744 13749 13765 + 13765 13391 13744 + 13391 13765 13375 + 13763 13762 13766 + 13766 13767 13763 + 13763 13767 13764 + 13764 13767 13376 + 13376 13375 13764 + 13375 13765 13764 + 13766 13762 13768 + 13768 13769 13766 + 13770 13766 13769 + 13767 13766 13770 + 13770 13376 13767 + 13771 13376 13770 + 13768 13772 13769 + 13769 13772 13773 + 13773 13774 13769 + 13769 13774 13770 + 13451 13770 13774 + 13770 13451 13775 + 13772 13768 13761 + 13761 13776 13772 + 13772 13776 13777 + 13777 13778 13772 + 13778 13779 13772 + 13779 13780 13772 + 13780 13773 13772 + 13776 13761 13781 + 13774 13782 13451 + 13773 13782 13774 + 13782 13773 13780 + 13780 13452 13782 + 13780 13453 13452 + 13453 13780 13779 + 13779 13783 13453 + 13453 13783 13784 + 13784 13360 13453 + 13785 13360 13784 + 13360 13785 13361 + 13786 13783 13779 + 13783 13786 13787 + 13787 13784 13783 + 13788 13784 13787 + 13784 13788 13785 + 13789 13785 13788 + 13361 13785 13789 + 13789 13790 13361 + 13361 13790 13791 + 13786 13779 13778 + 13778 13792 13786 + 13786 13792 13793 + 13787 13786 13793 + 13793 13794 13787 + 13795 13787 13794 + 13787 13795 13788 + 13796 13792 13778 + 13792 13796 13797 + 13797 13798 13792 + 13792 13798 13793 + 13796 13778 13777 + 13777 13799 13796 + 13799 13797 13796 + 13800 13797 13799 + 13800 13798 13797 + 13798 13800 13801 + 13801 13793 13798 + 13799 13777 13802 + 13802 13803 13799 + 13799 13803 13800 + 13801 13800 13803 + 13803 13804 13801 + 13805 13801 13804 + 13793 13801 13805 + 13802 13777 13776 + 13776 13806 13802 + 13807 13802 13806 + 13803 13802 13807 + 13807 13804 13803 + 13808 13804 13807 + 13804 13808 13805 + 13809 13805 13808 + 13810 13805 13809 + 13805 13810 13793 + 13811 13806 13776 + 7252 13682 7253 + 7253 13682 13681 + 13681 13812 7253 + 7253 13812 13813 + 13813 7247 7253 + 7248 7247 13813 + 13690 13812 13681 + 13812 13690 13814 + 13814 13813 13812 + 13813 13814 13815 + 13815 13816 13813 + 13813 13816 7248 + 7248 13816 13817 + 13817 7242 7248 + 7243 7242 13817 + 13818 13814 13690 + 13815 13814 13818 + 13818 13819 13815 + 13815 13819 13820 + 13820 13821 13815 + 13816 13815 13821 + 13821 13817 13816 + 13690 13695 13818 + 13708 13818 13695 + 13818 13708 13822 + 13822 13819 13818 + 13819 13822 13823 + 13823 13820 13819 + 13820 13823 13824 + 13824 13825 13820 + 13820 13825 13826 + 13826 13821 13820 + 13817 13821 13826 + 13822 13708 13707 + 13707 13827 13822 + 13822 13827 13828 + 13828 13823 13822 + 13824 13823 13828 + 13828 13829 13824 + 13824 13829 13830 + 13830 13831 13824 + 13825 13824 13831 + 13832 13827 13707 + 13827 13832 13833 + 13833 13828 13827 + 13828 13833 13834 + 13834 13829 13828 + 13829 13834 13835 + 13835 13830 13829 + 13707 13706 13832 + 13832 13706 13713 + 13713 13836 13832 + 13833 13832 13836 + 13836 13837 13833 + 13834 13833 13837 + 13837 13838 13834 + 13834 13838 13839 + 13839 13835 13834 + 13840 13835 13839 + 13830 13835 13840 + 13836 13713 13712 + 13712 13841 13836 + 13836 13841 13842 + 13842 13837 13836 + 13838 13837 13842 + 13842 13843 13838 + 13838 13843 13844 + 13844 13839 13838 + 13845 13839 13844 + 13839 13845 13840 + 13841 13712 13846 + 13846 13847 13841 + 13842 13841 13847 + 13848 13842 13847 + 13843 13842 13848 + 13848 13849 13843 + 13843 13849 13850 + 13850 13844 13843 + 13718 13846 13712 + 13851 13846 13718 + 13847 13846 13851 + 13851 13852 13847 + 13847 13852 13853 + 13853 13854 13847 + 13847 13854 13848 + 13855 13848 13854 + 13849 13848 13855 + 13718 13856 13851 + 13857 13851 13856 + 13852 13851 13857 + 13857 13858 13852 + 13852 13858 13859 + 13859 13853 13852 + 13860 13853 13859 + 13854 13853 13860 + 13854 13860 13855 + 13861 13856 13718 + 13856 13861 13862 + 13862 13863 13856 + 13856 13863 13857 + 13864 13857 13863 + 13857 13864 13865 + 13865 13858 13857 + 13718 13717 13861 + 13861 13717 13866 + 13866 13867 13861 + 13862 13861 13867 + 13867 13868 13862 + 13869 13862 13868 + 13862 13869 13870 + 13870 13863 13862 + 13863 13870 13864 + 13716 13866 13717 + 13871 13866 13716 + 13866 13871 13867 + 13867 13871 13872 + 13872 13868 13867 + 13873 13868 13872 + 13868 13873 13869 + 13874 13869 13873 + 13870 13869 13874 + 13716 13875 13871 + 13872 13871 13875 + 13875 13876 13872 + 13877 13872 13876 + 13872 13877 13873 + 13873 13877 13878 + 13878 13879 13873 + 13873 13879 13874 + 13727 13875 13716 + 13875 13727 13880 + 13880 13876 13875 + 13881 13876 13880 + 13876 13881 13877 + 13878 13877 13881 + 13881 13882 13878 + 13883 13878 13882 + 13878 13883 13884 + 13884 13879 13878 + 13880 13727 13732 + 13732 13885 13880 + 13886 13880 13885 + 13880 13886 13881 + 13881 13886 13887 + 13887 13882 13881 + 13888 13882 13887 + 13882 13888 13883 + 13889 13883 13888 + 13884 13883 13889 + 13890 13885 13732 + 13891 13885 13890 + 13885 13891 13886 + 13887 13886 13891 + 13891 13892 13887 + 13893 13887 13892 + 13887 13893 13888 + 13732 13894 13890 + 13895 13890 13894 + 13896 13890 13895 + 13890 13896 13891 + 13891 13896 13897 + 13897 13892 13891 + 13898 13892 13897 + 13892 13898 13893 + 13732 13731 13894 + 13894 13731 13899 + 13899 13900 13894 + 13894 13900 13895 + 13901 13895 13900 + 13902 13895 13901 + 13895 13902 13896 + 13897 13896 13902 + 13736 13899 13731 + 13903 13899 13736 + 13900 13899 13903 + 13900 13903 13901 + 13901 13903 13904 + 13904 13905 13901 + 13906 13901 13905 + 13901 13906 13902 + 13736 13904 13903 + 13907 13904 13736 + 13904 13907 13908 + 13908 13905 13904 + 13909 13905 13908 + 13905 13909 13906 + 13910 13906 13909 + 13902 13906 13910 + 13910 13911 13902 + 13902 13911 13897 + 13736 13735 13907 + 13907 13735 13912 + 13912 13913 13907 + 13908 13907 13913 + 13913 13410 13908 + 13409 13908 13410 + 13908 13409 13909 + 13912 13735 13400 + 13400 13405 13912 + 13404 13912 13405 + 13912 13404 13913 + 13913 13404 13403 + 13403 13410 13913 + 13909 13409 13408 + 13408 13914 13909 + 13909 13914 13910 + 13915 13910 13914 + 13910 13915 13916 + 13916 13911 13910 + 13911 13916 13917 + 13917 13897 13911 + 13897 13917 13898 + 13418 13914 13408 + 13914 13418 13915 + 13918 13915 13418 + 13916 13915 13918 + 13918 13919 13916 + 13916 13919 13920 + 13920 13917 13916 + 13898 13917 13920 + 13920 13921 13898 + 13898 13921 13922 + 13922 13893 13898 + 13418 13417 13918 + 13923 13918 13417 + 13918 13923 13924 + 13924 13919 13918 + 13919 13924 13925 + 13925 13920 13919 + 13920 13925 13926 + 13926 13921 13920 + 13921 13926 13927 + 13927 13922 13921 + 13417 13416 13923 + 13928 13923 13416 + 13924 13923 13928 + 13928 13929 13924 + 13924 13929 13930 + 13930 13925 13924 + 13926 13925 13930 + 13930 13931 13926 + 13926 13931 13932 + 13932 13927 13926 + 13416 13933 13928 + 13934 13928 13933 + 13928 13934 13935 + 13935 13929 13928 + 13929 13935 13936 + 13936 13930 13929 + 13930 13936 13937 + 13937 13931 13930 + 13422 13933 13416 + 13431 13933 13422 + 13933 13431 13934 + 13934 13431 13938 + 13938 13939 13934 + 13935 13934 13939 + 13939 13940 13935 + 13935 13940 13941 + 13941 13936 13935 + 13937 13936 13941 + 13430 13938 13431 + 13942 13938 13430 + 13938 13942 13943 + 13943 13939 13938 + 13939 13943 13944 + 13944 13940 13939 + 13940 13944 13945 + 13945 13941 13940 + 13946 13941 13945 + 13941 13946 13937 + 13430 13947 13942 + 13942 13947 13948 + 13948 13949 13942 + 13943 13942 13949 + 13949 13950 13943 + 13944 13943 13950 + 13950 13951 13944 + 13945 13944 13951 + 13947 13430 13429 + 13429 13952 13947 + 13947 13952 13953 + 13953 13948 13947 + 13954 13948 13953 + 13949 13948 13954 + 13954 13955 13949 + 13949 13955 13956 + 13956 13950 13949 + 13951 13950 13956 + 13952 13429 13428 + 13428 13957 13952 + 13952 13957 13958 + 13958 13953 13952 + 13953 13958 13959 + 13959 13960 13953 + 13953 13960 13954 + 13961 13954 13960 + 13955 13954 13961 + 13957 13428 13439 + 13439 13962 13957 + 13958 13957 13962 + 13962 13963 13958 + 13959 13958 13963 + 13962 13439 13438 + 13962 13438 13964 + 13964 13963 13962 + 13963 13964 13965 + 13965 13966 13963 + 13963 13966 13959 + 13443 13964 13438 + 13965 13964 13443 + 13443 13448 13965 + 13967 13965 13448 + 13966 13965 13967 + 13967 13968 13966 + 13959 13966 13968 + 13968 13969 13959 + 13969 13970 13959 + 13960 13959 13970 + 13971 13967 13448 + 13972 13967 13971 + 13968 13967 13972 + 13968 13972 13973 + 13973 13969 13968 + 13969 13973 13974 + 13969 13974 13975 + 13975 13970 13969 + 13976 13971 13448 + 13977 13971 13976 + 13971 13977 13978 + 13971 13978 13972 + 13973 13972 13978 + 13978 13979 13973 + 13979 13980 13973 + 13974 13973 13980 + 13981 13976 13448 + 13982 13976 13981 + 13976 13982 13983 + 13983 13984 13976 + 13976 13984 13977 + 13448 13985 13981 + 13986 13981 13985 + 13987 13981 13986 + 13981 13987 13982 + 13988 13982 13987 + 13983 13982 13988 + 13447 13985 13448 + 13989 13985 13447 + 13985 13989 13986 + 13990 13986 13989 + 13987 13986 13990 + 13990 13991 13987 + 13987 13991 13988 + 13989 13447 13446 + 13446 13992 13989 + 13989 13992 13990 + 13993 13990 13992 + 13991 13990 13993 + 13991 13993 13994 + 13994 13988 13991 + 13988 13994 13995 + 13995 13996 13988 + 13988 13996 13983 + 13992 13446 13445 + 13445 13997 13992 + 13992 13997 13993 + 13993 13997 13998 + 13998 13999 13993 + 13999 13994 13993 + 13995 13994 13999 + 13997 13445 14000 + 14000 13998 13997 + 13998 14000 14001 + 13998 14001 13790 + 13790 13999 13998 + 13999 13790 13789 + 13789 14002 13999 + 13999 14002 13995 + 13444 14000 13445 + 14001 14000 13444 + 13444 13358 14001 + 13790 14001 13358 + 13888 13893 13922 + 13922 14003 13888 + 13888 14003 13889 + 14004 13889 14003 + 13889 14004 14005 + 14005 14006 13889 + 13889 14006 13884 + 14007 14003 13922 + 14003 14007 14004 + 14008 14004 14007 + 14005 14004 14008 + 14008 14009 14005 + 14010 14005 14009 + 14006 14005 14010 + 14010 14011 14006 + 13884 14006 14011 + 13922 13927 14007 + 14007 13927 13932 + 13932 14008 14007 + 14008 13932 14012 + 14009 14008 14012 + 14009 14012 14013 + 14013 14014 14009 + 14009 14014 14010 + 14015 14010 14014 + 14011 14010 14015 + 14012 13932 14016 + 14016 14017 14012 + 14012 14017 14018 + 14018 14019 14012 + 14019 14013 14012 + 14020 14013 14019 + 14014 14013 14020 + 14021 14016 13932 + 14022 14016 14021 + 14017 14016 14022 + 14017 14022 14023 + 14023 14018 14017 + 14024 14018 14023 + 14018 14024 14025 + 14025 14019 14018 + 13931 14021 13932 + 14026 14021 13931 + 14026 14027 14021 + 14021 14027 14022 + 14022 14027 14028 + 14028 14023 14022 + 14029 14023 14028 + 14023 14029 14024 + 13931 13937 14026 + 14026 13937 13946 + 13946 14030 14026 + 14027 14026 14030 + 14030 14028 14027 + 14031 14028 14030 + 14028 14031 14029 + 14029 14031 14032 + 14032 14033 14029 + 14024 14029 14033 + 14033 14034 14024 + 14025 14024 14034 + 14035 14030 13946 + 14030 14035 14031 + 14031 14035 14036 + 14036 14032 14031 + 14032 14036 14037 + 14037 14038 14032 + 14032 14038 14039 + 14039 14033 14032 + 14033 14039 14034 + 13946 14040 14035 + 14035 14040 14041 + 14036 14035 14041 + 14041 14042 14036 + 14037 14036 14042 + 14042 14043 14037 + 14044 14037 14043 + 14038 14037 14044 + 13945 14040 13946 + 14040 13945 14045 + 14045 14041 14040 + 14041 14045 14046 + 14046 14047 14041 + 14041 14047 14048 + 14048 14042 14041 + 14042 14048 14043 + 14045 13945 13951 + 13951 14049 14045 + 14046 14045 14049 + 14049 14050 14046 + 14051 14046 14050 + 14047 14046 14051 + 14051 14052 14047 + 14047 14052 14053 + 14053 14048 14047 + 14043 14048 14053 + 14054 14049 13951 + 14049 14054 14050 + 14050 14054 14055 + 14055 14056 14050 + 14050 14056 14051 + 14057 14051 14056 + 14052 14051 14057 + 13951 14058 14054 + 14055 14054 14058 + 14058 14059 14055 + 14060 14055 14059 + 14056 14055 14060 + 14060 14061 14056 + 14056 14061 14057 + 13956 14058 13951 + 14058 13956 14062 + 14062 14059 14058 + 14063 14059 14062 + 14059 14063 14060 + 14060 14063 14064 + 14064 14065 14060 + 14061 14060 14065 + 14065 14066 14061 + 14057 14061 14066 + 14062 13956 13955 + 13955 14067 14062 + 14068 14062 14067 + 14062 14068 14063 + 14063 14068 14069 + 14069 14064 14063 + 13961 14067 13955 + 14070 14067 13961 + 14067 14070 14068 + 14068 14070 14071 + 14071 14069 14068 + 14072 14069 14071 + 14064 14069 14072 + 14072 14073 14064 + 14064 14073 14074 + 14074 14065 14064 + 14066 14065 14074 + 13961 14075 14070 + 14070 14075 14076 + 14076 14071 14070 + 14071 14076 14077 + 14077 14078 14071 + 14071 14078 14072 + 14079 14072 14078 + 14073 14072 14079 + 14075 13961 14080 + 14080 14081 14075 + 14075 14081 14082 + 14076 14075 14082 + 14083 14076 14082 + 14077 14076 14083 + 14080 13961 13960 + 14084 14080 13960 + 14085 14080 14084 + 14081 14080 14085 + 14081 14085 14086 + 14086 14082 14081 + 13960 14087 14084 + 14088 14084 14087 + 14089 14084 14088 + 14084 14089 14085 + 14086 14085 14089 + 13970 14087 13960 + 14087 13970 13975 + 13975 14090 14087 + 14087 14090 14088 + 14088 14090 14091 + 14091 14092 14088 + 14089 14088 14092 + 14092 14093 14089 + 14089 14093 14086 + 14090 13975 14094 + 14094 14095 14090 + 14090 14095 14091 + 14096 14094 13975 + 14097 14094 14096 + 14094 14097 14098 + 14098 14095 14094 + 14095 14098 14099 + 14099 14100 14095 + 14095 14100 14091 + 13975 13974 14096 + 13974 14101 14096 + 14101 14102 14096 + 14103 14096 14102 + 14104 14096 14103 + 14096 14104 14097 + 13980 14101 13974 + 14101 13980 14105 + 14101 14105 14106 + 14106 14102 14101 + 14107 14102 14106 + 14102 14107 14103 + 14108 14103 14107 + 14109 14103 14108 + 14103 14109 14104 + 14105 13980 13979 + 13979 14110 14105 + 14105 14110 14111 + 14106 14105 14111 + 14111 14112 14106 + 14113 14106 14112 + 14106 14113 14107 + 14114 14110 13979 + 14110 14114 14115 + 14115 14116 14110 + 14110 14116 14111 + 14114 13979 13978 + 13978 13977 14114 + 14115 14114 13977 + 13977 13984 14115 + 14117 14115 13984 + 14116 14115 14117 + 14117 14118 14116 + 14116 14118 14119 + 14119 14111 14116 + 13984 13983 14117 + 14117 13983 13996 + 13996 14120 14117 + 14118 14117 14120 + 14120 14121 14118 + 14119 14118 14121 + 14121 14122 14119 + 14123 14119 14122 + 14111 14119 14123 + 14124 14120 13996 + 14124 14121 14120 + 14121 14124 14125 + 14125 14122 14121 + 14126 14122 14125 + 14122 14126 14123 + 13996 13995 14124 + 14125 14124 13995 + 14127 14125 13995 + 14126 14125 14127 + 14127 14128 14126 + 14123 14126 14128 + 14128 14129 14123 + 14130 14123 14129 + 14123 14130 14111 + 14131 14127 13995 + 14132 14127 14131 + 14128 14127 14132 + 14132 14133 14128 + 14128 14133 14134 + 14134 14129 14128 + 13995 14002 14131 + 14135 14131 14002 + 14131 14135 14136 + 14136 14137 14131 + 14131 14137 14132 + 14132 14137 14138 + 14138 14139 14132 + 14133 14132 14139 + 14002 13789 14135 + 13788 14135 13789 + 14136 14135 13788 + 13788 13795 14136 + 14136 13795 14140 + 14140 14141 14136 + 14137 14136 14141 + 14141 14138 14137 + 14138 14141 14142 + 14142 14143 14138 + 14138 14143 14144 + 14144 14139 14138 + 13794 14140 13795 + 14140 13794 14145 + 14145 14146 14140 + 14140 14146 14142 + 14142 14141 14140 + 14145 13794 13793 + 13793 13810 14145 + 14145 13810 14147 + 14147 14148 14145 + 14146 14145 14148 + 14148 14149 14146 + 14142 14146 14149 + 14149 14150 14142 + 14143 14142 14150 + 14150 14151 14143 + 14144 14143 14151 + 13809 14147 13810 + 14152 14147 13809 + 14147 14152 14153 + 14153 14148 14147 + 14149 14148 14153 + 14153 14154 14149 + 14149 14154 14155 + 14155 14150 14149 + 14151 14150 14155 + 13809 14156 14152 + 14152 14156 14157 + 14157 14158 14152 + 14153 14152 14158 + 14158 14159 14153 + 14154 14153 14159 + 14159 14160 14154 + 14155 14154 14160 + 14156 13809 14161 + 14161 14162 14156 + 14157 14156 14162 + 14162 14163 14157 + 14164 14157 14163 + 14157 14164 14165 + 14165 14158 14157 + 13808 14161 13809 + 14166 14161 13808 + 14161 14166 14167 + 14167 14162 14161 + 14162 14167 14168 + 14168 14163 14162 + 14163 14168 14169 + 14169 14170 14163 + 14163 14170 14164 + 13808 13807 14166 + 14166 13807 13806 + 14171 14166 13806 + 14167 14166 14171 + 14171 14172 14167 + 14172 14168 14167 + 14169 14168 14172 + 14172 14173 14169 + 14174 14169 14173 + 14170 14169 14174 + 13806 14175 14171 + 14173 14171 14175 + 14172 14171 14173 + 14176 14175 13806 + 14175 14176 14177 + 14177 14178 14175 + 14175 14178 14173 + 14173 14178 14179 + 14179 14180 14173 + 14180 14174 14173 + 13806 14181 14176 + 14182 14176 14181 + 14177 14176 14182 + 14182 14183 14177 + 7276 7275 13670 + 14184 13670 7275 + 13661 7284 14185 + 14185 14186 13661 + 13661 14186 13657 + 14187 13657 14186 + 13652 13657 14187 + 14187 14188 13652 + 13652 14188 13653 + 14186 14185 14189 + 14189 14190 14186 + 14186 14190 14187 + 14190 14191 14187 + 14188 14187 14191 + 14191 14192 14188 + 13653 14188 14192 + 14189 14185 7283 + 7283 14193 14189 + 14189 14193 14194 + 14190 14189 14194 + 14194 14191 14190 + 14192 14191 14194 + 14194 14195 14192 + 14192 14195 14196 + 14196 14197 14192 + 14192 14197 13653 + 7289 14193 7283 + 14193 7289 14195 + 14195 14194 14193 + 14196 14195 7289 + 7289 14198 14196 + 13475 14196 14198 + 14196 13475 13474 + 13474 14197 14196 + 14197 13474 14199 + 14199 13653 14197 + 13653 14199 13643 + 7288 14198 7289 + 7298 14198 7288 + 14198 7298 13475 + 13480 14199 13474 + 13643 14199 13480 + 13480 13644 13643 + 13479 13644 13480 + 13644 13479 13638 + 13639 13638 13479 + 13479 13487 13639 + 14200 13639 13487 + 13639 14200 13634 + 13634 14200 14201 + 14201 14202 13634 + 13634 14202 13630 + 13487 13486 14200 + 14201 14200 13486 + 13486 14203 14201 + 14204 14201 14203 + 14201 14204 14205 + 14205 14202 14201 + 14202 14205 14206 + 14206 13630 14202 + 13630 14206 13626 + 13485 14203 13486 + 14207 14203 13485 + 14203 14207 14204 + 14208 14204 14207 + 14205 14204 14208 + 14208 14209 14205 + 14205 14209 14210 + 14210 14206 14205 + 13626 14206 14210 + 14210 14211 13626 + 13626 14211 13620 + 13485 13492 14207 + 14207 13492 14212 + 14212 14213 14207 + 14207 14213 14208 + 14214 14208 14213 + 14208 14214 14215 + 14215 14209 14208 + 14209 14215 14216 + 14216 14210 14209 + 14212 13492 13491 + 13491 14217 14212 + 14218 14212 14217 + 14212 14218 14219 + 14219 14213 14212 + 14213 14219 14214 + 14220 14214 14219 + 14215 14214 14220 + 13498 14217 13491 + 14221 14217 13498 + 14217 14221 14218 + 14222 14218 14221 + 14219 14218 14222 + 14222 14223 14219 + 14219 14223 14220 + 14224 14220 14223 + 14223 14225 14224 + 13498 13503 14221 + 14221 13503 14226 + 14226 14227 14221 + 14221 14227 14222 + 14228 14222 14227 + 14227 14229 14228 + 14228 14229 14230 + 14226 13503 13502 + 13502 14231 14226 + 14232 14226 14231 + 14226 14232 14229 + 14229 14227 14226 + 14233 14231 13502 + 14234 14231 14233 + 14231 14234 14232 + 14232 14234 14235 + 14235 14236 14232 + 14229 14232 14236 + 14236 14237 14229 + 14229 14237 14230 + 13502 14238 14233 + 14233 14238 14239 + 14239 14240 14233 + 14241 14233 14240 + 14233 14241 14234 + 13501 14238 13502 + 14238 13501 14242 + 14242 14239 14238 + 14225 14223 14222 + 14222 14243 14225 + 14225 14243 14244 + 14244 14245 14225 + 14246 14225 14245 + 14245 14177 14246 + 14178 14177 14245 + 14247 14244 14243 + 14245 14179 14178 + 14244 14179 14245 + 14179 14244 14230 + 14230 14180 14179 + 14230 14248 14180 + 14180 14248 14249 + 14249 14174 14180 + 14250 14174 14249 + 14174 14250 14170 + 14248 14230 14237 + 14237 14251 14248 + 14248 14251 14252 + 14249 14248 14252 + 14252 14253 14249 + 14254 14249 14253 + 14249 14254 14250 + 14237 14236 14251 + 14251 14236 14235 + 14235 14252 14251 + 14235 14255 14252 + 14252 14255 14256 + 14256 14253 14252 + 14257 14253 14256 + 14253 14257 14254 + 14258 14254 14257 + 14250 14254 14258 + 14255 14235 14259 + 14259 14260 14255 + 14255 14260 14261 + 14261 14262 14255 + 14262 14256 14255 + 14263 14256 14262 + 14256 14263 14257 + 14234 14259 14235 + 14264 14259 14234 + 14260 14259 14264 + 14260 14264 14265 + 14265 14261 14260 + 14261 14265 14266 + 14261 14266 14267 + 14267 14262 14261 + 14268 14262 14267 + 14262 14268 14263 + 14234 14241 14264 + 14264 14241 14269 + 14269 14270 14264 + 14270 14271 14264 + 14271 14265 14264 + 14266 14265 14271 + 14271 14272 14266 + 14266 14272 14273 + 14273 14267 14266 + 14240 14269 14241 + 14269 14240 14274 + 14274 14275 14269 + 14269 14275 14276 + 14276 14270 14269 + 14277 14270 14276 + 14270 14277 14278 + 14278 14271 14270 + 14272 14271 14278 + 14274 14240 14239 + 14239 14279 14274 + 14280 14274 14279 + 14275 14274 14280 + 14280 7356 14275 + 14276 14275 7356 + 7361 14276 7356 + 14277 14276 7361 + 14281 14279 14239 + 14279 14282 14280 + 7361 7360 14277 + 14277 7360 7366 + 14278 14277 7366 + 14283 14278 7366 + 14272 14278 14283 + 14283 14273 14272 + 14284 14273 14283 + 14273 14284 14285 + 14285 14267 14273 + 14267 14285 14268 + 7366 14286 14283 + 14287 14283 14286 + 14283 14287 14284 + 14284 14287 14288 + 14288 14289 14284 + 14284 14289 14290 + 14290 14285 14284 + 14268 14285 14290 + 14291 14286 7366 + 14292 14286 14291 + 14286 14292 14287 + 14288 14287 14292 + 14292 14293 14288 + 14294 14288 14293 + 14288 14294 14295 + 14295 14289 14288 + 7366 7365 14291 + 14296 14291 7365 + 14297 14291 14296 + 14291 14297 14292 + 14292 14297 14298 + 14298 14293 14292 + 14299 14293 14298 + 14293 14299 14294 + 14300 14294 14299 + 14295 14294 14300 + 7365 7364 14296 + 14301 14296 7364 + 14302 14296 14301 + 14296 14302 14297 + 14298 14297 14302 + 14302 14303 14298 + 14304 14298 14303 + 14298 14304 14299 + 7364 7363 14301 + 14305 14301 7363 + 14306 14301 14305 + 14301 14306 14302 + 14302 14306 14307 + 14307 14303 14302 + 14308 14303 14307 + 14303 14308 14304 + 14309 14304 14308 + 14299 14304 14309 + 7363 7370 14305 + 7379 14305 7370 + 14310 14305 7379 + 14305 14310 14306 + 14307 14306 14310 + 14310 14311 14307 + 14312 14307 14311 + 14307 14312 14308 + 14308 14312 14313 + 14313 14314 14308 + 14308 14314 14309 + 7379 7384 14310 + 14310 7384 14315 + 14315 14311 14310 + 14316 14311 14315 + 14311 14316 14312 + 14313 14312 14316 + 14316 14317 14313 + 14318 14313 14317 + 14313 14318 14319 + 14319 14314 14313 + 14315 7384 7383 + 7383 14320 14315 + 14321 14315 14320 + 14315 14321 14316 + 14316 14321 14322 + 14322 14317 14316 + 14323 14317 14322 + 14317 14323 14318 + 14324 14318 14323 + 14319 14318 14324 + 14325 14320 7383 + 14326 14320 14325 + 14320 14326 14321 + 14322 14321 14326 + 14326 14327 14322 + 14328 14322 14327 + 14322 14328 14323 + 7383 7389 14325 + 14325 7389 7388 + 7388 14329 14325 + 14330 14325 14329 + 14325 14330 14326 + 14326 14330 14331 + 14331 14327 14326 + 14332 14327 14331 + 14327 14332 14328 + 14333 14328 14332 + 14323 14328 14333 + 7393 14329 7388 + 14334 14329 7393 + 14329 14334 14330 + 14331 14330 14334 + 14334 14335 14331 + 14336 14331 14335 + 14331 14336 14332 + 14332 14336 14337 + 14337 14338 14332 + 14332 14338 14333 + 7393 14339 14334 + 14334 14339 14340 + 14340 14335 14334 + 14341 14335 14340 + 14335 14341 14336 + 14337 14336 14341 + 14339 7393 7398 + 7398 14342 14339 + 14340 14339 14342 + 14342 14343 14340 + 14344 14340 14343 + 14340 14344 14341 + 14341 14344 14345 + 14345 14346 14341 + 14341 14346 14337 + 14342 7398 7397 + 7397 7403 14342 + 14342 7403 14347 + 14347 14343 14342 + 14348 14343 14347 + 14343 14348 14344 + 14345 14344 14348 + 14348 14349 14345 + 14350 14345 14349 + 14345 14350 14351 + 14351 14346 14345 + 14347 7403 7402 + 7402 14352 14347 + 14353 14347 14352 + 14347 14353 14348 + 14348 14353 14354 + 14354 14349 14348 + 14355 14349 14354 + 14349 14355 14350 + 14356 14350 14355 + 14351 14350 14356 + 14357 14352 7402 + 14358 14352 14357 + 14352 14358 14353 + 14354 14353 14358 + 14358 14359 14354 + 14360 14354 14359 + 14354 14360 14355 + 7402 14361 14357 + 14357 14361 7421 + 7421 14362 14357 + 14363 14357 14362 + 14357 14363 14358 + 14358 14363 171 + 171 14359 14358 + 7401 14361 7402 + 14361 7401 7414 + 7414 7421 14361 + 7426 14362 7421 + 14364 14362 7426 + 14362 14364 14363 + 171 14363 14364 + 14364 14365 171 + 14366 171 14365 + 171 14366 14367 + 7426 14368 14364 + 14364 14368 14369 + 14369 14365 14364 + 14370 14365 14369 + 14365 14370 14366 + 14371 14366 14370 + 14367 14366 14371 + 14368 7426 14372 + 14372 7459 14368 + 14369 14368 7459 + 7459 7463 14369 + 7468 14369 7463 + 14369 7468 14370 + 7425 14372 7426 + 7438 14372 7425 + 7459 14372 7438 + 14370 7468 7467 + 7467 7480 14370 + 14370 7480 14371 + 7479 14371 7480 + 14371 7479 14373 + 14373 14374 14371 + 14371 14374 14367 + 14367 14374 14375 + 14375 14360 14367 + 14359 14367 14360 + 14373 7479 14376 + 14376 14377 14373 + 14373 14377 14378 + 14378 14379 14373 + 14374 14373 14379 + 14379 14375 14374 + 7478 14376 7479 + 14380 14376 7478 + 14380 14377 14376 + 14377 14380 14381 + 14381 14382 14377 + 14377 14382 14378 + 7478 7484 14380 + 14381 14380 7484 + 7491 14381 7484 + 14383 14381 7491 + 14383 14382 14381 + 14382 14383 14384 + 14384 14378 14382 + 14384 14385 14378 + 14378 14385 14386 + 14386 14379 14378 + 14375 14379 14386 + 7491 14387 14383 + 14383 14387 14388 + 14388 14384 14383 + 14385 14384 14388 + 14388 14389 14385 + 14386 14385 14389 + 14389 14390 14386 + 14391 14386 14390 + 14386 14391 14375 + 14392 14387 7491 + 14387 14392 14393 + 14393 14394 14387 + 14387 14394 14388 + 7491 7490 14392 + 14392 7490 7496 + 7496 14395 14392 + 14392 14395 14396 + 14396 14393 14392 + 14397 14393 14396 + 14394 14393 14397 + 14395 7496 7495 + 7495 14398 14395 + 14395 14398 14399 + 14399 14396 14395 + 14396 14399 14400 + 14396 14400 14397 + 14398 7495 14401 + 14401 14402 14398 + 14398 14402 14403 + 14399 14398 14403 + 14403 14404 14399 + 14400 14399 14404 + 14404 14405 14400 + 14397 14400 14405 + 14406 14401 7495 + 14407 14401 14406 + 14401 14407 14402 + 14402 14407 14408 + 14408 14403 14402 + 14403 14408 14409 + 14403 14409 14410 + 14410 14404 14403 + 7495 7494 14406 + 7494 14411 14406 + 14412 14406 14411 + 14412 14413 14406 + 14406 14413 14407 + 14407 14413 14414 + 14408 14407 14414 + 14414 14415 14408 + 14409 14408 14415 + 7501 14411 7494 + 14411 7501 14416 + 14416 14417 14411 + 14411 14417 14412 + 14412 14417 14418 + 14418 14419 14412 + 14413 14412 14419 + 14419 14414 14413 + 14416 7501 7500 + 7500 14420 14416 + 14421 14416 14420 + 14417 14416 14421 + 14421 14422 14417 + 14417 14422 14418 + 7510 14420 7500 + 14420 7510 14423 + 14423 14424 14420 + 14420 14424 14421 + 14424 14425 14421 + 14426 14421 14425 + 14422 14421 14426 + 7514 14423 7510 + 14427 14423 7514 + 14423 14427 14428 + 14428 14424 14423 + 14424 14428 14429 + 14429 14425 14424 + 14425 14429 14430 + 14430 14431 14425 + 14425 14431 14426 + 7514 7519 14427 + 14432 14427 7519 + 14428 14427 14432 + 14432 14433 14428 + 14429 14428 14433 + 14433 14434 14429 + 14430 14429 14434 + 14434 14435 14430 + 14436 14430 14435 + 14431 14430 14436 + 7519 14437 14432 + 14438 14432 14437 + 14432 14438 14439 + 14439 14433 14432 + 14433 14439 14440 + 14440 14434 14433 + 14434 14440 14441 + 14441 14435 14434 + 7524 14437 7519 + 14442 14437 7524 + 14437 14442 14438 + 14438 14442 14443 + 14443 14444 14438 + 14439 14438 14444 + 14444 14445 14439 + 14439 14445 14446 + 14446 14440 14439 + 14441 14440 14446 + 7524 14447 14442 + 14442 14447 14448 + 14448 14443 14442 + 14449 14443 14448 + 14443 14449 14450 + 14450 14444 14443 + 14445 14444 14450 + 14445 14450 14451 + 14451 14446 14445 + 14447 7524 7523 + 7523 14452 14447 + 14447 14452 14453 + 14453 14448 14447 + 14454 14448 14453 + 14448 14454 14449 + 14452 7523 7522 + 7522 7529 14452 + 14452 7529 14455 + 14455 14453 14452 + 14456 14453 14455 + 14453 14456 14454 + 14457 14454 14456 + 14449 14454 14457 + 14457 14458 14449 + 14449 14458 14459 + 14450 14449 14459 + 14459 14451 14450 + 7534 14455 7529 + 14460 14455 7534 + 14455 14460 14456 + 14456 14460 14461 + 14461 14462 14456 + 14456 14462 14457 + 14462 14463 14457 + 14464 14457 14463 + 14458 14457 14464 + 7534 7549 14460 + 14460 7549 14465 + 14465 14466 14460 + 14466 14461 14460 + 14467 14461 14466 + 14462 14461 14467 + 14467 14468 14462 + 14462 14468 14469 + 14469 14463 14462 + 7548 14465 7549 + 7548 14470 14465 + 14465 14470 14471 + 14471 14466 14465 + 14471 14472 14466 + 14466 14472 14467 + 14470 7548 14473 + 14473 14474 14470 + 14470 14474 14475 + 14475 14471 14470 + 14472 14471 14475 + 14475 14476 14472 + 14467 14472 14476 + 14477 14473 7548 + 14478 14473 14477 + 14478 14474 14473 + 14474 14478 14479 + 14479 14480 14474 + 14474 14480 14475 + 14481 14475 14480 + 14475 14481 14476 + 7547 14477 7548 + 14482 14477 7547 + 14482 14483 14477 + 14477 14483 14478 + 14479 14478 14483 + 7547 14484 14482 + 14482 14484 14485 + 14485 14486 14482 + 14486 14487 14482 + 14487 14488 14482 + 14483 14482 14488 + 7546 14484 7547 + 14484 7546 14489 + 14489 14485 14484 + 14490 14485 14489 + 14485 14490 14491 + 14491 14486 14485 + 14492 14486 14491 + 14486 14492 14493 + 14493 14487 14486 + 7556 14489 7546 + 14490 14489 7556 + 7556 14494 14490 + 14491 14490 14494 + 14494 14495 14491 + 14492 14491 14495 + 14495 14496 14492 + 14492 14496 14497 + 14497 14493 14492 + 14498 14493 14497 + 14493 14498 14487 + 7555 14494 7556 + 14494 7555 14499 + 14499 14495 14494 + 14496 14495 14499 + 14496 14499 7560 + 7560 14497 14496 + 14497 7560 14500 + 14497 14500 14498 + 14501 14498 14500 + 14487 14498 14501 + 14501 14488 14487 + 14501 14502 14488 + 14488 14502 14483 + 14483 14502 14479 + 7560 14499 7555 + 14355 14360 14375 + 14375 14391 14355 + 14355 14391 14356 + 14390 14356 14391 + 14356 14390 14503 + 14503 14504 14356 + 14356 14504 14351 + 14351 14504 14505 + 14505 14506 14351 + 14346 14351 14506 + 14503 14390 14389 + 14389 14507 14503 + 14503 14507 14508 + 14508 14509 14503 + 14504 14503 14509 + 14509 14505 14504 + 14507 14389 14388 + 14388 14510 14507 + 14507 14510 14511 + 14511 14508 14507 + 14511 14512 14508 + 14508 14512 14513 + 14513 14509 14508 + 14505 14509 14513 + 14510 14388 14514 + 14514 14515 14510 + 14510 14515 14516 + 14516 14511 14510 + 14512 14511 14516 + 14516 14517 14512 + 14513 14512 14517 + 14394 14514 14388 + 14518 14514 14394 + 14514 14518 14515 + 14515 14518 14519 + 14519 14520 14515 + 14515 14520 14516 + 14394 14521 14518 + 14518 14521 14522 + 14522 14519 14518 + 14523 14519 14522 + 14520 14519 14523 + 14397 14521 14394 + 14521 14397 14524 + 14524 14522 14521 + 14525 14522 14524 + 14522 14525 14523 + 14523 14525 14526 + 14526 14527 14523 + 14528 14523 14527 + 14523 14528 14520 + 14524 14397 14405 + 14529 14524 14405 + 14530 14524 14529 + 14524 14530 14525 + 14525 14530 14531 + 14531 14526 14525 + 14532 14526 14531 + 14526 14532 14533 + 14533 14527 14526 + 14405 14534 14529 + 14535 14529 14534 + 14529 14535 14536 + 14529 14536 14530 + 14530 14536 14537 + 14537 14531 14530 + 14538 14531 14537 + 14531 14538 14532 + 14539 14534 14405 + 14540 14534 14539 + 14534 14540 14535 + 14535 14540 14541 + 14541 14542 14535 + 14536 14535 14542 + 14542 14537 14536 + 14543 14537 14542 + 14537 14543 14538 + 14405 14544 14539 + 14545 14539 14544 + 14546 14539 14545 + 14539 14546 14540 + 14540 14546 14547 + 14547 14541 14540 + 14544 14405 14404 + 14404 14410 14544 + 14544 14410 14548 + 14548 14549 14544 + 14544 14549 14545 + 14550 14545 14549 + 14545 14550 14551 + 14551 14552 14545 + 14545 14552 14546 + 14547 14546 14552 + 14548 14410 14553 + 14553 14554 14548 + 14555 14548 14554 + 14548 14555 14556 + 14556 14549 14548 + 14549 14556 14550 + 14557 14550 14556 + 14551 14550 14557 + 14410 14409 14553 + 14415 14553 14409 + 14558 14553 14415 + 14553 14558 14559 + 14559 14554 14553 + 14554 14559 14560 + 14560 14561 14554 + 14554 14561 14555 + 14562 14555 14561 + 14556 14555 14562 + 14415 14563 14558 + 14558 14563 14564 + 14564 14565 14558 + 14558 14565 14559 + 14560 14559 14565 + 14565 14566 14560 + 14567 14560 14566 + 14561 14560 14567 + 14563 14415 14414 + 14414 14568 14563 + 14564 14563 14568 + 14568 14569 14564 + 14570 14564 14569 + 14565 14564 14570 + 14570 14566 14565 + 14566 14570 14571 + 14571 14572 14566 + 14566 14572 14567 + 14573 14568 14414 + 14568 14573 14574 + 14574 14569 14568 + 14575 14569 14574 + 14569 14575 14570 + 14570 14575 14464 + 14464 14571 14570 + 14463 14571 14464 + 14572 14571 14463 + 14414 14419 14573 + 14573 14419 14418 + 14418 14576 14573 + 14574 14573 14576 + 14576 14577 14574 + 14578 14574 14577 + 14574 14578 14575 + 14579 14576 14418 + 14576 14579 14580 + 14580 14577 14576 + 14581 14577 14580 + 14577 14581 14578 + 14418 14582 14579 + 14579 14582 14583 + 14583 14584 14579 + 14579 14584 14585 + 14585 14580 14579 + 14586 14580 14585 + 14580 14586 14581 + 14582 14418 14587 + 14587 14588 14582 + 14582 14588 14589 + 14589 14583 14582 + 14590 14583 14589 + 14584 14583 14590 + 14584 14590 14591 + 14591 14585 14584 + 14422 14587 14418 + 14592 14587 14422 + 14592 14588 14587 + 14588 14592 14593 + 14593 14589 14588 + 14594 14589 14593 + 14589 14594 14590 + 14590 14594 14595 + 14595 14596 14590 + 14596 14591 14590 + 14597 14591 14596 + 14422 14426 14592 + 14593 14592 14426 + 14426 14431 14593 + 14431 14598 14593 + 14599 14593 14598 + 14593 14599 14594 + 14594 14599 14600 + 14600 14595 14594 + 14436 14598 14431 + 14601 14598 14436 + 14598 14601 14599 + 14600 14599 14601 + 14601 14602 14600 + 14603 14600 14602 + 14595 14600 14603 + 14603 14604 14595 + 14595 14604 14605 + 14605 14596 14595 + 14436 14606 14601 + 14601 14606 14607 + 14607 14602 14601 + 14608 14602 14607 + 14602 14608 14603 + 14603 14608 14609 + 14609 14610 14603 + 14604 14603 14610 + 14606 14436 14611 + 14611 14612 14606 + 14607 14606 14612 + 14612 14613 14607 + 14614 14607 14613 + 14607 14614 14608 + 14435 14611 14436 + 14615 14611 14435 + 14612 14611 14615 + 14615 14616 14612 + 14612 14616 14617 + 14617 14613 14612 + 14618 14613 14617 + 14613 14618 14614 + 14619 14614 14618 + 14608 14614 14619 + 14435 14441 14615 + 14615 14441 14620 + 14620 14621 14615 + 14616 14615 14621 + 14621 14622 14616 + 14617 14616 14622 + 14622 14623 14617 + 14624 14617 14623 + 14617 14624 14618 + 14446 14620 14441 + 14620 14446 14451 + 14451 14625 14620 + 14620 14625 14626 + 14626 14621 14620 + 14626 14622 14621 + 14622 14626 14627 + 14627 14623 14622 + 14623 14627 14628 + 14628 14629 14623 + 14623 14629 14624 + 14625 14451 14459 + 14459 14630 14625 + 14625 14630 14627 + 14627 14626 14625 + 14630 14459 14631 + 14631 14632 14630 + 14630 14632 14633 + 14633 14634 14630 + 14630 14634 14627 + 14634 14635 14627 + 14628 14627 14635 + 14631 14459 14458 + 14458 14636 14631 + 14631 14636 14637 + 14637 14581 14631 + 14632 14631 14581 + 14581 14586 14632 + 14633 14632 14586 + 14464 14636 14458 + 14636 14464 14575 + 14575 14637 14636 + 14605 14604 14638 + 14629 14628 14639 + 14639 14640 14629 + 14624 14629 14640 + 14640 14641 14624 + 14618 14624 14641 + 14641 14642 14618 + 14618 14642 14619 + 14640 14639 14643 + 14643 14644 14640 + 14640 14644 14645 + 14645 14641 14640 + 14641 14645 14646 + 14646 14642 14641 + 14642 14646 14647 + 14647 14619 14642 + 14644 14643 14648 + 14648 14649 14644 + 14644 14649 14650 + 14650 14645 14644 + 14646 14645 14650 + 14650 14651 14646 + 14646 14651 14652 + 14652 14647 14646 + 14653 14648 14643 + 14654 14648 14653 + 14649 14648 14654 + 14654 14655 14649 + 14649 14655 14656 + 14656 14650 14649 + 14651 14650 14656 + 14656 14657 14651 + 14651 14657 14658 + 14658 14652 14651 + 14653 14659 14654 + 14660 14654 14659 + 14655 14654 14660 + 14660 14661 14655 + 14655 14661 14662 + 14662 14656 14655 + 14657 14656 14662 + 14659 14653 14663 + 14663 14664 14659 + 14659 14664 14665 + 14665 14666 14659 + 14659 14666 14667 + 14667 14660 14659 + 14663 14653 14668 + 14668 14669 14663 + 14663 14669 14670 + 14664 14663 14670 + 14671 14668 14653 + 14672 14668 14671 + 14668 14672 14673 + 14673 14669 14668 + 14669 14673 14674 + 14674 14670 14669 + 14675 14670 14674 + 14670 14675 14664 + 14676 14671 14653 + 14677 14671 14676 + 14671 14677 14610 + 14610 14678 14671 + 14671 14678 14672 + 14679 14672 14678 + 14673 14672 14679 + 14679 14680 14673 + 14680 14674 14673 + 14676 14681 14677 + 14604 14677 14681 + 14610 14677 14604 + 14678 14610 14609 + 14609 14682 14678 + 14678 14682 14679 + 14682 14683 14679 + 14683 14684 14679 + 14685 14679 14684 + 14680 14679 14685 + 14682 14609 14686 + 14682 14686 14687 + 14687 14683 14682 + 14683 14687 14688 + 14688 14689 14683 + 14683 14689 14690 + 14690 14684 14683 + 14686 14609 14691 + 14691 14692 14686 + 14687 14686 14692 + 14692 14693 14687 + 14688 14687 14693 + 14608 14691 14609 + 14619 14691 14608 + 14692 14691 14619 + 14619 14647 14692 + 14692 14647 14652 + 14652 14693 14692 + 14652 14658 14693 + 14693 14658 14688 + 14688 14658 14657 + 14657 14694 14688 + 14694 14695 14688 + 14689 14688 14695 + 14695 14696 14689 + 14689 14696 14697 + 14690 14689 14697 + 14662 14694 14657 + 14698 14694 14662 + 14694 14698 14699 + 14699 14695 14694 + 14695 14699 14700 + 14700 14696 14695 + 14696 14700 14701 + 14701 14697 14696 + 14662 14702 14698 + 14698 14702 14703 + 14703 14704 14698 + 14698 14704 14705 + 14705 14699 14698 + 14700 14699 14705 + 14705 14706 14700 + 14701 14700 14706 + 14702 14662 14661 + 14661 14707 14702 + 14703 14702 14707 + 14707 14708 14703 + 14709 14703 14708 + 14703 14709 14710 + 14710 14704 14703 + 14704 14710 14711 + 14711 14705 14704 + 14707 14661 14660 + 14660 14712 14707 + 14707 14712 14151 + 14151 14708 14707 + 14155 14708 14151 + 14708 14155 14709 + 14160 14709 14155 + 14710 14709 14160 + 14712 14660 14667 + 14667 14144 14712 + 14151 14712 14144 + 14144 14667 14713 + 14713 14139 14144 + 14139 14713 14133 + 14133 14713 14714 + 14714 14134 14133 + 14713 14667 14666 + 14666 14714 14713 + 14665 14714 14666 + 14714 14665 14715 + 14715 14134 14714 + 14129 14134 14715 + 14715 14716 14129 + 14129 14716 14130 + 14715 14665 14664 + 14717 14715 14664 + 14716 14715 14717 + 14717 14718 14716 + 14130 14716 14718 + 14718 14719 14130 + 14719 14720 14130 + 14720 14721 14130 + 14111 14130 14721 + 14722 14717 14664 + 14723 14717 14722 + 14723 14718 14717 + 14718 14723 14724 + 14724 14719 14718 + 14724 14725 14719 + 14719 14725 14726 + 14726 14720 14719 + 14664 14675 14722 + 14727 14722 14675 + 14728 14722 14727 + 14722 14728 14723 + 14723 14728 14729 + 14724 14723 14729 + 14730 14724 14729 + 14725 14724 14730 + 14675 14731 14727 + 14727 14731 14732 + 14733 14727 14732 + 14728 14727 14733 + 14733 14729 14728 + 14674 14731 14675 + 14731 14674 14680 + 14680 14732 14731 + 14685 14732 14680 + 14732 14685 14734 + 14734 14735 14732 + 14732 14735 14733 + 14736 14733 14735 + 14729 14733 14736 + 14737 14734 14685 + 14738 14734 14737 + 14738 14735 14734 + 14735 14738 14736 + 14739 14736 14738 + 14729 14736 14739 + 14740 14737 14685 + 14741 14737 14740 + 14737 14741 14742 + 14742 14743 14737 + 14737 14743 14738 + 14738 14743 14739 + 14744 14740 14685 + 14745 14740 14744 + 14740 14745 14746 + 14746 14747 14740 + 14740 14747 14741 + 14685 14748 14744 + 14749 14744 14748 + 14744 14749 14750 + 14744 14750 14745 + 14745 14750 14751 + 14752 14745 14751 + 14746 14745 14752 + 14684 14748 14685 + 14684 14690 14748 + 14748 14690 14749 + 14697 14749 14690 + 14750 14749 14697 + 14697 14751 14750 + 14751 14697 14701 + 14751 14701 14753 + 14753 14754 14751 + 14751 14754 14752 + 14755 14752 14754 + 14752 14755 14756 + 14756 14757 14752 + 14752 14757 14746 + 14706 14753 14701 + 14758 14753 14706 + 14753 14758 14759 + 14759 14754 14753 + 14754 14759 14755 + 14760 14755 14759 + 14756 14755 14760 + 14706 14761 14758 + 14762 14758 14761 + 14759 14758 14762 + 14762 14763 14759 + 14759 14763 14760 + 14761 14706 14705 + 14705 14711 14761 + 14761 14711 14764 + 14764 14765 14761 + 14761 14765 14762 + 14766 14762 14765 + 14762 14766 14767 + 14767 14763 14762 + 14763 14767 14768 + 14768 14760 14763 + 14764 14711 14710 + 14710 14769 14764 + 14770 14764 14769 + 14764 14770 14771 + 14771 14765 14764 + 14765 14771 14766 + 14772 14766 14771 + 14767 14766 14772 + 14772 14773 14767 + 14768 14767 14773 + 14160 14769 14710 + 14774 14769 14160 + 14769 14774 14770 + 14775 14770 14774 + 14771 14770 14775 + 14775 14776 14771 + 14771 14776 14772 + 14777 14772 14776 + 14773 14772 14777 + 14160 14159 14774 + 14774 14159 14158 + 14158 14165 14774 + 14774 14165 14775 + 14778 14775 14165 + 14775 14778 14776 + 14776 14778 14777 + 14777 14778 14164 + 14164 14170 14777 + 14170 14250 14777 + 14250 14779 14777 + 14773 14777 14779 + 14165 14164 14778 + 14258 14779 14250 + 14780 14779 14258 + 14779 14780 14773 + 14773 14780 14768 + 14781 14768 14780 + 14760 14768 14781 + 14781 14782 14760 + 14760 14782 14756 + 14258 14783 14780 + 14780 14783 14781 + 14781 14783 14784 + 14784 14785 14781 + 14782 14781 14785 + 14785 14786 14782 + 14756 14782 14786 + 14786 14787 14756 + 14757 14756 14787 + 14783 14258 14788 + 14788 14784 14783 + 14784 14788 14789 + 14789 14790 14784 + 14784 14790 14791 + 14791 14785 14784 + 14786 14785 14791 + 14257 14788 14258 + 14789 14788 14257 + 14257 14263 14789 + 14789 14263 14268 + 14268 14792 14789 + 14790 14789 14792 + 14792 14793 14790 + 14791 14790 14793 + 14793 14794 14791 + 14795 14791 14794 + 14791 14795 14786 + 14786 14795 14796 + 14796 14787 14786 + 14290 14792 14268 + 14793 14792 14290 + 14290 14797 14793 + 14793 14797 14798 + 14798 14794 14793 + 14799 14794 14798 + 14794 14799 14795 + 14796 14795 14799 + 14799 14800 14796 + 14801 14796 14800 + 14796 14801 14802 + 14797 14290 14289 + 14289 14295 14797 + 14798 14797 14295 + 14295 14803 14798 + 14804 14798 14803 + 14798 14804 14799 + 14799 14804 14805 + 14805 14800 14799 + 14300 14803 14295 + 14806 14803 14300 + 14803 14806 14804 + 14805 14804 14806 + 14806 14807 14805 + 14808 14805 14807 + 14805 14808 14809 + 14300 14810 14806 + 14806 14810 14811 + 14811 14807 14806 + 14812 14807 14811 + 14807 14812 14808 + 14813 14808 14812 + 14809 14808 14813 + 14810 14300 14814 + 14814 14815 14810 + 14811 14810 14815 + 14815 14816 14811 + 14817 14811 14816 + 14811 14817 14812 + 14299 14814 14300 + 14309 14814 14299 + 14815 14814 14309 + 14309 14818 14815 + 14815 14818 14819 + 14819 14816 14815 + 14820 14816 14819 + 14816 14820 14817 + 14821 14817 14820 + 14812 14817 14821 + 14821 14822 14812 + 14812 14822 14813 + 14818 14309 14314 + 14314 14319 14818 + 14819 14818 14319 + 14319 14823 14819 + 14824 14819 14823 + 14819 14824 14820 + 14820 14824 14825 + 14825 14826 14820 + 14820 14826 14821 + 14324 14823 14319 + 14827 14823 14324 + 14823 14827 14824 + 14825 14824 14827 + 14827 14828 14825 + 14829 14825 14828 + 14825 14829 14830 + 14830 14826 14825 + 14826 14830 14831 + 14831 14821 14826 + 14324 14832 14827 + 14832 14324 14833 + 14833 14834 14832 + 14323 14833 14324 + 14333 14833 14323 + 14834 14833 14333 + 14333 14835 14834 + 14834 14835 14836 + 14836 14837 14834 + 14834 14837 14838 + 14838 14839 14834 + 14827 14839 14838 + 14838 14828 14827 + 14835 14333 14338 + 14338 14840 14835 + 14836 14835 14840 + 14840 14841 14836 + 14842 14836 14841 + 14836 14842 14843 + 14843 14837 14836 + 14837 14843 14844 + 14844 14838 14837 + 14840 14338 14337 + 14337 14506 14840 + 14840 14506 14505 + 14505 14841 14840 + 14513 14841 14505 + 14841 14513 14842 + 14517 14842 14513 + 14843 14842 14517 + 14506 14337 14346 + 14800 14809 14801 + 14845 14801 14809 + 14802 14801 14845 + 14845 14846 14802 + 14802 14846 14746 + 14746 14757 14802 + 14787 14802 14757 + 14809 14847 14845 + 14848 14845 14847 + 14845 14848 14849 + 14849 14846 14845 + 14846 14849 14747 + 14747 14746 14846 + 14813 14847 14809 + 14850 14847 14813 + 14847 14850 14848 + 14851 14848 14850 + 14849 14848 14851 + 14851 14852 14849 + 14849 14852 14741 + 14741 14747 14849 + 14813 14853 14850 + 14850 14853 14854 + 14854 14855 14850 + 14850 14855 14851 + 14856 14851 14855 + 14856 14852 14851 + 14852 14856 14742 + 14742 14741 14852 + 14853 14813 14822 + 14822 14857 14853 + 14854 14853 14857 + 14857 14858 14854 + 14859 14854 14858 + 14855 14854 14859 + 14859 14860 14855 + 14855 14860 14856 + 14742 14856 14860 + 14857 14822 14821 + 14821 14831 14857 + 14857 14831 14861 + 14861 14858 14857 + 14858 14861 14862 + 14862 14863 14858 + 14858 14863 14859 + 14859 14863 14864 + 14864 14865 14859 + 14860 14859 14865 + 14861 14831 14830 + 14830 14866 14861 + 14862 14861 14866 + 14866 14867 14862 + 14862 14867 14868 + 14868 14869 14862 + 14863 14862 14869 + 14869 14864 14863 + 14870 14866 14830 + 14866 14870 14871 + 14871 14867 14866 + 14867 14871 14872 + 14872 14868 14867 + 14830 14829 14870 + 14873 14870 14829 + 14871 14870 14873 + 14873 14874 14871 + 14872 14871 14874 + 14874 14875 14872 + 14876 14872 14875 + 14868 14872 14876 + 14829 14877 14873 + 14878 14873 14877 + 14874 14873 14878 + 14878 14879 14874 + 14874 14879 14880 + 14880 14875 14874 + 14828 14877 14829 + 14877 14828 14838 + 14838 14844 14877 + 14877 14844 14878 + 14878 14844 14843 + 14843 14881 14878 + 14879 14878 14881 + 14881 14882 14879 + 14879 14882 14883 + 14883 14880 14879 + 14884 14880 14883 + 14875 14880 14884 + 14884 14885 14875 + 14875 14885 14876 + 14517 14881 14843 + 14881 14517 14516 + 14516 14882 14881 + 14882 14516 14886 + 14886 14883 14882 + 14887 14883 14886 + 14883 14887 14884 + 14884 14887 14888 + 14888 14889 14884 + 14885 14884 14889 + 14889 14890 14885 + 14876 14885 14890 + 14520 14886 14516 + 14891 14886 14520 + 14886 14891 14887 + 14887 14891 14892 + 14892 14888 14887 + 14893 14888 14892 + 14888 14893 14894 + 14894 14889 14888 + 14889 14894 14895 + 14895 14890 14889 + 14520 14528 14891 + 14891 14528 14896 + 14896 14892 14891 + 14897 14892 14896 + 14892 14897 14893 + 14893 14897 14898 + 14898 14899 14893 + 14894 14893 14899 + 14899 14900 14894 + 14895 14894 14900 + 14527 14896 14528 + 14901 14896 14527 + 14896 14901 14897 + 14897 14901 14902 + 14902 14898 14897 + 14903 14898 14902 + 14898 14903 14904 + 14904 14899 14898 + 14899 14904 14905 + 14905 14900 14899 + 14527 14533 14901 + 14901 14533 14906 + 14906 14902 14901 + 14907 14902 14906 + 14902 14907 14903 + 14903 14907 14908 + 14908 14909 14903 + 14904 14903 14909 + 14909 14910 14904 + 14905 14904 14910 + 14911 14906 14533 + 14912 14906 14911 + 14906 14912 14907 + 14907 14912 14913 + 14913 14908 14907 + 14914 14908 14913 + 14908 14914 14915 + 14915 14909 14908 + 14533 14532 14911 + 14916 14911 14532 + 14917 14911 14916 + 14911 14917 14912 + 14912 14917 14918 + 14918 14913 14912 + 14919 14913 14918 + 14913 14919 14914 + 14532 14538 14916 + 14916 14538 14920 + 14920 14921 14916 + 14922 14916 14921 + 14916 14922 14917 + 14917 14922 14923 + 14923 14918 14917 + 14924 14918 14923 + 14918 14924 14919 + 14538 14543 14920 + 14541 14920 14543 + 14925 14920 14541 + 14920 14925 14926 + 14926 14921 14920 + 14927 14921 14926 + 14921 14927 14922 + 14922 14927 14928 + 14928 14923 14922 + 14543 14542 14541 + 14541 14547 14925 + 14925 14547 14929 + 14929 14930 14925 + 14925 14930 14931 + 14931 14926 14925 + 14932 14926 14931 + 14926 14932 14927 + 14927 14932 14933 + 14933 14928 14927 + 14552 14929 14547 + 14934 14929 14552 + 14930 14929 14934 + 14934 14935 14930 + 14930 14935 14936 + 14936 14931 14930 + 14937 14931 14936 + 14931 14937 14932 + 14932 14937 14938 + 14938 14933 14932 + 14552 14551 14934 + 14939 14934 14551 + 14935 14934 14939 + 14939 14940 14935 + 14935 14940 14941 + 14941 14936 14935 + 14942 14936 14941 + 14936 14942 14937 + 14937 14942 14943 + 14943 14938 14937 + 14551 14944 14939 + 14944 14945 14939 + 14946 14939 14945 + 14940 14939 14946 + 14946 14947 14940 + 14940 14947 14948 + 14948 14941 14940 + 14557 14944 14551 + 14949 14944 14557 + 14944 14949 14950 + 14950 14945 14944 + 14945 14950 14951 + 14951 14952 14945 + 14945 14952 14946 + 14953 14946 14952 + 14947 14946 14953 + 14557 14954 14949 + 14949 14954 14955 + 14955 14956 14949 + 14950 14949 14956 + 14956 14957 14950 + 14951 14950 14957 + 14954 14557 14958 + 14958 14959 14954 + 14955 14954 14959 + 14959 14960 14955 + 14961 14955 14960 + 14956 14955 14961 + 14556 14958 14557 + 14562 14958 14556 + 14959 14958 14562 + 14562 14962 14959 + 14959 14962 14963 + 14963 14960 14959 + 14960 14963 14964 + 14964 14965 14960 + 14960 14965 14961 + 14962 14562 14966 + 14966 14967 14962 + 14963 14962 14967 + 14967 14968 14963 + 14968 14969 14963 + 14964 14963 14969 + 14561 14966 14562 + 14567 14966 14561 + 14967 14966 14567 + 14567 14970 14967 + 14967 14970 14971 + 14971 14968 14967 + 14968 14971 14972 + 14972 14973 14968 + 14968 14973 14974 + 14974 14969 14968 + 14970 14567 14572 + 14572 14469 14970 + 14971 14970 14469 + 14469 14468 14971 + 14972 14971 14468 + 14468 14467 14972 + 14975 14972 14467 + 14973 14972 14975 + 14463 14469 14572 + 14476 14975 14467 + 14976 14975 14476 + 14975 14976 14977 + 14977 14978 14975 + 14975 14978 14973 + 14973 14978 14979 + 14979 14974 14973 + 14980 14974 14979 + 14969 14974 14980 + 14476 14481 14976 + 14976 14481 14981 + 14981 14982 14976 + 14977 14976 14982 + 14982 14983 14977 + 14984 14977 14983 + 14978 14977 14984 + 14984 14979 14978 + 14480 14981 14481 + 14985 14981 14480 + 14981 14985 14986 + 14986 14982 14981 + 14982 14986 14987 + 14987 14983 14982 + 14983 14987 14988 + 14988 14989 14983 + 14983 14989 14984 + 14480 14479 14985 + 14985 14479 14990 + 14990 14991 14985 + 14985 14991 14992 + 14992 14986 14985 + 14987 14986 14992 + 14992 14993 14987 + 14988 14987 14993 + 14994 14990 14479 + 14995 14990 14994 + 14995 14991 14990 + 14991 14995 14996 + 14996 14992 14991 + 14996 14993 14992 + 14993 14996 14997 + 14997 14998 14993 + 14993 14998 14988 + 14502 14994 14479 + 14999 14994 14502 + 15000 14994 14999 + 14994 15000 14995 + 14996 14995 15000 + 14502 14501 14999 + 15001 14999 14501 + 15000 14999 15001 + 15001 15002 15000 + 15000 15002 14996 + 15003 15001 14501 + 15004 15001 15003 + 15002 15001 15004 + 15002 15004 15005 + 15005 15006 15002 + 15002 15006 14996 + 15007 15003 14501 + 15008 15003 15007 + 15008 15009 15003 + 15003 15009 15004 + 15004 15009 15010 + 15010 15005 15004 + 15011 15005 15010 + 15006 15005 15011 + 14500 15007 14501 + 15012 15007 14500 + 15013 15007 15012 + 15007 15013 15008 + 15008 15013 1628 + 15014 15008 1628 + 15009 15008 15014 + 15014 15010 15009 + 15014 15015 15010 + 15010 15015 15011 + 14500 7560 15012 + 1629 15012 7560 + 15013 15012 1629 + 1629 1628 15013 + 1624 1629 7560 + 7559 1624 7560 + 15016 1624 7559 + 1624 15016 1620 + 1620 15016 15017 + 15017 15018 1620 + 1620 15018 1615 + 7559 7558 15016 + 15017 15016 7558 + 15019 15017 7558 + 15020 15017 15019 + 15018 15017 15020 + 15018 15020 15021 + 15021 1615 15018 + 1616 1615 15021 + 1616 15021 15022 + 15022 1610 1616 + 7566 15019 7558 + 15023 15019 7566 + 15024 15019 15023 + 15019 15024 15020 + 15020 15024 15025 + 15021 15020 15025 + 15025 15022 15021 + 15026 15022 15025 + 15026 1610 15022 + 1610 15026 1611 + 7566 15027 15023 + 15028 15023 15027 + 15024 15023 15028 + 15028 15029 15024 + 15024 15029 15025 + 15027 7566 7565 + 15027 7565 7564 + 7564 15030 15027 + 15027 15030 15028 + 15025 15031 15026 + 15026 15031 15032 + 1611 15026 15032 + 15032 15033 1611 + 1607 1611 15033 + 15033 15034 1607 + 1607 15034 1602 + 15034 15035 1602 + 15035 15036 1602 + 15036 15037 1602 + 15037 15038 1602 + 15039 15034 15033 + 15034 15039 15040 + 15040 15035 15034 + 15040 15041 15035 + 15035 15041 15042 + 15042 15036 15035 + 15033 15043 15039 + 15039 15043 15044 + 15044 15045 15039 + 15040 15039 15045 + 15045 15046 15040 + 15041 15040 15046 + 15046 15047 15041 + 15042 15041 15047 + 15043 15033 15048 + 15048 15049 15043 + 15043 15049 15050 + 15050 15044 15043 + 15051 15044 15050 + 15045 15044 15051 + 15045 15051 15052 + 15052 15046 15045 + 15047 15046 15052 + 15048 15053 15049 + 15049 15053 15054 + 15054 15050 15049 + 15050 15054 15055 + 15050 15055 15051 + 15051 15055 505 + 15052 15051 505 + 15053 15048 15056 + 15056 15057 15053 + 15054 15053 15057 + 15058 15054 15057 + 15055 15054 15058 + 15058 15059 15055 + 15055 15059 505 + 15057 15056 15060 + 15060 15061 15057 + 15057 15061 15062 + 15062 15058 15057 + 15058 15062 15059 + 15059 15062 15063 + 15063 15064 15059 + 15059 15064 505 + 15061 15060 15065 + 15065 15066 15061 + 15062 15061 15066 + 15063 15062 15066 + 15067 15063 15066 + 15063 15067 15064 + 15064 15067 15068 + 15068 15069 15064 + 15064 15069 505 + 15069 15070 505 + 15070 506 505 + 15065 15071 15066 + 15066 15071 15067 + 15067 15071 15072 + 15068 15067 15072 + 15073 15068 15072 + 15068 15073 15069 + 15069 15073 15074 + 15074 15070 15069 + 15071 15065 15075 + 15075 15072 15071 + 15075 15076 15072 + 15072 15076 15073 + 15073 15076 15077 + 15074 15073 15077 + 15077 15078 15074 + 15079 15074 15078 + 15074 15079 15070 + 15075 15065 15080 + 505 511 15052 + 511 15081 15052 + 15081 15082 15052 + 15047 15052 15082 + 15082 15083 15047 + 15047 15083 15042 + 15084 15081 511 + 15084 15085 15081 + 15081 15085 15086 + 15086 15082 15081 + 15086 15083 15082 + 15042 15083 15086 + 15087 15042 15086 + 15042 15087 15036 + 511 510 15084 + 15084 510 509 + 509 15088 15084 + 15088 15089 15084 + 15085 15084 15089 + 15089 15090 15085 + 15085 15090 15091 + 15086 15085 15091 + 15091 15087 15086 + 15036 15087 15091 + 15091 15037 15036 + 15092 15089 15088 + 15089 15092 15093 + 15093 15090 15089 + 15090 15093 15094 + 15094 15091 15090 + 15091 15094 15037 + 15037 15094 15095 + 15095 15096 15037 + 15088 15097 15092 + 15092 15097 15098 + 14721 14112 14111 + 14721 15099 14112 + 14112 15099 14113 + 15099 15100 14113 + 14107 14113 15100 + 15100 15101 14107 + 14107 15101 14108 + 15099 14721 14720 + 14720 15100 15099 + 15101 15100 14720 + 14720 14726 15101 + 15101 14726 15102 + 15102 14108 15101 + 15103 14108 15102 + 14108 15103 14109 + 14109 15103 15104 + 15104 15105 14109 + 14104 14109 15105 + 15106 15102 14726 + 15107 15102 15106 + 15102 15107 15103 + 15103 15107 15108 + 15108 15104 15103 + 15109 15104 15108 + 15104 15109 15110 + 15110 15105 15104 + 14726 14725 15106 + 14725 15111 15106 + 15112 15106 15111 + 15113 15106 15112 + 15106 15113 15107 + 15107 15113 15114 + 15114 15108 15107 + 15115 15108 15114 + 15108 15115 15109 + 14730 15111 14725 + 14730 15116 15111 + 15111 15116 15112 + 15117 15112 15116 + 15118 15112 15117 + 15112 15118 15113 + 15113 15118 15119 + 15119 15114 15113 + 15120 15114 15119 + 15114 15120 15115 + 15116 14730 15121 + 15121 15122 15116 + 15116 15122 15117 + 15123 15117 15122 + 15124 15117 15123 + 15117 15124 15118 + 15118 15124 15125 + 15125 15119 15118 + 15121 14730 14729 + 15126 15121 14729 + 15127 15121 15126 + 15121 15127 15122 + 15122 15127 15123 + 15128 15123 15127 + 15129 15123 15128 + 15123 15129 15124 + 15124 15129 15130 + 15130 15125 15124 + 14729 15131 15126 + 15132 15126 15131 + 15126 15132 15133 + 15126 15133 15127 + 15127 15133 15128 + 14739 15131 14729 + 15131 14739 15134 + 15131 15134 15132 + 15132 15134 14742 + 15135 15132 14742 + 15133 15132 15135 + 15135 15136 15133 + 15133 15136 15128 + 15134 14739 14743 + 14743 14742 15134 + 14860 15135 14742 + 14865 15135 14860 + 15135 14865 15137 + 15137 15136 15135 + 15136 15137 15138 + 15138 15128 15136 + 15139 15128 15138 + 15128 15139 15129 + 15129 15139 15140 + 15140 15130 15129 + 15137 14865 14864 + 14864 15141 15137 + 15137 15141 15142 + 15142 15138 15137 + 15143 15138 15142 + 15138 15143 15139 + 15139 15143 15144 + 15144 15140 15139 + 15145 15141 14864 + 15141 15145 15146 + 15146 15142 15141 + 15147 15142 15146 + 15142 15147 15143 + 15143 15147 15148 + 15148 15144 15143 + 14864 14869 15145 + 15145 14869 14868 + 14868 15149 15145 + 15145 15149 15150 + 15150 15146 15145 + 15151 15146 15150 + 15146 15151 15147 + 15147 15151 15152 + 15152 15148 15147 + 14876 15149 14868 + 15149 14876 15153 + 15153 15150 15149 + 15154 15150 15153 + 15150 15154 15151 + 15151 15154 15155 + 15155 15152 15151 + 15156 15152 15155 + 15152 15156 15157 + 15157 15148 15152 + 14890 15153 14876 + 15158 15153 14890 + 15153 15158 15154 + 15154 15158 15159 + 15159 15155 15154 + 15160 15155 15159 + 15155 15160 15156 + 15156 15160 15161 + 15161 15162 15156 + 15157 15156 15162 + 14890 14895 15158 + 15158 14895 15163 + 15163 15159 15158 + 15164 15159 15163 + 15159 15164 15160 + 15160 15164 15165 + 15165 15161 15160 + 15166 15161 15165 + 15161 15166 15167 + 15167 15162 15161 + 14900 15163 14895 + 15168 15163 14900 + 15163 15168 15164 + 15164 15168 15169 + 15169 15165 15164 + 15170 15165 15169 + 15165 15170 15166 + 15166 15170 15171 + 15171 15172 15166 + 15167 15166 15172 + 14900 14905 15168 + 15168 14905 15173 + 15173 15169 15168 + 15174 15169 15173 + 15169 15174 15170 + 15170 15174 15175 + 15175 15171 15170 + 15176 15171 15175 + 15171 15176 15177 + 15177 15172 15171 + 14910 15173 14905 + 15178 15173 14910 + 15173 15178 15174 + 15174 15178 15179 + 15179 15175 15174 + 15180 15175 15179 + 15175 15180 15176 + 15176 15180 15181 + 15181 15182 15176 + 15177 15176 15182 + 14910 15183 15178 + 15178 15183 15184 + 15184 15179 15178 + 15185 15179 15184 + 15179 15185 15180 + 15180 15185 15186 + 15186 15181 15180 + 15183 14910 14909 + 14909 14915 15183 + 15183 14915 15187 + 15187 15184 15183 + 15188 15184 15187 + 15184 15188 15185 + 15185 15188 15189 + 15189 15186 15185 + 15190 15186 15189 + 15186 15190 15191 + 15191 15181 15186 + 15192 15187 14915 + 15193 15187 15192 + 15187 15193 15188 + 15188 15193 15194 + 15194 15189 15188 + 15195 15189 15194 + 15189 15195 15190 + 15196 15190 15195 + 15191 15190 15196 + 14915 14914 15192 + 15197 15192 14914 + 15198 15192 15197 + 15192 15198 15193 + 15193 15198 15199 + 15199 15194 15193 + 15200 15194 15199 + 15194 15200 15195 + 14914 14919 15197 + 15201 15197 14919 + 15202 15197 15201 + 15197 15202 15198 + 15198 15202 15203 + 15203 15199 15198 + 15204 15199 15203 + 15199 15204 15200 + 15205 15200 15204 + 15195 15200 15205 + 14919 14924 15201 + 15206 15201 14924 + 15207 15201 15206 + 15201 15207 15202 + 15202 15207 15208 + 15208 15203 15202 + 15209 15203 15208 + 15203 15209 15204 + 14924 15210 15206 + 15211 15206 15210 + 15212 15206 15211 + 15206 15212 15207 + 15207 15212 15213 + 15213 15208 15207 + 15214 15208 15213 + 15208 15214 15209 + 14923 15210 14924 + 15210 14923 14928 + 14928 15215 15210 + 15210 15215 15211 + 15216 15211 15215 + 15217 15211 15216 + 15211 15217 15212 + 15212 15217 15218 + 15218 15213 15212 + 15219 15213 15218 + 15213 15219 15214 + 15215 14928 14933 + 14933 15220 15215 + 15215 15220 15216 + 15221 15216 15220 + 15222 15216 15221 + 15216 15222 15217 + 15217 15222 15223 + 15223 15218 15217 + 15224 15218 15223 + 15218 15224 15219 + 15220 14933 14938 + 14938 15225 15220 + 15220 15225 15221 + 15226 15221 15225 + 15227 15221 15226 + 15221 15227 15222 + 15222 15227 15228 + 15228 15223 15222 + 15229 15223 15228 + 15223 15229 15224 + 15225 14938 14943 + 14943 15230 15225 + 15225 15230 15226 + 15231 15226 15230 + 15232 15226 15231 + 15226 15232 15227 + 15227 15232 15233 + 15233 15228 15227 + 15234 15228 15233 + 15228 15234 15229 + 15230 14943 15235 + 15235 15236 15230 + 15230 15236 15231 + 15237 15231 15236 + 15238 15231 15237 + 15231 15238 15232 + 15232 15238 15239 + 15239 15233 15232 + 15235 14943 14942 + 14942 15240 15235 + 15241 15235 15240 + 15236 15235 15241 + 15241 15242 15236 + 15236 15242 15237 + 15243 15237 15242 + 15244 15237 15243 + 15237 15244 15238 + 14941 15240 14942 + 15240 14941 14948 + 14948 15245 15240 + 15240 15245 15241 + 15246 15241 15245 + 15242 15241 15246 + 15246 15247 15242 + 15242 15247 15243 + 15248 15243 15247 + 15249 15243 15248 + 15243 15249 15244 + 15245 14948 15250 + 15250 15251 15245 + 15245 15251 15246 + 15252 15246 15251 + 15247 15246 15252 + 15252 15253 15247 + 15247 15253 15248 + 15250 14948 14947 + 14947 15254 15250 + 15255 15250 15254 + 15251 15250 15255 + 15255 15256 15251 + 15251 15256 15252 + 15257 15252 15256 + 15253 15252 15257 + 14953 15254 14947 + 15254 14953 15258 + 15258 15259 15254 + 15254 15259 15255 + 15260 15255 15259 + 15256 15255 15260 + 15260 15261 15256 + 15256 15261 15257 + 15258 14953 15262 + 15262 15263 15258 + 15264 15258 15263 + 15259 15258 15264 + 15264 15265 15259 + 15259 15265 15260 + 15266 15260 15265 + 15261 15260 15266 + 14952 15262 14953 + 15267 15262 14952 + 15262 15267 15268 + 15268 15263 15262 + 15263 15268 15269 + 15269 15270 15263 + 15263 15270 15264 + 15271 15264 15270 + 15265 15264 15271 + 14952 14951 15267 + 15267 14951 15272 + 15272 15273 15267 + 15268 15267 15273 + 15273 15274 15268 + 15269 15268 15274 + 14957 15272 14951 + 15272 14957 15275 + 15275 15276 15272 + 15272 15276 15277 + 15277 15273 15272 + 15274 15273 15277 + 15275 14957 14956 + 14956 15278 15275 + 15275 15278 15279 + 15279 15280 15275 + 15276 15275 15280 + 15280 15281 15276 + 15277 15276 15281 + 14961 15278 14956 + 15278 14961 15282 + 15282 15279 15278 + 15279 15282 15283 + 15283 15284 15279 + 15279 15284 15285 + 15285 15280 15279 + 15281 15280 15285 + 15282 14961 14965 + 14965 15286 15282 + 15283 15282 15286 + 15286 15287 15283 + 15288 15283 15287 + 15284 15283 15288 + 15288 15289 15284 + 15284 15289 15290 + 15290 15285 15284 + 15291 15286 14965 + 15287 15286 15291 + 15291 15292 15287 + 15287 15292 15293 + 15293 15294 15287 + 15287 15294 15288 + 14965 14964 15291 + 15291 14964 15295 + 15295 15296 15291 + 15292 15291 15296 + 15296 15297 15292 + 15293 15292 15297 + 14969 15295 14964 + 14980 15295 14969 + 15295 14980 15298 + 15298 15296 15295 + 15297 15296 15298 + 15298 15299 15297 + 15297 15299 15300 + 15300 15301 15297 + 15297 15301 15293 + 15298 14980 15302 + 15302 15303 15298 + 15299 15298 15303 + 15303 15304 15299 + 15300 15299 15304 + 14979 15302 14980 + 15305 15302 14979 + 15302 15305 15306 + 15306 15303 15302 + 15304 15303 15306 + 15306 15307 15304 + 15304 15307 15308 + 15308 15309 15304 + 15304 15309 15300 + 14979 14984 15305 + 15305 14984 14989 + 14989 15310 15305 + 15306 15305 15310 + 15310 15311 15306 + 15307 15306 15311 + 15311 15312 15307 + 15308 15307 15312 + 15313 15310 14989 + 15310 15313 15314 + 15314 15311 15310 + 15312 15311 15314 + 15314 15315 15312 + 15312 15315 15316 + 15316 15317 15312 + 15312 15317 15308 + 14989 14988 15313 + 15313 14988 14998 + 14998 15318 15313 + 15314 15313 15318 + 15318 15319 15314 + 15319 15320 15314 + 15315 15314 15320 + 15320 15321 15315 + 15316 15315 15321 + 14997 15318 14998 + 15318 14997 15322 + 15322 15319 15318 + 15322 15323 15319 + 15319 15323 15324 + 15324 15320 15319 + 15321 15320 15324 + 15322 14997 14996 + 15325 15322 14996 + 15323 15322 15325 + 15325 15326 15323 + 15324 15323 15326 + 15326 15327 15324 + 15327 15328 15324 + 15329 15324 15328 + 15324 15329 15321 + 15330 15325 14996 + 15331 15325 15330 + 15325 15331 15326 + 15326 15331 15332 + 15332 15327 15326 + 15332 15333 15327 + 15327 15333 15334 + 15334 15328 15327 + 15006 15330 14996 + 15335 15330 15006 + 15330 15335 15336 + 15330 15336 15331 + 15332 15331 15336 + 15337 15332 15336 + 15333 15332 15337 + 15337 15338 15333 + 15334 15333 15338 + 15006 15011 15335 + 15339 15335 15011 + 15336 15335 15339 + 15339 15340 15336 + 15336 15340 15337 + 15341 15337 15340 + 15341 15338 15337 + 15338 15341 15342 + 15342 15343 15338 + 15338 15343 15334 + 15344 15339 15011 + 15345 15339 15344 + 15339 15345 15346 + 15346 15340 15339 + 15340 15346 15341 + 15341 15346 15347 + 15347 5158 15341 + 5158 15342 15341 + 15011 15015 15344 + 15348 15344 15015 + 15348 15349 15344 + 15344 15349 15345 + 15345 15349 15350 + 15350 15351 15345 + 15351 15352 15345 + 15346 15345 15352 + 15352 15347 15346 + 15015 15014 15348 + 15348 15014 1628 + 15353 15348 1628 + 15349 15348 15353 + 15353 15350 15349 + 1639 15350 15353 + 15350 1639 5146 + 5146 15351 15350 + 5145 15351 5146 + 15351 5145 15354 + 15354 15352 15351 + 15354 15347 15352 + 1628 1634 15353 + 1639 15353 1634 + 5153 15354 5145 + 15347 15354 5153 + 5153 5158 15347 + 14605 15355 14596 + 14596 15355 14597 + 248 7356 14280 + 248 14280 15356 + 15357 15358 13509 + 15359 15357 13509 + 7328 15357 15359 + 15360 15357 7328 + 7323 15359 13509 + 7322 15359 7323 + 15359 7322 7328 + 7409 15361 3363 + 15362 7409 3363 + 15363 14182 15364 + 15365 14182 15363 + 14182 15365 14220 + 14220 15366 14182 + 15363 15367 15365 + 14215 15365 15367 + 14220 15365 14215 + 15363 15368 15367 + 15367 15368 15369 + 15369 14216 15367 + 15367 14216 14215 + 15368 15363 15370 + 15370 250 15368 + 15369 15368 250 + 250 15371 15369 + 14211 15369 15371 + 15369 14211 14210 + 14210 14216 15369 + 13621 15371 250 + 13620 15371 13621 + 15371 13620 14211 + 250 214 13621 + 13755 15372 15373 + 15372 13761 15373 + 15374 1486 15375 + 1486 1485 15375 + 15376 15375 1485 + 1485 1484 15376 + 15377 15376 1484 + 15378 336 15379 + 15380 336 15378 + 15378 621 15380 + 15381 15382 3773 + 15383 3773 15382 + 3773 15383 3774 + 3774 15383 15384 + 15384 3788 3774 + 15382 15385 15383 + 15383 15385 495 + 495 15384 15383 + 15386 15384 495 + 3788 15384 15386 + 15386 15387 3788 + 3788 15387 3789 + 3819 3789 15387 + 3818 3789 3819 + 3789 3818 229 + 495 15388 15386 + 15386 15388 15389 + 15389 15390 15386 + 15387 15386 15390 + 15390 15391 15387 + 15387 15391 3819 + 3479 3819 15391 + 15392 15390 15389 + 15391 15390 15392 + 15391 15392 3479 + 3479 15392 15393 + 15393 15394 3479 + 15394 3480 3479 + 3481 3480 15394 + 15389 15395 15392 + 15392 15395 15393 + 15077 15393 15395 + 15077 15396 15393 + 15393 15396 15397 + 15397 15394 15393 + 15397 15398 15394 + 15394 15398 3481 + 3481 15398 3470 + 15389 15078 15395 + 15395 15078 15077 + 15078 15389 15079 + 15399 15079 15389 + 15070 15079 15399 + 15399 506 15070 + 15399 507 506 + 507 15399 15400 + 15400 15401 507 + 15402 15399 15389 + 15403 6 15404 + 6 15405 15404 + 15406 15407 15408 + 15409 15408 15407 + 15408 15409 15410 + 15407 15411 15409 + 15409 15411 15412 + 15412 15413 15409 + 15413 15414 15409 + 15414 15415 15409 + 15415 15410 15409 + 15416 15411 15407 + 15411 15416 15417 + 15417 15412 15411 + 15412 15417 442 + 15412 442 449 + 449 15413 15412 + 15416 15407 15418 + 15418 15419 15416 + 15416 15419 15420 + 15420 15417 15416 + 442 15417 15420 + 15420 15421 442 + 442 15421 435 + 15419 15418 15422 + 15419 15422 15423 + 15423 15424 15419 + 15419 15424 15420 + 15425 15420 15424 + 15420 15425 15421 + 15421 15425 15426 + 15426 15427 15421 + 15421 15427 435 + 15428 15424 15423 + 15424 15428 15425 + 15425 15428 15429 + 15426 15425 15429 + 15429 15430 15426 + 15431 15426 15430 + 15426 15431 15427 + 15428 15423 15432 + 15432 15429 15428 + 15433 15429 15432 + 15429 15433 1602 + 1602 15430 15429 + 1602 15434 15430 + 15430 15434 15431 + 15435 15431 15434 + 15427 15431 15435 + 15435 15436 15427 + 15427 15436 435 + 15436 15437 435 + 15437 436 435 + 438 436 15437 + 15434 1602 15096 + 15096 15438 15434 + 15434 15438 15435 + 15439 15435 15438 + 15435 15439 15436 + 15436 15439 15440 + 15440 15437 15436 + 15440 15441 15437 + 15437 15441 438 + 438 15441 15092 + 15093 15092 15441 + 15095 15438 15096 + 15438 15095 15439 + 15439 15095 15094 + 15440 15439 15094 + 15094 15093 15440 + 15441 15440 15093 + 448 15413 449 + 15413 448 15442 + 15442 15414 15413 + 15414 15442 15415 + 15415 15442 15443 + 15443 15444 15415 + 15410 15415 15444 + 15442 448 453 + 453 15443 15442 + 15445 15443 453 + 15444 15443 15445 + 15444 15445 15446 + 15446 15447 15444 + 15444 15447 15410 + 15448 15410 15447 + 15410 15448 15449 + 453 452 15445 + 15445 452 391 + 15446 15445 375 + 7742 15446 375 + 15450 15446 7742 + 15450 15447 15446 + 15447 15450 15448 + 15451 15448 15450 + 15452 15448 15451 + 15451 15453 15452 + 15453 15451 7750 + 7750 15454 15453 + 7742 7751 15450 + 15450 7751 15451 + 7750 15451 7751 + 15454 7750 7749 + 7749 15455 15454 + 15456 15455 7749 + 15457 15458 3030 + 3025 3030 15458 + 15458 186 3025 + 3025 186 15459 + 5800 3909 15460 + 15460 3878 5800 + 15461 15462 15463 + 15464 15462 15461 + 15464 15465 15462 + 15462 15465 15466 + 15466 15467 15462 + 15466 15468 15467 + 15461 15469 15464 + 15468 15466 15470 + 15470 15471 15468 + 15470 2086 15471 + 2086 15472 15471 + 3715 15473 15474 + 3704 15473 3715 + 3715 15475 3704 + 3704 15475 15476 + 15476 15477 3704 + 15477 3705 3704 + 15477 15478 3705 + 15479 15475 3715 + 15475 15479 15480 + 15480 15476 15475 + 3715 15481 15479 + 15479 15481 15482 + 15482 7652 15479 + 15479 7652 7651 + 15480 15479 7651 + 15481 3715 3714 + 3714 15483 15481 + 15483 15484 15481 + 15484 15482 15481 + 7646 15482 15484 + 7646 7652 15482 + 15484 15483 15485 + 7681 15484 15485 + 7647 15484 7681 + 15484 7647 7646 + 7681 7649 7647 + 7649 7681 7680 + 7680 15486 7649 + 7649 15486 15487 + 15488 7649 15487 + 7680 7679 15486 + 7657 15486 7679 + 15486 7657 15487 + 15489 7657 7679 + 15490 38 15491 + 15492 15490 15491 + 15493 15494 7731 + 15494 15495 7731 + 15357 15496 14279 + 14279 15497 15357 + 3442 15498 15499 + 15499 15500 3442 + 15501 1423 1414 + 1414 15502 15501 + 15501 15502 15503 + 15503 1505 15501 + 1504 15501 1505 + 1507 15501 1504 + 15502 1414 1413 + 1413 1419 15502 + 15502 1419 1418 + 1418 15503 15502 + 20 15503 1418 + 15503 20 1506 + 1506 1505 15503 + 15504 1506 20 + 15505 4962 15506 + 15506 15507 15505 + 15508 15509 3705 + 15510 15508 3705 + 15511 15512 15513 + 15514 15513 15512 + 14635 15513 15514 + 15513 14635 14634 + 14634 15515 15513 + 15513 15515 15516 + 15517 15516 15515 + 15512 15518 15514 + 15514 15518 15519 + 15519 14628 15514 + 14635 15514 14628 + 14634 14633 15515 + 15515 14633 15517 + 14586 15517 14633 + 14585 15517 14586 + 15517 14585 14591 + 14591 15520 15517 + 7763 15521 15522 + 15522 15523 7763 + 15523 15522 15524 + 15525 15523 15524 + 15525 15524 7677 + 7677 15526 15525 + 15527 15525 15526 + 15528 15527 15526 + 15526 7676 15528 + 7676 15526 7677 + 15398 15529 3470 + 15530 15529 15398 + 15531 15529 15530 + 15529 15531 3471 + 3471 3470 15529 + 15398 15397 15530 + 15532 15530 15397 + 15531 15530 15532 + 15532 15533 15531 + 3471 15531 15533 + 15534 15532 15397 + 15029 15532 15534 + 15533 15532 15029 + 15397 15396 15534 + 15535 15534 15396 + 15536 15534 15535 + 15534 15536 15029 + 15029 15536 15537 + 15536 15538 15537 + 15076 15538 15536 + 15396 15077 15535 + 15076 15535 15077 + 15536 15535 15076 + 15539 15342 5158 + 15342 15539 15540 + 15540 15343 15342 + 15343 15540 15541 + 15541 15542 15343 + 15343 15542 15334 + 5158 5157 15539 + 15539 5157 5156 + 5156 15543 15539 + 15540 15539 15543 + 15543 15544 15540 + 15541 15540 15544 + 15544 15545 15541 + 15546 15541 15545 + 15541 15546 15547 + 15547 15542 15541 + 5167 15543 5156 + 15544 15543 5167 + 5167 15548 15544 + 15544 15548 15549 + 15549 15545 15544 + 15550 15545 15549 + 15545 15550 15546 + 15551 15546 15550 + 15547 15546 15551 + 15548 5167 15552 + 15552 15553 15548 + 15549 15548 15553 + 15553 15554 15549 + 15555 15549 15554 + 15549 15555 15550 + 5166 15552 5167 + 15556 15552 5166 + 15552 15556 15557 + 15557 15553 15552 + 15553 15557 15558 + 15558 15554 15553 + 15559 15554 15558 + 15554 15559 15555 + 15560 15555 15559 + 15550 15555 15560 + 5166 5165 15556 + 15556 5165 5164 + 5164 15561 15556 + 15557 15556 15561 + 15561 15562 15557 + 15558 15557 15562 + 15562 15563 15558 + 15563 15564 15558 + 15565 15558 15564 + 15558 15565 15559 + 5174 15561 5164 + 15561 5174 15562 + 15562 5174 15566 + 15566 15563 15562 + 15563 15566 15567 + 15567 15568 15563 + 15563 15568 15569 + 15569 15564 15563 + 15570 15564 15569 + 15564 15570 15565 + 5179 15566 5174 + 15567 15566 5179 + 5179 5183 15567 + 15571 15567 5183 + 15568 15567 15571 + 15571 15572 15568 + 15569 15568 15572 + 15572 15573 15569 + 15574 15569 15573 + 15569 15574 15570 + 5183 5182 15571 + 15575 15571 5182 + 15572 15571 15575 + 15575 15576 15572 + 15572 15576 15577 + 15577 15573 15572 + 15578 15573 15577 + 15573 15578 15574 + 15579 15574 15578 + 15570 15574 15579 + 5182 5187 15575 + 15580 15575 5187 + 15576 15575 15580 + 15580 15581 15576 + 15577 15576 15581 + 15581 15582 15577 + 15583 15577 15582 + 15577 15583 15578 + 5187 15584 15580 + 15585 15580 15584 + 15581 15580 15585 + 15585 15586 15581 + 15581 15586 15587 + 15587 15582 15581 + 15588 15582 15587 + 15582 15588 15583 + 5186 15584 5187 + 15589 15584 5186 + 15584 15589 15585 + 15590 15585 15589 + 15586 15585 15590 + 15590 15591 15586 + 15587 15586 15591 + 15591 15592 15587 + 15593 15587 15592 + 15587 15593 15588 + 5186 15594 15589 + 15589 15594 15595 + 15595 15596 15589 + 15589 15596 15590 + 15597 15590 15596 + 15591 15590 15597 + 15594 5186 5191 + 5191 15598 15594 + 15595 15594 15598 + 15598 15599 15595 + 15600 15595 15599 + 15595 15600 15601 + 15601 15596 15595 + 15596 15601 15597 + 15602 15598 5191 + 15598 15602 15603 + 15603 15599 15598 + 15599 15603 15604 + 15604 15605 15599 + 15599 15605 15600 + 15606 15600 15605 + 15601 15600 15606 + 5191 5190 15602 + 15602 5190 15607 + 15607 15608 15602 + 15603 15602 15608 + 15608 15609 15603 + 15604 15603 15609 + 15609 15610 15604 + 15611 15604 15610 + 15605 15604 15611 + 5195 15607 5190 + 15612 15607 5195 + 15607 15612 15613 + 15613 15608 15607 + 15608 15613 15614 + 15614 15609 15608 + 15609 15614 15615 + 15615 15610 15609 + 5195 5200 15612 + 15612 5200 15616 + 15616 15617 15612 + 15613 15612 15617 + 15617 15618 15613 + 15614 15613 15618 + 15618 15619 15614 + 15615 15614 15619 + 5205 15616 5200 + 15620 15616 5205 + 15616 15620 15621 + 15621 15617 15616 + 15617 15621 15622 + 15622 15618 15617 + 15618 15622 15623 + 15623 15619 15618 + 5205 5210 15620 + 15620 5210 15624 + 15624 15625 15620 + 15621 15620 15625 + 15625 15626 15621 + 15622 15621 15626 + 15626 15627 15622 + 15623 15622 15627 + 5215 15624 5210 + 15628 15624 5215 + 15624 15628 15629 + 15629 15625 15624 + 15625 15629 15630 + 15630 15626 15625 + 15626 15630 15631 + 15631 15627 15626 + 5215 15632 15628 + 15628 15632 15633 + 15633 15634 15628 + 15629 15628 15634 + 15634 15635 15629 + 15630 15629 15635 + 15635 15636 15630 + 15631 15630 15636 + 15632 5215 5214 + 5214 15637 15632 + 15632 15637 15638 + 15638 15633 15632 + 15639 15633 15638 + 15633 15639 15640 + 15640 15634 15633 + 15634 15640 15641 + 15641 15635 15634 + 15637 5214 15642 + 15642 15643 15637 + 15638 15637 15643 + 15643 15644 15638 + 15645 15638 15644 + 15638 15645 15639 + 5213 15642 5214 + 5224 15642 5213 + 15643 15642 5224 + 5224 15646 15643 + 15643 15646 15647 + 15647 15644 15643 + 15648 15644 15647 + 15644 15648 15645 + 15649 15645 15648 + 15639 15645 15649 + 15646 5224 15650 + 15650 15651 15646 + 15647 15646 15651 + 15651 15652 15647 + 15653 15647 15652 + 15647 15653 15648 + 5223 15650 5224 + 15654 15650 5223 + 15651 15650 15654 + 15654 15655 15651 + 15651 15655 15656 + 15656 15652 15651 + 15657 15652 15656 + 15652 15657 15653 + 5223 5229 15654 + 15654 5229 15658 + 15658 15659 15654 + 15655 15654 15659 + 15659 15660 15655 + 15656 15655 15660 + 15660 15661 15656 + 15662 15656 15661 + 15656 15662 15657 + 5228 15658 5229 + 15658 5228 5234 + 5234 15663 15658 + 15658 15663 15664 + 15664 15659 15658 + 15660 15659 15664 + 15664 15665 15660 + 15660 15665 15666 + 15666 15661 15660 + 15667 15661 15666 + 15661 15667 15662 + 15663 5234 15668 + 15668 15669 15663 + 15664 15663 15669 + 15669 15670 15664 + 15665 15664 15670 + 15670 15671 15665 + 15666 15665 15671 + 15672 15668 5234 + 15673 15668 15672 + 15669 15668 15673 + 15673 15674 15669 + 15669 15674 15675 + 15675 15670 15669 + 15671 15670 15675 + 5234 5233 15672 + 5239 15672 5233 + 15672 5239 15676 + 15676 15677 15672 + 15672 15677 15673 + 15673 15677 15678 + 15678 15679 15673 + 15674 15673 15679 + 15679 15680 15674 + 15675 15674 15680 + 15676 5239 5238 + 5238 15681 15676 + 15676 15681 15682 + 15682 15683 15676 + 15677 15676 15683 + 15683 15678 15677 + 5243 15681 5238 + 15681 5243 15684 + 15684 15682 15681 + 15682 15684 15685 + 15685 15686 15682 + 15682 15686 15687 + 15687 15683 15682 + 15678 15683 15687 + 5248 15684 5243 + 15685 15684 5248 + 5248 15688 15685 + 15685 15688 15689 + 15689 15690 15685 + 15686 15685 15690 + 15690 15691 15686 + 15687 15686 15691 + 15688 5248 5247 + 5247 15692 15688 + 15688 15692 15693 + 15693 15689 15688 + 15694 15689 15693 + 15689 15694 15695 + 15695 15690 15689 + 15691 15690 15695 + 15692 5247 15696 + 15696 15697 15692 + 15692 15697 15698 + 15698 15693 15692 + 15699 15693 15698 + 15693 15699 15694 + 5252 15696 5247 + 15700 15696 5252 + 15697 15696 15700 + 15700 15701 15697 + 15697 15701 15702 + 15702 15698 15697 + 15703 15698 15702 + 15698 15703 15699 + 5252 5251 15700 + 15704 15700 5251 + 15701 15700 15704 + 15704 15705 15701 + 15701 15705 15706 + 15706 15702 15701 + 15707 15702 15706 + 15702 15707 15703 + 5251 5260 15704 + 15708 15704 5260 + 15704 15708 15709 + 15709 15705 15704 + 15705 15709 15710 + 15710 15706 15705 + 15706 15710 15711 + 15711 15712 15706 + 15706 15712 15707 + 5260 5259 15708 + 15708 5259 15713 + 15713 15714 15708 + 15709 15708 15714 + 15714 15715 15709 + 15710 15709 15715 + 15715 15716 15710 + 15711 15710 15716 + 5264 15713 5259 + 15717 15713 5264 + 15713 15717 15718 + 15718 15714 15713 + 15714 15718 15719 + 15719 15715 15714 + 15715 15719 15720 + 15720 15716 15715 + 5264 5268 15717 + 15717 5268 15721 + 15721 15722 15717 + 15722 15718 15717 + 15719 15718 15722 + 15722 15723 15719 + 15719 15723 15724 + 15720 15719 15724 + 5272 15721 5268 + 15723 15721 5272 + 15722 15721 15723 + 5272 15724 15723 + 5276 15724 5272 + 15724 5276 15725 + 15725 15726 15724 + 15724 15726 15720 + 15727 15720 15726 + 15716 15720 15727 + 15727 15728 15716 + 15716 15728 15711 + 15729 15711 15728 + 15712 15711 15729 + 15725 5276 5275 + 15730 15725 5275 + 15731 15725 15730 + 15731 15726 15725 + 15726 15731 15727 + 15731 15732 15727 + 15728 15727 15732 + 15732 15733 15728 + 15728 15733 15729 + 5275 5285 15730 + 15734 15730 5285 + 15730 15734 15733 + 15733 15732 15730 + 15730 15732 15731 + 5285 5284 15734 + 15734 5284 15735 + 15735 15736 15734 + 15733 15734 15736 + 15736 15729 15733 + 15729 15736 15737 + 15737 15738 15729 + 15729 15738 15712 + 15707 15712 15738 + 15739 15735 5284 + 15735 15739 15740 + 15740 15741 15735 + 15735 15741 15737 + 15737 15736 15735 + 5284 5283 15739 + 5290 15739 5283 + 15740 15739 5290 + 5290 5320 15740 + 15742 15740 5320 + 15741 15740 15742 + 15742 15743 15741 + 15741 15743 15744 + 15744 15737 15741 + 15738 15737 15744 + 15744 15745 15738 + 15738 15745 15707 + 15703 15707 15745 + 5320 5325 15742 + 15746 15742 5325 + 15743 15742 15746 + 15746 15747 15743 + 15743 15747 15748 + 15748 15744 15743 + 15745 15744 15748 + 15748 15749 15745 + 15745 15749 15703 + 15699 15703 15749 + 5325 5324 15746 + 15750 15746 5324 + 15747 15746 15750 + 15750 15751 15747 + 15747 15751 15752 + 15752 15748 15747 + 15749 15748 15752 + 15752 15753 15749 + 15749 15753 15699 + 15694 15699 15753 + 5324 5330 15750 + 15754 15750 5330 + 15750 15754 15755 + 15755 15751 15750 + 15751 15755 15756 + 15756 15752 15751 + 15752 15756 15757 + 15757 15753 15752 + 15753 15757 15694 + 15695 15694 15757 + 5330 5329 15754 + 15758 15754 5329 + 15755 15754 15758 + 15758 15759 15755 + 15755 15759 15760 + 15760 15756 15755 + 15757 15756 15760 + 15760 15761 15757 + 15757 15761 15695 + 15762 15695 15761 + 15695 15762 15691 + 5329 15763 15758 + 15763 15764 15758 + 15765 15758 15764 + 15758 15765 15766 + 15766 15759 15758 + 15759 15766 15767 + 15767 15760 15759 + 5334 15763 5329 + 15768 15763 5334 + 15763 15768 15769 + 15769 15764 15763 + 15770 15764 15769 + 15764 15770 15765 + 15771 15765 15770 + 15766 15765 15771 + 5334 5339 15768 + 15768 5339 15772 + 15772 15773 15768 + 15768 15773 15774 + 15774 15769 15768 + 15775 15769 15774 + 15769 15775 15770 + 5344 15772 5339 + 6876 15772 5344 + 15773 15772 6876 + 6876 15776 15773 + 15773 15776 15777 + 15777 15774 15773 + 15778 15774 15777 + 15774 15778 15775 + 15775 15778 15779 + 15780 15775 15779 + 15770 15775 15780 + 15776 6876 6875 + 6875 15781 15776 + 15776 15781 15782 + 15782 15777 15776 + 15778 15777 15782 + 15782 15779 15778 + 15783 15779 15782 + 15779 15783 15784 + 15784 15785 15779 + 15779 15785 15780 + 6880 15781 6875 + 15781 6880 6889 + 6889 15782 15781 + 15782 6889 15783 + 15783 6889 6888 + 6888 6894 15783 + 15783 6894 15786 + 15786 15784 15783 + 15787 15784 15786 + 15784 15787 15788 + 15788 15785 15784 + 15785 15788 15789 + 15789 15780 15785 + 15790 15786 6894 + 15791 15786 15790 + 15786 15791 15787 + 15792 15787 15791 + 15788 15787 15792 + 15792 15793 15788 + 15788 15793 15794 + 15794 15789 15788 + 6894 6893 15790 + 15790 6893 6899 + 6899 6917 15790 + 15795 15790 6917 + 15790 15795 15791 + 15791 15795 15796 + 15796 15797 15791 + 15791 15797 15792 + 15798 15792 15797 + 15792 15798 15799 + 15799 15793 15792 + 6917 6916 15795 + 15796 15795 6916 + 6916 15800 15796 + 15801 15796 15800 + 15796 15801 15802 + 15802 15797 15796 + 15797 15802 15798 + 15803 15798 15802 + 15799 15798 15803 + 6915 15800 6916 + 6926 15800 6915 + 15800 6926 15801 + 15804 15801 6926 + 15802 15801 15804 + 15804 15805 15802 + 15802 15805 15803 + 15806 15803 15805 + 15803 15806 15807 + 15807 15808 15803 + 15803 15808 15799 + 6926 15809 15804 + 15810 15804 15809 + 15804 15810 15811 + 15811 15805 15804 + 15805 15811 15806 + 15812 15806 15811 + 15807 15806 15812 + 6925 15809 6926 + 15813 15809 6925 + 15809 15813 15810 + 15814 15810 15813 + 15811 15810 15814 + 15814 15815 15811 + 15811 15815 15812 + 6925 15816 15813 + 15813 15816 15817 + 15817 15818 15813 + 15813 15818 15814 + 15819 15814 15818 + 15814 15819 15820 + 15820 15815 15814 + 15816 6925 6924 + 6924 6931 15816 + 15817 15816 6931 + 6931 15821 15817 + 15822 15817 15821 + 15817 15822 15823 + 15823 15818 15817 + 15818 15823 15819 + 15819 15823 15824 + 15824 15825 15819 + 15820 15819 15825 + 6935 15821 6931 + 15826 15821 6935 + 15821 15826 15822 + 15822 15826 15827 + 15827 15828 15822 + 15823 15822 15828 + 15828 15824 15823 + 15824 15828 15829 + 15824 15829 15830 + 15830 15825 15824 + 6935 15831 15826 + 15826 15831 15832 + 15832 15827 15826 + 15827 15832 15833 + 15833 15834 15827 + 15827 15834 15829 + 15829 15828 15827 + 15831 6935 6938 + 6938 6943 15831 + 15831 6943 6952 + 6952 15832 15831 + 15833 15832 6952 + 6952 15835 15833 + 15836 15833 15835 + 15834 15833 15836 + 15836 15837 15834 + 15834 15837 15838 + 15829 15834 15838 + 15838 15830 15829 + 6951 15835 6952 + 15835 6951 15839 + 15839 15840 15835 + 15835 15840 15836 + 15841 15836 15840 + 15836 15841 15837 + 15837 15841 15842 + 15842 15838 15837 + 15839 6951 6957 + 6957 15843 15839 + 15844 15839 15843 + 15840 15839 15844 + 15844 15845 15840 + 15840 15845 15841 + 15841 15845 15846 + 15846 15842 15841 + 6962 15843 6957 + 6962 15847 15843 + 15843 15847 15844 + 15848 15844 15847 + 15845 15844 15848 + 15848 15849 15845 + 15845 15849 15846 + 15847 6962 15850 + 15850 15851 15847 + 15847 15851 15848 + 15851 15852 15848 + 15853 15848 15852 + 15849 15848 15853 + 6961 15850 6962 + 6967 15850 6961 + 15850 6967 15854 + 15854 15851 15850 + 15851 15854 15855 + 15855 15852 15851 + 15852 15855 15856 + 15856 15857 15852 + 15852 15857 15853 + 15854 6967 6972 + 6972 15858 15854 + 15855 15854 15858 + 15858 15859 15855 + 15856 15855 15859 + 15860 15858 6972 + 15858 15860 15861 + 15861 15859 15858 + 15861 15862 15859 + 15859 15862 15856 + 6972 6971 15860 + 15860 6971 6977 + 6977 15863 15860 + 15861 15860 15863 + 15863 15864 15861 + 15862 15861 15864 + 15864 15865 15862 + 15856 15862 15865 + 15865 15866 15856 + 15866 15867 15856 + 15857 15856 15867 + 15868 15863 6977 + 15863 15868 15869 + 15869 15864 15863 + 15864 15869 15870 + 15870 15865 15864 + 15865 15870 15871 + 15871 15866 15865 + 6977 6976 15868 + 15868 6976 6989 + 6989 15872 15868 + 15869 15868 15872 + 15872 15873 15869 + 15870 15869 15873 + 15873 15874 15870 + 15870 15874 15875 + 15875 15871 15870 + 15876 15871 15875 + 15866 15871 15876 + 15877 15872 6989 + 15872 15877 15878 + 15878 15873 15872 + 15873 15878 15879 + 15879 15874 15873 + 15874 15879 15880 + 15880 15875 15874 + 6989 6988 15877 + 15877 6988 15881 + 15881 15882 15877 + 15878 15877 15882 + 15882 15883 15878 + 15879 15878 15883 + 15883 15884 15879 + 15879 15884 15885 + 15885 15880 15879 + 6997 15881 6988 + 7006 15881 6997 + 15881 7006 15886 + 15886 15882 15881 + 15882 15886 15887 + 15887 15883 15882 + 15883 15887 15888 + 15888 15884 15883 + 15884 15888 15889 + 15889 15885 15884 + 15886 7006 15890 + 15890 15891 15886 + 15887 15886 15891 + 15891 15892 15887 + 15888 15887 15892 + 15892 15893 15888 + 15888 15893 15894 + 15894 15889 15888 + 7015 15890 7006 + 15895 15890 7015 + 15890 15895 15896 + 15896 15891 15890 + 15891 15896 15897 + 15897 15892 15891 + 15893 15892 15897 + 15897 15898 15893 + 15893 15898 15899 + 15899 15894 15893 + 7015 7020 15895 + 15895 7020 15900 + 15900 15901 15895 + 15896 15895 15901 + 15901 15902 15896 + 15896 15902 15903 + 15903 15897 15896 + 15898 15897 15903 + 15903 15904 15898 + 15899 15898 15904 + 7025 15900 7020 + 15905 15900 7025 + 15900 15905 15906 + 15906 15901 15900 + 15901 15906 15907 + 15907 15902 15901 + 15902 15907 15908 + 15908 15903 15902 + 15903 15908 15909 + 15909 15904 15903 + 7025 15910 15905 + 15905 15910 15911 + 15911 15912 15905 + 15906 15905 15912 + 15912 15913 15906 + 15907 15906 15913 + 15913 15914 15907 + 15908 15907 15914 + 15910 7025 7024 + 7024 15915 15910 + 15910 15915 15916 + 15916 15911 15910 + 15917 15911 15916 + 15911 15917 15918 + 15918 15912 15911 + 15912 15918 15919 + 15919 15913 15912 + 7029 15915 7024 + 15915 7029 15920 + 15920 15916 15915 + 15916 15920 15921 + 15921 15922 15916 + 15916 15922 15917 + 15917 15922 15923 + 15923 15924 15917 + 15918 15917 15924 + 7034 15920 7029 + 15921 15920 7034 + 7034 15925 15921 + 15921 15925 15926 + 15926 15927 15921 + 15922 15921 15927 + 15927 15923 15922 + 15928 15925 7034 + 15925 15928 15929 + 15929 15926 15925 + 15926 15929 15930 + 15930 15931 15926 + 15926 15931 15932 + 15932 15927 15926 + 15923 15927 15932 + 7034 7033 15928 + 15928 7033 7032 + 7032 15933 15928 + 15928 15933 15934 + 15934 15929 15928 + 15930 15929 15934 + 15934 15935 15930 + 15930 15935 15936 + 15936 15937 15930 + 15931 15930 15937 + 7041 15933 7032 + 15933 7041 15938 + 15938 15934 15933 + 15934 15938 15939 + 15939 15935 15934 + 15935 15939 15940 + 15940 15936 15935 + 7045 15938 7041 + 15939 15938 7045 + 7045 15941 15939 + 15939 15941 15942 + 15942 15940 15939 + 15943 15940 15942 + 15936 15940 15943 + 15943 15944 15936 + 15936 15944 15945 + 15945 15937 15936 + 7049 15941 7045 + 15941 7049 15946 + 15946 15942 15941 + 15942 15946 15947 + 15947 15948 15942 + 15942 15948 15943 + 15943 15948 15949 + 15949 15950 15943 + 15944 15943 15950 + 7054 15946 7049 + 15947 15946 7054 + 7054 15951 15947 + 15947 15951 15952 + 15952 15953 15947 + 15948 15947 15953 + 15953 15949 15948 + 7058 15951 7054 + 15951 7058 15954 + 15954 15952 15951 + 15952 15954 15955 + 15955 15956 15952 + 15952 15956 15957 + 15957 15953 15952 + 15949 15953 15957 + 7062 15954 7058 + 15955 15954 7062 + 7062 7066 15955 + 15955 7066 15958 + 15958 15959 15955 + 15956 15955 15959 + 15959 15960 15956 + 15957 15956 15960 + 15960 15961 15957 + 15962 15957 15961 + 15957 15962 15949 + 7070 15958 7066 + 15963 15958 7070 + 15958 15963 15964 + 15964 15959 15958 + 15960 15959 15964 + 15964 15965 15960 + 15960 15965 15966 + 15966 15961 15960 + 15967 15961 15966 + 15961 15967 15962 + 7070 7074 15963 + 15963 7074 15968 + 15968 15969 15963 + 15964 15963 15969 + 15969 15970 15964 + 15965 15964 15970 + 15970 15971 15965 + 15966 15965 15971 + 7079 15968 7074 + 15972 15968 7079 + 15968 15972 15973 + 15973 15969 15968 + 15969 15973 15974 + 15974 15970 15969 + 15971 15970 15974 + 7079 15975 15972 + 15972 15975 15976 + 15976 15977 15972 + 15973 15972 15977 + 15977 15978 15973 + 15974 15973 15978 + 15975 7079 7078 + 7078 7088 15975 + 15975 7088 15979 + 15979 15976 15975 + 15976 15979 15980 + 15980 15981 15976 + 15976 15981 15982 + 15982 15977 15976 + 15977 15982 15983 + 15983 15978 15977 + 15984 15979 7088 + 15980 15979 15984 + 15984 15985 15980 + 15986 15980 15985 + 15981 15980 15986 + 15986 15987 15981 + 15981 15987 15988 + 15988 15982 15981 + 15983 15982 15988 + 7088 7087 15984 + 15989 15984 7087 + 15984 15989 15990 + 15990 15985 15984 + 15985 15990 15991 + 15991 15992 15985 + 15985 15992 15986 + 7087 7092 15989 + 15993 15989 7092 + 15990 15989 15993 + 15993 15994 15990 + 15991 15990 15994 + 15994 15995 15991 + 15996 15991 15995 + 15991 15996 15997 + 15997 15992 15991 + 7092 7096 15993 + 15998 15993 7096 + 15993 15998 15999 + 15999 15994 15993 + 15994 15999 16000 + 16000 15995 15994 + 16001 15995 16000 + 15995 16001 15996 + 7096 7100 15998 + 16002 15998 7100 + 15999 15998 16002 + 16002 16003 15999 + 15999 16003 16004 + 16000 15999 16004 + 16004 16005 16000 + 16006 16000 16005 + 16000 16006 16001 + 7100 7104 16002 + 16007 16002 7104 + 16002 16007 16008 + 16008 16003 16002 + 16003 16008 16009 + 16009 16004 16003 + 16010 16004 16009 + 16004 16010 16011 + 16011 16005 16004 + 7104 7108 16007 + 16012 16007 7108 + 16008 16007 16012 + 16012 16013 16008 + 16009 16008 16013 + 7108 7112 16012 + 16014 16012 7112 + 16012 16014 16013 + 16013 16014 7171 + 7171 16015 16013 + 16013 16015 16009 + 7112 7116 16014 + 7171 16014 7116 + 7170 16015 7171 + 16015 7170 7176 + 7176 16016 16015 + 16015 16016 16009 + 16016 16017 16009 + 16018 16009 16017 + 16009 16018 16010 + 16016 7176 16019 + 16019 16020 16016 + 16016 16020 16021 + 16021 16017 16016 + 16021 16022 16017 + 16017 16022 16018 + 16019 7176 7175 + 7175 16023 16019 + 16019 16023 16024 + 16024 16025 16019 + 16020 16019 16025 + 16025 16026 16020 + 16021 16020 16026 + 16026 16027 16021 + 16022 16021 16027 + 7174 16023 7175 + 16023 7174 16028 + 16028 16024 16023 + 16029 16024 16028 + 16024 16029 16030 + 16030 16025 16024 + 16025 16030 16031 + 16031 16026 16025 + 16026 16031 16032 + 16032 16027 16026 + 7180 16028 7174 + 7189 16028 7180 + 16028 7189 16029 + 16029 7189 16033 + 16033 16034 16029 + 16030 16029 16034 + 16034 16035 16030 + 16031 16030 16035 + 16035 16036 16031 + 16032 16031 16036 + 7188 16033 7189 + 16037 16033 7188 + 16033 16037 16038 + 16038 16034 16033 + 16034 16038 16039 + 16039 16035 16034 + 16035 16039 16040 + 16040 16036 16035 + 7188 7193 16037 + 16037 7193 16041 + 16041 16042 16037 + 16038 16037 16042 + 16042 16043 16038 + 16039 16038 16043 + 16043 16044 16039 + 16040 16039 16044 + 7197 16041 7193 + 16045 16041 7197 + 16041 16045 16046 + 16046 16042 16041 + 16042 16046 16047 + 16047 16043 16042 + 16043 16047 16048 + 16048 16044 16043 + 7197 7201 16045 + 16045 7201 16049 + 16049 16050 16045 + 16046 16045 16050 + 16050 16051 16046 + 16047 16046 16051 + 16051 16052 16047 + 16048 16047 16052 + 7205 16049 7201 + 16053 16049 7205 + 16049 16053 16054 + 16054 16050 16049 + 16050 16054 16055 + 16055 16051 16050 + 16051 16055 16056 + 16056 16052 16051 + 7205 7210 16053 + 16053 7210 16057 + 16057 16058 16053 + 16054 16053 16058 + 16058 16059 16054 + 16055 16054 16059 + 16059 16060 16055 + 16056 16055 16060 + 7214 16057 7210 + 16057 7214 7219 + 7219 16061 16057 + 16057 16061 16062 + 16062 16058 16057 + 16058 16062 16063 + 16063 16059 16058 + 16059 16063 16064 + 16064 16060 16059 + 16061 7219 16065 + 16065 16066 16061 + 16062 16061 16066 + 16066 16067 16062 + 16063 16062 16067 + 16067 16068 16063 + 16064 16063 16068 + 16069 16065 7219 + 16070 16065 16069 + 16066 16065 16070 + 16067 16066 16070 + 16071 16067 16070 + 16067 16071 16068 + 16069 7219 7224 + 7224 16072 16069 + 16073 16069 16072 + 16074 16069 16073 + 16069 16074 16070 + 16071 16070 16074 + 16074 16075 16071 + 16076 16071 16075 + 16071 16076 16068 + 16077 16072 7224 + 16078 16072 16077 + 16072 16078 16073 + 16073 16078 16079 + 16079 16080 16073 + 16074 16073 16080 + 16080 16075 16074 + 7224 16081 16077 + 16077 16081 16082 + 16082 16083 16077 + 16084 16077 16083 + 16077 16084 16078 + 16078 16084 16085 + 16085 16079 16078 + 7234 16081 7224 + 16081 7234 16086 + 16086 16082 16081 + 16087 16082 16086 + 16082 16087 16088 + 16088 16083 16082 + 16083 16088 16089 + 16089 16090 16083 + 16083 16090 16084 + 7238 16086 7234 + 16091 16086 7238 + 16086 16091 16087 + 16087 16091 16092 + 16092 16093 16087 + 16087 16093 16094 + 16094 16088 16087 + 16089 16088 16094 + 7238 7243 16091 + 16092 16091 7243 + 7243 16095 16092 + 16096 16092 16095 + 16092 16096 16097 + 16097 16093 16092 + 16093 16097 16098 + 16098 16094 16093 + 13817 16095 7243 + 13826 16095 13817 + 16095 13826 16096 + 16099 16096 13826 + 16097 16096 16099 + 16099 16100 16097 + 16097 16100 16101 + 16101 16098 16097 + 16102 16098 16101 + 16094 16098 16102 + 16102 16103 16094 + 16094 16103 16089 + 13826 13825 16099 + 13831 16099 13825 + 16099 13831 16104 + 16104 16100 16099 + 16100 16104 16105 + 16105 16101 16100 + 16101 16105 16106 + 16106 16107 16101 + 16101 16107 16102 + 16104 13831 13830 + 13830 16108 16104 + 16104 16108 16109 + 16109 16105 16104 + 16106 16105 16109 + 16109 16110 16106 + 16106 16110 16111 + 16111 16112 16106 + 16107 16106 16112 + 13840 16108 13830 + 16108 13840 16113 + 16113 16109 16108 + 16109 16113 16114 + 16114 16110 16109 + 16110 16114 16115 + 16115 16111 16110 + 16116 16113 13840 + 16114 16113 16116 + 16116 16117 16114 + 16114 16117 16118 + 16118 16115 16114 + 16119 16115 16118 + 16111 16115 16119 + 13840 13845 16116 + 16120 16116 13845 + 16120 16117 16116 + 16117 16120 16121 + 16121 16118 16117 + 16122 16118 16121 + 16118 16122 16119 + 13845 16123 16120 + 16120 16123 16124 + 16121 16120 16124 + 16124 16125 16121 + 16126 16121 16125 + 16121 16126 16122 + 13844 16123 13845 + 16123 13844 13850 + 13850 16124 16123 + 16124 13850 16127 + 16127 16128 16124 + 16124 16128 16129 + 16129 16125 16124 + 16130 16125 16129 + 16125 16130 16126 + 16131 16126 16130 + 16122 16126 16131 + 16127 13850 13849 + 13849 16132 16127 + 16127 16132 16133 + 16133 16134 16127 + 16128 16127 16134 + 16134 16135 16128 + 16128 16135 16136 + 16136 16129 16128 + 13855 16132 13849 + 16132 13855 16137 + 16137 16133 16132 + 16138 16133 16137 + 16133 16138 16139 + 16139 16134 16133 + 16134 16139 16140 + 16140 16135 16134 + 16135 16140 16141 + 16141 16136 16135 + 16137 13855 13860 + 13860 16142 16137 + 16143 16137 16142 + 16137 16143 16138 + 16138 16143 16144 + 16144 16145 16138 + 16138 16145 16146 + 16146 16139 16138 + 16140 16139 16146 + 13859 16142 13860 + 16147 16142 13859 + 16142 16147 16143 + 16144 16143 16147 + 16147 16148 16144 + 16149 16144 16148 + 16144 16149 16150 + 16150 16145 16144 + 16145 16150 16151 + 16151 16146 16145 + 13859 16152 16147 + 16147 16152 16153 + 16153 16148 16147 + 16154 16148 16153 + 16148 16154 16149 + 16155 16149 16154 + 16150 16149 16155 + 16152 13859 13858 + 13858 13865 16152 + 16153 16152 13865 + 13865 16156 16153 + 16157 16153 16156 + 16153 16157 16154 + 16154 16157 16158 + 16158 16159 16154 + 16154 16159 16155 + 16160 16156 13865 + 16161 16156 16160 + 16156 16161 16157 + 16158 16157 16161 + 16161 16162 16158 + 16163 16158 16162 + 16158 16163 16164 + 16164 16159 16158 + 13865 13864 16160 + 16160 13864 13870 + 13870 16165 16160 + 16166 16160 16165 + 16160 16166 16161 + 16161 16166 16167 + 16167 16162 16161 + 16168 16162 16167 + 16162 16168 16163 + 16169 16163 16168 + 16164 16163 16169 + 13874 16165 13870 + 16170 16165 13874 + 16165 16170 16166 + 16167 16166 16170 + 16170 16171 16167 + 16172 16167 16171 + 16167 16172 16168 + 16168 16172 16173 + 16173 16174 16168 + 16168 16174 16169 + 13874 16175 16170 + 16170 16175 14011 + 14011 16171 16170 + 14015 16171 14011 + 16171 14015 16172 + 16173 16172 14015 + 16175 13874 13879 + 13879 13884 16175 + 14011 16175 13884 + 14015 16176 16173 + 14014 16176 14015 + 14020 16176 14014 + 16176 14020 16177 + 16177 16173 16176 + 16173 16177 16178 + 16178 16174 16173 + 16174 16178 16179 + 16179 16169 16174 + 16169 16179 16180 + 16180 16181 16169 + 16169 16181 16164 + 16177 14020 16182 + 16182 16183 16177 + 16178 16177 16183 + 16183 16184 16178 + 16179 16178 16184 + 16184 16185 16179 + 16180 16179 16185 + 14019 16182 14020 + 14019 14025 16182 + 16182 14025 16186 + 16186 16183 16182 + 16183 16186 16187 + 16187 16184 16183 + 16184 16187 16188 + 16188 16185 16184 + 16185 16188 16189 + 16185 16189 16180 + 16190 16180 16189 + 16181 16180 16190 + 16186 14025 14034 + 14034 16191 16186 + 16187 16186 16191 + 16191 16192 16187 + 16187 16192 16193 + 16188 16187 16193 + 16193 16194 16188 + 16189 16188 16194 + 16194 16195 16189 + 16189 16195 16190 + 16196 16191 14034 + 16196 16192 16191 + 16192 16196 16197 + 16197 16193 16192 + 16198 16193 16197 + 16193 16198 16199 + 16199 16194 16193 + 16195 16194 16199 + 14034 14039 16196 + 16196 14039 14038 + 16197 16196 14038 + 14038 16200 16197 + 16201 16197 16200 + 16197 16201 16198 + 16198 16201 16202 + 16202 16203 16198 + 16199 16198 16203 + 14044 16200 14038 + 16204 16200 14044 + 16200 16204 16201 + 16202 16201 16204 + 16204 16205 16202 + 16206 16202 16205 + 16202 16206 16207 + 16207 16203 16202 + 16204 14044 16208 + 16208 16205 16204 + 16205 16208 14053 + 14053 16209 16205 + 16205 16209 16206 + 16210 16206 16209 + 16207 16206 16210 + 14043 16208 14044 + 14053 16208 14043 + 16209 14053 14052 + 14052 16211 16209 + 16209 16211 16210 + 16212 16210 16211 + 16212 16213 16210 + 16210 16213 16207 + 16207 16213 16214 + 16215 16207 16214 + 16203 16207 16215 + 14057 16211 14052 + 16211 14057 16212 + 14066 16212 14057 + 16213 16212 14066 + 14066 16214 16213 + 14074 16214 14066 + 16214 14074 16216 + 16216 16217 16214 + 16214 16217 16215 + 16218 16215 16217 + 16215 16218 16219 + 16219 16220 16215 + 16215 16220 16203 + 16216 14074 14073 + 14073 16221 16216 + 16222 16216 16221 + 16216 16222 16223 + 16223 16217 16216 + 16217 16223 16218 + 16224 16218 16223 + 16219 16218 16224 + 14079 16221 14073 + 16225 16221 14079 + 16221 16225 16222 + 16226 16222 16225 + 16223 16222 16226 + 16226 16227 16223 + 16223 16227 16224 + 14079 16228 16225 + 16225 16228 16229 + 16229 16230 16225 + 16225 16230 16226 + 16231 16226 16230 + 16226 16231 16232 + 16232 16227 16226 + 16228 14079 16233 + 16233 16234 16228 + 16229 16228 16234 + 16234 16235 16229 + 16236 16229 16235 + 16229 16236 16237 + 16237 16230 16229 + 16230 16237 16231 + 14078 16233 14079 + 16238 16233 14078 + 16234 16233 16238 + 16238 16239 16234 + 16234 16239 16240 + 16240 16235 16234 + 16241 16235 16240 + 16235 16241 16236 + 16242 16236 16241 + 16237 16236 16242 + 14078 14077 16238 + 16238 14077 16243 + 16243 16244 16238 + 16239 16238 16244 + 16244 16245 16239 + 16240 16239 16245 + 16245 16246 16240 + 16247 16240 16246 + 16240 16247 16241 + 14083 16243 14077 + 16248 16243 14083 + 16243 16248 16249 + 16249 16244 16243 + 16245 16244 16249 + 16249 16250 16245 + 16245 16250 16251 + 16251 16246 16245 + 16252 16246 16251 + 16246 16252 16247 + 14083 16253 16248 + 16248 16253 16254 + 16254 16255 16248 + 16249 16248 16255 + 16255 16256 16249 + 16250 16249 16256 + 16256 16257 16250 + 16251 16250 16257 + 16253 14083 16258 + 16258 16259 16253 + 16254 16253 16259 + 14082 16258 14083 + 16260 16258 14082 + 16259 16258 16260 + 16259 16260 16261 + 16261 16262 16259 + 16259 16262 16254 + 14082 16263 16260 + 16261 16260 16263 + 16263 16264 16261 + 16265 16261 16264 + 16262 16261 16265 + 16262 16265 16266 + 16266 16267 16262 + 16262 16267 16254 + 14082 14086 16263 + 16263 14086 16268 + 16268 16264 16263 + 16264 16268 16269 + 16264 16269 16265 + 16265 16269 16270 + 16266 16265 16270 + 16271 16266 16270 + 16272 16266 16271 + 16272 16267 16266 + 14093 16268 14086 + 16269 16268 14093 + 14093 16273 16269 + 16269 16273 16270 + 14093 14092 16273 + 16273 14092 14091 + 14091 16270 16273 + 16270 14091 16274 + 16270 16274 16275 + 16275 16276 16270 + 16270 16276 16277 + 16277 16271 16270 + 16274 14091 14100 + 14100 16278 16274 + 16274 16278 16279 + 16279 16275 16274 + 16280 16275 16279 + 16275 16280 16276 + 16276 16280 16281 + 16281 16277 16276 + 16282 16278 14100 + 16278 16282 16283 + 16283 16279 16278 + 16279 16283 16284 + 16284 16285 16279 + 16279 16285 16280 + 16281 16280 16285 + 14100 14099 16282 + 16282 14099 16286 + 16286 16287 16282 + 16283 16282 16287 + 16287 16288 16283 + 16284 16283 16288 + 16288 16289 16284 + 16290 16284 16289 + 16285 16284 16290 + 16291 16286 14099 + 16292 16286 16291 + 16286 16292 16293 + 16293 16287 16286 + 16287 16293 16294 + 16294 16288 16287 + 16288 16294 16295 + 16295 16289 16288 + 14099 14098 16291 + 16296 16291 14098 + 16297 16291 16296 + 16291 16297 16292 + 16292 16297 16298 + 16298 16299 16292 + 16293 16292 16299 + 16299 16300 16293 + 16294 16293 16300 + 14098 14097 16296 + 16301 16296 14097 + 16302 16296 16301 + 16296 16302 16297 + 16297 16302 16303 + 16303 16298 16297 + 16304 16298 16303 + 16298 16304 16305 + 16305 16299 16298 + 14097 14104 16301 + 15105 16301 14104 + 16306 16301 15105 + 16301 16306 16302 + 16302 16306 16307 + 16307 16303 16302 + 16308 16303 16307 + 16303 16308 16304 + 16304 16308 16309 + 16309 16310 16304 + 16305 16304 16310 + 15105 15110 16306 + 16306 15110 16311 + 16311 16307 16306 + 16312 16307 16311 + 16307 16312 16308 + 16308 16312 16313 + 16313 16309 16308 + 16314 16309 16313 + 16309 16314 16315 + 16315 16310 16309 + 16316 16311 15110 + 16317 16311 16316 + 16311 16317 16312 + 16312 16317 16318 + 16318 16313 16312 + 16319 16313 16318 + 16313 16319 16314 + 15110 15109 16316 + 16320 16316 15109 + 16321 16316 16320 + 16316 16321 16317 + 16317 16321 16322 + 16322 16318 16317 + 16323 16318 16322 + 16318 16323 16319 + 15109 15115 16320 + 16324 16320 15115 + 16325 16320 16324 + 16320 16325 16321 + 16321 16325 16326 + 16326 16322 16321 + 16327 16322 16326 + 16322 16327 16323 + 15115 15120 16324 + 16328 16324 15120 + 16329 16324 16328 + 16324 16329 16325 + 16325 16329 16330 + 16330 16326 16325 + 16331 16326 16330 + 16326 16331 16327 + 15120 16332 16328 + 16333 16328 16332 + 16334 16328 16333 + 16328 16334 16329 + 16329 16334 16335 + 16335 16330 16329 + 16336 16330 16335 + 16330 16336 16331 + 15119 16332 15120 + 16332 15119 15125 + 15125 16337 16332 + 16332 16337 16333 + 16338 16333 16337 + 16339 16333 16338 + 16333 16339 16334 + 16334 16339 16340 + 16340 16335 16334 + 16341 16335 16340 + 16335 16341 16336 + 16337 15125 15130 + 15130 16342 16337 + 16337 16342 16338 + 16343 16338 16342 + 16344 16338 16343 + 16338 16344 16339 + 16339 16344 16345 + 16345 16340 16339 + 16346 16340 16345 + 16340 16346 16341 + 16342 15130 15140 + 15140 16347 16342 + 16342 16347 16343 + 16348 16343 16347 + 16349 16343 16348 + 16343 16349 16344 + 16344 16349 16350 + 16350 16345 16344 + 16351 16345 16350 + 16345 16351 16346 + 16347 15140 15144 + 15144 16352 16347 + 16347 16352 16348 + 16353 16348 16352 + 16354 16348 16353 + 16348 16354 16349 + 16349 16354 16355 + 16355 16350 16349 + 16356 16350 16355 + 16350 16356 16351 + 16352 15144 15148 + 15148 15157 16352 + 16352 15157 16353 + 15162 16353 15157 + 16357 16353 15162 + 16353 16357 16354 + 16354 16357 16358 + 16358 16355 16354 + 16359 16355 16358 + 16355 16359 16356 + 16356 16359 16360 + 16360 16361 16356 + 16351 16356 16361 + 15162 15167 16357 + 16357 15167 16362 + 16362 16358 16357 + 16363 16358 16362 + 16358 16363 16359 + 16359 16363 16364 + 16364 16360 16359 + 16365 16360 16364 + 16360 16365 16366 + 16366 16361 16360 + 15172 16362 15167 + 16367 16362 15172 + 16362 16367 16363 + 16363 16367 16368 + 16368 16364 16363 + 16369 16364 16368 + 16364 16369 16365 + 16365 16369 16370 + 16370 16371 16365 + 16366 16365 16371 + 15172 15177 16367 + 16367 15177 16372 + 16372 16368 16367 + 16373 16368 16372 + 16368 16373 16369 + 16369 16373 16374 + 16374 16370 16369 + 15182 16372 15177 + 16375 16372 15182 + 16372 16375 16373 + 16373 16375 16376 + 16376 16374 16373 + 16377 16374 16376 + 16370 16374 16377 + 16377 16378 16370 + 16370 16378 16379 + 16379 16371 16370 + 15182 16380 16375 + 16375 16380 16381 + 16381 16376 16375 + 16376 16381 16382 + 16382 16383 16376 + 16376 16383 16377 + 16380 15182 15181 + 15181 15191 16380 + 16380 15191 16384 + 16384 16381 16380 + 16382 16381 16384 + 16384 16385 16382 + 16382 16385 16386 + 16386 16387 16382 + 16383 16382 16387 + 16387 16388 16383 + 16377 16383 16388 + 15196 16384 15191 + 16384 15196 16389 + 16389 16385 16384 + 16385 16389 16390 + 16390 16386 16385 + 16386 16390 16391 + 16391 16392 16386 + 16386 16392 16393 + 16393 16387 16386 + 16387 16393 16388 + 16389 15196 16394 + 16394 16395 16389 + 16389 16395 16396 + 16396 16390 16389 + 16391 16390 16396 + 15195 16394 15196 + 15205 16394 15195 + 16394 15205 16397 + 16397 16395 16394 + 16395 16397 16398 + 16398 16396 16395 + 16398 16399 16396 + 16396 16399 16391 + 16391 16399 16400 + 16400 16401 16391 + 16392 16391 16401 + 16397 15205 16402 + 16402 16403 16397 + 16397 16403 16404 + 16404 16398 16397 + 16399 16398 16404 + 16404 16405 16399 + 16399 16405 16400 + 15204 16402 15205 + 16406 16402 15204 + 16403 16402 16406 + 16403 16406 16407 + 16407 16408 16403 + 16403 16408 16404 + 16409 16404 16408 + 16404 16409 16410 + 16410 16405 16404 + 15204 15209 16406 + 16406 15209 15214 + 15214 16407 16406 + 16411 16407 15214 + 16407 16411 16412 + 16412 16408 16407 + 16408 16412 16409 + 16413 16409 16412 + 16410 16409 16413 + 15214 15219 16411 + 16411 15219 15224 + 15224 16414 16411 + 16412 16411 16414 + 16414 16415 16412 + 16412 16415 16413 + 16416 16413 16415 + 16413 16416 16417 + 16417 16418 16413 + 16413 16418 16410 + 16419 16414 15224 + 16414 16419 16420 + 16420 16415 16414 + 16415 16420 16416 + 16421 16416 16420 + 16417 16416 16421 + 15224 15229 16419 + 16419 15229 15234 + 15234 16422 16419 + 16420 16419 16422 + 16422 16423 16420 + 16420 16423 16421 + 16424 16422 15234 + 16423 16422 16424 + 16423 16424 16425 + 16425 16426 16423 + 16423 16426 16421 + 15234 16427 16424 + 16424 16427 16428 + 16428 16425 16424 + 16429 16425 16428 + 16425 16429 16430 + 16430 16426 16425 + 16426 16430 16431 + 16431 16421 16426 + 15233 16427 15234 + 16427 15233 15239 + 15239 16428 16427 + 16428 15239 16432 + 16432 16433 16428 + 16428 16433 16429 + 16429 16433 16434 + 16434 16435 16429 + 16430 16429 16435 + 16432 15239 15238 + 15238 15244 16432 + 16436 16432 15244 + 16433 16432 16436 + 16436 16434 16433 + 16434 16436 16437 + 16437 16438 16434 + 16434 16438 16439 + 16439 16435 16434 + 15244 15249 16436 + 16437 16436 15249 + 15249 16440 16437 + 16441 16437 16440 + 16438 16437 16441 + 16441 16442 16438 + 16439 16438 16442 + 16442 16443 16439 + 16444 16439 16443 + 16435 16439 16444 + 15248 16440 15249 + 16440 15248 16445 + 16445 16446 16440 + 16440 16446 16441 + 16447 16441 16446 + 16442 16441 16447 + 16447 16448 16442 + 16442 16448 16449 + 16449 16443 16442 + 16445 15248 15253 + 15253 16450 16445 + 16451 16445 16450 + 16446 16445 16451 + 16451 16452 16446 + 16446 16452 16447 + 16453 16447 16452 + 16448 16447 16453 + 16453 16454 16448 + 16449 16448 16454 + 15257 16450 15253 + 16450 15257 16455 + 16455 16456 16450 + 16450 16456 16451 + 16457 16451 16456 + 16452 16451 16457 + 16457 16458 16452 + 16452 16458 16453 + 16459 16453 16458 + 16454 16453 16459 + 16455 15257 15261 + 15261 16460 16455 + 16461 16455 16460 + 16456 16455 16461 + 16461 16462 16456 + 16456 16462 16457 + 16463 16457 16462 + 16458 16457 16463 + 16463 16464 16458 + 16458 16464 16459 + 15266 16460 15261 + 16460 15266 16465 + 16465 16466 16460 + 16460 16466 16461 + 16467 16461 16466 + 16462 16461 16467 + 16467 16468 16462 + 16462 16468 16463 + 16469 16463 16468 + 16464 16463 16469 + 16465 15266 16470 + 16470 16471 16465 + 16472 16465 16471 + 16466 16465 16472 + 16472 16473 16466 + 16466 16473 16467 + 16474 16467 16473 + 16468 16467 16474 + 15265 16470 15266 + 15271 16470 15265 + 16470 15271 16475 + 16475 16471 16470 + 16471 16475 16476 + 16476 15611 16471 + 16471 15611 16472 + 15610 16472 15611 + 16473 16472 15610 + 15610 15615 16473 + 16473 15615 16474 + 16475 15271 16477 + 16477 16478 16475 + 16476 16475 16478 + 16478 15606 16476 + 15605 16476 15606 + 15611 16476 15605 + 15270 16477 15271 + 16477 15270 15269 + 15269 16479 16477 + 16477 16479 16480 + 16480 16478 16477 + 15606 16478 16480 + 16480 16481 15606 + 15606 16481 15601 + 15597 15601 16481 + 16479 15269 16482 + 16482 16483 16479 + 16480 16479 16483 + 16483 16484 16480 + 16481 16480 16484 + 16484 16485 16481 + 16481 16485 15597 + 16486 15597 16485 + 15597 16486 15591 + 15274 16482 15269 + 16487 16482 15274 + 16483 16482 16487 + 16487 16488 16483 + 16483 16488 16489 + 16489 16484 16483 + 16485 16484 16489 + 16489 16490 16485 + 16485 16490 16486 + 15274 16491 16487 + 16487 16491 16492 + 16492 16493 16487 + 16488 16487 16493 + 16493 16494 16488 + 16489 16488 16494 + 16494 16495 16489 + 16490 16489 16495 + 15277 16491 15274 + 16491 15277 16496 + 16496 16492 16491 + 16492 16496 16497 + 16497 16498 16492 + 16492 16498 16499 + 16499 16493 16492 + 16493 16499 16500 + 16500 16494 16493 + 15281 16496 15277 + 16497 16496 15281 + 15281 16501 16497 + 16502 16497 16501 + 16498 16497 16502 + 16502 16503 16498 + 16498 16503 16504 + 16504 16499 16498 + 16500 16499 16504 + 15285 16501 15281 + 16501 15285 15290 + 15290 16505 16501 + 16501 16505 16502 + 16506 16502 16505 + 16502 16506 16507 + 16507 16503 16502 + 16503 16507 16508 + 16508 16504 16503 + 16509 16505 15290 + 16505 16509 16506 + 16506 16509 16510 + 16511 16506 16510 + 16507 16506 16511 + 16511 16512 16507 + 16512 16508 16507 + 16513 16508 16512 + 16504 16508 16513 + 15290 16514 16509 + 16509 16514 16515 + 16515 16510 16509 + 16516 16510 16515 + 16510 16516 16517 + 16517 16518 16510 + 16510 16518 16511 + 16514 15290 15289 + 15289 16519 16514 + 16514 16519 16520 + 16520 16515 16514 + 16516 16515 16520 + 16520 16521 16516 + 16517 16516 16521 + 16519 15289 15288 + 15288 16522 16519 + 16519 16522 16523 + 16523 16524 16519 + 16519 16524 16520 + 16525 16520 16524 + 16520 16525 16526 + 16526 16521 16520 + 16522 15288 15294 + 15294 16527 16522 + 16522 16527 16528 + 16528 16523 16522 + 16529 16523 16528 + 16524 16523 16529 + 16529 16530 16524 + 16524 16530 16525 + 16527 15294 15293 + 15293 16531 16527 + 16527 16531 16532 + 16532 16528 16527 + 16528 16532 16533 + 16533 16534 16528 + 16528 16534 16529 + 16535 16529 16534 + 16530 16529 16535 + 16531 15293 15301 + 15301 16536 16531 + 16532 16531 16536 + 16536 16537 16532 + 16537 16538 16532 + 16533 16532 16538 + 16536 15301 15300 + 15300 16539 16536 + 16536 16539 16540 + 16540 16537 16536 + 16537 16540 16541 + 16541 16542 16537 + 16537 16542 16543 + 16543 16538 16537 + 16539 15300 15309 + 15309 16544 16539 + 16540 16539 16544 + 16544 16545 16540 + 16541 16540 16545 + 16545 16546 16541 + 16541 16546 16547 + 16547 16548 16541 + 16542 16541 16548 + 16544 15309 15308 + 15308 16549 16544 + 16544 16549 16550 + 16550 16545 16544 + 16545 16550 16551 + 16551 16546 16545 + 16546 16551 16552 + 16552 16547 16546 + 16549 15308 15317 + 15317 16553 16549 + 16550 16549 16553 + 16551 16550 16553 + 16553 16554 16551 + 16551 16554 16552 + 16555 16552 16554 + 16552 16555 16556 + 16556 16547 16552 + 16547 16556 16557 + 16557 16548 16547 + 16553 15317 15316 + 15316 16554 16553 + 16554 15316 16555 + 15321 16555 15316 + 16556 16555 15321 + 15321 15329 16556 + 16556 15329 16558 + 16558 16557 16556 + 16559 16557 16558 + 16548 16557 16559 + 16559 16560 16548 + 16548 16560 16542 + 16542 16560 16561 + 16561 16543 16542 + 15328 16558 15329 + 16558 15328 15334 + 15334 16562 16558 + 16558 16562 16559 + 16563 16559 16562 + 16560 16559 16563 + 16563 16561 16560 + 16561 16563 15551 + 15551 16564 16561 + 16561 16564 16565 + 16565 16543 16561 + 16543 16565 16538 + 16562 15334 15542 + 15542 15547 16562 + 16562 15547 16563 + 15551 16563 15547 + 16538 16565 16533 + 16533 16565 16564 + 16564 16566 16533 + 16534 16533 16566 + 16566 16567 16534 + 16534 16567 16535 + 16568 16566 16564 + 16566 16568 15560 + 15560 16567 16566 + 16567 15560 16569 + 16569 16535 16567 + 16535 16569 16570 + 16570 16571 16535 + 16535 16571 16530 + 16564 15551 16568 + 15550 16568 15551 + 15560 16568 15550 + 16525 16530 16571 + 16571 16572 16525 + 16526 16525 16572 + 16572 16573 16526 + 16526 16573 16574 + 16521 16526 16574 + 16575 16572 16571 + 16572 16575 15579 + 15579 16573 16572 + 16573 15579 16576 + 16576 16574 16573 + 16574 16576 16577 + 16577 16578 16574 + 16574 16578 16521 + 16571 16570 16575 + 15570 16575 16570 + 15579 16575 15570 + 16570 15565 15570 + 15559 15565 16570 + 16570 16569 15559 + 15559 16569 15560 + 15578 16576 15579 + 16577 16576 15578 + 15578 15583 16577 + 16577 15583 15588 + 15588 16579 16577 + 16578 16577 16579 + 16579 16580 16578 + 16521 16578 16580 + 16580 16517 16521 + 16581 16517 16580 + 16517 16581 16582 + 16582 16518 16517 + 16583 16579 15588 + 16580 16579 16583 + 16583 16584 16580 + 16580 16584 16581 + 16581 16584 16585 + 16585 16586 16581 + 16582 16581 16586 + 15588 15593 16583 + 16583 15593 16587 + 16587 16588 16583 + 16584 16583 16588 + 16588 16585 16584 + 16585 16588 16589 + 16589 16590 16585 + 16585 16590 16591 + 16591 16586 16585 + 15592 16587 15593 + 16587 15592 16592 + 16592 16593 16587 + 16587 16593 16589 + 16589 16588 16587 + 16592 15592 15591 + 15591 16486 16592 + 16594 16592 16486 + 16593 16592 16594 + 16594 16595 16593 + 16589 16593 16595 + 16595 16596 16589 + 16590 16589 16596 + 16596 16597 16590 + 16591 16590 16597 + 16598 16591 16597 + 16598 16586 16591 + 16586 16598 16582 + 16486 16490 16594 + 16495 16594 16490 + 16595 16594 16495 + 16495 16599 16595 + 16595 16599 16600 + 16600 16596 16595 + 16597 16596 16600 + 16600 16601 16597 + 16597 16601 16598 + 16582 16598 16601 + 16599 16495 16494 + 16494 16500 16599 + 16600 16599 16500 + 16500 16602 16600 + 16601 16600 16602 + 16602 16513 16601 + 16601 16513 16582 + 16513 16603 16582 + 16518 16582 16603 + 16603 16511 16518 + 16511 16603 16512 + 16504 16602 16500 + 16513 16602 16504 + 16512 16603 16513 + 15619 16474 15615 + 16604 16474 15619 + 16474 16604 16468 + 16468 16604 16469 + 16605 16469 16604 + 16606 16469 16605 + 16469 16606 16464 + 15619 15623 16604 + 16604 15623 16605 + 15627 16605 15623 + 16607 16605 15627 + 16605 16607 16606 + 16606 16607 16608 + 16608 16609 16606 + 16464 16606 16609 + 16609 16459 16464 + 16610 16459 16609 + 16459 16610 16454 + 15627 15631 16607 + 16607 15631 16611 + 16611 16608 16607 + 16612 16608 16611 + 16608 16612 16613 + 16613 16609 16608 + 16609 16613 16610 + 16614 16610 16613 + 16454 16610 16614 + 16614 16615 16454 + 16454 16615 16449 + 15636 16611 15631 + 16616 16611 15636 + 16611 16616 16612 + 16617 16612 16616 + 16613 16612 16617 + 16617 16618 16613 + 16613 16618 16614 + 16619 16614 16618 + 16615 16614 16619 + 15636 16620 16616 + 16616 16620 16621 + 16621 16622 16616 + 16616 16622 16617 + 16623 16617 16622 + 16618 16617 16623 + 16623 16624 16618 + 16618 16624 16619 + 16620 15636 15635 + 15635 15641 16620 + 16621 16620 15641 + 15641 16625 16621 + 16626 16621 16625 + 16622 16621 16626 + 16626 16627 16622 + 16622 16627 16623 + 16623 16627 16628 + 16628 16629 16623 + 16624 16623 16629 + 16630 16625 15641 + 16625 16630 16631 + 16631 16632 16625 + 16625 16632 16626 + 16626 16632 16633 + 16633 16634 16626 + 16627 16626 16634 + 16634 16628 16627 + 15641 15640 16630 + 16630 15640 15639 + 15639 16635 16630 + 16631 16630 16635 + 16635 16636 16631 + 16637 16631 16636 + 16632 16631 16637 + 16637 16633 16632 + 15649 16635 15639 + 16636 16635 15649 + 15649 16638 16636 + 16636 16638 16639 + 16639 16640 16636 + 16636 16640 16637 + 16641 16637 16640 + 16633 16637 16641 + 16638 15649 16642 + 16642 16643 16638 + 16639 16638 16643 + 16643 16644 16639 + 16645 16639 16644 + 16639 16645 16640 + 16640 16645 16641 + 15648 16642 15649 + 16646 16642 15648 + 16643 16642 16646 + 16646 16647 16643 + 16643 16647 16648 + 16648 16644 16643 + 16648 16649 16644 + 16644 16649 16645 + 16645 16649 16650 + 16650 16641 16645 + 15648 15653 16646 + 16651 16646 15653 + 16647 16646 16651 + 16651 16652 16647 + 16647 16652 16653 + 16653 16648 16647 + 16649 16648 16653 + 16653 16654 16649 + 16649 16654 16650 + 15653 15657 16651 + 16655 16651 15657 + 16651 16655 16656 + 16656 16652 16651 + 16652 16656 16657 + 16657 16653 16652 + 16653 16657 16658 + 16658 16654 16653 + 15657 15662 16655 + 16659 16655 15662 + 16656 16655 16659 + 16659 16660 16656 + 16657 16656 16660 + 16660 16661 16657 + 16658 16657 16661 + 15662 15667 16659 + 16662 16659 15667 + 16659 16662 16663 + 16663 16660 16659 + 16660 16663 16664 + 16664 16661 16660 + 16664 16665 16661 + 16661 16665 16658 + 15667 16666 16662 + 16667 16662 16666 + 16663 16662 16667 + 16667 16668 16663 + 16664 16663 16668 + 16668 16669 16664 + 16665 16664 16669 + 15666 16666 15667 + 16666 15666 16670 + 16670 16671 16666 + 16666 16671 16667 + 16672 16667 16671 + 16667 16672 16673 + 16673 16668 16667 + 16668 16673 16674 + 16674 16669 16668 + 15671 16670 15666 + 16675 16670 15671 + 16671 16670 16675 + 16675 16676 16671 + 16671 16676 16672 + 16677 16672 16676 + 16673 16672 16677 + 16677 16678 16673 + 16674 16673 16678 + 15671 16679 16675 + 16675 16679 16680 + 16680 16681 16675 + 16676 16675 16681 + 16681 16682 16676 + 16676 16682 16677 + 15675 16679 15671 + 16679 15675 16683 + 16683 16680 16679 + 16680 16683 16684 + 16684 16685 16680 + 16680 16685 16686 + 16686 16681 16680 + 16682 16681 16686 + 15680 16683 15675 + 16684 16683 15680 + 15680 16687 16684 + 16684 16687 16688 + 16688 16689 16684 + 16685 16684 16689 + 16689 16690 16685 + 16686 16685 16690 + 16691 16687 15680 + 16687 16691 16692 + 16692 16688 16687 + 16688 16692 16693 + 16693 16694 16688 + 16688 16694 16695 + 16695 16689 16688 + 16690 16689 16695 + 15680 15679 16691 + 16691 15679 15678 + 15678 16696 16691 + 16691 16696 16697 + 16697 16692 16691 + 16693 16692 16697 + 16697 16698 16693 + 16693 16698 16699 + 16699 16700 16693 + 16694 16693 16700 + 15687 16696 15678 + 16696 15687 16701 + 16701 16697 16696 + 16697 16701 16702 + 16702 16698 16697 + 16698 16702 16703 + 16703 16699 16698 + 15691 16701 15687 + 16702 16701 15691 + 15691 15762 16702 + 16702 15762 16704 + 16704 16703 16702 + 16705 16703 16704 + 16699 16703 16705 + 16705 16706 16699 + 16699 16706 16707 + 16707 16700 16699 + 16708 16700 16707 + 16700 16708 16694 + 16695 16694 16708 + 15761 16704 15762 + 16704 15761 15760 + 15760 15767 16704 + 16704 15767 16705 + 16705 15767 15766 + 15766 16709 16705 + 16706 16705 16709 + 16709 16710 16706 + 16707 16706 16710 + 16710 16711 16707 + 16712 16707 16711 + 16707 16712 16708 + 15771 16709 15766 + 16710 16709 15771 + 15771 16713 16710 + 16710 16713 16714 + 16714 16711 16710 + 16715 16711 16714 + 16711 16715 16712 + 16716 16712 16715 + 16708 16712 16716 + 16716 16717 16708 + 16708 16717 16695 + 16713 15771 16718 + 16718 16719 16713 + 16714 16713 16719 + 16719 16720 16714 + 16721 16714 16720 + 16714 16721 16715 + 15770 16718 15771 + 15780 16718 15770 + 16719 16718 15780 + 15780 15789 16719 + 16719 15789 15794 + 15794 16720 16719 + 16722 16720 15794 + 16720 16722 16721 + 16723 16721 16722 + 16715 16721 16723 + 16723 16724 16715 + 16715 16724 16716 + 16725 16716 16724 + 16716 16725 16726 + 16726 16717 16716 + 15794 16727 16722 + 16722 16727 16728 + 16728 16729 16722 + 16722 16729 16723 + 16730 16723 16729 + 16723 16730 16731 + 16731 16724 16723 + 16724 16731 16725 + 16727 15794 15793 + 15793 15799 16727 + 16728 16727 15799 + 15799 15808 16728 + 16732 16728 15808 + 16728 16732 16733 + 16733 16729 16728 + 16729 16733 16730 + 16734 16730 16733 + 16731 16730 16734 + 16734 16735 16731 + 16731 16735 16736 + 16736 16725 16731 + 16726 16725 16736 + 15808 15807 16732 + 16737 16732 15807 + 16733 16732 16737 + 16737 16738 16733 + 16733 16738 16734 + 16739 16734 16738 + 16734 16739 16740 + 16740 16735 16734 + 16735 16740 16741 + 16741 16736 16735 + 15807 16742 16737 + 16743 16737 16742 + 16737 16743 16744 + 16744 16738 16737 + 16738 16744 16739 + 16739 16744 16745 + 16745 16746 16739 + 16740 16739 16746 + 15812 16742 15807 + 16747 16742 15812 + 16742 16747 16743 + 16743 16747 16748 + 16748 16749 16743 + 16744 16743 16749 + 16749 16745 16744 + 16745 16749 16750 + 16745 16750 16751 + 16751 16746 16745 + 15812 16752 16747 + 16747 16752 16753 + 16753 16748 16747 + 16748 16753 16754 + 16754 16755 16748 + 16748 16755 16750 + 16750 16749 16748 + 16752 15812 15815 + 15815 15820 16752 + 16752 15820 16756 + 16756 16753 16752 + 16754 16753 16756 + 16756 16757 16754 + 16758 16754 16757 + 16755 16754 16758 + 16758 16759 16755 + 16755 16759 16760 + 16750 16755 16760 + 16760 16751 16750 + 15825 16756 15820 + 16756 15825 15830 + 15830 16757 16756 + 16757 15830 15838 + 15838 16761 16757 + 16757 16761 16758 + 16762 16758 16761 + 16759 16758 16762 + 16762 16763 16759 + 16759 16763 16764 + 16764 16760 16759 + 16761 15838 15842 + 15842 16765 16761 + 16761 16765 16762 + 16766 16762 16765 + 16763 16762 16766 + 16766 16767 16763 + 16763 16767 16768 + 16768 16764 16763 + 16765 15842 15846 + 15846 16769 16765 + 16765 16769 16766 + 16770 16766 16769 + 16766 16770 16767 + 16767 16770 16771 + 16771 16768 16767 + 16772 16768 16771 + 16768 16772 16773 + 16773 16764 16768 + 16769 15846 16774 + 16774 16775 16769 + 16769 16775 16770 + 16771 16770 16775 + 16774 15846 15849 + 15849 16776 16774 + 16774 16776 16777 + 16777 16778 16774 + 16775 16774 16778 + 16778 16779 16775 + 16775 16779 16771 + 15853 16776 15849 + 16776 15853 16780 + 16780 16777 16776 + 16777 16780 16781 + 16781 16782 16777 + 16777 16782 16783 + 16783 16778 16777 + 16779 16778 16783 + 16784 16780 15853 + 16781 16780 16784 + 16784 16785 16781 + 16781 16785 16786 + 16786 16787 16781 + 16782 16781 16787 + 16787 16788 16782 + 16783 16782 16788 + 15853 15857 16784 + 15867 16784 15857 + 15867 16785 16784 + 16785 15867 15866 + 15866 16789 16785 + 16785 16789 16786 + 16790 16786 16789 + 16786 16790 16791 + 16791 16792 16786 + 16786 16792 16793 + 16793 16787 16786 + 16788 16787 16793 + 15876 16789 15866 + 16789 15876 16790 + 16794 16790 15876 + 16791 16790 16794 + 16794 16795 16791 + 16796 16791 16795 + 16792 16791 16796 + 16796 16797 16792 + 16792 16797 16798 + 16798 16793 16792 + 15876 16799 16794 + 16800 16794 16799 + 16794 16800 16795 + 16795 16800 16801 + 16801 16802 16795 + 16795 16802 16796 + 15875 16799 15876 + 16803 16799 15875 + 16799 16803 16800 + 16801 16800 16803 + 16803 16804 16801 + 16805 16801 16804 + 16801 16805 16806 + 16806 16802 16801 + 15875 15880 16803 + 16803 15880 15885 + 15885 16804 16803 + 16807 16804 15885 + 16804 16807 16805 + 16808 16805 16807 + 16806 16805 16808 + 16808 16809 16806 + 16810 16806 16809 + 16802 16806 16810 + 16810 16811 16802 + 16802 16811 16796 + 15885 15889 16807 + 16807 15889 15894 + 15894 16812 16807 + 16807 16812 16808 + 16813 16808 16812 + 16808 16813 16814 + 16814 16809 16808 + 16809 16814 16815 + 16815 16816 16809 + 16809 16816 16810 + 16817 16812 15894 + 16812 16817 16813 + 16818 16813 16817 + 16814 16813 16818 + 16818 16819 16814 + 16815 16814 16819 + 16819 16820 16815 + 16821 16815 16820 + 16815 16821 16816 + 15894 15899 16817 + 16817 15899 16822 + 16822 16823 16817 + 16817 16823 16818 + 16824 16818 16823 + 16818 16824 16825 + 16825 16819 16818 + 16819 16825 16826 + 16826 16820 16819 + 15904 16822 15899 + 16827 16822 15904 + 16822 16827 16828 + 16828 16823 16822 + 16823 16828 16824 + 16829 16824 16828 + 16825 16824 16829 + 16829 16830 16825 + 16826 16825 16830 + 15904 15909 16827 + 16831 16827 15909 + 16828 16827 16831 + 16831 16832 16828 + 16828 16832 16829 + 16833 16829 16832 + 16829 16833 16834 + 16834 16830 16829 + 15909 16835 16831 + 16836 16831 16835 + 16831 16836 16837 + 16837 16832 16831 + 16832 16837 16833 + 16838 16833 16837 + 16834 16833 16838 + 16839 16835 15909 + 16840 16835 16839 + 16835 16840 16836 + 16841 16836 16840 + 16837 16836 16841 + 16841 16842 16837 + 16837 16842 16838 + 15909 15908 16839 + 15914 16839 15908 + 16843 16839 15914 + 16839 16843 16840 + 16840 16843 16844 + 16844 16845 16840 + 16840 16845 16841 + 16846 16841 16845 + 16841 16846 16847 + 16847 16842 16841 + 15914 16848 16843 + 16843 16848 16849 + 16849 16850 16843 + 16850 16844 16843 + 16851 16844 16850 + 16844 16851 16852 + 16852 16845 16844 + 16845 16852 16846 + 16848 15914 15913 + 15913 15919 16848 + 16848 15919 16853 + 16853 16849 16848 + 16854 16849 16853 + 16849 16854 16855 + 16855 16850 16849 + 16856 16850 16855 + 16850 16856 16851 + 16857 16853 15919 + 16854 16853 16857 + 16857 16858 16854 + 16854 16858 16859 + 16859 16855 16854 + 16860 16855 16859 + 16855 16860 16856 + 16861 16857 15919 + 16862 16857 16861 + 16858 16857 16862 + 16862 16863 16858 + 16858 16863 16864 + 16864 16859 16858 + 16865 16859 16864 + 16859 16865 16860 + 15919 15918 16861 + 15924 16861 15918 + 16866 16861 15924 + 16861 16866 16862 + 16867 16862 16866 + 16863 16862 16867 + 16867 16868 16863 + 16863 16868 16869 + 16869 16864 16863 + 16870 16864 16869 + 16864 16870 16865 + 16866 15924 15923 + 15923 16871 16866 + 16866 16871 16867 + 16872 16867 16871 + 16867 16872 16873 + 16873 16868 16867 + 16868 16873 16874 + 16874 16869 16868 + 15932 16871 15923 + 16871 15932 16872 + 16875 16872 15932 + 16873 16872 16875 + 16875 16876 16873 + 16873 16876 16877 + 16877 16874 16873 + 16878 16874 16877 + 16869 16874 16878 + 16878 16879 16869 + 16869 16879 16870 + 15932 15931 16875 + 15937 16875 15931 + 16875 15937 15945 + 15945 16876 16875 + 16876 15945 16880 + 16880 16877 16876 + 16877 16880 16881 + 16881 16882 16877 + 16877 16882 16878 + 16878 16882 16883 + 16883 16884 16878 + 16879 16878 16884 + 16885 16880 15945 + 16881 16880 16885 + 16885 16886 16881 + 16881 16886 16887 + 16887 16888 16881 + 16882 16881 16888 + 16888 16883 16882 + 15945 15944 16885 + 15950 16885 15944 + 16885 15950 16889 + 16889 16886 16885 + 16886 16889 16890 + 16890 16887 16886 + 16887 16890 16891 + 16891 16892 16887 + 16887 16892 16893 + 16893 16888 16887 + 16883 16888 16893 + 16889 15950 15949 + 15949 15962 16889 + 16889 15962 15967 + 15967 16890 16889 + 16891 16890 15967 + 15967 16894 16891 + 16891 16894 16895 + 16895 16896 16891 + 16892 16891 16896 + 16896 16897 16892 + 16893 16892 16897 + 15966 16894 15967 + 16894 15966 16898 + 16898 16895 16894 + 16895 16898 16899 + 16899 16900 16895 + 16895 16900 16901 + 16901 16896 16895 + 16897 16896 16901 + 15971 16898 15966 + 16899 16898 15971 + 15971 16902 16899 + 16899 16902 16903 + 16903 16904 16899 + 16900 16899 16904 + 16904 16905 16900 + 16901 16900 16905 + 15974 16902 15971 + 16902 15974 16906 + 16906 16903 16902 + 16903 16906 16907 + 16907 16908 16903 + 16903 16908 16909 + 16909 16904 16903 + 16905 16904 16909 + 15978 16906 15974 + 16907 16906 15978 + 15978 15983 16907 + 16907 15983 16910 + 16910 16911 16907 + 16908 16907 16911 + 16911 16912 16908 + 16909 16908 16912 + 16912 16913 16909 + 16914 16909 16913 + 16909 16914 16905 + 15988 16910 15983 + 16915 16910 15988 + 16910 16915 16916 + 16916 16911 16910 + 16912 16911 16916 + 16916 16917 16912 + 16912 16917 16918 + 16918 16913 16912 + 16919 16913 16918 + 16913 16919 16914 + 15988 16920 16915 + 16915 16920 16921 + 16921 16922 16915 + 16916 16915 16922 + 16922 16923 16916 + 16917 16916 16923 + 16923 16924 16917 + 16918 16917 16924 + 16920 15988 15987 + 15987 16925 16920 + 16920 16925 16926 + 16926 16921 16920 + 16927 16921 16926 + 16921 16927 16928 + 16928 16922 16921 + 16922 16928 16929 + 16929 16923 16922 + 16924 16923 16929 + 16925 15987 15986 + 15986 16930 16925 + 16925 16930 16931 + 16931 16926 16925 + 16932 16926 16931 + 16926 16932 16927 + 16927 16932 16933 + 16933 16934 16927 + 16928 16927 16934 + 16930 15986 15992 + 15992 15997 16930 + 16930 15997 16935 + 16935 16931 16930 + 16936 16931 16935 + 16931 16936 16932 + 16932 16936 16937 + 16937 16933 16932 + 16938 16933 16937 + 16933 16938 16939 + 16939 16934 16933 + 16940 16935 15997 + 16941 16935 16940 + 16935 16941 16936 + 16936 16941 16942 + 16942 16937 16936 + 16943 16937 16942 + 16937 16943 16938 + 15997 15996 16940 + 16944 16940 15996 + 16945 16940 16944 + 16940 16945 16941 + 16941 16945 16946 + 16946 16942 16941 + 16947 16942 16946 + 16942 16947 16943 + 15996 16001 16944 + 16948 16944 16001 + 16949 16944 16948 + 16944 16949 16945 + 16945 16949 16950 + 16950 16946 16945 + 16951 16946 16950 + 16946 16951 16947 + 16001 16006 16948 + 16952 16948 16006 + 16953 16948 16952 + 16948 16953 16949 + 16949 16953 16954 + 16954 16950 16949 + 16955 16950 16954 + 16950 16955 16951 + 16006 16956 16952 + 16957 16952 16956 + 16958 16952 16957 + 16952 16958 16953 + 16953 16958 16959 + 16959 16954 16953 + 16960 16954 16959 + 16954 16960 16955 + 16005 16956 16006 + 16956 16005 16011 + 16956 16011 16957 + 16957 16011 16010 + 16010 16961 16957 + 16962 16957 16961 + 16957 16962 16958 + 16958 16962 16963 + 16963 16959 16958 + 16964 16959 16963 + 16959 16964 16960 + 16965 16961 16010 + 16966 16961 16965 + 16961 16966 16962 + 16962 16966 16967 + 16967 16963 16962 + 16968 16963 16967 + 16963 16968 16964 + 16010 16018 16965 + 16969 16965 16018 + 16970 16965 16969 + 16965 16970 16966 + 16966 16970 16971 + 16971 16967 16966 + 16972 16967 16971 + 16967 16972 16968 + 16018 16022 16969 + 16027 16969 16022 + 16973 16969 16027 + 16969 16973 16970 + 16970 16973 16974 + 16974 16971 16970 + 16975 16971 16974 + 16971 16975 16972 + 16972 16975 16976 + 16976 16977 16972 + 16968 16972 16977 + 16027 16032 16973 + 16973 16032 16978 + 16978 16974 16973 + 16979 16974 16978 + 16974 16979 16975 + 16975 16979 16980 + 16980 16976 16975 + 16981 16976 16980 + 16976 16981 16982 + 16982 16977 16976 + 16036 16978 16032 + 16983 16978 16036 + 16978 16983 16979 + 16979 16983 16984 + 16984 16980 16979 + 16985 16980 16984 + 16980 16985 16981 + 16981 16985 16986 + 16986 16987 16981 + 16982 16981 16987 + 16036 16040 16983 + 16983 16040 16988 + 16988 16984 16983 + 16989 16984 16988 + 16984 16989 16985 + 16985 16989 16990 + 16990 16986 16985 + 16991 16986 16990 + 16986 16991 16992 + 16992 16987 16986 + 16044 16988 16040 + 16993 16988 16044 + 16988 16993 16989 + 16989 16993 16994 + 16994 16990 16989 + 16995 16990 16994 + 16990 16995 16991 + 16991 16995 16996 + 16996 16997 16991 + 16992 16991 16997 + 16044 16048 16993 + 16993 16048 16998 + 16998 16994 16993 + 16999 16994 16998 + 16994 16999 16995 + 16995 16999 17000 + 17000 16996 16995 + 17001 16996 17000 + 16996 17001 17002 + 17002 16997 16996 + 16052 16998 16048 + 17003 16998 16052 + 16998 17003 16999 + 16999 17003 17004 + 17004 17000 16999 + 17005 17000 17004 + 17000 17005 17001 + 17001 17005 17006 + 17006 17007 17001 + 17002 17001 17007 + 16052 16056 17003 + 17003 16056 17008 + 17008 17004 17003 + 17009 17004 17008 + 17004 17009 17005 + 17005 17009 17010 + 17010 17006 17005 + 17011 17006 17010 + 17006 17011 17012 + 17012 17007 17006 + 16060 17008 16056 + 17013 17008 16060 + 17008 17013 17009 + 17009 17013 17014 + 17014 17010 17009 + 17015 17010 17014 + 17010 17015 17011 + 17011 17015 17016 + 17016 17017 17011 + 17012 17011 17017 + 16060 16064 17013 + 17013 16064 17018 + 17018 17014 17013 + 17019 17014 17018 + 17014 17019 17015 + 17015 17019 17020 + 17020 17016 17015 + 17021 17016 17020 + 17016 17021 17022 + 17022 17017 17016 + 16068 17018 16064 + 17023 17018 16068 + 17018 17023 17019 + 17019 17023 17024 + 17024 17020 17019 + 17025 17020 17024 + 17020 17025 17021 + 17026 17021 17025 + 17022 17021 17026 + 16068 16076 17023 + 17023 16076 17027 + 17027 17024 17023 + 17028 17024 17027 + 17024 17028 17025 + 17025 17028 17029 + 17029 17030 17025 + 17025 17030 17026 + 16075 17027 16076 + 17031 17027 16075 + 17027 17031 17028 + 17029 17028 17031 + 17031 17032 17029 + 17033 17029 17032 + 17029 17033 17034 + 17034 17030 17029 + 17030 17034 17035 + 17035 17026 17030 + 16075 16080 17031 + 17031 16080 16079 + 16079 17032 17031 + 17036 17032 16079 + 17032 17036 17033 + 17037 17033 17036 + 17034 17033 17037 + 17037 17038 17034 + 17034 17038 17039 + 17039 17035 17034 + 17040 17035 17039 + 17026 17035 17040 + 16079 16085 17036 + 17036 16085 17041 + 17041 17042 17036 + 17036 17042 17037 + 17043 17037 17042 + 17037 17043 17044 + 17044 17038 17037 + 17038 17044 17045 + 17045 17039 17038 + 17041 16085 16084 + 16084 16090 17041 + 17046 17041 16090 + 17041 17046 17047 + 17047 17042 17041 + 17042 17047 17043 + 17048 17043 17047 + 17044 17043 17048 + 17048 17049 17044 + 17044 17049 17050 + 17050 17045 17044 + 16090 16089 17046 + 17051 17046 16089 + 17047 17046 17051 + 17051 17052 17047 + 17047 17052 17048 + 17053 17048 17052 + 17048 17053 17054 + 17054 17049 17048 + 17049 17054 17055 + 17055 17050 17049 + 16089 16103 17051 + 17056 17051 16103 + 17051 17056 17057 + 17057 17052 17051 + 17052 17057 17053 + 17058 17053 17057 + 17054 17053 17058 + 17058 17059 17054 + 17054 17059 17060 + 17060 17055 17054 + 16103 16102 17056 + 17061 17056 16102 + 17057 17056 17061 + 17061 17062 17057 + 17057 17062 17058 + 17063 17058 17062 + 17058 17063 17064 + 17064 17059 17058 + 17059 17064 17065 + 17065 17060 17059 + 16102 16107 17061 + 16112 17061 16107 + 17061 16112 17066 + 17066 17062 17061 + 17062 17066 17063 + 17067 17063 17066 + 17064 17063 17067 + 17067 17068 17064 + 17064 17068 17069 + 17069 17065 17064 + 17070 17065 17069 + 17060 17065 17070 + 17066 16112 16111 + 16111 17071 17066 + 17066 17071 17067 + 17072 17067 17071 + 17067 17072 17073 + 17073 17068 17067 + 17068 17073 17074 + 17074 17069 17068 + 16119 17071 16111 + 17071 16119 17072 + 17075 17072 16119 + 17073 17072 17075 + 17075 17076 17073 + 17073 17076 17077 + 17077 17074 17073 + 17078 17074 17077 + 17069 17074 17078 + 17078 17079 17069 + 17069 17079 17070 + 16119 16122 17075 + 16131 17075 16122 + 17076 17075 16131 + 16131 17080 17076 + 17076 17080 17081 + 17081 17077 17076 + 17082 17077 17081 + 17077 17082 17078 + 17078 17082 17083 + 17083 17084 17078 + 17079 17078 17084 + 17080 16131 17085 + 17085 17086 17080 + 17081 17080 17086 + 17086 17087 17081 + 17088 17081 17087 + 17081 17088 17082 + 17082 17088 17089 + 17089 17083 17082 + 16130 17085 16131 + 17090 17085 16130 + 17086 17085 17090 + 17090 17091 17086 + 17086 17091 17092 + 17092 17087 17086 + 17093 17087 17092 + 17087 17093 17088 + 17088 17093 17094 + 17094 17089 17088 + 16130 17095 17090 + 17096 17090 17095 + 17091 17090 17096 + 17096 17097 17091 + 17091 17097 17098 + 17098 17092 17091 + 17099 17092 17098 + 17092 17099 17093 + 16129 17095 16130 + 17095 16129 16136 + 16136 17100 17095 + 17095 17100 17096 + 17101 17096 17100 + 17096 17101 17102 + 17102 17097 17096 + 17097 17102 17103 + 17103 17098 17097 + 17104 17100 16136 + 17100 17104 17101 + 17105 17101 17104 + 17102 17101 17105 + 17105 17106 17102 + 17102 17106 17107 + 17107 17103 17102 + 17108 17103 17107 + 17098 17103 17108 + 16136 16141 17104 + 17104 16141 17109 + 17109 17110 17104 + 17104 17110 17105 + 17111 17105 17110 + 17105 17111 17112 + 17112 17106 17105 + 17106 17112 17113 + 17113 17107 17106 + 17109 16141 16140 + 16140 17114 17109 + 17115 17109 17114 + 17109 17115 17116 + 17116 17110 17109 + 17110 17116 17111 + 17117 17111 17116 + 17112 17111 17117 + 16146 17114 16140 + 17118 17114 16146 + 17114 17118 17115 + 17119 17115 17118 + 17116 17115 17119 + 17119 17120 17116 + 17116 17120 17117 + 16146 16151 17118 + 17118 16151 17121 + 17121 17122 17118 + 17118 17122 17119 + 17123 17119 17122 + 17119 17123 17124 + 17124 17120 17119 + 17120 17124 17125 + 17125 17117 17120 + 17121 16151 16150 + 16150 17126 17121 + 17127 17121 17126 + 17121 17127 17128 + 17128 17122 17121 + 17122 17128 17123 + 17129 17123 17128 + 17124 17123 17129 + 16155 17126 16150 + 17130 17126 16155 + 17126 17130 17127 + 17131 17127 17130 + 17128 17127 17131 + 17131 17132 17128 + 17128 17132 17129 + 16155 17133 17130 + 17130 17133 17134 + 17134 17135 17130 + 17130 17135 17131 + 17136 17131 17135 + 17131 17136 17137 + 17137 17132 17131 + 17133 16155 16159 + 16159 16164 17133 + 17134 17133 16164 + 16164 16181 17134 + 16190 17134 16181 + 17134 16190 17138 + 17138 17135 17134 + 17135 17138 17136 + 17136 17138 17139 + 17139 17140 17136 + 17137 17136 17140 + 17138 16190 16195 + 16195 17139 17138 + 16199 17139 16195 + 17139 16199 17141 + 17141 17140 17139 + 17140 17141 17142 + 17140 17142 17137 + 17137 17142 16219 + 16219 17143 17137 + 17132 17137 17143 + 17143 17129 17132 + 17141 16199 16203 + 16203 16220 17141 + 17142 17141 16220 + 16220 16219 17142 + 16224 17143 16219 + 17129 17143 16224 + 16224 17144 17129 + 17129 17144 17124 + 17124 17144 16232 + 16232 17125 17124 + 17145 17125 16232 + 17117 17125 17145 + 17144 16224 16227 + 16227 16232 17144 + 16232 16231 17145 + 17145 16231 16237 + 16237 17146 17145 + 17147 17145 17146 + 17145 17147 17117 + 17117 17147 17112 + 17112 17147 17148 + 17148 17113 17112 + 16242 17146 16237 + 17148 17146 16242 + 17146 17148 17147 + 16242 17149 17148 + 17148 17149 17150 + 17150 17113 17148 + 17107 17113 17150 + 17150 17151 17107 + 17107 17151 17108 + 17149 16242 17152 + 17152 17153 17149 + 17150 17149 17153 + 17153 17154 17150 + 17151 17150 17154 + 17154 17155 17151 + 17108 17151 17155 + 16241 17152 16242 + 17156 17152 16241 + 17153 17152 17156 + 17156 17157 17153 + 17153 17157 17158 + 17158 17154 17153 + 17155 17154 17158 + 16241 16247 17156 + 17156 16247 16252 + 16252 17159 17156 + 17157 17156 17159 + 17159 17160 17157 + 17158 17157 17160 + 17160 17161 17158 + 17162 17158 17161 + 17158 17162 17155 + 17163 17159 16252 + 17160 17159 17163 + 17163 17164 17160 + 17160 17164 17165 + 17165 17161 17160 + 17166 17161 17165 + 17161 17166 17162 + 17167 17162 17166 + 17155 17162 17167 + 16252 17168 17163 + 17163 17168 17169 + 17169 17170 17163 + 17164 17163 17170 + 17170 17171 17164 + 17165 17164 17171 + 16251 17168 16252 + 17168 16251 17172 + 17172 17169 17168 + 17169 17172 17173 + 17173 17174 17169 + 17169 17174 17175 + 17175 17170 17169 + 17171 17170 17175 + 16257 17172 16251 + 17173 17172 16257 + 16257 17176 17173 + 17173 17176 17177 + 17177 17178 17173 + 17174 17173 17178 + 17178 17179 17174 + 17175 17174 17179 + 17180 17176 16257 + 17176 17180 17181 + 17181 17177 17176 + 17177 17181 17182 + 17182 17183 17177 + 17177 17183 17184 + 17184 17178 17177 + 17179 17178 17184 + 16257 16256 17180 + 17180 16256 16255 + 16255 17185 17180 + 17180 17185 17186 + 17186 17181 17180 + 17182 17181 17186 + 17186 17187 17182 + 17188 17182 17187 + 17183 17182 17188 + 17188 17189 17183 + 17184 17183 17189 + 17185 16255 16254 + 16254 17190 17185 + 17185 17190 17191 + 17191 17186 17185 + 17191 17187 17186 + 17187 17191 17192 + 17192 17193 17187 + 17187 17193 17188 + 17194 17188 17193 + 17189 17188 17194 + 17190 16254 16267 + 16267 16272 17190 + 17191 17190 16272 + 16272 17195 17191 + 17195 17192 17191 + 17196 17192 17195 + 17192 17196 17197 + 17197 17193 17192 + 17193 17197 17194 + 17198 17194 17197 + 17199 17194 17198 + 17194 17199 17189 + 16271 17195 16272 + 17195 16271 17200 + 17195 17200 17196 + 17196 17200 17201 + 17201 17202 17196 + 17197 17196 17202 + 17202 17203 17197 + 17197 17203 17198 + 17200 16271 16277 + 16277 17201 17200 + 17204 17201 16277 + 17201 17204 17205 + 17205 17202 17201 + 17202 17205 17206 + 17206 17203 17202 + 17203 17206 17207 + 17207 17198 17203 + 17208 17198 17207 + 17198 17208 17199 + 16277 16281 17204 + 17204 16281 17209 + 17209 17210 17204 + 17205 17204 17210 + 17210 17211 17205 + 17206 17205 17211 + 17211 17212 17206 + 17207 17206 17212 + 16285 17209 16281 + 16290 17209 16285 + 17209 16290 17213 + 17213 17210 17209 + 17210 17213 17214 + 17214 17211 17210 + 17211 17214 17215 + 17215 17212 17211 + 17212 17215 17216 + 17216 17217 17212 + 17212 17217 17207 + 17213 16290 17218 + 17218 17219 17213 + 17214 17213 17219 + 17219 17220 17214 + 17215 17214 17220 + 17220 17221 17215 + 17216 17215 17221 + 16289 17218 16290 + 17222 17218 16289 + 17218 17222 17223 + 17223 17219 17218 + 17219 17223 17224 + 17224 17220 17219 + 17220 17224 17225 + 17225 17221 17220 + 16289 16295 17222 + 17222 16295 17226 + 17226 17227 17222 + 17223 17222 17227 + 17227 17228 17223 + 17224 17223 17228 + 17228 17229 17224 + 17225 17224 17229 + 17230 17226 16295 + 17231 17226 17230 + 17226 17231 17232 + 17232 17227 17226 + 17227 17232 17233 + 17233 17228 17227 + 17228 17233 17234 + 17234 17229 17228 + 16295 16294 17230 + 16300 17230 16294 + 17235 17230 16300 + 17230 17235 17231 + 17231 17235 17236 + 17236 17237 17231 + 17232 17231 17237 + 17237 17238 17232 + 17233 17232 17238 + 17238 17239 17233 + 17234 17233 17239 + 16300 17240 17235 + 17235 17240 17241 + 17241 17236 17235 + 17242 17236 17241 + 17236 17242 17243 + 17243 17237 17236 + 17237 17243 17244 + 17244 17238 17237 + 17240 16300 16299 + 16299 16305 17240 + 17240 16305 17245 + 17245 17241 17240 + 17246 17241 17245 + 17241 17246 17242 + 17242 17246 17247 + 17247 17248 17242 + 17243 17242 17248 + 17248 17249 17243 + 17244 17243 17249 + 16310 17245 16305 + 17250 17245 16310 + 17245 17250 17246 + 17246 17250 17251 + 17251 17247 17246 + 17252 17247 17251 + 17247 17252 17253 + 17253 17248 17247 + 17248 17253 17254 + 17254 17249 17248 + 16310 16315 17250 + 17250 16315 17255 + 17255 17251 17250 + 17256 17251 17255 + 17251 17256 17252 + 17252 17256 17257 + 17257 17258 17252 + 17253 17252 17258 + 17258 17259 17253 + 17254 17253 17259 + 17260 17255 16315 + 17261 17255 17260 + 17255 17261 17256 + 17256 17261 17262 + 17262 17257 17256 + 17263 17257 17262 + 17257 17263 17258 + 17258 17263 17264 + 17264 17259 17258 + 16315 16314 17260 + 17265 17260 16314 + 17266 17260 17265 + 17260 17266 17261 + 17261 17266 17267 + 17267 17262 17261 + 17262 17267 17268 + 17268 17269 17262 + 17262 17269 17263 + 16314 16319 17265 + 17270 17265 16319 + 17271 17265 17270 + 17265 17271 17266 + 17266 17271 17272 + 17272 17267 17266 + 17268 17267 17272 + 16319 16323 17270 + 17273 17270 16323 + 17274 17270 17273 + 17270 17274 17271 + 17271 17274 17275 + 17275 17272 17271 + 17275 17276 17272 + 17272 17276 17268 + 16323 16327 17273 + 17277 17273 16327 + 17278 17273 17277 + 17273 17278 17274 + 17274 17278 17279 + 17279 17275 17274 + 17276 17275 17279 + 17279 17280 17276 + 17276 17280 17281 + 17268 17276 17281 + 16327 16331 17277 + 17282 17277 16331 + 17283 17277 17282 + 17277 17283 17278 + 17278 17283 17284 + 17284 17279 17278 + 17279 17284 17285 + 17285 17280 17279 + 17280 17285 17286 + 17286 17281 17280 + 16331 16336 17282 + 17287 17282 16336 + 17288 17282 17287 + 17282 17288 17283 + 17283 17288 17289 + 17289 17284 17283 + 17285 17284 17289 + 17289 17290 17285 + 17285 17290 17291 + 17291 17286 17285 + 16336 16341 17287 + 17292 17287 16341 + 17293 17287 17292 + 17287 17293 17288 + 17288 17293 17294 + 17294 17289 17288 + 17294 17290 17289 + 17290 17294 17295 + 17295 17296 17290 + 17290 17296 17291 + 16341 16346 17292 + 17297 17292 16346 + 17298 17292 17297 + 17292 17298 17293 + 17293 17298 17295 + 17295 17294 17293 + 16346 16351 17297 + 16361 17297 16351 + 17299 17297 16361 + 17297 17299 17298 + 17298 17299 17300 + 17300 17295 17298 + 17295 17300 17301 + 17301 17296 17295 + 17296 17301 17302 + 17302 17291 17296 + 16361 16366 17299 + 17299 16366 17303 + 17303 17300 17299 + 17301 17300 17303 + 17303 17304 17301 + 17301 17304 17305 + 17305 17302 17301 + 17306 17302 17305 + 17291 17302 17306 + 16371 17303 16366 + 17303 16371 16379 + 16379 17304 17303 + 17304 16379 17307 + 17307 17305 17304 + 17305 17307 17308 + 17308 17309 17305 + 17305 17309 17306 + 17310 17307 16379 + 17308 17307 17310 + 17310 17311 17308 + 17308 17311 17312 + 17312 17313 17308 + 17309 17308 17313 + 17313 17314 17309 + 17306 17309 17314 + 16379 16378 17310 + 17315 17310 16378 + 17310 17315 17316 + 17316 17311 17310 + 17311 17316 17317 + 17317 17312 17311 + 16378 16377 17315 + 16388 17315 16377 + 17316 17315 16388 + 16388 16393 17316 + 17316 16393 17318 + 17318 17317 17316 + 17319 17317 17318 + 17312 17317 17319 + 17319 17320 17312 + 17312 17320 17321 + 17321 17313 17312 + 17313 17321 17314 + 16393 16392 17318 + 16401 17318 16392 + 17318 16401 17322 + 17322 17323 17318 + 17318 17323 17319 + 17324 17319 17323 + 17320 17319 17324 + 17322 16401 16400 + 16400 17325 17322 + 17326 17322 17325 + 17323 17322 17326 + 17326 17327 17323 + 17323 17327 17324 + 17328 17324 17327 + 17324 17328 17329 + 17324 17329 17320 + 17330 17325 16400 + 17325 17330 17331 + 17331 17332 17325 + 17325 17332 17326 + 17333 17326 17332 + 17327 17326 17333 + 17333 17334 17327 + 17327 17334 17328 + 16400 17335 17330 + 17330 17335 17336 + 17336 17337 17330 + 17330 17337 17338 + 17331 17330 17338 + 17335 16400 16405 + 16405 16410 17335 + 17336 17335 16410 + 16410 16418 17336 + 17339 17336 16418 + 17339 17337 17336 + 17337 17339 17340 + 17340 17338 17337 + 16418 16417 17339 + 17340 17339 16417 + 16417 17341 17340 + 17342 17340 17341 + 17340 17342 17343 + 17343 17338 17340 + 16421 17341 16417 + 17344 17341 16421 + 17341 17344 17342 + 17345 17342 17344 + 17343 17342 17345 + 17345 17346 17343 + 17347 17343 17346 + 17338 17343 17347 + 16421 16431 17344 + 17344 16431 17348 + 17348 17349 17344 + 17344 17349 17345 + 17349 17350 17345 + 17351 17345 17350 + 17345 17351 17352 + 17352 17346 17345 + 17348 16431 16430 + 16430 17353 17348 + 17354 17348 17353 + 17354 17349 17348 + 17349 17354 17355 + 17355 17350 17349 + 17356 17350 17355 + 17350 17356 17351 + 17357 17351 17356 + 17352 17351 17357 + 16435 17353 16430 + 16444 17353 16435 + 17353 16444 17354 + 17355 17354 16444 + 16444 17358 17355 + 17358 17359 17355 + 17360 17355 17359 + 17355 17360 17356 + 17356 17360 17361 + 17361 17362 17356 + 17356 17362 17357 + 16443 17358 16444 + 16443 16449 17358 + 17358 16449 16615 + 16615 17359 17358 + 16619 17359 16615 + 17359 16619 17360 + 17361 17360 16619 + 16619 16624 17361 + 16629 17361 16624 + 17361 16629 17363 + 17363 17362 17361 + 17362 17363 17364 + 17364 17357 17362 + 17357 17364 17365 + 17365 17366 17357 + 17357 17366 17352 + 17367 17352 17366 + 17346 17352 17367 + 17363 16629 16628 + 16628 17368 17363 + 17364 17363 17368 + 17368 17369 17364 + 17369 17370 17364 + 17365 17364 17370 + 16634 17368 16628 + 17368 16634 16633 + 16633 17369 17368 + 16641 17369 16633 + 17369 16641 16650 + 16650 17370 17369 + 17370 16650 17371 + 17371 17372 17370 + 17370 17372 17365 + 17365 17372 17373 + 17373 17374 17365 + 17366 17365 17374 + 17374 17375 17366 + 17366 17375 17367 + 17371 16650 17376 + 17376 17377 17371 + 17371 17377 17378 + 17378 17379 17371 + 17372 17371 17379 + 17379 17373 17372 + 16654 17376 16650 + 17380 17376 16654 + 17376 17380 17381 + 17381 17377 17376 + 17377 17381 17382 + 17382 17378 17377 + 17382 17383 17378 + 17378 17383 17384 + 17384 17379 17378 + 17379 17384 17373 + 16654 16658 17380 + 17385 17380 16658 + 17381 17380 17385 + 17385 17386 17381 + 17382 17381 17386 + 17386 17387 17382 + 17383 17382 17387 + 17387 17388 17383 + 17383 17388 17389 + 17384 17383 17389 + 16658 16665 17385 + 16665 17390 17385 + 17391 17385 17390 + 17385 17391 17392 + 17392 17386 17385 + 17386 17392 17393 + 17393 17387 17386 + 17387 17393 17394 + 17394 17388 17387 + 16669 17390 16665 + 17395 17390 16669 + 17390 17395 17391 + 17391 17395 17396 + 17396 17397 17391 + 17392 17391 17397 + 17397 17398 17392 + 17392 17398 17399 + 17399 17393 17392 + 17394 17393 17399 + 16669 16674 17395 + 17395 16674 17400 + 17400 17396 17395 + 17401 17396 17400 + 17396 17401 17402 + 17402 17397 17396 + 17397 17402 17403 + 17403 17398 17397 + 17398 17403 17404 + 17404 17399 17398 + 16678 17400 16674 + 17405 17400 16678 + 17400 17405 17401 + 17401 17405 17406 + 17406 17407 17401 + 17402 17401 17407 + 17407 16773 17402 + 16773 16772 17402 + 17403 17402 16772 + 16678 17408 17405 + 17405 17408 17409 + 17409 17410 17405 + 17410 17406 17405 + 17411 17406 17410 + 17411 17407 17406 + 17407 17411 17412 + 17412 16773 17407 + 16764 16773 17412 + 17408 16678 16677 + 16677 17413 17408 + 17408 17413 17414 + 17414 17409 17408 + 17409 17414 17415 + 17409 17415 17416 + 17416 17410 17409 + 17417 17410 17416 + 17410 17417 17411 + 17413 16677 16682 + 16682 17418 17413 + 17414 17413 17418 + 17418 17419 17414 + 17415 17414 17419 + 17419 17420 17415 + 17416 17415 17420 + 17420 17421 17416 + 17422 17416 17421 + 17416 17422 17417 + 16686 17418 16682 + 17418 16686 17423 + 17423 17419 17418 + 17419 17423 17424 + 17424 17420 17419 + 17420 17424 17425 + 17425 17421 17420 + 17421 17425 16736 + 16736 16741 17421 + 17421 16741 17422 + 16690 17423 16686 + 17424 17423 16690 + 16690 17426 17424 + 17424 17426 16726 + 16726 17425 17424 + 16736 17425 16726 + 16695 17426 16690 + 17426 16695 16717 + 16717 16726 17426 + 17412 16760 16764 + 16760 17412 17427 + 17427 16751 16760 + 16751 17427 17428 + 17428 16746 16751 + 16746 17428 16740 + 16741 16740 17428 + 17428 17422 16741 + 17417 17422 17428 + 17427 17412 17411 + 17411 17417 17427 + 17428 17427 17417 + 16772 17429 17403 + 16771 17429 16772 + 17429 16771 17430 + 17430 17431 17429 + 17403 17429 17431 + 17431 17404 17403 + 17432 17404 17431 + 17404 17432 17399 + 17399 17432 17394 + 17433 17430 16771 + 17434 17430 17433 + 17431 17430 17434 + 17434 17435 17431 + 17431 17435 17432 + 17432 17435 17436 + 17394 17432 17436 + 17436 17437 17394 + 17388 17394 17437 + 16779 17433 16771 + 17438 17433 16779 + 17438 17439 17433 + 17433 17439 17434 + 17434 17439 17440 + 17440 17441 17434 + 17435 17434 17441 + 17441 17436 17435 + 16779 17442 17438 + 17438 17442 17443 + 17443 17444 17438 + 17439 17438 17444 + 17444 17440 17439 + 16783 17442 16779 + 17442 16783 17445 + 17445 17443 17442 + 17443 17445 17446 + 17443 17446 17447 + 17447 17444 17443 + 17440 17444 17447 + 17447 17448 17440 + 17440 17448 17449 + 17449 17441 17440 + 17436 17441 17449 + 16788 17445 16783 + 17446 17445 16788 + 16788 17450 17446 + 17446 17450 17451 + 17451 17447 17446 + 17448 17447 17451 + 17451 17452 17448 + 17448 17452 17453 + 17449 17448 17453 + 17454 17449 17453 + 17436 17449 17454 + 17454 17437 17436 + 16793 17450 16788 + 17450 16793 16798 + 16798 17455 17450 + 17450 17455 17451 + 17456 17451 17455 + 17451 17456 17452 + 17452 17456 17457 + 17457 17453 17452 + 16798 17458 17455 + 17455 17458 17456 + 17457 17456 17458 + 17458 16798 16797 + 16797 17459 17458 + 17458 17459 17457 + 16796 17459 16797 + 17459 16796 16811 + 16811 17460 17459 + 17459 17460 17457 + 16810 17460 16811 + 17460 16810 16816 + 16816 16821 17460 + 17460 16821 17457 + 16821 17461 17457 + 17461 17462 17457 + 17462 17463 17457 + 17463 17464 17457 + 17464 17465 17457 + 17465 17466 17457 + 17466 17467 17457 + 17467 17468 17457 + 17468 17469 17457 + 17469 17470 17457 + 17471 17457 17470 + 17453 17457 17471 + 16820 17461 16821 + 16826 17461 16820 + 17461 16826 17472 + 17472 17462 17461 + 17473 17462 17472 + 17462 17473 17474 + 17474 17463 17462 + 17475 17463 17474 + 17463 17475 17476 + 17476 17464 17463 + 16830 17472 16826 + 17473 17472 16830 + 16830 16834 17473 + 17473 16834 17477 + 17477 17478 17473 + 17478 17479 17473 + 17479 17474 17473 + 17475 17474 17479 + 17479 17480 17475 + 17476 17475 17480 + 16838 17477 16834 + 16838 17481 17477 + 17477 17481 17482 + 17482 17478 17477 + 17482 17483 17478 + 17478 17483 17484 + 17484 17479 17478 + 17480 17479 17484 + 17481 16838 16842 + 16842 16847 17481 + 17482 17481 16847 + 16847 17485 17482 + 17485 17486 17482 + 17483 17482 17486 + 17486 17487 17483 + 17483 17487 17488 + 17488 17489 17483 + 17489 17484 17483 + 17490 17485 16847 + 17491 17485 17490 + 17485 17491 17492 + 17492 17486 17485 + 17487 17486 17492 + 17492 17493 17487 + 17487 17493 17494 + 17494 17488 17487 + 16847 16846 17490 + 17490 16846 16852 + 16852 17495 17490 + 17491 17490 17495 + 17495 17496 17491 + 17492 17491 17496 + 17496 17497 17492 + 17493 17492 17497 + 17497 17498 17493 + 17494 17493 17498 + 17499 17495 16852 + 17496 17495 17499 + 17499 17500 17496 + 17496 17500 17501 + 17501 17497 17496 + 17498 17497 17501 + 16852 16851 17499 + 17502 17499 16851 + 17500 17499 17502 + 17502 17503 17500 + 17500 17503 17504 + 17504 17501 17500 + 17505 17501 17504 + 17501 17505 17498 + 16851 16856 17502 + 17506 17502 16856 + 17503 17502 17506 + 17506 17507 17503 + 17503 17507 17508 + 17508 17504 17503 + 17509 17504 17508 + 17504 17509 17505 + 16856 16860 17506 + 17510 17506 16860 + 17507 17506 17510 + 17510 17511 17507 + 17507 17511 17512 + 17512 17513 17507 + 17513 17508 17507 + 17514 17508 17513 + 17508 17514 17509 + 16860 16865 17510 + 17515 17510 16865 + 17511 17510 17515 + 17515 17516 17511 + 17511 17516 17517 + 17517 17512 17511 + 17518 17512 17517 + 17512 17518 17519 + 17519 17513 17512 + 16865 16870 17515 + 17520 17515 16870 + 17516 17515 17520 + 17520 17521 17516 + 17516 17521 17522 + 17522 17517 17516 + 17518 17517 17522 + 17522 17523 17518 + 17518 17523 17524 + 17524 17519 17518 + 16870 16879 17520 + 16884 17520 16879 + 17520 16884 17525 + 17525 17521 17520 + 17521 17525 17526 + 17526 17522 17521 + 17522 17526 17527 + 17527 17523 17522 + 17523 17527 17528 + 17528 17524 17523 + 17525 16884 16883 + 16883 17529 17525 + 17525 17529 17530 + 17530 17526 17525 + 17527 17526 17530 + 17530 17531 17527 + 17527 17531 17532 + 17532 17528 17527 + 17533 17528 17532 + 17524 17528 17533 + 16893 17529 16883 + 17529 16893 17534 + 17534 17530 17529 + 17530 17534 17535 + 17535 17531 17530 + 17531 17535 17536 + 17536 17532 17531 + 17532 17536 17537 + 17537 17538 17532 + 17532 17538 17533 + 16897 17534 16893 + 17535 17534 16897 + 16897 17539 17535 + 17535 17539 17540 + 17540 17536 17535 + 17537 17536 17540 + 17540 17541 17537 + 17537 17541 17542 + 17542 17543 17537 + 17538 17537 17543 + 16901 17539 16897 + 17539 16901 17544 + 17544 17540 17539 + 17540 17544 17545 + 17545 17541 17540 + 17541 17545 17546 + 17546 17542 17541 + 16905 17544 16901 + 17545 17544 16905 + 16905 16914 17545 + 17545 16914 16919 + 16919 17546 17545 + 17547 17546 16919 + 17542 17546 17547 + 17547 17548 17542 + 17542 17548 17549 + 17549 17543 17542 + 17550 17543 17549 + 17543 17550 17538 + 17533 17538 17550 + 16919 17551 17547 + 17547 17551 17552 + 17552 17553 17547 + 17548 17547 17553 + 17553 17554 17548 + 17549 17548 17554 + 16918 17551 16919 + 17551 16918 17555 + 17555 17552 17551 + 17552 17555 17556 + 17556 17557 17552 + 17552 17557 17558 + 17558 17553 17552 + 17554 17553 17558 + 16924 17555 16918 + 17556 17555 16924 + 16924 17559 17556 + 17556 17559 17560 + 17560 17561 17556 + 17557 17556 17561 + 17561 17562 17557 + 17558 17557 17562 + 16929 17559 16924 + 17559 16929 17563 + 17563 17560 17559 + 17560 17563 17564 + 17564 17565 17560 + 17560 17565 17566 + 17566 17561 17560 + 17562 17561 17566 + 17567 17563 16929 + 17564 17563 17567 + 17567 17568 17564 + 17564 17568 17569 + 17569 17570 17564 + 17565 17564 17570 + 17570 17571 17565 + 17566 17565 17571 + 16929 16928 17567 + 16934 17567 16928 + 17568 17567 16934 + 16934 16939 17568 + 17568 16939 17572 + 17572 17569 17568 + 17573 17569 17572 + 17569 17573 17574 + 17574 17570 17569 + 17571 17570 17574 + 17575 17572 16939 + 17576 17572 17575 + 17572 17576 17573 + 17573 17576 17577 + 17577 17578 17573 + 17574 17573 17578 + 16939 16938 17575 + 17579 17575 16938 + 17580 17575 17579 + 17575 17580 17576 + 17576 17580 17581 + 17581 17577 17576 + 17582 17577 17581 + 17578 17577 17582 + 16938 16943 17579 + 17583 17579 16943 + 17584 17579 17583 + 17579 17584 17580 + 17580 17584 17585 + 17585 17581 17580 + 17586 17581 17585 + 17581 17586 17582 + 16943 16947 17583 + 17587 17583 16947 + 17588 17583 17587 + 17583 17588 17584 + 17584 17588 17589 + 17589 17585 17584 + 17590 17585 17589 + 17585 17590 17586 + 16947 16951 17587 + 17591 17587 16951 + 17592 17587 17591 + 17587 17592 17588 + 17588 17592 17593 + 17593 17589 17588 + 17594 17589 17593 + 17589 17594 17590 + 16951 16955 17591 + 17595 17591 16955 + 17596 17591 17595 + 17591 17596 17592 + 17592 17596 17597 + 17597 17593 17592 + 17598 17593 17597 + 17593 17598 17594 + 16955 16960 17595 + 17599 17595 16960 + 17600 17595 17599 + 17595 17600 17596 + 17596 17600 17601 + 17601 17597 17596 + 17602 17597 17601 + 17597 17602 17598 + 16960 16964 17599 + 17603 17599 16964 + 17604 17599 17603 + 17599 17604 17600 + 17600 17604 17605 + 17605 17601 17600 + 17606 17601 17605 + 17601 17606 17602 + 16964 16968 17603 + 16977 17603 16968 + 17607 17603 16977 + 17603 17607 17604 + 17604 17607 17608 + 17608 17605 17604 + 17609 17605 17608 + 17605 17609 17606 + 17606 17609 17610 + 17610 17611 17606 + 17602 17606 17611 + 16977 16982 17607 + 17607 16982 17612 + 17612 17608 17607 + 17613 17608 17612 + 17608 17613 17609 + 17609 17613 17614 + 17614 17610 17609 + 17615 17610 17614 + 17610 17615 17616 + 17616 17611 17610 + 16987 17612 16982 + 17617 17612 16987 + 17612 17617 17613 + 17613 17617 17618 + 17618 17614 17613 + 17619 17614 17618 + 17614 17619 17615 + 17615 17619 17620 + 17620 17621 17615 + 17616 17615 17621 + 16987 16992 17617 + 17617 16992 17622 + 17622 17618 17617 + 17623 17618 17622 + 17618 17623 17619 + 17619 17623 17624 + 17624 17620 17619 + 17625 17620 17624 + 17620 17625 17626 + 17626 17621 17620 + 16997 17622 16992 + 17627 17622 16997 + 17622 17627 17623 + 17623 17627 17628 + 17628 17624 17623 + 17629 17624 17628 + 17624 17629 17625 + 17630 17625 17629 + 17626 17625 17630 + 16997 17002 17627 + 17627 17002 17631 + 17631 17628 17627 + 17632 17628 17631 + 17628 17632 17629 + 17629 17632 17633 + 17633 17634 17629 + 17634 17630 17629 + 17007 17631 17002 + 17635 17631 17007 + 17631 17635 17632 + 17632 17635 17636 + 17636 17633 17632 + 17637 17633 17636 + 17633 17637 17638 + 17638 17634 17633 + 17634 17638 17639 + 17639 17630 17634 + 17007 17012 17635 + 17635 17012 17640 + 17640 17636 17635 + 17641 17636 17640 + 17636 17641 17637 + 17642 17637 17641 + 17638 17637 17642 + 17642 17643 17638 + 17638 17643 17644 + 17644 17639 17638 + 17017 17640 17012 + 17645 17640 17017 + 17640 17645 17641 + 17641 17645 17646 + 17646 17647 17641 + 17641 17647 17642 + 17648 17642 17647 + 17642 17648 17649 + 17649 17643 17642 + 17017 17022 17645 + 17646 17645 17022 + 17022 17650 17646 + 17651 17646 17650 + 17646 17651 17652 + 17652 17647 17646 + 17647 17652 17648 + 17653 17648 17652 + 17649 17648 17653 + 17026 17650 17022 + 17040 17650 17026 + 17650 17040 17651 + 17654 17651 17040 + 17652 17651 17654 + 17654 17655 17652 + 17652 17655 17653 + 17656 17653 17655 + 17653 17656 17657 + 17657 17658 17653 + 17653 17658 17649 + 17040 17659 17654 + 17660 17654 17659 + 17654 17660 17661 + 17661 17655 17654 + 17655 17661 17656 + 17662 17656 17661 + 17657 17656 17662 + 17039 17659 17040 + 17663 17659 17039 + 17659 17663 17660 + 17664 17660 17663 + 17661 17660 17664 + 17664 17665 17661 + 17661 17665 17662 + 17039 17045 17663 + 17663 17045 17050 + 17050 17666 17663 + 17663 17666 17664 + 17667 17664 17666 + 17664 17667 17668 + 17668 17665 17664 + 17665 17668 17669 + 17669 17662 17665 + 17670 17666 17050 + 17666 17670 17667 + 17671 17667 17670 + 17668 17667 17671 + 17671 17672 17668 + 17668 17672 17673 + 17673 17669 17668 + 17674 17669 17673 + 17662 17669 17674 + 17050 17055 17670 + 17670 17055 17060 + 17060 17675 17670 + 17670 17675 17671 + 17676 17671 17675 + 17671 17676 17677 + 17677 17672 17671 + 17672 17677 17678 + 17678 17673 17672 + 17070 17675 17060 + 17675 17070 17676 + 17679 17676 17070 + 17677 17676 17679 + 17679 17680 17677 + 17677 17680 17681 + 17681 17678 17677 + 17682 17678 17681 + 17673 17678 17682 + 17682 17683 17673 + 17673 17683 17674 + 17070 17079 17679 + 17084 17679 17079 + 17679 17084 17684 + 17684 17680 17679 + 17680 17684 17685 + 17685 17681 17680 + 17681 17685 17686 + 17686 17687 17681 + 17681 17687 17682 + 17684 17084 17083 + 17083 17688 17684 + 17684 17688 17689 + 17689 17685 17684 + 17686 17685 17689 + 17689 17690 17686 + 17691 17686 17690 + 17687 17686 17691 + 17691 17692 17687 + 17682 17687 17692 + 17089 17688 17083 + 17688 17089 17094 + 17094 17689 17688 + 17689 17094 17693 + 17693 17690 17689 + 17690 17693 17694 + 17694 17695 17690 + 17690 17695 17691 + 17696 17691 17695 + 17692 17691 17696 + 17693 17094 17697 + 17697 17698 17693 + 17693 17698 17699 + 17699 17700 17693 + 17700 17694 17693 + 17701 17694 17700 + 17695 17694 17701 + 17695 17701 17696 + 17702 17697 17094 + 17703 17697 17702 + 17698 17697 17703 + 17703 17704 17698 + 17698 17704 17705 + 17705 17699 17698 + 17093 17702 17094 + 17706 17702 17093 + 17702 17706 17707 + 17702 17707 17703 + 17708 17703 17707 + 17704 17703 17708 + 17708 17709 17704 + 17704 17709 17710 + 17710 17705 17704 + 17093 17099 17706 + 17711 17706 17099 + 17707 17706 17711 + 17711 17712 17707 + 17707 17712 17708 + 17713 17708 17712 + 17708 17713 17714 + 17714 17709 17708 + 17709 17714 17715 + 17715 17710 17709 + 17099 17716 17711 + 17717 17711 17716 + 17711 17717 17167 + 17167 17712 17711 + 17712 17167 17713 + 17166 17713 17167 + 17714 17713 17166 + 17098 17716 17099 + 17108 17716 17098 + 17716 17108 17717 + 17155 17717 17108 + 17167 17717 17155 + 17166 17718 17714 + 17165 17718 17166 + 17718 17165 17719 + 17719 17720 17718 + 17714 17718 17720 + 17720 17715 17714 + 17721 17715 17720 + 17710 17715 17721 + 17721 17722 17710 + 17710 17722 17723 + 17723 17705 17710 + 17171 17719 17165 + 17724 17719 17171 + 17720 17719 17724 + 17724 17725 17720 + 17720 17725 17721 + 17721 17725 17726 + 17726 17727 17721 + 17722 17721 17727 + 17727 17728 17722 + 17723 17722 17728 + 17171 17729 17724 + 17724 17729 17730 + 17730 17731 17724 + 17725 17724 17731 + 17731 17726 17725 + 17175 17729 17171 + 17729 17175 17732 + 17732 17730 17729 + 17730 17732 17733 + 17733 17734 17730 + 17730 17734 17735 + 17735 17731 17730 + 17726 17731 17735 + 17179 17732 17175 + 17733 17732 17179 + 17179 17736 17733 + 17733 17736 17737 + 17737 17738 17733 + 17734 17733 17738 + 17738 17739 17734 + 17735 17734 17739 + 17184 17736 17179 + 17736 17184 17740 + 17740 17737 17736 + 17737 17740 17741 + 17741 17742 17737 + 17737 17742 17743 + 17743 17738 17737 + 17739 17738 17743 + 17189 17740 17184 + 17741 17740 17189 + 17189 17199 17741 + 17741 17199 17208 + 17208 17744 17741 + 17742 17741 17744 + 17744 17745 17742 + 17743 17742 17745 + 17745 17746 17743 + 17747 17743 17746 + 17743 17747 17739 + 17748 17744 17208 + 17745 17744 17748 + 17748 17749 17745 + 17745 17749 17750 + 17750 17746 17745 + 17751 17746 17750 + 17746 17751 17747 + 17752 17747 17751 + 17739 17747 17752 + 17208 17753 17748 + 17748 17753 17754 + 17754 17755 17748 + 17749 17748 17755 + 17755 17756 17749 + 17750 17749 17756 + 17207 17753 17208 + 17753 17207 17217 + 17217 17754 17753 + 17757 17754 17217 + 17754 17757 17758 + 17758 17755 17754 + 17755 17758 17759 + 17759 17756 17755 + 17756 17759 17760 + 17760 17761 17756 + 17756 17761 17750 + 17217 17216 17757 + 17757 17216 17762 + 17762 17763 17757 + 17758 17757 17763 + 17763 17764 17758 + 17759 17758 17764 + 17764 17765 17759 + 17760 17759 17765 + 17221 17762 17216 + 17766 17762 17221 + 17762 17766 17767 + 17767 17763 17762 + 17763 17767 17768 + 17768 17764 17763 + 17764 17768 17769 + 17769 17765 17764 + 17221 17225 17766 + 17766 17225 17770 + 17770 17771 17766 + 17767 17766 17771 + 17771 17772 17767 + 17768 17767 17772 + 17772 17773 17768 + 17769 17768 17773 + 17229 17770 17225 + 17774 17770 17229 + 17770 17774 17775 + 17775 17771 17770 + 17771 17775 17776 + 17776 17772 17771 + 17772 17776 17777 + 17777 17773 17772 + 17229 17234 17774 + 17774 17234 17778 + 17778 17779 17774 + 17775 17774 17779 + 17779 17780 17775 + 17776 17775 17780 + 17780 17781 17776 + 17777 17776 17781 + 17239 17778 17234 + 17782 17778 17239 + 17778 17782 17783 + 17783 17779 17778 + 17779 17783 17784 + 17784 17780 17779 + 17780 17784 17785 + 17785 17781 17780 + 17239 17786 17782 + 17782 17786 17787 + 17787 17788 17782 + 17783 17782 17788 + 17788 17789 17783 + 17784 17783 17789 + 17789 17790 17784 + 17785 17784 17790 + 17786 17239 17238 + 17238 17244 17786 + 17786 17244 17791 + 17791 17787 17786 + 17792 17787 17791 + 17787 17792 17793 + 17793 17788 17787 + 17788 17793 17794 + 17794 17789 17788 + 17789 17794 17795 + 17795 17790 17789 + 17249 17791 17244 + 17796 17791 17249 + 17791 17796 17792 + 17792 17796 17797 + 17797 17798 17792 + 17793 17792 17798 + 17798 17799 17793 + 17794 17793 17799 + 17799 17800 17794 + 17795 17794 17800 + 17249 17254 17796 + 17796 17254 17801 + 17801 17797 17796 + 17802 17797 17801 + 17798 17797 17802 + 17802 17803 17798 + 17798 17803 17804 + 17804 17799 17798 + 17800 17799 17804 + 17259 17801 17254 + 17801 17259 17264 + 17264 17805 17801 + 17801 17805 17802 + 17802 17805 17806 + 17806 17807 17802 + 17803 17802 17807 + 17807 17808 17803 + 17804 17803 17808 + 17805 17264 17809 + 17809 17806 17805 + 17806 17809 17810 + 17810 17811 17806 + 17806 17811 17812 + 17812 17807 17806 + 17808 17807 17812 + 17813 17809 17264 + 17810 17809 17813 + 17813 17814 17810 + 17810 17814 17815 + 17815 17816 17810 + 17811 17810 17816 + 17264 17263 17813 + 17263 17269 17813 + 17817 17813 17269 + 17813 17817 17818 + 17818 17814 17813 + 17814 17818 17819 + 17819 17815 17814 + 17269 17268 17817 + 17281 17817 17268 + 17818 17817 17281 + 17281 17820 17818 + 17818 17820 17821 + 17821 17819 17818 + 17822 17819 17821 + 17815 17819 17822 + 17822 17823 17815 + 17815 17823 17824 + 17824 17816 17815 + 17825 17820 17281 + 17820 17825 17826 + 17826 17821 17820 + 17821 17826 17827 + 17827 17828 17821 + 17821 17828 17822 + 17829 17822 17828 + 17823 17822 17829 + 17281 17286 17825 + 17825 17286 17291 + 17291 17830 17825 + 17825 17830 17831 + 17831 17826 17825 + 17827 17826 17831 + 17831 17832 17827 + 17833 17827 17832 + 17828 17827 17833 + 17833 17834 17828 + 17828 17834 17829 + 17306 17830 17291 + 17830 17306 17835 + 17835 17831 17830 + 17831 17835 17836 + 17836 17832 17831 + 17832 17836 17837 + 17837 17838 17832 + 17832 17838 17833 + 17839 17833 17838 + 17834 17833 17839 + 17314 17835 17306 + 17836 17835 17314 + 17314 17321 17836 + 17836 17321 17320 + 17837 17836 17320 + 17320 17329 17837 + 17840 17837 17329 + 17838 17837 17840 + 17840 17841 17838 + 17838 17841 17839 + 17842 17839 17841 + 17843 17839 17842 + 17839 17843 17834 + 17834 17843 17844 + 17844 17829 17834 + 17329 17328 17840 + 17845 17840 17328 + 17841 17840 17845 + 17845 17846 17841 + 17841 17846 17842 + 17847 17842 17846 + 17847 17848 17842 + 17842 17848 17843 + 17843 17848 17849 + 17849 17844 17843 + 17328 17334 17845 + 17334 17850 17845 + 17851 17845 17850 + 17846 17845 17851 + 17851 17852 17846 + 17846 17852 17847 + 17847 17852 17853 + 17854 17847 17853 + 17848 17847 17854 + 17854 17849 17848 + 17855 17850 17334 + 17850 17855 17856 + 17856 17857 17850 + 17850 17857 17851 + 17851 17857 17858 + 17858 17859 17851 + 17852 17851 17859 + 17859 17853 17852 + 17334 17333 17855 + 17855 17333 17860 + 17860 17861 17855 + 17856 17855 17861 + 17861 17862 17856 + 17856 17862 17471 + 17471 17863 17856 + 17857 17856 17863 + 17863 17858 17857 + 17332 17860 17333 + 17864 17860 17332 + 17860 17864 17865 + 17865 17861 17860 + 17862 17861 17865 + 17862 17865 17866 + 17866 17867 17862 + 17862 17867 17471 + 17453 17471 17867 + 17332 17331 17864 + 17864 17331 17868 + 17868 17869 17864 + 17865 17864 17869 + 17869 17866 17865 + 17870 17866 17869 + 17866 17870 17871 + 17871 17867 17866 + 17867 17871 17453 + 17868 17331 17338 + 17338 17872 17868 + 17873 17868 17872 + 17868 17873 17869 + 17869 17873 17870 + 17870 17873 17874 + 17874 17875 17870 + 17871 17870 17875 + 17875 17876 17871 + 17453 17871 17876 + 17347 17872 17338 + 17872 17347 17877 + 17877 17874 17872 + 17872 17874 17873 + 17877 17347 17878 + 17878 17879 17877 + 17880 17877 17879 + 17874 17877 17880 + 17880 17875 17874 + 17876 17875 17880 + 17876 17880 17881 + 17881 17882 17876 + 17876 17882 17453 + 17882 17454 17453 + 17346 17878 17347 + 17367 17878 17346 + 17367 17879 17878 + 17879 17367 17375 + 17375 17883 17879 + 17879 17883 17880 + 17883 17881 17880 + 17389 17881 17883 + 17882 17881 17389 + 17882 17389 17884 + 17884 17454 17882 + 17884 17437 17454 + 17437 17884 17388 + 17388 17884 17389 + 17885 17883 17375 + 17883 17885 17389 + 17389 17885 17384 + 17373 17384 17885 + 17885 17374 17373 + 17375 17374 17885 + 17470 17863 17471 + 17863 17470 17858 + 17858 17470 17469 + 17469 17859 17858 + 17859 17469 17853 + 17853 17469 17468 + 17468 17886 17853 + 17853 17886 17854 + 17887 17854 17886 + 17854 17887 17888 + 17888 17849 17854 + 17886 17468 17889 + 17886 17889 17887 + 17890 17887 17889 + 17888 17887 17890 + 17890 17891 17888 + 17892 17888 17891 + 17849 17888 17892 + 17892 17844 17849 + 17889 17468 17467 + 17467 17893 17889 + 17889 17893 17890 + 17894 17890 17893 + 17890 17894 17895 + 17895 17891 17890 + 17891 17895 17896 + 17896 17897 17891 + 17891 17897 17892 + 17893 17467 17898 + 17893 17898 17894 + 17899 17894 17898 + 17895 17894 17899 + 17899 17900 17895 + 17896 17895 17900 + 17900 17901 17896 + 17902 17896 17901 + 17897 17896 17902 + 17898 17467 17466 + 17466 17903 17898 + 17898 17903 17899 + 17904 17899 17903 + 17899 17904 17905 + 17905 17900 17899 + 17900 17905 17906 + 17906 17901 17900 + 17903 17466 17907 + 17903 17907 17904 + 17908 17904 17907 + 17905 17904 17908 + 17908 17909 17905 + 17906 17905 17909 + 17909 17910 17906 + 17911 17906 17910 + 17901 17906 17911 + 17907 17466 17465 + 17465 17912 17907 + 17907 17912 17908 + 17913 17908 17912 + 17908 17913 17914 + 17914 17909 17908 + 17909 17914 17915 + 17915 17910 17909 + 17912 17465 17916 + 17912 17916 17913 + 17917 17913 17916 + 17914 17913 17917 + 17917 17918 17914 + 17915 17914 17918 + 17918 17919 17915 + 17920 17915 17919 + 17910 17915 17920 + 17916 17465 17464 + 17464 17921 17916 + 17916 17921 17922 + 17922 17923 17916 + 17923 17917 17916 + 17924 17917 17923 + 17917 17924 17918 + 17918 17924 17925 + 17925 17919 17918 + 17921 17464 17476 + 17921 17476 17926 + 17926 17922 17921 + 17922 17926 17927 + 17927 17928 17922 + 17922 17928 17929 + 17929 17923 17922 + 17923 17929 17930 + 17923 17930 17924 + 17925 17924 17930 + 17480 17926 17476 + 17927 17926 17480 + 17480 17931 17927 + 17927 17931 17932 + 17932 17933 17927 + 17928 17927 17933 + 17933 17934 17928 + 17929 17928 17934 + 17484 17931 17480 + 17931 17484 17489 + 17489 17932 17931 + 17932 17489 17935 + 17935 17936 17932 + 17932 17936 17937 + 17937 17933 17932 + 17934 17933 17937 + 17935 17489 17488 + 17488 17938 17935 + 17935 17938 17939 + 17939 17940 17935 + 17936 17935 17940 + 17940 17941 17936 + 17936 17941 17942 + 17942 17937 17936 + 17938 17488 17494 + 17938 17494 17943 + 17943 17939 17938 + 17939 17943 17944 + 17944 17945 17939 + 17939 17945 17946 + 17946 17940 17939 + 17941 17940 17946 + 17498 17943 17494 + 17944 17943 17498 + 17498 17505 17944 + 17947 17944 17505 + 17945 17944 17947 + 17947 17948 17945 + 17945 17948 17949 + 17949 17950 17945 + 17950 17951 17945 + 17951 17946 17945 + 17952 17947 17505 + 17953 17947 17952 + 17948 17947 17953 + 17953 17954 17948 + 17948 17954 17955 + 17955 17949 17948 + 17505 17509 17952 + 17956 17952 17509 + 17957 17952 17956 + 17952 17957 17953 + 17958 17953 17957 + 17954 17953 17958 + 17509 17514 17956 + 17959 17956 17514 + 17957 17956 17959 + 17959 17960 17957 + 17957 17960 17958 + 17961 17958 17960 + 17962 17958 17961 + 17958 17962 17954 + 17514 17963 17959 + 17964 17959 17963 + 17960 17959 17964 + 17964 17965 17960 + 17960 17965 17961 + 17966 17961 17965 + 17967 17961 17966 + 17961 17967 17962 + 17513 17963 17514 + 17963 17513 17519 + 17519 17968 17963 + 17963 17968 17964 + 17969 17964 17968 + 17965 17964 17969 + 17969 17970 17965 + 17965 17970 17966 + 17968 17519 17524 + 17524 17971 17968 + 17968 17971 17969 + 17972 17969 17971 + 17969 17972 17973 + 17973 17970 17969 + 17970 17973 17974 + 17974 17966 17970 + 17533 17971 17524 + 17971 17533 17972 + 17550 17972 17533 + 17973 17972 17550 + 17550 17975 17973 + 17973 17975 17976 + 17976 17974 17973 + 17977 17974 17976 + 17966 17974 17977 + 17977 17978 17966 + 17966 17978 17967 + 17549 17975 17550 + 17975 17549 17979 + 17979 17976 17975 + 17976 17979 17980 + 17980 17981 17976 + 17976 17981 17977 + 17977 17981 17982 + 17982 17983 17977 + 17978 17977 17983 + 17554 17979 17549 + 17980 17979 17554 + 17554 17984 17980 + 17980 17984 17985 + 17985 17986 17980 + 17981 17980 17986 + 17986 17982 17981 + 17558 17984 17554 + 17984 17558 17987 + 17987 17985 17984 + 17985 17987 17988 + 17988 17989 17985 + 17985 17989 17990 + 17990 17986 17985 + 17982 17986 17990 + 17562 17987 17558 + 17988 17987 17562 + 17562 17991 17988 + 17988 17991 17992 + 17992 17993 17988 + 17989 17988 17993 + 17993 17994 17989 + 17990 17989 17994 + 17566 17991 17562 + 17991 17566 17995 + 17995 17992 17991 + 17992 17995 17996 + 17996 17997 17992 + 17992 17997 17998 + 17998 17993 17992 + 17994 17993 17998 + 17571 17995 17566 + 17996 17995 17571 + 17571 17999 17996 + 17996 17999 18000 + 18000 18001 17996 + 17997 17996 18001 + 18001 18002 17997 + 17998 17997 18002 + 17574 17999 17571 + 17999 17574 18003 + 18003 18000 17999 + 18000 18003 18004 + 18004 18005 18000 + 18000 18005 18006 + 18006 18001 18000 + 18002 18001 18006 + 17578 18003 17574 + 18004 18003 17578 + 17578 18007 18004 + 18004 18007 18008 + 18008 18009 18004 + 18005 18004 18009 + 18009 18010 18005 + 18006 18005 18010 + 17582 18007 17578 + 18007 17582 18011 + 18011 18008 18007 + 18008 18011 18012 + 18012 18013 18008 + 18008 18013 18014 + 18014 18009 18008 + 18010 18009 18014 + 18015 18011 17582 + 18012 18011 18015 + 18015 18016 18012 + 18012 18016 18017 + 18017 18018 18012 + 18013 18012 18018 + 17582 17586 18015 + 18019 18015 17586 + 18016 18015 18019 + 18019 18020 18016 + 18016 18020 18021 + 18021 18017 18016 + 18022 18017 18021 + 18017 18022 18023 + 18023 18018 18017 + 17586 17590 18019 + 18024 18019 17590 + 18020 18019 18024 + 18024 18025 18020 + 18020 18025 18026 + 18026 18021 18020 + 18027 18021 18026 + 18021 18027 18022 + 17590 17594 18024 + 18028 18024 17594 + 18025 18024 18028 + 18028 18029 18025 + 18025 18029 18030 + 18030 18026 18025 + 18031 18026 18030 + 18026 18031 18027 + 18032 18027 18031 + 18022 18027 18032 + 17594 17598 18028 + 18033 18028 17598 + 18029 18028 18033 + 18033 18034 18029 + 18029 18034 18035 + 18030 18029 18035 + 17598 17602 18033 + 17611 18033 17602 + 18034 18033 17611 + 17611 17616 18034 + 18034 17616 18036 + 18036 118 18034 + 18037 118 18036 + 118 18037 18038 + 18037 18039 18038 + 257 18039 18037 + 17621 18036 17616 + 18040 18036 17621 + 18036 18040 18037 + 18037 18040 257 + 257 18040 17626 + 18041 257 17626 + 18042 257 18041 + 257 18042 18043 + 17621 17626 18040 + 17630 18041 17626 + 18041 17630 17639 + 18044 18041 17639 + 18041 18044 18042 + 18045 18042 18044 + 18043 18042 18045 + 18045 18046 18043 + 18043 18046 18030 + 18047 18030 18046 + 18030 18047 18031 + 18044 17639 17644 + 17644 18048 18044 + 18044 18048 18045 + 18049 18045 18048 + 18045 18049 18050 + 18050 18046 18045 + 18046 18050 18047 + 18051 18047 18050 + 18031 18047 18051 + 18051 18052 18031 + 18031 18052 18032 + 18053 18048 17644 + 18048 18053 18049 + 18054 18049 18053 + 18050 18049 18054 + 18054 18055 18050 + 18050 18055 18051 + 18056 18051 18055 + 18051 18056 18057 + 18057 18052 18051 + 17644 18058 18053 + 18053 18058 18059 + 18059 18060 18053 + 18053 18060 18054 + 18061 18054 18060 + 18054 18061 18062 + 18062 18055 18054 + 18055 18062 18056 + 18058 17644 17643 + 17643 17649 18058 + 18059 18058 17649 + 17649 17658 18059 + 18063 18059 17658 + 18059 18063 18064 + 18064 18060 18059 + 18060 18064 18061 + 18065 18061 18064 + 18062 18061 18065 + 18065 18066 18062 + 18062 18066 18067 + 18067 18056 18062 + 18057 18056 18067 + 17658 17657 18063 + 18068 18063 17657 + 18064 18063 18068 + 18068 18069 18064 + 18064 18069 18065 + 18070 18065 18069 + 18065 18070 18071 + 18071 18066 18065 + 18066 18071 18072 + 18072 18067 18066 + 17657 18073 18068 + 18074 18068 18073 + 18068 18074 18075 + 18075 18069 18068 + 18069 18075 18070 + 18076 18070 18075 + 18071 18070 18076 + 17662 18073 17657 + 17674 18073 17662 + 18073 17674 18074 + 18077 18074 17674 + 18075 18074 18077 + 18077 18078 18075 + 18075 18078 18076 + 18079 18076 18078 + 18076 18079 18080 + 18080 18081 18076 + 18076 18081 18071 + 17674 17683 18077 + 18082 18077 17683 + 18077 18082 18083 + 18083 18078 18077 + 18078 18083 18079 + 18084 18079 18083 + 18080 18079 18084 + 17683 17682 18082 + 17692 18082 17682 + 18083 18082 17692 + 17692 18085 18083 + 18083 18085 18084 + 18086 18084 18085 + 18084 18086 18087 + 18087 18088 18084 + 18084 18088 18080 + 17696 18085 17692 + 18085 17696 18086 + 18089 18086 17696 + 18087 18086 18089 + 18089 18090 18087 + 18087 18090 18091 + 18091 18092 18087 + 18088 18087 18092 + 18092 18093 18088 + 18080 18088 18093 + 17696 17701 18089 + 17700 18089 17701 + 18089 17700 18094 + 18094 18090 18089 + 18090 18094 18095 + 18095 18091 18090 + 18091 18095 18096 + 18096 18097 18091 + 18091 18097 18098 + 18098 18092 18091 + 18093 18092 18098 + 18094 17700 17699 + 17699 18099 18094 + 18095 18094 18099 + 18099 18100 18095 + 18096 18095 18100 + 18100 18101 18096 + 18102 18096 18101 + 18097 18096 18102 + 18102 18103 18097 + 18098 18097 18103 + 18099 17699 17705 + 17705 17723 18099 + 18099 17723 18104 + 18104 18100 18099 + 18101 18100 18104 + 18104 18105 18101 + 18101 18105 18106 + 18106 18107 18101 + 18101 18107 18102 + 18108 18102 18107 + 18103 18102 18108 + 17728 18104 17723 + 18105 18104 17728 + 17728 18109 18105 + 18105 18109 18110 + 18110 18106 18105 + 18111 18106 18110 + 18106 18111 18112 + 18112 18107 18106 + 18107 18112 18108 + 18113 18109 17728 + 18109 18113 18114 + 18114 18110 18109 + 18110 18114 18115 + 18115 18116 18110 + 18110 18116 18111 + 17728 17727 18113 + 18113 17727 17726 + 17726 18117 18113 + 18113 18117 18118 + 18118 18114 18113 + 18115 18114 18118 + 18118 18119 18115 + 18115 18119 18120 + 18120 18121 18115 + 18116 18115 18121 + 17735 18117 17726 + 18117 17735 18122 + 18122 18118 18117 + 18118 18122 17752 + 17752 18119 18118 + 18119 17752 18123 + 18123 18120 18119 + 17739 18122 17735 + 17752 18122 17739 + 17751 18123 17752 + 18124 18123 17751 + 18120 18123 18124 + 18124 18125 18120 + 18120 18125 18126 + 18126 18121 18120 + 18127 18121 18126 + 18121 18127 18116 + 18111 18116 18127 + 18127 18128 18111 + 18112 18111 18128 + 17751 18129 18124 + 18124 18129 18130 + 18130 18131 18124 + 18125 18124 18131 + 18131 18132 18125 + 18126 18125 18132 + 17750 18129 17751 + 18129 17750 17761 + 17761 18130 18129 + 18133 18130 17761 + 18130 18133 18134 + 18134 18131 18130 + 18131 18134 18135 + 18135 18132 18131 + 18132 18135 18136 + 18136 18137 18132 + 18132 18137 18126 + 17761 17760 18133 + 18133 17760 18138 + 18138 18139 18133 + 18134 18133 18139 + 18139 18140 18134 + 18135 18134 18140 + 18140 18141 18135 + 18136 18135 18141 + 17765 18138 17760 + 18142 18138 17765 + 18138 18142 18143 + 18143 18139 18138 + 18139 18143 18144 + 18144 18140 18139 + 18140 18144 18145 + 18145 18141 18140 + 17765 17769 18142 + 18142 17769 18146 + 18146 18147 18142 + 18143 18142 18147 + 18147 18148 18143 + 18144 18143 18148 + 18148 18149 18144 + 18145 18144 18149 + 17773 18146 17769 + 18150 18146 17773 + 18146 18150 18151 + 18151 18147 18146 + 18147 18151 18152 + 18152 18148 18147 + 18148 18152 18153 + 18153 18149 18148 + 17773 17777 18150 + 18150 17777 18154 + 18154 18155 18150 + 18151 18150 18155 + 18155 18156 18151 + 18152 18151 18156 + 18156 18157 18152 + 18153 18152 18157 + 17781 18154 17777 + 18158 18154 17781 + 18154 18158 18159 + 18159 18155 18154 + 18155 18159 18160 + 18160 18156 18155 + 18156 18160 18161 + 18161 18157 18156 + 17781 17785 18158 + 18158 17785 18162 + 18162 18163 18158 + 18159 18158 18163 + 18163 18164 18159 + 18160 18159 18164 + 18164 18165 18160 + 18161 18160 18165 + 17790 18162 17785 + 18166 18162 17790 + 18162 18166 18167 + 18167 18163 18162 + 18163 18167 18168 + 18168 18164 18163 + 18164 18168 18169 + 18169 18165 18164 + 17790 17795 18166 + 18166 17795 18170 + 18170 18171 18166 + 18167 18166 18171 + 18171 18172 18167 + 18168 18167 18172 + 18172 18173 18168 + 18169 18168 18173 + 17800 18170 17795 + 18174 18170 17800 + 18170 18174 18171 + 18171 18174 18175 + 18175 18172 18171 + 18173 18172 18175 + 18175 18176 18173 + 18173 18176 18177 + 18177 18178 18173 + 18173 18178 18169 + 17800 18179 18174 + 18174 18179 18180 + 18175 18174 18180 + 18180 18181 18175 + 18176 18175 18181 + 18181 18182 18176 + 18177 18176 18182 + 17804 18179 17800 + 18179 17804 18183 + 18183 18180 18179 + 18180 18183 18184 + 18184 18185 18180 + 18180 18185 18186 + 18186 18181 18180 + 18181 18186 18182 + 17808 18183 17804 + 18184 18183 17808 + 17808 18187 18184 + 18184 18187 18188 + 18188 18189 18184 + 18185 18184 18189 + 18189 18190 18185 + 18186 18185 18190 + 18191 18186 18190 + 18182 18186 18191 + 17812 18187 17808 + 18187 17812 18192 + 18192 18188 18187 + 18188 18192 18193 + 18193 18194 18188 + 18188 18194 18195 + 18195 18189 18188 + 18190 18189 18195 + 18192 17812 17811 + 17811 18196 18192 + 18193 18192 18196 + 18196 18197 18193 + 18193 18197 17902 + 17902 18198 18193 + 18194 18193 18198 + 17816 18196 17811 + 18197 18196 17816 + 17816 17824 18197 + 18197 17824 18199 + 18199 17902 18197 + 17902 18199 17897 + 17897 18199 18200 + 18200 17892 17897 + 17844 17892 18200 + 18200 17829 17844 + 18199 17824 17823 + 17823 18200 18199 + 17829 18200 17823 + 17901 18198 17902 + 17911 18198 17901 + 18198 17911 18194 + 18194 17911 18201 + 18201 18195 18194 + 18202 18195 18201 + 18195 18202 18190 + 18190 18202 18203 + 18203 18204 18190 + 18190 18204 18191 + 17910 18201 17911 + 17920 18201 17910 + 18201 17920 18202 + 18202 17920 18205 + 18205 18203 18202 + 18206 18203 18205 + 18203 18206 18207 + 18207 18204 18203 + 18204 18207 18208 + 18208 18191 18204 + 17919 18205 17920 + 18209 18205 17919 + 18205 18209 18206 + 18206 18209 18210 + 18210 18211 18206 + 18207 18206 18211 + 18211 18212 18207 + 18207 18212 18213 + 18213 18208 18207 + 17919 17925 18209 + 18209 17925 18214 + 18214 18210 18209 + 18210 18214 18215 + 18210 18215 18216 + 18216 18211 18210 + 18211 18216 18217 + 18217 18212 18211 + 18212 18217 18218 + 18218 18213 18212 + 18214 17925 17930 + 17930 18219 18214 + 18215 18214 18219 + 18219 18220 18215 + 18216 18215 18220 + 18220 18221 18216 + 18217 18216 18221 + 18221 18222 18217 + 18217 18222 18223 + 18223 18218 18217 + 18224 18219 17930 + 18219 18224 18225 + 18225 18220 18219 + 18220 18225 18226 + 18226 18221 18220 + 18221 18226 18227 + 18227 18222 18221 + 18222 18227 18228 + 18228 18223 18222 + 17930 17929 18224 + 18229 18224 17929 + 18225 18224 18229 + 18229 18230 18225 + 18226 18225 18230 + 18230 18231 18226 + 18227 18226 18231 + 17934 18229 17929 + 18232 18229 17934 + 18230 18229 18232 + 18230 18232 18233 + 18233 18231 18230 + 18231 18233 18234 + 18234 18235 18231 + 18231 18235 18227 + 17934 18236 18232 + 18233 18232 18236 + 18236 18237 18233 + 18234 18233 18237 + 17937 18236 17934 + 18236 17937 17942 + 17942 18237 18236 + 18237 17942 18238 + 18238 18239 18237 + 18237 18239 18234 + 18238 17942 17941 + 17941 18240 18238 + 18238 18240 18241 + 18241 18242 18238 + 18242 18243 18238 + 18243 18244 18238 + 18239 18238 18244 + 17946 18240 17941 + 18240 17946 17951 + 17951 18241 18240 + 18241 17951 18245 + 18245 18246 18241 + 18241 18246 18247 + 18247 18242 18241 + 18248 18242 18247 + 18242 18248 18249 + 18249 18243 18242 + 18245 17951 17950 + 17950 18250 18245 + 18251 18245 18250 + 18246 18245 18251 + 18251 18252 18246 + 18246 18252 18253 + 18253 18247 18246 + 18248 18247 18253 + 18253 18254 18248 + 18249 18248 18254 + 18250 17950 18255 + 18250 18255 18256 + 18256 18257 18250 + 18250 18257 18251 + 18258 18251 18257 + 18252 18251 18258 + 18255 17950 17949 + 17949 18259 18255 + 18256 18255 18259 + 18259 18260 18256 + 18261 18256 18260 + 18257 18256 18261 + 18261 18262 18257 + 18257 18262 18258 + 18259 17949 17955 + 18259 17955 18263 + 18263 18260 18259 + 18260 18263 18264 + 18264 18265 18260 + 18260 18265 18261 + 18266 18261 18265 + 18262 18261 18266 + 18263 17955 17954 + 18267 18263 17954 + 18264 18263 18267 + 18267 18268 18264 + 18269 18264 18268 + 18265 18264 18269 + 18269 18270 18265 + 18265 18270 18266 + 17954 17962 18267 + 18271 18267 17962 + 18268 18267 18271 + 18268 18271 18272 + 18272 18273 18268 + 18268 18273 18269 + 18274 18269 18273 + 18269 18274 18275 + 18275 18270 18269 + 17962 17967 18271 + 18272 18271 17967 + 17967 17978 18272 + 17983 18272 17978 + 18272 17983 18276 + 18276 18273 18272 + 18273 18276 18274 + 18277 18274 18276 + 18275 18274 18277 + 18277 18278 18275 + 18275 18278 18279 + 18279 18280 18275 + 18270 18275 18280 + 18280 18266 18270 + 18276 17983 17982 + 17982 18281 18276 + 18276 18281 18277 + 18282 18277 18281 + 18277 18282 18283 + 18283 18278 18277 + 18278 18283 18284 + 18284 18279 18278 + 17990 18281 17982 + 18281 17990 18282 + 17994 18282 17990 + 18283 18282 17994 + 17994 18285 18283 + 18283 18285 18286 + 18286 18284 18283 + 18287 18284 18286 + 18279 18284 18287 + 18287 18288 18279 + 18279 18288 18289 + 18289 18280 18279 + 18266 18280 18289 + 17998 18285 17994 + 18285 17998 18290 + 18290 18286 18285 + 18286 18290 18291 + 18291 18292 18286 + 18286 18292 18287 + 18287 18292 18293 + 18293 18294 18287 + 18288 18287 18294 + 18002 18290 17998 + 18291 18290 18002 + 18002 18295 18291 + 18291 18295 18296 + 18296 18297 18291 + 18292 18291 18297 + 18297 18293 18292 + 18006 18295 18002 + 18295 18006 18298 + 18298 18296 18295 + 18296 18298 18299 + 18299 18300 18296 + 18296 18300 18301 + 18301 18297 18296 + 18293 18297 18301 + 18010 18298 18006 + 18299 18298 18010 + 18010 18302 18299 + 18299 18302 18303 + 18303 18304 18299 + 18300 18299 18304 + 18304 18305 18300 + 18301 18300 18305 + 18014 18302 18010 + 18302 18014 18306 + 18306 18303 18302 + 18303 18306 18307 + 18303 18307 18308 + 18308 18304 18303 + 18305 18304 18308 + 18308 18309 18305 + 18305 18309 18310 + 18310 18311 18305 + 18305 18311 18301 + 18307 18306 18312 + 18312 18313 18307 + 18308 18307 18313 + 18313 18314 18308 + 18309 18308 18314 + 18314 18315 18309 + 18309 18315 18316 + 18316 18310 18309 + 18313 18312 18317 + 18313 18317 18318 + 18318 18314 18313 + 18315 18314 18318 + 18318 18319 18315 + 18315 18319 18320 + 18320 18316 18315 + 18317 18312 18321 + 18321 18322 18317 + 18317 18322 18323 + 18323 18318 18317 + 18319 18318 18323 + 18323 18324 18319 + 18319 18324 18325 + 18325 18320 18319 + 18326 18321 18312 + 18327 18321 18326 + 18322 18321 18327 + 18327 18328 18322 + 18322 18328 18329 + 18329 18323 18322 + 18324 18323 18329 + 18013 18326 18312 + 18018 18326 18013 + 18326 18018 18023 + 18023 18330 18326 + 18326 18330 18327 + 18331 18327 18330 + 18328 18327 18331 + 18014 18013 18312 + 18331 18332 18328 + 18332 18331 18333 + 18333 18334 18332 + 18332 18334 18335 + 18335 18336 18332 + 18328 18332 18336 + 18336 18329 18328 + 18337 18329 18336 + 18329 18337 18324 + 18333 18331 18338 + 18338 18339 18333 + 18340 18333 18339 + 18334 18333 18340 + 18340 18341 18334 + 18334 18341 18342 + 18342 18335 18334 + 18330 18338 18331 + 18343 18338 18330 + 18338 18343 18344 + 18344 18339 18338 + 18339 18344 18345 + 18345 18346 18339 + 18339 18346 18340 + 18347 18340 18346 + 18341 18340 18347 + 18330 18023 18343 + 18343 18023 18022 + 18022 18348 18343 + 18344 18343 18348 + 18348 18349 18344 + 18345 18344 18349 + 18349 18350 18345 + 18351 18345 18350 + 18345 18351 18352 + 18352 18346 18345 + 18346 18352 18347 + 18032 18348 18022 + 18349 18348 18032 + 18032 18353 18349 + 18349 18353 18354 + 18354 18350 18349 + 18355 18350 18354 + 18350 18355 18351 + 18356 18351 18355 + 18352 18351 18356 + 18353 18032 18052 + 18052 18057 18353 + 18354 18353 18057 + 18057 18357 18354 + 18358 18354 18357 + 18354 18358 18355 + 18355 18358 18359 + 18359 18360 18355 + 18355 18360 18356 + 18067 18357 18057 + 18361 18357 18067 + 18357 18361 18358 + 18359 18358 18361 + 18361 18362 18359 + 18363 18359 18362 + 18359 18363 18364 + 18364 18360 18359 + 18360 18364 18365 + 18365 18356 18360 + 18067 18072 18361 + 18361 18072 18366 + 18366 18362 18361 + 18367 18362 18366 + 18362 18367 18363 + 18368 18363 18367 + 18364 18363 18368 + 18368 18369 18364 + 18364 18369 18370 + 18370 18365 18364 + 18366 18072 18071 + 18071 18081 18366 + 18371 18366 18081 + 18366 18371 18367 + 18367 18371 18093 + 18093 18372 18367 + 18367 18372 18368 + 18373 18368 18372 + 18368 18373 18374 + 18374 18369 18368 + 18081 18080 18371 + 18093 18371 18080 + 18098 18372 18093 + 18372 18098 18373 + 18103 18373 18098 + 18374 18373 18103 + 18103 18375 18374 + 18374 18375 18376 + 18376 18377 18374 + 18369 18374 18377 + 18377 18370 18369 + 18108 18375 18103 + 18375 18108 18378 + 18378 18376 18375 + 18376 18378 18379 + 18379 18380 18376 + 18376 18380 18381 + 18381 18377 18376 + 18370 18377 18381 + 18378 18108 18112 + 18112 18382 18378 + 18379 18378 18382 + 18382 18383 18379 + 18379 18383 18384 + 18384 18385 18379 + 18380 18379 18385 + 18385 18386 18380 + 18381 18380 18386 + 18128 18382 18112 + 18382 18128 18387 + 18387 18383 18382 + 18383 18387 18388 + 18388 18384 18383 + 18389 18384 18388 + 18384 18389 18390 + 18390 18385 18384 + 18385 18390 18391 + 18391 18386 18385 + 18387 18128 18127 + 18127 18392 18387 + 18387 18392 18393 + 18393 18388 18387 + 18394 18388 18393 + 18388 18394 18389 + 18389 18394 18395 + 18395 18396 18389 + 18390 18389 18396 + 18126 18392 18127 + 18392 18126 18137 + 18137 18393 18392 + 18397 18393 18137 + 18393 18397 18394 + 18394 18397 18398 + 18398 18395 18394 + 18399 18395 18398 + 18395 18399 18400 + 18400 18396 18395 + 18137 18136 18397 + 18397 18136 18401 + 18401 18398 18397 + 18402 18398 18401 + 18398 18402 18399 + 18399 18402 18403 + 18403 18404 18399 + 18400 18399 18404 + 18141 18401 18136 + 18405 18401 18141 + 18401 18405 18402 + 18402 18405 18406 + 18406 18403 18402 + 18407 18403 18406 + 18403 18407 18408 + 18408 18404 18403 + 18141 18145 18405 + 18405 18145 18409 + 18409 18406 18405 + 18410 18406 18409 + 18406 18410 18407 + 18407 18410 18411 + 18411 18412 18407 + 18408 18407 18412 + 18149 18409 18145 + 18413 18409 18149 + 18409 18413 18410 + 18410 18413 18414 + 18414 18411 18410 + 18415 18411 18414 + 18411 18415 18416 + 18416 18412 18411 + 18149 18153 18413 + 18413 18153 18417 + 18417 18414 18413 + 18418 18414 18417 + 18414 18418 18415 + 18415 18418 18419 + 18419 18420 18415 + 18416 18415 18420 + 18157 18417 18153 + 18421 18417 18157 + 18417 18421 18418 + 18418 18421 18422 + 18422 18419 18418 + 18423 18419 18422 + 18419 18423 18424 + 18424 18420 18419 + 18157 18161 18421 + 18421 18161 18425 + 18425 18422 18421 + 18426 18422 18425 + 18422 18426 18423 + 18423 18426 18427 + 18427 18428 18423 + 18424 18423 18428 + 18165 18425 18161 + 18429 18425 18165 + 18425 18429 18426 + 18426 18429 18430 + 18430 18427 18426 + 18431 18427 18430 + 18428 18427 18431 + 18165 18169 18429 + 18429 18169 18178 + 18178 18430 18429 + 18430 18178 18177 + 18177 18432 18430 + 18430 18432 18431 + 18431 18432 18433 + 18433 18434 18431 + 18435 18431 18434 + 18431 18435 18428 + 18432 18177 18436 + 18436 18433 18432 + 18433 18436 18191 + 18191 18208 18433 + 18433 18208 18213 + 18213 18434 18433 + 18437 18434 18213 + 18434 18437 18435 + 18182 18436 18177 + 18191 18436 18182 + 18213 18218 18437 + 18437 18218 18223 + 18223 18438 18437 + 18437 18438 18439 + 18439 18440 18437 + 18440 18435 18437 + 18428 18435 18440 + 18440 18441 18428 + 18428 18441 18424 + 18442 18438 18223 + 18438 18442 18443 + 18443 18439 18438 + 18439 18443 18444 + 18444 18445 18439 + 18439 18445 18446 + 18446 18440 18439 + 18441 18440 18446 + 18223 18228 18442 + 18442 18228 18447 + 18447 18448 18442 + 18442 18448 18449 + 18449 18443 18442 + 18444 18443 18449 + 18447 18228 18227 + 18450 18447 18227 + 18451 18447 18450 + 18448 18447 18451 + 18448 18451 18452 + 18452 18449 18448 + 18449 18452 18453 + 18453 18454 18449 + 18449 18454 18444 + 18227 18235 18450 + 18455 18450 18235 + 18450 18455 18456 + 18456 18457 18450 + 18450 18457 18451 + 18451 18457 18458 + 18458 18452 18451 + 18453 18452 18458 + 18235 18234 18455 + 18459 18455 18234 + 18456 18455 18459 + 18459 18460 18456 + 18456 18460 18461 + 18461 18462 18456 + 18462 18463 18456 + 18457 18456 18463 + 18463 18458 18457 + 18464 18459 18234 + 18465 18459 18464 + 18460 18459 18465 + 18460 18465 18466 + 18466 18461 18460 + 18467 18464 18234 + 18468 18464 18467 + 18469 18464 18468 + 18464 18469 18465 + 18465 18469 18470 + 18470 18466 18465 + 18471 18466 18470 + 18461 18466 18471 + 18234 18239 18467 + 18244 18467 18239 + 18467 18244 18472 + 18472 18473 18467 + 18467 18473 18468 + 18468 18473 18474 + 18474 18475 18468 + 18469 18468 18475 + 18475 18470 18469 + 18472 18244 18243 + 18243 18476 18472 + 18472 18476 18477 + 18477 18478 18472 + 18473 18472 18478 + 18478 18474 18473 + 18476 18243 18249 + 18476 18249 18479 + 18479 18477 18476 + 18477 18479 18480 + 18480 18481 18477 + 18477 18481 18482 + 18482 18478 18477 + 18474 18478 18482 + 18254 18479 18249 + 18480 18479 18254 + 18254 18483 18480 + 18480 18483 18484 + 18484 18485 18480 + 18481 18480 18485 + 18485 18486 18481 + 18481 18486 18487 + 18487 18482 18481 + 18488 18483 18254 + 18483 18488 18489 + 18489 18484 18483 + 18490 18484 18489 + 18484 18490 18491 + 18491 18485 18484 + 18485 18491 18492 + 18492 18486 18485 + 18254 18253 18488 + 18488 18253 18252 + 18252 18493 18488 + 18488 18493 18494 + 18494 18489 18488 + 18495 18489 18494 + 18489 18495 18490 + 18490 18495 18496 + 18496 18497 18490 + 18491 18490 18497 + 18258 18493 18252 + 18493 18258 18498 + 18498 18494 18493 + 18499 18494 18498 + 18494 18499 18495 + 18496 18495 18499 + 18499 18500 18496 + 18501 18496 18500 + 18496 18501 18502 + 18502 18497 18496 + 18498 18258 18262 + 18262 18503 18498 + 18504 18498 18503 + 18498 18504 18499 + 18499 18504 18505 + 18505 18500 18499 + 18506 18500 18505 + 18500 18506 18501 + 18507 18501 18506 + 18502 18501 18507 + 18266 18503 18262 + 18289 18503 18266 + 18503 18289 18504 + 18505 18504 18289 + 18289 18288 18505 + 18294 18505 18288 + 18505 18294 18506 + 18506 18294 18293 + 18293 18508 18506 + 18506 18508 18507 + 18311 18507 18508 + 18507 18311 18310 + 18310 18509 18507 + 18507 18509 18502 + 18510 18502 18509 + 18497 18502 18510 + 18301 18508 18293 + 18508 18301 18311 + 18509 18310 18316 + 18316 18511 18509 + 18509 18511 18510 + 18512 18510 18511 + 18513 18510 18512 + 18510 18513 18497 + 18497 18513 18491 + 18492 18491 18513 + 18511 18316 18320 + 18320 18514 18511 + 18511 18514 18512 + 18515 18512 18514 + 18516 18512 18515 + 18512 18516 18513 + 18513 18516 18492 + 18517 18492 18516 + 18486 18492 18517 + 18517 18487 18486 + 18514 18320 18325 + 18325 18518 18514 + 18514 18518 18515 + 18519 18515 18518 + 18520 18515 18519 + 18515 18520 18516 + 18516 18520 18517 + 18521 18517 18520 + 18487 18517 18521 + 18518 18325 18522 + 18522 18523 18518 + 18518 18523 18519 + 18524 18519 18523 + 18525 18519 18524 + 18519 18525 18520 + 18520 18525 18521 + 18522 18325 18324 + 18324 18337 18522 + 18526 18522 18337 + 18523 18522 18526 + 18526 18527 18523 + 18523 18527 18524 + 18528 18524 18527 + 18529 18524 18528 + 18524 18529 18525 + 18525 18529 18530 + 18530 18521 18525 + 18337 18531 18526 + 18532 18526 18531 + 18527 18526 18532 + 18532 18533 18527 + 18527 18533 18528 + 18534 18528 18533 + 18535 18528 18534 + 18528 18535 18529 + 18336 18531 18337 + 18531 18336 18335 + 18335 18536 18531 + 18531 18536 18532 + 18537 18532 18536 + 18533 18532 18537 + 18537 18538 18533 + 18533 18538 18534 + 18539 18534 18538 + 18540 18534 18539 + 18534 18540 18535 + 18536 18335 18342 + 18342 18541 18536 + 18536 18541 18537 + 18542 18537 18541 + 18538 18537 18542 + 18542 18543 18538 + 18538 18543 18539 + 18544 18539 18543 + 18545 18539 18544 + 18539 18545 18540 + 18541 18342 18546 + 18546 18547 18541 + 18541 18547 18542 + 18548 18542 18547 + 18543 18542 18548 + 18548 18549 18543 + 18543 18549 18544 + 18546 18342 18341 + 18341 18550 18546 + 18551 18546 18550 + 18547 18546 18551 + 18551 18552 18547 + 18547 18552 18548 + 18553 18548 18552 + 18549 18548 18553 + 18347 18550 18341 + 18550 18347 18554 + 18554 18555 18550 + 18550 18555 18551 + 18556 18551 18555 + 18552 18551 18556 + 18556 18557 18552 + 18552 18557 18553 + 18554 18347 18352 + 18352 18558 18554 + 18559 18554 18558 + 18555 18554 18559 + 18559 18560 18555 + 18555 18560 18556 + 18561 18556 18560 + 18557 18556 18561 + 18356 18558 18352 + 18562 18558 18356 + 18558 18562 18559 + 18563 18559 18562 + 18560 18559 18563 + 18563 18564 18560 + 18560 18564 18561 + 18565 18561 18564 + 18566 18561 18565 + 18561 18566 18557 + 18356 18365 18562 + 18562 18365 18370 + 18370 18567 18562 + 18562 18567 18563 + 18568 18563 18567 + 18564 18563 18568 + 18568 18569 18564 + 18564 18569 18565 + 18570 18565 18569 + 18571 18565 18570 + 18565 18571 18566 + 18381 18567 18370 + 18567 18381 18568 + 18386 18568 18381 + 18569 18568 18386 + 18386 18391 18569 + 18569 18391 18570 + 18572 18570 18391 + 18573 18570 18572 + 18570 18573 18571 + 18571 18573 18574 + 18574 18575 18571 + 18566 18571 18575 + 18575 18576 18566 + 18557 18566 18576 + 18391 18390 18572 + 18396 18572 18390 + 18577 18572 18396 + 18572 18577 18573 + 18573 18577 18578 + 18578 18574 18573 + 18579 18574 18578 + 18574 18579 18580 + 18580 18575 18574 + 18575 18580 18581 + 18581 18576 18575 + 18396 18400 18577 + 18577 18400 18582 + 18582 18578 18577 + 18583 18578 18582 + 18578 18583 18579 + 18579 18583 18584 + 18584 18585 18579 + 18580 18579 18585 + 18585 18586 18580 + 18581 18580 18586 + 18404 18582 18400 + 18587 18582 18404 + 18582 18587 18583 + 18583 18587 18588 + 18588 18584 18583 + 18589 18584 18588 + 18584 18589 18590 + 18590 18585 18584 + 18585 18590 18591 + 18591 18586 18585 + 18404 18408 18587 + 18587 18408 18592 + 18592 18588 18587 + 18593 18588 18592 + 18588 18593 18589 + 18589 18593 18594 + 18594 18595 18589 + 18590 18589 18595 + 18595 18596 18590 + 18591 18590 18596 + 18412 18592 18408 + 18597 18592 18412 + 18592 18597 18593 + 18593 18597 18598 + 18598 18594 18593 + 18599 18594 18598 + 18594 18599 18600 + 18600 18595 18594 + 18595 18600 18601 + 18601 18596 18595 + 18412 18416 18597 + 18597 18416 18602 + 18602 18598 18597 + 18603 18598 18602 + 18598 18603 18599 + 18599 18603 18445 + 18445 18444 18599 + 18600 18599 18444 + 18444 18454 18600 + 18601 18600 18454 + 18420 18602 18416 + 18604 18602 18420 + 18602 18604 18603 + 18603 18604 18446 + 18446 18445 18603 + 18420 18424 18604 + 18604 18424 18441 + 18441 18446 18604 + 18454 18453 18601 + 18605 18601 18453 + 18596 18601 18605 + 18605 18606 18596 + 18596 18606 18591 + 18607 18591 18606 + 18586 18591 18607 + 18453 18608 18605 + 18609 18605 18608 + 18606 18605 18609 + 18609 18610 18606 + 18606 18610 18607 + 18611 18607 18610 + 18612 18607 18611 + 18607 18612 18586 + 18586 18612 18581 + 18458 18608 18453 + 18613 18608 18458 + 18608 18613 18609 + 18614 18609 18613 + 18610 18609 18614 + 18614 18615 18610 + 18610 18615 18611 + 18616 18611 18615 + 18617 18611 18616 + 18611 18617 18612 + 18458 18463 18613 + 18613 18463 18462 + 18462 18618 18613 + 18613 18618 18614 + 18619 18614 18618 + 18615 18614 18619 + 18619 18620 18615 + 18615 18620 18616 + 18545 18616 18620 + 18544 18616 18545 + 18616 18544 18617 + 18618 18462 18621 + 18618 18621 18619 + 18622 18619 18621 + 18620 18619 18622 + 18622 18623 18620 + 18620 18623 18545 + 18540 18545 18623 + 18623 18624 18540 + 18535 18540 18624 + 18621 18462 18461 + 18461 18625 18621 + 18621 18625 18622 + 18626 18622 18625 + 18623 18622 18626 + 18626 18624 18623 + 18624 18626 18627 + 18627 18628 18624 + 18624 18628 18535 + 18529 18535 18628 + 18628 18530 18529 + 18471 18625 18461 + 18625 18471 18626 + 18627 18626 18471 + 18471 18629 18627 + 18630 18627 18629 + 18628 18627 18630 + 18630 18530 18628 + 18530 18630 18631 + 18631 18521 18530 + 18521 18631 18487 + 18470 18629 18471 + 18632 18629 18470 + 18629 18632 18630 + 18631 18630 18632 + 18632 18633 18631 + 18487 18631 18633 + 18633 18482 18487 + 18482 18633 18474 + 18474 18633 18632 + 18632 18475 18474 + 18470 18475 18632 + 18617 18544 18549 + 18549 18634 18617 + 18612 18617 18634 + 18634 18581 18612 + 18576 18581 18634 + 18634 18553 18576 + 18576 18553 18557 + 18553 18634 18549 + 18635 13255 13261 + 13255 18635 18636 + 18636 13256 13255 + 18637 13256 18636 + 13256 18637 13257 + 13261 18638 18635 + 18635 18638 18639 + 18639 18640 18635 + 18636 18635 18640 + 18638 13261 18641 + 18641 18642 18638 + 18638 18642 18643 + 18643 18639 18638 + 18644 18639 18643 + 18639 18644 18645 + 18645 18640 18639 + 13261 18646 18641 + 18647 18641 18646 + 18642 18641 18647 + 18647 18648 18642 + 18642 18648 18649 + 18649 18643 18642 + 18650 18643 18649 + 18643 18650 18644 + 13260 18646 13261 + 18646 13260 18651 + 18651 18652 18646 + 18646 18652 18647 + 18651 13260 13259 + 13259 18653 18651 + 18651 18653 18654 + 18654 18655 18651 + 18652 18651 18655 + 18655 18656 18652 + 18647 18652 18656 + 18657 18653 13259 + 18653 18657 18658 + 18658 18654 18653 + 18654 18658 18659 + 18659 18660 18654 + 18654 18660 18661 + 18661 18655 18654 + 18656 18655 18661 + 13259 13258 18657 + 18657 13258 18662 + 18662 13264 18657 + 13264 18658 18657 + 18659 18658 13264 + 13264 13263 18659 + 13263 18663 18659 + 18660 18659 18663 + 18663 18664 18660 + 18661 18660 18664 + 18664 18665 18661 + 18666 18661 18665 + 18661 18666 18656 + 18667 18663 13263 + 18664 18663 18667 + 18667 18668 18664 + 18664 18668 18669 + 18669 18665 18664 + 18670 18665 18669 + 18665 18670 18666 + 18671 18666 18670 + 18656 18666 18671 + 13263 13262 18667 + 18672 18667 13262 + 18668 18667 18672 + 18672 18673 18668 + 18668 18673 18674 + 18674 18669 18668 + 18675 18669 18674 + 18669 18675 18670 + 18676 18672 13262 + 18673 18672 18676 + 18676 18677 18673 + 18673 18677 18678 + 18678 18674 18673 + 18679 18674 18678 + 18674 18679 18675 + 18680 18675 18679 + 18670 18675 18680 + 13262 13242 18676 + 18681 18676 13242 + 18677 18676 18681 + 18681 18682 18677 + 18678 18677 18682 + 18682 18683 18678 + 18684 18678 18683 + 18678 18684 18679 + 13242 18685 18681 + 18686 18681 18685 + 18682 18681 18686 + 18686 18687 18682 + 18682 18687 18688 + 18688 18683 18682 + 18689 18683 18688 + 18683 18689 18684 + 13241 18685 13242 + 18685 13241 18690 + 18690 18691 18685 + 18685 18691 18686 + 18692 18686 18691 + 18687 18686 18692 + 18692 18693 18687 + 18687 18693 18694 + 18694 18688 18687 + 18690 13241 13240 + 13240 18695 18690 + 18696 18690 18695 + 18691 18690 18696 + 18696 18697 18691 + 18691 18697 18692 + 18698 18692 18697 + 18693 18692 18698 + 13252 18695 13240 + 18695 13252 18699 + 18699 18700 18695 + 18695 18700 18696 + 18701 18696 18700 + 18697 18696 18701 + 18701 18702 18697 + 18697 18702 18698 + 18699 13252 18703 + 18703 18704 18699 + 18705 18699 18704 + 18700 18699 18705 + 18705 18706 18700 + 18700 18706 18701 + 13251 18703 13252 + 18707 18703 13251 + 18703 18707 18708 + 18708 18704 18703 + 18704 18708 18709 + 18709 18710 18704 + 18704 18710 18705 + 18711 18705 18710 + 18706 18705 18711 + 13251 18712 18707 + 18707 18712 18713 + 18713 18714 18707 + 18708 18707 18714 + 18714 18715 18708 + 18709 18708 18715 + 18712 13251 13250 + 13250 13257 18712 + 18713 18712 13257 + 13257 18637 18713 + 18716 18713 18637 + 18713 18716 18717 + 18717 18714 18713 + 18714 18717 18718 + 18718 18715 18714 + 18715 18718 18719 + 18719 18720 18715 + 18715 18720 18709 + 18637 18721 18716 + 18722 18716 18721 + 18717 18716 18722 + 18722 18723 18717 + 18718 18717 18723 + 18723 18724 18718 + 18719 18718 18724 + 18636 18721 18637 + 18721 18636 18725 + 18725 18726 18721 + 18721 18726 18722 + 18727 18722 18726 + 18722 18727 18728 + 18728 18723 18722 + 18723 18728 18729 + 18729 18724 18723 + 18730 18725 18636 + 18731 18725 18730 + 18731 18726 18725 + 18726 18731 18727 + 18727 18731 18732 + 18732 18733 18727 + 18728 18727 18733 + 18733 18734 18728 + 18729 18728 18734 + 18640 18730 18636 + 18735 18730 18640 + 18732 18730 18735 + 18730 18732 18731 + 18640 18645 18735 + 18735 18645 18736 + 18736 18737 18735 + 18738 18735 18737 + 18735 18738 18732 + 18732 18738 18739 + 18739 18733 18732 + 18733 18739 18740 + 18740 18734 18733 + 18741 18736 18645 + 18742 18736 18741 + 18736 18742 18743 + 18743 18737 18736 + 18737 18743 18744 + 18744 18745 18737 + 18737 18745 18738 + 18739 18738 18745 + 18645 18644 18741 + 18741 18644 18650 + 18650 18746 18741 + 18746 18747 18741 + 18748 18741 18747 + 18741 18748 18742 + 18742 18748 18749 + 18749 18750 18742 + 18743 18742 18750 + 18751 18746 18650 + 18746 18751 18752 + 18746 18752 18747 + 18752 18753 18747 + 18753 18754 18747 + 18747 18754 18748 + 18748 18754 18749 + 18755 18749 18754 + 18750 18749 18755 + 18650 18649 18751 + 18756 18751 18649 + 18752 18751 18756 + 18756 18757 18752 + 18753 18752 18757 + 18755 18753 18757 + 18754 18753 18755 + 18758 18756 18649 + 18759 18756 18758 + 18756 18759 18757 + 18757 18759 18760 + 18760 18761 18757 + 18757 18761 18755 + 18762 18755 18761 + 18755 18762 18750 + 18649 18648 18758 + 18763 18758 18648 + 18758 18763 18764 + 18764 18765 18758 + 18758 18765 18759 + 18759 18765 18766 + 18766 18760 18759 + 18767 18760 18766 + 18767 18761 18760 + 18761 18767 18762 + 18648 18647 18763 + 18768 18763 18647 + 18764 18763 18768 + 18768 18769 18764 + 18764 18769 18770 + 18770 18771 18764 + 18765 18764 18771 + 18771 18766 18765 + 18772 18768 18647 + 18773 18768 18772 + 18768 18773 18769 + 18769 18773 18774 + 18774 18770 18769 + 18656 18772 18647 + 18671 18772 18656 + 18772 18671 18775 + 18772 18775 18773 + 18773 18775 18776 + 18776 18774 18773 + 18777 18774 18776 + 18770 18774 18777 + 18777 18778 18770 + 18770 18778 18779 + 18779 18771 18770 + 18766 18771 18779 + 18775 18671 18780 + 18780 18776 18775 + 18776 18780 18680 + 18776 18680 18777 + 18777 18680 18679 + 18781 18777 18679 + 18778 18777 18781 + 18781 18782 18778 + 18779 18778 18782 + 18670 18780 18671 + 18680 18780 18670 + 18782 18783 18779 + 18784 18783 18782 + 18783 18784 18785 + 18785 18786 18783 + 18783 18786 18787 + 18787 18779 18783 + 18779 18787 18766 + 18766 18787 18767 + 18782 18788 18784 + 18784 18788 18789 + 18790 18784 18789 + 18785 18784 18790 + 18782 18781 18788 + 18788 18781 18791 + 18791 18792 18788 + 18788 18792 18789 + 18679 18791 18781 + 18793 18791 18679 + 18791 18793 18792 + 18792 18793 18794 + 18794 18789 18792 + 18679 18684 18793 + 18793 18684 18689 + 18689 18794 18793 + 18795 18794 18689 + 18789 18794 18795 + 18795 18796 18789 + 18789 18796 18797 + 18797 18798 18789 + 18789 18798 18790 + 18689 18799 18795 + 18795 18799 18800 + 18800 18801 18795 + 18796 18795 18801 + 18801 18802 18796 + 18796 18802 18803 + 18803 18797 18796 + 18688 18799 18689 + 18799 18688 18694 + 18694 18800 18799 + 18800 18694 18804 + 18804 18805 18800 + 18800 18805 18806 + 18806 18801 18800 + 18802 18801 18806 + 18806 18807 18802 + 18802 18807 18808 + 18808 18803 18802 + 18804 18694 18693 + 18693 18809 18804 + 18810 18804 18809 + 18805 18804 18810 + 18810 18811 18805 + 18805 18811 18812 + 18812 18806 18805 + 18807 18806 18812 + 18698 18809 18693 + 18809 18698 18813 + 18813 18814 18809 + 18809 18814 18810 + 18815 18810 18814 + 18811 18810 18815 + 18815 18816 18811 + 18811 18816 18817 + 18817 18812 18811 + 18813 18698 18702 + 18702 18818 18813 + 18819 18813 18818 + 18814 18813 18819 + 18819 18820 18814 + 18814 18820 18815 + 18821 18815 18820 + 18816 18815 18821 + 18822 18818 18702 + 18818 18822 18823 + 18823 18824 18818 + 18818 18824 18819 + 18825 18819 18824 + 18820 18819 18825 + 18825 18826 18820 + 18820 18826 18821 + 18702 18701 18822 + 18827 18822 18701 + 18823 18822 18827 + 18827 18828 18823 + 18829 18823 18828 + 18824 18823 18829 + 18829 18830 18824 + 18824 18830 18825 + 18831 18825 18830 + 18826 18825 18831 + 18701 18706 18827 + 18711 18827 18706 + 18827 18711 18832 + 18832 18828 18827 + 18828 18832 18833 + 18833 18834 18828 + 18828 18834 18829 + 18835 18829 18834 + 18830 18829 18835 + 18835 18836 18830 + 18830 18836 18831 + 18832 18711 18837 + 18837 18838 18832 + 18833 18832 18838 + 18838 18839 18833 + 18840 18833 18839 + 18834 18833 18840 + 18840 18841 18834 + 18834 18841 18835 + 18710 18837 18711 + 18842 18837 18710 + 18837 18842 18843 + 18843 18838 18837 + 18838 18843 18844 + 18844 18839 18838 + 18839 18844 18845 + 18845 18846 18839 + 18839 18846 18840 + 18710 18709 18842 + 18842 18709 18720 + 18720 18847 18842 + 18843 18842 18847 + 18847 18848 18843 + 18844 18843 18848 + 18848 18849 18844 + 18845 18844 18849 + 18850 18847 18720 + 18847 18850 18851 + 18851 18848 18847 + 18848 18851 18852 + 18852 18849 18848 + 18849 18852 18853 + 18853 18854 18849 + 18849 18854 18845 + 18720 18719 18850 + 18850 18719 18855 + 18855 18856 18850 + 18851 18850 18856 + 18856 18857 18851 + 18851 18857 18858 + 18858 18852 18851 + 18853 18852 18858 + 18724 18855 18719 + 18859 18855 18724 + 18855 18859 18860 + 18860 18856 18855 + 18856 18860 18861 + 18861 18857 18856 + 18857 18861 18862 + 18862 18858 18857 + 18724 18729 18859 + 18863 18859 18729 + 18860 18859 18863 + 18863 18864 18860 + 18861 18860 18864 + 18864 18865 18861 + 18862 18861 18865 + 18865 18866 18862 + 18867 18862 18866 + 18858 18862 18867 + 18868 18863 18729 + 18869 18863 18868 + 18863 18869 18870 + 18870 18864 18863 + 18864 18870 18871 + 18871 18865 18864 + 18865 18871 18872 + 18872 18866 18865 + 18734 18868 18729 + 18873 18868 18734 + 18868 18873 18869 + 18869 18873 18874 + 18874 18875 18869 + 18870 18869 18875 + 18875 18876 18870 + 18871 18870 18876 + 18876 18877 18871 + 18872 18871 18877 + 18734 18740 18873 + 18873 18740 18878 + 18878 18874 18873 + 18879 18874 18878 + 18874 18879 18880 + 18880 18875 18874 + 18875 18880 18881 + 18881 18876 18875 + 18876 18881 18882 + 18882 18877 18876 + 18883 18878 18740 + 18884 18878 18883 + 18878 18884 18879 + 18879 18884 18885 + 18885 18886 18879 + 18880 18879 18886 + 18886 18887 18880 + 18881 18880 18887 + 18740 18739 18883 + 18745 18883 18739 + 18888 18883 18745 + 18883 18888 18884 + 18884 18888 18889 + 18889 18885 18884 + 18890 18885 18889 + 18885 18890 18891 + 18891 18886 18885 + 18886 18891 18892 + 18892 18887 18886 + 18745 18744 18888 + 18889 18888 18744 + 18744 18893 18889 + 18893 18894 18889 + 18895 18889 18894 + 18889 18895 18890 + 18890 18895 18896 + 18896 18897 18890 + 18891 18890 18897 + 18898 18893 18744 + 18893 18898 18899 + 18899 18900 18893 + 18893 18900 18901 + 18901 18894 18893 + 18901 18902 18894 + 18894 18902 18895 + 18896 18895 18902 + 18744 18743 18898 + 18750 18898 18743 + 18899 18898 18750 + 18750 18762 18899 + 18786 18899 18762 + 18900 18899 18786 + 18786 18785 18900 + 18901 18900 18785 + 18785 18903 18901 + 18902 18901 18903 + 18903 18904 18902 + 18902 18904 18896 + 18762 18767 18786 + 18767 18787 18786 + 18790 18903 18785 + 18903 18790 18904 + 18904 18790 18798 + 18798 18896 18904 + 18896 18798 18797 + 18797 18897 18896 + 18897 18797 18803 + 18803 18905 18897 + 18897 18905 18891 + 18892 18891 18905 + 18905 18906 18892 + 18907 18892 18906 + 18887 18892 18907 + 18905 18803 18808 + 18808 18906 18905 + 18906 18808 18908 + 18908 18909 18906 + 18906 18909 18907 + 18910 18907 18909 + 18911 18907 18910 + 18907 18911 18887 + 18887 18911 18881 + 18882 18881 18911 + 18908 18808 18807 + 18807 18912 18908 + 18913 18908 18912 + 18909 18908 18913 + 18913 18914 18909 + 18909 18914 18910 + 18915 18910 18914 + 18916 18910 18915 + 18910 18916 18911 + 18911 18916 18882 + 18812 18912 18807 + 18912 18812 18817 + 18817 18917 18912 + 18912 18917 18913 + 18918 18913 18917 + 18914 18913 18918 + 18918 18919 18914 + 18914 18919 18915 + 18920 18915 18919 + 18921 18915 18920 + 18915 18921 18916 + 18917 18817 18922 + 18922 18923 18917 + 18917 18923 18918 + 18924 18918 18923 + 18919 18918 18924 + 18924 18925 18919 + 18919 18925 18920 + 18922 18817 18816 + 18816 18926 18922 + 18927 18922 18926 + 18923 18922 18927 + 18927 18928 18923 + 18923 18928 18924 + 18924 18928 18929 + 18929 18930 18924 + 18930 18925 18924 + 18930 18920 18925 + 18821 18926 18816 + 18926 18821 18931 + 18931 18932 18926 + 18926 18932 18927 + 18933 18927 18932 + 18928 18927 18933 + 18933 18929 18928 + 18930 18929 18933 + 18934 18930 18933 + 18930 18934 18935 + 18935 18920 18930 + 18920 18935 18921 + 18931 18821 18826 + 18826 18936 18931 + 18937 18931 18936 + 18932 18931 18937 + 18937 18933 18932 + 18933 18937 18938 + 18938 18939 18933 + 18939 18940 18933 + 18940 18934 18933 + 18831 18936 18826 + 18936 18831 18941 + 18941 18937 18936 + 18937 18941 18938 + 18941 18831 18836 + 18942 18941 18836 + 18941 18942 18938 + 18836 18835 18942 + 18942 18835 18841 + 18942 18841 18840 + 18943 18942 18840 + 18942 18943 18938 + 18943 18944 18938 + 18938 18944 18854 + 18854 18853 18938 + 18938 18853 18945 + 18939 18938 18945 + 18943 18840 18846 + 18943 18846 18845 + 18944 18943 18845 + 18944 18845 18854 + 18858 18945 18853 + 18867 18945 18858 + 18945 18867 18939 + 18939 18867 18946 + 18939 18946 18947 + 18940 18939 18947 + 18940 18947 18948 + 18940 18948 18949 + 18934 18940 18949 + 18934 18949 18935 + 18866 18946 18867 + 18946 18866 18872 + 18947 18946 18872 + 18947 18872 18950 + 18950 18948 18947 + 18949 18948 18950 + 18950 18951 18949 + 18949 18951 18921 + 18921 18935 18949 + 18877 18950 18872 + 18951 18950 18877 + 18877 18882 18951 + 18951 18882 18916 + 18916 18921 18951 + 18952 11771 11639 + 11771 18952 11772 + 11772 18952 18953 + 18953 18954 11772 + 11773 11772 18954 + 11639 18955 18952 + 18952 18955 18956 + 18956 18953 18952 + 18957 18953 18956 + 18953 18957 18958 + 18958 18954 18953 + 18959 18954 18958 + 18954 18959 11773 + 11764 11773 18959 + 18955 11639 11638 + 11638 11648 18955 + 18956 18955 11648 + 11648 11653 18956 + 18960 18956 11653 + 18956 18960 18957 + 18957 18960 18961 + 18961 18962 18957 + 18958 18957 18962 + 18962 18963 18958 + 18964 18958 18963 + 18958 18964 18959 + 11653 18965 18960 + 18960 18965 18966 + 18966 18961 18960 + 18967 18961 18966 + 18961 18967 18962 + 18962 18967 18968 + 18968 18963 18962 + 18969 18963 18968 + 18963 18969 18964 + 11652 18965 11653 + 18965 11652 18970 + 18970 18971 18965 + 18965 18971 18966 + 18972 18966 18971 + 18966 18972 18973 + 18973 18974 18966 + 18966 18974 18967 + 18968 18967 18974 + 11658 18970 11652 + 18975 18970 11658 + 18971 18970 18975 + 18975 18976 18971 + 18971 18976 18972 + 18977 18972 18976 + 18973 18972 18977 + 18977 18978 18973 + 18979 18973 18978 + 18974 18973 18979 + 11658 18980 18975 + 18975 18980 18981 + 18982 18975 18981 + 18976 18975 18982 + 18982 18983 18976 + 18976 18983 18984 + 18984 18977 18976 + 18980 11658 11663 + 11663 18985 18980 + 18980 18985 18986 + 18986 18981 18980 + 18987 18981 18986 + 18981 18987 18988 + 18988 18989 18981 + 18981 18989 18982 + 18985 11663 18990 + 18990 18991 18985 + 18986 18985 18991 + 18991 18992 18986 + 18987 18986 18992 + 18992 18993 18987 + 18987 18993 18994 + 18994 18988 18987 + 11667 18990 11663 + 11672 18990 11667 + 18990 11672 18995 + 18995 18991 18990 + 18991 18995 18996 + 18996 18992 18991 + 18992 18996 18997 + 18997 18993 18992 + 18993 18997 18998 + 18998 18994 18993 + 18995 11672 11677 + 11677 18999 18995 + 18996 18995 18999 + 18999 19000 18996 + 18997 18996 19000 + 19000 19001 18997 + 18998 18997 19001 + 19001 19002 18998 + 19003 18998 19002 + 18994 18998 19003 + 19004 18999 11677 + 18999 19004 19005 + 19005 19000 18999 + 19000 19005 19006 + 19006 19001 19000 + 19001 19006 19007 + 19007 19002 19001 + 11677 11676 19004 + 19004 11676 11682 + 11682 19008 19004 + 19005 19004 19008 + 19008 19009 19005 + 19006 19005 19009 + 19009 19010 19006 + 19007 19006 19010 + 19010 19011 19007 + 19012 19007 19011 + 19002 19007 19012 + 19013 19008 11682 + 19008 19013 19014 + 19014 19009 19008 + 19009 19014 19015 + 19015 19010 19009 + 19010 19015 19016 + 19016 19011 19010 + 11682 11681 19013 + 19013 11681 11687 + 11687 19017 19013 + 19014 19013 19017 + 19017 19018 19014 + 19015 19014 19018 + 19018 19019 19015 + 19016 19015 19019 + 19019 19020 19016 + 19021 19016 19020 + 19011 19016 19021 + 19022 19017 11687 + 19017 19022 19023 + 19023 19018 19017 + 19018 19023 19024 + 19024 19019 19018 + 19019 19024 19025 + 19025 19020 19019 + 11687 11686 19022 + 19022 11686 19026 + 19026 19027 19022 + 19023 19022 19027 + 19027 19028 19023 + 19024 19023 19028 + 19028 19029 19024 + 19025 19024 19029 + 11691 19026 11686 + 19030 19026 11691 + 19026 19030 19031 + 19031 19027 19026 + 19027 19031 19032 + 19032 19028 19027 + 19028 19032 19033 + 19033 19029 19028 + 11691 11696 19030 + 19030 11696 19034 + 19034 19035 19030 + 19031 19030 19035 + 19035 19036 19031 + 19032 19031 19036 + 19036 19037 19032 + 19033 19032 19037 + 19038 19034 11696 + 19039 19034 19038 + 19034 19039 19040 + 19040 19035 19034 + 19035 19040 19041 + 19041 19036 19035 + 19036 19041 19042 + 19042 19037 19036 + 11696 11695 19038 + 11701 19038 11695 + 19043 19038 11701 + 19038 19043 19039 + 19039 19043 19044 + 19044 19045 19039 + 19040 19039 19045 + 19045 19046 19040 + 19041 19040 19046 + 19046 19047 19041 + 19042 19041 19047 + 11701 19048 19043 + 19043 19048 19049 + 19049 19044 19043 + 19050 19044 19049 + 19044 19050 19051 + 19051 19045 19044 + 19045 19051 19052 + 19052 19046 19045 + 19048 11701 11700 + 11700 19053 19048 + 19048 19053 19054 + 19054 19049 19048 + 19055 19049 19054 + 19049 19055 19050 + 19050 19055 19056 + 19056 19057 19050 + 19051 19050 19057 + 19053 11700 11699 + 11699 19058 19053 + 19053 19058 19059 + 19059 19054 19053 + 19060 19054 19059 + 19054 19060 19055 + 19055 19060 19061 + 19061 19056 19055 + 19058 11699 11706 + 11706 19062 19058 + 19058 19062 19063 + 19063 19059 19058 + 19064 19059 19063 + 19059 19064 19060 + 19061 19060 19064 + 19064 19065 19061 + 19066 19061 19065 + 19056 19061 19066 + 19062 11706 19067 + 19067 19068 19062 + 19063 19062 19068 + 19069 19067 11706 + 19070 19067 19069 + 19068 19067 19070 + 19068 19070 19071 + 19071 19072 19068 + 19068 19072 19063 + 19073 19069 11706 + 11719 19069 19073 + 11723 19069 11719 + 19069 11723 19070 + 11706 11705 19073 + 11704 19073 11705 + 11711 19073 11704 + 19073 11711 11719 + 19070 11723 11722 + 11722 19074 19070 + 19074 19075 19070 + 19075 19076 19070 + 19076 19071 19070 + 19077 19071 19076 + 19071 19077 19072 + 11728 19074 11722 + 11728 19078 19074 + 19074 19078 19079 + 19079 19075 19074 + 19080 19075 19079 + 19075 19080 19081 + 19081 19076 19075 + 19082 19076 19081 + 19076 19082 19077 + 19078 11728 11727 + 11727 19083 19078 + 19079 19078 19083 + 19083 19084 19079 + 19080 19079 19084 + 19084 19085 19080 + 19080 19085 19086 + 19086 19081 19080 + 19082 19081 19086 + 11727 11733 19083 + 19083 11733 19087 + 19087 19084 19083 + 19084 19087 19088 + 19088 19085 19084 + 19085 19088 19089 + 19089 19086 19085 + 19086 19089 19090 + 19090 19091 19086 + 19086 19091 19082 + 19087 11733 11732 + 11732 19092 19087 + 19092 19093 19087 + 19088 19087 19093 + 19093 19094 19088 + 19088 19094 19095 + 19095 19089 19088 + 19090 19089 19095 + 11738 19092 11732 + 11738 19096 19092 + 19092 19096 19097 + 19097 19093 19092 + 19094 19093 19097 + 19097 19098 19094 + 19094 19098 19099 + 19099 19095 19094 + 19100 19095 19099 + 19095 19100 19090 + 19096 11738 19101 + 19101 19102 19096 + 19097 19096 19102 + 19102 19103 19097 + 19103 19104 19097 + 19098 19097 19104 + 11737 19101 11738 + 19105 19101 11737 + 19101 19105 19102 + 19102 19105 19106 + 19106 19103 19102 + 19103 19106 19107 + 19103 19107 19108 + 19108 19104 19103 + 19109 19104 19108 + 19104 19109 19098 + 11737 19110 19105 + 19105 19110 19111 + 19106 19105 19111 + 19111 19112 19106 + 19107 19106 19112 + 19112 19113 19107 + 19108 19107 19113 + 11737 19114 19110 + 19110 19114 19115 + 19115 19111 19110 + 19111 19115 19116 + 19111 19116 19117 + 19117 19112 19111 + 19112 19117 19113 + 19114 11737 11742 + 11742 19118 19114 + 19114 19118 19119 + 19119 19115 19114 + 19116 19115 19119 + 19119 19120 19116 + 19117 19116 19120 + 19121 19117 19120 + 19113 19117 19121 + 19121 19122 19113 + 19113 19122 19108 + 11741 19118 11742 + 19118 11741 19123 + 19123 19119 19118 + 19120 19119 19123 + 19123 11741 11740 + 11740 19124 19123 + 19125 19123 19124 + 19123 19125 19120 + 19126 19124 11740 + 19127 19124 19126 + 19124 19127 19125 + 19125 19127 19128 + 19128 19129 19125 + 19120 19125 19129 + 11740 11745 19126 + 19130 19126 11745 + 19131 19126 19130 + 19126 19131 19127 + 19127 19131 19132 + 19132 19128 19127 + 19133 19128 19132 + 19128 19133 19134 + 19134 19129 19128 + 11745 11749 19130 + 19135 19130 11749 + 19136 19130 19135 + 19130 19136 19131 + 19131 19136 19066 + 19066 19132 19131 + 19065 19132 19066 + 19132 19065 19133 + 11749 11754 19135 + 19137 19135 11754 + 19138 19135 19137 + 19135 19138 19136 + 19136 19138 19139 + 19139 19066 19136 + 19066 19139 19056 + 19056 19139 19140 + 19140 19057 19056 + 11754 19141 19137 + 19142 19137 19141 + 19143 19137 19142 + 19137 19143 19138 + 19139 19138 19143 + 19143 19140 19139 + 19144 19140 19143 + 19140 19144 19145 + 19145 19057 19140 + 19057 19145 19051 + 11753 19141 11754 + 19141 11753 19146 + 19146 19147 19141 + 19141 19147 19142 + 19148 19142 19147 + 19149 19142 19148 + 19142 19149 19143 + 19143 19149 19144 + 19150 19144 19149 + 19145 19144 19150 + 19146 11753 11759 + 11759 19151 19146 + 19152 19146 19151 + 19147 19146 19152 + 19152 19153 19147 + 19147 19153 19148 + 19154 19148 19153 + 19155 19148 19154 + 19148 19155 19149 + 19149 19155 19150 + 19156 19151 11759 + 19151 19156 19157 + 19157 19158 19151 + 19151 19158 19152 + 19159 19152 19158 + 19153 19152 19159 + 19159 19160 19153 + 19153 19160 19154 + 11759 11758 19156 + 19156 11758 19161 + 19161 19162 19156 + 19156 19162 19163 + 19163 19157 19156 + 19164 19157 19163 + 19158 19157 19164 + 19164 19165 19158 + 19158 19165 19159 + 11757 19161 11758 + 19166 19161 11757 + 19162 19161 19166 + 19166 19167 19162 + 19162 19167 19168 + 19168 19169 19162 + 19162 19169 19163 + 11757 11764 19166 + 18959 19166 11764 + 19167 19166 18959 + 18959 18964 19167 + 19168 19167 18964 + 18964 18969 19168 + 19170 19168 18969 + 19170 19169 19168 + 19169 19170 19171 + 19171 19163 19169 + 19172 19163 19171 + 19163 19172 19164 + 19173 19164 19172 + 19165 19164 19173 + 18969 19174 19170 + 19171 19170 19174 + 19174 19175 19171 + 19176 19171 19175 + 19171 19176 19172 + 19172 19176 19177 + 19177 19178 19172 + 19172 19178 19173 + 18968 19174 18969 + 19174 18968 19179 + 19179 19175 19174 + 19175 19179 18979 + 18979 19180 19175 + 19175 19180 19176 + 19176 19180 19181 + 19181 19177 19176 + 18974 19179 18968 + 18979 19179 18974 + 19133 19065 19064 + 19064 19182 19133 + 19133 19182 19183 + 19183 19184 19133 + 19184 19185 19133 + 19185 19134 19133 + 19063 19182 19064 + 19182 19063 19186 + 19186 19183 19182 + 19183 19186 19187 + 19187 19188 19183 + 19183 19188 19189 + 19189 19184 19183 + 19190 19186 19063 + 19187 19186 19190 + 19190 19191 19187 + 19187 19191 19192 + 19192 19193 19187 + 19188 19187 19193 + 19072 19190 19063 + 19194 19190 19072 + 19191 19190 19194 + 19191 19194 19195 + 19195 19192 19191 + 19192 19195 19196 + 19192 19196 19197 + 19197 19193 19192 + 19198 19193 19197 + 19193 19198 19188 + 19072 19077 19194 + 19194 19077 19082 + 19082 19091 19194 + 19091 19195 19194 + 19196 19195 19091 + 19091 19090 19196 + 19196 19090 19100 + 19100 19197 19196 + 19199 19197 19100 + 19197 19199 19198 + 19198 19199 19200 + 19200 19201 19198 + 19188 19198 19201 + 19201 19189 19188 + 19202 19189 19201 + 19202 19184 19189 + 19100 19203 19199 + 19200 19199 19203 + 19203 19204 19200 + 19204 19205 19200 + 19206 19200 19205 + 19206 19201 19200 + 19201 19206 19202 + 19099 19203 19100 + 19203 19099 19207 + 19207 19204 19203 + 19204 19207 19208 + 19208 19209 19204 + 19204 19209 19210 + 19210 19205 19204 + 19211 19205 19210 + 19205 19211 19206 + 19207 19099 19098 + 19098 19109 19207 + 19208 19207 19109 + 19109 19212 19208 + 19208 19212 19213 + 19213 19214 19208 + 19209 19208 19214 + 19214 19215 19209 + 19210 19209 19215 + 19215 19216 19210 + 19211 19210 19216 + 19108 19212 19109 + 19212 19108 19122 + 19122 19213 19212 + 19121 19213 19122 + 19213 19121 19217 + 19217 19214 19213 + 19214 19217 19215 + 19215 19217 19218 + 19218 19216 19215 + 19219 19216 19218 + 19216 19219 19211 + 19206 19211 19219 + 19202 19206 19219 + 19219 19220 19202 + 19184 19202 19220 + 19217 19121 19120 + 19218 19217 19120 + 19221 19218 19120 + 19219 19218 19221 + 19221 19220 19219 + 19220 19221 19185 + 19220 19185 19184 + 19120 19222 19221 + 19185 19221 19222 + 19222 19134 19185 + 19222 19129 19134 + 19129 19222 19120 + 19223 19177 19181 + 19177 19223 19224 + 19224 19178 19177 + 19178 19224 19225 + 19225 19173 19178 + 19181 19226 19223 + 19223 19226 19227 + 19227 19228 19223 + 19224 19223 19228 + 19229 19226 19181 + 19226 19229 19230 + 19230 19227 19226 + 19227 19230 19231 + 19231 19232 19227 + 19227 19232 19233 + 19233 19228 19227 + 19181 19234 19229 + 19229 19234 18978 + 18978 19235 19229 + 19229 19235 19236 + 19236 19230 19229 + 19231 19230 19236 + 19234 19181 19180 + 19180 18979 19234 + 18978 19234 18979 + 18977 19235 18978 + 19235 18977 18984 + 18984 19236 19235 + 18984 19237 19236 + 19236 19237 19231 + 19238 19231 19237 + 19232 19231 19238 + 19238 19239 19232 + 19232 19239 19240 + 19240 19233 19232 + 19241 19233 19240 + 19233 19241 19228 + 19228 19241 19224 + 19237 18984 19242 + 19242 19243 19237 + 19237 19243 19238 + 19244 19238 19243 + 19239 19238 19244 + 19244 19245 19239 + 19239 19245 19246 + 19246 19240 19239 + 18983 19242 18984 + 19247 19242 18983 + 19243 19242 19247 + 19247 19248 19243 + 19243 19248 19244 + 19249 19244 19248 + 19245 19244 19249 + 19249 19250 19245 + 19245 19250 19251 + 19251 19246 19245 + 18983 19252 19247 + 19247 19252 19253 + 19253 19254 19247 + 19254 19255 19247 + 19248 19247 19255 + 19255 19256 19248 + 19248 19256 19249 + 19257 19252 18983 + 19252 19257 19258 + 19258 19253 19252 + 19253 19258 19259 + 19259 19260 19253 + 19253 19260 19261 + 19261 19254 19253 + 18983 18982 19257 + 19257 18982 18989 + 18989 19262 19257 + 19258 19257 19262 + 19262 19263 19258 + 19259 19258 19263 + 19263 19264 19259 + 19259 19264 19265 + 19265 19266 19259 + 19260 19259 19266 + 19267 19262 18989 + 19262 19267 19268 + 19268 19263 19262 + 19264 19263 19268 + 19268 19269 19264 + 19264 19269 19270 + 19270 19271 19264 + 19264 19271 19265 + 18989 18988 19267 + 19267 18988 18994 + 18994 19272 19267 + 19267 19272 19273 + 19273 19268 19267 + 19269 19268 19273 + 19273 19274 19269 + 19270 19269 19274 + 19274 19275 19270 + 19276 19270 19275 + 19276 19271 19270 + 19003 19272 18994 + 19272 19003 19277 + 19277 19273 19272 + 19273 19277 19278 + 19278 19274 19273 + 19274 19278 19279 + 19279 19275 19274 + 19275 19279 19280 + 19280 19281 19275 + 19275 19281 19276 + 19277 19003 19282 + 19282 19283 19277 + 19278 19277 19283 + 19283 19284 19278 + 19279 19278 19284 + 19284 19285 19279 + 19280 19279 19285 + 19002 19282 19003 + 19012 19282 19002 + 19282 19012 19286 + 19286 19283 19282 + 19283 19286 19287 + 19287 19284 19283 + 19284 19287 19288 + 19288 19285 19284 + 19285 19288 19289 + 19289 19290 19285 + 19285 19290 19280 + 19286 19012 19291 + 19291 19292 19286 + 19287 19286 19292 + 19292 19293 19287 + 19288 19287 19293 + 19293 19294 19288 + 19289 19288 19294 + 19011 19291 19012 + 19021 19291 19011 + 19291 19021 19295 + 19295 19292 19291 + 19292 19295 19296 + 19296 19293 19292 + 19293 19296 19297 + 19297 19294 19293 + 19294 19297 19298 + 19298 19299 19294 + 19294 19299 19289 + 19295 19021 19300 + 19300 19301 19295 + 19296 19295 19301 + 19301 19302 19296 + 19297 19296 19302 + 19302 19303 19297 + 19298 19297 19303 + 19020 19300 19021 + 19304 19300 19020 + 19300 19304 19305 + 19305 19301 19300 + 19301 19305 19306 + 19306 19302 19301 + 19302 19306 19307 + 19307 19303 19302 + 19020 19025 19304 + 19304 19025 19308 + 19308 19309 19304 + 19305 19304 19309 + 19309 19310 19305 + 19306 19305 19310 + 19310 19311 19306 + 19307 19306 19311 + 19029 19308 19025 + 19312 19308 19029 + 19308 19312 19313 + 19313 19309 19308 + 19309 19313 19314 + 19314 19310 19309 + 19310 19314 19315 + 19315 19311 19310 + 19029 19033 19312 + 19312 19033 19316 + 19316 19317 19312 + 19313 19312 19317 + 19317 19318 19313 + 19314 19313 19318 + 19318 19319 19314 + 19315 19314 19319 + 19037 19316 19033 + 19320 19316 19037 + 19316 19320 19321 + 19321 19317 19316 + 19317 19321 19322 + 19322 19318 19317 + 19318 19322 19323 + 19323 19319 19318 + 19037 19042 19320 + 19320 19042 19324 + 19324 19325 19320 + 19321 19320 19325 + 19325 19326 19321 + 19322 19321 19326 + 19326 19327 19322 + 19323 19322 19327 + 19047 19324 19042 + 19328 19324 19047 + 19324 19328 19329 + 19329 19325 19324 + 19325 19329 19330 + 19330 19326 19325 + 19326 19330 19331 + 19331 19327 19326 + 19047 19332 19328 + 19333 19328 19332 + 19329 19328 19333 + 19333 19334 19329 + 19329 19334 19335 + 19335 19330 19329 + 19331 19330 19335 + 19332 19047 19046 + 19046 19052 19332 + 19332 19052 19336 + 19336 19337 19332 + 19332 19337 19333 + 19338 19333 19337 + 19334 19333 19338 + 19338 19339 19334 + 19334 19339 19340 + 19340 19335 19334 + 19336 19052 19051 + 19051 19145 19336 + 19150 19336 19145 + 19337 19336 19150 + 19150 19341 19337 + 19337 19341 19338 + 19338 19341 19342 + 19342 19343 19338 + 19339 19338 19343 + 19343 19344 19339 + 19340 19339 19344 + 19341 19150 19155 + 19155 19342 19341 + 19154 19342 19155 + 19342 19154 19345 + 19345 19343 19342 + 19343 19345 19346 + 19346 19344 19343 + 19344 19346 19347 + 19347 19348 19344 + 19344 19348 19340 + 19345 19154 19160 + 19160 19349 19345 + 19346 19345 19349 + 19349 19350 19346 + 19347 19346 19350 + 19350 19351 19347 + 19352 19347 19351 + 19348 19347 19352 + 19353 19349 19160 + 19349 19353 19354 + 19354 19350 19349 + 19350 19354 19355 + 19355 19351 19350 + 19351 19355 19356 + 19356 19357 19351 + 19351 19357 19352 + 19160 19159 19353 + 19353 19159 19165 + 19165 19358 19353 + 19354 19353 19358 + 19358 19359 19354 + 19355 19354 19359 + 19359 19360 19355 + 19356 19355 19360 + 19360 19361 19356 + 19362 19356 19361 + 19357 19356 19362 + 19173 19358 19165 + 19358 19173 19225 + 19225 19359 19358 + 19359 19225 19363 + 19363 19360 19359 + 19360 19363 19364 + 19364 19361 19360 + 19361 19364 19365 + 19365 19366 19361 + 19361 19366 19362 + 19363 19225 19224 + 19367 19363 19224 + 19364 19363 19367 + 19367 19368 19364 + 19364 19368 19369 + 19369 19365 19364 + 19370 19365 19369 + 19366 19365 19370 + 19224 19241 19367 + 19240 19367 19241 + 19368 19367 19240 + 19240 19246 19368 + 19368 19246 19251 + 19251 19369 19368 + 19371 19369 19251 + 19369 19371 19370 + 19370 19371 8716 + 8716 19372 19370 + 19373 19370 19372 + 19370 19373 19366 + 19366 19373 19374 + 19374 19362 19366 + 19251 19375 19371 + 19371 19375 8710 + 8710 8716 19371 + 19375 19251 19250 + 19250 8711 19375 + 8710 19375 8711 + 19376 8711 19250 + 8711 19376 8712 + 19377 8712 19376 + 8705 8712 19377 + 19377 8706 8705 + 19250 19249 19376 + 19376 19249 19256 + 19256 19378 19376 + 19376 19378 19377 + 19378 19379 19377 + 19380 19377 19379 + 8706 19377 19380 + 19255 19378 19256 + 19378 19255 19254 + 19254 19379 19378 + 19379 19254 19261 + 19379 19261 19380 + 19380 19261 19260 + 19260 19381 19380 + 19381 19382 19380 + 19383 19380 19382 + 19380 19383 8706 + 8706 19383 19384 + 19384 19385 8706 + 8706 19385 8707 + 19266 19381 19260 + 19381 19266 19386 + 19386 10972 19381 + 19381 10972 19387 + 19387 19382 19381 + 19382 19387 19388 + 19388 19389 19382 + 19382 19389 19383 + 19386 19266 19265 + 19265 19390 19386 + 10968 19386 19390 + 10972 19386 10968 + 19390 19265 19391 + 19391 19392 19390 + 19390 19392 19393 + 19393 10970 19390 + 19390 10970 10969 + 10969 10968 19390 + 19391 19265 19271 + 19271 19276 19391 + 19391 19276 19281 + 19281 19394 19391 + 19392 19391 19394 + 19394 19395 19392 + 19392 19395 10965 + 10965 19393 19392 + 10964 19393 10965 + 10964 10970 19393 + 19396 19394 19281 + 19394 19396 19397 + 19397 19395 19394 + 19395 19397 19398 + 19398 10965 19395 + 10965 19398 10960 + 10960 19398 19399 + 19399 10956 10960 + 19281 19280 19396 + 19396 19280 19290 + 19290 19400 19396 + 19397 19396 19400 + 19400 19401 19397 + 19398 19397 19401 + 19401 19399 19398 + 19402 19399 19401 + 19399 19402 19403 + 19403 10956 19399 + 10956 19403 10952 + 19404 19400 19290 + 19400 19404 19405 + 19405 19401 19400 + 19401 19405 19402 + 19402 19405 19406 + 19406 19407 19402 + 19403 19402 19407 + 19407 19408 19403 + 10952 19403 19408 + 19408 10947 10952 + 19290 19289 19404 + 19404 19289 19299 + 19299 19409 19404 + 19405 19404 19409 + 19409 19406 19405 + 19410 19406 19409 + 19406 19410 19411 + 19411 19407 19406 + 19407 19411 19412 + 19412 19408 19407 + 19408 19412 19413 + 19413 10947 19408 + 10947 19413 10948 + 19414 19409 19299 + 19409 19414 19410 + 19410 19414 19415 + 19415 19416 19410 + 19411 19410 19416 + 19416 19417 19411 + 19412 19411 19417 + 19417 19418 19412 + 19413 19412 19418 + 19299 19298 19414 + 19414 19298 19419 + 19419 19415 19414 + 19420 19415 19419 + 19415 19420 19421 + 19421 19416 19415 + 19416 19421 19422 + 19422 19417 19416 + 19417 19422 19423 + 19423 19418 19417 + 19303 19419 19298 + 19424 19419 19303 + 19419 19424 19420 + 19420 19424 19425 + 19425 19426 19420 + 19421 19420 19426 + 19426 19427 19421 + 19422 19421 19427 + 19427 19428 19422 + 19423 19422 19428 + 19303 19307 19424 + 19424 19307 19429 + 19429 19425 19424 + 19430 19425 19429 + 19425 19430 19431 + 19431 19426 19425 + 19426 19431 19432 + 19432 19427 19426 + 19427 19432 19433 + 19433 19428 19427 + 19311 19429 19307 + 19434 19429 19311 + 19429 19434 19430 + 19430 19434 19435 + 19435 19436 19430 + 19431 19430 19436 + 19436 19437 19431 + 19432 19431 19437 + 19437 19438 19432 + 19433 19432 19438 + 19311 19315 19434 + 19434 19315 19439 + 19439 19435 19434 + 19440 19435 19439 + 19435 19440 19441 + 19441 19436 19435 + 19436 19441 19442 + 19442 19437 19436 + 19437 19442 19443 + 19443 19438 19437 + 19319 19439 19315 + 19444 19439 19319 + 19439 19444 19440 + 19440 19444 19445 + 19445 19446 19440 + 19441 19440 19446 + 19446 19447 19441 + 19442 19441 19447 + 19447 19448 19442 + 19443 19442 19448 + 19319 19323 19444 + 19444 19323 19449 + 19449 19445 19444 + 19450 19445 19449 + 19445 19450 19451 + 19451 19446 19445 + 19446 19451 19452 + 19452 19447 19446 + 19447 19452 19453 + 19453 19448 19447 + 19327 19449 19323 + 19454 19449 19327 + 19449 19454 19450 + 19450 19454 19455 + 19455 19456 19450 + 19450 19456 19457 + 19457 19451 19450 + 19452 19451 19457 + 19327 19331 19454 + 19455 19454 19331 + 19331 19458 19455 + 19459 19455 19458 + 19456 19455 19459 + 19459 19460 19456 + 19456 19460 19461 + 19461 19457 19456 + 19462 19457 19461 + 19457 19462 19452 + 19335 19458 19331 + 19458 19335 19340 + 19340 19463 19458 + 19458 19463 19459 + 19459 19463 19464 + 19464 19465 19459 + 19460 19459 19465 + 19465 19466 19460 + 19461 19460 19466 + 19463 19340 19348 + 19348 19464 19463 + 19352 19464 19348 + 19464 19352 19467 + 19467 19465 19464 + 19465 19467 19468 + 19468 19466 19465 + 19466 19468 19469 + 19469 19470 19466 + 19466 19470 19461 + 19471 19461 19470 + 19461 19471 19462 + 19467 19352 19357 + 19357 19472 19467 + 19468 19467 19472 + 19472 19473 19468 + 19469 19468 19473 + 19473 19474 19469 + 19475 19469 19474 + 19470 19469 19475 + 19475 19476 19470 + 19470 19476 19471 + 19362 19472 19357 + 19472 19362 19374 + 19374 19473 19472 + 19473 19374 19477 + 19477 19474 19473 + 19474 19477 19478 + 19478 19479 19474 + 19474 19479 19475 + 19480 19475 19479 + 19476 19475 19480 + 19477 19374 19373 + 19373 19481 19477 + 19478 19477 19481 + 19481 19482 19478 + 19483 19478 19482 + 19479 19478 19483 + 19483 19484 19479 + 19479 19484 19480 + 19372 19481 19373 + 19481 19372 8715 + 8715 19482 19481 + 19482 8715 8719 + 8719 19485 19482 + 19482 19485 19483 + 19486 19483 19485 + 19484 19483 19486 + 8715 19372 8716 + 19485 8719 8718 + 8718 19487 19485 + 19485 19487 19486 + 19488 19486 19487 + 19489 19486 19488 + 19486 19489 19484 + 19484 19489 19490 + 19490 19480 19484 + 19491 19480 19490 + 19480 19491 19476 + 19487 8718 8723 + 8723 19492 19487 + 19487 19492 19488 + 19493 19488 19492 + 19494 19488 19493 + 19488 19494 19489 + 19489 19494 19495 + 19495 19490 19489 + 19496 19490 19495 + 19490 19496 19491 + 19492 8723 8722 + 8722 19497 19492 + 19492 19497 19493 + 19498 19493 19497 + 19499 19493 19498 + 19493 19499 19494 + 19494 19499 19500 + 19500 19495 19494 + 19501 19495 19500 + 19495 19501 19496 + 19497 8722 19502 + 19502 19503 19497 + 19497 19503 19498 + 9789 19498 19503 + 19504 19498 9789 + 19498 19504 19499 + 19499 19504 19505 + 19505 19500 19499 + 19502 8722 8721 + 8721 19506 19502 + 19507 19502 19506 + 19503 19502 19507 + 19507 9784 19503 + 19503 9784 9789 + 8729 19506 8721 + 19506 8729 19508 + 19506 19508 19507 + 9780 19507 19508 + 9784 19507 9780 + 19508 8729 8728 + 8728 19509 19508 + 19508 19509 9776 + 9776 9780 19508 + 8736 19509 8728 + 19509 8736 8741 + 8741 9776 19509 + 9789 9788 19504 + 19504 9788 19510 + 19510 19505 19504 + 19511 19505 19510 + 19505 19511 19512 + 19512 19500 19505 + 19500 19512 19501 + 19501 19512 19513 + 19513 19514 19501 + 19496 19501 19514 + 9793 19510 9788 + 19515 19510 9793 + 19510 19515 19511 + 19511 19515 19516 + 19516 19517 19511 + 19512 19511 19517 + 19517 19513 19512 + 19518 19513 19517 + 19514 19513 19518 + 9793 9797 19515 + 19516 19515 9797 + 9797 9805 19516 + 19519 19516 9805 + 19517 19516 19519 + 19519 19520 19517 + 19517 19520 19518 + 19521 19518 19520 + 19522 19518 19521 + 19518 19522 19514 + 9805 19523 19519 + 19519 19523 19524 + 19524 19525 19519 + 19520 19519 19525 + 19525 19526 19520 + 19520 19526 19521 + 9804 19523 9805 + 19523 9804 9810 + 9810 19524 19523 + 19527 19524 9810 + 19524 19527 19528 + 19528 19525 19524 + 19525 19528 19529 + 19529 19526 19525 + 19526 19529 19530 + 19530 19521 19526 + 9810 9815 19527 + 19527 9815 19531 + 19531 19532 19527 + 19528 19527 19532 + 19532 19533 19528 + 19529 19528 19533 + 19533 19534 19529 + 19530 19529 19534 + 19535 19531 9815 + 19536 19531 19535 + 19531 19536 19537 + 19537 19532 19531 + 19532 19537 19538 + 19538 19533 19532 + 19533 19538 19539 + 19539 19534 19533 + 9815 9814 19535 + 9820 19535 9814 + 19540 19535 9820 + 19535 19540 19536 + 19536 19540 19541 + 19541 19542 19536 + 19537 19536 19542 + 19542 19543 19537 + 19538 19537 19543 + 19543 19544 19538 + 19539 19538 19544 + 9820 9825 19540 + 19540 9825 19545 + 19545 19541 19540 + 19546 19541 19545 + 19541 19546 19547 + 19547 19542 19541 + 19542 19547 19548 + 19548 19543 19542 + 19543 19548 19549 + 19549 19544 19543 + 9830 19545 9825 + 10921 19545 9830 + 19545 10921 19546 + 19546 10921 10920 + 10920 10930 19546 + 19547 19546 10930 + 10930 10935 19547 + 19548 19547 10935 + 10935 19550 19548 + 19549 19548 19550 + 19550 19551 19549 + 19552 19549 19551 + 19544 19549 19552 + 19552 19553 19544 + 19544 19553 19539 + 19554 19539 19553 + 19534 19539 19554 + 10934 19550 10935 + 19550 10934 19555 + 19555 19551 19550 + 19551 19555 19556 + 19556 19557 19551 + 19551 19557 19552 + 19558 19552 19557 + 19553 19552 19558 + 19558 19559 19553 + 19553 19559 19554 + 19555 10934 10939 + 10939 10948 19555 + 19556 19555 10948 + 10948 19413 19556 + 19418 19556 19413 + 19557 19556 19418 + 19418 19423 19557 + 19557 19423 19558 + 19428 19558 19423 + 19559 19558 19428 + 19428 19433 19559 + 19559 19433 19560 + 19560 19554 19559 + 19561 19554 19560 + 19554 19561 19534 + 19534 19561 19530 + 19562 19530 19561 + 19521 19530 19562 + 19438 19560 19433 + 19563 19560 19438 + 19560 19563 19561 + 19561 19563 19562 + 19564 19562 19563 + 19565 19562 19564 + 19562 19565 19521 + 19521 19565 19522 + 19438 19443 19563 + 19563 19443 19564 + 19448 19564 19443 + 19566 19564 19448 + 19564 19566 19565 + 19522 19565 19566 + 19566 19567 19522 + 19514 19522 19567 + 19567 19568 19514 + 19514 19568 19496 + 19491 19496 19568 + 19448 19453 19566 + 19566 19453 19569 + 19569 19567 19566 + 19567 19569 19570 + 19570 19568 19567 + 19568 19570 19491 + 19476 19491 19570 + 19570 19471 19476 + 19462 19471 19570 + 19569 19453 19452 + 19452 19462 19569 + 19570 19569 19462 + 19387 10972 9745 + 9745 19571 19387 + 19571 19572 19387 + 19388 19387 19572 + 19572 19573 19388 + 19574 19388 19573 + 19389 19388 19574 + 9744 19571 9745 + 19571 9744 19575 + 19571 19575 19576 + 19576 19572 19571 + 19572 19576 19573 + 19573 19576 19577 + 19577 19578 19573 + 19573 19578 19574 + 19575 9744 9743 + 9743 19579 19575 + 19575 19579 19580 + 19580 19577 19575 + 19577 19576 19575 + 19579 9743 9742 + 9742 19581 19579 + 19579 19581 19582 + 19582 19580 19579 + 19580 19582 19583 + 19577 19580 19583 + 19584 19577 19583 + 19577 19584 19578 + 19578 19584 19585 + 19578 19585 19574 + 19581 9742 19586 + 19586 19587 19581 + 19582 19581 19587 + 19587 19588 19582 + 19583 19582 19588 + 19588 19589 19583 + 19584 19583 19589 + 19590 19584 19589 + 19584 19590 19585 + 9748 19586 9742 + 19591 19586 9748 + 19587 19586 19591 + 19587 19591 19592 + 19592 19588 19587 + 19589 19588 19592 + 19589 19592 19593 + 19593 19594 19589 + 19589 19594 19590 + 19595 19590 19594 + 19585 19590 19595 + 9748 9752 19591 + 19592 19591 9752 + 19593 19592 9752 + 19596 19593 9752 + 19597 19593 19596 + 19597 19594 19593 + 19594 19597 19595 + 19598 19595 19597 + 19585 19595 19598 + 19598 19574 19585 + 19574 19598 19599 + 19574 19599 19389 + 19600 19596 9752 + 19601 19596 19600 + 19601 19602 19596 + 19596 19602 19597 + 19597 19602 19603 + 19603 19598 19597 + 19599 19598 19603 + 10977 19600 9752 + 19604 19600 10977 + 19604 19605 19600 + 19600 19605 19601 + 19601 19605 19606 + 19607 19601 19606 + 19602 19601 19607 + 19607 19603 19602 + 19608 19603 19607 + 19603 19608 19599 + 10977 19609 19604 + 19604 19609 61 + 19610 19604 61 + 19605 19604 19610 + 19610 19606 19605 + 10976 19609 10977 + 19609 10976 19611 + 19611 61 19609 + 61 8701 19610 + 8707 19610 8701 + 8707 19606 19610 + 19606 8707 19385 + 19385 19612 19606 + 19606 19612 19607 + 19608 19607 19612 + 19612 19384 19608 + 19608 19384 19383 + 19599 19608 19383 + 19383 19389 19599 + 19384 19612 19385 + 11594 11598 19613 + 19613 11598 19614 + 19614 19615 19613 + 19616 19613 19615 + 19617 19613 19616 + 19613 19617 11594 + 11594 19617 11595 + 11597 19614 11598 + 19618 19614 11597 + 19615 19614 19618 + 19618 19619 19615 + 19615 19619 19620 + 19620 19621 19615 + 19615 19621 19616 + 11597 19622 19618 + 19618 19622 11346 + 11357 19618 11346 + 19619 19618 11357 + 11357 19623 19619 + 19619 19623 19624 + 19624 19620 19619 + 11597 11596 19622 + 19622 11596 11347 + 11347 11346 19622 + 19625 19620 19624 + 19620 19625 19626 + 19626 19621 19620 + 19621 19626 19627 + 19627 19616 19621 + 19628 19616 19627 + 19616 19628 19617 + 19617 19628 19629 + 19629 11595 19617 + 11590 11595 19629 + 19624 19630 19625 + 19625 19630 19631 + 19631 19632 19625 + 19626 19625 19632 + 19633 19630 19624 + 19630 19633 19634 + 19634 19631 19630 + 19631 19634 19635 + 19635 19636 19631 + 19631 19636 19637 + 19637 19632 19631 + 19624 19638 19633 + 19633 19638 19639 + 19639 19640 19633 + 19634 19633 19640 + 19640 19641 19634 + 19635 19634 19641 + 19638 19624 19623 + 19623 19642 19638 + 19638 19642 19643 + 19643 19639 19638 + 19642 19623 11357 + 11357 11356 19642 + 19642 11356 19644 + 19644 19643 19642 + 19643 19644 19645 + 19645 19646 19643 + 19643 19646 19647 + 19647 19648 19643 + 19640 19648 19647 + 19649 19644 11356 + 19645 19644 19649 + 19649 19650 19645 + 19651 19645 19650 + 19646 19645 19651 + 19651 19652 19646 + 19646 19652 19653 + 19653 19647 19646 + 11355 19649 11356 + 19654 19649 11355 + 19650 19649 19654 + 19650 19654 19655 + 19655 19656 19650 + 19650 19656 19651 + 19657 19651 19656 + 19651 19657 19658 + 19658 19652 19651 + 11355 19659 19654 + 19655 19654 19659 + 19659 19660 19655 + 19661 19655 19660 + 19655 19661 19662 + 19662 19656 19655 + 19656 19662 19657 + 19663 19657 19662 + 19658 19657 19663 + 11361 19659 11355 + 19659 11361 19664 + 19664 19660 19659 + 19665 19660 19664 + 19660 19665 19661 + 19666 19661 19665 + 19662 19661 19666 + 19666 19667 19662 + 19662 19667 19663 + 19664 11361 11360 + 11360 19668 19664 + 19669 19664 19668 + 19664 19669 19665 + 19665 19669 19670 + 19670 19671 19665 + 19665 19671 19666 + 11365 19668 11360 + 19672 19668 11365 + 19668 19672 19669 + 19670 19669 19672 + 19672 19673 19670 + 19674 19670 19673 + 19670 19674 19675 + 19675 19671 19670 + 19671 19675 19676 + 19676 19666 19671 + 11365 19677 19672 + 19672 19677 19678 + 19678 19673 19672 + 19679 19673 19678 + 19673 19679 19674 + 19680 19674 19679 + 19675 19674 19680 + 19677 11365 11364 + 11364 19681 19677 + 19678 19677 19681 + 19681 19682 19678 + 19683 19678 19682 + 19678 19683 19679 + 19679 19683 19684 + 19684 19685 19679 + 19679 19685 19680 + 19681 11364 11369 + 11369 19686 19681 + 19681 19686 19687 + 19687 19682 19681 + 19688 19682 19687 + 19682 19688 19683 + 19684 19683 19688 + 19686 11369 11374 + 11374 19689 19686 + 19687 19686 19689 + 19689 19690 19687 + 19691 19687 19690 + 19687 19691 19688 + 19688 19691 19692 + 19692 19693 19688 + 19688 19693 19684 + 19689 11374 11379 + 11379 19694 19689 + 19689 19694 19695 + 19695 19690 19689 + 19696 19690 19695 + 19690 19696 19691 + 19692 19691 19696 + 19694 11379 19697 + 19697 19698 19694 + 19695 19694 19698 + 19698 19699 19695 + 19700 19695 19699 + 19695 19700 19696 + 11378 19697 11379 + 19701 19697 11378 + 19698 19697 19701 + 19701 19702 19698 + 19698 19702 19703 + 19703 19699 19698 + 19704 19699 19703 + 19699 19704 19700 + 19705 19700 19704 + 19696 19700 19705 + 11378 11384 19701 + 19701 11384 11383 + 11383 19706 19701 + 19702 19701 19706 + 19706 19707 19702 + 19703 19702 19707 + 19707 19708 19703 + 19709 19703 19708 + 19703 19709 19704 + 19710 19706 11383 + 19707 19706 19710 + 19710 19711 19707 + 19707 19711 19712 + 19712 19708 19707 + 19713 19708 19712 + 19708 19713 19709 + 19714 19709 19713 + 19704 19709 19714 + 11383 11382 19710 + 19715 19710 11382 + 19711 19710 19715 + 19715 19716 19711 + 19712 19711 19716 + 19716 19717 19712 + 19718 19712 19717 + 19712 19718 19713 + 11382 19719 19715 + 19720 19715 19719 + 19716 19715 19720 + 19720 19721 19716 + 19716 19721 19722 + 19722 19717 19716 + 19723 19717 19722 + 19717 19723 19718 + 11388 19719 11382 + 19719 11388 19724 + 19719 19724 19720 + 19720 19724 19725 + 19725 19726 19720 + 19721 19720 19726 + 19726 19727 19721 + 19722 19721 19727 + 19724 11388 11387 + 11387 19728 19724 + 19724 19728 19725 + 19729 19725 19728 + 19725 19729 19730 + 19725 19730 19731 + 19731 19726 19725 + 19727 19726 19731 + 11387 11392 19728 + 19728 11392 19729 + 19729 11392 11391 + 11391 19732 19729 + 19732 19733 19729 + 19730 19729 19733 + 19733 19734 19730 + 19730 19734 19735 + 19735 19731 19730 + 19736 19731 19735 + 19731 19736 19727 + 19737 19732 11391 + 19732 19737 19738 + 19738 19739 19732 + 19732 19739 19740 + 19740 19733 19732 + 19733 19740 19741 + 19741 19734 19733 + 11391 11390 19737 + 11401 19737 11390 + 19738 19737 11401 + 11401 19742 19738 + 19738 19742 19743 + 19744 19738 19743 + 19739 19738 19744 + 19744 19745 19739 + 19740 19739 19745 + 19745 19746 19740 + 19741 19740 19746 + 19742 11401 19747 + 19747 19748 19742 + 19742 19748 19749 + 19749 19750 19742 + 19742 19750 19743 + 19747 11401 19751 + 19751 19752 19747 + 19747 19752 19753 + 19753 19754 19747 + 19748 19747 19754 + 19754 19755 19748 + 19749 19748 19755 + 11400 19751 11401 + 19756 19751 11400 + 19756 19752 19751 + 19752 19756 11424 + 11424 19753 19752 + 11423 19753 11424 + 19753 11423 19757 + 19757 19754 19753 + 19754 19757 19758 + 19758 19755 19754 + 11400 11406 19756 + 19756 11406 11411 + 19756 11411 11424 + 19759 19755 19758 + 19755 19759 19749 + 19760 19749 19759 + 19749 19760 19750 + 19750 19760 19761 + 19761 19743 19750 + 19762 19759 19758 + 19763 19759 19762 + 19759 19763 19760 + 19760 19763 19764 + 19761 19760 19764 + 19764 19765 19761 + 19766 19761 19765 + 19761 19766 19743 + 19758 19767 19762 + 19767 19768 19762 + 19769 19762 19768 + 19762 19769 19763 + 19763 19769 19770 + 19770 19764 19763 + 19771 19767 19758 + 19772 19767 19771 + 19767 19772 11431 + 11431 19768 19767 + 11431 11430 19768 + 19768 11430 19769 + 19758 19757 19771 + 19771 19757 11423 + 11423 11422 19771 + 19772 19771 11422 + 11422 11421 19772 + 11431 19772 11421 + 19769 11430 11429 + 11429 19773 19769 + 19773 19774 19769 + 19774 19770 19769 + 19775 19770 19774 + 19770 19775 19764 + 19764 19775 19776 + 19776 19765 19764 + 19765 19776 19777 + 19765 19777 19766 + 19778 19773 11429 + 19779 19773 19778 + 19773 19779 19780 + 19780 19774 19773 + 19780 19781 19774 + 19774 19781 19775 + 19775 19781 19782 + 19782 19776 19775 + 11429 11428 19778 + 19778 11428 11440 + 11440 19783 19778 + 19779 19778 19783 + 19784 19783 11440 + 19785 19783 19784 + 19783 19785 19779 + 11440 19786 19784 + 19784 19786 19787 + 19787 19788 19784 + 19785 19784 19788 + 19788 19789 19785 + 19785 19789 19790 + 19779 19785 19790 + 19791 19786 11440 + 19786 19791 19792 + 19792 19787 19786 + 19793 19787 19792 + 19787 19793 19794 + 19794 19788 19787 + 19789 19788 19794 + 19789 19794 19795 + 19795 19790 19789 + 11440 19796 19791 + 19791 19796 19797 + 19797 19798 19791 + 19791 19798 19799 + 19799 19792 19791 + 19800 19792 19799 + 19792 19800 19793 + 19796 11440 11439 + 11439 11445 19796 + 19797 19796 11445 + 11445 11453 19797 + 19801 19797 11453 + 19798 19797 19801 + 19801 19802 19798 + 19798 19802 19803 + 19803 19799 19798 + 19799 19803 19804 + 19799 19804 19800 + 11453 11457 19801 + 19801 11457 11462 + 11462 19805 19801 + 19802 19801 19805 + 19805 19806 19802 + 19802 19806 19807 + 19807 19803 19802 + 19804 19803 19807 + 19807 19808 19804 + 19800 19804 19808 + 19808 19809 19800 + 19793 19800 19809 + 11467 19805 11462 + 19805 11467 19810 + 19810 19806 19805 + 19806 19810 10876 + 10876 10875 19806 + 19806 10875 19807 + 10881 19807 10875 + 19807 10881 19811 + 19811 19808 19807 + 19810 11467 11466 + 11466 19812 19810 + 19810 19812 10867 + 10867 10876 19810 + 19813 19812 11466 + 19812 19813 10868 + 10868 10867 19812 + 11466 11471 19813 + 19813 11471 11476 + 11476 19814 19813 + 19813 19814 10863 + 10863 10868 19813 + 19815 19814 11476 + 19814 19815 19816 + 19816 10863 19814 + 10863 19816 10856 + 10856 19816 19817 + 19817 10851 10856 + 11476 19818 19815 + 19815 19818 19819 + 19819 19820 19815 + 19815 19820 19817 + 19817 19816 19815 + 19818 11476 11475 + 11475 11481 19818 + 19819 19818 11481 + 11481 19821 19819 + 19822 19819 19821 + 19820 19819 19822 + 19822 19823 19820 + 19820 19823 19824 + 19824 19817 19820 + 10851 19817 19824 + 19824 10852 10851 + 11486 19821 11481 + 19821 11486 11491 + 11491 19825 19821 + 19821 19825 19822 + 19822 19825 19826 + 19826 19827 19822 + 19823 19822 19827 + 19827 19828 19823 + 19824 19823 19828 + 19828 19829 19824 + 10852 19824 19829 + 19829 10846 10852 + 19825 11491 19830 + 19830 19826 19825 + 19831 19826 19830 + 19826 19831 19832 + 19832 19827 19826 + 19827 19832 19833 + 19833 19828 19827 + 19828 19833 19834 + 19834 19829 19828 + 19835 19830 11491 + 19836 19830 19835 + 19830 19836 19831 + 19831 19836 19837 + 19837 19838 19831 + 19831 19838 19839 + 19839 19832 19831 + 19833 19832 19839 + 11491 11490 19835 + 11496 19835 11490 + 19840 19835 11496 + 19835 19840 19836 + 19837 19836 19840 + 19840 19841 19837 + 19842 19837 19841 + 19837 19842 19843 + 19843 19838 19837 + 19838 19843 19844 + 19844 19839 19838 + 11496 19845 19840 + 19840 19845 19846 + 19846 19841 19840 + 19847 19841 19846 + 19841 19847 19842 + 19848 19842 19847 + 19843 19842 19848 + 19845 11496 11495 + 11495 11501 19845 + 19846 19845 11501 + 11501 19849 19846 + 19850 19846 19849 + 19846 19850 19847 + 19847 19850 19851 + 19851 19852 19847 + 19847 19852 19848 + 11505 19849 11501 + 19853 19849 11505 + 19849 19853 19850 + 19851 19850 19853 + 19853 19854 19851 + 19855 19851 19854 + 19851 19855 19856 + 19856 19852 19851 + 19852 19856 19857 + 19857 19848 19852 + 11505 19858 19853 + 19853 19858 19859 + 19859 19854 19853 + 19860 19854 19859 + 19854 19860 19855 + 19861 19855 19860 + 19856 19855 19861 + 19858 11505 11510 + 11510 19862 19858 + 19859 19858 19862 + 19862 19863 19859 + 19864 19859 19863 + 19859 19864 19860 + 19860 19864 19865 + 19865 19866 19860 + 19860 19866 19861 + 19862 11510 11509 + 11509 19867 19862 + 19862 19867 19868 + 19868 19863 19862 + 19869 19863 19868 + 19863 19869 19864 + 19865 19864 19869 + 19867 11509 11518 + 11518 19870 19867 + 19868 19867 19870 + 19870 19871 19868 + 19872 19868 19871 + 19868 19872 19869 + 19869 19872 19873 + 19873 19874 19869 + 19869 19874 19865 + 19870 11518 11517 + 11517 19875 19870 + 19870 19875 19876 + 19876 19871 19870 + 19877 19871 19876 + 19871 19877 19872 + 19873 19872 19877 + 19875 11517 11522 + 11522 19878 19875 + 19876 19875 19878 + 19878 19879 19876 + 19880 19876 19879 + 19876 19880 19877 + 19877 19880 19881 + 19881 19882 19877 + 19877 19882 19873 + 19878 11522 11521 + 11521 19883 19878 + 19878 19883 19884 + 19884 19879 19878 + 19885 19879 19884 + 19879 19885 19880 + 19881 19880 19885 + 19883 11521 11529 + 11529 19886 19883 + 19884 19883 19886 + 19886 19887 19884 + 19888 19884 19887 + 19884 19888 19885 + 19885 19888 19889 + 19889 19890 19885 + 19885 19890 19881 + 19886 11529 11528 + 11528 19891 19886 + 19886 19891 19892 + 19892 19887 19886 + 19893 19887 19892 + 19887 19893 19888 + 19889 19888 19893 + 19891 11528 11537 + 11537 19894 19891 + 19892 19891 19894 + 19894 19895 19892 + 19896 19892 19895 + 19892 19896 19893 + 19893 19896 19897 + 19897 19898 19893 + 19893 19898 19889 + 19894 11537 11536 + 11536 19899 19894 + 19894 19899 19900 + 19900 19895 19894 + 19901 19895 19900 + 19895 19901 19896 + 19897 19896 19901 + 19899 11536 19902 + 19902 19903 19899 + 19900 19899 19903 + 19903 19904 19900 + 19905 19900 19904 + 19900 19905 19901 + 11541 19902 11536 + 19906 19902 11541 + 19903 19902 19906 + 19906 19907 19903 + 19903 19907 19908 + 19908 19904 19903 + 19909 19904 19908 + 19904 19909 19905 + 19910 19905 19909 + 19901 19905 19910 + 11541 11545 19906 + 19906 11545 11550 + 11550 19911 19906 + 19907 19906 19911 + 19911 19912 19907 + 19908 19907 19912 + 19912 19913 19908 + 19914 19908 19913 + 19908 19914 19909 + 19915 19911 11550 + 19912 19911 19915 + 19915 19916 19912 + 19912 19916 19917 + 19917 19913 19912 + 19918 19913 19917 + 19913 19918 19914 + 19919 19914 19918 + 19909 19914 19919 + 11550 11555 19915 + 19915 11555 19920 + 19920 19921 19915 + 19916 19915 19921 + 19921 19922 19916 + 19917 19916 19922 + 19922 19923 19917 + 19924 19917 19923 + 19917 19924 19918 + 11554 19920 11555 + 19920 11554 19925 + 19925 19926 19920 + 19920 19926 19927 + 19927 19921 19920 + 19922 19921 19927 + 19927 19928 19922 + 19922 19928 19929 + 19929 19923 19922 + 19925 11554 11559 + 11559 11564 19925 + 19930 19925 11564 + 19926 19925 19930 + 19930 19931 19926 + 19927 19926 19931 + 19931 19932 19927 + 19928 19927 19932 + 19932 19933 19928 + 19929 19928 19933 + 11564 19934 19930 + 19935 19930 19934 + 19931 19930 19935 + 19935 19936 19931 + 19931 19936 19937 + 19937 19932 19931 + 19933 19932 19937 + 19938 19934 11564 + 19939 19934 19938 + 19934 19939 19935 + 19940 19935 19939 + 19936 19935 19940 + 19940 19941 19936 + 19937 19936 19941 + 11564 11563 19938 + 11569 19938 11563 + 19942 19938 11569 + 19938 19942 19939 + 19939 19942 19943 + 19943 19944 19939 + 19939 19944 19940 + 19945 19940 19944 + 19941 19940 19945 + 11569 19946 19942 + 19942 19946 19947 + 19947 19943 19942 + 19948 19943 19947 + 19943 19948 19949 + 19949 19944 19943 + 19944 19949 19945 + 19950 19946 11569 + 19946 19950 19951 + 19951 19947 19946 + 19947 19951 19952 + 19952 19953 19947 + 19947 19953 19948 + 19954 19948 19953 + 19949 19948 19954 + 11569 11568 19950 + 19950 11568 11567 + 11567 19955 19950 + 19950 19955 19956 + 19956 19951 19950 + 19952 19951 19956 + 19956 19957 19952 + 19952 19957 19958 + 19958 19959 19952 + 19953 19952 19959 + 11576 19955 11567 + 19955 11576 19960 + 19960 19956 19955 + 19956 19960 19961 + 19961 19957 19956 + 19957 19961 19962 + 19962 19958 19957 + 11580 19960 11576 + 19961 19960 11580 + 11580 19963 19961 + 19961 19963 19964 + 19964 19962 19961 + 19965 19962 19964 + 19958 19962 19965 + 19965 19966 19958 + 19958 19966 19967 + 19967 19959 19958 + 11585 19963 11580 + 19963 11585 19968 + 19968 19964 19963 + 19964 19968 19969 + 19969 19970 19964 + 19964 19970 19965 + 19965 19970 19971 + 19971 19972 19965 + 19966 19965 19972 + 19973 19968 11585 + 19969 19968 19973 + 19973 19974 19969 + 19975 19969 19974 + 19970 19969 19975 + 19975 19971 19970 + 11585 11590 19973 + 19629 19973 11590 + 19974 19973 19629 + 19629 19976 19974 + 19974 19976 19977 + 19977 19978 19974 + 19974 19978 19975 + 19979 19975 19978 + 19971 19975 19979 + 19976 19629 19628 + 19628 19980 19976 + 19976 19980 19981 + 19981 19982 19976 + 19982 19977 19976 + 19983 19977 19982 + 19978 19977 19983 + 19983 19984 19978 + 19978 19984 19979 + 19627 19980 19628 + 19980 19627 19985 + 19985 19981 19980 + 19981 19985 19986 + 19981 19986 19987 + 19987 19982 19981 + 19988 19982 19987 + 19982 19988 19983 + 19983 19988 19989 + 19984 19983 19989 + 19985 19627 19626 + 19990 19985 19626 + 19986 19985 19990 + 19990 19991 19986 + 19986 19991 19992 + 19987 19986 19992 + 19993 19987 19992 + 19988 19987 19993 + 19993 19989 19988 + 19994 19989 19993 + 19989 19994 19984 + 19626 19995 19990 + 19996 19990 19995 + 19990 19996 19991 + 19991 19996 19997 + 19997 19998 19991 + 19991 19998 19992 + 19632 19995 19626 + 19995 19632 19637 + 19637 19999 19995 + 19995 19999 19996 + 19997 19996 19999 + 19999 20000 19997 + 20001 19997 20000 + 19997 20001 19998 + 19998 20001 20002 + 20002 19992 19998 + 19999 19637 20003 + 20003 20000 19999 + 20000 20003 20004 + 20004 20005 20000 + 20000 20005 20001 + 20001 20005 20006 + 20002 20001 20006 + 20007 20003 19637 + 20004 20003 20007 + 20007 20008 20004 + 20009 20004 20008 + 20005 20004 20009 + 20009 20006 20005 + 19637 19636 20007 + 20010 20007 19636 + 20007 20010 20011 + 20011 20008 20007 + 20008 20011 20012 + 20012 20013 20008 + 20008 20013 20009 + 20014 20009 20013 + 20009 20014 20006 + 19636 19635 20010 + 20010 19635 20015 + 20015 20016 20010 + 20011 20010 20016 + 20016 20017 20011 + 20011 20017 20018 + 20012 20011 20018 + 19641 20015 19635 + 20015 19641 20019 + 20019 20020 20015 + 20015 20020 20021 + 20021 20016 20015 + 20017 20016 20021 + 20021 20022 20017 + 20017 20022 20023 + 20023 20018 20017 + 20019 19641 19640 + 19640 20024 20019 + 20025 20019 20024 + 20020 20019 20025 + 20025 20026 20020 + 20020 20026 20027 + 20027 20021 20020 + 20022 20021 20027 + 20027 20028 20022 + 20023 20022 20028 + 19647 20024 19640 + 20024 19647 19653 + 19653 20029 20024 + 20024 20029 20025 + 20030 20025 20029 + 20025 20030 20031 + 20031 20026 20025 + 20026 20031 20032 + 20032 20027 20026 + 20027 20032 20033 + 20033 20028 20027 + 20034 20029 19653 + 20029 20034 20030 + 20030 20034 20035 + 20036 20030 20035 + 20031 20030 20036 + 20036 20037 20031 + 20031 20037 20038 + 20038 20032 20031 + 20033 20032 20038 + 19653 20039 20034 + 20034 20039 20040 + 20040 20035 20034 + 11018 20035 20040 + 20035 11018 11025 + 11025 20041 20035 + 20035 20041 20036 + 20039 19653 19652 + 19652 19658 20039 + 20040 20039 19658 + 19658 20042 20040 + 20043 20040 20042 + 20040 20043 11018 + 11018 20043 11019 + 11019 20043 20044 + 20044 20045 11019 + 11020 11019 20045 + 19663 20042 19658 + 20044 20042 19663 + 20042 20044 20043 + 19663 20046 20044 + 20044 20046 20047 + 20047 20045 20044 + 20048 20045 20047 + 20045 20048 11020 + 11014 11020 20048 + 20048 20049 11014 + 11015 11014 20049 + 20046 19663 19667 + 19667 20050 20046 + 20047 20046 20050 + 20050 20051 20047 + 20052 20047 20051 + 20047 20052 20048 + 20048 20052 20053 + 20053 20049 20048 + 20054 20049 20053 + 20049 20054 11015 + 11016 11015 20054 + 20050 19667 19666 + 19666 19676 20050 + 20050 19676 20055 + 20055 20051 20050 + 20056 20051 20055 + 20051 20056 20052 + 20053 20052 20056 + 20056 20057 20053 + 20058 20053 20057 + 20053 20058 20054 + 20055 19676 19675 + 19675 20059 20055 + 20060 20055 20059 + 20055 20060 20056 + 20056 20060 20061 + 20061 20057 20056 + 20062 20057 20061 + 20057 20062 20058 + 20063 20058 20062 + 20054 20058 20063 + 19680 20059 19675 + 20064 20059 19680 + 20059 20064 20060 + 20061 20060 20064 + 20064 20065 20061 + 20066 20061 20065 + 20061 20066 20062 + 20062 20066 20067 + 20067 20068 20062 + 20062 20068 20063 + 19680 20069 20064 + 20064 20069 20070 + 20070 20065 20064 + 20071 20065 20070 + 20065 20071 20066 + 20067 20066 20071 + 20069 19680 19685 + 19685 20072 20069 + 20070 20069 20072 + 20072 20073 20070 + 20074 20070 20073 + 20070 20074 20071 + 20071 20074 20075 + 20075 20076 20071 + 20071 20076 20067 + 20072 19685 19684 + 19684 20077 20072 + 20072 20077 20078 + 20078 20073 20072 + 20079 20073 20078 + 20073 20079 20074 + 20075 20074 20079 + 20077 19684 19693 + 19693 20080 20077 + 20078 20077 20080 + 20080 20081 20078 + 20082 20078 20081 + 20078 20082 20079 + 20079 20082 20083 + 20083 20084 20079 + 20079 20084 20075 + 20080 19693 19692 + 19692 20085 20080 + 20080 20085 20086 + 20086 20081 20080 + 20087 20081 20086 + 20081 20087 20082 + 20083 20082 20087 + 20085 19692 20088 + 20088 20089 20085 + 20086 20085 20089 + 20089 20090 20086 + 20091 20086 20090 + 20086 20091 20087 + 19696 20088 19692 + 19705 20088 19696 + 20089 20088 19705 + 19705 20092 20089 + 20089 20092 20093 + 20093 20090 20089 + 19919 20090 20093 + 20090 19919 20091 + 19918 20091 19919 + 20087 20091 19918 + 19918 19924 20087 + 20087 19924 20083 + 20092 19705 20094 + 20094 20095 20092 + 20093 20092 20095 + 20095 20096 20093 + 20097 20093 20096 + 20093 20097 19919 + 19919 20097 19909 + 19909 20097 19910 + 19704 20094 19705 + 19714 20094 19704 + 20095 20094 19714 + 19714 20098 20095 + 20095 20098 20099 + 20099 20096 20095 + 19910 20096 20099 + 20096 19910 20097 + 20098 19714 20100 + 20100 20101 20098 + 20099 20098 20101 + 20101 20102 20099 + 20103 20099 20102 + 20099 20103 19910 + 19910 20103 19901 + 19901 20103 19897 + 19713 20100 19714 + 20104 20100 19713 + 20101 20100 20104 + 20104 20105 20101 + 20101 20105 20106 + 20106 20102 20101 + 19897 20102 20106 + 20102 19897 20103 + 19713 19718 20104 + 20104 19718 19723 + 19723 20107 20104 + 20105 20104 20107 + 20107 20108 20105 + 20106 20105 20108 + 20108 20109 20106 + 19898 20106 20109 + 20106 19898 19897 + 20110 20107 19723 + 20108 20107 20110 + 20110 20111 20108 + 20108 20111 20112 + 20112 20109 20108 + 19889 20109 20112 + 20109 19889 19898 + 19723 20113 20110 + 20110 20113 20114 + 20114 20115 20110 + 20111 20110 20115 + 20115 20116 20111 + 20112 20111 20116 + 19722 20113 19723 + 20113 19722 20117 + 20117 20114 20113 + 20114 20117 20118 + 20118 20119 20114 + 20114 20119 20120 + 20120 20115 20114 + 20116 20115 20120 + 19727 20117 19722 + 20118 20117 19727 + 19727 19736 20118 + 20118 19736 20121 + 20121 20122 20118 + 20119 20118 20122 + 20122 20123 20119 + 20120 20119 20123 + 20123 20124 20120 + 20125 20120 20124 + 20120 20125 20116 + 19735 20121 19736 + 20121 19735 20126 + 20126 20127 20121 + 20121 20127 20128 + 20128 20122 20121 + 20123 20122 20128 + 20128 20129 20123 + 20123 20129 20130 + 20130 20124 20123 + 20126 19735 19734 + 19734 19741 20126 + 20131 20126 19741 + 20127 20126 20131 + 20131 20132 20127 + 20128 20127 20132 + 20132 20133 20128 + 20129 20128 20133 + 20133 20134 20129 + 20130 20129 20134 + 19741 20135 20131 + 20136 20131 20135 + 20132 20131 20136 + 20136 20137 20132 + 20132 20137 20138 + 20138 20133 20132 + 20134 20133 20138 + 19746 20135 19741 + 20135 19746 20139 + 20139 20140 20135 + 20135 20140 20136 + 20136 20140 20141 + 20141 20142 20136 + 20137 20136 20142 + 20142 20143 20137 + 20138 20137 20143 + 20139 19746 19745 + 19745 20144 20139 + 20145 20139 20144 + 20140 20139 20145 + 20145 20141 20140 + 20146 20141 20145 + 20141 20146 20147 + 20147 20142 20141 + 20143 20142 20147 + 20148 20144 19745 + 20144 20148 20149 + 20149 20150 20144 + 20144 20150 20145 + 20150 20151 20145 + 20146 20145 20151 + 19745 19744 20148 + 20148 19744 20152 + 20152 20153 20148 + 20149 20148 20153 + 20154 20149 20153 + 20155 20149 20154 + 20150 20149 20155 + 19743 20152 19744 + 20156 20152 19743 + 20153 20152 20156 + 20156 20157 20153 + 20153 20157 20158 + 20158 20159 20153 + 20153 20159 20154 + 19743 19766 20156 + 20160 20156 19766 + 20157 20156 20160 + 20160 20161 20157 + 20157 20161 20162 + 20162 20158 20157 + 20163 20158 20162 + 20158 20163 20159 + 20159 20163 20164 + 20164 20154 20159 + 19766 19777 20160 + 19777 20165 20160 + 20166 20160 20165 + 20160 20166 20167 + 20167 20161 20160 + 20161 20167 20168 + 20168 20162 20161 + 19777 19776 20165 + 19776 19782 20165 + 19782 20169 20165 + 20165 20169 20166 + 20170 20166 20169 + 20167 20166 20170 + 20170 20171 20167 + 20167 20171 20172 + 20172 20168 20167 + 20173 20168 20172 + 20162 20168 20173 + 20174 20169 19782 + 20169 20174 20170 + 20175 20170 20174 + 20175 20171 20170 + 20171 20175 20176 + 20176 20172 20171 + 20176 20177 20172 + 20172 20177 20173 + 20178 20174 19782 + 20179 20174 20178 + 20174 20179 20175 + 20175 20179 19779 + 20176 20175 19779 + 19790 20176 19779 + 20177 20176 19790 + 19790 20180 20177 + 20173 20177 20180 + 19781 20178 19782 + 20178 19781 19780 + 20179 20178 19780 + 20179 19780 19779 + 19790 19795 20180 + 20180 19795 20181 + 20181 20182 20180 + 20180 20182 20173 + 20182 20183 20173 + 20183 20184 20173 + 20185 20173 20184 + 20173 20185 20162 + 20181 19795 20186 + 20186 20187 20181 + 20188 20181 20187 + 20188 20182 20181 + 20182 20188 20189 + 20189 20183 20182 + 19795 19794 20186 + 19794 19793 20186 + 19809 20186 19793 + 20186 19809 20190 + 20190 20191 20186 + 20186 20191 20192 + 20192 20187 20186 + 20193 20187 20192 + 20187 20193 20188 + 20188 20193 20194 + 20189 20188 20194 + 20190 19809 19808 + 19808 19811 20190 + 20190 19811 20195 + 20195 20196 20190 + 20191 20190 20196 + 20196 20197 20191 + 20192 20191 20197 + 20197 20198 20192 + 20193 20192 20198 + 20198 20199 20193 + 20193 20199 20194 + 10880 20195 19811 + 10886 20195 10880 + 20195 10886 20200 + 20200 20196 20195 + 20197 20196 20200 + 20200 20201 20197 + 20197 20201 20202 + 20202 20198 20197 + 20199 20198 20202 + 19811 10881 10880 + 20200 10886 10885 + 10885 20203 20200 + 20201 20200 20203 + 20203 20204 20201 + 20202 20201 20204 + 20204 20205 20202 + 20199 20202 20205 + 20205 20206 20199 + 20199 20206 20194 + 10890 20203 10885 + 20204 20203 10890 + 10890 10894 20204 + 20204 10894 10899 + 10899 20205 20204 + 20206 20205 10899 + 20206 10899 10898 + 10898 20194 20206 + 20194 10898 20207 + 20194 20207 20208 + 20208 20209 20194 + 20194 20209 20189 + 20207 10898 20210 + 20210 20211 20207 + 20208 20207 20211 + 20212 20208 20211 + 20213 20208 20212 + 20209 20208 20213 + 10897 20210 10898 + 10909 20210 10897 + 10909 20211 20210 + 20211 10909 20214 + 20214 20215 20211 + 20211 20215 20212 + 20214 10909 10686 + 20216 20214 10686 + 20217 20214 20216 + 20214 20217 20215 + 20215 20217 20218 + 20218 20219 20215 + 20215 20219 20212 + 10686 20220 20216 + 20220 20221 20216 + 20222 20216 20221 + 20216 20222 20223 + 20216 20223 20217 + 20218 20217 20223 + 10693 20220 10686 + 20220 10693 20224 + 20220 20224 20225 + 20225 20221 20220 + 20221 20225 20226 + 20221 20226 20222 + 20227 20222 20226 + 20223 20222 20227 + 20227 20228 20223 + 20223 20228 20218 + 20224 10693 10692 + 10692 20229 20224 + 20224 20229 20230 + 20230 20225 20224 + 20226 20225 20230 + 20230 20231 20226 + 20226 20231 20227 + 20232 20227 20231 + 20227 20232 20233 + 20233 20228 20227 + 20229 10692 20234 + 20229 20234 20235 + 20235 20236 20229 + 20229 20236 20230 + 20237 20230 20236 + 20230 20237 20238 + 20238 20231 20230 + 20231 20238 20232 + 20234 10692 20239 + 20239 20240 20234 + 20235 20234 20240 + 20241 20235 20240 + 20242 20235 20241 + 20236 20235 20242 + 20236 20242 20237 + 20243 20237 20242 + 20238 20237 20243 + 20244 20239 10692 + 20245 20239 20244 + 20240 20239 20245 + 20240 20245 20246 + 20246 20247 20240 + 20240 20247 20241 + 10698 20244 10692 + 20248 20244 10698 + 20244 20248 20249 + 20244 20249 20245 + 20245 20249 20250 + 20246 20245 20250 + 20251 20246 20250 + 20252 20246 20251 + 20247 20246 20252 + 10698 10704 20248 + 20248 10704 20253 + 20253 20254 20248 + 20254 20255 20248 + 20249 20248 20255 + 20255 20250 20249 + 20250 20255 20256 + 20250 20256 20257 + 20257 20251 20250 + 10703 20253 10704 + 10703 20258 20253 + 20253 20258 20259 + 20259 20254 20253 + 20254 20259 20260 + 20254 20260 20256 + 20256 20255 20254 + 20258 10703 10708 + 10708 20261 20258 + 20258 20261 20262 + 20259 20258 20262 + 20260 20259 20262 + 20262 20263 20260 + 20260 20263 20264 + 20256 20260 20264 + 20264 20257 20256 + 20265 20257 20264 + 20251 20257 20265 + 10708 10707 20261 + 20261 10707 20266 + 20266 20262 20261 + 20263 20262 20266 + 20266 20267 20263 + 20263 20267 20268 + 20268 20264 20263 + 20264 20268 20269 + 20264 20269 20265 + 20270 20266 10707 + 20270 20271 20266 + 20271 20267 20266 + 20267 20271 20272 + 20272 20268 20267 + 20269 20268 20272 + 20272 20273 20269 + 20265 20269 20273 + 10712 20270 10707 + 20274 20270 10712 + 20270 20274 20271 + 20271 20274 20275 + 20275 20272 20271 + 20272 20275 20276 + 20276 20273 20272 + 10712 10711 20274 + 20275 20274 10711 + 20277 20275 10711 + 20276 20275 20277 + 20277 20278 20276 + 20276 20278 20279 + 20279 20280 20276 + 20273 20276 20280 + 10711 20281 20277 + 20282 20277 20281 + 20277 20282 20283 + 20283 20278 20277 + 20278 20283 20284 + 20284 20279 20278 + 10716 20281 10711 + 20281 10716 10721 + 20281 10721 20282 + 20282 10721 20285 + 20285 20286 20282 + 20283 20282 20286 + 20286 20287 20283 + 20283 20287 20288 + 20288 20284 20283 + 10721 10720 20285 + 10735 20285 10720 + 20285 10735 20289 + 20289 20290 20285 + 20285 20290 20291 + 20291 20286 20285 + 20287 20286 20291 + 20287 20291 20292 + 20292 20288 20287 + 20289 10735 20293 + 20293 20294 20289 + 20295 20289 20294 + 20290 20289 20295 + 20295 20296 20290 + 20290 20296 20292 + 20292 20291 20290 + 10734 20293 10735 + 20297 20293 10734 + 20294 20293 20297 + 20294 20297 20298 + 20298 20299 20294 + 20294 20299 20295 + 20300 20295 20299 + 20296 20295 20300 + 10734 10743 20297 + 20298 20297 10743 + 10743 10752 20298 + 20301 20298 10752 + 20299 20298 20301 + 20301 20302 20299 + 20299 20302 20300 + 20300 20302 20303 + 20303 20304 20300 + 20305 20300 20304 + 20300 20305 20296 + 10752 20306 20301 + 20301 20306 20307 + 20307 20308 20301 + 20302 20301 20308 + 20308 20303 20302 + 10751 20306 10752 + 20306 10751 20309 + 20309 20307 20306 + 20309 10768 20307 + 20307 10768 10785 + 10785 20308 20307 + 20303 20308 10785 + 10785 10791 20303 + 20303 10791 10796 + 10796 20304 20303 + 10759 20309 10751 + 10768 20309 10759 + 20162 20185 20163 + 20164 20163 20185 + 20185 20310 20164 + 20311 20164 20310 + 20164 20311 20312 + 20312 20154 20164 + 20154 20312 20155 + 20184 20310 20185 + 20310 20184 20313 + 20313 20314 20310 + 20310 20314 20311 + 20315 20311 20314 + 20312 20311 20315 + 20315 20316 20312 + 20312 20316 20317 + 20155 20312 20317 + 20313 20184 20183 + 20183 20318 20313 + 20313 20318 20319 + 20319 20320 20313 + 20314 20313 20320 + 20320 20321 20314 + 20314 20321 20315 + 20322 20315 20321 + 20315 20322 20316 + 20189 20318 20183 + 20318 20189 20323 + 20323 20319 20318 + 20323 20324 20319 + 20319 20324 20325 + 20325 20320 20319 + 20321 20320 20325 + 20325 20326 20321 + 20321 20326 20322 + 20209 20323 20189 + 20324 20323 20209 + 20209 20213 20324 + 20324 20213 20327 + 20325 20324 20327 + 20326 20325 20327 + 20327 20328 20326 + 20322 20326 20328 + 20329 20322 20328 + 20316 20322 20329 + 20329 20330 20316 + 20316 20330 20317 + 20212 20327 20213 + 20327 20212 20328 + 20328 20212 20331 + 20331 20332 20328 + 20328 20332 20329 + 20333 20329 20332 + 20329 20333 20330 + 20330 20333 20334 + 20334 20317 20330 + 20219 20331 20212 + 20335 20331 20219 + 20332 20331 20335 + 20332 20335 20333 + 20334 20333 20335 + 20335 20336 20334 + 20337 20334 20336 + 20334 20337 20338 + 20338 20317 20334 + 20219 20336 20335 + 20336 20219 20218 + 20218 20339 20336 + 20336 20339 20337 + 20340 20337 20339 + 20338 20337 20340 + 20340 20341 20338 + 20338 20341 20342 + 20343 20338 20342 + 20317 20338 20343 + 20339 20218 20228 + 20228 20233 20339 + 20339 20233 20340 + 20344 20340 20233 + 20340 20344 20341 + 20341 20344 20345 + 20345 20346 20341 + 20341 20346 20342 + 20233 20232 20344 + 20345 20344 20232 + 20232 20238 20345 + 20243 20345 20238 + 20345 20243 20346 + 20346 20243 20347 + 20347 20342 20346 + 20347 20348 20342 + 20342 20348 20349 + 20349 20350 20342 + 20342 20350 20343 + 20347 20243 20242 + 20242 20351 20347 + 20348 20347 20351 + 20351 20352 20348 + 20348 20352 20353 + 20353 20354 20348 + 20354 20349 20348 + 20241 20351 20242 + 20241 20352 20351 + 20352 20241 20247 + 20247 20252 20352 + 20352 20252 20353 + 20251 20353 20252 + 20265 20353 20251 + 20353 20265 20355 + 20355 20354 20353 + 20356 20354 20355 + 20354 20356 20357 + 20357 20349 20354 + 20349 20357 20358 + 20358 20350 20349 + 20350 20358 20359 + 20359 20343 20350 + 20355 20265 20273 + 20273 20360 20355 + 20361 20355 20360 + 20355 20361 20356 + 20356 20361 20362 + 20362 20363 20356 + 20356 20363 20364 + 20364 20357 20356 + 20358 20357 20364 + 20280 20360 20273 + 20365 20360 20280 + 20360 20365 20361 + 20362 20361 20365 + 20365 20366 20362 + 20366 20367 20362 + 20368 20362 20367 + 20363 20362 20368 + 20365 20280 20279 + 20279 20366 20365 + 20366 20279 20284 + 20284 20369 20366 + 20366 20369 20370 + 20370 20367 20366 + 20367 20370 20371 + 20371 20372 20367 + 20367 20372 20368 + 20369 20284 20288 + 20288 20373 20369 + 20370 20369 20373 + 20374 20370 20373 + 20371 20370 20374 + 20292 20373 20288 + 20373 20292 20296 + 20296 20305 20373 + 20373 20305 20374 + 20304 20374 20305 + 20374 20304 10796 + 10796 20375 20374 + 20374 20375 20371 + 20371 20375 20376 + 20376 20377 20371 + 20377 20378 20371 + 20372 20371 20378 + 20378 20379 20372 + 20368 20372 20379 + 20375 10796 10795 + 10795 20376 20375 + 10800 20376 10795 + 20376 10800 20380 + 20380 20377 20376 + 20380 20381 20377 + 20377 20381 20382 + 20382 20378 20377 + 20382 20379 20378 + 20379 20382 20383 + 20383 20384 20379 + 20379 20384 20368 + 20380 10800 10799 + 10799 20385 20380 + 20381 20380 20385 + 20385 20386 20381 + 20381 20386 20387 + 20387 20383 20381 + 20383 20382 20381 + 10804 20385 10799 + 20385 10804 10809 + 10809 20386 20385 + 20386 10809 20388 + 20388 20387 20386 + 20387 20388 20389 + 20389 20390 20387 + 20387 20390 20391 + 20391 20383 20387 + 20384 20383 20391 + 20392 20388 10809 + 20389 20388 20392 + 20392 20393 20389 + 20389 20393 20394 + 20394 20395 20389 + 20390 20389 20395 + 20395 20396 20390 + 20391 20390 20396 + 10809 10808 20392 + 10814 20392 10808 + 20392 10814 20397 + 20397 20393 20392 + 20393 20397 20398 + 20398 20394 20393 + 20394 20398 20399 + 20399 20400 20394 + 20394 20400 20401 + 20401 20395 20394 + 20396 20395 20401 + 20397 10814 10813 + 10813 20402 20397 + 20397 20402 20403 + 20403 20398 20397 + 20399 20398 20403 + 20403 20404 20399 + 20399 20404 20405 + 20405 20406 20399 + 20400 20399 20406 + 10821 20402 10813 + 20402 10821 20407 + 20407 20403 20402 + 20403 20407 20408 + 20408 20404 20403 + 20404 20408 20409 + 20409 20405 20404 + 20410 20407 10821 + 20408 20407 20410 + 20410 20411 20408 + 20408 20411 20412 + 20412 20409 20408 + 20413 20409 20412 + 20405 20409 20413 + 10821 10825 20410 + 10830 20410 10825 + 20410 10830 10838 + 10838 20411 20410 + 20411 10838 20414 + 20414 20412 20411 + 20412 20414 20415 + 20415 20416 20412 + 20412 20416 20413 + 20417 20414 10838 + 20415 20414 20417 + 20417 20418 20415 + 20415 20418 20419 + 20419 20420 20415 + 20416 20415 20420 + 20420 20421 20416 + 20413 20416 20421 + 10838 10837 20417 + 20422 20417 10837 + 20417 20422 20423 + 20423 20418 20417 + 20418 20423 20424 + 20424 20419 20418 + 10837 10836 20422 + 10847 20422 10836 + 20423 20422 10847 + 10847 19834 20423 + 20423 19834 19833 + 19833 20424 20423 + 19839 20424 19833 + 20419 20424 19839 + 19839 19844 20419 + 20419 19844 20425 + 20425 20420 20419 + 20421 20420 20425 + 19829 19834 10847 + 10847 10846 19829 + 20425 19844 19843 + 19843 20426 20425 + 20427 20425 20426 + 20425 20427 20421 + 20421 20427 20428 + 20428 20429 20421 + 20421 20429 20413 + 19848 20426 19843 + 20430 20426 19848 + 20426 20430 20427 + 20428 20427 20430 + 20430 20431 20428 + 20432 20428 20431 + 20428 20432 20433 + 20433 20429 20428 + 20429 20433 20434 + 20434 20413 20429 + 20413 20434 20405 + 19848 19857 20430 + 20430 19857 20435 + 20435 20431 20430 + 20436 20431 20435 + 20431 20436 20432 + 20437 20432 20436 + 20433 20432 20437 + 20437 20438 20433 + 20433 20438 20439 + 20439 20434 20433 + 20405 20434 20439 + 20439 20406 20405 + 20435 19857 19856 + 19856 20440 20435 + 20441 20435 20440 + 20435 20441 20436 + 20436 20441 20442 + 20442 20443 20436 + 20436 20443 20437 + 19861 20440 19856 + 20444 20440 19861 + 20440 20444 20441 + 20442 20441 20444 + 20444 20445 20442 + 20446 20442 20445 + 20442 20446 20447 + 20447 20443 20442 + 20443 20447 20448 + 20448 20437 20443 + 19861 20449 20444 + 20444 20449 20450 + 20450 20445 20444 + 20451 20445 20450 + 20445 20451 20446 + 20452 20446 20451 + 20447 20446 20452 + 20449 19861 19866 + 19866 20453 20449 + 20450 20449 20453 + 20453 20454 20450 + 20455 20450 20454 + 20450 20455 20451 + 20451 20455 20456 + 20456 20457 20451 + 20451 20457 20452 + 20453 19866 19865 + 19865 20458 20453 + 20453 20458 20459 + 20459 20454 20453 + 20460 20454 20459 + 20454 20460 20455 + 20456 20455 20460 + 20458 19865 19874 + 19874 20461 20458 + 20459 20458 20461 + 20461 20462 20459 + 20463 20459 20462 + 20459 20463 20460 + 20460 20463 20134 + 20134 20464 20460 + 20460 20464 20456 + 20461 19874 19873 + 19873 20465 20461 + 20461 20465 20466 + 20466 20462 20461 + 20130 20462 20466 + 20462 20130 20463 + 20134 20463 20130 + 20465 19873 19882 + 19882 20467 20465 + 20466 20465 20467 + 20467 20125 20466 + 20124 20466 20125 + 20466 20124 20130 + 20467 19882 19881 + 19881 20468 20467 + 20467 20468 20116 + 20116 20125 20467 + 20468 19881 19890 + 19890 20112 20468 + 20116 20468 20112 + 20112 19890 19889 + 20138 20464 20134 + 20464 20138 20469 + 20469 20456 20464 + 20456 20469 20470 + 20470 20457 20456 + 20457 20470 20471 + 20471 20452 20457 + 20143 20469 20138 + 20470 20469 20143 + 20143 20472 20470 + 20470 20472 20473 + 20473 20471 20470 + 20474 20471 20473 + 20452 20471 20474 + 20474 20475 20452 + 20452 20475 20447 + 20147 20472 20143 + 20472 20147 20476 + 20476 20473 20472 + 20473 20476 20477 + 20477 20478 20473 + 20473 20478 20474 + 20474 20478 20479 + 20479 20480 20474 + 20475 20474 20480 + 20476 20147 20146 + 20146 20481 20476 + 20477 20476 20481 + 20481 20482 20477 + 20483 20477 20482 + 20478 20477 20483 + 20483 20479 20478 + 20151 20481 20146 + 20482 20481 20151 + 20151 20484 20482 + 20482 20484 20485 + 20485 20486 20482 + 20482 20486 20483 + 20487 20483 20486 + 20479 20483 20487 + 20484 20151 20150 + 20150 20488 20484 + 20484 20488 20489 + 20489 20485 20484 + 20490 20485 20489 + 20485 20490 20491 + 20491 20486 20485 + 20486 20491 20487 + 20155 20488 20150 + 20488 20155 20492 + 20492 20489 20488 + 20489 20492 20343 + 20343 20359 20489 + 20489 20359 20490 + 20317 20492 20155 + 20343 20492 20317 + 20490 20359 20358 + 20358 20493 20490 + 20493 20494 20490 + 20491 20490 20494 + 20494 20495 20491 + 20491 20495 20496 + 20496 20487 20491 + 20497 20487 20496 + 20487 20497 20479 + 20364 20493 20358 + 20493 20364 20498 + 20498 20499 20493 + 20493 20499 20500 + 20500 20494 20493 + 20500 20495 20494 + 20495 20500 20501 + 20501 20496 20495 + 20502 20496 20501 + 20496 20502 20497 + 20498 20364 20363 + 20363 20503 20498 + 20498 20503 20504 + 20504 20505 20498 + 20499 20498 20505 + 20505 20506 20499 + 20500 20499 20506 + 20506 20501 20500 + 20507 20501 20506 + 20501 20507 20502 + 20368 20503 20363 + 20503 20368 20384 + 20384 20504 20503 + 20391 20504 20384 + 20504 20391 20508 + 20508 20505 20504 + 20505 20508 20509 + 20509 20506 20505 + 20506 20509 20507 + 20510 20507 20509 + 20502 20507 20510 + 20510 20511 20502 + 20502 20511 20512 + 20512 20497 20502 + 20479 20497 20512 + 20512 20480 20479 + 20396 20508 20391 + 20509 20508 20396 + 20396 20513 20509 + 20509 20513 20510 + 20514 20510 20513 + 20510 20514 20515 + 20515 20511 20510 + 20511 20515 20516 + 20516 20512 20511 + 20512 20516 20517 + 20517 20480 20512 + 20480 20517 20475 + 20401 20513 20396 + 20513 20401 20514 + 20518 20514 20401 + 20515 20514 20518 + 20518 20519 20515 + 20515 20519 20520 + 20520 20516 20515 + 20517 20516 20520 + 20520 20448 20517 + 20517 20448 20447 + 20447 20475 20517 + 20401 20400 20518 + 20406 20518 20400 + 20518 20406 20439 + 20439 20519 20518 + 20519 20439 20438 + 20438 20520 20519 + 20520 20438 20437 + 20437 20448 20520 + 19923 20083 19924 + 20083 19923 19929 + 19929 20084 20083 + 20084 19929 20521 + 20521 20075 20084 + 20075 20521 20522 + 20522 20076 20075 + 20076 20522 20523 + 20523 20067 20076 + 19933 20521 19929 + 20522 20521 19933 + 19933 20524 20522 + 20522 20524 20525 + 20525 20523 20522 + 20526 20523 20525 + 20067 20523 20526 + 20526 20068 20067 + 20068 20526 20527 + 20527 20063 20068 + 19937 20524 19933 + 20524 19937 20528 + 20528 20525 20524 + 20525 20528 20529 + 20529 20530 20525 + 20525 20530 20526 + 20526 20530 20531 + 20531 20527 20526 + 20532 20527 20531 + 20063 20527 20532 + 19941 20528 19937 + 20529 20528 19941 + 19941 20533 20529 + 20529 20533 20534 + 20534 20535 20529 + 20530 20529 20535 + 20535 20531 20530 + 20531 20535 20536 + 20536 20537 20531 + 20531 20537 20532 + 19945 20533 19941 + 20533 19945 20538 + 20538 20534 20533 + 20534 20538 20539 + 20539 20540 20534 + 20534 20540 20536 + 20536 20535 20534 + 20541 20538 19945 + 20539 20538 20541 + 20541 20542 20539 + 20543 20539 20542 + 20540 20539 20543 + 20543 20544 20540 + 20536 20540 20544 + 20544 20545 20536 + 20537 20536 20545 + 19945 19949 20541 + 19954 20541 19949 + 20542 20541 19954 + 19954 20546 20542 + 20542 20546 20547 + 20547 20548 20542 + 20542 20548 20543 + 20549 20543 20548 + 20544 20543 20549 + 20546 19954 20550 + 20550 20551 20546 + 20546 20551 20552 + 20552 20547 20546 + 20553 20547 20552 + 20548 20547 20553 + 20553 20554 20548 + 20548 20554 20549 + 19953 20550 19954 + 19959 20550 19953 + 20550 19959 19967 + 19967 20551 20550 + 20551 19967 20555 + 20555 20552 20551 + 20552 20555 20556 + 20556 20557 20552 + 20552 20557 20553 + 20553 20557 20558 + 20558 20559 20553 + 20554 20553 20559 + 20560 20555 19967 + 20556 20555 20560 + 20560 20561 20556 + 20562 20556 20561 + 20557 20556 20562 + 20562 20558 20557 + 19967 19966 20560 + 19972 20560 19966 + 20560 19972 20563 + 20563 20561 20560 + 20561 20563 20564 + 20564 20565 20561 + 20561 20565 20566 + 20566 20562 20561 + 20567 20562 20566 + 20558 20562 20567 + 20563 19972 19971 + 19971 10992 20563 + 20564 20563 10992 + 20568 20564 10992 + 20569 20564 20568 + 20569 20565 20564 + 20565 20569 20570 + 20570 20566 20565 + 20570 20571 20566 + 20566 20571 20567 + 19979 10992 19971 + 10992 19979 20572 + 20572 10985 10992 + 10985 20572 10986 + 10986 20572 20573 + 20573 20574 10986 + 20575 20574 20573 + 20572 19979 19984 + 20573 20572 19984 + 20576 20573 19984 + 20575 20573 20576 + 20576 20577 20575 + 20578 20577 20576 + 20578 20576 20579 + 20579 20580 20578 + 20578 20580 11030 + 20579 20576 19984 + 19984 19994 20579 + 20581 20579 19994 + 20580 20579 20581 + 20580 20581 20582 + 20582 11030 20580 + 20583 11030 20582 + 11030 20583 20584 + 20584 11023 11030 + 11024 11023 20584 + 19994 19993 20581 + 20581 19993 19992 + 19992 20582 20581 + 20583 20582 19992 + 19992 20585 20583 + 20583 20585 20586 + 20586 20584 20583 + 20587 20585 19992 + 20585 20587 20588 + 20588 20586 20585 + 19992 20002 20587 + 20587 20002 20589 + 20589 20590 20587 + 20588 20587 20590 + 20590 20591 20588 + 20591 20592 20588 + 20593 20588 20592 + 20588 20593 20594 + 20006 20589 20002 + 20595 20589 20006 + 20589 20595 20596 + 20596 20590 20589 + 20590 20596 20597 + 20597 20591 20590 + 20006 20014 20595 + 10991 20568 10992 + 20598 20568 10991 + 20599 20568 20598 + 20568 20599 20569 + 20569 20599 20600 + 20600 20570 20569 + 20571 20570 20600 + 10991 10996 20598 + 20601 20598 10996 + 20599 20598 20601 + 20601 20602 20599 + 20599 20602 20600 + 20603 20601 10996 + 20604 20601 20603 + 20604 20602 20601 + 20602 20604 20605 + 20605 20606 20602 + 20602 20606 20600 + 20607 20603 10996 + 20608 20603 20607 + 20608 20609 20603 + 20603 20609 20604 + 20604 20609 20610 + 20605 20604 20610 + 20611 20607 10996 + 20612 20607 20611 + 20612 20613 20607 + 20607 20613 20608 + 20608 20613 20614 + 20614 20615 20608 + 20609 20608 20615 + 20615 20610 20609 + 11000 20611 10996 + 20616 20611 11000 + 20616 20617 20611 + 20611 20617 20612 + 20612 20617 20618 + 20619 20612 20618 + 20613 20612 20619 + 20619 20614 20613 + 11000 11006 20616 + 20616 11006 20620 + 20621 20616 20620 + 20617 20616 20621 + 20621 20622 20617 + 20617 20622 20618 + 11005 20620 11006 + 20620 11005 11004 + 20620 11004 20623 + 20623 20624 20620 + 20620 20624 20621 + 20625 20621 20624 + 20621 20625 20622 + 20622 20625 20626 + 20626 20618 20622 + 11010 20623 11004 + 20627 20623 11010 + 20623 20627 20624 + 20624 20627 20625 + 20625 20627 20628 + 20628 20626 20625 + 20629 20626 20628 + 20618 20626 20629 + 11010 20630 20627 + 20627 20630 20628 + 20631 20628 20630 + 20632 20628 20631 + 20628 20632 20629 + 20629 20632 20633 + 20634 20629 20633 + 20618 20629 20634 + 20630 11010 11016 + 11016 20635 20630 + 20630 20635 20631 + 20631 20635 20532 + 20532 20537 20631 + 20545 20631 20537 + 20631 20545 20632 + 20632 20545 20544 + 20544 20633 20632 + 20635 11016 20636 + 20636 20532 20635 + 20532 20636 20063 + 20063 20636 20054 + 20054 20636 11016 + 20549 20633 20544 + 20633 20549 20637 + 20637 20638 20633 + 20633 20638 20639 + 20639 20634 20633 + 20640 20634 20639 + 20634 20640 20641 + 20634 20641 20618 + 20637 20549 20554 + 20642 20637 20554 + 20643 20637 20642 + 20638 20637 20643 + 20643 20644 20638 + 20638 20644 20645 + 20645 20639 20638 + 20646 20639 20645 + 20639 20646 20640 + 20647 20642 20554 + 20648 20642 20647 + 20649 20642 20648 + 20642 20649 20643 + 20643 20649 20650 + 20650 20651 20643 + 20644 20643 20651 + 20554 20652 20647 + 20653 20647 20652 + 20647 20653 20654 + 20647 20654 20648 + 20648 20654 20655 + 20656 20648 20655 + 20649 20648 20656 + 20656 20650 20649 + 20559 20652 20554 + 20652 20559 20657 + 20652 20657 20653 + 20653 20657 20658 + 20659 20653 20658 + 20654 20653 20659 + 20659 20655 20654 + 20657 20559 20558 + 20558 20658 20657 + 20567 20658 20558 + 20658 20567 20660 + 20660 20661 20658 + 20658 20661 20662 + 20662 20663 20658 + 20663 20659 20658 + 20664 20659 20663 + 20659 20664 20655 + 20665 20660 20567 + 20666 20660 20665 + 20661 20660 20666 + 20661 20666 20667 + 20667 20668 20661 + 20661 20668 20662 + 20567 20571 20665 + 20600 20665 20571 + 20669 20665 20600 + 20665 20669 20666 + 20666 20669 20670 + 20670 20671 20666 + 20671 20667 20666 + 20672 20667 20671 + 20672 20668 20667 + 20668 20672 20673 + 20673 20662 20668 + 20669 20600 20674 + 20674 20670 20669 + 20675 20670 20674 + 20670 20675 20676 + 20676 20671 20670 + 20677 20671 20676 + 20671 20677 20672 + 20672 20677 20678 + 20678 20673 20672 + 20606 20674 20600 + 20675 20674 20606 + 20606 20679 20675 + 20675 20679 20680 + 20676 20675 20680 + 20680 20681 20676 + 20677 20676 20681 + 20681 20678 20677 + 20682 20678 20681 + 20678 20682 20683 + 20683 20673 20678 + 20673 20683 20662 + 20605 20679 20606 + 20679 20605 20684 + 20684 20680 20679 + 20685 20680 20684 + 20680 20685 20686 + 20686 20681 20680 + 20681 20686 20682 + 20682 20686 20687 + 20687 20688 20682 + 20683 20682 20688 + 20610 20684 20605 + 20689 20684 20610 + 20684 20689 20685 + 20685 20689 20690 + 20690 20691 20685 + 20685 20691 20687 + 20687 20686 20685 + 20610 20692 20689 + 20690 20689 20692 + 20692 20693 20690 + 20694 20690 20693 + 20690 20694 20695 + 20695 20691 20690 + 20691 20695 20696 + 20696 20687 20691 + 20697 20692 20610 + 20692 20697 20698 + 20698 20693 20692 + 20693 20698 20699 + 20699 20700 20693 + 20693 20700 20694 + 20610 20615 20697 + 20697 20615 20614 + 20614 20701 20697 + 20698 20697 20701 + 20701 20702 20698 + 20699 20698 20702 + 20702 20703 20699 + 20699 20703 20646 + 20646 20704 20699 + 20700 20699 20704 + 20614 20619 20701 + 20701 20619 20705 + 20705 20702 20701 + 20702 20705 20703 + 20703 20705 20641 + 20641 20640 20703 + 20703 20640 20646 + 20705 20619 20618 + 20618 20641 20705 + 20013 20706 20014 + 20706 20013 20012 + 20707 20706 20012 + 20706 20707 20708 + 20709 20706 20708 + 20708 20710 20709 + 20710 20711 20709 + 20596 20711 20710 + 20018 20707 20012 + 20023 20707 20018 + 20707 20023 20712 + 20712 20708 20707 + 20708 20712 20713 + 20708 20713 20714 + 20714 20710 20708 + 20710 20714 20591 + 20591 20597 20710 + 20710 20597 20596 + 20028 20712 20023 + 20713 20712 20028 + 20028 20033 20713 + 20714 20713 20033 + 20715 20714 20033 + 20591 20714 20715 + 20715 20592 20591 + 20592 20715 20716 + 20592 20716 20593 + 20033 20717 20715 + 20716 20715 20717 + 20717 20718 20716 + 20593 20716 20718 + 20718 20719 20593 + 20719 20720 20593 + 20720 20721 20593 + 20594 20593 20721 + 20038 20717 20033 + 20717 20038 20718 + 20718 20038 20037 + 20037 20719 20718 + 20037 20036 20719 + 20719 20036 20041 + 20041 20720 20719 + 20041 11025 20720 + 20720 11025 11024 + 11024 20721 20720 + 20584 20721 11024 + 20721 20584 20594 + 20704 20722 20700 + 20722 20704 20723 + 20722 20723 20724 + 20724 20725 20722 + 20722 20725 20694 + 20694 20700 20722 + 20723 20704 20646 + 20646 20645 20723 + 20723 20645 20644 + 20644 20724 20723 + 20651 20724 20644 + 20724 20651 20726 + 20726 20725 20724 + 20725 20726 20695 + 20695 20694 20725 + 20726 20651 20650 + 20650 20727 20726 + 20695 20726 20727 + 20696 20695 20727 + 20727 20728 20696 + 20729 20696 20728 + 20687 20696 20729 + 20729 20688 20687 + 20727 20650 20656 + 20727 20656 20730 + 20730 20728 20727 + 20731 20728 20730 + 20728 20731 20729 + 20732 20729 20731 + 20688 20729 20732 + 20732 20733 20688 + 20688 20733 20683 + 20662 20683 20733 + 20655 20730 20656 + 20731 20730 20655 + 20655 20664 20731 + 20731 20664 20732 + 20663 20732 20664 + 20732 20663 20733 + 20733 20663 20662 + 8578 20734 8572 + 20735 20734 8578 + 20736 20734 20735 + 20734 20736 20737 + 20737 8572 20734 + 8573 8572 20737 + 8578 20738 20735 + 20735 20738 20739 + 20740 20735 20739 + 20735 20740 20736 + 20738 8578 8577 + 8577 20741 20738 + 20738 20741 20742 + 20742 20739 20738 + 20739 20742 20743 + 20743 20744 20739 + 20739 20744 20740 + 20741 8577 20745 + 20745 20746 20741 + 20742 20741 20746 + 20746 20747 20742 + 20743 20742 20747 + 20748 20745 8577 + 20749 20745 20748 + 20746 20745 20749 + 20749 20750 20746 + 20746 20750 20751 + 20751 20747 20746 + 20752 20747 20751 + 20747 20752 20743 + 20753 20748 8577 + 20754 20748 20753 + 20748 20754 20755 + 20755 20756 20748 + 20748 20756 20749 + 8577 8576 20753 + 20757 20753 8576 + 20757 20758 20753 + 20753 20758 20754 + 20754 20758 20759 + 20759 20760 20754 + 20755 20754 20760 + 8576 8563 20757 + 8562 20757 8563 + 20757 8562 20759 + 20758 20757 20759 + 20759 8562 8561 + 20759 8561 20761 + 20761 20760 20759 + 20762 20760 20761 + 20760 20762 20755 + 20755 20762 20763 + 20763 20764 20755 + 20756 20755 20764 + 20764 20765 20756 + 20749 20756 20765 + 20766 20761 8561 + 20767 20761 20766 + 20761 20767 20762 + 20762 20767 20768 + 20768 20763 20762 + 20769 20763 20768 + 20763 20769 20770 + 20770 20764 20763 + 20764 20770 20765 + 8561 8560 20766 + 8560 20771 20766 + 20772 20766 20771 + 20766 20772 20773 + 20773 20774 20766 + 20766 20774 20767 + 20767 20774 20775 + 20775 20768 20767 + 20769 20768 20775 + 8575 20771 8560 + 20771 8575 20776 + 20771 20776 20772 + 20777 20772 20776 + 20773 20772 20777 + 20777 20778 20773 + 20779 20773 20778 + 20774 20773 20779 + 20779 20780 20774 + 20774 20780 20775 + 20776 8575 8574 + 8574 20781 20776 + 20776 20781 20777 + 20782 20777 20781 + 20777 20782 20783 + 20783 20778 20777 + 20778 20783 20784 + 20784 20785 20778 + 20778 20785 20779 + 20786 20781 8574 + 20781 20786 20782 + 20782 20786 20787 + 20787 20788 20782 + 20783 20782 20788 + 20788 20789 20783 + 20784 20783 20789 + 8574 20790 20786 + 20786 20790 20791 + 20791 20787 20786 + 20787 20791 20792 + 20792 20793 20787 + 20787 20793 20794 + 20794 20788 20787 + 20789 20788 20794 + 20790 8574 20795 + 20795 20796 20790 + 20790 20796 20797 + 20797 20791 20790 + 20792 20791 20797 + 8573 20795 8574 + 20798 20795 8573 + 20795 20798 20796 + 20796 20798 20799 + 20799 20797 20796 + 20797 20799 20800 + 20800 20801 20797 + 20797 20801 20792 + 8573 20737 20798 + 20798 20737 20736 + 20799 20798 20736 + 20736 20802 20799 + 20800 20799 20802 + 20802 20803 20800 + 20800 20803 20804 + 20804 20805 20800 + 20801 20800 20805 + 20805 20806 20801 + 20792 20801 20806 + 20807 20802 20736 + 20803 20802 20807 + 20808 20803 20807 + 20803 20808 20809 + 20809 20804 20803 + 20736 20740 20807 + 20810 20807 20740 + 20808 20807 20810 + 20810 20811 20808 + 20808 20811 20812 + 20812 20809 20808 + 20813 20809 20812 + 20804 20809 20813 + 20740 20744 20810 + 20814 20810 20744 + 20810 20814 20815 + 20815 20811 20810 + 20811 20815 20816 + 20816 20812 20811 + 20812 20816 20817 + 20817 20818 20812 + 20812 20818 20813 + 20744 20743 20814 + 20819 20814 20743 + 20815 20814 20819 + 20819 20820 20815 + 20815 20820 20821 + 20821 20816 20815 + 20817 20816 20821 + 20743 20752 20819 + 20822 20819 20752 + 20819 20822 20823 + 20823 20820 20819 + 20820 20823 20824 + 20824 20821 20820 + 20821 20824 20825 + 20825 20826 20821 + 20821 20826 20817 + 20752 20827 20822 + 20828 20822 20827 + 20823 20822 20828 + 20828 20829 20823 + 20823 20829 20830 + 20830 20824 20823 + 20825 20824 20830 + 20751 20827 20752 + 20827 20751 20831 + 20831 20832 20827 + 20827 20832 20828 + 20833 20828 20832 + 20828 20833 20834 + 20834 20829 20828 + 20829 20834 20835 + 20835 20830 20829 + 20836 20831 20751 + 20837 20831 20836 + 20831 20837 20832 + 20832 20837 20833 + 20833 20837 20838 + 20839 20833 20838 + 20834 20833 20839 + 20751 20750 20836 + 20840 20836 20750 + 20836 20840 20841 + 20841 20838 20836 + 20836 20838 20837 + 20750 20749 20840 + 20842 20840 20749 + 20841 20840 20842 + 20842 20843 20841 + 20841 20843 20844 + 20844 20845 20841 + 20838 20841 20845 + 20765 20842 20749 + 20846 20842 20765 + 20846 20843 20842 + 20843 20846 20847 + 20847 20844 20843 + 20848 20844 20847 + 20844 20848 20849 + 20849 20845 20844 + 20845 20849 20850 + 20845 20850 20838 + 20765 20770 20846 + 20846 20770 20769 + 20769 20851 20846 + 20851 20847 20846 + 20848 20847 20851 + 20851 20852 20848 + 20848 20852 20853 + 20849 20848 20853 + 20853 20854 20849 + 20850 20849 20854 + 20854 20855 20850 + 20838 20850 20855 + 20855 20839 20838 + 20775 20851 20769 + 20851 20775 20852 + 20852 20775 20780 + 20780 20856 20852 + 20852 20856 20853 + 20785 20853 20856 + 20853 20785 20784 + 20853 20784 20857 + 20857 20854 20853 + 20855 20854 20857 + 20855 20857 20858 + 20858 20839 20855 + 20856 20780 20779 + 20856 20779 20785 + 20858 20857 20784 + 20789 20858 20784 + 20859 20858 20789 + 20839 20858 20859 + 20859 20860 20839 + 20839 20860 20834 + 20834 20860 20861 + 20861 20835 20834 + 20789 20862 20859 + 20859 20862 20863 + 20863 20864 20859 + 20860 20859 20864 + 20864 20861 20860 + 20794 20862 20789 + 20862 20794 20865 + 20865 20863 20862 + 20863 20865 20866 + 20866 20867 20863 + 20863 20867 20868 + 20868 20864 20863 + 20861 20864 20868 + 20869 20865 20794 + 20866 20865 20869 + 20869 20870 20866 + 20866 20870 20871 + 20871 20872 20866 + 20867 20866 20872 + 20872 20873 20867 + 20868 20867 20873 + 20794 20793 20869 + 20874 20869 20793 + 20869 20874 20875 + 20875 20870 20869 + 20870 20875 20876 + 20876 20871 20870 + 20793 20792 20874 + 20806 20874 20792 + 20875 20874 20806 + 20806 20877 20875 + 20875 20877 20878 + 20878 20876 20875 + 20879 20876 20878 + 20871 20876 20879 + 20879 20880 20871 + 20871 20880 20881 + 20881 20872 20871 + 20873 20872 20881 + 20882 20877 20806 + 20877 20882 20883 + 20883 20878 20877 + 20878 20883 20884 + 20884 20885 20878 + 20878 20885 20879 + 20806 20805 20882 + 20882 20805 20804 + 20804 20886 20882 + 20882 20886 20887 + 20887 20883 20882 + 20884 20883 20887 + 20887 20888 20884 + 20884 20888 20889 + 20889 20890 20884 + 20885 20884 20890 + 20813 20886 20804 + 20886 20813 20891 + 20891 20887 20886 + 20887 20891 20892 + 20892 20888 20887 + 20888 20892 20893 + 20893 20889 20888 + 20894 20891 20813 + 20892 20891 20894 + 20894 20895 20892 + 20892 20895 20896 + 20896 20893 20892 + 20897 20893 20896 + 20889 20893 20897 + 20813 20818 20894 + 20898 20894 20818 + 20894 20898 20899 + 20899 20895 20894 + 20895 20899 20900 + 20900 20896 20895 + 20896 20900 20901 + 20901 20902 20896 + 20896 20902 20897 + 20818 20817 20898 + 20903 20898 20817 + 20899 20898 20903 + 20903 20904 20899 + 20899 20904 20905 + 20905 20900 20899 + 20901 20900 20905 + 20905 20906 20901 + 20907 20901 20906 + 20902 20901 20907 + 20817 20826 20903 + 20908 20903 20826 + 20903 20908 20909 + 20909 20904 20903 + 20904 20909 20910 + 20910 20905 20904 + 20906 20905 20910 + 20911 20906 20910 + 20907 20906 20911 + 20826 20825 20908 + 20912 20908 20825 + 20909 20908 20912 + 20912 20913 20909 + 20909 20913 20914 + 20914 20910 20909 + 20911 20910 20914 + 20914 20915 20911 + 20916 20911 20915 + 20916 20907 20911 + 20825 20917 20912 + 20918 20912 20917 + 20912 20918 20919 + 20919 20913 20912 + 20913 20919 20920 + 20920 20914 20913 + 20915 20914 20920 + 20921 20915 20920 + 20916 20915 20921 + 20830 20917 20825 + 20922 20917 20830 + 20917 20922 20918 + 20923 20918 20922 + 20919 20918 20923 + 20923 20924 20919 + 20919 20924 20925 + 20925 20920 20919 + 20921 20920 20925 + 20830 20835 20922 + 20922 20835 20861 + 20861 20926 20922 + 20922 20926 20923 + 20927 20923 20926 + 20923 20927 20928 + 20928 20924 20923 + 20924 20928 20929 + 20929 20925 20924 + 20930 20925 20929 + 20925 20930 20921 + 20868 20926 20861 + 20926 20868 20927 + 20873 20927 20868 + 20928 20927 20873 + 20873 20931 20928 + 20928 20931 20932 + 20932 20929 20928 + 20933 20929 20932 + 20933 20930 20929 + 20934 20930 20933 + 20934 20921 20930 + 20934 20916 20921 + 20907 20916 20934 + 20881 20931 20873 + 20931 20881 20935 + 20935 20932 20931 + 20936 20932 20935 + 20932 20936 20933 + 20933 20936 20937 + 20937 20934 20933 + 20934 20937 20938 + 20938 20907 20934 + 20907 20938 20902 + 20938 20897 20902 + 20939 20935 20881 + 20940 20935 20939 + 20940 20936 20935 + 20937 20936 20940 + 20941 20937 20940 + 20937 20941 20938 + 20881 20880 20939 + 20942 20939 20880 + 20939 20942 20943 + 20943 20944 20939 + 20939 20944 20940 + 20941 20940 20944 + 20945 20941 20944 + 20941 20945 20938 + 20880 20879 20942 + 20946 20942 20879 + 20943 20942 20946 + 20946 20947 20943 + 20945 20943 20947 + 20944 20943 20945 + 20879 20885 20946 + 20890 20946 20885 + 20946 20890 20948 + 20948 20947 20946 + 20947 20948 20949 + 20949 20945 20947 + 20945 20949 20938 + 20938 20949 20950 + 20950 20897 20938 + 20897 20950 20889 + 20889 20950 20948 + 20948 20890 20889 + 20949 20948 20950 + 8554 8487 8550 + 8488 8487 8554 + 8554 20951 8488 + 8489 8488 20951 + 20951 20952 8489 + 8482 8489 20952 + 20952 20953 8482 + 20953 8478 8482 + 8554 8553 20951 + 20951 8553 20954 + 20954 20952 20951 + 20953 20952 20954 + 20953 20954 20955 + 20955 8478 20953 + 20955 8472 8478 + 8472 20955 8473 + 8473 20955 20954 + 20954 8553 8473 + 8493 8550 8487 + 8498 8550 8493 + 8550 8498 20956 + 20956 8551 8550 + 8551 20956 20957 + 20957 20958 8551 + 8551 20958 8545 + 20959 20956 8498 + 20957 20956 20959 + 20959 20960 20957 + 20957 20960 20961 + 20961 20962 20957 + 20958 20957 20962 + 20962 20963 20958 + 8545 20958 20963 + 20963 8546 8545 + 8498 8497 20959 + 20964 20959 8497 + 20959 20964 20965 + 20965 20960 20959 + 20960 20965 20966 + 20966 20961 20960 + 8497 8496 20964 + 8507 20964 8496 + 20965 20964 8507 + 8507 20967 20965 + 20965 20967 20968 + 20968 20966 20965 + 20969 20966 20968 + 20961 20966 20969 + 20969 20970 20961 + 20961 20970 20971 + 20971 20962 20961 + 20963 20962 20971 + 8510 20967 8507 + 20967 8510 20972 + 20972 20968 20967 + 20968 20972 20973 + 20973 20974 20968 + 20968 20974 20969 + 20969 20974 20975 + 20975 20976 20969 + 20970 20969 20976 + 8515 20972 8510 + 20973 20972 8515 + 8515 20977 20973 + 20973 20977 20978 + 20978 20979 20973 + 20974 20973 20979 + 20979 20975 20974 + 8520 20977 8515 + 20977 8520 20980 + 20980 20978 20977 + 20978 20980 20981 + 20981 20982 20978 + 20978 20982 20983 + 20983 20979 20978 + 20975 20979 20983 + 20984 20980 8520 + 20981 20980 20984 + 20984 20985 20981 + 20981 20985 20986 + 20986 20987 20981 + 20982 20981 20987 + 20987 20988 20982 + 20983 20982 20988 + 8520 8519 20984 + 8525 20984 8519 + 20984 8525 20989 + 20989 20985 20984 + 20985 20989 20990 + 20990 20986 20985 + 20986 20990 20991 + 20991 20992 20986 + 20986 20992 20993 + 20993 20987 20986 + 20988 20987 20993 + 20989 8525 8524 + 8524 20994 20989 + 20989 20994 20995 + 20995 20990 20989 + 20991 20990 20995 + 20995 20996 20991 + 20991 20996 20997 + 20991 20997 20998 + 20992 20991 20998 + 20993 20992 20998 + 8534 20994 8524 + 20994 8534 20999 + 20999 20995 20994 + 20995 20999 21000 + 21000 20996 20995 + 20996 21000 20997 + 21000 21001 20997 + 20998 20997 21001 + 21002 20998 21001 + 20993 20998 21002 + 21003 20993 21002 + 20993 21003 20988 + 21004 20999 8534 + 21000 20999 21004 + 21004 21005 21000 + 21000 21005 21001 + 21006 21001 21005 + 21001 21006 21007 + 21007 21002 21001 + 8534 21008 21004 + 21009 21004 21008 + 21004 21009 21010 + 21010 21005 21004 + 21005 21010 21006 + 21006 21010 21011 + 21012 21006 21011 + 21006 21012 21007 + 8533 21008 8534 + 21013 21008 8533 + 21008 21013 21009 + 21014 21009 21013 + 21010 21009 21014 + 21014 21011 21010 + 21015 21011 21014 + 21011 21015 21012 + 21015 21016 21012 + 21007 21012 21016 + 8533 8538 21013 + 21013 8538 21017 + 21017 21018 21013 + 21013 21018 21014 + 21019 21014 21018 + 21014 21019 21015 + 21015 21019 21020 + 21020 21016 21015 + 21021 21016 21020 + 21016 21021 21007 + 21017 8538 8537 + 8537 21022 21017 + 21023 21017 21022 + 21017 21023 21024 + 21024 21018 21017 + 21018 21024 21019 + 21020 21019 21024 + 21024 21025 21020 + 21026 21020 21025 + 21020 21026 21021 + 8542 21022 8537 + 21027 21022 8542 + 21022 21027 21023 + 21028 21023 21027 + 21024 21023 21028 + 21028 21025 21024 + 21029 21025 21028 + 21025 21029 21026 + 21030 21026 21029 + 21021 21026 21030 + 21030 21031 21021 + 21021 21031 21007 + 8542 8546 21027 + 21027 8546 20963 + 20963 21032 21027 + 21027 21032 21028 + 21033 21028 21032 + 21028 21033 21029 + 21029 21033 21034 + 21034 21035 21029 + 21029 21035 21030 + 20971 21032 20963 + 21032 20971 21033 + 21034 21033 20971 + 20971 20970 21034 + 20976 21034 20970 + 21034 20976 21036 + 21036 21035 21034 + 21035 21036 21037 + 21037 21030 21035 + 21030 21037 21038 + 21038 21031 21030 + 21031 21038 21039 + 21039 21007 21031 + 21007 21039 21002 + 21036 20976 20975 + 20975 21040 21036 + 21036 21040 21041 + 21041 21037 21036 + 21038 21037 21041 + 21041 21042 21038 + 21038 21042 21039 + 21042 21043 21039 + 21043 21002 21039 + 21043 21003 21002 + 20988 21003 21043 + 20983 21040 20975 + 21040 20983 21044 + 21044 21041 21040 + 21041 21044 21043 + 21043 21042 21041 + 20988 21044 20983 + 21043 21044 20988 + 21045 8403 8406 + 8403 21045 21046 + 21046 21047 8403 + 8404 8403 21047 + 21047 8405 8404 + 21045 8406 21048 + 21048 21049 21045 + 21045 21049 21050 + 21050 21046 21045 + 21051 21046 21050 + 21047 21046 21051 + 21048 8406 8359 + 8359 8358 21048 + 21048 8358 8357 + 21052 21048 8357 + 21048 21052 21053 + 21053 21049 21048 + 21050 21049 21053 + 21054 21050 21053 + 21050 21054 21055 + 21055 21056 21050 + 21050 21056 21051 + 21057 21052 8357 + 21053 21052 21057 + 21057 21058 21053 + 21053 21058 21059 + 21059 21054 21053 + 21055 21054 21059 + 8362 21057 8357 + 21057 8362 21060 + 21060 21058 21057 + 21058 21060 21061 + 21061 21059 21058 + 21059 21061 21062 + 21062 21063 21059 + 21059 21063 21055 + 21060 8362 8361 + 8361 21064 21060 + 21060 21064 21065 + 21065 21061 21060 + 21062 21061 21065 + 21065 21066 21062 + 21062 21066 21067 + 21067 21068 21062 + 21063 21062 21068 + 21069 21064 8361 + 21064 21069 21070 + 21070 21065 21064 + 21065 21070 21071 + 21071 21066 21065 + 21066 21071 21072 + 21072 21067 21066 + 8361 8365 21069 + 21069 8365 21073 + 21073 21074 21069 + 21070 21069 21074 + 21074 21075 21070 + 21071 21070 21075 + 21075 21076 21071 + 21072 21071 21076 + 8370 21073 8365 + 21077 21073 8370 + 21074 21073 21077 + 21077 21078 21074 + 21074 21078 21079 + 21079 21075 21074 + 21076 21075 21079 + 8370 21080 21077 + 21077 21080 21081 + 21081 21082 21077 + 21078 21077 21082 + 21082 21083 21078 + 21079 21078 21083 + 21084 21080 8370 + 21080 21084 21085 + 21085 21081 21080 + 21081 21085 21086 + 21086 21087 21081 + 21081 21087 21088 + 21088 21082 21081 + 21083 21082 21088 + 8370 8369 21084 + 21084 8369 21089 + 21089 21090 21084 + 21084 21090 21091 + 21091 21085 21084 + 21086 21085 21091 + 8368 21089 8369 + 21092 21089 8368 + 21089 21092 21093 + 21093 21090 21089 + 21090 21093 21094 + 21094 21091 21090 + 21091 21094 21095 + 21095 21096 21091 + 21091 21096 21086 + 8368 21097 21092 + 21092 21097 21098 + 21098 21099 21092 + 21099 21100 21092 + 21093 21092 21100 + 8374 21097 8368 + 21097 8374 21101 + 21101 21098 21097 + 21102 21098 21101 + 21098 21102 21103 + 21103 21099 21098 + 21104 21099 21103 + 21099 21104 21105 + 21105 21100 21099 + 21106 21101 8374 + 21102 21101 21106 + 21106 21107 21102 + 21103 21102 21107 + 21107 21108 21103 + 21108 21109 21103 + 21109 21110 21103 + 21104 21103 21110 + 8379 21106 8374 + 21111 21106 8379 + 21107 21106 21111 + 21107 21111 21112 + 21112 21108 21107 + 21113 21108 21112 + 21108 21113 21114 + 21114 21109 21108 + 8379 8384 21111 + 21111 8384 21115 + 21115 21112 21111 + 21113 21112 21115 + 21115 21116 21113 + 21114 21113 21116 + 21116 21117 21114 + 21117 21118 21114 + 21119 21114 21118 + 21119 21109 21114 + 8384 21120 21115 + 21120 21121 21115 + 21121 21122 21115 + 21123 21115 21122 + 21116 21115 21123 + 21116 21123 21124 + 21124 21117 21116 + 8383 21120 8384 + 21120 8383 21125 + 21120 21125 21121 + 21125 21126 21121 + 21126 21127 21121 + 21122 21121 21127 + 21128 21122 21127 + 21129 21122 21128 + 21122 21129 21123 + 21125 8383 8389 + 21125 8389 21130 + 21130 21126 21125 + 21127 21126 21130 + 21130 21131 21127 + 21128 21127 21131 + 8389 8388 21130 + 8388 21132 21130 + 21131 21130 21132 + 21131 21132 21133 + 21131 21133 21128 + 21133 21134 21128 + 21128 21134 21135 + 21136 21128 21135 + 21128 21136 21129 + 8388 8395 21132 + 8395 21137 21132 + 21132 21137 21133 + 21138 21133 21137 + 21134 21133 21138 + 21139 21134 21138 + 21135 21134 21139 + 21140 21137 8395 + 21137 21140 21138 + 21141 21138 21140 + 21139 21138 21141 + 21141 21142 21139 + 21135 21139 21142 + 21142 21143 21135 + 21135 21143 21144 + 21135 21144 21136 + 8395 8394 21140 + 21145 21140 8394 + 21145 21141 21140 + 21141 21145 21146 + 21147 21141 21146 + 21141 21147 21142 + 21147 21148 21142 + 21143 21142 21148 + 21148 21149 21143 + 21144 21143 21149 + 8394 8400 21145 + 21146 21145 8400 + 8400 21150 21146 + 21151 21146 21150 + 21147 21146 21151 + 21151 21152 21147 + 21148 21147 21152 + 21153 21148 21152 + 21149 21148 21153 + 8400 8399 21150 + 8399 8405 21150 + 21150 8405 21047 + 21047 21154 21150 + 21150 21154 21151 + 21155 21151 21154 + 21151 21155 21156 + 21156 21152 21151 + 21157 21152 21156 + 21152 21157 21153 + 21051 21154 21047 + 21154 21051 21155 + 21155 21051 21056 + 21158 21155 21056 + 21155 21158 21159 + 21156 21155 21159 + 21160 21156 21159 + 21160 21157 21156 + 21160 21161 21157 + 21157 21161 21162 + 21162 21153 21157 + 21056 21055 21158 + 21055 21163 21158 + 21159 21158 21163 + 21164 21159 21163 + 21164 21160 21159 + 21164 21165 21160 + 21165 21161 21160 + 21161 21165 21166 + 21166 21162 21161 + 21167 21163 21055 + 21167 21164 21163 + 21164 21167 21168 + 21168 21165 21164 + 21165 21168 21169 + 21169 21166 21165 + 21166 21169 21170 + 21170 21171 21166 + 21166 21171 21162 + 21172 21167 21055 + 21168 21167 21172 + 21172 21173 21168 + 21168 21173 21174 + 21174 21169 21168 + 21170 21169 21174 + 21055 21063 21172 + 21068 21172 21063 + 21172 21068 21175 + 21175 21173 21172 + 21173 21175 21176 + 21176 21174 21173 + 21174 21176 21177 + 21177 21178 21174 + 21174 21178 21170 + 21175 21068 21067 + 21067 21179 21175 + 21175 21179 21180 + 21180 21176 21175 + 21177 21176 21180 + 21180 21181 21177 + 21177 21181 21182 + 21182 21183 21177 + 21178 21177 21183 + 21184 21179 21067 + 21179 21184 21185 + 21185 21180 21179 + 21180 21185 21186 + 21186 21181 21180 + 21181 21186 21187 + 21187 21182 21181 + 21067 21072 21184 + 21184 21072 21188 + 21188 21189 21184 + 21185 21184 21189 + 21189 21190 21185 + 21186 21185 21190 + 21190 21191 21186 + 21187 21186 21191 + 21076 21188 21072 + 21192 21188 21076 + 21189 21188 21192 + 21192 21193 21189 + 21189 21193 21194 + 21194 21190 21189 + 21191 21190 21194 + 21076 21195 21192 + 21192 21195 21196 + 21196 21197 21192 + 21197 21198 21192 + 21198 21199 21192 + 21193 21192 21199 + 21079 21195 21076 + 21195 21079 21200 + 21200 21196 21195 + 21196 21200 21201 + 21201 21202 21196 + 21196 21202 21203 + 21203 21197 21196 + 21083 21200 21079 + 21201 21200 21083 + 21083 21204 21201 + 21201 21204 21205 + 21205 21206 21201 + 21202 21201 21206 + 21206 21207 21202 + 21203 21202 21207 + 21088 21204 21083 + 21204 21088 21208 + 21208 21205 21204 + 21205 21208 21209 + 21209 21210 21205 + 21205 21210 21211 + 21211 21206 21205 + 21207 21206 21211 + 21212 21208 21088 + 21209 21208 21212 + 21212 21213 21209 + 21209 21213 21214 + 21214 21215 21209 + 21210 21209 21215 + 21215 21216 21210 + 21211 21210 21216 + 21088 21087 21212 + 21217 21212 21087 + 21212 21217 21218 + 21218 21213 21212 + 21213 21218 21219 + 21219 21214 21213 + 21087 21086 21217 + 21220 21217 21086 + 21218 21217 21220 + 21220 21221 21218 + 21218 21221 21222 + 21222 21219 21218 + 21223 21219 21222 + 21214 21219 21223 + 21086 21096 21220 + 21224 21220 21096 + 21220 21224 21225 + 21225 21221 21220 + 21221 21225 21226 + 21226 21222 21221 + 21222 21226 21227 + 21227 21228 21222 + 21222 21228 21223 + 21096 21095 21224 + 21229 21224 21095 + 21225 21224 21229 + 21229 21230 21225 + 21225 21230 21231 + 21231 21226 21225 + 21227 21226 21231 + 21231 21232 21227 + 21227 21232 21233 + 21228 21227 21233 + 21095 21234 21229 + 21235 21229 21234 + 21229 21235 21236 + 21236 21230 21229 + 21230 21236 21237 + 21237 21231 21230 + 21231 21237 21238 + 21238 21232 21231 + 21233 21232 21238 + 21239 21234 21095 + 21240 21234 21239 + 21234 21240 21235 + 21241 21235 21240 + 21236 21235 21241 + 21241 21242 21236 + 21236 21242 21243 + 21243 21237 21236 + 21238 21237 21243 + 21095 21094 21239 + 21239 21094 21093 + 21093 21244 21239 + 21245 21239 21244 + 21239 21245 21240 + 21240 21245 21246 + 21246 21247 21240 + 21240 21247 21241 + 21100 21244 21093 + 21248 21244 21100 + 21244 21248 21245 + 21246 21245 21248 + 21249 21246 21248 + 21250 21246 21249 + 21246 21250 21251 + 21251 21247 21246 + 21247 21251 21252 + 21252 21241 21247 + 21100 21105 21248 + 21248 21105 21253 + 21253 21254 21248 + 21248 21254 21255 + 21255 21249 21248 + 21253 21105 21104 + 21104 21256 21253 + 21257 21253 21256 + 21253 21257 21258 + 21258 21254 21253 + 21254 21258 21259 + 21259 21255 21254 + 21110 21256 21104 + 21256 21110 21260 + 21260 21261 21256 + 21256 21261 21257 + 21257 21261 21262 + 21262 21263 21257 + 21258 21257 21263 + 21260 21110 21109 + 21109 21119 21260 + 21264 21260 21119 + 21261 21260 21264 + 21264 21262 21261 + 21262 21264 21265 + 21265 21266 21262 + 21262 21266 21267 + 21267 21263 21262 + 21119 21268 21264 + 21265 21264 21268 + 21268 21269 21265 + 21265 21269 21270 + 21270 21271 21265 + 21266 21265 21271 + 21271 21272 21266 + 21267 21266 21272 + 21118 21268 21119 + 21269 21268 21118 + 21269 21118 21117 + 21117 21273 21269 + 21269 21273 21270 + 21274 21270 21273 + 21270 21274 21275 + 21270 21275 21276 + 21276 21271 21270 + 21276 21272 21271 + 21273 21117 21124 + 21273 21124 21274 + 21274 21124 21123 + 21277 21274 21123 + 21274 21277 21278 + 21275 21274 21278 + 21275 21278 21279 + 21276 21275 21279 + 21280 21276 21279 + 21272 21276 21280 + 21123 21129 21277 + 21281 21277 21129 + 21278 21277 21281 + 21278 21281 21282 + 21278 21282 21279 + 21129 21283 21281 + 21283 21284 21281 + 21284 21285 21281 + 21281 21285 21282 + 21285 21286 21282 + 21282 21286 21287 + 21287 21279 21282 + 21136 21283 21129 + 21283 21136 21144 + 21144 21284 21283 + 21288 21284 21144 + 21284 21288 21286 + 21286 21285 21284 + 21288 21144 21149 + 21288 21149 21289 + 21287 21288 21289 + 21287 21286 21288 + 21153 21289 21149 + 21290 21289 21153 + 21289 21290 21291 + 21291 21287 21289 + 21287 21291 21279 + 21279 21291 21292 + 21292 21293 21279 + 21279 21293 21280 + 21153 21162 21290 + 21171 21290 21162 + 21290 21171 21292 + 21292 21291 21290 + 21294 21292 21171 + 21292 21294 21295 + 21295 21293 21292 + 21293 21295 21296 + 21296 21280 21293 + 21297 21280 21296 + 21280 21297 21272 + 21171 21170 21294 + 21298 21294 21170 + 21295 21294 21298 + 21298 21299 21295 + 21295 21299 21300 + 21300 21296 21295 + 21301 21296 21300 + 21296 21301 21297 + 21170 21178 21298 + 21183 21298 21178 + 21298 21183 21299 + 21299 21183 21182 + 21182 21300 21299 + 21302 21300 21182 + 21300 21302 21301 + 21301 21302 21303 + 21303 21304 21301 + 21297 21301 21304 + 21304 21305 21297 + 21272 21297 21305 + 21305 21267 21272 + 21187 21302 21182 + 21302 21187 21306 + 21306 21303 21302 + 21303 21306 21307 + 21307 21308 21303 + 21303 21308 21309 + 21309 21304 21303 + 21305 21304 21309 + 21191 21306 21187 + 21307 21306 21191 + 21191 21310 21307 + 21307 21310 21311 + 21311 21312 21307 + 21308 21307 21312 + 21312 21313 21308 + 21309 21308 21313 + 21194 21310 21191 + 21310 21194 21314 + 21314 21311 21310 + 21311 21314 21315 + 21315 21316 21311 + 21311 21316 21317 + 21317 21312 21311 + 21313 21312 21317 + 21318 21314 21194 + 21315 21314 21318 + 21318 21319 21315 + 21315 21319 21320 + 21320 21321 21315 + 21316 21315 21321 + 21321 21322 21316 + 21317 21316 21322 + 21194 21193 21318 + 21199 21318 21193 + 21318 21199 21323 + 21323 21319 21318 + 21319 21323 21324 + 21324 21320 21319 + 21320 21324 21325 + 21325 21326 21320 + 21320 21326 21327 + 21327 21321 21320 + 21322 21321 21327 + 21323 21199 21198 + 21198 21328 21323 + 21323 21328 21329 + 21329 21324 21323 + 21325 21324 21329 + 21329 21330 21325 + 21325 21330 21331 + 21331 21332 21325 + 21326 21325 21332 + 21333 21328 21198 + 21328 21333 21334 + 21334 21329 21328 + 21329 21334 21335 + 21335 21330 21329 + 21330 21335 21336 + 21336 21331 21330 + 21198 21337 21333 + 21333 21337 21338 + 21338 21339 21333 + 21333 21339 21340 + 21340 21334 21333 + 21335 21334 21340 + 21337 21198 21197 + 21197 21341 21337 + 21337 21341 21338 + 21341 21342 21338 + 21343 21338 21342 + 21338 21343 21344 + 21344 21339 21338 + 21339 21344 21345 + 21345 21340 21339 + 21341 21197 21203 + 21203 21346 21341 + 21341 21346 21347 + 21347 21342 21341 + 21348 21342 21347 + 21342 21348 21343 + 21349 21343 21348 + 21344 21343 21349 + 21346 21203 21350 + 21350 21351 21346 + 21347 21346 21351 + 21351 21352 21347 + 21353 21347 21352 + 21347 21353 21348 + 21207 21350 21203 + 21354 21350 21207 + 21351 21350 21354 + 21354 21355 21351 + 21351 21355 21356 + 21356 21352 21351 + 21357 21352 21356 + 21352 21357 21353 + 21251 21353 21357 + 21348 21353 21251 + 21207 21358 21354 + 21354 21358 21359 + 21359 21360 21354 + 21355 21354 21360 + 21360 21361 21355 + 21356 21355 21361 + 21211 21358 21207 + 21358 21211 21362 + 21362 21359 21358 + 21359 21362 21363 + 21363 21364 21359 + 21359 21364 21365 + 21365 21360 21359 + 21361 21360 21365 + 21216 21362 21211 + 21363 21362 21216 + 21216 21366 21363 + 21367 21363 21366 + 21367 21368 21363 + 21368 21364 21363 + 21368 21365 21364 + 21368 21369 21365 + 21369 21370 21365 + 21365 21370 21361 + 21371 21366 21216 + 21366 21371 21372 + 21372 21367 21366 + 21367 21372 21373 + 21368 21367 21373 + 21369 21368 21373 + 21216 21215 21371 + 21371 21215 21214 + 21214 21374 21371 + 21372 21371 21374 + 21373 21372 21374 + 21374 21223 21373 + 21373 21223 21228 + 21233 21373 21228 + 21373 21233 21369 + 21223 21374 21214 + 21251 21250 21348 + 21349 21348 21250 + 21249 21349 21250 + 21375 21349 21249 + 21349 21375 21344 + 21344 21375 21376 + 21376 21345 21344 + 21377 21345 21376 + 21340 21345 21377 + 21378 21375 21249 + 21375 21378 21379 + 21379 21376 21375 + 21380 21376 21379 + 21376 21380 21377 + 21378 21249 21255 + 21255 21381 21378 + 21378 21381 21382 + 21382 21379 21378 + 21383 21379 21382 + 21383 21380 21379 + 21380 21383 21384 + 21384 21385 21380 + 21377 21380 21385 + 21386 21381 21255 + 21381 21386 21387 + 21387 21382 21381 + 21382 21387 21388 + 21388 21389 21382 + 21382 21389 21383 + 21383 21389 21390 + 21390 21384 21383 + 21255 21259 21386 + 21386 21259 21391 + 21391 21392 21386 + 21386 21392 21393 + 21393 21387 21386 + 21388 21387 21393 + 21391 21259 21258 + 21258 21394 21391 + 21395 21391 21394 + 21391 21395 21396 + 21396 21392 21391 + 21392 21396 21397 + 21397 21393 21392 + 21263 21394 21258 + 21398 21394 21263 + 21394 21398 21395 + 21399 21395 21398 + 21396 21395 21399 + 21399 21400 21396 + 21396 21400 21401 + 21401 21397 21396 + 21402 21397 21401 + 21393 21397 21402 + 21263 21267 21398 + 21398 21267 21305 + 21305 21403 21398 + 21398 21403 21399 + 21404 21399 21403 + 21399 21404 21405 + 21405 21400 21399 + 21400 21405 21406 + 21406 21401 21400 + 21309 21403 21305 + 21403 21309 21404 + 21313 21404 21309 + 21405 21404 21313 + 21313 21407 21405 + 21405 21407 21408 + 21408 21406 21405 + 21409 21406 21408 + 21401 21406 21409 + 21409 21410 21401 + 21401 21410 21402 + 21317 21407 21313 + 21407 21317 21411 + 21411 21408 21407 + 21408 21411 21412 + 21412 21413 21408 + 21408 21413 21409 + 21409 21413 21414 + 21414 21415 21409 + 21410 21409 21415 + 21322 21411 21317 + 21412 21411 21322 + 21322 21416 21412 + 21412 21416 21417 + 21417 21418 21412 + 21413 21412 21418 + 21418 21414 21413 + 21327 21416 21322 + 21416 21327 21419 + 21419 21417 21416 + 21417 21419 21420 + 21420 21421 21417 + 21417 21421 21422 + 21422 21418 21417 + 21422 21414 21418 + 21423 21419 21327 + 21420 21419 21423 + 21423 21424 21420 + 21425 21420 21424 + 21421 21420 21425 + 21425 21426 21421 + 21426 21422 21421 + 21327 21326 21423 + 21332 21423 21326 + 21423 21332 21427 + 21427 21424 21423 + 21424 21427 21428 + 21428 21425 21424 + 21425 21428 21429 + 21426 21425 21429 + 21430 21426 21429 + 21426 21430 21422 + 21430 21431 21422 + 21422 21431 21414 + 21427 21332 21331 + 21331 21432 21427 + 21428 21427 21432 + 21429 21428 21432 + 21432 21433 21429 + 21429 21433 21434 + 21435 21429 21434 + 21429 21435 21430 + 21433 21432 21331 + 21331 21336 21433 + 21433 21336 21436 + 21436 21434 21433 + 21437 21434 21436 + 21434 21437 21435 + 21437 21438 21435 + 21435 21438 21439 + 21440 21435 21439 + 21435 21440 21430 + 21436 21336 21335 + 21335 21441 21436 + 21442 21436 21441 + 21436 21442 21437 + 21437 21442 21385 + 21385 21438 21437 + 21439 21438 21385 + 21340 21441 21335 + 21377 21441 21340 + 21441 21377 21442 + 21385 21442 21377 + 21439 21385 21384 + 21439 21384 21390 + 21390 21443 21439 + 21440 21439 21443 + 21440 21443 21444 + 21445 21440 21444 + 21440 21445 21430 + 21444 21443 21390 + 21390 21446 21444 + 21444 21446 21447 + 21447 21448 21444 + 21445 21444 21448 + 21445 21448 21449 + 21450 21445 21449 + 21445 21450 21430 + 21446 21390 21389 + 21389 21388 21446 + 21447 21446 21388 + 21388 21451 21447 + 21452 21447 21451 + 21448 21447 21452 + 21449 21448 21452 + 21449 21452 21453 + 21453 21454 21449 + 21450 21449 21454 + 21430 21450 21454 + 21454 21455 21430 + 21430 21455 21431 + 21393 21451 21388 + 21402 21451 21393 + 21451 21402 21452 + 21453 21452 21402 + 21402 21410 21453 + 21415 21453 21410 + 21453 21415 21455 + 21455 21454 21453 + 21455 21415 21414 + 21414 21431 21455 + 21357 21252 21251 + 21456 21252 21357 + 21241 21252 21456 + 21456 21242 21241 + 21242 21456 21457 + 21457 21243 21242 + 21357 21458 21456 + 21456 21458 21459 + 21459 21457 21456 + 21460 21457 21459 + 21243 21457 21460 + 21460 21461 21243 + 21243 21461 21238 + 21356 21458 21357 + 21458 21356 21462 + 21462 21459 21458 + 21459 21462 21463 + 21463 21464 21459 + 21459 21464 21460 + 21465 21460 21464 + 21465 21466 21460 + 21466 21461 21460 + 21466 21238 21461 + 21466 21233 21238 + 21361 21462 21356 + 21463 21462 21361 + 21361 21370 21463 + 21369 21463 21370 + 21464 21463 21369 + 21369 21465 21464 + 21466 21465 21369 + 21233 21466 21369 + 21467 8348 8351 + 8348 21467 21468 + 21468 8349 8348 + 21469 8349 21468 + 8349 21469 8342 + 8342 21469 8343 + 21470 21467 8351 + 21467 21470 21471 + 21467 21471 21472 + 21472 21473 21467 + 21473 21468 21467 + 21470 8351 21474 + 21474 21475 21470 + 21476 21470 21475 + 21470 21476 21471 + 21477 21471 21476 + 21471 21477 21478 + 21478 21472 21471 + 8350 21474 8351 + 21474 8350 21479 + 21480 21474 21479 + 21474 21480 21475 + 21481 21475 21480 + 21475 21481 21482 + 21476 21475 21482 + 21483 21476 21482 + 21476 21483 21477 + 21479 8350 42 + 42 21484 21479 + 21479 21484 21485 + 21485 21486 21479 + 21486 21487 21479 + 21487 21480 21479 + 21487 21481 21480 + 21488 21481 21487 + 21481 21488 21482 + 21484 42 8320 + 8320 21489 21484 + 21484 21489 21490 + 21485 21484 21490 + 21490 21491 21485 + 21492 21485 21491 + 21486 21485 21492 + 21486 21492 21488 + 21488 21487 21486 + 21489 8320 21493 + 21489 21493 21494 + 21494 21490 21489 + 21490 21494 21495 + 21490 21495 21496 + 21496 21491 21490 + 21497 21491 21496 + 21491 21497 21492 + 21488 21492 21497 + 21493 8320 8319 + 8319 21498 21493 + 21493 21498 21499 + 21499 21494 21493 + 21495 21494 21499 + 21499 21500 21495 + 21496 21495 21500 + 21501 21496 21500 + 21497 21496 21501 + 8319 21502 21498 + 21498 21502 21503 + 21503 21504 21498 + 21498 21504 21499 + 21505 21499 21504 + 21499 21505 21500 + 21502 8319 8318 + 8318 21506 21502 + 21502 21506 21507 + 21507 21503 21502 + 21508 21503 21507 + 21504 21503 21508 + 21504 21508 21505 + 21505 21508 21509 + 21509 21510 21505 + 21500 21505 21510 + 8318 8317 21506 + 21506 8317 21511 + 21511 21512 21506 + 21506 21512 21507 + 21511 8317 8316 + 8316 21513 21511 + 21513 21514 21511 + 21514 21515 21511 + 21516 21511 21515 + 21511 21516 21512 + 8324 21513 8316 + 21517 21513 8324 + 21513 21517 21518 + 21518 21514 21513 + 21518 21519 21514 + 21514 21519 21520 + 21520 21515 21514 + 21520 21521 21515 + 21515 21521 21516 + 21517 8324 8323 + 8323 21522 21517 + 21517 21522 21523 + 21523 21518 21517 + 21519 21518 21523 + 21523 21524 21519 + 21519 21524 21525 + 21525 21526 21519 + 21526 21520 21519 + 21521 21520 21526 + 21522 8323 8329 + 21522 8329 21527 + 21527 21528 21522 + 21522 21528 21523 + 8335 21527 8329 + 21529 21527 8335 + 21528 21527 21529 + 21528 21529 21530 + 21530 21531 21528 + 21528 21531 21523 + 8335 8344 21529 + 8344 21532 21529 + 21532 21533 21529 + 21533 21530 21529 + 21530 21533 21534 + 21535 21530 21534 + 21531 21530 21535 + 21536 21532 8344 + 21532 21536 21537 + 21537 21538 21532 + 21532 21538 21533 + 21538 21539 21533 + 21539 21534 21533 + 8344 8343 21536 + 21469 21536 8343 + 21536 21469 21540 + 21537 21536 21540 + 21537 21540 21541 + 21542 21537 21541 + 21538 21537 21542 + 21542 21543 21538 + 21539 21538 21543 + 21544 21539 21543 + 21534 21539 21544 + 21540 21469 21468 + 21541 21540 21468 + 21473 21541 21468 + 21473 21545 21541 + 21541 21545 21546 + 21546 21542 21541 + 21542 21546 21547 + 21547 21543 21542 + 21543 21547 21548 + 21548 21544 21543 + 21549 21544 21548 + 21544 21549 21534 + 21535 21534 21549 + 21473 21550 21545 + 21545 21550 21551 + 21551 21552 21545 + 21545 21552 21553 + 21553 21546 21545 + 21547 21546 21553 + 21553 21554 21547 + 21548 21547 21554 + 21550 21473 21472 + 21472 21555 21550 + 21551 21550 21555 + 21555 21556 21551 + 21557 21551 21556 + 21557 21552 21551 + 21552 21557 21558 + 21558 21553 21552 + 21553 21558 21559 + 21559 21554 21553 + 21472 21478 21555 + 21555 21478 21560 + 21560 21556 21555 + 21556 21560 21561 + 21562 21556 21561 + 21556 21562 21557 + 21557 21562 21563 + 21558 21557 21563 + 21564 21558 21563 + 21559 21558 21564 + 21560 21478 21565 + 21561 21560 21565 + 21565 21566 21561 + 21567 21561 21566 + 21562 21561 21567 + 21567 21563 21562 + 21568 21563 21567 + 21563 21568 21569 + 21569 21564 21563 + 21478 21477 21565 + 21570 21565 21477 + 21566 21565 21570 + 21570 21571 21566 + 21566 21571 21572 + 21572 21573 21566 + 21566 21573 21567 + 21574 21567 21573 + 21567 21574 21568 + 21477 21483 21570 + 21570 21483 21575 + 21575 21576 21570 + 21571 21570 21576 + 21576 21577 21571 + 21572 21571 21577 + 21482 21575 21483 + 21578 21575 21482 + 21575 21578 21579 + 21579 21576 21575 + 21577 21576 21579 + 21579 21580 21577 + 21577 21580 21581 + 21581 21582 21577 + 21577 21582 21572 + 21488 21578 21482 + 21579 21578 21488 + 21583 21579 21488 + 21580 21579 21583 + 21583 21584 21580 + 21581 21580 21584 + 21584 21585 21581 + 21586 21581 21585 + 21581 21586 21582 + 21582 21586 21587 + 21587 21572 21582 + 21488 21497 21583 + 21497 21588 21583 + 21589 21583 21588 + 21583 21589 21590 + 21590 21584 21583 + 21584 21590 21591 + 21591 21585 21584 + 21592 21585 21591 + 21585 21592 21586 + 21501 21588 21497 + 21501 21593 21588 + 21588 21593 21589 + 21589 21593 21594 + 21595 21589 21594 + 21590 21589 21595 + 21595 21596 21590 + 21591 21590 21596 + 21593 21501 21597 + 21597 21594 21593 + 21594 21597 21510 + 21510 21598 21594 + 21594 21598 21599 + 21599 21600 21594 + 21594 21600 21595 + 21500 21597 21501 + 21510 21597 21500 + 21598 21510 21509 + 21509 21601 21598 + 21599 21598 21601 + 21601 21602 21599 + 21603 21599 21602 + 21600 21599 21603 + 21603 21604 21600 + 21600 21604 21605 + 21605 21595 21600 + 21596 21595 21605 + 21601 21509 21507 + 21507 21606 21601 + 21601 21606 21607 + 21607 21602 21601 + 21602 21607 21608 + 21608 21609 21602 + 21602 21609 21603 + 21507 21509 21508 + 21603 21609 21610 + 21611 21610 21609 + 21610 21611 21612 + 21612 21613 21610 + 21610 21613 21614 + 21614 21615 21610 + 21610 21615 21603 + 21604 21603 21615 + 21609 21608 21611 + 21616 21611 21608 + 21612 21611 21616 + 21616 21617 21612 + 21612 21617 21618 + 21618 21619 21612 + 21613 21612 21619 + 21619 21620 21613 + 21614 21613 21620 + 21621 21616 21608 + 21622 21616 21621 + 21616 21622 21623 + 21623 21617 21616 + 21617 21623 21624 + 21624 21618 21617 + 21625 21621 21608 + 21626 21621 21625 + 21627 21621 21626 + 21621 21627 21622 + 21627 21628 21622 + 21628 21629 21622 + 21623 21622 21629 + 21608 21630 21625 + 21631 21625 21630 + 21625 21631 21632 + 21632 21633 21625 + 21625 21633 21626 + 21634 21630 21608 + 21635 21630 21634 + 21630 21635 21631 + 21636 21631 21635 + 21632 21631 21636 + 21608 21607 21634 + 21634 21607 21606 + 21606 21637 21634 + 21638 21634 21637 + 21634 21638 21635 + 21635 21638 21639 + 21639 21640 21635 + 21635 21640 21636 + 21641 21637 21606 + 21641 21642 21637 + 21637 21642 21638 + 21638 21642 21521 + 21521 21639 21638 + 21526 21639 21521 + 21639 21526 21643 + 21643 21640 21639 + 21606 21507 21641 + 21512 21641 21507 + 21642 21641 21512 + 21512 21516 21642 + 21642 21516 21521 + 21643 21526 21525 + 21525 21644 21643 + 21643 21644 21645 + 21645 21646 21643 + 21640 21643 21646 + 21646 21636 21640 + 21636 21646 21647 + 21647 21648 21636 + 21636 21648 21632 + 21649 21644 21525 + 21644 21649 21650 + 21650 21645 21644 + 21645 21650 21651 + 21651 21652 21645 + 21645 21652 21647 + 21647 21646 21645 + 21525 21653 21649 + 21649 21653 21654 + 21654 21655 21649 + 21649 21655 21656 + 21656 21650 21649 + 21651 21650 21656 + 21653 21525 21524 + 21524 21657 21653 + 21654 21653 21657 + 21657 21658 21654 + 21659 21654 21658 + 21654 21659 21660 + 21660 21655 21654 + 21655 21660 21661 + 21661 21656 21655 + 21657 21524 21523 + 21523 21662 21657 + 21657 21662 21663 + 21663 21658 21657 + 21658 21663 21664 + 21664 21665 21658 + 21658 21665 21659 + 21666 21659 21665 + 21660 21659 21666 + 21662 21523 21667 + 21667 21668 21662 + 21662 21668 21669 + 21669 21663 21662 + 21664 21663 21669 + 21670 21667 21523 + 21671 21667 21670 + 21668 21667 21671 + 21671 21672 21668 + 21668 21672 21673 + 21673 21669 21668 + 21531 21670 21523 + 21674 21670 21531 + 21674 21675 21670 + 21670 21675 21671 + 21671 21675 21676 + 21676 21677 21671 + 21672 21671 21677 + 21677 21678 21672 + 21672 21678 21673 + 21531 21535 21674 + 21674 21535 21549 + 21675 21674 21549 + 21549 21676 21675 + 21676 21549 21548 + 21676 21548 21679 + 21679 21677 21676 + 21678 21677 21679 + 21679 21680 21678 + 21678 21680 21681 + 21681 21673 21678 + 21669 21673 21681 + 21681 21682 21669 + 21669 21682 21664 + 21679 21548 21554 + 21680 21679 21554 + 21554 21559 21680 + 21681 21680 21559 + 21559 21683 21681 + 21682 21681 21683 + 21683 21684 21682 + 21664 21682 21684 + 21684 21685 21664 + 21665 21664 21685 + 21564 21683 21559 + 21684 21683 21564 + 21564 21569 21684 + 21684 21569 21686 + 21686 21685 21684 + 21687 21685 21686 + 21685 21687 21665 + 21665 21687 21666 + 21686 21569 21568 + 21568 21688 21686 + 21689 21686 21688 + 21686 21689 21687 + 21687 21689 21690 + 21690 21666 21687 + 21666 21690 21691 + 21691 21692 21666 + 21666 21692 21660 + 21693 21688 21568 + 21694 21688 21693 + 21688 21694 21689 + 21689 21694 21695 + 21695 21690 21689 + 21691 21690 21695 + 21568 21574 21693 + 21693 21574 21696 + 21696 21697 21693 + 21698 21693 21697 + 21693 21698 21694 + 21694 21698 21699 + 21699 21695 21694 + 21573 21696 21574 + 21696 21573 21572 + 21572 21587 21696 + 21696 21587 21700 + 21700 21697 21696 + 21701 21697 21700 + 21697 21701 21698 + 21698 21701 21702 + 21702 21699 21698 + 21703 21699 21702 + 21695 21699 21703 + 21703 21704 21695 + 21695 21704 21691 + 21700 21587 21586 + 21586 21592 21700 + 21705 21700 21592 + 21700 21705 21701 + 21701 21705 21706 + 21706 21702 21701 + 21702 21706 21707 + 21707 21708 21702 + 21702 21708 21703 + 21592 21709 21705 + 21705 21709 21710 + 21710 21706 21705 + 21707 21706 21710 + 21710 21711 21707 + 21707 21711 21712 + 21712 21713 21707 + 21708 21707 21713 + 21591 21709 21592 + 21709 21591 21714 + 21714 21710 21709 + 21710 21714 21715 + 21715 21711 21710 + 21711 21715 21716 + 21716 21712 21711 + 21596 21714 21591 + 21715 21714 21596 + 21596 21717 21715 + 21715 21717 21718 + 21718 21716 21715 + 21719 21716 21718 + 21712 21716 21719 + 21719 21720 21712 + 21712 21720 21721 + 21721 21713 21712 + 21605 21717 21596 + 21717 21605 21722 + 21722 21718 21717 + 21718 21722 21723 + 21723 21724 21718 + 21718 21724 21719 + 21719 21724 21725 + 21725 21726 21719 + 21720 21719 21726 + 21727 21722 21605 + 21723 21722 21727 + 21727 21728 21723 + 21723 21728 21729 + 21729 21730 21723 + 21724 21723 21730 + 21730 21725 21724 + 21605 21604 21727 + 21615 21727 21604 + 21727 21615 21614 + 21614 21728 21727 + 21728 21614 21731 + 21731 21729 21728 + 21729 21731 21732 + 21732 21733 21729 + 21729 21733 21734 + 21734 21730 21729 + 21725 21730 21734 + 21620 21731 21614 + 21732 21731 21620 + 21620 21735 21732 + 21732 21735 21736 + 21736 21737 21732 + 21733 21732 21737 + 21737 21738 21733 + 21734 21733 21738 + 21739 21735 21620 + 21735 21739 21740 + 21740 21736 21735 + 21736 21740 21741 + 21741 21742 21736 + 21736 21742 21743 + 21743 21737 21736 + 21738 21737 21743 + 21620 21619 21739 + 21739 21619 21618 + 21618 21744 21739 + 21739 21744 21745 + 21745 21740 21739 + 21741 21740 21745 + 21745 21746 21741 + 21741 21746 21747 + 21742 21741 21747 + 21747 21748 21742 + 21743 21742 21748 + 21749 21744 21618 + 21744 21749 21750 + 21750 21745 21744 + 21745 21750 21751 + 21751 21746 21745 + 21746 21751 21752 + 21752 21747 21746 + 21747 21752 21753 + 21748 21747 21753 + 21618 21624 21749 + 21749 21624 21754 + 21754 21755 21749 + 21749 21755 21756 + 21756 21750 21749 + 21751 21750 21756 + 21756 21757 21751 + 21752 21751 21757 + 21758 21752 21757 + 21752 21758 21753 + 21754 21624 21623 + 21623 21759 21754 + 21760 21754 21759 + 21754 21760 21761 + 21761 21755 21754 + 21755 21761 21762 + 21762 21756 21755 + 21756 21762 21763 + 21763 21757 21756 + 21757 21763 21758 + 21629 21759 21623 + 21764 21759 21629 + 21759 21764 21760 + 21765 21760 21764 + 21761 21760 21765 + 21765 21766 21761 + 21761 21766 21767 + 21767 21762 21761 + 21763 21762 21767 + 21767 21768 21763 + 21763 21768 21758 + 21629 21769 21764 + 21764 21769 21770 + 21770 21771 21764 + 21764 21771 21765 + 21772 21765 21771 + 21765 21772 21773 + 21773 21766 21765 + 21774 21769 21629 + 21769 21774 21775 + 21775 21770 21769 + 21776 21770 21775 + 21770 21776 21777 + 21777 21771 21770 + 21771 21777 21772 + 21778 21772 21777 + 21773 21772 21778 + 21628 21774 21629 + 21774 21628 21779 + 21779 21780 21774 + 21774 21780 21781 + 21781 21775 21774 + 21782 21775 21781 + 21775 21782 21776 + 21779 21628 21627 + 21627 21783 21779 + 21779 21783 21784 + 21784 21785 21779 + 21780 21779 21785 + 21785 21786 21780 + 21781 21780 21786 + 21626 21783 21627 + 21783 21626 21787 + 21787 21784 21783 + 21784 21787 21788 + 21788 21789 21784 + 21784 21789 21790 + 21790 21785 21784 + 21786 21785 21790 + 21791 21787 21626 + 21788 21787 21791 + 21791 21792 21788 + 21788 21792 21793 + 21793 21794 21788 + 21789 21788 21794 + 21794 21795 21789 + 21790 21789 21795 + 21626 21633 21791 + 21796 21791 21633 + 21791 21796 21797 + 21797 21792 21791 + 21792 21797 21798 + 21798 21793 21792 + 21633 21632 21796 + 21799 21796 21632 + 21797 21796 21799 + 21799 21800 21797 + 21797 21800 21801 + 21801 21798 21797 + 21802 21798 21801 + 21793 21798 21802 + 21632 21648 21799 + 21803 21799 21648 + 21799 21803 21804 + 21804 21800 21799 + 21800 21804 21805 + 21805 21801 21800 + 21801 21805 21806 + 21806 21807 21801 + 21801 21807 21802 + 21648 21647 21803 + 21808 21803 21647 + 21804 21803 21808 + 21808 21809 21804 + 21804 21809 21810 + 21810 21805 21804 + 21806 21805 21810 + 21810 21811 21806 + 21806 21811 21812 + 21807 21806 21812 + 21647 21652 21808 + 21813 21808 21652 + 21808 21813 21814 + 21814 21809 21808 + 21809 21814 21815 + 21815 21810 21809 + 21810 21815 21816 + 21816 21811 21810 + 21811 21816 21817 + 21817 21812 21811 + 21652 21651 21813 + 21818 21813 21651 + 21814 21813 21818 + 21818 21819 21814 + 21814 21819 21820 + 21820 21815 21814 + 21816 21815 21820 + 21820 21821 21816 + 21816 21821 21817 + 21651 21822 21818 + 21823 21818 21822 + 21818 21823 21824 + 21824 21819 21818 + 21819 21824 21825 + 21825 21820 21819 + 21820 21825 21826 + 21826 21821 21820 + 21656 21822 21651 + 21827 21822 21656 + 21822 21827 21823 + 21828 21823 21827 + 21824 21823 21828 + 21828 21829 21824 + 21824 21829 21830 + 21830 21825 21824 + 21826 21825 21830 + 21656 21661 21827 + 21827 21661 21831 + 21831 21832 21827 + 21827 21832 21828 + 21833 21828 21832 + 21828 21833 21834 + 21834 21829 21828 + 21829 21834 21835 + 21835 21830 21829 + 21831 21661 21660 + 21660 21692 21831 + 21836 21831 21692 + 21831 21836 21837 + 21837 21832 21831 + 21832 21837 21833 + 21838 21833 21837 + 21834 21833 21838 + 21838 21839 21834 + 21834 21839 21840 + 21840 21835 21834 + 21692 21691 21836 + 21836 21691 21841 + 21841 21776 21836 + 21776 21782 21836 + 21837 21836 21782 + 21782 21842 21837 + 21837 21842 21838 + 21691 21704 21841 + 21843 21841 21704 + 21841 21843 21844 + 21844 21845 21841 + 21841 21845 21777 + 21777 21776 21841 + 21704 21703 21843 + 21846 21843 21703 + 21844 21843 21846 + 21846 21847 21844 + 21844 21847 21848 + 21848 21849 21844 + 21845 21844 21849 + 21849 21778 21845 + 21777 21845 21778 + 21703 21708 21846 + 21713 21846 21708 + 21846 21713 21721 + 21721 21847 21846 + 21847 21721 21850 + 21850 21848 21847 + 21848 21850 21851 + 21851 21852 21848 + 21848 21852 21853 + 21853 21849 21848 + 21778 21849 21853 + 21853 21854 21778 + 21778 21854 21773 + 21855 21850 21721 + 21851 21850 21855 + 21855 21856 21851 + 21851 21856 21857 + 21857 21858 21851 + 21852 21851 21858 + 21858 21859 21852 + 21853 21852 21859 + 21721 21720 21855 + 21726 21855 21720 + 21855 21726 21860 + 21860 21856 21855 + 21856 21860 21861 + 21861 21857 21856 + 21857 21861 21862 + 21862 21863 21857 + 21857 21863 21864 + 21864 21858 21857 + 21859 21858 21864 + 21860 21726 21725 + 21725 21865 21860 + 21860 21865 21866 + 21866 21861 21860 + 21862 21861 21866 + 21866 21867 21862 + 21862 21867 21868 + 21863 21862 21868 + 21868 21869 21863 + 21864 21863 21869 + 21734 21865 21725 + 21865 21734 21870 + 21870 21866 21865 + 21866 21870 21871 + 21871 21867 21866 + 21867 21871 21872 + 21872 21868 21867 + 21868 21872 21748 + 21869 21868 21748 + 21873 21869 21748 + 21864 21869 21873 + 21738 21870 21734 + 21871 21870 21738 + 21738 21874 21871 + 21871 21874 21872 + 21748 21872 21874 + 21874 21743 21748 + 21743 21874 21738 + 21753 21873 21748 + 21875 21873 21753 + 21875 21876 21873 + 21876 21864 21873 + 21864 21876 21859 + 21859 21876 21875 + 21875 21877 21859 + 21859 21877 21853 + 21854 21853 21877 + 21878 21875 21753 + 21875 21878 21879 + 21879 21877 21875 + 21877 21879 21854 + 21773 21854 21879 + 21879 21880 21773 + 21766 21773 21880 + 21880 21767 21766 + 21881 21878 21753 + 21879 21878 21881 + 21881 21880 21879 + 21767 21880 21881 + 21881 21768 21767 + 21768 21881 21758 + 21881 21753 21758 + 21781 21842 21782 + 21842 21781 21882 + 21882 21838 21842 + 21838 21882 21883 + 21883 21839 21838 + 21839 21883 21884 + 21884 21840 21839 + 21786 21882 21781 + 21883 21882 21786 + 21786 21885 21883 + 21883 21885 21886 + 21886 21884 21883 + 21887 21884 21886 + 21840 21884 21887 + 21887 21888 21840 + 21840 21888 21889 + 21889 21835 21840 + 21790 21885 21786 + 21885 21790 21890 + 21890 21886 21885 + 21886 21890 21891 + 21891 21892 21886 + 21886 21892 21887 + 21887 21892 21893 + 21888 21887 21893 + 21893 21894 21888 + 21889 21888 21894 + 21795 21890 21790 + 21891 21890 21795 + 21795 21895 21891 + 21891 21895 21896 + 21892 21891 21896 + 21896 21893 21892 + 21894 21893 21896 + 21897 21894 21896 + 21894 21897 21898 + 21898 21889 21894 + 21889 21898 21830 + 21830 21835 21889 + 21899 21895 21795 + 21895 21899 21900 + 21900 21896 21895 + 21896 21900 21817 + 21817 21897 21896 + 21897 21817 21821 + 21821 21826 21897 + 21826 21898 21897 + 21830 21898 21826 + 21795 21794 21899 + 21899 21794 21793 + 21793 21901 21899 + 21899 21901 21900 + 21902 21900 21901 + 21900 21902 21817 + 21902 21812 21817 + 21812 21902 21807 + 21902 21802 21807 + 21802 21901 21793 + 21901 21802 21902 + 8225 21903 8303 + 8232 21903 8225 + 21903 8232 21904 + 21904 21905 21903 + 8303 21903 21905 + 21905 21906 8303 + 8298 8303 21906 + 21906 8292 8298 + 8239 21904 8232 + 21907 21904 8239 + 21905 21904 21907 + 21907 21908 21905 + 21905 21908 21909 + 21909 21906 21905 + 8292 21906 21909 + 21909 8293 8292 + 8293 21909 21910 + 21910 8288 8293 + 8239 21911 21907 + 21907 21911 21912 + 21912 21913 21907 + 21908 21907 21913 + 21913 21914 21908 + 21909 21908 21914 + 21914 21910 21909 + 21915 21910 21914 + 8288 21910 21915 + 8243 21911 8239 + 21911 8243 21916 + 21916 21912 21911 + 21912 21916 21917 + 21917 21918 21912 + 21912 21918 21919 + 21919 21913 21912 + 21914 21913 21919 + 21919 21920 21914 + 21914 21920 21915 + 8247 21916 8243 + 21917 21916 8247 + 8247 21921 21917 + 21917 21921 21922 + 21922 21923 21917 + 21918 21917 21923 + 21923 21924 21918 + 21919 21918 21924 + 21924 21925 21919 + 21920 21919 21925 + 8252 21921 8247 + 21921 8252 21926 + 21926 21922 21921 + 21922 21926 21927 + 21922 21927 21928 + 21928 21923 21922 + 21923 21928 21929 + 21924 21923 21929 + 21924 21929 21930 + 21930 21925 21924 + 21926 8252 8251 + 21931 21926 8251 + 21932 21926 21931 + 21926 21932 21927 + 21927 21932 21933 + 21928 21927 21933 + 21928 21933 21934 + 21929 21928 21934 + 21930 21929 21934 + 21931 8251 8250 + 21935 21931 8250 + 21931 21935 21936 + 21931 21936 21932 + 21932 21936 21937 + 21932 21937 21933 + 21934 21933 21937 + 21938 21934 21937 + 21930 21934 21938 + 21939 21930 21938 + 21925 21930 21939 + 8262 21935 8250 + 21935 8262 21940 + 21941 21935 21940 + 21935 21941 21936 + 21936 21941 21937 + 21941 21942 21937 + 21937 21942 21943 + 21943 21938 21937 + 21944 21940 8262 + 21940 21944 21945 + 21945 21942 21940 + 21941 21940 21942 + 8262 8261 21944 + 21944 8261 21946 + 21945 21944 21946 + 21947 21945 21946 + 21945 21947 21943 + 21942 21945 21943 + 8261 8260 21946 + 21948 21946 8260 + 21946 21948 21947 + 21948 21949 21947 + 21943 21947 21949 + 21949 21950 21943 + 21950 21951 21943 + 21952 21943 21951 + 21943 21952 21938 + 8260 8266 21948 + 21948 8266 21949 + 8266 8270 21949 + 21950 21949 8270 + 8270 8274 21950 + 21950 8274 21951 + 8274 8278 21951 + 21953 21951 8278 + 21951 21953 21952 + 21953 21954 21952 + 21938 21952 21954 + 21954 21955 21938 + 21955 21939 21938 + 8278 21956 21953 + 21953 21956 21954 + 21956 21957 21954 + 21955 21954 21957 + 21957 21958 21955 + 21955 21958 21959 + 21959 21939 21955 + 21959 21925 21939 + 21925 21959 21920 + 21956 8278 8277 + 8277 8283 21956 + 21957 21956 8283 + 8283 21960 21957 + 21958 21957 21960 + 21960 21915 21958 + 21959 21958 21915 + 21915 21920 21959 + 8288 21960 8283 + 21915 21960 8288 + 7712 21961 7713 + 7712 21962 21961 + 21961 21962 3721 + 21961 3721 21963 + 7713 21961 21963 + 21962 7712 7711 + 7711 21964 21962 + 15495 21962 21964 + 21962 15495 3721 + 21965 21966 21967 + 21968 21966 21965 + 21966 21968 21969 + 21969 21970 21966 + 21971 21966 21970 + 21971 21972 21966 + 21967 21973 21965 + 21974 21965 21973 + 21975 21965 21974 + 21965 21975 21976 + 21976 21968 21965 + 21973 21967 21977 + 21978 21973 21977 + 21973 21978 21974 + 21979 21974 21978 + 21980 21974 21979 + 21974 21980 21975 + 21977 21967 21972 + 21972 21981 21977 + 21982 21977 21981 + 21982 21978 21977 + 21982 21983 21978 + 21983 21984 21978 + 21978 21984 21979 + 21981 21972 21985 + 21981 21985 21986 + 21986 21987 21981 + 21987 21982 21981 + 21987 21988 21982 + 21982 21988 21989 + 21983 21982 21989 + 21985 21972 21990 + 21985 21990 21991 + 21986 21985 21991 + 21992 21986 21991 + 21992 21993 21986 + 21994 21986 21993 + 21987 21986 21994 + 21988 21987 21994 + 21972 21971 21990 + 21971 21995 21990 + 21990 21995 21996 + 21996 21991 21990 + 21997 21991 21996 + 21991 21997 21998 + 21998 21992 21991 + 21995 21971 21970 + 21970 21999 21995 + 21996 21995 21999 + 21999 22000 21996 + 22001 21996 22000 + 21996 22001 21997 + 21999 21970 21969 + 21969 22002 21999 + 21999 22002 22003 + 22003 22000 21999 + 22004 22000 22003 + 22000 22004 22001 + 22005 22001 22004 + 21997 22001 22005 + 22002 21969 22006 + 22006 22007 22002 + 22002 22007 22008 + 22003 22002 22008 + 22008 22009 22003 + 22010 22003 22009 + 22003 22010 22004 + 22011 22006 21969 + 22006 22011 22012 + 22013 22006 22012 + 22007 22006 22013 + 22007 22013 22014 + 22014 22008 22007 + 21969 21968 22011 + 22015 22011 21968 + 22012 22011 22015 + 22016 22012 22015 + 22013 22012 22016 + 22013 22016 22014 + 22016 22017 22014 + 22018 22014 22017 + 22008 22014 22018 + 21968 21976 22015 + 22019 22015 21976 + 22019 22016 22015 + 22020 22016 22019 + 22016 22020 22021 + 22021 22017 22016 + 22017 22021 22022 + 22022 22023 22017 + 22017 22023 22018 + 22024 22019 21976 + 22025 22019 22024 + 22019 22025 22020 + 22026 22024 21976 + 22027 22024 22026 + 22024 22027 22025 + 22025 22027 22028 + 22028 22029 22025 + 22020 22025 22029 + 21976 22030 22026 + 22026 22030 22031 + 22031 22032 22026 + 22027 22026 22032 + 22032 22028 22027 + 22028 22032 22033 + 22028 22033 22034 + 22028 22034 22029 + 21975 22030 21976 + 22030 21975 22035 + 22035 22031 22030 + 22036 22031 22035 + 22031 22036 22033 + 22033 22032 22031 + 21975 21980 22035 + 21980 22037 22035 + 22038 22035 22037 + 22035 22038 22036 + 22036 22038 22039 + 22033 22036 22039 + 22040 22033 22039 + 22034 22033 22040 + 22041 22037 21980 + 22037 22041 22042 + 22037 22042 22038 + 22043 22038 22042 + 22038 22043 22039 + 22044 22039 22043 + 22039 22044 22045 + 22045 22040 22039 + 21980 21979 22041 + 22046 22041 21979 + 22047 22041 22046 + 22041 22047 22042 + 22042 22047 22048 + 22042 22048 22043 + 22049 22043 22048 + 22043 22049 22044 + 21984 22046 21979 + 22046 21984 21983 + 22050 22046 21983 + 22046 22050 22051 + 22046 22051 22047 + 22052 22047 22051 + 22047 22052 22048 + 22052 22053 22048 + 22048 22053 22049 + 22054 22049 22053 + 22044 22049 22054 + 21989 22050 21983 + 22051 22050 21989 + 21989 22055 22051 + 22051 22055 22052 + 22053 22052 22055 + 22055 22056 22053 + 22053 22056 22057 + 22054 22053 22057 + 22058 22054 22057 + 22054 22058 22059 + 22054 22059 22044 + 22055 21989 21988 + 22056 22055 21988 + 22056 21988 21994 + 22056 21994 22057 + 21993 22057 21994 + 22057 21993 22060 + 22057 22060 22058 + 22058 22060 22061 + 22061 22062 22058 + 22059 22058 22062 + 22062 22063 22059 + 22059 22063 22064 + 22044 22059 22064 + 22060 21993 21992 + 21992 22065 22060 + 22060 22065 22061 + 22065 22066 22061 + 22067 22061 22066 + 22061 22067 22068 + 22061 22068 22069 + 22069 22062 22061 + 22063 22062 22069 + 22064 22063 22069 + 21992 21998 22065 + 22065 21998 22070 + 22070 22066 22065 + 22066 22070 22071 + 22066 22071 22067 + 22067 22071 22072 + 22073 22067 22072 + 22068 22067 22073 + 22074 22070 21998 + 22071 22070 22074 + 22074 22075 22071 + 22071 22075 22072 + 21998 21997 22074 + 21997 22076 22074 + 22077 22074 22076 + 22074 22077 22075 + 22075 22077 22078 + 22078 22072 22075 + 22005 22076 21997 + 22079 22076 22005 + 22076 22079 22077 + 22077 22079 22080 + 22080 22078 22077 + 22081 22078 22080 + 22072 22078 22081 + 22005 22082 22079 + 22079 22082 22083 + 22083 22080 22079 + 22080 22083 22084 + 22084 22085 22080 + 22080 22085 22081 + 22082 22005 22086 + 22086 22087 22082 + 22082 22087 22088 + 22088 22083 22082 + 22084 22083 22088 + 22004 22086 22005 + 22089 22086 22004 + 22087 22086 22089 + 22089 22090 22087 + 22087 22090 22091 + 22091 22088 22087 + 22088 22091 22092 + 22092 22093 22088 + 22088 22093 22084 + 22004 22010 22089 + 22089 22010 22094 + 22094 22095 22089 + 22090 22089 22095 + 22095 22096 22090 + 22090 22096 22097 + 22097 22091 22090 + 22092 22091 22097 + 22009 22094 22010 + 22094 22009 22098 + 22098 22099 22094 + 22094 22099 22100 + 22100 22095 22094 + 22096 22095 22100 + 22100 22101 22096 + 22096 22101 22102 + 22102 22097 22096 + 22098 22009 22008 + 22008 22103 22098 + 22098 22103 22104 + 22104 22105 22098 + 22099 22098 22105 + 22105 22106 22099 + 22100 22099 22106 + 22106 22107 22100 + 22101 22100 22107 + 22018 22103 22008 + 22103 22018 22108 + 22108 22104 22103 + 22109 22104 22108 + 22104 22109 22110 + 22110 22105 22104 + 22105 22110 22111 + 22111 22106 22105 + 22106 22111 22112 + 22112 22107 22106 + 22113 22108 22018 + 22113 22114 22108 + 22114 22109 22108 + 22109 22114 22115 + 22109 22115 22110 + 22111 22110 22115 + 22115 22116 22111 + 22111 22116 22117 + 22117 22112 22111 + 22018 22023 22113 + 22118 22113 22023 + 22114 22113 22118 + 22114 22118 22119 + 22119 22120 22114 + 22114 22120 22115 + 22121 22115 22120 + 22116 22115 22121 + 22023 22022 22118 + 22022 22122 22118 + 22122 22123 22118 + 22123 22119 22118 + 22123 22124 22119 + 22124 22125 22119 + 22125 22120 22119 + 22120 22125 22121 + 22126 22122 22022 + 22127 22122 22126 + 22122 22127 22128 + 22128 22123 22122 + 22124 22123 22128 + 22022 22021 22126 + 22126 22021 22020 + 22129 22126 22020 + 22129 22130 22126 + 22130 22127 22126 + 22127 22130 22131 + 22131 22128 22127 + 22131 22132 22128 + 22132 22124 22128 + 22020 22133 22129 + 22134 22129 22133 + 22129 22134 22135 + 22130 22129 22135 + 22130 22135 22136 + 22136 22131 22130 + 22132 22131 22136 + 22029 22133 22020 + 22137 22133 22029 + 22133 22137 22134 + 22138 22134 22137 + 22135 22134 22138 + 22138 22139 22135 + 22136 22135 22139 + 22140 22136 22139 + 22132 22136 22140 + 22140 22141 22132 + 22124 22132 22141 + 22137 22029 22142 + 22143 22137 22142 + 22138 22137 22143 + 22143 22144 22138 + 22145 22138 22144 + 22138 22145 22139 + 22139 22145 22146 + 22146 22140 22139 + 22034 22142 22029 + 22142 22034 22147 + 22148 22142 22147 + 22148 22143 22142 + 22149 22143 22148 + 22143 22149 22144 + 22149 22150 22144 + 22144 22150 22151 + 22144 22151 22145 + 22040 22147 22034 + 22152 22147 22040 + 22147 22152 22153 + 22153 22148 22147 + 22148 22153 22149 + 22149 22153 22154 + 22150 22149 22154 + 22154 22155 22150 + 22151 22150 22155 + 22155 22156 22151 + 22145 22151 22156 + 22146 22145 22156 + 22040 22045 22152 + 22152 22045 22064 + 22064 22157 22152 + 22153 22152 22157 + 22158 22153 22157 + 22153 22158 22154 + 22064 22045 22044 + 22121 22125 22124 + 22124 22141 22121 + 22159 22121 22141 + 22121 22159 22116 + 22116 22159 22160 + 22160 22117 22116 + 22141 22161 22159 + 22160 22159 22161 + 22161 22162 22160 + 22162 22163 22160 + 22163 22164 22160 + 22165 22160 22164 + 22117 22160 22165 + 22161 22141 22140 + 22140 22146 22161 + 22161 22146 22166 + 22166 22162 22161 + 22166 22167 22162 + 22162 22167 22168 + 22168 22163 22162 + 22168 22169 22163 + 22163 22169 22170 + 22170 22164 22163 + 22166 22146 22156 + 22167 22166 22156 + 22156 22171 22167 + 22168 22167 22171 + 22171 22172 22168 + 22169 22168 22172 + 22172 22173 22169 + 22169 22173 22174 + 22170 22169 22174 + 22156 22155 22171 + 22155 22175 22171 + 22171 22175 22176 + 22176 22172 22171 + 22173 22172 22176 + 22176 22177 22173 + 22173 22177 22178 + 22178 22174 22173 + 22175 22155 22154 + 22154 22179 22175 + 22176 22175 22179 + 22179 22180 22176 + 22177 22176 22180 + 22180 22181 22177 + 22177 22181 22182 + 22182 22178 22177 + 22183 22178 22182 + 22174 22178 22183 + 22154 22184 22179 + 22180 22179 22184 + 22185 22180 22184 + 22181 22180 22185 + 22181 22185 22186 + 22186 22187 22181 + 22181 22187 22182 + 22154 22158 22184 + 22184 22158 22188 + 22185 22184 22188 + 22188 22186 22185 + 22189 22186 22188 + 22186 22189 22187 + 22187 22189 22190 + 22190 22191 22187 + 22187 22191 22182 + 22158 22157 22188 + 22192 22188 22157 + 22188 22192 22189 + 22189 22192 22069 + 22190 22189 22069 + 22069 22068 22190 + 22068 22193 22190 + 22194 22190 22193 + 22190 22194 22191 + 22157 22064 22192 + 22192 22064 22069 + 22073 22193 22068 + 22193 22073 22195 + 22193 22195 22194 + 22194 22195 22196 + 22196 22197 22194 + 22191 22194 22197 + 22197 22182 22191 + 22182 22197 22198 + 22198 22199 22182 + 22182 22199 22183 + 22195 22073 22200 + 22200 22196 22195 + 22196 22200 22201 + 22201 22202 22196 + 22196 22202 22198 + 22198 22197 22196 + 22072 22200 22073 + 22201 22200 22072 + 22072 22203 22201 + 22201 22203 22204 + 22204 22205 22201 + 22202 22201 22205 + 22205 22206 22202 + 22198 22202 22206 + 22081 22203 22072 + 22203 22081 22207 + 22207 22204 22203 + 22204 22207 22208 + 22208 22209 22204 + 22204 22209 22210 + 22210 22205 22204 + 22206 22205 22210 + 22211 22207 22081 + 22208 22207 22211 + 22211 22212 22208 + 22208 22212 22213 + 22213 22214 22208 + 22209 22208 22214 + 22214 22215 22209 + 22210 22209 22215 + 22081 22085 22211 + 22216 22211 22085 + 22211 22216 22217 + 22217 22212 22211 + 22212 22217 22218 + 22218 22213 22212 + 22085 22084 22216 + 22219 22216 22084 + 22217 22216 22219 + 22219 22220 22217 + 22217 22220 22221 + 22221 22218 22217 + 22222 22218 22221 + 22213 22218 22222 + 22084 22093 22219 + 22223 22219 22093 + 22219 22223 22224 + 22224 22220 22219 + 22220 22224 22225 + 22225 22221 22220 + 22221 22225 22226 + 22226 22227 22221 + 22221 22227 22222 + 22093 22092 22223 + 22228 22223 22092 + 22224 22223 22228 + 22228 22229 22224 + 22224 22229 22230 + 22230 22225 22224 + 22226 22225 22230 + 22231 22228 22092 + 22232 22228 22231 + 22228 22232 22233 + 22233 22229 22228 + 22229 22233 22234 + 22234 22230 22229 + 22235 22231 22092 + 22236 22231 22235 + 22237 22231 22236 + 22231 22237 22232 + 22232 22237 22238 + 22233 22232 22238 + 22092 22239 22235 + 22240 22235 22239 + 22235 22240 22241 + 22241 22242 22235 + 22235 22242 22236 + 22097 22239 22092 + 22243 22239 22097 + 22239 22243 22240 + 22244 22240 22243 + 22241 22240 22244 + 22244 22245 22241 + 22241 22245 22246 + 22246 22247 22241 + 22242 22241 22247 + 22097 22102 22243 + 22243 22102 22248 + 22248 22249 22243 + 22243 22249 22244 + 22250 22244 22249 + 22244 22250 22251 + 22251 22245 22244 + 22245 22251 22252 + 22252 22246 22245 + 22248 22102 22101 + 22101 22253 22248 + 22254 22248 22253 + 22248 22254 22255 + 22255 22249 22248 + 22249 22255 22250 + 22256 22250 22255 + 22251 22250 22256 + 22107 22253 22101 + 22257 22253 22107 + 22253 22257 22254 + 22258 22254 22257 + 22255 22254 22258 + 22258 22259 22255 + 22255 22259 22256 + 22107 22112 22257 + 22257 22112 22117 + 22117 22260 22257 + 22257 22260 22258 + 22261 22258 22260 + 22258 22261 22262 + 22262 22259 22258 + 22259 22262 22263 + 22263 22256 22259 + 22165 22260 22117 + 22260 22165 22261 + 22264 22261 22165 + 22262 22261 22264 + 22264 22265 22262 + 22262 22265 22266 + 22266 22263 22262 + 22267 22263 22266 + 22256 22263 22267 + 22267 22268 22256 + 22256 22268 22251 + 22165 22269 22264 + 22270 22264 22269 + 22264 22270 22271 + 22271 22265 22264 + 22265 22271 22272 + 22272 22266 22265 + 22164 22269 22165 + 22164 22170 22269 + 22269 22170 22270 + 22174 22270 22170 + 22271 22270 22174 + 22174 22273 22271 + 22271 22273 22274 + 22274 22272 22271 + 22275 22272 22274 + 22266 22272 22275 + 22275 22276 22266 + 22266 22276 22267 + 22183 22273 22174 + 22273 22183 22277 + 22277 22274 22273 + 22274 22277 22278 + 22278 22279 22274 + 22274 22279 22275 + 22275 22279 22280 + 22280 22281 22275 + 22276 22275 22281 + 22282 22277 22183 + 22278 22277 22282 + 22282 22283 22278 + 22278 22283 22284 + 22284 22285 22278 + 22279 22278 22285 + 22285 22280 22279 + 22183 22199 22282 + 22286 22282 22199 + 22282 22286 22287 + 22287 22283 22282 + 22283 22287 22288 + 22288 22284 22283 + 22199 22198 22286 + 22289 22286 22198 + 22287 22286 22289 + 22289 22290 22287 + 22287 22290 22291 + 22291 22288 22287 + 22292 22288 22291 + 22284 22288 22292 + 22293 22289 22198 + 22294 22289 22293 + 22289 22294 22295 + 22295 22290 22289 + 22290 22295 22296 + 22296 22291 22290 + 22206 22293 22198 + 22297 22293 22206 + 22298 22293 22297 + 22293 22298 22294 + 22299 22294 22298 + 22295 22294 22299 + 22299 22300 22295 + 22295 22300 22301 + 22301 22296 22295 + 22206 22302 22297 + 22297 22302 22303 + 22303 22304 22297 + 22305 22297 22304 + 22297 22305 22298 + 22210 22302 22206 + 22302 22210 22306 + 22306 22303 22302 + 22303 22306 22307 + 22307 22308 22303 + 22303 22308 22309 + 22309 22304 22303 + 22310 22304 22309 + 22304 22310 22305 + 22215 22306 22210 + 22307 22306 22215 + 22215 22311 22307 + 22307 22311 22312 + 22312 22313 22307 + 22308 22307 22313 + 22313 22314 22308 + 22309 22308 22314 + 22315 22311 22215 + 22311 22315 22316 + 22316 22312 22311 + 22312 22316 22317 + 22317 22318 22312 + 22312 22318 22319 + 22319 22313 22312 + 22314 22313 22319 + 22215 22214 22315 + 22315 22214 22213 + 22213 22320 22315 + 22315 22320 22321 + 22321 22316 22315 + 22317 22316 22321 + 22321 22322 22317 + 22323 22317 22322 + 22318 22317 22323 + 22323 22324 22318 + 22319 22318 22324 + 22222 22320 22213 + 22320 22222 22325 + 22325 22321 22320 + 22321 22325 22326 + 22326 22322 22321 + 22322 22326 22323 + 22326 22327 22323 + 22323 22327 22328 + 22324 22323 22328 + 22329 22325 22222 + 22326 22325 22329 + 22329 22330 22326 + 22326 22330 22327 + 22330 22331 22327 + 22331 22328 22327 + 22222 22227 22329 + 22332 22329 22227 + 22329 22332 22331 + 22331 22330 22329 + 22227 22226 22332 + 22333 22332 22226 + 22331 22332 22333 + 22333 22334 22331 + 22331 22334 22328 + 22334 22335 22328 + 22335 22336 22328 + 22328 22336 22324 + 22226 22337 22333 + 22338 22333 22337 + 22333 22338 22335 + 22335 22334 22333 + 22230 22337 22226 + 22339 22337 22230 + 22337 22339 22338 + 22340 22338 22339 + 22335 22338 22340 + 22340 22341 22335 + 22335 22341 22336 + 22342 22336 22341 + 22336 22342 22324 + 22230 22234 22339 + 22339 22234 22343 + 22343 22344 22339 + 22339 22344 22340 + 22345 22340 22344 + 22340 22345 22346 + 22346 22341 22340 + 22341 22346 22342 + 22343 22234 22233 + 22233 22347 22343 + 22348 22343 22347 + 22343 22348 22349 + 22349 22344 22343 + 22344 22349 22345 + 22350 22345 22349 + 22346 22345 22350 + 22350 22351 22346 + 22346 22351 22342 + 22238 22347 22233 + 22352 22347 22238 + 22347 22352 22348 + 22310 22348 22352 + 22349 22348 22310 + 22310 22353 22349 + 22349 22353 22350 + 22354 22350 22353 + 22350 22354 22355 + 22355 22351 22350 + 22238 22356 22352 + 22352 22356 22298 + 22298 22305 22352 + 22352 22305 22310 + 22356 22238 22357 + 22357 22299 22356 + 22356 22299 22298 + 22237 22357 22238 + 22309 22353 22310 + 22353 22309 22354 + 22314 22354 22309 + 22355 22354 22314 + 22314 22358 22355 + 22355 22358 22359 + 22351 22355 22359 + 22359 22342 22351 + 22342 22359 22324 + 22324 22359 22358 + 22358 22319 22324 + 22319 22358 22314 + 22360 22296 22301 + 22291 22296 22360 + 22360 22361 22291 + 22291 22361 22292 + 22301 22362 22360 + 22360 22362 22363 + 22363 22364 22360 + 22361 22360 22364 + 22364 22365 22361 + 22365 22366 22361 + 22366 22292 22361 + 22367 22362 22301 + 22362 22367 22368 + 22368 22363 22362 + 22363 22368 22369 + 22369 22370 22363 + 22363 22370 22371 + 22371 22364 22363 + 22365 22364 22371 + 22301 22372 22367 + 22367 22372 22373 + 22373 22374 22367 + 22367 22374 22375 + 22375 22368 22367 + 22369 22368 22375 + 22372 22301 22300 + 22300 22376 22372 + 22373 22372 22376 + 22376 22377 22373 + 22378 22373 22377 + 22373 22378 22379 + 22379 22374 22373 + 22374 22379 22380 + 22380 22375 22374 + 22376 22300 22299 + 22299 22381 22376 + 22376 22381 22237 + 22237 22377 22376 + 22236 22377 22237 + 22377 22236 22378 + 22382 22378 22236 + 22379 22378 22382 + 22382 22383 22379 + 22379 22383 22384 + 22384 22380 22379 + 22385 22380 22384 + 22375 22380 22385 + 22385 22386 22375 + 22375 22386 22369 + 22236 22242 22382 + 22247 22382 22242 + 22382 22247 22387 + 22387 22383 22382 + 22383 22387 22388 + 22388 22384 22383 + 22384 22388 22389 + 22389 22390 22384 + 22384 22390 22385 + 22387 22247 22246 + 22246 22391 22387 + 22387 22391 22392 + 22392 22388 22387 + 22389 22388 22392 + 22392 22393 22389 + 22389 22393 22394 + 22389 22394 22395 + 22390 22389 22395 + 22385 22390 22395 + 22396 22391 22246 + 22391 22396 22397 + 22397 22392 22391 + 22392 22397 22398 + 22398 22393 22392 + 22393 22398 22399 + 22399 22394 22393 + 22394 22399 22400 + 22395 22394 22400 + 22246 22252 22396 + 22396 22252 22401 + 22401 22402 22396 + 22396 22402 22403 + 22403 22397 22396 + 22398 22397 22403 + 22403 22404 22398 + 22398 22404 22399 + 22400 22399 22404 + 22401 22252 22251 + 22251 22268 22401 + 22405 22401 22268 + 22401 22405 22406 + 22406 22402 22401 + 22402 22406 22407 + 22407 22403 22402 + 22403 22407 22408 + 22408 22404 22403 + 22404 22408 22400 + 22268 22267 22405 + 22409 22405 22267 + 22406 22405 22409 + 22409 22410 22406 + 22406 22410 22411 + 22411 22407 22406 + 22408 22407 22411 + 22411 22412 22408 + 22408 22412 22400 + 22267 22276 22409 + 22281 22409 22276 + 22409 22281 22413 + 22413 22410 22409 + 22410 22413 22414 + 22414 22411 22410 + 22411 22414 22415 + 22415 22412 22411 + 22412 22415 22416 + 22416 22400 22412 + 22413 22281 22280 + 22280 22417 22413 + 22413 22417 22418 + 22418 22414 22413 + 22415 22414 22418 + 22418 22419 22415 + 22415 22419 22416 + 22420 22416 22419 + 22416 22420 22421 + 22400 22416 22421 + 22422 22417 22280 + 22417 22422 22423 + 22423 22418 22417 + 22418 22423 22424 + 22424 22419 22418 + 22419 22424 22420 + 22420 22424 22425 + 22426 22420 22425 + 22420 22426 22421 + 22280 22285 22422 + 22422 22285 22284 + 22284 22427 22422 + 22422 22427 22428 + 22428 22423 22422 + 22423 22428 22425 + 22424 22423 22425 + 22292 22427 22284 + 22428 22427 22292 + 22366 22428 22292 + 22428 22366 22425 + 22366 22429 22425 + 22425 22429 22426 + 22429 22430 22426 + 22430 22371 22426 + 22371 22421 22426 + 22429 22366 22365 + 22365 22430 22429 + 22371 22430 22365 + 22371 22370 22421 + 22370 22369 22421 + 22369 22431 22421 + 22421 22431 22400 + 22431 22395 22400 + 22385 22395 22431 + 22386 22385 22431 + 22369 22386 22431 + 22432 22433 22434 + 22433 22432 22435 + 22435 22436 22433 + 22437 22433 22436 + 22438 22433 22437 + 22439 22432 22434 + 22432 22439 22440 + 22440 22441 22432 + 22432 22441 22442 + 22442 22435 22432 + 22443 22435 22442 + 22435 22443 22436 + 22439 22434 22444 + 22444 22445 22439 + 22440 22439 22445 + 22445 22446 22440 + 22440 22446 22447 + 22447 22448 22440 + 22441 22440 22448 + 22448 22449 22441 + 22442 22441 22449 + 22445 22444 22450 + 22451 22445 22450 + 22445 22451 22452 + 22452 22446 22445 + 22446 22452 22453 + 22453 22447 22446 + 22450 22444 22454 + 22454 22455 22450 + 22450 22455 22456 + 22456 22457 22450 + 22450 22457 22458 + 22451 22450 22458 + 22454 22444 22438 + 22438 22459 22454 + 22454 22459 22460 + 22460 22461 22454 + 22455 22454 22461 + 22461 22462 22455 + 22456 22455 22462 + 22437 22459 22438 + 22459 22437 22463 + 22463 22460 22459 + 22460 22463 22464 + 22464 22465 22460 + 22460 22465 22466 + 22466 22461 22460 + 22462 22461 22466 + 22467 22463 22437 + 22464 22463 22467 + 22467 22468 22464 + 22464 22468 22469 + 22469 22470 22464 + 22465 22464 22470 + 22470 22471 22465 + 22466 22465 22471 + 22437 22472 22467 + 22473 22467 22472 + 22467 22473 22474 + 22474 22468 22467 + 22468 22474 22475 + 22475 22469 22468 + 22436 22472 22437 + 22476 22472 22436 + 22472 22476 22473 + 22477 22473 22476 + 22474 22473 22477 + 22477 22478 22474 + 22474 22478 22479 + 22479 22475 22474 + 22436 22480 22476 + 22476 22480 22481 + 22481 22482 22476 + 22476 22482 22477 + 22483 22477 22482 + 22477 22483 22484 + 22484 22478 22477 + 22443 22480 22436 + 22480 22443 22485 + 22481 22480 22485 + 22485 22486 22481 + 22487 22481 22486 + 22482 22481 22487 + 22488 22482 22487 + 22482 22488 22483 + 22489 22483 22488 + 22484 22483 22489 + 22443 22490 22485 + 22491 22485 22490 + 22485 22491 22492 + 22492 22493 22485 + 22485 22493 22494 + 22494 22486 22485 + 22495 22490 22443 + 22496 22490 22495 + 22490 22496 22491 + 22497 22491 22496 + 22492 22491 22497 + 22443 22498 22495 + 22495 22498 22499 + 22499 22500 22495 + 22501 22495 22500 + 22495 22501 22496 + 22442 22498 22443 + 22498 22442 22502 + 22502 22499 22498 + 22499 22502 22503 + 22503 22504 22499 + 22499 22504 22505 + 22505 22500 22499 + 22506 22500 22505 + 22500 22506 22501 + 22449 22502 22442 + 22503 22502 22449 + 22449 22507 22503 + 22503 22507 22508 + 22508 22509 22503 + 22504 22503 22509 + 22509 22510 22504 + 22505 22504 22510 + 22511 22507 22449 + 22507 22511 22512 + 22512 22508 22507 + 22508 22512 22513 + 22513 22514 22508 + 22508 22514 22515 + 22515 22509 22508 + 22449 22448 22511 + 22511 22448 22447 + 22447 22516 22511 + 22511 22516 22517 + 22517 22512 22511 + 22513 22512 22517 + 22517 22518 22513 + 22519 22513 22518 + 22519 22520 22513 + 22520 22514 22513 + 22520 22515 22514 + 22521 22516 22447 + 22516 22521 22522 + 22522 22517 22516 + 22517 22522 22523 + 22523 22518 22517 + 22518 22523 22524 + 22524 22519 22518 + 22447 22453 22521 + 22521 22453 22525 + 22525 22526 22521 + 22521 22526 22527 + 22527 22522 22521 + 22523 22522 22527 + 22527 22528 22523 + 22524 22523 22528 + 22529 22524 22528 + 22519 22524 22529 + 22525 22453 22452 + 22452 22530 22525 + 22531 22525 22530 + 22525 22531 22532 + 22532 22526 22525 + 22526 22532 22533 + 22533 22527 22526 + 22527 22533 22534 + 22534 22528 22527 + 22528 22534 22529 + 22535 22530 22452 + 22536 22530 22535 + 22530 22536 22531 + 22537 22531 22536 + 22532 22531 22537 + 22537 22538 22532 + 22532 22538 22539 + 22539 22533 22532 + 22534 22533 22539 + 22452 22451 22535 + 22535 22451 22458 + 22458 22540 22535 + 22541 22535 22540 + 22535 22541 22536 + 22536 22541 22542 + 22542 22543 22536 + 22536 22543 22537 + 22544 22540 22458 + 22545 22540 22544 + 22540 22545 22541 + 22542 22541 22545 + 22545 22546 22542 + 22547 22542 22546 + 22542 22547 22548 + 22548 22543 22542 + 22458 22549 22544 + 22544 22549 22550 + 22550 22551 22544 + 22552 22544 22551 + 22544 22552 22545 + 22545 22552 22553 + 22553 22546 22545 + 22554 22549 22458 + 22549 22554 22555 + 22555 22550 22549 + 22556 22550 22555 + 22550 22556 22557 + 22557 22551 22550 + 22458 22558 22554 + 22554 22558 22559 + 22559 22560 22554 + 22554 22560 22561 + 22561 22555 22554 + 22562 22555 22561 + 22555 22562 22556 + 22558 22458 22457 + 22457 22563 22558 + 22559 22558 22563 + 22563 22564 22559 + 22565 22559 22564 + 22559 22565 22566 + 22566 22560 22559 + 22560 22566 22567 + 22567 22561 22560 + 22563 22457 22456 + 22456 22568 22563 + 22563 22568 22569 + 22569 22564 22563 + 22570 22564 22569 + 22564 22570 22565 + 22571 22565 22570 + 22566 22565 22571 + 22568 22456 22572 + 22572 22573 22568 + 22569 22568 22573 + 22573 22574 22569 + 22575 22569 22574 + 22569 22575 22570 + 22462 22572 22456 + 22576 22572 22462 + 22573 22572 22576 + 22576 22577 22573 + 22573 22577 22578 + 22578 22574 22573 + 22579 22574 22578 + 22574 22579 22575 + 22580 22575 22579 + 22570 22575 22580 + 22462 22581 22576 + 22576 22581 22582 + 22582 22583 22576 + 22577 22576 22583 + 22583 22584 22577 + 22578 22577 22584 + 22466 22581 22462 + 22581 22466 22585 + 22585 22582 22581 + 22582 22585 22586 + 22586 22587 22582 + 22582 22587 22588 + 22588 22583 22582 + 22584 22583 22588 + 22471 22585 22466 + 22586 22585 22471 + 22471 22589 22586 + 22590 22586 22589 + 22587 22586 22590 + 22590 22591 22587 + 22591 22588 22587 + 22592 22588 22591 + 22588 22592 22584 + 22593 22589 22471 + 22589 22593 22594 + 22594 22590 22589 + 22590 22594 22595 + 22591 22590 22595 + 22596 22591 22595 + 22591 22596 22592 + 22596 22597 22592 + 22584 22592 22597 + 22471 22470 22593 + 22593 22470 22469 + 22469 22598 22593 + 22594 22593 22598 + 22595 22594 22598 + 22598 22599 22595 + 22595 22599 22600 + 22595 22600 22601 + 22602 22595 22601 + 22595 22602 22596 + 22599 22598 22469 + 22599 22469 22475 + 22599 22475 22600 + 22475 22479 22600 + 22600 22479 22603 + 22601 22600 22603 + 22601 22603 22604 + 22604 22605 22601 + 22601 22605 22602 + 22602 22605 22606 + 22607 22602 22606 + 22602 22607 22596 + 22603 22479 22478 + 22478 22484 22603 + 22604 22603 22484 + 22484 22608 22604 + 22609 22604 22608 + 22605 22604 22609 + 22606 22605 22609 + 22606 22609 22610 + 22610 22611 22606 + 22607 22606 22611 + 22489 22608 22484 + 22612 22608 22489 + 22608 22612 22609 + 22610 22609 22612 + 22612 22613 22610 + 22614 22610 22613 + 22611 22610 22614 + 22615 22611 22614 + 22607 22611 22615 + 22616 22607 22615 + 22607 22616 22596 + 22489 22617 22612 + 22612 22617 22618 + 22618 22613 22612 + 22619 22613 22618 + 22613 22619 22614 + 22620 22614 22619 + 22615 22614 22620 + 22620 22621 22615 + 22616 22615 22621 + 22617 22489 22622 + 22622 22623 22617 + 22618 22617 22623 + 22623 22624 22618 + 22625 22618 22624 + 22618 22625 22619 + 22488 22622 22489 + 22626 22622 22488 + 22623 22622 22626 + 22626 22627 22623 + 22623 22627 22628 + 22628 22624 22623 + 22629 22624 22628 + 22624 22629 22625 + 22630 22625 22629 + 22619 22625 22630 + 22488 22487 22626 + 22626 22487 22631 + 22631 22632 22626 + 22627 22626 22632 + 22632 22633 22627 + 22628 22627 22633 + 22633 22634 22628 + 22635 22628 22634 + 22628 22635 22629 + 22486 22631 22487 + 22631 22486 22494 + 22494 22636 22631 + 22631 22636 22637 + 22637 22632 22631 + 22633 22632 22637 + 22637 22638 22633 + 22633 22638 22639 + 22639 22634 22633 + 22640 22634 22639 + 22634 22640 22635 + 22636 22494 22641 + 22641 22642 22636 + 22637 22636 22642 + 22642 22643 22637 + 22643 22644 22637 + 22644 22645 22637 + 22638 22637 22645 + 22646 22641 22494 + 22647 22641 22646 + 22642 22641 22647 + 22642 22647 22648 + 22648 22643 22642 + 22643 22648 22649 + 22643 22649 22644 + 22494 22493 22646 + 22650 22646 22493 + 22646 22650 22651 + 22646 22651 22647 + 22648 22647 22651 + 22652 22648 22651 + 22648 22652 22653 + 22649 22648 22653 + 22493 22492 22650 + 22650 22492 22654 + 22654 22655 22650 + 22655 22656 22650 + 22651 22650 22656 + 22656 22657 22651 + 22651 22657 22658 + 22658 22652 22651 + 22492 22659 22654 + 22660 22654 22659 + 22654 22660 22661 + 22654 22661 22662 + 22662 22655 22654 + 22497 22659 22492 + 22663 22659 22497 + 22659 22663 22660 + 22664 22660 22663 + 22661 22660 22664 + 22664 22665 22661 + 22662 22661 22665 + 22666 22662 22665 + 22667 22662 22666 + 22655 22662 22667 + 22497 22668 22663 + 22663 22668 22669 + 22669 22670 22663 + 22663 22670 22664 + 22671 22664 22670 + 22665 22664 22671 + 22668 22497 22672 + 22672 22673 22668 + 22669 22668 22673 + 22673 22547 22669 + 22546 22669 22547 + 22669 22546 22553 + 22553 22670 22669 + 22670 22553 22671 + 22496 22672 22497 + 22674 22672 22496 + 22673 22672 22674 + 22674 22675 22673 + 22673 22675 22548 + 22548 22547 22673 + 22496 22501 22674 + 22674 22501 22506 + 22506 22676 22674 + 22675 22674 22676 + 22676 22677 22675 + 22548 22675 22677 + 22677 22678 22548 + 22543 22548 22678 + 22678 22537 22543 + 22679 22676 22506 + 22677 22676 22679 + 22679 22680 22677 + 22677 22680 22681 + 22681 22678 22677 + 22537 22678 22681 + 22681 22538 22537 + 22538 22681 22682 + 22682 22539 22538 + 22506 22683 22679 + 22679 22683 22684 + 22684 22685 22679 + 22680 22679 22685 + 22685 22686 22680 + 22681 22680 22686 + 22686 22682 22681 + 22687 22682 22686 + 22539 22682 22687 + 22505 22683 22506 + 22683 22505 22688 + 22688 22684 22683 + 22689 22684 22688 + 22684 22689 22690 + 22690 22685 22684 + 22690 22691 22685 + 22691 22686 22685 + 22686 22691 22687 + 22510 22688 22505 + 22692 22688 22510 + 22692 22689 22688 + 22693 22689 22692 + 22693 22690 22689 + 22693 22694 22690 + 22694 22691 22690 + 22687 22691 22694 + 22695 22687 22694 + 22687 22695 22539 + 22539 22695 22534 + 22529 22534 22695 + 22510 22696 22692 + 22697 22692 22696 + 22697 22693 22692 + 22693 22697 22519 + 22529 22693 22519 + 22529 22694 22693 + 22694 22529 22695 + 22696 22510 22509 + 22515 22696 22509 + 22697 22696 22515 + 22520 22697 22515 + 22697 22520 22519 + 22698 22671 22553 + 22699 22671 22698 + 22671 22699 22665 + 22665 22699 22700 + 22700 22701 22665 + 22665 22701 22666 + 22553 22552 22698 + 22551 22698 22552 + 22702 22698 22551 + 22698 22702 22699 + 22700 22699 22702 + 22702 22703 22700 + 22704 22700 22703 + 22700 22704 22705 + 22705 22701 22700 + 22701 22705 22706 + 22706 22666 22701 + 22551 22557 22702 + 22702 22557 22707 + 22707 22703 22702 + 22708 22703 22707 + 22703 22708 22704 + 22709 22704 22708 + 22705 22704 22709 + 22709 22710 22705 + 22705 22710 22706 + 22707 22557 22556 + 22556 22711 22707 + 22712 22707 22711 + 22707 22712 22708 + 22708 22712 22713 + 22713 22714 22708 + 22708 22714 22709 + 22715 22709 22714 + 22710 22709 22715 + 22716 22711 22556 + 22717 22711 22716 + 22711 22717 22712 + 22713 22712 22717 + 22718 22713 22717 + 22719 22713 22718 + 22713 22719 22720 + 22720 22714 22713 + 22714 22720 22715 + 22556 22562 22716 + 22716 22562 22721 + 22721 22722 22716 + 22723 22716 22722 + 22716 22723 22717 + 22717 22723 22724 + 22724 22725 22717 + 22717 22725 22718 + 22561 22721 22562 + 22726 22721 22561 + 22721 22726 22727 + 22727 22722 22721 + 22722 22727 22728 + 22728 22729 22722 + 22722 22729 22723 + 22724 22723 22729 + 22561 22567 22726 + 22726 22567 22730 + 22730 22731 22726 + 22726 22731 22732 + 22732 22727 22726 + 22728 22727 22732 + 22732 22733 22728 + 22728 22733 22734 + 22729 22728 22734 + 22730 22567 22566 + 22566 22735 22730 + 22736 22730 22735 + 22730 22736 22737 + 22737 22731 22730 + 22731 22737 22738 + 22738 22732 22731 + 22733 22732 22738 + 22571 22735 22566 + 22739 22735 22571 + 22735 22739 22736 + 22740 22736 22739 + 22737 22736 22740 + 22740 22741 22737 + 22738 22737 22741 + 22742 22738 22741 + 22743 22738 22742 + 22738 22743 22733 + 22571 22744 22739 + 22739 22744 22640 + 22640 22745 22739 + 22739 22745 22740 + 22746 22740 22745 + 22740 22746 22741 + 22744 22571 22747 + 22747 22748 22744 + 22640 22744 22748 + 22748 22635 22640 + 22629 22635 22748 + 22748 22749 22629 + 22629 22749 22630 + 22570 22747 22571 + 22580 22747 22570 + 22748 22747 22580 + 22580 22749 22748 + 22749 22580 22750 + 22750 22630 22749 + 22630 22750 22751 + 22751 22752 22630 + 22630 22752 22619 + 22619 22752 22620 + 22579 22750 22580 + 22751 22750 22579 + 22579 22753 22751 + 22751 22753 22754 + 22754 22755 22751 + 22752 22751 22755 + 22755 22620 22752 + 22621 22620 22755 + 22756 22621 22755 + 22616 22621 22756 + 22578 22753 22579 + 22753 22578 22757 + 22757 22754 22753 + 22597 22754 22757 + 22597 22758 22754 + 22754 22758 22756 + 22756 22755 22754 + 22584 22757 22578 + 22597 22757 22584 + 22639 22745 22640 + 22745 22639 22746 + 22746 22639 22759 + 22759 22760 22746 + 22741 22746 22760 + 22760 22761 22741 + 22741 22761 22742 + 22639 22638 22759 + 22645 22759 22638 + 22762 22759 22645 + 22759 22762 22763 + 22763 22760 22759 + 22761 22760 22763 + 22761 22763 22764 + 22764 22765 22761 + 22761 22765 22742 + 22645 22766 22762 + 22762 22766 22767 + 22767 22768 22762 + 22762 22768 22763 + 22768 22764 22763 + 22769 22764 22768 + 22765 22764 22769 + 22765 22769 22770 + 22770 22742 22765 + 22766 22645 22771 + 22771 22772 22766 + 22772 22767 22766 + 22767 22772 22773 + 22774 22767 22773 + 22767 22774 22775 + 22768 22767 22775 + 22768 22775 22769 + 22770 22769 22775 + 22645 22644 22771 + 22776 22771 22644 + 22771 22776 22777 + 22777 22772 22771 + 22772 22777 22778 + 22778 22773 22772 + 22773 22778 22779 + 22779 22780 22773 + 22774 22773 22780 + 22649 22776 22644 + 22777 22776 22649 + 22649 22653 22777 + 22778 22777 22653 + 22653 22781 22778 + 22779 22778 22781 + 22781 22782 22779 + 22783 22779 22782 + 22780 22779 22783 + 22781 22653 22652 + 22652 22784 22781 + 22781 22784 22785 + 22785 22782 22781 + 22786 22782 22785 + 22782 22786 22783 + 22787 22783 22786 + 22788 22783 22787 + 22788 22780 22783 + 22784 22652 22658 + 22658 22789 22784 + 22785 22784 22789 + 22790 22785 22789 + 22791 22785 22790 + 22785 22791 22786 + 22786 22791 22792 + 22786 22792 22787 + 22658 22793 22789 + 22789 22793 22794 + 22789 22794 22790 + 22795 22790 22794 + 22795 22796 22790 + 22796 22797 22790 + 22790 22797 22791 + 22793 22658 22657 + 22657 22798 22793 + 22799 22793 22798 + 22793 22799 22794 + 22794 22799 22800 + 22794 22800 22795 + 22801 22795 22800 + 22795 22801 22802 + 22796 22795 22802 + 22657 22656 22798 + 22798 22656 22655 + 22655 22667 22798 + 22667 22803 22798 + 22803 22804 22798 + 22804 22799 22798 + 22804 22805 22799 + 22805 22800 22799 + 22805 22806 22800 + 22806 22801 22800 + 22666 22803 22667 + 22803 22666 22706 + 22803 22706 22807 + 22807 22804 22803 + 22804 22807 22805 + 22805 22807 22808 + 22805 22808 22806 + 22809 22806 22808 + 22810 22806 22809 + 22806 22810 22801 + 22810 22811 22801 + 22802 22801 22811 + 22812 22807 22706 + 22807 22812 22808 + 22808 22812 22813 + 22808 22813 22809 + 22814 22809 22813 + 22815 22809 22814 + 22809 22815 22810 + 22810 22815 22816 + 22810 22816 22811 + 22817 22812 22706 + 22817 22818 22812 + 22818 22813 22812 + 22818 22814 22813 + 22710 22817 22706 + 22819 22817 22710 + 22817 22819 22818 + 22818 22819 22820 + 22818 22820 22814 + 22821 22814 22820 + 22821 22822 22814 + 22822 22823 22814 + 22814 22823 22815 + 22710 22715 22819 + 22824 22819 22715 + 22819 22824 22820 + 22820 22824 22825 + 22820 22825 22821 + 22826 22821 22825 + 22826 22827 22821 + 22827 22822 22821 + 22828 22822 22827 + 22823 22822 22828 + 22829 22824 22715 + 22829 22830 22824 + 22830 22825 22824 + 22830 22826 22825 + 22831 22826 22830 + 22827 22826 22831 + 22827 22831 22832 + 22827 22832 22828 + 22720 22829 22715 + 22833 22829 22720 + 22830 22829 22833 + 22834 22830 22833 + 22834 22835 22830 + 22830 22835 22831 + 22836 22831 22835 + 22831 22836 22832 + 22720 22719 22833 + 22837 22833 22719 + 22837 22838 22833 + 22833 22838 22839 + 22840 22833 22839 + 22833 22840 22834 + 22718 22837 22719 + 22841 22837 22718 + 22837 22841 22842 + 22842 22838 22837 + 22839 22838 22842 + 22839 22842 22843 + 22843 22844 22839 + 22840 22839 22844 + 22844 22845 22840 + 22834 22840 22845 + 22841 22718 22725 + 22725 22846 22841 + 22842 22841 22846 + 22843 22842 22846 + 22846 22847 22843 + 22848 22843 22847 + 22849 22843 22848 + 22849 22844 22843 + 22845 22844 22849 + 22846 22725 22724 + 22724 22850 22846 + 22846 22850 22851 + 22851 22847 22846 + 22851 22852 22847 + 22852 22853 22847 + 22847 22853 22848 + 22850 22724 22854 + 22854 22855 22850 + 22855 22856 22850 + 22856 22851 22850 + 22856 22857 22851 + 22857 22852 22851 + 22729 22854 22724 + 22734 22854 22729 + 22855 22854 22734 + 22855 22734 22858 + 22858 22856 22855 + 22857 22856 22858 + 22857 22858 22859 + 22857 22859 22860 + 22857 22860 22852 + 22860 22861 22852 + 22853 22852 22861 + 22861 22862 22853 + 22853 22862 22848 + 22863 22858 22734 + 22858 22863 22859 + 22859 22863 22864 + 22859 22864 22865 + 22865 22860 22859 + 22866 22860 22865 + 22860 22866 22867 + 22867 22861 22860 + 22862 22861 22867 + 22733 22863 22734 + 22863 22733 22743 + 22864 22863 22743 + 22864 22743 22868 + 22868 22869 22864 + 22869 22865 22864 + 22866 22865 22869 + 22869 22870 22866 + 22866 22870 22867 + 22870 22871 22867 + 22862 22867 22871 + 22871 22872 22862 + 22862 22872 22848 + 22742 22868 22743 + 22868 22742 22770 + 22770 22873 22868 + 22868 22873 22869 + 22873 22874 22869 + 22874 22870 22869 + 22871 22870 22874 + 22875 22871 22874 + 22872 22871 22875 + 22875 22876 22872 + 22877 22872 22876 + 22872 22877 22848 + 22873 22770 22878 + 22878 22879 22873 + 22874 22873 22879 + 22879 22875 22874 + 22879 22880 22875 + 22880 22876 22875 + 22876 22880 22881 + 22881 22882 22876 + 22882 22877 22876 + 22883 22878 22770 + 22880 22878 22883 + 22879 22878 22880 + 22775 22883 22770 + 22884 22883 22775 + 22883 22884 22881 + 22883 22881 22880 + 22775 22774 22884 + 22780 22884 22774 + 22881 22884 22780 + 22780 22788 22881 + 22881 22788 22882 + 22787 22882 22788 + 22877 22882 22787 + 22787 22885 22877 + 22877 22885 22848 + 22885 22849 22848 + 22886 22849 22885 + 22886 22845 22849 + 22887 22845 22886 + 22845 22887 22834 + 22885 22787 22792 + 22792 22888 22885 + 22885 22888 22886 + 22886 22888 22889 + 22887 22886 22889 + 22887 22889 22890 + 22834 22887 22890 + 22834 22890 22891 + 22835 22834 22891 + 22891 22836 22835 + 22889 22888 22792 + 22792 22892 22889 + 22890 22889 22892 + 22893 22890 22892 + 22891 22890 22893 + 22894 22891 22893 + 22891 22894 22836 + 22894 22895 22836 + 22832 22836 22895 + 22791 22892 22792 + 22893 22892 22791 + 22797 22893 22791 + 22894 22893 22797 + 22797 22796 22894 + 22895 22894 22796 + 22802 22895 22796 + 22896 22895 22802 + 22895 22896 22832 + 22828 22832 22896 + 22816 22828 22896 + 22816 22897 22828 + 22828 22897 22823 + 22823 22897 22815 + 22802 22811 22896 + 22816 22896 22811 + 22815 22897 22816 + 22898 22756 22758 + 22898 22616 22756 + 22616 22898 22596 + 22596 22898 22597 + 22898 22758 22597 + 22899 22900 22901 + 22900 22899 22902 + 22903 22899 22901 + 22899 22903 22904 + 22904 22905 22899 + 22906 22899 22905 + 22899 22906 22902 + 22907 22903 22901 + 22903 22907 22908 + 22908 22909 22903 + 22903 22909 22904 + 22910 22904 22909 + 22905 22904 22910 + 22901 22911 22907 + 22907 22911 22912 + 22908 22907 22912 + 22913 22908 22912 + 22909 22908 22913 + 22909 22913 22914 + 22909 22914 22910 + 22911 22901 22915 + 22915 22916 22911 + 22917 22911 22916 + 22911 22917 22912 + 22918 22912 22917 + 22912 22918 22913 + 22915 22901 22919 + 22920 22915 22919 + 22916 22915 22920 + 22916 22920 22921 + 22916 22921 22922 + 22922 22917 22916 + 22917 22922 22923 + 22923 22918 22917 + 22901 22924 22919 + 22924 22925 22919 + 22919 22925 22926 + 22919 22926 22920 + 22927 22920 22926 + 22921 22920 22927 + 22927 22928 22921 + 22921 22928 22929 + 22922 22921 22929 + 22924 22902 22925 + 22930 22925 22902 + 22925 22930 22926 + 22926 22930 22931 + 22931 22932 22926 + 22926 22932 22933 + 22926 22933 22927 + 22934 22927 22933 + 22927 22934 22928 + 22902 22935 22930 + 22931 22930 22935 + 22935 22936 22931 + 22936 22937 22931 + 22937 22938 22931 + 22939 22931 22938 + 22931 22939 22932 + 22902 22906 22935 + 22906 22940 22935 + 22935 22940 22936 + 22940 22941 22936 + 22942 22936 22941 + 22936 22942 22943 + 22943 22937 22936 + 22940 22906 22905 + 22905 22944 22940 + 22941 22940 22944 + 22945 22941 22944 + 22942 22941 22945 + 22945 22946 22942 + 22942 22946 22947 + 22943 22942 22947 + 22905 22910 22944 + 22944 22910 22948 + 22948 22949 22944 + 22944 22949 22945 + 22950 22945 22949 + 22945 22950 22946 + 22946 22950 22951 + 22951 22952 22946 + 22946 22952 22947 + 22953 22948 22910 + 22954 22948 22953 + 22949 22948 22954 + 22949 22954 22950 + 22951 22950 22954 + 22955 22951 22954 + 22956 22951 22955 + 22952 22951 22956 + 22952 22956 22957 + 22957 22947 22952 + 22910 22914 22953 + 22914 22958 22953 + 22959 22953 22958 + 22953 22959 22960 + 22960 22961 22953 + 22953 22961 22954 + 22954 22961 22955 + 22962 22958 22914 + 22963 22958 22962 + 22958 22963 22959 + 22964 22959 22963 + 22960 22959 22964 + 22914 22913 22962 + 22965 22962 22913 + 22963 22962 22965 + 22965 22966 22963 + 22963 22966 22964 + 22967 22964 22966 + 22964 22967 22968 + 22968 22969 22964 + 22964 22969 22960 + 22913 22918 22965 + 22918 22970 22965 + 22971 22965 22970 + 22965 22971 22966 + 22966 22971 22967 + 22972 22967 22971 + 22968 22967 22972 + 22973 22970 22918 + 22974 22970 22973 + 22970 22974 22971 + 22971 22974 22972 + 22975 22972 22974 + 22972 22975 22976 + 22976 22977 22972 + 22972 22977 22968 + 22918 22923 22973 + 22973 22923 22978 + 22978 22979 22973 + 22980 22973 22979 + 22973 22980 22974 + 22974 22980 22975 + 22975 22980 22981 + 22981 22982 22975 + 22976 22975 22982 + 22983 22978 22923 + 22978 22983 22984 + 22984 22985 22978 + 22978 22985 22986 + 22986 22979 22978 + 22981 22979 22986 + 22979 22981 22980 + 22923 22922 22983 + 22929 22983 22922 + 22984 22983 22929 + 22929 22987 22984 + 22984 22987 22988 + 22988 22989 22984 + 22985 22984 22989 + 22989 22990 22985 + 22986 22985 22990 + 22929 22991 22987 + 22991 22992 22987 + 22987 22992 22993 + 22993 22988 22987 + 22991 22929 22994 + 22994 22995 22991 + 22996 22991 22995 + 22992 22991 22996 + 22996 22997 22992 + 22992 22997 22998 + 22998 22993 22992 + 22999 22994 22929 + 23000 22994 22999 + 23000 22995 22994 + 22995 23000 23001 + 23001 23002 22995 + 22995 23002 22996 + 22928 22999 22929 + 23003 22999 22928 + 23003 23004 22999 + 22999 23004 23000 + 23000 23004 23005 + 23005 23001 23000 + 23006 23001 23005 + 23002 23001 23006 + 22928 22934 23003 + 23003 22934 23007 + 23007 23008 23003 + 23008 23009 23003 + 23009 23010 23003 + 23004 23003 23010 + 23010 23005 23004 + 23011 23005 23010 + 23005 23011 23006 + 22933 23007 22934 + 23012 23007 22933 + 23007 23012 23013 + 23013 23008 23007 + 23014 23008 23013 + 23008 23014 23015 + 23015 23009 23008 + 23012 22933 22932 + 22932 22939 23012 + 23012 22939 23013 + 22939 23016 23013 + 23014 23013 23016 + 23016 23017 23014 + 23014 23017 23018 + 23015 23014 23018 + 23018 23019 23015 + 23020 23015 23019 + 23015 23020 23009 + 22938 23016 22939 + 23017 23016 22938 + 22938 23021 23017 + 23021 23022 23017 + 23017 23022 23023 + 23023 23018 23017 + 23023 23024 23018 + 23018 23024 23019 + 23025 23021 22938 + 23021 23025 23026 + 23022 23021 23026 + 23026 23027 23022 + 23022 23027 23023 + 23027 23028 23023 + 23028 23029 23023 + 23023 23029 23024 + 22937 23025 22938 + 23030 23025 22937 + 23025 23030 23031 + 23031 23026 23025 + 23027 23026 23031 + 23028 23027 23031 + 23028 23031 23032 + 23028 23032 23029 + 23032 23033 23029 + 23033 23024 23029 + 22937 22943 23030 + 23030 22943 23034 + 23034 23035 23030 + 23031 23030 23035 + 23031 23035 23032 + 23032 23035 23034 + 23033 23032 23034 + 23034 23036 23033 + 23037 23033 23036 + 23024 23033 23037 + 23038 23024 23037 + 23024 23038 23019 + 22947 23034 22943 + 23036 23034 22947 + 22947 23039 23036 + 23040 23036 23039 + 23040 23037 23036 + 23040 23041 23037 + 23037 23041 23042 + 23042 23043 23037 + 23037 23043 23038 + 22947 22957 23039 + 23039 22957 23044 + 23044 23045 23039 + 23039 23045 23040 + 23041 23040 23045 + 23045 23046 23041 + 23042 23041 23046 + 23046 23047 23042 + 23048 23042 23047 + 23043 23042 23048 + 23044 22957 22956 + 23049 23044 22956 + 23046 23044 23049 + 23045 23044 23046 + 22956 23050 23049 + 23050 23051 23049 + 23052 23049 23051 + 23049 23052 23053 + 23053 23047 23049 + 23049 23047 23046 + 22955 23050 22956 + 22955 23054 23050 + 23050 23054 23055 + 23055 23051 23050 + 23056 23051 23055 + 23051 23056 23052 + 23057 23052 23056 + 23053 23052 23057 + 23054 22955 22961 + 22961 22960 23054 + 23055 23054 22960 + 22960 22969 23055 + 23058 23055 22969 + 23055 23058 23056 + 23056 23058 23059 + 23059 23060 23056 + 23056 23060 23057 + 23061 23057 23060 + 23057 23061 23062 + 23057 23062 23053 + 22969 22968 23058 + 23059 23058 22968 + 22968 22977 23059 + 23063 23059 22977 + 23059 23063 23064 + 23064 23060 23059 + 23060 23064 23061 + 23061 23064 23065 + 23065 23066 23061 + 23062 23061 23066 + 23066 23067 23062 + 23053 23062 23067 + 22977 22976 23063 + 23063 22976 23068 + 23068 23069 23063 + 23064 23063 23069 + 23069 23065 23064 + 23065 23069 23070 + 23070 23071 23065 + 23065 23071 23072 + 23072 23066 23065 + 23067 23066 23072 + 22982 23068 22976 + 23068 22982 23073 + 23073 23074 23068 + 23068 23074 23070 + 23070 23069 23068 + 23073 22982 22981 + 22981 23075 23073 + 23073 23075 23076 + 23076 23077 23073 + 23074 23073 23077 + 23077 23078 23074 + 23070 23074 23078 + 23078 23079 23070 + 23071 23070 23079 + 22986 23075 22981 + 23075 22986 23080 + 23080 23076 23075 + 23076 23080 23081 + 23081 23082 23076 + 23076 23082 23083 + 23083 23077 23076 + 23078 23077 23083 + 22990 23080 22986 + 23081 23080 22990 + 22990 23084 23081 + 23081 23084 23085 + 23085 23086 23081 + 23082 23081 23086 + 23086 23087 23082 + 23083 23082 23087 + 23088 23084 22990 + 23084 23088 23089 + 23089 23085 23084 + 23085 23089 23090 + 23090 23091 23085 + 23085 23091 23092 + 23092 23086 23085 + 23087 23086 23092 + 22990 22989 23088 + 23088 22989 22988 + 22988 23093 23088 + 23088 23093 23094 + 23094 23089 23088 + 23090 23089 23094 + 23094 23095 23090 + 23090 23095 23096 + 23096 23097 23090 + 23091 23090 23097 + 23098 23093 22988 + 23093 23098 23099 + 23099 23094 23093 + 23094 23099 23100 + 23100 23095 23094 + 23095 23100 23101 + 23101 23096 23095 + 22988 22993 23098 + 23098 22993 22998 + 22998 23102 23098 + 23098 23102 23103 + 23103 23099 23098 + 23100 23099 23103 + 23103 23104 23100 + 23100 23104 23105 + 23105 23101 23100 + 23106 23101 23105 + 23096 23101 23106 + 23107 23102 22998 + 23102 23107 23108 + 23108 23103 23102 + 23103 23108 23109 + 23109 23104 23103 + 23104 23109 23110 + 23110 23105 23104 + 22998 23111 23107 + 23107 23111 23112 + 23112 23113 23107 + 23107 23113 23114 + 23114 23108 23107 + 23109 23108 23114 + 23111 22998 22997 + 22997 23115 23111 + 23112 23111 23115 + 23115 23116 23112 + 23117 23112 23116 + 23112 23117 23118 + 23118 23113 23112 + 23113 23118 23119 + 23119 23114 23113 + 23115 22997 22996 + 22996 23120 23115 + 23115 23120 23121 + 23121 23116 23115 + 23122 23116 23121 + 23116 23122 23117 + 23123 23117 23122 + 23118 23117 23123 + 23120 22996 23002 + 23002 23124 23120 + 23120 23124 23125 + 23125 23121 23120 + 23126 23121 23125 + 23121 23126 23122 + 23122 23126 23067 + 23067 23127 23122 + 23122 23127 23123 + 23006 23124 23002 + 23124 23006 23128 + 23128 23129 23124 + 23124 23129 23125 + 23130 23125 23129 + 23125 23130 23131 + 23125 23131 23126 + 23067 23126 23131 + 23131 23048 23067 + 23048 23053 23067 + 23132 23128 23006 + 23133 23128 23132 + 23128 23133 23134 + 23134 23129 23128 + 23129 23134 23130 + 23134 23135 23130 + 23131 23130 23135 + 23135 23048 23131 + 23048 23135 23043 + 23020 23132 23006 + 23019 23132 23020 + 23038 23132 23019 + 23132 23038 23133 + 23043 23133 23038 + 23134 23133 23043 + 23043 23135 23134 + 23006 23011 23020 + 23009 23020 23011 + 23011 23010 23009 + 23047 23053 23048 + 23072 23127 23067 + 23127 23072 23136 + 23136 23123 23127 + 23123 23136 23137 + 23137 23138 23123 + 23123 23138 23118 + 23139 23136 23072 + 23137 23136 23139 + 23139 23140 23137 + 23137 23140 23141 + 23141 23142 23137 + 23138 23137 23142 + 23142 23143 23138 + 23118 23138 23143 + 23143 23119 23118 + 23072 23071 23139 + 23079 23139 23071 + 23139 23079 23144 + 23144 23140 23139 + 23140 23144 23145 + 23145 23141 23140 + 23141 23145 23146 + 23146 23147 23141 + 23141 23147 23148 + 23148 23142 23141 + 23143 23142 23148 + 23144 23079 23078 + 23078 23149 23144 + 23144 23149 23150 + 23150 23145 23144 + 23146 23145 23150 + 23150 23151 23146 + 23146 23151 23152 + 23152 23153 23146 + 23147 23146 23153 + 23083 23149 23078 + 23149 23083 23154 + 23154 23150 23149 + 23150 23154 23155 + 23155 23151 23150 + 23151 23155 23156 + 23156 23152 23151 + 23087 23154 23083 + 23155 23154 23087 + 23087 23157 23155 + 23155 23157 23158 + 23158 23156 23155 + 23159 23156 23158 + 23152 23156 23159 + 23159 23160 23152 + 23152 23160 23161 + 23161 23153 23152 + 23092 23157 23087 + 23157 23092 23162 + 23162 23158 23157 + 23158 23162 23163 + 23163 23164 23158 + 23158 23164 23159 + 23159 23164 23165 + 23165 23166 23159 + 23160 23159 23166 + 23167 23162 23092 + 23163 23162 23167 + 23167 23168 23163 + 23163 23168 23169 + 23164 23163 23169 + 23169 23165 23164 + 23165 23169 23170 + 23170 23171 23165 + 23165 23171 23166 + 23092 23091 23167 + 23097 23167 23091 + 23167 23097 23172 + 23172 23168 23167 + 23168 23172 23169 + 23172 23170 23169 + 23172 23173 23170 + 23173 23106 23170 + 23106 23174 23170 + 23170 23174 23171 + 23172 23097 23096 + 23096 23173 23172 + 23106 23173 23096 + 23175 23171 23174 + 23171 23175 23176 + 23177 23171 23176 + 23171 23177 23166 + 23178 23166 23177 + 23178 23179 23166 + 23166 23179 23160 + 23180 23175 23174 + 23175 23180 23105 + 23105 23110 23175 + 23175 23110 23181 + 23181 23176 23175 + 23182 23176 23181 + 23176 23182 23177 + 23106 23180 23174 + 23105 23180 23106 + 23181 23110 23109 + 23109 23183 23181 + 23184 23181 23183 + 23181 23184 23182 + 23182 23184 23185 + 23185 23186 23182 + 23182 23186 23187 + 23182 23187 23177 + 23177 23187 23178 + 23114 23183 23109 + 23188 23183 23114 + 23183 23188 23184 + 23185 23184 23188 + 23188 23189 23185 + 23190 23185 23189 + 23185 23190 23191 + 23191 23186 23185 + 23186 23191 23178 + 23178 23187 23186 + 23114 23119 23188 + 23188 23119 23143 + 23143 23189 23188 + 23148 23189 23143 + 23189 23148 23190 + 23192 23190 23148 + 23191 23190 23192 + 23192 23193 23191 + 23191 23193 23178 + 23179 23178 23193 + 23193 23161 23179 + 23161 23160 23179 + 23148 23147 23192 + 23153 23192 23147 + 23192 23153 23161 + 23161 23193 23192 + 23194 23195 23196 + 23194 23197 23195 + 23198 23195 23197 + 23199 23194 23196 + 23194 23199 23200 + 23200 23201 23194 + 23194 23201 23202 + 23202 23197 23194 + 23203 23197 23202 + 23197 23203 23198 + 23204 23199 23196 + 23200 23199 23204 + 23204 23205 23200 + 23200 23205 23206 + 23206 23207 23200 + 23201 23200 23207 + 23207 23208 23201 + 23202 23201 23208 + 23204 23196 23209 + 23210 23204 23209 + 23204 23210 23211 + 23211 23205 23204 + 23205 23211 23212 + 23212 23206 23205 + 23209 23196 23213 + 23213 23214 23209 + 23214 23215 23209 + 23216 23209 23215 + 23216 23210 23209 + 23211 23210 23216 + 23216 23217 23211 + 23211 23217 23212 + 23196 23218 23213 + 23218 23198 23213 + 23198 23219 23213 + 23213 23219 23220 + 23220 23221 23213 + 23221 23222 23213 + 23214 23213 23222 + 23219 23198 23223 + 23223 23224 23219 + 23224 23220 23219 + 23224 23225 23220 + 23225 23226 23220 + 23221 23220 23226 + 23203 23223 23198 + 23227 23223 23203 + 23224 23223 23227 + 23227 23225 23224 + 23225 23227 23228 + 23228 23229 23225 + 23226 23225 23229 + 23229 23230 23226 + 23231 23226 23230 + 23226 23231 23221 + 23203 23232 23227 + 23227 23232 23233 + 23233 23228 23227 + 23234 23228 23233 + 23229 23228 23234 + 23234 23235 23229 + 23229 23235 23236 + 23236 23230 23229 + 23202 23232 23203 + 23232 23202 23237 + 23237 23233 23232 + 23233 23237 23238 + 23238 23239 23233 + 23233 23239 23234 + 23234 23239 23240 + 23240 23241 23234 + 23235 23234 23241 + 23208 23237 23202 + 23238 23237 23208 + 23208 23242 23238 + 23238 23242 23243 + 23243 23244 23238 + 23239 23238 23244 + 23244 23240 23239 + 23245 23242 23208 + 23242 23245 23246 + 23246 23243 23242 + 23243 23246 23247 + 23247 23248 23243 + 23243 23248 23249 + 23249 23244 23243 + 23240 23244 23249 + 23208 23207 23245 + 23245 23207 23206 + 23206 23250 23245 + 23245 23250 23251 + 23251 23246 23245 + 23247 23246 23251 + 23251 23252 23247 + 23247 23252 23253 + 23253 23254 23247 + 23248 23247 23254 + 23255 23250 23206 + 23250 23255 23256 + 23256 23251 23250 + 23251 23256 23257 + 23257 23252 23251 + 23252 23257 23258 + 23258 23253 23252 + 23206 23212 23255 + 23255 23212 23259 + 23259 23260 23255 + 23255 23260 23261 + 23261 23256 23255 + 23257 23256 23261 + 23261 23262 23257 + 23257 23262 23263 + 23263 23258 23257 + 23217 23259 23212 + 23264 23259 23217 + 23259 23264 23265 + 23265 23260 23259 + 23260 23265 23266 + 23266 23261 23260 + 23261 23266 23267 + 23267 23262 23261 + 23262 23267 23268 + 23268 23263 23262 + 23217 23269 23264 + 23270 23264 23269 + 23265 23264 23270 + 23270 23271 23265 + 23265 23271 23272 + 23272 23266 23265 + 23267 23266 23272 + 23269 23217 23216 + 23216 23273 23269 + 23269 23273 23274 + 23274 23275 23269 + 23269 23275 23270 + 23276 23270 23275 + 23270 23276 23277 + 23277 23271 23270 + 23273 23216 23215 + 23274 23273 23215 + 23274 23215 23214 + 23278 23274 23214 + 23274 23278 23279 + 23279 23275 23274 + 23275 23279 23276 + 23280 23276 23279 + 23277 23276 23280 + 23214 23281 23278 + 23279 23278 23281 + 23281 23282 23279 + 23279 23282 23280 + 23283 23280 23282 + 23280 23283 23284 + 23284 23285 23280 + 23280 23285 23277 + 23222 23281 23214 + 23281 23222 23286 + 23286 23282 23281 + 23282 23286 23283 + 23287 23283 23286 + 23284 23283 23287 + 23287 23288 23284 + 23284 23288 23289 + 23289 23290 23284 + 23285 23284 23290 + 23286 23222 23221 + 23221 23231 23286 + 23286 23231 23287 + 23230 23287 23231 + 23287 23230 23236 + 23236 23288 23287 + 23288 23236 23291 + 23291 23289 23288 + 23289 23291 23292 + 23292 23293 23289 + 23289 23293 23294 + 23294 23290 23289 + 23295 23290 23294 + 23290 23295 23285 + 23277 23285 23295 + 23296 23291 23236 + 23292 23291 23296 + 23296 23297 23292 + 23292 23297 23298 + 23298 23299 23292 + 23293 23292 23299 + 23299 23300 23293 + 23294 23293 23300 + 23236 23235 23296 + 23241 23296 23235 + 23296 23241 23301 + 23301 23297 23296 + 23297 23301 23302 + 23302 23298 23297 + 23298 23302 23303 + 23303 23304 23298 + 23298 23304 23305 + 23305 23299 23298 + 23301 23241 23240 + 23240 23306 23301 + 23301 23306 23307 + 23307 23302 23301 + 23303 23302 23307 + 23307 23308 23303 + 23303 23308 23309 + 23309 23310 23303 + 23304 23303 23310 + 23249 23306 23240 + 23306 23249 23311 + 23311 23307 23306 + 23307 23311 23312 + 23312 23308 23307 + 23308 23312 23313 + 23313 23314 23308 + 23308 23314 23309 + 23315 23311 23249 + 23312 23311 23315 + 23315 23316 23312 + 23312 23316 23317 + 23317 23313 23312 + 23318 23313 23317 + 23313 23318 23319 + 23319 23314 23313 + 23249 23248 23315 + 23254 23315 23248 + 23315 23254 23320 + 23320 23316 23315 + 23316 23320 23321 + 23321 23317 23316 + 23322 23317 23321 + 23317 23322 23318 + 23323 23318 23322 + 23319 23318 23323 + 23320 23254 23253 + 23253 23324 23320 + 23321 23320 23324 + 23324 23325 23321 + 23326 23321 23325 + 23321 23326 23322 + 23322 23326 23327 + 23327 23328 23322 + 23322 23328 23323 + 23329 23324 23253 + 23324 23329 23330 + 23330 23325 23324 + 23330 23331 23325 + 23325 23331 23326 + 23327 23326 23331 + 23253 23258 23329 + 23332 23329 23258 + 23330 23329 23332 + 23330 23332 23333 + 23331 23330 23333 + 23333 23334 23331 + 23331 23334 23327 + 23263 23332 23258 + 23335 23332 23263 + 23332 23335 23336 + 23336 23333 23332 + 23334 23333 23336 + 23336 23337 23334 + 23334 23337 23338 + 23338 23339 23334 + 23334 23339 23327 + 23263 23268 23335 + 23340 23335 23268 + 23335 23340 23341 + 23341 23336 23335 + 23337 23336 23341 + 23341 23342 23337 + 23338 23337 23342 + 23343 23338 23342 + 23344 23338 23343 + 23338 23344 23339 + 23345 23340 23268 + 23346 23340 23345 + 23340 23346 23347 + 23347 23341 23340 + 23341 23347 23342 + 23345 23268 23267 + 23267 23348 23345 + 23349 23345 23348 + 23345 23349 23346 + 23346 23349 23350 + 23350 23351 23346 + 23347 23346 23351 + 23272 23348 23267 + 23352 23348 23272 + 23348 23352 23349 + 23350 23349 23352 + 23352 23353 23350 + 23354 23350 23353 + 23350 23354 23355 + 23355 23351 23350 + 23272 23356 23352 + 23352 23356 23295 + 23295 23353 23352 + 23294 23353 23295 + 23353 23294 23354 + 23300 23354 23294 + 23355 23354 23300 + 23356 23272 23271 + 23271 23277 23356 + 23295 23356 23277 + 23300 23357 23355 + 23357 23300 23299 + 23305 23357 23299 + 23357 23305 23358 + 23358 23359 23357 + 23357 23359 23360 + 23360 23355 23357 + 23351 23355 23360 + 23360 23361 23351 + 23351 23361 23347 + 23361 23362 23347 + 23342 23347 23362 + 23363 23358 23305 + 23364 23358 23363 + 23358 23364 23365 + 23365 23359 23358 + 23359 23365 23366 + 23366 23360 23359 + 23361 23360 23366 + 23361 23366 23367 + 23367 23362 23361 + 23305 23304 23363 + 23310 23363 23304 + 23363 23310 23368 + 23368 23369 23363 + 23363 23369 23364 + 23370 23364 23369 + 23365 23364 23370 + 23368 23310 23309 + 23309 23371 23368 + 23368 23371 23372 + 23372 23373 23368 + 23369 23368 23373 + 23373 23374 23369 + 23369 23374 23370 + 23309 23375 23371 + 23371 23375 23376 + 23376 23377 23371 + 23371 23377 23372 + 23375 23309 23314 + 23314 23319 23375 + 23376 23375 23319 + 23319 23378 23376 + 23378 23379 23376 + 23380 23376 23379 + 23377 23376 23380 + 23377 23380 23381 + 23377 23381 23372 + 23323 23378 23319 + 23378 23323 23382 + 23378 23382 23383 + 23383 23379 23378 + 23384 23379 23383 + 23379 23384 23380 + 23380 23384 23385 + 23385 23386 23380 + 23380 23386 23381 + 23382 23323 23387 + 23387 23388 23382 + 23383 23382 23388 + 23388 23389 23383 + 23390 23383 23389 + 23383 23390 23384 + 23384 23390 23391 + 23391 23385 23384 + 23328 23387 23323 + 23392 23387 23328 + 23387 23392 23388 + 23389 23388 23392 + 23393 23389 23392 + 23389 23393 23394 + 23389 23394 23390 + 23391 23390 23394 + 23395 23391 23394 + 23396 23391 23395 + 23385 23391 23396 + 23328 23397 23392 + 23393 23392 23397 + 23398 23393 23397 + 23398 23399 23393 + 23399 23394 23393 + 23394 23399 23395 + 23400 23395 23399 + 23395 23400 23401 + 23395 23401 23396 + 23328 23327 23397 + 23397 23327 23402 + 23402 23403 23397 + 23398 23397 23403 + 23398 23403 23404 + 23405 23398 23404 + 23399 23398 23405 + 23399 23405 23400 + 23406 23400 23405 + 23401 23400 23406 + 23339 23402 23327 + 23407 23402 23339 + 23403 23402 23407 + 23407 23404 23403 + 23408 23404 23407 + 23405 23404 23408 + 23408 23406 23405 + 23409 23406 23408 + 23409 23410 23406 + 23406 23410 23401 + 23396 23401 23410 + 23411 23396 23410 + 23385 23396 23411 + 23339 23344 23407 + 23407 23344 23412 + 23412 23413 23407 + 23413 23414 23407 + 23414 23408 23407 + 23408 23414 23415 + 23408 23415 23409 + 23343 23412 23344 + 23416 23412 23343 + 23412 23416 23413 + 23416 23417 23413 + 23413 23417 23418 + 23413 23418 23415 + 23415 23414 23413 + 23416 23343 23419 + 23419 23420 23416 + 23417 23416 23420 + 23420 23421 23417 + 23421 23422 23417 + 23418 23417 23422 + 23422 23423 23418 + 23415 23418 23423 + 23409 23415 23423 + 23419 23343 23342 + 23342 23424 23419 + 23425 23419 23424 + 23420 23419 23425 + 23425 23426 23420 + 23420 23426 23427 + 23427 23421 23420 + 23362 23424 23342 + 23367 23424 23362 + 23424 23367 23425 + 23425 23367 23365 + 23365 23428 23425 + 23426 23425 23428 + 23428 23429 23426 + 23427 23426 23429 + 23429 23430 23427 + 23431 23427 23430 + 23421 23427 23431 + 23367 23366 23365 + 23370 23428 23365 + 23429 23428 23370 + 23370 23432 23429 + 23429 23432 23433 + 23433 23430 23429 + 23430 23433 23434 + 23430 23434 23431 + 23435 23431 23434 + 23421 23431 23435 + 23435 23422 23421 + 23422 23435 23423 + 23432 23370 23374 + 23374 23436 23432 + 23436 23437 23432 + 23437 23433 23432 + 23437 23438 23433 + 23438 23434 23433 + 23434 23438 23439 + 23439 23435 23434 + 23423 23435 23439 + 23439 23440 23423 + 23423 23440 23409 + 23374 23373 23436 + 23436 23373 23372 + 23372 23437 23436 + 23437 23372 23441 + 23438 23437 23441 + 23438 23441 23442 + 23442 23439 23438 + 23442 23440 23439 + 23440 23442 23410 + 23410 23409 23440 + 23441 23372 23381 + 23381 23411 23441 + 23442 23441 23411 + 23410 23442 23411 + 23386 23411 23381 + 23411 23386 23385 + 23443 23444 23445 + 23444 23443 23446 + 23444 23446 23447 + 23444 23447 23448 + 23449 23444 23448 + 23450 23443 23445 + 23443 23450 23451 + 23443 23451 23452 + 23443 23452 23446 + 23446 23452 23453 + 23446 23453 23454 + 23454 23447 23446 + 23448 23447 23454 + 23455 23450 23445 + 23450 23455 23456 + 23450 23456 23457 + 23450 23457 23451 + 23451 23457 23458 + 23451 23458 23459 + 23459 23452 23451 + 23452 23459 23453 + 23460 23455 23445 + 23455 23460 23461 + 23461 23462 23455 + 23462 23463 23455 + 23455 23463 23456 + 23445 23464 23460 + 23464 23465 23460 + 23460 23465 23466 + 23466 23467 23460 + 23460 23467 23461 + 23468 23461 23467 + 23462 23461 23468 + 23465 23464 23469 + 23469 23470 23465 + 23465 23470 23466 + 23470 23471 23466 + 23471 23472 23466 + 23467 23466 23472 + 23472 23473 23467 + 23467 23473 23468 + 23464 23474 23469 + 23475 23469 23474 + 23470 23469 23475 + 23475 23471 23470 + 23471 23475 23476 + 23476 23477 23471 + 23472 23471 23477 + 23477 23478 23472 + 23473 23472 23478 + 23479 23474 23464 + 23474 23479 23480 + 23480 23481 23474 + 23474 23481 23475 + 23475 23481 23482 + 23482 23476 23475 + 23483 23476 23482 + 23477 23476 23483 + 23464 23449 23479 + 23449 23448 23479 + 23480 23479 23448 + 23448 23484 23480 + 23480 23484 23485 + 23485 23486 23480 + 23481 23480 23486 + 23486 23482 23481 + 23482 23486 23487 + 23487 23488 23482 + 23482 23488 23483 + 23454 23484 23448 + 23484 23454 23489 + 23489 23485 23484 + 23485 23489 23490 + 23490 23491 23485 + 23485 23491 23487 + 23487 23486 23485 + 23492 23489 23454 + 23490 23489 23492 + 23492 23493 23490 + 23490 23493 23494 + 23494 23495 23490 + 23491 23490 23495 + 23495 23496 23491 + 23487 23491 23496 + 23454 23453 23492 + 23497 23492 23453 + 23492 23497 23498 + 23498 23493 23492 + 23493 23498 23499 + 23499 23494 23493 + 23453 23459 23497 + 23459 23458 23497 + 23458 23500 23497 + 23498 23497 23500 + 23500 23501 23498 + 23498 23501 23502 + 23502 23499 23498 + 23503 23499 23502 + 23494 23499 23503 + 23504 23500 23458 + 23500 23504 23505 + 23505 23501 23500 + 23501 23505 23506 + 23506 23502 23501 + 23502 23506 23507 + 23507 23508 23502 + 23502 23508 23503 + 23458 23509 23504 + 23510 23504 23509 + 23505 23504 23510 + 23510 23511 23505 + 23505 23511 23512 + 23512 23506 23505 + 23507 23506 23512 + 23457 23509 23458 + 23509 23457 23456 + 23456 23513 23509 + 23509 23513 23510 + 23514 23510 23513 + 23510 23514 23515 + 23515 23511 23510 + 23511 23515 23516 + 23516 23512 23511 + 23456 23463 23513 + 23463 23517 23513 + 23513 23517 23514 + 23518 23514 23517 + 23515 23514 23518 + 23518 23519 23515 + 23515 23519 23520 + 23520 23516 23515 + 23521 23516 23520 + 23512 23516 23521 + 23517 23463 23462 + 23462 23522 23517 + 23517 23522 23518 + 23523 23518 23522 + 23518 23523 23524 + 23524 23519 23518 + 23519 23524 23525 + 23525 23520 23519 + 23468 23522 23462 + 23522 23468 23523 + 23526 23523 23468 + 23524 23523 23526 + 23526 23527 23524 + 23524 23527 23528 + 23528 23525 23524 + 23529 23525 23528 + 23520 23525 23529 + 23529 23530 23520 + 23520 23530 23521 + 23468 23473 23526 + 23478 23526 23473 + 23526 23478 23531 + 23531 23527 23526 + 23527 23531 23532 + 23532 23528 23527 + 23528 23532 23533 + 23533 23534 23528 + 23528 23534 23529 + 23531 23478 23477 + 23477 23535 23531 + 23531 23535 23536 + 23536 23532 23531 + 23533 23532 23536 + 23536 23537 23533 + 23538 23533 23537 + 23538 23539 23533 + 23539 23534 23533 + 23529 23534 23539 + 23483 23535 23477 + 23535 23483 23540 + 23540 23536 23535 + 23536 23540 23541 + 23541 23537 23536 + 23542 23537 23541 + 23542 23538 23537 + 23543 23538 23542 + 23538 23543 23544 + 23539 23538 23544 + 23545 23540 23483 + 23541 23540 23545 + 23545 23546 23541 + 23541 23546 23547 + 23547 23548 23541 + 23548 23542 23541 + 23542 23548 23549 + 23542 23549 23543 + 23483 23488 23545 + 23550 23545 23488 + 23545 23550 23551 + 23551 23546 23545 + 23546 23551 23552 + 23552 23547 23546 + 23547 23552 23553 + 23553 23554 23547 + 23547 23554 23548 + 23488 23487 23550 + 23496 23550 23487 + 23551 23550 23496 + 23496 23555 23551 + 23551 23555 23556 + 23556 23552 23551 + 23553 23552 23556 + 23556 23557 23553 + 23553 23557 23558 + 23558 23559 23553 + 23554 23553 23559 + 23560 23555 23496 + 23555 23560 23561 + 23561 23556 23555 + 23556 23561 23562 + 23562 23557 23556 + 23557 23562 23563 + 23563 23558 23557 + 23496 23495 23560 + 23560 23495 23494 + 23494 23564 23560 + 23560 23564 23565 + 23565 23561 23560 + 23562 23561 23565 + 23565 23566 23562 + 23563 23562 23566 + 23503 23564 23494 + 23564 23503 23567 + 23567 23565 23564 + 23565 23567 23566 + 23567 23568 23566 + 23566 23568 23569 + 23569 23570 23566 + 23566 23570 23563 + 23571 23567 23503 + 23571 23572 23567 + 23572 23568 23567 + 23568 23572 23573 + 23573 23569 23568 + 23574 23569 23573 + 23570 23569 23574 + 23503 23508 23571 + 23575 23571 23508 + 23571 23575 23576 + 23576 23572 23571 + 23572 23576 23577 + 23577 23573 23572 + 23578 23573 23577 + 23573 23578 23574 + 23508 23507 23575 + 23579 23575 23507 + 23579 23580 23575 + 23580 23576 23575 + 23577 23576 23580 + 23580 23581 23577 + 23582 23577 23581 + 23577 23582 23578 + 23507 23583 23579 + 23584 23579 23583 + 23579 23584 23585 + 23585 23580 23579 + 23580 23585 23586 + 23586 23581 23580 + 23587 23581 23586 + 23581 23587 23582 + 23512 23583 23507 + 23521 23583 23512 + 23583 23521 23584 + 23588 23584 23521 + 23585 23584 23588 + 23588 23589 23585 + 23585 23589 23590 + 23590 23586 23585 + 23587 23586 23590 + 23521 23530 23588 + 23591 23588 23530 + 23588 23591 23592 + 23592 23589 23588 + 23589 23592 23593 + 23593 23594 23589 + 23589 23594 23590 + 23530 23529 23591 + 23539 23591 23529 + 23592 23591 23539 + 23539 23544 23592 + 23592 23544 23595 + 23595 23593 23592 + 23596 23593 23595 + 23596 23594 23593 + 23594 23596 23597 + 23597 23590 23594 + 23590 23597 23598 + 23590 23598 23587 + 23599 23595 23544 + 23600 23595 23599 + 23595 23600 23596 + 23597 23596 23600 + 23601 23597 23600 + 23598 23597 23601 + 23601 23602 23598 + 23587 23598 23602 + 23602 23603 23587 + 23603 23582 23587 + 23544 23543 23599 + 23599 23543 23549 + 23549 23604 23599 + 23605 23599 23604 + 23599 23605 23600 + 23600 23605 23606 + 23606 23607 23600 + 23600 23607 23601 + 23604 23549 23608 + 23609 23604 23608 + 23609 23610 23604 + 23604 23610 23605 + 23605 23610 23611 + 23611 23606 23605 + 23612 23606 23611 + 23606 23612 23607 + 23548 23608 23549 + 23554 23608 23548 + 23609 23608 23554 + 23554 23613 23609 + 23610 23609 23613 + 23613 23614 23610 + 23610 23614 23611 + 23559 23613 23554 + 23614 23613 23559 + 23559 23615 23614 + 23614 23615 23616 + 23616 23617 23614 + 23614 23617 23611 + 23615 23559 23558 + 23558 23618 23615 + 23616 23615 23618 + 23619 23616 23618 + 23620 23616 23619 + 23620 23617 23616 + 23617 23620 23621 + 23621 23611 23617 + 23618 23558 23563 + 23563 23622 23618 + 23618 23622 23623 + 23623 23624 23618 + 23618 23624 23619 + 23625 23619 23624 + 23625 23626 23619 + 23619 23626 23620 + 23621 23620 23626 + 23622 23563 23627 + 23627 23628 23622 + 23623 23622 23628 + 23629 23623 23628 + 23630 23623 23629 + 23630 23624 23623 + 23624 23630 23625 + 23631 23625 23630 + 23626 23625 23631 + 23570 23627 23563 + 23632 23627 23570 + 23632 23628 23627 + 23628 23632 23633 + 23633 23634 23628 + 23628 23634 23629 + 23570 23635 23632 + 23632 23635 23636 + 23637 23632 23636 + 23637 23633 23632 + 23638 23633 23637 + 23638 23634 23633 + 23634 23638 23639 + 23639 23629 23634 + 23574 23635 23570 + 23635 23574 23640 + 23640 23636 23635 + 23641 23636 23640 + 23636 23641 23642 + 23642 23643 23636 + 23636 23643 23637 + 23640 23574 23578 + 23578 23644 23640 + 23641 23640 23644 + 23644 23645 23641 + 23642 23641 23645 + 23645 23646 23642 + 23647 23642 23646 + 23642 23647 23648 + 23648 23643 23642 + 23603 23644 23578 + 23645 23644 23603 + 23603 23649 23645 + 23645 23649 23650 + 23650 23646 23645 + 23651 23646 23650 + 23646 23651 23647 + 23578 23582 23603 + 23649 23603 23602 + 23602 23652 23649 + 23650 23649 23652 + 23652 23653 23650 + 23653 23654 23650 + 23654 23651 23650 + 23647 23651 23654 + 23655 23647 23654 + 23648 23647 23655 + 23652 23602 23601 + 23601 23656 23652 + 23652 23656 23657 + 23657 23653 23652 + 23654 23653 23657 + 23654 23657 23658 + 23658 23659 23654 + 23654 23659 23655 + 23656 23601 23660 + 23660 23661 23656 + 23656 23661 23658 + 23658 23657 23656 + 23607 23660 23601 + 23662 23660 23607 + 23660 23662 23661 + 23661 23662 23663 + 23663 23664 23661 + 23661 23664 23658 + 23664 23665 23658 + 23665 23666 23658 + 23666 23659 23658 + 23607 23612 23662 + 23662 23612 23667 + 23667 23663 23662 + 23663 23667 23668 + 23665 23663 23668 + 23665 23664 23663 + 23612 23669 23667 + 23670 23667 23669 + 23668 23667 23670 + 23668 23670 23671 + 23671 23672 23668 + 23665 23668 23672 + 23665 23672 23673 + 23673 23666 23665 + 23659 23666 23673 + 23673 23655 23659 + 23611 23669 23612 + 23674 23669 23611 + 23669 23674 23670 + 23674 23675 23670 + 23675 23676 23670 + 23676 23671 23670 + 23677 23671 23676 + 23671 23677 23672 + 23672 23677 23678 + 23678 23673 23672 + 23655 23673 23678 + 23611 23621 23674 + 23674 23621 23679 + 23679 23675 23674 + 23675 23679 23680 + 23675 23680 23681 + 23681 23676 23675 + 23682 23676 23681 + 23676 23682 23677 + 23678 23677 23682 + 23648 23678 23682 + 23655 23678 23648 + 23683 23679 23621 + 23680 23679 23683 + 23683 23684 23680 + 23680 23684 23685 + 23685 23686 23680 + 23686 23681 23680 + 23682 23681 23686 + 23686 23687 23682 + 23682 23687 23648 + 23626 23683 23621 + 23631 23683 23626 + 23684 23683 23631 + 23684 23631 23688 + 23688 23685 23684 + 23685 23688 23629 + 23629 23639 23685 + 23685 23639 23689 + 23689 23686 23685 + 23687 23686 23689 + 23690 23687 23689 + 23687 23690 23648 + 23643 23648 23690 + 23630 23688 23631 + 23629 23688 23630 + 23690 23637 23643 + 23637 23690 23691 + 23637 23691 23638 + 23691 23639 23638 + 23691 23689 23639 + 23691 23690 23689 + 23692 23693 23694 + 23693 23695 23694 + 23696 23694 23695 + 23697 23694 23696 + 23694 23697 23692 + 23697 23698 23692 + 23699 23692 23698 + 23700 23692 23699 + 23695 23693 23701 + 23702 23695 23701 + 23695 23702 23703 + 23703 23704 23695 + 23695 23704 23696 + 23705 23702 23701 + 23703 23702 23705 + 23705 23706 23703 + 23703 23706 23707 + 23707 23708 23703 + 23704 23703 23708 + 23708 23709 23704 + 23696 23704 23709 + 23705 23701 23710 + 23711 23705 23710 + 23705 23711 23712 + 23712 23706 23705 + 23706 23712 23713 + 23713 23707 23706 + 23710 23701 23699 + 23699 23714 23710 + 23714 23715 23710 + 23715 23716 23710 + 23716 23717 23710 + 23718 23710 23717 + 23718 23711 23710 + 23701 23700 23699 + 23712 23711 23718 + 23718 23719 23712 + 23712 23719 23720 + 23720 23713 23712 + 23721 23713 23720 + 23707 23713 23721 + 23721 23722 23707 + 23707 23722 23723 + 23723 23708 23707 + 23709 23708 23723 + 23724 23719 23718 + 23719 23724 23725 + 23725 23720 23719 + 23720 23725 23726 + 23726 23727 23720 + 23720 23727 23721 + 23718 23728 23724 + 23724 23728 23729 + 23729 23730 23724 + 23724 23730 23731 + 23731 23725 23724 + 23726 23725 23731 + 23728 23718 23717 + 23729 23728 23717 + 23729 23717 23716 + 23732 23729 23716 + 23729 23732 23733 + 23733 23730 23729 + 23730 23733 23734 + 23734 23731 23730 + 23731 23734 23735 + 23735 23736 23731 + 23731 23736 23726 + 23737 23732 23716 + 23733 23732 23737 + 23737 23738 23733 + 23733 23738 23739 + 23739 23734 23733 + 23735 23734 23739 + 23740 23737 23716 + 23737 23740 23741 + 23741 23738 23737 + 23738 23741 23742 + 23742 23739 23738 + 23739 23742 23743 + 23743 23744 23739 + 23739 23744 23735 + 23716 23715 23740 + 23745 23740 23715 + 23741 23740 23745 + 23745 23746 23741 + 23741 23746 23747 + 23747 23742 23741 + 23743 23742 23747 + 23748 23745 23715 + 23745 23748 23749 + 23749 23746 23745 + 23746 23749 23750 + 23750 23747 23746 + 23747 23750 23751 + 23751 23752 23747 + 23747 23752 23743 + 23715 23714 23748 + 23753 23748 23714 + 23749 23748 23753 + 23753 23754 23749 + 23749 23754 23755 + 23755 23750 23749 + 23751 23750 23755 + 23756 23753 23714 + 23753 23756 23757 + 23757 23754 23753 + 23754 23757 23758 + 23758 23755 23754 + 23755 23758 23759 + 23759 23760 23755 + 23755 23760 23751 + 23714 23699 23756 + 23761 23756 23699 + 23757 23756 23761 + 23761 23762 23757 + 23757 23762 23763 + 23763 23758 23757 + 23759 23758 23763 + 23698 23761 23699 + 23761 23698 23764 + 23764 23762 23761 + 23762 23764 23765 + 23765 23763 23762 + 23763 23765 23766 + 23766 23767 23763 + 23763 23767 23759 + 23764 23698 23697 + 23697 23768 23764 + 23764 23768 23769 + 23769 23765 23764 + 23766 23765 23769 + 23769 23770 23766 + 23766 23770 23771 + 23771 23772 23766 + 23767 23766 23772 + 23696 23768 23697 + 23768 23696 23773 + 23773 23769 23768 + 23769 23773 23774 + 23774 23770 23769 + 23770 23774 23775 + 23775 23771 23770 + 23709 23773 23696 + 23774 23773 23709 + 23709 23776 23774 + 23774 23776 23777 + 23777 23775 23774 + 23778 23775 23777 + 23771 23775 23778 + 23778 23779 23771 + 23771 23779 23780 + 23780 23772 23771 + 23723 23776 23709 + 23776 23723 23781 + 23781 23777 23776 + 23777 23781 23782 + 23782 23783 23777 + 23777 23783 23778 + 23778 23783 23784 + 23784 23785 23778 + 23779 23778 23785 + 23786 23781 23723 + 23782 23781 23786 + 23786 23787 23782 + 23782 23787 23788 + 23788 23789 23782 + 23783 23782 23789 + 23789 23784 23783 + 23723 23722 23786 + 23790 23786 23722 + 23786 23790 23791 + 23791 23787 23786 + 23787 23791 23792 + 23792 23788 23787 + 23722 23721 23790 + 23793 23790 23721 + 23791 23790 23793 + 23793 23794 23791 + 23791 23794 23795 + 23795 23792 23791 + 23796 23792 23795 + 23788 23792 23796 + 23721 23727 23793 + 23797 23793 23727 + 23793 23797 23798 + 23798 23794 23793 + 23794 23798 23799 + 23799 23795 23794 + 23795 23799 23800 + 23800 23801 23795 + 23795 23801 23796 + 23727 23726 23797 + 23802 23797 23726 + 23798 23797 23802 + 23802 23803 23798 + 23798 23803 23804 + 23804 23799 23798 + 23800 23799 23804 + 23726 23736 23802 + 23805 23802 23736 + 23802 23805 23806 + 23806 23803 23802 + 23803 23806 23807 + 23807 23804 23803 + 23804 23807 23808 + 23808 23809 23804 + 23804 23809 23800 + 23736 23735 23805 + 23810 23805 23735 + 23806 23805 23810 + 23810 23811 23806 + 23806 23811 23812 + 23812 23807 23806 + 23808 23807 23812 + 23735 23744 23810 + 23813 23810 23744 + 23810 23813 23814 + 23814 23811 23810 + 23811 23814 23815 + 23815 23812 23811 + 23812 23815 23816 + 23816 23817 23812 + 23812 23817 23808 + 23744 23743 23813 + 23818 23813 23743 + 23814 23813 23818 + 23818 23819 23814 + 23814 23819 23820 + 23820 23815 23814 + 23816 23815 23820 + 23743 23752 23818 + 23821 23818 23752 + 23818 23821 23822 + 23822 23819 23818 + 23819 23822 23823 + 23823 23820 23819 + 23820 23823 23824 + 23824 23825 23820 + 23820 23825 23816 + 23752 23751 23821 + 23826 23821 23751 + 23822 23821 23826 + 23826 23827 23822 + 23822 23827 23828 + 23828 23823 23822 + 23824 23823 23828 + 23751 23760 23826 + 23829 23826 23760 + 23826 23829 23830 + 23830 23827 23826 + 23827 23830 23831 + 23831 23828 23827 + 23828 23831 23832 + 23832 23833 23828 + 23828 23833 23824 + 23760 23759 23829 + 23834 23829 23759 + 23830 23829 23834 + 23834 23835 23830 + 23830 23835 23836 + 23836 23831 23830 + 23832 23831 23836 + 23836 23837 23832 + 23838 23832 23837 + 23833 23832 23838 + 23759 23767 23834 + 23772 23834 23767 + 23834 23772 23780 + 23780 23835 23834 + 23835 23780 23839 + 23839 23836 23835 + 23836 23839 23840 + 23840 23837 23836 + 23837 23840 23841 + 23841 23842 23837 + 23837 23842 23838 + 23843 23839 23780 + 23840 23839 23843 + 23843 23844 23840 + 23840 23844 23845 + 23845 23841 23840 + 23846 23841 23845 + 23842 23841 23846 + 23780 23779 23843 + 23785 23843 23779 + 23843 23785 23847 + 23847 23844 23843 + 23844 23847 23848 + 23848 23849 23844 + 23844 23849 23845 + 23850 23845 23849 + 23851 23845 23850 + 23845 23851 23846 + 23847 23785 23784 + 23784 23852 23847 + 23847 23852 23853 + 23853 23848 23847 + 23854 23848 23853 + 23848 23854 23849 + 23849 23854 23850 + 23855 23850 23854 + 23856 23850 23855 + 23850 23856 23851 + 23857 23852 23784 + 23852 23857 23858 + 23858 23853 23852 + 23859 23853 23858 + 23853 23859 23854 + 23854 23859 23855 + 23860 23855 23859 + 23861 23855 23860 + 23855 23861 23856 + 23784 23789 23857 + 23857 23789 23788 + 23788 23862 23857 + 23857 23862 23863 + 23863 23858 23857 + 23864 23858 23863 + 23858 23864 23859 + 23859 23864 23860 + 23796 23862 23788 + 23862 23796 23865 + 23865 23863 23862 + 23866 23863 23865 + 23863 23866 23864 + 23860 23864 23866 + 23866 23867 23860 + 23868 23860 23867 + 23860 23868 23861 + 23869 23865 23796 + 23870 23865 23869 + 23865 23870 23866 + 23866 23870 23871 + 23871 23867 23866 + 23867 23871 23872 + 23867 23872 23868 + 23873 23868 23872 + 23861 23868 23873 + 23796 23801 23869 + 23874 23869 23801 + 23869 23874 23875 + 23875 23876 23869 + 23869 23876 23870 + 23871 23870 23876 + 23877 23871 23876 + 23872 23871 23877 + 23877 23878 23872 + 23872 23878 23873 + 23801 23800 23874 + 23879 23874 23800 + 23875 23874 23879 + 23879 23880 23875 + 23875 23880 23881 + 23882 23875 23881 + 23876 23875 23882 + 23882 23883 23876 + 23876 23883 23877 + 23800 23809 23879 + 23884 23879 23809 + 23879 23884 23885 + 23885 23880 23879 + 23880 23885 23886 + 23886 23881 23880 + 23809 23808 23884 + 23887 23884 23808 + 23885 23884 23887 + 23887 23888 23885 + 23886 23885 23888 + 23889 23886 23888 + 23890 23886 23889 + 23886 23890 23881 + 23808 23817 23887 + 23891 23887 23817 + 23887 23891 23892 + 23892 23888 23887 + 23888 23892 23893 + 23893 23894 23888 + 23888 23894 23889 + 23817 23816 23891 + 23895 23891 23816 + 23892 23891 23895 + 23895 23896 23892 + 23893 23892 23896 + 23896 23897 23893 + 23898 23893 23897 + 23893 23898 23894 + 23894 23898 23899 + 23899 23889 23894 + 23816 23825 23895 + 23900 23895 23825 + 23896 23895 23900 + 23900 23901 23896 + 23896 23901 23902 + 23902 23897 23896 + 23903 23897 23902 + 23897 23903 23898 + 23825 23824 23900 + 23904 23900 23824 + 23901 23900 23904 + 23904 23905 23901 + 23902 23901 23905 + 23906 23902 23905 + 23907 23902 23906 + 23902 23907 23903 + 23824 23833 23904 + 23838 23904 23833 + 23904 23838 23905 + 23905 23838 23908 + 23908 23909 23905 + 23905 23909 23906 + 23910 23906 23909 + 23906 23910 23911 + 23906 23911 23907 + 23912 23907 23911 + 23903 23907 23912 + 23842 23908 23838 + 23913 23908 23842 + 23909 23908 23913 + 23909 23913 23910 + 23910 23913 23914 + 23915 23910 23914 + 23911 23910 23915 + 23915 23916 23911 + 23911 23916 23912 + 23842 23914 23913 + 23846 23914 23842 + 23914 23846 23917 + 23917 23918 23914 + 23914 23918 23915 + 23919 23915 23918 + 23919 23916 23915 + 23916 23919 23920 + 23920 23912 23916 + 23921 23912 23920 + 23912 23921 23903 + 23898 23903 23921 + 23917 23846 23851 + 23851 23922 23917 + 23923 23917 23922 + 23918 23917 23923 + 23923 23924 23918 + 23918 23924 23919 + 23920 23919 23924 + 23924 23925 23920 + 23926 23920 23925 + 23920 23926 23921 + 23927 23922 23851 + 23922 23927 23928 + 23922 23928 23923 + 23923 23928 23929 + 23929 23930 23923 + 23924 23923 23930 + 23930 23925 23924 + 23851 23856 23927 + 23927 23856 23861 + 23861 23931 23927 + 23928 23927 23931 + 23931 23929 23928 + 23932 23929 23931 + 23929 23932 23933 + 23933 23930 23929 + 23925 23930 23933 + 23933 23934 23925 + 23925 23934 23926 + 23935 23926 23934 + 23921 23926 23935 + 23873 23931 23861 + 23931 23873 23932 + 23932 23873 23936 + 23936 23937 23932 + 23932 23937 23938 + 23933 23932 23938 + 23934 23933 23938 + 23938 23939 23934 + 23934 23939 23935 + 23878 23936 23873 + 23936 23878 23940 + 23941 23936 23940 + 23936 23941 23937 + 23937 23941 23942 + 23937 23942 23938 + 23943 23938 23942 + 23938 23943 23944 + 23944 23939 23938 + 23878 23877 23940 + 23940 23877 23883 + 23883 23945 23940 + 23941 23940 23945 + 23945 23946 23941 + 23941 23946 23942 + 23946 23947 23942 + 23942 23947 23943 + 23943 23947 23948 + 23944 23943 23948 + 23949 23945 23883 + 23945 23949 23947 + 23947 23946 23945 + 23883 23882 23949 + 23949 23882 23950 + 23950 23948 23949 + 23947 23949 23948 + 23881 23950 23882 + 23951 23950 23881 + 23950 23951 23948 + 23948 23951 23944 + 23944 23951 23890 + 23952 23944 23890 + 23939 23944 23952 + 23952 23935 23939 + 23953 23935 23952 + 23935 23953 23921 + 23881 23890 23951 + 23921 23953 23898 + 23953 23899 23898 + 23954 23899 23953 + 23889 23899 23954 + 23889 23954 23890 + 23890 23954 23952 + 23953 23952 23954 + 23955 23956 23957 + 23956 23958 23957 + 23958 23959 23957 + 23957 23959 23960 + 23960 23961 23957 + 23957 23961 23962 + 23963 23957 23962 + 23957 23963 23964 + 23964 23955 23957 + 23958 23956 23965 + 23965 23966 23958 + 23958 23966 23967 + 23959 23958 23967 + 23967 23968 23959 + 23959 23968 23960 + 23969 23960 23968 + 23961 23960 23969 + 23956 23970 23965 + 23971 23965 23970 + 23966 23965 23971 + 23971 23972 23966 + 23966 23972 23973 + 23973 23967 23966 + 23968 23967 23973 + 23973 23974 23968 + 23968 23974 23969 + 23975 23970 23956 + 23970 23975 23976 + 23976 23977 23970 + 23970 23977 23971 + 23971 23977 23978 + 23978 23979 23971 + 23972 23971 23979 + 23956 23980 23975 + 23981 23975 23980 + 23976 23975 23981 + 23981 23982 23976 + 23976 23982 23983 + 23983 23984 23976 + 23977 23976 23984 + 23984 23978 23977 + 23980 23964 23981 + 23964 23985 23981 + 23981 23985 23986 + 23986 23982 23981 + 23982 23986 23987 + 23987 23983 23982 + 23964 23988 23985 + 23986 23985 23988 + 23988 23989 23986 + 23986 23989 23990 + 23990 23987 23986 + 23991 23987 23990 + 23983 23987 23991 + 23964 23992 23988 + 23992 23993 23988 + 23988 23993 23989 + 23993 23994 23989 + 23989 23994 23995 + 23995 23990 23989 + 23996 23992 23964 + 23992 23996 23997 + 23992 23997 23993 + 23994 23993 23997 + 23997 23998 23994 + 23994 23998 23999 + 23999 23995 23994 + 24000 23995 23999 + 23990 23995 24000 + 23963 23996 23964 + 23996 23963 24001 + 24001 24002 23996 + 23996 24002 24003 + 23996 24003 23997 + 23997 24003 24004 + 24004 23998 23997 + 23998 24004 24005 + 24005 23999 23998 + 23963 24006 24001 + 24007 24001 24006 + 24002 24001 24007 + 24007 24008 24002 + 24002 24008 24004 + 24004 24003 24002 + 23962 24006 23963 + 24006 23962 24009 + 24009 24010 24006 + 24006 24010 24007 + 24007 24010 24011 + 24011 24012 24007 + 24008 24007 24012 + 24012 24013 24008 + 24004 24008 24013 + 24013 24005 24004 + 24009 23962 23961 + 23961 24014 24009 + 24009 24014 24015 + 24015 24016 24009 + 24010 24009 24016 + 24016 24011 24010 + 23969 24014 23961 + 24014 23969 24017 + 24017 24015 24014 + 24015 24017 24018 + 24018 24019 24015 + 24015 24019 24020 + 24020 24016 24015 + 24011 24016 24020 + 24021 24017 23969 + 24018 24017 24021 + 24021 24022 24018 + 24018 24022 24023 + 24023 24024 24018 + 24019 24018 24024 + 24024 24025 24019 + 24020 24019 24025 + 23969 23974 24021 + 24026 24021 23974 + 24021 24026 24027 + 24027 24022 24021 + 24022 24027 24028 + 24028 24023 24022 + 23974 23973 24026 + 24029 24026 23973 + 24027 24026 24029 + 24029 24030 24027 + 24027 24030 24031 + 24031 24028 24027 + 24032 24028 24031 + 24023 24028 24032 + 23973 23972 24029 + 23979 24029 23972 + 24029 23979 24033 + 24033 24030 24029 + 24030 24033 24034 + 24034 24031 24030 + 24031 24034 24035 + 24035 24036 24031 + 24031 24036 24032 + 24033 23979 23978 + 23978 24037 24033 + 24033 24037 24038 + 24038 24034 24033 + 24035 24034 24038 + 24038 24039 24035 + 24035 24039 24040 + 24040 24041 24035 + 24036 24035 24041 + 24042 24037 23978 + 24037 24042 24043 + 24043 24038 24037 + 24038 24043 24044 + 24044 24039 24038 + 24039 24044 24045 + 24045 24040 24039 + 23978 23984 24042 + 24042 23984 23983 + 23983 24046 24042 + 24042 24046 24047 + 24047 24043 24042 + 24044 24043 24047 + 24047 24048 24044 + 24044 24048 24049 + 24049 24045 24044 + 24050 24045 24049 + 24040 24045 24050 + 23991 24046 23983 + 24046 23991 24051 + 24051 24047 24046 + 24047 24051 24052 + 24052 24048 24047 + 24048 24052 24053 + 24053 24049 24048 + 24049 24053 24054 + 24054 24055 24049 + 24049 24055 24050 + 24056 24051 23991 + 24052 24051 24056 + 24056 24057 24052 + 24052 24057 24058 + 24058 24053 24052 + 24054 24053 24058 + 24058 24059 24054 + 24060 24054 24059 + 24055 24054 24060 + 23991 24061 24056 + 24062 24056 24061 + 24056 24062 24063 + 24063 24057 24056 + 24057 24063 24064 + 24064 24058 24057 + 24058 24064 24065 + 24065 24059 24058 + 23990 24061 23991 + 24000 24061 23990 + 24061 24000 24062 + 24066 24062 24000 + 24063 24062 24066 + 24066 24067 24063 + 24063 24067 24068 + 24068 24064 24063 + 24065 24064 24068 + 24000 24069 24066 + 24070 24066 24069 + 24066 24070 24071 + 24071 24067 24066 + 24067 24071 24072 + 24072 24068 24067 + 23999 24069 24000 + 24073 24069 23999 + 24069 24073 24070 + 24074 24070 24073 + 24071 24070 24074 + 24074 24075 24071 + 24071 24075 24076 + 24076 24072 24071 + 24077 24072 24076 + 24068 24072 24077 + 23999 24005 24073 + 24073 24005 24013 + 24013 24078 24073 + 24073 24078 24074 + 24079 24074 24078 + 24074 24079 24080 + 24080 24075 24074 + 24075 24080 24081 + 24081 24076 24075 + 24082 24078 24013 + 24078 24082 24079 + 24083 24079 24082 + 24080 24079 24083 + 24083 24084 24080 + 24080 24084 24085 + 24085 24081 24080 + 24086 24081 24085 + 24076 24081 24086 + 24013 24012 24082 + 24082 24012 24011 + 24011 24087 24082 + 24082 24087 24083 + 24088 24083 24087 + 24083 24088 24089 + 24089 24084 24083 + 24084 24089 24090 + 24090 24085 24084 + 24020 24087 24011 + 24087 24020 24088 + 24025 24088 24020 + 24089 24088 24025 + 24025 24091 24089 + 24089 24091 24092 + 24092 24090 24089 + 24093 24090 24092 + 24085 24090 24093 + 24093 24094 24085 + 24085 24094 24086 + 24095 24091 24025 + 24091 24095 24096 + 24096 24092 24091 + 24092 24096 24097 + 24097 24098 24092 + 24092 24098 24093 + 24025 24024 24095 + 24095 24024 24023 + 24023 24099 24095 + 24095 24099 24100 + 24100 24096 24095 + 24097 24096 24100 + 24100 24101 24097 + 24097 24101 24102 + 24102 24103 24097 + 24098 24097 24103 + 24032 24099 24023 + 24099 24032 24104 + 24104 24100 24099 + 24100 24104 24105 + 24105 24101 24100 + 24101 24105 24106 + 24106 24102 24101 + 24107 24104 24032 + 24105 24104 24107 + 24107 24108 24105 + 24105 24108 24109 + 24109 24106 24105 + 24110 24106 24109 + 24102 24106 24110 + 24032 24036 24107 + 24041 24107 24036 + 24107 24041 24111 + 24111 24108 24107 + 24108 24111 24112 + 24112 24109 24108 + 24113 24109 24112 + 24109 24113 24110 + 24114 24110 24113 + 24115 24110 24114 + 24110 24115 24102 + 24111 24041 24040 + 24040 24116 24111 + 24111 24116 24117 + 24117 24112 24111 + 24118 24112 24117 + 24112 24118 24113 + 24113 24118 24119 + 24119 24120 24113 + 24113 24120 24114 + 24050 24116 24040 + 24116 24050 24121 + 24121 24117 24116 + 24122 24117 24121 + 24117 24122 24118 + 24119 24118 24122 + 24122 24123 24119 + 24124 24119 24123 + 24124 24120 24119 + 24125 24121 24050 + 24126 24121 24125 + 24121 24126 24122 + 24122 24126 24127 + 24127 24123 24122 + 24128 24123 24127 + 24123 24128 24124 + 24129 24124 24128 + 24120 24124 24129 + 24050 24055 24125 + 24060 24125 24055 + 24060 24130 24125 + 24125 24130 24126 + 24126 24130 24131 + 24131 24127 24126 + 24132 24127 24131 + 24127 24132 24128 + 24130 24060 24133 + 24133 24131 24130 + 24134 24131 24133 + 24131 24134 24132 + 24135 24132 24134 + 24128 24132 24135 + 24135 24136 24128 + 24128 24136 24137 + 24137 24129 24128 + 24138 24133 24060 + 24139 24133 24138 + 24133 24139 24134 + 24134 24139 24140 + 24140 24141 24134 + 24134 24141 24135 + 24142 24135 24141 + 24136 24135 24142 + 24059 24138 24060 + 24143 24138 24059 + 24138 24143 24144 + 24144 24145 24138 + 24138 24145 24139 + 24140 24139 24145 + 24145 24146 24140 + 24147 24140 24146 + 24147 24141 24140 + 24141 24147 24142 + 24059 24065 24143 + 24148 24143 24065 + 24144 24143 24148 + 24148 24149 24144 + 24150 24144 24149 + 24145 24144 24150 + 24150 24146 24145 + 24146 24150 24151 + 24151 24152 24146 + 24146 24152 24147 + 24065 24153 24148 + 24153 24154 24148 + 24155 24148 24154 + 24149 24148 24155 + 24068 24153 24065 + 24077 24153 24068 + 24153 24077 24156 + 24156 24154 24153 + 24157 24154 24156 + 24154 24157 24155 + 24155 24157 24158 + 24159 24155 24158 + 24149 24155 24159 + 24160 24156 24077 + 24157 24156 24160 + 24160 24158 24157 + 24158 24160 24161 + 24161 24162 24158 + 24158 24162 24163 + 24163 24164 24158 + 24158 24164 24159 + 24077 24165 24160 + 24161 24160 24165 + 24165 24086 24161 + 24166 24161 24086 + 24162 24161 24166 + 24166 24167 24162 + 24163 24162 24167 + 24076 24165 24077 + 24086 24165 24076 + 24086 24094 24166 + 24168 24166 24094 + 24166 24168 24169 + 24169 24167 24166 + 24167 24169 24170 + 24170 24171 24167 + 24167 24171 24163 + 24094 24093 24168 + 24172 24168 24093 + 24169 24168 24172 + 24172 24173 24169 + 24170 24169 24173 + 24174 24170 24173 + 24175 24170 24174 + 24170 24175 24171 + 24171 24175 24176 + 24176 24163 24171 + 24093 24098 24172 + 24103 24172 24098 + 24172 24103 24177 + 24177 24173 24172 + 24173 24177 24178 + 24178 24179 24173 + 24173 24179 24174 + 24180 24174 24179 + 24180 24181 24174 + 24174 24181 24175 + 24176 24175 24181 + 24177 24103 24102 + 24102 24115 24177 + 24177 24115 24182 + 24182 24183 24177 + 24183 24178 24177 + 24184 24178 24183 + 24178 24184 24179 + 24179 24184 24180 + 24180 24184 24185 + 24186 24180 24185 + 24181 24180 24186 + 24114 24182 24115 + 24187 24182 24114 + 24182 24187 24188 + 24188 24183 24182 + 24188 24185 24183 + 24183 24185 24184 + 24189 24187 24114 + 24190 24187 24189 + 24188 24187 24190 + 24190 24191 24188 + 24185 24188 24191 + 24191 24192 24185 + 24185 24192 24186 + 24189 24114 24193 + 24193 24194 24189 + 24194 24195 24189 + 24195 24196 24189 + 24196 24190 24189 + 24197 24190 24196 + 24191 24190 24197 + 24120 24193 24114 + 24129 24193 24120 + 24194 24193 24129 + 24194 24129 24137 + 24137 24195 24194 + 24198 24195 24137 + 24195 24198 24197 + 24197 24196 24195 + 24198 24137 24136 + 24136 24199 24198 + 24197 24198 24199 + 24200 24197 24199 + 24200 24191 24197 + 24191 24200 24201 + 24201 24192 24191 + 24192 24201 24202 + 24202 24186 24192 + 24186 24202 24203 + 24186 24203 24181 + 24142 24199 24136 + 24199 24142 24204 + 24204 24205 24199 + 24199 24205 24200 + 24201 24200 24205 + 24205 24206 24201 + 24201 24206 24207 + 24207 24202 24201 + 24203 24202 24207 + 24207 24208 24203 + 24181 24203 24208 + 24208 24176 24181 + 24204 24142 24147 + 24147 24152 24204 + 24209 24204 24152 + 24204 24209 24206 + 24206 24205 24204 + 24152 24151 24209 + 24209 24151 24210 + 24210 24211 24209 + 24206 24209 24211 + 24211 24207 24206 + 24207 24211 24212 + 24212 24208 24207 + 24208 24212 24213 + 24213 24176 24208 + 24163 24176 24213 + 24213 24164 24163 + 24214 24210 24151 + 24214 24215 24210 + 24210 24215 24212 + 24212 24211 24210 + 24151 24150 24214 + 24214 24150 24149 + 24149 24216 24214 + 24215 24214 24216 + 24216 24217 24215 + 24215 24217 24213 + 24213 24212 24215 + 24159 24216 24149 + 24217 24216 24159 + 24217 24159 24164 + 24164 24213 24217 + 24218 24219 24220 + 24218 24221 24219 + 24222 24219 24221 + 24219 24222 24223 + 24220 24224 24218 + 24225 24218 24224 + 24225 24226 24218 + 24226 24221 24218 + 24227 24221 24226 + 24227 24222 24221 + 24228 24224 24220 + 24229 24224 24228 + 24224 24229 24225 + 24230 24225 24229 + 24225 24230 24231 + 24225 24231 24226 + 24228 24220 24232 + 24232 24233 24228 + 24234 24228 24233 + 24234 24229 24228 + 24235 24229 24234 + 24229 24235 24230 + 24236 24230 24235 + 24231 24230 24236 + 24232 24220 24223 + 24237 24232 24223 + 24238 24232 24237 + 24238 24233 24232 + 24233 24238 24239 + 24239 24240 24233 + 24233 24240 24234 + 24241 24234 24240 + 24234 24241 24235 + 24223 24242 24237 + 24242 24243 24237 + 24244 24237 24243 + 24244 24245 24237 + 24237 24245 24238 + 24238 24245 24246 + 24246 24239 24238 + 24247 24242 24223 + 24248 24242 24247 + 24242 24248 24249 + 24249 24243 24242 + 24250 24243 24249 + 24243 24250 24244 + 24251 24244 24250 + 24245 24244 24251 + 24223 24252 24247 + 24253 24247 24252 + 24248 24247 24253 + 24253 24254 24248 + 24249 24248 24254 + 24254 24255 24249 + 24256 24249 24255 + 24249 24256 24250 + 24252 24223 24257 + 24252 24257 24258 + 24258 24259 24252 + 24252 24259 24253 + 24260 24253 24259 + 24254 24253 24260 + 24257 24223 24222 + 24222 24261 24257 + 24257 24261 24262 + 24258 24257 24262 + 24263 24258 24262 + 24258 24263 24264 + 24264 24259 24258 + 24259 24264 24260 + 24222 24227 24261 + 24261 24227 24265 + 24265 24262 24261 + 24266 24262 24265 + 24262 24266 24263 + 24267 24263 24266 + 24264 24263 24267 + 24267 24268 24264 + 24260 24264 24268 + 24265 24227 24226 + 24269 24265 24226 + 24265 24269 24266 + 24266 24269 24270 + 24270 24271 24266 + 24266 24271 24272 + 24272 24267 24266 + 24273 24267 24272 + 24273 24268 24267 + 24226 24231 24269 + 24270 24269 24231 + 24231 24274 24270 + 24274 24275 24270 + 24276 24270 24275 + 24270 24276 24277 + 24277 24271 24270 + 24271 24277 24278 + 24278 24272 24271 + 24236 24274 24231 + 24236 24279 24274 + 24274 24279 24280 + 24280 24275 24274 + 24281 24275 24280 + 24275 24281 24276 + 24281 24282 24276 + 24277 24276 24282 + 24283 24279 24236 + 24279 24283 24284 + 24284 24280 24279 + 24285 24280 24284 + 24280 24285 24281 + 24286 24281 24285 + 24281 24286 24282 + 24287 24283 24236 + 24288 24283 24287 + 24283 24288 24289 + 24289 24284 24283 + 24290 24284 24289 + 24284 24290 24285 + 24235 24287 24236 + 24291 24287 24235 + 24287 24291 24288 + 24288 24291 24292 + 24292 24293 24288 + 24289 24288 24293 + 24293 24294 24289 + 24295 24289 24294 + 24289 24295 24290 + 24235 24241 24291 + 24241 24296 24291 + 24296 24292 24291 + 24246 24292 24296 + 24293 24292 24246 + 24246 24297 24293 + 24293 24297 24298 + 24298 24294 24293 + 24299 24294 24298 + 24294 24299 24295 + 24240 24296 24241 + 24296 24240 24239 + 24296 24239 24246 + 24300 24295 24299 + 24290 24295 24300 + 24300 24301 24290 + 24301 24285 24290 + 24301 24302 24285 + 24302 24286 24285 + 24303 24286 24302 + 24286 24303 24304 + 24286 24304 24282 + 24299 24305 24300 + 24306 24300 24305 + 24301 24300 24306 + 24306 24307 24301 + 24301 24307 24302 + 24307 24303 24302 + 24303 24307 24308 + 24308 24309 24303 + 24303 24309 24304 + 24310 24305 24299 + 24311 24305 24310 + 24305 24311 24306 + 24312 24306 24311 + 24307 24306 24312 + 24312 24308 24307 + 24312 24313 24308 + 24308 24313 24314 + 24314 24309 24308 + 24304 24309 24314 + 24299 24315 24310 + 24310 24315 24316 + 24316 24317 24310 + 24318 24310 24317 + 24310 24318 24311 + 24298 24315 24299 + 24315 24298 24319 + 24319 24316 24315 + 24316 24319 24320 + 24320 24321 24316 + 24316 24321 24322 + 24322 24317 24316 + 24323 24317 24322 + 24317 24323 24318 + 24324 24319 24298 + 24320 24319 24324 + 24324 24325 24320 + 24320 24325 24326 + 24326 24327 24320 + 24321 24320 24327 + 24327 24328 24321 + 24322 24321 24328 + 24298 24297 24324 + 24329 24324 24297 + 24324 24329 24330 + 24330 24325 24324 + 24325 24330 24331 + 24331 24326 24325 + 24297 24246 24329 + 24332 24329 24246 + 24330 24329 24332 + 24332 24333 24330 + 24330 24333 24334 + 24334 24331 24330 + 24335 24331 24334 + 24326 24331 24335 + 24336 24332 24246 + 24337 24332 24336 + 24332 24337 24333 + 24333 24337 24338 + 24338 24334 24333 + 24334 24338 24339 + 24339 24340 24334 + 24334 24340 24335 + 24245 24336 24246 + 24251 24336 24245 + 24251 24341 24336 + 24336 24341 24337 + 24337 24341 24342 + 24342 24338 24337 + 24339 24338 24342 + 24342 24343 24339 + 24344 24339 24343 + 24340 24339 24344 + 24341 24251 24345 + 24345 24342 24341 + 24342 24345 24346 + 24346 24343 24342 + 24343 24346 24347 + 24347 24348 24343 + 24343 24348 24344 + 24345 24251 24250 + 24250 24349 24345 + 24346 24345 24349 + 24349 24350 24346 + 24347 24346 24350 + 24350 24351 24347 + 24352 24347 24351 + 24348 24347 24352 + 24353 24349 24250 + 24349 24353 24354 + 24354 24350 24349 + 24350 24354 24355 + 24355 24351 24350 + 24351 24355 24356 + 24356 24357 24351 + 24351 24357 24352 + 24250 24256 24353 + 24358 24353 24256 + 24354 24353 24358 + 24358 24359 24354 + 24355 24354 24359 + 24359 24360 24355 + 24356 24355 24360 + 24360 24361 24356 + 24362 24356 24361 + 24357 24356 24362 + 24256 24363 24358 + 24364 24358 24363 + 24359 24358 24364 + 24365 24359 24364 + 24359 24365 24366 + 24366 24360 24359 + 24360 24366 24367 + 24367 24361 24360 + 24255 24363 24256 + 24368 24363 24255 + 24363 24368 24364 + 24369 24364 24368 + 24365 24364 24369 + 24369 24370 24365 + 24366 24365 24370 + 24370 24371 24366 + 24367 24366 24371 + 24255 24372 24368 + 24368 24372 24373 + 24373 24374 24368 + 24368 24374 24369 + 24375 24369 24374 + 24369 24375 24376 + 24376 24370 24369 + 24372 24255 24254 + 24254 24377 24372 + 24373 24372 24377 + 24377 24378 24373 + 24379 24373 24378 + 24374 24373 24379 + 24379 24380 24374 + 24374 24380 24375 + 24381 24375 24380 + 24376 24375 24381 + 24260 24377 24254 + 24377 24260 24382 + 24382 24378 24377 + 24378 24382 24383 + 24383 24384 24378 + 24378 24384 24379 + 24379 24384 24385 + 24385 24386 24379 + 24380 24379 24386 + 24268 24382 24260 + 24383 24382 24268 + 24268 24273 24383 + 24383 24273 24387 + 24387 24388 24383 + 24384 24383 24388 + 24388 24385 24384 + 24385 24388 24389 + 24389 24390 24385 + 24385 24390 24391 + 24391 24386 24385 + 24272 24387 24273 + 24392 24387 24272 + 24387 24392 24389 + 24389 24388 24387 + 24272 24278 24392 + 24392 24278 24393 + 24393 24394 24392 + 24389 24392 24394 + 24394 24395 24389 + 24395 24396 24389 + 24390 24389 24396 + 24396 24397 24390 + 24391 24390 24397 + 24393 24278 24277 + 24277 24398 24393 + 24399 24393 24398 + 24394 24393 24399 + 24394 24399 24400 + 24400 24395 24394 + 24401 24395 24400 + 24395 24401 24402 + 24402 24396 24395 + 24402 24397 24396 + 24282 24398 24277 + 24403 24398 24282 + 24398 24403 24399 + 24400 24399 24403 + 24403 24404 24400 + 24401 24400 24404 + 24404 24405 24401 + 24402 24401 24405 + 24282 24406 24403 + 24403 24406 24407 + 24407 24404 24403 + 24407 24405 24404 + 24405 24407 24408 + 24408 24409 24405 + 24405 24409 24402 + 24406 24282 24304 + 24304 24314 24406 + 24407 24406 24314 + 24408 24407 24314 + 24314 24313 24408 + 24313 24410 24408 + 24411 24408 24410 + 24408 24411 24409 + 24409 24411 24412 + 24412 24413 24409 + 24409 24413 24402 + 24413 24414 24402 + 24397 24402 24414 + 24415 24410 24313 + 24410 24415 24416 + 24410 24416 24411 + 24411 24416 24417 + 24417 24412 24411 + 24418 24412 24417 + 24413 24412 24418 + 24313 24312 24415 + 24415 24312 24311 + 24311 24419 24415 + 24416 24415 24419 + 24419 24420 24416 + 24416 24420 24417 + 24421 24417 24420 + 24417 24421 24422 + 24422 24423 24417 + 24417 24423 24418 + 24424 24419 24311 + 24419 24424 24420 + 24420 24424 24421 + 24323 24421 24424 + 24422 24421 24323 + 24323 24425 24422 + 24422 24425 24426 + 24426 24427 24422 + 24423 24422 24427 + 24311 24318 24424 + 24424 24318 24323 + 24322 24425 24323 + 24425 24322 24428 + 24428 24426 24425 + 24426 24428 24429 + 24429 24430 24426 + 24426 24430 24431 + 24431 24427 24426 + 24432 24427 24431 + 24427 24432 24423 + 24418 24423 24432 + 24328 24428 24322 + 24429 24428 24328 + 24328 24433 24429 + 24434 24429 24433 + 24430 24429 24434 + 24434 24435 24430 + 24430 24435 24436 + 24436 24431 24430 + 24437 24431 24436 + 24431 24437 24432 + 24438 24433 24328 + 24433 24438 24439 + 24439 24440 24433 + 24433 24440 24434 + 24441 24434 24440 + 24435 24434 24441 + 24328 24327 24438 + 24438 24327 24326 + 24326 24442 24438 + 24438 24442 24443 + 24443 24439 24438 + 24444 24439 24443 + 24440 24439 24444 + 24444 24445 24440 + 24440 24445 24441 + 24335 24442 24326 + 24442 24335 24446 + 24446 24443 24442 + 24443 24446 24447 + 24447 24448 24443 + 24443 24448 24444 + 24449 24444 24448 + 24445 24444 24449 + 24446 24335 24340 + 24340 24450 24446 + 24447 24446 24450 + 24450 24451 24447 + 24452 24447 24451 + 24448 24447 24452 + 24452 24453 24448 + 24448 24453 24449 + 24344 24450 24340 + 24450 24344 24454 + 24454 24451 24450 + 24451 24454 24455 + 24455 24456 24451 + 24451 24456 24452 + 24457 24452 24456 + 24453 24452 24457 + 24454 24344 24348 + 24348 24458 24454 + 24455 24454 24458 + 24458 24459 24455 + 24460 24455 24459 + 24456 24455 24460 + 24460 24461 24456 + 24456 24461 24457 + 24352 24458 24348 + 24458 24352 24462 + 24462 24459 24458 + 24459 24462 24463 + 24463 24464 24459 + 24459 24464 24460 + 24465 24460 24464 + 24461 24460 24465 + 24466 24462 24352 + 24463 24462 24466 + 24466 24467 24463 + 24468 24463 24467 + 24464 24463 24468 + 24468 24469 24464 + 24464 24469 24465 + 24352 24357 24466 + 24362 24466 24357 + 24466 24362 24470 + 24470 24467 24466 + 24467 24470 24471 + 24471 24472 24467 + 24467 24472 24468 + 24473 24468 24472 + 24469 24468 24473 + 24470 24362 24474 + 24474 24475 24470 + 24471 24470 24475 + 24475 24476 24471 + 24477 24471 24476 + 24472 24471 24477 + 24477 24478 24472 + 24472 24478 24473 + 24361 24474 24362 + 24479 24474 24361 + 24474 24479 24480 + 24480 24475 24474 + 24475 24480 24481 + 24481 24476 24475 + 24476 24481 24482 + 24482 24483 24476 + 24476 24483 24477 + 24361 24367 24479 + 24479 24367 24484 + 24484 24485 24479 + 24480 24479 24485 + 24485 24486 24480 + 24481 24480 24486 + 24486 24487 24481 + 24482 24481 24487 + 24371 24484 24367 + 24488 24484 24371 + 24484 24488 24489 + 24489 24485 24484 + 24485 24489 24490 + 24490 24486 24485 + 24486 24490 24491 + 24491 24487 24486 + 24371 24492 24488 + 24488 24492 24493 + 24493 24494 24488 + 24489 24488 24494 + 24494 24495 24489 + 24490 24489 24495 + 24492 24371 24370 + 24370 24376 24492 + 24492 24376 24496 + 24496 24493 24492 + 24497 24493 24496 + 24493 24497 24498 + 24498 24494 24493 + 24494 24498 24499 + 24499 24495 24494 + 24381 24496 24376 + 24500 24496 24381 + 24496 24500 24497 + 24497 24500 24501 + 24501 24502 24497 + 24498 24497 24502 + 24502 24503 24498 + 24499 24498 24503 + 24381 24504 24500 + 24500 24504 24505 + 24505 24501 24500 + 24506 24501 24505 + 24501 24506 24507 + 24507 24502 24501 + 24502 24507 24508 + 24508 24503 24502 + 24504 24381 24509 + 24509 24510 24504 + 24505 24504 24510 + 24510 24511 24505 + 24512 24505 24511 + 24505 24512 24506 + 24380 24509 24381 + 24386 24509 24380 + 24510 24509 24386 + 24386 24391 24510 + 24510 24391 24513 + 24513 24511 24510 + 24514 24511 24513 + 24511 24514 24512 + 24515 24512 24514 + 24506 24512 24515 + 24515 24516 24506 + 24507 24506 24516 + 24516 24517 24507 + 24508 24507 24517 + 24397 24513 24391 + 24414 24513 24397 + 24513 24414 24514 + 24514 24414 24413 + 24413 24518 24514 + 24514 24518 24515 + 24519 24515 24518 + 24515 24519 24520 + 24520 24516 24515 + 24516 24520 24521 + 24521 24517 24516 + 24418 24518 24413 + 24518 24418 24519 + 24432 24519 24418 + 24520 24519 24432 + 24432 24437 24520 + 24521 24520 24437 + 24437 24522 24521 + 24523 24521 24522 + 24517 24521 24523 + 24523 24524 24517 + 24517 24524 24508 + 24525 24508 24524 + 24503 24508 24525 + 24436 24522 24437 + 24522 24436 24526 + 24526 24527 24522 + 24522 24527 24523 + 24528 24523 24527 + 24524 24523 24528 + 24528 24529 24524 + 24524 24529 24525 + 24526 24436 24435 + 24435 24530 24526 + 24531 24526 24530 + 24527 24526 24531 + 24531 24532 24527 + 24527 24532 24528 + 24533 24528 24532 + 24529 24528 24533 + 24441 24530 24435 + 24530 24441 24534 + 24534 24535 24530 + 24530 24535 24531 + 24536 24531 24535 + 24532 24531 24536 + 24536 24537 24532 + 24532 24537 24533 + 24534 24441 24445 + 24445 24538 24534 + 24539 24534 24538 + 24535 24534 24539 + 24539 24540 24535 + 24535 24540 24536 + 24541 24536 24540 + 24537 24536 24541 + 24449 24538 24445 + 24538 24449 24542 + 24542 24543 24538 + 24538 24543 24539 + 24544 24539 24543 + 24540 24539 24544 + 24544 24545 24540 + 24540 24545 24541 + 24542 24449 24453 + 24453 24546 24542 + 24547 24542 24546 + 24543 24542 24547 + 24547 24548 24543 + 24543 24548 24544 + 24549 24544 24548 + 24545 24544 24549 + 24457 24546 24453 + 24546 24457 24550 + 24550 24551 24546 + 24546 24551 24547 + 24552 24547 24551 + 24548 24547 24552 + 24552 24553 24548 + 24548 24553 24549 + 24550 24457 24461 + 24461 24554 24550 + 24555 24550 24554 + 24551 24550 24555 + 24555 24556 24551 + 24551 24556 24552 + 24557 24552 24556 + 24553 24552 24557 + 24465 24554 24461 + 24554 24465 24558 + 24558 24559 24554 + 24554 24559 24555 + 24560 24555 24559 + 24556 24555 24560 + 24560 24561 24556 + 24556 24561 24557 + 24558 24465 24469 + 24469 24562 24558 + 24563 24558 24562 + 24559 24558 24563 + 24563 24564 24559 + 24559 24564 24560 + 24565 24560 24564 + 24565 24561 24560 + 24473 24562 24469 + 24562 24473 24566 + 24566 24567 24562 + 24562 24567 24563 + 24568 24563 24567 + 24568 24569 24563 + 24569 24564 24563 + 24564 24569 24565 + 24566 24473 24478 + 24478 24570 24566 + 24571 24566 24570 + 24571 24567 24566 + 24571 24572 24567 + 24567 24572 24568 + 24568 24572 24573 + 24573 24574 24568 + 24574 24569 24568 + 24574 24565 24569 + 24575 24570 24478 + 24576 24570 24575 + 24576 24577 24570 + 24570 24577 24571 + 24578 24571 24577 + 24572 24571 24578 + 24578 24573 24572 + 24574 24573 24578 + 24579 24574 24578 + 24574 24579 24565 + 24478 24477 24575 + 24575 24477 24483 + 24483 24580 24575 + 24580 24581 24575 + 24581 24576 24575 + 24582 24576 24581 + 24577 24576 24582 + 24582 24578 24577 + 24583 24580 24483 + 24584 24580 24583 + 24584 24581 24580 + 24581 24584 24585 + 24585 24582 24581 + 24582 24585 24586 + 24578 24582 24586 + 24483 24482 24583 + 24583 24482 24587 + 24587 24588 24583 + 24584 24583 24588 + 24588 24589 24584 + 24585 24584 24589 + 24585 24589 24590 + 24591 24585 24590 + 24585 24591 24586 + 24487 24587 24482 + 24592 24587 24487 + 24587 24592 24593 + 24593 24588 24587 + 24590 24588 24593 + 24590 24589 24588 + 24487 24491 24592 + 24592 24491 24594 + 24594 24595 24592 + 24593 24592 24595 + 24595 24596 24593 + 24590 24593 24596 + 24596 24597 24590 + 24591 24590 24597 + 24594 24491 24490 + 24490 24598 24594 + 24599 24594 24598 + 24594 24599 24600 + 24600 24595 24594 + 24595 24600 24601 + 24601 24596 24595 + 24602 24596 24601 + 24602 24597 24596 + 24591 24597 24602 + 24495 24598 24490 + 24603 24598 24495 + 24598 24603 24599 + 24599 24603 24604 + 24604 24605 24599 + 24600 24599 24605 + 24605 24606 24600 + 24601 24600 24606 + 24606 24607 24601 + 24602 24601 24607 + 24495 24499 24603 + 24603 24499 24608 + 24608 24604 24603 + 24609 24604 24608 + 24604 24609 24610 + 24610 24605 24604 + 24605 24610 24611 + 24611 24606 24605 + 24606 24611 24612 + 24612 24607 24606 + 24503 24608 24499 + 24525 24608 24503 + 24608 24525 24609 + 24609 24525 24529 + 24529 24613 24609 + 24610 24609 24613 + 24613 24614 24610 + 24611 24610 24614 + 24614 24615 24611 + 24612 24611 24615 + 24533 24613 24529 + 24613 24533 24616 + 24616 24614 24613 + 24614 24616 24617 + 24617 24615 24614 + 24615 24617 24618 + 24618 24619 24615 + 24615 24619 24612 + 24616 24533 24537 + 24537 24620 24616 + 24617 24616 24620 + 24620 24621 24617 + 24617 24621 24622 + 24622 24618 24617 + 24622 24623 24618 + 24623 24624 24618 + 24619 24618 24624 + 24541 24620 24537 + 24620 24541 24625 + 24625 24621 24620 + 24621 24625 24626 + 24626 24622 24621 + 24622 24626 24627 + 24627 24623 24622 + 24623 24627 24628 + 24628 24586 24623 + 24586 24624 24623 + 24625 24541 24545 + 24545 24629 24625 + 24626 24625 24629 + 24629 24630 24626 + 24630 24631 24626 + 24631 24627 24626 + 24628 24627 24631 + 24632 24628 24631 + 24628 24632 24578 + 24586 24628 24578 + 24549 24629 24545 + 24629 24549 24633 + 24633 24630 24629 + 24630 24633 24634 + 24634 24631 24630 + 24631 24634 24632 + 24632 24634 24635 + 24579 24632 24635 + 24632 24579 24578 + 24633 24549 24553 + 24553 24636 24633 + 24634 24633 24636 + 24636 24635 24634 + 24637 24635 24636 + 24635 24637 24579 + 24579 24637 24638 + 24579 24638 24565 + 24565 24638 24561 + 24557 24636 24553 + 24637 24636 24557 + 24637 24557 24561 + 24561 24638 24637 + 24639 24624 24586 + 24624 24639 24619 + 24619 24639 24640 + 24640 24612 24619 + 24640 24641 24612 + 24641 24607 24612 + 24586 24642 24639 + 24642 24640 24639 + 24642 24643 24640 + 24643 24641 24640 + 24643 24602 24641 + 24607 24641 24602 + 24643 24642 24586 + 24591 24643 24586 + 24643 24591 24602 + 24644 24645 24646 + 24647 24645 24644 + 24648 24645 24647 + 24645 24648 24649 + 24649 24650 24645 + 24651 24644 24646 + 24652 24644 24651 + 24644 24652 24653 + 24644 24653 24647 + 24654 24647 24653 + 24655 24647 24654 + 24647 24655 24648 + 24646 24656 24651 + 24656 24657 24651 + 24657 24658 24651 + 24658 24659 24651 + 24660 24651 24659 + 24660 24661 24651 + 24651 24661 24652 + 24662 24656 24646 + 24656 24662 24663 + 24657 24656 24663 + 24664 24657 24663 + 24665 24657 24664 + 24657 24665 24666 + 24666 24658 24657 + 24646 24667 24662 + 24668 24662 24667 + 24663 24662 24668 + 24668 24669 24663 + 24663 24669 24664 + 24669 24670 24664 + 24665 24664 24670 + 24670 24671 24665 + 24666 24665 24671 + 24646 24672 24667 + 24667 24672 24673 + 24673 24674 24667 + 24667 24674 24668 + 24675 24672 24646 + 24672 24675 24676 + 24672 24676 24673 + 24676 24677 24673 + 24678 24673 24677 + 24673 24678 24679 + 24679 24674 24673 + 24668 24674 24679 + 24650 24675 24646 + 24675 24650 24649 + 24675 24649 24680 + 24680 24676 24675 + 24676 24680 24681 + 24682 24676 24681 + 24676 24682 24677 + 24682 24683 24677 + 24684 24677 24683 + 24677 24684 24678 + 24648 24680 24649 + 24680 24648 24655 + 24681 24680 24655 + 24685 24681 24655 + 24682 24681 24685 + 24685 24686 24682 + 24683 24682 24686 + 24686 24687 24683 + 24688 24683 24687 + 24688 24684 24683 + 24689 24685 24655 + 24690 24685 24689 + 24686 24685 24690 + 24690 24691 24686 + 24686 24691 24687 + 24691 24692 24687 + 24693 24687 24692 + 24687 24693 24688 + 24654 24689 24655 + 24654 24694 24689 + 24689 24694 24690 + 24695 24690 24694 + 24691 24690 24695 + 24695 24696 24691 + 24691 24696 24697 + 24697 24692 24691 + 24698 24692 24697 + 24692 24698 24693 + 24694 24654 24699 + 24699 24700 24694 + 24694 24700 24695 + 24701 24695 24700 + 24695 24701 24702 + 24702 24696 24695 + 24696 24702 24703 + 24703 24697 24696 + 24699 24654 24653 + 24653 24704 24699 + 24705 24699 24704 + 24699 24705 24706 + 24706 24700 24699 + 24700 24706 24701 + 24707 24701 24706 + 24702 24701 24707 + 24708 24704 24653 + 24709 24704 24708 + 24704 24709 24705 + 24710 24705 24709 + 24706 24705 24710 + 24653 24652 24708 + 24708 24652 24711 + 24711 24712 24708 + 24713 24708 24712 + 24708 24713 24709 + 24652 24661 24711 + 24714 24711 24661 + 24711 24714 24715 + 24715 24716 24711 + 24711 24716 24717 + 24717 24712 24711 + 24718 24712 24717 + 24712 24718 24713 + 24661 24660 24714 + 24719 24714 24660 + 24715 24714 24719 + 24719 24720 24715 + 24715 24720 24721 + 24721 24722 24715 + 24716 24715 24722 + 24660 24723 24719 + 24723 24724 24719 + 24725 24719 24724 + 24719 24725 24726 + 24726 24720 24719 + 24720 24726 24727 + 24727 24721 24720 + 24659 24723 24660 + 24723 24659 24728 + 24723 24728 24729 + 24729 24724 24723 + 24724 24729 24730 + 24730 24731 24724 + 24724 24731 24725 + 24728 24659 24658 + 24658 24732 24728 + 24728 24732 24733 + 24733 24729 24728 + 24730 24729 24733 + 24733 24734 24730 + 24730 24734 24735 + 24735 24736 24730 + 24731 24730 24736 + 24666 24732 24658 + 24732 24666 24737 + 24737 24738 24732 + 24732 24738 24733 + 24739 24733 24738 + 24739 24734 24733 + 24734 24739 24740 + 24740 24741 24734 + 24734 24741 24735 + 24666 24671 24737 + 24671 24742 24737 + 24743 24737 24742 + 24743 24738 24737 + 24738 24743 24739 + 24739 24743 24744 + 24740 24739 24744 + 24744 24745 24740 + 24746 24740 24745 + 24741 24740 24746 + 24742 24671 24747 + 24748 24742 24747 + 24744 24742 24748 + 24742 24744 24743 + 24747 24671 24670 + 24747 24670 24669 + 24669 24749 24747 + 24747 24749 24750 + 24750 24748 24747 + 24748 24750 24751 + 24752 24748 24751 + 24748 24752 24744 + 24744 24752 24753 + 24753 24745 24744 + 24669 24668 24749 + 24668 24754 24749 + 24749 24754 24755 + 24755 24750 24749 + 24750 24755 24751 + 24754 24668 24679 + 24679 24755 24754 + 24755 24679 24678 + 24756 24755 24678 + 24755 24756 24751 + 24751 24756 24757 + 24757 24758 24751 + 24751 24758 24753 + 24753 24752 24751 + 24756 24678 24684 + 24684 24757 24756 + 24759 24757 24684 + 24757 24759 24760 + 24760 24758 24757 + 24758 24760 24761 + 24761 24753 24758 + 24753 24761 24745 + 24761 24762 24745 + 24745 24762 24746 + 24684 24688 24759 + 24763 24759 24688 + 24760 24759 24763 + 24763 24764 24760 + 24760 24764 24765 + 24765 24761 24760 + 24762 24761 24765 + 24765 24766 24762 + 24746 24762 24766 + 24688 24693 24763 + 24767 24763 24693 + 24764 24763 24767 + 24767 24768 24764 + 24764 24768 24765 + 24768 24769 24765 + 24766 24765 24769 + 24770 24766 24769 + 24766 24770 24771 + 24771 24746 24766 + 24741 24746 24771 + 24693 24698 24767 + 24767 24698 24772 + 24772 24773 24767 + 24768 24767 24773 + 24773 24774 24768 + 24769 24768 24774 + 24774 24775 24769 + 24775 24770 24769 + 24697 24772 24698 + 24776 24772 24697 + 24772 24776 24777 + 24777 24773 24772 + 24773 24777 24778 + 24778 24774 24773 + 24774 24778 24779 + 24779 24775 24774 + 24770 24775 24779 + 24776 24697 24703 + 24776 24703 24780 + 24780 24781 24776 + 24781 24777 24776 + 24778 24777 24781 + 24781 24782 24778 + 24778 24782 24783 + 24779 24778 24783 + 24703 24784 24780 + 24780 24784 24785 + 24786 24780 24785 + 24781 24780 24786 + 24787 24781 24786 + 24781 24787 24782 + 24782 24787 24788 + 24788 24783 24782 + 24784 24703 24702 + 24702 24789 24784 + 24789 24790 24784 + 24790 24785 24784 + 24785 24790 24791 + 24791 24792 24785 + 24786 24785 24792 + 24792 24793 24786 + 24787 24786 24793 + 24788 24787 24793 + 24707 24789 24702 + 24790 24789 24707 + 24790 24707 24794 + 24794 24791 24790 + 24794 24795 24791 + 24792 24791 24795 + 24796 24792 24795 + 24793 24792 24796 + 24796 24797 24793 + 24793 24797 24788 + 24797 24798 24788 + 24783 24788 24798 + 24794 24707 24706 + 24799 24794 24706 + 24799 24800 24794 + 24800 24795 24794 + 24795 24800 24801 + 24801 24796 24795 + 24801 24802 24796 + 24802 24797 24796 + 24798 24797 24802 + 24802 24803 24798 + 24783 24798 24803 + 24706 24804 24799 + 24799 24804 24805 + 24806 24799 24805 + 24799 24806 24807 + 24807 24800 24799 + 24800 24807 24808 + 24808 24801 24800 + 24710 24804 24706 + 24710 24805 24804 + 24805 24710 24809 + 24809 24810 24805 + 24805 24810 24811 + 24811 24806 24805 + 24807 24806 24811 + 24811 24812 24807 + 24808 24807 24812 + 24809 24710 24709 + 24709 24813 24809 + 24814 24809 24813 + 24809 24814 24815 + 24815 24810 24809 + 24811 24810 24815 + 24816 24811 24815 + 24812 24811 24816 + 24817 24813 24709 + 24813 24817 24818 + 24818 24819 24813 + 24813 24819 24814 + 24820 24814 24819 + 24815 24814 24820 + 24820 24821 24815 + 24815 24821 24816 + 24709 24713 24817 + 24817 24713 24718 + 24718 24822 24817 + 24818 24817 24822 + 24822 24823 24818 + 24824 24818 24823 + 24819 24818 24824 + 24824 24825 24819 + 24819 24825 24820 + 24826 24820 24825 + 24820 24826 24821 + 24827 24822 24718 + 24823 24822 24827 + 24827 24828 24823 + 24823 24828 24829 + 24829 24830 24823 + 24823 24830 24824 + 24718 24831 24827 + 24832 24827 24831 + 24828 24827 24832 + 24832 24833 24828 + 24829 24828 24833 + 24717 24831 24718 + 24831 24717 24834 + 24834 24835 24831 + 24831 24835 24832 + 24836 24832 24835 + 24833 24832 24836 + 24837 24834 24717 + 24838 24834 24837 + 24835 24834 24838 + 24838 24839 24835 + 24835 24839 24836 + 24717 24716 24837 + 24716 24840 24837 + 24840 24841 24837 + 24842 24837 24841 + 24837 24842 24843 + 24843 24844 24837 + 24837 24844 24838 + 24722 24840 24716 + 24840 24722 24845 + 24845 24846 24840 + 24840 24846 24847 + 24847 24841 24840 + 24848 24841 24847 + 24841 24848 24842 + 24849 24842 24848 + 24843 24842 24849 + 24845 24722 24721 + 24721 24850 24845 + 24845 24850 24851 + 24851 24852 24845 + 24846 24845 24852 + 24852 24853 24846 + 24847 24846 24853 + 24854 24850 24721 + 24850 24854 24855 + 24855 24851 24850 + 24851 24855 24856 + 24856 24857 24851 + 24851 24857 24858 + 24858 24852 24851 + 24853 24852 24858 + 24721 24727 24854 + 24854 24727 24859 + 24859 24860 24854 + 24855 24854 24860 + 24860 24861 24855 + 24856 24855 24861 + 24859 24727 24726 + 24726 24862 24859 + 24863 24859 24862 + 24859 24863 24864 + 24864 24860 24859 + 24860 24864 24865 + 24865 24861 24860 + 24866 24862 24726 + 24867 24862 24866 + 24862 24867 24863 + 24868 24863 24867 + 24864 24863 24868 + 24868 24869 24864 + 24864 24869 24870 + 24870 24865 24864 + 24726 24725 24866 + 24871 24866 24725 + 24872 24866 24871 + 24866 24872 24867 + 24725 24731 24871 + 24736 24871 24731 + 24873 24871 24736 + 24871 24873 24872 + 24874 24872 24873 + 24867 24872 24874 + 24874 24875 24867 + 24867 24875 24876 + 24876 24877 24867 + 24877 24868 24867 + 24736 24878 24873 + 24873 24878 24879 + 24879 24880 24873 + 24873 24880 24874 + 24878 24736 24735 + 24735 24881 24878 + 24879 24878 24881 + 24882 24879 24881 + 24883 24879 24882 + 24880 24879 24883 + 24880 24883 24884 + 24884 24885 24880 + 24880 24885 24874 + 24771 24881 24735 + 24881 24771 24886 + 24886 24887 24881 + 24881 24887 24882 + 24771 24735 24741 + 24770 24886 24771 + 24888 24886 24770 + 24888 24887 24886 + 24887 24888 24889 + 24889 24882 24887 + 24882 24889 24890 + 24890 24891 24882 + 24882 24891 24883 + 24883 24891 24892 + 24892 24884 24883 + 24770 24893 24888 + 24888 24893 24894 + 24894 24889 24888 + 24890 24889 24894 + 24894 24895 24890 + 24890 24895 24896 + 24896 24897 24890 + 24891 24890 24897 + 24779 24893 24770 + 24893 24779 24898 + 24898 24894 24893 + 24895 24894 24898 + 24898 24899 24895 + 24895 24899 24900 + 24900 24896 24895 + 24901 24896 24900 + 24896 24901 24902 + 24902 24897 24896 + 24903 24898 24779 + 24899 24898 24903 + 24903 24904 24899 + 24900 24899 24904 + 24904 24905 24900 + 24905 24906 24900 + 24907 24900 24906 + 24900 24907 24901 + 24783 24903 24779 + 24803 24903 24783 + 24904 24903 24803 + 24803 24908 24904 + 24904 24908 24909 + 24909 24905 24904 + 24909 24910 24905 + 24905 24910 24911 + 24911 24906 24905 + 24912 24906 24911 + 24906 24912 24907 + 24908 24803 24802 + 24802 24913 24908 + 24914 24908 24913 + 24914 24909 24908 + 24909 24914 24915 + 24910 24909 24915 + 24910 24915 24916 + 24916 24911 24910 + 24917 24911 24916 + 24911 24917 24912 + 24913 24802 24801 + 24801 24808 24913 + 24913 24808 24918 + 24918 24914 24913 + 24914 24918 24919 + 24915 24914 24919 + 24915 24919 24916 + 24919 24920 24916 + 24921 24916 24920 + 24916 24921 24917 + 24922 24917 24921 + 24912 24917 24922 + 24918 24808 24812 + 24812 24923 24918 + 24923 24919 24918 + 24919 24923 24924 + 24920 24919 24924 + 24921 24920 24924 + 24924 24925 24921 + 24921 24925 24926 + 24926 24922 24921 + 24923 24812 24816 + 24923 24816 24927 + 24927 24924 24923 + 24925 24924 24927 + 24927 24928 24925 + 24925 24928 24929 + 24929 24926 24925 + 24926 24929 24930 + 24931 24926 24930 + 24922 24926 24931 + 24821 24927 24816 + 24928 24927 24821 + 24821 24932 24928 + 24929 24928 24932 + 24930 24929 24932 + 24932 24826 24930 + 24930 24826 24933 + 24934 24930 24933 + 24931 24930 24934 + 24826 24932 24821 + 24825 24933 24826 + 24933 24825 24824 + 24824 24935 24933 + 24933 24935 24936 + 24936 24937 24933 + 24933 24937 24938 + 24938 24934 24933 + 24935 24824 24830 + 24830 24939 24935 + 24936 24935 24939 + 24939 24940 24936 + 24941 24936 24940 + 24936 24941 24942 + 24942 24937 24936 + 24937 24942 24943 + 24943 24938 24937 + 24939 24830 24829 + 24829 24944 24939 + 24939 24944 24945 + 24945 24940 24939 + 24946 24940 24945 + 24940 24946 24941 + 24947 24941 24946 + 24942 24941 24947 + 24947 24948 24942 + 24943 24942 24948 + 24944 24829 24949 + 24949 24950 24944 + 24944 24950 24951 + 24945 24944 24951 + 24833 24949 24829 + 24952 24949 24833 + 24950 24949 24952 + 24950 24952 24953 + 24953 24951 24950 + 24951 24953 24954 + 24951 24954 24955 + 24955 24956 24951 + 24951 24956 24945 + 24833 24957 24952 + 24952 24957 24958 + 24953 24952 24958 + 24958 24959 24953 + 24954 24953 24959 + 24959 24960 24954 + 24955 24954 24960 + 24836 24957 24833 + 24957 24836 24961 + 24961 24958 24957 + 24958 24961 24962 + 24962 24963 24958 + 24958 24963 24964 + 24964 24959 24958 + 24960 24959 24964 + 24965 24961 24836 + 24962 24961 24965 + 24965 24966 24962 + 24962 24966 24967 + 24967 24968 24962 + 24963 24962 24968 + 24968 24969 24963 + 24964 24963 24969 + 24836 24839 24965 + 24970 24965 24839 + 24965 24970 24971 + 24971 24966 24965 + 24966 24971 24972 + 24972 24967 24966 + 24839 24838 24970 + 24973 24970 24838 + 24971 24970 24973 + 24973 24974 24971 + 24972 24971 24974 + 24974 24975 24972 + 24975 24976 24972 + 24976 24977 24972 + 24967 24972 24977 + 24838 24844 24973 + 24978 24973 24844 + 24973 24978 24979 + 24979 24974 24973 + 24974 24979 24980 + 24980 24975 24974 + 24975 24980 24981 + 24981 24976 24975 + 24976 24981 24982 + 24982 24977 24976 + 24844 24843 24978 + 24983 24978 24843 + 24979 24978 24983 + 24983 24984 24979 + 24985 24979 24984 + 24985 24980 24979 + 24980 24985 24986 + 24981 24980 24986 + 24843 24987 24983 + 24988 24983 24987 + 24983 24988 24989 + 24989 24984 24983 + 24984 24989 24990 + 24990 24985 24984 + 24985 24990 24991 + 24991 24986 24985 + 24849 24987 24843 + 24992 24987 24849 + 24987 24992 24988 + 24993 24988 24992 + 24989 24988 24993 + 24993 24994 24989 + 24989 24994 24995 + 24995 24990 24989 + 24990 24995 24996 + 24991 24990 24996 + 24849 24997 24992 + 24992 24997 24998 + 24998 24999 24992 + 24992 24999 24993 + 25000 24993 24999 + 24993 25000 25001 + 25001 24994 24993 + 24997 24849 25002 + 25002 25003 24997 + 24997 25003 25004 + 24998 24997 25004 + 24848 25002 24849 + 25005 25002 24848 + 25003 25002 25005 + 25005 25006 25003 + 25003 25006 25007 + 25007 25004 25003 + 24848 25008 25005 + 25005 25008 25009 + 25009 25010 25005 + 25006 25005 25010 + 25010 25011 25006 + 25007 25006 25011 + 24847 25008 24848 + 25008 24847 25009 + 24847 25012 25009 + 25009 25012 25013 + 25009 25013 25014 + 25014 25010 25009 + 25011 25010 25014 + 24853 25012 24847 + 25015 25012 24853 + 25012 25015 25013 + 25013 25015 25016 + 25013 25016 25017 + 25017 25014 25013 + 25018 25014 25017 + 25014 25018 25011 + 24853 25019 25015 + 25020 25015 25019 + 25015 25020 25016 + 25016 25020 25021 + 25016 25021 25022 + 25022 25017 25016 + 25023 25017 25022 + 25017 25023 25018 + 24858 25019 24853 + 25019 24858 25024 + 25024 25025 25019 + 25025 25020 25019 + 25026 25020 25025 + 25020 25026 25021 + 25021 25026 25027 + 25027 25028 25021 + 25028 25022 25021 + 25029 25024 24858 + 25030 25024 25029 + 25025 25024 25030 + 25030 25031 25025 + 25025 25031 25026 + 25032 25026 25031 + 25026 25032 25027 + 24858 24857 25029 + 25033 25029 24857 + 25029 25033 25034 + 25034 25035 25029 + 25029 25035 25030 + 24857 24856 25033 + 25036 25033 24856 + 25033 25036 25037 + 25034 25033 25037 + 25038 25034 25037 + 25038 25039 25034 + 25035 25034 25039 + 25039 25040 25035 + 25040 25030 25035 + 24856 25041 25036 + 25042 25036 25041 + 25036 25042 25043 + 25043 25037 25036 + 25037 25043 25044 + 25044 25038 25037 + 24861 25041 24856 + 25045 25041 24861 + 25041 25045 25042 + 25046 25042 25045 + 25042 25046 25047 + 25043 25042 25047 + 25043 25047 25048 + 25044 25043 25048 + 24861 24865 25045 + 25045 24865 24870 + 24870 25049 25045 + 25045 25049 25046 + 25050 25046 25049 + 25046 25050 25051 + 25051 25047 25046 + 25047 25051 25052 + 25052 25048 25047 + 25053 25049 24870 + 25049 25053 25050 + 25054 25050 25053 + 25050 25054 25055 + 25051 25050 25055 + 25056 25051 25055 + 25056 25052 25051 + 25057 25052 25056 + 25048 25052 25057 + 24870 25058 25053 + 25053 25058 25059 + 25059 25060 25053 + 25053 25060 25054 + 25061 25054 25060 + 25054 25061 25062 + 25062 25055 25054 + 25058 24870 24869 + 24869 25063 25058 + 25059 25058 25063 + 25063 25064 25059 + 25065 25059 25064 + 25059 25065 25066 + 25066 25060 25059 + 25060 25066 25061 + 25023 25061 25066 + 25062 25061 25023 + 25063 24869 24868 + 24868 25067 25063 + 25063 25067 25068 + 25068 25064 25063 + 25007 25064 25068 + 25064 25007 25065 + 25011 25065 25007 + 25066 25065 25011 + 25011 25018 25066 + 25066 25018 25023 + 25067 24868 25069 + 25069 25070 25067 + 25070 25068 25067 + 25004 25068 25070 + 25068 25004 25007 + 24868 24877 25069 + 25069 24877 25071 + 25071 25072 25069 + 25069 25072 25073 + 25073 25070 25069 + 25074 25070 25073 + 25070 25074 25004 + 25004 25074 24998 + 25071 24877 24876 + 24876 25075 25071 + 25076 25071 25075 + 25072 25071 25076 + 25076 25077 25072 + 25073 25072 25077 + 25077 25078 25073 + 25079 25073 25078 + 25073 25079 25074 + 25080 25075 24876 + 25075 25080 25081 + 25081 25082 25075 + 25075 25082 25076 + 25083 25076 25082 + 25077 25076 25083 + 24876 25084 25080 + 25080 25084 25085 + 25085 25086 25080 + 25080 25086 25087 + 25087 25081 25080 + 25088 25081 25087 + 25082 25081 25088 + 25084 24876 24875 + 24875 25089 25084 + 25085 25084 25089 + 25089 25090 25085 + 25091 25085 25090 + 25085 25091 25092 + 25092 25086 25085 + 25086 25092 25093 + 25093 25087 25086 + 25089 24875 24874 + 24874 25094 25089 + 25089 25094 25095 + 25095 25090 25089 + 25096 25090 25095 + 25090 25096 25091 + 25097 25091 25096 + 25092 25091 25097 + 25094 24874 24885 + 24885 25098 25094 + 25094 25098 25099 + 25095 25094 25099 + 25099 25100 25095 + 25101 25095 25100 + 25095 25101 25096 + 24884 25098 24885 + 25098 24884 24892 + 24892 25099 25098 + 25099 24892 25102 + 25099 25102 25103 + 25103 25100 25099 + 25100 25103 25104 + 25104 25105 25100 + 25100 25105 25101 + 25106 25101 25105 + 25096 25101 25106 + 25102 24892 25107 + 25107 25108 25102 + 25102 25108 25109 + 25109 25103 25102 + 25104 25103 25109 + 24891 25107 24892 + 24897 25107 24891 + 25107 24897 24902 + 24902 25108 25107 + 25108 24902 25110 + 25110 25109 25108 + 25111 25109 25110 + 25109 25111 25104 + 25104 25111 25112 + 25112 25113 25104 + 25105 25104 25113 + 25113 25114 25105 + 25105 25114 25106 + 25110 24902 24901 + 24901 25115 25110 + 25116 25110 25115 + 25116 25111 25110 + 25111 25116 25112 + 25116 25117 25112 + 25112 25117 25118 + 25112 25118 24948 + 24948 25113 25112 + 25114 25113 24948 + 25119 25115 24901 + 25119 25120 25115 + 25115 25120 25116 + 25117 25116 25120 + 25121 25117 25120 + 25117 25121 24943 + 25118 25117 24943 + 24948 25118 24943 + 24901 24907 25119 + 25119 24907 24912 + 25122 25119 24912 + 25123 25119 25122 + 25119 25123 25120 + 25120 25123 25124 + 25124 25125 25120 + 25120 25125 25121 + 24938 25121 25125 + 24938 24943 25121 + 24922 25122 24912 + 25122 24922 25126 + 25122 25126 25123 + 25124 25123 25126 + 25126 24931 25124 + 24934 25124 24931 + 24934 25125 25124 + 25125 24934 24938 + 25126 24922 24931 + 24948 24947 25114 + 25114 24947 25127 + 25127 25106 25114 + 25106 25127 25128 + 25128 25129 25106 + 25106 25129 25096 + 24946 25127 24947 + 25128 25127 24946 + 24946 25130 25128 + 25128 25130 25131 + 25131 25132 25128 + 25129 25128 25132 + 25132 25097 25129 + 25096 25129 25097 + 24945 25130 24946 + 25130 24945 25133 + 25133 25131 25130 + 25133 25134 25131 + 25131 25134 25135 + 25135 25132 25131 + 25097 25132 25135 + 25135 25136 25097 + 25097 25136 25092 + 25137 25133 24945 + 25134 25133 25137 + 25137 25138 25134 + 25134 25138 25139 + 25135 25134 25139 + 25139 25140 25135 + 25136 25135 25140 + 25140 25141 25136 + 25092 25136 25141 + 25141 25093 25092 + 25142 25137 24945 + 25143 25137 25142 + 25138 25137 25143 + 25138 25143 25144 + 25144 25139 25138 + 24956 25142 24945 + 25142 24956 25145 + 25146 25142 25145 + 25142 25146 25147 + 25147 25148 25142 + 25142 25148 25143 + 25143 25148 25149 + 25149 25144 25143 + 25145 24956 24955 + 24955 25150 25145 + 25145 25150 25151 + 25151 25152 25145 + 25145 25152 25146 + 25152 25153 25146 + 25147 25146 25153 + 25150 24955 25154 + 25154 25155 25150 + 25150 25155 25000 + 25000 25151 25150 + 24999 25151 25000 + 25151 24999 24998 + 24998 25152 25151 + 25153 25152 24998 + 24960 25154 24955 + 25156 25154 24960 + 25155 25154 25156 + 25156 25157 25155 + 25155 25157 25001 + 25001 25000 25155 + 24960 25158 25156 + 25156 25158 25159 + 25159 25160 25156 + 25157 25156 25160 + 25160 25161 25157 + 25001 25157 25161 + 25161 25162 25001 + 24994 25001 25162 + 24964 25158 24960 + 25158 24964 25163 + 25163 25159 25158 + 25159 25163 25164 + 25164 25165 25159 + 25159 25165 25166 + 25166 25160 25159 + 25161 25160 25166 + 25166 25167 25161 + 25162 25161 25167 + 24969 25163 24964 + 25164 25163 24969 + 24969 25168 25164 + 25169 25164 25168 + 25164 25169 25170 + 25165 25164 25170 + 25165 25170 25171 + 25171 25166 25165 + 25167 25166 25171 + 25172 25168 24969 + 25168 25172 25173 + 25173 25169 25168 + 25174 25169 25173 + 25170 25169 25174 + 25174 25175 25170 + 25170 25175 25176 + 25176 25171 25170 + 24969 24968 25172 + 25172 24968 24967 + 24967 25177 25172 + 25178 25172 25177 + 25172 25178 25173 + 25173 25178 25179 + 25179 25180 25173 + 25173 25180 25174 + 24977 25177 24967 + 25177 24977 25181 + 25181 25182 25177 + 25182 25178 25177 + 25178 25182 25183 + 25179 25178 25183 + 25184 25179 25183 + 25180 25179 25184 + 25184 25185 25180 + 25185 25174 25180 + 24982 25181 24977 + 25181 24982 25186 + 25187 25181 25186 + 25182 25181 25187 + 25187 25183 25182 + 25183 25187 25188 + 25183 25188 25184 + 25188 25189 25184 + 25190 25184 25189 + 25185 25184 25190 + 25191 25186 24982 + 25186 25191 25192 + 25192 25187 25186 + 25187 25192 25188 + 25188 25192 25193 + 25193 25194 25188 + 25189 25188 25194 + 24982 25195 25191 + 25191 25195 25196 + 25196 25197 25191 + 25193 25191 25197 + 25191 25193 25192 + 24981 25195 24982 + 25196 25195 24981 + 25196 24981 24986 + 25198 25196 24986 + 25196 25198 25199 + 25199 25197 25196 + 25197 25199 25194 + 25194 25193 25197 + 24986 24991 25198 + 25200 25198 24991 + 25199 25198 25200 + 25200 25201 25199 + 25194 25199 25201 + 25201 25202 25194 + 25202 25189 25194 + 25202 25203 25189 + 25189 25203 25190 + 24991 24996 25200 + 25204 25200 24996 + 25200 25204 25205 + 25205 25201 25200 + 25201 25205 25203 + 25203 25202 25201 + 24996 25206 25204 + 25207 25204 25206 + 25204 25207 25208 + 25205 25204 25208 + 25203 25205 25208 + 25190 25203 25208 + 25208 25176 25190 + 25176 25209 25190 + 25190 25209 25185 + 25206 24996 24995 + 24995 25162 25206 + 25206 25162 25167 + 25206 25167 25207 + 25171 25207 25167 + 25207 25171 25176 + 25176 25208 25207 + 25162 24995 24994 + 25174 25185 25209 + 25175 25174 25209 + 25209 25176 25175 + 25210 25153 24998 + 25153 25210 25211 + 25211 25212 25153 + 25153 25212 25147 + 25074 25210 24998 + 25211 25210 25074 + 25074 25079 25211 + 25211 25079 25213 + 25213 25214 25211 + 25212 25211 25214 + 25214 25215 25212 + 25147 25212 25215 + 25215 25216 25147 + 25148 25147 25216 + 25216 25149 25148 + 25078 25213 25079 + 25213 25078 25217 + 25217 25218 25213 + 25213 25218 25219 + 25219 25214 25213 + 25215 25214 25219 + 25219 25220 25215 + 25215 25220 25221 + 25221 25216 25215 + 25149 25216 25221 + 25217 25078 25077 + 25077 25222 25217 + 25223 25217 25222 + 25223 25224 25217 + 25218 25217 25224 + 25224 25225 25218 + 25219 25218 25225 + 25225 25226 25219 + 25220 25219 25226 + 25083 25222 25077 + 25222 25083 25227 + 25227 25223 25222 + 25223 25227 25228 + 25228 25229 25223 + 25224 25223 25229 + 25230 25224 25229 + 25225 25224 25230 + 25231 25227 25083 + 25227 25231 25232 + 25228 25227 25232 + 25228 25232 25233 + 25233 25234 25228 + 25229 25228 25234 + 25234 25235 25229 + 25235 25230 25229 + 25083 25236 25231 + 25237 25231 25236 + 25231 25237 25238 + 25238 25232 25231 + 25232 25238 25239 + 25239 25233 25232 + 25082 25236 25083 + 25088 25236 25082 + 25236 25088 25237 + 25240 25237 25088 + 25237 25240 25241 + 25238 25237 25241 + 25238 25241 25242 + 25242 25239 25238 + 25239 25242 25243 + 25244 25239 25243 + 25233 25239 25244 + 25088 25245 25240 + 25246 25240 25245 + 25240 25246 25247 + 25247 25241 25240 + 25241 25247 25248 + 25248 25242 25241 + 25242 25248 25249 + 25249 25243 25242 + 25087 25245 25088 + 25250 25245 25087 + 25245 25250 25246 + 25251 25246 25250 + 25246 25251 25252 + 25247 25246 25252 + 25247 25252 25253 + 25248 25247 25253 + 25249 25248 25253 + 25087 25093 25250 + 25250 25093 25141 + 25141 25254 25250 + 25250 25254 25251 + 25255 25251 25254 + 25251 25255 25256 + 25256 25252 25251 + 25252 25256 25257 + 25257 25253 25252 + 25258 25254 25141 + 25254 25258 25255 + 25259 25255 25258 + 25256 25255 25259 + 25259 25260 25256 + 25261 25256 25260 + 25261 25257 25256 + 25262 25257 25261 + 25253 25257 25262 + 25141 25140 25258 + 25258 25140 25139 + 25139 25263 25258 + 25258 25263 25259 + 25264 25259 25263 + 25259 25264 25265 + 25265 25260 25259 + 25260 25265 25261 + 25266 25263 25139 + 25263 25266 25264 + 25267 25264 25266 + 25265 25264 25267 + 25267 25268 25265 + 25269 25265 25268 + 25269 25270 25265 + 25265 25270 25261 + 25139 25144 25266 + 25266 25144 25149 + 25149 25271 25266 + 25266 25271 25267 + 25271 25221 25267 + 25221 25272 25267 + 25267 25272 25268 + 25272 25273 25268 + 25268 25273 25269 + 25221 25271 25149 + 25272 25221 25220 + 25220 25274 25272 + 25273 25272 25274 + 25274 25275 25273 + 25276 25273 25275 + 25273 25276 25269 + 25269 25276 25277 + 25277 25278 25269 + 25270 25269 25278 + 25226 25274 25220 + 25274 25226 25279 + 25279 25275 25274 + 25275 25279 25280 + 25280 25276 25275 + 25277 25276 25280 + 25280 25281 25277 + 25282 25277 25281 + 25277 25282 25283 + 25278 25277 25283 + 25279 25226 25225 + 25225 25284 25279 + 25285 25279 25284 + 25279 25285 25280 + 25280 25285 25286 + 25286 25281 25280 + 25281 25286 25287 + 25281 25287 25282 + 25230 25284 25225 + 25284 25230 25288 + 25288 25285 25284 + 25286 25285 25288 + 25288 25289 25286 + 25290 25286 25289 + 25286 25290 25287 + 25287 25290 25291 + 25291 25292 25287 + 25287 25292 25282 + 25230 25293 25288 + 25288 25293 25294 + 25294 25289 25288 + 25289 25294 25291 + 25291 25290 25289 + 25235 25293 25230 + 25293 25235 25295 + 25294 25293 25295 + 25291 25294 25295 + 25292 25291 25295 + 25295 25296 25292 + 25297 25292 25296 + 25292 25297 25282 + 25282 25297 25298 + 25298 25283 25282 + 25299 25283 25298 + 25283 25299 25278 + 25296 25295 25235 + 25235 25234 25296 + 25296 25234 25233 + 25233 25300 25296 + 25297 25296 25300 + 25298 25297 25300 + 25300 25244 25298 + 25298 25244 25243 + 25243 25301 25298 + 25301 25299 25298 + 25244 25300 25233 + 25301 25243 25249 + 25302 25301 25249 + 25301 25302 25303 + 25303 25299 25301 + 25299 25303 25304 + 25304 25305 25299 + 25299 25305 25278 + 25305 25270 25278 + 25261 25270 25305 + 25249 25306 25302 + 25302 25306 25262 + 25303 25302 25262 + 25304 25303 25262 + 25261 25304 25262 + 25305 25304 25261 + 25253 25306 25249 + 25262 25306 25253 + 25023 25307 25062 + 25022 25307 25023 + 25307 25022 25308 + 25308 25062 25307 + 25308 25309 25062 + 25055 25062 25309 + 25309 25056 25055 + 25022 25028 25308 + 25308 25028 25310 + 25310 25311 25308 + 25308 25311 25312 + 25312 25309 25308 + 25056 25309 25312 + 25312 25313 25056 + 25056 25313 25057 + 25310 25028 25314 + 25315 25310 25314 + 25310 25315 25316 + 25311 25310 25316 + 25311 25316 25317 + 25317 25312 25311 + 25313 25312 25317 + 25317 25318 25313 + 25318 25057 25313 + 25028 25027 25314 + 25319 25314 25027 + 25314 25319 25315 + 25319 25320 25315 + 25316 25315 25320 + 25320 25321 25316 + 25322 25316 25321 + 25316 25322 25317 + 25323 25317 25322 + 25318 25317 25323 + 25027 25032 25319 + 25319 25032 25324 + 25324 25325 25319 + 25320 25319 25325 + 25321 25320 25325 + 25325 25326 25321 + 25321 25326 25327 + 25327 25322 25321 + 25327 25328 25322 + 25322 25328 25323 + 25324 25032 25031 + 25031 25030 25324 + 25030 25329 25324 + 25324 25329 25326 + 25326 25325 25324 + 25040 25329 25030 + 25329 25040 25330 + 25326 25329 25330 + 25326 25330 25327 + 25327 25330 25331 + 25328 25327 25331 + 25328 25331 25332 + 25323 25328 25332 + 25332 25333 25323 + 25333 25334 25323 + 25323 25334 25318 + 25331 25330 25040 + 25040 25039 25331 + 25331 25039 25038 + 25038 25332 25331 + 25333 25332 25038 + 25038 25044 25333 + 25335 25333 25044 + 25334 25333 25335 + 25318 25334 25335 + 25335 25057 25318 + 25057 25335 25048 + 25048 25335 25044 + 25336 25337 25338 + 25339 25337 25336 + 25340 25337 25339 + 25337 25340 25341 + 25341 25342 25337 + 25343 25336 25338 + 25344 25336 25343 + 25345 25336 25344 + 25336 25345 25339 + 25338 25346 25343 + 25347 25343 25346 + 25343 25347 25348 + 25348 25349 25343 + 25343 25349 25344 + 25350 25346 25338 + 25350 25351 25346 + 25346 25351 25347 + 25352 25347 25351 + 25348 25347 25352 + 25352 25353 25348 + 25354 25348 25353 + 25349 25348 25354 + 25338 25355 25350 + 25350 25355 25356 + 25356 25357 25350 + 25351 25350 25357 + 25357 25358 25351 + 25351 25358 25352 + 25355 25338 25359 + 25355 25359 25360 + 25360 25361 25355 + 25355 25361 25356 + 25362 25359 25338 + 25360 25359 25362 + 25363 25360 25362 + 25364 25360 25363 + 25361 25360 25364 + 25361 25364 25365 + 25365 25366 25361 + 25361 25366 25356 + 25342 25362 25338 + 25341 25362 25342 + 25362 25341 25363 + 25341 25367 25363 + 25368 25363 25367 + 25363 25368 25364 + 25364 25368 25369 + 25369 25370 25364 + 25370 25365 25364 + 25367 25341 25340 + 25340 25371 25367 + 25372 25367 25371 + 25367 25372 25368 + 25368 25372 25369 + 25372 25373 25369 + 25374 25369 25373 + 25369 25374 25370 + 25340 25375 25371 + 25375 25376 25371 + 25377 25371 25376 + 25371 25377 25372 + 25373 25372 25377 + 25339 25375 25340 + 25375 25339 25378 + 25378 25379 25375 + 25376 25375 25379 + 25379 25380 25376 + 25380 25381 25376 + 25376 25381 25377 + 25382 25378 25339 + 25383 25378 25382 + 25379 25378 25383 + 25380 25379 25383 + 25380 25383 25384 + 25384 25385 25380 + 25381 25380 25385 + 25386 25381 25385 + 25377 25381 25386 + 25339 25345 25382 + 25387 25382 25345 + 25382 25387 25388 + 25382 25388 25383 + 25383 25388 25389 + 25384 25383 25389 + 25345 25390 25387 + 25391 25387 25390 + 25388 25387 25391 + 25391 25389 25388 + 25390 25345 25344 + 25390 25344 25392 + 25392 25393 25390 + 25390 25393 25391 + 25394 25391 25393 + 25389 25391 25394 + 25395 25392 25344 + 25396 25392 25395 + 25392 25396 25397 + 25397 25393 25392 + 25393 25397 25394 + 25344 25349 25395 + 25354 25395 25349 + 25398 25395 25354 + 25395 25398 25396 + 25396 25398 25399 + 25399 25400 25396 + 25397 25396 25400 + 25400 25401 25397 + 25394 25397 25401 + 25354 25402 25398 + 25398 25402 25403 + 25403 25399 25398 + 25399 25403 25404 + 25404 25405 25399 + 25399 25405 25406 + 25406 25400 25399 + 25401 25400 25406 + 25402 25354 25407 + 25407 25408 25402 + 25402 25408 25409 + 25409 25403 25402 + 25404 25403 25409 + 25409 25410 25404 + 25411 25404 25410 + 25405 25404 25411 + 25353 25407 25354 + 25412 25407 25353 + 25407 25412 25413 + 25413 25408 25407 + 25408 25413 25414 + 25414 25409 25408 + 25409 25414 25415 + 25415 25410 25409 + 25353 25416 25412 + 25412 25416 25417 + 25417 25418 25412 + 25413 25412 25418 + 25418 25419 25413 + 25413 25419 25420 + 25420 25414 25413 + 25415 25414 25420 + 25416 25353 25352 + 25416 25352 25421 + 25421 25422 25416 + 25416 25422 25417 + 25423 25417 25422 + 25424 25417 25423 + 25417 25424 25425 + 25425 25418 25417 + 25419 25418 25425 + 25358 25421 25352 + 25426 25421 25358 + 25426 25422 25421 + 25422 25426 25423 + 25423 25426 25427 + 25428 25423 25427 + 25424 25423 25428 + 25428 25429 25424 + 25425 25424 25429 + 25358 25427 25426 + 25427 25358 25357 + 25427 25357 25356 + 25356 25430 25427 + 25427 25430 25428 + 25431 25428 25430 + 25429 25428 25431 + 25431 25432 25429 + 25429 25432 25433 + 25433 25434 25429 + 25429 25434 25425 + 25435 25430 25356 + 25430 25435 25431 + 25431 25435 25436 + 25436 25437 25431 + 25432 25431 25437 + 25437 25438 25432 + 25433 25432 25438 + 25356 25439 25435 + 25440 25435 25439 + 25435 25440 25436 + 25441 25436 25440 + 25442 25436 25441 + 25436 25442 25443 + 25443 25437 25436 + 25438 25437 25443 + 25439 25356 25366 + 25366 25444 25439 + 25445 25439 25444 + 25445 25446 25439 + 25446 25440 25439 + 25446 25447 25440 + 25440 25447 25441 + 25444 25366 25365 + 25365 25448 25444 + 25444 25448 25449 + 25449 25445 25444 + 25445 25449 25450 + 25445 25450 25447 + 25447 25446 25445 + 25448 25365 25370 + 25370 25451 25448 + 25451 25452 25448 + 25452 25449 25448 + 25452 25453 25449 + 25453 25450 25449 + 25450 25453 25454 + 25454 25441 25450 + 25441 25447 25450 + 25451 25370 25455 + 25451 25455 25456 + 25456 25452 25451 + 25452 25456 25457 + 25457 25453 25452 + 25453 25457 25458 + 25458 25454 25453 + 25374 25455 25370 + 25455 25374 25459 + 25459 25456 25455 + 25456 25459 25460 + 25457 25456 25460 + 25458 25457 25460 + 25460 25461 25458 + 25462 25458 25461 + 25458 25462 25463 + 25463 25454 25458 + 25374 25464 25459 + 25464 25465 25459 + 25459 25465 25460 + 25460 25465 25466 + 25466 25461 25460 + 25466 25467 25461 + 25467 25468 25461 + 25461 25468 25462 + 25373 25464 25374 + 25464 25373 25469 + 25465 25464 25469 + 25466 25465 25469 + 25469 25470 25466 + 25467 25466 25470 + 25470 25471 25467 + 25472 25467 25471 + 25468 25467 25472 + 25472 25473 25468 + 25462 25468 25473 + 25373 25474 25469 + 25469 25474 25386 + 25386 25475 25469 + 25469 25475 25476 + 25476 25470 25469 + 25471 25470 25476 + 25377 25474 25373 + 25386 25474 25377 + 25475 25386 25385 + 25385 25477 25475 + 25476 25475 25477 + 25477 25478 25476 + 25479 25476 25478 + 25476 25479 25471 + 25471 25479 25480 + 25480 25481 25471 + 25471 25481 25472 + 25477 25385 25384 + 25384 25482 25477 + 25477 25482 25483 + 25483 25478 25477 + 25484 25478 25483 + 25478 25484 25479 + 25480 25479 25484 + 25482 25384 25485 + 25485 25486 25482 + 25483 25482 25486 + 25486 25487 25483 + 25488 25483 25487 + 25483 25488 25484 + 25389 25485 25384 + 25489 25485 25389 + 25486 25485 25489 + 25486 25489 25490 + 25490 25487 25486 + 25491 25487 25490 + 25487 25491 25488 + 25492 25488 25491 + 25484 25488 25492 + 25492 25493 25484 + 25484 25493 25480 + 25389 25494 25489 + 25489 25494 25495 + 25495 25490 25489 + 25496 25490 25495 + 25490 25496 25491 + 25491 25496 25497 + 25497 25498 25491 + 25491 25498 25492 + 25394 25494 25389 + 25494 25394 25499 + 25499 25500 25494 + 25494 25500 25495 + 25501 25495 25500 + 25502 25495 25501 + 25495 25502 25496 + 25497 25496 25502 + 25401 25499 25394 + 25503 25499 25401 + 25500 25499 25503 + 25503 25504 25500 + 25500 25504 25501 + 25501 25504 25505 + 25505 25506 25501 + 25507 25501 25506 + 25501 25507 25502 + 25401 25508 25503 + 25503 25508 25509 + 25509 25510 25503 + 25504 25503 25510 + 25510 25505 25504 + 25406 25508 25401 + 25508 25406 25511 + 25511 25509 25508 + 25509 25511 25512 + 25512 25513 25509 + 25509 25513 25514 + 25514 25510 25509 + 25505 25510 25514 + 25515 25511 25406 + 25512 25511 25515 + 25515 25516 25512 + 25512 25516 25517 + 25517 25518 25512 + 25513 25512 25518 + 25406 25405 25515 + 25411 25515 25405 + 25515 25411 25519 + 25519 25516 25515 + 25516 25519 25520 + 25520 25517 25516 + 25517 25520 25521 + 25521 25522 25517 + 25517 25522 25523 + 25523 25518 25517 + 25519 25411 25524 + 25524 25525 25519 + 25519 25525 25526 + 25526 25520 25519 + 25521 25520 25526 + 25410 25524 25411 + 25527 25524 25410 + 25524 25527 25528 + 25528 25525 25524 + 25525 25528 25529 + 25529 25526 25525 + 25526 25529 25530 + 25530 25531 25526 + 25526 25531 25521 + 25410 25415 25527 + 25532 25527 25415 + 25528 25527 25532 + 25532 25533 25528 + 25528 25533 25534 + 25534 25529 25528 + 25530 25529 25534 + 25415 25535 25532 + 25536 25532 25535 + 25532 25536 25537 + 25537 25533 25532 + 25533 25537 25538 + 25538 25534 25533 + 25420 25535 25415 + 25539 25535 25420 + 25535 25539 25536 + 25540 25536 25539 + 25537 25536 25540 + 25420 25541 25539 + 25539 25541 25542 + 25542 25543 25539 + 25539 25543 25540 + 25541 25420 25419 + 25419 25544 25541 + 25542 25541 25544 + 25545 25542 25544 + 25546 25542 25545 + 25542 25546 25547 + 25547 25543 25542 + 25543 25547 25548 + 25548 25540 25543 + 25425 25544 25419 + 25544 25425 25434 + 25434 25549 25544 + 25544 25549 25545 + 25550 25545 25549 + 25551 25545 25550 + 25545 25551 25546 + 25552 25546 25551 + 25547 25546 25552 + 25552 25553 25547 + 25548 25547 25553 + 25434 25433 25549 + 25549 25433 25550 + 25554 25550 25433 + 25551 25550 25554 + 25554 25555 25551 + 25551 25555 25552 + 25556 25552 25555 + 25552 25556 25557 + 25557 25553 25552 + 25438 25554 25433 + 25558 25554 25438 + 25555 25554 25558 + 25558 25559 25555 + 25555 25559 25556 + 25560 25556 25559 + 25557 25556 25560 + 25438 25561 25558 + 25558 25561 25562 + 25562 25563 25558 + 25559 25558 25563 + 25563 25564 25559 + 25559 25564 25560 + 25443 25561 25438 + 25561 25443 25565 + 25565 25562 25561 + 25566 25562 25565 + 25562 25566 25567 + 25567 25563 25562 + 25564 25563 25567 + 25567 25568 25564 + 25564 25568 25569 + 25569 25560 25564 + 25565 25443 25442 + 25442 25570 25565 + 25570 25571 25565 + 25566 25565 25571 + 25571 25572 25566 + 25567 25566 25572 + 25572 25573 25567 + 25568 25567 25573 + 25574 25570 25442 + 25570 25574 25575 + 25575 25576 25570 + 25570 25576 25577 + 25577 25571 25570 + 25577 25572 25571 + 25572 25577 25578 + 25578 25573 25572 + 25442 25579 25574 + 25574 25579 25463 + 25463 25580 25574 + 25575 25574 25580 + 25580 25581 25575 + 25582 25575 25581 + 25576 25575 25582 + 25441 25579 25442 + 25579 25441 25454 + 25454 25463 25579 + 25582 25583 25576 + 25583 25582 25584 + 25583 25584 25585 + 25585 25586 25583 + 25583 25586 25577 + 25577 25576 25583 + 25584 25582 25587 + 25587 25588 25584 + 25584 25588 25589 + 25589 25585 25584 + 25590 25585 25589 + 25586 25585 25590 + 25581 25587 25582 + 25587 25581 25591 + 25592 25587 25591 + 25587 25592 25588 + 25592 25593 25588 + 25588 25593 25594 + 25594 25595 25588 + 25588 25595 25589 + 25596 25591 25581 + 25591 25596 25473 + 25473 25597 25591 + 25592 25591 25597 + 25597 25598 25592 + 25598 25599 25592 + 25599 25593 25592 + 25581 25580 25596 + 25596 25580 25463 + 25463 25462 25596 + 25473 25596 25462 + 25597 25473 25472 + 25598 25597 25472 + 25600 25598 25472 + 25598 25600 25599 + 25599 25600 25481 + 25481 25601 25599 + 25593 25599 25601 + 25601 25594 25593 + 25602 25594 25601 + 25594 25602 25603 + 25603 25595 25594 + 25481 25600 25472 + 25601 25481 25480 + 25480 25604 25601 + 25601 25604 25602 + 25604 25605 25602 + 25603 25602 25605 + 25605 25606 25603 + 25607 25603 25606 + 25595 25603 25607 + 25607 25589 25595 + 25604 25480 25493 + 25493 25605 25604 + 25605 25493 25492 + 25492 25606 25605 + 25606 25492 25498 + 25498 25608 25606 + 25606 25608 25607 + 25609 25607 25608 + 25589 25607 25609 + 25609 25610 25589 + 25589 25610 25590 + 25608 25498 25497 + 25497 25611 25608 + 25608 25611 25609 + 25609 25611 25612 + 25612 25613 25609 + 25610 25609 25613 + 25613 25614 25610 + 25590 25610 25614 + 25611 25497 25615 + 25615 25612 25611 + 25612 25615 25616 + 25616 25617 25612 + 25612 25617 25618 + 25618 25613 25612 + 25614 25613 25618 + 25502 25615 25497 + 25616 25615 25502 + 25502 25507 25616 + 25616 25507 25619 + 25619 25620 25616 + 25617 25616 25620 + 25620 25621 25617 + 25618 25617 25621 + 25621 25622 25618 + 25623 25618 25622 + 25618 25623 25614 + 25506 25619 25507 + 25619 25506 25624 + 25624 25625 25619 + 25619 25625 25626 + 25626 25620 25619 + 25621 25620 25626 + 25626 25627 25621 + 25621 25627 25628 + 25628 25622 25621 + 25624 25506 25505 + 25505 25629 25624 + 25624 25629 25630 + 25630 25631 25624 + 25625 25624 25631 + 25631 25632 25625 + 25625 25632 25633 + 25633 25626 25625 + 25627 25626 25633 + 25514 25629 25505 + 25629 25514 25634 + 25634 25630 25629 + 25635 25630 25634 + 25630 25635 25636 + 25636 25631 25630 + 25632 25631 25636 + 25636 25637 25632 + 25632 25637 25638 + 25638 25633 25632 + 25639 25634 25514 + 25640 25634 25639 + 25640 25635 25634 + 25635 25640 25641 + 25641 25642 25635 + 25636 25635 25642 + 25642 25643 25636 + 25637 25636 25643 + 25644 25639 25514 + 25645 25639 25644 + 25639 25645 25646 + 25646 25647 25639 + 25639 25647 25640 + 25640 25647 25648 + 25648 25641 25640 + 25649 25644 25514 + 25650 25644 25649 + 25651 25644 25650 + 25644 25651 25645 + 25652 25645 25651 + 25646 25645 25652 + 25514 25513 25649 + 25513 25653 25649 + 25654 25649 25653 + 25655 25649 25654 + 25649 25655 25650 + 25518 25653 25513 + 25518 25523 25653 + 25653 25523 25654 + 25654 25523 25522 + 25522 25656 25654 + 25656 25657 25654 + 25655 25654 25657 + 25657 25658 25655 + 25650 25655 25658 + 25658 25659 25650 + 25660 25650 25659 + 25650 25660 25651 + 25661 25656 25522 + 25656 25661 25662 + 25662 25663 25656 + 25656 25663 25664 + 25664 25657 25656 + 25658 25657 25664 + 25522 25521 25661 + 25665 25661 25521 + 25662 25661 25665 + 25665 25666 25662 + 25662 25666 25667 + 25667 25668 25662 + 25663 25662 25668 + 25668 25669 25663 + 25664 25663 25669 + 25521 25531 25665 + 25670 25665 25531 + 25665 25670 25671 + 25671 25666 25665 + 25666 25671 25672 + 25672 25667 25666 + 25531 25530 25670 + 25673 25670 25530 + 25671 25670 25673 + 25673 25674 25671 + 25671 25674 25675 + 25675 25672 25671 + 25676 25672 25675 + 25676 25667 25672 + 25530 25677 25673 + 25678 25673 25677 + 25673 25678 25679 + 25679 25674 25673 + 25674 25679 25680 + 25680 25675 25674 + 25681 25675 25680 + 25675 25681 25676 + 25534 25677 25530 + 25682 25677 25534 + 25677 25682 25678 + 25678 25682 25683 + 25683 25684 25678 + 25679 25678 25684 + 25684 25685 25679 + 25679 25685 25686 + 25686 25680 25679 + 25534 25538 25682 + 25682 25538 25687 + 25687 25683 25682 + 25683 25687 25688 + 25688 25689 25683 + 25683 25689 25690 + 25690 25684 25683 + 25684 25690 25691 + 25691 25685 25684 + 25687 25538 25537 + 25692 25687 25537 + 25688 25687 25692 + 25692 25693 25688 + 25694 25688 25693 + 25689 25688 25694 + 25694 25695 25689 + 25689 25695 25696 + 25696 25690 25689 + 25691 25690 25696 + 25697 25692 25537 + 25698 25692 25697 + 25692 25698 25699 + 25699 25693 25692 + 25693 25699 25700 + 25700 25701 25693 + 25693 25701 25694 + 25537 25702 25697 + 25702 25703 25697 + 25704 25697 25703 + 25705 25697 25704 + 25697 25705 25698 + 25540 25702 25537 + 25706 25702 25540 + 25702 25706 25707 + 25707 25703 25702 + 25707 25708 25703 + 25703 25708 25704 + 25540 25548 25706 + 25706 25548 25709 + 25709 25710 25706 + 25706 25710 25711 + 25711 25707 25706 + 25708 25707 25711 + 25711 25712 25708 + 25704 25708 25712 + 25553 25709 25548 + 25713 25709 25553 + 25709 25713 25714 + 25714 25710 25709 + 25710 25714 25715 + 25715 25711 25710 + 25711 25715 25716 + 25716 25712 25711 + 25553 25557 25713 + 25717 25713 25557 + 25714 25713 25717 + 25717 25718 25714 + 25714 25718 25719 + 25719 25715 25714 + 25716 25715 25719 + 25720 25717 25557 + 25721 25717 25720 + 25717 25721 25722 + 25722 25718 25717 + 25718 25722 25723 + 25723 25719 25718 + 25557 25724 25720 + 25725 25720 25724 + 25726 25720 25725 + 25720 25726 25721 + 25727 25721 25726 + 25722 25721 25727 + 25560 25724 25557 + 25724 25560 25569 + 25724 25569 25725 + 25725 25569 25568 + 25568 25728 25725 + 25729 25725 25728 + 25725 25729 25726 + 25726 25729 25614 + 25614 25623 25726 + 25726 25623 25727 + 25573 25728 25568 + 25730 25728 25573 + 25728 25730 25729 + 25729 25730 25590 + 25614 25729 25590 + 25573 25578 25730 + 25730 25578 25586 + 25586 25590 25730 + 25586 25578 25577 + 25622 25727 25623 + 25731 25727 25622 + 25727 25731 25722 + 25722 25731 25732 + 25732 25723 25722 + 25733 25723 25732 + 25719 25723 25733 + 25733 25734 25719 + 25719 25734 25716 + 25628 25731 25622 + 25731 25628 25735 + 25735 25736 25731 + 25731 25736 25732 + 25736 25737 25732 + 25738 25732 25737 + 25739 25732 25738 + 25732 25739 25733 + 25740 25735 25628 + 25741 25735 25740 + 25736 25735 25741 + 25741 25742 25736 + 25736 25742 25743 + 25743 25737 25736 + 25628 25627 25740 + 25633 25740 25627 + 25740 25633 25638 + 25638 25744 25740 + 25740 25744 25741 + 25741 25744 25745 + 25745 25746 25741 + 25742 25741 25746 + 25746 25747 25742 + 25743 25742 25747 + 25744 25638 25748 + 25748 25745 25744 + 25745 25748 25749 + 25749 25750 25745 + 25745 25750 25751 + 25751 25746 25745 + 25751 25752 25746 + 25752 25747 25746 + 25753 25748 25638 + 25749 25748 25753 + 25753 25754 25749 + 25749 25754 25755 + 25755 25756 25749 + 25750 25749 25756 + 25756 25757 25750 + 25751 25750 25757 + 25638 25637 25753 + 25643 25753 25637 + 25753 25643 25758 + 25758 25754 25753 + 25754 25758 25759 + 25759 25755 25754 + 25760 25755 25759 + 25760 25761 25755 + 25755 25761 25762 + 25762 25756 25755 + 25757 25756 25762 + 25758 25643 25642 + 25642 25763 25758 + 25758 25763 25764 + 25764 25759 25758 + 25759 25764 25765 + 25760 25759 25765 + 25766 25760 25765 + 25766 25767 25760 + 25767 25761 25760 + 25762 25761 25767 + 25768 25763 25642 + 25763 25768 25769 + 25769 25764 25763 + 25770 25764 25769 + 25770 25765 25764 + 25771 25765 25770 + 25765 25771 25766 + 25642 25641 25768 + 25768 25641 25648 + 25648 25772 25768 + 25768 25772 25773 + 25773 25769 25768 + 25770 25769 25773 + 25773 25774 25770 + 25770 25774 25775 + 25775 25771 25770 + 25776 25772 25648 + 25772 25776 25777 + 25777 25773 25772 + 25778 25773 25777 + 25778 25774 25773 + 25779 25774 25778 + 25774 25779 25775 + 25780 25775 25779 + 25780 25771 25775 + 25648 25781 25776 + 25776 25781 25782 + 25782 25783 25776 + 25776 25783 25784 + 25784 25777 25776 + 25778 25777 25784 + 25781 25648 25647 + 25647 25646 25781 + 25781 25646 25785 + 25785 25782 25781 + 25786 25782 25785 + 25782 25786 25787 + 25787 25783 25782 + 25783 25787 25788 + 25788 25784 25783 + 25652 25785 25646 + 25785 25652 25789 + 25789 25790 25785 + 25785 25790 25786 + 25791 25786 25790 + 25787 25786 25791 + 25791 25792 25787 + 25787 25792 25793 + 25793 25788 25787 + 25789 25652 25794 + 25794 25795 25789 + 25789 25795 25796 + 25796 25797 25789 + 25797 25798 25789 + 25798 25799 25789 + 25790 25789 25799 + 25651 25794 25652 + 25800 25794 25651 + 25794 25800 25801 + 25801 25795 25794 + 25795 25801 25802 + 25802 25796 25795 + 25651 25660 25800 + 25800 25660 25803 + 25803 25804 25800 + 25801 25800 25804 + 25804 25805 25801 + 25802 25801 25805 + 25805 25806 25802 + 25695 25802 25806 + 25796 25802 25695 + 25659 25803 25660 + 25803 25659 25807 + 25807 25808 25803 + 25803 25808 25809 + 25809 25804 25803 + 25805 25804 25809 + 25809 25810 25805 + 25805 25810 25811 + 25811 25806 25805 + 25807 25659 25658 + 25658 25812 25807 + 25807 25812 25813 + 25813 25814 25807 + 25808 25807 25814 + 25814 25815 25808 + 25808 25815 25816 + 25816 25809 25808 + 25810 25809 25816 + 25664 25812 25658 + 25812 25664 25817 + 25817 25813 25812 + 25818 25813 25817 + 25818 25819 25813 + 25814 25813 25819 + 25820 25814 25819 + 25815 25814 25820 + 25820 25821 25815 + 25815 25821 25816 + 25669 25817 25664 + 25818 25817 25669 + 25669 25822 25818 + 25818 25822 25823 + 25823 25824 25818 + 25819 25818 25824 + 25824 25825 25819 + 25820 25819 25825 + 25825 25826 25820 + 25821 25820 25826 + 25827 25822 25669 + 25822 25827 25828 + 25828 25823 25822 + 25829 25823 25828 + 25829 25830 25823 + 25824 25823 25830 + 25831 25824 25830 + 25831 25825 25824 + 25669 25668 25827 + 25827 25668 25667 + 25667 25832 25827 + 25828 25827 25832 + 25832 25833 25828 + 25833 25834 25828 + 25834 25829 25828 + 25835 25829 25834 + 25830 25829 25835 + 25835 25836 25830 + 25830 25836 25831 + 25676 25832 25667 + 25833 25832 25676 + 25837 25833 25676 + 25838 25833 25837 + 25838 25834 25833 + 25834 25838 25839 + 25839 25835 25834 + 25835 25839 25840 + 25840 25836 25835 + 25831 25836 25840 + 25841 25831 25840 + 25831 25841 25825 + 25842 25837 25676 + 25837 25842 25843 + 25838 25837 25843 + 25839 25838 25843 + 25839 25843 25844 + 25840 25839 25844 + 25844 25845 25840 + 25841 25840 25845 + 25846 25841 25845 + 25825 25841 25846 + 25676 25681 25842 + 25842 25681 25847 + 25848 25842 25847 + 25849 25842 25848 + 25849 25843 25842 + 25844 25843 25849 + 25850 25844 25849 + 25845 25844 25850 + 25847 25681 25680 + 25847 25680 25686 + 25686 25851 25847 + 25847 25851 25848 + 25851 25852 25848 + 25849 25848 25852 + 25852 25853 25849 + 25849 25853 25850 + 25851 25686 25854 + 25855 25851 25854 + 25852 25851 25855 + 25856 25852 25855 + 25857 25852 25856 + 25857 25853 25852 + 25858 25853 25857 + 25853 25858 25850 + 25854 25686 25685 + 25685 25691 25854 + 25859 25854 25691 + 25855 25854 25859 + 25859 25860 25855 + 25855 25860 25861 + 25861 25856 25855 + 25857 25856 25861 + 25861 25862 25857 + 25857 25862 25863 + 25863 25858 25857 + 25691 25864 25859 + 25865 25859 25864 + 25866 25859 25865 + 25866 25860 25859 + 25861 25860 25866 + 25867 25861 25866 + 25868 25861 25867 + 25868 25862 25861 + 25696 25864 25691 + 25811 25864 25696 + 25864 25811 25865 + 25869 25865 25811 + 25865 25869 25870 + 25866 25865 25870 + 25866 25870 25871 + 25871 25867 25866 + 25867 25871 25872 + 25868 25867 25872 + 25696 25806 25811 + 25806 25696 25695 + 25811 25810 25869 + 25816 25869 25810 + 25869 25816 25873 + 25873 25870 25869 + 25870 25873 25874 + 25874 25871 25870 + 25875 25871 25874 + 25875 25872 25871 + 25872 25875 25876 + 25876 25877 25872 + 25868 25872 25877 + 25862 25868 25877 + 25877 25863 25862 + 25858 25863 25877 + 25821 25873 25816 + 25873 25821 25878 + 25878 25874 25873 + 25874 25878 25879 + 25875 25874 25879 + 25875 25879 25880 + 25880 25876 25875 + 25880 25850 25876 + 25850 25858 25876 + 25877 25876 25858 + 25826 25878 25821 + 25846 25878 25826 + 25846 25879 25878 + 25879 25846 25845 + 25845 25880 25879 + 25850 25880 25845 + 25846 25826 25825 + 25695 25694 25796 + 25796 25694 25701 + 25701 25797 25796 + 25881 25797 25701 + 25797 25881 25882 + 25882 25798 25797 + 25701 25700 25881 + 25881 25700 25883 + 25883 25884 25881 + 25882 25881 25884 + 25884 25885 25882 + 25886 25882 25885 + 25798 25882 25886 + 25887 25883 25700 + 25888 25883 25887 + 25884 25883 25888 + 25888 25889 25884 + 25884 25889 25890 + 25890 25885 25884 + 25891 25885 25890 + 25885 25891 25886 + 25700 25699 25887 + 25892 25887 25699 + 25887 25892 25893 + 25893 25894 25887 + 25887 25894 25888 + 25895 25888 25894 + 25889 25888 25895 + 25895 25896 25889 + 25890 25889 25896 + 25699 25698 25892 + 25897 25892 25698 + 25893 25892 25897 + 25897 25898 25893 + 25893 25898 25899 + 25899 25900 25893 + 25894 25893 25900 + 25900 25901 25894 + 25894 25901 25895 + 25698 25705 25897 + 25902 25897 25705 + 25897 25902 25903 + 25903 25898 25897 + 25899 25898 25903 + 25904 25899 25903 + 25905 25899 25904 + 25905 25906 25899 + 25900 25899 25906 + 25705 25704 25902 + 25907 25902 25704 + 25903 25902 25907 + 25907 25908 25903 + 25903 25908 25909 + 25909 25904 25903 + 25905 25904 25909 + 25712 25907 25704 + 25910 25907 25712 + 25907 25910 25911 + 25911 25908 25907 + 25908 25911 25912 + 25912 25909 25908 + 25909 25912 25913 + 25913 25914 25909 + 25909 25914 25905 + 25712 25716 25910 + 25915 25910 25716 + 25911 25910 25915 + 25915 25916 25911 + 25911 25916 25917 + 25917 25912 25911 + 25913 25912 25917 + 25716 25734 25915 + 25918 25915 25734 + 25915 25918 25919 + 25919 25916 25915 + 25916 25919 25920 + 25920 25917 25916 + 25921 25917 25920 + 25921 25922 25917 + 25917 25922 25913 + 25734 25733 25918 + 25918 25733 25739 + 25739 25923 25918 + 25919 25918 25923 + 25923 25924 25919 + 25919 25924 25925 + 25925 25920 25919 + 25921 25920 25925 + 25926 25923 25739 + 25923 25926 25927 + 25927 25924 25923 + 25924 25927 25928 + 25928 25925 25924 + 25929 25925 25928 + 25929 25930 25925 + 25925 25930 25921 + 25739 25931 25926 + 25891 25926 25931 + 25927 25926 25891 + 25891 25932 25927 + 25927 25932 25933 + 25933 25928 25927 + 25929 25928 25933 + 25738 25931 25739 + 25931 25738 25934 + 25934 25886 25931 + 25931 25886 25891 + 25934 25738 25935 + 25935 25936 25934 + 25798 25934 25936 + 25886 25934 25798 + 25737 25935 25738 + 25937 25935 25737 + 25935 25937 25938 + 25938 25936 25935 + 25936 25938 25939 + 25939 25799 25936 + 25936 25799 25798 + 25737 25743 25937 + 25937 25743 25940 + 25940 25941 25937 + 25938 25937 25941 + 25941 25942 25938 + 25939 25938 25942 + 25942 25791 25939 + 25790 25939 25791 + 25799 25939 25790 + 25747 25940 25743 + 25943 25940 25747 + 25941 25940 25943 + 25943 25944 25941 + 25941 25944 25945 + 25945 25942 25941 + 25791 25942 25945 + 25945 25792 25791 + 25792 25945 25946 + 25946 25793 25792 + 25747 25752 25943 + 25947 25943 25752 + 25944 25943 25947 + 25947 25948 25944 + 25945 25944 25948 + 25948 25946 25945 + 25946 25948 25949 + 25950 25946 25949 + 25950 25793 25946 + 25950 25951 25793 + 25788 25793 25951 + 25752 25952 25947 + 25952 25953 25947 + 25953 25954 25947 + 25954 25948 25947 + 25954 25949 25948 + 25949 25954 25955 + 25955 25956 25949 + 25950 25949 25956 + 25952 25752 25751 + 25957 25952 25751 + 25958 25952 25957 + 25958 25953 25952 + 25953 25958 25959 + 25959 25960 25953 + 25954 25953 25960 + 25960 25955 25954 + 25757 25957 25751 + 25958 25957 25757 + 25757 25961 25958 + 25958 25961 25962 + 25962 25959 25958 + 25963 25959 25962 + 25963 25960 25959 + 25963 25964 25960 + 25955 25960 25964 + 25965 25955 25964 + 25965 25956 25955 + 25762 25961 25757 + 25961 25762 25966 + 25966 25962 25961 + 25967 25962 25966 + 25967 25968 25962 + 25962 25968 25963 + 25963 25968 25969 + 25964 25963 25969 + 25767 25966 25762 + 25966 25767 25970 + 25967 25966 25970 + 25970 25971 25967 + 25967 25971 25972 + 25968 25967 25972 + 25968 25972 25969 + 25973 25970 25767 + 25970 25973 25974 + 25974 25971 25970 + 25972 25971 25974 + 25974 25975 25972 + 25972 25975 25976 + 25976 25969 25972 + 25973 25767 25766 + 25977 25973 25766 + 25974 25973 25977 + 25975 25974 25977 + 25977 25780 25975 + 25975 25780 25978 + 25978 25976 25975 + 25976 25978 25979 + 25980 25976 25979 + 25969 25976 25980 + 25771 25977 25766 + 25780 25977 25771 + 25779 25978 25780 + 25979 25978 25779 + 25979 25779 25981 + 25979 25981 25982 + 25982 25983 25979 + 25979 25983 25980 + 25983 25984 25980 + 25985 25980 25984 + 25980 25985 25969 + 25969 25985 25964 + 25981 25779 25778 + 25982 25981 25778 + 25778 25986 25982 + 25982 25986 25987 + 25988 25982 25987 + 25989 25982 25988 + 25989 25983 25982 + 25984 25983 25989 + 25784 25986 25778 + 25987 25986 25784 + 25987 25784 25788 + 25987 25788 25951 + 25987 25951 25990 + 25990 25988 25987 + 25988 25990 25991 + 25989 25988 25991 + 25989 25991 25992 + 25992 25984 25989 + 25984 25992 25993 + 25993 25994 25984 + 25984 25994 25985 + 25994 25964 25985 + 25994 25965 25964 + 25995 25990 25951 + 25996 25990 25995 + 25996 25991 25990 + 25991 25996 25993 + 25993 25992 25991 + 25951 25950 25995 + 25956 25995 25950 + 25995 25956 25997 + 25996 25995 25997 + 25996 25997 25993 + 25994 25993 25997 + 25997 25965 25994 + 25965 25997 25956 + 25890 25932 25891 + 25932 25890 25998 + 25998 25933 25932 + 25999 25933 25998 + 25999 26000 25933 + 25933 26000 25929 + 25896 25998 25890 + 25999 25998 25896 + 25896 26001 25999 + 25999 26001 26002 + 26002 26003 25999 + 26003 26004 25999 + 26004 26000 25999 + 25929 26000 26004 + 26005 26001 25896 + 26001 26005 26006 + 26006 26002 26001 + 26007 26002 26006 + 26007 26008 26002 + 26002 26008 26009 + 26009 26003 26002 + 26009 26004 26003 + 26005 25896 25895 + 26010 26005 25895 + 26005 26010 26011 + 26011 26006 26005 + 26006 26011 26012 + 26007 26006 26012 + 26007 26012 26013 + 26008 26007 26013 + 26013 26014 26008 + 26009 26008 26014 + 25901 26010 25895 + 26015 26010 25901 + 26010 26015 26016 + 26016 26011 26010 + 26017 26011 26016 + 26017 26012 26011 + 26012 26017 26018 + 26018 26013 26012 + 26013 26018 26019 + 26019 26014 26013 + 26014 26019 26009 + 26015 25901 25900 + 26015 25900 25906 + 26015 25906 26020 + 26020 26016 26015 + 26016 26020 26021 + 26017 26016 26021 + 26018 26017 26021 + 26018 26021 26022 + 26022 26023 26018 + 26019 26018 26023 + 26024 26020 25906 + 26025 26020 26024 + 26025 26021 26020 + 26022 26021 26025 + 26026 26022 26025 + 26022 26026 26027 + 26027 26028 26022 + 26022 26028 26023 + 25906 25905 26024 + 26029 26024 25905 + 26025 26024 26029 + 26029 26030 26025 + 26025 26030 26026 + 26026 26030 26031 + 26027 26026 26031 + 26031 26032 26027 + 26028 26027 26032 + 25905 25914 26029 + 26029 25914 25913 + 26033 26029 25913 + 26031 26029 26033 + 26031 26030 26029 + 26033 25913 25922 + 25922 26034 26033 + 26034 26032 26033 + 26032 26031 26033 + 26034 25922 25921 + 26035 26034 25921 + 26036 26034 26035 + 26036 26032 26034 + 26032 26036 26028 + 26037 26028 26036 + 26028 26037 26023 + 26023 26037 26038 + 26023 26038 26019 + 26039 26035 25921 + 26036 26035 26039 + 26039 26040 26036 + 26036 26040 26037 + 26040 26041 26037 + 26041 26038 26037 + 26038 26041 26042 + 26042 26019 26038 + 26019 26042 26009 + 26009 26042 26004 + 25921 25930 26039 + 26039 25930 25929 + 26043 26039 25929 + 26041 26039 26043 + 26041 26040 26039 + 26004 26043 25929 + 26041 26043 26004 + 26004 26042 26041 + 26044 26045 26046 + 26047 26045 26044 + 26048 26045 26047 + 26045 26048 26049 + 26049 26050 26045 + 26046 26051 26044 + 26052 26044 26051 + 26044 26052 26053 + 26053 26054 26044 + 26044 26054 26047 + 26055 26051 26046 + 26056 26051 26055 + 26051 26056 26052 + 26057 26052 26056 + 26053 26052 26057 + 26057 26058 26053 + 26059 26053 26058 + 26054 26053 26059 + 26046 26060 26055 + 26061 26055 26060 + 26062 26055 26061 + 26055 26062 26056 + 26056 26062 26063 + 26063 26064 26056 + 26056 26064 26057 + 26060 26046 26065 + 26060 26065 26066 + 26066 26067 26060 + 26060 26067 26068 + 26068 26061 26060 + 26069 26065 26046 + 26065 26069 26070 + 26070 26066 26065 + 26071 26066 26070 + 26066 26071 26072 + 26072 26067 26066 + 26067 26072 26073 + 26073 26068 26067 + 26050 26069 26046 + 26050 26049 26069 + 26069 26049 26070 + 26049 26074 26070 + 26075 26070 26074 + 26070 26075 26071 + 26076 26071 26075 + 26072 26071 26076 + 26076 26077 26072 + 26072 26077 26078 + 26073 26072 26078 + 26074 26049 26048 + 26048 26079 26074 + 26080 26074 26079 + 26074 26080 26075 + 26075 26080 26081 + 26081 26082 26075 + 26075 26082 26083 + 26083 26076 26075 + 26079 26048 26084 + 26085 26079 26084 + 26085 26086 26079 + 26079 26086 26080 + 26080 26086 26087 + 26087 26081 26080 + 26088 26081 26087 + 26081 26088 26082 + 26084 26048 26047 + 26084 26047 26089 + 26089 26090 26084 + 26084 26090 26085 + 26090 26091 26085 + 26086 26085 26091 + 26091 26092 26086 + 26086 26092 26087 + 26093 26089 26047 + 26089 26093 26094 + 26095 26089 26094 + 26089 26095 26090 + 26090 26095 26096 + 26096 26091 26090 + 26092 26091 26096 + 26047 26054 26093 + 26059 26093 26054 + 26093 26059 26097 + 26097 26094 26093 + 26094 26097 26098 + 26098 26099 26094 + 26094 26099 26100 + 26096 26094 26100 + 26096 26095 26094 + 26101 26097 26059 + 26097 26101 26102 + 26098 26097 26102 + 26102 26103 26098 + 26104 26098 26103 + 26099 26098 26104 + 26105 26101 26059 + 26101 26105 26106 + 26101 26106 26107 + 26107 26102 26101 + 26108 26102 26107 + 26102 26108 26109 + 26109 26103 26102 + 26058 26105 26059 + 26058 26110 26105 + 26110 26106 26105 + 26107 26106 26110 + 26107 26110 26111 + 26108 26107 26111 + 26111 26112 26108 + 26108 26112 26113 + 26113 26109 26108 + 26114 26109 26113 + 26103 26109 26114 + 26115 26110 26058 + 26110 26115 26116 + 26116 26111 26110 + 26112 26111 26116 + 26117 26112 26116 + 26112 26117 26118 + 26118 26113 26112 + 26119 26113 26118 + 26113 26119 26114 + 26058 26057 26115 + 26115 26057 26064 + 26064 26120 26115 + 26116 26115 26120 + 26120 26121 26116 + 26117 26116 26121 + 26121 26122 26117 + 26117 26122 26123 + 26118 26117 26123 + 26124 26120 26064 + 26120 26124 26125 + 26125 26121 26120 + 26122 26121 26125 + 26122 26125 26126 + 26126 26123 26122 + 26064 26063 26124 + 26124 26063 26127 + 26127 26128 26124 + 26124 26128 26129 + 26125 26124 26129 + 26129 26126 26125 + 26130 26126 26129 + 26130 26123 26126 + 26127 26063 26062 + 26062 26131 26127 + 26131 26132 26127 + 26133 26127 26132 + 26127 26133 26128 + 26128 26133 26134 + 26134 26129 26128 + 26061 26131 26062 + 26135 26131 26061 + 26131 26135 26136 + 26136 26132 26131 + 26132 26136 26137 + 26132 26137 26133 + 26134 26133 26137 + 26137 26138 26134 + 26139 26134 26138 + 26129 26134 26139 + 26061 26140 26135 + 26135 26140 26141 + 26141 26142 26135 + 26135 26142 26143 + 26143 26136 26135 + 26137 26136 26143 + 26143 26138 26137 + 26144 26138 26143 + 26138 26144 26139 + 26140 26061 26068 + 26068 26145 26140 + 26140 26145 26146 + 26146 26141 26140 + 26147 26141 26146 + 26141 26147 26148 + 26148 26142 26141 + 26142 26148 26149 + 26149 26143 26142 + 26143 26149 26144 + 26145 26068 26073 + 26073 26150 26145 + 26145 26150 26151 + 26151 26152 26145 + 26145 26152 26146 + 26153 26146 26152 + 26146 26153 26154 + 26146 26154 26147 + 26150 26073 26155 + 26155 26156 26150 + 26151 26150 26156 + 26156 26157 26151 + 26158 26151 26157 + 26158 26152 26151 + 26152 26158 26153 + 26078 26155 26073 + 26159 26155 26078 + 26155 26159 26156 + 26156 26159 26160 + 26160 26157 26156 + 26161 26157 26160 + 26157 26161 26158 + 26158 26161 26162 + 26153 26158 26162 + 26162 26163 26153 + 26154 26153 26163 + 26078 26164 26159 + 26160 26159 26164 + 26165 26160 26164 + 26166 26160 26165 + 26160 26166 26161 + 26161 26166 26167 + 26167 26162 26161 + 26168 26164 26078 + 26164 26168 26169 + 26169 26170 26164 + 26164 26170 26165 + 26168 26078 26077 + 26077 26171 26168 + 26168 26171 26172 + 26172 26173 26168 + 26173 26169 26168 + 26174 26169 26173 + 26169 26174 26170 + 26170 26174 26175 + 26175 26165 26170 + 26076 26171 26077 + 26171 26076 26083 + 26083 26172 26171 + 26176 26172 26083 + 26172 26176 26177 + 26177 26173 26172 + 26173 26177 26178 + 26178 26179 26173 + 26173 26179 26174 + 26175 26174 26179 + 26176 26083 26180 + 26180 26181 26176 + 26176 26181 26182 + 26177 26176 26182 + 26182 26183 26177 + 26183 26184 26177 + 26178 26177 26184 + 26082 26180 26083 + 26185 26180 26082 + 26185 26181 26180 + 26181 26185 26186 + 26186 26182 26181 + 26182 26186 26187 + 26183 26182 26187 + 26082 26088 26185 + 26185 26088 26188 + 26186 26185 26188 + 26187 26186 26188 + 26188 26189 26187 + 26187 26189 26190 + 26190 26183 26187 + 26183 26190 26191 + 26183 26191 26192 + 26192 26184 26183 + 26087 26188 26088 + 26188 26087 26193 + 26188 26193 26189 + 26194 26189 26193 + 26189 26194 26190 + 26195 26190 26194 + 26190 26195 26191 + 26191 26195 26196 + 26192 26191 26196 + 26193 26087 26092 + 26092 26197 26193 + 26193 26197 26198 + 26198 26199 26193 + 26199 26194 26193 + 26194 26199 26200 + 26200 26201 26194 + 26194 26201 26195 + 26092 26096 26197 + 26197 26096 26100 + 26100 26198 26197 + 26198 26100 26202 + 26202 26203 26198 + 26198 26203 26200 + 26200 26199 26198 + 26202 26100 26099 + 26099 26204 26202 + 26202 26204 26205 + 26205 26206 26202 + 26203 26202 26206 + 26206 26207 26203 + 26200 26203 26207 + 26207 26208 26200 + 26201 26200 26208 + 26104 26204 26099 + 26204 26104 26209 + 26209 26205 26204 + 26205 26209 26210 + 26210 26211 26205 + 26205 26211 26212 + 26212 26206 26205 + 26207 26206 26212 + 26213 26209 26104 + 26210 26209 26213 + 26213 26214 26210 + 26210 26214 26215 + 26215 26216 26210 + 26211 26210 26216 + 26216 26217 26211 + 26212 26211 26217 + 26104 26218 26213 + 26219 26213 26218 + 26213 26219 26220 + 26220 26214 26213 + 26214 26220 26221 + 26221 26215 26214 + 26103 26218 26104 + 26114 26218 26103 + 26218 26114 26219 + 26119 26219 26114 + 26220 26219 26119 + 26119 26222 26220 + 26221 26220 26222 + 26222 26223 26221 + 26224 26221 26223 + 26215 26221 26224 + 26224 26225 26215 + 26215 26225 26226 + 26226 26216 26215 + 26217 26216 26226 + 26118 26222 26119 + 26222 26118 26227 + 26227 26223 26222 + 26223 26227 26228 + 26228 26229 26223 + 26223 26229 26224 + 26224 26229 26230 + 26230 26231 26224 + 26225 26224 26231 + 26123 26227 26118 + 26228 26227 26123 + 26123 26130 26228 + 26228 26130 26232 + 26233 26228 26232 + 26229 26228 26233 + 26233 26230 26229 + 26230 26233 26234 + 26234 26235 26230 + 26230 26235 26236 + 26236 26231 26230 + 26129 26232 26130 + 26139 26232 26129 + 26232 26139 26237 + 26237 26238 26232 + 26232 26238 26233 + 26234 26233 26238 + 26238 26239 26234 + 26234 26239 26240 + 26240 26241 26234 + 26235 26234 26241 + 26242 26237 26139 + 26243 26237 26242 + 26238 26237 26243 + 26243 26239 26238 + 26239 26243 26244 + 26244 26240 26239 + 26139 26144 26242 + 26245 26242 26144 + 26242 26245 26246 + 26242 26246 26243 + 26243 26246 26247 + 26247 26244 26243 + 26248 26244 26247 + 26240 26244 26248 + 26144 26149 26245 + 26249 26245 26149 + 26246 26245 26249 + 26249 26250 26246 + 26246 26250 26247 + 26251 26247 26250 + 26247 26251 26252 + 26252 26253 26247 + 26247 26253 26248 + 26149 26148 26249 + 26254 26249 26148 + 26249 26254 26255 + 26255 26250 26249 + 26250 26255 26251 + 26251 26255 26256 + 26256 26257 26251 + 26252 26251 26257 + 26148 26147 26254 + 26258 26254 26147 + 26255 26254 26258 + 26258 26256 26255 + 26259 26256 26258 + 26256 26259 26260 + 26260 26257 26256 + 26257 26260 26261 + 26261 26262 26257 + 26257 26262 26252 + 26147 26154 26258 + 26163 26258 26154 + 26258 26163 26259 + 26259 26163 26162 + 26162 26263 26259 + 26259 26263 26264 + 26264 26260 26259 + 26261 26260 26264 + 26264 26265 26261 + 26266 26261 26265 + 26262 26261 26266 + 26266 26267 26262 + 26252 26262 26267 + 26268 26263 26162 + 26263 26268 26269 + 26269 26264 26263 + 26264 26269 26270 + 26270 26265 26264 + 26265 26270 26271 + 26271 26272 26265 + 26265 26272 26266 + 26162 26167 26268 + 26268 26167 26273 + 26273 26274 26268 + 26268 26274 26275 + 26275 26269 26268 + 26270 26269 26275 + 26275 26276 26270 + 26270 26276 26277 + 26277 26271 26270 + 26273 26167 26166 + 26166 26278 26273 + 26279 26273 26278 + 26273 26279 26280 + 26280 26274 26273 + 26274 26280 26281 + 26281 26275 26274 + 26275 26281 26282 + 26282 26276 26275 + 26165 26278 26166 + 26283 26278 26165 + 26278 26283 26279 + 26284 26279 26283 + 26280 26279 26284 + 26284 26285 26280 + 26281 26280 26285 + 26285 26286 26281 + 26282 26281 26286 + 26165 26175 26283 + 26283 26175 26287 + 26287 26288 26283 + 26283 26288 26284 + 26289 26284 26288 + 26284 26289 26290 + 26290 26285 26284 + 26285 26290 26291 + 26291 26286 26285 + 26179 26287 26175 + 26292 26287 26179 + 26288 26287 26292 + 26292 26293 26288 + 26288 26293 26289 + 26294 26289 26293 + 26290 26289 26294 + 26294 26295 26290 + 26290 26295 26296 + 26296 26291 26290 + 26179 26178 26292 + 26297 26292 26178 + 26293 26292 26297 + 26297 26298 26293 + 26293 26298 26294 + 26299 26294 26298 + 26294 26299 26300 + 26300 26295 26294 + 26295 26300 26301 + 26301 26296 26295 + 26178 26302 26297 + 26303 26297 26302 + 26298 26297 26303 + 26303 26304 26298 + 26298 26304 26299 + 26305 26299 26304 + 26300 26299 26305 + 26184 26302 26178 + 26302 26184 26192 + 26192 26306 26302 + 26302 26306 26303 + 26303 26306 26307 + 26307 26308 26303 + 26304 26303 26308 + 26308 26309 26304 + 26304 26309 26305 + 26306 26192 26310 + 26310 26307 26306 + 26311 26307 26310 + 26307 26311 26312 + 26312 26308 26307 + 26308 26312 26313 + 26313 26309 26308 + 26309 26313 26314 + 26314 26305 26309 + 26196 26310 26192 + 26196 26315 26310 + 26315 26311 26310 + 26311 26315 26316 + 26316 26312 26311 + 26313 26312 26316 + 26316 26317 26313 + 26314 26313 26317 + 26315 26196 26318 + 26318 26208 26315 + 26315 26208 26207 + 26207 26319 26315 + 26315 26319 26316 + 26320 26316 26319 + 26317 26316 26320 + 26195 26318 26196 + 26318 26195 26201 + 26208 26318 26201 + 26212 26319 26207 + 26319 26212 26320 + 26217 26320 26212 + 26317 26320 26217 + 26217 26321 26317 + 26317 26321 26314 + 26321 26322 26314 + 26323 26314 26322 + 26305 26314 26323 + 26323 26324 26305 + 26305 26324 26300 + 26226 26321 26217 + 26321 26226 26325 + 26325 26322 26321 + 26322 26325 26326 + 26326 26327 26322 + 26322 26327 26323 + 26323 26327 26328 + 26328 26329 26323 + 26324 26323 26329 + 26330 26325 26226 + 26326 26325 26330 + 26330 26331 26326 + 26326 26331 26332 + 26332 26333 26326 + 26327 26326 26333 + 26333 26328 26327 + 26226 26225 26330 + 26231 26330 26225 + 26330 26231 26236 + 26236 26331 26330 + 26331 26236 26334 + 26334 26332 26331 + 26332 26334 26335 + 26335 26336 26332 + 26332 26336 26337 + 26337 26333 26332 + 26328 26333 26337 + 26338 26334 26236 + 26335 26334 26338 + 26338 26339 26335 + 26335 26339 26340 + 26340 26341 26335 + 26336 26335 26341 + 26236 26235 26338 + 26241 26338 26235 + 26338 26241 26342 + 26342 26339 26338 + 26339 26342 26343 + 26343 26340 26339 + 26340 26343 26344 + 26344 26345 26340 + 26340 26345 26346 + 26346 26341 26340 + 26342 26241 26240 + 26240 26347 26342 + 26342 26347 26348 + 26348 26343 26342 + 26344 26343 26348 + 26348 26349 26344 + 26344 26349 26350 + 26350 26351 26344 + 26345 26344 26351 + 26248 26347 26240 + 26347 26248 26352 + 26352 26353 26347 + 26347 26353 26348 + 26353 26354 26348 + 26354 26355 26348 + 26355 26356 26348 + 26349 26348 26356 + 26357 26352 26248 + 26358 26352 26357 + 26353 26352 26358 + 26358 26359 26353 + 26353 26359 26360 + 26360 26354 26353 + 26354 26360 26361 + 26361 26355 26354 + 26248 26253 26357 + 26362 26357 26253 + 26357 26362 26363 + 26363 26364 26357 + 26357 26364 26358 + 26358 26364 26365 + 26365 26366 26358 + 26359 26358 26366 + 26253 26252 26362 + 26267 26362 26252 + 26363 26362 26267 + 26267 26367 26363 + 26363 26367 26368 + 26368 26369 26363 + 26364 26363 26369 + 26369 26365 26364 + 26266 26367 26267 + 26367 26266 26370 + 26370 26371 26367 + 26367 26371 26368 + 26372 26370 26266 + 26373 26370 26372 + 26371 26370 26373 + 26371 26373 26374 + 26374 26368 26371 + 26375 26372 26266 + 26376 26372 26375 + 26377 26372 26376 + 26372 26377 26373 + 26373 26377 26378 + 26378 26374 26373 + 26379 26374 26378 + 26368 26374 26379 + 26272 26375 26266 + 26380 26375 26272 + 26375 26380 26381 + 26381 26382 26375 + 26375 26382 26376 + 26272 26383 26380 + 26384 26380 26383 + 26381 26380 26384 + 26384 26385 26381 + 26386 26381 26385 + 26382 26381 26386 + 26386 26387 26382 + 26376 26382 26387 + 26388 26383 26272 + 26383 26388 26389 + 26389 26390 26383 + 26383 26390 26384 + 26391 26384 26390 + 26385 26384 26391 + 26272 26271 26388 + 26388 26271 26277 + 26277 26392 26388 + 26388 26392 26393 + 26393 26389 26388 + 26394 26389 26393 + 26389 26394 26395 + 26390 26389 26395 + 26390 26395 26391 + 26396 26392 26277 + 26392 26396 26397 + 26397 26393 26392 + 26393 26397 26398 + 26398 26399 26393 + 26393 26399 26394 + 26277 26400 26396 + 26396 26400 26401 + 26401 26402 26396 + 26396 26402 26403 + 26403 26397 26396 + 26398 26397 26403 + 26400 26277 26276 + 26276 26282 26400 + 26401 26400 26282 + 26282 26404 26401 + 26405 26401 26404 + 26401 26405 26406 + 26406 26402 26401 + 26402 26406 26407 + 26407 26403 26402 + 26286 26404 26282 + 26408 26404 26286 + 26404 26408 26405 + 26409 26405 26408 + 26406 26405 26409 + 26409 26410 26406 + 26406 26410 26411 + 26411 26407 26406 + 26412 26407 26411 + 26403 26407 26412 + 26286 26291 26408 + 26408 26291 26296 + 26296 26413 26408 + 26408 26413 26409 + 26414 26409 26413 + 26414 26410 26409 + 26410 26414 26415 + 26415 26416 26410 + 26410 26416 26411 + 26417 26413 26296 + 26413 26417 26414 + 26414 26417 26418 + 26418 26419 26414 + 26419 26420 26414 + 26420 26421 26414 + 26421 26415 26414 + 26296 26301 26417 + 26417 26301 26422 + 26422 26418 26417 + 26423 26418 26422 + 26418 26423 26424 + 26424 26419 26418 + 26422 26301 26300 + 26300 26324 26422 + 26329 26422 26324 + 26422 26329 26423 + 26423 26329 26328 + 26328 26425 26423 + 26423 26425 26426 + 26426 26424 26423 + 26427 26424 26426 + 26419 26424 26427 + 26427 26428 26419 + 26419 26428 26429 + 26429 26420 26419 + 26337 26425 26328 + 26425 26337 26430 + 26430 26426 26425 + 26426 26430 26431 + 26431 26432 26426 + 26426 26432 26427 + 26427 26432 26433 + 26433 26434 26427 + 26428 26427 26434 + 26430 26337 26336 + 26336 26435 26430 + 26431 26430 26435 + 26435 26436 26431 + 26431 26436 26437 + 26437 26438 26431 + 26432 26431 26438 + 26438 26433 26432 + 26341 26435 26336 + 26435 26341 26346 + 26346 26436 26435 + 26436 26346 26439 + 26439 26437 26436 + 26437 26439 26440 + 26440 26441 26437 + 26437 26441 26442 + 26442 26438 26437 + 26433 26438 26442 + 26443 26439 26346 + 26440 26439 26443 + 26443 26444 26440 + 26440 26444 26445 + 26445 26446 26440 + 26441 26440 26446 + 26446 26447 26441 + 26442 26441 26447 + 26346 26345 26443 + 26351 26443 26345 + 26443 26351 26448 + 26448 26444 26443 + 26444 26448 26449 + 26449 26445 26444 + 26445 26449 26450 + 26450 26451 26445 + 26446 26445 26451 + 26452 26446 26451 + 26447 26446 26452 + 26448 26351 26350 + 26350 26453 26448 + 26449 26448 26453 + 26453 26454 26449 + 26450 26449 26454 + 26454 26455 26450 + 26456 26450 26455 + 26450 26456 26457 + 26451 26450 26457 + 26457 26452 26451 + 26458 26453 26350 + 26453 26458 26459 + 26459 26454 26453 + 26454 26459 26460 + 26460 26455 26454 + 26455 26460 26461 + 26455 26461 26456 + 26462 26456 26461 + 26457 26456 26462 + 26350 26463 26458 + 26458 26463 26464 + 26464 26465 26458 + 26466 26458 26465 + 26466 26459 26458 + 26460 26459 26466 + 26463 26350 26349 + 26349 26467 26463 + 26464 26463 26467 + 26467 26468 26464 + 26469 26464 26468 + 26464 26469 26470 + 26470 26465 26464 + 26465 26470 26471 + 26471 26466 26465 + 26356 26467 26349 + 26467 26356 26472 + 26472 26468 26467 + 26468 26472 26473 + 26473 26474 26468 + 26468 26474 26469 + 26475 26469 26474 + 26470 26469 26475 + 26472 26356 26476 + 26476 26477 26472 + 26477 26473 26472 + 26473 26477 26478 + 26479 26473 26478 + 26479 26480 26473 + 26474 26473 26480 + 26356 26355 26476 + 26481 26476 26355 + 26476 26481 26482 + 26482 26477 26476 + 26477 26482 26483 + 26483 26478 26477 + 26355 26361 26481 + 26481 26361 26484 + 26484 26485 26481 + 26482 26481 26485 + 26485 26486 26482 + 26483 26482 26486 + 26486 26487 26483 + 26488 26483 26487 + 26478 26483 26488 + 26489 26484 26361 + 26484 26489 26490 + 26490 26491 26484 + 26484 26491 26492 + 26492 26485 26484 + 26486 26485 26492 + 26361 26360 26489 + 26489 26360 26359 + 26359 26493 26489 + 26490 26489 26493 + 26493 26494 26490 + 26495 26490 26494 + 26495 26496 26490 + 26491 26490 26496 + 26496 26497 26491 + 26497 26492 26491 + 26366 26493 26359 + 26493 26366 26498 + 26498 26494 26493 + 26494 26498 26495 + 26498 26499 26495 + 26495 26499 26500 + 26500 26501 26495 + 26496 26495 26501 + 26502 26496 26501 + 26497 26496 26502 + 26498 26366 26365 + 26365 26503 26498 + 26498 26503 26504 + 26504 26499 26498 + 26500 26499 26504 + 26504 26505 26500 + 26506 26500 26505 + 26501 26500 26506 + 26506 26507 26501 + 26507 26502 26501 + 26508 26503 26365 + 26503 26508 26509 + 26509 26504 26503 + 26504 26509 26510 + 26510 26505 26504 + 26505 26510 26511 + 26511 26512 26505 + 26505 26512 26506 + 26365 26369 26508 + 26508 26369 26368 + 26368 26513 26508 + 26508 26513 26514 + 26514 26509 26508 + 26510 26509 26514 + 26514 26515 26510 + 26516 26510 26515 + 26516 26511 26510 + 26379 26513 26368 + 26513 26379 26517 + 26517 26514 26513 + 26514 26517 26518 + 26518 26515 26514 + 26515 26518 26516 + 26518 26519 26516 + 26516 26519 26520 + 26520 26521 26516 + 26511 26516 26521 + 26522 26517 26379 + 26518 26517 26522 + 26522 26523 26518 + 26524 26518 26523 + 26524 26519 26518 + 26520 26519 26524 + 26524 26525 26520 + 26526 26520 26525 + 26521 26520 26526 + 26522 26379 26527 + 26528 26522 26527 + 26522 26528 26529 + 26529 26523 26522 + 26523 26529 26524 + 26529 26530 26524 + 26524 26530 26531 + 26531 26525 26524 + 26378 26527 26379 + 26532 26527 26378 + 26527 26532 26528 + 26528 26532 26533 + 26533 26534 26528 + 26529 26528 26534 + 26534 26535 26529 + 26536 26529 26535 + 26536 26530 26529 + 26531 26530 26536 + 26378 26537 26532 + 26532 26537 26538 + 26538 26533 26532 + 26539 26533 26538 + 26533 26539 26540 + 26540 26534 26533 + 26534 26540 26541 + 26541 26535 26534 + 26535 26541 26536 + 26537 26378 26377 + 26377 26542 26537 + 26538 26537 26542 + 26542 26488 26538 + 26487 26538 26488 + 26538 26487 26539 + 26376 26542 26377 + 26542 26376 26543 + 26543 26488 26542 + 26488 26543 26478 + 26544 26478 26543 + 26478 26544 26479 + 26543 26376 26387 + 26387 26544 26543 + 26545 26544 26387 + 26544 26545 26546 + 26546 26479 26544 + 26479 26546 26547 + 26547 26548 26479 + 26480 26479 26548 + 26387 26386 26545 + 26545 26386 26549 + 26549 26550 26545 + 26546 26545 26550 + 26550 26551 26546 + 26547 26546 26551 + 26551 26552 26547 + 26553 26547 26552 + 26548 26547 26553 + 26385 26549 26386 + 26554 26549 26385 + 26550 26549 26554 + 26554 26555 26550 + 26550 26555 26556 + 26556 26551 26550 + 26552 26551 26556 + 26385 26557 26554 + 26554 26557 26558 + 26558 26559 26554 + 26555 26554 26559 + 26559 26560 26555 + 26560 26556 26555 + 26391 26557 26385 + 26557 26391 26561 + 26561 26558 26557 + 26558 26561 26562 + 26562 26563 26558 + 26558 26563 26564 + 26564 26559 26558 + 26560 26559 26564 + 26565 26561 26391 + 26561 26565 26566 + 26562 26561 26566 + 26562 26566 26567 + 26567 26568 26562 + 26563 26562 26568 + 26568 26569 26563 + 26569 26564 26563 + 26391 26395 26565 + 26395 26394 26565 + 26394 26570 26565 + 26565 26570 26571 + 26571 26566 26565 + 26566 26571 26572 + 26572 26567 26566 + 26567 26572 26573 + 26573 26574 26567 + 26568 26567 26574 + 26570 26394 26399 + 26575 26570 26399 + 26570 26575 26576 + 26571 26570 26576 + 26577 26571 26576 + 26577 26572 26571 + 26573 26572 26577 + 26577 26578 26573 + 26579 26573 26578 + 26574 26573 26579 + 26580 26575 26399 + 26575 26580 26581 + 26581 26576 26575 + 26576 26581 26582 + 26582 26577 26576 + 26577 26582 26583 + 26583 26578 26577 + 26584 26578 26583 + 26578 26584 26579 + 26399 26398 26580 + 26585 26580 26398 + 26581 26580 26585 + 26585 26586 26581 + 26582 26581 26586 + 26586 26587 26582 + 26583 26582 26587 + 26587 26588 26583 + 26583 26588 26589 + 26589 26584 26583 + 26398 26590 26585 + 26591 26585 26590 + 26585 26591 26592 + 26592 26586 26585 + 26586 26592 26587 + 26592 26593 26587 + 26587 26593 26594 + 26594 26588 26587 + 26589 26588 26594 + 26403 26590 26398 + 26412 26590 26403 + 26590 26412 26591 + 26595 26591 26412 + 26592 26591 26595 + 26595 26596 26592 + 26597 26592 26596 + 26597 26593 26592 + 26594 26593 26597 + 26597 26598 26594 + 26598 26599 26594 + 26599 26589 26594 + 26584 26589 26599 + 26412 26600 26595 + 26601 26595 26600 + 26595 26601 26602 + 26602 26596 26595 + 26596 26602 26597 + 26602 26603 26597 + 26597 26603 26604 + 26604 26598 26597 + 26411 26600 26412 + 26605 26600 26411 + 26600 26605 26601 + 26606 26601 26605 + 26602 26601 26606 + 26606 26607 26602 + 26608 26602 26607 + 26608 26603 26602 + 26603 26608 26609 + 26604 26603 26609 + 26411 26610 26605 + 26605 26610 26611 + 26611 26612 26605 + 26606 26605 26612 + 26612 26613 26606 + 26613 26614 26606 + 26606 26614 26607 + 26610 26411 26416 + 26416 26615 26610 + 26611 26610 26615 + 26615 26616 26611 + 26617 26611 26616 + 26611 26617 26613 + 26613 26612 26611 + 26416 26415 26615 + 26615 26415 26421 + 26421 26616 26615 + 26553 26616 26421 + 26616 26553 26617 + 26552 26617 26553 + 26613 26617 26552 + 26552 26618 26613 + 26614 26613 26618 + 26618 26619 26614 + 26620 26614 26619 + 26614 26620 26607 + 26607 26620 26608 + 26421 26621 26553 + 26553 26621 26548 + 26622 26548 26621 + 26622 26480 26548 + 26623 26480 26622 + 26480 26623 26474 + 26624 26621 26421 + 26621 26624 26622 + 26625 26622 26624 + 26622 26625 26623 + 26623 26625 26626 + 26626 26475 26623 + 26474 26623 26475 + 26420 26624 26421 + 26624 26420 26429 + 26429 26627 26624 + 26624 26627 26625 + 26626 26625 26627 + 26627 26628 26626 + 26629 26626 26628 + 26475 26626 26629 + 26629 26630 26475 + 26475 26630 26470 + 26627 26429 26631 + 26631 26628 26627 + 26628 26631 26632 + 26632 26633 26628 + 26628 26633 26629 + 26634 26629 26633 + 26634 26635 26629 + 26630 26629 26635 + 26636 26631 26429 + 26632 26631 26636 + 26636 26637 26632 + 26638 26632 26637 + 26638 26639 26632 + 26633 26632 26639 + 26639 26634 26633 + 26429 26428 26636 + 26434 26636 26428 + 26636 26434 26640 + 26640 26637 26636 + 26637 26640 26638 + 26640 26641 26638 + 26638 26641 26642 + 26642 26643 26638 + 26639 26638 26643 + 26644 26639 26643 + 26634 26639 26644 + 26640 26434 26433 + 26433 26645 26640 + 26641 26640 26645 + 26646 26641 26645 + 26642 26641 26646 + 26646 26647 26642 + 26648 26642 26647 + 26643 26642 26648 + 26648 26649 26643 + 26644 26643 26649 + 26442 26645 26433 + 26645 26442 26650 + 26650 26646 26645 + 26646 26650 26651 + 26651 26647 26646 + 26647 26651 26652 + 26652 26653 26647 + 26647 26653 26648 + 26654 26648 26653 + 26649 26648 26654 + 26447 26650 26442 + 26651 26650 26447 + 26447 26655 26651 + 26656 26651 26655 + 26656 26652 26651 + 26657 26652 26656 + 26653 26652 26657 + 26657 26658 26653 + 26653 26658 26654 + 26452 26655 26447 + 26655 26452 26656 + 26452 26659 26656 + 26656 26659 26660 + 26660 26661 26656 + 26656 26661 26657 + 26661 26662 26657 + 26662 26663 26657 + 26663 26658 26657 + 26654 26658 26663 + 26457 26659 26452 + 26659 26457 26664 + 26660 26659 26664 + 26665 26660 26664 + 26661 26660 26665 + 26665 26662 26661 + 26662 26665 26666 + 26666 26663 26662 + 26663 26666 26654 + 26666 26667 26654 + 26654 26667 26649 + 26668 26649 26667 + 26649 26668 26644 + 26462 26664 26457 + 26664 26462 26669 + 26669 26665 26664 + 26665 26669 26670 + 26666 26665 26670 + 26667 26666 26670 + 26670 26671 26667 + 26671 26668 26667 + 26672 26668 26671 + 26668 26672 26673 + 26673 26644 26668 + 26644 26673 26634 + 26462 26674 26669 + 26674 26670 26669 + 26674 26675 26670 + 26670 26675 26676 + 26676 26671 26670 + 26671 26676 26672 + 26677 26672 26676 + 26672 26677 26678 + 26672 26678 26673 + 26674 26462 26679 + 26679 26680 26674 + 26680 26681 26674 + 26681 26675 26674 + 26675 26681 26682 + 26675 26682 26676 + 26682 26677 26676 + 26461 26679 26462 + 26683 26679 26461 + 26679 26683 26680 + 26683 26684 26680 + 26680 26684 26685 + 26685 26681 26680 + 26681 26685 26686 + 26686 26682 26681 + 26682 26686 26687 + 26687 26677 26682 + 26461 26688 26683 + 26683 26688 26689 + 26689 26690 26683 + 26684 26683 26690 + 26690 26691 26684 + 26691 26685 26684 + 26685 26691 26686 + 26687 26686 26691 + 26460 26688 26461 + 26689 26688 26460 + 26689 26460 26692 + 26692 26693 26689 + 26693 26694 26689 + 26689 26694 26691 + 26691 26690 26689 + 26466 26692 26460 + 26693 26692 26466 + 26466 26471 26693 + 26693 26471 26695 + 26695 26696 26693 + 26687 26693 26696 + 26687 26694 26693 + 26691 26694 26687 + 26695 26471 26470 + 26695 26470 26630 + 26635 26695 26630 + 26695 26635 26678 + 26678 26696 26695 + 26696 26678 26677 + 26677 26687 26696 + 26678 26635 26673 + 26635 26634 26673 + 26556 26618 26552 + 26618 26556 26619 + 26556 26697 26619 + 26619 26697 26698 + 26619 26698 26620 + 26699 26620 26698 + 26620 26699 26608 + 26560 26697 26556 + 26700 26697 26560 + 26697 26700 26698 + 26698 26700 26701 + 26701 26699 26698 + 26702 26699 26701 + 26608 26699 26702 + 26702 26609 26608 + 26609 26702 26703 + 26703 26604 26609 + 26560 26704 26700 + 26705 26700 26704 + 26705 26706 26700 + 26700 26706 26701 + 26701 26706 26707 + 26707 26708 26701 + 26701 26708 26702 + 26564 26704 26560 + 26704 26564 26709 + 26709 26705 26704 + 26705 26709 26710 + 26710 26711 26705 + 26705 26711 26707 + 26707 26706 26705 + 26569 26709 26564 + 26709 26569 26712 + 26710 26709 26712 + 26713 26710 26712 + 26710 26713 26714 + 26711 26710 26714 + 26714 26707 26711 + 26707 26714 26715 + 26708 26707 26715 + 26708 26715 26716 + 26716 26702 26708 + 26702 26716 26703 + 26717 26712 26569 + 26712 26717 26718 + 26718 26713 26712 + 26713 26718 26715 + 26715 26714 26713 + 26569 26568 26717 + 26717 26568 26574 + 26718 26717 26574 + 26719 26718 26574 + 26715 26718 26719 + 26719 26716 26715 + 26716 26719 26579 + 26716 26579 26703 + 26720 26703 26579 + 26703 26720 26604 + 26598 26604 26720 + 26720 26599 26598 + 26599 26720 26584 + 26579 26719 26574 + 26584 26720 26579 + 26539 26487 26486 + 26486 26721 26539 + 26539 26721 26722 + 26722 26540 26539 + 26540 26722 26723 + 26541 26540 26723 + 26492 26721 26486 + 26721 26492 26724 + 26724 26722 26721 + 26722 26724 26725 + 26725 26723 26722 + 26723 26725 26726 + 26726 26727 26723 + 26727 26541 26723 + 26727 26728 26541 + 26541 26728 26536 + 26497 26724 26492 + 26724 26497 26729 + 26725 26724 26729 + 26730 26725 26729 + 26730 26726 26725 + 26726 26730 26731 + 26732 26726 26731 + 26727 26726 26732 + 26732 26733 26727 + 26728 26727 26733 + 26502 26729 26497 + 26729 26502 26734 + 26734 26730 26729 + 26730 26734 26735 + 26735 26731 26730 + 26731 26735 26736 + 26736 26737 26731 + 26732 26731 26737 + 26738 26732 26737 + 26733 26732 26738 + 26507 26734 26502 + 26734 26507 26739 + 26735 26734 26739 + 26736 26735 26739 + 26740 26736 26739 + 26741 26736 26740 + 26737 26736 26741 + 26737 26741 26738 + 26741 26742 26738 + 26743 26738 26742 + 26738 26743 26733 + 26744 26739 26507 + 26739 26744 26740 + 26744 26745 26740 + 26740 26745 26746 + 26746 26526 26740 + 26740 26526 26741 + 26742 26741 26526 + 26507 26506 26744 + 26744 26506 26512 + 26512 26747 26744 + 26745 26744 26747 + 26746 26745 26747 + 26747 26748 26746 + 26746 26748 26521 + 26526 26746 26521 + 26748 26747 26512 + 26512 26511 26748 + 26748 26511 26521 + 26525 26742 26526 + 26525 26531 26742 + 26531 26749 26742 + 26742 26749 26743 + 26750 26743 26749 + 26743 26750 26733 + 26750 26728 26733 + 26536 26728 26750 + 26749 26531 26751 + 26751 26750 26749 + 26750 26751 26536 + 26536 26751 26531 + 26752 26753 26754 + 26753 26755 26754 + 26756 26754 26755 + 26754 26756 26757 + 26757 26758 26754 + 26754 26758 26752 + 26759 26752 26758 + 26760 26752 26759 + 26761 26755 26753 + 26762 26755 26761 + 26755 26762 26756 + 26756 26762 26763 + 26763 26764 26756 + 26757 26756 26764 + 26753 26765 26761 + 26766 26761 26765 + 26767 26761 26766 + 26761 26767 26762 + 26762 26767 26768 + 26768 26763 26762 + 26769 26763 26768 + 26763 26769 26770 + 26770 26764 26763 + 26771 26766 26765 + 26772 26766 26771 + 26766 26772 26767 + 26768 26767 26772 + 26772 26773 26768 + 26774 26768 26773 + 26768 26774 26769 + 26765 26775 26771 + 26776 26771 26775 + 26777 26771 26776 + 26771 26777 26772 + 26772 26777 26778 + 26778 26773 26772 + 26779 26773 26778 + 26773 26779 26774 + 26780 26774 26779 + 26769 26774 26780 + 26781 26776 26775 + 26782 26776 26781 + 26776 26782 26777 + 26778 26777 26782 + 26782 26783 26778 + 26784 26778 26783 + 26778 26784 26779 + 26775 26785 26781 + 26781 26785 26786 + 26786 26787 26781 + 26788 26781 26787 + 26781 26788 26782 + 26782 26788 26789 + 26789 26783 26782 + 26790 26783 26789 + 26783 26790 26784 + 26791 26786 26785 + 26785 26792 26791 + 26793 26791 26792 + 26792 26794 26793 + 26795 26793 26794 + 26794 26796 26795 + 26797 26795 26796 + 26798 26795 26797 + 26795 26798 26786 + 26786 26798 26799 + 26799 26787 26786 + 26800 26787 26799 + 26787 26800 26788 + 26789 26788 26800 + 26801 26797 26796 + 26797 26801 26802 + 26802 26803 26797 + 26797 26803 26798 + 26799 26798 26803 + 26803 26804 26799 + 26805 26799 26804 + 26799 26805 26800 + 26796 26760 26801 + 26801 26760 26806 + 26806 26807 26801 + 26802 26801 26807 + 26807 26808 26802 + 26802 26808 26809 + 26809 26810 26802 + 26803 26802 26810 + 26810 26804 26803 + 26759 26806 26760 + 26806 26759 26811 + 26811 26812 26806 + 26806 26812 26813 + 26813 26807 26806 + 26808 26807 26813 + 26813 26814 26808 + 26808 26814 26815 + 26815 26809 26808 + 26811 26759 26816 + 26816 26817 26811 + 26818 26811 26817 + 26812 26811 26818 + 26818 26819 26812 + 26812 26819 26820 + 26820 26813 26812 + 26814 26813 26820 + 26758 26816 26759 + 26821 26816 26758 + 26816 26821 26822 + 26822 26817 26816 + 26817 26822 26823 + 26823 26824 26817 + 26817 26824 26818 + 26825 26818 26824 + 26819 26818 26825 + 26758 26757 26821 + 26826 26821 26757 + 26822 26821 26826 + 26826 26827 26822 + 26823 26822 26827 + 26827 26828 26823 + 26829 26823 26828 + 26824 26823 26829 + 26829 26830 26824 + 26824 26830 26825 + 26757 26831 26826 + 26832 26826 26831 + 26826 26832 26833 + 26833 26827 26826 + 26827 26833 26834 + 26834 26828 26827 + 26764 26831 26757 + 26835 26831 26764 + 26831 26835 26832 + 26836 26832 26835 + 26833 26832 26836 + 26836 26837 26833 + 26833 26837 26838 + 26838 26834 26833 + 26839 26834 26838 + 26828 26834 26839 + 26764 26770 26835 + 26835 26770 26840 + 26840 26841 26835 + 26835 26841 26836 + 26842 26836 26841 + 26836 26842 26843 + 26843 26837 26836 + 26837 26843 26844 + 26844 26838 26837 + 26840 26770 26769 + 26845 26840 26769 + 26846 26840 26845 + 26846 26841 26840 + 26841 26846 26842 + 26847 26842 26846 + 26843 26842 26847 + 26847 26848 26843 + 26844 26843 26848 + 26769 26849 26845 + 26849 26850 26845 + 26851 26845 26850 + 26852 26845 26851 + 26845 26852 26846 + 26846 26852 26847 + 26780 26849 26769 + 26849 26780 26853 + 26849 26853 26854 + 26854 26850 26849 + 26855 26850 26854 + 26850 26855 26851 + 26856 26851 26855 + 26852 26851 26856 + 26856 26857 26852 + 26852 26857 26847 + 26853 26780 26858 + 26858 26859 26853 + 26854 26853 26859 + 26859 26860 26854 + 26861 26854 26860 + 26854 26861 26855 + 26779 26858 26780 + 26862 26858 26779 + 26859 26858 26862 + 26859 26862 26863 + 26863 26860 26859 + 26864 26860 26863 + 26860 26864 26861 + 26865 26861 26864 + 26855 26861 26865 + 26865 26866 26855 + 26855 26866 26856 + 26779 26784 26862 + 26862 26784 26790 + 26863 26862 26790 + 26867 26863 26790 + 26864 26863 26867 + 26867 26868 26864 + 26864 26868 26865 + 26869 26865 26868 + 26865 26869 26870 + 26870 26866 26865 + 26866 26870 26871 + 26871 26856 26866 + 26857 26856 26871 + 26790 26872 26867 + 26873 26867 26872 + 26867 26873 26874 + 26874 26868 26867 + 26868 26874 26869 + 26875 26869 26874 + 26870 26869 26875 + 26876 26872 26790 + 26877 26872 26876 + 26872 26877 26873 + 26878 26873 26877 + 26874 26873 26878 + 26878 26879 26874 + 26874 26879 26875 + 26790 26880 26876 + 26876 26880 26881 + 26882 26876 26881 + 26876 26882 26877 + 26877 26882 26883 + 26883 26884 26877 + 26877 26884 26878 + 26789 26880 26790 + 26880 26789 26885 + 26885 26881 26880 + 26886 26881 26885 + 26881 26886 26882 + 26882 26886 26887 + 26887 26883 26882 + 26888 26883 26887 + 26884 26883 26888 + 26800 26885 26789 + 26889 26885 26800 + 26885 26889 26890 + 26890 26886 26885 + 26886 26890 26891 + 26891 26887 26886 + 26892 26887 26891 + 26887 26892 26888 + 26800 26805 26889 + 26893 26889 26805 + 26890 26889 26893 + 26893 26894 26890 + 26890 26894 26895 + 26891 26890 26895 + 26895 26896 26891 + 26897 26891 26896 + 26891 26897 26892 + 26805 26898 26893 + 26899 26893 26898 + 26893 26899 26900 + 26900 26894 26893 + 26894 26900 26901 + 26901 26895 26894 + 26804 26898 26805 + 26902 26898 26804 + 26898 26902 26899 + 26899 26902 26903 + 26903 26904 26899 + 26900 26899 26904 + 26904 26905 26900 + 26901 26900 26905 + 26804 26810 26902 + 26902 26810 26809 + 26809 26903 26902 + 26903 26809 26815 + 26815 26906 26903 + 26903 26906 26907 + 26907 26904 26903 + 26905 26904 26907 + 26907 26908 26905 + 26905 26908 26909 + 26909 26910 26905 + 26905 26910 26901 + 26906 26815 26911 + 26911 26912 26906 + 26906 26912 26913 + 26913 26907 26906 + 26908 26907 26913 + 26913 26914 26908 + 26908 26914 26915 + 26915 26909 26908 + 26911 26815 26814 + 26814 26916 26911 + 26916 26917 26911 + 26917 26918 26911 + 26912 26911 26918 + 26918 26919 26912 + 26912 26919 26920 + 26920 26913 26912 + 26914 26913 26920 + 26820 26916 26814 + 26916 26820 26921 + 26921 26917 26916 + 26917 26921 26922 + 26922 26923 26917 + 26917 26923 26924 + 26924 26918 26917 + 26919 26918 26924 + 26921 26820 26819 + 26819 26925 26921 + 26921 26925 26926 + 26926 26922 26921 + 26927 26922 26926 + 26923 26922 26927 + 26927 26928 26923 + 26923 26928 26929 + 26929 26924 26923 + 26825 26925 26819 + 26925 26825 26930 + 26930 26926 26925 + 26926 26930 26931 + 26931 26932 26926 + 26926 26932 26927 + 26933 26927 26932 + 26928 26927 26933 + 26930 26825 26830 + 26830 26934 26930 + 26931 26930 26934 + 26934 26935 26931 + 26936 26931 26935 + 26932 26931 26936 + 26936 26937 26932 + 26932 26937 26933 + 26938 26934 26830 + 26934 26938 26939 + 26939 26935 26934 + 26935 26939 26940 + 26940 26941 26935 + 26935 26941 26936 + 26942 26936 26941 + 26937 26936 26942 + 26830 26829 26938 + 26938 26829 26943 + 26943 26944 26938 + 26939 26938 26944 + 26944 26945 26939 + 26940 26939 26945 + 26945 26946 26940 + 26947 26940 26946 + 26941 26940 26947 + 26828 26943 26829 + 26839 26943 26828 + 26943 26839 26948 + 26948 26944 26943 + 26944 26948 26949 + 26949 26945 26944 + 26945 26949 26950 + 26950 26946 26945 + 26946 26950 26951 + 26951 26952 26946 + 26946 26952 26947 + 26948 26839 26953 + 26953 26954 26948 + 26949 26948 26954 + 26954 26955 26949 + 26950 26949 26955 + 26955 26956 26950 + 26951 26950 26956 + 26838 26953 26839 + 26957 26953 26838 + 26953 26957 26958 + 26958 26954 26953 + 26954 26958 26959 + 26959 26955 26954 + 26955 26959 26960 + 26960 26956 26955 + 26838 26844 26957 + 26957 26844 26961 + 26961 26962 26957 + 26958 26957 26962 + 26962 26963 26958 + 26959 26958 26963 + 26963 26964 26959 + 26960 26959 26964 + 26848 26961 26844 + 26965 26961 26848 + 26961 26965 26966 + 26966 26962 26961 + 26962 26966 26967 + 26967 26963 26962 + 26963 26967 26968 + 26968 26964 26963 + 26848 26969 26965 + 26965 26969 26970 + 26970 26971 26965 + 26966 26965 26971 + 26971 26972 26966 + 26967 26966 26972 + 26972 26973 26967 + 26968 26967 26973 + 26969 26848 26847 + 26847 26974 26969 + 26969 26974 26975 + 26975 26970 26969 + 26976 26970 26975 + 26970 26976 26977 + 26977 26971 26970 + 26971 26977 26978 + 26978 26972 26971 + 26974 26847 26979 + 26979 26980 26974 + 26975 26974 26980 + 26980 26981 26975 + 26982 26975 26981 + 26975 26982 26976 + 26857 26979 26847 + 26983 26979 26857 + 26980 26979 26983 + 26980 26983 26981 + 26983 26984 26981 + 26985 26981 26984 + 26981 26985 26982 + 26986 26982 26985 + 26976 26982 26986 + 26986 26987 26976 + 26977 26976 26987 + 26857 26988 26983 + 26983 26988 26989 + 26989 26984 26983 + 26985 26984 26989 + 26989 26990 26985 + 26985 26990 26991 + 26991 26986 26985 + 26871 26988 26857 + 26988 26871 26992 + 26992 26989 26988 + 26989 26992 26993 + 26993 26990 26989 + 26990 26993 26994 + 26994 26991 26990 + 26995 26991 26994 + 26991 26995 26996 + 26996 26986 26991 + 26992 26871 26870 + 26870 26997 26992 + 26997 26998 26992 + 26993 26992 26998 + 26998 26999 26993 + 26993 26999 27000 + 27000 26994 26993 + 27001 26994 27000 + 26994 27001 26995 + 26875 26997 26870 + 26875 27002 26997 + 26997 27002 27003 + 27003 26998 26997 + 26998 27003 27004 + 27004 26999 26998 + 26999 27004 27005 + 27005 27000 26999 + 27006 27000 27005 + 27000 27006 27001 + 27002 26875 26879 + 26879 27007 27002 + 27002 27007 27008 + 27008 27003 27002 + 27004 27003 27008 + 27008 27009 27004 + 27004 27009 27005 + 27010 27005 27009 + 27005 27010 27006 + 27007 26879 26878 + 27007 26878 27011 + 27007 27011 27008 + 27012 27008 27011 + 27012 27009 27008 + 27009 27012 27010 + 27010 27012 26888 + 26892 27010 26888 + 27006 27010 26892 + 26892 26897 27006 + 27001 27006 26897 + 26878 27013 27011 + 27011 27013 27014 + 27011 27014 27012 + 27012 27014 26888 + 26884 26888 27014 + 27014 27013 26884 + 26884 27013 26878 + 26897 27015 27001 + 26896 27015 26897 + 27016 27015 26896 + 27015 27016 26995 + 26995 27001 27015 + 26896 27017 27016 + 27016 27017 27018 + 27018 27019 27016 + 27016 27019 26996 + 26996 26995 27016 + 27017 26896 26895 + 26895 27020 27017 + 27018 27017 27020 + 27020 27021 27018 + 27022 27018 27021 + 27019 27018 27022 + 27022 27023 27019 + 27019 27023 27024 + 27024 26996 27019 + 26986 26996 27024 + 26895 26901 27020 + 27020 26901 26910 + 26910 27021 27020 + 27021 26910 26909 + 26909 27025 27021 + 27021 27025 27022 + 27026 27022 27025 + 27023 27022 27026 + 27026 27027 27023 + 27023 27027 27028 + 27028 27024 27023 + 26987 27024 27028 + 27024 26987 26986 + 27025 26909 26915 + 26915 27029 27025 + 27025 27029 27026 + 27030 27026 27029 + 27026 27030 27031 + 27027 27026 27031 + 27027 27031 27032 + 27032 27028 27027 + 27033 27028 27032 + 27028 27033 26987 + 26987 27033 26977 + 27029 26915 27034 + 27034 27035 27029 + 27029 27035 27030 + 27036 27030 27035 + 27031 27030 27036 + 27036 27037 27031 + 27031 27037 27038 + 27038 27032 27031 + 27034 26915 26914 + 26914 27039 27034 + 27040 27034 27039 + 27035 27034 27040 + 27040 27041 27035 + 27035 27041 27036 + 27042 27036 27041 + 27037 27036 27042 + 26920 27039 26914 + 27039 26920 27043 + 27043 27044 27039 + 27039 27044 27040 + 27045 27040 27044 + 27041 27040 27045 + 27045 27046 27041 + 27041 27046 27042 + 27043 26920 26919 + 26919 27047 27043 + 27048 27043 27047 + 27044 27043 27048 + 27048 27049 27044 + 27044 27049 27045 + 27045 27049 27050 + 27050 27051 27045 + 27046 27045 27051 + 26924 27047 26919 + 27047 26924 26929 + 26929 27052 27047 + 27047 27052 27048 + 27053 27048 27052 + 27049 27048 27053 + 27053 27050 27049 + 27050 27053 27054 + 27054 27055 27050 + 27050 27055 27056 + 27056 27051 27050 + 27052 26929 27057 + 27057 27058 27052 + 27052 27058 27053 + 27054 27053 27058 + 27058 27059 27054 + 27054 27059 27060 + 27055 27054 27060 + 27060 27061 27055 + 27056 27055 27061 + 27057 26929 26928 + 26928 27062 27057 + 27063 27057 27062 + 27058 27057 27063 + 27063 27059 27058 + 27059 27063 27064 + 27064 27060 27059 + 27060 27064 27065 + 27061 27060 27065 + 26933 27062 26928 + 27062 26933 27066 + 27066 27067 27062 + 27062 27067 27063 + 27063 27067 27064 + 27068 27064 27067 + 27064 27068 27065 + 27066 26933 26937 + 26937 27069 27066 + 27066 27069 27068 + 27067 27066 27068 + 26942 27069 26937 + 27069 26942 27065 + 27065 27068 27069 + 26942 27070 27065 + 27071 27065 27070 + 27065 27071 27072 + 27072 27073 27065 + 27073 27074 27065 + 27074 27075 27065 + 27075 27061 27065 + 26941 27070 26942 + 26947 27070 26941 + 27070 26947 27071 + 26947 26952 27071 + 26952 26951 27071 + 26951 27076 27071 + 27071 27076 27072 + 27077 27072 27076 + 27072 27077 27078 + 27079 27072 27078 + 27072 27079 27073 + 26951 27080 27076 + 27080 27077 27076 + 27077 27080 26956 + 26956 26960 27077 + 27077 26960 27081 + 27081 27078 27077 + 27082 27078 27081 + 27078 27082 27079 + 26956 27080 26951 + 26964 27081 26960 + 27083 27081 26964 + 27081 27083 27082 + 27082 27083 27084 + 27084 27085 27082 + 27082 27085 27079 + 27073 27079 27085 + 27085 27086 27073 + 27086 27087 27073 + 27074 27073 27087 + 26964 26968 27083 + 27083 26968 27088 + 27088 27084 27083 + 27089 27084 27088 + 27084 27089 27086 + 27086 27085 27084 + 26973 27088 26968 + 27090 27088 26973 + 27088 27090 27089 + 27089 27090 27091 + 27091 27092 27089 + 27086 27089 27092 + 27092 27087 27086 + 27093 27087 27092 + 27087 27093 27074 + 26973 27094 27090 + 27090 27094 27095 + 27095 27091 27090 + 27096 27091 27095 + 27091 27096 27097 + 27097 27092 27091 + 27092 27097 27093 + 27094 26973 26972 + 26972 26978 27094 + 27094 26978 27098 + 27098 27095 27094 + 27038 27095 27098 + 27095 27038 27096 + 27096 27038 27037 + 27037 27099 27096 + 27097 27096 27099 + 27099 27100 27097 + 27093 27097 27100 + 27033 27098 26978 + 27032 27098 27033 + 27098 27032 27038 + 26978 26977 27033 + 27042 27099 27037 + 27099 27042 27101 + 27101 27100 27099 + 27100 27101 27102 + 27102 27103 27100 + 27100 27103 27093 + 27093 27103 27074 + 27075 27074 27103 + 27101 27042 27046 + 27046 27104 27101 + 27102 27101 27104 + 27104 27105 27102 + 27102 27105 27075 + 27103 27102 27075 + 27051 27104 27046 + 27104 27051 27056 + 27056 27105 27104 + 27105 27056 27061 + 27061 27075 27105 + 27106 27107 27108 + 27106 27109 27107 + 27110 27107 27109 + 27107 27110 27111 + 27108 27107 27111 + 27112 27106 27108 + 27106 27112 27113 + 27113 27114 27106 + 27114 27115 27106 + 27115 27116 27106 + 27106 27116 27109 + 27108 27117 27112 + 27112 27117 27118 + 27119 27112 27118 + 27112 27119 27113 + 27120 27117 27108 + 27117 27120 27121 + 27118 27117 27121 + 27118 27121 27122 + 27122 27123 27118 + 27119 27118 27123 + 27124 27119 27123 + 27119 27124 27113 + 27108 27111 27120 + 27120 27111 27125 + 27125 27126 27120 + 27121 27120 27126 + 27126 27127 27121 + 27122 27121 27127 + 27128 27125 27111 + 27125 27128 27129 + 27129 27130 27125 + 27125 27130 27131 + 27131 27126 27125 + 27127 27126 27131 + 27111 27110 27128 + 27132 27128 27110 + 27129 27128 27132 + 27132 27133 27129 + 27129 27133 27134 + 27134 27135 27129 + 27130 27129 27135 + 27135 27136 27130 + 27131 27130 27136 + 27110 27137 27132 + 27138 27132 27137 + 27132 27138 27139 + 27139 27133 27132 + 27133 27139 27140 + 27140 27134 27133 + 27109 27137 27110 + 27109 27141 27137 + 27141 27142 27137 + 27137 27142 27138 + 27143 27138 27142 + 27139 27138 27143 + 27143 27144 27139 + 27139 27144 27145 + 27145 27140 27139 + 27116 27141 27109 + 27116 27146 27141 + 27142 27141 27146 + 27146 27147 27142 + 27142 27147 27143 + 27143 27147 27148 + 27149 27143 27148 + 27143 27149 27150 + 27150 27144 27143 + 27116 27115 27146 + 27115 27151 27146 + 27146 27151 27147 + 27151 27148 27147 + 27148 27151 27152 + 27152 27153 27148 + 27148 27153 27154 + 27148 27154 27149 + 27150 27149 27154 + 27115 27152 27151 + 27115 27114 27152 + 27114 27155 27152 + 27152 27155 27156 + 27152 27156 27153 + 27153 27156 27157 + 27157 27154 27153 + 27154 27157 27158 + 27158 27159 27154 + 27154 27159 27150 + 27114 27160 27155 + 27160 27161 27155 + 27161 27156 27155 + 27156 27161 27162 + 27162 27157 27156 + 27158 27157 27162 + 27163 27160 27114 + 27160 27163 27164 + 27164 27161 27160 + 27161 27164 27165 + 27165 27162 27161 + 27162 27165 27166 + 27166 27167 27162 + 27162 27167 27158 + 27114 27113 27163 + 27113 27168 27163 + 27168 27169 27163 + 27169 27164 27163 + 27164 27169 27170 + 27170 27165 27164 + 27166 27165 27170 + 27171 27168 27113 + 27168 27171 27172 + 27172 27169 27168 + 27169 27172 27173 + 27173 27170 27169 + 27170 27173 27174 + 27174 27175 27170 + 27170 27175 27166 + 27113 27176 27171 + 27176 27177 27171 + 27171 27177 27178 + 27172 27171 27178 + 27172 27178 27179 + 27179 27173 27172 + 27174 27173 27179 + 27124 27176 27113 + 27176 27124 27180 + 27180 27177 27176 + 27177 27180 27181 + 27181 27178 27177 + 27178 27181 27182 + 27182 27179 27178 + 27179 27182 27183 + 27183 27184 27179 + 27179 27184 27174 + 27124 27185 27180 + 27185 27186 27180 + 27186 27181 27180 + 27181 27186 27187 + 27187 27182 27181 + 27183 27182 27187 + 27123 27185 27124 + 27185 27123 27122 + 27122 27186 27185 + 27186 27122 27188 + 27188 27187 27186 + 27187 27188 27189 + 27189 27190 27187 + 27187 27190 27183 + 27183 27190 27191 + 27191 27192 27183 + 27184 27183 27192 + 27127 27188 27122 + 27189 27188 27127 + 27127 27193 27189 + 27189 27193 27194 + 27194 27195 27189 + 27190 27189 27195 + 27195 27191 27190 + 27131 27193 27127 + 27193 27131 27196 + 27196 27194 27193 + 27194 27196 27197 + 27197 27198 27194 + 27194 27198 27199 + 27199 27195 27194 + 27191 27195 27199 + 27136 27196 27131 + 27197 27196 27136 + 27136 27200 27197 + 27197 27200 27201 + 27201 27202 27197 + 27198 27197 27202 + 27202 27203 27198 + 27199 27198 27203 + 27204 27200 27136 + 27200 27204 27205 + 27205 27201 27200 + 27201 27205 27206 + 27206 27207 27201 + 27201 27207 27208 + 27208 27202 27201 + 27203 27202 27208 + 27136 27135 27204 + 27204 27135 27134 + 27134 27209 27204 + 27204 27209 27210 + 27210 27205 27204 + 27206 27205 27210 + 27210 27211 27206 + 27206 27211 27212 + 27212 27213 27206 + 27207 27206 27213 + 27214 27209 27134 + 27209 27214 27215 + 27215 27210 27209 + 27210 27215 27216 + 27216 27211 27210 + 27211 27216 27217 + 27217 27212 27211 + 27134 27140 27214 + 27214 27140 27145 + 27145 27218 27214 + 27214 27218 27219 + 27219 27215 27214 + 27216 27215 27219 + 27219 27220 27216 + 27216 27220 27221 + 27221 27217 27216 + 27222 27218 27145 + 27218 27222 27223 + 27223 27219 27218 + 27219 27223 27224 + 27224 27220 27219 + 27220 27224 27225 + 27225 27221 27220 + 27145 27226 27222 + 27222 27226 27227 + 27227 27228 27222 + 27222 27228 27229 + 27229 27223 27222 + 27224 27223 27229 + 27229 27230 27224 + 27225 27224 27230 + 27226 27145 27144 + 27144 27150 27226 + 27227 27226 27150 + 27150 27159 27227 + 27231 27227 27159 + 27227 27231 27232 + 27232 27228 27227 + 27228 27232 27233 + 27233 27229 27228 + 27229 27233 27234 + 27234 27230 27229 + 27159 27158 27231 + 27235 27231 27158 + 27232 27231 27235 + 27235 27236 27232 + 27232 27236 27237 + 27237 27233 27232 + 27234 27233 27237 + 27237 27238 27234 + 27239 27234 27238 + 27230 27234 27239 + 27158 27167 27235 + 27240 27235 27167 + 27235 27240 27241 + 27241 27236 27235 + 27236 27241 27242 + 27242 27237 27236 + 27237 27242 27243 + 27243 27238 27237 + 27167 27166 27240 + 27244 27240 27166 + 27241 27240 27244 + 27244 27245 27241 + 27241 27245 27246 + 27246 27242 27241 + 27243 27242 27246 + 27166 27175 27244 + 27247 27244 27175 + 27244 27247 27248 + 27248 27245 27244 + 27245 27248 27249 + 27249 27246 27245 + 27246 27249 27250 + 27250 27251 27246 + 27246 27251 27243 + 27175 27174 27247 + 27252 27247 27174 + 27248 27247 27252 + 27252 27253 27248 + 27248 27253 27254 + 27254 27249 27248 + 27250 27249 27254 + 27174 27184 27252 + 27192 27252 27184 + 27252 27192 27255 + 27255 27253 27252 + 27253 27255 27256 + 27256 27254 27253 + 27254 27256 27257 + 27257 27258 27254 + 27254 27258 27250 + 27255 27192 27191 + 27191 27259 27255 + 27255 27259 27260 + 27260 27256 27255 + 27257 27256 27260 + 27260 27261 27257 + 27257 27261 27262 + 27262 27263 27257 + 27258 27257 27263 + 27199 27259 27191 + 27259 27199 27264 + 27264 27260 27259 + 27260 27264 27261 + 27264 27265 27261 + 27261 27265 27266 + 27266 27262 27261 + 27203 27264 27199 + 27265 27264 27203 + 27203 27267 27265 + 27265 27267 27268 + 27268 27266 27265 + 27269 27266 27268 + 27262 27266 27269 + 27269 27270 27262 + 27262 27270 27271 + 27271 27263 27262 + 27208 27267 27203 + 27267 27208 27272 + 27272 27268 27267 + 27273 27268 27272 + 27268 27273 27269 + 27274 27272 27208 + 27275 27272 27274 + 27272 27275 27273 + 27273 27275 27276 + 27276 27277 27273 + 27269 27273 27277 + 27208 27207 27274 + 27213 27274 27207 + 27278 27274 27213 + 27274 27278 27275 + 27276 27275 27278 + 27279 27276 27278 + 27280 27276 27279 + 27280 27277 27276 + 27277 27280 27281 + 27277 27281 27269 + 27213 27282 27278 + 27278 27282 27283 + 27283 27284 27278 + 27278 27284 27279 + 27285 27279 27284 + 27285 27286 27279 + 27279 27286 27280 + 27282 27213 27212 + 27212 27287 27282 + 27283 27282 27287 + 27287 27288 27283 + 27289 27283 27288 + 27284 27283 27289 + 27284 27289 27285 + 27285 27289 27290 + 27290 27291 27285 + 27286 27285 27291 + 27287 27212 27217 + 27217 27292 27287 + 27287 27292 27293 + 27293 27288 27287 + 27290 27288 27293 + 27288 27290 27289 + 27292 27217 27221 + 27221 27294 27292 + 27293 27292 27294 + 27295 27293 27294 + 27296 27293 27295 + 27293 27296 27290 + 27290 27296 27297 + 27297 27291 27290 + 27298 27291 27297 + 27291 27298 27286 + 27280 27286 27298 + 27221 27225 27294 + 27294 27225 27299 + 27299 27300 27294 + 27294 27300 27295 + 27301 27295 27300 + 27302 27295 27301 + 27295 27302 27296 + 27297 27296 27302 + 27299 27225 27230 + 27230 27303 27299 + 27304 27299 27303 + 27300 27299 27304 + 27300 27304 27301 + 27301 27304 27305 + 27305 27306 27301 + 27307 27301 27306 + 27301 27307 27302 + 27239 27303 27230 + 27305 27303 27239 + 27303 27305 27304 + 27305 27239 27308 + 27308 27306 27305 + 27309 27306 27308 + 27306 27309 27307 + 27310 27307 27309 + 27302 27307 27310 + 27310 27311 27302 + 27302 27311 27297 + 27312 27297 27311 + 27297 27312 27298 + 27313 27308 27239 + 27309 27308 27313 + 27313 27314 27309 + 27309 27314 27315 + 27315 27316 27309 + 27316 27310 27309 + 27317 27310 27316 + 27311 27310 27317 + 27311 27317 27312 + 27318 27313 27239 + 27319 27313 27318 + 27314 27313 27319 + 27314 27319 27320 + 27320 27315 27314 + 27315 27320 27321 + 27315 27321 27322 + 27322 27316 27315 + 27323 27318 27239 + 27324 27318 27323 + 27318 27324 27325 + 27325 27326 27318 + 27318 27326 27319 + 27319 27326 27327 + 27327 27320 27319 + 27321 27320 27327 + 27238 27323 27239 + 27328 27323 27238 + 27329 27323 27328 + 27323 27329 27324 + 27330 27324 27329 + 27325 27324 27330 + 27330 27331 27325 + 27332 27325 27331 + 27326 27325 27332 + 27332 27327 27326 + 27238 27243 27328 + 27333 27328 27243 + 27334 27328 27333 + 27328 27334 27329 + 27329 27334 27335 + 27335 27336 27329 + 27336 27330 27329 + 27337 27330 27336 + 27331 27330 27337 + 27243 27251 27333 + 27338 27333 27251 + 27333 27338 27339 + 27333 27339 27334 + 27335 27334 27339 + 27340 27335 27339 + 27341 27335 27340 + 27336 27335 27341 + 27336 27341 27337 + 27251 27250 27338 + 27338 27250 27342 + 27342 27343 27338 + 27339 27338 27343 + 27343 27344 27339 + 27339 27344 27340 + 27345 27340 27344 + 27340 27345 27346 + 27340 27346 27341 + 27337 27341 27346 + 27250 27258 27342 + 27263 27342 27258 + 27347 27342 27263 + 27342 27347 27348 + 27348 27343 27342 + 27344 27343 27348 + 27344 27348 27345 + 27345 27348 27347 + 27349 27345 27347 + 27346 27345 27349 + 27349 27350 27346 + 27346 27350 27351 + 27346 27351 27337 + 27263 27271 27347 + 27347 27271 27352 + 27352 27353 27347 + 27347 27353 27349 + 27354 27349 27353 + 27350 27349 27354 + 27350 27354 27355 + 27355 27351 27350 + 27356 27351 27355 + 27351 27356 27337 + 27352 27271 27270 + 27357 27352 27270 + 27358 27352 27357 + 27353 27352 27358 + 27353 27358 27354 + 27355 27354 27358 + 27358 27359 27355 + 27359 27360 27355 + 27361 27355 27360 + 27355 27361 27356 + 27270 27362 27357 + 27363 27357 27362 + 27359 27357 27363 + 27357 27359 27358 + 27364 27362 27270 + 27365 27362 27364 + 27362 27365 27363 + 27366 27363 27365 + 27359 27363 27366 + 27366 27360 27359 + 27367 27360 27366 + 27360 27367 27361 + 27270 27269 27364 + 27368 27364 27269 + 27365 27364 27368 + 27368 27369 27365 + 27365 27369 27366 + 27370 27366 27369 + 27366 27370 27367 + 27367 27370 27371 + 27367 27371 27372 + 27372 27361 27367 + 27373 27368 27269 + 27368 27373 27374 + 27375 27368 27374 + 27375 27369 27368 + 27369 27375 27370 + 27376 27370 27375 + 27370 27376 27371 + 27281 27373 27269 + 27377 27373 27281 + 27377 27374 27373 + 27374 27377 27378 + 27378 27379 27374 + 27375 27374 27379 + 27379 27376 27375 + 27380 27376 27379 + 27371 27376 27380 + 27371 27380 27381 + 27372 27371 27381 + 27281 27382 27377 + 27377 27382 27378 + 27383 27378 27382 + 27379 27378 27383 + 27379 27383 27380 + 27384 27380 27383 + 27384 27385 27380 + 27385 27381 27380 + 27386 27382 27281 + 27382 27386 27383 + 27383 27386 27384 + 27384 27386 27387 + 27388 27384 27387 + 27384 27388 27389 + 27389 27385 27384 + 27386 27281 27387 + 27280 27387 27281 + 27388 27387 27280 + 27298 27388 27280 + 27389 27388 27298 + 27298 27312 27389 + 27390 27389 27312 + 27385 27389 27390 + 27390 27391 27385 + 27381 27385 27391 + 27391 27392 27381 + 27392 27372 27381 + 27393 27390 27312 + 27394 27390 27393 + 27391 27390 27394 + 27394 27395 27391 + 27391 27395 27392 + 27395 27396 27392 + 27372 27392 27396 + 27397 27372 27396 + 27361 27372 27397 + 27317 27393 27312 + 27316 27393 27317 + 27322 27393 27316 + 27393 27322 27394 + 27394 27322 27321 + 27321 27398 27394 + 27398 27399 27394 + 27395 27394 27399 + 27399 27400 27395 + 27396 27395 27400 + 27400 27401 27396 + 27397 27396 27401 + 27327 27398 27321 + 27398 27327 27332 + 27398 27332 27402 + 27402 27399 27398 + 27400 27399 27402 + 27400 27402 27401 + 27402 27403 27401 + 27404 27401 27403 + 27401 27404 27397 + 27397 27404 27405 + 27356 27397 27405 + 27356 27361 27397 + 27403 27402 27332 + 27331 27403 27332 + 27331 27405 27403 + 27405 27404 27403 + 27337 27405 27331 + 27356 27405 27337 + 27406 27407 27408 + 27407 27406 27409 + 27410 27407 27409 + 27407 27410 27411 + 27411 27412 27407 + 27407 27412 27408 + 27408 27413 27406 + 27413 27414 27406 + 27409 27406 27414 + 27413 27408 27415 + 27415 27416 27413 + 27413 27416 27417 + 27417 27414 27413 + 27418 27414 27417 + 27414 27418 27409 + 27419 27415 27408 + 27415 27419 27420 + 27420 27421 27415 + 27416 27415 27421 + 27421 27422 27416 + 27417 27416 27422 + 27412 27419 27408 + 27423 27419 27412 + 27419 27423 27424 + 27424 27420 27419 + 27420 27424 27425 + 27425 27426 27420 + 27420 27426 27427 + 27427 27421 27420 + 27422 27421 27427 + 27412 27411 27423 + 27423 27411 27428 + 27428 27429 27423 + 27423 27429 27430 + 27430 27424 27423 + 27425 27424 27430 + 27428 27411 27410 + 27431 27428 27410 + 27428 27431 27432 + 27432 27429 27428 + 27429 27432 27433 + 27433 27430 27429 + 27430 27433 27434 + 27434 27435 27430 + 27430 27435 27425 + 27410 27436 27431 + 27437 27431 27436 + 27432 27431 27437 + 27437 27438 27432 + 27432 27438 27439 + 27439 27433 27432 + 27434 27433 27439 + 27436 27410 27409 + 27409 27440 27436 + 27440 27441 27436 + 27441 27442 27436 + 27442 27443 27436 + 27437 27436 27443 + 27440 27409 27444 + 27444 27445 27440 + 27445 27446 27440 + 27446 27447 27440 + 27447 27441 27440 + 27418 27444 27409 + 27448 27444 27418 + 27445 27444 27448 + 27448 27449 27445 + 27445 27449 27450 + 27450 27446 27445 + 27447 27446 27450 + 27418 27451 27448 + 27448 27451 27452 + 27452 27453 27448 + 27449 27448 27453 + 27453 27454 27449 + 27450 27449 27454 + 27417 27451 27418 + 27451 27417 27455 + 27455 27452 27451 + 27452 27455 27456 + 27456 27457 27452 + 27452 27457 27458 + 27458 27453 27452 + 27454 27453 27458 + 27422 27455 27417 + 27456 27455 27422 + 27422 27459 27456 + 27456 27459 27460 + 27460 27461 27456 + 27457 27456 27461 + 27461 27462 27457 + 27458 27457 27462 + 27427 27459 27422 + 27459 27427 27463 + 27463 27460 27459 + 27460 27463 27464 + 27464 27465 27460 + 27460 27465 27466 + 27466 27461 27460 + 27462 27461 27466 + 27467 27463 27427 + 27464 27463 27467 + 27467 27468 27464 + 27464 27468 27469 + 27469 27470 27464 + 27465 27464 27470 + 27470 27471 27465 + 27466 27465 27471 + 27427 27426 27467 + 27472 27467 27426 + 27467 27472 27473 + 27473 27468 27467 + 27468 27473 27474 + 27474 27469 27468 + 27426 27425 27472 + 27475 27472 27425 + 27473 27472 27475 + 27475 27476 27473 + 27473 27476 27477 + 27477 27478 27473 + 27478 27474 27473 + 27479 27474 27478 + 27469 27474 27479 + 27425 27435 27475 + 27480 27475 27435 + 27476 27475 27480 + 27480 27481 27476 + 27476 27481 27482 + 27482 27483 27476 + 27476 27483 27477 + 27435 27434 27480 + 27484 27480 27434 + 27481 27480 27484 + 27484 27485 27481 + 27482 27481 27485 + 27485 27486 27482 + 27487 27482 27486 + 27482 27487 27488 + 27488 27483 27482 + 27434 27489 27484 + 27490 27484 27489 + 27485 27484 27490 + 27490 27491 27485 + 27485 27491 27486 + 27491 27492 27486 + 27493 27486 27492 + 27486 27493 27487 + 27439 27489 27434 + 27494 27489 27439 + 27489 27494 27490 + 27490 27494 27495 + 27495 27496 27490 + 27491 27490 27496 + 27496 27497 27491 + 27492 27491 27497 + 27439 27498 27494 + 27494 27498 27499 + 27499 27495 27494 + 27500 27495 27499 + 27495 27500 27501 + 27501 27496 27495 + 27496 27501 27502 + 27497 27496 27502 + 27498 27439 27438 + 27438 27503 27498 + 27499 27498 27503 + 27503 27504 27499 + 27505 27499 27504 + 27499 27505 27500 + 27503 27438 27437 + 27437 27506 27503 + 27503 27506 27507 + 27507 27504 27503 + 27504 27507 27508 + 27509 27504 27508 + 27504 27509 27505 + 27510 27505 27509 + 27500 27505 27510 + 27506 27437 27443 + 27507 27506 27443 + 27507 27443 27442 + 27508 27507 27442 + 27511 27508 27442 + 27509 27508 27511 + 27511 27512 27509 + 27509 27512 27510 + 27513 27510 27512 + 27510 27513 27514 + 27514 27515 27510 + 27510 27515 27500 + 27511 27442 27441 + 27516 27511 27441 + 27511 27516 27517 + 27517 27512 27511 + 27512 27517 27513 + 27518 27513 27517 + 27514 27513 27518 + 27447 27516 27441 + 27517 27516 27447 + 27447 27519 27517 + 27517 27519 27518 + 27520 27518 27519 + 27518 27520 27521 + 27521 27522 27518 + 27518 27522 27514 + 27450 27519 27447 + 27519 27450 27520 + 27454 27520 27450 + 27521 27520 27454 + 27454 27523 27521 + 27521 27523 27524 + 27524 27525 27521 + 27522 27521 27525 + 27525 27526 27522 + 27514 27522 27526 + 27526 27527 27514 + 27515 27514 27527 + 27458 27523 27454 + 27523 27458 27528 + 27528 27524 27523 + 27524 27528 27529 + 27529 27530 27524 + 27524 27530 27531 + 27531 27525 27524 + 27526 27525 27531 + 27462 27528 27458 + 27529 27528 27462 + 27462 27532 27529 + 27529 27532 27533 + 27533 27534 27529 + 27530 27529 27534 + 27534 27535 27530 + 27531 27530 27535 + 27466 27532 27462 + 27532 27466 27536 + 27536 27533 27532 + 27533 27536 27537 + 27537 27538 27533 + 27533 27538 27539 + 27539 27534 27533 + 27535 27534 27539 + 27471 27536 27466 + 27537 27536 27471 + 27471 27540 27537 + 27541 27537 27540 + 27538 27537 27541 + 27541 27542 27538 + 27538 27542 27543 + 27539 27538 27543 + 27544 27540 27471 + 27540 27544 27545 + 27545 27546 27540 + 27540 27546 27541 + 27547 27541 27546 + 27542 27541 27547 + 27542 27547 27548 + 27548 27543 27542 + 27471 27470 27544 + 27544 27470 27469 + 27469 27549 27544 + 27544 27549 27550 + 27550 27545 27544 + 27551 27545 27550 + 27545 27551 27552 + 27552 27546 27545 + 27546 27552 27547 + 27548 27547 27552 + 27479 27549 27469 + 27549 27479 27553 + 27553 27550 27549 + 27554 27550 27553 + 27550 27554 27551 + 27555 27551 27554 + 27552 27551 27555 + 27555 27556 27552 + 27552 27556 27557 + 27557 27548 27552 + 27558 27553 27479 + 27559 27553 27558 + 27553 27559 27554 + 27554 27559 27560 + 27560 27561 27554 + 27554 27561 27555 + 27479 27562 27558 + 27563 27558 27562 + 27564 27558 27563 + 27558 27564 27559 + 27560 27559 27564 + 27478 27562 27479 + 27565 27562 27478 + 27562 27565 27563 + 27566 27563 27565 + 27567 27563 27566 + 27563 27567 27564 + 27564 27567 27568 + 27568 27569 27564 + 27564 27569 27560 + 27478 27570 27565 + 27565 27570 27571 + 27571 27572 27565 + 27565 27572 27566 + 27573 27566 27572 + 27574 27566 27573 + 27566 27574 27567 + 27568 27567 27574 + 27570 27478 27477 + 27477 27575 27570 + 27571 27570 27575 + 27575 27576 27571 + 27577 27571 27576 + 27571 27577 27578 + 27578 27572 27571 + 27572 27578 27573 + 27575 27477 27579 + 27579 27580 27575 + 27575 27580 27581 + 27581 27576 27575 + 27582 27576 27581 + 27576 27582 27577 + 27583 27577 27582 + 27578 27577 27583 + 27579 27477 27483 + 27483 27488 27579 + 27584 27579 27488 + 27580 27579 27584 + 27584 27585 27580 + 27581 27580 27585 + 27585 27586 27581 + 27587 27581 27586 + 27581 27587 27582 + 27488 27588 27584 + 27589 27584 27588 + 27585 27584 27589 + 27589 27590 27585 + 27585 27590 27591 + 27591 27586 27585 + 27592 27586 27591 + 27586 27592 27587 + 27593 27588 27488 + 27588 27593 27594 + 27594 27595 27588 + 27588 27595 27589 + 27589 27595 27596 + 27596 27597 27589 + 27590 27589 27597 + 27488 27487 27593 + 27593 27487 27493 + 27493 27598 27593 + 27594 27593 27598 + 27598 27599 27594 + 27594 27599 27600 + 27600 27601 27594 + 27595 27594 27601 + 27601 27596 27595 + 27602 27598 27493 + 27598 27602 27603 + 27603 27599 27598 + 27599 27603 27604 + 27604 27600 27599 + 27493 27605 27602 + 27606 27602 27605 + 27603 27602 27606 + 27606 27607 27603 + 27603 27607 27608 + 27608 27604 27603 + 27609 27604 27608 + 27600 27604 27609 + 27492 27605 27493 + 27605 27492 27610 + 27610 27611 27605 + 27605 27611 27606 + 27612 27606 27611 + 27606 27612 27613 + 27613 27607 27606 + 27607 27613 27614 + 27614 27608 27607 + 27492 27497 27610 + 27615 27610 27497 + 27611 27610 27615 + 27615 27616 27611 + 27611 27616 27612 + 27617 27612 27616 + 27613 27612 27617 + 27617 27618 27613 + 27613 27618 27619 + 27619 27614 27613 + 27497 27502 27615 + 27615 27502 27620 + 27621 27615 27620 + 27616 27615 27621 + 27621 27622 27616 + 27616 27622 27617 + 27623 27617 27622 + 27617 27623 27624 + 27624 27618 27617 + 27502 27625 27620 + 27626 27620 27625 + 27620 27626 27627 + 27627 27628 27620 + 27620 27628 27629 + 27629 27630 27620 + 27620 27630 27621 + 27631 27625 27502 + 27632 27625 27631 + 27625 27632 27626 + 27633 27626 27632 + 27627 27626 27633 + 27502 27501 27631 + 27631 27501 27500 + 27500 27515 27631 + 27527 27631 27515 + 27631 27527 27632 + 27632 27527 27526 + 27526 27634 27632 + 27632 27634 27633 + 27635 27633 27634 + 27633 27635 27636 + 27636 27637 27633 + 27633 27637 27627 + 27531 27634 27526 + 27634 27531 27635 + 27535 27635 27531 + 27636 27635 27535 + 27535 27638 27636 + 27636 27638 27639 + 27639 27640 27636 + 27640 27641 27636 + 27637 27636 27641 + 27641 27642 27637 + 27627 27637 27642 + 27539 27638 27535 + 27638 27539 27643 + 27643 27639 27638 + 27639 27643 27644 + 27644 27645 27639 + 27639 27645 27646 + 27646 27640 27639 + 27543 27643 27539 + 27644 27643 27543 + 27543 27647 27644 + 27648 27644 27647 + 27645 27644 27648 + 27648 27649 27645 + 27645 27649 27650 + 27650 27651 27645 + 27651 27646 27645 + 27647 27543 27548 + 27647 27548 27557 + 27557 27652 27647 + 27647 27652 27648 + 27652 27653 27648 + 27654 27648 27653 + 27649 27648 27654 + 27654 27655 27649 + 27649 27655 27656 + 27656 27650 27649 + 27657 27652 27557 + 27652 27657 27658 + 27658 27653 27652 + 27658 27659 27653 + 27653 27659 27654 + 27660 27654 27659 + 27654 27660 27661 + 27655 27654 27661 + 27657 27557 27556 + 27556 27662 27657 + 27657 27662 27663 + 27663 27664 27657 + 27664 27658 27657 + 27664 27665 27658 + 27665 27659 27658 + 27659 27665 27660 + 27666 27660 27665 + 27661 27660 27666 + 27662 27556 27555 + 27555 27667 27662 + 27662 27667 27668 + 27668 27663 27662 + 27668 27669 27663 + 27663 27669 27670 + 27670 27664 27663 + 27665 27664 27670 + 27665 27670 27666 + 27667 27555 27561 + 27561 27671 27667 + 27668 27667 27671 + 27671 27672 27668 + 27673 27668 27672 + 27668 27673 27669 + 27671 27561 27560 + 27560 27674 27671 + 27671 27674 27675 + 27675 27672 27671 + 27676 27672 27675 + 27672 27676 27673 + 27677 27673 27676 + 27669 27673 27677 + 27674 27560 27569 + 27569 27678 27674 + 27675 27674 27678 + 27678 27679 27675 + 27680 27675 27679 + 27675 27680 27676 + 27676 27680 27681 + 27681 27682 27676 + 27676 27682 27677 + 27678 27569 27568 + 27568 27683 27678 + 27678 27683 27684 + 27684 27679 27678 + 27685 27679 27684 + 27679 27685 27680 + 27681 27680 27685 + 27683 27568 27686 + 27686 27687 27683 + 27684 27683 27687 + 27687 27688 27684 + 27689 27684 27688 + 27684 27689 27685 + 27574 27686 27568 + 27690 27686 27574 + 27687 27686 27690 + 27690 27691 27687 + 27687 27691 27692 + 27692 27688 27687 + 27692 27693 27688 + 27693 27694 27688 + 27688 27694 27689 + 27574 27695 27690 + 27690 27695 27696 + 27696 27697 27690 + 27697 27698 27690 + 27691 27690 27698 + 27698 27699 27691 + 27699 27692 27691 + 27573 27695 27574 + 27695 27573 27700 + 27700 27696 27695 + 27696 27700 27701 + 27696 27701 27702 + 27702 27697 27696 + 27703 27697 27702 + 27698 27697 27703 + 27704 27698 27703 + 27699 27698 27704 + 27700 27573 27578 + 27578 27705 27700 + 27701 27700 27705 + 27705 27706 27701 + 27702 27701 27706 + 27707 27702 27706 + 27703 27702 27707 + 27707 27708 27703 + 27704 27703 27708 + 27583 27705 27578 + 27706 27705 27583 + 27583 27709 27706 + 27706 27709 27710 + 27710 27711 27706 + 27706 27711 27712 + 27712 27707 27706 + 27713 27707 27712 + 27708 27707 27713 + 27709 27583 27714 + 27714 27715 27709 + 27710 27709 27715 + 27715 27716 27710 + 27717 27710 27716 + 27710 27717 27718 + 27718 27711 27710 + 27582 27714 27583 + 27719 27714 27582 + 27715 27714 27719 + 27719 27720 27715 + 27715 27720 27721 + 27721 27716 27715 + 27722 27716 27721 + 27716 27722 27717 + 27723 27717 27722 + 27718 27717 27723 + 27582 27587 27719 + 27719 27587 27592 + 27592 27724 27719 + 27720 27719 27724 + 27724 27725 27720 + 27721 27720 27725 + 27725 27726 27721 + 27727 27721 27726 + 27721 27727 27722 + 27728 27724 27592 + 27725 27724 27728 + 27728 27729 27725 + 27725 27729 27730 + 27730 27726 27725 + 27731 27726 27730 + 27726 27731 27727 + 27732 27727 27731 + 27722 27727 27732 + 27592 27733 27728 + 27728 27733 27734 + 27734 27735 27728 + 27729 27728 27735 + 27735 27736 27729 + 27730 27729 27736 + 27591 27733 27592 + 27733 27591 27737 + 27737 27734 27733 + 27734 27737 27738 + 27738 27739 27734 + 27734 27739 27740 + 27740 27735 27734 + 27736 27735 27740 + 27741 27737 27591 + 27738 27737 27741 + 27741 27742 27738 + 27738 27742 27743 + 27738 27743 27744 + 27739 27738 27744 + 27740 27739 27744 + 27591 27590 27741 + 27597 27741 27590 + 27741 27597 27745 + 27745 27742 27741 + 27742 27745 27743 + 27745 27746 27743 + 27743 27746 27747 + 27744 27743 27747 + 27748 27744 27747 + 27740 27744 27748 + 27749 27740 27748 + 27740 27749 27736 + 27745 27597 27596 + 27596 27750 27745 + 27745 27750 27746 + 27750 27751 27746 + 27751 27752 27746 + 27746 27752 27747 + 27751 27750 27596 + 27596 27601 27751 + 27751 27601 27600 + 27600 27753 27751 + 27751 27753 27752 + 27747 27752 27753 + 27753 27609 27747 + 27609 27754 27747 + 27755 27747 27754 + 27747 27755 27748 + 27609 27753 27600 + 27608 27754 27609 + 27756 27754 27608 + 27754 27756 27755 + 27756 27757 27755 + 27758 27755 27757 + 27755 27758 27748 + 27608 27614 27756 + 27756 27614 27757 + 27614 27619 27757 + 27759 27757 27619 + 27757 27759 27758 + 27758 27759 27760 + 27761 27758 27760 + 27758 27761 27748 + 27748 27761 27762 + 27762 27763 27748 + 27763 27749 27748 + 27736 27749 27763 + 27619 27764 27759 + 27759 27764 27765 + 27765 27760 27759 + 27766 27760 27765 + 27760 27766 27761 + 27766 27762 27761 + 27767 27762 27766 + 27763 27762 27767 + 27767 27768 27763 + 27763 27768 27736 + 27736 27768 27730 + 27764 27619 27618 + 27618 27624 27764 + 27765 27764 27624 + 27624 27769 27765 + 27770 27765 27769 + 27765 27770 27766 + 27766 27770 27767 + 27767 27770 27771 + 27771 27772 27767 + 27768 27767 27772 + 27772 27730 27768 + 27730 27772 27731 + 27773 27769 27624 + 27771 27769 27773 + 27769 27771 27770 + 27624 27623 27773 + 27773 27623 27774 + 27774 27775 27773 + 27776 27773 27775 + 27773 27776 27771 + 27771 27776 27731 + 27731 27772 27771 + 27622 27774 27623 + 27774 27622 27621 + 27621 27777 27774 + 27774 27777 27778 + 27778 27775 27774 + 27732 27775 27778 + 27775 27732 27776 + 27731 27776 27732 + 27777 27621 27630 + 27630 27779 27777 + 27778 27777 27779 + 27779 27780 27778 + 27781 27778 27780 + 27778 27781 27732 + 27732 27781 27722 + 27722 27781 27723 + 27779 27630 27629 + 27629 27782 27779 + 27779 27782 27783 + 27783 27780 27779 + 27723 27780 27783 + 27780 27723 27781 + 27782 27629 27784 + 27784 27785 27782 + 27783 27782 27785 + 27785 27786 27783 + 27787 27783 27786 + 27783 27787 27723 + 27723 27787 27718 + 27788 27784 27629 + 27789 27784 27788 + 27784 27789 27790 + 27790 27785 27784 + 27785 27790 27791 + 27791 27786 27785 + 27792 27786 27791 + 27786 27792 27787 + 27629 27628 27788 + 27793 27788 27628 + 27788 27793 27794 + 27794 27795 27788 + 27788 27795 27789 + 27796 27789 27795 + 27790 27789 27796 + 27628 27627 27793 + 27642 27793 27627 + 27794 27793 27642 + 27642 27797 27794 + 27798 27794 27797 + 27795 27794 27798 + 27798 27799 27795 + 27795 27799 27800 + 27800 27796 27795 + 27797 27642 27641 + 27797 27641 27640 + 27640 27801 27797 + 27797 27801 27802 + 27802 27798 27797 + 27803 27798 27802 + 27799 27798 27803 + 27803 27804 27799 + 27799 27804 27805 + 27805 27800 27799 + 27646 27801 27640 + 27801 27646 27651 + 27651 27802 27801 + 27806 27802 27651 + 27802 27806 27803 + 27807 27803 27806 + 27804 27803 27807 + 27806 27651 27650 + 27650 27808 27806 + 27806 27808 27807 + 27809 27807 27808 + 27810 27807 27809 + 27807 27810 27804 + 27811 27808 27650 + 27808 27811 27809 + 27811 27812 27809 + 27812 27813 27809 + 27810 27809 27813 + 27813 27814 27810 + 27804 27810 27814 + 27650 27656 27811 + 27811 27656 27815 + 27815 27812 27811 + 27816 27812 27815 + 27812 27816 27817 + 27817 27813 27812 + 27813 27817 27818 + 27818 27814 27813 + 27819 27815 27656 + 27816 27815 27819 + 27819 27820 27816 + 27816 27820 27821 + 27816 27821 27817 + 27818 27817 27821 + 27821 27822 27818 + 27818 27822 27823 + 27814 27818 27823 + 27824 27819 27656 + 27825 27819 27824 + 27819 27825 27820 + 27820 27825 27826 + 27826 27821 27820 + 27822 27821 27826 + 27826 27827 27822 + 27822 27827 27828 + 27822 27828 27823 + 27824 27656 27655 + 27655 27661 27824 + 27829 27824 27661 + 27824 27829 27830 + 27824 27830 27825 + 27825 27830 27831 + 27831 27826 27825 + 27827 27826 27831 + 27661 27666 27829 + 27829 27666 27669 + 27669 27832 27829 + 27830 27829 27832 + 27832 27831 27830 + 27831 27832 27677 + 27677 27833 27831 + 27831 27833 27827 + 27666 27670 27669 + 27677 27832 27669 + 27833 27677 27682 + 27682 27834 27833 + 27827 27833 27834 + 27835 27827 27834 + 27827 27835 27828 + 27836 27828 27835 + 27828 27836 27837 + 27837 27823 27828 + 27823 27837 27838 + 27823 27838 27814 + 27834 27682 27681 + 27681 27839 27834 + 27840 27834 27839 + 27834 27840 27835 + 27836 27835 27840 + 27840 27841 27836 + 27837 27836 27841 + 27837 27841 27842 + 27838 27837 27842 + 27839 27681 27843 + 27843 27844 27839 + 27845 27839 27844 + 27845 27840 27839 + 27841 27840 27845 + 27845 27846 27841 + 27841 27846 27847 + 27847 27842 27841 + 27685 27843 27681 + 27848 27843 27685 + 27848 27849 27843 + 27849 27844 27843 + 27850 27844 27849 + 27844 27850 27845 + 27846 27845 27850 + 27850 27851 27846 + 27846 27851 27852 + 27847 27846 27852 + 27685 27689 27848 + 27848 27689 27694 + 27694 27853 27848 + 27849 27848 27853 + 27853 27854 27849 + 27855 27849 27854 + 27855 27850 27849 + 27850 27855 27851 + 27851 27855 27856 + 27856 27857 27851 + 27851 27857 27852 + 27853 27694 27693 + 27858 27853 27693 + 27854 27853 27858 + 27858 27859 27854 + 27854 27859 27860 + 27860 27856 27854 + 27854 27856 27855 + 27858 27693 27861 + 27861 27862 27858 + 27859 27858 27862 + 27862 27863 27859 + 27860 27859 27863 + 27864 27860 27863 + 27857 27860 27864 + 27860 27857 27856 + 27861 27693 27692 + 27865 27861 27692 + 27866 27861 27865 + 27862 27861 27866 + 27867 27862 27866 + 27863 27862 27867 + 27699 27865 27692 + 27868 27865 27699 + 27868 27866 27865 + 27866 27868 27869 + 27869 27870 27866 + 27870 27867 27866 + 27863 27867 27870 + 27699 27704 27868 + 27869 27868 27704 + 27708 27869 27704 + 27871 27869 27708 + 27871 27870 27869 + 27870 27871 27863 + 27863 27871 27872 + 27872 27873 27863 + 27873 27864 27863 + 27874 27864 27873 + 27864 27874 27852 + 27864 27852 27857 + 27708 27713 27871 + 27871 27713 27872 + 27713 27875 27872 + 27876 27872 27875 + 27876 27877 27872 + 27872 27877 27878 + 27878 27873 27872 + 27873 27878 27879 + 27873 27879 27874 + 27712 27875 27713 + 27712 27880 27875 + 27875 27880 27876 + 27792 27876 27880 + 27877 27876 27792 + 27792 27881 27877 + 27877 27881 27882 + 27882 27883 27877 + 27883 27878 27877 + 27879 27878 27883 + 27880 27712 27711 + 27711 27718 27880 + 27880 27718 27787 + 27787 27792 27880 + 27791 27881 27792 + 27881 27791 27884 + 27884 27882 27881 + 27882 27884 27885 + 27882 27885 27886 + 27886 27883 27882 + 27883 27886 27887 + 27883 27887 27879 + 27879 27887 27888 + 27874 27879 27888 + 27884 27791 27790 + 27790 27889 27884 + 27885 27884 27889 + 27889 27890 27885 + 27886 27885 27890 + 27890 27891 27886 + 27891 27892 27886 + 27887 27886 27892 + 27892 27888 27887 + 27796 27889 27790 + 27890 27889 27796 + 27890 27796 27800 + 27800 27891 27890 + 27805 27891 27800 + 27891 27805 27893 + 27893 27892 27891 + 27888 27892 27893 + 27888 27893 27894 + 27894 27895 27888 + 27888 27895 27874 + 27852 27874 27895 + 27895 27847 27852 + 27893 27805 27804 + 27894 27893 27804 + 27838 27894 27804 + 27842 27894 27838 + 27894 27842 27847 + 27847 27895 27894 + 27814 27838 27804 + 27896 27897 27898 + 27896 27899 27897 + 27900 27897 27899 + 27897 27900 27901 + 27898 27897 27901 + 27902 27896 27898 + 27896 27902 27903 + 27903 27904 27896 + 27904 27905 27896 + 27905 27906 27896 + 27896 27906 27899 + 27898 27907 27902 + 27902 27907 27908 + 27909 27902 27908 + 27902 27909 27903 + 27910 27907 27898 + 27907 27910 27911 + 27908 27907 27911 + 27908 27911 27912 + 27912 27913 27908 + 27909 27908 27913 + 27898 27901 27910 + 27910 27901 27914 + 27914 27915 27910 + 27911 27910 27915 + 27915 27916 27911 + 27912 27911 27916 + 27917 27914 27901 + 27914 27917 27918 + 27918 27919 27914 + 27914 27919 27920 + 27920 27915 27914 + 27916 27915 27920 + 27901 27900 27917 + 27921 27917 27900 + 27918 27917 27921 + 27921 27922 27918 + 27918 27922 27923 + 27923 27924 27918 + 27919 27918 27924 + 27924 27925 27919 + 27920 27919 27925 + 27900 27926 27921 + 27927 27921 27926 + 27921 27927 27928 + 27928 27922 27921 + 27922 27928 27929 + 27929 27923 27922 + 27899 27926 27900 + 27899 27930 27926 + 27930 27931 27926 + 27926 27931 27927 + 27932 27927 27931 + 27928 27927 27932 + 27932 27933 27928 + 27928 27933 27934 + 27934 27929 27928 + 27906 27930 27899 + 27906 27935 27930 + 27931 27930 27935 + 27935 27936 27931 + 27931 27936 27932 + 27937 27932 27936 + 27932 27937 27938 + 27938 27933 27932 + 27933 27938 27939 + 27939 27934 27933 + 27906 27905 27935 + 27905 27940 27935 + 27935 27940 27941 + 27941 27936 27935 + 27936 27941 27937 + 27942 27937 27941 + 27938 27937 27942 + 27942 27943 27938 + 27938 27943 27944 + 27944 27939 27938 + 27905 27945 27940 + 27941 27940 27945 + 27945 27946 27941 + 27941 27946 27942 + 27947 27942 27946 + 27942 27947 27948 + 27948 27943 27942 + 27943 27948 27949 + 27949 27944 27943 + 27950 27945 27905 + 27945 27950 27951 + 27951 27946 27945 + 27946 27951 27947 + 27952 27947 27951 + 27948 27947 27952 + 27952 27953 27948 + 27948 27953 27954 + 27954 27949 27948 + 27905 27904 27950 + 27904 27955 27950 + 27951 27950 27955 + 27955 27956 27951 + 27951 27956 27952 + 27957 27952 27956 + 27952 27957 27958 + 27958 27953 27952 + 27953 27958 27959 + 27959 27954 27953 + 27960 27955 27904 + 27955 27960 27961 + 27961 27956 27955 + 27956 27961 27957 + 27962 27957 27961 + 27958 27957 27962 + 27962 27963 27958 + 27958 27963 27964 + 27964 27959 27958 + 27904 27903 27960 + 27903 27965 27960 + 27965 27966 27960 + 27966 27961 27960 + 27961 27966 27962 + 27967 27962 27966 + 27962 27967 27968 + 27968 27963 27962 + 27963 27968 27969 + 27969 27964 27963 + 27970 27965 27903 + 27965 27970 27971 + 27971 27966 27965 + 27966 27971 27967 + 27972 27967 27971 + 27968 27967 27972 + 27972 27973 27968 + 27969 27968 27973 + 27903 27974 27970 + 27974 27975 27970 + 27971 27970 27975 + 27975 27976 27971 + 27971 27976 27972 + 27977 27972 27976 + 27972 27977 27978 + 27978 27973 27972 + 27979 27974 27903 + 27974 27979 27980 + 27980 27975 27974 + 27975 27980 27981 + 27981 27976 27975 + 27976 27981 27977 + 27982 27977 27981 + 27978 27977 27982 + 27909 27979 27903 + 27979 27909 27983 + 27979 27983 27980 + 27981 27980 27983 + 27983 27984 27981 + 27981 27984 27982 + 27985 27982 27984 + 27982 27985 27986 + 27986 27987 27982 + 27982 27987 27978 + 27909 27913 27983 + 27983 27913 27912 + 27983 27912 27984 + 27984 27912 27985 + 27916 27985 27912 + 27986 27985 27916 + 27916 27988 27986 + 27986 27988 27989 + 27989 27990 27986 + 27987 27986 27990 + 27990 27991 27987 + 27978 27987 27991 + 27991 27992 27978 + 27973 27978 27992 + 27920 27988 27916 + 27988 27920 27993 + 27993 27989 27988 + 27989 27993 27994 + 27994 27995 27989 + 27989 27995 27996 + 27996 27990 27989 + 27990 27996 27997 + 27997 27991 27990 + 27925 27993 27920 + 27994 27993 27925 + 27925 27998 27994 + 27994 27998 27999 + 27999 28000 27994 + 27995 27994 28000 + 28000 28001 27995 + 27996 27995 28001 + 28002 27996 28001 + 27997 27996 28002 + 28003 27998 27925 + 27998 28003 28004 + 28004 27999 27998 + 27999 28004 28005 + 28005 28006 27999 + 27999 28006 28007 + 28007 28000 27999 + 28001 28000 28007 + 27925 27924 28003 + 28003 27924 27923 + 27923 28008 28003 + 28003 28008 28009 + 28009 28004 28003 + 28005 28004 28009 + 28009 28010 28005 + 28011 28005 28010 + 28006 28005 28011 + 28011 28012 28006 + 28007 28006 28012 + 28013 28008 27923 + 28008 28013 28014 + 28014 28009 28008 + 28009 28014 28015 + 28015 28010 28009 + 28010 28015 28016 + 28016 28017 28010 + 28010 28017 28011 + 27923 27929 28013 + 28013 27929 27934 + 27934 28018 28013 + 28013 28018 28019 + 28019 28014 28013 + 28015 28014 28019 + 28019 28020 28015 + 28016 28015 28020 + 28021 28018 27934 + 28018 28021 28022 + 28022 28019 28018 + 28019 28022 28023 + 28023 28020 28019 + 28020 28023 28024 + 28024 28025 28020 + 28020 28025 28016 + 27934 27939 28021 + 28021 27939 27944 + 27944 28026 28021 + 28021 28026 28027 + 28027 28022 28021 + 28023 28022 28027 + 28027 28028 28023 + 28023 28028 28029 + 28024 28023 28029 + 28030 28026 27944 + 28026 28030 28031 + 28031 28027 28026 + 28027 28031 28032 + 28032 28028 28027 + 28028 28032 28033 + 28033 28029 28028 + 27944 27949 28030 + 28030 27949 27954 + 27954 28034 28030 + 28030 28034 28035 + 28035 28031 28030 + 28032 28031 28035 + 28035 28036 28032 + 28032 28036 28037 + 28037 28033 28032 + 28038 28033 28037 + 28029 28033 28038 + 28039 28034 27954 + 28034 28039 28040 + 28040 28035 28034 + 28035 28040 28041 + 28041 28036 28035 + 28036 28041 28042 + 28042 28037 28036 + 27954 27959 28039 + 28039 27959 27964 + 27964 28043 28039 + 28039 28043 28044 + 28044 28045 28039 + 28045 28040 28039 + 28041 28040 28045 + 28045 28046 28041 + 28041 28046 28047 + 28047 28042 28041 + 28043 27964 27969 + 27969 28048 28043 + 28043 28048 28049 + 28049 28050 28043 + 28043 28050 28044 + 28048 27969 28051 + 28051 28052 28048 + 28049 28048 28052 + 28052 28053 28049 + 28054 28049 28053 + 28049 28054 28055 + 28055 28050 28049 + 27973 28051 27969 + 27992 28051 27973 + 28052 28051 27992 + 27992 28056 28052 + 28052 28056 28057 + 28057 28053 28052 + 28058 28053 28057 + 28053 28058 28054 + 28054 28058 28059 + 28059 28060 28054 + 28055 28054 28060 + 28056 27992 27991 + 27991 27997 28056 + 27997 28061 28056 + 28061 28057 28056 + 28062 28057 28061 + 28057 28062 28058 + 28058 28062 28063 + 28063 28059 28058 + 28002 28061 27997 + 28064 28061 28002 + 28061 28064 28062 + 28063 28062 28064 + 28064 28065 28063 + 28066 28063 28065 + 28059 28063 28066 + 28066 28067 28059 + 28059 28067 28068 + 28068 28060 28059 + 28002 28069 28064 + 28064 28069 28070 + 28070 28065 28064 + 28065 28070 28071 + 28071 28072 28065 + 28065 28072 28066 + 28069 28002 28073 + 28073 28074 28069 + 28070 28069 28074 + 28074 28075 28070 + 28071 28070 28075 + 28073 28002 28001 + 28001 28076 28073 + 28077 28073 28076 + 28073 28077 28078 + 28078 28074 28073 + 28074 28078 28079 + 28079 28075 28074 + 28080 28076 28001 + 28081 28076 28080 + 28076 28081 28077 + 28082 28077 28081 + 28078 28077 28082 + 28082 28083 28078 + 28078 28083 28084 + 28084 28079 28078 + 28001 28085 28080 + 28080 28085 28086 + 28086 28087 28080 + 28088 28080 28087 + 28080 28088 28081 + 28007 28085 28001 + 28085 28007 28089 + 28089 28086 28085 + 28090 28086 28089 + 28086 28090 28091 + 28091 28087 28086 + 28087 28091 28092 + 28092 28093 28087 + 28087 28093 28088 + 28012 28089 28007 + 28094 28089 28012 + 28089 28094 28090 + 28090 28094 28095 + 28095 28096 28090 + 28090 28096 28097 + 28097 28091 28090 + 28092 28091 28097 + 28012 28098 28094 + 28095 28094 28098 + 28098 28099 28095 + 28100 28095 28099 + 28095 28100 28101 + 28101 28096 28095 + 28096 28101 28102 + 28102 28097 28096 + 28098 28012 28011 + 28011 28103 28098 + 28098 28103 28104 + 28104 28099 28098 + 28105 28099 28104 + 28099 28105 28100 + 28106 28100 28105 + 28101 28100 28106 + 28103 28011 28017 + 28017 28107 28103 + 28104 28103 28107 + 28108 28104 28107 + 28109 28104 28108 + 28104 28109 28105 + 28105 28109 28110 + 28110 28111 28105 + 28105 28111 28106 + 28107 28017 28016 + 28107 28016 28112 + 28112 28113 28107 + 28107 28113 28108 + 28114 28108 28113 + 28108 28114 28115 + 28108 28115 28109 + 28116 28109 28115 + 28116 28110 28109 + 28025 28112 28016 + 28117 28112 28025 + 28113 28112 28117 + 28113 28117 28114 + 28118 28114 28117 + 28115 28114 28118 + 28118 28119 28115 + 28115 28119 28116 + 28120 28116 28119 + 28121 28116 28120 + 28116 28121 28110 + 28025 28122 28117 + 28117 28122 28118 + 28122 28123 28118 + 28124 28118 28123 + 28118 28124 28119 + 28119 28124 28120 + 28125 28120 28124 + 28120 28125 28126 + 28121 28120 28126 + 28127 28122 28025 + 28122 28127 28128 + 28128 28123 28122 + 28123 28128 28129 + 28129 28130 28123 + 28123 28130 28124 + 28130 28125 28124 + 28131 28125 28130 + 28126 28125 28131 + 28025 28024 28127 + 28127 28024 28132 + 28132 28133 28127 + 28128 28127 28133 + 28134 28128 28133 + 28134 28135 28128 + 28135 28129 28128 + 28131 28129 28135 + 28130 28129 28131 + 28029 28132 28024 + 28136 28132 28029 + 28132 28136 28133 + 28133 28136 28137 + 28137 28138 28133 + 28133 28138 28134 + 28139 28134 28138 + 28135 28134 28139 + 28029 28038 28136 + 28136 28038 28140 + 28137 28136 28140 + 28140 28141 28137 + 28142 28137 28141 + 28138 28137 28142 + 28138 28142 28139 + 28037 28140 28038 + 28143 28140 28037 + 28140 28143 28144 + 28144 28141 28140 + 28141 28144 28145 + 28145 28146 28141 + 28141 28146 28142 + 28139 28142 28146 + 28037 28042 28143 + 28143 28042 28047 + 28047 28147 28143 + 28144 28143 28147 + 28147 28148 28144 + 28148 28149 28144 + 28145 28144 28149 + 28149 28150 28145 + 28151 28145 28150 + 28146 28145 28151 + 28147 28047 28152 + 28152 28153 28147 + 28147 28153 28154 + 28154 28148 28147 + 28148 28154 28155 + 28148 28155 28156 + 28156 28149 28148 + 28149 28156 28150 + 28152 28047 28046 + 28046 28157 28152 + 28158 28152 28157 + 28153 28152 28158 + 28158 28159 28153 + 28154 28153 28159 + 28159 28160 28154 + 28155 28154 28160 + 28160 28161 28155 + 28156 28155 28161 + 28157 28046 28045 + 28045 28162 28157 + 28157 28162 28163 + 28163 28164 28157 + 28157 28164 28158 + 28165 28158 28164 + 28158 28165 28166 + 28166 28159 28158 + 28162 28045 28044 + 28044 28167 28162 + 28163 28162 28167 + 28167 28168 28163 + 28169 28163 28168 + 28163 28169 28170 + 28170 28164 28163 + 28164 28170 28165 + 28171 28165 28170 + 28166 28165 28171 + 28167 28044 28172 + 28172 28173 28167 + 28167 28173 28174 + 28174 28168 28167 + 28175 28168 28174 + 28168 28175 28169 + 28176 28169 28175 + 28170 28169 28176 + 28172 28044 28050 + 28050 28055 28172 + 28172 28055 28177 + 28177 28178 28172 + 28173 28172 28178 + 28178 28179 28173 + 28174 28173 28179 + 28179 28180 28174 + 28181 28174 28180 + 28174 28181 28175 + 28060 28177 28055 + 28177 28060 28068 + 28068 28182 28177 + 28177 28182 28183 + 28183 28178 28177 + 28179 28178 28183 + 28183 28184 28179 + 28179 28184 28185 + 28185 28180 28179 + 28186 28180 28185 + 28180 28186 28181 + 28182 28068 28187 + 28187 28188 28182 + 28183 28182 28188 + 28188 28189 28183 + 28183 28189 28190 + 28184 28183 28190 + 28185 28184 28190 + 28191 28187 28068 + 28192 28187 28191 + 28192 28193 28187 + 28193 28188 28187 + 28188 28193 28194 + 28194 28189 28188 + 28194 28195 28189 + 28195 28190 28189 + 28068 28067 28191 + 28196 28191 28067 + 28191 28196 28197 + 28197 28198 28191 + 28191 28198 28192 + 28199 28192 28198 + 28199 28200 28192 + 28200 28193 28192 + 28200 28194 28193 + 28067 28066 28196 + 28201 28196 28066 + 28197 28196 28201 + 28201 28202 28197 + 28203 28197 28202 + 28203 28199 28197 + 28199 28198 28197 + 28066 28072 28201 + 28204 28201 28072 + 28201 28204 28205 + 28205 28202 28201 + 28202 28205 28206 + 28206 28203 28202 + 28199 28203 28206 + 28200 28199 28206 + 28207 28200 28206 + 28200 28207 28194 + 28207 28195 28194 + 28208 28195 28207 + 28190 28195 28208 + 28072 28071 28204 + 28209 28204 28071 + 28205 28204 28209 + 28209 28210 28205 + 28206 28205 28210 + 28211 28206 28210 + 28206 28211 28212 + 28212 28207 28206 + 28207 28212 28208 + 28071 28213 28209 + 28214 28209 28213 + 28209 28214 28215 + 28215 28210 28209 + 28210 28215 28211 + 28211 28215 28216 + 28217 28211 28216 + 28211 28217 28212 + 28075 28213 28071 + 28218 28213 28075 + 28213 28218 28214 + 28219 28214 28218 + 28215 28214 28219 + 28219 28216 28215 + 28220 28216 28219 + 28216 28220 28217 + 28217 28220 28221 + 28222 28217 28221 + 28217 28222 28212 + 28075 28079 28218 + 28218 28079 28084 + 28084 28223 28218 + 28218 28223 28219 + 28224 28219 28223 + 28219 28224 28220 + 28220 28224 28225 + 28225 28221 28220 + 28226 28221 28225 + 28221 28226 28222 + 28227 28223 28084 + 28223 28227 28224 + 28225 28224 28227 + 28227 28228 28225 + 28229 28225 28228 + 28225 28229 28226 + 28226 28229 28230 + 28230 28231 28226 + 28222 28226 28231 + 28084 28232 28227 + 28227 28232 28233 + 28233 28228 28227 + 28234 28228 28233 + 28228 28234 28229 + 28230 28229 28234 + 28232 28084 28083 + 28083 28235 28232 + 28233 28232 28235 + 28235 28236 28233 + 28237 28233 28236 + 28233 28237 28234 + 28234 28237 28238 + 28238 28239 28234 + 28234 28239 28230 + 28235 28083 28082 + 28082 28240 28235 + 28235 28240 28241 + 28241 28236 28235 + 28242 28236 28241 + 28236 28242 28237 + 28238 28237 28242 + 28240 28082 28243 + 28243 28244 28240 + 28241 28240 28244 + 28244 28245 28241 + 28246 28241 28245 + 28241 28246 28242 + 28081 28243 28082 + 28247 28243 28081 + 28244 28243 28247 + 28247 28248 28244 + 28244 28248 28249 + 28249 28245 28244 + 28250 28245 28249 + 28245 28250 28246 + 28251 28246 28250 + 28242 28246 28251 + 28081 28088 28247 + 28247 28088 28093 + 28093 28252 28247 + 28248 28247 28252 + 28252 28253 28248 + 28249 28248 28253 + 28253 28254 28249 + 28255 28249 28254 + 28249 28255 28250 + 28256 28252 28093 + 28252 28256 28257 + 28257 28253 28252 + 28253 28257 28258 + 28258 28254 28253 + 28259 28254 28258 + 28254 28259 28255 + 28260 28255 28259 + 28250 28255 28260 + 28093 28092 28256 + 28261 28256 28092 + 28257 28256 28261 + 28261 28262 28257 + 28257 28262 28263 + 28263 28264 28257 + 28264 28258 28257 + 28258 28264 28265 + 28259 28258 28265 + 28092 28266 28261 + 28267 28261 28266 + 28261 28267 28268 + 28268 28262 28261 + 28262 28268 28269 + 28269 28263 28262 + 28097 28266 28092 + 28270 28266 28097 + 28266 28270 28267 + 28271 28267 28270 + 28268 28267 28271 + 28271 28272 28268 + 28268 28272 28273 + 28273 28269 28268 + 28097 28102 28270 + 28270 28102 28274 + 28274 28275 28270 + 28270 28275 28271 + 28276 28271 28275 + 28271 28276 28277 + 28277 28272 28271 + 28272 28277 28278 + 28278 28273 28272 + 28274 28102 28101 + 28101 28279 28274 + 28279 28280 28274 + 28280 28281 28274 + 28274 28281 28275 + 28281 28282 28275 + 28275 28282 28276 + 28106 28279 28101 + 28106 28283 28279 + 28283 28280 28279 + 28280 28283 28284 + 28284 28285 28280 + 28280 28285 28281 + 28285 28286 28281 + 28282 28281 28286 + 28286 28287 28282 + 28282 28287 28276 + 28288 28283 28106 + 28284 28283 28288 + 28288 28289 28284 + 28290 28284 28289 + 28284 28290 28291 + 28291 28285 28284 + 28285 28291 28292 + 28292 28286 28285 + 28286 28292 28287 + 28111 28288 28106 + 28293 28288 28111 + 28288 28293 28294 + 28294 28289 28288 + 28295 28289 28294 + 28289 28295 28290 + 28110 28293 28111 + 28121 28293 28110 + 28294 28293 28121 + 28121 28126 28294 + 28126 28296 28294 + 28297 28294 28296 + 28294 28297 28295 + 28295 28297 28298 + 28298 28299 28295 + 28295 28299 28290 + 28300 28296 28126 + 28301 28296 28300 + 28296 28301 28297 + 28301 28302 28297 + 28302 28298 28297 + 28298 28302 28303 + 28304 28298 28303 + 28304 28299 28298 + 28126 28131 28300 + 28305 28300 28131 + 28301 28300 28305 + 28305 28302 28301 + 28303 28302 28305 + 28306 28303 28305 + 28303 28306 28307 + 28307 28304 28303 + 28308 28304 28307 + 28304 28308 28299 + 28309 28305 28131 + 28309 28306 28305 + 28309 28310 28306 + 28306 28310 28311 + 28311 28307 28306 + 28307 28311 28312 + 28312 28313 28307 + 28307 28313 28308 + 28135 28309 28131 + 28310 28309 28135 + 28135 28314 28310 + 28310 28314 28315 + 28315 28311 28310 + 28312 28311 28315 + 28315 28151 28312 + 28312 28151 28150 + 28316 28312 28150 + 28313 28312 28316 + 28139 28314 28135 + 28314 28139 28317 + 28317 28315 28314 + 28315 28317 28151 + 28151 28317 28146 + 28146 28317 28139 + 28316 28318 28313 + 28316 28319 28318 + 28318 28319 28320 + 28318 28320 28308 + 28308 28313 28318 + 28319 28316 28321 + 28321 28322 28319 + 28323 28319 28322 + 28319 28323 28320 + 28324 28320 28323 + 28320 28324 28299 + 28299 28308 28320 + 28321 28316 28150 + 28150 28325 28321 + 28326 28321 28325 + 28322 28321 28326 + 28326 28327 28322 + 28322 28327 28328 + 28322 28328 28323 + 28323 28328 28329 + 28324 28323 28329 + 28330 28325 28150 + 28325 28330 28331 + 28325 28331 28326 + 28326 28331 28332 + 28333 28326 28332 + 28327 28326 28333 + 28150 28156 28330 + 28334 28330 28156 + 28334 28332 28330 + 28332 28331 28330 + 28161 28334 28156 + 28335 28334 28161 + 28332 28334 28335 + 28332 28335 28336 + 28336 28337 28332 + 28332 28337 28333 + 28338 28333 28337 + 28339 28333 28338 + 28333 28339 28327 + 28161 28340 28335 + 28335 28340 28166 + 28336 28335 28166 + 28166 28341 28336 + 28342 28336 28341 + 28337 28336 28342 + 28337 28342 28338 + 28161 28160 28340 + 28340 28160 28159 + 28159 28166 28340 + 28171 28341 28166 + 28343 28341 28171 + 28341 28343 28342 + 28342 28343 28344 + 28338 28342 28344 + 28345 28338 28344 + 28339 28338 28345 + 28345 28346 28339 + 28339 28346 28347 + 28339 28347 28327 + 28343 28171 28348 + 28348 28344 28343 + 28344 28348 28349 + 28344 28349 28350 + 28350 28351 28344 + 28344 28351 28352 + 28352 28345 28344 + 28353 28348 28171 + 28349 28348 28353 + 28353 28260 28349 + 28349 28260 28259 + 28259 28265 28349 + 28265 28350 28349 + 28354 28350 28265 + 28351 28350 28354 + 28170 28353 28171 + 28176 28353 28170 + 28260 28353 28176 + 28176 28355 28260 + 28260 28355 28250 + 28250 28355 28251 + 28355 28176 28356 + 28356 28251 28355 + 28251 28356 28357 + 28357 28358 28251 + 28251 28358 28242 + 28242 28358 28238 + 28175 28356 28176 + 28357 28356 28175 + 28175 28181 28357 + 28357 28181 28186 + 28186 28359 28357 + 28358 28357 28359 + 28359 28238 28358 + 28238 28359 28360 + 28360 28239 28238 + 28239 28360 28361 + 28361 28230 28239 + 28360 28359 28186 + 28186 28362 28360 + 28360 28362 28363 + 28363 28361 28360 + 28364 28361 28363 + 28230 28361 28364 + 28364 28231 28230 + 28222 28231 28364 + 28212 28222 28364 + 28185 28362 28186 + 28362 28185 28365 + 28365 28363 28362 + 28363 28365 28208 + 28208 28366 28363 + 28363 28366 28364 + 28212 28364 28366 + 28212 28366 28208 + 28190 28365 28185 + 28208 28365 28190 + 28299 28324 28290 + 28324 28329 28290 + 28291 28290 28329 + 28329 28367 28291 + 28291 28367 28292 + 28367 28368 28292 + 28369 28292 28368 + 28292 28369 28287 + 28367 28329 28328 + 28370 28367 28328 + 28368 28367 28370 + 28347 28368 28370 + 28347 28371 28368 + 28368 28371 28369 + 28369 28371 28372 + 28287 28369 28372 + 28372 28373 28287 + 28287 28373 28276 + 28327 28370 28328 + 28347 28370 28327 + 28277 28276 28373 + 28373 28374 28277 + 28277 28374 28278 + 28374 28375 28278 + 28376 28278 28375 + 28273 28278 28376 + 28352 28374 28373 + 28374 28352 28377 + 28377 28375 28374 + 28378 28375 28377 + 28375 28378 28376 + 28373 28372 28352 + 28352 28372 28379 + 28379 28345 28352 + 28379 28346 28345 + 28347 28346 28379 + 28371 28347 28379 + 28371 28379 28372 + 28376 28378 28380 + 28381 28380 28378 + 28382 28380 28381 + 28376 28380 28382 + 28383 28376 28382 + 28376 28383 28273 + 28269 28273 28383 + 28384 28269 28383 + 28384 28263 28269 + 28378 28377 28381 + 28381 28377 28352 + 28351 28381 28352 + 28382 28381 28351 + 28351 28354 28382 + 28382 28354 28385 + 28385 28384 28382 + 28384 28383 28382 + 28265 28385 28354 + 28265 28264 28385 + 28385 28264 28263 + 28263 28384 28385 + 28386 28387 28388 + 28387 28386 28389 + 28390 28387 28389 + 28391 28387 28390 + 28387 28391 28392 + 28392 28388 28387 + 28388 28393 28386 + 28394 28386 28393 + 28386 28394 28395 + 28395 28389 28386 + 28388 28396 28393 + 28396 28397 28393 + 28398 28393 28397 + 28393 28398 28394 + 28399 28394 28398 + 28394 28399 28400 + 28395 28394 28400 + 28401 28396 28388 + 28396 28401 28402 + 28402 28403 28396 + 28397 28396 28403 + 28403 28404 28397 + 28405 28397 28404 + 28397 28405 28398 + 28388 28392 28401 + 28401 28392 28406 + 28402 28401 28406 + 28406 28407 28402 + 28408 28402 28407 + 28403 28402 28408 + 28408 28409 28403 + 28403 28409 28410 + 28410 28404 28403 + 28392 28411 28406 + 28411 28412 28406 + 28412 28413 28406 + 28406 28413 28414 + 28414 28407 28406 + 28411 28392 28391 + 28391 28415 28411 + 28415 28416 28411 + 28416 28412 28411 + 28412 28416 28417 + 28418 28412 28417 + 28413 28412 28418 + 28415 28391 28419 + 28420 28415 28419 + 28420 28416 28415 + 28420 28421 28416 + 28416 28421 28422 + 28422 28417 28416 + 28422 28423 28417 + 28417 28423 28418 + 28390 28419 28391 + 28419 28390 28424 + 28424 28425 28419 + 28420 28419 28425 + 28421 28420 28425 + 28425 28426 28421 + 28422 28421 28426 + 28426 28427 28422 + 28427 28428 28422 + 28422 28428 28423 + 28424 28390 28389 + 28429 28424 28389 + 28427 28424 28429 + 28425 28424 28427 + 28427 28426 28425 + 28389 28430 28429 + 28430 28431 28429 + 28431 28432 28429 + 28429 28432 28433 + 28429 28433 28427 + 28428 28427 28433 + 28433 28434 28428 + 28423 28428 28434 + 28430 28389 28395 + 28435 28430 28395 + 28430 28435 28436 + 28436 28431 28430 + 28431 28436 28437 + 28432 28431 28437 + 28437 28438 28432 + 28438 28434 28432 + 28434 28433 28432 + 28395 28400 28435 + 28435 28400 28439 + 28436 28435 28439 + 28439 28440 28436 + 28436 28440 28437 + 28437 28440 28441 + 28437 28441 28442 + 28442 28438 28437 + 28438 28442 28443 + 28434 28438 28443 + 28434 28443 28423 + 28439 28400 28399 + 28439 28399 28444 + 28439 28444 28445 + 28445 28440 28439 + 28440 28445 28441 + 28441 28445 28446 + 28446 28447 28441 + 28447 28442 28441 + 28442 28447 28448 + 28443 28442 28448 + 28444 28399 28449 + 28449 28450 28444 + 28444 28450 28451 + 28451 28445 28444 + 28445 28451 28446 + 28446 28451 28452 + 28446 28452 28453 + 28453 28447 28446 + 28398 28449 28399 + 28398 28405 28449 + 28405 28454 28449 + 28450 28449 28454 + 28454 28455 28450 + 28450 28455 28451 + 28455 28456 28451 + 28451 28456 28452 + 28454 28405 28457 + 28457 28458 28454 + 28455 28454 28458 + 28458 28459 28455 + 28456 28455 28459 + 28459 28460 28456 + 28452 28456 28460 + 28404 28457 28405 + 28457 28404 28410 + 28410 28461 28457 + 28457 28461 28462 + 28462 28458 28457 + 28459 28458 28462 + 28462 28463 28459 + 28459 28463 28464 + 28464 28460 28459 + 28465 28460 28464 + 28460 28465 28452 + 28461 28410 28466 + 28466 28467 28461 + 28462 28461 28467 + 28467 28468 28462 + 28463 28462 28468 + 28468 28469 28463 + 28464 28463 28469 + 28470 28466 28410 + 28471 28466 28470 + 28467 28466 28471 + 28471 28472 28467 + 28467 28472 28473 + 28473 28468 28467 + 28468 28473 28469 + 28410 28409 28470 + 28474 28470 28409 + 28470 28474 28475 + 28475 28476 28470 + 28470 28476 28471 + 28471 28476 28477 + 28472 28471 28477 + 28409 28408 28474 + 28478 28474 28408 + 28475 28474 28478 + 28478 28479 28475 + 28475 28479 28480 + 28480 28481 28475 + 28481 28482 28475 + 28476 28475 28482 + 28408 28483 28478 + 28484 28478 28483 + 28478 28484 28485 + 28485 28479 28478 + 28486 28479 28485 + 28479 28486 28480 + 28407 28483 28408 + 28487 28483 28407 + 28483 28487 28484 + 28488 28484 28487 + 28485 28484 28488 + 28488 28489 28485 + 28485 28489 28490 + 28490 28486 28485 + 28407 28414 28487 + 28487 28414 28491 + 28491 28492 28487 + 28487 28492 28488 + 28493 28488 28492 + 28488 28493 28494 + 28494 28489 28488 + 28495 28489 28494 + 28489 28495 28490 + 28491 28414 28413 + 28413 28496 28491 + 28496 28497 28491 + 28497 28498 28491 + 28491 28498 28499 + 28499 28492 28491 + 28492 28499 28493 + 28500 28493 28499 + 28494 28493 28500 + 28418 28496 28413 + 28418 28501 28496 + 28501 28497 28496 + 28497 28501 28448 + 28448 28502 28497 + 28498 28497 28502 + 28503 28498 28502 + 28499 28498 28503 + 28503 28504 28499 + 28499 28504 28500 + 28423 28501 28418 + 28501 28423 28443 + 28448 28501 28443 + 28448 28447 28502 + 28447 28453 28502 + 28502 28453 28503 + 28453 28505 28503 + 28503 28505 28504 + 28505 28506 28504 + 28504 28506 28507 + 28507 28500 28504 + 28500 28507 28508 + 28508 28509 28500 + 28500 28509 28494 + 28505 28453 28452 + 28465 28505 28452 + 28506 28505 28465 + 28465 28510 28506 + 28507 28506 28510 + 28510 28511 28507 + 28508 28507 28511 + 28464 28510 28465 + 28510 28464 28512 + 28512 28511 28510 + 28511 28512 28513 + 28513 28514 28511 + 28511 28514 28508 + 28512 28464 28469 + 28469 28515 28512 + 28513 28512 28515 + 28515 28516 28513 + 28513 28516 28517 + 28517 28518 28513 + 28514 28513 28518 + 28518 28519 28514 + 28508 28514 28519 + 28520 28515 28469 + 28516 28515 28520 + 28516 28520 28521 + 28521 28517 28516 + 28517 28521 28522 + 28522 28523 28517 + 28517 28523 28524 + 28524 28518 28517 + 28469 28473 28520 + 28521 28520 28473 + 28525 28521 28473 + 28522 28521 28525 + 28525 28526 28522 + 28522 28526 28527 + 28527 28528 28522 + 28528 28529 28522 + 28523 28522 28529 + 28530 28525 28473 + 28531 28525 28530 + 28531 28526 28525 + 28526 28531 28532 + 28532 28527 28526 + 28533 28527 28532 + 28528 28527 28533 + 28534 28530 28473 + 28535 28530 28534 + 28536 28530 28535 + 28530 28536 28531 + 28531 28536 28537 + 28532 28531 28537 + 28537 28538 28532 + 28533 28532 28538 + 28473 28472 28534 + 28472 28539 28534 + 28539 28540 28534 + 28541 28534 28540 + 28542 28534 28541 + 28534 28542 28535 + 28477 28539 28472 + 28539 28477 28543 + 28543 28544 28539 + 28539 28544 28545 + 28545 28540 28539 + 28546 28540 28545 + 28540 28546 28541 + 28543 28477 28547 + 28547 28548 28543 + 28543 28548 28549 + 28549 28550 28543 + 28544 28543 28550 + 28550 28551 28544 + 28545 28544 28551 + 28476 28547 28477 + 28482 28547 28476 + 28547 28482 28552 + 28552 28548 28547 + 28548 28552 28553 + 28553 28549 28548 + 28549 28553 28554 + 28554 28555 28549 + 28549 28555 28556 + 28556 28550 28549 + 28552 28482 28481 + 28481 28557 28552 + 28553 28552 28557 + 28557 28558 28553 + 28554 28553 28558 + 28559 28557 28481 + 28557 28559 28560 + 28560 28558 28557 + 28558 28560 28561 + 28561 28562 28558 + 28558 28562 28554 + 28481 28563 28559 + 28559 28563 28564 + 28564 28565 28559 + 28559 28565 28566 + 28566 28560 28559 + 28561 28560 28566 + 28563 28481 28480 + 28480 28567 28563 + 28564 28563 28567 + 28567 28568 28564 + 28569 28564 28568 + 28570 28564 28569 + 28570 28565 28564 + 28565 28570 28571 + 28571 28566 28565 + 28567 28480 28572 + 28572 28573 28567 + 28567 28573 28574 + 28574 28568 28567 + 28575 28568 28574 + 28568 28575 28569 + 28572 28480 28486 + 28486 28576 28572 + 28572 28576 28577 + 28577 28578 28572 + 28573 28572 28578 + 28578 28579 28573 + 28574 28573 28579 + 28580 28576 28486 + 28576 28580 28581 + 28581 28577 28576 + 28577 28581 28582 + 28582 28583 28577 + 28577 28583 28584 + 28584 28578 28577 + 28579 28578 28584 + 28486 28490 28580 + 28580 28490 28495 + 28495 28585 28580 + 28580 28585 28586 + 28586 28581 28580 + 28582 28581 28586 + 28586 28587 28582 + 28588 28582 28587 + 28583 28582 28588 + 28588 28589 28583 + 28584 28583 28589 + 28590 28585 28495 + 28585 28590 28591 + 28591 28586 28585 + 28587 28586 28591 + 28592 28587 28591 + 28587 28592 28593 + 28593 28594 28587 + 28587 28594 28588 + 28495 28595 28590 + 28590 28595 28596 + 28596 28597 28590 + 28590 28597 28598 + 28598 28591 28590 + 28592 28591 28598 + 28595 28495 28494 + 28595 28494 28599 + 28596 28595 28599 + 28599 28600 28596 + 28600 28601 28596 + 28602 28596 28601 + 28597 28596 28602 + 28597 28602 28603 + 28603 28598 28597 + 28494 28509 28599 + 28604 28599 28509 + 28599 28604 28605 + 28605 28606 28599 + 28599 28606 28607 + 28607 28600 28599 + 28509 28508 28604 + 28608 28604 28508 + 28605 28604 28608 + 28608 28609 28605 + 28610 28605 28609 + 28606 28605 28610 + 28610 28611 28606 + 28607 28606 28611 + 28519 28608 28508 + 28612 28608 28519 + 28608 28612 28609 + 28609 28612 28613 + 28613 28614 28609 + 28609 28614 28610 + 28615 28610 28614 + 28610 28615 28616 + 28616 28611 28610 + 28519 28617 28612 + 28613 28612 28617 + 28617 28618 28613 + 28619 28613 28618 + 28613 28619 28620 + 28620 28614 28613 + 28614 28620 28615 + 28617 28519 28518 + 28518 28524 28617 + 28617 28524 28621 + 28621 28618 28617 + 28622 28618 28621 + 28618 28622 28619 + 28619 28622 28623 + 28620 28619 28623 + 28623 28624 28620 + 28615 28620 28624 + 28624 28625 28615 + 28616 28615 28625 + 28626 28621 28524 + 28627 28621 28626 + 28621 28627 28622 + 28622 28627 28628 + 28628 28623 28622 + 28623 28628 28629 + 28624 28623 28629 + 28624 28629 28630 + 28630 28625 28624 + 28524 28523 28626 + 28523 28631 28626 + 28632 28626 28631 + 28626 28632 28633 + 28626 28633 28627 + 28628 28627 28633 + 28633 28634 28628 + 28634 28635 28628 + 28635 28629 28628 + 28529 28631 28523 + 28636 28631 28529 + 28631 28636 28632 + 28636 28529 28637 + 28632 28636 28637 + 28637 28638 28632 + 28638 28639 28632 + 28639 28640 28632 + 28640 28641 28632 + 28633 28632 28641 + 28641 28634 28633 + 28529 28528 28637 + 28637 28528 28642 + 28637 28642 28638 + 28642 28643 28638 + 28638 28643 28644 + 28638 28644 28645 + 28645 28639 28638 + 28639 28645 28646 + 28640 28639 28646 + 28642 28528 28533 + 28643 28642 28533 + 28533 28647 28643 + 28644 28643 28647 + 28647 28648 28644 + 28645 28644 28648 + 28649 28645 28648 + 28646 28645 28649 + 28538 28647 28533 + 28647 28538 28650 + 28650 28648 28647 + 28648 28650 28651 + 28651 28649 28648 + 28649 28651 28652 + 28652 28653 28649 + 28649 28653 28646 + 28650 28538 28537 + 28537 28654 28650 + 28650 28654 28655 + 28655 28651 28650 + 28652 28651 28655 + 28655 28656 28652 + 28657 28652 28656 + 28653 28652 28657 + 28657 28658 28653 + 28646 28653 28658 + 28654 28537 28659 + 28654 28659 28660 + 28660 28661 28654 + 28654 28661 28655 + 28662 28655 28661 + 28655 28662 28663 + 28663 28656 28655 + 28659 28537 28536 + 28536 28535 28659 + 28660 28659 28535 + 28535 28542 28660 + 28664 28660 28542 + 28660 28664 28665 + 28665 28661 28660 + 28661 28665 28662 + 28666 28662 28665 + 28663 28662 28666 + 28666 28667 28663 + 28668 28663 28667 + 28656 28663 28668 + 28542 28669 28664 + 28664 28669 28670 + 28670 28671 28664 + 28665 28664 28671 + 28671 28672 28665 + 28665 28672 28666 + 28541 28669 28542 + 28669 28541 28673 + 28673 28670 28669 + 28670 28673 28674 + 28670 28674 28675 + 28675 28671 28670 + 28671 28675 28676 + 28676 28672 28671 + 28672 28676 28677 + 28677 28666 28672 + 28673 28541 28678 + 28678 28679 28673 + 28679 28680 28673 + 28674 28673 28680 + 28680 28681 28674 + 28675 28674 28681 + 28541 28546 28678 + 28682 28678 28546 + 28683 28678 28682 + 28678 28683 28684 + 28684 28679 28678 + 28679 28684 28685 + 28679 28685 28686 + 28686 28680 28679 + 28686 28681 28680 + 28546 28687 28682 + 28682 28687 28688 + 28688 28689 28682 + 28690 28682 28689 + 28682 28690 28683 + 28545 28687 28546 + 28687 28545 28691 + 28691 28688 28687 + 28688 28691 28692 + 28692 28693 28688 + 28688 28693 28694 + 28694 28689 28688 + 28695 28689 28694 + 28689 28695 28690 + 28551 28691 28545 + 28692 28691 28551 + 28551 28696 28692 + 28692 28696 28697 + 28697 28698 28692 + 28693 28692 28698 + 28698 28699 28693 + 28694 28693 28699 + 28696 28551 28550 + 28556 28696 28550 + 28697 28696 28556 + 28700 28697 28556 + 28701 28697 28700 + 28698 28697 28701 + 28702 28698 28701 + 28699 28698 28702 + 28702 28703 28699 + 28704 28699 28703 + 28699 28704 28694 + 28556 28555 28700 + 28555 28705 28700 + 28706 28700 28705 + 28706 28701 28700 + 28707 28701 28706 + 28702 28701 28707 + 28707 28708 28702 + 28703 28702 28708 + 28705 28555 28554 + 28709 28705 28554 + 28710 28705 28709 + 28705 28710 28706 + 28711 28706 28710 + 28711 28707 28706 + 28712 28707 28711 + 28712 28713 28707 + 28708 28707 28713 + 28714 28709 28554 + 28715 28709 28714 + 28715 28710 28709 + 28716 28710 28715 + 28710 28716 28711 + 28712 28711 28716 + 28554 28562 28714 + 28717 28714 28562 + 28718 28714 28717 + 28714 28718 28715 + 28715 28718 28719 + 28719 28716 28715 + 28720 28716 28719 + 28720 28721 28716 + 28716 28721 28712 + 28562 28561 28717 + 28722 28717 28561 + 28723 28717 28722 + 28723 28718 28717 + 28724 28718 28723 + 28718 28724 28719 + 28720 28719 28724 + 28561 28725 28722 + 28726 28722 28725 + 28727 28722 28726 + 28727 28728 28722 + 28722 28728 28723 + 28566 28725 28561 + 28729 28725 28566 + 28725 28729 28726 + 28730 28726 28729 + 28726 28730 28731 + 28727 28726 28731 + 28727 28731 28732 + 28732 28733 28727 + 28728 28727 28733 + 28566 28571 28729 + 28729 28571 28734 + 28734 28735 28729 + 28729 28735 28730 + 28736 28730 28735 + 28737 28730 28736 + 28737 28731 28730 + 28732 28731 28737 + 28738 28734 28571 + 28739 28734 28738 + 28734 28739 28740 + 28740 28735 28734 + 28735 28740 28736 + 28570 28738 28571 + 28741 28738 28570 + 28738 28741 28742 + 28738 28742 28739 + 28695 28739 28742 + 28740 28739 28695 + 28695 28743 28740 + 28736 28740 28743 + 28570 28569 28741 + 28741 28569 28744 + 28744 28745 28741 + 28745 28746 28741 + 28746 28747 28741 + 28742 28741 28747 + 28569 28575 28744 + 28575 28748 28744 + 28749 28744 28748 + 28744 28749 28750 + 28750 28751 28744 + 28744 28751 28752 + 28752 28745 28744 + 28753 28748 28575 + 28754 28748 28753 + 28748 28754 28749 + 28755 28749 28754 + 28750 28749 28755 + 28755 28756 28750 + 28757 28750 28756 + 28751 28750 28757 + 28575 28758 28753 + 28759 28753 28758 + 28760 28753 28759 + 28753 28760 28754 + 28754 28760 28761 + 28761 28762 28754 + 28754 28762 28755 + 28574 28758 28575 + 28758 28574 28763 + 28763 28764 28758 + 28758 28764 28759 + 28765 28759 28764 + 28766 28759 28765 + 28759 28766 28760 + 28761 28760 28766 + 28579 28763 28574 + 28767 28763 28579 + 28764 28763 28767 + 28767 28768 28764 + 28764 28768 28765 + 28765 28768 28769 + 28769 28770 28765 + 28771 28765 28770 + 28765 28771 28766 + 28579 28772 28767 + 28767 28772 28773 + 28773 28774 28767 + 28774 28769 28767 + 28769 28768 28767 + 28584 28772 28579 + 28772 28584 28775 + 28775 28773 28772 + 28773 28775 28776 + 28776 28777 28773 + 28774 28773 28777 + 28778 28774 28777 + 28778 28779 28774 + 28779 28769 28774 + 28589 28775 28584 + 28775 28589 28780 + 28776 28775 28780 + 28776 28780 28781 + 28781 28782 28776 + 28777 28776 28782 + 28782 28783 28777 + 28778 28777 28783 + 28784 28780 28589 + 28780 28784 28785 + 28785 28781 28780 + 28786 28781 28785 + 28786 28787 28781 + 28781 28787 28788 + 28788 28782 28781 + 28788 28783 28782 + 28589 28588 28784 + 28789 28784 28588 + 28784 28789 28790 + 28790 28785 28784 + 28785 28790 28791 + 28786 28785 28791 + 28786 28791 28792 + 28787 28786 28792 + 28792 28793 28787 + 28788 28787 28793 + 28594 28789 28588 + 28794 28789 28594 + 28789 28794 28795 + 28795 28790 28789 + 28796 28790 28795 + 28796 28791 28790 + 28791 28796 28797 + 28797 28792 28791 + 28792 28797 28798 + 28798 28793 28792 + 28793 28798 28788 + 28594 28593 28794 + 28794 28593 28799 + 28799 28800 28794 + 28794 28800 28801 + 28801 28795 28794 + 28796 28795 28801 + 28801 28802 28796 + 28797 28796 28802 + 28803 28797 28802 + 28798 28797 28803 + 28799 28593 28592 + 28592 28804 28799 + 28805 28799 28804 + 28800 28799 28805 + 28806 28800 28805 + 28801 28800 28806 + 28807 28801 28806 + 28808 28801 28807 + 28808 28802 28801 + 28598 28804 28592 + 28809 28804 28598 + 28804 28809 28805 + 28810 28805 28809 + 28806 28805 28810 + 28810 28811 28806 + 28806 28811 28807 + 28811 28812 28807 + 28808 28807 28812 + 28598 28603 28809 + 28809 28603 28813 + 28813 28814 28809 + 28809 28814 28810 + 28815 28810 28814 + 28811 28810 28815 + 28816 28811 28815 + 28812 28811 28816 + 28813 28603 28602 + 28817 28813 28602 + 28818 28813 28817 + 28813 28818 28819 + 28819 28814 28813 + 28814 28819 28815 + 28820 28815 28819 + 28816 28815 28820 + 28602 28821 28817 + 28822 28817 28821 + 28761 28817 28822 + 28817 28761 28818 + 28766 28818 28761 + 28819 28818 28766 + 28766 28771 28819 + 28819 28771 28820 + 28601 28821 28602 + 28823 28821 28601 + 28821 28823 28822 + 28822 28823 28824 + 28825 28822 28824 + 28762 28822 28825 + 28822 28762 28761 + 28823 28601 28600 + 28600 28824 28823 + 28826 28824 28600 + 28824 28826 28827 + 28827 28828 28824 + 28824 28828 28825 + 28756 28825 28828 + 28756 28755 28825 + 28825 28755 28762 + 28600 28607 28826 + 28826 28607 28829 + 28829 28830 28826 + 28826 28830 28831 + 28827 28826 28831 + 28831 28832 28827 + 28833 28827 28832 + 28833 28828 28827 + 28828 28833 28756 + 28834 28829 28607 + 28835 28829 28834 + 28830 28829 28835 + 28830 28835 28836 + 28836 28831 28830 + 28837 28831 28836 + 28831 28837 28838 + 28838 28832 28831 + 28611 28834 28607 + 28839 28834 28611 + 28840 28834 28839 + 28834 28840 28835 + 28836 28835 28840 + 28841 28836 28840 + 28837 28836 28841 + 28841 28842 28837 + 28837 28842 28843 + 28843 28838 28837 + 28611 28616 28839 + 28839 28616 28844 + 28844 28845 28839 + 28840 28839 28845 + 28845 28846 28840 + 28840 28846 28847 + 28847 28841 28840 + 28848 28841 28847 + 28842 28841 28848 + 28625 28844 28616 + 28844 28625 28849 + 28844 28849 28850 + 28850 28845 28844 + 28846 28845 28850 + 28850 28851 28846 + 28846 28851 28852 + 28852 28847 28846 + 28847 28852 28853 + 28847 28853 28848 + 28625 28630 28849 + 28854 28849 28630 + 28849 28854 28855 + 28850 28849 28855 + 28851 28850 28855 + 28855 28856 28851 + 28852 28851 28856 + 28856 28857 28852 + 28853 28852 28857 + 28858 28854 28630 + 28859 28854 28858 + 28854 28859 28860 + 28860 28855 28854 + 28856 28855 28860 + 28860 28861 28856 + 28856 28861 28862 + 28862 28857 28856 + 28858 28630 28629 + 28629 28635 28858 + 28863 28858 28635 + 28858 28863 28859 + 28864 28859 28863 + 28860 28859 28864 + 28864 28865 28860 + 28861 28860 28865 + 28865 28866 28861 + 28862 28861 28866 + 28635 28867 28863 + 28868 28863 28867 + 28868 28864 28863 + 28868 28869 28864 + 28865 28864 28869 + 28658 28865 28869 + 28866 28865 28658 + 28867 28635 28634 + 28634 28641 28867 + 28867 28641 28640 + 28640 28870 28867 + 28867 28870 28868 + 28869 28868 28870 + 28870 28871 28869 + 28869 28871 28646 + 28658 28869 28646 + 28871 28870 28640 + 28871 28640 28646 + 28658 28657 28866 + 28866 28657 28872 + 28872 28873 28866 + 28866 28873 28862 + 28874 28862 28873 + 28862 28874 28875 + 28875 28857 28862 + 28857 28875 28853 + 28656 28872 28657 + 28668 28872 28656 + 28872 28668 28873 + 28668 28876 28873 + 28873 28876 28874 + 28874 28876 28877 + 28877 28878 28874 + 28875 28874 28878 + 28878 28879 28875 + 28853 28875 28879 + 28879 28880 28853 + 28880 28848 28853 + 28876 28668 28881 + 28881 28877 28876 + 28882 28877 28881 + 28877 28882 28883 + 28883 28878 28877 + 28879 28878 28883 + 28883 28884 28879 + 28879 28884 28885 + 28885 28880 28879 + 28881 28668 28667 + 28667 28886 28881 + 28886 28887 28881 + 28887 28882 28881 + 28882 28887 28888 + 28888 28883 28882 + 28884 28883 28888 + 28888 28889 28884 + 28885 28884 28889 + 28890 28886 28667 + 28886 28890 28891 + 28891 28887 28886 + 28887 28891 28892 + 28892 28888 28887 + 28889 28888 28892 + 28667 28893 28890 + 28890 28893 28894 + 28894 28895 28890 + 28895 28896 28890 + 28896 28891 28890 + 28891 28896 28897 + 28897 28892 28891 + 28893 28667 28666 + 28666 28677 28893 + 28893 28677 28898 + 28898 28894 28893 + 28898 28899 28894 + 28894 28899 28900 + 28900 28895 28894 + 28896 28895 28900 + 28896 28900 28901 + 28901 28897 28896 + 28898 28677 28676 + 28676 28902 28898 + 28899 28898 28902 + 28902 28903 28899 + 28899 28903 28904 + 28899 28904 28905 + 28905 28901 28899 + 28901 28900 28899 + 28906 28902 28676 + 28903 28902 28906 + 28903 28906 28907 + 28907 28904 28903 + 28904 28907 28908 + 28904 28908 28909 + 28909 28905 28904 + 28676 28675 28906 + 28907 28906 28675 + 28681 28907 28675 + 28908 28907 28681 + 28681 28686 28908 + 28908 28686 28910 + 28909 28908 28910 + 28910 28911 28909 + 28912 28909 28911 + 28905 28909 28912 + 28905 28912 28913 + 28913 28901 28905 + 28897 28901 28913 + 28897 28913 28914 + 28914 28892 28897 + 28686 28685 28910 + 28685 28915 28910 + 28745 28910 28915 + 28745 28752 28910 + 28910 28752 28916 + 28916 28911 28910 + 28917 28911 28916 + 28911 28917 28912 + 28918 28915 28685 + 28746 28915 28918 + 28915 28746 28745 + 28685 28684 28918 + 28918 28684 28683 + 28683 28919 28918 + 28746 28918 28919 + 28919 28747 28746 + 28919 28920 28747 + 28747 28920 28742 + 28742 28920 28690 + 28742 28690 28695 + 28920 28919 28683 + 28683 28690 28920 + 28916 28752 28751 + 28751 28921 28916 + 28917 28916 28921 + 28921 28922 28917 + 28912 28917 28922 + 28913 28912 28922 + 28914 28913 28922 + 28922 28923 28914 + 28889 28914 28923 + 28892 28914 28889 + 28757 28921 28751 + 28922 28921 28757 + 28922 28757 28924 + 28924 28923 28922 + 28925 28923 28924 + 28923 28925 28889 + 28889 28925 28885 + 28926 28885 28925 + 28926 28880 28885 + 28924 28757 28756 + 28756 28833 28924 + 28833 28927 28924 + 28843 28924 28927 + 28924 28843 28925 + 28925 28843 28926 + 28842 28926 28843 + 28880 28926 28842 + 28842 28848 28880 + 28832 28927 28833 + 28838 28927 28832 + 28927 28838 28843 + 28770 28820 28771 + 28928 28820 28770 + 28820 28928 28816 + 28929 28816 28928 + 28929 28812 28816 + 28930 28928 28770 + 28931 28928 28930 + 28928 28931 28929 + 28931 28932 28929 + 28932 28933 28929 + 28933 28812 28929 + 28933 28934 28812 + 28812 28934 28808 + 28930 28770 28769 + 28769 28779 28930 + 28930 28779 28935 + 28935 28936 28930 + 28936 28931 28930 + 28937 28931 28936 + 28937 28932 28931 + 28932 28937 28938 + 28938 28939 28932 + 28933 28932 28939 + 28935 28779 28778 + 28940 28935 28778 + 28941 28935 28940 + 28941 28942 28935 + 28936 28935 28942 + 28937 28936 28942 + 28937 28942 28943 + 28943 28938 28937 + 28783 28940 28778 + 28941 28940 28783 + 28783 28944 28941 + 28945 28941 28944 + 28941 28945 28943 + 28942 28941 28943 + 28788 28944 28783 + 28798 28944 28788 + 28944 28798 28945 + 28803 28945 28798 + 28803 28943 28945 + 28938 28943 28803 + 28946 28938 28803 + 28939 28938 28946 + 28946 28947 28939 + 28939 28947 28933 + 28947 28934 28933 + 28808 28934 28947 + 28947 28946 28808 + 28946 28802 28808 + 28802 28946 28803 + 28694 28743 28695 + 28743 28694 28704 + 28704 28948 28743 + 28743 28948 28736 + 28948 28949 28736 + 28949 28737 28736 + 28948 28704 28950 + 28950 28949 28948 + 28949 28950 28951 + 28951 28952 28949 + 28737 28949 28952 + 28952 28953 28737 + 28953 28732 28737 + 28950 28704 28703 + 28950 28703 28954 + 28954 28951 28950 + 28951 28954 28955 + 28956 28951 28955 + 28956 28952 28951 + 28956 28957 28952 + 28952 28957 28958 + 28958 28953 28952 + 28958 28732 28953 + 28708 28954 28703 + 28959 28954 28708 + 28959 28955 28954 + 28960 28955 28959 + 28955 28960 28961 + 28961 28962 28955 + 28962 28956 28955 + 28957 28956 28962 + 28962 28963 28957 + 28958 28957 28963 + 28959 28708 28713 + 28959 28713 28964 + 28964 28960 28959 + 28960 28964 28965 + 28965 28966 28960 + 28960 28966 28961 + 28964 28713 28712 + 28965 28964 28712 + 28712 28721 28965 + 28966 28965 28721 + 28721 28720 28966 + 28967 28966 28720 + 28966 28967 28961 + 28961 28967 28968 + 28961 28968 28969 + 28969 28962 28961 + 28963 28962 28969 + 28969 28970 28963 + 28963 28970 28958 + 28970 28971 28958 + 28958 28971 28732 + 28720 28972 28967 + 28972 28973 28967 + 28973 28968 28967 + 28968 28973 28974 + 28974 28969 28968 + 28969 28974 28975 + 28970 28969 28975 + 28975 28971 28970 + 28732 28971 28975 + 28975 28733 28732 + 28724 28972 28720 + 28973 28972 28724 + 28973 28724 28976 + 28973 28976 28974 + 28976 28977 28974 + 28975 28974 28977 + 28975 28977 28733 + 28733 28977 28728 + 28723 28728 28977 + 28977 28976 28723 + 28976 28724 28723 + 28978 28979 28980 + 28979 28978 28981 + 28982 28979 28981 + 28983 28979 28982 + 28979 28983 28984 + 28984 28980 28979 + 28985 28978 28980 + 28986 28978 28985 + 28978 28986 28987 + 28981 28978 28987 + 28981 28987 28988 + 28988 28989 28981 + 28981 28989 28982 + 28980 28990 28985 + 28990 28991 28985 + 28985 28991 28992 + 28985 28992 28986 + 28993 28986 28992 + 28987 28986 28993 + 28993 28994 28987 + 28994 28988 28987 + 28995 28990 28980 + 28990 28995 28996 + 28996 28997 28990 + 28991 28990 28997 + 28998 28991 28997 + 28999 28991 28998 + 28991 28999 28992 + 28984 28995 28980 + 29000 28995 28984 + 28995 29000 29001 + 29001 28996 28995 + 29002 28996 29001 + 28996 29002 29003 + 29003 28997 28996 + 28997 29003 29004 + 29004 28998 28997 + 29005 29000 28984 + 29000 29005 29006 + 29006 29007 29000 + 29000 29007 29008 + 29008 29001 29000 + 29009 29001 29008 + 29001 29009 29002 + 28984 28983 29005 + 28983 29010 29005 + 29006 29005 29010 + 29010 29011 29006 + 29006 29011 29012 + 29012 29013 29006 + 29007 29006 29013 + 29013 29014 29007 + 29008 29007 29014 + 29010 28983 29015 + 29016 29010 29015 + 29010 29016 29017 + 29017 29011 29010 + 29011 29017 29018 + 29018 29012 29011 + 29015 28983 28982 + 29015 28982 29019 + 29019 29020 29015 + 29015 29020 29016 + 29020 29021 29016 + 29017 29016 29021 + 29021 29022 29017 + 29017 29022 29023 + 29023 29018 29017 + 28989 29019 28982 + 29019 28989 29024 + 29025 29019 29024 + 29019 29025 29026 + 29026 29020 29019 + 29020 29026 29027 + 29027 29021 29020 + 29021 29027 29028 + 29028 29022 29021 + 29024 28989 28988 + 28988 29029 29024 + 29024 29029 29030 + 29025 29024 29030 + 29030 29031 29025 + 29026 29025 29031 + 29031 29032 29026 + 29026 29032 29033 + 29033 29027 29026 + 29028 29027 29033 + 29029 28988 28994 + 28994 29034 29029 + 29034 29035 29029 + 29029 29035 29030 + 29036 29030 29035 + 29030 29036 29037 + 29037 29031 29030 + 29031 29037 29038 + 29038 29032 29031 + 29039 29034 28994 + 29034 29039 29040 + 29040 29035 29034 + 29035 29040 29036 + 29041 29036 29040 + 29036 29041 29042 + 29042 29037 29036 + 29042 29043 29037 + 29043 29038 29037 + 28994 28993 29039 + 29039 28993 29044 + 29044 29045 29039 + 29039 29045 29046 + 29039 29046 29040 + 29046 29041 29040 + 29047 29041 29046 + 29041 29047 29048 + 29048 29042 29041 + 29049 29044 28993 + 29044 29049 29050 + 29051 29044 29050 + 29051 29045 29044 + 29045 29051 29052 + 29052 29046 29045 + 29046 29052 29047 + 28992 29049 28993 + 28992 28999 29049 + 28999 29053 29049 + 29049 29053 29054 + 29054 29050 29049 + 29050 29054 29055 + 29055 29056 29050 + 29050 29056 29051 + 29056 29052 29051 + 29056 29057 29052 + 29057 29047 29052 + 29053 28999 29058 + 29058 29059 29053 + 29059 29054 29053 + 29054 29059 29055 + 29059 29004 29055 + 29004 29060 29055 + 29056 29055 29060 + 29060 29057 29056 + 28998 29058 28999 + 29059 29058 28998 + 28998 29004 29059 + 29060 29004 29003 + 29003 29061 29060 + 29057 29060 29061 + 29061 29062 29057 + 29047 29057 29062 + 29062 29048 29047 + 29062 29063 29048 + 29063 29064 29048 + 29042 29048 29064 + 29064 29043 29042 + 29003 29002 29061 + 29002 29065 29061 + 29062 29061 29065 + 29065 29063 29062 + 29063 29065 29066 + 29066 29067 29063 + 29064 29063 29067 + 29067 29068 29064 + 29043 29064 29068 + 29068 29069 29043 + 29038 29043 29069 + 29065 29002 29009 + 29065 29009 29066 + 29070 29066 29009 + 29067 29066 29070 + 29070 29071 29067 + 29067 29071 29072 + 29072 29068 29067 + 29069 29068 29072 + 29009 29073 29070 + 29070 29073 29074 + 29074 29075 29070 + 29071 29070 29075 + 29075 29076 29071 + 29072 29071 29076 + 29008 29073 29009 + 29073 29008 29077 + 29077 29074 29073 + 29074 29077 29078 + 29078 29079 29074 + 29074 29079 29080 + 29080 29075 29074 + 29076 29075 29080 + 29014 29077 29008 + 29078 29077 29014 + 29014 29081 29078 + 29078 29081 29082 + 29083 29078 29082 + 29079 29078 29083 + 29083 29084 29079 + 29080 29079 29084 + 29085 29081 29014 + 29081 29085 29082 + 29014 29013 29085 + 29085 29013 29012 + 29012 29086 29085 + 29087 29085 29086 + 29085 29087 29082 + 29088 29086 29012 + 29086 29088 29089 + 29089 29090 29086 + 29090 29087 29086 + 29091 29087 29090 + 29082 29087 29091 + 29012 29018 29088 + 29088 29018 29023 + 29023 29092 29088 + 29088 29092 29093 + 29089 29088 29093 + 29094 29089 29093 + 29095 29089 29094 + 29090 29089 29095 + 29095 29096 29090 + 29090 29096 29091 + 29097 29092 29023 + 29092 29097 29098 + 29098 29093 29092 + 29097 29023 29022 + 29022 29028 29097 + 29098 29097 29028 + 29099 29098 29028 + 29100 29098 29099 + 29093 29098 29100 + 29028 29101 29099 + 29102 29099 29101 + 29099 29102 29103 + 29103 29104 29099 + 29099 29104 29100 + 29033 29101 29028 + 29105 29101 29033 + 29101 29105 29102 + 29102 29105 29106 + 29106 29107 29102 + 29103 29102 29107 + 29033 29108 29105 + 29105 29108 29069 + 29069 29106 29105 + 29072 29106 29069 + 29106 29072 29109 + 29109 29107 29106 + 29108 29033 29032 + 29032 29038 29108 + 29069 29108 29038 + 29076 29109 29072 + 29110 29109 29076 + 29107 29109 29110 + 29110 29111 29107 + 29107 29111 29103 + 29103 29111 29112 + 29112 29113 29103 + 29113 29114 29103 + 29104 29103 29114 + 29076 29115 29110 + 29110 29115 29116 + 29117 29110 29116 + 29111 29110 29117 + 29117 29112 29111 + 29080 29115 29076 + 29115 29080 29118 + 29118 29119 29115 + 29115 29119 29116 + 29084 29118 29080 + 29120 29118 29084 + 29119 29118 29120 + 29120 29121 29119 + 29119 29121 29122 + 29122 29123 29119 + 29119 29123 29116 + 29084 29124 29120 + 29120 29124 29125 + 29125 29126 29120 + 29121 29120 29126 + 29126 29127 29121 + 29122 29121 29127 + 29128 29124 29084 + 29124 29128 29129 + 29129 29125 29124 + 29125 29129 29130 + 29130 29131 29125 + 29125 29131 29132 + 29132 29126 29125 + 29127 29126 29132 + 29084 29083 29128 + 29128 29083 29133 + 29133 29134 29128 + 29128 29134 29135 + 29135 29129 29128 + 29130 29129 29135 + 29136 29133 29083 + 29133 29136 29137 + 29138 29133 29137 + 29133 29138 29139 + 29139 29134 29133 + 29134 29139 29140 + 29140 29135 29134 + 29082 29136 29083 + 29141 29136 29082 + 29137 29136 29141 + 29141 29142 29137 + 29137 29142 29143 + 29143 29144 29137 + 29137 29144 29145 + 29145 29138 29137 + 29139 29138 29145 + 29082 29146 29141 + 29147 29141 29146 + 29142 29141 29147 + 29147 29148 29142 + 29143 29142 29148 + 29091 29146 29082 + 29146 29091 29149 + 29149 29150 29146 + 29146 29150 29147 + 29151 29147 29150 + 29148 29147 29151 + 29152 29149 29091 + 29153 29149 29152 + 29150 29149 29153 + 29153 29154 29150 + 29150 29154 29151 + 29091 29096 29152 + 29155 29152 29096 + 29152 29155 29156 + 29156 29157 29152 + 29152 29157 29153 + 29153 29157 29158 + 29158 29159 29153 + 29154 29153 29159 + 29096 29095 29155 + 29160 29155 29095 + 29156 29155 29160 + 29160 29161 29156 + 29156 29161 29162 + 29162 29163 29156 + 29157 29156 29163 + 29163 29158 29157 + 29095 29164 29160 + 29165 29160 29164 + 29160 29165 29166 + 29166 29161 29160 + 29161 29166 29167 + 29167 29162 29161 + 29094 29164 29095 + 29168 29164 29094 + 29164 29168 29165 + 29169 29165 29168 + 29166 29165 29169 + 29169 29170 29166 + 29167 29166 29170 + 29171 29167 29170 + 29172 29167 29171 + 29162 29167 29172 + 29094 29173 29168 + 29168 29173 29174 + 29174 29175 29168 + 29168 29175 29169 + 29176 29169 29175 + 29169 29176 29177 + 29177 29170 29169 + 29173 29094 29178 + 29178 29179 29173 + 29173 29179 29180 + 29180 29181 29173 + 29181 29182 29173 + 29182 29174 29173 + 29178 29094 29093 + 29183 29178 29093 + 29184 29178 29183 + 29178 29184 29185 + 29185 29179 29178 + 29179 29185 29186 + 29186 29180 29179 + 29187 29183 29093 + 29188 29183 29187 + 29189 29183 29188 + 29183 29189 29184 + 29184 29189 29190 + 29190 29191 29184 + 29185 29184 29191 + 29093 29192 29187 + 29193 29187 29192 + 29187 29193 29194 + 29187 29194 29188 + 29188 29194 29195 + 29195 29196 29188 + 29189 29188 29196 + 29196 29190 29189 + 29197 29192 29093 + 29192 29197 29198 + 29198 29199 29192 + 29192 29199 29193 + 29093 29100 29197 + 29200 29197 29100 + 29198 29197 29200 + 29200 29201 29198 + 29202 29198 29201 + 29199 29198 29202 + 29202 29203 29199 + 29193 29199 29203 + 29100 29104 29200 + 29114 29200 29104 + 29201 29200 29114 + 29114 29204 29201 + 29201 29204 29205 + 29205 29206 29201 + 29201 29206 29202 + 29206 29207 29202 + 29208 29202 29207 + 29203 29202 29208 + 29204 29114 29113 + 29113 29209 29204 + 29205 29204 29209 + 29209 29210 29205 + 29211 29205 29210 + 29205 29211 29212 + 29212 29206 29205 + 29206 29212 29213 + 29213 29207 29206 + 29214 29209 29113 + 29209 29214 29215 + 29215 29210 29209 + 29216 29210 29215 + 29210 29216 29211 + 29217 29211 29216 + 29211 29217 29218 + 29212 29211 29218 + 29214 29113 29112 + 29112 29219 29214 + 29215 29214 29219 + 29219 29220 29215 + 29221 29215 29220 + 29215 29221 29216 + 29216 29221 29222 + 29222 29217 29216 + 29217 29222 29223 + 29223 29218 29217 + 29224 29219 29112 + 29219 29224 29225 + 29225 29220 29219 + 29226 29220 29225 + 29220 29226 29221 + 29221 29226 29227 + 29227 29222 29221 + 29222 29227 29228 + 29223 29222 29228 + 29112 29117 29224 + 29224 29117 29229 + 29229 29230 29224 + 29224 29230 29231 + 29231 29232 29224 + 29232 29225 29224 + 29233 29225 29232 + 29225 29233 29226 + 29116 29229 29117 + 29234 29229 29116 + 29230 29229 29234 + 29234 29235 29230 + 29230 29235 29236 + 29236 29231 29230 + 29237 29231 29236 + 29231 29237 29238 + 29238 29232 29231 + 29116 29239 29234 + 29240 29234 29239 + 29235 29234 29240 + 29240 29241 29235 + 29236 29235 29241 + 29241 29242 29236 + 29242 29243 29236 + 29237 29236 29243 + 29116 29244 29239 + 29239 29244 29245 + 29245 29246 29239 + 29239 29246 29247 + 29247 29240 29239 + 29248 29240 29247 + 29241 29240 29248 + 29244 29116 29123 + 29123 29249 29244 + 29244 29249 29250 + 29245 29244 29250 + 29250 29251 29245 + 29252 29245 29251 + 29245 29252 29253 + 29253 29246 29245 + 29249 29123 29122 + 29249 29122 29254 + 29254 29250 29249 + 29250 29254 29255 + 29255 29256 29250 + 29250 29256 29257 + 29257 29251 29250 + 29258 29251 29257 + 29251 29258 29252 + 29127 29254 29122 + 29255 29254 29127 + 29127 29259 29255 + 29255 29259 29260 + 29260 29261 29255 + 29256 29255 29261 + 29261 29262 29256 + 29257 29256 29262 + 29132 29259 29127 + 29259 29132 29260 + 29132 29263 29260 + 29260 29263 29264 + 29261 29260 29264 + 29265 29261 29264 + 29262 29261 29265 + 29265 29266 29262 + 29267 29262 29266 + 29262 29267 29257 + 29263 29132 29131 + 29131 29268 29263 + 29269 29263 29268 + 29263 29269 29264 + 29264 29269 29270 + 29270 29265 29264 + 29270 29271 29265 + 29266 29265 29271 + 29272 29268 29131 + 29268 29272 29273 + 29273 29274 29268 + 29268 29274 29269 + 29275 29269 29274 + 29269 29275 29270 + 29131 29130 29272 + 29276 29272 29130 + 29273 29272 29276 + 29276 29277 29273 + 29278 29273 29277 + 29273 29278 29279 + 29274 29273 29279 + 29279 29275 29274 + 29280 29275 29279 + 29270 29275 29280 + 29130 29281 29276 + 29282 29276 29281 + 29276 29282 29283 + 29283 29277 29276 + 29277 29283 29284 + 29284 29278 29277 + 29135 29281 29130 + 29285 29281 29135 + 29281 29285 29282 + 29286 29282 29285 + 29283 29282 29286 + 29286 29287 29283 + 29288 29283 29287 + 29288 29289 29283 + 29283 29289 29284 + 29135 29140 29285 + 29285 29140 29290 + 29290 29291 29285 + 29285 29291 29286 + 29292 29286 29291 + 29286 29292 29293 + 29293 29287 29286 + 29287 29293 29294 + 29294 29288 29287 + 29290 29140 29139 + 29139 29295 29290 + 29296 29290 29295 + 29290 29296 29297 + 29297 29291 29290 + 29291 29297 29292 + 29145 29295 29139 + 29298 29295 29145 + 29295 29298 29296 + 29296 29298 29299 + 29299 29300 29296 + 29297 29296 29300 + 29300 29301 29297 + 29292 29297 29301 + 29145 29302 29298 + 29298 29302 29303 + 29303 29299 29298 + 29304 29299 29303 + 29299 29304 29305 + 29305 29300 29299 + 29300 29305 29306 + 29306 29301 29300 + 29302 29145 29307 + 29302 29307 29308 + 29303 29302 29308 + 29309 29303 29308 + 29310 29303 29309 + 29303 29310 29304 + 29145 29144 29307 + 29307 29144 29143 + 29143 29311 29307 + 29312 29307 29311 + 29307 29312 29308 + 29311 29143 29313 + 29313 29314 29311 + 29314 29315 29311 + 29315 29312 29311 + 29316 29312 29315 + 29312 29316 29317 + 29317 29308 29312 + 29143 29318 29313 + 29313 29318 29319 + 29313 29319 29320 + 29320 29314 29313 + 29321 29314 29320 + 29314 29321 29316 + 29316 29315 29314 + 29148 29318 29143 + 29322 29318 29148 + 29318 29322 29319 + 29319 29322 29323 + 29323 29324 29319 + 29324 29320 29319 + 29320 29324 29325 + 29326 29320 29325 + 29320 29326 29321 + 29148 29327 29322 + 29328 29322 29327 + 29322 29328 29323 + 29323 29328 29329 + 29323 29329 29330 + 29330 29324 29323 + 29325 29324 29330 + 29151 29327 29148 + 29327 29151 29331 + 29331 29332 29327 + 29332 29328 29327 + 29328 29332 29333 + 29334 29328 29333 + 29328 29334 29329 + 29329 29334 29335 + 29335 29330 29329 + 29336 29331 29151 + 29331 29336 29337 + 29338 29331 29337 + 29332 29331 29338 + 29338 29333 29332 + 29333 29338 29339 + 29339 29340 29333 + 29340 29334 29333 + 29151 29154 29336 + 29159 29336 29154 + 29336 29159 29341 + 29341 29337 29336 + 29337 29341 29342 + 29342 29343 29337 + 29338 29337 29343 + 29343 29339 29338 + 29339 29343 29344 + 29345 29339 29344 + 29340 29339 29345 + 29341 29159 29346 + 29341 29346 29347 + 29342 29341 29347 + 29347 29348 29342 + 29348 29349 29342 + 29343 29342 29349 + 29349 29344 29343 + 29344 29349 29350 + 29350 29345 29344 + 29159 29158 29346 + 29351 29346 29158 + 29346 29351 29352 + 29352 29347 29346 + 29347 29352 29353 + 29353 29348 29347 + 29348 29353 29354 + 29354 29355 29348 + 29355 29349 29348 + 29349 29355 29350 + 29158 29163 29351 + 29351 29163 29162 + 29162 29356 29351 + 29352 29351 29356 + 29357 29352 29356 + 29353 29352 29357 + 29357 29358 29353 + 29354 29353 29358 + 29359 29354 29358 + 29354 29359 29350 + 29350 29355 29354 + 29172 29356 29162 + 29356 29172 29357 + 29172 29360 29357 + 29357 29360 29361 + 29361 29358 29357 + 29358 29361 29359 + 29359 29361 29362 + 29362 29363 29359 + 29363 29364 29359 + 29350 29359 29364 + 29360 29172 29365 + 29366 29360 29365 + 29361 29360 29366 + 29366 29362 29361 + 29367 29362 29366 + 29362 29367 29363 + 29171 29365 29172 + 29368 29365 29171 + 29365 29368 29366 + 29368 29369 29366 + 29366 29369 29367 + 29367 29369 29370 + 29371 29367 29370 + 29367 29371 29363 + 29171 29372 29368 + 29368 29372 29325 + 29325 29373 29368 + 29374 29368 29373 + 29374 29369 29368 + 29369 29374 29370 + 29372 29171 29170 + 29170 29177 29372 + 29372 29177 29326 + 29326 29325 29372 + 29321 29326 29177 + 29177 29176 29321 + 29321 29176 29375 + 29375 29317 29321 + 29317 29316 29321 + 29175 29375 29176 + 29375 29175 29174 + 29174 29376 29375 + 29375 29376 29377 + 29377 29317 29375 + 29308 29317 29377 + 29376 29174 29182 + 29182 29378 29376 + 29377 29376 29378 + 29378 29379 29377 + 29308 29377 29379 + 29379 29380 29308 + 29308 29380 29381 + 29381 29309 29308 + 29382 29378 29182 + 29378 29382 29383 + 29383 29379 29378 + 29379 29383 29380 + 29380 29383 29384 + 29384 29381 29380 + 29384 29385 29381 + 29381 29385 29386 + 29386 29309 29381 + 29382 29182 29181 + 29181 29387 29382 + 29382 29387 29388 + 29383 29382 29388 + 29388 29389 29383 + 29389 29390 29383 + 29390 29384 29383 + 29385 29384 29390 + 29181 29391 29387 + 29387 29391 29392 + 29392 29388 29387 + 29388 29392 29393 + 29388 29393 29394 + 29394 29389 29388 + 29391 29181 29180 + 29180 29395 29391 + 29392 29391 29395 + 29396 29392 29395 + 29393 29392 29396 + 29396 29397 29393 + 29393 29397 29398 + 29394 29393 29398 + 29395 29180 29186 + 29395 29186 29399 + 29399 29400 29395 + 29395 29400 29396 + 29401 29396 29400 + 29396 29401 29397 + 29402 29397 29401 + 29397 29402 29398 + 29399 29186 29185 + 29185 29403 29399 + 29404 29399 29403 + 29400 29399 29404 + 29404 29405 29400 + 29400 29405 29401 + 29401 29405 29406 + 29406 29407 29401 + 29407 29402 29401 + 29191 29403 29185 + 29403 29191 29408 + 29408 29409 29403 + 29403 29409 29404 + 29404 29409 29410 + 29410 29411 29404 + 29405 29404 29411 + 29411 29406 29405 + 29408 29191 29190 + 29190 29412 29408 + 29408 29412 29413 + 29413 29414 29408 + 29409 29408 29414 + 29414 29410 29409 + 29190 29196 29412 + 29412 29196 29195 + 29195 29415 29412 + 29412 29415 29413 + 29416 29413 29415 + 29413 29416 29417 + 29417 29418 29413 + 29413 29418 29419 + 29419 29414 29413 + 29410 29414 29419 + 29420 29415 29195 + 29415 29420 29416 + 29420 29421 29416 + 29421 29422 29416 + 29417 29416 29422 + 29195 29423 29420 + 29420 29423 29424 + 29424 29421 29420 + 29421 29424 29425 + 29421 29425 29426 + 29426 29422 29421 + 29427 29422 29426 + 29422 29427 29417 + 29423 29195 29428 + 29428 29429 29423 + 29424 29423 29429 + 29429 29430 29424 + 29425 29424 29430 + 29194 29428 29195 + 29431 29428 29194 + 29428 29431 29429 + 29429 29431 29432 + 29432 29430 29429 + 29430 29432 29433 + 29430 29433 29425 + 29194 29193 29431 + 29432 29431 29193 + 29203 29432 29193 + 29433 29432 29203 + 29203 29208 29433 + 29425 29433 29208 + 29208 29434 29425 + 29434 29435 29425 + 29435 29436 29425 + 29436 29426 29425 + 29427 29426 29436 + 29436 29437 29427 + 29417 29427 29437 + 29207 29434 29208 + 29213 29434 29207 + 29434 29213 29435 + 29213 29438 29435 + 29435 29438 29439 + 29439 29440 29435 + 29435 29440 29436 + 29440 29441 29436 + 29436 29441 29437 + 29442 29437 29441 + 29437 29442 29417 + 29438 29213 29212 + 29212 29218 29438 + 29439 29438 29218 + 29218 29223 29439 + 29439 29223 29443 + 29440 29439 29443 + 29443 29444 29440 + 29440 29444 29445 + 29445 29441 29440 + 29445 29442 29441 + 29223 29228 29443 + 29446 29443 29228 + 29444 29443 29446 + 29446 29447 29444 + 29444 29447 29448 + 29448 29445 29444 + 29448 29442 29445 + 29442 29448 29449 + 29449 29450 29442 + 29442 29450 29417 + 29228 29451 29446 + 29452 29446 29451 + 29447 29446 29452 + 29452 29453 29447 + 29448 29447 29453 + 29449 29448 29453 + 29453 29454 29449 + 29454 29455 29449 + 29449 29455 29450 + 29451 29228 29227 + 29227 29456 29451 + 29451 29456 29457 + 29452 29451 29457 + 29458 29452 29457 + 29452 29458 29454 + 29454 29453 29452 + 29456 29227 29226 + 29226 29233 29456 + 29459 29456 29233 + 29456 29459 29457 + 29457 29459 29460 + 29461 29457 29460 + 29457 29461 29458 + 29462 29458 29461 + 29454 29458 29462 + 29233 29463 29459 + 29460 29459 29463 + 29463 29238 29460 + 29460 29238 29237 + 29464 29460 29237 + 29461 29460 29464 + 29464 29465 29461 + 29461 29465 29462 + 29232 29463 29233 + 29463 29232 29238 + 29330 29373 29325 + 29373 29330 29466 + 29466 29374 29373 + 29374 29466 29467 + 29467 29370 29374 + 29370 29467 29468 + 29468 29371 29370 + 29335 29466 29330 + 29466 29335 29469 + 29467 29466 29469 + 29468 29467 29469 + 29470 29468 29469 + 29468 29470 29363 + 29363 29371 29468 + 29471 29469 29335 + 29469 29471 29470 + 29470 29471 29472 + 29472 29473 29470 + 29473 29364 29470 + 29364 29363 29470 + 29335 29474 29471 + 29471 29474 29340 + 29340 29472 29471 + 29345 29472 29340 + 29472 29345 29475 + 29475 29473 29472 + 29473 29475 29364 + 29364 29475 29350 + 29350 29475 29345 + 29334 29474 29335 + 29340 29474 29334 + 29476 29462 29465 + 29462 29476 29477 + 29477 29478 29462 + 29462 29478 29454 + 29454 29478 29479 + 29479 29455 29454 + 29465 29480 29476 + 29476 29480 29481 + 29481 29482 29476 + 29482 29483 29476 + 29477 29476 29483 + 29480 29465 29464 + 29480 29464 29484 + 29484 29481 29480 + 29481 29484 29485 + 29481 29485 29486 + 29486 29482 29481 + 29487 29482 29486 + 29482 29487 29488 + 29488 29483 29482 + 29489 29484 29464 + 29485 29484 29489 + 29489 29490 29485 + 29485 29490 29491 + 29486 29485 29491 + 29491 29492 29486 + 29487 29486 29492 + 29492 29493 29487 + 29488 29487 29493 + 29237 29489 29464 + 29243 29489 29237 + 29489 29243 29490 + 29490 29243 29242 + 29242 29491 29490 + 29242 29494 29491 + 29491 29494 29495 + 29495 29492 29491 + 29492 29495 29496 + 29496 29493 29492 + 29493 29496 29497 + 29497 29498 29493 + 29493 29498 29488 + 29494 29242 29241 + 29241 29248 29494 + 29494 29248 29499 + 29495 29494 29499 + 29499 29500 29495 + 29496 29495 29500 + 29500 29501 29496 + 29496 29501 29502 + 29497 29496 29502 + 29248 29503 29499 + 29504 29499 29503 + 29386 29499 29504 + 29499 29386 29505 + 29505 29500 29499 + 29500 29505 29501 + 29501 29505 29506 + 29506 29502 29501 + 29247 29503 29248 + 29247 29507 29503 + 29503 29507 29504 + 29504 29507 29253 + 29253 29310 29504 + 29309 29504 29310 + 29504 29309 29386 + 29507 29247 29246 + 29246 29253 29507 + 29304 29310 29253 + 29253 29252 29304 + 29304 29252 29258 + 29258 29305 29304 + 29306 29305 29258 + 29258 29508 29306 + 29509 29306 29508 + 29301 29306 29509 + 29509 29510 29301 + 29510 29292 29301 + 29257 29508 29258 + 29508 29257 29267 + 29267 29511 29508 + 29511 29509 29508 + 29509 29511 29512 + 29513 29509 29512 + 29510 29509 29513 + 29513 29514 29510 + 29292 29510 29514 + 29293 29292 29514 + 29511 29267 29515 + 29515 29512 29511 + 29512 29515 29516 + 29516 29517 29512 + 29513 29512 29517 + 29518 29513 29517 + 29514 29513 29518 + 29518 29519 29514 + 29519 29293 29514 + 29519 29294 29293 + 29515 29267 29266 + 29515 29266 29520 + 29520 29516 29515 + 29516 29520 29521 + 29522 29516 29521 + 29517 29516 29522 + 29522 29523 29517 + 29517 29523 29524 + 29524 29518 29517 + 29519 29518 29524 + 29271 29520 29266 + 29520 29271 29525 + 29525 29521 29520 + 29521 29525 29526 + 29526 29527 29521 + 29527 29522 29521 + 29523 29522 29527 + 29527 29528 29523 + 29528 29524 29523 + 29525 29271 29529 + 29525 29529 29530 + 29530 29526 29525 + 29530 29531 29526 + 29532 29526 29531 + 29527 29526 29532 + 29532 29528 29527 + 29524 29528 29532 + 29533 29524 29532 + 29524 29533 29519 + 29271 29270 29529 + 29280 29529 29270 + 29529 29280 29530 + 29280 29534 29530 + 29530 29534 29535 + 29535 29536 29530 + 29531 29530 29536 + 29537 29531 29536 + 29537 29538 29531 + 29531 29538 29532 + 29532 29538 29533 + 29534 29280 29539 + 29539 29540 29534 + 29540 29535 29534 + 29535 29540 29541 + 29536 29535 29541 + 29541 29542 29536 + 29536 29542 29537 + 29542 29543 29537 + 29538 29537 29543 + 29279 29539 29280 + 29540 29539 29279 + 29279 29278 29540 + 29540 29278 29541 + 29278 29284 29541 + 29542 29541 29284 + 29284 29289 29542 + 29542 29289 29543 + 29289 29288 29543 + 29544 29543 29288 + 29543 29544 29538 + 29538 29544 29533 + 29519 29533 29544 + 29544 29294 29519 + 29288 29294 29544 + 29505 29386 29385 + 29385 29506 29505 + 29390 29506 29385 + 29506 29390 29502 + 29502 29390 29389 + 29389 29545 29502 + 29502 29545 29546 + 29546 29497 29502 + 29547 29497 29546 + 29497 29547 29548 + 29548 29498 29497 + 29545 29389 29394 + 29545 29394 29549 + 29549 29546 29545 + 29546 29549 29550 + 29546 29550 29547 + 29547 29550 29551 + 29551 29552 29547 + 29548 29547 29552 + 29398 29549 29394 + 29550 29549 29398 + 29398 29551 29550 + 29398 29553 29551 + 29551 29553 29554 + 29554 29552 29551 + 29552 29554 29555 + 29556 29552 29555 + 29552 29556 29548 + 29556 29557 29548 + 29498 29548 29557 + 29557 29488 29498 + 29558 29553 29398 + 29553 29558 29559 + 29559 29554 29553 + 29555 29554 29559 + 29402 29558 29398 + 29558 29402 29407 + 29558 29407 29406 + 29406 29559 29558 + 29560 29559 29406 + 29559 29560 29555 + 29555 29560 29561 + 29561 29562 29555 + 29562 29563 29555 + 29556 29555 29563 + 29563 29564 29556 + 29556 29564 29557 + 29406 29411 29560 + 29560 29411 29410 + 29410 29561 29560 + 29419 29561 29410 + 29561 29419 29565 + 29565 29562 29561 + 29562 29565 29479 + 29479 29566 29562 + 29563 29562 29566 + 29567 29563 29566 + 29563 29567 29564 + 29557 29564 29567 + 29568 29557 29567 + 29488 29557 29568 + 29568 29483 29488 + 29565 29419 29418 + 29418 29569 29565 + 29569 29455 29565 + 29455 29479 29565 + 29418 29417 29569 + 29417 29450 29569 + 29455 29569 29450 + 29483 29568 29477 + 29566 29477 29568 + 29478 29477 29566 + 29566 29479 29478 + 29568 29567 29566 + 29570 29571 29572 + 29570 29573 29571 + 29574 29571 29573 + 29571 29574 29575 + 29572 29571 29575 + 29576 29570 29572 + 29570 29576 29577 + 29577 29578 29570 + 29573 29570 29578 + 29579 29573 29578 + 29580 29573 29579 + 29573 29580 29574 + 29572 29581 29576 + 29577 29576 29581 + 29581 29582 29577 + 29583 29577 29582 + 29578 29577 29583 + 29583 29584 29578 + 29578 29584 29585 + 29585 29579 29578 + 29581 29572 29586 + 29587 29581 29586 + 29581 29587 29588 + 29588 29582 29581 + 29582 29588 29589 + 29589 29590 29582 + 29582 29590 29583 + 29591 29586 29572 + 29586 29591 29592 + 29592 29593 29586 + 29593 29587 29586 + 29587 29593 29594 + 29588 29587 29594 + 29589 29588 29594 + 29595 29591 29572 + 29591 29595 29596 + 29596 29597 29591 + 29597 29592 29591 + 29592 29597 29598 + 29599 29592 29598 + 29593 29592 29599 + 29599 29594 29593 + 29575 29595 29572 + 29595 29575 29600 + 29600 29601 29595 + 29601 29596 29595 + 29596 29601 29602 + 29603 29596 29602 + 29597 29596 29603 + 29603 29598 29597 + 29604 29600 29575 + 29600 29604 29605 + 29606 29600 29605 + 29601 29600 29606 + 29606 29602 29601 + 29602 29606 29607 + 29607 29608 29602 + 29603 29602 29608 + 29604 29575 29609 + 29610 29604 29609 + 29604 29610 29611 + 29611 29605 29604 + 29605 29611 29612 + 29612 29613 29605 + 29606 29605 29613 + 29613 29607 29606 + 29614 29609 29575 + 29615 29609 29614 + 29615 29610 29609 + 29611 29610 29615 + 29615 29616 29611 + 29612 29611 29616 + 29616 29617 29612 + 29618 29612 29617 + 29613 29612 29618 + 29574 29614 29575 + 29614 29574 29619 + 29619 29620 29614 + 29620 29621 29614 + 29621 29615 29614 + 29615 29621 29622 + 29622 29616 29615 + 29616 29622 29617 + 29580 29619 29574 + 29580 29623 29619 + 29623 29624 29619 + 29620 29619 29624 + 29624 29625 29620 + 29621 29620 29625 + 29622 29621 29625 + 29626 29622 29625 + 29622 29626 29617 + 29579 29623 29580 + 29623 29579 29585 + 29585 29627 29623 + 29623 29627 29628 + 29628 29624 29623 + 29625 29624 29628 + 29628 29629 29625 + 29625 29629 29626 + 29630 29626 29629 + 29617 29626 29630 + 29630 29631 29617 + 29617 29631 29618 + 29627 29585 29632 + 29632 29633 29627 + 29627 29633 29634 + 29634 29628 29627 + 29629 29628 29634 + 29634 29635 29629 + 29629 29635 29630 + 29636 29630 29635 + 29631 29630 29636 + 29632 29585 29584 + 29584 29637 29632 + 29638 29632 29637 + 29633 29632 29638 + 29638 29639 29633 + 29633 29639 29640 + 29640 29634 29633 + 29635 29634 29640 + 29640 29641 29635 + 29635 29641 29636 + 29642 29637 29584 + 29637 29642 29643 + 29643 29644 29637 + 29637 29644 29638 + 29645 29638 29644 + 29639 29638 29645 + 29584 29583 29642 + 29642 29583 29590 + 29590 29646 29642 + 29643 29642 29646 + 29646 29647 29643 + 29648 29643 29647 + 29644 29643 29648 + 29648 29649 29644 + 29644 29649 29645 + 29650 29646 29590 + 29646 29650 29651 + 29651 29647 29646 + 29647 29651 29652 + 29652 29653 29647 + 29647 29653 29648 + 29654 29648 29653 + 29649 29648 29654 + 29590 29589 29650 + 29650 29589 29655 + 29655 29656 29650 + 29650 29656 29657 + 29657 29651 29650 + 29652 29651 29657 + 29657 29658 29652 + 29659 29652 29658 + 29653 29652 29659 + 29594 29655 29589 + 29660 29655 29594 + 29655 29660 29661 + 29661 29656 29655 + 29656 29661 29662 + 29662 29657 29656 + 29657 29662 29663 + 29663 29658 29657 + 29594 29599 29660 + 29660 29599 29598 + 29598 29664 29660 + 29661 29660 29664 + 29664 29665 29661 + 29662 29661 29665 + 29665 29666 29662 + 29663 29662 29666 + 29666 29667 29663 + 29668 29663 29667 + 29658 29663 29668 + 29669 29664 29598 + 29664 29669 29670 + 29670 29665 29664 + 29665 29670 29671 + 29671 29666 29665 + 29666 29671 29672 + 29672 29667 29666 + 29598 29603 29669 + 29669 29603 29608 + 29670 29669 29608 + 29608 29673 29670 + 29671 29670 29673 + 29673 29674 29671 + 29672 29671 29674 + 29674 29675 29672 + 29676 29672 29675 + 29667 29672 29676 + 29676 29677 29667 + 29667 29677 29668 + 29678 29673 29608 + 29673 29678 29679 + 29679 29674 29673 + 29674 29679 29680 + 29680 29675 29674 + 29675 29680 29681 + 29681 29682 29675 + 29675 29682 29676 + 29608 29607 29678 + 29678 29607 29613 + 29613 29683 29678 + 29679 29678 29683 + 29683 29684 29679 + 29680 29679 29684 + 29684 29685 29680 + 29681 29680 29685 + 29685 29686 29681 + 29687 29681 29686 + 29682 29681 29687 + 29618 29683 29613 + 29683 29618 29688 + 29688 29684 29683 + 29684 29688 29689 + 29689 29685 29684 + 29685 29689 29690 + 29690 29686 29685 + 29686 29690 29691 + 29691 29692 29686 + 29686 29692 29687 + 29688 29618 29631 + 29631 29693 29688 + 29689 29688 29693 + 29693 29694 29689 + 29690 29689 29694 + 29694 29695 29690 + 29691 29690 29695 + 29636 29693 29631 + 29693 29636 29696 + 29696 29694 29693 + 29694 29696 29697 + 29697 29695 29694 + 29695 29697 29698 + 29698 29699 29695 + 29695 29699 29691 + 29696 29636 29641 + 29641 29700 29696 + 29697 29696 29700 + 29700 29701 29697 + 29698 29697 29701 + 29701 29702 29698 + 29703 29698 29702 + 29699 29698 29703 + 29704 29700 29641 + 29700 29704 29705 + 29705 29701 29700 + 29701 29705 29706 + 29706 29702 29701 + 29702 29706 29707 + 29707 29708 29702 + 29702 29708 29703 + 29641 29640 29704 + 29704 29640 29639 + 29639 29709 29704 + 29704 29709 29710 + 29710 29705 29704 + 29706 29705 29710 + 29710 29711 29706 + 29706 29711 29712 + 29712 29707 29706 + 29645 29709 29639 + 29709 29645 29713 + 29713 29710 29709 + 29710 29713 29714 + 29714 29711 29710 + 29711 29714 29715 + 29715 29712 29711 + 29713 29645 29649 + 29649 29716 29713 + 29714 29713 29716 + 29716 29717 29714 + 29714 29717 29718 + 29718 29715 29714 + 29719 29715 29718 + 29712 29715 29719 + 29654 29716 29649 + 29716 29654 29720 + 29720 29717 29716 + 29717 29720 29721 + 29721 29722 29717 + 29717 29722 29718 + 29723 29718 29722 + 29718 29723 29724 + 29718 29724 29719 + 29720 29654 29725 + 29725 29726 29720 + 29720 29726 29727 + 29727 29721 29720 + 29728 29721 29727 + 29728 29722 29721 + 29722 29728 29723 + 29653 29725 29654 + 29659 29725 29653 + 29725 29659 29729 + 29729 29726 29725 + 29726 29729 29730 + 29730 29731 29726 + 29726 29731 29727 + 29729 29659 29732 + 29732 29733 29729 + 29729 29733 29734 + 29734 29730 29729 + 29735 29730 29734 + 29730 29735 29736 + 29736 29731 29730 + 29658 29732 29659 + 29668 29732 29658 + 29732 29668 29737 + 29737 29733 29732 + 29733 29737 29738 + 29738 29734 29733 + 29739 29734 29738 + 29734 29739 29735 + 29740 29735 29739 + 29736 29735 29740 + 29737 29668 29677 + 29677 29741 29737 + 29737 29741 29742 + 29742 29738 29737 + 29743 29738 29742 + 29738 29743 29739 + 29739 29743 29744 + 29744 29745 29739 + 29739 29745 29740 + 29746 29741 29677 + 29741 29746 29747 + 29747 29742 29741 + 29748 29742 29747 + 29742 29748 29743 + 29744 29743 29748 + 29677 29676 29746 + 29746 29676 29682 + 29682 29749 29746 + 29746 29749 29750 + 29750 29747 29746 + 29751 29747 29750 + 29747 29751 29748 + 29748 29751 29752 + 29752 29753 29748 + 29748 29753 29744 + 29687 29749 29682 + 29749 29687 29754 + 29754 29750 29749 + 29750 29754 29755 + 29755 29756 29750 + 29750 29756 29751 + 29752 29751 29756 + 29757 29754 29687 + 29755 29754 29757 + 29687 29692 29757 + 29758 29757 29692 + 29759 29757 29758 + 29757 29759 29755 + 29692 29691 29758 + 29760 29758 29691 + 29761 29758 29760 + 29758 29761 29759 + 29759 29761 29762 + 29762 29763 29759 + 29755 29759 29763 + 29691 29699 29760 + 29699 29764 29760 + 29765 29760 29764 + 29760 29765 29766 + 29760 29766 29761 + 29761 29766 29767 + 29767 29762 29761 + 29768 29762 29767 + 29763 29762 29768 + 29703 29764 29699 + 29764 29703 29769 + 29769 29770 29764 + 29764 29770 29765 + 29765 29770 29771 + 29771 29772 29765 + 29766 29765 29772 + 29772 29767 29766 + 29769 29703 29708 + 29708 29773 29769 + 29769 29773 29774 + 29774 29775 29769 + 29770 29769 29775 + 29775 29771 29770 + 29771 29775 29776 + 29771 29776 29777 + 29777 29772 29771 + 29767 29772 29777 + 29773 29708 29707 + 29707 29778 29773 + 29773 29778 29779 + 29779 29774 29773 + 29774 29779 29780 + 29780 29781 29774 + 29774 29781 29776 + 29776 29775 29774 + 29778 29707 29712 + 29712 29782 29778 + 29778 29782 29783 + 29783 29779 29778 + 29780 29779 29783 + 29783 29784 29780 + 29780 29784 29785 + 29781 29780 29785 + 29785 29786 29781 + 29776 29781 29786 + 29777 29776 29786 + 29719 29782 29712 + 29782 29719 29787 + 29787 29788 29782 + 29782 29788 29783 + 29789 29783 29788 + 29783 29789 29784 + 29784 29789 29790 + 29790 29791 29784 + 29784 29791 29785 + 29792 29787 29719 + 29793 29787 29792 + 29793 29788 29787 + 29788 29793 29789 + 29789 29793 29794 + 29794 29795 29789 + 29795 29790 29789 + 29719 29724 29792 + 29796 29792 29724 + 29792 29796 29797 + 29797 29794 29792 + 29792 29794 29793 + 29724 29723 29796 + 29798 29796 29723 + 29797 29796 29798 + 29798 29799 29797 + 29797 29799 29800 + 29794 29797 29800 + 29800 29795 29794 + 29801 29795 29800 + 29795 29801 29790 + 29802 29798 29723 + 29803 29798 29802 + 29798 29803 29799 + 29799 29803 29804 + 29799 29804 29800 + 29801 29800 29804 + 29804 29805 29801 + 29801 29805 29806 + 29801 29806 29790 + 29807 29802 29723 + 29808 29802 29807 + 29809 29802 29808 + 29802 29809 29803 + 29809 29810 29803 + 29810 29811 29803 + 29803 29811 29804 + 29805 29804 29811 + 29723 29728 29807 + 29727 29807 29728 + 29812 29807 29727 + 29807 29812 29808 + 29808 29812 29813 + 29813 29814 29808 + 29815 29808 29814 + 29808 29815 29809 + 29810 29809 29815 + 29727 29816 29812 + 29812 29816 29817 + 29817 29813 29812 + 29818 29813 29817 + 29813 29818 29819 + 29819 29814 29813 + 29820 29814 29819 + 29814 29820 29815 + 29816 29727 29731 + 29731 29736 29816 + 29817 29816 29736 + 29736 29821 29817 + 29822 29817 29821 + 29817 29822 29818 + 29818 29822 29823 + 29823 29824 29818 + 29819 29818 29824 + 29825 29819 29824 + 29819 29825 29820 + 29740 29821 29736 + 29821 29740 29826 + 29826 29827 29821 + 29821 29827 29822 + 29822 29827 29823 + 29828 29823 29827 + 29824 29823 29828 + 29829 29824 29828 + 29824 29829 29825 + 29830 29825 29829 + 29820 29825 29830 + 29826 29740 29745 + 29745 29831 29826 + 29828 29826 29831 + 29827 29826 29828 + 29831 29745 29744 + 29744 29832 29831 + 29831 29832 29833 + 29833 29834 29831 + 29831 29834 29828 + 29829 29828 29834 + 29832 29744 29753 + 29753 29835 29832 + 29833 29832 29835 + 29835 29836 29833 + 29837 29833 29836 + 29837 29834 29833 + 29834 29837 29829 + 29829 29837 29838 + 29838 29839 29829 + 29839 29830 29829 + 29835 29753 29752 + 29752 29840 29835 + 29835 29840 29841 + 29841 29836 29835 + 29842 29836 29841 + 29836 29842 29837 + 29837 29842 29838 + 29840 29752 29843 + 29843 29844 29840 + 29841 29840 29844 + 29845 29841 29844 + 29842 29841 29845 + 29845 29838 29842 + 29846 29838 29845 + 29838 29846 29847 + 29847 29839 29838 + 29756 29843 29752 + 29848 29843 29756 + 29844 29843 29848 + 29848 29849 29844 + 29844 29849 29850 + 29850 29851 29844 + 29844 29851 29845 + 29846 29845 29851 + 29756 29755 29848 + 29852 29848 29755 + 29849 29848 29852 + 29852 29853 29849 + 29853 29854 29849 + 29854 29850 29849 + 29855 29850 29854 + 29855 29851 29850 + 29851 29855 29846 + 29846 29855 29856 + 29846 29856 29847 + 29857 29852 29755 + 29858 29852 29857 + 29858 29853 29852 + 29853 29858 29859 + 29859 29854 29853 + 29859 29856 29854 + 29854 29856 29855 + 29763 29857 29755 + 29860 29857 29763 + 29861 29857 29860 + 29857 29861 29858 + 29859 29858 29861 + 29861 29862 29859 + 29862 29863 29859 + 29856 29859 29863 + 29863 29864 29856 + 29856 29864 29847 + 29763 29865 29860 + 29860 29865 29866 + 29866 29867 29860 + 29867 29868 29860 + 29861 29860 29868 + 29868 29862 29861 + 29768 29865 29763 + 29865 29768 29869 + 29869 29866 29865 + 29870 29866 29869 + 29866 29870 29871 + 29871 29867 29866 + 29867 29871 29872 + 29867 29872 29873 + 29873 29868 29867 + 29873 29862 29868 + 29768 29874 29869 + 29875 29869 29874 + 29869 29875 29870 + 29870 29875 29786 + 29786 29876 29870 + 29870 29876 29877 + 29877 29871 29870 + 29767 29874 29768 + 29777 29874 29767 + 29874 29777 29875 + 29786 29875 29777 + 29871 29877 29878 + 29879 29878 29877 + 29878 29879 29880 + 29880 29881 29878 + 29872 29878 29881 + 29872 29871 29878 + 29877 29882 29879 + 29879 29882 29883 + 29883 29884 29879 + 29879 29884 29885 + 29880 29879 29885 + 29839 29880 29885 + 29881 29880 29839 + 29882 29877 29876 + 29876 29886 29882 + 29883 29882 29886 + 29886 29887 29883 + 29888 29883 29887 + 29883 29888 29889 + 29884 29883 29889 + 29884 29889 29890 + 29890 29885 29884 + 29886 29876 29786 + 29786 29785 29886 + 29886 29785 29791 + 29791 29887 29886 + 29887 29791 29790 + 29790 29806 29887 + 29887 29806 29888 + 29805 29888 29806 + 29805 29891 29888 + 29891 29889 29888 + 29889 29891 29892 + 29890 29889 29892 + 29893 29890 29892 + 29890 29893 29830 + 29830 29885 29890 + 29885 29830 29839 + 29811 29891 29805 + 29891 29811 29810 + 29810 29892 29891 + 29810 29894 29892 + 29892 29894 29893 + 29893 29894 29815 + 29820 29893 29815 + 29830 29893 29820 + 29894 29810 29815 + 29839 29847 29881 + 29881 29847 29864 + 29864 29895 29881 + 29881 29895 29872 + 29895 29873 29872 + 29862 29873 29895 + 29895 29863 29862 + 29863 29895 29864 + 29896 29897 29898 + 29897 29896 29899 + 29899 29900 29897 + 29897 29900 29901 + 29901 29902 29897 + 29897 29902 29898 + 29898 29903 29896 + 29903 29904 29896 + 29899 29896 29904 + 29904 29905 29899 + 29906 29899 29905 + 29900 29899 29906 + 29903 29898 29907 + 29908 29903 29907 + 29903 29908 29909 + 29909 29904 29903 + 29904 29909 29910 + 29910 29905 29904 + 29907 29898 29902 + 29902 29911 29907 + 29907 29911 29912 + 29913 29907 29912 + 29907 29913 29914 + 29907 29914 29915 + 29915 29916 29907 + 29916 29908 29907 + 29911 29902 29901 + 29901 29917 29911 + 29911 29917 29918 + 29918 29912 29911 + 29919 29912 29918 + 29912 29919 29913 + 29913 29919 29920 + 29921 29913 29920 + 29913 29921 29914 + 29917 29901 29922 + 29922 29923 29917 + 29917 29923 29924 + 29924 29918 29917 + 29925 29918 29924 + 29918 29925 29919 + 29919 29925 29926 + 29926 29920 29919 + 29922 29901 29900 + 29900 29927 29922 + 29928 29922 29927 + 29923 29922 29928 + 29928 29929 29923 + 29923 29929 29930 + 29930 29924 29923 + 29931 29924 29930 + 29924 29931 29925 + 29906 29927 29900 + 29927 29906 29932 + 29932 29933 29927 + 29927 29933 29928 + 29934 29928 29933 + 29929 29928 29934 + 29934 29935 29929 + 29929 29935 29936 + 29936 29930 29929 + 29932 29906 29937 + 29937 29938 29932 + 29939 29932 29938 + 29933 29932 29939 + 29939 29940 29933 + 29933 29940 29934 + 29941 29934 29940 + 29935 29934 29941 + 29905 29937 29906 + 29942 29937 29905 + 29937 29942 29943 + 29943 29938 29937 + 29938 29943 29944 + 29944 29945 29938 + 29938 29945 29939 + 29946 29939 29945 + 29940 29939 29946 + 29905 29910 29942 + 29942 29910 29947 + 29947 29948 29942 + 29943 29942 29948 + 29948 29949 29943 + 29944 29943 29949 + 29949 29950 29944 + 29951 29944 29950 + 29945 29944 29951 + 29952 29947 29910 + 29953 29947 29952 + 29947 29953 29954 + 29954 29948 29947 + 29948 29954 29955 + 29955 29949 29948 + 29949 29955 29956 + 29956 29950 29949 + 29910 29909 29952 + 29908 29952 29909 + 29908 29916 29952 + 29916 29957 29952 + 29952 29957 29953 + 29953 29957 29958 + 29958 29959 29953 + 29954 29953 29959 + 29959 29960 29954 + 29955 29954 29960 + 29960 29961 29955 + 29956 29955 29961 + 29916 29958 29957 + 29916 29915 29958 + 29915 29962 29958 + 29958 29962 29963 + 29963 29959 29958 + 29959 29963 29964 + 29964 29960 29959 + 29960 29964 29965 + 29965 29961 29960 + 29915 29966 29962 + 29963 29962 29966 + 29966 29967 29963 + 29964 29963 29967 + 29967 29968 29964 + 29965 29964 29968 + 29968 29969 29965 + 29970 29965 29969 + 29961 29965 29970 + 29971 29966 29915 + 29966 29971 29972 + 29972 29967 29966 + 29967 29972 29973 + 29973 29968 29967 + 29968 29973 29974 + 29974 29969 29968 + 29915 29975 29971 + 29975 29976 29971 + 29972 29971 29976 + 29976 29977 29972 + 29972 29977 29978 + 29978 29973 29972 + 29974 29973 29978 + 29979 29975 29915 + 29975 29979 29976 + 29979 29980 29976 + 29976 29980 29981 + 29981 29977 29976 + 29977 29981 29982 + 29982 29978 29977 + 29983 29979 29915 + 29979 29983 29984 + 29979 29984 29980 + 29981 29980 29984 + 29984 29985 29981 + 29982 29981 29985 + 29985 29986 29982 + 29987 29982 29986 + 29978 29982 29987 + 29914 29983 29915 + 29983 29914 29988 + 29988 29989 29983 + 29983 29989 29990 + 29983 29990 29984 + 29984 29990 29991 + 29991 29985 29984 + 29985 29991 29992 + 29992 29986 29985 + 29914 29993 29988 + 29994 29988 29993 + 29989 29988 29994 + 29994 29995 29989 + 29989 29995 29991 + 29991 29990 29989 + 29996 29993 29914 + 29993 29996 29997 + 29997 29998 29993 + 29993 29998 29994 + 29999 29994 29998 + 29995 29994 29999 + 29914 29921 29996 + 29921 30000 29996 + 29997 29996 30000 + 30000 30001 29997 + 30002 29997 30001 + 29998 29997 30002 + 30002 30003 29998 + 29998 30003 29999 + 29920 30000 29921 + 30000 29920 29926 + 29926 30001 30000 + 30001 29926 30004 + 30004 30005 30001 + 30001 30005 30002 + 30006 30002 30005 + 30003 30002 30006 + 30006 30007 30003 + 30003 30007 30008 + 30008 29999 30003 + 30004 29926 29925 + 29925 29931 30004 + 30009 30004 29931 + 30005 30004 30009 + 30009 30010 30005 + 30005 30010 30006 + 30011 30006 30010 + 30007 30006 30011 + 30011 30012 30007 + 30008 30007 30012 + 29931 30013 30009 + 30014 30009 30013 + 30010 30009 30014 + 30014 30015 30010 + 30010 30015 30011 + 30016 30011 30015 + 30012 30011 30016 + 29930 30013 29931 + 30013 29930 29936 + 29936 30017 30013 + 30013 30017 30014 + 30018 30014 30017 + 30014 30018 30019 + 30015 30014 30019 + 30015 30019 30016 + 30017 29936 30020 + 30020 30021 30017 + 30017 30021 30018 + 30022 30018 30021 + 30019 30018 30022 + 30022 30023 30019 + 30016 30019 30023 + 30020 29936 29935 + 29935 30024 30020 + 30020 30024 30025 + 30025 30026 30020 + 30021 30020 30026 + 30026 30027 30021 + 30027 30022 30021 + 29941 30024 29935 + 30024 29941 30028 + 30028 30025 30024 + 30025 30028 30029 + 30029 30030 30025 + 30025 30030 30031 + 30031 30026 30025 + 30027 30026 30031 + 30031 30032 30027 + 30027 30032 30022 + 30028 29941 30033 + 30033 30034 30028 + 30029 30028 30034 + 30034 30035 30029 + 30029 30035 30036 + 30036 30037 30029 + 30030 30029 30037 + 29941 30038 30033 + 30039 30033 30038 + 30033 30039 30040 + 30033 30040 30034 + 30040 30041 30034 + 30035 30034 30041 + 30035 30041 30042 + 30042 30036 30035 + 29940 30038 29941 + 29946 30038 29940 + 30038 29946 30039 + 30039 29946 30043 + 30043 30044 30039 + 30040 30039 30044 + 30044 30045 30040 + 30041 30040 30045 + 30042 30041 30045 + 30046 30042 30045 + 30047 30042 30046 + 30036 30042 30047 + 29945 30043 29946 + 29951 30043 29945 + 30043 29951 30048 + 30048 30044 30043 + 30045 30044 30048 + 30048 30049 30045 + 30045 30049 30050 + 30050 30051 30045 + 30045 30051 30046 + 30052 30048 29951 + 30052 30053 30048 + 30053 30049 30048 + 30050 30049 30053 + 29951 30054 30052 + 30055 30052 30054 + 30052 30055 30056 + 30053 30052 30056 + 30053 30056 30057 + 30057 30058 30053 + 30053 30058 30050 + 29950 30054 29951 + 30059 30054 29950 + 30054 30059 30055 + 30060 30055 30059 + 30056 30055 30060 + 30060 30061 30056 + 30056 30061 30062 + 30062 30057 30056 + 30063 30057 30062 + 30058 30057 30063 + 29950 29956 30059 + 30059 29956 30064 + 30064 30065 30059 + 30059 30065 30060 + 30066 30060 30065 + 30060 30066 30067 + 30067 30061 30060 + 30061 30067 30068 + 30068 30062 30061 + 29961 30064 29956 + 29970 30064 29961 + 30064 29970 30069 + 30064 30069 30065 + 30065 30069 30066 + 30070 30066 30069 + 30067 30066 30070 + 30070 30071 30067 + 30067 30071 30072 + 30072 30068 30067 + 30069 29970 30073 + 30073 30074 30069 + 30069 30074 30070 + 30075 30070 30074 + 30070 30075 30076 + 30076 30071 30070 + 30071 30076 30077 + 30077 30072 30071 + 29969 30073 29970 + 30078 30073 29969 + 30073 30078 30079 + 30079 30074 30073 + 30074 30079 30075 + 30080 30075 30079 + 30076 30075 30080 + 30080 30081 30076 + 30077 30076 30081 + 29969 29974 30078 + 30078 29974 30082 + 30082 30083 30078 + 30079 30078 30083 + 30083 30084 30079 + 30079 30084 30080 + 30085 30080 30084 + 30081 30080 30085 + 29978 30082 29974 + 29987 30082 29978 + 30082 29987 30086 + 30086 30083 30082 + 30083 30086 30087 + 30087 30084 30083 + 30084 30087 30085 + 30088 30085 30087 + 30089 30085 30088 + 30085 30089 30081 + 30086 29987 30090 + 30090 30091 30086 + 30087 30086 30091 + 30091 30092 30087 + 30087 30092 30088 + 30093 30088 30092 + 30094 30088 30093 + 30088 30094 30089 + 29986 30090 29987 + 30095 30090 29986 + 30090 30095 30096 + 30096 30091 30090 + 30091 30096 30097 + 30097 30092 30091 + 30092 30097 30093 + 29986 29992 30095 + 30095 29992 30098 + 30098 30099 30095 + 30096 30095 30099 + 30099 30100 30096 + 30097 30096 30100 + 30100 30101 30097 + 30093 30097 30101 + 29995 30098 29992 + 29999 30098 29995 + 30098 29999 30008 + 30008 30099 30098 + 30099 30008 30102 + 30102 30100 30099 + 30100 30102 30103 + 30103 30101 30100 + 29992 29991 29995 + 30012 30102 30008 + 30103 30102 30012 + 30012 30104 30103 + 30103 30104 30105 + 30105 30106 30103 + 30101 30103 30106 + 30106 30107 30101 + 30101 30107 30093 + 30108 30093 30107 + 30093 30108 30094 + 30016 30104 30012 + 30104 30016 30109 + 30109 30110 30104 + 30104 30110 30105 + 30023 30109 30016 + 30109 30023 30111 + 30112 30109 30111 + 30112 30110 30109 + 30110 30112 30113 + 30113 30105 30110 + 30111 30023 30022 + 30032 30111 30022 + 30111 30032 30114 + 30112 30111 30114 + 30114 30113 30112 + 30115 30113 30114 + 30105 30113 30115 + 30115 30116 30105 + 30105 30116 30117 + 30117 30106 30105 + 30106 30117 30118 + 30118 30107 30106 + 30107 30118 30108 + 30119 30114 30032 + 30120 30114 30119 + 30114 30120 30115 + 30121 30115 30120 + 30116 30115 30121 + 30121 30122 30116 + 30116 30122 30123 + 30123 30117 30116 + 30118 30117 30123 + 30032 30031 30119 + 30124 30119 30031 + 30125 30119 30124 + 30119 30125 30120 + 30120 30125 30126 + 30126 30127 30120 + 30120 30127 30128 + 30128 30121 30120 + 30031 30030 30124 + 30037 30124 30030 + 30124 30037 30129 + 30124 30129 30125 + 30125 30129 30130 + 30130 30131 30125 + 30131 30132 30125 + 30132 30126 30125 + 30133 30126 30132 + 30133 30127 30126 + 30129 30037 30036 + 30036 30130 30129 + 30047 30130 30036 + 30130 30047 30134 + 30134 30131 30130 + 30131 30134 30135 + 30135 30136 30131 + 30131 30136 30137 + 30137 30132 30131 + 30137 30138 30132 + 30132 30138 30133 + 30139 30134 30047 + 30135 30134 30139 + 30139 30140 30135 + 30135 30140 30141 + 30141 30142 30135 + 30136 30135 30142 + 30142 30143 30136 + 30137 30136 30143 + 30144 30139 30047 + 30145 30139 30144 + 30145 30140 30139 + 30140 30145 30146 + 30146 30141 30140 + 30047 30147 30144 + 30148 30144 30147 + 30144 30148 30149 + 30149 30150 30144 + 30144 30150 30145 + 30046 30147 30047 + 30046 30151 30147 + 30147 30151 30148 + 30152 30148 30151 + 30152 30153 30148 + 30153 30149 30148 + 30153 30154 30149 + 30150 30149 30154 + 30154 30155 30150 + 30145 30150 30155 + 30151 30046 30051 + 30051 30152 30151 + 30152 30051 30050 + 30153 30152 30050 + 30050 30156 30153 + 30153 30156 30154 + 30156 30157 30154 + 30154 30157 30155 + 30155 30157 30158 + 30158 30159 30155 + 30155 30159 30145 + 30159 30146 30145 + 30160 30146 30159 + 30141 30146 30160 + 30156 30050 30058 + 30058 30161 30156 + 30157 30156 30161 + 30158 30157 30161 + 30162 30158 30161 + 30159 30158 30162 + 30159 30162 30160 + 30163 30160 30162 + 30164 30160 30163 + 30160 30164 30141 + 30063 30161 30058 + 30161 30063 30162 + 30162 30063 30163 + 30062 30163 30063 + 30163 30062 30068 + 30068 30165 30163 + 30163 30165 30164 + 30164 30165 30166 + 30166 30167 30164 + 30141 30164 30167 + 30167 30142 30141 + 30143 30142 30167 + 30165 30068 30072 + 30072 30166 30165 + 30166 30072 30077 + 30077 30168 30166 + 30166 30168 30169 + 30169 30167 30166 + 30167 30169 30143 + 30143 30169 30170 + 30170 30171 30143 + 30143 30171 30137 + 30168 30077 30172 + 30172 30173 30168 + 30168 30173 30174 + 30174 30170 30168 + 30170 30169 30168 + 30081 30172 30077 + 30175 30172 30081 + 30172 30175 30176 + 30176 30173 30172 + 30173 30176 30177 + 30177 30174 30173 + 30081 30089 30175 + 30175 30089 30094 + 30178 30175 30094 + 30176 30175 30178 + 30178 30179 30176 + 30176 30179 30180 + 30180 30177 30176 + 30181 30177 30180 + 30174 30177 30181 + 30094 30182 30178 + 30183 30178 30182 + 30179 30178 30183 + 30179 30183 30184 + 30184 30180 30179 + 30180 30184 30185 + 30180 30185 30181 + 30186 30182 30094 + 30182 30186 30187 + 30187 30188 30182 + 30182 30188 30183 + 30188 30189 30183 + 30189 30184 30183 + 30185 30184 30189 + 30189 30190 30185 + 30181 30185 30190 + 30094 30108 30186 + 30186 30108 30118 + 30118 30191 30186 + 30187 30186 30191 + 30191 30192 30187 + 30187 30192 30193 + 30193 30194 30187 + 30188 30187 30194 + 30194 30189 30188 + 30189 30194 30190 + 30123 30191 30118 + 30191 30123 30192 + 30192 30123 30122 + 30122 30193 30192 + 30193 30122 30121 + 30193 30121 30128 + 30128 30194 30193 + 30194 30128 30190 + 30195 30190 30128 + 30190 30195 30181 + 30196 30181 30195 + 30181 30196 30174 + 30174 30196 30197 + 30197 30170 30174 + 30170 30197 30171 + 30198 30195 30128 + 30199 30195 30198 + 30195 30199 30196 + 30197 30196 30199 + 30199 30133 30197 + 30133 30138 30197 + 30197 30138 30137 + 30171 30197 30137 + 30127 30198 30128 + 30199 30198 30127 + 30127 30133 30199 + 30200 30201 30202 + 30201 30200 30203 + 30201 30203 30204 + 30204 30205 30201 + 30205 30206 30201 + 30206 30207 30201 + 30201 30207 30208 + 30208 30209 30201 + 30201 30209 30202 + 30202 30210 30200 + 30210 30211 30200 + 30212 30200 30211 + 30200 30212 30203 + 30210 30202 30213 + 30213 30214 30210 + 30210 30214 30215 + 30215 30211 30210 + 30216 30211 30215 + 30211 30216 30212 + 30216 30217 30212 + 30203 30212 30217 + 30213 30202 30209 + 30209 30218 30213 + 30219 30213 30218 + 30214 30213 30219 + 30219 30220 30214 + 30214 30220 30221 + 30221 30215 30214 + 30222 30215 30221 + 30215 30222 30216 + 30223 30218 30209 + 30218 30223 30224 + 30224 30225 30218 + 30218 30225 30219 + 30226 30219 30225 + 30220 30219 30226 + 30209 30208 30223 + 30223 30208 30227 + 30227 30228 30223 + 30224 30223 30228 + 30228 30229 30224 + 30230 30224 30229 + 30225 30224 30230 + 30230 30231 30225 + 30225 30231 30226 + 30227 30208 30207 + 30227 30207 30206 + 30232 30227 30206 + 30227 30232 30233 + 30233 30228 30227 + 30228 30233 30234 + 30234 30229 30228 + 30229 30234 30235 + 30235 30236 30229 + 30229 30236 30230 + 30237 30232 30206 + 30233 30232 30237 + 30237 30238 30233 + 30234 30233 30238 + 30238 30239 30234 + 30235 30234 30239 + 30239 30240 30235 + 30241 30235 30240 + 30236 30235 30241 + 30237 30206 30205 + 30242 30237 30205 + 30237 30242 30243 + 30243 30238 30237 + 30238 30243 30244 + 30244 30239 30238 + 30239 30244 30245 + 30245 30240 30239 + 30246 30242 30205 + 30243 30242 30246 + 30246 30247 30243 + 30244 30243 30247 + 30247 30248 30244 + 30245 30244 30248 + 30248 30249 30245 + 30250 30245 30249 + 30240 30245 30250 + 30251 30246 30205 + 30246 30251 30252 + 30252 30247 30246 + 30247 30252 30253 + 30253 30248 30247 + 30248 30253 30254 + 30254 30249 30248 + 30205 30204 30251 + 30255 30251 30204 + 30252 30251 30255 + 30255 30256 30252 + 30253 30252 30256 + 30256 30257 30253 + 30254 30253 30257 + 30258 30255 30204 + 30255 30258 30259 + 30259 30256 30255 + 30256 30259 30260 + 30260 30257 30256 + 30257 30260 30261 + 30261 30262 30257 + 30257 30262 30254 + 30204 30263 30258 + 30264 30258 30263 + 30259 30258 30264 + 30264 30265 30259 + 30260 30259 30265 + 30265 30266 30260 + 30261 30260 30266 + 30267 30263 30204 + 30263 30267 30268 + 30268 30264 30263 + 30264 30268 30269 + 30269 30265 30264 + 30265 30269 30270 + 30270 30266 30265 + 30271 30267 30204 + 30267 30271 30272 + 30272 30273 30267 + 30273 30268 30267 + 30269 30268 30273 + 30273 30274 30269 + 30270 30269 30274 + 30275 30271 30204 + 30271 30275 30276 + 30276 30277 30271 + 30277 30272 30271 + 30278 30272 30277 + 30273 30272 30278 + 30278 30274 30273 + 30203 30275 30204 + 30275 30203 30279 + 30279 30280 30275 + 30280 30276 30275 + 30281 30276 30280 + 30277 30276 30281 + 30281 30282 30277 + 30277 30282 30278 + 30283 30279 30203 + 30284 30279 30283 + 30280 30279 30284 + 30284 30285 30280 + 30280 30285 30281 + 30286 30281 30285 + 30282 30281 30286 + 30286 30287 30282 + 30278 30282 30287 + 30217 30283 30203 + 30283 30217 30288 + 30288 30289 30283 + 30283 30289 30284 + 30290 30284 30289 + 30285 30284 30290 + 30290 30291 30285 + 30285 30291 30286 + 30292 30286 30291 + 30287 30286 30292 + 30288 30217 30216 + 30216 30222 30288 + 30293 30288 30222 + 30289 30288 30293 + 30293 30294 30289 + 30289 30294 30290 + 30295 30290 30294 + 30291 30290 30295 + 30295 30296 30291 + 30291 30296 30292 + 30222 30297 30293 + 30298 30293 30297 + 30294 30293 30298 + 30298 30299 30294 + 30294 30299 30295 + 30300 30295 30299 + 30296 30295 30300 + 30221 30297 30222 + 30297 30221 30301 + 30301 30302 30297 + 30297 30302 30298 + 30303 30298 30302 + 30299 30298 30303 + 30303 30304 30299 + 30299 30304 30300 + 30301 30221 30220 + 30220 30305 30301 + 30306 30301 30305 + 30302 30301 30306 + 30306 30307 30302 + 30302 30307 30303 + 30308 30303 30307 + 30304 30303 30308 + 30226 30305 30220 + 30305 30226 30309 + 30309 30310 30305 + 30305 30310 30306 + 30311 30306 30310 + 30307 30306 30311 + 30311 30312 30307 + 30307 30312 30308 + 30309 30226 30231 + 30231 30313 30309 + 30314 30309 30313 + 30310 30309 30314 + 30314 30315 30310 + 30310 30315 30311 + 30316 30311 30315 + 30312 30311 30316 + 30316 30317 30312 + 30308 30312 30317 + 30318 30313 30231 + 30313 30318 30319 + 30319 30320 30313 + 30313 30320 30314 + 30231 30230 30318 + 30318 30230 30236 + 30236 30321 30318 + 30319 30318 30321 + 30321 30322 30319 + 30319 30322 30323 + 30323 30324 30319 + 30320 30319 30324 + 30324 30325 30320 + 30314 30320 30325 + 30241 30321 30236 + 30321 30241 30326 + 30326 30322 30321 + 30322 30326 30327 + 30327 30323 30322 + 30323 30327 30328 + 30328 30329 30323 + 30323 30329 30330 + 30330 30324 30323 + 30325 30324 30330 + 30326 30241 30331 + 30331 30332 30326 + 30326 30332 30327 + 30332 30333 30327 + 30328 30327 30333 + 30240 30331 30241 + 30250 30331 30240 + 30332 30331 30250 + 30334 30332 30250 + 30332 30334 30333 + 30334 30335 30333 + 30333 30335 30336 + 30333 30336 30328 + 30328 30336 30337 + 30337 30338 30328 + 30329 30328 30338 + 30334 30250 30339 + 30339 30340 30334 + 30335 30334 30340 + 30341 30335 30340 + 30336 30335 30341 + 30341 30342 30336 + 30336 30342 30337 + 30249 30339 30250 + 30343 30339 30249 + 30339 30343 30344 + 30344 30340 30339 + 30340 30344 30345 + 30345 30341 30340 + 30341 30345 30342 + 30342 30345 30346 + 30346 30337 30342 + 30249 30254 30343 + 30347 30343 30254 + 30344 30343 30347 + 30347 30348 30344 + 30345 30344 30348 + 30348 30349 30345 + 30349 30346 30345 + 30254 30262 30347 + 30350 30347 30262 + 30347 30350 30351 + 30351 30348 30347 + 30348 30351 30352 + 30352 30349 30348 + 30353 30349 30352 + 30349 30353 30346 + 30262 30261 30350 + 30350 30261 30354 + 30354 30355 30350 + 30351 30350 30355 + 30355 30356 30351 + 30352 30351 30356 + 30356 30357 30352 + 30358 30352 30357 + 30352 30358 30353 + 30266 30354 30261 + 30359 30354 30266 + 30354 30359 30360 + 30360 30355 30354 + 30355 30360 30361 + 30361 30356 30355 + 30356 30361 30362 + 30362 30357 30356 + 30363 30357 30362 + 30357 30363 30358 + 30266 30270 30359 + 30359 30270 30364 + 30364 30365 30359 + 30360 30359 30365 + 30365 30366 30360 + 30361 30360 30366 + 30366 30367 30361 + 30361 30367 30368 + 30368 30362 30361 + 30274 30364 30270 + 30369 30364 30274 + 30364 30369 30370 + 30370 30365 30364 + 30365 30370 30371 + 30371 30366 30365 + 30366 30371 30372 + 30372 30367 30366 + 30367 30372 30373 + 30373 30368 30367 + 30274 30278 30369 + 30287 30369 30278 + 30370 30369 30287 + 30287 30374 30370 + 30371 30370 30374 + 30374 30375 30371 + 30372 30371 30375 + 30375 30376 30372 + 30372 30376 30377 + 30377 30373 30372 + 30292 30374 30287 + 30374 30292 30378 + 30378 30375 30374 + 30375 30378 30379 + 30379 30376 30375 + 30376 30379 30380 + 30380 30377 30376 + 30378 30292 30296 + 30296 30381 30378 + 30379 30378 30381 + 30381 30382 30379 + 30379 30382 30383 + 30383 30380 30379 + 30384 30380 30383 + 30377 30380 30384 + 30300 30381 30296 + 30381 30300 30385 + 30385 30382 30381 + 30382 30385 30386 + 30386 30383 30382 + 30383 30386 30387 + 30387 30388 30383 + 30383 30388 30384 + 30385 30300 30304 + 30304 30389 30385 + 30385 30389 30390 + 30390 30386 30385 + 30387 30386 30390 + 30390 30391 30387 + 30387 30391 30392 + 30392 30393 30387 + 30388 30387 30393 + 30308 30389 30304 + 30389 30308 30394 + 30394 30390 30389 + 30391 30390 30394 + 30394 30395 30391 + 30391 30395 30396 + 30396 30392 30391 + 30317 30394 30308 + 30395 30394 30317 + 30317 30397 30395 + 30396 30395 30397 + 30397 30398 30396 + 30399 30396 30398 + 30392 30396 30399 + 30399 30400 30392 + 30392 30400 30401 + 30401 30393 30392 + 30397 30317 30316 + 30316 30402 30397 + 30397 30402 30403 + 30403 30398 30397 + 30404 30398 30403 + 30398 30404 30399 + 30399 30404 30405 + 30405 30406 30399 + 30400 30399 30406 + 30402 30316 30407 + 30407 30408 30402 + 30403 30402 30408 + 30315 30407 30316 + 30409 30407 30315 + 30408 30407 30409 + 30408 30409 30410 + 30410 30411 30408 + 30408 30411 30403 + 30315 30314 30409 + 30410 30409 30314 + 30325 30410 30314 + 30412 30410 30325 + 30411 30410 30412 + 30411 30412 30413 + 30413 30414 30411 + 30411 30414 30403 + 30414 30415 30403 + 30416 30403 30415 + 30403 30416 30404 + 30325 30417 30412 + 30412 30417 30418 + 30418 30413 30412 + 30419 30413 30418 + 30414 30413 30419 + 30419 30420 30414 + 30414 30420 30421 + 30421 30415 30414 + 30330 30417 30325 + 30417 30330 30422 + 30422 30418 30417 + 30423 30418 30422 + 30418 30423 30419 + 30419 30423 30424 + 30424 30425 30419 + 30425 30426 30419 + 30420 30419 30426 + 30427 30422 30330 + 30423 30422 30427 + 30427 30428 30423 + 30423 30428 30424 + 30429 30424 30428 + 30424 30429 30430 + 30424 30430 30431 + 30431 30425 30424 + 30330 30329 30427 + 30338 30427 30329 + 30428 30427 30338 + 30338 30432 30428 + 30428 30432 30429 + 30433 30429 30432 + 30429 30433 30434 + 30430 30429 30434 + 30430 30434 30435 + 30435 30436 30430 + 30436 30431 30430 + 30432 30338 30337 + 30337 30437 30432 + 30432 30437 30433 + 30437 30438 30433 + 30438 30439 30433 + 30440 30433 30439 + 30433 30440 30434 + 30434 30440 30441 + 30441 30435 30434 + 30337 30346 30437 + 30346 30442 30437 + 30437 30442 30443 + 30443 30438 30437 + 30438 30443 30444 + 30438 30444 30445 + 30445 30439 30438 + 30446 30439 30445 + 30439 30446 30440 + 30353 30442 30346 + 30353 30447 30442 + 30447 30443 30442 + 30444 30443 30447 + 30447 30448 30444 + 30444 30448 30449 + 30445 30444 30449 + 30445 30449 30450 + 30451 30445 30450 + 30445 30451 30446 + 30452 30447 30353 + 30448 30447 30452 + 30448 30452 30453 + 30453 30449 30448 + 30450 30449 30453 + 30453 30454 30450 + 30450 30454 30455 + 30455 30456 30450 + 30451 30450 30456 + 30353 30358 30452 + 30452 30358 30363 + 30363 30453 30452 + 30454 30453 30363 + 30363 30457 30454 + 30454 30457 30458 + 30455 30454 30458 + 30458 30459 30455 + 30460 30455 30459 + 30456 30455 30460 + 30362 30457 30363 + 30457 30362 30368 + 30368 30458 30457 + 30458 30368 30373 + 30373 30461 30458 + 30458 30461 30462 + 30462 30459 30458 + 30459 30462 30463 + 30463 30464 30459 + 30459 30464 30460 + 30461 30373 30377 + 30377 30465 30461 + 30462 30461 30465 + 30465 30466 30462 + 30463 30462 30466 + 30384 30465 30377 + 30465 30384 30467 + 30467 30466 30465 + 30468 30466 30467 + 30466 30468 30463 + 30463 30468 30469 + 30469 30470 30463 + 30470 30471 30463 + 30464 30463 30471 + 30472 30467 30384 + 30473 30467 30472 + 30467 30473 30468 + 30468 30473 30474 + 30474 30469 30468 + 30384 30388 30472 + 30393 30472 30388 + 30475 30472 30393 + 30472 30475 30473 + 30474 30473 30475 + 30475 30476 30474 + 30477 30474 30476 + 30469 30474 30477 + 30477 30478 30469 + 30469 30478 30479 + 30479 30470 30469 + 30393 30401 30475 + 30475 30401 30480 + 30480 30476 30475 + 30476 30480 30481 + 30481 30482 30476 + 30476 30482 30477 + 30477 30482 30483 + 30483 30484 30477 + 30478 30477 30484 + 30480 30401 30400 + 30400 30485 30480 + 30481 30480 30485 + 30485 30486 30481 + 30481 30486 30487 + 30482 30481 30487 + 30487 30483 30482 + 30488 30483 30487 + 30483 30488 30489 + 30489 30484 30483 + 30406 30485 30400 + 30485 30406 30486 + 30490 30486 30406 + 30486 30490 30487 + 30490 30491 30487 + 30488 30487 30491 + 30491 30492 30488 + 30488 30492 30421 + 30489 30488 30421 + 30405 30490 30406 + 30490 30405 30493 + 30491 30490 30493 + 30494 30491 30493 + 30491 30494 30495 + 30495 30492 30491 + 30492 30495 30496 + 30496 30421 30492 + 30421 30496 30415 + 30415 30496 30416 + 30493 30405 30404 + 30404 30497 30493 + 30494 30493 30497 + 30495 30494 30497 + 30497 30416 30495 + 30496 30495 30416 + 30416 30497 30404 + 30421 30420 30489 + 30426 30489 30420 + 30489 30426 30498 + 30498 30484 30489 + 30484 30498 30478 + 30479 30478 30498 + 30498 30499 30479 + 30436 30479 30499 + 30479 30436 30470 + 30498 30426 30425 + 30425 30499 30498 + 30425 30431 30499 + 30499 30431 30436 + 30470 30436 30435 + 30435 30471 30470 + 30500 30471 30435 + 30471 30500 30464 + 30460 30464 30500 + 30500 30501 30460 + 30456 30460 30501 + 30435 30441 30500 + 30500 30441 30502 + 30502 30501 30500 + 30502 30503 30501 + 30501 30503 30456 + 30456 30503 30451 + 30451 30503 30502 + 30446 30451 30502 + 30440 30446 30502 + 30502 30441 30440 + 30504 30505 30506 + 30505 30504 30507 + 30507 30508 30505 + 30505 30508 30509 + 30509 30510 30505 + 30505 30510 30511 + 30511 30506 30505 + 30506 30512 30504 + 30513 30504 30512 + 30507 30504 30513 + 30513 30514 30507 + 30515 30507 30514 + 30508 30507 30515 + 30516 30512 30506 + 30512 30516 30517 + 30517 30518 30512 + 30512 30518 30519 + 30519 30513 30512 + 30520 30513 30519 + 30514 30513 30520 + 30516 30506 30511 + 30511 30521 30516 + 30516 30521 30522 + 30522 30523 30516 + 30523 30517 30516 + 30524 30517 30523 + 30518 30517 30524 + 30525 30521 30511 + 30521 30525 30526 + 30526 30522 30521 + 30522 30526 30527 + 30522 30527 30528 + 30528 30523 30522 + 30528 30529 30523 + 30523 30529 30524 + 30511 30530 30525 + 30525 30530 30531 + 30531 30532 30525 + 30526 30525 30532 + 30532 30533 30526 + 30527 30526 30533 + 30530 30511 30510 + 30510 30534 30530 + 30530 30534 30535 + 30535 30536 30530 + 30536 30531 30530 + 30537 30531 30536 + 30537 30532 30531 + 30532 30537 30538 + 30538 30533 30532 + 30534 30510 30509 + 30509 30539 30534 + 30534 30539 30540 + 30540 30541 30534 + 30534 30541 30535 + 30539 30509 30542 + 30542 30543 30539 + 30539 30543 30544 + 30544 30540 30539 + 30545 30540 30544 + 30540 30545 30546 + 30546 30541 30540 + 30542 30509 30508 + 30508 30547 30542 + 30548 30542 30547 + 30543 30542 30548 + 30548 30549 30543 + 30543 30549 30550 + 30550 30544 30543 + 30551 30544 30550 + 30544 30551 30545 + 30515 30547 30508 + 30547 30515 30552 + 30552 30553 30547 + 30547 30553 30548 + 30554 30548 30553 + 30549 30548 30554 + 30554 30555 30549 + 30549 30555 30556 + 30556 30550 30549 + 30552 30515 30557 + 30557 30558 30552 + 30552 30558 30559 + 30559 30560 30552 + 30553 30552 30560 + 30560 30561 30553 + 30553 30561 30554 + 30557 30515 30514 + 30514 30562 30557 + 30563 30557 30562 + 30557 30563 30564 + 30564 30558 30557 + 30558 30564 30565 + 30565 30559 30558 + 30566 30562 30514 + 30562 30566 30567 + 30562 30567 30563 + 30563 30567 30568 + 30568 30569 30563 + 30564 30563 30569 + 30569 30570 30564 + 30565 30564 30570 + 30514 30520 30566 + 30566 30520 30571 + 30571 30572 30566 + 30567 30566 30572 + 30572 30573 30567 + 30567 30573 30568 + 30520 30574 30571 + 30574 30575 30571 + 30576 30571 30575 + 30577 30571 30576 + 30571 30577 30578 + 30578 30572 30571 + 30573 30572 30578 + 30519 30574 30520 + 30574 30519 30579 + 30579 30580 30574 + 30574 30580 30581 + 30581 30575 30574 + 30582 30575 30581 + 30575 30582 30576 + 30583 30576 30582 + 30577 30576 30583 + 30579 30519 30518 + 30518 30584 30579 + 30579 30584 30585 + 30585 30586 30579 + 30580 30579 30586 + 30586 30587 30580 + 30581 30580 30587 + 30524 30584 30518 + 30584 30524 30588 + 30588 30585 30584 + 30585 30588 30589 + 30589 30590 30585 + 30585 30590 30591 + 30591 30586 30585 + 30587 30586 30591 + 30592 30588 30524 + 30589 30588 30592 + 30592 30593 30589 + 30589 30593 30594 + 30594 30595 30589 + 30590 30589 30595 + 30595 30596 30590 + 30591 30590 30596 + 30524 30529 30592 + 30597 30592 30529 + 30592 30597 30598 + 30598 30593 30592 + 30593 30598 30599 + 30599 30594 30593 + 30600 30594 30599 + 30594 30600 30601 + 30601 30595 30594 + 30596 30595 30601 + 30529 30528 30597 + 30602 30597 30528 + 30598 30597 30602 + 30602 30603 30598 + 30598 30603 30604 + 30604 30605 30598 + 30605 30599 30598 + 30600 30599 30605 + 30528 30527 30602 + 30527 30606 30602 + 30606 30607 30602 + 30608 30602 30607 + 30602 30608 30603 + 30608 30609 30603 + 30603 30609 30610 + 30610 30604 30603 + 30533 30606 30527 + 30538 30606 30533 + 30607 30606 30538 + 30611 30607 30538 + 30607 30611 30612 + 30607 30612 30608 + 30608 30612 30613 + 30609 30608 30613 + 30613 30614 30609 + 30609 30614 30615 + 30615 30610 30609 + 30611 30538 30616 + 30616 30617 30611 + 30612 30611 30617 + 30617 30618 30612 + 30612 30618 30613 + 30619 30613 30618 + 30614 30613 30619 + 30538 30537 30616 + 30536 30616 30537 + 30536 30620 30616 + 30616 30620 30621 + 30621 30617 30616 + 30618 30617 30621 + 30618 30621 30619 + 30619 30621 30622 + 30622 30623 30619 + 30624 30619 30623 + 30619 30624 30614 + 30620 30536 30535 + 30535 30622 30620 + 30621 30620 30622 + 30622 30535 30625 + 30625 30626 30622 + 30622 30626 30627 + 30627 30623 30622 + 30628 30623 30627 + 30623 30628 30624 + 30625 30535 30541 + 30541 30546 30625 + 30629 30625 30546 + 30626 30625 30629 + 30629 30630 30626 + 30626 30630 30631 + 30631 30627 30626 + 30632 30627 30631 + 30627 30632 30628 + 30546 30633 30629 + 30634 30629 30633 + 30630 30629 30634 + 30634 30635 30630 + 30630 30635 30636 + 30636 30631 30630 + 30637 30631 30636 + 30631 30637 30632 + 30638 30633 30546 + 30639 30633 30638 + 30633 30639 30634 + 30640 30634 30639 + 30635 30634 30640 + 30640 30641 30635 + 30635 30641 30642 + 30642 30636 30635 + 30546 30545 30638 + 30643 30638 30545 + 30644 30638 30643 + 30638 30644 30639 + 30639 30644 30645 + 30645 30646 30639 + 30639 30646 30640 + 30647 30640 30646 + 30640 30647 30641 + 30545 30551 30643 + 30648 30643 30551 + 30649 30643 30648 + 30643 30649 30644 + 30644 30649 30650 + 30650 30645 30644 + 30651 30645 30650 + 30645 30651 30652 + 30652 30646 30645 + 30646 30652 30647 + 30551 30653 30648 + 30654 30648 30653 + 30655 30648 30654 + 30648 30655 30649 + 30649 30655 30656 + 30656 30650 30649 + 30657 30650 30656 + 30650 30657 30651 + 30550 30653 30551 + 30653 30550 30556 + 30556 30658 30653 + 30653 30658 30654 + 30659 30654 30658 + 30660 30654 30659 + 30654 30660 30655 + 30655 30660 30661 + 30661 30656 30655 + 30662 30656 30661 + 30656 30662 30657 + 30658 30556 30663 + 30663 30664 30658 + 30658 30664 30659 + 30665 30659 30664 + 30666 30659 30665 + 30659 30666 30660 + 30660 30666 30667 + 30667 30661 30660 + 30663 30556 30555 + 30555 30668 30663 + 30663 30668 30669 + 30664 30663 30669 + 30669 30665 30664 + 30665 30669 30670 + 30671 30665 30670 + 30665 30671 30666 + 30671 30667 30666 + 30672 30668 30555 + 30668 30672 30670 + 30670 30669 30668 + 30555 30554 30672 + 30672 30554 30561 + 30561 30673 30672 + 30670 30672 30673 + 30674 30670 30673 + 30670 30674 30671 + 30675 30673 30561 + 30673 30675 30674 + 30674 30675 30676 + 30677 30674 30676 + 30674 30677 30671 + 30561 30560 30675 + 30675 30560 30559 + 30559 30676 30675 + 30678 30676 30559 + 30676 30678 30677 + 30677 30678 30679 + 30680 30677 30679 + 30677 30680 30671 + 30559 30565 30678 + 30678 30565 30681 + 30681 30679 30678 + 30682 30679 30681 + 30679 30682 30680 + 30680 30682 30683 + 30684 30680 30683 + 30680 30684 30671 + 30570 30681 30565 + 30685 30681 30570 + 30681 30685 30682 + 30682 30685 30686 + 30686 30683 30682 + 30687 30683 30686 + 30683 30687 30684 + 30684 30687 30688 + 30689 30684 30688 + 30684 30689 30671 + 30570 30690 30685 + 30685 30690 30691 + 30691 30686 30685 + 30692 30686 30691 + 30686 30692 30687 + 30687 30692 30693 + 30693 30688 30687 + 30694 30688 30693 + 30688 30694 30689 + 30690 30570 30569 + 30569 30695 30690 + 30690 30695 30696 + 30696 30691 30690 + 30691 30696 30697 + 30697 30698 30691 + 30691 30698 30692 + 30693 30692 30698 + 30695 30569 30568 + 30568 30699 30695 + 30695 30699 30700 + 30700 30696 30695 + 30697 30696 30700 + 30700 30701 30697 + 30697 30701 30702 + 30702 30703 30697 + 30698 30697 30703 + 30699 30568 30704 + 30704 30705 30699 + 30699 30705 30706 + 30706 30700 30699 + 30701 30700 30706 + 30706 30707 30701 + 30701 30707 30708 + 30708 30702 30701 + 30704 30568 30573 + 30573 30578 30704 + 30709 30704 30578 + 30705 30704 30709 + 30709 30710 30705 + 30706 30705 30710 + 30710 30711 30706 + 30707 30706 30711 + 30711 30712 30707 + 30708 30707 30712 + 30578 30577 30709 + 30577 30713 30709 + 30714 30709 30713 + 30709 30714 30715 + 30715 30710 30709 + 30710 30715 30716 + 30716 30711 30710 + 30711 30716 30717 + 30717 30712 30711 + 30583 30713 30577 + 30718 30713 30583 + 30713 30718 30714 + 30714 30718 30719 + 30719 30720 30714 + 30715 30714 30720 + 30720 30721 30715 + 30716 30715 30721 + 30721 30722 30716 + 30717 30716 30722 + 30718 30583 30723 + 30723 30724 30718 + 30718 30724 30719 + 30725 30719 30724 + 30725 30726 30719 + 30719 30726 30727 + 30727 30720 30719 + 30721 30720 30727 + 30582 30723 30583 + 30582 30728 30723 + 30728 30729 30723 + 30723 30729 30724 + 30729 30730 30724 + 30724 30730 30725 + 30725 30730 30731 + 30731 30732 30725 + 30726 30725 30732 + 30581 30728 30582 + 30728 30581 30733 + 30733 30734 30728 + 30734 30729 30728 + 30730 30729 30734 + 30734 30731 30730 + 30735 30731 30734 + 30731 30735 30736 + 30736 30732 30731 + 30587 30733 30581 + 30735 30733 30587 + 30734 30733 30735 + 30587 30737 30735 + 30735 30737 30738 + 30738 30736 30735 + 30736 30738 30739 + 30740 30736 30739 + 30732 30736 30740 + 30740 30741 30732 + 30732 30741 30726 + 30591 30737 30587 + 30737 30591 30742 + 30742 30738 30737 + 30739 30738 30742 + 30743 30739 30742 + 30739 30743 30744 + 30744 30745 30739 + 30740 30739 30745 + 30745 30746 30740 + 30741 30740 30746 + 30596 30742 30591 + 30742 30596 30747 + 30743 30742 30747 + 30743 30747 30748 + 30748 30744 30743 + 30749 30744 30748 + 30745 30744 30749 + 30749 30750 30745 + 30745 30750 30751 + 30751 30746 30745 + 30601 30747 30596 + 30747 30601 30752 + 30752 30748 30747 + 30748 30752 30753 + 30753 30754 30748 + 30748 30754 30749 + 30755 30749 30754 + 30750 30749 30755 + 30756 30752 30601 + 30753 30752 30756 + 30756 30757 30753 + 30758 30753 30757 + 30754 30753 30758 + 30758 30759 30754 + 30754 30759 30755 + 30601 30600 30756 + 30600 30760 30756 + 30761 30756 30760 + 30756 30761 30762 + 30762 30757 30756 + 30757 30762 30763 + 30763 30758 30757 + 30758 30763 30642 + 30759 30758 30642 + 30605 30760 30600 + 30764 30760 30605 + 30760 30764 30761 + 30765 30761 30764 + 30762 30761 30765 + 30765 30766 30762 + 30763 30762 30766 + 30766 30767 30763 + 30642 30763 30767 + 30767 30636 30642 + 30636 30767 30637 + 30764 30605 30604 + 30604 30768 30764 + 30764 30768 30765 + 30768 30769 30765 + 30770 30765 30769 + 30765 30770 30771 + 30771 30766 30765 + 30766 30771 30637 + 30637 30767 30766 + 30768 30604 30610 + 30768 30610 30615 + 30615 30769 30768 + 30615 30772 30769 + 30769 30772 30770 + 30770 30772 30624 + 30624 30628 30770 + 30771 30770 30628 + 30628 30632 30771 + 30637 30771 30632 + 30772 30615 30614 + 30614 30624 30772 + 30642 30773 30759 + 30773 30642 30774 + 30774 30775 30773 + 30776 30773 30775 + 30759 30773 30776 + 30776 30755 30759 + 30641 30774 30642 + 30777 30774 30641 + 30774 30777 30778 + 30778 30775 30774 + 30775 30778 30712 + 30712 30717 30775 + 30775 30717 30776 + 30722 30776 30717 + 30755 30776 30722 + 30641 30647 30777 + 30777 30647 30652 + 30652 30779 30777 + 30778 30777 30779 + 30779 30708 30778 + 30712 30778 30708 + 30780 30779 30652 + 30708 30779 30780 + 30780 30702 30708 + 30702 30780 30781 + 30781 30703 30702 + 30652 30651 30780 + 30781 30780 30651 + 30651 30657 30781 + 30782 30781 30657 + 30703 30781 30782 + 30782 30783 30703 + 30703 30783 30698 + 30698 30783 30693 + 30784 30693 30783 + 30693 30784 30694 + 30657 30662 30782 + 30784 30782 30662 + 30783 30782 30784 + 30662 30785 30784 + 30694 30784 30785 + 30785 30786 30694 + 30689 30694 30786 + 30671 30689 30786 + 30786 30667 30671 + 30661 30785 30662 + 30785 30661 30667 + 30667 30786 30785 + 30722 30787 30755 + 30787 30722 30721 + 30721 30788 30787 + 30750 30787 30788 + 30755 30787 30750 + 30727 30788 30721 + 30788 30727 30789 + 30789 30751 30788 + 30788 30751 30750 + 30727 30726 30789 + 30726 30741 30789 + 30746 30789 30741 + 30751 30789 30746 + 30790 30791 30792 + 30791 30790 30793 + 30791 30793 30794 + 30794 30795 30791 + 30791 30795 30796 + 30796 30792 30791 + 30792 30797 30790 + 30798 30790 30797 + 30793 30790 30798 + 30798 30799 30793 + 30794 30793 30799 + 30797 30792 30800 + 30800 30801 30797 + 30797 30801 30802 + 30802 30803 30797 + 30797 30803 30804 + 30804 30798 30797 + 30800 30792 30796 + 30796 30805 30800 + 30806 30800 30805 + 30801 30800 30806 + 30806 30807 30801 + 30801 30807 30808 + 30808 30809 30801 + 30809 30802 30801 + 30810 30805 30796 + 30805 30810 30811 + 30811 30812 30805 + 30805 30812 30806 + 30813 30806 30812 + 30807 30806 30813 + 30796 30814 30810 + 30810 30814 30815 + 30815 30816 30810 + 30811 30810 30816 + 30816 30817 30811 + 30818 30811 30817 + 30812 30811 30818 + 30814 30796 30795 + 30795 30819 30814 + 30815 30814 30819 + 30819 30795 30794 + 30794 30820 30819 + 30819 30820 30821 + 30821 30822 30819 + 30819 30822 30815 + 30820 30794 30823 + 30823 30824 30820 + 30820 30824 30825 + 30825 30821 30820 + 30826 30821 30825 + 30822 30821 30826 + 30827 30823 30794 + 30828 30823 30827 + 30828 30824 30823 + 30824 30828 30829 + 30829 30825 30824 + 30825 30829 30830 + 30825 30830 30826 + 30799 30827 30794 + 30831 30827 30799 + 30827 30831 30832 + 30827 30832 30828 + 30828 30832 30833 + 30829 30828 30833 + 30834 30829 30833 + 30830 30829 30834 + 30799 30835 30831 + 30831 30835 30836 + 30836 30837 30831 + 30832 30831 30837 + 30837 30833 30832 + 30838 30835 30799 + 30835 30838 30839 + 30839 30836 30835 + 30836 30839 30840 + 30840 30841 30836 + 30836 30841 30842 + 30842 30837 30836 + 30833 30837 30842 + 30799 30798 30838 + 30838 30798 30804 + 30804 30843 30838 + 30838 30843 30844 + 30844 30839 30838 + 30840 30839 30844 + 30844 30845 30840 + 30840 30845 30846 + 30846 30847 30840 + 30841 30840 30847 + 30848 30843 30804 + 30843 30848 30849 + 30849 30844 30843 + 30844 30849 30850 + 30850 30845 30844 + 30845 30850 30851 + 30851 30846 30845 + 30804 30852 30848 + 30848 30852 30853 + 30853 30854 30848 + 30848 30854 30855 + 30855 30849 30848 + 30850 30849 30855 + 30852 30804 30803 + 30803 30856 30852 + 30853 30852 30856 + 30856 30857 30853 + 30857 30858 30853 + 30858 30859 30853 + 30860 30853 30859 + 30853 30860 30854 + 30856 30803 30802 + 30856 30802 30809 + 30809 30857 30856 + 30861 30857 30809 + 30857 30861 30862 + 30862 30858 30857 + 30863 30858 30862 + 30858 30863 30864 + 30864 30859 30858 + 30865 30859 30864 + 30859 30865 30860 + 30861 30809 30808 + 30808 30866 30861 + 30862 30861 30866 + 30866 30867 30862 + 30867 30868 30862 + 30863 30862 30868 + 30868 30869 30863 + 30863 30869 30870 + 30870 30864 30863 + 30865 30864 30870 + 30866 30808 30871 + 30871 30872 30866 + 30866 30872 30873 + 30873 30867 30866 + 30874 30867 30873 + 30867 30874 30875 + 30875 30868 30867 + 30871 30808 30807 + 30807 30876 30871 + 30871 30876 30877 + 30877 30878 30871 + 30872 30871 30878 + 30878 30879 30872 + 30872 30879 30880 + 30880 30873 30872 + 30813 30876 30807 + 30876 30813 30881 + 30881 30877 30876 + 30877 30881 30882 + 30882 30883 30877 + 30877 30883 30884 + 30884 30878 30877 + 30879 30878 30884 + 30881 30813 30885 + 30885 30886 30881 + 30882 30881 30886 + 30886 30887 30882 + 30882 30887 30888 + 30883 30882 30888 + 30888 30889 30883 + 30884 30883 30889 + 30812 30885 30813 + 30818 30885 30812 + 30885 30818 30890 + 30890 30886 30885 + 30886 30890 30891 + 30891 30887 30886 + 30887 30891 30892 + 30892 30888 30887 + 30889 30888 30892 + 30893 30889 30892 + 30889 30893 30894 + 30894 30884 30889 + 30884 30894 30879 + 30890 30818 30895 + 30895 30896 30890 + 30891 30890 30896 + 30896 30897 30891 + 30892 30891 30897 + 30898 30892 30897 + 30892 30898 30893 + 30817 30895 30818 + 30899 30895 30817 + 30895 30899 30900 + 30900 30896 30895 + 30896 30900 30901 + 30901 30897 30896 + 30897 30901 30898 + 30901 30902 30898 + 30903 30898 30902 + 30898 30903 30893 + 30817 30904 30899 + 30899 30904 30905 + 30905 30906 30899 + 30900 30899 30906 + 30906 30907 30900 + 30901 30900 30907 + 30907 30902 30901 + 30908 30902 30907 + 30902 30908 30903 + 30904 30817 30816 + 30816 30909 30904 + 30904 30909 30910 + 30910 30905 30904 + 30911 30905 30910 + 30905 30911 30912 + 30912 30906 30905 + 30906 30912 30913 + 30913 30907 30906 + 30907 30913 30908 + 30909 30816 30815 + 30815 30914 30909 + 30909 30914 30915 + 30915 30910 30909 + 30916 30910 30915 + 30910 30916 30911 + 30911 30916 30917 + 30917 30918 30911 + 30912 30911 30918 + 30914 30815 30919 + 30919 30920 30914 + 30915 30914 30920 + 30920 30921 30915 + 30922 30915 30921 + 30915 30922 30916 + 30916 30922 30923 + 30923 30917 30916 + 30924 30919 30815 + 30925 30919 30924 + 30919 30925 30926 + 30926 30920 30919 + 30920 30926 30927 + 30927 30921 30920 + 30822 30924 30815 + 30928 30924 30822 + 30928 30929 30924 + 30924 30929 30925 + 30930 30925 30929 + 30926 30925 30930 + 30930 30931 30926 + 30927 30926 30931 + 30822 30826 30928 + 30932 30928 30826 + 30929 30928 30932 + 30932 30933 30929 + 30929 30933 30930 + 30933 30934 30930 + 30935 30930 30934 + 30930 30935 30936 + 30936 30931 30930 + 30826 30830 30932 + 30830 30937 30932 + 30932 30937 30938 + 30939 30932 30938 + 30933 30932 30939 + 30933 30939 30940 + 30940 30934 30933 + 30941 30934 30940 + 30934 30941 30935 + 30834 30937 30830 + 30938 30937 30834 + 30938 30834 30942 + 30942 30943 30938 + 30939 30938 30943 + 30940 30939 30943 + 30940 30943 30944 + 30945 30940 30944 + 30940 30945 30941 + 30833 30942 30834 + 30946 30942 30833 + 30943 30942 30946 + 30946 30944 30943 + 30944 30946 30947 + 30947 30948 30944 + 30948 30949 30944 + 30949 30945 30944 + 30941 30945 30949 + 30949 30950 30941 + 30935 30941 30950 + 30833 30951 30946 + 30946 30951 30952 + 30952 30953 30946 + 30953 30947 30946 + 30954 30947 30953 + 30948 30947 30954 + 30948 30954 30955 + 30955 30949 30948 + 30955 30950 30949 + 30842 30951 30833 + 30951 30842 30956 + 30956 30952 30951 + 30952 30956 30957 + 30952 30957 30958 + 30958 30953 30952 + 30953 30958 30959 + 30953 30959 30954 + 30954 30959 30960 + 30955 30954 30960 + 30961 30956 30842 + 30957 30956 30961 + 30961 30962 30957 + 30957 30962 30963 + 30958 30957 30963 + 30963 30964 30958 + 30959 30958 30964 + 30964 30960 30959 + 30842 30841 30961 + 30847 30961 30841 + 30961 30847 30962 + 30847 30965 30962 + 30962 30965 30966 + 30966 30963 30962 + 30963 30966 30967 + 30967 30968 30963 + 30963 30968 30969 + 30969 30964 30963 + 30960 30964 30969 + 30965 30847 30846 + 30846 30970 30965 + 30965 30970 30971 + 30971 30966 30965 + 30967 30966 30971 + 30971 30972 30967 + 30973 30967 30972 + 30968 30967 30973 + 30973 30974 30968 + 30969 30968 30974 + 30846 30851 30970 + 30851 30975 30970 + 30970 30975 30971 + 30975 30976 30971 + 30971 30976 30977 + 30977 30972 30971 + 30972 30977 30978 + 30978 30979 30972 + 30972 30979 30973 + 30975 30851 30980 + 30980 30981 30975 + 30975 30981 30982 + 30982 30976 30975 + 30977 30976 30982 + 30982 30983 30977 + 30978 30977 30983 + 30980 30851 30850 + 30850 30984 30980 + 30985 30980 30984 + 30980 30985 30981 + 30985 30986 30981 + 30981 30986 30982 + 30986 30987 30982 + 30982 30987 30983 + 30855 30984 30850 + 30988 30984 30855 + 30984 30988 30985 + 30985 30988 30989 + 30989 30990 30985 + 30985 30990 30991 + 30986 30985 30991 + 30986 30991 30992 + 30987 30986 30992 + 30983 30987 30992 + 30855 30993 30988 + 30988 30993 30994 + 30994 30989 30988 + 30995 30989 30994 + 30989 30995 30996 + 30996 30990 30989 + 30996 30991 30990 + 30991 30996 30997 + 30997 30992 30991 + 30993 30855 30854 + 30854 30998 30993 + 30998 30994 30993 + 30999 30994 30998 + 30994 30999 30995 + 30995 30999 31000 + 31000 31001 30995 + 30996 30995 31001 + 30997 30996 31001 + 30860 30998 30854 + 30998 30860 30999 + 30999 30860 30865 + 30865 31000 30999 + 30870 31000 30865 + 31000 30870 31001 + 31001 30870 31002 + 31002 31003 31001 + 31001 31003 30997 + 31004 30997 31003 + 30997 31004 31005 + 31005 30992 30997 + 30992 31005 30983 + 30983 31005 30978 + 30869 31002 30870 + 31006 31002 30869 + 31002 31006 31007 + 31003 31002 31007 + 31003 31007 31004 + 31008 31004 31007 + 31005 31004 31008 + 31008 30978 31005 + 30978 31008 31009 + 31009 30979 30978 + 30869 31010 31006 + 31011 31006 31010 + 31007 31006 31011 + 31011 31012 31007 + 31007 31012 31008 + 31009 31008 31012 + 31012 31013 31009 + 31014 31009 31013 + 30979 31009 31014 + 31014 30973 30979 + 31010 30869 30868 + 30868 30875 31010 + 31010 30875 31015 + 31015 31016 31010 + 31010 31016 31011 + 31017 31011 31016 + 31012 31011 31017 + 31017 31013 31012 + 31013 31017 31018 + 31018 31019 31013 + 31013 31019 31014 + 31020 31015 30875 + 31021 31015 31020 + 31015 31021 31022 + 31022 31016 31015 + 31016 31022 31017 + 31018 31017 31022 + 31022 31023 31018 + 31024 31018 31023 + 31019 31018 31024 + 30875 30874 31020 + 31025 31020 30874 + 31020 31025 31026 + 31026 31027 31020 + 31020 31027 31021 + 31021 31027 31028 + 31028 31029 31021 + 31022 31021 31029 + 31029 31023 31022 + 30874 31030 31025 + 31031 31025 31030 + 31026 31025 31031 + 31031 31032 31026 + 31033 31026 31032 + 31027 31026 31033 + 31033 31028 31027 + 30873 31030 30874 + 31030 30873 30880 + 30880 31034 31030 + 31030 31034 31031 + 31035 31031 31034 + 31032 31031 31035 + 31035 31036 31032 + 31032 31036 31037 + 31037 31038 31032 + 31032 31038 31033 + 31034 30880 31039 + 31039 31040 31034 + 31034 31040 31035 + 31035 31040 31041 + 31036 31035 31041 + 31041 31042 31036 + 31037 31036 31042 + 31039 30880 30879 + 30879 30894 31039 + 31039 30894 30893 + 31040 31039 30893 + 30893 31041 31040 + 31042 31041 30893 + 31043 31042 30893 + 31042 31043 31044 + 31044 31037 31042 + 31037 31044 31045 + 31045 31038 31037 + 31038 31045 31046 + 31046 31033 31038 + 31033 31046 31047 + 31047 31028 31033 + 30903 31043 30893 + 31043 30903 31048 + 31048 31049 31043 + 31049 31044 31043 + 31045 31044 31049 + 31049 31050 31045 + 31046 31045 31050 + 31050 31051 31046 + 31047 31046 31051 + 30908 31048 30903 + 31052 31048 30908 + 31049 31048 31052 + 31052 31050 31049 + 31050 31052 31053 + 31053 31051 31050 + 31051 31053 30918 + 30918 31054 31051 + 31051 31054 31047 + 31055 31047 31054 + 31028 31047 31055 + 31055 31029 31028 + 30908 30913 31052 + 31053 31052 30913 + 30913 30912 31053 + 30918 31053 30912 + 31054 30918 30917 + 30917 31056 31054 + 31054 31056 31055 + 31057 31055 31056 + 31029 31055 31057 + 31057 31023 31029 + 31023 31057 31024 + 31056 30917 30923 + 30923 31058 31056 + 31056 31058 31057 + 31057 31058 31059 + 31059 31024 31057 + 31060 31024 31059 + 31024 31060 31019 + 31019 31060 31061 + 31061 31014 31019 + 31058 30923 31062 + 31062 31059 31058 + 31063 31059 31062 + 31059 31063 31060 + 31060 31063 31064 + 31064 31065 31060 + 31065 31061 31060 + 31066 31061 31065 + 31014 31061 31066 + 31067 31062 30923 + 31063 31062 31067 + 31067 31064 31063 + 31064 31067 30921 + 30921 30927 31064 + 31064 30927 31068 + 31068 31065 31064 + 31069 31065 31068 + 31065 31069 31066 + 30923 30922 31067 + 30921 31067 30922 + 30931 31068 30927 + 31070 31068 30931 + 31068 31070 31069 + 31069 31070 31071 + 31071 31072 31069 + 31069 31072 31073 + 31073 31066 31069 + 30974 31066 31073 + 31066 30974 31014 + 30974 30973 31014 + 30931 30936 31070 + 30936 31071 31070 + 31074 31071 30936 + 31072 31071 31074 + 31074 31075 31072 + 31072 31075 30960 + 30960 31073 31072 + 30969 31073 30960 + 31073 30969 30974 + 30936 30935 31074 + 30950 31074 30935 + 31075 31074 30950 + 30950 30955 31075 + 30960 31075 30955 +} diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/WoodCrate01.dds b/Chapter 16 Instancing and Frustum Culling/Textures/WoodCrate01.dds new file mode 100644 index 0000000..63abd5a Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/WoodCrate01.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/bricks.dds b/Chapter 16 Instancing and Frustum Culling/Textures/bricks.dds new file mode 100644 index 0000000..60fe972 Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/bricks.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/grass.dds b/Chapter 16 Instancing and Frustum Culling/Textures/grass.dds new file mode 100644 index 0000000..3088c1a Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/grass.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/ice.dds b/Chapter 16 Instancing and Frustum Culling/Textures/ice.dds new file mode 100644 index 0000000..7bb0f0a Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/ice.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/stone.dds b/Chapter 16 Instancing and Frustum Culling/Textures/stone.dds new file mode 100644 index 0000000..cc02ee3 Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/stone.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/tile.dds b/Chapter 16 Instancing and Frustum Culling/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/tile.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/Textures/white1x1.dds b/Chapter 16 Instancing and Frustum Culling/Textures/white1x1.dds new file mode 100644 index 0000000..54df118 Binary files /dev/null and b/Chapter 16 Instancing and Frustum Culling/Textures/white1x1.dds differ diff --git a/Chapter 16 Instancing and Frustum Culling/d3dUtil.h b/Chapter 16 Instancing and Frustum Culling/d3dUtil.h new file mode 100644 index 0000000..ebddb5e --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/d3dUtil.h @@ -0,0 +1,164 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; +// �Ƿ�����׶���޳� +static bool g_openFrustumCull = true; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; + UINT ObjPad0; + UINT ObjPad1; + UINT ObjPad2; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; + UINT MaterialPad0; // ռλ����16�ֽڶ��� + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z, float nx, float ny, float nz, float u, float v) : + Pos(x, y, z), + Normal(nx, ny, nz), + TexC(u, v) {} + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; + Math::Vector3 vMin; + Math::Vector3 vMax; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + RenderItem() = default; + ~RenderItem() + { + matrixs.Destroy(); + } + + std::string name; + + int visibileCount = 0; // ���Ƶ����� �ھ�ͷ�е����� + int allCount = 0; // ������ + + std::vector vDrawObjs; // ��Ҫ���Ƶ�Ŀ������λ�� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� + + std::vector vObjsData; + StructuredBuffer matrixs; // t0 �洢�����һЩ�����Լ���������id + + Math::Vector3 vMin; + Math::Vector3 vMax; +}; \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/main.cpp b/Chapter 16 Instancing and Frustum Culling/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 16 Instancing and Frustum Culling/packages.config b/Chapter 16 Instancing and Frustum Culling/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 16 Instancing and Frustum Culling/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 17 Picking/Chapter 17 Picking.vcxproj b/Chapter 17 Picking/Chapter 17 Picking.vcxproj new file mode 100644 index 0000000..207c7da --- /dev/null +++ b/Chapter 17 Picking/Chapter 17 Picking.vcxproj @@ -0,0 +1,537 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {DC86DA3F-B166-464B-8147-BC18A9FA18DE} + Chapter17Picking + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + Pixel + Pixel + + + Vertex + Vertex + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 17 Picking/Chapter 17 Picking.vcxproj.filters b/Chapter 17 Picking/Chapter 17 Picking.vcxproj.filters new file mode 100644 index 0000000..50649e5 --- /dev/null +++ b/Chapter 17 Picking/Chapter 17 Picking.vcxproj.filters @@ -0,0 +1,955 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 17 Picking/Core/CameraController.cpp b/Chapter 17 Picking/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 17 Picking/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 17 Picking/Core/CameraController.h b/Chapter 17 Picking/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 17 Picking/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 17 Picking/Core/EngineProfiling.cpp b/Chapter 17 Picking/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 17 Picking/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 17 Picking/Core/EngineProfiling.h b/Chapter 17 Picking/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 17 Picking/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 17 Picking/Core/EngineTuning.cpp b/Chapter 17 Picking/Core/EngineTuning.cpp new file mode 100644 index 0000000..aa8bba5 --- /dev/null +++ b/Chapter 17 Picking/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, (float)log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp((float)log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return (float)exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 17 Picking/Core/EngineTuning.h b/Chapter 17 Picking/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 17 Picking/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 17 Picking/Core/FileUtility.cpp b/Chapter 17 Picking/Core/FileUtility.cpp new file mode 100644 index 0000000..78ee5bf --- /dev/null +++ b/Chapter 17 Picking/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (unsigned char*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (unsigned char*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 17 Picking/Core/FileUtility.h b/Chapter 17 Picking/Core/FileUtility.h new file mode 100644 index 0000000..999b030 --- /dev/null +++ b/Chapter 17 Picking/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 17 Picking/Core/Fonts/consola24.h b/Chapter 17 Picking/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 17 Picking/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 17 Picking/Core/GameCore.cpp b/Chapter 17 Picking/Core/GameCore.cpp new file mode 100644 index 0000000..8ac190f --- /dev/null +++ b/Chapter 17 Picking/Core/GameCore.cpp @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_MOUSEMOVE: + GameInput::OnMouseMove(wParam, LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 17 Picking/Core/GameCore.h b/Chapter 17 Picking/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 17 Picking/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/GameInput.cpp b/Chapter 17 Picking/Core/GameInput.cpp new file mode 100644 index 0000000..733b0a1 --- /dev/null +++ b/Chapter 17 Picking/Core/GameInput.cpp @@ -0,0 +1,595 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + + int s_Mouse_X; + int s_Mouse_Y; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +void GameInput::OnMouseMove(WPARAM btnState, int x, int y) +{ + s_Mouse_X = x; + s_Mouse_Y = y; +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} + +POINT GameInput::GetCurPos() +{ + return { s_Mouse_X, s_Mouse_Y }; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/GameInput.h b/Chapter 17 Picking/Core/GameInput.h new file mode 100644 index 0000000..649b1df --- /dev/null +++ b/Chapter 17 Picking/Core/GameInput.h @@ -0,0 +1,198 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + void OnMouseMove(WPARAM btnState, int x, int y); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + + POINT GetCurPos(); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 17 Picking/Core/Graphics/Camera.cpp b/Chapter 17 Picking/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..486a16f --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Camera.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::Update() +{ + BaseCamera::Update(); + + m_FrustumVS = Frustum(m_ProjMatrix, m_NearClip / m_FarClip); + m_FrustumWS = m_CameraToWorld * m_FrustumVS; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/Camera.h b/Chapter 17 Picking/Core/Graphics/Camera.h new file mode 100644 index 0000000..c093908 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Camera.h @@ -0,0 +1,148 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + virtual void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + const Vector3 GetForwardVec() const { return -m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + const Frustum& GetViewSpaceFrustum() const { return m_FrustumVS; } + const Frustum& GetWorldSpaceFrustum() const { return m_FrustumWS; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + + // ��׶����� + Frustum m_FrustumVS; // View-space view frustum + Frustum m_FrustumWS; // World-space view frustum + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + virtual void Update() override; + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Graphics/Color.cpp b/Chapter 17 Picking/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 17 Picking/Core/Graphics/Color.h b/Chapter 17 Picking/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandContext.cpp b/Chapter 17 Picking/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..d4dc1b3 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,616 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandContext.h b/Chapter 17 Picking/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..ec9477c --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,761 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.cpp b/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.h b/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Command/readme_command.txt b/Chapter 17 Picking/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 17 Picking/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/GpuTimeManager.cpp b/Chapter 17 Picking/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..35e5eea --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + // ���������������������shader�����˵��µ� + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 17 Picking/Core/Graphics/GpuTimeManager.h b/Chapter 17 Picking/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 17 Picking/Core/Graphics/GraphicsCommon.cpp b/Chapter 17 Picking/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 17 Picking/Core/Graphics/GraphicsCommon.h b/Chapter 17 Picking/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 17 Picking/Core/Graphics/GraphicsCore.cpp b/Chapter 17 Picking/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/GraphicsCore.h b/Chapter 17 Picking/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.h b/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.h b/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 17 Picking/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 17 Picking/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.h b/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.cpp b/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..0a1d6be --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.h b/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..1c94d8f --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/EsramAllocator.h b/Chapter 17 Picking/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 17 Picking/Core/Graphics/Resource/GpuResource.h b/Chapter 17 Picking/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.h b/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 17 Picking/Core/Graphics/Resource/readme_resource.txt b/Chapter 17 Picking/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..f8e3414 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,73 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.cpp b/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.h b/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 17 Picking/Core/Graphics/Texture/dds.h b/Chapter 17 Picking/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 17 Picking/Core/Graphics/d3dx12.h b/Chapter 17 Picking/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 17 Picking/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 17 Picking/Core/Hash.h b/Chapter 17 Picking/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 17 Picking/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 17 Picking/Core/Math/BoundingPlane.h b/Chapter 17 Picking/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 17 Picking/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Math/BoundingSphere.h b/Chapter 17 Picking/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Math/Common.h b/Chapter 17 Picking/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 17 Picking/Core/Math/Frustum.cpp b/Chapter 17 Picking/Core/Math/Frustum.cpp new file mode 100644 index 0000000..c38f478 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Frustum.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + // �Ѹ�Ϊ��������ϵ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // ��׶�壬�����Զ�������4������ + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = NVy * VTan; + + // ������׶���6���棬�洢���Ƿ������Լ����ϵ�һ���� + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // TODO ���޸�Ϊ��������ϵ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum(const Matrix4& ProjMat, float NearDivFar) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / NearDivFar; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // TODO ���޸�Ϊ��������ϵ + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // ���޸�Ϊ��������ϵ + // Perspective + float NearClip, FarClip; + + FarClip = -ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 17 Picking/Core/Math/Frustum.h b/Chapter 17 Picking/Core/Math/Frustum.h new file mode 100644 index 0000000..86211a8 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix, float NearDivFar); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Math/Functions.inl b/Chapter 17 Picking/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Math/Matrix3.h b/Chapter 17 Picking/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Math/Matrix4.h b/Chapter 17 Picking/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 17 Picking/Core/Math/Quaternion.h b/Chapter 17 Picking/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 17 Picking/Core/Math/Random.cpp b/Chapter 17 Picking/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 17 Picking/Core/Math/Random.h b/Chapter 17 Picking/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 17 Picking/Core/Math/Scalar.h b/Chapter 17 Picking/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Math/Transform.h b/Chapter 17 Picking/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 17 Picking/Core/Math/Vector.h b/Chapter 17 Picking/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 17 Picking/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 17 Picking/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 17 Picking/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 17 Picking/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 17 Picking/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 17 Picking/Core/Shaders/AoRender1CS.hlsl b/Chapter 17 Picking/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoRender2CS.hlsl b/Chapter 17 Picking/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/AoRenderCS.hlsli b/Chapter 17 Picking/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 17 Picking/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 17 Picking/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 17 Picking/Core/Shaders/AverageLumaCS.hlsl b/Chapter 17 Picking/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 17 Picking/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 17 Picking/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 17 Picking/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 17 Picking/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 17 Picking/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 17 Picking/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 17 Picking/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 17 Picking/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 17 Picking/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 17 Picking/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 17 Picking/Core/Shaders/BlurCS.hlsl b/Chapter 17 Picking/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 17 Picking/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 17 Picking/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 17 Picking/Core/Shaders/BufferCopyPS.hlsl b/Chapter 17 Picking/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 17 Picking/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 17 Picking/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 17 Picking/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 17 Picking/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 17 Picking/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 17 Picking/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 17 Picking/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DoFCombineCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFCommon.hlsli b/Chapter 17 Picking/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 17 Picking/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DoFPass1CS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPass2CS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFRS.hlsli b/Chapter 17 Picking/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 17 Picking/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 17 Picking/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 17 Picking/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 17 Picking/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 17 Picking/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 17 Picking/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 17 Picking/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 17 Picking/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 17 Picking/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 17 Picking/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 17 Picking/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 17 Picking/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/FXAARootSignature.hlsli b/Chapter 17 Picking/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 17 Picking/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 17 Picking/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 17 Picking/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 17 Picking/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 17 Picking/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 17 Picking/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 17 Picking/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 17 Picking/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 17 Picking/Core/Shaders/MotionBlurRS.hlsli b/Chapter 17 Picking/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticlePS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleRS.hlsli b/Chapter 17 Picking/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 17 Picking/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 17 Picking/Core/Shaders/ParticleUtility.hlsli b/Chapter 17 Picking/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 17 Picking/Core/Shaders/ParticleVS.hlsl b/Chapter 17 Picking/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 17 Picking/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 17 Picking/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 17 Picking/Core/Shaders/PerfGraphPS.hlsl b/Chapter 17 Picking/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 17 Picking/Core/Shaders/PerfGraphRS.hlsli b/Chapter 17 Picking/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 17 Picking/Core/Shaders/PerfGraphVS.hlsl b/Chapter 17 Picking/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 17 Picking/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/PostEffectsRS.hlsli b/Chapter 17 Picking/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 17 Picking/Core/Shaders/PresentHDRPS.hlsl b/Chapter 17 Picking/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 17 Picking/Core/Shaders/PresentRS.hlsli b/Chapter 17 Picking/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 17 Picking/Core/Shaders/PresentSDRPS.hlsl b/Chapter 17 Picking/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 17 Picking/Core/Shaders/ResolveTAACS.hlsl b/Chapter 17 Picking/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 17 Picking/Core/Shaders/SSAORS.hlsli b/Chapter 17 Picking/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 17 Picking/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 17 Picking/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 17 Picking/Core/Shaders/ShaderUtility.hlsli b/Chapter 17 Picking/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/SharpenTAACS.hlsl b/Chapter 17 Picking/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 17 Picking/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 17 Picking/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 17 Picking/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 17 Picking/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 17 Picking/Core/Shaders/TemporalRS.hlsli b/Chapter 17 Picking/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 17 Picking/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 17 Picking/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 17 Picking/Core/Shaders/TextRS.hlsli b/Chapter 17 Picking/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 17 Picking/Core/Shaders/TextShadowPS.hlsl b/Chapter 17 Picking/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 17 Picking/Core/Shaders/TextVS.hlsl b/Chapter 17 Picking/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 17 Picking/Core/Shaders/ToneMap2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ToneMapCS.hlsl b/Chapter 17 Picking/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 17 Picking/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 17 Picking/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 17 Picking/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 17 Picking/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 17 Picking/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 17 Picking/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 17 Picking/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 17 Picking/Core/Shaders/default/LightingUtil.hlsl b/Chapter 17 Picking/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 17 Picking/Core/Shaders/default/bezierDS.hlsl b/Chapter 17 Picking/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 17 Picking/Core/Shaders/default/bezierHS.hlsl b/Chapter 17 Picking/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 17 Picking/Core/Shaders/default/bezierPS.hlsl b/Chapter 17 Picking/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/bezierVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/billboardGS.hlsl b/Chapter 17 Picking/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/billboardPS.hlsl b/Chapter 17 Picking/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/billboardVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/blurVertCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/compositeCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/defaultPS.hlsl b/Chapter 17 Picking/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/defaultVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..b09711b --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,121 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; + float Mpad1; // ռλ�� + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t1); + +Texture2D gDiffuseMap[7] : register(t2); + +SamplerState gsamLinearWrap : register(s0); + + +// Constant data that varies per frame. +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[pin.MatIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + + diffuseAlbedo *= gDiffuseMap[diffuseTexIndex].Sample(gsamLinearWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - roughness; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..2d5317e --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,71 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLinePS.hlsl b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLinePS.hlsl new file mode 100644 index 0000000..4add4f5 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLinePS.hlsl @@ -0,0 +1,4 @@ +float4 main() : SV_Target0 +{ + return float4(0.0f, 1.0f, 0.0f, 0.1f); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLineVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLineVS.hlsl new file mode 100644 index 0000000..936a286 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/dynamicIndexOutLineVS.hlsl @@ -0,0 +1,74 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ������ŷ�����ƫ��һ�� + float3 viPos = vin.PosL + vin.NormalL * 0.2; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(viPos, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/sobelCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/tessDS.hlsl b/Chapter 17 Picking/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 17 Picking/Core/Shaders/default/tessHS.hlsl b/Chapter 17 Picking/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 17 Picking/Core/Shaders/default/tessPS.hlsl b/Chapter 17 Picking/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/tessVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/vecAdd.hlsl b/Chapter 17 Picking/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 17 Picking/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/Shaders/default/waveVS.hlsl b/Chapter 17 Picking/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 17 Picking/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 17 Picking/Core/SystemTime.cpp b/Chapter 17 Picking/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 17 Picking/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 17 Picking/Core/SystemTime.h b/Chapter 17 Picking/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 17 Picking/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 17 Picking/Core/Utility.cpp b/Chapter 17 Picking/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 17 Picking/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 17 Picking/Core/Utility.h b/Chapter 17 Picking/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 17 Picking/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 17 Picking/Core/VectorMath.h b/Chapter 17 Picking/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 17 Picking/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 17 Picking/Core/pch.cpp b/Chapter 17 Picking/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 17 Picking/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 17 Picking/Core/pch.h b/Chapter 17 Picking/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 17 Picking/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 17 Picking/GameApp.cpp b/Chapter 17 Picking/GameApp.cpp new file mode 100644 index 0000000..9689e5a --- /dev/null +++ b/Chapter 17 Picking/GameApp.cpp @@ -0,0 +1,552 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include +#include +#include "GeometryGenerator.h" +#include + +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" +#include "CompiledShaders/dynamicIndexOutLinePS.h" +#include "CompiledShaders/dynamicIndexOutLineVS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + + m_Camera.SetEyeAtUp({ 0.0f, 0.0f, -15.0f }, { 0.0f, 0.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); + + updateInstanceData(); + checkPick(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(0, sizeof(psc), &psc); + + // ����ȫ������������ + gfxContext.SetBufferSRV(3, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(4, 0, 7, &m_srvs[0]); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ������� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_OUTLINE]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque], true); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::RenderUI(class GraphicsContext& gfxContext) +{ + TextContext Text(gfxContext); + Text.Begin(); + + Text.ResetCursor(Graphics::g_DisplayWidth / 2.0f, 5.0f); + Text.SetColor(Color(0.0f, 1.0f, 0.0f)); + + for (auto& e : m_vecAll) + { + std::stringstream ss; + ss << e->name << " : " << e->visibileCount << " / " << e->allCount << "\n"; + + Text.DrawString(ss.str()); + } + + Text.SetTextSize(20.0f); + + Text.End(); +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems, bool bOutLine /* = false */) +{ + for (auto& item : ritems) + { + if (bOutLine && item->selectedCount == 0) continue; + + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ���øû���Ŀ����Ҫ���������� + gfxContext.SetBufferSRV(2, item->matrixs); + + if (bOutLine) + { + // ������Ҫ���Ƶ�Ŀ������ + gfxContext.SetDynamicConstantBufferView(1, item->vDrawOutLineObjs.size() * sizeof(item->vDrawOutLineObjs[0]), item->vDrawOutLineObjs.data()); + + gfxContext.DrawIndexedInstanced(item->IndexCount, item->selectedCount, item->StartIndexLocation, item->BaseVertexLocation, 0); + } + else + { + // ������Ҫ���Ƶ�Ŀ������ + gfxContext.SetDynamicConstantBufferView(1, item->vDrawObjs.size() * sizeof(item->vDrawObjs[0]), item->vDrawObjs.data()); + + gfxContext.DrawIndexedInstanced(item->IndexCount, item->visibileCount, item->StartIndexLocation, item->BaseVertexLocation, 0); + } + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(5, 1); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature[0].InitAsConstantBuffer(0); // ͨ�õij��������� + m_RootSignature[1].InitAsConstantBuffer(1); // ����ȾĿ������ + m_RootSignature[2].InitAsBufferSRV(0); // ��ȾĿ��ľ������� + m_RootSignature[3].InitAsBufferSRV(1); // ��ȾĿ����������� + m_RootSignature[4].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 2, 7); // ��ȾĿ������� + m_RootSignature.Finalize(L"16 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + // ���PSO + GraphicsPSO outlinePSO = defaultPSO; + auto blend = Graphics::BlendTraditional; + blend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_ZERO; + outlinePSO.SetBlendState(blend); + outlinePSO.SetVertexShader(g_pdynamicIndexOutLineVS, sizeof(g_pdynamicIndexOutLineVS)); + outlinePSO.SetPixelShader(g_pdynamicIndexOutLinePS, sizeof(g_pdynamicIndexOutLinePS)); + outlinePSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_OUTLINE] = outlinePSO; +} + +void GameApp::buildGeo() +{ + std::ifstream fin("Models/skull.txt"); + + if (!fin) + { + MessageBox(0, L"Models/skull.txt not found.", 0, 0); + return; + } + + UINT vcount = 0; + UINT tcount = 0; + std::string ignore; + + fin >> ignore >> vcount; + fin >> ignore >> tcount; + fin >> ignore >> ignore >> ignore >> ignore; + + Math::Vector3 vMin = { FLT_MAX, FLT_MAX, FLT_MAX }; + Math::Vector3 vMax = { FLT_MIN, FLT_MIN, FLT_MIN }; + + std::vector vertices(vcount); + for (UINT i = 0; i < vcount; ++i) + { + fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; + fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; + + XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); + + // ������������ + XMFLOAT3 spherePos; + XMStoreFloat3(&spherePos, XMVector3Normalize(P)); + + float theta = atan2f(spherePos.z, spherePos.x); + + // Put in [0, 2pi]. + if (theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(spherePos.y); + + float u = theta / (2.0f * XM_PI); + float v = phi / XM_PI; + + vertices[i].TexC = { u, v }; + + vMin = Math::Min(vMin, Math::Vector3(P)); + vMax = Math::Max(vMax, Math::Vector3(P)); + } + + fin >> ignore; + fin >> ignore; + fin >> ignore; + + std::vector indices(3 * tcount); + for (UINT i = 0; i < tcount; ++i) + { + fin >> indices[i * 3 + 0] >> indices[i * 3 + 1] >> indices[i * 3 + 2]; + } + + fin.close(); + + auto geo = std::make_unique(); + geo->name = "skullGeo"; + + geo->createVertex(L"skullGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"skullGeo index", (UINT)indices.size(), sizeof(std::int32_t), indices.data()); + geo->storeVertexAndIndex(vertices, indices); + + SubmeshGeometry submesh; + submesh.IndexCount = 3 * tcount; + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + submesh.vMin = vMin; + submesh.vMax = vMax; + + geo->geoMap["skull"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + std::vector v = { + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.1f, 0 }, // bricks + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.3f, 1 }, // stone + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.02f, 0.02f, 0.02f }, 0.3f, 2 }, // tile + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.2f, 3 }, // checkboard + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 0.0f, 4 }, // ice + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.2f, 5 }, // grass + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.05f, 0.05f, 0.05f }, 0.5f, 6 } // skull + }; + + // ���������������� + m_mats.Create(L"skull mats", (UINT)v.size(), sizeof(MaterialConstants), v.data()); + + m_srvs.resize(7); + TextureManager::Initialize(L"Textures/"); + m_srvs[0] = TextureManager::LoadFromFile(L"bricks", true)->GetSRV(); + m_srvs[1] = TextureManager::LoadFromFile(L"stone", true)->GetSRV(); + m_srvs[2] = TextureManager::LoadFromFile(L"tile", true)->GetSRV(); + m_srvs[3] = TextureManager::LoadFromFile(L"WoodCrate01", true)->GetSRV(); + m_srvs[4] = TextureManager::LoadFromFile(L"ice", true)->GetSRV(); + m_srvs[5] = TextureManager::LoadFromFile(L"grass", true)->GetSRV(); + m_srvs[6] = TextureManager::LoadFromFile(L"white1x1", true)->GetSRV(); +} + +void GameApp::buildRenderItem() +{ + // ����125�� + int n = 5; + int nInstanceCount = n * n * n; + + int maxCount = Math::AlignUp(nInstanceCount * 4, 16) / 4; + + auto skullRitem = std::make_unique(); + skullRitem->name = "skull"; + skullRitem->visibileCount = nInstanceCount; + skullRitem->allCount = nInstanceCount; + skullRitem->vDrawObjs.resize(maxCount); + skullRitem->vDrawOutLineObjs.resize(maxCount); + skullRitem->geo = m_mapGeometries["skullGeo"].get(); + skullRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skullRitem->IndexCount = skullRitem->geo->geoMap["skull"].IndexCount; + skullRitem->StartIndexLocation = skullRitem->geo->geoMap["skull"].StartIndexLocation; + skullRitem->BaseVertexLocation = skullRitem->geo->geoMap["skull"].BaseVertexLocation; + skullRitem->vMin = skullRitem->geo->geoMap["skull"].vMin; + skullRitem->vMax = skullRitem->geo->geoMap["skull"].vMax; + + // Ϊ�������Ŀ������nInstanceCount���������ݣ��Էֲ��ڲ�ͬ������λ�� + skullRitem->vObjsData.resize(nInstanceCount); + float width = 200.0f; + float height = 200.0f; + float depth = 200.0f; + + float x = -0.5f * width; + float y = -0.5f * height; + float z = -0.5f * depth; + float dx = width / (n - 1); + float dy = height / (n - 1); + float dz = depth / (n - 1); + for (int k = 0; k < n; ++k) + { + for (int i = 0; i < n; ++i) + { + for (int j = 0; j < n; ++j) + { + int index = k * n * n + i * n + j; + // Position instanced along a 3D grid. + skullRitem->vObjsData[index].World = Math::Transpose(Math::Matrix4( + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f }, + { x + j * dx, y + i * dy, z + k * dz } + )); + skullRitem->vObjsData[index].texTransform = Math::Transpose(Math::Matrix4::MakeScale({2.0f, 2.0f, 1.0f})); + skullRitem->vObjsData[index].MaterialIndex = index % m_mats.GetElementCount(); + } + } + } + + skullRitem->matrixs.Create(L"skull matrixs", nInstanceCount, sizeof(ObjectConstants), skullRitem->vObjsData.data()); + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(skullRitem.get()); + m_vecAll.push_back(std::move(skullRitem)); +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} + +void GameApp::updateInstanceData() +{ + for (auto& e : m_vecAll) + { + e->visibileCount = 0; + for (int i = 0; i < (int)e->vObjsData.size(); ++i) + { + if (g_openFrustumCull) + { + auto& item = e->vObjsData[i]; + auto vMin = Math::Vector3(Math::Transpose(item.World) * e->vMin); + auto vMax = Math::Vector3(Math::Transpose(item.World) * e->vMax); + if (m_Camera.GetWorldSpaceFrustum().IntersectBoundingBox(vMin, vMax)) + { + e->vDrawObjs[e->visibileCount++].x = i; + } + } + else + { + e->vDrawObjs[e->visibileCount++].x = i; + } + } + } +} + +void GameApp::checkPick() +{ + // ��갴��һ�δ���һ�� + if (!GameInput::IsFirstPressed(GameInput::kMouse0)) + return; + + auto [x, y] = GameInput::GetCurPos(); + + // ��ȡ�����ı��� + float HCot = m_Camera.GetProjMatrix().GetX().GetX(); + float VCot = m_Camera.GetProjMatrix().GetY().GetY(); + + float vx = (+2.0f * x / Graphics::g_DisplayWidth - 1.0f) / HCot; + float vy = (-2.0f * y / Graphics::g_DisplayHeight + 1.0f) / VCot; + + // ����������������ʱ�����Ѿ��ڹ۲�ռ�(view) + Math::Vector4 rayOriginBase = { 0.0f, 0.0f, 0.0f, 1.0f }; + Math::Vector4 rayDirBase = { vx, vy, 1.0f, 0.0f }; + + // ��������תview������� + auto inView = Math::Invert(m_Camera.GetViewMatrix()); + + // ���������е����� + float tmin = FLT_MAX; + for (auto& e : m_vecAll) + { + e->selectedCount = 0; + + // ��ȾĿ���AABB�� + BoundingBox bounds; + XMStoreFloat3(&bounds.Center, 0.5f * (e->vMin + e->vMax)); + XMStoreFloat3(&bounds.Extents, 0.5f * (e->vMax - e->vMin)); + + // ֻ��龭����׶����ú����ȾĿ�꼴�� + for (int idx = 0; idx < e->visibileCount; ++idx) + { + auto& item = e->vObjsData[e->vDrawObjs[idx].x]; + + // ȡ������ȾĿ���ʵ��ת������������ + auto inObjWorld = Math::Invert(Math::Transpose(item.World)); + + // ע������ij˷��Ƿ���ģ����Ժ��޸ģ� + auto inViewWorld = inObjWorld * inView; + + // ������ת����ȾĿ���ģ������ϵ(���Ժ��װ����API) + auto rayOrigin = Math::Vector4(XMVector3TransformCoord(rayOriginBase, inViewWorld)); + auto rayDir = Math::Vector4(XMVector3TransformNormal(rayDirBase, inViewWorld)); + + // Make the ray direction unit length for the intersection tests. + rayDir = Math::Vector4(XMVector3Normalize(rayDir)); + + // �ȼ�������Ƿ��ཻ�������AABB�� + float tTemp = 0.0f; + if (bounds.Intersects(rayOrigin, rayDir, tTemp)) + { + // ����Ѿ����ཻ����ȾĿ�꣬���ж�AABB�е���� + if (tTemp > tmin) continue; + + auto& vertices = e->geo->vecVertex; + auto& indices = e->geo->vecIndex; + UINT triCount = e->IndexCount / 3; + + // �����ж��������� + for (UINT i = 0; i < triCount; ++i) + { + // Indices for this triangle. + UINT i0 = indices[i * 3 + 0]; + UINT i1 = indices[i * 3 + 1]; + UINT i2 = indices[i * 3 + 2]; + + // Vertices for this triangle. + XMVECTOR v0 = XMLoadFloat3(&vertices[i0].Pos); + XMVECTOR v1 = XMLoadFloat3(&vertices[i1].Pos); + XMVECTOR v2 = XMLoadFloat3(&vertices[i2].Pos); + + float t = 0.0f; + if (TriangleTests::Intersects(rayOrigin, rayDir, v0, v1, v2, t)) + { + // ���������漴��Ϊ�����˸���ȾĿ�꣬��¼��ȣ������ж���һ����ȾĿ�� + tmin = tTemp; + + e->selectedCount = 1; + e->vDrawOutLineObjs[0].x = e->vDrawObjs[idx].x; + + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/Chapter 17 Picking/GameApp.h b/Chapter 17 Picking/GameApp.h new file mode 100644 index 0000000..cf18dc2 --- /dev/null +++ b/Chapter 17 Picking/GameApp.h @@ -0,0 +1,91 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + virtual void RenderUI(class GraphicsContext& gfxContext) override; + +private: + void cameraUpdate(); // camera���� + void updateInstanceData(); + void checkPick(); + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems, bool bOutLine = false); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + StructuredBuffer m_mats; // t1 �洢���е��������� + std::vector m_srvs; // �洢���е�������Դ + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_OUTLINE = 2, + }; + std::unordered_map m_mapPSO; + + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::unique_ptr m_CameraController; + + // �뾶 + float m_radius = 60.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 17 Picking/GeometryGenerator.cpp b/Chapter 17 Picking/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 17 Picking/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 17 Picking/GeometryGenerator.h b/Chapter 17 Picking/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 17 Picking/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 17 Picking/Models/skull.txt b/Chapter 17 Picking/Models/skull.txt new file mode 100644 index 0000000..5e0f3ce --- /dev/null +++ b/Chapter 17 Picking/Models/skull.txt @@ -0,0 +1,91423 @@ +VertexCount: 31076 +TriangleCount: 60339 +VertexList (pos, normal) +{ + 0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907 + 0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907 + 0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907 + 1.12127 1.64042 -1.94785 -0.0941668 0.904117 0.416779 + 1.04654 1.60198 -1.86107 0.0955379 0.877073 0.47076 + 1.06964 1.60894 -1.87873 0.0955378 0.877073 0.47076 + 1.151 1.65245 -1.7697 -0.378509 0.925514 -0.01241 + 1.11866 1.63277 -1.6602 -0.373131 0.92607 0.0562804 + 1.13374 1.64126 -1.6999 -0.373131 0.92607 0.0562804 + -1.55433 1.51188 0.462787 -0.650629 -0.723091 0.231995 + -1.58157 1.5563 0.524846 -0.650628 -0.723091 0.231995 + -1.63136 1.61203 0.558918 -0.189662 0.407906 -0.893108 + -0.948906 1.69815 -1.06444 0.06309 -0.586398 -0.807562 + -0.883508 1.6865 -1.05088 0.333777 -0.941824 -0.0394929 + -0.901206 1.61571 -1.00085 0.06309 -0.586398 -0.807562 + -0.698766 2.11852 0.21365 0.449339 0.0647742 -0.89101 + -0.800745 2.16722 0.143497 0.233569 0.963598 0.130093 + -0.757773 2.14908 0.186115 0.510221 0.846084 -0.154329 + -0.026884 2.45107 -1.11594 0.569732 0.569877 -0.592153 + -0.026893 2.5207 -1.04894 0.569732 0.569877 -0.592153 + -0.00861 2.52374 -1.02842 -0.412524 0.686678 0.59858 + -0.925082 1.67623 0.632925 0.327682 0.790395 0.517591 + -1.02369 1.81801 0.51875 0.764479 0.632399 0.12507 + -1.07771 1.88665 0.501859 0.768834 0.630814 0.104728 + -1.21447 1.45124 0.759218 -0.977394 0.0525264 0.204796 + -1.24213 1.58922 0.591819 -0.977394 0.0525264 0.204796 + -1.25585 1.60974 0.521077 -0.977394 0.0525264 0.204796 + -1.46174 1.30584 0.581853 0.864067 -0.492757 0.102851 + -1.46161 1.25622 0.403406 0.828898 0.539105 -0.149312 + -1.49721 1.30268 0.373529 0.828898 0.539105 -0.149312 + -1.14801 1.74733 -2.15642 0.627914 0.700696 0.338748 + -1.14244 1.71124 -2.06432 0.928712 0.127139 -0.348326 + -1.11856 1.68698 -2.02151 0.312969 0.890586 0.330011 + -1.0984 1.63391 -1.92098 0.487942 -0.510099 -0.708315 + -1.04635 1.60183 -1.86122 0.772868 0.0817976 -0.629273 + -1.12108 1.64027 -1.948 0.772868 0.0817976 -0.629273 + -1.13384 1.64128 -1.69995 0.359386 0.931225 0.060508 + -1.11876 1.63288 -1.66019 0.359386 0.931225 0.060508 + -1.1511 1.65248 -1.76974 0.66363 0.744796 -0.0698237 + -1.18233 1.23731 -1.58105 -0.922929 -0.0737541 -0.37784 + -1.17721 1.24002 -1.59409 -0.922929 -0.073754 -0.37784 + -1.16328 1.23237 -1.62663 -0.922929 -0.073754 -0.37784 + -0.91314 1.26874 -2.12118 -0.105577 0.815147 0.569551 + -0.898511 1.25175 -2.09719 -0.887193 -0.36437 0.283061 + -0.883033 1.24766 -2.05395 -0.887193 -0.36437 0.283061 + 1.04301 1.16262 -1.8932 0.397469 0.0978369 -0.912385 + 1.01556 1.17173 -1.90419 0.0633285 0.952548 -0.297727 + 0.980129 1.18837 -1.91784 0.397469 0.0978369 -0.912385 + 0.800364 1.32241 -2.89805 0.629678 0.750854 -0.199307 + 0.806559 1.32541 -2.88944 0.823409 -0.271908 -0.49806 + 0.831275 1.27798 -2.82269 0.823409 -0.271908 -0.49806 + -2.04759 1.79087 -0.419645 -0.988527 -0.10864 0.104937 + -2.05701 1.81152 -0.487006 -0.997315 -0.0537478 0.0497454 + -2.05691 1.78848 -0.509912 -0.980777 -0.193847 -0.0223518 + -0.692099 1.2342 -2.95767 -0.573742 0.803924 -0.156607 + -0.695861 1.23354 -2.94732 -0.573742 0.803924 -0.156607 + -0.697976 1.23713 -2.92113 -0.573742 0.803924 -0.156607 + 2.05691 1.78848 -0.509912 0.998191 -0.0583625 -0.0144192 + 2.05701 1.81152 -0.487006 0.997306 -0.0538525 0.0498041 + 2.04758 1.79087 -0.419637 0.988507 -0.108734 0.105031 + 1.24544 1.07804 -1.44958 0.649224 -0.0182511 -0.760378 + 1.21165 1.0146 -1.47691 0.166265 0.745609 -0.645308 + 1.1173 1.02629 -1.55774 0.649224 -0.0182511 -0.760378 + -1.11728 1.02629 -1.55775 -0.649255 -0.0183743 -0.760349 + -1.21163 1.0146 -1.47691 -0.166337 0.745526 -0.645385 + -1.24542 1.07804 -1.44959 -0.649255 -0.0183743 -0.760349 + -0.806332 1.74827 -2.76421 -0.434612 0.209157 0.875994 + -0.814274 1.75317 -2.76932 -0.434612 0.209157 0.875994 + -0.839872 1.7517 -2.78167 -0.434612 0.209157 0.875994 + 0.821988 1.74942 -2.77501 0.329372 -0.519014 0.788757 + 0.814274 1.75317 -2.76932 0.329372 -0.519014 0.788757 + 0.785028 1.76407 -2.74993 0.329372 -0.519014 0.788757 + 0.888762 1.33938 -1.5282 0.00961599 0.997143 0.0749256 + 0.915406 1.33821 -1.5161 0.00961599 0.997143 0.0749256 + 0.921874 1.33846 -1.52023 0.00961599 0.997143 0.0749256 + -0.886486 1.45631 -2.24676 -0.396142 0.917961 0.0204671 + -0.902475 1.44951 -2.25152 -0.396142 0.917961 0.0204671 + -0.927139 1.43888 -2.25177 -0.396142 0.917961 0.0204671 + 1.04271 1.37679 -2.1176 0.2494 -0.0437617 0.967411 + 1.07451 1.36833 -2.12618 0.2494 -0.0437617 0.967411 + 1.08487 1.3765 -2.12848 0.2494 -0.0437617 0.967411 + -0.943902 1.36906 -1.86388 0.166581 0.42439 0.890025 + -0.967246 1.38002 -1.86474 0.166581 0.42439 0.890025 + -0.996414 1.38162 -1.86005 0.166581 0.42439 0.890025 + -0.909016 1.37928 -1.86229 -0.0199364 0.651776 0.75815 + -0.935798 1.39002 -1.87222 -0.0199364 0.651776 0.75815 + -0.977897 1.39575 -1.87826 -0.0199364 0.651776 0.75815 + -0.049274 1.91604 -3.38694 -0.350601 -0.899629 -0.26028 + -0.00609 1.89928 -3.38721 -0.369168 -0.892749 -0.258289 + 0 1.88767 -3.35525 -0.350601 -0.899629 -0.26028 + -0.00609 1.93619 -3.35816 -1 0 0 + -0.00609 1.92264 -3.37029 -1 0 0 + -0.011004 2.20909 -0.926224 0.999938 0.00708208 -0.00860211 + -0.011004 1.92279 -1.16193 0.999938 0.00708208 -0.00860211 + -0.014777 2.65435 -0.998232 0.995471 -0.0158419 0.0937386 + -0.011004 1.92279 -1.16193 0.785848 -0.421049 0.452946 + 0.031727 1.84797 -1.26694 0.686473 -0.714394 -0.13563 + 0.031727 1.84797 -1.26694 -0.882422 -0.413073 0.225172 + 0.064756 1.84625 -1.22456 -0.869915 -0.210535 0.446008 + -0.014777 2.65435 -0.998232 -0.770175 -0.241181 0.590477 + 0.161362 1.08963 0.567937 0.195338 0.92057 0.338221 + 0.15157 1.06403 0.643287 0.195338 0.92057 0.33822 + 0.202299 1.02452 0.721508 0.195338 0.92057 0.33822 + 1.13441 1.64513 -1.92742 0.664039 -0.745121 -0.0620253 + 1.12127 1.64042 -1.94785 0.577008 -0.794899 -0.187611 + 1.15142 1.68191 -2.03092 0.577008 -0.794899 -0.187611 + 1.14237 1.66056 -1.98515 -0.181527 0.904501 0.385909 + 1.15142 1.68191 -2.03092 -0.181527 0.904501 0.385909 + 0.173526 2.0323 -3.02581 0.421532 0.687881 -0.590873 + 0.164996 2.02874 -3.03604 0.421532 0.687881 -0.590873 + 0.156435 2.02905 -3.04178 0.421532 0.687881 -0.590873 + -0.018207 2.29242 -0.86875 -0.16113 0.133196 0.977904 + -0.011004 2.20909 -0.926224 -0.329358 -0.555228 0.763704 + 0.016514 2.25648 -0.879903 -0.329358 -0.555228 0.763704 + -0.011004 2.20909 -0.926224 0.902381 -0.119202 -0.414126 + 0.014767 2.65435 -0.998232 0.630835 -0.424023 -0.649809 + 0.016514 2.25648 -0.879903 0.902381 -0.119202 -0.414126 + -0.042206 0.01602 3.24589 0 0.626778 0.779198 + -0.001795 0.003301 3.25612 -0.369989 -0.0689123 0.926477 + 0.001808 0.003301 3.25612 0 0.626778 0.779198 + -0.972324 1.71963 0.59555 0.307586 0.790657 0.529389 + -0.848978 1.62264 0.668739 0.307586 0.790657 0.529389 + -1.237 1.53076 0.60848 -0.417096 0.181801 0.890494 + -1.26298 1.58624 0.584985 -0.819253 -0.356714 0.448976 + -1.33145 1.63145 0.543685 -0.417096 0.181801 0.890494 + -1.30863 1.42333 0.768356 -0.275156 -0.302959 -0.912417 + -1.35441 1.57088 0.718197 -0.944445 -0.205966 0.256128 + -1.37295 1.58577 0.661806 -0.944445 -0.205966 0.256128 + -0.995136 1.68804 -1.12174 0.696565 0.353522 -0.624355 + -0.971002 1.70035 -1.08785 0.696565 0.353522 -0.624355 + -0.948906 1.69815 -1.06444 0.696565 0.353522 -0.624355 + -0.686108 1.69237 -1.37664 -0.112009 0.079852 0.990494 + -0.668868 1.74969 -1.37931 0.942787 -0.288834 0.166514 + -0.692772 1.67708 -1.37616 -0.112009 0.079852 0.990494 + -0.991592 1.54803 -1.21183 -0.598015 -0.458623 -0.657299 + -0.955511 1.48158 -1.19533 -0.725065 -0.232811 0.648136 + -0.922127 1.44708 -1.17038 -0.725065 -0.232811 0.648136 + -1.02216 1.67959 -1.28351 0.554421 -0.0861091 -0.82777 + -1.00886 1.67572 -1.2742 0.686154 -0.0106421 -0.727379 + -0.994441 1.63158 -1.25995 0.554421 -0.0861091 -0.82777 + 0.02884 1.8545 -1.31386 0.209354 -0.97749 0.0261592 + -0.011004 1.92279 -1.16193 -0.876146 -0.481864 -0.0131942 + -0.566524 1.95757 -2.62998 0.80872 -0.586442 0.0453573 + -0.592266 1.91999 -2.61288 0.735678 -0.623871 -0.263747 + -0.593047 1.92413 -2.62486 0.731705 -0.641824 -0.229498 + -1.14934 1.85886 -1.621 -0.748231 -0.0628384 0.660455 + -1.18042 1.92842 -1.63808 0.695388 0.448556 0.561456 + -1.22327 1.99607 -1.63906 0.695388 0.448556 0.561456 + -0.848896 1.59106 -1.29936 0.0547428 0.991271 -0.119936 + -0.862195 1.59124 -1.28868 -0.607286 0.231798 -0.759916 + -0.906036 1.59329 -1.25302 -0.240133 -0.963498 -0.118355 + 0.040846 2.03476 -3.07187 0.32524 -0.797022 -0.508895 + 0.021963 2.02879 -3.08313 0.412098 0.310944 -0.856439 + -0.030826 2.04626 -3.10218 0.412098 0.310944 -0.856439 + 0.016514 2.25648 -0.879903 0.361972 0.492241 0.791628 + 0.036031 2.2728 -0.898977 0.854781 0.134694 0.501205 + 0.026896 2.5207 -1.04894 0.89138 0.34194 0.297521 + 0.342526 0.826727 1.0007 0.953858 0.107937 0.280186 + 0.321893 0.815854 1.07513 0.953858 0.107937 0.280186 + 0.312155 0.767184 1.12703 0.953858 0.107937 0.280186 + -0.280438 0.691045 1.20391 -0.945571 0.12964 0.298478 + -0.28423 0.755168 1.16405 -0.945571 0.12964 0.298478 + -0.293968 0.803753 1.11209 -0.945571 0.12964 0.298478 + 1.02368 1.78898 0.51143 0.89627 -0.163857 0.41213 + 0.939812 1.7023 0.659358 0.89627 -0.163857 0.41213 + 0.972324 1.71963 0.595543 0.89627 -0.163857 0.41213 + 0.639283 1.82867 -0.742512 0.949949 -0.265038 0.165381 + 0.641212 1.80309 -0.633011 -0.155079 -0.962606 -0.222129 + 0.588889 1.81998 -0.669658 -0.576988 -0.694303 0.430148 + 0.996149 2.87607 -0.646464 0.195019 -0.66248 0.723248 + 0.779571 2.78279 -0.673504 0.195019 -0.66248 0.723249 + 0.739695 2.74565 -0.696773 0.694051 -0.493486 -0.524181 + 2.01559 2.518 -0.205467 -0.398232 -0.638181 0.65889 + 1.85647 2.54302 -0.277405 -0.398232 -0.638181 0.65889 + 1.78909 2.52885 -0.331856 -0.398232 -0.638181 0.65889 + 2.06551 2.37554 -0.14513 0.209248 0.739158 0.640203 + 1.98115 2.45802 -0.212777 0.209248 0.739158 0.640203 + 1.90735 2.49937 -0.236397 0.209248 0.739158 0.640203 + 0.701621 1.59347 -1.07093 -0.310767 -0.590351 -0.744923 + 0.795773 1.58717 -1.10522 -0.407193 -0.681904 -0.607618 + 0.857639 1.53971 -1.09341 -0.310767 -0.59035 -0.744923 + 0.700579 1.79093 -2.19915 0.794599 0.593925 -0.125957 + 0.750666 1.75461 -2.12943 0.145023 -0.880776 -0.45078 + 0.719806 1.76903 -2.18362 0.813011 0.475148 -0.336522 + -0.92271 1.96082 -0.624798 0.172164 -0.446348 0.878142 + -0.929869 1.89636 -0.656157 0.172164 -0.446348 0.878142 + -0.915918 1.85125 -0.681822 0.892288 -0.365755 0.26466 + -1.25705 3.37972 -1.68482 -0.110911 -0.983827 0.14065 + -1.14214 3.39251 -1.50476 -0.110911 -0.983827 0.14065 + -1.11887 3.39705 -1.45464 -0.110911 -0.983827 0.14065 + -0.010689 2.2749 -0.3052 0.629784 0.648282 0.427905 + -0.009414 2.2992 -0.343893 0.629784 0.648282 0.427905 + -0.048528 2.35557 -0.371727 0.629784 0.648282 0.427905 + -1.07094 1.86141 0.481375 -0.876493 -0.32002 0.359647 + -0.972324 1.71963 0.59555 -0.876493 -0.32002 0.359647 + -0.939812 1.7023 0.659365 -0.876493 -0.32002 0.359647 + -1.25585 1.60974 0.521077 0.204306 -0.604269 -0.770141 + -1.18554 1.48162 0.722401 -0.0429436 -0.669492 -0.741577 + -1.21447 1.45124 0.759218 0.24249 -0.645061 -0.724634 + -1.70723 0.427067 1.15213 -0.205891 0.970178 -0.12792 + -1.70775 0.443486 1.2775 -0.205891 0.970178 -0.12792 + -1.7011 0.453737 1.34454 -0.205891 0.970178 -0.12792 + -0.609115 1.90933 -2.58583 -0.554437 0.827813 0.0855872 + -0.571293 1.94331 -2.66948 -0.554437 0.827813 0.0855872 + -0.593047 1.92413 -2.62486 -0.554437 0.827813 0.0855872 + -0.729379 1.60414 -1.84242 -0.735368 0.676003 -0.0474693 + -0.696971 1.63682 -1.87903 -0.82698 -0.194483 -0.527522 + -0.692433 1.63726 -1.94318 -0.735368 0.676003 -0.0474693 + -1.0984 1.63391 -1.92098 -0.244409 0.749525 0.615204 + -1.06945 1.6088 -1.87888 -0.244409 0.749526 0.615204 + -1.04635 1.60183 -1.86122 -0.244409 0.749525 0.615204 + 0.036031 2.2728 -0.898977 -0.996262 0.014774 0.0851082 + 0.03663 2.30385 -0.897355 -0.996262 0.014774 0.0851082 + 0.026896 2.5207 -1.04894 -0.996262 0.014774 0.0851082 + 1.21543 1.25463 0.632758 -0.912708 0.113447 -0.392548 + 1.20241 1.08491 0.659711 -0.928512 0.0122976 -0.371098 + 1.1661 0.918671 0.745052 -0.286635 -0.61351 -0.73583 + 1.33145 1.63145 0.543685 0.417147 0.181782 0.890474 + 1.26299 1.58624 0.584984 0.417147 0.181782 0.890474 + 1.23701 1.53076 0.60848 0.417147 0.181782 0.890474 + 1.37295 1.58577 0.661806 0.944445 -0.205962 0.256133 + 1.35441 1.57088 0.718196 0.944445 -0.205962 0.256133 + 1.30863 1.42333 0.768356 0.275663 -0.291308 -0.916051 + 0.792052 1.49776 -1.24696 -0.0135992 0.985387 0.169787 + 0.828512 1.49337 -1.21855 0.221899 0.853284 -0.471877 + 0.874389 1.49643 -1.23266 -0.449359 0.864271 0.226078 + 0.922122 1.44708 -1.17038 -0.238096 -0.602308 0.761929 + 0.955513 1.48149 -1.19538 0.725133 -0.232945 0.648011 + 0.991592 1.54803 -1.21183 0.601275 -0.451223 -0.659444 + 0.592978 1.92413 -2.62486 -0.733794 -0.641747 -0.222951 + 0.592234 1.92008 -2.61283 -0.738748 -0.623481 -0.255977 + 0.566529 1.95757 -2.62998 -0.805241 -0.592217 0.0294389 + 1.22327 1.99606 -1.63905 -0.695663 0.448589 0.56109 + 1.18043 1.92842 -1.63808 -0.695663 0.448589 0.56109 + 1.14935 1.85886 -1.621 0.743443 -0.0685493 0.665277 + -1.59486 1.39116 0.355271 -0.0661124 0.295114 -0.953172 + -1.51069 1.33656 0.353853 -0.384054 -0.573208 -0.723834 + -1.49721 1.30268 0.373529 -0.328928 -0.706901 -0.626177 + -1.49586 2.56716 -0.58981 -0.607194 -0.445574 -0.65786 + -1.58602 2.58657 -0.536845 -0.516028 -0.066654 -0.853974 + -1.72019 2.70443 -0.464969 -0.717703 -0.338326 -0.608637 + 0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.069411 0.149083 3.81521 0 0.702478 -0.711705 + -1.13431 1.77915 -2.24394 0.748987 0.576371 0.326825 + -1.15072 1.77302 -2.19552 0.796931 0.528217 0.293067 + 1.02369 1.81801 0.518748 -0.769296 0.630583 0.102705 + 1.0777 1.88665 0.501858 -0.548412 -0.0230373 -0.835891 + 1.18729 2.0375 0.396588 -0.788918 0.537794 0.297298 + 1.21543 1.25463 0.632758 -0.943445 0.0893122 -0.319273 + 1.21129 1.35382 0.672741 -0.659387 -0.123053 -0.741665 + 1.26299 1.58624 0.584984 -0.943445 0.0893122 -0.319273 + 0.757834 2.14915 0.186202 -0.510264 0.846046 -0.154393 + 0.800807 2.16729 0.143582 -0.510264 0.846046 -0.154393 + 0.698828 2.11859 0.213736 -0.448671 0.0631055 -0.891466 + 0.001808 0.003301 3.25612 1 0 0 + 0.001808 -0.013762 3.24667 1 0 0 + 0.001808 -0.005483 3.17033 0.46511 -0.884971 -0.0223388 + 0.74827 1.58102 -1.31758 0.185978 0.978799 -0.085815 + 0.748333 1.58493 -1.27294 0.139582 0.986432 -0.0864167 + 0.848893 1.59105 -1.29935 -0.083259 0.992753 -0.0866547 + 0.711042 1.59463 -1.33315 0.839186 0.541675 -0.0485298 + 0.711105 1.59853 -1.28851 0.687275 0.724916 -0.0463682 + 0.699505 1.64767 -1.36081 0.956663 0.288108 0.0423007 + 0.686132 1.69228 -1.37669 0.936448 0.341179 0.0816172 + 0.697732 1.64315 -1.30438 0.94884 0.310267 0.0586247 + 0.656563 1.77702 -1.40086 0.932306 0.350624 0.0887014 + 1.00885 1.67572 -1.27419 0.670214 -0.693233 -0.265032 + 0.977919 1.61141 -1.18422 -0.548297 -0.595979 -0.586669 + 0.946949 1.61536 -1.27285 0.462875 -0.884401 -0.059845 + 0.937006 1.58934 -1.16439 0.0125529 -0.640481 -0.767871 + 0.906036 1.59329 -1.25302 0.240627 -0.963412 -0.118054 + 0.85677 1.58823 -1.32627 0.043441 -0.986395 0.158547 + 0.960259 1.61924 -1.28217 -0.0511243 -0.433055 0.899916 + 1.00885 1.67572 -1.27419 0.578205 -0.561083 0.592339 + 0.963515 1.56736 -1.16991 -0.691064 0.46106 -0.556646 + 0.917637 1.56429 -1.1558 0.00972007 0.191642 -0.981417 + 0.845353 1.58744 -1.19488 0.17914 -0.851587 -0.492654 + 0.801509 1.58539 -1.23054 -0.335613 -0.85461 0.396239 + 0.862192 1.59116 -1.28874 0.0295432 -0.9993 0.0229327 + 0.994443 1.63158 -1.25994 -0.925431 0.375615 -0.0498965 + 1.00885 1.67572 -1.27419 -0.953877 0.267096 -0.137033 + 0.75894 1.61619 -1.24569 -0.790815 -0.347 0.504184 + 0.761569 1.58122 -1.30691 -0.242761 -0.955401 0.168154 + 0.848893 1.59105 -1.29935 0.0612642 -0.998073 0.00988391 + 0.718999 1.61201 -1.32205 -0.802857 -0.23298 0.548763 + 0.74827 1.58102 -1.31758 -0.492294 -0.557249 0.66867 + 0.699021 1.70327 -1.32391 -0.803778 -0.594448 0.0239307 + 0.707462 1.66505 -1.34971 -0.935553 -0.137607 0.325277 + 0.699505 1.64767 -1.36081 -0.840344 0.0395603 0.540607 + 0.711042 1.59463 -1.33315 -0.686943 -0.140715 0.712958 + 0.76871 1.61927 -1.22983 -0.829319 -0.146584 0.539206 + 0.708791 1.70626 -1.3081 -0.838716 -0.095275 0.53617 + 0.789525 1.56678 -1.21471 -0.823792 -0.170977 0.540493 + 0.686132 1.69228 -1.37669 -0.866756 -0.211662 0.45159 + 0.668871 1.74969 -1.37931 -0.92902 -0.312853 0.197597 + 0.656563 1.77702 -1.40086 -0.944761 -0.140863 0.295946 + 0.639302 1.83442 -1.40348 -0.945695 -0.302329 0.119408 + 0.600297 1.9196 -1.45941 -0.935523 -0.35319 -0.00734592 + 0.636604 1.83901 -1.44743 -0.909434 -0.393561 -0.134309 + 0.697732 1.64315 -1.30438 -0.904037 0.0293146 0.426448 + 0.66043 1.78791 -1.35351 -0.858241 -0.478347 0.186029 + 0.626051 1.87036 -1.31612 -0.909292 -0.346445 -0.230571 + 0.599786 1.94895 -1.30965 -0.875446 -0.276772 -0.39622 + 0.613037 1.91293 -1.39706 -0.951128 -0.301862 0.0650784 + 0.654263 1.77702 -1.32405 -0.751583 -0.211272 -0.624889 + 0.619884 1.85947 -1.28666 -0.501873 -0.163251 -0.849396 + 0.589443 1.89582 -1.28503 -0.0798705 -0.0211582 -0.996581 + 0.572223 2.03146 -1.30735 -0.650346 -0.512783 -0.56045 + 0.657449 1.71478 -1.31545 -0.182016 -0.375202 -0.908897 + 0.628195 1.74036 -1.30896 -0.284599 -0.0806566 -0.955247 + 0.597753 1.77671 -1.30732 0.190494 0.01163 -0.981619 + 0.548924 1.83147 -1.32837 0.353545 0.0467009 -0.934251 + 0.56188 1.97841 -1.28267 -0.148599 -0.106591 -0.983136 + 0.684132 1.6989 -1.29475 -0.0788835 -0.724345 -0.68491 + 0.631718 1.61943 -1.2503 0.0298424 -0.668702 -0.742932 + 0.631381 1.67812 -1.30036 0.0169822 -0.488516 -0.87239 + 0.590278 1.68513 -1.29089 -0.376297 -0.43088 -0.820209 + 0.708791 1.70626 -1.3081 -0.0330505 -0.848193 -0.528656 + 0.726242 1.62827 -1.2706 -0.311936 -0.689434 -0.65374 + 0.658401 1.60355 -1.2296 0.185007 -0.812766 -0.552434 + 0.636545 1.55107 -1.1577 0.30473 -0.846636 -0.436287 + 0.605073 1.57287 -1.20325 0.0408359 -0.779023 -0.625664 + 0.604736 1.63147 -1.25336 -0.219954 -0.619859 -0.753257 + 0.750901 1.63563 -1.28395 -0.352328 -0.550117 -0.757123 + 0.770083 1.58651 -1.24989 -0.862131 -0.476999 -0.170882 + 0.711337 1.62078 -1.18883 -0.05394 -0.934159 -0.352757 + 0.689481 1.5683 -1.11694 0.330974 -0.873629 -0.356691 + 0.622039 1.51561 -1.08948 -0.117519 -0.919616 -0.374827 + 0.590567 1.53741 -1.13503 -0.335536 -0.906502 -0.256262 + 0.771717 1.58314 -1.26884 -0.950377 -0.309946 -0.0267693 + 0.790419 1.50113 -1.22799 -0.805017 -0.546168 0.231621 + 0.755178 1.57902 -1.16811 -0.517039 -0.830337 -0.207874 + 0.704378 1.56692 -1.09036 0.112455 -0.869528 -0.480911 + 0.635703 1.4879 -1.04188 -0.0054858 -0.928742 -0.370685 + 0.792052 1.49776 -1.24696 -0.872426 -0.488606 0.0116762 + 0.840998 1.46202 -1.20765 -0.327813 -0.943636 -0.045711 + 0.809256 1.55981 -1.16444 -0.507047 -0.838293 0.200418 + 0.758457 1.54772 -1.08669 -0.29294 -0.824332 -0.484419 + 0.6506 1.48652 -1.0153 -0.164864 -0.611883 -0.773575 + 0.859835 1.52061 -1.14415 -0.563628 -0.7081 0.425344 + 0.6506 1.48652 -1.0153 0.282589 -0.936699 -0.206731 + 0.612757 1.47847 -0.963546 -0.195089 -0.933803 0.29992 + 0.599093 1.50618 -1.01114 -0.791459 -0.597956 -0.126651 + 0.579459 1.54475 -1.05154 -0.850008 -0.526332 0.0214585 + 0.556701 1.56805 -1.18832 -0.580403 -0.7039 -0.409458 + 0.586667 1.54747 -0.91427 -0.844742 -0.444083 0.298665 + 0.567033 1.58604 -0.954669 -0.977182 -0.203594 0.0605327 + 0.567352 1.65255 -1.00526 -0.990658 -0.0825064 0.108583 + 0.545593 1.57539 -1.10483 -0.891632 -0.434143 0.128501 + 0.6172 1.53206 -0.889972 0.030182 -0.796937 0.603307 + 0.612248 1.60182 -0.819792 -0.496877 -0.648056 0.57718 + 0.581715 1.61732 -0.84404 -0.875442 -0.341842 0.341681 + 0.565407 1.66919 -0.887485 -0.990111 -0.0742072 0.119056 + 0.629692 1.50131 -0.961109 0.862344 -0.383833 0.330206 + 0.634135 1.5549 -0.887535 0.907243 -0.352565 0.229366 + 0.630172 1.5876 -0.82637 0.539158 -0.579954 0.610706 + 0.601719 1.6529 -0.769478 -0.577694 -0.438679 0.688353 + 0.6506 1.48652 -1.0153 0.916919 -0.109968 0.383624 + 0.643397 1.56889 -0.998153 0.953583 -0.111151 0.279865 + 0.643726 1.61889 -0.917968 0.983699 -0.140621 0.112079 + 0.639763 1.6516 -0.856812 0.979198 -0.0845448 0.184455 + 0.619643 1.63869 -0.776057 0.471726 -0.542211 0.695329 + 0.664305 1.55402 -1.0524 0.699612 -0.0272337 0.714004 + 0.701621 1.59347 -1.07093 0.503858 0.0379935 0.862951 + 0.658945 1.63178 -1.03008 0.875368 -0.124851 0.467058 + 0.659274 1.68187 -0.949849 0.978211 -0.107128 0.177839 + 0.646938 1.71515 -0.867495 0.982201 -0.0753932 0.172038 + 0.626818 1.70224 -0.78674 0.973819 -0.11088 0.198448 + 0.616518 1.72023 -0.715886 0.952295 -0.110975 0.284286 + 0.795773 1.58717 -1.10522 0.43991 0.00564992 0.898024 + 0.758457 1.54772 -1.08669 0.384658 0.112744 0.916148 + 0.6506 1.48652 -1.0153 0.337107 0.400058 0.85224 + 0.133271 1.97001 -3.02272 0.0154635 -0.521531 -0.853092 + 0.093994 2.00582 -3.01375 -0.0964595 -0.529434 -0.842849 + 0.156435 2.02905 -3.04178 -0.329619 -0.159169 -0.9306 + 0.122012 1.95733 -3.01055 -0.0762406 -0.997074 0.00553609 + 0.082735 1.99305 -3.00163 -0.423956 -0.745927 -0.513667 + 0.080404 2.00707 -3.02371 0.31784 -0.784906 -0.531884 + 0.141832 1.9697 -3.01698 0.779898 -0.625712 0.0155829 + 0.128453 1.99899 -2.99251 0.691133 -0.559822 0.457094 + 0.108633 1.98662 -2.9861 0.501486 -0.407871 0.762989 + 0.156435 2.02905 -3.04178 0.475826 -0.443846 -0.759335 + 0.164996 2.02874 -3.03604 0.4903 -0.436023 -0.754645 + 0.164996 2.02874 -3.03604 0.80018 -0.124512 0.586693 + 0.108633 1.98662 -2.9861 -0.49426 -0.678915 0.542938 + 0.284568 2.00427 -2.96887 0.56808 -0.247494 -0.784877 + 0.261295 1.99188 -2.9818 0.187019 0.265387 -0.94583 + 0.2203 2.03343 -3.02458 -0.0508619 -0.991931 0.116125 + 0.240299 1.98703 -2.9834 -0.0571379 -0.00710554 -0.998341 + 0.199304 2.0285 -3.02623 0.0826115 -0.771611 -0.630708 + 0.156435 2.02905 -3.04178 -0.105135 -0.719327 -0.686669 + 0.263765 1.97714 -2.99568 -0.119907 0.938453 -0.323926 + 0.22481 1.97654 -2.98743 -0.0130644 0.94052 -0.339487 + 0.201344 1.98642 -2.97515 -0.0161998 0.130523 -0.991313 + 0.175566 1.99014 -2.97478 -0.121146 -0.768017 -0.628867 + 0.173526 2.0323 -3.02581 0.0509812 -0.987473 -0.149324 + 0.156435 2.02905 -3.04178 -0.132375 -0.934101 0.33156 + 0.286899 1.98164 -2.99787 -0.241542 0.932903 -0.267114 + 0.293134 1.98928 -3.0755 -0.0133371 0.983189 0.182106 + 0.268182 1.99335 -3.07676 0.253084 0.874727 0.413281 + 0.199857 1.98061 -2.98869 0.204668 0.977909 -0.0424764 + 0.175566 1.99014 -2.97478 0.287814 0.946572 -0.145479 + 0.284568 2.00427 -2.96887 -0.0733668 0.783513 -0.617028 + 0.310171 1.99395 -2.98499 -0.173813 0.973152 -0.150879 + 0.316268 1.99369 -3.07773 -0.223476 0.972495 0.0656668 + 0.319848 1.99731 -3.11521 -0.0681588 0.981479 0.179032 + 0.295996 1.99739 -3.09994 0.460292 -0.348579 0.81647 + 0.24433 1.99334 -3.06154 0.124711 0.929926 0.345956 + 0.161274 1.99295 -2.99625 0.215005 0.976527 0.0129801 + 0.136983 2.00247 -2.98234 0.170644 0.951116 -0.257408 + 0.322326 1.99302 -3.04417 0.00197971 0.999987 -0.00458595 + 0.325906 1.99664 -3.08165 -0.267212 0.961274 0.0674538 + 0.332804 1.99775 -3.02017 0.191921 0.950702 -0.24358 + 0.320649 1.99868 -2.96098 -0.564124 0.814722 0.134134 + 0.32929 2.00113 -2.94802 -0.154741 0.954427 0.255193 + 0.343366 1.99505 -2.9427 0.310494 0.919074 -0.242686 + 0.34688 1.99167 -3.01484 0.425132 0.903039 -0.0615074 + 0.313291 2.00102 -3.03582 0.492869 0.738373 -0.46031 + 0.320286 1.98989 -2.94595 -0.828572 0.0466269 0.557938 + 0.328927 1.99242 -2.93294 -0.700958 0.624826 0.343874 + 0.295702 1.99981 -2.96814 0.373223 0.927739 -0.00221117 + 0.284568 2.00427 -2.96887 0.372151 0.928166 -0.00327953 + 0.365691 1.98304 -2.9843 0.421741 0.906473 0.0210214 + 0.371161 1.97686 -2.92739 0.518874 0.766784 -0.377906 + 0.397432 1.96751 -2.92599 0.320663 0.923046 -0.21251 + 0.391961 1.97369 -2.9829 0.274841 0.958349 0.0776548 + 0.436121 1.96422 -2.97889 0.18569 0.97975 0.0748887 + 0.423477 1.96208 -2.9154 0.25171 0.923845 -0.288363 + 0.462167 1.9588 -2.9683 0.0456098 0.998736 -0.0211222 + 0.356671 2.00434 -2.92579 0.528511 -0.481743 -0.698999 + 0.384466 1.98607 -2.91054 0.263444 -0.0453287 -0.963609 + 0.406745 1.97654 -2.90444 0.373114 0.765192 -0.524659 + 0.348135 2.00185 -2.93868 0.745781 -0.658126 0.103347 + 0.39795 2.0237 -2.97152 0.719518 -0.692725 -0.0492576 + 0.406486 2.02619 -2.95862 0.19985 -0.78305 -0.588976 + 0.428765 2.01675 -2.95248 -0.153313 -0.745058 -0.649141 + 0.406745 1.97654 -2.90444 -0.132424 -0.729384 -0.671166 + 0.44583 1.96623 -2.90117 -0.151335 -0.750736 -0.643034 + 0.350242 1.97577 -2.9623 0.49825 -0.830182 0.250088 + 0.35437 1.97828 -2.99445 0.386881 -0.907121 -0.165695 + 0.402078 2.0262 -3.00365 0.856346 -0.503661 -0.114005 + 0.418264 2.08128 -3.01025 0.7548 -0.317299 -0.574106 + 0.328927 1.99242 -2.93294 0.479015 -0.567757 0.669476 + 0.331034 1.96634 -2.95656 -0.0169217 -0.972696 0.231465 + 0.30645 1.97627 -2.97876 -0.454314 -0.880803 0.133358 + 0.313322 1.9798 -3.00647 -0.180227 -0.93728 -0.298371 + 0.364508 2.01202 -3.06709 0.474649 -0.715071 -0.513208 + 0.36865 2.03918 -3.08753 0.68518 -0.346518 -0.640667 + 0.40622 2.05345 -3.02404 0.881552 -0.238116 -0.407635 + 0.295702 1.99981 -2.96814 -0.65275 -0.623705 0.430011 + 0.231434 2.02898 -3.02386 -0.328901 -0.943378 -0.043141 + 0.238306 2.0325 -3.05156 -0.238856 -0.842117 -0.483514 + 0.32346 2.01354 -3.07911 -0.0808887 -0.797601 -0.597737 + 0.328927 1.99242 -2.93294 -0.649816 -0.538453 0.536477 + 0.156435 2.02905 -3.04178 0.0275726 -0.992469 -0.119352 + 0.284568 2.00427 -2.96887 -0.367788 -0.927873 -0.061516 + 0.156435 2.02905 -3.04178 -0.214287 -0.391188 0.895016 + 0.44583 1.96623 -2.90117 0.249323 0.75169 -0.610573 + 0.462562 1.95177 -2.91213 0.30346 0.951695 -0.0467856 + 0.49606 1.95866 -2.97745 0.0813961 0.993522 0.0793004 + 0.483244 1.9587 -2.99094 0.004039 0.999992 -0.000346849 + 0.517137 1.95856 -3.00009 0.092826 0.992272 0.0823419 + 0.517922 1.95242 -2.95825 0.13078 0.978736 0.158024 + 0.484424 1.94553 -2.89293 0.171707 0.980794 0.092513 + 0.508552 1.94894 -2.92703 0.0423027 0.990757 0.128884 + 0.52042 1.93869 -2.87167 0.428624 0.900379 0.0748257 + 0.44583 1.96623 -2.90117 0.499743 0.810446 -0.305669 + 0.328927 1.99242 -2.93294 -0.026466 0.974304 0.223678 + 0.348135 2.00185 -2.93868 -0.494815 0.672304 -0.550605 + 0.267677 2.00019 -3.0754 0.259724 -0.874459 0.409713 + 0.297587 1.99953 -3.05706 -0.126168 -0.988859 0.0789889 + 0.213992 2.01165 -3.01764 -0.035651 -0.947964 0.316375 + 0.243514 1.99815 -3.05565 0.329877 -0.864645 0.378905 + 0.221579 1.99604 -3.06701 0.0763245 -0.997034 -0.00985793 + 0.197416 1.994 -3.04727 -0.547475 -0.434681 -0.715069 + 0.138523 1.99564 -3.00172 -0.590193 -0.29206 -0.752577 + 0.325906 1.99664 -3.08165 -0.082742 -0.996488 -0.0128938 + 0.322326 1.99302 -3.04417 -0.353591 -0.912555 0.205467 + 0.313291 2.00102 -3.03582 -0.30181 -0.929701 0.21111 + 0.319848 1.99731 -3.11521 -0.0142549 -0.999747 -0.0174161 + 0.332804 1.99775 -3.02017 -0.419856 -0.838005 0.348523 + 0.136983 2.00247 -2.98234 0.245324 -0.883155 -0.399817 + 0.164996 2.02874 -3.03604 0.519605 -0.842885 -0.13984 + 0.76871 1.61927 -1.22983 0.919224 0.339172 -0.199975 + 0.750901 1.63563 -1.28395 0.890788 0.423336 -0.165177 + 0.708791 1.70626 -1.3081 0.870879 0.469742 -0.144616 + 0.789525 1.56678 -1.21471 0.779198 0.138322 -0.611325 + 0.771717 1.58314 -1.26884 0.93754 0.261539 -0.229383 + 0.792052 1.49776 -1.24696 0.747982 0.303256 -0.590389 + 0.825985 1.56239 -1.1863 0.433016 -0.0171771 -0.901222 + 0.874389 1.49643 -1.23266 -0.227826 0.78994 -0.569289 + 0.75894 1.61619 -1.24569 0.465107 -0.328062 -0.822223 + 0.568883 1.86808 -2.71898 -0.52045 0.793298 0.315928 + 0.596791 1.8903 -2.71226 -0.637409 0.710444 0.298294 + 0.56253 1.89213 -2.78983 -0.70778 0.526266 0.471265 + 0.554398 1.87296 -2.73802 0.755214 0.513528 -0.407359 + 0.548045 1.897 -2.80887 0.412423 0.871442 0.265511 + 0.539499 1.90956 -2.78862 0.925239 -0.210193 -0.315836 + 0.56062 1.92182 -2.78625 0.348483 -0.763202 -0.544135 + 0.575518 1.88522 -2.73566 0.394795 -0.738155 -0.54705 + 0.568883 1.86808 -2.71898 0.467932 -0.702741 -0.535906 + 0.540993 1.91304 -2.85124 0.887587 0.458544 0.0439012 + 0.532448 1.92559 -2.83099 0.952967 -0.290272 -0.0871579 + 0.556381 1.93513 -2.81012 0.43379 -0.829295 -0.352272 + 0.63233 1.9467 -2.79915 0.224633 -0.819026 -0.527955 + 0.646581 1.94192 -2.78008 0.121137 -0.906707 -0.403989 + 0.58977 1.88043 -2.71657 0.456878 -0.852569 0.253748 + 0.568883 1.86808 -2.71898 0.47583 -0.7011 -0.531078 + 0.534839 1.92882 -2.85178 0.926069 -0.287059 -0.244934 + 0.558772 1.93836 -2.83091 0.386607 -0.913901 -0.123772 + 0.628091 1.96002 -2.82302 0.325178 -0.872606 -0.364443 + 0.52297 1.93907 -2.90713 0.56514 0.824394 0.0314878 + 0.508552 1.94894 -2.92703 0.519872 0.852978 0.04649 + 0.857639 1.53971 -1.09341 0.209745 0.209288 0.955095 + 0.734627 1.66052 -1.09287 0.272265 -0.276923 0.921513 + 0.691951 1.69874 -1.05208 0.72977 -0.187247 0.657551 + 0.666266 1.73981 -0.991201 0.918423 -0.181836 0.351332 + 0.653929 1.77309 -0.908846 0.980147 -0.0816021 0.180704 + 0.801719 1.66092 -1.09516 -0.0503109 -0.227895 0.972385 + 0.727067 1.74912 -1.07274 0.276988 -0.481855 0.83132 + 0.701382 1.79018 -1.01185 0.770398 -0.17425 0.613289 + 0.665803 1.85544 -0.942675 0.951726 -0.0417351 0.304099 + 0.649583 1.8106 -0.813416 0.981967 -0.133608 0.133752 + 0.924731 1.54019 -1.09564 0.122894 -0.206633 0.97067 + 0.956135 1.59387 -1.09764 0.135844 -0.186392 0.973039 + 0.872103 1.65857 -1.07749 -0.104962 -0.498 0.860801 + 0.797451 1.74686 -1.05501 -0.282399 -0.438527 0.853197 + 0.857639 1.53971 -1.09341 0.0284716 -0.108768 0.993659 + 0.976813 1.48683 -1.12362 0.493183 -0.54229 0.680214 + 1.00822 1.5406 -1.12556 0.817988 -0.259632 0.513309 + 0.989639 1.62409 -1.09438 0.525123 -0.0615618 0.848797 + 0.905607 1.68879 -1.07423 0.279292 -0.713321 0.642783 + 0.883508 1.6865 -1.05088 -0.333675 -0.941855 -0.0396204 + 0.921701 1.47324 -1.1323 -0.217656 -0.728071 0.650029 + 0.977234 1.46075 -1.16166 0.561699 -0.820421 -0.106785 + 1.00584 1.5264 -1.17677 0.909123 -0.355602 -0.216894 + 1.0114 1.59751 -1.17953 0.997605 -0.014321 -0.0676686 + 1.01377 1.61179 -1.12827 0.964203 0.0650206 0.257071 + 0.971005 1.70035 -1.08785 0.673212 0.0295699 0.738858 + 0.922122 1.44708 -1.17038 -0.182077 -0.811392 0.55542 + 0.857639 1.53971 -1.09341 -0.618596 -0.743815 0.253138 + 0.547729 2.0507 -1.40088 -0.559879 -0.824023 0.086733 + 0.531356 2.07762 -1.31671 -0.0112687 -0.95303 0.302666 + 0.474402 2.06298 -1.36495 0.239511 -0.909373 -0.340109 + 0.474158 2.07625 -1.40354 -0.0695818 -0.980446 -0.184076 + 0.465143 2.07809 -1.44612 -0.119267 -0.985195 -0.123147 + 0.538714 2.05245 -1.44351 -0.55642 -0.798752 0.228893 + 0.588596 2.00453 -1.39151 -0.898385 -0.436873 0.0452392 + 0.531356 2.07762 -1.31671 -0.753587 -0.654347 0.062748 + 0.400545 2.05461 -1.39905 0.360664 -0.803443 -0.47371 + 0.400301 2.06788 -1.43764 0.354171 -0.892785 -0.278385 + 0.426899 2.08626 -1.47047 0.106958 -0.971244 -0.212707 + 0.47773 2.07946 -1.47809 -0.393151 -0.918755 0.0363416 + 0.445089 2.02378 -1.34266 0.518758 -0.456248 -0.723 + 0.388764 1.99841 -1.35531 0.279624 -0.388313 -0.87808 + 0.319803 2.01877 -1.40457 0.315089 -0.808891 -0.496401 + 0.359019 2.06661 -1.50784 0.373913 -0.898965 -0.228146 + 0.385616 2.08499 -1.54067 0.255332 -0.966667 0.0189735 + 0.502044 2.03843 -1.29442 0.201838 -0.365986 -0.908469 + 0.412598 1.90184 -1.34124 0.301508 0.0049376 -0.953451 + 0.356273 1.87655 -1.35384 -0.242239 -0.43785 -0.865799 + 0.289944 1.91605 -1.33405 -0.186541 -0.539196 -0.821261 + 0.308022 1.96257 -1.36083 0.10913 -0.57836 -0.80845 + 0.531356 2.07762 -1.31671 0.565559 -0.684525 -0.459966 + 0.575856 2.0112 -1.45386 -0.800007 -0.554324 0.229596 + 0.580338 1.98159 -1.50598 -0.856886 -0.50255 0.114844 + 0.63432 1.85705 -1.49726 -0.944821 -0.325087 0.0403969 + 0.697732 1.64315 -1.30438 -0.768268 -0.612395 -0.186378 + 0.514872 2.03813 -1.48851 -0.659248 -0.721121 0.213018 + 0.497177 2.05931 -1.52979 -0.565527 -0.824655 0.011116 + 0.562643 2.00285 -1.54721 -0.787953 -0.614582 0.037663 + 0.62704 1.86132 -1.54027 -0.920635 -0.387396 0.0485341 + 0.695448 1.66118 -1.35421 -0.862039 -0.496172 -0.103452 + 0.75621 1.58202 -1.2999 -0.267214 -0.962764 -0.0410026 + 0.439282 2.08334 -1.53762 -0.191282 -0.974035 0.121109 + 0.51533 2.05069 -1.57487 -0.607573 -0.792174 -0.0575836 + 0.555363 2.00713 -1.59022 -0.81299 -0.582006 0.0177664 + 0.439486 2.08755 -1.50251 -0.115273 -0.992837 0.031416 + 0.385413 2.08078 -1.57577 0.138568 -0.981181 0.134473 + 0.457435 2.07473 -1.5827 -0.229298 -0.967001 0.111045 + 0.515561 2.0499 -1.62109 -0.53729 -0.841135 0.0617415 + 0.555594 2.00625 -1.63649 -0.827284 -0.561476 0.0185904 + 0.297377 2.03902 -1.49545 0.35498 -0.912076 -0.205198 + 0.29011 2.04489 -1.55221 0.393179 -0.915676 -0.0833482 + 0.3657 2.07343 -1.60525 0.177192 -0.980202 0.0883553 + 0.359616 2.06797 -1.64419 0.124811 -0.987634 0.0948761 + 0.451351 2.06927 -1.62164 -0.148316 -0.980866 0.12611 + 0.258161 1.99109 -1.39224 0.259526 -0.876804 -0.404798 + 0.166984 1.95299 -1.35484 0.273097 -0.880025 -0.388553 + 0.140569 1.94325 -1.36118 0.523372 -0.83758 -0.156656 + 0.270961 2.02929 -1.5018 0.437071 -0.889907 -0.130519 + 0.239043 1.95976 -1.34897 -0.00762572 -0.667344 -0.74471 + 0.147866 1.92165 -1.31156 -0.00968685 -0.754085 -0.656706 + 0.112991 1.89426 -1.27811 0.0651212 -0.828291 -0.556502 + 0.078295 1.88988 -1.28734 0.486043 -0.831921 -0.267713 + 0.152396 1.95209 -1.41768 0.604537 -0.796573 -0.00249135 + 0.220964 1.91315 -1.32224 -0.1379 -0.589326 -0.796039 + 0.186089 1.88576 -1.28879 -0.161239 -0.700465 -0.695234 + 0.099451 1.85062 -1.21534 0.121784 -0.827132 -0.548655 + 0.064756 1.84625 -1.22456 0.345297 -0.803886 -0.48429 + 0.307145 1.88639 -1.30329 -0.0763115 -0.738844 -0.669542 + 0.090122 1.89871 -1.34383 0.601238 -0.796726 -0.0611623 + 0.171544 1.96768 -1.46809 0.512808 -0.85304 -0.0966938 + 0.270397 2.03754 -1.58169 0.41276 -0.904147 -0.110213 + 0.087235 1.90525 -1.39075 0.549947 -0.825664 -0.125846 + 0.171197 1.97345 -1.51008 0.481269 -0.865152 -0.14104 + 0.162867 1.97594 -1.54879 0.44374 -0.873146 -0.20177 + 0.262067 2.04011 -1.62035 0.38276 -0.920835 -0.0745459 + 0.02884 1.85513 -1.35635 0.327307 -0.941844 -0.0761579 + 0.086888 1.91102 -1.43274 0.567938 -0.815084 -0.114392 + 0.089782 1.91973 -1.48143 0.561941 -0.812529 -0.154978 + 0.173147 1.99886 -1.61009 0.431061 -0.885795 -0.171911 + 0.249812 2.03641 -1.65153 0.357099 -0.930957 -0.0761602 + -0.028838 1.8545 -1.31385 -0.210111 -0.977045 0.0351617 + -0.028838 1.85513 -1.35634 -0.348063 -0.934808 -0.0706067 + 0.031734 1.86393 -1.40499 0.337605 -0.933536 -0.120551 + 0.031734 1.86779 -1.44848 0.31907 -0.935751 -0.150211 + 0.100061 1.94265 -1.54273 0.566829 -0.807746 -0.162021 + -0.011004 1.92279 -1.16193 0.000143575 -0.91209 0.409991 + 0.994443 1.63158 -1.25994 0.451141 -0.445626 -0.773233 + 0.955513 1.48149 -1.19538 0.278587 -0.55692 -0.782451 + 0.874389 1.49643 -1.23266 0.306049 -0.442079 -0.843149 + 1.03052 1.69812 -1.27639 0.843935 -0.181655 0.504752 + 1.03288 1.78952 -1.25311 0.91013 -0.0638198 0.409378 + 1.00885 1.67572 -1.27419 0.305529 -0.381384 -0.872467 + 1.03288 1.78952 -1.25311 -0.216746 -0.128378 -0.96775 + 1.0202 1.61368 -1.22695 0.72889 -0.16296 -0.664954 + 0.922122 1.44708 -1.17038 0.256915 -0.513074 -0.818993 + 1.01446 1.69188 -1.20979 0.889155 0.0632542 0.453214 + 0.995087 1.68693 -1.18041 0.934164 0.201385 0.294589 + 0.995136 1.68804 -1.12174 0.938642 0.210084 0.273524 + 1.02713 1.86772 -1.23595 0.827111 -0.0210253 0.561645 + 0.992933 1.94976 -1.19305 0.708781 -0.0524788 0.703473 + 1.05983 1.83094 -1.29605 0.866174 -0.109213 0.487663 + 1.06221 1.92259 -1.27918 0.77134 -0.13212 0.622558 + 1.05748 1.73954 -1.31934 0.844177 -0.0109204 0.535954 + 1.09515 1.77972 -1.37113 0.936955 -0.161103 0.310098 + 1.09753 1.87136 -1.35425 0.820421 -0.209637 0.531942 + 1.12102 1.97158 -1.32344 0.747078 -0.25842 0.612448 + 1.02801 2.00471 -1.23623 0.730534 -0.171177 0.661073 + 1.05056 1.6794 -1.29078 0.719179 0.30666 0.623491 + 1.08036 1.67959 -1.33931 0.952271 0.0121125 0.305014 + 1.08457 1.69014 -1.39597 0.843293 -0.337756 -0.418065 + 1.09936 1.79026 -1.42779 0.817456 -0.444766 -0.365991 + 1.14099 1.87746 -1.41543 0.895959 -0.360931 0.258815 + 1.02216 1.67959 -1.28351 0.305812 0.00347126 0.952086 + 1.05968 1.62708 -1.22854 0.517828 0.615892 0.593744 + 1.07345 1.61946 -1.31076 0.942933 0.332733 -0.0129195 + 1.04813 1.6359 -1.39004 0.636789 -0.437044 -0.635211 + 1.03903 1.79188 -1.47559 0.66187 -0.559084 -0.499352 + 1.03127 1.62727 -1.22128 -0.294471 0.350689 0.88899 + 1.04195 1.61112 -1.2181 -0.0172773 -0.558898 0.829056 + 1.07094 1.61182 -1.22433 0.55557 0.69889 0.450437 + 1.08471 1.6042 -1.30653 -0.344203 0.874207 0.342471 + 1.06697 1.60458 -1.35498 0.910741 0.180925 -0.371236 + 0.970943 1.60308 -1.27899 -0.246095 -0.831474 0.498084 + 1.0649 1.61489 -1.27083 0.065591 -0.996733 -0.0471223 + 1.09389 1.61568 -1.277 -0.931783 -0.287204 -0.222022 + 1.07094 1.61182 -1.22433 0.0094432 -0.997581 -0.0688635 + 0.974214 1.60453 -1.30429 0.153899 -0.967906 0.198678 + 1.06817 1.61633 -1.29612 0.0398838 -0.998653 -0.0331873 + 1.07614 1.61597 -1.3255 -0.632925 -0.737396 0.235907 + 0.958138 1.59199 -1.32117 0.0683383 -0.826753 0.558399 + 1.05513 1.61691 -1.31914 0.149368 -0.986403 0.0685423 + 1.06311 1.61647 -1.34857 -0.252598 -0.914244 0.316782 + 1.06697 1.60458 -1.35498 -0.715491 -0.465826 0.520653 + 0.916015 1.58052 -1.33811 -0.0512089 -0.880662 0.470969 + 1.0045 1.56971 -1.36039 0.384251 -0.865048 0.322558 + 1.03906 1.60429 -1.33608 0.42292 -0.860697 0.283443 + 1.04445 1.60833 -1.36107 0.66917 -0.639706 -0.378136 + 0.999675 1.61762 -1.41156 0.577824 -0.513928 -0.634032 + 0.874885 1.58171 -1.35816 -0.155836 -0.935521 0.317042 + 0.869803 1.55489 -1.40731 -0.117366 -0.951148 0.285557 + 0.962381 1.55824 -1.37732 0.0737749 -0.961406 0.265058 + 0.962586 1.55538 -1.43136 0.16705 -0.984224 -0.0582934 + 1.00391 1.56712 -1.43049 0.500222 -0.861933 -0.0827651 + 1.00949 1.57435 -1.40242 0.746686 -0.664781 0.0229117 + 0.797842 1.56298 -1.45753 -0.373286 -0.8553 0.359333 + 0.828673 1.55607 -1.42736 -0.435269 -0.785725 0.439519 + 0.779727 1.56951 -1.42564 -0.419993 -0.901678 0.102872 + 0.764601 1.55928 -1.50431 -0.560087 -0.819925 0.118428 + 0.795433 1.55237 -1.47414 -0.408857 -0.847247 0.339128 + 0.718965 1.64867 -1.47995 -0.833241 -0.547865 -0.0745153 + 0.709268 1.66856 -1.55219 -0.910085 -0.336092 0.242461 + 0.741883 1.56683 -1.54499 -0.772004 -0.538919 0.337011 + 0.748333 1.58493 -1.27294 -0.168059 -0.98413 0.0569621 + 0.711105 1.59853 -1.28851 -0.392707 -0.580329 -0.713442 + 0.697732 1.64315 -1.30438 -0.36092 -0.406732 -0.839229 + 0.999675 1.61762 -1.41156 -0.606195 -0.520986 0.600917 + 0.617342 1.88121 -1.61252 -0.90865 -0.416987 0.0218258 + 0.614695 1.88295 -1.65654 -0.924023 -0.346765 0.161047 + 0.68655 1.67611 -1.59288 -0.899378 -0.247155 0.360602 + 0.735827 1.56272 -1.57048 -0.763838 -0.554399 0.330445 + 0.789377 1.54835 -1.49958 -0.338769 -0.907886 0.246939 + 0.552946 2.00791 -1.68057 -0.798235 -0.598307 0.069638 + 0.550943 2.00401 -1.7274 -0.801423 -0.589201 0.10278 + 0.602854 1.87946 -1.70009 -0.934379 -0.315812 0.16492 + 0.674709 1.67271 -1.63638 -0.903988 -0.220834 0.366111 + 0.510269 2.04669 -1.66974 -0.477782 -0.872512 0.102211 + 0.508265 2.04278 -1.71657 -0.476349 -0.872615 0.107861 + 0.550714 1.99679 -1.7715 -0.802137 -0.589271 0.0966212 + 0.602625 1.87233 -1.74413 -0.95172 -0.27653 0.13327 + 0.446058 2.06606 -1.67028 -0.136581 -0.986829 0.0866803 + 0.440412 2.06276 -1.71117 -0.132052 -0.985838 0.103375 + 0.507865 2.03663 -1.76551 -0.457713 -0.86867 0.189502 + 0.514368 2.02202 -1.8028 -0.577323 -0.808095 0.11696 + 0.557217 1.98227 -1.80875 -0.824748 -0.543819 0.155086 + 0.34736 2.06418 -1.67543 0.140809 -0.988981 0.0457112 + 0.341714 2.06088 -1.71631 0.118041 -0.992768 0.0218711 + 0.338668 2.061 -1.74972 0.081344 -0.996683 0.00225337 + 0.440012 2.0566 -1.76011 -0.176853 -0.979986 0.091382 + 0.251153 2.04122 -1.70027 0.319286 -0.94645 -0.0478393 + 0.248108 2.04134 -1.73368 0.381642 -0.924035 -0.022558 + 0.264373 2.05085 -1.77315 0.314288 -0.945223 -0.0881893 + 0.339247 2.05993 -1.79147 0.030166 -0.998423 -0.0473315 + 0.174488 2.00368 -1.65883 0.538045 -0.842662 0.0206794 + 0.189027 2.00479 -1.72437 0.501598 -0.864757 -0.0243829 + 0.205292 2.0143 -1.76384 0.356518 -0.923188 -0.143591 + 0.265035 2.05477 -1.80713 0.228708 -0.956795 -0.179543 + 0.339909 2.06385 -1.82546 -0.000285224 -0.995065 -0.0992229 + 0.111065 1.95909 -1.59961 0.587067 -0.809264 -0.0210554 + 0.125604 1.96012 -1.66519 0.335336 -0.92672 -0.169525 + 0.187894 2.01719 -1.79183 0.169331 -0.918047 -0.358491 + 0.247637 2.05774 -1.83508 0.26027 -0.935877 -0.237474 + 0.042738 1.88424 -1.50536 0.33673 -0.88782 -0.313669 + 0.042738 1.90673 -1.53852 0.0774374 -0.866322 -0.493446 + 0.040862 1.9282 -1.58431 -0.118476 -0.798496 -0.590226 + 0.123728 1.98159 -1.71098 -0.161344 -0.893084 -0.419963 + -0.031751 1.86788 -1.44843 -0.348314 -0.926419 -0.142913 + -0.042737 1.88423 -1.50535 -0.331087 -0.895377 -0.297794 + -0.042737 1.90673 -1.53852 0.13453 -0.849144 -0.510741 + -0.040873 1.9282 -1.58431 0.125077 -0.810713 -0.571926 + 0.040862 1.96688 -1.60749 -0.334689 -0.645822 -0.68622 + -0.031751 1.86393 -1.40499 -0.339445 -0.932228 -0.12541 + -0.100078 1.94265 -1.54273 -0.565744 -0.808957 -0.159757 + -0.111065 1.95909 -1.5996 -0.672005 -0.740429 0.0132315 + -0.125604 1.96012 -1.66519 -0.338467 -0.924021 -0.177833 + -0.12374 1.98159 -1.71098 0.0467623 -0.904869 -0.423113 + -0.089799 1.91981 -1.48138 -0.52149 -0.834869 -0.176187 + -0.162859 1.97594 -1.54879 -0.446653 -0.870728 -0.205752 + -0.173139 1.99886 -1.61009 -0.464722 -0.872677 -0.149894 + -0.174485 2.00368 -1.65883 -0.534945 -0.844501 0.0255376 + -0.086886 1.91101 -1.43273 -0.566541 -0.816399 -0.111913 + -0.171197 1.97345 -1.51008 -0.483083 -0.864242 -0.140419 + -0.262059 2.04011 -1.62035 -0.357959 -0.930292 -0.0801356 + -0.249804 2.03641 -1.65153 -0.348048 -0.935789 -0.0562269 + -0.25115 2.04123 -1.70028 -0.346664 -0.937405 -0.033101 + -0.087233 1.90524 -1.39074 -0.527614 -0.838987 -0.13313 + -0.171544 1.96768 -1.46809 -0.512997 -0.852862 -0.0972679 + -0.290109 2.04489 -1.55221 -0.392271 -0.916058 -0.0834259 + -0.270397 2.03754 -1.58169 -0.4122 -0.904524 -0.109213 + -0.031728 1.84797 -1.26694 0.437367 -0.897671 -0.0538279 + -0.090123 1.89872 -1.34384 -0.6065 -0.791501 -0.0753859 + -0.152415 1.95209 -1.41768 -0.604237 -0.7968 -0.0028008 + -0.064756 1.84625 -1.22456 0.0618531 -0.984561 0.163748 + -0.078296 1.88988 -1.28734 -0.788453 -0.592911 -0.163702 + -0.140588 1.94325 -1.36118 -0.523398 -0.837579 -0.156575 + -0.270981 2.02929 -1.5018 -0.437137 -0.889871 -0.130543 + -0.044032 1.92098 -1.1196 -0.0115868 -0.707289 0.706829 + -0.055769 1.94427 -1.11555 -0.910722 -0.180195 0.371638 + -0.099451 1.85062 -1.21534 -0.0480097 -0.996661 -0.0660425 + -0.112991 1.89426 -1.27811 -0.0651286 -0.828299 -0.556488 + -0.166982 1.95299 -1.35484 -0.273241 -0.880027 -0.388448 + -0.011004 2.20909 -0.926224 0.7156 -0.443972 0.539263 + -0.186089 1.88576 -1.28879 0.161232 -0.700466 -0.695235 + -0.220969 1.91315 -1.32224 0.137791 -0.589257 -0.796109 + -0.147871 1.92165 -1.31156 0.00972485 -0.754059 -0.656734 + -0.258158 1.99109 -1.39224 -0.259558 -0.876762 -0.404868 + -0.297374 2.03902 -1.49545 -0.35527 -0.91204 -0.204857 + -0.385413 2.08078 -1.57577 -0.138565 -0.981181 0.134478 + -0.289946 1.91605 -1.33405 0.277019 -0.573605 -0.770868 + -0.239048 1.95976 -1.34897 0.00738439 -0.667543 -0.744535 + -0.319803 2.01877 -1.40457 -0.317686 -0.806755 -0.498218 + -0.359019 2.06661 -1.50784 -0.374431 -0.899556 -0.224946 + -0.385615 2.08499 -1.54067 -0.255338 -0.966666 0.0189713 + -0.307158 1.88639 -1.30328 0.0762721 -0.738896 -0.669489 + 1.04089 1.60615 -1.42989 0.816785 -0.57681 -0.0123572 + 1.03531 1.59883 -1.45802 0.720083 -0.692699 -0.0406009 + 1.07254 1.68849 -1.48572 0.460321 0.326474 0.825542 + 0.958147 1.58084 -1.55326 0.318838 -0.928762 -0.189058 + 0.974159 1.59288 -1.59131 0.252233 -0.962968 -0.0952475 + 1.05132 1.61087 -1.49608 0.251025 -0.956782 -0.146815 + 1.09371 1.62534 -1.52933 0.734313 -0.600706 0.316129 + 1.11344 1.68017 -1.5459 0.899975 -0.129682 0.416207 + 0.91682 1.56909 -1.55411 0.230899 -0.95778 -0.171298 + 0.854296 1.57472 -1.65427 0.127203 -0.985126 -0.115527 + 0.984777 1.59709 -1.6334 0.217578 -0.976041 0.00205133 + 1.06806 1.61524 -1.58263 0.280751 -0.959757 -0.00679284 + 1.11045 1.62969 -1.61588 0.571944 -0.818042 0.0607276 + 0.870008 1.5521 -1.46128 0.102568 -0.994519 -0.0203004 + 0.835008 1.54712 -1.48826 0.0904825 -0.992795 0.0785595 + 0.88182 1.56411 -1.58109 0.333728 -0.928299 -0.163972 + 0.822507 1.53543 -1.53941 0.195749 -0.97751 0.0784601 + 0.808802 1.53514 -1.5703 0.149093 -0.97645 -0.15594 + 0.868116 1.5639 -1.61192 0.561916 -0.744045 -0.361451 + 0.776876 1.53665 -1.55073 -0.327038 -0.918534 0.222127 + 0.766598 1.5343 -1.58024 -0.239272 -0.970949 0.00269664 + 0.780273 1.54606 -1.61161 0.13826 -0.915184 -0.378579 + 0.765583 1.55312 -1.63144 0.167659 -0.857169 -0.486982 + 0.853425 1.57097 -1.63176 -0.00466186 -0.959275 -0.282436 + 0.708811 1.56323 -1.62117 -0.773408 -0.51719 0.366543 + 0.698533 1.56096 -1.65062 -0.690655 -0.685795 0.229522 + 0.738069 1.5453 -1.62151 -0.133907 -0.977187 -0.164845 + 0.710916 1.55531 -1.66445 0.00711219 -0.924414 -0.381325 + 0.750306 1.56372 -1.6498 0.234349 -0.853668 -0.465114 + 0.647693 1.67322 -1.68706 -0.924547 -0.16637 0.342832 + 0.67138 1.57105 -1.69351 -0.72205 -0.660574 0.205637 + 0.594177 1.86686 -1.79246 -0.96086 -0.237148 0.143211 + 0.639244 1.66784 -1.73534 -0.965609 -0.220461 0.137828 + 0.66662 1.5694 -1.74905 -0.563861 -0.822548 -0.0739995 + 0.695639 1.56591 -1.6828 0.0581625 -0.941151 -0.332944 + 0.751176 1.56747 -1.67231 0.050207 -0.994112 -0.096026 + 0.594023 1.85066 -1.8352 -0.96658 -0.252292 0.0455186 + 0.634484 1.66618 -1.79088 -0.959732 -0.279773 0.0253176 + 0.67391 1.57456 -1.78639 -0.470853 -0.849224 -0.238989 + 0.702929 1.57108 -1.72015 0.0412472 -0.996137 -0.0775247 + 0.768767 1.56808 -1.72116 0.0530425 -0.996764 -0.060392 + 0.557063 1.96606 -1.85148 -0.883195 -0.456076 0.109363 + 0.552771 1.96938 -1.88103 -0.887925 -0.459138 -0.0279655 + 0.594288 1.85134 -1.88378 -0.959408 -0.277764 -0.0488163 + 0.634749 1.66686 -1.83946 -0.927225 -0.358029 -0.10986 + 0.510076 2.02542 -1.8323 -0.604471 -0.796521 -0.0129642 + 0.555563 1.97222 -1.92336 -0.894779 -0.431104 -0.116272 + 0.59708 1.85427 -1.92606 -0.943277 -0.295349 -0.151648 + 0.638298 1.6843 -1.89185 -0.883089 -0.410002 -0.228147 + 0.677459 1.59199 -1.83878 -0.51054 -0.791386 -0.336239 + 0.44059 2.05553 -1.80185 -0.227041 -0.973863 0.00660674 + 0.516572 2.02379 -1.88107 -0.665881 -0.737829 -0.110502 + 0.520779 2.02929 -1.92639 -0.654446 -0.741409 -0.148369 + 0.55977 1.97772 -1.96868 -0.890791 -0.400217 -0.215214 + 0.603326 1.86842 -1.97277 -0.92247 -0.311388 -0.228225 + 0.447086 2.0539 -1.85062 -0.268111 -0.961703 -0.0569544 + 0.449094 2.05791 -1.89177 -0.280381 -0.951832 -0.124101 + 0.522501 2.03545 -1.97427 -0.612652 -0.773905 -0.160398 + 0.565518 1.9927 -2.01062 -0.860653 -0.477821 -0.175963 + 0.609074 1.8834 -2.01471 -0.891675 -0.341021 -0.297691 + 0.341917 2.06786 -1.86661 -0.0445563 -0.984371 -0.170377 + 0.340549 2.07585 -1.89925 -0.0944188 -0.969281 -0.227112 + 0.450816 2.06408 -1.93966 -0.300418 -0.939814 -0.16278 + 0.522957 2.04655 -2.01909 -0.582695 -0.798623 -0.150557 + 0.565974 2.00379 -2.05543 -0.830559 -0.50032 -0.244648 + 0.246269 2.06574 -1.86774 0.12086 -0.933249 -0.338289 + 0.259559 2.08354 -1.90636 0.0402131 -0.940388 -0.337718 + 0.338979 2.08419 -1.93909 -0.142759 -0.958185 -0.247996 + 0.449246 2.07242 -1.9795 -0.302975 -0.937516 -0.171086 + 0.17614 2.05015 -1.86073 0.0867517 -0.912287 -0.400258 + 0.18943 2.06804 -1.89932 0.143896 -0.918931 -0.367231 + 0.261 2.09316 -1.93783 -0.00387187 -0.955782 -0.294049 + 0.34042 2.09381 -1.97056 -0.162819 -0.948114 -0.273074 + 0.111974 2.01456 -1.77988 -0.27701 -0.859301 -0.429962 + 0.171277 2.07515 -1.92282 -0.0161006 -0.916453 -0.399819 + 0.242848 2.10027 -1.96134 0.0538339 -0.947297 -0.315802 + 0.337427 2.1054 -2.00943 -0.182357 -0.934912 -0.304442 + 0.437442 2.0831 -2.0248 -0.318361 -0.928611 -0.190599 + 0.035854 1.99695 -1.65639 -0.258966 -0.831457 -0.491545 + 0.106966 2.04463 -1.82877 -0.320906 -0.852873 -0.411858 + 0.158061 2.0999 -1.9735 -0.0158891 -0.920281 -0.390935 + 0.247097 2.11101 -1.99235 -0.0366604 -0.920525 -0.38896 + 0.341676 2.11606 -2.04048 -0.225425 -0.924514 -0.30734 + -0.040873 1.96688 -1.60749 0.447342 -0.605901 -0.657852 + -0.035869 1.99695 -1.65639 0.259909 -0.833199 -0.488085 + 0.035854 2.01767 -1.68967 -0.294139 -0.83197 -0.470434 + 0.093749 2.06938 -1.87943 -0.259546 -0.892635 -0.368563 + -0.111985 2.01456 -1.77988 0.275051 -0.855166 -0.43936 + -0.106981 2.04463 -1.82877 0.292868 -0.860237 -0.417396 + -0.093765 2.06929 -1.87949 0.2604 -0.89144 -0.370846 + -0.035869 2.01767 -1.68967 0.365537 -0.808481 -0.461239 + 0.025987 2.03612 -1.72583 -0.168121 -0.904856 -0.391115 + -0.187894 2.01719 -1.79183 -0.174317 -0.913408 -0.36783 + -0.17614 2.05015 -1.86073 -0.108508 -0.915471 -0.387478 + -0.171277 2.07515 -1.92282 0.011308 -0.913346 -0.407028 + -0.189024 2.00479 -1.72437 -0.486474 -0.872838 -0.0386927 + -0.205292 2.0143 -1.76384 -0.356607 -0.923126 -0.143773 + -0.247637 2.05774 -1.83508 -0.185314 -0.943872 -0.273431 + -0.248104 2.04134 -1.73368 -0.394612 -0.918022 -0.0389338 + -0.264373 2.05085 -1.77315 -0.314272 -0.94523 -0.088168 + -0.265035 2.05477 -1.80713 -0.228408 -0.956859 -0.179586 + -0.341714 2.06088 -1.71631 -0.105217 -0.993904 0.0329194 + -0.338669 2.061 -1.74972 -0.0692507 -0.997581 -0.00607547 + -0.339247 2.05993 -1.79147 -0.0202501 -0.999058 -0.0383757 + -0.339909 2.06385 -1.82546 0.0163608 -0.993846 -0.109556 + -0.34736 2.06418 -1.67543 -0.143915 -0.988425 0.0480109 + -0.440412 2.06276 -1.71117 0.12431 -0.986141 0.109878 + -0.440012 2.0566 -1.76011 0.162983 -0.983239 0.0817146 + -0.44059 2.05553 -1.80185 0.215503 -0.976374 0.0158792 + -0.447086 2.0539 -1.85062 0.262667 -0.962886 -0.0621016 + -0.359616 2.06797 -1.64419 -0.133723 -0.987247 0.0863842 + -0.446058 2.06606 -1.67028 0.140596 -0.985975 0.0899251 + -0.508265 2.04278 -1.71657 0.474703 -0.873774 0.105713 + -0.507865 2.03663 -1.76551 0.482399 -0.865182 0.136935 + -0.510076 2.02542 -1.8323 0.61025 -0.792073 0.0146968 + -0.3657 2.07343 -1.60525 -0.177184 -0.980204 0.088356 + -0.451351 2.06927 -1.62164 0.150486 -0.980798 0.124052 + -0.515571 2.0499 -1.62109 0.543541 -0.836332 0.0714971 + -0.510278 2.04669 -1.66974 0.492073 -0.865777 0.0910711 + -0.550943 2.00401 -1.7274 0.804281 -0.585967 0.0988655 + -0.457435 2.07473 -1.5827 0.229321 -0.966998 0.111025 + -0.515322 2.05069 -1.57487 0.576369 -0.816993 -0.0179433 + -0.555603 2.00625 -1.63649 0.817199 -0.575558 0.0303213 + -0.552956 2.00791 -1.68057 0.793023 -0.606439 0.0578475 + -0.439282 2.08334 -1.53762 0.191301 -0.974031 0.121108 + -0.497169 2.05931 -1.52979 0.558127 -0.829746 0.00398275 + -0.562635 2.00285 -1.54721 0.80071 -0.598515 0.0253719 + -0.555354 2.00713 -1.59022 0.821027 -0.569684 0.0370653 + -0.439484 2.08755 -1.50251 0.115367 -0.992835 0.0311252 + -0.47773 2.07946 -1.47809 0.392774 -0.91892 0.0362546 + -0.514858 2.03812 -1.4885 0.692738 -0.691325 0.205385 + -0.580324 1.98159 -1.50598 0.814622 -0.560088 -0.15064 + -0.63432 1.85705 -1.49726 0.921812 -0.387524 0.00933292 + -0.426897 2.08626 -1.47047 -0.106515 -0.971316 -0.212603 + -0.465143 2.07809 -1.44612 0.1193 -0.985214 -0.122965 + -0.538714 2.05245 -1.44351 0.55632 -0.798899 0.228624 + -0.575842 2.0112 -1.45386 0.771179 -0.440403 0.459704 + -0.600283 1.9196 -1.4594 0.922073 -0.387009 0.00237487 + -0.400301 2.06788 -1.43764 -0.317224 -0.909285 -0.269389 + -0.474158 2.07625 -1.40354 -0.000841495 -0.994941 -0.100453 + -0.547729 2.0507 -1.40088 0.595961 -0.794513 0.116533 + -0.588591 2.00453 -1.39152 0.893102 -0.445823 0.0600933 + -0.400545 2.05461 -1.39905 -0.351901 -0.801865 -0.482884 + -0.474401 2.06298 -1.36495 -0.445921 -0.790117 -0.420558 + -0.531356 2.07762 -1.31671 0.190772 -0.863539 -0.466805 + -0.572218 2.03154 -1.3073 0.643406 -0.517911 -0.563734 + -0.308024 1.96257 -1.36083 0.0454341 -0.434275 -0.899634 + -0.388766 1.99849 -1.35526 -0.301134 -0.3669 -0.880172 + -0.445089 2.02378 -1.34266 -0.518481 -0.45634 -0.72314 + -0.502044 2.03843 -1.29442 -0.201851 -0.365996 -0.908462 + -0.516749 1.9941 -1.29365 -0.16422 -0.00214567 -0.986421 + -0.356275 1.87655 -1.35384 0.209898 -0.484645 -0.849154 + -0.412598 1.90184 -1.34124 -0.301528 0.00494521 -0.953444 + -0.427303 1.85751 -1.34046 -0.0279439 -0.123754 -0.991919 + -0.307158 1.88639 -1.30328 0.544734 -0.814191 -0.200894 + -0.373487 1.84689 -1.32308 0.417849 -0.900289 -0.12199 + -0.436509 1.85922 -1.26723 0.429557 -0.543335 0.721296 + -0.49098 1.81562 -1.26952 0.751295 -0.349062 0.5601 + -0.427958 1.8033 -1.32537 0.457793 -0.606249 0.650299 + -0.475914 1.89309 -1.2211 0.782113 -0.491869 0.382575 + -0.500833 1.82957 -1.20268 0.939012 -0.332084 0.0893095 + -0.51418 1.75007 -1.25658 0.840412 -0.540167 0.0438927 + -0.427958 1.8033 -1.32537 0.652006 -0.0819838 0.753769 + -0.422755 1.953 -1.21965 0.844536 0.00795385 0.535439 + -0.45742 1.9356 -1.16112 0.9233 -0.216313 0.317374 + -0.482339 1.87208 -1.1427 0.945903 -0.307456 0.103623 + -0.506073 1.81232 -1.1118 0.958146 -0.27496 0.0797017 + -0.524033 1.76402 -1.18974 0.942365 -0.331354 0.0464063 + -0.38335 1.9192 -1.26572 0.640686 0.0840649 0.763187 + -0.406668 2.21423 -1.56392 0.802703 0.471233 0.365524 + -0.458864 2.00335 -1.18766 0.948296 0.193561 0.251535 + -0.470622 2.07197 -1.13612 0.989595 0.086953 0.114639 + -0.469178 2.00413 -1.10962 0.972673 0.00364498 0.232153 + -0.307158 1.88639 -1.30328 0.314201 -0.301025 0.900367 + -0.427958 1.8033 -1.32537 0.102436 -0.26789 -0.957988 + -0.503793 1.84717 -1.33935 -0.120804 0.0310537 -0.992191 + -0.548917 1.83148 -1.32838 -0.357764 0.0485685 -0.932548 + -0.561873 1.97841 -1.28268 0.147875 -0.106814 -0.983221 + -0.504448 1.79296 -1.32426 0.174015 -0.517839 -0.837593 + -0.541439 1.73998 -1.3119 0.364933 -0.463747 -0.807318 + -0.597746 1.77671 -1.30732 -0.189676 0.012338 -0.981769 + -0.589436 1.89582 -1.28503 0.103275 -0.0258392 -0.994317 + -0.599781 1.94896 -1.30966 0.87307 -0.263721 -0.410122 + -0.551171 1.69718 -1.24416 0.991708 -0.118923 0.0487045 + -0.542234 1.62171 -1.22585 0.780819 -0.375076 -0.499639 + -0.590268 1.68522 -1.29085 0.221149 -0.440923 -0.869873 + -0.631381 1.67812 -1.30036 -0.0164012 -0.488553 -0.87238 + -0.628198 1.74036 -1.30896 0.284703 -0.080724 -0.955211 + -0.541192 1.70115 -1.16484 0.992566 -0.116392 -0.0355904 + -0.532254 1.62568 -1.14653 0.996308 -0.0840098 0.0176845 + -0.556701 1.56805 -1.18832 0.482479 -0.752529 -0.448235 + -0.427958 1.8033 -1.32537 0.106893 -0.846721 -0.521189 + 0.998147 1.78121 -1.21072 0.176721 0.0027352 0.984257 + 0.973831 1.76895 -1.17167 0.931008 0.205379 0.301735 + 0.97388 1.77014 -1.11294 0.962471 0.214047 0.166836 + 0.948906 1.69815 -1.06444 0.65038 -0.758601 -0.0391053 + 0.97091 1.85955 -1.1818 0.645793 0.0168485 0.763327 + 0.947908 1.85511 -1.16152 0.872688 0.225909 0.432875 + 0.950398 1.84448 -1.0949 0.955143 0.277036 0.104658 + 0.940618 1.79502 -1.02983 0.988135 0.0332332 0.149946 + 0.9641 1.72068 -1.04788 0.953665 -0.172208 0.246715 + 0.901206 1.61571 -1.00085 0.845814 -0.530776 -0.0536267 + 0.965696 2.02809 -1.16413 0.73215 -0.09829 0.674014 + 0.937612 2.10506 -1.11184 0.459765 -0.284535 0.841223 + 0.944987 1.94571 -1.17164 0.118054 -0.164887 0.979222 + 0.914823 2.0173 -1.13822 0.454341 -0.170611 0.874338 + 0.918321 1.93126 -1.14001 0.856898 0.2115 0.470099 + 1.01448 2.0909 -1.18991 0.62502 -0.268693 0.732908 + 0.986391 2.16787 -1.13762 0.613835 -0.297592 0.731194 + 0.964182 2.25192 -1.0832 0.515252 -0.329734 0.791069 + 0.907448 2.17665 -1.07843 0.507999 -0.269674 0.818054 + 1.01446 1.69188 -1.20979 -0.601831 -0.101663 0.792126 + 1.10748 2.05776 -1.27712 0.655601 -0.30825 0.689325 + 1.09549 2.15062 -1.22155 0.636267 -0.307186 0.707673 + 1.07328 2.23468 -1.16714 0.605909 -0.333226 0.722381 + 1.16448 1.97777 -1.38457 0.876606 -0.270515 0.397974 + 1.17192 2.06806 -1.34315 0.851429 -0.241055 0.465792 + 1.15993 2.16082 -1.28762 0.792213 -0.25469 0.554556 + 1.15643 2.2665 -1.23506 0.773664 -0.244587 0.584483 + 1.05397 2.32482 -1.10727 0.575139 -0.330183 0.748462 + 1.17722 1.95109 -1.46175 0.928746 -0.342127 0.142757 + 1.18692 2.03124 -1.42838 0.943336 -0.220648 0.247853 + 1.19436 2.12152 -1.38695 0.912291 -0.221821 0.344267 + 1.20373 2.19955 -1.34889 0.87031 -0.266113 0.41442 + 1.20022 2.30514 -1.29638 0.823583 -0.222867 0.521576 + 1.13559 1.86389 -1.47411 0.772915 -0.587424 -0.239867 + 1.16166 1.92269 -1.53557 0.773735 -0.633217 -0.0192284 + 1.20451 1.99043 -1.53648 0.924552 -0.348469 0.154186 + 1.2142 2.0705 -1.50317 0.940541 -0.271985 0.203488 + 1.23862 2.16438 -1.46977 0.926123 -0.269104 0.264348 + 1.0651 1.85068 -1.53704 0.803781 -0.572182 0.162926 + 1.18043 1.92842 -1.63808 0.800181 -0.549045 0.24137 + 1.22327 1.99606 -1.63905 0.930457 -0.325114 0.168969 + 1.24255 2.08485 -1.60643 0.943292 -0.286116 0.168336 + 1.26697 2.17874 -1.57305 0.900717 -0.375908 0.217721 + 1.00259 1.73764 -1.46965 0.911143 -0.354519 -0.210083 + 1.03402 1.78122 -1.51992 0.819924 -0.155853 0.550849 + 0.98083 1.64894 -1.44662 0.914052 0.402404 0.0507898 + 1.01227 1.69252 -1.49689 0.506191 0.324629 0.798991 + 1.19025 1.85053 -1.68118 0.923312 -0.229289 0.308094 + 0.999675 1.61762 -1.41156 0.0173156 0.75015 0.661041 + 0.9164 1.63825 -0.984295 0.740895 -0.606086 0.289368 + 0.943193 1.68178 -0.955688 0.87374 -0.484211 0.0460162 + 0.912573 1.69183 -0.920301 -0.500376 -0.688659 0.52476 + 0.885779 1.6483 -0.948908 -0.301474 -0.649747 0.697812 + 0.901206 1.61571 -1.00085 0.425495 -0.704292 0.568267 + 0.942229 1.8297 -1.0013 0.994588 0.102939 0.0140512 + 0.944804 1.71646 -0.927156 0.999425 -0.0305215 -0.0147637 + 0.942828 1.68755 -0.866894 0.998141 -0.0411194 0.0449861 + 0.945445 1.76854 -0.856961 0.99584 0.0460406 0.0786322 + 0.934322 1.71336 -0.760589 0.598627 -0.707114 0.376344 + 0.920811 1.92063 -1.0734 0.925506 0.374322 0.0576395 + 0.930003 1.89001 -1.01636 0.953451 0.300533 0.0246987 + 0.947421 1.79745 -0.917232 0.994185 0.101218 0.0367644 + 0.882867 2.01003 -1.11103 0.861614 0.220036 0.457389 + 0.886784 1.98825 -1.04451 0.909922 0.407703 0.0762849 + 0.895976 1.95763 -0.987472 0.920109 0.390461 0.030656 + 0.935195 1.85775 -0.932285 0.962104 0.265439 0.0624326 + 0.879369 2.09615 -1.1092 0.321053 -0.253941 0.912381 + 0.845327 2.17518 -1.06869 0.448241 -0.259466 0.855428 + 0.849735 2.0802 -1.07638 0.878367 0.198379 0.434876 + 0.853651 2.05842 -1.00985 0.91679 0.398687 0.0233236 + 0.881246 1.99862 -0.951473 0.926245 0.376605 -0.0154823 + 0.879442 2.25536 -1.02896 0.267248 -0.391944 0.880317 + 0.845399 2.33448 -0.9884 0.0790563 -0.382344 0.920632 + 0.809396 2.42101 -0.952472 0.270372 -0.321581 0.90746 + 0.808738 2.24592 -1.02162 0.612162 -0.17746 0.770562 + 0.813146 2.15103 -1.02926 0.916703 0.217531 0.335167 + 0.936176 2.33064 -1.03375 0.491946 -0.322704 0.80861 + 0.91135 2.41981 -0.9836 0.385384 -0.286813 0.87705 + 0.875347 2.50634 -0.947673 0.339144 -0.271432 0.900725 + 0.84901 2.5959 -0.908795 0.348091 -0.260138 0.900645 + 0.776939 2.49672 -0.913018 0.150996 -0.336835 0.929377 + 1.02915 2.41408 -1.05708 0.530968 -0.318174 0.785391 + 1.01347 2.5095 -1.00474 0.499452 -0.26853 0.823674 + 0.987138 2.59905 -0.965853 0.474369 -0.204146 0.856328 + 1.11549 2.42714 -1.11729 0.705029 -0.262086 0.658972 + 1.09981 2.52255 -1.06495 0.684773 -0.222131 0.694077 + 1.10261 2.61414 -1.04439 0.712006 -0.102851 0.6946 + 0.958832 2.696 -0.930375 0.47887 -0.227707 0.84784 + 1.13711 2.35673 -1.17514 0.751653 -0.263745 0.60453 + 1.17913 2.52014 -1.17458 0.827472 -0.163829 0.537075 + 1.18193 2.61173 -1.15402 0.747321 -0.218951 0.627353 + 1.0743 2.71118 -1.00886 0.634746 -0.167597 0.754326 + 1.20076 2.44965 -1.23248 0.806375 -0.215933 0.550575 + 1.26461 2.50664 -1.301 0.707621 -0.297575 0.640876 + 1.25061 2.61971 -1.22144 0.662115 -0.340955 0.667348 + 1.17847 2.75048 -1.09314 0.681459 -0.21774 0.698715 + 1.26406 2.36205 -1.36495 0.827636 -0.300358 0.474135 + 1.33952 2.57633 -1.3355 0.677111 -0.40554 0.61405 + 1.32552 2.6894 -1.25595 0.644429 -0.334869 0.68744 + 1.24715 2.75846 -1.16056 0.64424 -0.279807 0.711802 + 1.15569 2.85747 -1.04705 0.643262 -0.174932 0.745394 + 1.24798 2.24232 -1.43177 0.885961 -0.32003 0.33564 + 1.33449 2.41726 -1.46819 0.768124 -0.41294 0.489354 + 1.4176 2.48106 -1.51169 0.562564 -0.550139 0.617146 + 1.42262 2.64013 -1.379 0.606178 -0.441856 0.661295 + 1.35603 2.76998 -1.24792 0.598128 -0.363393 0.714275 + 1.31841 2.29753 -1.535 0.812886 -0.464384 0.351518 + 1.43417 2.38079 -1.61921 0.552759 -0.682558 0.478092 + 1.53345 2.52886 -1.54308 0.396722 -0.594562 0.699363 + 1.49076 2.72627 -1.3838 0.454796 -0.502434 0.735337 + 1.42417 2.85621 -1.25266 0.47138 -0.451471 0.757611 + 1.28924 2.1782 -1.66811 0.884098 -0.433425 0.174684 + 1.34068 2.29708 -1.63003 0.761071 -0.612964 0.212241 + 1.38679 2.33015 -1.6615 0.589487 -0.744131 0.314283 + 1.52086 2.36081 -1.75201 0.317471 -0.810465 0.492299 + 1.55002 2.42859 -1.6506 0.319272 -0.73415 0.59924 + 1.26074 2.09963 -1.71582 0.932064 -0.343325 0.115697 + 1.31454 2.19299 -1.78813 0.81329 -0.555462 0.173264 + 1.36065 2.22605 -1.8196 0.626467 -0.72319 0.290751 + 1.47347 2.31008 -1.79434 0.436712 -0.833116 0.339412 + 1.24146 2.01092 -1.74839 0.965315 -0.257614 0.0424489 + 1.24278 2.03662 -1.8647 0.939585 -0.338999 -0.0475287 + 1.28605 2.1145 -1.83579 0.901687 -0.431892 0.0207403 + 1.29907 2.1611 -1.92471 0.807038 -0.545618 -0.225813 + 1.39568 2.23147 -1.89478 0.597069 -0.780679 -0.184524 + 1.21483 1.91541 -1.79335 0.978002 -0.208562 -0.0036083 + 1.21616 1.94119 -1.90961 0.974387 -0.219436 -0.0491665 + 1.20434 1.9139 -1.99994 0.980805 -0.158822 -0.113129 + 1.21327 1.99216 -2.01029 0.96728 -0.169182 -0.189066 + 1.25581 2.08331 -1.95357 0.909478 -0.351334 -0.222294 + 1.20517 1.85808 -1.77485 0.977937 -0.203172 0.048575 + 1.18278 1.76785 -1.93897 0.9789 -0.193564 -0.0654797 + 1.17096 1.74047 -2.02934 0.959981 -0.25989 -0.104377 + 1.16752 1.80589 -2.15486 0.954694 -0.207466 -0.213347 + 1.17645 1.88415 -2.16522 0.942118 -0.0382446 -0.333092 + 1.17745 1.71176 -1.83562 0.936087 -0.350697 0.0274444 + 1.17311 1.71051 -1.92046 0.938578 -0.339105 -0.0638635 + 1.15142 1.68191 -2.03092 0.968679 -0.207435 -0.1365 + 1.16252 1.70413 -1.742 0.944067 -0.305173 0.124926 + 1.13874 1.64637 -1.84257 0.698468 -0.714866 -0.0333007 + 1.15142 1.68191 -2.03092 0.913985 -0.383838 -0.131527 + 1.1428 1.64929 -1.72542 0.852678 -0.512774 0.100018 + 1.11866 1.63277 -1.6602 0.472415 -0.881191 -0.0180574 + 1.151 1.65245 -1.7697 0.728805 -0.680928 0.0719691 + 1.07868 1.61952 -1.62466 0.260139 -0.963641 -0.0610206 + 1.13374 1.64126 -1.6999 0.395596 -0.91711 0.0491234 + 1.09376 1.62793 -1.66441 0.262589 -0.964091 -0.0396832 + 1.13429 1.63956 -1.72157 0.593647 -0.799579 0.0908634 + 1.15155 1.65076 -1.79137 0.575327 -0.817291 -0.0321529 + 0.983657 1.59513 -1.65601 0.235754 -0.962681 0.132913 + 1.09264 1.62597 -1.68702 0.356762 -0.92549 0.12724 + 1.11412 1.62372 -1.75273 0.461114 -0.886532 0.0378739 + 1.10131 1.61933 -1.80392 0.429413 -0.899486 -0.0808002 + 1.05968 1.60678 -1.84059 0.378753 -0.924359 -0.0458907 + 0.962638 1.58518 -1.67937 0.158432 -0.978443 0.132473 + 1.07247 1.61012 -1.71818 0.354357 -0.923003 0.149987 + 1.05145 1.60017 -1.74154 0.307079 -0.949714 0.0612074 + 1.00982 1.58762 -1.7782 0.172976 -0.98369 -0.0493352 + 1.04654 1.60198 -1.86107 0.174137 -0.96499 -0.19614 + 0.862281 1.57804 -1.67641 0.0931563 -0.990595 -0.100212 + 0.90641 1.58098 -1.68711 0.0536302 -0.99854 -0.00642122 + 0.776752 1.5714 -1.74331 0.194425 -0.953838 -0.228891 + 0.783099 1.58057 -1.76098 0.174883 -0.95598 -0.235623 + 0.827227 1.58351 -1.77167 0.0109612 -0.984911 -0.172712 + 0.953589 1.58342 -1.78594 0.0390918 -0.990586 -0.131189 + 0.733873 1.5759 -1.7889 0.119775 -0.950791 -0.285747 + 0.740219 1.58506 -1.80657 0.219833 -0.880022 -0.420994 + 0.729381 1.60414 -1.84241 0.272837 -0.748053 -0.604961 + 0.782992 1.61007 -1.84089 -0.0277679 -0.867597 -0.496492 + 0.835885 1.59909 -1.83347 -0.0936769 -0.928144 -0.360239 + 0.72052 1.57168 -1.769 -0.00286543 -0.990885 -0.134677 + 0.690812 1.59621 -1.85868 -0.135229 -0.854711 -0.50118 + 0.679974 1.61528 -1.89451 0.377307 -0.765326 -0.521455 + 0.644544 1.69845 -1.93856 -0.850646 -0.419864 -0.316411 + 0.679974 1.61528 -1.89451 -0.933281 -0.34537 0.0985241 + 0.657005 1.72042 -1.98722 -0.799496 -0.443119 -0.405526 + 0.692435 1.63725 -1.94316 -0.716957 -0.539359 -0.441661 + 0.679974 1.61528 -1.89451 -0.726925 -0.53663 -0.428494 + 0.618961 1.9043 -2.05851 -0.866897 -0.378982 -0.323825 + 0.666892 1.74132 -2.03102 -0.734983 -0.471582 -0.487248 + 0.702546 1.66783 -1.99233 -0.0219185 -0.890527 -0.454403 + 0.628127 1.91379 -2.10014 -0.854525 -0.417905 -0.308451 + 0.680883 1.77302 -2.07412 -0.744353 -0.48553 -0.458475 + 0.716537 1.69952 -2.03542 -0.0872129 -0.839277 -0.536664 + 0.575139 2.01336 -2.097 -0.774972 -0.609114 -0.168518 + 0.575473 2.02009 -2.14067 -0.70299 -0.708263 -0.0645623 + 0.637969 1.92843 -2.1431 -0.846333 -0.47816 -0.234698 + 0.690725 1.78757 -2.11712 -0.788109 -0.507852 -0.347807 + 0.729336 1.72366 -2.08744 -0.192497 -0.878335 -0.437576 + 0.511152 2.05723 -2.06439 -0.485559 -0.867525 -0.107859 + 0.511486 2.06396 -2.10805 -0.547314 -0.820497 -0.16502 + 0.58823 2.00932 -2.18261 -0.751994 -0.654913 -0.0747964 + 0.650726 1.91757 -2.18509 -0.872408 -0.471314 -0.129487 + 0.434449 2.09469 -2.06367 -0.372701 -0.893503 -0.250493 + 0.506492 2.07895 -2.15301 -0.544495 -0.829369 -0.125188 + 0.508242 2.08118 -2.19707 -0.544658 -0.837964 -0.0341302 + 0.589979 2.01155 -2.22667 -0.746194 -0.657017 -0.107346 + 0.429455 2.10959 -2.10868 -0.372252 -0.89973 -0.227848 + 0.426015 2.12053 -2.14762 -0.374498 -0.918667 -0.125708 + 0.499475 2.08507 -2.24461 -0.506715 -0.861706 0.0265007 + 0.594652 2.01541 -2.26976 -0.708885 -0.703051 -0.0565841 + 0.338236 2.127 -2.07943 -0.267992 -0.909635 -0.317403 + 0.33785 2.1411 -2.11065 -0.303875 -0.90752 -0.289944 + 0.417248 2.12441 -2.19516 -0.410398 -0.908732 -0.0760271 + 0.48074 2.09326 -2.3066 -0.558767 -0.82853 0.0362838 + 0.510478 2.07515 -2.28504 -0.570969 -0.817278 0.07779 + 0.264106 2.12716 -2.02732 -0.114793 -0.897597 -0.425608 + 0.263721 2.14117 -2.05859 -0.136458 -0.902535 -0.408423 + 0.25955 2.15094 -2.07891 -0.144676 -0.906434 -0.396794 + 0.326549 2.15319 -2.1476 -0.3484 -0.901596 -0.256404 + 0.405947 2.13659 -2.23205 -0.483291 -0.867556 -0.117372 + 0.17507 2.11596 -2.00852 0.00177045 -0.90716 -0.420782 + 0.170899 2.12573 -2.02884 0.0719704 -0.910264 -0.407725 + 0.248157 2.16615 -2.10865 -0.108761 -0.934486 -0.33898 + 0.315156 2.1684 -2.17734 -0.35421 -0.900309 -0.252939 + 0.159007 2.13113 -2.04539 0.120753 -0.926079 -0.357487 + 0.236265 2.17147 -2.12526 0.0254303 -0.970293 -0.240592 + 0.295471 2.1831 -2.2082 -0.188415 -0.975883 -0.110237 + 0.38386 2.15237 -2.27137 -0.476518 -0.87343 -0.100257 + 0.458653 2.10904 -2.34592 -0.60858 -0.793344 0.0153674 + 0.127671 2.12562 -2.04185 -0.054145 -0.936223 -0.34721 + 0.211459 2.17238 -2.14525 0.139326 -0.979542 -0.145211 + 0.270665 2.18392 -2.22823 -0.0497684 -0.993653 -0.100876 + 0.364174 2.16698 -2.30229 -0.502063 -0.845702 -0.18089 + 0.426257 2.13531 -2.39723 -0.677894 -0.732475 -0.062769 + 0.083882 2.08784 -1.9156 -0.264595 -0.900368 -0.345436 + 0.100328 2.13502 -2.05032 -0.104897 -0.948047 -0.300338 + 0.146993 2.16015 -2.15325 0.0947447 -0.974619 -0.202835 + 0.180123 2.16687 -2.14169 0.186481 -0.962434 -0.197349 + 0.025987 2.05142 -1.76373 -0.208507 -0.901287 -0.379745 + 0.056539 2.09723 -1.92407 -0.239743 -0.91712 -0.318456 + 0.072668 2.13843 -2.06243 -0.0528516 -0.962844 -0.264835 + 0.119333 2.16347 -2.1654 -0.0430622 -0.975191 -0.217137 + 0.206692 2.18146 -2.25856 0.148823 -0.987598 -0.0500119 + -0.025977 2.03612 -1.72583 0.168117 -0.905339 -0.389998 + -0.025977 2.05142 -1.76373 0.276984 -0.88459 -0.375207 + 0.011625 2.06196 -1.78159 -0.138052 -0.892613 -0.429166 + 0.042178 2.10776 -1.94192 -0.197782 -0.939715 -0.278958 + -0.083873 2.08784 -1.9156 0.263369 -0.899651 -0.348231 + -0.05653 2.09723 -1.92407 0.240676 -0.915964 -0.321068 + -0.042178 2.10776 -1.94192 0.183491 -0.938271 -0.293221 + -0.011625 2.06196 -1.78159 0.1385 -0.894316 -0.42546 + 0.011625 2.08203 -1.81914 -0.45952 -0.767627 -0.446756 + -0.127671 2.12562 -2.04185 0.0642568 -0.920803 -0.384698 + -0.100328 2.13502 -2.05032 0.0741297 -0.945151 -0.31811 + -0.072668 2.13843 -2.06243 0.0536213 -0.962334 -0.266531 + -0.020866 2.11114 -1.94717 0.410788 -0.874217 -0.258839 + -0.011625 2.08203 -1.81914 0.647897 -0.649197 -0.398462 + -0.158061 2.0999 -1.9735 0.0038983 -0.923565 -0.383421 + -0.17507 2.11596 -2.00852 -0.0538746 -0.910176 -0.410704 + -0.170899 2.12573 -2.02884 -0.0814251 -0.902378 -0.423182 + -0.159006 2.13113 -2.04539 -0.119246 -0.927615 -0.353993 + -0.180123 2.16687 -2.14169 -0.164198 -0.968946 -0.184887 + -0.242848 2.10027 -1.96134 -0.0138784 -0.941603 -0.336439 + -0.247097 2.11101 -1.99235 0.0460035 -0.92402 -0.379565 + -0.264106 2.12716 -2.02732 0.114963 -0.897662 -0.425426 + -0.263721 2.14117 -2.05859 0.136896 -0.902412 -0.408549 + -0.25955 2.15094 -2.07891 0.144677 -0.906435 -0.396793 + -0.189428 2.06804 -1.89932 -0.143543 -0.918847 -0.367581 + -0.260998 2.09316 -1.93783 0.0038661 -0.955783 -0.294049 + -0.340421 2.09381 -1.97056 0.182245 -0.942206 -0.281131 + -0.337429 2.1054 -2.00943 0.185472 -0.93537 -0.301135 + -0.341678 2.11606 -2.04048 0.242006 -0.918396 -0.313022 + -0.259557 2.08354 -1.90636 -0.0403483 -0.940346 -0.337817 + -0.33898 2.08419 -1.93909 0.148525 -0.959011 -0.241326 + -0.437442 2.0831 -2.0248 0.314833 -0.928536 -0.196729 + -0.43445 2.09469 -2.06367 0.365523 -0.89702 -0.248491 + -0.429457 2.10959 -2.10868 0.370975 -0.899499 -0.230824 + -0.246269 2.06574 -1.86774 -0.0986639 -0.945306 -0.310905 + -0.340548 2.07585 -1.89925 0.106115 -0.966711 -0.23283 + -0.449247 2.07242 -1.9795 0.294349 -0.940763 -0.168298 + -0.341916 2.06786 -1.86661 0.0503669 -0.985137 -0.164218 + -0.450815 2.06408 -1.93966 0.29727 -0.94016 -0.166522 + -0.522957 2.04655 -2.01909 0.596232 -0.793401 -0.122566 + -0.511152 2.05723 -2.06439 0.516766 -0.847458 -0.121522 + -0.511485 2.06396 -2.10805 0.538179 -0.823708 -0.178514 + -0.449093 2.05791 -1.89177 0.272106 -0.954851 -0.119236 + -0.520794 2.02929 -1.92639 0.661218 -0.737992 -0.134754 + -0.522516 2.03537 -1.97433 0.643903 -0.743746 -0.179529 + -0.565974 2.00379 -2.05543 0.796459 -0.564439 -0.216935 + -0.516572 2.02379 -1.88107 0.665865 -0.737832 -0.110575 + -0.559785 1.97772 -1.96868 0.876198 -0.436896 -0.203467 + -0.565533 1.99261 -2.01067 0.854261 -0.482859 -0.192575 + -0.552771 1.96938 -1.88103 0.887936 -0.459114 -0.027991 + -0.555563 1.97222 -1.92336 0.89484 -0.430939 -0.116422 + -0.597085 1.85418 -1.9261 0.942802 -0.298046 -0.149304 + -0.603334 1.86842 -1.97277 0.916039 -0.322945 -0.237864 + -0.609082 1.88331 -2.01476 0.890919 -0.346005 -0.294184 + -0.514372 2.02202 -1.8028 0.761433 -0.638277 0.113238 + -0.557067 1.96606 -1.85148 0.883078 -0.456279 0.109467 + -0.594023 1.85066 -1.8352 0.966753 -0.251769 0.0447406 + -0.594293 1.85134 -1.88378 0.957728 -0.282989 -0.0517112 + -0.557221 1.98226 -1.80874 0.824846 -0.543675 0.155067 + -0.594177 1.86686 -1.79246 0.960993 -0.23646 0.143457 + -0.634484 1.66618 -1.79088 0.959525 -0.280525 0.024858 + -0.634754 1.66686 -1.83946 0.92789 -0.356015 -0.110789 + -0.638303 1.68421 -1.8919 0.885992 -0.405678 -0.224598 + -0.550714 1.99679 -1.7715 0.803544 -0.587014 0.0986484 + -0.602625 1.87233 -1.74413 0.958586 -0.260788 0.114468 + -0.639244 1.66784 -1.73534 0.965476 -0.220812 0.138194 + -0.602854 1.87955 -1.70004 0.941382 -0.286731 0.177721 + -0.647692 1.67322 -1.68706 0.924954 -0.195323 0.32605 + -0.671382 1.57105 -1.69351 0.771201 -0.603015 0.204014 + -0.666623 1.5694 -1.74905 0.571741 -0.81744 -0.0700294 + -0.673911 1.57456 -1.78639 0.290986 -0.911775 -0.289815 + -0.614695 1.88295 -1.65654 0.929028 -0.337637 0.151352 + -0.674709 1.67271 -1.63638 0.897458 -0.23081 0.375893 + -0.735823 1.56272 -1.57048 0.766215 -0.550049 0.332204 + -0.708806 1.56324 -1.62117 0.765484 -0.520409 0.378429 + -0.617342 1.88121 -1.61252 0.917994 -0.395065 0.0347914 + -0.68655 1.67611 -1.59288 0.89776 -0.278795 0.341028 + -0.741883 1.56683 -1.54499 0.771661 -0.539409 0.337011 + -0.789372 1.54835 -1.49959 0.339912 -0.907341 0.247369 + -0.62704 1.86132 -1.54027 0.913981 -0.400713 0.0637825 + -0.709268 1.66856 -1.55219 0.905355 -0.343962 0.249045 + -0.764601 1.55928 -1.50431 0.55999 -0.819957 0.11867 + -0.795433 1.55237 -1.47414 0.40947 -0.846557 0.34011 + -0.718965 1.64867 -1.47995 0.840284 -0.537683 -0.0694279 + -0.779727 1.56951 -1.42564 0.418519 -0.902479 0.101849 + -0.797832 1.56316 -1.45743 0.371349 -0.856028 0.359604 + -0.828664 1.55625 -1.42726 0.438238 -0.782213 0.442821 + -0.869795 1.5549 -1.40733 0.118829 -0.950683 0.286499 + -0.695448 1.66118 -1.35421 0.863235 -0.492792 -0.109461 + -0.75621 1.58202 -1.2999 0.267065 -0.962814 -0.0408011 + -0.85677 1.58823 -1.32627 -0.0438062 -0.986232 0.15946 + -0.874876 1.58179 -1.35811 0.155722 -0.935971 0.315768 + -0.916007 1.58053 -1.33812 0.0515232 -0.880915 0.470462 + -0.636581 1.83901 -1.44743 0.909857 -0.392923 -0.133311 + -0.697709 1.64323 -1.30433 0.731193 -0.604022 -0.317039 + -0.711105 1.59853 -1.28851 0.392562 -0.579307 -0.714351 + -0.748335 1.58493 -1.27294 0.167833 -0.984176 0.0568265 + -0.65654 1.77702 -1.40086 0.946832 -0.314013 0.0700285 + -0.686108 1.69237 -1.37664 0.937616 -0.343276 -0.0551146 + -0.639299 1.83442 -1.40348 0.940583 -0.311006 0.136304 + -0.686108 1.69237 -1.37664 0.942462 -0.274508 0.190815 + -0.660427 1.78791 -1.35351 0.938143 -0.341573 -0.0567117 + -0.684331 1.71531 -1.35037 0.936451 -0.275172 0.217579 + -0.692772 1.67708 -1.37616 0.942 -0.303974 0.142255 + -0.613032 1.91293 -1.39706 0.952444 -0.29688 0.0686564 + -0.626048 1.87036 -1.31612 0.906816 -0.350627 -0.233978 + -0.619887 1.85947 -1.28666 0.501903 -0.163292 -0.849369 + -0.654266 1.77702 -1.32406 0.757721 -0.206092 -0.619181 + -0.699814 1.69538 -1.32206 0.673289 -0.67932 -0.291902 + -0.657449 1.71478 -1.31545 0.192012 -0.364222 -0.911303 + -0.699814 1.69538 -1.32206 0.216656 -0.144532 -0.96549 + -0.631718 1.61943 -1.2503 -0.0311826 -0.668894 -0.742703 + -0.658401 1.60355 -1.2296 -0.332418 -0.729388 -0.597906 + -0.684132 1.6989 -1.29475 0.278865 -0.794212 -0.539872 + -0.741925 1.62467 -1.29797 0.704304 -0.653188 -0.278033 + -0.604736 1.63147 -1.25336 0.224865 -0.62885 -0.7443 + -0.605073 1.57287 -1.20325 0.380604 -0.709631 -0.592929 + -0.636539 1.55107 -1.1577 -0.297041 -0.837696 -0.458292 + -0.711337 1.62078 -1.18883 0.101616 -0.871829 -0.479154 + -0.726242 1.62827 -1.2706 0.71587 -0.651824 -0.250309 + -0.590567 1.53741 -1.13503 0.339035 -0.899062 -0.277024 + -0.622033 1.51561 -1.08948 0.343836 -0.87628 -0.337507 + -0.635697 1.4879 -1.04188 0.00751525 -0.934855 -0.35495 + -0.689475 1.5683 -1.11694 -0.350767 -0.863784 -0.361717 + -0.755178 1.57902 -1.16811 0.378852 -0.869663 -0.316478 + -0.545593 1.57539 -1.10483 0.897589 -0.433879 0.0779912 + -0.579459 1.54475 -1.05154 0.767467 -0.641044 -0.00753826 + -0.599094 1.50618 -1.01114 0.793352 -0.600673 -0.0989179 + -0.612758 1.47846 -0.963537 0.279977 -0.883991 0.374396 + -0.650522 1.48642 -1.01532 -0.715281 -0.68983 0.111835 + -0.567352 1.65255 -1.00526 0.992325 -0.0191993 0.122159 + -0.567033 1.58604 -0.954669 0.970839 -0.211109 0.113597 + -0.586668 1.54747 -0.914262 0.806259 -0.525457 0.271736 + -0.617201 1.53206 -0.889963 -0.00423025 -0.831079 0.556138 + -0.554013 1.70283 -1.04696 0.961291 -0.182841 0.206127 + -0.553473 1.76406 -0.988607 0.948561 -0.222102 0.225614 + -0.565723 1.7357 -0.938079 0.992174 -0.124417 -0.0104999 + -0.565405 1.66919 -0.887485 0.988102 -0.0941568 0.121607 + -0.581715 1.61732 -0.84404 0.850924 -0.310676 0.423567 + -0.523232 1.74945 -1.0869 0.932527 -0.334931 0.134959 + -0.522692 1.81068 -1.02855 0.920143 -0.237118 0.311627 + -0.534472 1.87048 -0.966136 0.95338 -0.223758 0.20248 + -0.546722 1.84212 -0.915617 0.977181 -0.159196 0.14062 + -0.503299 1.87251 -1.05165 0.938181 -0.206877 0.277522 + -0.515079 1.9324 -0.989183 0.951914 -0.111092 0.285516 + -0.536851 1.93903 -0.89247 0.976825 -0.131189 0.16912 + -0.567757 1.78059 -0.839841 0.976729 -0.119337 0.178214 + -0.584067 1.72863 -0.796446 0.968529 -0.167063 0.184503 + -0.479565 1.93227 -1.08255 0.963501 -0.125677 0.23637 + -0.492001 2.01237 -1.04649 0.948521 -0.0337905 0.314907 + -0.496957 2.08891 -1.01227 0.973452 -0.0328019 0.226527 + -0.520036 2.00887 -0.955024 0.974866 -0.0986475 0.199762 + -0.481613 2.08432 -1.07351 0.923746 -0.0504893 0.379664 + -0.505886 2.17583 -0.98122 0.992226 0.0217894 0.122524 + -0.509794 2.09676 -0.93526 0.988415 -0.0781303 0.130122 + -0.52661 2.02693 -0.872705 0.98329 -0.138406 0.118259 + -0.490542 2.17132 -1.0424 0.978338 0.0821304 0.190023 + -0.49373 2.54348 -1.26601 0.999342 0.00589675 0.0357823 + -0.506727 2.26545 -0.910037 0.999197 -0.0214141 0.033875 + -0.510635 2.18637 -0.864076 0.996615 -0.0523124 0.0634119 + -0.467295 2.31933 -1.42137 0.985123 0.123665 0.119328 + -0.487215 2.4186 -1.32771 0.995357 0.0661781 0.0698997 + -0.442777 2.26449 -1.53198 0.929293 0.282405 0.238039 + -0.456831 2.73908 -1.99399 0.986106 0.134142 0.0979889 + -0.470319 2.85022 -1.94529 0.9968 0.0652334 0.0461988 + -0.476834 2.9751 -1.88358 0.999986 -0.00210731 0.00484943 + -0.432314 2.68433 -2.10455 0.971987 0.199479 0.124294 + -0.443245 2.88386 -2.37756 0.830384 0.52645 -0.182517 + -0.46452 2.95675 -2.31301 0.896288 0.33638 -0.288992 + -0.478007 3.06789 -2.2643 0.924597 0.171125 -0.340349 + -0.406533 2.64024 -2.2384 0.884267 0.411198 0.221333 + -0.417465 2.83978 -2.51141 0.364933 0.765226 -0.530333 + -0.469929 2.87812 -2.40661 0.14398 0.810099 -0.56834 + -0.491204 2.95109 -2.34201 0.375426 0.547034 -0.748204 + -0.349571 2.16502 -1.59929 0.637748 0.619766 0.457348 + -0.349436 2.59104 -2.27377 0.512443 0.750513 0.417292 + -0.361948 2.7581 -2.62793 0.359333 0.854852 0.374311 + -0.409998 2.77346 -2.58234 0.765625 0.602423 0.225621 + -0.273379 2.13212 -1.6369 0.254902 0.790299 0.557182 + -0.257731 2.58286 -2.30601 0.0841082 0.86008 0.503178 + -0.270242 2.74992 -2.66017 0.578968 0.745126 0.331033 + -0.307158 1.88639 -1.30328 0.267175 0.762781 0.588883 + -0.186089 1.88576 -1.28879 -0.121253 0.80607 0.579265 + -0.182064 2.14381 -1.64916 -0.111481 0.80854 0.577784 + -0.166416 2.59446 -2.3183 -0.2985 0.80161 0.517996 + -0.138812 2.83607 -2.68899 -0.742492 0.669326 -0.0266218 + -0.164632 2.7747 -2.71669 -0.800169 0.471337 -0.370906 + -0.230933 2.71078 -2.69637 -0.569766 0.606267 -0.554803 + -0.095427 2.10859 -1.57575 -0.531619 0.696565 0.481848 + -0.062398 2.67037 -2.31079 -0.395123 0.831159 0.39122 + -0.034794 2.91207 -2.68142 -0.284627 0.948242 0.1408 + -0.034794 2.88076 -2.79778 -0.297152 0.744523 -0.597817 + -0.060614 2.81939 -2.82549 -0.541063 0.486951 -0.68566 + -0.099451 1.85062 -1.21534 -0.795101 0.497334 0.347093 + -0.046205 2.12026 -1.46977 -0.910752 0.371934 0.179433 + -0.013176 2.68204 -2.2048 -0.445739 0.883173 0.14602 + 0.062399 2.67037 -2.31079 0.399386 0.826521 0.396678 + 0.034794 2.91207 -2.68142 0.284652 0.948231 0.140826 + 0.034794 2.88076 -2.79778 0.30504 0.779772 -0.546723 + -0.031447 2.23142 -1.4257 -0.995398 0.0920102 0.0267833 + -0.013176 2.64772 -1.98235 -0.871707 0.443988 -0.207369 + 0.013176 2.64772 -1.98235 0.872058 0.435194 -0.223876 + 0.013176 2.68204 -2.2048 0.445656 0.883314 0.145421 + -0.04101 2.05543 -1.07148 -0.944183 0.197634 -0.263551 + -0.030452 2.20762 -1.25668 -0.998651 0.0512888 -0.00810898 + -0.012182 2.62392 -1.81333 -0.999068 0.0418518 -0.0105813 + 0.00729 2.80633 -1.93447 -0.992372 0.121137 0.0228938 + -0.041014 2.1598 -1.00965 -0.998697 0.0508875 -0.00390431 + -0.04101 2.12203 -1.03943 -0.999756 0.00996567 -0.0197393 + -0.030452 2.27413 -1.22468 -0.998667 -0.00298986 -0.0515299 + -0.02556 2.45654 -1.34582 -0.999583 0.0134728 -0.0255595 + -0.00729 2.80633 -1.93447 -0.610295 -0.0995614 -0.785893 + 0.00729 2.80633 -1.93447 0 -0.553235 -0.833025 + -0.051236 2.00431 -1.06212 -0.685473 -0.375545 0.623773 + -0.036481 2.21983 -0.956232 -0.99162 -0.0178171 0.127951 + -0.026884 2.45107 -1.11594 -0.997671 0.0651839 0.020107 + -0.025563 2.49432 -1.31605 -0.99952 0.0292854 -0.0100625 + -0.03649 2.28937 -0.889273 -0.878614 -0.0850716 0.469894 + -0.026893 2.5207 -1.04894 -0.931517 0.231986 0.280105 + -0.011004 2.20909 -0.926224 0.0760722 -0.561671 0.823856 + 0.00729 2.80633 -1.93447 0 0.314016 -0.949418 + -0.230933 2.71078 -2.69637 0.787045 0.5682 0.240225 + 1.12127 1.64042 -1.94785 -0.317944 -0.790147 -0.524004 + 1.15142 1.68191 -2.03092 0.948434 -0.3157 -0.0284066 + 0.016514 2.25648 -0.879903 0.776853 -0.00706368 0.629642 + -0.409998 2.77346 -2.58234 -0.740481 0.341366 -0.578928 + -0.462462 2.81189 -2.4775 -0.568156 0.516505 -0.640641 + -0.531689 2.93747 -2.3582 0.065333 0.57323 -0.816786 + -0.50897 3.07022 -2.29494 0.46853 0.315402 -0.825228 + -0.413206 2.61819 -2.66241 -0.497029 0.532658 -0.685009 + -0.449813 2.61727 -2.64002 -0.32977 0.609351 -0.721071 + -0.499068 2.81097 -2.45511 -0.21711 0.587325 -0.779687 + -0.361948 2.7581 -2.62793 -0.452281 0.416146 -0.788837 + -0.365156 2.60283 -2.70801 -0.350217 0.538606 -0.766324 + -0.446128 2.39177 -2.86763 -0.414887 0.721435 -0.554437 + -0.475367 2.54895 -2.68768 -0.38227 0.612555 -0.691842 + -0.556401 2.77007 -2.49266 -0.129048 0.635654 -0.761111 + -0.589022 2.89656 -2.39575 -0.194771 0.579782 -0.791149 + -0.270242 2.74992 -2.66017 -0.281987 0.456403 -0.843907 + -0.325847 2.56369 -2.74422 -0.25929 0.594643 -0.761031 + -0.204709 2.60208 -2.77249 -0.525392 0.541078 -0.656656 + -0.230387 2.49807 -2.86374 -0.494574 0.656453 -0.569619 + -0.351525 2.45968 -2.83546 -0.313763 0.705908 -0.635017 + -0.138408 2.666 -2.79281 -0.659639 0.374018 -0.65191 + -0.201101 2.45831 -2.94429 -0.366786 0.729211 -0.577685 + -0.333607 2.29487 -3.0612 -0.368372 0.72948 -0.576334 + -0.38881 2.23339 -3.1151 -0.0893524 0.680593 -0.727193 + -0.406728 2.39811 -2.88941 -0.342595 0.774223 -0.532172 + -0.033806 2.75669 -2.8853 -0.591287 0.455811 -0.665294 + -0.1116 2.60339 -2.85257 -0.551518 0.451658 -0.701307 + -0.145455 2.47997 -2.93701 -0.269226 0.663349 -0.698202 + -0.234477 2.30039 -3.15796 -0.372612 0.690146 -0.62037 + -0.304321 2.25512 -3.14175 -0.593571 0.591758 -0.545431 + -0.350353 2.16381 -3.16919 -0.639689 0.438702 -0.631141 + -0.007876 2.73617 -2.92294 -0.350781 0.468796 -0.810668 + -0.057432 2.52427 -2.95573 -0.592475 0.432198 -0.679837 + -0.091287 2.40085 -3.04016 -0.122002 0.711941 -0.69156 + -0.178832 2.32205 -3.15067 -0.0637383 0.737679 -0.672136 + 0.007879 2.73617 -2.92294 0.345702 0.452125 -0.822237 + -0.007876 2.52092 -3.00333 -0.298719 0.397261 -0.867727 + -0.031502 2.50374 -2.99337 -0.62924 0.354526 -0.691642 + -0.031473 2.38415 -3.06184 -0.22481 0.603237 -0.765223 + -0.047726 2.34737 -3.09734 -0.000692336 0.730375 -0.683046 + 0.033806 2.75669 -2.8853 0.677335 0.354392 -0.644688 + 0.031505 2.50374 -2.99337 0.629258 0.354532 -0.691622 + 0.007879 2.52092 -3.00333 0.298718 0.397264 -0.867726 + -0.007848 2.40133 -3.07179 -0.324993 0.542027 -0.774975 + 0.060613 2.81939 -2.82549 0.635719 0.439739 -0.634422 + 0.1116 2.60339 -2.85257 0.551519 0.451666 -0.701302 + 0.057432 2.52427 -2.95573 0.592496 0.432196 -0.67982 + 0.03148 2.38415 -3.06184 0.224564 0.603292 -0.765251 + 0.007854 2.40133 -3.07179 0.324986 0.542032 -0.774974 + 0.164631 2.7747 -2.71669 0.800169 0.471334 -0.37091 + 0.138407 2.666 -2.79281 0.659627 0.374025 -0.651918 + 0.145455 2.47997 -2.93701 0.268966 0.662206 -0.699386 + 0.091287 2.40085 -3.04016 0.153104 0.703494 -0.694014 + 0.047727 2.34738 -3.09734 0.000404965 0.730374 -0.683048 + 0.138812 2.83607 -2.68899 0.74248 0.669341 -0.0265605 + 0.257731 2.58286 -2.30601 -0.0876816 0.863071 0.497414 + 0.230933 2.71078 -2.69637 0.569748 0.606277 -0.55481 + 0.166417 2.59446 -2.3183 0.288668 0.797265 0.530132 + 0.095427 2.10859 -1.57575 0.527492 0.690172 0.495393 + 0.182065 2.14381 -1.64916 0.0843685 0.821569 0.563832 + 0.273379 2.13212 -1.6369 -0.261582 0.783301 0.563928 + 0.046205 2.12026 -1.46977 0.948433 0.25557 0.187506 + 0.064756 1.84625 -1.22456 0.855419 0.376344 0.355841 + 0.031447 2.23142 -1.4257 0.995229 0.0931339 0.0290761 + 0.036018 2.0989 -1.02776 0.988156 0.106063 -0.110896 + 0.049543 1.96837 -1.07328 0.995808 0.0878904 0.0253151 + 0.064756 1.84625 -1.22456 0.995484 0.091141 0.0265352 + 0.012182 2.62392 -1.81333 0.99935 0.03588 -0.00343977 + 0.030452 2.20762 -1.25668 0.99872 0.050545 -0.00164767 + 0.036617 2.12995 -1.02614 0.999934 -0.0106089 -0.0044382 + 0.00729 2.80633 -1.93447 0.999369 0.0338723 0.0106468 + -0.350353 2.16381 -3.16919 0.0529504 0.631009 -0.773966 + 0.03663 2.30385 -0.897355 0.999827 0.0135726 -0.0127152 + 0.036617 2.19646 -0.99414 0.999907 0.00717034 -0.0116362 + 0.03662 2.23423 -0.964364 0.999869 0.0120505 -0.0108013 + 0.026886 2.45107 -1.11594 0.999407 0.0327774 -0.0105639 + 0.030452 2.27413 -1.22468 0.999662 0.0113855 -0.02336 + 0.025561 2.45654 -1.34582 0.999656 0.0133546 -0.0225628 + 0.025564 2.49432 -1.31605 0.999591 0.0268187 -0.00991077 + 0.008613 2.95866 -1.66912 0.653216 0.699 0.291048 + 0.008613 2.52374 -1.02842 0.354026 0.619904 0.700275 + 0.00729 2.80633 -1.93447 0.999643 0.00881096 -0.0252111 + 0.00729 2.80633 -1.93447 0.999638 0.0166024 -0.0211621 + -0.318018 2.1931 -3.18552 -0.64503 0.530517 -0.54999 + -0.248174 2.23837 -3.20173 -0.409537 0.584682 -0.700304 + -0.191271 2.24886 -3.2109 -0.0693939 0.625955 -0.776766 + -0.129043 2.23586 -3.21559 -0.0403564 0.638843 -0.768278 + -0.116604 2.30914 -3.15531 0.0698724 0.722511 -0.68782 + -0.073042 2.25566 -3.21249 0.0214699 0.603984 -0.796707 + -0.0241 2.22116 -3.23232 0.223686 0.468088 -0.854903 + -0.032099 2.17756 -3.24701 -0.300288 -0.158146 -0.940647 + -0.081041 2.21207 -3.22718 -0.450354 -0.271353 -0.850617 + -0.129043 2.23586 -3.21559 -0.0643849 0.329374 -0.942002 + -0.007848 2.25785 -3.19687 -0.0128833 0.626788 -0.779083 + 0.009784 2.14998 -3.24683 0.286438 -0.361634 -0.887229 + -0.009793 2.14998 -3.24684 -0.283293 -0.388088 -0.877002 + -0.057733 2.16318 -3.18711 -0.683371 -0.50201 -0.530085 + -0.088709 2.19606 -3.17486 -0.599271 -0.631342 -0.492222 + 0.007854 2.25785 -3.19687 0.0135554 0.620051 -0.784445 + 0.024101 2.22116 -3.23232 -0.321714 0.432609 -0.842229 + 0.032099 2.17755 -3.247 0.285428 -0.160409 -0.944881 + 0.035418 2.1356 -3.18694 0.682134 -0.458799 -0.569383 + 0.009784 2.10533 -3.19671 0.312958 -0.725233 -0.613266 + -0.009793 2.10534 -3.19672 -0.312869 -0.724859 -0.613752 + 0.073043 2.25567 -3.2125 -0.0214286 0.603882 -0.796786 + 0.081041 2.21207 -3.22718 0.461091 -0.235483 -0.855537 + 0.057733 2.16318 -3.1871 0.674272 -0.535415 -0.508613 + 0.083967 2.13643 -3.14198 0.599704 -0.300238 -0.741763 + 0.06521 2.11575 -3.14935 0.594944 -0.265207 -0.758753 + 0.116604 2.30914 -3.15531 -0.0651908 0.729148 -0.681244 + 0.129042 2.23586 -3.21559 0.0403984 0.638798 -0.768313 + 0.19127 2.24886 -3.2109 0.0694461 0.62592 -0.776789 + 0.178832 2.32205 -3.15067 0.0561378 0.742644 -0.667329 + 0.234475 2.30039 -3.15796 0.372622 0.690143 -0.620367 + 0.248177 2.23837 -3.20173 0.409587 0.58472 -0.700244 + 0.201098 2.45831 -2.94429 0.366757 0.729216 -0.577696 + 0.304318 2.25512 -3.14175 0.593548 0.591756 -0.545459 + 0.31802 2.1931 -3.18552 0.645089 0.530539 -0.549899 + 0.230391 2.49807 -2.86374 0.494556 0.656466 -0.56962 + 0.333611 2.29487 -3.0612 0.368457 0.72947 -0.576292 + 0.350348 2.16381 -3.16919 0.704639 0.505005 -0.498452 + 0.204709 2.60208 -2.77249 0.525397 0.541079 -0.656651 + 0.351529 2.45968 -2.83546 0.313768 0.705906 -0.635017 + 0.406727 2.39811 -2.88941 0.342517 0.774218 -0.53223 + 0.388809 2.23339 -3.1151 0.0915615 0.6895 -0.718475 + 0.350348 2.16381 -3.16919 -0.088849 0.641514 -0.761949 + 0.393486 2.18026 -3.16149 -0.112469 0.647904 -0.753373 + 0.325847 2.56369 -2.74422 0.259282 0.594632 -0.761043 + 0.446128 2.39177 -2.86763 0.414807 0.721467 -0.554455 + 0.451255 2.25163 -3.07989 0.33271 0.695687 -0.636651 + 0.455932 2.1985 -3.12628 0.402806 0.621866 -0.671588 + 0.393486 2.18026 -3.16149 0.218372 0.652678 -0.725483 + 0.270244 2.74992 -2.66017 0.281983 0.456419 -0.8439 + 0.365158 2.60283 -2.70801 0.350234 0.5386 -0.76632 + 0.36195 2.7581 -2.62793 0.452291 0.416145 -0.788833 + 0.409998 2.77346 -2.58234 0.74047 0.341373 -0.578938 + 0.413206 2.61819 -2.66241 0.497038 0.532655 -0.685005 + 0.462462 2.81189 -2.4775 0.568235 0.516443 -0.640621 + 0.499068 2.81097 -2.45511 0.217087 0.587319 -0.779698 + 0.449813 2.61727 -2.64002 0.329823 0.609345 -0.721052 + 0.417464 2.83978 -2.5114 -0.365156 0.765216 -0.530194 + 0.469928 2.87812 -2.40661 -0.144009 0.810101 -0.568329 + 0.531689 2.93747 -2.3582 -0.169709 0.517115 -0.838923 + 0.556401 2.77007 -2.49266 0.129042 0.635644 -0.76112 + 0.58196 2.70165 -2.54037 0.34765 0.562426 -0.750211 + 0.475371 2.54895 -2.68768 0.382261 0.612566 -0.691837 + 0.443244 2.88386 -2.37756 -0.830348 0.526504 -0.182523 + 0.464522 2.95676 -2.31302 -0.897812 0.3331 -0.288058 + 0.491206 2.9511 -2.34202 -0.374928 0.545713 -0.749418 + 0.549455 3.05667 -2.31108 0.169685 0.422691 -0.890247 + 0.589022 2.89656 -2.39575 0.202176 0.561392 -0.802473 + 0.40654 2.64024 -2.2384 -0.883762 0.41017 0.225221 + 0.43232 2.68433 -2.10455 -0.974885 0.184017 0.125449 + 0.456831 2.73908 -1.99399 -0.986289 0.134004 0.096312 + 0.478009 3.06797 -2.26425 -0.924978 0.172248 -0.338744 + 0.508972 3.07022 -2.29494 -0.467015 0.317391 -0.825324 + 0.409998 2.77346 -2.58234 -0.765625 0.602418 0.225635 + 0.36195 2.7581 -2.62793 -0.359337 0.854849 0.374314 + 0.349436 2.59104 -2.27377 -0.505605 0.758477 0.411187 + 0.406675 2.21423 -1.56392 -0.798571 0.482637 0.359648 + 0.442784 2.26449 -1.53198 -0.932561 0.282969 0.224186 + 0.467295 2.31933 -1.42137 -0.985252 0.122309 0.119664 + 0.470319 2.85022 -1.94529 -0.996754 0.0662457 0.0457528 + 0.349571 2.16502 -1.59929 -0.634105 0.617943 0.46482 + 0.383337 1.9192 -1.26572 -0.672311 -0.00124287 0.740268 + 0.422755 1.95308 -1.2196 -0.704806 -0.0179974 0.709172 + 0.458864 2.00335 -1.18766 -0.964596 0.108898 0.240199 + 0.270244 2.74992 -2.66017 -0.578955 0.745135 0.331035 + 0.230933 2.71078 -2.69637 -0.78703 0.568219 0.24023 + 0.129042 2.23586 -3.21559 0.0644217 0.328979 -0.942137 + 0.307145 1.88639 -1.30329 -0.542571 0.649074 0.533217 + 0.480623 2.19749 -3.09233 0.362943 0.566643 -0.739722 + 0.490656 2.24529 -3.05811 0.520403 0.650578 -0.553108 + 0.509415 2.1894 -3.09931 0.455896 0.622136 -0.636479 + 0.565038 2.15256 -3.06872 0.803158 0.503868 -0.317891 + 0.546279 2.20846 -3.02752 0.677107 0.566185 -0.470064 + 0.576688 2.13834 -3.04387 -0.0601419 -0.217417 -0.974224 + 0.473219 2.43685 -2.79011 0.507879 0.605489 -0.612733 + 0.57337 2.25345 -2.95005 0.345375 0.698932 -0.626266 + 0.599183 2.42489 -2.7486 0.286103 0.68804 -0.666892 + 0.65657 2.36347 -2.79322 0.437725 0.675891 -0.592932 + 0.630757 2.19211 -2.99461 0.225267 0.600956 -0.766881 + 0.601336 2.53699 -2.64617 0.393818 0.578579 -0.714251 + 0.677919 2.54619 -2.58509 0.592926 0.503555 -0.628388 + 0.700677 2.34287 -2.76293 0.705752 0.55509 -0.440216 + 0.702641 2.19183 -2.96792 0.457771 0.586314 -0.668342 + 0.658544 2.71084 -2.47928 0.55527 0.483449 -0.676722 + 0.733518 2.69688 -2.4195 0.668498 0.43335 -0.604416 + 0.751342 2.50776 -2.52614 0.69828 0.443283 -0.562054 + 0.783212 2.34884 -2.62608 0.718171 0.489483 -0.494607 + 0.709789 2.38727 -2.68504 0.779784 0.45942 -0.425288 + 0.636617 2.85949 -2.39415 0.507461 0.494197 -0.70587 + 0.711591 2.84553 -2.33437 0.630863 0.447285 -0.633994 + 0.802339 2.68845 -2.3385 0.726678 0.391408 -0.56457 + 0.820163 2.49925 -2.44519 0.789892 0.356433 -0.499026 + 0.638357 3.03011 -2.26808 0.541585 0.45227 -0.708617 + 0.697201 3.05442 -2.19217 0.576616 0.386934 -0.71958 + 0.770435 2.86984 -2.25847 0.680048 0.405366 -0.610911 + 0.894426 2.68315 -2.21772 0.770299 0.277584 -0.574097 + 0.590762 3.06718 -2.26968 0.476981 0.368642 -0.797867 + 0.588448 3.23589 -2.21229 0.669453 0.211068 -0.712238 + 0.634906 3.22009 -2.17392 0.615188 0.257919 -0.744998 + 0.776695 3.07793 -2.1311 0.493319 0.256638 -0.831128 + 0.862523 2.86462 -2.13763 0.583459 0.34318 -0.736073 + 0.547142 3.22538 -2.25369 0.453372 0.180983 -0.872753 + 0.542813 3.40623 -2.23413 0.578812 0.159623 -0.799686 + 0.57015 3.42786 -2.18299 0.757566 0.203239 -0.620312 + 0.616608 3.41206 -2.14463 0.663809 0.235384 -0.709895 + 0.7144 3.24369 -2.1128 0.581099 0.269512 -0.767911 + 0.513561 3.21526 -2.26297 -0.269929 0.156558 -0.950067 + 0.509232 3.39612 -2.24342 -0.170948 0.0590479 -0.983509 + 0.510975 3.56567 -2.21989 0.668912 0.223092 -0.709075 + 0.538313 3.58721 -2.1688 0.794228 0.304578 -0.52577 + 0.619672 3.48872 -2.11141 0.750214 0.310856 -0.583565 + 0.482598 3.21302 -2.23229 -0.92284 0.0444947 -0.382604 + 0.47536 3.38339 -2.21817 -0.871412 -0.068937 -0.485684 + 0.448788 3.53384 -2.21555 -0.774776 -0.247451 -0.581799 + 0.48266 3.54656 -2.24079 0.00278559 0.0256981 -0.999666 + 0.463356 3.69601 -2.21324 0.670272 0.279488 -0.687475 + 0.476834 2.9751 -1.88358 -0.99997 -0.00143462 0.00754503 + 0.469596 3.14547 -1.86948 -0.994934 -0.0858837 -0.0522469 + 0.451787 3.26083 -1.83669 -0.952288 -0.261039 -0.158135 + 0.399831 3.66393 -2.24569 -0.875164 -0.403234 -0.267377 + 0.49373 2.54348 -1.26601 -0.999343 0.00816976 0.0353259 + 0.494948 2.63292 -1.14452 -0.996782 -0.076722 -0.0232157 + 0.477139 2.7482 -1.11179 -0.987412 -0.143962 -0.0655108 + 0.465519 2.78306 -1.02856 -0.96844 -0.225712 -0.105725 + 0.40283 3.39093 -1.86683 -0.896832 -0.3773 -0.230949 + 0.487215 2.41869 -1.32766 -0.995291 0.0660846 0.0709138 + 0.490541 2.17124 -1.04245 -0.978541 0.0811493 0.189399 + 0.505886 2.17583 -0.98122 -0.992248 0.0075929 0.124039 + 0.506727 2.26545 -0.910037 -0.999323 -0.0209609 0.0302518 + 0.507945 2.3548 -0.788592 -0.998115 -0.0605284 0.010089 + 0.470621 2.07197 -1.13612 -0.988659 0.0860481 0.123083 + 0.481612 2.08431 -1.0735 -0.975834 0.0184801 0.217731 + 0.496957 2.08883 -1.01232 -0.958089 -0.0243643 0.285432 + 0.469177 2.00413 -1.10962 -0.97259 0.00594725 0.232449 + 0.479563 1.93218 -1.0826 -0.949778 -0.124338 0.28716 + 0.491999 2.01237 -1.04649 -0.947713 -0.046703 0.315689 + 0.520036 2.00887 -0.955024 -0.976567 -0.0859685 0.197299 + 0.45742 1.9356 -1.16112 -0.980677 -0.160428 0.111959 + 0.482339 1.87208 -1.1427 -0.947319 -0.302591 0.105005 + 0.503297 1.87252 -1.05166 -0.941491 -0.186516 0.280725 + 0.515077 1.93232 -0.989242 -0.958975 -0.109645 0.261429 + 0.475913 1.89309 -1.2211 -0.806349 -0.425524 0.410767 + 0.500832 1.82957 -1.20268 -0.941159 -0.328798 0.078175 + 0.524033 1.76402 -1.18974 -0.941246 -0.334725 0.0448846 + 0.506073 1.81232 -1.1118 -0.957115 -0.276476 0.0865558 + 0.436496 1.8593 -1.26718 -0.466891 -0.530503 0.707517 + 0.490999 1.81553 -1.26956 -0.75349 -0.555674 0.351396 + 0.514199 1.75007 -1.25657 -0.875709 -0.482828 -0.00331005 + 0.551181 1.69709 -1.24422 -0.903034 -0.323384 -0.282757 + 0.54119 1.70115 -1.16484 -0.985668 -0.0840994 -0.14624 + 0.373475 1.84698 -1.32303 -0.460123 -0.887518 -0.0244592 + 0.427977 1.80321 -1.32542 -0.38086 -0.714159 0.587301 + 0.504467 1.79287 -1.32431 -0.373739 -0.60172 -0.70587 + 0.541449 1.73998 -1.3119 -0.352566 -0.515199 -0.781196 + 0.307145 1.88639 -1.30329 -0.126312 -0.605969 0.785396 + -0.7043 1.56683 -1.09039 -0.0579134 -0.910528 -0.40937 + -0.809256 1.55981 -1.16444 0.621692 -0.782816 0.0264271 + -0.770083 1.58651 -1.24989 0.822565 -0.56759 -0.0350532 + -0.771717 1.58314 -1.26884 0.902702 -0.430264 -0.00125148 + -0.792052 1.49776 -1.24696 0.795663 -0.604491 0.0388702 + -0.758379 1.54753 -1.08676 0.319953 -0.8652 -0.386082 + -0.85984 1.52061 -1.14415 0.578219 -0.689216 0.436628 + -0.790419 1.50113 -1.22799 0.764077 -0.599054 0.239417 + -0.828509 1.49337 -1.21855 -0.171815 0.0361979 -0.984464 + -0.664227 1.55392 -1.05243 0.250962 -0.804405 -0.538471 + -0.841003 1.46202 -1.20765 0.108578 -0.364707 -0.92477 + -0.874387 1.49643 -1.23266 -0.00756757 0.0824023 -0.99657 + -0.917635 1.56429 -1.1558 -0.00963629 0.191667 -0.981413 + -0.825982 1.56239 -1.1863 -0.436581 -0.0238436 -0.899349 + -0.789525 1.56678 -1.21471 -0.764503 0.151685 -0.626519 + -0.792052 1.49776 -1.24696 -0.748 0.303248 -0.590369 + -0.771717 1.58314 -1.26884 -0.889854 0.42572 -0.164081 + -0.963513 1.56736 -1.16992 0.617042 0.228292 -0.753089 + -0.937006 1.58934 -1.16439 -0.0124739 -0.64044 -0.767907 + -0.845353 1.58744 -1.19488 -0.188978 -0.851268 -0.489521 + -0.759733 1.60831 -1.24384 -0.872302 0.409161 -0.267726 + -0.741925 1.62467 -1.29797 -0.865477 0.481194 -0.139294 + -0.699814 1.69538 -1.32206 -0.871046 0.469408 -0.144688 + -0.955511 1.48158 -1.19533 -0.387509 -0.241353 -0.889711 + -0.841003 1.46202 -1.20765 -0.193037 -0.691838 -0.695771 + -0.922127 1.44708 -1.17038 -0.19297 -0.690765 -0.696855 + -0.841003 1.46202 -1.20765 0.592124 -0.497074 0.634277 + -0.921706 1.47324 -1.1323 0.172693 -0.711149 0.681502 + -0.795782 1.58707 -1.10525 0.0980888 -0.358145 0.928499 + -0.857648 1.5397 -1.0934 0.332808 -0.489426 0.80604 + -0.976804 1.48683 -1.12362 -0.443535 -0.546361 0.710469 + -0.922127 1.44708 -1.17038 0.177745 -0.812123 0.555755 + -0.841003 1.46202 -1.20765 0.380096 -0.764325 0.520896 + -0.758379 1.54753 -1.08676 -0.38932 0.061382 0.919055 + -0.701631 1.59346 -1.07091 -0.537525 0.014305 0.843127 + -0.734637 1.66043 -1.09291 -0.280765 -0.308062 0.908993 + -0.801723 1.66092 -1.09515 0.066854 -0.221603 0.972842 + -0.924734 1.54009 -1.09569 -0.129045 -0.237832 0.962696 + -0.664227 1.55392 -1.05243 -0.755839 -0.041935 0.653413 + -0.643397 1.56889 -0.998153 -0.951572 -0.112991 0.285908 + -0.658945 1.63178 -1.03008 -0.874385 -0.0773671 0.479026 + -0.691951 1.69874 -1.05208 -0.677794 -0.20054 0.707375 + -0.727078 1.74912 -1.07274 -0.355439 -0.221842 0.907992 + -0.872106 1.65856 -1.07748 0.0821934 -0.374116 0.923732 + -0.629692 1.50131 -0.961109 -0.864165 -0.378523 0.331571 + -0.643726 1.61889 -0.917968 -0.983074 -0.146316 0.110257 + -0.659274 1.68178 -0.9499 -0.987941 -0.0967153 0.120911 + -0.666266 1.73981 -0.991201 -0.909565 -0.25308 0.32961 + -0.701392 1.79019 -1.01186 -0.871963 -0.165792 0.460644 + -0.634135 1.5549 -0.887535 -0.909793 -0.351305 0.221046 + -0.630176 1.5876 -0.82637 -0.539263 -0.579913 0.610651 + -0.639767 1.6515 -0.856854 -0.97921 -0.0845585 0.184384 + -0.7043 1.56683 -1.09039 -0.60997 0.283033 0.740155 + -0.612248 1.60182 -0.819792 0.555118 -0.578507 0.59764 + -0.619647 1.6386 -0.776098 -0.470889 -0.542769 0.695461 + -0.626818 1.70224 -0.78674 -0.976858 -0.102375 0.187796 + -0.646938 1.71515 -0.867495 -0.977445 -0.0104043 0.210932 + -0.653929 1.77309 -0.908846 -0.976016 -0.0883579 0.19896 + -0.601719 1.6529 -0.769478 0.65135 -0.467801 0.597415 + -0.590095 1.7375 -0.728603 0.841118 -0.367801 0.396539 + -0.616529 1.72023 -0.715886 0.612314 -0.474959 0.632048 + -0.5889 1.81998 -0.669658 0.627277 -0.499679 0.597365 + -0.641223 1.8031 -0.63302 0.587385 -0.566776 0.577706 + -0.572443 1.81332 -0.755521 0.983876 -0.17622 0.0305689 + -0.562466 1.83725 -0.682375 0.896986 -0.323236 0.301553 + -0.552602 1.93633 -0.620381 0.962293 -0.195013 0.189635 + -0.584926 1.90744 -0.569742 0.73605 -0.465421 0.491542 + -0.637249 1.89055 -0.533104 0.00908 -0.757238 0.653076 + -0.557886 1.8775 -0.816694 0.982529 -0.143459 0.118557 + -0.55954 1.90423 -0.743586 0.992212 -0.122825 0.0206999 + -0.549676 2.00331 -0.6816 0.993608 -0.103677 0.0446549 + -0.559972 2.04854 -0.520547 0.940104 -0.248689 0.233148 + -0.592296 2.01965 -0.469899 0.62371 -0.553381 0.552046 + -0.544982 1.96833 -0.804808 0.982153 -0.148528 0.115387 + -0.537917 2.06141 -0.743632 0.983455 -0.155479 0.0929626 + -0.5417 2.10455 -0.577354 0.980999 -0.170093 0.0933201 + -0.540315 2.19079 -0.463918 0.973147 -0.202817 0.108859 + -0.558588 2.13478 -0.407112 0.927606 -0.318897 0.194556 + -0.519544 2.12001 -0.811529 0.989764 -0.116048 0.0830708 + -0.529941 2.16265 -0.639385 0.990571 -0.126732 0.0520317 + -0.522905 2.24451 -0.524367 0.986944 -0.150328 0.0578225 + -0.536521 2.25412 -0.344224 0.959709 -0.274802 0.058674 + -0.557372 2.19883 -0.281854 0.899123 -0.402624 0.171671 + -0.522444 2.21458 -0.698937 0.994634 -0.0896011 0.0517238 + -0.515408 2.29635 -0.583968 0.986639 -0.162866 0.00419181 + -0.519111 2.30785 -0.404672 0.957907 -0.282892 0.0488582 + -0.497717 2.37589 -0.348125 0.914707 -0.39995 -0.057882 + -0.516823 2.31852 -0.290163 0.905928 -0.409674 -0.107056 + -0.513535 2.28095 -0.751484 0.996512 -0.0753354 0.035887 + -0.507187 2.34934 -0.641333 0.991345 -0.128146 -0.0285081 + -0.49643 2.3586 -0.468174 0.954609 -0.297862 -0.000882352 + -0.475036 2.42664 -0.411626 0.941501 -0.331841 -0.058804 + -0.507945 2.35488 -0.788542 0.997951 -0.0633102 0.00921731 + -0.501598 2.42318 -0.678441 0.991835 -0.117823 -0.0487934 + -0.488209 2.41158 -0.525539 0.976829 -0.193367 -0.09173 + -0.466466 2.48194 -0.471415 0.950986 -0.268709 -0.153042 + -0.494948 2.63292 -1.14452 0.996798 -0.076866 -0.0220273 + -0.477139 2.7482 -1.11179 0.985375 -0.15794 -0.063955 + -0.489977 2.45804 -0.595212 0.98076 -0.163975 -0.105934 + -0.468234 2.52849 -0.541039 0.957523 -0.235423 -0.166511 + -0.469596 3.14547 -1.86948 0.994976 -0.0851184 -0.0527081 + -0.451787 3.26083 -1.83669 0.948527 -0.265786 -0.172206 + -0.40283 3.39093 -1.86683 0.897252 -0.375317 -0.232542 + -0.465519 2.78306 -1.02856 0.968669 -0.226854 -0.10108 + -0.452473 2.74238 -0.853301 0.958597 -0.254835 -0.127084 + -0.482601 3.21302 -2.23229 0.920849 0.0522264 -0.386405 + -0.475363 3.3834 -2.21818 0.867229 -0.0766204 -0.491978 + -0.448792 3.53384 -2.21555 0.778464 -0.294577 -0.554272 + -0.513564 3.21526 -2.26297 0.274215 0.163424 -0.947681 + -0.509235 3.39612 -2.24342 0.174029 0.0527565 -0.983326 + -0.482664 3.54656 -2.24079 -0.0558913 -0.0151413 -0.998322 + -0.399835 3.66393 -2.24569 0.433788 -0.242433 -0.867787 + -0.54714 3.22538 -2.25369 -0.459696 0.194748 -0.86646 + -0.542811 3.40624 -2.23414 -0.600675 0.135025 -0.788009 + -0.510975 3.56567 -2.21989 -0.669435 0.227458 -0.707191 + -0.435045 3.67681 -2.2342 -0.398752 0.149052 -0.904865 + -0.393058 3.77165 -2.24425 -0.449267 0.107329 -0.886927 + -0.357848 3.75877 -2.25574 -0.299592 0.0315814 -0.953544 + -0.549455 3.05667 -2.31108 -0.263344 0.31596 -0.911493 + -0.588446 3.23589 -2.21229 -0.654255 0.229934 -0.720472 + -0.570148 3.42786 -2.18299 -0.75517 0.192317 -0.626684 + -0.538313 3.58721 -2.1688 -0.790129 0.308344 -0.529736 + -0.590762 3.06718 -2.26968 -0.460774 0.344314 -0.818007 + -0.638357 3.03011 -2.26808 -0.541586 0.452267 -0.708617 + -0.6349 3.2201 -2.17393 -0.615206 0.257916 -0.744984 + -0.616602 3.41206 -2.14463 -0.663813 0.23537 -0.709897 + -0.619672 3.48872 -2.11141 -0.750212 0.310852 -0.58357 + -0.636617 2.85949 -2.39415 -0.507461 0.494196 -0.705871 + -0.711591 2.84553 -2.33437 -0.630863 0.447285 -0.633993 + -0.770435 2.86984 -2.25847 -0.686712 0.432042 -0.584608 + -0.697201 3.05442 -2.19217 -0.618691 0.351899 -0.702417 + -0.714394 3.24369 -2.1128 -0.581069 0.269497 -0.767939 + -0.581956 2.70165 -2.54037 -0.347692 0.562429 -0.750189 + -0.658544 2.71084 -2.47928 -0.564727 0.471622 -0.677241 + -0.733518 2.69688 -2.4195 -0.664314 0.42752 -0.613118 + -0.802339 2.68845 -2.3385 -0.736232 0.376285 -0.56247 + -0.862522 2.86462 -2.13764 -0.56203 0.360548 -0.744398 + -0.601332 2.537 -2.64618 -0.39382 0.578568 -0.714259 + -0.67792 2.54619 -2.58509 -0.598892 0.509756 -0.617638 + -0.751343 2.50776 -2.52614 -0.692542 0.452599 -0.56173 + -0.820163 2.49925 -2.44519 -0.799046 0.36698 -0.47629 + -0.473219 2.43685 -2.79011 -0.507862 0.605494 -0.612743 + -0.599183 2.42489 -2.7486 -0.286101 0.688043 -0.666891 + -0.65657 2.36347 -2.79322 -0.437782 0.67589 -0.59289 + -0.700677 2.34287 -2.76293 -0.705758 0.555088 -0.440207 + -0.709787 2.38727 -2.68504 -0.7798 0.459401 -0.42528 + -0.57337 2.25345 -2.95005 -0.345234 0.69896 -0.626314 + -0.630757 2.19211 -2.99461 -0.225273 0.600944 -0.766889 + -0.702641 2.19183 -2.96792 -0.457773 0.586308 -0.668346 + -0.746748 2.17122 -2.93763 -0.726054 0.505952 -0.465681 + -0.546279 2.20846 -3.02752 -0.677085 0.566198 -0.47008 + -0.576693 2.13834 -3.04387 0.0911394 -0.189261 -0.977688 + -0.640043 2.12566 -3.02751 -0.475565 -0.117881 -0.871746 + -0.711928 2.12546 -3.00077 -0.456863 0.445075 -0.770185 + -0.745388 2.12484 -2.9707 -0.652627 0.418267 -0.631768 + -0.490656 2.24529 -3.05811 -0.520412 0.65057 -0.553109 + -0.50941 2.1894 -3.09931 -0.455886 0.622112 -0.63651 + -0.565033 2.15256 -3.06872 -0.803082 0.503888 -0.318051 + -0.451256 2.25163 -3.07989 -0.332721 0.695688 -0.636643 + -0.480623 2.19749 -3.09233 -0.36293 0.566636 -0.739733 + -0.393484 2.18027 -3.1615 0.309983 0.609779 -0.729438 + -0.45593 2.1985 -3.12628 -0.402882 0.621838 -0.671568 + -0.372272 2.1636 -3.15483 -0.515333 -0.430193 -0.741192 + -0.7722 2.09951 -2.95763 -0.794376 0.407612 -0.450356 + -0.807259 2.10921 -2.87383 -0.829615 0.434968 -0.35006 + -0.816369 2.15362 -2.79594 -0.75658 0.503765 -0.416902 + -0.78321 2.34884 -2.62608 -0.718184 0.489468 -0.494603 + -0.832711 2.03751 -2.89384 -0.796911 0.429894 -0.424411 + -0.851231 2.13087 -2.76174 -0.766625 0.493754 -0.410479 + -0.818072 2.32609 -2.59188 -0.808241 0.418749 -0.413999 + -0.879773 2.05483 -2.80203 -0.745883 0.479179 -0.462651 + -0.849238 2.29637 -2.54819 -0.807388 0.432161 -0.401698 + -0.85133 2.46952 -2.4015 -0.855075 0.291833 -0.42858 + -0.894426 2.68315 -2.21772 -0.768031 0.274872 -0.578423 + -0.891264 1.98563 -2.84077 -0.593613 -0.298406 -0.74738 + -0.932252 2.02172 -2.75308 -0.791953 0.450271 -0.412391 + -0.877781 2.22032 -2.58847 -0.801371 0.474694 -0.363964 + -0.891187 2.40223 -2.36215 -0.887686 0.261363 -0.379083 + -0.934283 2.61586 -2.17837 -0.808242 0.18417 -0.559309 + -0.975074 2.89702 -2.06695 -0.80171 0.0435097 -0.596128 + -0.943743 1.95252 -2.79183 -0.829521 0.35162 -0.433887 + -0.957339 2.00159 -2.71642 -0.883227 0.374803 -0.281839 + -0.902867 2.20019 -2.5518 -0.867896 0.409687 -0.280915 + -0.902565 2.25588 -2.45786 -0.942132 0.269094 -0.199938 + -0.944732 2.3707 -2.24494 -0.850126 0.222032 -0.47748 + -0.961467 1.93615 -2.75448 -0.85944 0.29645 -0.41651 + -0.976679 1.92511 -2.73795 -0.887227 0.318337 -0.333901 + -0.980083 1.97465 -2.65517 -0.926228 0.326448 -0.188502 + -0.97978 2.03034 -2.56122 -0.892225 0.38394 -0.237748 + -0.95611 2.22434 -2.34064 -0.886865 0.336692 -0.3164 + -1.02199 2.18508 -2.21343 -0.778211 0.262492 -0.570513 + -0.996492 2.4102 -2.17036 -0.660322 0.207774 -0.721668 + -0.999423 1.89818 -2.6767 -0.564249 -0.59868 -0.568512 + -1.01974 1.93901 -2.55022 -0.927356 0.298486 -0.225649 + -0.996071 2.13301 -2.32965 -0.909622 0.327295 -0.255863 + -1.03285 1.85781 -2.57419 -0.797408 -0.476615 -0.370107 + -1.06243 1.89044 -2.4139 -0.936067 0.272282 -0.222802 + -1.08587 1.87405 -2.34371 -0.929636 0.244839 -0.275375 + -1.01952 2.11653 -2.25951 -0.885086 0.279309 -0.372304 + -0.999951 1.87606 -2.63399 0.128967 -0.841571 -0.524525 + -0.988363 1.85496 -2.62205 -0.546797 -0.72186 -0.424183 + -0.992294 1.85263 -2.60982 -0.460463 -0.839095 -0.289642 + -1.01338 1.85759 -2.5856 -0.163371 -0.986546 -0.00610426 + -1.04854 1.80823 -2.42551 -0.0165023 -0.946948 -0.320961 + -1.07554 1.80925 -2.43787 -0.684384 -0.584851 -0.435394 + -0.986254 1.88944 -2.63897 0.382906 -0.823668 -0.418275 + -0.986783 1.86741 -2.59621 0.655489 -0.487962 -0.576392 + -0.972097 1.83359 -2.56863 0.758818 -0.0740781 -0.647076 + -0.988363 1.85496 -2.62205 0.887672 0.45272 -0.0841598 + -0.960509 1.81249 -2.55669 0.775684 0.275018 -0.568049 + -0.940727 1.79069 -2.54593 0.6882 0.706349 0.165686 + -0.977312 1.90902 -2.67488 0.326318 -0.881797 -0.340516 + -0.942907 1.89832 -2.63916 0.0931135 -0.887607 -0.451091 + -0.95185 1.87874 -2.60324 0.204543 -0.79365 -0.572959 + -0.949697 1.86099 -2.5821 0.127297 -0.684584 -0.717733 + -0.935011 1.82717 -2.55452 0.156906 -0.518131 -0.840786 + -0.976679 1.92511 -2.73795 0.408287 -0.885504 -0.221777 + -0.961467 1.93615 -2.75448 0.285962 -0.921694 -0.262116 + -0.9621 1.92007 -2.69142 0.233567 -0.9203 -0.313836 + -0.932709 1.90732 -2.65595 0.0517874 -0.902264 -0.428063 + -0.854408 1.8762 -2.59584 0.0677582 -0.832606 -0.549705 + -0.852255 1.85836 -2.57475 0.0738102 -0.65499 -0.752024 + -0.941467 1.92742 -2.70595 0.119757 -0.936985 -0.328203 + -0.912075 1.91468 -2.67049 -0.113951 -0.929047 -0.351975 + -0.844209 1.88512 -2.61269 -0.0876091 -0.961355 -0.261001 + -0.731115 1.88176 -2.57266 0.240312 -0.969697 -0.0440154 + -0.840742 1.83956 -2.56178 0.175113 -0.652347 -0.737414 + -0.943743 1.95252 -2.79183 0.294881 -0.912308 -0.284147 + -0.923743 1.94387 -2.74325 0.0231523 -0.935339 -0.352995 + -0.892881 1.92997 -2.73397 -0.370541 -0.850887 -0.372411 + -0.881181 1.90619 -2.68198 -0.379758 -0.903856 -0.197049 + -0.813314 1.87664 -2.6242 -0.200225 -0.971413 0.127542 + -0.860402 1.97181 -2.83144 -0.281652 -0.817224 -0.50281 + -0.819887 1.8968 -2.75452 -0.33971 -0.8377 -0.427617 + -0.808187 1.87303 -2.70255 -0.247318 -0.952387 -0.178306 + -0.756234 1.86791 -2.70108 0.0602364 -0.982106 -0.178436 + -0.761362 1.87152 -2.62273 0.0199043 -0.991865 0.125726 + -0.839839 1.97294 -2.84319 0.439026 -0.435866 -0.78567 + -0.799324 1.89793 -2.76628 0.0703518 -0.696227 -0.714366 + -0.768363 1.89362 -2.75541 0.0197245 -0.740419 -0.671856 + -0.736661 1.88587 -2.74199 0.166587 -0.850358 -0.49914 + -0.67396 1.88607 -2.67533 0.224113 -0.970805 -0.0855009 + -0.846348 1.99907 -2.85285 0.424848 -0.589848 -0.68672 + -0.81119 1.93752 -2.78025 0.689812 -0.0718933 -0.72041 + -0.780228 1.9332 -2.76937 0.00172394 -0.355061 -0.934842 + -0.714993 1.95113 -2.79983 -0.0688085 -0.542818 -0.837027 + -0.683291 1.9433 -2.78645 0.134201 -0.766003 -0.628673 + -0.832711 2.03751 -2.89384 0.537891 -0.763711 -0.356958 + -0.825596 1.99728 -2.80676 0.601099 -0.451418 -0.659471 + -0.817699 1.96365 -2.78991 0.654127 -0.16328 -0.738551 + -0.787041 1.95828 -2.78001 -0.00779252 -0.408731 -0.912622 + -0.811959 2.03572 -2.84774 0.589355 -0.663873 -0.460362 + -0.794939 1.99191 -2.79686 0.0151458 -0.52397 -0.851602 + -0.721806 1.97612 -2.81051 -0.173775 -0.479595 -0.860111 + -0.63233 1.9467 -2.79915 -0.226831 -0.830723 -0.508376 + -0.646625 1.94192 -2.78008 -0.135315 -0.895651 -0.423674 + -0.7722 2.09951 -2.95763 0.719673 -0.694112 0.0166993 + -0.793107 2.08309 -2.88218 0.780176 -0.587641 -0.214486 + -0.771598 2.06407 -2.84745 0.0991126 -0.629943 -0.770291 + -0.79045 2.01671 -2.81301 0.17133 -0.576187 -0.799158 + -0.717317 2.00101 -2.82661 -0.193824 -0.528686 -0.826392 + -0.745388 2.12484 -2.9707 0.105438 -0.985176 -0.135318 + -0.766295 2.10833 -2.8953 0.322422 -0.881794 -0.344214 + -0.754926 2.08123 -2.86297 -0.088241 -0.669275 -0.737756 + -0.734795 2.11178 -2.90688 -0.18419 -0.897889 -0.399835 + -0.723426 2.08469 -2.87455 -0.317962 -0.661377 -0.679323 + -0.700645 2.01817 -2.84213 -0.322437 -0.570899 -0.755055 + -0.711928 2.12546 -3.00077 -0.0942479 -0.978302 -0.184505 + -0.701335 2.1124 -2.93695 -0.434316 -0.827924 -0.354839 + -0.70669 2.08199 -2.88367 -0.556543 -0.624325 -0.548159 + -0.683909 2.01546 -2.85125 -0.63762 -0.589122 -0.496363 + -0.679138 2.09519 -2.95214 -0.650221 -0.572981 -0.498904 + -0.684493 2.06486 -2.89881 -0.738842 -0.498467 -0.453479 + -0.671611 2.04896 -2.90707 -0.824363 -0.360687 -0.436269 + -0.671027 1.99965 -2.85946 -0.832657 -0.514013 -0.206091 + -0.619337 2.10537 -3.02358 -0.774776 -0.598747 -0.203037 + -0.658431 2.07491 -2.94821 -0.719512 -0.476982 -0.504768 + -0.656267 2.01889 -2.91698 -0.847577 -0.345666 -0.402651 + -0.645456 2.00311 -2.92446 -0.796217 -0.434369 -0.421144 + -0.660216 1.98387 -2.86694 -0.694732 -0.681264 -0.230709 + -0.610102 2.09214 -3.03065 -0.648038 -0.417286 -0.637118 + -0.643087 2.04483 -2.95812 -0.82228 -0.283918 -0.4932 + -0.633852 2.0316 -2.96519 -0.787272 -0.336108 -0.516947 + -0.632333 1.99251 -2.93589 -0.523645 -0.703772 -0.480105 + -0.598376 2.08982 -3.03804 -0.0216755 -0.397058 -0.917537 + -0.620729 2.02099 -2.97662 -0.599586 -0.548391 -0.582892 + -0.588531 2.10963 -3.04154 0.33991 -0.205779 -0.917669 + -0.588059 2.02391 -2.99407 0.0558765 -0.592923 -0.803318 + -0.609004 2.01859 -2.98406 -0.354576 -0.67891 -0.642928 + -0.582176 1.97927 -2.93717 -0.146671 -0.864848 -0.48013 + -0.568856 2.10302 -2.9977 0.676745 -0.220017 -0.702573 + -0.578214 2.04372 -2.99759 0.511444 -0.27269 -0.814902 + -0.534166 2.00115 -2.96645 0.120555 -0.661453 -0.740234 + -0.561231 1.9846 -2.94719 -0.0037534 -0.81851 -0.57448 + -0.557018 2.13173 -3.00002 0.53759 -0.49929 -0.679489 + -0.540525 2.08938 -2.98327 0.193884 -0.095052 -0.976409 + -0.549883 2.03016 -2.98311 0.22911 -0.262468 -0.937347 + -0.532865 2.15391 -3.00765 0.237224 -0.777528 -0.582387 + -0.505218 2.1392 -2.99357 -0.0178397 -0.464766 -0.885254 + -0.529371 2.1171 -2.98589 0.108102 -0.267392 -0.957505 + -0.476331 2.05192 -2.98459 0.113045 -0.24789 -0.96217 + -0.460613 2.02282 -2.96798 0.248829 -0.520817 -0.816599 + -0.565033 2.15256 -3.06872 0.484069 -0.846474 -0.221718 + -0.521205 2.16814 -3.0325 0.358025 -0.861725 -0.35951 + -0.492418 2.17623 -3.02551 0.15063 -0.831792 -0.534259 + -0.483079 2.14953 -3.00127 -0.129771 -0.496484 -0.858291 + -0.465177 2.07955 -2.98726 -0.0437703 -0.249576 -0.967365 + -0.50941 2.1894 -3.09931 0.368776 -0.902609 -0.222038 + -0.480623 2.19749 -3.09233 0.05889 -0.976603 -0.206831 + -0.449959 2.18494 -3.04079 -0.257076 -0.853096 -0.454026 + -0.440619 2.15824 -3.01654 -0.398102 -0.517548 -0.757403 + -0.443037 2.08988 -2.99495 -0.353468 -0.3979 -0.846603 + -0.406483 2.02619 -2.95862 -0.232996 -0.809607 -0.538749 + -0.428765 2.01675 -2.95248 0.138018 -0.68137 -0.718809 + -0.45593 2.1985 -3.12628 -0.241834 -0.966007 -0.0913623 + -0.425266 2.18595 -3.07474 -0.394178 -0.887344 -0.239257 + -0.404054 2.16929 -3.06809 -0.679295 -0.628527 -0.378831 + -0.415846 2.14963 -3.03183 -0.674938 -0.397921 -0.621384 + -0.418264 2.08128 -3.01025 -0.753756 -0.316226 -0.576067 + -0.393484 2.18027 -3.1615 -0.501108 -0.855941 -0.127496 + -0.371147 2.13183 -3.0994 -0.713108 -0.487069 -0.504223 + -0.38294 2.11217 -3.06315 -0.812176 -0.21162 -0.543679 + -0.370886 2.08425 -3.07699 -0.813072 0.0218246 -0.581754 + -0.406211 2.05336 -3.02409 -0.891624 -0.241537 -0.382971 + -0.350353 2.16381 -3.16919 -0.29822 -0.830397 -0.470644 + -0.349228 2.13195 -3.11381 -0.462097 -0.573419 -0.676503 + -0.35431 2.09602 -3.09818 -0.713984 -0.0871747 -0.694714 + -0.368641 2.03918 -3.08753 -0.684455 -0.346635 -0.641378 + -0.364508 2.01202 -3.06709 -0.474709 -0.715003 -0.513247 + -0.402078 2.0262 -3.00365 -0.84527 -0.509436 -0.161223 + -0.334436 2.13338 -3.1253 0.199361 -0.454001 -0.868411 + -0.339518 2.09737 -3.10972 -0.288629 -0.190774 -0.938242 + -0.352065 2.05095 -3.10872 -0.394263 -0.244131 -0.885978 + -0.323458 2.01354 -3.07911 0.0809718 -0.797337 -0.598077 + -0.35437 1.97828 -2.99445 -0.405852 -0.893079 -0.194152 + -0.310485 2.08449 -3.1044 0.277689 -0.115665 -0.953683 + -0.323032 2.03799 -3.10346 0.139075 -0.466517 -0.87351 + -0.238304 2.0325 -3.05156 0.339023 -0.780841 -0.524738 + -0.31332 1.9798 -3.00647 0.180299 -0.937267 -0.298366 + -0.302064 2.11371 -3.10301 0.450584 -0.0484366 -0.891419 + -0.237878 2.05695 -3.07591 0.529582 -0.39172 -0.752395 + -0.289754 2.15123 -3.09701 0.371972 -0.235149 -0.897965 + -0.229457 2.08617 -3.07451 0.104246 -0.0261088 -0.994209 + -0.208237 2.10715 -3.07546 0.0272764 -0.330273 -0.943491 + -0.322126 2.17091 -3.1193 0.589221 -0.493477 -0.639764 + -0.289791 2.2002 -3.13563 0.407427 -0.790579 -0.457153 + -0.268534 2.17222 -3.09796 0.235879 -0.484311 -0.842498 + -0.350353 2.16381 -3.16919 0.863495 -0.209925 -0.458593 + -1.10664 1.77992 -2.31808 -0.839459 -0.448712 -0.306541 + -1.11354 1.8732 -2.26963 -0.921075 0.202699 -0.332465 + -1.11601 1.94174 -2.22355 -0.733331 0.272861 -0.622714 + -1.08037 1.78631 -2.37834 -0.268936 -0.87116 -0.410797 + -1.06729 1.76693 -2.35678 -0.529537 -0.799574 -0.283322 + -1.07252 1.76395 -2.33541 -0.49166 -0.841967 -0.222176 + -1.0932 1.74848 -2.21302 -0.467606 -0.868302 -0.165517 + -1.12955 1.76009 -2.17713 -0.388941 -0.899444 -0.199311 + -1.13431 1.77915 -2.24394 -0.823167 -0.455097 -0.339533 + -1.05337 1.7853 -2.36599 0.113347 -0.884727 -0.452117 + -1.05223 1.76606 -2.33606 0.501433 -0.546948 -0.670382 + -1.06729 1.76693 -2.35678 0.812098 -0.0785088 -0.578215 + -1.03915 1.74659 -2.31455 0.693161 -0.0985847 -0.714009 + -1.00204 1.70979 -2.2786 -0.0834123 -0.861284 -0.50123 + -1.01319 1.78128 -2.35383 0.00959363 -0.905434 -0.424379 + -1.01205 1.76204 -2.32391 0.0818213 -0.780047 -0.620349 + -0.999293 1.74336 -2.30196 0.114434 -0.668815 -0.734568 + -0.962187 1.70664 -2.26596 0.125684 -0.873764 -0.46983 + -1.00727 1.7068 -2.25724 -0.314082 -0.929948 -0.191178 + -1.02907 1.808 -2.43692 -0.246026 -0.92968 -0.274166 + -1.0031 1.78788 -2.37926 -0.1156 -0.967138 -0.226452 + -0.919578 1.77053 -2.32961 0.0250614 -0.878133 -0.477759 + -0.906824 1.75185 -2.30766 0.150893 -0.811615 -0.564369 + -0.997619 1.80835 -2.48351 -0.424834 -0.870825 -0.247343 + -0.971655 1.78821 -2.42584 -0.241776 -0.964547 -0.105801 + -0.909494 1.77704 -2.35508 -0.0565466 -0.993731 -0.0964449 + -0.809792 1.77706 -2.32613 0.188447 -0.982079 0.00278942 + -0.863841 1.74856 -2.26716 0.367874 -0.886781 -0.279799 + -0.976528 1.80348 -2.50768 -0.503138 -0.838327 -0.209903 + -0.950965 1.78361 -2.44946 -0.350992 -0.93597 -0.0276399 + -0.888804 1.77243 -2.3787 -0.0913196 -0.992784 0.0777251 + -0.944658 1.78837 -2.53371 -0.350349 -0.905888 -0.237954 + -0.919094 1.7685 -2.47549 -0.180214 -0.977904 -0.105958 + -0.875386 1.76883 -2.46366 0.142442 -0.977915 -0.152948 + -0.845095 1.77276 -2.36687 0.0609837 -0.997089 0.0457605 + -0.940727 1.79069 -2.54593 -0.0728904 -0.727367 -0.682366 + -0.903717 1.78657 -2.5308 0.125959 -0.787047 -0.603897 + -0.864548 1.78519 -2.5062 0.291836 -0.861078 -0.416385 + -0.777425 1.78562 -2.40034 0.261389 -0.949915 -0.171279 + -0.743873 1.78945 -2.37079 0.203337 -0.961421 -0.185268 + -0.811544 1.77651 -2.33737 0.111896 -0.993688 -0.00792463 + -0.923498 1.80837 -2.54156 0.18622 -0.36191 -0.913424 + -0.801573 1.83818 -2.53719 0.379027 -0.799878 -0.465332 + -0.766587 1.80198 -2.44288 0.420044 -0.840084 -0.343253 + -0.731199 1.88017 -2.54571 0.395795 -0.903312 -0.165451 + -0.750759 1.86051 -2.52226 0.460266 -0.799169 -0.386632 + -0.715772 1.8243 -2.42795 0.417089 -0.773367 -0.477431 + -0.693494 1.82274 -2.41123 0.357652 -0.725317 -0.588219 + -0.710576 1.80419 -2.39672 0.346268 -0.851554 -0.393642 + -0.63728 1.90316 -2.52174 0.181397 -0.976218 -0.118719 + -0.64211 1.89408 -2.4698 0.165093 -0.924706 -0.343022 + -0.66167 1.87441 -2.44634 0.405501 -0.773259 -0.487483 + -0.639392 1.87276 -2.42967 0.272619 -0.792925 -0.54493 + -0.637196 1.90475 -2.54868 0.227812 -0.973699 -0.00349911 + -0.603434 1.90976 -2.54397 -0.748915 -0.614656 -0.247638 + -0.608264 1.9006 -2.4921 0.0412206 -0.974082 -0.222408 + -0.621012 1.88748 -2.46078 -0.0896543 -0.892265 -0.442522 + -0.642098 1.90017 -2.57856 0.254049 -0.963444 0.0850545 + -0.609115 1.90933 -2.58583 0.475288 -0.879233 0.0324001 + -0.604214 1.91391 -2.55595 -0.156328 -0.973167 -0.168841 + -0.592266 1.91999 -2.61288 -0.640771 -0.737514 -0.213273 + -0.593047 1.92413 -2.62486 -0.640765 -0.737519 -0.213273 + -0.733381 1.87888 -2.59848 0.193993 -0.977533 0.0824332 + -0.644363 1.8973 -2.60438 0.290735 -0.953812 0.0756082 + -0.594698 1.91353 -2.65769 0.610895 -0.78464 0.105579 + -0.571293 1.94331 -2.66948 0.796323 -0.587156 0.145317 + -0.645979 1.89343 -2.65109 0.285741 -0.957429 0.0410105 + -0.596314 1.90958 -2.70445 0.488558 -0.803174 0.340916 + -0.562054 1.91149 -2.78196 0.892178 -0.327389 0.311183 + -0.556875 1.94742 -2.7414 0.783711 -0.595774 0.175642 + -0.596777 1.8903 -2.71226 0.732716 -0.270747 0.624358 + -0.562516 1.89213 -2.78983 0.707667 0.552525 0.440367 + -0.540993 1.91304 -2.85124 0.948403 -0.138484 0.285227 + -1.15743 1.91745 -2.19529 -0.765219 0.152997 -0.625325 + -1.09573 2.14878 -2.15916 -0.644858 0.242609 -0.724775 + -1.10695 2.28195 -2.11301 -0.632824 0.155424 -0.758537 + -1.0332 2.31833 -2.16724 -0.609489 0.191343 -0.769358 + -1.17645 1.88416 -2.16522 -0.942099 -0.0382322 -0.333148 + -1.18765 2.08689 -2.10077 -0.750283 0.168071 -0.639396 + -1.13716 2.12449 -2.13089 -0.641379 0.256433 -0.723101 + -1.14179 2.21318 -2.0973 -0.651842 0.19096 -0.733918 + -1.14109 2.34193 -2.07631 -0.522511 0.0925126 -0.847599 + -1.16752 1.8059 -2.15487 -0.9547 -0.207369 -0.213416 + -1.21327 1.99216 -2.01029 -0.967286 -0.169126 -0.189087 + -1.20666 2.0536 -2.07071 -0.916515 -0.0594466 -0.395557 + -1.2492 2.14475 -2.01399 -0.773145 -0.235086 -0.589051 + -1.19228 2.17558 -2.06719 -0.60126 0.120367 -0.789936 + -1.14801 1.74733 -2.15642 -0.9288 -0.303759 -0.212278 + -1.17096 1.74047 -2.02934 -0.960066 -0.259605 -0.104302 + -1.20434 1.9139 -1.99994 -0.980805 -0.158871 -0.113052 + -1.24278 2.03662 -1.8647 -0.931278 -0.35514 -0.0812146 + -1.2558 2.08331 -1.95357 -0.901063 -0.375583 -0.216848 + -1.15145 1.6819 -2.03091 -0.486241 -0.794128 -0.364597 + -1.18277 1.76785 -1.93897 -0.978926 -0.193431 -0.0654877 + -1.21615 1.94119 -1.90961 -0.974374 -0.219508 -0.0491093 + -1.24146 2.01092 -1.74839 -0.952108 -0.298057 0.0682104 + -1.28605 2.1145 -1.83579 -0.918882 -0.3945 -0.00512896 + -1.29906 2.16111 -1.92472 -0.830483 -0.540358 -0.135319 + -1.17311 1.71051 -1.92046 -0.935592 -0.34672 -0.0667287 + -1.21483 1.91541 -1.79335 -0.97801 -0.208528 -0.0036615 + -1.22327 1.99607 -1.63906 -0.930147 -0.329843 0.161339 + -1.26074 2.09963 -1.71582 -0.933772 -0.32675 0.145961 + -1.14237 1.66056 -1.98515 -0.402532 -0.874839 -0.26949 + -1.12108 1.64027 -1.948 -0.818254 -0.565399 -0.103853 + -1.13441 1.64513 -1.92742 -0.699975 -0.6896 -0.185703 + -1.17745 1.71176 -1.83562 -0.93609 -0.350689 0.0274534 + -1.20517 1.85808 -1.77485 -0.97794 -0.203166 0.0485556 + -1.10948 1.66565 -1.97575 0.135518 -0.874943 -0.464877 + -1.11968 1.6542 -1.95812 0.352141 -0.739179 -0.574118 + -1.12108 1.64027 -1.948 0.595698 -0.510438 -0.620159 + -1.08136 1.64392 -1.93812 -0.00774151 -0.862955 -0.505221 + -1.06945 1.6088 -1.87888 0.00737978 -0.880066 -0.474794 + -1.11856 1.68698 -2.02151 0.237111 -0.830548 -0.503953 + -1.0775 1.66753 -1.97561 -0.00641392 -0.852507 -0.522676 + -1.08771 1.65608 -1.95799 0.0123477 -0.848293 -0.529384 + -1.0079 1.65625 -1.96487 0.024702 -0.857507 -0.513879 + -1.05241 1.61881 -1.89603 -0.00116581 -0.870749 -0.491726 + -1.14801 1.74733 -2.15642 0.258762 -0.859452 -0.440889 + -0.649583 1.8106 -0.813416 -0.980869 -0.14873 0.125599 + -0.661456 1.89294 -0.847236 -0.993982 -0.0438529 0.100377 + -0.665803 1.85544 -0.942675 -0.953548 -0.102119 0.283404 + -0.723908 1.85085 -1.04912 -0.280782 -0.340263 0.897431 + -0.616529 1.72023 -0.715886 -0.981363 -0.163407 0.101122 + -0.639294 1.82867 -0.742512 -0.97765 -0.198828 0.0683203 + -0.656365 1.90801 -0.744739 -0.997035 -0.0769454 0.0010585 + -0.65719 1.99449 -0.872528 -0.921122 -0.271916 0.278562 + -0.688318 1.91609 -0.979938 -0.818349 -0.264622 0.510176 + -0.641223 1.8031 -0.63302 -0.976983 -0.213048 0.0106765 + -0.658294 1.88243 -0.635237 -0.980913 -0.193882 0.0148055 + -0.66404 1.99448 -0.668502 -0.992128 -0.0802442 -0.0961359 + -0.652099 2.00947 -0.770073 -0.995772 -0.0882967 0.0253457 + -0.690586 2.04601 -0.869965 -0.651675 -0.578504 0.490564 + -0.721714 1.96762 -0.977374 -0.0653536 -0.61846 0.783094 + -0.670984 1.91222 -0.532224 -0.785764 -0.522623 0.330819 + -0.67673 2.02426 -0.56549 -0.98629 -0.109726 -0.123255 + -0.675378 2.08841 -0.670391 -0.993583 -0.0114219 -0.112528 + -0.663437 2.10349 -0.771912 -0.857258 -0.417236 0.3017 + -0.745918 2.11019 -0.834725 0.0945999 -0.771066 0.629688 + -0.677353 2.07043 -0.42066 0.168401 -0.700289 0.693712 + -0.719851 2.09289 -0.351357 0.732537 -0.37235 0.569864 + -0.643618 2.04868 -0.42158 -0.110878 -0.720557 0.684473 + -0.642861 2.13821 -0.297858 -0.0476366 -0.950944 0.305674 + -0.683856 2.1495 -0.235005 0.0157995 -0.967238 0.253381 + -0.719851 2.09289 -0.351357 0.159494 -0.906225 0.391558 + -0.726354 2.17204 -0.165652 -0.245095 -0.965109 0.0921618 + -0.591539 2.1091 -0.346226 0.525479 -0.738011 0.423335 + -0.632028 2.15113 -0.149236 0.301249 -0.929363 0.213385 + -0.673023 2.1625 -0.086333 -0.0360688 -0.990365 0.133701 + -0.694818 2.17955 -0.003062 -0.0667867 -0.990247 0.122268 + -0.590323 2.17315 -0.220969 0.797921 -0.567165 0.204074 + -0.559074 2.21804 -0.16272 0.742297 -0.669738 -0.0210964 + -0.600778 2.19602 -0.090987 0.508197 -0.861075 0.0168798 + -0.617838 2.17332 -0.016465 0.151545 -0.987773 -0.0365742 + -0.537674 2.26323 -0.227793 0.874435 -0.483853 -0.0353454 + -0.519612 2.28057 -0.179638 0.688921 -0.661905 -0.295414 + -0.525803 2.23951 -0.112705 0.565716 -0.803141 -0.186895 + -0.542863 2.21689 -0.038133 0.336101 -0.869336 -0.362343 + -0.498212 2.32577 -0.24471 0.77181 -0.582199 -0.255642 + -0.442832 2.38537 -0.239753 0.598936 -0.611056 -0.517577 + -0.445415 2.33028 -0.186529 0.430497 -0.680179 -0.59332 + -0.451606 2.2893 -0.119546 0.345365 -0.810414 -0.473235 + -0.481643 2.38683 -0.29747 0.783133 -0.529422 -0.326214 + -0.426263 2.44644 -0.292521 0.63061 -0.577187 -0.518833 + -0.361921 2.4423 -0.221354 0.219892 -0.676355 -0.702987 + -0.364504 2.38729 -0.16808 0.179872 -0.620493 -0.763305 + -0.35169 2.32451 -0.12374 0.0690669 -0.742476 -0.666302 + -0.462537 2.44419 -0.355431 0.850651 -0.481766 -0.210462 + -0.415492 2.50481 -0.344625 0.694633 -0.557192 -0.454996 + -0.3606 2.49977 -0.271703 0.259769 -0.658679 -0.70616 + -0.266055 2.51805 -0.310551 -0.407732 -0.602135 -0.686432 + -0.267376 2.46057 -0.260203 -0.371141 -0.620333 -0.690971 + -0.446736 2.50631 -0.40663 0.859747 -0.425557 -0.282376 + -0.39969 2.56693 -0.395823 0.677224 -0.54382 -0.495609 + -0.349828 2.55815 -0.323807 0.250919 -0.68534 -0.683629 + -0.271304 2.57523 -0.3564 -0.387972 -0.617953 -0.683821 + -0.438166 2.56162 -0.466418 0.879113 -0.365454 -0.305947 + -0.392707 2.62786 -0.447353 0.688569 -0.493727 -0.531137 + -0.340044 2.61075 -0.377513 0.230001 -0.691242 -0.685044 + -0.26152 2.62783 -0.410106 -0.387313 -0.649707 -0.654117 + -0.439425 2.6232 -0.51988 0.884767 -0.352439 -0.304915 + -0.393966 2.68945 -0.500823 0.718516 -0.526767 -0.454148 + -0.333061 2.67159 -0.4291 0.150934 -0.612573 -0.775869 + -0.26243 2.671 -0.458472 -0.448585 -0.573961 -0.685084 + -0.423663 2.83709 -0.832142 0.899465 -0.382728 -0.210906 + -0.383908 2.96572 -0.936345 0.754844 -0.569141 -0.326019 + -0.328671 2.73479 -0.471964 0.182213 -0.686864 -0.703574 + -0.258041 2.73411 -0.501386 -0.532705 -0.599616 -0.597232 + -0.389784 3.35025 -1.69157 0.907022 -0.377863 -0.185823 + -0.350029 3.47889 -1.79577 0.865349 -0.438158 -0.243288 + -0.31586 3.53684 -1.79416 0.787117 -0.529784 -0.315874 + -0.318614 3.01098 -0.907536 0.688474 -0.621364 -0.374046 + -0.26365 3.18553 -1.08067 0.535459 -0.631209 -0.561124 + -0.357848 3.75877 -2.25574 0.870537 -0.413683 -0.266518 + -0.357848 3.75877 -2.25574 0.824205 -0.477442 -0.304524 + -0.323679 3.81672 -2.25412 0.515322 -0.433265 -0.739408 + -0.260896 3.7114 -1.9673 0.784248 -0.525438 -0.329954 + -0.287798 3.87878 -2.26541 0.547926 -0.423239 -0.721558 + -0.226921 3.78392 -1.9845 0.744677 -0.555421 -0.370085 + -0.320441 3.88862 -2.27345 -0.237887 -0.0412594 -0.970416 + -0.280552 3.9586 -2.28646 -0.248078 0.0220471 -0.968489 + -0.253823 3.9513 -2.28262 0.464591 -0.392343 -0.793865 + -0.201838 4.02314 -2.28604 0.437655 -0.340648 -0.832116 + -0.170029 3.8391 -1.98008 0.612836 -0.657875 -0.437759 + -0.356322 3.82656 -2.26216 -0.260274 -0.0890776 -0.961417 + -0.335666 3.91617 -2.25556 -0.681655 0.292058 -0.670857 + -0.295777 3.98606 -2.26862 -0.686428 0.385977 -0.61631 + -0.238178 4.05334 -2.27375 -0.537741 0.499111 -0.679502 + -0.228567 4.03034 -2.28992 -0.183981 0.171153 -0.967914 + -0.414938 3.79883 -2.22034 -0.720113 0.272106 -0.638275 + -0.378202 3.85375 -2.23826 -0.701246 0.273284 -0.658461 + -0.342256 3.96762 -2.21109 -0.748213 0.449247 -0.488216 + -0.289296 4.02531 -2.231 -0.722365 0.526344 -0.448499 + -0.357848 3.75877 -2.25574 -0.247884 0.172693 -0.953274 + -0.463356 3.69601 -2.21324 -0.678449 0.274489 -0.681441 + -0.429885 3.82907 -2.17531 -0.813272 0.379751 -0.440883 + -0.384793 3.90521 -2.19379 -0.801508 0.391873 -0.451686 + -0.378565 3.95873 -2.14769 -0.829334 0.460094 -0.317047 + -0.335829 4.02806 -2.14717 -0.776441 0.524639 -0.349133 + -0.478303 3.72625 -2.16821 -0.803751 0.342748 -0.486321 + -0.504429 3.73987 -2.11361 -0.82587 0.397715 -0.399702 + -0.423657 3.88259 -2.12921 -0.833771 0.440712 -0.332565 + -0.365999 4.02351 -2.06529 -0.824745 0.498463 -0.267076 + -0.323263 4.09292 -2.06472 -0.806498 0.507759 -0.302889 + -0.564439 3.60092 -2.11415 -0.794199 0.36304 -0.487289 + -0.591852 3.63862 -2.04383 -0.653269 0.433813 -0.620521 + -0.549484 3.70203 -2.04408 -0.757982 0.467353 -0.455021 + -0.501226 3.80578 -2.03256 -0.773217 0.383494 -0.505042 + -0.456171 3.84361 -2.1021 -0.831653 0.446748 -0.329801 + -0.647085 3.52642 -2.0411 -0.496292 0.278787 -0.822175 + -0.700534 3.60249 -2.02207 0.0222737 0.125976 -0.991783 + -0.619137 3.65463 -2.00676 -0.208829 0.341478 -0.916397 + -0.576769 3.71804 -2.007 -0.317497 0.22297 -0.921672 + -0.532606 3.80752 -1.99978 -0.343624 0.303519 -0.888706 + -0.427697 3.95708 -2.04764 -0.0749504 0.101348 -0.992024 + -0.717464 3.32035 -2.07958 -0.430209 0.27129 -0.861 + -0.770078 3.30759 -2.07469 0.18806 0.182001 -0.965147 + -0.6997 3.51375 -2.03617 0.0713413 0.171735 -0.982557 + -0.776695 3.07793 -2.1311 -0.479383 0.210897 -0.851889 + -0.816951 3.26181 -2.10819 0.367657 -0.000813715 -0.929961 + -0.830246 3.43662 -2.09196 0.337313 0.152628 -0.928937 + -0.831081 3.52536 -2.07787 0.0343598 0.437928 -0.898353 + -0.934467 2.91554 -2.08703 -0.430684 0.111011 -0.895649 + -0.84864 3.12885 -2.08049 -0.353126 -0.0253951 -0.935231 + -0.843466 3.22363 -2.09885 -0.166718 -0.253941 -0.952743 + -0.887219 3.33249 -2.16981 0.36213 0.079671 -0.928716 + -0.877119 3.39084 -2.12547 0.415215 0.373389 -0.829564 + -0.988181 3.1422 -2.07001 -0.230553 -0.116348 -0.966079 + -0.983007 3.23697 -2.08837 -0.25442 -0.358061 -0.898367 + -0.913734 3.29439 -2.16042 -0.0756926 -0.44545 -0.892101 + -0.971944 3.33475 -2.15372 -0.454421 -0.144641 -0.878966 + -0.945597 3.3738 -2.16275 -0.139378 0.337716 -0.930872 + -1.02879 3.12367 -2.04993 -0.567989 -0.356446 -0.741845 + -1.13992 3.1959 -2.03623 -0.229918 -0.177834 -0.956824 + -1.04122 3.27733 -2.08166 -0.430465 -0.205168 -0.87898 + -1.0767 3.38613 -2.07192 -0.431981 -0.0467594 -0.90067 + -1.05036 3.42518 -2.08095 -0.347645 0.418403 -0.839096 + -1.01116 3.05512 -1.99999 -0.827572 -0.310506 -0.467665 + -1.06198 3.0943 -1.98165 -0.214445 -0.482203 -0.849407 + -1.07961 3.16294 -2.03154 -0.414817 -0.837076 -0.356693 + -0.975289 2.85138 -2.0535 -0.951523 0.238084 -0.19473 + -1.01137 3.00939 -1.98658 -0.65421 0.00718047 -0.756279 + -1.06208 3.04749 -1.96857 -0.144276 -0.111882 -0.983192 + -1.17824 3.0538 -1.99369 0.0675386 -0.279717 -0.957704 + -1.23855 3.08685 -1.99834 -0.09158 -0.143726 -0.985371 + -1.00064 2.76627 -2.06269 -0.64153 0.199236 -0.740772 + -1.02943 2.93831 -1.99707 -0.35258 0.213584 -0.911081 + -1.08014 2.97632 -1.97911 -0.0795743 0.149333 -0.98558 + -1.17835 3.00699 -1.98062 0.0720652 -0.065211 -0.995266 + -1.31949 3.00873 -1.98584 -0.0162973 -0.0208787 -0.999649 + -0.986043 2.65546 -2.10375 -0.655297 0.19743 -0.729114 + -1.11286 2.67152 -2.02258 -0.301424 0.261841 -0.916833 + -1.05478 2.85312 -2.00632 -0.362516 0.201705 -0.909889 + -1.10555 2.89233 -1.98803 -0.0906678 0.125675 -0.987919 + -1.20375 2.92299 -1.98954 0.0203355 0.0750271 -0.996974 + -1.09827 2.56071 -2.06364 -0.416537 0.204287 -0.885869 + -1.24444 2.67947 -2.00494 -0.0963287 0.107055 -0.989576 + -1.16363 2.71074 -2.0043 -0.108192 0.175012 -0.978604 + -1.28456 2.89182 -1.99014 -0.0221535 0.0461543 -0.998689 + -1.13497 2.46883 -2.06051 -0.43348 0.143259 -0.889703 + -1.24701 2.56134 -2.01134 -0.227772 0.0698009 -0.971209 + -1.42874 2.76685 -1.99049 -0.0696272 0.0429395 -0.996648 + -1.46366 2.88377 -1.98619 -0.0932224 0.0330562 -0.995096 + -1.25313 2.43444 -2.02713 -0.270164 0.073252 -0.960024 + -1.376 2.51822 -1.99585 -0.114477 0.0144164 -0.993321 + -1.43131 2.64864 -1.99695 -0.075487 0.0136572 -0.997053 + -1.63719 2.8068 -1.96728 -0.093509 0.133554 -0.98662 + -1.23734 2.32035 -2.03312 -0.343442 0.0366645 -0.938458 + -1.36021 2.40413 -2.00184 -0.216379 -0.0373293 -0.975596 + -1.53882 2.55361 -1.98375 -0.0473551 -0.0389049 -0.99812 + -1.59413 2.68402 -1.98483 -0.0448303 0.0564439 -0.997399 + -1.17593 2.27307 -2.06064 -0.473531 0.0996804 -0.875119 + -1.25369 2.22285 -2.03966 -0.502976 -0.0939219 -0.859182 + -1.33576 2.3177 -2.00015 -0.399315 -0.189006 -0.89712 + -1.46842 2.37095 -1.97597 -0.223438 -0.345836 -0.911303 + -1.49287 2.45738 -1.97767 -0.116185 -0.0937373 -0.988794 + -1.33127 2.23969 -1.97442 -0.646114 -0.420912 -0.636687 + -1.42789 2.30996 -1.94454 -0.446572 -0.617113 -0.647878 + -1.62731 2.40409 -1.94996 -0.235512 -0.634903 -0.735821 + -1.66729 2.45157 -1.98061 -0.106977 -0.338737 -0.93478 + -1.71324 2.5478 -1.98668 -0.0974185 -0.0390775 -0.994476 + -1.39568 2.23147 -1.89478 -0.626229 -0.755703 -0.191702 + -1.50851 2.3155 -1.86953 -0.340965 -0.935321 -0.0944317 + -1.58678 2.34309 -1.91852 -0.260574 -0.815644 -0.516552 + -1.73092 2.37115 -1.88572 -0.131401 -0.848915 -0.511934 + -1.781 2.40746 -1.9224 -0.142853 -0.706798 -0.692842 + -1.31454 2.19299 -1.78813 -0.813264 -0.555502 0.173263 + -1.36065 2.22605 -1.8196 -0.626462 -0.723195 0.290748 + -1.47348 2.31008 -1.79434 -0.436618 -0.833227 0.339262 + -1.65265 2.34347 -1.83677 -0.127858 -0.990665 0.0472872 + -1.28924 2.1782 -1.66811 -0.884102 -0.433411 0.174695 + -1.34068 2.29708 -1.63003 -0.761031 -0.612996 0.212291 + -1.38679 2.33015 -1.6615 -0.589409 -0.744175 0.314326 + -1.43417 2.38079 -1.61921 -0.55271 -0.682526 0.478193 + -1.52085 2.36072 -1.75206 -0.317515 -0.81048 0.492246 + -1.26697 2.17874 -1.57305 -0.900365 -0.390708 0.19155 + -1.31841 2.29754 -1.53501 -0.823395 -0.449967 0.345761 + -1.24255 2.08486 -1.60644 -0.947869 -0.274829 0.161286 + -1.23862 2.16438 -1.46977 -0.905292 -0.313672 0.286453 + -1.24799 2.24232 -1.43177 -0.8767 -0.305355 0.371694 + -1.26407 2.36213 -1.3649 -0.841359 -0.267282 0.469762 + -1.33449 2.41726 -1.46819 -0.756846 -0.403412 0.51424 + -1.2045 1.99043 -1.53649 -0.917416 -0.362814 0.163444 + -1.2142 2.0705 -1.50317 -0.940018 -0.267209 0.212052 + -1.18692 2.03124 -1.42837 -0.941062 -0.229075 0.248849 + -1.19436 2.12152 -1.38695 -0.92791 -0.233749 0.290421 + -1.20373 2.19955 -1.3489 -0.87935 -0.241729 0.410257 + -1.18042 1.92842 -1.63808 -0.800197 -0.54896 0.241512 + -1.16165 1.92269 -1.53557 -0.773768 -0.633174 -0.0193038 + -1.17722 1.95109 -1.46175 -0.925285 -0.338291 0.171486 + -1.14099 1.87746 -1.41543 -0.897996 -0.356174 0.258347 + -1.16448 1.97777 -1.38457 -0.885871 -0.279823 0.370041 + -1.17192 2.06806 -1.34315 -0.844979 -0.263254 0.465519 + -1.0651 1.85069 -1.53705 -0.803826 -0.572122 0.162914 + -1.03903 1.79188 -1.47559 -0.62161 -0.56532 -0.542231 + -1.13558 1.86389 -1.47411 -0.784048 -0.569633 -0.246549 + -1.03402 1.78121 -1.51991 -0.745892 0.00624042 0.666037 + -1.00259 1.73764 -1.46965 -0.911133 -0.354543 -0.210087 + -1.08457 1.69014 -1.39597 -0.841294 -0.353496 -0.408982 + -1.09935 1.79026 -1.42779 -0.913192 -0.136649 0.383938 + -1.07254 1.68849 -1.48572 -0.493736 0.219424 0.841474 + -1.01226 1.69252 -1.49689 -0.433205 0.25784 0.863627 + -0.98083 1.64894 -1.44662 -0.999595 -0.0181607 0.0219353 + -1.04813 1.6359 -1.39004 -0.63553 -0.439626 -0.634689 + -1.19025 1.85053 -1.68118 -0.923306 -0.229262 0.308131 + -1.11344 1.68017 -1.5459 -0.899984 -0.129642 0.416199 + -1.03534 1.59892 -1.45797 -0.720565 -0.692201 -0.0405528 + -1.04089 1.60615 -1.4299 -0.816759 -0.576836 -0.0128116 + -1.00949 1.57435 -1.40242 -0.72558 -0.687312 0.0336929 + -1.00394 1.56712 -1.43049 -0.480069 -0.87658 -0.0337773 + -1.16252 1.70413 -1.742 -0.944069 -0.305172 0.124916 + -1.1428 1.64929 -1.72542 -0.853456 -0.511329 0.100777 + -1.09371 1.62534 -1.52933 -0.734295 -0.600879 0.315842 + -1.05132 1.61087 -1.49608 -0.25206 -0.956804 -0.144884 + -0.958178 1.58084 -1.55326 -0.318905 -0.928741 -0.189051 + -1.13874 1.64637 -1.84257 -0.734216 -0.678743 -0.0152977 + -1.10131 1.61933 -1.80392 -0.427943 -0.902582 -0.0470206 + -1.11409 1.62372 -1.75273 -0.461266 -0.886452 0.037892 + -1.15152 1.65076 -1.79137 -0.574764 -0.817688 -0.032139 + -1.13426 1.63956 -1.72157 -0.589242 -0.802918 0.0900953 + -1.1511 1.65248 -1.76974 -0.722256 -0.688154 0.069209 + -1.13384 1.64128 -1.69995 -0.387328 -0.920801 0.0458632 + -1.05968 1.60678 -1.84059 -0.360312 -0.931784 -0.0441978 + -1.00982 1.58762 -1.7782 -0.172767 -0.983746 -0.0489417 + -1.05145 1.60017 -1.74154 -0.306909 -0.949764 0.0612722 + -1.07246 1.61012 -1.71817 -0.354464 -0.922949 0.150067 + -1.09263 1.62597 -1.68702 -0.359884 -0.924163 0.128086 + -1.12108 1.64027 -1.948 -0.409749 -0.910838 -0.0498061 + -1.04635 1.60183 -1.86122 -0.390813 -0.919916 -0.0319293 + -1.04089 1.60615 -1.4299 0.101406 0.631667 0.768579 + -0.980616 1.61008 -1.44111 -0.759623 0.365778 0.537754 + -0.981012 1.60939 -1.42411 -0.943301 0.0838024 -0.321186 + -0.999654 1.61778 -1.41144 -0.58114 -0.451522 -0.677056 + -1.00949 1.57435 -1.40242 0.0864199 0.698891 0.709988 + -1.06695 1.60474 -1.35485 -0.911111 0.180789 -0.370394 + -1.07344 1.61946 -1.31076 -0.94261 0.333636 -0.0131445 + -1.08036 1.67959 -1.33931 -0.953034 -0.0079723 0.30276 + -1.09514 1.77971 -1.37112 -0.952395 -0.141753 0.269905 + -1.0847 1.60428 -1.30646 0.344914 0.873386 0.343847 + -1.05967 1.62708 -1.22854 -0.517706 0.616087 0.593648 + -1.05056 1.6794 -1.29078 -0.623353 0.434418 0.650163 + -1.05747 1.73953 -1.31933 -0.608519 -0.141346 0.78085 + -1.05982 1.83094 -1.29605 -0.863655 -0.0959455 0.494869 + -1.07093 1.61181 -1.2243 -0.555215 0.698731 0.451122 + -1.04195 1.61112 -1.2181 0.0177145 -0.558759 0.829141 + -1.03127 1.62727 -1.22128 0.294438 0.350709 0.888993 + -1.02216 1.67959 -1.28351 -0.163998 0.766711 0.620693 + -1.09388 1.61566 -1.27697 0.931842 -0.292028 -0.215386 + -1.07612 1.61612 -1.32537 0.630763 -0.740881 0.230724 + -1.0649 1.61489 -1.27083 -0.0609777 -0.997269 -0.0416578 + -1.07093 1.61181 -1.2243 -0.0100838 -0.997679 -0.0673415 + -0.970943 1.60308 -1.27899 0.24613 -0.83141 0.498173 + -0.960261 1.61924 -1.28217 0.0509955 -0.433233 0.899838 + -1.02216 1.67959 -1.28351 0.562905 0.590162 0.578659 + -1.06695 1.60474 -1.35485 0.715576 -0.465775 0.52058 + -1.06309 1.61663 -1.34844 0.250124 -0.915138 0.316164 + -1.05514 1.61691 -1.31914 -0.152138 -0.986159 0.0659096 + -1.06817 1.61632 -1.29611 0.151025 -0.985457 -0.0778796 + -0.974216 1.60452 -1.30428 -0.15388 -0.967894 0.198749 + -0.999654 1.61778 -1.41144 0.606177 -0.521017 0.600908 + -1.02216 1.67959 -1.28351 -0.230206 0.395678 0.889069 + -1.03906 1.60437 -1.33602 -0.423485 -0.860589 0.282926 + -0.958142 1.59198 -1.32116 -0.0682836 -0.826814 0.558315 + -1.04444 1.60832 -1.36106 -0.674257 -0.633505 -0.379538 + -1.00451 1.56971 -1.36038 -0.38392 -0.868722 0.312933 + -0.962374 1.55825 -1.37734 -0.0735577 -0.961427 0.265043 + -1.00989 1.57366 -1.38542 -0.7333 -0.633382 -0.247181 + -0.962586 1.55538 -1.43136 -0.177867 -0.982673 -0.052131 + -0.870008 1.5521 -1.46128 -0.103584 -0.994415 -0.020232 + -0.834993 1.54703 -1.48831 -0.0902 -0.99277 0.0791909 + -1.00949 1.57435 -1.40242 -0.773667 0.633547 0.00764688 + -1.00949 1.57435 -1.40242 -0.365035 -0.930807 0.0186478 + -0.91682 1.56909 -1.55411 -0.231713 -0.95774 -0.170419 + -0.881805 1.56411 -1.58109 -0.266134 -0.960008 -0.0869348 + -0.822492 1.53543 -1.53941 -0.1957 -0.977601 0.0774421 + -0.776871 1.53666 -1.55074 0.326105 -0.918971 0.221692 + -0.854296 1.57473 -1.65427 -0.126971 -0.986502 -0.103406 + -0.853425 1.57096 -1.63175 -0.183366 -0.937702 -0.295113 + -0.868117 1.5639 -1.61192 -0.556573 -0.663322 -0.500231 + -0.808803 1.53514 -1.5703 -0.14933 -0.976427 -0.155857 + -0.766598 1.5343 -1.58024 0.238431 -0.971158 0.00170524 + -0.97416 1.59288 -1.59131 -0.252404 -0.962905 -0.0954239 + -0.984773 1.59709 -1.6334 -0.217725 -0.976008 0.00221638 + -0.983652 1.59513 -1.65601 -0.23537 -0.962867 0.132239 + -0.962637 1.58526 -1.67932 -0.159118 -0.978441 0.131661 + -0.90641 1.58098 -1.68711 -0.0566384 -0.997395 -0.0446586 + -0.862303 1.57804 -1.67641 -0.0813725 -0.990691 -0.109134 + -0.768767 1.56808 -1.72116 -0.0529709 -0.996773 -0.060315 + -0.751176 1.56748 -1.67232 -0.0502469 -0.994098 -0.0961447 + -0.750306 1.56371 -1.64979 -0.234412 -0.853581 -0.465242 + -1.06806 1.61523 -1.58262 -0.280695 -0.959771 -0.00704812 + -1.07867 1.61952 -1.62466 -0.260978 -0.963437 -0.0606632 + -1.09376 1.62793 -1.66441 -0.262901 -0.963972 -0.0405197 + -1.11045 1.62969 -1.61588 -0.571358 -0.81851 0.0599255 + -1.11876 1.63288 -1.66019 -0.474541 -0.880086 -0.0161062 + -0.95359 1.58342 -1.78594 -0.0391885 -0.990612 -0.130963 + -0.827228 1.58351 -1.77167 -0.0109673 -0.98491 -0.172719 + -0.783121 1.58057 -1.76098 -0.174831 -0.955985 -0.235641 + -0.776774 1.5714 -1.74331 -0.194397 -0.953847 -0.228879 + -0.962247 1.59901 -1.84773 0.0180731 -0.944338 -0.32848 + -0.835885 1.59909 -1.83347 0.0936741 -0.928146 -0.360237 + -0.782991 1.61007 -1.84089 0.0279097 -0.867559 -0.49655 + -0.729379 1.60414 -1.84242 -0.230313 -0.788832 -0.569824 + -0.740212 1.58506 -1.80657 -0.219807 -0.880026 -0.420997 + -1.01211 1.60125 -1.8584 0.0253295 -0.951035 -0.308043 + -0.940837 1.64332 -1.93428 0.0752452 -0.864885 -0.496299 + -0.887944 1.6543 -1.9417 0.134328 -0.844154 -0.518999 + -0.750584 1.64268 -1.87757 0.0117227 -0.799987 -0.599903 + -1.04635 1.60183 -1.86122 0.00874517 -0.947906 -0.318429 + -1.03521 1.60812 -1.87612 0.0296281 -0.902393 -0.429895 + -0.990703 1.64564 -1.9449 0.0524718 -0.871027 -0.488424 + -0.891333 1.6773 -1.97893 0.153092 -0.871262 -0.466332 + -0.753973 1.66567 -1.91479 0.0224135 -0.87181 -0.489332 + -0.707074 1.6674 -1.92818 -0.566941 -0.767826 -0.298363 + -0.692433 1.63726 -1.94318 -0.910186 -0.408722 -0.0671495 + -1.01425 1.66841 -1.98473 0.0153449 -0.852979 -0.52172 + -1.01888 1.6804 -2.0049 0.0210473 -0.855876 -0.516753 + -1.02739 1.69411 -2.02766 -0.0805906 -0.92199 -0.378735 + -1.01531 1.69599 -2.04791 -0.265431 -0.96072 -0.0810168 + -0.985795 1.68354 -2.06893 -0.213297 -0.97662 0.0267923 + -0.937936 1.68407 -2.04925 0.176096 -0.979275 -0.100049 + -0.906403 1.69126 -2.01231 0.475863 -0.795416 -0.375323 + -0.796615 1.70206 -1.98982 0.055276 -0.895607 -0.441399 + -1.08214 1.67944 -1.99584 0.0674367 -0.855493 -0.513404 + -1.10601 1.7037 -2.03866 0.112258 -0.830651 -0.545359 + -1.11452 1.7175 -2.06136 0.160372 -0.807428 -0.567751 + -1.11534 1.73461 -2.08659 -0.0194852 -0.90383 -0.427449 + -1.10326 1.7364 -2.1069 -0.313409 -0.931672 -0.183744 + -1.14514 1.73694 -2.10343 0.788842 -0.485393 -0.376992 + -1.14596 1.75405 -2.12866 0.537945 -0.790808 -0.291955 + -1.06691 1.72479 -2.14278 -0.420761 -0.901761 -0.0989347 + -1.03739 1.71233 -2.1638 -0.453159 -0.888195 -0.0758787 + -1.14801 1.74733 -2.15642 0.998327 0.0327699 -0.0476409 + -1.05909 1.73242 -2.2304 -0.48969 -0.858861 -0.150206 + -0.985578 1.68671 -2.19063 -0.186364 -0.973788 -0.1304 + -0.937719 1.68725 -2.17096 0.199297 -0.973203 -0.114701 + -0.845878 1.71426 -2.08535 0.311308 -0.944806 -0.102125 + -0.814345 1.72146 -2.04842 0.197049 -0.971279 -0.133371 + -0.919204 1.70335 -2.22546 0.319808 -0.906084 -0.277009 + -0.827363 1.73046 -2.13981 0.418124 -0.89073 -0.178248 + -0.780045 1.75154 -2.13453 0.273036 -0.904565 -0.327434 + -0.750666 1.75461 -2.12943 -0.109871 -0.895508 -0.431271 + -0.765201 1.73346 -2.0804 -0.0347549 -0.962335 -0.269637 + -0.816523 1.76973 -2.26183 0.376997 -0.908085 -0.182357 + -0.729958 1.78796 -2.20421 0.253118 -0.927286 -0.275812 + -0.700579 1.79093 -2.19915 -0.743828 -0.298767 -0.597879 + -0.804428 1.78088 -2.30394 0.335722 -0.941955 -0.00349396 + -0.717864 1.79902 -2.24636 0.371396 -0.923487 -0.0961088 + -0.693261 1.81091 -2.24576 -0.233866 -0.954053 -0.187325 + -0.685856 1.80393 -2.25027 -0.984765 -0.124044 -0.121863 + -0.705589 1.77883 -2.23698 -0.781478 0.616823 -0.093918 + -0.750666 1.75461 -2.12943 -0.696716 0.704855 -0.133289 + -0.731575 1.796 -2.30292 0.322661 -0.946137 0.0267417 + -0.706973 1.80789 -2.30233 -0.477063 -0.826336 0.299298 + -0.709495 1.8001 -2.31164 -0.0983555 -0.908419 0.406326 + -0.689605 1.80637 -2.26988 -0.208619 -0.976405 0.0557856 + -0.685589 1.8085 -2.33898 -0.349439 -0.935665 -0.0492316 + -0.689338 1.81093 -2.35859 0.66566 -0.72292 -0.185157 + -0.736939 1.79227 -2.32506 0.100539 -0.889494 0.445749 + -0.739461 1.78448 -2.33438 0.20031 -0.942322 0.268152 + -0.705839 1.79564 -2.33571 0.454571 -0.89069 0.00599458 + -0.741214 1.78393 -2.34563 0.217153 -0.971784 -0.0920932 + -0.707916 1.79867 -2.37156 0.466936 -0.869884 -0.158975 + -0.676915 1.83214 -2.40552 0.77628 -0.628439 -0.0495339 + -0.678992 1.83517 -2.44137 0.699189 -0.706441 -0.109891 + -0.625186 1.8998 -2.49551 0.836443 -0.481083 0.26253 + -0.645874 1.8849 -2.45391 0.899239 -0.353088 0.258259 + -0.658297 1.8637 -2.40698 0.896016 -0.436693 0.0803439 + -0.67171 1.85164 -2.3627 0.933788 -0.343174 0.101344 + -0.685589 1.8085 -2.33898 0.886894 -0.406265 -0.219929 + -0.601053 1.95609 -2.44482 0.761608 -0.602336 0.239047 + -0.623155 1.94846 -2.40779 0.806442 -0.557092 0.198242 + -0.636569 1.9364 -2.36351 0.851163 -0.477634 0.217687 + -0.580364 1.971 -2.48643 0.774992 -0.596831 0.207798 + -0.534165 2.03217 -2.44998 0.710168 -0.694223 0.117115 + -0.539496 2.03274 -2.40997 0.665053 -0.728829 0.162829 + -0.561598 2.0251 -2.37295 0.643269 -0.738155 0.203301 + -0.600397 1.91406 -2.54321 0.837195 -0.502207 0.216549 + -0.555263 1.99129 -2.51618 0.778008 -0.605523 0.167467 + -0.509064 2.05246 -2.47973 0.713234 -0.691458 0.114813 + -0.453323 2.10837 -2.38597 0.689644 -0.720919 0.068306 + -0.458653 2.10904 -2.34592 0.599352 -0.800315 0.0164888 + -0.643531 1.86852 -2.48694 0.854673 -0.416059 0.31053 + -0.618742 1.88277 -2.53462 0.860034 -0.428077 0.277654 + -0.605994 1.89588 -2.56593 0.853302 -0.506708 0.122973 + -0.580252 1.93347 -2.58302 0.835735 -0.54771 0.0394952 + -0.661911 1.8537 -2.45587 0.855295 -0.417418 0.306975 + -0.690866 1.79182 -2.28809 -0.917138 0.398523 -0.00612391 + -0.685589 1.8085 -2.33898 -0.93944 0.342393 0.0148036 + -1.15072 1.77302 -2.19552 -0.347946 -0.908119 -0.232924 + -0.702535 1.66783 -1.99233 -0.883527 -0.463758 -0.0656402 + -0.716526 1.69944 -2.03547 0.0796162 -0.864748 -0.495855 + -0.749716 1.7037 -2.00326 -0.218345 -0.913923 -0.342155 + -0.762541 1.72793 -2.05523 -0.160226 -0.946201 -0.281124 + -0.729351 1.72366 -2.08744 0.19206 -0.878248 -0.437942 + -0.680883 1.77302 -2.07412 0.766567 -0.468225 -0.439476 + -0.702535 1.66783 -1.99233 0.656057 -0.561386 -0.504416 + -0.811685 1.71602 -2.0232 0.119001 -0.934931 -0.334279 + -0.734341 1.74788 -2.13459 0.138231 -0.865202 -0.481993 + -0.695709 1.8117 -2.16432 0.854791 -0.478307 -0.201384 + -0.690719 1.78757 -2.11712 0.789548 -0.503589 -0.35073 + -0.719806 1.76903 -2.18362 0.677607 -0.735353 0.0102454 + -0.698701 1.8166 -2.21121 0.923499 -0.37738 0.0688019 + -0.65072 1.91757 -2.18509 0.869658 -0.479051 -0.119186 + -0.637963 1.92843 -2.1431 0.841574 -0.48477 -0.238224 + -0.628127 1.91379 -2.10014 0.852506 -0.428285 -0.299677 + -0.705589 1.77883 -2.23698 0.927225 -0.331085 0.175035 + -0.684484 1.8263 -2.26462 0.93937 -0.324291 0.111438 + -0.653712 1.92238 -2.23203 0.881598 -0.461787 -0.0976589 + -0.589979 2.01155 -2.22668 0.732055 -0.674682 -0.0943325 + -0.588229 2.00932 -2.18261 0.757157 -0.649671 -0.0681215 + -0.575472 2.02009 -2.14067 0.732037 -0.674041 -0.0989495 + -0.676987 1.83497 -2.31182 0.960058 -0.274072 0.0563378 + -0.658385 1.92633 -2.27507 0.913671 -0.405278 -0.0308882 + -0.594651 2.01542 -2.26977 0.701129 -0.709864 -0.0671595 + -0.690866 1.79182 -2.28809 0.961302 -0.21348 0.174139 + -0.650887 1.9349 -2.32232 0.889135 -0.429839 0.15709 + -0.605655 2.0055 -2.31019 0.727177 -0.679353 0.0984513 + -0.499475 2.08507 -2.24461 0.519983 -0.85397 0.0187846 + -0.685589 1.8085 -2.33898 0.951615 -0.307286 -0.00203496 + -0.591336 2.007 -2.35139 0.682898 -0.660177 0.312756 + -0.510478 2.07515 -2.28504 0.570976 -0.817267 0.077858 + -0.48074 2.09326 -2.3066 0.555463 -0.8312 0.0238116 + -0.417248 2.12441 -2.19516 0.405727 -0.909644 -0.0890718 + -0.508241 2.08118 -2.19707 0.553133 -0.83281 -0.0217055 + -0.38386 2.15237 -2.27137 0.475121 -0.873301 -0.107726 + -0.405947 2.13659 -2.23205 0.470782 -0.87426 -0.118463 + -0.33785 2.1411 -2.11065 0.374059 -0.877031 -0.30149 + -0.338236 2.127 -2.07943 0.277855 -0.912856 -0.29915 + -0.426015 2.12053 -2.14762 0.3304 -0.936474 -0.117699 + -0.426257 2.13531 -2.39723 0.677107 -0.732586 -0.0696004 + -0.364172 2.16698 -2.30229 0.546318 -0.820226 -0.169608 + -0.315156 2.1684 -2.17734 0.375775 -0.891915 -0.251557 + -0.326549 2.15319 -2.1476 0.351074 -0.903235 -0.246807 + -0.481998 2.07939 -2.49098 0.734128 -0.678113 0.0349072 + -0.407235 2.16024 -2.42981 0.587936 -0.808522 -0.0249545 + -0.34515 2.19191 -2.33487 0.37602 -0.920074 -0.109878 + -0.295469 2.1831 -2.2082 0.186945 -0.969252 -0.160008 + -0.535117 2.0107 -2.556 0.793361 -0.603424 0.0803571 + -0.465729 2.09545 -2.52819 0.729711 -0.68172 0.052724 + -0.460517 2.0966 -2.57438 0.675915 -0.725058 0.13202 + -0.402023 2.16139 -2.476 0.480139 -0.866346 0.137519 + -0.36698 2.17379 -2.47308 0.181389 -0.959584 0.215165 + -0.518848 2.02675 -2.59321 0.777784 -0.623559 0.0789044 + -0.501167 2.04318 -2.63445 0.722833 -0.674191 0.151589 + -0.440632 2.10339 -2.61014 0.43435 -0.824677 0.362282 + -0.405589 2.11579 -2.60722 0.267636 -0.902011 0.338745 + -0.592266 1.91999 -2.61288 0.809897 -0.583216 -0.0626508 + -0.398513 3.98461 -2.03812 -0.535311 0.490147 -0.687894 + -0.30799 4.16202 -1.9874 -0.790491 0.519779 -0.323965 + -0.276587 4.16497 -2.0711 -0.739835 0.556714 -0.377773 + -0.282869 4.08583 -2.16703 -0.712881 0.566542 -0.413317 + -0.326369 4.14841 -1.97002 -0.611097 0.596423 -0.520423 + -0.250851 4.29974 -1.89373 -0.693572 0.66508 -0.276816 + -0.261313 4.23416 -1.99374 -0.730399 0.592907 -0.339084 + -0.21748 4.22262 -2.07876 -0.574808 0.683907 -0.449296 + -0.355553 4.12096 -1.97949 -0.460189 0.563263 -0.686266 + -0.292218 4.25662 -1.87365 -0.722555 0.559325 -0.406287 + -0.26923 4.28621 -1.8763 -0.723482 0.579816 -0.374683 + -0.205029 4.34236 -1.89375 -0.550503 0.718014 -0.425915 + -0.215492 4.27678 -1.99376 -0.549715 0.717863 -0.427183 + -0.401211 4.07733 -1.95971 -0.733835 0.549341 -0.399638 + -0.337876 4.21298 -1.85386 -0.72149 0.581723 -0.375568 + -0.285288 4.38676 -1.73806 -0.698805 0.489042 -0.522025 + -0.237996 4.41396 -1.75877 -0.641133 0.550732 -0.534455 + -0.501226 3.80578 -2.03256 0.573652 -0.352441 -0.739398 + -0.719851 2.09289 -0.351357 -0.980183 -0.11691 -0.159915 + -0.733426 2.16917 -0.325479 -0.422968 -0.872168 0.245806 + -0.690305 2.10063 -0.539561 -0.985224 -0.00356063 -0.171232 + -0.665292 2.18573 -0.653752 -0.867224 -0.469909 0.164646 + -0.718769 2.16766 -0.736671 -0.248566 -0.784045 0.56876 + -0.680219 2.19795 -0.522923 -0.979217 -0.152937 -0.133212 + -0.708907 2.22741 -0.610553 -0.547199 -0.797935 0.25273 + -0.762384 2.20935 -0.693472 0.197273 -0.844076 0.498618 + -0.797269 2.10626 -0.78912 0.578752 -0.634939 0.51176 + -0.775359 1.95469 -0.938779 0.588975 -0.498634 0.635982 + -0.77872 2.17722 -0.248824 -0.694277 -0.696737 -0.180378 + -0.796669 2.22433 -0.213417 -0.94676 -0.136116 -0.291749 + -0.698169 2.24505 -0.487516 -0.871912 -0.48212 -0.0856091 + -0.754293 2.27651 -0.547195 0.0832475 -0.964228 0.251662 + -0.830699 2.16795 -0.637373 0.744345 -0.603115 0.286709 + -0.865584 2.06487 -0.733021 0.828694 -0.431946 0.355933 + -0.829931 2.21614 -0.096232 -0.996534 -0.0432626 -0.071053 + -0.743554 2.29407 -0.424208 -0.314497 -0.942117 -0.116222 + -0.776816 2.28588 -0.307023 0.582122 -0.808527 0.0861305 + -0.793376 2.25035 -0.483283 0.723206 -0.681119 0.114231 + -0.806663 2.18697 -0.024113 -0.319221 -0.938301 -0.133004 + -0.833448 2.18638 0.014919 -0.787728 -0.608449 -0.096299 + -0.830529 2.21353 -0.017905 -0.998984 -0.0415037 -0.0175808 + -0.776816 2.28588 -0.307023 -0.968634 -0.196423 -0.152207 + -0.761369 2.17901 -0.100718 -0.104107 -0.994115 0.0299452 + -0.764288 2.1663 0.096893 0.0609571 -0.994559 -0.0844741 + -0.791073 2.16562 0.135874 -0.0875311 -0.989017 -0.119097 + -0.834045 2.18376 0.093254 -0.844415 0.116963 0.522764 + -0.729833 2.18652 0.061879 0.227542 -0.970325 -0.0818157 + -0.690305 2.10063 -0.539561 0.45234 -0.818888 0.353285 + -0.719851 2.09289 -0.351357 -0.980593 -0.190385 0.0468075 + -0.639633 2.19037 0.066806 -0.0936961 -0.995599 -0.0018826 + -0.649184 2.18275 0.132395 0.050891 -0.975688 -0.213172 + -0.683639 2.16254 0.167409 -0.136421 -0.956444 0.258077 + -0.67044 2.19247 0.209165 0.33403 -0.919375 0.207781 + -0.757773 2.14908 0.186115 0.485313 -0.695055 -0.530443 + -0.69311 2.17527 0.216759 0.527183 -0.447327 -0.722479 + -0.544957 2.17091 0.038111 0.107141 -0.970295 -0.216904 + -0.554508 2.1632 0.10366 0.00154227 -0.998902 0.0468303 + -0.556535 2.1815 0.171369 0.115546 -0.918586 0.377952 + -0.543336 2.21135 0.213068 0.0632389 -0.718486 0.692661 + -0.450826 2.24422 -0.055273 0.222567 -0.824429 -0.520366 + -0.452919 2.19833 0.021021 0.28435 -0.89334 -0.347977 + -0.452089 2.18241 0.091793 0.274449 -0.961493 -0.0144336 + -0.454116 2.2007 0.159503 0.179526 -0.951409 0.250184 + -0.35091 2.27944 -0.059467 0.124402 -0.87549 -0.46695 + -0.346556 2.25176 0.008467 0.169659 -0.931193 -0.322639 + -0.345726 2.23594 0.079281 0.245021 -0.955129 -0.166414 + -0.351772 2.22323 0.157091 0.26965 -0.958692 0.0905479 + -0.237927 2.33918 -0.172751 -0.370569 -0.680571 -0.632061 + -0.248223 2.30299 -0.114056 -0.209345 -0.868011 -0.450256 + -0.24387 2.27531 -0.046122 -0.364768 -0.565263 -0.739879 + -0.211494 2.26453 -0.064842 -0.471636 -0.774043 -0.422395 + -0.247164 2.25438 0.014126 -0.0198724 -0.992017 -0.124527 + -0.25074 2.40196 -0.217091 -0.402341 -0.603263 -0.688618 + -0.086589 2.32683 -0.287961 -0.549091 -0.661287 -0.511075 + -0.096886 2.29063 -0.229258 -0.489414 -0.719265 -0.493084 + -0.06451 2.27976 -0.248027 -0.42926 -0.740469 -0.517148 + -0.125703 2.38312 -0.315846 -0.585852 -0.625718 -0.515029 + -0.048528 2.35557 -0.371727 -0.710127 -0.64505 -0.282189 + -0.009414 2.2992 -0.343893 -0.586879 -0.685003 -0.431676 + -0.142339 2.44172 -0.358958 -0.649364 -0.575581 -0.497024 + -0.061399 2.38566 -0.424453 -0.783583 -0.558522 -0.272122 + -0.010689 2.2915 -0.381352 -0.456529 -0.844607 -0.279678 + -0.010689 2.2749 -0.3052 -0.635906 -0.734806 -0.235975 + -0.162727 2.49951 -0.404448 -0.677746 -0.547546 -0.490769 + -0.081787 2.44345 -0.469944 -0.817378 -0.506353 -0.274773 + -0.02356 2.3215 -0.43412 -0.580548 -0.800358 -0.149635 + 0.02356 2.3215 -0.43412 0.564381 -0.814872 -0.132127 + 0.010678 2.29141 -0.381402 0.488746 -0.844055 -0.220678 + -0.167976 2.5567 -0.450297 -0.717515 -0.45609 -0.526455 + -0.089769 2.48429 -0.520287 -0.85363 -0.409796 -0.321533 + -0.02356 2.31923 -0.513395 -0.481353 -0.837175 -0.259687 + 0.02356 2.31923 -0.513395 0.472986 -0.838855 -0.269458 + -0.180935 2.62069 -0.484529 -0.69222 -0.512026 -0.508587 + -0.102728 2.54819 -0.55457 -0.840253 -0.434519 -0.324297 + -0.031542 2.36016 -0.563687 -0.5556 -0.662305 -0.502654 + 0.031537 2.36008 -0.563737 0.554929 -0.662304 -0.503396 + -0.181846 2.66385 -0.532888 -0.725622 -0.652622 -0.218076 + -0.100078 2.57141 -0.606185 -0.823751 -0.557597 -0.102567 + -0.031542 2.40605 -0.616164 -0.56558 -0.684565 -0.459881 + 0.031537 2.40605 -0.616164 0.566461 -0.684378 -0.459075 + -0.154947 2.62717 -0.609756 -0.800089 -0.579183 -0.156221 + -0.073179 2.53464 -0.683094 -0.88261 -0.41589 -0.219168 + -0.028892 2.42927 -0.667781 -0.542946 -0.77979 -0.31167 + 0.02889 2.42927 -0.667781 0.543045 -0.779693 -0.311739 + -0.211292 2.9129 -0.796651 -0.738777 -0.513833 -0.436101 + -0.108198 2.80586 -0.905062 -0.843288 -0.391336 -0.368404 + -0.059065 2.74121 -0.955474 -0.878553 -0.347436 -0.327769 + -0.028892 2.44778 -0.725853 -0.752265 -0.65779 -0.0375527 + 0.02889 2.44778 -0.725853 0.762213 -0.647315 0.00380121 + -0.196517 3.1695 -1.0593 -0.560707 -0.505592 -0.655732 + -0.06391 3.39357 -1.63559 -0.849924 -0.334386 -0.407204 + -0.014777 3.32891 -1.68601 -0.390802 -0.120575 -0.912544 + -0.014777 2.65435 -0.998232 -0.936183 -0.257571 -0.239202 + 0.016514 2.25648 -0.879903 -0.982725 -0.119354 -0.14144 + -0.214432 3.22701 -1.07951 -0.116923 -0.655085 -0.746454 + -0.049135 3.83237 -1.95563 -0.465604 -0.380007 -0.799254 + -0.049135 3.65017 -1.89825 -0.594469 -0.345198 -0.726254 + 0.014767 3.32891 -1.68601 0.348821 -0.516646 -0.781921 + -0.014777 2.65435 -0.998232 0 -0.46053 -0.887644 + -0.120811 3.88058 -1.97892 0.38784 -0.755631 -0.527827 + -0.067051 3.88988 -1.97584 -0.0901157 -0.735746 -0.671236 + 0.049134 3.83237 -1.95562 0.497791 -0.480955 -0.721725 + 0.049134 3.65017 -1.89824 0.594319 -0.342208 -0.72779 + -0.084071 4.11489 -2.27757 0.139527 -0.330621 -0.933393 + -0.030311 4.12419 -2.27447 0.0489921 -0.443205 -0.89508 + 0.030311 4.1242 -2.27448 -0.0201643 -0.424243 -0.905324 + 0.067051 3.88988 -1.97584 0.388566 -0.705807 -0.592329 + 0.196516 3.1695 -1.0593 0.560764 -0.505454 -0.65579 + -0.144946 4.07823 -2.28167 0.276653 -0.300278 -0.912851 + -0.0953 4.14486 -2.27287 -0.104897 0.290836 -0.951005 + -0.030311 4.15293 -2.27666 -0.0222827 0.197133 -0.980124 + 0.030311 4.15293 -2.27666 0.0390194 0.181315 -0.982651 + -0.156175 4.10828 -2.27693 -0.175556 0.314576 -0.932857 + -0.096826 4.17112 -2.26095 -0.224933 0.570322 -0.790024 + -0.031836 4.17919 -2.26473 -0.0592718 0.561371 -0.825439 + 0.031829 4.17919 -2.26474 0.0604002 0.562218 -0.824781 + 0.095301 4.14486 -2.27287 0.0884889 0.282878 -0.955065 + -0.165785 4.13128 -2.26075 -0.413641 0.56131 -0.716821 + -0.094081 4.1974 -2.23568 -0.268107 0.738435 -0.618735 + -0.031836 4.20574 -2.23932 -0.0690251 0.755118 -0.651945 + 0.031829 4.20566 -2.23938 0.0701433 0.754455 -0.652593 + -0.163041 4.15757 -2.23549 -0.498186 0.665898 -0.555329 + -0.155107 4.20838 -2.17409 -0.489497 0.72553 -0.483735 + -0.090118 4.23945 -2.17751 -0.274891 0.810832 -0.516707 + -0.027872 4.2477 -2.1812 -0.0695179 0.832476 -0.549683 + 0.027872 4.2477 -2.1812 0.0698179 0.832529 -0.549564 + -0.231697 4.09259 -2.23614 -0.633747 0.603666 -0.483686 + -0.223763 4.1434 -2.17474 -0.629403 0.628153 -0.457467 + -0.142402 4.26511 -2.08456 -0.427982 0.781915 -0.453255 + -0.077413 4.2961 -2.08803 -0.270787 0.838045 -0.473661 + 0.016514 2.25648 -0.879903 0 -0.627193 0.778864 + -0.140414 4.31927 -1.99955 -0.381968 0.809692 -0.445532 + -0.077222 4.33603 -2.01459 -0.240827 0.869099 -0.432053 + -0.027872 4.30445 -2.0877 -0.070864 0.86523 -0.496341 + 0.027872 4.30445 -2.0877 0.0711782 0.865085 -0.49655 + -0.149779 4.33989 -1.94548 -0.343558 0.828861 -0.44154 + -0.086587 4.35656 -1.96056 -0.253029 0.849795 -0.462412 + -0.027682 4.3443 -2.01431 -0.0764981 0.897563 -0.434198 + 0.027676 4.34431 -2.01432 0.0734926 0.896408 -0.437094 + -0.191334 4.41115 -1.80271 -0.408517 0.694829 -0.591884 + -0.136083 4.4086 -1.85448 -0.373955 0.758172 -0.534166 + -0.090758 4.42195 -1.861 -0.243877 0.790964 -0.561159 + -0.027682 4.36549 -1.96582 -0.0864853 0.875305 -0.475774 + 0.027676 4.3655 -1.96584 0.0836663 0.876806 -0.473509 + -0.215009 4.44355 -1.76142 -0.516817 0.680783 -0.519071 + -0.135694 4.54426 -1.67186 -0.238937 0.724962 -0.646018 + -0.090369 4.55762 -1.67839 -0.247756 0.783397 -0.570005 + -0.031852 4.43088 -1.86627 -0.0892357 0.813982 -0.573994 + 0.031855 4.43088 -1.86627 0.0878237 0.813034 -0.575554 + -0.159369 4.57666 -1.63058 0.0128266 0.522972 -0.852254 + -0.144635 4.68977 -1.56729 0.330427 0.354524 -0.874717 + -0.088188 4.69572 -1.55799 0.0258261 0.351729 -0.935746 + -0.078099 4.62054 -1.59598 0.0842606 0.606381 -0.790698 + -0.031852 4.51372 -1.75675 -0.104115 0.793682 -0.599357 + -0.209419 4.58301 -1.66818 0.0254648 0.475088 -0.87957 + -0.194686 4.69612 -1.60488 0.10529 0.409634 -0.906153 + -0.147078 4.80597 -1.54415 0.121547 0.297353 -0.946999 + -0.090631 4.812 -1.5348 0.0247308 0.225096 -0.974023 + -0.256711 4.55582 -1.64747 -0.70818 0.409758 -0.57496 + -0.237951 4.66941 -1.59862 -0.620995 0.363117 -0.69463 + -0.203348 4.79753 -1.55013 -0.131802 0.363286 -0.922308 + -0.310484 4.52313 -1.57026 -0.802408 0.376124 -0.463327 + -0.291724 4.63672 -1.52141 -0.748005 0.226768 -0.62375 + -0.246614 4.77073 -1.54392 -0.517528 0.212484 -0.828864 + -0.31653 4.85085 -1.50488 -0.300161 0.0195752 -0.953688 + -0.231399 4.89724 -1.51704 -0.0665514 0.275791 -0.958911 + -0.336983 4.39134 -1.6486 -0.765878 0.441601 -0.467353 + -0.388448 4.37418 -1.57967 -0.742577 0.461037 -0.485823 + -0.361948 4.50597 -1.50133 -0.717274 0.342467 -0.606823 + -0.328191 4.64972 -1.48851 -0.549166 0.0699804 -0.832778 + -0.283081 4.78373 -1.51102 -0.575292 -0.107422 -0.810864 + -0.31438 4.29125 -1.78103 -0.86387 0.436561 -0.251282 + -0.366075 4.29584 -1.69158 -0.73677 0.496339 -0.459149 + -0.417436 4.27618 -1.63193 -0.731863 0.493108 -0.470341 + -0.447268 4.41163 -1.46274 -0.705631 0.34455 -0.619169 + -0.382639 4.23564 -1.74191 -0.710522 0.567209 -0.416452 + -0.434 4.21608 -1.68223 -0.776324 0.51782 -0.359422 + -0.484016 4.13257 -1.67439 -0.891224 0.375442 -0.254486 + -0.476256 4.31372 -1.51495 -0.859402 0.39074 -0.329773 + -0.406135 4.15745 -1.81468 -0.72814 0.576172 -0.371265 + -0.463537 4.10564 -1.77914 -0.785553 0.522746 -0.331123 + -0.513553 4.02222 -1.77126 -0.876295 0.4747 -0.0822618 + -0.534289 3.94934 -1.71543 -0.909097 0.267691 0.319193 + -0.508511 4.08163 -1.62556 -0.994447 0.0968672 -0.0411247 + -0.461047 4.0245 -1.90301 -0.753345 0.554199 -0.354027 + -0.518448 3.97269 -1.86747 -0.686953 0.644963 -0.33484 + -0.574631 3.9544 -1.82219 -0.746063 0.661437 -0.0767546 + -0.595367 3.88153 -1.76637 -0.744993 0.460924 0.482217 + -0.459077 3.95874 -2.0149 -0.71835 0.447079 -0.533005 + -0.518913 3.90592 -1.95821 -0.654694 0.517844 -0.550647 + -0.581128 3.8813 -1.91798 -0.593882 0.653541 -0.469243 + -0.63731 3.86293 -1.87275 -0.717521 0.660918 -0.219889 + -0.664799 3.81544 -1.7985 -0.745189 0.551675 0.374632 + -0.57649 3.82336 -2.00542 -0.199712 0.443968 -0.873503 + -0.638704 3.79866 -1.96524 -0.571018 0.687658 -0.448404 + -0.705771 3.78952 -1.8924 -0.674436 0.721331 -0.157537 + -0.733259 3.74194 -1.8182 -0.63824 0.657479 0.400462 + -0.620652 3.73389 -2.01265 -0.0117598 0.101754 -0.99474 + -0.705245 3.728 -1.99306 -0.441691 0.630195 -0.638563 + -0.772312 3.71886 -1.92022 -0.594243 0.758329 -0.267978 + -0.834258 3.66848 -1.83855 -0.566494 0.73125 0.379945 + -0.702049 3.68176 -2.02795 -0.0868603 0.26937 -0.959112 + -0.846738 3.62203 -1.9957 -0.435314 0.661417 -0.610761 + -0.910701 3.59059 -1.97905 -0.431854 0.726968 -0.533872 + -0.836274 3.68742 -1.90357 -0.502088 0.861533 -0.0752853 + -0.843542 3.57578 -2.0306 -0.215124 0.570767 -0.792431 + -0.948754 3.51836 -2.04094 -0.304793 0.657604 -0.688955 + -0.969458 3.54005 -2.00651 -0.349924 0.726273 -0.591677 + -0.96066 3.60365 -1.92487 -0.49498 0.849033 -0.184763 + -0.958644 3.58479 -1.8598 -0.478888 0.77011 0.421423 + -0.936293 3.46802 -2.08816 -0.271233 0.618736 -0.737291 + -1.05115 3.46115 -2.05065 -0.260596 0.671883 -0.693299 + -1.07186 3.48275 -2.01626 -0.307229 0.760497 -0.572062 + -1.01942 3.5531 -1.95232 -0.42653 0.804003 -0.414309 + -1.10742 3.52012 -1.86978 -0.317231 0.863952 0.39109 + -0.935497 3.43206 -2.11846 -0.067642 0.560242 -0.825562 + -1.21528 3.4251 -2.03881 -0.132946 0.343208 -0.929803 + -1.15462 3.4633 -1.99157 -0.297732 0.841876 -0.450112 + -1.10218 3.53356 -1.92768 -0.301341 0.938192 -0.170265 + -1.15429 3.37695 -2.03582 -0.298708 -0.215492 -0.929697 + -1.21141 3.39853 -2.0294 -0.114029 -0.2606 -0.958689 + -1.35098 3.38002 -2.02933 -0.0591391 -0.279084 -0.958444 + -1.35475 3.42672 -2.04083 -0.132516 0.383609 -0.913939 + -1.35795 3.44244 -2.01504 -0.114242 0.947434 -0.298861 + -1.21849 3.44081 -2.01302 -0.103024 0.899356 -0.424906 + -1.1188 3.26806 -2.04562 -0.341523 -0.0244298 -0.939556 + -1.28209 3.29816 -2.00954 -0.181955 -0.0719586 -0.98067 + -1.33921 3.31983 -2.00308 -0.0693361 -0.282772 -0.956678 + -1.34711 3.35337 -2.01998 0.010529 -0.386072 -0.922409 + -1.30321 3.226 -2.00016 -0.179517 -0.0636078 -0.981696 + -1.48786 3.25512 -1.9694 -0.125144 -0.239845 -0.962711 + -1.49576 3.28867 -1.9863 -0.131868 -0.287625 -0.948622 + -1.49195 3.33784 -1.99188 -0.265667 -0.144179 -0.953223 + -1.38414 3.14797 -1.98761 -0.127415 -0.00609528 -0.991831 + -1.4767 3.16306 -1.97075 -0.206201 0.0169054 -0.978363 + -1.70089 3.16095 -1.91709 -0.215306 -0.118051 -0.969385 + -1.68929 3.21364 -1.93175 -0.244063 -0.141248 -0.959418 + -1.68549 3.26274 -1.93739 -0.373132 0.133625 -0.918105 + -1.55622 2.89886 -1.96934 -0.187411 0.102336 -0.976936 + -1.68973 3.06898 -1.9184 -0.229259 0.0713814 -0.970745 + -1.8276 3.12336 -1.88178 -0.236696 -0.000425215 -0.971584 + -1.816 3.17597 -1.8965 -0.319094 0.0325694 -0.947163 + -1.81518 3.23462 -1.87768 -0.419443 0.33053 -0.845469 + -1.7707 2.97684 -1.9164 -0.133249 0.200992 -0.970488 + -1.84137 3.0456 -1.89209 -0.156951 0.206904 -0.96569 + -1.90588 3.15745 -1.86043 -0.444964 0.201379 -0.872613 + -1.90506 3.21602 -1.84167 -0.588689 0.37704 -0.715043 + -1.80062 2.79505 -1.96253 -0.133814 0.152216 -0.979247 + -1.8713 2.86373 -1.93829 -0.294856 0.185338 -0.937395 + -1.91965 3.07969 -1.87075 -0.373913 0.193058 -0.907148 + -1.98323 3.03521 -1.84151 -0.656245 0.193747 -0.729249 + -1.75757 2.67228 -1.98008 -0.124107 0.0468761 -0.991161 + -1.90627 2.66502 -1.94612 -0.391631 0.041007 -0.919208 + -1.93488 2.81925 -1.90905 -0.537433 0.129762 -0.833263 + -1.86195 2.54063 -1.95267 -0.284155 -0.0919722 -0.954357 + -1.98576 2.53832 -1.90667 -0.4989 -0.0543889 -0.864951 + -2.03739 2.64602 -1.85741 -0.635439 0.0875217 -0.767175 + -2.066 2.80025 -1.82034 -0.686532 0.126833 -0.715952 + -2.03558 3.02965 -1.78487 -0.723429 0.249492 -0.643743 + -1.82098 2.45495 -1.95305 -0.228883 -0.375661 -0.898049 + -1.94479 2.45264 -1.90706 -0.350374 -0.327981 -0.877307 + -2.05358 2.41321 -1.84278 -0.494072 -0.300003 -0.816021 + -2.1144 2.48689 -1.80179 -0.669233 -0.0502481 -0.741352 + -1.91748 2.39915 -1.88422 -0.207774 -0.650334 -0.730681 + -2.02627 2.35974 -1.81995 -0.176308 -0.659126 -0.731074 + -2.11269 2.29131 -1.74084 -0.260374 -0.68608 -0.679338 + -2.14522 2.32336 -1.74013 -0.58607 -0.341166 -0.734934 + -2.20604 2.39694 -1.69919 -0.702351 -0.10835 -0.703536 + -1.86741 2.36285 -1.84754 -0.0723934 -0.865948 -0.494868 + -1.99787 2.33884 -1.79176 0.0342845 -0.875306 -0.482353 + -2.0843 2.27043 -1.71266 0.357818 -0.920097 -0.159338 + -2.22028 2.2444 -1.62197 -0.315277 -0.83798 -0.44541 + -2.25281 2.27635 -1.62132 -0.622178 -0.432474 -0.652581 + -1.82591 2.34578 -1.80238 0.0589825 -0.99629 -0.0626645 + -1.95637 2.32169 -1.74665 0.180869 -0.983194 -0.0248368 + -2.07981 2.29329 -1.66846 0.498506 -0.787628 0.362124 + -2.19142 2.26339 -1.55927 0.585489 -0.685228 0.433203 + -2.19591 2.24044 -1.60352 0.265559 -0.960946 0.0778554 + -1.62473 2.36295 -1.77832 -0.0650082 -0.893835 0.443659 + -1.79798 2.36518 -1.74398 0.170597 -0.813671 0.55573 + -1.92422 2.34637 -1.7204 0.339186 -0.744728 0.574745 + -2.04766 2.31797 -1.64221 0.368669 -0.738623 0.564374 + -2.09623 2.36604 -1.57067 0.571067 -0.625583 0.531534 + -1.65389 2.43073 -1.67692 -0.124636 -0.739206 0.661847 + -1.78809 2.42361 -1.69979 0.111038 -0.647294 0.754109 + -1.91434 2.40472 -1.67626 0.369514 -0.597183 0.711922 + -1.96291 2.45279 -1.60472 0.453011 -0.483146 0.749234 + -1.55002 2.42859 -1.6506 -0.319291 -0.734046 0.599359 + -1.6553 2.55664 -1.57659 -0.235761 -0.578077 0.781181 + -1.7895 2.54952 -1.59947 0.049477 -0.51376 0.856506 + -1.98412 2.60114 -1.53767 0.425468 -0.355264 0.832325 + -2.19343 2.3614 -1.44902 0.658474 -0.437393 0.612454 + -1.4176 2.48106 -1.51169 -0.572434 -0.533142 0.62296 + -1.53345 2.52886 -1.54308 -0.381702 -0.58713 0.71385 + -1.61261 2.75404 -1.41731 -0.341463 -0.526345 0.778694 + -1.81071 2.69787 -1.53241 -0.0531796 -0.461109 0.885749 + -1.42262 2.64013 -1.379 -0.646269 -0.448759 0.617213 + -1.49076 2.72627 -1.3838 -0.450147 -0.516117 0.728692 + -1.42417 2.85621 -1.25266 -0.456849 -0.454836 0.764469 + -1.6557 2.9089 -1.34153 -0.371355 -0.448269 0.813112 + -1.8538 2.85272 -1.45663 -0.0043441 -0.48191 0.87621 + -1.33952 2.57633 -1.3355 -0.665193 -0.432081 0.608954 + -1.32552 2.6894 -1.25595 -0.644431 -0.334877 0.687435 + -1.35603 2.76998 -1.24792 -0.596201 -0.342642 0.726044 + -1.26461 2.50664 -1.301 -0.751112 -0.319782 0.577556 + -1.25061 2.61971 -1.22144 -0.662114 -0.340955 0.66735 + -1.24715 2.75846 -1.16056 -0.644224 -0.279814 0.711814 + -1.27766 2.83913 -1.15248 -0.656332 -0.213873 0.723524 + -1.26369 2.93221 -1.11991 -0.543691 -0.377198 0.749748 + -1.20022 2.30514 -1.29638 -0.829237 -0.227693 0.510413 + -1.20076 2.44973 -1.23243 -0.807709 -0.211129 0.550483 + -1.18193 2.61173 -1.15402 -0.757177 -0.231489 0.610816 + -1.17847 2.75048 -1.09314 -0.697503 -0.188561 0.691328 + -1.15569 2.85747 -1.04705 -0.648235 -0.178146 0.740307 + -1.15642 2.2665 -1.23506 -0.768634 -0.25871 0.585039 + -1.13711 2.35673 -1.17514 -0.742867 -0.261386 0.6163 + -1.11549 2.42714 -1.11729 -0.705038 -0.26208 0.658965 + -1.17913 2.52014 -1.17457 -0.82744 -0.163809 0.537131 + -1.10261 2.61414 -1.04439 -0.678291 -0.162712 0.716552 + -1.15994 2.16083 -1.28762 -0.779226 -0.245919 0.576481 + -1.07329 2.23459 -1.16719 -0.602811 -0.330372 0.726273 + -1.05398 2.32482 -1.10727 -0.562054 -0.346554 0.750996 + -1.02917 2.41408 -1.05708 -0.520297 -0.309529 0.795916 + -1.09981 2.52255 -1.06495 -0.684803 -0.222119 0.694052 + -1.10748 2.05776 -1.27712 -0.653928 -0.306117 0.691861 + -1.09549 2.15062 -1.22155 -0.626568 -0.318646 0.711251 + -0.964186 2.25183 -1.08325 -0.534239 -0.306893 0.787658 + -0.93618 2.33064 -1.03375 -0.49618 -0.325829 0.804761 + -0.911368 2.41982 -0.983609 -0.422087 -0.240743 0.874005 + -1.12102 1.97167 -1.3234 -0.710353 -0.293973 0.639515 + -1.01448 2.0909 -1.18991 -0.641829 -0.247052 0.725962 + -0.986391 2.16787 -1.13762 -0.615956 -0.299513 0.728622 + -0.937618 2.10507 -1.11184 -0.461012 -0.290509 0.838494 + -0.907448 2.17665 -1.07843 -0.347757 -0.346562 0.871183 + -1.09753 1.87136 -1.35425 -0.816195 -0.192413 0.544796 + -1.02801 2.00471 -1.23623 -0.738019 -0.181504 0.649911 + -0.992937 1.94976 -1.19306 -0.70954 -0.0574575 0.702319 + -0.965703 2.0281 -1.16413 -0.618031 -0.17955 0.765375 + -1.06221 1.92259 -1.27918 -0.889397 0.073742 0.451149 + -1.02713 1.86773 -1.23596 -0.792379 -0.0446357 0.608394 + -0.99815 1.78121 -1.21072 -0.679744 0.0880096 0.72815 + -0.970916 1.85955 -1.1818 -0.64461 0.0236216 0.764147 + -0.944993 1.94571 -1.17164 -0.49636 -0.0377188 0.867297 + -1.03288 1.78952 -1.25311 -0.915521 -0.0604097 0.397709 + -1.01446 1.69188 -1.20979 -0.879753 0.0666659 0.470735 + -1.0114 1.59751 -1.17953 -0.998089 -0.00594584 -0.061504 + -0.995087 1.68693 -1.18041 -0.933843 0.191168 0.30231 + -0.973838 1.76895 -1.17167 -0.930113 0.206864 0.303474 + -1.03052 1.69812 -1.27639 -0.955703 -0.268696 0.120138 + -1.0202 1.61368 -1.22695 -0.951187 -0.250823 -0.179811 + -1.00583 1.52632 -1.17682 -0.909522 -0.337774 -0.242235 + -1.01377 1.61179 -1.12827 -0.966765 0.0807322 0.242585 + -0.995136 1.68804 -1.12174 -0.936915 0.198063 0.288029 + -1.02216 1.67959 -1.28351 -0.884993 -0.448046 0.126656 + -0.994441 1.63158 -1.25995 -0.884773 -0.448254 0.127458 + -0.800745 2.16722 0.143497 -0.266488 -0.953999 -0.13737 + -0.757773 2.14908 0.186115 -0.266484 -0.954 -0.137366 + -0.977225 1.46075 -1.16166 -0.540388 -0.833129 -0.117799 + -1.00821 1.5406 -1.12556 -0.819157 -0.235047 0.523196 + -0.922127 1.44708 -1.17038 -0.25698 -0.513093 -0.818961 + -0.956138 1.59387 -1.09763 -0.188993 -0.184014 0.964583 + -0.989636 1.62409 -1.09438 -0.525167 -0.061513 0.848773 + -0.905604 1.68879 -1.07423 -0.27887 -0.713951 0.642266 + -0.971002 1.70035 -1.08785 -0.509734 -0.180965 0.841084 + -0.948906 1.69815 -1.06444 -0.61871 -0.785323 -0.0216053 + -0.797461 1.74686 -1.05502 0.348302 -0.398457 0.84848 + -0.837016 1.7382 -1.03661 0.775411 -0.49829 0.387873 + -0.901206 1.61571 -1.00085 0.715941 -0.513326 -0.473208 + -0.854714 1.6674 -0.986595 0.88732 -0.454064 0.080551 + -0.763463 1.84218 -1.03071 0.515865 -0.435311 0.737826 + -0.817107 1.82925 -0.992113 0.72016 -0.382189 0.579052 + -0.848173 1.81015 -0.954435 0.831705 -0.250724 0.495383 + -0.88578 1.6483 -0.948908 0.29959 -0.669645 0.679574 + -0.901206 1.61571 -1.00085 0.693105 -0.685132 0.224053 + -0.826709 1.95084 -0.893124 0.736538 -0.417882 0.531871 + -0.882893 1.77276 -0.908069 0.867289 -0.280717 0.411106 + -0.912574 1.69183 -0.92031 0.393387 -0.722894 0.568042 + -0.943193 1.68178 -0.955688 -0.850662 -0.47655 0.22198 + -0.9164 1.63825 -0.984295 -0.695892 -0.656655 0.290755 + -0.901206 1.61571 -1.00085 -0.425502 -0.704292 0.568261 + -0.861429 1.91345 -0.846758 0.889291 -0.274612 0.365719 + -0.893682 1.87478 -0.783184 0.952703 -0.194267 0.233706 + -0.901912 1.77293 -0.848373 0.938045 -0.280433 0.203542 + -0.931592 1.69201 -0.860605 0.617175 -0.764469 0.186231 + -0.942828 1.68755 -0.866885 0.286173 -0.949441 0.129099 + -0.897836 2.0262 -0.669447 0.954947 -0.251594 0.157406 + -0.906177 1.85878 -0.71386 0.857558 -0.509565 0.0702668 + -0.914407 1.75692 -0.77904 0.971355 -0.133928 0.196298 + -0.923086 1.71773 -0.754359 0.624715 -0.644696 0.440565 + -0.934322 1.71336 -0.760589 -0.598461 -0.707358 0.376152 + -0.869782 2.14179 -0.573461 0.888404 -0.447224 0.103582 + -0.910296 1.95936 -0.588676 0.961004 -0.229764 0.153884 + -0.882242 2.07495 -0.492681 0.941447 -0.330552 0.0664271 + -0.915054 2.03059 -0.423643 0.703566 -0.688659 0.175335 + -0.833842 2.20954 -0.4174 0.843498 -0.529591 0.0896856 + -0.866654 2.16518 -0.348362 0.884182 -0.453976 0.110124 + -0.779985 2.29664 -0.306655 0.78012 -0.618285 0.0955808 + -0.820451 2.25574 -0.240823 0.775963 -0.622929 0.0992019 + -0.84198 2.23368 -0.221018 0.82061 -0.563294 0.0964302 + -0.899356 2.11045 -0.280376 0.81514 -0.559007 0.151852 + -0.848062 2.25593 0.053241 0.726813 -0.686831 -0.00237746 + -0.86959 2.23379 0.072996 0.867972 -0.492529 -0.0635625 + -0.874682 2.17887 -0.153082 0.93638 -0.34992 0.0273723 + -0.872962 2.20626 0.169881 0.949076 -0.200427 -0.243071 + -0.878053 2.15134 -0.056197 0.966319 -0.249561 -0.0628171 + -0.892074 2.13502 -0.102131 0.440964 -0.893313 0.0868521 + -0.923579 2.11023 -0.208393 0.514534 -0.830556 0.213148 + -0.9677 2.00174 -0.371486 0.504991 -0.852363 0.135872 + -0.828119 2.24167 0.237951 0.389455 -0.912287 -0.12672 + -0.822356 2.22867 0.269664 0.624984 -0.414468 -0.661522 + -0.855557 2.12347 0.166472 0.95707 0.0074767 -0.289759 + -0.869578 2.10715 0.120537 0.52764 -0.815524 -0.237731 + -0.928957 2.14091 -0.013939 0.514104 -0.828587 -0.221675 + -0.960462 2.11612 -0.120201 0.114763 -0.949988 0.290435 + -0.689714 2.22859 0.3148 -0.221485 -0.916279 0.333731 + -0.645114 2.2745 0.37449 -0.197541 -0.70019 0.686084 + -0.549107 2.2493 0.375134 -0.182217 -0.884402 0.429687 + -0.504507 2.2952 0.434824 -0.249365 -0.967644 -0.0384942 + -0.695478 2.2415 0.283037 -0.290957 -0.953189 0.0823044 + -0.656684 2.21392 0.282414 -0.340352 -0.706998 0.619931 + -0.570774 2.244 0.324112 0.0107686 -0.880301 0.474292 + -0.451134 2.24204 0.399915 -0.239691 -0.85309 -0.463449 + -0.414515 2.17767 0.436803 -0.770046 -0.633828 -0.0727464 + -0.813755 2.21001 0.167176 -0.653682 -0.725331 0.215857 + -0.774962 2.18234 0.16651 -0.662782 -0.387812 0.640564 + -0.672983 2.13364 0.236662 -0.234453 -0.678889 0.695803 + -0.587072 2.16372 0.27836 0.433978 -0.883631 0.17567 + -0.4728 2.23674 0.348895 -0.0690611 -0.964036 -0.256641 + -0.848062 2.25593 0.053241 -0.899549 -0.436635 0.0126956 + -0.833698 2.22428 -0.017537 -0.972286 -0.201425 -0.118696 + -0.800745 2.16722 0.143497 -0.673742 0.668008 0.31597 + -0.779985 2.29664 -0.306655 -0.961153 -0.268991 -0.0618751 + -0.793376 2.25035 -0.483283 -0.94756 -0.284124 0.146298 + -0.905691 2.11918 0.074307 0.960751 -0.0657779 -0.269501 + -0.927779 1.73612 -0.733023 -0.0606392 -0.762523 0.644113 + -0.910296 1.95936 -0.588676 0.99301 -0.0738874 0.0920415 + -0.800745 2.16722 0.143497 -0.607963 -0.149967 0.779673 + -0.698766 2.11852 0.21365 -0.562192 -0.244004 0.790191 + -0.634104 2.14471 0.244295 0.483673 -0.72715 -0.487148 + -0.49705 2.29366 0.303292 0.132551 -0.898236 -0.419048 + -0.417636 2.26287 0.309421 -0.558912 -0.726121 -0.400456 + -0.393386 2.20586 0.354973 -0.751536 -0.583386 -0.307984 + -0.368257 2.13837 0.383673 -0.842988 -0.492074 -0.217336 + -0.544082 2.27465 0.269227 0.636425 -0.625105 -0.451892 + -0.521412 2.29176 0.261582 0.198375 -0.913628 0.354868 + -0.436632 2.29198 0.270599 -0.349242 -0.918979 0.183051 + -0.341659 2.14994 0.304622 -0.590922 -0.461859 -0.661436 + -0.323066 2.06909 0.320072 -0.787551 -0.396245 -0.471969 + -0.458556 2.21157 0.222087 -0.0816158 -0.864391 0.496151 + -0.360655 2.17914 0.26585 -0.594786 -0.739531 -0.315156 + -0.757773 2.14908 0.186115 0.425881 0.00712076 -0.904751 + -0.356213 2.23418 0.219722 -0.0791444 -0.906976 -0.413679 + -0.255573 2.2155 0.158679 -0.472097 -0.709327 -0.523431 + -0.260015 2.16046 0.204812 -0.546939 -0.531354 -0.646932 + -0.25963 2.10261 0.248802 -0.628203 -0.369867 -0.684514 + -0.25321 2.24159 0.091878 -0.182373 -0.952253 -0.244857 + -0.159262 2.21968 0.033037 -0.309951 -0.870516 -0.382272 + -0.154596 2.18535 0.100294 -0.405122 -0.706198 -0.580655 + -0.154212 2.12742 0.144235 -0.42478 -0.510078 -0.747918 + -0.156899 2.24578 -0.033764 -0.155742 -0.968762 -0.192988 + -0.082695 2.24703 -0.071537 -0.022138 -0.989172 -0.145084 + -0.081395 2.22044 -0.002884 0.0259693 -0.913436 -0.406154 + -0.07673 2.18603 0.064323 -0.0808295 -0.830636 -0.550918 + -0.154394 2.249 -0.110343 -0.250281 -0.94924 -0.190531 + -0.08019 2.25017 -0.148166 0.0928859 -0.990571 -0.100701 + -0.02725 2.24172 -0.024536 0.105285 -0.945042 -0.309532 + -0.02595 2.21513 0.044117 0.183362 -0.83223 -0.523231 + -0.02595 2.16442 0.105158 0.126649 -0.73229 -0.669112 + -0.118724 2.25914 -0.189312 -0.644393 -0.505473 -0.573807 + -0.070071 2.25744 -0.21357 -0.0346311 -0.950151 -0.309862 + -0.02725 2.26148 -0.094764 0.204235 -0.958795 -0.197484 + 0.02725 2.26148 -0.094764 -0.112465 -0.980759 -0.159571 + 0.02725 2.24172 -0.024536 -0.0973461 -0.940416 -0.325793 + -0.015856 2.27806 -0.272286 -0.692326 -0.674947 -0.255208 + -0.017131 2.26876 -0.160169 0.132692 -0.991072 -0.0129884 + 0.017132 2.26876 -0.160169 -0.0970983 -0.995025 0.0222771 + 0.08019 2.25017 -0.148166 -0.0992598 -0.991427 -0.0849676 + 0.082695 2.24703 -0.071537 -0.0676404 -0.980529 -0.184354 + -0.017131 2.25377 -0.233603 -0.672001 -0.739387 -0.0414943 + -0.017131 2.26876 -0.160169 -0.999184 0.0395704 -0.00807802 + 0.010678 2.2749 -0.3052 0.640246 -0.728935 -0.24236 + 0.017132 2.25377 -0.233603 0.12652 -0.980525 -0.150209 + 0.070072 2.25744 -0.21357 0.131999 -0.946954 -0.293008 + 0.118717 2.25914 -0.18932 0.644411 -0.505444 -0.573813 + 0.154394 2.249 -0.110343 0.248355 -0.948936 -0.194524 + 0.009403 2.2992 -0.343893 0.907328 -0.39374 -0.147391 + 0.015857 2.27806 -0.272286 0.680649 -0.659772 -0.318463 + 0.064503 2.27977 -0.248036 0.429281 -0.740471 -0.517127 + 0.211487 2.26453 -0.064851 0.47178 -0.773808 -0.422663 + 0.247164 2.25439 0.014118 0.0696504 -0.988172 -0.136617 + 0.048517 2.35557 -0.371727 0.704882 -0.656029 -0.269754 + 0.125703 2.38312 -0.315846 0.581502 -0.618836 -0.528107 + 0.086589 2.32683 -0.287961 0.542128 -0.665705 -0.512771 + 0.061399 2.38566 -0.424453 0.808042 -0.548472 -0.215049 + 0.142328 2.44172 -0.358949 0.638228 -0.585929 -0.499351 + 0.25074 2.40196 -0.217091 0.412862 -0.596397 -0.688372 + 0.237927 2.33919 -0.172759 0.374804 -0.684412 -0.625381 + 0.081787 2.44345 -0.469944 0.821557 -0.498454 -0.276745 + 0.162716 2.49951 -0.404439 0.672959 -0.54307 -0.502196 + 0.267365 2.46057 -0.260203 0.376942 -0.624658 -0.683899 + 0.364503 2.38729 -0.16808 -0.147701 -0.662525 -0.734333 + 0.089764 2.48429 -0.520287 0.852656 -0.40991 -0.323962 + 0.167976 2.5567 -0.450297 0.720992 -0.452007 -0.525223 + 0.266044 2.51805 -0.310551 0.425678 -0.588121 -0.687686 + 0.360602 2.49977 -0.271703 -0.252078 -0.667705 -0.700447 + 0.361923 2.4423 -0.221354 -0.200971 -0.667831 -0.716667 + 0.102723 2.54819 -0.55457 0.84008 -0.434995 -0.324106 + 0.180935 2.62069 -0.484529 0.693794 -0.514081 -0.504352 + 0.271304 2.57523 -0.3564 0.386137 -0.616703 -0.685986 + 0.100077 2.57141 -0.606185 0.823852 -0.557405 -0.102796 + 0.181855 2.66385 -0.532888 0.313529 -0.948602 0.0430502 + 0.26152 2.62783 -0.410106 0.378469 -0.656392 -0.652618 + 0.340041 2.61075 -0.377513 -0.233545 -0.687877 -0.687228 + 0.349826 2.55815 -0.323807 -0.258667 -0.689309 -0.676716 + 0.073178 2.53464 -0.683094 0.882518 -0.416255 -0.218848 + 0.154956 2.62717 -0.609756 0.790133 -0.588326 -0.171937 + 0.262439 2.671 -0.458472 0.481221 -0.592234 -0.646286 + 0.059054 2.74121 -0.955474 0.878544 -0.347442 -0.327789 + 0.108192 2.80586 -0.905062 0.84321 -0.391443 -0.368469 + 0.25805 2.7342 -0.501336 0.575171 -0.552291 -0.603451 + 0.016514 2.25648 -0.879903 0.997942 -0.0142128 -0.0625224 + -0.9191 1.77532 -0.757703 0.863215 -0.272616 0.424901 + -0.927779 1.73612 -0.733023 0.965021 -0.051872 0.256989 + -0.994441 1.63158 -1.25995 -0.485316 -0.448721 -0.750412 + -0.699814 1.69538 -1.32206 0.90454 -0.205812 0.373428 + -0.704309 1.62413 -1.34845 0.818599 -0.454673 -0.350952 + -0.692772 1.67708 -1.37616 0.976357 -0.216071 -0.00636239 + -0.699505 1.64767 -1.36081 0.120086 -0.480725 -0.86861 + -0.711042 1.59463 -1.33315 0.233098 -0.489048 -0.840534 + -0.719793 1.60413 -1.3202 0.761892 -0.349214 0.5455 + -0.711042 1.59463 -1.33315 0.751826 -0.174539 0.63584 + -0.748272 1.58103 -1.31759 0.447718 -0.677802 0.58321 + -0.761571 1.58121 -1.3069 0.188617 -0.973236 0.131283 + -0.848896 1.59106 -1.29936 -0.0676339 -0.997591 0.015436 + -0.862195 1.59124 -1.28868 -0.0867424 -0.995577 -0.036101 + -0.759733 1.60831 -1.24384 0.640418 -0.650066 0.408998 + -0.801512 1.58539 -1.23054 0.285219 -0.890828 0.353661 + -0.977933 1.61141 -1.18422 0.548729 -0.595782 -0.586464 + -0.946964 1.61536 -1.27285 -0.462913 -0.884374 -0.059952 + -0.994441 1.63158 -1.25995 0.956751 0.248319 -0.151541 + -0.955511 1.48158 -1.19533 0.963046 0.15508 -0.22021 + -1.00886 1.67572 -1.2742 -0.651743 -0.660064 0.373559 + -1.02216 1.67959 -1.28351 -0.574611 -0.57638 0.581041 + -0.710918 1.55531 -1.66445 -0.0168882 -0.92895 -0.369821 + -0.698533 1.56096 -1.65062 0.562251 -0.808668 0.173002 + -0.738069 1.5453 -1.62151 0.133805 -0.977218 -0.164746 + -0.765583 1.55311 -1.63143 -0.167649 -0.857189 -0.48695 + -0.695642 1.56591 -1.6828 -0.777786 -0.411159 -0.475391 + -0.666623 1.5694 -1.74905 -0.761908 0.572093 -0.303654 + -0.780274 1.54606 -1.61161 -0.137724 -0.915593 -0.377784 + -0.70293 1.57108 -1.72015 -0.0398422 -0.994837 -0.0933409 + -0.67746 1.59199 -1.83878 0.508764 -0.797592 -0.324047 + -0.72052 1.57168 -1.769 0.0946379 -0.986478 -0.133807 + -0.733866 1.5759 -1.7889 -0.119709 -0.950796 -0.285755 + -0.690805 1.59621 -1.85868 0.135136 -0.854781 -0.501087 + -0.644552 1.69844 -1.93855 0.851291 -0.416087 -0.319648 + -0.679972 1.61529 -1.89452 0.529116 -0.808327 -0.258155 + -0.657013 1.72041 -1.98721 0.807873 -0.434723 -0.397941 + -0.666892 1.74132 -2.03102 0.736366 -0.464695 -0.491755 + -0.618961 1.9043 -2.05851 0.853878 -0.396202 -0.337516 + -0.692433 1.63726 -1.94318 -0.180185 -0.91296 -0.366112 + -0.692433 1.63726 -1.94318 0.717053 -0.53926 -0.441625 + -0.575139 2.01336 -2.097 0.763209 -0.617583 -0.190008 + -0.506492 2.07895 -2.15301 0.531751 -0.838599 -0.118292 + -0.248157 2.16615 -2.10865 0.108474 -0.934503 -0.339024 + -0.236264 2.17147 -2.12526 -0.0254974 -0.970204 -0.240943 + -0.211458 2.17238 -2.14524 -0.139532 -0.979493 -0.14534 + -0.270663 2.18392 -2.22823 -0.00269414 -0.99329 -0.115618 + -0.239822 2.18818 -2.24701 -0.081898 -0.992073 -0.095312 + -0.146993 2.16015 -2.15325 -0.104751 -0.980314 -0.16737 + -0.119333 2.16347 -2.1654 0.0441472 -0.975183 -0.216954 + -0.314309 2.19617 -2.35364 0.0538928 -0.997682 0.0415453 + -0.268684 2.19336 -2.36638 -0.0585484 -0.995402 0.0758044 + -0.206692 2.18146 -2.25856 -0.157522 -0.986015 -0.0544196 + -0.321355 2.17099 -2.48582 0.0353566 -0.964084 0.263235 + -0.27985 2.16796 -2.50339 -0.0479251 -0.958592 0.280722 + -0.230059 2.1897 -2.37884 -0.128191 -0.98699 0.0970404 + -0.168067 2.17779 -2.27101 -0.0113098 -0.996495 -0.082884 + -0.364216 2.11959 -2.62621 0.160657 -0.921714 0.353033 + -0.322711 2.11657 -2.64377 0.113074 -0.942002 0.315985 + -0.236111 2.15775 -2.5155 -0.0391953 -0.964627 0.260688 + -0.18632 2.17957 -2.3909 -0.0550696 -0.992989 0.104592 + -0.450585 2.06243 -2.70541 0.449636 -0.837078 0.311654 + -0.409212 2.06633 -2.72435 0.292901 -0.8983 0.327514 + -0.370329 2.07271 -2.7538 0.271262 -0.917557 0.2907 + -0.290031 2.11226 -2.67471 0.0813537 -0.955006 0.285209 + -0.481281 2.05005 -2.67016 0.609404 -0.753512 0.246668 + -0.496392 2.00565 -2.75105 0.653384 -0.714778 0.249365 + -0.458077 2.02381 -2.7897 0.484304 -0.818918 0.307934 + -0.419195 2.03027 -2.8191 0.380277 -0.876176 0.29615 + -0.527088 1.99318 -2.71585 0.787791 -0.442397 0.428567 + -0.526564 1.96599 -2.80317 0.736628 -0.61928 0.271795 + -0.48825 1.98423 -2.84176 0.610204 -0.76504 0.205827 + -0.548842 1.974 -2.67123 0.795435 -0.593333 0.123447 + -0.593047 1.92413 -2.62486 0.794315 -0.596341 0.115931 + -0.531743 1.92998 -2.84378 0.823273 -0.5396 0.176218 + -0.51372 1.95601 -2.89967 0.730385 -0.667414 0.145246 + -0.481219 1.9705 -2.93378 0.455656 -0.873991 0.168869 + -0.455748 1.99864 -2.87592 0.439666 -0.871288 0.218064 + -0.374755 2.03635 -2.85183 0.282487 -0.906706 0.313186 + -0.540993 1.91304 -2.85124 0.841803 -0.521316 0.139993 + -0.52297 1.93907 -2.90713 0.825938 -0.544307 0.146821 + -0.508552 1.94894 -2.92703 0.636434 -0.757467 0.145582 + -0.507767 1.95508 -2.96886 0.213725 -0.97544 -0.0532826 + -0.456696 1.97413 -2.95585 0.286324 -0.869506 0.402465 + -0.411309 2.00472 -2.90865 0.31193 -0.904832 0.28979 + -0.334863 2.03597 -2.88316 0.261405 -0.917724 0.299082 + -0.337649 2.06849 -2.78469 0.191887 -0.933404 0.30321 + -0.517922 1.95242 -2.95826 0.1088 -0.983819 -0.14235 + -0.517137 1.95856 -3.00009 0.053763 -0.990498 -0.126585 + -0.483244 1.9587 -2.99094 0.0992161 -0.983626 0.150452 + -0.462167 1.9588 -2.9683 -0.337711 -0.517515 0.786212 + -0.436121 1.96423 -2.9789 0.412128 -0.537216 0.7359 + -0.418222 1.97945 -2.97868 0.274929 -0.612696 0.740957 + -0.372835 2.01005 -2.93147 0.285233 -0.913547 0.289955 + -0.288907 2.03914 -2.91625 0.185164 -0.93607 0.299144 + -0.297757 2.06811 -2.81603 0.14378 -0.946268 0.289663 + -0.391961 1.97369 -2.9829 0.119732 -0.155226 0.980596 + -0.374062 1.98892 -2.98267 0.245697 -0.527914 0.812982 + -0.326879 2.01322 -2.96456 0.261368 -0.902153 0.343229 + -0.243345 2.03958 -2.93603 0.0675455 -0.943215 0.325244 + -0.262208 2.06183 -2.84155 0.0815764 -0.958129 0.27447 + -0.3657 1.98304 -2.9843 0.0994869 -0.131514 0.986309 + -0.26893 2.09855 -2.72197 0.0653673 -0.954627 0.29054 + -0.21501 2.14395 -2.5628 0.0811233 -0.956504 0.280212 + -0.176994 2.15529 -2.54404 0.154638 -0.964924 0.212152 + -0.233381 2.09228 -2.74749 0.0991773 -0.957212 0.271862 + -0.195365 2.10352 -2.72877 0.199717 -0.947145 0.251056 + -0.216646 2.06227 -2.86133 0.164678 -0.944947 0.282767 + -0.151773 2.11226 -2.73851 0.288032 -0.927812 0.237069 + -0.128718 2.16379 -2.55436 0.256177 -0.952474 0.164822 + -0.098774 2.18937 -2.41326 0.121431 -0.991376 0.0492831 + -0.14705 2.18087 -2.40294 0.118078 -0.990372 0.072249 + -0.188123 2.03604 -2.94528 0.166006 -0.932256 0.321465 + -0.173054 2.07101 -2.87106 0.255078 -0.916478 0.308226 + -0.126505 2.07915 -2.88576 0.384142 -0.869572 0.310288 + -0.120238 2.11383 -2.78023 0.435674 -0.869701 0.231964 + -0.284915 2.01668 -2.98715 0.139171 -0.854689 0.500138 + -0.229693 2.01313 -2.99641 0.110544 -0.955673 0.272891 + -0.21399 2.01164 -3.01763 0.0319108 -0.947525 0.318084 + -0.141573 2.04417 -2.95997 0.285424 -0.888593 0.359076 + -0.332098 1.99229 -3.00532 0.233097 -0.965953 0.112253 + -0.313287 2.00102 -3.03582 0.278906 -0.951632 0.12887 + -0.297585 1.99953 -3.05705 0.107263 -0.990981 0.0803216 + -0.3657 1.98304 -2.9843 0.418968 0.366156 0.8309 + 1.14799 1.74733 -2.15643 0.928722 -0.304044 -0.212207 + 1.13429 1.77906 -2.24399 0.815696 -0.46777 -0.34034 + 1.15743 1.91745 -2.19529 0.765258 0.153009 -0.625275 + 1.20667 2.0536 -2.0707 0.916496 -0.0594858 -0.395597 + 1.24921 2.14475 -2.01399 0.800373 -0.233246 -0.552267 + 1.11601 1.94174 -2.22355 0.73333 0.272877 -0.622708 + 1.13715 2.12449 -2.13089 0.641395 0.256459 -0.723077 + 1.18765 2.08689 -2.10077 0.750226 0.168115 -0.639451 + 1.11354 1.8732 -2.26963 0.921117 0.202597 -0.332413 + 1.02199 2.18507 -2.21342 0.778208 0.262519 -0.570505 + 1.09573 2.14878 -2.15916 0.644863 0.242643 -0.724759 + 1.10694 2.28195 -2.11301 0.632316 0.157299 -0.758573 + 1.14176 2.21318 -2.09731 0.651887 0.190926 -0.733887 + 1.08587 1.87405 -2.34371 0.92966 0.244765 -0.275358 + 1.01952 2.11653 -2.25951 0.885084 0.279305 -0.372311 + 1.10662 1.77992 -2.31807 0.836646 -0.450327 -0.311815 + 1.07554 1.80925 -2.43787 0.952325 0.203261 -0.227515 + 1.06243 1.89044 -2.4139 0.936046 0.272328 -0.222833 + 0.996072 2.13292 -2.3297 0.909632 0.327286 -0.255837 + 1.09318 1.74847 -2.21301 0.471848 -0.865716 -0.167019 + 1.05909 1.73242 -2.2304 0.489568 -0.858959 -0.150045 + 1.07252 1.76395 -2.33541 0.512921 -0.821206 -0.250063 + 1.07554 1.80925 -2.43787 0.574721 -0.75459 -0.316684 + 1.06729 1.76693 -2.35678 0.655905 -0.708823 -0.259536 + 1.00205 1.70979 -2.27861 0.093853 -0.847204 -0.522913 + 1.12953 1.76009 -2.17713 0.386969 -0.900022 -0.200537 + 1.10326 1.7364 -2.1069 0.313372 -0.931716 -0.183587 + 1.0669 1.72478 -2.14277 0.420731 -0.901772 -0.0989536 + 1.03738 1.71233 -2.1638 0.453112 -0.888217 -0.0758886 + 1.00727 1.7068 -2.25724 0.400765 -0.898458 -0.179334 + 1.15072 1.77302 -2.19552 0.351682 -0.906842 -0.232286 + 1.14596 1.75405 -2.12866 -0.537992 -0.790792 -0.291912 + 1.11534 1.73461 -2.08659 0.0192434 -0.903832 -0.427454 + 1.01531 1.69599 -2.04791 0.265646 -0.96066 -0.0810202 + 0.985789 1.68354 -2.06893 0.213289 -0.976622 0.0267796 + 0.985572 1.68671 -2.19063 0.186134 -0.974207 -0.127576 + 1.14514 1.73694 -2.10343 -0.789833 -0.484626 -0.375901 + 1.11452 1.7175 -2.06136 -0.12554 -0.820661 -0.557454 + 1.02739 1.69411 -2.02766 0.0801468 -0.921829 -0.379221 + 0.891333 1.6773 -1.97893 -0.153091 -0.871265 -0.466327 + 0.937936 1.68407 -2.04925 -0.17611 -0.979272 -0.100057 + 1.15072 1.77302 -2.19552 -0.797612 0.527641 0.292252 + 1.14799 1.74733 -2.15643 -0.997747 0.0634496 -0.0217945 + 1.14241 1.71125 -2.06434 -0.547246 -0.706409 -0.448896 + 1.10601 1.7037 -2.03866 -0.111 -0.830124 -0.546418 + 1.01888 1.6804 -2.0049 -0.0208503 -0.856074 -0.516433 + 1.13429 1.77906 -2.24399 -0.749858 0.575728 0.32596 + 1.15142 1.68191 -2.03092 -0.798592 -0.54239 -0.260892 + 0.942828 1.68755 -0.866894 -0.285676 -0.949615 0.128919 + 0.931592 1.69201 -0.860605 -0.621255 -0.759147 0.194263 + 0.882892 1.77276 -0.908069 -0.880223 -0.330703 0.340357 + 0.848172 1.81015 -0.954435 -0.824321 -0.264242 0.50067 + 0.923086 1.71773 -0.754359 -0.637496 -0.643845 0.423158 + 0.914407 1.75692 -0.77904 -0.972244 -0.178628 0.151107 + 0.901911 1.77293 -0.848373 -0.941113 -0.262454 0.213132 + 0.8945 1.86096 -0.814435 -0.929991 -0.202739 0.306616 + 0.86143 1.91345 -0.846758 -0.854838 -0.322911 0.406178 + 0.927778 1.73612 -0.733014 0.0604344 -0.762729 0.643888 + 0.927778 1.73612 -0.733014 -0.965046 -0.0519368 0.256883 + 0.919099 1.77531 -0.757695 -0.925774 -0.160899 0.342131 + 0.906995 1.84494 -0.745102 -0.979667 0.0247327 0.199099 + 0.920946 1.88997 -0.719496 -0.948819 -0.13377 0.286092 + 0.898654 2.01237 -0.70069 -0.907191 -0.265216 0.326595 + 0.865585 2.06487 -0.733021 -0.784253 -0.448947 0.428245 + 0.79727 2.10626 -0.78912 -0.590938 -0.620716 0.515271 + 0.82671 1.95084 -0.893124 -0.749553 -0.431167 0.502261 + 0.817107 1.82925 -0.992113 -0.690958 -0.284297 0.664644 + 0.925346 1.94468 -0.654843 -0.963054 -0.202689 0.177324 + 0.903054 2.06699 -0.636095 -0.915931 -0.375406 0.141917 + 0.830701 2.16795 -0.637364 -0.676618 -0.678194 0.286777 + 0.762385 2.20934 -0.693463 -0.222679 -0.898963 0.3772 + 0.718762 2.16758 -0.736722 0.409235 -0.743795 0.528485 + 0.745911 2.11019 -0.834725 -0.0881068 -0.750393 0.655093 + 0.915514 2.00015 -0.555323 -0.951565 -0.30599 -0.0298895 + 0.882244 2.07495 -0.492681 -0.908861 -0.416316 0.0255637 + 0.869784 2.14179 -0.573461 -0.861026 -0.508257 0.0175657 + 0.754295 2.27651 -0.547195 -0.0862156 -0.942741 0.322189 + 0.708909 2.2274 -0.610544 0.357385 -0.884183 0.300825 + 0.665285 2.18573 -0.653752 0.875837 -0.408195 0.257462 + 0.915054 2.03059 -0.423643 -0.703805 -0.6802 0.204906 + 0.833844 2.20954 -0.4174 -0.845466 -0.51177 0.152574 + 0.793378 2.25035 -0.483283 -0.754844 -0.646424 0.111117 + 0.776758 2.28597 -0.306972 -0.581938 -0.808646 0.0862505 + 0.743554 2.29407 -0.424208 0.314961 -0.941988 -0.116012 + 0.866654 2.16518 -0.348362 -0.868133 -0.483363 0.11272 + 0.820451 2.25574 -0.240823 -0.737043 -0.674493 0.0427327 + 0.779985 2.29664 -0.306655 -0.766011 -0.638531 0.0741976 + 0.833698 2.22428 -0.017537 -0.652667 -0.754624 -0.0675919 + 0.9677 2.00174 -0.371486 -0.540538 -0.829977 0.137682 + 0.899356 2.11045 -0.280376 -0.814365 -0.571365 0.101739 + 0.874688 2.17887 -0.153082 -0.936324 -0.350063 0.0274422 + 0.841986 2.2336 -0.221068 -0.821032 -0.56268 0.0964225 + 0.848062 2.25593 0.053241 -0.724839 -0.688894 -0.00578605 + 0.948408 2.01676 -0.468093 -0.440186 -0.896435 -0.0513962 + 1.00105 1.98792 -0.415936 0.491473 -0.781639 -0.384051 + 0.991919 2.0016 -0.299444 0.192013 -0.869892 0.454333 + 0.923575 2.11031 -0.208334 -0.463531 -0.855419 0.231077 + 0.878053 2.15134 -0.056197 -0.966034 -0.250109 -0.0649895 + 0.869596 2.23379 0.072996 -0.867958 -0.492548 -0.0635955 + 0.872962 2.20626 0.169881 -0.949061 -0.200448 -0.243111 + 0.828111 2.24166 0.237958 -0.389069 -0.912578 -0.125804 + 1.018 2.02083 -0.35915 0.968861 -0.247604 0.000397428 + 0.983368 2.07331 -0.217248 0.314194 -0.839755 0.442825 + 0.960458 2.11612 -0.120201 -0.11602 -0.95524 0.272131 + 0.928955 2.14092 -0.013948 -0.514095 -0.828573 -0.221749 + 0.892072 2.13503 -0.10214 -0.74989 -0.652426 -0.109573 + 1.00554 2.1554 -0.369826 0.985544 -0.0256754 -0.167462 + 1.00945 2.09254 -0.276952 0.976226 -0.185235 0.112561 + 1.02436 2.14526 -0.215457 0.965487 -0.257281 -0.0405055 + 1.0088 2.10705 -0.139885 0.60466 -0.750663 0.266256 + 0.985888 2.14995 -0.042786 0.480837 -0.872258 0.0892287 + 0.905681 2.11917 0.074324 0.559914 -0.810846 0.170369 + 0.988594 2.12248 -0.426613 0.930138 -0.0321563 -0.365798 + 1.00756 2.25448 -0.396038 0.97163 -0.0942255 -0.216926 + 1.01462 2.2153 -0.323177 0.987623 -0.0737678 -0.138414 + 1.02953 2.26801 -0.26168 0.872103 -0.363405 -0.327677 + 0.948408 2.01676 -0.468093 0.706343 0.00922063 -0.70781 + 0.905681 2.11917 0.074324 -0.960751 -0.0657405 -0.269511 + 0.855557 2.12347 0.166472 -0.957056 0.00752283 -0.289806 + 0.804931 2.14597 0.266304 -0.707835 0.102181 -0.698948 + 0.822335 2.22876 0.269713 -0.583502 -0.399815 -0.706876 + 0.869576 2.10715 0.120537 -0.527845 -0.815367 -0.237815 + 0.846302 2.08541 0.208805 -0.87344 0.292854 -0.389023 + 0.738914 2.12985 0.32183 -0.655032 -0.00053789 -0.755601 + 0.645094 2.2745 0.37449 -0.445687 -0.88854 -0.108906 + 0.689694 2.22859 0.3148 -0.137128 -0.987659 0.07567 + 0.905681 2.11917 0.074324 -0.107938 -0.933078 -0.343096 + 0.901206 1.61571 -1.00085 -0.0630899 -0.586398 -0.807562 + 0.605962 1.89597 -2.56588 0.923388 0.373922 -0.0868155 + 0.592234 1.92008 -2.61283 0.936869 0.334412 -0.102206 + 0.603401 1.90985 -2.54392 0.747603 -0.617252 -0.245134 + 0.608231 1.90077 -2.492 0.809966 0.583106 -0.0627855 + 0.621039 1.88748 -2.46078 0.657496 0.752541 -0.0371633 + 0.618769 1.88277 -2.53462 0.757364 0.649774 -0.06475 + 0.643558 1.86843 -2.48698 0.630719 0.773953 -0.0564912 + 0.63938 1.87276 -2.42967 0.651434 0.758661 0.00822009 + 0.661899 1.8537 -2.45587 0.813414 0.547971 -0.195155 + 0.672911 1.83834 -2.44066 0.882328 0.221354 -0.415332 + 0.693482 1.82274 -2.41123 0.75964 0.643992 -0.0906696 + 0.678992 1.83517 -2.44137 0.773457 0.623367 -0.114794 + 0.710576 1.80419 -2.39672 0.773541 0.623246 -0.114885 + 0.719806 1.76903 -2.18362 0.780362 0.618151 -0.0944661 + 0.705589 1.77883 -2.23698 0.799448 0.594769 -0.0844562 + 0.690866 1.79182 -2.28809 0.917138 0.398523 -0.00611514 + 0.685856 1.80393 -2.25027 0.826716 0.558339 -0.0692761 + 0.685589 1.8085 -2.33898 0.93944 0.342393 0.0148036 + 0.05808 2.02101 -3.09945 0.166767 0.877209 0.450214 + 0.021963 2.02879 -3.08313 0.255024 0.96108 0.106246 + 0.052011 2.01575 -3.03735 0.774316 0.344201 -0.530999 + 0.080404 2.00707 -3.02371 0.242811 0.966685 0.08101 + 0.086472 2.01224 -3.08588 0.0147812 0.897971 0.439807 + 0.074256 2.02532 -3.10312 -0.0780005 0.745662 0.661743 + 0.048257 2.03376 -3.11254 -0.0341371 -0.0290121 0.998996 + 0.021963 2.02879 -3.08313 0.290487 0.785079 0.547054 + 0.012141 2.04154 -3.09621 0.192698 0.296144 0.935503 + -0.030826 2.04626 -3.10218 -0.0202983 0.708357 0.705563 + 0.128187 1.99744 -3.05683 -0.0637266 0.896948 0.437519 + 0.11597 2.01052 -3.07408 -0.257645 0.673376 0.692953 + 0.106302 2.00064 -3.00818 0.00746884 0.959279 0.282363 + 0.138523 1.99564 -3.00172 0.126377 0.984305 -0.123176 + 0.160408 1.99253 -3.05032 0.0651072 0.828602 0.556039 + 0.145789 2.00213 -3.05075 -0.323149 -0.629332 0.706764 + 0.128453 1.99899 -2.99251 0.00105117 0.997997 -0.0632477 + 0.221579 1.99604 -3.06701 0.0740882 0.981615 0.175904 + 0.267677 2.00019 -3.0754 -0.000177651 0.896667 0.442706 + 0.108633 1.98662 -2.9861 -0.317524 0.785011 0.531917 + 0.197416 1.994 -3.04727 -0.0632734 0.805886 0.588679 + 0.170471 1.99605 -3.05282 -0.124991 -0.154432 0.980065 + 0.153275 2.0171 -3.00969 -0.210018 -0.876372 0.433433 + 0.107118 2.02426 -3.03748 -0.429885 -0.846334 0.314512 + 0.0773 2.03273 -3.06076 -0.503356 -0.823811 0.260709 + 0.11597 2.01052 -3.07408 -0.429506 -0.876949 0.215605 + 0.074256 2.02532 -3.10312 -0.471371 -0.846677 0.246875 + 0.20748 1.99752 -3.04977 0.122771 -0.442068 0.88854 + 0.177958 2.01102 -3.01176 0.0449212 -0.473426 0.879687 + 0.141569 2.04417 -2.95997 -0.302838 -0.880115 0.365633 + 0.988445 1.85505 -2.622 -0.878003 0.477838 -0.0279526 + 0.940809 1.79078 -2.54588 -0.688319 0.706263 0.165561 + 0.96059 1.81258 -2.55664 -0.776608 0.270433 -0.568987 + 0.972108 1.83344 -2.56877 -0.761714 -0.0722076 -0.643877 + 0.999963 1.87599 -2.63407 -0.993306 -0.0704394 -0.0915477 + 0.99941 1.89818 -2.6767 -0.74186 0.590827 0.317122 + 0.93501 1.82717 -2.55451 -0.157193 -0.519338 -0.839987 + 0.986794 1.86725 -2.59635 -0.68801 -0.439859 -0.577205 + 0.986241 1.88944 -2.63897 -0.388349 -0.825609 -0.409335 + 0.99941 1.89818 -2.6767 -0.46223 -0.835078 -0.298311 + 0.977299 1.90902 -2.67488 -0.320458 -0.883482 -0.341711 + 0.976666 1.92511 -2.73795 -0.411386 -0.884875 -0.218535 + 0.923497 1.80836 -2.54154 -0.185011 -0.362747 -0.913337 + 0.852254 1.85836 -2.57474 -0.0736101 -0.654922 -0.752103 + 0.949696 1.86099 -2.58209 -0.114851 -0.669024 -0.734314 + 0.95185 1.87874 -2.60324 -0.0989063 -0.833448 -0.543675 + 0.940809 1.79078 -2.54588 0.0827279 -0.710166 -0.699157 + 0.903715 1.78656 -2.53079 -0.136504 -0.783727 -0.60592 + 0.840741 1.83956 -2.56177 -0.175085 -0.652354 -0.737414 + 0.731119 1.88176 -2.57267 -0.242526 -0.967617 -0.0699833 + 0.854408 1.8762 -2.59584 -0.0676272 -0.832852 -0.549348 + 0.942908 1.89832 -2.63916 -0.0937025 -0.889475 -0.447274 + 0.919104 1.7685 -2.47549 0.179908 -0.978183 -0.103879 + 0.864548 1.78519 -2.5062 -0.291845 -0.861076 -0.416382 + 0.801573 1.83818 -2.53719 -0.374448 -0.802298 -0.464873 + 0.944645 1.78837 -2.53371 0.4061 -0.883839 -0.232188 + 0.950974 1.78361 -2.44946 0.351076 -0.935938 -0.0276754 + 0.888813 1.77243 -2.3787 0.0895855 -0.99265 0.0813651 + 0.845095 1.77276 -2.36687 -0.0551768 -0.996462 0.0633942 + 0.875385 1.76883 -2.46366 -0.142435 -0.977914 -0.152959 + 0.992281 1.85263 -2.60982 0.581792 -0.736947 -0.344131 + 0.976516 1.80348 -2.50768 0.503351 -0.838155 -0.210082 + 0.971656 1.78821 -2.42584 0.241772 -0.964544 -0.10583 + 0.909495 1.77704 -2.35508 0.0545723 -0.993792 -0.0969456 + 0.988445 1.85505 -2.622 0.665404 -0.663961 -0.341165 + 0.99941 1.89818 -2.6767 0.538185 -0.7392 -0.404895 + 1.01338 1.85759 -2.5856 0.401176 -0.839211 -0.367129 + 0.997619 1.80835 -2.48351 0.424748 -0.870826 -0.247491 + 1.00311 1.78787 -2.37925 0.115823 -0.967061 -0.226668 + 1.03285 1.85781 -2.57419 0.784597 -0.47881 -0.393889 + 1.02907 1.808 -2.43692 0.246043 -0.929671 -0.274179 + 1.01319 1.78128 -2.35383 -0.00934356 -0.905481 -0.424285 + 0.919578 1.77053 -2.32961 -0.0249025 -0.878239 -0.477573 + 0.809791 1.777 -2.32622 -0.184381 -0.982652 -0.0199646 + 0.811545 1.77651 -2.33737 -0.0737089 -0.997265 0.00539728 + 1.04854 1.80823 -2.42551 0.0164932 -0.946946 -0.320968 + 1.05337 1.7853 -2.36599 -0.113349 -0.884727 -0.452118 + 1.01205 1.76204 -2.32391 -0.0818345 -0.780033 -0.620364 + 0.999293 1.74336 -2.30196 -0.114029 -0.669421 -0.73408 + 0.906824 1.75185 -2.30766 -0.150546 -0.811826 -0.564158 + 1.07554 1.80925 -2.43787 -0.112449 -0.939684 -0.32303 + 1.08037 1.78631 -2.37835 -0.967737 -0.200749 -0.152265 + 1.05223 1.76606 -2.33607 -0.501349 -0.547009 -0.670396 + 1.03915 1.7466 -2.31456 -0.693142 -0.0989139 -0.713982 + 0.962187 1.70664 -2.26596 -0.139371 -0.869368 -0.474104 + 0.919208 1.70335 -2.22546 -0.319646 -0.906121 -0.277076 + 0.863845 1.74856 -2.26716 -0.36381 -0.889022 -0.277997 + 1.06729 1.76693 -2.35678 -0.858027 0.0242464 -0.513031 + 0.937719 1.68725 -2.17096 -0.199332 -0.973195 -0.114711 + 0.827367 1.73037 -2.13986 -0.4184 -0.89074 -0.177551 + 1.07554 1.80925 -2.43787 -0.56335 0.754606 0.336462 + 0.845878 1.71427 -2.08536 -0.311218 -0.944863 -0.101862 + 0.780043 1.75154 -2.13453 -0.273662 -0.904408 -0.327346 + 0.816521 1.76973 -2.26183 -0.384722 -0.908388 -0.16377 + 0.906401 1.69126 -2.01231 -0.475823 -0.795449 -0.375304 + 0.814343 1.72146 -2.04842 -0.196403 -0.971376 -0.133618 + 0.765186 1.73346 -2.0804 0.0346962 -0.962277 -0.269849 + 0.729957 1.78796 -2.20421 -0.226103 -0.93998 -0.255567 + 0.811683 1.71602 -2.0232 -0.118898 -0.935009 -0.334098 + 0.762526 1.72793 -2.05523 0.15969 -0.946325 -0.28101 + 0.734326 1.74788 -2.13459 -0.13896 -0.86526 -0.481679 + 0.719806 1.76903 -2.18362 0.458204 -0.758763 -0.462956 + 0.796615 1.70206 -1.98982 -0.0554451 -0.895639 -0.441312 + 0.749727 1.7037 -2.00326 0.277602 -0.893677 -0.352531 + 0.753973 1.66567 -1.91479 -0.0225075 -0.871666 -0.489584 + 0.707085 1.6674 -1.92819 0.566041 -0.774363 -0.282772 + 0.696973 1.63682 -1.87902 0.588237 -0.579241 -0.564319 + 0.692435 1.63725 -1.94316 0.895204 -0.440702 -0.0662708 + 0.679974 1.61528 -1.89451 0.841999 -0.437785 -0.315249 + 0.887944 1.6543 -1.9417 -0.134328 -0.844154 -0.518998 + 0.750584 1.64268 -1.87757 -0.0114864 -0.799686 -0.600308 + 0.940837 1.64332 -1.93428 -0.0750667 -0.864966 -0.496185 + 0.990703 1.64564 -1.9449 -0.0530004 -0.871056 -0.488316 + 0.962247 1.59901 -1.84773 -0.0179635 -0.944272 -0.328675 + 1.0079 1.65625 -1.96487 -0.0247148 -0.857414 -0.514033 + 1.03521 1.60812 -1.87612 -0.0262762 -0.904125 -0.42646 + 1.01211 1.60125 -1.8584 -0.0235787 -0.951236 -0.307562 + 1.01425 1.66841 -1.98473 -0.0150394 -0.85289 -0.521874 + 1.08136 1.64392 -1.93812 0.0100114 -0.864092 -0.503234 + 1.05241 1.61881 -1.89603 0.00499999 -0.871903 -0.489654 + 1.06964 1.60894 -1.87873 -0.0283936 -0.873847 -0.485371 + 1.07751 1.66753 -1.97561 0.0187494 -0.846229 -0.532489 + 1.08771 1.65608 -1.95798 -0.0123419 -0.848289 -0.529389 + 1.11968 1.6542 -1.95813 -0.345921 -0.745367 -0.569882 + 1.09859 1.63405 -1.92082 -0.389466 -0.658427 -0.644042 + 1.12127 1.64042 -1.94785 -0.697529 -0.292428 -0.65417 + 1.08214 1.67944 -1.99584 -0.0257029 -0.871891 -0.489025 + 1.10948 1.66565 -1.97575 -0.146814 -0.867404 -0.475453 + 1.14237 1.66056 -1.98515 -0.297753 -0.833052 -0.466227 + 1.11854 1.68699 -2.02152 -0.243061 -0.815177 -0.525745 + 1.15142 1.68191 -2.03092 -0.260626 -0.854212 -0.449885 + 1.15142 1.68191 -2.03092 -0.285007 -0.757116 -0.587832 + 0.695715 1.8117 -2.16432 -0.84513 -0.49006 -0.213534 + 0.698705 1.81652 -2.21126 -0.929584 -0.364112 0.0574169 + 0.719806 1.76903 -2.18362 -0.932769 -0.329769 0.145584 + 0.705589 1.77883 -2.23698 -0.937332 -0.295927 0.183946 + 0.653716 1.92238 -2.23203 -0.861246 -0.493111 -0.122864 + 0.658388 1.92625 -2.27512 -0.904402 -0.426575 -0.00949785 + 0.684488 1.8263 -2.26462 -0.946262 -0.290834 0.141437 + 0.676987 1.83497 -2.31182 -0.954873 -0.289287 0.0673056 + 0.690866 1.79182 -2.28809 -0.961303 -0.213477 0.174136 + 0.685589 1.8085 -2.33898 -0.531176 -0.840559 -0.106357 + 0.605655 2.0055 -2.31019 -0.727267 -0.679278 0.0983055 + 0.650887 1.9349 -2.32232 -0.898501 -0.396874 0.187583 + 0.636569 1.9364 -2.36351 -0.866627 -0.457012 0.200243 + 0.67171 1.85164 -2.3627 -0.9307 -0.356629 0.081325 + 0.591336 2.007 -2.35139 -0.682898 -0.660177 0.312756 + 0.561598 2.0251 -2.37295 -0.632528 -0.746887 0.205107 + 0.623155 1.94846 -2.40779 -0.818553 -0.516234 0.25194 + 0.658297 1.8637 -2.40698 -0.888783 -0.449241 0.0908186 + 0.688957 1.80989 -2.34959 -0.729614 -0.672942 -0.121705 + 0.689224 1.80532 -2.26088 -0.00198846 -0.99766 -0.0683426 + 0.685856 1.80393 -2.25027 -0.14933 -0.973203 -0.174861 + 0.539496 2.03274 -2.40997 -0.662498 -0.733775 0.150567 + 0.601053 1.95609 -2.44482 -0.781668 -0.581461 0.225607 + 0.645874 1.8849 -2.45391 -0.858388 -0.493948 0.13851 + 0.672911 1.83834 -2.44066 -0.686624 -0.701432 -0.191157 + 0.685333 1.81714 -2.39374 -0.669002 -0.728987 -0.144962 + 0.453322 2.10837 -2.38597 -0.689794 -0.720783 0.0682383 + 0.534164 2.03217 -2.44998 -0.71007 -0.694369 0.116843 + 0.58036 1.97108 -2.48638 -0.776028 -0.592062 0.217355 + 0.625181 1.8998 -2.49552 -0.833791 -0.481988 0.269221 + 0.643558 1.86843 -2.48698 -0.859723 -0.427569 0.279395 + 0.618769 1.88277 -2.53462 -0.859778 -0.428671 0.277529 + 0.509063 2.05246 -2.47973 -0.713164 -0.691593 0.114444 + 0.555258 1.99137 -2.51613 -0.779658 -0.603485 0.16715 + 0.600393 1.91406 -2.54321 -0.836679 -0.504813 0.212445 + 0.605962 1.89597 -2.56588 -0.853097 -0.507039 0.123034 + 0.580257 1.93347 -2.58302 -0.829106 -0.557465 0.0426112 + 0.592234 1.92008 -2.61283 -0.809492 -0.583738 -0.0630373 + 0.481998 2.07939 -2.49098 -0.726315 -0.686515 0.0341247 + 0.535122 2.0107 -2.556 -0.797876 -0.594102 0.102163 + 0.518853 2.02675 -2.59321 -0.787628 -0.611561 0.0750756 + 0.465729 2.09545 -2.52819 -0.729191 -0.682697 0.0469641 + 0.407234 2.16024 -2.42981 -0.594599 -0.803673 -0.0237138 + 0.402023 2.16139 -2.476 -0.480142 -0.866346 0.137509 + 0.460517 2.0966 -2.57438 -0.675891 -0.725099 0.131919 + 0.501171 2.04318 -2.63445 -0.726673 -0.664823 0.173081 + 0.548847 1.974 -2.67123 -0.785996 -0.60498 0.127312 + 0.592978 1.92413 -2.62486 -0.795144 -0.59506 0.116829 + 0.345152 2.19191 -2.33487 -0.373347 -0.917638 -0.136206 + 0.36698 2.17379 -2.47308 -0.186296 -0.961549 0.201787 + 0.440632 2.10339 -2.61014 -0.434183 -0.824771 0.362268 + 0.481286 2.05005 -2.67016 -0.629525 -0.738069 0.242801 + 0.239822 2.18818 -2.24701 0.0848382 -0.993234 -0.0793073 + 0.314309 2.19617 -2.35364 -0.0478683 -0.998108 0.0385948 + 0.321355 2.17099 -2.48582 -0.0239328 -0.966633 0.255046 + 0.364216 2.11959 -2.62621 -0.156134 -0.917783 0.365098 + 0.405589 2.11579 -2.60722 -0.28078 -0.895119 0.346302 + 0.268684 2.19336 -2.36638 0.0556852 -0.996435 0.0633834 + 0.27985 2.16797 -2.5034 0.0425746 -0.963081 0.265825 + 0.322711 2.11657 -2.64377 -0.14093 -0.934372 0.327243 + 0.409211 2.06633 -2.72435 -0.33009 -0.881896 0.336599 + 0.450584 2.06243 -2.70541 -0.43858 -0.811436 0.386289 + 0.168068 2.17779 -2.27101 0.00387069 -0.992617 -0.121228 + 0.23006 2.1897 -2.37884 0.110104 -0.988137 0.107063 + 0.236111 2.15775 -2.51551 0.0530436 -0.966552 0.250924 + 0.290031 2.11226 -2.67471 -0.0791806 -0.951862 0.296123 + 0.136501 2.18334 -2.28403 -0.0499216 -0.994533 -0.0917138 + 0.186321 2.17957 -2.3909 0.0636485 -0.988647 0.13611 + 0.176997 2.15529 -2.54403 -0.153803 -0.964792 0.213357 + 0.21501 2.14396 -2.56281 -0.0813519 -0.956509 0.280129 + 0.087766 2.16911 -2.17837 -0.0710534 -0.972233 -0.222967 + 0.06815 2.17549 -2.20082 -0.0365212 -0.98288 -0.180591 + 0.09723 2.18464 -2.29607 -0.0302796 -0.998604 -0.0432892 + 0.14705 2.18087 -2.40294 -0.112111 -0.991343 0.0683447 + 0.051356 2.1418 -2.06767 -0.0580746 -0.96413 -0.258999 + 0.031741 2.14827 -2.09007 -0.108783 -0.964701 -0.239829 + 0.035064 2.17725 -2.21087 -0.0455962 -0.988311 -0.145476 + 0.064144 2.1864 -2.30612 -0.0394146 -0.997158 -0.0642082 + 0.020866 2.11114 -1.94717 -0.403464 -0.881483 -0.245368 + 0.011392 2.12379 -1.95869 -0.715407 -0.675197 -0.179729 + 0.014718 2.14764 -2.07438 -0.473125 -0.860291 -0.189876 + 0.018041 2.17662 -2.19519 -0.20174 -0.961301 -0.187621 + 0.029223 2.18812 -2.31711 -0.150187 -0.984385 -0.0918098 + 0.002151 2.0946 -1.83072 -0.349107 -0.783439 -0.514147 + 0.002151 2.1184 -1.86854 -0.59547 -0.742069 -0.307814 + 0.002151 2.13624 -1.96643 -0.419138 -0.889477 -0.182082 + 0.005477 2.16008 -2.08213 -0.418278 -0.89195 -0.171661 + 0.005477 2.17994 -2.19533 -0.132208 -0.979458 -0.15226 + -0.002113 2.09469 -1.83067 0.328957 -0.789289 -0.518468 + -0.002113 2.11848 -1.86849 -0.0235515 -0.931561 -0.36282 + -0.002113 2.13632 -1.96638 0.402711 -0.894165 -0.195686 + -0.005484 2.16008 -2.08213 0.395542 -0.897507 -0.195008 + -0.011354 2.12388 -1.95864 0.692403 -0.690699 -0.208595 + -0.002113 2.11848 -1.86849 1 0 0 + -0.031741 2.14827 -2.09007 0.1092 -0.964707 -0.239615 + -0.014725 2.14764 -2.07438 0.475505 -0.857196 -0.197762 + -0.018048 2.17662 -2.19519 0.21306 -0.961856 -0.171577 + -0.005484 2.17994 -2.19533 0.12258 -0.982895 -0.137449 + -0.051356 2.1418 -2.06767 0.0567394 -0.963986 -0.259828 + -0.06815 2.17549 -2.20082 0.0365345 -0.98286 -0.180698 + -0.035064 2.17725 -2.21087 0.0456091 -0.988311 -0.145471 + -0.087766 2.16911 -2.17837 0.0702526 -0.972457 -0.222241 + -0.1365 2.18334 -2.28403 0.0793184 -0.993959 -0.0758595 + -0.097229 2.18464 -2.29606 0.0346223 -0.997773 -0.0570121 + -0.064143 2.1864 -2.30612 0.0292856 -0.997033 -0.0711883 + -0.029223 2.18812 -2.31711 0.125127 -0.991131 -0.0447426 + -0.063854 2.19118 -2.4242 -0.00484698 -0.998882 0.0470204 + -0.016659 2.18512 -2.41971 -0.0572962 -0.99722 0.0476374 + -0.016659 2.19144 -2.31725 0.13125 -0.991112 -0.021707 + 0.01666 2.19144 -2.31725 -0.105249 -0.993016 -0.0533088 + -0.066816 2.18306 -2.56814 0.136549 -0.986821 0.0868206 + -0.019621 2.17709 -2.5636 -0.0644406 -0.997621 0.0244778 + 0.019625 2.17709 -2.5636 0.0423929 -0.997362 0.0589169 + 0.01666 2.18512 -2.41971 0.0660385 -0.996058 0.0592181 + -0.097183 2.16536 -2.59609 0.350658 -0.914514 0.201749 + -0.051781 2.15049 -2.76553 0.546643 -0.818045 0.178838 + -0.019621 2.17927 -2.78057 0.345269 -0.928424 0.137175 + 0.019625 2.17927 -2.78057 -0.362621 -0.926028 0.10478 + -0.082149 2.13271 -2.79353 0.430533 -0.87808 0.208848 + -0.049759 2.11734 -2.9173 0.617215 -0.735984 0.27816 + -0.017598 2.14611 -2.93234 0.369743 -0.864803 0.339713 + 0.017596 2.14611 -2.93234 -0.358336 -0.873881 0.328523 + 0.051785 2.15049 -2.76553 -0.512599 -0.848531 0.131292 + -0.088416 2.09802 -2.89905 0.52097 -0.798956 0.300432 + -0.056759 2.07064 -3.00603 0.557569 -0.760354 0.333136 + -0.017598 2.09191 -3.02626 0.309954 -0.849749 0.426445 + 0.017596 2.09191 -3.02626 -0.302777 -0.850348 0.430388 + -0.095416 2.05133 -2.98778 0.46486 -0.813286 0.349959 + -0.10711 2.02426 -3.03749 0.429799 -0.846141 0.315149 + -0.077283 2.03273 -3.06076 0.507711 -0.837308 0.20284 + -0.038122 2.054 -3.08099 0.428458 -0.836678 0.341166 + 0.012141 2.06244 -3.09041 -0.0630865 -0.724519 0.686361 + -0.153267 2.01711 -3.0097 0.263286 -0.879889 0.395571 + -0.14578 2.00214 -3.05077 0.322576 -0.62977 0.706635 + -0.115954 2.01052 -3.07408 0.44436 -0.870199 0.212834 + -0.177958 2.01103 -3.01177 0.0229328 -0.886177 0.462778 + -0.170472 1.99605 -3.05282 0.126099 -0.162419 0.978631 + -0.16041 1.99245 -3.05039 -0.0634353 0.826033 0.560041 + -0.128186 1.99744 -3.05683 0.0508681 0.898799 0.4354 + -0.115954 2.01052 -3.07408 0.2578 0.673148 0.693117 + -0.20748 1.99752 -3.04978 -0.122397 -0.442876 0.888189 + -0.197418 1.99401 -3.04728 0.0639059 0.805355 0.589337 + -0.138525 1.99565 -3.00174 -0.126523 0.98429 -0.12315 + -0.106301 2.00065 -3.00819 -0.0107928 0.95537 0.295214 + -0.086472 2.01224 -3.08588 -0.0123343 0.900004 0.435707 + -0.074239 2.02532 -3.10312 0.0780137 0.745587 0.661826 + -0.243512 1.99814 -3.05565 -0.0650774 -0.980629 0.184748 + -0.267675 2.00019 -3.07539 -0.278348 -0.901611 0.331088 + -0.221581 1.99605 -3.06703 -0.0759167 -0.99706 -0.0103557 + -0.197418 1.99401 -3.04728 0.547496 -0.434578 -0.715116 + -0.138525 1.99565 -3.00174 0.590231 -0.291836 -0.752635 + -0.325906 1.99664 -3.08165 0.0820147 -0.996547 -0.0129895 + -0.295996 1.99739 -3.09994 -0.460867 -0.349252 0.815858 + -0.244328 1.99334 -3.06154 -0.124772 0.929909 0.345979 + -0.322338 1.99302 -3.04417 0.367126 -0.90602 0.210586 + -0.346889 1.99167 -3.01484 0.193866 -0.973581 -0.120645 + -0.3657 1.98304 -2.9843 0.155747 -0.971517 -0.178596 + -0.319848 1.99731 -3.11521 0.0142549 -0.999747 -0.0174161 + -0.080403 2.00708 -3.02372 -0.206357 0.973241 0.101089 + -0.052009 2.01575 -3.03735 -0.774373 0.343769 -0.531196 + -0.058077 2.02101 -3.09945 -0.166707 0.877136 0.450379 + -0.048219 2.03375 -3.11253 0.0336214 -0.0285343 0.999027 + -0.021961 2.02879 -3.08313 -0.338109 0.882253 0.327586 + -0.012102 2.04153 -3.0962 -0.289705 0.0301424 0.956641 + -0.012102 2.06243 -3.0904 0.013743 -0.970612 0.240255 + -0.074239 2.02532 -3.10312 0.465547 -0.827793 0.313089 + 0.038139 2.05391 -3.08104 -0.476639 -0.807923 0.34652 + 0.056757 2.07064 -3.00603 -0.569344 -0.747539 0.342102 + 0.049757 2.11734 -2.9173 -0.625374 -0.735515 0.260626 + 0.095412 2.05133 -2.98777 -0.460017 -0.811154 0.361127 + 0.088411 2.09802 -2.89905 -0.507649 -0.811172 0.290333 + 0.082143 2.1327 -2.79352 -0.430592 -0.878062 0.2088 + 0.06682 2.18306 -2.56814 -0.107911 -0.986458 0.123515 + 0.1265 2.07915 -2.88575 -0.394793 -0.871917 0.289652 + 0.120232 2.11383 -2.78023 -0.435596 -0.869733 0.231995 + 0.097178 2.16536 -2.59608 -0.350573 -0.914514 0.201899 + 0.128721 2.16379 -2.55435 -0.257283 -0.951991 0.165884 + 0.063855 2.19118 -2.4242 -0.000975231 -0.998607 0.0527618 + 0.188124 2.03604 -2.94528 -0.150306 -0.925153 0.348569 + 0.173055 2.07101 -2.87106 -0.22875 -0.929199 0.290281 + 0.151776 2.11226 -2.73851 -0.288771 -0.927944 0.23565 + 0.229697 2.01313 -2.99641 -0.0932213 -0.95808 0.270912 + 0.243346 2.03958 -2.93603 -0.0896241 -0.936437 0.339196 + 0.216647 2.06227 -2.86133 -0.184957 -0.952038 0.243752 + 0.195368 2.10352 -2.72876 -0.198373 -0.947702 0.25002 + 0.284919 2.01668 -2.98715 -0.149152 -0.942242 0.299888 + 0.326879 2.01322 -2.96456 -0.268307 -0.900392 0.3425 + 0.288908 2.03914 -2.91625 -0.189532 -0.940151 0.283185 + 0.262209 2.06183 -2.84155 -0.116807 -0.950909 0.286581 + 0.332102 1.99229 -3.00532 -0.291332 -0.951267 0.101077 + 0.374062 1.98892 -2.98267 -0.273677 -0.581606 0.766052 + 0.372835 2.01005 -2.93147 -0.283981 -0.909524 0.303515 + 0.334864 2.03597 -2.88316 -0.238648 -0.925878 0.292913 + 0.34688 1.99167 -3.01484 -0.156409 -0.971258 -0.179428 + 0.365691 1.98304 -2.9843 -0.155845 -0.971513 -0.178535 + 0.365691 1.98304 -2.9843 -0.418863 0.366701 0.830713 + 0.098775 2.18937 -2.41326 -0.12522 -0.99134 0.0395571 + 0.233381 2.09228 -2.74749 -0.0990519 -0.957195 0.271969 + 0.26893 2.09856 -2.72197 -0.065376 -0.954634 0.290517 + 0.33765 2.06849 -2.78469 -0.215051 -0.92693 0.307496 + 0.297758 2.06811 -2.81603 -0.139598 -0.940116 0.310956 + 0.374756 2.03635 -2.85183 -0.28497 -0.910517 0.299585 + 0.419196 2.03027 -2.8191 -0.367728 -0.882284 0.293855 + 0.37033 2.07271 -2.7538 -0.270668 -0.913019 0.305181 + 0.411303 2.00472 -2.90865 -0.30848 -0.906146 0.289377 + 0.455743 1.99864 -2.87592 -0.440521 -0.871775 0.214361 + 0.48825 1.98423 -2.84176 -0.544509 -0.815323 0.19687 + 0.458077 2.02381 -2.7897 -0.48864 -0.831724 0.263563 + 0.496391 2.00565 -2.75105 -0.626191 -0.738698 0.249418 + 0.45669 1.97413 -2.95585 -0.285572 -0.866724 0.408949 + 0.481213 1.9705 -2.93378 -0.414682 -0.893845 0.170531 + 0.51372 1.95601 -2.89967 -0.735211 -0.660761 0.151195 + 0.526564 1.96599 -2.80317 -0.749502 -0.626188 0.214791 + 0.418222 1.97945 -2.97868 -0.268608 -0.616232 0.740343 + 0.436121 1.96422 -2.97889 -0.412185 -0.536924 0.736082 + 0.462167 1.9588 -2.9683 0.337973 -0.517308 0.786236 + 0.483244 1.9587 -2.99094 -0.099222 -0.98363 0.150426 + 0.507767 1.95508 -2.96886 -0.21824 -0.9754 -0.0310735 + 0.508552 1.94894 -2.92703 -0.919444 0.386207 0.0739347 + 0.391961 1.97369 -2.9829 -0.119741 -0.155146 0.980608 + 0.365691 1.98304 -2.9843 -0.0994297 -0.131447 0.986324 + 0.517137 1.95856 -3.00009 -0.0538259 -0.990492 -0.126603 + 0.517922 1.95242 -2.95825 -0.109137 -0.98378 -0.142361 + 0.508552 1.94894 -2.92703 -0.109161 -0.98378 -0.142338 + 0.571224 1.94331 -2.66948 -0.79599 -0.587679 0.145031 + 0.527093 1.99318 -2.71585 -0.791332 -0.451765 0.411949 + 0.556864 1.94751 -2.74135 -0.744495 -0.641418 0.185232 + 0.609047 1.90942 -2.58578 -0.474647 -0.879605 0.0317055 + 0.700579 1.79093 -2.19915 -0.144659 -0.952667 -0.267395 + 0.717862 1.79902 -2.24636 -0.19776 -0.9714 -0.131429 + 0.804427 1.78079 -2.30399 -0.407845 -0.913024 -0.00711501 + 0.731574 1.796 -2.30293 -0.220019 -0.974287 0.0485341 + 0.736939 1.79212 -2.32521 -0.171861 -0.901383 0.397458 + 0.739461 1.78442 -2.33447 -0.183961 -0.938257 0.292972 + 0.741214 1.78393 -2.34562 -0.189176 -0.976166 -0.106364 + 0.702936 1.8023 -2.31744 0.536282 -0.760112 0.366922 + 0.705458 1.7946 -2.32671 -0.346331 -0.913361 0.214073 + 0.707916 1.79867 -2.37156 -0.373513 -0.908516 -0.187316 + 0.743874 1.78945 -2.37079 -0.203501 -0.961387 -0.185264 + 0.777424 1.78561 -2.40034 -0.261454 -0.949836 -0.171622 + 0.701834 1.80185 -2.37086 -0.531235 -0.834439 -0.146633 + 0.678992 1.83517 -2.44137 -0.470099 -0.831225 -0.296768 + 0.710576 1.80419 -2.39672 -0.346261 -0.851567 -0.39362 + 0.661899 1.8537 -2.45587 -0.45384 -0.76975 -0.448903 + 0.693482 1.82274 -2.41123 -0.357646 -0.724737 -0.588936 + 0.715772 1.8243 -2.42795 -0.417218 -0.773273 -0.477471 + 0.766587 1.80198 -2.44288 -0.420047 -0.840071 -0.343281 + 0.66167 1.87441 -2.44634 -0.405396 -0.773493 -0.487199 + 0.750759 1.86051 -2.52226 -0.472392 -0.813009 -0.340386 + 0.63938 1.87276 -2.42967 -0.272151 -0.793003 -0.545051 + 0.64211 1.89408 -2.4698 -0.166273 -0.924298 -0.343551 + 0.731199 1.88017 -2.54571 -0.474357 -0.869574 -0.137207 + 0.621039 1.88748 -2.46078 0.0885132 -0.891278 -0.444735 + 0.608231 1.90077 -2.492 -0.04725 -0.973987 -0.221623 + 0.63728 1.90316 -2.52174 -0.182826 -0.975969 -0.118569 + 0.6372 1.90475 -2.54868 -0.228304 -0.973585 -0.00300028 + 0.604146 1.91391 -2.55595 0.150155 -0.974546 -0.166474 + 0.642102 1.90017 -2.57856 -0.254315 -0.963386 0.0849251 + 0.592234 1.92008 -2.61283 0.629907 -0.746916 -0.212916 + 0.592978 1.92413 -2.62486 0.629913 -0.746911 -0.212917 + 0.980616 1.61008 -1.44111 0.759422 0.366883 0.537284 + 1.00949 1.57435 -1.40242 -0.0864719 0.698867 0.710005 + 1.04089 1.60615 -1.42989 -0.101678 0.632006 0.768264 + 0.981022 1.60948 -1.42407 0.946317 -0.023956 -0.322352 + 1.00949 1.57435 -1.40242 0.775835 0.630926 0.00358046 + 1.0099 1.57375 -1.38538 0.755706 -0.609669 -0.239191 + 1.00949 1.57435 -1.40242 0.465199 -0.884194 -0.0423172 + -0.915918 1.85125 -0.681822 -0.971441 -0.2338 -0.0405009 + -0.920037 1.95183 -0.55663 -0.995019 -0.0961423 0.0263379 + -0.92271 1.96082 -0.624798 -0.999424 -0.0187193 0.028308 + -0.924635 2.00506 -0.519026 -0.954455 0.0669949 -0.290736 + -0.927308 2.01413 -0.587145 -0.994889 -0.081764 -0.0592547 + -0.927079 2.0888 -0.602681 -0.978241 0.0251031 -0.205949 + -0.920312 2.0305 -0.651286 -0.994058 0.0651446 -0.087207 + -0.929869 1.89636 -0.656157 -0.997049 -0.0766943 -0.00330807 + -0.940043 2.06386 -0.530873 -0.954912 -0.151628 -0.255248 + -0.939814 2.13853 -0.546399 -0.945401 -0.0122623 -0.325679 + -0.917013 2.20864 -0.606034 -0.919853 0.121785 -0.37288 + -0.910245 2.15041 -0.65459 -0.938109 0.168784 -0.302428 + -0.948391 2.01676 -0.468093 -0.468949 -0.844946 -0.257204 + -0.963799 2.07547 -0.479989 -0.884744 -0.118253 -0.450826 + -0.964867 2.1885 -0.493562 -0.913728 -0.0286139 -0.405318 + -0.936145 2.27055 -0.554076 -0.878188 0.0606318 -0.474457 + -0.910296 1.95936 -0.588676 -0.757762 0.463024 -0.459788 + -1.42465 1.65393 0.554738 0.158651 -0.348461 -0.923799 + -1.33145 1.63145 0.543685 -0.0662636 -0.755799 -0.651442 + -1.36103 1.64833 0.656244 -0.44662 -0.894571 0.0165496 + -1.42107 1.71157 0.51291 -0.341219 -0.537438 -0.771187 + -1.32788 1.68917 0.501908 -0.499495 -0.749325 -0.43476 + -1.24213 1.58922 0.591819 0.152189 -0.58564 -0.796156 + -1.4907 1.74001 0.544657 -0.49971 -0.517585 -0.694547 + -1.47947 1.78026 0.487332 -0.513283 -0.578693 -0.633763 + -1.3416 1.70969 0.431165 -0.247209 -0.720373 -0.648036 + -1.25585 1.60974 0.521077 -0.733074 -0.677962 -0.0544878 + -1.24213 1.58922 0.591819 -0.733074 -0.677962 -0.0544896 + -1.55876 1.75007 0.57343 -0.274106 0.0021195 -0.961697 + -1.55474 1.7939 0.567707 -0.574034 -0.467154 -0.672497 + -1.5491 1.8087 0.519079 -0.558101 -0.675418 -0.48201 + -1.48119 1.81453 0.465381 -0.403333 -0.407991 -0.819064 + -1.34332 1.74387 0.409165 0.172048 -0.0571056 -0.983432 + -1.54673 1.70181 0.56561 -0.125475 0.235197 -0.963815 + -1.72344 1.78891 0.607946 0.0614365 0.200849 -0.977694 + -1.73866 1.86406 0.624396 -0.0594945 -0.0861165 -0.994507 + -1.62279 1.80396 0.596478 -0.258931 -0.0251385 -0.965569 + -1.63474 1.85424 0.577997 -0.531421 -0.600955 -0.597029 + -1.5057 1.64402 0.533103 0.00407243 0.4744 -0.8803 + -1.67239 1.66973 0.591376 -0.0118551 0.3349 -0.942179 + -1.71141 1.74066 0.600128 -0.0154851 0.123927 -0.99217 + -1.84873 1.84604 0.584596 0.346673 0.132744 -0.928545 + -1.55433 1.51188 0.462787 0.0783771 0.182104 -0.98015 + -1.78626 1.7063 0.586033 0.116068 0.148598 -0.982063 + -1.82528 1.77714 0.594734 0.284094 0.125119 -0.950598 + -1.47328 1.52179 0.484423 0.576575 0.04319 -0.815902 + -1.4852 1.45922 0.489986 0.674998 0.159123 -0.720457 + -1.6279 1.51032 0.455686 -0.361603 -0.319779 -0.875777 + -1.58157 1.5563 0.524846 0.0200238 0.749896 -0.661252 + -1.36103 1.64833 0.656244 0.718026 -0.156207 -0.678261 + -1.37295 1.58577 0.661806 0.906335 -0.102093 -0.410041 + -1.4117 1.40588 0.573584 0.890971 0.0662854 -0.449195 + -1.44611 1.34345 0.496517 0.862761 0.182988 -0.471338 + -1.51962 1.39679 0.412919 0.598471 0.554336 -0.578398 + -1.60378 1.4514 0.414339 0.252118 0.685964 -0.682561 + -1.6785 1.53268 0.464751 -0.0695768 0.427526 -0.901321 + -1.35441 1.57088 0.718197 0.895974 -0.14791 -0.418751 + -1.39315 1.39099 0.629975 0.925882 -0.376372 0.0329614 + -1.43263 1.30966 0.516243 0.751217 -0.630082 -0.196646 + -1.51069 1.33656 0.353853 0.736424 0.451479 -0.503832 + -1.42226 1.38717 0.695585 0.901474 -0.432822 -0.00318933 + -1.37611 1.46992 0.725658 0.613776 -0.264279 -0.743933 + -1.38745 1.42682 0.758114 0.291409 -0.549019 -0.783364 + -1.43361 1.34407 0.72804 0.871131 -0.370591 -0.322169 + -1.4716 1.28252 0.647242 0.807773 -0.588772 0.0291533 + -1.46161 1.25622 0.403406 0.971141 -0.229602 0.0645576 + -1.47147 1.2329 0.468794 0.970547 -0.240874 -0.0042273 + -1.33033 1.32237 0.775818 -0.0139062 -0.260345 -0.965415 + -1.36663 1.3271 0.796625 -0.0331493 -0.312713 -0.949269 + -1.40545 1.33244 0.772376 0.608169 -0.300587 -0.734696 + -1.42922 1.26703 0.791681 0.265653 -0.4725 -0.84034 + -1.45738 1.27865 0.747345 0.628655 -0.713754 -0.308783 + -1.30379 1.01935 0.842075 -0.701042 -0.274019 -0.658372 + -1.3401 1.02416 0.862932 -0.26384 -0.291012 -0.91962 + -1.39111 1.13398 0.83733 0.120392 -0.243485 -0.962404 + -1.38463 1.23273 0.810888 0.449948 -0.263087 -0.853424 + -1.25658 1.00816 0.761047 -0.816984 -0.227274 -0.529984 + -1.23493 0.81986 0.848598 -0.3394 -0.739154 -0.581773 + -1.28214 0.831044 0.929626 -0.572969 -0.185011 -0.798422 + -1.34743 0.893034 0.898256 0.0404228 -0.329513 -0.943285 + -1.27955 1.43341 0.724495 -0.787108 -0.264702 -0.55713 + -1.2275 1.01816 0.717136 -0.668107 -0.322756 -0.670419 + -1.19119 0.851915 0.802477 0.177938 -0.726068 -0.664201 + -1.19143 0.74391 1.06795 0.121434 -0.810634 -0.572823 + -1.32722 0.760374 0.965028 -0.103016 -0.722529 -0.683622 + -1.37295 1.58577 0.661806 -0.603513 -0.590461 -0.535843 + -1.49721 1.30268 0.373529 0.902449 0.118537 -0.414167 + -1.26058 1.67037 0.479465 0.748008 -0.111949 -0.654179 + -1.27974 1.74305 0.504183 0.532834 -0.346579 -0.771991 + -1.19027 1.54224 0.680788 0.641162 -0.279753 -0.714598 + -1.25585 1.60974 0.521077 0.855809 -0.245671 -0.455232 + -1.36248 1.81655 0.433883 0.428058 0.603827 -0.672428 + -1.40002 1.84843 0.43166 0.645561 0.762778 0.0376799 + -1.51874 1.84632 0.463109 -0.371993 -0.682685 -0.628937 + -1.40002 1.84843 0.43166 -0.31818 -0.808407 -0.495216 + -1.6096 1.89578 0.469648 -0.532898 -0.672036 -0.514185 + -1.49371 1.87369 0.4009 -0.342336 -0.911483 -0.228044 + -1.45697 1.86202 0.356314 -0.354889 -0.929502 0.100401 + -1.36329 1.83676 0.387075 -0.505364 -0.851676 0.138762 + -1.26813 1.77022 0.467517 -0.65214 -0.740768 -0.161171 + -1.62911 1.86903 0.52937 -0.601119 -0.697692 -0.389719 + -1.71663 1.98444 0.482682 -0.280927 -0.831833 -0.47868 + -1.70041 2.01636 0.421399 -0.302824 -0.874058 -0.379895 + -1.58458 1.92315 0.407439 -0.55551 -0.750692 -0.357589 + -1.4805 1.86989 0.323886 -0.530858 -0.844972 -0.0649066 + -1.73614 1.95778 0.542455 -0.386941 -0.789641 -0.476177 + -1.85217 2.01488 0.387354 -0.221925 -0.975061 -0.0020898 + -1.82237 2.0239 0.372136 0.209587 -0.926501 -0.312521 + -1.80615 2.05582 0.310853 0.260895 -0.927769 -0.266794 + -1.68151 2.01991 0.357853 -0.516562 -0.856238 0.00441094 + -1.75061 1.91433 0.605915 -0.198178 -0.546767 -0.813493 + -1.86303 1.97649 0.569659 0.0790728 -0.655159 -0.751342 + -1.84856 2.01994 0.506199 -0.282637 -0.901608 -0.327445 + -1.86395 1.92119 0.601046 0.292483 -0.153384 -0.943889 + -1.9859 2.03839 0.470843 0.378025 -0.690931 -0.616208 + -1.97685 2.07276 0.415306 0.134482 -0.934255 -0.330275 + -1.98985 2.08774 0.344357 -0.133822 -0.991001 -0.00308779 + -1.86155 2.03492 0.43525 -0.59574 -0.802765 0.0257306 + -1.97939 1.91008 0.527281 0.55678 -0.0870311 -0.826088 + -1.98682 1.983 0.502179 0.573622 -0.319895 -0.754073 + -2.10785 2.01579 0.369994 0.72488 -0.523015 -0.448336 + -2.09749 2.04099 0.300132 0.612565 -0.7504 -0.248322 + -2.08845 2.07545 0.244645 0.631907 -0.753134 -0.18298 + -1.95594 1.84118 0.537418 0.318832 -0.267833 -0.909182 + -2.11899 1.92745 0.436187 0.487515 -0.601926 -0.632466 + -2.10042 1.94287 0.395095 0.480734 -0.688386 -0.543158 + -2.21448 1.97213 0.146212 0.340431 -0.938293 -0.0609351 + -2.20412 1.99725 0.076298 0.422197 -0.904346 -0.0625178 + -1.92435 1.7883 0.580401 0.0339354 -0.222883 -0.974254 + -2.0874 1.87467 0.479219 0.111452 -0.663774 -0.739582 + -2.25096 1.97584 0.273977 -0.0299687 -0.985607 -0.166376 + -2.23239 1.99125 0.232885 -0.118591 -0.992596 -0.026269 + -1.73074 1.64424 0.584322 0.0741838 0.316941 -0.94554 + -1.86882 1.72633 0.57874 0.513882 0.526135 -0.677574 + -1.84301 1.69247 0.546183 0.315118 0.669452 -0.672706 + -1.89362 1.71493 0.555299 0.0694684 0.222082 -0.97255 + -2.06103 1.82402 0.535744 0.404489 -0.204117 -0.891474 + -1.68095 1.58851 0.550251 0.225784 0.686037 -0.691647 + -1.65514 1.55474 0.517745 0.280253 0.801447 -0.528338 + -2.11446 1.66752 0.536 -0.668628 -0.425153 0.610067 + -2.07944 1.69408 0.561203 -0.540933 -0.521962 0.659506 + -2.17596 1.71816 0.505099 -0.520638 -0.116165 0.845838 + -2.06416 1.6055 0.555424 -0.736878 -0.396759 0.547351 + -2.02915 1.63206 0.580626 -0.619384 -0.25349 0.743038 + -1.99323 1.67405 0.641699 -0.679049 -0.496245 0.540956 + -2.03536 1.72045 0.660326 -0.396191 -0.82836 0.396045 + -2.09294 1.7091 0.57958 -0.341504 -0.883916 0.31948 + -2.17596 1.71816 0.505099 -0.49317 -0.804002 0.33221 + -2.05331 1.58948 0.539777 -0.539813 -0.340268 -0.769948 + -2.03335 1.52095 0.551873 -0.928457 -0.2446 0.279532 + -1.97254 1.54083 0.602234 -0.716622 -0.156022 0.679787 + -1.93662 1.58282 0.663307 -0.960484 -0.0456554 0.274564 + -2.08416 1.6346 0.53063 -0.525064 -0.671323 -0.5231 + -1.92623 1.52555 0.55051 -0.171319 -0.160066 -0.972126 + -2.0225 1.50484 0.536176 -0.468757 -0.0323017 -0.882736 + -2.02235 1.43909 0.554258 -0.978711 -0.187128 0.084304 + -1.96154 1.45906 0.604668 -0.93673 0.228917 0.264827 + -2.14566 1.68514 0.49968 -0.472258 -0.603201 -0.642744 + -1.95708 1.57075 0.541413 -0.064221 -0.166665 -0.98392 + -1.81379 1.44762 0.531278 -0.346612 -0.0335845 -0.937407 + -1.87226 1.48096 0.546936 -0.240218 -0.125874 -0.962523 + -0.798114 2.04695 0.249812 0.582907 -0.482716 -0.653609 + -0.905691 2.11918 0.074307 0.678748 0.724874 -0.117722 + -0.846312 2.08542 0.208784 0.87355 0.292197 -0.38927 + -0.738912 2.12985 0.321833 0.667648 0.0013291 -0.744476 + -0.690714 2.09138 0.362861 0.713596 -0.0775135 -0.696256 + -0.675598 2.02754 0.398431 0.658085 -0.394429 -0.641366 + -0.815225 2.03678 0.260635 0.448631 -0.71777 -0.532481 + -0.905691 2.11918 0.074307 0.10775 -0.933094 -0.343112 + -0.804951 2.14597 0.266304 0.718092 0.128867 -0.683913 + -0.579075 2.25846 0.43007 0.496331 -0.498872 -0.71048 + -0.547216 2.19947 0.491447 0.522684 -0.400135 -0.75279 + -0.5321 2.13554 0.526966 0.50735 -0.165553 -0.845688 + -0.645114 2.2745 0.37449 0.588502 -0.17204 -0.789979 + -0.4687 2.2542 0.479834 -0.365837 -0.796584 -0.481267 + -0.9191 1.77532 -0.757703 -0.921344 0.26709 0.282469 + -0.938901 1.7913 -0.829386 -0.967888 0.120528 0.220604 + -0.927779 1.73612 -0.733023 -0.859058 0.395144 0.325392 + -0.919516 1.81726 -0.779352 -0.970921 0.0678472 0.229586 + -0.939318 1.83324 -0.851034 -0.993218 0.116063 0.00684519 + -0.945445 1.76854 -0.856961 -0.99584 0.0460393 0.0786314 + -0.927779 1.73612 -0.733023 -0.982974 0.0857149 0.162529 + -0.942828 1.68755 -0.866885 -0.998141 -0.0411133 0.04499 + -0.906177 1.85878 -0.71386 -0.977632 -0.0166357 0.209664 + -0.914713 1.86018 -0.745692 -0.99153 -0.0836206 0.0993798 + -0.926983 1.90829 -0.818027 -0.993211 0.112422 0.0299023 + -0.908131 1.97388 -0.863228 -0.94228 0.295835 -0.156816 + -0.920465 1.89883 -0.896237 -0.96343 0.259979 -0.0649091 + -0.935194 1.85775 -0.932285 -0.962114 0.265406 0.0624215 + -0.947421 1.79744 -0.917223 -0.994183 0.101227 0.0367764 + -0.92218 1.95121 -0.784367 -0.991157 0.125322 0.0436205 + -0.889057 2.0438 -0.824329 -0.920411 0.323342 -0.219759 + -0.853357 2.06532 -0.916001 -0.904602 0.40171 -0.142567 + -0.881246 1.99862 -0.951473 -0.921489 0.379427 -0.0830305 + -0.895974 1.95763 -0.987472 -0.920106 0.390474 0.0305702 + -0.911212 2.02207 -0.740895 -0.968058 0.180607 -0.17391 + -0.87809 2.11465 -0.780856 -0.905549 0.336539 -0.258307 + -0.834284 2.13524 -0.87711 -0.877909 0.411532 -0.244781 + -0.794945 2.19464 -0.931195 -0.908282 0.409743 -0.0844633 + -0.825763 2.12504 -0.97444 -0.912184 0.409762 -0.00392631 + -0.928664 1.90521 -0.720078 -0.967429 -0.0535973 -0.247402 + -0.927471 1.96604 -0.682646 -0.995367 0.0887608 -0.0369671 + -0.910019 2.0829 -0.703454 -0.948029 0.185944 -0.258197 + -0.867241 2.18075 -0.73473 -0.861721 0.329599 -0.385748 + -0.808844 2.2017 -0.834823 -0.854692 0.437788 -0.279004 + -0.867467 2.24817 -0.685917 -0.821212 0.306916 -0.481055 + -0.797996 2.26779 -0.788689 -0.816448 0.413034 -0.403504 + -0.742346 2.33211 -0.841297 -0.895377 0.381106 -0.230344 + -0.769506 2.2611 -0.8889 -0.896867 0.427295 -0.114234 + -0.879963 2.30651 -0.635553 -0.798769 0.254947 -0.544951 + -0.790321 2.32833 -0.73795 -0.783134 0.401007 -0.475284 + -0.734671 2.39274 -0.790508 -0.835662 0.436833 -0.332934 + -0.723082 2.36367 -0.89277 -0.952793 0.234904 0.19237 + -0.750241 2.29266 -0.940374 -0.93994 0.240587 0.242137 + -0.899095 2.36842 -0.583594 -0.744534 0.122759 -0.6562 + -0.802816 2.38658 -0.687645 -0.712985 0.287553 -0.639504 + -0.724962 2.45691 -0.737052 -0.775946 0.283106 -0.563701 + -0.683658 2.44041 -0.844285 -0.952871 0.272195 0.133969 + -0.943494 2.41256 -0.535238 -0.757947 0.0332098 -0.65147 + -0.843535 2.43289 -0.63406 -0.688584 0.153698 -0.708681 + -0.76568 2.50322 -0.683475 -0.628235 0.296858 -0.719164 + -0.673949 2.50458 -0.790829 -0.965184 0.246424 -0.0877197 + -0.961197 2.32062 -0.501188 -0.859715 -0.0457565 -0.50872 + -0.98843 2.44837 -0.481262 -0.618629 -0.390629 -0.681694 + -0.887934 2.47711 -0.585654 -0.605344 -0.0538717 -0.794139 + -0.798624 2.54457 -0.643083 -0.510764 0.1197 -0.851347 + -0.640952 2.57393 -0.734741 -0.958912 0.202906 -0.198285 + -0.989645 2.23551 -0.440186 -0.916228 -0.0672446 -0.394974 + -1.00613 2.35642 -0.447203 -0.88277 -0.081908 -0.46261 + -1.02405 2.3753 -0.403114 -0.918116 -0.253661 -0.304499 + -1.04836 2.45826 -0.454405 -0.665428 -0.475437 -0.575469 + -0.960276 2.50357 -0.553475 -0.434735 -0.480003 -0.761972 + -0.988577 2.12248 -0.426613 -0.934876 -0.0052776 -0.354934 + -1.00756 2.25448 -0.396038 -0.971597 -0.094175 -0.217095 + -1.01663 2.3143 -0.349446 -0.951964 -0.210719 -0.222177 + -1.03504 2.35087 -0.329394 -0.815363 -0.303482 -0.493033 + -1.04245 2.41196 -0.383011 -0.765655 -0.543822 -0.343555 + -1.00104 1.98792 -0.415936 -0.496606 -0.799198 -0.338622 + -1.018 2.02083 -0.35915 -0.965877 -0.258968 -0.00407133 + -1.00554 2.1554 -0.369826 -0.967887 0.00481509 -0.251339 + -0.991923 2.00152 -0.299495 -0.195315 -0.878073 0.436853 + -1.00945 2.09254 -0.276952 -0.968933 -0.19708 0.149428 + -1.01462 2.2153 -0.323177 -0.989167 -0.0561285 -0.135639 + -0.910296 1.95936 -0.588676 -0.140828 -0.910463 0.388876 + -0.983372 2.07331 -0.217248 -0.868739 -0.417688 0.266137 + -1.02436 2.14526 -0.215457 -0.94804 -0.314095 -0.0506466 + -1.02953 2.26801 -0.26168 -0.851984 -0.313542 -0.419303 + -1.06899 2.33969 -0.284833 -0.692449 -0.464131 -0.552355 + -1.08109 2.40086 -0.315784 -0.531204 -0.658702 -0.532855 + -0.985891 2.14995 -0.042786 -0.0406279 -0.98201 0.184409 + -1.0088 2.10705 -0.139893 -0.602097 -0.76224 0.237632 + -1.03829 2.21156 -0.143494 -0.863502 -0.504267 -0.00885052 + -1.08053 2.27656 -0.209287 -0.748895 -0.537308 -0.387887 + -1.11999 2.34824 -0.23243 -0.550238 -0.587228 -0.593635 + -0.905691 2.11918 0.074307 -0.559876 -0.810866 0.170398 + -0.939812 1.7023 0.659365 0.856444 0.472057 -0.208964 + -1.02368 1.78898 0.511438 0.875293 0.159408 -0.456564 + -1.07094 1.86141 0.481375 0.853731 0.506002 -0.122905 + -1.07689 1.85796 0.419351 0.895538 0.126612 -0.426592 + -1.12415 1.9304 0.389289 0.870411 0.488948 0.0575688 + -1.17438 2.06327 0.257947 0.900989 0.163297 -0.401936 + -1.18352 2.10173 0.282137 0.975216 0.190671 -0.112247 + -1.1333 1.96885 0.413481 0.869201 0.494442 0.00400529 + -1.07094 1.86141 0.481375 0.466296 -0.263077 -0.844606 + -1.08471 1.76643 0.448892 0.644822 -0.371989 -0.667704 + -1.19886 1.96262 0.243077 0.696707 -0.225157 -0.681105 + -1.26321 2.0167 0.155611 0.652707 -0.227057 -0.722786 + -1.23873 2.11735 0.170481 0.741797 -0.0562659 -0.66826 + -0.963729 1.67169 0.607384 0.748538 -0.209375 -0.629168 + -1.08988 1.68747 0.501654 0.334339 -0.70916 -0.620733 + -1.20667 1.87117 0.272668 0.581034 -0.372146 -0.723814 + -1.30139 1.91958 0.191021 0.260718 -0.473027 -0.841588 + -0.879863 1.58501 0.755312 0.511077 -0.277831 -0.813394 + -0.897106 1.49916 0.727805 0.499125 -0.113589 -0.859053 + -0.9689 1.59273 0.660146 0.26412 -0.489588 -0.83099 + -1.11069 1.64926 0.56604 -0.104398 -0.871487 -0.479177 + -1.25634 1.77205 0.302146 0.280348 -0.705549 -0.65085 + -0.939812 1.7023 0.659365 0.88661 0.080599 -0.455441 + -1.02369 1.81801 0.51875 0.389526 -0.319725 -0.863739 + -2.01921 2.08801 0.063897 0.891652 -0.363071 -0.270437 + -2.05462 2.14025 -0.122982 0.706738 -0.521509 -0.478068 + -2.02297 2.22611 -0.133903 0.307269 -0.652945 -0.692278 + -2.11 2.13872 -0.166128 -0.0225143 -0.134814 -0.990615 + -2.07834 2.22467 -0.176999 -0.234222 -0.0311514 -0.971684 + -1.99525 2.25385 -0.159755 0.368819 -0.473768 -0.799698 + -2.00431 2.06925 -0.007613 -0.435439 -0.782534 -0.445009 + -2.01921 2.08801 0.063897 -0.963397 -0.228058 -0.140913 + -2.1564 2.07049 -0.153557 0.272909 -0.420879 -0.86509 + -2.21245 2.05771 -0.140023 -0.285395 0.204076 -0.936431 + -2.15347 2.13098 -0.122723 -0.474097 0.330843 -0.81595 + -2.11643 2.21115 -0.126387 -0.731772 0.290711 -0.616439 + -2.0413 2.30484 -0.180664 -0.33293 -0.033589 -0.942353 + -2.08449 2.10682 -0.082678 0.622944 -0.738172 -0.258925 + -2.20285 2.00328 -0.128748 0.393814 -0.715142 -0.577479 + -2.25885 1.98948 -0.127453 0.0654146 -0.410799 -0.909376 + -2.28707 2.03025 -0.12807 0.0726322 0.0373063 -0.996661 + -2.22809 2.10343 -0.110819 -0.108063 0.451365 -0.885772 + -2.04908 2.05457 0.10421 -0.394549 -0.904236 -0.163367 + -2.01921 2.08801 0.063897 0.445365 -0.822987 -0.352623 + -1.96677 2.0257 0.223427 -0.477639 -0.864623 0.155847 + -1.97616 2.04573 0.271322 -0.576478 -0.770909 0.270873 + -2.06277 2.09659 0.177242 -0.0374822 -0.993785 0.104814 + -2.08449 2.10682 -0.082678 -0.913318 -0.402732 0.0604703 + -2.13094 2.03961 -0.057868 0.669738 -0.722122 -0.173179 + -1.95187 2.00685 0.151865 -0.29087 -0.949658 -0.116377 + -1.92207 2.01587 0.136647 0.26746 -0.928651 -0.257044 + -1.90933 2.03896 0.068049 0.0729942 -0.964419 -0.254103 + -2.01921 2.08801 0.063897 -0.772591 -0.634878 0.00569207 + -1.9766 2.09699 -0.033465 -0.181133 -0.798418 -0.574212 + -1.96385 2.12008 -0.10206 -0.502451 -0.590536 -0.631514 + -1.88992 2.05432 0.003641 0.175826 -0.91176 -0.371186 + -1.78673 2.07109 0.246399 -0.195834 -0.98047 0.0180721 + -1.95888 2.33143 -0.179713 -0.160192 -0.365857 -0.916781 + -1.91703 2.39073 -0.221035 -0.199487 -0.259334 -0.944961 + -1.922 2.17939 -0.143383 -0.0811221 -0.538241 -0.838878 + -1.84277 2.10366 -0.031417 0.0408099 -0.879235 -0.474636 + -2.00493 2.38241 -0.200621 -0.402876 -0.110237 -0.908591 + -1.98115 2.45802 -0.212777 -0.401571 0.0593372 -0.913904 + -1.84323 2.43208 -0.244655 -0.338361 -0.225106 -0.913695 + -1.87485 2.22873 -0.178439 -0.194052 -0.47996 -0.855559 + -2.08929 2.29985 -0.133025 -0.702724 0.137258 -0.698097 + -2.06551 2.37554 -0.14513 -0.649134 -0.0154919 -0.760516 + -2.06646 2.47435 -0.164459 -0.589917 -0.069556 -0.804463 + -1.90735 2.49937 -0.236397 -0.324489 -0.273372 -0.905524 + -1.78377 2.48357 -0.285444 -0.551084 -0.389166 -0.738144 + -2.18137 2.18104 -0.066045 -0.610975 0.487603 -0.623661 + -2.15423 2.26975 -0.072682 -0.746867 0.132608 -0.651617 + -2.14124 2.36422 -0.079906 -0.739422 -0.0379092 -0.672174 + -2.1422 2.46302 -0.099236 -0.724802 -0.136636 -0.675272 + -2.01558 2.518 -0.205467 -0.451924 -0.352835 -0.819312 + -2.22713 2.13299 -0.089216 -0.106504 0.701112 -0.705052 + -2.23721 2.19597 -0.019299 -0.401947 0.577828 -0.710319 + -2.20792 2.29565 0.00465 -0.754194 0.195071 -0.627008 + -2.19493 2.39012 -0.002574 -0.82334 -0.045999 -0.565681 + -2.19766 2.49044 -0.027537 -0.819587 -0.122525 -0.559701 + -2.34943 2.14379 -0.120915 0.20603 0.815703 -0.540537 + -2.28297 2.148 -0.04242 0.0294366 0.754191 -0.655995 + -2.39238 2.16494 -0.055148 0.0178468 0.996255 -0.0846045 + -2.29868 2.23092 0.067564 -0.715059 0.543131 -0.440113 + -2.26939 2.33052 0.091463 -0.780482 0.159953 -0.60437 + -2.35039 2.11423 -0.142518 0.187993 0.291966 -0.937771 + -2.45884 2.16073 -0.133652 0.464929 0.746119 -0.4766 + -2.34741 1.98765 -0.137876 0.0395935 -0.34346 -0.938332 + -2.41073 2.07162 -0.152324 0.417677 0.0289103 -0.908135 + -2.47436 2.13853 -0.208818 0.692414 0.4631 -0.553264 + -2.57149 2.19664 -0.189667 0.368222 0.929039 -0.0360333 + -2.41388 1.93289 -0.102239 0.117337 -0.726642 -0.676922 + -2.46026 1.99781 -0.192677 0.407568 -0.490041 -0.770551 + -2.52389 2.06472 -0.24917 0.562199 -0.435811 -0.702852 + -2.57622 2.1621 -0.327435 0.864073 0.345566 -0.366008 + -2.58701 2.17446 -0.264832 0.691813 0.691644 -0.20742 + -2.32532 1.93473 -0.091815 0.282242 -0.835506 -0.471454 + -2.4752 1.90394 -0.065482 -0.184357 -0.928635 -0.321946 + -2.52159 1.96885 -0.155921 -0.216449 -0.819189 -0.531112 + -2.57747 2.04533 -0.243775 -0.224516 -0.830237 -0.510195 + -2.55172 2.0625 -0.290718 0.351439 -0.666144 -0.657832 + -2.26235 1.96594 -0.076878 0.466506 -0.883362 -0.0452016 + -2.38482 1.89739 -0.039944 0.229607 -0.969668 -0.0838089 + -2.52786 1.90878 0.011527 -0.324616 -0.940898 -0.0966134 + -2.59692 1.97242 -0.081094 -0.513403 -0.812734 -0.275465 + -2.6528 2.0488 -0.168998 -0.570032 -0.742784 -0.351191 + -2.15662 2.01839 0.009485 0.535389 -0.844412 -0.0181095 + -2.30984 1.9448 -0.010065 0.423462 -0.896017 0.133542 + -2.43748 1.90232 0.037117 0.135359 -0.982911 0.124752 + -2.56208 1.9173 0.096568 -0.446336 -0.893011 0.0575868 + -2.33788 1.95024 0.068513 0.304299 -0.936248 0.175618 + -2.46552 1.90768 0.115641 0.123459 -0.980982 0.149772 + -2.56497 1.93226 0.183856 -0.439401 -0.891893 0.107025 + -2.63114 1.98094 0.00394 -0.683884 -0.726283 -0.0693862 + -2.69489 2.06219 -0.099988 -0.756224 -0.640445 -0.133998 + -2.35579 1.96937 0.155186 0.250707 -0.952246 0.174281 + -2.46841 1.92264 0.20293 0.153463 -0.981928 0.110753 + -2.55743 1.93752 0.279154 -0.486431 -0.868117 0.0987784 + -2.63891 1.99185 0.10725 -0.72968 -0.682228 0.0461766 + -2.70266 2.07318 0.003376 -0.822254 -0.56912 0.000746165 + -2.35464 1.97552 0.240132 0.23627 -0.968858 0.0740969 + -2.46726 1.92879 0.287876 0.171688 -0.98125 -0.0875881 + -2.51789 1.91892 0.360977 -0.36936 -0.927258 -0.061358 + -2.63136 1.99719 0.2026 -0.729722 -0.675936 0.103038 + -2.69203 2.06454 0.153948 -0.832593 -0.545824 0.0941518 + -2.36393 1.98662 0.325503 0.306812 -0.943564 -0.124715 + -2.42772 1.91018 0.369699 0.270018 -0.903994 -0.331491 + -2.49455 1.90443 0.452073 -0.465108 -0.883359 -0.0578806 + -2.62208 2.00313 0.305904 -0.721649 -0.685928 0.0934048 + -2.68276 2.07057 0.257303 -0.869396 -0.482955 0.104423 + -2.26025 1.98694 0.35935 -0.217413 -0.94835 -0.231006 + -2.3478 1.96087 0.399315 0.250601 -0.780095 -0.573281 + -2.4116 1.88434 0.44346 0.0186851 -0.913316 -0.406823 + -2.45006 1.8742 0.527831 -0.396996 -0.895642 -0.20055 + -2.59874 1.98865 0.397 -0.680365 -0.732865 -0.00338486 + -2.23387 1.93629 0.415874 -0.0206697 -0.684186 -0.729015 + -2.3475 1.89328 0.451581 0.0304835 -0.718822 -0.694525 + -2.36711 1.85411 0.519218 -0.263996 -0.881681 -0.39108 + -2.02509 1.75372 0.534509 0.226373 0.0154897 -0.973918 + -2.23356 1.86879 0.468189 -0.0801071 -0.518449 -0.851348 + -2.29796 1.84198 0.496837 -0.316115 -0.638518 -0.701687 + -2.31758 1.80281 0.564476 -0.530786 -0.824015 -0.198154 + -2.32775 1.80176 0.638488 -0.354247 -0.932081 -0.0757208 + -1.85767 1.64454 0.554014 0.00223835 0.344011 -0.938963 + -1.78295 1.56325 0.503601 -0.316717 0.174407 -0.932348 + -1.98656 1.67634 0.551519 0.0121252 -0.0451675 -0.998906 + -2.19504 1.79142 0.4852 -0.00539201 -0.199273 -0.979929 + -2.25122 1.76773 0.50923 -0.496109 -0.710724 -0.498746 + -1.60429 1.36788 0.3626 -0.552506 -0.452338 -0.700091 + -1.79238 1.54006 0.510978 -0.361389 -0.0101552 -0.93236 + -1.95973 1.60279 0.539327 0.0337568 0.0391626 -0.998662 + -2.1483 1.71718 0.497593 -0.00359493 -0.103174 -0.994657 + -2.17596 1.71816 0.505099 -0.258826 -0.316883 -0.912466 + -1.49721 1.30268 0.373529 -0.0689533 -0.274035 -0.959245 + -1.3001 2.61612 -0.639218 -0.198498 -0.763167 0.614959 + -1.49586 2.56716 -0.58981 0.325213 -0.813204 0.482634 + -1.42854 2.55889 -0.649095 -0.261824 -0.953626 -0.148479 + -1.29075 2.53949 -0.6781 -0.273143 -0.946443 0.17216 + -1.25085 2.53548 -0.642347 -0.422825 -0.891601 0.162072 + -1.2602 2.61211 -0.603465 -0.817925 -0.562122 -0.122549 + -1.39026 2.63554 -0.586252 0.138319 -0.9763 0.166454 + -1.49586 2.56716 -0.58981 0.331158 -0.551235 0.765817 + -1.58602 2.58657 -0.536845 0.286573 -0.582008 0.761014 + -1.38815 2.56513 -0.686901 -0.36841 -0.647767 -0.666838 + -1.25037 2.54573 -0.715897 0.0747647 -0.674029 -0.734912 + -1.20705 2.52844 -0.663145 0.369842 -0.921393 -0.119382 + -1.3163 2.56033 -0.481979 0.0779208 -0.994226 -0.073779 + -1.38229 2.53653 -0.460558 -0.203936 -0.811828 -0.547124 + -1.57837 2.67193 -0.59068 -0.656773 -0.297396 -0.692968 + -1.51214 2.66684 -0.652472 -0.609066 -0.322124 -0.724758 + -1.33797 2.62379 -0.735296 -0.205029 -0.183532 -0.961394 + -1.1783 2.60536 -0.717774 0.255144 -0.437048 -0.862491 + -1.13498 2.58814 -0.664965 0.32786 -0.884544 -0.331798 + -1.6457 2.68019 -0.531396 -0.674609 -0.346892 -0.65159 + -1.68768 2.91119 -0.517889 -0.673386 -0.0672369 -0.736228 + -1.62145 2.9061 -0.57968 -0.722778 -0.104964 -0.683063 + -1.55545 2.87743 -0.65243 -0.700632 -0.122339 -0.702957 + -1.46196 2.7255 -0.700868 -0.532933 -0.234319 -0.813066 + -1.47007 2.61951 -0.553496 0.0691955 -0.996045 0.0557275 + -1.65093 2.62757 -0.481455 -0.442259 -0.871965 -0.209962 + -1.49939 2.62158 -0.514475 -0.182048 -0.886402 -0.425618 + -1.68026 2.62964 -0.442434 -0.511415 -0.808471 -0.291254 + -1.85563 2.74393 -0.352592 -0.687383 -0.376163 -0.621293 + -1.7851 2.74542 -0.40958 -0.653868 -0.154463 -0.740674 + -1.58602 2.58657 -0.536845 -0.714862 -0.552201 -0.429008 + -1.40544 2.59553 -0.522956 -0.091748 -0.826615 -0.555239 + -1.47385 2.56861 -0.483731 -0.0671506 -0.742373 -0.666613 + -1.56168 2.57668 -0.468498 -0.327449 -0.502145 -0.800392 + -1.74718 2.65567 -0.375326 -0.601375 -0.450839 -0.659615 + -1.92255 2.76996 -0.285484 -0.596367 -0.140757 -0.790275 + -1.32563 2.61155 -0.555713 -0.313955 -0.768675 -0.557289 + -1.5158 2.50943 -0.384024 0.0381157 -0.825219 -0.563525 + -1.58421 2.4825 -0.34479 -0.184095 -0.722046 -0.666902 + -1.64313 2.46622 -0.302775 0.153892 -0.89812 -0.411943 + -1.53614 2.52362 -0.437803 0.285919 -0.873028 -0.395059 + -1.44772 2.53598 -0.412815 -0.0344637 -0.87907 -0.475444 + -1.50702 2.42195 -0.279312 0.11945 -0.724956 -0.678359 + -1.5751 2.3954 -0.250513 0.00538386 -0.670113 -0.742239 + -1.58602 2.58657 -0.536845 0.299558 -0.910718 0.284354 + -1.44638 2.46044 -0.300165 0.15228 -0.780961 -0.605731 + -1.51313 2.29001 -0.149574 0.379767 -0.632734 -0.674852 + -1.56252 2.23009 -0.131389 0.175666 -0.618888 -0.765584 + -1.614 2.19748 -0.106921 0.3588 -0.532128 -0.766878 + -1.62659 2.3628 -0.226055 -0.187271 -0.599717 -0.777991 + -1.38039 2.48423 -0.321586 0.103289 -0.850498 -0.515738 + -1.45249 2.32849 -0.170436 0.265634 -0.6968 -0.666265 + -1.40673 2.26514 -0.0839 0.343748 -0.632489 -0.694114 + -1.44143 2.21733 -0.061887 0.333725 -0.500521 -0.798816 + -1.49081 2.1574 -0.043692 0.26466 -0.454164 -0.8507 + -1.31783 2.50633 -0.353252 -0.269259 -0.818702 -0.507175 + -1.39437 2.37983 -0.191359 0.22857 -0.761374 -0.606684 + -1.3486 2.31648 -0.104823 0.153892 -0.768012 -0.621671 + -1.27698 2.27543 -0.022522 0.241215 -0.849161 -0.469831 + -1.31168 2.22762 -0.000509 0.502434 -0.358478 -0.7868 + -1.27251 2.55328 -0.502778 -0.321253 -0.926771 -0.194658 + -1.25834 2.48932 -0.404594 -0.393215 -0.82417 -0.407585 + -1.33181 2.40193 -0.223025 -0.0107838 -0.804446 -0.593928 + -1.30396 2.34659 -0.149771 -0.0339501 -0.780982 -0.62363 + -1.27338 2.29774 -0.092373 -0.0574718 -0.892647 -0.447077 + -1.21302 2.53636 -0.55407 -0.309272 -0.769486 -0.558786 + -1.19745 2.49031 -0.447509 -0.345417 -0.851623 -0.394239 + -1.26661 2.4303 -0.253176 -0.0271631 -0.888749 -0.457588 + -1.23877 2.37488 -0.179981 -0.192944 -0.740977 -0.643214 + -1.22874 2.32785 -0.137321 -0.201154 -0.804231 -0.55924 + -1.05893 2.61404 -0.683015 0.33478 -0.768482 -0.545305 + -1.13696 2.56225 -0.572121 -0.211886 -0.806495 -0.55197 + -1.14564 2.48276 -0.502629 -0.408862 -0.780114 -0.473555 + -1.20572 2.43121 -0.29614 -0.257861 -0.878056 -0.403144 + -1.18009 2.38412 -0.225178 -0.357684 -0.725287 -0.588235 + -1.10129 2.65799 -0.720933 0.176528 -0.169503 -0.969591 + -0.952736 2.65753 -0.671346 0.117545 -0.543568 -0.831094 + -1.08515 2.55479 -0.6272 -0.418655 -0.25149 -0.872629 + -1.09197 2.49324 -0.547582 0.0035975 -0.881634 -0.471921 + -1.14067 2.43669 -0.342226 -0.187104 -0.904363 -0.383561 + -1.26096 2.67633 -0.738513 0.0744521 0.00752472 -0.997196 + -1.18748 2.72607 -0.714866 0.137809 0.221193 -0.965444 + -0.995101 2.70139 -0.709312 0.178388 -0.0654426 -0.981781 + -0.875328 2.66696 -0.670681 0.0796277 -0.327457 -0.941505 + -1.00774 2.56423 -0.626535 0.199668 -0.711624 -0.67359 + -1.40656 2.74411 -0.750897 -0.221084 -0.407019 -0.88626 + -1.33308 2.79385 -0.727258 0.214473 -0.218816 -0.951904 + -1.11543 2.77194 -0.693708 0.168783 0.248755 -0.953747 + -0.923048 2.74734 -0.688105 0.121206 0.193536 -0.973577 + -0.778789 2.66576 -0.665798 -0.0887103 -0.34113 -0.935821 + -1.50006 2.89604 -0.702459 -0.797797 -0.284566 -0.531547 + -1.45443 2.86248 -0.801524 -0.454077 -0.405666 -0.793252 + -1.38219 2.88944 -0.808829 0.0923162 -0.461446 -0.882352 + -1.26083 2.82082 -0.734563 0.285119 -0.354411 -0.890562 + -1.04309 2.83942 -0.656181 0.167087 0.185379 -0.968358 + -1.61028 3.04066 -0.617947 -0.802366 -0.119512 -0.584743 + -1.56896 3.04128 -0.69341 -0.884303 -0.226945 -0.408048 + -1.52334 3.00771 -0.792474 -0.838766 -0.279602 -0.467219 + -1.46456 2.96133 -0.856744 -0.43366 -0.509505 -0.743198 + -1.30813 2.92966 -0.807285 0.338312 -0.37687 -0.862273 + -1.67628 3.06941 -0.545148 -0.726891 -0.05382 -0.684641 + -1.65569 3.23792 -0.566404 -0.787428 -0.254808 -0.561275 + -1.61437 3.23854 -0.641875 -0.890128 -0.183726 -0.417033 + -1.54549 3.15754 -0.791375 -0.887836 -0.374175 -0.267844 + -1.48671 3.11124 -0.855596 -0.59334 -0.175434 -0.785602 + -1.74535 3.11365 -0.478972 -0.678771 -0.0264612 -0.733873 + -1.72475 3.28224 -0.500178 -0.735128 -0.0979724 -0.670812 + -1.65737 3.38525 -0.628392 -0.881319 -0.268854 -0.388581 + -1.82338 3.13348 -0.411117 -0.65923 -0.00961781 -0.75188 + -1.85704 3.26162 -0.378462 -0.66499 -0.035641 -0.746001 + -1.89281 3.42958 -0.364967 -0.677891 -0.0988322 -0.728488 + -1.76052 3.45011 -0.486733 -0.764736 -0.153269 -0.625849 + -1.72596 3.52404 -0.570377 -0.877418 -0.287079 -0.384348 + -1.76571 2.93101 -0.450025 -0.66997 -0.0674115 -0.739321 + -1.93094 3.12032 -0.315717 -0.688146 -0.03703 -0.724626 + -1.9646 3.24846 -0.283062 -0.656972 -0.0300507 -0.753316 + -1.8402 2.95534 -0.383558 -0.688682 -0.0853769 -0.720019 + -2.00248 3.10753 -0.242768 -0.647973 -0.0453044 -0.760315 + -1.49586 2.56716 -0.58981 -0.637179 -0.585839 -0.500795 + -1.91174 2.94255 -0.310608 -0.665606 -0.0556807 -0.744223 + -1.98227 2.94105 -0.25362 -0.558639 0.0198152 -0.829174 + -2.08849 3.05709 -0.174005 -0.576015 0.0573106 -0.815428 + -2.09573 3.21649 -0.178093 -0.630168 -0.0245891 -0.776069 + -2.06155 2.88877 -0.219268 -0.513809 0.0245556 -0.857553 + -2.16776 3.0049 -0.139603 -0.622669 0.148497 -0.768265 + -2.24769 3.06839 -0.04557 -0.709019 0.0349271 -0.704324 + -2.18174 3.16605 -0.10933 -0.657452 0.0110682 -0.753415 + -1.97577 2.71731 -0.247687 -0.45761 -0.00880304 -0.889109 + -2.11477 2.83612 -0.18147 -0.621534 -0.0347292 -0.782617 + -2.22059 2.91037 -0.085081 -0.735021 -0.0397142 -0.67688 + -2.30052 2.97378 0.008902 -0.789742 -0.0420709 -0.611995 + -2.31727 3.15669 0.028492 -0.770474 0.0286842 -0.636825 + -1.83669 2.6434 -0.321467 -0.457957 -0.0221103 -0.8887 + -2.03681 2.65629 -0.224989 -0.534364 -0.0485526 -0.843859 + -2.13665 2.73934 -0.144843 -0.698631 -0.0887716 -0.709954 + -2.24246 2.81351 -0.048503 -0.769853 -0.107974 -0.629022 + -2.3405 2.85857 0.084852 -0.82496 -0.0994869 -0.556366 + -1.6512 2.5644 -0.41463 -0.440221 -0.305126 -0.844455 + -1.72545 2.55667 -0.373052 -0.428378 -0.256508 -0.866427 + -1.89774 2.58237 -0.29876 -0.438942 -0.111462 -0.891575 + -2.07411 2.58682 -0.186068 -0.605043 -0.161246 -0.779694 + -1.59495 2.48724 -0.400794 0.137899 -0.839391 -0.525744 + -1.66919 2.47952 -0.359216 -0.366408 -0.44297 -0.818243 + -1.78908 2.52885 -0.331856 -0.470619 -0.492298 -0.732229 + -1.96138 2.55454 -0.257564 -0.430506 -0.382153 -0.817694 + -1.70194 2.42975 -0.265816 0.645164 -0.737215 -0.200693 + -1.73553 2.35858 -0.256944 0.332164 -0.651797 -0.681783 + -1.78273 2.34838 -0.237672 0.538597 -0.692638 -0.479756 + -1.71639 2.46932 -0.339945 -0.371202 -0.410771 -0.832752 + -1.85647 2.54302 -0.277405 -0.311587 -0.843734 -0.437065 + -1.68551 2.34651 -0.184032 -0.0935676 -0.609139 -0.787525 + -1.71628 2.29053 -0.14388 0.347864 -0.548168 -0.760593 + -1.74988 2.21936 -0.135015 0.186513 -0.612087 -0.76848 + -1.77436 2.17638 -0.08636 0.271163 -0.665157 -0.695728 + -1.8154 2.28022 -0.219228 0.137216 -0.472127 -0.870786 + -1.71639 2.46932 -0.339945 0.907551 -0.4055 0.10918 + -1.63216 2.1283 -0.077687 0.0192926 -0.498098 -0.866906 + -1.66293 2.07241 -0.037486 -0.40343 -0.597529 -0.692967 + -1.68409 2.03939 0.025701 -0.273643 -0.713378 -0.645145 + -1.70857 1.99641 0.074348 -0.572156 -0.73765 -0.358484 + -1.53196 2.1008 -0.030862 0.279885 -0.438283 -0.85415 + -1.55011 2.03162 -0.001628 0.22981 -0.584972 -0.777814 + -1.57347 1.98018 0.03807 -0.00642807 -0.773817 -0.633377 + -1.59463 1.94725 0.1013 -0.107748 -0.887259 -0.448511 + -1.38042 2.10717 0.002718 0.411046 -0.67189 -0.616121 + -1.43484 2.0693 0.0235 0.399968 -0.680769 -0.613661 + -1.4582 2.01786 0.063199 0.345951 -0.577204 -0.739699 + -1.47766 1.95416 0.101329 0.153002 -0.790946 -0.592447 + -1.33928 2.16376 -0.010112 0.468369 -0.342054 -0.814635 + -1.27263 2.16069 0.057417 0.641721 -0.744093 -0.185796 + -1.32704 2.12282 0.078207 0.703728 -0.633441 -0.321744 + -1.37329 2.02361 0.083435 0.334338 -0.352658 -0.873985 + -1.1922 2.27055 0.073518 0.450513 -0.681699 -0.576476 + -1.21979 2.20679 0.063957 0.723967 -0.575963 -0.379656 + -1.19121 2.27081 0.18087 0.69421 -0.717527 -0.056813 + -1.17331 2.26835 0.009938 -0.0378973 -0.999281 0.00106347 + -1.0976 2.3003 0.121208 -0.224908 -0.973844 -0.0323156 + -1.13837 2.31692 0.187409 0.0824058 -0.986284 -0.143015 + -1.12303 2.27615 0.261829 -0.480785 -0.673812 -0.561091 + -1.14682 2.27224 0.275606 0.251423 -0.717666 -0.649417 + -1.17764 2.27532 0.212466 -0.871159 -0.266775 0.412206 + -1.16971 2.29075 -0.059863 -0.283283 -0.931787 -0.226987 + -1.0774 2.23682 -0.044042 -0.552576 -0.818903 0.155106 + -1.07871 2.29809 0.057626 -0.262194 -0.942435 0.207535 + -1.05384 2.25235 0.14565 -0.840032 -0.35726 -0.408303 + -1.08226 2.25953 0.195622 -0.848131 -0.337051 -0.408742 + -1.17186 2.29449 -0.122738 -0.437185 -0.854362 -0.280954 + -1.07955 2.24064 -0.106867 -0.580085 -0.801537 -0.14505 + -1.02273 2.17336 -0.067931 -0.929554 -0.368633 0.00620746 + -1.03478 2.21398 -0.011292 -0.862637 -0.46737 0.193452 + -1.12179 2.30564 -0.172649 -0.512935 -0.728255 -0.454469 + -1.17866 2.339 -0.187233 -0.388309 -0.697699 -0.602023 + -1.11505 2.38959 -0.271264 -0.467927 -0.676145 -0.569097 + -1.087 2.44716 -0.387179 -0.287327 -0.868946 -0.402959 + -1.02021 2.51347 -0.526628 -0.0238733 -0.821431 -0.569808 + -0.935985 2.58446 -0.605581 0.104523 -0.764177 -0.636481 + -0.870966 2.57111 -0.610862 -0.297528 -0.270653 -0.915546 + -0.713771 2.65233 -0.67113 -0.475959 -0.188093 -0.859118 + -0.673895 2.61527 -0.694348 -0.745561 -0.0926619 -0.659964 + -1.02167 2.1516 0.035751 -0.740981 -0.667115 -0.0768413 + -1.03372 2.19214 0.092341 -0.979933 -0.0172478 -0.19858 + -1.0361 2.27517 0.090327 -0.763857 -0.624151 -0.164187 + -0.922802 2.10901 0.085129 -0.0730675 -0.940762 -0.331101 + -0.958577 2.11066 0.163666 -0.403519 -0.847821 -0.344053 + -1.05147 2.16932 0.147664 -0.741176 -0.418416 -0.524963 + -1.10586 2.12196 0.209692 -0.660401 -0.396373 -0.637777 + -1.13427 2.12922 0.259715 -0.902301 -0.177056 -0.39307 + -0.810344 1.97817 0.320542 0.252569 -0.775443 -0.578703 + -0.833391 1.94058 0.379053 0.383086 -0.588722 -0.711794 + -0.981624 2.07298 0.222127 -0.165579 -0.749026 -0.641516 + -1.03601 2.02571 0.284205 -0.172602 -0.721006 -0.671088 + -1.05697 1.97337 0.346654 -0.456815 -0.712095 -0.533142 + -0.670717 1.96894 0.458339 0.5406 -0.452775 -0.709046 + -0.667906 1.89635 0.48865 0.486931 -0.350594 -0.799989 + -0.815929 1.8798 0.41873 0.196764 -0.638051 -0.744429 + -0.836881 1.82746 0.481179 0.137446 -0.657438 -0.740867 + -0.538643 2.04431 0.522979 0.487738 -0.177435 -0.854768 + -0.535832 1.97165 0.553241 0.337731 -0.287496 -0.896261 + -0.544717 1.8913 0.575002 0.281666 -0.394091 -0.874846 + -0.650445 1.83549 0.528277 0.448517 -0.508229 -0.735211 + -0.427416 2.11128 0.562994 -0.244922 -0.165181 -0.955368 + -0.433959 2.01996 0.558956 0.0292519 -0.0334085 -0.999014 + -0.456382 1.94003 0.566206 -0.125882 -0.107125 -0.986244 + -0.465268 1.85968 0.587968 -0.578016 -0.164181 -0.799339 + -0.570279 1.82633 0.611336 0.204365 -0.59909 -0.774161 + -0.436841 2.19521 0.541212 -0.404992 -0.582201 -0.704999 + -0.353586 1.97298 0.525926 -0.695918 -0.130636 -0.706139 + -0.378271 1.89349 0.544613 -0.439686 -0.00325801 -0.898145 + -0.400694 1.81364 0.551913 -0.2421 0.06829 -0.967845 + -0.446909 1.74023 0.544275 -0.46875 0.0966612 -0.878026 + -0.363011 2.05692 0.504144 -0.819735 -0.279144 -0.500113 + -0.301749 1.91849 0.465723 -0.963012 -0.158057 -0.218232 + -0.308399 1.84823 0.493806 -0.830271 -0.0286213 -0.556625 + -0.333084 1.76874 0.512494 -0.586746 -0.028627 -0.809265 + -0.348014 1.70073 0.530483 -0.396609 0.0165682 -0.917838 + -0.378708 2.13667 0.481814 -0.726258 -0.499145 -0.472655 + -0.317446 1.99815 0.443342 -0.914962 -0.251027 -0.31596 + -0.290161 1.78861 0.420064 -0.877068 -0.0629937 -0.476218 + -0.296811 1.71836 0.448148 -0.944697 -0.204777 -0.256153 + -0.280895 1.6451 0.472234 -0.74401 -0.151147 -0.650848 + -0.331639 2.07409 0.420611 -0.910034 -0.398997 -0.112426 + -0.26363 1.85203 0.385818 -0.792137 -0.143332 -0.593275 + -0.206389 1.80208 0.32754 -0.640929 -0.246385 -0.726983 + -0.23292 1.73866 0.361786 -0.617796 -0.251387 -0.745072 + -0.235821 1.6716 0.395736 -0.601231 -0.361446 -0.712655 + -0.277823 1.92789 0.363036 -0.862772 -0.299925 -0.407025 + -0.21079 1.87381 0.301308 -0.693584 -0.301411 -0.654288 + -0.14511 1.84072 0.259615 -0.45794 -0.377817 -0.804702 + -0.135439 1.77259 0.295815 -0.40197 -0.420262 -0.813511 + -0.13834 1.70553 0.329765 -0.409917 -0.406786 -0.816391 + -0.297938 2.00159 0.348771 -0.796957 -0.359634 -0.485306 + -0.230905 1.94743 0.286993 -0.694517 -0.305071 -0.651597 + -0.149511 1.91236 0.233334 -0.432045 -0.321497 -0.842601 + -0.084582 1.92307 0.212986 0.0414754 -0.299385 -0.953231 + -0.081362 1.84769 0.230549 -0.0483851 -0.284384 -0.957489 + -0.241038 2.02176 0.264251 -0.650004 -0.31712 -0.690601 + -0.1517 1.98683 0.207735 -0.424964 -0.322893 -0.845663 + -0.086772 1.99754 0.187387 0.124605 -0.352569 -0.927453 + -0.028371 1.90395 0.240101 0.206269 -0.20136 -0.957553 + -0.025151 1.82848 0.257614 0.208168 -0.0754405 -0.975179 + -0.161833 2.06108 0.184943 -0.470986 -0.361832 -0.804518 + -0.086495 2.06566 0.157802 0.0707083 -0.471308 -0.87913 + -0.028371 1.98169 0.227848 0.262455 -0.257919 -0.929836 + 0.028384 1.98169 0.227848 -0.232164 -0.281559 -0.931034 + 0.028384 1.90395 0.240102 -0.196088 -0.186512 -0.962685 + -0.078873 2.13192 0.117042 0.0419019 -0.640991 -0.766404 + -0.028094 2.04981 0.198263 0.223948 -0.456923 -0.860853 + 0.028086 2.04981 0.198263 -0.223684 -0.456645 -0.86107 + 0.086785 1.99754 0.187387 -0.133314 -0.365728 -0.921125 + 0.084595 1.92307 0.212986 -0.080155 -0.2709 -0.959264 + -0.028094 2.11031 0.157878 0.182796 -0.60551 -0.77456 + 0.028086 2.11031 0.157878 -0.180857 -0.606177 -0.774494 + 0.086487 2.06566 0.157802 -0.0716737 -0.470248 -0.879619 + 0.151697 1.98684 0.207726 0.42598 -0.325174 -0.844276 + 0.025953 2.16442 0.105158 -0.119504 -0.723437 -0.679969 + 0.078865 2.13201 0.117092 -0.0420762 -0.641547 -0.765929 + 0.154209 2.12742 0.144226 0.421737 -0.506752 -0.751891 + 0.16183 2.06108 0.184937 0.445027 -0.38063 -0.8106 + 0.025953 2.21513 0.044117 -0.1192 -0.857985 -0.499653 + 0.076732 2.18603 0.064323 -0.016313 -0.804925 -0.593153 + 0.154605 2.18535 0.100294 0.309959 -0.754485 -0.578513 + 0.259627 2.10262 0.248796 0.637108 -0.363523 -0.679665 + 0.241035 2.02176 0.264245 0.652543 -0.322855 -0.685531 + 0.081398 2.22044 -0.002884 -0.0330055 -0.918829 -0.393273 + 0.15927 2.21967 0.033045 0.303564 -0.865301 -0.398877 + 0.260023 2.16046 0.204816 0.556213 -0.540992 -0.630836 + 0.341669 2.14994 0.304624 0.739955 -0.480742 -0.470482 + 0.156899 2.24578 -0.033764 0.108098 -0.977051 -0.183538 + 0.255581 2.21549 0.158688 0.548452 -0.659496 -0.514068 + 0.35622 2.23418 0.219711 0.302315 -0.925348 -0.228772 + 0.360662 2.17915 0.265841 0.672493 -0.639137 -0.373172 + 0.25321 2.24159 0.091878 0.183784 -0.952974 -0.240965 + 0.351766 2.22323 0.157082 -0.226873 -0.972716 0.0485016 + 0.458563 2.21157 0.222077 -0.0542141 -0.822172 0.566652 + 0.436639 2.29199 0.27059 0.256662 -0.960627 0.106399 + 0.417646 2.26287 0.309422 0.549386 -0.735699 -0.396135 + 0.345719 2.23594 0.079281 -0.218538 -0.965642 -0.140629 + 0.454109 2.20062 0.159444 -0.222399 -0.951529 0.212441 + 0.543356 2.21135 0.213069 -0.063121 -0.718424 0.692736 + 0.521432 2.29176 0.261583 -0.19864 -0.913644 0.354677 + 0.346555 2.25176 0.008467 -0.188592 -0.932179 -0.308991 + 0.452082 2.18241 0.091785 -0.317062 -0.948202 0.0195966 + 0.554508 2.1632 0.10366 -0.0359045 -0.999279 0.0123136 + 0.556535 2.1815 0.171369 -0.161488 -0.896338 0.412916 + 0.67046 2.19247 0.209166 -0.334003 -0.919569 0.206967 + 0.243867 2.27531 -0.046122 0.364803 -0.565114 -0.739976 + 0.350908 2.27944 -0.059467 -0.134923 -0.868025 -0.477838 + 0.452918 2.19833 0.021021 -0.277137 -0.898218 -0.341173 + 0.096883 2.29063 -0.229258 0.489284 -0.71954 -0.492812 + 0.24822 2.30299 -0.114056 0.209344 -0.868014 -0.450252 + 0.35169 2.32451 -0.12374 0.00205613 -0.713908 -0.700236 + 0.450824 2.24422 -0.055273 -0.205456 -0.820718 -0.533113 + 0.451606 2.2893 -0.119546 -0.37794 -0.779885 -0.498939 + 0.542863 2.2168 -0.038182 -0.292597 -0.904761 -0.309508 + 0.544957 2.17091 0.038111 0.019762 -0.948674 -0.315637 + 0.649184 2.18275 0.132395 0.124707 -0.893937 -0.430494 + 0.683639 2.16253 0.167417 0.179414 -0.94545 0.27191 + 0.445414 2.33028 -0.186529 -0.496531 -0.687819 -0.529491 + 0.519611 2.28058 -0.179647 -0.673012 -0.687869 -0.271828 + 0.525802 2.23951 -0.112714 -0.4558 -0.834679 -0.309124 + 0.617838 2.17332 -0.016465 -0.310813 -0.943415 0.115597 + 0.639633 2.19037 0.066806 0.047314 -0.997631 -0.0499374 + 0.442834 2.38537 -0.239753 -0.604136 -0.603835 -0.520003 + 0.4982 2.32577 -0.24471 -0.727964 -0.601011 -0.32993 + 0.559073 2.21804 -0.162728 -0.814487 -0.558261 0.157976 + 0.600777 2.19603 -0.090996 -0.527749 -0.8494 -0.000225221 + 0.673023 2.1625 -0.086333 0.0349253 -0.990374 0.133937 + 0.426266 2.44644 -0.292521 -0.647424 -0.580264 -0.4941 + 0.481631 2.38683 -0.29747 -0.780826 -0.534269 -0.323833 + 0.537662 2.26323 -0.227793 -0.876742 -0.479452 -0.0380599 + 0.590327 2.17315 -0.220969 -0.681039 -0.714986 0.158051 + 0.632032 2.15113 -0.149236 -0.309219 -0.932848 0.184872 + 0.415489 2.50481 -0.344625 -0.692527 -0.560435 -0.454223 + 0.46255 2.44419 -0.355431 -0.810433 -0.503731 -0.299087 + 0.516811 2.31852 -0.290163 -0.919632 -0.389169 -0.0531396 + 0.536521 2.25412 -0.344224 -0.960938 -0.27025 0.0596881 + 0.557372 2.19883 -0.281854 -0.898655 -0.402766 0.173778 + 0.399688 2.56693 -0.395823 -0.670596 -0.542369 -0.5061 + 0.446749 2.50631 -0.40663 -0.856737 -0.433576 -0.279309 + 0.49773 2.37589 -0.348125 -0.917936 -0.391819 -0.0622153 + 0.333062 2.67159 -0.4291 -0.139327 -0.605185 -0.783798 + 0.392709 2.62786 -0.447361 -0.691659 -0.487732 -0.532659 + 0.438169 2.56162 -0.466418 -0.861458 -0.375875 -0.341481 + 0.475049 2.42664 -0.411635 -0.950012 -0.312144 -0.0066024 + 0.328673 2.73479 -0.471964 -0.178235 -0.691386 -0.700156 + 0.393967 2.68945 -0.500823 -0.723978 -0.527399 -0.444641 + 0.439427 2.62312 -0.519938 -0.882883 -0.35938 -0.302263 + 0.466469 2.48194 -0.471415 -0.952664 -0.260561 -0.156651 + 0.49643 2.3586 -0.468174 -0.964303 -0.26474 0.00566451 + 0.26365 3.18553 -1.08067 -0.535437 -0.631319 -0.56102 + 0.318613 3.01098 -0.907536 -0.690458 -0.621868 -0.369523 + 0.383908 2.96572 -0.936345 -0.752941 -0.57307 -0.323527 + 0.423656 2.83709 -0.832142 -0.899409 -0.382795 -0.211024 + 0.468237 2.52849 -0.541048 -0.96266 -0.227596 -0.146579 + 0.211286 2.9128 -0.796693 0.73924 -0.513497 -0.435713 + 0.214432 3.22701 -1.07952 0.11691 -0.655131 -0.746415 + 0.170029 3.8391 -1.98009 -0.624127 -0.64204 -0.445253 + 0.260896 3.7114 -1.9673 -0.741447 -0.559738 -0.370066 + 0.315859 3.53684 -1.79416 -0.788261 -0.526422 -0.318629 + 0.063904 3.39356 -1.63558 0.881494 -0.32128 -0.346047 + -0.011004 2.20909 -0.926224 0 -0.159648 -0.987174 + 0.120811 3.88058 -1.97892 -0.387844 -0.755631 -0.527825 + 0.084072 4.11489 -2.27757 -0.161473 -0.305658 -0.938349 + 0.144953 4.07833 -2.28164 -0.302697 -0.298767 -0.905049 + 0.226921 3.78392 -1.9845 -0.651826 -0.488595 -0.579998 + 0.156182 4.10829 -2.27694 0.172708 0.322697 -0.930612 + 0.228575 4.03035 -2.28994 0.194202 0.166993 -0.966643 + 0.201845 4.02314 -2.28606 -0.43519 -0.372215 -0.819796 + 0.253826 3.95131 -2.28264 -0.471122 -0.386856 -0.792708 + 0.096818 4.17112 -2.26096 0.223833 0.571077 -0.789791 + 0.165782 4.13128 -2.26075 0.419336 0.561333 -0.713486 + 0.238175 4.05342 -2.2737 0.537699 0.500127 -0.678787 + 0.280556 3.95861 -2.28647 0.250303 0.033792 -0.967578 + 0.094074 4.19741 -2.23569 0.266597 0.738094 -0.619793 + 0.163038 4.15765 -2.23543 0.498966 0.664795 -0.55595 + 0.231694 4.09268 -2.23609 0.630681 0.60432 -0.486866 + 0.289297 4.02531 -2.231 0.713252 0.542923 -0.443289 + 0.295778 3.98606 -2.26862 0.639188 0.38878 -0.663542 + 0.090118 4.23945 -2.17751 0.274533 0.810976 -0.516672 + 0.155107 4.20838 -2.17409 0.522863 0.726506 -0.445873 + 0.223763 4.1434 -2.17474 0.622931 0.639694 -0.450276 + 0.282864 4.08583 -2.16703 0.702945 0.566731 -0.429749 + 0.342257 3.96762 -2.21109 0.771023 0.445835 -0.454702 + 0.077413 4.2961 -2.08803 0.270437 0.838046 -0.47386 + 0.142402 4.26511 -2.08456 0.440203 0.76892 -0.463664 + 0.21748 4.22262 -2.07876 0.550759 0.681972 -0.481225 + 0.276581 4.16497 -2.0711 0.73689 0.562623 -0.374763 + 0.335824 4.02814 -2.14711 0.780547 0.516235 -0.352488 + 0.077217 4.33595 -2.01465 0.243611 0.866787 -0.435125 + 0.140414 4.31927 -1.99955 0.393913 0.810496 -0.433508 + 0.215492 4.27678 -1.99376 0.544849 0.723776 -0.423425 + 0.261316 4.23416 -1.99374 0.730379 0.592927 -0.339092 + 0.323258 4.09292 -2.06472 0.818049 0.503243 -0.278464 + 0.086582 4.35657 -1.96057 0.255164 0.850071 -0.460729 + 0.149779 4.33989 -1.94548 0.387382 0.798444 -0.460892 + 0.205029 4.34236 -1.89375 0.547656 0.716354 -0.432332 + 0.250854 4.29974 -1.89373 0.693542 0.665126 -0.276779 + 0.307993 4.16202 -1.9874 0.790539 0.519727 -0.323931 + 0.090761 4.42195 -1.861 0.2451 0.789811 -0.56225 + 0.136076 4.4086 -1.85449 0.374044 0.758101 -0.534203 + 0.191327 4.41115 -1.80271 0.408515 0.694799 -0.591921 + 0.269232 4.28621 -1.8763 0.72102 0.584076 -0.372806 + 0.031855 4.51372 -1.75675 0.0975426 0.796003 -0.597381 + 0.090371 4.55762 -1.67839 0.24802 0.783585 -0.569632 + 0.135687 4.54427 -1.67187 0.238956 0.72497 -0.646002 + 0.159375 4.57666 -1.63058 -0.0272755 0.539777 -0.841366 + 0.215015 4.44355 -1.76142 0.410891 0.620843 -0.667625 + 0.019581 4.57673 -1.67429 0.0822428 0.808915 -0.582145 + 0.078097 4.62054 -1.59598 -0.084314 0.606392 -0.790683 + 0.088187 4.69572 -1.55799 -0.0242987 0.349665 -0.93656 + 0.144635 4.68969 -1.56734 -0.284522 0.404217 -0.869285 + 0.209426 4.5831 -1.66813 0.00589629 0.524071 -0.851654 + -0.019583 4.57673 -1.67429 -0.0824503 0.808871 -0.582176 + 0.019581 4.62602 -1.60127 0.0626536 0.656613 -0.751621 + 0.02967 4.70111 -1.56333 0.0582603 0.322479 -0.944782 + 0.09063 4.812 -1.5348 -0.0225725 0.227466 -0.973524 + 0.147078 4.80597 -1.54415 -0.0877212 0.2508 -0.964056 + -0.019583 4.62602 -1.60127 -0.0626653 0.656621 -0.751613 + -0.029672 4.70111 -1.56333 -0.0602841 0.324572 -0.943938 + 0.02967 4.82222 -1.5379 0.0436184 0.230337 -0.972133 + 0.031893 4.92248 -1.51155 0.0302154 0.302891 -0.952546 + 0.092852 4.91217 -1.5085 0.0337277 0.271666 -0.9618 + -0.029672 4.82222 -1.5379 -0.0449098 0.228458 -0.972517 + -0.031893 4.92248 -1.51155 -0.0509479 0.321189 -0.945643 + 0.031893 5.00159 -1.47878 -0.0240052 0.367767 -0.929608 + 0.098094 4.99545 -1.48494 -0.0148726 0.330447 -0.943707 + -0.092852 4.91218 -1.50851 -0.0203891 0.288639 -0.957221 + -0.031893 5.00159 -1.47878 0.0112348 0.353127 -0.935508 + 0.058347 5.10813 -1.43912 -0.0236694 0.362587 -0.931649 + 0.124549 5.10199 -1.44528 -0.0222974 0.367918 -0.929591 + 0.180374 4.98905 -1.48744 -0.0034224 0.321428 -0.946928 + -0.175129 4.90577 -1.51101 0.0222455 0.304884 -0.95213 + -0.098094 4.99545 -1.48495 0.0330762 0.314555 -0.948663 + -0.124545 5.10199 -1.44528 0.0183492 0.360004 -0.93277 + -0.058344 5.10813 -1.43912 0.028584 0.358655 -0.933033 + -0.314178 4.96879 -1.49417 -0.121927 0.239438 -0.963226 + -0.180371 4.98905 -1.48744 -0.000528955 0.316294 -0.948661 + -0.245024 5.10121 -1.44312 -0.0136319 0.356406 -0.934232 + -0.212368 5.21916 -1.39982 -0.00446196 0.457778 -0.889055 + -0.058344 5.22547 -1.39355 0.0103232 0.465922 -0.884765 + -0.39931 4.92231 -1.48206 -0.256635 0.0693434 -0.964018 + -0.378831 5.08096 -1.44984 -0.101233 0.314973 -0.943686 + -0.332847 5.21829 -1.39771 -0.0324007 0.446595 -0.89415 + -0.229843 5.34087 -1.31843 -0.00111754 0.603123 -0.797648 + -0.47304 4.8423 -1.45428 -0.331432 -0.132738 -0.934095 + -0.575158 4.91974 -1.42141 -0.337859 -0.0384835 -0.94041 + -0.501428 4.99984 -1.44914 -0.271212 0.121322 -0.954843 + -0.506441 5.13501 -1.41247 -0.174721 0.307506 -0.935368 + -0.457463 5.29863 -1.35106 -0.0300837 0.480176 -0.876656 + -0.417519 4.7888 -1.46101 -0.347509 -0.161835 -0.923605 + -0.497081 4.70961 -1.41125 -0.43423 -0.196027 -0.879214 + -0.552602 4.7632 -1.40447 -0.392368 -0.270892 -0.879014 + -0.62043 4.83545 -1.39461 -0.398448 -0.216285 -0.891325 + -0.384069 4.72168 -1.46716 -0.402101 -0.0752056 -0.912501 + -0.44761 4.64259 -1.43078 -0.484941 -0.112088 -0.867334 + -0.567514 4.62001 -1.34906 -0.599506 -0.251952 -0.759679 + -0.61531 4.69129 -1.34531 -0.528167 -0.361802 -0.768205 + -0.683138 4.76353 -1.33545 -0.574009 -0.391888 -0.718984 + -0.391732 4.57063 -1.45213 -0.585631 0.101293 -0.804224 + -0.518043 4.55291 -1.36864 -0.607452 -0.0769277 -0.790623 + -0.569416 4.48354 -1.31309 -0.835857 -0.167358 -0.522814 + -0.605012 4.56017 -1.27502 -0.846825 -0.297333 -0.440999 + -0.652807 4.63153 -1.27122 -0.760136 -0.493465 -0.422712 + -0.477052 4.4763 -1.41354 -0.683593 0.171459 -0.709438 + -0.528424 4.40693 -1.35799 -0.848818 0.0960515 -0.519887 + -0.583852 4.43159 -1.2419 -0.918135 -0.134537 -0.372731 + -0.619448 4.5083 -1.20378 -0.914321 -0.206562 -0.34835 + -0.650159 4.59414 -1.17185 -0.846763 -0.404485 -0.345519 + -0.500752 4.26279 -1.46613 -0.903235 0.254771 -0.345339 + -0.562038 4.35849 -1.3121 -0.922541 0.102806 -0.371952 + -0.627602 4.1418 -1.07658 -0.974118 0.051195 -0.220165 + -0.649416 4.21499 -1.00634 -0.975156 -0.0115375 -0.221218 + -0.654169 4.28647 -0.963151 -0.968055 -0.0879768 -0.234795 + -0.534365 4.21435 -1.42024 -0.937499 0.100705 -0.333097 + -0.6201 4.04521 -1.17587 -0.963158 0.0446895 -0.265197 + -0.768658 3.74322 -0.619611 -0.943966 0.320068 -0.080525 + -0.737398 3.80817 -0.584916 -0.963018 0.236611 -0.128882 + -0.74215 3.87974 -0.541678 -0.966102 0.153859 -0.207302 + -0.484063 4.0017 -1.55352 -0.999533 0.013755 -0.0272776 + -0.569798 3.83247 -1.3092 -0.950406 0.195093 -0.242211 + -0.761156 3.64662 -0.718893 -0.919456 0.351286 -0.176633 + -0.91 3.44794 -0.45138 -0.552901 0.70962 -0.436738 + -0.859614 3.51785 -0.392463 -0.607293 0.649221 -0.457938 + -0.509841 3.86933 -1.64343 -0.912811 0.33702 0.230639 + -0.599227 3.72037 -1.38404 -0.858173 0.510049 -0.0582163 + -0.806855 3.56984 -0.807711 -0.847204 0.510248 -0.147961 + -0.955699 3.37117 -0.540198 -0.592616 0.760361 -0.265814 + -0.588362 3.78145 -1.68063 -0.746333 0.566857 0.348799 + -0.677748 3.63249 -1.42123 -0.699057 0.710278 0.0826107 + -0.836284 3.45774 -0.882547 -0.787825 0.599044 -0.143101 + -1.00753 3.3111 -0.661758 -0.561087 0.818899 -0.120772 + -1.043 3.33197 -0.549702 0.127586 0.78626 -0.60458 + -0.657794 3.71536 -1.71276 -0.663381 0.641159 0.385798 + -0.7262 3.6026 -1.49185 -0.613381 0.77274 0.163206 + -0.858807 3.44275 -0.997782 -0.63744 0.768601 0.0540593 + -1.03005 3.29611 -0.776992 -0.502932 0.863789 0.0304564 + -0.732849 3.66746 -1.731 -0.575377 0.718392 0.390965 + -0.801256 3.55478 -1.51003 -0.515467 0.841093 0.163879 + -0.907259 3.41294 -1.06835 -0.420587 0.882242 0.211555 + -1.03338 3.30779 -0.868825 -0.457397 0.866819 0.198527 + -1.16827 3.23591 -0.834932 -0.032081 0.992397 -0.118825 + -0.833848 3.59399 -1.75135 -0.565725 0.732274 0.379118 + -0.863759 3.53291 -1.58534 -0.523009 0.83752 0.158182 + -0.925856 3.45071 -1.17737 -0.216647 0.945458 0.243255 + -1.05197 3.34555 -0.977836 -0.391998 0.868885 0.302286 + -1.1716 3.24768 -0.926706 -0.409463 0.893203 0.185815 + -0.969964 3.5092 -1.77767 -0.46573 0.78007 0.417836 + -0.999875 3.44811 -1.61167 -0.459858 0.87967 0.121289 + -0.98836 3.42883 -1.25267 -0.4556 0.882473 0.116919 + -1.09283 3.34785 -1.08122 -0.505851 0.842624 0.18466 + -1.21245 3.24989 -1.03014 -0.282424 0.945185 0.163895 + -1.11874 3.44462 -1.78761 -0.278944 0.832069 0.479428 + -1.09957 3.413 -1.67885 -0.315615 0.93014 0.187688 + -1.01918 3.43216 -1.38745 -0.295156 0.951244 0.0895472 + -1.12364 3.35118 -1.21599 -0.5044 0.851531 0.143092 + -1.23216 3.2789 -1.20999 -0.304035 0.93962 0.157086 + -1.30519 3.45113 -1.84669 -0.181255 0.884041 0.430835 + -1.27622 3.41134 -1.79357 -0.162275 0.853107 0.495859 + -1.25705 3.37972 -1.68482 -0.218171 0.956111 0.195583 + -1.11887 3.39705 -1.45464 -0.412461 0.904531 0.108162 + -1.13075 3.36642 -1.32257 -0.526437 0.837185 0.148276 + -1.29995 3.46466 -1.90454 -0.265125 0.959469 -0.0955401 + -1.46391 3.41461 -1.81744 -0.0341149 0.923737 0.381506 + -1.43494 3.37481 -1.76431 -0.0350859 0.889098 0.456369 + -1.35307 3.35536 -1.67502 -0.1563 0.96949 0.188839 + -1.14214 3.39251 -1.50476 -0.284377 0.946908 0.149986 + -1.36382 3.44217 -1.92598 -0.179917 0.982134 -0.0551585 + -1.48277 3.42564 -1.88494 -0.0776707 0.993122 0.0876163 + -1.59004 3.40451 -1.78076 0.119371 0.935239 0.333285 + -1.55599 3.35431 -1.7118 0.113256 0.920255 0.374572 + -1.47412 3.33477 -1.62255 -0.0691088 0.97927 0.190408 + -1.47691 3.4259 -1.974 -0.318429 0.873374 -0.368538 + -1.6089 3.41555 -1.84827 -0.211726 0.960048 -0.182973 + -1.69671 3.41036 -1.72967 0.207314 0.955132 0.211528 + -1.66266 3.36006 -1.66077 0.314831 0.922706 0.222475 + -1.54073 3.32302 -1.56781 0.133456 0.990554 -0.0314893 + -1.49571 3.38455 -2.00338 -0.405016 0.220916 -0.887219 + -1.64401 3.36864 -1.89082 -0.437396 0.700827 -0.563494 + -1.76033 3.36363 -1.82314 -0.364025 0.684239 -0.631905 + -1.72522 3.41054 -1.78059 -0.167285 0.931208 -0.323833 + -1.79723 3.42649 -1.65382 0.258902 0.962067 0.0860093 + -1.66281 3.32729 -1.92019 -0.440612 0.485897 -0.754828 + -1.79251 3.29908 -1.86053 -0.454315 0.47498 -0.753652 + -1.83363 3.39129 -1.76046 -0.398294 0.735366 -0.548269 + -1.82574 3.42676 -1.70469 -0.214448 0.93276 -0.289776 + -1.86581 3.32674 -1.79784 -0.554988 0.533983 -0.637849 + -1.94243 3.33731 -1.68535 -0.700685 0.562802 -0.438514 + -1.92308 3.40147 -1.61709 -0.656105 0.661208 -0.363773 + -1.9152 3.43695 -1.56133 -0.422771 0.883772 -0.200529 + -1.88163 3.43962 -1.53096 0.195688 0.978016 0.0720413 + -1.98168 3.22658 -1.72917 -0.709701 0.412668 -0.57099 + -2.03403 3.22111 -1.67248 -0.706009 0.479468 -0.521212 + -2.04657 3.34112 -1.43756 -0.651581 0.64886 -0.392967 + -2.02722 3.40521 -1.36935 -0.544128 0.69565 -0.469036 + -1.98072 3.43541 -1.38007 -0.294537 0.906434 -0.302696 + -2.14444 3.08049 -1.62792 -0.776127 0.289602 -0.560141 + -2.12598 3.21637 -1.55647 -0.669219 0.556196 -0.492739 + -2.13852 3.33638 -1.32155 -0.395261 0.725467 -0.563442 + -2.08324 3.49396 -1.20809 -0.390149 0.567836 -0.724808 + -2.17485 2.85109 -1.6634 -0.79539 0.200263 -0.572057 + -2.31866 3.01833 -1.37227 -0.833806 0.237462 -0.498376 + -2.27807 3.12168 -1.39247 -0.815392 0.298196 -0.4962 + -2.25962 3.25755 -1.32101 -0.789205 0.330252 -0.517772 + -2.25356 3.33286 -1.28524 -0.579242 0.519918 -0.627825 + -2.24194 2.72805 -1.6143 -0.782503 0.209447 -0.586362 + -2.38575 2.89521 -1.32322 -0.8413 0.23941 -0.484662 + -2.38694 3.07967 -1.2155 -0.899898 0.422306 0.108813 + -2.34636 3.18301 -1.2357 -0.933782 0.248663 -0.25733 + -2.33018 3.2656 -1.21775 -0.914582 0.240842 -0.32486 + -2.16603 2.59459 -1.75254 -0.709151 0.137168 -0.691585 + -2.3903 2.63865 -1.45183 -0.801119 0.225301 -0.554479 + -2.43603 2.83347 -1.26568 -0.824146 0.297454 -0.481979 + -2.46885 2.93672 -1.12491 -0.621371 0.73428 0.273368 + -2.41857 2.99846 -1.18245 -0.859254 0.509805 -0.0422177 + -2.31438 2.50519 -1.59007 -0.763846 0.0744398 -0.641092 + -2.49329 2.5927 -1.31286 -0.825116 0.215545 -0.522229 + -2.53903 2.78753 -1.1267 -0.849247 0.332748 -0.40995 + -2.28302 2.33097 -1.61352 -0.694635 -0.170568 -0.698848 + -2.39136 2.43913 -1.50445 -0.790298 0.0546029 -0.610284 + -2.49452 2.4665 -1.34626 -0.838856 0.0752713 -0.539124 + -2.64128 2.60297 -1.06884 -0.869722 0.227182 -0.438146 + -2.58184 2.76009 -1.05317 -0.831745 0.384051 -0.400879 + -2.40166 2.32341 -1.48662 -0.790425 -0.196533 -0.580176 + -2.50482 2.35078 -1.32843 -0.857148 -0.168307 -0.486795 + -2.64251 2.47677 -1.10226 -0.897715 -0.0294658 -0.439589 + -2.74077 2.4962 -0.832505 -0.979981 0.0277292 -0.197152 + -2.6903 2.62741 -0.943175 -0.924 0.242128 -0.29597 + -2.37144 2.26879 -1.49442 -0.664562 -0.534611 -0.522061 + -2.48835 2.28339 -1.31431 -0.764429 -0.523551 -0.376221 + -2.62715 2.384 -1.08077 -0.882861 -0.275063 -0.380653 + -2.7039 2.38727 -0.910439 -0.880312 -0.385573 -0.276377 + -2.71926 2.48005 -0.931931 -0.882633 0.335294 -0.32945 + -2.34168 2.2341 -1.47373 -0.3536 -0.899385 -0.257049 + -2.45859 2.24861 -1.29367 -0.380601 -0.919034 -0.102559 + -2.58583 2.29395 -1.05661 -0.39012 -0.920493 -0.0223533 + -2.61069 2.3166 -1.06664 -0.789673 -0.549192 -0.273503 + -2.68906 2.3493 -0.878472 -0.772178 -0.619099 -0.143034 + -2.31731 2.23023 -1.45523 0.206065 -0.963579 0.170449 + -2.43314 2.249 -1.27375 0.222823 -0.937244 0.268184 + -2.56038 2.29426 -1.03674 0.234198 -0.930731 0.280876 + -2.62978 2.32533 -0.864149 0.254835 -0.934433 0.248787 + -2.66421 2.32665 -0.868442 -0.39123 -0.919039 0.0480244 + -2.28861 2.25875 -1.43763 0.594899 -0.647939 0.475679 + -2.40444 2.27752 -1.25615 0.675387 -0.554943 0.485686 + -2.52836 2.321 -1.03146 0.717266 -0.534882 0.446576 + -2.59777 2.35215 -0.858812 0.772203 -0.567406 0.285925 + -2.38166 2.37619 -1.23645 0.780595 -0.270465 0.563489 + -2.50558 2.41975 -1.0117 0.85921 -0.219896 0.461956 + -2.57205 2.442 -0.857433 0.944664 -0.2284 0.235463 + -2.60291 2.36298 -0.752564 0.7427 -0.653014 0.14822 + -2.6482 2.34852 -0.75112 0.146052 -0.983998 0.102065 + -2.25441 2.49434 -1.34129 0.691931 -0.254839 0.675491 + -2.41966 2.65186 -1.08493 0.812118 -0.190609 0.551482 + -2.44962 2.72882 -0.999425 0.903561 -0.118441 0.411763 + -2.53554 2.49671 -0.9262 0.904866 -0.172492 0.389185 + -2.0451 2.73408 -1.42993 0.523529 -0.337583 0.782276 + -2.29241 2.76992 -1.18981 0.705283 -0.207141 0.677988 + -2.43195 2.81345 -1.02221 0.731419 0.224719 0.643838 + -2.50149 2.68375 -0.894552 0.912299 -0.144821 0.383062 + -2.538 2.62912 -0.825736 0.870357 -0.0740285 0.486825 + -2.11149 2.90972 -1.33014 0.529617 -0.258764 0.807804 + -2.14282 3.05528 -1.26346 0.49627 -0.218821 0.840139 + -2.32373 2.91548 -1.12313 0.587956 0.0175165 0.808703 + -1.92019 3.02836 -1.35684 0.0963612 -0.429583 0.897872 + -1.99462 3.17363 -1.27045 0.107677 -0.521472 0.846447 + -2.09605 3.15024 -1.26755 0.263202 -0.305561 0.915072 + -2.2651 3.05915 -1.17558 0.53726 -0.0839273 0.83923 + -1.76545 3.0591 -1.32967 -0.245598 -0.431619 0.867978 + -1.83988 3.20445 -1.24323 -0.220652 -0.682028 0.697245 + -2.03489 3.3184 -1.1424 0.0322312 -0.624419 0.780424 + -2.13633 3.2951 -1.13945 0.266788 -0.551032 0.790688 + -2.21834 3.15412 -1.17966 0.500302 -0.335962 0.798015 + -1.49485 2.94623 -1.23198 -0.444425 -0.532135 0.720637 + -1.6046 3.09642 -1.22012 -0.511415 -0.617923 0.597181 + -1.69808 3.18616 -1.16996 -0.45118 -0.748657 0.485746 + -1.91688 3.30486 -1.13415 -0.2609 -0.720263 0.642769 + -1.33436 3.02223 -1.09923 -0.30023 -0.772109 0.560098 + -1.45654 3.06137 -1.05041 -0.388008 -0.800663 0.456496 + -1.55002 3.15102 -1.0003 -0.547426 -0.777128 0.310478 + -1.59496 3.20381 -0.955135 -0.634939 -0.727498 0.259998 + -1.77508 3.28657 -1.06087 -0.486594 -0.717848 0.497916 + -1.14172 2.95056 -1.01449 -0.600859 -0.406927 0.688026 + -1.18623 3.02234 -0.981609 -0.408484 -0.830733 0.378184 + -1.30841 3.06147 -0.932784 -0.210476 -0.97115 0.112102 + -1.43413 3.09074 -0.915481 -0.503019 -0.851738 -0.146679 + -1.05152 2.81816 -0.962764 -0.612905 -0.173159 0.77095 + -1.02259 2.92278 -0.922776 -0.601848 -0.392151 0.695699 + -1.06711 2.99456 -0.889893 -0.490929 -0.751292 0.441077 + -1.0743 2.71117 -1.00885 -0.612019 -0.152118 0.776075 + -0.95884 2.696 -0.930375 -0.480876 -0.224871 0.847461 + -0.946305 2.78767 -0.892355 -0.521581 -0.255388 0.814082 + -0.917374 2.89238 -0.852317 -0.647176 -0.384337 0.658368 + -0.953604 2.96515 -0.807556 -0.554282 -0.75766 0.344562 + -0.987146 2.59906 -0.965861 -0.475489 -0.204962 0.855512 + -0.825757 2.68506 -0.875432 -0.369797 -0.28638 0.883876 + -0.813222 2.77682 -0.837363 -0.574381 -0.474245 0.667217 + -0.842561 2.85913 -0.788723 -0.721909 -0.524633 0.451228 + -0.87879 2.93189 -0.743953 -0.691349 -0.722272 0.0189484 + -1.01349 2.5095 -1.00474 -0.475416 -0.298697 0.827502 + -0.849018 2.5959 -0.908795 -0.345662 -0.263008 0.900747 + -0.77694 2.49672 -0.913018 -0.301612 -0.29547 0.906492 + -0.753679 2.58589 -0.879656 -0.486869 -0.271014 0.830367 + -0.732766 2.65292 -0.837963 -0.772046 -0.394459 0.498345 + -0.875364 2.50634 -0.947682 -0.352174 -0.279786 0.893137 + -0.809399 2.42101 -0.952472 -0.269808 -0.318405 0.908747 + -0.776282 2.32164 -0.982164 -0.598309 -0.179432 0.780917 + -0.744195 2.39376 -0.936474 -0.731219 -0.145468 0.666452 + -0.723282 2.4607 -0.894831 -0.7267 -0.123874 0.675694 + -0.845402 2.33448 -0.9884 -0.194417 -0.344254 0.918527 + -0.808741 2.24592 -1.02162 -0.541358 -0.225661 0.809943 + -0.813146 2.15103 -1.02926 -0.914109 0.232175 0.332415 + -0.782328 2.22055 -0.986063 -0.932343 0.232615 0.276813 + -0.879442 2.25536 -1.02896 -0.267778 -0.395307 0.878651 + -0.84533 2.17518 -1.06869 -0.449074 -0.263539 0.853745 + -0.849735 2.0802 -1.07638 -0.883195 0.195516 0.426309 + -0.879369 2.09615 -1.1092 -0.434824 -0.200162 0.877988 + -0.882867 2.01003 -1.11103 -0.862044 0.212673 0.460055 + -0.853651 2.05842 -1.00985 -0.922479 0.384975 0.028763 + -0.914823 2.0173 -1.13822 -0.453696 -0.16657 0.875451 + -0.918321 1.93126 -1.14001 -0.853472 0.214328 0.475026 + -0.886784 1.98825 -1.04451 -0.9117 0.404844 0.0700266 + -0.930002 1.89001 -1.01636 -0.953447 0.300546 0.0247175 + -0.947915 1.85511 -1.16152 -0.872664 0.223746 0.434046 + -0.920811 1.92063 -1.0734 -0.922426 0.382505 0.0531098 + -0.942229 1.8297 -1.0013 -0.994587 0.102947 0.0140837 + -0.944804 1.71646 -0.927156 -0.999425 -0.0305201 -0.0147665 + -0.950406 1.84448 -1.0949 -0.955758 0.275624 0.102749 + -0.940618 1.79502 -1.02983 -0.987349 0.0696285 0.142455 + -0.973888 1.77006 -1.11299 -0.963183 0.21098 0.166631 + -0.9641 1.72068 -1.04788 -0.981482 -0.172416 0.0834631 + -0.901206 1.61571 -1.00085 -0.845823 -0.530761 -0.0536288 + -0.948906 1.69815 -1.06444 -0.78258 0.137988 0.607064 + -0.683858 2.53744 -0.846346 -0.858172 -0.164745 0.48621 + -0.762105 2.73523 -0.789314 -0.726278 -0.478221 0.493786 + -0.683088 2.60532 -0.795705 -0.77092 -0.263774 0.579747 + -0.761334 2.80318 -0.738623 -0.756367 -0.644287 0.113148 + -0.953552 2.97745 -0.695252 -0.356628 -0.71408 -0.602417 + -0.650091 2.67466 -0.739618 -0.919101 -0.389863 -0.0570955 + -0.836096 2.84874 -0.689923 -0.658549 -0.621486 -0.424344 + -1.04074 2.97995 -0.685998 0.0895136 -0.695155 -0.713265 + -1.02738 3.01237 -0.781739 -0.292768 -0.955866 -0.0246249 + -1.14089 3.04178 -0.864075 -0.270503 -0.946077 0.178231 + -0.739713 2.74565 -0.696773 -0.70068 -0.487566 -0.520891 + -0.925718 2.91973 -0.647078 -0.402639 -0.651497 -0.642987 + -1.11119 2.9363 -0.685384 0.323845 -0.433356 -0.841027 + -1.11457 3.01479 -0.772534 0.135978 -0.865108 -0.482802 + -0.779589 2.78279 -0.673504 -0.509753 -0.442289 -0.737924 + -0.996167 2.87607 -0.646464 0.0903809 -0.00983747 -0.995859 + -1.18849 2.88821 -0.697087 0.428702 -0.204449 -0.880009 + -1.23083 2.97775 -0.795581 0.363353 -0.589363 -0.721544 + -0.82651 2.74605 -0.683273 0.0443094 0.0475857 -0.997884 + -1.19572 3.04732 -0.839083 0.082926 -0.901285 -0.425216 + -1.36324 3.06702 -0.907792 -0.154665 -0.833665 -0.530172 + -1.38286 3.03392 -0.869869 -0.260885 -0.545611 -0.796397 + -1.47907 3.14352 -0.870306 -0.666419 -0.700017 -0.256636 + -1.31198 3.01028 -0.86213 0.148443 -0.670087 -0.727288 + -1.3905 3.00163 -0.85515 0.0343783 -0.33501 -0.941587 + -1.68164 3.35355 -0.865289 -0.685426 -0.54663 0.481027 + -1.19064 2.1133 0.362099 -0.418103 -0.373553 -0.828039 + -1.16685 2.11721 0.348321 -0.60143 -0.400633 -0.691213 + -1.18731 2.03749 0.39659 -0.115408 -0.520295 -0.846153 + -1.08955 1.96145 0.43531 -0.461465 -0.678634 -0.571407 + -1.07771 1.88665 0.501859 -0.404213 -0.649958 -0.643558 + -0.895428 1.6969 0.571713 -0.247759 -0.720322 -0.647882 + -0.925082 1.67623 0.632925 -0.404549 -0.767018 -0.498019 + -0.907269 1.77161 0.505114 -0.110171 -0.644206 -0.756875 + -0.765246 1.66905 0.611158 0.342274 -0.476751 -0.809665 + -0.819324 1.64323 0.607476 -0.00636929 -0.705998 -0.708186 + -0.848978 1.62264 0.668739 -0.231957 -0.826573 -0.512809 + -0.676006 1.77051 0.564613 0.418287 -0.677524 -0.604977 + -0.746393 1.71475 0.588597 0.374677 -0.594613 -0.711374 + -0.632869 1.72466 0.683228 0.2201 -0.242516 -0.94485 + -0.667674 1.64144 0.666177 0.168601 0.0796185 -0.982463 + -0.721751 1.61571 0.662546 -0.0557991 -0.603254 -0.795595 + -0.614016 1.77037 0.660667 0.215028 -0.643981 -0.734201 + -0.537044 1.73605 0.661114 -0.466283 -0.187858 -0.864459 + -0.560694 1.66274 0.668891 -0.345965 0.14876 -0.92638 + -0.595499 1.57951 0.651842 -0.089707 0.299817 -0.94977 + -0.609086 1.49934 0.623102 -0.358854 0.284633 -0.888936 + -0.493306 1.79201 0.611783 -0.563764 -0.158282 -0.810627 + -0.470814 1.59102 0.579113 -0.679126 0.00141297 -0.73402 + -0.494464 1.51771 0.586891 -0.523104 0.173738 -0.834372 + -0.523226 1.45056 0.587791 -0.352038 0.295744 -0.888034 + -0.536813 1.37039 0.559051 -0.0712238 0.434175 -0.898008 + -0.474948 1.67246 0.56804 -0.82181 -0.0489156 -0.567658 + -0.403462 1.55309 0.519801 -0.360455 -0.0122598 -0.932696 + -0.399328 1.47156 0.530822 -0.567327 0.0898514 -0.818576 + -0.430158 1.4069 0.519009 -0.425503 0.281932 -0.859919 + -0.45892 1.33984 0.519959 -0.488517 0.273818 -0.828477 + -0.394229 1.62731 0.522845 -0.176745 0.0650789 -0.982103 + -0.293227 1.44316 0.523598 0.0487424 0.282895 -0.957911 + -0.337539 1.38741 0.477964 -0.087005 0.380719 -0.920589 + -0.36837 1.32276 0.46615 -0.23837 0.353237 -0.904656 + -0.404201 1.26275 0.450694 -0.376759 0.322577 -0.86833 + -0.283994 1.51739 0.526643 -0.34297 -0.183991 -0.921151 + -0.18183 1.41074 0.48616 -0.522886 0.0774162 -0.84888 + -0.221171 1.38548 0.495105 -0.176352 0.438397 -0.881311 + -0.265483 1.32973 0.44947 -0.101295 0.515548 -0.850853 + -0.283711 1.28422 0.428496 -0.164203 0.363246 -0.917109 + -0.295824 1.5771 0.490223 -0.781044 -0.294882 -0.550468 + -0.210234 1.5283 0.447544 -0.526203 -0.426964 -0.735399 + -0.198404 1.46867 0.484013 -0.579941 -0.320817 -0.748829 + -0.219905 1.59834 0.419821 -0.525719 -0.339941 -0.779782 + -0.127071 1.56688 0.393913 -0.431722 -0.304748 -0.848967 + -0.124814 1.48874 0.411456 -0.529382 -0.237627 -0.814425 + -0.10824 1.43089 0.413652 -0.531732 -0.145506 -0.834319 + -0.136742 1.63693 0.36619 -0.403456 -0.404359 -0.820803 + -0.067915 1.63866 0.328985 -0.480558 -0.398719 -0.78108 + -0.066978 1.57055 0.359558 -0.463832 -0.329064 -0.822543 + -0.064721 1.49241 0.377102 -0.23782 -0.23073 -0.943507 + -0.069513 1.70727 0.292561 -0.454163 -0.354367 -0.81741 + -0.022973 1.60797 0.312956 -0.27179 -0.415256 -0.868155 + -0.022036 1.53985 0.343528 -0.275752 -0.443021 -0.853049 + -0.022036 1.47459 0.381172 -0.0526471 -0.342582 -0.938012 + -0.071691 1.77956 0.266749 -0.428516 -0.420676 -0.799628 + -0.022973 1.67413 0.279962 -0.241002 -0.389383 -0.888987 + 0.022972 1.67413 0.279957 0.249451 -0.394279 -0.884488 + 0.022972 1.60797 0.312951 0.273966 -0.41155 -0.869235 + 0.022033 1.53986 0.34352 0.211773 -0.401878 -0.890868 + -0.025151 1.74642 0.25415 -0.168328 -0.228454 -0.958892 + 0.025152 1.74642 0.25415 0.195837 -0.179824 -0.964008 + 0.069512 1.70727 0.292556 0.452452 -0.357785 -0.81687 + 0.067914 1.63867 0.32898 0.473636 -0.395008 -0.78717 + 0.066975 1.57056 0.359551 0.478287 -0.302429 -0.824487 + 0.025152 1.82848 0.257614 -0.094793 -0.165363 -0.981667 + 0.071692 1.77956 0.266749 0.267132 -0.321371 -0.908494 + 0.138335 1.70553 0.329772 0.406794 -0.402298 -0.820168 + 0.136737 1.63693 0.366197 0.382705 -0.417345 -0.824233 + 0.127071 1.56688 0.393913 0.444677 -0.326375 -0.834111 + 0.081363 1.84769 0.230549 0.0179551 -0.328724 -0.944255 + 0.145096 1.84073 0.259605 0.451012 -0.366014 -0.814016 + 0.135424 1.7726 0.295804 0.358816 -0.44562 -0.820167 + 0.235816 1.6716 0.395743 0.612861 -0.352643 -0.707138 + 0.2199 1.59834 0.419828 0.528765 -0.346037 -0.775026 + 0.149508 1.91236 0.233325 0.441942 -0.315568 -0.839705 + 0.206375 1.80209 0.327529 0.727398 -0.140786 -0.671618 + 0.232905 1.73867 0.361775 0.624394 -0.258729 -0.737015 + 0.29681 1.71836 0.448149 0.860846 -0.209775 -0.463615 + 0.210787 1.87381 0.301299 0.692924 -0.298311 -0.656404 + 0.263629 1.85203 0.385818 0.838912 -0.128431 -0.528897 + 0.29016 1.78861 0.420064 0.877701 -0.0393647 -0.477589 + 0.230902 1.94743 0.286985 0.689676 -0.308795 -0.654975 + 0.297934 2.00159 0.348771 0.860567 -0.371393 -0.348555 + 0.277819 1.92789 0.363036 0.865623 -0.292029 -0.406712 + 0.317445 1.99815 0.443342 0.910565 -0.26615 -0.316283 + 0.301748 1.91849 0.465723 0.901525 -0.16344 -0.400674 + 0.323077 2.06909 0.320073 0.791825 -0.387351 -0.472199 + 0.368253 2.13837 0.383673 0.838894 -0.499458 -0.216328 + 0.331635 2.07409 0.420611 0.89681 -0.407382 -0.172546 + 0.378705 2.13667 0.481815 0.845794 -0.477248 -0.238469 + 0.393396 2.20586 0.354975 0.708447 -0.591826 -0.384506 + 0.451134 2.24204 0.399915 0.582689 -0.812491 0.0182176 + 0.414515 2.17767 0.436803 0.791461 -0.605465 -0.0836763 + 0.497044 2.29366 0.303292 -0.0509846 -0.944861 -0.32348 + 0.472794 2.23674 0.348895 0.168552 -0.932217 -0.320253 + 0.549107 2.2493 0.375134 0.127075 -0.879058 0.459466 + 0.504507 2.2952 0.434824 0.161504 -0.978919 -0.125037 + 0.468697 2.2542 0.479835 0.351181 -0.809393 -0.470696 + 0.544082 2.27465 0.269227 -0.636557 -0.624973 -0.45189 + 0.587066 2.16372 0.27836 -0.50263 -0.835519 0.221971 + 0.570767 2.244 0.324112 -0.311043 -0.907562 0.282104 + 0.656683 2.21392 0.282416 0.340378 -0.706974 0.619944 + 0.69311 2.17527 0.216759 -0.526058 -0.447447 -0.723224 + 0.634104 2.14471 0.244295 -0.483446 -0.727164 -0.487352 + 0.672982 2.13364 0.236664 0.233829 -0.679581 0.695337 + 0.757834 2.14915 0.186202 -0.484517 -0.697017 -0.528593 + 0.791075 2.16562 0.135865 0.0890415 -0.989088 -0.117375 + 0.764288 2.1663 0.096893 -0.0659463 -0.990531 -0.120415 + 0.83345 2.18638 0.01491 0.788276 -0.607753 -0.0962156 + 0.834047 2.18376 0.093245 0.846173 0.115969 0.520137 + 0.800807 2.16729 0.143582 0.269573 -0.9536 -0.134083 + 0.757834 2.14915 0.186202 0.269567 -0.953602 -0.134076 + 0.729833 2.18652 0.061879 -0.13134 -0.983256 -0.126323 + 0.806663 2.18697 -0.024105 0.225126 -0.968103 -0.109977 + 0.829873 2.21614 -0.096232 0.996469 -0.0440814 -0.0714557 + 0.83047 2.21361 -0.017854 0.998851 -0.0444163 -0.0179958 + 0.800807 2.16729 0.143582 0.583007 0.746251 0.321266 + 0.774961 2.18234 0.16651 0.662776 -0.386191 0.641549 + 0.694818 2.17955 -0.003062 0.0667963 -0.990243 0.122303 + 0.761369 2.179 -0.100709 0.105361 -0.993434 0.0445938 + 0.733426 2.16917 -0.325479 0.836294 -0.526484 -0.153056 + 0.77872 2.17723 -0.248833 0.689654 -0.697818 -0.19346 + 0.726354 2.17204 -0.165652 0.245391 -0.965046 0.0920265 + 0.719845 2.09289 -0.351357 0.623882 -0.756021 0.197997 + 0.690305 2.10063 -0.539561 0.988101 -0.00750337 -0.153625 + 0.680219 2.19795 -0.522923 0.979196 -0.169943 -0.110879 + 0.683856 2.1495 -0.235005 -0.0153914 -0.967276 0.25326 + 0.677348 2.07035 -0.42071 0.267895 -0.841857 0.468519 + 0.676724 2.02426 -0.56549 0.989777 -0.124688 -0.0692404 + 0.675371 2.08841 -0.670391 0.991742 -0.125312 -0.0272947 + 0.642865 2.13821 -0.29785 -0.133497 -0.911534 0.388954 + 0.643619 2.04868 -0.42158 0.113588 -0.714654 0.690194 + 0.670978 1.91222 -0.532224 0.796404 -0.496356 0.3455 + 0.658296 1.88243 -0.635237 0.982107 -0.188133 0.00841582 + 0.664042 1.99448 -0.668502 0.988357 -0.1008 -0.113968 + 0.591543 2.1091 -0.346226 -0.51506 -0.725892 0.455844 + 0.592297 2.01965 -0.469899 -0.665171 -0.505269 0.549773 + 0.63725 1.89055 -0.533104 0.00704404 -0.770106 0.637877 + 0.641212 1.80309 -0.633011 0.956379 -0.199951 0.212975 + 0.558588 2.13478 -0.407112 -0.926325 -0.323327 0.193344 + 0.559973 2.04854 -0.520547 -0.93419 -0.245391 0.258983 + 0.584927 1.90744 -0.569742 -0.741954 -0.471341 0.476804 + 0.641212 1.80309 -0.633011 -0.572073 -0.628236 0.527306 + 0.540315 2.19079 -0.463918 -0.973453 -0.202623 0.106453 + 0.5417 2.10455 -0.577354 -0.984898 -0.144494 0.095384 + 0.552602 1.93633 -0.620381 -0.958182 -0.216193 0.187479 + 0.562467 1.83725 -0.682375 -0.90242 -0.332575 0.27392 + 0.616518 1.72023 -0.715886 -0.614284 -0.476627 0.628874 + 0.519111 2.30785 -0.404672 -0.956811 -0.283568 0.064045 + 0.522905 2.24451 -0.524367 -0.981203 -0.186234 0.050573 + 0.52994 2.16265 -0.639385 -0.991032 -0.12787 0.0387863 + 0.549676 2.00322 -0.681651 -0.994271 -0.105033 0.0198208 + 0.559541 1.90423 -0.743586 -0.991122 -0.131 0.0227111 + 0.515408 2.29635 -0.583968 -0.986721 -0.16194 -0.0125587 + 0.522443 2.21458 -0.698937 -0.993023 -0.106653 0.0502947 + 0.537916 2.06141 -0.743632 -0.98551 -0.14134 0.0937756 + 0.488206 2.41158 -0.525548 -0.976745 -0.193347 -0.0926653 + 0.507184 2.34934 -0.641333 -0.991555 -0.126623 -0.0280074 + 0.513535 2.28095 -0.751484 -0.996295 -0.075932 0.0403803 + 0.519544 2.12001 -0.811529 -0.988874 -0.115325 0.0939528 + 0.489974 2.45804 -0.595221 -0.98003 -0.167869 -0.106592 + 0.501595 2.42327 -0.678391 -0.991855 -0.118328 -0.047128 + 0.510635 2.18637 -0.864076 -0.996516 -0.0549294 0.0627552 + 0.526611 2.02693 -0.872705 -0.983096 -0.139465 0.118621 + 0.452466 2.74238 -0.853301 -0.958588 -0.254863 -0.127098 + 0.389777 3.35025 -1.69156 -0.90702 -0.377863 -0.185833 + 0.350028 3.47889 -1.79577 -0.86164 -0.439859 -0.253183 + 0.357852 3.75867 -2.25577 -0.378537 -0.320033 -0.868498 + 0.323683 3.81663 -2.25415 -0.55997 -0.402122 -0.724384 + 0.356326 3.82647 -2.2622 0.27545 0.00164683 -0.961314 + 0.393062 3.77164 -2.24423 0.48678 0.0899744 -0.868879 + 0.435041 3.67681 -2.2342 0.383895 0.0863823 -0.919327 + 0.399831 3.66393 -2.24569 0.318722 -0.0261144 -0.947488 + 0.287801 3.87879 -2.26543 -0.54885 -0.430104 -0.71678 + 0.320444 3.88863 -2.27347 0.243756 -0.044005 -0.968838 + 0.335666 3.91617 -2.25556 0.685093 0.277404 -0.673569 + 0.3782 3.85375 -2.23826 0.704552 0.273052 -0.655018 + 0.414936 3.79883 -2.22034 0.719672 0.274838 -0.637602 + 0.38479 3.90521 -2.19379 0.80188 0.390519 -0.452198 + 0.429882 3.82916 -2.17526 0.8114 0.380702 -0.443504 + 0.478303 3.72625 -2.16821 0.803247 0.346498 -0.484492 + 0.378568 3.95873 -2.14769 0.829358 0.460048 -0.31705 + 0.42366 3.88259 -2.12921 0.833792 0.440717 -0.332505 + 0.504429 3.73987 -2.11361 0.832936 0.388421 -0.39414 + 0.366002 4.02351 -2.06529 0.824725 0.498538 -0.266999 + 0.398513 3.98461 -2.03812 0.52043 0.513402 -0.682328 + 0.456171 3.84361 -2.1021 0.829315 0.425742 -0.361911 + 0.549484 3.70203 -2.04408 0.750844 0.413037 -0.515395 + 0.564439 3.60092 -2.11415 0.792874 0.379289 -0.476961 + 0.326371 4.14841 -1.97002 0.575364 0.583458 -0.573178 + 0.427696 3.95708 -2.04764 0.452818 0.461964 -0.762591 + 0.501226 3.80578 -2.03256 0.774085 0.369589 -0.514 + 0.355555 4.12096 -1.97949 0.462404 0.559329 -0.687992 + 0.401214 4.07733 -1.95971 0.738456 0.554933 -0.383056 + 0.459072 3.95874 -2.0149 0.701962 0.46593 -0.538664 + 0.532601 3.80743 -1.99983 0.315249 0.148063 -0.937388 + 0.29222 4.25662 -1.87364 0.736924 0.565396 -0.3705 + 0.337879 4.21298 -1.85387 0.726191 0.575107 -0.376695 + 0.46105 4.0245 -1.90301 0.747877 0.561824 -0.353602 + 0.518908 3.90592 -1.95821 0.685419 0.610261 -0.39722 + 0.576484 3.82328 -2.00548 0.305577 0.375593 -0.874958 + 0.238003 4.41405 -1.75872 0.654101 0.523305 -0.546171 + 0.285288 4.38676 -1.73806 0.697759 0.485415 -0.526787 + 0.314373 4.29125 -1.78103 0.863923 0.436556 -0.251108 + 0.406139 4.15745 -1.81468 0.721169 0.569685 -0.394177 + 0.256711 4.55582 -1.64747 0.702959 0.417535 -0.575772 + 0.336983 4.39134 -1.6486 0.775187 0.429336 -0.463416 + 0.366068 4.29584 -1.69158 0.736767 0.496379 -0.45911 + 0.382632 4.23573 -1.74186 0.710506 0.567284 -0.416377 + 0.463537 4.10564 -1.77914 0.777978 0.536105 -0.327629 + 0.194685 4.69612 -1.60488 -0.137093 0.456697 -0.878995 + 0.237949 4.66941 -1.59862 0.621001 0.363116 -0.694625 + 0.310484 4.52313 -1.57026 0.805047 0.380646 -0.454982 + 0.203348 4.79744 -1.55017 0.0744521 0.312668 -0.94694 + 0.246611 4.77073 -1.54392 0.517578 0.212346 -0.828868 + 0.291722 4.63672 -1.52141 0.747856 0.226739 -0.62394 + 0.361952 4.50588 -1.50138 0.717337 0.342523 -0.606716 + 0.175131 4.90577 -1.51101 -0.0329069 0.297754 -0.954075 + 0.231401 4.89724 -1.51704 0.0738258 0.254109 -0.964354 + 0.316543 4.85085 -1.50488 0.308706 0.0200356 -0.950946 + 0.283094 4.78372 -1.51101 0.575219 -0.107421 -0.810915 + 0.328204 4.64963 -1.48855 0.549114 0.0701608 -0.832797 + 0.314181 4.96879 -1.49417 0.124741 0.240233 -0.962667 + 0.399322 4.9224 -1.48201 0.25692 0.0540487 -0.96492 + 0.417531 4.7888 -1.46101 0.345654 -0.139805 -0.927889 + 0.384082 4.72168 -1.46715 0.402205 -0.0750398 -0.912469 + 0.245031 5.10121 -1.44312 0.0210488 0.360268 -0.932611 + 0.378838 5.08096 -1.44984 0.0946743 0.327072 -0.940245 + 0.501443 4.99974 -1.44918 0.250674 0.122408 -0.960301 + 0.473052 4.8423 -1.45428 0.314939 -0.132493 -0.939819 + 0.332854 5.21829 -1.39771 0.10649 0.373271 -0.92159 + 0.45747 5.29863 -1.35106 0.0276865 0.477643 -0.878118 + 0.585074 5.3526 -1.31374 0.106686 0.475025 -0.873481 + 0.506442 5.13492 -1.41252 0.175392 0.308239 -0.935001 + 0.212371 5.21916 -1.39982 0.00301754 0.457123 -0.889398 + 0.229843 5.34087 -1.31843 -0.00131149 0.605226 -0.796053 + 0.36618 5.37449 -1.29245 -0.0418319 0.616756 -0.786042 + 0.490796 5.45483 -1.24581 -0.0808134 0.665567 -0.74195 + 0.058347 5.22547 -1.39355 -0.0082534 0.463639 -0.885986 + 0.075818 5.34727 -1.31211 -0.000853593 0.607026 -0.794681 + 0.221985 5.48645 -1.18898 -0.00177469 0.661158 -0.750245 + 0.358322 5.52015 -1.16295 0.00660434 0.6685 -0.743683 + 0.482726 5.58027 -1.10407 -0.0234419 0.705847 -0.707976 + -0.075818 5.34727 -1.31211 0.00394171 0.604507 -0.79659 + 0.075818 5.48662 -1.19328 0.0115321 0.655618 -0.755005 + 0.072429 5.69616 -1.00801 0.0122119 0.663558 -0.748025 + 0.218596 5.69599 -1.00371 0.0213943 0.668653 -0.743267 + 0.355916 5.71389 -0.98212 0.0243196 0.675759 -0.736721 + -0.075818 5.48662 -1.19328 -0.00852906 0.658008 -0.752962 + -0.072429 5.69616 -1.00801 -0.0113551 0.662747 -0.748757 + 0.072429 5.97501 -0.760987 0.0188381 0.661816 -0.74943 + 0.216766 5.96896 -0.759101 0.0332929 0.663227 -0.747678 + 0.354086 5.98686 -0.737507 0.0320341 0.666046 -0.745223 + -0.221985 5.48645 -1.18898 -0.00105603 0.663519 -0.748159 + -0.218595 5.69599 -1.00371 -0.0222974 0.667812 -0.743996 + -0.072429 5.97501 -0.760987 -0.0179775 0.66265 -0.748714 + 0.069681 6.1512 -0.605952 0.0212353 0.649818 -0.759793 + 0.214018 6.14506 -0.604125 0.0402827 0.658258 -0.751713 + -0.366178 5.37449 -1.29246 0.0466732 0.608305 -0.79233 + -0.35832 5.52015 -1.16296 0.0333867 0.68461 -0.728144 + -0.355915 5.71389 -0.98212 -0.0243469 0.675759 -0.73672 + -0.216766 5.96896 -0.759101 -0.0342174 0.664055 -0.746901 + -0.490794 5.45483 -1.24581 0.0400022 0.650851 -0.758151 + -0.482724 5.58027 -1.10407 0.0180154 0.713899 -0.700017 + -0.480319 5.77401 -0.923245 -0.0259058 0.676964 -0.73556 + -0.354086 5.98686 -0.737507 -0.0319879 0.666052 -0.745219 + -0.214024 6.14514 -0.604066 -0.0427082 0.656454 -0.753156 + -0.585073 5.3526 -1.31374 -0.101309 0.480809 -0.870953 + -0.625152 5.50066 -1.20399 -0.0437619 0.671224 -0.739962 + -0.617082 5.6261 -1.06225 -0.00699847 0.715133 -0.698953 + -0.621968 5.79243 -0.899559 -0.0313346 0.682893 -0.729846 + -0.498003 5.99299 -0.726127 -0.0340916 0.667247 -0.744056 + -0.648565 5.23973 -1.34765 -0.207584 0.314417 -0.92631 + -0.729833 5.37582 -1.27596 -0.176161 0.459542 -0.87051 + -0.769912 5.52379 -1.16626 -0.116869 0.659197 -0.742833 + -0.763907 5.64422 -1.03944 -0.0865878 0.710005 -0.698853 + -0.768794 5.81046 -0.876784 -0.0847802 0.679394 -0.728859 + -0.643552 5.10455 -1.38431 -0.260173 0.191913 -0.946298 + -0.75869 5.15924 -1.34083 -0.280034 0.219362 -0.934592 + -0.790913 5.27267 -1.2991 -0.268294 0.295482 -0.916902 + -0.87218 5.40876 -1.22741 -0.246897 0.452568 -0.856869 + -0.916419 5.52384 -1.13374 -0.242149 0.635748 -0.732932 + -0.693761 4.99564 -1.38867 -0.278328 0.0317936 -0.95996 + -0.808899 5.05033 -1.34519 -0.318793 0.117759 -0.940481 + -0.874585 5.17472 -1.29805 -0.283043 0.22411 -0.932556 + -0.906808 5.28823 -1.25626 -0.291465 0.29207 -0.910903 + -0.739033 4.91135 -1.36187 -0.380542 -0.250171 -0.890282 + -0.834022 4.97093 -1.34046 -0.349652 -0.150342 -0.924738 + -0.897439 5.07519 -1.31066 -0.287299 0.119157 -0.9504 + -1.06721 5.0593 -1.27034 -0.20662 0.178672 -0.961969 + -1.04436 5.15892 -1.25768 -0.262494 0.256333 -0.930263 + -0.753886 4.85831 -1.3304 -0.518264 -0.445583 -0.729971 + -0.848875 4.91789 -1.309 -0.381662 -0.546568 -0.745384 + -0.935001 4.94725 -1.30045 -0.250948 -0.435305 -0.864601 + -0.922562 4.99579 -1.30592 -0.275955 0.0117628 -0.961099 + -0.707743 4.71343 -1.26267 -0.754112 -0.523825 -0.396135 + -0.778492 4.80821 -1.25762 -0.64273 -0.597651 -0.479281 + -0.858119 4.86914 -1.24797 -0.464162 -0.728206 -0.504251 + -0.705095 4.67604 -1.1633 -0.743944 -0.564044 -0.358332 + -0.778795 4.75395 -1.16045 -0.63737 -0.635574 -0.435665 + -0.858422 4.81498 -1.15075 -0.529484 -0.706651 -0.469351 + -0.946564 4.86002 -1.13477 -0.283752 -0.834323 -0.472642 + -0.944245 4.89859 -1.23938 -0.233714 -0.834893 -0.498328 + -0.68488 4.37231 -0.931225 -0.920786 -0.226122 -0.31784 + -0.713711 4.4393 -0.891461 -0.81785 -0.409644 -0.40412 + -0.787411 4.51721 -0.888613 -0.715847 -0.531571 -0.452764 + -0.840733 4.59343 -0.868419 -0.660605 -0.603681 -0.446284 + -0.735201 3.93699 -0.506827 -0.952922 0.0327594 -0.301441 + -0.764032 4.00398 -0.467072 -0.944732 -0.0579927 -0.322673 + -0.773668 4.10225 -0.429669 -0.892892 -0.220631 -0.392511 + -0.826991 4.17847 -0.409485 -0.848911 -0.359368 -0.387562 + -0.866016 3.63627 -0.323968 -0.515665 0.355658 -0.779485 + -0.859066 3.69351 -0.289117 -0.590769 0.434929 -0.67958 + -0.839342 3.77394 -0.251423 -0.670237 0.351858 -0.653436 + -0.848979 3.8722 -0.21402 -0.626161 0.265036 -0.733266 + -0.828354 3.58281 -0.357777 -0.719455 0.350056 -0.599871 + -0.973384 3.56342 -0.355589 0.229455 0.551609 -0.801921 + -1.05349 3.68378 -0.282855 0.311257 0.603251 -0.734308 + -1.03377 3.76411 -0.245203 -0.0755589 0.395936 -0.915164 + -0.935722 3.50996 -0.389398 -0.0210866 0.595645 -0.802971 + -0.986107 3.44005 -0.448314 0.224153 0.608274 -0.761419 + -1.26445 3.5853 -0.576089 0.596143 0.344512 -0.725207 + -1.25245 3.70489 -0.517631 0.646656 0.477446 -0.594879 + -1.32135 3.47721 -0.677476 0.552852 0.389911 -0.736427 + -1.77462 3.94002 -0.880283 0.564184 0.175329 -0.806818 + -1.76261 4.05962 -0.821833 0.608472 0.144961 -0.780223 + -1.73801 4.16008 -0.797641 0.67549 0.120899 -0.72739 + -1.33256 3.82517 -0.444947 0.69554 0.437485 -0.569939 + -1.09483 3.2719 -0.671261 0.0498391 0.926215 -0.373688 + -1.34655 3.34276 -0.768394 0.487895 0.648745 -0.584027 + -1.74741 3.72033 -0.871373 0.512495 0.196337 -0.835943 + -1.99585 3.86673 -1.01114 0.535749 0.141729 -0.832397 + -2.02305 4.08633 -1.0201 0.705316 -0.031425 -0.708196 + -1.41999 3.30677 -0.932065 0.451377 0.807032 -0.380733 + -1.77261 3.58579 -0.962341 0.541556 0.459701 -0.703841 + -1.97489 3.67645 -1.06076 0.563931 0.390834 -0.727483 + -2.05102 3.88745 -1.04243 0.414272 0.14586 -0.898389 + -1.41563 3.25271 -1.08502 0.203698 0.977548 -0.0539174 + -1.74752 3.40461 -1.07452 0.484354 0.706031 -0.516644 + -1.9498 3.49535 -1.17289 0.620114 0.63803 -0.456482 + -2.03006 3.69726 -1.092 0.419035 0.403192 -0.813539 + -1.43534 3.28172 -1.26488 0.122931 0.985309 0.118547 + -1.74317 3.35054 -1.22748 0.350866 0.931439 -0.0965076 + -1.90418 3.40747 -1.31688 0.490889 0.868698 -0.0662685 + -1.99278 3.52588 -1.20576 0.477286 0.704185 -0.525662 + -1.39002 3.28857 -1.38414 0.0142937 0.966325 0.256926 + -1.68608 3.35453 -1.39578 0.238921 0.963974 0.11692 + -1.84709 3.41146 -1.48519 0.379312 0.912703 0.151973 + -1.94716 3.43808 -1.3497 0.401155 0.905302 -0.139654 + -1.23927 3.29413 -1.31657 -0.307173 0.932089 0.191976 + -1.34359 3.3214 -1.449 -0.0746816 0.97037 0.229792 + -1.64076 3.36138 -1.51505 0.238689 0.970394 0.0369177 + -1.76269 3.39842 -1.608 0.378296 0.915542 0.136654 + -1.19284 3.32696 -1.38142 -0.497938 0.817225 0.290175 + -1.27698 3.33323 -1.50369 -0.379465 0.771364 0.510885 + -1.15402 3.36187 -1.3727 -0.562822 0.788342 0.248492 + -1.23816 3.36814 -1.49496 -0.420223 0.846644 0.326506 + -2.03674 3.52417 -1.2188 -0.20668 0.680349 -0.703142 + -2.07403 3.69546 -1.10509 -0.133465 0.406055 -0.90405 + -2.10814 3.70056 -1.08372 -0.352327 0.320457 -0.879303 + -2.12779 3.92912 -1.0268 -0.48189 0.0725509 -0.873223 + -2.09368 3.92411 -1.04812 -0.217651 0.0481205 -0.97484 + -2.04662 4.10856 -1.05841 0.496568 -0.0961534 -0.862655 + -2.15277 3.49152 -1.19185 -0.22057 0.530183 -0.818691 + -2.17767 3.69811 -1.06748 -0.0261827 0.395142 -0.918247 + -2.1757 3.92894 -1.00148 -0.214309 0.168308 -0.962156 + -2.14407 4.18355 -1.03649 -0.495373 -0.0225646 -0.868387 + -2.08927 4.14522 -1.0641 -0.251775 -0.0967016 -0.962943 + -2.26781 3.48799 -1.15554 -0.433034 0.399989 -0.807769 + -2.25717 3.7201 -1.07276 -0.214088 0.338873 -0.91615 + -2.2552 3.95093 -1.00678 -0.348059 0.285967 -0.892792 + -2.21741 4.1759 -0.951634 -0.817518 0.18664 -0.544821 + -2.19198 4.18327 -1.01121 -0.747521 0.0392026 -0.66308 + -2.32413 3.3409 -1.18198 -0.938841 0.218272 -0.266337 + -2.31998 3.49107 -1.12188 -0.882703 0.171152 -0.437655 + -2.30934 3.72318 -1.0391 -0.768542 0.237593 -0.594048 + -2.28632 3.94674 -0.972512 -0.850108 0.265913 -0.45454 + -2.33304 3.25212 -1.1848 -0.986146 0.0807105 0.144923 + -2.31988 3.32512 -1.13384 -0.988285 -0.00159184 0.152614 + -2.31574 3.47529 -1.07374 -0.86991 -0.154588 0.468359 + -2.32832 3.70336 -0.997166 -0.954095 -0.0450388 0.296099 + -2.30531 3.92699 -0.930517 -0.974764 0.122282 0.186768 + -2.34921 3.16953 -1.20275 -0.971452 0.0462548 0.232685 + -2.3288 3.19885 -1.17333 -0.915978 0.0124456 0.401035 + -2.31564 3.27193 -1.12231 -0.667049 -0.196994 0.718498 + -2.27542 3.46653 -1.04677 -0.276034 -0.323147 0.905197 + -2.28801 3.69459 -0.970183 -0.42858 -0.27725 0.859914 + -2.34791 3.10641 -1.19963 -0.754527 0.288436 0.589486 + -2.3275 3.13582 -1.17016 -0.693225 0.0636203 0.717908 + -2.30229 3.14979 -1.15956 -0.459799 -0.0169939 0.887861 + -2.26361 3.19658 -1.1378 0.108022 -0.319313 0.941473 + -2.27696 3.31872 -1.10056 -0.0500991 -0.323178 0.945011 + -2.37953 3.0253 -1.16654 -0.441648 0.523007 0.72898 + -2.34848 3.02759 -1.15571 -0.466432 0.427424 0.774435 + -2.32327 3.04155 -1.14509 -0.037935 0.189986 0.981054 + -2.1816 3.33755 -1.09758 0.132213 -0.416153 0.899631 + -2.42194 2.92441 -1.12279 -0.0872067 0.584255 0.806871 + -2.39088 2.92679 -1.11191 -0.244572 0.547449 0.800302 + -2.3819 2.89788 -1.09264 0.18471 0.505911 0.842577 + -2.51375 2.87948 -1.06177 -0.497057 0.85052 0.171903 + -2.46684 2.86717 -1.05965 0.204828 0.729196 0.652931 + -2.44093 2.84227 -1.04153 0.239355 0.672351 0.700466 + -2.55656 2.85204 -0.988248 -0.341542 0.926441 0.158288 + -2.51101 2.82575 -0.98151 0.345405 0.755607 0.556554 + -2.48511 2.80086 -0.963391 0.302031 0.775501 0.554414 + -2.48381 2.76838 -0.917348 0.708668 0.414782 0.570742 + -2.63086 2.78461 -0.927457 -0.806476 0.566714 -0.168617 + -2.59755 2.8118 -0.900746 -0.18606 0.933011 0.308013 + -2.55199 2.7856 -0.893959 0.430014 0.725366 0.537524 + -2.52567 2.7659 -0.891038 0.370613 0.735319 0.567407 + -2.52438 2.73342 -0.844986 0.64503 0.432435 0.630028 + -2.66066 2.74987 -0.83028 -0.82744 0.561399 0.0132083 + -2.62735 2.77706 -0.803569 -0.0493439 0.873465 0.484379 + -2.60067 2.72773 -0.789934 0.531507 0.589788 0.607988 + -2.57435 2.70811 -0.786954 0.64034 0.39903 0.656308 + -2.58797 2.60381 -0.767704 0.834478 0.0537793 0.548411 + -2.72259 2.56669 -0.860208 -0.956183 0.231627 -0.179062 + -2.69296 2.68907 -0.747364 -0.889107 0.457443 -0.0153327 + -2.67426 2.71354 -0.70516 -0.838971 0.541086 0.0579133 + -2.74137 2.56587 -0.553589 -0.880493 0.457054 0.125831 + -2.76006 2.54148 -0.595733 -0.936866 0.349607 0.00749561 + -2.79322 2.40892 -0.417933 -0.938189 0.337526 0.076671 + -2.77823 2.47099 -0.568038 -0.987795 0.139993 -0.0682804 + -2.77526 2.41856 -0.604634 -0.952243 -0.234386 -0.195694 + -2.79025 2.35658 -0.454487 -0.94422 -0.283216 -0.16804 + -2.79322 2.40892 -0.417933 -0.994755 -0.0682202 -0.0762121 + -2.7775 2.26562 -0.336527 -0.835773 -0.475701 -0.274212 + -2.80481 2.30012 -0.301482 -0.875531 -0.403008 -0.266514 + -2.75386 2.42636 -0.691736 -0.900818 -0.381683 -0.206991 + -2.7346 2.37815 -0.659845 -0.715397 -0.677388 -0.171325 + -2.75601 2.37036 -0.572744 -0.677809 -0.67288 -0.296322 + -2.7551 2.32544 -0.485146 -0.630155 -0.673156 -0.386995 + -2.73235 2.41021 -0.791162 -0.935062 -0.318862 -0.154873 + -2.71751 2.37223 -0.759195 -0.751532 -0.656511 -0.0647519 + -2.69972 2.35576 -0.656064 -0.34996 -0.931197 -0.101984 + -2.69724 2.3427 -0.584036 -0.326262 -0.894569 -0.305449 + -2.69634 2.29778 -0.49643 -0.379151 -0.778764 -0.499771 + -2.68263 2.34984 -0.755413 -0.31506 -0.946747 0.0663902 + -2.65726 2.35028 -0.663776 0.0794665 -0.994686 -0.0654554 + -2.65478 2.33722 -0.591748 0.131387 -0.942476 -0.307371 + -2.65599 2.29595 -0.515472 0.0694266 -0.82843 -0.555773 + -2.61197 2.36466 -0.665269 0.863419 -0.495081 0.0969687 + -2.6308 2.34821 -0.587988 0.891864 -0.44596 -0.0754884 + -2.63201 2.30695 -0.511721 0.664362 -0.626642 -0.407362 + -2.64478 2.22857 -0.436561 -0.115513 -0.725978 -0.677948 + -2.68512 2.23031 -0.417578 -0.422456 -0.720006 -0.550566 + -2.62188 2.43396 -0.655106 0.915079 0.129608 0.38188 + -2.64071 2.41751 -0.577825 0.838624 0.42812 0.336785 + -2.62464 2.29899 -0.474341 0.965654 0.235955 0.108801 + -2.62827 2.23067 -0.436606 0.624547 -0.494214 -0.604726 + -2.57719 2.45282 -0.751176 0.950076 -0.121724 0.287295 + -2.63265 2.58495 -0.671634 0.792221 0.187362 0.580759 + -2.72643 2.48661 -0.533697 0.706814 0.384221 0.593959 + -2.75702 2.40792 -0.417813 0.326771 0.734124 0.595216 + -2.6713 2.33883 -0.461941 0.66829 0.595627 0.445665 + -2.64759 2.66422 -0.691526 0.617413 0.408156 0.672465 + -2.74137 2.56587 -0.553589 0.678726 0.311166 0.665212 + -2.79322 2.40892 -0.417933 0.730069 0.292584 0.617571 + -2.67426 2.71354 -0.70516 0.585618 0.494254 0.642468 + -2.79322 2.40892 -0.417933 0.0190187 0.771061 0.636477 + -2.76861 2.29912 -0.301354 0.184847 0.822265 0.538249 + -2.67835 2.27482 -0.324272 0.509222 0.781928 0.359558 + -2.63169 2.23507 -0.336622 0.773302 0.630507 0.066812 + -2.6209 2.22272 -0.399226 0.922044 0.387 0.00812664 + -2.80481 2.30012 -0.301482 0.0150156 0.836221 0.548187 + -2.7715 2.24308 -0.168698 0.0686574 0.941178 0.330863 + -2.68124 2.21887 -0.191567 0.252826 0.926529 0.27861 + -2.78894 2.21716 -0.116009 -0.974741 0.183439 0.127398 + -2.75434 2.21575 -0.014957 -0.119126 0.968143 0.220248 + -2.68391 2.19877 -0.072337 0.281741 0.943273 0.175662 + -2.57417 2.17654 -0.070437 0.116701 0.976384 0.181812 + -2.77177 2.18983 0.037742 -0.897126 0.328558 0.295322 + -2.74515 2.15659 0.136712 -0.87528 0.266124 0.40381 + -2.72403 2.18317 0.102277 -0.0532834 0.948269 0.312964 + -2.65361 2.16627 0.044948 0.275911 0.940453 0.198549 + -2.56437 2.16259 -0.001088 0.107395 0.964623 0.240768 + -2.71866 2.09769 0.054926 -0.847469 -0.529968 0.0304928 + -2.69974 2.11281 0.241532 -0.931868 0.263087 0.249814 + -2.67862 2.13939 0.207101 -0.129672 0.955035 0.266634 + -2.59974 2.13291 0.120721 0.151966 0.981231 0.11871 + -2.77295 2.19257 -0.167609 -0.871961 -0.47949 -0.0988584 + -2.74563 2.15807 -0.202654 -0.779736 -0.586112 -0.220195 + -2.70354 2.14469 -0.271672 -0.605016 -0.69265 -0.392673 + -2.64631 2.14052 -0.322056 -0.461534 -0.735068 -0.49665 + -2.62056 2.15769 -0.36899 -0.20352 -0.722511 -0.660725 + -2.74235 2.23447 -0.367186 -0.644679 -0.653046 -0.397391 + -2.60405 2.15979 -0.369034 0.495254 -0.455903 -0.739511 + -2.66377 2.05986 0.383058 -0.862399 -0.504179 0.0455193 + -2.68075 2.1021 0.367288 -0.98935 0.0869814 0.116705 + -2.65377 2.14535 0.367786 -0.625829 0.779616 -0.0231731 + -2.63115 2.14083 0.289608 -0.263948 0.955437 -0.132179 + -2.65958 2.04483 0.483687 -0.902284 -0.425122 -0.0718033 + -2.66952 2.10925 0.515707 -0.970708 0.234125 0.0539545 + -2.64254 2.15241 0.516154 -0.753836 0.65417 -0.0615804 + -2.54722 2.20302 0.444684 -0.44355 0.878741 -0.176288 + -2.52459 2.1986 0.366555 -0.328891 0.92046 -0.211148 + -2.59455 1.97362 0.497629 -0.62556 -0.767548 -0.139802 + -2.66026 2.01101 0.590262 -0.915908 -0.309181 -0.255968 + -2.6702 2.07543 0.622282 -0.99197 0.016934 -0.125338 + -2.64937 2.17764 0.618454 -0.823647 0.470607 -0.316441 + -2.44827 1.85895 0.591642 -0.425711 -0.871234 -0.24438 + -2.59276 1.95846 0.561489 -0.547416 -0.780403 -0.30217 + -2.64805 1.97062 0.596026 -0.673337 -0.516994 -0.52852 + -2.68163 1.94816 0.724126 -0.947784 -0.158946 -0.27648 + -2.40772 1.82859 0.626028 -0.309207 -0.916334 -0.254408 + -2.56371 1.90541 0.638774 -0.421108 -0.815377 -0.397277 + -2.619 1.91757 0.673311 -0.408098 -0.789303 -0.458755 + -2.66943 1.90768 0.72984 -0.835491 -0.540317 -0.100059 + -2.43108 1.83731 0.699726 -0.285353 -0.920983 -0.265262 + -2.52315 1.87505 0.673161 -0.311142 -0.876903 -0.366377 + -2.58025 1.85702 0.72798 -0.337728 -0.737034 -0.585424 + -2.63068 1.84713 0.784507 -0.467577 -0.587057 -0.66086 + -2.35111 1.81048 0.712186 -0.226399 -0.936499 -0.267794 + -2.48818 1.81928 0.754544 -0.155314 -0.723602 -0.672516 + -2.58267 1.73848 0.824504 -0.27478 -0.546245 -0.791273 + -2.62966 1.70621 0.870192 -0.482056 -0.492275 -0.724767 + -2.67768 1.81487 0.830195 -0.561067 -0.484789 -0.670957 + -2.24022 1.7703 0.672387 -0.216768 -0.97406 0.0649485 + -2.25326 1.7895 0.740333 -0.0978414 -0.986684 -0.129931 + -2.32032 1.74681 0.80888 0.0655626 -0.739591 -0.669855 + -2.41817 1.76788 0.780783 -0.0811627 -0.701237 -0.708293 + -2.23005 1.77135 0.598375 -0.39503 -0.914604 0.0863156 + -2.16063 1.76303 0.711379 -0.179924 -0.950519 0.253259 + -2.17367 1.78214 0.779274 0.0584101 -0.993014 -0.102523 + -2.23175 1.7483 0.824294 0.202526 -0.806138 -0.55599 + -2.18945 1.73318 0.523476 -0.468713 -0.850047 0.240265 + -2.16828 1.73679 0.612622 -0.375291 -0.901582 0.215189 + -2.11071 1.74814 0.693367 -0.186954 -0.927475 0.323787 + -2.07002 1.79113 0.816904 -0.136102 -0.976311 -0.168207 + -2.1281 1.7572 0.861874 0.191651 -0.750324 -0.63268 + -1.96398 1.75787 0.800715 -0.61827 -0.765524 -0.178085 + -2.0201 1.77624 0.798892 -0.299101 -0.953547 0.0358793 + -2.07482 1.75424 0.87501 -0.0678023 -0.603834 -0.794221 + -2.39266 1.62727 0.890711 0.178703 -0.409148 -0.894798 + -2.48123 1.62578 0.875297 -0.0509209 -0.564103 -0.824133 + -1.92184 1.71138 0.78204 -0.919863 -0.383005 -0.0846055 + -2.0322 1.70732 0.876675 -0.371098 0.230403 -0.899556 + -2.0187 1.73586 0.876834 -0.549696 -0.251992 -0.796451 + -2.33938 1.62431 0.903847 0.0807427 -0.234473 -0.968764 + -2.35287 1.59576 0.903688 -0.0285176 -0.0623737 -0.997645 + -1.95162 1.54327 0.695609 -0.893541 0.362483 -0.264936 + -1.93684 1.67183 0.814342 -0.742547 0.171886 -0.647363 + -2.1287 1.64025 0.874234 -0.273124 0.369562 -0.888159 + -1.99576 1.4709 0.701758 -0.629161 0.535672 -0.563215 + -2.03334 1.60485 0.811951 -0.363201 0.503872 -0.783708 + -2.09902 1.5652 0.821238 -0.367398 0.493523 -0.788324 + -2.22983 1.57812 0.886249 -0.261304 0.298129 -0.918063 + -2.00568 1.3866 0.610768 -0.776792 0.47007 -0.41908 + -2.10772 1.36445 0.683333 -0.383125 0.545403 -0.745487 + -2.06144 1.43125 0.711045 -0.395991 0.556382 -0.7305 + -2.1753 1.4964 0.804189 -0.355822 0.535242 -0.766099 + -2.30612 1.50933 0.869199 -0.425902 0.407795 -0.807658 + -2.01091 1.34499 0.547637 -0.82101 0.187108 -0.539382 + -2.04117 1.26221 0.547429 -0.823187 0.0125159 -0.567633 + -2.03594 1.30382 0.610558 -0.706906 0.399197 -0.583889 + -1.99104 1.3952 0.534271 -0.362261 -0.0715226 -0.929329 + -1.9796 1.30111 0.52765 -0.0896282 0.0114549 -0.995909 + -1.96357 1.2312 0.53693 0.0409232 -0.119397 -0.992003 + -2.03364 1.17372 0.55069 -0.275874 0.116181 -0.954146 + -1.93628 1.39256 0.520656 -0.356412 -0.348423 -0.866932 + -1.84257 1.26513 0.553172 -0.0791193 -0.224305 -0.971302 + -1.82655 1.19522 0.562451 0.213439 -0.479395 -0.851249 + -1.87035 1.14444 0.593405 0.422897 -0.30261 -0.854158 + -1.95604 1.14272 0.540192 0.24263 -0.00450295 -0.970108 + -1.9422 1.42049 0.512666 -0.241462 0.0906465 -0.966167 + -1.76075 1.29119 0.47323 -0.475316 -0.348325 -0.807926 + -1.78781 1.26248 0.539557 -0.424987 -0.579908 -0.695048 + -1.75005 1.18048 0.619175 0.229811 -0.875825 -0.424403 + -1.96852 1.46025 0.532603 0.279973 0.455906 -0.844846 + -1.81121 1.37251 0.505971 0.110625 0.597934 -0.793875 + -1.76668 1.31913 0.465241 -0.110583 0.0740392 -0.991105 + -1.73453 1.32555 0.469519 -0.598576 -0.0676313 -0.798206 + -1.69201 1.22698 0.438445 -0.849049 -0.159216 -0.503752 + -1.83753 1.41219 0.525857 0.0165979 0.379719 -0.924953 + -1.77906 1.37893 0.510249 -0.454201 0.20119 -0.867885 + -1.77486 1.40457 0.487045 -0.498039 0.350622 -0.793109 + -1.6956 1.2825 0.425286 -0.827926 -0.190966 -0.527323 + -1.66144 1.21731 0.386586 -0.829269 0.00101613 -0.558849 + -1.66855 1.1534 0.384091 -0.927191 -0.0580284 -0.370067 + -1.71907 1.19827 0.504771 -0.799903 -0.540106 -0.261613 + -1.73841 1.37974 0.466652 0.0308051 0.628342 -0.777327 + -1.6236 1.20702 0.333423 -0.510988 0.289906 -0.809225 + -1.58944 1.14192 0.294773 -0.959969 -0.236139 -0.150657 + -1.63799 1.14373 0.332232 -0.71601 0.258553 -0.648444 + -1.72334 1.39731 0.482822 -0.304943 0.269619 -0.913409 + -1.55 1.18402 0.345047 0.372253 0.60795 -0.701302 + -1.58715 1.1821 0.312979 0.214456 0.648658 -0.730241 + -1.54797 1.02022 0.202565 -0.230462 0.523247 -0.820427 + -1.76554 1.46641 0.498735 -0.467581 -0.105256 -0.877661 + -1.52648 1.25231 0.376564 0.193148 0.279237 -0.940596 + -1.53493 1.20159 0.361217 0.208956 0.424488 -0.880992 + -1.47932 1.00796 0.269591 0.943581 -0.0354123 0.329243 + -1.47344 1.01536 0.236374 0.884015 0.398156 -0.244927 + -1.56869 1.32141 0.392476 -0.483494 -0.419662 -0.768191 + -1.46161 1.25622 0.403406 0.33007 0.398658 -0.855643 + -2.17596 1.71816 0.505099 -0.263738 -0.0843385 -0.9609 + -1.54797 1.02022 0.202565 -0.521385 -0.621049 0.585197 + -1.46161 1.25622 0.403406 -0.349121 -0.681257 -0.643431 + -1.59651 1.02203 0.240025 -0.671117 0.289821 -0.682353 + -1.61359 1.00509 0.256167 -0.914185 0.0015515 -0.405295 + -1.67449 1.15068 0.422399 -0.893056 -0.436931 -0.107439 + -1.50234 0.79014 0.055474 -0.353134 0.453329 -0.818406 + -1.51852 0.785997 0.06025 -0.57868 0.344038 -0.739437 + -1.53559 0.768969 0.076342 -0.833049 0.124216 -0.539072 + -1.61953 1.00237 0.294474 -0.954233 -0.297303 -0.0324203 + -1.51479 0.962226 0.156811 0.157683 0.565378 -0.809619 + -1.46917 0.732146 0.009719 0.122346 0.494524 -0.86051 + -1.46578 0.650271 -0.032268 0.197986 -0.209541 -0.957546 + -1.48196 0.646043 -0.027542 -0.427993 -0.309191 -0.849249 + -1.54581 0.757617 0.093804 -0.960131 -0.201784 -0.193471 + -1.51058 1.01353 0.204357 0.382254 0.59817 -0.704326 + -1.4571 0.731029 0.019659 0.786894 0.350643 -0.507787 + -1.45372 0.649152 -0.02233 0.65373 -0.308235 -0.691106 + -1.49218 0.634691 -0.010081 -0.609276 -0.697937 -0.376386 + -1.54175 0.759102 0.133231 -0.736178 -0.58669 0.337397 + -1.44014 0.777232 0.086428 0.965795 0.207333 -0.155736 + -1.45289 0.782328 0.067205 0.737273 0.43294 -0.518644 + -1.44451 0.644244 -0.008829 0.693537 -0.376036 -0.614495 + -1.48298 0.629783 0.00342 -0.32377 -0.946123 0.00487623 + -1.44603 0.769833 0.119646 0.78951 -0.28675 0.542631 + -1.43177 0.639149 0.010395 0.876247 -0.479596 -0.0466862 + -1.46019 0.624934 0.016618 0.112789 -0.969363 0.218207 + -1.51896 0.754167 0.14638 -0.162587 -0.788857 0.59268 + -1.47445 0.755618 0.125869 0.437179 -0.55398 0.708506 + -1.52288 0.986717 0.329392 0.770085 -0.334956 0.542931 + -1.5559 1.0049 0.38149 0.696801 -0.40086 0.594794 + -1.50747 0.773805 0.177967 0.216367 -0.70042 0.680145 + -1.48532 1.13277 0.359413 0.993469 0.0522243 -0.101446 + -1.52888 1.11144 0.419164 0.790188 -0.492035 0.365383 + -1.55706 1.1107 0.472043 0.537579 -0.644801 0.54336 + -1.59401 1.11498 0.500825 0.536835 -0.562131 0.62914 + -1.58579 1.01846 0.423404 0.193689 -0.684936 0.702387 + -1.47688 1.18341 0.374709 0.864777 0.066944 -0.497674 + -1.48993 1.15558 0.452516 0.820847 -0.554378 0.137388 + -1.51811 1.15484 0.505396 0.488966 -0.785006 0.380365 + -1.58083 1.16838 0.550743 0.217533 -0.881851 0.418353 + -1.61778 1.17257 0.579474 0.16423 -0.937898 0.305574 + -1.48452 1.20507 0.546602 0.923418 -0.323581 0.206383 + -1.51974 1.17783 0.595377 0.475071 -0.84225 0.254797 + -1.58246 1.19137 0.640725 0.24207 -0.97019 -0.0115609 + -1.61781 1.15953 0.666276 0.117909 -0.964051 -0.238124 + -1.46161 1.25622 0.403406 0.182702 -0.934433 -0.305706 + -2.22158 1.4297 0.776526 -0.399677 0.576859 -0.712385 + -2.3626 1.4335 0.884137 -0.499741 0.383233 -0.776783 + -2.51607 1.4707 0.967903 -0.314174 -0.156043 -0.936453 + -2.18905 1.30173 0.668175 -0.377341 0.480985 -0.79137 + -2.29883 1.35653 0.762461 -0.457124 0.527599 -0.716015 + -2.43985 1.36033 0.870072 -0.679531 0.528154 -0.509207 + -2.55795 1.29515 1.00677 -0.777668 -0.0362123 -0.627631 + -2.57256 1.39479 0.98279 -0.468191 -0.191573 -0.86261 + -2.11727 1.24109 0.5954 -0.375559 0.364049 -0.852305 + -2.13899 1.16138 0.587867 -0.405973 0.198356 -0.892099 + -2.24957 1.22143 0.65906 -0.461721 0.312796 -0.830044 + -2.35935 1.27623 0.753346 -0.568282 0.37039 -0.734756 + -2.45962 1.2704 0.860231 -0.758861 0.275312 -0.590197 + -2.05536 1.09401 0.543158 -0.24911 0.0975772 -0.963547 + -2.03337 1.0074 0.527763 -0.112446 0.228181 -0.967103 + -2.17506 1.07656 0.587571 -0.391157 0.198376 -0.89869 + -2.28565 1.13661 0.658765 -0.483454 0.248239 -0.839434 + -1.95709 1.06466 0.54279 0.280709 0.104229 -0.954117 + -1.9351 0.978054 0.527395 0.359277 0.250944 -0.898859 + -2.02185 0.925852 0.501813 -0.026173 0.362291 -0.931698 + -2.16355 0.995014 0.561621 -0.30587 0.316225 -0.898023 + -1.87139 1.06639 0.596003 0.608294 0.0443129 -0.792474 + -1.86447 0.985962 0.583301 0.638048 0.223832 -0.736746 + -1.84667 0.90357 0.570806 0.69828 0.0693767 -0.712455 + -1.9173 0.895663 0.514903 0.473333 0.342722 -0.811478 + -1.9978 0.845877 0.461334 0.0371751 0.462423 -0.88588 + -1.79385 1.1297 0.650129 0.586702 -0.485353 -0.648239 + -1.80259 1.06251 0.667518 0.768497 -0.0722046 -0.635767 + -1.79567 0.982171 0.654866 0.808225 0.144551 -0.570857 + -1.78401 0.905763 0.660809 0.837957 0.0601161 -0.542415 + -1.8293 0.835938 0.596148 0.817203 0.0901419 -0.569258 + -1.73359 1.12172 0.728554 0.495678 -0.494808 -0.713771 + -1.74233 1.05453 0.745943 0.680259 -0.162053 -0.714833 + -1.7404 0.972385 0.752615 0.761869 0.0278333 -0.647133 + -1.72873 0.895891 0.758508 0.806428 0.0939876 -0.583815 + -1.72804 1.18235 0.68035 0.285053 -0.847523 -0.447716 + -1.6787 1.12832 0.732518 0.160881 -0.579655 -0.798822 + -1.68426 1.0677 0.780721 -0.0431545 -0.437108 -0.898373 + -1.67503 0.993074 0.804182 0.151432 -0.226414 -0.962187 + -1.67309 0.910845 0.810805 0.535372 -0.088663 -0.83995 + -1.71513 1.18513 0.556936 -0.568156 -0.821054 -0.0554042 + -1.69311 1.18699 0.618111 -0.135757 -0.989895 0.0409699 + -1.66467 1.16989 0.715122 0.133919 -0.807543 -0.574404 + -1.62616 1.00956 0.800619 0.743316 -0.0441051 -0.667485 + -1.60738 0.938321 0.794815 0.196255 -0.0880708 -0.97659 + -1.67055 1.13745 0.474514 -0.813186 -0.578851 0.0604995 + -1.65237 1.13251 0.532479 -0.526637 -0.776519 0.345934 + -1.6239 1.12854 0.542738 0.18189 -0.757081 0.627491 + -1.66465 1.18294 0.628321 -0.202455 -0.976883 0.0686345 + -1.61546 1.00377 0.333852 -0.881271 -0.444839 0.159623 + -1.59728 0.998827 0.391816 -0.626495 -0.653323 0.425057 + -1.61213 1.05113 0.783223 0.555339 -0.294414 -0.777765 + -1.5683 0.988202 0.841219 0.547399 0.0488385 -0.835445 + -1.5629 0.938744 0.837082 0.558675 0.180516 -0.809504 + -1.54412 0.867502 0.831277 0.432244 -0.111071 -0.89489 + -1.59815 0.863693 0.818274 -0.21058 -0.422443 -0.881588 + -1.60952 1.13005 0.79013 0.773799 -0.44207 -0.453661 + -1.56569 1.06712 0.848126 0.525555 -0.0998693 -0.844878 + -1.48094 0.947401 0.878488 0.109901 0.0457181 -0.992891 + -1.47554 0.897944 0.874352 0.555507 -0.0448609 -0.8303 + -1.57418 1.16189 0.764578 0.643914 -0.687121 -0.33651 + -1.54296 1.11265 0.844866 0.306169 -0.354462 -0.883525 + -1.45821 0.993018 0.875278 0.0809339 -0.209781 -0.974393 + -1.4594 0.843428 0.897777 0.648958 -0.222243 -0.727641 + -1.52797 0.812986 0.854702 0.377584 -0.371614 -0.848135 + -1.54804 1.22667 0.747174 0.814744 -0.57145 -0.0981658 + -1.51682 1.17743 0.827461 0.325364 -0.412496 -0.850873 + -1.45391 1.09575 0.847134 -0.0822618 -0.301143 -0.950024 + -1.51282 1.25382 0.698348 0.686531 -0.7209 0.0947574 + -1.4986 1.24995 0.798452 0.370037 -0.665066 -0.64866 + -1.43569 1.16827 0.818123 0.0269922 -0.299273 -0.953786 + -1.39844 1.00285 0.872655 -0.0319888 -0.264807 -0.963771 + -1.40273 0.900111 0.9008 -0.0964257 -0.330437 -0.938889 + -1.42705 0.810131 0.938248 0.268959 -0.383339 -0.883579 + -1.48115 0.749575 0.933935 0.590757 -0.414201 -0.692418 + -1.52058 0.751028 0.891216 0.493563 -0.401586 -0.771443 + -1.59075 0.801736 0.854789 0.124545 -0.357172 -0.925698 + -1.3925 0.822363 0.933659 0.0203045 -0.444787 -0.895406 + -1.41682 0.732299 0.971057 0.277714 -0.437923 -0.855043 + -1.4488 0.716278 0.974406 0.313028 -0.499471 -0.807801 + -1.49687 0.688112 0.95859 0.596314 -0.520787 -0.610893 + -1.33489 0.693301 1.0436 0.393503 -0.576032 -0.716479 + -1.42433 0.648578 1.01686 0.201754 -0.557455 -0.805319 + -1.45478 0.596872 1.05422 -0.0269332 -0.686943 -0.726212 + -1.47925 0.664574 1.01176 0.20294 -0.750257 -0.62923 + -1.50627 0.652275 0.987461 0.678628 -0.670131 -0.300646 + -1.1991 0.676835 1.14652 0.449861 -0.632005 -0.631027 + -1.3424 0.60958 1.08941 0.40311 -0.549624 -0.731721 + -1.45688 0.548566 1.10849 -0.0682584 -0.740357 -0.668739 + -1.54082 0.606679 1.08404 0.0652579 -0.800728 -0.595463 + -1.14769 0.775965 1.02182 0.425913 -0.790026 -0.440974 + -1.07025 0.74551 1.15717 0.460718 -0.742964 -0.485534 + -1.05089 0.714986 1.22064 0.473928 -0.645433 -0.599006 + -1.17527 0.617705 1.20894 0.499067 -0.508761 -0.701495 + -1.1661 0.918671 0.745052 0.286612 -0.613039 -0.736231 + -1.14172 0.8227 0.960676 0.697446 -0.567514 -0.437603 + -1.06428 0.792159 1.09598 0.406018 -0.801647 -0.438761 + -0.948354 0.796696 1.19172 0.380433 -0.849613 -0.36528 + -0.928998 0.766172 1.25519 0.432385 -0.795523 -0.424483 + -1.20241 1.08491 0.659711 -0.821727 -0.175557 -0.542167 + -1.29256 1.60304 0.697494 -0.812119 -0.563741 -0.15053 + -1.21542 1.25462 0.632759 -0.0031453 -0.00839504 -0.99996 + -1.587 0.730286 0.874144 0.0665804 -0.448761 -0.891168 + -1.66934 0.839396 0.83016 0.573369 -0.0696163 -0.816334 + -1.71192 0.812042 0.755739 0.804134 0.0394228 -0.593139 + -1.53629 0.689567 0.915871 0.436515 -0.5196 -0.734486 + -1.59718 0.672544 0.915154 0.449715 -0.429837 -0.782941 + -1.65253 0.75546 0.827341 0.824798 -0.0082988 -0.565367 + -1.69959 0.744897 0.780836 0.756707 -0.0979742 -0.646371 + -1.76663 0.838045 0.6861 0.810457 -0.0213166 -0.58541 + -1.54647 0.631827 0.956881 0.40973 -0.619083 -0.669969 + -1.55587 0.595988 0.985752 0.578711 -0.615123 -0.53546 + -1.59539 0.606046 0.942334 0.438197 -0.540751 -0.718033 + -1.65074 0.688961 0.854519 0.773858 -0.154545 -0.614215 + -1.57421 0.54596 1.0314 0.73269 -0.637314 -0.238741 + -1.61372 0.556018 0.987985 0.602529 -0.590915 -0.53645 + -1.6368 0.619564 0.87692 0.787817 -0.316406 -0.528424 + -1.68565 0.675413 0.803186 0.387969 -0.471947 -0.791673 + -1.7543 0.770899 0.711198 0.769803 -0.295818 -0.565593 + -1.51022 0.651849 1.0122 0.607161 -0.79105 -0.074804 + -1.57817 0.545448 1.05609 0.901714 -0.375559 0.214166 + -1.60585 0.49996 1.10848 0.834642 -0.550431 0.0199433 + -1.62122 0.504521 1.03438 0.342927 -0.836223 -0.42794 + -1.5718 0.593954 1.08447 0.724252 -0.6792 -0.118936 + -1.59948 0.548467 1.13686 0.723504 -0.659554 -0.203789 + -1.62677 0.468698 1.16843 0.780966 -0.620852 -0.0680772 + -1.64214 0.473346 1.09438 0.513707 -0.815679 -0.26603 + -1.6443 0.568153 0.923365 0.467164 -0.655206 -0.593686 + -1.54292 0.558373 1.13831 -0.0577527 -0.810044 -0.583519 + -1.60355 0.505276 1.20727 0.517044 -0.801543 -0.300325 + -1.62257 0.484198 1.25658 0.529428 -0.846497 -0.0561147 + -1.64579 0.44762 1.21774 0.402664 -0.90742 0.120211 + -1.66103 0.442873 1.15136 -0.04617 -0.980104 -0.19304 + -1.54699 0.515182 1.20871 -0.0749877 -0.809016 -0.582983 + -1.52479 0.464575 1.26937 -0.31232 -0.874101 -0.372026 + -1.59744 0.481079 1.30738 -0.0259835 -0.972897 -0.229774 + -1.6726 0.458265 1.2863 0.383771 -0.917937 -0.100556 + -1.68784 0.453432 1.21987 0.295227 -0.952111 0.0795293 + -1.44043 0.486339 1.17467 -0.111137 -0.760384 -0.639894 + -1.41823 0.435732 1.23532 -0.147158 -0.788088 -0.597713 + -1.44873 0.417293 1.32726 -0.541541 -0.783838 -0.303861 + -1.52138 0.433797 1.36528 -0.365322 -0.895546 -0.254041 + -1.32655 0.544633 1.1463 0.351928 -0.596813 -0.721083 + -1.31011 0.482406 1.21249 0.297737 -0.662763 -0.687093 + -1.26219 0.434609 1.27727 0.349234 -0.582392 -0.734068 + -1.27731 0.371808 1.32425 0.240972 -0.661891 -0.709811 + -1.40647 0.371246 1.30042 -0.406111 -0.755673 -0.513841 + -1.15942 0.552757 1.26583 0.500775 -0.466544 -0.729082 + -1.13583 0.493105 1.31715 0.470839 -0.494101 -0.730872 + -1.08792 0.445309 1.38194 0.44709 -0.495578 -0.744656 + -0.987842 0.616329 1.33052 0.433735 -0.464773 -0.771919 + -0.964256 0.556677 1.38184 0.377966 -0.474035 -0.795256 + -0.958075 0.487541 1.42119 0.352676 -0.486815 -0.799144 + -1.06737 0.38742 1.4322 0.417652 -0.529008 -0.738726 + -1.02706 0.655854 1.28306 0.483618 -0.479365 -0.732341 + -0.815221 0.742389 1.35778 0.313595 -0.419724 -0.851757 + -0.79827 0.664136 1.38552 0.264558 -0.375585 -0.888226 + -0.792089 0.594913 1.42482 0.195617 -0.419154 -0.886591 + -0.854442 0.781914 1.31032 0.433389 -0.680396 -0.590962 + -0.695028 0.820486 1.34571 -0.0541374 -0.660398 -0.748961 + -0.708286 0.770455 1.36997 0.016561 -0.390295 -0.920541 + -0.691335 0.692288 1.39776 -0.312427 -0.389432 -0.866448 + -0.812578 0.820227 1.26856 0.348052 -0.885531 -0.307726 + -0.738021 0.83597 1.32369 0.20944 -0.86485 -0.456255 + -0.618769 0.825268 1.31523 -0.701038 -0.67658 -0.225354 + -0.640121 0.757806 1.35788 -0.480281 -0.300874 -0.823896 + -0.653379 0.707775 1.38213 -0.453169 -0.246801 -0.856579 + -0.811583 0.827076 1.2515 0.343971 -0.810517 -0.474075 + -0.661762 0.840666 1.29316 -0.0297325 -0.936742 -0.348755 + -0.660767 0.847515 1.2761 -0.255366 -0.947414 0.192862 + -0.59698 0.776022 1.30872 -0.911292 -0.297893 -0.284263 + -0.862432 0.824007 1.21941 0.406876 -0.822885 -0.396626 + -0.734307 0.862237 1.2566 -0.094028 -0.87659 -0.471962 + -0.864203 0.836358 1.14702 0.425711 -0.872347 -0.240376 + -0.785156 0.85908 1.22446 0.365456 -0.848031 -0.383778 + -0.78827 0.875179 1.17438 -0.0730326 -0.996704 0.0353108 + -0.712689 0.835707 1.21915 -0.655829 -0.635822 0.406962 + -0.687961 0.839972 1.25976 -0.474731 -0.542775 0.692839 + -0.614421 0.825336 1.27931 -0.362325 -0.173236 0.915811 + -0.950125 0.809046 1.11933 0.269323 -0.921694 -0.279185 + -0.867317 0.852369 1.09689 0.477885 -0.790046 -0.383997 + -0.865264 0.89818 1.02414 0.242881 -0.890796 -0.384045 + -1.04637 0.825001 1.03549 0.234761 -0.86554 -0.442411 + -0.932214 0.841889 1.05884 0.331304 -0.843882 -0.42202 + -0.930161 0.8877 0.986093 0.397391 -0.824751 -0.402326 + -0.860678 0.922089 0.953931 0.198095 -0.896026 -0.397361 + -0.826398 0.869631 1.10659 -0.830173 -0.520502 0.199724 + -1.11972 0.886319 0.929887 0.502918 -0.673538 -0.541683 + -0.988034 0.855089 0.986578 0.212904 -0.869801 -0.445105 + -0.960444 0.897098 0.922215 0.218833 -0.770023 -0.599314 + -0.902572 0.92971 0.921729 0.279728 -0.855884 -0.434988 + -1.1441 0.982289 0.714262 0.570624 -0.289262 -0.768581 + -1.13996 1.08149 0.754245 0.881795 -0.00266715 -0.471624 + -1.06139 0.916319 0.880924 0.169801 -0.549543 -0.818028 + -1.05187 0.99702 0.888545 0.28604 -0.290561 -0.913102 + -0.928793 0.949374 0.86747 -0.0679236 -0.763173 -0.642614 + -1.21128 1.35382 0.672742 0.426411 -0.042953 -0.903509 + -1.1853 1.29834 0.696237 0.835049 0.0870797 -0.54324 + -1.13045 1.1621 0.761815 0.894394 0.152379 -0.420523 + -1.20241 1.08491 0.659711 0.928462 0.0122208 -0.371226 + -1.29256 1.60304 0.697494 0.437824 -0.105642 -0.892832 + -2.55227 2.13444 0.203282 -0.144941 0.975208 -0.167216 + -2.46869 2.13569 0.121704 -0.206607 0.964036 -0.167178 + -2.5105 2.12924 0.074687 0.0104376 0.989857 0.141682 + -2.4744 2.21408 0.359739 -0.617388 0.685529 -0.385852 + -2.50208 2.14992 0.196466 -0.336006 0.889614 -0.309334 + -2.39707 2.18859 0.187288 -0.578816 0.703306 -0.412714 + -2.34077 2.15746 0.061211 -0.648427 0.76038 -0.0369516 + -2.38258 2.151 0.014202 -0.200623 0.963665 0.176352 + -2.55404 2.22825 0.546984 -0.691729 0.636677 -0.340814 + -2.54716 2.2602 0.573062 -0.858596 0.267177 -0.437526 + -2.51401 2.31498 0.503967 -0.910698 0.032595 -0.411784 + -2.46937 2.34416 0.416232 -0.868306 0.0381956 -0.494556 + -2.44543 2.27979 0.37632 -0.718041 0.275045 -0.639349 + -2.43045 2.20281 0.26205 -0.612632 0.694204 -0.37784 + -2.68135 2.24606 0.776546 -0.81152 0.410326 -0.416014 + -2.67447 2.278 0.802623 -0.720618 0.411119 -0.558293 + -2.62183 2.30578 0.72291 -0.87712 0.0831844 -0.473013 + -2.58868 2.36048 0.653765 -0.895234 -0.0565549 -0.441993 + -2.69067 2.14011 0.697649 -0.968115 0.0605135 -0.243087 + -2.72265 2.20853 0.85574 -0.939291 0.0748139 -0.334867 + -2.73841 2.35365 0.931195 -0.907184 0.0635316 -0.41591 + -2.68577 2.38143 0.851482 -0.878298 0.0280821 -0.477288 + -2.64802 2.47483 0.752112 -0.90022 -0.0899189 -0.426051 + -2.6886 2.09026 0.768796 -0.968818 -0.0878022 -0.231693 + -2.73772 2.11713 0.89106 -0.940948 0.00987779 -0.338408 + -2.78481 2.16824 1.04533 -0.949733 0.0332333 -0.311293 + -2.76975 2.25965 1.01001 -0.94575 0.0366028 -0.322828 + -2.66813 2.02558 0.693429 -0.997575 0.0600019 -0.0352705 + -2.71138 1.98324 0.833166 -0.941642 0.0235637 -0.33579 + -2.7605 2.01002 0.95538 -0.936041 0.0429695 -0.349257 + -2.72489 1.90573 0.863813 -0.922793 -0.0425729 -0.382938 + -2.81001 1.8243 1.04305 -0.925878 -0.0272132 -0.376842 + -2.86532 1.87272 1.20998 -0.952521 0.000752998 -0.304472 + -2.81581 2.05844 1.12231 -0.944092 0.0713675 -0.321864 + -2.72178 1.82364 0.876602 -0.80842 -0.285164 -0.514916 + -2.8069 1.74221 1.05584 -0.890098 -0.21666 -0.400979 + -2.72186 1.72568 0.947274 -0.734147 -0.372987 -0.567371 + -2.71597 1.64793 0.986144 -0.712937 -0.337375 -0.614735 + -2.80101 1.66446 1.09471 -0.864067 -0.233578 -0.445902 + -2.67776 1.71691 0.900867 -0.615568 -0.460027 -0.639884 + -2.65143 1.66036 0.922402 -0.540757 -0.461793 -0.703086 + -2.66111 1.61844 0.948007 -0.54897 -0.341838 -0.762744 + -2.69851 1.5131 1.03227 -0.708767 -0.344801 -0.615436 + -2.60333 1.64967 0.891728 -0.390486 -0.520427 -0.759392 + -2.5719 1.58847 0.916332 -0.242246 -0.493655 -0.835237 + -2.58158 1.54655 0.941937 -0.266086 -0.418532 -0.868348 + -2.64365 1.48362 0.994138 -0.522657 -0.378444 -0.763943 + -2.51266 1.68707 0.850743 -0.116092 -0.518464 -0.847182 + -2.45401 1.53363 0.915703 -0.112405 -0.304601 -0.945824 + -2.71043 1.46155 1.07875 -0.739514 -0.310717 -0.597138 + -2.81293 1.61291 1.14119 -0.870545 -0.246686 -0.42579 + -2.69582 1.36191 1.10273 -0.749938 -0.445746 -0.488778 + -2.83411 1.59996 1.19782 -0.920479 -0.256511 -0.294823 + -2.92455 1.84272 1.39255 -0.973138 -0.0687242 -0.219724 + -2.90337 1.85575 1.33597 -0.94824 0.0143974 -0.317229 + -2.69088 1.31879 1.16603 -0.83262 -0.488595 -0.260803 + -2.82917 1.55684 1.26112 -0.911736 -0.404557 -0.0712168 + -2.88132 1.67507 1.38653 -0.916345 -0.399691 -0.0236408 + -2.63789 1.20703 1.1818 -0.924112 -0.302307 -0.233726 + -2.73704 1.3818 1.34469 -0.898637 -0.438456 0.0144213 + -2.75066 1.43318 1.4467 -0.893538 -0.394871 0.213698 + -2.8428 1.60821 1.36313 -0.856803 -0.490194 0.159995 + -2.61381 1.14019 1.11437 -0.978571 -0.0727289 -0.192639 + -2.61716 1.10996 1.32433 -0.934912 -0.354656 -0.0126379 + -2.68404 1.27004 1.36046 -0.912307 -0.409137 -0.0174159 + -2.68566 1.28041 1.4271 -0.833467 -0.458792 0.307965 + -2.57772 1.20514 0.996875 -0.904527 0.147861 -0.39996 + -2.60092 1.04733 1.08021 -0.985106 -0.145394 -0.0917945 + -2.59308 1.04304 1.25684 -0.950259 -0.311364 0.00781739 + -2.61877 1.12024 1.39092 -0.928899 -0.346585 0.130485 + -2.56484 1.11228 0.962714 -0.919465 0.105989 -0.378616 + -2.58618 0.98852 1.00507 -0.969967 -0.190865 -0.150778 + -2.58243 1.00189 1.14671 -0.945154 -0.323487 0.0451764 + -2.54816 0.916788 1.24551 -0.924532 -0.377052 0.0554235 + -2.55881 0.957931 1.35565 -0.925182 -0.375946 0.0519808 + -2.50194 1.17043 0.851593 -0.821886 0.309601 -0.478173 + -2.49899 1.08753 0.812577 -0.810373 0.197348 -0.551679 + -2.56188 1.02929 0.923648 -0.93213 0.0344602 -0.36048 + -2.55869 0.93982 0.946217 -0.96478 -0.129222 -0.229133 + -2.56768 0.943084 1.07156 -0.945993 -0.321485 0.0417764 + -2.40168 1.17625 0.744709 -0.619436 0.298552 -0.726062 + -2.41419 1.08425 0.721255 -0.61971 0.265996 -0.738381 + -2.49104 0.990875 0.771388 -0.824036 0.158811 -0.543823 + -2.5344 0.980593 0.864797 -0.924585 0.0233744 -0.380258 + -2.29816 1.04453 0.635261 -0.448085 0.294329 -0.844151 + -2.27494 0.963113 0.591875 -0.410539 0.358633 -0.838355 + -2.40624 0.987598 0.680065 -0.617791 0.253472 -0.744369 + -2.14033 0.913598 0.518236 -0.231781 0.399618 -0.886895 + -2.24601 0.882803 0.540174 -0.375682 0.422097 -0.825044 + -2.37731 0.907288 0.628365 -0.566056 0.310739 -0.763559 + -2.45752 0.899734 0.695248 -0.762946 0.183049 -0.620005 + -2.48473 0.934199 0.747354 -0.875126 0.0847596 -0.476414 + -1.96912 0.765755 0.420306 0.136233 0.291685 -0.946763 + -2.11165 0.833479 0.477208 -0.146208 0.497451 -0.855082 + -2.20315 0.817744 0.481859 -0.324 0.470537 -0.820743 + -2.33615 0.828191 0.564767 -0.558406 0.286279 -0.778606 + -2.41636 0.820637 0.631649 -0.735722 0.114228 -0.667582 + -1.89324 0.815688 0.474423 0.617393 0.322612 -0.717459 + -1.88089 0.74382 0.478903 0.783604 0.124291 -0.608701 + -1.96103 0.67472 0.399785 0.449127 0.333875 -0.828741 + -2.06879 0.768334 0.418843 0.209192 0.663968 -0.717904 + -1.81695 0.764071 0.600627 0.86766 -0.183795 -0.461937 + -1.81262 0.720615 0.663493 0.876135 -0.325717 -0.355382 + -1.87281 0.652784 0.458382 0.832041 0.0362028 -0.553532 + -1.91603 0.534961 0.413056 0.789759 -0.279424 -0.546079 + -1.96117 0.623916 0.370181 0.582356 0.309594 -0.751673 + -1.74998 0.727445 0.774065 0.26545 -0.746467 -0.610183 + -1.80877 0.671025 0.710185 0.86313 -0.426725 -0.270022 + -1.86896 0.60328 0.505124 0.945919 -0.196669 -0.257988 + -1.68642 0.623923 0.855168 -0.0045126 -0.708756 -0.705439 + -1.75074 0.675868 0.825996 0.214467 -0.785796 -0.580112 + -1.8218 0.634855 0.772834 0.833828 -0.514777 -0.199338 + -1.85867 0.560345 0.575091 0.957778 -0.223931 -0.180319 + -1.90574 0.492112 0.483073 0.829766 -0.421959 -0.365293 + -1.69254 0.569577 0.911698 -0.158111 -0.733039 -0.661554 + -1.76377 0.639697 0.888646 0.105377 -0.842898 -0.527655 + -1.82642 0.59689 0.838591 0.7945 -0.584643 -0.1642 + -1.86328 0.522381 0.640847 0.966507 -0.214487 -0.140924 + -1.65042 0.513721 0.979845 0.525468 -0.716742 -0.458436 + -1.70803 0.526187 0.970451 -0.238842 -0.749552 -0.617355 + -1.77926 0.596395 0.94745 0.0728766 -0.840701 -0.536573 + -1.85124 0.55914 0.898178 0.809196 -0.579714 -0.0955744 + -1.66931 0.483248 1.03682 0.266847 -0.854562 -0.445551 + -1.72604 0.479952 1.02813 -0.222569 -0.779222 -0.585898 + -1.80409 0.558557 1.00699 0.0564278 -0.87805 -0.475231 + -1.86902 0.523285 0.957278 0.84407 -0.530537 -0.0779501 + -1.85602 0.483439 0.700495 0.962704 -0.259133 -0.0777881 + -1.68732 0.437013 1.09451 0.485507 -0.842984 -0.231648 + -1.74607 0.451085 1.08933 -0.400766 -0.840026 -0.36571 + -1.82411 0.52969 1.06819 0.0629603 -0.912948 -0.40319 + -1.88128 0.493809 1.02393 0.757383 -0.64941 -0.0680977 + -1.87381 0.447584 0.759596 0.806986 -0.589472 0.036005 + -1.70775 0.443486 1.2775 0.372705 -0.927857 -0.0131178 + -1.70723 0.427067 1.15213 0.206735 -0.977373 -0.0447376 + -1.77727 0.448527 1.15856 -0.429328 -0.85716 -0.284526 + -1.83637 0.500213 1.13484 0.00218417 -0.947644 -0.319322 + -1.64747 0.455233 1.33715 0.287165 -0.957778 0.0140231 + -1.7011 0.453737 1.34454 0.320589 -0.944677 0.0693361 + -1.64082 0.465398 1.40414 -0.00173264 -0.981346 -0.192241 + -1.70716 0.451032 1.41863 0.746003 -0.553233 -0.370692 + -1.73843 0.424595 1.22141 0.0774129 -0.99613 -0.0416256 + -1.48839 0.408059 1.43006 -0.449636 -0.874282 -0.182915 + -1.60783 0.439747 1.46897 -0.101088 -0.935032 -0.339847 + -1.67675 0.424968 1.47897 0.194083 -0.932887 -0.303405 + -1.74448 0.42189 1.2955 0.226335 -0.973954 -0.0136437 + -1.7944 0.430866 1.22575 -0.355016 -0.914442 -0.194316 + -1.417 0.365191 1.40291 -0.655971 -0.738087 -0.157892 + -1.46206 0.367494 1.51932 -0.475959 -0.842572 -0.252063 + -1.57742 0.413598 1.52926 -0.208755 -0.932572 -0.294502 + -1.67259 0.411655 1.55043 0.289223 -0.867086 -0.4056 + -1.76926 0.424379 1.37059 0.07764 -0.991337 -0.105937 + -1.37475 0.319144 1.37606 -0.432593 -0.810749 -0.394397 + -1.39068 0.324625 1.49217 -0.770867 -0.619188 -0.149566 + -1.38133 0.290225 1.57975 -0.80906 -0.568873 -0.147665 + -1.43898 0.324733 1.62698 -0.483201 -0.844856 -0.229641 + -1.46494 0.348315 1.57954 -0.318927 -0.898098 -0.302829 + -1.2514 0.260562 1.46153 0.119277 -0.827592 -0.548511 + -1.36742 0.271559 1.45088 -0.587021 -0.731977 -0.345856 + -1.35807 0.237154 1.53847 -0.627426 -0.748182 -0.215778 + -1.38355 0.264554 1.67781 -0.780556 -0.606511 -0.151251 + -1.44119 0.299154 1.72508 -0.4835 -0.852908 -0.196913 + -1.26555 0.307234 1.38929 0.20303 -0.746738 -0.633372 + -1.03236 0.181381 1.67547 0.111045 -0.884332 -0.453459 + -1.01916 0.153671 1.75087 0.0721301 -0.93162 -0.356205 + -1.24407 0.212977 1.53635 0.0391076 -0.894326 -0.445704 + -1.23482 0.182879 1.61828 -0.0921612 -0.951509 -0.293492 + -1.04651 0.228051 1.60324 0.241731 -0.787234 -0.5673 + -0.878998 0.208596 1.69633 0.14939 -0.785803 -0.600164 + -0.858484 0.160513 1.75982 0.0567368 -0.871973 -0.486255 + -0.845283 0.132889 1.83526 -0.0105737 -0.911851 -0.410385 + -1.00992 0.123663 1.83285 0.0085355 -0.954924 -0.296728 + -1.06378 0.27098 1.53688 0.263569 -0.738922 -0.620101 + -0.896263 0.251439 1.62993 0.203733 -0.725197 -0.65771 + -0.771005 0.252727 1.6505 -0.00640396 -0.731077 -0.682265 + -0.750491 0.20473 1.71403 -0.0403855 -0.772602 -0.633605 + -0.72341 0.149105 1.77358 -0.0860938 -0.840909 -0.534285 + -1.24913 0.397413 1.31329 0.361401 -0.602578 -0.71154 + -1.0356 0.296588 1.52593 0.350375 -0.646162 -0.678021 + -0.912573 0.310585 1.57489 0.271502 -0.633978 -0.724126 + -0.793357 0.317255 1.59913 0.0353987 -0.640977 -0.766743 + -1.05431 0.350224 1.46823 0.383147 -0.593471 -0.707806 + -0.93128 0.364226 1.51718 0.310855 -0.586365 -0.748028 + -0.809666 0.376401 1.54409 0.0933004 -0.592463 -0.800177 + -0.703249 0.385732 1.53053 -0.17649 -0.557519 -0.811186 + -0.673794 0.323089 1.57323 -0.223171 -0.642032 -0.733478 + -0.937526 0.429652 1.47146 0.339301 -0.527993 -0.778523 + -0.810899 0.450873 1.5015 0.117863 -0.513104 -0.850196 + -0.704481 0.460204 1.48794 -0.227218 -0.464816 -0.855756 + -0.574079 0.336989 1.51655 -0.356712 -0.633116 -0.686965 + -0.544624 0.274352 1.55925 -0.322191 -0.722232 -0.612024 + -0.817145 0.516216 1.45572 0.204672 -0.489189 -0.847823 + -0.719093 0.531891 1.45677 -0.106355 -0.390648 -0.914376 + -0.62273 0.398818 1.48366 -0.502321 -0.597337 -0.62519 + -0.513597 0.336729 1.48201 -0.539356 -0.746407 -0.389835 + -0.464946 0.27499 1.51494 -0.272045 -0.728313 -0.628929 + -0.694037 0.610589 1.42586 -0.185737 -0.324988 -0.9273 + -0.637341 0.470503 1.4525 -0.425363 -0.39714 -0.813232 + -0.556858 0.379338 1.4482 -0.387109 -0.551252 -0.739099 + -0.411498 0.244197 1.49247 -0.500021 -0.860111 0.100936 + -0.344818 0.220911 1.52321 -0.278767 -0.909458 -0.308503 + -0.66784 0.546321 1.43458 -0.824893 -0.380433 -0.418118 + -0.587357 0.455156 1.43028 -0.713086 -0.493871 -0.497594 + -0.454759 0.286808 1.45867 -0.542028 -0.820163 -0.183132 + -0.378843 0.25661 1.45817 -0.0156217 -0.773723 -0.633332 + -0.316716 0.227436 1.4939 0.0254412 -0.781327 -0.623603 + -0.665138 0.627934 1.40642 -0.480783 -0.237754 -0.843991 + -0.620104 0.518944 1.3988 -0.643216 -0.356192 -0.67779 + -0.506451 0.320803 1.41179 -0.673958 -0.726159 -0.135919 + -0.430534 0.290693 1.41134 -0.0206024 -0.743793 -0.668092 + -0.608345 0.598784 1.37451 -0.895837 -0.231059 -0.37959 + -0.539198 0.384677 1.38036 -0.758753 -0.614424 -0.216279 + -0.475534 0.339011 1.37125 -0.0499525 -0.602305 -0.796701 + -0.359348 0.340435 1.42019 0.321289 -0.322209 -0.89048 + -0.311006 0.293472 1.45073 0.260868 -0.434924 -0.861852 + -0.617936 0.632074 1.35425 -0.959442 -0.174028 -0.221776 + -0.585745 0.435954 1.33994 -0.852909 -0.519024 -0.0562139 + -0.522081 0.390288 1.33083 -0.172224 -0.660943 -0.730406 + -0.404348 0.388668 1.38004 0.378828 -0.364832 -0.850521 + -0.618333 0.70856 1.35137 -0.695973 -0.0389876 -0.717009 + -0.607887 0.547783 1.32225 -0.921173 -0.209015 -0.328258 + -0.595336 0.469246 1.31968 -0.853359 -0.256599 -0.453802 + -0.553227 0.446257 1.2989 -0.225587 -0.371602 -0.900568 + -0.438301 0.447908 1.33823 0.348344 -0.377143 -0.858149 + -0.608283 0.624181 1.31932 -0.972663 0.0112533 -0.231947 + -0.604949 0.61793 1.29995 -0.942718 -0.0709479 -0.325958 + -0.579984 0.587683 1.26814 -0.649754 -0.342972 -0.678372 + -0.565778 0.524706 1.30142 -0.373989 -0.315839 -0.871997 + -0.469447 0.503789 1.30625 0.214758 -0.460341 -0.861374 + -0.593646 0.769686 1.2893 -0.926238 -0.201482 0.318573 + -0.604988 0.683732 1.27398 -0.973907 -0.224224 0.0350467 + -0.580023 0.653486 1.24217 -0.753327 -0.396395 -0.524757 + -0.52019 0.609442 1.22065 -0.28038 -0.542816 -0.791667 + -0.505983 0.546464 1.25393 -0.0549415 -0.64068 -0.76584 + -0.614421 0.825336 1.27931 -0.019841 -0.183826 -0.982758 + -0.625762 0.739297 1.26394 -0.675628 -0.202438 0.708904 + -0.65049 0.735117 1.22337 -0.742742 -0.665145 0.0769174 + -0.583397 0.700325 1.18764 -0.578078 -0.706451 -0.408353 + -0.524591 0.665486 1.16738 -0.266571 -0.722343 -0.638092 + -0.750817 0.830245 1.15141 -0.594226 -0.793715 0.130048 + -0.656362 0.772864 1.1512 -0.50883 -0.812218 -0.285295 + -0.589269 0.73807 1.11546 -0.475727 -0.802918 -0.359176 + -0.527966 0.712325 1.11285 -0.231629 -0.835416 -0.498426 + -0.761403 0.847206 1.07903 -0.478168 -0.862449 -0.165942 + -0.666948 0.789911 1.07887 -0.427857 -0.882308 -0.196139 + -0.58677 0.76533 1.04744 -0.384727 -0.868118 -0.313617 + -0.528096 0.742561 1.04268 -0.172658 -0.91587 -0.362452 + -0.865264 0.89818 1.02414 -0.863132 0.183568 0.470432 + -2.40148 2.26853 0.27863 -0.855898 0.261633 -0.446079 + -2.35498 2.26205 0.193641 -0.818023 0.283417 -0.500513 + -2.38615 2.4128 0.262939 -0.879792 -0.0017056 -0.475355 + -2.33965 2.40641 0.178006 -0.814221 -0.000115831 -0.580555 + -2.41009 2.47716 0.302859 -0.871212 -0.0786176 -0.48457 + -2.40968 2.60772 0.270929 -0.856088 -0.135507 -0.498749 + -2.33398 2.58486 0.15232 -0.826289 -0.139883 -0.545599 + -2.31542 2.48829 0.153996 -0.689462 -0.100011 -0.717384 + -2.24517 2.41248 0.067503 -0.806713 -0.0430281 -0.589375 + -2.49718 2.52572 0.438165 -0.866028 -0.0962787 -0.490637 + -2.49677 2.65627 0.406242 -0.870145 -0.128671 -0.4757 + -2.43035 2.76938 0.249128 -0.859047 -0.138095 -0.492918 + -2.35465 2.74652 0.130519 -0.833927 -0.147293 -0.531856 + -2.54182 2.49645 0.525851 -0.888186 -0.0924913 -0.450078 + -2.58091 2.74515 0.544287 -0.888185 -0.120127 -0.443505 + -2.49429 2.81905 0.355288 -0.87711 -0.114313 -0.466488 + -2.47963 2.97629 0.295346 -0.872185 -0.0770665 -0.483067 + -2.41569 2.92662 0.189185 -0.854615 -0.0783679 -0.513314 + -2.60116 2.6108 0.624196 -0.89595 -0.110302 -0.43024 + -2.68695 2.89679 0.71864 -0.900823 -0.106143 -0.421013 + -2.66019 3.0171 0.63406 -0.896377 -0.086915 -0.434689 + -2.57843 2.90803 0.493386 -0.885997 -0.104187 -0.451834 + -2.54816 3.04584 0.411292 -0.880319 -0.0648228 -0.469933 + -2.7072 2.76244 0.798549 -0.908201 -0.119095 -0.401231 + -2.76845 3.07492 0.860518 -0.915771 -0.081857 -0.393273 + -2.74168 3.19523 0.775939 -0.910102 -0.0631682 -0.409541 + -2.70095 3.29493 0.677653 -0.893609 -0.0381599 -0.447222 + -2.62992 3.15491 0.551967 -0.885189 -0.04706 -0.462846 + -2.72096 2.63579 0.876315 -0.912156 -0.104979 -0.396169 + -2.81207 2.84551 1.03226 -0.921891 -0.106169 -0.372619 + -2.79831 2.97216 0.954499 -0.924879 -0.10066 -0.366696 + -2.84357 3.31723 0.997227 -0.933814 -0.0304933 -0.356456 + -2.80086 3.39498 0.886163 -0.924031 -0.0232215 -0.381612 + -2.75872 2.54239 0.975684 -0.913895 -0.0672549 -0.400341 + -2.837 2.73734 1.12262 -0.919997 -0.0929037 -0.380755 + -2.90994 3.12542 1.19425 -0.93675 -0.0493234 -0.346507 + -2.87343 3.21447 1.09121 -0.935326 -0.0433438 -0.351122 + -2.89598 3.56679 1.14817 -0.953682 0.0275757 -0.299551 + -2.78123 2.41982 1.05658 -0.931449 -0.0280248 -0.362791 + -2.85952 2.61477 1.20352 -0.925594 -0.0867182 -0.36845 + -2.93487 3.01725 1.2846 -0.941858 -0.0638603 -0.329887 + -2.96473 3.39293 1.3569 -0.962692 0.0326232 -0.268627 + -2.92822 3.48207 1.25391 -0.957043 0.0321749 -0.288154 + -2.81256 2.32573 1.13535 -0.939687 -0.0201803 -0.34144 + -2.88121 2.50385 1.29123 -0.934029 -0.0814847 -0.347778 + -2.96272 2.92172 1.38686 -0.947394 -0.0625004 -0.313907 + -3.02043 3.20382 1.55945 -0.976259 0.0130221 -0.216214 + -2.99258 3.29926 1.45715 -0.969218 0.0229619 -0.245131 + -2.84567 2.22835 1.24362 -0.941299 -0.00359974 -0.337555 + -2.91431 2.40647 1.3995 -0.948569 -0.0835005 -0.305359 + -2.98441 2.8109 1.47462 -0.955763 -0.0713432 -0.285355 + -2.87667 2.11855 1.3206 -0.952512 0.0394207 -0.30194 + -2.93623 2.33865 1.51157 -0.961664 -0.0740546 -0.264042 + -2.99463 2.69059 1.5504 -0.962682 -0.0881337 -0.255882 + -3.05017 2.98744 1.73523 -0.989332 -0.0291787 -0.142728 + -3.03994 3.10766 1.65941 -0.98569 -0.00413942 -0.16852 + -2.91676 2.11445 1.45989 -0.959711 0.0316562 -0.279202 + -2.97632 2.33456 1.65087 -0.978085 -0.0789315 -0.192666 + -3.01655 2.62285 1.66252 -0.980868 -0.105634 -0.163521 + -2.95481 2.09748 1.58589 -0.972261 0.0237855 -0.232688 + -2.99255 2.32319 1.78795 -0.986442 -0.0465786 -0.15736 + -3.01529 2.55297 1.78236 -0.990024 -0.106132 -0.0926679 + -3.0561 2.83204 1.959 -0.996434 -0.0761684 -0.0362971 + -3.05736 2.90192 1.83917 -0.99577 -0.0602179 -0.0693919 + -2.98303 2.14159 1.73209 -0.989139 -0.039658 -0.141534 + -3.02077 2.3673 1.93415 -0.994754 -0.0769954 -0.0673586 + -3.03153 2.54161 1.91944 -0.994429 -0.079158 -0.0696074 + -2.93726 1.8551 1.51631 -0.982642 -0.154902 -0.10208 + -2.99574 2.15389 1.85579 -0.989668 -0.143212 0.00682483 + -3.01987 2.36333 2.07983 -0.987959 -0.142507 0.0602385 + -3.02892 2.52052 2.06117 -0.996994 -0.0773228 0.00494252 + -2.96054 1.88031 1.66985 -0.978932 -0.204185 -0.000654397 + -2.97736 2.1481 2.00502 -0.959616 -0.245991 0.136477 + -3.00149 2.35754 2.22905 -0.970838 -0.212374 0.111225 + -3.02802 2.51664 2.20689 -0.992721 -0.112198 0.0437818 + -3.05121 2.75296 2.22377 -0.994911 -0.0964525 0.0291278 + -2.9046 1.70027 1.54007 -0.866205 -0.499639 0.00702912 + -2.92564 1.84141 1.81123 -0.890258 -0.401248 0.215501 + -2.94247 2.1092 2.14639 -0.939378 -0.310889 0.14463 + -2.97441 2.31554 2.36321 -0.958614 -0.251129 0.134142 + -3.01751 2.4999 2.34988 -0.982392 -0.159453 0.097373 + -2.78394 1.59132 1.59758 -0.787785 -0.605424 0.113386 + -2.75872 1.58567 1.72018 -0.831279 -0.534721 0.151817 + -2.87938 1.69462 1.66267 -0.793194 -0.584787 0.169904 + -2.82662 1.79901 2.02526 -0.876113 -0.44198 0.192559 + -2.74542 1.52447 1.57417 -0.864803 -0.467161 0.184059 + -2.70084 1.45524 1.60888 -0.870726 -0.459715 0.174635 + -2.68044 1.42697 1.65945 -0.904854 -0.420712 0.0651221 + -2.67129 1.41559 1.73735 -0.91534 -0.397516 0.0642925 + -2.67396 1.43037 1.80435 -0.919041 -0.39083 0.0511448 + -2.69898 1.49683 1.84245 -0.910748 -0.407124 0.0692 + -2.70609 1.36395 1.48141 -0.791284 -0.472552 0.388026 + -2.66486 1.33239 1.50287 -0.812307 -0.468514 0.347351 + -2.64446 1.30412 1.55343 -0.939658 -0.326793 0.101235 + -2.62412 1.24978 1.68276 -0.954804 -0.291127 0.05995 + -2.61496 1.2384 1.76067 -0.948755 -0.301912 0.0933429 + -2.64442 1.24894 1.44861 -0.814684 -0.398577 0.421219 + -2.6239 1.22028 1.49886 -0.951316 -0.279558 0.129792 + -2.60356 1.16593 1.62819 -0.958683 -0.274484 0.0747332 + -2.57155 1.11526 1.79054 -0.947149 -0.301288 0.110158 + -2.60791 1.25902 1.86534 -0.939972 -0.329724 0.0879468 + -2.59824 1.09167 1.44121 -0.950671 -0.246932 0.187746 + -2.56943 1.00822 1.47854 -0.935792 -0.340606 0.0909984 + -2.57475 1.08248 1.66552 -0.949045 -0.301088 0.0930595 + -2.52548 0.975537 1.80256 -0.912902 -0.377776 0.15458 + -2.5645 1.13589 1.89522 -0.938668 -0.307645 0.155745 + -2.52091 0.910412 1.57756 -0.911048 -0.401822 0.092363 + -2.52867 0.942755 1.67753 -0.917669 -0.388548 0.0831501 + -2.45901 0.838753 1.79127 -0.815526 -0.553404 0.169296 + -2.45238 0.870138 1.88291 -0.831487 -0.506998 0.227117 + -2.51609 1.00412 1.90324 -0.902943 -0.38792 0.184963 + -2.51029 0.860121 1.45466 -0.898337 -0.434165 0.0670126 + -2.45187 0.773464 1.59656 -0.867058 -0.486056 0.109362 + -2.45124 0.806408 1.69129 -0.872684 -0.466425 0.144465 + -2.35716 0.768187 1.95149 -0.82638 -0.469243 0.3113 + -2.35053 0.799572 2.04313 -0.757813 -0.613114 0.223182 + -2.49949 0.828385 1.35403 -0.890069 -0.450992 0.0661992 + -2.44107 0.741642 1.49587 -0.857665 -0.509839 0.0668962 + -2.37738 0.689151 1.77499 -0.824916 -0.540635 0.165009 + -2.37676 0.722098 1.86973 -0.877664 -0.387375 0.282216 + -2.53911 0.88031 1.14569 -0.92035 -0.384449 0.071797 + -2.49044 0.791906 1.25421 -0.888431 -0.451782 0.0811384 + -2.42665 0.707026 1.40663 -0.863806 -0.497431 0.0800094 + -2.37651 0.663807 1.68489 -0.822636 -0.554232 0.126872 + -2.53166 0.838905 1.05261 -0.91301 -0.40319 0.0620577 + -2.48424 0.761973 1.15306 -0.875184 -0.477214 0.0795046 + -2.42046 0.677093 1.30547 -0.829327 -0.55385 0.0739398 + -2.36209 0.629193 1.59564 -0.780686 -0.619751 0.0802384 + -2.56023 0.901679 0.978482 -0.973021 -0.223459 -0.0574181 + -2.54015 0.858694 0.912934 -0.935028 -0.312015 -0.168429 + -2.51634 0.799821 0.971907 -0.894208 -0.446819 -0.0272932 + -2.46893 0.722889 1.07235 -0.856475 -0.511347 0.0705366 + -2.39861 0.638763 1.21626 -0.814999 -0.574484 0.0757926 + -2.53861 0.896836 0.880669 -0.960877 -0.111013 -0.253756 + -2.51454 0.823445 0.866386 -0.919587 -0.373631 -0.12149 + -2.49074 0.764572 0.925359 -0.887821 -0.454023 -0.0750764 + -2.45263 0.684515 0.975821 -0.851662 -0.523362 0.0276422 + -2.38231 0.600476 1.11978 -0.78982 -0.609055 0.0723661 + -2.52809 0.923916 0.840764 -0.942134 0.0156036 -0.334874 + -2.52028 0.852697 0.830319 -0.955498 -0.204132 -0.212964 + -2.49906 0.810617 0.786604 -0.941473 -0.221403 -0.254182 + -2.49332 0.781365 0.822671 -0.927539 -0.364063 -0.0844333 + -2.48104 0.747248 0.863964 -0.914465 -0.403719 -0.0276527 + -2.50975 0.879778 0.790414 -0.921391 -0.0226009 -0.387978 + -2.48254 0.845314 0.738309 -0.899068 -0.0321586 -0.436625 + -2.47901 0.76723 0.747753 -0.921246 -0.263998 -0.285677 + -2.47308 0.737895 0.783763 -0.903785 -0.408652 -0.127182 + -2.4608 0.703778 0.825056 -0.890975 -0.450108 -0.0597247 + -2.4625 0.80184 0.699408 -0.879635 -0.0610529 -0.471714 + -2.45367 0.732083 0.713031 -0.869966 -0.371918 -0.323783 + -2.44773 0.702748 0.74904 -0.819459 -0.524584 -0.230865 + -2.43712 0.665621 0.797747 -0.850379 -0.495211 -0.177827 + -2.44294 0.667191 0.914427 -0.870124 -0.492801 -0.00557889 + -2.40083 0.774758 0.610516 -0.726129 -0.024312 -0.687128 + -2.44697 0.756048 0.678323 -0.864056 -0.192797 -0.465013 + -2.42472 0.700478 0.684772 -0.78797 -0.521589 -0.327182 + -2.41327 0.679273 0.7131 -0.734305 -0.631986 -0.247767 + -2.40265 0.642147 0.761806 -0.808713 -0.441402 -0.388778 + -2.36064 0.744002 0.573184 -0.72022 -0.10465 -0.685807 + -2.41802 0.724444 0.650064 -0.791102 -0.314027 -0.524923 + -2.39664 0.676451 0.657788 -0.753974 -0.552474 -0.35538 + -2.38518 0.655246 0.686115 -0.781181 -0.571712 -0.2508 + -2.29095 0.754305 0.50994 -0.591253 0.155886 -0.791277 + -2.29897 0.667007 0.517945 -0.74976 -0.244727 -0.614791 + -2.3376 0.653831 0.596767 -0.74753 -0.434721 -0.502211 + -2.37782 0.693687 0.612733 -0.711692 -0.378537 -0.591781 + -2.35641 0.636681 0.641871 -0.759225 -0.502721 -0.413339 + -2.15795 0.743773 0.426982 -0.358854 0.368239 -0.857685 + -2.13163 0.660542 0.387545 -0.441128 0.14915 -0.884964 + -2.22928 0.677311 0.4547 -0.605838 0.0213153 -0.795302 + -2.19049 0.596965 0.432463 -0.654034 -0.283244 -0.701436 + -2.25055 0.615227 0.490032 -0.718078 -0.437556 -0.541211 + -2.06893 0.717615 0.389289 -0.0168169 0.44988 -0.89293 + -2.04261 0.634297 0.349801 -0.0356685 0.264495 -0.963727 + -2.03077 0.576074 0.342247 -0.0478531 -0.0217802 -0.998617 + -2.09283 0.580194 0.365307 -0.450414 -0.079126 -0.889307 + -1.94933 0.565779 0.362676 0.617395 -0.0383686 -0.785717 + -2.0216 0.483798 0.359073 0.03749 -0.57505 -0.817259 + -2.08366 0.48792 0.382134 -0.501791 -0.444887 -0.74181 + -2.13465 0.524988 0.431131 -0.724638 -0.520652 -0.451466 + -2.19471 0.54325 0.4887 -0.681666 -0.526662 -0.507896 + -1.9883 0.45298 0.409452 0.417605 -0.705126 -0.573065 + -2.06513 0.433022 0.407219 -0.264069 -0.739561 -0.619126 + -2.11612 0.470089 0.456215 -0.721532 -0.570265 -0.39267 + -1.89848 0.453085 0.542671 0.793456 -0.534458 -0.291174 + -1.91972 0.415229 0.60264 0.571507 -0.803509 -0.166594 + -2.00954 0.415124 0.469421 0.202572 -0.93421 -0.293626 + -2.08196 0.418872 0.489529 -0.407875 -0.873911 -0.26442 + -1.95867 0.386642 0.672753 0.371757 -0.922483 -0.104025 + -2.02637 0.400974 0.55173 0.016649 -0.980646 -0.195081 + -2.05472 0.382269 0.629927 -0.0656474 -0.97698 -0.202979 + -2.11198 0.414983 0.555663 -0.52412 -0.81267 -0.254686 + -2.14614 0.466201 0.522352 -0.628522 -0.668658 -0.397311 + -1.91275 0.418999 0.82971 0.693866 -0.719589 0.0272241 + -1.98702 0.367937 0.750949 0.331112 -0.939201 -0.0909184 + -2.02519 0.351912 0.827106 0.188981 -0.979275 -0.0728461 + -2.07224 0.36711 0.717184 -0.12392 -0.976833 -0.174473 + -2.12951 0.399824 0.64292 -0.396362 -0.887535 -0.234903 + -1.90422 0.465659 1.09489 0.82056 -0.557494 -0.126022 + -1.9357 0.390763 0.900615 0.652078 -0.757994 0.0154749 + -1.97387 0.374737 0.976771 0.532508 -0.844279 -0.0602339 + -2.04494 0.342123 0.90966 0.25723 -0.959014 -0.118847 + -2.092 0.357321 0.799737 -0.324932 -0.943242 -0.0686484 + -1.8535 0.482553 1.20203 0.205393 -0.902307 -0.379019 + -1.90727 0.422201 1.15736 0.796622 -0.575877 -0.183737 + -1.92036 0.393833 1.2301 0.775941 -0.59943 -0.196465 + -1.98696 0.346454 1.04956 0.585345 -0.799063 -0.137366 + -2.05528 0.326128 0.991967 -0.126362 -0.987207 -0.0972343 + -1.81918 0.433355 1.30084 -0.0277061 -0.977844 -0.207493 + -1.85654 0.439093 1.2645 0.513435 -0.79257 -0.328965 + -1.87002 0.41583 1.3378 0.528912 -0.806925 -0.262914 + -1.92652 0.351051 1.2894 0.706499 -0.678503 -0.20123 + -1.9973 0.330459 1.13187 0.387721 -0.911763 -0.135499 + -1.83267 0.410092 1.37414 0.0622999 -0.986552 -0.151107 + -1.84235 0.406737 1.45075 0.396169 -0.916194 -0.0603194 + -1.87618 0.373049 1.39709 0.738808 -0.658861 -0.141651 + -1.93117 0.334753 1.36423 0.335112 -0.942016 0.0174829 + -1.76511 0.411152 1.4421 0.132338 -0.981785 -0.13633 + -1.7748 0.407712 1.51866 -0.0291195 -0.993767 -0.107607 + -1.85045 0.398633 1.52138 0.425075 -0.904203 -0.0415591 + -1.88427 0.364945 1.46773 0.483536 -0.871073 0.0861698 + -1.65583 0.378339 1.60973 -0.0143902 -0.950904 -0.30915 + -1.65108 0.366233 1.6813 -0.134821 -0.972098 -0.191959 + -1.77005 0.395607 1.59022 -0.0856149 -0.99261 -0.0860006 + -1.85122 0.398926 1.59928 0.155597 -0.985889 0.0617382 + -1.58031 0.394507 1.58953 -0.163262 -0.903683 -0.395856 + -1.56355 0.361189 1.64884 -0.21887 -0.914201 -0.341076 + -1.53758 0.337601 1.69629 -0.246375 -0.942465 -0.225963 + -1.64358 0.352119 1.74875 -0.24884 -0.961295 -0.11828 + -1.77082 0.395987 1.66817 -0.194979 -0.98054 -0.0229125 + -1.53008 0.323491 1.76373 -0.269889 -0.945882 -0.180189 + -1.53293 0.308826 1.84893 -0.293583 -0.952625 -0.0794605 + -1.64093 0.345863 1.82318 -0.306584 -0.950613 -0.048381 + -1.76818 0.389645 1.74255 -0.183639 -0.979459 -0.0832907 + -1.85945 0.40399 1.6747 0.194425 -0.980656 -0.0226389 + -1.44405 0.284483 1.8103 -0.501312 -0.847054 -0.176596 + -1.53307 0.306576 1.92143 -0.37376 -0.920959 -0.110176 + -1.64107 0.343527 1.89563 -0.283628 -0.956871 -0.0628742 + -1.771 0.382386 1.81952 -0.197358 -0.977344 -0.0764759 + -1.86227 0.396732 1.75168 -0.060034 -0.998192 0.00308328 + -1.38511 0.244046 1.77334 -0.795532 -0.578955 -0.178715 + -1.45856 0.269326 1.90935 -0.542716 -0.823284 -0.166318 + -1.46891 0.259892 1.99509 -0.49757 -0.851334 -0.166296 + -1.54342 0.297141 2.00717 -0.394842 -0.906355 -0.150401 + -1.64148 0.337272 1.96966 -0.270629 -0.954985 -0.121503 + -1.35462 0.194096 1.72325 -0.634296 -0.754835 -0.16701 + -1.39962 0.228884 1.8724 -0.709918 -0.687838 -0.151312 + -1.39166 0.208942 1.93914 -0.703805 -0.706451 -0.0747323 + -1.40439 0.215415 2.01313 -0.633085 -0.761753 -0.137605 + -1.35305 0.21461 1.62772 -0.622323 -0.765293 -0.164442 + -1.2298 0.160337 1.70752 -0.152031 -0.962783 -0.223464 + -1.22831 0.141582 1.79381 -0.177832 -0.965211 -0.191688 + -1.34899 0.176277 1.81411 -0.554387 -0.819961 -0.142548 + -1.34103 0.156335 1.88086 -0.523057 -0.840986 -0.1384 + -1.01064 0.104507 1.91102 -0.0511396 -0.973439 -0.223163 + -1.00914 0.085758 1.9973 -0.0735815 -0.977959 -0.195401 + -1.0238 0.072506 2.07605 -0.103697 -0.982693 -0.153494 + -1.22268 0.123849 1.88472 -0.17623 -0.96992 -0.167921 + -0.828999 0.095944 1.90606 -0.083087 -0.935663 -0.342975 + -0.829722 0.076875 1.98428 -0.116355 -0.965344 -0.233608 + -0.833452 0.058511 2.06169 -0.0812208 -0.97989 -0.182262 + -0.848105 0.045259 2.14045 -0.0470974 -0.992081 -0.116435 + -1.02656 0.061384 2.16131 -0.143608 -0.985868 -0.0862618 + -0.707126 0.112246 1.84442 -0.10426 -0.876729 -0.469548 + -0.685094 0.06822 1.91427 -0.102666 -0.928156 -0.357752 + -0.688824 0.049855 1.99168 -0.0446493 -0.992636 -0.112609 + -0.70527 0.051219 2.07712 0.0129491 -0.999305 -0.0349546 + -0.594742 0.15241 1.74105 -0.0968202 -0.826016 -0.555269 + -0.573582 0.116783 1.81176 -0.0538481 -0.892294 -0.448233 + -0.55155 0.072756 1.88162 0.0649407 -0.921598 -0.382675 + -0.549722 0.058582 1.96297 0.0975851 -0.991879 -0.0815633 + -0.621823 0.208035 1.68151 -0.180549 -0.784136 -0.593745 + -0.450434 0.140476 1.73692 -0.0949033 -0.904495 -0.41579 + -0.429275 0.104849 1.80763 -0.0286014 -0.96104 -0.274927 + -0.42024 0.092654 1.88995 0.0786705 -0.97761 -0.195165 + -0.418412 0.078475 1.97131 0.123636 -0.988986 -0.0813699 + -0.651443 0.258561 1.6246 -0.18797 -0.717513 -0.670703 + -0.475349 0.171371 1.66461 -0.195166 -0.877559 -0.437951 + -0.325697 0.165847 1.65678 -0.00118046 -0.927848 -0.372958 + -0.300782 0.134952 1.72909 0.0606308 -0.935267 -0.348712 + -0.289261 0.11663 1.80043 0.0949077 -0.971575 -0.216876 + -0.504969 0.221988 1.60774 -0.245306 -0.762138 -0.599142 + -0.372127 0.188644 1.6019 -0.0691583 -0.825454 -0.560216 + -0.172667 0.169411 1.65301 0.0849025 -0.946659 -0.310851 + -0.140145 0.15994 1.71921 0.135867 -0.958466 -0.250766 + -0.128624 0.141613 1.79056 0.163049 -0.953283 -0.254294 + -0.411782 0.241094 1.55345 -0.280466 -0.850581 -0.444803 + -0.219097 0.192294 1.59817 0.0299338 -0.97964 -0.198516 + -0.077383 0.188657 1.64287 0.293998 -0.882087 -0.368085 + -0.044861 0.179094 1.70903 0.399989 -0.873307 -0.278107 + -0.291654 0.187008 1.56173 -0.247922 -0.960947 0.122945 + -0.185978 0.19434 1.55923 0.213793 -0.883714 -0.416344 + -0.113421 0.19954 1.59562 0.26995 -0.830748 -0.48681 + -0.023065 0.212553 1.65228 0.253661 -0.949396 -0.18521 + -0.250036 0.204145 1.52465 0.117748 -0.750248 -0.650587 + -0.108752 0.245665 1.55153 0.421344 -0.548282 -0.722396 + -0.059102 0.223437 1.60503 0.443465 -0.633577 -0.63397 + 0.023071 0.212553 1.65228 -0.232932 -0.931158 -0.280512 + -0.023065 0.214616 1.66891 0.49486 -0.868783 -0.0181345 + -0.17281 0.255556 1.517 0.31142 -0.477568 -0.821552 + -0.094316 0.306883 1.5237 0.490621 -0.118273 -0.863309 + -0.066104 0.284205 1.55838 0.622683 -0.326266 -0.711208 + -0.016455 0.26198 1.61187 0.347317 -0.362888 -0.864687 + -0.24888 0.264298 1.48646 0.270889 -0.499393 -0.822937 + -0.170386 0.315624 1.49316 0.336756 -0.410803 -0.847252 + -0.044666 0.359282 1.56194 0.40639 -0.713754 -0.57044 + -0.016455 0.33661 1.59661 0.298498 -0.480461 -0.824655 + -0.224871 0.336079 1.46153 0.290301 -0.375165 -0.880328 + -0.044666 0.372658 1.50717 0.175735 -0.837016 -0.518191 + 0.044666 0.372658 1.50717 -0.244256 -0.774419 -0.583622 + 0.044666 0.359282 1.56194 -0.486855 -0.713556 -0.503796 + 0.016455 0.33661 1.59661 -0.298489 -0.480461 -0.824658 + -0.273213 0.382957 1.43094 0.31134 -0.226667 -0.92287 + -0.099152 0.393027 1.47549 0.170834 -0.570332 -0.803454 + 0.044471 0.592403 1.28836 -0.0305786 -0.70551 -0.70804 + -0.338859 0.425044 1.39604 0.398628 -0.302546 -0.865772 + -0.214573 0.417707 1.45135 0.176207 -0.273014 -0.945735 + -0.171573 0.58754 1.30419 0.0149532 -0.710869 -0.703165 + -0.056152 0.56286 1.32833 -0.04853 -0.678418 -0.733072 + -0.372812 0.484198 1.35418 0.452908 -0.369414 -0.811423 + -0.28022 0.459794 1.41645 0.243815 -0.448458 -0.859907 + -0.222009 0.62574 1.26182 0.00246949 -0.699496 -0.714633 + -0.056152 0.989814 0.876228 -0.0716674 -0.711215 -0.699312 + 0.044471 1.01944 0.836308 -0.251443 -0.770222 -0.586118 + -0.405591 0.540158 1.30665 0.424081 -0.468904 -0.77478 + -0.330656 0.497994 1.37408 0.300375 -0.501479 -0.811353 + -0.280438 0.691045 1.20391 -0.191637 -0.620482 -0.760446 + -0.114581 1.05512 0.818315 0.0988504 -0.841224 -0.531573 + -0.442128 0.582833 1.25434 0.42768 -0.547012 -0.71963 + -0.363435 0.553954 1.32656 0.257175 -0.53453 -0.805071 + -0.28423 0.755168 1.16405 0.0341988 -0.690832 -0.722206 + -0.367227 0.618077 1.2867 0.124615 -0.557305 -0.820903 + -0.380763 0.667435 1.2396 0.311923 -0.630579 -0.710686 + -0.293968 0.803753 1.11209 0.0529057 -0.772095 -0.633301 + -0.455664 0.632193 1.20725 0.328751 -0.596318 -0.732344 + -0.460065 0.688236 1.15398 0.354125 -0.721347 -0.595193 + -0.468769 0.724255 1.09359 0.28326 -0.843411 -0.456533 + -0.3905 0.71602 1.18765 0.350846 -0.698669 -0.623513 + -0.399204 0.752039 1.12726 0.432839 -0.791565 -0.431365 + -0.30355 0.842645 1.03113 0.46646 -0.822832 -0.324598 + -0.468899 0.754491 1.02342 0.212639 -0.948744 -0.233814 + -0.462394 0.767838 0.951901 0.0608051 -0.973128 -0.222091 + -0.419837 0.762911 1.05283 0.40376 -0.89112 -0.207083 + -0.324183 0.853516 0.956702 0.213502 -0.976913 0.00758949 + -0.305268 0.847475 0.879167 0.729367 -0.676845 0.0995277 + -0.124163 1.09392 0.737303 0.388621 -0.907413 -0.159923 + -0.525597 0.769822 0.974665 -0.243091 -0.908593 -0.339655 + -0.436888 0.782429 0.890828 -0.118575 -0.980616 -0.155989 + -0.413333 0.776258 0.981316 0.431472 -0.900803 -0.0488351 + -0.58699 0.789665 0.976497 -0.337743 -0.894964 -0.291494 + -0.500091 0.784326 0.913543 -0.186117 -0.94779 -0.258949 + -0.405465 0.790071 0.823591 -0.165292 -0.977783 -0.128911 + -0.394417 0.770217 0.903782 0.213678 -0.975171 0.0581723 + -0.667167 0.814158 1.00787 -0.381927 -0.881872 -0.276467 + -0.566088 0.802553 0.906574 -0.288792 -0.926904 -0.239682 + -0.479189 0.797301 0.843669 -0.191591 -0.965331 -0.177281 + -0.357763 0.788004 0.755173 0.0895674 -0.964573 -0.248148 + -0.362994 0.777859 0.836545 0.310881 -0.950424 0.00686539 + -0.754306 0.855908 0.997757 -0.475686 -0.857574 -0.195679 + -0.74951 0.875033 0.919634 -0.471692 -0.831234 -0.294206 + -0.662371 0.833281 0.929749 -0.378801 -0.892376 -0.245307 + -0.554784 0.816955 0.832629 -0.302037 -0.918025 -0.256912 + -0.431487 0.795234 0.775251 -0.188452 -0.962806 -0.193622 + -0.821812 0.89354 1.03638 -0.296111 -0.916493 -0.268996 + -0.814715 0.902242 0.955106 -0.670643 -0.703059 -0.236528 + -0.800184 0.935 0.882766 -0.58176 -0.723686 -0.37126 + -0.75087 0.903341 0.841204 -0.535807 -0.785773 -0.308985 + -0.651067 0.847683 0.855804 -0.395862 -0.870878 -0.291316 + -0.838622 0.960135 0.881234 -0.166581 -0.88348 -0.437852 + -0.824091 0.992893 0.808894 0.0105744 -0.763329 -0.645923 + -0.796283 1.05165 0.751717 -0.464893 -0.547181 -0.696037 + -0.801544 0.963308 0.804335 -0.893126 -0.344565 -0.289137 + -0.738356 0.929695 0.768755 -0.514745 -0.696352 -0.500132 + -0.880516 0.967757 0.849032 0.0764414 -0.84054 -0.53633 + -0.864227 1.02491 0.785246 -0.0796097 -0.684865 -0.724308 + -0.836419 1.08358 0.728018 -0.177641 -0.52834 -0.830241 + -0.775011 1.09626 0.700851 0.219363 -0.404125 -0.888011 + -0.780272 1.008 0.75352 -0.739608 -0.361515 -0.567703 + -0.912504 1.00652 0.803684 -0.229923 -0.662436 -0.712961 + -0.925344 1.0704 0.75084 -0.381783 -0.518897 -0.764844 + -0.908048 1.13717 0.722007 -0.292062 -0.270252 -0.917422 + -0.819123 1.15034 0.699185 -0.115459 -0.125561 -0.985344 + -0.735288 1.17414 0.702162 -0.574918 -0.0112688 -0.818134 + -1.02022 1.0493 0.8338 -0.420134 -0.335859 -0.843022 + -1.0018 1.08846 0.824958 -0.490644 -0.316394 -0.811889 + -1.01464 1.15234 0.772115 -0.69356 -0.413412 -0.589971 + -1.00783 1.21606 0.740161 -0.498853 -0.246026 -0.831034 + -0.899154 1.20921 0.706027 -0.175162 -0.039471 -0.983748 + -1.15449 1.25662 0.841506 0.565143 0.0883656 -0.820247 + -1.13607 1.2957 0.832614 -0.18194 -0.360993 -0.914649 + -1.10714 1.32608 0.795797 -0.534369 -0.406833 -0.740903 + -1.10033 1.38979 0.763843 -0.296152 -0.327334 -0.897299 + -1.20934 1.39286 0.775928 0.847249 0.0204626 -0.530802 + -1.237 1.53076 0.60848 0.714429 -0.153688 -0.68262 + -1.24213 1.58922 0.591819 0.565643 -0.179735 -0.804825 + -1.21447 1.45124 0.759218 0.991328 0.0526531 -0.1204 + -1.33145 1.63145 0.543685 -0.543737 -0.839083 -0.0170354 + -1.33145 1.63145 0.543685 0.378768 -0.222766 -0.898282 + -1.21447 1.45124 0.759218 -0.379993 -0.544417 -0.747807 + -1.09286 1.46508 0.743649 0.0027724 -0.227357 -0.973807 + -0.998936 1.2881 0.724181 -0.320784 -0.129488 -0.938259 + -1.18281 1.61753 0.660593 0.275143 -0.564068 -0.77854 + -1.06473 1.5217 0.727976 -0.27238 -0.469576 -0.839826 + -0.970805 1.34472 0.708509 -0.0359701 -0.0326016 -0.998821 + -0.894772 1.27125 0.713167 -0.0207977 0.145216 -0.989181 + -0.7794 1.22822 0.700495 -0.199746 0.0276441 -0.979458 + -1.1712 1.6447 0.623927 -0.24367 -0.832528 -0.497517 + -1.00422 1.52625 0.67009 -0.00280247 -0.480093 -0.877213 + -0.932428 1.43269 0.737749 0.381381 -0.0696506 -0.92179 + -0.856396 1.35913 0.742356 0.168024 0.308933 -0.936124 + -0.775018 1.29018 0.707586 -0.0104874 0.387028 -0.922008 + -1.27714 1.73384 0.366533 -0.374423 -0.912398 -0.165342 + -0.799592 1.37863 0.763184 0.241643 0.326155 -0.91391 + -1.3723 1.80029 0.286041 -0.627611 -0.711864 0.315205 + -1.39582 1.80824 0.253663 -0.46484 -0.795354 -0.389019 + -1.45718 1.86782 0.25627 -0.503789 -0.747313 -0.433266 + -1.41241 1.88004 0.223108 -0.297405 -0.475482 -0.827929 + -1.35106 1.82046 0.2205 -0.0313051 -0.583739 -0.811338 + -1.56568 1.92661 0.343843 -0.551292 -0.823554 -0.133553 + -1.54235 1.92454 0.276228 -0.472824 -0.880222 -0.040572 + -1.52271 1.90991 0.211972 -0.234054 -0.95291 -0.192823 + -1.42618 1.90793 0.206006 -0.0561791 -0.788695 -0.612213 + -1.66635 1.9747 0.290952 -0.535822 -0.817738 0.210239 + -1.64671 1.96007 0.226696 -0.464553 -0.880411 0.095215 + -1.61945 1.92603 0.158052 -0.33048 -0.940355 -0.0807135 + -1.50248 1.93303 0.158131 0.00728966 -0.929354 -0.369119 + -1.40595 1.93105 0.152166 0.15712 -0.870197 -0.466981 + -1.77158 2.02597 0.179548 -0.621402 -0.783101 -0.0247466 + -1.73583 2.03045 0.142996 -0.460332 -0.859672 -0.221492 + -1.80703 2.10814 -0.067965 0.195607 -0.7968 -0.571706 + -2.12832 2.55027 -0.13397 -0.689854 -0.160919 -0.705838 + -2.17394 2.66979 -0.105973 -0.750962 -0.0705465 -0.656566 + -2.25662 2.70147 -0.002845 -0.79765 -0.14991 -0.584194 + -2.18378 2.5777 -0.062271 -0.804477 -0.150715 -0.574545 + -2.26645 2.60929 0.040805 -0.813158 -0.171333 -0.556254 + -2.2479 2.5128 0.042531 -0.820598 -0.153481 -0.550511 + -2.37571 3.04191 0.113286 -0.832983 -0.0400175 -0.55185 + -2.38088 3.25584 0.119155 -0.810771 0.0473385 -0.583446 + -2.25132 3.25444 -0.035226 -0.721731 0.0259835 -0.691686 + -2.43932 3.14098 0.203898 -0.84968 -0.0239841 -0.526753 + -2.44382 3.3279 0.219741 -0.842178 0.0874708 -0.532058 + -2.28491 3.35096 0.002008 -0.765119 0.0445854 -0.642344 + -2.17411 3.43345 -0.107079 -0.704157 0.035426 -0.70916 + -2.14052 3.33694 -0.144314 -0.664055 0.0142197 -0.747548 + -2.50785 3.21052 0.319844 -0.873912 0.00319087 -0.486073 + -2.51801 3.37872 0.359921 -0.851918 0.0551105 -0.520766 + -2.44711 3.46454 0.261678 -0.830247 0.0761797 -0.552166 + -2.34785 3.42302 0.102595 -0.819047 0.111565 -0.562775 + -2.26119 3.51529 -0.00802 -0.771448 0.0498969 -0.634333 + -2.58204 3.26134 0.460024 -0.873316 -0.00277948 -0.487147 + -2.59962 3.50006 0.490758 -0.846954 0.00289049 -0.531659 + -2.52873 3.58587 0.392516 -0.832929 -0.00277913 -0.553372 + -2.47465 3.68253 0.300103 -0.840098 -0.0532368 -0.539816 + -2.36046 3.55681 0.151055 -0.830931 0.00181216 -0.556373 + -2.65306 3.40136 0.58571 -0.871641 -0.0167948 -0.489857 + -2.66362 3.68599 0.593915 -0.867821 -0.00513404 -0.49685 + -2.61641 3.79249 0.510856 -0.857105 -0.0178233 -0.514833 + -2.56234 3.88914 0.418443 -0.853785 -0.0404341 -0.519052 + -2.71706 3.58728 0.688875 -0.893354 -0.0102524 -0.449236 + -2.73856 3.90859 0.73135 -0.907438 2.0857e-005 -0.420185 + -2.69136 4.01509 0.648292 -0.887157 -0.00997291 -0.461361 + -2.64914 4.11155 0.555025 -0.884528 -0.0275563 -0.465673 + -2.51631 3.99197 0.330737 -0.859935 -0.0475704 -0.508182 + -2.76012 3.49468 0.787875 -0.91455 -0.016034 -0.404154 + -2.81888 3.72601 0.929804 -0.940141 0.00992018 -0.340642 + -2.77582 3.81861 0.830804 -0.928393 0.00401201 -0.371577 + -2.80241 4.17046 0.902182 -0.94793 0.00487846 -0.318442 + -2.77019 4.2544 0.796595 -0.932733 0.00112957 -0.360565 + -2.85327 3.64454 1.03711 -0.947445 0.0200021 -0.319293 + -2.86699 4.00351 1.11354 -0.965229 0.0167854 -0.260867 + -2.83967 4.08039 1.00158 -0.956757 0.00987816 -0.29072 + -2.83456 4.40331 1.01987 -0.964107 0.0603643 -0.258562 + -2.90137 3.92205 1.22085 -0.96863 0.0299047 -0.246702 + -2.89466 4.25686 1.24234 -0.975151 0.0444389 -0.217036 + -2.86733 4.33374 1.13038 -0.972457 0.0521519 -0.227171 + -2.92656 3.84275 1.33099 -0.972578 0.0410079 -0.228934 + -2.9469 4.10375 1.46152 -0.978346 0.0458449 -0.201833 + -2.92172 4.18305 1.35138 -0.978451 0.0445725 -0.201611 + -2.89572 4.50276 1.32343 -0.974935 0.149329 -0.164933 + -2.8645 4.56131 1.20821 -0.969388 0.161899 -0.184596 + -2.95881 3.75803 1.43673 -0.973203 0.0538567 -0.22355 + -2.97224 4.01901 1.5641 -0.979032 0.0505875 -0.197327 + -2.94816 4.34934 1.53556 -0.981947 0.124941 -0.14202 + -2.92278 4.42895 1.43246 -0.980037 0.133249 -0.147557 + -2.85402 4.73817 1.43067 -0.949257 0.295463 -0.10776 + -2.98331 3.6646 1.53557 -0.977377 0.0574731 -0.203548 + -2.99674 3.92558 1.66294 -0.97907 0.0488919 -0.197565 + -2.9735 4.26459 1.63814 -0.981855 0.125075 -0.142537 + -2.90846 4.59979 1.64576 -0.967813 0.247346 -0.046447 + -2.88307 4.67932 1.54261 -0.961713 0.263951 -0.0737469 + -3.01117 3.57084 1.63576 -0.979552 0.0589202 -0.192371 + -3.0208 3.83789 1.76322 -0.981289 0.0477542 -0.186525 + -2.99948 4.17727 1.73478 -0.982301 0.120258 -0.143604 + -2.95514 4.4525 1.85547 -0.970935 0.235756 -0.0412756 + -2.92916 4.53973 1.75878 -0.96645 0.254427 -0.0352258 + -3.03359 3.47522 1.73278 -0.985593 0.0485326 -0.162024 + -3.04323 3.74227 1.86023 -0.985333 0.0410416 -0.165636 + -3.02354 4.08968 1.8351 -0.98447 0.117686 -0.130267 + -3.0531 3.37906 1.83273 -0.990131 0.0334703 -0.136087 + -3.06252 3.66391 1.96755 -0.990077 0.0307512 -0.137123 + -3.04636 4.01302 1.94028 -0.98691 0.115826 -0.112223 + -2.99596 4.31437 2.09793 -0.971905 0.23494 -0.0142546 + -2.97314 4.39094 1.99271 -0.970877 0.237901 -0.0283056 + -3.06928 3.30294 1.94597 -0.995183 0.00961897 -0.097564 + -3.0787 3.58771 2.08074 -0.995121 0.0150453 -0.0975064 + -3.06565 3.93467 2.04759 -0.990221 0.104895 -0.0919771 + -3.07647 3.21742 2.04991 -0.997908 -0.0162816 -0.0625671 + -3.08895 3.52185 2.21422 -0.998323 -0.000920435 -0.0578908 + -3.0818 3.87102 2.16324 -0.993673 0.0951125 -0.0597268 + -3.0344 4.15634 2.33024 -0.974326 0.223808 0.0244825 + -3.01826 4.2199 2.21454 -0.973043 0.230585 -0.00422352 + -3.08109 3.14025 2.16597 -0.99861 -0.0419668 -0.0319002 + -3.09356 3.44468 2.33028 -0.999739 -0.0187587 -0.0130365 + -3.09204 3.80515 2.29671 -0.996723 0.0797864 -0.0133175 + -3.05381 2.77414 2.08209 -0.996405 -0.084485 -0.00629648 + -3.0788 3.08234 2.28906 -0.997644 -0.0664127 0.0172218 + -3.08929 3.3725 2.4613 -0.998404 -0.0420702 0.037683 + -3.09588 3.72791 2.47051 -0.997261 0.0645251 0.0361433 + -3.06812 3.01108 2.40629 -0.994893 -0.0861612 0.0525723 + -3.07861 3.30131 2.57859 -0.994863 -0.05994 0.0815805 + -3.09161 3.65564 2.60148 -0.995924 0.0343002 0.0834155 + -3.04793 4.00287 2.62426 -0.976937 0.187824 0.101568 + -3.04409 4.0802 2.45051 -0.977306 0.203266 0.059628 + -3.03966 2.71913 2.35896 -0.992734 -0.104479 0.0596978 + -3.05657 2.97725 2.54149 -0.990005 -0.0999076 0.0995394 + -3.0629 3.26618 2.70544 -0.989233 -0.0753762 0.125446 + -3.07773 3.62876 2.73185 -0.99218 0.0308193 0.120949 + -3.02916 2.70248 2.502 -0.985016 -0.130322 0.112954 + -3.03511 2.96217 2.67901 -0.981701 -0.116037 0.150994 + -3.04144 3.2511 2.84297 -0.98389 -0.0914496 0.153614 + -3.06202 3.59362 2.8587 -0.990392 0.018643 0.137027 + -3.02245 3.93634 2.89569 -0.971203 0.17576 0.160849 + -2.99042 2.45789 2.48404 -0.965662 -0.205132 0.159428 + -3.00339 2.67289 2.63705 -0.970397 -0.162974 0.178237 + -3.00934 2.93258 2.81406 -0.97263 -0.138556 0.186526 + -3.01648 3.21906 2.97146 -0.974828 -0.114358 0.191399 + -3.04423 3.55852 2.9869 -0.986437 0.00130627 0.164133 + -2.93387 2.23435 2.47923 -0.94443 -0.28361 0.166182 + -2.9537 2.39974 2.60716 -0.950611 -0.233367 0.204643 + -2.96667 2.61474 2.76017 -0.954502 -0.196147 0.224615 + -2.97642 2.9104 2.94847 -0.956968 -0.16692 0.237381 + -2.98356 3.19688 3.10587 -0.963389 -0.139286 0.229087 + -2.90194 2.0281 2.26247 -0.92667 -0.353867 0.126728 + -2.83818 1.92807 2.39192 -0.922833 -0.360306 0.136231 + -2.88684 2.14071 2.57242 -0.931236 -0.309609 0.192202 + -2.90666 2.30602 2.7003 -0.934106 -0.263819 0.240509 + -2.92343 2.55214 2.87299 -0.93494 -0.22638 0.273201 + -2.76286 1.69898 2.15471 -0.925325 -0.372706 0.0697392 + -2.70903 1.55131 2.28208 -0.92923 -0.35873 0.0885699 + -2.78184 1.79753 2.44243 -0.922195 -0.356699 0.149407 + -2.83049 2.01008 2.62288 -0.920057 -0.332534 0.207163 + -2.72062 1.56338 1.99899 -0.923537 -0.378857 0.0595535 + -2.66678 1.41571 2.12635 -0.930263 -0.361337 0.0636041 + -2.59055 1.28583 2.30111 -0.882091 -0.442249 0.162268 + -2.63475 1.40743 2.3743 -0.892844 -0.411875 0.182176 + -2.70756 1.65364 2.53465 -0.904637 -0.381123 0.190729 + -2.78036 1.65222 1.87671 -0.844322 -0.508604 0.168649 + -2.65077 1.36379 2.06668 -0.930127 -0.363955 0.0489987 + -2.57454 1.23391 2.24143 -0.869265 -0.472003 0.146941 + -2.62574 1.29734 2.02858 -0.905831 -0.423349 0.015689 + -2.57253 1.20236 2.14269 -0.874843 -0.477347 0.0824048 + -2.49688 1.14894 2.35241 -0.797846 -0.577688 0.172392 + -2.47789 1.15753 2.47854 -0.801425 -0.551778 0.230782 + -2.52209 1.27912 2.55174 -0.844095 -0.454112 0.285106 + -2.61058 1.2738 1.93234 -0.91332 -0.407003 0.013949 + -2.55736 1.17874 2.0464 -0.89168 -0.449123 0.0565332 + -2.49804 1.0787 2.15467 -0.845913 -0.49919 0.187725 + -2.49487 1.11739 2.25366 -0.811537 -0.547891 0.203034 + -2.3746 1.0412 2.47782 -0.737199 -0.640993 0.213693 + -2.54855 1.13661 1.98176 -0.923823 -0.352456 0.149419 + -2.48922 1.03649 2.08999 -0.867064 -0.450973 0.211715 + -2.3982 0.9821 2.26839 -0.763188 -0.589093 0.265543 + -2.39503 1.02079 2.36737 -0.778268 -0.575211 0.251857 + -2.50013 1.00485 1.98979 -0.886277 -0.414869 0.205907 + -2.42456 0.923891 2.07661 -0.818905 -0.496968 0.287082 + -2.41365 0.955533 2.1768 -0.774064 -0.567695 0.280263 + -2.26307 0.891843 2.39772 -0.675971 -0.708013 0.204404 + -2.24738 0.891026 2.48613 -0.692788 -0.696211 0.187975 + -2.44299 0.898732 1.98359 -0.831434 -0.499844 0.242637 + -2.31965 0.836749 2.22674 -0.825006 -0.373394 0.424195 + -2.27852 0.865364 2.30618 -0.762481 -0.50065 0.409844 + -2.17378 0.795248 2.41202 -0.706789 -0.56219 0.429408 + -2.14557 0.806572 2.49401 -0.640421 -0.739745 0.206492 + -2.33809 0.811585 2.13373 -0.774895 -0.582227 0.246066 + -2.24336 0.743201 2.25177 -0.697289 -0.652148 0.297474 + -2.21492 0.766726 2.33263 -0.734153 -0.481645 0.478578 + -2.08783 0.74786 2.47611 -0.730279 -0.512078 0.452181 + -2.05961 0.759091 2.55805 -0.647539 -0.745887 0.156029 + -2.2558 0.73119 2.16118 -0.735008 -0.629485 0.252016 + -2.15809 0.695136 2.32363 -0.73305 -0.570873 0.369785 + -2.12965 0.71866 2.40448 -0.748755 -0.436536 0.498801 + -2.04338 0.641992 2.48507 -0.808803 -0.352878 0.470442 + -2.00156 0.671104 2.55665 -0.828498 -0.321208 0.458713 + -2.26814 0.703118 2.0762 -0.789196 -0.499355 0.357509 + -2.17751 0.671424 2.24169 -0.752863 -0.576913 0.316809 + -2.09016 0.602344 2.32814 -0.763927 -0.578689 0.285542 + -2.07074 0.626055 2.41008 -0.79726 -0.480614 0.365221 + -2.28774 0.657029 1.99443 -0.73705 -0.571119 0.361359 + -2.18985 0.643355 2.15671 -0.711715 -0.641943 0.285256 + -2.10681 0.59144 2.24863 -0.729728 -0.642076 0.235023 + -1.99277 0.524004 2.43263 -0.735676 -0.640561 0.220141 + -1.97127 0.522689 2.50491 -0.780389 -0.54591 0.304918 + -2.29048 0.621709 1.9102 -0.667492 -0.702247 0.247594 + -2.18733 0.613612 2.07243 -0.620495 -0.73439 0.27506 + -2.1043 0.561692 2.16436 -0.701603 -0.679374 0.214952 + -2.00942 0.513183 2.35318 -0.71777 -0.668456 0.194866 + -2.28961 0.596452 1.82015 -0.687799 -0.695352 0.208371 + -2.19008 0.578291 1.98821 -0.628913 -0.714082 0.307498 + -2.11079 0.542994 2.08414 -0.708206 -0.657741 0.256555 + -2.03023 0.518534 2.27931 -0.65453 -0.739604 0.156767 + -2.28026 0.562414 1.73771 -0.679328 -0.714799 0.166061 + -2.18691 0.539241 1.90664 -0.6342 -0.724581 0.269764 + -2.10762 0.50394 2.00259 -0.640231 -0.724305 0.255904 + -2.03672 0.499833 2.1991 -0.65951 -0.726239 0.193967 + -2.24905 0.521653 1.65891 -0.684254 -0.716505 0.135709 + -2.17756 0.505198 1.82421 -0.630668 -0.737194 0.242493 + -2.10575 0.4792 1.92564 -0.631569 -0.735123 0.246405 + -2.05096 0.495578 2.12347 -0.484012 -0.859925 0.162056 + -2.33088 0.588432 1.51684 -0.744028 -0.663789 0.0762042 + -2.22442 0.481562 1.57934 -0.694638 -0.708134 0.126589 + -2.17066 0.469328 1.74214 -0.635417 -0.740743 0.218051 + -2.09886 0.44333 1.84357 -0.486876 -0.838458 0.244825 + -2.0491 0.470745 2.04648 -0.495894 -0.846812 0.19235 + -2.30903 0.550103 1.42763 -0.750388 -0.655746 0.0831516 + -2.18976 0.4357 1.50058 -0.672905 -0.732342 0.104283 + -2.14603 0.429243 1.66256 -0.598331 -0.778142 0.191037 + -2.08491 0.41771 1.76634 -0.472304 -0.848543 0.238546 + -2.04536 0.459435 1.97107 -0.214931 -0.962309 0.16663 + -2.27437 0.504326 1.34892 -0.723764 -0.685416 0.0798187 + -2.16101 0.400339 1.41963 -0.643431 -0.761764 0.0755844 + -2.12044 0.391848 1.58513 -0.560477 -0.810525 0.170045 + -2.05932 0.380315 1.68891 -0.289083 -0.92232 0.256431 + -2.03142 0.433901 1.89389 -0.251125 -0.944618 0.211263 + -2.3602 0.564961 1.02569 -0.78062 -0.621002 0.0706385 + -2.25227 0.468723 1.25478 -0.697441 -0.713735 0.0644751 + -2.13629 0.374728 1.33399 -0.611773 -0.79012 0.037991 + -2.09168 0.356484 1.50419 -0.52082 -0.840147 0.151325 + -2.03896 0.35597 1.61188 -0.262853 -0.931513 0.251379 + -2.41926 0.62912 0.887167 -0.834734 -0.550042 0.0259435 + -2.33831 0.524184 0.926321 -0.72016 -0.693218 0.0286187 + -2.22755 0.443112 1.16914 -0.636467 -0.77051 0.0349839 + -2.11923 0.35999 1.24832 -0.541833 -0.839667 -0.0370968 + -2.06554 0.327366 1.42382 -0.458538 -0.882794 0.102062 + -2.39736 0.588431 0.787844 -0.834602 -0.523427 -0.171649 + -2.30226 0.493857 0.894251 -0.593066 -0.804758 -0.0252384 + -2.19151 0.412783 1.13707 -0.558935 -0.828683 -0.0295925 + -2.10625 0.362893 1.15849 -0.572301 -0.81804 -0.0572907 + -2.04848 0.312717 1.33819 -0.402113 -0.914284 0.0488823 + -2.36268 0.60947 0.695201 -0.835358 -0.403851 -0.372937 + -2.35739 0.555668 0.72119 -0.776904 -0.546223 -0.313146 + -2.3056 0.499838 0.79589 -0.61471 -0.786615 -0.0580366 + -2.17853 0.415688 1.04724 -0.503147 -0.861923 -0.0627045 + -2.33391 0.590818 0.650907 -0.78666 -0.467235 -0.403555 + -2.28997 0.514976 0.652872 -0.713512 -0.619832 -0.326663 + -2.23818 0.459146 0.727572 -0.593176 -0.802481 -0.0645463 + -2.18187 0.421669 0.948884 -0.550253 -0.834858 -0.0153152 + -2.2873 0.572308 0.595769 -0.741835 -0.45959 -0.48832 + -2.24336 0.496377 0.597683 -0.680646 -0.579164 -0.448654 + -2.19667 0.44916 0.60447 -0.539142 -0.767248 -0.347357 + -2.20274 0.435055 0.681698 -0.580149 -0.805973 -0.117619 + -0.713836 1.20864 0.668001 -0.550473 0.327647 -0.767872 + -0.76307 1.05071 0.687555 -0.865885 -0.130153 -0.483015 + -0.721154 0.972399 0.702789 -0.591722 -0.587199 -0.552325 + -0.718215 1.30967 0.728414 0.224483 0.627249 -0.745766 + -0.687688 1.26297 0.695711 0.126179 0.626822 -0.768878 + -0.703623 1.13731 0.60416 -0.764048 0.101558 -0.637116 + -0.741618 1.08512 0.653345 -0.824341 -0.0358251 -0.564958 + -0.667994 1.35128 0.798747 -0.0132149 0.405154 -0.914153 + -0.637467 1.30458 0.766045 -0.553887 0.636284 -0.536984 + -0.677474 1.19172 0.63192 -0.755109 0.497765 -0.426661 + -0.793653 1.40654 0.767637 0.0632094 -0.107809 -0.99216 + -0.662055 1.37911 0.803149 -0.456809 -0.424754 -0.781607 + -0.631551 1.33229 0.770247 -0.955349 -0.0691095 -0.287285 + -0.671558 1.21943 0.636123 -0.987962 0.15401 -0.01459 + -0.664457 1.19884 0.575777 -0.801503 0.195911 -0.564988 + -0.831875 1.44489 0.765211 0.345372 0.232124 -0.909305 + -0.694071 1.41874 0.7437 -0.588084 -0.77514 -0.230902 + -0.663568 1.37192 0.710797 -0.897815 -0.419413 0.134243 + -0.656467 1.35125 0.650401 -0.909617 0.1083 -0.401084 + -0.814632 1.53065 0.792667 -0.0193719 -0.0446855 -0.998813 + -0.732294 1.45709 0.741273 -0.556268 -0.16247 -0.814966 + -0.797789 1.57132 0.771423 -0.486179 -0.653187 -0.580497 + -0.715451 1.49768 0.71998 -0.61024 -0.151298 -0.777635 + -0.649712 1.43033 0.669226 -0.703279 0.12038 -0.700647 + -0.60316 1.24951 0.528621 -0.626123 0.163761 -0.762333 + -0.939812 1.7023 0.659365 0.0514114 -0.616467 -0.7857 + -0.097276 1.11213 0.652366 0.640076 -0.765317 -0.0677761 + -0.05827 1.15812 0.604717 0.522918 -0.597341 -0.608063 + -0.069667 1.21195 0.547068 0.540397 -0.65274 -0.530944 + -0.037458 1.25754 0.527104 0.277973 -0.849107 -0.449164 + 0.037461 1.25754 0.527104 -0.287828 -0.866197 -0.408483 + 0.069674 1.21195 0.547068 -0.617967 -0.651894 -0.439489 + 0.106297 0.963787 0.855306 -0.302552 -0.778666 -0.549675 + 0.159893 0.617168 1.26427 -0.00018195 -0.723562 -0.690259 + -0.278381 0.865595 0.794182 0.793877 -0.57517 0.19733 + -0.196947 0.932788 0.689999 0.825396 -0.522807 0.213058 + -0.157942 0.978861 0.642399 0.827801 -0.522574 0.204111 + -0.241614 0.889583 0.738233 0.791228 -0.560691 0.244097 + -0.288895 0.827734 0.717356 0.635839 -0.771518 -0.0216514 + -0.244228 0.870942 0.669121 0.68001 -0.727993 -0.0872503 + -0.219008 0.907592 0.615839 0.652838 -0.737088 -0.174652 + -0.121262 1.0174 0.600437 0.971148 -0.221631 -0.0880376 + -0.120096 1.10255 0.623764 0.401105 -0.241361 -0.883663 + -0.326227 0.801761 0.780547 0.626899 -0.775722 0.0724724 + -0.320431 0.813893 0.691933 0.276914 -0.917187 -0.286508 + -0.309675 0.843907 0.623746 0.234508 -0.872709 -0.428234 + -0.284455 0.880559 0.570464 0.325062 -0.838464 -0.437394 + -0.405103 0.809844 0.705145 -0.138438 -0.935576 -0.324859 + -0.394347 0.839772 0.636909 -0.157283 -0.878174 -0.451743 + -0.376098 0.87127 0.570549 -0.117394 -0.848915 -0.515327 + -0.268356 0.921192 0.510285 0.314855 -0.672168 -0.670117 + -0.182329 0.946137 0.573879 0.682998 -0.663204 -0.306064 + -0.5284 0.831478 0.762472 -0.344344 -0.878752 -0.330487 + -0.50752 0.852181 0.689413 -0.351198 -0.839542 -0.414523 + -0.489271 0.88368 0.623056 -0.383332 -0.760798 -0.523682 + -0.464 0.918458 0.559421 -0.396583 -0.667741 -0.629955 + -0.359999 0.911817 0.510322 -0.120931 -0.733906 -0.668399 + -0.638553 0.874038 0.783357 -0.419054 -0.821211 -0.387307 + -0.617673 0.894655 0.710248 -0.459057 -0.761781 -0.457118 + -0.593 0.932484 0.647928 -0.475582 -0.645681 -0.597426 + -0.56773 0.967259 0.584292 -0.516091 -0.555809 -0.651711 + -0.44088 0.967001 0.506741 -0.420403 -0.499455 -0.7575 + -0.696481 1.01014 0.64042 -0.563423 -0.467338 -0.681285 + -0.658486 1.06232 0.591236 -0.555324 -0.366803 -0.746371 + -0.623498 1.11123 0.54193 -0.55144 -0.212606 -0.806668 + -0.532742 1.01616 0.534987 -0.477022 -0.399104 -0.783049 + -0.562201 1.16198 0.494825 -0.467206 -0.0966409 -0.878851 + -0.508158 1.07115 0.493348 -0.449762 -0.267959 -0.852005 + -0.416295 1.0219 0.465053 -0.416386 -0.309639 -0.854837 + -0.336879 0.960448 0.457692 -0.0367639 -0.638476 -0.768764 + -0.248564 0.979545 0.481016 0.439468 -0.591959 -0.675613 + -0.568156 1.31347 0.519837 -0.248861 0.375811 -0.892656 + -0.520369 1.21784 0.473467 -0.0513135 0.205582 -0.977294 + -0.466326 1.12701 0.471992 -0.371089 -0.0715025 -0.92584 + -0.390225 1.08754 0.441956 -0.417755 -0.14868 -0.896312 + -0.312808 1.02384 0.415092 -0.0392679 -0.411501 -0.910563 + -0.596406 1.32859 0.547445 -0.713339 0.233785 -0.660675 + -0.489027 1.27485 0.512732 -0.189612 0.389764 -0.901183 + -0.637336 1.51437 0.650661 -0.734374 -0.0989793 -0.671489 + -0.703075 1.58181 0.701465 -0.470371 -0.510864 -0.719561 + -0.830301 1.58874 0.707658 -0.532356 -0.805434 -0.260524 + -0.972324 1.71963 0.59555 -0.71085 -0.698134 0.0854449 + -0.939812 1.7023 0.659365 -0.746828 -0.631325 0.208988 + -0.434308 1.19784 0.443518 -0.520866 0.0958387 -0.848242 + -0.358207 1.15828 0.413431 -0.286541 0.00440085 -0.958058 + -0.286738 1.0894 0.391946 0.0889776 -0.153882 -0.984075 + -0.194616 1.1096 0.436545 0.700968 -0.218571 -0.678875 + -0.224494 1.04294 0.438416 0.561182 -0.37126 -0.739757 + -0.319542 1.22421 0.413041 -0.147284 0.193216 -0.970039 + -0.258145 1.16068 0.410479 0.18777 0.0261342 -0.981865 + -0.166023 1.18089 0.455079 0.656369 -0.481118 -0.581124 + -0.131493 1.15639 0.566116 0.652731 -0.576033 -0.492066 + -0.161371 1.08963 0.567937 0.866261 -0.13673 -0.480518 + -0.21948 1.22669 0.410138 0.0613259 -0.0554027 -0.996579 + -0.133813 1.22648 0.435115 0.465124 -0.553232 -0.691082 + -0.160933 1.28092 0.40182 0.0291503 0.0203809 -0.999367 + -0.075267 1.2807 0.426797 0.352949 -0.536901 -0.766267 + -0.142705 1.32643 0.422794 -0.375198 0.498522 -0.781475 + -0.103364 1.35168 0.413848 -0.347091 0.0392415 -0.93701 + -0.058157 1.3369 0.399255 0.187623 -0.214952 -0.958433 + -0.037458 1.26966 0.460324 0.0588953 -0.872721 -0.484653 + 0.037461 1.26966 0.460324 -0.29007 -0.794245 -0.533886 + -0.063033 1.41611 0.399059 -0.142519 -0.196359 -0.970119 + -0.020348 1.32586 0.432783 0.231741 -0.401437 -0.886084 + 0.020343 1.32585 0.43279 -0.252983 -0.437843 -0.862724 + 0.07527 1.2807 0.426797 -0.330844 -0.437348 -0.836223 + 0.133816 1.22648 0.435115 -0.443435 -0.563743 -0.696821 + -0.020348 1.3982 0.403079 -0.0271822 -0.33499 -0.94183 + 0.020343 1.3982 0.403087 -0.0815778 -0.250729 -0.964614 + 0.058152 1.3369 0.399263 -0.100473 -0.294318 -0.950412 + 0.103371 1.35168 0.413852 0.347001 0.0392828 -0.937042 + 0.160933 1.28092 0.40182 -0.0430296 0.0255672 -0.998747 + 0.022033 1.47459 0.381164 0.0315029 -0.376409 -0.925918 + 0.063028 1.41611 0.399067 0.169006 -0.152092 -0.973809 + 0.108247 1.43089 0.413656 0.531612 -0.145584 -0.834382 + 0.064718 1.49242 0.377094 0.317126 -0.287932 -0.903618 + 0.124814 1.48874 0.411456 0.582193 -0.194188 -0.789521 + 0.181837 1.41074 0.486163 0.522952 0.0773544 -0.848844 + 0.221193 1.38548 0.495113 0.176339 0.438415 -0.881304 + 0.142727 1.32642 0.422802 0.375128 0.498526 -0.781505 + 0.198404 1.46867 0.484013 0.565244 -0.297728 -0.769323 + 0.283988 1.51739 0.52664 0.324128 -0.22821 -0.918075 + 0.293227 1.44316 0.523606 0.0526546 0.28335 -0.95757 + 0.265505 1.32973 0.449478 0.101272 0.515591 -0.850829 + 0.283711 1.28422 0.428496 0.193634 0.407203 -0.892576 + 0.210234 1.5283 0.447544 0.45081 -0.475953 -0.755142 + 0.295818 1.5771 0.490221 0.573441 -0.301096 -0.76191 + 0.394222 1.62731 0.522844 0.282031 0.0675666 -0.957023 + 0.403461 1.553 0.51976 0.345415 -0.0507179 -0.937078 + 0.280894 1.6451 0.472234 0.739166 -0.170683 -0.651538 + 0.348007 1.70073 0.530481 0.400072 0.060822 -0.914463 + 0.400693 1.81364 0.551913 0.370849 0.089959 -0.924326 + 0.446908 1.74023 0.544275 0.466976 0.122535 -0.875739 + 0.474947 1.67246 0.56804 0.728444 -0.0387595 -0.684008 + 0.333083 1.76874 0.512495 0.694432 -0.0192365 -0.719301 + 0.378274 1.89349 0.544616 0.438766 -0.0111476 -0.898532 + 0.456381 1.94003 0.566206 0.123192 -0.129377 -0.983913 + 0.465267 1.85968 0.587968 0.345129 -0.159922 -0.92483 + 0.493306 1.79201 0.611783 0.563225 -0.139724 -0.814404 + 0.308398 1.84823 0.493807 0.831084 -0.0086162 -0.556081 + 0.353588 1.97298 0.525929 0.663916 -0.133579 -0.73578 + 0.433961 2.01996 0.558959 0.0721653 -0.0444385 -0.996402 + 0.535835 1.97165 0.553246 -0.334563 -0.292087 -0.895965 + 0.363007 2.05692 0.504145 0.824621 -0.263804 -0.500408 + 0.427419 2.11128 0.562997 0.246753 -0.158179 -0.956082 + 0.532117 2.13554 0.526962 -0.490472 -0.188304 -0.850869 + 0.538659 2.04423 0.522924 -0.400579 -0.128175 -0.907253 + 0.436838 2.19521 0.541213 0.324947 -0.561984 -0.760647 + 0.547218 2.19947 0.491443 -0.535375 -0.40146 -0.743104 + 0.675615 2.02754 0.398427 -0.688805 -0.400184 -0.604484 + 0.670734 1.96894 0.458334 -0.572778 -0.40382 -0.71334 + 0.667909 1.89627 0.488606 -0.493779 -0.352755 -0.794825 + 0.579077 2.25846 0.430067 -0.509442 -0.476457 -0.71656 + 0.690716 2.09138 0.362858 -0.705055 -0.124379 -0.698159 + 0.798104 2.04702 0.249884 -0.583926 -0.481146 -0.653857 + 0.815225 2.03678 0.260635 -0.217635 -0.802835 -0.555059 + 0.905681 2.11917 0.074324 -0.677792 0.725881 -0.117028 + -0.157942 0.978861 0.642399 -0.231013 -0.0754603 -0.97002 + -0.162537 1.00449 0.54461 0.784285 -0.254138 -0.565959 + -2.09165 3.45262 -1.04988 -0.0543093 -0.45732 0.887643 + -2.18006 3.48536 -1.04378 -0.0209092 -0.388401 0.921253 + -2.2058 3.68529 -0.95188 -0.2531 -0.394922 0.883163 + -1.97364 3.439 -1.04168 -0.297213 -0.583841 0.755509 + -2.1174 3.65256 -0.957993 -0.258198 -0.660296 0.705225 + -1.86176 3.43631 -0.971036 -0.505425 -0.593745 0.626109 + -2.00552 3.64988 -0.887349 -0.44918 -0.5374 0.71375 + -2.07039 3.82545 -0.818837 -0.506927 -0.317155 0.801522 + -2.14037 3.9084 -0.844915 -0.519915 -0.226356 0.823682 + -2.20152 3.88538 -0.885033 -0.363834 -0.250587 0.897124 + -1.79986 3.5921 -0.782469 -0.625921 -0.509609 0.590357 + -1.86474 3.76767 -0.713957 -0.683507 -0.470865 0.557767 + -1.97612 3.9831 -0.709897 -0.76075 -0.338078 0.554042 + -2.04609 4.06606 -0.735983 -0.608563 -0.297325 0.735697 + -1.58849 3.30425 -0.777901 -0.914295 -0.357266 0.190855 + -1.70671 3.54272 -0.695131 -0.871353 -0.468831 0.144714 + -1.77531 3.6815 -0.637106 -0.88567 -0.455344 0.090835 + -1.92994 3.90122 -0.673683 -0.853646 -0.465011 0.234633 + -1.82364 3.76664 -0.537178 -0.861739 -0.387494 -0.327496 + -1.84051 3.81505 -0.596833 -0.856313 -0.512053 0.0672991 + -1.94943 4.01591 -0.560924 -0.910745 -0.404165 -0.0848185 + -1.99561 4.09788 -0.597096 -0.909061 -0.406266 0.0925032 + -2.03906 4.19652 -0.66155 -0.785931 -0.500045 0.363687 + -1.8582 3.6928 -0.453484 -0.761729 -0.209058 -0.61324 + -1.93577 3.88299 -0.4305 -0.791942 -0.415927 -0.447026 + -1.95263 3.9314 -0.490156 -0.828293 -0.436161 -0.351701 + -2.03259 4.06293 -0.415175 -0.885005 -0.287457 -0.366244 + -2.03936 4.18336 -0.499351 -0.906514 -0.379454 -0.185058 + -1.93562 3.58438 -0.343901 -0.717892 -0.114539 -0.686668 + -2.05642 3.6944 -0.238661 -0.731413 -0.124679 -0.67044 + -1.979 3.80282 -0.348244 -0.727421 -0.218734 -0.650396 + -2.10697 3.8933 -0.246166 -0.759824 -0.172866 -0.626725 + -2.0358 3.97843 -0.344406 -0.821546 -0.21935 -0.526259 + -2.00939 3.36899 -0.249225 -0.661383 -0.0449468 -0.7487 + -2.0522 3.5238 -0.228167 -0.703479 -0.0532264 -0.70872 + -2.13928 3.60563 -0.129109 -0.740915 -0.0352635 -0.670672 + -2.2237 3.73838 -0.061223 -0.757445 -0.109574 -0.643639 + -2.15021 3.81314 -0.163911 -0.761943 -0.159675 -0.627652 + -2.30656 3.64969 0.04838 -0.8004 -0.0724007 -0.595079 + -2.36788 3.86899 0.100744 -0.817208 -0.0760076 -0.571309 + -2.29439 3.94375 -0.001943 -0.790675 -0.0926866 -0.605179 + -2.24075 4.03992 -0.09271 -0.79328 -0.097494 -0.601 + -2.42075 3.77541 0.197428 -0.843604 -0.0850079 -0.530194 + -2.46344 4.08564 0.234104 -0.870739 -0.0700197 -0.486734 + -2.42688 4.18807 0.142888 -0.852323 -0.075422 -0.517549 + -2.37324 4.28423 0.052122 -0.834333 -0.0749794 -0.546139 + -2.55816 4.3135 0.378037 -0.886111 -0.0396392 -0.461775 + -2.5216 4.41592 0.286831 -0.893206 -0.0227285 -0.449073 + -2.47784 4.52184 0.207375 -0.884018 -0.0024716 -0.467446 + -2.34308 4.40835 -0.01565 -0.845198 -0.0911075 -0.52663 + -2.16957 4.12504 -0.190949 -0.795887 -0.110816 -0.595218 + -2.60312 4.21438 0.46731 -0.874776 -0.0297995 -0.483611 + -2.64047 4.54202 0.519619 -0.88904 0.0479407 -0.455313 + -2.586 4.64014 0.436469 -0.893476 0.0723779 -0.443241 + -2.54224 4.74606 0.357013 -0.898797 0.10193 -0.426349 + -2.68542 4.4429 0.6089 -0.906215 0.0169883 -0.422476 + -2.66822 4.75083 0.630958 -0.911901 0.157781 -0.37887 + -2.61376 4.84895 0.547808 -0.900977 0.177215 -0.396023 + -2.55713 4.93932 0.463279 -0.900637 0.193606 -0.389062 + -2.48569 4.84565 0.275923 -0.900593 0.129705 -0.414859 + -2.72797 4.35094 0.703387 -0.915186 0.0102556 -0.402902 + -2.76089 4.56788 0.813234 -0.941275 0.103216 -0.321478 + -2.71834 4.65994 0.718789 -0.9311 0.130438 -0.340644 + -2.65025 4.94789 0.708834 -0.920467 0.267033 -0.285365 + -2.59492 5.03463 0.622196 -0.909378 0.282126 -0.305673 + -2.80234 4.48734 0.914338 -0.958409 0.0835529 -0.272894 + -2.74932 4.77044 0.885785 -0.940867 0.225482 -0.252838 + -2.70037 4.857 0.796664 -0.931207 0.250401 -0.264863 + -2.61138 5.14084 0.817034 -0.911251 0.354851 -0.209049 + -2.79077 4.6899 0.98689 -0.951738 0.206352 -0.227187 + -2.7084 4.97785 0.998734 -0.931745 0.32956 -0.152452 + -2.65944 5.06441 0.909622 -0.921912 0.338252 -0.188848 + -2.83173 4.63089 1.0977 -0.959075 0.189566 -0.210331 + -2.78712 4.84956 1.20634 -0.930227 0.338752 -0.141156 + -2.74616 4.90857 1.09554 -0.931493 0.333064 -0.146247 + -2.63199 5.20228 1.15381 -0.918214 0.393414 -0.0459125 + -2.60005 5.27246 1.05447 -0.912686 0.399923 -0.0840546 + -2.8228 4.79673 1.31545 -0.93772 0.326351 -0.119063 + -2.69677 5.07788 1.34668 -0.905787 0.420403 -0.0530262 + -2.66975 5.13291 1.25057 -0.912907 0.404943 -0.0512024 + -2.53978 5.40978 1.32602 -0.898035 0.439922 0.00130757 + -2.73246 5.02505 1.45579 -0.888433 0.44311 -0.11975 + -2.59562 5.29916 1.50761 -0.885355 0.464805 -0.0101343 + -2.5686 5.35419 1.4115 -0.894304 0.447457 0.00138431 + -2.42323 5.62676 1.5194 -0.818219 0.574298 0.0264345 + -2.50784 5.47996 1.22667 -0.873247 0.486304 -0.0307972 + -2.77865 4.97933 1.56458 -0.901265 0.419155 -0.109685 + -2.66938 5.20707 1.70372 -0.856494 0.513361 -0.0536392 + -2.62319 5.25279 1.59493 -0.859418 0.506552 -0.0693241 + -2.46568 5.52634 1.67394 -0.85751 0.509483 0.071438 + -2.45206 5.57117 1.60488 -0.859907 0.502524 0.0896057 + -2.80769 4.92047 1.67653 -0.93074 0.365679 0.00157322 + -2.68816 5.16972 1.81502 -0.881842 0.468562 0.0529564 + -2.50869 5.45074 1.83768 -0.820295 0.570351 0.0426088 + -2.49325 5.47997 1.76125 -0.837623 0.544791 0.0398699 + -2.31828 5.7211 1.80079 -0.784604 0.580258 0.218397 + -2.82122 4.86942 1.79256 -0.933617 0.35671 0.0334293 + -2.70169 5.11875 1.9311 -0.89055 0.44423 0.0978837 + -2.55329 5.34863 2.07074 -0.8275 0.544612 0.136531 + -2.52747 5.41347 1.94903 -0.816856 0.569034 0.0945872 + -2.30026 5.70265 1.96015 -0.742642 0.655494 0.137152 + -2.84193 4.80944 1.90563 -0.928767 0.37057 -0.00836971 + -2.71208 5.05683 2.09695 -0.866553 0.493758 0.0727193 + -2.56369 5.28679 2.23664 -0.82575 0.527754 0.199031 + -2.36036 5.57092 2.18392 -0.739523 0.637411 0.21636 + -2.33453 5.63576 2.06221 -0.745054 0.642313 0.1798 + -2.86009 4.78554 2.03663 -0.923899 0.382483 -0.010808 + -2.73024 5.03293 2.22795 -0.788939 0.610517 0.0696004 + -2.58513 5.13559 2.48833 -0.790199 0.568266 0.229475 + -2.41336 5.32076 2.59061 -0.745234 0.597703 0.295596 + -2.39192 5.47197 2.33891 -0.74202 0.614454 0.268054 + -2.87809 4.72406 2.17391 -0.940136 0.337211 0.0493238 + -2.78208 4.9222 2.33093 -0.869903 0.475428 0.13129 + -2.63696 5.02486 2.59132 -0.788866 0.56382 0.244535 + -2.89948 4.61338 2.36022 -0.944468 0.318925 0.079168 + -2.80347 4.81152 2.51723 -0.87635 0.438099 0.200202 + -2.77926 4.7781 2.66272 -0.853893 0.462914 0.237861 + -2.61275 4.99135 2.73675 -0.777742 0.562653 0.280247 + -2.92178 4.51901 2.47688 -0.941396 0.320807 0.104194 + -2.7918 4.70423 2.76488 -0.857363 0.466237 0.218063 + -2.6075 4.91344 2.9007 -0.769537 0.556362 0.313487 + -2.39793 5.14652 2.96539 -0.715766 0.609412 0.341021 + -2.40318 5.22443 2.80145 -0.727052 0.607832 0.319273 + -2.93431 4.44513 2.57904 -0.93877 0.321731 0.123289 + -2.944 4.36891 2.69926 -0.942316 0.300852 0.146728 + -2.82734 4.60859 2.84251 -0.878694 0.435094 0.196444 + -2.64304 4.81781 2.97834 -0.78528 0.53861 0.305343 + -2.93668 4.31809 2.81409 -0.941943 0.287876 0.172833 + -2.82002 4.55769 2.95729 -0.865309 0.411778 0.285796 + -2.76831 4.56016 3.08241 -0.833603 0.455824 0.31198 + -2.59133 4.8202 3.1034 -0.761178 0.551585 0.341118 + -3.03633 3.96322 2.76533 -0.974454 0.17874 0.135982 + -2.92508 4.27844 2.95516 -0.930415 0.302307 0.207214 + -2.75332 4.51485 3.20068 -0.829055 0.476306 0.292917 + -2.56165 4.72498 3.30773 -0.746222 0.550401 0.374448 + -2.91008 4.23313 3.07343 -0.923007 0.310234 0.227627 + -2.89556 4.19064 3.19443 -0.921938 0.304481 0.239418 + -2.77868 4.4125 3.29715 -0.850802 0.436808 0.292122 + -2.58701 4.62271 3.40426 -0.75346 0.533149 0.384772 + -2.35703 4.93946 3.37123 -0.688603 0.6029 0.402911 + -3.00792 3.89376 3.01664 -0.969872 0.166385 0.177947 + -2.99013 3.85874 3.14489 -0.964628 0.158448 0.21068 + -2.88356 4.12758 3.30345 -0.920057 0.276043 0.27802 + -2.76669 4.34953 3.40622 -0.83521 0.402747 0.37446 + -3.01927 3.52656 3.11545 -0.978264 -0.0181472 0.206569 + -2.9702 3.80311 3.25965 -0.957509 0.127008 0.258931 + -2.86364 4.07195 3.41821 -0.903613 0.265969 0.335775 + -2.71835 4.34324 3.50512 -0.804391 0.419175 0.421007 + -2.53868 4.61643 3.50315 -0.738434 0.544643 0.39759 + -2.99093 3.47223 3.23235 -0.966858 -0.0510364 0.250161 + -2.94185 3.7487 3.3765 -0.946037 0.0993097 0.308467 + -2.84152 4.00321 3.52207 -0.890499 0.243175 0.384549 + -2.69623 4.2745 3.60898 -0.813905 0.382305 0.437495 + -2.52007 4.5369 3.64849 -0.73621 0.513257 0.441092 + -2.94526 3.14078 3.22244 -0.947246 -0.168592 0.272583 + -2.95263 3.41614 3.34891 -0.950557 -0.0799189 0.300089 + -2.9106 3.68128 3.48288 -0.930175 0.0592283 0.362306 + -2.81027 3.93579 3.62845 -0.882242 0.215088 0.418791 + -2.65982 4.2023 3.73764 -0.802569 0.364417 0.472316 + -2.93318 2.84781 3.06129 -0.941533 -0.196948 0.273363 + -2.8961 3.06982 3.33155 -0.933504 -0.194095 0.301493 + -2.91085 3.34236 3.45169 -0.934533 -0.111482 0.337964 + -2.86882 3.6075 3.58566 -0.918938 0.0248867 0.393616 + -2.86976 2.44501 2.95194 -0.918618 -0.255853 0.301133 + -2.88402 2.77684 3.17041 -0.922545 -0.225435 0.313192 + -2.82897 2.67436 3.24551 -0.90573 -0.254176 0.339188 + -2.84745 2.98667 3.42657 -0.912453 -0.222497 0.343402 + -2.86219 3.25922 3.54671 -0.929621 -0.13405 0.343271 + -2.85299 2.1988 2.7792 -0.915081 -0.292864 0.277233 + -2.79381 2.07464 2.83085 -0.901153 -0.318168 0.294435 + -2.81471 2.34254 3.02704 -0.900527 -0.281915 0.331021 + -2.77132 1.88583 2.67448 -0.901379 -0.35691 0.245216 + -2.70523 1.74766 2.70259 -0.885211 -0.384821 0.261368 + -2.73262 1.95246 2.88208 -0.885417 -0.343054 0.31361 + -2.75351 2.22044 3.07832 -0.887788 -0.302792 0.346627 + -2.64147 1.51538 2.56272 -0.886635 -0.444319 0.12829 + -2.5387 1.40196 2.66698 -0.848709 -0.455277 0.269102 + -2.63705 1.62676 2.7512 -0.880864 -0.41533 0.227113 + -2.66443 1.83164 2.93074 -0.8636 -0.371295 0.341079 + -2.41932 1.16569 2.65599 -0.757829 -0.486036 0.435274 + -2.27515 1.08933 2.76686 -0.72349 -0.621395 0.300717 + -2.46649 1.2873 2.72756 -0.766638 -0.630721 -0.120241 + -2.56484 1.51211 2.81178 -0.860239 -0.431404 0.271809 + -2.35561 1.04979 2.60395 -0.672192 -0.68579 0.279017 + -2.21144 0.973508 2.71487 -0.721084 -0.577432 0.382898 + -2.10981 0.896364 2.79808 -0.823418 -0.512403 0.243772 + -2.20762 1.03299 2.84985 -0.750614 -0.657077 0.0694844 + -2.39897 1.23088 2.81048 -0.781194 -0.591803 0.198757 + -2.22695 0.911439 2.59657 -0.735958 -0.599618 0.314362 + -2.12532 0.8343 2.67978 -0.71394 -0.635401 0.294203 + -2.07563 0.857085 2.85552 -0.763329 -0.605712 0.224595 + -2.17345 0.993706 2.90729 -0.753335 -0.643149 0.13728 + -2.12988 0.805667 2.58238 -0.656956 -0.733925 0.172516 + -2.03971 0.774912 2.74105 -0.707772 -0.662453 0.245387 + -1.97094 0.723982 2.81546 -0.73055 -0.638569 0.241921 + -2.00686 0.806154 2.92993 -0.72925 -0.638309 0.246488 + -2.04427 0.746279 2.64364 -0.66514 -0.737012 0.120011 + -1.96054 0.673768 2.71784 -0.679722 -0.724682 0.113197 + -1.89341 0.665197 2.89428 -0.741697 -0.621265 0.252815 + -1.92394 0.74449 3.01254 -0.725632 -0.639517 0.253921 + -1.97589 0.68658 2.63224 -0.799499 -0.561566 0.213177 + -1.88301 0.61507 2.7967 -0.813589 -0.496025 0.303368 + -1.82403 0.563674 2.87752 -0.86339 -0.39021 0.319833 + -1.83081 0.619075 2.95577 -0.786076 -0.550375 0.281375 + -1.89952 0.575276 2.72663 -0.856007 -0.363034 0.368046 + -1.84054 0.52388 2.80745 -0.804464 -0.46877 0.364817 + -1.78991 0.540926 2.95392 -0.745189 -0.581831 0.325831 + -1.79669 0.59624 3.03212 -0.765077 -0.50521 0.399274 + -1.9252 0.559805 2.65102 -0.844864 -0.386319 0.370083 + -1.84902 0.490325 2.73637 -0.777631 -0.520484 0.352684 + -1.78719 0.502876 2.88203 -0.665964 -0.658825 0.349917 + -1.73148 0.480153 2.93659 -0.569271 -0.725555 0.386653 + -1.73421 0.51829 3.00853 -0.538427 -0.714791 0.446285 + -1.94391 0.538627 2.57991 -0.804422 -0.471355 0.361564 + -1.86774 0.469151 2.66524 -0.750918 -0.572214 0.329686 + -1.79567 0.469321 2.81095 -0.670839 -0.645173 0.365685 + -1.73252 0.44352 2.86664 -0.572203 -0.725371 0.382648 + -1.88031 0.447599 2.59177 -0.688693 -0.683989 0.240544 + -1.80017 0.435389 2.73712 -0.637175 -0.694699 0.333767 + -1.73702 0.409586 2.79281 -0.552377 -0.75448 0.354455 + -1.66489 0.41602 2.90367 -0.500535 -0.772213 0.391346 + -1.66385 0.452739 2.97367 -0.526799 -0.734419 0.427915 + -1.9018 0.448913 2.5195 -0.717192 -0.665489 0.206787 + -1.81274 0.413835 2.66365 -0.642262 -0.696881 0.319151 + -1.74226 0.381653 2.72039 -0.546807 -0.76448 0.341427 + -1.66729 0.385132 2.83637 -0.458282 -0.815868 0.352615 + -1.91665 0.442788 2.4447 -0.706371 -0.685974 0.174582 + -1.82285 0.386233 2.58806 -0.648848 -0.715846 0.257994 + -1.75237 0.35405 2.6448 -0.477941 -0.833239 0.278003 + -1.67252 0.357199 2.76395 -0.401829 -0.861335 0.310861 + -1.93747 0.448141 2.37083 -0.66322 -0.74147 0.101789 + -1.8377 0.380114 2.51326 -0.618341 -0.771339 0.150635 + -1.75667 0.33829 2.5721 -0.410896 -0.898397 0.155073 + -1.67697 0.338785 2.69304 -0.318146 -0.917909 0.237122 + -1.94748 0.45034 2.29522 -0.652028 -0.747666 0.125917 + -1.84167 0.373013 2.43696 -0.570074 -0.81826 0.0739376 + -1.76064 0.33119 2.4958 -0.392025 -0.916909 0.0747872 + -1.68127 0.323023 2.62034 -0.292781 -0.938828 0.181332 + -1.96172 0.44608 2.2196 -0.545545 -0.835137 0.070196 + -1.85169 0.375125 2.3613 -0.511168 -0.859007 -0.0285292 + -1.75908 0.327635 2.42095 -0.31491 -0.947448 -0.0563375 + -1.68045 0.311597 2.54813 -0.290844 -0.950306 0.111036 + -1.96598 0.448469 2.14407 -0.483277 -0.87237 0.0735853 + -1.84948 0.386313 2.28472 -0.413375 -0.907028 -0.0801349 + -1.75687 0.338735 2.34433 -0.36352 -0.926843 -0.0938897 + -1.67889 0.30813 2.47334 -0.303308 -0.952342 0.0323784 + -1.96224 0.437152 2.06866 -0.373598 -0.925468 0.0627102 + -1.85374 0.388701 2.20919 -0.404561 -0.913232 -0.0483561 + -1.75317 0.342798 2.27029 -0.368158 -0.925502 -0.0889166 + -1.67281 0.301677 2.40131 -0.371055 -0.928604 0.0036374 + -1.9619 0.434756 1.99342 -0.320484 -0.943178 0.0877777 + -1.85671 0.399638 2.13244 -0.326285 -0.943416 -0.0591966 + -1.75615 0.353735 2.19355 -0.37183 -0.923184 -0.0973329 + -1.66911 0.305741 2.32728 -0.361023 -0.930197 -0.0662937 + -1.94478 0.420302 1.91885 -0.242144 -0.966171 0.0887686 + -1.85638 0.397241 2.05719 -0.34773 -0.937278 0.0243521 + -1.75483 0.359828 2.1202 -0.403427 -0.91483 -0.0182605 + -1.66021 0.306524 2.25632 -0.390768 -0.918382 -0.0622521 + -2.01429 0.419449 1.81933 0.000201078 -0.976165 0.217028 + -1.9407 0.415079 1.8431 -0.193123 -0.974072 0.117843 + -1.86792 0.40068 1.98044 -0.27893 -0.960268 0.00916281 + -1.76638 0.363265 2.04344 -0.323562 -0.944997 -0.0478489 + -1.65889 0.312522 2.18293 -0.363883 -0.924314 -0.115032 + -1.99393 0.39519 1.74235 -0.000629854 -0.96888 0.247529 + -1.92829 0.401439 1.76872 -0.0227849 -0.993839 0.108469 + -1.86385 0.395455 1.90469 -0.241658 -0.970327 0.00815342 + -1.76647 0.37023 1.97018 -0.282978 -0.957349 -0.0583555 + -1.64877 0.321744 2.11336 -0.305524 -0.942695 -0.134089 + -2.01282 0.326938 1.53156 -0.00306389 -0.969994 0.243107 + -1.98152 0.381463 1.66792 0.303052 -0.928114 0.216248 + -1.92178 0.39673 1.69228 0.0234258 -0.988778 0.147541 + -1.86879 0.401352 1.82807 -0.0709514 -0.996959 -0.0322347 + -1.77141 0.376127 1.89356 -0.228292 -0.970658 -0.075535 + -1.99759 0.31104 1.4545 0.258246 -0.955681 0.14136 + -1.9663 0.36556 1.59087 0.268162 -0.931293 0.24654 + -1.90934 0.379825 1.61676 0.2331 -0.960014 0.15504 + -1.9927 0.303234 1.36722 0.217083 -0.971962 0.0903619 + -1.95386 0.34866 1.51534 0.303079 -0.937723 0.169764 + -1.90111 0.374766 1.54132 0.321714 -0.936831 0.137285 + -2.04358 0.304913 1.25091 -0.408087 -0.912941 0.00203094 + -1.98685 0.299232 1.28975 0.583597 -0.804124 -0.113135 + -1.94801 0.344573 1.43782 0.417967 -0.900173 0.122445 + -2.10656 0.366408 1.0692 -0.619418 -0.784896 -0.0160926 + -2.04389 0.308428 1.16162 -0.165263 -0.976137 -0.140874 + -2.00195 0.314246 1.20675 0.46818 -0.863876 -0.18581 + -2.10102 0.361741 0.977082 -0.600154 -0.799549 -0.0231476 + -2.05899 0.323441 1.07862 -0.287557 -0.956446 -0.0502304 + -2.17633 0.417002 0.856766 -0.574413 -0.818565 -0.00089604 + -2.14088 0.392912 0.810892 -0.573654 -0.819044 0.00939378 + -2.0973 0.364427 0.890429 -0.593997 -0.804343 -0.0141689 + -2.13557 0.385806 0.720198 -0.454311 -0.884817 -0.103444 + -2.19283 0.513421 0.515565 -0.613024 -0.568446 -0.5487 + -2.28918 0.60205 0.568854 -0.744975 -0.480878 -0.462352 + -1.64886 0.328703 2.0401 -0.300308 -0.947308 -0.111459 + -1.5508 0.28849 2.07756 -0.417531 -0.896406 -0.148742 + -1.56516 0.281293 2.16402 -0.421362 -0.892018 -0.163578 + -1.48961 0.249849 2.09508 -0.498856 -0.852899 -0.153969 + -1.50396 0.242652 2.18155 -0.438085 -0.889565 -0.129441 + -1.57528 0.272073 2.23359 -0.416914 -0.904021 -0.0944887 + -1.58532 0.274212 2.32089 -0.414239 -0.909138 -0.0432954 + -1.42509 0.205372 2.11312 -0.552619 -0.830091 -0.0745739 + -1.43347 0.208092 2.21021 -0.466861 -0.88171 -0.0680356 + -1.52169 0.24162 2.28234 -0.431556 -0.901287 -0.0379507 + -1.53174 0.243759 2.36963 -0.375807 -0.925829 0.040131 + -1.59423 0.273517 2.39189 -0.362183 -0.931812 0.0234357 + -1.34864 0.1531 2.04626 -0.536426 -0.843531 -0.0265117 + -1.34554 0.158488 2.14013 -0.456358 -0.889265 0.0307576 + -1.35392 0.161294 2.23726 -0.422963 -0.905377 0.0373347 + -1.4512 0.206969 2.31095 -0.400125 -0.915105 0.0498191 + -1.45679 0.220878 2.40706 -0.333336 -0.934438 0.125353 + -1.33591 0.146628 1.97227 -0.52148 -0.851632 -0.052743 + -1.22032 0.103022 2.0614 -0.252562 -0.966088 -0.0537253 + -1.22021 0.101478 2.14847 -0.321263 -0.94675 0.0213059 + -1.21711 0.106865 2.24234 -0.342811 -0.938572 0.0395335 + -1.22545 0.112729 1.96998 -0.211424 -0.971177 -0.110067 + -1.02737 0.056695 2.24564 -0.164359 -0.98576 -0.0355564 + -1.02726 0.055147 2.33272 -0.192495 -0.981253 -0.00936353 + -1.02824 0.056105 2.41526 -0.227889 -0.973438 0.0220352 + -0.867153 0.039802 2.2227 -0.0501389 -0.99665 -0.064616 + -0.867964 0.035107 2.30703 -0.0566004 -0.996033 -0.068656 + -0.879902 0.028684 2.38955 -0.124479 -0.990823 -0.0526654 + -0.880885 0.029725 2.47215 -0.202916 -0.976444 -0.0733684 + -1.03752 0.060968 2.49944 -0.198429 -0.976019 -0.0895106 + -0.724318 0.045762 2.15937 0.0411721 -0.997937 -0.0492575 + -0.756667 0.040633 2.24066 0.0373009 -0.997558 -0.0590538 + -0.768605 0.034296 2.32323 -0.0148463 -0.988781 -0.148635 + -0.787987 0.016661 2.40498 -0.0765398 -0.986346 -0.145821 + -0.566167 0.059859 2.04836 0.095351 -0.995418 0.00718027 + -0.583467 0.056534 2.13152 0.0920215 -0.995314 -0.0296966 + -0.615817 0.051409 2.21279 0.0697268 -0.993691 -0.0878428 + -0.637802 0.036659 2.29194 0.0172544 -0.979085 -0.202718 + -0.4243 0.077633 2.05497 0.118094 -0.992988 -0.00533023 + -0.4416 0.074308 2.13813 0.0911641 -0.993795 -0.0637168 + -0.456349 0.065611 2.21919 0.0690841 -0.989662 -0.12568 + -0.478334 0.050861 2.29834 0.0362249 -0.963091 -0.266728 + -0.285543 0.092543 1.96235 0.082683 -0.99299 -0.0844699 + -0.291431 0.091702 2.046 0.0472788 -0.996903 -0.062845 + -0.301232 0.081181 2.12422 -0.00713135 -0.990435 -0.137798 + -0.315981 0.072491 2.20528 -0.0564023 -0.978318 -0.199279 + -0.280226 0.104435 1.88275 0.0850947 -0.984963 -0.150357 + -0.154552 0.107445 1.94174 0.130729 -0.981449 -0.140239 + -0.161487 0.095491 2.01744 0.0906738 -0.986474 -0.136554 + -0.171288 0.084975 2.09565 0.0223911 -0.979078 -0.202248 + -0.183179 0.063995 2.16679 -0.0165967 -0.964244 -0.264497 + -0.149236 0.119336 1.86214 0.144734 -0.970682 -0.191909 + -0.065459 0.122525 1.94562 0.333935 -0.934339 -0.12449 + -0.072394 0.110565 2.02133 0.332738 -0.928511 -0.16478 + -0.079232 0.091678 2.08985 0.304363 -0.929804 -0.206948 + -0.039051 0.157157 1.80163 0.364521 -0.907556 -0.208488 + -0.059663 0.134967 1.87326 0.331259 -0.92966 -0.161244 + -0.023052 0.142337 1.9765 0.252548 -0.958922 -0.129184 + -0.023052 0.132783 2.05185 0.240554 -0.952935 -0.184525 + -0.029889 0.113896 2.12036 0.33783 -0.907215 -0.250663 + -0.029835 0.176438 1.74344 0.509049 -0.819146 -0.264328 + -0.017255 0.16442 1.82885 0.265666 -0.945975 -0.185886 + -0.017255 0.15478 1.90415 0.244123 -0.960376 -0.134465 + 0.023052 0.142337 1.9765 -0.257471 -0.957182 -0.132328 + 0.023052 0.132783 2.05185 -0.243841 -0.954338 -0.172574 + -0.008039 0.211872 1.70326 0.273746 -0.921409 -0.275806 + -0.008039 0.183616 1.7706 0.275276 -0.912485 -0.302645 + 0.00804 0.183611 1.77061 -0.275861 -0.912252 -0.302816 + 0.017255 0.16442 1.82885 -0.252688 -0.950749 -0.179513 + 0.017255 0.15478 1.90415 -0.243275 -0.960318 -0.136405 + 0.00804 0.211867 1.70327 -0.273303 -0.921494 -0.275959 + 0.029836 0.176433 1.74344 -0.508916 -0.819128 -0.264638 + 0.039051 0.157157 1.80163 -0.364626 -0.908268 -0.205173 + 0.059663 0.134967 1.87326 -0.335117 -0.927885 -0.16348 + 0.065459 0.122525 1.94562 -0.333115 -0.93439 -0.126292 + 0.023071 0.214616 1.66891 -0.301299 -0.948176 -0.100904 + 0.044867 0.179094 1.70903 -0.402852 -0.866191 -0.295675 + 0.128624 0.141618 1.79055 -0.156189 -0.955816 -0.249038 + 0.149236 0.119336 1.86214 -0.127307 -0.969749 -0.208277 + 0.077389 0.188657 1.64287 -0.310978 -0.880171 -0.358597 + 0.172667 0.169411 1.65301 -0.111582 -0.9323 -0.344043 + 0.140145 0.15994 1.71921 -0.151988 -0.95824 -0.24223 + 0.289262 0.11663 1.80043 -0.104833 -0.972077 -0.209945 + 0.280227 0.104435 1.88275 -0.0934368 -0.982816 -0.15919 + 0.059101 0.223437 1.60503 -0.492994 -0.625485 -0.604753 + 0.113419 0.19954 1.59562 -0.266812 -0.844287 -0.464748 + 0.219097 0.192294 1.59817 -0.0519375 -0.979975 -0.19223 + 0.325697 0.165847 1.65678 0.0170248 -0.924096 -0.381781 + 0.300782 0.134952 1.72909 -0.0412717 -0.944205 -0.326763 + 0.016455 0.26198 1.61187 -0.33597 -0.439832 -0.832869 + 0.10875 0.245665 1.55153 -0.421674 -0.543614 -0.725724 + 0.185977 0.19434 1.55923 -0.212517 -0.883403 -0.417654 + 0.291654 0.187008 1.56173 0.0826667 -0.965876 -0.245459 + 0.372127 0.188644 1.6019 0.151304 -0.872841 -0.463957 + 0.066104 0.284205 1.55838 -0.622691 -0.326218 -0.711222 + 0.094316 0.306883 1.5237 -0.491361 -0.423392 -0.76112 + 0.172807 0.255556 1.517 -0.31558 -0.476786 -0.820418 + 0.250034 0.204145 1.52465 -0.117479 -0.764324 -0.63404 + 0.170386 0.315624 1.49316 -0.311988 -0.415864 -0.854237 + 0.248877 0.264298 1.48646 -0.26823 -0.470975 -0.840378 + 0.316714 0.227436 1.4939 -0.019341 -0.781214 -0.623964 + 0.411496 0.244192 1.49248 0.389863 -0.898825 -0.200303 + 0.344816 0.220906 1.52322 0.26835 -0.913575 -0.305565 + 0.099147 0.393027 1.47549 -0.178478 -0.571875 -0.80069 + 0.224866 0.336079 1.46153 -0.302939 -0.321099 -0.897287 + 0.311003 0.293472 1.45073 -0.2287 -0.433422 -0.871689 + 0.378839 0.25661 1.45817 0.00399699 -0.732972 -0.680247 + 0.214568 0.417707 1.45135 -0.175932 -0.405625 -0.896948 + 0.273208 0.382957 1.43094 -0.341688 -0.22859 -0.91159 + 0.359344 0.340435 1.42019 -0.313158 -0.371842 -0.87388 + 0.234373 0.595155 1.2896 0.00199342 -0.695913 -0.718123 + 0.280223 0.459798 1.41644 -0.229196 -0.456427 -0.859735 + 0.338862 0.425048 1.39603 -0.39924 -0.299754 -0.866461 + 0.404353 0.388668 1.38004 -0.383904 -0.36497 -0.848183 + 0.430531 0.290693 1.41134 -0.00866732 -0.74897 -0.662547 + 0.180778 0.941774 0.880636 0.0874276 -0.796584 -0.598172 + 0.288601 0.697477 1.20737 0.13617 -0.706496 -0.694494 + 0.284809 0.633355 1.24723 -0.0167387 -0.565796 -0.824375 + 0.330659 0.497998 1.37408 -0.296662 -0.512839 -0.805597 + 0.202299 1.02452 0.721508 -0.237914 -0.808776 -0.537846 + 0.1315 1.15639 0.566116 -0.683273 -0.674188 -0.280372 + 0.194623 1.1096 0.436545 -0.675886 -0.241239 -0.696407 + 0.224485 1.04294 0.438416 -0.60556 -0.420037 -0.675919 + 0.161362 1.08963 0.567937 -0.941146 -0.271414 -0.201444 + 0.202299 1.02452 0.721508 -0.881071 -0.357353 0.30986 + 0.166029 1.18089 0.455079 -0.604039 -0.362134 -0.709926 + 0.258117 1.16069 0.410469 -0.140426 -0.00502579 -0.990078 + 0.286711 1.0894 0.391936 -0.0190481 -0.0590518 -0.998073 + 0.312808 1.02384 0.415092 0.0412183 -0.413174 -0.909719 + 0.248556 0.979544 0.481017 -0.514629 -0.534366 -0.67053 + 0.21948 1.22669 0.410138 -0.111188 -0.156652 -0.981375 + 0.35818 1.15829 0.413422 0.201108 -0.118426 -0.972384 + 0.390198 1.08755 0.441946 0.384308 -0.126856 -0.914448 + 0.416295 1.0219 0.465053 0.410432 -0.317729 -0.854748 + 0.319542 1.22421 0.413041 0.165406 0.183347 -0.969033 + 0.4343 1.19784 0.443514 0.384609 0.101531 -0.917479 + 0.466318 1.12702 0.471987 0.364306 -0.134856 -0.921463 + 0.508152 1.07115 0.493346 0.414522 -0.272607 -0.868249 + 0.44088 0.967001 0.506741 0.418383 -0.49861 -0.759173 + 0.368359 1.32276 0.466147 0.296338 0.350691 -0.888369 + 0.40419 1.26275 0.450692 0.37819 0.34222 -0.86015 + 0.489019 1.27485 0.512728 0.195126 0.447301 -0.872839 + 0.520361 1.21793 0.473514 0.304285 0.210338 -0.929069 + 0.562195 1.16198 0.494822 0.465224 -0.0802301 -0.881549 + 0.337539 1.38741 0.477972 0.094197 0.434565 -0.895701 + 0.430147 1.4069 0.519008 0.423498 0.262598 -0.867001 + 0.458909 1.33976 0.519908 0.437379 0.280545 -0.854397 + 0.536813 1.37039 0.559051 0.0712872 0.434187 -0.897998 + 0.568156 1.31347 0.519837 0.248883 0.375791 -0.892658 + 0.399327 1.47155 0.530832 0.29048 0.1643 -0.94267 + 0.494464 1.51771 0.586891 0.48701 0.173572 -0.855975 + 0.523226 1.45056 0.587791 0.351529 0.285556 -0.891563 + 0.609086 1.49934 0.623102 0.358834 0.284674 -0.888931 + 0.470813 1.59102 0.579113 0.677248 -0.0090501 -0.735699 + 0.560694 1.66274 0.668891 0.346754 0.156162 -0.924865 + 0.595499 1.57951 0.651842 0.130183 0.301985 -0.944382 + 0.537043 1.73605 0.661113 0.489452 -0.183572 -0.852489 + 0.63287 1.72467 0.683221 -0.220073 -0.242601 -0.944835 + 0.667675 1.64153 0.666221 -0.168833 0.0794248 -0.982439 + 0.570279 1.82633 0.611337 -0.200123 -0.601636 -0.773295 + 0.614016 1.77037 0.660667 -0.208448 -0.636527 -0.742552 + 0.765247 1.66905 0.611151 -0.342337 -0.4768 -0.809609 + 0.819324 1.64323 0.607476 0.00663408 -0.706049 -0.708132 + 0.721752 1.61571 0.662546 0.0554567 -0.602927 -0.795867 + 0.544721 1.8913 0.575008 -0.270023 -0.387148 -0.881592 + 0.676006 1.77051 0.564613 -0.42849 -0.691888 -0.581109 + 0.746393 1.71475 0.588597 -0.377476 -0.592926 -0.711302 + 0.907269 1.77161 0.505114 0.119378 -0.583327 -0.803417 + 0.895425 1.6969 0.571711 0.228782 -0.725119 -0.649508 + 0.650448 1.83548 0.528282 -0.454389 -0.500496 -0.736909 + 0.836882 1.82746 0.481179 -0.0777549 -0.654659 -0.751914 + 1.08955 1.96145 0.43531 0.388775 -0.706283 -0.591623 + 1.02369 1.81801 0.518748 -0.557543 0.243408 -0.793661 + 0.833391 1.94058 0.379053 -0.226783 -0.656655 -0.719287 + 0.815929 1.8798 0.41873 -0.190316 -0.630613 -0.752401 + 1.05697 1.97337 0.346654 0.442259 -0.750163 -0.491592 + 0.810344 1.97817 0.320542 -0.246073 -0.765187 -0.594926 + 0.981624 2.07298 0.222127 0.163624 -0.758487 -0.630813 + 1.03601 2.02571 0.284205 0.150126 -0.724684 -0.672529 + 1.10585 2.12196 0.209687 0.660096 -0.396582 -0.637963 + 1.13428 2.12922 0.259715 0.882049 -0.226791 -0.412984 + 0.958577 2.11066 0.163666 0.343393 -0.87323 -0.345759 + 1.05147 2.16932 0.147664 0.741189 -0.418469 -0.524902 + 1.05384 2.25235 0.14565 0.840021 -0.357247 -0.408338 + 1.08226 2.25953 0.195622 0.842923 -0.32878 -0.425892 + 0.922802 2.10901 0.085129 0.0690286 -0.949442 -0.306259 + 1.02166 2.1516 0.03576 0.735983 -0.668118 -0.109302 + 1.03372 2.19214 0.092341 0.979928 -0.0173254 -0.198597 + 1.18729 2.0375 0.396588 0.11454 -0.51983 -0.846556 + 1.16686 2.1173 0.348371 0.604834 -0.408006 -0.683891 + 1.19065 2.1133 0.362098 0.415425 -0.374356 -0.829023 + 1.14683 2.27224 0.275606 -0.251369 -0.703331 -0.664935 + 1.12304 2.27624 0.261878 0.518217 -0.639739 -0.567614 + 1.17763 2.27532 0.212466 -0.466835 -0.86589 -0.179719 + 1.18686 2.17753 0.247647 -0.923615 -0.216732 -0.316169 + 1.19065 2.1133 0.362098 -0.99948 -0.00159498 0.0322018 + 1.1835 2.10173 0.282136 -0.975206 0.190751 -0.112197 + 1.09759 2.3003 0.121208 0.319193 -0.947526 -0.0176331 + 1.13837 2.31692 0.187409 -0.0712604 -0.976293 -0.204385 + 1.19122 2.27081 0.18087 -0.696198 -0.715946 -0.05225 + 1.31347 2.12724 0.109754 -0.793508 -0.28562 -0.53737 + 1.21766 2.18061 0.184504 -0.765389 -0.119618 -0.632354 + 1.07871 2.29808 0.057635 0.297169 -0.94411 0.142642 + 1.19219 2.27055 0.073518 -0.564576 -0.798629 -0.208438 + 1.21979 2.20679 0.063957 -0.756811 -0.543957 -0.362418 + 1.27264 2.16069 0.057417 -0.641701 -0.744126 -0.185731 + 1.32705 2.12282 0.078207 -0.703711 -0.633417 -0.321828 + 1.0361 2.27517 0.090327 0.763837 -0.624206 -0.164072 + 1.0774 2.23681 -0.044033 0.620122 -0.757082 0.20561 + 1.1697 2.29075 -0.059863 0.207982 -0.969606 -0.128869 + 1.17331 2.26835 0.009938 -0.173367 -0.977501 -0.120148 + 1.03478 2.21398 -0.011292 0.862466 -0.467678 0.193468 + 1.02272 2.17335 -0.067922 0.805969 -0.584621 0.0929153 + 1.03829 2.21156 -0.143494 0.865686 -0.486219 -0.119077 + 1.07955 2.24064 -0.106867 0.58024 -0.801442 -0.144955 + 1.08053 2.27656 -0.209287 0.652902 -0.643199 -0.400017 + 1.12179 2.30564 -0.172649 0.512942 -0.728268 -0.454441 + 1.17186 2.29449 -0.122738 0.43716 -0.854415 -0.280829 + 1.22873 2.32785 -0.137321 0.168746 -0.879145 -0.445678 + 1.27338 2.29774 -0.092373 -0.0457302 -0.865845 -0.498218 + 1.06901 2.33969 -0.284824 0.678377 -0.47301 -0.562197 + 1.12 2.34824 -0.23243 0.539317 -0.683937 -0.491291 + 1.17866 2.339 -0.187233 0.356476 -0.702752 -0.615682 + 1.30396 2.34659 -0.149771 0.0614656 -0.782636 -0.619438 + 1.3486 2.31648 -0.104823 -0.0978227 -0.653546 -0.750538 + 1.01663 2.3143 -0.349446 0.951981 -0.210593 -0.22222 + 1.03503 2.35088 -0.329403 0.815209 -0.303388 -0.493346 + 1.11506 2.38959 -0.271264 0.468928 -0.602128 -0.64618 + 1.18011 2.38412 -0.225178 0.373677 -0.721976 -0.582337 + 1.23876 2.37488 -0.179972 0.212932 -0.626427 -0.749833 + 1.02405 2.3753 -0.403114 0.918254 -0.253542 -0.304181 + 1.04244 2.41197 -0.383019 0.765658 -0.543893 -0.343436 + 1.08108 2.40086 -0.315784 0.531257 -0.658405 -0.533169 + 1.14067 2.43669 -0.342226 0.226085 -0.885337 -0.40628 + 0.989653 2.23551 -0.440186 0.936124 -0.103942 -0.335957 + 1.00614 2.35642 -0.447203 0.887363 -0.0667328 -0.456216 + 0.98841 2.44837 -0.48127 0.649857 -0.398456 -0.647239 + 1.04836 2.45826 -0.454405 0.323119 -0.802898 -0.500947 + 1.087 2.44716 -0.387179 0.2938 -0.87552 -0.383597 + 0.964875 2.1885 -0.493562 0.910786 -0.0428506 -0.410649 + 0.961205 2.32061 -0.501179 0.840011 -0.0187463 -0.542245 + 0.943474 2.41256 -0.535247 0.749377 -0.0817093 -0.657083 + 0.960257 2.50357 -0.553484 0.479821 -0.380069 -0.790772 + 1.02021 2.51347 -0.526628 -0.0167753 -0.797881 -0.602581 + 0.963816 2.07556 -0.479939 0.928115 -0.193392 -0.318122 + 0.940043 2.06386 -0.530873 0.954931 -0.151602 -0.255193 + 0.939814 2.13853 -0.546399 0.95328 -0.025994 -0.300968 + 0.936145 2.27055 -0.554076 0.878685 0.0654387 -0.472895 + 0.948408 2.01676 -0.468093 0.903603 -0.298642 -0.307108 + 0.924635 2.00506 -0.519026 0.394429 -0.91787 0.0440384 + 0.927308 2.01413 -0.587145 0.903983 -0.407302 -0.130075 + 0.927079 2.0888 -0.602681 0.977534 0.0101431 -0.210532 + 0.917013 2.20864 -0.606034 0.905177 0.136502 -0.40252 + 0.879951 2.30643 -0.635612 0.803202 0.237296 -0.546404 + 0.899083 2.36834 -0.583653 0.759423 0.123513 -0.638765 + 0.915514 2.00015 -0.555323 0.67694 -0.732603 -0.0710247 + 0.918187 2.00922 -0.623443 0.99943 -0.0337012 -0.00200876 + 0.92031 2.03058 -0.651237 0.999368 0.0300102 0.0190617 + 0.910244 2.15041 -0.65459 0.937828 0.171801 -0.301602 + 0.867467 2.24817 -0.685917 0.809552 0.305848 -0.501082 + 0.802804 2.38658 -0.687645 0.702115 0.288865 -0.650839 + 0.843523 2.4329 -0.634069 0.684831 0.18255 -0.705465 + 0.927469 1.96604 -0.682646 0.997563 0.0666929 -0.0205148 + 0.910018 2.0829 -0.703454 0.939819 0.193352 -0.281702 + 0.867241 2.18075 -0.73473 0.857674 0.340548 -0.385255 + 0.790321 2.32833 -0.73795 0.788343 0.389661 -0.476108 + 0.724965 2.45691 -0.737052 0.73263 0.406756 -0.545712 + 0.925346 1.94468 -0.654843 0.995348 0.00755878 0.0960458 + 0.928663 1.90521 -0.720078 0.978418 -0.199941 0.0521718 + 0.911212 2.02207 -0.740895 0.965652 0.195 -0.171732 + 0.87809 2.11465 -0.780856 0.893804 0.336039 -0.296971 + 0.797996 2.26779 -0.788689 0.827154 0.412986 -0.38113 + 0.915514 2.00015 -0.555323 0.995032 0.0858065 0.050475 + 0.920946 1.88997 -0.719496 0.859532 -0.424604 0.284458 + 0.914712 1.86018 -0.745692 0.941118 -0.259361 0.216859 + 0.922179 1.95121 -0.784367 0.988399 0.142361 -0.0529256 + 0.889057 2.0438 -0.824337 0.91589 0.335957 -0.219723 + 0.808844 2.2017 -0.834823 0.8605 0.426274 -0.278981 + 0.742346 2.33211 -0.841297 0.871273 0.430974 -0.234829 + 0.906995 1.84494 -0.745102 0.843147 -0.274478 0.462347 + 0.919515 1.81725 -0.779344 0.959868 0.0716058 0.271157 + 0.926982 1.90829 -0.818027 0.993211 0.11242 0.0298957 + 0.908131 1.97388 -0.863228 0.929556 0.294501 -0.221798 + 0.834284 2.13524 -0.87711 0.889457 0.411568 -0.198689 + 0.919099 1.77531 -0.757695 0.906247 0.289663 0.307916 + 0.939316 1.83324 -0.851034 0.993216 0.116079 0.00686109 + 0.920465 1.89883 -0.896237 0.959648 0.2734 -0.0657916 + 0.853357 2.06532 -0.916001 0.910547 0.388286 -0.14191 + 0.794945 2.19464 -0.931195 0.904049 0.418535 -0.0867431 + 0.769505 2.2611 -0.8889 0.896928 0.42444 -0.123978 + 0.9389 1.79129 -0.829378 0.967886 0.120559 0.220597 + 0.927778 1.73612 -0.733014 0.859051 0.395155 0.325397 + 0.825763 2.12504 -0.97444 0.914092 0.405114 -0.017842 + 0.782328 2.22055 -0.986063 0.929348 0.23474 0.284974 + 0.750241 2.29266 -0.940374 0.941732 0.232421 0.243149 + 0.723081 2.36367 -0.89277 0.939013 0.244247 0.242068 + 0.776281 2.32164 -0.982164 0.597743 -0.176709 0.78197 + 0.744194 2.39376 -0.936474 0.768441 -0.113274 0.629815 + 0.723281 2.4607 -0.894831 0.728022 -0.132818 0.672565 + 0.683658 2.44041 -0.844285 0.960032 0.245488 0.134442 + 0.753678 2.58589 -0.879656 0.487133 -0.273232 0.829485 + 0.732765 2.65292 -0.837963 0.984934 -0.161452 0.0619613 + 0.762104 2.73531 -0.789264 0.728586 -0.471099 0.49722 + 0.683857 2.53744 -0.846346 0.808967 -0.215405 0.546967 + 0.825749 2.68506 -0.875424 0.371184 -0.287287 0.882999 + 0.813222 2.77682 -0.837363 0.615377 -0.42938 0.661018 + 0.842561 2.85913 -0.788723 0.748743 -0.554919 0.362558 + 0.87879 2.93189 -0.743953 0.694823 -0.718947 0.0183238 + 0.761325 2.80318 -0.738623 0.889461 -0.424716 -0.168745 + 0.946305 2.78767 -0.892355 0.491148 -0.233846 0.8391 + 0.917374 2.89238 -0.852317 0.596918 -0.454373 0.661236 + 0.953604 2.96515 -0.807556 0.55331 -0.751557 0.359179 + 1.05152 2.81816 -0.962764 0.617008 -0.165531 0.76935 + 1.02259 2.92278 -0.922776 0.605181 -0.394181 0.691648 + 1.0671 2.99456 -0.889893 0.509886 -0.741533 0.436055 + 1.02738 3.01237 -0.781739 0.288641 -0.957141 -0.0238343 + 1.14171 2.95065 -1.01444 0.594889 -0.414362 0.688775 + 1.18623 3.02234 -0.981609 0.400739 -0.804318 0.438725 + 1.14088 3.04178 -0.864075 0.278975 -0.957474 0.0736036 + 1.11456 3.01479 -0.772534 -0.128487 -0.875975 -0.464928 + 0.953552 2.97745 -0.695252 0.352744 -0.709932 -0.609564 + 1.27766 2.83913 -1.15248 0.595693 -0.258769 0.760387 + 1.26369 2.93221 -1.11991 0.538965 -0.36915 0.757129 + 1.33436 3.02223 -1.09923 0.374899 -0.757695 0.53418 + 1.30841 3.06147 -0.932784 0.199208 -0.97344 0.112829 + 1.49484 2.94614 -1.23203 0.431399 -0.450109 0.781855 + 1.60459 3.09642 -1.22012 0.46498 -0.637982 0.613818 + 1.45654 3.06128 -1.05046 0.380886 -0.87477 0.299507 + 1.65571 2.9089 -1.34153 0.402663 -0.434872 0.805449 + 1.76546 3.0591 -1.32967 0.273189 -0.5078 0.817011 + 1.69808 3.18616 -1.16996 0.451621 -0.749236 0.484443 + 1.55002 3.15102 -1.0003 0.545271 -0.778457 0.310942 + 1.61261 2.75404 -1.41731 0.335411 -0.520052 0.785522 + 1.8538 2.85272 -1.45663 -0.00908349 -0.450488 0.892736 + 1.9202 3.02836 -1.35684 -0.141619 -0.448079 0.882706 + 1.99461 3.17363 -1.27045 -0.0990468 -0.535452 0.838738 + 1.83988 3.20445 -1.24323 0.20631 -0.689934 0.69385 + 1.6553 2.55664 -1.57659 0.200426 -0.611083 0.765772 + 1.7895 2.54952 -1.59947 -0.0247822 -0.543034 0.839345 + 1.81071 2.69787 -1.53241 0.0930443 -0.437005 0.894634 + 1.98412 2.60123 -1.53762 -0.416579 -0.37579 0.827794 + 2.0451 2.73408 -1.42993 -0.499449 -0.334107 0.799327 + 1.65389 2.43073 -1.67692 0.0984026 -0.720387 0.686557 + 1.78809 2.42361 -1.69979 -0.0579976 -0.613869 0.787274 + 1.91434 2.40472 -1.67626 -0.369532 -0.597193 0.711904 + 1.96291 2.45279 -1.60472 -0.393898 -0.47166 0.788911 + 1.62473 2.36295 -1.77831 0.0484259 -0.900565 0.432015 + 1.79798 2.36518 -1.74398 -0.129398 -0.833912 0.536514 + 1.92422 2.34637 -1.7204 -0.339189 -0.744819 0.574626 + 2.04766 2.31797 -1.64221 -0.368673 -0.738629 0.564365 + 2.09623 2.36604 -1.57067 -0.602334 -0.510557 0.613617 + 1.65265 2.34347 -1.83677 0.130695 -0.990335 0.0464219 + 1.82591 2.34578 -1.80238 -0.0669262 -0.994633 -0.0789024 + 1.95638 2.32169 -1.74666 -0.248998 -0.968228 -0.0231163 + 2.07981 2.29329 -1.66846 -0.462743 -0.781348 0.418765 + 1.50851 2.3155 -1.86953 0.405143 -0.898496 0.169011 + 1.73092 2.37115 -1.88572 0.13724 -0.857311 -0.496168 + 1.86741 2.36285 -1.84754 0.0661882 -0.867166 -0.493601 + 1.99788 2.33885 -1.79177 -0.0445374 -0.841804 -0.537942 + 2.0843 2.27043 -1.71266 -0.227093 -0.959056 -0.169234 + 1.58678 2.34309 -1.91852 0.29018 -0.803058 -0.520474 + 1.62731 2.40409 -1.94996 0.152462 -0.552871 -0.8192 + 1.781 2.40746 -1.9224 0.155324 -0.70291 -0.694113 + 1.91748 2.39915 -1.88422 0.193242 -0.633388 -0.749318 + 2.02626 2.35974 -1.81995 0.190851 -0.658213 -0.728239 + 1.42789 2.30996 -1.94454 0.365639 -0.567879 -0.737442 + 1.46842 2.37095 -1.97597 0.247474 -0.328742 -0.911419 + 1.49287 2.45738 -1.97767 0.159663 -0.138554 -0.9774 + 1.66729 2.45157 -1.98061 0.0760049 -0.35324 -0.93244 + 1.82098 2.45494 -1.95305 0.24581 -0.39973 -0.883059 + 1.33128 2.23969 -1.97442 0.638914 -0.433309 -0.635635 + 1.33576 2.3177 -2.00015 0.510398 -0.249068 -0.823079 + 1.36021 2.40413 -2.00185 0.223148 -0.0276724 -0.974392 + 1.53882 2.55361 -1.98375 0.0424011 -0.0418811 -0.998222 + 1.71324 2.5478 -1.98668 0.104952 -0.049717 -0.993234 + 1.25368 2.22285 -2.03966 0.497939 -0.106475 -0.860651 + 1.23734 2.32035 -2.03313 0.301296 0.0518492 -0.95212 + 1.25312 2.43435 -2.02718 0.262671 0.0598724 -0.963026 + 1.37599 2.51822 -1.99585 0.20468 -0.053114 -0.977387 + 1.59413 2.68402 -1.98483 0.0373841 0.0674627 -0.997021 + 1.19226 2.17559 -2.0672 0.601184 0.120441 -0.789982 + 1.17591 2.27308 -2.06065 0.473602 0.0994598 -0.875105 + 1.14108 2.34184 -2.07636 0.518574 0.0935959 -0.849894 + 1.247 2.56125 -2.01139 0.190673 0.0908362 -0.977442 + 1.4313 2.64864 -1.99694 0.082035 0.0206508 -0.996415 + 1.13496 2.46875 -2.06056 0.43331 0.14307 -0.889816 + 1.24444 2.67947 -2.00494 0.0962112 0.107172 -0.989574 + 1.42874 2.76685 -1.99049 0.0697176 0.0429018 -0.996644 + 1.63719 2.8068 -1.96728 0.0934946 0.133542 -0.986623 + 1.75757 2.67228 -1.98008 0.129854 0.0505806 -0.990242 + 1.03319 2.31833 -2.16724 0.60999 0.191388 -0.76895 + 0.996497 2.4102 -2.17036 0.660312 0.207757 -0.721682 + 1.09827 2.56071 -2.06364 0.416426 0.204381 -0.885899 + 0.944732 2.3707 -2.24494 0.850122 0.222017 -0.477494 + 0.986048 2.65546 -2.10375 0.65528 0.197438 -0.729127 + 1.00064 2.76627 -2.06269 0.641548 0.199214 -0.740763 + 1.11286 2.67152 -2.02258 0.301432 0.261851 -0.916827 + 0.956106 2.22434 -2.34064 0.886879 0.336654 -0.316401 + 0.891187 2.40223 -2.36215 0.887693 0.261349 -0.379075 + 0.934283 2.61586 -2.17837 0.808235 0.184166 -0.55932 + 0.975073 2.89702 -2.06695 0.80162 0.0435633 -0.596244 + 0.979776 2.03034 -2.56122 0.892278 0.383864 -0.237672 + 0.902561 2.25588 -2.45786 0.942154 0.269055 -0.199891 + 1.01974 1.93892 -2.55027 0.927369 0.298454 -0.225638 + 0.99941 1.89818 -2.6767 0.931517 0.290391 -0.218971 + 0.980083 1.97465 -2.65517 0.926274 0.326345 -0.188453 + 0.902867 2.20019 -2.5518 0.867913 0.40967 -0.280888 + 0.927778 1.73612 -0.733014 0.982974 0.0857146 0.162528 + 0.509794 2.09676 -0.93526 -0.995136 -0.0926188 0.0335534 + 0.536853 1.93903 -0.89247 -0.976427 -0.130032 0.172286 + 0.557887 1.87741 -0.816744 -0.982702 -0.142523 0.118253 + 0.544984 1.96833 -0.804808 -0.982382 -0.149969 0.111508 + 0.546724 1.84212 -0.915617 -0.973415 -0.176739 0.145692 + 0.567759 1.7805 -0.83989 -0.981761 -0.131877 0.136946 + 0.572445 1.81332 -0.755521 -0.977391 -0.160809 0.137288 + 0.534472 1.87048 -0.966136 -0.95337 -0.223907 0.202362 + 0.565725 1.7357 -0.938079 -0.991994 -0.100695 0.0762124 + 0.584067 1.72863 -0.796446 -0.971245 -0.148662 0.185966 + 0.522692 1.81068 -1.02855 -0.920148 -0.237118 0.311613 + 0.553473 1.76406 -0.988607 -0.948559 -0.222105 0.225623 + 0.52323 1.74945 -1.08691 -0.955974 -0.247696 0.157356 + 0.554011 1.70283 -1.04696 -0.943987 -0.18619 0.272435 + 0.532253 1.62568 -1.14653 -0.992083 -0.125579 0.0011034 + 0.542243 1.62171 -1.22585 -0.779024 -0.341375 -0.525913 + 0.50379 1.84717 -1.33935 0.121064 0.0314344 -0.992147 + 0.516746 1.9941 -1.29365 0.16402 -0.00232964 -0.986454 + 0.531356 2.07762 -1.31671 -0.202793 -0.227498 -0.952428 + 0.4273 1.85751 -1.34046 0.027498 -0.123479 -0.991966 + 0.427977 1.80321 -1.32542 -0.102736 -0.26681 -0.958258 + 0.307145 1.88639 -1.30329 -0.553259 -0.732472 -0.396724 + 0.590096 1.7375 -0.728603 -0.843983 -0.360656 0.397015 + 0.698828 2.11859 0.213736 0.561962 -0.240564 0.791408 + 0.813747 2.21001 0.167185 0.653596 -0.725447 0.215729 + 0.695469 2.2415 0.283044 0.290899 -0.953211 0.0822541 + 0.800807 2.16729 0.143582 0.607242 -0.146729 0.780851 + 0.833698 2.22428 -0.017537 0.954621 -0.287115 -0.0791371 + 0.848062 2.25593 0.053241 0.880113 -0.473604 0.0331692 + 0.820451 2.25574 -0.240823 0.967446 -0.236273 -0.0906826 + 0.779985 2.29664 -0.306655 0.956183 -0.287545 -0.0550654 + 0.776758 2.28597 -0.306972 0.968082 -0.19913 -0.152197 + 0.793378 2.25035 -0.483283 0.94545 -0.290324 0.147773 + 0.796669 2.22433 -0.213417 0.947011 -0.135195 -0.291364 + 0.698168 2.24505 -0.487516 0.871803 -0.482344 -0.0854645 + 0.66343 2.1034 -0.771961 0.850608 -0.481138 0.212067 + 0.690579 2.04601 -0.869965 0.530727 -0.599501 0.599105 + 0.775351 1.95469 -0.938787 -0.535531 -0.562834 0.629622 + 0.652101 2.00956 -0.770023 0.994828 -0.0958681 0.0335539 + 0.65719 1.99449 -0.872528 0.917711 -0.294289 0.266834 + 0.721707 1.96762 -0.977374 0.0359111 -0.684208 0.728403 + 0.763463 1.84218 -1.03071 -0.548072 -0.408358 0.729973 + 0.854714 1.6674 -0.986595 -0.874925 -0.476245 0.0877331 + 0.656367 1.90801 -0.744739 0.998217 -0.05561 0.0216843 + 0.661456 1.89294 -0.847236 0.998215 -0.0245201 0.0544646 + 0.688318 1.91609 -0.979938 0.791239 -0.269277 0.549027 + 0.723897 1.85084 -1.04911 0.281007 -0.228072 0.932211 + 0.641212 1.80309 -0.633011 0.975034 -0.211814 -0.0666538 + 0.588889 1.81998 -0.669658 0.82384 -0.0340243 0.5658 + 0.901206 1.61571 -1.00085 -0.693109 -0.685132 0.224039 + 0.837016 1.7382 -1.03661 -0.749239 -0.647207 0.140586 + 0.901206 1.61571 -1.00085 -0.715932 -0.513342 -0.473204 + 0.757834 2.14915 0.186202 -0.425153 0.00538387 -0.905105 + -1.17764 2.27532 0.212466 0.843377 -0.296139 -0.44835 + -1.31347 2.12724 0.109754 0.793546 -0.285467 -0.537395 + -1.33453 2.06406 0.095774 0.606277 -0.214905 -0.765666 + -1.30196 1.97625 0.143271 0.467733 -0.51259 -0.720054 + -1.39275 1.95991 0.121567 0.251253 -0.663219 -0.704991 + -1.21767 2.18061 0.184507 0.765395 -0.119622 -0.632346 + -1.31516 1.94747 0.173919 -0.0441729 -0.69767 -0.715056 + -1.18685 2.17753 0.247647 0.923516 -0.216905 -0.316341 + -1.19064 2.1133 0.362099 0.999487 -0.00202297 0.0319622 + -1.18731 2.03749 0.39659 0.788496 0.538188 0.297704 + -1.02369 1.81801 0.51875 0.769241 0.630648 0.102723 + -0.748335 1.58493 -1.27294 -0.139546 0.986449 -0.086292 + -0.748272 1.58103 -1.31759 -0.185898 0.978822 -0.0857284 + -0.711105 1.59853 -1.28851 -0.687442 0.724761 -0.0463128 + -0.711042 1.59463 -1.33315 -0.839139 0.541748 -0.0485361 + -0.699505 1.64767 -1.36081 -0.954206 0.293462 0.0580593 + -0.697709 1.64323 -1.30433 -0.948507 0.311161 0.059277 + -0.686108 1.69237 -1.37664 -0.928851 0.353046 0.112224 + -0.692772 1.67708 -1.37616 -0.851335 0.382325 0.359245 + -0.636581 1.83901 -1.44743 -0.928226 0.359568 0.0954311 + -0.220308 2.03334 -3.02461 -0.0801513 -0.938798 -0.335013 + -0.261303 1.99187 -2.98179 -0.187502 0.265591 -0.945677 + -0.284575 2.00426 -2.96885 -0.568285 -0.248324 -0.784466 + -0.199306 2.0285 -3.02623 0.045883 -0.866926 -0.49632 + -0.240301 1.98703 -2.9834 0.0570533 -0.00749639 -0.998343 + -0.263765 1.97714 -2.99568 0.119604 0.938579 -0.323671 + -0.28691 1.98164 -2.99787 0.221935 0.934964 -0.276743 + -0.284575 2.00426 -2.96885 0.0737328 0.783795 -0.616627 + -0.310183 1.99395 -2.98499 0.176062 0.959149 -0.221438 + -0.173526 2.0323 -3.02582 -0.133698 -0.964241 -0.228831 + -0.201346 1.98642 -2.97515 0.0163988 0.130809 -0.991272 + -0.22481 1.97654 -2.98743 0.0130636 0.940518 -0.339493 + -0.231446 2.02897 -3.02385 0.407855 -0.903828 -0.129423 + -0.306462 1.97626 -2.97875 0.483915 -0.866438 0.122931 + -0.284575 2.00426 -2.96885 0.366653 -0.928229 -0.0628972 + -0.295713 1.99981 -2.96814 0.652643 -0.62387 0.429933 + -0.320303 1.98989 -2.94595 0.796372 0.0261013 0.604244 + -0.331051 1.96634 -2.95656 0.0622725 -0.929419 0.363734 + -0.350253 1.97577 -2.9623 -0.583802 -0.743936 0.32517 + -0.39796 2.02379 -2.97147 -0.488138 -0.872068 0.0348973 + -0.328944 1.99242 -2.93294 0.649816 -0.538453 0.536477 + -0.328944 1.99242 -2.93294 -0.479139 -0.567698 0.669435 + -0.348145 2.00185 -2.93868 -0.745905 -0.657938 0.103655 + -0.356668 2.00434 -2.92579 -0.528691 -0.481318 -0.699156 + -0.384464 1.98607 -2.91054 -0.263055 -0.0453457 -0.963715 + -0.406745 1.97654 -2.90444 0.132234 -0.729845 -0.670702 + -0.343375 1.99505 -2.9427 -0.310433 0.919121 -0.242588 + -0.371171 1.97686 -2.92739 -0.5188 0.766889 -0.377794 + -0.397431 1.96752 -2.926 -0.320649 0.923092 -0.212335 + -0.406745 1.97654 -2.90444 -0.373183 0.765303 -0.524448 + -0.423478 1.96208 -2.9154 -0.262391 0.919116 -0.293898 + -0.44583 1.96623 -2.90117 0.0398298 0.040284 -0.998394 + -0.3657 1.98304 -2.9843 -0.421775 0.906457 0.0210142 + -0.391961 1.97369 -2.9829 -0.274839 0.958352 0.0776163 + -0.436121 1.96423 -2.9789 -0.185733 0.979741 0.0749052 + -0.462167 1.9588 -2.9683 -0.107238 0.990077 0.0908189 + -0.462562 1.95177 -2.91213 -0.169802 0.837056 -0.520101 + -0.346889 1.99167 -3.01484 -0.431965 0.897309 -0.0907949 + -0.329296 2.00112 -2.94802 0.155097 0.954334 0.255325 + -0.33281 1.99774 -3.02016 -0.15277 0.971756 -0.179863 + -0.322338 1.99302 -3.04417 0.20789 0.978012 -0.016584 + -0.328944 1.99242 -2.93294 0.0265057 0.974311 0.223643 + -0.348145 2.00185 -2.93868 0.494962 0.672361 -0.550403 + -0.477678 1.9723 -2.91668 0.0749566 -0.666881 -0.741385 + -0.504744 1.95583 -2.89736 -0.102313 -0.786442 -0.609132 + -0.484424 1.94554 -2.89294 -0.26841 -0.643287 -0.717034 + -0.52042 1.93869 -2.87167 -0.247113 -0.751105 -0.61219 + -0.54074 1.94898 -2.8761 -0.210205 -0.847566 -0.487284 + -0.573469 1.94957 -2.85811 -0.305937 -0.909683 -0.280856 + -0.614905 1.97986 -2.91918 -0.288926 -0.901819 -0.321317 + -0.534839 1.92882 -2.85178 -0.180211 -0.946202 -0.26875 + -0.558772 1.93836 -2.83091 -0.386603 -0.913903 -0.12377 + -0.642788 1.97122 -2.85022 -0.298621 -0.904674 -0.303957 + -0.532448 1.92559 -2.83099 -0.948828 -0.290266 -0.124383 + -0.556381 1.93513 -2.81012 -0.433795 -0.829294 -0.352268 + -0.628091 1.96002 -2.82302 -0.0925388 -0.917999 -0.385634 + -0.175566 1.99014 -2.97479 0.120543 -0.767637 -0.629447 + -0.136983 2.00247 -2.98235 -0.245385 -0.883166 -0.399754 + -0.128457 1.99899 -2.99252 -0.691513 -0.559645 0.456735 + -0.165001 2.02874 -3.03604 -0.37203 -0.914019 -0.16175 + -0.141836 1.9697 -3.01698 -0.780814 -0.624578 0.0152173 + -0.122047 1.95724 -3.0106 0.074926 -0.997181 0.00405767 + -0.108668 1.98654 -2.98615 -0.502205 -0.407388 0.762774 + -0.156423 2.02915 -3.04175 -0.116466 -0.596074 -0.794438 + -0.133259 1.97002 -3.02274 -0.0161232 -0.519196 -0.854503 + -0.082769 1.99305 -3.00163 0.425325 -0.744893 -0.514035 + -0.108668 1.98654 -2.98615 0.495081 -0.678801 0.542331 + -0.175985 2.10943 -3.08141 -0.278335 -0.390708 -0.877426 + -0.150816 2.0951 -3.08878 -0.523344 -0.335971 -0.783093 + -0.132025 2.07441 -3.09614 -0.524532 -0.425441 -0.737473 + -0.123316 2.05662 -3.08433 -0.260741 -0.778195 -0.571338 + -0.133336 2.04513 -3.05403 0.18847 -0.879113 -0.437768 + -0.093982 2.00583 -3.01377 0.0960676 -0.528986 -0.843176 + -0.185473 2.19701 -3.11309 -0.204291 -0.571278 -0.794925 + -0.140105 2.18376 -3.12234 -0.396297 -0.501788 -0.768868 + -0.114936 2.16933 -3.12975 -0.540457 -0.385614 -0.747802 + -0.083959 2.13644 -3.14199 -0.599683 -0.300588 -0.741639 + -0.065169 2.11575 -3.14936 -0.595133 -0.265103 -0.758641 + -0.217725 2.19464 -3.10718 0.00753708 -0.589024 -0.80808 + -0.182079 2.23311 -3.15402 -0.14078 -0.881711 -0.450296 + -0.136711 2.21986 -3.16327 -0.38733 -0.796874 -0.463646 + -0.238982 2.22262 -3.14485 0.191657 -0.861874 -0.469512 + -0.191271 2.24886 -3.2109 -0.0616488 -0.957934 -0.280289 + -0.129043 2.23586 -3.21559 -0.216743 -0.924201 -0.314443 + -0.248174 2.23837 -3.20173 0.268604 -0.92598 -0.265356 + -0.318018 2.1931 -3.18552 0.556114 -0.806754 -0.199714 + -0.350353 2.16381 -3.16919 0.590012 -0.775904 -0.223291 + -0.035427 2.13561 -3.18694 -0.682214 -0.458894 -0.56921 + -0.039535 2.08549 -3.15914 -0.379286 -0.54305 -0.749159 + -0.030826 2.06779 -3.14729 -0.13509 -0.749882 -0.647632 + -0.030826 2.04626 -3.10218 -0.0590464 -0.87446 -0.48149 + 0.039576 2.08557 -3.15907 0.379912 -0.542272 -0.749405 + 0.030828 2.06779 -3.14728 0.135537 -0.748663 -0.648948 + 0.030828 2.04626 -3.10218 0.081593 -0.911789 -0.402473 + 0.132066 2.0744 -3.09612 0.526476 -0.445916 -0.723866 + 0.123318 2.05662 -3.08433 0.411402 -0.759432 -0.503996 + 0.133336 2.04513 -3.05403 -0.0332632 -0.814664 -0.578979 + 0.070894 2.02181 -3.02604 0.351005 -0.486734 -0.799928 + 0.021963 2.02879 -3.08313 0.527441 -0.660561 -0.534289 + 0.150823 2.095 -3.08881 0.524743 -0.335332 -0.78243 + 0.175985 2.10953 -3.08138 0.278799 -0.389795 -0.877685 + 0.208237 2.10715 -3.07546 -0.0254115 -0.317133 -0.94804 + 0.114943 2.16932 -3.12973 0.540321 -0.3855 -0.747959 + 0.140105 2.18376 -3.12235 0.396281 -0.501989 -0.768744 + 0.185474 2.19702 -3.11311 0.204268 -0.571453 -0.794805 + 0.217725 2.19464 -3.10718 -0.00740461 -0.58899 -0.808106 + 0.088709 2.19606 -3.17486 0.617181 -0.628128 -0.47386 + 0.136709 2.21986 -3.16327 0.403162 -0.780595 -0.477631 + 0.182078 2.23311 -3.15402 0.126937 -0.876067 -0.465181 + 0.238985 2.22262 -3.14485 -0.222732 -0.863119 -0.453228 + 0.268534 2.17222 -3.09796 -0.236088 -0.484316 -0.842437 + 0.129042 2.23586 -3.21559 0.442592 -0.837313 -0.320967 + 0.080404 2.00707 -3.02371 0.558278 0.234857 -0.795718 + -0.129043 2.23586 -3.21559 -0.481621 -0.815823 -0.320117 + -0.080403 2.00708 -3.02372 -0.318263 -0.784542 -0.532167 + -0.596777 1.8903 -2.71226 0.637413 0.71044 0.298295 + -0.568869 1.86808 -2.71897 0.520562 0.793228 0.315919 + -0.554396 1.87296 -2.73803 -0.755406 0.513444 -0.407108 + -0.548043 1.89701 -2.80889 -0.412445 0.871443 0.265473 + -0.540993 1.91304 -2.85124 0.186979 0.908097 0.374698 + -0.539497 1.90957 -2.78863 -0.925256 -0.210189 -0.315789 + -0.540993 1.91304 -2.85124 -0.837668 0.545976 0.0149386 + -0.52297 1.93907 -2.90713 -0.555133 0.830707 0.0418757 + -0.575518 1.88522 -2.73566 -0.394493 -0.738218 -0.547184 + -0.56062 1.92182 -2.78625 -0.348486 -0.763191 -0.544148 + -0.568869 1.86808 -2.71897 -0.485676 -0.739604 -0.465945 + -0.589813 1.88044 -2.71658 -0.456706 -0.852813 0.253238 + -0.596777 1.8903 -2.71226 -0.205753 -0.510838 0.834691 + -0.61772 1.90266 -2.70986 -0.369921 -0.770768 -0.518724 + -0.654387 1.90403 -2.71624 0.15042 -0.886631 -0.437332 + -0.596777 1.8903 -2.71226 -0.363154 -0.457952 -0.811418 + 0.700788 1.60693 -3.09201 -0.935445 0.353103 0.0161381 + 0.700286 1.60496 -3.09226 -0.953977 0.189685 0.232263 + 0.713785 1.62766 -3.06485 -0.678695 0.713623 -0.173537 + 0.714287 1.62963 -3.06459 -0.919041 0.367061 0.143628 + 0.719965 1.63784 -3.07821 -0.830357 0.549801 -0.0906978 + 0.721527 1.63887 -3.08342 -0.817532 0.567644 -0.097067 + 0.702351 1.60795 -3.09721 -0.830406 0.556598 -0.0249845 + 0.700286 1.60496 -3.09226 -0.895389 0.430489 -0.113827 + 0.698218 1.60237 -3.10074 -0.935982 0.331597 -0.118238 + 0.735808 1.65866 -3.01872 -0.666743 0.734097 -0.128668 + 0.740829 1.67833 -3.01615 -0.863698 0.403629 0.301843 + 0.746507 1.68655 -3.02977 -0.771492 0.635909 -0.0205227 + 0.723359 1.65031 -3.03058 0.138716 0.819181 -0.556508 + 0.726764 1.6649 -3.00715 -0.0995092 0.980206 -0.171155 + 0.762929 1.68282 -2.988 -0.638984 0.39098 0.662445 + 0.76795 1.70249 -2.98543 -0.594273 0.5275 0.607111 + 0.701336 1.61931 -3.07671 0.328939 0.679388 -0.655921 + 0.683112 1.63959 -3.07115 -0.224761 0.653228 -0.723032 + 0.686517 1.65418 -3.04772 -0.11062 0.929914 -0.350747 + 0.710988 1.66406 -2.99897 -0.186712 0.974499 0.124456 + 0.744332 1.65545 -2.97188 -0.17084 0.85622 0.487546 + 0.700286 1.60496 -3.09226 0.159707 0.720202 -0.675132 + 0.697173 1.59291 -3.09688 -0.813514 0.116336 -0.56979 + 0.695999 1.5703 -3.11698 -0.986078 0.14171 -0.0869993 + 0.694954 1.56084 -3.11312 -0.978094 0.0883813 -0.188468 + 0.689663 1.57411 -3.09402 -0.741581 0.095203 -0.664074 + 0.688751 1.58509 -3.09346 -0.48378 0.0783975 -0.871671 + 0.696261 1.60389 -3.09632 -0.180911 0.450164 -0.874428 + 0.700286 1.60496 -3.09226 0.546028 0.497951 -0.67372 + 0.710325 1.62074 -3.11096 -0.879374 0.475627 -0.0219122 + 0.699405 1.57794 -3.14714 -0.888559 0.212688 -0.406482 + 0.694389 1.50268 -3.15615 -0.90074 0.0799559 -0.426936 + 0.68896 1.48336 -3.10853 -0.982827 0.0246061 -0.182883 + 0.683668 1.49664 -3.08943 -0.944176 -0.0217137 -0.328724 + 0.714458 1.62632 -3.10743 -0.825696 0.563977 0.0124751 + 0.755063 1.6842 -3.10586 -0.76741 0.630373 -0.117099 + 0.713731 1.62839 -3.14112 -0.831432 0.433017 -0.348163 + 0.724048 1.56911 -3.1729 -0.410332 0.178925 -0.894211 + 0.762133 1.69675 -3.08184 -0.736743 0.668983 -0.0983438 + 0.773682 1.70236 -3.1145 -0.399395 0.788765 -0.467262 + 0.73235 1.64655 -3.14976 -0.520148 0.581192 -0.625829 + 0.77521 1.71429 -3.01999 -0.440014 0.893548 0.0892177 + 0.790836 1.72448 -3.07206 -0.25334 0.960429 -0.115734 + 0.80354 1.71436 -3.10247 0.135789 0.848434 -0.511588 + 0.805723 1.6918 -3.12458 0.128472 0.662692 -0.73779 + 0.775865 1.6798 -3.13661 -0.0676384 0.598624 -0.798169 + 0.784145 1.71184 -2.99598 -0.230467 0.940921 0.248098 + 0.818774 1.72266 -3.0542 0.157211 0.987058 -0.0316526 + 0.831478 1.71254 -3.0846 0.385266 0.855034 -0.347111 + 0.810379 1.70534 -2.96548 -0.260932 0.717954 0.645334 + 0.826574 1.71469 -2.97603 0.12208 0.899702 0.419085 + 0.827708 1.72022 -3.03019 0.140143 0.986952 0.0792875 + 0.8513 1.71244 -3.03504 0.561292 0.827393 -0.0192898 + 0.76146 1.66694 -2.97721 -0.365876 0.625914 0.688743 + 0.80891 1.68947 -2.95469 -0.526387 0.535264 0.660613 + 0.819506 1.67489 -2.93533 -0.0602987 0.583959 0.80954 + 0.850166 1.70692 -2.98088 0.568615 0.745217 0.348323 + 0.767406 1.65093 -2.95128 -0.464066 0.686456 0.559841 + 0.772151 1.65318 -2.94903 -0.503024 0.628014 0.593772 + 0.782747 1.63861 -2.92967 -0.368758 0.557467 0.743806 + 0.750278 1.63944 -2.94596 0.0209299 0.823393 0.567086 + 0.759055 1.63552 -2.94107 -0.235389 0.788655 0.567992 + 0.7638 1.63777 -2.93882 -0.437651 0.643943 0.627535 + 0.780306 1.6323 -2.92608 -0.288204 0.647061 0.705868 + 0.815706 1.62228 -2.90612 0.124878 0.479006 0.868883 + 0.728557 1.65461 -2.9637 -0.00793514 0.907688 0.419572 + 0.750129 1.63638 -2.94029 0.18042 0.860595 0.476262 + 0.758906 1.63246 -2.93541 0.0561691 0.788152 0.612912 + 0.76136 1.63146 -2.93523 -0.0293958 0.697708 0.715779 + 0.70868 1.65059 -2.96396 -0.341861 0.822352 0.454827 + 0.742838 1.62485 -2.91521 -0.0152496 0.78271 0.6222 + 0.760134 1.62211 -2.92016 0.272579 0.828643 0.488929 + 0.762588 1.62112 -2.91999 0.0550852 0.817751 0.572931 + 0.795101 1.61183 -2.89945 -0.0469307 0.49094 0.869929 + 0.695763 1.65722 -2.99638 -0.454934 0.8663 0.206297 + 0.678778 1.63089 -2.96438 -0.758219 0.422261 0.496789 + 0.722961 1.62083 -2.91547 -0.40496 0.522384 0.750415 + 0.727908 1.5947 -2.90265 -0.623075 0.124454 0.772197 + 0.752843 1.61059 -2.89508 -0.094553 0.654026 0.75054 + 0.671291 1.64734 -3.04513 -0.759618 0.620622 -0.194444 + 0.665861 1.63752 -2.9968 -0.852983 0.476924 0.212044 + 0.683725 1.60477 -2.95156 -0.787319 0.0556653 0.614028 + 0.666173 1.60744 -3.06324 -0.955854 0.117315 -0.269407 + 0.660742 1.59762 -3.01491 -0.998913 0.0453507 0.0107923 + 0.670611 1.58683 -2.96985 -0.881131 -0.00980823 0.47277 + 0.72847 1.54609 -2.91265 -0.675457 -0.182414 0.714481 + 0.674551 1.60644 -3.08384 -0.623596 0.24512 -0.742324 + 0.67529 1.49763 -3.06883 -0.955341 -0.109941 -0.274294 + 0.675092 1.47307 -3.05471 -0.978055 -0.0556893 -0.200764 + 0.660545 1.57306 -3.00079 -0.991605 -0.0224113 0.127348 + 0.697311 1.61823 -3.08077 0.197968 0.57859 -0.791229 + 0.679223 1.43047 -3.06729 -0.978327 -0.0415076 -0.202863 + 0.665383 1.50919 -3.00677 -0.978842 -0.141584 0.147721 + 0.68851 1.41049 -3.11426 -0.989145 -0.0619066 -0.133268 + 0.686728 1.39615 -3.08333 -0.976048 -0.109724 -0.187857 + 0.677067 1.40267 -3.05111 -0.965029 -0.234309 0.117556 + 0.669514 1.46659 -3.01935 -0.966267 -0.184369 0.179824 + 0.693939 1.4298 -3.16189 -0.896329 -0.00861553 -0.443306 + 0.69819 1.36955 -3.16113 -0.898081 -0.0640788 -0.435136 + 0.694726 1.36325 -3.12214 -0.991672 -0.0822054 -0.0991424 + 0.692944 1.34892 -3.0912 -0.989454 -0.142851 -0.0239792 + 0.684572 1.36835 -3.06714 -0.954512 -0.289552 0.0711758 + 0.716485 1.43006 -3.18433 -0.41442 0.0047709 -0.910073 + 0.720736 1.36981 -3.18358 -0.373408 -0.0469636 -0.926478 + 0.719922 1.28898 -3.17817 -0.383264 -0.0664205 -0.921248 + 0.70197 1.28763 -3.1606 -0.897244 -0.0481392 -0.438902 + 0.698506 1.28133 -3.1216 -0.997817 -0.0432214 -0.0499371 + 0.719033 1.49384 -3.18192 -0.392002 0.0949836 -0.915048 + 0.76129 1.40878 -3.18738 -0.0326972 -0.0248075 -0.999157 + 0.757219 1.36651 -3.18369 -0.0128779 -0.0681832 -0.99759 + 0.756405 1.28568 -3.17829 0.016686 -0.0727226 -0.997213 + 0.763838 1.47256 -3.18497 -0.0105868 0.0574224 -0.998294 + 0.801582 1.39762 -3.18654 0.0371262 -0.0345071 -0.998715 + 0.797511 1.35535 -3.18285 0.0453096 -0.0904423 -0.994871 + 0.788812 1.28247 -3.17667 0.063947 -0.0823329 -0.994551 + 0.750995 1.17563 -3.16969 0.0160812 -0.061235 -0.997994 + 0.769195 1.54989 -3.17987 -0.0249877 0.120279 -0.992426 + 0.813673 1.53427 -3.17938 0.135486 0.108803 -0.984787 + 0.808316 1.45694 -3.18447 0.0694908 0.0581577 -0.995886 + 0.845832 1.38144 -3.18374 0.354266 -0.143398 -0.924085 + 0.833141 1.35149 -3.17915 0.320905 -0.185374 -0.928793 + 0.733622 1.62154 -3.16383 -0.453746 0.321119 -0.831263 + 0.778768 1.60233 -3.1708 0.028152 0.253517 -0.966921 + 0.813206 1.60082 -3.16797 0.137868 0.242546 -0.960294 + 0.857387 1.52845 -3.17019 0.451533 0.117568 -0.884475 + 0.852566 1.44075 -3.18167 0.38889 0.0403665 -0.9204 + 0.777137 1.65479 -3.15069 0.0154395 0.445613 -0.895093 + 0.811574 1.65329 -3.14786 0.0838981 0.451101 -0.88852 + 0.846504 1.64373 -3.14987 0.395785 0.395273 -0.828923 + 0.85692 1.595 -3.15879 0.495367 0.203617 -0.844483 + 0.840653 1.68224 -3.12658 0.376947 0.648321 -0.661506 + 0.863912 1.67388 -3.10907 0.737494 0.536513 -0.41019 + 0.874516 1.63969 -3.12224 0.81587 0.337792 -0.469312 + 0.884932 1.59097 -3.13117 0.835199 0.198623 -0.512827 + 0.886875 1.52234 -3.145 0.822874 0.0787617 -0.562739 + 0.854737 1.70418 -3.06709 0.646513 0.730064 -0.221421 + 0.88195 1.67248 -3.04744 0.888013 0.448523 -0.101287 + 0.892555 1.63829 -3.06061 0.964454 0.25371 -0.0738963 + 0.9003 1.5916 -3.08948 0.971079 0.174759 -0.162678 + 0.902243 1.52298 -3.10331 0.984157 0.0188288 -0.176299 + 0.878514 1.68074 -3.01539 0.886186 0.445666 0.126712 + 0.876869 1.66136 -2.98761 0.895263 0.283128 0.344008 + 0.883256 1.63656 -2.98772 0.932162 0.174993 0.316941 + 0.892188 1.60638 -3.01517 0.978727 0.081796 0.188154 + 0.899933 1.55969 -3.04404 0.986329 -0.0091884 0.164535 + 0.848521 1.68754 -2.95309 0.492205 0.602971 0.627822 + 0.844721 1.63493 -2.92389 0.598312 0.288512 0.747518 + 0.851108 1.61012 -2.92401 0.745631 0.174029 0.643232 + 0.874069 1.58832 -2.95356 0.882402 -0.00570791 0.470462 + 0.883002 1.55814 -2.981 0.923409 -0.11779 0.365297 + 0.833524 1.59783 -2.90054 0.519677 0.0550165 0.85259 + 0.856485 1.57603 -2.93009 0.743148 -0.15405 0.651153 + 0.853575 1.52989 -2.94193 0.746095 -0.207528 0.632672 + 0.874246 1.48103 -2.99973 0.894297 -0.167073 0.415113 + 0.812919 1.58737 -2.89387 0.217734 -0.0105637 0.975951 + 0.810009 1.54124 -2.90571 0.519032 -0.208213 0.829007 + 0.805551 1.45534 -2.91908 0.568426 -0.228602 0.790337 + 0.844819 1.45278 -2.96066 0.768549 -0.257066 0.585874 + 0.876418 1.43272 -3.02103 0.869527 -0.188582 0.456465 + 0.781249 1.53134 -2.89374 0.151456 -0.184957 0.971006 + 0.776791 1.44544 -2.90711 -0.328562 -0.252617 0.910072 + 0.792961 1.41006 -2.92624 0.171971 -0.606728 0.776085 + 0.832229 1.40751 -2.96782 0.673481 -0.419816 0.608422 + 0.777383 1.60064 -2.89336 0.200314 0.424396 0.883042 + 0.775356 1.57809 -2.88406 0.480751 0.039515 0.875966 + 0.75727 1.49267 -2.90546 -0.343978 -0.301939 0.889108 + 0.768564 1.43061 -2.9253 -0.541749 -0.438385 0.717166 + 0.784733 1.39524 -2.94443 -0.0485043 -0.694091 0.718251 + 0.750816 1.58804 -2.88577 -0.300059 0.114674 0.947003 + 0.751378 1.53942 -2.89578 -0.395611 -0.215859 0.892691 + 0.715355 1.52815 -2.93095 -0.702633 -0.207871 0.680512 + 0.728331 1.47624 -2.93836 -0.6625 -0.305273 0.684033 + 0.675449 1.52296 -2.97583 -0.831941 -0.184289 0.523365 + 0.688425 1.47104 -2.98324 -0.771179 -0.302461 0.560179 + 0.739624 1.41418 -2.9582 -0.654186 -0.363178 0.663433 + 0.746833 1.36701 -2.97759 -0.511635 -0.444488 0.735296 + 0.786007 1.36963 -2.96497 0.141565 -0.554925 0.819767 + 0.695978 1.40712 -3.015 -0.773997 -0.350969 0.527019 + 0.703187 1.35996 -3.03439 -0.784807 -0.400852 0.472648 + 0.715481 1.33661 -3.03751 -0.813503 -0.266747 0.516778 + 0.744527 1.32767 -3.00042 -0.587356 -0.254346 0.768323 + 0.783702 1.33029 -2.9878 0.120904 -0.3648 0.923203 + 0.696866 1.34501 -3.07027 -0.914946 -0.298987 0.271072 + 0.70283 1.27277 -3.07349 -0.940969 -0.060861 0.332976 + 0.717646 1.267 -3.04741 -0.837119 -0.0682182 0.54275 + 0.746692 1.25807 -3.01032 -0.555269 -0.103092 0.825256 + 0.698909 1.27668 -3.09442 -0.99453 -0.0551595 0.0887001 + 0.701586 1.16723 -3.09375 -0.993417 -0.0329606 0.109707 + 0.705499 1.16387 -3.07604 -0.935535 -0.0353781 0.351458 + 0.720315 1.1581 -3.04997 -0.833832 -0.0353227 0.550887 + 0.701184 1.17188 -3.12093 -0.998571 -0.0322023 -0.0426532 + 0.705125 1.06853 -3.11732 -0.997987 -0.050053 -0.038954 + 0.705752 1.06448 -3.09411 -0.992409 -0.0495043 0.112581 + 0.709665 1.06112 -3.07641 -0.940536 -0.0444678 0.336771 + 0.703946 1.17691 -3.15202 -0.905141 -0.0426522 -0.422967 + 0.707888 1.07356 -3.14842 -0.924691 -0.0569793 -0.376429 + 0.713241 0.976547 -3.1442 -0.925466 -0.0642167 -0.373347 + 0.710884 0.972315 -3.11638 -0.997643 -0.0566793 -0.0386713 + 0.711511 0.968265 -3.09316 -0.991721 -0.0556331 0.115734 + 0.721898 1.17826 -3.1696 -0.37877 -0.0602308 -0.923529 + 0.72109 1.07123 -3.16464 -0.444997 -0.0453588 -0.894383 + 0.726443 0.974225 -3.16042 -0.580861 -0.0676771 -0.811184 + 0.726527 0.875771 -3.15145 -0.634698 -0.105587 -0.765512 + 0.718143 0.880408 -3.13907 -0.941296 -0.073221 -0.329545 + 0.750186 1.0686 -3.16473 0.00844807 -0.0177461 -0.999807 + 0.745035 0.958311 -3.16628 -0.162641 -0.0515508 -0.985338 + 0.745119 0.859859 -3.15731 -0.234301 -0.1429 -0.961604 + 0.775266 1.06278 -3.16408 0.066902 -0.0214768 -0.997528 + 0.770114 0.952483 -3.16563 0.12031 -0.0438588 -0.991767 + 0.762232 0.852825 -3.15737 0.0680338 -0.151879 -0.986055 + 0.741544 0.769971 -3.13812 -0.229043 -0.313945 -0.9214 + 0.783401 1.17241 -3.16807 0.0703857 -0.0614228 -0.995627 + 0.803682 1.05969 -3.16112 0.403698 -0.0536019 -0.913321 + 0.794329 0.950801 -3.16004 0.448426 -0.070075 -0.891069 + 0.786447 0.851142 -3.15179 0.445215 -0.1548 -0.881941 + 0.811817 1.16932 -3.16512 0.379728 -0.0883243 -0.920872 + 0.821023 1.05585 -3.14529 0.832958 -0.0870153 -0.546451 + 0.81167 0.946961 -3.14421 0.831544 -0.1018 -0.54605 + 0.79914 0.848498 -3.14022 0.814522 -0.168242 -0.555201 + 0.772999 0.76158 -3.13749 0.3191 -0.328354 -0.889021 + 0.824442 1.2786 -3.17296 0.37599 -0.116431 -0.91928 + 0.845429 1.27364 -3.155 0.805996 -0.155493 -0.571132 + 0.832804 1.16437 -3.14715 0.821373 -0.116734 -0.558319 + 0.829853 1.05014 -3.11636 0.987854 -0.100336 -0.118644 + 0.819573 0.942088 -3.11833 0.985848 -0.111342 -0.125325 + 0.859534 1.34392 -3.15667 0.764696 -0.290696 -0.575096 + 0.856502 1.26648 -3.11872 0.976875 -0.167397 -0.133013 + 0.841635 1.15865 -3.11822 0.984171 -0.123086 -0.127505 + 0.82755 1.04513 -3.0913 0.963053 -0.112741 0.244577 + 0.872225 1.37387 -3.16127 0.786749 -0.240202 -0.568621 + 0.870607 1.33676 -3.1204 0.940795 -0.305928 -0.145988 + 0.85376 1.26113 -3.08574 0.959641 -0.168593 0.225091 + 0.838893 1.1533 -3.08524 0.962827 -0.122529 0.240728 + 0.882054 1.43465 -3.15648 0.83209 -0.0378242 -0.553349 + 0.886844 1.37081 -3.11415 0.952646 -0.281034 -0.116129 + 0.883944 1.37025 -3.07144 0.917392 -0.326949 0.226926 + 0.867707 1.3362 -3.07768 0.917191 -0.337814 0.211289 + 0.896673 1.43159 -3.10936 0.982078 -0.104648 -0.156752 + 0.896536 1.41999 -3.07138 0.969828 -0.170033 0.174707 + 0.863826 1.38298 -3.02108 0.785117 -0.292005 0.546191 + 0.850533 1.33146 -3.04056 0.798927 -0.312346 0.513961 + 0.836586 1.25639 -3.04862 0.825092 -0.166957 0.539767 + 0.902105 1.51138 -3.06534 0.985669 -0.0539359 0.159834 + 0.833503 1.38189 -2.98836 0.630331 -0.412928 0.657399 + 0.82021 1.33037 -3.00783 0.585936 -0.318945 0.744952 + 0.812463 1.25423 -3.02293 0.611503 -0.165467 0.773747 + 0.775955 1.25415 -3.0029 0.109863 -0.155232 0.98175 + 0.771958 1.1473 -3.01397 0.127433 -0.105463 0.986224 + 0.801073 1.14736 -3.02995 0.608752 -0.121245 0.784041 + 0.825197 1.14953 -3.05563 0.828094 -0.122487 0.547044 + 0.742695 1.15122 -3.02139 -0.556495 -0.059617 0.82871 + 0.742493 1.04514 -3.02834 -0.503241 -0.0782431 0.860597 + 0.764642 1.03836 -3.02585 0.173733 -0.123124 0.977066 + 0.793758 1.03842 -3.04183 0.603302 -0.134541 0.786082 + 0.813854 1.04135 -3.06169 0.816734 -0.131012 0.561945 + 0.720112 1.05203 -3.05692 -0.845027 -0.0437517 0.532931 + 0.725672 0.955581 -3.05743 -0.855401 -0.0455373 0.515961 + 0.737453 0.933047 -3.04199 -0.535915 -0.0780239 0.840659 + 0.759602 0.926263 -3.03951 0.239594 -0.123193 0.963025 + 0.715225 0.964675 -3.07691 -0.940826 -0.0548141 0.334429 + 0.720464 0.869428 -3.07741 -0.946526 -0.0502731 0.318686 + 0.726842 0.85972 -3.0645 -0.874596 -0.0557324 0.481638 + 0.738623 0.837186 -3.04907 -0.49374 -0.0934459 0.864574 + 0.716751 0.87302 -3.09366 -0.990353 -0.0518002 0.128522 + 0.721533 0.778315 -3.0923 -0.980171 -0.096369 0.173143 + 0.72532 0.775814 -3.08118 -0.934154 -0.102162 0.341935 + 0.731699 0.766105 -3.06827 -0.892646 -0.112527 0.436486 + 0.715786 0.876178 -3.11125 -0.998312 -0.0529804 -0.0237958 + 0.720568 0.781473 -3.10989 -0.994763 -0.0961929 -0.0345456 + 0.727586 0.728534 -3.09845 -0.753101 -0.657734 -0.0149931 + 0.731373 0.726032 -3.08733 -0.896027 -0.413148 0.162615 + 0.73793 0.755901 -3.05943 -0.54205 -0.217014 0.811841 + 0.721855 0.783783 -3.12507 -0.940259 -0.127966 -0.315497 + 0.728872 0.730843 -3.11363 -0.753535 -0.485996 -0.442711 + 0.740176 0.721669 -3.11429 -0.43502 -0.711477 -0.551867 + 0.737605 0.715827 -3.07849 -0.610775 -0.681908 0.402436 + 0.752399 0.748231 -3.05953 0.131267 -0.282889 0.950128 + 0.73024 0.779145 -3.13746 -0.562717 -0.215037 -0.798191 + 0.758657 0.762938 -3.13818 -0.0637806 -0.337891 -0.939022 + 0.755709 0.715314 -3.11404 -0.172974 -0.796798 -0.578958 + 0.753137 0.709472 -3.07824 -0.0550107 -0.868767 0.492156 + 0.770051 0.713956 -3.11335 0.358864 -0.751013 -0.554252 + 0.767678 0.70932 -3.08482 0.434262 -0.824148 0.363588 + 0.76694 0.74808 -3.06611 0.533913 -0.219183 0.816637 + 0.778414 0.831733 -3.06725 0.635848 -0.103489 0.764845 + 0.753092 0.829517 -3.04917 0.274375 -0.12115 0.953961 + 0.785692 0.758936 -3.12592 0.779881 -0.303731 -0.547296 + 0.790005 0.756277 -3.1118 0.946459 -0.280706 -0.159434 + 0.774364 0.711295 -3.09923 0.611396 -0.790103 -0.0439523 + 0.78164 0.750508 -3.07983 0.799905 -0.22335 0.557016 + 0.807043 0.843624 -3.11434 0.978606 -0.1607 -0.128475 + 0.805363 0.839829 -3.09679 0.935664 -0.144888 0.321777 + 0.788325 0.752482 -3.09424 0.941537 -0.257519 0.217237 + 0.793113 0.83416 -3.08097 0.749946 -0.104536 0.653187 + 0.81727 0.937079 -3.09327 0.933411 -0.10991 0.341561 + 0.80502 0.931409 -3.07746 0.764571 -0.123691 0.632559 + 0.784924 0.928477 -3.05759 0.64749 -0.138817 0.749324 + -0.891883 1.52196 -2.6212 -0.22609 0.561287 0.796141 + -0.906756 1.51837 -2.62531 0.10449 0.994419 -0.0145637 + -0.93052 1.51733 -2.62797 0.0584756 0.636585 -0.768986 + -0.892392 1.53419 -2.64619 -0.365591 0.808455 0.461241 + -0.900577 1.5312 -2.64834 0.139518 0.805828 0.575479 + -0.912714 1.52633 -2.6262 0.242418 0.388341 0.889058 + -0.93052 1.51733 -2.62797 -0.419363 0.0396953 0.90695 + -0.877519 1.53779 -2.64208 -0.301602 0.825908 0.476352 + -0.890007 1.54021 -2.65338 -0.225765 0.663121 0.713653 + -0.898192 1.53722 -2.65553 0.107253 0.322486 0.940478 + -0.906535 1.53917 -2.64923 0.655018 0.201444 0.728266 + -0.841083 1.54559 -2.63191 -0.102775 0.670841 0.734445 + -0.818326 1.56307 -2.64951 -0.0447733 0.804111 0.59279 + -0.854762 1.55527 -2.65968 -0.231459 0.809545 0.539503 + -0.875344 1.55504 -2.66534 -0.0540791 0.707923 0.704217 + -0.876163 1.50957 -2.61646 -0.0435633 0.0331228 0.998501 + -0.825363 1.5332 -2.62717 0.190283 0.303543 0.933624 + -0.801154 1.54689 -2.63927 0.39546 0.427512 0.812923 + -0.779329 1.56435 -2.66489 0.592562 0.485385 0.642862 + -0.796501 1.58053 -2.67512 0.103071 0.837004 0.537402 + -0.928499 1.44977 -2.64188 -0.393582 -0.269532 0.878889 + -0.88467 1.4419 -2.63615 -0.0961734 -0.303545 0.947951 + -0.814638 1.48823 -2.62312 0.295047 -0.124756 0.947303 + -0.79043 1.50192 -2.63522 0.601685 0.0229928 0.798403 + -0.969471 1.43614 -2.67626 -0.647472 -0.201327 0.735015 + -0.910615 1.32677 -2.68468 -0.221259 -0.330885 0.917365 + -0.866786 1.3189 -2.67895 0.106557 -0.392402 0.913601 + -0.823145 1.42055 -2.64281 0.267356 -0.355809 0.8955 + -0.788958 1.41557 -2.6663 0.656989 -0.353273 0.666006 + -0.971492 1.50371 -2.66235 -0.693407 -0.0525904 0.718624 + -0.983836 1.51751 -2.67543 -0.75654 0.03766 0.652862 + -0.999264 1.50315 -2.6968 -0.879837 -0.0303789 0.474304 + -0.998304 1.44441 -2.70876 -0.876009 -0.114088 0.468606 + -0.964992 1.35018 -2.68955 -0.491557 -0.234337 0.838724 + -0.940298 1.55651 -2.64549 -0.447077 0.350576 0.822933 + -0.952642 1.57031 -2.65857 -0.461898 0.419921 0.781228 + -0.979896 1.57252 -2.68028 -0.721434 0.400796 0.564708 + -0.995324 1.55816 -2.70165 -0.897094 0.288711 0.334466 + -0.922492 1.56551 -2.64372 0.0630064 0.524095 0.849326 + -0.911465 1.58928 -2.66198 0.190243 0.574209 0.796299 + -0.937803 1.59891 -2.67516 -0.243033 0.734408 0.633703 + -0.965057 1.60113 -2.69687 -0.559648 0.733901 0.384946 + -0.905557 1.54438 -2.64776 0.354318 -0.0592797 0.933244 + -0.894531 1.56815 -2.66602 0.48239 0.337818 0.808195 + -0.867746 1.59585 -2.69256 0.474283 0.485573 0.734353 + -0.885343 1.61232 -2.69242 0.267523 0.705233 0.656565 + -0.911681 1.62195 -2.7056 -0.10586 0.910048 0.400757 + -0.897214 1.54243 -2.65405 0.345225 0.077066 0.93535 + -0.882551 1.55726 -2.66602 0.234796 0.498919 0.834237 + -0.855766 1.58495 -2.69256 0.28742 0.637788 0.714574 + -0.849924 1.60828 -2.71679 0.566754 0.663429 0.488521 + -0.867521 1.62475 -2.71665 0.380702 0.828308 0.411063 + -0.849585 1.5812 -2.68906 -0.0353293 0.798288 0.601239 + -0.828368 1.59373 -2.71497 0.146724 0.943731 0.296383 + -0.834549 1.59748 -2.71847 0.444904 0.799796 0.402973 + -0.834941 1.60577 -2.74159 0.591739 0.774122 0.224898 + -0.864122 1.6263 -2.73181 0.423915 0.889071 0.172767 + -0.829003 1.58143 -2.6834 -0.121484 0.851511 0.510069 + -0.811174 1.5928 -2.7105 -0.0214423 0.983216 0.181182 + -0.811027 1.59247 -2.74355 0.153523 0.985513 0.072074 + -0.819566 1.59496 -2.74326 0.424025 0.889941 0.16795 + -0.778672 1.5919 -2.70222 0.35084 0.880319 0.319296 + -0.772282 1.59501 -2.73269 0.302944 0.940593 0.153327 + -0.793833 1.59155 -2.73908 -0.060727 0.998063 -0.0134772 + -0.803196 1.59435 -2.77524 0.186314 0.976174 0.111227 + -0.811736 1.59684 -2.77495 0.409385 0.900436 0.147034 + -0.760085 1.57115 -2.69963 0.825939 0.432965 0.361061 + -0.753695 1.57426 -2.7301 0.817051 0.471931 0.331223 + -0.751357 1.59298 -2.76679 0.446724 0.879992 0.161407 + -0.769096 1.59685 -2.77483 0.0491148 0.998454 -0.0260182 + -0.790647 1.59339 -2.78122 0.0213143 0.998105 0.0577178 + -0.765915 1.5493 -2.67958 0.848401 0.161521 0.504109 + -0.741668 1.50855 -2.71809 0.880022 0.19405 0.433481 + -0.733332 1.50676 -2.73257 0.956958 0.0327701 0.288369 + -0.745359 1.57248 -2.74458 0.735298 0.470937 0.487396 + -0.777016 1.48688 -2.64992 0.750565 -0.115649 0.650598 + -0.747498 1.4867 -2.69804 0.889495 -0.0654025 0.45224 + -0.738473 1.45156 -2.73762 0.969209 -0.219454 0.111688 + -0.726742 1.56403 -2.75754 0.931474 0.259925 0.25455 + -0.75944 1.41539 -2.71442 0.855891 -0.307935 0.415485 + -0.765923 1.35168 -2.76479 0.958521 -0.283734 0.0270655 + -0.731883 1.50883 -2.76259 0.984025 -0.112073 -0.138327 + -0.746557 1.53971 -2.81573 0.906447 0.0021148 -0.422314 + -0.73274 1.58453 -2.77975 0.824529 0.558302 -0.0919244 + -0.78689 1.3155 -2.7416 0.805312 -0.353729 0.47576 + -0.799393 1.24551 -2.7692 0.854398 -0.260015 0.449884 + -0.773356 1.3433 -2.78776 0.966381 -0.20482 -0.155421 + -0.739316 1.50045 -2.78555 0.945678 -0.13106 -0.297517 + -0.814154 1.31359 -2.71211 0.593899 -0.404248 0.695606 + -0.826657 1.2436 -2.73972 0.661291 -0.338552 0.669385 + -0.848341 1.31858 -2.68862 0.446106 -0.406151 0.797515 + -0.848495 1.23947 -2.7224 0.513131 -0.362928 0.777805 + -0.823961 1.19951 -2.76147 0.67794 -0.307272 0.667818 + -0.86694 1.2398 -2.71272 0.162325 -0.417997 0.893828 + -0.862939 1.19246 -2.73746 0.15102 -0.452062 0.879109 + -0.8458 1.19538 -2.74415 0.512286 -0.367034 0.776434 + -0.901155 1.24515 -2.71393 -0.189097 -0.424621 0.885403 + -0.897154 1.19781 -2.73866 -0.202264 -0.474083 0.856933 + -0.885064 1.11308 -2.78374 -0.203041 -0.486904 0.849529 + -0.857895 1.11402 -2.77952 0.139952 -0.469199 0.871932 + -0.840756 1.11695 -2.78622 0.510101 -0.386238 0.768516 + -0.955531 1.26856 -2.7188 -0.496144 -0.396083 0.772632 + -0.944055 1.19838 -2.75499 -0.510399 -0.452603 0.731193 + -0.931966 1.11365 -2.80007 -0.484807 -0.470809 0.737089 + -0.983141 1.28138 -2.74361 -0.889107 -0.279328 0.36258 + -0.971665 1.21119 -2.77979 -0.893401 -0.307535 0.327502 + -0.95616 1.11954 -2.82119 -0.868557 -0.330632 0.369177 + -0.908684 1.00316 -2.85679 -0.470362 -0.462925 0.751306 + -0.993825 1.35845 -2.72205 -0.905694 -0.185731 0.381081 + -0.988035 1.29495 -2.78707 -0.984831 -0.167623 0.0448501 + -0.975929 1.22491 -2.81432 -0.982278 -0.183621 0.0376019 + -0.960425 1.13325 -2.85572 -0.985402 -0.165077 0.0416373 + -1.01339 1.45412 -2.75603 -0.984817 -0.0887633 0.149187 + -0.998719 1.37202 -2.76552 -0.984029 -0.169562 0.0541816 + -0.990991 1.30479 -2.82818 -0.985617 -0.167175 0.0247397 + -0.978886 1.23475 -2.85543 -0.984693 -0.174093 0.00843553 + -0.963241 1.14511 -2.88537 -0.986167 -0.165736 -0.00230545 + -1.01435 1.51286 -2.74407 -0.987585 0.0792685 0.135622 + -1.0123 1.53068 -2.77243 -0.972831 0.230619 -0.0203678 + -1.01708 1.46156 -2.80018 -0.997232 -0.0441868 -0.0598019 + -1.0024 1.37945 -2.80967 -0.988283 -0.151019 0.0221316 + -0.993265 1.57599 -2.73001 -0.864745 0.486161 0.125953 + -0.983454 1.59551 -2.77394 -0.806544 0.588438 -0.0568123 + -1.00644 1.53931 -2.8072 -0.930646 0.307611 -0.198176 + -1.01122 1.47018 -2.83495 -0.978063 0.0583339 -0.199974 + -0.955245 1.62066 -2.7408 -0.48232 0.859587 0.168754 + -0.946612 1.62905 -2.77789 -0.340305 0.936351 -0.086251 + -0.967775 1.60432 -2.81096 -0.657293 0.687269 -0.309236 + -0.990762 1.54811 -2.84422 -0.836216 0.402474 -0.372502 + -0.903047 1.63034 -2.7427 -0.0882662 0.99462 0.0542233 + -0.925879 1.62295 -2.81582 -0.168011 0.937725 -0.304048 + -0.947043 1.59822 -2.84888 -0.427489 0.715085 -0.553088 + -0.887393 1.63128 -2.73602 0.00295766 0.9891 0.147214 + -0.910225 1.62389 -2.80914 0.102165 0.974336 -0.200577 + -0.905845 1.6127 -2.8457 0.0248469 0.874337 -0.484684 + -0.883994 1.63283 -2.75118 -0.0178476 0.999277 -0.0335799 + -0.879614 1.62164 -2.78774 0.168309 0.947439 -0.272085 + -0.869875 1.58653 -2.88225 -0.0578116 0.809356 -0.584467 + -0.863711 1.54912 -2.92 -0.268314 0.380988 -0.884791 + -0.89968 1.5753 -2.88344 -0.271146 0.550918 -0.789284 + -0.85349 1.62504 -2.76183 0.379809 0.925062 0.00223308 + -0.859971 1.62019 -2.79007 0.0168362 0.970605 -0.240088 + -0.850232 1.58508 -2.88458 0.0153005 0.804867 -0.593257 + -0.835818 1.55511 -2.91418 0.278561 0.479645 -0.832072 + -0.854955 1.47201 -2.93872 -0.063711 0.182406 -0.981157 + -0.824309 1.60451 -2.7716 0.574778 0.802247 0.161339 + -0.82079 1.61174 -2.82678 0.344894 0.935113 -0.0813088 + -0.827271 1.60687 -2.85503 0.149029 0.890965 -0.428919 + -0.812857 1.57691 -2.88462 0.373274 0.661785 -0.650159 + -0.808217 1.60406 -2.83014 0.314385 0.944017 -0.0999674 + -0.795668 1.6031 -2.83612 0.258166 0.929567 -0.263164 + -0.792252 1.56646 -2.87796 0.662158 0.402325 -0.632204 + -0.827063 1.478 -2.93291 0.468141 0.172441 -0.866665 + -0.775063 1.59265 -2.82945 0.473812 0.80152 -0.364785 + -0.77114 1.54396 -2.85738 0.817065 0.136911 -0.560053 + -0.805951 1.4555 -2.91233 0.808165 0.0559644 -0.586291 + -0.824235 1.37254 -2.94607 0.613753 0.122473 -0.77994 + -0.872747 1.46842 -2.93547 -0.0893839 0.29444 -0.951481 + -0.757324 1.58878 -2.8214 0.614111 0.647935 -0.450609 + -0.775446 1.45734 -2.85964 0.898803 -0.0613154 -0.434044 + -0.79373 1.37437 -2.89337 0.912884 0.00115234 -0.408217 + -0.768206 1.41808 -2.82947 0.948323 -0.136453 -0.286467 + -0.780405 1.34771 -2.8475 0.977473 -0.0739796 -0.197671 + -0.800511 1.2866 -2.91908 0.906474 0.0521904 -0.419024 + -0.785555 1.27293 -2.80579 0.983717 -0.124474 0.129641 + -0.785618 1.23892 -2.82147 0.989766 -0.0798494 0.118267 + -0.787186 1.25993 -2.87321 0.988089 -0.00621435 -0.153757 + -0.799455 1.2115 -2.78489 0.864258 -0.211996 0.456198 + -0.798572 1.13536 -2.82202 0.873662 -0.215576 0.436168 + -0.789111 1.14932 -2.85386 0.992109 -0.0734903 0.101584 + -0.79068 1.17034 -2.9056 0.982825 0.0193546 -0.183523 + -0.823078 1.12337 -2.79861 0.67682 -0.321418 0.662273 + -0.8192 1.01195 -2.85771 0.67275 -0.318662 0.667729 + -0.801549 1.02036 -2.87402 0.8689 -0.214634 0.446032 + -0.792088 1.03432 -2.90586 0.995083 -0.0613204 0.0777778 + -0.836878 1.00552 -2.84532 0.476401 -0.389876 0.78806 + -0.830536 0.893194 -2.90304 0.470886 -0.372882 0.799515 + -0.818915 0.897514 -2.9108 0.664699 -0.307494 0.680898 + -0.801264 0.905924 -2.92711 0.874166 -0.203711 0.440836 + -0.848297 1.00313 -2.84221 0.107195 -0.464102 0.879272 + -0.841954 0.890798 -2.89992 0.0966079 -0.440808 0.892387 + -0.833718 0.777782 -2.95507 0.095437 -0.399929 0.911564 + -0.826877 0.779219 -2.95694 0.466962 -0.338023 0.817121 + -0.815256 0.783538 -2.96471 0.665399 -0.278073 0.692762 + -0.875466 1.00218 -2.84643 -0.198566 -0.479279 0.854905 + -0.859798 0.890231 -2.90282 -0.202535 -0.45191 0.868767 + -0.893016 0.891206 -2.91318 -0.444824 -0.444226 0.777685 + -0.871462 0.777799 -2.96418 -0.445752 -0.408124 0.796706 + -0.851562 0.777212 -2.95797 -0.210514 -0.411461 0.886783 + -0.91125 0.894913 -2.92662 -0.755978 -0.381665 0.531816 + -0.889696 0.781507 -2.97762 -0.762165 -0.364953 0.53471 + -0.872875 0.707806 -3.00101 -0.774018 -0.304332 0.555228 + -0.861211 0.705433 -2.99241 -0.469271 -0.289304 0.834319 + -0.841311 0.704848 -2.9862 -0.220981 -0.267276 0.93794 + -0.932878 1.00905 -2.87791 -0.77868 -0.387517 0.493445 + -0.923644 0.903215 -2.94988 -0.945361 -0.269203 0.183908 + -0.897121 0.78648 -2.99155 -0.943409 -0.276693 0.18281 + -0.8803 0.712776 -3.01494 -0.944125 -0.288983 0.158481 + -0.945272 1.01735 -2.90117 -0.952154 -0.248534 0.177858 + -0.925618 0.910994 -2.96936 -0.976745 -0.152146 -0.151068 + -0.899094 0.794259 -3.01104 -0.970179 -0.17407 -0.168677 + -0.881562 0.717753 -3.02741 -0.947249 -0.24901 -0.201775 + -0.948089 1.0292 -2.93081 -0.984171 -0.107365 -0.140996 + -0.918159 0.922154 -2.99485 -0.910556 -0.0551202 -0.409694 + -0.894626 0.800945 -3.02631 -0.902355 -0.0911458 -0.421246 + -0.877095 0.72444 -3.04267 -0.859735 -0.20941 -0.465836 + -0.94063 1.04036 -2.9563 -0.944878 -0.0718342 -0.319445 + -0.910284 0.928679 -3.0089 -0.769099 0.0239422 -0.63868 + -0.886751 0.807467 -3.04036 -0.75314 -0.0109761 -0.657769 + -0.872057 0.728612 -3.05166 -0.701856 -0.167027 -0.692459 + -0.965306 1.15935 -2.92069 -0.973982 -0.126356 -0.18813 + -0.957508 1.16939 -2.94333 -0.886139 -0.0530251 -0.460376 + -0.932832 1.0504 -2.97894 -0.810818 0.000326564 -0.585298 + -0.898042 0.933835 -3.01856 -0.471304 0.125816 -0.872951 + -0.879417 0.810558 -3.04614 -0.465475 0.084202 -0.881046 + -0.98095 1.249 -2.89075 -0.980846 -0.153496 -0.119916 + -0.973979 1.25621 -2.92398 -0.908819 -0.0870864 -0.408 + -0.94395 1.17894 -2.96344 -0.635531 0.0442598 -0.770806 + -0.920591 1.05555 -2.98861 -0.53069 0.0996473 -0.841688 + -0.880745 0.937452 -3.02325 -0.197101 0.180046 -0.963709 + -0.991593 1.30264 -2.87929 -0.983016 -0.1495 -0.106435 + -0.984621 1.30985 -2.91253 -0.91517 -0.0696551 -0.397003 + -0.960421 1.26577 -2.94409 -0.657008 0.0139924 -0.753753 + -0.916401 1.18623 -2.97462 -0.328534 0.116524 -0.937277 + -0.893041 1.06284 -2.99979 -0.242959 0.152349 -0.957998 + -1.003 1.3773 -2.86079 -0.990521 -0.0897947 -0.103947 + -0.994655 1.36584 -2.89536 -0.927406 -0.0223782 -0.373387 + -0.967627 1.31704 -2.93891 -0.662031 0.0267576 -0.748999 + -0.930838 1.33198 -2.95569 -0.323075 0.100271 -0.941046 + -0.923632 1.28072 -2.96087 -0.343138 0.0765542 -0.93616 + -1.00287 1.45872 -2.86952 -0.91665 0.0707902 -0.393373 + -0.977661 1.37303 -2.92174 -0.735059 0.0779156 -0.673512 + -0.942147 1.39065 -2.9436 -0.374008 0.15113 -0.915029 + -0.867606 1.36449 -2.96342 0.0916473 0.176359 -0.98005 + -0.870262 1.29124 -2.97378 0.0425137 0.1387 -0.989422 + -0.996841 1.49407 -2.87139 -0.875051 0.214786 -0.433765 + -0.971629 1.40838 -2.92362 -0.655032 0.127388 -0.744786 + -0.941046 1.48951 -2.92284 -0.281737 0.277741 -0.918414 + -0.878915 1.42316 -2.95133 0.0809528 0.247303 -0.965551 + -0.970527 1.50724 -2.90286 -0.6206 0.297853 -0.725354 + -0.934877 1.53478 -2.90699 -0.140902 0.493199 -0.858429 + -0.964448 1.56129 -2.87568 -0.553006 0.556796 -0.619809 + -0.917472 1.57171 -2.88019 -0.191852 0.567192 -0.800928 + -0.898511 1.25175 -2.09719 0.892978 0.346908 -0.286786 + -0.893679 1.25709 -2.07569 0.456797 0.847666 -0.269812 + -0.883033 1.24766 -2.05395 0.832686 0.550594 0.0589866 + -0.896025 1.26076 -1.99076 0.631475 0.700116 0.333281 + -0.87489 1.21524 -1.98255 0.885859 0.24839 0.391863 + -0.866728 1.19559 -2.00045 0.974383 -0.00889473 0.22472 + -0.874871 1.22801 -2.07185 0.952748 0.274217 0.130675 + -0.871571 1.24751 -2.11555 0.864158 0.412797 0.2878 + -0.88557 1.27604 -2.1347 0.391807 0.787321 0.476039 + -0.906671 1.27018 -2.01251 0.324928 0.94425 -0.0530492 + -0.919716 1.27212 -2.00414 0.0949342 0.98965 0.107614 + -0.930917 1.25764 -1.96193 0.041314 0.776417 0.628863 + -0.91676 1.24203 -1.95501 0.407149 0.495529 0.767255 + -0.917472 1.25296 -2.06952 -0.14029 0.958992 -0.246279 + -0.930517 1.25489 -2.06115 0.0215812 0.955997 -0.292583 + -0.93684 1.25535 -2.06139 0.0257109 0.946378 -0.322037 + -0.941049 1.27345 -2.01668 0.00362017 0.997321 -0.0730553 + -0.95225 1.25897 -1.97446 -0.272476 0.840383 0.468522 + -0.898511 1.25175 -2.09719 -0.201253 0.971477 -0.125416 + -0.922304 1.24762 -2.09102 -0.146563 0.989199 0.00198903 + -0.932343 1.24639 -2.08904 -0.0239433 0.997775 -0.0622208 + -0.938666 1.24684 -2.08927 0.0369946 0.996177 -0.0791387 + -0.956727 1.2527 -2.06544 -0.04595 0.963301 -0.264462 + -0.960936 1.27081 -2.02073 -0.272243 0.959653 -0.0703551 + -0.926001 1.24885 -2.0985 -0.0964539 0.902875 0.418943 + -0.93604 1.24762 -2.09652 -0.0170284 0.960047 0.27932 + -0.950931 1.24801 -2.0982 -0.00550002 0.955936 0.293523 + -0.953558 1.24724 -2.09095 0.0209443 0.998688 -0.0467285 + -0.952937 1.25444 -2.11069 -0.0586869 0.834614 0.5477 + -0.978095 1.2481 -2.099 0.0441309 0.958969 0.280053 + -0.979279 1.24761 -2.09173 0.0563735 0.996304 -0.0648139 + -0.982449 1.25307 -2.06622 -0.0417126 0.989159 -0.140798 + -0.987106 1.25807 -2.02339 -0.273993 0.961183 0.0324747 + -0.940629 1.26583 -2.12249 -0.114706 0.774715 0.62182 + -0.975395 1.27283 -2.13765 -9.02355e-005 0.779726 0.626121 + -0.980101 1.25453 -2.11149 0.10135 0.862903 0.495103 + -0.991501 1.26042 -2.1175 0.265802 0.787418 0.556167 + -0.994803 1.24965 -2.09998 0.293211 0.90135 0.318739 + -0.963088 1.28421 -2.14945 -0.11339 0.75338 0.647735 + -0.986795 1.27872 -2.14366 0.209386 0.77013 0.602542 + -0.898511 1.25175 -2.09719 -0.111811 0.777643 0.618684 + 1.05117 1.12715 -1.90057 0.0662268 -0.171641 0.982931 + 1.04301 1.16262 -1.8932 -0.138049 -0.0522402 0.989047 + 0.980129 1.18837 -1.91784 -0.447262 -0.27944 0.849629 + 1.1199 1.17478 -1.91371 0.473942 0.0978725 0.8751 + 1.08924 1.19869 -1.90469 0.378253 0.22797 0.897193 + 1.06864 1.19787 -1.89697 0.107883 0.209246 0.971894 + 1.04118 1.20698 -1.90796 -0.452956 0.493767 0.742311 + 1.12806 1.13932 -1.92108 0.477789 -0.115971 0.870786 + 1.17441 1.14361 -1.95867 0.801182 0.0679804 0.594547 + 1.15065 1.19284 -1.94371 0.707235 0.395257 0.586166 + 1.07232 1.09107 -1.91115 0.115185 -0.388734 0.914122 + 1.13452 1.09271 -1.93472 0.483907 -0.298475 0.822646 + 1.18087 1.097 -1.97232 0.776563 -0.162315 0.608773 + 0.989426 1.13764 -1.89975 -0.246098 -0.111477 0.962813 + 1.01057 1.10156 -1.91032 -0.255411 -0.553567 0.792672 + 1.00457 1.08538 -1.93131 -0.418346 -0.632369 0.651994 + 1.07934 1.04655 -1.93878 0.0810999 -0.591904 0.801918 + 1.14155 1.04819 -1.96235 0.443516 -0.50213 0.742401 + 0.980129 1.18837 -1.91784 0.134531 0.540413 0.830575 + 0.965973 1.17276 -1.91092 -0.227417 0.232093 0.945735 + 0.919078 1.1614 -1.93562 -0.60827 -0.306227 0.732279 + 0.913074 1.14522 -1.9566 -0.686922 -0.514411 0.513342 + 0.91676 1.24203 -1.95501 -0.407155 0.495529 0.767252 + 0.895625 1.19651 -1.94679 -0.726461 0.0217994 0.686862 + 0.930917 1.25764 -1.96193 -0.041317 0.776415 0.628866 + 0.896025 1.26076 -1.99076 -0.631476 0.700117 0.333279 + 0.87489 1.21524 -1.98255 -0.888637 0.207783 0.408842 + 0.95225 1.25897 -1.97446 0.272492 0.840374 0.468529 + 0.941049 1.27345 -2.01668 0.00364353 0.997716 -0.0674545 + 0.919716 1.27212 -2.00414 -0.0962171 0.989277 0.109874 + 0.906671 1.27018 -2.01251 -0.324939 0.944246 -0.0530534 + 0.883033 1.24766 -2.05395 -0.832981 0.550264 0.0578914 + 0.995964 1.18457 -1.9229 0.354686 0.701349 0.61831 + 0.968084 1.25517 -1.97953 0.38769 0.803675 0.451446 + 0.960936 1.27081 -2.02073 0.244574 0.969016 -0.0345248 + 0.93684 1.25535 -2.06139 -0.0150176 0.941578 -0.33646 + 0.930517 1.25489 -2.06115 -0.0327555 0.950541 -0.308867 + 1.00645 1.17926 -1.92269 -0.070925 0.843162 0.532962 + 1.00474 1.23713 -1.98197 0.164995 0.700408 0.69441 + 0.994254 1.24243 -1.98218 0.308637 0.761385 0.570119 + 0.987106 1.25807 -2.02339 0.260051 0.96521 0.0272653 + 0.982449 1.25307 -2.06622 0.0808846 0.977999 -0.19229 + 0.956727 1.2527 -2.06544 0.00781325 0.953414 -0.301562 + 1.01002 1.23395 -1.97869 -0.313765 0.690069 0.652194 + 1.01179 1.25355 -1.99836 -0.302507 0.6774 0.670536 + 1.00651 1.25674 -2.00165 -0.136821 0.917672 0.373039 + 1.00371 1.25545 -2.02439 0.0084103 0.996068 -0.0881855 + 0.999056 1.25046 -2.06722 0.00821282 0.996386 -0.0845421 + 1.01913 1.22641 -1.96018 -0.62756 0.583376 0.515598 + 1.02713 1.2549 -1.9832 -0.604268 0.609424 0.513286 + 1.02889 1.25904 -1.98622 -0.58748 0.689504 0.423616 + 1.01355 1.2577 -2.00138 -0.396477 0.847567 0.352755 + 1.01075 1.25642 -2.02412 -0.391076 0.919622 -0.0368149 + 1.04919 1.23547 -1.93097 -0.53378 0.63185 0.562001 + 0.980129 1.18837 -1.91784 0.353085 0.914284 0.198533 + -0.265027 1.74133 -3.37072 0.608582 0.176412 0.773632 + -0.261467 1.75486 -3.37977 0.405413 0.43226 0.805476 + -0.286397 1.7575 -3.36864 0.37424 0.926179 -0.046233 + -0.289957 1.74398 -3.35959 0.454078 0.191852 0.870061 + -0.290079 1.69202 -3.35677 0.531317 0.0558839 0.845328 + -0.263388 1.66691 -3.37811 0.721112 -0.0194369 0.692546 + -0.250973 1.65474 -3.39333 0.941656 -0.0536991 0.332266 + -0.252611 1.72917 -3.38594 0.965166 0.24466 -0.0927086 + -0.261467 1.75486 -3.37977 0.821733 0.151318 0.549415 + -0.311519 1.7617 -3.35095 0.347925 0.550309 0.759018 + -0.311641 1.70974 -3.34812 0.366798 0.103597 0.924514 + -0.298838 1.64784 -3.34424 0.595801 0.192498 0.779721 + -0.319147 1.76774 -3.36248 0.229633 0.931589 -0.281798 + -0.337551 1.76806 -3.34796 0.2119 0.658287 0.722327 + -0.363175 1.76019 -3.33739 0.202236 0.59766 0.775824 + -0.337265 1.70187 -3.33755 0.372538 0.188176 0.908738 + -0.302376 1.7471 -3.37552 0.0828534 0.576953 -0.812564 + -0.342152 1.73389 -3.39425 -0.0644843 0.58809 -0.806221 + -0.345179 1.7741 -3.35949 -0.0419621 0.979265 -0.198189 + -0.278095 1.69156 -3.41165 0.165581 0.444574 -0.880305 + -0.325381 1.71326 -3.40729 0.0546254 0.531179 -0.845497 + -0.373982 1.66906 -3.42415 -0.270237 0.446519 -0.85299 + -0.36635 1.72855 -3.39056 -0.288517 0.550972 -0.783063 + -0.369377 1.76876 -3.3558 -0.258623 0.940838 -0.218947 + -0.262116 1.70196 -3.40477 0.256435 0.427005 -0.867126 + -0.265668 1.59394 -3.44147 0.665034 0.156589 -0.730212 + -0.285878 1.6439 -3.43792 0.360814 0.369512 -0.856314 + -0.333165 1.6656 -3.43356 -0.0260002 0.439998 -0.897622 + -0.261467 1.75486 -3.37977 -0.336333 0.405795 -0.84983 + -0.261467 1.75486 -3.37977 0.508502 0.36284 -0.78088 + -0.25326 1.67627 -3.41094 0.757799 0.207451 -0.618631 + -0.251006 1.6008 -3.4046 0.985798 -0.00604765 0.167825 + -0.253294 1.62233 -3.42221 0.907878 0.0770128 -0.412101 + -0.254886 1.56206 -3.39721 0.93169 -0.0672253 0.35698 + -0.252745 1.5134 -3.43101 0.971276 -0.0195466 -0.237152 + -0.26512 1.48501 -3.45027 0.719997 0.00756946 -0.693936 + -0.272148 1.62272 -3.36558 0.792666 0.0339366 0.608711 + -0.275901 1.5648 -3.36241 0.824765 -0.0536535 0.562925 + -0.268812 1.46739 -3.39265 0.89524 -0.119957 0.429134 + -0.256625 1.47467 -3.42362 0.987255 -0.12629 0.0968424 + -0.267812 1.42086 -3.44995 0.835022 -0.127189 -0.535314 + -0.312908 1.59752 -3.31389 0.635482 0.133297 0.760522 + -0.316661 1.5396 -3.31073 0.701162 -0.0253243 0.712552 + -0.289828 1.47013 -3.35786 0.830505 -0.0954493 0.548773 + -0.29734 1.40521 -3.35865 0.844437 -0.131489 0.519265 + -0.275158 1.41654 -3.39595 0.903332 -0.150612 0.401632 + -0.332826 1.64955 -3.32398 0.443863 0.315853 0.838584 + -0.346895 1.59923 -3.29364 0.408375 0.217354 0.886559 + -0.352689 1.52951 -3.28365 0.441666 0.0273881 0.896761 + -0.326163 1.45287 -3.30861 0.718472 -0.0810191 0.690821 + -0.333676 1.38795 -3.30941 0.697126 -0.11975 0.706877 + -0.393265 1.6544 -3.30009 0.323102 0.306307 0.895422 + -0.377439 1.60125 -3.28521 0.286481 0.228842 0.930355 + -0.383233 1.53154 -3.27522 0.206028 0.01021 0.978493 + -0.362191 1.44278 -3.28154 0.320038 -0.0850304 0.943581 + -0.367138 1.38005 -3.28699 0.280995 -0.151444 0.947685 + -0.397704 1.70673 -3.31366 0.366105 0.188659 0.911249 + -0.423719 1.64686 -3.28781 0.262929 0.284979 0.921768 + -0.407894 1.59371 -3.27293 0.248335 0.179211 0.951952 + -0.407762 1.54644 -3.27043 0.198923 0.00279423 0.980011 + -0.398662 1.44285 -3.2826 -0.0962749 -0.153384 0.983466 + -0.387798 1.75425 -3.32289 0.356258 0.527686 0.771121 + -0.418806 1.75845 -3.31183 0.162655 0.640958 0.750144 + -0.428712 1.71092 -3.3026 0.303439 0.181344 0.935435 + -0.437086 1.67696 -3.29285 0.260686 0.234293 0.936563 + -0.438935 1.59252 -3.26779 -0.238769 0.0619927 0.969096 + -0.393999 1.76282 -3.34131 -0.18787 0.973892 -0.127437 + -0.419446 1.76383 -3.32485 -0.140627 0.986581 -0.0829547 + -0.453626 1.75346 -3.31585 -0.603686 0.793128 -0.0806886 + -0.452985 1.74807 -3.30283 -0.393021 0.548496 0.738029 + -0.461359 1.71412 -3.29308 -0.361702 0.314179 0.87776 + -0.405828 1.73146 -3.37114 -0.413503 0.563814 -0.714932 + -0.431275 1.73247 -3.35469 -0.483916 0.569356 -0.664575 + -0.443239 1.71002 -3.36003 -0.612301 0.366396 -0.7006 + -0.46559 1.73101 -3.32119 -0.900693 0.383894 -0.203414 + -0.413459 1.67197 -3.40473 -0.526387 0.42897 -0.734099 + -0.443485 1.65151 -3.38545 -0.702603 0.314714 -0.638204 + -0.421977 1.58169 -3.44311 -0.531918 0.323934 -0.782387 + -0.452003 1.56124 -3.42383 -0.794192 0.255368 -0.551404 + -0.473777 1.52375 -3.39233 -0.94315 0.132378 -0.304867 + -0.467549 1.61552 -3.37163 -0.874239 0.167728 -0.455603 + -0.467302 1.67403 -3.34621 -0.90584 0.185067 -0.381056 + -0.387188 1.59292 -3.45548 -0.302176 0.349149 -0.887009 + -0.392478 1.51526 -3.47722 -0.2913 0.202795 -0.934889 + -0.427267 1.50404 -3.46484 -0.502611 0.155071 -0.850491 + -0.451868 1.50135 -3.44542 -0.758451 0.141644 -0.636152 + -0.346372 1.58946 -3.46489 -0.0950784 0.336429 -0.936897 + -0.356547 1.51892 -3.48286 -0.0839514 0.180585 -0.97997 + -0.392487 1.43292 -3.48973 -0.33083 0.0638047 -0.941531 + -0.42669 1.44214 -3.46954 -0.549193 0.0463773 -0.834408 + -0.451292 1.43946 -3.45012 -0.760532 -0.0217099 -0.648938 + -0.304657 1.58899 -3.46638 0.209098 0.325753 -0.922043 + -0.314833 1.51845 -3.48435 0.19791 0.0728223 -0.977511 + -0.323541 1.44968 -3.48392 0.346154 0.0167443 -0.938028 + -0.356556 1.43658 -3.49537 0.0757598 0.0630933 -0.995128 + -0.284447 1.53902 -3.46994 0.677107 0.0315538 -0.735207 + -0.293155 1.47025 -3.46951 0.528596 -0.0304665 -0.848327 + -0.295847 1.40611 -3.46918 0.543833 -0.0629988 -0.836826 + -0.323849 1.39324 -3.48339 0.405857 -0.054603 -0.912304 + -0.356864 1.38014 -3.49484 0.111892 -0.0929572 -0.989363 + -0.276146 1.37933 -3.44706 0.879099 -0.128788 -0.45891 + -0.290122 1.36875 -3.46237 0.644369 -0.0930436 -0.759034 + -0.318124 1.35588 -3.47658 0.420436 -0.128133 -0.898229 + -0.26297 1.42381 -3.42693 0.985584 -0.15623 0.0649388 + -0.271304 1.38229 -3.42404 0.987079 -0.140247 0.0774975 + -0.278449 1.29525 -3.41344 0.992734 -0.0508365 0.109065 + -0.281624 1.29572 -3.43696 0.913391 -0.110583 -0.391776 + -0.295601 1.28513 -3.45226 0.648705 -0.135066 -0.748958 + -0.281762 1.37604 -3.39747 0.904234 -0.0957594 0.416163 + -0.288907 1.28901 -3.38686 0.889855 0.0141175 0.456024 + -0.293574 1.15781 -3.36481 0.923363 -0.00195039 0.383922 + -0.287422 1.16036 -3.39442 0.996868 -0.0725267 0.0315257 + -0.290597 1.16082 -3.41794 0.920458 -0.13103 -0.368224 + -0.303945 1.36472 -3.36017 0.849301 -0.0899559 0.520188 + -0.307281 1.28333 -3.3581 0.824663 0.0103439 0.565529 + -0.311948 1.15213 -3.33605 0.694553 0.0583915 0.717068 + -0.317682 1.04499 -3.32682 0.684034 0.017217 0.729247 + -0.303511 1.04582 -3.34643 0.915049 -0.042819 0.401063 + -0.333694 1.3502 -3.31774 0.711332 -0.0949383 0.696415 + -0.33703 1.26882 -3.31568 0.63988 -0.0218807 0.768163 + -0.339085 1.15273 -3.31962 0.486193 0.0284324 0.873389 + -0.344819 1.04559 -3.31039 0.36838 0.0573657 0.927904 + -0.367156 1.34229 -3.29532 0.287706 -0.143707 0.946876 + -0.365862 1.26606 -3.30244 0.209757 -0.0547727 0.976218 + -0.367918 1.14997 -3.30638 0.122155 -0.0125416 0.992432 + -0.367929 1.04705 -3.30553 0.0293487 0.0568498 0.997951 + -0.348894 0.95487 -3.30343 0.37192 0.0454904 0.927149 + -0.398451 1.34236 -3.29623 -0.348792 -0.155851 0.924151 + -0.397157 1.26612 -3.30336 -0.320237 -0.0827486 0.943716 + -0.395067 1.15279 -3.31141 -0.377308 -0.0158285 0.925952 + -0.395078 1.04987 -3.31056 -0.337019 0.0398671 0.940654 + -0.403609 1.38012 -3.28805 -0.351364 -0.195463 0.915608 + -0.435699 1.3942 -3.31337 -0.791835 -0.244577 0.559624 + -0.43054 1.35643 -3.32155 -0.783858 -0.151577 0.602155 + -0.422927 1.27418 -3.32113 -0.733292 -0.0584317 0.677398 + -0.439204 1.43827 -3.29809 -0.703119 -0.257571 0.662783 + -0.468309 1.42442 -3.36681 -0.956274 -0.17538 0.234055 + -0.458523 1.38237 -3.36741 -0.946108 -0.159846 0.281653 + -0.450909 1.30012 -3.36699 -0.942399 -0.0715862 0.32674 + -0.423191 1.45776 -3.27781 -0.265779 -0.304789 0.914585 + -0.454815 1.52576 -3.28556 -0.817729 -0.140938 0.558082 + -0.471814 1.4685 -3.35154 -0.951706 -0.172839 0.253736 + -0.473642 1.46386 -3.41391 -0.958757 -0.00928643 -0.284076 + -0.473075 1.42713 -3.40846 -0.978893 -0.117253 -0.167392 + -0.438802 1.54524 -3.26529 -0.356851 -0.0418794 0.933222 + -0.463609 1.56642 -3.29648 -0.895441 -0.0418163 0.443212 + -0.480608 1.50917 -3.36245 -0.997003 -0.0356092 0.0686778 + 0.302376 1.7471 -3.37552 0.605009 0.546625 0.578934 + 0.286397 1.7575 -3.36864 -0.0282659 0.550726 0.834208 + 0.289957 1.74398 -3.35959 -0.378524 0.394632 0.837249 + 0.265027 1.74133 -3.37072 -0.592574 0.151185 0.791201 + 0.263388 1.66691 -3.37811 -0.712373 0.0100714 0.701729 + 0.290079 1.69202 -3.35677 -0.572382 0.0871925 0.815338 + 0.311641 1.70974 -3.34812 -0.376733 0.12915 0.917274 + 0.311519 1.7617 -3.35095 -0.518698 0.59519 0.61376 + 0.302376 1.7471 -3.37552 -0.251226 0.674389 -0.694324 + 0.261467 1.75486 -3.37977 -0.405413 0.43226 0.805476 + 0.261467 1.75486 -3.37977 -0.508502 0.36284 -0.78088 + 0.262116 1.70196 -3.40477 -0.255932 0.424602 -0.868454 + 0.252611 1.72917 -3.38594 -0.965163 0.244672 -0.0927199 + 0.25326 1.67627 -3.41094 -0.722976 0.175062 -0.668325 + 0.250973 1.65474 -3.39333 -0.960679 -0.00159407 0.277656 + 0.261467 1.75486 -3.37977 -0.821733 0.151318 0.549415 + 0.278095 1.69156 -3.41165 -0.176609 0.433651 -0.883604 + 0.253294 1.62233 -3.42221 -0.856372 0.149487 -0.494248 + 0.251006 1.6008 -3.4046 -0.985186 -0.0272702 0.169307 + 0.275901 1.5648 -3.36241 -0.826746 -0.0530138 0.560071 + 0.272148 1.62272 -3.36558 -0.763999 0.0393004 0.64402 + 0.325381 1.71326 -3.40729 -0.0754329 0.536348 -0.840619 + 0.333165 1.6656 -3.43356 0.0310609 0.447888 -0.89355 + 0.285878 1.6439 -3.43792 -0.356144 0.377426 -0.854816 + 0.286397 1.7575 -3.36864 0.142721 0.49512 -0.857022 + 0.261467 1.75486 -3.37977 0.336333 0.405795 -0.84983 + 2.04758 1.79087 -0.419637 -0.249284 0.966606 0.0594206 + 2.06611 1.79246 -0.363198 -0.316726 0.945977 0.0693761 + 2.05691 1.78848 -0.509912 -0.00432426 0.999631 -0.0268118 + 2.03494 1.76178 -0.21826 -0.450717 0.892185 -0.0293273 + 2.0868 1.79252 -0.279496 -0.396395 0.918036 0.00894935 + 2.10728 1.79865 -0.302325 0.225013 0.960324 -0.164764 + 2.08659 1.79868 -0.385977 0.450068 0.868791 -0.206496 + 2.05691 1.78848 -0.509912 -0.298098 0.954508 -0.00716793 + 2.01641 1.76019 -0.274698 -0.646056 0.744558 0.168059 + 1.99292 1.73621 -0.301369 -0.834937 0.550078 0.0171822 + 2.05739 1.77861 -0.145405 -0.149682 0.942619 -0.298437 + 2.10924 1.80934 -0.206632 -0.48522 0.868103 -0.104686 + 2.13002 1.81455 -0.230656 0.10985 0.941445 -0.31877 + 2.01201 1.78593 -0.505683 -0.647752 0.745353 0.157689 + 1.98853 1.76195 -0.532355 -0.808373 0.563605 0.169948 + 2.05701 1.81152 -0.487006 -0.605781 0.768424 0.206288 + 2.02145 1.80658 -0.573053 -0.684981 0.658453 0.311834 + 1.95822 1.80145 -0.69817 -0.902349 0.239872 0.358089 + 1.95457 1.72805 -0.596037 -0.882649 0.420461 0.210103 + 2.05368 1.84205 -0.544286 -0.816998 0.44394 0.368009 + 2.04962 1.87449 -0.581082 -0.807561 0.34688 0.47699 + 2.01739 1.83903 -0.60986 -0.801433 0.276898 0.530125 + 2.04145 1.94214 -0.633857 -0.509342 0.297551 0.807486 + 1.99541 2.02753 -0.68675 -0.451245 0.240122 0.859488 + 1.97135 1.9245 -0.662693 -0.66393 0.110395 0.739601 + 1.99534 2.10094 -0.703895 0.0674122 0.297012 0.952491 + 1.86547 2.21636 -0.792618 -0.671514 0.080592 0.736596 + 1.84979 2.19327 -0.819613 -0.869377 -0.115087 0.480561 + 1.95567 1.90131 -0.689739 -0.912574 -0.0905374 0.398763 + 1.86541 2.28977 -0.809761 -0.103607 0.135346 0.985366 + 1.83866 2.42426 -0.82771 -0.676891 -0.0164193 0.7359 + 1.81648 2.20599 -0.877656 -0.814349 -0.118305 0.56819 + 1.93269 1.9349 -0.794719 -0.938157 -0.168725 0.302311 + 1.93524 1.83504 -0.80315 -0.745945 0.469677 0.472197 + 1.97011 2.21519 -0.731785 -0.441618 0.0311642 0.896662 + 1.94336 2.34968 -0.749733 -0.608066 -0.0518974 0.792188 + 2.02648 2.0249 -0.695197 0.977184 0.208644 0.0397491 + 2.00125 2.13916 -0.723096 0.869589 0.265344 0.416423 + 1.9866 2.29243 -0.724362 -0.495486 -0.0100094 0.868559 + 1.92042 2.52582 -0.743409 -0.584158 8.24479e-005 0.81164 + 1.86427 2.60485 -0.810302 -0.717714 0.0241957 0.695918 + 2.04085 1.94543 -0.658947 0.97875 0.0890772 -0.184696 + 2.00071 1.93192 -0.74635 0.907332 -0.018104 -0.420025 + 1.9952 2.15733 -0.756969 0.955995 0.0692947 -0.285084 + 1.98055 2.3106 -0.758235 0.964562 0.107044 -0.241166 + 1.9866 2.29243 -0.724362 0.987131 0.106805 -0.119018 + 1.96367 2.46847 -0.718087 0.967344 0.154519 -0.200921 + 2.04145 1.94214 -0.633857 0.986129 0.165973 -0.00186748 + 2.04902 1.87778 -0.606172 0.989278 -0.00254245 -0.14602 + 2.01508 1.85244 -0.710092 0.952747 -0.0137097 -0.303456 + 1.97115 1.95368 -0.81144 0.928207 0.0460719 -0.3692 + 1.96563 2.17909 -0.822059 0.910113 0.0404235 -0.412383 + 2.04962 1.87449 -0.581082 0.996867 0.0760077 -0.0218788 + 2.05358 1.81893 -0.567241 0.987726 -0.0195535 -0.154965 + 2.01964 1.79368 -0.671101 0.979189 -0.00273165 -0.202932 + 2.01547 1.73294 -0.734101 0.969893 0.14779 -0.193558 + 1.9663 1.86477 -0.850038 0.956227 0.138399 -0.257828 + 1.9045 2.14994 -0.949971 0.922767 0.0635816 -0.380076 + 2.05368 1.84205 -0.544286 0.997817 0.044314 -0.048968 + 2.05691 1.78848 -0.509912 0.984295 0.0710033 -0.161622 + 1.96367 2.46847 -0.718087 -0.561329 -0.0588435 0.825498 + 1.94728 2.53942 -0.740764 -0.15 0.105041 0.98309 + 1.93692 2.63864 -0.741815 0.92548 -0.00228058 0.37879 + 1.93078 2.6463 -0.737484 -0.10585 0.0512121 0.993062 + 1.87462 2.72542 -0.804329 -0.601269 0.302205 0.739694 + 1.84108 2.75625 -0.85193 -0.678126 0.368373 0.635961 + 1.81909 2.66232 -0.855642 -0.752589 0.108002 0.649574 + 1.93854 2.71913 -0.745837 0.949914 0.201573 0.238813 + 1.93239 2.72679 -0.741506 0.819548 0.497016 0.28516 + 1.90746 2.75606 -0.820608 0.903148 0.362832 -0.229514 + 1.90131 2.76364 -0.816327 0.21572 0.852988 0.475263 + 1.91067 2.6755 -0.81607 0.927014 0.037004 -0.373197 + 1.88433 2.6978 -0.875887 0.907588 0.0219838 -0.419285 + 1.88111 2.77836 -0.880432 0.891321 0.337764 -0.302427 + 1.94728 2.53942 -0.740764 0.955538 0.142827 -0.257968 + 1.92103 2.57619 -0.81506 0.933266 0.123653 -0.337229 + 1.8688 2.6436 -0.913422 0.901446 0.0778739 -0.42583 + 1.84788 2.75571 -0.943395 0.84028 0.151041 -0.520688 + 1.96416 2.38154 -0.780912 0.945128 0.137359 -0.296422 + 1.94617 2.36492 -0.83112 0.907722 0.112059 -0.404332 + 1.90304 2.55966 -0.865218 0.903324 0.130819 -0.408524 + 1.84113 2.55759 -0.989435 0.879284 0.090636 -0.467594 + 1.83235 2.70152 -0.98093 0.841532 0.127519 -0.52494 + 1.94017 2.29025 -0.862401 0.903979 0.0835848 -0.419328 + 1.87537 2.47364 -0.941231 0.8806 0.111494 -0.460556 + 1.82428 2.46175 -1.03645 0.878147 0.110511 -0.465451 + 1.8116 2.64031 -1.02712 0.812591 0.13374 -0.567282 + 1.87904 2.26111 -0.990322 0.876491 0.0896242 -0.473002 + 1.86936 2.39898 -0.972522 0.873941 0.123227 -0.470151 + 1.83396 2.32389 -1.05426 0.836788 0.118065 -0.534646 + 1.79476 2.54448 -1.07413 0.771538 0.117822 -0.625177 + 1.89966 2.06103 -0.988568 0.933014 0.14294 -0.330233 + 1.97308 1.77805 -0.900439 0.956211 0.154462 -0.2486 + 1.90809 1.96695 -1.02102 0.929627 0.168928 -0.3275 + 1.84003 2.13082 -1.11226 0.842112 0.187269 -0.505745 + 1.8316 2.22491 -1.07981 0.875838 0.165954 -0.453175 + 1.77241 2.45597 -1.10923 0.711894 0.120935 -0.691796 + 2.02224 1.64622 -0.784511 0.954705 0.186192 -0.232099 + 1.96957 1.69115 -0.948727 0.945285 0.131515 -0.298563 + 1.90458 1.88014 -1.06926 0.898545 0.12779 -0.419866 + 1.83533 2.04015 -1.14441 0.814819 0.165328 -0.555641 + 2.05874 1.57734 -0.692196 0.955637 0.220504 -0.195282 + 2.06228 1.48826 -0.746906 0.959337 0.133581 -0.248655 + 2.02579 1.55705 -0.839262 0.947982 0.153683 -0.278768 + 1.96564 1.60198 -0.996678 0.927121 0.126419 -0.352796 + 2.04671 1.65056 -0.619819 0.961811 0.219504 -0.163514 + 2.0836 1.60426 -0.499617 0.944556 0.227231 -0.237024 + 2.09564 1.53103 -0.571994 0.962523 0.206975 -0.175247 + 2.09122 1.45139 -0.640447 0.975894 0.0889762 -0.199283 + 2.06073 1.38864 -0.790966 0.960789 0.118105 -0.250872 + 2.05087 1.7113 -0.556819 0.97071 0.08963 -0.222909 + 2.08045 1.67933 -0.46125 0.941754 0.153503 -0.299225 + 2.13379 1.6011 -0.367149 0.923814 0.167903 -0.34406 + 2.12301 1.50724 -0.430988 0.935587 0.191822 -0.296449 + 2.11859 1.42768 -0.499382 0.982869 0.038253 -0.180294 + 1.30253 1.11291 -1.43659 -0.820237 0.429347 0.377985 + 1.24544 1.07804 -1.44958 -0.173027 -0.082297 0.981473 + 1.26037 1.02438 -1.45144 -0.700595 -0.0458828 0.712082 + 1.3426 1.16556 -1.41618 -0.820964 0.52714 0.219409 + 1.3456 1.16561 -1.50585 -0.810721 0.564313 -0.155826 + 1.26874 1.04947 -1.46391 -0.478295 0.655899 -0.583979 + 1.24544 1.07804 -1.44958 -0.0479991 0.416655 -0.907797 + 1.33891 1.09936 -1.36652 -0.778355 0.197498 0.595952 + 1.39323 1.22173 -1.37206 -0.831872 0.518805 0.197055 + 1.38567 1.21834 -1.48539 -0.718961 0.690609 -0.078447 + 1.40949 1.225 -1.56412 -0.608212 0.750192 -0.259402 + 1.35337 1.16552 -1.5321 -0.822267 0.493318 -0.28375 + 1.31526 1.03417 -1.3908 -0.737079 -0.00556368 0.675784 + 1.38245 1.00039 -1.32068 -0.741638 0.0431278 0.669412 + 1.38954 1.15545 -1.32246 -0.800763 0.189376 0.568257 + 1.42804 1.26844 -1.32856 -0.874294 0.46343 0.144372 + 1.42592 1.25813 -1.43972 -0.71915 0.690669 -0.0761482 + 1.31912 0.885883 -1.39596 -0.743856 -0.0551313 0.666062 + 1.3588 0.935104 -1.34501 -0.759096 -0.0387793 0.649823 + 1.43222 0.938435 -1.25338 -0.792483 -0.0251114 0.609377 + 1.41032 1.07485 -1.29766 -0.756665 0.0477295 0.652058 + 1.26424 0.876179 -1.45655 -0.712912 -0.0276757 0.700707 + 1.36481 0.824607 -1.35122 -0.73417 -0.1549 0.66106 + 1.40449 0.873828 -1.30028 -0.767333 -0.0822381 0.635953 + 1.15338 0.931117 -1.57811 -0.750803 -0.0925044 0.654017 + 1.20752 0.861958 -1.50692 -0.735522 0.00278936 0.677495 + 1.26447 0.772444 -1.46028 -0.702389 -0.306301 0.642518 + 1.32119 0.786574 -1.40995 -0.694927 -0.0859872 0.713921 + 1.22106 1.06807 -1.48272 -0.270686 -0.808357 0.522769 + 1.11407 0.974727 -1.60944 -0.586119 -0.266673 0.765082 + 1.05745 0.968945 -1.65383 -0.630711 -0.550673 0.546775 + 1.05439 0.957346 -1.67294 -0.687817 -0.547951 0.476085 + 1.08013 0.917146 -1.67951 -0.745556 -0.464935 0.477475 + 1.10835 0.891593 -1.64305 -0.853496 -0.242545 0.461212 + 1.24544 1.07804 -1.44958 -0.749579 -0.230172 0.620607 + 1.09292 1.01632 -1.59089 -0.442721 -0.5433 0.713318 + 1.03631 1.01054 -1.63527 -0.630817 -0.110333 0.768048 + 0.994771 1.04413 -1.66085 -0.78387 0.19825 0.588425 + 0.99171 1.03263 -1.67992 -0.876001 -0.285815 0.3885 + 1.0238 0.965114 -1.71099 -0.78903 -0.517803 0.330622 + 1.04954 0.924914 -1.71756 -0.744273 -0.545269 0.385667 + 1.05009 1.03581 -1.64904 -0.0977583 0.735303 0.670651 + 1.00856 1.06949 -1.67458 -0.238031 0.660262 0.712317 + 0.969315 1.06119 -1.7084 -0.895747 -0.067017 0.439483 + 1.00141 0.993682 -1.73947 -0.883995 -0.467468 0.00506182 + 1.03953 0.916941 -1.75575 -0.845507 -0.492238 0.206931 + 1.09292 1.01632 -1.59089 -0.526645 0.609847 0.592227 + 0.806559 1.32541 -2.88944 -0.558204 0.564681 0.607901 + 0.806972 1.30427 -2.86942 -0.220093 0.648024 0.729126 + 0.831275 1.27798 -2.82269 -0.239099 0.870245 0.430704 + 0.815389 1.28112 -2.84272 -0.396157 0.70014 0.594023 + 0.812282 1.24475 -2.75953 -0.423957 0.774806 0.468974 + 0.829082 1.2376 -2.73315 -0.299861 0.753459 0.585134 + 0.855869 1.243 -2.7345 -0.191148 0.859784 0.473533 + 0.858063 1.28346 -2.82399 -0.122556 0.90488 0.407643 + 0.81342 1.32127 -2.91208 0.211659 0.926348 0.311577 + 0.765252 1.25011 -2.81322 -0.382628 0.700336 0.602599 + 0.796396 1.24789 -2.77957 -0.449154 0.757355 0.473998 + 0.781786 1.22053 -2.76578 -0.686583 0.412622 0.59862 + 0.802751 1.21632 -2.7361 -0.700208 0.441925 0.560724 + 0.819551 1.20909 -2.70976 -0.648239 0.537428 0.539405 + 0.756835 1.27327 -2.83993 -0.167237 0.642949 0.747428 + 0.740141 1.25385 -2.8313 -0.857479 0.332431 0.392708 + 0.750642 1.22267 -2.79949 -0.816389 0.242884 0.523943 + 0.767105 1.18344 -2.77254 -0.824546 0.0466552 0.563868 + 0.78807 1.17924 -2.74286 -0.819109 0.139 0.556543 + 0.762815 1.34027 -2.88619 -0.0796048 0.626757 0.775138 + 0.746121 1.32086 -2.87756 -0.629411 0.51735 0.579819 + 0.740144 1.22732 -2.83495 -0.942062 0.0918383 0.322623 + 0.750645 1.19614 -2.80314 -0.901227 -0.0012949 0.433346 + 0.806559 1.32541 -2.88944 0.277143 0.663466 0.694985 + 0.762402 1.36142 -2.90621 0.399341 0.900846 0.170304 + 0.743612 1.36243 -2.90876 -0.346555 0.794944 0.49796 + 0.740452 1.32252 -2.89143 -0.730302 0.393102 0.558686 + 0.734475 1.22898 -2.84882 -0.875732 0.197576 0.44052 + 0.723961 1.18408 -2.85365 -0.889039 0.00510389 0.457803 + 0.744275 1.16953 -2.81506 -0.892096 -0.0712825 0.446188 + 0.753638 1.36216 -2.9173 0.381278 0.849204 -0.365348 + 0.734848 1.36318 -2.91986 -0.569972 0.815532 -0.100198 + 0.722285 1.30336 -2.90405 -0.837144 0.290727 0.463323 + 0.719125 1.26344 -2.88671 -0.835075 0.246424 0.491858 + 0.708611 1.21854 -2.89154 -0.884514 0.135836 0.4463 + 0.806559 1.32541 -2.88944 0.644271 0.471065 -0.602504 + 0.747443 1.35908 -2.92595 0.241799 0.709465 -0.661961 + 0.723498 1.34021 -2.93208 -0.826675 0.559168 -0.0627738 + 0.710935 1.28039 -2.91626 -0.938589 0.231137 0.256177 + 0.697968 1.23703 -2.92117 -0.93935 0.23392 0.250806 + 0.686418 1.1672 -2.92422 -0.870361 0.079408 0.48597 + 0.739216 1.34428 -2.94413 -0.163885 0.944227 -0.285616 + 0.715271 1.32541 -2.95025 -0.82395 0.547343 -0.146702 + 0.70882 1.27688 -2.94239 -0.972672 0.20551 0.108054 + 0.695853 1.23354 -2.94732 -0.926637 0.334136 0.172329 + 0.675775 1.18578 -2.9538 -0.814374 0.323878 0.481558 + 0.752272 1.34314 -2.95816 -0.0644487 0.976553 0.205405 + 0.690081 1.32223 -2.99214 -0.707555 0.426026 0.563797 + 0.710462 1.31384 -2.964 -0.868745 0.257874 0.422828 + 0.704011 1.26531 -2.95615 -0.936897 0.25001 0.244376 + 0.692091 1.2342 -2.95767 -0.832678 0.327486 0.446542 + 0.799768 1.35538 -2.98155 0.107882 0.95339 0.281796 + 0.777883 1.36636 -3.02257 0.0510507 0.987437 0.149539 + 0.730388 1.35412 -2.99916 -0.288904 0.894992 0.339889 + 0.850375 1.31449 -2.91732 0.271329 0.876976 0.396602 + 0.836722 1.34868 -2.98676 0.296147 0.940715 0.165382 + 0.846376 1.34513 -3.0218 0.399249 0.901544 -0.166789 + 0.877136 1.30123 -2.90596 0.240545 0.961887 0.130045 + 0.899954 1.31617 -2.97904 0.441076 0.886789 0.13805 + 0.909608 1.31262 -3.01408 0.576954 0.801029 -0.159614 + 0.882594 1.29958 -2.8801 0.154256 0.985508 0.070555 + 0.943709 1.29575 -2.94127 0.33275 0.942986 -0.0074522 + 0.926715 1.30291 -2.96768 0.404418 0.914238 0.0247991 + 0.949318 1.28643 -2.99374 0.662062 0.702712 -0.260518 + 0.933412 1.29065 -3.02023 0.658798 0.675252 -0.331691 + 0.880748 1.29581 -2.84857 0.00134481 0.960866 0.277012 + 0.948567 1.29623 -2.86431 0.221952 0.974397 0.0358988 + 0.949168 1.29402 -2.91547 0.27578 0.961148 -0.0118441 + 0.98106 1.27856 -2.92569 0.794983 0.59719 -0.106617 + 0.966312 1.27927 -2.96733 0.745938 0.617867 -0.248628 + 0.941826 1.27882 -2.78935 0.141964 0.885366 0.442689 + 0.94672 1.29238 -2.83283 0.161147 0.960719 0.225943 + 0.988214 1.27832 -2.83389 0.526555 0.833225 0.168746 + 0.980459 1.28078 -2.87453 0.531262 0.843032 -0.084012 + 0.91914 1.26648 -2.76477 -0.0257045 0.917182 0.397638 + 0.983319 1.26477 -2.79041 0.361393 0.848285 0.387051 + 1.01994 1.25288 -2.85401 0.681815 0.720368 -0.127269 + 1.01218 1.25533 -2.89466 0.720218 0.629439 -0.291707 + 0.986984 1.24749 -2.93948 0.842663 0.395526 -0.365346 + 0.878192 1.22829 -2.69583 -0.202904 0.896 0.394987 + 0.941463 1.25178 -2.72611 -0.0217896 0.928727 0.370124 + 1.0015 1.25512 -2.76769 0.171379 0.98227 -0.0759961 + 1.00108 1.25237 -2.77993 0.335067 0.941782 0.0278619 + 1.0373 1.24602 -2.83274 0.59118 0.795722 -0.131652 + 0.862039 1.21597 -2.67048 -0.353989 0.860613 0.366111 + 0.94738 1.22467 -2.66936 -0.0527854 0.921491 0.384797 + 0.986856 1.22901 -2.68127 0.106088 0.863739 0.492647 + 0.98094 1.25611 -2.73802 0.0255142 0.986986 0.158767 + 0.835042 1.19344 -2.67006 -0.74745 0.498613 0.43898 + 0.876853 1.2022 -2.62483 -0.346184 0.878847 0.328306 + 0.931226 1.21225 -2.64405 -0.0962557 0.94093 0.324631 + 0.82485 1.16142 -2.67061 -0.895127 0.240871 0.375138 + 0.834107 1.13159 -2.62274 -0.899956 0.25666 0.352427 + 0.849856 1.17976 -2.62437 -0.76307 0.514633 0.390995 + 0.883468 1.19496 -2.5945 -0.413403 0.867205 0.277585 + 0.80936 1.17716 -2.71027 -0.851487 0.194764 0.486864 + 0.798097 1.1421 -2.72174 -0.884447 0.0911255 0.457656 + 0.814874 1.13507 -2.68037 -0.920936 0.169296 0.351021 + 0.824131 1.10524 -2.6325 -0.941854 0.0956495 0.322121 + 0.846683 1.11699 -2.58144 -0.850833 0.157033 0.501421 + 0.776807 1.14418 -2.75434 -0.852351 -0.114855 0.510201 + 0.762373 1.12165 -2.79273 -0.893641 -0.0200451 0.448335 + 0.791705 1.10019 -2.72515 -0.910796 0.0867619 0.403637 + 0.808482 1.09317 -2.68378 -0.932208 0.0815051 0.352626 + 0.760734 1.15684 -2.78447 -0.883749 -0.0639518 0.463571 + 0.7463 1.13431 -2.82285 -0.896797 -0.147159 0.417252 + 0.725986 1.14877 -2.86149 -0.873084 -0.0543001 0.484537 + 0.758251 0.991941 -2.78005 -0.907306 0.0560661 0.416715 + 0.686176 1.06194 -2.9165 -0.78003 0.0929665 0.618797 + 0.725744 1.0435 -2.85377 -0.873127 0.0417324 0.485704 + 0.763945 0.810468 -2.75313 -0.950184 0.00335823 0.311672 + 0.784835 0.713102 -2.65509 -0.955928 0.0222523 0.292757 + 0.787583 0.970479 -2.71248 -0.910953 0.083724 0.403924 + 0.647707 1.18379 -2.99095 -0.728875 0.242059 0.640429 + 0.636951 1.07292 -2.96692 -0.694806 0.166539 0.69965 + 0.691375 0.908283 -2.88575 -0.756229 0.0722199 0.650309 + 0.731438 0.862037 -2.82686 -0.863858 0.0379043 0.502307 + 0.664024 1.23221 -2.99482 -0.723184 0.293507 0.625187 + 0.596155 1.19695 -3.04635 -0.673594 0.289111 0.68021 + 0.585399 1.08609 -3.02232 -0.667304 0.215735 0.712857 + 0.642151 0.919266 -2.93618 -0.575568 0.139635 0.805744 + 0.70025 1.26598 -2.9665 -0.839475 0.242667 0.486205 + 0.679869 1.27438 -2.99465 -0.749496 0.213944 0.626485 + 0.619842 1.24071 -3.04454 -0.695664 0.306045 0.649913 + 0.646435 1.3151 -3.04898 -0.703495 0.439975 0.558137 + 0.635687 1.28288 -3.04437 -0.711662 0.302413 0.6341 + 0.595684 1.25431 -3.07788 -0.749735 0.353766 0.559238 + 0.571997 1.21055 -3.0797 -0.599589 0.478256 0.641689 + 0.539081 1.20411 -3.10155 -0.588134 0.349215 0.729484 + 0.700087 1.3477 -3.01025 -0.44719 0.793062 0.413609 + 0.65644 1.34066 -3.06706 -0.487157 0.766258 0.418959 + 0.620873 1.3181 -3.08259 -0.722537 0.40748 0.558481 + 0.610125 1.28579 -3.07802 -0.767265 0.342722 0.542076 + 0.695376 1.35868 -3.08727 -0.190913 0.952482 0.23734 + 0.681277 1.36645 -3.11213 -0.00826762 0.927968 0.372568 + 0.642341 1.34843 -3.09191 -0.327128 0.66882 0.667583 + 0.620269 1.32826 -3.09077 -0.689576 0.437648 0.577018 + 0.725677 1.3651 -3.07618 -0.152684 0.988161 0.0150318 + 0.748237 1.36493 -3.10089 0.0761242 0.996453 -0.0358613 + 0.663343 1.37105 -3.12769 0.0609541 0.975168 0.212913 + 0.644497 1.37624 -3.10808 0.00601558 0.829783 0.558054 + 0.622425 1.35607 -3.10695 -0.496327 0.447925 0.743655 + 0.800443 1.36619 -3.04727 0.297307 0.947271 0.119521 + 0.820561 1.35346 -3.09762 0.331798 0.939532 -0.0847929 + 0.822392 1.35025 -3.13007 0.374969 0.924829 -0.0639524 + 0.750068 1.36172 -3.13333 0.190851 0.981604 0.00546958 + 0.665156 1.37844 -3.1423 -0.0203897 0.8774 0.479326 + 0.828296 1.3515 -3.05063 0.6188 0.741501 0.25935 + 0.848414 1.33877 -3.10098 0.805762 0.588042 0.070385 + 0.850536 1.32721 -3.13796 0.842903 0.519016 -0.141902 + 0.842038 1.33793 -3.14952 0.74284 0.660398 -0.109829 + 0.807773 1.35332 -3.17718 0.344728 0.936776 -0.0601094 + 0.836077 1.34062 -3.04639 0.604754 0.788035 -0.11521 + 0.859362 1.30741 -3.11426 0.91799 0.389819 -0.0730424 + 0.861484 1.29584 -3.15123 0.961286 0.169616 -0.217163 + 0.83701 1.30443 -3.1987 0.873634 0.162979 -0.458477 + 0.828512 1.31515 -3.21027 0.75927 0.18011 -0.625355 + 0.879112 1.29481 -3.08344 0.728265 0.590416 -0.347906 + 0.867142 1.29652 -3.11001 0.798194 0.500449 -0.335318 + 0.860707 1.25354 -3.15315 0.892924 0.028105 -0.449329 + 0.836233 1.26212 -3.20062 0.782612 -0.115591 -0.611683 + 0.889411 1.29932 -3.05886 0.549736 0.69309 -0.466278 + 0.892395 1.25566 -3.09584 0.842981 0.215754 -0.492781 + 0.880425 1.25738 -3.12241 0.85511 0.189574 -0.482544 + 0.871592 1.18768 -3.12529 0.826093 -0.0241988 -0.563014 + 0.913215 1.27735 -3.065 0.517098 0.497921 -0.696193 + 0.906593 1.25503 -3.07875 0.672367 0.222181 -0.706087 + 0.891311 1.19161 -3.0945 0.821475 0.0304554 -0.56943 + 0.940599 1.25994 -3.04386 0.782028 0.31206 -0.539492 + 0.933976 1.23772 -3.05755 0.724393 0.0474008 -0.687756 + 0.905509 1.19098 -3.0774 0.736723 -0.0626343 -0.673287 + 0.924853 1.16125 -3.05211 0.757926 0.092378 -0.645767 + 0.956505 1.25574 -3.01736 0.845158 0.315706 -0.431321 + 0.953321 1.20799 -3.03226 0.76822 -0.0603313 -0.637336 + 0.972236 1.24811 -2.98116 0.901768 0.285438 -0.324561 + 0.983819 1.212 -2.97801 0.900292 0.21221 -0.380053 + 0.968088 1.21962 -3.01421 0.840211 0.113884 -0.530165 + 0.986052 1.14559 -2.97619 0.802296 0.138504 -0.580635 + 0.997624 1.21503 -2.94985 0.843359 0.255684 -0.472622 + 1.00082 1.15722 -2.95813 0.852129 -0.0160561 -0.523085 + 1.04075 1.13677 -2.8959 0.805804 0.287854 -0.517514 + 1.06735 1.08183 -2.90755 0.720687 0.549714 -0.422402 + 1.00278 1.09979 -2.98406 0.711893 0.501873 -0.491254 + 1.02282 1.22287 -2.90504 0.844313 0.311891 -0.435729 + 1.01462 1.16025 -2.92998 0.854996 0.182781 -0.485358 + 1.04895 1.19939 -2.87097 0.81289 0.314196 -0.490399 + 1.09691 1.11595 -2.82104 0.799905 0.313031 -0.512019 + 1.1235 1.06101 -2.83269 0.698799 0.586245 -0.409874 + 1.06631 1.19254 -2.84971 0.784574 0.301124 -0.542004 + 1.0807 1.1925 -2.82743 0.779574 0.356129 -0.515206 + 1.1113 1.11582 -2.79883 0.772065 0.249808 -0.58439 + 1.1847 1.04322 -2.75687 0.678877 0.638404 -0.36272 + 1.05505 1.23363 -2.82227 0.652053 0.745352 -0.138843 + 1.06865 1.22229 -2.81203 0.601831 0.737651 -0.306056 + 1.0943 1.18108 -2.81725 0.665882 0.147786 -0.731274 + 1.10832 1.18096 -2.80125 0.812738 0.211133 -0.543028 + 1.12532 1.1158 -2.78279 0.809449 0.228221 -0.541025 + 1.06907 1.22495 -2.79984 0.367358 0.878654 -0.304985 + 1.10091 1.21132 -2.79184 0.684034 0.566983 -0.458941 + 1.12906 1.16266 -2.76575 0.890237 0.221544 -0.397991 + 1.153 1.14253 -2.72549 0.880135 0.277413 -0.385233 + 1.14926 1.09558 -2.74257 0.83547 0.384426 -0.392692 + 1.05669 1.24472 -2.77308 0.276617 0.938121 -0.208355 + 1.08853 1.23109 -2.76508 0.445763 0.880753 -0.159903 + 1.11572 1.21894 -2.74322 0.682791 0.714263 -0.153706 + 1.12164 1.19301 -2.75633 0.889767 0.334273 -0.310767 + 1.13784 1.18449 -2.71436 0.893461 0.379847 -0.239673 + 1.03613 1.2458 -2.74336 0.212104 0.949005 0.23324 + 1.06359 1.23826 -2.73789 0.240886 0.954662 0.174915 + 1.09078 1.2261 -2.71603 0.235643 0.96309 0.130119 + 1.13191 1.21041 -2.70125 0.770303 0.634702 -0.0615336 + 1.01432 1.22146 -2.67579 0.0882708 0.964511 0.24885 + 1.02305 1.21805 -2.64968 -0.0348986 0.987771 0.151954 + 1.09952 1.22269 -2.68993 0.187654 0.98196 0.023254 + 1.13078 1.21224 -2.64523 0.590672 0.806697 -0.0186057 + 0.990116 1.20637 -2.60766 -0.0839998 0.956858 0.27815 + 1.09838 1.22452 -2.6339 0.133558 0.981804 0.134998 + 1.14095 1.20304 -2.60229 0.560528 0.825679 0.0637312 + 1.15267 1.18141 -2.66743 0.839699 0.516898 -0.166499 + 1.16783 1.13946 -2.67856 0.864399 0.43995 -0.243429 + 0.937842 1.20493 -2.61377 -0.0585684 0.963529 0.261115 + 0.948539 1.19817 -2.59145 -0.0251799 0.950696 0.309101 + 0.967912 1.176 -2.52145 -0.158938 0.929052 0.334067 + 1.06545 1.21285 -2.59188 -0.0449399 0.973614 0.22373 + 0.888448 1.18672 -2.54942 -0.422628 0.850001 0.314456 + 0.899145 1.17995 -2.5271 -0.25357 0.831593 0.494121 + 0.926335 1.16779 -2.50524 0.0118262 0.734204 0.678827 + 0.91171 1.13684 -2.48263 -0.594806 0.556296 0.580294 + 0.982868 1.16997 -2.4862 -0.272244 0.949284 0.157298 + 0.862432 1.16515 -2.58306 -0.843803 0.424433 0.32841 + 0.867412 1.15699 -2.53792 -0.891763 0.293355 0.34453 + 0.88452 1.14899 -2.50448 -0.688939 0.341354 0.639406 + 0.867952 1.10422 -2.55012 -0.888783 0.00310142 0.458318 + 0.885061 1.09631 -2.51663 -0.911197 0.0305639 0.410835 + 0.90077 1.09393 -2.4795 -0.894608 0.159997 0.417226 + 0.834743 1.0821 -2.60222 -0.891384 -0.190872 0.411099 + 0.856012 1.06933 -2.5709 -0.882663 0.107983 0.457434 + 0.876887 1.05242 -2.51521 -0.889029 0.231324 0.395115 + 0.892596 1.05004 -2.47808 -0.906558 0.266655 0.32718 + 0.91422 1.0936 -2.44394 -0.947581 0.260035 0.185669 + 0.819094 1.07002 -2.65349 -0.937619 0.0156662 0.347312 + 0.842512 1.04608 -2.58462 -0.910644 0.16722 0.377843 + 0.863387 1.02917 -2.52894 -0.913336 0.175327 0.367529 + 0.813708 0.928872 -2.64202 -0.924804 0.0743181 0.373113 + 0.837126 0.904844 -2.5732 -0.934105 0.0506815 0.353383 + 0.862232 0.8689 -2.50514 -0.94576 0.0402809 0.322359 + 0.882186 1.00437 -2.45918 -0.948184 0.169656 0.268635 + 0.81096 0.671494 -2.58463 -0.884844 0.0459353 0.463618 + 0.843492 0.617564 -2.52622 -0.916776 -0.0154819 0.399102 + 0.868597 0.581615 -2.45815 -0.939481 -0.0542891 0.338273 + 0.895077 0.562532 -2.3843 -0.94922 -0.0924291 0.300729 + 0.881031 0.844101 -2.43539 -0.959831 0.0229515 0.279638 + 0.79294 0.560906 -2.64128 -0.964058 -0.194843 0.180632 + 0.83036 0.496081 -2.5744 -0.916484 -0.257982 0.30578 + 0.862892 0.442151 -2.51599 -0.888344 -0.401692 0.22246 + 0.904768 0.409989 -2.44929 -0.843064 -0.467362 0.26611 + 0.77205 0.658362 -2.73928 -0.947906 -0.0393929 0.316105 + 0.820585 0.480402 -2.67264 -0.918146 -0.32715 0.223562 + 0.858005 0.415578 -2.60577 -0.845312 -0.436601 0.307939 + 0.910705 0.378083 -2.54642 -0.788636 -0.563118 0.246883 + 0.95258 0.345927 -2.47973 -0.717796 -0.629482 0.297525 + 0.736264 0.710197 -2.81106 -0.863871 0.00460857 0.503692 + 0.77928 0.535043 -2.72769 -0.877255 -0.146152 0.457235 + 0.81956 0.390287 -2.77676 -0.846957 -0.394571 0.35634 + 0.860865 0.33565 -2.72173 -0.84238 -0.459432 0.281633 + 0.911098 0.308272 -2.65471 -0.765361 -0.534496 0.358521 + 0.696201 0.756447 -2.86997 -0.789895 0.0132344 0.613099 + 0.743494 0.586878 -2.79947 -0.898543 -0.126245 0.420337 + 0.771455 0.415147 -2.84922 -0.854741 -0.354118 0.379497 + 0.873381 0.196486 -2.86869 -0.750353 -0.520508 0.407482 + 0.930101 0.177676 -2.79671 -0.746588 -0.556319 0.364849 + 0.650257 0.756918 -2.92238 -0.542823 0.0236162 0.839515 + 0.701816 0.617653 -2.86977 -0.822584 -0.154655 0.547208 + 0.729778 0.44592 -2.91952 -0.828065 -0.328785 0.454102 + 0.825276 0.221345 -2.94114 -0.789122 -0.464703 0.401669 + 0.592856 0.721468 -2.93838 -0.499686 -0.0680936 0.863526 + 0.655872 0.618129 -2.92219 -0.684809 -0.242747 0.687103 + 0.682178 0.444467 -2.9922 -0.710059 -0.376243 0.595196 + 0.772757 0.219313 -3.03282 -0.742349 -0.477129 0.470389 + 0.58475 0.88381 -2.95217 -0.50823 0.150182 0.848026 + 0.542083 0.679823 -2.98485 -0.612835 -0.169475 0.771824 + 0.607761 0.585761 -2.98813 -0.565869 -0.370678 0.736471 + 0.634068 0.412018 -3.0582 -0.638313 -0.416062 0.647649 + 0.725157 0.217773 -3.10556 -0.701475 -0.491603 0.516004 + 0.531513 1.06108 -3.0644 -0.625987 0.244037 0.740667 + 0.530865 0.858806 -2.99426 -0.704745 0.0984981 0.70259 + 0.494928 0.617412 -3.03835 -0.574625 -0.195356 0.794759 + 0.556988 0.544116 -3.0346 -0.399929 -0.435911 0.806249 + 0.582788 0.389107 -3.12352 -0.468106 -0.495807 0.731473 + 0.470823 1.0643 -3.11199 -0.632253 0.192894 0.750366 + 0.48371 0.796392 -3.04775 -0.713334 0.0518902 0.698901 + 0.440181 0.567976 -3.08593 -0.514652 -0.195692 0.834768 + 0.505421 0.495836 -3.08818 -0.369874 -0.45455 0.810295 + 0.531221 0.340828 -3.17709 -0.408243 -0.546315 0.731353 + 0.478391 1.20726 -3.14919 -0.548683 0.279114 0.788062 + 0.411206 1.20736 -3.19318 -0.520528 0.281555 0.806087 + 0.413563 1.03519 -3.15817 -0.588014 0.157852 0.793298 + 0.42645 0.767278 -3.09393 -0.644101 0.0580872 0.762732 + 0.550071 1.24921 -3.12146 -0.519171 0.346405 0.781323 + 0.508176 1.25605 -3.1455 -0.506641 0.261836 0.821436 + 0.477073 1.2723 -3.17425 -0.587973 0.245212 0.770817 + 0.447288 1.22359 -3.17789 -0.531353 0.351651 0.770718 + 0.582987 1.25574 -3.09956 -0.674543 0.373596 0.636724 + 0.571491 1.29953 -3.12541 -0.507356 0.253325 0.82366 + 0.529596 1.30636 -3.14945 -0.481966 0.213162 0.849865 + 0.484204 1.31017 -3.17625 -0.550425 0.128092 0.825 + 0.441119 1.27996 -3.20792 -0.542797 0.227698 0.808409 + 0.597427 1.28713 -3.09974 -0.7191 0.364049 0.591914 + 0.596824 1.29737 -3.10787 -0.628685 0.382611 0.677026 + 0.597092 1.35823 -3.12449 -0.481094 0.399942 0.780125 + 0.540536 1.34948 -3.15254 -0.452757 0.341733 0.823547 + 0.495144 1.35338 -3.17928 -0.367877 0.431313 0.823793 + 0.626563 1.38075 -3.12369 -0.14922 0.981271 0.121821 + 0.570007 1.37209 -3.15169 -0.326274 0.763485 0.557347 + 0.57182 1.37949 -3.16631 -0.243952 0.853876 0.459764 + 0.535893 1.3848 -3.19771 -0.279474 0.862132 0.422637 + 0.501026 1.37766 -3.19754 -0.156716 0.805888 0.57095 + 0.45252 1.35984 -3.19848 -0.478666 0.263273 0.837595 + 0.44825 1.31783 -3.20992 -0.624181 0.036017 0.780449 + 0.633806 1.40745 -3.18594 -0.0523282 0.941843 0.331954 + 0.597879 1.41285 -3.21729 -0.0988632 0.983253 0.153097 + 0.521536 1.39995 -3.26795 -0.0862199 0.988228 0.126376 + 0.486669 1.39281 -3.26778 -0.0158785 0.905248 0.424587 + 0.458403 1.38412 -3.21674 -0.0611349 0.828436 0.556737 + 0.700704 1.3806 -3.14983 0.250097 0.725419 0.641263 + 0.669354 1.40969 -3.19342 0.176446 0.978852 0.103515 + 0.661598 1.4 -3.24124 0.286453 0.924849 -0.250197 + 0.618248 1.4097 -3.25283 0.145553 0.969154 -0.198883 + 0.730432 1.36816 -3.14988 0.2606 0.938643 0.225912 + 0.714159 1.38846 -3.19644 0.406331 0.913714 0.00464153 + 0.706403 1.37868 -3.24431 0.491951 0.764685 -0.416222 + 0.660643 1.36268 -3.328 0.50912 0.763275 -0.397754 + 0.617293 1.37238 -3.33959 0.229824 0.91507 -0.331403 + 0.788137 1.35976 -3.19374 0.343841 0.933367 -0.102948 + 0.743887 1.37593 -3.19654 0.374091 0.927254 -0.0159809 + 0.759644 1.36237 -3.21786 0.387649 0.740591 -0.548865 + 0.734897 1.36508 -3.22996 0.517085 0.301449 -0.801094 + 0.695527 1.3494 -3.28519 0.733434 0.436486 -0.521109 + 0.803894 1.3462 -3.21505 0.433349 0.670951 -0.601692 + 0.775423 1.33123 -3.23053 0.314749 0.335889 -0.887756 + 0.750676 1.33395 -3.24263 0.569269 0.372345 -0.733002 + 0.724021 1.3358 -3.27084 0.611058 0.356967 -0.706528 + 0.827419 1.341 -3.19664 0.711096 0.602111 -0.363049 + 0.804987 1.32035 -3.22868 0.406684 0.242789 -0.880717 + 0.81049 1.2834 -3.23168 0.467265 -0.0275923 -0.883687 + 0.780926 1.29429 -3.23354 0.308523 0.0410823 -0.950329 + 0.758508 1.28489 -3.24767 0.632447 0.0881508 -0.769572 + 0.731854 1.28674 -3.27587 0.743752 0.149028 -0.651632 + 0.798461 1.22376 -3.22077 0.579906 -0.132253 -0.803877 + 0.776043 1.21436 -3.2349 0.635483 -0.0263831 -0.771664 + 0.74007 1.21133 -3.26986 0.755918 0.0101932 -0.654586 + 0.711436 1.20857 -3.31008 0.83955 0.00589757 -0.543251 + 0.70322 1.28398 -3.31609 0.874413 0.145166 -0.462957 + 0.824204 1.20238 -3.18975 0.7643 -0.100354 -0.637004 + 0.831356 1.13163 -3.18461 0.732241 -0.0189649 -0.680782 + 0.792498 1.14151 -3.21772 0.668946 -0.0403856 -0.742213 + 0.756525 1.13848 -3.25267 0.719142 -0.0116432 -0.694766 + 0.729949 1.09364 -3.2816 0.792301 -0.0141198 -0.609967 + 0.878744 1.11684 -3.12019 0.692636 0.2474 -0.677532 + 0.844468 1.01909 -3.16388 0.461867 0.136264 -0.876419 + 0.805611 1.02897 -3.19699 0.673932 0.0307018 -0.738155 + 0.779035 0.984124 -3.22592 0.675871 0.0635502 -0.734275 + 0.941584 1.11545 -3.05998 0.680165 0.47123 -0.561531 + 0.906005 1.05988 -3.15032 0.331442 0.398504 -0.855185 + 0.924277 0.952189 -3.16241 0.39304 0.121718 -0.91143 + 0.862741 0.911406 -3.17596 0.374121 0.163141 -0.912918 + 0.968845 1.05849 -3.09012 0.674047 0.449019 -0.586552 + 0.981885 0.970858 -3.11574 0.682698 0.185786 -0.706687 + 0.924354 0.819293 -3.17382 0.552254 0.13559 -0.822576 + 1.03934 1.04783 -3.00726 0.702325 0.486809 -0.519381 + 1.05238 0.960199 -3.03288 0.733141 0.228749 -0.640452 + 1.04096 0.835847 -3.07489 0.691687 0.109127 -0.713905 + 0.981962 0.837958 -3.12715 0.636854 0.0708287 -0.767724 + 1.1039 1.02987 -2.93075 0.705609 0.53323 -0.46667 + 1.14424 0.938086 -2.94017 0.730665 0.282997 -0.621322 + 1.10361 0.92803 -2.98836 0.712472 0.205664 -0.670884 + 1.09219 0.803672 -3.03036 0.669875 0.166967 -0.723457 + 1.03949 0.728479 -3.08773 0.5943 0.106962 -0.797099 + 1.171 1.00422 -2.86553 0.681395 0.559318 -0.472085 + 1.21134 0.912432 -2.87494 0.719467 0.23453 -0.653729 + 1.24475 0.789843 -2.86081 0.760583 0.196185 -0.61889 + 1.1949 0.799574 -2.92747 0.76117 0.227231 -0.607443 + 1.15427 0.789519 -2.97565 0.701597 0.205424 -0.682322 + 1.23221 0.986422 -2.7897 0.675687 0.613269 -0.409082 + 1.26662 0.915059 -2.81249 0.725456 0.341597 -0.597516 + 1.30003 0.792556 -2.79831 0.599488 0.116832 -0.791811 + 1.2762 0.695953 -2.85739 0.73175 0.312722 -0.605597 + 1.23602 1.03286 -2.68113 0.655973 0.688321 -0.309698 + 1.30144 0.975091 -2.69707 0.660996 0.64522 -0.383112 + 1.33585 0.903728 -2.71987 0.695777 0.480519 -0.53385 + 1.34461 0.824924 -2.77497 0.613318 0.243218 -0.751456 + 1.20058 1.08523 -2.66683 0.805471 0.497716 -0.321706 + 1.2355 1.07169 -2.57379 0.715248 0.670455 -0.197257 + 1.28515 1.0287 -2.58513 0.612554 0.759543 -0.218797 + 1.35057 0.970939 -2.60108 0.628319 0.718758 -0.297661 + 1.38363 0.891352 -2.67423 0.716143 0.510962 -0.475455 + 1.18088 1.1429 -2.63392 0.839339 0.518009 -0.164855 + 1.21363 1.08867 -2.62219 0.867228 0.446428 -0.220494 + 1.212 1.11193 -2.53548 0.756913 0.637373 -0.144352 + 1.27318 1.0645 -2.46373 0.664414 0.731832 -0.151576 + 1.32283 1.02151 -2.47507 0.533209 0.816656 -0.22082 + 1.16285 1.17229 -2.62444 0.834291 0.544902 -0.0839092 + 1.19013 1.12891 -2.58389 0.826729 0.554336 -0.0960763 + 1.1721 1.15831 -2.57441 0.856889 0.512622 -0.0543991 + 1.18127 1.14826 -2.52601 0.805008 0.590456 -0.0576533 + 1.22233 1.10923 -2.49381 0.716509 0.684521 -0.134333 + 1.16169 1.17928 -2.56753 0.757527 0.651927 0.0338273 + 1.11981 1.21108 -2.56861 0.168116 0.985702 0.0113623 + 1.14055 1.18741 -2.53381 0.432184 0.87621 0.213246 + 1.17086 1.16932 -2.51908 0.735448 0.676211 0.043078 + 1.16543 1.17131 -2.46853 0.570611 0.821127 -0.0123467 + 1.1916 1.14556 -2.48434 0.701022 0.707854 -0.0866668 + 1.0804 1.20673 -2.55668 -0.0678785 0.981014 0.181669 + 1.08928 1.18644 -2.47874 0.0821197 0.965555 0.2469 + 1.09447 1.1792 -2.45001 0.0182652 0.997846 0.0630083 + 1.14574 1.18017 -2.50508 0.301642 0.948149 0.100127 + 1.04987 1.18209 -2.46681 -0.127035 0.980773 0.148146 + 1.09184 1.17938 -2.4269 0.0142783 0.999779 -0.0154023 + 1.14031 1.18208 -2.45458 0.148682 0.988638 -0.0221078 + 1.16158 1.17478 -2.43814 0.537232 0.841689 0.0542304 + 0.952427 1.16044 -2.45231 -0.437754 0.897693 -0.0501898 + 1.01943 1.17257 -2.43291 -0.190886 0.981002 0.0346086 + 1.01558 1.17032 -2.39601 -0.0987706 0.990661 0.0939989 + 1.04735 1.17306 -2.38357 -0.1449 0.987065 0.0686003 + 1.08819 1.18004 -2.40846 -0.0644724 0.997895 0.00699668 + 0.925161 1.13651 -2.44707 -0.836032 0.519219 0.177373 + 0.95903 1.1691 -2.4199 -0.3522 0.933655 -0.0651455 + 0.955185 1.16677 -2.38307 -0.358833 0.930344 0.0754888 + 0.93663 1.15101 -2.30578 -0.420606 0.880546 0.21847 + 0.9684 1.15384 -2.29328 -0.202692 0.955332 0.215076 + 0.931764 1.14517 -2.41466 -0.82712 0.562025 -0.000698458 + 0.932578 1.14581 -2.36357 -0.849154 0.528143 -0.00128994 + 0.914023 1.12997 -2.28633 -0.930181 0.367025 -0.00748337 + 0.974547 1.14311 -2.24689 -0.146146 0.96026 0.237787 + 1.08239 1.17791 -2.33317 -0.0478934 0.985577 0.162311 + 0.919198 1.10644 -2.39597 -0.956791 0.290327 0.0161777 + 0.920013 1.10707 -2.34487 -0.944296 0.268242 0.19066 + 0.929803 1.09339 -2.29977 -0.997613 -0.0684833 -0.00881137 + 0.904511 1.05753 -2.44045 -0.951047 0.272972 0.144897 + 0.909489 1.07044 -2.39242 -0.975029 0.202737 0.0906424 + 0.914026 1.05165 -2.35327 -0.971286 0.111476 0.210184 + 0.923815 1.03796 -2.30816 -0.980843 0.0810049 0.177156 + 0.926824 1.07678 -2.2384 -0.974239 -0.198443 -0.107135 + 0.894101 1.01186 -2.42156 -0.94737 0.25029 0.199614 + 0.898638 0.993068 -2.38241 -0.972827 0.0846928 0.215486 + 0.913802 0.9689 -2.31155 -0.976611 0.0558439 0.207637 + 0.923286 0.9505 -2.24968 -0.989984 -0.0133627 0.140548 + 0.9333 1.01948 -2.24635 -0.999525 0.0138456 0.027546 + 0.900385 0.845177 -2.37266 -0.967859 0.00332926 0.251472 + 0.915549 0.821097 -2.30175 -0.970909 -0.0303687 0.237513 + 0.936049 0.81885 -2.23186 -0.968691 -0.0553289 0.242026 + 0.940327 0.92798 -2.17827 -0.974351 -0.13064 0.183231 + 0.92678 0.999707 -2.18871 -0.995003 -0.0861782 0.0504268 + 0.914431 0.563609 -2.32156 -0.899239 -0.120208 0.420618 + 0.934239 0.615486 -2.27582 -0.930408 -0.1012 0.352278 + 0.954739 0.613244 -2.20594 -0.932294 -0.187961 0.309028 + 0.9812 0.627521 -2.12066 -0.931412 -0.205704 0.300262 + 0.953089 0.796417 -2.1604 -0.965353 -0.0840891 0.247028 + 0.931247 0.390906 -2.37543 -0.784739 -0.550677 0.284497 + 0.9674 0.395445 -2.30669 -0.684164 -0.517101 0.514322 + 0.987209 0.44724 -2.26101 -0.744546 -0.366499 0.557969 + 1.00997 0.477562 -2.19773 -0.764592 -0.47245 0.438394 + 1.00436 0.330429 -2.40948 -0.629916 -0.706063 0.323543 + 1.04052 0.334882 -2.34079 -0.603828 -0.723666 0.334215 + 1.07843 0.337759 -2.25998 -0.631622 -0.624216 0.459791 + 1.10119 0.368082 -2.1967 -0.595181 -0.528881 0.605015 + 1.01351 0.260159 -2.51977 -0.696086 -0.611783 0.375747 + 1.06529 0.244662 -2.44953 -0.694796 -0.608913 0.382731 + 1.11078 0.244901 -2.36655 -0.698305 -0.61152 0.37204 + 1.14869 0.247773 -2.28572 -0.680572 -0.612644 0.401857 + 0.963798 0.270777 -2.59536 -0.747005 -0.570387 0.341529 + 1.08132 0.139613 -2.57138 -0.66432 -0.646582 0.374982 + 1.12487 0.148312 -2.48305 -0.66486 -0.644521 0.377562 + 1.17036 0.148551 -2.40006 -0.665451 -0.645935 0.37409 + 1.21585 0.15262 -2.31431 -0.643736 -0.653095 0.398837 + 1.03161 0.150229 -2.64697 -0.682573 -0.623963 0.38048 + 1.0949 0.063421 -2.70421 -0.499715 -0.814254 0.295424 + 1.14295 0.067705 -2.61003 -0.488574 -0.817523 0.30488 + 1.1865 0.076404 -2.5217 -0.51608 -0.800222 0.305461 + 1.23065 0.082109 -2.42798 -0.526274 -0.793275 0.306186 + 0.980334 0.150298 -2.72969 -0.700203 -0.606399 0.376824 + 1.04362 0.063489 -2.78693 -0.506161 -0.812992 0.287829 + 1.10235 0.025305 -2.8486 -0.341774 -0.92234 0.180219 + 1.15152 0.028616 -2.74833 -0.3442 -0.917666 0.198531 + 1.19957 0.032899 -2.65415 -0.372208 -0.898997 0.230793 + 0.989418 0.068168 -2.87763 -0.549534 -0.791573 0.267254 + 1.04815 0.029898 -2.93935 -0.357127 -0.918277 0.17096 + 1.13541 0.009312 -2.87949 0.114029 -0.990566 -0.0760006 + 1.18457 0.012616 -2.77921 -0.215265 -0.968517 0.125045 + 1.23162 0.013941 -2.67851 -0.244951 -0.957156 0.154439 + 0.932698 0.086978 -2.94961 -0.570699 -0.758707 0.314113 + 0.989046 0.03358 -3.04213 -0.366431 -0.909163 0.197867 + 1.02346 0.014294 -3.08632 -0.0908701 -0.992946 0.0761693 + 1.08256 0.010615 -2.98355 0.121831 -0.988497 -0.0896097 + 0.87449 0.089578 -3.03132 -0.57292 -0.734133 0.364433 + 0.930838 0.036182 -3.12383 -0.287014 -0.91081 0.296731 + 0.963492 0.009705 -3.17978 -0.0451712 -0.988402 0.144984 + 1.04045 0.016546 -3.10162 0.331272 -0.932238 -0.145572 + 1.09387 0.020379 -2.98946 0.509725 -0.817379 -0.268464 + 0.821971 0.08746 -3.12305 -0.603842 -0.679487 0.416741 + 0.863394 0.02385 -3.19867 -0.344298 -0.873396 0.344439 + 0.896048 -0.002625 -3.25462 -0.0205348 -0.996729 0.0781625 + 0.980486 0.012045 -3.19503 0.340731 -0.926335 -0.160643 + 0.763439 0.084031 -3.20171 -0.57675 -0.68164 0.450251 + 0.804862 0.020423 -3.27734 -0.407896 -0.860627 0.304863 + 0.835807 -0.002219 -3.32752 -0.0700688 -0.997515 0.00733986 + 0.925137 0.007863 -3.27798 0.360889 -0.898524 -0.249827 + 0.711511 0.081249 -3.27089 -0.558544 -0.696653 0.450226 + 0.741351 0.027227 -3.35152 -0.403801 -0.866071 0.294731 + 0.772297 0.004586 -3.40171 -0.0598842 -0.996163 -0.0638226 + 0.864896 0.00827 -3.35089 0.316588 -0.892167 -0.322197 + 0.67323 0.214898 -3.17478 -0.624533 -0.531767 0.571998 + 0.652094 0.083546 -3.34127 -0.523599 -0.723974 0.449117 + 0.681935 0.029526 -3.4219 -0.386268 -0.885552 0.25806 + 0.704692 0.015375 -3.47239 -0.0465797 -0.993761 -0.101337 + 0.798552 0.018302 -3.42467 0.295475 -0.867659 -0.399828 + 0.62195 0.191992 -3.2401 -0.530702 -0.61379 0.584481 + 0.596305 0.078852 -3.40994 -0.468465 -0.77211 0.429403 + 0.614264 0.039505 -3.49159 -0.34018 -0.90857 0.242441 + 0.637021 0.02535 -3.54207 0.0214712 -0.97588 -0.21725 + 0.730947 0.029087 -3.49534 0.281707 -0.855416 -0.434631 + 0.56616 0.187379 -3.30871 -0.488216 -0.658847 0.572333 + 0.528555 0.085339 -3.47517 -0.411344 -0.815162 0.407807 + 0.546514 0.045994 -3.55683 -0.337205 -0.92125 0.193882 + 0.563558 0.039291 -3.60282 0.0269834 -0.966717 -0.254422 + 0.656432 0.045461 -3.56171 0.296049 -0.784103 -0.54547 + 0.468641 0.323794 -3.23039 -0.279337 -0.626816 0.727374 + 0.50358 0.170259 -3.36206 -0.344741 -0.750712 0.563547 + 0.458603 0.088549 -3.53054 -0.294802 -0.880461 0.371322 + 0.473631 0.061026 -3.62246 -0.23212 -0.960076 0.15612 + 0.490675 0.054324 -3.66846 0.172489 -0.783244 -0.597307 + 0.450674 0.446399 -3.13575 -0.230695 -0.52117 0.821682 + 0.39922 0.297007 -3.26859 -0.227283 -0.67582 0.701149 + 0.433628 0.173555 -3.41737 -0.319599 -0.785446 0.53003 + 0.373358 0.097524 -3.56988 -0.200434 -0.905933 0.372976 + 0.388386 0.070091 -3.66177 -0.147227 -0.978731 0.142862 + 0.38411 0.510512 -3.131 -0.416219 -0.219768 0.882306 + 0.381253 0.419616 -3.17396 -0.229077 -0.521411 0.821982 + 0.320793 0.288955 -3.30525 -0.144923 -0.73143 0.666338 + 0.355201 0.165506 -3.45403 -0.169198 -0.832435 0.527659 + 0.370379 0.709814 -3.139 -0.580902 0.043998 0.812784 + 0.316229 0.474584 -3.16837 -0.38356 -0.201283 0.901314 + 0.313372 0.383687 -3.21133 -0.138834 -0.582747 0.800706 + 0.238392 0.271757 -3.33506 -0.0800217 -0.759537 0.645523 + 0.346861 1.02945 -3.19722 -0.519687 0.140874 0.842663 + 0.282676 1.00031 -3.23375 -0.457483 0.123581 0.880589 + 0.306194 0.680591 -3.17558 -0.504488 0.0540576 0.861725 + 0.251104 0.432437 -3.20417 -0.258066 -0.23745 0.936493 + 0.230971 0.366491 -3.24114 -0.100362 -0.594957 0.797467 + 0.344504 1.20162 -3.23223 -0.463287 0.20697 0.861701 + 0.261176 1.19278 -3.27112 -0.408149 0.202499 0.890173 + 0.212322 0.988001 -3.26123 -0.330996 0.134717 0.933966 + 0.241069 0.63853 -3.21133 -0.379493 0.0552298 0.923544 + 0.159293 0.409373 -3.22522 -0.0779895 -0.249167 0.965315 + 0.405038 1.26374 -3.22322 -0.349371 0.231071 0.908045 + 0.380499 1.26393 -3.22596 -0.28359 0.114307 0.952108 + 0.360752 1.27625 -3.24029 -0.609799 0.256532 0.749891 + 0.324758 1.21402 -3.24652 -0.463511 0.269363 0.844157 + 0.417691 1.33543 -3.23319 -0.441942 0.0954144 0.891954 + 0.393152 1.33563 -3.23594 -0.341058 0.246031 0.907275 + 0.374771 1.3332 -3.24893 -0.65165 0.251949 0.715453 + 0.351967 1.277 -3.25119 -0.612715 0.290973 0.734789 + 0.421961 1.37743 -3.22175 -0.597949 0.288871 0.74767 + 0.401225 1.40643 -3.25577 -0.436917 0.487309 0.756065 + 0.382844 1.404 -3.26876 -0.639616 0.467118 0.610485 + 0.363138 1.38292 -3.27385 -0.545824 0.525512 0.652621 + 0.365986 1.33394 -3.25982 -0.59251 0.215319 0.776254 + 0.437347 1.39596 -3.23444 0.0327572 0.815414 0.57795 + 0.416611 1.42487 -3.26852 0.212195 0.785863 0.580855 + 0.403286 1.43616 -3.27807 -0.12814 0.756958 0.640776 + 0.38358 1.415 -3.28322 -0.67523 0.732613 -0.0856932 + 0.465614 1.40456 -3.28554 0.0890856 0.757408 0.646836 + 0.452289 1.41586 -3.2951 0.217186 0.976129 -0.00175134 + 0.455867 1.41022 -3.31814 0.218478 0.97298 0.0746824 + 0.403286 1.43616 -3.27807 -0.162617 0.373302 -0.913346 + 0.541905 1.39688 -3.30343 0.104012 0.971656 -0.212286 + 0.526225 1.38861 -3.34211 0.228445 0.958278 -0.171801 + 0.497237 1.3962 -3.34946 0.347955 0.936135 -0.0507878 + 0.475313 1.40955 -3.34178 0.539652 0.814042 0.214736 + 0.418215 1.43963 -3.35968 0.112036 0.971377 0.209461 + 0.387158 1.40937 -3.30626 -0.228393 0.946287 0.228862 + 0.601613 1.36411 -3.37827 0.321798 0.901763 -0.288566 + 0.555249 1.37678 -3.40721 0.334122 0.913865 -0.230681 + 0.526261 1.38436 -3.41455 0.235829 0.923571 -0.302325 + 0.485753 1.39471 -3.40748 0.312397 0.898944 -0.307094 + 0.463829 1.40797 -3.39984 0.534539 0.784976 -0.313178 + 0.619329 1.34505 -3.40407 0.474979 0.713402 -0.51522 + 0.572965 1.35764 -3.43306 0.437896 0.663495 -0.606647 + 0.528327 1.36562 -3.44609 0.194917 0.688982 -0.698077 + 0.487819 1.37588 -3.43906 0.152479 0.721684 -0.67522 + 0.657265 1.34065 -3.37004 0.593032 0.666855 -0.451241 + 0.630083 1.32452 -3.4159 0.589529 0.23171 -0.7738 + 0.569569 1.32693 -3.45287 0.434248 0.14585 -0.888908 + 0.524932 1.33491 -3.4659 0.146665 0.230935 -0.961851 + 0.490004 1.34003 -3.46416 0.0897001 0.32474 -0.94154 + 0.692149 1.32736 -3.32722 0.863762 0.366736 -0.345571 + 0.668019 1.32011 -3.38187 0.737632 0.273871 -0.617167 + 0.631042 1.25434 -3.39814 0.489285 -0.235391 -0.839756 + 0.570529 1.25675 -3.43512 0.435845 -0.298502 -0.84908 + 0.516745 1.26462 -3.46175 0.127914 -0.274834 -0.952945 + 0.679089 1.27673 -3.37073 0.759658 -0.00281797 -0.650317 + 0.65761 1.23795 -3.38175 0.477493 -0.192601 -0.857266 + 0.606513 1.1171 -3.35144 0.448723 -0.257495 -0.855771 + 0.685681 1.19519 -3.35049 0.745618 -0.0818122 -0.661333 + 0.664201 1.1564 -3.36151 0.162401 -0.204653 -0.965268 + 0.633081 1.10071 -3.33505 0.0239507 -0.220876 -0.975008 + 0.704194 1.08025 -3.32202 0.731503 -0.0652825 -0.678706 + 0.667664 1.07883 -3.34755 0.0803001 -0.161119 -0.983663 + 0.636544 1.02322 -3.32103 -0.0319817 -0.127823 -0.991281 + 0.613294 0.983224 -3.32556 0.396543 0.075697 -0.91489 + 0.583599 1.12337 -3.3677 0.413698 -0.306237 -0.857364 + 0.708008 0.92919 -3.30037 0.642857 0.0275413 -0.765491 + 0.671478 0.927766 -3.3259 0.305039 0.0231653 -0.952058 + 0.648228 0.887856 -3.33038 0.2457 0.150311 -0.957621 + 0.590379 0.98949 -3.34181 0.474715 0.033359 -0.879507 + 0.55476 1.09691 -3.36786 0.190968 -0.237163 -0.952515 + 0.807312 0.8757 -3.21712 0.561123 0.201085 -0.802936 + 0.736285 0.820761 -3.29156 0.579098 0.206179 -0.788756 + 0.669651 0.802808 -3.33947 0.476023 0.214456 -0.852884 + 0.592546 0.886392 -3.36024 0.44205 0.197623 -0.874949 + 0.833049 0.737981 -3.25239 0.538082 0.232332 -0.81024 + 0.770918 0.732946 -3.30046 0.565695 0.275949 -0.777072 + 0.704285 0.714901 -3.34841 0.44325 0.319158 -0.837656 + 0.613969 0.801339 -3.36932 0.45534 0.205917 -0.866177 + 0.888478 0.773687 -3.21123 0.567982 0.183687 -0.802282 + 0.853694 0.663423 -3.25465 0.650339 -0.0904432 -0.754241 + 0.791563 0.65847 -3.30267 0.763411 0.200832 -0.613897 + 0.784197 0.647313 -3.32094 0.656346 0.549182 -0.51731 + 0.729674 0.650131 -3.36422 0.41197 0.49529 -0.764832 + 0.92887 0.716168 -3.1782 0.664848 -0.0383567 -0.745993 + 0.892994 0.670479 -3.21567 0.76955 -0.160969 -0.617967 + 0.842585 0.617559 -3.24441 0.7351 0.113864 -0.668329 + 0.835219 0.606485 -3.26263 0.801096 0.461663 -0.380937 + 0.980501 0.730595 -3.13999 0.629372 -0.0288895 -0.776567 + 0.920828 0.628098 -3.16606 0.651729 0.0909913 -0.752974 + 0.881886 0.624614 -3.20543 0.722501 0.0317045 -0.690642 + 0.891832 0.577881 -3.21908 0.534798 0.638518 -0.553431 + 0.972459 0.64252 -3.12784 0.520016 0.054793 -0.852397 + 0.994589 0.583223 -3.13074 0.327934 0.629721 -0.704209 + 0.930774 0.581364 -3.17972 0.454383 0.666697 -0.590806 + 1.05871 0.662694 -3.09238 0.458811 0.203702 -0.864869 + 1.08084 0.603397 -3.09528 0.501695 0.29678 -0.812542 + 1.03412 0.56884 -3.14922 0.422113 0.632248 -0.649679 + 0.97031 0.566982 -3.19821 0.381049 0.774132 -0.505491 + 0.917456 0.547772 -3.26173 0.483719 0.717608 -0.501054 + 1.10836 0.726897 -3.03779 0.624903 0.218848 -0.749401 + 1.12758 0.661112 -3.04244 0.623997 0.248429 -0.740885 + 1.14228 0.592282 -3.05423 0.620139 0.26761 -0.737437 + 1.09371 0.52643 -3.11337 0.625206 0.325646 -0.709276 + 1.17045 0.71283 -2.98302 0.695398 0.235141 -0.679065 + 1.18938 0.64572 -2.98918 0.689498 0.263844 -0.674521 + 1.20408 0.57689 -3.00097 0.681756 0.268097 -0.680685 + 1.15514 0.515313 -3.07231 0.618157 0.259105 -0.742123 + 1.22635 0.705679 -2.92404 0.75791 0.250957 -0.602157 + 1.24529 0.638654 -2.93015 0.723852 0.298555 -0.622016 + 1.26352 0.578902 -2.93805 0.71217 0.281597 -0.643052 + 1.21596 0.512611 -3.01483 0.687582 0.257546 -0.678897 + 1.30118 0.653066 -2.85931 0.708234 0.351445 -0.612284 + 1.31942 0.593315 -2.86721 0.748489 0.29479 -0.594023 + 1.2754 0.514542 -2.95198 0.713026 0.240679 -0.658534 + 1.29227 0.447821 -2.95441 0.729493 0.204651 -0.652655 + 1.23276 0.442429 -3.02388 0.710127 0.232011 -0.664748 + 1.32933 0.706247 -2.79182 0.557873 0.252084 -0.790715 + 1.35431 0.66336 -2.79374 0.747785 0.210929 -0.629545 + 1.37088 0.599904 -2.79263 0.809278 0.248619 -0.532219 + 1.32947 0.522163 -2.88898 0.750871 0.252577 -0.610243 + 1.34634 0.455443 -2.89141 0.778821 0.172184 -0.60315 + 1.37391 0.738612 -2.76848 0.655395 0.0481836 -0.753748 + 1.39956 0.667331 -2.71382 0.82527 0.0249825 -0.564186 + 1.41613 0.603874 -2.71271 0.81195 0.247132 -0.528831 + 1.38094 0.528752 -2.81439 0.805896 0.25281 -0.535367 + 1.40063 0.465663 -2.81112 0.821897 0.181855 -0.539828 + 1.39239 0.812546 -2.72934 0.742928 0.323868 -0.585805 + 1.41427 0.75751 -2.72101 0.809959 0.0538787 -0.584006 + 1.43992 0.686233 -2.66636 0.722784 -0.0417284 -0.689813 + 1.46558 0.611347 -2.63985 0.645131 0.159636 -0.74721 + 1.43291 0.53521 -2.72537 0.820223 0.247739 -0.515616 + 1.43613 0.819446 -2.65289 0.798975 0.36091 -0.481023 + 1.45802 0.764408 -2.64456 0.784234 0.188934 -0.591 + 1.48718 0.714298 -2.63396 0.693372 0.122475 -0.710095 + 1.51284 0.639411 -2.60746 0.765854 0.0194789 -0.64272 + 1.48236 0.542768 -2.65247 0.808971 0.129818 -0.573335 + 1.40873 0.912972 -2.60628 0.716328 0.577249 -0.391992 + 1.46124 0.841065 -2.58493 0.769079 0.473773 -0.429017 + 1.50327 0.780374 -2.57541 0.775586 0.379359 -0.504532 + 1.53243 0.730259 -2.56481 0.823798 0.213562 -0.525117 + 1.55426 0.652742 -2.53995 0.866902 0.0218731 -0.497998 + 1.45178 0.922027 -2.49836 0.691849 0.611657 -0.383694 + 1.50043 0.854552 -2.50769 0.740065 0.514944 -0.432593 + 1.54246 0.793947 -2.49812 0.779228 0.437461 -0.448811 + 1.57515 0.749187 -2.48239 0.852548 0.264386 -0.450846 + 1.59698 0.67167 -2.45753 0.909424 0.0398459 -0.413958 + 1.39361 0.979989 -2.49315 0.543362 0.783952 -0.300293 + 1.48815 0.946809 -2.39809 0.641728 0.657973 -0.394026 + 1.53679 0.879339 -2.40742 0.737068 0.533261 -0.415166 + 1.57527 0.815265 -2.41484 0.776954 0.467845 -0.421265 + 1.35937 1.0365 -2.36624 0.420685 0.87693 -0.232417 + 1.43015 0.994892 -2.38437 0.473087 0.818023 -0.32715 + 1.52471 0.991998 -2.27056 0.611797 0.678336 -0.406895 + 1.56388 0.906056 -2.3267 0.727361 0.544335 -0.417906 + 1.60236 0.841891 -2.33416 0.82618 0.428335 -0.365998 + 1.27743 1.06971 -2.41596 0.600584 0.795858 -0.0768686 + 1.28157 1.06511 -2.39559 0.484029 0.874865 0.0181271 + 1.30015 1.05879 -2.37105 0.420067 0.895238 -0.148635 + 1.37522 1.05238 -2.28095 0.312883 0.896626 -0.313314 + 1.46671 1.04008 -2.25684 0.378151 0.848294 -0.370673 + 1.22658 1.11436 -2.44609 0.686137 0.724526 -0.0654051 + 1.23658 1.10612 -2.40041 0.660108 0.750974 0.0171641 + 1.24072 1.1016 -2.37999 0.668683 0.737594 0.093909 + 1.24393 1.09531 -2.36529 0.613106 0.789782 -0.0186014 + 1.2625 1.08908 -2.3407 0.503436 0.835522 -0.220125 + 1.18775 1.14912 -2.45389 0.684302 0.728927 0.0199044 + 1.19962 1.13794 -2.44374 0.660533 0.750396 0.0245554 + 1.20963 1.1297 -2.39806 0.655957 0.754313 0.0270673 + 1.2086 1.12749 -2.36263 0.659315 0.741602 0.123811 + 1.21181 1.12119 -2.34793 0.620873 0.783802 0.0130641 + 1.15943 1.1735 -2.41832 0.50957 0.85734 0.0728458 + 1.1713 1.16232 -2.40817 0.656824 0.753402 0.0311189 + 1.15925 1.17136 -2.38481 0.512867 0.857249 0.0457278 + 1.19758 1.13864 -2.37475 0.649799 0.756277 0.0762025 + 1.16163 1.16328 -2.33763 0.508381 0.823473 0.251873 + 1.13768 1.18233 -2.43142 0.129183 0.990719 0.0422811 + 1.13552 1.18105 -2.41161 0.152814 0.987582 0.0364712 + 1.13186 1.18171 -2.39315 0.173294 0.984571 -0.0242587 + 1.15061 1.17453 -2.34971 0.392002 0.873585 0.288417 + 1.12323 1.18489 -2.35805 0.117122 0.976248 0.182271 + 1.08854 1.16718 -2.28678 0.0116818 0.95891 0.283469 + 1.13451 1.168 -2.2984 0.256328 0.949696 0.179927 + 1.18562 1.14149 -2.33268 0.566389 0.816278 0.113548 + 1.07193 1.13042 -2.19791 0.0266725 0.945007 0.32596 + 1.1179 1.13115 -2.20958 0.172195 0.89986 0.400751 + 1.1585 1.1462 -2.29345 0.466686 0.831772 0.300598 + 1.20242 1.13319 -2.31351 0.395237 0.914411 -0.0874055 + 0.937486 1.13191 -2.21189 -0.332083 0.928381 0.166821 + 1.03487 1.11922 -2.16291 0.0351643 0.953752 0.298532 + 1.04583 1.10626 -2.12786 -0.0446316 0.94583 0.32158 + 1.06895 1.10064 -2.09712 -0.18693 0.960553 0.205902 + 1.10267 1.10541 -2.0876 0.00300693 0.990756 0.135622 + 1.13199 1.10347 -2.11343 0.229389 0.968709 0.0947763 + 1.14066 1.10399 -2.14793 0.244749 0.951117 0.188347 + 1.14071 1.11475 -2.17696 0.163689 0.920856 0.353879 + 1.13323 1.12325 -2.19868 0.129903 0.935574 0.328368 + 0.911044 1.11345 -2.22492 -0.963276 0.268069 0.0154602 + 0.940285 1.12247 -2.14673 -0.328392 0.894372 0.303738 + 0.951245 1.1095 -2.11167 -0.256759 0.809431 0.528107 + 0.9813 1.08014 -2.07162 -0.294401 0.784818 0.545334 + 1.00443 1.07461 -2.04084 -0.398733 0.888064 0.228809 + 0.920305 1.05709 -2.18069 -0.987307 -0.158592 0.00863486 + 0.913844 1.10391 -2.1598 -0.917789 0.344785 0.196943 + 0.924854 1.08378 -2.10833 -0.840551 0.253402 0.478814 + 0.95491 1.05443 -2.06828 -0.765272 0.297479 0.570846 + 0.931315 1.03687 -2.12927 -0.964255 -0.171283 0.202173 + 0.950425 1.01243 -2.07954 -0.927932 -0.106069 0.357339 + 0.969659 0.993571 -2.03348 -0.947 -0.0449968 0.318066 + 0.974144 1.03556 -2.02221 -0.914344 0.118798 0.387119 + 0.988982 1.05418 -2.00106 -0.745034 0.568496 0.348907 + 0.9335 0.994386 -2.14149 -0.970841 -0.132049 0.200078 + 0.952611 0.969858 -2.09181 -0.945439 -0.126386 0.300288 + 0.969799 0.949883 -2.04361 -0.950464 -0.104315 0.292807 + 0.99163 0.99924 -1.9591 -0.934978 0.102049 0.339709 + 1.00647 1.01785 -1.93794 -0.877015 0.331856 0.347444 + 0.947047 0.922664 -2.13107 -0.924332 -0.349831 0.152411 + 0.964235 0.902602 -2.08292 -0.957746 -0.130321 0.256397 + 0.991771 0.955552 -1.96923 -0.952357 -0.101618 0.287559 + 1.014 0.959053 -1.88549 -0.974349 -0.199628 0.103885 + 0.977004 0.797029 -2.08306 -0.954093 -0.100056 0.282305 + 0.986775 0.88534 -2.01142 -0.947548 -0.118233 0.29694 + 1.006 0.870142 -1.95989 -0.932876 -0.157087 0.324139 + 1.011 0.940273 -1.91776 -0.937037 -0.216011 0.274408 + 1.00511 0.628134 -2.04333 -0.896041 -0.25459 0.363722 + 1.03454 0.654822 -1.96195 -0.884102 -0.259336 0.388726 + 0.999544 0.779769 -2.01156 -0.939958 -0.13009 0.315523 + 1.02907 0.790633 -1.93678 -0.917207 -0.137907 0.373782 + 1.03466 0.865062 -1.88869 -0.939729 -0.188265 0.285423 + 1.03643 0.491839 -2.11245 -0.718326 -0.579297 0.385256 + 1.06777 0.515248 -2.0376 -0.669479 -0.593515 0.446697 + 1.09719 0.541936 -1.95623 -0.68675 -0.591894 0.421944 + 1.06407 0.665688 -1.88717 -0.849345 -0.26081 0.458903 + 1.13094 0.40575 -2.14854 -0.575993 -0.604141 0.550678 + 1.16228 0.429159 -2.07369 -0.60288 -0.671368 0.431046 + 1.19008 0.455437 -1.98781 -0.616682 -0.672129 0.409812 + 1.2211 0.481229 -1.89808 -0.663714 -0.67197 0.328541 + 1.12821 0.567733 -1.86651 -0.702856 -0.544659 0.457537 + 1.18918 0.259384 -2.20843 -0.64749 -0.532737 0.54493 + 1.21894 0.297052 -2.16027 -0.659153 -0.474784 0.583179 + 1.2501 0.32239 -2.08156 -0.736925 -0.521878 0.429634 + 1.2779 0.348663 -1.99567 -0.754168 -0.531704 0.385385 + 1.25634 0.164224 -2.23701 -0.670172 -0.628885 0.394174 + 1.29498 0.176688 -2.14659 -0.702887 -0.557584 0.441643 + 1.32614 0.201938 -2.06793 -0.75443 -0.510301 0.41283 + 1.36476 0.21381 -1.97769 -0.768286 -0.518039 0.375996 + 1.27614 0.086092 -2.34228 -0.55246 -0.772458 0.313204 + 1.31981 0.091549 -2.24473 -0.583983 -0.742856 0.327306 + 1.35845 0.104011 -2.15432 -0.634402 -0.692185 0.344113 + 1.39973 0.110487 -2.05993 -0.663337 -0.659972 0.352734 + 1.29001 0.043919 -2.45923 -0.420708 -0.874545 0.241196 + 1.33236 0.04906 -2.35634 -0.450329 -0.860929 0.236654 + 1.37603 0.054431 -2.25884 -0.47066 -0.846477 0.248911 + 1.42215 0.052258 -2.15928 -0.512005 -0.821614 0.250602 + 1.46343 0.05873 -2.06489 -0.505815 -0.81703 0.276792 + 1.24586 0.0383 -2.5529 -0.40197 -0.885474 0.233143 + 1.32447 0.025344 -2.47006 -0.270454 -0.946848 0.174167 + 1.36682 0.030486 -2.36717 -0.197779 -0.972139 0.125815 + 1.4169 0.033245 -2.26275 -0.202524 -0.973683 0.104526 + 1.27791 0.019255 -2.57732 -0.259785 -0.950946 0.167969 + 1.33261 0.023419 -2.47613 0.196222 -0.980274 -0.0236396 + 1.37851 0.030783 -2.37168 0.264077 -0.960865 -0.0836729 + 1.42859 0.03363 -2.26721 0.22163 -0.96943 -0.105291 + 1.28605 0.01733 -2.58338 0.196201 -0.980105 -0.0300053 + 1.31177 0.039233 -2.61412 0.542821 -0.818054 -0.190087 + 1.35501 0.043626 -2.51033 0.539472 -0.821016 -0.186823 + 1.4009 0.050985 -2.40587 0.516667 -0.832304 -0.200813 + 1.24117 0.011804 -2.68801 0.196778 -0.978806 -0.0567286 + 1.26688 0.033708 -2.71875 0.524446 -0.823346 -0.216925 + 1.35264 0.084103 -2.67244 0.679295 -0.68754 -0.256607 + 1.39589 0.088496 -2.56864 0.6508 -0.720002 -0.240951 + 1.43552 0.089799 -2.4631 0.614271 -0.747486 -0.252853 + 1.19412 0.010571 -2.78867 0.200901 -0.974925 -0.0957104 + 1.21938 0.0345 -2.82152 0.489494 -0.828939 -0.27066 + 1.30804 0.080062 -2.77604 0.657698 -0.697242 -0.285109 + 1.3159 0.131596 -2.85429 0.762123 -0.507885 -0.401523 + 1.3605 0.135637 -2.75069 0.78718 -0.513423 -0.34168 + 1.14672 0.019074 -2.8854 0.48808 -0.823107 -0.290298 + 1.17197 0.043004 -2.91825 0.467872 -0.839717 -0.27563 + 1.26054 0.08085 -2.8788 0.651794 -0.680302 -0.335192 + 1.2627 0.132812 -2.9466 0.784661 -0.43852 -0.438187 + 1.11726 0.04216 -3.01339 0.50675 -0.825445 -0.248687 + 1.20361 0.082894 -2.98534 0.615799 -0.705182 -0.35144 + 1.20578 0.134944 -3.05309 0.750552 -0.411881 -0.516745 + 1.23257 0.198224 -3.0411 0.832212 -0.134002 -0.538022 + 1.28577 0.197006 -2.94879 0.82367 -0.270193 -0.498562 + 1.06385 0.038414 -3.1255 0.546693 -0.778636 -0.307982 + 1.14891 0.082051 -3.08048 0.672507 -0.628995 -0.389999 + 1.14272 0.132298 -3.13651 0.762568 -0.319812 -0.562326 + 1.17071 0.195576 -3.11291 0.767707 -0.146829 -0.623753 + 1.00439 0.03507 -3.21691 0.560201 -0.758229 -0.333561 + 1.08511 0.074678 -3.15911 0.657542 -0.599452 -0.456395 + 1.07893 0.12484 -3.21519 0.7338 -0.31935 -0.599628 + 1.10766 0.192935 -3.19634 0.772763 -0.050199 -0.632706 + 0.949043 0.030887 -3.29986 0.549324 -0.724851 -0.415733 + 1.02565 0.071333 -3.25052 0.724519 -0.497494 -0.477045 + 1.0167 0.11971 -3.28931 0.77394 -0.199875 -0.600888 + 1.04185 0.188535 -3.26612 0.744788 -0.0415938 -0.666004 + 0.887218 0.033712 -3.37595 0.504073 -0.713261 -0.487 + 0.966535 0.072591 -3.32869 0.687346 -0.472205 -0.551886 + 0.957584 0.120966 -3.36748 0.753851 -0.176111 -0.633003 + 0.979623 0.183405 -3.34023 0.76658 0.0446406 -0.640595 + 0.820874 0.04374 -3.44972 0.452365 -0.720547 -0.525526 + 0.90471 0.07541 -3.40478 0.655355 -0.46554 -0.594797 + 0.891333 0.117574 -3.44041 0.717991 -0.186819 -0.670513 + 0.916497 0.168037 -3.41381 0.74106 0.043587 -0.670023 + 0.749319 0.051972 -3.51798 0.401379 -0.722141 -0.56339 + 0.834662 0.079343 -3.47739 0.5872 -0.508025 -0.630164 + 0.821285 0.121507 -3.51302 0.665907 -0.201872 -0.718203 + 0.850245 0.164647 -3.48674 0.712563 0.0526355 -0.699631 + 0.674804 0.068439 -3.5843 0.32359 -0.758158 -0.566114 + 0.763107 0.087575 -3.54565 0.533237 -0.526078 -0.662495 + 0.747396 0.126027 -3.58025 0.629351 -0.217549 -0.746049 + 0.779473 0.166045 -3.55116 0.67338 0.0539229 -0.737328 + 0.587938 0.081027 -3.64191 0.273497 -0.725732 -0.631278 + 0.682155 0.090917 -3.60984 0.430722 -0.612291 -0.663007 + 0.666445 0.129282 -3.64449 0.534465 -0.343079 -0.772427 + 0.705585 0.170568 -3.6184 0.661444 0.00572989 -0.749972 + 0.582969 0.059404 -3.62245 0.328086 -0.719442 -0.612178 + 0.495604 0.097005 -3.69178 0.195581 -0.695335 -0.691561 + 0.595289 0.103505 -3.66744 0.321267 -0.631731 -0.705481 + 0.584202 0.141342 -3.69718 0.3921 -0.431442 -0.812475 + 0.636835 0.183147 -3.68218 0.595842 -0.0951547 -0.797445 + 0.490635 0.07538 -3.67233 0.31935 -0.443692 -0.837349 + 0.392792 0.111121 -3.72923 0.153326 -0.651705 -0.742814 + 0.499956 0.118466 -3.71255 0.219973 -0.623153 -0.750528 + 0.488869 0.156304 -3.74229 0.245794 -0.494677 -0.833595 + 0.554592 0.195121 -3.73492 0.445141 -0.198265 -0.873236 + 0.389211 0.068004 -3.70975 0.0901472 -0.756543 -0.647701 + 0.389172 0.088973 -3.71367 0.206662 -0.414812 -0.886127 + 0.285338 0.121152 -3.7546 0.0858579 -0.616796 -0.782426 + 0.397144 0.132582 -3.75 0.172042 -0.581549 -0.795111 + 0.389831 0.172658 -3.77302 0.177267 -0.471326 -0.863961 + 0.280005 0.078806 -3.72246 -0.0160651 -0.903159 -0.429006 + 0.281718 0.099004 -3.73904 0.0738285 -0.616244 -0.784087 + 0.174334 0.128605 -3.76831 0.00536578 -0.681278 -0.732005 + 0.290328 0.147155 -3.77605 0.0913476 -0.556444 -0.825848 + 0.283016 0.187238 -3.79907 0.0716524 -0.397154 -0.914951 + 0.27918 0.080809 -3.67453 -0.0947214 -0.983147 0.156365 + 0.168313 0.087526 -3.72896 -0.0809119 -0.887337 -0.453968 + 0.170026 0.107717 -3.74554 -0.0386115 -0.700158 -0.712943 + 0.059143 0.132298 -3.76991 -0.00293313 -0.707647 -0.70656 + 0.179324 0.15461 -3.78975 0.0395974 -0.518969 -0.853875 + 0.279441 0.105189 -3.59316 -0.115536 -0.91874 0.377582 + 0.174324 0.110026 -3.60193 -0.0329214 -0.934406 0.354685 + 0.174064 0.085731 -3.68326 -0.0660142 -0.990614 0.119694 + 0.054835 0.097839 -3.71703 -0.0334079 -0.971145 -0.236139 + 0.054835 0.111412 -3.74713 -0.00920017 -0.833823 -0.551956 + 0.261284 0.173084 -3.47735 -0.107452 -0.844954 0.523934 + 0.165895 0.160955 -3.49994 0.00289706 -0.861474 0.507794 + 0.060586 0.098942 -3.61633 0.0324895 -0.968829 0.24559 + 0.060586 0.096136 -3.67128 -0.0153833 -0.999194 0.0370713 + -0.054834 0.097839 -3.71703 0.0538067 -0.973959 -0.220247 + 0.143003 0.259629 -3.35765 0.0364686 -0.779498 0.625342 + 0.052156 0.233569 -3.37552 0.0421687 -0.802373 0.595331 + 0.052156 0.149869 -3.51435 0.0120491 -0.876828 0.480654 + -0.052156 0.149869 -3.51435 -0.0193578 -0.8719 0.489301 + -0.060586 0.098947 -3.61634 0.000757084 -0.962699 0.270575 + 0.13916 0.343427 -3.2622 0.0232743 -0.636446 0.77097 + 0.048313 0.317362 -3.28005 0.0248013 -0.66934 0.742542 + -0.052156 0.233564 -3.37551 -0.0603506 -0.81052 0.582593 + 0.048313 0.39542 -3.22765 -0.00128654 -0.283842 0.95887 + -0.048316 0.39542 -3.22765 -0.00859111 -0.291272 0.956602 + -0.048316 0.317362 -3.28005 -0.0297717 -0.664647 0.746564 + -0.143003 0.259629 -3.35765 -0.0297728 -0.78688 0.616388 + 0.159773 0.610328 -3.23008 -0.150103 0.081427 0.985312 + 0.048793 0.596376 -3.23252 -0.016907 0.0980659 0.995036 + -0.048793 0.596376 -3.23252 0.0219971 0.0903335 0.995669 + -0.159296 0.409373 -3.22522 0.0840981 -0.254132 0.963506 + -0.139163 0.343427 -3.2622 -0.00319524 -0.623154 0.782092 + 0.131025 0.959799 -3.27998 -0.229988 0.129924 0.964482 + 0.048793 0.941243 -3.29465 -0.0959883 0.14968 0.984064 + -0.048793 0.941243 -3.29465 0.106681 0.161356 0.981113 + -0.131025 0.959799 -3.27998 0.224561 0.140295 0.964308 + -0.159772 0.610328 -3.23008 0.142823 0.073393 0.987023 + 0.153945 1.1952 -3.31131 -0.174267 0.175552 0.968923 + 0.114166 1.17597 -3.31341 -0.154999 0.130972 0.979194 + 0.031933 1.15733 -3.32813 -0.0904492 0.105169 0.990332 + -0.031937 1.15732 -3.32811 0.09557 0.0980074 0.990586 + 0.190822 1.18046 -3.29858 -0.316954 0.180388 0.931128 + 0.160899 1.2621 -3.32539 -0.0991105 0.23849 0.966074 + 0.11631 1.26212 -3.32542 -0.0824543 0.192453 0.977836 + 0.076531 1.24281 -3.32756 -0.131371 0.153666 0.979351 + 0.197776 1.24736 -3.31266 -0.249331 0.293441 0.92289 + 0.177853 1.30956 -3.33679 -0.049485 0.280975 0.958439 + 0.153964 1.31145 -3.33627 0.0298063 0.229923 0.972752 + 0.109375 1.31139 -3.33635 -0.0939241 0.170043 0.98095 + 0.062433 1.31188 -3.34561 -0.19475 0.221675 0.955475 + 0.203355 1.25836 -3.31571 -0.26872 0.299404 0.915504 + 0.183432 1.32056 -3.33984 -0.0685056 0.292341 0.953857 + 0.170708 1.37497 -3.35408 0.0321088 0.35861 0.932935 + 0.146819 1.37676 -3.35359 0.0127079 0.474305 0.880269 + 0.100607 1.34927 -3.34237 -0.101084 0.327527 0.939419 + 0.280732 1.22028 -3.26996 -0.408561 0.234757 0.882024 + 0.222911 1.28587 -3.31456 -0.402411 0.211562 0.890678 + 0.211256 1.33662 -3.33106 -0.454471 0.24275 0.857046 + 0.186303 1.34668 -3.34808 -0.15653 0.291956 0.943536 + 0.308595 1.21723 -3.25627 -0.428268 0.279597 0.859309 + 0.26534 1.28981 -3.29397 -0.43334 0.192196 0.880498 + 0.253685 1.34056 -3.31048 -0.50602 0.109472 0.855546 + 0.214499 1.40225 -3.35213 -0.47451 0.399363 0.784443 + 0.189546 1.41231 -3.36916 -0.0726872 0.392406 0.916916 + 0.335804 1.2802 -3.26094 -0.416463 0.221702 0.881707 + 0.293203 1.28675 -3.28029 -0.400339 0.192104 0.896005 + 0.296609 1.33174 -3.28701 -0.43812 0.0485444 0.897605 + 0.258705 1.38294 -3.30408 -0.547454 0.241454 0.801245 + 0.33921 1.32519 -3.26767 -0.329269 0.164307 0.929831 + 0.301628 1.37404 -3.28067 -0.244839 0.289297 0.925398 + 0.294955 1.40256 -3.30208 -0.0987777 0.800415 0.591252 + 0.268466 1.40904 -3.31769 -0.178262 0.829259 0.529672 + 0.22426 1.42835 -3.36575 -0.0703497 0.858586 0.50782 + 0.336362 1.37408 -3.28175 -0.125644 0.498092 0.857973 + 0.329689 1.40261 -3.30316 0.0753393 0.797063 0.599178 + 0.291361 1.41354 -3.36028 -0.0218483 0.986369 0.163091 + 0.264872 1.42001 -3.37589 0.223335 0.970896 0.086503 + 0.351495 1.41275 -3.32132 -0.141962 0.868005 0.475829 + 0.313167 1.42367 -3.37844 -0.32941 0.93576 0.125867 + 0.29845 1.41438 -3.42715 -0.0514491 0.977812 -0.203066 + 1.17383 1.1383 -2.28255 0.194613 0.970105 0.14499 + 1.22424 1.13141 -2.28583 0.413817 0.904967 -0.0989409 + 1.22861 1.11298 -2.32871 0.528261 0.821847 -0.213325 + 1.19565 1.13651 -2.25487 0.109195 0.982264 0.152424 + 1.2357 1.12492 -2.25118 0.541182 0.808211 0.2322 + 1.2456 1.11119 -2.3016 0.564608 0.807396 -0.171257 + 1.27949 1.08729 -2.3136 0.475525 0.854761 -0.207989 + 1.20313 1.12802 -2.23314 0.239668 0.884039 0.401291 + 1.2362 1.1012 -2.2137 0.137806 0.951148 0.276272 + 1.25706 1.10469 -2.26695 0.495192 0.86841 -0.0254913 + 1.27976 1.09644 -2.26906 0.372953 0.917345 -0.139225 + 1.316 1.07477 -2.28571 0.385327 0.893984 -0.228726 + 1.20362 1.1043 -2.19567 0.238304 0.889581 0.389688 + 1.24091 1.09246 -2.16535 -0.071895 0.977773 0.196955 + 1.26129 1.10663 -2.2153 0.0715909 0.995352 0.0644136 + 1.28399 1.0983 -2.21747 0.327265 0.944682 -0.0217718 + 1.31627 1.08384 -2.24124 0.347565 0.927761 -0.135862 + 1.20357 1.09346 -2.1667 0.126448 0.954904 0.268644 + 1.24051 1.08368 -2.11575 -0.126674 0.989325 0.0720449 + 1.26601 1.0978 -2.167 -0.0723418 0.989714 0.12342 + 1.29085 1.09788 -2.18675 0.18714 0.982137 -0.019651 + 1.20317 1.08477 -2.11704 0.127915 0.98607 0.106317 + 1.22956 1.08229 -2.07395 -0.133262 0.984262 -0.116057 + 1.28135 1.09502 -2.12479 -0.137151 0.990519 0.00790676 + 1.3062 1.0951 -2.14453 0.0604684 0.995696 -0.0702398 + 1.32313 1.08342 -2.21051 -0.0672484 0.997689 0.0097306 + 1.1945 1.08434 -2.08249 0.164639 0.986353 -0.00122404 + 1.20388 1.08947 -2.01999 0.0502951 0.903703 -0.425196 + 1.27041 1.09363 -2.08299 -0.27621 0.955386 -0.104625 + 1.28695 1.09954 -2.07262 -0.17438 0.976454 -0.127 + 1.3294 1.10126 -2.095 -0.0517155 0.987727 -0.147377 + 1.16882 1.09152 -2.02854 0.0959799 0.994324 -0.0458997 + 1.22043 1.09538 -2.00962 -0.138517 0.979629 -0.145398 + 1.29729 1.10744 -2.02971 -0.135188 0.984822 -0.108855 + 1.33975 1.10917 -2.0521 -0.0840485 0.98392 -0.157597 + 1.1395 1.09346 -2.0027 0.0166381 0.997789 0.0643516 + 1.21825 1.09746 -1.98082 -0.117738 0.992968 0.0123341 + 1.29512 1.10951 -2.0009 -0.169237 0.97886 -0.114858 + 1.33864 1.11785 -1.99854 -0.118338 0.982547 -0.143519 + 1.38558 1.11758 -2.01527 -0.0404582 0.978936 -0.200118 + 1.0773 1.09187 -1.97934 -0.139717 0.980491 0.138261 + 1.08885 1.08668 -1.91054 -0.0543864 0.997953 -0.0336387 + 1.15105 1.08818 -1.93396 -0.0322639 0.997527 0.0624434 + 1.04358 1.08718 -1.98882 -0.335124 0.920743 0.199811 + 1.02814 1.06684 -1.94899 -0.656876 0.724309 0.2095 + 1.04704 1.09328 -1.87537 -0.0568165 0.973459 -0.221696 + 1.14875 1.08447 -1.81252 0.0166636 0.99893 0.0431429 + 1.01312 1.00698 -1.8999 -0.865874 0.464506 0.185732 + 1.03479 1.05596 -1.91095 -0.999783 -0.00282248 0.0206327 + 1.02131 1.08018 -1.88689 -0.783526 0.443773 -0.434916 + 0.983915 1.11468 -1.79325 -0.102163 0.983633 -0.148422 + 1.10695 1.09107 -1.77734 0.193433 0.980445 0.036208 + 1.00757 0.9871 -1.87747 -0.999527 0.0279341 0.0128563 + 1.01754 1.01435 -1.84748 -0.980148 0.0821281 -0.180456 + 1.00406 1.03856 -1.82341 -0.881742 -0.332062 -0.33506 + 0.958184 1.10158 -1.80475 -0.844795 0.338915 -0.414075 + 0.969238 1.11357 -1.74933 -0.426329 0.859398 0.282274 + 1.01144 0.973013 -1.82287 -0.992641 -0.100177 0.0680311 + 1.01199 0.994478 -1.82505 -0.999822 -0.0137948 0.0128437 + 1.01533 0.98769 -1.79489 -0.983281 -0.180019 -0.0274183 + 0.996084 1.02283 -1.77676 -0.852529 -0.450039 -0.265817 + 0.950205 1.08585 -1.75811 -0.997753 0.00627019 0.0667073 + 1.01787 0.944963 -1.83089 -0.948448 -0.308782 0.0714167 + 1.01477 0.966219 -1.79271 -0.977988 -0.167108 0.124954 + 1.03766 0.883841 -1.85642 -0.936011 -0.29024 0.199107 + 1.05344 0.863585 -1.81634 -0.869877 -0.456995 0.185658 + 1.03365 0.924709 -1.79081 -0.918624 -0.378818 0.11237 + 1.02065 0.95854 -1.7576 -0.920918 -0.382938 -0.0725823 + 1.05773 0.785549 -1.86557 -0.899163 -0.216533 0.380289 + 1.09745 0.79464 -1.78372 -0.871335 -0.271412 0.408793 + 1.08484 0.863034 -1.74498 -0.811353 -0.472962 0.34353 + 1.10162 0.703111 -1.81219 -0.838781 -0.265915 0.475117 + 1.14134 0.7122 -1.73033 -0.842879 -0.285457 0.456146 + 1.19672 0.711416 -1.63137 -0.832189 -0.330822 0.444992 + 1.12885 0.794089 -1.71237 -0.849674 -0.358839 0.386378 + 1.16576 0.605239 -1.79147 -0.747742 -0.443804 0.493882 + 1.19759 0.632303 -1.70194 -0.770217 -0.466625 0.434772 + 1.25297 0.631515 -1.60298 -0.718975 -0.531517 0.447844 + 1.24 0.709635 -1.55049 -0.78085 -0.247533 0.573585 + 1.2434 0.501544 -1.78166 -0.723235 -0.581448 0.372624 + 1.27523 0.528608 -1.69214 -0.720071 -0.51528 0.464741 + 1.30463 0.57125 -1.6108 -0.679335 -0.545572 0.490771 + 1.35822 0.581842 -1.52854 -0.656583 -0.539662 0.526938 + 1.30656 0.642111 -1.52073 -0.660908 -0.507948 0.55244 + 1.3082 0.368428 -1.9001 -0.776223 -0.545595 0.315918 + 1.3305 0.388747 -1.78369 -0.756266 -0.57022 0.320797 + 1.36581 0.406463 -1.68898 -0.730104 -0.523775 0.438872 + 1.39521 0.449102 -1.60763 -0.723074 -0.48696 0.489932 + 1.39505 0.233576 -1.88213 -0.767191 -0.520094 0.375393 + 1.4351 0.243462 -1.79225 -0.74423 -0.554587 0.37223 + 1.47042 0.261177 -1.69754 -0.73133 -0.564573 0.38264 + 1.51087 0.270411 -1.60753 -0.737571 -0.529534 0.419025 + 1.48207 0.129597 -1.87343 -0.683504 -0.633734 0.362221 + 1.52211 0.139485 -1.78356 -0.684904 -0.628296 0.368986 + 1.56892 0.142187 -1.69044 -0.68261 -0.632699 0.365698 + 1.43834 0.12236 -1.9697 -0.68387 -0.636318 0.356961 + 1.54867 0.072714 -1.86511 -0.541253 -0.786384 0.297733 + 1.60296 0.071117 -1.76894 -0.548631 -0.785206 0.287151 + 1.64978 0.073826 -1.67583 -0.594865 -0.743055 0.306601 + 1.60938 0.151428 -1.60044 -0.69843 -0.62922 0.340994 + 1.50495 0.06539 -1.96142 -0.529744 -0.799468 0.283236 + 1.55544 0.042441 -1.96028 -0.128213 -0.985428 0.111771 + 1.60319 0.045063 -1.86662 -0.144472 -0.985996 0.0833079 + 1.65748 0.043559 -1.77041 -0.154326 -0.987293 0.0378994 + 1.70933 0.036278 -1.6716 -0.220039 -0.974594 0.0418279 + 1.51392 0.035693 -2.06379 -0.118869 -0.987129 0.106985 + 1.59725 0.050773 -1.9709 0.28735 -0.952473 -0.101115 + 1.645 0.053394 -1.87724 0.255373 -0.957105 -0.136877 + 1.69304 0.049387 -1.7757 0.224058 -0.959964 -0.168126 + 1.74489 0.042194 -1.67685 0.200715 -0.952112 -0.230643 + 1.46302 0.031072 -2.16318 -0.151168 -0.984575 0.0880925 + 1.5377 0.03982 -2.07013 0.281672 -0.956024 -0.0817188 + 1.5584 0.054865 -2.10739 0.448973 -0.873183 -0.189669 + 1.61795 0.065818 -2.00816 0.470416 -0.858163 -0.205585 + 1.67244 0.068455 -1.90453 0.409726 -0.884014 -0.225042 + 1.4868 0.035107 -2.16957 0.295092 -0.946694 -0.129194 + 1.50602 0.052899 -2.20699 0.438454 -0.869963 -0.225661 + 1.58162 0.083373 -2.16217 0.614934 -0.74329 -0.263392 + 1.62722 0.088345 -2.05878 0.60824 -0.742768 -0.279892 + 1.68171 0.091068 -1.9551 0.594195 -0.735021 -0.326614 + 1.44781 0.051335 -2.30468 0.449054 -0.862328 -0.233966 + 1.52924 0.081407 -2.26176 0.526251 -0.802257 -0.281857 + 1.5361 0.121257 -2.34579 0.669314 -0.663609 -0.334129 + 1.5781 0.118879 -2.24587 0.790392 -0.519879 -0.324048 + 1.6237 0.123939 -2.14243 0.808366 -0.48473 -0.334038 + 1.48243 0.090151 -2.36191 0.53415 -0.794824 -0.287989 + 1.48929 0.129995 -2.44592 0.631937 -0.699259 -0.334204 + 1.51576 0.167229 -2.46501 0.774431 -0.511087 -0.37289 + 1.55775 0.164852 -2.3651 0.858598 -0.397825 -0.323334 + 1.59089 0.16895 -2.26439 0.878137 -0.345949 -0.330448 + 1.44616 0.135233 -2.545 0.720464 -0.622236 -0.306194 + 1.47405 0.177061 -2.55984 0.774775 -0.505775 -0.379361 + 1.461 0.248108 -2.6577 0.826048 -0.357328 -0.435846 + 1.50271 0.238276 -2.56287 0.84771 -0.346865 -0.401339 + 1.5414 0.229123 -2.47201 0.854706 -0.369007 -0.365118 + 1.40652 0.13393 -2.65054 0.744357 -0.583335 -0.325043 + 1.43091 0.182214 -2.65897 0.840434 -0.388022 -0.378298 + 1.41123 0.246872 -2.74796 0.8547 -0.287013 -0.432564 + 1.44686 0.33257 -2.73139 0.84968 -0.199013 -0.4883 + 1.49747 0.340717 -2.6479 0.883143 -0.175278 -0.435127 + 1.38632 0.185582 -2.7542 0.834678 -0.375493 -0.402887 + 1.36663 0.250236 -2.84319 0.825653 -0.28402 -0.487473 + 1.39708 0.331328 -2.82164 0.857538 -0.116913 -0.500959 + 1.37354 0.397061 -2.86469 0.823809 0.0155686 -0.566653 + 1.42783 0.407363 -2.78434 0.844701 -0.0024908 -0.535233 + 1.34029 0.187375 -2.85431 0.865257 -0.252638 -0.433018 + 1.31287 0.247542 -2.92752 0.841424 -0.178422 -0.510069 + 1.33473 0.319051 -2.90858 0.822832 -0.0951803 -0.560258 + 1.31119 0.384784 -2.95163 0.773205 0.0210807 -0.633806 + 1.25835 0.25717 -3.02199 0.787327 -0.172088 -0.592032 + 1.28097 0.316272 -2.99296 0.821111 0.0322024 -0.569859 + 1.25167 0.379392 -3.02109 0.757663 0.120298 -0.641464 + 1.19801 0.257929 -3.09751 0.775382 -0.0560858 -0.628996 + 1.22401 0.308672 -3.0596 0.761525 0.0677958 -0.64458 + 1.19471 0.371712 -3.08779 0.701771 0.120874 -0.702074 + 1.13615 0.255278 -3.16932 0.724929 -0.0724772 -0.685 + 1.16367 0.309433 -3.13512 0.744582 0.136117 -0.653506 + 1.13457 0.383945 -3.14298 0.699053 0.226511 -0.678246 + 1.17194 0.445132 -3.08136 0.662967 0.274658 -0.696446 + 1.07432 0.25742 -3.23383 0.73092 0.0408514 -0.68124 + 1.10446 0.320445 -3.19199 0.70577 0.158678 -0.690442 + 1.07535 0.395043 -3.1998 0.681112 0.252963 -0.687093 + 1.11179 0.457364 -3.13654 0.668815 0.333525 -0.664415 + 1.00851 0.253025 -3.30362 0.718451 0.0519048 -0.693639 + 1.04262 0.322675 -3.25645 0.706391 0.17828 -0.685003 + 1.01994 0.404621 -3.25099 0.681459 0.277771 -0.677094 + 1.05221 0.499857 -3.17234 0.645736 0.378265 -0.66328 + 0.944428 0.249624 -3.37032 0.732425 0.115271 -0.671019 + 0.980638 0.325053 -3.31757 0.697502 0.190228 -0.690872 + 0.957952 0.406999 -3.31211 0.678046 0.278316 -0.68029 + 0.996791 0.50944 -3.22354 0.632031 0.444915 -0.634498 + 0.881302 0.234337 -3.44385 0.706798 0.126796 -0.695959 + 0.916559 0.321651 -3.38428 0.696719 0.206907 -0.686856 + 0.899258 0.399787 -3.37301 0.672912 0.279736 -0.68479 + 0.943938 0.490236 -3.28708 0.646297 0.409179 -0.644106 + 0.876258 0.541468 -3.31861 0.473963 0.683883 -0.554674 + 0.817145 0.232554 -3.50676 0.68057 0.157737 -0.715502 + 0.853666 0.326434 -3.44337 0.669238 0.237034 -0.704227 + 0.836365 0.404575 -3.43211 0.633331 0.301495 -0.712736 + 0.885244 0.483021 -3.34798 0.629417 0.379515 -0.678087 + 0.746372 0.233952 -3.57118 0.669883 0.156931 -0.725692 + 0.789509 0.324651 -3.50627 0.662242 0.263051 -0.701598 + 0.769752 0.39896 -3.49018 0.629927 0.332175 -0.702034 + 0.826932 0.46533 -3.40914 0.598605 0.39314 -0.697935 + 0.817946 0.523864 -3.37972 0.648699 0.355459 -0.672933 + 0.680662 0.232892 -3.63234 0.679381 0.154297 -0.71738 + 0.724944 0.323717 -3.56626 0.646391 0.269001 -0.714014 + 0.705187 0.397941 -3.55022 0.552641 0.451557 -0.700488 + 0.760318 0.459718 -3.46722 0.525491 0.431257 -0.733401 + 0.763341 0.514662 -3.43259 0.527047 0.380368 -0.759962 + 0.611912 0.245471 -3.69613 0.608378 0.150566 -0.779235 + 0.659234 0.322565 -3.62746 0.632226 0.313554 -0.708501 + 0.633228 0.392851 -3.6094 0.524499 0.509453 -0.682172 + 0.686246 0.450249 -3.51362 0.447668 0.54437 -0.709404 + 0.689269 0.50519 -3.47898 0.451928 0.465408 -0.761023 + 0.53144 0.25276 -3.74876 0.483301 0.0969158 -0.870073 + 0.592167 0.301591 -3.69274 0.568567 0.318986 -0.758274 + 0.566161 0.371871 -3.67466 0.523248 0.454411 -0.720918 + 0.614287 0.445155 -3.57279 0.526912 0.546538 -0.650891 + 0.608234 0.503811 -3.53379 0.556263 0.458323 -0.69319 + 0.44283 0.266892 -3.78923 0.322154 0.0675238 -0.944276 + 0.511694 0.308967 -3.74531 0.474516 0.321334 -0.819499 + 0.494656 0.378376 -3.71793 0.459761 0.460824 -0.759119 + 0.541237 0.456002 -3.63058 0.527577 0.509415 -0.679823 + 0.535184 0.51466 -3.59158 0.537571 0.473167 -0.697947 + 0.465982 0.209252 -3.7754 0.3021 -0.258712 -0.917498 + 0.355308 0.284864 -3.81136 0.19792 0.0967771 -0.975429 + 0.431191 0.33672 -3.77258 0.354235 0.346198 -0.868714 + 0.414152 0.406132 -3.74521 0.36191 0.489554 -0.79332 + 0.469732 0.4625 -3.67384 0.430857 0.527184 -0.73242 + 0.366945 0.225613 -3.80614 0.181632 -0.242402 -0.953022 + 0.252434 0.307248 -3.82213 0.0817809 0.081911 -0.993279 + 0.343669 0.354777 -3.79466 0.231617 0.325292 -0.916809 + 0.328062 0.418079 -3.7713 0.241082 0.47718 -0.845091 + 0.389347 0.471242 -3.70698 0.340012 0.549087 -0.763475 + 0.26407 0.248002 -3.81692 0.0603427 -0.160659 -0.985164 + 0.147688 0.318304 -3.82488 -0.00684758 0.108863 -0.994033 + 0.248549 0.359507 -3.81045 0.124471 0.288709 -0.949291 + 0.232942 0.422812 -3.7871 0.176342 0.414317 -0.892885 + 0.303257 0.483193 -3.73308 0.279063 0.525115 -0.803977 + 0.176903 0.195293 -3.80722 0.0407228 -0.336927 -0.94065 + 0.157958 0.255972 -3.82512 0.0188621 -0.12006 -0.992587 + 0.046452 0.314111 -3.81882 -0.0291123 0.0995672 -0.994605 + 0.143803 0.370477 -3.81325 -0.00485322 0.230677 -0.973018 + 0.145096 0.431693 -3.79748 0.047996 0.336661 -0.940402 + 0.056722 0.196941 -3.80987 -0.00373321 -0.291163 -0.956666 + 0.056722 0.251864 -3.81901 -0.0298785 -0.0846121 -0.995966 + -0.046453 0.314111 -3.81882 0.0302387 0.0984484 -0.994683 + 0.046452 0.391079 -3.80313 -0.0262006 0.226635 -0.973627 + 0.047745 0.452294 -3.78736 0.0110155 0.228217 -0.973548 + 0.059143 0.156342 -3.79236 0.00529499 -0.546063 -0.837727 + -0.056722 0.196941 -3.80987 -0.00851193 -0.281138 -0.95963 + -0.056722 0.251864 -3.81901 0.0163078 -0.0953417 -0.995311 + -0.147688 0.318304 -3.82488 0.00542591 0.107405 -0.994201 + -0.046453 0.391079 -3.80313 0.0270779 0.227553 -0.973389 + -0.059144 0.132308 -3.76993 0.00680413 -0.70964 -0.704532 + -0.059144 0.156351 -3.79237 -0.00182354 -0.543587 -0.839351 + -0.176904 0.195293 -3.80722 -0.0322481 -0.331945 -0.942747 + -0.157958 0.255972 -3.82512 -0.00591289 -0.134356 -0.990915 + -0.054834 0.111412 -3.74713 0.0307269 -0.824498 -0.56503 + -0.174334 0.128615 -3.76833 -0.00914269 -0.683778 -0.729633 + -0.179325 0.154625 -3.78978 -0.0428574 -0.516867 -0.854992 + -0.290328 0.147155 -3.77605 -0.094679 -0.559306 -0.823537 + -0.283017 0.187238 -3.79907 -0.114784 -0.36001 -0.925861 + -0.168312 0.087521 -3.72895 0.0496754 -0.898873 -0.435385 + -0.170024 0.107717 -3.74554 0.0118117 -0.687459 -0.726127 + -0.281723 0.098999 -3.73903 -0.0584176 -0.603617 -0.795131 + -0.285337 0.121152 -3.7546 -0.091184 -0.614501 -0.783629 + -0.060586 0.096136 -3.67128 0.0466666 -0.998847 0.0113056 + -0.174064 0.085736 -3.68326 0.048937 -0.993376 0.103972 + -0.27918 0.080809 -3.67453 0.0927764 -0.98278 0.159801 + -0.28001 0.078715 -3.7225 0.0430148 -0.907461 -0.417929 + -0.174324 0.110026 -3.60193 0.0166475 -0.929162 0.369299 + -0.279441 0.105189 -3.59316 0.111749 -0.920389 0.374694 + -0.388386 0.070091 -3.66177 0.149617 -0.978069 0.144895 + -0.389216 0.067999 -3.70974 -0.117379 -0.768087 -0.629496 + -0.165895 0.16095 -3.49994 0.00834939 -0.856492 0.516093 + -0.261283 0.173084 -3.47735 0.0987227 -0.837787 0.536998 + -0.373358 0.097524 -3.56988 0.202337 -0.906663 0.370164 + -0.238391 0.271757 -3.33506 0.0595084 -0.770229 0.634984 + -0.320792 0.288955 -3.30525 0.151164 -0.739532 0.655928 + -0.3552 0.165506 -3.45403 0.181601 -0.824866 0.535366 + -0.433629 0.173555 -3.41737 0.311265 -0.773587 0.551976 + -0.458605 0.088544 -3.53053 0.331167 -0.862598 0.382431 + -0.230969 0.366491 -3.24114 0.0995276 -0.594179 0.798151 + -0.31337 0.383687 -3.21133 0.141697 -0.58093 0.801525 + -0.381253 0.419616 -3.17396 0.228272 -0.520139 0.823011 + -0.399221 0.297007 -3.26859 0.174258 -0.706702 0.685717 + -0.251102 0.432437 -3.20417 0.250327 -0.243591 0.937016 + -0.316227 0.474584 -3.16837 0.38403 -0.20214 0.900922 + -0.384109 0.510512 -3.131 0.406972 -0.225809 0.88509 + -0.241066 0.63853 -3.21133 0.377262 0.0614409 0.924066 + -0.306191 0.680596 -3.17559 0.514185 0.0625139 0.855398 + -0.370374 0.709814 -3.139 0.578864 0.0521354 0.813756 + -0.44018 0.567976 -3.08593 0.515034 -0.19669 0.834298 + -0.212319 0.988087 -3.26118 0.324308 0.127323 0.937344 + -0.282673 1.00032 -3.23376 0.461718 0.114725 0.879576 + -0.346856 1.02945 -3.19722 0.511971 0.130633 0.849011 + -0.413558 1.03519 -3.15817 0.595967 0.142712 0.790226 + -0.426445 0.767278 -3.09393 0.659974 0.0706526 0.747959 + -0.153945 1.1952 -3.31132 0.174574 0.17545 0.968887 + -0.190816 1.18047 -3.29859 0.316914 0.180531 0.931114 + -0.26117 1.19278 -3.27112 0.410115 0.201215 0.889561 + -0.344489 1.20163 -3.23224 0.477331 0.195364 0.856731 + -0.114169 1.17588 -3.31345 0.14803 0.126719 0.980831 + -0.11631 1.26212 -3.32543 0.0820971 0.192741 0.977809 + -0.160899 1.2621 -3.32539 0.0995642 0.238302 0.966074 + -0.19777 1.24737 -3.31267 0.249493 0.293113 0.922951 + -0.031937 1.24305 -3.33199 0.0637637 0.156528 0.985613 + -0.076534 1.2428 -3.32755 0.115328 0.181314 0.976639 + -0.062427 1.31189 -3.34562 0.140711 0.170437 0.97527 + -0.109376 1.31139 -3.33635 0.0787367 0.190525 0.97852 + 0.031933 1.24315 -3.33196 -0.0516016 0.145085 0.988073 + -0.017829 1.31214 -3.35006 0.0988941 0.340303 0.935101 + -0.053659 1.34977 -3.35164 0.270054 0.404265 0.873865 + -0.100608 1.34927 -3.34237 0.0763008 0.317099 0.945318 + 0.017835 1.31214 -3.35006 -0.0417941 0.393612 0.918326 + -0.017829 1.37905 -3.39174 0.160566 0.585753 0.794426 + -0.02584 1.40636 -3.41205 -0.00505257 0.861277 0.50811 + -0.061669 1.37709 -3.37195 0.172867 0.766493 0.618551 + -0.088954 1.37642 -3.3624 0.206618 0.720412 0.662054 + 0.017835 1.37904 -3.39173 -0.164955 0.59249 0.788508 + -0.013819 1.41482 -3.4315 -0.0556168 0.987237 0.149232 + -0.055307 1.40668 -3.44081 -0.117956 0.987172 -0.107599 + -0.067327 1.39831 -3.4213 -0.0216331 0.915 0.402873 + -0.094612 1.39773 -3.41171 0.27398 0.870181 0.409537 + 0.053665 1.34977 -3.35164 -0.480395 0.253956 0.83948 + 0.061669 1.37709 -3.37195 -0.172497 0.766738 0.618351 + 0.02584 1.40636 -3.41205 0.0097644 0.844262 0.535842 + 0.088951 1.37642 -3.3624 -0.206806 0.720557 0.661837 + 0.067327 1.39831 -3.4213 0.000186073 0.906139 0.42298 + 0.055319 1.40667 -3.44079 0.0784006 0.992009 -0.0988484 + 0.013832 1.41481 -3.43149 0.0804617 0.993241 0.083655 + 0.135162 1.40392 -3.37363 -0.171998 0.757538 0.629724 + 0.094609 1.39773 -3.41171 -0.26881 0.865612 0.422443 + 0.111364 1.41296 -3.42808 -0.363813 0.900301 0.238952 + 0.151917 1.41924 -3.38996 -0.307755 0.812301 0.495433 + 0.156277 1.43764 -3.42784 -0.285621 0.938718 0.19295 + 0.15292 1.43718 -3.44704 -0.206158 0.926448 -0.314948 + 0.108007 1.4125 -3.44729 -0.321138 0.911293 -0.257713 + 0.173579 1.40108 -3.36231 -0.254519 0.382566 0.88818 + 0.187502 1.42533 -3.37352 -0.0976133 0.863239 0.495267 + 0.184397 1.42224 -3.38296 -0.0686834 0.997477 0.0179669 + 0.188757 1.44073 -3.42079 -0.0162508 0.987682 0.155629 + 0.203469 1.43657 -3.38037 -0.0886693 0.716164 0.692276 + 0.244081 1.42822 -3.39051 0.285648 0.935309 -0.208812 + 0.240976 1.42512 -3.39995 0.171851 0.985119 -0.00276594 + 0.203469 1.43657 -3.38037 -0.273932 -0.186205 -0.943551 + 0.273714 1.41652 -3.42925 0.202362 0.965394 -0.164512 + 0.251959 1.4259 -3.4201 0.374003 0.924182 0.0775175 + 0.289238 1.40217 -3.48199 0.140981 0.891409 -0.430714 + 0.248195 1.41737 -3.46932 0.190556 0.89119 -0.411666 + 0.22644 1.42675 -3.46018 0.170376 0.876864 -0.449534 + 0.19974 1.44151 -3.44094 -0.121399 0.958384 -0.258385 + 0.190844 1.42436 -3.46183 -0.0614585 0.718917 -0.692374 + 0.313974 1.40012 -3.47984 0.0742122 0.891002 -0.447893 + 0.330946 1.38218 -3.50197 0.182925 0.670616 -0.718897 + 0.288755 1.38388 -3.50732 0.0512786 0.653434 -0.755245 + 0.247711 1.399 -3.4947 -0.0481689 0.666744 -0.743729 + 0.217544 1.4096 -3.48106 -0.204916 0.6054 -0.769091 + 0.346548 1.40927 -3.45969 0.00868479 0.878648 -0.477391 + 0.36352 1.39142 -3.48178 0.247026 0.695938 -0.674276 + 0.336869 1.3615 -3.51435 0.221369 0.391135 -0.893314 + 0.294678 1.3632 -3.5197 0.0467424 0.372107 -0.927012 + 0.25492 1.35791 -3.51993 -0.146598 0.337282 -0.929919 + 0.316487 1.42576 -3.40806 -0.338962 0.928199 -0.153462 + 0.364585 1.42065 -3.44061 -0.0226793 0.85014 -0.526069 + 0.389512 1.40048 -3.46206 0.323625 0.674508 -0.663556 + 0.375559 1.35026 -3.50649 0.38076 0.350827 -0.855536 + 0.385872 1.44511 -3.40436 0.212699 0.963748 -0.161084 + 0.410798 1.42493 -3.42582 0.28736 0.811221 -0.509259 + 0.401551 1.3594 -3.48672 0.374962 0.47191 -0.797938 + 0.38448 1.29631 -3.51504 0.269127 0.0632948 -0.961022 + 0.382552 1.44302 -3.37474 -0.0412554 0.987495 0.152158 + 0.431014 1.42252 -3.41704 0.349737 0.802369 -0.48362 + 0.420168 1.36919 -3.47308 0.324627 0.555358 -0.765634 + 0.428869 1.32363 -3.49155 0.49583 0.268433 -0.825891 + 0.410252 1.31375 -3.50525 0.346747 0.223354 -0.910977 + 0.437661 1.43887 -3.38337 0.217246 0.955316 -0.200436 + 0.457182 1.39153 -3.43356 0.356417 0.694627 -0.624868 + 0.440384 1.36678 -3.4643 0.431359 0.501611 -0.749877 + 0.44041 1.31497 -3.48615 0.462112 0.198961 -0.864214 + 0.428342 1.24897 -3.49684 0.418722 -0.0477808 -0.906857 + 0.459366 1.35568 -3.45866 0.298453 0.473778 -0.828529 + 0.459392 1.30386 -3.48052 0.447459 0.0877752 -0.889986 + 0.439884 1.24031 -3.49145 0.443513 -0.11501 -0.888858 + 0.45177 1.11419 -3.4558 0.628216 -0.197709 -0.7525 + 0.402571 1.23153 -3.50663 0.36982 -0.111089 -0.922438 + 0.481817 1.26982 -3.45996 0.35386 -0.164402 -0.920736 + 0.462308 1.20627 -3.47089 0.659232 -0.158976 -0.734942 + 0.500979 1.14196 -3.4007 0.548185 -0.309852 -0.776843 + 0.490441 1.04989 -3.38562 0.673376 -0.0727248 -0.735715 + 0.54169 1.23037 -3.43524 0.316975 -0.420198 -0.850271 + 0.525924 1.10772 -3.37419 0.350719 -0.259242 -0.899883 + 0.523947 1.00931 -3.36355 0.410235 0.0254605 -0.911624 + 0.483309 0.9457 -3.40716 0.38816 0.0450427 -0.920491 + 0.552783 0.998588 -3.35717 0.311503 0.0379845 -0.949486 + 0.554949 0.895571 -3.37554 0.353821 0.217668 -0.909632 + 0.516815 0.905132 -3.3851 0.440698 0.168369 -0.881724 + 0.478449 0.842041 -3.41942 0.343439 0.347188 -0.872645 + 0.453938 0.960764 -3.40646 0.18714 -0.143293 -0.971826 + 0.549585 0.807847 -3.4032 0.369654 0.20877 -0.905412 + 0.51145 0.817408 -3.41276 0.415847 0.319928 -0.851303 + 0.452226 0.777477 -3.47419 0.218744 0.143885 -0.965116 + 0.449078 0.857014 -3.41876 0.182208 0.338376 -0.923202 + 0.562027 0.731222 -3.41288 0.517741 0.338327 -0.785799 + 0.485227 0.752929 -3.46748 0.511071 0.425893 -0.746607 + 0.429639 0.78645 -3.47633 0.315643 0.499265 -0.80691 + 0.426491 0.865992 -3.42091 0.311218 0.263877 -0.912969 + 0.415375 0.969923 -3.43112 0.442703 -0.16193 -0.881925 + 0.62641 0.7248 -3.37895 0.434195 0.284204 -0.854812 + 0.57491 0.667283 -3.44113 0.539399 0.479631 -0.6921 + 0.498111 0.688905 -3.49578 0.533051 0.479051 -0.6974 + 0.419446 0.698937 -3.53976 0.36682 0.526179 -0.767189 + 0.401327 0.760889 -3.50386 0.311133 0.534954 -0.785507 + 0.6518 0.659947 -3.39483 0.434262 0.444228 -0.783632 + 0.608552 0.602889 -3.4668 0.524961 0.515402 -0.677331 + 0.526324 0.622523 -3.52641 0.530705 0.514742 -0.673344 + 0.447658 0.632468 -3.57043 0.410001 0.521637 -0.748194 + 0.685442 0.595548 -3.42048 0.398138 0.516228 -0.758284 + 0.700774 0.548617 -3.4434 0.37111 0.523403 -0.767024 + 0.619739 0.547326 -3.49816 0.532904 0.471288 -0.702781 + 0.53751 0.56696 -3.55777 0.541562 0.467465 -0.698704 + 0.769571 0.623474 -3.37065 0.414621 0.619307 -0.666744 + 0.784903 0.576636 -3.39353 0.514389 0.398737 -0.759218 + 0.824094 0.620744 -3.32732 0.689605 0.667044 -0.281952 + 0.839508 0.585837 -3.34066 0.880302 0.234367 -0.412481 + 0.850633 0.571579 -3.27597 0.691401 0.624303 -0.363607 + 0.202863 1.37775 -3.4871 -0.246237 0.390109 -0.887233 + 0.18102 1.37515 -3.48979 0.284148 0.480033 -0.829957 + 0.169001 1.42167 -3.46457 0.0410484 0.663436 -0.747106 + 0.135567 1.41214 -3.47266 -0.214545 0.785278 -0.580783 + 0.224753 1.36843 -3.50635 -0.415741 0.338208 -0.84426 + 0.23124 1.30733 -3.52613 -0.410462 0.0793803 -0.908416 + 0.20935 1.31665 -3.50687 -0.216845 0.232952 -0.948004 + 0.186503 1.33698 -3.50528 0.399705 0.319828 -0.859038 + 0.265468 1.30618 -3.52993 -0.0489671 0.0972229 -0.994057 + 0.240546 1.23784 -3.52937 -0.139411 -0.0449392 -0.989214 + 0.205617 1.25386 -3.52612 0.0793408 0.0959397 -0.99222 + 0.18277 1.27427 -3.52447 0.278017 0.213043 -0.936653 + 0.305226 1.31147 -3.52969 0.0808413 0.105789 -0.991097 + 0.313998 1.23121 -3.52948 0.11317 -0.0763665 -0.990636 + 0.274773 1.23669 -3.53318 -0.00492439 -0.0564707 -0.998392 + 0.34579 1.30755 -3.5229 0.210507 0.0991929 -0.972547 + 0.354562 1.22729 -3.52269 0.246926 -0.0850897 -0.965291 + 0.328106 1.12278 -3.50867 0.171585 -0.230828 -0.957746 + 0.288882 1.12826 -3.51238 0.130659 -0.194822 -0.972097 + 0.271159 1.09806 -3.51045 0.223639 -0.178084 -0.958265 + 0.413208 1.12335 -3.48046 0.413676 -0.219259 -0.883627 + 0.365199 1.1191 -3.49651 0.305335 -0.240667 -0.921331 + 0.340683 0.972804 -3.45911 0.350587 -0.134777 -0.926782 + 0.321531 0.967345 -3.46626 0.266288 -0.123788 -0.955912 + 0.303809 0.937137 -3.46433 0.208122 -0.0170007 -0.977955 + 0.377776 0.969135 -3.44696 0.340925 -0.160459 -0.926295 + 0.388892 0.865204 -3.43674 0.435932 0.24891 -0.864874 + 0.36058 0.839644 -3.46427 0.336231 0.355347 -0.872168 + 0.341428 0.834182 -3.47141 0.253304 0.3868 -0.886692 + 0.324119 0.755671 -3.53462 0.313321 0.54734 -0.776047 + 0.291475 0.778169 -3.53319 0.408725 0.542398 -0.733994 + 0.308783 0.856679 -3.46998 0.308499 0.272868 -0.911247 + 0.273883 0.94721 -3.48018 0.347105 -0.0545972 -0.936236 + 0.342238 0.693626 -3.57056 0.278259 0.543769 -0.791762 + 0.276321 0.788484 -3.53466 0.0526014 0.542389 -0.838479 + 0.278858 0.866753 -3.48582 0.432091 0.310496 -0.846694 + 0.263704 0.877155 -3.48724 0.0778299 0.264969 -0.961111 + 0.258453 0.951896 -3.4843 0.000965101 -0.07946 -0.996838 + 0.366268 0.635173 -3.60391 0.295469 0.53815 -0.789362 + 0.283918 0.635585 -3.63123 0.275975 0.569554 -0.774239 + 0.259889 0.694043 -3.59788 0.204008 0.580512 -0.78828 + 0.459741 0.576667 -3.60318 0.422799 0.504339 -0.752917 + 0.37835 0.579463 -3.63662 0.319651 0.54525 -0.774936 + 0.295794 0.585203 -3.66637 0.295661 0.573611 -0.763908 + 0.19882 0.638771 -3.65915 0.19567 0.613711 -0.7649 + 0.457415 0.524364 -3.63699 0.426486 0.501637 -0.752642 + 0.37703 0.533192 -3.67008 0.33887 0.534265 -0.774421 + 0.294473 0.538852 -3.69988 0.299305 0.539182 -0.787209 + 0.210359 0.547039 -3.72446 0.243693 0.54762 -0.800454 + 0.210696 0.588303 -3.69433 0.234628 0.586332 -0.775348 + 0.219143 0.491294 -3.75771 0.226493 0.465643 -0.855499 + 0.125856 0.550614 -3.74385 0.164237 0.519415 -0.83859 + 0.126193 0.591881 -3.71373 0.161139 0.615806 -0.771244 + 0.121754 0.635303 -3.67714 0.13727 0.643985 -0.752622 + 0.177596 0.693464 -3.61488 0.148772 0.64176 -0.752337 + 0.131297 0.500173 -3.76809 0.116093 0.402432 -0.908059 + 0.042305 0.554897 -3.75507 0.0635508 0.528745 -0.846398 + 0.042305 0.592503 -3.72521 0.0562201 0.633567 -0.771642 + 0.037866 0.635925 -3.68862 0.0399128 0.675958 -0.735859 + 0.10053 0.689996 -3.63287 0.0719798 0.673846 -0.735357 + 0.047745 0.504458 -3.77931 0.0729337 0.299081 -0.951436 + -0.042299 0.554897 -3.75507 -0.067407 0.531543 -0.844345 + -0.042299 0.592503 -3.72521 -0.0608131 0.630536 -0.773774 + -0.037866 0.635925 -3.68862 -0.0506536 0.684472 -0.727278 + 0.037866 0.679163 -3.64331 -0.00267406 0.708749 -0.705456 + -0.047746 0.452294 -3.78736 0.0304382 0.197922 -0.979745 + -0.047746 0.504458 -3.77931 -0.0424475 0.326367 -0.94429 + -0.125851 0.550614 -3.74385 -0.160109 0.522816 -0.837274 + -0.126187 0.591881 -3.71373 -0.157705 0.613615 -0.773696 + -0.121754 0.635303 -3.67714 -0.12676 0.65031 -0.749018 + -0.145096 0.431693 -3.79748 -0.0623385 0.323363 -0.94422 + -0.131297 0.500178 -3.7681 -0.145146 0.428246 -0.891929 + -0.219143 0.491294 -3.75771 -0.209934 0.478385 -0.852687 + -0.210358 0.547039 -3.72446 -0.244548 0.548124 -0.799848 + -0.210694 0.588303 -3.69433 -0.23583 0.585459 -0.775643 + -0.143803 0.370477 -3.81325 0.00251031 0.232517 -0.972589 + -0.248561 0.359502 -3.81044 -0.121637 0.291314 -0.948863 + -0.232942 0.422812 -3.7871 -0.158052 0.39551 -0.90476 + -0.252446 0.307248 -3.82213 -0.0774734 0.0785539 -0.993895 + -0.35532 0.284859 -3.81135 -0.199613 0.0952325 -0.975236 + -0.343681 0.354772 -3.79465 -0.23448 0.327842 -0.915171 + -0.328062 0.418079 -3.7713 -0.254814 0.466885 -0.846811 + -0.264071 0.247997 -3.81691 -0.0745682 -0.171886 -0.98229 + -0.366946 0.225613 -3.80614 -0.132483 -0.290398 -0.947691 + -0.46598 0.209252 -3.7754 -0.303117 -0.259466 -0.91695 + -0.442819 0.266897 -3.78924 -0.331122 0.0754069 -0.94057 + -0.43118 0.336725 -3.77259 -0.359 0.341411 -0.868653 + -0.389832 0.172658 -3.77302 -0.164427 -0.462954 -0.870998 + -0.488867 0.156299 -3.74228 -0.250614 -0.490366 -0.834706 + -0.5842 0.141337 -3.69717 -0.391415 -0.430963 -0.813059 + -0.55459 0.195116 -3.73491 -0.440772 -0.204233 -0.874076 + -0.531429 0.25276 -3.74876 -0.478224 0.101717 -0.872327 + -0.397143 0.132582 -3.75 -0.165876 -0.58462 -0.794169 + -0.499958 0.118466 -3.71255 -0.223329 -0.626162 -0.747024 + -0.595291 0.103505 -3.66744 -0.313826 -0.635406 -0.70553 + -0.682147 0.090917 -3.60984 -0.426149 -0.606739 -0.671018 + -0.666436 0.129377 -3.64445 -0.515866 -0.36769 -0.773748 + -0.392791 0.111121 -3.72923 -0.149574 -0.648977 -0.74596 + -0.495606 0.097005 -3.69178 -0.205233 -0.691502 -0.692607 + -0.58794 0.081027 -3.64191 -0.270917 -0.723488 -0.634956 + -0.674795 0.068439 -3.5843 -0.302017 -0.766649 -0.5666 + -0.389177 0.088968 -3.71366 -0.237191 -0.396388 -0.886914 + -0.490638 0.07538 -3.67233 -0.347933 -0.472663 -0.80965 + -0.582971 0.059404 -3.62245 -0.295983 -0.729356 -0.616794 + -0.656429 0.045461 -3.56171 -0.300589 -0.794469 -0.527698 + -0.74931 0.051972 -3.51798 -0.404311 -0.725625 -0.556778 + -0.490677 0.054324 -3.66846 -0.271277 -0.764678 -0.584531 + -0.56356 0.039286 -3.60281 -0.0151808 -0.956663 -0.290801 + -0.637018 0.02535 -3.54207 -0.0474612 -0.975787 -0.213512 + -0.704689 0.015375 -3.47239 0.0497116 -0.991183 -0.12282 + -0.730944 0.029087 -3.49534 -0.262881 -0.859505 -0.438343 + -0.473633 0.061026 -3.62246 0.236519 -0.960869 0.144188 + -0.546516 0.045994 -3.55683 0.304335 -0.934442 0.184926 + -0.614262 0.039505 -3.49159 0.342227 -0.909834 0.234698 + -0.681933 0.029531 -3.42191 0.368968 -0.893535 0.255847 + -0.772297 0.004586 -3.40171 0.0500294 -0.996834 -0.0617984 + -0.528557 0.085339 -3.47517 0.405513 -0.811049 0.421613 + -0.596303 0.078852 -3.40994 0.494828 -0.754489 0.431152 + -0.652092 0.083551 -3.34128 0.521612 -0.720876 0.456354 + -0.711505 0.081249 -3.27089 0.568741 -0.688788 0.44956 + -0.741345 0.027227 -3.35152 0.404557 -0.867117 0.290587 + -0.503581 0.170259 -3.36206 0.382646 -0.723755 0.574248 + -0.56616 0.187379 -3.30871 0.483675 -0.646985 0.589464 + -0.62195 0.191992 -3.2401 0.566958 -0.581271 0.583681 + -0.67323 0.214898 -3.17478 0.622908 -0.5263 0.578787 + -0.468642 0.323794 -3.23039 0.287651 -0.643127 0.709679 + -0.531221 0.340828 -3.17709 0.323101 -0.596325 0.734848 + -0.582788 0.389107 -3.12352 0.470962 -0.508368 0.720942 + -0.634068 0.412018 -3.0582 0.618481 -0.435186 0.654289 + -0.450673 0.446399 -3.13575 0.234921 -0.518637 0.822087 + -0.505423 0.495836 -3.08818 0.369441 -0.453015 0.811351 + -0.55699 0.544116 -3.0346 0.409437 -0.430524 0.80437 + -0.60776 0.585761 -2.98813 0.557687 -0.34303 0.755854 + -0.682178 0.444467 -2.9922 0.711149 -0.381336 0.590635 + -0.49493 0.617412 -3.03835 0.563081 -0.203271 0.801013 + -0.542085 0.679823 -2.98485 0.613253 -0.170892 0.771178 + -0.592855 0.721468 -2.93838 0.391013 -0.158552 0.906626 + -0.650256 0.756918 -2.92238 0.560709 -0.0199546 0.827772 + -0.655871 0.618124 -2.92219 0.749676 -0.176908 0.637722 + -0.483712 0.796392 -3.04775 0.710443 0.0649358 0.700752 + -0.530867 0.858801 -2.99425 0.728672 0.117238 0.674754 + -0.584755 0.88381 -2.95217 0.515703 0.130637 0.846749 + -0.470825 1.0643 -3.11199 0.622835 0.17802 0.76183 + -0.531515 1.06107 -3.06439 0.644572 0.214255 0.733909 + -0.585403 1.08609 -3.02232 0.67448 0.232207 0.700826 + -0.636956 1.07292 -2.96692 0.67064 0.202604 0.713578 + -0.642155 0.919266 -2.93618 0.538513 0.108757 0.835569 + -0.411191 1.20737 -3.19319 0.503364 0.263393 0.822951 + -0.478377 1.20727 -3.14921 0.561896 0.270668 0.781673 + -0.539068 1.20412 -3.10156 0.564598 0.326131 0.7582 + -0.571991 1.21055 -3.0797 0.641148 0.346885 0.684544 + -0.596152 1.19696 -3.04635 0.701851 0.271422 0.658586 + -0.380483 1.26394 -3.22597 0.349973 0.242226 0.904901 + -0.405022 1.26374 -3.22323 0.282333 0.308878 0.90823 + -0.441117 1.27996 -3.20793 0.54275 0.227806 0.80841 + -0.447286 1.2236 -3.1779 0.531465 0.351648 0.770641 + -0.508162 1.25605 -3.14551 0.52243 0.305436 0.7961 + -0.324758 1.21402 -3.24652 0.480054 0.237997 0.844337 + -0.360752 1.27625 -3.24029 0.609766 0.256482 0.749935 + -0.393174 1.33562 -3.23593 0.412858 0.166265 0.895491 + -0.417713 1.33543 -3.23319 0.36587 -0.0340581 0.930042 + -0.448258 1.31784 -3.20993 0.587047 0.0656499 0.806886 + -0.308602 1.21724 -3.25628 0.396627 0.337141 0.853828 + -0.351967 1.277 -3.25119 0.613052 0.290892 0.73454 + -0.374757 1.3333 -3.24891 0.66002 0.269898 0.701091 + -0.401247 1.40643 -3.25577 0.458557 0.565264 0.685712 + -0.421983 1.37743 -3.22175 0.479854 0.342175 0.807872 + -0.280751 1.22028 -3.26996 0.415013 0.246145 0.875886 + -0.29321 1.28676 -3.2803 0.400311 0.192049 0.896029 + -0.335811 1.28021 -3.26095 0.416642 0.221769 0.881605 + -0.365972 1.33396 -3.25985 0.570043 0.250602 0.782464 + -0.38283 1.40402 -3.26879 0.617982 0.481989 0.621115 + -0.22293 1.28596 -3.31451 0.403117 0.211752 0.890313 + -0.265359 1.28981 -3.29397 0.432818 0.192407 0.880709 + -0.296601 1.33175 -3.28702 0.389387 0.0914541 0.916523 + -0.339203 1.3252 -3.26767 0.356037 0.195876 0.913712 + -0.363124 1.38293 -3.27388 0.434251 0.348162 0.830788 + -0.203349 1.25836 -3.31571 0.268914 0.296926 0.916253 + -0.21125 1.33662 -3.33106 0.472873 0.215991 0.854248 + -0.253679 1.34056 -3.31048 0.454215 0.0415636 0.889922 + -0.301621 1.37405 -3.28068 0.184177 0.216919 0.958658 + -0.336355 1.37418 -3.28171 0.216154 0.405705 0.888077 + -0.177853 1.30966 -3.33677 0.046587 0.281948 0.958298 + -0.183432 1.32058 -3.33987 0.184337 0.273368 0.944081 + -0.186302 1.34668 -3.34808 0.163969 0.306378 0.937682 + -0.214493 1.40225 -3.35213 0.483943 0.417706 0.768974 + -0.258698 1.38294 -3.30408 0.492748 0.276341 0.825127 + -0.153965 1.31145 -3.33627 -0.0179711 0.23833 0.971018 + -0.170708 1.37498 -3.3541 -0.0879593 0.279533 0.956098 + -0.173578 1.40108 -3.36231 -0.00961449 0.393126 0.919434 + -0.189545 1.41231 -3.36916 0.0731095 0.393161 0.916558 + -0.224264 1.42835 -3.36575 0.0706971 0.86016 0.505101 + -0.146819 1.37676 -3.35359 0.0449542 0.416268 0.90813 + -0.187495 1.4252 -3.37349 0.259943 0.850018 0.458148 + -0.203462 1.43643 -3.38034 0.0906212 0.718171 0.689941 + -0.135165 1.40392 -3.37363 0.262243 0.744137 0.614401 + -0.184397 1.42224 -3.38296 0.271134 0.927153 0.258599 + -0.240976 1.42512 -3.39995 -0.0953237 0.995206 0.0218627 + -0.244074 1.42809 -3.39048 -0.282114 0.937571 -0.203402 + -0.203462 1.43643 -3.38034 0.273906 -0.186256 -0.943549 + -0.111356 1.41296 -3.42808 0.411951 0.891038 0.190648 + -0.15191 1.41924 -3.38996 0.294832 0.849487 0.437546 + -0.188757 1.44073 -3.42079 0.00273671 0.9709 0.239468 + -0.059856 1.40067 -3.4512 -0.0651882 0.889861 -0.451551 + -0.075108 1.39564 -3.46168 0.0534032 0.927157 -0.370848 + -0.094483 1.39846 -3.46257 0.263931 0.905424 -0.332488 + -0.108024 1.41251 -3.4473 0.594 0.795571 -0.119289 + -0.152937 1.43718 -3.44704 0.134764 0.951098 -0.277942 + -0.15627 1.43764 -3.42784 0.245363 0.960705 0.129784 + -0.199714 1.44152 -3.44096 -0.0491463 0.962796 -0.265722 + -0.190848 1.42427 -3.46188 0.0699882 0.706934 -0.703808 + -0.226414 1.42676 -3.46019 -0.169941 0.876752 -0.449919 + -0.251933 1.42591 -3.42012 -0.191869 0.97744 -0.0883005 + -0.169 1.42167 -3.46457 -0.0414682 0.663814 -0.746748 + -0.202867 1.37775 -3.4871 0.281507 0.355621 -0.891228 + -0.224757 1.36843 -3.50635 0.411895 0.33284 -0.848269 + -0.217548 1.4096 -3.48106 0.16487 0.63056 -0.758428 + -0.248204 1.41737 -3.46932 -0.190634 0.891346 -0.411292 + -0.135584 1.41214 -3.47267 0.214519 0.78425 -0.58218 + -0.151647 1.39662 -3.49018 -0.174491 0.673595 -0.718208 + -0.181019 1.37515 -3.48979 -0.284144 0.480028 -0.829961 + -0.186503 1.33698 -3.50528 -0.399625 0.319892 -0.859051 + -0.209365 1.31665 -3.50687 0.237464 0.274236 -0.931882 + -0.122043 1.39809 -3.48794 0.148184 0.822446 -0.549203 + -0.126074 1.37867 -3.50889 -0.012152 0.668185 -0.743896 + -0.153831 1.37137 -3.51385 -0.335538 0.546428 -0.767353 + -0.159315 1.33329 -3.52929 -0.386848 0.284674 -0.877103 + -0.099131 1.38335 -3.5078 0.0769065 0.841667 -0.534492 + -0.117655 1.38251 -3.50654 -0.114319 0.666873 -0.73635 + -0.08848 1.33753 -3.53403 0.096666 0.317675 -0.943259 + -0.128258 1.35342 -3.53255 -0.0913116 0.443083 -0.891818 + -0.135059 1.31346 -3.53994 -0.170567 0.144479 -0.974696 + -0.079756 1.38052 -3.5069 0.187132 0.841228 -0.507263 + -0.094743 1.36776 -3.5264 -0.316799 0.300163 -0.899745 + -0.080061 1.34137 -3.53168 0.0987366 0.286026 -0.953121 + -0.058754 1.33893 -3.52826 0.372046 0.284184 -0.883641 + -0.095281 1.29757 -3.54142 0.078685 0.123629 -0.989204 + -0.046942 1.38944 -3.47895 0.106689 0.861233 -0.496885 + -0.040622 1.37433 -3.49498 0.332874 0.638963 -0.693485 + -0.073436 1.36542 -3.52293 0.299095 0.53609 -0.789398 + -0.03169 1.39448 -3.46848 -0.0312237 0.779153 -0.626056 + -0.020389 1.38216 -3.47973 0.176764 0.613621 -0.769561 + -0.022016 1.35661 -3.49828 0.457628 0.376069 -0.805698 + -0.04225 1.34878 -3.51353 0.457271 0.395466 -0.796561 + -0.018368 1.40455 -3.46031 -0.0775444 0.795788 -0.60059 + -0.007067 1.39222 -3.47157 0.0127303 0.600312 -0.799664 + -0.007067 1.36636 -3.48576 0.180249 0.415998 -0.891322 + -0.013819 1.41047 -3.44996 -0.0705546 0.930499 -0.359435 + 0.013832 1.41055 -3.4499 0.05415 0.915858 -0.397834 + 0.007074 1.39222 -3.47157 -0.0157734 0.626372 -0.779365 + 0.01834 1.40455 -3.46031 -0.0100483 0.803799 -0.594816 + 0.031661 1.39457 -3.46843 0.0321566 0.7794 -0.625701 + 0.020396 1.38225 -3.47968 -0.176175 0.613781 -0.769568 + 0.007074 1.36644 -3.48571 -0.179221 0.416617 -0.891241 + 0.059827 1.40067 -3.4512 0.0313504 0.880414 -0.473169 + 0.046942 1.38944 -3.47895 -0.105918 0.860726 -0.497928 + 0.040618 1.37425 -3.49503 -0.335451 0.641835 -0.68958 + 0.022024 1.35669 -3.49822 -0.457355 0.376553 -0.805626 + 0.006906 1.32209 -3.4975 -0.282331 0.204947 -0.937169 + 0.075108 1.39564 -3.46168 -0.086145 0.896469 -0.434653 + 0.079756 1.38052 -3.5069 -0.187833 0.840961 -0.507448 + 0.073432 1.36533 -3.52298 -0.288449 0.539421 -0.791089 + 0.042246 1.34869 -3.51357 -0.496431 0.365892 -0.787197 + 0.094483 1.39846 -3.46257 -0.231166 0.863868 -0.447543 + 0.099131 1.38335 -3.5078 -0.0774568 0.841973 -0.53393 + 0.094713 1.36778 -3.52642 0.316134 0.300896 -0.899734 + 0.080031 1.34138 -3.53171 -0.0996003 0.274027 -0.956551 + 0.05875 1.33893 -3.52826 -0.37021 0.273795 -0.887683 + 0.122043 1.39809 -3.48794 -0.155638 0.822449 -0.547133 + 0.117625 1.38252 -3.50657 0.115323 0.666777 -0.736281 + 0.088466 1.33752 -3.53402 -0.0944428 0.320119 -0.942658 + 0.066479 1.28183 -3.53956 -0.298008 0.0248699 -0.954239 + 0.051653 1.3072 -3.5327 -0.435792 0.115722 -0.892577 + 0.151647 1.39662 -3.49018 0.176984 0.67318 -0.717987 + 0.12606 1.37867 -3.50889 0.0129282 0.667218 -0.744751 + 0.128244 1.35342 -3.53255 0.0910695 0.443035 -0.891867 + 0.135067 1.31345 -3.53993 0.159501 0.111153 -0.98092 + 0.095289 1.29747 -3.54145 -0.0440092 0.106649 -0.993322 + 0.153831 1.37137 -3.51385 0.335495 0.546419 -0.767378 + 0.159315 1.33329 -3.52929 0.386712 0.284775 -0.87713 + 0.158522 1.25435 -3.53517 0.258226 0.00560321 -0.966068 + 0.122837 1.23369 -3.54737 0.1603 -0.0281909 -0.986666 + 0.094027 1.21796 -3.54554 -0.197356 -0.128487 -0.971875 + 0.2026 1.15117 -3.50946 -0.0385232 -0.237621 -0.970594 + 0.17446 1.14901 -3.5117 0.261492 -0.223895 -0.938879 + 0.138775 1.12834 -3.52391 0.281318 -0.20583 -0.93728 + 0.101669 1.11634 -3.52693 -0.122127 -0.208053 -0.970463 + 0.049246 1.23504 -3.52671 -0.460089 -0.109814 -0.881056 + 0.237529 1.13524 -3.51266 -0.300422 -0.19243 -0.934193 + 0.199765 0.994883 -3.45615 -0.287079 -0.149053 -0.946239 + 0.171624 0.99271 -3.45839 0.4724 -0.128666 -0.871942 + 0.153737 0.971674 -3.47695 0.424746 -0.0277147 -0.904888 + 0.116631 0.959679 -3.47998 0.100339 -0.0814759 -0.991612 + 0.255729 1.10274 -3.51457 -0.0779485 -0.151425 -0.985391 + 0.224304 0.9899 -3.47912 -0.551881 -0.114408 -0.826038 + 0.234171 0.879942 -3.47827 -0.562222 0.116394 -0.818755 + 0.209632 0.884925 -3.4553 -0.123649 0.201072 -0.971741 + 0.188623 0.8582 -3.47441 0.319617 0.414404 -0.852123 + 0.242504 0.9574 -3.48103 -0.169874 -0.0526683 -0.984057 + 0.247755 0.882659 -3.48397 -0.282803 0.165282 -0.94483 + 0.262738 0.785681 -3.529 -0.288017 0.565391 -0.772903 + 0.241729 0.758958 -3.54812 -0.00934317 0.620757 -0.783948 + 0.170736 0.837166 -3.49298 0.137954 0.507563 -0.850499 + 0.159436 0.758378 -3.56511 0.111522 0.648325 -0.753152 + 0.116505 0.772062 -3.55781 0.0292675 0.639227 -0.768461 + 0.127805 0.850848 -3.48568 -0.00138549 0.334279 -0.942473 + 0.085191 0.749427 -3.57601 -0.010711 0.681014 -0.732192 + 0.078727 0.845574 -3.49134 0.111025 0.389887 -0.914145 + 0.067553 0.954492 -3.48559 -0.0841475 -0.0805331 -0.993194 + 0.022527 0.738598 -3.58645 -0.0021121 0.70788 -0.706329 + 0.022527 0.824989 -3.49509 -0.205911 0.446642 -0.870696 + 0.047413 0.822939 -3.50954 -0.213885 0.473741 -0.854297 + 0.035048 0.945606 -3.4772 -0.352676 0.0103365 -0.935688 + 0.056888 1.13333 -3.50816 -0.321801 -0.170372 -0.931352 + -0.037866 0.679168 -3.64332 -0.0184305 0.697304 -0.716538 + -0.022528 0.738598 -3.58645 0.0101019 0.698287 -0.715747 + -0.022528 0.824989 -3.49509 0.22356 0.465964 -0.856095 + -0.010165 0.947661 -3.46276 0.244268 0.00352737 -0.969701 + 0.010163 0.947656 -3.46275 -0.235267 0.0157254 -0.971803 + -0.100529 0.689996 -3.63287 -0.061335 0.66172 -0.747238 + -0.085191 0.749427 -3.57601 -0.00416693 0.672755 -0.739853 + -0.047413 0.822939 -3.50954 0.152378 0.551159 -0.820368 + -0.03505 0.945606 -3.4772 0.345375 -0.00167197 -0.938463 + -0.198824 0.638771 -3.65915 -0.209035 0.627992 -0.74962 + -0.177599 0.693464 -3.61488 -0.164666 0.632744 -0.756651 + -0.159444 0.758378 -3.56511 -0.108944 0.645719 -0.755763 + -0.116506 0.772062 -3.55781 -0.029263 0.639229 -0.768459 + -0.078728 0.845574 -3.49134 -0.110972 0.389815 -0.914182 + -0.283922 0.635585 -3.63123 -0.261182 0.578932 -0.772413 + -0.259892 0.694038 -3.59787 -0.188098 0.563649 -0.804313 + -0.241737 0.759039 -3.54806 -0.0548734 0.61744 -0.784702 + -0.295792 0.585203 -3.66637 -0.295008 0.573145 -0.76451 + -0.378347 0.579463 -3.63662 -0.327201 0.538748 -0.776331 + -0.366271 0.635173 -3.60391 -0.301963 0.546706 -0.78098 + -0.294472 0.538846 -3.69987 -0.298325 0.540013 -0.787012 + -0.377027 0.533192 -3.67008 -0.343154 0.53723 -0.770473 + -0.457412 0.524364 -3.63699 -0.420185 0.50786 -0.752012 + -0.459738 0.576753 -3.60313 -0.419189 0.501755 -0.756653 + -0.447662 0.632468 -3.57043 -0.403088 0.526571 -0.748494 + -0.303257 0.483193 -3.73308 -0.296881 0.543916 -0.784868 + -0.38935 0.471242 -3.70698 -0.348059 0.542941 -0.764245 + -0.469735 0.4625 -3.67384 -0.424179 0.519869 -0.741491 + -0.541235 0.456002 -3.63058 -0.514318 0.520291 -0.681743 + -0.535185 0.51466 -3.59158 -0.538157 0.473573 -0.69722 + -0.414155 0.406132 -3.74521 -0.373511 0.500378 -0.781097 + -0.494659 0.378376 -3.71793 -0.454684 0.466169 -0.758913 + -0.566159 0.371876 -3.67467 -0.519093 0.44633 -0.728925 + -0.511684 0.308967 -3.74531 -0.460029 0.306354 -0.833379 + -0.592165 0.301591 -3.69274 -0.579007 0.31238 -0.753107 + -0.633226 0.392851 -3.6094 -0.550613 0.490718 -0.675294 + -0.614285 0.445155 -3.57279 -0.535048 0.557665 -0.634612 + -0.608234 0.503811 -3.53379 -0.554614 0.460293 -0.693205 + -0.61191 0.245383 -3.69618 -0.617183 0.164426 -0.769447 + -0.68066 0.232892 -3.63234 -0.674761 0.159253 -0.72065 + -0.659232 0.322565 -3.62746 -0.629497 0.306615 -0.713947 + -0.724942 0.323717 -3.56626 -0.645886 0.269511 -0.71428 + -0.705186 0.397941 -3.55022 -0.566836 0.471824 -0.675336 + -0.636826 0.183152 -3.68219 -0.592698 -0.0935264 -0.799976 + -0.705576 0.170573 -3.61841 -0.679548 0.0578139 -0.731349 + -0.779496 0.166131 -3.55111 -0.676408 0.052661 -0.734642 + -0.74637 0.233952 -3.57118 -0.669501 0.156098 -0.726224 + -0.747388 0.126032 -3.58026 -0.631936 -0.219128 -0.743397 + -0.821308 0.121588 -3.51296 -0.685282 -0.159372 -0.710626 + -0.891356 0.117655 -3.44035 -0.715784 -0.185291 -0.673291 + -0.850268 0.164728 -3.48668 -0.701302 0.0115068 -0.712771 + -0.817142 0.232554 -3.50676 -0.680946 0.157225 -0.715257 + -0.763098 0.087575 -3.54565 -0.543683 -0.518915 -0.659648 + -0.834658 0.079343 -3.47739 -0.586614 -0.506409 -0.632008 + -0.904706 0.07541 -3.40478 -0.65785 -0.463285 -0.593802 + -0.966542 0.072591 -3.32869 -0.691116 -0.479752 -0.540552 + -0.957584 0.120966 -3.36748 -0.768471 -0.136347 -0.62519 + -0.82087 0.04374 -3.44972 -0.448737 -0.722323 -0.526198 + -0.887214 0.033712 -3.37595 -0.504798 -0.713993 -0.485173 + -0.94905 0.030974 -3.29981 -0.569094 -0.712661 -0.410178 + -0.798552 0.018302 -3.42467 -0.296489 -0.871084 -0.391543 + -0.864896 0.00827 -3.35089 -0.308312 -0.89423 -0.324494 + -0.925134 0.007858 -3.27797 -0.362021 -0.900442 -0.241133 + -1.0044 0.03507 -3.21691 -0.558394 -0.753938 -0.346083 + -0.835807 -0.002219 -3.32752 0.0706723 -0.997497 -0.00213926 + -0.896045 -0.00263 -3.25461 0.0113316 -0.996675 0.0806855 + -0.963489 0.009705 -3.17978 0.0460634 -0.990561 0.129104 + -0.980483 0.012045 -3.19503 -0.323737 -0.931545 -0.165586 + -0.804855 0.020423 -3.27734 0.400169 -0.864293 0.304734 + -0.863391 0.02385 -3.19867 0.341767 -0.865227 0.366849 + -0.930835 0.036187 -3.12384 0.332217 -0.895097 0.297376 + -1.02345 0.014294 -3.08632 0.11366 -0.991258 0.0669937 + -1.04045 0.016546 -3.10162 -0.330771 -0.929967 -0.160475 + -0.763432 0.084119 -3.20166 0.576011 -0.679436 0.454508 + -0.821968 0.087465 -3.12306 0.556768 -0.713211 0.425839 + -0.874487 0.089583 -3.03133 0.574691 -0.741456 0.346371 + -0.932695 0.086978 -2.94961 0.555391 -0.769562 0.315143 + -0.989043 0.03358 -3.04213 0.366423 -0.907486 0.205433 + -0.725157 0.217773 -3.10556 0.71214 -0.4788 0.513427 + -0.772757 0.219313 -3.03282 0.74329 -0.482304 0.463577 + -0.825276 0.221345 -2.94114 0.779225 -0.477597 0.405844 + -0.873382 0.196486 -2.86869 0.752954 -0.532971 0.386008 + -0.729778 0.44592 -2.91952 0.833864 -0.316914 0.451926 + -0.771455 0.415147 -2.84922 0.852014 -0.346097 0.392797 + -0.819561 0.390287 -2.77676 0.854515 -0.378972 0.355225 + -0.701812 0.617653 -2.86977 0.818919 -0.148005 0.554496 + -0.743489 0.586878 -2.79947 0.899891 -0.122892 0.418443 + -0.779279 0.535043 -2.72769 0.92705 -0.224895 0.300002 + -0.860866 0.33565 -2.72173 0.835946 -0.441921 0.325424 + -0.696197 0.756447 -2.86997 0.788908 0.0101232 0.614427 + -0.736259 0.710197 -2.81106 0.870703 -0.0053864 0.49178 + -0.772049 0.658362 -2.73928 0.950574 -0.0242424 0.309549 + -0.792939 0.560906 -2.64128 0.945914 -0.168161 0.277431 + -0.820584 0.480402 -2.67264 0.901959 -0.363881 0.23251 + -0.691375 0.908283 -2.88575 0.764759 0.0617762 0.641348 + -0.731438 0.862037 -2.82686 0.863204 0.0356039 0.503599 + -0.76395 0.810468 -2.75313 0.937546 0.0290762 0.346643 + -0.686176 1.06194 -2.9165 0.78134 0.0960812 0.616665 + -0.725744 1.0435 -2.85377 0.869827 0.0488439 0.490933 + -0.758256 0.991941 -2.78005 0.905073 0.0472874 0.422619 + -0.787588 0.970479 -2.71248 0.919307 0.063206 0.388433 + -0.78484 0.713096 -2.65508 0.956327 0.0252929 0.291203 + -0.647704 1.1838 -2.99096 0.730735 0.247443 0.636238 + -0.686414 1.1672 -2.92421 0.862902 0.0838233 0.498371 + -0.725982 1.14876 -2.86148 0.882645 -0.0251462 0.469367 + -0.746306 1.13431 -2.82284 0.889112 -0.0362587 0.456251 + -0.76236 1.12166 -2.79273 0.897618 -0.0208858 0.440279 + -0.619839 1.24072 -3.04455 0.693616 0.2983 0.655679 + -0.664021 1.23222 -2.99483 0.72792 0.289704 0.621453 + -0.692099 1.2342 -2.95767 0.857161 0.331456 0.394224 + -0.675783 1.18578 -2.9538 0.816407 0.320006 0.480704 + -0.708607 1.21854 -2.89153 0.884636 0.108438 0.453498 + -0.595678 1.25431 -3.07789 0.74964 0.353486 0.559542 + -0.635705 1.28287 -3.04436 0.731787 0.285136 0.619019 + -0.679887 1.27437 -2.99464 0.74163 0.19584 0.641586 + -0.70025 1.26598 -2.9665 0.839518 0.242642 0.486143 + -0.704011 1.26531 -2.95615 0.936856 0.249922 0.244623 + -0.695861 1.23354 -2.94732 0.935366 0.302221 0.18372 + -0.582981 1.25574 -3.09956 0.671599 0.364336 0.645146 + -0.597425 1.28722 -3.0997 0.742004 0.376349 0.55479 + -0.610123 1.2858 -3.07803 0.766642 0.342624 0.543017 + -0.646453 1.31519 -3.04893 0.709055 0.458261 0.535946 + -0.6901 1.32223 -2.99213 0.70561 0.434965 0.559392 + -0.550057 1.24921 -3.12147 0.486541 0.372525 0.790255 + -0.596822 1.29737 -3.10788 0.671906 0.327617 0.664235 + -0.620871 1.31811 -3.08259 0.754948 0.366346 0.543915 + -0.529577 1.30636 -3.14945 0.480931 0.214275 0.850171 + -0.571472 1.29953 -3.12542 0.496228 0.240126 0.834324 + -0.622424 1.35607 -3.10695 0.496206 0.448015 0.743681 + -0.620268 1.32826 -3.09078 0.698394 0.445526 0.560137 + -0.477071 1.2723 -3.17425 0.588087 0.245457 0.770652 + -0.484212 1.31017 -3.17625 0.574634 0.175209 0.799436 + -0.540517 1.34949 -3.15255 0.452004 0.340472 0.824482 + -0.597073 1.35823 -3.12449 0.481182 0.399079 0.780513 + -0.495152 1.35338 -3.17929 0.417314 0.402569 0.814732 + -0.570031 1.37209 -3.15169 0.326319 0.76413 0.556436 + -0.626587 1.38075 -3.12369 0.149002 0.981322 0.121681 + -0.644495 1.37625 -3.1081 -0.00598481 0.829881 0.557908 + -0.642339 1.34843 -3.09192 0.327896 0.663587 0.672411 + -0.452528 1.35984 -3.19848 0.447026 0.208104 0.869977 + -0.458403 1.38412 -3.21673 0.0612236 0.828206 0.557069 + -0.501026 1.37766 -3.19754 0.156714 0.805843 0.571014 + -0.535893 1.3848 -3.19771 0.279328 0.862153 0.422691 + -0.57182 1.37949 -3.16631 0.24394 0.854031 0.459483 + -0.437333 1.39596 -3.23444 -0.0313357 0.815458 0.577967 + -0.486669 1.39281 -3.26778 -0.00487984 0.951158 0.308667 + -0.521536 1.39995 -3.26795 0.105452 0.987283 0.118962 + -0.597879 1.41285 -3.21729 0.0989004 0.983156 0.153695 + -0.633806 1.40745 -3.18594 0.0527407 0.941863 0.331833 + -0.416597 1.42487 -3.26851 -0.130774 0.790754 0.598002 + -0.4656 1.40456 -3.28554 -0.464568 0.870663 0.161624 + -0.455866 1.41022 -3.31814 -0.231533 0.963696 0.132973 + -0.541909 1.39688 -3.30343 -0.104008 0.971629 -0.212412 + -0.403292 1.43617 -3.27808 0.126301 0.67881 0.723371 + -0.452295 1.41595 -3.29506 -0.375708 0.925981 -0.037452 + -0.383586 1.41509 -3.28317 0.59724 0.801426 -0.0319518 + -0.387157 1.40937 -3.30626 0.172799 0.967918 0.182413 + -0.403292 1.43617 -3.27808 0.162657 0.372724 -0.913575 + -0.329689 1.40261 -3.30316 0.051933 0.813752 0.578887 + -0.351495 1.41275 -3.32132 0.148803 0.913498 0.378656 + -0.418215 1.43963 -3.35968 -0.121709 0.945761 0.301203 + -0.294955 1.40256 -3.30208 0.0990731 0.800527 0.591051 + -0.291361 1.41354 -3.36028 0.0241639 0.962897 0.268787 + -0.313167 1.42367 -3.37844 0.166527 0.962278 0.215151 + -0.382552 1.44302 -3.37474 0.0783278 0.982132 0.17112 + -0.437666 1.43887 -3.38337 -0.365385 0.916094 -0.165124 + -0.268469 1.40904 -3.31769 0.178235 0.829284 0.529641 + -0.264876 1.42001 -3.37589 -0.255714 0.965837 0.0420664 + -0.316495 1.42576 -3.40805 0.129876 0.970776 -0.201809 + -0.273723 1.41652 -3.42925 -0.187884 0.911902 -0.364877 + -0.29845 1.41438 -3.42715 -0.0248339 0.910229 -0.41336 + -0.364593 1.42073 -3.44055 0.0226781 0.850136 -0.526074 + -0.38588 1.4451 -3.40435 -0.101595 0.975382 -0.195727 + -0.431022 1.42252 -3.41704 -0.385412 0.76951 -0.509227 + -0.289247 1.40217 -3.48199 -0.142651 0.89036 -0.432332 + -0.313974 1.40012 -3.47984 -0.0724862 0.889387 -0.451372 + -0.346548 1.40927 -3.45969 -0.0084214 0.878237 -0.478152 + -0.389518 1.40048 -3.46206 -0.273068 0.69308 -0.667139 + -0.410805 1.42493 -3.42582 -0.274452 0.761445 -0.587262 + -0.247715 1.39909 -3.49465 0.0476116 0.667443 -0.743138 + -0.288758 1.38388 -3.50732 -0.0524574 0.654239 -0.754467 + -0.330949 1.38218 -3.50197 -0.181435 0.671538 -0.718414 + -0.363523 1.39142 -3.48178 -0.246849 0.696206 -0.674064 + -0.254924 1.35791 -3.51993 0.146615 0.337262 -0.929924 + -0.294682 1.3632 -3.5197 -0.046744 0.372108 -0.927012 + -0.336873 1.3615 -3.51435 -0.220808 0.39067 -0.893656 + -0.375563 1.35026 -3.50649 -0.380891 0.350707 -0.855527 + -0.401558 1.3594 -3.48672 -0.370166 0.45785 -0.808301 + -0.231255 1.30733 -3.52613 0.326247 0.168402 -0.930163 + -0.265471 1.30618 -3.52993 0.0573695 0.104924 -0.992824 + -0.305229 1.31147 -3.52969 -0.0866864 0.114666 -0.989615 + -0.345791 1.30755 -3.52291 -0.20309 0.107999 -0.973186 + -0.384481 1.29631 -3.51505 -0.291074 0.0906114 -0.9524 + -0.205632 1.25386 -3.52612 -0.00186938 0.03479 -0.999393 + -0.240561 1.23784 -3.52937 0.121702 -0.0731405 -0.989868 + -0.274776 1.23669 -3.53318 0.0149927 -0.0686066 -0.997531 + -0.314001 1.23121 -3.52948 -0.11862 -0.0827736 -0.989483 + -0.354563 1.22729 -3.52269 -0.238059 -0.0971919 -0.966376 + -0.18277 1.27427 -3.52447 -0.27771 0.213127 -0.936725 + -0.158514 1.25436 -3.53517 -0.294021 -0.0103963 -0.955742 + -0.202594 1.15117 -3.50946 0.0477741 -0.219127 -0.974526 + -0.237523 1.13524 -3.51266 0.155527 -0.159038 -0.974945 + -0.271166 1.09805 -3.51044 -0.205029 -0.157363 -0.966023 + -0.122829 1.2337 -3.54739 -0.151469 -0.0569415 -0.986821 + -0.138765 1.12834 -3.52391 -0.303527 -0.224051 -0.926106 + -0.17445 1.14901 -3.5117 -0.255493 -0.237549 -0.937173 + -0.199758 0.994971 -3.4561 0.305179 -0.173767 -0.936307 + -0.224297 0.9899 -3.47912 0.536828 -0.146619 -0.830854 + -0.066486 1.28184 -3.53957 0.297325 0.0274514 -0.954382 + -0.094034 1.21797 -3.54555 0.197254 -0.128294 -0.971922 + -0.10167 1.11635 -3.52693 0.159304 -0.252449 -0.954406 + -0.153727 0.971674 -3.47695 -0.428914 -0.00879569 -0.903303 + -0.171614 0.99271 -3.45839 -0.439955 -0.101958 -0.892213 + -0.051677 1.3072 -3.53271 0.431915 0.117217 -0.894265 + -0.049252 1.23504 -3.52672 0.467704 -0.10956 -0.877069 + -0.056889 1.13333 -3.50816 0.306545 -0.195787 -0.931503 + -0.116632 0.959679 -3.47998 -0.0723335 -0.0508205 -0.996085 + -0.170744 0.837161 -3.49297 -0.0807517 0.532283 -0.842706 + -0.035173 1.31697 -3.51802 0.570229 0.154511 -0.806824 + -0.034443 1.26032 -3.51991 0.518682 -0.0327048 -0.854341 + -0.024385 1.12445 -3.49976 0.0705888 -0.125775 -0.989544 + -0.067554 0.954492 -3.48559 0.0622058 -0.0461901 -0.996994 + -0.021855 1.31235 -3.51002 0.535864 0.139557 -0.83269 + -0.021125 1.2557 -3.5119 0.249718 -0.0230944 -0.968043 + -0.010165 1.11387 -3.50005 -0.035103 -0.135426 -0.990165 + -0.006905 1.3221 -3.49751 0.288907 0.219125 -0.931943 + -0.006905 1.24513 -3.51219 -0.00634015 0.00313263 -0.999975 + 0.006906 1.24504 -3.51223 0.0128487 0.0201976 -0.999713 + 0.010163 1.11387 -3.50005 0.0763811 -0.167599 -0.982892 + 0.021126 1.2557 -3.51189 -0.318241 0.0319158 -0.947472 + 0.024383 1.12445 -3.49976 -0.0754617 -0.140816 -0.987156 + 0.021855 1.31234 -3.51001 -0.570926 0.103883 -0.814403 + 0.034419 1.26032 -3.5199 -0.517014 -0.0240446 -0.855639 + 0.035149 1.31696 -3.51801 -0.570615 0.154536 -0.806546 + -0.697976 1.23713 -2.92113 0.938193 0.224392 0.263518 + -0.719127 1.26344 -2.8867 0.833935 0.245431 0.494284 + -0.723957 1.18398 -2.85369 0.91868 -0.0162691 0.394666 + -0.744281 1.16962 -2.81501 0.892174 -0.0710925 0.446063 + -0.710942 1.28047 -2.91621 0.941252 0.24797 0.229252 + -0.722284 1.30336 -2.90405 0.83628 0.292019 0.46407 + -0.740454 1.32251 -2.89142 0.720709 0.416755 0.55398 + -0.734477 1.22897 -2.84881 0.874796 0.188329 0.446391 + -0.750635 1.19613 -2.80312 0.875663 0.0328588 0.481803 + -0.708827 1.27688 -2.94239 0.967793 0.222699 0.117393 + -0.723505 1.34021 -2.93208 0.833721 0.548095 -0.0670915 + -0.734848 1.36318 -2.91986 0.56904 0.816208 -0.0999884 + -0.743611 1.36243 -2.90876 0.304418 0.772023 0.557952 + -0.710462 1.31384 -2.964 0.897196 0.00296292 0.441624 + -0.715278 1.32541 -2.95025 0.874164 0.40786 0.263606 + -0.73922 1.34428 -2.94413 0.14817 0.94997 -0.274959 + -0.747447 1.35908 -2.92595 -0.241704 0.710506 -0.660878 + -0.753688 1.36208 -2.91735 -0.384206 0.846995 -0.367404 + -0.752272 1.34314 -2.95816 0.0644246 0.97649 0.205708 + -0.800368 1.32232 -2.8981 -0.339659 0.877823 -0.337725 + -0.806609 1.32532 -2.88949 -0.660117 0.706291 0.255732 + -0.762452 1.36133 -2.90626 -0.346835 0.906606 0.240358 + -0.730388 1.35412 -2.99916 0.288946 0.894964 0.339927 + -0.799767 1.35538 -2.98155 -0.107673 0.953461 0.281634 + -0.81342 1.32127 -2.91208 -0.219553 0.93154 0.289879 + -0.806973 1.30427 -2.86942 -0.426794 0.67748 0.599056 + -0.762816 1.34027 -2.88619 0.14582 0.670579 0.727365 + -0.700092 1.3477 -3.01025 0.447027 0.793116 0.413684 + -0.725677 1.3651 -3.07618 0.109228 0.985576 0.129264 + -0.777884 1.36636 -3.02257 -0.0277869 0.987041 0.158041 + -0.846376 1.34513 -3.0218 -0.451253 0.88407 -0.12162 + -0.836724 1.34868 -2.98676 -0.296305 0.940721 0.165069 + -0.656446 1.34066 -3.06706 0.487509 0.768067 0.41522 + -0.695381 1.35868 -3.08727 0.301383 0.889776 0.342734 + -0.665156 1.37845 -3.1423 0.0397632 0.884147 0.465514 + -0.748238 1.36493 -3.10089 -0.118587 0.99198 -0.0437333 + -0.800445 1.36619 -3.04728 -0.235835 0.97156 0.0212905 + -0.681275 1.36646 -3.11215 0.446156 0.694746 0.564156 + -0.663367 1.37105 -3.12769 -0.0320323 0.975216 0.218923 + -0.66935 1.40969 -3.19342 -0.176412 0.978892 0.103199 + -0.7007 1.3806 -3.14983 -0.21487 0.863985 0.45537 + -0.750069 1.36172 -3.13333 -0.201581 0.979425 0.00952228 + -0.820562 1.35346 -3.09763 -0.330672 0.939886 -0.0852659 + -0.661605 1.4 -3.24124 -0.310781 0.908952 -0.277889 + -0.714155 1.38846 -3.19644 -0.406761 0.91352 0.00523802 + -0.743885 1.37593 -3.19654 -0.373163 0.926866 -0.040853 + -0.73043 1.36816 -3.14988 -0.344936 0.934734 0.0853891 + -0.618252 1.40969 -3.25282 -0.145747 0.969107 -0.198969 + -0.66065 1.36268 -3.328 -0.51932 0.766937 -0.376981 + -0.695535 1.34931 -3.28524 -0.665785 0.556929 -0.496548 + -0.70641 1.37868 -3.24431 -0.449078 0.762527 -0.465705 + -0.617297 1.37237 -3.33958 -0.229767 0.915119 -0.331306 + -0.601612 1.36411 -3.37827 -0.321734 0.901716 -0.288782 + -0.619326 1.34505 -3.40407 -0.490089 0.726922 -0.481037 + -0.657254 1.34065 -3.37004 -0.592836 0.667174 -0.451025 + -0.526224 1.38862 -3.34212 -0.238401 0.955782 -0.172177 + -0.555248 1.37678 -3.40721 -0.334303 0.913785 -0.230734 + -0.572962 1.35764 -3.43306 -0.415488 0.680636 -0.603411 + -0.63008 1.32452 -3.4159 -0.607219 0.215558 -0.764735 + -0.668008 1.3202 -3.38182 -0.737567 0.274932 -0.616772 + -0.475318 1.40955 -3.34178 -0.449008 0.8872 0.106145 + -0.497237 1.3962 -3.34946 -0.358989 0.89945 -0.249232 + -0.526261 1.38436 -3.41455 -0.235587 0.923559 -0.302551 + -0.528327 1.36562 -3.44609 -0.187363 0.686163 -0.702905 + -0.569567 1.32693 -3.45287 -0.422742 0.138622 -0.895585 + -0.463834 1.40797 -3.39984 -0.534547 0.785011 -0.313077 + -0.485753 1.39471 -3.40748 -0.31293 0.898748 -0.307128 + -0.487819 1.37588 -3.43906 -0.155624 0.718995 -0.677368 + -0.524932 1.33491 -3.4659 -0.141916 0.236938 -0.961104 + -0.457189 1.39153 -3.43356 -0.280674 0.68233 -0.675017 + -0.490004 1.34003 -3.46416 -0.0970424 0.330048 -0.938963 + -0.48183 1.26982 -3.45996 -0.27983 0.00130047 -0.960049 + -0.516758 1.26462 -3.46175 -0.229068 -0.185606 -0.955551 + -0.570524 1.25675 -3.43512 -0.435926 -0.298686 -0.848973 + -0.459374 1.35568 -3.45866 -0.287349 0.491665 -0.822007 + -0.459392 1.30386 -3.48052 -0.447396 0.0878286 -0.890013 + -0.462321 1.20627 -3.47089 -0.551825 -0.213002 -0.8063 + -0.440392 1.36678 -3.4643 -0.456044 0.517094 -0.724319 + -0.44041 1.31497 -3.48615 -0.461842 0.199007 -0.864348 + -0.439884 1.24031 -3.49145 -0.443041 -0.115054 -0.889088 + -0.451774 1.11419 -3.4558 -0.631497 -0.21112 -0.746083 + -0.500992 1.14196 -3.4007 -0.551265 -0.324636 -0.768582 + -0.420175 1.36919 -3.47308 -0.368042 0.526619 -0.766301 + -0.428884 1.32362 -3.49154 -0.495725 0.268344 -0.825983 + -0.428357 1.24896 -3.49682 -0.418738 -0.0476719 -0.906855 + -0.410267 1.31374 -3.50523 -0.347302 0.223187 -0.910807 + -0.402571 1.23154 -3.50665 -0.378505 -0.11856 -0.917975 + -0.365196 1.11911 -3.49652 -0.303239 -0.238381 -0.922616 + -0.413205 1.12335 -3.48047 -0.415682 -0.21607 -0.883472 + -0.453942 0.960764 -3.40646 -0.344691 0.00182879 -0.938714 + -0.490445 1.04989 -3.38562 -0.596686 -0.127539 -0.792275 + -0.328109 1.12278 -3.50867 -0.162214 -0.24417 -0.956069 + -0.377773 0.969135 -3.44696 -0.338157 -0.164971 -0.926517 + -0.415372 0.969923 -3.43112 -0.444899 -0.164805 -0.880286 + -0.288884 1.12826 -3.51238 -0.135813 -0.201475 -0.970032 + -0.340686 0.972809 -3.45912 -0.334685 -0.119372 -0.934738 + -0.388887 0.865204 -3.43674 -0.435817 0.248918 -0.86493 + -0.426486 0.865992 -3.42091 -0.311655 0.264027 -0.912776 + -0.321534 0.967345 -3.46626 -0.274533 -0.103264 -0.956017 + -0.341429 0.834182 -3.47141 -0.223318 0.416186 -0.88143 + -0.360581 0.839731 -3.46422 -0.345501 0.373164 -0.861033 + -0.429634 0.78645 -3.47633 -0.288984 0.544585 -0.787347 + -0.303815 0.937131 -3.46432 -0.207943 -0.0169981 -0.977993 + -0.308784 0.856679 -3.46998 -0.308517 0.272904 -0.91123 + -0.32412 0.755671 -3.53462 -0.325248 0.548037 -0.770629 + -0.401328 0.760889 -3.50386 -0.310948 0.529622 -0.789184 + -0.452223 0.777477 -3.47419 -0.383998 0.440329 -0.811576 + -0.27389 0.947205 -3.48017 -0.34731 -0.0545515 -0.936162 + -0.278858 0.866753 -3.48582 -0.432233 0.310528 -0.846609 + -0.291475 0.778083 -3.53324 -0.519863 0.734893 -0.435517 + -0.276334 0.788484 -3.53466 -0.0196673 0.522402 -0.852472 + -0.342242 0.693626 -3.57056 -0.287546 0.537936 -0.792428 + -0.255729 1.10274 -3.51457 0.00763824 -0.0249272 -0.99966 + -0.258453 0.951896 -3.4843 -0.000998641 -0.0796473 -0.996822 + -0.263717 0.877155 -3.48724 -0.0774602 0.265318 -0.961044 + -0.242504 0.9574 -3.48103 0.170447 -0.0531088 -0.983935 + -0.247767 0.882745 -3.48392 0.282547 0.164616 -0.945023 + -0.234171 0.879942 -3.47827 0.561333 0.116954 -0.819285 + -0.262738 0.785681 -3.529 0.260835 0.509604 -0.81992 + -0.209632 0.884925 -3.4553 0.123735 0.201055 -0.971734 + -0.188632 0.858195 -3.4744 -0.3209 0.421017 -0.848391 + -0.127806 0.850848 -3.48568 0.0012032 0.334229 -0.942491 + -0.419449 0.698937 -3.53976 -0.361202 0.517912 -0.775435 + -0.485231 0.752929 -3.46748 -0.501751 0.414547 -0.759208 + -0.526323 0.622523 -3.52641 -0.529495 0.513142 -0.675514 + -0.498111 0.688905 -3.49578 -0.531749 0.480195 -0.697607 + -0.537511 0.56696 -3.55777 -0.542696 0.466241 -0.698642 + -0.608552 0.602889 -3.4668 -0.526246 0.514464 -0.677046 + -0.57491 0.667283 -3.44113 -0.5409 0.481648 -0.689523 + -0.56203 0.731222 -3.41288 -0.536445 0.315892 -0.782585 + -0.619739 0.547326 -3.49816 -0.532272 0.470982 -0.703464 + -0.700775 0.548705 -3.44335 -0.414279 0.487641 -0.768491 + -0.685445 0.59546 -3.42053 -0.393888 0.506739 -0.766856 + -0.651803 0.659947 -3.39483 -0.426033 0.449402 -0.785197 + -0.626387 0.724717 -3.37901 -0.44313 0.29615 -0.846127 + -0.68927 0.50519 -3.47898 -0.458667 0.470756 -0.753667 + -0.763342 0.514662 -3.43259 -0.498172 0.412364 -0.762746 + -0.784905 0.576636 -3.39353 -0.510376 0.394981 -0.763876 + -0.769575 0.623479 -3.37066 -0.42582 0.615554 -0.663152 + -0.686245 0.450249 -3.51362 -0.488393 0.515967 -0.70374 + -0.760317 0.459718 -3.46722 -0.509769 0.409101 -0.756817 + -0.826931 0.46533 -3.40914 -0.606798 0.386306 -0.694668 + -0.817946 0.523864 -3.37972 -0.627834 0.33238 -0.703809 + -0.769751 0.39896 -3.49018 -0.594744 0.365778 -0.715882 + -0.836365 0.404575 -3.43211 -0.636286 0.305727 -0.708288 + -0.899257 0.399787 -3.37301 -0.668785 0.284345 -0.686931 + -0.885243 0.483021 -3.34798 -0.627994 0.376449 -0.681109 + -0.876258 0.541468 -3.31861 -0.653415 0.557851 -0.511715 + -0.789506 0.324651 -3.50627 -0.662559 0.263873 -0.70099 + -0.85367 0.326434 -3.44337 -0.675102 0.23173 -0.700385 + -0.916562 0.321651 -3.38428 -0.689992 0.189181 -0.698657 + -0.980646 0.325053 -3.31757 -0.699639 0.188527 -0.689175 + -0.957952 0.406999 -3.31211 -0.677412 0.277269 -0.681347 + -0.881306 0.234342 -3.44386 -0.710566 0.136038 -0.690355 + -0.944432 0.24971 -3.37027 -0.72634 0.120221 -0.67674 + -1.00852 0.253025 -3.30362 -0.721009 0.0577907 -0.690512 + -0.916497 0.168037 -3.41381 -0.744195 0.042118 -0.666633 + -0.979623 0.183405 -3.34023 -0.761718 0.0222245 -0.647528 + -1.04184 0.18854 -3.26613 -0.74849 -0.043733 -0.661703 + -1.07433 0.25742 -3.23383 -0.72919 0.0423298 -0.683 + -1.0167 0.11971 -3.28931 -0.771749 -0.198337 -0.604207 + -1.07892 0.124845 -3.2152 -0.749588 -0.288555 -0.595697 + -1.14271 0.132217 -3.13657 -0.759696 -0.318452 -0.566966 + -1.10765 0.192935 -3.19634 -0.761872 -0.0869551 -0.641865 + -1.02566 0.071333 -3.25052 -0.707459 -0.51346 -0.485655 + -1.08511 0.074678 -3.15911 -0.663352 -0.609216 -0.434534 + -1.14891 0.082051 -3.08048 -0.646054 -0.652184 -0.396573 + -1.20362 0.082894 -2.98534 -0.615211 -0.704137 -0.354551 + -1.20577 0.134949 -3.0531 -0.808709 -0.308618 -0.500744 + -1.06385 0.038414 -3.1255 -0.583036 -0.756388 -0.296557 + -1.11726 0.04216 -3.01339 -0.5059 -0.822782 -0.259027 + -1.17198 0.043004 -2.91825 -0.455321 -0.845817 -0.277984 + -1.09386 0.020379 -2.98946 -0.5307 -0.808432 -0.25455 + -1.14672 0.019074 -2.8854 -0.487059 -0.830987 -0.268763 + -1.21938 0.0345 -2.82152 -0.489515 -0.830114 -0.266994 + -1.26054 0.08085 -2.8788 -0.659247 -0.674555 -0.33222 + -1.2627 0.132817 -2.94661 -0.781702 -0.435847 -0.446071 + -1.08255 0.010615 -2.98355 -0.120284 -0.990917 -0.0601254 + -1.13542 0.009312 -2.87949 -0.137101 -0.988634 -0.0616938 + -1.18458 0.012616 -2.77921 0.214938 -0.971133 0.103456 + -1.19413 0.010571 -2.78867 -0.162578 -0.980218 -0.112874 + -1.04814 0.029898 -2.93935 0.37529 -0.911531 0.168135 + -1.10234 0.025305 -2.8486 0.341399 -0.922831 0.178407 + -1.15151 0.028616 -2.74833 0.34072 -0.918739 0.199571 + -1.23162 0.013941 -2.67851 0.243915 -0.95739 0.154625 + -1.24117 0.011804 -2.68801 -0.19652 -0.978881 -0.0563109 + -0.989415 0.068168 -2.87763 0.550681 -0.795727 0.252129 + -1.04361 0.063489 -2.78693 0.509476 -0.811212 0.287 + -1.09489 0.063421 -2.70421 0.499826 -0.813227 0.298052 + -1.14295 0.067705 -2.61003 0.499514 -0.812636 0.300181 + -1.19957 0.032899 -2.65415 0.371172 -0.901168 0.223891 + -0.930102 0.177676 -2.79671 0.731444 -0.573901 0.368276 + -0.980336 0.150298 -2.72969 0.700095 -0.612051 0.367777 + -1.03161 0.150143 -2.64702 0.672089 -0.633023 0.384159 + -1.08132 0.139613 -2.57138 0.664147 -0.647134 0.374336 + -0.9111 0.308272 -2.65471 0.77121 -0.526868 0.357275 + -0.963799 0.270777 -2.59536 0.745057 -0.560169 0.36208 + -1.01351 0.260159 -2.51977 0.696839 -0.611076 0.375501 + -0.858011 0.415583 -2.60577 0.85481 -0.461343 0.23762 + -0.910711 0.378083 -2.54642 0.76891 -0.587098 0.253167 + -0.952577 0.345927 -2.47973 0.71597 -0.65084 0.252577 + -1.06529 0.244662 -2.44953 0.694772 -0.608019 0.384192 + -0.830366 0.496 -2.57446 0.92631 -0.230387 0.298113 + -0.862898 0.442151 -2.51599 0.873814 -0.374449 0.31022 + -0.904765 0.409989 -2.44929 0.864552 -0.436537 0.248969 + -0.931244 0.390993 -2.37538 0.785399 -0.527753 0.323458 + -1.00436 0.330429 -2.40948 0.608251 -0.720988 0.331974 + -0.810958 0.671494 -2.58463 0.899464 0.0199178 0.436541 + -0.84349 0.617564 -2.52622 0.915709 -0.0203555 0.401326 + -0.868595 0.581615 -2.45815 0.940753 -0.0604942 0.333654 + -0.813706 0.928877 -2.64202 0.925978 0.0806582 0.368861 + -0.837125 0.904849 -2.57321 0.928137 0.0676635 0.366038 + -0.862229 0.8689 -2.50514 0.946262 0.0429775 0.320532 + -0.881028 0.844101 -2.43539 0.957894 0.0304208 0.285505 + -0.895074 0.562532 -2.3843 0.948378 -0.0950314 0.30257 + -0.791692 1.10011 -2.72521 0.906639 0.0671882 0.416523 + -0.80848 1.09317 -2.68379 0.933675 0.0740411 0.350385 + -0.819086 1.07003 -2.65352 0.941812 0.0150642 0.335802 + -0.842504 1.04609 -2.58464 0.909114 0.0981918 0.404809 + -0.863389 1.02916 -2.52893 0.915619 0.173593 0.36264 + -0.776795 1.14418 -2.75435 0.878355 0.0212247 0.477538 + -0.798085 1.14211 -2.72175 0.869721 0.108442 0.481483 + -0.814873 1.13508 -2.68038 0.920951 0.169147 0.351054 + -0.82413 1.10525 -2.63251 0.941899 0.0956513 0.321988 + -0.834735 1.08211 -2.60224 0.910544 0.00363815 0.413396 + -0.76074 1.15692 -2.78442 0.883719 -0.0639152 0.463633 + -0.788046 1.17924 -2.74286 0.817161 0.141228 0.55884 + -0.809336 1.17707 -2.71031 0.852518 0.198846 0.483398 + -0.824851 1.16142 -2.6706 0.891979 0.243592 0.380837 + -0.767094 1.18343 -2.77253 0.833324 0.082408 0.546607 + -0.802728 1.21624 -2.73615 0.70089 0.437004 0.56372 + -0.819528 1.20909 -2.70976 0.66716 0.513197 0.539931 + -0.835043 1.19344 -2.67006 0.747953 0.495711 0.441404 + -0.781776 1.22044 -2.76582 0.704393 0.400478 0.586044 + -0.812288 1.24475 -2.75953 0.424592 0.774234 0.469343 + -0.829088 1.2376 -2.73315 0.362487 0.775994 0.516175 + -0.878192 1.2283 -2.69584 0.188865 0.89445 0.405327 + -0.862039 1.21597 -2.67048 0.353578 0.860882 0.365876 + -0.750632 1.22266 -2.79948 0.803947 0.203722 0.558718 + -0.765252 1.25011 -2.81322 0.381514 0.700577 0.603025 + -0.796396 1.24789 -2.77957 0.4494 0.75685 0.474572 + -0.831281 1.27798 -2.82269 0.235721 0.879753 0.412881 + -0.740139 1.2274 -2.83489 0.949084 0.061087 0.309042 + -0.740136 1.25394 -2.83125 0.856419 0.333671 0.393968 + -0.756836 1.27327 -2.83993 0.164245 0.643231 0.747848 + -0.815389 1.28112 -2.84272 0.244358 0.818869 0.519368 + -0.746116 1.32094 -2.8775 0.628467 0.519046 0.579328 + -0.858062 1.28346 -2.82399 0.122449 0.904965 0.407486 + 1.45261 0.472207 -2.72205 0.846829 0.216699 -0.485719 + 1.47845 0.415515 -2.70086 0.8709 0.0420003 -0.489662 + 1.53616 0.331475 -2.5571 0.877718 -0.231189 -0.419718 + 1.49924 0.468028 -2.63601 0.861062 0.164256 -0.481241 + 1.52509 0.411336 -2.61482 0.889471 -0.00556116 -0.456957 + 1.57127 0.306457 -2.47256 0.896678 -0.249413 -0.365734 + 1.57454 0.233221 -2.37131 0.898987 -0.317792 -0.301381 + 1.54396 0.462983 -2.55687 0.903801 0.104927 -0.41489 + 1.56019 0.386316 -2.53028 0.914206 -0.0691379 -0.399309 + 1.60575 0.310399 -2.37859 0.922365 -0.252243 -0.292603 + 1.60902 0.237071 -2.27738 0.913262 -0.262684 -0.311367 + 1.63386 0.173251 -2.16504 0.893975 -0.285388 -0.345489 + 1.52708 0.537637 -2.57338 0.871701 0.00847439 -0.489964 + 1.5792 0.459677 -2.47515 0.908337 0.0209943 -0.417711 + 1.59543 0.383098 -2.44851 0.924195 -0.103934 -0.367507 + 1.63363 0.327312 -2.28708 0.923524 -0.232254 -0.305224 + 1.56851 0.550967 -2.50587 0.881095 -0.0502244 -0.470264 + 1.61732 0.461668 -2.39239 0.931579 -0.0370847 -0.361642 + 1.62331 0.400016 -2.35701 0.945922 -0.114288 -0.303595 + 1.66959 0.336595 -2.19856 0.89974 -0.255241 -0.354006 + 1.64677 0.245073 -2.17824 0.90529 -0.260687 -0.335399 + 1.60662 0.552958 -2.42312 0.921648 -0.0287569 -0.386961 + 1.64523 0.478729 -2.32075 0.947218 -0.0449714 -0.317419 + 1.65123 0.417072 -2.28535 0.927974 -0.115325 -0.35435 + 1.6967 0.352746 -2.14414 0.880801 -0.27371 -0.386359 + 1.68272 0.254356 -2.08972 0.891986 -0.248242 -0.377805 + 1.62548 0.694368 -2.38345 0.946686 0.0697107 -0.314524 + 1.63512 0.575662 -2.34904 0.946435 0.00129848 -0.322891 + 1.66055 0.507282 -2.271 0.942295 -0.00223324 -0.334775 + 1.67833 0.43314 -2.23098 0.918481 -0.0835185 -0.386545 + 1.60796 0.770499 -2.39911 0.885756 0.282469 -0.368303 + 1.64705 0.719534 -2.29283 0.958266 0.100971 -0.267453 + 1.65044 0.604129 -2.29935 0.953504 0.0396657 -0.298758 + 1.68726 0.517667 -2.19919 0.943339 0.0539296 -0.327419 + 1.62954 0.79567 -2.3085 0.921323 0.258183 -0.290698 + 1.66896 0.729781 -2.21098 0.966131 0.108195 -0.234274 + 1.67234 0.614464 -2.21745 0.957262 0.0796398 -0.278042 + 1.71697 0.522975 -2.10938 0.944673 0.0817996 -0.317651 + 1.70504 0.443523 -2.15917 0.939808 0.00288297 -0.34169 + 1.62358 0.866281 -2.2448 0.869465 0.372424 -0.324547 + 1.65077 0.820142 -2.21909 0.931695 0.251491 -0.262099 + 1.68803 0.731209 -2.11905 0.95566 0.14238 -0.257763 + 1.70205 0.619774 -2.12764 0.945033 0.117978 -0.304949 + 1.59304 0.919411 -2.25863 0.775834 0.500474 -0.384196 + 1.63942 0.904651 -2.16327 0.895177 0.344165 -0.283212 + 1.66984 0.821567 -2.12716 0.949787 0.213068 -0.229142 + 1.71475 0.731724 -2.02935 0.947246 0.171256 -0.270919 + 1.55387 1.00544 -2.20244 0.617275 0.669127 -0.413812 + 1.60888 0.957783 -2.17709 0.788335 0.493296 -0.367678 + 1.65644 0.92519 -2.07784 0.918725 0.29385 -0.263812 + 1.68686 0.842111 -2.04174 0.940862 0.22969 -0.249038 + 1.4908 1.0756 -2.14036 0.26001 0.889867 -0.374875 + 1.54839 1.05144 -2.14471 0.489667 0.728006 -0.479827 + 1.6034 1.00377 -2.11935 0.690615 0.596978 -0.408249 + 1.62395 1.00397 -2.08508 0.80265 0.47478 -0.361021 + 1.6628 0.974096 -1.99975 0.912035 0.303283 -0.276063 + 1.39932 1.0879 -2.16447 0.132861 0.961096 -0.242161 + 1.43855 1.1159 -2.01876 -0.0386831 0.95426 -0.296464 + 1.51379 1.12676 -2.02398 0.0638906 0.914765 -0.398903 + 1.57138 1.1026 -2.02832 0.518408 0.729382 -0.44638 + 1.59193 1.10279 -1.99405 0.673292 0.595965 -0.437611 + 1.34634 1.0895 -2.16103 0.0369523 0.987302 -0.154498 + 1.46346 1.16028 -1.89442 -0.23982 0.942984 -0.230797 + 0.988349 1.08892 -1.69963 -0.36581 0.683973 0.631161 + 1.09227 1.08996 -1.73342 0.261129 0.915849 0.305012 + 1.11248 1.07053 -1.70838 0.166592 0.90663 0.387645 + 1.09541 1.02064 -1.61357 -0.023803 0.962626 0.269788 + 1.15779 1.05545 -1.67285 -0.195693 0.924334 0.327584 + 1.09292 1.01632 -1.59089 -0.354268 0.925022 0.137218 + 1.1173 1.02629 -1.55774 -0.499264 0.859587 0.10884 + -2.0866 1.79868 -0.385969 -0.450143 0.868692 -0.206751 + -2.06612 1.79246 -0.363198 0.317015 0.945894 0.0691808 + -2.05691 1.78848 -0.509912 0.297877 0.954577 -0.00716328 + -2.08681 1.79252 -0.279496 0.39676 0.917871 0.00967817 + -2.03495 1.76178 -0.21826 0.450823 0.892131 -0.029331 + -2.01642 1.76019 -0.274707 0.646245 0.744378 0.168134 + -2.04759 1.79087 -0.419645 0.249125 0.966647 0.0594145 + -2.05691 1.78848 -0.509912 0.00397707 0.999632 -0.0268333 + -2.10728 1.79874 -0.302267 -0.224544 0.960517 -0.164277 + -2.13006 1.81445 -0.230689 -0.110625 0.941329 -0.318846 + -2.10924 1.80934 -0.206632 0.484039 0.86867 -0.105443 + -2.05739 1.77861 -0.145405 0.14963 0.942622 -0.298453 + -1.99295 1.73621 -0.301369 0.83562 0.549196 0.0110664 + -2.11821 1.78343 -0.31315 -0.843627 0.437169 -0.311732 + -2.14098 1.79923 -0.241522 -0.524124 0.721479 -0.452506 + -2.17594 1.86452 -0.096405 0.0643315 0.957873 -0.279893 + -2.15513 1.8594 -0.07235 0.32547 0.872805 -0.363703 + -2.08649 1.7566 -0.414291 -0.938982 0.156244 -0.306431 + -2.1181 1.74126 -0.341513 -0.90115 0.18041 -0.394184 + -2.17356 1.80731 -0.204712 -0.475464 0.696599 -0.537293 + -2.20852 1.87268 -0.059546 -0.019154 0.925532 -0.378184 + -2.05691 1.78848 -0.509912 -0.982277 0.0686332 -0.17442 + -2.08045 1.67933 -0.46125 -0.941302 0.152532 -0.301138 + -2.13064 1.67626 -0.328739 -0.909521 0.135366 -0.392998 + -2.17854 1.69863 -0.236073 -0.852201 0.021149 -0.522787 + -2.16601 1.76363 -0.248856 -0.814249 0.229287 -0.533316 + -2.26032 1.84742 -0.082585 -0.339492 0.733317 -0.589059 + -2.05087 1.7113 -0.556828 -0.967225 0.114483 -0.22665 + -2.08361 1.60417 -0.499667 -0.91313 0.305299 -0.270159 + -2.13379 1.6011 -0.367149 -0.928556 0.176043 -0.326792 + -2.17994 1.62481 -0.232215 -0.826142 0.179614 -0.534067 + -2.01964 1.79368 -0.67111 -0.981152 -0.00407053 -0.193195 + -2.01547 1.73294 -0.734101 -0.972584 0.133596 -0.190349 + -2.04671 1.65056 -0.619819 -0.959585 0.218274 -0.177633 + -2.09564 1.53103 -0.571994 -0.960136 0.200244 -0.19504 + -2.12301 1.50724 -0.430988 -0.952883 0.135384 -0.271449 + -2.16916 1.53095 -0.296056 -0.966723 -0.0486957 -0.25115 + -2.01507 1.85244 -0.710092 -0.952732 -0.0137144 -0.303503 + -1.9663 1.86477 -0.850038 -0.954697 0.138719 -0.263267 + -2.02224 1.64622 -0.784511 -0.958662 0.189841 -0.211963 + -2.05874 1.57734 -0.692196 -0.950602 0.23948 -0.197496 + -2.04901 1.87769 -0.606221 -0.98889 -0.00170281 -0.148637 + -2.04084 1.94534 -0.658996 -0.978647 0.0887841 -0.185384 + -2.02648 2.0249 -0.695197 -0.972804 0.231595 -0.00389074 + -2.00071 1.93192 -0.74635 -0.907793 -0.0136759 -0.419195 + -1.97115 1.95368 -0.81144 -0.928221 0.0460678 -0.369167 + -2.05358 1.81893 -0.567241 -0.978176 -0.129611 -0.162394 + -2.05367 1.84205 -0.544286 -0.998185 0.0436692 -0.0414662 + -2.04962 1.87449 -0.581074 -0.993561 0.11288 -0.0097189 + -2.04145 1.94214 -0.633849 -0.986185 0.165622 -0.00283097 + -1.9953 2.10086 -0.703953 -0.0654755 0.296776 0.9527 + -1.24542 1.07804 -1.44959 0.173142 -0.0822395 0.981457 + -1.30253 1.11291 -1.43659 0.82029 0.42927 0.377958 + -1.26037 1.02438 -1.45144 0.697685 -0.0379477 0.715399 + -1.3426 1.16556 -1.41618 0.818352 0.531273 0.219201 + -1.33891 1.09937 -1.36652 0.779628 0.197893 0.594154 + -1.31527 1.03417 -1.3908 0.737068 -0.00548835 0.675796 + -1.26424 0.876179 -1.45655 0.69155 -0.0476274 0.720756 + -1.20752 0.862044 -1.50687 0.74719 -0.0679487 0.661127 + -1.15338 0.931117 -1.57811 0.759355 -0.0907354 0.644319 + -1.11406 0.974813 -1.60939 0.586011 -0.267587 0.764845 + -1.22105 1.06807 -1.48272 0.27089 -0.808143 0.522995 + -1.24542 1.07804 -1.44959 0.749546 -0.230328 0.620588 + -1.38567 1.21834 -1.48539 0.731757 0.678101 -0.0686348 + -1.42592 1.25813 -1.43972 0.72592 0.685023 -0.0615047 + -1.39323 1.22173 -1.37206 0.833855 0.518408 0.189573 + -1.38954 1.15545 -1.32246 0.800471 0.190871 0.568167 + -1.3456 1.16561 -1.50585 0.807646 0.56773 -0.159343 + -1.42313 1.24458 -1.54323 0.599116 0.767823 -0.226954 + -1.46338 1.28437 -1.49756 0.652605 0.726901 -0.213829 + -1.46073 1.30484 -1.39622 0.812452 0.5688 -0.128014 + -1.42804 1.26844 -1.32856 0.881324 0.448974 0.147277 + -1.26875 1.04947 -1.46391 0.478371 0.656019 -0.583781 + -1.27651 1.04939 -1.49016 0.700866 0.708303 -0.0842194 + -1.35337 1.16552 -1.5321 0.818574 0.503214 -0.27697 + -1.24542 1.07804 -1.44959 0.0475818 0.416344 -0.907961 + -1.24022 1.02623 -1.52285 0.478502 0.862283 0.165843 + -1.33367 1.11258 -1.54161 0.772216 0.605052 -0.19389 + -1.36149 1.14219 -1.57689 0.863292 0.418384 -0.282279 + -1.38119 1.19504 -1.56743 0.798107 0.567022 -0.203743 + -1.18975 1.00904 -1.53268 0.062907 0.995546 0.0702265 + -1.20826 1.07264 -1.66304 0.415145 0.859062 0.299445 + -1.29738 1.08942 -1.5743 0.562487 0.792297 0.236376 + -1.31783 1.10964 -1.60512 0.369622 0.927123 0.0618199 + -1.35577 1.12264 -1.59423 0.659886 0.737977 -0.141213 + -1.09541 1.02064 -1.61357 0.0237913 0.962556 0.270036 + -1.15779 1.05545 -1.67285 0.195469 0.924385 0.327572 + -1.14875 1.08447 -1.81252 -0.0166731 0.99893 0.043146 + -1.22871 1.09286 -1.69385 0.3051 0.943457 0.129627 + -1.11728 1.02629 -1.55775 -0.295542 0.931926 -0.210163 + -1.09291 1.01632 -1.59089 0.442612 -0.543432 0.713286 + -1.05745 0.968945 -1.65383 0.630685 -0.550842 0.546635 + -1.0363 1.01054 -1.63527 0.630821 -0.110549 0.768013 + -0.994768 1.04414 -1.66086 0.655605 0.0954371 0.749048 + -1.00856 1.06949 -1.67458 0.16273 0.701066 0.694281 + -1.05009 1.03582 -1.64905 0.0974265 0.735369 0.670627 + -1.09291 1.01632 -1.59089 0.526572 0.61002 0.592113 + -1.0544 0.957346 -1.67294 0.687805 -0.548067 0.47597 + -0.991716 1.03263 -1.67992 0.815287 -0.473244 0.333686 + -0.969312 1.06119 -1.7084 0.926927 -0.0756831 0.36753 + -0.988349 1.08892 -1.69963 0.365777 0.683989 0.631163 + -1.11248 1.07053 -1.70838 -0.166583 0.90673 0.387415 + -1.08014 0.917146 -1.67951 0.74554 -0.464936 0.477498 + -1.02381 0.965114 -1.71099 0.79491 -0.521387 0.310281 + -1.0014 0.993682 -1.73947 0.892418 -0.451204 -0.00241486 + -1.10836 0.891593 -1.64305 0.853521 -0.242521 0.461178 + -1.09486 0.870919 -1.70684 0.801495 -0.493602 0.337582 + -1.04955 0.924909 -1.71755 0.744193 -0.545299 0.38578 + -1.03953 0.916936 -1.75575 0.824881 -0.548452 0.137012 + -1.02065 0.95854 -1.7576 0.915138 -0.400652 0.0447345 + -1.16249 0.822434 -1.57186 0.836226 -0.343911 0.427143 + -1.12307 0.845368 -1.67038 0.836454 -0.447241 0.316734 + -1.08484 0.863034 -1.74498 0.824632 -0.459995 0.329221 + -1.03365 0.924709 -1.79081 0.894405 -0.425211 0.138694 + -1.01477 0.966219 -1.79271 0.97713 -0.191171 0.0931124 + -1.21154 0.769462 -1.53291 0.787037 -0.409205 0.461653 + -1.17212 0.792308 -1.63148 0.836245 -0.441014 0.325886 + -1.12885 0.794089 -1.71237 0.857283 -0.316273 0.406248 + -1.05344 0.863585 -1.81634 0.872638 -0.440905 0.210011 + -1.26447 0.772444 -1.46028 0.695533 -0.308164 0.649052 + -1.29789 0.714715 -1.48249 0.673517 -0.48752 0.555608 + -1.24 0.709635 -1.55049 0.754407 -0.437563 0.489294 + -1.19672 0.711416 -1.63137 0.830035 -0.332251 0.447941 + -1.32119 0.786574 -1.40995 0.688698 -0.190326 0.699622 + -1.35082 0.717703 -1.40986 0.675227 -0.414784 0.609937 + -1.36445 0.647105 -1.45278 0.645421 -0.514315 0.564723 + -1.30656 0.642106 -1.52072 0.658748 -0.509325 0.55375 + -1.25297 0.631515 -1.60298 0.721021 -0.506995 0.472319 + -1.36481 0.824607 -1.35122 0.724988 -0.153365 0.67147 + -1.39914 0.743891 -1.34262 0.667865 -0.338687 0.662757 + -1.4656 0.683465 -1.31776 0.658023 -0.446382 0.606423 + -1.41728 0.657188 -1.38505 0.61585 -0.508591 0.601717 + -1.31913 0.885966 -1.3959 0.743944 -0.0553597 0.665945 + -1.40449 0.873828 -1.30028 0.755522 -0.134008 0.641271 + -1.44277 0.781924 -1.2839 0.71458 -0.284723 0.63899 + -1.35881 0.935192 -1.34496 0.759032 -0.0386245 0.649907 + -1.43222 0.93844 -1.25339 0.76997 -0.0115449 0.637976 + -1.47412 0.841002 -1.21862 0.738598 -0.213192 0.639548 + -1.53037 0.782376 -1.18348 0.766098 -0.300331 0.568238 + -1.49902 0.723384 -1.2487 0.676639 -0.391776 0.623436 + -1.38245 1.00039 -1.32068 0.741655 0.0422017 0.669453 + -1.46009 1.01299 -1.23031 0.82379 0.000647658 0.566895 + -1.50185 0.905609 -1.17173 0.817054 -0.146961 0.557517 + -1.41032 1.07485 -1.29766 0.752916 0.0473755 0.656409 + -1.48367 1.07867 -1.18368 0.868379 0.0439774 0.493946 + -1.51686 0.973193 -1.12178 0.860304 -0.103619 0.499139 + -1.56396 0.914514 -1.06795 0.816421 -0.169329 0.552073 + -1.54895 0.846931 -1.11789 0.805782 -0.2504 0.53667 + -1.42778 1.21479 -1.28065 0.857926 0.159448 0.488405 + -1.44856 1.13419 -1.25584 0.8129 0.0627485 0.579014 + -1.51747 1.13409 -1.13427 0.895261 0.081783 0.437973 + -1.54043 1.03896 -1.07509 0.875969 -0.085484 0.474732 + -1.45892 1.26563 -1.2397 0.866108 0.153312 0.475766 + -1.48237 1.18961 -1.20643 0.839119 0.0558851 0.541069 + -1.54824 1.19931 -1.08523 0.892584 0.202536 0.402832 + -1.55596 1.11245 -1.01639 0.896302 -0.0196309 0.443009 + -1.45918 1.31928 -1.28762 0.907493 0.396119 0.139806 + -1.482 1.36422 -1.25526 0.905756 0.377442 0.192728 + -1.49134 1.31266 -1.19896 0.837718 0.160443 0.522003 + -1.51478 1.23655 -1.16574 0.833717 0.119872 0.539024 + -1.47664 1.34482 -1.35347 0.858846 0.499496 -0.11352 + -1.49947 1.38977 -1.32112 0.888233 0.452212 -0.0809087 + -1.5168 1.43611 -1.29238 0.904034 0.425647 -0.0393292 + -1.50491 1.40026 -1.23249 0.901912 0.36012 0.238472 + -1.51425 1.3487 -1.17618 0.838207 0.16343 0.520289 + -1.48146 1.32614 -1.4323 0.742308 0.629793 -0.228778 + -1.49738 1.36613 -1.38956 0.781875 0.537231 -0.316314 + -1.5245 1.42932 -1.36002 0.831078 0.470068 -0.29723 + -1.51048 1.35755 -1.41971 0.785497 0.565423 -0.251577 + -1.5376 1.42074 -1.39016 0.809508 0.487 -0.327915 + -1.58824 1.56145 -1.33468 0.864036 0.442911 -0.239315 + -1.54182 1.47566 -1.33128 0.878835 0.438414 -0.18826 + -1.4924 1.31578 -1.48496 0.682665 0.667858 -0.296536 + -1.55899 1.44397 -1.42699 0.863564 0.435221 -0.254636 + -1.60964 1.58459 -1.37157 0.944732 0.322602 -0.0583826 + -1.60153 1.60372 -1.30009 0.914593 0.385592 -0.121815 + -1.55511 1.51792 -1.29669 0.893597 0.437526 -0.100283 + -1.46548 1.23855 -1.61559 0.572906 0.758523 -0.310517 + -1.50726 1.26305 -1.64863 0.644095 0.695631 -0.318179 + -1.53418 1.34028 -1.51799 0.753159 0.579994 -0.310417 + -1.59651 1.47515 -1.4948 0.835756 0.42398 -0.34893 + -1.61771 1.62371 -1.39571 0.917012 0.326939 -0.228471 + -1.4019 1.21062 -1.58843 0.646922 0.697115 -0.309069 + -1.44425 1.20459 -1.66078 0.638012 0.737988 -0.219804 + -1.4398 1.18462 -1.73799 0.48088 0.852271 -0.205886 + -1.48964 1.19978 -1.76384 0.491435 0.835547 -0.245667 + -1.40843 1.18278 -1.6526 0.633276 0.732962 -0.24845 + -1.40398 1.16281 -1.72981 0.522368 0.846345 -0.104075 + -1.41362 1.14503 -1.86862 0.320512 0.934897 -0.152442 + -1.46347 1.16028 -1.89442 0.27376 0.926384 -0.258589 + -1.38772 1.1672 -1.63161 0.825308 0.510224 -0.241945 + -1.38199 1.14774 -1.6489 0.835776 0.54096 -0.0940225 + -1.38227 1.15146 -1.69034 0.556547 0.827417 0.0750823 + -1.37664 1.14592 -1.80136 0.36247 0.928366 -0.0821708 + -1.36011 1.12005 -1.63475 0.592442 0.803189 -0.0624442 + -1.36038 1.12376 -1.67618 0.770781 0.632918 0.0728784 + -1.35493 1.13465 -1.76184 0.683378 0.728207 0.0520413 + -1.35051 1.13019 -1.85951 0.260086 0.96343 -0.0644806 + -1.32217 1.10706 -1.64564 0.220286 0.973971 -0.053426 + -1.32173 1.1061 -1.68638 0.21761 0.975953 -0.0127332 + -1.35104 1.11445 -1.69885 0.586982 0.807809 0.0538187 + -1.34559 1.12525 -1.78456 0.898268 0.432898 0.0755937 + -1.22827 1.0919 -1.73459 0.114962 0.993313 -0.0106827 + -1.31574 1.10599 -1.7686 0.212411 0.976995 0.0190527 + -1.34506 1.11426 -1.78112 0.77047 0.632282 0.0812103 + -1.33747 1.11615 -1.8326 0.837045 0.520751 0.167849 + -1.33801 1.12714 -1.83603 0.692712 0.706621 0.144346 + -1.21204 1.08971 -1.78439 0.116011 0.993232 -0.00562076 + -1.29951 1.1038 -1.8184 0.195488 0.980549 0.0175863 + -1.32299 1.11005 -1.85383 0.418816 0.900976 0.113291 + -1.32052 1.12088 -1.90499 0.453739 0.888132 0.0730834 + -1.33303 1.12393 -1.92846 0.210548 0.975773 -0.0594717 + -1.18366 1.08628 -1.81346 0.0817664 0.996602 -0.00990603 + -1.25696 1.09743 -1.88518 0.169439 0.98513 0.0284454 + -1.28043 1.1036 -1.92066 0.277512 0.95671 0.0877068 + -1.30604 1.11478 -1.92621 0.347487 0.935136 0.0690866 + -1.18596 1.09 -1.9349 0.0767218 0.994352 0.0733329 + -1.22858 1.09393 -1.9143 0.137355 0.989622 0.0422201 + -1.26087 1.10138 -1.96022 0.223457 0.973129 0.0555531 + -1.28648 1.11256 -1.96577 0.319311 0.946757 -0.0411404 + -1.33 1.12081 -1.96347 0.159355 0.984233 -0.0767621 + -1.15105 1.08818 -1.93396 0.0325011 0.997528 0.0623048 + -1.21825 1.09746 -1.98082 0.111722 0.993739 0.000589359 + -1.29512 1.10951 -2.0009 0.184854 0.977755 -0.0991183 + -1.33863 1.11785 -1.99855 0.117618 0.982567 -0.143972 + -1.08885 1.08668 -1.91054 0.0542806 0.997954 -0.0337843 + -1.0773 1.09187 -1.97934 0.13935 0.980498 0.138586 + -1.1395 1.09346 -2.0027 -0.0165511 0.99778 0.0645019 + -1.10695 1.09107 -1.77734 -0.193431 0.980445 0.0362127 + -1.04704 1.09328 -1.87537 0.0569004 0.973453 -0.221701 + -1.02812 1.06684 -1.94899 0.656839 0.724231 0.209884 + -1.04358 1.08719 -1.98883 0.334814 0.920845 0.199859 + -1.10267 1.10541 -2.0876 -0.00308561 0.990809 0.135235 + -1.09227 1.08996 -1.73342 -0.261124 0.915849 0.305016 + -0.983915 1.11468 -1.79325 0.102135 0.983635 -0.148429 + -0.958179 1.10158 -1.80475 0.844946 0.338635 -0.413995 + -1.02131 1.08017 -1.88688 0.783676 0.443465 -0.434961 + -0.969238 1.11357 -1.74933 0.425771 0.859656 0.282329 + -0.950201 1.08593 -1.75806 0.99664 -0.0195232 0.0795413 + -1.00406 1.03856 -1.82341 0.881778 -0.332204 -0.334826 + -1.09291 1.01632 -1.59089 0.354243 0.925053 0.137072 + -1.11728 1.02629 -1.55775 0.499307 0.859589 0.108618 + -0.996081 1.02292 -1.77671 0.876835 -0.433937 -0.207024 + -1.01533 0.98769 -1.79489 0.983354 -0.179662 -0.0271248 + -1.012 0.994478 -1.82505 0.999829 -0.0134116 0.0127323 + -1.01756 1.01435 -1.84748 0.980127 0.0823714 -0.18046 + -1.03481 1.05596 -1.91095 0.999773 -0.00306452 0.0210607 + -1.01144 0.973099 -1.82282 0.987951 -0.128609 0.086098 + -1.00757 0.987186 -1.87742 0.995834 0.0198532 -0.0889959 + -1.01314 1.00706 -1.89985 0.966596 0.238096 0.094885 + -1.00645 1.01785 -1.93794 0.875372 0.325751 0.357224 + -1.01786 0.945051 -1.83084 0.950162 -0.293284 0.10572 + -1.01399 0.959138 -1.88544 0.979392 -0.176513 0.0981545 + -0.99163 0.99924 -1.9591 0.935095 0.101867 0.339441 + -0.988968 1.05418 -2.00106 0.745405 0.568094 0.348771 + -1.00443 1.07461 -2.04084 0.398694 0.888189 0.228391 + -1.03765 0.883927 -1.85637 0.93604 -0.290251 0.198955 + -1.03466 0.865062 -1.88869 0.939733 -0.188261 0.285413 + -1.011 0.940273 -1.91776 0.937055 -0.215974 0.27438 + -0.991771 0.955552 -1.96923 0.9521 -0.101055 0.288605 + -1.09745 0.79464 -1.78372 0.875019 -0.268242 0.402973 + -1.05773 0.785549 -1.86557 0.899101 -0.167006 0.404632 + -1.006 0.870142 -1.95989 0.932887 -0.157103 0.324099 + -0.986775 0.88534 -2.01142 0.946685 -0.121602 0.29833 + -1.14134 0.712286 -1.73028 0.840727 -0.314113 0.441034 + -1.10162 0.703111 -1.81219 0.830778 -0.270314 0.486557 + -1.06407 0.665688 -1.88717 0.847717 -0.277697 0.451952 + -1.02908 0.790633 -1.93678 0.921692 -0.131475 0.364963 + -1.19759 0.632303 -1.70194 0.778508 -0.460176 0.426806 + -1.16577 0.605239 -1.79147 0.737381 -0.493769 0.460935 + -1.12821 0.567733 -1.86651 0.647001 -0.573674 0.502283 + -1.09718 0.541941 -1.95623 0.685948 -0.594715 0.419274 + -1.03454 0.654822 -1.96195 0.879723 -0.263726 0.395646 + -1.27522 0.528608 -1.69214 0.715921 -0.530846 0.453497 + -1.2434 0.501544 -1.78166 0.755033 -0.560987 0.339438 + -1.22111 0.481229 -1.89808 0.675259 -0.644874 0.357998 + -1.19008 0.455437 -1.98781 0.621183 -0.669827 0.406773 + -1.30462 0.57125 -1.6108 0.653371 -0.55673 0.512989 + -1.39521 0.449102 -1.60763 0.720441 -0.496904 0.483789 + -1.36581 0.406463 -1.68898 0.71644 -0.532194 0.451092 + -1.33049 0.388747 -1.78369 0.761052 -0.5572 0.332157 + -1.35822 0.581842 -1.52854 0.656139 -0.535145 0.532073 + -1.43477 0.463087 -1.52806 0.71188 -0.458388 0.532079 + -1.51087 0.270411 -1.60753 0.745923 -0.523087 0.412285 + -1.47041 0.261263 -1.69749 0.734902 -0.55189 0.394128 + -1.4351 0.243462 -1.79225 0.731062 -0.564496 0.383267 + -1.41888 0.576279 -1.46511 0.646976 -0.496289 0.578895 + -1.49543 0.45761 -1.46457 0.752044 -0.40799 0.517661 + -1.55043 0.284485 -1.52791 0.770437 -0.476393 0.423646 + -1.64693 0.158135 -1.50386 0.728119 -0.599991 0.331442 + -1.60938 0.151428 -1.60044 0.702056 -0.62076 0.348962 + -1.47171 0.58636 -1.39737 0.693619 -0.45853 0.555556 + -1.52999 0.476495 -1.38248 0.801063 -0.349192 0.486172 + -1.57685 0.307882 -1.43463 0.806349 -0.444788 0.389828 + -1.67335 0.181532 -1.41058 0.771124 -0.541297 0.33521 + -1.51673 0.601888 -1.32347 0.73258 -0.394978 0.554364 + -1.57501 0.491937 -1.30862 0.854505 -0.282919 0.435635 + -1.6114 0.326762 -1.35253 0.840761 -0.412313 0.350883 + -1.69386 0.205535 -1.30996 0.793536 -0.536675 0.286845 + -1.77078 0.075799 -1.37565 0.68536 -0.682119 0.254942 + -1.55015 0.641811 -1.25441 0.790138 -0.360605 0.495628 + -1.59402 0.539542 -1.22688 0.908984 -0.237773 0.342362 + -1.61983 0.365541 -1.2569 0.889323 -0.339409 0.306442 + -1.70229 0.244309 -1.21432 0.79847 -0.50459 0.328383 + -1.56162 0.702814 -1.18007 0.854852 -0.28339 0.434648 + -1.60549 0.60055 -1.15255 0.907737 -0.230313 0.35067 + -1.63884 0.413152 -1.17517 0.883781 -0.29005 0.367153 + -1.71489 0.294507 -1.11826 0.805347 -0.440134 0.397113 + -1.80779 0.132344 -1.16719 0.711517 -0.611219 0.346634 + -1.58019 0.76737 -1.11449 0.85704 -0.244885 0.453336 + -1.61581 0.67097 -1.08032 0.914331 -0.19806 0.35323 + -1.65143 0.480345 -1.09594 0.885192 -0.269321 0.379343 + -1.72749 0.361699 -1.03904 0.815727 -0.38333 0.433182 + -1.59302 0.838534 -1.04755 0.857829 -0.170253 0.484916 + -1.62864 0.74213 -1.01337 0.907813 -0.148264 0.392291 + -1.66176 0.550679 -1.02377 0.894996 -0.253189 0.367256 + -1.73373 0.435792 -0.954179 0.834671 -0.365902 0.411632 + -1.8313 0.24669 -0.970242 0.726684 -0.513273 0.456597 + -1.58681 0.989069 -1.01928 0.832526 -0.176992 0.524952 + -1.61587 0.913088 -0.998879 0.718302 -0.054998 0.693554 + -1.64391 0.823498 -0.957905 0.803516 0.0356972 0.594212 + -1.66647 0.634013 -0.954109 0.893489 -0.196039 0.404038 + -1.73844 0.519127 -0.884519 0.853437 -0.31061 0.418528 + -1.60233 1.06256 -0.96058 0.600196 -0.284741 0.747454 + -1.66335 0.996747 -0.978581 0.469243 -0.157034 0.868995 + -1.69139 0.907156 -0.937606 0.867169 0.145639 0.476243 + -1.68175 0.715383 -0.898643 0.930508 -0.137929 0.339309 + -1.58673 1.17767 -0.967345 0.866091 0.107659 0.488155 + -1.63217 1.13485 -0.91298 0.53935 -0.251011 0.8038 + -1.69319 1.06903 -0.930981 0.685085 -0.268883 0.677023 + -1.71302 0.976869 -0.880152 0.966357 0.102141 0.236053 + -1.67673 0.798432 -0.840487 0.984347 -0.021866 0.174878 + -1.58645 1.25696 -1.04068 0.88288 0.265888 0.387073 + -1.62401 1.25131 -0.923105 0.859705 0.163754 0.483831 + -1.66946 1.2085 -0.86874 0.731817 -0.180123 0.657267 + -1.71522 1.12579 -0.863086 0.849517 -0.178815 0.496333 + -1.73504 1.03363 -0.812257 0.964998 0.122164 0.232066 + -1.553 1.29421 -1.1212 0.826732 0.142832 0.544163 + -1.59609 1.36052 -1.07345 0.84029 0.142386 0.523106 + -1.62539 1.32331 -0.995411 0.891507 0.26432 0.3679 + -1.66295 1.31767 -0.877832 0.880105 0.197236 0.431872 + -1.69943 1.27083 -0.806712 0.748984 -0.100641 0.654901 + -1.53056 1.3972 -1.16099 0.861567 0.170934 0.477999 + -1.56931 1.3428 -1.10596 0.786053 0.0714698 0.614014 + -1.58452 1.45584 -1.09935 0.816287 0.170745 0.551835 + -1.63139 1.42106 -1.02992 0.841445 0.168355 0.513447 + -1.66069 1.38386 -0.951877 0.886274 0.275812 0.372083 + -1.52672 1.44195 -1.2025 0.908297 0.340478 0.243046 + -1.55774 1.43811 -1.13185 0.825473 0.220466 0.519604 + -1.55391 1.48278 -1.17341 0.886322 0.332952 0.321834 + -1.57536 1.52092 -1.14547 0.884572 0.293971 0.362097 + -1.60743 1.48643 -1.07733 0.81361 0.189247 0.549749 + -1.5386 1.4778 -1.26239 0.91024 0.410397 0.0551191 + -1.55989 1.52355 -1.22323 0.909299 0.401645 0.108891 + -1.5764 1.56368 -1.25754 0.903344 0.42881 -0.00961589 + -1.58134 1.56168 -1.19528 0.92928 0.348741 0.121733 + -1.59512 1.59787 -1.17855 0.918722 0.344777 0.19256 + -1.59827 1.55151 -1.12345 0.85495 0.291415 0.429112 + -1.63962 1.53551 -1.04434 0.80926 0.215384 0.546542 + -1.61323 1.63106 -1.28145 0.950067 0.307948 0.0504122 + -1.5881 1.59102 -1.23889 0.923268 0.383847 -0.015392 + -1.60188 1.6272 -1.22216 0.943095 0.332503 -0.00366988 + -1.61773 1.64263 -1.16089 0.921459 0.298711 0.248366 + -1.62087 1.59636 -1.10574 0.850282 0.294279 0.436372 + -1.63079 1.69475 -1.26975 0.965671 0.259755 -0.00262169 + -1.64063 1.746 -1.29753 0.981808 0.18736 -0.0308098 + -1.65095 1.83516 -1.20736 0.987992 0.134976 0.0751928 + -1.64342 1.75405 -1.19387 0.968595 0.192593 0.157261 + -1.61944 1.69088 -1.21046 0.949872 0.31088 0.033105 + -1.64171 1.70581 -1.14431 0.904836 0.277634 0.322786 + -1.6487 1.78512 -1.32169 0.958587 0.199575 -0.203176 + -1.67051 1.94782 -1.27149 0.967009 0.168724 -0.190856 + -1.66079 1.88642 -1.23514 0.988287 0.139971 -0.0608062 + -1.6578 1.70994 -1.38728 0.685234 0.393604 -0.612805 + -1.65962 1.79027 -1.34981 0.801938 0.270827 -0.532492 + -1.68143 1.95297 -1.29961 0.704724 0.300802 -0.642559 + -1.68429 2.08831 -1.22682 0.967528 0.102554 -0.231025 + -1.67457 2.027 -1.19043 0.99549 0.0922849 0.0219888 + -1.64283 1.63651 -1.43129 0.642264 0.483408 -0.594822 + -1.67945 1.64718 -1.44516 -0.139892 0.500138 -0.854571 + -1.68468 1.72955 -1.40063 -0.00451575 0.429118 -0.903237 + -1.6865 1.80988 -1.36317 0.0242019 0.391968 -0.91966 + -1.62162 1.48795 -1.53037 0.66687 0.527203 -0.526633 + -1.66448 1.57375 -1.48918 -0.128547 0.52756 -0.839736 + -1.72826 1.47856 -1.47591 -0.748902 0.314693 -0.583193 + -1.72777 1.56512 -1.43703 -0.708755 0.288441 -0.643792 + -1.5717 1.37146 -1.5858 0.745003 0.560257 -0.362053 + -1.61248 1.3985 -1.60823 0.581359 0.5953 -0.554652 + -1.65498 1.50123 -1.54717 -0.108795 0.619411 -0.777492 + -1.71876 1.40596 -1.53395 -0.754409 0.329249 -0.567858 + -1.56679 1.29244 -1.68874 0.601428 0.674473 -0.428218 + -1.60758 1.31948 -1.71117 0.326133 0.720529 -0.611944 + -1.63912 1.34099 -1.68663 -0.382134 0.670327 -0.636109 + -1.64584 1.41169 -1.62508 -0.153842 0.639864 -0.752932 + -1.71504 1.32517 -1.58463 -0.798321 0.327842 -0.505176 + -1.54917 1.22917 -1.80395 0.260681 0.875349 -0.407196 + -1.60006 1.21441 -1.83039 -0.172425 0.799119 -0.575915 + -1.60983 1.26131 -1.77081 -0.355723 0.662634 -0.659073 + -1.64137 1.28281 -1.74627 -0.499421 0.596737 -0.628079 + -1.70833 1.25447 -1.64618 -0.826482 0.323048 -0.461051 + -1.53871 1.17114 -1.89964 0.0665979 0.897041 -0.436901 + -1.5896 1.15638 -1.92608 -0.397037 0.790209 -0.466831 + -1.62797 1.10647 -1.93902 -0.765356 0.504198 -0.400018 + -1.62972 1.16616 -1.86822 -0.640316 0.563034 -0.522483 + -1.63948 1.21306 -1.80864 -0.639744 0.540692 -0.546242 + -1.43855 1.1159 -2.01876 0.0727262 0.966674 -0.245464 + -1.51379 1.12676 -2.02398 -0.0953847 0.923993 -0.370322 + -1.57138 1.1026 -2.02832 -0.51876 0.729184 -0.446295 + -1.59193 1.1027 -1.9941 -0.673649 0.595491 -0.437708 + -1.38557 1.11758 -2.01527 0.041107 0.979143 -0.198972 + -1.39932 1.0879 -2.16447 -0.115984 0.958613 -0.260017 + -1.4908 1.0756 -2.14036 -0.301435 0.856809 -0.418347 + -1.54839 1.05144 -2.14471 -0.489676 0.727995 -0.479833 + -1.38749 1.1293 -1.92677 0.203054 0.973422 -0.105919 + -1.38446 1.12618 -1.96176 -0.235509 0.964317 -0.120943 + -1.33975 1.10917 -2.0521 0.0800733 0.983705 -0.160977 + -1.34634 1.0895 -2.16103 -0.0357518 0.987175 -0.155588 + -1.29729 1.10744 -2.02971 0.135192 0.984821 -0.108859 + -1.3294 1.10126 -2.095 0.0444298 0.988207 -0.146535 + -1.30621 1.0951 -2.14454 -0.058199 0.996153 -0.0655115 + -1.32314 1.08343 -2.21052 -0.17548 0.979131 -0.102519 + -1.31599 1.07477 -2.28572 -0.385102 0.894613 -0.226635 + -1.22043 1.09538 -2.00962 0.228125 0.966454 -0.118005 + -1.28695 1.09954 -2.07262 0.178507 0.97375 -0.141231 + -1.27041 1.09363 -2.08299 0.250065 0.960632 -0.121053 + -1.28136 1.09502 -2.12479 0.0811391 0.9951 0.0565034 + -1.29086 1.09788 -2.18676 -0.187011 0.982159 -0.0197482 + -1.20388 1.08947 -2.01999 0.0361177 0.983928 -0.174876 + -1.22956 1.08229 -2.07395 0.133266 0.984258 -0.116087 + -1.24051 1.08368 -2.11575 0.128339 0.988893 0.0749617 + -1.24092 1.09246 -2.16535 0.0765288 0.978473 0.19166 + -1.26601 1.0978 -2.167 0.0684345 0.990901 0.115898 + -1.16882 1.09152 -2.02854 -0.103222 0.993759 -0.0422805 + -1.19449 1.08434 -2.08249 -0.164808 0.986325 -0.00108854 + -1.20317 1.08477 -2.11703 -0.127966 0.986048 0.106457 + -1.13199 1.10347 -2.11344 -0.2288 0.968857 0.0946935 + -1.14066 1.10399 -2.14793 -0.244385 0.951314 0.187826 + -1.20358 1.09346 -2.16669 -0.125805 0.955117 0.268189 + -1.20362 1.1043 -2.19567 -0.238142 0.889549 0.38986 + -1.23619 1.1012 -2.2137 -0.0647689 0.923384 0.378375 + -1.07193 1.13033 -2.19796 -0.024249 0.945075 0.325953 + -1.14071 1.11474 -2.17695 -0.167989 0.918081 0.359036 + -1.20313 1.12802 -2.23314 -0.239696 0.884025 0.401305 + -1.2357 1.12492 -2.25118 -0.444914 0.880695 0.162567 + -1.26129 1.10663 -2.2153 -0.169965 0.971981 0.162373 + -1.06896 1.10064 -2.09713 0.187102 0.960629 0.205391 + -1.04583 1.10626 -2.12786 0.0440734 0.9459 0.321452 + -1.03487 1.11922 -2.16291 -0.0361829 0.953847 0.298104 + -0.974548 1.14311 -2.24689 0.145567 0.960289 0.238026 + -1.08854 1.16718 -2.28678 -0.0115867 0.958846 0.283689 + -1.13452 1.168 -2.2984 -0.256421 0.949666 0.179949 + -1.11791 1.13115 -2.20958 -0.173721 0.914506 0.365375 + -0.9813 1.08014 -2.07162 0.294152 0.784897 0.545355 + -0.951245 1.1095 -2.11168 0.257384 0.809139 0.52825 + -0.940285 1.12247 -2.14673 0.328488 0.894388 0.303587 + -0.937486 1.13191 -2.21189 0.332247 0.928216 0.167415 + -0.954909 1.05443 -2.06828 0.804878 0.278694 0.523929 + -0.924853 1.0837 -2.10838 0.84013 0.22087 0.495377 + -0.913843 1.10392 -2.15981 0.926368 0.335705 0.17072 + -0.911044 1.11345 -2.22492 0.973042 0.225081 0.0502845 + -0.914023 1.13006 -2.28628 0.918688 0.389675 0.0645338 + -0.974143 1.03556 -2.02221 0.914424 0.118565 0.387003 + -0.950424 1.01234 -2.07959 0.936629 -0.07147 0.342955 + -0.931314 1.03687 -2.12927 0.957038 -0.156572 0.244057 + -0.920304 1.05709 -2.18069 0.992451 -0.122179 -0.010626 + -0.926823 1.07678 -2.2384 0.980467 -0.183094 -0.0718396 + -0.969659 0.993571 -2.03348 0.947023 -0.0449454 0.318006 + -0.952612 0.969858 -2.09181 0.945446 -0.12635 0.300279 + -0.933501 0.994386 -2.14149 0.970845 -0.132088 0.200033 + -0.926781 0.999793 -2.18866 0.987968 -0.15197 -0.0287218 + -0.969799 0.949883 -2.04361 0.952234 -0.0972612 0.289467 + -0.947048 0.922664 -2.13107 0.967483 -0.155459 0.199522 + -0.940327 0.928066 -2.17822 0.982403 -0.103286 0.155618 + -0.9333 1.01957 -2.2463 0.998326 -0.0233835 0.052892 + -0.964235 0.902602 -2.08292 0.951822 -0.118642 0.282771 + -0.977004 0.797029 -2.08306 0.955386 -0.097933 0.27865 + -0.953089 0.796417 -2.1604 0.963165 -0.0675538 0.260289 + -0.923287 0.9505 -2.24968 0.979987 0.0275919 0.19714 + -0.999544 0.779769 -2.01156 0.937617 -0.10709 0.330765 + -1.00511 0.628134 -2.04333 0.895379 -0.263211 0.359189 + -0.9812 0.627521 -2.12066 0.92832 -0.210969 0.306128 + -0.954739 0.613244 -2.20594 0.932296 -0.195628 0.304228 + -0.936049 0.81885 -2.23186 0.969981 -0.0499561 0.237994 + -1.06776 0.515253 -2.03761 0.665001 -0.596063 0.44998 + -1.03642 0.491844 -2.11246 0.727047 -0.546295 0.41589 + -1.00996 0.477562 -2.19773 0.794171 -0.449285 0.40919 + -0.987213 0.44724 -2.26101 0.735311 -0.410456 0.539299 + -0.934241 0.615491 -2.27583 0.918927 -0.11539 0.377172 + -1.16227 0.429164 -2.0737 0.603788 -0.668898 0.433607 + -1.13093 0.405755 -2.14855 0.504108 -0.629814 0.590939 + -1.10118 0.368082 -2.1967 0.581672 -0.573917 0.576434 + -1.07843 0.337759 -2.25998 0.66629 -0.604275 0.436931 + -1.2779 0.348663 -1.99567 0.754261 -0.531393 0.385631 + -1.2501 0.32239 -2.08156 0.73718 -0.521743 0.42936 + -1.21894 0.297052 -2.16027 0.650316 -0.512833 0.560439 + -1.18919 0.259384 -2.20843 0.579813 -0.564258 0.587732 + -1.14869 0.247773 -2.28572 0.681187 -0.608254 0.407444 + -1.3082 0.368428 -1.9001 0.787299 -0.536785 0.30335 + -1.36476 0.21381 -1.97769 0.768104 -0.518164 0.376194 + -1.32614 0.201938 -2.06793 0.754365 -0.510653 0.412513 + -1.29498 0.176688 -2.14659 0.725484 -0.542638 0.423339 + -1.25635 0.164224 -2.23701 0.677059 -0.602807 0.422155 + -1.39505 0.233576 -1.88213 0.76082 -0.542501 0.356153 + -1.48207 0.129597 -1.87343 0.682624 -0.634174 0.363108 + -1.43835 0.122355 -1.96969 0.68794 -0.625107 0.368754 + -1.39973 0.110482 -2.05993 0.670276 -0.656216 0.34657 + -1.35845 0.104011 -2.15432 0.639467 -0.678156 0.362197 + -1.52211 0.139485 -1.78356 0.684211 -0.630122 0.367153 + -1.54867 0.072714 -1.86511 0.542206 -0.784721 0.300376 + -1.50496 0.06539 -1.96142 0.523912 -0.80173 0.287656 + -1.46343 0.05873 -2.06489 0.500826 -0.823959 0.265075 + -1.42215 0.052258 -2.15928 0.501515 -0.825834 0.257838 + -1.56892 0.142187 -1.69044 0.686286 -0.630615 0.362403 + -1.60296 0.071117 -1.76894 0.549244 -0.785052 0.286397 + -1.65748 0.043559 -1.77041 0.153631 -0.987522 0.0346111 + -1.60319 0.045063 -1.86662 0.143323 -0.986081 0.0842797 + -1.55544 0.042446 -1.96028 0.12878 -0.985175 0.113338 + -1.70267 0.06714 -1.57905 0.598631 -0.750262 0.280621 + -1.64978 0.073826 -1.67583 0.589737 -0.751714 0.29519 + -1.70933 0.036278 -1.6716 0.206748 -0.977039 0.0514759 + -1.69304 0.049387 -1.7757 -0.22278 -0.96006 -0.169277 + -1.645 0.053394 -1.87724 -0.25473 -0.957594 -0.134631 + -1.74022 0.073933 -1.48242 0.644235 -0.729187 0.230752 + -1.76223 0.029679 -1.57477 0.337237 -0.937576 0.0849903 + -1.74489 0.042194 -1.67685 -0.191787 -0.960279 -0.202689 + -1.72049 0.064447 -1.80299 -0.35515 -0.905699 -0.231467 + -1.83471 0.025187 -1.36499 0.436433 -0.8833 0.171193 + -1.80415 0.023321 -1.47176 0.381871 -0.917714 0.109436 + -1.79512 0.025566 -1.58045 -0.0922438 -0.985356 -0.143401 + -1.82149 0.041109 -1.60877 -0.442671 -0.849374 -0.287412 + -1.77126 0.05782 -1.70511 -0.296105 -0.915917 -0.270956 + -1.86011 0.040048 -1.25573 0.447953 -0.849213 0.279599 + -1.86908 0.015865 -1.36964 -0.120348 -0.991968 0.0389295 + -1.83704 0.019212 -1.47744 -0.121295 -0.989967 -0.0724768 + -1.79129 0.099711 -1.27507 0.710707 -0.63697 0.298606 + -1.87661 0.072682 -1.14785 0.490809 -0.791054 0.365158 + -1.89448 0.030728 -1.26038 -0.0224925 -0.981886 0.188132 + -1.89584 0.031306 -1.39999 -0.544022 -0.826537 -0.14449 + -1.8638 0.034655 -1.50779 -0.533683 -0.81644 -0.220474 + -1.8892 0.11967 -1.04724 0.491107 -0.73462 0.468132 + -1.91654 0.057357 -1.15051 -0.0664251 -0.937121 0.342626 + -1.94594 0.060274 -1.18596 -0.424581 -0.887641 0.178394 + -1.92388 0.03373 -1.29579 -0.512177 -0.858808 -0.0111148 + -1.82039 0.18254 -1.07113 0.715962 -0.563761 0.411792 + -1.90011 0.183815 -0.946342 0.40796 -0.714354 0.568566 + -1.92914 0.104254 -1.04994 -0.0017037 -0.859972 0.510339 + -1.90442 0.264828 -0.848658 0.407666 -0.684278 0.604626 + -1.93193 0.175895 -0.951423 -0.126213 -0.782923 0.609182 + -1.96125 0.164999 -0.98295 -0.4823 -0.704669 0.520412 + -1.95845 0.09336 -1.08147 -0.445979 -0.814433 0.371216 + -1.83755 0.320778 -0.885367 0.743809 -0.490286 0.454277 + -1.90238 0.345574 -0.758916 0.252848 -0.654547 0.712486 + -1.93624 0.256906 -0.853739 -0.186993 -0.718289 0.670145 + -1.83552 0.40161 -0.795576 0.757055 -0.449723 0.473937 + -1.9005 0.439095 -0.683499 0.22376 -0.574554 0.787286 + -1.93979 0.349147 -0.769904 -0.397779 -0.591454 0.701395 + -1.96402 0.330959 -0.803601 -0.719051 -0.454278 0.525925 + -1.96047 0.238717 -0.887436 -0.529062 -0.635927 0.561863 + -1.73691 0.605799 -0.81344 0.879357 -0.306427 0.364464 + -1.83398 0.488196 -0.724546 0.757838 -0.400816 0.514809 + -1.89473 0.542755 -0.617445 0.266518 -0.504582 0.821198 + -1.9379 0.44258 -0.694537 -0.441434 -0.515706 0.734291 + -1.73189 0.688842 -0.755276 0.882044 -0.271597 0.385011 + -1.82821 0.591858 -0.658491 0.746126 -0.372853 0.551613 + -1.89444 0.652219 -0.557439 0.223468 -0.454549 0.862234 + -1.93576 0.547198 -0.624538 -0.425058 -0.461598 0.778622 + -1.69835 0.868144 -0.783033 0.971882 0.0827049 0.220466 + -1.73465 0.775569 -0.692687 0.899378 -0.205636 0.385789 + -1.83097 0.678666 -0.59585 0.702944 -0.354677 0.616502 + -1.89441 0.764101 -0.504826 0.211403 -0.429864 0.877796 + -1.93547 0.65666 -0.564533 -0.489309 -0.39302 0.778532 + -1.72244 0.926738 -0.699321 0.969121 0.0967503 0.226811 + -1.75873 0.834162 -0.608975 0.856447 -0.241278 0.456381 + -1.83094 0.790462 -0.543286 0.675589 -0.349146 0.649366 + -1.90827 0.87039 -0.446126 0.0923059 -0.552086 0.828662 + -1.94212 0.77194 -0.513802 -0.504601 -0.426751 0.750508 + -1.76018 1.08757 -0.733287 0.979458 0.113183 0.166886 + -1.74758 0.980684 -0.62036 0.954768 0.111829 0.275521 + -1.78124 0.914346 -0.53626 0.856383 -0.147809 0.494732 + -1.85344 0.870648 -0.470571 0.553392 -0.437721 0.708631 + -1.74518 1.18812 -0.801049 0.879133 -0.139851 0.455596 + -1.77403 1.13592 -0.650637 0.969242 0.107163 0.221555 + -1.78834 1.03441 -0.536214 0.936855 0.102752 0.334281 + -1.822 0.968071 -0.452114 0.79048 -0.269115 0.550198 + -1.88088 0.964924 -0.39846 0.502809 -0.456807 0.733832 + -1.74325 1.34093 -0.758132 0.887192 0.0441054 0.459288 + -1.75903 1.23639 -0.718449 0.962019 -0.0014114 0.272979 + -1.78886 1.28967 -0.649536 0.944103 0.0596126 0.324217 + -1.80398 1.18699 -0.568694 0.962772 0.0990288 0.251521 + -1.81829 1.08548 -0.45427 0.932449 0.0646542 0.35547 + -1.70677 1.38786 -0.829211 0.871686 0.241045 0.426687 + -1.7464 1.44765 -0.780767 0.896455 0.259433 0.359254 + -1.77308 1.39422 -0.689219 0.904058 0.108271 0.41347 + -1.70032 1.44373 -0.903383 0.876662 0.307219 0.370242 + -1.74034 1.49789 -0.858394 0.866347 0.341449 0.364492 + -1.78704 1.49931 -0.716844 0.874499 0.342764 0.343167 + -1.81373 1.44579 -0.625345 0.924458 0.191136 0.329916 + -1.66357 1.47014 -0.99693 0.838241 0.195143 0.509187 + -1.70359 1.5243 -0.951933 0.829102 0.26667 0.491403 + -1.78188 1.54323 -0.805916 0.828395 0.447641 0.336719 + -1.82859 1.54464 -0.664366 0.848237 0.439456 0.295589 + -1.66809 1.57701 -1.02522 0.792729 0.263704 0.549583 + -1.68527 1.62043 -1.02003 0.763601 0.279338 0.582137 + -1.72078 1.56773 -0.946754 0.786063 0.263578 0.559135 + -1.74954 1.58263 -0.912958 0.807513 0.344869 0.478527 + -1.83001 1.59114 -0.762101 0.826915 0.459996 0.323443 + -1.64934 1.63786 -1.08662 0.833499 0.27127 0.481344 + -1.67123 1.69079 -1.07069 0.812778 0.251001 0.525729 + -1.70927 1.65192 -1.00797 0.766288 0.2652 0.585211 + -1.73804 1.66673 -0.974226 0.80212 0.212312 0.558147 + -1.79767 1.63046 -0.8692 0.811469 0.339352 0.475772 + -1.6636 1.75882 -1.12833 0.940747 0.158885 0.299585 + -1.67721 1.82691 -1.10747 0.904157 0.104037 0.414339 + -1.69524 1.72227 -1.05862 0.791299 0.191216 0.58076 + -1.71156 1.78375 -1.0419 0.836549 0.109677 0.536802 + -1.75646 1.70307 -0.956964 0.800844 0.182837 0.57028 + -1.65796 1.81516 -1.16071 0.960048 0.102709 0.260307 + -1.67156 1.88334 -1.1398 0.949171 0.0938131 0.300456 + -1.69353 1.88847 -1.0907 0.908299 0.0581232 0.414264 + 1.09292 1.01632 -1.59089 0.36811 -0.929741 0.00873225 + 1.24544 1.07804 -1.44958 0.368108 -0.929742 0.00873484 + 1.1173 1.02629 -1.55774 0.36811 -0.929741 0.00873143 + -1.09291 1.01632 -1.59089 -0.367616 -0.92993 0.00940683 + -1.11728 1.02629 -1.55775 -0.367616 -0.92993 0.00940681 + -1.24542 1.07804 -1.44959 -0.367617 -0.92993 0.00940625 + 1.93239 2.72679 -0.741506 -0.916 0.0382739 0.399347 + 1.86777 2.79456 -0.863879 0.112702 0.880319 0.4608 + 1.82515 2.77478 -0.886633 -0.729584 0.436691 0.526317 + 1.80133 2.74089 -0.909921 -0.892707 0.165894 0.41899 + 1.81726 2.72235 -0.875219 -0.845523 0.175199 0.504377 + 1.86198 2.8063 -0.896229 0.50297 0.83669 -0.216727 + 1.85923 2.80544 -0.885537 -0.0592395 0.92662 0.371303 + 1.81661 2.78567 -0.908291 -0.743352 0.45415 0.491097 + 1.79003 2.7526 -0.944002 -0.907992 0.158258 0.38795 + 1.78061 2.68483 -0.955633 -0.949351 0.137416 0.282574 + 1.82875 2.78366 -0.959199 0.561422 0.544702 -0.62298 + 1.80795 2.79902 -0.949217 -0.187596 0.917246 -0.35138 + 1.8052 2.79816 -0.938525 -0.646271 0.729673 0.223407 + 1.77862 2.76509 -0.974238 -0.905423 0.40769 0.118315 + 1.80458 2.75174 -1.00111 0.472688 0.47962 -0.739278 + 1.78378 2.76702 -0.991191 -0.396033 0.746265 -0.535019 + 1.78383 2.69045 -1.04735 0.444954 0.377498 -0.812103 + 1.76305 2.71127 -1.03682 -0.47726 0.585845 -0.654987 + 1.75789 2.70925 -1.01992 -0.963661 0.259097 0.0650122 + 1.7693 2.69654 -0.989714 -0.936065 0.056336 0.347288 + 1.76503 2.61621 -1.08778 0.330892 0.303752 -0.893446 + 1.74425 2.63695 -1.0773 -0.626099 0.41643 -0.659232 + 1.74104 2.63256 -1.0577 -0.984457 0.129693 0.118423 + 1.75246 2.61995 -1.02745 -0.950653 0.0442371 0.307086 + 1.76075 2.60809 -0.991314 -0.972834 0.0960788 0.210627 + 1.74268 2.5277 -1.12287 0.0477392 0.320426 -0.94607 + 1.7312 2.54263 -1.10692 -0.809607 0.320956 -0.491452 + 1.728 2.53824 -1.08732 -0.985972 0.104142 0.130439 + 1.73941 2.52038 -1.0578 -0.950493 0.0418529 0.307916 + 1.7477 2.50862 -1.02162 -0.978792 0.0827069 0.187419 + 1.72818 2.43651 -1.15392 0.0810189 0.330372 -0.940367 + 1.7167 2.45152 -1.13792 -0.854077 0.287388 -0.433546 + 1.7122 2.432 -1.11812 -0.981024 0.0939114 0.169625 + 1.72362 2.41406 -1.08864 -0.950572 0.0560772 0.305399 + 1.73003 2.38788 -1.0561 -0.974624 0.0962894 0.202078 + 1.77005 2.3569 -1.13484 0.713429 0.144014 -0.685769 + 1.72075 2.34607 -1.17588 0.391001 0.21588 -0.894714 + 1.70418 2.37334 -1.1703 -0.650951 0.280336 -0.70546 + 1.69969 2.35382 -1.15051 -0.990737 0.111569 0.0774106 + 1.76262 2.26646 -1.1568 0.658389 0.163777 -0.734643 + 1.71276 2.24476 -1.2068 0.388641 0.245919 -0.887965 + 1.6962 2.27211 -1.20117 -0.564513 0.2812 -0.776049 + 1.68711 2.23536 -1.18593 -0.993446 0.0838867 -0.0776394 + 1.70018 2.27691 -1.12029 -0.973089 0.0769613 0.217197 + 1.75792 2.17579 -1.18895 0.667364 0.202865 -0.716569 + 1.7067 2.15597 -1.23461 0.23055 0.28228 -0.931217 + 1.69337 2.12496 -1.24211 -0.648277 0.243186 -0.721525 + 1.68429 2.08831 -1.22682 -0.981199 0.119198 -0.151789 + 1.68761 2.15846 -1.15573 -0.995449 0.0538875 0.0785941 + 1.8141 1.95582 -1.19674 0.771757 0.171607 -0.612325 + 1.75186 2.08692 -1.21682 0.642961 0.212671 -0.73578 + 1.70639 2.07934 -1.25929 0.253922 0.304421 -0.918069 + 1.69305 2.04842 -1.26673 -0.0811285 0.336144 -0.93831 + 1.68143 1.95297 -1.29961 -0.704906 0.297907 -0.643707 + 1.88335 1.79572 -1.12164 0.871595 0.126337 -0.473668 + 1.80276 1.87013 -1.23573 0.775056 0.188371 -0.603162 + 1.74052 2.00132 -1.25576 0.665366 0.235785 -0.708303 + 1.70175 1.99203 -1.29306 0.152272 0.337195 -0.929039 + 1.69013 1.89658 -1.32594 0.0329159 0.343605 -0.938537 + 1.95992 1.51335 -1.04196 0.932547 0.176951 -0.314714 + 1.87763 1.70717 -1.16687 0.873451 0.157859 -0.460612 + 1.7962 1.78133 -1.27253 0.774396 0.200558 -0.600073 + 1.73589 1.91402 -1.28954 0.632478 0.238087 -0.737079 + 2.02186 1.46779 -0.887253 0.94337 0.137798 -0.301768 + 2.02129 1.37888 -0.937849 0.946085 0.178483 -0.27031 + 1.96479 1.42748 -1.09262 0.919534 0.202505 -0.33682 + 1.87107 1.61838 -1.20367 0.859476 0.181911 -0.477713 + 1.79399 1.69277 -1.30653 0.783743 0.223034 -0.579657 + 2.06017 1.29964 -0.841612 0.963235 0.135786 -0.231821 + 2.05816 1.21379 -0.905509 0.966162 0.135598 -0.219419 + 2.02617 1.29301 -0.988521 0.949195 0.178161 -0.2594 + 1.96847 1.33642 -1.13131 0.913559 0.196022 -0.356349 + 1.87474 1.52722 -1.2424 0.870186 0.218854 -0.441452 + 2.08967 1.35177 -0.684508 0.980638 0.0678055 -0.183716 + 2.08309 1.26324 -0.753163 0.982409 0.074765 -0.171124 + 2.08108 1.17739 -0.817061 0.988014 0.0492373 -0.146304 + 2.05549 1.1299 -0.964603 0.971445 0.0808971 -0.223049 + 2.02351 1.20911 -1.04761 0.945827 0.155188 -0.285182 + 2.10357 1.35566 -0.589833 0.985757 0.040358 -0.163258 + 2.09699 1.26712 -0.658488 0.993712 -0.000132064 -0.111969 + 2.08871 1.18155 -0.736669 0.996009 -0.00997451 -0.0886932 + 2.07962 1.08929 -0.804875 0.995133 -0.077164 -0.0612927 + 2.07198 1.08521 -0.885208 0.990669 -0.0184381 -0.135034 + 2.14132 1.44162 -0.358728 0.979014 -0.170212 -0.112072 + 2.1263 1.3696 -0.449178 0.990215 -0.0964402 -0.100859 + 2.10602 1.28468 -0.5331 0.987303 -0.156358 -0.0280198 + 2.09775 1.19911 -0.611281 0.994332 -0.105224 -0.0152324 + 2.16917 1.53095 -0.296056 0.970738 -0.0371363 -0.237253 + 2.17486 1.49982 -0.209326 0.956756 -0.283565 -0.064881 + 2.14119 1.40637 -0.285263 0.974198 -0.217438 -0.0604918 + 2.12091 1.32145 -0.369194 0.967122 -0.253942 0.0137075 + 2.09766 1.23015 -0.449251 0.979001 -0.202001 0.0274191 + 2.17995 1.62481 -0.232215 0.924273 -0.00134944 -0.381731 + 2.2027 1.58923 -0.146599 0.946364 -0.21384 -0.242214 + 2.23459 1.63726 -0.042976 0.871473 -0.480251 0.0994638 + 2.18673 1.53689 -0.099744 0.89042 -0.438547 0.121769 + 2.15307 1.44336 -0.175734 0.923469 -0.377588 0.0680578 + 2.13064 1.67626 -0.328739 0.908047 0.137683 -0.395594 + 2.17853 1.69854 -0.236123 0.852335 0.0211165 -0.52257 + 2.20713 1.69783 -0.193899 0.838437 -0.0222997 -0.544542 + 2.25308 1.68695 -0.118641 0.913854 -0.256464 -0.314797 + 2.28498 1.73488 -0.015069 0.863761 -0.501686 -0.0472033 + 2.08649 1.75651 -0.414333 0.941138 0.149615 -0.303108 + 2.1181 1.74126 -0.341513 0.899235 0.173892 -0.401419 + 2.166 1.76363 -0.248856 0.814259 0.2293 -0.533295 + 2.25276 1.80374 -0.126729 0.74387 0.255286 -0.617646 + 2.28136 1.80294 -0.084555 0.80767 -0.122768 -0.576712 + 2.1182 1.78343 -0.313159 0.84332 0.437863 -0.311589 + 2.14095 1.79924 -0.241539 0.524803 0.72091 -0.452627 + 2.17356 1.80731 -0.204712 0.475833 0.696268 -0.537395 + 2.17591 1.86453 -0.096423 -0.0647697 0.957956 -0.27951 + 2.20852 1.87268 -0.059546 0.0192487 0.925546 -0.378146 + 2.26032 1.84742 -0.082585 0.339512 0.733387 -0.588961 + 2.30147 1.86921 -0.036331 0.147606 0.602991 -0.783973 + 2.31679 1.83824 -0.046093 0.406966 0.180917 -0.895348 + 2.15513 1.8594 -0.07235 -0.325661 0.872809 -0.363523 + 2.24968 1.89447 -0.013292 0.0940125 0.61456 -0.783248 + 2.33587 1.87955 -0.031042 0.497156 0.502094 -0.707628 + 2.35118 1.84867 -0.040755 0.740308 0.0524998 -0.670215 + 2.04625 1.81044 -0.084535 -0.29816 0.796579 -0.525892 + 2.14399 1.89124 -0.011488 -0.426955 0.672222 -0.604836 + 2.15986 1.95106 0.0341 -0.269385 0.585088 -0.764921 + 2.19351 1.9624 0.028866 -0.19832 0.533223 -0.822401 + 2.23918 1.92694 0.002671 0.000354123 0.505196 -0.863005 + 1.98549 1.76989 -0.0955 -0.587841 0.68839 -0.424925 + 2.06493 1.93633 0.036612 -0.195793 0.646177 -0.737644 + 2.08081 1.99615 0.0822 -0.248424 0.504436 -0.82694 + 2.10964 2.04865 0.097671 -0.238838 0.542146 -0.805627 + 2.14329 2.05998 0.092438 -0.250881 0.672396 -0.696378 + 1.96656 1.69425 -0.164895 -0.762686 0.585145 -0.275527 + 1.90108 1.7297 -0.05469 -0.416517 0.642807 -0.642894 + 2.00417 1.89569 0.025602 -0.345405 0.624199 -0.700765 + 1.9399 1.94676 0.091551 -0.284117 0.614465 -0.73601 + 2.03839 2.02387 0.109794 -0.271635 0.449645 -0.850902 + 1.95085 1.65504 -0.247183 -0.878572 0.446154 -0.170463 + 1.88215 1.65406 -0.124082 -0.780122 0.366224 -0.507238 + 1.85621 1.7471 -0.020024 -0.479762 0.468106 -0.742095 + 1.95931 1.91309 0.060267 -0.320211 0.539667 -0.778604 + 1.97722 1.697 -0.383658 -0.947737 0.305239 0.0928613 + 1.94178 1.60443 -0.321116 -0.898011 0.439216 -0.0257884 + 1.90366 1.58585 -0.184941 -0.92423 0.210981 -0.318253 + 1.92188 1.68619 -0.662742 -0.868341 0.413427 0.273975 + 1.94453 1.65515 -0.450362 -0.889792 0.427568 0.15955 + 1.90903 1.55894 -0.395126 -0.91421 0.39655 0.0834777 + 1.89458 1.53524 -0.258873 -0.954281 0.295487 -0.045118 + 1.88155 1.734 -0.804341 -0.794698 0.347802 0.497482 + 1.87312 1.63301 -0.700431 -0.829292 0.472889 0.297742 + 1.91178 1.60975 -0.524332 -0.903729 0.362156 0.228289 + 1.88306 1.51248 -0.474651 -0.891369 0.404275 0.204997 + 1.88468 1.48434 -0.340922 -0.971865 0.229913 0.0511796 + 1.92426 1.76755 -0.761852 -0.854154 0.29644 0.427252 + 1.81558 1.806 -0.914846 -0.740293 0.142317 0.657048 + 1.8328 1.68082 -0.84203 -0.808046 0.323488 0.492359 + 1.83001 1.59114 -0.762101 -0.826089 0.462812 0.321531 + 1.86867 1.56779 -0.586052 -0.844081 0.45369 0.285819 + 1.85829 1.83954 -0.872349 -0.723624 0.176787 0.667169 + 1.82242 1.95205 -0.922019 -0.597101 0.00831807 0.802123 + 1.78843 2.05003 -0.946326 -0.823241 -0.0835126 0.561516 + 1.77205 1.97564 -0.98287 -0.795458 0.0273482 0.605391 + 1.79158 1.75343 -0.929793 -0.779573 0.181061 0.599569 + 1.89937 1.94763 -0.852761 -0.777405 -0.0751455 0.624496 + 1.78249 2.30397 -0.901962 -0.855789 -0.0775616 0.511478 + 1.76337 2.3391 -0.950211 -0.922985 -0.04299 0.382427 + 1.74699 2.26462 -0.986805 -0.885803 -0.0371201 0.462575 + 1.77868 2.43366 -0.894787 -0.862155 -0.034492 0.505469 + 1.75957 2.4688 -0.943045 -0.945401 0.024567 0.324983 + 1.73501 2.3795 -1.01098 -0.96367 0.0425334 0.263687 + 1.72145 2.09212 -1.04902 -0.872722 -0.00981404 0.488119 + 1.74805 1.92307 -0.997825 -0.782443 0.0616857 0.61966 + 1.79348 2.48173 -0.873041 -0.788227 0.0169487 0.615151 + 1.77315 2.56887 -0.917576 -0.924316 0.0714179 0.374887 + 1.76627 2.60023 -0.951096 -0.966713 0.117521 0.227277 + 1.75268 2.50015 -0.976557 -0.977098 0.084948 0.195096 + 1.78795 2.61693 -0.89583 -0.881208 0.0900346 0.464075 + 1.78612 2.67697 -0.915407 -0.917066 0.240604 0.317962 + -0.978323 1.56018 -2.29297 -0.735672 0.0373439 0.676308 + -0.957668 1.56216 -2.26916 -0.0867878 0.996198 -0.00755631 + -0.921928 1.56547 -2.2434 -0.595457 -0.177077 0.783629 + -0.995792 1.57698 -2.3158 -0.762851 -0.148632 0.629259 + -1.02102 1.49003 -2.36325 -0.778307 -0.263573 0.569883 + -0.986659 1.48947 -2.32574 -0.652615 -0.40069 0.643071 + -0.966005 1.49145 -2.30192 -0.660713 -0.427226 0.6172 + -0.957668 1.56216 -2.26916 -0.662956 -0.188835 0.724452 + -0.924466 1.62071 -2.22722 -0.605303 -0.230266 0.761962 + -0.987141 1.64227 -2.27943 -0.709784 -0.236276 0.663611 + -1.05303 1.60998 -2.37494 -0.902174 -0.190409 0.387074 + -1.03849 1.50683 -2.38608 -0.952761 -0.158236 0.259244 + -1.02274 1.45627 -2.3887 -0.703906 -0.528012 0.475099 + -0.849891 1.58028 -2.18976 -0.503663 -0.297231 0.811158 + -0.928917 1.65604 -2.22124 -0.63435 -0.211001 0.743692 + -0.991591 1.6776 -2.27344 -0.718364 -0.167692 0.675153 + -1.04438 1.67527 -2.33857 -0.839388 -0.127089 0.528465 + -0.847353 1.52504 -2.20593 -0.332792 -0.401038 0.853474 + -0.803225 1.55777 -2.17385 0.0172905 -0.462384 0.886511 + -0.84721 1.6801 -2.14508 -0.474003 -0.234857 0.848624 + -0.843826 1.74823 -2.12572 -0.536354 -0.115995 0.835984 + -0.925533 1.72417 -2.20189 -0.656415 -0.142547 0.74081 + -0.902662 1.50126 -2.24224 -0.434564 -0.472666 0.766642 + -0.858232 1.50344 -2.22114 -0.267051 -0.57633 0.772352 + -0.820847 1.48452 -2.22826 0.0749807 -0.772945 0.630027 + -0.809967 1.50612 -2.21306 0.117651 -0.606083 0.786652 + -0.938402 1.49795 -2.268 -0.586322 -0.401596 0.703525 + -0.929985 1.47636 -2.28303 -0.154777 -0.895837 0.416557 + -0.916757 1.47828 -2.28659 -0.0562905 -0.980846 0.186472 + -0.895943 1.47159 -2.27488 -0.362217 -0.866165 0.344319 + -0.851514 1.47378 -2.25377 -0.152115 -0.848139 0.507466 + -0.957587 1.46986 -2.31696 -0.242345 -0.862889 0.443499 + -0.923997 1.47581 -2.32931 0.213766 -0.956467 0.198684 + -0.91077 1.47773 -2.33286 0.146659 -0.98545 0.0858982 + -0.904677 1.47752 -2.33118 -0.127075 -0.988903 -0.0769603 + -0.883863 1.47083 -2.31947 -0.463197 -0.878129 -0.11974 + -0.965733 1.4575 -2.3428 -0.0335626 -0.810173 0.585229 + -0.932143 1.46345 -2.35515 0.405092 -0.850522 0.33543 + -0.892145 1.48023 -2.36953 0.239076 -0.968836 0.0648013 + -0.886052 1.48002 -2.36785 -0.267837 -0.943374 -0.195724 + -0.988383 1.4557 -2.35119 -0.419168 -0.648732 0.635173 + -0.962566 1.42692 -2.38639 0.211574 -0.901396 0.377786 + -0.945631 1.42706 -2.41825 0.440494 -0.889389 0.122277 + -0.915207 1.4636 -2.38701 0.523848 -0.807688 0.270598 + -0.985216 1.42513 -2.39478 -0.259437 -0.888376 0.378788 + -0.9951 1.42087 -2.41695 -0.331484 -0.919492 0.211313 + -0.978751 1.41416 -2.43431 -0.00302993 -0.999401 0.0344635 + -0.934111 1.43808 -2.46427 0.461561 -0.883787 -0.076694 + -0.88349 1.46958 -2.43114 0.521108 -0.845238 0.118399 + -1.03263 1.45201 -2.41087 -0.884312 -0.430984 0.17957 + -1.02792 1.43867 -2.43989 -0.804007 -0.571435 -0.164423 + -1.01157 1.43196 -2.45725 -0.557874 -0.766235 -0.318841 + -0.967231 1.42517 -2.48034 0.0462574 -0.893403 -0.446869 + -0.908384 1.45247 -2.48527 0.477693 -0.810585 -0.338766 + -1.03378 1.49348 -2.41509 -0.991537 -0.129274 0.011892 + -1.04434 1.51289 -2.45419 -0.974827 -0.205479 -0.0865535 + -1.02199 1.45065 -2.47566 -0.771623 -0.543072 -0.331165 + -0.977657 1.44386 -2.49875 -0.2131 -0.728745 -0.650784 + -0.918406 1.46792 -2.50923 0.456538 -0.66701 -0.588788 + -1.06358 1.62938 -2.41404 -0.995578 -0.0855496 -0.0388107 + -1.05483 1.64907 -2.44998 -0.93666 0.0643339 -0.344282 + -1.04279 1.55116 -2.48648 -0.930687 -0.0742056 -0.35821 + -1.02045 1.48892 -2.50796 -0.762795 -0.378169 -0.52453 + -1.06608 1.70247 -2.37884 -0.987975 0.0566257 0.143871 + -1.05732 1.72216 -2.41478 -0.929807 0.242186 -0.277137 + -1.0388 1.73244 -2.44884 -0.752109 0.349376 -0.55881 + -1.03766 1.66368 -2.47911 -0.738379 0.212933 -0.639887 + -1.02563 1.56577 -2.51562 -0.787121 0.064665 -0.6134 + -1.05047 1.74166 -2.34976 -0.934652 0.113055 0.337112 + -1.05161 1.76093 -2.37974 -0.934433 0.345113 -0.0879335 + -1.0331 1.77121 -2.41381 -0.791675 0.467505 -0.393306 + -1.02877 1.71446 -2.30948 -0.818322 -0.0733619 0.570059 + -1.01603 1.77596 -2.28519 -0.818803 -0.0235674 0.573591 + -1.03164 1.79677 -2.31524 -0.929254 0.133601 0.344439 + -1.03278 1.81604 -2.34523 -0.936369 0.35019 -0.0241015 + -0.978848 1.7391 -2.24915 -0.709422 -0.115477 0.695259 + -0.965064 1.835 -2.2212 -0.730807 -0.0905793 0.676548 + -0.989996 1.85156 -2.25103 -0.828143 0.0130016 0.560365 + -1.0056 1.87237 -2.28108 -0.929679 0.204244 0.306564 + -0.911749 1.82007 -2.17394 -0.640784 -0.149391 0.753046 + -0.931095 1.93246 -2.16816 -0.732297 -0.11865 0.670569 + -0.956027 1.94903 -2.19799 -0.846892 0.010513 0.531661 + -0.965719 1.96289 -2.21997 -0.932072 0.218976 0.288601 + -1.00478 1.88291 -2.30544 -0.908991 0.414745 -0.0414974 + -0.842307 1.78971 -2.12691 -0.559307 -0.0968779 0.82328 + -0.822741 1.87667 -2.09111 -0.526007 -0.246633 0.813934 + -0.892183 1.90702 -2.13813 -0.64141 -0.186451 0.744197 + -0.887574 2.04071 -2.0992 -0.731235 -0.129121 0.669793 + -0.794844 1.75036 -2.09994 -0.0264171 -0.202189 0.97899 + -0.793324 1.79183 -2.10113 -0.0250974 -0.145366 0.98906 + -0.785415 1.86019 -2.07757 -0.00816341 -0.370813 0.928672 + -0.803301 1.97889 -2.0436 -0.537974 -0.279342 0.795331 + -0.848662 2.01527 -2.06917 -0.64428 -0.211466 0.734973 + -0.78226 1.67854 -2.13192 0.250986 -0.265461 0.93088 + -0.770512 1.76357 -2.10983 0.579467 -0.0807575 0.810985 + -0.772874 1.7934 -2.11132 0.600408 -0.105542 0.792698 + -0.764965 1.86176 -2.08775 0.593107 -0.374126 0.71292 + -0.800543 1.65759 -2.12917 0.00205592 -0.182778 0.983152 + -0.760813 1.57338 -2.19175 0.562037 -0.405248 0.721033 + -0.757929 1.69175 -2.14181 0.651087 -0.240095 0.720028 + -0.733084 1.70668 -2.17051 0.817202 -0.157824 0.554322 + -0.742735 1.77732 -2.13783 0.766605 -0.038325 0.640974 + -0.779096 1.55243 -2.18899 0.50512 -0.496959 0.70561 + -0.785838 1.50078 -2.2282 0.411992 -0.688119 0.59729 + -0.763128 1.50201 -2.24492 0.481373 -0.692752 0.537005 + -0.729885 1.58097 -2.2126 0.696314 -0.353577 0.624604 + -0.705041 1.5959 -2.2413 0.917405 -0.187347 0.351096 + -0.81444 1.45243 -2.30017 0.178553 -0.918884 0.35181 + -0.79173 1.45366 -2.31689 0.393858 -0.891762 0.222792 + -0.732201 1.5096 -2.26577 0.71652 -0.593496 0.366554 + -0.727552 1.50758 -2.29468 0.80966 -0.579632 0.0920732 + -0.697095 1.60853 -2.27505 0.970974 -0.149193 0.186951 + -0.845107 1.44169 -2.32568 -0.230677 -0.965962 0.11707 + -0.787081 1.45164 -2.3458 0.470087 -0.880941 0.0544246 + -0.719606 1.52022 -2.32843 0.817049 -0.561168 0.132371 + -0.869282 1.46545 -2.36408 -0.595181 -0.753412 -0.279517 + -0.830525 1.43631 -2.3703 -0.164754 -0.969015 -0.184027 + -0.77798 1.45808 -2.36581 0.548944 -0.83444 0.0486847 + -0.838544 1.47036 -2.40602 -0.475844 -0.68906 -0.546598 + -0.821425 1.44275 -2.39031 -0.140088 -0.908503 -0.393697 + -0.772387 1.45834 -2.39081 0.45948 -0.888067 0.0146243 + -0.714012 1.52048 -2.35343 0.769923 -0.622796 0.139081 + -0.696508 1.54728 -2.34911 0.957258 -0.288905 0.0138323 + -0.855315 1.48492 -2.40979 -0.309046 -0.880299 -0.359949 + -0.837786 1.48875 -2.43245 -0.0879896 -0.845276 -0.527035 + -0.819265 1.478 -2.42592 -0.202526 -0.646646 -0.735413 + -0.802146 1.45039 -2.41021 0.00245151 -0.858773 -0.512351 + -0.739204 1.4759 -2.4068 0.691214 -0.710953 -0.129494 + -0.860427 1.48621 -2.41366 0.200966 -0.979055 -0.032627 + -0.842899 1.49004 -2.43632 0.260622 -0.942107 -0.210977 + -0.839337 1.49281 -2.43923 0.298526 -0.896703 -0.326812 + -0.833691 1.49043 -2.4341 -0.00796357 -0.763876 -0.645313 + -0.815169 1.47968 -2.42758 -0.105872 -0.607902 -0.786922 + -0.857762 1.48397 -2.45214 0.511881 -0.858352 -0.0347629 + -0.8542 1.48674 -2.45505 0.515106 -0.849605 -0.113297 + -0.829639 1.49942 -2.45521 0.302403 -0.935282 -0.183849 + -0.821802 1.49881 -2.44856 0.105673 -0.922353 -0.371616 + -0.816156 1.49644 -2.44343 -0.0263318 -0.810131 -0.585658 + -0.852274 1.49029 -2.4762 0.49115 -0.793029 -0.360384 + -0.827713 1.50296 -2.47636 0.420363 -0.700806 -0.576338 + -0.799746 1.50878 -2.47087 0.361619 -0.634493 -0.683118 + -0.791909 1.50818 -2.46422 0.280423 -0.689507 -0.667789 + -0.862296 1.50574 -2.50017 0.449318 -0.395313 -0.80115 + -0.823302 1.53265 -2.48298 0.410897 -0.153139 -0.898728 + -0.795335 1.53847 -2.47749 0.307128 -0.0294234 -0.951213 + -0.775175 1.53447 -2.46828 0.392769 -0.102806 -0.913873 + -0.783568 1.50665 -2.4605 0.132566 -0.583799 -0.801002 + -0.873375 1.55246 -2.51634 0.601034 -0.153906 -0.784265 + -0.834381 1.57937 -2.49915 0.524368 -0.0215471 -0.851219 + -0.787825 1.60187 -2.46326 0.475107 0.090796 -0.875231 + -0.767666 1.59787 -2.45405 0.634915 0.211303 -0.743124 + -0.766835 1.53293 -2.46456 0.568836 -0.0943859 -0.817017 + -0.898718 1.51097 -2.53465 0.750577 -0.39981 -0.526104 + -0.906936 1.54814 -2.54853 0.666973 -0.145621 -0.730713 + -0.881593 1.58963 -2.53022 0.624693 0.0651682 -0.778146 + -0.856116 1.63222 -2.50569 0.509991 0.178057 -0.841549 + -0.80956 1.65472 -2.4698 0.570199 0.200911 -0.79656 + -0.94644 1.46103 -2.5276 0.198247 -0.852294 -0.484038 + -0.926752 1.50408 -2.55302 0.524936 -0.451182 -0.721718 + -0.938077 1.51208 -2.56524 0.223468 -0.262323 -0.938749 + -0.91826 1.55614 -2.56075 0.399215 0.0428475 -0.915856 + -0.969331 1.45617 -2.51773 -0.152062 -0.801907 -0.577774 + -0.965799 1.50478 -2.56146 -0.191097 -0.30805 -0.93198 + -1.01213 1.50124 -2.52694 -0.737201 -0.30711 -0.601845 + -0.988691 1.49992 -2.55159 -0.499773 -0.35886 -0.788319 + -0.971973 1.56406 -2.55641 -0.321586 0.181791 -0.929265 + -0.944251 1.57137 -2.56018 -0.0446945 0.23323 -0.971394 + -0.911747 1.64053 -2.53192 0.30084 0.302379 -0.904468 + -1.00219 1.56445 -2.54027 -0.600184 0.143902 -0.786811 + -0.972498 1.66507 -2.51892 -0.339214 0.34905 -0.873555 + -0.937738 1.65575 -2.53135 -0.0166662 0.352514 -0.935658 + -0.886271 1.68311 -2.50739 0.35738 0.274521 -0.892702 + -1.00271 1.66546 -2.50279 -0.500502 0.310935 -0.807971 + -0.964559 1.72626 -2.49555 -0.276415 0.374294 -0.885155 + -0.929799 1.71694 -2.50798 0.0111196 0.449004 -0.893461 + -0.862776 1.70508 -2.49231 0.432013 0.303466 -0.849278 + -1.00386 1.73423 -2.47251 -0.489415 0.318101 -0.811963 + -0.962286 1.76365 -2.48349 -0.200547 0.42083 -0.884694 + -0.906304 1.73891 -2.4929 0.207584 0.432738 -0.877295 + -0.827699 1.73417 -2.4562 0.525142 0.363281 -0.76958 + -1.00159 1.77161 -2.46045 -0.540087 0.462084 -0.703409 + -0.987716 1.82698 -2.4258 -0.574031 0.540817 -0.614822 + -0.95015 1.82306 -2.44983 -0.17298 0.542358 -0.822147 + -0.894168 1.79832 -2.45924 0.261396 0.454127 -0.851728 + -0.833309 1.79061 -2.43007 0.507059 0.401788 -0.762534 + -1.01923 1.82657 -2.37916 -0.805096 0.481279 -0.346685 + -0.99123 1.89345 -2.33937 -0.814683 0.50723 -0.281085 + -0.968212 1.90539 -2.37411 -0.614985 0.575999 -0.538534 + -0.930646 1.90147 -2.39814 -0.214773 0.59214 -0.776687 + -0.954505 1.98373 -2.26926 -0.808143 0.543176 -0.227737 + -0.931487 1.99567 -2.304 -0.615686 0.644897 -0.452812 + -0.904952 1.99817 -2.32179 -0.254399 0.684437 -0.683247 + -0.890894 1.89819 -2.40346 0.176766 0.528986 -0.830016 + -0.830036 1.89047 -2.37428 0.530299 0.447076 -0.720351 + -0.964897 1.97343 -2.24433 -0.902333 0.430659 -0.0181286 + -0.901535 2.09321 -2.17986 -0.786094 0.58543 -0.198312 + -0.885057 2.10202 -2.20443 -0.598458 0.68725 -0.411746 + -0.858522 2.10453 -2.22223 -0.212597 0.734758 -0.644153 + -0.8652 1.99489 -2.32711 0.225469 0.599496 -0.767964 + -0.91318 2.07301 -2.13887 -0.921443 0.240205 0.30536 + -0.911928 2.08291 -2.15493 -0.888448 0.45875 0.0144434 + -0.846882 2.19034 -2.0862 -0.757821 0.633696 -0.155358 + -0.830403 2.19916 -2.11077 -0.558099 0.738657 -0.378035 + -0.903487 2.05914 -2.11689 -0.839413 0.0153026 0.543278 + -0.855559 2.1726 -2.05312 -0.901624 0.272233 0.336101 + -0.854308 2.1825 -2.06918 -0.861094 0.50607 0.0490848 + -0.784599 2.27812 -1.99735 -0.723949 0.679316 -0.120111 + -0.833506 2.14229 -2.0213 -0.7259 -0.122689 0.676769 + -0.849419 2.16073 -2.03899 -0.828673 0.0347784 0.558651 + -0.79287 2.26359 -1.96948 -0.87785 0.31294 0.362557 + -0.792025 2.27028 -1.98033 -0.831938 0.548371 0.084665 + -0.807843 2.11933 -2.00318 -0.645171 -0.210074 0.73459 + -0.775984 2.23927 -1.94341 -0.714757 -0.0973061 0.692571 + -0.78673 2.25172 -1.95535 -0.811373 0.0620697 0.581224 + -0.753638 2.31157 -1.92174 -0.735604 0.484882 0.47305 + -0.752792 2.31826 -1.93259 -0.680276 0.703568 0.205468 + -0.762482 2.08295 -1.97761 -0.537501 -0.292838 0.790783 + -0.719688 2.19174 -1.90802 -0.530579 -0.273299 0.802368 + -0.75032 2.21631 -1.92529 -0.633662 -0.191531 0.749525 + -0.721864 2.27609 -1.88848 -0.530824 0.00852193 0.847439 + -0.738832 2.29127 -1.90046 -0.603796 0.0915941 0.791859 + -0.765975 1.96241 -2.03005 -0.0227249 -0.454939 0.890233 + -0.737599 2.0674 -1.97035 -0.0462216 -0.50535 0.861676 + -0.694806 2.17619 -1.90076 -0.0208488 -0.497499 0.867214 + -0.691231 2.25153 -1.8712 -0.399405 -0.0527992 0.915253 + -0.751927 1.96167 -2.03831 0.57048 -0.469926 0.673589 + -0.723551 2.06666 -1.9786 0.54645 -0.554354 0.62776 + -0.685319 2.17569 -1.90633 0.545468 -0.553316 0.629529 + -0.665293 2.24074 -1.87198 0.616946 -0.229921 0.752671 + -0.67478 2.24124 -1.86641 0.0906377 -0.201489 0.975288 + -0.743434 1.86794 -2.11017 0.771105 -0.326619 0.546551 + -0.730396 1.96785 -2.06072 0.757156 -0.414665 0.504745 + -0.708674 2.0705 -1.99447 0.730836 -0.504805 0.459402 + -0.670442 2.17954 -1.9222 0.731534 -0.50667 0.456228 + -0.745097 1.80715 -2.13932 0.782187 -0.101768 0.614676 + -0.713282 1.88189 -2.15177 0.919165 -0.215541 0.329664 + -0.708922 1.97778 -2.09036 0.904023 -0.306665 0.297823 + -0.687199 2.08044 -2.0241 0.885236 -0.395453 0.244895 + -0.65594 2.18625 -1.94222 0.8797 -0.405933 0.247681 + -0.714945 1.8211 -2.18093 0.908057 0.0103445 0.418719 + -0.705524 1.89749 -2.18565 0.999195 0.00369994 -0.0399548 + -0.701163 1.99338 -2.12423 0.99554 -0.0675015 -0.0658986 + -0.681391 2.09276 -2.04693 0.981635 -0.155672 -0.110267 + -0.706562 1.80358 -2.18817 0.901448 0.0921141 0.422974 + -0.696663 1.81764 -2.23517 0.96056 0.278069 0.00165307 + -0.705046 1.83516 -2.22793 0.973749 0.22752 -0.00694964 + -0.718511 1.91654 -2.22502 0.886919 0.240021 -0.39467 + -0.708769 2.01287 -2.1491 0.898348 0.18185 -0.399876 + -0.696911 1.73294 -2.22085 0.936618 -0.0934312 0.337665 + -0.690782 1.74648 -2.26215 0.996843 0.0634328 -0.0477425 + -0.710402 1.81461 -2.29184 0.862524 0.32148 -0.390772 + -0.718033 1.85421 -2.2673 0.862475 0.331309 -0.382586 + -0.690965 1.62207 -2.31635 0.998923 -0.0164482 -0.0433782 + -0.704521 1.74345 -2.31883 0.910927 0.204912 -0.358082 + -0.748398 1.76289 -2.37486 0.682017 0.34605 -0.644284 + -0.754009 1.81933 -2.34872 0.681665 0.404008 -0.610008 + -0.761639 1.85892 -2.32418 0.695985 0.433864 -0.572159 + -0.696827 1.64032 -2.34079 0.954217 0.102061 -0.281164 + -0.711705 1.63495 -2.37702 0.851026 0.138091 -0.506642 + -0.719399 1.73808 -2.35506 0.802015 0.338053 -0.492434 + -0.70237 1.56553 -2.37354 0.921939 -0.00122586 -0.387333 + -0.719395 1.57264 -2.40035 0.810744 0.0651058 -0.581769 + -0.745485 1.659 -2.4139 0.723251 0.197655 -0.661695 + -0.774483 1.6838 -2.4337 0.635835 0.256915 -0.72781 + -0.721699 1.50269 -2.40248 0.885695 -0.348526 -0.306716 + -0.738725 1.5098 -2.42928 0.774464 -0.152584 -0.613941 + -0.753175 1.59668 -2.43723 0.744829 0.155501 -0.648883 + -0.756482 1.47811 -2.43653 0.416224 -0.613345 -0.671242 + -0.752344 1.53175 -2.44773 0.778281 -0.026552 -0.627355 + -0.768963 1.46795 -2.4262 0.166699 -0.821156 -0.545816 + -0.802688 1.48985 -2.43791 -0.105407 -0.689741 -0.716343 + -0.770101 1.50006 -2.45498 0.286894 -0.491131 -0.822485 + -0.820298 1.97496 -2.31063 0.563242 0.456573 -0.688694 + -0.751901 1.94341 -2.26053 0.733487 0.358551 -0.577441 + -0.78673 2.07714 -2.21228 0.592425 0.450911 -0.667617 + -0.742159 2.03974 -2.18461 0.74734 0.340538 -0.57054 + -0.688997 2.11225 -2.0718 0.893224 0.123075 -0.432439 + -0.831632 2.09707 -2.22876 0.256402 0.629752 -0.733261 + -0.75542 2.17348 -2.12149 0.60167 0.431034 -0.67246 + -0.710849 2.13608 -2.09381 0.750729 0.296103 -0.590532 + -0.655268 2.21173 -1.98184 0.897818 0.111921 -0.425907 + -0.650131 2.19857 -1.96504 0.980032 -0.161755 -0.11564 + -0.812239 2.19972 -2.1238 -0.187112 0.768747 -0.611569 + -0.785349 2.19226 -2.13034 0.282734 0.632751 -0.720894 + -0.707219 2.26081 -2.02254 0.612771 0.434798 -0.659896 + -0.67712 2.23555 -2.00384 0.750541 0.302056 -0.587751 + -0.64225 2.2713 -1.93437 0.917244 0.28733 -0.275871 + -0.755307 2.28464 -2.02698 -0.157226 0.801736 -0.576628 + -0.737148 2.2796 -2.03139 0.292386 0.657328 -0.694573 + -0.686797 2.31231 -1.96761 0.634707 0.572917 -0.518568 + -0.656699 2.28706 -1.94892 0.783717 0.435912 -0.442458 + -0.773471 2.28407 -2.01394 -0.529881 0.778732 -0.335862 + -0.724745 2.32977 -1.96905 -0.072796 0.913511 -0.400248 + -0.706586 2.32474 -1.97346 0.349314 0.770202 -0.533637 + -0.701295 2.32979 -1.95471 0.407993 0.909048 -0.0846973 + -0.681506 2.31737 -1.94886 0.622813 0.776928 -0.0921282 + -0.747882 2.32345 -1.94384 -0.580374 0.81407 0.0213808 + -0.736754 2.3294 -1.96044 -0.394038 0.90037 -0.184573 + -0.712922 2.33301 -1.95189 0.152201 0.98824 0.0147047 + -0.702805 2.32088 -1.92498 0.27044 0.870804 0.410564 + -0.691178 2.31766 -1.92781 0.413452 0.840047 0.351253 + -0.732056 2.32883 -1.93265 -0.165332 0.941457 0.293808 + -0.724931 2.33264 -1.94327 -0.0686573 0.982872 0.171023 + -0.736966 2.32364 -1.92139 -0.244051 0.874902 0.418313 + -0.70993 2.31707 -1.91436 0.201495 0.844749 0.495781 + -0.737508 2.31936 -1.91445 -0.294043 0.749937 0.592564 + -0.710472 2.31279 -1.90741 0.164396 0.784888 0.597431 + -0.668617 2.29306 -1.90509 0.481994 0.723886 0.493629 + -0.671906 2.30149 -1.91584 0.479355 0.787921 0.386522 + -0.662234 2.30119 -1.93689 0.700092 0.712291 -0.0501296 + -0.749578 2.30373 -1.9124 -0.689121 0.259375 0.676637 + -0.733448 2.31151 -1.9051 -0.284337 0.59437 0.752248 + -0.726568 2.30354 -1.89746 -0.241862 0.496269 0.833798 + -0.703591 2.30482 -1.89977 0.188003 0.735029 0.65145 + -0.709599 2.28836 -1.88548 -0.18386 0.433298 0.882297 + -0.683977 2.28909 -1.88871 0.261307 0.695252 0.669585 + -0.689985 2.27263 -1.87442 -0.112013 0.404329 0.907729 + -0.673534 2.26235 -1.86962 0.222924 0.348046 0.910587 + -0.677903 2.28876 -1.89228 0.417893 0.701664 0.57709 + -0.66746 2.26203 -1.87319 0.563196 0.358057 0.744718 + -0.657623 2.26457 -1.88368 0.65981 0.377538 0.649705 + -0.648337 2.26887 -1.89649 0.740199 0.40184 0.5391 + -0.644497 2.27701 -1.91159 0.813221 0.500292 0.297287 + -0.647785 2.28544 -1.92234 0.783983 0.614324 0.0893147 + -0.655456 2.24329 -1.88247 0.77951 -0.194699 0.595363 + -0.640954 2.24999 -1.90248 0.914357 -0.116579 0.387764 + -0.637114 2.25814 -1.91758 0.996337 0.0638149 0.0569169 + 0.836968 1.58108 -2.53408 -0.529244 -0.278961 -0.8013 + 0.849002 1.58689 -2.54405 -0.231101 -0.923839 -0.305145 + 0.870453 1.57278 -2.5533 -0.161916 -0.811215 0.561883 + 0.858967 1.55925 -2.59536 -0.480914 -0.834799 0.268014 + 0.892878 1.52828 -2.6236 -0.3311 -0.925079 0.186016 + 0.907121 1.53929 -2.58384 -0.0693211 -0.836373 0.54376 + 0.917493 1.56796 -2.55886 0.40571 -0.477343 0.77945 + 0.880826 1.60145 -2.52833 0.306076 -0.477655 0.823507 + 0.853085 1.62012 -2.50619 0.44327 -0.399519 0.802432 + 0.82717 1.59283 -2.50967 0.356478 -0.630121 0.689834 + 0.836968 1.58108 -2.53408 0.300681 -0.889637 0.34371 + 0.837516 1.57337 -2.58611 -0.143927 -0.947201 0.286522 + 0.846625 1.56037 -2.63923 -0.487877 -0.87038 0.0664382 + 0.880536 1.52939 -2.66746 -0.376819 -0.916215 -0.136225 + 0.920106 1.53063 -2.67928 0.25347 -0.92227 -0.291841 + 0.920658 1.52071 -2.64289 0.146261 -0.984981 -0.0917605 + 0.831839 1.57414 -2.58139 0.293109 -0.940601 0.171338 + 0.825704 1.57004 -2.59471 0.15939 -0.987205 0.00451157 + 0.831381 1.56927 -2.59942 -0.046646 -0.987739 0.148982 + 0.819805 1.56833 -2.57142 0.461567 -0.886976 0.0151249 + 0.800317 1.56093 -2.58798 0.33693 -0.920816 -0.196407 + 0.824463 1.57049 -2.59732 0.065448 -0.989332 -0.130146 + 0.819686 1.57149 -2.61797 0.0288438 -0.996895 -0.0732735 + 0.826604 1.57027 -2.62008 -0.291709 -0.956182 0.0249299 + 0.78938 1.55013 -2.54623 0.299884 -0.920252 0.251408 + 0.769892 1.54273 -2.56278 0.119963 -0.989273 0.083352 + 0.73635 1.54179 -2.59341 -0.00512646 -0.999904 -0.012889 + 0.799076 1.56137 -2.59059 0.274611 -0.92913 -0.247601 + 0.779582 1.56188 -2.52182 0.125974 -0.800099 0.586491 + 0.749654 1.56542 -2.51827 -0.173842 -0.78436 0.595448 + 0.725127 1.55751 -2.54698 -0.31064 -0.85028 0.424883 + 0.691584 1.55657 -2.57761 -0.497564 -0.834238 0.237648 + 0.721856 1.54442 -2.62195 -0.088708 -0.988174 -0.125074 + 0.780614 1.61533 -2.47378 0.161607 -0.480563 0.861941 + 0.750687 1.61887 -2.47023 -0.113863 -0.503501 0.856459 + 0.707459 1.60697 -2.49548 -0.482508 -0.520281 0.704623 + 0.682931 1.59906 -2.52419 -0.5862 -0.583065 0.562499 + 0.806529 1.64262 -2.4703 0.324654 -0.309088 0.893904 + 0.808238 1.67943 -2.46158 0.405139 -0.269722 0.873563 + 0.753714 1.67357 -2.44263 -0.0881242 -0.288874 0.953303 + 0.710487 1.66167 -2.46787 -0.423221 -0.374537 0.824989 + 0.883239 1.67101 -2.50788 0.520974 -0.222013 0.824194 + 0.884948 1.70783 -2.49917 0.520417 -0.0886289 0.849301 + 0.885501 1.73942 -2.50075 0.57843 -0.174445 0.796861 + 0.825457 1.74618 -2.44792 0.484661 -0.335141 0.80795 + 0.770933 1.74032 -2.42897 0.206856 -0.404116 0.891011 + 0.91098 1.65235 -2.53002 0.593177 -0.208412 0.777628 + 0.932378 1.72366 -2.53138 0.622406 -0.100417 0.776226 + 0.932931 1.75525 -2.53296 0.557635 -0.103001 0.823671 + 0.930384 1.78543 -2.5186 0.663167 -0.368326 0.651572 + 0.890599 1.77759 -2.4862 0.595131 -0.436902 0.674489 + 0.937477 1.56351 -2.58027 0.750783 -0.325756 0.574637 + 0.930964 1.6479 -2.55143 0.743431 -0.188964 0.641563 + 0.93984 1.68266 -2.55103 0.721776 -0.21694 0.657249 + 0.96552 1.74357 -2.55903 0.760425 -0.111008 0.639868 + 0.952752 1.77705 -2.54377 0.731841 -0.131457 0.668676 + 0.9349 1.53172 -2.60313 0.49009 -0.786692 0.375403 + 0.960761 1.58365 -2.61395 0.923558 -0.230741 0.306268 + 0.969637 1.61842 -2.61355 0.847841 -0.275641 0.452976 + 0.972983 1.70257 -2.57868 0.819259 -0.171981 0.547026 + 0.958184 1.55185 -2.63682 0.885324 -0.463885 0.0318226 + 0.957632 1.56178 -2.6732 0.80879 -0.587373 -0.0291866 + 0.986209 1.61679 -2.64923 0.910859 -0.341267 0.232106 + 0.989555 1.70095 -2.61435 0.906179 -0.182344 0.381562 + 0.987338 1.76658 -2.58585 0.858615 -0.0559184 0.509562 + 0.96237 1.56839 -2.71456 0.676905 -0.694211 -0.244687 + 0.990947 1.6234 -2.69058 0.952436 -0.304419 -0.0139587 + 1.00914 1.71738 -2.65557 0.97822 -0.14128 0.152072 + 1.00693 1.78301 -2.62707 0.966659 0.0356724 0.253569 + 0.907131 1.55762 -2.73451 0.0904279 -0.865588 -0.492524 + 0.912271 1.57791 -2.76563 0.193799 -0.752384 -0.629572 + 0.967511 1.58868 -2.74568 0.686138 -0.576451 -0.443755 + 0.990624 1.64064 -2.72722 0.944689 -0.219302 -0.243862 + 1.00882 1.73461 -2.6922 0.971831 0.0351207 -0.233048 + 0.867561 1.55638 -2.72269 -0.333967 -0.869329 -0.364325 + 0.886801 1.59359 -2.78687 0.0484448 -0.69519 -0.717192 + 0.96149 1.61897 -2.77657 0.631099 -0.349328 -0.692592 + 0.984603 1.67093 -2.75811 0.85292 -0.0351305 -0.520858 + 0.835961 1.56237 -2.67765 -0.422165 -0.899461 -0.112901 + 0.821584 1.58909 -2.72284 -0.577195 -0.741375 -0.342358 + 0.853184 1.5831 -2.76788 -0.337355 -0.796361 -0.501998 + 0.815939 1.57227 -2.6585 -0.281784 -0.95886 -0.0344407 + 0.80924 1.57376 -2.67852 0.0286495 -0.967249 -0.252208 + 0.806055 1.59391 -2.7076 -0.388355 -0.778758 -0.492663 + 0.812135 1.63108 -2.78261 -0.707527 -0.461325 -0.535336 + 0.828764 1.61901 -2.79522 -0.524726 -0.545668 -0.653383 + 0.808282 1.57371 -2.65728 0.0102338 -0.997671 -0.0674312 + 0.801583 1.5752 -2.67731 0.0205262 -0.985793 -0.166709 + 0.801867 1.57579 -2.67967 0.00979677 -0.909811 -0.414907 + 0.798681 1.59594 -2.70875 0.0660528 -0.814171 -0.576856 + 0.796606 1.6359 -2.76737 -0.555843 -0.550282 -0.62308 + 0.784583 1.564 -2.61912 0.258324 -0.950155 -0.174565 + 0.773179 1.56623 -2.65844 0.224088 -0.959351 -0.171553 + 0.772061 1.57169 -2.68612 0.196159 -0.958583 -0.206494 + 0.772345 1.57227 -2.68849 0.26389 -0.891924 -0.367198 + 0.710069 1.55321 -2.66353 -0.148991 -0.973818 -0.171698 + 0.708951 1.55867 -2.69122 -0.245517 -0.893039 -0.377098 + 0.727387 1.56891 -2.7187 -0.0782791 -0.839603 -0.537531 + 0.734684 1.58857 -2.74297 -0.0566682 -0.63082 -0.773857 + 0.779641 1.59193 -2.71276 0.340283 -0.759882 -0.553884 + 0.671648 1.56884 -2.61368 -0.625943 -0.778312 0.0492529 + 0.659861 1.57763 -2.65526 -0.737212 -0.640644 -0.214694 + 0.667228 1.59578 -2.68959 -0.752914 -0.411699 -0.513443 + 0.685665 1.60601 -2.71707 -0.68077 -0.34087 -0.648352 + 0.706759 1.60945 -2.73933 -0.543492 -0.296008 -0.785491 + 0.627933 1.62419 -2.59563 -0.911088 -0.408095 0.0581156 + 0.628581 1.65253 -2.63233 -0.947183 -0.205286 -0.246379 + 0.635948 1.67068 -2.66666 -0.883542 -0.122301 -0.452101 + 0.658122 1.69592 -2.69818 -0.766696 0.0031688 -0.642002 + 0.679217 1.69936 -2.72044 -0.60579 0.089137 -0.790615 + 0.647869 1.61192 -2.55956 -0.765996 -0.521087 0.376455 + 0.632771 1.68983 -2.52035 -0.78935 -0.323772 0.52163 + 0.607579 1.71319 -2.55455 -0.966156 -0.189301 0.175234 + 0.608227 1.74153 -2.59125 -0.991388 -0.088012 -0.096973 + 0.612124 1.75432 -2.62735 -0.939314 -0.00908203 -0.342937 + 0.667834 1.67697 -2.48499 -0.618388 -0.348957 0.704149 + 0.690167 1.76568 -2.43545 -0.52172 -0.358107 0.774317 + 0.635957 1.81583 -2.45391 -0.735904 -0.295343 0.609276 + 0.610765 1.83919 -2.48811 -0.915532 -0.185415 0.356964 + 0.732821 1.75039 -2.41834 -0.17546 -0.43856 0.881407 + 0.743447 1.80265 -2.39067 -0.177277 -0.554538 0.813056 + 0.697106 1.83315 -2.39531 -0.522479 -0.473941 0.708799 + 0.642895 1.8833 -2.41377 -0.734475 -0.356784 0.57728 + 0.78156 1.79259 -2.4013 0.24011 -0.578732 0.779369 + 0.783061 1.81933 -2.37746 0.237475 -0.558674 0.794663 + 0.744899 1.82951 -2.36703 -0.169312 -0.551006 0.817145 + 0.698558 1.86001 -2.37167 -0.518317 -0.457142 0.722751 + 0.830554 1.78436 -2.43336 0.469313 -0.50653 0.723307 + 0.832056 1.8111 -2.40953 0.481788 -0.512384 0.710875 + 0.78561 1.86204 -2.35542 0.304196 -0.392347 0.86806 + 0.747448 1.87221 -2.34499 -0.0968603 -0.380952 0.919507 + 0.703661 1.89229 -2.35301 -0.443742 -0.315421 0.83881 + 0.891714 1.80518 -2.46391 0.584491 -0.464796 0.665083 + 0.890927 1.85616 -2.43603 0.625132 -0.338618 0.703241 + 0.831269 1.86208 -2.38165 0.535945 -0.351631 0.76754 + 0.786437 1.92585 -2.33228 0.317231 -0.374022 0.871477 + 0.931499 1.81302 -2.49631 0.685991 -0.419362 0.594602 + 0.927125 1.86591 -2.46471 0.676861 -0.311731 0.666846 + 0.884337 1.94192 -2.39379 0.623156 -0.304589 0.720349 + 0.832096 1.92589 -2.35851 0.537725 -0.320904 0.779661 + 0.951119 1.83526 -2.50792 0.815294 -0.309731 0.489247 + 0.946745 1.88814 -2.47632 0.799019 -0.214216 0.561854 + 0.933809 1.95831 -2.43594 0.814003 -0.175048 0.553857 + 0.920535 1.95166 -2.42247 0.698709 -0.268539 0.663093 + 0.871366 2.01493 -2.35083 0.614805 -0.326722 0.717821 + 0.950205 1.80722 -2.5294 0.806295 -0.292485 0.514141 + 0.967303 1.83543 -2.5493 0.906405 -0.180151 0.382067 + 0.968217 1.86347 -2.52782 0.918564 -0.192238 0.345377 + 0.960645 1.90798 -2.49709 0.905291 -0.092692 0.414555 + 0.974569 1.80005 -2.57059 0.84144 -0.0289492 0.539574 + 0.982019 1.86931 -2.57694 0.974105 -0.0520607 0.22002 + 0.982453 1.8984 -2.55738 0.978268 -0.059994 0.198475 + 0.97488 1.94291 -2.52665 0.959882 0.0580655 0.274326 + 0.989285 1.83393 -2.59822 0.949207 0.0791123 0.304544 + 0.984638 1.89665 -2.60977 0.994851 0.0930935 -0.0400536 + 0.985072 1.92573 -2.59022 0.992818 0.117399 -0.0230152 + 0.976227 1.96522 -2.5583 0.968177 0.245205 0.050083 + 0.956177 1.99368 -2.48517 0.961038 0.109783 0.253678 + 1.00836 1.80441 -2.66154 0.964083 0.230153 -0.132563 + 0.99072 1.85533 -2.63269 0.977796 0.209208 -0.0120721 + 0.975678 1.9163 -2.64574 0.938999 0.220034 -0.264322 + 0.975559 1.9466 -2.6284 0.934168 0.263886 -0.240196 + 0.966714 1.98608 -2.59648 0.907218 0.393033 -0.149937 + 0.98876 1.82 -2.69461 0.856976 0.286266 -0.428536 + 0.98176 1.87498 -2.66866 0.911828 0.264892 -0.313692 + 0.960655 1.93025 -2.67183 0.763613 0.325428 -0.557666 + 0.960536 1.96055 -2.6545 0.773513 0.411801 -0.481766 + 0.989218 1.75021 -2.72527 0.836597 0.193717 -0.512424 + 0.967167 1.83358 -2.72033 0.682186 0.333391 -0.650748 + 0.960167 1.88856 -2.69438 0.71344 0.349019 -0.60761 + 0.939981 1.93761 -2.6864 0.449762 0.420299 -0.788076 + 0.939594 1.96849 -2.67014 0.428185 0.548653 -0.718079 + 0.959759 1.68877 -2.78486 0.66902 0.0857639 -0.73828 + 0.964374 1.76805 -2.75202 0.665187 0.286628 -0.689471 + 0.930033 1.84529 -2.73959 0.356475 0.425539 -0.831771 + 0.939493 1.89591 -2.70895 0.426344 0.422212 -0.79998 + 0.894775 1.92671 -2.70593 0.193933 0.417535 -0.887724 + 0.93602 1.63465 -2.79782 0.474063 -0.30298 -0.826721 + 0.92314 1.70255 -2.80862 0.416158 0.195859 -0.887948 + 0.92724 1.77977 -2.77129 0.407635 0.381528 -0.82962 + 0.895508 1.7952 -2.77479 0.0612267 0.434692 -0.898496 + 0.886814 1.83889 -2.75243 -0.0258629 0.491093 -0.870723 + 0.899401 1.64843 -2.82158 0.219461 -0.216447 -0.951308 + 0.891408 1.71798 -2.81212 0.0331725 0.35334 -0.934907 + 0.853578 1.78375 -2.77168 -0.274737 0.406796 -0.871227 + 0.844884 1.82745 -2.74932 -0.141503 0.332949 -0.932267 + 0.896273 1.88951 -2.72178 0.120896 0.43092 -0.894255 + 0.862381 1.6295 -2.81421 -0.150587 -0.418167 -0.895801 + 0.840681 1.667 -2.81473 -0.305041 0.0662291 -0.950034 + 0.877702 1.68593 -2.82211 -0.053599 0.177384 -0.982681 + 0.839872 1.7517 -2.78167 -0.333201 0.384723 -0.860793 + 0.785028 1.76407 -2.74993 -0.352535 0.220555 -0.909436 + 0.822798 1.66471 -2.80807 -0.511128 -0.0265206 -0.859095 + 0.806169 1.67678 -2.79547 -0.583979 0.0337159 -0.811068 + 0.821988 1.74942 -2.77501 -0.391889 0.391583 -0.832518 + 0.798455 1.68053 -2.78978 -0.573549 0.0465163 -0.81785 + 0.814274 1.75317 -2.76932 -0.550827 0.26096 -0.792773 + 0.791942 1.67972 -2.78532 -0.57781 0.0178925 -0.815975 + 0.806332 1.74827 -2.76421 -0.558725 0.207544 -0.802964 + 0.790093 1.63509 -2.76291 -0.0450581 -0.654894 -0.754376 + 0.783999 1.67483 -2.78021 -0.520899 0.00297168 -0.853613 + 0.766685 1.66096 -2.76934 -0.45916 0.0390612 -0.887495 + 0.745381 1.67676 -2.75506 -0.413751 0.191193 -0.890087 + 0.771053 1.63108 -2.76692 -0.0260312 -0.453194 -0.891032 + 0.753738 1.61722 -2.75605 -0.3947 -0.145953 -0.907144 + 0.725814 1.6381 -2.75241 -0.413907 -0.0494596 -0.908974 + 0.698784 1.73801 -2.7231 -0.482258 0.193695 -0.854347 + 0.634298 1.77956 -2.65887 -0.803022 0.0927684 -0.588685 + 0.70475 1.77673 -2.71907 -0.465112 0.121587 -0.876862 + 0.790993 1.80279 -2.74591 -0.195927 0.110458 -0.974377 + 0.602519 1.85409 -2.57044 -0.989775 -0.0171107 -0.141611 + 0.60743 1.84952 -2.60037 -0.940452 -0.0136382 -0.339653 + 0.625217 1.86462 -2.62128 -0.741903 0.261455 -0.617432 + 0.652085 1.79466 -2.67979 -0.690009 0.0510876 -0.721996 + 0.598621 1.84131 -2.53434 -0.993402 -0.0891303 0.0721672 + 0.599069 1.91403 -2.49513 -0.991341 0.0147544 0.130479 + 0.59704 1.91508 -2.53562 -0.994661 0.0833361 -0.0608726 + 0.601951 1.91051 -2.56554 -0.917656 0.185892 -0.351216 + 0.611212 1.91192 -2.4489 -0.902772 -0.222533 0.368078 + 0.611993 1.94024 -2.42795 -0.930858 -0.0550729 0.361208 + 0.606495 1.95083 -2.4826 -0.975055 0.202647 0.0905612 + 0.604467 1.95189 -2.52309 -0.957179 0.280245 -0.072603 + 0.643676 1.91163 -2.39283 -0.727034 -0.314237 0.610472 + 0.620815 1.96969 -2.40936 -0.905041 0.145275 0.399743 + 0.615318 1.98028 -2.46401 -0.950925 0.289127 0.110213 + 0.616228 1.99017 -2.50007 -0.906227 0.416864 -0.070542 + 0.609082 1.94796 -2.55421 -0.851563 0.370101 -0.371302 + 0.64878 1.9439 -2.37416 -0.698782 -0.156308 0.698048 + 0.632582 1.99022 -2.39685 -0.935138 0.0330864 0.352735 + 0.63063 2.01243 -2.43561 -0.979628 0.181901 0.0850901 + 0.631541 2.02232 -2.47167 -0.948994 0.311316 -0.0499301 + 0.620843 1.98625 -2.53119 -0.79502 0.509016 -0.329918 + 0.710074 1.94569 -2.33546 -0.440496 -0.369597 0.818145 + 0.660547 1.96443 -2.36165 -0.676542 -0.246812 0.693811 + 0.635489 2.025 -2.36662 -0.945593 -0.235756 0.224217 + 0.633538 2.0472 -2.40539 -0.999492 -0.0199863 -0.0248049 + 0.63553 2.06394 -2.43221 -0.985003 0.0954169 -0.143749 + 0.753861 1.92561 -2.32744 -0.0779226 -0.387061 0.918756 + 0.70905 1.98909 -2.30845 -0.435597 -0.536 0.723159 + 0.659523 2.00784 -2.33464 -0.696934 -0.465806 0.545259 + 0.62777 2.06848 -2.32943 -0.934597 -0.315599 0.16409 + 0.779803 1.98534 -2.30028 0.304596 -0.458945 0.83462 + 0.747227 1.9851 -2.29544 -0.0902986 -0.542122 0.835434 + 0.694494 2.04529 -2.26765 -0.417284 -0.624472 0.660234 + 0.651803 2.05132 -2.29745 -0.671476 -0.553332 0.492893 + 0.819125 1.9989 -2.31556 0.526806 -0.375013 0.762785 + 0.760585 2.04989 -2.25375 0.304931 -0.525779 0.794087 + 0.732671 2.0413 -2.25464 -0.0799034 -0.619927 0.78058 + 0.677505 2.12639 -2.19846 -0.387856 -0.640766 0.662561 + 0.844465 2.09285 -2.29092 0.616114 -0.364898 0.698035 + 0.799907 2.06345 -2.26903 0.527434 -0.416829 0.740315 + 0.739134 2.13566 -2.18479 0.30962 -0.55993 0.768514 + 0.711221 2.12707 -2.18568 -0.0512291 -0.642287 0.76475 + 0.901706 2.03045 -2.37084 0.692787 -0.27321 0.667385 + 0.874805 2.10837 -2.31093 0.690601 -0.304851 0.655847 + 0.817902 2.18362 -2.21486 0.618527 -0.413089 0.668418 + 0.773344 2.15422 -2.19296 0.527377 -0.464518 0.711405 + 0.711712 2.24639 -2.09058 0.293885 -0.529355 0.795874 + 0.91498 2.03709 -2.3843 0.829221 -0.138502 0.541489 + 0.886092 2.11841 -2.32031 0.829745 -0.162649 0.533919 + 0.855504 2.2129 -2.23729 0.836434 -0.202743 0.509189 + 0.844218 2.20286 -2.22791 0.693456 -0.35549 0.626695 + 0.785192 2.29349 -2.11126 0.582077 -0.399666 0.708134 + 0.947709 1.97814 -2.45671 0.920878 -0.0304977 0.388655 + 0.925 2.04957 -2.40284 0.922237 0.0109609 0.38647 + 0.896112 2.13089 -2.33884 0.92254 -0.00589091 0.385856 + 0.86421 2.22607 -2.25259 0.929283 -0.0420559 0.366965 + 0.821654 2.32176 -2.13275 0.82778 -0.171743 0.53412 + 0.933468 2.06511 -2.43129 0.96132 0.145756 0.233706 + 0.903163 2.14858 -2.36166 0.962891 0.133979 0.234287 + 0.871261 2.24376 -2.27541 0.969106 0.108601 0.221447 + 0.836699 2.35083 -2.16856 0.957603 0.144605 0.249171 + 0.83036 2.33492 -2.14804 0.919974 -0.00651825 0.391925 + 0.957524 2.01599 -2.51681 0.956234 0.283177 0.073668 + 0.933667 2.08186 -2.45844 0.953969 0.293753 0.0604318 + 0.903362 2.16533 -2.38881 0.955816 0.289075 0.0534023 + 0.871323 2.25969 -2.29903 0.96095 0.272592 0.047626 + 0.949723 2.03387 -2.54718 0.895743 0.430067 -0.112632 + 0.925867 2.09974 -2.48881 0.896787 0.427097 -0.115588 + 0.896442 2.1812 -2.41575 0.897696 0.424396 -0.118452 + 0.864403 2.27556 -2.32598 0.897656 0.422454 -0.125483 + 0.952981 1.9998 -2.62055 0.750634 0.546339 -0.371566 + 0.93599 2.04759 -2.57125 0.749261 0.58059 -0.318627 + 0.914418 2.11119 -2.50936 0.753502 0.571078 -0.325739 + 0.884993 2.19264 -2.4363 0.735171 0.582479 -0.346759 + 0.932038 2.00774 -2.6362 0.426825 0.672039 -0.605131 + 0.919314 2.05575 -2.58333 0.446381 0.707449 -0.54796 + 0.897743 2.11935 -2.52144 0.466568 0.68746 -0.556518 + 0.870596 2.19652 -2.4491 0.446092 0.693783 -0.565391 + 0.894387 1.95759 -2.68967 0.181568 0.543906 -0.819267 + 0.893074 2.0071 -2.65126 0.173788 0.671227 -0.720591 + 0.88035 2.0551 -2.5984 0.201658 0.732872 -0.649795 + 0.865733 2.12251 -2.53207 0.222487 0.711071 -0.666991 + 0.828318 1.93192 -2.71699 -0.00385911 0.42863 -0.903472 + 0.827004 1.98142 -2.67858 -0.0542592 0.638747 -0.767501 + 0.828179 2.06209 -2.6036 -0.00900196 0.702534 -0.711593 + 0.813562 2.1295 -2.53728 0.00371492 0.70896 -0.705239 + 0.821635 1.89349 -2.72653 -0.0379539 0.320115 -0.946618 + 0.76261 1.88185 -2.72064 -0.348699 0.31201 -0.883775 + 0.769293 1.92029 -2.7111 -0.3462 0.413572 -0.842083 + 0.774611 1.97526 -2.67192 -0.323512 0.605061 -0.72749 + 0.823133 1.85629 -2.74238 -0.0656082 0.302468 -0.950899 + 0.769243 1.83163 -2.73897 -0.273363 0.176144 -0.945646 + 0.747032 1.84454 -2.72582 -0.444234 0.262938 -0.856458 + 0.717728 1.89175 -2.68815 -0.529601 0.361514 -0.767353 + 0.717287 1.92276 -2.6721 -0.528112 0.448408 -0.72113 + 0.682539 1.78964 -2.70592 -0.608635 -0.0405407 -0.792414 + 0.70215 1.85444 -2.69333 -0.548166 0.326985 -0.769802 + 0.672159 1.89904 -2.64849 -0.609067 0.349716 -0.711854 + 0.671718 1.93004 -2.63245 -0.569186 0.447479 -0.689775 + 0.722605 1.97773 -2.63292 -0.487543 0.574136 -0.657776 + 0.671696 1.85946 -2.66719 -0.608519 0.336563 -0.71863 + 0.62568 1.9042 -2.60259 -0.722428 0.309389 -0.618366 + 0.63281 1.94165 -2.59125 -0.660744 0.428873 -0.616024 + 0.64224 1.9879 -2.56041 -0.582087 0.593427 -0.555895 + 0.681147 1.97629 -2.60161 -0.512187 0.576299 -0.636824 + 0.659411 2.03466 -2.52058 -0.61816 0.581069 -0.529374 + 0.695002 2.04605 -2.54545 -0.546413 0.578407 -0.605704 + 0.73646 2.04749 -2.57676 -0.479866 0.595033 -0.64472 + 0.775786 2.05593 -2.59694 -0.318106 0.643455 -0.696258 + 0.638015 2.03301 -2.49136 -0.83395 0.455184 -0.311985 + 0.66146 2.08837 -2.47088 -0.675343 0.495717 -0.546055 + 0.697051 2.09976 -2.49575 -0.574924 0.544827 -0.61043 + 0.731765 2.11448 -2.51369 -0.505128 0.568826 -0.649063 + 0.771091 2.12291 -2.53387 -0.314378 0.638417 -0.70256 + 0.642004 2.07463 -2.4519 -0.876969 0.321684 -0.356995 + 0.652663 2.13298 -2.42409 -0.702558 0.432981 -0.564747 + 0.683014 2.15348 -2.43972 -0.597597 0.501115 -0.625909 + 0.717728 2.16819 -2.45766 -0.533156 0.535886 -0.654653 + 0.627798 2.10689 -2.38942 -0.981431 0.00851246 -0.191625 + 0.633207 2.11924 -2.40512 -0.886673 0.233692 -0.398998 + 0.635474 2.21187 -2.34328 -0.711483 0.422248 -0.561693 + 0.665825 2.23238 -2.35891 -0.607682 0.499412 -0.617502 + 0.696182 2.2509 -2.37159 -0.548256 0.535068 -0.642742 + 0.625806 2.09016 -2.36259 -0.991313 -0.107273 -0.0761004 + 0.613089 2.18393 -2.31271 -0.980987 0.00471444 -0.194014 + 0.618498 2.19627 -2.32841 -0.889052 0.225481 -0.398428 + 0.614047 2.32153 -2.23386 -0.715106 0.444629 -0.539377 + 0.613417 2.14609 -2.25635 -0.928504 -0.329442 0.171316 + 0.611454 2.16777 -2.28951 -0.990872 -0.109273 -0.0789475 + 0.592208 2.29483 -2.20487 -0.985199 0.0431024 -0.165906 + 0.597071 2.30593 -2.21899 -0.893656 0.252396 -0.371046 + 0.634814 2.13241 -2.22826 -0.662188 -0.563703 0.493706 + 0.592338 2.25919 -2.15187 -0.936909 -0.28433 0.203364 + 0.590573 2.27868 -2.18168 -0.996486 -0.067872 -0.0490905 + 0.588996 2.36206 -2.14054 -0.966485 0.256697 0.00363897 + 0.652901 2.23799 -2.10415 -0.364571 -0.609089 0.704343 + 0.613735 2.24551 -2.12377 -0.641395 -0.534826 0.550066 + 0.589485 2.32996 -2.09262 -0.917093 -0.00982676 0.398553 + 0.587719 2.34945 -2.12243 -0.977948 0.174287 0.115074 + 0.686618 2.23868 -2.09138 -0.0588529 -0.605251 0.793856 + 0.645524 2.31131 -2.05263 -0.380565 -0.298017 0.875417 + 0.606357 2.31883 -2.07225 -0.655361 -0.211977 0.72496 + 0.604448 2.36293 -2.08553 -0.692656 0.468093 0.54874 + 0.603302 2.37558 -2.10487 -0.725614 0.571432 0.383341 + 0.697108 2.3191 -2.04342 0.177742 -0.255731 0.950268 + 0.672013 2.31139 -2.04422 -0.120665 -0.304798 0.944742 + 0.646734 2.34692 -2.05243 -0.341751 0.279793 0.897174 + 0.62132 2.3518 -2.06515 -0.491925 0.326545 0.80708 + 0.653081 2.39392 -2.08458 -0.336742 0.695034 0.635242 + 0.72364 2.33405 -2.04824 0.350697 -0.196004 0.915748 + 0.689506 2.352 -2.04349 -0.0490756 0.28227 0.958079 + 0.673224 2.347 -2.04401 -0.195474 0.259964 0.945626 + 0.678495 2.38904 -2.07185 -0.226056 0.627679 0.744928 + 0.745921 2.26495 -2.09875 0.490999 -0.450093 0.745879 + 0.762911 2.36258 -2.06075 0.441742 -0.145001 0.885347 + 0.741521 2.38546 -2.05643 0.0821967 0.349115 0.933468 + 0.716039 2.36695 -2.04832 0.0397241 0.315208 0.948191 + 0.811507 2.31273 -2.12431 0.685079 -0.325964 0.651471 + 0.783282 2.37806 -2.06938 0.551221 -0.0486067 0.832942 + 0.761891 2.40094 -2.06506 0.175504 0.445567 0.877877 + 0.72026 2.41256 -2.07945 -0.25585 0.724551 0.639974 + 0.694778 2.39405 -2.07133 -0.215268 0.649897 0.728899 + 0.793428 2.38709 -2.07782 0.701245 0.119224 0.70288 + 0.768476 2.4068 -2.07054 0.274707 0.563677 0.778976 + 0.726844 2.41842 -2.08492 -0.129791 0.777026 0.615943 + 0.730957 2.42874 -2.09823 -0.128335 0.815768 0.563961 + 0.800224 2.39736 -2.08975 0.779302 0.271967 0.564555 + 0.775271 2.41707 -2.08247 0.313588 0.665203 0.677619 + 0.806563 2.41327 -2.11027 0.808623 0.411992 0.419991 + 0.779384 2.4274 -2.09579 0.330316 0.736389 0.590442 + 0.836761 2.36676 -2.19219 0.94666 0.313168 0.0758933 + 0.806611 2.42571 -2.12871 0.791962 0.554152 0.256344 + 0.779433 2.43983 -2.11423 0.312905 0.820975 0.477588 + 0.830539 2.38103 -2.21641 0.881532 0.462728 -0.0937213 + 0.800389 2.43997 -2.15293 0.723763 0.684221 0.0894924 + 0.775395 2.44909 -2.12994 0.274214 0.883376 0.38007 + 0.72692 2.43799 -2.11395 -0.146258 0.857057 0.494026 + 0.854282 2.28493 -2.34484 0.731351 0.588777 -0.344192 + 0.820418 2.3904 -2.23527 0.713449 0.628588 -0.309623 + 0.792489 2.44729 -2.16766 0.577168 0.808929 -0.111855 + 0.767495 2.4564 -2.14467 0.187435 0.952813 0.23878 + 0.839885 2.28881 -2.35764 0.422638 0.712098 -0.560619 + 0.807475 2.39389 -2.24678 0.409071 0.746315 -0.525047 + 0.779546 2.45078 -2.17917 0.307423 0.891575 -0.332545 + 0.759097 2.45867 -2.15214 0.0370589 0.995453 0.0877453 + 0.838586 2.19968 -2.45973 0.18498 0.717368 -0.671689 + 0.811783 2.28762 -2.36961 0.162041 0.734636 -0.658826 + 0.779373 2.3927 -2.25875 0.148816 0.764298 -0.627457 + 0.75761 2.44985 -2.18851 0.0810486 0.891237 -0.446238 + 0.79379 2.19329 -2.47214 -0.0312491 0.70472 -0.708797 + 0.766986 2.28123 -2.38203 -0.0604195 0.713955 -0.69758 + 0.739101 2.38695 -2.26991 -0.0684724 0.739944 -0.669175 + 0.717338 2.4441 -2.19967 -0.122586 0.855898 -0.502405 + 0.751319 2.1867 -2.46873 -0.349591 0.620235 -0.702208 + 0.729772 2.26941 -2.38266 -0.367233 0.626148 -0.687808 + 0.701887 2.37513 -2.27055 -0.373887 0.648146 -0.663411 + 0.688289 2.43487 -2.20017 -0.392067 0.765045 -0.510871 + 0.711029 2.45401 -2.16872 -0.212971 0.975971 -0.0460893 + 0.671689 2.35849 -2.26059 -0.553376 0.556712 -0.619553 + 0.658091 2.41823 -2.19021 -0.568242 0.670692 -0.476731 + 0.662386 2.43398 -2.16276 -0.510846 0.858764 -0.0395079 + 0.68198 2.44478 -2.16922 -0.410419 0.909116 -0.0711663 + 0.641333 2.33997 -2.24791 -0.611848 0.519942 -0.596073 + 0.634396 2.40377 -2.18031 -0.621311 0.639083 -0.453371 + 0.63869 2.41953 -2.15286 -0.547701 0.836432 -0.0201219 + 0.672795 2.42573 -2.1222 -0.342466 0.844668 0.411403 + 0.69239 2.43653 -2.12866 -0.295278 0.872108 0.390179 + 0.60711 2.38534 -2.16626 -0.723069 0.575599 -0.381913 + 0.620986 2.40756 -2.14374 -0.601163 0.798868 0.0203085 + 0.655091 2.41377 -2.11308 -0.376575 0.818915 0.433092 + 0.593858 2.37316 -2.15465 -0.882743 0.422708 -0.205139 + 0.607734 2.39539 -2.13214 -0.694391 0.703013 0.153605 + 0.651936 2.40657 -2.10392 -0.381509 0.775641 0.502824 + 0.604579 2.38819 -2.12298 -0.728042 0.614623 0.303635 + 0.718521 2.44026 -2.12142 -0.210033 0.878992 0.428087 + 0.737161 2.45774 -2.16148 -0.1006 0.994919 0.00386093 + -0.861683 1.78372 -1.68945 0.542942 0.676105 -0.498092 + -0.844417 1.76425 -1.68043 0.295676 0.853413 0.429257 + -0.795989 1.7501 -1.67675 0.0704556 0.470165 0.879762 + -0.896655 1.82743 -1.63648 0.819838 0.570199 -0.0523411 + -0.893836 1.82196 -1.6254 0.891577 0.305086 0.334685 + -0.875973 1.76755 -1.63771 0.527652 0.752673 0.393784 + -0.859869 1.76859 -1.6341 -0.509809 0.758022 -0.406813 + -0.828313 1.76528 -1.67683 -0.0515056 0.57841 -0.814119 + -0.795989 1.7501 -1.67675 0.619461 0.360333 -0.697444 + -0.913921 1.84691 -1.6455 0.628337 0.660206 -0.411486 + -0.938856 1.89544 -1.61696 0.553402 0.538562 -0.635372 + -0.921707 1.88933 -1.60415 0.819835 0.433994 -0.373524 + -0.918888 1.88385 -1.59307 0.976606 0.173526 0.127003 + -0.914592 1.82073 -1.59468 0.849752 0.0515985 0.524652 + -0.950332 1.85538 -1.66374 0.228995 0.62174 -0.749 + -0.975267 1.90391 -1.6352 0.215899 0.562513 -0.798102 + -0.973509 1.9577 -1.59711 0.256444 0.558221 -0.789067 + -0.946743 1.95147 -1.58371 0.553459 0.488953 -0.674246 + -0.929595 1.94537 -1.5709 0.841358 0.358801 -0.404202 + -0.874571 1.76401 -1.70684 0.24176 0.499863 -0.831678 + -0.96322 1.83567 -1.68111 -0.00269435 0.560421 -0.828204 + -1.00872 1.84191 -1.66855 -0.371559 0.465291 -0.803398 + -1.0025 1.90419 -1.63537 -0.304839 0.519388 -0.798316 + -0.862319 1.70005 -1.74151 0.254402 0.500152 -0.827724 + -0.965472 1.76805 -1.71504 -0.0500905 0.458199 -0.887437 + -1.01097 1.77429 -1.70247 -0.384834 0.445536 -0.808332 + -1.03461 1.83407 -1.65072 -0.650961 0.392859 -0.649547 + -1.02839 1.89634 -1.61754 -0.678934 0.423899 -0.599466 + -0.798428 1.69134 -1.71503 0.627613 0.409576 -0.66208 + -0.860608 1.62202 -1.78844 0.252982 0.439702 -0.861778 + -0.95322 1.70409 -1.74971 -0.00297674 0.504452 -0.863435 + -1.01937 1.70534 -1.74027 -0.363104 0.497155 -0.788031 + -1.04663 1.76377 -1.67854 -0.648101 0.399675 -0.648248 + -0.76879 1.67356 -1.67546 0.87792 0.252431 -0.406859 + -0.763945 1.5997 -1.71449 0.881476 0.206488 -0.424691 + -0.796717 1.61331 -1.76195 0.639402 0.337439 -0.690869 + -0.766351 1.73233 -1.63718 0.89385 0.216533 -0.392615 + -0.752199 1.66051 -1.6355 0.97648 0.136311 -0.167049 + -0.747354 1.58665 -1.67453 0.979245 0.0889351 -0.182123 + -0.753606 1.5029 -1.71989 0.965301 -0.0427322 -0.25762 + -0.770913 1.51923 -1.75069 0.861404 0.0973666 -0.498501 + -0.769426 1.80185 -1.60854 0.861362 0.282283 -0.42234 + -0.759348 1.79972 -1.57636 0.97648 0.155311 -0.149549 + -0.756274 1.73021 -1.60501 0.980811 0.115874 -0.156792 + -0.750401 1.64607 -1.60312 0.989386 0.00195389 0.145294 + -0.74596 1.57993 -1.63403 0.992367 -0.0378516 0.117364 + -0.805752 1.77556 -1.67281 0.296163 0.483039 -0.823991 + -0.779188 1.82732 -1.60459 0.686472 0.456702 -0.565844 + -0.777499 1.87088 -1.56637 0.735772 0.439402 -0.51533 + -0.805421 1.83416 -1.62143 0.239147 0.611648 -0.754119 + -0.803731 1.87773 -1.5832 0.384125 0.590126 -0.71007 + -0.827982 1.82389 -1.62545 -0.212933 0.608359 -0.764564 + -0.82617 1.87946 -1.58753 -0.0574496 0.608425 -0.791529 + -0.806134 1.92987 -1.54242 0.381638 0.58766 -0.713448 + -0.853077 1.821 -1.61849 -0.558502 0.456633 -0.692504 + -0.851265 1.87658 -1.58058 -0.511802 0.514498 -0.688004 + -0.84702 1.92949 -1.54163 -0.501892 0.544839 -0.671755 + -0.828572 1.93161 -1.54674 -0.04566 0.622728 -0.781105 + -0.884962 1.76516 -1.6048 -0.471562 0.844265 -0.254649 + -0.87817 1.81756 -1.5892 -0.841018 0.311302 -0.442469 + -0.867427 1.86948 -1.56556 -0.823135 0.372758 -0.428369 + -0.896729 1.76634 -1.60699 0.532001 0.687299 0.494565 + -0.91404 1.75833 -1.57116 -0.425466 0.881673 0.204038 + -0.890048 1.80422 -1.56183 -0.945887 0.308043 -0.102017 + -0.879305 1.85613 -1.5382 -0.976116 0.203773 -0.0753241 + -0.925807 1.75951 -1.57334 0.416597 0.58701 0.694166 + -0.913283 1.74562 -1.54745 -0.293624 0.672019 0.679835 + -0.889292 1.79151 -1.53811 -0.883087 0.204614 0.422245 + -0.877897 1.84482 -1.5174 -0.941031 0.000393014 0.33832 + -0.871914 1.91258 -1.5065 -0.980782 0.170719 -0.0944559 + -0.927912 1.80841 -1.56914 0.748761 -0.0563014 0.660444 + -0.955781 1.8022 -1.55238 0.356948 -0.15968 0.920375 + -0.953676 1.75329 -1.55657 0.10946 0.503488 0.85704 + -0.923794 1.74036 -1.53732 0.371164 0.92692 -0.0552796 + -0.923481 1.87607 -1.57706 0.931412 -0.00718635 0.363897 + -0.936802 1.86374 -1.55152 0.768744 -0.134296 0.625297 + -0.955874 1.85768 -1.53792 0.418948 -0.262017 0.869384 + -0.986097 1.80064 -1.54679 0.0576717 -0.220796 0.973614 + -0.988572 1.74562 -1.55695 -0.150924 0.398619 0.904613 + -0.932115 1.93356 -1.54674 0.936475 -0.0628728 0.345052 + -0.941907 1.9245 -1.52797 0.78366 -0.194031 0.590109 + -0.96098 1.91842 -1.51437 0.409649 -0.33383 0.848967 + -0.98619 1.85613 -1.53234 0.0389872 -0.292569 0.955449 + -1.01567 1.7933 -1.55082 -0.297138 -0.14412 0.943895 + -0.927522 1.94134 -1.56276 0.992671 0.10416 0.0612771 + -0.937515 1.98613 -1.51921 0.940351 -0.096075 0.326359 + -0.947307 1.97706 -1.50044 0.781325 -0.248362 0.57258 + -0.96172 1.97249 -1.49016 0.41677 -0.397877 0.817311 + -0.983264 1.91729 -1.51026 0.038501 -0.37452 0.926419 + -0.936118 1.99604 -1.53943 0.837471 0.369266 -0.402846 + -0.934046 1.99201 -1.53129 0.995022 0.0836096 0.0542295 + -0.938812 2.03584 -1.50142 0.990397 0.117413 0.0729926 + -0.942281 2.02995 -1.48935 0.936737 -0.072848 0.342369 + -0.950006 2.02281 -1.47453 0.783275 -0.227616 0.578508 + -0.949082 2.00065 -1.54913 0.554014 0.512331 -0.65619 + -0.95341 2.04363 -1.51755 0.54609 0.555685 -0.626898 + -0.940447 2.03902 -1.50785 0.838202 0.404192 -0.366124 + -0.946611 2.0652 -1.48899 0.766284 0.605202 -0.215731 + -0.944975 2.06202 -1.48256 0.906873 0.366954 0.207187 + -0.975847 2.00687 -1.56253 0.2442 0.588885 -0.770442 + -0.974527 2.04854 -1.52813 0.253542 0.62928 -0.734659 + -0.976944 2.0734 -1.50646 0.216557 0.78221 -0.584167 + -0.955827 2.06849 -1.4959 0.5129 0.716682 -0.472546 + -0.954597 2.07248 -1.48133 0.501042 0.862294 0.0735273 + -0.99642 2.00708 -1.56267 -0.296677 0.590083 -0.750856 + -0.995099 2.04874 -1.52825 -0.305563 0.630162 -0.713812 + -0.991595 2.07352 -1.50661 -0.261439 0.781612 -0.566332 + -0.990813 2.07877 -1.49456 -0.23599 0.934454 -0.266656 + -0.976162 2.07864 -1.49442 0.209394 0.939152 -0.272302 + -1.00074 1.95798 -1.5973 -0.309319 0.560863 -0.767955 + -1.01545 2.00132 -1.54956 -0.671264 0.479027 -0.565631 + -1.01011 2.04419 -1.51791 -0.662031 0.520583 -0.539174 + -1.00661 2.06898 -1.49627 -0.61735 0.681379 -0.393195 + -0.999594 2.0761 -1.48852 -0.449988 0.882143 -0.139047 + -1.01978 1.9522 -1.58419 -0.672114 0.459341 -0.580748 + -1.02503 1.99671 -1.53925 -0.881109 0.341643 -0.326996 + -1.01969 2.03959 -1.5076 -0.87834 0.3744 -0.297227 + -1.01336 2.06577 -1.48866 -0.80597 0.568286 -0.165721 + -1.00634 2.0729 -1.48091 -0.568024 0.818663 0.0844981 + -1.04108 1.89025 -1.60387 -0.878394 0.332351 -0.343462 + -1.03246 1.94612 -1.57052 -0.884638 0.332088 -0.327313 + -1.03476 1.94165 -1.56062 -0.989207 0.14568 0.0157156 + -1.02733 1.99224 -1.52935 -0.991211 0.1318 0.0113462 + -1.02151 2.03608 -1.49979 -0.98602 0.164408 0.0271031 + -1.05554 1.82437 -1.63257 -0.868041 0.324169 -0.376057 + -1.0442 1.88418 -1.5904 -0.984005 0.175679 0.0295085 + -1.04226 1.87778 -1.57615 -0.959584 0.0712467 0.272255 + -1.03281 1.93526 -1.54636 -0.966121 0.00840258 0.257954 + -1.02586 1.98743 -1.51856 -0.969797 -0.0168192 0.243333 + -1.06756 1.75407 -1.66038 -0.735671 0.414641 -0.535594 + -1.05867 1.81829 -1.61909 -0.968395 0.248755 -0.0182061 + -1.05823 1.80894 -1.59774 -0.94289 0.188163 0.27487 + -1.03468 1.86924 -1.55703 -0.861852 -0.0367449 0.505827 + -1.02724 1.92897 -1.53232 -0.875806 -0.108841 0.470232 + -1.05503 1.69481 -1.71634 -0.573101 0.490184 -0.656715 + -1.084 1.69714 -1.68879 -0.674157 0.490231 -0.552437 + -1.08388 1.74579 -1.64166 -0.91784 0.360949 -0.165182 + -1.08344 1.73643 -1.6203 -0.931969 0.222139 0.286508 + -1.05065 1.80039 -1.57863 -0.818814 0.0811334 0.568297 + -1.02788 1.62315 -1.79044 -0.289454 0.509889 -0.81008 + -1.0696 1.63577 -1.75368 -0.520732 0.518179 -0.678476 + -1.09857 1.6381 -1.72614 -0.556987 0.539667 -0.631289 + -1.10032 1.68885 -1.67007 -0.840847 0.477293 -0.25528 + -0.961734 1.6219 -1.79988 -0.010275 0.458752 -0.888505 + -0.964636 1.5442 -1.83363 0.0835684 0.379133 -0.921561 + -1.03632 1.56513 -1.82489 -0.228865 0.492134 -0.839896 + -1.07804 1.57775 -1.78813 -0.498248 0.49233 -0.713695 + -0.86351 1.54431 -1.82219 0.259389 0.267042 -0.92812 + -0.878343 1.44646 -1.8412 0.326135 0.179794 -0.928068 + -0.9756 1.49514 -1.85648 0.186908 0.35741 -0.915054 + -1.04729 1.51607 -1.84774 -0.25159 0.480981 -0.839857 + -1.0753 1.52508 -1.82485 -0.497551 0.457676 -0.736869 + -0.803685 1.53284 -1.79816 0.625118 0.186471 -0.757928 + -0.796508 1.42312 -1.80198 0.74657 -0.0126133 -0.665187 + -0.818518 1.43499 -1.81718 0.496852 0.0713508 -0.864897 + -0.779201 1.40679 -1.77117 0.858954 -0.0209808 -0.511623 + -0.814222 1.33839 -1.80653 0.640426 -0.322429 -0.697061 + -0.829046 1.35425 -1.82431 0.553095 -0.229478 -0.80089 + -0.851056 1.36611 -1.83951 0.440722 -0.141564 -0.88641 + -0.752212 1.49618 -1.6794 0.994201 -0.107525 -0.00179019 + -0.76183 1.39164 -1.74576 0.953425 -0.106439 -0.282224 + -0.79685 1.32324 -1.78111 0.788249 -0.426068 -0.443992 + -0.864718 1.29753 -1.81167 0.346095 -0.613927 -0.709445 + -0.879542 1.31338 -1.82945 0.258197 -0.505559 -0.823252 + -0.757383 1.48395 -1.636 0.944214 -0.153962 0.291127 + -0.767001 1.37943 -1.70236 0.95799 -0.27371 0.0856636 + -0.792378 1.31083 -1.73172 0.819668 -0.570517 -0.0515171 + -0.805334 1.30464 -1.76866 0.690927 -0.647656 -0.321188 + -0.86489 1.28634 -1.80025 0.319797 -0.674995 -0.664915 + -0.758081 1.56626 -1.59838 0.901097 -0.153857 0.405404 + -0.785969 1.473 -1.59462 0.820348 -0.134906 0.555724 + -0.777832 1.37883 -1.62356 0.905003 -0.270068 0.328684 + -0.80321 1.31023 -1.65291 0.785106 -0.58282 0.209593 + -0.762522 1.6324 -1.56747 0.890223 -0.112723 0.441356 + -0.786667 1.5553 -1.557 0.737383 -0.231265 0.634651 + -0.844632 1.49219 -1.52469 0.573965 -0.0973955 0.813067 + -0.814774 1.46235 -1.54842 0.74533 0.0523511 0.664638 + -0.765889 1.69882 -1.54682 0.877079 -0.106486 0.468395 + -0.787836 1.60928 -1.53775 0.698236 -0.180004 0.692868 + -0.837401 1.59422 -1.50277 0.538881 -0.204098 0.817283 + -0.836232 1.54024 -1.52202 0.541309 -0.204292 0.815628 + -0.754476 1.71575 -1.57263 0.983949 -0.010114 0.178165 + -0.769974 1.77104 -1.52429 0.803068 -0.111664 0.585331 + -0.791203 1.67569 -1.51711 0.566783 -0.134394 0.812831 + -0.832232 1.66576 -1.50159 0.583904 0.209753 0.784258 + -0.758561 1.78796 -1.55009 0.983459 0.00664217 0.181008 + -0.764901 1.85098 -1.52125 0.973265 0.0260329 0.228204 + -0.774543 1.8401 -1.50329 0.78652 -0.153738 0.598122 + -0.79282 1.75793 -1.50947 0.432875 -0.146761 0.889427 + -0.765688 1.86275 -1.54751 0.950277 0.239754 -0.198725 + -0.77504 1.9167 -1.51119 0.947341 0.270981 -0.17063 + -0.774462 1.90805 -1.49188 0.973254 0.024937 0.228373 + -0.784104 1.89718 -1.47393 0.785585 -0.20298 0.584513 + -0.797389 1.827 -1.48848 0.457099 -0.276565 0.845324 + -0.786851 1.92484 -1.53005 0.711075 0.476506 -0.517025 + -0.79177 1.97231 -1.49268 0.712307 0.491471 -0.501073 + -0.782852 1.96615 -1.47846 0.944844 0.27537 -0.177317 + -0.782274 1.95751 -1.45914 0.975602 -0.00478825 0.219495 + -0.811053 1.97734 -1.50506 0.371627 0.616783 -0.693881 + -0.812841 2.01759 -1.46816 0.372689 0.654804 -0.657522 + -0.797628 2.01363 -1.45839 0.700356 0.532257 -0.475609 + -0.78871 2.00747 -1.44416 0.942368 0.30002 -0.148092 + -0.828013 1.97864 -1.50834 -0.0387738 0.652543 -0.756759 + -0.829801 2.0189 -1.47144 -0.0453624 0.693058 -0.719453 + -0.816785 2.04146 -1.44513 0.326457 0.793863 -0.513038 + -0.801572 2.03748 -1.43537 0.647661 0.688267 -0.32684 + -0.84646 1.97652 -1.50322 -0.504384 0.566943 -0.651285 + -0.844355 2.01723 -1.4674 -0.493983 0.609319 -0.620251 + -0.828873 2.04234 -1.44754 -0.0306886 0.823086 -0.567087 + -0.829989 2.04737 -1.43556 -0.0497992 0.968762 -0.24294 + -0.817901 2.04647 -1.43316 0.25941 0.937266 -0.232892 + -0.858672 1.97117 -1.49188 -0.825384 0.387134 -0.410937 + -0.856566 2.01188 -1.45606 -0.825313 0.417327 -0.38039 + -0.843427 2.04067 -1.44351 -0.465512 0.753488 -0.464278 + -0.8385 2.04639 -1.43321 -0.312177 0.937369 -0.154544 + -0.863182 1.92239 -1.52662 -0.831654 0.370901 -0.413261 + -0.867404 1.96136 -1.47176 -0.982855 0.158866 -0.0935788 + -0.863455 2.00413 -1.44018 -0.978324 0.192189 -0.0771096 + -0.852103 2.03688 -1.43541 -0.754099 0.607915 -0.248543 + -0.86634 1.95281 -1.45605 -0.952865 -0.103577 0.285166 + -0.862391 1.99558 -1.42447 -0.946617 -0.0891164 0.309796 + -0.858992 2.02914 -1.41954 -0.910348 0.40723 0.0736918 + -0.851204 2.03807 -1.41583 -0.644971 0.725994 0.238632 + -0.847176 2.0426 -1.42511 -0.551467 0.833621 0.0309861 + -0.870505 1.90126 -1.4857 -0.947568 -0.0761338 0.310353 + -0.855242 1.94359 -1.44121 -0.718738 -0.328704 0.612674 + -0.853636 1.98831 -1.41276 -0.719562 -0.311967 0.620409 + -0.85823 2.02307 -1.40831 -0.880551 0.187933 0.435099 + -0.850442 2.032 -1.4046 -0.616316 0.552086 0.561565 + -0.859408 1.89205 -1.47086 -0.719033 -0.273932 0.638712 + -0.84165 1.93848 -1.43341 -0.378928 -0.454768 0.805977 + -0.840044 1.98319 -1.40497 -0.370014 -0.445191 0.815411 + -0.839799 2.01216 -1.39104 -0.346252 -0.125076 0.929766 + -0.849475 2.0158 -1.3966 -0.653254 -0.0181182 0.756922 + -0.8628 1.83228 -1.49721 -0.700578 -0.188892 0.688121 + -0.844815 1.82551 -1.48689 -0.365152 -0.299583 0.881427 + -0.841422 1.88527 -1.46055 -0.36923 -0.390232 0.843439 + -0.8225 1.93631 -1.43091 0.0673759 -0.486757 0.870935 + -0.824935 1.98148 -1.40299 0.0594858 -0.479681 0.875424 + -0.874195 1.77897 -1.51791 -0.631738 -0.0953256 0.769299 + -0.84636 1.76001 -1.5058 -0.325903 -0.246802 0.91262 + -0.818764 1.82256 -1.48349 0.0664525 -0.32836 0.942212 + -0.822272 1.88311 -1.45804 0.0592593 -0.417445 0.906768 + -0.884407 1.72657 -1.53545 -0.153748 0.309262 0.938466 + -0.856572 1.70761 -1.52333 -0.168963 0.220004 0.960755 + -0.820309 1.75707 -1.50241 0.02009 -0.215358 0.976329 + -0.800897 1.88754 -1.46304 0.47293 -0.349431 0.808848 + -0.894918 1.72132 -1.52531 0.600347 0.793044 0.103276 + -0.870112 1.69854 -1.51488 0.573723 0.789857 0.216722 + -0.818692 1.67483 -1.51004 0.131552 0.29778 0.945527 + -0.925882 1.77462 -1.50761 0.502066 0.602654 -0.620273 + -0.903651 1.76204 -1.48842 0.699505 0.533594 -0.475362 + -0.878845 1.73927 -1.47799 0.858185 0.486475 -0.163891 + -0.952938 1.74542 -1.54417 -0.0222476 0.995374 -0.0934673 + -0.955026 1.77968 -1.51447 0.0120528 0.665044 -0.746707 + -0.952568 1.8216 -1.47601 0.0382501 0.685138 -0.727409 + -0.931047 1.81741 -1.4704 0.518223 0.597492 -0.611922 + -0.908816 1.80483 -1.45121 0.764668 0.482294 -0.427406 + -0.987834 1.73775 -1.54454 -0.288217 0.951613 -0.106601 + -0.982022 1.77671 -1.5081 -0.244803 0.672643 -0.6983 + -0.979564 1.81863 -1.46965 -0.337055 0.650955 -0.680185 + -1.01815 1.73827 -1.56097 -0.310807 0.264974 0.912791 + -1.01475 1.72657 -1.54594 -0.445772 0.894263 -0.0397493 + -1.00893 1.76552 -1.50949 -0.55517 0.628102 -0.545229 + -0.994451 1.81507 -1.46328 -0.610959 0.590116 -0.527724 + -0.97368 1.8672 -1.42555 -0.331486 0.667198 -0.667056 + -1.05153 1.72021 -1.57018 -0.678542 0.247599 0.691574 + -1.04813 1.70852 -1.55514 -0.794529 0.488288 0.360968 + -1.01599 1.76034 -1.50129 -0.903596 0.415545 -0.104097 + -1.00151 1.80988 -1.45507 -0.930384 0.336381 -0.145717 + -0.988567 1.86364 -1.41917 -0.628021 0.570687 -0.529061 + -1.0327 1.79865 -1.56084 -0.620006 -0.0294021 0.784046 + -1.06948 1.72195 -1.58796 -0.793704 0.0978317 0.600385 + -1.08878 1.67161 -1.60646 -0.855911 0.180056 0.484764 + -1.04836 1.68864 -1.53604 -0.890805 0.13957 0.43242 + -1.0069 1.85779 -1.53428 -0.33282 -0.248125 0.909761 + -1.02393 1.86315 -1.54429 -0.675669 -0.151786 0.72141 + -1.00397 1.91895 -1.51221 -0.346819 -0.336182 0.875613 + -1.01649 1.92288 -1.51957 -0.680799 -0.233301 0.694322 + -0.984005 1.97135 -1.48604 0.0314484 -0.444111 0.895419 + -0.999619 1.97261 -1.48749 -0.344846 -0.403809 0.84736 + -1.01214 1.97655 -1.49485 -0.686794 -0.286449 0.668028 + -1.0203 1.98114 -1.50452 -0.877307 -0.151552 0.455372 + -0.964419 2.01823 -1.46426 0.407492 -0.389519 0.825969 + -0.982001 2.01733 -1.46101 0.0373872 -0.434607 0.899844 + -0.997615 2.0186 -1.46245 -0.34794 -0.391279 0.851962 + -1.00749 2.02171 -1.46826 -0.680776 -0.273483 0.679523 + -1.01565 2.02629 -1.47792 -0.875941 -0.130227 0.464509 + -0.955171 2.05069 -1.45916 0.720065 0.0675929 0.690606 + -0.965424 2.04743 -1.45186 0.402204 -0.0619828 0.913449 + -0.983006 2.04653 -1.44862 0.0337902 -0.108413 0.993531 + -0.994161 2.04743 -1.44967 -0.306286 -0.0729372 0.949141 + -1.00404 2.05053 -1.45548 -0.635883 0.0332925 0.771067 + -0.947446 2.05783 -1.47398 0.867983 0.213795 0.448215 + -0.956111 2.06645 -1.46899 0.610177 0.586505 0.532631 + -0.960629 2.06227 -1.46033 0.546666 0.49236 0.677302 + -0.970882 2.059 -1.45302 0.286682 0.355062 0.8898 + -0.953641 2.07063 -1.47757 0.593337 0.72326 0.353335 + -0.967214 2.07131 -1.46621 0.265496 0.845889 0.462584 + -0.971731 2.06713 -1.45755 0.221329 0.705967 0.672773 + -0.982013 2.06661 -1.45565 -0.00177327 0.712973 0.701189 + -0.981163 2.05847 -1.45113 0.0549696 0.337265 0.939804 + -0.970723 2.07549 -1.47471 0.179435 0.915809 0.3593 + -0.969766 2.07362 -1.47095 0.15416 0.909084 0.387041 + -0.987789 2.06842 -1.45905 -0.153577 0.806631 0.570754 + -0.992319 2.05937 -1.45218 -0.229001 0.414255 0.880881 + -0.963814 2.07577 -1.48824 0.367629 0.919463 -0.139413 + -0.972252 2.07813 -1.48049 0.234788 0.943636 0.233294 + -0.992911 2.07364 -1.47028 -0.174837 0.875338 0.450795 + -0.990342 2.07074 -1.46379 -0.163391 0.857355 0.488104 + -0.998095 2.06118 -1.45558 -0.422733 0.510091 0.749069 + -0.984601 2.08101 -1.48667 -0.0231295 0.998052 0.0579329 + -0.993381 2.07834 -1.48062 -0.216603 0.949029 0.228971 + -0.99444 2.07629 -1.47606 -0.207986 0.89141 0.402654 + -1.0074 2.07084 -1.47634 -0.605436 0.731746 0.313041 + -1.00647 2.06735 -1.46898 -0.589308 0.661583 0.463707 + -1.00391 2.06445 -1.46249 -0.541286 0.599912 0.589165 + -1.00985 2.05379 -1.4624 -0.810502 0.145974 0.567255 + -1.01517 2.06224 -1.48085 -0.908251 0.392521 0.144941 + -1.01424 2.05876 -1.47348 -0.897053 0.265032 0.353631 + -1.02004 2.03125 -1.48901 -0.965931 0.00602489 0.258728 + -1.10274 1.68609 -1.6388 -0.928522 0.286858 0.235709 + -1.12121 1.65122 -1.66364 -0.900856 0.39323 0.183924 + -1.1061 1.64277 -1.62382 -0.852629 0.243119 0.462511 + -1.08274 1.6196 -1.57935 -0.803775 0.207646 0.55752 + -1.06543 1.64843 -1.56198 -0.836344 0.0856898 0.541467 + -1.11879 1.65398 -1.69492 -0.724962 0.575102 -0.379063 + -1.14137 1.61459 -1.68087 -0.902482 0.424152 0.07497 + -1.12625 1.60613 -1.64105 -0.84108 0.30273 0.448261 + -1.10805 1.58706 -1.76083 -0.511412 0.5276 -0.678303 + -1.12827 1.60294 -1.7296 -0.649726 0.528113 -0.546766 + -1.14801 1.59761 -1.70914 -0.78781 0.5466 -0.283872 + -1.16836 1.5483 -1.68293 -0.938686 0.291499 0.184111 + -1.10532 1.53438 -1.79755 -0.484818 0.473429 -0.735402 + -1.13309 1.54353 -1.7746 -0.606646 0.44187 -0.660857 + -1.15283 1.53819 -1.75413 -0.794711 0.347706 -0.497529 + -1.17501 1.53132 -1.71119 -0.992373 0.118036 -0.0355381 + -1.09534 1.48847 -1.83271 -0.515778 0.38929 -0.763169 + -1.12311 1.49763 -1.80977 -0.609845 0.349881 -0.711107 + -1.15272 1.49406 -1.77795 -0.807926 0.224801 -0.54472 + -1.17489 1.48719 -1.73501 -0.957577 0.110455 -0.266168 + -1.17284 1.51873 -1.66879 -0.9567 0.181032 0.227931 + -1.07225 1.49111 -1.84717 -0.506229 0.397058 -0.765557 + -1.06557 1.4637 -1.86328 -0.488367 0.259635 -0.833119 + -1.11164 1.45681 -1.83562 -0.643574 0.189797 -0.741478 + -1.14125 1.45325 -1.8038 -0.765504 0.0850554 -0.637784 + -1.16209 1.43471 -1.77781 -0.893668 -0.0357329 -0.447304 + -1.04423 1.48211 -1.87005 -0.218264 0.443524 -0.86928 + -1.04247 1.46635 -1.87773 -0.272638 0.0838189 -0.958458 + -1.00107 1.43371 -1.88308 0.105073 0.110682 -0.988286 + -1.05129 1.43838 -1.87943 -0.24013 0.267479 -0.933163 + -1.09737 1.43149 -1.85176 -0.630431 0.0146473 -0.776107 + -1.00247 1.46289 -1.8726 0.202006 0.383679 -0.901101 + -1.00071 1.44711 -1.88027 0.207208 0.318562 -0.924977 + -0.905572 1.40079 -1.86012 0.273116 0.129672 -0.953202 + -1.00389 1.40927 -1.88379 0.091356 -0.043122 -0.994884 + -1.05412 1.41394 -1.88015 -0.361046 -0.127194 -0.923833 + -0.905215 1.41419 -1.85732 0.302473 0.209436 -0.929864 + -0.879577 1.38728 -1.85458 0.391346 0.0133918 -0.920146 + -0.977897 1.39575 -1.87826 0.162585 -0.14137 -0.976515 + -1.03086 1.39979 -1.88477 -0.114306 -0.409271 -0.905225 + -0.909016 1.37928 -1.86229 0.219388 -0.203368 -0.954207 + -0.880494 1.35811 -1.84722 0.260736 -0.32044 -0.910678 + -0.91712 1.35833 -1.85396 0.0698016 -0.443323 -0.89364 + -0.943902 1.36906 -1.86388 -0.0627396 -0.52475 -0.848941 + -0.935798 1.39002 -1.87222 0.0335625 -0.449008 -0.892897 + -0.916168 1.3136 -1.83618 -0.0729311 -0.532352 -0.843375 + -0.960586 1.34898 -1.84185 -0.287512 -0.601493 -0.745347 + -0.967246 1.38002 -1.86474 -0.232559 -0.636904 -0.73503 + -0.996414 1.38162 -1.86005 -0.0993971 -0.755664 -0.647373 + -0.988765 1.39406 -1.87874 0.0326634 -0.61536 -0.787569 + -1.05268 1.39308 -1.8694 -0.307762 -0.665633 -0.679864 + -1.07593 1.40723 -1.86478 -0.539408 -0.326004 -0.776377 + -1.06033 1.38065 -1.85071 -0.252805 -0.744048 -0.618452 + -1.09939 1.39036 -1.83797 -0.549298 -0.490807 -0.676299 + -1.12082 1.41464 -1.82495 -0.717299 -0.125166 -0.685431 + -1.06981 1.35429 -1.81241 -0.23753 -0.775376 -0.585125 + -1.10887 1.36402 -1.79966 -0.471611 -0.630467 -0.616518 + -1.14166 1.3961 -1.79896 -0.72833 -0.303682 -0.614257 + -1.1536 1.37329 -1.7689 -0.797641 -0.374192 -0.473022 + -1.16897 1.41515 -1.74191 -0.967478 -0.131729 -0.215948 + -1.02125 1.36435 -1.83674 -0.175971 -0.734549 -0.655341 + -1.01555 1.35052 -1.81807 -0.107532 -0.847897 -0.519141 + -1.06411 1.34048 -1.79374 -0.130243 -0.877904 -0.460783 + -1.12081 1.34121 -1.76961 -0.391113 -0.683013 -0.616866 + -0.99208 1.36275 -1.84143 -0.224003 -0.731134 -0.644411 + -0.993649 1.35055 -1.82362 -0.224075 -0.842317 -0.490196 + -1.00441 1.33839 -1.79689 -0.0287457 -0.936412 -0.349722 + -1.01752 1.33057 -1.77356 0.129109 -0.99008 -0.0554308 + -1.07722 1.33266 -1.77041 -0.118343 -0.865469 -0.486783 + -0.98393 1.35994 -1.8427 -0.31843 -0.674411 -0.666162 + -0.985499 1.34774 -1.8249 -0.414596 -0.790654 -0.450529 + -0.98251 1.3384 -1.80245 -0.215971 -0.95673 -0.194997 + -0.974722 1.33694 -1.78108 -0.0578647 -0.982442 0.17737 + -0.963161 1.32996 -1.82532 -0.533246 -0.708516 -0.462226 + -0.975116 1.33601 -1.80524 -0.504604 -0.860644 -0.0683099 + -0.918743 1.29457 -1.81965 -0.224243 -0.692597 -0.685583 + -0.952777 1.31823 -1.80566 -0.666774 -0.741382 -0.0759341 + -0.967328 1.33454 -1.78386 -0.495941 -0.83553 0.2365 + -0.918915 1.28339 -1.80822 -0.344704 -0.832042 -0.434609 + -0.94631 1.31106 -1.78594 -0.7073 -0.680454 0.191596 + -0.941823 1.32009 -1.7633 -0.742413 -0.612218 0.27205 + -0.962841 1.34356 -1.76123 -0.45567 -0.809372 0.370515 + -0.912448 1.27623 -1.78851 -0.464107 -0.851731 -0.243226 + -0.905776 1.26502 -1.76626 -0.525256 -0.844972 -0.100638 + -0.908231 1.27295 -1.75308 -0.852086 -0.513351 0.102083 + -0.944279 1.32802 -1.75012 -0.77189 -0.60442 0.197136 + -0.873374 1.26773 -1.7878 0.120622 -0.762145 -0.63607 + -0.866702 1.25654 -1.76555 0.179958 -0.967861 -0.175672 + -0.853746 1.26272 -1.72861 0.36219 -0.930236 -0.0589842 + -0.902844 1.26036 -1.73079 -0.455028 -0.882391 -0.119733 + -0.906507 1.2704 -1.74915 -0.906012 -0.423252 -0.000438769 + -0.854407 1.25904 -1.69102 0.400661 -0.916198 0.00725012 + -0.903505 1.25667 -1.6932 -0.427851 -0.898359 -0.0994688 + -0.943571 1.31249 -1.6796 -0.81202 -0.569409 -0.128053 + -0.933747 1.30773 -1.71638 -0.830983 -0.537681 -0.142713 + -0.93741 1.31778 -1.73474 -0.82851 -0.538919 -0.152109 + -0.824142 1.30322 -1.61679 0.635607 -0.656789 0.40575 + -0.875339 1.25203 -1.6549 0.218927 -0.960509 0.171738 + -0.906429 1.25446 -1.66273 -0.443213 -0.896406 -0.00427416 + -0.828588 1.32435 -1.58429 0.604075 -0.563931 0.563094 + -0.893779 1.26871 -1.61192 0.138584 -0.882422 0.449584 + -0.924869 1.27115 -1.61975 -0.561155 -0.82311 0.0871518 + -0.946496 1.31028 -1.64912 -0.801549 -0.580988 -0.14132 + -0.806637 1.36818 -1.57736 0.752837 -0.299582 0.586078 + -0.888762 1.33938 -1.5282 0.446472 -0.501837 0.740826 + -0.898225 1.28984 -1.57942 0.236675 -0.79988 0.551522 + -0.931525 1.27846 -1.59554 -0.446088 -0.86093 0.244549 + -0.944885 1.30645 -1.6432 -0.818586 -0.564125 -0.108075 + -0.866811 1.38322 -1.52127 0.533514 -0.259367 0.805041 + -0.915406 1.33821 -1.5161 0.146542 -0.625799 0.766095 + -0.898161 1.30431 -1.5557 0.548481 -0.695978 0.463447 + -0.931461 1.29292 -1.57181 -0.134422 -0.885844 0.444084 + -0.89667 1.41305 -1.49754 0.483713 -0.132438 0.865149 + -0.926071 1.48754 -1.48244 0.363866 -0.0126134 0.931366 + -0.958812 1.47239 -1.46701 0.222013 0.168505 0.960373 + -0.929411 1.3979 -1.48212 0.464505 -0.134078 0.875361 + -0.917671 1.53559 -1.47976 0.320139 -0.170836 0.93184 + -0.992002 1.49626 -1.47072 -0.106889 0.113836 0.987733 + -0.975596 1.43157 -1.46301 0.148548 0.0180906 0.98874 + -0.985385 1.40246 -1.46142 0.133275 0.00861454 0.991042 + -0.9392 1.36879 -1.48052 0.529687 -0.136329 0.837166 + -0.909642 1.57166 -1.47418 0.323231 -0.241514 0.914982 + -0.967667 1.5725 -1.4625 -0.132686 -0.192944 0.972197 + -0.975695 1.53644 -1.46807 -0.0810722 -0.07865 0.9936 + -1.02872 1.5178 -1.48609 -0.506208 0.164417 0.846594 + -1.00879 1.45545 -1.46672 -0.239736 0.115339 0.963962 + -0.849331 1.64797 -1.4825 0.606455 -0.0838512 0.790684 + -0.921571 1.62542 -1.45391 0.311314 -0.261905 0.913504 + -0.96191 1.62178 -1.44692 -0.148253 -0.293165 0.944497 + -0.99954 1.58436 -1.4781 -0.583804 -0.0313831 0.811288 + -1.01241 1.55797 -1.48345 -0.520782 0.112509 0.846243 + -0.89595 1.71482 -1.44879 0.651254 -0.120181 0.749283 + -0.924839 1.70033 -1.42998 0.425196 -0.289024 0.857714 + -0.965178 1.6967 -1.42299 -0.10667 -0.376135 0.920404 + -0.993784 1.63365 -1.46253 -0.644593 -0.203386 0.736976 + -1.03451 1.61165 -1.51412 -0.76567 0.0762977 0.638692 + -0.878852 1.73262 -1.46788 0.867103 0.180607 0.464234 + -0.899094 1.78978 -1.42827 0.925539 -0.0306324 0.377411 + -0.911742 1.78053 -1.41565 0.698934 -0.269162 0.662603 + -0.940631 1.76602 -1.39685 0.447424 -0.394469 0.802624 + -0.899087 1.79644 -1.43839 0.936939 0.327141 -0.122981 + -0.906243 1.84754 -1.39768 0.951956 0.259521 -0.16257 + -0.906249 1.84265 -1.39025 0.942178 -0.120714 0.312617 + -0.918897 1.8334 -1.37762 0.707862 -0.371766 0.600601 + -0.915972 1.85595 -1.4105 0.774524 0.461932 -0.432125 + -0.911958 1.89358 -1.35878 0.950607 0.262781 -0.165201 + -0.911964 1.88869 -1.35134 0.943951 -0.153564 0.292189 + -0.921495 1.8817 -1.34177 0.713127 -0.417147 0.563417 + -0.940133 1.82274 -1.3638 0.475995 -0.476833 0.738959 + -0.932314 1.86519 -1.42462 0.52505 0.602032 -0.601564 + -0.935626 1.90917 -1.38255 0.514935 0.630654 -0.580618 + -0.919284 1.89993 -1.36844 0.773918 0.477572 -0.415903 + -0.923294 1.9384 -1.32966 0.767415 0.509108 -0.389721 + -0.915968 1.93204 -1.31999 0.95007 0.28164 -0.134336 + -0.953835 1.86938 -1.43022 0.0313139 0.700647 -0.712821 + -0.95189 1.91233 -1.3868 0.0400432 0.730366 -0.681882 + -0.952452 1.94884 -1.34504 0.0329559 0.76326 -0.645251 + -0.936187 1.94568 -1.34079 0.520211 0.657447 -0.545109 + -0.971735 1.91015 -1.38211 -0.330231 0.696033 -0.637562 + -0.968108 1.94712 -1.34135 -0.322806 0.729585 -0.602911 + -0.950922 1.97011 -1.31884 0.0509809 0.857286 -0.512311 + -0.939359 1.96785 -1.31586 0.480082 0.770957 -0.418506 + -0.926466 1.96057 -1.30472 0.729153 0.6365 -0.251403 + -0.982981 1.90748 -1.37727 -0.620831 0.594702 -0.510782 + -0.979354 1.94445 -1.3365 -0.620038 0.623844 -0.475785 + -0.966579 1.96839 -1.31515 -0.302998 0.828806 -0.470397 + -0.96174 1.9735 -1.30556 -0.206415 0.96463 -0.163957 + -0.952584 1.9745 -1.30772 0.0363779 0.986315 -0.16081 + -0.993755 1.85983 -1.41314 -0.93619 0.299033 -0.184735 + -0.988169 1.90367 -1.37124 -0.936612 0.299991 -0.181005 + -0.983448 1.94144 -1.33175 -0.932314 0.326099 -0.156365 + -0.974644 1.9664 -1.31195 -0.572853 0.746425 -0.338658 + -0.969805 1.9715 -1.30236 -0.434444 0.89926 -0.0509001 + -1.00188 1.79872 -1.4398 -0.984069 0.0783702 0.159582 + -0.994129 1.84866 -1.39787 -0.99149 0.0328186 0.125979 + -0.988447 1.89522 -1.35972 -0.993575 0.0199373 0.111409 + -0.983726 1.933 -1.32021 -0.990769 0.0350772 0.130948 + -0.978738 1.9634 -1.30719 -0.874648 0.484746 -0.00345629 + -1.01623 1.74048 -1.4822 -0.948702 0.168944 0.26725 + -0.995673 1.77835 -1.41304 -0.914287 -0.11021 0.389786 + -0.989565 1.83369 -1.3782 -0.927134 -0.14191 0.346821 + -0.983883 1.88026 -1.34004 -0.927613 -0.177096 0.328893 + -0.980124 1.92119 -1.3047 -0.926822 -0.161084 0.339194 + -1.01002 1.72012 -1.45543 -0.884363 -0.0721925 0.461183 + -0.986358 1.70191 -1.42978 -0.597492 -0.306496 0.740988 + -0.983694 1.76718 -1.39836 -0.637187 -0.33585 0.693684 + -0.977586 1.82251 -1.36353 -0.632741 -0.390838 0.668494 + -0.974832 1.87181 -1.32896 -0.641643 -0.441238 0.627378 + -1.01744 1.65185 -1.48818 -0.816826 -0.104458 0.567348 + -0.962515 1.76197 -1.39159 -0.0408746 -0.466521 0.883565 + -0.962017 1.81868 -1.35854 -0.0486911 -0.536721 0.842354 + -1.04738 1.58525 -1.51946 -0.709079 0.214903 0.671583 + -1.06727 1.53607 -1.52473 -0.704163 0.22816 0.672382 + -1.04955 1.45545 -1.48666 -0.551179 0.162455 0.818419 + -1.10264 1.57041 -1.58462 -0.773551 0.281002 0.568029 + -1.1312 1.49015 -1.58202 -0.801776 0.204968 0.561376 + -1.0881 1.47372 -1.5253 -0.70442 0.195132 0.682434 + -1.08911 1.40826 -1.51204 -0.745394 0.0500508 0.664743 + -1.06464 1.41698 -1.4888 -0.596013 0.102991 0.796342 + -1.13073 1.57656 -1.62691 -0.802559 0.333469 0.494669 + -1.15929 1.49629 -1.62432 -0.877949 0.0822719 0.471633 + -1.16822 1.44519 -1.65465 -0.962054 -0.0510071 0.26805 + -1.16132 1.42747 -1.62544 -0.952895 -0.0187484 0.30272 + -1.14646 1.44239 -1.58743 -0.886167 0.0826178 0.455941 + -1.18177 1.46764 -1.69911 -0.999475 -0.00395709 0.0321609 + -1.16971 1.38401 -1.71198 -0.980138 -0.195089 -0.0356455 + -1.16281 1.36629 -1.68276 -0.954273 -0.243047 0.174045 + -1.15087 1.38488 -1.61849 -0.902374 -0.258588 0.344752 + -1.13601 1.3998 -1.58048 -0.859078 -0.156505 0.487331 + -1.15435 1.34214 -1.73898 -0.838713 -0.427998 -0.336717 + -1.15551 1.33786 -1.69304 -0.908353 -0.40434 0.106789 + -1.14358 1.35647 -1.62877 -0.842491 -0.434269 0.318779 + -1.12177 1.38211 -1.56183 -0.849258 -0.147795 0.50687 + -1.10336 1.42596 -1.53069 -0.776559 0.0606686 0.627116 + -1.14122 1.31857 -1.73434 -0.532018 -0.776227 -0.338274 + -1.14238 1.31428 -1.68841 -0.53909 -0.8226 0.180862 + -1.13185 1.33538 -1.63701 -0.478529 -0.805413 0.349743 + -1.123 1.3416 -1.60631 -0.49341 -0.837358 0.235324 + -1.13473 1.36269 -1.59807 -0.932562 -0.184748 0.310156 + -1.09764 1.31002 -1.73515 -0.0600342 -0.968137 -0.24312 + -1.08148 1.30923 -1.71925 0.173325 -0.957252 -0.231574 + -1.09911 1.30895 -1.69599 0.0262624 -0.986821 0.159673 + -1.08858 1.33004 -1.64459 0.0642073 -0.951029 0.302361 + -1.08388 1.33706 -1.61943 0.00117658 -0.99386 0.110644 + -1.01234 1.33979 -1.75085 0.268562 -0.959749 0.0821983 + -0.998055 1.34162 -1.73825 0.217022 -0.957711 -0.188919 + -1.08335 1.31185 -1.72254 0.428468 -0.728845 -0.534041 + -0.969543 1.34615 -1.75837 0.0101574 -0.956433 0.291774 + -0.965886 1.35 -1.74384 -0.0307256 -0.999527 -0.00144084 + -0.995594 1.34006 -1.73234 0.173426 -0.844825 -0.506155 + -0.959184 1.34741 -1.74669 -0.5284 -0.828906 0.183597 + -0.963425 1.34844 -1.73791 -0.140448 -0.919039 -0.368294 + -0.99372 1.33744 -1.72904 0.0845933 -0.640538 -0.763253 + -0.990595 1.33114 -1.72509 0.13701 -0.886124 -0.442733 + -1.00822 1.33085 -1.70182 0.19308 -0.964863 0.17821 + -0.95694 1.34591 -1.74022 -0.612021 -0.784068 -0.103283 + -0.960751 1.3446 -1.73259 -0.203137 -0.7347 -0.647264 + -0.957626 1.33829 -1.72863 -0.22033 -0.861657 -0.457167 + -0.960991 1.33745 -1.70855 -0.107104 -0.993787 0.0302585 + -1.01772 1.33528 -1.66846 0.135129 -0.971788 0.19331 + -0.942035 1.32651 -1.74363 -0.811014 -0.581756 0.0617796 + -0.954266 1.34206 -1.73489 -0.641603 -0.690389 -0.334229 + -0.951365 1.33587 -1.72993 -0.6809 -0.684109 -0.261477 + -0.95473 1.33503 -1.70984 -0.621785 -0.775724 -0.107869 + -0.970486 1.34187 -1.67517 -0.0865242 -0.99325 0.0772496 + -0.940311 1.32397 -1.7397 -0.825138 -0.555887 -0.100681 + -0.964555 1.33979 -1.67305 -0.588996 -0.805096 -0.070021 + -0.975047 1.343 -1.65421 -0.106749 -0.994286 0.000790287 + -0.969116 1.34092 -1.65209 -0.563581 -0.810951 -0.15727 + -0.975156 1.34222 -1.6462 -0.256534 -0.918018 -0.302379 + -1.01302 1.3423 -1.6433 0.0684837 -0.994645 0.0774064 + -0.967505 1.3371 -1.64616 -0.647959 -0.704487 -0.289564 + -0.972093 1.32925 -1.62651 -0.345998 -0.785019 -0.513839 + -1.00627 1.33112 -1.61759 -0.16015 -0.833879 -0.528202 + -1.01313 1.34151 -1.63528 -0.0436079 -0.956924 -0.287044 + -0.95154 1.31375 -1.61899 -0.655142 -0.70744 -0.265174 + -0.964442 1.32413 -1.62648 -0.415925 -0.775437 -0.475083 + -0.966954 1.3028 -1.59418 -0.0525192 -0.818805 -0.571665 + -1.00113 1.30466 -1.58525 -0.226532 -0.810941 -0.539497 + -0.946222 1.29217 -1.58454 -0.386929 -0.921374 -0.0368235 + -0.959124 1.30255 -1.59204 -0.133294 -0.838926 -0.52767 + -0.965185 1.29072 -1.57667 0.00321453 -0.875983 -0.482332 + -0.99787 1.29022 -1.56055 -0.215064 -0.876743 -0.430197 + -1.05856 1.31114 -1.56816 -0.34662 -0.865903 -0.360648 + -0.939566 1.30239 -1.55634 -0.38153 -0.701608 0.601815 + -0.957355 1.29046 -1.57453 -0.0240168 -0.983625 0.178618 + -0.961993 1.29199 -1.57414 0.182617 -0.817752 0.545832 + -0.964165 1.28973 -1.57497 0.433743 -0.878655 -0.199582 + -0.996851 1.28924 -1.55885 -0.0132995 -0.987392 -0.157734 + -0.924805 1.30314 -1.54361 -0.13515 -0.744394 0.65392 + -0.921874 1.33846 -1.52023 -0.14568 -0.778188 0.610901 + -0.946034 1.30264 -1.56046 -0.34344 -0.565627 0.749743 + -0.950673 1.30417 -1.56006 0.0581413 -0.778074 0.625476 + -0.95556 1.31203 -1.54408 0.373475 -0.801729 0.466634 + -0.977756 1.2971 -1.54699 0.516219 -0.732936 0.443085 + -0.979928 1.29485 -1.54782 0.413325 -0.843953 0.341914 + -1.03297 1.28272 -1.52354 -0.189174 -0.978299 0.084523 + -1.05531 1.2967 -1.54347 -0.565358 -0.794439 -0.221892 + -0.926761 1.34633 -1.50425 -0.144246 -0.947473 0.285463 + -0.965624 1.33399 -1.49664 0.395119 -0.790783 0.467486 + -0.987821 1.31907 -1.49956 0.489562 -0.730359 0.476345 + -1.01605 1.28833 -1.51252 0.288612 -0.884435 0.366711 + -1.04665 1.2969 -1.50157 -0.532196 -0.687789 0.493673 + -0.936756 1.35346 -1.48437 0.581016 -0.413242 0.701179 + -0.975619 1.34114 -1.47677 0.380523 -0.763947 0.52114 + -0.99798 1.32681 -1.47853 0.436767 -0.698445 0.566931 + -1.02621 1.29607 -1.4915 0.0172932 -0.790759 0.611884 + -0.995526 1.34064 -1.46447 0.2745 -0.432883 0.85864 + -1.01789 1.32631 -1.46624 -0.0142333 -0.495639 0.868412 + -1.03833 1.32715 -1.47631 -0.540477 -0.35733 0.761708 + -1.06899 1.31088 -1.52149 -0.716384 -0.627478 0.305066 + -0.99797 1.35597 -1.46064 0.141579 -0.118927 0.982757 + -1.02708 1.35498 -1.46118 -0.341749 -0.06788 0.937337 + -1.06688 1.337 -1.49782 -0.713885 -0.278871 0.642339 + -1.09143 1.34996 -1.52572 -0.79421 -0.296403 0.530449 + -1.09355 1.32383 -1.54939 -0.716845 -0.681378 0.147839 + -1.01449 1.40147 -1.46196 -0.216498 0.182084 0.959153 + -1.05562 1.36483 -1.48268 -0.632206 -0.0377527 0.77388 + -1.02388 1.41698 -1.46886 -0.355908 0.101447 0.928998 + -1.06501 1.38033 -1.48959 -0.620866 -0.0466155 0.78253 + -1.08948 1.37162 -1.51283 -0.725051 -0.191942 0.661406 + -1.12372 1.36045 -1.57473 -0.840676 -0.361587 0.403136 + -1.10928 1.33905 -1.57589 -0.644088 -0.754409 0.12656 + -1.12029 1.3413 -1.59924 -0.509695 -0.845123 0.161175 + -1.08116 1.33676 -1.61236 -0.137504 -0.971094 -0.195111 + -1.0743 1.32636 -1.59466 -0.288154 -0.882814 -0.370955 + -0.942731 1.87105 -1.32796 0.470613 -0.53673 0.700317 + -0.959263 1.86798 -1.32398 -0.0407287 -0.603519 0.796307 + -0.971073 1.91275 -1.29362 -0.629854 -0.437929 0.641484 + -0.925505 1.92119 -1.30457 0.708799 -0.410987 0.573318 + -0.942258 1.91278 -1.29366 0.474868 -0.529428 0.702998 + -0.95879 1.90972 -1.28968 -0.0502332 -0.596344 0.801156 + -0.968843 1.93965 -1.27537 -0.59362 -0.156437 0.789394 + -0.915973 1.92818 -1.31413 0.9417 -0.13543 0.307993 + -0.921247 1.95218 -1.29197 0.878811 0.0971569 0.467175 + -0.928037 1.94721 -1.28517 0.67805 -0.143793 0.720813 + -0.94479 1.9388 -1.27427 0.429764 -0.253191 0.866716 + -0.956559 1.93662 -1.27144 -0.0317741 -0.296374 0.954543 + -0.921242 1.95604 -1.29783 0.888691 0.458377 0.0109046 + -0.928256 1.96346 -1.29133 0.661668 0.710279 0.240207 + -0.928259 1.9612 -1.2879 0.651468 0.469038 0.596316 + -0.935049 1.95622 -1.2811 0.489499 0.261265 0.831944 + -0.93348 1.96797 -1.29823 0.54589 0.837766 0.0123134 + -0.937365 1.96768 -1.28845 0.270531 0.86261 0.427454 + -0.937368 1.96542 -1.28502 0.262033 0.698448 0.665965 + -0.947165 1.96051 -1.27864 0.140392 0.633998 0.760485 + -0.944847 1.95131 -1.27473 0.337241 0.215795 0.916352 + -0.94102 1.97224 -1.30474 0.383802 0.918964 -0.0905595 + -0.944905 1.97195 -1.29496 0.10464 0.94009 0.324471 + -0.951054 1.97051 -1.29305 0.0350931 0.868002 0.495319 + -0.953314 1.95908 -1.27673 0.0168759 0.606118 0.795196 + -0.956616 1.94912 -1.2719 -0.0406626 0.213546 0.976086 + -0.954131 1.97383 -1.29744 0.236857 0.933192 0.270279 + -0.963575 1.96415 -1.28342 -0.26646 0.715367 0.645948 + -0.960497 1.96084 -1.27902 -0.193969 0.652721 0.732347 + -0.963799 1.9509 -1.2742 -0.405418 0.292556 0.866053 + -0.975262 1.94566 -1.28323 -0.861922 0.0563489 0.5039 + -0.963287 1.97281 -1.29528 -0.1506 0.940355 0.305045 + -0.965681 1.97106 -1.2925 -0.311302 0.810207 0.496644 + -0.972324 1.96381 -1.29113 -0.71808 0.511063 0.472415 + -0.970218 1.95691 -1.28205 -0.654836 0.419876 0.628405 + -0.978864 1.95746 -1.29875 -0.932867 0.239561 0.269016 + -0.972199 1.96974 -1.29958 -0.659069 0.721789 0.211303 + -0.789559 1.94929 -1.44557 0.797223 -0.245734 0.551407 + -0.806352 1.93965 -1.43468 0.475559 -0.412121 0.777174 + -0.788254 2.00064 -1.42894 0.972321 0.0246218 0.23235 + -0.795539 1.99244 -1.41536 0.787449 -0.233208 0.57056 + -0.808788 1.98483 -1.40677 0.478136 -0.401277 0.781257 + -0.813198 2.01283 -1.39175 0.406694 -0.104484 0.90757 + -0.82469 2.01045 -1.38907 0.0617445 -0.165163 0.984332 + -0.795223 2.03311 -1.42523 0.855236 0.517339 -0.0305339 + -0.794767 2.02627 -1.40999 0.883444 0.28071 0.375139 + -0.799949 2.02044 -1.40034 0.713175 0.0680769 0.697673 + -0.809004 2.04415 -1.42744 0.459793 0.881303 -0.109063 + -0.802656 2.03978 -1.4173 0.609237 0.770695 0.186706 + -0.802389 2.03578 -1.4084 0.586213 0.66012 0.469675 + -0.807571 2.02994 -1.39874 0.454208 0.468879 0.757527 + -0.822531 2.04825 -1.42455 0.0694523 0.991485 0.110152 + -0.813634 2.04593 -1.41883 0.246162 0.940865 0.232762 + -0.813367 2.04193 -1.40993 0.219155 0.818463 0.531121 + -0.819485 2.04025 -1.40646 0.0644264 0.872314 0.484683 + -0.817687 2.0367 -1.40026 0.173607 0.754034 0.633477 + -0.831042 2.04727 -1.42219 -0.0937982 0.973253 0.209717 + -0.837159 2.04559 -1.41873 -0.214142 0.939507 0.26734 + -0.841188 2.04106 -1.40945 -0.283642 0.856168 0.431883 + -0.83939 2.03751 -1.40323 -0.243246 0.769416 0.590619 + -0.825435 2.03225 -1.39523 0.0387021 0.597015 0.801296 + -0.815319 2.0255 -1.39372 0.278633 0.332372 0.901051 + -0.845322 2.02775 -1.39775 -0.484795 0.411847 0.771593 + -0.83427 2.03325 -1.39638 -0.146429 0.66012 0.73675 + -0.835646 2.02411 -1.39219 -0.227252 0.297854 0.927167 + -0.826811 2.02311 -1.39104 0.022814 0.272858 0.961784 + 0 1.88767 -3.35525 0.954836 0.139621 -0.262288 + -0.00609 1.89928 -3.38721 0.73586 0.391916 -0.552188 + -0.00609 1.92264 -3.37029 0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 0.995304 0.0615783 -0.0746866 + -0.00609 1.93619 -3.35816 0.804944 0.379203 -0.456367 + 0 1.92457 -3.32621 0.995095 0.069045 -0.0708434 + 0 1.97685 -3.27268 0.992394 0.102252 -0.0685482 + -0.00609 1.98847 -3.30463 0.876866 0.357759 -0.321114 + -0.014034 2.05323 -3.24402 0.847172 0.410905 -0.336834 + 0 2.00459 -3.23674 0.987841 0.135558 -0.0761145 + -0.036542 2.02576 -3.30766 0.469584 0.580569 -0.665154 + -0.044486 2.09052 -3.24705 0.596458 0.635622 -0.490125 + -0.014034 2.08098 -3.20808 0.881133 0.428775 -0.199391 + -0.023387 2.12143 -3.14955 0.815642 0.528358 -0.235726 + -0.011587 2.09962 -3.13161 0.964855 0.259286 -0.0427265 + 0 1.98306 -3.19152 0.996986 -0.00648198 0.0773058 + -0.049274 1.91604 -3.38694 0.229826 0.457821 -0.858825 + -0.079725 2.04251 -3.30739 0.188988 0.587024 -0.787202 + -0.0805 2.12506 -3.23831 0.409341 0.71635 -0.565051 + -0.03972 2.11125 -3.19831 0.626549 0.689362 -0.363617 + -0.049073 2.1517 -3.13979 0.618566 0.697315 -0.362115 + -0.136609 2.08013 -3.29146 0.0487676 0.600445 -0.798177 + -0.137384 2.16267 -3.22238 0.22175 0.733824 -0.642129 + -0.075734 2.14578 -3.18957 0.547429 0.728775 -0.411349 + -0.075698 2.17553 -3.13363 0.573402 0.726165 -0.379335 + -0.070733 2.20765 -3.06834 0.585511 0.678113 -0.444229 + -0.128582 1.91321 -3.39442 0.0116184 0.419262 -0.907791 + -0.194055 1.90173 -3.39661 -0.116477 0.390591 -0.913166 + -0.202082 2.06864 -3.29366 -0.12001 0.562741 -0.817876 + -0.183074 2.18144 -3.21184 -0.0442381 0.828972 -0.557538 + -0.106772 2.17875 -3.1773 0.434574 0.770525 -0.4663 + -0.033943 1.8295 -3.41372 0.518421 -0.283289 -0.806837 + -0.113252 1.82668 -3.4212 0.061524 -0.295893 -0.953238 + -0.168645 1.82333 -3.42097 -0.0308865 -0.303605 -0.952297 + -0.232151 1.89626 -3.39129 -0.253492 0.360478 -0.897662 + 0 1.9393 -3.21829 0.982047 -0.14436 0.121427 + 0 1.88998 -3.27556 0.964815 -0.232589 0.122617 + 0 1.86404 -3.32057 0.952614 -0.300232 0.0488543 + 0.00609 1.89928 -3.38721 1 0 0 + 0.00609 1.92264 -3.37029 1 0 0 + 0.00609 1.98847 -3.30463 1 0 0 + 0.00609 1.93619 -3.35816 1 0 0 + 0.049543 1.96837 -1.07328 -0.995507 -0.0901895 -0.0288196 + 0.016514 2.25648 -0.879903 -0.99532 -0.0892786 -0.0369856 + 1.6236 1.20702 0.333423 0.510365 0.290661 -0.809348 + 1.58944 1.14183 0.294724 0.959968 -0.235533 -0.151609 + 1.54797 1.02022 0.202565 0.523282 -0.620808 0.583757 + 1.66144 1.21731 0.386587 0.829473 0.000741546 -0.558546 + 1.63799 1.14373 0.332233 0.716039 0.258524 -0.648423 + 1.59651 1.02203 0.240025 0.672063 0.290901 -0.680961 + 1.54797 1.02022 0.202565 0.226642 0.528293 -0.818254 + 1.6956 1.2825 0.425286 0.827912 -0.190931 -0.527359 + 1.73453 1.32555 0.469515 0.59851 -0.0676555 -0.798253 + 1.692 1.22698 0.438445 0.845628 -0.195696 -0.496605 + 1.66855 1.1534 0.384091 0.935831 -0.0489318 -0.349036 + 1.61359 1.00509 0.256167 0.913109 0.016752 -0.40737 + 1.77486 1.40457 0.487045 0.498028 0.350576 -0.793136 + 1.81379 1.44763 0.531275 0.346877 -0.0339696 -0.937295 + 1.58713 1.18209 0.312985 -0.214621 0.648706 -0.73015 + 1.73839 1.37974 0.466657 -0.0308607 0.628315 -0.777347 + 1.51058 1.01353 0.204356 -0.374377 0.604993 -0.702727 + 1.54999 1.18402 0.345052 -0.372224 0.60787 -0.701387 + 1.53494 1.20168 0.361265 -0.208387 0.42428 -0.881227 + 1.72335 1.39731 0.482819 0.304993 0.269628 -0.913389 + 1.51479 0.962226 0.156811 -0.157681 0.565375 -0.809622 + 1.45289 0.782328 0.067205 -0.72597 0.439872 -0.528659 + 1.47344 1.01536 0.236373 -0.883827 0.40215 -0.239009 + 1.47932 1.00805 0.26964 -0.944953 -0.0140928 0.326903 + 1.46916 0.732146 0.009719 0.102647 0.384459 -0.917418 + 1.4571 0.731029 0.019659 -0.6994 0.421026 -0.57756 + 1.43836 0.646562 -0.011843 -0.689147 -0.261958 -0.675614 + 1.44014 0.777232 0.086428 -0.967332 0.207528 -0.145603 + 1.44603 0.769833 0.119645 -0.805823 -0.299857 0.510622 + 1.50234 0.79014 0.055474 0.350218 0.433111 -0.830519 + 1.45043 0.647681 -0.021782 -0.393666 -0.207783 -0.895463 + 1.45404 0.627251 0.013604 -0.290697 -0.932272 0.215325 + 1.42562 0.641468 0.007382 -0.886585 -0.459955 -0.0490732 + 1.51852 0.785997 0.06025 0.577753 0.321199 -0.750355 + 1.48511 0.641076 -0.02074 0.425259 -0.331964 -0.841994 + 1.46893 0.645218 -0.025515 0.351453 0.393669 -0.849415 + 1.5356 0.768969 0.076342 0.826409 0.117779 -0.550615 + 1.49533 0.629724 -0.003278 0.636739 -0.730776 -0.246027 + 1.47254 0.624788 0.009871 0.0761257 -0.98873 0.128911 + 1.46893 0.645218 -0.025515 -0.0765132 -0.866848 -0.492667 + 1.54581 0.757617 0.093804 0.960075 -0.197828 -0.197786 + 1.54175 0.759103 0.13323 0.734959 -0.571755 0.364598 + 1.51896 0.754167 0.146379 0.402359 -0.716633 0.569687 + 1.46893 0.645218 -0.025515 -0.20936 -0.855931 -0.472811 + 1.61953 1.00237 0.294474 0.955052 -0.29502 -0.0289627 + 1.61547 1.00377 0.333851 0.872187 -0.461668 0.16172 + 1.59729 0.998827 0.391816 0.627257 -0.656573 0.418881 + 1.58579 1.01838 0.423353 -0.192795 -0.685146 0.702428 + 1.50747 0.773805 0.177967 -0.206319 -0.667966 0.715021 + 1.67448 1.15068 0.422399 0.94249 -0.303089 -0.140891 + 1.67055 1.13745 0.474519 0.812658 -0.580282 0.0534738 + 1.65236 1.1325 0.532484 0.499967 -0.79345 0.347087 + 1.6239 1.12854 0.542745 -0.22435 -0.727669 0.648201 + 1.5559 1.00482 0.38144 -0.696829 -0.400836 0.594778 + 1.71906 1.19827 0.504771 0.795508 -0.541855 -0.27122 + 1.71512 1.18512 0.556941 0.593966 -0.802384 -0.0581649 + 1.69311 1.18699 0.618116 0.136508 -0.989503 0.0474213 + 1.66465 1.18294 0.628327 0.200871 -0.977265 0.0678582 + 1.59401 1.11498 0.500832 -0.536172 -0.561187 0.630547 + 1.76075 1.29119 0.47323 0.475269 -0.3485 -0.807878 + 1.78781 1.26248 0.539557 0.424672 -0.579949 -0.695207 + 1.75006 1.18048 0.619176 -0.225521 -0.899222 -0.374887 + 1.7667 1.31913 0.465227 0.11062 0.0739337 -0.991109 + 1.93628 1.39256 0.520656 0.356604 -0.348769 -0.866714 + 1.99104 1.3952 0.534275 0.362224 -0.0715316 -0.929342 + 1.84258 1.26504 0.553125 0.0784366 -0.223787 -0.971477 + 1.82655 1.19522 0.562452 -0.2759 -0.454501 -0.84694 + 1.81123 1.37244 0.505908 -0.110928 0.598447 -0.793445 + 1.94223 1.4205 0.512653 0.241929 0.0903826 -0.966075 + 2.0225 1.50484 0.536169 0.469032 -0.0321816 -0.882595 + 2.02235 1.43909 0.554254 0.998357 -0.0372874 -0.0434996 + 1.9796 1.30111 0.527655 0.0897314 0.0114527 -0.9959 + 1.77906 1.37894 0.510245 0.454176 0.201232 -0.867888 + 1.83752 1.41218 0.525862 -0.0167261 0.380014 -0.924829 + 1.96852 1.46025 0.532606 -0.280149 0.456054 -0.844708 + 1.87225 1.48096 0.54694 0.239515 -0.124146 -0.962923 + 1.92623 1.52564 0.550554 0.172475 -0.161453 -0.971692 + 2.05331 1.58948 0.539771 0.54734 -0.332092 -0.768202 + 2.06414 1.60558 0.55548 0.780939 -0.375439 0.49918 + 2.03333 1.52095 0.551879 0.927057 -0.258818 0.271255 + 1.95708 1.57075 0.541413 0.0655887 -0.168645 -0.983492 + 2.08416 1.6346 0.53063 0.567752 -0.724193 -0.391411 + 2.11451 1.66753 0.53599 0.666764 -0.427903 0.610184 + 2.02913 1.63205 0.580633 0.618854 -0.235073 0.749506 + 1.97252 1.54083 0.60224 0.710247 -0.160271 0.685465 + 1.95975 1.6027 0.539277 -0.0294818 0.0429675 -0.998641 + 2.14566 1.68514 0.49968 0.471094 -0.603399 -0.643414 + 2.17601 1.71808 0.505039 0.493545 -0.803153 0.333705 + 1.76554 1.46641 0.498737 0.555026 -0.166265 -0.815048 + 1.98658 1.67634 0.551519 0.0189887 -0.0624135 -0.99787 + 2.14832 1.71718 0.497593 -0.0606716 -0.0515479 -0.996826 + 2.17601 1.71808 0.505039 0.261306 -0.0843447 -0.961564 + 1.56869 1.32141 0.392478 0.470856 -0.431441 -0.769515 + 1.60429 1.36788 0.362601 0.509988 -0.43286 -0.743333 + 1.79238 1.54006 0.510979 0.368331 -0.00141475 -0.929694 + 1.52649 1.25232 0.376561 -0.192984 0.279094 -0.940672 + 1.46161 1.25622 0.403405 -0.330055 0.398679 -0.85564 + 1.48532 1.13277 0.359413 -0.976364 -0.00819381 -0.215976 + 1.47688 1.18341 0.374709 -0.843832 0.154716 -0.51382 + 1.47147 1.2329 0.468794 -0.970484 -0.240582 -0.016795 + 1.46161 1.25622 0.403405 -0.182658 -0.93444 -0.30571 + 1.52888 1.11144 0.419164 -0.746584 -0.541723 0.386197 + 1.48992 1.15558 0.452516 -0.822669 -0.532214 0.19991 + 1.48452 1.20507 0.546602 -0.87594 -0.449635 0.174809 + 1.4716 1.28252 0.647242 -0.84839 -0.525813 0.0612872 + 1.46174 1.30584 0.581852 -0.861665 -0.490563 0.12993 + 1.46161 1.25622 0.403405 -0.971142 -0.229598 0.0645564 + 1.52288 0.986717 0.329392 -0.765954 -0.330527 0.551422 + 1.55706 1.1107 0.47205 -0.537589 -0.644784 0.543371 + 1.5181 1.15484 0.505402 -0.489018 -0.784974 0.380363 + 1.47445 0.755618 0.125868 -0.576922 -0.479247 0.661425 + 1.46893 0.645218 -0.025515 -0.105967 0.503593 -0.857417 + 1.58083 1.16837 0.550749 -0.21705 -0.88192 0.418456 + 1.58246 1.19137 0.640725 -0.43872 -0.885924 0.150543 + 1.51974 1.17783 0.595377 -0.45268 -0.838773 0.302557 + 1.51282 1.25382 0.698348 -0.681814 -0.722766 0.11287 + 1.61778 1.17266 0.579532 -0.145801 -0.943844 0.296481 + 1.61781 1.15953 0.666276 -0.0959474 -0.982855 -0.15745 + 1.57418 1.16189 0.764578 -0.656618 -0.640319 -0.398554 + 1.54804 1.22667 0.747174 -0.744862 -0.641889 -0.182097 + 1.4986 1.24995 0.798455 -0.203004 -0.719298 -0.664379 + 1.66467 1.16989 0.715122 -0.293473 -0.835617 -0.464346 + 1.60952 1.13005 0.79013 -0.62645 -0.479115 -0.614824 + 1.54296 1.11265 0.844866 -0.310264 -0.353472 -0.882493 + 1.51682 1.17743 0.827462 -0.325504 -0.413572 -0.850297 + 1.6787 1.12823 0.732476 -0.163096 -0.590504 -0.790383 + 1.61213 1.05113 0.783223 -0.548869 -0.241584 -0.800238 + 1.5683 0.988111 0.841178 -0.547422 0.0486342 -0.835442 + 1.56569 1.06703 0.848084 -0.525994 -0.0993635 -0.844664 + 1.45821 0.993018 0.875279 -0.0813083 -0.209352 -0.974454 + 1.72804 1.18235 0.680351 -0.155506 -0.879822 -0.449146 + 1.68426 1.0677 0.780728 -0.125696 -0.429738 -0.894162 + 1.62616 1.00947 0.800577 -0.440865 -0.10875 -0.890961 + 1.56293 0.938751 0.83707 -0.558799 0.180336 -0.809458 + 1.48094 0.947396 0.878496 -0.109455 0.0458741 -0.992932 + 1.79385 1.1297 0.65013 -0.628969 -0.456384 -0.629374 + 1.73359 1.12172 0.728555 -0.484665 -0.476802 -0.733321 + 1.74233 1.05453 0.745943 -0.701051 -0.139494 -0.699335 + 1.67503 0.993074 0.804182 -0.147553 -0.213552 -0.965724 + 1.60738 0.938317 0.794822 -0.189863 -0.0721526 -0.979156 + 1.87035 1.14444 0.593406 -0.490213 -0.410335 -0.768971 + 1.8714 1.0663 0.595953 -0.6176 0.0565013 -0.78446 + 1.80259 1.06251 0.667518 -0.756807 -0.0514879 -0.651608 + 1.95605 1.14271 0.540193 -0.166259 -0.0730329 -0.983374 + 1.9571 1.06466 0.54279 -0.26905 0.113571 -0.956407 + 1.93511 0.978054 0.527395 -0.350577 0.23699 -0.906053 + 1.86448 0.985962 0.583301 -0.651692 0.209617 -0.728944 + 1.79567 0.982171 0.654865 -0.797821 0.127589 -0.589238 + 1.96358 1.2312 0.53693 -0.005607 -0.0794771 -0.996821 + 2.04117 1.26221 0.547429 0.52779 0.198538 -0.825846 + 2.03364 1.17372 0.55069 0.254421 0.0580307 -0.965351 + 2.05537 1.09401 0.543158 0.214348 0.118331 -0.969563 + 2.01091 1.34499 0.547634 0.81624 0.127041 -0.563572 + 2.03594 1.30382 0.610558 0.68583 0.48723 -0.540595 + 2.11727 1.24118 0.595449 0.471294 0.349728 -0.809674 + 2.139 1.16138 0.587867 0.408253 0.205988 -0.889325 + 2.00568 1.3866 0.610764 0.8956 0.389303 -0.215274 + 2.10772 1.36445 0.683332 0.390779 0.544198 -0.742388 + 2.18905 1.30173 0.668173 0.378002 0.493255 -0.783462 + 2.24957 1.22143 0.659059 0.45356 0.315919 -0.833354 + 2.17508 1.07656 0.587571 0.400354 0.195079 -0.895355 + 1.96154 1.45906 0.604665 0.906871 0.294318 0.3016 + 1.95162 1.54327 0.695611 0.848633 0.372677 -0.375412 + 1.99576 1.4709 0.701759 0.63831 0.508945 -0.577525 + 1.93662 1.58282 0.663307 0.960497 -0.0456671 0.274518 + 1.93684 1.67183 0.814343 0.739532 0.196784 -0.643714 + 2.03334 1.60485 0.811952 0.408198 0.516888 -0.752463 + 2.09902 1.56519 0.821239 0.367379 0.493529 -0.788328 + 2.06144 1.43124 0.711046 0.395982 0.556402 -0.73049 + 1.99323 1.67405 0.641699 0.67895 -0.496368 0.540967 + 1.92184 1.71138 0.78204 0.919819 -0.383088 -0.0847195 + 2.03223 1.70722 0.876638 0.371309 0.231117 -0.899285 + 2.12873 1.64024 0.874247 0.273064 0.369404 -0.888244 + 2.0795 1.694 0.561142 0.541121 -0.520916 0.660178 + 2.03537 1.72045 0.660322 0.397973 -0.822373 0.406595 + 1.96398 1.75787 0.800712 0.625753 -0.757657 -0.185443 + 2.0187 1.73586 0.876834 0.549683 -0.251798 -0.796522 + 2.35291 1.59576 0.903702 0.0285107 -0.0624801 -0.997639 + 2.17601 1.71808 0.505039 0.52057 -0.115346 0.845992 + 1.46161 1.25622 0.403405 0.349143 -0.681253 -0.643423 + 1.49721 1.30268 0.373527 -0.37272 -0.374124 -0.849182 + 1.59486 1.39116 0.355271 0.0661859 0.295105 -0.95317 + 1.78295 1.56325 0.503601 0.316794 0.174222 -0.932356 + 1.51069 1.33656 0.353853 0.384043 -0.57319 -0.723854 + 0.671558 1.21943 0.636123 0.983072 0.18314 0.00534615 + 0.677479 1.19172 0.631921 0.799627 0.0806201 0.595061 + 0.703623 1.13731 0.604161 0.7663 0.0905741 -0.636067 + 0.664457 1.19876 0.575727 0.786868 0.20078 -0.583546 + 0.663568 1.37192 0.710797 0.897814 -0.419412 0.134249 + 0.631551 1.33229 0.770247 0.955351 -0.0690554 -0.287291 + 0.637472 1.30458 0.766046 0.553653 0.636433 -0.537048 + 0.677479 1.19172 0.631921 0.973251 0.187902 0.132193 + 0.623492 1.11123 0.541927 0.564488 -0.20943 -0.798431 + 0.60316 1.24951 0.528621 0.62607 0.163866 -0.762354 + 0.656467 1.35125 0.650401 0.909619 0.108296 -0.40108 + 0.694071 1.41874 0.7437 0.588084 -0.775142 -0.230894 + 0.658484 1.06232 0.591236 0.561809 -0.332218 -0.757629 + 0.532736 1.01616 0.534984 0.473469 -0.412744 -0.77812 + 0.696479 1.01014 0.640421 0.599495 -0.459591 -0.655273 + 0.567728 0.967259 0.584293 0.476373 -0.563204 -0.675182 + 0.741618 1.08512 0.653345 0.824359 -0.0358048 -0.564934 + 0.721161 0.972399 0.702789 0.600172 -0.566654 -0.564532 + 0.592998 0.932483 0.647929 0.46096 -0.676248 -0.574633 + 0.489273 0.883681 0.623055 0.38148 -0.760402 -0.525607 + 0.464003 0.918458 0.55942 0.387628 -0.676796 -0.625853 + 0.713836 1.20864 0.668001 0.550632 0.327563 -0.767793 + 0.735281 1.17415 0.702152 0.570207 0.00791372 -0.821463 + 0.763063 1.05071 0.687546 0.771286 -0.231551 -0.592876 + 0.738363 0.929695 0.768755 0.54624 -0.689676 -0.475361 + 0.61768 0.894655 0.710248 0.432531 -0.766956 -0.47402 + 0.677479 1.19172 0.631921 0.432823 0.565969 -0.701671 + 0.687693 1.26305 0.695763 -0.126491 0.626772 -0.768867 + 0.718215 1.30967 0.728414 -0.224358 0.627313 -0.745749 + 0.775011 1.29018 0.707583 0.0104317 0.38707 -0.921991 + 0.77941 1.22822 0.700495 0.213732 0.0171579 -0.976742 + 0.775003 1.09627 0.700841 0.393209 -0.12387 -0.911067 + 0.780265 1.00801 0.753511 0.74184 -0.378022 -0.553871 + 0.667994 1.35128 0.798747 0.0131407 0.405127 -0.914166 + 0.799592 1.37863 0.763184 -0.24156 0.326181 -0.913923 + 0.856388 1.35922 0.742404 -0.168118 0.308778 -0.936159 + 0.894765 1.27125 0.713165 0.0208732 0.145352 -0.98916 + 0.899164 1.20921 0.706027 0.134098 -0.077727 -0.987915 + 0.662054 1.37911 0.803149 0.456739 -0.424743 -0.781654 + 0.677479 1.19172 0.631921 -0.388276 0.644804 -0.658384 + 0.793652 1.40654 0.767637 -0.0631322 -0.107736 -0.992173 + 0.831874 1.44489 0.765213 -0.345299 0.232157 -0.909325 + 0.897125 1.49917 0.7278 -0.489156 -0.074926 -0.868972 + 0.932428 1.43269 0.737749 -0.189256 -0.0589247 -0.980158 + 0.732292 1.45709 0.741276 0.556258 -0.162581 -0.814951 + 0.814631 1.53065 0.792669 0.0196056 -0.0447594 -0.998805 + 0.879882 1.58502 0.755306 -0.45102 -0.287418 -0.844969 + 0.968919 1.59273 0.660141 -0.522094 -0.393728 -0.756569 + 1.00422 1.52625 0.67009 0.0161814 -0.621083 -0.783577 + 0.715451 1.49768 0.719977 0.646056 -0.0668012 -0.760361 + 0.797789 1.57132 0.771421 0.329567 -0.603551 -0.726024 + 0.939812 1.7023 0.659358 -0.0514133 -0.616475 -0.785694 + 0.649712 1.43033 0.669226 0.703275 0.12043 -0.700643 + 0.703075 1.58181 0.701463 0.567189 -0.551004 -0.61212 + 0.830301 1.58874 0.707657 0.436486 -0.872244 -0.220615 + 0.972324 1.71963 0.595543 0.746934 -0.631206 0.208969 + 0.939812 1.7023 0.659358 0.747034 -0.630996 0.209247 + 0.596406 1.32859 0.547445 0.713354 0.233755 -0.66067 + 0.637336 1.51437 0.650661 0.734461 -0.0990238 -0.671388 + 0.593646 0.769686 1.2893 0.92627 -0.201533 0.318446 + 0.614436 0.825338 1.27931 0.0199751 -0.18394 -0.982734 + 0.660776 0.847515 1.2761 0.309724 -0.941107 0.135601 + 0.596975 0.776023 1.30872 0.907173 -0.310714 -0.283714 + 0.604949 0.61793 1.29995 0.942752 -0.0708002 -0.325892 + 0.604988 0.683733 1.27397 0.973905 -0.224235 0.0350467 + 0.625778 0.7393 1.26393 0.675428 -0.202503 0.709077 + 0.614436 0.825338 1.27931 0.362314 -0.173322 0.915799 + 0.661762 0.840666 1.29316 0.237359 -0.93121 -0.276602 + 0.618764 0.825271 1.31522 0.705172 -0.704806 -0.077339 + 0.618328 0.70856 1.35137 0.695864 -0.0389635 -0.717116 + 0.608278 0.624182 1.31932 0.972629 0.0113972 -0.232082 + 0.812578 0.820227 1.26856 -0.348042 -0.885505 -0.30781 + 0.738021 0.83597 1.32369 -0.209302 -0.864843 -0.456333 + 0.695024 0.820489 1.34571 0.0542812 -0.660843 -0.748559 + 0.640117 0.757809 1.35787 0.480275 -0.300903 -0.823889 + 0.617934 0.632076 1.35425 0.959473 -0.173992 -0.221674 + 0.811592 0.827076 1.2515 -0.343823 -0.810948 -0.473445 + 0.928995 0.766171 1.25519 -0.467682 -0.712154 -0.523556 + 0.854439 0.781914 1.31032 -0.439701 -0.678319 -0.588683 + 0.815221 0.742389 1.35778 -0.303508 -0.436673 -0.846876 + 0.708284 0.770454 1.36997 -0.0187659 -0.394964 -0.918505 + 0.734317 0.862237 1.2566 0.0939015 -0.876588 -0.471991 + 0.785162 0.85908 1.22446 -0.365618 -0.847624 -0.384521 + 0.862438 0.824007 1.21941 -0.406828 -0.822903 -0.396638 + 0.948354 0.796696 1.19172 -0.410287 -0.848688 -0.333757 + 0.687977 0.839975 1.25976 0.474716 -0.542805 0.692826 + 0.712689 0.835707 1.21915 0.62195 -0.718834 0.310574 + 0.78827 0.875179 1.17438 0.0673945 -0.996713 0.0449497 + 0.864209 0.836358 1.14702 -0.426044 -0.872168 -0.240436 + 0.950125 0.809046 1.11933 -0.323084 -0.8923 -0.315304 + 0.65049 0.735117 1.22337 0.778201 -0.626407 0.0449143 + 0.656362 0.772864 1.1512 0.598655 -0.781203 -0.177017 + 0.750817 0.830245 1.15141 0.544324 -0.822513 0.164873 + 0.826398 0.869631 1.10659 -0.0233187 -0.974607 -0.222705 + 0.867317 0.852369 1.09689 -0.419848 -0.826584 -0.374816 + 0.583394 0.700325 1.18764 0.57882 -0.707174 -0.406044 + 0.589266 0.73807 1.11546 0.489678 -0.793882 -0.360508 + 0.586773 0.765331 1.04744 0.383968 -0.868039 -0.314765 + 0.666944 0.789911 1.07887 0.440452 -0.873255 -0.208391 + 0.761399 0.847206 1.07903 0.462576 -0.868051 -0.180308 + 0.580026 0.653479 1.24218 0.807556 -0.329218 -0.489355 + 0.527962 0.712325 1.11285 0.209525 -0.843828 -0.494017 + 0.528092 0.742561 1.04268 0.171667 -0.915098 -0.364865 + 0.5256 0.769822 0.974664 0.270024 -0.896064 -0.352358 + 0.579987 0.587676 1.26815 0.662342 -0.364872 -0.654348 + 0.524594 0.665479 1.16739 0.257533 -0.708012 -0.657568 + 0.468772 0.724256 1.09359 -0.26343 -0.85706 -0.442779 + 0.468902 0.754492 1.02342 -0.204557 -0.947174 -0.247018 + 0.462395 0.767841 0.951896 0.00153005 -0.980961 -0.194197 + 0.607885 0.547698 1.32219 0.920988 -0.209194 -0.328664 + 0.565778 0.5247 1.30143 0.531529 -0.227359 -0.815956 + 0.520193 0.609434 1.22066 0.172091 -0.600808 -0.78065 + 0.455669 0.632191 1.20725 -0.328024 -0.597129 -0.732009 + 0.46007 0.688235 1.15398 -0.353447 -0.721074 -0.595926 + 0.595334 0.469248 1.31967 0.853564 -0.256671 -0.453374 + 0.553228 0.446164 1.29886 0.256957 -0.447485 -0.85658 + 0.505984 0.546459 1.25394 0.0193538 -0.536586 -0.843624 + 0.608345 0.598784 1.37451 0.901692 -0.202569 -0.38199 + 0.585745 0.435954 1.33994 0.798244 -0.553802 -0.236875 + 0.522086 0.390288 1.33083 0.176729 -0.659583 -0.73056 + 0.469447 0.503784 1.30626 -0.329217 -0.470044 -0.818948 + 0.653377 0.707774 1.38213 0.500445 -0.257571 -0.826566 + 0.620104 0.518943 1.3988 0.80884 -0.327255 -0.488551 + 0.539198 0.384676 1.38036 0.741735 -0.636758 -0.210636 + 0.475539 0.339011 1.37125 0.0516421 -0.607722 -0.792469 + 0.438306 0.447908 1.33823 -0.349948 -0.372669 -0.85945 + 0.691333 0.692201 1.39771 0.0756771 -0.324047 -0.943009 + 0.665136 0.627933 1.40642 0.480813 -0.231379 -0.845744 + 0.66784 0.546323 1.43458 0.474523 -0.315874 -0.821615 + 0.587339 0.455159 1.43027 0.720245 -0.481984 -0.498937 + 0.506433 0.320807 1.41178 0.6115 -0.747892 -0.258311 + 0.79827 0.664136 1.38552 -0.224547 -0.367723 -0.902418 + 0.792089 0.594912 1.42482 -0.191261 -0.424136 -0.885171 + 0.694037 0.61059 1.42586 0.187231 -0.320463 -0.928573 + 0.964256 0.556677 1.38184 -0.389096 -0.452307 -0.80251 + 0.958075 0.487539 1.42119 -0.369341 -0.487834 -0.790952 + 0.937526 0.429651 1.47146 -0.344313 -0.51796 -0.783049 + 0.817145 0.516214 1.45573 -0.156101 -0.468159 -0.869747 + 0.719093 0.531893 1.45677 0.121676 -0.395528 -0.910358 + 0.987842 0.616329 1.33052 -0.462038 -0.465012 -0.755172 + 1.15942 0.552757 1.26583 -0.479621 -0.489079 -0.728536 + 1.13583 0.493105 1.31715 -0.465161 -0.491342 -0.736348 + 1.08792 0.445309 1.38194 -0.447094 -0.495578 -0.744654 + 1.02706 0.655854 1.28306 -0.477108 -0.492572 -0.727833 + 1.17526 0.617706 1.20894 -0.496012 -0.507105 -0.704852 + 1.32655 0.544633 1.1463 -0.356891 -0.599697 -0.716235 + 1.31011 0.482405 1.21249 -0.317483 -0.648429 -0.691914 + 1.26219 0.434609 1.27727 -0.34923 -0.58241 -0.734055 + 1.05089 0.714985 1.22065 -0.461147 -0.64533 -0.60901 + 1.19909 0.676836 1.14652 -0.429144 -0.648771 -0.628436 + 1.33488 0.693301 1.0436 -0.396769 -0.579324 -0.71201 + 1.34239 0.60958 1.08941 -0.411784 -0.543683 -0.73133 + 1.45688 0.548566 1.10849 0.0567372 -0.730387 -0.680673 + 1.07025 0.74551 1.15717 -0.427829 -0.771936 -0.470189 + 1.14769 0.775965 1.02182 -0.426195 -0.789631 -0.441408 + 1.19143 0.74391 1.06795 -0.104974 -0.797144 -0.594594 + 1.06428 0.792158 1.09598 -0.370419 -0.79465 -0.480959 + 1.14172 0.8227 0.960676 -0.684337 -0.577558 -0.445095 + 1.19119 0.851914 0.802478 -0.182632 -0.725836 -0.66318 + 1.23493 0.81986 0.848598 0.375051 -0.773427 -0.511025 + 0.932215 0.841889 1.05884 -0.309534 -0.837981 -0.449417 + 1.04637 0.825001 1.03549 -0.251448 -0.858541 -0.446857 + 1.11972 0.886319 0.929887 -0.492359 -0.719802 -0.489354 + 0.930162 0.8877 0.986093 -0.372316 -0.845254 -0.383311 + 0.988035 0.855089 0.986578 -0.303414 -0.912191 -0.275403 + 1.06139 0.916319 0.880924 -0.372279 -0.592725 -0.714203 + 1.1441 0.982289 0.714262 -0.481174 -0.287238 -0.828231 + 1.21543 1.25463 0.632758 0.273383 -0.340805 -0.899507 + 0.865264 0.89818 1.02414 -0.219596 -0.89621 -0.385468 + 0.860678 0.922089 0.953931 0.0263632 -0.917131 -0.397713 + 0.902573 0.92971 0.921729 -0.320844 -0.866806 -0.381714 + 0.960445 0.897099 0.922214 -0.206608 -0.779844 -0.590894 + 0.821812 0.89354 1.03638 0.293648 -0.922189 -0.251672 + 0.814715 0.902242 0.955106 0.461388 -0.835719 -0.297816 + 0.838622 0.960135 0.881234 0.166373 -0.875291 -0.454076 + 0.880517 0.967757 0.849032 -0.0888985 -0.831377 -0.548552 + 0.754302 0.855908 0.997757 0.463563 -0.867508 -0.180384 + 0.749509 0.875033 0.919634 0.482272 -0.828576 -0.284386 + 0.800219 0.935087 0.882817 0.579955 -0.732049 -0.357431 + 0.824126 0.992981 0.808944 0.405311 -0.671363 -0.62048 + 0.667163 0.814158 1.00787 0.4065 -0.877395 -0.254825 + 0.662371 0.833281 0.929749 0.372905 -0.896905 -0.237703 + 0.651066 0.847683 0.855804 0.38658 -0.87276 -0.29807 + 0.75087 0.903341 0.841204 0.53932 -0.781601 -0.313424 + 0.80158 0.963308 0.804335 0.701991 -0.56239 -0.436951 + 0.586993 0.789665 0.976497 0.331114 -0.898062 -0.289566 + 0.56609 0.802554 0.906573 0.29108 -0.927231 -0.235615 + 0.554785 0.816956 0.832628 0.317929 -0.909997 -0.266134 + 0.528399 0.831478 0.762472 0.340283 -0.878914 -0.334241 + 0.638559 0.874038 0.783357 0.403963 -0.838962 -0.364632 + 0.500094 0.784327 0.913542 0.188155 -0.9475 -0.258537 + 0.479191 0.797302 0.843667 0.125233 -0.985027 -0.118485 + 0.431488 0.795235 0.775249 0.186393 -0.962749 -0.195885 + 0.405102 0.809844 0.705145 0.154431 -0.929857 -0.333941 + 0.436889 0.782346 0.890773 0.144953 -0.964497 -0.22076 + 0.405466 0.790068 0.823596 0.114393 -0.982008 -0.150246 + 0.357764 0.788001 0.755178 -0.0986554 -0.98039 -0.170593 + 0.320431 0.813892 0.691934 -0.268402 -0.920949 -0.282513 + 0.394347 0.839772 0.636909 0.161998 -0.879637 -0.447208 + 0.394418 0.77022 0.903777 -0.32008 -0.94701 0.0268429 + 0.362995 0.777856 0.83655 -0.334832 -0.939989 -0.0656432 + 0.326228 0.801844 0.780602 -0.569555 -0.815808 0.100323 + 0.288896 0.827734 0.717357 -0.650398 -0.759585 0.0035483 + 0.413333 0.776261 0.981311 -0.441724 -0.896683 -0.0289581 + 0.340494 0.839684 0.921859 -0.75494 -0.651871 0.0716227 + 0.321578 0.833643 0.844325 -0.754277 -0.610662 0.241159 + 0.284811 0.85763 0.788377 -0.834879 -0.470989 0.284862 + 0.41984 0.762912 1.05283 -0.443539 -0.863495 -0.240105 + 0.342526 0.826727 1.0007 -0.525246 -0.805011 -0.275814 + 0.399207 0.75204 1.12726 -0.438023 -0.792164 -0.424984 + 0.321893 0.815854 1.07513 -0.385493 -0.835576 -0.391418 + 0.390505 0.716019 1.18765 -0.280909 -0.715741 -0.639379 + 0.312155 0.767184 1.12703 0.047574 -0.761667 -0.64622 + 0.380768 0.667434 1.23961 -0.22867 -0.657369 -0.718036 + 0.367227 0.618077 1.2867 -0.138123 -0.569559 -0.810262 + 0.204332 1.01157 0.800351 0.140382 -0.956403 -0.256098 + 0.442128 0.582833 1.25434 -0.429512 -0.547422 -0.718226 + 0.405591 0.540158 1.30665 -0.428595 -0.459577 -0.777879 + 0.363435 0.553954 1.32656 -0.234677 -0.535858 -0.811038 + 0.372815 0.484203 1.35417 -0.4545 -0.370133 -0.810204 + 0.454742 0.286813 1.45866 0.529305 -0.829656 -0.177503 + 0.513595 0.336723 1.48201 0.547143 -0.739573 -0.392003 + 0.464944 0.274985 1.51495 0.424898 -0.791161 -0.439916 + 0.556841 0.379342 1.44819 0.660228 -0.616026 -0.429664 + 0.622733 0.398813 1.48367 0.413708 -0.545651 -0.728773 + 0.574081 0.336989 1.51655 0.3484 -0.639017 -0.685766 + 0.544624 0.274352 1.55925 0.29643 -0.707359 -0.641695 + 0.411782 0.241094 1.55345 0.304053 -0.83739 -0.454236 + 0.637341 0.470505 1.4525 0.423389 -0.400165 -0.812779 + 0.704484 0.460203 1.48794 0.235895 -0.452694 -0.859896 + 0.703252 0.385732 1.53053 0.204329 -0.571039 -0.795088 + 0.673794 0.323089 1.57323 0.23101 -0.635907 -0.736381 + 0.810897 0.450873 1.5015 -0.110266 -0.525487 -0.843626 + 0.809665 0.376401 1.54409 -0.0318477 -0.574155 -0.818127 + 0.793357 0.317255 1.59913 -0.0234177 -0.662293 -0.748879 + 0.651443 0.258561 1.6246 0.205977 -0.727571 -0.654381 + 0.931278 0.364221 1.51719 -0.348678 -0.587841 -0.729977 + 0.912571 0.310585 1.57489 -0.280475 -0.617036 -0.735255 + 0.896263 0.251439 1.62993 -0.263604 -0.727988 -0.632887 + 0.878998 0.208596 1.69633 -0.16299 -0.766043 -0.621781 + 0.771006 0.252727 1.6505 0.0630077 -0.716838 -0.694387 + 1.06737 0.38742 1.4322 -0.417632 -0.529055 -0.738705 + 1.05432 0.350224 1.46823 -0.383137 -0.593501 -0.707787 + 1.03561 0.296588 1.52593 -0.350384 -0.64611 -0.678066 + 1.06378 0.27098 1.53688 -0.30591 -0.718648 -0.624472 + 1.24914 0.397413 1.31329 -0.36142 -0.602596 -0.711515 + 1.27731 0.371808 1.32425 -0.239567 -0.659883 -0.712153 + 1.26555 0.307234 1.38929 -0.178416 -0.755017 -0.630965 + 1.04651 0.228051 1.60324 -0.243893 -0.788599 -0.564471 + 1.41823 0.435732 1.23532 0.0978256 -0.745623 -0.659148 + 1.40647 0.371246 1.30042 0.341774 -0.807519 -0.480732 + 1.2514 0.260562 1.46153 -0.117096 -0.825638 -0.551915 + 1.03236 0.181381 1.67547 -0.156214 -0.872193 -0.463547 + 0.858484 0.160513 1.75982 -0.130643 -0.879407 -0.457794 + 1.44043 0.486339 1.17467 0.0991666 -0.767305 -0.633568 + 1.52479 0.464575 1.26937 0.342517 -0.860059 -0.378127 + 1.44873 0.417293 1.32726 0.582041 -0.807053 -0.0994715 + 1.417 0.365191 1.40291 0.682119 -0.710361 -0.173495 + 1.37475 0.319144 1.37606 0.406041 -0.800521 -0.440791 + 1.54292 0.558372 1.13831 0.0788931 -0.798403 -0.596932 + 1.54699 0.515181 1.20871 0.0854089 -0.814929 -0.573233 + 1.60355 0.505276 1.20727 -0.529479 -0.807406 -0.260283 + 1.59744 0.481078 1.30738 0.00332927 -0.929065 -0.369902 + 1.52138 0.433797 1.36528 0.333371 -0.909355 -0.248871 + 1.45478 0.596872 1.05422 0.0269449 -0.68694 -0.726214 + 1.54082 0.606679 1.08404 -0.065265 -0.800736 -0.595452 + 1.5718 0.593954 1.08447 -0.72425 -0.679202 -0.118938 + 1.59948 0.548467 1.13686 -0.754554 -0.615717 -0.227026 + 1.42433 0.648577 1.01687 -0.201513 -0.554291 -0.807561 + 1.47925 0.664574 1.01176 -0.202741 -0.750115 -0.629463 + 1.51022 0.651849 1.0122 -0.606925 -0.791157 -0.0755789 + 1.57817 0.545448 1.05609 -0.901635 -0.375955 0.213802 + 1.60585 0.49996 1.10848 -0.829963 -0.556707 -0.0351931 + 1.41682 0.732298 0.971058 -0.00818089 -0.470001 -0.882628 + 1.42704 0.810131 0.938248 -0.269831 -0.386336 -0.882007 + 1.4488 0.716278 0.974406 -0.366956 -0.483879 -0.794484 + 1.50632 0.652275 0.987461 -0.685511 -0.659946 -0.307483 + 1.57426 0.545874 1.03135 -0.732346 -0.63746 -0.239403 + 1.3925 0.822365 0.933657 -0.0201024 -0.436979 -0.899247 + 1.40273 0.900198 0.900847 -0.261108 -0.310053 -0.914161 + 1.4594 0.843428 0.897777 -0.644665 -0.229194 -0.729299 + 1.48115 0.749575 0.933935 -0.586509 -0.418205 -0.693622 + 1.32722 0.760374 0.965028 -0.0412927 -0.675207 -0.736472 + 1.34742 0.893035 0.898255 0.00805139 -0.32697 -0.945 + 1.39844 1.00285 0.872652 0.0318738 -0.269614 -0.962441 + 1.45392 1.09575 0.847134 0.0879558 -0.302245 -0.949164 + 1.28214 0.831044 0.929625 0.285419 -0.655278 -0.69939 + 1.3401 1.02416 0.862932 0.263538 -0.292307 -0.919296 + 1.39111 1.13398 0.83733 -0.0701664 -0.262316 -0.962428 + 1.43569 1.16827 0.818127 -0.0359714 -0.332134 -0.942546 + 1.25658 1.00816 0.761047 0.808058 -0.242504 -0.536875 + 1.30379 1.01935 0.842075 0.706865 -0.292324 -0.644118 + 1.36663 1.3271 0.796625 0.032978 -0.310657 -0.94995 + 1.38463 1.23273 0.810888 -0.219713 -0.236823 -0.946383 + 1.42922 1.26702 0.791684 -0.521084 -0.321673 -0.790568 + 1.2275 1.01816 0.717136 0.668087 -0.322776 -0.670429 + 1.33033 1.32237 0.775818 0.361061 -0.180405 -0.914926 + 1.38744 1.42682 0.758114 -0.291341 -0.549014 -0.783392 + 1.40544 1.33244 0.772376 -0.608186 -0.300621 -0.734668 + 1.20241 1.08491 0.659711 0.821737 -0.175556 -0.542152 + 1.27955 1.43341 0.724495 0.787079 -0.2647 -0.557172 + 1.37295 1.58577 0.661806 0.603513 -0.590461 -0.535843 + 1.21543 1.25463 0.632758 0.920161 -0.135399 -0.367382 + 1.29257 1.60304 0.697493 0.833208 -0.528713 -0.161949 + 1.26299 1.58624 0.584984 0.813464 -0.56708 -0.129213 + 1.33145 1.63145 0.543685 0.543916 -0.838958 -0.0174777 + 1.36103 1.64833 0.656244 -0.298211 -0.854922 -0.424475 + 1.35441 1.57088 0.718196 -0.903337 -0.116272 -0.412872 + 1.3761 1.46992 0.725657 -0.793977 -0.33983 -0.504099 + 1.4336 1.34407 0.72804 -0.871107 -0.370603 -0.322221 + 1.45738 1.27865 0.747349 -0.632673 -0.65034 -0.420455 + 1.39315 1.39099 0.629974 -0.918886 -0.394522 0.000149688 + 1.42226 1.38717 0.695584 -0.874198 -0.485303 0.0160831 + 1.37295 1.58577 0.661806 -0.906335 -0.102063 -0.410048 + 1.41169 1.40588 0.573584 -0.890991 0.0662353 -0.449163 + 1.43263 1.30966 0.516241 -0.908723 -0.406028 -0.0967652 + 1.46161 1.25622 0.403405 -0.590293 -0.777568 0.216662 + 1.4852 1.45922 0.489986 -0.674987 0.159167 -0.720457 + 1.51961 1.39679 0.412919 -0.598489 0.554314 -0.5784 + 1.44611 1.34345 0.496517 -0.862759 0.182983 -0.471343 + 1.46161 1.25622 0.403405 -0.833932 0.384215 -0.396152 + 1.47328 1.52179 0.484423 -0.55284 0.0157892 -0.833138 + 1.55433 1.51188 0.462787 -0.0458869 0.183572 -0.981935 + 1.6279 1.51032 0.455686 0.361807 -0.319823 -0.875676 + 1.6785 1.53269 0.464743 0.0694811 0.427603 -0.901292 + 1.60378 1.4514 0.414339 -0.25211 0.68595 -0.682579 + 1.33145 1.63145 0.543685 -0.520805 -0.813476 0.258881 + 1.51069 1.33656 0.353853 -0.736409 0.451454 -0.503876 + 1.85767 1.64454 0.554005 -0.00225008 0.343957 -0.938983 + 2.02507 1.75372 0.534508 -0.210753 0.0301314 -0.977075 + 2.19506 1.79142 0.4852 0.00211821 -0.202454 -0.97929 + 1.89362 1.71493 0.55529 -0.0698114 0.222428 -0.972446 + 2.06102 1.82402 0.535743 -0.234465 -0.288846 -0.928221 + 2.23355 1.86879 0.468189 -0.0140452 -0.49414 -0.869269 + 2.29796 1.84198 0.49684 0.293068 -0.701961 -0.649124 + 2.25122 1.76773 0.509233 0.649237 -0.649562 -0.395677 + 2.17601 1.71808 0.505039 0.256217 -0.310771 -0.9153 + 1.84301 1.69247 0.546183 -0.315416 0.669603 -0.672417 + 1.92435 1.7883 0.580415 -0.245577 -0.0998971 -0.964216 + 2.0874 1.87467 0.479216 -0.100475 -0.653987 -0.749804 + 2.23386 1.9363 0.415873 0.00987048 -0.698067 -0.715965 + 1.65514 1.55474 0.517745 -0.280241 0.801455 -0.528332 + 1.68095 1.58851 0.550251 -0.22565 0.685992 -0.691735 + 1.86882 1.72633 0.57874 -0.5141 0.526502 -0.677124 + 1.58157 1.5563 0.524846 0.234794 0.617193 -0.750963 + 1.73074 1.64424 0.584322 -0.0742102 0.317076 -0.945492 + 1.78626 1.70629 0.586049 -0.101839 0.161284 -0.98164 + 1.50569 1.64402 0.533103 0.0164701 0.457677 -0.888966 + 1.63136 1.61203 0.558918 0.155741 0.390001 -0.907548 + 1.67239 1.66973 0.591372 0.0119341 0.334782 -0.94222 + 1.82528 1.77713 0.594749 -0.125755 0.00273734 -0.992058 + 1.42465 1.65393 0.554737 0.125815 0.0144747 -0.991948 + 1.54673 1.70181 0.565607 0.125471 0.235171 -0.963821 + 1.71141 1.74066 0.600124 0.0154467 0.124025 -0.992159 + 1.84873 1.84604 0.584593 -0.366665 0.109098 -0.923934 + 1.95594 1.84108 0.537384 -0.333553 -0.281617 -0.899686 + 1.33145 1.63145 0.543685 -0.007949 0.467433 -0.883993 + 0.504969 0.221988 1.60774 0.237825 -0.766746 -0.596271 + 0.475349 0.171371 1.66461 0.157695 -0.863973 -0.478208 + 0.621823 0.208035 1.68151 0.201233 -0.772149 -0.602736 + 0.594741 0.15241 1.74105 0.136813 -0.846672 -0.514226 + 0.450434 0.140476 1.73692 0.0706211 -0.9128 -0.402254 + 0.429275 0.104849 1.80763 -0.0147282 -0.948953 -0.315074 + 0.750491 0.20473 1.71403 0.0571877 -0.795196 -0.60365 + 0.72341 0.149105 1.77358 0.140004 -0.826015 -0.545983 + 0.707126 0.112246 1.84442 0.116904 -0.886261 -0.44819 + 0.573582 0.116783 1.81176 0.0858164 -0.880066 -0.467033 + 0.845283 0.132889 1.83526 -0.00712098 -0.898008 -0.439922 + 0.828999 0.095944 1.90606 0.0262662 -0.947878 -0.317548 + 0.829722 0.076875 1.98428 0.104221 -0.962419 -0.250775 + 0.685094 0.06822 1.91427 0.135809 -0.91992 -0.367835 + 0.55155 0.072756 1.88162 -0.0154271 -0.9426 -0.333566 + 1.01916 0.153671 1.75087 -0.0749727 -0.932811 -0.352481 + 1.00992 0.123663 1.83285 -0.00953909 -0.954883 -0.296828 + 1.01064 0.104512 1.91101 0.0508786 -0.973464 -0.223114 + 1.00914 0.085753 1.99731 0.0726489 -0.977996 -0.195563 + 0.833452 0.058511 2.06169 0.119228 -0.97156 -0.204585 + 1.24407 0.212977 1.53635 -0.00844745 -0.898485 -0.438923 + 1.23482 0.182879 1.61828 0.0924586 -0.951464 -0.293543 + 1.2298 0.160337 1.70752 0.152977 -0.962698 -0.223184 + 1.22831 0.141582 1.79381 0.178141 -0.965141 -0.191752 + 1.36742 0.271559 1.45088 0.552388 -0.768584 -0.322717 + 1.35807 0.237154 1.53847 0.631495 -0.747611 -0.205653 + 1.35305 0.21461 1.62772 0.639089 -0.74878 -0.175767 + 1.35462 0.194096 1.72325 0.640707 -0.752951 -0.150199 + 1.22268 0.123844 1.88473 0.177579 -0.969734 -0.167572 + 1.39068 0.324625 1.49217 0.779432 -0.616511 -0.111353 + 1.38133 0.290225 1.57975 0.797888 -0.586871 -0.137683 + 1.38355 0.264554 1.67781 0.777919 -0.607992 -0.158705 + 1.38511 0.244046 1.77334 0.763435 -0.628064 -0.150674 + 1.34899 0.176277 1.81411 0.589128 -0.791234 -0.163945 + 1.48839 0.408057 1.43006 0.44459 -0.874828 -0.192395 + 1.46206 0.367494 1.51932 0.470969 -0.846269 -0.249031 + 1.43897 0.324733 1.62698 0.480796 -0.844795 -0.234856 + 1.44119 0.299154 1.72508 0.469891 -0.862275 -0.188902 + 1.44404 0.284487 1.81029 0.493293 -0.849294 -0.188047 + 1.60783 0.439745 1.46897 0.109248 -0.932497 -0.344259 + 1.57742 0.413593 1.52927 0.220968 -0.935259 -0.276521 + 1.58031 0.394507 1.58953 0.163125 -0.903667 -0.395949 + 1.46494 0.348315 1.57954 0.318997 -0.898043 -0.302918 + 1.53758 0.337601 1.69629 0.267681 -0.934524 -0.234546 + 1.64082 0.465397 1.40414 0.046207 -0.99173 -0.11973 + 1.70716 0.451029 1.41863 -0.429796 -0.840721 -0.329337 + 1.67675 0.424968 1.47897 -0.182324 -0.929255 -0.321315 + 1.67259 0.411655 1.55043 -0.0930051 -0.932799 -0.348189 + 1.56355 0.361189 1.64884 0.218852 -0.914201 -0.341086 + 1.64747 0.455233 1.33715 -0.0884755 -0.993173 -0.0760226 + 1.70774 0.443485 1.2775 -0.373478 -0.926359 0.0487167 + 1.7011 0.453736 1.34454 -0.321336 -0.944484 0.0685023 + 1.74448 0.421888 1.2955 -0.229203 -0.973324 0.0102887 + 1.76927 0.424377 1.37059 -0.218054 -0.969941 -0.108015 + 1.62255 0.484202 1.25657 -0.529236 -0.846614 -0.0561619 + 1.67258 0.458269 1.28629 -0.384053 -0.917826 -0.100491 + 1.68785 0.453432 1.21987 -0.292349 -0.951219 0.0985656 + 1.70722 0.427067 1.15213 -0.206535 -0.977385 -0.0454132 + 1.73842 0.424595 1.22141 -0.082505 -0.995759 -0.0407002 + 1.64577 0.44771 1.21778 -0.404307 -0.906621 0.120719 + 1.66104 0.442785 1.15131 -0.327013 -0.943935 -0.0452763 + 1.68733 0.437013 1.09451 -0.2811 -0.906551 -0.314878 + 1.74607 0.451085 1.08933 0.38557 -0.844264 -0.372228 + 1.62677 0.468698 1.16843 -0.740285 -0.670151 -0.0536352 + 1.64214 0.473346 1.09438 -0.512874 -0.818667 -0.25835 + 1.66932 0.483248 1.03682 -0.267884 -0.845797 -0.461373 + 1.70803 0.526187 0.970451 0.249358 -0.749471 -0.613281 + 1.72604 0.479952 1.02813 0.224074 -0.776557 -0.588854 + 1.62122 0.504521 1.03438 -0.537848 -0.768184 -0.347293 + 1.65042 0.513721 0.979845 -0.31386 -0.785172 -0.53385 + 1.69254 0.569577 0.911697 0.164414 -0.724033 -0.669884 + 1.77926 0.596395 0.94745 -0.0748964 -0.843285 -0.532223 + 1.80408 0.558557 1.00699 -0.0652228 -0.876019 -0.477847 + 1.61372 0.556018 0.987985 -0.602199 -0.604026 -0.522023 + 1.6443 0.568153 0.923365 -0.467755 -0.649808 -0.599128 + 1.68642 0.623924 0.855168 0.0633865 -0.722658 -0.688294 + 1.76377 0.639698 0.888645 -0.148995 -0.827491 -0.541349 + 1.82641 0.596891 0.83859 -0.831164 -0.536003 -0.147874 + 1.59539 0.606046 0.942334 -0.640329 -0.465984 -0.610604 + 1.6368 0.619564 0.87692 -0.632854 -0.404949 -0.659934 + 1.68565 0.675408 0.803195 -0.370572 -0.441957 -0.816915 + 1.75074 0.675868 0.825996 -0.219666 -0.795801 -0.564312 + 1.55592 0.595988 0.985752 -0.578901 -0.614615 -0.535838 + 1.59717 0.672538 0.915164 -0.456079 -0.452806 -0.766132 + 1.65074 0.688961 0.854519 -0.768384 -0.140612 -0.624351 + 1.69959 0.744892 0.780844 -0.601941 -0.268584 -0.752017 + 1.74998 0.727353 0.774023 -0.514271 -0.579191 -0.632505 + 1.49687 0.688112 0.95859 -0.854548 -0.403535 -0.326966 + 1.54647 0.631827 0.956881 -0.409921 -0.61929 -0.66966 + 1.587 0.73028 0.874155 -0.323355 -0.404275 -0.855572 + 1.65252 0.755455 0.82735 -0.689923 -0.0795619 -0.719497 + 1.53629 0.689567 0.915871 -0.436454 -0.519615 -0.734512 + 1.52058 0.751028 0.891216 -0.514173 -0.37798 -0.769907 + 1.59075 0.801736 0.854789 -0.129658 -0.369474 -0.920151 + 1.66934 0.83939 0.830171 -0.565248 -0.0487041 -0.823482 + 1.52797 0.812986 0.854702 -0.387274 -0.378952 -0.840485 + 1.59815 0.863693 0.818274 0.00621149 -0.391408 -0.920196 + 1.67309 0.910845 0.810805 -0.389945 -0.130503 -0.911544 + 1.72873 0.895888 0.758512 -0.796035 0.0757938 -0.600486 + 1.71192 0.81204 0.755743 -0.797092 0.0510415 -0.601697 + 1.47557 0.897951 0.87434 -0.555298 -0.0447722 -0.830446 + 1.54415 0.867509 0.831265 -0.432187 -0.111064 -0.894919 + 1.7404 0.972385 0.752615 -0.772429 0.0119071 -0.634989 + 1.784 0.90576 0.660813 -0.844497 0.05193 -0.533037 + 1.76663 0.838042 0.686105 -0.83602 0.0261024 -0.548078 + 1.7543 0.770894 0.711207 -0.781265 -0.311228 -0.541075 + 1.84667 0.90357 0.570808 -0.741144 0.177801 -0.647373 + 1.82929 0.835937 0.59615 -0.846533 0.0632503 -0.528566 + 1.81694 0.764071 0.600627 -0.904114 -0.0662976 -0.422117 + 1.81262 0.720615 0.663493 -0.88331 -0.330036 -0.332925 + 1.80878 0.671025 0.710185 -0.888061 -0.380465 -0.258059 + 1.91729 0.895662 0.514904 -0.395556 0.394136 -0.829573 + 1.89324 0.815687 0.474424 -0.60156 0.290562 -0.74411 + 1.88089 0.74382 0.478903 -0.74833 0.158326 -0.644155 + 1.8728 0.652784 0.458382 -0.82356 0.0196149 -0.566889 + 1.86896 0.603195 0.505073 -0.943057 -0.196082 -0.268691 + 2.02185 0.925852 0.501813 0.0194175 0.366195 -0.930335 + 1.9978 0.845877 0.461334 -0.0378628 0.461631 -0.886264 + 1.96911 0.765755 0.420306 -0.243309 0.337251 -0.90943 + 1.96102 0.67472 0.399785 -0.45954 0.313179 -0.831109 + 1.91603 0.534961 0.413056 -0.78968 -0.27946 -0.546176 + 2.03338 1.0074 0.527763 0.109678 0.224496 -0.968283 + 2.16355 0.995014 0.561621 0.30655 0.316882 -0.89756 + 2.14033 0.913598 0.518236 0.237985 0.395526 -0.887086 + 2.11164 0.833479 0.477208 0.158222 0.508014 -0.846692 + 2.06878 0.768334 0.418843 0.0346415 0.545491 -0.8374 + 2.28565 1.13661 0.658763 0.480438 0.24021 -0.843492 + 2.29816 1.04453 0.635263 0.444883 0.297324 -0.844795 + 2.27494 0.963112 0.591876 0.410017 0.358164 -0.838812 + 2.24601 0.882803 0.540174 0.373561 0.424456 -0.824796 + 2.40167 1.17625 0.744707 0.62545 0.295034 -0.722335 + 2.41419 1.08425 0.721256 0.62007 0.266557 -0.737876 + 2.40624 0.987597 0.680067 0.619445 0.251694 -0.743598 + 2.37731 0.907288 0.628365 0.566246 0.310875 -0.763362 + 2.20315 0.817744 0.481859 0.323724 0.470376 -0.820944 + 2.35935 1.27623 0.753345 0.569768 0.376025 -0.730732 + 2.45962 1.2704 0.860231 0.746365 0.290998 -0.598548 + 2.50194 1.17043 0.851594 0.795723 0.267893 -0.543192 + 2.499 1.08753 0.812577 0.807296 0.204484 -0.553588 + 2.49105 0.990875 0.771388 0.821083 0.155633 -0.549182 + 2.29884 1.35653 0.76246 0.449463 0.529444 -0.719494 + 2.43986 1.36033 0.870073 0.60841 0.399242 -0.685888 + 2.57772 1.20514 0.996876 0.917296 0.16136 -0.364048 + 2.56484 1.11228 0.962714 0.929446 0.0686311 -0.362519 + 2.56189 1.02938 0.923698 0.934205 0.0353729 -0.354978 + 2.22158 1.4297 0.776525 0.399504 0.567108 -0.720268 + 2.36261 1.4335 0.884138 0.465973 0.403284 -0.787547 + 2.57256 1.39479 0.982791 0.549311 -0.135382 -0.824578 + 2.55796 1.29515 1.00677 0.801521 -0.0799392 -0.5926 + 2.61381 1.14019 1.11437 0.978215 -0.0848983 -0.18944 + 2.1753 1.4964 0.804189 0.35581 0.535244 -0.766103 + 2.3061 1.50942 0.869238 0.344642 0.291116 -0.892453 + 2.22982 1.57813 0.886237 0.243367 0.306875 -0.920109 + 2.45399 1.53364 0.915692 0.25468 -0.134575 -0.957616 + 2.51606 1.47071 0.967891 0.330929 -0.163916 -0.92931 + 2.58157 1.54655 0.941937 0.266095 -0.418526 -0.868349 + 2.64364 1.48362 0.994138 0.522602 -0.378271 -0.764067 + 2.69852 1.5131 1.03227 0.708694 -0.344683 -0.615587 + 2.71043 1.46155 1.07875 0.716198 -0.306736 -0.626876 + 2.5719 1.58847 0.916332 0.24231 -0.493795 -0.835136 + 2.6611 1.61844 0.948007 0.549291 -0.341806 -0.762527 + 2.71598 1.64801 0.986193 0.712945 -0.337458 -0.61468 + 2.80102 1.66446 1.09471 0.864027 -0.233586 -0.445976 + 2.81293 1.61291 1.14119 0.873009 -0.225582 -0.432398 + 2.48122 1.62578 0.875297 0.0576972 -0.586627 -0.807799 + 2.60333 1.64967 0.891728 0.39063 -0.520367 -0.75936 + 2.65143 1.66036 0.922402 0.541031 -0.461766 -0.702892 + 2.67776 1.7169 0.900876 0.615671 -0.46008 -0.639747 + 2.72185 1.72568 0.947274 0.734082 -0.373179 -0.567328 + 2.39266 1.62727 0.890711 -0.178698 -0.409407 -0.89468 + 2.32032 1.74681 0.80888 -0.080778 -0.736278 -0.671841 + 2.41817 1.76788 0.780783 0.0867385 -0.663433 -0.743192 + 2.51266 1.68707 0.850743 0.176262 -0.512871 -0.840176 + 2.33938 1.62431 0.903847 -0.0807268 -0.234746 -0.968699 + 2.1281 1.7572 0.861874 -0.191533 -0.75013 -0.632945 + 2.23175 1.7483 0.824294 -0.202616 -0.80611 -0.555997 + 2.25326 1.7895 0.740335 0.113395 -0.981665 -0.153219 + 2.07482 1.75424 0.87501 0.0678055 -0.603834 -0.794221 + 2.07002 1.79113 0.816903 0.136201 -0.976298 -0.168201 + 2.17367 1.78214 0.779273 -0.0585759 -0.993051 -0.102069 + 2.0201 1.77625 0.798888 0.28461 -0.958639 0.00302481 + 2.16063 1.76303 0.711379 0.17972 -0.950578 0.253183 + 2.24023 1.7703 0.672389 0.244021 -0.966599 0.0783627 + 2.32775 1.80176 0.63849 0.343177 -0.937812 -0.0523219 + 2.35111 1.81057 0.712237 0.202888 -0.938995 -0.277712 + 2.11072 1.74814 0.693364 0.17752 -0.928081 0.32734 + 2.16828 1.73679 0.612622 0.375287 -0.901583 0.215191 + 2.23005 1.77134 0.598377 0.433469 -0.900303 0.0394736 + 2.09294 1.7091 0.57958 0.34235 -0.883237 0.320451 + 2.18945 1.73318 0.523476 0.468924 -0.849497 0.241797 + 2.31758 1.80281 0.564478 0.393126 -0.869731 -0.298361 + 1.82181 0.634855 0.772834 -0.836211 -0.515998 -0.185735 + 1.86328 0.522468 0.640895 -0.963848 -0.213776 -0.159052 + 1.85602 0.48344 0.700494 -0.939084 -0.329717 -0.0969986 + 1.85124 0.55914 0.898177 -0.80946 -0.582162 -0.076567 + 1.85867 0.560346 0.57509 -0.942193 -0.275062 -0.191345 + 1.90574 0.492112 0.483073 -0.829741 -0.422046 -0.365249 + 1.89848 0.453085 0.542671 -0.793513 -0.534383 -0.291156 + 1.87381 0.447583 0.759598 -0.806263 -0.589642 0.0475713 + 1.86903 0.523284 0.95728 -0.803541 -0.588331 -0.0904918 + 1.9883 0.45298 0.409452 -0.417599 -0.705123 -0.573072 + 2.00954 0.415124 0.469421 -0.204335 -0.935948 -0.286789 + 1.91972 0.415229 0.60264 -0.549737 -0.81767 -0.170893 + 1.91275 0.418998 0.829711 -0.727032 -0.685426 0.0402044 + 1.94935 0.565786 0.362664 -0.617152 -0.0384118 -0.785906 + 2.02161 0.483805 0.35906 -0.03745 -0.574896 -0.817369 + 2.08366 0.48792 0.382134 0.525269 -0.420733 -0.739646 + 2.06514 0.433022 0.407221 0.26415 -0.739555 -0.619099 + 2.02637 0.400974 0.55173 -0.0700898 -0.977697 -0.197978 + 1.96117 0.623916 0.370181 -0.582338 0.309576 -0.751695 + 2.03079 0.576167 0.342284 0.0479223 -0.0215181 -0.998619 + 2.09283 0.580194 0.365307 0.48037 -0.11017 -0.870119 + 2.13465 0.524988 0.431131 0.689607 -0.423183 -0.587671 + 2.11612 0.470088 0.456217 0.721537 -0.57025 -0.392682 + 2.06893 0.717615 0.389289 0.0168197 0.449892 -0.892925 + 2.0426 0.634297 0.349801 0.0357102 0.264327 -0.963772 + 2.13163 0.660539 0.38755 0.443276 0.150754 -0.883618 + 2.19049 0.596965 0.432463 0.639774 -0.295599 -0.709444 + 2.15795 0.743771 0.426986 0.366044 0.360736 -0.857835 + 2.22929 0.677309 0.454703 0.597338 0.0398495 -0.800999 + 2.29897 0.667008 0.517943 0.739136 -0.248636 -0.625986 + 2.25055 0.615226 0.490033 0.718076 -0.437572 -0.5412 + 2.19471 0.543249 0.488701 0.681708 -0.526608 -0.507895 + 2.29095 0.754304 0.509943 0.590004 0.155228 -0.792338 + 2.36063 0.744003 0.573183 0.723767 -0.0701408 -0.68647 + 2.37781 0.693688 0.612731 0.750656 -0.375087 -0.543898 + 2.33759 0.653832 0.596765 0.73113 -0.500001 -0.464164 + 2.28918 0.60205 0.568855 0.744919 -0.480831 -0.46249 + 2.33615 0.828191 0.564767 0.559638 0.28448 -0.778381 + 2.41636 0.820637 0.631649 0.739303 0.115705 -0.663358 + 2.40083 0.774762 0.610509 0.726021 -0.0241785 -0.687247 + 2.41802 0.724447 0.650057 0.791033 -0.314137 -0.524962 + 2.39662 0.676452 0.657786 0.754001 -0.5525 -0.355283 + 2.45752 0.899734 0.695248 0.764468 0.172604 -0.621125 + 2.48254 0.845314 0.738309 0.892254 -0.0327908 -0.450342 + 2.4625 0.801927 0.699457 0.877721 -0.0342006 -0.47795 + 2.44697 0.756052 0.678316 0.86418 -0.192485 -0.464912 + 2.48473 0.934199 0.747354 0.875184 0.0846304 -0.47633 + 2.50976 0.879865 0.790465 0.92145 -0.0224679 -0.387847 + 2.49905 0.810617 0.786604 0.941661 -0.220736 -0.254069 + 2.479 0.767145 0.747704 0.921024 -0.264187 -0.286217 + 2.45367 0.732084 0.713029 0.860567 -0.394201 -0.322536 + 2.52809 0.924004 0.840815 0.942149 0.0156458 -0.33483 + 2.5386 0.896836 0.880669 0.964608 -0.082113 -0.250576 + 2.52027 0.852697 0.830319 0.949232 -0.204135 -0.239349 + 2.49331 0.781366 0.82267 0.9276 -0.364023 -0.0839421 + 2.5344 0.980681 0.864848 0.928631 -0.00801826 -0.370919 + 2.55869 0.939821 0.946216 0.951577 -0.124901 -0.280894 + 2.54014 0.858694 0.912934 0.939332 -0.313187 -0.13989 + 2.51454 0.823445 0.866386 0.904225 -0.40913 -0.122436 + 2.58618 0.988521 1.00507 0.979071 -0.140135 -0.147585 + 2.56023 0.901679 0.978481 0.954078 -0.290333 -0.0737738 + 2.53165 0.838818 1.05256 0.913538 -0.402561 0.0582432 + 2.51634 0.79982 0.971909 0.883863 -0.466957 -0.027164 + 2.49073 0.764571 0.92536 0.886831 -0.459666 -0.0473023 + 2.60092 1.04733 1.08021 0.98845 -0.138787 -0.0608608 + 2.56768 0.943084 1.07156 0.944623 -0.322299 0.0617331 + 2.5391 0.88031 1.14569 0.924055 -0.37523 0.0729709 + 2.58243 1.00189 1.14671 0.958156 -0.282252 0.0476613 + 2.54816 0.916788 1.24551 0.924885 -0.376572 0.0527289 + 2.49043 0.791906 1.25421 0.887843 -0.45236 0.0842909 + 2.48424 0.761974 1.15306 0.869378 -0.488031 0.0775038 + 2.46892 0.722888 1.07236 0.857893 -0.510084 0.0619184 + 2.59308 1.04304 1.25684 0.950486 -0.310767 0.000276595 + 2.55881 0.957931 1.35565 0.927786 -0.369289 0.0532814 + 2.51029 0.860121 1.45466 0.897745 -0.434915 0.0700224 + 2.49949 0.828385 1.35403 0.886072 -0.459019 0.0646431 + 2.42666 0.707028 1.40663 0.845744 -0.527412 0.0809584 + 2.63788 1.20703 1.1818 0.924135 -0.302237 -0.233726 + 2.61715 1.10987 1.32427 0.934838 -0.354857 -0.0124516 + 2.61877 1.12024 1.39092 0.928873 -0.346621 0.130568 + 2.56943 1.00822 1.47854 0.936878 -0.339198 0.0848845 + 2.69088 1.31879 1.16602 0.832613 -0.488627 -0.260765 + 2.68403 1.27004 1.36046 0.912318 -0.409108 -0.0174877 + 2.68566 1.28041 1.4271 0.833458 -0.458786 0.307997 + 2.69582 1.36191 1.10273 0.747763 -0.449461 -0.488707 + 2.82917 1.55684 1.26112 0.91173 -0.404572 -0.0712022 + 2.73704 1.3818 1.34469 0.898624 -0.438482 0.0144118 + 2.83411 1.59996 1.19782 0.924772 -0.25079 -0.286185 + 2.88133 1.67507 1.38653 0.916335 -0.399711 -0.023677 + 2.84279 1.60821 1.36312 0.856738 -0.490286 0.160061 + 2.75066 1.43318 1.4467 0.893546 -0.394843 0.213716 + 2.90337 1.85575 1.33597 0.949621 0.0161176 -0.312987 + 2.92455 1.84272 1.39255 0.973919 -0.0519995 -0.220858 + 2.86532 1.87264 1.20993 0.952761 0.00404706 -0.303695 + 2.95481 2.09748 1.58589 0.974836 -0.00174564 -0.222915 + 2.98303 2.14159 1.73209 0.988962 -0.0402742 -0.142589 + 2.99574 2.15389 1.85579 0.981807 -0.189344 0.014288 + 2.93726 1.8551 1.51631 0.983621 -0.15214 -0.0966632 + 2.80689 1.74221 1.05584 0.890065 -0.216512 -0.401132 + 2.81001 1.82439 1.0431 0.925427 -0.0260535 -0.37803 + 2.81581 2.05844 1.12231 0.945637 0.0702556 -0.317545 + 2.91676 2.11437 1.45984 0.958892 0.030765 -0.282098 + 2.72177 1.82364 0.876602 0.808816 -0.282963 -0.515509 + 2.72489 1.90582 0.863861 0.923415 -0.0291651 -0.382693 + 2.76051 2.01011 0.95543 0.934749 0.0349288 -0.353588 + 2.7848 2.16815 1.04528 0.950584 0.0400578 -0.307871 + 2.87667 2.11855 1.3206 0.954486 -0.0238058 -0.297303 + 2.67768 1.81486 0.830204 0.559341 -0.493534 -0.666004 + 2.67396 1.9354 0.721423 0.776952 -0.421209 -0.467898 + 2.68502 1.95172 0.749157 0.954307 -0.0233638 -0.297914 + 2.71138 1.98324 0.833165 0.938418 0.0114834 -0.345311 + 2.62967 1.7062 0.870201 0.482092 -0.492265 -0.72475 + 2.58267 1.73848 0.824504 0.270608 -0.514977 -0.81337 + 2.63068 1.84713 0.784507 0.351959 -0.618914 -0.702189 + 2.48818 1.81928 0.754544 0.206464 -0.72191 -0.660468 + 2.58025 1.85702 0.72798 0.356293 -0.776905 -0.519109 + 2.62354 1.94529 0.664895 0.485335 -0.76367 -0.425744 + 2.43108 1.83731 0.699718 0.284864 -0.921229 -0.264933 + 2.52314 1.87505 0.673153 0.380824 -0.851003 -0.361617 + 2.56371 1.90541 0.638774 0.538406 -0.813374 -0.220321 + 2.65259 1.99834 0.58761 0.855624 -0.475973 -0.203363 + 2.40771 1.82859 0.62602 0.309136 -0.916423 -0.254175 + 2.44828 1.85895 0.591641 0.425765 -0.871223 -0.244324 + 2.59276 1.95846 0.561488 0.568262 -0.78942 -0.23215 + 2.45007 1.87419 0.527834 0.393111 -0.89808 -0.197273 + 2.59456 1.9737 0.497681 0.629886 -0.764202 -0.138706 + 2.65958 2.04483 0.483687 0.897798 -0.437804 -0.0478185 + 2.66253 2.06267 0.61958 0.98472 -0.0204596 -0.17294 + 2.36711 1.85411 0.519218 0.266042 -0.869767 -0.415603 + 2.49456 1.90442 0.452076 0.427214 -0.898405 -0.101765 + 2.59875 1.98864 0.397003 0.681887 -0.731436 -0.00562154 + 2.66377 2.05986 0.383058 0.854675 -0.518882 0.0171137 + 2.3475 1.89328 0.451581 0.467733 -0.587779 -0.660107 + 2.3478 1.96087 0.399315 -0.244105 -0.794221 -0.556441 + 2.4116 1.88434 0.44346 -0.106566 -0.913771 -0.392003 + 2.42771 1.91018 0.369699 -0.251129 -0.929934 -0.268622 + 2.51789 1.91892 0.360977 0.367215 -0.928262 -0.0590254 + 2.26025 1.98695 0.359346 0.149794 -0.958924 -0.240888 + 2.36392 1.98662 0.325503 -0.436626 -0.898441 -0.046489 + 2.35463 1.97552 0.240132 -0.267618 -0.963065 0.0297682 + 2.46725 1.92879 0.287876 -0.0923059 -0.988734 -0.117834 + 2.55743 1.93752 0.279154 0.451304 -0.889987 0.0651723 + 2.11899 1.92745 0.436183 -0.150894 -0.777408 -0.610628 + 2.25096 1.97584 0.273974 0.0223312 -0.988689 -0.14831 + 1.97939 1.91008 0.527278 -0.464129 -0.153791 -0.872314 + 2.10042 1.94287 0.395095 -0.460241 -0.664172 -0.589113 + 2.23238 1.99125 0.232885 -0.0799532 -0.996497 -0.0245063 + 2.35579 1.96937 0.155186 -0.271557 -0.943545 0.18968 + 2.46841 1.92264 0.20293 -0.146599 -0.981954 0.119476 + 1.98681 1.983 0.502177 -0.561287 -0.301657 -0.770688 + 2.10785 2.01579 0.369994 -0.645005 -0.583986 -0.492878 + 2.21447 1.97213 0.146212 -0.348375 -0.936876 -0.029968 + 2.33788 1.95024 0.068513 -0.31059 -0.935433 0.168814 + 1.86395 1.92119 0.601043 -0.367421 -0.116224 -0.922764 + 1.86303 1.97649 0.569659 -0.0802777 -0.65664 -0.74992 + 1.98589 2.03839 0.470843 -0.368885 -0.695125 -0.617029 + 2.09749 2.04099 0.300132 -0.607779 -0.747658 -0.267605 + 2.20412 1.99725 0.076298 -0.464977 -0.88396 -0.0491106 + 1.72344 1.78891 0.607946 -0.0683575 0.205625 -0.97624 + 1.73866 1.86406 0.624396 0.0576267 -0.0879699 -0.994455 + 1.75061 1.91433 0.605914 0.221224 -0.551671 -0.804189 + 1.84856 2.01994 0.506199 0.275472 -0.903026 -0.329635 + 1.97685 2.07276 0.415306 -0.133399 -0.933509 -0.332815 + 1.55876 1.75007 0.57343 0.275332 0.00285728 -0.961345 + 1.62279 1.80396 0.596478 0.299484 -0.0830465 -0.95048 + 1.63474 1.85424 0.577997 0.507909 -0.636863 -0.58003 + 1.62911 1.86904 0.529369 0.574287 -0.705876 -0.41465 + 1.73614 1.95778 0.542454 0.4003 -0.775248 -0.488621 + 1.4907 1.74 0.544658 0.499719 -0.517574 -0.694549 + 1.55473 1.7939 0.567707 0.574051 -0.467155 -0.672482 + 1.5491 1.8087 0.519079 0.558113 -0.675436 -0.481971 + 1.6096 1.89578 0.469647 0.534305 -0.669692 -0.515782 + 1.42107 1.71157 0.51291 0.445146 -0.643983 -0.622198 + 1.32788 1.68917 0.501908 0.451926 -0.790947 -0.412512 + 1.3416 1.70969 0.431165 0.204113 -0.701643 -0.682668 + 1.47947 1.78026 0.487332 0.52898 -0.565696 -0.632589 + 1.48119 1.81453 0.465381 0.403264 -0.407623 -0.819281 + 1.51874 1.84632 0.463109 0.371934 -0.682713 -0.628942 + 1.33145 1.63145 0.543685 0.00577073 -0.586066 -0.810243 + 1.24213 1.58922 0.591819 0.405878 -0.653216 -0.639196 + 1.25585 1.60974 0.521077 0.733069 -0.677968 -0.054492 + 0.202299 1.02452 0.721508 0.907211 -0.410738 -0.0908981 + 0.15157 1.06403 0.643287 -0.979472 -0.0908809 0.179929 + 0.234082 0.897133 0.710156 -0.837062 -0.441437 0.323203 + 0.244229 0.870941 0.669123 -0.690048 -0.721132 -0.0616642 + 0.309676 0.843906 0.623748 -0.233073 -0.871502 -0.431464 + 0.152736 0.978969 0.620009 -0.937993 -0.318667 0.136454 + 0.189415 0.940339 0.661921 -0.794578 -0.0695574 0.603164 + 0.219009 0.907591 0.61584 -0.646218 -0.744772 -0.166487 + 0.284455 0.880559 0.570464 -0.312537 -0.845145 -0.433648 + 0.162528 1.00458 0.544659 -0.823551 -0.121026 -0.55418 + 0.182329 0.946137 0.57388 -0.708726 -0.630776 -0.315958 + 0.268357 0.921192 0.510286 -0.309738 -0.667453 -0.677177 + 0.360002 0.911817 0.510322 0.1237 -0.734881 -0.66682 + 0.3761 0.87127 0.570549 0.125586 -0.844819 -0.520105 + 0.336879 0.960448 0.457692 0.042657 -0.633968 -0.772182 + 0.50752 0.852181 0.689413 0.332563 -0.852478 -0.403341 + 0.796318 1.05165 0.751717 0.461918 -0.535962 -0.706666 + 0.836418 1.08358 0.728015 0.175088 -0.526333 -0.832057 + 0.864226 1.02491 0.785242 0.0570301 -0.699887 -0.711974 + 0.819133 1.15034 0.699185 0.171875 -0.0589575 -0.983353 + 0.925343 1.0704 0.750837 0.388301 -0.512821 -0.765661 + 0.912503 1.00653 0.803681 0.233334 -0.666625 -0.707931 + 0.928794 0.949375 0.867469 0.170093 -0.679648 -0.713545 + 0.908058 1.13717 0.722007 0.270862 -0.250709 -0.929397 + 1.01464 1.15234 0.772115 0.64582 -0.423266 -0.635423 + 1.0018 1.08846 0.824958 0.486827 -0.327264 -0.809875 + 1.02022 1.0493 0.8338 0.226322 -0.394117 -0.890758 + 1.05187 0.99702 0.888545 -0.297698 -0.357201 -0.885315 + 0.998934 1.2881 0.724183 0.333965 -0.129558 -0.933639 + 1.00783 1.21606 0.740162 0.499355 -0.244388 -0.831215 + 1.10713 1.32608 0.795797 0.538744 -0.38091 -0.75144 + 1.13606 1.2957 0.832614 0.218669 -0.351567 -0.910266 + 1.15449 1.25662 0.841506 -0.553634 0.133807 -0.82194 + 0.970805 1.34472 0.708509 0.0412451 0.0257167 -0.998818 + 1.09286 1.46508 0.74365 -0.00318308 -0.228903 -0.973444 + 1.10032 1.38979 0.763845 0.283601 -0.326596 -0.901613 + 1.18554 1.48162 0.722401 0.110353 -0.648594 -0.753092 + 1.06473 1.5217 0.727976 0.180033 -0.508141 -0.842248 + 1.18281 1.61753 0.660593 -0.386171 -0.553711 -0.73775 + 1.19027 1.54224 0.680788 -0.646054 -0.296844 -0.703205 + 1.25585 1.60974 0.521077 -0.855804 -0.245678 -0.455239 + 1.26058 1.67037 0.479465 -0.707525 -0.12166 -0.696137 + 1.11069 1.64925 0.566047 0.182669 -0.850071 -0.493975 + 1.17119 1.6447 0.623934 0.239739 -0.799342 -0.550979 + 1.27974 1.74305 0.504183 0.116358 -0.779946 -0.614935 + 1.26813 1.77022 0.467524 0.53658 -0.827109 -0.167254 + 1.40002 1.84843 0.43166 0.318277 -0.808561 -0.494902 + 1.08987 1.68747 0.501654 -0.334451 -0.709302 -0.620511 + 1.27714 1.73384 0.36654 0.362731 -0.922568 -0.131513 + 1.0847 1.76643 0.448892 -0.646018 -0.37113 -0.667026 + 1.25633 1.77205 0.302146 -0.280083 -0.705534 -0.65098 + 1.39581 1.80816 0.253611 0.464538 -0.795514 -0.389053 + 1.3723 1.80029 0.286041 0.62763 -0.711542 0.315894 + 1.36329 1.83676 0.387075 0.505454 -0.851617 0.138795 + 0.963748 1.67169 0.607379 -0.755497 -0.22715 -0.614513 + 1.02368 1.78898 0.51143 -0.892864 0.190919 -0.407853 + 1.07689 1.85796 0.419351 -0.887376 0.140668 -0.439063 + 1.20666 1.87117 0.272668 -0.581059 -0.371834 -0.723955 + 0.939812 1.7023 0.659358 -0.88657 0.0803309 -0.455567 + 1.27974 1.74305 0.504183 -0.8219 0.38494 -0.419883 + 1.36248 1.81655 0.433883 -0.427988 0.603869 -0.672435 + 1.34332 1.74387 0.409165 -0.172196 -0.0570466 -0.98341 + 1.25585 1.60974 0.521077 -0.220231 -0.536248 -0.814823 + 1.40002 1.84843 0.43166 -0.645561 0.762778 0.0376797 + 1.49371 1.87369 0.4009 0.34234 -0.911475 -0.228071 + 1.58458 1.92315 0.407439 0.557262 -0.750147 -0.356003 + 1.71664 1.98444 0.482681 0.278229 -0.831885 -0.480163 + 1.45697 1.86202 0.356314 0.354918 -0.929497 0.10034 + 1.48049 1.86989 0.323885 0.53095 -0.844942 -0.0645404 + 1.56568 1.92661 0.343843 0.60291 -0.771357 -0.203735 + 1.70041 2.01636 0.421399 0.301257 -0.875416 -0.378009 + 1.45717 1.86774 0.25622 0.503959 -0.747068 -0.433491 + 1.54235 1.92454 0.276228 0.504036 -0.863544 -0.0154657 + 1.68151 2.01991 0.357853 0.49261 -0.870166 -0.0121202 + 1.80615 2.05582 0.310851 -0.247213 -0.930943 -0.268756 + 1.35107 1.82046 0.2205 0.0308679 -0.583249 -0.811707 + 1.41242 1.88004 0.223108 0.296819 -0.475157 -0.828326 + 1.42618 1.90793 0.206004 0.0559549 -0.788487 -0.6125 + 1.52271 1.90991 0.211981 0.331174 -0.897673 -0.2907 + 1.66635 1.9747 0.290952 0.460207 -0.837403 0.294899 + 1.3014 1.91958 0.191021 -0.260683 -0.473029 -0.841599 + 1.31516 1.94747 0.173917 0.0440153 -0.697839 -0.7149 + 1.40595 1.93105 0.152164 -0.156965 -0.870254 -0.466927 + 1.50248 1.93302 0.15814 0.0554339 -0.941576 -0.332208 + 1.64671 1.96006 0.226704 0.431689 -0.899067 0.0729549 + 1.19886 1.96262 0.243077 -0.732002 -0.213603 -0.646952 + 1.26321 2.0167 0.155612 -0.652699 -0.227075 -0.722787 + 1.30196 1.97625 0.143271 -0.467895 -0.51246 -0.720041 + 1.39275 1.95991 0.121567 -0.25105 -0.663083 -0.705191 + 1.47766 1.95416 0.101329 -0.0823218 -0.749088 -0.657335 + 1.12415 1.9304 0.389289 -0.904072 0.337209 -0.26257 + 1.17438 2.06327 0.257947 -0.908346 0.140968 -0.393745 + 1.23873 2.11735 0.170481 -0.741687 -0.0562635 -0.668382 + 1.33453 2.06406 0.095774 -0.60626 -0.214866 -0.76569 + 1.37329 2.02361 0.083435 -0.334344 -0.352648 -0.873987 + 1.07094 1.86142 0.481368 -0.784607 0.114513 -0.609327 + 1.13327 1.96877 0.413429 -0.869528 0.493876 0.00283459 + 0.972324 1.71963 0.595543 -0.851201 0.516356 -0.0939909 + 1.02369 1.81801 0.518748 -0.38825 -0.321218 -0.86376 + 1.4582 2.01786 0.063199 -0.312538 -0.605407 -0.731986 + 1.59463 1.94725 0.1013 0.0663678 -0.876901 -0.476067 + 1.61945 1.92603 0.15806 0.243899 -0.969305 0.0310103 + 1.43484 2.0693 0.0235 -0.451963 -0.743282 -0.493215 + 1.57347 1.98018 0.03807 -0.0562376 -0.816198 -0.575029 + 1.66293 2.07241 -0.037486 0.258456 -0.663051 -0.702541 + 1.68409 2.03939 0.025701 0.27263 -0.727827 -0.629238 + 1.70857 1.99641 0.074348 0.490401 -0.804537 -0.335002 + 1.38042 2.10717 0.002718 -0.424909 -0.664467 -0.614765 + 1.55011 2.03162 -0.001628 -0.214168 -0.595484 -0.774294 + 1.63216 2.12829 -0.077678 -0.0197043 -0.489115 -0.871997 + 1.71628 2.29053 -0.143889 -0.350455 -0.527353 -0.774003 + 1.74988 2.21936 -0.135015 -0.0760398 -0.581662 -0.809869 + 1.33928 2.16376 -0.010112 -0.422975 -0.278949 -0.862137 + 1.53196 2.1008 -0.030862 -0.256697 -0.418164 -0.871347 + 1.61401 2.19748 -0.106921 -0.108177 -0.517776 -0.848649 + 1.68551 2.34651 -0.184032 0.0644446 -0.625817 -0.777303 + 1.70192 2.42975 -0.265816 -0.571784 -0.719947 -0.393369 + 1.31168 2.22762 -0.000509 -0.476709 -0.374344 -0.795371 + 1.49081 2.1574 -0.043692 -0.286219 -0.444091 -0.849036 + 1.56252 2.23009 -0.131389 -0.180634 -0.605685 -0.774931 + 1.62659 2.36279 -0.226046 0.192369 -0.61118 -0.767759 + 1.27698 2.27543 -0.022522 -0.270669 -0.862189 -0.428214 + 1.44143 2.21733 -0.061887 -0.372907 -0.561533 -0.738661 + 1.51313 2.29001 -0.149574 -0.289754 -0.611365 -0.736394 + 1.5751 2.3954 -0.250513 -0.0542794 -0.696207 -0.715786 + 1.58421 2.4825 -0.34479 0.0710746 -0.822369 -0.564498 + 1.40673 2.26514 -0.0839 -0.311667 -0.645853 -0.696949 + 1.45249 2.32849 -0.170436 -0.270604 -0.687699 -0.673679 + 1.50702 2.42195 -0.279312 -0.110617 -0.738128 -0.665531 + 1.44772 2.53598 -0.412815 0.0751554 -0.845197 -0.529144 + 1.5158 2.50943 -0.384024 -0.0406863 -0.823733 -0.565516 + 1.39437 2.37983 -0.191359 -0.171735 -0.742652 -0.647283 + 1.44638 2.46044 -0.300165 -0.189766 -0.796118 -0.574618 + 1.38229 2.53653 -0.460558 0.176715 -0.802337 -0.570111 + 1.32563 2.61155 -0.555713 0.316298 -0.76934 -0.555042 + 1.40544 2.59553 -0.522956 0.0654508 -0.851329 -0.520533 + 1.33181 2.40193 -0.223025 -0.00531729 -0.786412 -0.617679 + 1.38039 2.48423 -0.321586 -0.0946595 -0.858646 -0.503752 + 1.3163 2.56033 -0.481979 0.0610148 -0.944679 -0.322272 + 1.2602 2.61211 -0.603465 0.784775 -0.617647 -0.051381 + 1.39026 2.63554 -0.586252 -0.133654 -0.97668 0.168024 + 1.26661 2.4303 -0.253176 0.137693 -0.836198 -0.530861 + 1.31783 2.50633 -0.353252 0.185982 -0.873261 -0.450361 + 1.27251 2.55329 -0.502787 0.338238 -0.92525 -0.171777 + 1.25085 2.53548 -0.642347 0.440322 -0.876021 0.196731 + 1.20572 2.43121 -0.29614 0.252556 -0.874902 -0.413233 + 1.25834 2.48932 -0.404594 0.408645 -0.831082 -0.377243 + 1.21302 2.53637 -0.554078 0.0101246 -0.981543 -0.190975 + 1.20705 2.52844 -0.663154 -0.32234 -0.924094 -0.205299 + 1.29075 2.53949 -0.6781 0.234468 -0.96012 0.152295 + 1.19745 2.49031 -0.447509 0.294009 -0.88254 -0.366991 + 1.13696 2.56225 -0.572121 0.24055 -0.816552 -0.524765 + 1.13498 2.58815 -0.664973 -0.34989 -0.869559 -0.348488 + 1.1783 2.60535 -0.717757 -0.228783 -0.445422 -0.865596 + 1.25037 2.54564 -0.715938 0.00630611 -0.546052 -0.837727 + 1.14564 2.48276 -0.502637 0.414545 -0.783728 -0.462518 + 1.08515 2.55479 -0.6272 0.321934 -0.602177 -0.730576 + 1.05893 2.61404 -0.683015 -0.248084 -0.66334 -0.705999 + 1.09197 2.49324 -0.547582 0.0228098 -0.863729 -0.50344 + 1.00774 2.56423 -0.626535 -0.213493 -0.706061 -0.675202 + 0.952736 2.65753 -0.671346 -0.133289 -0.534675 -0.83448 + 0.995094 2.70139 -0.709304 -0.182556 -0.0647531 -0.981061 + 1.10128 2.65798 -0.720924 -0.190865 -0.241193 -0.951523 + 0.935983 2.58446 -0.605581 -0.0900865 -0.66383 -0.742438 + 0.875326 2.66696 -0.670681 -0.0999409 -0.421074 -0.901503 + 0.923069 2.74734 -0.688105 -0.11676 0.0871691 -0.989327 + 1.18747 2.72598 -0.714907 -0.121215 0.263575 -0.956993 + 1.26096 2.67633 -0.738505 -0.0684365 0.00595046 -0.997638 + 0.870966 2.57111 -0.610862 0.295643 -0.26993 -0.916369 + 0.778787 2.66576 -0.665798 0.0984849 -0.344216 -0.933711 + 0.826531 2.74605 -0.683273 -0.0455286 0.0476413 -0.997826 + 1.11545 2.77194 -0.693708 -0.167445 0.248483 -0.954054 + 1.33308 2.79385 -0.727258 -0.0948411 -0.200281 -0.975137 + 0.798624 2.54457 -0.643083 0.509149 0.133604 -0.850246 + 0.713771 2.65233 -0.67113 0.477435 -0.197945 -0.85608 + 0.779571 2.78279 -0.673504 0.0612776 0.0646197 -0.996027 + 1.04311 2.83942 -0.656181 -0.165697 0.189405 -0.967817 + 0.887914 2.47712 -0.585663 0.573875 -0.0462899 -0.817633 + 0.765683 2.50322 -0.683475 0.594998 0.295082 -0.747599 + 0.673895 2.61527 -0.694348 0.748482 -0.092454 -0.656678 + 0.640955 2.57392 -0.734732 0.967448 0.156922 -0.198544 + 0.650081 2.67466 -0.739609 0.874451 -0.485098 -0.00393705 + 0.9257 2.91973 -0.647078 0.419638 -0.628224 -0.655164 + 0.996149 2.87607 -0.646464 -0.083087 0.000552148 -0.996542 + 0.673952 2.50458 -0.790829 0.967494 0.252412 0.0155832 + 0.683078 2.60532 -0.795705 0.769421 -0.286839 0.570714 + 0.836086 2.84874 -0.689923 0.671471 -0.611283 -0.418879 + 1.04073 2.97995 -0.685998 -0.0815139 -0.694347 -0.715009 + 0.734671 2.39274 -0.790508 0.82232 0.427947 -0.375036 + 1.23082 2.97775 -0.795581 -0.366035 -0.589373 -0.720179 + 1.11118 2.9363 -0.685384 -0.323937 -0.417107 -0.849168 + 1.1885 2.88821 -0.697087 -0.404972 -0.207456 -0.890483 + 1.19572 3.04732 -0.839083 -0.0829407 -0.901272 -0.42524 + 1.31198 3.01028 -0.86213 -0.148386 -0.670049 -0.727335 + 1.3905 3.00163 -0.85515 -0.03438 -0.334962 -0.941604 + 1.30814 2.92966 -0.807285 -0.340962 -0.474834 -0.811343 + 1.36325 3.06702 -0.907792 0.155057 -0.833908 -0.529674 + 1.43413 3.09074 -0.915481 0.502967 -0.851769 -0.146675 + 1.38286 3.03391 -0.869861 0.260468 -0.545147 -0.796851 + 1.47907 3.14352 -0.870306 0.666408 -0.700049 -0.256579 + 1.48671 3.11124 -0.855587 0.593306 -0.175406 -0.785634 + 1.46456 2.96133 -0.856744 0.433671 -0.509201 -0.7434 + 1.3822 2.88936 -0.80888 -0.125509 -0.464528 -0.876619 + 1.59496 3.20381 -0.955135 0.63392 -0.726842 0.264284 + 1.54549 3.15754 -0.791375 0.887634 -0.370916 -0.272996 + 1.52334 3.00771 -0.792474 0.837472 -0.281624 -0.468326 + 1.45443 2.86248 -0.801524 0.44711 -0.59702 -0.666078 + 1.26084 2.82082 -0.734563 -0.277489 -0.275354 -0.920424 + 1.77508 3.28657 -1.06087 0.487567 -0.717152 0.497967 + 1.86176 3.43631 -0.971036 0.518958 -0.61624 0.592394 + 1.68164 3.35355 -0.865289 0.67825 -0.554468 0.482227 + 1.91688 3.30485 -1.13414 0.239255 -0.697744 0.675212 + 1.97363 3.439 -1.04168 0.29723 -0.583833 0.755509 + 2.00552 3.64988 -0.887349 0.457435 -0.53112 0.713208 + 2.03489 3.31849 -1.14235 -0.0182706 -0.615519 0.78791 + 2.09165 3.45262 -1.04988 0.054304 -0.457319 0.887643 + 2.11739 3.65256 -0.957993 0.2582 -0.660345 0.705179 + 2.09605 3.15024 -1.26755 -0.263228 -0.305557 0.915066 + 2.13632 3.2951 -1.13945 -0.266846 -0.550978 0.790706 + 2.1816 3.33755 -1.09758 -0.132174 -0.416136 0.899645 + 2.18006 3.48536 -1.04378 0.0413162 -0.370108 0.92807 + 2.20581 3.68529 -0.95188 0.271468 -0.417502 0.867178 + 2.14282 3.05528 -1.26346 -0.49629 -0.218851 0.840119 + 2.21833 3.15421 -1.17961 -0.500217 -0.336075 0.798021 + 2.2636 3.19658 -1.1378 -0.107978 -0.319223 0.941508 + 2.27696 3.31872 -1.10056 0.050101 -0.323185 0.945009 + 2.27543 3.46653 -1.04677 0.264821 -0.305753 0.914541 + 2.11149 2.90972 -1.33014 -0.521176 -0.281282 0.805764 + 2.32373 2.91548 -1.12313 -0.587964 0.0175507 0.808697 + 2.2651 3.05915 -1.17558 -0.537321 -0.084115 0.839173 + 2.32326 3.04155 -1.14509 0.0336512 0.195202 0.980186 + 2.30229 3.14979 -1.15956 0.552687 0.0674438 0.830656 + 2.25441 2.49434 -1.34129 -0.694787 -0.245086 0.676169 + 2.29241 2.76992 -1.18981 -0.719133 -0.212029 0.661733 + 2.43192 2.81345 -1.02221 -0.700339 0.244804 0.670519 + 2.3819 2.89788 -1.09264 -0.184813 0.50216 0.844795 + 2.19343 2.3614 -1.44902 -0.673294 -0.429962 0.601505 + 2.38166 2.37619 -1.23645 -0.780582 -0.2705 0.56349 + 2.41966 2.65186 -1.08493 -0.812118 -0.190649 0.551468 + 2.19141 2.26339 -1.55927 -0.590204 -0.681517 0.432659 + 2.28861 2.25875 -1.43763 -0.594287 -0.646519 0.478368 + 2.40446 2.27752 -1.25614 -0.677232 -0.554043 0.484142 + 2.50558 2.41975 -1.0117 -0.859194 -0.219936 0.461967 + 2.1959 2.24044 -1.60352 -0.266858 -0.960607 0.0775979 + 2.31731 2.23023 -1.45523 -0.203759 -0.963926 0.171253 + 2.43316 2.24899 -1.27374 -0.221677 -0.938223 0.265702 + 2.56039 2.29426 -1.03674 -0.232768 -0.930696 0.282175 + 2.52838 2.32108 -1.03139 -0.717522 -0.532754 0.448704 + 2.22027 2.24431 -1.62202 0.307573 -0.839233 -0.448427 + 2.34167 2.2341 -1.47373 0.354542 -0.901958 -0.24652 + 2.45861 2.2487 -1.29362 0.378665 -0.919644 -0.104251 + 2.58585 2.29395 -1.05661 0.389559 -0.920836 -0.0174791 + 2.62979 2.32533 -0.864149 -0.241571 -0.944778 0.221443 + 2.11269 2.29132 -1.74085 0.260504 -0.675861 -0.689456 + 2.2528 2.27635 -1.62132 0.618366 -0.417079 -0.666084 + 2.37143 2.26879 -1.49442 0.671909 -0.529926 -0.517413 + 2.48837 2.28339 -1.31431 0.763623 -0.522942 -0.378697 + 2.6107 2.3166 -1.06664 0.791842 -0.547112 -0.271395 + 2.14522 2.32336 -1.74014 0.576688 -0.341687 -0.742079 + 2.20604 2.39694 -1.69919 0.702302 -0.108798 -0.703517 + 2.28302 2.33097 -1.61352 0.694617 -0.170725 -0.698827 + 2.40166 2.32341 -1.48662 0.790406 -0.196616 -0.580172 + 2.50482 2.35078 -1.32843 0.867374 -0.151911 -0.473904 + 2.05358 2.41322 -1.84278 0.495528 -0.304985 -0.813287 + 2.1144 2.48689 -1.80179 0.669009 -0.0503813 -0.741545 + 2.31438 2.50519 -1.59007 0.763922 0.0745473 -0.640988 + 2.39136 2.43913 -1.50445 0.790307 0.0546089 -0.610273 + 2.49453 2.4665 -1.34626 0.847806 0.0654729 -0.526249 + 1.94479 2.45263 -1.90705 0.336243 -0.33616 -0.879737 + 1.98576 2.53833 -1.90668 0.460474 0.023228 -0.887369 + 2.16603 2.59459 -1.75254 0.709055 0.137512 -0.691615 + 1.86195 2.54064 -1.95268 0.310542 -0.0748399 -0.947609 + 2.03739 2.64603 -1.85742 0.618068 0.076534 -0.78239 + 2.24194 2.72805 -1.6143 0.780376 0.208978 -0.589357 + 2.39029 2.63865 -1.45183 0.804111 0.212302 -0.555278 + 2.49329 2.5927 -1.31286 0.82348 0.213687 -0.525565 + 1.90627 2.66503 -1.94613 0.418474 -0.00425106 -0.908219 + 1.93489 2.81924 -1.90904 0.528604 0.120894 -0.840216 + 2.066 2.80025 -1.82034 0.693987 0.113716 -0.71095 + 2.17485 2.85109 -1.6634 0.795705 0.201428 -0.57121 + 2.38575 2.89521 -1.32322 0.838269 0.262333 -0.478002 + 1.80062 2.79505 -1.96253 0.1338 0.15225 -0.979243 + 1.8713 2.86373 -1.93829 0.294788 0.185389 -0.937406 + 1.98323 3.03521 -1.84151 0.634615 0.231175 -0.737443 + 2.03559 3.02965 -1.78487 0.734394 0.272104 -0.621792 + 2.14444 3.08049 -1.62792 0.778636 0.287473 -0.55775 + 1.7707 2.97684 -1.9164 0.133419 0.200884 -0.970487 + 1.84137 3.0456 -1.89209 0.156999 0.206819 -0.9657 + 1.91965 3.07969 -1.87075 0.373964 0.193041 -0.90713 + 1.55622 2.89886 -1.96933 0.187376 0.102362 -0.97694 + 1.68973 3.06889 -1.91844 0.229269 0.0715042 -0.970733 + 1.82756 3.12337 -1.8818 0.236797 -0.000513714 -0.971559 + 1.90584 3.15746 -1.86045 0.444827 0.201356 -0.872688 + 1.46366 2.88377 -1.98619 0.0932554 0.0330778 -0.995093 + 1.4767 3.16306 -1.97075 0.206175 0.0169078 -0.978369 + 1.48786 3.25512 -1.9694 0.107757 -0.245094 -0.963492 + 1.70089 3.16095 -1.91709 0.218922 -0.121734 -0.968119 + 1.81596 3.17598 -1.89651 0.319283 0.0327563 -0.947093 + 1.31949 3.00873 -1.98584 0.016312 -0.0207455 -0.999652 + 1.38414 3.14797 -1.98761 0.127312 -0.00612026 -0.991844 + 1.28456 2.89173 -1.99019 0.0221008 0.0463043 -0.998683 + 1.20375 2.92299 -1.98954 -0.0205017 0.0750963 -0.996966 + 1.17834 3.00699 -1.98062 -0.0720716 -0.0652024 -0.995266 + 1.17824 3.0538 -1.99369 -0.0675442 -0.27984 -0.957668 + 1.23855 3.08685 -1.99834 0.091776 -0.143728 -0.985352 + 1.16363 2.71074 -2.0043 0.108166 0.175013 -0.978607 + 1.10555 2.89233 -1.98803 0.0906666 0.125668 -0.987921 + 1.08014 2.97632 -1.97911 0.0794665 0.149379 -0.985581 + 1.06208 3.04749 -1.96857 0.144114 -0.112001 -0.983202 + 1.06198 3.0943 -1.98165 0.214222 -0.482034 -0.84956 + 1.05478 2.85312 -2.00632 0.362667 0.201661 -0.909838 + 1.02944 2.93831 -1.99707 0.352468 0.213754 -0.911085 + 1.01138 3.00948 -1.98653 0.654139 0.00684707 -0.756344 + 1.01116 3.05512 -1.99999 0.827631 -0.310653 -0.467462 + 1.07961 3.16294 -2.03154 0.414632 -0.837115 -0.356818 + 0.975299 2.85138 -2.0535 0.95144 0.238123 -0.195086 + 1.02879 3.12367 -2.04993 0.56819 -0.356565 -0.741634 + 1.13992 3.19591 -2.03624 0.229932 -0.177704 -0.956845 + 1.3032 3.226 -2.00016 0.179543 -0.063667 -0.981688 + 1.50006 2.89604 -0.702459 0.755571 -0.327893 -0.567096 + 1.40656 2.74411 -0.750897 0.231851 -0.214789 -0.948742 + 1.46196 2.7255 -0.700868 0.551622 -0.228435 -0.802204 + 1.33797 2.62378 -0.735288 0.155368 -0.278657 -0.94774 + 1.56896 3.04128 -0.69341 0.88533 -0.232284 -0.402783 + 1.61028 3.04066 -0.617947 0.802329 -0.119395 -0.584819 + 1.55546 2.87743 -0.65243 0.715171 -0.17481 -0.676736 + 1.61437 3.23854 -0.641875 0.890541 -0.182957 -0.41649 + 1.65569 3.23792 -0.566404 0.78743 -0.254906 -0.561229 + 1.67628 3.06941 -0.545148 0.726877 -0.0537266 -0.684663 + 1.62146 2.9061 -0.57968 0.718332 -0.110391 -0.686886 + 1.58849 3.30425 -0.777901 0.914292 -0.357275 0.190853 + 1.65737 3.38525 -0.628392 0.881303 -0.268859 -0.388612 + 1.72476 3.28224 -0.500178 0.733933 -0.0961806 -0.672378 + 1.74536 3.11365 -0.478972 0.67637 -0.0304491 -0.735933 + 1.70671 3.54272 -0.695131 0.871358 -0.468821 0.144717 + 1.77531 3.6815 -0.637106 0.884812 -0.462439 0.0570738 + 1.72597 3.52404 -0.570377 0.876903 -0.288922 -0.384143 + 1.79986 3.5921 -0.782469 0.615243 -0.491472 0.616386 + 1.86474 3.76767 -0.713957 0.663508 -0.494972 0.561035 + 1.84051 3.81505 -0.596833 0.861095 -0.504246 0.0652007 + 2.07039 3.82544 -0.818829 0.525064 -0.324806 0.786644 + 1.92994 3.90122 -0.673683 0.759256 -0.400809 0.512721 + 1.94943 4.01599 -0.560873 0.89014 -0.44434 -0.101061 + 1.95262 3.9314 -0.490156 0.811097 -0.424423 -0.402477 + 1.82365 3.76664 -0.537178 0.873063 -0.379806 -0.305792 + 2.14037 3.9084 -0.844915 0.519966 -0.226324 0.823658 + 1.97612 3.9831 -0.709897 0.775538 -0.28472 0.56345 + 1.99561 4.09788 -0.597096 0.902196 -0.430551 0.0258403 + 2.03259 4.06293 -0.415175 0.893177 -0.297131 -0.337561 + 2.03579 3.97842 -0.344398 0.861593 -0.0883979 -0.499843 + 2.20153 3.88538 -0.885041 0.352607 -0.269278 0.896191 + 2.13402 4.1046 -0.790138 0.520963 -0.339746 0.783052 + 2.0461 4.06606 -0.735983 0.618441 -0.330479 0.712962 + 2.02928 4.14695 -0.667097 0.75968 -0.528621 0.378743 + 2.03936 4.18336 -0.499351 0.917623 -0.374214 -0.133908 + 2.28373 3.89467 -0.903336 0.592753 -0.181143 0.784749 + 2.19518 4.08157 -0.830255 0.523382 -0.221904 0.822697 + 2.15099 4.25654 -0.721906 0.758773 -0.310386 0.572647 + 2.11721 4.18549 -0.721252 0.711338 -0.450945 0.539116 + 2.07304 4.23252 -0.569301 0.850339 -0.482751 0.209463 + 2.28801 3.69459 -0.970183 0.413654 -0.298851 0.859987 + 2.30531 3.92699 -0.930517 0.976263 0.101939 0.191098 + 2.22707 4.10422 -0.851082 0.721056 -0.093298 0.686567 + 2.18288 4.27918 -0.742733 0.833906 -0.111718 0.540482 + 2.31574 3.47529 -1.07374 0.87692 -0.128845 0.463045 + 2.32832 3.70336 -0.997166 0.960268 -0.0664704 0.271048 + 2.28632 3.94674 -0.972512 0.843449 0.245586 -0.477788 + 2.24854 4.17171 -0.91737 0.929195 0.261675 -0.261004 + 2.24864 4.13654 -0.878263 0.923726 0.0909507 0.3721 + 2.31565 3.27194 -1.12232 0.66785 -0.205359 0.715404 + 2.31988 3.32521 -1.13379 0.989768 -0.00581824 0.142569 + 2.31998 3.49107 -1.12188 0.888669 0.189445 -0.417587 + 2.30934 3.72318 -1.0391 0.77699 0.215255 -0.591568 + 2.2552 3.95093 -1.00678 0.405141 0.219637 -0.88748 + 2.32881 3.19885 -1.17333 0.823816 -0.0686056 0.562691 + 2.33304 3.25212 -1.1848 0.984546 0.104988 0.140167 + 2.33018 3.26569 -1.2177 0.91787 0.250287 -0.308011 + 2.32412 3.3409 -1.18198 0.943948 0.200673 -0.262091 + 2.26781 3.48799 -1.15554 0.408597 0.431151 -0.804461 + 2.3275 3.13582 -1.17017 0.671931 0.116824 0.731342 + 2.34791 3.10642 -1.19964 0.680376 0.194051 0.706705 + 2.34921 3.16953 -1.20275 0.921368 0.170262 0.349415 + 2.34636 3.18301 -1.2357 0.915542 0.285872 -0.28295 + 2.25961 3.25755 -1.32101 0.679149 0.4543 -0.576513 + 2.34847 3.02759 -1.15571 0.476697 0.44267 0.759476 + 2.37953 3.0253 -1.16654 0.465635 0.494731 0.733774 + 2.38695 3.07967 -1.21551 0.913632 0.392814 0.104758 + 2.31866 3.01833 -1.37227 0.830747 0.239178 -0.502646 + 2.27807 3.12168 -1.39247 0.814822 0.293371 -0.499998 + 2.39088 2.92679 -1.11191 0.284346 0.538619 0.793118 + 2.42194 2.92441 -1.12279 0.114789 0.646593 0.754149 + 2.41857 2.99846 -1.18245 0.866542 0.48193 0.129802 + 2.44091 2.84227 -1.04153 -0.237021 0.666068 0.70723 + 2.46684 2.86717 -1.05965 -0.190559 0.726383 0.660345 + 2.46885 2.93672 -1.12491 -0.138387 0.655284 0.742598 + 2.48508 2.80086 -0.963391 -0.378377 0.74819 0.545016 + 2.51101 2.82575 -0.98151 -0.340047 0.770053 0.539803 + 2.51375 2.87948 -1.06177 0.492291 0.844218 0.212004 + 2.48379 2.76838 -0.917348 -0.710214 0.417356 0.566931 + 2.52439 2.73342 -0.844986 -0.644861 0.43255 0.630123 + 2.52569 2.76589 -0.891029 -0.370329 0.735316 0.567598 + 2.552 2.7856 -0.893959 -0.394705 0.725965 0.56319 + 2.55657 2.85204 -0.988248 0.322281 0.935296 0.146135 + 2.44962 2.72882 -0.999425 -0.903528 -0.118642 0.411778 + 2.50149 2.68375 -0.894552 -0.912315 -0.144965 0.382971 + 2.538 2.62912 -0.825736 -0.850754 -0.123915 0.510747 + 2.57436 2.70811 -0.786946 -0.640341 0.399221 0.65619 + 2.60068 2.72773 -0.789934 -0.530689 0.609118 0.58936 + 2.53554 2.49671 -0.9262 -0.904868 -0.172496 0.389177 + 2.57205 2.442 -0.857433 -0.944306 -0.192886 0.266609 + 2.58797 2.60381 -0.767704 -0.882255 -0.0338123 0.469556 + 2.63265 2.58495 -0.671634 -0.796042 0.209686 0.567758 + 2.64759 2.66422 -0.691526 -0.617391 0.408196 0.672461 + 2.62735 2.77706 -0.803569 -0.610821 0.50002 0.613904 + 2.59777 2.35215 -0.858812 -0.794912 -0.551824 0.2522 + 2.5772 2.45282 -0.751176 -0.967617 -0.0713522 0.242127 + 2.62188 2.43396 -0.655106 -0.954579 0.0582228 0.292214 + 2.60292 2.36289 -0.752614 -0.753798 -0.632932 0.176596 + 2.61197 2.36466 -0.665269 -0.859328 -0.500528 0.105009 + 2.64071 2.41751 -0.577825 -0.865074 0.291459 0.408286 + 2.72643 2.48661 -0.533697 -0.677356 0.38995 0.623801 + 2.74137 2.56587 -0.553589 -0.678793 0.311168 0.665142 + 2.64821 2.34852 -0.75112 -0.12657 -0.984292 0.123079 + 2.65726 2.35028 -0.663776 -0.0882357 -0.994597 -0.0546845 + 2.6308 2.34821 -0.587988 -0.886231 -0.452376 -0.099749 + 2.62461 2.29891 -0.474391 -0.966054 0.234751 0.107849 + 2.6713 2.33883 -0.461941 -0.641501 0.594047 0.48537 + 2.66423 2.32665 -0.868442 0.40228 -0.913666 0.0581781 + 2.68265 2.34984 -0.755413 0.321865 -0.945319 0.052682 + 2.69973 2.35576 -0.656064 0.361262 -0.92819 -0.0891837 + 2.65478 2.33721 -0.59174 -0.145298 -0.935081 -0.323284 + 2.68909 2.3493 -0.878472 0.770395 -0.624307 -0.129355 + 2.71754 2.37223 -0.759195 0.746177 -0.661869 -0.0717628 + 2.73462 2.37815 -0.659845 0.711008 -0.684692 -0.1602 + 2.69726 2.3427 -0.584036 0.333435 -0.889399 -0.312715 + 2.65599 2.29595 -0.515472 -0.0595492 -0.822488 -0.565656 + 2.62716 2.384 -1.08077 0.877351 -0.262665 -0.401576 + 2.7039 2.38727 -0.910439 0.880404 -0.385332 -0.27642 + 2.73235 2.41021 -0.791162 0.93514 -0.318611 -0.154919 + 2.75386 2.42636 -0.691736 0.946918 -0.272978 -0.169795 + 2.75602 2.37044 -0.572693 0.674232 -0.674298 -0.301221 + 2.64252 2.47677 -1.10226 0.888004 -0.0482117 -0.4573 + 2.71926 2.48005 -0.931931 0.882656 0.335253 -0.329429 + 2.74077 2.4962 -0.832505 0.980408 0.0271144 -0.195102 + 2.77823 2.47099 -0.568038 0.987616 0.135624 -0.0788729 + 2.77526 2.41856 -0.604634 0.954101 -0.198244 -0.224478 + 2.64128 2.60297 -1.06884 0.875854 0.217192 -0.430937 + 2.53903 2.78753 -1.1267 0.832415 0.367805 -0.414493 + 2.58184 2.76009 -1.05317 0.83692 0.406029 -0.367021 + 2.63086 2.78461 -0.927457 0.806485 0.566707 -0.168599 + 2.6903 2.62741 -0.943175 0.92401 0.242122 -0.295944 + 2.72259 2.56669 -0.860208 0.956179 0.231644 -0.179059 + 2.43603 2.83347 -1.26568 0.831561 0.299208 -0.467954 + 2.46885 2.93672 -1.12491 0.844887 0.357665 -0.397795 + 2.79322 2.409 -0.417882 -0.730368 0.292555 0.617231 + 2.79322 2.409 -0.417882 0.995577 0.00890332 -0.0935304 + 2.79025 2.35658 -0.454487 0.935687 -0.281566 -0.212626 + 2.75511 2.32544 -0.485146 0.633574 -0.668455 -0.389553 + 2.69635 2.29778 -0.49643 0.372962 -0.776324 -0.508153 + 2.80482 2.30012 -0.301482 0.896726 -0.40283 -0.183331 + 2.7775 2.26562 -0.336527 0.814235 -0.518397 -0.261314 + 2.74236 2.23447 -0.367186 0.645912 -0.65418 -0.393504 + 2.68513 2.23031 -0.417569 0.41328 -0.727264 -0.547983 + 2.64477 2.22857 -0.436561 0.126321 -0.737578 -0.663342 + 2.77295 2.19257 -0.167609 0.892697 -0.445818 -0.0658623 + 2.74564 2.15807 -0.202654 0.781382 -0.588638 -0.207236 + 2.70354 2.14469 -0.271672 0.601803 -0.695448 -0.392665 + 2.64631 2.14052 -0.322056 0.462091 -0.736858 -0.49347 + 2.62055 2.15769 -0.36899 0.20344 -0.722506 -0.660755 + 2.77928 2.20864 -0.082238 0.984586 0.110243 0.135782 + 2.70267 2.07318 0.003376 0.836514 -0.547754 0.014477 + 2.6949 2.06228 -0.099938 0.767693 -0.627281 -0.131019 + 2.6528 2.0488 -0.168998 0.569824 -0.742112 -0.352945 + 2.57747 2.04533 -0.243775 0.226749 -0.82943 -0.51052 + 2.55172 2.0625 -0.290718 -0.351892 -0.666295 -0.657436 + 2.709 2.08926 0.088737 0.856384 -0.510245 0.0790959 + 2.63892 1.99185 0.107248 0.755261 -0.652355 0.0633558 + 2.63115 1.98094 0.00394 0.684966 -0.724785 -0.0742184 + 2.59691 1.97242 -0.081094 0.529917 -0.802109 -0.275335 + 2.76211 2.1813 0.071503 0.905551 0.287613 0.311858 + 2.7167 2.13753 0.17632 0.898473 0.237665 0.369136 + 2.6847 2.09356 0.268876 0.909643 -0.405524 0.0900051 + 2.677 2.04529 0.181292 0.818587 -0.573067 0.0388578 + 2.63136 1.99719 0.2026 0.722923 -0.685561 0.0859597 + 2.7715 2.24308 -0.168698 -0.275405 0.906716 0.319404 + 2.75433 2.21575 -0.014957 0.21925 0.951198 0.217145 + 2.72403 2.18316 0.102286 0.0398625 0.92883 0.368355 + 2.76861 2.29912 -0.301354 -0.223355 0.8396 0.495161 + 2.68124 2.21888 -0.191575 -0.231281 0.92765 0.293213 + 2.68391 2.19877 -0.072337 -0.266334 0.949399 0.166457 + 2.65361 2.16627 0.044948 -0.285331 0.934935 0.210909 + 2.67862 2.13939 0.207102 -0.00424041 0.996266 0.0862374 + 2.80482 2.30012 -0.301482 -0.0213744 0.837882 0.545433 + 2.75702 2.40792 -0.417813 -0.356776 0.698251 0.62061 + 2.67835 2.27482 -0.324272 -0.464578 0.825742 0.319871 + 2.57225 2.19177 -0.160632 -0.156026 0.980244 0.121564 + 2.57493 2.17175 -0.041352 -0.13483 0.96413 0.228636 + 2.79322 2.409 -0.417882 -0.0217758 0.77056 0.636995 + 2.63166 2.23499 -0.336672 -0.772075 0.630387 0.0807016 + 2.58701 2.17446 -0.264832 -0.78381 0.566506 -0.254388 + 2.54034 2.19516 -0.206485 -0.179878 0.933812 -0.309254 + 2.39313 2.16016 -0.026063 0.0860057 0.994129 0.0656515 + 2.62087 2.22263 -0.399276 -0.921776 0.387633 0.00839225 + 2.57622 2.1621 -0.327435 -0.910889 0.318364 -0.262537 + 2.52389 2.06481 -0.24912 -0.574172 -0.34192 -0.74392 + 2.47436 2.13853 -0.208818 -0.558872 0.310508 -0.768925 + 2.42769 2.15923 -0.150462 -0.448132 0.726509 -0.520925 + 2.63201 2.30695 -0.511721 -0.66717 -0.619317 -0.413922 + 2.62827 2.23067 -0.436606 -0.635642 -0.504043 -0.584722 + 2.60405 2.15979 -0.369034 -0.495276 -0.455891 -0.739503 + 2.52158 1.96885 -0.155921 0.213752 -0.812116 -0.542934 + 2.46026 1.99781 -0.192677 -0.286723 -0.4782 -0.83013 + 2.41073 2.07162 -0.152324 -0.429304 -0.0775828 -0.899822 + 2.35036 2.11422 -0.142509 -0.317898 0.250277 -0.914495 + 2.4752 1.90394 -0.065482 0.153994 -0.935207 -0.318862 + 2.41388 1.93289 -0.102239 -0.101387 -0.787323 -0.608147 + 2.34741 1.98765 -0.137876 -0.211049 -0.356109 -0.910299 + 2.28704 2.03016 -0.128111 -0.0725027 0.0370631 -0.996679 + 2.52785 1.90878 0.011527 0.323965 -0.942463 -0.082528 + 2.43748 1.90232 0.037117 -0.144141 -0.982497 0.118 + 2.38482 1.89739 -0.039944 -0.283936 -0.958485 -0.0262235 + 2.32532 1.93473 -0.091815 -0.28481 -0.833993 -0.472587 + 2.25885 1.98948 -0.127453 -0.366669 -0.608295 -0.70394 + 2.56209 1.91731 0.096564 0.424164 -0.904233 0.0494767 + 2.46552 1.90768 0.115641 -0.105461 -0.984845 0.137689 + 2.30984 1.9448 -0.010065 -0.341642 -0.939437 0.027197 + 2.26235 1.96594 -0.076878 -0.458021 -0.888087 -0.0389571 + 2.20285 2.00328 -0.128748 -0.300277 -0.684294 -0.664511 + 2.56499 1.93226 0.183852 0.436985 -0.892297 0.113354 + 2.62208 2.00313 0.305904 0.710348 -0.69746 0.0946306 + 2.66772 2.05132 0.284646 0.852719 -0.514268 0.0916429 + 2.68075 2.1021 0.367288 0.991928 0.067784 0.107161 + 2.66952 2.10925 0.515707 0.963936 0.238587 0.11791 + 2.65377 2.14534 0.36779 0.613387 0.789717 0.0101416 + 2.64254 2.15241 0.516157 0.765157 0.642382 -0.0433546 + 2.64936 2.17764 0.618455 0.835803 0.443509 -0.323624 + 2.69067 2.14011 0.697648 0.958104 0.0577956 -0.280527 + 2.67358 2.07899 0.647313 0.958496 -0.0365627 -0.282751 + 2.63114 2.14084 0.289597 0.123464 0.983379 -0.133126 + 2.54722 2.20302 0.444687 0.443546 0.878704 -0.176481 + 2.55403 2.22825 0.546984 0.691815 0.636579 -0.340822 + 2.68134 2.24606 0.776546 0.811488 0.410337 -0.416066 + 2.72266 2.20854 0.855739 0.941793 0.107823 -0.318435 + 2.55226 2.13436 0.203219 0.173224 0.975412 -0.136256 + 2.52459 2.19852 0.366494 0.329327 0.920197 -0.211615 + 2.4744 2.21408 0.359742 0.617685 0.68527 -0.385837 + 2.54716 2.2602 0.573062 0.858658 0.267007 -0.437508 + 2.59974 2.13291 0.120721 -0.124145 0.986088 0.110534 + 2.52106 2.13839 0.03443 -0.0365716 0.979023 0.200441 + 2.50208 2.14992 0.196468 0.292599 0.929108 -0.226149 + 2.34077 2.15746 0.061211 0.640804 0.767535 0.016146 + 2.46869 2.13569 0.121704 0.0926142 0.985538 -0.141904 + 2.43045 2.20281 0.262053 0.612645 0.694194 -0.377837 + 2.29868 2.23092 0.067564 0.712179 0.505665 -0.486932 + 2.39707 2.18859 0.187288 0.578834 0.703298 -0.412702 + 2.40148 2.26853 0.27863 0.855918 0.261603 -0.446058 + 2.23721 2.19597 -0.019299 0.475875 0.54311 -0.691791 + 2.26939 2.33052 0.091463 0.700012 0.215634 -0.680798 + 2.33965 2.40641 0.178006 0.821898 0.0280302 -0.568945 + 2.35498 2.26205 0.193641 0.849162 0.254372 -0.462839 + 2.28297 2.14801 -0.042428 0.0463855 0.823618 -0.565245 + 2.18137 2.18104 -0.066045 0.605212 0.452975 -0.654623 + 2.15423 2.26975 -0.072682 0.723278 0.152528 -0.673501 + 2.20792 2.29565 0.00465 0.76011 0.214829 -0.613255 + 2.36122 2.16345 -0.071967 -0.206332 0.976315 -0.0650779 + 2.34944 2.14371 -0.120982 -0.304404 0.780206 -0.546458 + 2.22713 2.133 -0.089233 0.105905 0.700789 -0.705464 + 2.22806 2.10343 -0.11081 0.108157 0.451318 -0.885784 + 2.11644 2.21114 -0.126378 0.731918 0.290401 -0.616411 + 2.21245 2.05762 -0.140074 0.293347 0.193593 -0.936199 + 2.15347 2.13089 -0.122772 0.617527 0.444233 -0.64909 + 2.04131 2.30483 -0.180655 0.322644 -0.040949 -0.945634 + 2.00494 2.38241 -0.200613 0.402568 -0.110055 -0.90875 + 2.0893 2.29985 -0.133016 0.705511 0.139444 -0.694845 + 2.11 2.13872 -0.166128 -0.223537 -0.273811 -0.935446 + 2.07835 2.22458 -0.177049 0.222904 -0.0150988 -0.974723 + 1.99528 2.25385 -0.159746 -0.159199 -0.427504 -0.889885 + 2.1564 2.07049 -0.153557 -0.269975 -0.424126 -0.864425 + 2.05462 2.14025 -0.122982 -0.620185 -0.543127 -0.566024 + 2.02297 2.22611 -0.133903 -0.311538 -0.629409 -0.71189 + 2.13094 2.03961 -0.057868 -0.623805 -0.751981 -0.213052 + 2.08449 2.10682 -0.082678 -0.60021 -0.740754 -0.301714 + 2.01921 2.08801 0.063897 0.192739 -0.952173 -0.237105 + 2.00431 2.06925 -0.007613 0.27448 -0.884077 -0.378244 + 1.97662 2.09698 -0.033448 0.181554 -0.809946 -0.557697 + 2.15662 2.01839 0.009485 -0.53482 -0.844965 -0.00153331 + 2.06277 2.09659 0.177241 0.0345612 -0.98921 0.142371 + 2.04908 2.05457 0.10421 0.114904 -0.992838 -0.0327054 + 1.96677 2.02569 0.223428 0.477653 -0.864619 0.155825 + 1.95187 2.00685 0.151867 0.291033 -0.949605 -0.116403 + 2.08845 2.07537 0.244596 -0.561086 -0.802972 -0.201041 + 1.98985 2.08774 0.344357 0.133315 -0.991069 -0.00316876 + 1.97616 2.04573 0.271322 0.57649 -0.770898 0.270878 + 1.85216 2.01488 0.387357 0.22185 -0.975078 -0.00215842 + 1.86155 2.03492 0.43525 0.595665 -0.802821 0.0257183 + 1.82237 2.0239 0.372133 -0.209197 -0.925756 -0.314981 + 1.92207 2.01587 0.136644 -0.285996 -0.923519 -0.255575 + 1.96388 2.12008 -0.102051 0.383241 -0.669611 -0.636198 + 1.9589 2.33142 -0.179704 0.157719 -0.352588 -0.922392 + 1.90933 2.03897 0.06804 -0.0732252 -0.965012 -0.251771 + 1.88992 2.05432 0.003641 -0.0878354 -0.908832 -0.407811 + 1.92201 2.1794 -0.143392 0.0832893 -0.543582 -0.835214 + 1.91703 2.39073 -0.221035 0.219575 -0.241535 -0.945224 + 1.98115 2.45802 -0.212777 0.327904 -0.0646981 -0.942493 + 1.78673 2.07109 0.246399 0.191047 -0.979735 0.0601637 + 1.77158 2.02597 0.179548 0.487079 -0.873037 0.0236991 + 1.84277 2.10366 -0.031417 -0.0444197 -0.853981 -0.518405 + 1.87486 2.22874 -0.178448 0.13811 -0.510781 -0.848545 + 1.73583 2.03045 0.142995 0.460923 -0.870142 -0.174365 + 1.80703 2.10814 -0.067965 -0.0507253 -0.767378 -0.639185 + 1.81538 2.28023 -0.219246 -0.14234 -0.458795 -0.877067 + 1.84323 2.43208 -0.244655 0.335595 -0.220068 -0.91594 + 1.90735 2.49937 -0.236397 0.319533 -0.295997 -0.900158 + 1.77436 2.17638 -0.086369 -0.272964 -0.631253 -0.725955 + 1.78271 2.34839 -0.23769 -0.00108266 -0.490935 -0.871196 + 1.78375 2.48358 -0.285453 0.530831 -0.422237 -0.734802 + 1.85647 2.54302 -0.277405 0.425011 -0.439625 -0.791262 + 2.06646 2.47435 -0.164459 0.558592 -0.0959796 -0.823871 + 2.06551 2.37554 -0.14513 0.632379 -0.019087 -0.774424 + 1.73552 2.35858 -0.256944 -0.345065 -0.632219 -0.693707 + 1.71636 2.46933 -0.339962 0.366166 -0.430568 -0.824944 + 1.78909 2.52885 -0.331856 0.473067 -0.45834 -0.752418 + 1.66918 2.47952 -0.359216 0.248827 -0.632041 -0.7339 + 1.72547 2.55667 -0.373052 0.397253 -0.410256 -0.820902 + 1.96138 2.55454 -0.257564 0.492616 -0.264569 -0.829055 + 2.01559 2.518 -0.205467 0.463192 -0.337747 -0.819378 + 1.59493 2.48724 -0.400794 -0.120042 -0.851474 -0.510472 + 1.65122 2.5644 -0.41463 0.436506 -0.305601 -0.84621 + 1.89776 2.58237 -0.29876 0.443604 -0.112468 -0.889138 + 2.07411 2.58682 -0.186068 0.619794 -0.161113 -0.768048 + 1.64313 2.46621 -0.302767 -0.150048 -0.900168 -0.40888 + 1.53613 2.52362 -0.437803 -0.149909 -0.833341 -0.532042 + 1.56169 2.57668 -0.468498 0.378568 -0.409723 -0.829948 + 1.83671 2.6434 -0.321467 0.464005 -0.00484815 -0.885819 + 1.47384 2.56861 -0.483722 0.0647009 -0.740861 -0.668535 + 1.49939 2.62158 -0.514475 0.196966 -0.887411 -0.416781 + 1.74718 2.65567 -0.375326 0.59154 -0.453897 -0.666376 + 1.97576 2.71731 -0.247687 0.489134 -0.00884625 -0.872164 + 2.03681 2.65629 -0.224989 0.544192 0.00825355 -0.83892 + 1.47007 2.61951 -0.553496 0.329449 -0.634657 -0.699052 + 1.68026 2.62964 -0.442434 0.293168 -0.955949 0.0146108 + 1.85564 2.74393 -0.352592 0.676137 -0.38411 -0.628728 + 1.92255 2.76996 -0.285484 0.622414 -0.341049 -0.704476 + 1.65093 2.62757 -0.481455 0.438934 -0.873153 -0.21199 + 1.78511 2.74542 -0.40958 0.648768 -0.141008 -0.747808 + 1.98228 2.94105 -0.25362 0.557283 0.0576714 -0.828317 + 2.06155 2.88886 -0.219218 0.533516 0.0293455 -0.845281 + 2.11476 2.83612 -0.18147 0.61413 -0.0603336 -0.786895 + 1.58602 2.58657 -0.536845 -0.330109 -0.535194 0.777557 + 1.3001 2.61612 -0.639218 0.158389 -0.744872 0.648134 + 1.49586 2.56716 -0.58981 0.251919 -0.959865 0.123272 + 1.42854 2.55889 -0.649095 0.411288 -0.808744 -0.420446 + 1.57837 2.67193 -0.59068 0.656824 -0.297302 -0.69296 + 1.6457 2.68019 -0.531396 0.674596 -0.346656 -0.651728 + 1.72019 2.70443 -0.464969 0.718341 -0.33754 -0.608319 + 1.58602 2.58657 -0.536845 0.545597 -0.114853 -0.83014 + 1.38816 2.56512 -0.686883 0.338592 -0.644105 -0.685918 + 1.51214 2.66684 -0.652472 0.611047 -0.308178 -0.729142 + 1.68768 2.91127 -0.51784 0.673445 -0.0674876 -0.73615 + 1.76571 2.93102 -0.450034 0.669853 -0.0675107 -0.739419 + 1.84021 2.95533 -0.383549 0.689191 -0.0886898 -0.719132 + 2.1422 2.46302 -0.099236 0.729548 -0.141788 -0.669071 + 2.14124 2.36422 -0.079906 0.742069 -0.0321544 -0.669552 + 2.12832 2.55027 -0.13397 0.709349 -0.0465191 -0.70332 + 2.19766 2.49044 -0.027537 0.816983 -0.128346 -0.562197 + 2.19493 2.39012 -0.002574 0.819446 -0.0415006 -0.571652 + 2.18378 2.5777 -0.062271 0.78814 -0.140912 -0.599149 + 2.2479 2.5128 0.042531 0.820571 -0.153507 -0.550544 + 2.24517 2.41248 0.067503 0.806741 -0.0430421 -0.589335 + 2.17394 2.66979 -0.105973 0.744964 -0.0918837 -0.660746 + 2.25661 2.70147 -0.002845 0.79699 -0.149316 -0.585245 + 2.26645 2.60929 0.040805 0.811439 -0.174013 -0.55793 + 2.31542 2.48829 0.153996 0.689504 -0.100045 -0.717339 + 2.13664 2.73934 -0.144843 0.663402 -0.0794197 -0.744037 + 2.24246 2.81351 -0.048503 0.765735 -0.118426 -0.63216 + 2.35465 2.74652 0.130519 0.834302 -0.146591 -0.531461 + 2.33397 2.58486 0.15232 0.826652 -0.140575 -0.544872 + 2.22058 2.91029 -0.08513 0.727762 -0.036209 -0.684873 + 2.30051 2.97377 0.008911 0.791971 -0.0317916 -0.609731 + 2.3405 2.85856 0.084861 0.82764 -0.101053 -0.552087 + 2.41569 2.92662 0.189185 0.853095 -0.0861966 -0.514587 + 2.43035 2.76938 0.249128 0.86287 -0.144026 -0.48447 + 2.16776 3.0049 -0.139603 0.62296 0.0553234 -0.780295 + 2.24769 3.06839 -0.04557 0.731941 0.0314938 -0.68064 + 2.31727 3.15669 0.028492 0.77088 0.0143478 -0.636819 + 2.3757 3.04183 0.113235 0.829544 -0.0391125 -0.55707 + 2.08849 3.05709 -0.174005 0.543878 0.0537137 -0.837443 + 2.18174 3.16605 -0.10933 0.658782 0.0528224 -0.750477 + 2.25132 3.25444 -0.035226 0.704798 0.0233697 -0.709023 + 2.00248 3.10754 -0.242777 0.658333 -0.0938043 -0.746859 + 2.09573 3.2165 -0.178102 0.636156 -0.0218363 -0.771251 + 2.14051 3.33694 -0.144314 0.67452 -0.012615 -0.738148 + 2.28491 3.35096 0.002008 0.762419 0.0577815 -0.644499 + 1.91175 2.94255 -0.310608 0.664754 -0.0562678 -0.744941 + 1.93094 3.12032 -0.315726 0.676071 -0.0459393 -0.735403 + 1.9646 3.24855 -0.283013 0.649527 -0.0104225 -0.760267 + 2.00939 3.36899 -0.249225 0.65077 -0.0521406 -0.757483 + 1.82339 3.13348 -0.411117 0.664302 -0.0175406 -0.747258 + 1.85705 3.26162 -0.378462 0.667157 -0.0338128 -0.744149 + 1.89281 3.42958 -0.364967 0.671593 -0.0810416 -0.736475 + 2.05219 3.5238 -0.228167 0.699825 -0.0415494 -0.713105 + 2.1741 3.43345 -0.107079 0.718241 0.0416658 -0.694546 + 1.76052 3.45011 -0.486733 0.770802 -0.147746 -0.619705 + 1.93562 3.58438 -0.343901 0.698702 -0.124206 -0.704549 + 2.05642 3.6944 -0.238661 0.733739 -0.11795 -0.669114 + 2.13928 3.60563 -0.129109 0.747983 -0.0367563 -0.6627 + 2.26119 3.51529 -0.008028 0.775921 0.162528 -0.609534 + 1.8582 3.6928 -0.453484 0.761915 -0.218033 -0.609874 + 1.979 3.80282 -0.348244 0.728048 -0.218968 -0.649614 + 2.2237 3.73838 -0.061223 0.756632 -0.109457 -0.644614 + 2.30656 3.64969 0.04838 0.775991 -0.159366 -0.610279 + 2.36045 3.55681 0.151055 0.820168 0.00568968 -0.572095 + 1.93576 3.88298 -0.430492 0.718831 -0.507093 -0.47554 + 2.15021 3.81314 -0.163911 0.75771 -0.171942 -0.629532 + 2.29439 3.94375 -0.001943 0.799453 -0.0889737 -0.594104 + 2.36788 3.86899 0.100744 0.81727 -0.0560707 -0.57352 + 2.42075 3.77541 0.197428 0.842863 -0.0853154 -0.531322 + 2.10696 3.8933 -0.246158 0.769274 -0.176576 -0.614034 + 2.24075 4.03992 -0.09271 0.793767 -0.0897396 -0.601565 + 2.42688 4.18807 0.142888 0.851078 -0.090122 -0.517246 + 2.46344 4.08564 0.234104 0.859779 -0.0734938 -0.50535 + 2.51631 3.99197 0.330737 0.860001 -0.0464279 -0.508175 + 2.16957 4.12504 -0.190949 0.799653 -0.109481 -0.590397 + 2.37324 4.28423 0.052122 0.827923 -0.0756678 -0.555713 + 2.47784 4.52184 0.207375 0.883496 -0.0131345 -0.468256 + 2.5216 4.41592 0.286831 0.884281 -0.0259611 -0.466233 + 2.55816 4.3135 0.378037 0.885542 -0.0526453 -0.461567 + 2.13786 4.23703 -0.268518 0.866291 -0.227695 -0.44463 + 2.34308 4.40835 -0.01565 0.844415 -0.0961144 -0.526997 + 2.44768 4.64596 0.139603 0.884656 0.0187437 -0.465867 + 2.54224 4.74606 0.357013 0.906903 0.105023 -0.408041 + 2.586 4.64014 0.436469 0.892505 0.0860047 -0.442762 + 2.14463 4.35754 -0.352645 0.926542 -0.216957 -0.307328 + 2.31137 4.52042 -0.093169 0.866354 -0.073893 -0.493933 + 2.40095 4.75493 0.063448 0.890888 0.0414994 -0.452323 + 2.48569 4.84565 0.275923 0.898858 0.143565 -0.414057 + 2.10681 4.30357 -0.569965 0.944924 -0.28984 0.152024 + 2.13134 4.47389 -0.427379 0.973045 -0.158952 -0.167088 + 2.27085 4.63874 -0.164498 0.894784 -0.0543149 -0.443184 + 2.36043 4.87316 -0.00793 0.887318 0.0862932 -0.453013 + 2.43896 4.95463 0.199769 0.912753 0.166223 -0.373164 + 2.13782 4.43884 -0.629461 0.980683 -0.0642449 0.184751 + 2.16234 4.60916 -0.486875 0.973389 -0.0749846 -0.216544 + 2.25756 4.75509 -0.239223 0.93838 -0.0194372 -0.345058 + 2.30296 4.96977 -0.093867 0.90418 0.115896 -0.411128 + 2.19346 4.36427 -0.7931 0.965098 0.126119 0.229522 + 2.1484 4.52392 -0.679827 0.984557 0.0944007 0.147428 + 2.13064 4.7121 -0.564763 0.977112 0.0765348 -0.19848 + 2.2028 4.84339 -0.336761 0.922989 0.0950288 -0.372909 + 2.2482 5.05807 -0.191405 0.875215 0.205219 -0.438045 + 2.19335 4.39952 -0.832166 0.969171 0.244961 -0.0264674 + 2.12695 4.65774 -0.736409 0.961873 0.244117 -0.123321 + 2.10918 4.84592 -0.621343 0.903046 0.253359 -0.346866 + 2.17109 4.94632 -0.414649 0.912672 0.201131 -0.355776 + 2.17387 5.1368 -0.282967 0.840234 0.298315 -0.452786 + 2.15185 4.49786 -0.87628 0.939317 0.299347 -0.167557 + 2.08545 4.75607 -0.780523 0.871822 0.415455 -0.259467 + 2.03206 4.93082 -0.7006 0.790891 0.414522 -0.450181 + 2.08717 5.00564 -0.514393 0.815822 0.368693 -0.445533 + 2.08995 5.19612 -0.382712 0.789791 0.359419 -0.49704 + 2.21742 4.1759 -0.951634 0.835344 0.251404 -0.488872 + 2.17726 4.38166 -0.952832 0.952819 0.23426 -0.193026 + 2.09335 4.67413 -0.890592 0.854799 0.421801 -0.30233 + 1.98499 4.84801 -0.845362 0.756128 0.517099 -0.401099 + 1.9316 5.02276 -0.765438 0.703633 0.471571 -0.531528 + 2.19199 4.18336 -1.01116 0.713774 0.109885 -0.691702 + 2.15183 4.38913 -1.01236 0.833741 0.260787 -0.486689 + 2.08058 4.50017 -1.05329 0.740992 0.287426 -0.606892 + 2.11876 4.55803 -0.967101 0.86123 0.338772 -0.378835 + 1.9959 4.7827 -0.94005 0.72393 0.539124 -0.43043 + 2.1757 3.92894 -1.00148 0.188805 0.122559 -0.974337 + 2.12779 3.92912 -1.0268 0.48462 0.06873 -0.872021 + 2.14408 4.18354 -1.03648 0.496091 -0.0212207 -0.868011 + 2.12014 4.34516 -1.06081 0.662663 0.046567 -0.747468 + 2.25716 3.7201 -1.07276 0.190899 0.30479 -0.933092 + 2.17766 3.69811 -1.06748 0.0745438 0.343137 -0.936323 + 2.10814 3.70056 -1.08372 0.352806 0.321139 -0.878861 + 2.09368 3.92411 -1.04812 0.215585 0.0446019 -0.975466 + 2.15277 3.49152 -1.19185 0.237933 0.547742 -0.802101 + 2.08324 3.49396 -1.20809 0.390461 0.567218 -0.725123 + 2.03674 3.52417 -1.2188 0.205763 0.679839 -0.703904 + 2.07403 3.69546 -1.10509 0.131744 0.40823 -0.903323 + 2.25356 3.33286 -1.28525 0.520445 0.462624 -0.717716 + 2.13852 3.33639 -1.32156 0.474176 0.653367 -0.590143 + 2.04657 3.34112 -1.43756 0.650325 0.64725 -0.397673 + 2.02722 3.40521 -1.36935 0.549537 0.694587 -0.464282 + 2.12598 3.21637 -1.55647 0.672972 0.560008 -0.483218 + 2.03403 3.22111 -1.67248 0.638922 0.568877 -0.517838 + 1.98168 3.22667 -1.72912 0.725695 0.44367 -0.525855 + 1.94243 3.33731 -1.68535 0.7295 0.535439 -0.425599 + 1.92308 3.40147 -1.61709 0.654967 0.659739 -0.36846 + 1.90506 3.21602 -1.84167 0.595112 0.370107 -0.713346 + 1.81518 3.23462 -1.87768 0.404401 0.31082 -0.860146 + 1.79251 3.29908 -1.86053 0.435239 0.485815 -0.757991 + 1.86581 3.32674 -1.79784 0.557168 0.540749 -0.630202 + 1.83363 3.39129 -1.76046 0.436406 0.713703 -0.547884 + 1.9152 3.43695 -1.56133 0.389217 0.897077 -0.209196 + 1.68929 3.21364 -1.93175 0.26303 -0.129465 -0.956062 + 1.68544 3.26274 -1.93739 0.387176 0.119901 -0.914177 + 1.66277 3.3272 -1.92024 0.478758 0.511757 -0.713369 + 1.76033 3.36363 -1.82314 0.360017 0.675397 -0.643604 + 1.49576 3.28867 -1.9863 0.125192 -0.279595 -0.951921 + 1.49191 3.33776 -1.99193 0.203632 -0.172483 -0.963734 + 1.49567 3.38455 -2.00338 0.376293 0.248437 -0.892571 + 1.4769 3.4259 -1.974 0.340544 0.874706 -0.344848 + 1.644 3.36855 -1.89087 0.402154 0.723094 -0.561611 + 1.33921 3.31982 -2.00306 0.0694265 -0.282559 -0.956734 + 1.34711 3.35336 -2.01996 -0.0106783 -0.386564 -0.922201 + 1.35098 3.38003 -2.02934 0.0591444 -0.279377 -0.958358 + 1.35474 3.42673 -2.04084 0.132508 0.383839 -0.913843 + 1.28209 3.29816 -2.00954 0.182039 -0.0719823 -0.980653 + 1.21141 3.39852 -2.02938 0.113984 -0.260802 -0.95864 + 1.21528 3.4251 -2.03882 0.132837 0.343165 -0.929834 + 1.21849 3.44081 -2.01302 0.103066 0.899404 -0.424794 + 1.35795 3.44244 -2.01504 0.114224 0.947508 -0.298632 + 1.1188 3.26806 -2.04562 0.341523 -0.0242842 -0.93956 + 1.15429 3.37695 -2.03582 0.298403 -0.215147 -0.929875 + 1.04122 3.27733 -2.08167 0.430542 -0.205054 -0.878969 + 1.07671 3.38622 -2.07188 0.431787 -0.0470074 -0.90075 + 0.983008 3.23697 -2.08837 0.254391 -0.358082 -0.898367 + 0.97195 3.33475 -2.15373 0.454453 -0.14448 -0.878975 + 0.945587 3.3738 -2.16275 0.139275 0.337838 -0.930843 + 1.05035 3.42518 -2.08095 0.347749 0.418256 -0.839126 + 0.98818 3.1422 -2.07001 0.230539 -0.116354 -0.966082 + 0.843467 3.22363 -2.09885 0.167231 -0.254299 -0.952557 + 0.913735 3.29439 -2.16042 0.0756546 -0.445483 -0.892088 + 0.887221 3.33249 -2.16981 -0.362102 0.0797176 -0.928723 + 0.935487 3.43206 -2.11846 0.0676357 0.560195 -0.825595 + 0.934466 2.91554 -2.08703 0.430653 0.110974 -0.895669 + 0.848639 3.12885 -2.08049 0.353131 -0.0254059 -0.935229 + 0.816953 3.26172 -2.10824 -0.367019 -0.0012002 -0.930213 + 0.877121 3.39075 -2.12552 -0.415379 0.373403 -0.829476 + 0.85133 2.46952 -2.4015 0.862951 0.265682 -0.429801 + 0.849243 2.29637 -2.54819 0.807398 0.432155 -0.401686 + 0.818076 2.32609 -2.59188 0.808228 0.418766 -0.414007 + 0.877783 2.22032 -2.58847 0.801398 0.474667 -0.363941 + 0.851235 2.13087 -2.76174 0.766622 0.493752 -0.410486 + 0.816371 2.15362 -2.79594 0.756566 0.50377 -0.416923 + 0.807259 2.10921 -2.87383 0.829617 0.434969 -0.350053 + 0.932255 2.02172 -2.75308 0.791971 0.450252 -0.412377 + 0.879776 2.05483 -2.80203 0.745879 0.47917 -0.462666 + 0.83271 2.03751 -2.89384 0.796911 0.429877 -0.424428 + 0.746748 2.17122 -2.93763 0.726052 0.505953 -0.465681 + 0.957339 2.00159 -2.71642 0.882347 0.379622 -0.278119 + 0.943743 1.95252 -2.79183 0.813502 0.37476 -0.444713 + 0.891264 1.98563 -2.84077 0.589267 -0.307134 -0.747284 + 0.976666 1.92511 -2.73795 0.908901 0.308609 -0.280464 + 0.772199 2.09951 -2.95763 0.794364 0.407588 -0.450398 + 0.745388 2.12484 -2.9707 0.652646 0.418271 -0.631746 + 0.711933 2.12546 -3.00077 0.519362 -0.323774 -0.790844 + 0.640049 2.12566 -3.02751 0.400574 -0.144019 -0.904875 + 0.61934 2.10536 -3.02356 0.555988 -0.321682 -0.766419 + 0.61008 2.09215 -3.03068 0.631621 -0.181779 -0.753665 + 0.598376 2.08982 -3.03804 0.0815207 -0.310188 -0.947174 + 0.588527 2.10963 -3.04155 0.728356 0.248811 -0.638429 + 0.679143 2.09519 -2.95214 0.56536 -0.725893 -0.391724 + 0.658435 2.0749 -2.94819 0.71944 -0.477175 -0.504688 + 0.643091 2.04482 -2.95809 0.822419 -0.282537 -0.493761 + 0.633831 2.03161 -2.96522 0.786452 -0.33594 -0.518302 + 0.70134 2.1124 -2.93695 0.482688 -0.831769 -0.274175 + 0.706703 2.08199 -2.88367 0.556804 -0.624279 -0.547947 + 0.684506 2.06486 -2.89881 0.73812 -0.499445 -0.453579 + 0.671639 2.04904 -2.90701 0.824072 -0.361371 -0.436252 + 0.656295 2.01888 -2.91696 0.848419 -0.344976 -0.401468 + 0.745388 2.12484 -2.9707 -0.105507 -0.985152 -0.135438 + 0.734795 2.11178 -2.90688 0.184212 -0.897888 -0.39983 + 0.723426 2.08469 -2.87455 0.318083 -0.661349 -0.679295 + 0.683922 2.01546 -2.85125 0.636825 -0.589376 -0.497082 + 0.671055 1.99973 -2.8594 0.814312 -0.545859 -0.197317 + 0.766295 2.10833 -2.8953 -0.326633 -0.876409 -0.353862 + 0.754926 2.08123 -2.86297 0.0371263 -0.679432 -0.732798 + 0.700645 2.01817 -2.84213 0.322544 -0.57093 -0.754986 + 0.772199 2.09951 -2.95763 -0.706113 -0.706894 0.0413043 + 0.793106 2.08309 -2.88218 -0.608152 -0.721755 -0.330486 + 0.771606 2.06407 -2.84745 -0.0984308 -0.641747 -0.760574 + 0.717325 2.00101 -2.82661 0.193981 -0.528656 -0.826374 + 0.83271 2.03751 -2.89384 -0.748264 -0.618737 -0.239301 + 0.811958 2.03572 -2.84774 -0.589538 -0.643534 -0.488168 + 0.790458 2.01671 -2.81301 -0.0403747 -0.617337 -0.785662 + 0.794947 1.99192 -2.79688 0.00616252 -0.487049 -0.873353 + 0.721814 1.97613 -2.81053 0.173875 -0.479318 -0.860245 + 0.846357 1.99908 -2.85287 -0.995004 -0.0687249 0.0724176 + 0.825605 1.99729 -2.80678 -0.633736 -0.413234 -0.653924 + 0.78705 1.9583 -2.78003 0.00757615 -0.409941 -0.91208 + 0.780231 1.9333 -2.76934 -0.00211998 -0.356229 -0.934396 + 0.714996 1.95114 -2.79984 0.0717885 -0.542636 -0.836895 + 0.683296 1.9433 -2.78645 -0.079781 -0.848488 -0.523167 + 0.817707 1.96366 -2.78993 -0.654148 -0.163456 -0.738494 + 0.811185 1.93751 -2.78023 -0.690024 -0.0724013 -0.720156 + 0.768366 1.89371 -2.75537 -0.0197988 -0.739615 -0.672739 + 0.736666 1.88587 -2.74199 -0.165716 -0.850028 -0.499991 + 0.839834 1.97284 -2.84323 -0.957504 0.152359 -0.244894 + 0.799319 1.89792 -2.76627 -0.0716306 -0.696446 -0.714025 + 0.808198 1.87303 -2.70255 0.247209 -0.952377 -0.17851 + 0.756233 1.86791 -2.70109 -0.0602847 -0.982099 -0.17846 + 0.654392 1.90403 -2.71624 -0.150379 -0.886649 -0.43731 + 0.83271 2.03751 -2.89384 -0.69545 0.393795 0.601062 + 0.642788 1.97122 -2.85022 0.53712 -0.840362 -0.0727665 + 0.66024 1.98387 -2.86694 0.707074 -0.697049 -0.119032 + 0.64548 2.00311 -2.92446 0.795927 -0.435207 -0.420828 + 0.573469 1.94957 -2.85811 0.303614 -0.910307 -0.281355 + 0.614905 1.97986 -2.91918 0.284136 -0.891277 -0.3534 + 0.632357 1.99251 -2.93589 0.500886 -0.719912 -0.480458 + 0.620708 2.02101 -2.97665 0.638933 -0.480235 -0.600949 + 0.52042 1.93869 -2.87167 0.261246 -0.750124 -0.607507 + 0.54074 1.94898 -2.8761 0.208281 -0.856071 -0.473034 + 0.582176 1.97927 -2.93717 0.146442 -0.866962 -0.476373 + 0.609004 2.01859 -2.98406 0.334369 -0.65819 -0.674525 + 0.504744 1.95583 -2.89736 0.0657213 -0.784127 -0.617111 + 0.561231 1.9846 -2.94719 0.00479849 -0.827016 -0.562158 + 0.588059 2.02391 -2.99407 -0.0529281 -0.592872 -0.803555 + 0.57821 2.04381 -2.99755 -0.511442 -0.268182 -0.816398 + 0.588527 2.10963 -3.04155 -0.799168 -0.326007 -0.505025 + 0.484424 1.94553 -2.89293 0.0698482 -0.507247 -0.858966 + 0.44583 1.96623 -2.90117 -0.0076664 -0.382206 -0.924045 + 2.67151 2.02914 0.71846 0.99686 0.0589322 -0.0528951 + 2.6886 2.09035 0.768845 0.943737 -0.200669 -0.262855 + 2.73773 2.11713 0.891059 0.950885 -0.00242421 -0.309534 + 2.76974 2.25956 1.00996 0.948322 0.0343029 -0.31545 + 2.84566 2.22835 1.24362 0.940422 -0.003093 -0.339996 + 2.91431 2.40647 1.3995 0.948849 -0.0790274 -0.305681 + 2.93623 2.33865 1.51157 0.964898 -0.0674303 -0.253821 + 2.73842 2.35373 0.931246 0.894006 0.174965 -0.412481 + 2.81256 2.32573 1.13535 0.938734 -0.0297848 -0.343353 + 2.88121 2.50385 1.29123 0.936162 -0.0799716 -0.342353 + 2.99463 2.69059 1.5504 0.959938 -0.0896236 -0.265495 + 3.01655 2.62285 1.66252 0.979102 -0.125827 -0.159772 + 2.67447 2.278 0.802623 0.720593 0.411058 -0.558369 + 2.68578 2.38143 0.851482 0.888723 0.0336841 -0.457206 + 2.78124 2.41982 1.05658 0.92132 -0.0243742 -0.38804 + 2.85952 2.61477 1.20352 0.925873 -0.0842115 -0.36833 + 2.98441 2.8109 1.47462 0.955422 -0.0749462 -0.285574 + 2.62183 2.30578 0.72291 0.877114 0.0831774 -0.473025 + 2.64802 2.47483 0.752111 0.900968 -0.0820684 -0.426053 + 2.75872 2.54239 0.975685 0.911529 -0.0870234 -0.401923 + 2.837 2.73734 1.12262 0.92231 -0.092091 -0.375318 + 2.96272 2.92172 1.38686 0.945961 -0.0635739 -0.317986 + 2.51401 2.31489 0.503919 0.910713 0.03266 -0.411745 + 2.58868 2.36048 0.653766 0.895251 -0.056553 -0.441959 + 2.60116 2.6108 0.624196 0.898823 -0.110475 -0.424161 + 2.72096 2.63579 0.876314 0.906586 -0.104319 -0.408925 + 2.81207 2.84551 1.03226 0.921419 -0.109802 -0.372733 + 2.46937 2.34416 0.416232 0.86826 0.038163 -0.49464 + 2.54182 2.49645 0.525852 0.888207 -0.0924309 -0.45005 + 2.58091 2.74515 0.544287 0.887911 -0.121179 -0.443767 + 2.7072 2.76244 0.798548 0.906629 -0.127132 -0.40232 + 2.79831 2.97216 0.954499 0.920891 -0.101816 -0.376288 + 2.44543 2.27979 0.37632 0.718057 0.275031 -0.639337 + 2.41009 2.47716 0.302859 0.871211 -0.0786243 -0.484571 + 2.49718 2.52572 0.438165 0.86603 -0.0963212 -0.490626 + 2.38615 2.4128 0.262939 0.879806 -0.00167563 -0.475331 + 2.40968 2.60772 0.270929 0.857919 -0.13133 -0.496717 + 2.49677 2.65618 0.406191 0.867706 -0.125355 -0.481013 + 2.49429 2.81905 0.355288 0.875115 -0.120078 -0.468781 + 2.57843 2.90803 0.493386 0.884851 -0.103434 -0.454246 + 2.68696 2.89679 0.71864 0.901603 -0.106367 -0.419283 + 2.76845 3.07492 0.860518 0.915697 -0.0827831 -0.39325 + 2.47963 2.97629 0.295346 0.874121 -0.0784305 -0.479333 + 2.54816 3.04584 0.411292 0.879667 -0.068648 -0.47061 + 2.66019 3.0171 0.63406 0.896749 -0.0848377 -0.434332 + 2.74168 3.19523 0.775939 0.909137 -0.063492 -0.411628 + 2.43931 3.14098 0.203898 0.850076 -0.0200171 -0.526279 + 2.50785 3.21052 0.319844 0.872276 0.00426763 -0.488996 + 2.62992 3.15491 0.551967 0.886977 -0.047584 -0.459356 + 2.70095 3.29493 0.677653 0.893638 -0.0326435 -0.447599 + 2.38088 3.25584 0.119155 0.815884 0.0478805 -0.57623 + 2.44382 3.3279 0.219741 0.842162 0.110341 -0.527815 + 2.58204 3.26134 0.460024 0.874376 0.00588322 -0.485214 + 2.65307 3.40136 0.58571 0.876219 -0.0151807 -0.481674 + 2.34785 3.42302 0.102595 0.821075 0.111012 -0.559921 + 2.51801 3.37872 0.359921 0.849225 0.0558676 -0.525068 + 2.59962 3.50006 0.490758 0.846312 0.012624 -0.532538 + 2.71706 3.58728 0.688875 0.893513 -0.0167451 -0.448725 + 2.76013 3.49468 0.787875 0.911009 -0.0178989 -0.411998 + 2.44711 3.46454 0.261678 0.828567 0.0508519 -0.557576 + 2.52873 3.58587 0.392516 0.83814 -0.000561049 -0.545455 + 2.66362 3.68599 0.593915 0.860778 -0.00734568 -0.508927 + 2.73856 3.90859 0.73135 0.907451 0.013409 -0.419944 + 2.77582 3.81861 0.830804 0.933799 0.00766403 -0.357717 + 2.47465 3.68253 0.300103 0.840074 -0.0545014 -0.539727 + 2.61642 3.79249 0.510856 0.857008 -0.0257027 -0.514662 + 2.69136 4.01509 0.648292 0.897292 -0.00604435 -0.441395 + 2.80241 4.17046 0.902182 0.942138 0.000324917 -0.335226 + 2.83967 4.08039 1.00158 0.957128 -0.00431602 -0.289633 + 2.56233 3.88914 0.418443 0.854671 -0.0401501 -0.517616 + 2.64914 4.11155 0.555025 0.884611 -0.0234189 -0.465741 + 2.77019 4.2544 0.796595 0.932967 -0.0158803 -0.359612 + 2.80234 4.48734 0.914338 0.955139 0.0781334 -0.285666 + 2.83456 4.40331 1.01987 0.964872 0.0541266 -0.257084 + 2.60312 4.21438 0.46731 0.877797 -0.0286857 -0.478173 + 2.72797 4.35094 0.703387 0.912857 0.00904089 -0.40818 + 2.76089 4.56788 0.813234 0.94214 0.0981501 -0.32053 + 2.79077 4.6899 0.98689 0.949499 0.214131 -0.229346 + 2.83173 4.63089 1.0977 0.960287 0.194486 -0.200061 + 2.68542 4.4429 0.6089 0.906319 0.0123005 -0.422416 + 2.71834 4.65985 0.718739 0.927165 0.125943 -0.352849 + 2.74932 4.77044 0.885785 0.943216 0.229901 -0.23977 + 2.7084 4.97785 0.998734 0.929402 0.336078 -0.152522 + 2.74616 4.90857 1.09554 0.931632 0.33578 -0.138975 + 2.64047 4.54202 0.519628 0.897385 0.0513165 -0.438255 + 2.66822 4.75083 0.630958 0.912169 0.15659 -0.378718 + 2.70037 4.857 0.796664 0.929584 0.255633 -0.265565 + 2.65944 5.06441 0.909622 0.923181 0.341067 -0.177232 + 2.61376 4.84895 0.547808 0.899669 0.176061 -0.399498 + 2.65025 4.94798 0.708883 0.921177 0.268123 -0.282034 + 2.61138 5.14084 0.817034 0.913574 0.348811 -0.209076 + 2.60005 5.27246 1.05447 0.916325 0.391651 -0.0834139 + 2.63199 5.20228 1.15381 0.91877 0.390824 -0.0558353 + 2.55713 4.93932 0.463279 0.90167 0.189749 -0.388569 + 2.59492 5.03463 0.622196 0.908901 0.283452 -0.305867 + 2.55605 5.22749 0.730347 0.893946 0.380737 -0.236431 + 2.55198 5.34889 0.961884 0.87828 0.452994 -0.153039 + 2.50784 5.47996 1.22667 0.872213 0.488792 -0.0180771 + 2.50059 5.03891 0.382189 0.891358 0.21689 -0.398044 + 2.5383 5.125 0.537667 0.901303 0.304185 -0.308422 + 2.49893 5.29793 0.637158 0.883413 0.399328 -0.245192 + 2.49541 5.41053 0.865721 0.857535 0.482417 -0.178629 + 2.43881 5.12605 0.296857 0.896079 0.237447 -0.375049 + 2.47683 5.20264 0.447795 0.888298 0.323433 -0.326065 + 2.43747 5.37556 0.547294 0.870629 0.417207 -0.260659 + 2.4383 5.48096 0.772532 0.857675 0.482028 -0.179004 + 2.39598 5.61798 1.0342 0.827613 0.54967 -0.113666 + 2.37936 5.22093 0.213316 0.876929 0.283483 -0.388114 + 2.41505 5.28978 0.362463 0.879786 0.351102 -0.320475 + 2.37552 5.44264 0.454495 0.857017 0.435614 -0.275249 + 2.38285 5.53666 0.67206 0.846725 0.492349 -0.201616 + 2.37951 5.0495 0.116236 0.89498 0.212028 -0.392497 + 2.31038 5.30304 0.127906 0.863872 0.325878 -0.384094 + 2.34577 5.36623 0.277045 0.857304 0.38771 -0.338689 + 2.30624 5.5191 0.369077 0.841989 0.45216 -0.29429 + 2.3209 5.60374 0.579269 0.829908 0.51656 -0.210756 + 2.32204 5.14603 0.030249 0.889735 0.257918 -0.376631 + 2.23783 5.38581 0.041944 0.841278 0.357507 -0.405512 + 2.2768 5.44834 0.191635 0.850292 0.404467 -0.336764 + 2.23743 5.58643 0.280245 0.83262 0.465317 -0.300374 + 2.25917 5.66193 0.483885 0.820038 0.527487 -0.222024 + 2.24948 5.2288 -0.055713 0.850589 0.325182 -0.413225 + 2.1625 5.46109 -0.042254 0.823091 0.380725 -0.421391 + 2.20301 5.52251 0.10737 0.830445 0.42511 -0.360061 + 2.16364 5.6606 0.195989 0.817953 0.482846 -0.31275 + 2.19036 5.72927 0.395052 0.799878 0.55289 -0.233471 + 2.17516 5.30753 -0.147275 0.830827 0.351023 -0.431867 + 2.07975 5.54245 -0.121966 0.801233 0.389729 -0.454023 + 2.12768 5.59788 0.023222 0.823283 0.430212 -0.370301 + 2.08997 5.72607 0.107994 0.811367 0.491573 -0.316291 + 2.1204 5.78911 0.305796 0.788776 0.566282 -0.239077 + 2.09241 5.38889 -0.226996 0.791544 0.381486 -0.477417 + 1.99624 5.61466 -0.200255 0.774812 0.394399 -0.494081 + 2.0527 5.66198 -0.067605 0.803315 0.43225 -0.40969 + 2.015 5.79017 0.017166 0.786792 0.512218 -0.34437 + 2.04673 5.85449 0.217752 0.784342 0.569674 -0.245519 + 1.9999 5.26727 -0.465553 0.74328 0.410284 -0.528395 + 2.00236 5.46013 -0.309787 0.761803 0.391158 -0.516383 + 1.90669 5.70324 -0.265662 0.726674 0.433134 -0.533235 + 1.96919 5.7342 -0.145894 0.763189 0.464014 -0.449704 + 1.93368 5.85036 -0.06688 0.742615 0.543902 -0.390761 + 2.01005 5.09055 -0.593649 0.773849 0.415489 -0.478044 + 1.897 5.32413 -0.550839 0.699807 0.433177 -0.568003 + 1.91281 5.54861 -0.375237 0.726 0.404402 -0.556223 + 1.80394 5.77041 -0.338008 0.667209 0.460198 -0.585704 + 1.87717 5.79114 -0.227716 0.70867 0.499751 -0.498032 + 1.90715 5.14741 -0.678936 0.69296 0.474293 -0.543003 + 1.79588 5.39142 -0.619783 0.661577 0.447364 -0.601815 + 1.81169 5.61589 -0.444181 0.662366 0.439637 -0.606622 + 1.69468 5.82508 -0.409707 0.590969 0.489442 -0.641251 + 1.77442 5.8584 -0.300021 0.658857 0.520112 -0.543499 + 1.82293 5.09917 -0.833386 0.665469 0.512977 -0.542222 + 1.79847 5.22373 -0.746933 0.660948 0.48498 -0.572663 + 1.68559 5.46478 -0.67924 0.60448 0.475804 -0.638917 + 1.70243 5.67048 -0.51592 0.602893 0.471022 -0.64394 + 1.88753 4.95658 -0.89482 0.706913 0.536145 -0.461326 + 1.70753 5.17999 -0.889376 0.614641 0.525357 -0.588401 + 1.68819 5.29708 -0.806381 0.614619 0.503426 -0.607294 + 1.56957 5.52995 -0.731322 0.555854 0.502461 -0.662238 + 1.87891 4.87863 -0.985402 0.618341 0.538791 -0.572152 + 1.77214 5.03741 -0.950809 0.608016 0.529219 -0.591815 + 1.58714 5.25355 -0.942585 0.559589 0.528346 -0.638523 + 1.5678 5.37064 -0.85959 0.564117 0.52434 -0.637839 + 2.03337 4.6711 -1.00275 0.729694 0.463329 -0.502865 + 1.91638 4.76694 -1.04815 0.615698 0.543182 -0.57085 + 1.74087 4.96192 -1.04267 0.544296 0.511057 -0.665254 + 1.63409 5.12079 -1.00802 0.545805 0.50741 -0.666807 + 1.45903 5.31512 -0.996827 0.505928 0.531538 -0.679341 + 1.99519 4.61324 -1.08894 0.667133 0.366672 -0.648448 + 1.88748 4.71569 -1.13058 0.584667 0.472478 -0.659491 + 1.73303 4.82137 -1.17302 0.464421 0.502104 -0.729524 + 1.76194 4.87261 -1.09058 0.539443 0.5513 -0.636451 + 1.53142 5.08193 -1.11033 0.472589 0.491175 -0.731715 + 2.04889 4.45611 -1.10178 0.625652 0.162118 -0.763071 + 1.96621 4.56012 -1.13792 0.569859 0.226626 -0.789875 + 1.8585 4.66265 -1.17951 0.394964 0.202347 -0.896136 + 2.06534 4.30683 -1.08842 0.165726 -0.190595 -0.967579 + 2.02337 4.39865 -1.12526 0.270114 -0.208268 -0.940033 + 1.94069 4.50266 -1.1614 -0.106776 -0.315449 -0.942916 + 2.08928 4.14522 -1.06409 0.248168 -0.0934227 -0.964202 + 2.0466 4.10856 -1.0584 -0.489524 -0.0754847 -0.868717 + 2.03364 4.27968 -1.06779 -0.542495 -0.301152 -0.784224 + 1.99167 4.3715 -1.10462 -0.611108 -0.504348 -0.610065 + 2.05101 3.88745 -1.04242 -0.392203 0.118485 -0.912216 + 1.99583 3.86673 -1.01114 -0.544096 0.127998 -0.829202 + 2.02304 4.08642 -1.02005 -0.737529 0.0149861 -0.675149 + 2.01007 4.25745 -1.02949 -0.762162 -0.132344 -0.633715 + 2.03007 3.69726 -1.092 -0.411265 0.414258 -0.811943 + 1.9749 3.67645 -1.06076 -0.572579 0.400494 -0.715373 + 1.74742 3.72033 -0.871373 -0.549309 0.216261 -0.80715 + 1.77462 3.94002 -0.880283 -0.570766 0.166296 -0.804097 + 1.76261 4.05962 -0.821833 -0.647748 0.152918 -0.74635 + 1.99278 3.52588 -1.20576 -0.469362 0.695106 -0.544543 + 1.94981 3.49535 -1.17289 -0.628683 0.627639 -0.459158 + 1.74752 3.40461 -1.07452 -0.5071 0.712606 -0.484811 + 1.77261 3.58579 -0.962341 -0.555242 0.442445 -0.704236 + 1.98072 3.43541 -1.38007 0.286957 0.915062 -0.283402 + 1.94716 3.43808 -1.3497 -0.401772 0.90496 -0.140092 + 1.90418 3.40747 -1.31688 -0.490817 0.868704 -0.0667227 + 1.88163 3.43962 -1.53096 -0.195883 0.977953 0.0723714 + 1.84709 3.41146 -1.48519 -0.378316 0.913064 0.152285 + 1.68608 3.35453 -1.39578 -0.240246 0.963322 0.119554 + 1.74316 3.35054 -1.22748 -0.354105 0.930087 -0.0977177 + 1.82574 3.42676 -1.70469 0.218895 0.934977 -0.27911 + 1.79723 3.42649 -1.65382 -0.237571 0.96765 0.0849265 + 1.76269 3.39842 -1.608 -0.368893 0.914219 0.167695 + 1.72522 3.41054 -1.78059 0.148565 0.934332 -0.323964 + 1.69671 3.41036 -1.72967 -0.213004 0.957225 0.195832 + 1.66266 3.36006 -1.66077 -0.329502 0.916902 0.22521 + 1.54073 3.32302 -1.56781 -0.147083 0.986648 0.0699382 + 1.64076 3.36138 -1.51505 -0.263014 0.964016 0.0386954 + 1.6089 3.41555 -1.84827 0.161352 0.946806 -0.278429 + 1.59004 3.40451 -1.78076 -0.118379 0.935399 0.333189 + 1.556 3.35431 -1.7118 -0.112573 0.919986 0.375438 + 1.48277 3.42564 -1.88495 0.155326 0.986915 0.0432823 + 1.46391 3.41461 -1.81744 0.0333653 0.924266 0.380288 + 1.43494 3.37481 -1.76431 0.0337742 0.88904 0.456583 + 1.35307 3.35536 -1.67502 0.160271 0.958432 0.236055 + 1.47412 3.33477 -1.62255 0.0504947 0.979649 0.194263 + 1.36382 3.44218 -1.92599 0.179912 0.982135 -0.0551638 + 1.29996 3.46466 -1.90454 0.265219 0.959441 -0.095561 + 1.30519 3.45113 -1.84669 0.181437 0.884 0.430841 + 1.27622 3.41134 -1.79357 0.16241 0.852996 0.496004 + 1.15463 3.4633 -1.99157 0.297673 0.841896 -0.450113 + 1.1022 3.53356 -1.92768 0.301205 0.938207 -0.17042 + 1.10742 3.52012 -1.86978 0.31716 0.864002 0.391036 + 1.07183 3.48275 -2.01627 0.307296 0.760528 -0.571984 + 1.01939 3.55311 -1.95233 0.426555 0.803947 -0.414391 + 0.96066 3.60365 -1.92487 0.494927 0.84908 -0.18469 + 0.958648 3.58478 -1.85979 0.482183 0.77035 0.417205 + 1.11874 3.44461 -1.78761 0.278898 0.832016 0.479547 + 1.05115 3.46115 -2.05065 0.260583 0.671837 -0.693348 + 0.969432 3.54005 -2.00651 0.349835 0.726283 -0.591716 + 0.9107 3.59059 -1.97905 0.431828 0.726953 -0.533913 + 0.836274 3.68742 -1.90357 0.502162 0.861491 -0.0752784 + 0.834262 3.66848 -1.83855 0.564977 0.733019 0.378793 + 0.936296 3.46802 -2.08816 0.271225 0.618756 -0.737278 + 0.948757 3.51835 -2.04093 0.304695 0.657611 -0.688991 + 0.846731 3.62203 -1.9957 0.435322 0.661427 -0.610745 + 0.772305 3.71886 -1.92022 0.594254 0.758296 -0.268047 + 0.831081 3.52536 -2.07787 -0.00852729 0.39327 -0.919383 + 0.843542 3.57578 -2.0306 0.32367 0.578306 -0.748865 + 0.705238 3.728 -1.99306 0.44169 0.630157 -0.638602 + 0.638711 3.79866 -1.96524 0.570894 0.687529 -0.448759 + 0.705777 3.78952 -1.8924 0.674525 0.721203 -0.157738 + 0.830249 3.43662 -2.09197 -0.337322 0.152765 -0.928912 + 0.700534 3.60249 -2.02207 -0.15147 0.0801534 -0.985207 + 0.702049 3.68176 -2.02795 0.0647169 0.304795 -0.950217 + 0.620649 3.7338 -2.01269 0.0114687 0.101269 -0.994793 + 0.770081 3.3076 -2.0747 -0.188333 0.182023 -0.96509 + 0.699702 3.51375 -2.03617 -0.0713914 0.171692 -0.98256 + 0.647085 3.52642 -2.0411 0.496314 0.278766 -0.822169 + 0.591852 3.63862 -2.04383 0.618985 0.449348 -0.644162 + 0.619134 3.65462 -2.00675 0.208815 0.341377 -0.916438 + 0.717464 3.32035 -2.07958 0.430172 0.271348 -0.861001 + 0.576766 3.71804 -2.007 0.31714 0.222589 -0.921887 + 2.67427 2.71354 -0.70516 -0.585552 0.494316 0.64248 + 1.02369 1.81801 0.518748 -0.770135 0.629929 0.100407 + 0.925079 1.67623 0.632923 -0.31584 -0.363456 -0.876439 + 0.972324 1.71963 0.595543 -0.756445 0.3446 -0.555915 + 0.848978 1.62264 0.668738 0.232188 -0.827003 -0.51201 + 1.02369 1.81801 0.518748 0.487929 -0.727629 -0.482164 + 0.948408 2.01676 -0.468093 -0.0645931 -0.965585 0.251938 + 0.915514 2.00015 -0.555323 -0.344388 -0.914973 0.210287 + 1.23701 1.53076 0.60848 -0.714382 -0.153768 -0.682652 + 1.33145 1.63145 0.543685 -0.378735 -0.222833 -0.898279 + 1.21447 1.45124 0.759218 -0.521178 -0.444237 -0.728716 + 1.25585 1.60974 0.521077 0.910925 -0.408448 0.0581845 + 1.20934 1.39286 0.775928 -0.847225 0.0204599 -0.530839 + 1.1853 1.29834 0.696237 -0.449277 -0.288303 -0.845595 + 1.13045 1.1621 0.761815 -0.819103 0.172255 -0.547174 + 1.26299 1.58624 0.584984 -0.17437 -0.313641 -0.933394 + 1.13996 1.08149 0.754245 -0.871564 0.0509284 -0.48763 + 1.29257 1.60304 0.697493 -0.42515 -0.12688 -0.896186 + 1.37295 1.58577 0.661806 -0.426385 -0.136886 -0.894124 + 0.307145 1.88639 -1.30329 0.0661222 0.806585 0.587409 + 0.186089 1.88576 -1.28879 0.121439 0.805982 0.579349 + 0.099451 1.85062 -1.21534 -0.0995206 0.808565 0.579929 + 0.064756 1.84625 -1.22456 -0.24945 0.786141 0.565471 + 0.874389 1.49643 -1.23266 0.166063 -0.680019 -0.714141 + 0.792052 1.49776 -1.24696 0.1188 -0.656521 -0.744894 + 0.922122 1.44708 -1.17038 0.192259 -0.692053 -0.695772 + 0.508552 1.94894 -2.92703 -0.780217 -0.553978 0.290465 + 0.52297 1.93907 -2.90713 -0.837095 -0.524939 0.153982 + 0.531743 1.92998 -2.84378 -0.892581 -0.423164 0.155665 + 0.562042 1.91149 -2.78196 -0.880935 -0.314045 0.354018 + 0.540993 1.91304 -2.85124 -0.857508 -0.506917 0.0878356 + 0.596303 1.90966 -2.7044 -0.70092 -0.627276 0.339465 + 0.594687 1.91353 -2.65769 -0.614061 -0.784243 0.088835 + 0.596791 1.8903 -2.71226 -0.732456 -0.271992 0.624122 + 0.673959 1.88607 -2.67534 -0.224245 -0.970769 -0.0855689 + 0.645977 1.89343 -2.65109 -0.28634 -0.957263 0.0407023 + 0.644361 1.8973 -2.60438 -0.290762 -0.953806 0.0755789 + 0.733378 1.87888 -2.59848 -0.11827 -0.986878 0.109923 + 0.813326 1.87664 -2.6242 0.196596 -0.971981 0.128851 + 0.844209 1.88512 -2.61269 0.0873606 -0.961378 -0.260999 + 0.76136 1.87152 -2.62273 -0.00669117 -0.982034 0.188584 + 0.881192 1.90619 -2.68198 0.379819 -0.90383 -0.197052 + 0.912075 1.91468 -2.67049 0.113981 -0.929046 -0.351968 + 0.932709 1.90732 -2.65595 -0.061355 -0.901762 -0.427857 + 0.617677 1.90266 -2.70986 0.370197 -0.770326 -0.519184 + 0.596791 1.8903 -2.71226 0.206586 -0.511364 0.834164 + 0.568883 1.86808 -2.71898 0.20596 -0.511065 0.834501 + 0.596791 1.8903 -2.71226 0.363491 -0.456742 -0.811949 + 1.1428 1.64929 -1.72542 -0.401092 0.915994 -0.00893161 + 1.13874 1.64637 -1.84257 -0.2741 0.961098 -0.0340594 + 1.15155 1.65076 -1.79137 -0.0272506 0.996538 -0.0785461 + 0.393486 2.18026 -3.16149 0.377926 -0.716 -0.586954 + 0.372261 2.1636 -3.15483 0.464096 -0.775365 -0.42828 + 0.350348 2.16381 -3.16919 0.321523 -0.800553 -0.505705 + 0.349223 2.13195 -3.11381 0.490387 -0.595144 -0.636651 + 0.334431 2.13339 -3.12531 -0.199286 -0.454074 -0.86839 + 0.371136 2.13183 -3.0994 0.592057 -0.661129 -0.460844 + 0.38294 2.11217 -3.06315 0.804983 -0.204868 -0.556805 + 0.370895 2.08434 -3.07694 0.818381 0.00123083 -0.574674 + 0.354297 2.09602 -3.09818 0.705106 -0.0623241 -0.706357 + 0.339505 2.09737 -3.10972 0.28838 -0.190533 -0.938368 + 0.404042 2.16929 -3.06808 0.679273 -0.628524 -0.378875 + 0.415846 2.14963 -3.03183 0.675007 -0.39771 -0.621444 + 0.393486 2.18026 -3.16149 0.500982 -0.856028 -0.12741 + 0.425268 2.18595 -3.07474 0.394101 -0.887399 -0.239183 + 0.440601 2.15824 -3.01655 0.399007 -0.517363 -0.757052 + 0.443019 2.08989 -2.99497 0.353871 -0.397841 -0.846462 + 0.455932 2.1985 -3.12628 0.241862 -0.966002 -0.091344 + 0.480623 2.19749 -3.09233 -0.0588648 -0.976604 -0.206832 + 0.449959 2.18494 -3.04079 0.257136 -0.853261 -0.453682 + 0.483061 2.14963 -3.00123 0.0814883 -0.519822 -0.850379 + 0.50524 2.13919 -2.99355 0.0266964 -0.487804 -0.872545 + 0.465198 2.07954 -2.98724 0.0433964 -0.24891 -0.967554 + 0.492418 2.17623 -3.02551 -0.176385 -0.80804 -0.562102 + 0.52121 2.16814 -3.0325 -0.343357 -0.861212 -0.374726 + 0.53286 2.15391 -3.00765 -0.2372 -0.777605 -0.582295 + 0.529393 2.117 -2.98592 -0.107761 -0.266479 -0.957797 + 0.509415 2.1894 -3.09931 -0.368745 -0.90262 -0.222047 + 0.565038 2.15256 -3.06872 -0.484107 -0.846432 -0.221797 + 0.557013 2.13173 -3.00002 -0.537375 -0.499236 -0.6797 + 0.540525 2.08937 -2.98326 -0.193184 -0.0956334 -0.976491 + 0.476331 2.05182 -2.98463 -0.10682 -0.242327 -0.964296 + 0.460611 2.02282 -2.96798 -0.171443 -0.57887 -0.797193 + 0.568852 2.10302 -2.9977 -0.676759 -0.220353 -0.702454 + 0.549883 2.03016 -2.9831 -0.239556 -0.25282 -0.937387 + 0.534164 2.00115 -2.96646 -0.121044 -0.661562 -0.740057 + 0.477676 1.9723 -2.91668 -0.140817 -0.783527 -0.605191 + 0.352052 2.05087 -3.10877 0.393683 -0.245151 -0.885954 + 0.323018 2.03798 -3.10345 -0.140404 -0.466361 -0.87338 + 0.310471 2.08448 -3.1044 -0.277882 -0.115503 -0.953646 + 0.237864 2.05686 -3.07595 -0.324359 -0.349116 -0.879153 + 0.229401 2.08615 -3.07449 -0.277474 -0.133379 -0.951429 + 0.302008 2.1137 -3.10299 -0.45046 -0.048573 -0.891475 + 0.322121 2.17092 -3.11931 -0.589253 -0.493426 -0.639774 + 0.350348 2.16381 -3.16919 -0.863471 -0.209912 -0.458643 + 0.289698 2.15122 -3.09699 -0.37193 -0.235035 -0.898013 + 0.289793 2.2002 -3.13563 -0.394012 -0.817502 -0.420054 + 0.350348 2.16381 -3.16919 -0.590066 -0.775858 -0.22331 + 0.31802 2.1931 -3.18552 -0.525173 -0.822986 -0.216533 + 0.248177 2.23837 -3.20173 -0.289099 -0.909547 -0.298572 + 0.19127 2.24886 -3.2109 0.0385587 -0.964608 -0.260852 + 0.129042 2.23586 -3.21559 0.215521 -0.949493 -0.228067 + -0.924635 2.00506 -0.519026 0.958068 -0.105458 0.266429 + -0.920037 1.95183 -0.55663 0.95512 -0.151033 0.254824 + -0.914713 1.86018 -0.745692 0.313962 -0.941078 -0.125697 + -1.37295 1.58577 0.661806 0.426351 -0.136895 -0.894139 + -0.678992 1.83517 -2.44137 -0.769858 0.630129 -0.101274 + -0.661911 1.8537 -2.45587 -0.545686 0.791819 0.274315 + -0.625186 1.8998 -2.49551 -0.346166 0.754879 0.557069 + -0.693494 1.82274 -2.41123 -0.760057 0.643401 -0.0913747 + -0.639392 1.87276 -2.42967 -0.65124 0.758831 0.00788446 + -0.621012 1.88748 -2.46078 -0.656241 0.753659 -0.0366962 + -0.643531 1.86852 -2.48694 -0.614522 0.787777 -0.042064 + -0.618742 1.88277 -2.53462 -0.757163 0.650004 -0.0647919 + -0.710576 1.80419 -2.39672 -0.774003 0.622518 -0.115717 + -0.608264 1.9006 -2.4921 -0.807943 0.585964 -0.0622418 + -0.605994 1.89588 -2.56593 -0.923488 0.373686 -0.0867705 + -0.592266 1.91999 -2.61288 -0.936872 0.3344 -0.102214 + -0.221581 1.99605 -3.06703 -0.0743072 0.98154 0.176233 + -0.267675 2.00019 -3.07539 0.000131986 0.89665 0.44274 + -0.161271 1.99295 -2.99625 -0.215221 0.976479 0.0129731 + -0.136983 2.00247 -2.98235 -0.170746 0.951133 -0.257277 + -0.128457 1.99899 -2.99252 -8.67722e-005 0.998062 -0.062219 + -0.108668 1.98654 -2.98615 0.319866 0.781959 0.535001 + -0.199855 1.98061 -2.98869 -0.204715 0.977897 -0.0425444 + -0.175566 1.99014 -2.97479 -0.287902 0.946501 -0.145769 + -0.268179 1.99335 -3.07676 -0.237126 0.87706 0.417777 + -0.293134 1.98927 -3.07549 0.0324754 0.819348 0.572376 + -0.319848 1.99731 -3.11521 0.0382435 0.990886 0.12916 + -0.31628 1.99369 -3.07773 0.175231 0.978838 0.105689 + -0.325906 1.99664 -3.08165 0.2675 0.96119 0.067504 + -0.320655 1.99868 -2.96098 0.220556 0.965805 0.136293 + -0.295713 1.99981 -2.96814 -0.243513 0.969871 -0.00724026 + -0.284575 2.00426 -2.96885 -0.371288 0.928509 -0.00411823 + -0.328944 1.99242 -2.93294 0.701206 0.624414 0.344119 + -1.15152 1.65076 -1.79137 0.293997 0.955644 -0.0176318 + -1.1428 1.64929 -1.72542 0.397442 0.917063 -0.0321691 + -1.13874 1.64637 -1.84257 0.271888 0.962219 -0.0145619 + 0.012141 2.04154 -3.09621 -6.94118e-005 -0.784969 -0.619535 + -0.012102 2.04153 -3.0962 0.0120096 -0.766179 -0.642514 + -0.021961 2.02879 -3.08313 -0.371428 -0.74644 -0.552149 + 1.02369 1.81801 0.518748 -0.11541 -0.573078 -0.811334 + 0.972324 1.71963 0.595543 -0.115414 -0.573076 -0.811334 + 0.080404 2.00707 -3.02371 -0.117919 0.832655 0.541092 + 0.082735 1.99305 -3.00163 -0.117919 0.832655 0.541093 + 0.108633 1.98662 -2.9861 -0.117919 0.832655 0.541092 + 0.00729 3.0019 -1.86921 0.575951 0.709312 -0.406396 + -0.00729 3.0019 -1.86921 -0.575837 0.709395 -0.406412 + -0.00861 2.95866 -1.66912 -0.653304 0.698657 0.291672 + 0.016514 2.25648 -0.879903 0 0.48573 0.874109 + -1.02369 1.81801 0.51875 0.115235 -0.573168 -0.811295 + -0.972324 1.71963 0.59555 0.115273 -0.573153 -0.8113 + -1.07094 1.86141 0.481375 0.115234 -0.573169 -0.811294 + -0.082769 1.99305 -3.00163 0.117371 0.831776 0.542561 + -0.080403 2.00708 -3.02372 0.118004 0.832569 0.541206 + -0.108668 1.98654 -2.98615 0.116522 0.83071 0.544374 + 2.62735 2.77706 -0.803569 0.799797 0.60024 0.0060576 + 2.67427 2.71354 -0.70516 0.83897 0.541101 0.0577904 + 2.69296 2.68907 -0.747364 0.88912 0.457413 -0.015448 + 2.76006 2.54148 -0.595733 0.936886 0.349556 0.00744066 + 2.66066 2.74987 -0.83028 0.827452 0.561381 0.0132091 + 2.62735 2.77706 -0.803569 0.686197 0.716294 0.126717 + 2.59755 2.8118 -0.900746 0.17471 0.918879 0.353748 + 2.74137 2.56587 -0.553589 0.880466 0.4571 0.125856 + 2.79322 2.409 -0.417882 0.938195 0.337548 0.0764976 + 2.62735 2.77706 -0.803569 -0.747519 0.518851 0.41474 + -0.534839 1.92882 -2.85178 -0.519846 0.852994 0.0464883 + -0.52042 1.93869 -2.87167 -0.428662 0.900362 0.0748143 + -0.508552 1.94894 -2.92703 -0.0961616 0.987912 0.121582 + -0.484424 1.94554 -2.89294 -0.105183 0.980917 0.16352 + -0.517922 1.95242 -2.95826 -0.130694 0.978753 0.157993 + -0.49606 1.95866 -2.97745 -0.0723008 0.993601 0.0867757 + -0.517137 1.95856 -3.00009 -0.092774 0.992281 0.0822934 + -0.483244 1.9587 -2.99094 -0.004039 0.999992 -0.000346849 + 0.9621 1.92007 -2.69142 -0.233448 -0.918965 -0.317814 + 0.941467 1.92742 -2.70595 -0.11974 -0.936938 -0.328343 + 0.961467 1.93616 -2.75449 -0.36455 -0.904699 -0.220507 + 0.923743 1.94387 -2.74325 -0.0220769 -0.935402 -0.352896 + 0.943743 1.95252 -2.79183 -0.300675 -0.911713 -0.279954 + 0.892877 1.92997 -2.73397 0.370485 -0.850968 -0.372282 + 0.819883 1.89681 -2.75453 0.339735 -0.837637 -0.42772 + 0.860398 1.97181 -2.83144 0.276514 -0.74731 -0.604208 + 0.83271 2.03751 -2.89384 0.202295 -0.628225 -0.751272 + 0.839834 1.97284 -2.84323 0.357996 -0.639183 -0.680649 + 0.581134 3.8813 -1.91798 0.593829 0.653635 -0.469179 + 0.637317 3.86293 -1.87275 0.717414 0.661076 -0.219764 + 0.664806 3.81544 -1.79851 0.736779 0.566971 0.368375 + 0.733266 3.74195 -1.81821 0.662141 0.655561 0.363056 + 0.518448 3.97269 -1.86747 0.677603 0.623281 -0.390351 + 0.574631 3.9544 -1.82219 0.776251 0.625737 -0.0767332 + 0.595367 3.88153 -1.76637 0.757146 0.462753 0.461075 + 0.657801 3.71537 -1.71277 0.642688 0.640464 0.420427 + 0.732856 3.66747 -1.731 0.590283 0.699904 0.40212 + 0.513553 4.02222 -1.77126 0.883755 0.445905 0.141934 + 0.534289 3.94934 -1.71543 0.903596 0.288934 0.316279 + 0.588362 3.78145 -1.68063 0.752881 0.555775 0.35254 + 0.7262 3.6026 -1.49185 0.604674 0.781074 0.155863 + 0.434 4.21608 -1.68223 0.744553 0.515752 -0.423841 + 0.484016 4.13257 -1.67439 0.893866 0.367382 -0.25697 + 0.508511 4.08163 -1.62556 0.994108 0.10708 0.01682 + 0.509841 3.86933 -1.64343 0.904911 0.340212 0.25572 + 0.417436 4.27618 -1.63193 0.692139 0.535711 -0.483692 + 0.476256 4.31372 -1.51495 0.859956 0.393163 -0.325421 + 0.500752 4.26279 -1.46613 0.915907 0.192544 -0.352194 + 0.484063 4.0017 -1.55352 0.998355 0.0513136 -0.0255802 + 0.599219 3.72037 -1.38404 0.856827 0.512155 -0.0595347 + 0.388452 4.3741 -1.57972 0.742546 0.461111 -0.4858 + 0.447272 4.41163 -1.46274 0.705612 0.344537 -0.619197 + 0.477044 4.4763 -1.41355 0.689446 0.136094 -0.711437 + 0.528419 4.40693 -1.35799 0.816176 0.0886979 -0.570954 + 0.534365 4.21435 -1.42024 0.910352 0.0809521 -0.40584 + 0.391724 4.57063 -1.45214 0.545024 0.101825 -0.832214 + 0.447602 4.6426 -1.43079 0.483485 -0.0728453 -0.872316 + 0.518036 4.55291 -1.36864 0.644902 -0.0761025 -0.760467 + 0.56941 4.48354 -1.31309 0.840042 -0.116021 -0.529971 + 0.562032 4.35841 -1.31215 0.926941 0.0424404 -0.372798 + 0.497061 4.70962 -1.41126 0.424653 -0.195474 -0.884002 + 0.567495 4.62002 -1.34907 0.599758 -0.258698 -0.757209 + 0.605012 4.56017 -1.27502 0.797508 -0.319706 -0.511634 + 0.583846 4.43159 -1.2419 0.933751 -0.130155 -0.333419 + 0.552582 4.76321 -1.40448 0.392602 -0.260636 -0.882005 + 0.61529 4.69129 -1.34532 0.53872 -0.360494 -0.761462 + 0.652807 4.63153 -1.27122 0.769746 -0.459985 -0.442611 + 0.619448 4.5083 -1.20378 0.909816 -0.246648 -0.333765 + 0.649418 4.2149 -1.00639 0.974289 0.00778448 -0.225168 + 0.620436 4.83545 -1.39461 0.394019 -0.216182 -0.893317 + 0.683144 4.76353 -1.33545 0.572904 -0.397392 -0.716841 + 0.707743 4.71343 -1.26267 0.770551 -0.515583 -0.374733 + 0.650159 4.59414 -1.17185 0.869613 -0.39027 -0.302428 + 0.575173 4.91974 -1.4214 0.33075 -0.0745998 -0.940765 + 0.739039 4.91135 -1.36187 0.383517 -0.242294 -0.891183 + 0.753893 4.85831 -1.3304 0.533711 -0.444865 -0.719199 + 0.778492 4.80821 -1.25762 0.637733 -0.6082 -0.47264 + 0.705095 4.67604 -1.1633 0.749525 -0.551004 -0.366888 + 0.693776 4.99564 -1.38866 0.308646 0.0244211 -0.950863 + 0.834013 4.97092 -1.34045 0.382718 -0.164344 -0.90913 + 0.848867 4.91788 -1.30899 0.410099 -0.50902 -0.756781 + 0.858119 4.86914 -1.24797 0.445101 -0.725131 -0.525425 + 0.778795 4.75395 -1.16045 0.616234 -0.640368 -0.458459 + 0.643568 5.10455 -1.3843 0.265049 0.210269 -0.941029 + 0.758672 5.15924 -1.34083 0.279265 0.219755 -0.934729 + 0.808881 5.05033 -1.34519 0.318184 0.116385 -0.940858 + 0.922553 4.99578 -1.30592 0.245997 -0.0351257 -0.968634 + 0.648566 5.23973 -1.34764 0.185371 0.335003 -0.923802 + 0.790913 5.27267 -1.2991 0.268804 0.295902 -0.916617 + 0.874567 5.17472 -1.29805 0.283764 0.225064 -0.932107 + 0.897421 5.07519 -1.31066 0.288618 0.118343 -0.950102 + 0.729833 5.37574 -1.27601 0.174806 0.45826 -0.871459 + 0.87218 5.40876 -1.22741 0.248098 0.450374 -0.857678 + 1.019 5.38393 -1.18621 0.313164 0.421292 -0.851141 + 0.906808 5.28823 -1.25626 0.288041 0.299199 -0.909677 + 1.04436 5.15892 -1.25768 0.253852 0.263659 -0.930615 + 0.62515 5.50066 -1.20399 0.0408389 0.668229 -0.742834 + 0.76991 5.52379 -1.16626 0.124177 0.654321 -0.745952 + 0.916426 5.52384 -1.13374 0.232846 0.62923 -0.74152 + 1.06325 5.49902 -1.09254 0.328853 0.582912 -0.743014 + 1.17762 5.33694 -1.14963 0.366026 0.39186 -0.84408 + 0.61708 5.6261 -1.06225 0.000841583 0.718679 -0.695341 + 0.763906 5.64422 -1.03944 0.0901012 0.712984 -0.695367 + 0.910422 5.64417 -1.00696 0.181054 0.696969 -0.693869 + 1.05435 5.62891 -0.977733 0.293578 0.657106 -0.69428 + 0.48032 5.7741 -0.923194 0.0257597 0.677039 -0.735496 + 0.621965 5.79243 -0.899559 0.032651 0.684147 -0.728613 + 0.768791 5.81047 -0.876793 0.0821737 0.681606 -0.72709 + 0.912049 5.80252 -0.858229 0.174186 0.667657 -0.723805 + 0.498004 5.99299 -0.726127 0.0341043 0.667242 -0.74406 + 0.639649 6.01133 -0.70249 0.0485558 0.668402 -0.742213 + 0.784456 6.01127 -0.691392 0.0933853 0.669114 -0.737269 + 0.927715 6.00332 -0.672828 0.178047 0.656553 -0.732965 + 0.354184 6.1405 -0.599632 0.0420383 0.663685 -0.74683 + 0.498102 6.14672 -0.588201 0.037142 0.678084 -0.734045 + 0.641316 6.14611 -0.579735 0.0490339 0.678255 -0.733189 + 0.786124 6.14596 -0.568686 0.0892531 0.67008 -0.736903 + 0.347783 6.21394 -0.536426 0.0534637 0.700327 -0.711817 + 0.486205 6.20677 -0.532 0.0466256 0.712976 -0.699636 + 0.62942 6.20606 -0.523584 0.0430745 0.720728 -0.691878 + 0.768288 6.20634 -0.515467 0.0787484 0.717985 -0.69159 + 0.207617 6.2185 -0.54092 0.0496514 0.694268 -0.718002 + 0.205578 6.29899 -0.452748 0.0606583 0.765246 -0.640874 + 0.338572 6.28741 -0.454885 0.0592936 0.768014 -0.637682 + 0.476994 6.28015 -0.4505 0.055858 0.771129 -0.634224 + 0.613773 6.2732 -0.447271 0.0478942 0.776335 -0.628499 + 0.069681 6.23174 -0.539659 0.0300049 0.689998 -0.723189 + 0.067642 6.31215 -0.451527 0.0295687 0.773894 -0.632624 + 0.199352 6.38522 -0.341687 0.0541961 0.80811 -0.586533 + 0.332346 6.37373 -0.343783 0.0659207 0.806264 -0.587871 + 0.4634 6.355 -0.353554 0.0675952 0.809977 -0.582553 + -0.069687 6.1512 -0.605952 -0.0184895 0.648016 -0.761403 + -0.069687 6.23174 -0.539659 -0.0275494 0.691679 -0.721679 + -0.067641 6.31215 -0.451527 -0.0340309 0.776502 -0.629195 + 0.067642 6.39267 -0.339994 0.0191721 0.815805 -0.578009 + -0.207623 6.21858 -0.540869 -0.0528744 0.696325 -0.715776 + -0.205577 6.29899 -0.452748 -0.0572296 0.767845 -0.638074 + -0.067641 6.39267 -0.339994 -0.0230563 0.813379 -0.581277 + 0.072926 6.49919 -0.186687 0.0189729 0.826812 -0.562158 + -0.354189 6.14059 -0.599582 -0.0381478 0.660755 -0.749631 + -0.347788 6.21403 -0.536376 -0.04948 0.702982 -0.709484 + -0.33857 6.28741 -0.454885 -0.0583796 0.767573 -0.638297 + -0.199351 6.38522 -0.341687 -0.0496631 0.80558 -0.590403 + -0.498107 6.14672 -0.588201 -0.042035 0.675381 -0.73627 + -0.48621 6.20677 -0.532 -0.0520818 0.716616 -0.695521 + -0.476992 6.28015 -0.450509 -0.056634 0.770558 -0.634849 + -0.332344 6.37373 -0.343783 -0.0651617 0.806701 -0.587356 + -0.639652 6.01141 -0.702441 -0.046504 0.670334 -0.740601 + -0.641313 6.14602 -0.579793 -0.051567 0.680083 -0.731319 + -0.629416 6.20606 -0.523584 -0.0455203 0.719419 -0.693083 + -0.613771 6.2732 -0.447271 -0.0449501 0.774256 -0.631274 + -0.463398 6.35501 -0.353563 -0.0688198 0.810648 -0.581475 + -0.78446 6.01127 -0.691392 -0.0951146 0.67047 -0.735815 + -0.78612 6.14596 -0.568686 -0.0869705 0.671351 -0.736019 + -0.768285 6.20634 -0.515467 -0.0760132 0.715995 -0.693954 + -0.75264 6.27348 -0.439153 -0.0660012 0.77985 -0.622477 + -0.600177 6.34797 -0.350374 -0.0520031 0.820044 -0.569933 + -0.91205 5.80252 -0.858229 -0.173436 0.667096 -0.724502 + -0.927716 6.00332 -0.672828 -0.177348 0.657377 -0.732395 + -0.927557 6.13356 -0.558203 -0.175299 0.666431 -0.724665 + -0.909722 6.19394 -0.504984 -0.12974 0.699057 -0.703197 + -0.910415 5.64417 -1.00696 -0.192555 0.687661 -0.700032 + -1.05597 5.78718 -0.829051 -0.264599 0.648568 -0.713686 + -1.06648 5.96789 -0.661263 -0.265122 0.642501 -0.718959 + -1.06632 6.09813 -0.546639 -0.230281 0.603317 -0.763531 + -1.06324 5.49902 -1.09254 -0.318562 0.59338 -0.739201 + -1.05434 5.62891 -0.977733 -0.283958 0.650584 -0.704349 + -1.19187 5.58415 -0.948404 -0.379817 0.614733 -0.691262 + -1.1931 5.74158 -0.811476 -0.353448 0.619006 -0.70136 + -1.2036 5.92221 -0.643737 -0.327815 0.615515 -0.716714 + -1.019 5.38393 -1.18621 -0.31372 0.421492 -0.850837 + -1.17762 5.33694 -1.14963 -0.351813 0.42896 -0.831998 + -1.20078 5.45425 -1.0632 -0.406586 0.560646 -0.721363 + -1.06543 5.24125 -1.21968 -0.290697 0.328609 -0.898617 + -1.33486 5.16618 -1.16585 -0.353213 0.408556 -0.841619 + -1.30942 5.2666 -1.11779 -0.431476 0.477366 -0.765474 + -1.33258 5.38391 -1.03137 -0.454259 0.526779 -0.718438 + -1.31379 5.08385 -1.20386 -0.276849 0.362378 -0.889964 + -1.55248 4.99254 -1.1583 -0.431303 0.422065 -0.797395 + -1.53142 5.08193 -1.11033 -0.467322 0.488004 -0.737199 + -1.50598 5.18236 -1.06228 -0.480373 0.496365 -0.723092 + -1.28999 5.02564 -1.23883 -0.217344 0.322205 -0.921382 + -1.52868 4.93441 -1.19322 -0.356476 0.416323 -0.836421 + -1.76193 4.87261 -1.09058 -0.51979 0.552509 -0.651577 + -1.74087 4.96192 -1.04267 -0.544982 0.510329 -0.665251 + -1.07212 4.99461 -1.28169 -0.156104 0.0606465 -0.985877 + -1.29489 4.96095 -1.25018 -0.151152 0.128605 -0.980109 + -1.49436 4.89367 -1.22724 -0.235819 0.258652 -0.936743 + -1.73302 4.82137 -1.17302 -0.448347 0.531427 -0.718728 + -1.08456 4.94607 -1.27621 -0.0841637 -0.491281 -0.866925 + -1.27583 4.91587 -1.2563 -0.0111876 -0.419872 -0.907514 + -1.4753 4.84858 -1.23336 0.102244 -0.476335 -0.873299 + -1.6987 4.78061 -1.20703 -0.266966 0.219296 -0.938423 + -1.07847 4.90973 -1.22087 -0.035921 -0.896767 -0.441043 + -1.26974 4.87952 -1.20094 0.160129 -0.92125 -0.354482 + -1.46561 4.82287 -1.16843 0.321027 -0.910417 -0.260928 + -1.66633 4.75043 -1.21235 0.169585 -0.465591 -0.8686 + -1.08079 4.87115 -1.11625 -0.115012 -0.866484 -0.485775 + -1.24336 4.86956 -1.07869 0.0752373 -0.903988 -0.420886 + -1.43923 4.81291 -1.04616 0.225906 -0.878774 -0.420384 + -1.68114 4.71987 -1.00823 0.432985 -0.831728 -0.347496 + -1.65664 4.72463 -1.14746 0.500267 -0.849623 -0.166955 + -0.928875 4.63847 -0.852437 -0.252961 -0.76193 -0.596215 + -1.02178 4.6337 -0.842966 -0.0532569 -0.737417 -0.673335 + -1.18436 4.63201 -0.805442 -0.0176271 -0.674623 -0.737952 + -1.34289 4.64202 -0.837188 0.109292 -0.694404 -0.711237 + -0.867609 4.24338 -0.363923 -0.527234 -0.622152 -0.578749 + -0.960515 4.23869 -0.354402 0.480363 -0.588512 -0.650312 + -1.03739 4.11413 -0.419655 0.520031 -0.441357 -0.731281 + -1.19592 4.12414 -0.451392 -0.471933 -0.63234 -0.61435 + -0.8402 3.9418 -0.182369 -0.774752 0.224842 -0.590936 + -0.880818 4.00672 -0.136817 -0.0899295 -0.220847 -0.971153 + -0.95769 3.88224 -0.202011 0.572473 0.197903 -0.795682 + -0.966468 3.81265 -0.233661 0.193319 -0.0127319 -0.981053 + -1.12487 3.77236 -0.232082 0.474255 0.543726 -0.692419 + -1.05757 3.82089 -0.220541 -0.354538 -0.0250528 -0.934706 + -1.2339 4.17485 -0.409218 -0.329913 -0.650624 -0.683992 + -1.5848 4.54907 -0.799193 0.281534 -0.620336 -0.732067 + -1.83478 4.60951 -0.994476 0.677948 -0.639851 -0.361908 + -1.34224 3.96063 -0.422972 0.718154 0.155635 -0.678257 + -1.09555 3.87159 -0.178358 -0.221569 -0.200593 -0.95429 + -1.31292 4.05995 -0.369198 0.585482 -0.196147 -0.786598 + -1.66383 4.43409 -0.759232 0.500828 -0.395888 -0.769704 + -1.74769 4.29554 -0.775666 0.660362 -0.0850492 -0.746115 + -1.98545 4.35792 -1.0053 0.807632 -0.302662 -0.50609 + -1.91865 4.47089 -1.01097 0.784101 -0.45186 -0.42545 + -1.92485 4.48456 -1.11024 0.792089 -0.559264 -0.24458 + -1.81028 4.61427 -1.13372 0.638432 -0.748334 -0.180001 + -2.01006 4.25745 -1.02949 0.748011 -0.0552651 -0.661381 + -2.03362 4.27968 -1.06779 0.670132 -0.217338 -0.709709 + -1.99166 4.3715 -1.10463 0.608921 -0.535458 -0.585236 + -2.0653 4.30684 -1.08844 -0.160825 -0.214082 -0.963485 + -2.02333 4.39866 -1.12527 -0.225768 -0.199495 -0.953536 + -1.94069 4.50266 -1.1614 0.113139 -0.296302 -0.948369 + -1.82612 4.63246 -1.18482 0.181481 -0.432468 -0.883196 + -2.1201 4.34508 -1.06087 -0.677014 0.0410826 -0.734823 + -2.04885 4.45612 -1.10179 -0.623093 0.177164 -0.761819 + -1.96621 4.56012 -1.13792 -0.54574 0.227644 -0.80644 + -1.8585 4.66265 -1.17951 -0.402514 0.16736 -0.899985 + -2.15183 4.38913 -1.01236 -0.830673 0.204592 -0.517807 + -2.08058 4.50017 -1.05329 -0.725911 0.294137 -0.621721 + -1.99519 4.61324 -1.08894 -0.664518 0.37643 -0.645536 + -1.88748 4.71569 -1.13058 -0.591656 0.471745 -0.653759 + -2.17726 4.38166 -0.952832 -0.959257 0.218638 -0.178948 + -2.11876 4.55803 -0.967101 -0.858982 0.350757 -0.372987 + -2.03337 4.6711 -1.00275 -0.724799 0.464615 -0.508723 + -1.91638 4.76694 -1.04815 -0.620175 0.533531 -0.57509 + -2.15185 4.49786 -0.87628 -0.93645 0.308829 -0.166392 + -2.09336 4.67413 -0.890592 -0.892186 0.442235 0.091826 + -1.9959 4.7827 -0.94005 -0.723627 0.539447 -0.430537 + -1.87892 4.87863 -0.985402 -0.620665 0.541783 -0.566786 + -1.63409 5.12079 -1.00802 -0.551177 0.5135 -0.657664 + -2.24854 4.17171 -0.91737 -0.934021 0.246431 -0.258603 + -2.19335 4.39952 -0.832166 -0.968594 0.247948 -0.018657 + -2.08545 4.75607 -0.780523 -0.853189 0.384398 -0.352571 + -1.98499 4.84801 -0.845362 -0.766497 0.502366 -0.40014 + -1.88754 4.95658 -0.89482 -0.705758 0.534175 -0.465363 + -2.24864 4.13654 -0.878263 -0.932806 0.0776146 0.351922 + -2.19346 4.36427 -0.7931 -0.967214 0.137153 0.213744 + -2.12695 4.65774 -0.736409 -0.962108 0.243155 -0.123387 + -2.03206 4.93082 -0.7006 -0.788516 0.419337 -0.449888 + -2.28372 3.89467 -0.903336 -0.582355 -0.169603 0.795045 + -2.22706 4.10422 -0.851082 -0.694429 -0.0964978 0.713061 + -2.19937 4.274 -0.786762 -0.831122 -0.0775592 0.550654 + -2.1484 4.52392 -0.679827 -0.971796 0.0667655 0.226176 + -2.19517 4.08157 -0.830255 -0.56557 -0.223907 0.793723 + -2.16748 4.25127 -0.765985 -0.722121 -0.198765 0.662596 + -2.15431 4.43366 -0.67349 -0.871363 -0.0148259 0.490415 + -2.11382 4.41735 -0.623251 -0.951791 -0.149522 0.267838 + -2.13064 4.7121 -0.564763 -0.976898 0.085832 -0.19571 + -2.13402 4.10459 -0.790129 -0.498001 -0.337411 0.798842 + -2.12698 4.23505 -0.715696 -0.743746 -0.32304 0.585223 + -2.08281 4.28208 -0.563746 -0.936643 -0.345893 0.0553052 + -2.13134 4.47389 -0.427379 -0.965133 -0.160885 -0.206481 + -2.16234 4.60916 -0.486875 -0.982702 -0.0955547 -0.158638 + -2.14463 4.35754 -0.352645 -0.933539 -0.21049 -0.29017 + -2.25756 4.75509 -0.239223 -0.922096 -0.0294762 -0.385837 + -2.2028 4.84339 -0.336761 -0.92642 0.0518802 -0.372901 + -2.17109 4.94632 -0.414649 -0.899402 0.188308 -0.394481 + -2.13786 4.23703 -0.268518 -0.871772 -0.208045 -0.443545 + -2.27085 4.63874 -0.164498 -0.892174 -0.0767991 -0.445116 + -2.30296 4.96977 -0.093867 -0.901205 0.134963 -0.411844 + -2.2482 5.05807 -0.191405 -0.883957 0.209873 -0.417819 + -2.17387 5.1368 -0.282967 -0.840107 0.298649 -0.452801 + -2.31137 4.52042 -0.093169 -0.845276 -0.0774828 -0.528682 + -2.40095 4.75493 0.063448 -0.890638 0.0510447 -0.451839 + -2.36043 4.87316 -0.00793 -0.897243 0.0883171 -0.432614 + -2.32204 5.14603 0.030249 -0.881622 0.2533 -0.398223 + -2.24948 5.2288 -0.055713 -0.856936 0.306751 -0.414204 + -2.44768 4.64596 0.139603 -0.897404 0.0206002 -0.440729 + -2.43896 4.95463 0.199769 -0.906639 0.163528 -0.388926 + -2.37951 5.0495 0.116236 -0.897482 0.199988 -0.393103 + -2.31038 5.30304 0.127906 -0.862403 0.329154 -0.384602 + -2.43881 5.12605 0.296857 -0.893345 0.245788 -0.376195 + -2.37936 5.22093 0.213316 -0.885344 0.291531 -0.362181 + -2.2768 5.44834 0.191635 -0.848176 0.401769 -0.345224 + -2.20301 5.52251 0.10737 -0.83241 0.421618 -0.359628 + -2.23783 5.38581 0.041944 -0.844093 0.360321 -0.397084 + -2.50059 5.03891 0.382189 -0.895872 0.22087 -0.385524 + -2.41505 5.28978 0.362463 -0.874239 0.343795 -0.342798 + -2.34577 5.36623 0.277045 -0.861993 0.378289 -0.33744 + -2.23743 5.58643 0.280245 -0.83144 0.467443 -0.300339 + -2.47683 5.20264 0.447795 -0.89023 0.318772 -0.325383 + -2.37552 5.44264 0.454495 -0.857053 0.435546 -0.275244 + -2.30624 5.5191 0.369077 -0.841963 0.452132 -0.294407 + -2.5383 5.125 0.537667 -0.898986 0.300788 -0.318358 + -2.49893 5.29793 0.637158 -0.882619 0.401049 -0.245242 + -2.43747 5.37556 0.547294 -0.871118 0.417913 -0.257881 + -2.3209 5.60374 0.579269 -0.829943 0.516537 -0.210675 + -2.25917 5.66193 0.483885 -0.819998 0.52753 -0.222068 + -2.55605 5.22749 0.730347 -0.895686 0.383347 -0.22537 + -2.4383 5.48096 0.772532 -0.857551 0.481392 -0.181298 + -2.38285 5.53666 0.67206 -0.84802 0.490176 -0.201469 + -2.3171 5.68751 0.806972 -0.804549 0.570822 -0.163898 + -2.24643 5.76781 0.768289 -0.786241 0.59681 -0.160135 + -2.49541 5.41053 0.865721 -0.861749 0.475012 -0.178189 + -2.39597 5.61798 1.0342 -0.827314 0.551849 -0.104947 + -2.37255 5.63181 0.907443 -0.837499 0.532455 -0.122826 + -2.23624 5.85057 1.06814 -0.775175 0.626179 -0.0836794 + -2.16557 5.93087 1.02946 -0.734695 0.674446 -0.073111 + -2.55198 5.3488 0.961835 -0.877918 0.450501 -0.1622 + -2.45255 5.55625 1.13032 -0.830441 0.549581 -0.0912589 + -2.32895 5.74736 1.34111 -0.797503 0.603314 0.00140142 + -2.25966 5.83682 1.19496 -0.775072 0.630476 -0.0419944 + -2.38425 5.67106 1.43747 -0.790769 0.612015 -0.0110311 + -2.19092 5.90505 1.48339 -0.732698 0.676184 0.0769977 + -2.12164 5.99442 1.33719 -0.699589 0.714367 0.0159671 + -2.02499 6.07968 1.26831 -0.65105 0.759028 -0.00317655 + -2.22627 5.84969 1.68367 -0.717874 0.694061 0.0541761 + -2.18728 5.894 1.60172 -0.71018 0.701462 0.0599579 + -1.92557 6.13361 1.57631 -0.622916 0.775782 0.10069 + -1.82892 6.21878 1.50738 -0.580117 0.808073 0.10238 + -2.30466 5.76602 1.73179 -0.76823 0.633415 0.0927775 + -1.98527 6.0613 1.81496 -0.628439 0.761048 0.160846 + -1.92192 6.12256 1.69465 -0.601566 0.793809 0.0893619 + -1.58307 6.34482 1.72328 -0.495569 0.857439 0.1386 + -2.06366 5.97762 1.86309 -0.680883 0.711328 0.174388 + -1.72021 6.22202 1.95958 -0.531449 0.825284 0.190967 + -1.65687 6.28328 1.83927 -0.509354 0.848531 0.143367 + -2.28482 5.73189 1.88371 -0.745343 0.646386 0.163246 + -2.03019 5.98832 1.94595 -0.647969 0.733979 0.203495 + -1.76867 6.15769 2.07459 -0.559481 0.786474 0.26161 + -1.42144 6.34167 2.14354 -0.438062 0.866121 0.2407 + -2.06972 5.91293 2.05774 -0.665501 0.707765 0.237017 + -1.8082 6.0823 2.18638 -0.569094 0.765983 0.299002 + -1.50251 6.21269 2.36954 -0.489143 0.801031 0.345092 + -1.4699 6.27735 2.25855 -0.475747 0.826127 0.301957 + -2.104 5.84604 2.1598 -0.670562 0.698682 0.24938 + -1.87858 6.009 2.24893 -0.590643 0.761647 0.266524 + -2.11294 5.7944 2.27003 -0.666562 0.689565 0.283187 + -1.88752 5.95737 2.35916 -0.585268 0.739929 0.331613 + -1.57288 6.13948 2.43215 -0.520451 0.781261 0.34462 + -2.1445 5.69545 2.42503 -0.660573 0.689119 0.297924 + -1.84999 5.92615 2.48143 -0.564882 0.743964 0.356968 + -1.53535 6.10826 2.55442 -0.489147 0.785305 0.379514 + -1.23443 6.24429 2.6212 -0.395735 0.819675 0.414158 + -1.25699 6.29017 2.51054 -0.416464 0.818024 0.396729 + -2.18262 5.59851 2.57112 -0.670684 0.672163 0.313656 + -1.88811 5.8293 2.62758 -0.573635 0.734894 0.361765 + -1.53756 6.03442 2.69831 -0.487196 0.774542 0.403391 + -1.23664 6.17045 2.76509 -0.391 0.814482 0.428648 + -2.17244 5.50219 2.78196 -0.661462 0.658477 0.358993 + -1.8998 5.71355 2.82708 -0.565085 0.722115 0.399034 + -1.54926 5.91866 2.89781 -0.48609 0.763833 0.424589 + -1.25477 6.06039 2.95013 -0.39671 0.800892 0.448546 + -0.979822 6.24763 2.81382 -0.315632 0.83308 0.454263 + -2.158 5.36113 3.04749 -0.647779 0.655795 0.387705 + -1.88536 5.57239 3.09256 -0.56264 0.714356 0.416092 + -1.57754 5.7544 3.15491 -0.487216 0.755791 0.437492 + -1.28304 5.89613 3.20723 -0.407056 0.786678 0.464158 + -2.38671 5.03469 3.1669 -0.701412 0.601414 0.382522 + -2.14678 5.24937 3.24905 -0.643943 0.63825 0.42187 + -1.88054 5.45252 3.30259 -0.56554 0.700051 0.435996 + -1.57272 5.63453 3.36494 -0.484241 0.75215 0.446968 + -1.28068 5.78732 3.39111 -0.396231 0.786872 0.473111 + -2.10228 5.16854 3.42585 -0.629775 0.641628 0.437833 + -1.83605 5.37169 3.47939 -0.553281 0.684531 0.474655 + -1.55979 5.56028 3.50194 -0.48047 0.73433 0.479487 + -1.26774 5.71298 3.52805 -0.377546 0.780172 0.498788 + -2.32378 4.85822 3.53916 -0.677951 0.600146 0.424509 + -2.06904 5.08721 3.59373 -0.612011 0.641167 0.462977 + -1.7827 5.29043 3.64674 -0.538486 0.68082 0.496504 + -1.50643 5.47902 3.66929 -0.45509 0.713418 0.532849 + -1.24504 5.61941 3.67913 -0.370039 0.752409 0.544933 + -2.30518 4.77869 3.6845 -0.666593 0.588671 0.457296 + -2.04024 5.00608 3.73765 -0.592851 0.634558 0.495846 + -1.7539 5.20939 3.79071 -0.517473 0.668737 0.533866 + -1.43854 5.35952 3.86526 -0.430359 0.696739 0.573887 + -1.17714 5.49992 3.8751 -0.369731 0.731528 0.572857 + -2.48365 4.46478 3.7772 -0.721899 0.478827 0.499586 + -2.26262 4.69396 3.83745 -0.647759 0.559229 0.517369 + -1.99768 4.92135 3.8906 -0.570842 0.618521 0.539973 + -1.71986 5.09801 3.95142 -0.496235 0.654934 0.569923 + -1.4045 5.24815 4.02597 -0.430143 0.683824 0.589374 + -2.41989 4.38871 3.93257 -0.703169 0.451393 0.549361 + -2.19885 4.61797 3.99287 -0.627162 0.539792 0.561509 + -1.94895 4.80519 4.0614 -0.555678 0.590378 0.585386 + -1.67113 4.98185 4.12221 -0.477449 0.632657 0.609744 + -1.36275 5.14531 4.16988 -0.418264 0.65903 0.625087 + -2.62707 4.1322 3.83826 -0.788709 0.331007 0.518047 + -2.57458 4.05159 3.96267 -0.773564 0.310175 0.552621 + -2.3674 4.3081 4.05697 -0.689013 0.416436 0.593163 + -2.14437 4.5084 4.14646 -0.613684 0.496887 0.613593 + -1.89447 4.69571 4.21503 -0.532072 0.557875 0.636926 + -2.77752 3.86569 3.72906 -0.872701 0.18169 0.453191 + -2.73728 3.79021 3.8274 -0.861302 0.154815 0.483932 + -2.53309 3.97831 4.05781 -0.761107 0.296734 0.576771 + -2.29879 4.2055 4.1993 -0.661744 0.378805 0.646994 + -2.07576 4.40579 4.28877 -0.598627 0.463738 0.653141 + -2.82858 3.53202 3.684 -0.914763 0.00252382 0.403983 + -2.78421 3.44796 3.7778 -0.893841 -0.0361337 0.446926 + -2.69578 3.71692 3.92254 -0.84096 0.116687 0.528366 + -2.64521 3.64027 4.0067 -0.825531 0.0542281 0.561746 + -2.53323 3.86313 4.1181 -0.786901 0.226733 0.573915 + -2.81782 3.17507 3.64045 -0.912748 -0.166902 0.372873 + -2.76579 3.06917 3.70128 -0.872649 -0.217023 0.437475 + -2.73363 3.37131 3.86196 -0.839471 -0.0999628 0.534131 + -2.78998 2.87553 3.49106 -0.903807 -0.252249 0.345691 + -2.73795 2.76963 3.5519 -0.907166 -0.258982 0.331629 + -2.68565 2.64337 3.59557 -0.885289 -0.272216 0.377043 + -2.71231 2.98091 3.75194 -0.841354 -0.23272 0.487816 + -2.68015 3.28305 3.91262 -0.813042 -0.150788 0.56234 + -2.7715 2.56331 3.31005 -0.890009 -0.276129 0.362818 + -2.71027 2.44319 3.36151 -0.895795 -0.28226 0.343338 + -2.65797 2.31693 3.40519 -0.890658 -0.303943 0.338153 + -2.59067 2.20433 3.46002 -0.871856 -0.328038 0.363673 + -2.62818 2.5354 3.64319 -0.868149 -0.287172 0.404783 + -2.69228 2.10032 3.12978 -0.866146 -0.332279 0.373338 + -2.61717 1.99095 3.18921 -0.858295 -0.354371 0.371147 + -2.54987 1.87835 3.24403 -0.848873 -0.373395 0.374153 + -2.58932 1.72227 2.99017 -0.846744 -0.385045 0.367103 + -2.5124 1.62377 3.06318 -0.838015 -0.396239 0.375133 + -2.46886 1.78873 3.32206 -0.832631 -0.399723 0.383337 + -2.53005 2.083 3.50337 -0.864435 -0.352253 0.358707 + -2.56756 2.41407 3.68654 -0.840207 -0.302682 0.449929 + -2.48791 1.4137 2.88484 -0.840462 -0.45627 0.292304 + -2.40648 1.33423 2.98427 -0.815559 -0.466775 0.34203 + -2.43139 1.53425 3.14124 -0.8157 -0.4135 0.404538 + -2.34569 1.46559 3.23756 -0.80594 -0.439092 0.397063 + -2.39338 1.69648 3.39225 -0.830078 -0.413424 0.374234 + -2.31754 1.1515 2.90997 -0.771437 -0.600781 0.209635 + -2.2371 1.09047 2.99829 -0.73199 -0.598334 0.325862 + -2.32078 1.26567 3.08063 -0.761775 -0.497766 0.414642 + -2.093 0.932672 2.9956 -0.727344 -0.645048 0.234272 + -2.01009 0.871012 3.0782 -0.706425 -0.601006 0.373839 + -2.1368 1.04701 3.10196 -0.692456 -0.55539 0.460485 + -2.22049 1.22221 3.1843 -0.720047 -0.535747 0.441031 + -1.86134 0.698281 3.07398 -0.655973 -0.645351 0.391435 + -1.92477 0.837049 3.16022 -0.611667 -0.544957 0.573485 + -2.05149 1.01305 3.18398 -0.659113 -0.566861 0.494205 + -2.12533 1.1769 3.28579 -0.671819 -0.578709 0.462337 + -2.26637 1.40325 3.33934 -0.772778 -0.487055 0.406929 + -1.7962 0.650262 3.09175 -0.63669 -0.606658 0.476016 + -1.85963 0.789029 3.178 -0.612233 -0.581127 0.536155 + -1.94244 0.986556 3.28547 -0.629705 -0.577808 0.519239 + -2.01628 1.1504 3.38728 -0.646243 -0.612695 0.454944 + -2.17121 1.35793 3.44083 -0.723357 -0.534965 0.43654 + -1.73412 0.564605 3.06711 -0.515192 -0.640653 0.569333 + -1.73363 0.618536 3.1267 -0.458439 -0.6538 0.601979 + -1.77198 0.749834 3.24148 -0.46805 -0.60495 0.644177 + -1.85479 0.947356 3.34897 -0.666573 -0.594576 0.449621 + -1.66348 0.541346 3.0962 -0.560467 -0.593837 0.577265 + -1.65978 0.59553 3.13895 -0.551915 -0.567521 0.610991 + -1.69813 0.726735 3.25369 -0.538474 -0.657094 0.527517 + -1.66356 0.494942 3.03757 -0.522959 -0.698496 0.488485 + -1.5765 0.47587 3.1152 -0.582342 -0.680957 0.444043 + -1.57356 0.529691 3.20318 -0.690582 -0.549312 0.470481 + -1.56985 0.583876 3.24593 -0.796085 -0.439406 0.416138 + -1.57678 0.433581 3.05125 -0.527025 -0.741342 0.415519 + -1.48361 0.423983 3.15228 -0.54046 -0.751175 0.378997 + -1.46315 0.457696 3.25048 -0.580016 -0.712209 0.395399 + -1.46021 0.511524 3.33845 -0.622179 -0.674229 0.39788 + -1.49536 0.600462 3.45061 -0.665155 -0.655132 0.358289 + -1.58563 0.400431 2.97007 -0.453371 -0.809549 0.372942 + -1.49245 0.390835 3.07109 -0.424568 -0.845336 0.324267 + -1.39311 0.423956 3.28332 -0.466359 -0.811614 0.35184 + -1.37265 0.457671 3.38152 -0.587014 -0.716386 0.377102 + -1.37396 0.50998 3.47732 -0.608254 -0.697137 0.379509 + -1.58803 0.369629 2.90282 -0.382283 -0.861703 0.333658 + -1.50742 0.365528 2.97092 -0.357958 -0.88623 0.294047 + -1.41527 0.367643 3.09466 -0.407665 -0.864922 0.29278 + -1.40031 0.392948 3.19483 -0.34258 -0.889776 0.301559 + -1.59505 0.345333 2.8163 -0.297495 -0.915784 0.269881 + -1.51444 0.341323 2.88444 -0.288884 -0.92649 0.241167 + -1.42643 0.338359 2.99638 -0.361807 -0.897124 0.253505 + -1.31135 0.370899 3.26322 -0.455682 -0.823591 0.337717 + -1.31732 0.41586 3.35094 -0.41413 -0.839218 0.352432 + -1.5995 0.32692 2.74539 -0.241215 -0.940917 0.237678 + -1.52447 0.322081 2.78258 -0.254475 -0.941457 0.221137 + -1.43646 0.319034 2.89445 -0.400886 -0.886323 0.231778 + -1.3225 0.341615 3.16494 -0.433311 -0.844193 0.315563 + -1.60492 0.308399 2.65827 -0.240552 -0.949548 0.201229 + -1.5299 0.303479 2.69539 -0.258209 -0.937699 0.232481 + -1.45863 0.292208 2.75412 -0.398208 -0.886978 0.233882 + -1.43366 0.302875 2.84704 -0.498565 -0.835232 0.231994 + -1.3337 0.312427 3.07849 -0.500614 -0.809059 0.30791 + -1.6041 0.296972 2.58606 -0.26783 -0.951418 0.15189 + -1.53775 0.278788 2.59336 -0.276041 -0.943865 0.181437 + -1.46648 0.267522 2.65207 -0.344302 -0.91691 0.201824 + -1.38725 0.279569 2.84861 -0.413782 -0.884556 0.215276 + -1.36228 0.290151 2.94148 -0.369347 -0.907823 0.198597 + -1.61688 0.289009 2.51586 -0.28857 -0.952577 0.096562 + -1.55053 0.27074 2.5231 -0.251109 -0.961151 0.114601 + -1.6108 0.282559 2.44383 -0.307914 -0.949251 0.064123 + -1.53395 0.261698 2.47116 -0.32043 -0.939161 0.123696 + -1.459 0.23882 2.50859 -0.318432 -0.933297 0.166009 + -1.44907 0.249449 2.58998 -0.316583 -0.935513 0.156813 + -1.38554 0.257779 2.75535 -0.382951 -0.903815 0.190962 + -1.35813 0.192676 2.42711 -0.366869 -0.91929 0.142524 + -1.36248 0.214593 2.51975 -0.360373 -0.915035 0.181227 + -1.35254 0.225228 2.60113 -0.355305 -0.92384 0.142402 + -1.36812 0.239711 2.69324 -0.353859 -0.926213 0.13005 + -1.35254 0.178855 2.33105 -0.375137 -0.915107 0.147824 + -1.22502 0.1292 2.42025 -0.503715 -0.855159 0.122368 + -1.24753 0.147325 2.49866 -0.491099 -0.863072 0.118023 + -1.25187 0.169242 2.5913 -0.529094 -0.8298 0.177456 + -1.26171 0.195051 2.6764 -0.478505 -0.865507 0.148093 + -1.22639 0.11164 2.32647 -0.382186 -0.920909 0.0765589 + -1.09364 0.061061 2.56068 -0.335105 -0.942169 -0.00473835 + -1.11615 0.079097 2.63903 -0.456969 -0.87659 0.150894 + -1.13842 0.10992 2.71005 -0.500592 -0.841312 0.203964 + -1.14825 0.135812 2.7952 -0.542457 -0.7889 0.28875 + -0.896145 0.022032 2.55048 -0.214804 -0.963145 -0.161897 + -0.952262 0.022123 2.61172 -0.203659 -0.978692 -0.0261792 + -0.983929 0.03359 2.68686 -0.249332 -0.949588 0.190041 + -1.00619 0.064412 2.75787 -0.283769 -0.918875 0.274125 + -0.803247 0.008962 2.48331 -0.158851 -0.978311 -0.132942 + -0.814194 0.000593 2.56841 -0.12055 -0.992694 -0.00509737 + -0.845861 0.012058 2.64355 -0.107171 -0.984322 0.14009 + -0.866441 0.031135 2.72791 -0.112306 -0.960205 0.255722 + -0.657184 0.01911 2.37374 -0.0147508 -0.976254 -0.216126 + -0.675869 -0.000111 2.45303 -0.0695588 -0.977366 -0.199795 + -0.686816 -0.008481 2.53812 -0.0908094 -0.994179 -0.0579866 + -0.703071 -0.008483 2.62033 -0.107308 -0.991085 0.078968 + -0.499512 0.022608 2.37428 0.0102038 -0.961159 -0.275806 + -0.518198 0.003392 2.45356 -0.0204655 -0.96135 -0.274569 + -0.539283 -0.019714 2.52918 -0.0416273 -0.990242 -0.132996 + -0.555538 -0.019623 2.61142 -0.0525226 -0.996237 0.0689479 + -0.331538 0.051209 2.27994 -0.100796 -0.937161 -0.334021 + -0.352717 0.023041 2.35593 -0.103715 -0.934538 -0.340415 + -0.367796 -0.000722 2.43029 -0.0973485 -0.946152 -0.308738 + -0.388881 -0.023827 2.5059 -0.056209 -0.982144 -0.179537 + -0.198736 0.042713 2.24145 -0.078837 -0.938607 -0.33586 + -0.21426 0.01562 2.31178 -0.0900101 -0.932855 -0.348827 + -0.229339 -0.00815 2.38615 -0.0575547 -0.96312 -0.262843 + -0.23537 -0.024098 2.46137 -0.00773696 -0.989474 -0.144503 + -0.091123 0.070783 2.16104 0.184411 -0.934218 -0.305335 + -0.102384 0.045062 2.23058 0.130922 -0.939753 -0.31579 + -0.117908 0.017966 2.30092 0.16783 -0.944094 -0.283758 + -0.127574 -0.000582 2.37404 0.191788 -0.961106 -0.198729 + -0.037665 0.080134 2.17804 0.337094 -0.864903 -0.371902 + -0.048927 0.054415 2.24759 0.230597 -0.932495 -0.277991 + -0.059922 0.03462 2.32127 0.240626 -0.944363 -0.224226 + -0.069588 0.016073 2.3944 0.216533 -0.959851 -0.178325 + -0.003058 0.11597 2.14477 0.163545 -0.956035 -0.243415 + -0.010834 0.082213 2.20244 0.3746 -0.851261 -0.367462 + -0.014994 0.056002 2.26444 0.256505 -0.919409 -0.298146 + -0.025989 0.036207 2.33812 -0.15586 -0.944153 -0.290313 + 0.003058 0.11597 2.14477 -0.158852 -0.935086 -0.31683 + -0.003058 0.082127 2.21059 0.187122 -0.896754 -0.401021 + -0.007218 0.056001 2.27264 0.106277 -0.93326 -0.343121 + 0.029889 0.113896 2.12036 -0.433885 -0.852333 -0.292014 + 0.010834 0.082213 2.20244 -0.374604 -0.851261 -0.367459 + 0.003058 0.082127 2.21059 -0.18711 -0.89676 -0.401013 + 0.007227 0.056001 2.27264 -0.106401 -0.933287 -0.343009 + -0.007218 0.024066 2.34035 -0.243394 -0.909678 -0.33652 + 0.079232 0.091678 2.08985 -0.289449 -0.927352 -0.237145 + 0.037665 0.080134 2.17804 -0.359894 -0.871334 -0.333545 + 0.048925 0.054415 2.24759 -0.24533 -0.92584 -0.287459 + 0.015003 0.055997 2.26445 -0.256553 -0.919418 -0.298081 + 0.072394 0.110565 2.02133 -0.329107 -0.930207 -0.162492 + 0.161487 0.095491 2.01744 -0.0685538 -0.985789 -0.153364 + 0.171288 0.084975 2.09565 -0.0115078 -0.98139 -0.191679 + 0.091123 0.070783 2.16104 -0.143059 -0.94941 -0.279562 + 0.102382 0.045057 2.23059 -0.122777 -0.936224 -0.329257 + 0.154552 0.107445 1.94174 -0.120366 -0.984145 -0.130269 + 0.291431 0.091702 2.046 -0.0565842 -0.99577 -0.0723881 + 0.301232 0.081181 2.12422 -0.0199479 -0.992998 -0.116439 + 0.315981 0.072491 2.20528 0.0470769 -0.976937 -0.208274 + 0.183179 0.063995 2.16679 0.0456908 -0.957181 -0.285862 + 0.285543 0.092543 1.96235 -0.101498 -0.992377 -0.0699049 + 0.41841 0.078475 1.97131 -0.11929 -0.989789 -0.0780191 + 0.424298 0.077633 2.05497 -0.114148 -0.99342 -0.00929113 + 0.4416 0.074308 2.13813 -0.0853809 -0.994554 -0.0597712 + 0.42024 0.092654 1.88995 -0.115153 -0.979433 -0.165681 + 0.54972 0.058582 1.96297 -0.101911 -0.991811 -0.0769779 + 0.566166 0.059859 2.04836 -0.0992237 -0.995054 0.00470803 + 0.583467 0.056539 2.13151 -0.0993196 -0.994846 -0.0204205 + 0.688824 0.049855 1.99168 0.0382392 -0.992 -0.120303 + 0.70527 0.051219 2.07712 -0.0494202 -0.998704 -0.0121398 + 0.724318 0.045762 2.15937 -0.0411527 -0.99794 -0.0492164 + 0.615817 0.051409 2.21279 -0.0742989 -0.99312 -0.0905151 + 0.456349 0.065616 2.21918 -0.0626254 -0.989205 -0.132482 + 0.848105 0.045259 2.14045 0.0543518 -0.992657 -0.108063 + 0.867153 0.039802 2.2227 0.0499618 -0.996664 -0.0645339 + 0.867964 0.035107 2.30703 0.0568548 -0.996004 -0.0688691 + 0.756667 0.040633 2.24066 -0.0369891 -0.997551 -0.0593598 + 1.0238 0.072501 2.07606 0.103605 -0.982744 -0.153235 + 1.02656 0.061384 2.16131 0.136539 -0.986719 -0.0879906 + 1.02737 0.056695 2.24564 0.163765 -0.9859 -0.0343876 + 1.02727 0.055147 2.33272 0.203149 -0.979126 -0.00658434 + 0.879902 0.028684 2.38955 0.0652774 -0.997577 -0.0240407 + 1.22545 0.112729 1.96998 0.211976 -0.970946 -0.111036 + 1.22032 0.103022 2.0614 0.259999 -0.964237 -0.0514541 + 1.22022 0.101478 2.14847 0.320432 -0.946994 0.022916 + 1.34103 0.156335 1.88086 0.523063 -0.840983 -0.138394 + 1.33591 0.146628 1.97227 0.521473 -0.851636 -0.0527465 + 1.34864 0.1531 2.04626 0.589787 -0.807353 0.0182312 + 1.21712 0.106865 2.24234 0.333338 -0.942089 0.036791 + 1.39166 0.208942 1.93914 0.703827 -0.70643 -0.0747307 + 1.40439 0.215415 2.01313 0.62135 -0.776022 -0.108235 + 1.34554 0.158488 2.14013 0.474663 -0.880166 0.00172384 + 1.39962 0.228884 1.8724 0.705242 -0.690147 -0.162267 + 1.45855 0.269326 1.90935 0.522432 -0.840345 -0.144514 + 1.46891 0.259892 1.99509 0.49533 -0.852168 -0.168693 + 1.42509 0.205372 2.11312 0.511678 -0.852605 -0.106067 + 1.53293 0.308826 1.84893 0.330094 -0.938016 -0.105662 + 1.53307 0.306576 1.92143 0.391088 -0.916012 -0.0892856 + 1.54342 0.297145 2.00716 0.398761 -0.903806 -0.155318 + 1.48961 0.249849 2.09508 0.496919 -0.854654 -0.150455 + 1.43347 0.208092 2.21021 0.448849 -0.892884 -0.035966 + 1.53008 0.323491 1.76373 0.275938 -0.94598 -0.170235 + 1.64358 0.352114 1.74876 0.253682 -0.959063 -0.125876 + 1.64093 0.345863 1.82318 0.293477 -0.954442 -0.0539524 + 1.64107 0.343527 1.89563 0.281179 -0.957819 -0.0593381 + 1.64148 0.337272 1.96966 0.285172 -0.951481 -0.115591 + 1.65108 0.366223 1.68132 0.184431 -0.967957 -0.170423 + 1.77082 0.395977 1.66818 0.164362 -0.985771 -0.0352348 + 1.76818 0.389645 1.74255 0.185971 -0.978734 -0.0865751 + 1.771 0.382386 1.81952 0.209389 -0.975226 -0.071343 + 1.77141 0.376132 1.89355 0.225647 -0.971576 -0.0715816 + 1.65583 0.378339 1.60973 0.0257995 -0.945029 -0.325967 + 1.77005 0.395597 1.59024 0.0816358 -0.993585 -0.0782656 + 1.85044 0.398633 1.52138 -0.320957 -0.947091 0.00234549 + 1.85122 0.398931 1.59927 -0.151561 -0.987259 0.0484734 + 1.85945 0.403984 1.67471 -0.0536916 -0.998166 0.0279686 + 1.7748 0.407712 1.51866 -0.0619945 -0.989651 -0.129412 + 1.84236 0.406737 1.45075 -0.405369 -0.913879 -0.0223828 + 1.88427 0.36495 1.46772 -0.48708 -0.867401 0.101831 + 1.90111 0.374766 1.54132 -0.396612 -0.911067 0.112498 + 1.90934 0.379825 1.61676 -0.239748 -0.954517 0.177249 + 1.76511 0.411152 1.4421 -0.141135 -0.983091 -0.116677 + 1.83267 0.410092 1.37414 -0.29654 -0.925223 -0.236701 + 1.87618 0.373049 1.39709 -0.648237 -0.751997 -0.119544 + 1.93117 0.334755 1.36422 -0.483302 -0.875141 0.0234159 + 1.81919 0.433354 1.30084 0.00983121 -0.989932 -0.141205 + 1.87003 0.41583 1.3378 -0.51384 -0.795843 -0.320315 + 1.92036 0.393833 1.2301 -0.736894 -0.642779 -0.209338 + 1.92652 0.351051 1.2894 -0.703942 -0.676847 -0.215276 + 1.79441 0.430865 1.22576 0.27621 -0.931744 -0.235715 + 1.85655 0.439092 1.2645 -0.283468 -0.922398 -0.26235 + 1.90726 0.422203 1.15736 -0.792068 -0.57329 -0.209684 + 1.98696 0.346454 1.04956 -0.587609 -0.799014 -0.127645 + 1.9973 0.330459 1.13187 -0.484672 -0.864336 -0.134225 + 1.77727 0.448527 1.15856 0.422272 -0.8665 -0.266203 + 1.8535 0.482551 1.20203 -0.18739 -0.883592 -0.429126 + 1.90421 0.465661 1.09488 -0.756166 -0.637205 -0.148939 + 1.97386 0.374826 0.976819 -0.621314 -0.782562 -0.0395699 + 2.04494 0.342123 0.90966 -0.0715123 -0.991567 -0.108076 + 1.83637 0.500213 1.13484 0.0306055 -0.952491 -0.303024 + 1.88128 0.493808 1.02394 -0.756631 -0.648825 -0.0808453 + 1.93569 0.390765 0.900612 -0.651428 -0.757784 0.0374919 + 1.98702 0.367937 0.75095 -0.327691 -0.940371 -0.0912207 + 2.02519 0.351912 0.827106 -0.189255 -0.979172 -0.0735147 + 1.82411 0.52969 1.06819 -0.0578216 -0.907299 -0.416492 + 1.95867 0.386642 0.672753 -0.371384 -0.92159 -0.112893 + 2.05472 0.382269 0.629927 0.065554 -0.977113 -0.202366 + 2.07224 0.36711 0.717184 0.116856 -0.977633 -0.174868 + 2.092 0.357321 0.799737 0.323412 -0.944409 -0.0591275 + 2.0973 0.364427 0.890429 0.464803 -0.884773 -0.0336758 + 2.05528 0.326128 0.991967 0.128093 -0.985761 -0.108941 + 2.08196 0.418871 0.48953 0.407847 -0.873923 -0.264424 + 2.11199 0.414984 0.555663 0.452122 -0.842762 -0.292126 + 2.12951 0.399825 0.642919 0.387981 -0.897008 -0.211774 + 2.13558 0.38581 0.72019 0.454304 -0.884833 -0.10334 + 2.14615 0.466202 0.52235 0.629181 -0.65078 -0.424989 + 2.19668 0.44916 0.604469 0.572982 -0.750098 -0.330219 + 2.20274 0.43506 0.68169 0.580376 -0.805838 -0.117426 + 2.14088 0.392917 0.810883 0.573695 -0.819015 0.0093976 + 2.10104 0.361741 0.977082 0.600432 -0.799358 -0.0225296 + 2.19285 0.51342 0.515567 0.613053 -0.568272 -0.548847 + 2.24338 0.496376 0.597685 0.680611 -0.579277 -0.44856 + 2.28997 0.514976 0.652872 0.707388 -0.625578 -0.32902 + 2.23818 0.459144 0.727577 0.592941 -0.80241 -0.0675213 + 2.17632 0.417 0.85677 0.561185 -0.827685 -0.00306734 + 2.28732 0.572307 0.59577 0.741811 -0.45929 -0.488639 + 2.33391 0.590818 0.650907 0.779893 -0.436275 -0.448811 + 2.35739 0.555668 0.72119 0.782201 -0.553962 -0.285109 + 2.3056 0.499835 0.795894 0.616967 -0.78481 -0.0585181 + 2.3564 0.636682 0.641869 0.759233 -0.503021 -0.412959 + 2.36268 0.60947 0.695201 0.851453 -0.376784 -0.364775 + 2.40264 0.642146 0.761807 0.836375 -0.468896 -0.283925 + 2.39735 0.588344 0.787796 0.87413 -0.460995 -0.152907 + 2.38517 0.655248 0.686114 0.781124 -0.571727 -0.250944 + 2.41327 0.679275 0.713097 0.753124 -0.608838 -0.24924 + 2.4371 0.665621 0.797747 0.789215 -0.59173 -0.164303 + 2.41924 0.62912 0.887168 0.835089 -0.550095 0.0046775 + 2.42472 0.70048 0.684769 0.799056 -0.522985 -0.296641 + 2.44773 0.702749 0.749038 0.814101 -0.523923 -0.250488 + 2.4608 0.703778 0.825056 0.890907 -0.450235 -0.0597797 + 2.47306 0.737895 0.783762 0.903579 -0.409227 -0.126798 + 2.48104 0.747248 0.863964 0.914526 -0.403579 -0.0276885 + 2.44294 0.667191 0.914427 0.869972 -0.49307 -0.00555513 + 2.45262 0.684514 0.975823 0.861075 -0.507469 0.03202 + 2.3602 0.564961 1.02569 0.768668 -0.635541 0.0723629 + 2.39861 0.638763 1.21626 0.805622 -0.5874 0.0770369 + 2.38231 0.600476 1.11978 0.789314 -0.609268 0.0759963 + 2.25227 0.468723 1.25478 0.698229 -0.713451 0.0588555 + 2.22755 0.443112 1.16914 0.65457 -0.755285 0.0329122 + 2.33831 0.524184 0.926321 0.719688 -0.693494 0.0334011 + 2.42046 0.677095 1.30547 0.828536 -0.554345 0.0789334 + 2.30903 0.550103 1.42763 0.750774 -0.655896 0.0783519 + 2.27437 0.504326 1.34892 0.731443 -0.67743 0.0779699 + 2.16102 0.400339 1.41963 0.648016 -0.757781 0.0764341 + 2.33088 0.588434 1.51684 0.757616 -0.648607 0.0729866 + 2.22441 0.481562 1.57934 0.694352 -0.708428 0.12651 + 2.18975 0.4357 1.50058 0.67295 -0.732255 0.104599 + 2.36209 0.629195 1.59564 0.781334 -0.619837 0.072931 + 2.28026 0.562414 1.73771 0.692251 -0.701816 0.168054 + 2.24905 0.521653 1.65891 0.687522 -0.71591 0.121601 + 2.14602 0.429243 1.66256 0.598414 -0.77815 0.190744 + 2.12043 0.391848 1.58513 0.5609 -0.810215 0.170125 + 2.44107 0.741639 1.49588 0.858054 -0.509507 0.0643884 + 2.37651 0.663807 1.68489 0.810918 -0.571291 0.126642 + 2.28961 0.596452 1.82015 0.691577 -0.69423 0.199415 + 2.17756 0.505198 1.82421 0.626008 -0.737496 0.253404 + 2.17066 0.469328 1.74214 0.614265 -0.75993 0.212565 + 2.45187 0.773462 1.59656 0.874339 -0.47292 0.108989 + 2.37738 0.689146 1.775 0.824266 -0.540742 0.167879 + 2.29048 0.621709 1.9102 0.687285 -0.679971 0.255495 + 2.18691 0.539241 1.90664 0.616385 -0.74181 0.264171 + 2.10576 0.47921 1.92562 0.564836 -0.78536 0.253315 + 2.5209 0.910411 1.57756 0.90282 -0.421401 0.0856562 + 2.45124 0.806408 1.69129 0.875849 -0.46505 0.128908 + 2.37676 0.722098 1.86973 0.839628 -0.462381 0.285005 + 2.28774 0.657035 1.99442 0.726418 -0.57156 0.381623 + 2.19008 0.578291 1.98821 0.623762 -0.714053 0.317883 + 2.52867 0.942755 1.67753 0.912805 -0.396344 0.0984824 + 2.45901 0.838753 1.79127 0.858049 -0.484414 0.17057 + 2.35716 0.768187 1.95149 0.819581 -0.469273 0.32874 + 2.26814 0.703124 2.07619 0.753854 -0.559826 0.343947 + 2.18734 0.613617 2.07242 0.667351 -0.684937 0.292412 + 2.57475 1.08248 1.66552 0.950545 -0.295178 0.0966118 + 2.57155 1.11526 1.79054 0.944891 -0.30605 0.116247 + 2.52548 0.975537 1.80256 0.914342 -0.372792 0.158128 + 2.45238 0.870138 1.88291 0.830781 -0.50723 0.229174 + 2.35053 0.799572 2.04313 0.770175 -0.596041 0.227081 + 2.59824 1.09167 1.44121 0.950668 -0.246942 0.187751 + 2.60356 1.16593 1.62819 0.958696 -0.274437 0.0747358 + 2.62389 1.22028 1.49886 0.951311 -0.279535 0.129874 + 2.64445 1.30412 1.55343 0.939656 -0.326798 0.101239 + 2.62411 1.24978 1.68276 0.954808 -0.291124 0.0599066 + 2.64442 1.24894 1.44861 0.814674 -0.398533 0.421281 + 2.66485 1.33239 1.50287 0.812294 -0.468549 0.347333 + 2.68044 1.42697 1.65945 0.904838 -0.42075 0.0651016 + 2.67129 1.41559 1.73735 0.915336 -0.397523 0.0643014 + 2.61496 1.2384 1.76067 0.948755 -0.301931 0.093284 + 2.70609 1.36395 1.48141 0.791247 -0.472594 0.388049 + 2.70084 1.45524 1.60889 0.870726 -0.459734 0.174591 + 2.78395 1.59133 1.59757 0.787807 -0.605392 0.113405 + 2.67396 1.43038 1.80435 0.919037 -0.390839 0.0511513 + 2.60791 1.25902 1.86534 0.939973 -0.329719 0.0879526 + 2.74541 1.52447 1.57417 0.864816 -0.467209 0.183871 + 2.90461 1.70028 1.54007 0.866201 -0.499645 0.00711979 + 2.87939 1.69471 1.66272 0.793177 -0.58475 0.170111 + 2.75873 1.58567 1.72017 0.831363 -0.534576 0.151868 + 2.69898 1.49683 1.84245 0.910648 -0.407222 0.069928 + 2.96054 1.88031 1.66985 0.99253 -0.119298 -0.0255294 + 2.92564 1.84141 1.81123 0.891443 -0.40446 0.204307 + 2.78036 1.65231 1.87676 0.844401 -0.508476 0.168641 + 2.72062 1.56338 1.99899 0.922727 -0.380864 0.0593083 + 2.97736 2.1481 2.00502 0.959823 -0.24875 0.129861 + 2.94247 2.1092 2.14639 0.951548 -0.269409 0.148241 + 2.90194 2.0281 2.26247 0.92428 -0.348229 0.156342 + 2.82662 1.79901 2.02526 0.855891 -0.478772 0.195521 + 3.01987 2.36333 2.07983 0.987932 -0.144265 0.0563761 + 3.00149 2.35754 2.22905 0.965788 -0.230895 0.118072 + 2.97441 2.31554 2.36321 0.958536 -0.251 0.134936 + 2.93387 2.23443 2.47928 0.944679 -0.282818 0.166119 + 2.83818 1.92807 2.39191 0.920875 -0.365786 0.134867 + 3.02077 2.3673 1.93415 0.993387 0.0078276 -0.114545 + 3.02802 2.51664 2.20689 0.994751 -0.0950307 0.037931 + 3.01751 2.4999 2.34988 0.982252 -0.157549 0.101779 + 2.99042 2.45789 2.48404 0.965403 -0.206231 0.159581 + 2.9537 2.39974 2.60716 0.950701 -0.233574 0.203986 + 2.99255 2.32319 1.78795 0.987705 -0.0415422 -0.15071 + 3.02892 2.52052 2.06117 0.996525 -0.0829995 -0.00695802 + 3.05121 2.75296 2.22377 0.995407 -0.0916072 0.0277883 + 3.03966 2.71913 2.35896 0.992703 -0.102171 0.0640396 + 3.02916 2.70248 2.502 0.987232 -0.116406 0.108735 + 2.97632 2.33456 1.65087 0.977253 -0.0384652 -0.208559 + 3.03153 2.54161 1.91944 0.992019 -0.11236 -0.0572146 + 3.05381 2.77414 2.08209 0.996481 -0.0836835 -0.00470311 + 3.06812 3.01108 2.40629 0.99495 -0.0870433 0.0499732 + 3.05657 2.97725 2.54149 0.987999 -0.114326 0.103863 + 3.01529 2.55297 1.78236 0.986964 -0.113999 -0.113608 + 3.0561 2.83204 1.959 0.996103 -0.0805939 -0.0358342 + 3.0788 3.08234 2.28906 0.997438 -0.0693568 0.017529 + 3.08929 3.3725 2.4613 0.998344 -0.0408288 0.0405364 + 3.07861 3.30131 2.57859 0.995042 -0.0575339 0.0811209 + 3.05736 2.90192 1.83917 0.995429 -0.0615048 -0.07306 + 3.08109 3.14025 2.16597 0.99878 -0.0406927 -0.0279831 + 3.09356 3.44468 2.33028 0.999765 -0.0170492 -0.0134014 + 3.09161 3.65564 2.60148 0.995939 0.0306326 0.0846603 + 3.07773 3.62876 2.73184 0.992443 0.0296511 0.119072 + 3.05017 2.98744 1.73523 0.989288 -0.0302723 -0.142806 + 3.07647 3.21742 2.04991 0.997946 -0.0121458 -0.0629032 + 3.08895 3.52185 2.21422 0.998469 0.000277825 -0.0553154 + 3.09588 3.72791 2.47051 0.997352 0.0638767 0.0347733 + 3.03994 3.10766 1.65941 0.985201 -0.00453093 -0.171341 + 3.06928 3.30294 1.94597 0.995333 0.0101293 -0.0959642 + 3.0787 3.58771 2.08074 0.995121 0.0150615 -0.0975044 + 3.09204 3.80515 2.29671 0.996835 0.0784467 -0.0128625 + 3.02043 3.20382 1.55945 0.976201 0.0156533 -0.2163 + 3.0531 3.37906 1.83273 0.990054 0.0351806 -0.136217 + 3.06252 3.66391 1.96755 0.990079 0.0307592 -0.137101 + 3.0818 3.8711 2.16328 0.993671 0.095148 -0.0597099 + 2.99258 3.29926 1.45715 0.970068 0.0238696 -0.241657 + 3.03359 3.47522 1.73278 0.984992 0.0476094 -0.165905 + 3.04323 3.74227 1.86023 0.98532 0.0411864 -0.165676 + 3.06565 3.93467 2.04759 0.990221 0.104877 -0.0919981 + 2.93487 3.01725 1.2846 0.941673 -0.0671375 -0.329764 + 2.96473 3.39302 1.35695 0.962349 0.0396591 -0.26891 + 3.01117 3.57084 1.63576 0.979717 0.056274 -0.192322 + 3.0208 3.83789 1.76322 0.981362 0.047918 -0.186099 + 3.04636 4.01302 1.94028 0.986886 0.115689 -0.112569 + 2.90994 3.12542 1.19425 0.939049 -0.0476501 -0.340464 + 2.92822 3.48207 1.25391 0.95939 0.0344006 -0.279978 + 2.98331 3.6646 1.53557 0.975552 0.055204 -0.212723 + 2.99674 3.92558 1.66294 0.97917 0.047794 -0.197338 + 3.02354 4.08959 1.83506 0.984495 0.117468 -0.130275 + 2.87343 3.21447 1.09121 0.935428 -0.0378803 -0.351482 + 2.89598 3.56679 1.14817 0.952969 0.0394309 -0.300492 + 2.95881 3.75803 1.43673 0.97358 0.0470454 -0.223447 + 2.97224 4.01901 1.5641 0.978491 0.0493955 -0.200288 + 2.99948 4.17727 1.73478 0.98259 0.121483 -0.140567 + 2.84357 3.31723 0.997228 0.93432 -0.0300914 -0.355161 + 2.85327 3.64454 1.03711 0.95085 0.0234604 -0.308761 + 2.92656 3.84275 1.33099 0.969922 0.0374312 -0.240523 + 2.9469 4.10375 1.46152 0.978436 0.0449607 -0.201595 + 2.9735 4.26459 1.63814 0.98167 0.126259 -0.142764 + 2.80086 3.39498 0.886163 0.924 -0.0217662 -0.381773 + 2.81888 3.72601 0.929804 0.939823 0.0219247 -0.340958 + 2.90137 3.92205 1.22085 0.969124 0.0179812 -0.245919 + 2.92172 4.18305 1.35138 0.978142 0.0438218 -0.203266 + 2.94816 4.34934 1.53556 0.98211 0.125763 -0.140157 + 2.86699 4.00351 1.11354 0.961796 0.0128639 -0.273463 + 2.89466 4.25686 1.24234 0.975437 0.0416533 -0.216304 + 2.92278 4.42895 1.43246 0.979885 0.13416 -0.147738 + 2.88307 4.67932 1.54261 0.961676 0.264774 -0.0712351 + 2.90846 4.59979 1.64576 0.967398 0.248919 -0.0467011 + 2.86733 4.33374 1.13038 0.971432 0.0498883 -0.232014 + 2.89572 4.50276 1.32343 0.975306 0.151458 -0.160747 + 2.85403 4.73817 1.43067 0.953931 0.281099 -0.104879 + 2.8077 4.92047 1.67653 0.931559 0.363585 0.0020652 + 2.82123 4.86942 1.79256 0.933956 0.355987 0.031622 + 2.8645 4.56131 1.20821 0.968644 0.165196 -0.185577 + 2.8228 4.79673 1.31545 0.937833 0.320255 -0.133815 + 2.77865 4.97932 1.56459 0.900078 0.42536 -0.0944897 + 2.66938 5.20707 1.70372 0.861152 0.50567 -0.0521084 + 2.68816 5.16972 1.81502 0.881064 0.469688 0.0558559 + 2.78712 4.84956 1.20634 0.927483 0.345742 -0.142255 + 2.73246 5.02505 1.45579 0.880609 0.457721 -0.122556 + 2.62319 5.25279 1.59493 0.8607 0.503054 -0.0783006 + 2.69677 5.07788 1.34668 0.906637 0.417358 -0.0618144 + 2.59562 5.29916 1.50761 0.888302 0.459158 -0.00966126 + 2.49325 5.47997 1.76125 0.828482 0.5588 0.0368802 + 2.50869 5.45074 1.83768 0.816103 0.575279 0.0550381 + 2.52747 5.41347 1.94903 0.818354 0.566771 0.0952226 + 2.66976 5.13291 1.25057 0.916567 0.396717 -0.0501943 + 2.5686 5.35419 1.4115 0.895084 0.445878 -0.00409296 + 2.45205 5.57126 1.60493 0.855363 0.510268 0.0893337 + 2.46568 5.52634 1.67394 0.855636 0.511427 0.0795583 + 2.53978 5.40978 1.32602 0.891634 0.452755 0.00138334 + 2.42323 5.62676 1.5194 0.820668 0.571308 0.0105456 + 2.22626 5.84969 1.68367 0.715355 0.696712 0.0534761 + 2.30465 5.76602 1.73179 0.768168 0.633483 0.0928311 + 2.31828 5.7211 1.80079 0.784566 0.580301 0.21842 + 2.38425 5.67106 1.43747 0.80256 0.596463 -0.0113856 + 2.18727 5.894 1.60173 0.707731 0.703387 0.0660502 + 1.92192 6.12256 1.69465 0.603293 0.792438 0.0898832 + 1.98527 6.0613 1.81496 0.630317 0.760334 0.156816 + 2.06366 5.97762 1.86309 0.680932 0.711282 0.174382 + 2.45255 5.55625 1.13032 0.834792 0.542952 -0.0912464 + 2.32895 5.74736 1.34111 0.796858 0.604132 0.0064982 + 2.19092 5.90505 1.48339 0.73271 0.676171 0.0769918 + 2.25966 5.83674 1.19491 0.771762 0.634502 -0.0423199 + 2.12164 5.99442 1.33719 0.699671 0.714289 0.0158527 + 1.92557 6.13361 1.57631 0.622918 0.775771 0.100762 + 1.58307 6.34482 1.72328 0.494798 0.857881 0.138622 + 1.65687 6.28328 1.83928 0.508842 0.848622 0.144637 + 2.37255 5.63181 0.907443 0.837481 0.532479 -0.12285 + 2.23624 5.85057 1.06815 0.775208 0.626154 -0.0835615 + 2.02499 6.07968 1.26831 0.651464 0.758672 -0.0033258 + 1.82892 6.21878 1.50738 0.580012 0.80809 0.102846 + 2.3171 5.68751 0.806972 0.804445 0.57095 -0.163963 + 2.24643 5.76772 0.768239 0.7804 0.604823 -0.158636 + 2.16557 5.93087 1.02946 0.734497 0.674131 -0.0778547 + 1.93897 6.14683 1.14961 0.635689 0.771607 -0.0228731 + 1.74926 6.28213 1.38726 0.565457 0.822407 0.0624813 + 2.18471 5.82591 0.672854 0.771632 0.615361 -0.160982 + 2.07956 5.99811 0.910802 0.711352 0.694328 -0.10903 + 1.84073 6.22417 1.02166 0.635503 0.771967 -0.0142103 + 2.09022 5.90723 0.568006 0.747037 0.642696 -0.169937 + 1.98507 6.07943 0.805954 0.701737 0.704546 -0.10574 + 1.70047 6.33976 0.889051 0.602793 0.797458 -0.026489 + 1.54913 6.43287 1.13137 0.529964 0.84682 0.0450993 + 1.65102 6.35946 1.25932 0.558933 0.827692 0.0501974 + 2.02026 5.96716 0.478801 0.746139 0.647236 -0.156082 + 1.84481 6.19502 0.673343 0.672512 0.731975 -0.109273 + 1.56641 6.42612 0.776263 0.551043 0.833121 -0.0475507 + 1.97917 5.98423 0.353645 0.753089 0.635215 -0.171343 + 1.80372 6.21208 0.548196 0.67623 0.724477 -0.133586 + 1.90528 6.04599 0.268878 0.707469 0.675386 -0.208185 + 1.8027 6.13603 0.252724 0.664243 0.717764 -0.208796 + 1.70115 6.30212 0.532041 0.628295 0.7681 -0.123566 + 1.97283 5.91634 0.133034 0.760599 0.589064 -0.272934 + 1.89152 5.97653 0.048988 0.722804 0.620963 -0.303247 + 1.71826 6.19427 0.17425 0.637824 0.737143 -0.223161 + 1.55972 6.38729 0.440731 0.576227 0.800299 -0.165785 + 1.42498 6.51129 0.684952 0.502546 0.863928 -0.0327935 + 1.84166 5.9073 -0.148702 0.700996 0.559618 -0.442078 + 1.80708 6.03477 -0.029486 0.691803 0.63848 -0.337271 + 1.71078 6.09582 -0.096035 0.640532 0.668867 -0.377274 + 1.61436 6.25035 0.099903 0.591625 0.767005 -0.248361 + 1.74535 5.96835 -0.215251 0.652593 0.582886 -0.484114 + 1.63947 6.03127 -0.271635 0.58603 0.608977 -0.534524 + 1.60914 6.16113 -0.145152 0.588265 0.696561 -0.410788 + 1.51273 6.31567 0.050778 0.556136 0.795907 -0.23926 + 1.66853 5.92133 -0.356413 0.58496 0.548362 -0.597596 + 1.53006 6.08995 -0.313864 0.51805 0.632289 -0.576052 + 1.49973 6.2198 -0.187381 0.504857 0.729962 -0.460733 + 1.44807 6.32948 -0.029744 0.486299 0.810333 -0.326916 + 1.34707 6.48501 0.323472 0.434776 0.870944 -0.228966 + 1.5802 5.88425 -0.457982 0.508504 0.520305 -0.68608 + 1.55406 5.9805 -0.404688 0.507557 0.564844 -0.650643 + 1.41123 6.15387 -0.342177 0.429292 0.666181 -0.609845 + 1.38259 6.26348 -0.226426 0.412512 0.760641 -0.501257 + 1.33093 6.37315 -0.068788 0.368896 0.852819 -0.369614 + 1.5864 5.73574 -0.567952 0.526086 0.518095 -0.674397 + 1.4557 5.94005 -0.496631 0.427738 0.539782 -0.725035 + 1.43523 6.04441 -0.432993 0.433227 0.584038 -0.68645 + 1.28798 6.19373 -0.374023 0.358962 0.692118 -0.626194 + 1.25934 6.30343 -0.25822 0.30526 0.801726 -0.513861 + 1.44985 5.60658 -0.768845 0.48268 0.545301 -0.685323 + 1.4619 5.79162 -0.606549 0.449183 0.561326 -0.695088 + 1.33366 5.99449 -0.521319 0.373692 0.559552 -0.739768 + 1.31319 6.09876 -0.457732 0.368104 0.608093 -0.703365 + 1.15742 6.23121 -0.400348 0.255656 0.726888 -0.637395 + 1.44808 5.44719 -0.897173 0.510311 0.543693 -0.666319 + 1.32284 5.6734 -0.794788 0.426016 0.582979 -0.691842 + 1.33489 5.85845 -0.632493 0.40463 0.588736 -0.69976 + 1.20237 6.05825 -0.532572 0.295362 0.578077 -0.76065 + 1.18264 6.13625 -0.484056 0.282958 0.621704 -0.730355 + 1.33258 5.38391 -1.03137 0.458855 0.520082 -0.720393 + 1.32162 5.51597 -0.931708 0.454826 0.579427 -0.676312 + 1.19309 5.74158 -0.811476 0.347673 0.616529 -0.70641 + 1.2036 5.92221 -0.643737 0.325352 0.619168 -0.714687 + 1.06634 6.09804 -0.546688 0.240416 0.595091 -0.766855 + 1.50598 5.18236 -1.06228 0.482678 0.493962 -0.723204 + 1.30942 5.2666 -1.11779 0.390946 0.457269 -0.798791 + 1.20078 5.45425 -1.0632 0.395662 0.555692 -0.731203 + 1.19188 5.58415 -0.948395 0.375159 0.62079 -0.688386 + 1.05597 5.78718 -0.829051 0.263708 0.649597 -0.713079 + 1.33486 5.16617 -1.16584 0.341677 0.42085 -0.840323 + 1.06543 5.24125 -1.21968 0.299315 0.33008 -0.895242 + 1.55249 4.99254 -1.1583 0.409704 0.457924 -0.788954 + 1.31379 5.08385 -1.20386 0.294403 0.368036 -0.881973 + 1.52869 4.93441 -1.19322 0.316268 0.411183 -0.854929 + 1.28999 5.02564 -1.23883 0.238531 0.295858 -0.924971 + 1.06721 5.0593 -1.27034 0.184419 0.161831 -0.969433 + 1.69867 4.78061 -1.20703 0.265382 0.21928 -0.938876 + 1.49433 4.89358 -1.22729 0.236548 0.256727 -0.937089 + 1.29489 4.96095 -1.25018 0.15758 0.131234 -0.978747 + 1.07212 4.99461 -1.28169 0.150994 0.0642519 -0.986444 + 0.934992 4.94724 -1.30044 0.196123 -0.414098 -0.888852 + 1.6663 4.75043 -1.21235 -0.170863 -0.462853 -0.869812 + 1.47527 4.84858 -1.23336 -0.100133 -0.47664 -0.873377 + 1.27583 4.91587 -1.2563 0.0200935 -0.42907 -0.903048 + 1.08456 4.94607 -1.27621 0.0707411 -0.499102 -0.863651 + 1.82612 4.63246 -1.18482 -0.216228 -0.421606 -0.880621 + 1.81028 4.61436 -1.13367 -0.650008 -0.734426 -0.195213 + 1.65664 4.72463 -1.14746 -0.476344 -0.858849 -0.188348 + 1.46561 4.82287 -1.16843 -0.336567 -0.898871 -0.280631 + 1.26974 4.87952 -1.20094 -0.13413 -0.919311 -0.369967 + 1.92484 4.48456 -1.11024 -0.763068 -0.584121 -0.276639 + 1.91864 4.47097 -1.01092 -0.775277 -0.486853 -0.402392 + 1.83478 4.60951 -0.994476 -0.702383 -0.626311 -0.33822 + 1.68114 4.71987 -1.00823 -0.422589 -0.841157 -0.337451 + 1.43923 4.81291 -1.04616 -0.247781 -0.878049 -0.409433 + 1.98546 4.35791 -1.00529 -0.839535 -0.27239 -0.47009 + 1.74769 4.29554 -0.775666 -0.677963 -0.0829774 -0.730397 + 1.66383 4.43409 -0.759232 -0.502433 -0.411924 -0.760183 + 1.5848 4.54907 -0.799193 -0.260257 -0.614766 -0.744533 + 1.73801 4.16008 -0.797641 -0.689331 0.0912442 -0.718677 + 1.34224 3.96063 -0.422972 -0.709361 0.178332 -0.681912 + 1.31292 4.05995 -0.369198 -0.558391 -0.196083 -0.806071 + 1.2339 4.17485 -0.409218 0.3591 -0.757839 -0.544726 + 1.33256 3.82517 -0.444947 -0.67465 0.424733 -0.603696 + 1.06559 3.68669 -0.279894 -0.326294 0.597408 -0.732555 + 1.12487 3.77227 -0.232133 -0.468155 0.519229 -0.715005 + 1.09555 3.87159 -0.178358 0.221535 -0.200561 -0.954305 + 1.19592 4.12414 -0.451392 0.413237 -0.697956 -0.584887 + 1.25245 3.70489 -0.517631 -0.625407 0.508854 -0.591552 + 0.985481 3.56642 -0.352577 -0.308117 0.7636 -0.567432 + 0.871163 3.69651 -0.286106 0.0719273 0.458941 -0.88555 + 0.839349 3.77385 -0.251464 0.581297 0.242737 -0.776642 + 1.03377 3.76403 -0.245252 0.077416 0.391376 -0.916969 + 1.26446 3.5853 -0.576089 -0.561306 0.338549 -0.755195 + 0.928646 3.53155 -0.376982 -0.109366 0.598536 -0.793595 + 0.814329 3.66164 -0.310509 0.671868 0.357362 -0.648758 + 1.32136 3.47721 -0.677476 -0.535059 0.421699 -0.732039 + 1.043 3.33197 -0.54971 -0.121252 0.782648 -0.610541 + 0.986104 3.43997 -0.448364 -0.223074 0.575776 -0.786587 + 0.852539 3.53944 -0.380047 0.588592 0.61112 -0.529237 + 0.821278 3.60439 -0.345361 0.684352 0.512137 -0.519016 + 1.34655 3.34276 -0.768394 -0.471292 0.649683 -0.596487 + 1.09483 3.2719 -0.671261 -0.0538216 0.923937 -0.378739 + 0.955696 3.37117 -0.540198 0.572719 0.758127 -0.311829 + 0.909997 3.44794 -0.45138 0.516243 0.725989 -0.454348 + 1.41999 3.30677 -0.932065 -0.388224 0.859462 -0.332575 + 1.16827 3.23591 -0.834932 0.0315517 0.992507 -0.118042 + 1.03005 3.29611 -0.776992 0.506809 0.861345 0.0350618 + 1.00753 3.3111 -0.661758 0.56267 0.817539 -0.122609 + 0.806855 3.56984 -0.807711 0.884405 0.447961 -0.130988 + 1.41563 3.25271 -1.08502 -0.202463 0.977719 -0.0554406 + 1.21245 3.24989 -1.03014 0.280125 0.94657 0.159798 + 1.1716 3.24768 -0.926706 0.409472 0.893231 0.185664 + 1.43534 3.28172 -1.26487 -0.116243 0.985672 0.122221 + 1.23216 3.2789 -1.20999 0.297731 0.940707 0.162561 + 1.12365 3.35118 -1.21599 0.509116 0.847316 0.151184 + 1.09283 3.34785 -1.08122 0.513307 0.839191 0.179651 + 1.05197 3.34555 -0.977836 0.392107 0.86885 0.302245 + 1.39002 3.28857 -1.38413 0.00897914 0.980383 0.196899 + 1.23927 3.29413 -1.31657 0.313813 0.929036 0.195992 + 1.13075 3.36642 -1.32257 0.512054 0.844147 0.158798 + 1.11887 3.39705 -1.45464 0.421399 0.900394 0.108227 + 1.01918 3.43216 -1.38745 0.430606 0.896281 0.106105 + 1.34359 3.3214 -1.449 0.135 0.962923 0.23357 + 1.19284 3.32696 -1.38142 0.532203 0.813873 0.233175 + 1.15402 3.36187 -1.3727 0.528251 0.826333 0.195258 + 1.14214 3.39251 -1.50476 0.273871 0.956796 0.0976515 + 1.27698 3.33323 -1.50369 0.379779 0.881281 0.281268 + 1.23816 3.36814 -1.49496 0.46431 0.833696 0.298943 + 1.25705 3.37972 -1.68482 0.218195 0.955603 0.198023 + 1.09957 3.413 -1.67886 0.317427 0.929034 0.190097 + 0.999874 3.44811 -1.61167 0.465706 0.87811 0.109729 + 0.969968 3.5092 -1.77767 0.467253 0.778559 0.418951 + 0.863759 3.53291 -1.58534 0.517353 0.841872 0.153613 + 0.988359 3.42883 -1.25268 0.455706 0.881631 0.122713 + 0.925856 3.45071 -1.17737 0.318525 0.916563 0.241773 + 0.833852 3.59399 -1.75135 0.563096 0.732523 0.382535 + 0.801256 3.55478 -1.51003 0.523123 0.840922 0.138537 + 0.907259 3.41294 -1.06835 0.42178 0.880007 0.218378 + 1.03338 3.30779 -0.868825 0.457277 0.866899 0.198452 + 0.858799 3.44275 -0.997782 0.646696 0.760813 0.0542887 + 0.836276 3.45774 -0.882547 0.788437 0.598745 -0.140963 + 0.67774 3.63249 -1.42123 0.699861 0.710048 0.0776311 + 0.569798 3.83247 -1.3092 0.943311 0.192645 -0.270283 + 0.6201 4.04521 -1.17587 0.959146 0.0731005 -0.273306 + 0.761156 3.64662 -0.718893 0.934319 0.346447 -0.0838027 + 0.76866 3.74322 -0.619611 0.962712 0.260601 -0.0726095 + 0.7374 3.80817 -0.584916 0.970592 0.234355 -0.0550305 + 0.74215 3.87974 -0.541678 0.983727 0.1076 -0.14389 + 0.627604 4.1418 -1.07658 0.97003 0.0535131 -0.237019 + 0.654169 4.28647 -0.963151 0.96326 -0.0876276 -0.253871 + 0.68488 4.37231 -0.931225 0.921715 -0.217365 -0.321239 + 0.735201 3.93699 -0.506827 0.969757 -0.00188808 -0.244065 + 0.713711 4.4393 -0.891461 0.794623 -0.407201 -0.450291 + 0.764032 4.00398 -0.467072 0.945572 -0.0942645 -0.311459 + 0.848985 3.8722 -0.214011 0.62404 0.269643 -0.733394 + 0.966475 3.81264 -0.233652 -0.0997424 0.132629 -0.986134 + 0.787411 4.51721 -0.888613 0.721344 -0.515995 -0.461965 + 0.773668 4.10225 -0.429669 0.910142 -0.222538 -0.349453 + 0.826991 4.17847 -0.409485 0.842975 -0.380263 -0.380516 + 0.840212 3.94172 -0.18242 0.774758 0.225008 -0.590865 + 0.858422 4.81498 -1.15075 0.5173 -0.722629 -0.458485 + 0.840733 4.59343 -0.868419 0.647954 -0.597957 -0.471808 + 0.928875 4.63847 -0.852437 0.262761 -0.750193 -0.606768 + 0.867609 4.24338 -0.363923 0.541322 -0.633498 -0.552856 + 0.88083 4.00672 -0.136817 0.0900021 -0.220771 -0.971164 + 0.944245 4.89859 -1.23938 0.249841 -0.820847 -0.513605 + 0.946564 4.86002 -1.13477 0.301342 -0.837809 -0.455269 + 1.07847 4.90973 -1.22087 0.0153075 -0.887378 -0.460789 + 1.08079 4.87115 -1.11625 0.0744267 -0.883695 -0.462108 + 1.02178 4.6337 -0.842966 0.0797526 -0.770377 -0.632581 + 0.960515 4.23869 -0.354402 -0.424609 -0.562054 -0.70979 + 0.957702 3.88216 -0.202061 -0.572487 0.197845 -0.795686 + 1.24336 4.86956 -1.07869 -0.0533823 -0.917012 -0.39527 + 1.18436 4.63201 -0.805442 -0.0252765 -0.704625 -0.709129 + 1.03739 4.11413 -0.419655 -0.530826 -0.3916 -0.751581 + 1.34289 4.64202 -0.837188 -0.117168 -0.675489 -0.728002 + 1.05757 3.82089 -0.220541 0.354544 -0.0249305 -0.934707 + 1.06648 5.96789 -0.661263 0.264126 0.64191 -0.719853 + 0.927575 6.13356 -0.558203 0.151563 0.652038 -0.742883 + 1.04661 6.17613 -0.498132 0.213248 0.662049 -0.718482 + 0.90974 6.19394 -0.504984 0.116691 0.707369 -0.697146 + 0.888864 6.26743 -0.428478 0.102982 0.770998 -0.628456 + 1.02573 6.2497 -0.421567 0.176562 0.757605 -0.628379 + 1.1318 6.31711 -0.291521 0.210692 0.832102 -0.513045 + 0.752642 6.27348 -0.439145 0.0631153 0.78146 -0.620755 + 0.868635 6.33987 -0.329947 0.0882681 0.840034 -0.535306 + 1.0001 6.33551 -0.31279 0.155417 0.835658 -0.526803 + 1.09517 6.43098 -0.085945 0.210194 0.883545 -0.418528 + 1.22271 6.41721 -0.052703 0.262854 0.886367 -0.38113 + 0.732413 6.34592 -0.340615 0.0707171 0.829502 -0.554008 + 0.837548 6.44609 -0.14733 0.113305 0.866333 -0.486445 + 0.969017 6.44173 -0.130172 0.16837 0.877295 -0.44945 + 1.05477 6.5639 0.200029 0.253569 0.915079 -0.313582 + 0.600179 6.34797 -0.350374 0.0550388 0.81839 -0.572021 + 0.579928 6.44836 -0.194862 0.0769101 0.841008 -0.535528 + 0.712162 6.44622 -0.185152 0.109193 0.852182 -0.511725 + 0.798436 6.5756 0.080752 0.172963 0.899828 -0.400491 + 0.928617 6.57474 0.155851 0.206806 0.911084 -0.356591 + 0.464092 6.45655 -0.206243 0.100041 0.828402 -0.551127 + 0.567921 6.58042 0.016008 0.118704 0.882083 -0.455894 + 0.67305 6.57573 0.04293 0.142592 0.887274 -0.438649 + 0.631543 6.67633 0.252485 0.164598 0.929064 -0.331281 + 0.707501 6.68331 0.327598 0.187633 0.937397 -0.293395 + 0.333038 6.47527 -0.196465 0.0718994 0.823045 -0.563407 + 0.359552 6.60168 -0.006219 0.124456 0.874143 -0.469451 + 0.452085 6.58861 0.004627 0.140861 0.880194 -0.453229 + 0.401713 6.71159 0.279412 0.123813 0.93763 -0.324839 + 0.526414 6.68102 0.225571 0.0944628 0.924418 -0.369496 + 0.204636 6.49173 -0.188379 0.0542598 0.823742 -0.564363 + 0.23115 6.61823 0.001916 0.0653113 0.872478 -0.484269 + 0.309179 6.72467 0.268558 0.13867 0.941593 -0.306878 + 0.072926 6.62302 0.00042 0.0159541 0.86912 -0.494343 + 0.052708 6.71495 0.189992 0.0152879 0.93025 -0.366607 + 0.210932 6.71016 0.191489 0.0954653 0.924458 -0.36914 + 0.150956 6.82104 0.562248 0.0391639 0.980834 -0.190868 + -0.072927 6.49919 -0.186687 -0.0199643 0.827386 -0.561278 + -0.072927 6.62302 0.00042 -0.0167477 0.868659 -0.495128 + -0.052709 6.71495 0.190001 -0.0153295 0.930253 -0.366599 + 0.052708 6.80653 0.485178 0.0184563 0.973096 -0.22966 + -0.204636 6.49173 -0.188379 -0.0533229 0.824431 -0.563445 + -0.23115 6.61823 0.001916 -0.0645307 0.872168 -0.484933 + -0.210932 6.71016 0.191489 -0.0954467 0.924459 -0.369142 + -0.052709 6.80653 0.485178 -0.0178497 0.972492 -0.232251 + 0.100983 6.86309 0.880213 0.0293859 0.99735 -0.0665491 + -0.333038 6.47527 -0.196465 -0.0791032 0.826543 -0.557288 + -0.359552 6.60168 -0.006219 -0.133421 0.867632 -0.478971 + -0.309181 6.72467 0.268558 -0.130659 0.937209 -0.323369 + -0.150957 6.82104 0.562248 -0.0420738 0.980531 -0.191803 + -0.464092 6.45655 -0.206243 -0.0954008 0.832238 -0.546148 + -0.452085 6.58861 0.004627 -0.133058 0.876516 -0.462617 + -0.401714 6.71159 0.279412 -0.13257 0.933801 -0.332326 + -0.371308 6.80834 0.581647 -0.118317 0.974849 -0.188863 + -0.579927 6.44836 -0.194862 -0.0836925 0.845523 -0.52734 + -0.56792 6.58042 0.016008 -0.130094 0.875833 -0.464749 + -0.526414 6.68102 0.225571 -0.0944586 0.924423 -0.369486 + -0.71216 6.44622 -0.185152 -0.101872 0.856561 -0.505891 + -0.673048 6.57573 0.04293 -0.136295 0.883186 -0.448782 + -0.631543 6.67633 0.252485 -0.164593 0.929057 -0.331303 + -0.496008 6.77776 0.527814 -0.133023 0.963023 -0.234291 + -0.732411 6.34592 -0.340623 -0.073803 0.831437 -0.550696 + -0.837548 6.44609 -0.14733 -0.123621 0.873256 -0.471318 + -0.798436 6.5756 0.080752 -0.192901 0.890874 -0.411257 + -0.707503 6.68331 0.327598 -0.190056 0.940027 -0.283246 + -0.888862 6.26743 -0.428478 -0.107564 0.77391 -0.624094 + -0.868633 6.33987 -0.329947 -0.0923583 0.838026 -0.537756 + -0.969017 6.44173 -0.130172 -0.155915 0.884453 -0.439811 + -0.928617 6.57474 0.155851 -0.202306 0.908179 -0.366448 + -0.837684 6.68236 0.402646 -0.217927 0.946081 -0.239662 + -1.02573 6.2497 -0.421567 -0.173619 0.759717 -0.626647 + -1.0001 6.33551 -0.31279 -0.151888 0.833586 -0.531097 + -1.09517 6.43098 -0.085945 -0.216241 0.88683 -0.408377 + -1.05477 6.5639 0.200029 -0.266321 0.908536 -0.321926 + -1.04659 6.17613 -0.498132 -0.193025 0.649367 -0.73557 + -1.18263 6.13625 -0.484056 -0.284942 0.620036 -0.731002 + -1.15742 6.23121 -0.400348 -0.268276 0.734648 -0.623153 + -1.13179 6.31711 -0.291521 -0.223336 0.824761 -0.51951 + -1.20237 6.05825 -0.532572 -0.30057 0.580825 -0.756505 + -1.33366 5.99449 -0.521319 -0.372503 0.560866 -0.739372 + -1.31319 6.09876 -0.457732 -0.365083 0.606388 -0.706405 + -1.28798 6.19373 -0.374023 -0.35047 0.69982 -0.622433 + -1.3349 5.85845 -0.632493 -0.398867 0.586366 -0.705039 + -1.4619 5.79162 -0.606549 -0.454494 0.552984 -0.698315 + -1.4557 5.94013 -0.49658 -0.428492 0.540229 -0.724257 + -1.43523 6.04441 -0.432993 -0.433556 0.583714 -0.686518 + -1.32284 5.6734 -0.794788 -0.423715 0.586801 -0.690022 + -1.44985 5.60658 -0.768845 -0.491605 0.549145 -0.675844 + -1.56957 5.53004 -0.731271 -0.551994 0.509857 -0.65981 + -1.5864 5.73574 -0.567952 -0.518539 0.514297 -0.683093 + -1.5802 5.88425 -0.457982 -0.508224 0.520687 -0.685998 + -1.32162 5.51598 -0.931716 -0.442257 0.574315 -0.688891 + -1.44808 5.44719 -0.897173 -0.509501 0.544854 -0.66599 + -1.5678 5.37064 -0.85959 -0.566267 0.52526 -0.635172 + -1.68818 5.29708 -0.806381 -0.613928 0.504444 -0.607148 + -1.68559 5.46478 -0.67924 -0.604512 0.47579 -0.638897 + -1.45903 5.31513 -0.996836 -0.504378 0.530727 -0.681125 + -1.58714 5.25355 -0.942585 -0.560605 0.527016 -0.63873 + -1.70753 5.17999 -0.889376 -0.613308 0.524746 -0.590335 + -1.77214 5.03741 -0.950809 -0.608362 0.528894 -0.591748 + -1.82292 5.09917 -0.833386 -0.666087 0.512101 -0.542293 + -1.79847 5.22373 -0.746933 -0.662188 0.48557 -0.570727 + -1.79588 5.39142 -0.619783 -0.661573 0.447363 -0.60182 + -1.70243 5.67048 -0.51592 -0.602907 0.471024 -0.643925 + -1.9316 5.02276 -0.765438 -0.71001 0.474878 -0.519977 + -1.90715 5.14732 -0.678985 -0.697412 0.46766 -0.543057 + -1.897 5.32413 -0.550839 -0.695725 0.430373 -0.575105 + -1.81169 5.61589 -0.444181 -0.66235 0.439633 -0.606642 + -2.01005 5.09055 -0.593649 -0.77042 0.412825 -0.485828 + -1.9999 5.26727 -0.465553 -0.74792 0.400571 -0.5293 + -1.91281 5.54861 -0.375237 -0.722968 0.411762 -0.55477 + -1.80395 5.77041 -0.338008 -0.665327 0.462519 -0.586017 + -1.69468 5.825 -0.409757 -0.593959 0.491624 -0.636804 + -2.10918 4.84592 -0.621343 -0.935996 0.261187 -0.235995 + -2.08717 5.00564 -0.514393 -0.83689 0.320051 -0.444053 + -2.08995 5.19612 -0.382712 -0.789898 0.359498 -0.496813 + -2.00236 5.46004 -0.309838 -0.767669 0.393788 -0.505585 + -2.09241 5.38889 -0.226996 -0.791638 0.381233 -0.477464 + -1.99624 5.61467 -0.200263 -0.772364 0.398713 -0.494451 + -1.90669 5.70315 -0.265712 -0.73627 0.439559 -0.514484 + -1.77442 5.8584 -0.300021 -0.655078 0.517386 -0.550623 + -1.66854 5.92133 -0.356405 -0.586813 0.546258 -0.597705 + -2.17516 5.30753 -0.147275 -0.830692 0.350951 -0.432186 + -2.1625 5.46109 -0.042254 -0.824536 0.377936 -0.421075 + -2.07975 5.54245 -0.121966 -0.798066 0.386985 -0.46188 + -1.96919 5.7342 -0.145894 -0.758833 0.460048 -0.461008 + -1.87717 5.79115 -0.227725 -0.713284 0.493917 -0.497263 + -2.12768 5.59788 0.023222 -0.824996 0.432441 -0.363835 + -2.0527 5.66198 -0.067605 -0.801166 0.435727 -0.410213 + -1.93369 5.85036 -0.06688 -0.745557 0.539725 -0.390949 + -1.84166 5.9073 -0.148702 -0.698959 0.558146 -0.447135 + -1.74535 5.96835 -0.215251 -0.652918 0.58248 -0.484164 + -2.08997 5.72607 0.107994 -0.810185 0.493532 -0.316268 + -2.01499 5.79017 0.017166 -0.787434 0.512829 -0.341986 + -1.89153 5.97644 0.048937 -0.724223 0.622166 -0.297339 + -1.80708 6.03468 -0.029536 -0.688262 0.642608 -0.336677 + -1.71078 6.09573 -0.096085 -0.641011 0.668949 -0.376313 + -2.16364 5.6606 0.195989 -0.818788 0.483639 -0.309321 + -2.04672 5.85449 0.217752 -0.783916 0.569111 -0.248171 + -1.97283 5.91634 0.133034 -0.761952 0.587214 -0.273145 + -1.90528 6.04599 0.268878 -0.707426 0.675412 -0.208248 + -1.8027 6.13603 0.252724 -0.67177 0.709909 -0.211552 + -2.1204 5.78911 0.305796 -0.790494 0.56386 -0.239125 + -2.02026 5.96716 0.478801 -0.746 0.645657 -0.163129 + -1.97917 5.98423 0.353645 -0.753105 0.635206 -0.171304 + -1.80372 6.21208 0.548196 -0.676236 0.724473 -0.133579 + -1.70115 6.30212 0.532041 -0.629631 0.768257 -0.115527 + -2.19036 5.72927 0.395052 -0.79939 0.552234 -0.236671 + -2.09022 5.90723 0.568006 -0.751131 0.63769 -0.170745 + -1.98507 6.07943 0.805954 -0.702069 0.704841 -0.101476 + -1.84481 6.19502 0.673343 -0.670561 0.733792 -0.109075 + -2.1847 5.826 0.672904 -0.771011 0.614444 -0.16733 + -2.07955 5.99811 0.910802 -0.706213 0.699721 -0.107953 + -1.84073 6.22417 1.02166 -0.639991 0.768235 -0.0150445 + -1.70047 6.33976 0.889043 -0.602231 0.797612 -0.033674 + -1.56641 6.42612 0.776263 -0.561146 0.826161 -0.0507359 + -1.93897 6.14683 1.14961 -0.635619 0.771678 -0.0224062 + -1.65102 6.35946 1.25932 -0.558442 0.827507 0.0581008 + -1.54913 6.43287 1.13137 -0.521506 0.851986 0.046378 + -1.41507 6.51924 1.01858 -0.460664 0.886927 0.0338941 + -1.74926 6.28213 1.38726 -0.565921 0.822091 0.0624477 + -1.47639 6.44575 1.47206 -0.491568 0.861513 0.127104 + -1.3745 6.51916 1.34411 -0.444877 0.89258 0.0733865 + -1.242 6.58068 1.29897 -0.383659 0.9206 0.0728071 + -1.50341 6.40817 1.60316 -0.481719 0.864848 0.141369 + -1.17018 6.56106 1.67595 -0.397218 0.90393 0.158521 + -1.03768 6.62266 1.63085 -0.354024 0.923295 0.148973 + -1.10299 6.64171 1.17946 -0.347552 0.936491 0.0468164 + -1.27606 6.58026 0.899078 -0.393067 0.919313 0.0190205 + -1.29037 6.45835 1.91044 -0.412719 0.888633 0.199984 + -1.19721 6.52356 1.8071 -0.395055 0.898605 0.190893 + -1.36416 6.39673 2.02638 -0.416889 0.884742 0.208411 + -1.08876 6.45985 2.22505 -0.335848 0.902488 0.269669 + -1.02113 6.51363 2.13009 -0.33801 0.902417 0.267195 + -0.92797 6.57875 2.02669 -0.320919 0.915024 0.244421 + -1.14603 6.40479 2.34221 -0.327107 0.898789 0.291853 + -0.883885 6.41497 2.54317 -0.28579 0.882641 0.373188 + -0.827271 6.46639 2.46352 -0.283355 0.895909 0.342136 + -0.759644 6.52008 2.36851 -0.26753 0.911118 0.313516 + -1.22438 6.35483 2.39954 -0.382324 0.863093 0.329997 + -0.962239 6.36502 2.60049 -0.303404 0.866472 0.39645 + -0.674401 6.34161 2.83165 -0.241724 0.854591 0.459613 + -0.644018 6.42086 2.69499 -0.238509 0.871949 0.427572 + -0.587404 6.47226 2.61534 -0.212713 0.888983 0.405539 + -0.93967 6.31905 2.71111 -0.301833 0.847859 0.435926 + -0.714553 6.27018 2.93436 -0.255892 0.844764 0.469992 + -0.488797 6.21125 3.14743 -0.201175 0.856603 0.475143 + -0.45681 6.34753 2.91038 -0.181123 0.86623 0.465661 + -0.426427 6.4267 2.77367 -0.152582 0.884218 0.441449 + -0.78341 6.18987 3.04706 -0.264561 0.846344 0.462287 + -0.557654 6.13094 3.26013 -0.212371 0.845696 0.489589 + -0.327175 6.15706 3.3087 -0.176016 0.856413 0.48536 + -0.295187 6.29334 3.07165 -0.148549 0.870543 0.469135 + -0.271816 6.35498 2.96229 -0.108517 0.88473 0.453296 + -0.997952 6.13756 2.99886 -0.32085 0.828644 0.458699 + -0.788677 6.06704 3.26661 -0.267711 0.830227 0.488931 + -0.756484 5.99632 3.3973 -0.253489 0.812226 0.525387 + -0.525461 6.06022 3.39082 -0.211965 0.830137 0.515696 + -1.00322 6.01473 3.21841 -0.328164 0.816944 0.474247 + -1.00086 5.90592 3.40228 -0.320699 0.794349 0.515908 + -0.741024 5.91316 3.52434 -0.254345 0.801365 0.541408 + -0.549237 5.97989 3.50496 -0.219053 0.815843 0.535179 + -0.985395 5.82275 3.52933 -0.304387 0.788377 0.534612 + -0.729783 5.82241 3.66751 -0.259229 0.808148 0.528863 + -0.537996 5.88923 3.64818 -0.224039 0.816147 0.532644 + -0.369525 6.00461 3.53995 -0.213401 0.819164 0.532381 + -0.345749 6.08485 3.42576 -0.197699 0.837667 0.509146 + -0.962693 5.72918 3.6804 -0.300143 0.794599 0.527756 + -0.706855 5.73509 3.81456 -0.254 0.803469 0.538443 + -0.530927 5.7715 3.8319 -0.219422 0.80903 0.545275 + -0.368029 5.82088 3.82297 -0.202632 0.809693 0.55076 + -0.375098 5.93861 3.63925 -0.214364 0.818796 0.532561 + -0.939765 5.64185 3.82745 -0.309069 0.776639 0.548916 + -0.693585 5.62984 3.97047 -0.250957 0.781071 0.571794 + -0.517658 5.66625 3.9878 -0.202269 0.780697 0.591269 + -0.355791 5.75569 3.91968 -0.174539 0.789348 0.588614 + -0.148623 5.95613 3.70132 -0.0584016 0.8319 0.551844 + -1.12536 5.39736 4.04032 -0.370535 0.719613 0.587249 + -0.887986 5.53922 3.99263 -0.311417 0.757896 0.573248 + -0.661059 5.50964 4.14565 -0.229294 0.759663 0.608553 + -0.488028 5.58849 4.09428 -0.174387 0.769752 0.614061 + -0.326162 5.67794 4.02615 -0.137856 0.770393 0.622487 + -1.08361 5.29444 4.18419 -0.366161 0.688324 0.626208 + -0.85546 5.41902 4.1678 -0.306028 0.728614 0.612754 + -0.593196 5.41042 4.28431 -0.20229 0.732127 0.650438 + -0.420165 5.48927 4.23294 -0.137508 0.754184 0.642104 + -1.02628 5.18841 4.32803 -0.349541 0.649715 0.675049 + -0.798127 5.31308 4.3117 -0.287399 0.691733 0.662501 + -0.503428 5.31304 4.41678 -0.177091 0.717075 0.674124 + -0.331182 5.372 4.38366 -0.103171 0.737736 0.66716 + -1.31486 5.02819 4.31615 -0.401351 0.614235 0.679435 + -0.960334 5.09124 4.44514 -0.334607 0.611648 0.716886 + -0.708359 5.21562 4.44412 -0.272532 0.659536 0.700527 + -0.460431 5.21435 4.5285 -0.165665 0.669186 0.724392 + -1.62324 4.86473 4.26848 -0.454643 0.594602 0.663135 + -1.24892 4.93102 4.43325 -0.382474 0.594292 0.707482 + -0.884017 5.00403 4.55201 -0.317914 0.619029 0.718146 + -0.632041 5.1284 4.55099 -0.254888 0.612736 0.748055 + -1.58155 4.72317 4.41606 -0.445776 0.563813 0.695269 + -1.52887 4.62331 4.52863 -0.448044 0.536642 0.715033 + -1.19624 4.83116 4.54582 -0.379405 0.602297 0.702346 + -0.8515 4.94003 4.62545 -0.291084 0.617352 0.730853 + -0.547303 5.02682 4.65352 -0.217263 0.593083 0.775274 + -1.85277 4.55415 4.36261 -0.511905 0.519943 0.683821 + -1.83964 4.42295 4.46545 -0.501523 0.469936 0.726385 + -1.74296 4.39244 4.5459 -0.48589 0.463178 0.7412 + -1.42798 4.54238 4.6458 -0.410508 0.495965 0.765181 + -1.16372 4.76716 4.61927 -0.363869 0.564561 0.740857 + -2.06263 4.2746 4.3916 -0.617155 0.406621 0.673631 + -1.98966 4.14767 4.51646 -0.567099 0.345091 0.747871 + -1.89297 4.11716 4.5969 -0.521703 0.329784 0.786809 + -1.64207 4.31151 4.66307 -0.458005 0.413415 0.786969 + -2.20914 4.07508 4.35018 -0.653686 0.320396 0.685596 + -2.13616 3.94806 4.47499 -0.638437 0.253364 0.726777 + -2.06758 3.85189 4.55996 -0.605943 0.209711 0.767368 + -1.82588 4.03272 4.66956 -0.51226 0.286029 0.8098 + -2.29894 4.09032 4.25959 -0.663449 0.320368 0.676166 + -2.38769 3.77091 4.29422 -0.691036 0.143444 0.708444 + -2.31605 3.69854 4.37297 -0.697383 0.0957499 0.710273 + -2.24747 3.60237 4.45794 -0.691897 0.0453037 0.720574 + -2.00049 3.76746 4.63261 -0.57921 0.171054 0.79703 + -2.47749 3.78615 4.20362 -0.721096 0.139234 0.678701 + -2.52876 3.47356 4.15646 -0.763446 -0.0618433 0.642904 + -2.45712 3.40119 4.2352 -0.735795 -0.0829159 0.672109 + -2.38262 3.31487 4.29711 -0.716712 -0.133858 0.684402 + -2.16285 3.53564 4.53012 -0.654839 0.000774119 0.755768 + -2.58947 3.5633 4.09222 -0.794708 -0.0122773 0.606867 + -2.61945 3.19332 3.97685 -0.796538 -0.174258 0.578931 + -2.55453 3.08603 4.02568 -0.7719 -0.206428 0.601298 + -2.48002 2.99971 4.08758 -0.742247 -0.229747 0.629512 + -2.65484 2.87294 3.79956 -0.831109 -0.243685 0.499875 + -2.58992 2.76565 3.84838 -0.799379 -0.259682 0.54181 + -2.51848 2.65663 3.89642 -0.768489 -0.278629 0.576013 + -2.40224 2.90154 4.13742 -0.725062 -0.247261 0.642765 + -2.298 3.24814 4.36929 -0.698267 -0.155859 0.698664 + -2.49612 2.30505 3.73457 -0.793725 -0.327676 0.512474 + -2.41321 2.20392 3.79012 -0.761936 -0.340561 0.550883 + -2.4407 2.55846 3.94625 -0.741223 -0.292733 0.604065 + -2.35401 2.47291 4.00843 -0.724726 -0.300728 0.619947 + -2.32092 2.82189 4.19837 -0.715456 -0.255906 0.650104 + -2.45458 1.99083 3.57362 -0.813558 -0.380307 0.439875 + -2.37167 1.88962 3.62912 -0.787821 -0.392009 0.475043 + -2.28419 1.81926 3.71338 -0.75858 -0.395006 0.518196 + -2.32652 2.11846 3.85235 -0.737533 -0.344721 0.580699 + -2.31407 1.63413 3.49404 -0.797395 -0.432701 0.420632 + -2.22659 1.56377 3.5783 -0.765635 -0.459395 0.450287 + -2.13417 1.51403 3.67706 -0.726652 -0.468889 0.502115 + -2.18866 1.74569 3.78762 -0.723026 -0.402654 0.561341 + -2.23098 2.04488 3.9266 -0.712166 -0.351209 0.607842 + -2.07879 1.30819 3.53959 -0.703278 -0.571865 0.422339 + -1.97879 1.26809 3.64004 -0.671623 -0.573026 0.469642 + -2.03389 1.46269 3.76477 -0.683843 -0.48238 0.54742 + -2.08837 1.69435 3.87533 -0.687656 -0.407438 0.600935 + -1.91628 1.1104 3.48777 -0.691861 -0.613134 0.381307 + -1.82446 1.06329 3.59595 -0.703252 -0.586234 0.402201 + -1.87287 1.23073 3.73175 -0.678957 -0.547529 0.489111 + -1.92797 1.42525 3.85644 -0.65843 -0.475953 0.583042 + -1.76298 0.90034 3.4572 -0.703044 -0.61733 0.353033 + -1.6807 0.861303 3.54682 -0.718566 -0.607542 0.33846 + -1.72597 1.01679 3.69349 -0.738108 -0.552772 0.386834 + -1.77437 1.18415 3.82923 -0.685666 -0.506026 0.523258 + -1.61585 0.687698 3.34331 -0.700927 -0.632266 0.330063 + -1.54136 0.704368 3.54803 -0.681439 -0.65312 0.330265 + -1.59424 0.805556 3.65557 -0.707943 -0.62312 0.332472 + -1.63951 0.960962 3.8022 -0.71875 -0.519554 0.46202 + -1.40911 0.598918 3.58948 -0.595074 -0.701076 0.392911 + -1.44189 0.682476 3.68675 -0.598353 -0.702993 0.384416 + -1.49477 0.783663 3.79429 -0.62331 -0.642359 0.445938 + -1.53374 0.918068 3.89229 -0.645928 -0.5159 0.562694 + -1.66388 1.13845 3.91159 -0.661103 -0.46324 0.590213 + -1.2922 0.579149 3.71252 -0.568148 -0.694064 0.442134 + -1.32498 0.662709 3.80979 -0.537153 -0.714817 0.447776 + -1.38252 0.755475 3.88891 -0.558105 -0.650717 0.514864 + -1.42149 0.88988 3.98692 -0.592683 -0.518961 0.61596 + -1.55811 1.09555 4.00168 -0.634315 -0.445343 0.631913 + -1.29235 0.517844 3.6271 -0.609013 -0.672287 0.420873 + -1.15834 0.476777 3.72603 -0.51464 -0.737264 0.437708 + -1.15819 0.538088 3.81144 -0.517753 -0.695951 0.497577 + -1.18742 0.628462 3.90511 -0.504468 -0.708502 0.493494 + -1.24496 0.721228 3.98423 -0.504889 -0.653722 0.56368 + -1.29105 0.465531 3.53131 -0.502943 -0.796814 0.334867 + -1.16866 0.443531 3.64062 -0.475527 -0.815731 0.329327 + -0.999028 0.407612 3.78343 -0.46603 -0.769689 0.436343 + -0.990719 0.457313 3.86275 -0.469713 -0.713855 0.519405 + -1.01995 0.547601 3.95636 -0.454461 -0.691665 0.561306 + -1.31012 0.446865 3.43944 -0.288667 -0.91798 0.272 + -1.18774 0.424785 3.54869 -0.392568 -0.886534 0.244841 + -1.00935 0.374284 3.69795 -0.425504 -0.872298 0.24092 + -0.889601 0.326565 3.73001 -0.410753 -0.885395 0.217618 + -0.878866 0.352189 3.81043 -0.412184 -0.803745 0.429067 + -1.19881 0.406289 3.46332 -0.399887 -0.860391 0.315939 + -1.02128 0.372296 3.6162 -0.358309 -0.922693 0.142307 + -0.901532 0.324581 3.64824 -0.404619 -0.908649 0.103156 + -0.818256 0.295757 3.73317 -0.382532 -0.897228 0.220572 + -0.807521 0.32129 3.81354 -0.356564 -0.827608 0.433505 + -1.19284 0.361408 3.37566 -0.358705 -0.867184 0.345431 + -1.03236 0.353714 3.53078 -0.33854 -0.914424 0.221855 + -0.911372 0.317569 3.56339 -0.388958 -0.907546 0.158343 + -0.829495 0.290214 3.64637 -0.401557 -0.908886 0.112597 + -1.19868 0.33381 3.29126 -0.323772 -0.888675 0.324697 + -1.04472 0.343259 3.44889 -0.260551 -0.940243 0.219219 + -0.923729 0.307112 3.4815 -0.351057 -0.920093 0.173745 + -0.839335 0.283289 3.56156 -0.386883 -0.913465 0.12611 + -1.20987 0.304616 3.20482 -0.319033 -0.889879 0.326088 + -1.05055 0.315746 3.36455 -0.261537 -0.915099 0.306906 + -0.931271 0.292165 3.39719 -0.321118 -0.912818 0.252285 + -0.842599 0.273449 3.47381 -0.355943 -0.922549 0.149022 + -1.22724 0.281244 3.12211 -0.259298 -0.93868 0.227253 + -1.0655 0.294472 3.2842 -0.251211 -0.918822 0.304399 + -0.94622 0.270982 3.31688 -0.269348 -0.913575 0.304684 + -0.850141 0.258502 3.3895 -0.318009 -0.925426 0.20605 + -1.3309 0.296182 3.03103 -0.39134 -0.893669 0.219565 + -1.25861 0.275212 3.03255 -0.336561 -0.911648 0.235848 + -1.08286 0.271099 3.20148 -0.292172 -0.881512 0.370906 + -0.955817 0.242177 3.23497 -0.25585 -0.882947 0.39363 + -0.848922 0.240285 3.30245 -0.263867 -0.928569 0.261024 + -1.27815 0.254457 2.9473 -0.411056 -0.87378 0.259888 + -1.10375 0.236451 3.12569 -0.390361 -0.827473 0.403615 + -0.976704 0.207529 3.15919 -0.257219 -0.864092 0.432647 + -0.858519 0.211475 3.22055 -0.204674 -0.896785 0.392282 + -1.27644 0.232753 2.85409 -0.415409 -0.880744 0.22743 + -1.12329 0.215782 3.04049 -0.389423 -0.865725 0.314438 + -0.987582 0.174583 3.08025 -0.274462 -0.889022 0.366483 + -0.862611 0.172535 3.13899 -0.18557 -0.893917 0.408014 + -1.27729 0.20953 2.76852 -0.396229 -0.90494 0.155195 + -1.1375 0.190275 2.96227 -0.437359 -0.844223 0.309846 + -1.00179 0.149073 3.00203 -0.304167 -0.889565 0.340817 + -0.87349 0.139587 3.06006 -0.178451 -0.904682 0.386918 + -1.13835 0.167054 2.87669 -0.448971 -0.848297 0.280744 + -1.00819 0.121292 2.91955 -0.320266 -0.884921 0.33815 + -0.87924 0.105543 2.97703 -0.192909 -0.916111 0.351464 + -0.740831 0.076886 2.95827 -0.108706 -0.939587 0.32459 + -0.735081 0.110928 3.0413 -0.136091 -0.924316 0.356538 + -1.0181 0.09005 2.83806 -0.310583 -0.899854 0.306268 + -0.885642 0.077761 2.89455 -0.181811 -0.940328 0.287626 + -0.740988 0.051478 2.87467 -0.0965122 -0.960605 0.26062 + -0.579673 0.064888 2.94204 -0.0474531 -0.964764 0.2588 + -0.574499 0.084859 3.02466 -0.0729616 -0.954356 0.289621 + -0.878345 0.056773 2.8081 -0.151753 -0.957061 0.246994 + -0.733691 0.030489 2.78823 -0.110125 -0.967569 0.227339 + -0.579831 0.039477 2.85846 -0.0353697 -0.956076 0.290978 + -0.41875 0.027249 2.82584 -0.0136209 -0.963887 0.265964 + -0.419744 0.045337 2.90591 -0.0571255 -0.974156 0.218534 + -0.723651 0.010684 2.70473 -0.10459 -0.971748 0.211581 + -0.578916 0.01297 2.77557 -0.0522859 -0.963274 0.263381 + -0.417835 0.000743 2.74295 -0.000300291 -0.968764 0.247986 + -0.252623 0.013328 2.77215 0.00742963 -0.973262 0.229576 + -0.253617 0.031415 2.85222 -0.0556276 -0.987708 0.146079 + -0.568876 -0.006835 2.69207 -0.0506149 -0.979906 0.192931 + -0.412647 -0.015497 2.66368 -0.00305939 -0.983551 0.180604 + -0.251053 -0.004567 2.69474 0.0250989 -0.978808 0.203234 + -0.139327 -0.007745 2.68045 0.0573897 -0.991061 0.120432 + -0.140897 0.010143 2.75787 -0.0912459 -0.979674 0.178644 + -0.399308 -0.028286 2.58303 -0.0233685 -0.998705 0.0451859 + -0.245864 -0.020802 2.61547 0.0529546 -0.986704 0.153659 + -0.137669 -0.014182 2.6022 0.111937 -0.988315 0.103456 + -0.086319 0.003583 2.70243 0.0140312 -0.999222 0.0368526 + -0.084593 0.005254 2.78074 -0.139591 -0.98695 0.0802788 + -0.245797 -0.028469 2.53855 0.0323361 -0.999338 0.0166495 + -0.137601 -0.021854 2.52529 0.189968 -0.981789 -0.0016456 + -0.084661 -0.002766 2.62423 0.0693223 -0.996505 0.0466067 + -0.043617 -0.005494 2.63555 -0.372329 -0.928101 0.000368724 + -0.045034 -0.004085 2.71171 -0.40235 -0.914846 0.0342334 + -0.133605 -0.016529 2.44927 0.21348 -0.968449 -0.128582 + -0.080051 -0.001158 2.54624 0.161011 -0.985857 -0.0464948 + -0.039007 -0.003886 2.55757 -0.344754 -0.934951 -0.0837376 + -0.01377 -0.02925 2.6329 -0.323546 -0.945656 -0.0324408 + -0.015187 -0.027839 2.70906 -0.325786 -0.943135 0.0660271 + -0.076054 0.004253 2.47027 0.215494 -0.971138 -0.102244 + -0.036398 0.005475 2.48295 -0.285958 -0.948344 -0.137374 + -0.01377 -0.022748 2.55703 -0.316563 -0.942784 -0.104624 + 0.013768 -0.022748 2.55703 0.31904 -0.942303 -0.101382 + 0.013768 -0.02925 2.6329 0.32558 -0.94486 -0.0351615 + -0.029931 0.017297 2.40708 -0.227768 -0.947469 -0.224554 + -0.01116 -0.013386 2.48242 -0.302209 -0.936814 -0.176206 + 0.011169 -0.013386 2.48242 0.305559 -0.934796 -0.181082 + 0.039005 -0.003886 2.55757 0.342515 -0.936062 -0.0804491 + 0.043615 -0.005498 2.63556 0.370629 -0.928779 -0.00204399 + -0.01116 0.005243 2.40935 -0.265884 -0.930501 -0.251939 + 0.011169 0.005243 2.40935 0.273892 -0.930536 -0.243077 + 0.036407 0.005475 2.48295 0.281456 -0.948855 -0.143028 + 0.080059 -0.001158 2.54624 -0.140097 -0.989657 -0.0308614 + 0.007227 0.024152 2.3404 0.247769 -0.908647 -0.336111 + 0.02994 0.017302 2.40707 0.223806 -0.950036 -0.217585 + 0.069587 0.016073 2.3944 -0.226598 -0.956161 -0.185498 + 0.076054 0.004253 2.47027 -0.219523 -0.97096 -0.0951173 + 0.025998 0.036207 2.33812 0.154177 -0.944426 -0.290325 + 0.05992 0.03462 2.32127 -0.247528 -0.94531 -0.212413 + 0.127574 -0.000582 2.37404 -0.187255 -0.96054 -0.205666 + 0.133604 -0.016529 2.44927 -0.203643 -0.971492 -0.121378 + 0.13761 -0.021854 2.52529 -0.197223 -0.980318 0.00891414 + 0.117906 0.017966 2.30092 -0.154899 -0.948701 -0.275631 + 0.229339 -0.00815 2.38615 0.0517479 -0.961788 -0.268862 + 0.23537 -0.024098 2.46137 -0.00772249 -0.990875 -0.134565 + 0.245797 -0.028469 2.53855 -0.0291239 -0.999364 0.0205959 + 0.137677 -0.014182 2.6022 -0.138502 -0.986774 0.0842314 + 0.198737 0.042713 2.24145 0.0790131 -0.938649 -0.3357 + 0.214261 0.01562 2.31178 0.0905312 -0.93267 -0.349187 + 0.367796 -0.000722 2.43029 0.115602 -0.939701 -0.321868 + 0.388881 -0.023827 2.5059 0.0613183 -0.982643 -0.17508 + 0.399308 -0.028286 2.58303 0.0142192 -0.998566 0.0516119 + 0.331539 0.051209 2.27994 0.100364 -0.937363 -0.333584 + 0.352718 0.023041 2.35593 0.10372 -0.93444 -0.340682 + 0.518198 0.003392 2.45356 0.035725 -0.963758 -0.264377 + 0.539283 -0.019714 2.52918 0.0662853 -0.985258 -0.15771 + 0.555538 -0.019623 2.61142 0.056973 -0.995726 0.072684 + 0.478334 0.050861 2.29834 -0.0256344 -0.965309 -0.259848 + 0.499512 0.022608 2.37428 0.00516555 -0.956491 -0.291716 + 0.675869 -0.000111 2.45303 0.0499337 -0.982121 -0.181507 + 0.686816 -0.008481 2.53812 0.0755558 -0.994653 -0.0704025 + 0.703071 -0.008483 2.62033 0.100154 -0.991217 0.0863581 + 0.637802 0.036659 2.29194 -0.0313835 -0.981711 -0.187772 + 0.657184 0.019105 2.37374 0.00435097 -0.974719 -0.223391 + 0.803247 0.008962 2.48331 0.156777 -0.978263 -0.135727 + 0.814194 0.000593 2.56841 0.11018 -0.99391 0.00170079 + 0.845861 0.012058 2.64355 0.115008 -0.982319 0.147725 + 0.768605 0.034296 2.32323 0.0225806 -0.990275 -0.137281 + 0.787987 0.016661 2.40498 0.162167 -0.96757 -0.193675 + 0.896145 0.022032 2.55048 0.285048 -0.928757 -0.236977 + 0.952262 0.022123 2.61172 0.20575 -0.978294 -0.0246542 + 0.983929 0.03359 2.68686 0.212968 -0.951543 0.221832 + 0.880885 0.02973 2.47214 0.194398 -0.976968 -0.0879949 + 1.03752 0.060968 2.49944 0.23423 -0.967839 -0.0917835 + 1.09364 0.061061 2.56068 0.341591 -0.938987 -0.0402388 + 1.11615 0.079097 2.63903 0.456861 -0.876657 0.150834 + 1.00619 0.064412 2.75787 0.275065 -0.923622 0.26695 + 1.02825 0.056105 2.41526 0.228605 -0.973314 0.0199946 + 1.22639 0.111645 2.32646 0.374927 -0.922438 0.0923994 + 1.22502 0.129205 2.42024 0.429713 -0.896987 0.103732 + 1.24753 0.147325 2.49866 0.491019 -0.863128 0.11794 + 1.35392 0.161294 2.23726 0.465482 -0.882209 0.0709454 + 1.35255 0.178855 2.33105 0.397579 -0.909946 0.118018 + 1.35813 0.192681 2.4271 0.373681 -0.915699 0.147845 + 1.25187 0.169242 2.5913 0.529284 -0.829683 0.177437 + 1.13842 0.10992 2.71005 0.500446 -0.841388 0.204009 + 1.4512 0.206969 2.31095 0.366363 -0.930147 0.0245943 + 1.45678 0.220883 2.40706 0.328811 -0.935288 0.13084 + 1.36247 0.214598 2.51974 0.365674 -0.914245 0.174468 + 1.35254 0.225228 2.60113 0.355286 -0.923857 0.142338 + 1.26171 0.195051 2.6764 0.486274 -0.864128 0.129692 + 1.50397 0.242657 2.18154 0.451819 -0.884025 -0.119834 + 1.5217 0.24162 2.28234 0.434757 -0.899392 -0.0456044 + 1.53175 0.243749 2.36965 0.435367 -0.897784 0.0666279 + 1.459 0.23882 2.50859 0.312116 -0.936378 0.160564 + 1.44907 0.249449 2.58998 0.316463 -0.935557 0.156793 + 1.56516 0.281298 2.16401 0.414802 -0.897318 -0.150865 + 1.57529 0.272073 2.23359 0.384713 -0.91638 -0.110652 + 1.58533 0.274293 2.32094 0.407199 -0.913049 -0.0230182 + 1.53396 0.261693 2.47117 0.32399 -0.939241 0.113384 + 1.4665 0.267522 2.65207 0.343452 -0.91679 0.203806 + 1.5508 0.28849 2.07756 0.423082 -0.894568 -0.144047 + 1.64876 0.321749 2.11335 0.337081 -0.933681 -0.120896 + 1.65888 0.312527 2.18292 0.369771 -0.920408 -0.126962 + 1.66021 0.306524 2.25632 0.379235 -0.922868 -0.0670414 + 1.59423 0.273512 2.3919 0.263957 -0.964513 -0.00646079 + 1.64886 0.328708 2.0401 0.303443 -0.945717 -0.116365 + 1.76637 0.36327 2.04343 0.317971 -0.947264 -0.0398122 + 1.75482 0.359828 2.1202 0.360645 -0.931714 -0.0429499 + 1.75615 0.353735 2.19355 0.373931 -0.922008 -0.100382 + 1.76647 0.370235 1.97017 0.265854 -0.961691 -0.0668771 + 1.86793 0.400675 1.98045 0.314336 -0.948909 0.0276645 + 1.85638 0.397236 2.0572 0.350977 -0.936184 0.0193697 + 1.85669 0.399638 2.13244 0.376879 -0.925698 -0.0323272 + 1.75317 0.342798 2.27029 0.383221 -0.920114 -0.0808235 + 1.86879 0.401352 1.82807 0.171887 -0.98507 0.00964778 + 1.86385 0.395455 1.90469 0.247719 -0.968823 -0.00403978 + 1.94478 0.420302 1.91885 0.238577 -0.966283 0.0968396 + 1.96191 0.434751 1.99342 0.30569 -0.948553 0.0824715 + 1.96222 0.437152 2.06866 0.364602 -0.927875 0.0781899 + 1.86227 0.396727 1.75169 0.0685158 -0.997487 -0.0180336 + 1.9283 0.401439 1.76872 0.0159164 -0.99211 0.124359 + 1.9407 0.415079 1.8431 0.141149 -0.984943 0.099819 + 2.01429 0.419449 1.81933 0.130007 -0.969133 0.209472 + 1.92178 0.396725 1.69229 -0.136905 -0.984372 0.110761 + 1.98152 0.381463 1.66792 -0.17876 -0.959764 0.216558 + 1.99393 0.39519 1.74235 0.00196946 -0.970289 0.241942 + 1.95386 0.34866 1.51534 -0.40336 -0.899508 0.167887 + 1.9663 0.36556 1.59087 -0.268356 -0.930241 0.250272 + 2.01282 0.326943 1.53155 0.00321771 -0.968741 0.248053 + 2.03896 0.355975 1.61187 0.193475 -0.944943 0.263913 + 2.05932 0.380315 1.68891 0.288418 -0.920179 0.264736 + 1.948 0.344573 1.43782 -0.419415 -0.897815 0.134237 + 1.9927 0.303234 1.36722 -0.216156 -0.972486 0.0868707 + 1.9976 0.311036 1.45451 -0.149816 -0.977921 0.145691 + 2.06555 0.327452 1.42387 0.453865 -0.885257 0.101614 + 1.98685 0.299233 1.28975 -0.357079 -0.929721 -0.0900791 + 2.04357 0.304913 1.25091 0.359107 -0.93321 -0.0126455 + 2.04846 0.312631 1.33814 0.398184 -0.915475 0.0579219 + 2.00194 0.314248 1.20674 -0.465474 -0.863371 -0.19474 + 2.05901 0.323441 1.07862 0.301738 -0.952336 -0.0448411 + 2.04391 0.308428 1.16162 0.165733 -0.976004 -0.141239 + 2.10624 0.362893 1.15849 0.574491 -0.815857 -0.0658557 + 2.11922 0.35999 1.24832 0.584053 -0.811367 -0.0237886 + 2.10658 0.366494 1.06925 0.61662 -0.787077 -0.0170255 + 2.18187 0.421666 0.948888 0.549531 -0.835362 -0.0136267 + 2.17853 0.415693 1.04723 0.503162 -0.861917 -0.062667 + 2.30227 0.493861 0.894243 0.593009 -0.804802 -0.025169 + 2.19151 0.412788 1.13706 0.558891 -0.828712 -0.0296052 + 2.1363 0.374728 1.33399 0.612072 -0.789991 0.0358038 + 2.09169 0.356484 1.50419 0.520052 -0.840202 0.153645 + 2.08491 0.41771 1.76634 0.400895 -0.880288 0.253725 + 2.09887 0.44334 1.84355 0.485498 -0.837264 0.251558 + 2.03142 0.433901 1.89389 0.252587 -0.946323 0.201673 + 2.04537 0.459445 1.97105 0.371276 -0.912266 0.172987 + 2.04911 0.470755 2.04646 0.497279 -0.847802 0.184243 + 1.96596 0.448469 2.14407 0.449456 -0.891475 0.0571081 + 1.85372 0.388614 2.20914 0.411948 -0.90918 -0.0607486 + 2.10762 0.50394 2.00259 0.639358 -0.723494 0.26034 + 2.05096 0.495578 2.12347 0.612678 -0.766037 0.194455 + 1.96174 0.44608 2.2196 0.536178 -0.839903 0.0841268 + 1.84949 0.386313 2.28472 0.464605 -0.88401 -0.0516566 + 2.11079 0.542994 2.08414 0.688071 -0.678793 0.256511 + 2.03672 0.499833 2.1991 0.661382 -0.725714 0.189508 + 1.9475 0.45034 2.29522 0.604801 -0.790978 0.0925665 + 2.10428 0.561698 2.16435 0.700684 -0.679434 0.217744 + 2.03022 0.518539 2.2793 0.688775 -0.703435 0.175409 + 1.93746 0.448136 2.37084 0.662402 -0.742008 0.103185 + 1.8517 0.375213 2.36135 0.520052 -0.853017 -0.0436667 + 2.10679 0.59144 2.24863 0.723006 -0.650297 0.233189 + 2.0094 0.513188 2.35317 0.71909 -0.667688 0.192616 + 1.91665 0.442783 2.44471 0.69935 -0.694684 0.168297 + 1.84167 0.373009 2.43697 0.575044 -0.814544 0.0764418 + 1.75909 0.327635 2.42095 0.367097 -0.929696 -0.0300774 + 2.18985 0.64336 2.1567 0.722375 -0.640196 0.261387 + 2.17752 0.67142 2.2417 0.724353 -0.620771 0.299926 + 2.09014 0.602258 2.3281 0.761244 -0.579975 0.290061 + 1.99275 0.524004 2.43263 0.759045 -0.606003 0.237931 + 2.25581 0.731185 2.16119 0.739712 -0.627614 0.242746 + 2.24337 0.743196 2.25178 0.728047 -0.608041 0.316597 + 2.1581 0.695131 2.32363 0.726893 -0.572109 0.379892 + 2.07072 0.626055 2.41008 0.788761 -0.498229 0.360033 + 2.33809 0.811585 2.13373 0.775889 -0.581839 0.243843 + 2.31965 0.836749 2.22674 0.785558 -0.465103 0.408139 + 2.21491 0.766721 2.33263 0.736101 -0.481272 0.475954 + 2.12964 0.71866 2.40448 0.740635 -0.456768 0.492771 + 2.44299 0.898732 1.98359 0.825074 -0.510951 0.241211 + 2.42456 0.923891 2.07661 0.824582 -0.495084 0.273783 + 2.41365 0.955533 2.1768 0.805677 -0.516127 0.290684 + 2.27852 0.865364 2.30618 0.753947 -0.502688 0.422929 + 2.17378 0.795248 2.41202 0.716012 -0.544692 0.43662 + 2.51609 1.00412 1.90324 0.906434 -0.382993 0.178026 + 2.50013 1.00485 1.98979 0.88627 -0.414877 0.205918 + 2.48922 1.03649 2.08999 0.867051 -0.450986 0.211742 + 2.3982 0.9821 2.26839 0.759202 -0.590496 0.273727 + 2.26307 0.891843 2.39772 0.707539 -0.670395 0.223515 + 2.5645 1.13589 1.89522 0.937552 -0.312947 0.151858 + 2.54855 1.13661 1.98176 0.923831 -0.35244 0.149408 + 2.55736 1.17874 2.0464 0.888205 -0.453412 0.0742183 + 2.49803 1.0787 2.15467 0.868311 -0.45539 0.196612 + 2.39503 1.02079 2.36737 0.766934 -0.592084 0.247486 + 2.61058 1.27381 1.93234 0.913306 -0.407036 0.0139468 + 2.57253 1.20236 2.14269 0.847912 -0.525126 0.0727171 + 2.49487 1.11738 2.25367 0.816979 -0.545548 0.186875 + 2.37461 1.04129 2.47787 0.745694 -0.636125 0.198206 + 2.24738 0.891026 2.48613 0.697465 -0.693427 0.180836 + 2.62575 1.29734 2.02858 0.905788 -0.423439 0.01569 + 2.65077 1.36379 2.06668 0.931364 -0.360836 0.0485618 + 2.57453 1.23392 2.24142 0.870335 -0.471684 0.14153 + 2.49688 1.14894 2.35241 0.790432 -0.588937 0.168432 + 2.66678 1.41571 2.12635 0.930563 -0.361042 0.0608322 + 2.59055 1.28584 2.3011 0.884862 -0.436871 0.161748 + 2.47789 1.15753 2.47854 0.800817 -0.552076 0.232175 + 2.35563 1.04979 2.60395 0.721874 -0.618021 0.311366 + 2.22697 0.911444 2.59657 0.710296 -0.635696 0.302276 + 2.76286 1.69898 2.15471 0.924898 -0.372068 0.0782903 + 2.70903 1.55131 2.28208 0.931146 -0.353674 0.0887814 + 2.63475 1.40743 2.3743 0.893463 -0.414586 0.172748 + 2.52209 1.27912 2.55174 0.842105 -0.457189 0.286071 + 2.78184 1.79753 2.44243 0.925221 -0.357334 0.127585 + 2.70756 1.65364 2.53465 0.906463 -0.376509 0.19122 + 2.64147 1.51538 2.56272 0.867698 -0.419687 0.266389 + 2.53871 1.40196 2.66698 0.855162 -0.444665 0.266404 + 2.41932 1.16569 2.65599 0.761665 -0.539585 0.358768 + 2.88684 2.14071 2.57242 0.932067 -0.309508 0.188296 + 2.83049 2.01008 2.62288 0.919731 -0.333562 0.206956 + 2.77132 1.88583 2.67448 0.904144 -0.356213 0.235873 + 2.70523 1.74766 2.70259 0.884542 -0.38671 0.260845 + 2.90666 2.30602 2.7003 0.934483 -0.262375 0.240625 + 2.85299 2.1988 2.7792 0.91438 -0.292627 0.279783 + 2.79381 2.07464 2.83085 0.901854 -0.315692 0.294954 + 2.73262 1.95246 2.88208 0.882984 -0.342887 0.320574 + 2.96667 2.61474 2.76017 0.954485 -0.196217 0.224625 + 2.92343 2.55214 2.87299 0.936017 -0.227377 0.268649 + 2.86976 2.44501 2.95194 0.918081 -0.257978 0.300955 + 2.81471 2.34254 3.02704 0.902224 -0.282631 0.325749 + 3.00339 2.67289 2.63705 0.970403 -0.162995 0.178185 + 2.97642 2.9104 2.94847 0.956962 -0.1669 0.237419 + 2.93318 2.84781 3.06129 0.942228 -0.193862 0.273172 + 2.88402 2.77684 3.17041 0.921825 -0.224337 0.316088 + 2.82897 2.67436 3.24551 0.906141 -0.25235 0.339453 + 3.00934 2.93258 2.81406 0.972651 -0.138453 0.186499 + 3.01648 3.21906 2.97146 0.975071 -0.11567 0.18936 + 2.98356 3.19688 3.10587 0.962453 -0.143341 0.230518 + 2.94526 3.14078 3.22244 0.948179 -0.170598 0.268054 + 2.8961 3.06982 3.33155 0.932595 -0.197519 0.30208 + 3.03511 2.96217 2.67901 0.982085 -0.118509 0.14651 + 3.04144 3.2511 2.84297 0.983367 -0.0948271 0.154909 + 3.01927 3.52656 3.11545 0.978498 -0.0149116 0.205719 + 2.99093 3.47223 3.23235 0.966157 -0.0494565 0.253171 + 2.95263 3.41614 3.34891 0.95105 -0.0763788 0.299451 + 3.0629 3.26618 2.70544 0.989341 -0.0763806 0.123976 + 3.04423 3.55852 2.9869 0.986128 0.00244653 0.165971 + 2.99013 3.85874 3.14489 0.964082 0.163447 0.209359 + 2.9702 3.80311 3.25965 0.957335 0.127249 0.259456 + 2.94185 3.7487 3.3765 0.945998 0.100162 0.308311 + 3.06202 3.59362 2.8587 0.990462 0.0215801 0.136082 + 3.00792 3.89376 3.01664 0.969245 0.167505 0.180294 + 2.88357 4.12758 3.30345 0.921376 0.274884 0.274781 + 2.86363 4.07195 3.41821 0.903764 0.26524 0.335944 + 2.84151 4.00321 3.52207 0.890837 0.242976 0.38389 + 3.02245 3.93634 2.89569 0.970236 0.182804 0.158821 + 2.89556 4.19064 3.19443 0.922974 0.300742 0.240153 + 2.77869 4.4125 3.29715 0.850838 0.436739 0.29212 + 2.76669 4.34953 3.40622 0.835236 0.40272 0.374429 + 2.71836 4.34324 3.50512 0.79382 0.42622 0.433804 + 3.03632 3.96331 2.76538 0.973727 0.180416 0.138948 + 2.91008 4.23313 3.07343 0.924412 0.308683 0.224003 + 2.75332 4.51485 3.20068 0.832435 0.468175 0.296418 + 2.58702 4.62271 3.40426 0.753415 0.53316 0.384844 + 2.53868 4.61643 3.50315 0.740639 0.539317 0.400737 + 3.04793 4.00287 2.62426 0.975742 0.194576 0.100334 + 2.92507 4.27844 2.95516 0.931997 0.296361 0.208689 + 2.76831 4.56016 3.08241 0.838401 0.451904 0.304739 + 2.59133 4.8202 3.1034 0.759681 0.554875 0.339113 + 2.56165 4.72498 3.30773 0.743484 0.551602 0.378109 + 3.04409 4.0802 2.45051 0.976736 0.204721 0.0638477 + 2.93668 4.31809 2.81409 0.943916 0.285296 0.166219 + 2.82002 4.55769 2.95729 0.865283 0.411798 0.285845 + 3.0344 4.15634 2.33024 0.973152 0.228878 0.0242978 + 2.944 4.36891 2.69926 0.945532 0.289744 0.148386 + 2.82734 4.60859 2.84251 0.87868 0.435125 0.196435 + 2.64304 4.81781 2.97834 0.785292 0.538568 0.305387 + 3.01826 4.2199 2.21454 0.972814 0.231584 -0.000810247 + 2.93431 4.44513 2.57904 0.939594 0.320855 0.119229 + 2.7918 4.70423 2.76488 0.857076 0.466827 0.217929 + 2.6075 4.91344 2.9007 0.769773 0.556263 0.313083 + 2.39792 5.14652 2.96539 0.719119 0.603699 0.344114 + 2.99596 4.31437 2.09793 0.970352 0.241258 -0.0145129 + 2.92178 4.51901 2.47688 0.942928 0.316274 0.104198 + 2.77926 4.7781 2.66272 0.853473 0.463221 0.238767 + 2.61275 4.99135 2.73675 0.778012 0.562199 0.280409 + 2.40318 5.22443 2.80145 0.733661 0.604146 0.311045 + 2.97314 4.39094 1.99271 0.970512 0.240119 -0.0212097 + 2.89948 4.61338 2.36022 0.945029 0.318085 0.0757767 + 2.80347 4.81152 2.51723 0.876333 0.438116 0.200233 + 2.63696 5.02486 2.59132 0.788889 0.563776 0.244562 + 2.41336 5.32076 2.59061 0.743277 0.601154 0.293517 + 2.95514 4.4525 1.85547 0.972238 0.230399 -0.0408542 + 2.87809 4.72406 2.17391 0.941433 0.333482 0.0499389 + 2.78208 4.9222 2.33093 0.869906 0.475416 0.131313 + 2.73025 5.03293 2.22795 0.851495 0.517468 0.0847543 + 2.58513 5.13559 2.48833 0.78646 0.567862 0.242929 + 2.92916 4.53973 1.75878 0.966881 0.251215 -0.0450822 + 2.86009 4.78554 2.03663 0.922881 0.385037 -0.00606439 + 2.84193 4.80944 1.90563 0.925108 0.379538 -0.0112586 + 2.71208 5.05683 2.09695 0.874878 0.482649 0.04049 + 2.56369 5.28679 2.23664 0.812925 0.549223 0.19367 + 2.39192 5.47197 2.33891 0.737031 0.616664 0.276605 + 2.70169 5.11875 1.9311 0.889085 0.44734 0.0970254 + 2.55329 5.34863 2.07074 0.828516 0.543798 0.133585 + 2.36036 5.57092 2.18392 0.741282 0.635063 0.217245 + 2.1445 5.69545 2.42503 0.665438 0.6831 0.300943 + 2.33453 5.63576 2.06221 0.747108 0.641041 0.175771 + 2.104 5.84604 2.1598 0.66803 0.701579 0.248037 + 2.11294 5.7944 2.27003 0.663853 0.690611 0.286975 + 2.30026 5.70265 1.96015 0.74683 0.650257 0.139322 + 2.06973 5.91293 2.05774 0.661925 0.709017 0.243206 + 1.8082 6.0823 2.18638 0.566887 0.767757 0.298645 + 1.87858 6.009 2.24893 0.590669 0.761627 0.266522 + 1.88752 5.95737 2.35916 0.585268 0.739929 0.331611 + 2.28482 5.73189 1.88371 0.749847 0.643049 0.155617 + 2.0302 5.98832 1.94595 0.645917 0.736043 0.202563 + 1.76867 6.15769 2.07459 0.558241 0.786444 0.264335 + 1.72022 6.22202 1.95958 0.530466 0.825945 0.190844 + 1.4699 6.27735 2.25855 0.478487 0.824361 0.302455 + 1.50251 6.21269 2.36954 0.49058 0.801251 0.342531 + 1.57288 6.13948 2.43215 0.520422 0.781245 0.344699 + 1.36416 6.39673 2.02638 0.418071 0.884161 0.208509 + 1.42144 6.34167 2.14354 0.438627 0.866187 0.23943 + 1.22438 6.35483 2.39954 0.382326 0.863093 0.329997 + 1.29037 6.45835 1.91044 0.413127 0.888746 0.198635 + 1.08876 6.45985 2.22505 0.337227 0.903197 0.265542 + 1.14603 6.40479 2.34221 0.333728 0.896316 0.291963 + 0.962238 6.36502 2.60049 0.303487 0.866417 0.396505 + 1.25699 6.29017 2.51054 0.416426 0.818026 0.396766 + 1.19721 6.52356 1.8071 0.395743 0.898278 0.191008 + 0.92797 6.57875 2.02669 0.320666 0.914523 0.246619 + 1.02113 6.51363 2.13009 0.335588 0.903247 0.267443 + 0.827272 6.46639 2.46352 0.2759 0.89805 0.342615 + 0.883886 6.41497 2.54317 0.283659 0.880641 0.379486 + 1.50341 6.40817 1.60316 0.481439 0.864822 0.142477 + 1.47639 6.44575 1.47206 0.491586 0.861509 0.127067 + 1.17018 6.56106 1.67595 0.397142 0.903978 0.158438 + 1.03768 6.62266 1.63085 0.354249 0.922635 0.152485 + 1.3745 6.51916 1.34411 0.444843 0.892595 0.0734048 + 1.242 6.58068 1.29897 0.38719 0.919204 0.0717442 + 1.41507 6.51924 1.01858 0.459762 0.887813 0.020166 + 1.10298 6.64171 1.17946 0.347351 0.936704 0.0439558 + 0.911761 6.6831 1.53417 0.316562 0.941743 0.113614 + 1.27606 6.58026 0.899078 0.406722 0.913409 0.016194 + 0.960672 6.69594 1.07172 0.310669 0.950148 0.0265456 + 0.769448 6.73725 1.42637 0.273924 0.95876 0.0757916 + 0.698665 6.70618 1.81299 0.269257 0.941558 0.20241 + 1.34251 6.55074 0.580817 0.451397 0.886043 -0.105678 + 1.19359 6.61972 0.794943 0.361378 0.932412 -0.00367437 + 1.05861 6.66359 0.798562 0.306181 0.951637 -0.025301 + 0.734752 6.76539 0.984238 0.275986 0.961056 0.0142514 + 0.664641 6.76811 1.36752 0.252908 0.965384 0.0638015 + 1.45582 6.44337 0.366384 0.500004 0.834441 -0.231745 + 1.23376 6.59237 0.537905 0.342467 0.923487 -0.172881 + 1.09878 6.63633 0.541574 0.296987 0.943048 -0.149862 + 0.832688 6.73303 0.711083 0.266769 0.960664 -0.0771992 + 0.593452 6.80476 0.946639 0.241569 0.970304 -0.0124353 + 1.28241 6.49882 0.24295 0.391359 0.886621 -0.246457 + 1.17419 6.54288 0.259035 0.314415 0.913465 -0.25831 + 0.979355 6.65734 0.482576 0.267833 0.943903 -0.193167 + 0.837682 6.68236 0.402646 0.22827 0.942763 -0.243087 + 0.691015 6.75805 0.631154 0.240113 0.96354 -0.118057 + 0.571966 6.78465 0.602867 0.157263 0.975067 -0.156566 + 0.474402 6.83137 0.918353 0.173058 0.983976 -0.0429265 + 0.435957 6.83259 1.30843 0.190581 0.979422 0.0664219 + 0.523341 6.80757 1.32997 0.246637 0.965911 0.0786573 + 0.533797 6.77079 1.67088 0.175863 0.975253 0.133994 + 0.496008 6.77776 0.527806 0.133089 0.963008 -0.234315 + 0.371306 6.80834 0.581647 0.114747 0.974147 -0.194603 + 0.321333 6.85039 0.899611 0.0956722 0.993856 -0.0556407 + 0.100983 6.86306 1.27106 0.0305822 0.999006 0.0324287 + 0.282888 6.85153 1.28964 0.0888201 0.995273 0.0392824 + 0.242537 6.83233 1.5989 0.0966845 0.986142 0.134818 + 0.325972 6.80725 1.68334 0.171629 0.965591 0.195392 + 0.413356 6.78223 1.70487 0.172374 0.969258 0.175573 + -0.100983 6.86309 0.880213 -0.0301542 0.997468 -0.0644153 + -0.100983 6.86306 1.27106 -0.0311355 0.999008 0.031849 + -0.060632 6.84387 1.58031 -0.0238566 0.991803 0.125525 + 0.060632 6.84387 1.58031 0.023854 0.991803 0.125527 + -0.321333 6.85039 0.899611 -0.0952661 0.993922 -0.0551612 + -0.282888 6.85153 1.28964 -0.0884482 0.99533 0.0386617 + -0.242537 6.83233 1.5989 -0.0966814 0.986149 0.134768 + -0.060632 6.77963 1.91316 -0.0333648 0.975356 0.218101 + 0.060632 6.77963 1.91316 0.0331918 0.975788 0.216185 + -0.474402 6.83137 0.918353 -0.174478 0.983844 -0.0400988 + -0.435957 6.83259 1.30843 -0.19441 0.978914 0.0626998 + -0.325972 6.80725 1.68334 -0.166641 0.969998 0.177017 + -0.144067 6.75447 1.99756 -0.0560148 0.970728 0.23356 + 0.050108 6.70567 2.20727 0.0191598 0.94888 0.315055 + -0.571968 6.78465 0.602867 -0.165925 0.972859 -0.16129 + -0.593452 6.80476 0.946639 -0.238817 0.971014 -0.00991598 + -0.523341 6.80757 1.32997 -0.2448 0.966687 0.0747638 + -0.413356 6.78223 1.70487 -0.184286 0.968488 0.16754 + -0.294177 6.73724 2.02838 -0.116182 0.964747 0.236148 + -0.691017 6.75805 0.631154 -0.234265 0.962265 -0.138439 + -0.832686 6.73303 0.711083 -0.274443 0.958242 -0.0803349 + -0.734753 6.76539 0.984238 -0.275625 0.961175 0.0131982 + -0.664642 6.76811 1.36752 -0.2502 0.965978 0.0654683 + -0.533797 6.77079 1.67088 -0.175863 0.975253 0.133995 + -0.979353 6.65735 0.482567 -0.273644 0.946061 -0.17346 + -1.05861 6.66359 0.798562 -0.302155 0.952641 -0.0343206 + -0.960673 6.69594 1.07172 -0.311622 0.949848 0.0260678 + -0.769449 6.73725 1.42637 -0.274441 0.958434 0.0780185 + -0.638605 6.73993 1.72974 -0.250156 0.954856 0.160226 + -1.09878 6.63633 0.541574 -0.276758 0.950898 -0.138558 + -1.23376 6.59237 0.537905 -0.342433 0.923507 -0.172844 + -1.19359 6.61972 0.794943 -0.361331 0.93243 -0.00374486 + -1.17419 6.54288 0.259035 -0.310508 0.912125 -0.267606 + -1.28241 6.49882 0.24295 -0.39136 0.886621 -0.246455 + -1.34707 6.48501 0.323472 -0.424825 0.876972 -0.224598 + -1.34251 6.55074 0.580817 -0.451397 0.886043 -0.10568 + -1.42498 6.51129 0.684952 -0.49995 0.864578 -0.050538 + -1.22271 6.41721 -0.052703 -0.252991 0.892369 -0.373729 + -1.33093 6.37315 -0.068788 -0.368897 0.852815 -0.369623 + -1.44807 6.32948 -0.029744 -0.486297 0.810333 -0.326919 + -1.51273 6.31567 0.050778 -0.551009 0.792421 -0.261646 + -1.45582 6.44337 0.366384 -0.504725 0.837727 -0.208485 + -1.25933 6.30343 -0.25822 -0.296176 0.796449 -0.527209 + -1.38258 6.26348 -0.226426 -0.417446 0.756406 -0.503576 + -1.49973 6.2198 -0.187381 -0.500136 0.727892 -0.469082 + -1.60914 6.16113 -0.145152 -0.587997 0.696925 -0.410556 + -1.61436 6.25035 0.099903 -0.599716 0.759521 -0.251929 + -1.41123 6.15387 -0.342177 -0.436526 0.669571 -0.600932 + -1.53005 6.08995 -0.313864 -0.514859 0.636253 -0.574545 + -1.63947 6.03127 -0.271635 -0.585603 0.608756 -0.535242 + -1.55406 5.9805 -0.404688 -0.506626 0.564371 -0.651778 + -1.55972 6.38729 0.440731 -0.571692 0.803866 -0.164217 + -1.71826 6.19427 0.17425 -0.636188 0.735213 -0.233939 + -0.911762 6.6831 1.53417 -0.320456 0.940593 0.112216 + -0.824584 6.64574 1.90967 -0.340674 0.910563 0.234127 + -0.698665 6.70618 1.81299 -0.269471 0.942128 0.199449 + -0.414618 6.72581 1.99439 -0.172457 0.958678 0.226262 + -0.822126 6.61587 2.016 -0.296806 0.916931 0.266727 + -0.531952 6.66896 2.12045 -0.216813 0.939927 0.263683 + -0.474679 6.69206 2.07765 -0.18791 0.948779 0.253983 + -0.269292 6.67497 2.26263 -0.0982188 0.937131 0.334871 + -0.200218 6.68836 2.23805 -0.0539781 0.943883 0.325838 + -0.581012 6.59979 2.28966 -0.258779 0.903052 0.342826 + -0.529493 6.63918 2.22683 -0.206439 0.928025 0.310086 + -0.349068 6.61759 2.37783 -0.140586 0.909918 0.390237 + -0.326565 6.65188 2.30544 -0.147469 0.921502 0.359285 + -0.686856 6.56267 2.30035 -0.269102 0.911541 0.31093 + -0.499961 6.55393 2.46969 -0.173136 0.921233 0.348358 + -0.400587 6.57829 2.44071 -0.159405 0.911399 0.379396 + -0.572748 6.51135 2.53785 -0.227197 0.897176 0.378757 + -0.373621 6.51423 2.60505 -0.120892 0.903409 0.411385 + -0.274247 6.53868 2.5761 -0.0639589 0.911777 0.405674 + -0.141685 6.57025 2.50863 -0.0249631 0.911647 0.410215 + -0.119182 6.60453 2.43624 -0.0373573 0.909668 0.413653 + -0.388277 6.47524 2.68259 -0.121005 0.897519 0.42405 + -0.176785 6.43005 2.81825 -0.0228194 0.905372 0.424005 + -0.044223 6.46171 2.75082 -0.000832044 0.906535 0.42213 + 0.044223 6.46171 2.75082 0.000973426 0.905695 0.423929 + -0.050108 6.61792 2.41166 -0.0153402 0.913002 0.407666 + -0.233666 6.40344 2.87116 -0.0584052 0.901238 0.429371 + -0.044223 6.18267 3.32274 -0.00301525 0.895771 0.444507 + 0.044223 6.18267 3.32274 -0.000375389 0.883408 0.468604 + -0.101104 6.15596 3.37559 -0.0433475 0.880086 0.472831 + -0.124475 6.09432 3.48496 -0.0505963 0.858728 0.509928 + -0.14305 6.0222 3.60207 -0.0458803 0.838137 0.543526 + -0.136385 5.89102 3.79808 -0.0231056 0.815036 0.578949 + -0.096861 5.82595 3.88378 -0.00610063 0.798814 0.601546 + -0.033595 5.77673 3.94804 -0.0139803 0.7893 0.613849 + 0.033595 5.77673 3.94804 0.0141317 0.790106 0.612808 + 0.096861 5.82595 3.88378 -0.000654557 0.802035 0.597277 + 0.136385 5.89102 3.79808 0.00216317 0.818883 0.573956 + 0.148623 5.95613 3.70132 0.0301867 0.834556 0.550095 + 0.143051 6.0222 3.60207 -0.0164265 0.836582 0.547595 + 0.124475 6.09432 3.48496 -0.00245258 0.855128 0.518411 + 0.101105 6.15596 3.37559 0.0263383 0.877671 0.478539 + 0.176785 6.43005 2.81825 0.0228409 0.905335 0.424085 + -0.286638 5.61296 4.1119 -0.106085 0.761138 0.639855 + -0.197655 5.49568 4.26263 -0.0848229 0.748889 0.657245 + -0.134389 5.44638 4.32683 -0.0988236 0.7263 0.680237 + -0.033595 5.41581 4.36878 -0.0330103 0.725782 0.687132 + 0.033595 5.41581 4.36878 0.0330103 0.725782 0.687132 + -0.288186 5.27331 4.49538 -0.0325709 0.704378 0.709077 + -0.237468 5.2187 4.54617 -0.0183962 0.672358 0.739997 + -0.158013 5.22322 4.54455 -0.0644347 0.680698 0.729725 + -0.057219 5.19265 4.58649 -0.0441369 0.651127 0.757684 + -0.375693 5.11286 4.63109 -0.125624 0.626574 0.769171 + -0.324975 5.05817 4.68183 -0.0774454 0.606328 0.791435 + -0.257627 4.99574 4.73155 -0.0446107 0.574868 0.817029 + -0.178172 5.00026 4.72992 -0.00741539 0.578774 0.815455 + -0.551165 4.9418 4.71679 -0.210525 0.561817 0.800025 + -0.449579 4.90913 4.76317 -0.164434 0.535735 0.82822 + -0.38223 4.84671 4.81289 -0.136734 0.522014 0.841905 + -0.332603 4.78451 4.85881 -0.0824376 0.486759 0.869638 + -0.203725 4.79747 4.85657 -0.00671893 0.478783 0.877908 + -0.855362 4.85492 4.68866 -0.282521 0.544077 0.790039 + -0.770678 4.77739 4.76376 -0.247181 0.491926 0.834812 + -0.669092 4.74481 4.81019 -0.23065 0.485812 0.843082 + -0.572613 4.68144 4.87434 -0.217462 0.483731 0.84777 + -0.522986 4.61924 4.92026 -0.175539 0.407963 0.895964 + -1.07525 4.67905 4.71547 -0.319774 0.496196 0.807176 + -0.990563 4.60152 4.79056 -0.277527 0.448864 0.849411 + -0.88492 4.49976 4.87041 -0.266447 0.430218 0.862507 + -0.788441 4.43648 4.93462 -0.225488 0.36933 0.901527 + -1.33951 4.45427 4.74201 -0.37003 0.442199 0.81703 + -1.22576 4.32411 4.85146 -0.321498 0.388917 0.863355 + -1.12011 4.22243 4.93136 -0.275099 0.33054 0.902809 + -1.55192 4.20397 4.75893 -0.425889 0.36072 0.829759 + -1.43817 4.07381 4.86839 -0.37616 0.307449 0.874059 + -1.33197 3.94823 4.94689 -0.323093 0.246229 0.913774 + -1.0017 4.09007 5.00022 -0.214451 0.252546 0.943521 + -1.73573 3.92518 4.76543 -0.498636 0.260969 0.826594 + -1.65182 3.80226 4.84653 -0.456603 0.201046 0.866657 + -1.54562 3.67677 4.92508 -0.406468 0.136203 0.903456 + -1.21356 3.81596 5.0158 -0.253457 0.185034 0.949485 + -1.91851 3.68226 4.70637 -0.571773 0.150984 0.806399 + -1.8346 3.55934 4.78748 -0.524896 0.090492 0.846342 + -1.80006 3.43825 4.8144 -0.519398 0.0106398 0.854466 + -1.70185 3.41556 4.86911 -0.46405 0.011331 0.885737 + -1.42499 3.56737 4.98257 -0.348271 0.0874058 0.93331 + -2.08087 3.45036 4.60384 -0.656406 -0.0199555 0.754144 + -2.00319 3.36563 4.66239 -0.645437 -0.0447652 0.7625 + -1.96864 3.24454 4.68932 -0.671268 -0.0820945 0.736654 + -1.89171 3.14942 4.73467 -0.571543 -0.156056 0.805596 + -1.79349 3.12682 4.78942 -0.495968 -0.163429 0.852823 + -2.21668 3.16849 4.43025 -0.69954 -0.16886 0.694356 + -2.13899 3.08376 4.4888 -0.69583 -0.186715 0.693512 + -2.05366 3.01292 4.5517 -0.686012 -0.20679 0.697585 + -1.97672 2.9178 4.59705 -0.65711 -0.255404 0.709207 + -1.87899 2.85807 4.65711 -0.571738 -0.287899 0.768265 + -2.23071 2.75267 4.26706 -0.705719 -0.266491 0.656463 + -2.14538 2.68183 4.32996 -0.688711 -0.285678 0.666382 + -2.04499 2.64384 4.41137 -0.652489 -0.309448 0.691737 + -1.94726 2.5841 4.47144 -0.605363 -0.340779 0.719309 + -2.2638 2.40369 4.07712 -0.703425 -0.309465 0.639863 + -2.16569 2.34754 4.15417 -0.680711 -0.320905 0.658523 + -2.06529 2.30954 4.23558 -0.647659 -0.3342 0.684725 + -1.95764 2.27166 4.3132 -0.60289 -0.347635 0.718104 + -1.83623 2.54914 4.541 -0.554325 -0.360572 0.750141 + -2.13287 1.98865 4.00359 -0.679998 -0.357046 0.640407 + -2.02705 1.9426 4.08575 -0.647034 -0.363228 0.670383 + -1.9194 1.90472 4.16336 -0.609956 -0.367102 0.702275 + -1.80501 1.87262 4.24177 -0.577531 -0.366554 0.729449 + -1.8466 2.2367 4.38276 -0.566467 -0.355253 0.743579 + -1.98256 1.64831 3.95749 -0.654883 -0.411626 0.633792 + -1.87276 1.60828 4.04202 -0.622294 -0.40827 0.667882 + -1.75837 1.57617 4.12042 -0.594053 -0.396851 0.699722 + -1.64331 1.53754 4.19673 -0.571927 -0.388873 0.722272 + -1.69093 1.83115 4.30698 -0.550829 -0.362976 0.751555 + -1.81817 1.38522 3.94096 -0.643166 -0.457579 0.613969 + -1.70767 1.33952 4.02331 -0.623372 -0.439719 0.646571 + -1.59261 1.30081 4.09957 -0.596504 -0.417843 0.685266 + -1.47608 1.25865 4.17559 -0.577431 -0.406186 0.708228 + -1.52366 1.5029 4.26593 -0.552043 -0.375918 0.744267 + -1.57128 1.79651 4.37618 -0.520854 -0.35673 0.775535 + -1.73252 2.19524 4.44797 -0.536168 -0.356916 0.764941 + -1.44158 1.0534 4.07769 -0.590086 -0.436629 0.679083 + -1.32338 1.02894 4.16285 -0.563054 -0.437388 0.701186 + -1.35746 1.22365 4.248 -0.558534 -0.397408 0.728084 + -1.40504 1.46782 4.33829 -0.549269 -0.363803 0.752297 + -1.3033 0.865423 4.07208 -0.540708 -0.525265 0.657063 + -1.17891 0.862822 4.16378 -0.500702 -0.532997 0.682064 + -1.2026 1.0051 4.24194 -0.530501 -0.446044 0.720842 + -1.23668 1.19981 4.3271 -0.529513 -0.393947 0.75128 + -1.12057 0.718627 4.07593 -0.452997 -0.630202 0.630587 + -1.00324 0.698969 4.13638 -0.417269 -0.645693 0.639506 + -1.05235 0.848683 4.24327 -0.460874 -0.549519 0.696867 + -1.07604 0.990964 4.32143 -0.496606 -0.450763 0.741751 + -0.902619 0.527941 4.01681 -0.342193 -0.679927 0.648539 + -0.823602 0.487744 4.00924 -0.312669 -0.706346 0.63507 + -0.870688 0.690466 4.21011 -0.346131 -0.651755 0.67484 + -0.919796 0.840262 4.31706 -0.395413 -0.570516 0.719833 + -0.870557 0.401885 3.88975 -0.376331 -0.732886 0.566792 + -0.79154 0.361685 3.88218 -0.308815 -0.748816 0.586436 + -0.684415 0.310778 3.87075 -0.315437 -0.755333 0.574432 + -0.698136 0.433094 4.01169 -0.310837 -0.717754 0.623064 + -0.745222 0.635818 4.21257 -0.29312 -0.676987 0.675107 + -0.700396 0.270386 3.80211 -0.346508 -0.848789 0.399361 + -0.546162 0.240623 3.85626 -0.231824 -0.813878 0.532785 + -0.559883 0.362934 3.99721 -0.236413 -0.730003 0.641253 + -0.713744 0.250686 3.72123 -0.369742 -0.907429 0.199658 + -0.567089 0.212172 3.77694 -0.293639 -0.897084 0.330176 + -0.405594 0.146043 3.72688 -0.245452 -0.920474 0.304107 + -0.384667 0.174489 3.80621 -0.151287 -0.855381 0.495415 + -0.724983 0.245138 3.63444 -0.376323 -0.921602 0.0950334 + -0.580437 0.192389 3.69601 -0.330343 -0.9276 0.174448 + -0.419806 0.130899 3.64511 -0.305112 -0.940942 0.14675 + -0.222854 0.076814 3.64279 -0.260964 -0.916226 0.304019 + -0.727814 0.237982 3.54944 -0.362894 -0.925756 0.106225 + -0.579758 0.186964 3.61221 -0.346074 -0.9356 0.0698891 + -0.419127 0.125386 3.56126 -0.333597 -0.94194 0.0382462 + -0.237066 0.061669 3.56102 -0.337644 -0.936637 0.0933161 + -0.731078 0.228144 3.46168 -0.353132 -0.928178 0.117401 + -0.582589 0.17972 3.52715 -0.328464 -0.940223 0.0899577 + -0.41847 0.122742 3.48064 -0.307707 -0.949606 0.0597099 + -0.235534 0.064179 3.48367 -0.346292 -0.937974 -0.0169581 + -0.729601 0.216277 3.37663 -0.325913 -0.931132 0.163626 + -0.579692 0.171394 3.44337 -0.316242 -0.943453 0.099434 + -0.415573 0.114329 3.39681 -0.291532 -0.954205 0.0670897 + -0.234877 0.061445 3.40301 -0.287831 -0.95746 0.0206024 + -0.728382 0.197971 3.28954 -0.300918 -0.931631 0.203743 + -0.578215 0.159527 3.35832 -0.290687 -0.948393 0.126698 + -0.416776 0.109762 3.31652 -0.265352 -0.959941 0.0900068 + -0.240011 0.062836 3.3258 -0.268919 -0.962853 0.0244205 + -0.727645 0.176995 3.20547 -0.240519 -0.908464 0.341826 + -0.572743 0.148067 3.27457 -0.261168 -0.951636 0.161806 + -0.411303 0.098302 3.23277 -0.246099 -0.964385 0.096937 + -0.241214 0.058268 3.24551 -0.232564 -0.971402 0.0478737 + -0.731737 0.138056 3.12391 -0.183317 -0.917877 0.351989 + -0.572005 0.127007 3.19045 -0.192548 -0.954332 0.228419 + -0.413808 0.091427 3.15228 -0.197864 -0.970177 0.14002 + -0.251182 0.05854 3.16844 -0.213808 -0.975344 0.0546902 + -0.571155 0.111987 3.10727 -0.135003 -0.963711 0.230294 + -0.412958 0.07632 3.06904 -0.164885 -0.97552 0.145512 + -0.253687 0.051659 3.08796 -0.17859 -0.981442 0.0698416 + -0.136247 0.029047 3.06873 -0.177746 -0.983472 0.0344942 + -0.128314 0.029368 3.14517 -0.192969 -0.980971 0.0213986 + -0.41457 0.065308 2.98852 -0.0994723 -0.975113 0.198139 + -0.257193 0.049803 3.01057 -0.147046 -0.985872 0.0802129 + -0.139753 0.0271 2.9913 -0.176826 -0.983373 0.0413576 + -0.057365 0.016899 3.09136 -0.189413 -0.981345 0.0329282 + -0.049432 0.017313 3.16785 -0.220177 -0.975448 0.00477787 + -0.258805 0.038703 2.93 -0.094602 -0.987831 0.123453 + -0.144791 0.024377 2.91461 -0.154305 -0.985154 0.075238 + -0.067193 0.015366 3.01382 -0.194394 -0.979884 0.0451481 + -0.022521 0.005565 3.0174 -0.234458 -0.971898 0.0210687 + -0.012693 0.007103 3.09493 -0.545909 -0.836837 0.0410699 + -0.139603 0.017087 2.83684 -0.121366 -0.989332 0.0805702 + -0.072231 0.012645 2.93713 -0.189703 -0.980776 0.0457299 + -0.028391 0.003156 2.93997 -0.208115 -0.977209 0.0418421 + -0.005468 0.001829 3.01207 -0.105693 -0.994375 -0.0068918 + -0.005468 -0.002888 3.08724 -0.415117 -0.909698 0.011265 + -0.083299 0.012198 2.85971 -0.15622 -0.986313 0.0527342 + -0.03946 0.002704 2.86255 -0.327407 -0.941418 0.0808473 + -0.011338 -0.000585 2.93465 -0.122615 -0.989707 0.0738005 + 0.005478 0.001819 3.01208 0.104796 -0.99447 -0.00693339 + -0.043309 -0.002418 2.79002 -0.336811 -0.939596 0.0609669 + -0.011338 -0.012557 2.85838 -0.232525 -0.965861 0.114213 + 0.011342 -0.012567 2.8584 0.224626 -0.969097 0.101952 + 0.011342 -0.000595 2.93466 0.0928812 -0.990405 0.102329 + -0.015187 -0.017678 2.78586 -0.259508 -0.961864 0.0864487 + 0.015202 -0.017673 2.78585 0.243163 -0.964262 0.105216 + 0.039464 0.002694 2.86257 0.339633 -0.938111 0.0678075 + 0.028396 0.003146 2.93999 0.219049 -0.973626 0.063803 + 0.022531 0.005555 3.01741 0.234615 -0.971859 0.0211035 + 0.015202 -0.027834 2.70905 0.317365 -0.946797 0.0534323 + 0.043324 -0.002408 2.79001 0.346204 -0.935126 0.0753743 + 0.083303 0.012198 2.85971 0.172472 -0.982808 0.0658886 + 0.072235 0.012645 2.93713 0.193501 -0.980241 0.0410494 + 0.067193 0.015366 3.01382 0.192719 -0.980283 0.0436479 + 0.045049 -0.00408 2.7117 0.413914 -0.910105 0.0195777 + 0.086319 0.003583 2.70243 0.0410699 -0.996078 0.0783683 + 0.084593 0.005254 2.78074 0.153332 -0.986439 0.0585433 + 0.139607 0.017087 2.83684 0.117096 -0.98928 0.0872591 + 0.144795 0.024377 2.91461 0.144259 -0.987215 0.0677871 + 0.084669 -0.002766 2.62423 -0.0617981 -0.997488 0.0346231 + 0.139327 -0.007745 2.68045 -0.0714778 -0.987192 0.142629 + 0.140897 0.010143 2.75787 0.0428646 -0.988731 0.143434 + 0.253621 0.03142 2.85222 0.0631227 -0.985984 0.15444 + 0.251053 -0.004552 2.69472 -0.0205557 -0.977852 0.208287 + 0.252623 0.013338 2.77213 0.00454647 -0.974858 0.222781 + 0.419748 0.045343 2.9059 0.0382705 -0.972933 0.227898 + 0.414573 0.065225 2.98846 0.0925768 -0.977508 0.189494 + 0.258808 0.038709 2.92999 0.119044 -0.986881 0.109061 + 0.245864 -0.020802 2.61547 -0.0450001 -0.987796 0.149111 + 0.417835 0.000753 2.74293 -0.0102218 -0.967138 0.254046 + 0.41875 0.027259 2.82582 0.009627 -0.965158 0.26149 + 0.579673 0.064888 2.94204 0.0597813 -0.960795 0.270737 + 0.412647 -0.015497 2.66368 0.000161769 -0.984052 0.177879 + 0.578916 0.01297 2.77557 0.0462489 -0.96505 0.257953 + 0.579831 0.039477 2.85846 0.0267341 -0.954405 0.297314 + 0.568876 -0.006835 2.69207 0.058004 -0.980775 0.186324 + 0.733691 0.030489 2.78823 0.118975 -0.968217 0.220002 + 0.740988 0.051478 2.87467 0.10199 -0.958757 0.265297 + 0.740831 0.076886 2.95827 0.0930372 -0.937445 0.335471 + 0.723651 0.010684 2.70473 0.100899 -0.972782 0.2086 + 0.878345 0.056773 2.8081 0.161779 -0.952639 0.257502 + 0.885642 0.077761 2.89455 0.209306 -0.940553 0.26749 + 0.879242 0.105538 2.97704 0.190034 -0.918028 0.348011 + 0.735081 0.110928 3.0413 0.12501 -0.929839 0.346081 + 0.866441 0.031135 2.72791 0.14127 -0.962327 0.232314 + 1.0181 0.09005 2.83806 0.288674 -0.901849 0.321459 + 1.00819 0.121292 2.91955 0.309697 -0.893407 0.325442 + 1.00179 0.149068 3.00204 0.31055 -0.888948 0.336645 + 1.14825 0.135812 2.7952 0.477761 -0.836376 0.268737 + 1.13835 0.167054 2.87669 0.43871 -0.847828 0.29786 + 1.1375 0.190275 2.96227 0.404007 -0.865537 0.296013 + 0.987585 0.174579 3.08026 0.277919 -0.88612 0.370879 + 0.873492 0.139581 3.06007 0.171449 -0.904088 0.391445 + 1.27729 0.20953 2.76852 0.447254 -0.87839 0.168505 + 1.27644 0.232753 2.85409 0.419725 -0.880691 0.219577 + 1.27815 0.254457 2.9473 0.433511 -0.860289 0.268275 + 1.12329 0.215782 3.04049 0.383657 -0.865379 0.322376 + 1.36812 0.239706 2.69325 0.35387 -0.92621 0.130043 + 1.38555 0.257779 2.75535 0.401543 -0.894754 0.195395 + 1.38726 0.279569 2.84861 0.415337 -0.884371 0.213033 + 1.25862 0.275212 3.03255 0.34458 -0.911028 0.226479 + 1.10376 0.236451 3.12569 0.337351 -0.862155 0.377999 + 1.45865 0.292208 2.75412 0.377058 -0.897711 0.227907 + 1.43366 0.302875 2.84704 0.498047 -0.835579 0.231855 + 1.36228 0.290151 2.94148 0.369389 -0.907805 0.198601 + 1.22725 0.281244 3.12211 0.336045 -0.900284 0.2767 + 1.53776 0.278788 2.59336 0.289635 -0.937107 0.194788 + 1.52991 0.303479 2.69539 0.263006 -0.938207 0.224936 + 1.52448 0.322081 2.78258 0.239668 -0.947407 0.212085 + 1.43646 0.319034 2.89445 0.402411 -0.886375 0.228921 + 1.3309 0.296182 3.03103 0.391174 -0.893738 0.219579 + 1.55052 0.27074 2.5231 0.251055 -0.961182 0.114455 + 1.60411 0.296972 2.58606 0.255773 -0.952171 0.167186 + 1.60493 0.308399 2.65827 0.215367 -0.958995 0.184244 + 1.5995 0.32692 2.74539 0.244897 -0.9413 0.232335 + 1.61079 0.282559 2.44383 0.307897 -0.949251 0.0641983 + 1.61687 0.289009 2.51586 0.288656 -0.95256 0.0964765 + 1.68044 0.311601 2.54813 0.280225 -0.954062 0.106022 + 1.68126 0.323028 2.62033 0.290887 -0.93879 0.184549 + 1.67697 0.338785 2.69304 0.347961 -0.902702 0.253084 + 1.67283 0.301677 2.40131 0.326744 -0.944974 -0.0162184 + 1.67891 0.30813 2.47334 0.294815 -0.954304 0.0488664 + 1.76063 0.331107 2.49574 0.393415 -0.916542 0.0719432 + 1.75666 0.338295 2.57209 0.421724 -0.892274 0.161231 + 1.75237 0.35405 2.6448 0.473063 -0.833312 0.286012 + 1.66911 0.305741 2.32728 0.358539 -0.931453 -0.0620026 + 1.75689 0.338735 2.34433 0.370444 -0.922719 -0.106588 + 1.8377 0.380109 2.51327 0.619263 -0.770963 0.14876 + 1.90183 0.448913 2.5195 0.720918 -0.663364 0.200564 + 1.82288 0.386233 2.58806 0.629101 -0.736658 0.248124 + 1.74226 0.381653 2.72039 0.523959 -0.785853 0.328483 + 1.67252 0.357199 2.76395 0.407948 -0.861818 0.301411 + 1.59506 0.345333 2.8163 0.318901 -0.905614 0.27958 + 1.88033 0.447599 2.59177 0.735914 -0.618859 0.274672 + 1.81277 0.413835 2.66365 0.638111 -0.697144 0.326811 + 1.80017 0.435389 2.73712 0.64469 -0.686637 0.336012 + 1.73703 0.409576 2.79283 0.551789 -0.754433 0.355471 + 1.66729 0.385121 2.83638 0.460618 -0.814041 0.353791 + 1.97125 0.522689 2.50491 0.783444 -0.544054 0.300367 + 1.94391 0.538627 2.57991 0.824773 -0.422136 0.376233 + 1.86774 0.469151 2.66524 0.74995 -0.572201 0.331906 + 2.04338 0.641992 2.48507 0.8003 -0.356393 0.482186 + 2.00156 0.671104 2.55665 0.815761 -0.367652 0.446504 + 1.9252 0.559805 2.65102 0.853673 -0.381397 0.354654 + 1.84902 0.490325 2.73637 0.765963 -0.540033 0.348804 + 2.08783 0.747855 2.47611 0.728122 -0.512401 0.455283 + 2.05961 0.759091 2.55805 0.676199 -0.714293 0.180389 + 1.97589 0.68658 2.63224 0.807879 -0.554937 0.198437 + 1.89952 0.575276 2.72663 0.835641 -0.416735 0.35782 + 2.14557 0.806572 2.49401 0.636439 -0.741605 0.212056 + 2.12988 0.805667 2.58238 0.633329 -0.758526 0.153404 + 2.04427 0.746279 2.64364 0.668605 -0.734754 0.114475 + 1.96054 0.673768 2.71784 0.776055 -0.602021 0.187908 + 2.12532 0.8343 2.67978 0.703705 -0.635687 0.317335 + 2.03971 0.774912 2.74105 0.727287 -0.637899 0.253256 + 1.97095 0.723982 2.81546 0.73085 -0.638748 0.240539 + 1.88301 0.61507 2.7967 0.801144 -0.499889 0.329058 + 2.1098 0.896364 2.79808 0.781095 -0.582923 0.22381 + 2.07563 0.857085 2.85552 0.770821 -0.608836 0.187495 + 2.00687 0.806154 2.92993 0.730264 -0.637064 0.246706 + 1.89342 0.665197 2.89428 0.740708 -0.622613 0.252396 + 1.82403 0.563674 2.87752 0.818069 -0.479014 0.318289 + 2.21145 0.973508 2.71487 0.709761 -0.578447 0.402042 + 2.27515 1.08941 2.76691 0.716988 -0.627549 0.303496 + 2.20761 1.03299 2.84985 0.757698 -0.64678 0.087003 + 2.17343 0.993706 2.90729 0.755539 -0.640832 0.135995 + 2.4665 1.2873 2.72756 0.824175 -0.499171 0.267515 + 2.39896 1.23088 2.81049 0.780419 -0.592657 0.19926 + 2.31753 1.15141 2.90992 0.768974 -0.608232 0.196809 + 2.2371 1.09047 2.99829 0.727608 -0.602398 0.328182 + 2.093 0.932672 2.9956 0.73203 -0.621668 0.278677 + 2.63704 1.62676 2.7512 0.879415 -0.415083 0.233099 + 2.56483 1.51211 2.81178 0.861252 -0.429022 0.272368 + 2.48791 1.4137 2.88484 0.839807 -0.455684 0.295089 + 2.40648 1.33423 2.98427 0.816887 -0.464329 0.342191 + 2.66443 1.83164 2.93074 0.862754 -0.373821 0.34046 + 2.58932 1.72218 2.99012 0.848903 -0.385681 0.361406 + 2.5124 1.62377 3.06318 0.837052 -0.398514 0.374873 + 2.43139 1.53416 3.14119 0.817052 -0.414312 0.400963 + 2.75351 2.22044 3.07832 0.887369 -0.304368 0.34632 + 2.69228 2.10032 3.12978 0.872048 -0.335766 0.356081 + 2.61717 1.99095 3.18921 0.856066 -0.360912 0.369992 + 2.54987 1.87835 3.24403 0.852742 -0.377318 0.361196 + 2.7715 2.56331 3.31005 0.888469 -0.275229 0.367249 + 2.71027 2.44319 3.36151 0.897166 -0.27624 0.344651 + 2.65797 2.31693 3.40519 0.882 -0.30097 0.362619 + 2.59067 2.20433 3.46002 0.873434 -0.322625 0.364728 + 2.84745 2.98667 3.42657 0.919023 -0.228203 0.321433 + 2.78998 2.87553 3.49106 0.902217 -0.25822 0.345438 + 2.73795 2.76963 3.5519 0.903081 -0.256803 0.344235 + 2.68565 2.64337 3.59557 0.885822 -0.270075 0.377331 + 2.86219 3.25922 3.54671 0.931082 -0.125918 0.342391 + 2.81782 3.17507 3.64045 0.908045 -0.161303 0.386569 + 2.76579 3.06917 3.70128 0.871917 -0.220282 0.437307 + 2.71231 2.98091 3.75194 0.846006 -0.23613 0.478034 + 2.91085 3.34236 3.45169 0.932995 -0.109232 0.342912 + 2.86882 3.6075 3.58566 0.918821 0.0191131 0.394212 + 2.82858 3.53202 3.684 0.915992 0.00166416 0.401192 + 2.78421 3.44796 3.7778 0.893693 -0.0386005 0.447016 + 2.73363 3.37131 3.86196 0.849296 -0.103629 0.517646 + 2.91061 3.68128 3.48288 0.932271 0.0574913 0.357162 + 2.77752 3.86569 3.72906 0.869644 0.183478 0.458317 + 2.73728 3.79021 3.8274 0.860969 0.157561 0.48364 + 2.69578 3.71683 3.92249 0.839304 0.117564 0.530798 + 2.64521 3.64027 4.0067 0.825363 0.0655243 0.560787 + 2.81027 3.93579 3.62845 0.881263 0.221044 0.417749 + 2.65981 4.2023 3.73764 0.800813 0.365353 0.474568 + 2.62706 4.1322 3.83826 0.788217 0.33311 0.517447 + 2.57458 4.05159 3.96266 0.774472 0.309838 0.551538 + 2.53309 3.97831 4.05781 0.761553 0.295189 0.576975 + 2.69624 4.2745 3.60898 0.811777 0.390578 0.434128 + 2.48365 4.46478 3.7772 0.722277 0.477387 0.500417 + 2.41988 4.38871 3.93257 0.70421 0.451007 0.548344 + 2.3674 4.3081 4.05697 0.688713 0.417396 0.592836 + 2.52007 4.5369 3.64849 0.744217 0.509115 0.432369 + 2.30518 4.77869 3.6845 0.668764 0.58469 0.459231 + 2.26262 4.69396 3.83745 0.650303 0.558412 0.515056 + 2.19885 4.61797 3.99287 0.629096 0.535358 0.563587 + 2.32379 4.85822 3.53916 0.681875 0.598803 0.420096 + 2.06904 5.08721 3.59373 0.609577 0.645066 0.460767 + 2.04024 5.00608 3.73765 0.588631 0.635531 0.499614 + 1.99768 4.92135 3.8906 0.569334 0.621192 0.538497 + 2.35703 4.93946 3.37123 0.691627 0.597259 0.40612 + 2.10228 5.16854 3.42585 0.624334 0.643193 0.443294 + 1.83605 5.37169 3.47939 0.5523 0.686016 0.473653 + 1.7827 5.29043 3.64674 0.528337 0.682205 0.505427 + 2.38671 5.03469 3.1669 0.705799 0.599771 0.376992 + 2.14678 5.24937 3.24905 0.639582 0.645464 0.417506 + 1.88054 5.45252 3.30259 0.564334 0.700318 0.437129 + 2.15799 5.36113 3.04749 0.644118 0.656742 0.392176 + 1.88536 5.57239 3.09256 0.562162 0.71492 0.415768 + 1.57272 5.63453 3.36494 0.485663 0.750627 0.447985 + 1.55978 5.56028 3.50194 0.482617 0.734066 0.477731 + 1.50643 5.47902 3.66929 0.459996 0.706389 0.537976 + 2.17244 5.50219 2.78196 0.660012 0.660936 0.357137 + 1.8998 5.71355 2.82708 0.564536 0.722204 0.399651 + 1.54926 5.91866 2.89781 0.486488 0.76343 0.424859 + 1.57754 5.7544 3.15491 0.487899 0.755819 0.436683 + 1.28068 5.78732 3.39111 0.404312 0.786735 0.466454 + 2.18262 5.59851 2.57112 0.684506 0.666897 0.294448 + 1.8881 5.8293 2.62758 0.574272 0.734283 0.361994 + 1.53756 6.03442 2.69831 0.486178 0.774635 0.40444 + 1.25476 6.06039 2.95013 0.393231 0.80018 0.452858 + 1.28304 5.89613 3.20723 0.40484 0.788817 0.462464 + 1.84999 5.92615 2.48144 0.565953 0.743822 0.355564 + 1.53535 6.10826 2.55442 0.488287 0.786093 0.378989 + 1.23443 6.24429 2.6212 0.396847 0.819859 0.412728 + 1.23664 6.17045 2.76509 0.392648 0.813214 0.429547 + 0.997951 6.13756 2.99886 0.324617 0.825652 0.461434 + 0.939671 6.31905 2.71111 0.300156 0.848784 0.435285 + 0.979823 6.24763 2.81382 0.313377 0.83241 0.457044 + 0.783409 6.18987 3.04706 0.264558 0.846345 0.462287 + 1.00322 6.01473 3.21841 0.332757 0.8177 0.469723 + 1.00086 5.90592 3.40229 0.315086 0.799533 0.511339 + 0.674401 6.34161 2.83165 0.238381 0.852093 0.465954 + 0.714553 6.27018 2.93436 0.245672 0.848341 0.469002 + 0.557653 6.13094 3.26013 0.212372 0.845695 0.489589 + 0.788676 6.06704 3.26661 0.267708 0.830228 0.488932 + 0.756484 5.99632 3.3973 0.250507 0.811743 0.52756 + 0.644018 6.42086 2.69499 0.235396 0.873096 0.426957 + 0.45681 6.34753 2.91038 0.186247 0.864038 0.467707 + 0.488798 6.21125 3.14743 0.201918 0.857328 0.473516 + 0.327174 6.15706 3.3087 0.176032 0.85643 0.485325 + 0.525461 6.06022 3.39082 0.213677 0.828862 0.517039 + 0.587404 6.47226 2.61534 0.210112 0.887176 0.410819 + 0.388277 6.47524 2.68259 0.124825 0.896385 0.425339 + 0.426427 6.4267 2.77367 0.154748 0.885724 0.437659 + 0.271817 6.35498 2.96229 0.108529 0.884751 0.453252 + 0.295187 6.29334 3.07165 0.148546 0.870544 0.469135 + 0.759644 6.52008 2.36851 0.268079 0.912171 0.309962 + 0.572748 6.51135 2.53785 0.227254 0.897194 0.37868 + 0.373621 6.51423 2.60505 0.120753 0.903521 0.411179 + 0.233667 6.40344 2.87116 0.0585024 0.901215 0.429406 + 0.686856 6.56267 2.30035 0.272553 0.910747 0.310249 + 0.49996 6.55393 2.46969 0.173065 0.921237 0.348384 + 0.400587 6.57829 2.44071 0.13517 0.914495 0.381351 + 0.274247 6.53868 2.5761 0.0635051 0.919083 0.388912 + 0.822127 6.61587 2.016 0.296922 0.916884 0.266759 + 0.581013 6.59979 2.28966 0.258678 0.903077 0.342836 + 0.349068 6.61759 2.37783 0.136546 0.902966 0.407439 + 0.141685 6.57025 2.50863 0.037565 0.911875 0.408745 + 0.824584 6.64574 1.90967 0.338734 0.911209 0.23443 + 0.529494 6.63918 2.22683 0.206397 0.927995 0.310203 + 0.531951 6.66896 2.12045 0.217955 0.941752 0.256122 + 0.326565 6.65188 2.30544 0.147469 0.921502 0.359287 + 0.119182 6.60453 2.43624 0.0389747 0.91035 0.412 + 0.474678 6.69206 2.07765 0.193211 0.948023 0.252828 + 0.638605 6.73993 1.72974 0.250156 0.954855 0.160228 + 0.414618 6.72581 1.99439 0.172462 0.958677 0.226265 + 0.269292 6.67497 2.26263 0.0982191 0.937131 0.334871 + 0.200218 6.68836 2.23805 0.0540197 0.94385 0.325928 + 0.050108 6.61792 2.41166 0.0148797 0.913553 0.406449 + 0.294177 6.73724 2.02838 0.112282 0.967813 0.225233 + -0.050108 6.70567 2.20727 -0.0185939 0.950177 0.311156 + 0.144067 6.75447 1.99756 0.0674644 0.97135 0.227878 + 0.345751 6.08485 3.42576 0.197929 0.837581 0.509198 + 0.549237 5.97989 3.50496 0.223845 0.817178 0.531144 + 0.741024 5.91316 3.52434 0.2526 0.803107 0.53964 + 0.369527 6.00461 3.53995 0.21342 0.819175 0.532357 + 0.537997 5.88923 3.64818 0.223215 0.816817 0.531963 + 0.729784 5.82241 3.66751 0.26094 0.808392 0.527648 + 0.985396 5.82275 3.52933 0.295445 0.787513 0.540865 + 0.375098 5.93861 3.63925 0.214275 0.818843 0.532525 + 0.530928 5.7715 3.8319 0.218166 0.808617 0.546391 + 0.706856 5.73509 3.81456 0.255343 0.802228 0.539657 + 0.939765 5.64185 3.82746 0.32104 0.776834 0.541722 + 0.962693 5.72918 3.6804 0.305318 0.789086 0.533033 + 0.368029 5.82088 3.82297 0.202782 0.809691 0.550709 + 0.517657 5.66625 3.9878 0.196518 0.786404 0.585619 + 0.693585 5.62984 3.97047 0.255292 0.782145 0.568397 + 0.887986 5.53922 3.99263 0.313606 0.754968 0.575912 + 1.17714 5.49992 3.8751 0.366756 0.73621 0.568757 + 0.355791 5.75569 3.91968 0.174558 0.789322 0.588643 + 0.488028 5.58849 4.09428 0.165202 0.768102 0.61865 + 0.661059 5.50964 4.14565 0.231286 0.756949 0.611175 + 0.85546 5.41902 4.1678 0.312914 0.72923 0.608529 + 0.326162 5.67794 4.02615 0.137714 0.770415 0.622492 + 0.420165 5.48927 4.23294 0.136756 0.7557 0.640481 + 0.593196 5.41042 4.28431 0.204667 0.732211 0.649598 + 0.798127 5.31308 4.3117 0.28831 0.689753 0.664167 + 1.08361 5.29444 4.18419 0.363359 0.692846 0.622843 + 0.286638 5.61296 4.1119 0.106079 0.761158 0.639833 + 0.331182 5.372 4.38366 0.101051 0.737328 0.667934 + 0.503427 5.31304 4.41678 0.178207 0.714874 0.676164 + 0.708359 5.21562 4.44412 0.274202 0.659676 0.699743 + 0.197655 5.49568 4.26263 0.0849289 0.748852 0.657273 + 0.288186 5.27331 4.49538 0.0325703 0.704415 0.709041 + 0.460431 5.21435 4.5285 0.165698 0.669112 0.724453 + 0.632041 5.1284 4.55099 0.249119 0.622421 0.741979 + 0.960334 5.09124 4.44514 0.333484 0.613815 0.715555 + 0.13439 5.44638 4.32683 0.0988213 0.726283 0.680255 + 0.158013 5.22322 4.54455 0.0596786 0.673818 0.736483 + 0.237468 5.2187 4.54617 0.0182112 0.672397 0.739966 + 0.375694 5.11286 4.63109 0.125884 0.626533 0.769162 + 0.547303 5.02682 4.65352 0.211203 0.592295 0.777547 + 0.057219 5.19265 4.58649 0.0661675 0.636753 0.768224 + 0.057219 4.99359 4.73147 -0.000951834 0.568615 0.822603 + 0.178172 5.00026 4.72992 -0.00246085 0.587644 0.809116 + 0.257627 4.99574 4.73155 0.0446175 0.574868 0.817029 + 0.324975 5.05817 4.68183 0.0774402 0.606287 0.791466 + -0.057219 4.99359 4.73147 0.009684 0.55878 0.82926 + -0.082772 4.79088 4.85818 0.00792762 0.471989 0.881569 + 0.082772 4.79088 4.85818 -0.00729618 0.471345 0.881918 + 0.203725 4.79746 4.85658 0.00614009 0.477745 0.878477 + -0.285444 4.61442 4.94182 -0.00909633 0.34753 0.937625 + -0.082772 4.60556 4.94236 0.00584276 0.338859 0.940819 + 0.082772 4.60556 4.94237 -0.00550107 0.339355 0.940642 + -0.414322 4.60138 4.944 -0.0730218 0.350262 0.933801 + -0.543759 4.3414 5.00711 -0.096371 0.255155 0.962085 + -0.32929 4.34471 5.01577 -0.0174748 0.231047 0.972786 + -0.126618 4.33594 5.01637 0.00453156 0.223685 0.974651 + 0.126618 4.33593 5.01637 -0.0036363 0.222666 0.974888 + -0.652423 4.35926 4.98337 -0.163386 0.293037 0.942037 + -0.865682 4.01294 5.04901 -0.158428 0.20174 0.966541 + -0.630538 3.96772 5.07934 -0.0683377 0.159628 0.984809 + -0.416069 3.97103 5.08801 -0.0130168 0.152022 0.988291 + -0.993086 3.68812 5.07863 -0.145179 0.109087 0.983373 + -0.757941 3.64289 5.10896 -0.0829358 0.0858739 0.992848 + -0.68639 3.5435 5.12112 -0.0908882 0.0567809 0.994241 + -0.617987 3.54915 5.12692 -0.0555106 0.0607834 0.996606 + -0.458076 3.63911 5.12571 -0.00482345 0.0729424 0.997324 + -1.14611 3.67064 5.05489 -0.209345 0.114193 0.971151 + -1.07239 3.31675 5.08426 -0.149515 -0.0227936 0.988497 + -0.958763 3.27031 5.09969 -0.155883 -0.0308165 0.987295 + -0.887212 3.17091 5.11186 -0.186098 -0.111764 0.976154 + -1.35755 3.42205 5.02166 -0.347305 0.0322172 0.937199 + -1.22541 3.29936 5.06057 -0.221265 -0.0421611 0.974302 + -1.21843 3.01113 5.0242 -0.237574 -0.211563 0.94805 + -1.46484 3.21364 4.96944 -0.391974 -0.0899445 0.915569 + -1.33271 3.09095 5.00835 -0.319776 -0.162291 0.933491 + -1.35202 2.81481 4.92064 -0.243946 -0.370148 0.896371 + -1.10481 2.96469 5.03964 -0.147728 -0.250786 0.956704 + -1.58122 3.30616 4.9266 -0.418372 -0.049682 0.906916 + -1.57552 2.96247 4.87328 -0.445247 -0.222031 0.867443 + -1.46629 2.89463 4.90478 -0.373747 -0.274154 0.886088 + -1.44593 2.60017 4.80041 -0.265986 -0.404283 0.875104 + -1.24339 2.76206 4.9082 -0.186225 -0.427257 0.884744 + -1.6919 3.05489 4.8304 -0.476125 -0.19396 0.857721 + -1.66799 2.72722 4.74575 -0.486702 -0.323524 0.811451 + -1.55875 2.65939 4.77724 -0.411929 -0.357509 0.838154 + -1.7774 2.78615 4.69809 -0.525407 -0.309852 0.792426 + -1.72681 2.49021 4.58866 -0.523177 -0.367512 0.768909 + -1.61373 2.43179 4.63605 -0.456024 -0.379509 0.804994 + -1.50091 2.37249 4.65916 -0.365956 -0.379789 0.84961 + -1.61944 2.1369 4.49541 -0.503119 -0.355866 0.787548 + -1.50006 2.09219 4.54966 -0.42656 -0.33998 0.838129 + -1.37672 2.32352 4.68958 -0.306188 -0.35425 0.883604 + -1.33731 2.54742 4.78797 -0.181192 -0.390987 0.902385 + -1.4519 1.7518 4.43043 -0.517268 -0.343495 0.783865 + -1.33155 1.71384 4.49857 -0.466253 -0.310613 0.828329 + -1.37586 2.04314 4.58001 -0.364773 -0.302321 0.880649 + -1.24894 2.0079 4.62565 -0.342694 -0.280648 0.896547 + -1.25794 2.27592 4.70703 -0.27795 -0.313926 0.907851 + -1.28469 1.42995 4.40648 -0.523484 -0.356986 0.773645 + -1.16026 1.40077 4.47283 -0.448639 -0.329041 0.830936 + -1.20462 1.67869 4.54425 -0.388639 -0.278691 0.878232 + -1.11225 1.17063 4.39344 -0.502591 -0.390755 0.771176 + -0.985985 1.14855 4.46448 -0.417304 -0.361795 0.833644 + -1.0296 1.369 4.51986 -0.364949 -0.290132 0.884667 + -1.07396 1.64692 4.59128 -0.327578 -0.257932 0.908935 + -0.949773 0.968969 4.39253 -0.42568 -0.467572 0.774708 + -0.811769 0.938248 4.43574 -0.304831 -0.47348 0.826374 + -0.851214 1.11841 4.50649 -0.295048 -0.344777 0.891109 + -0.89483 1.33894 4.56192 -0.278806 -0.270597 0.921436 + -0.781792 0.809541 4.36027 -0.291312 -0.588875 0.753899 + -0.640455 0.753492 4.35995 -0.218559 -0.616575 0.756351 + -0.671365 0.901889 4.45952 -0.187984 -0.477371 0.858358 + -0.71081 1.08213 4.53032 -0.203492 -0.340799 0.917849 + -0.603886 0.57968 4.2122 -0.204478 -0.682206 0.701985 + -0.457249 0.502509 4.16846 -0.181902 -0.706786 0.683641 + -0.505232 0.693511 4.34644 -0.146638 -0.628048 0.764234 + -0.536142 0.841995 4.44606 -0.114587 -0.508646 0.853316 + -0.413246 0.285763 3.95348 -0.112729 -0.759461 0.640712 + -0.227673 0.222295 3.88321 -0.114031 -0.794323 0.596697 + -0.336282 0.412749 4.11293 -0.221337 -0.757548 0.614109 + -0.384266 0.603749 4.29091 -0.126542 -0.650435 0.748947 + -0.199094 0.111016 3.73595 -0.16742 -0.856193 0.488779 + -0.081146 0.054032 3.68825 -0.160018 -0.818297 0.552073 + -0.118188 0.172667 3.84657 -0.0611245 -0.789582 0.610593 + -0.226797 0.363122 4.07629 -0.155787 -0.757273 0.634246 + -0.104906 0.019918 3.59514 -0.49197 -0.81746 0.299542 + -0.032368 -0.044339 3.60443 -0.279536 -0.828981 0.484407 + -0.032368 0.030536 3.65695 0.0757885 -0.682439 0.727003 + -0.069411 0.149083 3.81521 -0.162708 -0.821924 0.545864 + -0.109104 0.005884 3.52904 -0.53606 -0.840783 0.0756582 + -0.036567 -0.058374 3.53834 -0.300194 -0.948498 -0.10117 + 0.036568 -0.058369 3.53833 0.331794 -0.933619 -0.135158 + 0.032373 -0.044339 3.60443 0.307896 -0.79988 0.515162 + -0.107572 0.008307 3.45165 -0.399618 -0.902064 -0.163052 + -0.036567 -0.018551 3.47337 -0.110209 -0.917471 -0.382232 + 0.036568 -0.018547 3.47336 0.21938 -0.926087 -0.306977 + 0.109105 0.005889 3.52904 0.485817 -0.873742 0.0235984 + 0.10491 0.019918 3.59514 0.438857 -0.827357 0.350549 + -0.107747 0.02312 3.37639 -0.334062 -0.940766 -0.0579841 + -0.036742 -0.00374 3.39811 -0.13722 -0.974925 -0.175192 + 0.036742 -0.00374 3.39811 0.150444 -0.969559 -0.193188 + 0.107573 0.008312 3.45164 0.368661 -0.921873 -0.119331 + -0.112881 0.02451 3.29918 -0.238683 -0.970165 -0.0425471 + -0.036742 0.011515 3.32289 -0.0877069 -0.990913 -0.101977 + 0.036742 0.011515 3.32289 0.127384 -0.989278 -0.0714273 + 0.107747 0.02312 3.37639 0.295661 -0.951092 -0.089489 + 0.235538 0.064179 3.48367 0.349687 -0.936789 -0.0120809 + -0.118346 0.029102 3.22223 -0.206854 -0.978367 0.00299602 + -0.042206 0.01602 3.24589 -0.224925 -0.974235 -0.0165609 + 0.001808 0.003301 3.25612 -0.152057 -0.987796 0.0337263 + -0.00902 0.004506 3.17803 -0.6074 -0.794312 -0.0115841 + -0.001795 -0.013757 3.24666 -0.565669 -0.725684 0.391666 + 0.001808 0.003301 3.25612 -0.000334 -0.484823 0.874612 + 0.001808 -0.013762 3.24667 -0.0023907 -0.887409 0.460977 + -0.001795 -0.005478 3.17033 -0.457664 -0.888022 -0.0442719 + 0.005478 -0.002898 3.08726 0.414386 -0.91003 0.0113895 + 0.009033 0.004594 3.17808 0.571837 -0.819982 0.0251326 + 0.001808 0.003301 3.25612 0.327917 -0.944672 -0.00810761 + 0.012703 0.007093 3.09495 0.545859 -0.836854 0.041393 + 0.049429 0.017318 3.16784 0.223219 -0.974734 0.00823755 + 0.042204 0.016025 3.24588 0.230259 -0.972959 -0.0181781 + 0.112881 0.02451 3.29918 0.225763 -0.973854 -0.025298 + 0.057365 0.016899 3.09136 0.188742 -0.981457 0.0334541 + 0.128312 0.029374 3.14516 0.191887 -0.981143 0.0231842 + 0.118344 0.029107 3.22222 0.202844 -0.979211 -0.000587482 + 0.240013 0.062841 3.32579 0.27246 -0.961723 0.0292462 + 0.234878 0.06145 3.403 0.297965 -0.954448 0.0156532 + 0.136247 0.029047 3.06873 0.179538 -0.983107 0.0355803 + 0.251182 0.05854 3.16844 0.217895 -0.97409 0.0605827 + 0.241214 0.058268 3.24551 0.243353 -0.968986 0.0429475 + 0.415574 0.114334 3.3968 0.28046 -0.957062 0.0733089 + 0.418471 0.122747 3.48063 0.305017 -0.95071 0.0558167 + 0.139753 0.0271 2.9913 0.177521 -0.983276 0.0406776 + 0.257193 0.049803 3.01057 0.153721 -0.984058 0.0894388 + 0.253687 0.051659 3.08796 0.199049 -0.978195 0.0592768 + 0.411303 0.098302 3.23277 0.232739 -0.966894 0.104638 + 0.416776 0.109762 3.31652 0.262048 -0.961217 0.0859871 + 0.412958 0.07632 3.06904 0.143879 -0.976982 0.157498 + 0.413808 0.091427 3.15228 0.192239 -0.972347 0.132612 + 0.572745 0.148072 3.27457 0.266854 -0.949124 0.167191 + 0.578218 0.159532 3.35832 0.300646 -0.946352 0.118451 + 0.579692 0.171394 3.44337 0.318611 -0.942383 0.101989 + 0.57116 0.111997 3.10725 0.1552 -0.955842 0.249555 + 0.57201 0.127017 3.19044 0.22425 -0.952895 0.204211 + 0.728385 0.197976 3.28953 0.291852 -0.93287 0.211131 + 0.729604 0.216282 3.37662 0.320706 -0.933856 0.158303 + 0.731078 0.228144 3.46168 0.349335 -0.929241 0.120313 + 0.574499 0.084859 3.02466 0.0898395 -0.956272 0.278338 + 0.731742 0.138062 3.12391 0.153541 -0.915014 0.37306 + 0.727649 0.177005 3.20545 0.222837 -0.919064 0.325061 + 0.848913 0.240285 3.30245 0.271862 -0.923503 0.270617 + 0.862604 0.172535 3.13899 0.187145 -0.892695 0.409966 + 0.858511 0.211475 3.22055 0.208629 -0.897126 0.389408 + 0.946212 0.270982 3.31688 0.254217 -0.914281 0.315379 + 0.931263 0.292165 3.39719 0.310634 -0.92007 0.238699 + 0.850132 0.258502 3.3895 0.334571 -0.922842 0.190852 + 0.976696 0.207529 3.15919 0.253914 -0.86402 0.434737 + 0.95581 0.242177 3.23497 0.253761 -0.884774 0.390871 + 1.0655 0.294472 3.2842 0.262135 -0.913895 0.309971 + 1.08288 0.271099 3.20148 0.28156 -0.879744 0.383112 + 1.20987 0.304616 3.20482 0.31726 -0.88963 0.328486 + 1.19868 0.33381 3.29126 0.315343 -0.893151 0.320686 + 1.05055 0.315746 3.36455 0.263823 -0.915205 0.304627 + 1.3337 0.312427 3.07849 0.447854 -0.841028 0.303477 + 1.3225 0.341615 3.16494 0.431964 -0.843568 0.319061 + 1.31136 0.370904 3.26321 0.426614 -0.83856 0.338849 + 1.19284 0.361408 3.37566 0.347059 -0.865253 0.361784 + 1.04472 0.343259 3.44889 0.312963 -0.916589 0.248833 + 1.42643 0.338359 2.99638 0.419544 -0.869238 0.261549 + 1.41528 0.367649 3.09465 0.408669 -0.865376 0.290023 + 1.40032 0.392958 3.19481 0.422256 -0.851119 0.311923 + 1.31733 0.415865 3.35093 0.41307 -0.838289 0.35587 + 1.19881 0.406289 3.46332 0.374615 -0.875478 0.305289 + 1.51444 0.341323 2.88444 0.287252 -0.926237 0.244072 + 1.50741 0.365523 2.97093 0.31599 -0.907338 0.277286 + 1.49244 0.390831 3.07109 0.422317 -0.844767 0.328659 + 1.39312 0.42388 3.28325 0.465354 -0.811461 0.35352 + 1.31013 0.446875 3.43942 0.395502 -0.870851 0.291885 + 1.58802 0.369624 2.90283 0.386405 -0.863202 0.324921 + 1.58562 0.400512 2.97013 0.491139 -0.783373 0.380931 + 1.57678 0.433576 3.05126 0.529764 -0.742832 0.409329 + 1.4836 0.423983 3.15228 0.509998 -0.775846 0.371437 + 1.37266 0.457595 3.38146 0.528131 -0.762577 0.373569 + 1.66489 0.416009 2.90369 0.501145 -0.772422 0.390151 + 1.66384 0.452729 2.97368 0.511262 -0.749391 0.420742 + 1.57649 0.475865 3.11521 0.602225 -0.663438 0.444044 + 1.46315 0.457696 3.25048 0.578553 -0.711724 0.398404 + 1.73252 0.44351 2.86665 0.570408 -0.727361 0.381551 + 1.73147 0.480144 2.9366 0.576297 -0.726158 0.374935 + 1.73419 0.51828 3.00855 0.551899 -0.700002 0.453216 + 1.66355 0.495025 3.03763 0.513986 -0.696268 0.501028 + 1.79567 0.469321 2.81095 0.671908 -0.645368 0.363372 + 1.78719 0.502876 2.88203 0.714444 -0.602467 0.355814 + 1.78991 0.540926 2.95392 0.749658 -0.58429 0.310834 + 1.7967 0.596245 3.03211 0.704553 -0.589816 0.394615 + 1.73411 0.56452 3.06706 0.530344 -0.646039 0.54897 + 1.84054 0.52388 2.80745 0.79937 -0.467143 0.37787 + 1.83081 0.618993 2.95571 0.790551 -0.555546 0.257676 + 1.86135 0.698286 3.07397 0.673053 -0.620744 0.402091 + 1.7962 0.650267 3.09174 0.595544 -0.597516 0.536937 + 1.73362 0.618536 3.1267 0.474475 -0.634289 0.61037 + 1.66347 0.54126 3.09615 0.540523 -0.618665 0.570166 + 1.57356 0.529691 3.20318 0.67781 -0.536753 0.502463 + 1.92395 0.74449 3.01254 0.72532 -0.639365 0.255192 + 2.01009 0.871012 3.0782 0.711283 -0.596358 0.372067 + 1.92477 0.837049 3.16022 0.629837 -0.572718 0.524689 + 1.85963 0.789033 3.17799 0.608632 -0.585414 0.535591 + 2.1368 1.04701 3.10196 0.693286 -0.573013 0.437049 + 2.05149 1.01305 3.18398 0.661839 -0.564429 0.493345 + 1.94244 0.986556 3.28547 0.628497 -0.573755 0.525164 + 1.85479 0.947356 3.34897 0.687797 -0.570221 0.449203 + 1.77198 0.749834 3.24148 0.515624 -0.656931 0.550066 + 2.32079 1.26567 3.08063 0.766598 -0.503798 0.39814 + 2.22049 1.22221 3.1843 0.705785 -0.554902 0.440399 + 2.12533 1.1769 3.28579 0.676659 -0.585434 0.446541 + 2.01628 1.1504 3.38728 0.628891 -0.63108 0.454129 + 2.34569 1.46559 3.23756 0.816545 -0.418963 0.397144 + 2.26637 1.40325 3.33934 0.766578 -0.480165 0.426379 + 2.17121 1.35793 3.44083 0.73695 -0.515792 0.43688 + 2.07879 1.30819 3.53959 0.697343 -0.564514 0.441629 + 2.46886 1.78873 3.32206 0.82969 -0.406358 0.382736 + 2.39338 1.69648 3.39225 0.8291 -0.411664 0.37832 + 2.31407 1.63413 3.49404 0.799174 -0.42957 0.420465 + 2.22659 1.56377 3.5783 0.764632 -0.457583 0.453824 + 2.53005 2.083 3.50337 0.855668 -0.34827 0.382805 + 2.45458 1.99083 3.57362 0.812611 -0.382608 0.439629 + 2.37167 1.88962 3.62912 0.791261 -0.394638 0.467083 + 2.28419 1.81926 3.71338 0.757369 -0.397263 0.518242 + 2.62818 2.5354 3.64319 0.865408 -0.285657 0.411666 + 2.56756 2.41416 3.68659 0.840556 -0.301375 0.450154 + 2.49612 2.30505 3.73457 0.793605 -0.327569 0.512728 + 2.41321 2.20392 3.79012 0.761967 -0.340472 0.550895 + 2.65484 2.87294 3.79956 0.830736 -0.245185 0.499761 + 2.58992 2.76565 3.84838 0.802469 -0.261549 0.536317 + 2.51848 2.65663 3.89642 0.768456 -0.278719 0.576013 + 2.4407 2.55846 3.94625 0.741408 -0.292855 0.60378 + 2.68016 3.28305 3.91262 0.812082 -0.160733 0.56097 + 2.61945 3.19332 3.97685 0.800725 -0.175365 0.572788 + 2.55453 3.08603 4.02567 0.771505 -0.209914 0.600596 + 2.48002 2.99971 4.08758 0.743641 -0.230198 0.6277 + 2.58947 3.5633 4.09222 0.787395 -0.00880562 0.616386 + 2.52876 3.47356 4.15646 0.763872 -0.0565466 0.642886 + 2.45712 3.40119 4.2352 0.732608 -0.0814041 0.675765 + 2.38262 3.31487 4.29711 0.716988 -0.13199 0.684476 + 2.53323 3.86313 4.1181 0.786897 0.226721 0.573925 + 2.47749 3.78616 4.20362 0.721098 0.139239 0.678698 + 2.38769 3.77091 4.29422 0.678831 0.148692 0.719083 + 2.31605 3.69854 4.37297 0.697025 0.112261 0.708204 + 2.29894 4.09032 4.25959 0.663444 0.320361 0.676173 + 2.20914 4.07508 4.35018 0.655043 0.312588 0.6879 + 2.13616 3.94806 4.47499 0.648276 0.251111 0.718805 + 2.06758 3.85189 4.55996 0.606905 0.203086 0.768389 + 2.24747 3.60237 4.45794 0.687574 0.0469488 0.724595 + 2.29879 4.2055 4.1993 0.661144 0.378913 0.647544 + 2.07576 4.40579 4.28877 0.599153 0.462425 0.653589 + 2.06263 4.2746 4.3916 0.61716 0.406574 0.673655 + 1.98965 4.14767 4.51646 0.567154 0.345086 0.747831 + 2.14437 4.5084 4.14646 0.614424 0.496759 0.612955 + 1.89447 4.69571 4.21503 0.531597 0.558655 0.636639 + 1.85277 4.55415 4.36261 0.511037 0.519867 0.684528 + 1.83964 4.42295 4.46545 0.501522 0.469933 0.726387 + 1.94895 4.80519 4.0614 0.552897 0.590676 0.587713 + 1.67113 4.98185 4.12221 0.478723 0.630739 0.610731 + 1.62324 4.86473 4.26848 0.457166 0.594734 0.66128 + 1.58155 4.72317 4.41606 0.446919 0.561858 0.696117 + 1.74296 4.39244 4.5459 0.486243 0.455029 0.746001 + 1.71986 5.09801 3.95141 0.497743 0.654933 0.568608 + 1.4045 5.24815 4.02597 0.428489 0.685969 0.588084 + 1.36275 5.14532 4.16988 0.416279 0.658873 0.626577 + 1.31486 5.02819 4.31615 0.399374 0.617523 0.677617 + 1.7539 5.20939 3.79071 0.509878 0.6792 0.527932 + 1.43854 5.35952 3.86526 0.43637 0.696795 0.569261 + 1.12536 5.39737 4.04032 0.362671 0.719854 0.591845 + 1.24504 5.61941 3.67913 0.364099 0.752389 0.548947 + 1.26774 5.71298 3.52805 0.38281 0.774771 0.503175 + 1.02628 5.18841 4.32803 0.347347 0.649667 0.676227 + 1.24892 4.93102 4.43325 0.379631 0.594307 0.708999 + 1.19624 4.83116 4.54582 0.381561 0.598503 0.704419 + 1.52887 4.62331 4.52863 0.445921 0.537041 0.716059 + 0.884016 5.00403 4.55201 0.330896 0.619984 0.711426 + 1.16372 4.76716 4.61927 0.369696 0.564099 0.738321 + 1.42798 4.54238 4.6458 0.409611 0.499168 0.763577 + 1.64207 4.31151 4.66307 0.46973 0.408967 0.782368 + 0.8515 4.94003 4.62545 0.301013 0.60428 0.737724 + 0.85536 4.85492 4.68867 0.282565 0.544035 0.790053 + 1.07525 4.67906 4.71546 0.320392 0.493399 0.808645 + 1.33951 4.45427 4.74201 0.367867 0.442547 0.817818 + 1.55192 4.20397 4.75893 0.426267 0.356838 0.831242 + 0.551163 4.94179 4.7168 0.210461 0.561688 0.800133 + 0.770676 4.77739 4.76376 0.247134 0.491921 0.834828 + 0.990565 4.60152 4.79056 0.280788 0.44819 0.848696 + 1.22576 4.32411 4.85146 0.3211 0.390445 0.862813 + 1.43817 4.07381 4.86839 0.381876 0.306349 0.871964 + 0.449577 4.90912 4.76318 0.16314 0.541058 0.82501 + 0.66909 4.74481 4.81019 0.234444 0.485341 0.842307 + 0.884919 4.49976 4.87041 0.267078 0.41303 0.870675 + 1.12011 4.22235 4.93131 0.258373 0.334263 0.906373 + 1.33197 3.94823 4.94689 0.323482 0.242215 0.914708 + 0.382229 4.84671 4.81289 0.130663 0.522575 0.842521 + 0.572612 4.68144 4.87435 0.21802 0.478742 0.850455 + 0.788441 4.43648 4.93462 0.244569 0.362726 0.899231 + 1.0017 4.09007 5.00022 0.214301 0.261916 0.940997 + 1.21356 3.81596 5.0158 0.258702 0.184379 0.948197 + 0.332602 4.78452 4.8588 0.0823826 0.48666 0.869699 + 0.522985 4.61924 4.92026 0.175513 0.407951 0.895975 + 0.652423 4.35927 4.98336 0.15821 0.277783 0.947526 + 0.414322 4.60138 4.944 0.0730142 0.350317 0.933781 + 0.54376 4.3414 5.00711 0.105858 0.24824 0.962897 + 0.630538 3.96772 5.07934 0.0711827 0.165669 0.983609 + 0.865683 4.01294 5.04901 0.154586 0.204109 0.966666 + 0.285445 4.61442 4.94183 0.00888124 0.347949 0.937471 + 0.32929 4.34471 5.01578 0.0166305 0.229806 0.973094 + 0.126618 4.00777 5.07718 -0.00899253 0.145264 0.989352 + 0.416069 3.97102 5.08802 0.0125617 0.152476 0.988227 + -0.126618 4.00777 5.07718 0.00857274 0.148449 0.988883 + -0.168625 3.67585 5.11488 0.0335816 0.0700883 0.996975 + -0.036021 3.60958 5.11106 0.0340239 0.0444754 0.998431 + 0.036019 3.60958 5.11106 -0.0312578 0.0527594 0.998118 + 0.168625 3.67585 5.11488 -0.0475263 0.0797874 0.995678 + -0.453675 3.28342 5.13379 0.0184732 -0.0443496 0.998845 + -0.276569 3.30822 5.13443 0.00945991 -0.0334062 0.999397 + -0.143965 3.24195 5.13062 0.0491112 -0.0919628 0.994551 + -0.036021 3.22358 5.11523 0.0606462 -0.0963806 0.993495 + 0.036019 3.22358 5.11523 -0.0606653 -0.0963602 0.993496 + -0.613586 3.19338 5.13494 -0.01899 -0.0926544 0.995517 + -0.481604 2.89141 5.07997 -0.00407933 -0.246547 0.969122 + -0.304498 2.9162 5.08063 0.048865 -0.210134 0.976451 + -0.169009 2.89863 5.06505 0.0828932 -0.225449 0.970722 + -0.061064 2.88035 5.04972 0.0588927 -0.255182 0.965098 + -0.739636 3.19127 5.1252 -0.0767826 -0.0885667 0.993106 + -0.748806 2.8824 5.05998 -0.0827097 -0.275901 0.957621 + -0.622755 2.88451 5.06972 -0.0657268 -0.26867 0.960987 + -0.460761 2.49748 4.94567 -0.0748446 -0.294213 0.952805 + -0.808039 3.18561 5.11939 -0.0806067 -0.0878201 0.99287 + -0.861885 2.89341 5.05169 -0.0737692 -0.280627 0.956978 + -0.731464 2.51883 4.92969 -0.104952 -0.332579 0.937217 + -0.601912 2.49058 4.93542 -0.0903038 -0.320347 0.942986 + -0.941057 2.87871 5.04416 -0.131866 -0.28773 0.94859 + -0.966131 2.6097 4.9291 -0.187203 -0.355123 0.915884 + -0.844543 2.52985 4.92141 -0.141239 -0.34552 0.927722 + -0.729918 2.25879 4.83789 -0.145149 -0.336756 0.930337 + -1.0351 2.88445 5.02402 -0.208229 -0.303092 0.929933 + -1.06018 2.61545 4.90895 -0.274133 -0.352606 0.894718 + -0.98127 2.37989 4.83674 -0.220625 -0.358481 0.907092 + -0.859682 2.30012 4.82911 -0.172967 -0.350769 0.920349 + -1.17369 2.68191 4.89262 -0.279532 -0.365124 0.888001 + -1.21853 2.49981 4.80543 -0.296156 -0.35098 0.888316 + -1.10502 2.43343 4.8218 -0.29743 -0.352398 0.887328 + -1.00337 2.1928 4.755 -0.230279 -0.314649 0.920852 + -0.872669 2.14869 4.76999 -0.186075 -0.305523 0.933826 + -1.12712 2.24625 4.74002 -0.280957 -0.318961 0.905167 + -0.985657 1.94226 4.68794 -0.232328 -0.247505 0.940619 + -0.854955 1.89815 4.70294 -0.193071 -0.235839 0.95242 + -0.719277 1.86649 4.72337 -0.184152 -0.223843 0.95707 + -0.742904 2.10736 4.77878 -0.164809 -0.286427 0.943821 + -1.11812 1.97832 4.65868 -0.283296 -0.257614 0.923785 + -0.941492 1.61095 4.6206 -0.243542 -0.23446 0.941125 + -0.802828 1.5775 4.64393 -0.20175 -0.228845 0.952327 + -0.66715 1.54584 4.66436 -0.204871 -0.234155 0.950368 + -0.756166 1.30549 4.58525 -0.187959 -0.253758 0.94883 + -0.618234 1.26053 4.59593 -0.182971 -0.276477 0.943441 + -0.533475 1.49319 4.68135 -0.175303 -0.239478 0.954945 + -0.585319 1.85745 4.74583 -0.163337 -0.216363 0.962553 + -0.608946 2.09832 4.80124 -0.157941 -0.272977 0.948967 + -0.572878 1.03708 4.54095 -0.083161 -0.345928 0.934568 + -0.436992 0.976107 4.51797 -0.0559284 -0.412472 0.909252 + -0.484559 1.20779 4.61287 -0.127697 -0.322557 0.937897 + -0.356444 1.14556 4.59446 -0.0443588 -0.350538 0.935497 + -0.399265 1.46708 4.69638 -0.0729508 -0.240995 0.967781 + -0.400256 0.781019 4.42307 -0.0106649 -0.510206 0.859986 + -0.284118 0.698607 4.36901 0.000932436 -0.554439 0.832224 + -0.308877 0.91388 4.49955 0.0485728 -0.432285 0.900428 + -0.268127 0.521252 4.2368 -0.0753403 -0.663891 0.744025 + -0.16076 0.430421 4.16132 -0.0072755 -0.674685 0.73807 + -0.175686 0.614286 4.31086 0.137063 -0.556624 0.81938 + -0.200446 0.82956 4.44139 0.0596473 -0.491286 0.868953 + -0.11943 0.272204 4.00076 -0.208514 -0.783694 0.585103 + -0.06733 0.225955 3.95507 0.0178055 -0.790443 0.612277 + -0.078383 0.34054 4.076 0.30374 -0.635554 0.709798 + -0.093309 0.524492 4.22559 0.189826 -0.594423 0.781427 + -0.017312 0.102744 3.76948 -0.124459 -0.883564 0.451469 + -0.017312 0.136658 3.83734 -0.204271 -0.829768 0.519383 + -0.028364 0.251335 3.95831 0.19298 -0.696101 0.691521 + -0.028364 0.420627 4.12849 -0.0175842 -0.674384 0.738171 + -0.037326 0.63723 4.28972 0.128472 -0.58124 0.803527 + -0.102271 0.741095 4.38682 0.239922 -0.504773 0.829241 + 0.017312 0.102744 3.76948 0.0866434 -0.844051 0.529216 + 0.017312 0.136658 3.83734 0.20427 -0.82977 0.51938 + 0.028357 0.251335 3.95831 -0.193868 -0.698862 0.688482 + 0.028357 0.420627 4.12849 -0.108218 -0.639865 0.76083 + 0.037325 0.63723 4.28972 -0.129928 -0.586594 0.799391 + 0.06733 0.225955 3.95507 -0.0173498 -0.790553 0.612148 + 0.078376 0.340545 4.07599 -0.14255 -0.696546 0.703209 + 0.093302 0.524492 4.22559 -0.18882 -0.591303 0.784033 + 0.10227 0.741095 4.38682 -0.0782281 -0.572254 0.816337 + 0.069407 0.149078 3.81522 0.168529 -0.826828 0.536613 + 0.119425 0.272204 4.00076 0.170351 -0.771974 0.612403 + 0.16076 0.430421 4.16132 0.00605378 -0.676566 0.736357 + 0.175687 0.614286 4.31086 -0.158377 -0.544376 0.823754 + 0.200447 0.82956 4.44139 -0.0635871 -0.498487 0.864562 + 0.032373 0.030536 3.65695 0.145489 -0.757769 0.636096 + 0.118184 0.172667 3.84657 0.121926 -0.819007 0.56068 + 0.226793 0.363122 4.07629 0.15692 -0.755885 0.63562 + 0.268128 0.521252 4.2368 0.100941 -0.672467 0.733212 + 0.08115 0.054032 3.68825 0.137498 -0.854595 0.500761 + 0.227669 0.22229 3.88322 0.108977 -0.798666 0.591825 + 0.336278 0.412744 4.11294 0.136049 -0.721329 0.679099 + 0.413241 0.285763 3.95348 0.147936 -0.77677 0.612163 + 0.457244 0.502509 4.16846 0.187171 -0.699479 0.689707 + 0.505232 0.693511 4.34644 0.168456 -0.636767 0.752429 + 0.384265 0.603749 4.29091 0.125167 -0.652449 0.747424 + 0.284118 0.698607 4.36901 0.000405746 -0.551966 0.833866 + 0.199095 0.111021 3.73594 0.168197 -0.856183 0.488529 + 0.384668 0.174494 3.8062 0.151031 -0.855663 0.495005 + 0.559882 0.362934 3.99721 0.236794 -0.729579 0.641594 + 0.603885 0.57968 4.2122 0.205733 -0.683039 0.700807 + 0.640456 0.753492 4.35995 0.215102 -0.619996 0.754543 + 0.222855 0.076819 3.64278 0.261264 -0.916036 0.304334 + 0.405595 0.146048 3.72687 0.244611 -0.920584 0.30445 + 0.5671 0.212172 3.77694 0.303262 -0.889085 0.342871 + 0.546173 0.240623 3.85626 0.249228 -0.814257 0.524281 + 0.698136 0.433094 4.01169 0.309269 -0.71703 0.624677 + 0.23707 0.061669 3.56102 0.350144 -0.932646 0.0870095 + 0.41981 0.130899 3.64511 0.302144 -0.942544 0.142547 + 0.580437 0.192389 3.69601 0.336802 -0.926155 0.169712 + 0.700407 0.270469 3.80217 0.325902 -0.850786 0.412252 + 0.684426 0.310778 3.87075 0.306681 -0.766432 0.564384 + 0.419131 0.125386 3.56126 0.322002 -0.945693 0.0444952 + 0.579758 0.186964 3.61221 0.349233 -0.934132 0.0737142 + 0.713744 0.250686 3.72123 0.366499 -0.909607 0.195686 + 0.807504 0.32129 3.81354 0.355221 -0.82918 0.4316 + 0.582589 0.17972 3.52715 0.332727 -0.939061 0.0863546 + 0.724983 0.245138 3.63444 0.371342 -0.92324 0.0986587 + 0.829485 0.290214 3.64637 0.398504 -0.910746 0.108332 + 0.818245 0.295757 3.73317 0.379328 -0.89781 0.223714 + 0.727814 0.237982 3.54944 0.360635 -0.926939 0.103568 + 0.839325 0.283289 3.56156 0.39462 -0.911153 0.118643 + 0.901522 0.324581 3.64824 0.407885 -0.907555 0.0998716 + 0.889591 0.326565 3.73001 0.414165 -0.882604 0.222434 + 0.87885 0.352189 3.81043 0.413976 -0.803967 0.426921 + 0.842589 0.273449 3.47381 0.36121 -0.919414 0.155581 + 0.911362 0.317569 3.56339 0.382289 -0.911803 0.149903 + 1.02128 0.372296 3.6162 0.38698 -0.907799 0.1617 + 1.00935 0.374284 3.69795 0.434578 -0.870421 0.231321 + 0.999038 0.407612 3.78343 0.467217 -0.768616 0.436963 + 0.92372 0.307112 3.4815 0.343319 -0.92175 0.180303 + 1.03236 0.353714 3.53078 0.350733 -0.913232 0.207349 + 1.18774 0.424785 3.54869 0.385461 -0.887364 0.252992 + 1.16866 0.443531 3.64062 0.455006 -0.833079 0.314562 + 1.29106 0.465541 3.5313 0.503585 -0.797351 0.332616 + 1.29236 0.517844 3.6271 0.567315 -0.70587 0.424149 + 1.15835 0.476777 3.72603 0.513923 -0.737074 0.438867 + 1.37396 0.509985 3.47731 0.609641 -0.699364 0.373132 + 1.40912 0.598923 3.58947 0.611471 -0.687514 0.391699 + 1.29221 0.579154 3.71251 0.56437 -0.691397 0.451061 + 1.1582 0.538174 3.81149 0.51694 -0.69684 0.497179 + 1.46022 0.511524 3.33845 0.661922 -0.640609 0.389204 + 1.49537 0.600548 3.45065 0.666996 -0.659474 0.346715 + 1.54136 0.704368 3.54803 0.666631 -0.666083 0.33457 + 1.44189 0.682476 3.68675 0.597719 -0.702049 0.387115 + 1.32498 0.662709 3.80979 0.54056 -0.712473 0.447413 + 1.56986 0.583876 3.24593 0.712371 -0.530732 0.459186 + 1.61585 0.687698 3.34331 0.701167 -0.6334 0.327367 + 1.59424 0.805556 3.65557 0.705947 -0.620175 0.342085 + 1.49477 0.783668 3.79428 0.620268 -0.645179 0.446106 + 1.38252 0.755475 3.88891 0.559501 -0.652639 0.510903 + 1.65977 0.595445 3.1389 0.530351 -0.559547 0.636895 + 1.69813 0.726735 3.25369 0.508273 -0.691615 0.513155 + 1.6807 0.861303 3.54682 0.725403 -0.599312 0.338549 + 1.72597 1.01679 3.69349 0.729961 -0.54229 0.416028 + 1.63951 0.960962 3.8022 0.738618 -0.491797 0.461064 + 1.76298 0.90034 3.4572 0.697311 -0.607765 0.379972 + 1.82446 1.06329 3.59596 0.717629 -0.568598 0.402125 + 1.77437 1.18415 3.82923 0.666476 -0.531775 0.522519 + 1.66388 1.13845 3.91158 0.676316 -0.478514 0.560019 + 1.91628 1.1104 3.48777 0.687528 -0.607123 0.39838 + 1.87287 1.23073 3.73175 0.685338 -0.555294 0.471126 + 1.92797 1.42525 3.85644 0.65931 -0.474878 0.582925 + 1.81817 1.38522 3.94096 0.638687 -0.451324 0.623206 + 1.97879 1.26809 3.64004 0.657222 -0.589996 0.469002 + 2.03389 1.46269 3.76477 0.683295 -0.481485 0.548889 + 1.98256 1.64831 3.95749 0.655709 -0.412744 0.632209 + 1.87276 1.60828 4.04202 0.617402 -0.414599 0.668522 + 2.13417 1.51403 3.67706 0.728469 -0.466285 0.501908 + 2.08837 1.69435 3.87533 0.686929 -0.408522 0.601032 + 2.13287 1.98865 4.00359 0.680107 -0.357191 0.640209 + 2.02705 1.9426 4.08575 0.64693 -0.363393 0.670393 + 2.18866 1.74569 3.78762 0.725366 -0.405236 0.556442 + 2.23098 2.04488 3.9266 0.71235 -0.350831 0.607845 + 2.16569 2.34754 4.15417 0.680814 -0.32071 0.658512 + 2.06529 2.30954 4.23558 0.647547 -0.334039 0.684909 + 2.32652 2.11846 3.85235 0.737179 -0.34434 0.581375 + 2.2638 2.40369 4.07712 0.703857 -0.309903 0.639176 + 2.23071 2.75267 4.26706 0.704848 -0.269927 0.655994 + 2.14538 2.68183 4.32996 0.690635 -0.287135 0.66376 + 2.35401 2.47291 4.00843 0.724547 -0.301144 0.619955 + 2.32092 2.82189 4.19837 0.717417 -0.256977 0.647515 + 2.13899 3.08376 4.4888 0.693077 -0.185557 0.696573 + 2.05366 3.01292 4.5517 0.686493 -0.203207 0.698165 + 2.40224 2.90154 4.13742 0.724859 -0.248558 0.642493 + 2.21668 3.16849 4.43025 0.69993 -0.165775 0.694706 + 2.08087 3.45036 4.60384 0.648443 -0.0183955 0.761041 + 2.00318 3.36563 4.6624 0.645155 -0.0330288 0.763338 + 2.298 3.24814 4.36929 0.6972 -0.155298 0.699853 + 2.16285 3.53564 4.53012 0.655194 0.00920751 0.755404 + 1.91851 3.68226 4.70637 0.572735 0.143768 0.807035 + 2.00049 3.76746 4.63261 0.585234 0.169721 0.792903 + 1.82588 4.03272 4.66956 0.511661 0.297051 0.806203 + 1.73573 3.92518 4.76543 0.490588 0.26284 0.830806 + 1.8346 3.55934 4.78748 0.532126 0.0899927 0.841869 + 1.89297 4.11716 4.5969 0.500414 0.338098 0.797042 + 1.65182 3.80226 4.84653 0.456126 0.205762 0.865801 + 1.54562 3.67677 4.92508 0.401523 0.13732 0.905496 + 1.70185 3.41556 4.86911 0.463396 0.00673877 0.886126 + 1.80006 3.43825 4.8144 0.519388 0.0106047 0.854472 + 1.96864 3.24454 4.68932 0.671263 -0.0821063 0.736658 + 1.42499 3.56737 4.98257 0.348177 0.0926658 0.932837 + 1.58122 3.30616 4.9266 0.425314 -0.0520848 0.903546 + 1.6919 3.0549 4.83039 0.477747 -0.186797 0.858408 + 1.7935 3.12682 4.78942 0.488323 -0.159843 0.857899 + 1.8917 3.14942 4.73467 0.571543 -0.156039 0.8056 + 1.14611 3.67064 5.05489 0.209351 0.114225 0.971146 + 1.35754 3.42205 5.02166 0.347281 0.0322239 0.937207 + 1.46485 3.21364 4.96944 0.39152 -0.0939165 0.915364 + 0.993089 3.68812 5.07862 0.145085 0.108972 0.9834 + 1.22541 3.29936 5.06057 0.221278 -0.0421704 0.974298 + 1.33272 3.09095 5.00835 0.325064 -0.163369 0.931474 + 1.4663 2.89464 4.90477 0.37536 -0.26665 0.887695 + 1.57553 2.96239 4.87323 0.439571 -0.220094 0.870825 + 0.757944 3.6429 5.10895 0.0830556 0.0858306 0.992842 + 0.958766 3.27031 5.09969 0.155946 -0.0305617 0.987293 + 1.07239 3.31675 5.08426 0.149254 -0.0226684 0.988539 + 1.21843 3.01113 5.0242 0.23259 -0.235513 0.943629 + 0.68639 3.5435 5.12112 0.0909173 0.0567912 0.994238 + 0.887212 3.17091 5.11186 0.186094 -0.111762 0.976155 + 0.941054 2.87871 5.04416 0.144061 -0.272918 0.95119 + 1.0351 2.88445 5.02402 0.208241 -0.303094 0.92993 + 1.10481 2.96469 5.03964 0.160819 -0.255759 0.95327 + 0.617988 3.54915 5.12692 0.0554546 0.060742 0.996612 + 0.808039 3.18561 5.11939 0.0806072 -0.0878199 0.99287 + 0.861881 2.89341 5.05169 0.0674412 -0.271256 0.960142 + 0.458076 3.63911 5.12571 0.00855743 0.0767953 0.99701 + 0.613587 3.19338 5.13494 0.0189589 -0.092632 0.99552 + 0.739637 3.19127 5.1252 0.0767833 -0.0885661 0.993106 + 0.748809 2.8824 5.05998 0.0851551 -0.272994 0.958239 + 0.84454 2.52985 4.92141 0.139294 -0.349418 0.926555 + 0.276569 3.30822 5.13443 -0.015804 -0.041527 0.999012 + 0.453675 3.28342 5.13378 -0.0148087 -0.0487054 0.998703 + 0.481604 2.89141 5.07997 0.0128763 -0.237057 0.97141 + 0.622758 2.88451 5.06972 0.0635068 -0.265686 0.961966 + 0.143964 3.24195 5.13062 -0.0490992 -0.091944 0.994553 + 0.169004 2.89863 5.06505 -0.0896965 -0.236381 0.967512 + 0.304498 2.91621 5.08062 -0.0544776 -0.202464 0.977773 + 0.06106 2.88035 5.04972 -0.0461286 -0.269083 0.962012 + 0.06106 2.47763 4.90566 -0.129033 -0.277718 0.951958 + 0.194119 2.46558 4.94153 -0.165542 -0.268496 0.94895 + 0.329613 2.48315 4.9571 0.0125246 -0.292442 0.956201 + -0.061064 2.47763 4.90566 0.136515 -0.287229 0.948084 + -0.066662 2.22117 4.84245 0.130976 -0.0255291 0.991057 + 0.06666 2.22117 4.84245 -0.093112 -0.0629048 0.993667 + 0.199719 2.20912 4.87832 -0.124011 -0.21396 0.968939 + 0.338014 2.20633 4.87336 0.0798532 -0.237676 0.968056 + -0.194123 2.46558 4.94153 0.158418 -0.277759 0.947499 + -0.199721 2.20904 4.87827 0.0723522 -0.165933 0.983479 + -0.066662 2.10356 4.86675 0.0153311 -0.0531574 0.998469 + 0.06666 2.10357 4.86674 0.0296002 -0.0118345 0.999492 + 0.205331 2.10297 4.85859 -0.000590693 -0.163757 0.986501 + -0.329613 2.48315 4.9571 -0.0209634 -0.280896 0.959509 + -0.338025 2.20633 4.87336 -0.0623166 -0.223014 0.972821 + -0.205333 2.10297 4.85859 -0.0433549 -0.203224 0.978172 + -0.193778 1.81952 4.79314 -0.0359448 -0.251317 0.967237 + -0.055108 1.82012 4.80129 -0.0273549 -0.264827 0.963908 + -0.469173 2.22066 4.86194 -0.13962 -0.283734 0.948684 + -0.343636 2.10026 4.85368 -0.113288 -0.220933 0.968687 + -0.316992 1.84324 4.79504 -0.124844 -0.24625 0.961132 + -0.143478 1.37916 4.67886 0.111431 -0.284868 0.952068 + -0.055108 1.27413 4.62718 0.0615891 -0.339909 0.938439 + -0.600366 2.23063 4.84367 -0.132611 -0.311944 0.9408 + -0.477753 2.08844 4.81955 -0.182925 -0.261751 0.947642 + -0.451109 1.83142 4.76091 -0.172841 -0.228024 0.958192 + -0.266692 1.40288 4.68077 -0.0301442 -0.285015 0.958049 + -0.125696 0.992824 4.52421 0.0830763 -0.419569 0.903914 + -0.223871 1.08129 4.57879 0.0707025 -0.372905 0.925172 + -0.037326 0.887793 4.47253 -0.0786295 -0.513223 0.854646 + 0.055106 1.27413 4.62717 -0.0633069 -0.345381 0.936325 + 0.037325 0.887793 4.47253 -0.0045344 -0.478726 0.877952 + 0.143476 1.37917 4.67885 -0.0549522 -0.317859 0.946544 + 0.055106 1.82012 4.80129 0.0198876 -0.254714 0.966812 + 0.125695 0.992824 4.52421 -0.080558 -0.412653 0.907319 + 0.266694 1.40288 4.68077 0.0250415 -0.293139 0.955742 + 0.193777 1.8196 4.79319 0.0436417 -0.241895 0.969321 + 0.343625 2.10025 4.85369 0.13296 -0.202518 0.97021 + 0.223872 1.08129 4.57879 -0.102943 -0.345231 0.932855 + 0.399267 1.46708 4.69638 0.0996345 -0.266208 0.958753 + 0.316994 1.84324 4.79504 0.116424 -0.232371 0.965634 + 0.477742 2.08844 4.81956 0.172771 -0.25193 0.952198 + 0.308878 0.91388 4.49955 0.0230627 -0.476866 0.878673 + 0.356445 1.14556 4.59446 0.0504753 -0.341489 0.938529 + 0.533477 1.49319 4.68135 0.176178 -0.238344 0.955067 + 0.451111 1.83142 4.76091 0.185346 -0.21502 0.95886 + 0.437002 0.976107 4.51797 0.0473672 -0.423403 0.904702 + 0.484569 1.20779 4.61287 0.0907409 -0.286699 0.953714 + 0.667151 1.54584 4.66436 0.201888 -0.231096 0.951754 + 0.585321 1.85745 4.74583 0.164995 -0.21864 0.961755 + 0.608959 2.09832 4.80123 0.165594 -0.264029 0.950193 + 0.400256 0.781019 4.42307 -0.000185284 -0.503147 0.864201 + 0.572888 1.03708 4.54095 0.132448 -0.387693 0.912223 + 0.618244 1.26053 4.59593 0.19345 -0.262811 0.945255 + 0.802826 1.57758 4.64398 0.202981 -0.227326 0.952429 + 0.719279 1.86649 4.72337 0.182769 -0.225335 0.956984 + 0.536141 0.841995 4.44606 0.116833 -0.505686 0.85477 + 0.71081 1.08213 4.53032 0.203883 -0.340475 0.917883 + 0.756166 1.30549 4.58525 0.188774 -0.254654 0.948428 + 0.941491 1.61095 4.6206 0.241126 -0.231558 0.942465 + 0.854954 1.89815 4.70294 0.196229 -0.239324 0.950904 + 0.671365 0.901889 4.45952 0.179325 -0.470172 0.864165 + 0.851214 1.11841 4.50649 0.294277 -0.34399 0.891668 + 0.89483 1.33894 4.56192 0.278438 -0.270967 0.921439 + 1.07396 1.64692 4.59128 0.331799 -0.252466 0.908939 + 0.985656 1.94234 4.68799 0.231211 -0.249054 0.940486 + 0.781792 0.809541 4.36027 0.303734 -0.596549 0.742882 + 0.811769 0.938248 4.43574 0.309418 -0.468492 0.827512 + 0.985987 1.14855 4.46448 0.426726 -0.351933 0.833095 + 1.0296 1.369 4.51986 0.378869 -0.306808 0.873113 + 0.745222 0.635818 4.21257 0.292696 -0.677525 0.674751 + 0.919797 0.840262 4.31706 0.388128 -0.576277 0.719209 + 0.949774 0.968969 4.39253 0.420456 -0.461927 0.780923 + 1.11225 1.17063 4.39344 0.493681 -0.378198 0.7831 + 0.823599 0.487744 4.00924 0.308141 -0.711242 0.631811 + 0.870685 0.690466 4.21011 0.34351 -0.64817 0.679615 + 1.05235 0.848769 4.24332 0.464676 -0.553747 0.69097 + 1.07604 0.990964 4.32143 0.502603 -0.444474 0.741507 + 0.791524 0.361599 3.88213 0.306478 -0.748676 0.58784 + 0.902616 0.527941 4.01681 0.364105 -0.695754 0.619156 + 1.00323 0.698969 4.13638 0.422654 -0.641398 0.640291 + 1.17891 0.862822 4.16378 0.497765 -0.53561 0.682167 + 0.87054 0.401797 3.8897 0.377166 -0.731788 0.567655 + 1.01995 0.547596 3.95637 0.458437 -0.688446 0.562031 + 1.12057 0.718627 4.07593 0.456855 -0.63689 0.62101 + 1.3033 0.865423 4.07208 0.541695 -0.526554 0.655215 + 1.2026 1.0051 4.24194 0.528858 -0.444225 0.723169 + 0.990729 0.457313 3.86275 0.47081 -0.713856 0.518409 + 1.18742 0.628457 3.90512 0.493701 -0.700614 0.515169 + 1.24496 0.721223 3.98424 0.493019 -0.662374 0.564086 + 1.42149 0.889875 3.98692 0.598697 -0.512145 0.615848 + 1.32338 1.02894 4.16285 0.565193 -0.434894 0.701017 + 1.53374 0.918068 3.89229 0.64322 -0.512676 0.568711 + 1.44158 1.0534 4.07769 0.594718 -0.441061 0.672142 + 1.47608 1.25865 4.17559 0.581269 -0.401202 0.707929 + 1.35746 1.22365 4.248 0.557483 -0.395859 0.729731 + 1.23668 1.19981 4.3271 0.530777 -0.392507 0.751142 + 1.55811 1.09555 4.00168 0.629852 -0.451547 0.631974 + 1.59261 1.30081 4.09957 0.591983 -0.411903 0.692743 + 1.52366 1.5029 4.26593 0.556874 -0.382205 0.737435 + 1.40504 1.46782 4.33829 0.54822 -0.365178 0.752396 + 1.28469 1.42995 4.40648 0.524964 -0.358875 0.771765 + 1.70767 1.33952 4.02331 0.627781 -0.433967 0.646192 + 1.64331 1.53754 4.19673 0.567878 -0.394118 0.722624 + 1.69093 1.83115 4.30698 0.549143 -0.360751 0.753857 + 1.57128 1.79651 4.37618 0.522358 -0.354602 0.775499 + 1.4519 1.7518 4.43043 0.505121 -0.327733 0.798401 + 1.75837 1.57626 4.12047 0.598716 -0.403378 0.691973 + 1.80501 1.87262 4.24177 0.578622 -0.364946 0.729391 + 1.73252 2.19524 4.44797 0.535026 -0.35886 0.764831 + 1.61944 2.1369 4.49541 0.506039 -0.35889 0.784298 + 1.50006 2.09219 4.54966 0.418901 -0.351467 0.837253 + 1.9194 1.90472 4.16336 0.608974 -0.365701 0.703856 + 1.8466 2.2367 4.38276 0.567671 -0.356841 0.741899 + 1.83623 2.54914 4.541 0.55545 -0.358178 0.750456 + 1.72681 2.49021 4.58866 0.519334 -0.365533 0.772449 + 1.61373 2.43179 4.63605 0.458219 -0.3744 0.806139 + 1.95764 2.27166 4.3132 0.601845 -0.349297 0.718174 + 1.94726 2.5841 4.47144 0.604456 -0.340142 0.720373 + 1.7774 2.78615 4.69809 0.527126 -0.310637 0.790976 + 1.66799 2.72722 4.74575 0.48511 -0.3282 0.810526 + 1.55876 2.65939 4.77724 0.417146 -0.359934 0.834528 + 2.04499 2.64384 4.41137 0.650129 -0.31547 0.691238 + 1.87899 2.85807 4.65711 0.571262 -0.2896 0.767979 + 1.97672 2.9178 4.59705 0.65247 -0.253819 0.714044 + 1.44593 2.60017 4.80041 0.257662 -0.42463 0.867929 + 1.50091 2.37257 4.65921 0.345915 -0.36824 0.862985 + 1.37587 2.04314 4.58001 0.385219 -0.323978 0.864086 + 1.35201 2.81481 4.92064 0.228274 -0.365585 0.902352 + 1.33731 2.54742 4.78797 0.215805 -0.409421 0.886455 + 1.37672 2.32352 4.68958 0.31693 -0.332352 0.888312 + 1.24894 2.0079 4.62565 0.338407 -0.286289 0.896393 + 1.33155 1.71384 4.49857 0.475129 -0.298176 0.827855 + 1.24339 2.76206 4.9082 0.18998 -0.40872 0.892667 + 1.21853 2.49981 4.80543 0.297067 -0.348958 0.888808 + 1.25794 2.27592 4.70703 0.280022 -0.315419 0.906697 + 1.11812 1.97832 4.65868 0.290981 -0.266915 0.918742 + 1.20462 1.67869 4.54425 0.381834 -0.270176 0.88386 + 1.17369 2.68191 4.89262 0.279532 -0.365117 0.888004 + 1.10502 2.43335 4.82176 0.293681 -0.350358 0.889382 + 1.12712 2.24625 4.74002 0.279282 -0.321578 0.904759 + 1.06018 2.61545 4.90895 0.274134 -0.352617 0.894713 + 0.981271 2.37989 4.83674 0.219137 -0.361744 0.906157 + 1.00337 2.1928 4.755 0.22438 -0.310985 0.923549 + 0.87267 2.14869 4.76999 0.188975 -0.300815 0.934772 + 0.966128 2.6097 4.9291 0.199935 -0.363202 0.910006 + 0.859683 2.30012 4.82911 0.183215 -0.355693 0.916468 + 0.72993 2.25879 4.83789 0.139526 -0.344087 0.928513 + 0.742917 2.10736 4.77878 0.1578 -0.280602 0.946764 + 0.731467 2.51883 4.92969 0.108072 -0.3359 0.935677 + 0.600378 2.23063 4.84367 0.14269 -0.319469 0.936792 + 0.469162 2.22066 4.86194 0.126716 -0.297719 0.946206 + 0.601915 2.49058 4.93542 0.088653 -0.322623 0.942367 + 0.460761 2.49748 4.94567 0.0856858 -0.306807 0.947907 + 1.16027 1.40077 4.47282 0.44072 -0.338532 0.831362 + -0.251458 2.05987 -3.28899 -0.218359 0.538832 -0.813621 + -0.23245 2.17267 -3.20717 -0.21192 0.731562 -0.648002 + -0.152461 2.19752 -3.16676 0.172897 0.865061 -0.470931 + -0.267721 1.89853 -3.37668 -0.307719 0.373517 -0.875097 + -0.310818 1.90591 -3.35837 -0.343209 0.388145 -0.855308 + -0.294555 2.06726 -3.27068 -0.396886 0.55638 -0.730016 + -0.248572 1.81892 -3.40553 -0.299508 -0.421526 -0.855927 + -0.284143 1.82119 -3.39091 -0.352686 -0.476198 -0.805511 + -0.31065 1.83131 -3.38534 -0.541482 -0.328912 -0.773702 + -0.327769 1.9222 -3.34395 -0.545759 0.401431 -0.735527 + -0.329604 2.02374 -3.2783 -0.64101 0.442267 -0.6273 + -0.206741 1.81786 -3.41565 -0.168602 -0.426708 -0.888535 + -0.235338 1.79851 -3.3656 -0.0778444 -0.991165 -0.107389 + -0.281294 1.8027 -3.34962 -0.238713 -0.968073 -0.0764938 + -0.307801 1.81282 -3.34405 -0.507137 -0.84637 -0.162696 + -0.327601 1.8476 -3.37092 -0.780887 -0.129977 -0.611001 + -0.145802 1.79423 -3.3803 -0.00251803 -0.980512 -0.196443 + -0.193506 1.79745 -3.37572 -0.0631678 -0.991158 -0.116684 + -0.090409 1.79758 -3.38053 0.105152 -0.957042 -0.270212 + -0.083178 1.80368 -3.33461 0.0607932 -0.928123 0.367277 + -0.127022 1.80633 -3.32918 -0.00742429 -0.894547 0.446911 + -0.174726 1.80955 -3.3246 0.00547908 -0.909947 0.414689 + -0.033943 1.80588 -3.37903 0.540004 -0.804734 -0.246575 + -0.026712 1.81199 -3.33312 0.564218 -0.798804 0.208735 + -0.026712 1.83793 -3.28811 0.440511 -0.756404 0.483531 + -0.077097 1.85489 -3.27132 -0.0232801 -0.805646 0.59194 + -0.120941 1.85754 -3.26589 0.0676383 -0.836412 0.543911 + 0 1.88767 -3.35525 0.922265 -0.319494 -0.217603 + -0.016252 1.87696 -3.22971 0.521247 -0.694291 0.496248 + -0.066636 1.89392 -3.21292 0.0744862 -0.873026 0.481952 + -0.101804 1.89658 -3.19232 0.119764 -0.914255 0.387032 + -0.141762 1.85626 -3.26403 0.09413 -0.846341 0.524259 + -0.016252 1.92627 -3.17244 0.72321 -0.621892 0.300361 + -0.030875 1.92357 -3.14486 0.480746 -0.803582 0.350913 + -0.066043 1.92622 -3.12427 0.19493 -0.912793 0.358903 + -0.122625 1.89529 -3.19047 0.141095 -0.924313 0.354596 + -0.160705 1.86355 -3.24917 0.177591 -0.870128 0.459716 + -0.011183 1.96532 -3.12314 0.906192 -0.313133 0.284191 + -0.025806 1.96262 -3.09556 0.74708 -0.470955 0.46912 + -0.057187 1.95648 -3.06427 0.495356 -0.693643 0.522954 + -0.120883 1.92386 -3.08813 0.217273 -0.90909 0.355454 + -0.011183 2.00908 -3.09637 0.962129 -0.0397052 0.269686 + -0.041291 1.9961 -3.05045 0.760701 -0.354126 0.543994 + -0.072672 1.98996 -3.01916 0.589456 -0.527498 0.611791 + -0.112028 1.95411 -3.02813 0.351856 -0.794393 0.495113 + -0.147395 1.9172 -3.09252 0.147189 -0.929507 0.338159 + -0.025536 2.06202 -3.04565 0.912294 -0.121763 0.391015 + -0.055645 2.04904 -2.99974 0.795514 -0.294027 0.529816 + -0.080386 2.03729 -2.9747 0.64465 -0.446693 0.620396 + -0.098622 1.98346 -3.00363 0.479707 -0.62103 0.619841 + -0.011587 2.07808 -3.08639 0.98191 0.0245926 0.187744 + -0.051364 2.13434 -2.97331 0.918314 -0.121087 0.376879 + -0.071744 2.11124 -2.94107 0.821001 -0.273425 0.501194 + -0.096485 2.0995 -2.91603 0.555575 -0.471126 0.685111 + -0.106336 2.03079 -2.95916 0.427257 -0.537206 0.727228 + -0.032105 2.15701 -3.05363 0.961641 0.273533 0.0206299 + -0.037415 2.1504 -3.01405 0.970944 0.0436742 0.235287 + -0.061569 2.19045 -2.92543 0.925257 -0.188719 0.329067 + -0.081949 2.16734 -2.89318 0.82727 -0.292898 0.479411 + -0.102944 2.15383 -2.872 0.557112 -0.467825 0.686125 + -0.043906 2.17882 -3.07158 0.808843 0.533337 -0.247638 + -0.044375 2.21465 -3.00057 0.984043 0.173808 -0.0380833 + -0.049685 2.20804 -2.96099 0.980836 -0.0527312 0.187566 + -0.060198 2.2336 -2.89595 0.925279 -0.217824 0.310503 + -0.081358 2.25834 -3.01682 0.422646 0.610891 -0.669464 + -0.054531 2.22951 -3.02005 0.782685 0.464533 -0.414263 + -0.048481 2.27233 -2.96812 0.972569 0.205606 -0.108789 + -0.048313 2.25119 -2.93151 0.991396 -0.0412564 0.124226 + -0.097358 2.23148 -3.06218 0.303969 0.759977 -0.574489 + -0.104256 2.26771 -3.01851 0.221836 0.665219 -0.712932 + -0.077574 2.29006 -2.99257 0.315715 0.665445 -0.676392 + -0.058636 2.28719 -2.9876 0.638596 0.557015 -0.530969 + -0.120311 2.23474 -3.06283 0.230218 0.833097 -0.50294 + -0.127209 2.27097 -3.01915 0.0880916 0.680018 -0.727884 + -0.123349 2.30196 -2.99864 0.11593 0.713936 -0.690547 + -0.100472 2.29943 -2.99426 0.26694 0.718151 -0.642653 + -0.089494 2.35141 -2.90314 0.23161 0.853124 -0.467479 + -0.106736 2.2085 -3.12135 0.490261 0.809485 -0.323075 + -0.138848 2.22171 -3.11437 0.227633 0.891642 -0.391353 + -0.152423 2.24796 -3.05585 0.0904188 0.866021 -0.491764 + -0.154284 2.27313 -3.01843 -0.0152724 0.704336 -0.709703 + -0.184307 2.23498 -3.10511 0.019555 0.937109 -0.348489 + -0.181421 2.25134 -3.04883 -0.0847387 0.893436 -0.441125 + -0.183282 2.27651 -3.01141 -0.194604 0.648238 -0.73615 + -0.183897 2.30362 -2.99704 -0.165107 0.675695 -0.718454 + -0.150424 2.30412 -2.99792 0.00673593 0.721367 -0.692521 + -0.197921 2.21078 -3.1575 -0.0182108 0.862449 -0.505817 + -0.227363 2.23092 -3.09344 -0.287568 0.907389 -0.306512 + -0.224477 2.24728 -3.03716 -0.282637 0.876315 -0.390113 + -0.219971 2.27262 -3.00065 -0.350766 0.62678 -0.69578 + -0.267374 2.17265 -3.19234 -0.427205 0.717835 -0.549735 + -0.232845 2.21076 -3.14267 -0.291392 0.876131 -0.384037 + -0.278273 2.20844 -3.08421 -0.537864 0.794916 -0.280733 + -0.271332 2.2369 -3.01597 -0.513607 0.774855 -0.368521 + -0.266826 2.26223 -2.97946 -0.503052 0.544678 -0.671017 + -0.293459 2.14228 -3.20248 -0.553463 0.636752 -0.536867 + -0.283755 2.18828 -3.13344 -0.581465 0.760323 -0.289495 + -0.30984 2.1579 -3.14358 -0.811951 0.536674 -0.229599 + -0.308809 2.18477 -3.07768 -0.812183 0.552145 -0.188402 + -0.301868 2.21323 -3.00943 -0.781573 0.576371 -0.238622 + -0.328509 2.09876 -3.2101 -0.794375 0.496494 -0.349946 + -0.348331 2.00741 -3.25833 -0.909443 0.262462 -0.322533 + -0.346668 2.05602 -3.20424 -0.944 0.301425 -0.134194 + -0.322175 2.12033 -3.14958 -0.934475 0.348612 -0.0722897 + -0.321143 2.14719 -3.08367 -0.944076 0.31689 -0.0911142 + -0.313911 2.189 -3.00771 -0.931044 0.352826 -0.0931184 + -0.346496 1.90587 -3.32399 -0.884811 0.193 -0.4241 + -0.361012 1.96411 -3.22222 -0.997379 0.035581 -0.0630031 + -0.35935 2.01272 -3.16812 -0.991915 0.0996217 0.0786141 + -0.352907 2.03101 -3.14275 -0.983721 0.110054 0.142062 + -0.340334 2.07758 -3.14371 -0.948807 0.313783 -0.0361418 + -0.33517 1.84774 -3.34792 -0.843722 -0.409428 -0.347134 + -0.345178 1.86107 -3.34457 -0.564471 0.0283059 -0.824968 + -0.35672 1.91106 -3.28705 -0.983636 0.0990789 -0.15048 + -0.353513 1.88831 -3.25743 -0.991042 -0.118767 0.0610789 + -0.357805 1.94136 -3.1926 -0.942532 -0.234948 0.237558 + -0.31537 1.81296 -3.32104 -0.457844 -0.885437 -0.0798684 + -0.340923 1.83189 -3.29333 -0.699523 -0.713746 0.0351388 + -0.350931 1.84522 -3.28997 -0.891516 -0.449983 0.0520898 + -0.355402 1.86627 -3.30763 -0.982489 -0.123404 -0.139592 + -0.349042 1.86726 -3.23978 -0.851427 -0.423322 0.309629 + -0.305358 1.81202 -3.29945 -0.127702 -0.941155 0.31292 + -0.330911 1.83094 -3.27173 -0.348666 -0.83127 0.432923 + -0.277517 1.8115 -3.30338 0.000438635 -0.920624 0.390449 + -0.295121 1.84395 -3.26153 0.092684 -0.82821 0.552701 + -0.296138 1.86434 -3.22731 0.0621897 -0.875939 0.478397 + -0.331928 1.85133 -3.23751 -0.294864 -0.809359 0.50793 + -0.326539 1.90949 -3.16483 -0.716455 -0.513282 0.472476 + -0.231561 1.80731 -3.31936 0.10679 -0.942221 0.317513 + -0.242772 1.84949 -3.25356 0.0126169 -0.859353 0.511228 + -0.267281 1.84343 -3.26547 -0.0228817 -0.812728 0.582194 + -0.272701 1.87554 -3.20482 0.00579415 -0.903613 0.42831 + -0.309425 1.89356 -3.16257 -0.310998 -0.809053 0.498712 + -0.208394 1.81534 -3.30799 0.106514 -0.908215 0.404721 + -0.219605 1.85752 -3.24219 0.0331016 -0.885616 0.463237 + -0.215573 1.88599 -3.1778 -0.015708 -0.930334 0.366377 + -0.248192 1.8816 -3.19291 -0.0110217 -0.919205 0.393625 + -0.193669 1.81684 -3.30973 0.0946689 -0.889434 0.447152 + -0.197347 1.8591 -3.23793 0.0616154 -0.887548 0.456577 + -0.193315 1.88757 -3.17354 0.0470639 -0.93674 0.346847 + -0.182622 1.86061 -3.23967 0.217704 -0.877168 0.427998 + -0.171053 1.8857 -3.18537 0.182903 -0.925894 0.330556 + -0.169656 1.91908 -3.08069 0.07424 -0.933414 0.351037 + -0.222994 1.91107 -3.10367 -0.0173308 -0.941348 0.336991 + -0.255613 1.90667 -3.11878 -0.124156 -0.921583 0.367792 + -0.149137 1.88864 -3.19486 0.215088 -0.92054 0.326103 + -0.165125 1.94022 -3.02443 0.108313 -0.907134 0.406666 + -0.218463 1.93221 -3.04741 -0.111582 -0.898779 0.423964 + -0.253433 1.93131 -3.06382 -0.264142 -0.837594 0.47819 + -0.225351 1.9563 -3.00877 -0.219118 -0.830583 0.511977 + -0.282463 1.94866 -3.05916 -0.49023 -0.724139 0.485075 + -0.283809 1.9294 -3.08511 -0.437836 -0.758427 0.482792 + -0.285988 1.90476 -3.14008 -0.0758485 -0.913571 0.399544 + -0.19038 1.9572 -2.99237 -0.145514 -0.763983 0.628614 + -0.17514 2.01276 -2.94363 0.135703 -0.5745 0.807177 + -0.221486 1.96884 -2.98288 0.121068 -0.834987 0.536786 + -0.142878 1.95267 -3.0086 0.273699 -0.812213 0.515169 + -0.168133 1.96965 -2.97654 0.0953047 -0.689024 0.718445 + -0.129472 1.98201 -2.9841 0.381677 -0.614563 0.690388 + -0.136479 2.02512 -2.9512 0.316344 -0.540863 0.779355 + -0.149155 2.08945 -2.9016 0.195232 -0.562646 0.803314 + -0.182592 2.09 -2.89932 0.0299881 -0.556464 0.83033 + -0.215792 2.08846 -2.89973 -0.117927 -0.545613 0.829698 + -0.20834 2.01122 -2.94405 -0.0712762 -0.585065 0.807848 + -0.119012 2.09512 -2.90956 0.317708 -0.556568 0.767655 + -0.12547 2.14946 -2.86554 0.334991 -0.576663 0.745144 + -0.151331 2.14541 -2.85801 0.174117 -0.61988 0.765135 + -0.184768 2.14596 -2.85572 0.0400575 -0.669956 0.741319 + -0.212844 2.14683 -2.85505 -0.135856 -0.668473 0.731223 + -0.103209 2.20056 -2.84094 0.673171 -0.477386 0.564751 + -0.122263 2.19353 -2.82877 0.460513 -0.614541 0.640521 + -0.148124 2.18949 -2.82124 0.293896 -0.690206 0.661242 + -0.176551 2.18416 -2.81201 0.176259 -0.748459 0.63933 + -0.204628 2.18504 -2.81134 -0.107222 -0.750932 0.651616 + -0.082215 2.21407 -2.86212 0.826353 -0.337796 0.450593 + -0.11137 2.27078 -2.76348 0.680305 -0.514465 0.522025 + -0.130423 2.26376 -2.75131 0.504414 -0.626712 0.593968 + -0.15082 2.25873 -2.74261 0.377074 -0.68718 0.620966 + -0.071664 2.30111 -2.81601 0.924252 -0.212027 0.317494 + -0.093681 2.28158 -2.78219 0.819853 -0.380389 0.427955 + -0.131873 2.36449 -2.64017 0.649771 -0.551772 0.522823 + -0.145505 2.36013 -2.63263 0.471492 -0.659434 0.585528 + -0.165902 2.35511 -2.62392 0.362104 -0.703069 0.612025 + -0.062194 2.31767 -2.84469 0.986158 0.0186609 0.164755 + -0.098132 2.38756 -2.68012 0.90883 -0.248176 0.335314 + -0.114185 2.37528 -2.65887 0.798363 -0.414673 0.436649 + -0.145322 2.44721 -2.53414 0.631681 -0.575774 0.519099 + -0.062361 2.3388 -2.8813 0.945746 0.322243 -0.0415247 + -0.088682 2.4174 -2.73182 0.943167 0.331759 -0.0193032 + -0.088662 2.40411 -2.7088 0.98495 0.021417 0.171507 + -0.117082 2.4663 -2.56721 0.903317 -0.268488 0.334564 + -0.133134 2.45403 -2.54596 0.781937 -0.444957 0.436564 + -0.070556 2.34854 -2.89817 0.610668 0.713171 -0.344199 + -0.096877 2.42714 -2.74869 0.575422 0.75827 -0.306456 + -0.110511 2.49009 -2.60842 0.939899 0.339659 -0.0349542 + -0.110491 2.47681 -2.5854 0.98469 -0.00573657 0.174221 + -0.134346 2.53153 -2.4672 0.892657 -0.0892953 0.441802 + -0.110532 2.42881 -2.75158 0.198245 0.879829 -0.431972 + -0.129787 2.4979 -2.62194 0.189268 0.874336 -0.446894 + -0.116132 2.49623 -2.61905 0.571454 0.754259 -0.323316 + -0.127775 2.55059 -2.50022 0.879144 0.47098 0.0726899 + -0.127755 2.54203 -2.48539 0.94369 0.184184 0.274819 + -0.107449 2.35357 -2.90688 0.192312 0.863848 -0.465599 + -0.128487 2.43097 -2.75532 0.175695 0.883329 -0.434582 + -0.142106 2.49922 -2.62423 0.167668 0.877041 -0.450207 + -0.142187 2.55777 -2.51265 0.171822 0.922607 -0.345359 + -0.133396 2.55673 -2.51085 0.53549 0.814638 -0.222746 + -0.130326 2.3561 -2.91125 0.121261 0.870736 -0.476565 + -0.14484 2.43253 -2.75802 0.107021 0.889835 -0.443555 + -0.158459 2.50078 -2.62693 0.104357 0.882685 -0.458233 + -0.16498 2.56009 -2.51667 0.100141 0.926764 -0.362049 + -0.154506 2.55909 -2.51493 0.155437 0.923946 -0.349517 + -0.154514 2.35691 -2.91266 0.0160742 0.873493 -0.486572 + -0.169028 2.43334 -2.75942 0.0153302 0.892056 -0.451664 + -0.175038 2.50128 -2.6278 0.013682 0.884916 -0.46555 + -0.187987 2.3564 -2.91177 -0.113945 0.863086 -0.492036 + -0.193077 2.43299 -2.75882 -0.106923 0.884529 -0.454067 + -0.199087 2.50094 -2.6272 -0.103096 0.878995 -0.465553 + -0.196999 2.56038 -2.51717 -0.0930509 0.922979 -0.373433 + -0.181559 2.5606 -2.51754 0.0126849 0.92831 -0.37159 + -0.220585 2.29972 -2.98628 -0.327904 0.640685 -0.694263 + -0.218494 2.35289 -2.90569 -0.271071 0.832024 -0.484 + -0.223585 2.42948 -2.75274 -0.248741 0.85982 -0.445911 + -0.220089 2.49869 -2.62331 -0.242939 0.857078 -0.45431 + -0.258012 2.29166 -2.97232 -0.464643 0.583242 -0.666285 + -0.255921 2.34483 -2.89174 -0.400385 0.788459 -0.466931 + -0.250666 2.42435 -2.74386 -0.36815 0.824968 -0.428827 + -0.247171 2.49356 -2.61442 -0.35535 0.82708 -0.435506 + -0.284352 2.27957 -2.96062 -0.637382 0.507025 -0.580232 + -0.275893 2.33922 -2.88201 -0.592933 0.69556 -0.405743 + -0.270638 2.41874 -2.73413 -0.561015 0.737811 -0.375363 + -0.260889 2.49002 -2.60827 -0.54621 0.748479 -0.376076 + -0.235442 2.55483 -2.50754 -0.327434 0.884796 -0.331547 + -0.293166 2.25013 -2.96776 -0.714989 0.465898 -0.521278 + -0.29339 2.27383 -2.95069 -0.849928 0.409895 -0.331072 + -0.28493 2.33348 -2.87208 -0.821451 0.503148 -0.26844 + -0.276981 2.41524 -2.72802 -0.795645 0.548389 -0.257327 + -0.267232 2.48651 -2.60215 -0.780405 0.571807 -0.252992 + -0.305209 2.2259 -2.96604 -0.913315 0.355514 -0.198661 + -0.312744 2.21232 -2.94996 -0.969967 0.232273 -0.0722071 + -0.300925 2.26025 -2.93461 -0.940963 0.29954 -0.157686 + -0.292781 2.32328 -2.85759 -0.922847 0.348015 -0.165039 + -0.284832 2.40503 -2.71352 -0.908802 0.386021 -0.158323 + -0.323131 2.16066 -3.00182 -0.977091 0.21184 -0.0204442 + -0.312674 2.20736 -2.92309 -0.973595 -0.0340987 0.22572 + -0.310056 2.24086 -2.9088 -0.992727 0.0721936 0.0963434 + -0.301912 2.30389 -2.83178 -0.997784 0.0452835 0.0487576 + -0.291723 2.39286 -2.69742 -0.996212 0.0758862 0.0424683 + -0.330363 2.11885 -3.07778 -0.960276 0.276503 -0.0376346 + -0.32306 2.1557 -2.97495 -0.97942 -0.018849 0.200951 + -0.306553 2.13106 -2.94589 -0.797598 -0.354726 0.48786 + -0.298173 2.1898 -2.89418 -0.822847 -0.285061 0.491592 + -0.295555 2.2233 -2.87989 -0.888521 -0.221718 0.401711 + -0.342936 2.07228 -3.07681 -0.986382 0.00243778 0.16445 + -0.326429 2.04764 -3.04775 -0.886975 -0.235309 0.397371 + -0.272273 2.10669 -2.92795 -0.665415 -0.415155 0.620379 + -0.263892 2.16543 -2.87623 -0.632123 -0.513739 0.58008 + -0.262774 2.2018 -2.83487 -0.705051 -0.508618 0.494177 + -0.344862 1.99285 -3.11945 -0.914913 -0.197597 0.351979 + -0.332527 1.99984 -3.08785 -0.866712 -0.279936 0.412851 + -0.282181 2.02501 -2.97729 -0.750679 -0.319663 0.578184 + -0.247373 2.01184 -2.95231 -0.410357 -0.502208 0.761179 + -0.237464 2.09352 -2.90297 -0.44558 -0.482307 0.754214 + -0.351305 1.97457 -3.14482 -0.908708 -0.239193 0.342106 + -0.320039 1.9427 -3.11706 -0.736999 -0.506047 0.448049 + -0.318694 1.96196 -3.09111 -0.768869 -0.482946 0.419052 + -0.306359 1.96895 -3.05951 -0.738873 -0.52726 0.419598 + -0.28828 1.97721 -3.01739 -0.721224 -0.506276 0.472781 + -0.278599 1.9612 -3.03327 -0.437857 -0.798916 0.412329 + -0.260519 1.96946 -2.99115 -0.385691 -0.750131 0.537165 + -0.234516 2.1519 -2.85829 -0.440538 -0.601958 0.666013 + -0.233398 2.18826 -2.81693 -0.414741 -0.68348 0.600703 + -0.259031 2.26576 -2.75796 -0.722329 -0.524375 0.450856 + -0.203814 2.25251 -2.73182 -0.070152 -0.75801 0.64846 + -0.232584 2.25573 -2.73741 -0.424254 -0.69214 0.58391 + -0.257984 2.36276 -2.64031 -0.702431 -0.546811 0.45562 + -0.291812 2.28726 -2.80297 -0.896974 -0.322994 0.301847 + -0.179248 2.2534 -2.73338 0.203954 -0.735972 0.64556 + -0.210942 2.35081 -2.61647 -0.054758 -0.766176 0.640293 + -0.231537 2.35273 -2.61976 -0.406037 -0.703988 0.582696 + -0.249046 2.4439 -2.53038 -0.688999 -0.542046 0.48111 + -0.281624 2.37623 -2.66861 -0.87677 -0.360605 0.318179 + -0.186376 2.35171 -2.61803 0.185515 -0.747591 0.637724 + -0.210276 2.43566 -2.51411 -0.051602 -0.769134 0.637001 + -0.230871 2.43758 -2.5174 -0.395312 -0.700434 0.59424 + -0.240977 2.5156 -2.44155 -0.720253 -0.307776 0.621698 + -0.272686 2.45737 -2.55869 -0.880328 -0.327252 0.343407 + -0.172947 2.43967 -2.52109 0.34674 -0.718014 0.603513 + -0.193421 2.43627 -2.5152 0.182407 -0.756081 0.628545 + -0.2096 2.50807 -2.42651 -0.0610164 -0.596689 0.80015 + -0.222802 2.50928 -2.42857 -0.410159 -0.503335 0.760542 + -0.158954 2.44285 -2.52659 0.455179 -0.677123 0.5782 + -0.179594 2.51086 -2.4314 0.360863 -0.562574 0.743834 + -0.192744 2.50868 -2.4276 0.194926 -0.59648 0.778598 + -0.196838 2.55676 -2.40464 0.0615659 0.247304 0.96698 + -0.21004 2.55797 -2.4067 -0.329769 0.34857 0.877355 + -0.156885 2.51682 -2.44171 0.645516 -0.408913 0.645058 + -0.165601 2.51404 -2.43691 0.476431 -0.514593 0.712887 + -0.183688 2.55895 -2.40844 0.282714 0.313734 0.906446 + -0.225304 2.56665 -2.42497 -0.602512 0.56139 0.567293 + -0.256241 2.52427 -2.45982 -0.873282 -0.109365 0.474782 + -0.144697 2.52364 -2.45353 0.793967 -0.260513 0.549318 + -0.174971 2.56172 -2.41324 0.449796 0.386425 0.805208 + -0.199345 2.58 -2.44491 -0.082826 0.991591 0.0994351 + -0.216786 2.57669 -2.43918 -0.242803 0.959411 0.143451 + -0.220791 2.57447 -2.43529 -0.411202 0.861011 0.299286 + -0.16462 2.56961 -2.42691 0.561152 0.569587 0.600566 + -0.16464 2.57817 -2.44174 0.418249 0.882048 0.216932 + -0.173431 2.57921 -2.44353 0.0786092 0.986949 0.140543 + -0.183906 2.58021 -2.44528 0.0294615 0.993422 0.110656 + -0.218001 2.55814 -2.51328 -0.228921 0.905474 -0.357368 + -0.24916 2.55128 -2.50139 -0.509127 0.82027 -0.260665 + -0.253165 2.54906 -2.4975 -0.717118 0.686214 -0.121872 + -0.258603 2.54263 -2.4884 -0.828347 0.560103 -0.011234 + -0.263116 2.53481 -2.47807 -0.942069 0.269214 0.200073 + -0.27267 2.48008 -2.59304 -0.895014 0.419745 -0.150879 + -0.279561 2.46791 -2.57694 -0.993344 0.0904817 0.0712806 + 1.70947 2.207 -1.0732 -0.932897 0.0215028 0.359501 + 1.68994 2.06329 -1.11309 -0.928746 0.0378035 0.368784 + 1.70339 1.9893 -1.07574 -0.891568 0.0270818 0.452076 + 1.7066 2.25074 -1.08775 -0.946906 0.0705403 0.313677 + 1.68707 2.10694 -1.1277 -0.975667 0.0565817 0.211832 + 1.6801 1.96246 -1.12805 -0.952446 0.0480972 0.300888 + 1.69354 1.88847 -1.0907 -0.887855 0.0584277 0.456399 + 1.72999 1.82017 -1.02458 -0.824997 0.0814265 0.559241 + 1.67403 1.97548 -1.1624 -0.980483 0.0776943 0.180599 + 1.66549 1.89627 -1.1742 -0.963869 0.0805697 0.253901 + 1.67156 1.88333 -1.13979 -0.949116 0.0939896 0.300574 + 1.67721 1.82691 -1.10747 -0.904603 0.0904892 0.416541 + 1.71157 1.78383 -1.04185 -0.835431 0.120999 0.536111 + 1.67457 2.027 -1.19043 -0.994833 0.0992431 0.0214194 + 1.65095 1.83516 -1.20736 -0.986529 0.144783 0.0761403 + 1.65795 1.81516 -1.16071 -0.960089 0.102713 0.260151 + 1.6636 1.75882 -1.12833 -0.91532 0.161804 0.368793 + 1.69524 1.72227 -1.05862 -0.837344 0.205978 0.506387 + 1.67051 1.94782 -1.27149 -0.967205 0.167548 -0.1909 + 1.66079 1.88651 -1.2351 -0.988105 0.13857 -0.0666898 + 1.63079 1.69475 -1.26975 -0.969797 0.24063 -0.0398943 + 1.61944 1.69088 -1.21046 -0.963271 0.262642 0.0559363 + 1.64341 1.75406 -1.19388 -0.903505 0.190167 0.384077 + 1.64871 1.78512 -1.32169 -0.959819 0.202309 -0.194467 + 1.64063 1.74601 -1.29754 -0.981592 0.188498 -0.030748 + 1.61323 1.63098 -1.2815 -0.945025 0.326675 0.0145108 + 1.60187 1.62711 -1.22221 -0.943088 0.33252 -0.00401347 + 1.61773 1.64263 -1.16089 -0.909241 0.305563 0.282688 + 1.65962 1.79027 -1.34981 -0.800425 0.27522 -0.532517 + 1.6578 1.70994 -1.38728 -0.685265 0.39361 -0.612767 + 1.61771 1.62371 -1.39571 -0.925311 0.300882 -0.230802 + 1.60964 1.58459 -1.37157 -0.942423 0.300413 -0.146939 + 1.60154 1.60372 -1.30009 -0.91387 0.387585 -0.120914 + 1.6865 1.80988 -1.36317 -0.0330141 0.40307 -0.914574 + 1.68468 1.72955 -1.40063 0.00451311 0.429125 -0.903234 + 1.67945 1.64718 -1.44516 0.139863 0.500127 -0.854582 + 1.66448 1.57375 -1.48918 0.22822 0.537852 -0.811561 + 1.64283 1.63651 -1.43129 -0.642365 0.485275 -0.593191 + 1.73367 1.82544 -1.32353 0.632844 0.274154 -0.724119 + 1.73005 1.73866 -1.36081 0.654193 0.279369 -0.70284 + 1.73301 1.64749 -1.3925 0.696074 0.278801 -0.661627 + 1.72777 1.56512 -1.43703 0.722036 0.287675 -0.629212 + 1.72826 1.47856 -1.47591 0.749976 0.311276 -0.583646 + 1.8073 1.59501 -1.329 0.790291 0.234705 -0.565998 + 1.81026 1.50393 -1.36065 0.761352 0.208606 -0.613862 + 1.81855 1.40599 -1.38161 0.809609 0.219224 -0.544494 + 1.81903 1.31935 -1.42054 0.824329 0.232015 -0.516383 + 1.88805 1.42946 -1.26487 0.862473 0.198283 -0.465644 + 1.88883 1.33396 -1.29624 0.848639 0.16815 -0.501535 + 1.89712 1.23602 -1.31722 0.89229 0.157549 -0.423081 + 1.89403 1.14413 -1.35127 0.900486 0.162554 -0.403361 + 1.82824 1.22532 -1.44989 0.857478 0.240547 -0.454827 + 1.9662 1.25106 -1.18427 0.897749 0.174042 -0.404667 + 1.96698 1.15547 -1.2157 0.851342 0.0861279 -0.517492 + 1.95399 1.05227 -1.23915 0.88509 0.0718771 -0.459836 + 1.95089 0.960473 -1.27315 0.922425 0.103655 -0.372004 + 2.02124 1.12376 -1.10058 0.943906 0.107475 -0.312234 + 2.01002 1.03308 -1.14751 0.912561 0.0248311 -0.408186 + 1.99703 0.929877 -1.17096 0.921965 0.013977 -0.387022 + 1.97952 0.841297 -1.22353 0.943093 0.0450062 -0.32947 + 1.93121 0.894901 -1.34518 0.937188 0.0959741 -0.335362 + 2.04402 1.04975 -1.03439 0.970161 0.0366551 -0.239675 + 2.0328 0.959071 -1.08132 0.962936 -0.042258 -0.266397 + 2.01409 0.862541 -1.12133 0.963861 -0.0557323 -0.260511 + 1.99658 0.774051 -1.17386 0.972629 -0.0280371 -0.230665 + 2.06051 1.00499 -0.955058 0.988196 -0.0555689 -0.142761 + 2.04378 0.902897 -0.995826 0.982864 -0.124274 -0.136139 + 2.02508 0.806365 -1.03583 0.983887 -0.123265 -0.129508 + 2.00857 0.707927 -1.07553 0.987845 -0.100335 -0.118719 + 1.98022 0.694353 -1.24222 0.968275 -0.0336522 -0.247611 + 2.0661 0.987656 -0.861234 0.991255 -0.121944 -0.0504304 + 2.04937 0.885481 -0.902062 0.986152 -0.155723 -0.0570551 + 2.02757 0.760312 -0.902864 0.986576 -0.157178 -0.0443059 + 2.01107 0.661873 -0.942562 0.992309 -0.118422 -0.0360296 + 2.0847 1.11063 -0.690828 0.99095 -0.134231 -0.00102659 + 2.07118 1.00891 -0.747247 0.989535 -0.14429 0.000143634 + 2.05499 0.905722 -0.797122 0.985056 -0.171725 0.0132001 + 2.03319 0.780641 -0.797873 0.983153 -0.175636 0.0506217 + 2.08462 1.14167 -0.528789 0.972804 -0.21493 0.0863571 + 2.07631 1.0583 -0.619392 0.981467 -0.177007 0.0734189 + 2.06012 0.955113 -0.669267 0.965319 -0.235701 0.112269 + 2.03629 0.845114 -0.720743 0.968054 -0.21256 0.133004 + 2.09548 1.25584 -0.32634 0.905461 -0.382988 0.18292 + 2.07182 1.16429 -0.403371 0.899717 -0.378018 0.2182 + 2.06351 1.08092 -0.493969 0.928445 -0.306689 0.209597 + 2.04628 0.984262 -0.563157 0.914629 -0.324169 0.241595 + 2.11872 1.34714 -0.246282 0.894526 -0.425495 0.137028 + 2.07553 1.27638 -0.230928 0.803187 -0.506288 0.313947 + 2.05188 1.18475 -0.308008 0.827498 -0.457483 0.325509 + 2.03179 1.08707 -0.384218 0.850049 -0.40973 0.330965 + 2.01455 0.990413 -0.453411 0.843974 -0.395673 0.362146 + 2.12035 1.37266 -0.167875 0.830063 -0.497557 0.251857 + 2.09296 1.37722 -0.106179 0.691283 -0.550943 0.467536 + 2.04814 1.28086 -0.169283 0.714323 -0.569529 0.406669 + 2.0211 1.18058 -0.248183 0.73405 -0.526722 0.428642 + 2.001 1.0829 -0.324393 0.698443 -0.519557 0.492177 + 2.15469 1.46887 -0.097327 0.813106 -0.497315 0.302551 + 2.11209 1.46856 -0.032783 0.645814 -0.555379 0.523907 + 2.02482 1.34524 -0.069792 0.392895 -0.628094 0.671663 + 2.01546 1.25513 -0.152315 0.470969 -0.639135 0.608025 + 1.98841 1.15476 -0.231266 0.369836 -0.638807 0.674646 + 2.18873 1.57082 -0.033902 0.766863 -0.523109 0.371858 + 2.14613 1.57059 0.030692 0.668491 -0.511082 0.540291 + 2.04396 1.43658 0.003602 0.426998 -0.634943 0.643832 + 1.97634 1.39651 -0.013797 -0.191043 -0.67037 0.717012 + 1.97747 1.30843 -0.088838 -0.161013 -0.65685 0.736629 + 2.2366 1.67118 0.022866 0.711958 -0.602968 0.359923 + 2.15405 1.65995 0.099917 0.588529 -0.620177 0.518666 + 2.03495 1.51832 0.092235 0.386357 -0.612656 0.689478 + 1.96733 1.47825 0.074836 -0.183369 -0.713998 0.675709 + 2.30028 1.76094 0.076794 0.743493 -0.577635 0.336981 + 2.21773 1.74971 0.153845 0.511923 -0.621409 0.593116 + 2.04287 1.60776 0.161511 0.364529 -0.561598 0.742782 + 1.93928 1.55924 0.143957 -0.180167 -0.693776 0.697291 + 1.92104 1.44646 -0.019105 -0.739905 -0.527243 0.417799 + 2.32127 1.79285 -0.010067 0.840246 -0.535624 -0.0842239 + 2.33657 1.81891 0.081796 0.830153 -0.507981 0.229784 + 2.3157 1.79518 -0.041913 0.8125 -0.373584 -0.447526 + 2.35674 1.84633 -0.008909 0.96658 -0.193091 -0.168636 + 2.36546 1.88611 0.038201 0.987746 -0.155841 0.00845147 + 2.34528 1.85868 0.128906 0.848888 -0.431477 0.305315 + 2.28027 1.75988 -0.080374 0.887248 -0.211176 -0.410117 + 2.32537 1.91211 -0.01503 0.274366 0.425895 -0.862169 + 2.34897 1.93992 0.013602 0.631987 0.451472 -0.629893 + 2.36724 1.92857 0.042453 0.962657 0.182794 -0.199693 + 2.35617 1.95194 0.178382 0.93798 -0.170716 0.301743 + 2.26153 2.01042 0.037081 0.0306458 0.537382 -0.842782 + 2.28513 2.03823 0.065712 0.32017 0.729768 -0.604094 + 2.33417 2.04014 0.1172 0.623085 0.714893 -0.317321 + 2.35243 2.02888 0.146103 0.850756 0.52553 -0.00571994 + 2.35795 1.99449 0.182684 0.938337 0.177979 0.296391 + 2.21586 2.04588 0.063268 -0.0889614 0.6397 -0.763459 + 2.23229 2.08064 0.109466 0.135533 0.889422 -0.436531 + 2.28133 2.08255 0.160956 0.396365 0.911942 -0.1061 + 2.30384 2.06634 0.207823 0.58321 0.754691 0.300513 + 2.15972 2.09474 0.138633 -0.0465934 0.918884 -0.391766 + 2.19296 2.10671 0.200114 0.138424 0.990254 0.0153814 + 2.21547 2.09059 0.247031 0.308259 0.840799 0.44501 + 2.22548 2.04512 0.287584 0.386278 0.573091 0.722742 + 2.30936 2.03194 0.244404 0.667677 0.466693 0.580004 + 2.06722 2.07637 0.125264 -0.213807 0.715928 -0.66463 + 2.06868 2.09668 0.172282 -0.154962 0.955069 -0.252647 + 2.10191 2.10864 0.233762 -0.0297638 0.996132 0.082677 + 2.11664 2.09202 0.285745 0.126242 0.846815 0.516689 + 1.99034 2.06431 0.145555 -0.349591 0.712653 -0.608204 + 1.99179 2.08462 0.192572 -0.281934 0.926048 -0.250896 + 1.97828 2.09008 0.273113 -0.201683 0.971979 0.120754 + 1.99301 2.07346 0.325096 -0.0465262 0.841273 0.538605 + 2.12665 2.04664 0.326349 0.246298 0.530786 0.810927 + 1.97494 1.98465 0.109118 -0.33246 0.566044 -0.754364 + 1.92688 2.02509 0.144879 -0.284269 0.599323 -0.748333 + 1.86678 2.02229 0.164923 -0.340007 0.709316 -0.617467 + 1.88359 2.04991 0.211892 -0.35373 0.90158 -0.249056 + 1.81352 1.9195 0.12256 -0.322076 0.547825 -0.77211 + 1.75341 1.9167 0.142605 -0.438961 0.414584 -0.79714 + 1.73438 1.97249 0.188775 -0.572091 0.647194 -0.503838 + 1.7512 2.00011 0.235745 -0.534351 0.839487 -0.0986473 + 1.87008 2.05545 0.292484 -0.360957 0.922306 0.138063 + 1.77848 1.88161 0.104993 -0.479598 0.76479 -0.430211 + 1.72363 1.8572 0.131276 -0.922634 0.0408691 -0.383505 + 1.71488 1.87816 0.156571 -0.917652 0.0475583 -0.394528 + 1.69585 1.93395 0.202742 -0.924586 0.208421 -0.318907 + 1.78656 1.8729 0.074278 -0.450833 0.632716 -0.629618 + 1.73172 1.84849 0.100561 -0.859066 0.215164 -0.464445 + 1.72141 1.84774 0.19585 -0.919133 -0.393719 -0.0133936 + 1.71266 1.8687 0.221145 -0.920921 -0.383631 0.0687863 + 1.80597 1.83923 0.042994 -0.4178 0.411838 -0.809835 + 1.75682 1.79571 0.071374 -0.862163 -0.117462 -0.492825 + 1.74652 1.79497 0.166664 -0.90685 -0.420786 0.0237309 + 1.71044 1.88591 0.258945 -0.894354 -0.39077 0.217782 + 1.69363 1.95115 0.240542 -0.930314 0.366292 -0.0185871 + 1.80707 1.70358 0.008356 -0.884428 -0.0258417 -0.465961 + 1.84763 1.61518 -0.058342 -0.939199 -0.0838011 -0.33299 + 1.79353 1.68774 0.086183 -0.915349 -0.400036 -0.0459052 + 1.86913 1.54697 -0.119202 -0.968741 -0.071143 -0.237656 + 1.83409 1.59935 0.019485 -0.904695 -0.425944 0.00991559 + 1.85245 1.60663 0.108876 -0.728893 -0.609277 0.312243 + 1.80713 1.67712 0.149785 -0.770186 -0.583953 0.256538 + 1.88609 1.47278 -0.186297 -0.998635 0.0506971 -0.0125523 + 1.87462 1.52017 -0.039378 -0.898153 -0.427624 0.102274 + 1.89298 1.52745 0.050015 -0.705448 -0.608514 0.363392 + 1.8862 1.64258 0.21421 -0.27612 -0.720871 0.635691 + 1.84087 1.71298 0.255069 -0.651491 -0.635158 0.414891 + 1.87618 1.42189 -0.268346 -0.996064 0.016844 0.0870237 + 1.89158 1.44598 -0.106472 -0.942362 -0.289633 0.16753 + 1.86885 1.35294 -0.337923 -0.979877 0.00763949 0.199458 + 1.90639 1.358 -0.168095 -0.9417 -0.229522 0.246012 + 1.93585 1.35848 -0.080729 -0.733469 -0.461113 0.499398 + 1.93698 1.27049 -0.155721 -0.741454 -0.401711 0.53747 + 1.85871 1.43788 -0.420448 -0.961644 0.205777 0.181372 + 1.85085 1.29307 -0.412823 -0.968556 0.0391518 0.245698 + 1.89905 1.28905 -0.237671 -0.943827 -0.129409 0.304046 + 1.92234 1.18614 -0.219015 -0.69095 -0.372551 0.619511 + 1.96811 1.21832 -0.17136 -0.0948823 -0.646467 0.757019 + 1.84298 1.48933 -0.552965 -0.912855 0.300427 0.276476 + 1.84071 1.37809 -0.49529 -0.966285 0.11132 0.232166 + 1.82658 1.23187 -0.486835 -0.962105 0.0355134 0.270355 + 1.88441 1.2047 -0.300965 -0.937289 -0.0666557 0.342119 + 1.89832 1.10095 -0.296262 -0.726026 -0.295838 0.620779 + 1.82859 1.54464 -0.664366 -0.853786 0.424573 0.30131 + 1.81373 1.44579 -0.625345 -0.91646 0.219698 0.334416 + 1.81147 1.33455 -0.567678 -0.951584 0.096741 0.29177 + 1.80398 1.18699 -0.568694 -0.958656 0.0965626 0.267685 + 1.86015 1.14351 -0.374978 -0.929323 0.0243971 0.368461 + 1.78188 1.54323 -0.805916 -0.828759 0.447392 0.336152 + 1.74035 1.49789 -0.858394 -0.864628 0.355173 0.355346 + 1.78706 1.49931 -0.716844 -0.873598 0.343412 0.344811 + 1.77308 1.39422 -0.689219 -0.920959 0.123895 0.369439 + 1.78887 1.28967 -0.649536 -0.948651 0.0275966 0.315117 + 1.79768 1.63054 -0.869151 -0.8072 0.338824 0.48335 + 1.74955 1.58263 -0.912958 -0.810723 0.334747 0.480283 + 1.70359 1.5243 -0.951933 -0.83526 0.265906 0.481285 + 1.70034 1.44373 -0.903383 -0.877824 0.306469 0.368106 + 1.74642 1.44774 -0.780717 -0.897925 0.23803 0.370234 + 1.75647 1.70315 -0.956914 -0.80009 0.198643 0.566036 + 1.73805 1.66673 -0.974234 -0.817519 0.214121 0.534617 + 1.70923 1.65183 -1.00802 -0.766276 0.265323 0.58517 + 1.72073 1.56773 -0.946754 -0.785855 0.263163 0.559623 + 1.68522 1.62034 -1.02008 -0.76353 0.279533 0.582137 + 1.66809 1.577 -1.02521 -0.795263 0.243144 0.555372 + 1.66357 1.47014 -0.99693 -0.835576 0.210523 0.507437 + 1.66068 1.38386 -0.951877 -0.886614 0.265384 0.378797 + 1.67123 1.69079 -1.07069 -0.805884 0.286591 0.51809 + 1.64934 1.63786 -1.08662 -0.85063 0.271332 0.450341 + 1.63962 1.53542 -1.04439 -0.793347 0.215067 0.569514 + 1.60744 1.48643 -1.07733 -0.816076 0.175225 0.550742 + 1.63139 1.42106 -1.02992 -0.848007 0.169924 0.502006 + 1.64171 1.7058 -1.1443 -0.906867 0.266878 0.326141 + 1.62087 1.59636 -1.10574 -0.845629 0.314286 0.431435 + 1.59827 1.55151 -1.12345 -0.866794 0.292173 0.404108 + 1.98978 1.6911 0.231766 0.262485 -0.587353 0.765584 + 1.98945 1.75703 0.288962 0.357307 -0.655906 0.66492 + 1.8863 1.73845 0.328145 0.0159542 -0.745426 0.666398 + 1.8458 1.74 0.305064 -0.526804 -0.688234 0.49881 + 2.2174 1.81556 0.210993 0.426864 -0.604969 0.672161 + 2.14869 1.86319 0.301296 0.402667 -0.549092 0.732365 + 2.03042 1.82386 0.333414 0.38261 -0.563965 0.731815 + 1.92727 1.80528 0.372597 0.278413 -0.51425 0.811192 + 2.31566 1.8655 0.18929 0.664612 -0.516192 0.540219 + 2.24695 1.91313 0.279592 0.500297 -0.44567 0.742348 + 2.22239 1.94999 0.310547 0.441435 -0.206128 0.873296 + 2.13676 1.92875 0.342738 0.35553 -0.227517 0.906551 + 2.32655 1.95876 0.238765 0.766278 -0.176219 0.617871 + 2.30199 1.99562 0.269721 0.649086 0.102996 0.75371 + 2.21811 2.00879 0.3129 0.395035 0.248026 0.884551 + 2.13248 1.98755 0.345091 0.308353 0.136688 0.9414 + 2.01849 1.88934 0.374807 0.327816 -0.276444 0.903391 + 2.02889 1.97432 0.382406 0.234953 0.116625 0.964985 + 1.95482 1.94111 0.397731 0.212943 0.0215192 0.976828 + 1.94442 1.85613 0.390132 0.216446 -0.262399 0.940371 + 1.86725 1.78376 0.373066 -0.111711 -0.563103 0.818801 + 2.02307 2.03341 0.363662 0.135103 0.530452 0.83688 + 1.91758 1.99965 0.388944 -0.0136993 0.499708 0.866085 + 1.92943 1.95493 0.405201 0.24524 0.181315 0.952356 + 1.8844 1.83461 0.3906 0.0565497 -0.312228 0.948323 + 1.88753 2.03961 0.350326 -0.248674 0.779322 0.575169 + 1.78108 1.97992 0.360723 -0.478586 0.63171 0.609835 + 1.83084 1.95588 0.403754 -0.270964 0.449504 0.85119 + 1.84269 1.91125 0.420061 -0.107942 -0.0450639 0.993135 + 1.85901 1.84842 0.398071 -0.0344053 -0.398678 0.916445 + 1.76363 1.99576 0.302879 -0.534506 0.803617 0.26173 + 1.70607 1.9468 0.307678 -0.897708 0.252123 0.361323 + 1.72681 1.93728 0.344367 -0.776633 0.065298 0.62656 + 1.77658 1.91316 0.387347 -0.630922 -0.0637786 0.77322 + 1.79859 1.88451 0.394568 -0.53452 -0.331479 0.777438 + 1.73118 1.87639 0.295635 -0.789293 -0.469433 0.39579 + 1.75319 1.84774 0.302855 -0.776952 -0.480615 0.406638 + 1.81491 1.82177 0.372629 -0.527449 -0.4648 0.711168 + 1.82675 1.78531 0.349985 -0.555107 -0.631421 0.541446 + 1.76504 1.81136 0.280262 -0.792617 -0.509043 0.335608 + 1.76011 1.78434 0.230267 -0.864917 -0.42226 0.27132 + 1.58453 1.45584 -1.09935 -0.802301 0.163224 0.57417 + 1.59609 1.36052 -1.07345 -0.839104 0.14781 0.523504 + 1.62538 1.32332 -0.99542 -0.890444 0.265153 0.369868 + 1.57536 1.52092 -1.14547 -0.878333 0.317695 0.357213 + 1.55389 1.48278 -1.17341 -0.895957 0.331959 0.295066 + 1.55777 1.43811 -1.13185 -0.825413 0.220356 0.519746 + 1.58134 1.56168 -1.19528 -0.921888 0.3531 0.159505 + 1.55987 1.52346 -1.22328 -0.918088 0.380083 0.11248 + 1.53859 1.4778 -1.26239 -0.907779 0.412614 0.0754066 + 1.5267 1.44186 -1.20255 -0.901004 0.362714 0.237974 + 1.53059 1.39729 -1.16094 -0.86159 0.171245 0.477847 + 1.59512 1.59787 -1.17855 -0.924556 0.325277 0.198473 + 1.58809 1.59093 -1.23894 -0.9231 0.384251 -0.0154084 + 1.5764 1.56368 -1.25754 -0.903209 0.4291 -0.00931362 + 1.55512 1.51801 -1.29664 -0.89359 0.437548 -0.100239 + 1.5168 1.43611 -1.29238 -0.914226 0.403938 -0.0320071 + 1.50491 1.40026 -1.23249 -0.910542 0.356512 0.209312 + 1.51426 1.3487 -1.17618 -0.839164 0.154629 0.521435 + 1.56933 1.34288 -1.10591 -0.785845 0.0716688 0.614257 + 1.58824 1.56145 -1.33468 -0.864739 0.441311 -0.239729 + 1.54182 1.47566 -1.33128 -0.863572 0.438451 -0.249004 + 1.49947 1.38977 -1.32112 -0.887005 0.458013 -0.0587064 + 1.482 1.36422 -1.25526 -0.895911 0.40474 0.183106 + 1.49135 1.31266 -1.19896 -0.831164 0.159119 0.532773 + 1.5376 1.42074 -1.39016 -0.804266 0.480961 -0.349045 + 1.52449 1.42932 -1.36002 -0.806215 0.502831 -0.311736 + 1.47664 1.34482 -1.35347 -0.873371 0.474939 -0.107961 + 1.45918 1.31928 -1.28762 -0.910555 0.393848 0.125594 + 1.45892 1.26563 -1.2397 -0.86702 0.148839 0.475524 + 1.55899 1.44397 -1.42699 -0.867956 0.423709 -0.259082 + 1.53418 1.34028 -1.51799 -0.775167 0.564166 -0.284311 + 1.50517 1.32765 -1.47451 -0.693466 0.6526 -0.305315 + 1.51048 1.35755 -1.41971 -0.742662 0.584706 -0.326452 + 1.49738 1.36613 -1.38956 -0.781909 0.537167 -0.316338 + 1.59651 1.47515 -1.4948 -0.838945 0.433246 -0.329347 + 1.5717 1.37146 -1.5858 -0.780036 0.504412 -0.370287 + 1.56679 1.29244 -1.68873 -0.615639 0.681116 -0.39632 + 1.50726 1.26305 -1.64863 -0.619662 0.728836 -0.291233 + 1.47825 1.25041 -1.60514 -0.622239 0.734984 -0.269477 + 1.62162 1.48795 -1.53037 -0.6741 0.515948 -0.52857 + 1.61249 1.3985 -1.60824 -0.597468 0.605622 -0.525599 + 1.60758 1.31948 -1.71117 -0.331996 0.708153 -0.623136 + 1.60007 1.21433 -1.83044 0.171037 0.802544 -0.571549 + 1.54917 1.22917 -1.80395 -0.316075 0.83959 -0.441797 + 1.65498 1.50123 -1.54717 0.118303 0.602727 -0.789129 + 1.64584 1.41169 -1.62508 0.180601 0.667739 -0.722155 + 1.63913 1.34099 -1.68663 0.485408 0.577644 -0.656283 + 1.64138 1.28281 -1.74627 0.499445 0.59676 -0.628038 + 1.60984 1.26131 -1.77081 0.354721 0.662943 -0.659302 + 1.71876 1.40596 -1.53395 0.759519 0.328406 -0.561499 + 1.71504 1.32517 -1.58463 0.800481 0.321174 -0.506041 + 1.70833 1.25447 -1.64618 0.834385 0.320584 -0.44836 + 1.69567 1.18769 -1.7125 0.856598 0.299539 -0.420138 + 1.6395 1.21314 -1.80858 0.639438 0.540823 -0.546471 + 1.82453 1.14454 -1.50056 0.854569 0.227015 -0.467093 + 1.80562 1.07001 -1.56648 0.868029 0.226457 -0.441863 + 1.79295 1.00322 -1.6328 0.882549 0.22458 -0.413123 + 1.7691 0.950287 -1.71131 0.899067 0.22975 -0.372685 + 1.69378 1.11793 -1.77487 0.876339 0.305138 -0.372721 + 1.90324 1.05011 -1.38061 0.940898 0.159919 -0.298558 + 1.88766 0.978483 -1.44294 0.908477 0.130693 -0.396974 + 1.86874 0.903956 -1.50886 0.919014 0.113824 -0.377436 + 1.84544 0.846043 -1.58295 0.923027 0.116013 -0.366827 + 1.91563 0.823272 -1.40751 0.925274 0.0637843 -0.373899 + 1.88919 0.755559 -1.47603 0.93202 0.0461949 -0.35945 + 1.86589 0.69756 -1.55017 0.946661 0.0574913 -0.317061 + 1.84155 0.660377 -1.63517 0.95274 0.0719376 -0.295147 + 1.82158 0.793109 -1.66147 0.933142 0.131926 -0.334428 + 1.95983 0.77573 -1.29557 0.943286 0.050874 -0.32806 + 1.9371 0.70295 -1.36411 0.933537 0.016757 -0.35809 + 1.91065 0.635231 -1.43262 0.940694 0.0153696 -0.338908 + 1.8863 0.579432 -1.50997 0.952915 0.0469511 -0.299582 + 1.95748 0.621574 -1.31076 0.951806 -0.0396771 -0.304122 + 1.92874 0.541985 -1.37811 0.953258 -0.0440531 -0.298928 + 1.90438 0.486181 -1.45545 0.964023 0.0614641 -0.258617 + 1.88613 0.445995 -1.54445 0.960478 0.103117 -0.258551 + 1.86197 0.542251 -1.59497 0.95571 0.0853998 -0.281646 + 1.99221 0.628315 -1.14384 0.987686 -0.0739775 -0.137858 + 1.97947 0.54448 -1.21083 0.978644 -0.0415123 -0.201329 + 1.95073 0.464891 -1.27818 0.963453 0.014457 -0.267487 + 1.94019 0.396175 -1.36396 0.957087 0.164188 -0.238802 + 2.00034 0.561665 -0.990198 0.993099 -0.108892 -0.0435471 + 1.9876 0.477829 -1.05719 0.998822 -9.28516e-005 -0.0485147 + 1.99081 0.394963 -1.14666 0.993859 0.013095 -0.109873 + 1.98028 0.326333 -1.23239 0.980332 0.132749 -0.146041 + 2.01226 0.657475 -0.819343 0.987232 -0.15183 0.0481693 + 2.00153 0.557266 -0.866979 0.993478 -0.108648 0.0346047 + 1.99419 0.452858 -0.919338 0.998614 -0.0452626 0.0268432 + 1.99741 0.369992 -1.00881 0.999767 -0.00279491 0.0214261 + 2.01535 0.722029 -0.742154 0.972088 -0.178786 0.151921 + 1.99507 0.593357 -0.747888 0.976081 -0.155522 0.151918 + 1.98773 0.488861 -0.800298 0.986084 -0.113757 0.121233 + 1.98427 0.380212 -0.861711 0.986503 -0.106008 0.124799 + 2.02245 0.874262 -0.614633 0.929315 -0.276767 0.244488 + 2.00529 0.764217 -0.656829 0.944617 -0.210281 0.251951 + 1.98501 0.635545 -0.662561 0.948275 -0.171097 0.267396 + 1.97703 0.517647 -0.708554 0.954295 -0.165996 0.24853 + 1.9935 0.882653 -0.514565 0.862711 -0.332253 0.381233 + 1.97634 0.772609 -0.556762 0.851082 -0.287047 0.439617 + 1.96969 0.657329 -0.607493 0.855888 -0.236219 0.460061 + 1.96171 0.539344 -0.653536 0.791871 -0.31462 0.523406 + 1.97703 0.986076 -0.393898 0.663247 -0.524674 0.533686 + 1.95598 0.878317 -0.455052 0.538996 -0.472276 0.697452 + 1.94212 0.77194 -0.513802 0.503137 -0.428994 0.750212 + 1.93547 0.65666 -0.564533 0.487376 -0.39072 0.780899 + 1.93571 0.964666 -0.374015 0.129455 -0.613249 0.779209 + 1.90827 0.87039 -0.446126 -0.0730224 -0.535608 0.841304 + 1.89441 0.764101 -0.504826 -0.209419 -0.432517 0.876968 + 1.89444 0.652219 -0.557439 -0.221493 -0.452192 0.863981 + 1.95968 1.0614 -0.30456 0.291985 -0.632291 0.717601 + 1.88088 0.964924 -0.39846 -0.495392 -0.451569 0.742073 + 1.85344 0.870648 -0.470571 -0.542136 -0.458412 0.704235 + 1.83094 0.790462 -0.543286 -0.660761 -0.340721 0.668807 + 1.94409 1.13304 -0.248657 -0.191081 -0.597667 0.778641 + 1.91535 1.03977 -0.321901 -0.27071 -0.614998 0.740604 + 1.822 0.968071 -0.452114 -0.813169 -0.191859 0.549496 + 1.78124 0.914346 -0.53626 -0.861443 -0.148911 0.485531 + 1.75873 0.834162 -0.608975 -0.86638 -0.201307 0.457013 + 1.85647 1.04292 -0.375554 -0.799086 -0.19388 0.569098 + 1.81829 1.08548 -0.45427 -0.929991 0.0950057 0.355091 + 1.78834 1.03441 -0.536214 -0.943985 0.106347 0.312381 + 1.74758 0.980684 -0.62036 -0.948823 0.151941 0.276855 + 1.77403 1.13592 -0.650637 -0.973769 0.0566799 0.220368 + 1.76018 1.08757 -0.733287 -0.975327 0.108805 0.192092 + 1.73504 1.03363 -0.812257 -0.964946 0.12261 0.232047 + 1.72244 0.926738 -0.699321 -0.969064 0.0966896 0.227081 + 1.75903 1.23639 -0.718449 -0.933234 -0.0317795 0.357862 + 1.74518 1.18803 -0.801099 -0.879111 -0.198859 0.433151 + 1.71522 1.12579 -0.863086 -0.791667 -0.201756 0.576678 + 1.71302 0.976869 -0.880152 -0.966437 0.102223 0.235689 + 1.74325 1.34093 -0.758132 -0.880187 0.0909851 0.465824 + 1.69942 1.27075 -0.806761 -0.836947 -0.0703456 0.542745 + 1.66946 1.2085 -0.86874 -0.732137 -0.145528 0.66543 + 1.63217 1.13485 -0.91298 -0.624685 -0.244123 0.741737 + 1.69319 1.06903 -0.930981 -0.682886 -0.308829 0.662036 + 1.70676 1.38777 -0.829262 -0.8727 0.240032 0.425181 + 1.66294 1.31767 -0.877841 -0.88034 0.206199 0.427181 + 1.62401 1.25131 -0.923105 -0.857357 0.165391 0.487427 + 1.58673 1.17767 -0.967345 -0.864335 0.0943314 0.493991 + 1.60233 1.06256 -0.96058 -0.593298 -0.332617 0.733051 + 1.58645 1.25696 -1.04068 -0.881474 0.28495 0.376574 + 1.54824 1.19931 -1.08523 -0.894809 0.200963 0.398661 + 1.51747 1.13409 -1.13427 -0.898731 0.153436 0.410781 + 1.55596 1.11245 -1.01639 -0.888552 -0.0141568 0.458557 + 1.55301 1.29429 -1.12115 -0.82964 0.142834 0.539718 + 1.51479 1.23664 -1.16569 -0.83315 0.124071 0.53895 + 1.48237 1.18961 -1.20643 -0.843278 0.0572872 0.534416 + 1.48367 1.07867 -1.18368 -0.878202 0.0399063 0.476623 + 1.44856 1.13419 -1.25584 -0.812248 0.0665417 0.579505 + 1.46009 1.01299 -1.23031 -0.835144 0.044783 0.548205 + 1.54043 1.03896 -1.07509 -0.863095 -0.131112 0.487726 + 1.58681 0.989069 -1.01928 -0.710331 -0.192575 0.677012 + 1.42778 1.21479 -1.28065 -0.85326 0.157485 0.497137 + 1.46073 1.30484 -1.39622 -0.813722 0.57069 -0.110313 + 1.44974 1.26479 -1.51845 -0.594693 0.768678 -0.23553 + 1.48146 1.32614 -1.4323 -0.725099 0.641886 -0.249429 + 1.47615 1.29624 -1.48712 -0.566957 0.752009 -0.336217 + 1.45184 1.21897 -1.63648 -0.559207 0.780175 -0.280383 + 1.48964 1.19978 -1.76384 -0.47794 0.83265 -0.279763 + 1.43979 1.18462 -1.73799 -0.447951 0.873471 -0.190759 + 1.41602 1.19716 -1.6283 -0.620747 0.728048 -0.290895 + 1.38771 1.1672 -1.63161 -0.743786 0.559587 -0.365574 + 1.38119 1.19504 -1.56743 -0.775228 0.596055 -0.209141 + 1.5387 1.17114 -1.89964 -0.106165 0.916496 -0.385699 + 1.41362 1.14503 -1.86862 -0.319305 0.934196 -0.15913 + 1.37663 1.14592 -1.80136 -0.41811 0.903719 -0.09207 + 1.40397 1.16281 -1.72981 -0.539043 0.838513 -0.0795562 + 1.58961 1.1563 -1.92613 0.371172 0.790447 -0.487262 + 1.62973 1.16616 -1.86822 0.701789 0.539025 -0.465773 + 1.62799 1.10638 -1.93907 0.76729 0.497841 -0.404252 + 1.63031 1.05287 -2.00698 0.798148 0.485847 -0.356248 + 1.6801 1.06513 -1.84902 0.884092 0.315177 -0.345029 + 1.67836 1.00543 -1.91982 0.907555 0.3063 -0.287269 + 1.75542 0.897488 -1.78546 0.909556 0.230262 -0.34596 + 1.7298 0.86485 -1.87113 0.922923 0.230535 -0.308328 + 1.71425 0.833595 -1.95099 0.936017 0.2267 -0.269218 + 1.74214 0.723213 -1.93861 0.938724 0.19566 -0.28375 + 1.79718 0.760102 -1.7523 0.938004 0.156933 -0.309064 + 1.77156 0.727377 -1.83802 0.925709 0.203147 -0.319051 + 1.76037 0.623595 -1.94926 0.937715 0.153794 -0.311508 + 1.72877 0.620289 -2.03794 0.944454 0.133595 -0.300264 + 1.81715 0.627372 -1.726 0.963781 0.101073 -0.2468 + 1.78979 0.627846 -1.84862 0.953463 0.141691 -0.266142 + 1.81014 0.522261 -1.81735 0.965712 0.0847973 -0.245377 + 1.78193 0.519971 -1.91998 0.952571 0.0837122 -0.292575 + 1.75033 0.516578 -2.0087 0.942768 0.0952932 -0.319544 + 1.83749 0.521787 -1.69473 0.964391 0.103509 -0.243383 + 1.83638 0.413125 -1.73832 0.959552 0.108642 -0.259726 + 1.80817 0.410835 -1.84095 0.961632 0.0819259 -0.261825 + 1.77306 0.429219 -1.96599 0.951472 0.069319 -0.299828 + 1.7397 0.435529 -2.06672 0.9414 0.0153384 -0.336944 + 1.86166 0.425444 -1.64426 0.956767 0.120679 -0.264637 + 1.90282 0.328456 -1.54907 0.946218 0.190039 -0.261833 + 1.87754 0.316044 -1.64317 0.945123 0.163967 -0.282591 + 1.8437 0.321936 -1.74858 0.952746 0.0741091 -0.29459 + 1.80858 0.340319 -1.87362 0.946973 -0.0228189 -0.320502 + 1.92194 0.355984 -1.45294 0.948587 0.183001 -0.258252 + 1.96 0.235763 -1.42632 0.963929 0.0755163 -0.255224 + 1.93246 0.229713 -1.52304 0.954348 0.00484252 -0.298657 + 1.89862 0.235606 -1.62845 0.920979 -0.0812703 -0.381042 + 1.85498 0.253233 -1.72317 0.916886 -0.102173 -0.385852 + 1.97913 0.263295 -1.33021 0.980224 0.0763599 -0.182566 + 1.9978 0.223203 -1.19056 0.999099 0.00454468 -0.042206 + 1.99354 0.170387 -1.28388 0.987074 -0.0353957 -0.156306 + 1.966 0.164338 -1.38061 0.966422 -0.0921063 -0.239884 + 1.94276 0.159406 -1.48706 0.938742 -0.107998 -0.32726 + 1.99895 0.286242 -1.09275 0.999457 0.0299574 -0.0137188 + 1.99281 0.211628 -1.03391 0.978934 -0.174571 0.10589 + 1.98855 0.158812 -1.12723 0.994071 -0.0975026 0.0481312 + 1.99174 0.109062 -1.23506 0.875254 -0.479624 -0.0623798 + 1.9685 0.104039 -1.34156 0.932262 -0.290786 -0.215244 + 1.98581 0.296467 -0.94566 0.991516 -0.0642481 0.112993 + 1.97373 0.305143 -0.850089 0.93049 -0.243527 0.273649 + 1.98072 0.220307 -0.938347 0.877151 -0.355734 0.322583 + 1.98151 0.146584 -1.03386 0.863007 -0.413602 0.290091 + 1.9847 0.096749 -1.14174 0.857099 -0.495846 0.139706 + 1.97356 0.409 -0.769973 0.951985 -0.185096 0.243854 + 1.96402 0.330958 -0.8036 0.719105 -0.455412 0.524869 + 1.96047 0.238716 -0.887436 0.544927 -0.623345 0.560799 + 1.96125 0.164999 -0.98295 0.480761 -0.701365 0.526266 + 1.95846 0.09336 -1.08147 0.398876 -0.843646 0.359388 + 1.96385 0.434814 -0.723485 0.783438 -0.36088 0.505956 + 1.9379 0.44258 -0.694537 0.445 -0.519247 0.729628 + 1.93977 0.349149 -0.769906 0.383093 -0.609971 0.693668 + 1.93622 0.256907 -0.853742 0.176949 -0.707156 0.684558 + 1.93193 0.175897 -0.951427 0.113965 -0.791755 0.600113 + 1.93576 0.547198 -0.624538 0.428931 -0.455461 0.780111 + 1.9005 0.439095 -0.683499 -0.228906 -0.580071 0.781741 + 1.90237 0.345576 -0.758919 -0.242611 -0.669729 0.701857 + 1.9044 0.264829 -0.84866 -0.385373 -0.672833 0.631493 + 1.90011 0.183817 -0.946346 -0.403227 -0.72259 0.561491 + 1.89473 0.542755 -0.617445 -0.270596 -0.498903 0.823331 + 1.82821 0.591857 -0.65849 -0.743771 -0.37207 0.55531 + 1.83398 0.488284 -0.724495 -0.756749 -0.40291 0.514775 + 1.83552 0.40161 -0.795575 -0.767168 -0.449772 0.457338 + 1.83097 0.678666 -0.59585 -0.696655 -0.366538 0.616703 + 1.73189 0.688842 -0.755276 -0.88312 -0.268487 0.384726 + 1.73691 0.605799 -0.81344 -0.881337 -0.306718 0.359401 + 1.73845 0.519127 -0.884519 -0.848222 -0.325539 0.417785 + 1.83755 0.320778 -0.885367 -0.750635 -0.477231 0.456943 + 1.73465 0.775569 -0.692687 -0.905329 -0.20541 0.371734 + 1.69835 0.868144 -0.783033 -0.971914 0.0823167 0.22047 + 1.67673 0.798432 -0.840487 -0.95697 -0.0222398 0.289333 + 1.68175 0.715383 -0.898643 -0.920956 -0.192014 0.339072 + 1.69139 0.907156 -0.937606 -0.86201 0.1953 0.467757 + 1.64391 0.823498 -0.957905 -0.897776 0.0385864 0.438759 + 1.62864 0.74213 -1.01337 -0.908609 -0.141116 0.393086 + 1.66647 0.634013 -0.954109 -0.887547 -0.197212 0.416374 + 1.73373 0.435792 -0.954179 -0.823002 -0.366495 0.433992 + 1.66335 0.996747 -0.978581 -0.595002 -0.162131 0.787202 + 1.61587 0.913088 -0.998879 -0.716985 -0.0043455 0.697075 + 1.59302 0.838534 -1.04755 -0.841369 -0.174901 0.511379 + 1.61581 0.67097 -1.08032 -0.919365 -0.196055 0.341073 + 1.66176 0.550679 -1.02377 -0.893757 -0.258638 0.366475 + 1.56395 0.914514 -1.06795 -0.817058 -0.159239 0.55413 + 1.54895 0.846936 -1.1179 -0.832362 -0.242245 0.498488 + 1.58019 0.76737 -1.11449 -0.856175 -0.252863 0.450583 + 1.60549 0.600545 -1.15254 -0.907584 -0.23119 0.350488 + 1.51686 0.973193 -1.12178 -0.846371 -0.0954106 0.523978 + 1.50185 0.905609 -1.17173 -0.794253 -0.206077 0.571572 + 1.53037 0.782376 -1.18348 -0.767121 -0.279822 0.577257 + 1.56162 0.702814 -1.18007 -0.816341 -0.303426 0.491447 + 1.47412 0.841002 -1.21862 -0.731233 -0.211109 0.648638 + 1.49902 0.723297 -1.24875 -0.717535 -0.378423 0.584756 + 1.44277 0.781924 -1.2839 -0.700884 -0.320116 0.637407 + 1.46561 0.683379 -1.31781 -0.657722 -0.428735 0.619344 + 1.55015 0.641811 -1.25441 -0.787389 -0.377322 0.48749 + 1.59402 0.539542 -1.22688 -0.908403 -0.238131 0.343653 + 1.65143 0.480345 -1.09594 -0.885784 -0.269028 0.378167 + 1.39914 0.743891 -1.34262 -0.661716 -0.339201 0.668636 + 1.41728 0.657188 -1.38505 -0.633818 -0.499654 0.590441 + 1.51673 0.601888 -1.32347 -0.718708 -0.40455 0.565507 + 1.57501 0.491937 -1.30862 -0.85682 -0.216954 0.46775 + 1.63884 0.413147 -1.17516 -0.883952 -0.289295 0.367339 + 1.35082 0.717703 -1.40986 -0.659248 -0.463665 0.591952 + 1.36445 0.647105 -1.45278 -0.645063 -0.510812 0.568299 + 1.47172 0.58636 -1.39737 -0.693542 -0.477079 0.53981 + 1.52999 0.476495 -1.38248 -0.822814 -0.331198 0.461827 + 1.61983 0.365541 -1.2569 -0.869424 -0.356363 0.34221 + 1.21154 0.769462 -1.53291 -0.730088 -0.589616 0.345433 + 1.29789 0.714715 -1.48249 -0.688886 -0.481824 0.541555 + 1.41889 0.576279 -1.46511 -0.645059 -0.497596 0.579911 + 1.49544 0.45761 -1.46457 -0.751038 -0.351266 0.559065 + 1.16249 0.822434 -1.57186 -0.836205 -0.343661 0.427386 + 1.17212 0.792308 -1.63148 -0.828446 -0.447297 0.337049 + 1.12307 0.845368 -1.67038 -0.836426 -0.447318 0.316699 + 1.09485 0.870919 -1.70684 -0.80139 -0.493808 0.337534 + 1.43477 0.463087 -1.52806 -0.727208 -0.445268 0.522402 + 1.57685 0.307882 -1.43463 -0.788277 -0.459401 0.409352 + 1.6114 0.326762 -1.35253 -0.831172 -0.443992 0.334699 + 1.69386 0.205535 -1.30996 -0.792732 -0.537131 0.288213 + 1.70229 0.244309 -1.21432 -0.797824 -0.506063 0.327684 + 1.55043 0.284485 -1.52791 -0.764261 -0.500115 0.407174 + 1.64693 0.15814 -1.50387 -0.716971 -0.606196 0.344208 + 1.67335 0.181537 -1.41059 -0.762058 -0.56271 0.32035 + 1.79129 0.099711 -1.27507 -0.711496 -0.635652 0.299535 + 1.74022 0.073938 -1.48243 -0.65837 -0.709218 0.252109 + 1.77078 0.075799 -1.37565 -0.693189 -0.677378 0.246269 + 1.86011 0.040048 -1.25573 -0.455616 -0.847977 0.27083 + 1.80779 0.132344 -1.16719 -0.712253 -0.610894 0.345694 + 1.70267 0.06714 -1.57905 -0.601434 -0.748713 0.278758 + 1.76223 0.029679 -1.57477 -0.345 -0.931193 0.117703 + 1.80415 0.023321 -1.47176 -0.389471 -0.915324 0.102441 + 1.83471 0.025187 -1.36499 -0.440512 -0.879021 0.182404 + 1.79512 0.025571 -1.58045 0.106565 -0.985244 -0.133933 + 1.83704 0.019212 -1.47744 0.12631 -0.988382 -0.0845405 + 1.86908 0.015865 -1.36964 0.126595 -0.990912 0.0454667 + 1.89448 0.030728 -1.26038 0.0266796 -0.98352 0.178819 + 1.77127 0.05782 -1.70511 0.358809 -0.895134 -0.264559 + 1.8215 0.041109 -1.60877 0.441333 -0.846886 -0.296662 + 1.8638 0.034655 -1.50779 0.509336 -0.82995 -0.227507 + 1.89584 0.03122 -1.40004 0.543211 -0.827716 -0.140745 + 1.72048 0.064447 -1.80299 0.355504 -0.906246 -0.22877 + 1.78786 0.081215 -1.75983 0.604423 -0.718133 -0.344902 + 1.83784 0.07849 -1.66291 0.696546 -0.612632 -0.373504 + 1.88013 0.072038 -1.56194 0.766398 -0.552423 -0.327815 + 1.91872 0.068677 -1.45832 0.838603 -0.4831 -0.251711 + 1.73707 0.087843 -1.85771 0.551596 -0.767886 -0.325718 + 1.72202 0.125014 -1.9457 0.802322 -0.412461 -0.431457 + 1.76963 0.12724 -1.84895 0.854101 -0.297045 -0.426937 + 1.81961 0.124515 -1.75203 0.856929 -0.288681 -0.427008 + 1.86571 0.123374 -1.65405 0.882445 -0.269715 -0.385415 + 1.66667 0.12824 -2.04308 0.835569 -0.388266 -0.388681 + 1.6716 0.181256 -2.06591 0.873684 -0.292629 -0.388645 + 1.71921 0.18357 -1.96911 0.881119 -0.203479 -0.42688 + 1.76707 0.188831 -1.87443 0.880938 -0.198953 -0.429379 + 1.81318 0.18769 -1.77645 0.882777 -0.183771 -0.432358 + 1.73059 0.259704 -1.99498 0.863772 -0.295049 -0.408466 + 1.76911 0.263281 -1.91358 0.870296 -0.266004 -0.414521 + 1.86033 0.185653 -1.68272 0.908296 -0.134305 -0.396183 + 1.90429 0.120099 -1.55038 0.905735 -0.239975 -0.349366 + 1.94675 0.0711 -1.35412 0.780844 -0.586923 -0.214018 + 1.73522 0.35624 -2.06279 0.90498 -0.19652 -0.377347 + 1.76987 0.348244 -1.97034 0.911582 -0.16943 -0.374581 + 1.81627 0.261243 -1.81985 0.883376 -0.231303 -0.407609 + 1.89912 0.177033 -1.58179 0.882229 -0.23454 -0.408245 + 1.94308 0.111478 -1.44945 0.843749 -0.440494 -0.306679 + 1.97217 0.063662 -1.24623 0.807091 -0.590304 -0.012087 + 1.92387 0.033643 -1.29584 0.411073 -0.910514 -0.0445405 + 1.91655 0.057357 -1.15051 0.0733815 -0.934442 0.348472 + 1.94593 0.060274 -1.18596 0.422043 -0.884609 0.198362 + 1.92914 0.104259 -1.04994 -0.00254531 -0.856029 0.516921 + 1.87661 0.072687 -1.14786 -0.494284 -0.785778 0.3718 + 1.8892 0.11967 -1.04724 -0.482991 -0.733323 0.478495 + 1.8204 0.18254 -1.07113 -0.722261 -0.552088 0.416578 + 1.71489 0.294507 -1.11826 -0.79533 -0.443032 0.413731 + 1.83131 0.24669 -0.970242 -0.734923 -0.511781 0.444935 + 1.72749 0.361699 -1.03904 -0.810573 -0.397433 0.430138 + 1.38447 1.12618 -1.96176 -0.114715 0.985001 -0.128893 + 1.38749 1.12929 -1.92676 -0.278228 0.957846 -0.0715501 + 1.35051 1.13018 -1.8595 -0.258671 0.963354 -0.070976 + 1.35498 1.13465 -1.76183 -0.680226 0.730672 0.0583947 + 1.33 1.12081 -1.96346 -0.159644 0.984173 -0.0769253 + 1.33303 1.12393 -1.92846 -0.213748 0.975039 -0.0600933 + 1.32053 1.12089 -1.905 -0.453605 0.888262 0.0723449 + 1.33802 1.12715 -1.83604 -0.750727 0.65288 0.100786 + 1.28648 1.11256 -1.96577 -0.249703 0.968222 0.0139225 + 1.30604 1.11478 -1.92621 -0.346332 0.93557 0.0690164 + 1.26087 1.10138 -1.96022 -0.254065 0.942033 0.219144 + 1.28043 1.1036 -1.92066 -0.277523 0.956721 0.0875538 + 1.32299 1.11005 -1.85383 -0.422881 0.901229 0.0946451 + 1.33748 1.11624 -1.83255 -0.784888 0.605502 0.131596 + 1.3456 1.12534 -1.78452 -0.939363 0.316012 0.133168 + 1.18596 1.09 -1.9349 -0.0767119 0.994353 0.0733291 + 1.22858 1.09393 -1.9143 -0.137347 0.989618 0.0423287 + 1.25696 1.09743 -1.88518 -0.170066 0.985021 0.0284881 + 1.29951 1.1038 -1.8184 -0.213624 0.97669 0.0209931 + 1.34507 1.11445 -1.78104 -0.769977 0.632049 0.0874601 + 1.18366 1.08628 -1.81346 -0.0815065 0.996623 -0.00999 + 1.21204 1.08971 -1.78439 -0.116009 0.993231 -0.00582218 + 1.22826 1.0919 -1.7346 -0.115033 0.993305 -0.0106372 + 1.31574 1.10599 -1.7686 -0.215214 0.97637 0.019584 + 1.35105 1.11454 -1.69881 -0.579294 0.815113 -0.00308249 + 1.22871 1.09286 -1.69385 -0.305127 0.94344 0.129688 + 1.32172 1.1061 -1.68638 -0.24173 0.970171 -0.0182939 + 1.36043 1.12385 -1.67613 -0.643485 0.764167 0.0444444 + 1.38231 1.15154 -1.69029 -0.711543 0.702625 -0.00493221 + 1.20826 1.07264 -1.66304 -0.415146 0.859061 0.299444 + 1.31783 1.10964 -1.60512 -0.369736 0.927105 0.0614085 + 1.32217 1.10705 -1.64564 -0.22033 0.973962 -0.053412 + 1.36011 1.12005 -1.63475 -0.590569 0.805355 -0.0513001 + 1.24022 1.02623 -1.52285 -0.478502 0.862266 0.165929 + 1.29738 1.08942 -1.5743 -0.56295 0.792059 0.236071 + 1.33367 1.11267 -1.54156 -0.77242 0.604664 -0.194292 + 1.35577 1.12264 -1.59423 -0.659742 0.738045 -0.14153 + 1.38199 1.14774 -1.6489 -0.816197 0.573819 -0.0674902 + 1.18976 1.00904 -1.53268 -0.0624446 0.995592 0.0699848 + 1.27652 1.04939 -1.49016 -0.700979 0.70817 -0.0844012 + 1.1173 1.02629 -1.55774 0.294382 0.932429 -0.209558 + 1.36149 1.14219 -1.57689 -0.863237 0.418501 -0.282274 + -1.70337 1.98922 -1.07579 0.891611 0.0298264 0.451819 + -1.6801 1.96255 -1.12801 0.952713 0.0524449 0.299312 + -1.68994 2.0633 -1.1131 0.938931 0.0320593 0.34261 + -1.72145 2.09212 -1.04902 0.901242 0.00129184 0.433315 + -1.72998 1.82017 -1.02458 0.804155 0.0712945 0.590129 + -1.67403 1.97548 -1.1624 0.979369 0.0811721 0.185062 + -1.68707 2.10694 -1.1277 0.975783 0.0546045 0.211815 + -1.7066 2.25074 -1.08775 0.96142 0.0621275 0.267977 + -1.70947 2.207 -1.0732 0.933052 0.0165296 0.359362 + -1.66549 1.89627 -1.1742 0.963879 0.0805039 0.253882 + -1.68761 2.15846 -1.15573 0.98872 0.0635271 0.135634 + -1.70018 2.27683 -1.12034 0.973309 0.0739352 0.217262 + -1.73003 2.38788 -1.0561 0.974417 0.106487 0.19792 + -1.73501 2.3795 -1.01098 0.961666 0.0476262 0.270056 + -1.74699 2.26462 -0.986805 0.885762 -0.0339763 0.462894 + -1.74805 1.92307 -0.997825 0.783753 0.0445339 0.619474 + -1.7916 1.75351 -0.929734 0.771075 0.182649 0.609985 + -1.72361 2.41406 -1.08864 0.944074 0.0660568 0.323049 + -1.73941 2.52038 -1.0578 0.950436 0.0423528 0.308022 + -1.74771 2.50862 -1.02162 0.979238 0.0813547 0.185672 + -1.71219 2.43192 -1.11818 0.98004 0.110151 0.165491 + -1.728 2.53833 -1.08728 0.985819 0.104593 0.131228 + -1.74105 2.63265 -1.05765 0.984489 0.129136 0.118763 + -1.75246 2.61995 -1.02745 0.950897 0.0438008 0.306393 + -1.76075 2.60818 -0.991272 0.972825 0.0989987 0.20931 + -1.69968 2.35382 -1.15051 0.993282 0.10702 0.0440168 + -1.70418 2.37334 -1.1703 0.985378 0.154616 -0.0715803 + -1.7167 2.45151 -1.13791 0.853954 0.272302 -0.443412 + -1.7312 2.54263 -1.10692 0.847461 0.271339 -0.456272 + -1.68711 2.23536 -1.18593 0.992992 0.0891708 -0.0775557 + -1.69619 2.27211 -1.20117 0.564763 0.283507 -0.775027 + -1.69337 2.12496 -1.24211 0.64998 0.232885 -0.723388 + -1.7067 2.15597 -1.23462 -0.279038 0.259524 -0.924546 + -1.71276 2.24476 -1.2068 -0.407443 0.252831 -0.877535 + -1.72075 2.34607 -1.17588 -0.389299 0.227154 -0.892663 + -1.70418 2.37334 -1.1703 -0.226178 0.325351 -0.918145 + -1.69304 2.04842 -1.26673 0.635359 0.313566 -0.705688 + -1.70637 2.07934 -1.25929 -0.253434 0.304553 -0.91816 + -1.75185 2.08692 -1.21682 -0.667682 0.212853 -0.713369 + -1.75791 2.17579 -1.18895 -0.668498 0.198866 -0.716632 + -1.76262 2.26646 -1.1568 -0.705615 0.16858 -0.68825 + -1.70174 1.99203 -1.29306 -0.152096 0.337167 -0.929078 + -1.73589 1.91402 -1.28954 -0.633696 0.238057 -0.736042 + -1.74052 2.00132 -1.25576 -0.665436 0.235665 -0.708278 + -1.8141 1.95582 -1.19674 -0.771143 0.175993 -0.611854 + -1.83533 2.04016 -1.14442 -0.805799 0.167127 -0.568117 + -1.69013 1.89667 -1.32589 -0.182584 0.357967 -0.915709 + -1.73367 1.82544 -1.32353 -0.632928 0.274196 -0.724029 + -1.7962 1.78133 -1.27253 -0.774322 0.200739 -0.600107 + -1.80276 1.87013 -1.23573 -0.774089 0.18849 -0.604365 + -1.88335 1.79572 -1.12164 -0.880744 0.124553 -0.456921 + -1.73005 1.73866 -1.36081 -0.654207 0.279361 -0.70283 + -1.79399 1.69277 -1.30653 -0.783721 0.223039 -0.579685 + -1.87107 1.61838 -1.20367 -0.874201 0.181608 -0.450324 + -1.87763 1.70717 -1.16687 -0.875535 0.149056 -0.459588 + -1.73301 1.64749 -1.3925 -0.6948 0.283038 -0.661168 + -1.8073 1.59501 -1.329 -0.790297 0.234706 -0.565988 + -1.88805 1.42946 -1.26487 -0.863437 0.198477 -0.46377 + -1.87474 1.52722 -1.2424 -0.870276 0.218614 -0.441393 + -1.81026 1.50393 -1.36065 -0.785988 0.211472 -0.58095 + -1.88883 1.33387 -1.29629 -0.84692 0.174672 -0.502211 + -1.9662 1.25106 -1.18427 -0.897676 0.174362 -0.404693 + -1.96847 1.33642 -1.13131 -0.9132 0.196119 -0.357215 + -1.96479 1.42748 -1.09262 -0.917288 0.211393 -0.337485 + -1.81855 1.40599 -1.38161 -0.810558 0.216017 -0.544364 + -1.89712 1.23594 -1.31727 -0.861848 0.154234 -0.483145 + -1.96698 1.15547 -1.2157 -0.874299 0.0864331 -0.477629 + -2.02124 1.12376 -1.10058 -0.940833 0.106489 -0.321703 + -1.81903 1.31935 -1.42054 -0.833639 0.232664 -0.500913 + -1.89403 1.14413 -1.35127 -0.899525 0.167263 -0.403581 + -1.95399 1.05227 -1.23915 -0.886003 0.0653478 -0.459051 + -1.99703 0.929877 -1.17096 -0.922634 0.0143854 -0.385408 + -2.01002 1.03308 -1.14751 -0.91261 0.0244684 -0.408099 + -1.82824 1.22532 -1.44989 -0.858232 0.238178 -0.454653 + -1.90324 1.05011 -1.38061 -0.920302 0.164658 -0.35487 + -1.95089 0.960473 -1.27315 -0.928163 0.0991291 -0.35873 + -1.82453 1.14454 -1.50056 -0.860847 0.22471 -0.45656 + -1.88766 0.978483 -1.44294 -0.908312 0.134507 -0.396077 + -1.93121 0.894901 -1.34518 -0.937381 0.0888712 -0.336777 + -1.95983 0.77573 -1.29557 -0.944314 0.050614 -0.32513 + -1.97952 0.841297 -1.22353 -0.9431 0.0422474 -0.329815 + -1.80562 1.07001 -1.56648 -0.869394 0.219808 -0.442537 + -1.86874 0.903956 -1.50886 -0.912923 0.118603 -0.39052 + -1.91563 0.823277 -1.40752 -0.929996 0.0592713 -0.362761 + -1.69567 1.18769 -1.7125 -0.854825 0.305633 -0.419359 + -1.79295 1.00322 -1.6328 -0.886963 0.221574 -0.405219 + -1.84544 0.846043 -1.58295 -0.922975 0.113518 -0.367737 + -1.88919 0.755559 -1.47603 -0.931817 0.0420228 -0.360486 + -1.69378 1.11793 -1.77487 -0.869063 0.308485 -0.386737 + -1.7691 0.950287 -1.71131 -0.900283 0.221805 -0.374558 + -1.82158 0.793109 -1.66147 -0.935243 0.129371 -0.32952 + -1.86589 0.69756 -1.55017 -0.945273 0.0597576 -0.320763 + -1.91065 0.635231 -1.43262 -0.939002 0.0160366 -0.343539 + -1.6801 1.06513 -1.84902 -0.881764 0.323823 -0.342974 + -1.75542 0.897488 -1.78546 -0.914065 0.225605 -0.337028 + -1.79718 0.760102 -1.7523 -0.93734 0.141684 -0.318307 + -1.84155 0.660377 -1.63517 -0.952917 0.0749478 -0.293824 + -1.67836 1.00534 -1.91987 -0.899867 0.312027 -0.304759 + -1.7298 0.86485 -1.87113 -0.924424 0.217459 -0.313292 + -1.77156 0.727377 -1.83802 -0.938751 0.181689 -0.292807 + -1.81715 0.627372 -1.726 -0.960318 0.10939 -0.25656 + -1.86197 0.542246 -1.59496 -0.958595 0.0820601 -0.272693 + -1.6628 0.974096 -1.99975 -0.911455 0.30585 -0.275147 + -1.71425 0.833595 -1.95099 -0.936695 0.225613 -0.267771 + -1.74214 0.723213 -1.93861 -0.939716 0.203829 -0.274566 + -1.78979 0.627846 -1.84862 -0.954913 0.155289 -0.253033 + -1.63031 1.05278 -2.00703 -0.79804 0.48585 -0.356486 + -1.65644 0.92519 -2.07784 -0.917015 0.295446 -0.267945 + -1.68686 0.842111 -2.04174 -0.941348 0.222886 -0.253348 + -1.71475 0.731724 -2.02935 -0.943961 0.179191 -0.277177 + -1.76037 0.623595 -1.94926 -0.9418 0.144527 -0.303522 + -1.62395 1.00388 -2.08513 -0.802861 0.474627 -0.360754 + -1.60888 0.957783 -2.17709 -0.788335 0.493322 -0.367644 + -1.63942 0.904651 -2.16327 -0.898923 0.326404 -0.292229 + -1.66984 0.821567 -2.12716 -0.946163 0.21842 -0.238889 + -1.6034 1.00377 -2.11935 -0.690982 0.596727 -0.407997 + -1.55387 1.00544 -2.20244 -0.617303 0.669101 -0.413813 + -1.59304 0.919411 -2.25863 -0.775756 0.500543 -0.384263 + -1.62358 0.866281 -2.2448 -0.878785 0.366838 -0.305233 + -1.46671 1.04008 -2.25685 -0.389992 0.848392 -0.357962 + -1.52471 0.991998 -2.27056 -0.612036 0.677482 -0.407958 + -1.56387 0.906056 -2.3267 -0.721933 0.548584 -0.421745 + -1.60236 0.841891 -2.33416 -0.83178 0.403929 -0.380766 + -1.65077 0.820142 -2.21909 -0.926539 0.292141 -0.237023 + -1.37522 1.05239 -2.28095 -0.277282 0.920443 -0.2755 + -1.35936 1.03642 -2.36629 -0.38834 0.884189 -0.259619 + -1.43014 0.994897 -2.38438 -0.483021 0.803818 -0.347228 + -1.48814 0.946809 -2.39809 -0.644772 0.656604 -0.391332 + -1.53679 0.879425 -2.40737 -0.736605 0.535769 -0.412752 + -1.30013 1.0588 -2.37107 -0.413034 0.903358 -0.115531 + -1.27743 1.06971 -2.41596 -0.596696 0.798163 -0.0830052 + -1.32284 1.02151 -2.47507 -0.523589 0.830042 -0.192055 + -1.39362 0.979989 -2.49315 -0.564237 0.774675 -0.285509 + -1.45177 0.922027 -2.49836 -0.688375 0.625886 -0.366615 + -1.27948 1.08729 -2.31361 -0.477194 0.853377 -0.209844 + -1.26248 1.08908 -2.34071 -0.50428 0.835202 -0.219407 + -1.24392 1.09539 -2.36524 -0.612632 0.790124 -0.0196539 + -1.28157 1.06511 -2.39559 -0.386614 0.920236 0.0607796 + -1.31626 1.08384 -2.24124 -0.539697 0.832647 -0.1242 + -1.27975 1.09644 -2.26906 -0.373528 0.917056 -0.139588 + -1.25706 1.10469 -2.26695 -0.51825 0.850804 -0.0868846 + -1.2456 1.11119 -2.3016 -0.55435 0.813754 -0.174641 + -1.22861 1.11298 -2.32871 -0.526312 0.826119 -0.201303 + -1.28398 1.0983 -2.21747 -0.327419 0.944631 -0.0216478 + -1.22424 1.13141 -2.28583 -0.415646 0.902694 -0.111275 + -1.20242 1.13319 -2.31351 -0.397821 0.913572 -0.0844049 + -1.21181 1.12119 -2.34793 -0.623263 0.78189 0.0138067 + -1.24071 1.1016 -2.37999 -0.671903 0.734678 0.0937815 + -1.23658 1.10612 -2.40041 -0.662028 0.74935 0.0139587 + -1.18562 1.14149 -2.33268 -0.565484 0.814708 0.128369 + -1.2086 1.12749 -2.36263 -0.658181 0.741127 0.132398 + -1.19759 1.13864 -2.37475 -0.645347 0.760108 0.0759098 + -1.20962 1.1297 -2.39806 -0.654382 0.755825 0.0226384 + -1.22658 1.11436 -2.44609 -0.68521 0.725387 -0.0655798 + -1.17383 1.1383 -2.28255 -0.194727 0.971349 0.136242 + -1.1585 1.1462 -2.29345 -0.472865 0.828992 0.298616 + -1.16163 1.16328 -2.33763 -0.504202 0.826222 0.251274 + -1.15063 1.17453 -2.34971 -0.36474 0.873196 0.323253 + -1.19565 1.13651 -2.25487 -0.109197 0.982267 0.152406 + -1.13323 1.12325 -2.19868 -0.202951 0.936813 0.284941 + -1.08239 1.17791 -2.33317 0.0467369 0.985681 0.162016 + -1.12323 1.18488 -2.35804 -0.121405 0.97306 0.195995 + -1.15926 1.17136 -2.38481 -0.514572 0.856113 0.0478178 + -1.1713 1.16232 -2.40817 -0.65713 0.753116 0.0315561 + -1.19962 1.13795 -2.44375 -0.663176 0.748434 0.00659296 + -0.968399 1.15384 -2.29328 0.202304 0.95554 0.214516 + -1.04735 1.17306 -2.38357 0.140036 0.988195 0.0621329 + -1.08819 1.18004 -2.40845 0.127357 0.990857 -0.044536 + -1.13186 1.18171 -2.39315 -0.167956 0.985579 -0.0206364 + -1.15944 1.1735 -2.41832 -0.511552 0.856371 0.0703066 + -0.936631 1.15101 -2.30577 0.419649 0.881265 0.217411 + -0.955186 1.16676 -2.38306 0.358932 0.930285 0.0757467 + -1.01558 1.17032 -2.39601 0.0984417 0.990638 0.0945756 + -0.932578 1.14581 -2.36357 0.836361 0.547373 -0.029708 + -0.931757 1.14517 -2.41466 0.816887 0.576744 0.00785208 + -0.959034 1.1691 -2.41991 0.352482 0.933536 -0.0653192 + -1.01943 1.17257 -2.43292 0.1906 0.981061 0.03452 + -1.04987 1.18209 -2.46681 0.143806 0.979138 0.143559 + -0.920012 1.10707 -2.34487 0.991735 0.123413 0.0350695 + -0.919192 1.10644 -2.39597 0.958062 0.285307 0.0267738 + -0.925154 1.13651 -2.44707 0.83272 0.530471 0.158676 + -0.952431 1.16044 -2.45231 0.437461 0.897856 -0.0498172 + -0.98287 1.16997 -2.4862 0.271842 0.94942 0.157177 + -0.929802 1.09338 -2.29976 0.987913 -0.148206 0.0454186 + -0.923815 1.03796 -2.30816 0.980927 0.0807736 0.176798 + -0.914026 1.05165 -2.35327 0.97129 0.111056 0.210386 + -0.909485 1.07044 -2.39242 0.975036 0.202639 0.0907886 + -0.914214 1.0936 -2.44394 0.951115 0.251325 0.179487 + -0.913802 0.9689 -2.31155 0.976617 0.0560245 0.207558 + -0.898638 0.993068 -2.38241 0.972779 0.0847546 0.215679 + -0.894097 1.01186 -2.42156 0.947415 0.250139 0.199586 + -0.904507 1.05752 -2.44045 0.951095 0.272874 0.144766 + -0.915551 0.821097 -2.30175 0.967868 -0.0135223 0.251094 + -0.900387 0.845177 -2.37266 0.968886 0.00923174 0.247334 + -0.882188 1.00437 -2.45918 0.947986 0.167926 0.270412 + -0.892598 1.05003 -2.47807 0.902205 0.273671 0.333364 + -0.900778 1.09393 -2.4795 0.903358 0.217654 0.369556 + -0.914433 0.563609 -2.32156 0.899078 -0.127257 0.418884 + -0.876889 1.05242 -2.5152 0.889144 0.246558 0.385527 + -0.967405 0.395445 -2.30669 0.570663 -0.556743 0.60364 + -1.04052 0.334882 -2.34079 0.619429 -0.682168 0.388528 + -1.11079 0.244901 -2.36655 0.703855 -0.607116 0.368781 + -1.17036 0.148551 -2.40006 0.66486 -0.649604 0.368748 + -1.12487 0.148312 -2.48305 0.663812 -0.645286 0.3781 + -1.1865 0.076404 -2.5217 0.517336 -0.79615 0.313861 + -1.21585 0.15262 -2.31431 0.638596 -0.65645 0.401583 + -1.27615 0.086092 -2.34228 0.554654 -0.766439 0.323928 + -1.23066 0.082109 -2.42798 0.534141 -0.789679 0.301829 + -1.31981 0.091549 -2.24473 0.59906 -0.735708 0.316007 + -1.33237 0.04906 -2.35634 0.443284 -0.863344 0.241114 + -1.29002 0.043919 -2.45923 0.419095 -0.877292 0.23392 + -1.24587 0.0383 -2.5529 0.392885 -0.888393 0.237485 + -1.37603 0.054431 -2.25884 0.463887 -0.856336 0.226932 + -1.4169 0.033245 -2.26275 0.208912 -0.972733 0.100728 + -1.36682 0.030486 -2.36717 0.198967 -0.971232 0.130842 + -1.32447 0.025344 -2.47006 0.277403 -0.945532 0.170342 + -1.27791 0.019255 -2.57732 0.259595 -0.951121 0.167271 + -1.46302 0.031072 -2.16318 0.15235 -0.983932 0.0930932 + -1.42859 0.03363 -2.26721 -0.223407 -0.967988 -0.114405 + -1.37851 0.030783 -2.37168 -0.268104 -0.959969 -0.0811185 + -1.33261 0.023419 -2.47613 -0.196511 -0.980076 -0.0288872 + -1.28605 0.01733 -2.58338 -0.195131 -0.980299 -0.0306362 + -1.51392 0.035698 -2.0638 0.120761 -0.986976 0.106278 + -1.4868 0.035107 -2.16957 -0.297794 -0.946035 -0.127816 + -1.50602 0.052899 -2.20699 -0.437889 -0.86945 -0.228715 + -1.44781 0.051335 -2.30468 -0.456397 -0.858905 -0.232344 + -1.4009 0.050985 -2.40587 -0.516667 -0.83205 -0.201862 + -1.5377 0.03982 -2.07013 -0.282159 -0.955628 -0.0846247 + -1.55839 0.054865 -2.10739 -0.4377 -0.878496 -0.191476 + -1.52924 0.081407 -2.26176 -0.515163 -0.808473 -0.284568 + -1.48243 0.090151 -2.36191 -0.534614 -0.795466 -0.285344 + -1.43552 0.089799 -2.4631 -0.611384 -0.749514 -0.253845 + -1.59725 0.050773 -1.9709 -0.287284 -0.9526 -0.100105 + -1.61793 0.06573 -2.00821 -0.471077 -0.85864 -0.202049 + -1.5816 0.083373 -2.16217 -0.614495 -0.742501 -0.266625 + -1.53613 0.121343 -2.34574 -0.66917 -0.663885 -0.333867 + -1.67245 0.068455 -1.90453 -0.430918 -0.87444 -0.222854 + -1.62721 0.088345 -2.05878 -0.626175 -0.728733 -0.277223 + -1.62369 0.123851 -2.14248 -0.809031 -0.485348 -0.331521 + -1.57809 0.118879 -2.24587 -0.749995 -0.579813 -0.318315 + -1.68172 0.091068 -1.9551 -0.595255 -0.735456 -0.32369 + -1.66666 0.12824 -2.04308 -0.755778 -0.53652 -0.375428 + -1.59088 0.16895 -2.26439 -0.908197 -0.257935 -0.329617 + -1.55774 0.164852 -2.3651 -0.857896 -0.397119 -0.326055 + -1.51578 0.167229 -2.46501 -0.778409 -0.505108 -0.372754 + -1.73708 0.087843 -1.85771 -0.537741 -0.776549 -0.328338 + -1.72202 0.125014 -1.9457 -0.804256 -0.413509 -0.426828 + -1.63385 0.173256 -2.16505 -0.892198 -0.284677 -0.35063 + -1.57455 0.233216 -2.3713 -0.897305 -0.314701 -0.309528 + -1.78785 0.081215 -1.75983 -0.602447 -0.714889 -0.354953 + -1.76961 0.12724 -1.84895 -0.848033 -0.313932 -0.42695 + -1.6716 0.181256 -2.06591 -0.907151 -0.163127 -0.3879 + -1.64677 0.245073 -2.17824 -0.906566 -0.262149 -0.330782 + -1.60902 0.237071 -2.27738 -0.899618 -0.300264 -0.317062 + -1.83783 0.078495 -1.66292 -0.731957 -0.578616 -0.359781 + -1.81959 0.124515 -1.75203 -0.857016 -0.289019 -0.426605 + -1.71919 0.183482 -1.96917 -0.880981 -0.203089 -0.427348 + -1.88014 0.072038 -1.56194 -0.767076 -0.55394 -0.323643 + -1.8657 0.123287 -1.6541 -0.906288 -0.185652 -0.379704 + -1.76705 0.188831 -1.87443 -0.883857 -0.186407 -0.42901 + -1.73059 0.259704 -1.99498 -0.864404 -0.295783 -0.406593 + -1.68272 0.254356 -2.08972 -0.885282 -0.269026 -0.379342 + -1.91872 0.068677 -1.45832 -0.824943 -0.501848 -0.260033 + -1.90428 0.120012 -1.55043 -0.904734 -0.239795 -0.352072 + -1.81316 0.187605 -1.7765 -0.883902 -0.18487 -0.429582 + -1.94676 0.071188 -1.35406 -0.78137 -0.592719 -0.195308 + -1.94308 0.111483 -1.44946 -0.918032 -0.263003 -0.296726 + -1.86032 0.185567 -1.68277 -0.889791 -0.216255 -0.401877 + -1.8163 0.261243 -1.81985 -0.884339 -0.231715 -0.40528 + -1.76915 0.263281 -1.91358 -0.857215 -0.303184 -0.416248 + -1.97218 0.063662 -1.24623 -0.657513 -0.749939 -0.0725779 + -1.9685 0.104044 -1.34157 -0.931463 -0.290266 -0.219367 + -1.89912 0.177033 -1.58179 -0.88379 -0.23562 -0.404226 + -1.98469 0.096754 -1.14175 -0.856678 -0.494602 0.146529 + -1.99175 0.109062 -1.23506 -0.921411 -0.378697 -0.0871208 + -1.94276 0.159406 -1.48706 -0.867182 -0.354308 -0.349945 + -1.89862 0.235611 -1.62845 -0.922587 -0.0831037 -0.376731 + -1.85498 0.253237 -1.72318 -0.875598 -0.250563 -0.412973 + -1.9815 0.146589 -1.03387 -0.756034 -0.578494 0.306198 + -1.98856 0.158812 -1.12723 -0.994374 -0.0986883 0.0384729 + -1.96601 0.164424 -1.38056 -0.968948 -0.093475 -0.228914 + -1.98072 0.220307 -0.938348 -0.877316 -0.356528 0.321254 + -1.99281 0.211628 -1.03391 -0.984552 -0.147455 0.0944188 + -1.99355 0.170473 -1.28383 -0.875953 -0.46704 -0.120749 + -1.96 0.235677 -1.42637 -0.96396 0.0753148 -0.255163 + -1.93247 0.229627 -1.52309 -0.954284 0.00366101 -0.29888 + -1.97373 0.305144 -0.85009 -0.949834 -0.192936 0.246152 + -1.98581 0.296467 -0.94566 -0.99183 -0.0657703 0.109308 + -1.9978 0.223203 -1.19056 -0.999247 0.00558986 -0.0383945 + -1.96385 0.434813 -0.723484 -0.791408 -0.351018 0.500459 + -1.97356 0.409 -0.769972 -0.951961 -0.184389 0.244482 + -1.98427 0.380217 -0.861719 -0.98546 -0.111371 0.128314 + -1.99895 0.286242 -1.09275 -0.999664 -0.024943 0.00706155 + -1.96171 0.539431 -0.653485 -0.792064 -0.315157 0.522792 + -1.97703 0.517646 -0.708553 -0.952197 -0.172335 0.252232 + -1.98773 0.488861 -0.800298 -0.986037 -0.11302 0.122301 + -1.9974 0.369992 -1.00881 -0.999786 -0.00325218 0.0204195 + -1.98028 0.326333 -1.23239 -0.978903 0.132828 -0.155258 + -1.96969 0.65733 -0.607494 -0.848082 -0.247574 0.468469 + -1.98501 0.635545 -0.662562 -0.948366 -0.174676 0.264745 + -1.99507 0.593357 -0.747888 -0.975685 -0.156634 0.153314 + -1.99419 0.452858 -0.919338 -0.999438 -0.0288507 0.0170785 + -1.97634 0.772609 -0.556763 -0.850695 -0.285233 0.441543 + -2.00529 0.764217 -0.656829 -0.94617 -0.206749 0.249032 + -2.01535 0.722029 -0.742154 -0.972116 -0.178315 0.152296 + -2.00153 0.557266 -0.866979 -0.993446 -0.109064 0.034209 + -1.9876 0.477829 -1.05719 -0.99718 -0.0037107 -0.0749563 + -1.95598 0.878317 -0.455052 -0.559245 -0.496608 0.663796 + -1.99349 0.882653 -0.514565 -0.861348 -0.334405 0.38243 + -2.02245 0.874262 -0.614633 -0.929341 -0.277309 0.243772 + -2.03629 0.845109 -0.720735 -0.947825 -0.255022 0.19129 + -2.01226 0.657475 -0.819343 -0.988316 -0.146658 0.0415088 + -1.93571 0.964666 -0.374015 -0.10366 -0.579508 0.808347 + -1.97703 0.986076 -0.393898 -0.676771 -0.503894 0.536723 + -2.01455 0.990413 -0.453411 -0.843885 -0.395258 0.362808 + -2.04627 0.984262 -0.563157 -0.915534 -0.322419 0.240508 + -2.06012 0.955113 -0.669267 -0.965758 -0.232337 0.115463 + -1.95968 1.0614 -0.304562 -0.286001 -0.63837 0.714623 + -2.001 1.0829 -0.324395 -0.703933 -0.524519 0.478913 + -2.0318 1.08707 -0.384218 -0.848563 -0.412 0.331958 + -2.06352 1.08092 -0.493969 -0.928484 -0.306902 0.209113 + -1.91534 1.03977 -0.321901 0.298187 -0.584626 0.754518 + -1.98842 1.15476 -0.231268 -0.359145 -0.62848 0.689947 + -2.0211 1.18058 -0.248185 -0.738508 -0.518872 0.430555 + -2.05189 1.18475 -0.308008 -0.827528 -0.457102 0.325968 + -1.85646 1.04292 -0.375555 0.795385 -0.19138 0.575096 + -1.94408 1.13313 -0.248607 0.194199 -0.601948 0.774562 + -2.01546 1.25513 -0.152315 -0.480432 -0.627259 0.612969 + -2.04814 1.28086 -0.169283 -0.702556 -0.559663 0.439536 + -1.89832 1.10095 -0.296262 0.585955 -0.505802 0.633104 + -1.92234 1.18614 -0.219013 0.693387 -0.377439 0.613804 + -1.96811 1.21832 -0.171359 0.0206645 -0.679714 0.733186 + -2.02483 1.34524 -0.069792 -0.399811 -0.633933 0.662027 + -1.86015 1.14351 -0.374978 0.923293 0.0230016 0.383408 + -1.88441 1.2047 -0.300965 0.937177 -0.0676176 0.34224 + -1.93698 1.27049 -0.155719 0.801202 -0.320647 0.505233 + -1.97748 1.30843 -0.088837 0.159109 -0.653027 0.740433 + -1.82658 1.23187 -0.486835 0.959575 0.0779347 0.270447 + -1.85085 1.29307 -0.412823 0.968752 0.0391377 0.244924 + -1.86885 1.35294 -0.337923 0.9799 0.00934479 0.199271 + -1.89905 1.28905 -0.237671 0.943557 -0.129305 0.304926 + -1.93585 1.35848 -0.080727 0.734889 -0.467839 0.490983 + -1.81146 1.33455 -0.567678 0.959934 0.109406 0.257987 + -1.84072 1.37809 -0.49529 0.959493 0.148617 0.239345 + -1.85872 1.43788 -0.420448 0.968057 0.219129 0.121856 + -1.88469 1.48434 -0.340922 0.960459 0.271951 0.0596735 + -1.87618 1.42189 -0.268346 0.99453 0.0176527 0.102947 + -1.84299 1.48933 -0.552965 0.905606 0.28427 0.314752 + -1.88307 1.51248 -0.474651 0.920278 0.342515 0.189135 + -1.90903 1.55894 -0.395126 0.913094 0.387587 0.126632 + -1.86867 1.56779 -0.586052 0.844163 0.453842 0.285335 + -1.91179 1.60975 -0.524332 0.884484 0.421175 0.200747 + -1.94178 1.60443 -0.321116 0.915049 0.402104 -0.0315978 + -1.89459 1.53524 -0.258873 0.950323 0.30069 -0.0804451 + -1.88608 1.47278 -0.186297 0.999663 -0.025758 -0.00321867 + -1.87313 1.63301 -0.700431 0.824208 0.475242 0.307937 + -1.92189 1.68619 -0.662742 0.874562 0.387361 0.291708 + -1.94454 1.65515 -0.450362 0.891517 0.426598 0.152355 + -1.97724 1.697 -0.383658 0.924263 0.375769 0.0673527 + -1.95085 1.65504 -0.247183 0.89539 0.435085 -0.0947499 + -1.83282 1.6809 -0.841971 0.806269 0.33302 0.488906 + -1.88157 1.734 -0.804341 0.79783 0.347586 0.492596 + -1.95459 1.72805 -0.596037 0.880661 0.420793 0.217645 + -1.8156 1.80599 -0.914837 0.738931 0.133514 0.66042 + -1.85829 1.83954 -0.872349 0.712938 0.172409 0.679702 + -1.92426 1.76755 -0.761844 0.804968 0.445729 0.391602 + -1.98855 1.76204 -0.532305 0.835529 0.513459 0.195577 + -1.77205 1.97564 -0.98287 0.710944 -0.0156977 0.703073 + -1.78843 2.05003 -0.946326 0.823193 -0.0835351 0.561582 + -1.82242 1.95205 -0.922019 0.597077 0.00829871 0.802141 + -1.93524 1.83504 -0.803141 0.833598 0.211904 0.510108 + -1.95822 1.80145 -0.698161 0.913507 0.240093 0.32842 + -1.76337 2.3391 -0.950211 0.922975 -0.0429746 0.382453 + -1.78249 2.30397 -0.901962 0.855773 -0.0775873 0.511501 + -1.81647 2.2059 -0.877697 0.814325 -0.118375 0.56821 + -1.89937 1.94763 -0.852761 0.777452 -0.0752609 0.624423 + -1.93269 1.9349 -0.794719 0.938156 -0.168714 0.302323 + -1.75957 2.46879 -0.943036 0.945399 0.0245559 0.324987 + -1.77868 2.43366 -0.894787 0.862175 -0.0345068 0.505434 + -1.83865 2.42426 -0.82771 0.70206 -0.0359695 0.711209 + -1.84979 2.19327 -0.819613 0.869369 -0.115066 0.480581 + -1.95567 1.90131 -0.689739 0.912627 -0.0905058 0.398649 + -1.75268 2.50016 -0.976565 0.9771 0.0824444 0.196159 + -1.77315 2.56887 -0.917576 0.924301 0.071436 0.374919 + -1.78795 2.61693 -0.89583 0.881218 0.0900881 0.464047 + -1.79348 2.48173 -0.873041 0.788265 0.0169569 0.615102 + -1.76627 2.60023 -0.951096 0.966019 0.119021 0.229435 + -1.78613 2.67697 -0.915407 0.927593 0.161559 0.336852 + -1.81909 2.66232 -0.855642 0.752669 0.107855 0.649505 + -1.86426 2.60485 -0.810302 0.721259 0.0397575 0.691524 + -1.78062 2.68492 -0.955583 0.956455 0.129544 0.261555 + -1.80134 2.74089 -0.909921 0.885734 0.219629 0.408947 + -1.81727 2.72244 -0.875169 0.830836 0.180625 0.52639 + -1.84106 2.75625 -0.851922 0.677954 0.368343 0.636162 + -1.76931 2.69654 -0.989714 0.936114 0.0566238 0.347108 + -1.79004 2.7526 -0.944002 0.908019 0.158139 0.387935 + -1.82513 2.77478 -0.886624 0.729699 0.436906 0.525979 + -1.7579 2.70925 -1.01992 0.963718 0.258817 0.0652807 + -1.77862 2.76509 -0.974238 0.90547 0.407531 0.118499 + -1.8052 2.79816 -0.938525 0.646307 0.729636 0.223426 + -1.81661 2.78567 -0.908291 0.743381 0.454403 0.490819 + -1.86775 2.79455 -0.86387 0.537195 0.581952 0.610535 + -1.74425 2.63695 -1.0773 0.626532 0.427098 -0.651955 + -1.76305 2.71127 -1.03682 0.463925 0.596348 -0.655089 + -1.78378 2.76702 -0.991191 0.395354 0.742639 -0.540539 + -1.80795 2.79902 -0.949217 0.187592 0.917222 -0.351445 + -1.74268 2.5277 -1.12287 -0.0488763 0.305199 -0.951034 + -1.76503 2.61621 -1.08778 -0.368311 0.31913 -0.873214 + -1.78383 2.69045 -1.04735 -0.444662 0.382017 -0.810147 + -1.80458 2.75174 -1.00111 -0.460354 0.477401 -0.74844 + -1.82875 2.78366 -0.959199 -0.561231 0.5448 -0.623067 + -1.72818 2.43651 -1.15392 0.0153373 0.273364 -0.961788 + -1.7724 2.45598 -1.10924 -0.734968 0.123263 -0.666804 + -1.79475 2.54449 -1.07414 -0.772937 0.107699 -0.625276 + -1.81161 2.64031 -1.02712 -0.822024 0.133012 -0.5537 + -1.83236 2.70152 -0.98093 -0.843192 0.116224 -0.524898 + -1.77005 2.3569 -1.13484 -0.715717 0.134452 -0.685326 + -1.83396 2.32389 -1.05426 -0.836003 0.121886 -0.535017 + -1.82428 2.46176 -1.03646 -0.845391 0.0969951 -0.525267 + -1.84113 2.55759 -0.989435 -0.879065 0.0968489 -0.46676 + -1.8688 2.64369 -0.913372 -0.89814 0.0772281 -0.432874 + -1.8316 2.22491 -1.07981 -0.843554 0.163224 -0.511638 + -1.89966 2.06103 -0.988568 -0.933401 0.14116 -0.329902 + -1.87904 2.2611 -0.990313 -0.876503 0.089622 -0.472981 + -1.86937 2.39898 -0.972513 -0.873943 0.123206 -0.470153 + -1.87537 2.47364 -0.941231 -0.880607 0.111525 -0.460536 + -1.84003 2.13082 -1.11226 -0.839926 0.195803 -0.506148 + -1.90809 1.96695 -1.02102 -0.932285 0.169191 -0.319717 + -1.9045 2.14994 -0.949971 -0.92276 0.0636023 -0.38009 + -1.90458 1.88014 -1.06926 -0.900005 0.118722 -0.419399 + -1.97308 1.77805 -0.900439 -0.955821 0.156521 -0.248812 + -1.96957 1.69115 -0.948727 -0.937747 0.132989 -0.32085 + -2.02579 1.55705 -0.839262 -0.947964 0.15376 -0.278787 + -1.96564 1.60198 -0.996678 -0.925672 0.134525 -0.353601 + -2.02186 1.46779 -0.887253 -0.943343 0.137763 -0.301869 + -2.06228 1.48826 -0.746906 -0.959362 0.133604 -0.248546 + -2.09122 1.45139 -0.640447 -0.974431 0.0962247 -0.20304 + -1.95992 1.51335 -1.04196 -0.923642 0.178625 -0.339085 + -2.02129 1.37888 -0.937849 -0.94504 0.182911 -0.271004 + -2.06073 1.38864 -0.790966 -0.960796 0.118039 -0.250875 + -2.08967 1.35177 -0.684508 -0.980061 0.065485 -0.187594 + -2.11859 1.4276 -0.499441 -0.983277 0.0389271 -0.177909 + -2.02617 1.29301 -0.988521 -0.947385 0.177116 -0.266628 + -2.06017 1.29964 -0.841612 -0.964425 0.136427 -0.226433 + -2.08309 1.26324 -0.753163 -0.979789 0.0907949 -0.17824 + -2.10357 1.35566 -0.589833 -0.988026 0.0150411 -0.153556 + -2.02351 1.20911 -1.04761 -0.944788 0.160515 -0.285676 + -2.05816 1.21379 -0.905509 -0.96694 0.130825 -0.21889 + -2.08108 1.17739 -0.817061 -0.987623 0.0473868 -0.149515 + -2.09699 1.26712 -0.658488 -0.993989 0.00114169 -0.109477 + -2.12631 1.36968 -0.449128 -0.98963 -0.0982745 -0.104761 + -2.05549 1.1299 -0.964603 -0.972881 0.0812402 -0.216569 + -2.07198 1.08522 -0.885216 -0.990384 -0.0118836 -0.137833 + -2.08871 1.18155 -0.736669 -0.996322 -0.0308005 -0.0799573 + -2.09774 1.19902 -0.611331 -0.993967 -0.107858 -0.0199089 + -2.10602 1.28468 -0.5331 -0.992525 -0.103797 -0.0641862 + -2.04402 1.04975 -1.03439 -0.970439 0.030296 -0.239437 + -2.06051 1.00508 -0.955007 -0.987998 -0.0560364 -0.143945 + -2.07962 1.08938 -0.804825 -0.995261 -0.0763985 -0.0601538 + -2.0328 0.959071 -1.08132 -0.962637 -0.0424637 -0.267444 + -2.04378 0.902897 -0.995826 -0.983016 -0.121232 -0.13778 + -2.0661 0.987661 -0.861243 -0.990934 -0.125045 -0.0491213 + -2.07118 1.00899 -0.747187 -0.989622 -0.143696 0.000826782 + -2.08471 1.11063 -0.690828 -0.990304 -0.138888 0.0027783 + -2.01409 0.862541 -1.12133 -0.963874 -0.0552808 -0.260559 + -2.02508 0.806365 -1.03583 -0.983527 -0.124181 -0.131357 + -2.04937 0.885476 -0.902053 -0.98657 -0.153917 -0.0546657 + -1.99658 0.774051 -1.17386 -0.971801 -0.0279902 -0.234136 + -2.00857 0.707927 -1.07553 -0.986996 -0.112858 -0.114464 + -2.02757 0.760312 -0.902864 -0.986431 -0.158308 -0.0435122 + -2.03319 0.780641 -0.797873 -0.982325 -0.181062 0.0474664 + -2.05499 0.905722 -0.797122 -0.986957 -0.16097 -0.00194736 + -1.98022 0.694353 -1.24222 -0.968386 -0.0316358 -0.247441 + -1.99221 0.628315 -1.14384 -0.988532 -0.0728051 -0.132303 + -2.01107 0.661873 -0.942562 -0.991753 -0.120767 -0.042911 + -1.9371 0.70295 -1.36411 -0.933596 0.0203236 -0.357751 + -1.95748 0.621574 -1.31076 -0.953344 -0.0400655 -0.299216 + -1.97947 0.54448 -1.21083 -0.977391 -0.104149 -0.184012 + -2.00034 0.561665 -0.990198 -0.993735 -0.101515 -0.0467479 + -1.92874 0.541985 -1.37811 -0.953065 -0.0468341 -0.299122 + -1.95073 0.464891 -1.27818 -0.97211 0.0194808 -0.233714 + -1.8863 0.579432 -1.50997 -0.952219 0.0337673 -0.303544 + -1.90438 0.486181 -1.45545 -0.961391 0.064499 -0.267521 + -1.94019 0.396175 -1.36396 -0.963416 0.121826 -0.23872 + -1.99081 0.395049 -1.14661 -0.989561 0.0761923 -0.122326 + -1.88613 0.445995 -1.54445 -0.960159 0.115062 -0.254667 + -1.92194 0.355984 -1.45294 -0.951354 0.181882 -0.248686 + -1.83749 0.521787 -1.69473 -0.964718 0.118015 -0.235353 + -1.86166 0.425444 -1.64426 -0.958609 0.117814 -0.259208 + -1.90282 0.328364 -1.54911 -0.94618 0.190271 -0.261801 + -1.97912 0.263295 -1.33021 -0.977919 0.100252 -0.183366 + -1.81013 0.522261 -1.81735 -0.964761 0.0864903 -0.248507 + -1.83638 0.413125 -1.73832 -0.959356 0.0927667 -0.266516 + -1.87754 0.315958 -1.64322 -0.945104 0.164066 -0.282596 + -1.78193 0.519976 -1.91999 -0.950571 0.057625 -0.305113 + -1.80817 0.410835 -1.84095 -0.960484 0.0840346 -0.265345 + -1.8437 0.321936 -1.74858 -0.948369 0.178105 -0.26244 + -1.75033 0.516583 -2.00871 -0.945673 0.0907224 -0.312206 + -1.77306 0.429219 -1.96599 -0.95427 0.0938365 -0.283836 + -1.80858 0.340319 -1.87362 -0.945998 -0.0213889 -0.323466 + -1.72877 0.620289 -2.03794 -0.943108 0.126186 -0.30761 + -1.70205 0.619774 -2.12764 -0.950979 0.10299 -0.291603 + -1.71697 0.522889 -2.10943 -0.94546 0.0895083 -0.313198 + -1.7397 0.435529 -2.06672 -0.942173 0.0140033 -0.334835 + -1.68803 0.731209 -2.11905 -0.956964 0.154947 -0.245381 + -1.66896 0.729781 -2.21098 -0.961123 0.122954 -0.247236 + -1.67234 0.614464 -2.21745 -0.954832 0.0675853 -0.289359 + -1.68726 0.517582 -2.19924 -0.942297 0.055448 -0.330155 + -1.62954 0.79567 -2.3085 -0.916133 0.262274 -0.303172 + -1.64705 0.719534 -2.29283 -0.958629 0.105311 -0.264463 + -1.65044 0.604129 -2.29935 -0.958592 0.0284245 -0.283361 + -1.66056 0.507282 -2.271 -0.944086 0.0219805 -0.328965 + -1.70504 0.443523 -2.15917 -0.937578 -0.00732861 -0.347698 + -1.57527 0.815265 -2.41484 -0.786469 0.463635 -0.408055 + -1.60796 0.770587 -2.39906 -0.883805 0.304206 -0.355453 + -1.62548 0.694363 -2.38344 -0.944528 0.0736135 -0.320073 + -1.63512 0.575657 -2.34903 -0.945393 -0.00628874 -0.325871 + -1.64524 0.478729 -2.32075 -0.939555 -0.0369874 -0.340395 + -1.54246 0.793947 -2.49812 -0.778423 0.444319 -0.443439 + -1.57515 0.749187 -2.48239 -0.854523 0.262989 -0.447915 + -1.59698 0.67167 -2.45753 -0.908288 0.0341742 -0.416948 + -1.60662 0.552963 -2.42312 -0.920288 -0.0260881 -0.390371 + -1.50042 0.854638 -2.50764 -0.755032 0.504357 -0.418987 + -1.50328 0.780374 -2.57541 -0.772967 0.380888 -0.507392 + -1.53243 0.730259 -2.56481 -0.822976 0.207752 -0.528725 + -1.55426 0.652742 -2.53995 -0.869186 0.0190255 -0.494118 + -1.40873 0.913059 -2.60623 -0.707436 0.582214 -0.400701 + -1.46124 0.841065 -2.58493 -0.773094 0.446835 -0.450182 + -1.43613 0.819446 -2.65289 -0.798962 0.360914 -0.481042 + -1.45803 0.764403 -2.64455 -0.795105 0.293892 -0.530504 + -1.48719 0.714293 -2.63396 -0.751387 0.0945052 -0.653059 + -1.35057 0.970934 -2.60107 -0.634369 0.702594 -0.322394 + -1.38363 0.891352 -2.67423 -0.716114 0.510931 -0.475532 + -1.39239 0.812546 -2.72934 -0.74291 0.323901 -0.585809 + -1.41428 0.75751 -2.72101 -0.7928 0.0651492 -0.60599 + -1.28516 1.0287 -2.58513 -0.594154 0.769993 -0.232576 + -1.23603 1.03277 -2.68117 -0.654781 0.69439 -0.298471 + -1.30145 0.975091 -2.69707 -0.664642 0.642797 -0.380873 + -1.33585 0.903728 -2.71987 -0.681349 0.452028 -0.575703 + -1.27319 1.0645 -2.46373 -0.662391 0.733103 -0.154267 + -1.23551 1.07169 -2.57379 -0.714719 0.672558 -0.191943 + -1.20058 1.08523 -2.66683 -0.793243 0.509164 -0.333941 + -1.18471 1.04321 -2.75686 -0.666151 0.649363 -0.366838 + -1.22233 1.10923 -2.49381 -0.729059 0.666569 -0.155428 + -1.21201 1.11193 -2.53548 -0.773572 0.619555 -0.133186 + -1.19013 1.12891 -2.58389 -0.826646 0.554456 -0.0960993 + -1.21363 1.08867 -2.62219 -0.867134 0.446604 -0.220507 + -1.19159 1.14556 -2.48434 -0.731957 0.678813 -0.0587482 + -1.18126 1.14826 -2.52601 -0.815828 0.569804 -0.098732 + -1.17209 1.15831 -2.57441 -0.84457 0.531328 -0.0662785 + -1.18088 1.1429 -2.63392 -0.839225 0.5182 -0.164836 + -1.16783 1.13946 -2.67856 -0.872127 0.381376 -0.306507 + -1.18777 1.14912 -2.45389 -0.690687 0.722938 0.0176511 + -1.16542 1.17131 -2.46853 -0.560574 0.828096 0.00376736 + -1.17085 1.16932 -2.51908 -0.694251 0.719653 -0.0107273 + -1.16168 1.17937 -2.56748 -0.763728 0.645469 -0.00946441 + -1.1616 1.17478 -2.43814 -0.537117 0.841758 0.0543007 + -1.1403 1.18208 -2.45458 -0.148686 0.988614 -0.0231118 + -1.14573 1.18009 -2.50514 -0.300884 0.948428 0.0997637 + -1.14055 1.18732 -2.53386 -0.431706 0.876175 0.214351 + -1.14094 1.20304 -2.60229 -0.572271 0.817286 0.0674576 + -1.13768 1.18233 -2.43142 -0.129509 0.990662 0.0426188 + -1.09447 1.17921 -2.45001 -0.0558176 0.993542 0.0987885 + -1.08928 1.18644 -2.47874 -0.0957059 0.969905 0.223885 + -1.11981 1.21108 -2.56861 -0.168447 0.98564 0.0118046 + -1.13552 1.18105 -2.41161 -0.145418 0.988941 0.0291549 + -1.09184 1.17938 -2.4269 0.109258 0.99367 -0.0261175 + -1.0804 1.20673 -2.55668 0.0681394 0.981004 0.181625 + -0.967913 1.176 -2.52145 0.158523 0.9292 0.333852 + -1.06545 1.21285 -2.59188 0.0449928 0.973577 0.223881 + -1.09838 1.22453 -2.63391 -0.134256 0.981751 0.134686 + -1.13079 1.21216 -2.64528 -0.583304 0.812253 0.00105262 + -1.16283 1.17229 -2.62444 -0.833004 0.548775 -0.0703607 + -0.911718 1.13693 -2.48258 0.675808 0.505001 0.536896 + -0.926335 1.16779 -2.50524 -0.011886 0.735221 0.677723 + -0.990116 1.20637 -2.60766 0.0790973 0.956466 0.28092 + -1.02305 1.21805 -2.64968 0.0225568 0.986295 0.163444 + -0.885069 1.09631 -2.51663 0.889157 0.0688556 0.452392 + -0.884528 1.14908 -2.50443 0.676666 0.2882 0.677542 + -0.899145 1.17995 -2.5271 0.253383 0.832005 0.493522 + -0.948538 1.19817 -2.59145 0.0255572 0.950254 0.310427 + -0.94738 1.22467 -2.66936 0.0601982 0.925018 0.375122 + -0.856004 1.06934 -2.57092 0.861692 0.116377 0.493905 + -0.867959 1.10431 -2.55008 0.87148 -0.0567673 0.487134 + -0.867418 1.15699 -2.53792 0.856337 0.330428 0.396868 + -0.88845 1.18671 -2.54941 0.422347 0.85005 0.314702 + -0.937843 1.20493 -2.61377 0.078891 0.955981 0.282623 + -0.84669 1.11707 -2.58139 0.896595 0.100933 0.431195 + -0.862438 1.16515 -2.58307 0.834094 0.470844 0.287389 + -0.88347 1.19496 -2.5945 0.413193 0.867419 0.277229 + -0.834108 1.13159 -2.62274 0.899935 0.258385 0.351218 + -0.849857 1.17975 -2.62436 0.765879 0.512534 0.38825 + -0.876853 1.2022 -2.62483 0.345542 0.878935 0.328747 + -0.931226 1.21225 -2.64405 0.157951 0.938008 0.308532 + -0.941463 1.25178 -2.72611 0.0463528 0.911807 0.407994 + -0.980939 1.25611 -2.73802 -0.124525 0.955234 0.268369 + -0.986855 1.22901 -2.68127 -0.0860182 0.929966 0.357442 + -0.855869 1.243 -2.7345 0.149777 0.897169 0.415517 + -0.91914 1.26648 -2.76477 0.0567207 0.916672 0.395594 + -1.0015 1.25512 -2.76769 -0.274863 0.961474 -0.00433306 + -1.03613 1.2458 -2.74336 -0.199231 0.950363 0.23899 + -0.880748 1.29581 -2.84857 -0.00167506 0.960918 0.276828 + -0.941826 1.27882 -2.78935 -0.105791 0.914751 0.38992 + -0.882594 1.29958 -2.8801 -0.162982 0.983306 0.0809091 + -0.94672 1.29238 -2.83283 -0.160976 0.960792 0.225757 + -0.988215 1.27832 -2.83389 -0.466197 0.873957 0.137331 + -0.983321 1.26477 -2.79041 -0.400141 0.892953 0.20621 + -0.850377 1.31449 -2.91732 -0.282936 0.919806 0.271854 + -0.877135 1.30123 -2.90596 -0.300999 0.948933 0.0944764 + -0.949167 1.29401 -2.91546 -0.275316 0.96128 -0.0118887 + -0.948567 1.29623 -2.86431 -0.221607 0.974469 0.0360735 + -0.899956 1.31617 -2.97904 -0.428834 0.890801 0.150248 + -0.926715 1.30291 -2.96768 -0.404979 0.914011 0.0239883 + -0.943709 1.29575 -2.94127 -0.333011 0.942891 -0.0077541 + -0.981064 1.27856 -2.9257 -0.675549 0.704626 -0.217107 + -0.980463 1.28078 -2.87453 -0.512733 0.857576 -0.0408408 + -0.909608 1.31262 -3.01408 -0.524969 0.825447 -0.207473 + -0.949326 1.28635 -2.99379 -0.704705 0.666207 -0.244047 + -0.96632 1.27919 -2.96738 -0.744648 0.609156 -0.272815 + -0.986988 1.24749 -2.93948 -0.835253 0.356501 -0.41864 + -1.01219 1.25533 -2.89466 -0.787824 0.568261 -0.237514 + -0.889411 1.29932 -3.05886 -0.526052 0.749129 -0.402584 + -0.913215 1.27735 -3.065 -0.633356 0.477886 -0.608675 + -0.933412 1.29065 -3.02023 -0.669073 0.636878 -0.383051 + -0.956513 1.25574 -3.01736 -0.84996 0.354623 -0.389629 + -0.972244 1.24811 -2.98116 -0.89113 0.307196 -0.333943 + -0.836077 1.34062 -3.04639 -0.736355 0.622526 -0.265035 + -0.879112 1.29481 -3.08344 -0.670374 0.630444 -0.39133 + -0.906593 1.25503 -3.07875 -0.689439 0.168004 -0.704592 + -0.940599 1.25994 -3.04386 -0.77263 0.321629 -0.547355 + -0.9681 1.2197 -3.01414 -0.860102 0.0940931 -0.50137 + -0.828288 1.35158 -3.05058 -0.624178 0.777037 -0.0813382 + -0.867142 1.29652 -3.11001 -0.834016 0.520162 -0.18398 + -0.880425 1.25738 -3.12241 -0.895863 0.120374 -0.427714 + -0.892395 1.25566 -3.09584 -0.837736 0.200515 -0.507929 + -0.848405 1.33885 -3.10093 -0.805847 0.585174 0.0904521 + -0.859353 1.30749 -3.11421 -0.88592 0.463174 -0.0248135 + -0.861481 1.29584 -3.15123 -0.909019 0.257874 -0.327393 + -0.860701 1.25353 -3.15314 -0.847179 -0.0782314 -0.525516 + -0.891311 1.19161 -3.0945 -0.764881 0.317403 -0.560547 + -0.822393 1.35025 -3.13007 -0.335236 0.940074 -0.062271 + -0.842034 1.33802 -3.14948 -0.73097 0.654264 -0.193963 + -0.850533 1.32721 -3.13796 -0.88922 0.425233 -0.168716 + -0.837007 1.30443 -3.1987 -0.866915 0.155506 -0.473578 + -0.836227 1.26211 -3.20061 -0.794169 -0.140755 -0.591172 + -0.807774 1.35332 -3.17719 -0.343641 0.937186 -0.0599436 + -0.827415 1.34108 -3.19659 -0.710348 0.603132 -0.362819 + -0.828508 1.31515 -3.21027 -0.780578 0.211785 -0.588086 + -0.788135 1.35976 -3.19374 -0.344028 0.933357 -0.102414 + -0.803897 1.3462 -3.21505 -0.433188 0.670717 -0.602069 + -0.80499 1.32035 -3.22868 -0.383956 0.26671 -0.883993 + -0.810492 1.2834 -3.23168 -0.423018 -0.0677639 -0.903583 + -0.824198 1.20238 -3.18974 -0.746425 -0.103299 -0.657404 + -0.759647 1.36245 -3.21781 -0.352857 0.757129 -0.549771 + -0.775426 1.33123 -3.23053 -0.314824 0.336035 -0.887675 + -0.780928 1.29429 -3.23354 -0.308369 0.0410189 -0.950382 + -0.798463 1.22376 -3.22077 -0.571091 -0.225615 -0.789274 + -0.734881 1.36517 -3.22991 -0.510718 0.679211 -0.527105 + -0.75066 1.33395 -3.24263 -0.56923 0.372221 -0.733095 + -0.758515 1.28489 -3.24766 -0.628664 0.0801214 -0.773538 + -0.77605 1.21436 -3.23489 -0.650392 -0.0290112 -0.759044 + -0.724005 1.3358 -3.27084 -0.611347 0.357093 -0.706215 + -0.731861 1.28674 -3.27586 -0.746686 0.145284 -0.649116 + -0.740077 1.21133 -3.26985 -0.758034 0.0150473 -0.652041 + -0.703222 1.28398 -3.31608 -0.871041 0.128482 -0.474111 + -0.711438 1.20857 -3.31007 -0.827377 0.0219875 -0.561216 + -0.729951 1.09364 -3.2816 -0.799537 0.024507 -0.600116 + -0.756525 1.13848 -3.25267 -0.71915 -0.0116248 -0.694757 + -0.692139 1.32737 -3.32723 -0.863614 0.367076 -0.345582 + -0.679091 1.27673 -3.37073 -0.768159 -0.0132553 -0.640122 + -0.685683 1.19519 -3.35049 -0.753651 -0.0625606 -0.654291 + -0.704195 1.08025 -3.32202 -0.713854 -0.0462183 -0.698768 + -0.631037 1.25434 -3.39814 -0.489264 -0.235466 -0.839747 + -0.657607 1.23794 -3.38175 -0.477437 -0.192609 -0.857296 + -0.664199 1.15631 -3.36156 -0.161871 -0.204568 -0.965375 + -0.667673 1.07883 -3.34755 -0.0804065 -0.16128 -0.983628 + -0.583594 1.12337 -3.3677 -0.413194 -0.305865 -0.85774 + -0.606508 1.1171 -3.35144 -0.448663 -0.257233 -0.855881 + -0.633078 1.1007 -3.33504 -0.023857 -0.220987 -0.974985 + -0.636552 1.02322 -3.32103 0.0327785 -0.128015 -0.99123 + -0.541689 1.23037 -3.43524 -0.317245 -0.420334 -0.850103 + -0.554759 1.09699 -3.36781 -0.191171 -0.237253 -0.952452 + -0.590393 0.98949 -3.34181 -0.485612 0.0171394 -0.874006 + -0.613308 0.983305 -3.3255 -0.376048 0.0441672 -0.925547 + -0.525923 1.10772 -3.37419 -0.351974 -0.259034 -0.899453 + -0.523938 1.00931 -3.36355 -0.410158 0.0258807 -0.911647 + -0.552774 0.998588 -3.35717 -0.312055 0.0387584 -0.949273 + -0.59256 0.886387 -3.36023 -0.447357 0.20609 -0.870286 + -0.516806 0.905132 -3.3851 -0.440406 0.167995 -0.881941 + -0.554941 0.895571 -3.37554 -0.353946 0.217305 -0.909671 + -0.549588 0.807847 -3.4032 -0.434649 0.27002 -0.859168 + -0.613945 0.801257 -3.36938 -0.465565 0.196425 -0.86294 + -0.648242 0.887851 -3.33037 -0.238582 0.156511 -0.958427 + -0.483313 0.9457 -3.40716 -0.352928 0.129484 -0.926647 + -0.478446 0.842036 -3.41942 -0.343401 0.347352 -0.872595 + -0.511454 0.817408 -3.41276 -0.373646 0.39511 -0.839212 + -0.449075 0.857102 -3.41871 -0.181931 0.337697 -0.923505 + -1.15269 1.18141 -2.66743 -0.871896 0.470712 -0.135007 + -1.153 1.14253 -2.72549 -0.915223 0.211874 -0.342748 + -1.14926 1.09558 -2.74257 -0.82447 0.379249 -0.420022 + -1.13193 1.21032 -2.7013 -0.71007 0.693272 -0.123184 + -1.13785 1.1844 -2.71441 -0.891173 0.360217 -0.275779 + -1.12906 1.16266 -2.76575 -0.89021 0.221673 -0.397979 + -1.12532 1.1158 -2.78279 -0.82497 -0.0490651 -0.563043 + -1.09691 1.11595 -2.82104 -0.805106 0.309681 -0.505868 + -1.09952 1.22269 -2.68993 -0.188756 0.981753 0.0230639 + -1.09078 1.2261 -2.71603 -0.236185 0.96295 0.130168 + -1.1157 1.21894 -2.74322 -0.668408 0.703396 -0.241793 + -1.12163 1.19302 -2.75634 -0.864647 0.383575 -0.324431 + -1.10832 1.18096 -2.80125 -0.784085 0.256464 -0.565187 + -1.01432 1.22146 -2.67579 -0.154738 0.968056 0.197288 + -1.06359 1.23826 -2.73789 -0.251442 0.943282 0.216784 + -1.08851 1.23109 -2.76508 -0.509744 0.844013 -0.166745 + -1.10089 1.21141 -2.79179 -0.643317 0.553659 -0.528777 + -1.05669 1.24472 -2.77308 -0.264462 0.935019 -0.236217 + -1.06907 1.22495 -2.79984 -0.463944 0.800522 -0.379369 + -1.09432 1.18106 -2.81722 -0.684007 0.204102 -0.700341 + -1.11132 1.1158 -2.79879 -0.539026 0.721 -0.435442 + -1.00108 1.25237 -2.77993 -0.484721 0.873235 -0.050064 + -1.06865 1.22229 -2.81203 -0.698494 0.68337 -0.212396 + -1.08073 1.19248 -2.8274 -0.779709 0.356109 -0.515014 + -1.06632 1.19253 -2.8497 -0.78751 0.313911 -0.530365 + -1.05505 1.23363 -2.82227 -0.65206 0.745344 -0.138853 + -1.0373 1.24602 -2.83274 -0.637136 0.760528 -0.12512 + -1.04896 1.19939 -2.87096 -0.808506 0.321565 -0.492864 + -1.04076 1.13677 -2.8959 -0.802866 0.287136 -0.522454 + -1.01994 1.25288 -2.85401 -0.690285 0.692207 -0.21061 + -1.02282 1.22287 -2.90504 -0.844319 0.311836 -0.435756 + -1.01462 1.16025 -2.92998 -0.847699 0.0952491 -0.521856 + -0.98606 1.14559 -2.97619 -0.807124 0.140914 -0.573318 + -1.06735 1.08183 -2.90755 -0.71221 0.557681 -0.426321 + -0.997624 1.21503 -2.94985 -0.843424 0.255487 -0.472612 + -0.983832 1.21207 -2.97794 -0.900273 0.212269 -0.380067 + -1.00083 1.1573 -2.95806 -0.874113 -0.195654 -0.444575 + -0.953329 1.20799 -3.03226 -0.761881 -0.082279 -0.64247 + -0.924861 1.16125 -3.05211 -0.759065 0.0913809 -0.64457 + -0.94158 1.11554 -3.05993 -0.671967 0.478682 -0.565087 + -1.00278 1.09979 -2.98406 -0.715202 0.509992 -0.477906 + -0.933976 1.23772 -3.05755 -0.724362 0.0473782 -0.68779 + -0.905509 1.19098 -3.0774 -0.756984 -0.0196027 -0.653139 + -0.871586 1.18768 -3.12528 -0.819592 -0.0165358 -0.572709 + -0.878753 1.11692 -3.12013 -0.743617 0.354148 -0.56711 + -0.831364 1.13163 -3.1846 -0.693751 0.0361876 -0.719306 + -0.906013 1.05988 -3.15032 -0.511791 0.295604 -0.806652 + -0.96884 1.05849 -3.09012 -0.670227 0.442286 -0.595968 + -1.03934 1.04783 -3.00726 -0.70953 0.480407 -0.515534 + -1.10391 1.02987 -2.93075 -0.700279 0.522208 -0.486732 + -0.792498 1.14151 -3.21772 -0.668955 -0.0403599 -0.742206 + -0.844477 1.01909 -3.16388 -0.435912 0.0641955 -0.897697 + -0.862737 0.911411 -3.17597 -0.314487 0.204616 -0.926947 + -0.924274 0.952194 -3.16241 -0.401295 0.14305 -0.904709 + -0.981885 0.970853 -3.11573 -0.692672 0.171191 -0.700642 + -0.805611 1.02897 -3.19699 -0.673897 0.0307071 -0.738187 + -0.779037 0.984124 -3.22592 -0.685824 0.0585476 -0.725408 + -0.807312 0.8757 -3.21712 -0.561078 0.201036 -0.802979 + -0.888474 0.773687 -3.21123 -0.563203 0.163526 -0.809976 + -0.708009 0.929185 -3.30036 -0.640215 0.0185042 -0.767973 + -0.736285 0.820761 -3.29156 -0.579149 0.206094 -0.788741 + -0.770918 0.732946 -3.30046 -0.565777 0.276 -0.776994 + -0.833049 0.737981 -3.25239 -0.538052 0.232206 -0.810297 + -0.671487 0.927766 -3.3259 -0.305046 0.0231465 -0.952056 + -0.669628 0.802808 -3.33947 -0.467802 0.19936 -0.861055 + -0.704261 0.714906 -3.34842 -0.437763 0.323929 -0.838709 + -0.729677 0.650131 -3.36422 -0.429278 0.544317 -0.720722 + -0.784197 0.647313 -3.32094 -0.656441 0.549434 -0.516922 + -0.791553 0.658465 -3.30266 -0.763638 0.201061 -0.61354 + -0.853684 0.663413 -3.25463 -0.650272 -0.0904644 -0.754296 + -0.824094 0.620744 -3.32732 -0.689668 0.667002 -0.281899 + -0.835219 0.606485 -3.26263 -0.793486 0.461746 -0.396448 + -0.842575 0.617554 -3.2444 -0.680987 0.225742 -0.696633 + -0.881885 0.624614 -3.20543 -0.71574 0.01508 -0.698204 + -0.892993 0.670473 -3.21566 -0.728335 -0.127559 -0.673244 + -0.839508 0.585837 -3.34066 -0.767933 0.434601 -0.470532 + -0.850633 0.571579 -3.27597 -0.699861 0.656442 -0.281565 + -0.891828 0.577886 -3.21909 -0.516642 0.648426 -0.559128 + -0.917453 0.547777 -3.26174 -0.481756 0.711617 -0.511383 + -0.970307 0.566982 -3.19821 -0.398424 0.769379 -0.499313 + -0.930771 0.581369 -3.17973 -0.457876 0.689703 -0.560945 + -0.920827 0.628098 -3.16606 -0.668567 0.0729528 -0.740065 + -0.943938 0.49023 -3.28707 -0.644385 0.410786 -0.644998 + -0.996791 0.50944 -3.22354 -0.632229 0.445744 -0.633719 + -1.05221 0.499862 -3.17235 -0.648677 0.374187 -0.662723 + -1.03412 0.568928 -3.14917 -0.543396 0.784954 -0.297604 + -0.994583 0.583223 -3.13074 -0.406932 0.601124 -0.68779 + -1.01994 0.404621 -3.25099 -0.682462 0.276672 -0.676534 + -1.07535 0.395043 -3.1998 -0.685545 0.259637 -0.68016 + -1.13457 0.383945 -3.14298 -0.694294 0.232501 -0.681101 + -1.11179 0.457364 -3.13654 -0.655355 0.3179 -0.685164 + -1.0937 0.52643 -3.11337 -0.59319 0.365523 -0.717299 + -1.04263 0.322675 -3.25645 -0.703613 0.169594 -0.690049 + -1.10444 0.320445 -3.19199 -0.710552 0.154784 -0.686409 + -1.16366 0.309347 -3.13517 -0.729849 0.084507 -0.678365 + -1.22401 0.308672 -3.0596 -0.772003 0.0621487 -0.632574 + -1.19471 0.371712 -3.08779 -0.707413 0.13203 -0.69436 + -1.13614 0.255278 -3.16932 -0.736031 -0.048465 -0.675211 + -1.19799 0.257929 -3.09751 -0.771599 -0.0537367 -0.633836 + -1.25835 0.25717 -3.02199 -0.825489 -0.0769077 -0.559154 + -1.17071 0.195581 -3.11292 -0.775988 -0.151882 -0.612188 + -1.23257 0.198234 -3.04111 -0.796209 -0.240811 -0.555032 + -1.28577 0.197006 -2.94879 -0.82635 -0.272375 -0.492907 + -1.31288 0.247537 -2.92751 -0.837482 -0.174951 -0.517703 + -1.3159 0.131596 -2.85429 -0.813168 -0.425584 -0.397033 + -1.3605 0.135637 -2.75069 -0.785636 -0.511692 -0.347776 + -1.34029 0.187375 -2.85431 -0.811358 -0.375442 -0.448042 + -1.30803 0.080062 -2.77604 -0.657718 -0.697751 -0.283814 + -1.35263 0.084103 -2.67244 -0.676531 -0.689855 -0.257693 + -1.39589 0.088496 -2.56864 -0.650732 -0.720374 -0.24002 + -1.40652 0.13393 -2.65054 -0.787216 -0.523908 -0.325286 + -1.38632 0.185582 -2.7542 -0.835594 -0.376829 -0.399728 + -1.26687 0.033708 -2.71875 -0.527483 -0.821637 -0.216043 + -1.31176 0.039233 -2.61412 -0.542936 -0.817674 -0.191389 + -1.35501 0.043626 -2.51033 -0.541844 -0.819614 -0.186114 + -1.44616 0.135233 -2.545 -0.71925 -0.622187 -0.309132 + -1.48932 0.129995 -2.44592 -0.627934 -0.70319 -0.3335 + -1.43091 0.182214 -2.65897 -0.802916 -0.458224 -0.381257 + -1.41122 0.246872 -2.74796 -0.851353 -0.282496 -0.442033 + -1.36663 0.250236 -2.84319 -0.859513 -0.20662 -0.467489 + -1.47407 0.177061 -2.55984 -0.774972 -0.505297 -0.379597 + -1.46101 0.248108 -2.6577 -0.842072 -0.32881 -0.42755 + -1.39707 0.331328 -2.82164 -0.842121 -0.163062 -0.514045 + -1.33472 0.319051 -2.90858 -0.829021 -0.0990452 -0.550377 + -1.28097 0.316267 -2.99295 -0.803522 -0.0413684 -0.593836 + -1.50272 0.238276 -2.56287 -0.84679 -0.344521 -0.405281 + -1.44686 0.33257 -2.73139 -0.851905 -0.201614 -0.483332 + -1.37354 0.397148 -2.86464 -0.818817 0.0195779 -0.573721 + -1.31119 0.384784 -2.95163 -0.779952 0.0353195 -0.624842 + -1.25167 0.379392 -3.02109 -0.750007 0.127781 -0.64897 + -1.54141 0.229118 -2.47201 -0.878911 -0.321167 -0.352658 + -1.49748 0.340717 -2.6479 -0.876334 -0.194716 -0.440596 + -1.47845 0.415515 -2.70086 -0.872163 0.0408533 -0.487507 + -1.42783 0.407368 -2.78435 -0.842552 -0.00890266 -0.538541 + -1.53617 0.331558 -2.55704 -0.880085 -0.235715 -0.412175 + -1.52509 0.411422 -2.61477 -0.910456 0.0523829 -0.410276 + -1.45261 0.472207 -2.72205 -0.847584 0.222339 -0.481837 + -1.40063 0.465663 -2.81112 -0.820573 0.182764 -0.541532 + -1.34634 0.455443 -2.89141 -0.772425 0.145223 -0.618279 + -1.57128 0.306542 -2.47251 -0.835394 -0.370571 -0.405948 + -1.5602 0.386404 -2.53023 -0.910678 -0.0614836 -0.408516 + -1.49925 0.468028 -2.63601 -0.869102 0.155199 -0.469655 + -1.43292 0.53521 -2.72537 -0.822372 0.245145 -0.513427 + -1.60575 0.310399 -2.37859 -0.920906 -0.250653 -0.298506 + -1.59543 0.38301 -2.44856 -0.932298 -0.0776528 -0.353257 + -1.54397 0.462983 -2.55687 -0.894162 0.0689012 -0.442411 + -1.52708 0.537637 -2.57338 -0.856026 0.0321084 -0.515935 + -1.48236 0.542768 -2.65247 -0.830761 0.187923 -0.523947 + -1.63363 0.327312 -2.28708 -0.933057 -0.197409 -0.300721 + -1.62331 0.400011 -2.357 -0.941493 -0.10647 -0.319773 + -1.5792 0.459672 -2.47514 -0.914495 0.0123474 -0.404409 + -1.66959 0.336595 -2.19856 -0.898147 -0.253989 -0.358917 + -1.65123 0.417072 -2.28535 -0.920044 -0.146869 -0.363247 + -1.61732 0.461668 -2.39239 -0.919441 -0.0799871 -0.385007 + -1.5685 0.550967 -2.50587 -0.883756 -0.0422909 -0.466032 + -1.6967 0.352746 -2.14414 -0.887069 -0.25059 -0.387702 + -1.67834 0.433221 -2.23093 -0.924063 -0.0900735 -0.371476 + -1.73525 0.356326 -2.06274 -0.904216 -0.195466 -0.379718 + -1.76991 0.348332 -1.97029 -0.923692 -0.111495 -0.366554 + -1.51283 0.639411 -2.60746 -0.747482 -0.0418051 -0.662965 + -1.46558 0.611434 -2.6398 -0.735773 0.0833317 -0.672082 + -1.41613 0.603874 -2.71271 -0.812837 0.249557 -0.526324 + -1.43993 0.686228 -2.66635 -0.701385 -0.130788 -0.700681 + -1.39955 0.667331 -2.71382 -0.806797 0.0380626 -0.589602 + -1.37089 0.599904 -2.79263 -0.806693 0.251944 -0.534576 + -1.38094 0.528752 -2.81439 -0.805135 0.251071 -0.537327 + -1.37391 0.738612 -2.76848 -0.636777 -0.0527125 -0.769244 + -1.32933 0.706247 -2.79182 -0.676599 0.20304 -0.707805 + -1.35431 0.66336 -2.79374 -0.767904 0.325738 -0.55156 + -1.30118 0.653066 -2.85931 -0.724483 0.340029 -0.599587 + -1.31941 0.593228 -2.86727 -0.749196 0.296524 -0.592266 + -1.34461 0.824924 -2.77497 -0.411356 0.40117 -0.818443 + -1.30003 0.792471 -2.79836 -0.618966 0.188194 -0.762538 + -1.2762 0.695953 -2.85739 -0.741885 0.343054 -0.576125 + -1.26662 0.915059 -2.81249 -0.753054 0.313349 -0.578552 + -1.21134 0.912351 -2.875 -0.729015 0.258014 -0.634008 + -1.24475 0.789848 -2.86082 -0.767324 0.187833 -0.613133 + -1.22635 0.705679 -2.92404 -0.747082 0.262215 -0.610828 + -1.23221 0.986335 -2.78975 -0.674975 0.608715 -0.416983 + -1.17101 1.00413 -2.86558 -0.688502 0.55266 -0.469608 + -1.14424 0.938086 -2.94017 -0.725606 0.288729 -0.624605 + -1.1949 0.799579 -2.92748 -0.754747 0.20571 -0.622929 + -1.12351 1.06101 -2.83269 -0.701325 0.593726 -0.394505 + -1.05238 0.960199 -3.03288 -0.726634 0.219754 -0.65093 + -1.10361 0.92803 -2.98836 -0.712459 0.205663 -0.670898 + -1.15427 0.789519 -2.97565 -0.701545 0.205512 -0.682349 + -1.17045 0.712744 -2.98307 -0.696069 0.236238 -0.677997 + -1.24529 0.638654 -2.93015 -0.718489 0.283709 -0.635045 + -0.981962 0.837958 -3.12715 -0.648643 0.086705 -0.756138 + -1.04096 0.835841 -3.07488 -0.676754 0.135161 -0.723696 + -1.09219 0.803672 -3.03036 -0.669838 0.166998 -0.723484 + -1.10836 0.726897 -3.03779 -0.624304 0.219397 -0.749739 + -1.18938 0.64572 -2.98918 -0.69001 0.263171 -0.674261 + -0.92435 0.819293 -3.17382 -0.649633 0.0631261 -0.757623 + -0.928869 0.716082 -3.17825 -0.668462 -0.0290365 -0.74318 + -0.980501 0.730595 -3.13999 -0.596225 0.010625 -0.802747 + -1.03949 0.728479 -3.08773 -0.63342 0.171974 -0.754456 + -1.12758 0.661112 -3.04244 -0.623165 0.247104 -0.742028 + -0.972459 0.64252 -3.12784 -0.49703 0.0221792 -0.86745 + -1.05871 0.662694 -3.09238 -0.507377 0.168821 -0.845025 + -1.14228 0.592368 -3.05418 -0.6203 0.267425 -0.737368 + -1.20409 0.576976 -3.00092 -0.681562 0.267929 -0.680946 + -1.26352 0.578902 -2.93805 -0.708927 0.284702 -0.645265 + -1.08084 0.603397 -3.09528 -0.462074 0.24442 -0.852494 + -1.15515 0.515401 -3.07226 -0.618284 0.259328 -0.741939 + -1.21596 0.512611 -3.01483 -0.687406 0.257678 -0.679026 + -1.2754 0.514542 -2.95198 -0.711823 0.238095 -0.660771 + -1.32947 0.522163 -2.88898 -0.753782 0.249189 -0.608044 + -1.17193 0.445132 -3.08136 -0.670714 0.267724 -0.691712 + -1.23275 0.442429 -3.02388 -0.703146 0.21641 -0.677312 + -1.29227 0.447909 -2.95436 -0.739324 0.196686 -0.643984 + -2.07631 1.05829 -0.619383 -0.984776 -0.161989 0.0630468 + -2.08462 1.14167 -0.528789 -0.972802 -0.215204 0.0856987 + -2.09766 1.23015 -0.449251 -0.96778 -0.24505 0.0579026 + -2.07183 1.16429 -0.40337 -0.90215 -0.373365 0.216157 + -2.09548 1.25584 -0.32634 -0.904996 -0.386754 0.17721 + -2.1209 1.32137 -0.369243 -0.96768 -0.251537 0.0180005 + -2.1412 1.40637 -0.285263 -0.964817 -0.26175 -0.0248056 + -2.07553 1.27638 -0.230928 -0.778319 -0.533494 0.331065 + -2.12035 1.37266 -0.167875 -0.831185 -0.492366 0.258278 + -2.11872 1.34714 -0.246282 -0.930117 -0.355499 0.0922128 + -2.15307 1.44336 -0.175734 -0.923882 -0.376226 0.0699626 + -2.17486 1.4999 -0.209276 -0.957722 -0.281004 -0.0616842 + -2.09296 1.37722 -0.106179 -0.686569 -0.557314 0.46693 + -2.11209 1.46856 -0.032785 -0.646813 -0.556234 0.521764 + -2.1547 1.46887 -0.097327 -0.826761 -0.481316 0.291204 + -2.18874 1.57082 -0.033902 -0.766564 -0.524893 0.369955 + -2.18673 1.53689 -0.099744 -0.870768 -0.469572 0.145828 + -2.04395 1.43658 0.003601 -0.425691 -0.636428 0.643232 + -2.03494 1.51832 0.092234 -0.385641 -0.612214 0.690272 + -2.14612 1.57059 0.03069 -0.668946 -0.510348 0.540422 + -1.97635 1.39651 -0.013794 0.0907708 -0.70271 0.705663 + -1.96734 1.47825 0.074839 0.181619 -0.708776 0.681652 + -2.04287 1.60776 0.161511 -0.408368 -0.500057 0.763662 + -2.15405 1.65995 0.099917 -0.546278 -0.586471 0.598024 + -2.2366 1.67118 0.022866 -0.638983 -0.645383 0.418547 + -1.92104 1.44646 -0.019103 0.780813 -0.482862 0.396455 + -1.89298 1.52745 0.050015 0.705753 -0.604032 0.370214 + -1.93928 1.55924 0.143957 0.207741 -0.688047 0.695295 + -1.98979 1.6911 0.231766 -0.283109 -0.594299 0.752767 + -1.90639 1.358 -0.168095 0.948273 -0.205625 0.24186 + -1.89158 1.44598 -0.106472 0.943949 -0.296139 0.145811 + -1.87462 1.52017 -0.039377 0.914213 -0.394759 0.0915382 + -1.85245 1.60663 0.108876 0.704914 -0.629211 0.327399 + -1.8862 1.64258 0.21421 0.276049 -0.725521 0.63041 + -1.86913 1.54697 -0.119201 0.973441 -0.0658189 -0.21927 + -1.84762 1.61518 -0.058341 0.937781 -0.141336 -0.317161 + -1.83409 1.59935 0.019485 0.901535 -0.432666 -0.00585471 + -1.79353 1.68774 0.086182 0.903663 -0.426788 -0.0352704 + -1.80712 1.67712 0.149782 0.770121 -0.584024 0.256575 + -1.90366 1.58585 -0.184941 0.900212 0.304796 -0.310995 + -1.88215 1.65406 -0.124082 0.734553 0.357577 -0.576689 + -1.80707 1.70358 0.008356 0.879021 -0.0303957 -0.475814 + -1.96656 1.69425 -0.164886 0.815085 0.494977 -0.301056 + -1.98548 1.76989 -0.0955 0.587809 0.688393 -0.424966 + -1.90107 1.7297 -0.054687 0.416509 0.642809 -0.642897 + -1.85621 1.7471 -0.020024 0.479751 0.468105 -0.742103 + -1.75682 1.79571 0.071374 0.860873 -0.0825552 -0.502078 + -2.04625 1.81044 -0.084535 0.29823 0.796599 -0.525822 + -2.00417 1.89569 0.025604 0.345333 0.624215 -0.700786 + -1.95931 1.91309 0.060267 0.320098 0.539902 -0.778488 + -1.80597 1.83923 0.042994 0.417825 0.411959 -0.809761 + -2.01202 1.78593 -0.505692 0.647339 0.745688 0.157802 + -2.02144 1.80659 -0.573062 0.685061 0.658367 0.311841 + -2.05701 1.81152 -0.487006 0.605798 0.768393 0.206351 + -2.05367 1.84205 -0.544286 0.817012 0.443929 0.367991 + -2.01739 1.83902 -0.609851 0.801432 0.276919 0.530116 + -2.04962 1.87449 -0.581074 0.807571 0.346906 0.476953 + -2.04145 1.94214 -0.633849 0.508707 0.297805 0.807793 + -1.97133 1.92451 -0.662711 0.664323 0.110262 0.739268 + -1.99539 2.02754 -0.686759 0.450854 0.240487 0.859591 + -1.86546 2.21637 -0.792627 0.671205 0.0809145 0.736842 + -1.86537 2.28969 -0.80982 0.100236 0.135708 0.985665 + -1.97007 2.21519 -0.731793 0.441884 0.0308854 0.89654 + -2.00125 2.13916 -0.723096 -0.909366 0.200364 0.364564 + -1.94335 2.34968 -0.749733 0.602343 -0.0633986 0.795716 + -1.9866 2.29243 -0.724362 0.495295 -0.00991002 0.868668 + -1.92042 2.52582 -0.743409 0.632544 -0.0129348 0.774417 + -1.96367 2.46847 -0.718087 -0.522958 0.087648 0.84784 + -1.87463 2.72542 -0.804338 0.70776 0.274569 0.650913 + -1.93079 2.6463 -0.737493 0.108039 0.0688432 0.99176 + -1.93692 2.63864 -0.741815 -0.967517 0.129701 0.217 + -1.94728 2.53942 -0.740764 -0.942284 0.120314 -0.312449 + -1.98055 2.3106 -0.758235 -0.964562 0.107045 -0.241166 + -1.9866 2.29243 -0.724362 -0.987131 0.106807 -0.119016 + -1.90132 2.76373 -0.816285 0.528351 0.56562 0.633181 + -1.9324 2.7268 -0.741515 -0.133289 0.598016 0.790323 + -1.93854 2.71913 -0.745837 -0.955142 0.192124 0.225371 + -2.14399 1.89124 -0.011488 0.426955 0.672227 -0.604831 + -2.06494 1.93633 0.036612 0.195836 0.646167 -0.737643 + -1.93989 1.94675 0.091568 0.284015 0.614345 -0.73615 + -2.15986 1.95106 0.0341 0.269388 0.585078 -0.764927 + -2.0808 1.99615 0.082202 0.248486 0.50442 -0.826931 + -2.19351 1.9624 0.028866 0.198285 0.533191 -0.822429 + -2.10963 2.04865 0.097671 0.238839 0.542194 -0.805594 + -2.06721 2.07636 0.125269 0.213802 0.715921 -0.664639 + -2.03838 2.02386 0.109799 0.271657 0.449616 -0.85091 + -2.23917 1.92694 0.002679 -0.000378154 0.505122 -0.863048 + -2.21586 2.04588 0.063268 0.0890033 0.639748 -0.763414 + -2.14329 2.05998 0.092438 0.250808 0.672469 -0.696334 + -2.15972 2.09474 0.138641 0.0354119 0.920513 -0.389104 + -2.24964 1.89447 -0.013284 -0.0940971 0.614787 -0.78306 + -2.32536 1.91211 -0.01503 -0.274091 0.4257 -0.862354 + -2.26152 2.01042 0.037081 -0.0305131 0.537276 -0.842854 + -2.28514 2.03824 0.065703 -0.320131 0.729777 -0.604103 + -2.23229 2.08063 0.109474 -0.131286 0.898211 -0.419501 + -2.30144 1.86929 -0.036272 -0.147104 0.603321 -0.783814 + -2.33583 1.87963 -0.030984 -0.497391 0.502262 -0.707344 + -2.35673 1.84625 -0.008958 -0.96642 -0.193908 -0.168619 + -2.34898 1.93992 0.013602 -0.632048 0.451421 -0.629869 + -2.25277 1.80374 -0.126729 -0.744028 0.255098 -0.617533 + -2.31679 1.83824 -0.046093 -0.406846 0.181152 -0.895355 + -2.35118 1.84867 -0.040755 -0.740287 0.0530725 -0.670193 + -2.20712 1.69775 -0.19395 -0.83829 -0.0221298 -0.544775 + -2.28134 1.80294 -0.084555 -0.80772 -0.123241 -0.576541 + -2.3157 1.79518 -0.041913 -0.812506 -0.373635 -0.447471 + -2.32125 1.79285 -0.010065 -0.840183 -0.535749 -0.0840558 + -2.28025 1.75988 -0.080374 -0.887256 -0.211078 -0.41015 + -2.28498 1.73488 -0.015069 -0.882903 -0.461293 -0.0876999 + -2.33655 1.81891 0.081797 -0.830046 -0.508139 0.229823 + -2.25308 1.68695 -0.118641 -0.922409 -0.241731 -0.301209 + -2.23459 1.63726 -0.042976 -0.866257 -0.491669 0.0886564 + -2.30028 1.76094 0.076794 -0.746337 -0.569201 0.344952 + -2.21773 1.74971 0.153845 -0.494162 -0.635582 0.59316 + -2.34528 1.85868 0.128905 -0.84888 -0.431524 0.305269 + -2.20269 1.58923 -0.146599 -0.944752 -0.300742 -0.130379 + -2.14133 1.44162 -0.358728 -0.979075 -0.0336256 -0.200702 + -1.98942 1.75695 0.288917 -0.356772 -0.656255 0.664864 + -2.21737 1.81556 0.210996 -0.427094 -0.604982 0.672003 + -2.31566 1.8655 0.189291 -0.664597 -0.516207 0.540222 + -2.35617 1.95194 0.178382 -0.937982 -0.170715 0.301738 + -2.36546 1.88611 0.038201 -0.987757 -0.155769 0.00846897 + -1.8863 1.73845 0.328145 -0.0158764 -0.745407 0.666421 + -2.03039 1.82377 0.333367 -0.381333 -0.563144 0.733113 + -2.14866 1.86319 0.301299 -0.403642 -0.547401 0.733093 + -2.24695 1.91313 0.279594 -0.500256 -0.445701 0.742358 + -2.32655 1.95876 0.238766 -0.76628 -0.176209 0.617872 + -1.8458 1.74 0.305064 0.52681 -0.688237 0.498799 + -1.86725 1.78376 0.373066 0.111726 -0.563128 0.818782 + -1.92727 1.80528 0.372597 -0.278403 -0.514301 0.811163 + -1.94441 1.85603 0.390103 -0.216515 -0.262564 0.940309 + -2.0185 1.88934 0.374807 -0.322445 -0.281857 0.903651 + -1.84087 1.71298 0.255067 0.651502 -0.63517 0.414853 + -1.76504 1.81136 0.280262 0.792631 -0.509071 0.335533 + -1.82675 1.78531 0.349985 0.555052 -0.631462 0.541454 + -1.81491 1.82177 0.372629 0.527454 -0.464782 0.711175 + -1.88439 1.83451 0.390573 -0.0563916 -0.312353 0.948291 + -1.76011 1.78434 0.230264 0.864915 -0.42226 0.271326 + -1.74652 1.79497 0.166664 0.908399 -0.416978 0.0306689 + -1.75319 1.84774 0.302856 0.777004 -0.480524 0.406646 + -1.73164 1.84857 0.10061 0.858913 0.21563 -0.464513 + -1.72133 1.84783 0.1959 0.911492 -0.410839 0.0198552 + -1.71044 1.88591 0.258945 0.894286 -0.39135 0.217018 + -1.73118 1.87639 0.295633 0.789309 -0.46938 0.395821 + -1.79859 1.8846 0.394619 0.534401 -0.330996 0.777726 + -1.78655 1.87289 0.074295 0.450527 0.632341 -0.630214 + -1.72356 1.85728 0.131326 0.922665 0.0418918 -0.383321 + -1.71488 1.87816 0.156571 0.917837 0.0483912 -0.393997 + -1.71266 1.8687 0.221145 0.901692 -0.422774 0.0906235 + -1.77846 1.88169 0.105061 0.479172 0.764593 -0.431034 + -1.81352 1.9195 0.12256 0.322027 0.547946 -0.772045 + -1.75341 1.9167 0.142605 0.43893 0.414666 -0.797115 + -1.69585 1.93395 0.202742 0.924585 0.208427 -0.318907 + -1.69363 1.95115 0.240542 0.930307 0.366312 -0.0185843 + -1.97494 1.98465 0.109118 0.33233 0.565857 -0.754561 + -1.92688 2.02509 0.144879 0.284258 0.599303 -0.748353 + -1.86677 2.02229 0.164923 0.340009 0.709329 -0.617451 + -1.73438 1.97249 0.188775 0.5721 0.6472 -0.503819 + -1.7512 2.00011 0.235748 0.509114 0.857031 -0.0793692 + -1.99032 2.0643 0.14556 0.34963 0.712652 -0.608183 + -1.99179 2.08462 0.19257 0.282208 0.925875 -0.251225 + -1.88359 2.0499 0.211896 0.37028 0.89876 -0.234783 + -1.76364 1.99576 0.302883 0.515872 0.823652 0.235529 + -1.70607 1.9468 0.307678 0.897687 0.252079 0.361406 + -2.06867 2.09668 0.17228 0.154743 0.954999 -0.253045 + -1.97827 2.09008 0.273111 0.201643 0.971959 0.120974 + -1.87008 2.05545 0.292487 0.39163 0.913235 0.112371 + -1.88752 2.03961 0.350326 0.241186 0.790539 0.562918 + -1.78108 1.97992 0.360723 0.487772 0.628816 0.605532 + -2.10191 2.10864 0.233761 0.0295365 0.996133 0.0827478 + -2.11664 2.09202 0.285748 -0.130634 0.849911 0.510476 + -1.99301 2.07346 0.325098 0.0538973 0.842256 0.536377 + -2.19296 2.1067 0.200123 -0.143025 0.98971 0.00429181 + -2.21547 2.09059 0.247028 -0.303141 0.843637 0.44315 + -2.12665 2.04664 0.326351 -0.25651 0.524742 0.811695 + -2.02307 2.03341 0.363666 -0.129289 0.522003 0.843088 + -1.91758 1.99965 0.388943 -0.00327734 0.49643 0.86807 + -2.28133 2.08254 0.160965 -0.38893 0.914944 -0.107751 + -2.30384 2.06635 0.20782 -0.586204 0.755072 0.293651 + -2.30936 2.03195 0.244401 -0.672984 0.459557 0.579569 + -2.22548 2.04512 0.287581 -0.382665 0.570306 0.726855 + -2.33417 2.04015 0.1172 -0.62313 0.714879 -0.317265 + -2.35243 2.02888 0.146103 -0.850768 0.52551 -0.00573434 + -2.35795 1.99449 0.182684 -0.938336 0.177983 0.296392 + -2.30199 1.99562 0.269721 -0.649089 0.103014 0.753705 + -2.36724 1.92857 0.042453 -0.96268 0.182775 -0.1996 + -1.85923 2.80544 -0.885537 -0.0566575 0.92097 0.385491 + -1.86198 2.8063 -0.896229 -0.517549 0.834665 -0.188356 + -1.88113 2.77837 -0.880441 -0.887676 0.347976 -0.301568 + -1.86775 2.79455 -0.86387 -0.756149 0.653669 -0.0309293 + -1.90746 2.75606 -0.820608 -0.904711 0.358815 -0.229673 + -1.90132 2.76373 -0.816285 -0.760978 0.645608 -0.0640537 + -1.84789 2.75571 -0.943404 -0.840199 0.151155 -0.520786 + -1.88434 2.69789 -0.875845 -0.907581 0.0217136 -0.419316 + -1.91067 2.6755 -0.816061 -0.931754 0.0461627 -0.360143 + -1.92103 2.57619 -0.81506 -0.933255 0.123665 -0.337255 + -1.96416 2.38154 -0.780912 -0.945125 0.137365 -0.29643 + -1.90304 2.55966 -0.865218 -0.903307 0.130846 -0.408553 + -1.94617 2.36492 -0.83112 -0.907722 0.112067 -0.404328 + -1.94017 2.29025 -0.862401 -0.903977 0.083575 -0.419334 + -1.96563 2.17909 -0.822059 -0.910114 0.0404193 -0.412383 + -1.9952 2.15733 -0.756969 -0.959982 0.0516612 -0.275255 + -2.21811 2.00879 0.3129 -0.395003 0.247979 0.884579 + -2.22239 1.94999 0.310547 -0.441301 -0.206085 0.873374 + -2.13677 1.92867 0.342689 -0.371068 -0.23758 0.897699 + -2.13249 1.98755 0.345092 -0.317924 0.147624 0.936553 + -2.0289 1.97432 0.382406 -0.221898 0.126425 0.966839 + -1.95482 1.94101 0.397702 -0.213087 0.0210479 0.976806 + -1.92943 1.95493 0.405201 -0.24607 0.181724 0.952064 + -1.83084 1.95588 0.403753 0.275392 0.424646 0.862459 + -1.85901 1.84842 0.398071 0.0344284 -0.398228 0.91664 + -1.84269 1.91125 0.420061 0.107803 -0.0448686 0.993159 + -1.77658 1.91316 0.387345 0.631121 -0.0633982 0.773089 + -1.72682 1.93728 0.344364 0.776531 0.065288 0.626688 + 0.265668 1.59394 -3.44147 -0.667019 0.166743 -0.726142 + 0.284447 1.53902 -3.46994 -0.563875 0.0938647 -0.820508 + 0.26512 1.48501 -3.45027 -0.794046 -0.0651636 -0.604355 + 0.252745 1.5134 -3.43101 -0.970392 -0.0302874 -0.239628 + 0.304657 1.58899 -3.46638 -0.221908 0.303297 -0.926697 + 0.314833 1.51845 -3.48435 -0.220254 0.0978511 -0.970522 + 0.293155 1.47025 -3.46951 -0.519442 -0.0479388 -0.85316 + 0.346372 1.58946 -3.46489 0.107909 0.325204 -0.939467 + 0.356547 1.51892 -3.48286 0.107521 0.208874 -0.972014 + 0.356556 1.43658 -3.49537 -0.064939 0.0445557 -0.996894 + 0.323541 1.44968 -3.48392 -0.390399 -0.0312012 -0.920117 + 0.373982 1.66906 -3.42415 0.264824 0.45265 -0.851456 + 0.387188 1.59292 -3.45548 0.297383 0.343534 -0.890813 + 0.392478 1.51526 -3.47722 0.283267 0.214176 -0.93482 + 0.36635 1.72855 -3.39056 0.291239 0.554463 -0.779584 + 0.413459 1.67197 -3.40473 0.501149 0.410395 -0.761856 + 0.421977 1.58169 -3.44311 0.534741 0.319278 -0.782377 + 0.427267 1.50404 -3.46484 0.518054 0.172092 -0.837857 + 0.392487 1.43292 -3.48973 0.328875 0.0593423 -0.942507 + 0.342152 1.73389 -3.39425 0.0705888 0.584627 -0.808226 + 0.369377 1.76876 -3.3558 0.299537 0.925098 -0.233389 + 0.393999 1.76282 -3.34131 0.171309 0.970884 -0.167442 + 0.405828 1.73146 -3.37114 0.367337 0.605201 -0.706255 + 0.319147 1.76774 -3.36248 -0.363273 0.88824 -0.281182 + 0.345179 1.7741 -3.35949 0.0515844 0.981405 -0.184885 + 0.337551 1.76806 -3.34796 -0.201914 0.661603 0.722158 + 0.363175 1.76019 -3.33739 -0.215014 0.620562 0.754103 + 0.337265 1.70187 -3.33755 -0.347902 0.210406 0.913615 + 0.387798 1.75425 -3.32289 -0.319804 0.552437 0.769765 + 0.418806 1.75845 -3.31183 -0.164774 0.642272 0.748557 + 0.419446 1.76383 -3.32485 0.134831 0.987542 -0.0811213 + 0.431275 1.73247 -3.35469 0.486535 0.577384 -0.655677 + 0.332826 1.64955 -3.32398 -0.425334 0.293407 0.856156 + 0.397704 1.70673 -3.31366 -0.351565 0.176201 0.919432 + 0.428712 1.71092 -3.3026 -0.311634 0.164589 0.935839 + 0.452985 1.74807 -3.30283 0.393021 0.548492 0.738032 + 0.453626 1.75346 -3.31585 0.603686 0.793128 -0.0806897 + 0.298838 1.64784 -3.34424 -0.609866 0.173755 0.773222 + 0.346895 1.59923 -3.29364 -0.383659 0.251729 0.888503 + 0.377439 1.60125 -3.28521 -0.306163 0.253198 0.91769 + 0.393265 1.6544 -3.30009 -0.326688 0.302077 0.895558 + 0.437086 1.67696 -3.29285 -0.316021 0.238812 0.918205 + 0.312908 1.59752 -3.31389 -0.642238 0.142921 0.753063 + 0.352689 1.52951 -3.28365 -0.419835 0.000676443 0.9076 + 0.383233 1.53154 -3.27522 -0.225939 -0.0242077 0.973841 + 0.407894 1.59371 -3.27293 -0.236023 0.191441 0.952703 + 0.423719 1.64686 -3.28781 -0.264426 0.294095 0.91847 + 0.316661 1.5396 -3.31073 -0.707172 -0.0350756 0.706171 + 0.362191 1.44278 -3.28154 -0.298055 -0.0522237 0.953119 + 0.398662 1.44285 -3.2826 -0.069011 -0.0751676 0.99478 + 0.423191 1.45776 -3.27781 0.289214 -0.189953 0.938229 + 0.407762 1.54644 -3.27043 -0.177209 -0.0131404 0.984086 + 0.326163 1.45287 -3.30861 -0.719861 -0.0786141 0.689652 + 0.333676 1.38795 -3.30941 -0.705045 -0.130222 0.697103 + 0.367138 1.38005 -3.28699 -0.276767 -0.156631 0.948086 + 0.403609 1.38012 -3.28805 0.349415 -0.208838 0.913398 + 0.289828 1.47013 -3.35786 -0.834231 -0.104086 0.541502 + 0.29734 1.40521 -3.35865 -0.844975 -0.130331 0.518681 + 0.303945 1.36472 -3.36017 -0.845094 -0.0826799 0.528186 + 0.333694 1.3502 -3.31774 -0.718814 -0.0813498 0.690426 + 0.367156 1.34229 -3.29532 -0.275882 -0.129906 0.952373 + 0.254886 1.56206 -3.39721 -0.930224 -0.05773 0.362424 + 0.268812 1.46739 -3.39265 -0.892278 -0.125632 0.433656 + 0.275158 1.41654 -3.39595 -0.901246 -0.144495 0.408505 + 0.256625 1.47467 -3.42362 -0.991866 -0.126913 0.00975066 + 0.26297 1.42381 -3.42693 -0.988636 -0.141041 0.052024 + 0.271304 1.38229 -3.42404 -0.987434 -0.136579 0.0794979 + 0.281762 1.37604 -3.39747 -0.904888 -0.0941318 0.41511 + 0.267812 1.42086 -3.44995 -0.841517 -0.112645 -0.528355 + 0.276146 1.37933 -3.44706 -0.878157 -0.125465 -0.461627 + 0.281624 1.29572 -3.43696 -0.912371 -0.112645 -0.393562 + 0.278449 1.29525 -3.41344 -0.991527 -0.0594747 0.115489 + 0.288907 1.28901 -3.38686 -0.895488 -0.00221955 0.44508 + 0.295847 1.40611 -3.46918 -0.546644 -0.06583 -0.834773 + 0.290122 1.36875 -3.46237 -0.644234 -0.0933342 -0.759112 + 0.295601 1.28513 -3.45226 -0.645878 -0.131112 -0.752098 + 0.323849 1.39324 -3.48339 -0.4014 -0.0628578 -0.913743 + 0.318124 1.35588 -3.47658 -0.413183 -0.123718 -0.902205 + 0.320655 1.28102 -3.46597 -0.406774 -0.140159 -0.902713 + 0.305931 1.16446 -3.44053 -0.660656 -0.161543 -0.733102 + 0.356864 1.38014 -3.49484 -0.126362 -0.104413 -0.986474 + 0.355104 1.34286 -3.48744 -0.124435 -0.162046 -0.978906 + 0.357635 1.26799 -3.47682 -0.100965 -0.154143 -0.982876 + 0.364915 1.16385 -3.46031 -0.0166002 -0.170351 -0.985244 + 0.330986 1.16034 -3.45424 -0.328372 -0.167938 -0.929499 + 0.390251 1.37789 -3.49104 0.323731 -0.107509 -0.940021 + 0.388491 1.34061 -3.48364 0.322521 -0.169001 -0.931353 + 0.388798 1.26766 -3.47239 0.336895 -0.133383 -0.932046 + 0.424454 1.38712 -3.47086 0.637503 -0.106994 -0.762982 + 0.41784 1.34853 -3.46632 0.644539 -0.161419 -0.747338 + 0.418147 1.27557 -3.45507 0.674683 -0.102163 -0.731003 + 0.420471 1.16378 -3.43851 0.69635 -0.123519 -0.706994 + 0.396078 1.16351 -3.45588 0.369856 -0.156008 -0.915897 + 0.42669 1.44214 -3.46954 0.57362 0.0147284 -0.818989 + 0.450724 1.40273 -3.44467 0.809558 -0.13664 -0.570917 + 0.44411 1.36414 -3.44013 0.819897 -0.167748 -0.547384 + 0.437236 1.28207 -3.43037 0.847101 -0.10886 -0.520163 + 0.451868 1.50135 -3.44542 0.75674 0.145404 -0.63734 + 0.451292 1.43946 -3.45012 0.746997 -0.0444644 -0.663338 + 0.473075 1.42713 -3.40846 0.977177 -0.124535 -0.172094 + 0.463289 1.38508 -3.40906 0.967762 -0.176429 -0.179751 + 0.456415 1.303 -3.3993 0.982106 -0.107288 -0.154783 + 0.452003 1.56124 -3.42383 0.773725 0.237624 -0.587269 + 0.473642 1.46386 -3.41391 0.960039 0.0136139 -0.279535 + 0.473777 1.52375 -3.39233 0.955927 0.0753839 -0.283763 + 0.468309 1.42442 -3.36681 0.957288 -0.169204 0.234457 + 0.443485 1.65151 -3.38545 0.708183 0.304848 -0.636824 + 0.467549 1.61552 -3.37163 0.90485 0.194828 -0.378534 + 0.443239 1.71002 -3.36003 0.648642 0.379142 -0.659935 + 0.467302 1.67403 -3.34621 0.90668 0.181422 -0.380812 + 0.471733 1.65052 -3.32651 0.999425 0.0229898 0.024907 + 0.47438 1.60094 -3.34175 0.998348 0.0525115 0.0233387 + 0.46559 1.73101 -3.32119 0.900692 0.383895 -0.203416 + 0.470021 1.70751 -3.30149 0.930142 0.184118 0.317704 + 0.460963 1.61601 -3.28124 0.860879 -0.0208798 0.508381 + 0.463609 1.56642 -3.29648 0.915187 -0.0595862 0.398601 + 0.480608 1.50917 -3.36245 0.992185 -0.121239 -0.0295068 + 0.461359 1.71412 -3.29308 0.361682 0.314186 0.877766 + 0.452301 1.62262 -3.27282 0.280367 0.15948 0.946552 + 0.438802 1.54524 -3.26529 0.335463 -0.0716281 0.939326 + 0.454815 1.52576 -3.28556 0.818003 -0.145224 0.55658 + 0.471814 1.4685 -3.35154 0.966979 -0.154681 0.202545 + 0.438935 1.59252 -3.26779 0.0108353 0.129298 0.991547 + 0.439204 1.43827 -3.29809 0.751344 -0.257961 0.607403 + 0.435699 1.3942 -3.31337 0.788243 -0.238693 0.567185 + 0.43054 1.35643 -3.32155 0.782094 -0.155106 0.603549 + 0.458523 1.38237 -3.36741 0.946408 -0.164189 0.278126 + 0.450909 1.30012 -3.36699 0.942797 -0.0712561 0.325664 + 0.398451 1.34236 -3.29623 0.354706 -0.16248 0.920752 + 0.397157 1.26612 -3.30336 0.329467 -0.0687138 0.941663 + 0.422927 1.27418 -3.32113 0.735323 -0.0603398 0.675025 + 0.365862 1.26606 -3.30244 -0.204552 -0.0618665 0.976899 + 0.367918 1.14997 -3.30638 -0.119159 -0.00973971 0.992827 + 0.395067 1.15279 -3.31141 0.388679 -0.030788 0.920859 + 0.420837 1.16085 -3.32918 0.681105 -0.0179885 0.731965 + 0.33703 1.26882 -3.31568 -0.632024 -0.0120533 0.774855 + 0.339085 1.15273 -3.31962 -0.469592 0.00475506 0.882871 + 0.344819 1.04559 -3.31039 -0.377088 0.0431288 0.925173 + 0.367929 1.04705 -3.30553 -0.0184225 0.0426845 0.998919 + 0.395078 1.04987 -3.31056 0.340251 0.0451459 0.93925 + 0.307281 1.28333 -3.3581 -0.828768 0.0211548 0.559192 + 0.311948 1.15213 -3.33605 -0.710893 0.0245632 0.702872 + 0.317682 1.04499 -3.32682 -0.682288 0.014202 0.730945 + 0.293574 1.15781 -3.36481 -0.925671 0.00561856 0.378289 + 0.303511 1.04582 -3.34643 -0.916007 -0.047497 0.39834 + 0.329822 0.954448 -3.31498 -0.676156 -0.00282454 0.736753 + 0.348894 0.95487 -3.30343 -0.371924 0.0454988 0.927148 + 0.372004 0.956326 -3.29858 -0.0154366 0.0687572 0.997514 + 0.287422 1.16036 -3.39442 -0.997203 -0.065219 0.0364992 + 0.297359 1.04837 -3.37604 -0.992668 -0.120871 0.000150586 + 0.311327 0.95707 -3.3554 -0.987401 -0.158198 0.00336663 + 0.31565 0.955279 -3.33459 -0.915218 -0.0813393 0.394663 + 0.290597 1.16082 -3.41794 -0.921012 -0.134551 -0.365558 + 0.301268 1.051 -3.39826 -0.90197 -0.188114 -0.388668 + 0.315236 0.959704 -3.37762 -0.890033 -0.23234 -0.39225 + 0.328431 0.873081 -3.3548 -0.886415 -0.254119 -0.386901 + 0.325983 0.871432 -3.34088 -0.981615 -0.190785 -0.00569755 + 0.316602 1.05464 -3.42085 -0.638082 -0.236829 -0.732641 + 0.326013 0.962261 -3.3935 -0.63212 -0.281234 -0.722033 + 0.339208 0.875641 -3.37068 -0.62173 -0.300516 -0.723285 + 0.337573 1.05768 -3.43306 -0.308942 -0.251902 -0.917115 + 0.346984 0.965303 -3.4057 -0.295352 -0.300099 -0.907032 + 0.352342 0.877546 -3.37832 -0.298787 -0.310867 -0.902268 + 0.351308 0.793622 -3.34521 -0.585632 -0.423575 -0.6911 + 0.371502 1.06119 -3.43913 0.0309075 -0.247693 -0.968346 + 0.37083 0.967765 -3.40997 0.0277507 -0.296955 -0.954488 + 0.376188 0.880008 -3.38259 0.0347298 -0.304417 -0.951905 + 0.376782 0.796802 -3.35506 0.035141 -0.412539 -0.910262 + 0.364442 0.795528 -3.35285 -0.263673 -0.424739 -0.866068 + 0.39633 1.06279 -3.43432 0.387835 -0.228971 -0.892836 + 0.395658 0.969371 -3.40516 0.391539 -0.274302 -0.878326 + 0.391738 0.881014 -3.37958 0.38545 -0.279704 -0.879314 + 0.392332 0.79781 -3.35205 0.384028 -0.387575 -0.838039 + 0.382539 0.754393 -3.32904 0.181054 -0.791563 -0.58365 + 0.420724 1.06306 -3.41696 0.734404 -0.181368 -0.654031 + 0.412802 0.969561 -3.39296 0.723538 -0.225647 -0.652362 + 0.408883 0.881203 -3.36738 0.727975 -0.226399 -0.647144 + 0.401204 0.797906 -3.34574 0.695371 -0.345796 -0.629988 + 0.432571 1.06185 -3.3955 0.940653 -0.13046 -0.313293 + 0.424649 0.968343 -3.3715 0.941315 -0.152493 -0.301117 + 0.416303 0.880442 -3.35394 0.938142 -0.159108 -0.30753 + 0.408624 0.797144 -3.3323 0.912442 -0.283093 -0.295479 + 0.391411 0.754491 -3.32273 0.561809 -0.759451 -0.328031 + 0.439561 1.17028 -3.41382 0.930157 -0.0724923 -0.359933 + 0.436006 1.05872 -3.36246 0.995432 -0.0690331 0.0659534 + 0.427063 0.966141 -3.34828 0.994488 -0.0852665 0.0610133 + 0.418717 0.87824 -3.33072 0.993833 -0.0883535 0.0669986 + 0.409874 0.796004 -3.32028 0.971425 -0.23337 0.0432731 + 0.442996 1.16715 -3.38078 0.997977 -0.0625481 0.011358 + 0.430379 1.05593 -3.34019 0.892014 -0.0178645 0.451655 + 0.421436 0.963358 -3.32601 0.88581 -0.0133015 0.463858 + 0.415192 0.876496 -3.31677 0.889175 -0.0271198 0.456762 + 0.43749 1.16426 -3.34847 0.902508 -0.0270727 0.429822 + 0.413725 1.05252 -3.32091 0.627153 0.0315384 0.778257 + 0.409732 0.960962 -3.31246 0.627747 0.0405266 0.777361 + 0.403488 0.8741 -3.30322 0.625487 0.0261601 0.779796 + 0.406349 0.794262 -3.30633 0.87843 -0.178117 0.443436 + 0.391084 0.958309 -3.30211 0.327523 0.0676271 0.94242 + 0.391809 0.872439 -3.29673 0.334886 0.0463619 0.941117 + 0.400293 0.793021 -3.29932 0.642422 -0.139952 0.753464 + 0.392661 0.753352 -3.31071 0.647935 -0.74603 0.153683 + 0.372728 0.870455 -3.2932 -0.019793 0.0439646 0.998837 + 0.388614 0.791359 -3.29284 0.343248 -0.117086 0.931918 + 0.386604 0.752111 -3.3037 0.377316 -0.761029 0.5277 + 0.3702 0.753119 -3.32683 -0.235483 -0.821502 -0.519309 + 0.358254 0.869543 -3.29624 -0.36548 0.0180216 0.930645 + 0.378739 0.790332 -3.29101 0.00538248 -0.12188 0.99253 + 0.37673 0.751086 -3.30187 -0.0604947 -0.782837 0.61928 + 0.339181 0.869123 -3.3078 -0.681102 -0.036879 0.731259 + 0.354396 0.789204 -3.30003 -0.659567 -0.201385 0.724165 + 0.364265 0.78942 -3.29405 -0.36391 -0.150492 0.919196 + 0.36686 0.750868 -3.30785 -0.464317 -0.814603 0.347609 + 0.330306 0.869642 -3.32007 -0.910449 -0.11033 0.398635 + 0.34552 0.789724 -3.31231 -0.886416 -0.281632 0.367356 + 0.343283 0.79065 -3.32308 -0.938966 -0.343858 -0.010273 + 0.364623 0.751795 -3.31862 -0.525326 -0.836273 -0.157102 + 0.345731 0.792301 -3.33699 -0.829666 -0.399699 -0.389737 + -0.47438 1.60094 -3.34175 -0.998548 0.0478403 0.0247741 + -0.471733 1.65052 -3.32651 -0.998958 0.0267621 0.0369747 + -0.470021 1.70751 -3.30149 -0.930142 0.184117 0.317705 + -0.460963 1.61601 -3.28124 -0.840998 -0.0602027 0.537679 + -0.452301 1.62262 -3.27282 -0.285647 0.127585 0.949804 + -0.450724 1.40273 -3.44467 -0.822092 -0.154132 -0.548096 + -0.44411 1.36414 -3.44013 -0.822268 -0.162143 -0.545514 + -0.463289 1.38508 -3.40906 -0.967857 -0.173152 -0.182406 + -0.424454 1.38712 -3.47086 -0.63199 -0.11611 -0.766229 + -0.41784 1.34853 -3.46632 -0.637304 -0.152999 -0.755271 + -0.418147 1.27557 -3.45507 -0.67149 -0.107858 -0.733122 + -0.437236 1.28207 -3.43037 -0.836829 -0.094783 -0.539196 + -0.456415 1.303 -3.3993 -0.983046 -0.0984923 -0.154663 + -0.390251 1.37789 -3.49104 -0.320413 -0.102923 -0.94167 + -0.388491 1.34061 -3.48364 -0.325017 -0.165811 -0.931059 + -0.388798 1.26766 -3.47239 -0.335987 -0.132759 -0.932463 + -0.355104 1.34286 -3.48744 0.122498 -0.165151 -0.978631 + -0.357635 1.26799 -3.47682 0.0907829 -0.143128 -0.985532 + -0.396078 1.16351 -3.45588 -0.368948 -0.157235 -0.916054 + -0.420471 1.16378 -3.43851 -0.694889 -0.121614 -0.708759 + -0.439561 1.17028 -3.41382 -0.920821 -0.0992477 -0.377145 + -0.320655 1.28102 -3.46597 0.410875 -0.133275 -0.901898 + -0.330986 1.16034 -3.45424 0.334008 -0.177682 -0.925671 + -0.364915 1.16385 -3.46031 0.00839878 -0.178721 -0.983864 + -0.371502 1.06119 -3.43913 -0.0279949 -0.251818 -0.96737 + -0.39633 1.06279 -3.43432 -0.390612 -0.232627 -0.890678 + -0.305931 1.16446 -3.44053 0.663043 -0.157854 -0.731749 + -0.316602 1.05464 -3.42085 0.638639 -0.238218 -0.731705 + -0.337573 1.05768 -3.43306 0.307337 -0.253666 -0.917168 + -0.301268 1.051 -3.39826 0.900542 -0.191215 -0.390462 + -0.315236 0.959704 -3.37762 0.890032 -0.232343 -0.392249 + -0.326013 0.962261 -3.3935 0.632114 -0.281237 -0.722037 + -0.346984 0.965303 -3.4057 0.295358 -0.30009 -0.907034 + -0.297359 1.04837 -3.37604 0.992453 -0.122614 0.00156549 + -0.311327 0.95707 -3.3554 0.987401 -0.158204 0.00336517 + -0.325983 0.871432 -3.34088 0.981615 -0.190784 -0.00569855 + -0.328431 0.873081 -3.3548 0.886413 -0.254123 -0.386902 + -0.339208 0.875641 -3.37068 0.621727 -0.300518 -0.723287 + -0.31565 0.955279 -3.33459 0.91522 -0.0813439 0.394659 + -0.330306 0.869642 -3.32007 0.910452 -0.110335 0.398628 + -0.34552 0.789724 -3.31231 0.886415 -0.281638 0.367354 + -0.343283 0.79065 -3.32308 0.938965 -0.34386 -0.0102755 + -0.345731 0.792301 -3.33699 0.829667 -0.399694 -0.38974 + -0.329822 0.954448 -3.31498 0.676153 -0.0028278 0.736756 + -0.339181 0.869123 -3.3078 0.681096 -0.0368787 0.731265 + -0.354396 0.789204 -3.30003 0.659564 -0.201387 0.724167 + -0.36686 0.750868 -3.30785 0.464297 -0.814623 0.347587 + -0.364623 0.751795 -3.31862 0.525295 -0.836294 -0.15709 + -0.358254 0.869543 -3.29624 0.365474 0.0180213 0.930647 + -0.364265 0.78942 -3.29405 0.363908 -0.150485 0.919198 + -0.37673 0.751086 -3.30187 0.0604816 -0.782851 0.619263 + -0.3702 0.753119 -3.32683 0.23548 -0.821508 -0.519301 + -0.351308 0.793622 -3.34521 0.585636 -0.423567 -0.691101 + -0.372728 0.870455 -3.2932 0.0198033 0.0439575 0.998837 + -0.378739 0.790332 -3.29101 -0.00537795 -0.121875 0.992531 + -0.386604 0.752111 -3.3037 -0.377289 -0.761048 0.527693 + -0.391411 0.754491 -3.32273 -0.561795 -0.759461 -0.328034 + -0.372004 0.956326 -3.29858 0.0154422 0.0687606 0.997514 + -0.391809 0.872439 -3.29673 -0.334895 0.0463577 0.941115 + -0.388614 0.791359 -3.29284 -0.343249 -0.117084 0.931918 + -0.400293 0.793021 -3.29932 -0.642421 -0.139949 0.753465 + -0.392661 0.753352 -3.31071 -0.647973 -0.745994 0.153699 + -0.391084 0.958309 -3.30211 -0.327529 0.0676302 0.942418 + -0.403488 0.8741 -3.30322 -0.625483 0.0261647 0.779799 + -0.406349 0.794262 -3.30633 -0.87843 -0.178117 0.443436 + -0.409874 0.796004 -3.32028 -0.971425 -0.23337 0.0432729 + -0.413725 1.05252 -3.32091 -0.63141 0.0243428 0.775067 + -0.409732 0.960962 -3.31246 -0.627746 0.0405256 0.777363 + -0.415192 0.876496 -3.31677 -0.889174 -0.027121 0.456764 + -0.418717 0.87824 -3.33072 -0.993833 -0.0883571 0.066996 + -0.408624 0.797144 -3.3323 -0.912442 -0.283092 -0.29548 + -0.420837 1.16085 -3.32918 -0.675561 -0.0286615 0.736747 + -0.430379 1.05593 -3.34019 -0.890612 -0.0217687 0.454244 + -0.421436 0.963358 -3.32601 -0.885809 -0.0132984 0.46386 + -0.427063 0.966141 -3.34828 -0.994488 -0.0852656 0.0610127 + -0.416303 0.880442 -3.35394 -0.938142 -0.159109 -0.30753 + -0.43749 1.16426 -3.34847 -0.906926 -0.0422804 0.419162 + -0.436006 1.05872 -3.36246 -0.995242 -0.0756892 0.0613517 + -0.424649 0.968343 -3.3715 -0.941315 -0.152494 -0.301117 + -0.408883 0.881203 -3.36738 -0.727975 -0.226398 -0.647145 + -0.401204 0.797906 -3.34574 -0.695371 -0.345795 -0.629987 + -0.442996 1.16715 -3.38078 -0.996657 -0.0780272 0.0242265 + -0.432571 1.06185 -3.3955 -0.9415 -0.136262 -0.308238 + -0.420724 1.06306 -3.41696 -0.728733 -0.19097 -0.657631 + -0.412802 0.969561 -3.39296 -0.723536 -0.22565 -0.652363 + -0.395658 0.969371 -3.40516 -0.391539 -0.274303 -0.878325 + -0.391738 0.881014 -3.37958 -0.385449 -0.279706 -0.879314 + -0.392332 0.79781 -3.35205 -0.384025 -0.387571 -0.838041 + -0.382539 0.754393 -3.32904 -0.181055 -0.791577 -0.583631 + -0.37083 0.967765 -3.40997 -0.0277503 -0.296946 -0.954491 + -0.376188 0.880008 -3.38259 -0.0347356 -0.304427 -0.951902 + -0.376782 0.796802 -3.35506 -0.0351403 -0.412532 -0.910265 + -0.364442 0.795528 -3.35285 0.263674 -0.424733 -0.86607 + -0.352342 0.877546 -3.37832 0.298794 -0.310871 -0.902265 + 1.05998 1.28532 -1.98015 -0.500479 0.759671 0.415235 + 1.06342 1.2998 -2.01482 -0.517699 0.831014 0.203478 + 1.03233 1.27353 -2.02089 -0.633506 0.767002 0.101876 + 1.0713 1.23734 -1.91791 -0.0643823 0.603396 0.794839 + 1.08209 1.28719 -1.9671 -0.214468 0.799704 0.560782 + 1.09271 1.31195 -2.01471 -0.13582 0.96152 0.238813 + 1.06884 1.30877 -2.05737 -0.537622 0.838544 0.088352 + 1.0919 1.23816 -1.92563 0.420318 0.490951 0.763086 + 1.09677 1.28702 -1.96546 0.298827 0.738398 0.604542 + 1.10739 1.31177 -2.01308 0.352868 0.901107 0.251974 + 1.12879 1.30312 -2.07197 0.626266 0.763814 0.156139 + 1.09813 1.32091 -2.05726 0.111312 0.977553 0.178884 + 1.12 1.21675 -1.93469 0.599104 0.437506 0.670569 + 1.12487 1.26561 -1.97452 0.690203 0.521998 0.501135 + 1.13795 1.28203 -2.02425 0.75444 0.588814 0.290031 + 1.1713 1.20323 -1.99566 0.833927 0.388517 0.391945 + 1.18439 1.21965 -2.04539 0.870532 0.398339 0.288964 + 1.18982 1.23474 -2.09363 0.871282 0.439525 0.218367 + 1.15935 1.27338 -2.08314 0.762269 0.6116 0.211874 + 1.19506 1.154 -2.01062 0.920235 0.20978 0.330394 + 1.2081 1.16085 -2.06177 0.955203 0.204545 0.21389 + 1.21353 1.17594 -2.11001 0.970073 0.197506 0.141242 + 1.21609 1.18911 -2.15515 0.976443 0.180113 0.118824 + 1.19843 1.24064 -2.13741 0.885469 0.425197 0.187491 + 1.20655 1.08999 -2.02667 0.937487 -0.0336583 0.346388 + 1.21959 1.09684 -2.07782 0.988019 0.0576245 0.14317 + 1.22 1.10578 -2.12788 0.996792 0.0579571 0.0552058 + 1.22256 1.11894 -2.17302 0.998966 0.0334086 0.0308387 + 1.18376 1.04641 -1.99763 0.722806 -0.372566 0.582019 + 1.20943 1.0394 -2.05198 0.908588 -0.233349 0.346433 + 1.22159 1.03917 -2.09959 0.983991 -0.117904 0.133641 + 1.222 1.04811 -2.14965 0.999124 -0.0418097 0.00180435 + 1.18223 0.997715 -2.03899 0.729089 -0.380592 0.56884 + 1.20455 0.99636 -2.08217 0.900865 -0.276688 0.334495 + 1.21671 0.996135 -2.12977 0.977165 -0.187159 0.100602 + 1.14002 0.999492 -2.00372 0.425208 -0.488246 0.762112 + 1.14063 0.93424 -2.03183 0.470183 -0.250193 0.846364 + 1.17278 0.933552 -2.05711 0.754682 -0.220611 0.617889 + 1.19509 0.932198 -2.10029 0.923103 -0.217563 0.317091 + 1.08136 0.999866 -1.98372 0.0634823 -0.564175 0.823211 + 1.08197 0.934614 -2.01182 0.0409518 -0.313055 0.948852 + 1.09487 0.851658 -2.03071 0.0281718 -0.123912 0.991893 + 1.12967 0.851577 -2.03907 0.426521 -0.090523 0.899936 + 1.16182 0.850889 -2.06436 0.784998 -0.118003 0.608156 + 1.03277 1.04274 -1.95099 -0.33406 -0.624074 0.706354 + 1.03478 0.996049 -1.99593 -0.512928 -0.514025 0.687519 + 1.04575 0.934113 -2.02012 -0.533249 -0.314454 0.785344 + 0.99361 1.0303 -2.00338 -0.592228 -0.645924 0.481715 + 1.0085 0.994477 -2.03599 -0.718557 -0.48874 0.494781 + 1.01947 0.932542 -2.06017 -0.809346 -0.243989 0.534254 + 1.03355 0.850267 -2.06046 -0.757823 -0.144672 0.636219 + 1.05866 0.851156 -2.039 -0.441995 -0.170734 0.880619 + 0.965412 1.07295 -1.98369 -0.613215 -0.625939 0.481837 + 0.933796 1.08842 -2.01277 -0.716398 -0.644078 0.268213 + 0.941223 1.0742 -2.03529 -0.766172 -0.600485 0.228906 + 0.963119 1.03383 -2.04639 -0.737233 -0.550657 0.391489 + 0.881459 1.1607 -1.98568 -0.818843 -0.322511 0.47485 + 0.878107 1.14727 -2.04762 -0.86756 -0.488698 0.0922717 + 0.885534 1.13305 -2.07014 -0.824237 -0.565784 0.0228514 + 0.911168 1.10379 -2.07578 -0.810394 -0.580309 0.0806388 + 0.933064 1.06342 -2.08687 -0.864379 -0.449233 0.225916 + 0.866728 1.19559 -2.00045 -0.965484 -0.0195621 0.259728 + 0.863375 1.18217 -2.06239 -0.991553 -0.127445 0.0240845 + 0.860076 1.20167 -2.10609 -0.973416 0.0488518 0.223772 + 0.855496 1.19582 -2.12385 -0.981997 -0.165933 0.090262 + 0.869982 1.15731 -2.1148 -0.873213 -0.484643 -0.051195 + 0.874871 1.22801 -2.07185 -0.94291 0.313074 0.113599 + 0.871571 1.24751 -2.11555 -0.81898 0.455663 0.348774 + 0.85353 1.2736 -2.17525 -0.857345 0.418926 0.299099 + 0.84895 1.26775 -2.19301 -0.98093 0.134181 -0.140613 + 0.88557 1.27604 -2.1347 -0.380004 0.772985 0.508026 + 0.867528 1.30213 -2.1944 -0.653736 0.737199 0.170783 + 0.877653 1.31105 -2.22518 -0.54257 0.787879 -0.291314 + 0.862907 1.29195 -2.22695 -0.826247 0.292857 -0.481197 + 0.853252 1.22412 -2.18659 -0.924319 -0.253923 -0.284881 + 0.893679 1.25709 -2.07569 0.0220694 0.998675 0.0464986 + 0.898511 1.25175 -2.09719 0.449089 0.871824 0.195555 + 0.91314 1.26874 -2.12118 0.021591 0.790447 0.61215 + 0.91607 1.31578 -2.18266 -0.17146 0.904902 0.389556 + 0.926195 1.32469 -2.21344 -0.121501 0.992012 0.0339035 + 0.917472 1.25296 -2.06952 0.14029 0.958992 -0.246279 + 0.922304 1.24762 -2.09102 0.146563 0.989199 0.00198903 + 0.926001 1.24885 -2.0985 0.0781883 0.90069 0.42737 + 0.940629 1.26583 -2.12249 0.121554 0.768717 0.627933 + 0.94364 1.30847 -2.16914 0.135608 0.817423 0.559849 + 0.932343 1.24639 -2.08904 0.0239433 0.997775 -0.0622208 + 0.93604 1.24762 -2.09652 0.012227 0.936827 0.349578 + 0.938666 1.24684 -2.08927 -0.0369945 0.996177 -0.0791387 + 0.950931 1.24801 -2.0982 0.0329205 0.94512 0.325061 + 0.952937 1.25444 -2.11069 0.144166 0.841326 0.520947 + 0.975395 1.27283 -2.13765 0.00538565 0.796846 0.604158 + 0.963088 1.28421 -2.14945 0.158221 0.74151 0.65202 + 0.953558 1.24724 -2.09095 -0.0209443 0.998688 -0.0467285 + 0.978095 1.2481 -2.099 -0.0331501 0.962586 0.268941 + 0.980101 1.25453 -2.11149 -0.0531189 0.850111 0.523917 + 0.979279 1.24761 -2.09173 -0.0563735 0.996304 -0.0648139 + 0.994803 1.24965 -2.09998 -0.224654 0.906298 0.357987 + 0.991501 1.26042 -2.1175 -0.270358 0.780272 0.563988 + 0.986795 1.27872 -2.14366 -0.254009 0.772631 0.581825 + 0.98358 1.289 -2.15871 -0.126906 0.760235 0.637133 + 0.995988 1.24916 -2.09271 -0.0851331 0.996341 -0.0075334 + 1.00349 1.2501 -2.09354 -0.434017 0.87176 0.227296 + 1.00125 1.25445 -2.10147 -0.511975 0.684279 0.519272 + 0.997946 1.26522 -2.11898 -0.516598 0.662751 0.542114 + 0.992867 1.28516 -2.14769 -0.517531 0.654433 0.551252 + 1.00656 1.2514 -2.06805 -0.397021 0.917475 -0.0247556 + 1.02759 1.27069 -2.09037 -0.659037 0.69473 0.288132 + 1.02535 1.27504 -2.0983 -0.603356 0.608743 0.515163 + 1.01366 1.28604 -2.12274 -0.622116 0.563451 0.543594 + 1.02814 1.26851 -2.06481 -0.663078 0.74807 0.0268115 + 1.06829 1.31095 -2.08292 -0.552074 0.827128 0.105229 + 1.0671 1.31137 -2.09074 -0.55557 0.745859 0.367472 + 1.02682 1.28381 -2.10704 -0.585811 0.600035 0.544778 + 1.09933 1.3241 -2.08277 0.103469 0.990292 0.092818 + 1.09813 1.32451 -2.09058 0.0774698 0.989796 0.119592 + 1.06857 1.32014 -2.09948 -0.357598 0.793443 0.492516 + 1.0547 1.32472 -2.11767 -0.399745 0.758346 0.514892 + 1.04153 1.32695 -2.13338 -0.438641 0.683399 0.583575 + 1.12999 1.30631 -2.09748 0.402923 0.905217 0.135041 + 1.10025 1.32588 -2.1048 0.21047 0.959276 0.188393 + 1.08638 1.33047 -2.12299 0.081562 0.927425 0.365007 + 1.07524 1.34267 -2.14156 0.0262889 0.851369 0.523909 + 1.13211 1.30768 -2.11169 0.598068 0.748019 0.287719 + 1.13483 1.32016 -2.13533 0.542154 0.780571 0.31109 + 1.12368 1.33237 -2.1539 0.493946 0.820482 0.287796 + 1.10077 1.35398 -2.1694 0.27772 0.95455 0.108191 + 1.06475 1.35282 -2.1585 -0.171872 0.961852 0.21284 + 1.16797 1.27928 -2.12693 0.761453 0.586076 0.276956 + 1.17068 1.29177 -2.15056 0.77724 0.586511 0.227824 + 1.1614 1.30587 -2.17791 0.729902 0.683551 -0.000959145 + 1.20333 1.24534 -2.18178 0.904887 0.423654 0.0411874 + 1.19404 1.25944 -2.20913 0.843087 0.504866 -0.185241 + 1.17222 1.27705 -2.23502 0.701489 0.584242 -0.408135 + 1.13848 1.32748 -2.19342 0.605265 0.780558 -0.156151 + 1.22099 1.1938 -2.19952 0.984256 0.171117 -0.0442632 + 1.21118 1.20584 -2.23352 0.897353 0.248278 -0.364851 + 1.18935 1.22346 -2.2594 0.716623 0.315702 -0.62192 + 1.16151 1.23532 -2.27643 0.445482 0.349786 -0.824133 + 1.15208 1.28048 -2.25538 0.457027 0.584309 -0.670604 + 1.22206 1.14287 -2.21088 0.992774 0.0491199 -0.10949 + 1.21225 1.15491 -2.24488 0.892032 0.106052 -0.439353 + 1.19043 1.15683 -2.27277 0.686954 0.15626 -0.709702 + 1.16259 1.1687 -2.28979 0.479238 0.194392 -0.855887 + 1.22178 1.05825 -2.19106 0.998525 -0.0463214 -0.0283155 + 1.22129 1.08217 -2.22892 0.985702 0.00100377 -0.168497 + 1.21091 1.09261 -2.25966 0.883572 0.077633 -0.461816 + 1.18908 1.09453 -2.28755 0.709144 0.147439 -0.689475 + 1.21672 1.00479 -2.21402 0.981893 -0.179261 -0.0612473 + 1.21572 1.01392 -2.24892 0.972811 -0.11192 -0.202762 + 1.20533 1.02435 -2.27965 0.874005 -0.00766102 -0.485856 + 1.21694 0.994661 -2.17261 0.987063 -0.159318 -0.0180065 + 1.20229 0.929581 -2.1775 0.897026 -0.340019 -0.282367 + 1.18536 0.92208 -2.19428 0.684215 -0.566058 -0.459814 + 1.18263 0.925247 -2.21716 0.800222 -0.577455 0.161837 + 1.19733 0.936526 -2.23764 0.914921 -0.381313 0.132361 + 1.20206 0.931056 -2.13466 0.96795 -0.229049 0.102999 + 1.18161 0.848802 -2.12835 0.9718 -0.232379 -0.0400575 + 1.17411 0.848005 -2.15023 0.831795 -0.331734 -0.445049 + 1.15718 0.840503 -2.16701 0.636737 -0.24471 -0.731221 + 1.17464 0.849946 -2.09397 0.941004 -0.149959 0.303355 + 1.16603 0.768546 -2.09129 0.964699 -0.0548629 0.257579 + 1.16863 0.769838 -2.11595 0.988116 -0.109205 -0.108175 + 1.16113 0.769041 -2.13784 0.881889 -0.134174 -0.451961 + 1.15321 0.769489 -2.06168 0.791262 -0.0205788 0.611131 + 1.15215 0.686861 -2.05711 0.785551 -0.0148813 0.618618 + 1.16406 0.690491 -2.08423 0.964006 -0.00472616 0.265839 + 1.16666 0.691784 -2.10889 0.99467 -0.00626989 -0.102915 + 1.13029 0.768856 -2.04348 0.441823 -0.000572975 0.897102 + 1.12924 0.686226 -2.03891 0.428056 -0.0320119 0.903185 + 1.13621 0.587613 -2.05397 0.432606 -0.165015 0.886353 + 1.15403 0.589054 -2.06807 0.78537 -0.0896097 0.612506 + 1.16595 0.592685 -2.09518 0.965714 -0.0177749 0.258999 + 1.0955 0.768938 -2.03512 0.0102689 -0.00240859 0.999944 + 1.09711 0.686301 -2.0312 0.0065365 -0.0522498 0.998613 + 1.10408 0.587688 -2.04625 -0.0021076 -0.225797 0.974172 + 1.06671 0.769714 -2.04136 -0.441448 -0.018945 0.897087 + 1.06833 0.687077 -2.03744 -0.448153 -0.0774159 0.890598 + 1.08172 0.589274 -2.05105 -0.44449 -0.257877 0.857862 + 1.12386 0.47308 -2.08207 0.00682784 -0.426215 0.904596 + 1.0416 0.768826 -2.06282 -0.764613 -0.039805 0.64326 + 1.04521 0.690924 -2.05702 -0.760811 -0.0866785 0.643159 + 1.05861 0.59312 -2.07063 -0.757637 -0.257227 0.59985 + 1.08718 0.477048 -2.099 -0.716519 -0.446145 0.536242 + 1.1015 0.474666 -2.08687 -0.434988 -0.45779 0.775379 + 1.02846 0.770206 -2.08467 -0.944289 -0.0839063 0.318242 + 1.03207 0.692305 -2.07887 -0.945825 -0.103693 0.307675 + 1.04842 0.596061 -2.08753 -0.931336 -0.235435 0.277819 + 1.077 0.479988 -2.11589 -0.885545 -0.409333 0.219671 + 1.11186 0.421268 -2.1308 -0.520964 -0.842644 0.136188 + 1.01351 0.849065 -2.09167 -0.934 -0.155291 0.32176 + 1.02616 0.76936 -2.10888 -0.992172 -0.121291 -0.0297297 + 1.03002 0.695723 -2.10101 -0.99381 -0.106443 -0.0317969 + 1.04637 0.599478 -2.10967 -0.978798 -0.197055 -0.0558987 + 1.07573 0.482105 -2.12961 -0.929249 -0.360717 -0.0798702 + 0.999435 0.931338 -2.09138 -0.808717 -0.275684 0.519591 + 1.01121 0.848216 -2.11588 -0.963468 -0.266946 0.0216602 + 1.02911 0.770366 -2.12836 -0.940629 -0.146486 -0.306199 + 1.03297 0.696732 -2.12049 -0.945599 -0.11165 -0.305575 + 1.04869 0.601661 -2.12474 -0.934774 -0.158737 -0.317805 + 0.978011 0.997999 -2.079 -0.709799 -0.511257 0.484564 + 0.972961 0.929833 -2.1305 -0.920958 -0.348939 0.173427 + 0.979065 0.922293 -2.15239 -0.848147 -0.495076 -0.188536 + 1.01732 0.840676 -2.13777 -0.901475 -0.317098 -0.294604 + 0.951538 0.996494 -2.11812 -0.860916 -0.408472 0.303272 + 0.978927 0.926189 -2.17924 -0.747799 -0.64023 0.175791 + 1.02388 0.894998 -2.16015 -0.401774 -0.577137 -0.710979 + 1.02568 0.840159 -2.15425 -0.599736 -0.22659 -0.767446 + 1.03748 0.769849 -2.14484 -0.695031 -0.167143 -0.699282 + 0.917717 1.07644 -2.13672 -0.924901 -0.373323 0.0720254 + 0.936191 1.00951 -2.16796 -0.938098 -0.339544 0.0684168 + 0.963497 0.938828 -2.19881 -0.879676 -0.463391 0.106956 + 0.895616 1.12806 -2.12044 -0.850682 -0.522942 -0.0535753 + 0.914917 1.08625 -2.20238 -0.939312 -0.26993 -0.211734 + 0.934132 1.02369 -2.22206 -0.948817 -0.241037 -0.204075 + 0.961437 0.953005 -2.25291 -0.931587 -0.308391 -0.192461 + 0.867738 1.18561 -2.17754 -0.865158 -0.410179 -0.288539 + 0.892817 1.13787 -2.1861 -0.898418 -0.36582 -0.242943 + 0.912048 1.16244 -2.2362 -0.741425 -0.199704 -0.640631 + 0.931123 1.09699 -2.24512 -0.793727 -0.121234 -0.59607 + 0.886969 1.21019 -2.22764 -0.697033 -0.253338 -0.670794 + 0.931082 1.25449 -2.2667 -0.496383 -0.0603342 -0.866004 + 0.949901 1.17835 -2.26912 -0.549463 -0.0739628 -0.832238 + 0.968976 1.1129 -2.27805 -0.502827 -0.04349 -0.863292 + 0.867208 1.24832 -2.22053 -0.739263 -0.192247 -0.645393 + 0.911322 1.29262 -2.25959 -0.458741 0.154976 -0.874951 + 0.95385 1.31284 -2.26747 -0.175347 0.690413 -0.701843 + 0.96008 1.28314 -2.28307 -0.261777 0.222177 -0.939207 + 0.978899 1.20701 -2.2855 -0.239876 0.0117626 -0.970732 + 0.926069 1.31171 -2.25781 -0.30531 0.70978 -0.634821 + 0.953976 1.32582 -2.2231 0.0342874 0.996947 -0.0701552 + 0.988777 1.31557 -2.2638 0.260973 0.793595 -0.549637 + 0.995008 1.28587 -2.2794 0.155317 0.385048 -0.909733 + 0.960743 1.32387 -2.20375 0.234705 0.934046 0.269205 + 0.995544 1.31361 -2.24446 0.0722315 0.958511 0.275753 + 1.01332 1.3184 -2.2382 -0.41811 0.862893 -0.283899 + 1.03281 1.27082 -2.2821 0.0358828 0.357108 -0.933374 + 0.980918 1.30501 -2.19008 0.402933 0.839999 0.363383 + 1.00405 1.30768 -2.23924 -0.281354 0.823435 0.492743 + 0.963815 1.28962 -2.15547 0.192433 0.761993 0.618333 + 0.984307 1.29441 -2.16473 -0.11699 0.889984 0.440729 + 0.989425 1.29907 -2.18486 0.103819 0.970214 0.218876 + 0.994769 1.30012 -2.18287 -0.530824 0.846309 0.0445665 + 1.00404 1.31084 -2.18183 -0.762132 0.645132 0.0543976 + 0.989652 1.29545 -2.16274 -0.485407 0.791507 0.371345 + 1.00858 1.30598 -2.15145 -0.702517 0.597802 0.386137 + 1.03105 1.3371 -2.15031 -0.520343 0.761098 0.387264 + 1.02651 1.34196 -2.1807 -0.463705 0.885612 0.0258765 + 1.05061 1.34378 -2.1937 -0.156115 0.946896 -0.281098 + 1.03742 1.32022 -2.25119 -0.0504328 0.766035 -0.640818 + 1.08663 1.34494 -2.2046 0.0211869 0.883564 -0.46783 + 1.07665 1.30058 -2.25546 0.135038 0.654696 -0.743732 + 1.07203 1.25118 -2.28636 0.0414754 0.317842 -0.947236 + 1.0167 1.19196 -2.28819 -0.0603842 0.114855 -0.991545 + 1.11835 1.3309 -2.21378 0.341041 0.797469 -0.497729 + 1.10837 1.28654 -2.26464 0.105259 0.564383 -0.818775 + 1.1178 1.24139 -2.28569 0.144738 0.343141 -0.928065 + 1.09284 1.20037 -2.29555 -0.0275252 0.162899 -0.986259 + 1.13861 1.19058 -2.29487 0.21427 0.212422 -0.953396 + 1.14382 1.12486 -2.30849 0.180341 0.202571 -0.962519 + 1.09754 1.1286 -2.30501 -0.0863768 0.163649 -0.98273 + 1.0214 1.12019 -2.29765 -0.234945 0.0613805 -0.970069 + 1.1678 1.10298 -2.30341 0.513874 0.193492 -0.83576 + 1.16584 1.03957 -2.31782 0.508209 0.128806 -0.851547 + 1.14473 1.04282 -2.32601 0.171387 0.175421 -0.969461 + 1.09845 1.04656 -2.32253 -0.16029 0.156543 -0.974578 + 1.18713 1.03112 -2.30196 0.706941 0.0671098 -0.704082 + 1.17165 0.958611 -2.31734 0.715925 -0.0592651 -0.695658 + 1.15719 0.962818 -2.33057 0.533968 0.0190873 -0.845289 + 1.13607 0.966066 -2.33875 0.147679 0.105123 -0.983433 + 1.18985 0.951844 -2.29503 0.857141 -0.159269 -0.48984 + 1.1573 0.873995 -2.31263 0.89054 -0.175441 -0.419713 + 1.14982 0.878091 -2.32685 0.775457 -0.0886108 -0.625152 + 1.13536 0.882297 -2.34008 0.628111 -0.00830906 -0.778079 + 1.19632 0.945651 -2.27253 0.939227 -0.262051 -0.22177 + 1.16377 0.867801 -2.29013 0.945305 -0.270189 -0.182747 + 1.14423 0.789423 -2.31181 0.985597 -0.125514 -0.113334 + 1.1409 0.791504 -2.32781 0.936473 -0.0553848 -0.34634 + 1.13343 0.795599 -2.34203 0.828379 0.00282698 -0.560161 + 1.16295 0.863015 -2.27155 0.914036 -0.377747 0.147802 + 1.14342 0.784636 -2.29323 0.965048 -0.194038 0.176158 + 1.13797 0.70623 -2.31128 0.981378 -0.0362149 0.188641 + 1.13845 0.705678 -2.32895 0.995329 -0.00336656 -0.0964816 + 1.13513 0.707759 -2.34495 0.936861 0.0132466 -0.349451 + 1.14825 0.851736 -2.25108 0.793352 -0.418347 0.442242 + 1.13618 0.782888 -2.27523 0.851006 -0.250532 0.461543 + 1.13074 0.704483 -2.29328 0.871564 -0.0617221 0.486381 + 1.1363 0.615698 -2.29634 0.876214 0.10804 0.469655 + 1.14159 0.612412 -2.30958 0.978392 0.100237 0.180833 + 1.13375 0.847744 -2.23277 0.535838 -0.43715 0.722341 + 1.12168 0.778896 -2.25693 0.567932 -0.297964 0.767248 + 1.11761 0.705719 -2.27586 0.585761 -0.117022 0.801991 + 1.12317 0.616935 -2.27891 0.585473 0.0943926 0.805178 + 1.13814 0.898036 -2.20703 0.438425 -0.799892 0.409824 + 1.10266 0.89077 -2.19775 0.171176 -0.891553 0.419323 + 1.09827 0.840477 -2.22349 0.139698 -0.415647 0.898733 + 1.09638 0.779218 -2.24812 0.147142 -0.315785 0.937352 + 1.14087 0.89487 -2.18415 0.181535 -0.651745 -0.736392 + 1.10379 0.887968 -2.17995 -0.056183 -0.669864 -0.740355 + 1.05801 0.890812 -2.18881 -0.0683178 -0.921668 0.381917 + 1.06003 0.842575 -2.22376 -0.0370483 -0.466899 0.883534 + 1.05814 0.781314 -2.24839 -0.118949 -0.308103 0.943888 + 1.14119 0.839975 -2.17954 0.290378 -0.135224 -0.947309 + 1.10412 0.833077 -2.17534 -0.147752 -0.117206 -0.982055 + 1.05913 0.888012 -2.17101 -0.257002 -0.666987 -0.699342 + 1.02374 0.898894 -2.187 -0.312877 -0.853588 0.416529 + 1.14987 0.770103 -2.1543 0.720032 -0.147736 -0.678033 + 1.13389 0.769575 -2.16683 0.322624 -0.153736 -0.933959 + 1.10545 0.770067 -2.16789 -0.096934 -0.1288 -0.986922 + 1.06094 0.833172 -2.1651 -0.271326 -0.115415 -0.955543 + 1.14854 0.696128 -2.14536 0.728905 -0.0266264 -0.684096 + 1.13383 0.698417 -2.15678 0.339681 -0.0545352 -0.938958 + 1.10539 0.69891 -2.15785 -0.103199 -0.0689841 -0.992266 + 1.06227 0.770162 -2.15765 -0.332669 -0.141325 -0.932394 + 1.1598 0.695065 -2.1289 0.895542 -0.0176321 -0.444628 + 1.16114 0.598766 -2.13427 0.896834 0.0679929 -0.437111 + 1.1524 0.601022 -2.147 0.735166 0.0813882 -0.672984 + 1.13769 0.60331 -2.15842 0.343561 0.0724325 -0.936333 + 1.16799 0.595484 -2.11426 0.994751 0.0322279 -0.0971157 + 1.17101 0.479522 -2.13682 0.984385 -0.113959 -0.134164 + 1.16676 0.481555 -2.14921 0.888762 -0.0654523 -0.453672 + 1.15803 0.483812 -2.16194 0.720971 -0.0421243 -0.691684 + 1.16896 0.476723 -2.11774 0.954935 -0.182944 0.23373 + 1.15345 0.42109 -2.14024 0.643304 -0.760109 -0.0916182 + 1.1492 0.423124 -2.15263 0.513027 -0.709054 -0.483783 + 1.14009 0.424542 -2.15971 0.129355 -0.650965 -0.748006 + 1.14892 0.485228 -2.16902 0.351338 -0.0311114 -0.935731 + 1.16158 0.474473 -2.10095 0.783568 -0.266171 0.561404 + 1.14607 0.418842 -2.12345 0.415155 -0.834931 0.361299 + 1.12617 0.418888 -2.11867 -0.143097 -0.873927 0.464516 + 1.14375 0.473033 -2.08685 0.413466 -0.365003 0.834158 + 1.02577 0.850658 -2.22195 -0.383354 -0.55021 0.741828 + 1.03522 0.783103 -2.25302 -0.470771 -0.306281 0.827385 + 1.05701 0.707977 -2.2673 -0.116851 -0.16208 0.979835 + 1.01641 0.853552 -2.23117 -0.754539 -0.485275 0.44179 + 1.02586 0.785997 -2.26224 -0.820055 -0.239906 0.519572 + 1.03409 0.709764 -2.27193 -0.494739 -0.174611 0.851319 + 1.00098 0.866192 -2.25074 -0.871518 -0.440288 0.215877 + 1.01861 0.788239 -2.27782 -0.938213 -0.176467 0.297683 + 1.02532 0.709987 -2.2807 -0.823235 -0.152377 0.546869 + 1.04215 0.62187 -2.28487 -0.789832 -0.192263 0.582409 + 1.05092 0.621647 -2.2761 -0.479042 -0.111171 0.870724 + 0.995492 0.872387 -2.27345 -0.951575 -0.292723 -0.0939096 + 1.01313 0.794434 -2.30052 -0.986528 -0.13705 0.0893289 + 1.01268 0.711888 -2.31788 -0.987929 -0.106946 0.11207 + 1.01807 0.712229 -2.29628 -0.940514 -0.124627 0.316073 + 1.03636 0.619611 -2.29634 -0.907596 -0.225532 0.354126 + 0.968884 0.959752 -2.28037 -0.780075 -0.105775 -0.61668 + 1.00294 0.879134 -2.30091 -0.925343 -0.168031 -0.339861 + 1.013 0.796612 -2.3188 -0.980697 -0.0319422 -0.192904 + 0.950337 1.03443 -2.26481 -0.743805 -0.0289728 -0.667769 + 1.00071 0.962823 -2.29867 -0.456441 0.10721 -0.883271 + 1.00844 0.882676 -2.31566 -0.698545 0.0236632 -0.715174 + 1.0185 0.800157 -2.33354 -0.750151 0.0916483 -0.654885 + 0.982165 1.0375 -2.28311 -0.452766 0.0518603 -0.89012 + 1.03711 0.965133 -2.31498 -0.349584 0.138326 -0.926637 + 1.04484 0.884987 -2.33197 -0.337747 0.168016 -0.92612 + 1.0424 0.800438 -2.34678 -0.371493 0.168365 -0.913042 + 1.01742 0.713383 -2.35019 -0.762061 -0.0197523 -0.647204 + 1.03459 1.04479 -2.30271 -0.326657 0.0684687 -0.94266 + 1.10097 0.9669 -2.3348 -0.197787 0.142765 -0.969793 + 1.08924 0.885849 -2.34433 -0.192659 0.160198 -0.968101 + 1.0868 0.801298 -2.35914 -0.167292 0.177914 -0.969722 + 1.12434 0.885013 -2.34828 0.264996 0.092495 -0.959803 + 1.11343 0.800102 -2.36117 0.279094 0.135057 -0.950719 + 1.08213 0.711068 -2.3752 -0.179845 0.0387804 -0.98293 + 1.04131 0.713664 -2.36342 -0.382405 0.0322836 -0.923431 + 1.12445 0.797383 -2.35297 0.695644 0.0563259 -0.716175 + 1.11905 0.709535 -2.36943 0.687185 0.0367277 -0.725553 + 1.10876 0.709872 -2.37723 0.264532 0.041797 -0.963471 + 1.11486 0.60827 -2.36842 0.258883 -0.159847 -0.95259 + 1.09444 0.609757 -2.36693 -0.185086 -0.210049 -0.960012 + 1.12802 0.707751 -2.35849 0.829758 0.0260422 -0.557515 + 1.13219 0.609351 -2.35256 0.821458 -0.024545 -0.56974 + 1.12515 0.607935 -2.36061 0.677186 -0.0720334 -0.732277 + 1.1393 0.60936 -2.33903 0.932486 0.020612 -0.360618 + 1.15191 0.500329 -2.31369 0.929786 -0.122929 -0.346967 + 1.14743 0.496383 -2.32059 0.815537 -0.217254 -0.536376 + 1.14039 0.494966 -2.32864 0.669375 -0.25898 -0.696323 + 1.14208 0.61186 -2.32725 0.991352 0.0600068 -0.116704 + 1.15469 0.502829 -2.30192 0.993291 -0.0827761 -0.0807485 + 1.14351 0.450377 -2.29177 0.659772 -0.727186 0.189476 + 1.13903 0.446433 -2.29866 0.516083 -0.853316 -0.0742224 + 1.15469 0.508324 -2.29292 0.982488 0.00623827 0.186223 + 1.14352 0.455873 -2.28276 0.614539 -0.584816 0.529463 + 1.13594 0.461731 -2.2739 0.284404 -0.474977 0.832773 + 1.13274 0.444378 -2.30264 0.110688 -0.94111 -0.319467 + 1.13409 0.49291 -2.33262 0.268242 -0.385113 -0.883025 + 1.1494 0.511608 -2.27968 0.856033 0.0202964 0.516522 + 1.14182 0.517466 -2.27081 0.587188 0.053829 0.807659 + 1.12253 0.520015 -2.26434 0.155237 -0.00723777 0.987851 + 1.11479 0.462892 -2.27405 -0.179241 -0.531526 0.82786 + 1.10388 0.619483 -2.27244 0.160199 0.0342834 0.986489 + 1.10138 0.521175 -2.26449 -0.096181 -0.0634202 0.993341 + 1.08372 0.521401 -2.2679 -0.386055 -0.157544 0.908923 + 1.07832 0.518992 -2.27237 -0.694707 -0.302119 0.652768 + 1.10939 0.460482 -2.27852 -0.423215 -0.645372 0.635911 + 1.09232 0.706041 -2.26706 0.148063 -0.150144 0.977514 + 1.06858 0.62142 -2.27269 -0.104782 -0.0165703 0.994357 + 1.07254 0.516733 -2.28383 -0.815608 -0.336935 0.470382 + 1.06895 0.510228 -2.29484 -0.867531 -0.398146 0.298111 + 1.10581 0.453976 -2.28953 -0.541841 -0.740233 0.398074 + 1.03097 0.61927 -2.31794 -0.958479 -0.239242 0.155182 + 1.03061 0.616257 -2.33139 -0.95443 -0.272163 -0.122433 + 1.0686 0.507215 -2.30829 -0.904745 -0.425569 0.0181301 + 1.07128 0.502696 -2.31543 -0.753701 -0.5066 -0.418677 + 1.10849 0.449455 -2.29667 -0.435324 -0.89232 -0.119407 + 1.01255 0.714067 -2.33616 -0.981893 -0.065473 -0.177761 + 1.03548 0.615573 -2.34542 -0.7422 -0.269034 -0.613807 + 1.05363 0.612355 -2.35515 -0.393364 -0.240066 -0.887487 + 1.08943 0.499476 -2.32516 -0.389011 -0.453864 -0.801672 + 1.11368 0.494398 -2.33113 -0.203735 -0.437988 -0.87559 + 1.04073 0.698706 -2.13558 -0.713148 -0.104059 -0.693247 + 1.05645 0.603637 -2.13983 -0.704541 -0.0801143 -0.705127 + 1.06553 0.699021 -2.1484 -0.349855 -0.0813898 -0.933261 + 1.07573 0.604393 -2.14977 -0.35183 0.0035847 -0.936057 + 1.08285 0.485512 -2.15402 -0.681325 -0.204194 -0.702923 + 1.07804 0.484288 -2.14468 -0.889979 -0.307988 -0.336274 + 1.1156 0.604282 -2.15922 -0.0967296 0.0416103 -0.99444 + 1.12682 0.4862 -2.16981 -0.102032 -0.050279 -0.99351 + 1.10213 0.486269 -2.16396 -0.339421 -0.0902369 -0.936296 + 1.1154 0.424609 -2.15386 -0.371155 -0.692349 -0.618786 + 1.11059 0.423385 -2.14451 -0.561708 -0.79476 -0.229869 + -0.997946 1.26522 -2.11898 0.513961 0.664279 0.54275 + -1.00125 1.25445 -2.10147 0.49388 0.722412 0.483947 + -0.995988 1.24916 -2.09271 0.137383 0.988455 0.0638961 + -0.992867 1.28516 -2.14769 0.517531 0.654433 0.551252 + -1.01366 1.28604 -2.12274 0.618266 0.564757 0.546623 + -1.02682 1.28381 -2.10704 0.605076 0.584117 0.541008 + -1.02535 1.27504 -2.0983 0.618559 0.607946 0.497781 + -0.98358 1.289 -2.15871 0.12037 0.770654 0.625782 + -0.989652 1.29545 -2.16274 0.485407 0.791507 0.371345 + -1.00858 1.30598 -2.15145 0.679477 0.608474 0.409963 + -1.04153 1.32695 -2.13338 0.471476 0.673538 0.569261 + -1.0547 1.32472 -2.11767 0.399746 0.758346 0.514892 + -0.963815 1.28962 -2.15547 -0.183418 0.76356 0.61914 + -0.984307 1.29441 -2.16473 0.184608 0.909914 0.371453 + -0.994769 1.30012 -2.18287 0.530824 0.846309 0.0445665 + -1.00404 1.31084 -2.18183 0.762133 0.645131 0.0543958 + -1.03105 1.3371 -2.15031 0.545055 0.711874 0.442889 + -0.94364 1.30847 -2.16914 -0.129731 0.826017 0.548513 + -0.960743 1.32387 -2.20375 -0.24203 0.92725 0.285708 + -0.980918 1.30501 -2.19008 -0.409937 0.822185 0.394923 + -0.989425 1.29907 -2.18486 -0.0279772 0.965028 0.26065 + -1.00405 1.30768 -2.23924 0.00391974 0.973144 -0.230163 + -0.91607 1.31578 -2.18266 0.146177 0.911733 0.383894 + -0.926195 1.32469 -2.21344 0.147343 0.988701 0.0275828 + -0.953976 1.32582 -2.2231 -0.0476521 0.994555 -0.0926787 + -0.995544 1.31361 -2.24446 -0.480832 0.87652 0.0226444 + -0.867528 1.30213 -2.1944 0.64391 0.737506 0.203627 + -0.877653 1.31105 -2.22518 0.52307 0.79705 -0.301842 + -0.926069 1.31171 -2.25781 0.30531 0.70978 -0.634821 + -0.95385 1.31284 -2.26747 0.142053 0.726263 -0.672579 + -0.988777 1.31557 -2.2638 -0.284012 0.824853 -0.48883 + -0.85353 1.2736 -2.17525 0.858587 0.42444 0.28754 + -0.862907 1.29195 -2.22695 0.811404 0.257808 -0.524556 + -0.911322 1.29262 -2.25959 0.503629 0.168112 -0.847406 + -0.96008 1.28314 -2.28307 0.17252 0.194486 -0.965615 + -0.860076 1.20167 -2.10609 0.977829 0.0527667 0.202649 + -0.855496 1.19582 -2.12385 0.978324 -0.177524 0.106618 + -0.84895 1.26775 -2.19301 0.979329 0.151404 -0.134134 + -0.867208 1.24832 -2.22053 0.739929 -0.204522 -0.640839 + -0.863375 1.18217 -2.06239 0.993131 -0.0925709 0.0715634 + -0.869982 1.15731 -2.1148 0.884538 -0.464575 -0.0419891 + -0.853252 1.22412 -2.18659 0.910534 -0.270865 -0.312346 + -0.867738 1.18561 -2.17754 0.87106 -0.384364 -0.30581 + -0.886969 1.21019 -2.22764 0.715305 -0.245911 -0.654115 + -0.881459 1.1607 -1.98568 0.836032 -0.418033 0.355386 + -0.878107 1.14727 -2.04762 0.861581 -0.493556 0.11866 + -0.895625 1.19651 -1.94679 0.679581 0.0758583 0.729668 + -0.919078 1.1614 -1.93562 0.592096 -0.306943 0.745123 + -0.913074 1.14522 -1.9566 0.648751 -0.560217 0.515052 + -0.933796 1.08842 -2.01277 0.695637 -0.667017 0.26679 + -0.965973 1.17276 -1.91092 0.227956 0.232167 0.945587 + -0.989426 1.13764 -1.89975 0.246311 -0.112053 0.962692 + -1.01057 1.10156 -1.91032 0.289681 -0.495879 0.81865 + -1.00457 1.08538 -1.93131 0.531615 -0.606849 0.590863 + -0.965412 1.07295 -1.98369 0.62144 -0.626088 0.470984 + -0.980129 1.18837 -1.91784 -0.155311 0.546138 0.823172 + -1.05117 1.12715 -1.90057 -0.0720222 -0.172502 0.982373 + -1.07232 1.09107 -1.91115 -0.167933 -0.338119 0.925999 + -1.07934 1.04655 -1.93878 -0.0952247 -0.598105 0.79574 + -1.03277 1.04274 -1.95099 0.337861 -0.646305 0.684207 + -0.968084 1.25517 -1.97953 -0.387692 0.803678 0.451438 + -0.995964 1.18457 -1.9229 -0.352308 0.648609 0.674675 + -0.994254 1.24243 -1.98218 -0.313337 0.772476 0.552359 + -1.00474 1.23713 -1.98197 -0.164995 0.700408 0.69441 + -1.00645 1.17926 -1.92269 0.17016 0.608507 0.77509 + -1.00371 1.25545 -2.02439 0.0514151 0.998662 0.00544936 + -1.00651 1.25674 -2.00165 0.345471 0.887877 0.303849 + -1.01179 1.25355 -1.99836 0.302508 0.6774 0.670536 + -1.01002 1.23395 -1.97869 0.313765 0.690069 0.652194 + -0.999056 1.25046 -2.06722 -0.00821282 0.996386 -0.0845421 + -1.00656 1.2514 -2.06805 0.397023 0.917475 -0.0247581 + -1.01075 1.25642 -2.02412 0.39108 0.91962 -0.0368103 + -1.01355 1.2577 -2.00138 0.396477 0.847567 0.352755 + -1.00349 1.2501 -2.09354 0.379706 0.883014 0.275881 + -1.02759 1.27069 -2.09037 0.666809 0.684758 0.294061 + -1.02814 1.26851 -2.06481 0.657845 0.752402 0.0336234 + -1.03233 1.27353 -2.02089 0.621997 0.778144 0.0872426 + -1.02889 1.25904 -1.98622 0.587514 0.689515 0.423552 + -1.06829 1.31095 -2.08292 0.542167 0.832557 0.113592 + -1.06884 1.30877 -2.05737 0.545276 0.832817 0.0953446 + -1.06342 1.2998 -2.01482 0.52789 0.827737 0.190221 + -1.05998 1.28532 -1.98015 0.500475 0.759674 0.415236 + -1.02713 1.2549 -1.9832 0.604321 0.609386 0.513268 + -1.0671 1.31137 -2.09074 0.543852 0.75975 0.356376 + -1.09813 1.32451 -2.09058 -0.0774698 0.989796 0.119592 + -1.09933 1.3241 -2.08277 -0.103469 0.990292 0.0928181 + -1.09813 1.32091 -2.05726 -0.0662083 0.990246 0.122598 + -1.09271 1.31195 -2.01471 0.192334 0.93755 0.289841 + -1.06857 1.32014 -2.09948 0.357598 0.793443 0.492516 + -1.10025 1.32588 -2.1048 -0.21047 0.959276 0.188393 + -1.12999 1.30631 -2.09748 -0.583818 0.800172 0.137405 + -1.12879 1.30312 -2.07197 -0.634952 0.759198 0.143021 + -1.10739 1.31177 -2.01308 -0.37813 0.865314 0.329014 + -1.08638 1.33047 -2.12299 -0.0815611 0.927425 0.365008 + -1.13483 1.32016 -2.13533 -0.546919 0.78092 0.301735 + -1.13211 1.30768 -2.11169 -0.602332 0.741187 0.296374 + -1.16797 1.27928 -2.12693 -0.741695 0.596655 0.306418 + -1.15935 1.27338 -2.08314 -0.766914 0.602076 0.222145 + -1.07524 1.34267 -2.14156 -0.0555998 0.875751 0.479551 + -1.12368 1.33237 -2.1539 -0.487332 0.824377 0.287941 + -1.17068 1.29177 -2.15056 -0.756138 0.618157 0.214795 + -1.19843 1.24064 -2.13741 -0.8893 0.4146 0.193011 + -1.18982 1.23474 -2.09363 -0.863451 0.44763 0.232551 + -1.06475 1.35282 -2.1585 0.101397 0.965176 0.241151 + -1.10077 1.35398 -2.1694 -0.265897 0.951102 0.157173 + -1.13848 1.32748 -2.19342 -0.592972 0.789267 -0.159502 + -1.1614 1.30587 -2.17791 -0.728637 0.684893 0.00321937 + -1.20333 1.24534 -2.18178 -0.907637 0.418511 0.0323098 + -1.02651 1.34196 -2.1807 0.542868 0.839361 -0.0277047 + -1.05061 1.34378 -2.1937 0.165444 0.948647 -0.269625 + -1.08663 1.34494 -2.2046 -0.102595 0.902739 -0.417776 + -1.01332 1.3184 -2.2382 0.547404 0.720786 -0.425225 + -1.03742 1.32022 -2.25119 0.117719 0.732925 -0.670047 + -1.07665 1.30058 -2.25546 -0.14845 0.629303 -0.762851 + -1.10837 1.28654 -2.26464 -0.148225 0.589922 -0.793739 + -1.11835 1.3309 -2.21378 -0.335664 0.820271 -0.463125 + -1.03281 1.27082 -2.2821 -0.0395279 0.360896 -0.931768 + -1.07203 1.25118 -2.28636 -0.0492017 0.326226 -0.94401 + -1.1178 1.24139 -2.28569 -0.153469 0.33296 -0.930368 + -1.15208 1.28048 -2.25538 -0.445637 0.593702 -0.670019 + -1.17222 1.27705 -2.23502 -0.703084 0.590601 -0.396059 + -0.995008 1.28587 -2.2794 -0.0708546 0.313121 -0.947066 + -1.0167 1.19196 -2.28819 0.145802 0.063277 -0.987288 + -1.09284 1.20037 -2.29555 0.0156244 0.15068 -0.988459 + -1.13861 1.19058 -2.29487 -0.199552 0.197976 -0.959679 + -1.16151 1.23532 -2.27643 -0.4365 0.339639 -0.833135 + -0.978899 1.20701 -2.2855 0.214445 -0.105507 -0.971021 + -0.949901 1.17835 -2.26912 0.487822 -0.0853515 -0.86876 + -1.0214 1.12019 -2.29765 0.226025 0.0597328 -0.972288 + -1.09754 1.1286 -2.30501 0.0923096 0.155919 -0.983447 + -0.931082 1.25449 -2.2667 0.502481 -0.101082 -0.858659 + -0.912048 1.16244 -2.2362 0.742272 -0.204591 -0.638103 + -0.931123 1.09699 -2.24512 0.800447 -0.114848 -0.588298 + -0.968976 1.1129 -2.27805 0.489197 -0.0102413 -0.872113 + -0.892817 1.13787 -2.1861 0.889539 -0.374692 -0.261394 + -0.914917 1.08625 -2.20238 0.938747 -0.273717 -0.209362 + -0.950337 1.03443 -2.26481 0.756223 -0.0757755 -0.649911 + -0.982165 1.0375 -2.28311 0.431807 0.0327135 -0.901373 + -1.03459 1.04479 -2.30271 0.305288 0.0956658 -0.947442 + -0.895616 1.12806 -2.12044 0.830532 -0.556333 -0.0266369 + -0.917717 1.07644 -2.13672 0.926829 -0.364878 0.0886172 + -0.936191 1.00951 -2.16796 0.938149 -0.340312 0.0637488 + -0.934132 1.02369 -2.22206 0.945119 -0.246923 -0.213961 + -0.961437 0.953005 -2.25291 0.932227 -0.305135 -0.194536 + -0.963497 0.938828 -2.19881 0.880176 -0.456005 0.131715 + -1.00098 0.866192 -2.25074 0.886738 -0.412694 0.208279 + -0.995492 0.872387 -2.27345 0.953943 -0.288193 -0.0832949 + -1.00294 0.879134 -2.30091 0.925387 -0.111381 -0.36229 + -0.968884 0.959752 -2.28037 0.77473 -0.113828 -0.621962 + -0.978927 0.926189 -2.17924 0.752956 -0.639752 0.154192 + -1.01641 0.853552 -2.23117 0.753174 -0.482156 0.447498 + -1.02586 0.785997 -2.26224 0.815901 -0.248553 0.522042 + -1.01861 0.788239 -2.27782 0.939258 -0.18201 0.290975 + -1.01313 0.794434 -2.30052 0.99075 -0.111301 0.0776356 + -0.979065 0.922293 -2.15239 0.807931 -0.559457 -0.185083 + -1.02374 0.898894 -2.187 0.312873 -0.85359 0.416526 + -1.02577 0.850658 -2.22195 0.388857 -0.542864 0.744371 + -1.03522 0.783103 -2.25302 0.481767 -0.320266 0.815678 + -0.972961 0.929833 -2.1305 0.900174 -0.380436 0.212027 + -1.01732 0.840676 -2.13777 0.899668 -0.248521 -0.358937 + -1.02388 0.894998 -2.16015 0.462293 -0.62034 -0.633611 + -1.05913 0.888012 -2.17101 0.251894 -0.67017 -0.698155 + -1.05801 0.890812 -2.18881 0.0859891 -0.913209 0.398315 + -0.951538 0.996494 -2.11812 0.859201 -0.369314 0.354092 + -0.999435 0.931338 -2.09138 0.804647 -0.246179 0.540315 + -1.01351 0.849065 -2.09167 0.913003 -0.197079 0.35719 + -1.01121 0.848216 -2.11588 0.945877 -0.324019 -0.0181096 + -0.933064 1.06342 -2.08687 0.858895 -0.460662 0.223808 + -0.978011 0.997999 -2.079 0.758528 -0.453955 0.467504 + -1.01947 0.932542 -2.06017 0.795258 -0.263178 0.54617 + -0.911168 1.10379 -2.07578 0.80663 -0.588071 0.0593278 + -0.963119 1.03383 -2.04639 0.748008 -0.578389 0.3255 + -0.99361 1.0303 -2.00338 0.615135 -0.625954 0.479364 + -1.0085 0.994477 -2.03599 0.722616 -0.497106 0.480324 + -0.885534 1.13305 -2.07014 0.797171 -0.603043 0.0292839 + -0.941223 1.0742 -2.03529 0.771318 -0.587966 0.243647 + -1.03478 0.996049 -1.99593 0.468903 -0.551507 0.689906 + -1.08136 0.999866 -1.98372 -0.0548452 -0.570719 0.819312 + -1.08197 0.934614 -2.01182 -0.0357968 -0.30742 0.9509 + -1.04575 0.934113 -2.02012 0.540151 -0.332626 0.773044 + -1.05866 0.851156 -2.039 0.465684 -0.1441 0.87314 + -1.03355 0.850267 -2.06046 0.744675 -0.111229 0.658094 + -1.14002 0.999492 -2.00372 -0.428208 -0.490105 0.759233 + -1.14063 0.93424 -2.03183 -0.472585 -0.247653 0.845773 + -1.12967 0.851577 -2.03907 -0.435333 -0.102752 0.894387 + -1.09487 0.851658 -2.03071 -0.0171549 -0.138014 0.990282 + -1.14155 1.04819 -1.96235 -0.444964 -0.499886 0.743049 + -1.18376 1.04641 -1.99763 -0.72388 -0.373934 0.579802 + -1.18223 0.997715 -2.03899 -0.731642 -0.377332 0.567733 + -1.17278 0.933552 -2.05711 -0.757249 -0.227732 0.612137 + -1.13452 1.09271 -1.93472 -0.473356 -0.29061 0.831553 + -1.18087 1.097 -1.97232 -0.786382 -0.145549 0.600349 + -1.20943 1.0394 -2.05198 -0.907324 -0.236158 0.347839 + -1.20455 0.99636 -2.08217 -0.90108 -0.279217 0.331802 + -1.19509 0.932198 -2.10029 -0.924229 -0.21468 0.315773 + -1.12806 1.13932 -1.92108 -0.47885 -0.113127 0.870577 + -1.17441 1.14361 -1.95867 -0.801984 0.0666919 0.593611 + -1.19506 1.154 -2.01062 -0.920036 0.189181 0.343139 + -1.20655 1.08999 -2.02667 -0.935891 -0.0299462 0.351015 + -1.22159 1.03917 -2.09959 -0.98391 -0.117636 0.134473 + -1.04301 1.16262 -1.8932 0.133149 -0.0513431 0.989765 + -1.1199 1.17478 -1.91371 -0.493117 0.0888113 0.865418 + -1.15065 1.19284 -1.94371 -0.71697 0.309258 0.624751 + -1.01556 1.17173 -1.90419 0.760199 -0.0698092 0.645929 + -1.06864 1.19787 -1.89697 -0.0668883 0.269033 0.960805 + -1.08924 1.19869 -1.90469 -0.396321 0.285385 0.872631 + -1.12 1.21675 -1.93469 -0.551201 0.431076 0.714388 + -1.01913 1.22641 -1.96018 0.627543 0.583386 0.515606 + -1.04118 1.20698 -1.90796 0.402937 0.535494 0.742218 + -1.04919 1.23547 -1.93097 0.51686 0.609857 0.600775 + -1.0713 1.23734 -1.91791 0.102608 0.579982 0.808142 + -1.0919 1.23816 -1.92563 -0.405117 0.512916 0.756834 + -1.08209 1.28719 -1.9671 0.201602 0.787771 0.582042 + -1.09677 1.28702 -1.96546 -0.269858 0.725272 0.63337 + -1.12487 1.26561 -1.97452 -0.688063 0.521079 0.505022 + -1.1713 1.20323 -1.99566 -0.841512 0.383715 0.38029 + -1.13795 1.28203 -2.02425 -0.762557 0.584175 0.277931 + -1.18439 1.21965 -2.04539 -0.866383 0.413741 0.279642 + -1.2081 1.16085 -2.06177 -0.952283 0.209359 0.222093 + -1.21353 1.17594 -2.11001 -0.969684 0.200845 0.139194 + -1.21959 1.09684 -2.07782 -0.987542 0.0428089 0.151421 + -1.21609 1.18911 -2.15515 -0.976556 0.180552 0.117213 + -1.22 1.10578 -2.12788 -0.998328 0.0453873 0.0357814 + -1.222 1.04811 -2.14965 -0.999567 -0.0291064 -0.0042963 + -1.21694 0.994661 -2.17261 -0.985818 -0.165691 -0.0266178 + -1.21671 0.996135 -2.12977 -0.974455 -0.197491 0.106937 + -1.22099 1.1938 -2.19952 -0.981535 0.183936 -0.052501 + -1.22256 1.11894 -2.17302 -0.999135 0.0174052 0.037759 + -1.22178 1.05825 -2.19106 -0.99895 -0.0413191 -0.0198028 + -1.19404 1.25944 -2.20913 -0.842281 0.506105 -0.185525 + -1.21118 1.20584 -2.23352 -0.898297 0.250219 -0.361183 + -1.22206 1.14287 -2.21088 -0.990419 0.0363191 -0.13323 + -1.22129 1.08217 -2.22892 -0.98527 0.00674648 -0.170875 + -1.18935 1.22346 -2.2594 -0.719424 0.310921 -0.621094 + -1.21225 1.15491 -2.24488 -0.894669 0.0980596 -0.435835 + -1.21091 1.09261 -2.25966 -0.885664 0.0811615 -0.457179 + -1.21572 1.01392 -2.24892 -0.973416 -0.110442 -0.200661 + -1.21672 1.00479 -2.21402 -0.984798 -0.163603 -0.0583763 + -1.19043 1.15683 -2.27277 -0.690651 0.159853 -0.7053 + -1.18908 1.09453 -2.28755 -0.712265 0.140421 -0.687722 + -1.18713 1.03112 -2.30196 -0.710449 0.0709391 -0.700164 + -1.20533 1.02435 -2.27965 -0.87336 -0.00392701 -0.487059 + -1.16259 1.1687 -2.28979 -0.476371 0.199149 -0.856394 + -1.1678 1.10298 -2.30341 -0.508134 0.186461 -0.840852 + -1.16584 1.03957 -2.31782 -0.506369 0.133145 -0.851976 + -1.15719 0.962818 -2.33057 -0.535158 0.0205648 -0.844501 + -1.17165 0.958611 -2.31734 -0.715913 -0.0580579 -0.695771 + -1.14382 1.12486 -2.30849 -0.171817 0.212831 -0.961864 + -1.14473 1.04282 -2.32601 -0.167486 0.17144 -0.970854 + -1.13607 0.966066 -2.33875 -0.138194 0.121932 -0.982871 + -1.09845 1.04656 -2.32253 0.179509 0.174572 -0.968143 + -1.10097 0.9669 -2.3348 0.191406 0.149956 -0.969988 + -1.12434 0.885013 -2.34828 -0.253533 0.0805339 -0.963969 + -1.13536 0.882297 -2.34008 -0.632201 -0.0214727 -0.774507 + -1.14982 0.878091 -2.32685 -0.769442 -0.0947641 -0.631647 + -1.03711 0.965133 -2.31498 0.356648 0.1458 -0.922792 + -1.04484 0.884987 -2.33197 0.344746 0.158787 -0.925169 + -1.08924 0.885849 -2.34433 0.191035 0.15841 -0.968717 + -1.0868 0.801298 -2.35914 0.169472 0.175315 -0.969816 + -1.11343 0.800102 -2.36117 -0.281418 0.130983 -0.950604 + -1.00071 0.962823 -2.29867 0.46774 0.0829306 -0.879967 + -1.00844 0.882676 -2.31566 0.731944 0.0655467 -0.678204 + -1.0185 0.800157 -2.33354 0.746164 0.10086 -0.658078 + -1.0424 0.800438 -2.34678 0.376242 0.174763 -0.90989 + -1.013 0.796612 -2.3188 0.984096 -0.0173709 -0.176788 + -1.01255 0.714067 -2.33616 0.981993 -0.0676485 -0.176391 + -1.01742 0.713383 -2.35019 0.761943 -0.0199871 -0.647335 + -1.04131 0.713664 -2.36342 0.383081 0.0313276 -0.923183 + -1.01268 0.711888 -2.31788 0.987855 -0.108988 0.110743 + -1.03097 0.61927 -2.31794 0.958563 -0.239018 0.155006 + -1.03061 0.616257 -2.33139 0.955511 -0.269124 -0.120714 + -1.03548 0.615573 -2.34542 0.742011 -0.268425 -0.614302 + -1.01807 0.712229 -2.29628 0.940291 -0.125168 0.316522 + -1.03636 0.619611 -2.29634 0.907352 -0.22889 0.352592 + -1.07254 0.516733 -2.28383 0.823433 -0.33009 0.461518 + -1.06895 0.510228 -2.29484 0.869973 -0.390427 0.301186 + -1.0686 0.507215 -2.30829 0.904745 -0.425569 0.0181301 + -1.02532 0.709987 -2.2807 0.824082 -0.15566 0.544664 + -1.04215 0.62187 -2.28487 0.791337 -0.190151 0.581058 + -1.07832 0.518992 -2.27237 0.694781 -0.297948 0.654604 + -1.10939 0.460482 -2.27852 0.423204 -0.645375 0.635916 + -1.10581 0.453976 -2.28953 0.541849 -0.740229 0.398071 + -1.03409 0.709764 -2.27193 0.494388 -0.175086 0.851425 + -1.05092 0.621647 -2.2761 0.479625 -0.113771 0.870067 + -1.08372 0.521401 -2.2679 0.389703 -0.154769 0.907843 + -1.11479 0.462892 -2.27405 0.179231 -0.531548 0.827848 + -1.14352 0.455873 -2.28276 -0.614396 -0.584942 0.529491 + -1.05814 0.781314 -2.24839 0.106915 -0.323176 0.94028 + -1.05701 0.707977 -2.2673 0.117343 -0.162842 0.979649 + -1.06858 0.62142 -2.27269 0.105327 -0.0159405 0.99431 + -1.10138 0.521175 -2.26449 0.0961818 -0.0634178 0.993341 + -1.13594 0.461731 -2.2739 -0.284397 -0.475026 0.832748 + -1.06003 0.842575 -2.22376 0.0480452 -0.477106 0.877531 + -1.09638 0.779218 -2.24812 -0.146904 -0.316047 0.937301 + -1.09232 0.706041 -2.26706 -0.147655 -0.149629 0.977655 + -1.10388 0.619483 -2.27244 -0.159453 0.0332052 0.986647 + -1.12253 0.520015 -2.26434 -0.155235 -0.00723967 0.987851 + -1.09827 0.840477 -2.22349 -0.160293 -0.437186 0.884972 + -1.12168 0.778896 -2.25693 -0.567481 -0.297125 0.767908 + -1.11761 0.705719 -2.27586 -0.585134 -0.117937 0.802315 + -1.12317 0.616935 -2.27891 -0.586304 0.0930942 0.804724 + -1.14182 0.517466 -2.27081 -0.588514 0.0556494 0.806569 + -1.10266 0.89077 -2.19775 -0.197894 -0.879598 0.432603 + -1.13814 0.898036 -2.20703 -0.464844 -0.809113 0.359521 + -1.13375 0.847744 -2.23277 -0.574906 -0.38876 0.719965 + -1.13618 0.782888 -2.27523 -0.856429 -0.239476 0.457362 + -1.13074 0.704483 -2.29328 -0.87211 -0.063217 0.485208 + -1.10379 0.887968 -2.17995 0.060497 -0.673013 -0.737153 + -1.14087 0.89487 -2.18415 -0.0875418 -0.608867 -0.788427 + -1.18263 0.925247 -2.21716 -0.622278 -0.778185 0.0848483 + -1.14825 0.851736 -2.25108 -0.786011 -0.394068 0.476337 + -1.14342 0.784636 -2.29323 -0.964957 -0.187838 0.183233 + -1.06094 0.833172 -2.1651 0.279115 -0.124189 -0.952193 + -1.10412 0.833077 -2.17534 0.161889 -0.102368 -0.981485 + -1.14119 0.839975 -2.17954 -0.229248 -0.208736 -0.950723 + -1.18536 0.92208 -2.19428 -0.57468 -0.717364 -0.393868 + -1.02568 0.840159 -2.15425 0.655604 -0.151227 -0.739806 + -1.03748 0.769849 -2.14484 0.687521 -0.151285 -0.710231 + -1.06227 0.770162 -2.15765 0.34487 -0.126877 -0.930036 + -1.10545 0.770067 -2.16789 0.106903 -0.140537 -0.984287 + -1.02911 0.770366 -2.12836 0.942205 -0.142091 -0.303413 + -1.03297 0.696732 -2.12049 0.945662 -0.111886 -0.305296 + -1.04073 0.698706 -2.13558 0.712414 -0.10528 -0.693817 + -1.06553 0.699021 -2.1484 0.349788 -0.081262 -0.933298 + -1.02616 0.76936 -2.10888 0.992449 -0.118358 -0.032174 + -1.03002 0.695723 -2.10101 0.993768 -0.106764 -0.0320364 + -1.04637 0.599478 -2.10967 0.978674 -0.197789 -0.0554709 + -1.04869 0.601661 -2.12474 0.934463 -0.159424 -0.318376 + -1.05645 0.603637 -2.13983 0.704596 -0.080267 -0.705054 + -1.02846 0.770206 -2.08467 0.944851 -0.0875422 0.315585 + -1.03207 0.692305 -2.07887 0.945868 -0.103481 0.307612 + -1.04842 0.596061 -2.08753 0.931367 -0.236396 0.276896 + -1.0416 0.768826 -2.06282 0.762627 -0.0432898 0.645388 + -1.04521 0.690924 -2.05702 0.760141 -0.0851726 0.644152 + -1.05861 0.59312 -2.07063 0.757117 -0.258057 0.60015 + -1.077 0.479988 -2.11589 0.885547 -0.409332 0.219669 + -1.06671 0.769714 -2.04136 0.441229 -0.018642 0.897201 + -1.06833 0.687077 -2.03744 0.44869 -0.0766497 0.890394 + -1.08172 0.589274 -2.05105 0.444696 -0.258233 0.857648 + -1.1015 0.474666 -2.08687 0.434987 -0.457791 0.77538 + -1.08718 0.477048 -2.099 0.716515 -0.446151 0.536242 + -1.0955 0.768938 -2.03512 -0.0096505 -0.00163475 0.999952 + -1.09711 0.686301 -2.0312 -0.00672013 -0.0519661 0.998626 + -1.10408 0.587688 -2.04625 0.00189308 -0.226072 0.974109 + -1.12386 0.47308 -2.08207 -0.00682588 -0.426211 0.904598 + -1.12617 0.418888 -2.11867 0.143104 -0.873915 0.464536 + -1.13029 0.768856 -2.04348 -0.442236 6.37393e-006 0.896899 + -1.12924 0.686226 -2.03891 -0.428091 -0.032047 0.903167 + -1.13621 0.587613 -2.05397 -0.432652 -0.164941 0.886344 + -1.14375 0.473033 -2.08685 -0.413464 -0.365003 0.834158 + -1.14607 0.418842 -2.12345 -0.415151 -0.834933 0.361298 + -1.15321 0.769489 -2.06168 -0.790741 -0.0193701 0.611845 + -1.15215 0.686861 -2.05711 -0.785308 -0.0153978 0.618914 + -1.15403 0.589054 -2.06807 -0.785343 -0.0895455 0.612551 + -1.16158 0.474473 -2.10095 -0.783567 -0.26617 0.561405 + -1.16182 0.850889 -2.06436 -0.789171 -0.111564 0.603956 + -1.16603 0.768546 -2.09129 -0.966794 -0.0468868 0.25122 + -1.16406 0.690491 -2.08423 -0.964123 -0.0053059 0.265404 + -1.16595 0.592685 -2.09518 -0.965689 -0.0179263 0.259082 + -1.16896 0.476723 -2.11774 -0.954937 -0.18294 0.233728 + -1.17464 0.849946 -2.09397 -0.940809 -0.148815 0.304521 + -1.16863 0.769838 -2.11595 -0.989999 -0.098763 -0.100731 + -1.16666 0.691784 -2.10889 -0.994627 -0.00561677 -0.103375 + -1.16799 0.595484 -2.11426 -0.994743 0.032077 -0.0972466 + -1.20206 0.931056 -2.13466 -0.965125 -0.24409 0.0946233 + -1.18161 0.848802 -2.12835 -0.975642 -0.210354 -0.0622393 + -1.16113 0.769041 -2.13784 -0.883528 -0.140874 -0.446691 + -1.1598 0.695065 -2.1289 -0.895884 -0.0166744 -0.443975 + -1.16114 0.598766 -2.13427 -0.896871 0.0678782 -0.437052 + -1.20229 0.929581 -2.1775 -0.910707 -0.382372 -0.156217 + -1.17411 0.848005 -2.15023 -0.855011 -0.2943 -0.427018 + -1.14987 0.770103 -2.1543 -0.714222 -0.15701 -0.682081 + -1.14854 0.696128 -2.14536 -0.728383 -0.0255434 -0.684694 + -1.1524 0.601022 -2.147 -0.7351 0.0812548 -0.673072 + -1.19733 0.936526 -2.23764 -0.910781 -0.412197 -0.0239214 + -1.15718 0.840503 -2.16701 -0.664751 -0.3096 -0.679893 + -1.19632 0.945651 -2.27253 -0.938886 -0.264204 -0.220656 + -1.16377 0.867801 -2.29013 -0.944612 -0.271212 -0.184802 + -1.16295 0.863015 -2.27155 -0.908683 -0.389057 0.151425 + -1.18985 0.951844 -2.29503 -0.858413 -0.157394 -0.488215 + -1.1573 0.873995 -2.31263 -0.890423 -0.18813 -0.414433 + -1.1409 0.791504 -2.32781 -0.934481 -0.0598672 -0.350944 + -1.14423 0.789423 -2.31181 -0.985035 -0.132769 -0.109896 + -1.13343 0.795599 -2.34203 -0.830751 -0.00657771 -0.556605 + -1.12802 0.707751 -2.35849 -0.829548 0.0253955 -0.557858 + -1.13513 0.707759 -2.34495 -0.936996 0.0127874 -0.349106 + -1.13845 0.705678 -2.32895 -0.995218 -0.00478094 -0.0975668 + -1.13797 0.70623 -2.31128 -0.981244 -0.0370933 0.189168 + -1.12445 0.797383 -2.35297 -0.69148 0.0503562 -0.720639 + -1.11905 0.709535 -2.36943 -0.687322 0.0365727 -0.725432 + -1.12515 0.607935 -2.36061 -0.677289 -0.0719191 -0.732193 + -1.13219 0.609351 -2.35256 -0.821535 -0.024576 -0.569628 + -1.1393 0.60936 -2.33903 -0.932397 0.0198639 -0.36089 + -1.10876 0.709872 -2.37723 -0.264773 0.0421609 -0.963389 + -1.11486 0.60827 -2.36842 -0.25921 -0.160316 -0.952423 + -1.13409 0.49291 -2.33262 -0.268775 -0.384067 -0.883319 + -1.14039 0.494966 -2.32864 -0.668861 -0.258289 -0.697073 + -1.14743 0.496383 -2.32059 -0.816314 -0.21488 -0.536151 + -1.08213 0.711068 -2.3752 0.1795 0.038333 -0.983011 + -1.09444 0.609757 -2.36693 0.18542 -0.210577 -0.959832 + -1.11368 0.494398 -2.33113 0.20415 -0.437528 -0.875724 + -1.13274 0.444378 -2.30264 -0.110693 -0.941104 -0.319485 + -1.13903 0.446433 -2.29866 -0.516098 -0.853304 -0.0742616 + -1.05363 0.612355 -2.35515 0.393394 -0.239989 -0.887494 + -1.08943 0.499476 -2.32516 0.388475 -0.452992 -0.802425 + -1.10849 0.449455 -2.29667 0.435325 -0.89232 -0.119399 + -1.14351 0.450377 -2.29177 -0.659804 -0.72715 0.189505 + -1.07128 0.502696 -2.31543 0.753702 -0.506603 -0.418673 + -1.15469 0.502829 -2.30192 -0.993581 -0.0799511 -0.0800288 + -1.15191 0.500329 -2.31369 -0.929023 -0.120917 -0.349708 + -1.14208 0.61186 -2.32725 -0.991341 0.0601525 -0.116724 + -1.15469 0.508324 -2.29292 -0.983315 0.00974674 0.181647 + -1.14159 0.612412 -2.30958 -0.978726 0.0985513 0.179955 + -1.1363 0.615698 -2.29634 -0.876296 0.108311 0.469441 + -1.1494 0.511608 -2.27968 -0.85582 0.0211998 0.516839 + -1.13389 0.769575 -2.16683 -0.332162 -0.167181 -0.928288 + -1.13383 0.698417 -2.15678 -0.340758 -0.0530967 -0.93865 + -1.13769 0.60331 -2.15842 -0.343528 0.0724807 -0.936341 + -1.10539 0.69891 -2.15785 0.103182 -0.0690151 -0.992265 + -1.1156 0.604282 -2.15922 0.09669 0.0416671 -0.994442 + -1.14892 0.485228 -2.16902 -0.351338 -0.0311122 -0.935732 + -1.15803 0.483812 -2.16194 -0.72097 -0.0421274 -0.691685 + -1.16676 0.481555 -2.14921 -0.888763 -0.0654538 -0.45367 + -1.07573 0.604393 -2.14977 0.35174 0.0034731 -0.936091 + -1.10213 0.486269 -2.16396 0.339424 -0.0902265 -0.936296 + -1.12682 0.4862 -2.16981 0.102029 -0.0502667 -0.993511 + -1.14009 0.424542 -2.15971 -0.129369 -0.650949 -0.748016 + -1.1492 0.423124 -2.15263 -0.51305 -0.709021 -0.483806 + -1.08285 0.485512 -2.15402 0.681322 -0.204196 -0.702925 + -1.1154 0.424609 -2.15386 0.371179 -0.692332 -0.61879 + -1.15345 0.42109 -2.14024 -0.643329 -0.760089 -0.0916043 + -1.17101 0.479522 -2.13682 -0.984385 -0.113959 -0.134165 + -1.07804 0.484288 -2.14468 0.889978 -0.307993 -0.336272 + -1.11059 0.423385 -2.14451 0.561725 -0.794749 -0.229867 + -1.07573 0.482105 -2.12961 0.92925 -0.360716 -0.0798683 + -1.11186 0.421268 -2.1308 0.520977 -0.842635 0.136198 + -0.82689 1.29929 -2.95643 0.617033 0.112407 -0.778867 + -0.803656 1.18343 -2.94072 0.894638 0.0821922 -0.439167 + -0.830034 1.19612 -2.97807 0.575668 0.130191 -0.807252 + -0.863031 1.19676 -2.98754 0.0166199 0.127931 -0.991644 + -0.807811 1.06184 -2.97689 0.813349 0.110984 -0.571092 + -0.829019 1.06609 -2.99239 0.448895 0.146127 -0.881556 + -0.862015 1.06673 -3.00185 0.0786585 0.166031 -0.982978 + -0.849719 0.941343 -3.02531 0.0819267 0.201683 -0.976018 + -0.794835 1.04874 -2.94176 0.979301 0.0348408 -0.199389 + -0.798052 0.929471 -2.98389 0.970016 0.0461573 -0.238617 + -0.807629 0.936939 -3.00444 0.786653 0.140009 -0.601311 + -0.828837 0.941197 -3.01994 0.43165 0.200252 -0.879533 + -0.843533 0.816506 -3.05207 0.0783337 0.171048 -0.982144 + -0.795305 0.91505 -2.94799 0.995247 -0.057503 0.0785865 + -0.798724 0.797702 -2.99535 0.996104 -0.0539096 0.0697939 + -0.800369 0.806341 -3.01686 0.969461 0.0372879 -0.242393 + -0.809946 0.813808 -3.03741 0.778168 0.12367 -0.61576 + -0.822651 0.81636 -3.04669 0.433601 0.172667 -0.884407 + -0.804682 0.788575 -2.97448 0.872766 -0.186689 0.451029 + -0.805048 0.714447 -3.00096 0.881252 -0.124899 0.455846 + -0.801237 0.720285 -3.01431 0.99601 -0.0639239 0.0622769 + -0.802882 0.728925 -3.03582 0.957643 -0.0363168 -0.285659 + -0.809008 0.733702 -3.04896 0.761482 -0.0171783 -0.647958 + -0.815622 0.709411 -2.99118 0.654729 -0.166238 0.737356 + -0.807446 0.681117 -3.00185 0.834553 -0.416012 0.361185 + -0.803635 0.686956 -3.0152 0.92744 -0.370181 -0.0531234 + -0.804799 0.693068 -3.03042 0.872678 -0.351701 -0.338731 + -0.810925 0.697845 -3.04357 0.669432 -0.359414 -0.650141 + -0.823056 0.706647 -2.98622 0.458703 -0.203063 0.865076 + -0.814927 0.677555 -2.99494 0.659907 -0.466328 0.589118 + -0.819794 0.667873 -3.01333 0.486103 -0.860276 -0.15372 + -0.820959 0.673984 -3.02855 0.422828 -0.775228 -0.469296 + -0.829896 0.705212 -2.98435 0.077535 -0.248857 0.965432 + -0.822361 0.674792 -2.98997 0.462891 -0.501642 0.730813 + -0.827276 0.664309 -3.00642 0.317967 -0.947171 0.0420035 + -0.829948 0.675789 -3.03512 0.171503 -0.756659 -0.630915 + -0.819914 0.699651 -3.05013 0.37952 -0.37678 -0.844986 + -0.838616 0.673413 -2.9905 -0.194177 -0.541105 0.818231 + -0.827201 0.673775 -2.98865 0.11899 -0.537847 0.834603 + -0.832115 0.663293 -3.0051 0.0671628 -0.987654 0.141525 + -0.848286 0.671955 -3.03015 -0.208749 -0.833694 -0.511251 + -0.852695 0.673826 -2.99489 -0.408041 -0.55183 0.727314 + -0.846194 0.663707 -3.00949 -0.21056 -0.976556 0.0447526 + -0.864359 0.676199 -3.00349 -0.69588 -0.578278 0.425847 + -0.851447 0.667225 -3.01935 -0.318841 -0.903232 -0.287251 + -0.869612 0.679716 -3.01335 -0.820938 -0.567324 0.0648371 + -0.870874 0.684691 -3.02581 -0.789372 -0.543081 -0.286279 + -0.867713 0.689422 -3.03662 -0.685388 -0.5203 -0.509442 + -0.862675 0.693595 -3.0456 -0.533849 -0.493039 -0.686963 + -0.843098 0.674141 -3.03424 -0.0384283 -0.784368 -0.619105 + -0.857487 0.695782 -3.0497 -0.296759 -0.452413 -0.840985 + -0.846422 0.698094 -3.0527 -0.0778333 -0.423467 -0.902562 + -0.833272 0.699745 -3.05357 0.107 -0.398343 -0.910974 + -0.864723 0.731701 -3.05745 -0.413359 -0.105227 -0.904468 + -0.853658 0.734015 -3.06045 -0.154796 -0.063681 -0.985892 + -0.835072 0.736347 -3.06168 0.096749 -0.0343065 -0.994717 + -0.821714 0.736253 -3.05825 0.4175 -0.0164649 -0.908528 + -0.86212 0.814174 -3.05083 -0.183754 0.14366 -0.972418 + -0.070894 2.02181 -3.02604 -0.351185 -0.486508 -0.799987 + -0.040846 2.03476 -3.07187 -0.372013 -0.802254 -0.4669 + -0.080403 2.00708 -3.02372 -0.558122 0.235277 -0.795704 + -0.030826 2.04626 -3.10218 -0.309191 -0.850815 -0.424871 + -1.1518 1.21652 -1.61535 0.813943 0.53967 0.215065 + -1.16328 1.23237 -1.62663 0.616382 0.766541 0.180245 + -1.17721 1.24002 -1.59409 0.691274 0.67049 0.269413 + -1.14452 1.22624 -1.65987 0.710171 0.627744 0.318738 + -1.17429 1.24694 -1.67216 0.188218 0.975681 0.11234 + -1.19304 1.25307 -1.63892 0.083585 0.996385 0.015198 + -1.19615 1.24703 -1.59924 0.0373945 0.968421 0.246499 + -1.18233 1.23731 -1.58105 0.412191 0.831347 0.372773 + -1.16573 1.22416 -1.58282 0.700347 0.634798 0.326414 + -1.14814 1.19983 -1.59413 0.864129 0.455547 0.213911 + -1.12654 1.17353 -1.6363 0.875409 0.430507 0.219824 + -1.14016 1.21833 -1.66015 0.831478 0.448836 0.327399 + -1.16642 1.2016 -1.54698 0.717277 0.584391 0.379476 + -1.15433 1.20203 -1.57527 0.828044 0.486586 0.278527 + -1.13279 1.16309 -1.58257 0.864448 0.461387 0.199629 + -1.12289 1.15684 -1.61507 0.867814 0.459347 0.18947 + -1.17154 1.19889 -1.53394 0.721351 0.623456 0.301588 + -1.15501 1.17947 -1.53944 0.797235 0.557655 0.231165 + -1.1396 1.16384 -1.55976 0.828252 0.508773 0.234838 + -1.13898 1.16529 -1.56371 0.841758 0.469011 0.267341 + -1.18622 1.21333 -1.53064 0.144157 0.779501 0.609587 + -1.17515 1.19341 -1.50857 0.166792 0.669407 0.72393 + -1.16047 1.17898 -1.51187 0.726234 0.6837 0.0716787 + -1.14895 1.16741 -1.52325 0.744014 0.665116 0.0637527 + -1.13354 1.15178 -1.54357 0.741743 0.66919 0.0447282 + -1.20004 1.22305 -1.54884 -0.245882 0.825386 0.508213 + -1.22353 1.20559 -1.54599 -0.492435 0.631944 0.59846 + -1.1988 1.18236 -1.51373 -0.413272 0.316245 0.853929 + -1.17096 1.17815 -1.50282 -0.236947 0.209962 0.948563 + -1.13805 1.15763 -1.49276 0.478373 0.620586 0.621315 + -1.2268 1.23779 -1.60672 -0.462326 0.854276 0.237628 + -1.2503 1.22033 -1.60387 -0.595991 0.753614 0.277239 + -1.26994 1.18244 -1.56291 -0.607054 0.584953 0.53788 + -1.24521 1.15922 -1.53065 -0.467365 0.262882 0.844075 + -1.2237 1.24384 -1.6464 -0.351053 0.935219 0.0461254 + -1.25515 1.22844 -1.65651 -0.595962 0.800467 0.0638908 + -1.27484 1.19579 -1.60417 -0.685577 0.687122 0.240517 + -1.21478 1.24832 -1.69966 -0.218898 0.975726 -0.0064918 + -1.24624 1.23292 -1.70978 -0.563604 0.821039 -0.0908034 + -1.27969 1.20389 -1.65681 -0.731631 0.680197 0.045267 + -1.30767 1.16744 -1.61603 -0.748444 0.646171 0.149315 + -1.15936 1.24648 -1.6915 0.0740504 0.994067 0.0796742 + -1.19986 1.24786 -1.719 0.135244 0.981135 0.13814 + -1.19101 1.25262 -1.75145 -0.245512 0.969061 -0.0253769 + -1.22682 1.23532 -1.76812 -0.520721 0.822891 -0.227374 + -1.27636 1.20376 -1.71496 -0.724124 0.678678 -0.122643 + -1.14441 1.24339 -1.68242 0.475142 0.795742 0.375546 + -1.14064 1.24395 -1.68931 0.632451 0.766567 -0.111269 + -1.15559 1.24705 -1.69839 0.233247 0.968775 0.0840832 + -1.14674 1.25181 -1.73084 0.124247 0.938051 0.323456 + -1.14005 1.23548 -1.6827 0.773546 0.460447 0.435449 + -1.1216 1.21657 -1.69108 0.683372 0.55418 0.475276 + -1.11538 1.23673 -1.7187 0.460284 0.699311 0.546903 + -1.12011 1.26981 -1.78105 0.0104717 0.993792 0.110756 + -1.12101 1.20809 -1.68446 0.735095 0.457936 0.49993 + -1.08343 1.1595 -1.69198 0.731326 0.491405 0.472951 + -1.0772 1.17965 -1.71961 0.780871 0.436186 0.447193 + -1.08338 1.23484 -1.76714 0.861807 0.388328 0.326329 + -1.08874 1.25473 -1.76892 0.693427 0.627103 0.354825 + -1.12257 1.19901 -1.67431 0.765491 0.439672 0.4698 + -1.08845 1.16054 -1.68583 0.702295 0.491362 0.515116 + -1.10764 1.15354 -1.6541 0.743204 0.493837 0.451412 + -1.09001 1.15145 -1.67567 0.666241 0.516837 0.53759 + -1.07935 1.13428 -1.67115 0.558308 0.73313 0.388346 + -1.06831 1.13347 -1.6858 0.559514 0.731183 0.390275 + -1.12523 1.17286 -1.63994 0.843722 0.440262 0.307087 + -1.10786 1.13774 -1.63375 0.676676 0.692175 0.251005 + -1.09697 1.13638 -1.64958 0.572945 0.733106 0.366456 + -1.09287 1.13322 -1.6451 0.234372 0.967523 0.0947054 + -1.07244 1.1308 -1.6701 0.214581 0.972135 0.0943862 + -1.10917 1.13841 -1.6301 0.744588 0.64682 0.164962 + -1.10375 1.13459 -1.62927 0.313406 0.946367 0.0785241 + -1.11518 1.14157 -1.61069 0.795907 0.588065 0.143917 + -1.10792 1.13486 -1.61614 0.396428 0.916976 0.0447292 + -1.09318 1.13501 -1.59889 -0.0225756 0.998791 -0.0436686 + -1.06772 1.13385 -1.63014 -0.0166203 0.996653 -0.0800437 + -1.12508 1.14782 -1.57819 0.802741 0.578767 0.143649 + -1.11393 1.13803 -1.59673 0.516961 0.854926 0.0430419 + -1.09734 1.13528 -1.58575 0.00605762 0.999704 -0.0235447 + -1.05145 1.14076 -1.55772 0.0269644 0.997118 0.0709071 + -1.026 1.1396 -1.58897 0.0133328 0.998487 -0.0533424 + -1.13034 1.15099 -1.56329 0.768774 0.601694 0.216682 + -1.12257 1.14348 -1.56836 0.685363 0.723943 0.0786301 + -1.11314 1.13602 -1.57487 0.342866 0.939144 0.0212346 + -1.10211 1.13791 -1.52383 0.0537726 0.994806 0.0864288 + -1.13097 1.14954 -1.55934 0.581345 0.772665 0.255004 + -1.12783 1.14665 -1.55347 0.646818 0.76134 0.0445799 + -1.12178 1.14147 -1.54651 0.60311 0.797592 0.0102085 + -1.11791 1.13865 -1.51295 0.427715 0.898547 0.0983524 + -1.1046 1.13139 -1.49304 0.434298 0.415728 0.799096 + -1.1304 1.14888 -1.5377 0.672577 0.739937 -0.01153 + -1.12653 1.14606 -1.50415 0.775354 0.591616 0.220947 + -1.13386 1.14237 -1.48701 0.221928 0.293768 0.929757 + -1.11446 1.10698 -1.49489 0.29937 -0.314541 0.9008 + -1.05394 1.13424 -1.52692 0.428142 0.558098 0.710789 + -1.14372 1.11795 -1.48887 -0.186679 -0.223078 0.956759 + -1.12869 1.08069 -1.50374 0.232113 -0.536397 0.81142 + -1.09287 1.10325 -1.50889 0.492498 -0.3841 0.780969 + -1.03235 1.13051 -1.54092 0.552382 0.337196 0.762347 + -0.999891 1.13813 -1.5774 0.481411 0.796235 0.366406 + -1.17155 1.12216 -1.49978 -0.30745 -0.0241445 0.951258 + -1.17813 1.08863 -1.50066 -0.136299 -0.130837 0.98199 + -1.17566 1.04028 -1.52032 0.171254 -0.555759 0.813513 + -1.05405 1.09393 -1.54388 0.439416 -0.581948 0.684288 + -1.01822 1.11649 -1.54903 0.625466 -0.141629 0.76729 + -1.25178 1.12568 -1.53153 -0.390272 0.0428611 0.919701 + -1.2251 1.04822 -1.51723 -0.21691 -0.174327 0.9605 + -1.26669 0.996962 -1.53783 -0.257195 -0.133228 0.957132 + -1.15987 1.02611 -1.5406 0.331425 -0.504712 0.797134 + -1.28649 1.12987 -1.54719 -0.534693 0.204524 0.819922 + -1.2598 1.05241 -1.5329 -0.440201 -0.00444185 0.897888 + -1.30278 1.15409 -1.57476 -0.672972 0.52839 0.517602 + -1.31696 1.10538 -1.56332 -0.643491 0.133371 0.753745 + -1.32384 1.04994 -1.56825 -0.636775 -0.00811588 0.771007 + -1.33324 1.12961 -1.59089 -0.837511 0.404491 0.367372 + -1.35127 1.06406 -1.60065 -0.9218 0.108571 0.372151 + -1.3307 0.948515 -1.57777 -0.655872 -0.0559886 0.752793 + -1.33758 1.12621 -1.6301 -0.909445 0.414581 0.032126 + -1.35561 1.06066 -1.63986 -0.987661 0.155767 0.0161997 + -1.36051 0.965594 -1.63921 -0.999318 0.0347534 0.0124411 + -1.35813 0.962637 -1.61017 -0.92529 0.0114431 0.379088 + -1.30765 1.16858 -1.66663 -0.79448 0.607075 -0.0161678 + -1.33756 1.12735 -1.6807 -0.909474 0.413124 -0.0467562 + -1.353 1.05999 -1.68694 -0.986757 0.139214 -0.083241 + -1.30432 1.16844 -1.72478 -0.784255 0.599512 -0.159781 + -1.33158 1.12212 -1.74451 -0.892684 0.393691 -0.219369 + -1.34702 1.05476 -1.75074 -0.965512 0.104425 -0.2385 + -1.3467 0.967896 -1.74254 -0.955544 -0.0526543 -0.290109 + -1.35789 0.964919 -1.68628 -0.991809 0.0181614 -0.126428 + -1.25695 1.20615 -1.7733 -0.691642 0.673097 -0.261861 + -1.28331 1.16656 -1.78776 -0.753806 0.587742 -0.29383 + -1.31057 1.12024 -1.80749 -0.837042 0.364792 -0.407784 + -1.32535 1.05232 -1.80703 -0.887057 0.0773299 -0.455137 + -1.19359 1.23505 -1.82475 -0.419456 0.854243 -0.307125 + -1.22478 1.21164 -1.8386 -0.582233 0.722302 -0.373208 + -1.25114 1.17205 -1.85306 -0.701379 0.518325 -0.489292 + -1.26801 1.1126 -1.87214 -0.745186 0.26811 -0.610586 + -1.28279 1.04467 -1.87168 -0.763994 0.0206289 -0.644893 + -1.15778 1.25235 -1.80808 -0.310736 0.925767 -0.215405 + -1.13853 1.24819 -1.84913 -0.215625 0.874465 -0.434531 + -1.16126 1.22772 -1.86882 -0.294339 0.773852 -0.560819 + -1.19245 1.20432 -1.88267 -0.40641 0.656733 -0.635242 + -1.21375 1.16608 -1.89675 -0.521956 0.457768 -0.719729 + -1.10086 1.26565 -1.8221 0.078099 0.936389 -0.342164 + -1.10685 1.23112 -1.87862 0.137703 0.772327 -0.62012 + -1.12959 1.21066 -1.89831 -0.109243 0.611496 -0.78367 + -1.16024 1.18686 -1.90753 -0.181874 0.482633 -0.856731 + -1.18154 1.14862 -1.92161 -0.221684 0.362805 -0.905112 + -1.08652 1.26484 -1.8125 0.662975 0.739671 -0.115547 + -1.09251 1.23031 -1.86901 0.523146 0.726083 -0.446231 + -1.08924 1.199 -1.90521 0.226763 0.361181 -0.904504 + -1.1199 1.1752 -1.91443 0.0693779 0.255317 -0.964365 + -1.12806 1.14005 -1.92234 0.143658 0.236854 -0.960865 + -1.08115 1.24495 -1.81071 0.913911 0.403845 -0.0409388 + -1.07628 1.23323 -1.82709 0.716987 0.673658 -0.179208 + -1.08764 1.2186 -1.8854 -0.0570125 0.793379 -0.606052 + -1.06864 1.19837 -1.89783 0.479789 0.439876 -0.759152 + -1.07014 1.21301 -1.77236 0.885817 0.393767 0.24551 + -1.06911 1.22632 -1.80518 0.872861 0.475095 0.111347 + -1.05986 1.21106 -1.85611 0.805129 0.593015 -0.0100665 + -1.06703 1.21797 -1.87802 0.62398 0.680078 -0.384894 + -1.06396 1.15782 -1.72483 0.827478 0.429376 0.361824 + -1.05999 1.17763 -1.76494 0.910434 0.353712 0.21447 + -1.05896 1.19094 -1.79776 0.929684 0.342674 0.135138 + -1.05943 1.14206 -1.71456 0.366442 0.819707 0.440228 + -1.05545 1.16187 -1.75467 0.590011 0.717794 0.369674 + -1.05414 1.17831 -1.79423 0.653776 0.706785 0.270245 + -1.05504 1.19843 -1.85259 0.541744 0.647105 0.53644 + -1.06328 1.13243 -1.69196 0.321215 0.903325 0.284297 + -1.05648 1.14191 -1.71326 -0.373283 0.869794 0.322675 + -1.05115 1.15936 -1.75153 -0.231955 0.894033 0.383278 + -1.04984 1.1758 -1.7911 0.138394 0.940918 0.309065 + -1.06034 1.13228 -1.69065 -0.0676292 0.936335 0.344534 + -1.04408 1.15099 -1.71148 -0.525715 0.74924 0.40282 + -1.03874 1.16844 -1.74975 -0.590614 0.781073 0.202731 + -1.03559 1.17519 -1.79432 -0.106554 0.992456 0.0606458 + -1.04079 1.19782 -1.85581 0.622197 0.782675 -0.0170445 + -1.0614 1.12998 -1.68476 0.128998 0.96563 0.225652 + -1.03405 1.1332 -1.68362 -0.214049 0.838197 0.501606 + -1.03005 1.14648 -1.69451 -0.391976 0.650539 0.650502 + -1.00964 1.18895 -1.7286 -0.388124 0.874277 0.291546 + -1.00648 1.1957 -1.77317 -0.1889 0.97201 -0.139694 + -1.04729 1.13142 -1.65514 -0.0217426 0.996611 -0.0793298 + -1.03512 1.1309 -1.67772 -0.09636 0.98406 0.149465 + -0.986618 1.13712 -1.671 -0.200551 0.802443 0.562019 + -0.982616 1.1504 -1.68189 -0.144633 0.674377 0.724084 + -0.995607 1.18444 -1.71163 -0.203481 0.773205 0.600623 + -0.999435 1.13483 -1.64199 0.0095085 0.998627 -0.051512 + -0.98726 1.13431 -1.66458 -0.0946696 0.976705 0.192575 + -0.961984 1.1384 -1.66464 0.176129 0.824478 0.537786 + -0.960015 1.15492 -1.68632 0.244961 0.722833 0.646147 + -0.973007 1.18895 -1.71607 0.162 0.881003 0.44451 + -0.973326 1.13336 -1.63041 0.460189 0.8677 0.187942 + -0.962626 1.13559 -1.65822 0.419187 0.849423 0.320568 + -1.04301 1.16369 -1.89506 0.641505 0.209774 -0.737879 + -1.05117 1.12854 -1.90297 0.46863 0.0867594 -0.879124 + -1.01517 1.16314 -1.85303 0.560835 0.672519 -0.482889 + -0.988936 1.16213 -1.8385 0.40744 0.716395 -0.566366 + -0.977838 1.14693 -1.8422 0.723758 0.222992 -0.65303 + -0.998882 1.12702 -1.86773 0.690737 0.0460577 -0.721638 + -1.07232 1.0927 -1.91396 0.428812 -0.130145 -0.89397 + -0.980251 1.19469 -1.75863 0.12658 0.989644 -0.0676923 + -0.94695 1.18602 -1.7729 0.48833 0.832204 -0.262622 + -0.935851 1.17081 -1.7766 0.878816 0.325905 -0.348523 + -0.935857 1.13387 -1.77346 0.92725 -0.19477 -0.319799 + -0.956901 1.11396 -1.79899 0.821214 -0.339429 -0.45869 + -0.939705 1.18028 -1.73033 0.675076 0.686576 0.269973 + -0.931083 1.16012 -1.73146 0.960105 0.197341 0.198129 + -0.931089 1.12317 -1.72831 0.980433 -0.174479 0.091144 + -0.961336 1.05217 -1.72489 0.895242 -0.440978 -0.0638771 + -0.957499 1.15374 -1.6868 0.63839 0.543671 0.544868 + -0.948877 1.13357 -1.68792 0.894693 0.164174 0.415416 + -0.9502 1.09972 -1.68082 0.931964 -0.189302 0.309205 + -0.980447 1.02872 -1.6774 0.856722 -0.427014 0.289285 + -0.959468 1.13722 -1.66512 0.757239 0.449467 0.473888 + -0.958693 1.12583 -1.66401 0.923881 0.0713782 0.375965 + -0.960016 1.09198 -1.65691 0.935204 -0.231583 0.267885 + -1.00444 1.01455 -1.64558 0.757798 -0.465029 0.4577 + -1.03712 0.93285 -1.67943 0.807823 -0.506017 0.302273 + -0.961898 1.13456 -1.65811 0.8641 0.342155 0.369136 + -0.961123 1.12317 -1.657 0.93835 0.0745864 0.337544 + -0.966322 1.11954 -1.63973 0.943453 0.125872 0.30668 + -0.965214 1.08835 -1.63965 0.922635 -0.248744 0.294739 + -0.972599 1.13233 -1.6303 0.852504 0.403099 0.332789 + -0.979487 1.11131 -1.59494 0.883959 -0.0678965 0.462608 + -0.992963 1.08999 -1.58691 0.679336 -0.410759 0.608095 + -0.97869 1.06703 -1.63161 0.808976 -0.460306 0.365617 + -0.985764 1.1241 -1.58551 0.819341 0.247266 0.517242 + -1.03826 1.07976 -1.56416 0.446988 -0.513588 0.732413 + -1.02023 1.03424 -1.60761 0.592786 -0.493577 0.636385 + -1.06552 1.02402 -1.58486 0.431567 -0.465307 0.772812 + -1.1043 0.977292 -1.58919 0.430605 -0.403009 0.807566 + -1.04598 0.98177 -1.62157 0.593446 -0.47395 0.650533 + -1.08365 0.92021 -1.6318 0.484688 -0.463338 0.741886 + -1.06112 0.918685 -1.64761 0.650244 -0.484492 0.585192 + -1.19864 0.979392 -1.54493 0.212781 -0.24088 0.946943 + -1.21682 0.926985 -1.55393 0.249666 -0.307984 0.918048 + -1.14197 0.915734 -1.59942 0.445605 -0.417303 0.792019 + -1.28486 0.944555 -1.54683 -0.292539 -0.120495 0.948632 + -1.29003 0.878772 -1.56184 -0.235722 -0.31146 0.920558 + -1.24364 0.873129 -1.56804 0.22376 -0.41958 0.879707 + -1.1688 0.861879 -1.61352 0.511217 -0.572815 0.640734 + -1.33586 0.882732 -1.59277 -0.6367 -0.158724 0.754599 + -1.3311 0.828058 -1.60292 -0.506381 -0.235732 0.829463 + -1.29043 0.824147 -1.59318 -0.0849646 -0.394886 0.914793 + -1.24404 0.818505 -1.59938 0.313648 -0.456375 0.832674 + -1.36025 0.886229 -1.61648 -0.900588 -0.0728978 0.428518 + -1.35549 0.831554 -1.62663 -0.843479 -0.0971261 0.528308 + -1.36057 0.765387 -1.63744 -0.802727 -0.0312921 0.595525 + -1.33929 0.763181 -1.62236 -0.42135 -0.169906 0.89084 + -1.29862 0.759271 -1.61262 -0.0593078 -0.262465 0.963117 + -1.36263 0.889184 -1.64552 -0.999225 0.0302591 -0.0251901 + -1.36415 0.834711 -1.65179 -0.996871 0.0135084 0.0778825 + -1.36923 0.768544 -1.66259 -0.992765 0.0931242 0.0758048 + -1.35755 0.891501 -1.68179 -0.981983 -0.00598264 -0.188876 + -1.35907 0.837027 -1.68806 -0.940961 0.0707402 -0.331041 + -1.36453 0.767713 -1.6887 -0.933128 0.12783 -0.336053 + -1.37998 0.688661 -1.67276 -0.986713 0.147294 0.0685649 + -1.34636 0.894477 -1.73805 -0.846224 -0.129515 -0.516847 + -1.3389 0.837203 -1.72269 -0.792548 -0.0575711 -0.607086 + -1.34436 0.767888 -1.72333 -0.747919 0.110828 -0.654473 + -1.36143 0.682262 -1.7248 -0.748795 0.126558 -0.650607 + -1.37528 0.68783 -1.69886 -0.922368 0.161823 -0.350787 + -1.32271 0.888801 -1.75658 -0.475248 -0.267235 -0.838287 + -1.31525 0.831528 -1.74122 -0.391519 -0.128805 -0.91111 + -1.32367 0.764451 -1.74011 -0.380362 0.0609298 -0.922828 + -1.31465 0.889273 -1.76194 -0.76204 -0.580068 -0.287778 + -1.28797 0.866962 -1.73616 0.258117 -0.439166 -0.860528 + -1.28675 0.827511 -1.74491 0.248239 0.0274827 -0.968309 + -1.29517 0.760435 -1.74379 0.126475 -0.0316701 -0.991464 + -1.31543 0.895608 -1.78808 -0.883307 -0.348088 -0.314012 + -1.27992 0.832313 -1.76981 -0.964941 -0.20549 0.163289 + -1.27991 0.867435 -1.74151 -0.589249 -0.786826 0.183549 + -1.25538 0.857214 -1.71958 0.433939 -0.370166 -0.821385 + -1.32503 0.965453 -1.79882 -0.882958 -0.118448 -0.454264 + -1.2885 0.895743 -1.82849 -0.752232 -0.272463 -0.599926 + -1.26984 0.839253 -1.81832 -0.793728 -0.203505 -0.57322 + -1.2807 0.838646 -1.79595 -0.925832 -0.275072 -0.259172 + -1.2981 0.965589 -1.83923 -0.774983 -0.144185 -0.615314 + -1.26695 0.894931 -1.8507 -0.594654 -0.273573 -0.756006 + -1.24829 0.838441 -1.84053 -0.616306 -0.186162 -0.765187 + -1.25826 0.763103 -1.82955 -0.652943 0.0485137 -0.755852 + -1.26993 0.764796 -1.81515 -0.835315 0.0870977 -0.542828 + -1.24683 1.04103 -1.90683 -0.579888 -0.078901 -0.810866 + -1.26214 0.961948 -1.87438 -0.582076 -0.219862 -0.782847 + -1.23521 0.892172 -1.86625 -0.265912 -0.28973 -0.919428 + -1.23163 0.837205 -1.85103 -0.283736 -0.199385 -0.937944 + -1.24161 0.761868 -1.84005 -0.304829 -0.0524921 -0.950959 + -1.23062 1.10662 -1.91583 -0.562408 0.209926 -0.799768 + -1.20421 1.03673 -1.9268 -0.219289 -0.219022 -0.950759 + -1.23039 0.959189 -1.88993 -0.254691 -0.320733 -0.912284 + -1.20377 0.888107 -1.86701 0.0862194 -0.299128 -0.95031 + -1.188 1.10233 -1.93581 -0.199873 0.123153 -0.972051 + -1.15876 1.03287 -1.92612 0.13594 -0.327879 -0.934888 + -1.18494 0.955324 -1.88926 0.107907 -0.402031 -0.909245 + -1.13452 1.09375 -1.93653 0.180881 0.00568228 -0.983489 + -1.09656 1.03181 -1.90356 0.446193 -0.406472 -0.797303 + -1.13972 0.947954 -1.87361 0.402614 -0.437176 -0.804226 + -1.15854 0.880738 -1.85136 0.417151 -0.295916 -0.859313 + -1.04309 1.03272 -1.86026 0.649039 -0.459616 -0.606219 + -1.08625 0.948863 -1.83031 0.612569 -0.45869 -0.64371 + -1.12481 0.87388 -1.82472 0.645294 -0.321917 -0.692795 + -1.16808 0.828247 -1.84439 0.405757 -0.224436 -0.885996 + -1.20019 0.833142 -1.85179 0.0821968 -0.211977 -0.973812 + -1.02003 1.09118 -1.87873 0.652416 -0.306213 -0.693244 + -0.979965 1.0555 -1.78051 0.807229 -0.44619 -0.386389 + -1.04295 0.938143 -1.77506 0.769567 -0.458511 -0.444449 + -1.0815 0.863159 -1.76947 0.779966 -0.454658 -0.430046 + -1.02432 0.934806 -1.71944 0.867248 -0.497598 -0.0166589 + -1.07187 0.858508 -1.73225 0.820758 -0.570805 -0.0231943 + -1.12004 0.816937 -1.78948 0.818467 -0.401411 -0.411072 + -1.13435 0.821389 -1.81775 0.729012 -0.276011 -0.626386 + -1.08468 0.856552 -1.69225 0.725396 -0.61261 0.313864 + -1.11669 0.810805 -1.72692 0.740051 -0.617224 0.267132 + -1.11041 0.812285 -1.75226 0.821316 -0.566217 -0.0695551 + -1.15065 0.7456 -1.76694 0.878009 -0.478635 -0.00302057 + -1.15429 0.746264 -1.79033 0.849647 -0.425348 -0.311735 + -1.09781 0.856221 -1.66961 0.564729 -0.625645 0.538191 + -1.12983 0.810472 -1.70429 0.596127 -0.63071 0.496827 + -1.16417 0.74514 -1.72641 0.688353 -0.475692 0.547619 + -1.15693 0.74412 -1.7416 0.817737 -0.497499 0.289486 + -1.12035 0.857744 -1.65381 0.210287 -0.553266 0.806025 + -1.14075 0.811055 -1.6949 0.286026 -0.604535 0.743456 + -1.17509 0.745721 -1.71702 0.425244 -0.389938 0.816771 + -1.14508 0.857131 -1.65365 0.185317 -0.774849 0.604373 + -1.16548 0.81044 -1.69474 0.0133857 -0.469183 0.883 + -1.1907 0.748059 -1.71192 0.149476 -0.258656 0.954334 + -1.21592 0.662056 -1.72454 0.442536 -0.276745 0.85298 + -1.15275 0.856415 -1.64339 0.518608 -0.821939 0.235503 + -1.18493 0.849387 -1.68039 -0.296294 -0.760227 0.578156 + -1.19112 0.813612 -1.69258 -0.260851 -0.283671 0.922761 + -1.21634 0.751233 -1.70976 -0.130893 -0.128592 0.983021 + -1.2038 0.80959 -1.64923 0.816235 -0.526653 0.23748 + -1.19259 0.848672 -1.67012 0.533736 -0.749676 -0.391296 + -1.21685 0.851241 -1.69701 -0.205818 -0.924368 0.32122 + -1.22304 0.815468 -1.70921 -0.534893 -0.078298 0.841284 + -1.23805 0.754552 -1.71673 -0.456727 0.0331711 0.888988 + -1.21985 0.815055 -1.61937 0.579261 -0.552402 0.599423 + -1.24668 0.751744 -1.6372 0.65626 -0.420439 0.626541 + -1.23437 0.748589 -1.65778 0.83242 -0.434956 0.343353 + -1.1988 0.810177 -1.67648 0.923295 -0.245162 -0.295673 + -1.27087 0.755194 -1.61721 0.33568 -0.362953 0.869244 + -1.29516 0.680623 -1.63684 0.356918 -0.302108 0.883934 + -1.27825 0.67452 -1.65169 0.664624 -0.3768 0.64521 + -1.26595 0.671366 -1.67227 0.838794 -0.410489 0.357664 + -1.22937 0.749173 -1.68503 0.917546 -0.35948 -0.169954 + -1.32291 0.684698 -1.63226 -0.0565957 -0.176729 0.982631 + -1.34395 0.612136 -1.64165 -0.0384887 -0.0723164 0.996639 + -1.3278 0.606846 -1.64451 0.361937 -0.225801 0.904442 + -1.31089 0.600744 -1.65936 0.662737 -0.347735 0.66322 + -1.35212 0.687546 -1.639 -0.411111 -0.0666491 0.909145 + -1.37316 0.614981 -1.64839 -0.411776 0.0551519 0.909614 + -1.38826 0.545838 -1.64715 -0.41253 -0.000709895 0.910944 + -1.37589 0.541235 -1.64422 -0.0791485 -0.11612 0.990077 + -1.35974 0.535943 -1.64708 0.303378 -0.251926 0.918964 + -1.3734 0.68975 -1.65408 -0.805994 0.0598112 0.588894 + -1.38608 0.61591 -1.65754 -0.79111 0.145988 0.593997 + -1.40118 0.546766 -1.6563 -0.791716 0.0694493 0.606929 + -1.39819 0.503755 -1.65766 -0.618787 -0.395946 0.678476 + -1.38582 0.499151 -1.65473 -0.133645 -0.54085 0.830434 + -1.39266 0.61482 -1.67623 -0.983018 0.173513 0.0597387 + -1.4047 0.544119 -1.66455 -0.98952 0.0496573 0.135587 + -1.40171 0.501108 -1.66591 -0.874062 -0.442184 0.201219 + -1.39721 0.492211 -1.67724 -0.732737 -0.647838 -0.208333 + -1.39059 0.610268 -1.69228 -0.933316 0.131539 -0.334094 + -1.40264 0.539568 -1.6806 -0.965288 0.018016 -0.260567 + -1.39814 0.53067 -1.69193 -0.843184 -0.101343 -0.527987 + -1.37674 0.604702 -1.71822 -0.76852 0.0508278 -0.637804 + -1.36507 0.59865 -1.72853 -0.434249 -0.103099 -0.894873 + -1.38647 0.524618 -1.70224 -0.526548 -0.260895 -0.809124 + -1.37838 0.519222 -1.70333 -0.083132 -0.473219 -0.877013 + -1.38912 0.486813 -1.67833 -0.229277 -0.925448 -0.301625 + -1.34073 0.678825 -1.74158 -0.384824 0.0306201 -0.922482 + -1.3448 0.594307 -1.7314 0.0631948 -0.274048 -0.959638 + -1.32047 0.67448 -1.74446 0.0937599 -0.105011 -0.990041 + -1.32986 0.59129 -1.72547 0.436207 -0.387375 -0.812197 + -1.36343 0.516208 -1.69739 0.366982 -0.587052 -0.721591 + -1.37942 0.486098 -1.66976 0.209021 -0.969626 0.127025 + -1.27009 0.75642 -1.73415 0.505485 -0.107906 -0.856061 + -1.29539 0.670466 -1.73482 0.488378 -0.22358 -0.843504 + -1.30815 0.589689 -1.70631 0.711051 -0.461767 -0.530263 + -1.35373 0.515493 -1.68883 0.616047 -0.636111 -0.464596 + -1.25415 0.817762 -1.72833 0.574157 0.0596323 -0.816571 + -1.24023 0.75033 -1.70818 0.772867 -0.203311 -0.601116 + -1.27368 0.668865 -1.71566 0.742142 -0.314891 -0.591667 + -1.30116 0.591384 -1.69213 0.870314 -0.485337 -0.0836741 + -1.34673 0.517187 -1.67464 0.777869 -0.626086 0.0541774 + -1.22429 0.811672 -1.70237 0.682156 -0.0598078 -0.728756 + -1.26282 0.667708 -1.69251 0.906823 -0.40609 -0.112972 + -1.30428 0.59504 -1.67189 0.815265 -0.427575 0.390541 + -1.34704 0.522626 -1.66585 0.734782 -0.502853 0.455229 + -1.21809 0.850167 -1.696 0.526666 -0.446044 -0.723649 + -1.25413 0.858289 -1.72059 0.208099 -0.786046 -0.582088 + -1.35365 0.528329 -1.65332 0.556322 -0.412501 0.721352 + -1.37972 0.491535 -1.66098 0.124974 -0.762276 0.635072 + -1.24979 0.66784 -1.71765 -0.112638 -0.0326382 0.9931 + -1.23153 0.664393 -1.71944 0.176531 -0.155192 0.971984 + -1.2715 0.671159 -1.72463 -0.450643 0.109135 0.886008 + -1.29816 0.588448 -1.72706 -0.443615 0.119314 0.88824 + -1.28508 0.586268 -1.72283 -0.113897 -0.00515318 0.993479 + -1.26683 0.582821 -1.72462 0.184181 -0.129991 0.974258 + -1.25756 0.580225 -1.72786 0.446164 -0.251055 0.859017 + -1.28955 0.672873 -1.73814 -0.674392 0.189741 0.713578 + -1.31621 0.590162 -1.74058 -0.685128 0.197335 0.701184 + -1.33453 0.50927 -1.73622 -0.693294 0.0812979 0.716054 + -1.32646 0.508505 -1.73018 -0.464583 0.0186473 0.885333 + -1.31338 0.506325 -1.72595 -0.129231 -0.101578 0.986398 + -1.26296 0.759495 -1.73507 -0.68021 0.13025 0.721353 + -1.27643 0.761618 -1.75234 -0.86222 0.148656 0.48423 + -1.30303 0.674996 -1.75542 -0.862277 0.245344 0.44304 + -1.32451 0.590198 -1.75123 -0.867476 0.231661 0.440248 + -1.24795 0.820411 -1.72754 -0.624756 -0.0924609 0.775327 + -1.27373 0.829557 -1.74847 -0.8414 -0.121963 0.52647 + -1.28262 0.764374 -1.77369 -0.983958 0.150091 0.0964282 + -1.30777 0.674078 -1.7713 -0.961895 0.259908 0.0848916 + -1.32925 0.58928 -1.76711 -0.971299 0.226082 0.0739249 + -1.25413 0.858289 -1.72059 -0.61572 -0.238468 0.751013 + -1.28079 0.764191 -1.79278 -0.955152 0.134387 -0.263863 + -1.30594 0.673894 -1.79039 -0.934884 0.230209 -0.270178 + -1.32841 0.587097 -1.77896 -0.947175 0.175993 -0.268117 + -1.34511 0.507897 -1.75403 -0.990582 0.0831378 0.108793 + -1.34282 0.509307 -1.74687 -0.886829 0.110661 0.448652 + -1.29853 0.670716 -1.80716 -0.827046 0.17455 -0.534348 + -1.321 0.583919 -1.79573 -0.84331 0.108462 -0.526368 + -1.34128 0.502486 -1.77348 -0.879601 -0.0519997 -0.472861 + -1.34427 0.505713 -1.76588 -0.972061 0.0335479 -0.23232 + -1.28687 0.669023 -1.82156 -0.660963 0.100971 -0.743594 + -1.31422 0.580905 -1.80472 -0.683627 0.0211274 -0.729525 + -1.3345 0.499472 -1.78246 -0.727215 -0.133726 -0.673257 + -1.34018 0.460173 -1.75922 -0.721267 -0.662777 -0.201248 + -1.34317 0.463401 -1.75163 -0.83499 -0.535898 0.124922 + -1.27515 0.666054 -1.82951 -0.330546 -0.033392 -0.943199 + -1.3025 0.577936 -1.81267 -0.353727 -0.124803 -0.926985 + -1.3295 0.496792 -1.78609 -0.421067 -0.291774 -0.858819 + -1.33518 0.457491 -1.76285 -0.387157 -0.813576 -0.433825 + -1.32506 0.454956 -1.76054 0.126224 -0.945408 -0.300452 + -1.22073 0.758715 -1.84149 0.0617394 -0.146667 -0.987257 + -1.25427 0.662903 -1.83094 0.0529423 -0.17021 -0.983985 + -1.29003 0.575013 -1.81366 0.0185095 -0.259151 -0.965659 + -1.31703 0.493869 -1.78709 -0.0330283 -0.419408 -0.907197 + -1.18862 0.753823 -1.83409 0.393387 -0.24493 -0.886147 + -1.23124 0.659392 -1.82564 0.368974 -0.283606 -0.885113 + -1.26701 0.571504 -1.80835 0.362422 -0.371118 -0.85494 + -1.30691 0.491333 -1.78477 0.284784 -0.517688 -0.806782 + -1.1686 0.750717 -1.8186 0.687829 -0.348035 -0.636995 + -1.21123 0.656288 -1.81015 0.693421 -0.398107 -0.600565 + -1.25483 0.570414 -1.79884 0.672462 -0.457695 -0.581644 + -1.29473 0.490244 -1.77525 0.630615 -0.591165 -0.50284 + -1.20059 0.656724 -1.78915 0.84698 -0.449841 -0.283315 + -1.24419 0.570849 -1.77784 0.839321 -0.487404 -0.240787 + -1.28979 0.491493 -1.7658 0.781526 -0.592364 -0.19576 + -1.32012 0.456206 -1.75109 0.339759 -0.928743 0.148326 + -1.19694 0.656058 -1.76576 0.883955 -0.464723 0.0515346 + -1.2417 0.572741 -1.76335 0.876001 -0.476175 0.0766831 + -1.2873 0.493385 -1.75131 0.809403 -0.570089 0.140946 + -1.32163 0.459255 -1.74252 0.246058 -0.835561 0.491216 + -1.33281 0.464045 -1.73842 -0.364345 -0.550672 0.751008 + -1.20104 0.658888 -1.74681 0.834271 -0.442455 0.328976 + -1.24579 0.575573 -1.74439 0.826078 -0.437528 0.355195 + -1.28881 0.496432 -1.74274 0.763788 -0.516423 0.387214 + -1.29293 0.498939 -1.73328 0.632428 -0.4608 0.622655 + -1.32487 0.461252 -1.73929 0.00788462 -0.705532 0.708634 + -1.20827 0.65991 -1.73162 0.709103 -0.393732 0.584934 + -1.24991 0.578077 -1.73494 0.704896 -0.375251 0.60192 + -1.29617 0.500936 -1.73006 0.393521 -0.330076 0.858016 + -1.30544 0.503532 -1.72682 0.146181 -0.223438 0.963694 + -1.34088 0.46481 -1.74447 -0.701639 -0.490977 0.516377 + 1.21809 0.850167 -1.696 -0.548293 -0.43388 -0.714929 + 1.21685 0.851241 -1.69701 0.197383 -0.922357 0.332112 + 1.25413 0.858289 -1.72059 -0.208099 -0.786046 -0.582088 + 1.19259 0.848672 -1.67012 -0.511167 -0.623797 -0.591258 + 1.18493 0.849387 -1.68039 0.190407 -0.815477 0.546573 + 1.22304 0.815468 -1.70921 0.518788 -0.107786 0.848081 + 1.25413 0.858289 -1.72059 0.625772 -0.225621 0.746662 + 1.25538 0.857214 -1.71958 -0.421665 -0.35137 -0.835905 + 1.25415 0.817762 -1.72833 -0.549194 0.0365944 -0.834893 + 1.22429 0.811672 -1.70237 -0.681171 -0.0501868 -0.730402 + 1.1988 0.810177 -1.67648 -0.857195 -0.332449 -0.393312 + 1.15275 0.856415 -1.64339 -0.626169 -0.72323 0.291291 + 1.27991 0.867435 -1.74151 0.569222 -0.764404 0.302774 + 1.28797 0.866962 -1.73616 -0.109099 -0.49856 -0.859962 + 1.28675 0.827511 -1.74491 -0.196893 0.0947836 -0.975833 + 1.29517 0.760435 -1.74379 -0.135655 -0.0233792 -0.99048 + 1.27009 0.75642 -1.73415 -0.499556 -0.0934479 -0.861226 + 1.24023 0.75033 -1.70818 -0.753126 -0.224603 -0.618348 + 1.31465 0.889273 -1.76194 0.710133 -0.618406 -0.336579 + 1.32271 0.888801 -1.75658 0.443989 -0.469326 -0.763287 + 1.31525 0.831528 -1.74122 0.311686 -0.0395906 -0.94936 + 1.32367 0.764451 -1.74011 0.381067 0.0621822 -0.922454 + 1.27373 0.829557 -1.74847 0.810154 -0.176227 0.559102 + 1.27992 0.832313 -1.76981 0.961408 -0.254101 0.105481 + 1.2807 0.838646 -1.79595 0.927453 -0.249346 -0.278671 + 1.31543 0.895608 -1.78808 0.913532 -0.304259 -0.269972 + 1.32503 0.965453 -1.79882 0.87695 -0.113739 -0.466928 + 1.24795 0.820411 -1.72754 0.62223 -0.0906251 0.777571 + 1.26296 0.759495 -1.73507 0.671479 0.10361 0.733744 + 1.27643 0.761618 -1.75234 0.873216 0.130011 0.469672 + 1.28262 0.764374 -1.77369 0.984603 0.141256 0.102976 + 1.23805 0.754552 -1.71673 0.443221 0.0446638 0.895299 + 1.2715 0.671159 -1.72463 0.449938 0.10697 0.886631 + 1.28955 0.672873 -1.73814 0.674795 0.189325 0.713308 + 1.30303 0.674996 -1.75542 0.862185 0.243559 0.444204 + 1.21634 0.751233 -1.70976 0.141813 -0.104214 0.984392 + 1.24979 0.66784 -1.71765 0.112364 -0.0324403 0.993137 + 1.28508 0.586268 -1.72283 0.113872 -0.00523079 0.993482 + 1.29816 0.588448 -1.72706 0.443642 0.119288 0.88823 + 1.31621 0.590162 -1.74058 0.684747 0.195752 0.701999 + 1.19112 0.813612 -1.69258 0.202745 -0.241276 0.949042 + 1.1907 0.748059 -1.71192 -0.16271 -0.248935 0.954755 + 1.23153 0.664393 -1.71944 -0.17639 -0.154736 0.972082 + 1.26683 0.582821 -1.72462 -0.184172 -0.129999 0.974259 + 1.16548 0.81044 -1.69474 0.0226165 -0.417339 0.908469 + 1.17509 0.745721 -1.71702 -0.419574 -0.369373 0.829169 + 1.21592 0.662056 -1.72454 -0.441814 -0.277283 0.853179 + 1.25756 0.580225 -1.72786 -0.446223 -0.251636 0.858816 + 1.14508 0.857131 -1.65365 -0.124138 -0.77728 0.616786 + 1.12035 0.857744 -1.65381 -0.267113 -0.640483 0.720022 + 1.14075 0.811055 -1.6949 -0.279355 -0.609574 0.741876 + 1.16417 0.74514 -1.72641 -0.690738 -0.473472 0.54654 + 1.20827 0.65991 -1.73162 -0.709149 -0.393261 0.585195 + 1.14197 0.915734 -1.59942 -0.448773 -0.443226 0.775986 + 1.08365 0.92021 -1.6318 -0.469013 -0.469758 0.7479 + 1.09781 0.856221 -1.66961 -0.556509 -0.631063 0.540424 + 1.12983 0.810472 -1.70429 -0.595984 -0.631843 0.495557 + 1.15693 0.74412 -1.7416 -0.818988 -0.492915 0.293757 + 1.1688 0.861879 -1.61352 -0.560633 -0.545675 0.622839 + 1.21682 0.926985 -1.55393 -0.255195 -0.305567 0.917335 + 1.19864 0.979392 -1.54493 -0.218822 -0.246223 0.944188 + 1.1043 0.977292 -1.58919 -0.422671 -0.407423 0.809541 + 1.04598 0.98177 -1.62157 -0.573951 -0.437501 0.692223 + 1.21985 0.815055 -1.61937 -0.576147 -0.51818 0.632095 + 1.24364 0.873129 -1.56804 -0.221803 -0.41454 0.882587 + 1.28486 0.944555 -1.54683 0.276366 -0.148209 0.949556 + 1.2038 0.80959 -1.64923 -0.736277 -0.600769 0.311404 + 1.23437 0.748589 -1.65778 -0.832457 -0.434978 0.343233 + 1.24668 0.751744 -1.6372 -0.655125 -0.421254 0.627181 + 1.24404 0.818505 -1.59938 -0.348707 -0.430911 0.832297 + 1.22937 0.749173 -1.68503 -0.906507 -0.398512 -0.139406 + 1.26282 0.667708 -1.69251 -0.9062 -0.407158 -0.114123 + 1.26595 0.671366 -1.67227 -0.836919 -0.412759 0.359439 + 1.27825 0.67452 -1.65169 -0.664823 -0.376757 0.645031 + 1.27087 0.755194 -1.61721 -0.333621 -0.357892 0.87213 + 1.27368 0.668865 -1.71566 -0.742318 -0.316019 -0.590843 + 1.30815 0.589689 -1.70631 -0.709063 -0.463714 -0.531224 + 1.30116 0.591384 -1.69213 -0.868888 -0.488436 -0.080394 + 1.30428 0.59504 -1.67189 -0.814595 -0.430454 0.388774 + 1.29539 0.670466 -1.73482 -0.48673 -0.224985 -0.844083 + 1.32986 0.59129 -1.72547 -0.436227 -0.387501 -0.812126 + 1.36343 0.516208 -1.69739 -0.366981 -0.587045 -0.721598 + 1.35373 0.515493 -1.68883 -0.616046 -0.636111 -0.464597 + 1.34673 0.517187 -1.67464 -0.777869 -0.626087 0.054178 + 1.32047 0.67448 -1.74446 -0.0934206 -0.10416 -0.990163 + 1.3448 0.594307 -1.7314 -0.0611467 -0.27569 -0.9593 + 1.37838 0.519222 -1.70333 0.0842907 -0.468101 -0.879646 + 1.38912 0.486813 -1.67833 0.225362 -0.925361 -0.304828 + 1.37942 0.486098 -1.66976 -0.211728 -0.969301 0.125008 + 1.34073 0.678825 -1.74158 0.385073 0.0304306 -0.922384 + 1.36507 0.59865 -1.72853 0.433895 -0.10473 -0.894855 + 1.38647 0.524618 -1.70224 0.520707 -0.25766 -0.813926 + 1.39721 0.492211 -1.67724 0.735598 -0.640528 -0.220498 + 1.34436 0.767888 -1.72333 0.746827 0.112378 -0.655455 + 1.36143 0.682262 -1.7248 0.74854 0.125395 -0.651125 + 1.37674 0.604702 -1.71822 0.768535 0.0509314 -0.637777 + 1.39814 0.53067 -1.69193 0.843978 -0.0967356 -0.527583 + 1.40171 0.501108 -1.66591 0.87014 -0.446797 0.207916 + 1.3389 0.837203 -1.72269 0.759674 -0.111511 -0.640673 + 1.36453 0.767713 -1.6887 0.932446 0.123349 -0.3396 + 1.37528 0.68783 -1.69886 0.922372 0.161819 -0.350778 + 1.39059 0.610268 -1.69228 0.933247 0.128924 -0.335304 + 1.40264 0.539568 -1.6806 0.963166 0.0223621 -0.267975 + 1.34636 0.894477 -1.73805 0.86535 -0.165577 -0.473027 + 1.35907 0.837027 -1.68806 0.955833 0.0249475 -0.292851 + 1.36923 0.768544 -1.66259 0.992958 0.0878036 0.0795294 + 1.37998 0.688661 -1.67276 0.986852 0.146617 0.0680247 + 1.39266 0.61482 -1.67623 0.982998 0.173677 0.0595979 + 1.3467 0.967896 -1.74254 0.960473 -0.0256225 -0.277191 + 1.35755 0.891501 -1.68179 0.986235 0.0156398 -0.164607 + 1.36263 0.889184 -1.64552 0.999993 -0.00243655 -0.00293139 + 1.36415 0.834711 -1.65179 0.994039 0.037213 0.102476 + 1.34702 1.05476 -1.75074 0.964219 0.107724 -0.242232 + 1.35789 0.964919 -1.68628 0.992226 0.0148382 -0.123562 + 1.36051 0.965594 -1.63921 0.99908 0.0394581 0.0167727 + 1.36025 0.886229 -1.61648 0.903254 -0.0813383 0.421327 + 1.35549 0.831554 -1.62663 0.849166 -0.0854645 0.521165 + 1.32535 1.05232 -1.80703 0.885253 0.0719435 -0.459513 + 1.31057 1.12024 -1.80749 0.807813 0.398079 -0.434709 + 1.33158 1.12212 -1.74451 0.89117 0.403837 -0.206715 + 1.353 1.05999 -1.68694 0.986423 0.142722 -0.0812388 + 1.35561 1.06066 -1.63986 0.988684 0.148389 0.0220381 + 1.28279 1.04467 -1.87168 0.769698 0.0132059 -0.638272 + 1.26801 1.1126 -1.87214 0.756012 0.297679 -0.582952 + 1.28331 1.16656 -1.78776 0.753863 0.573264 -0.321029 + 1.30432 1.16844 -1.72478 0.79082 0.592522 -0.153365 + 1.2981 0.965589 -1.83923 0.772878 -0.148182 -0.61701 + 1.26214 0.961948 -1.87438 0.582068 -0.220083 -0.78279 + 1.24683 1.04103 -1.90683 0.570824 -0.0947412 -0.815588 + 1.23062 1.10662 -1.91583 0.562232 0.208256 -0.800328 + 1.25114 1.17205 -1.85306 0.724346 0.49767 -0.477125 + 1.2885 0.895743 -1.82849 0.753784 -0.280068 -0.59445 + 1.26695 0.894931 -1.8507 0.592787 -0.275484 -0.756778 + 1.23039 0.959189 -1.88993 0.253063 -0.323021 -0.91193 + 1.20421 1.03673 -1.9268 0.223994 -0.222487 -0.948855 + 1.188 1.10233 -1.93581 0.196024 0.118531 -0.973409 + 1.26984 0.839253 -1.81832 0.801169 -0.1953 -0.565673 + 1.24829 0.838441 -1.84053 0.611811 -0.176999 -0.770946 + 1.23521 0.892172 -1.86625 0.265435 -0.291855 -0.918893 + 1.18494 0.955324 -1.88926 -0.114054 -0.398877 -0.909884 + 1.28079 0.764191 -1.79278 0.954485 0.125052 -0.270779 + 1.26993 0.764796 -1.81515 0.831109 0.0944805 -0.548024 + 1.25826 0.763103 -1.82955 0.656106 0.0562471 -0.75257 + 1.23163 0.837205 -1.85103 0.291033 -0.192085 -0.937232 + 1.30594 0.673894 -1.79039 0.934947 0.230086 -0.270064 + 1.29853 0.670716 -1.80716 0.826929 0.173397 -0.534903 + 1.28687 0.669023 -1.82156 0.660613 0.101342 -0.743855 + 1.24161 0.761868 -1.84005 0.301939 -0.0496857 -0.952031 + 1.20019 0.833142 -1.85179 -0.0964308 -0.198477 -0.97535 + 1.30777 0.674078 -1.7713 0.962334 0.258563 0.0840204 + 1.32925 0.58928 -1.76711 0.971405 0.225445 0.074475 + 1.32841 0.587097 -1.77896 0.947238 0.174707 -0.268732 + 1.321 0.583919 -1.79573 0.843154 0.108687 -0.526573 + 1.32451 0.590198 -1.75123 0.867958 0.230823 0.439739 + 1.34282 0.509307 -1.74687 0.886698 0.110139 0.449039 + 1.34511 0.507897 -1.75403 0.990643 0.0826856 0.108576 + 1.34427 0.505713 -1.76588 0.971849 0.0342016 -0.23311 + 1.33453 0.50927 -1.73622 0.693299 0.081291 0.71605 + 1.34088 0.46481 -1.74447 0.701632 -0.490993 0.51637 + 1.34317 0.463401 -1.75163 0.834988 -0.535899 0.124931 + 1.34128 0.502486 -1.77348 0.879749 -0.0511724 -0.472677 + 1.32646 0.508505 -1.73018 0.464579 0.0186363 0.885336 + 1.33281 0.464045 -1.73842 0.36434 -0.550687 0.750999 + 1.32487 0.461252 -1.73929 -0.00786567 -0.705549 0.708618 + 1.34018 0.460173 -1.75922 0.721272 -0.662768 -0.201258 + 1.3345 0.499472 -1.78246 0.726094 -0.132574 -0.674694 + 1.31338 0.506325 -1.72595 0.129204 -0.101559 0.986404 + 1.30544 0.503532 -1.72682 -0.146174 -0.223403 0.963703 + 1.29617 0.500936 -1.73006 -0.394578 -0.329484 0.857758 + 1.29293 0.498939 -1.73328 -0.632603 -0.459841 0.623185 + 1.32163 0.459255 -1.74252 -0.24603 -0.835576 0.491205 + 1.24991 0.578077 -1.73494 -0.702934 -0.376909 0.603178 + 1.24579 0.575573 -1.74439 -0.825597 -0.439372 0.354038 + 1.28881 0.496432 -1.74274 -0.763788 -0.516423 0.387214 + 1.2873 0.493385 -1.75131 -0.809403 -0.570089 0.140946 + 1.32012 0.456206 -1.75109 -0.339764 -0.928738 0.14834 + 1.20104 0.658888 -1.74681 -0.83228 -0.444679 0.331014 + 1.2417 0.572741 -1.76335 -0.874146 -0.479077 0.0797117 + 1.24419 0.570849 -1.77784 -0.837363 -0.48997 -0.242391 + 1.28979 0.491493 -1.7658 -0.781526 -0.592364 -0.19576 + 1.19694 0.656058 -1.76576 -0.883318 -0.466063 0.0503526 + 1.20059 0.656724 -1.78915 -0.846339 -0.45279 -0.280518 + 1.25483 0.570414 -1.79884 -0.672513 -0.459272 -0.580341 + 1.29473 0.490244 -1.77525 -0.630615 -0.591166 -0.50284 + 1.32506 0.454956 -1.76054 -0.126233 -0.945401 -0.300469 + 1.15065 0.7456 -1.76694 -0.871576 -0.49022 0.00625768 + 1.15429 0.746264 -1.79033 -0.844154 -0.43147 -0.31818 + 1.21123 0.656288 -1.81015 -0.690879 -0.400442 -0.601941 + 1.26701 0.571504 -1.80835 -0.361255 -0.372013 -0.855045 + 1.30691 0.491333 -1.78477 -0.284784 -0.517688 -0.806782 + 1.11669 0.810805 -1.72692 -0.746864 -0.610341 0.263964 + 1.11041 0.812285 -1.75226 -0.827491 -0.558442 -0.0583179 + 1.12004 0.816937 -1.78948 -0.810732 -0.443788 -0.381794 + 1.1686 0.750717 -1.8186 -0.687723 -0.344695 -0.638923 + 1.08468 0.856552 -1.69225 -0.722899 -0.621558 0.301797 + 1.07187 0.858508 -1.73225 -0.81501 -0.579183 -0.0174824 + 1.0815 0.863159 -1.76947 -0.784326 -0.452098 -0.424783 + 1.13435 0.821389 -1.81775 -0.698072 -0.302654 -0.648919 + 1.18862 0.753823 -1.83409 -0.393365 -0.244961 -0.886148 + 1.06112 0.918685 -1.64761 -0.648941 -0.505591 0.568554 + 1.03712 0.93285 -1.67943 -0.803525 -0.510116 0.306804 + 1.02432 0.934806 -1.71944 -0.861644 -0.50683 -0.0263222 + 1.04295 0.938143 -1.77506 -0.77018 -0.432909 -0.468414 + 1.12481 0.87388 -1.82472 -0.637052 -0.293299 -0.712839 + 1.00444 1.01455 -1.64558 -0.746856 -0.47727 0.463054 + 0.980447 1.02872 -1.6774 -0.856365 -0.450425 0.252501 + 0.961336 1.05217 -1.72489 -0.901465 -0.426153 -0.07586 + 0.979965 1.0555 -1.78051 -0.80676 -0.44746 -0.385897 + 1.08625 0.948863 -1.83031 -0.6332 -0.44364 -0.634224 + 1.02023 1.03424 -1.60761 -0.594641 -0.491949 0.635916 + 0.97869 1.06703 -1.63161 -0.791135 -0.441865 0.422918 + 0.965214 1.08835 -1.63965 -0.922307 -0.214208 0.321658 + 0.960016 1.09198 -1.65691 -0.943323 -0.173494 0.282914 + 0.9502 1.09972 -1.68082 -0.93635 -0.178899 0.302067 + 1.06552 1.02402 -1.58486 -0.428089 -0.457374 0.779454 + 0.992963 1.08999 -1.58691 -0.626555 -0.264091 0.73327 + 0.979487 1.11131 -1.59494 -0.843646 -0.079108 0.531039 + 0.966322 1.11954 -1.63973 -0.942605 0.107551 0.316115 + 1.15987 1.02611 -1.5406 -0.27684 -0.50029 0.820408 + 1.03826 1.07976 -1.56416 -0.472331 -0.504813 0.722542 + 0.985764 1.1241 -1.58551 -0.808884 0.152459 0.567858 + 0.972599 1.13233 -1.6303 -0.850327 0.404567 0.336556 + 1.2598 1.05241 -1.5329 0.346077 -0.101342 0.932717 + 1.2251 1.04822 -1.51723 0.302238 -0.561291 0.770458 + 1.17566 1.04028 -1.52032 -0.074169 -0.659413 0.748113 + 1.05405 1.09393 -1.54388 -0.435095 -0.581989 0.687009 + 1.01822 1.11649 -1.54903 -0.668494 -0.18548 0.720217 + 1.26669 0.996962 -1.53783 0.191982 -0.0791861 0.978199 + 1.31696 1.10538 -1.56332 0.666769 0.11968 0.735592 + 1.28649 1.12987 -1.54719 0.435305 0.353619 0.827927 + 1.25178 1.12568 -1.53153 0.431625 0.0910794 0.897443 + 1.32384 1.04994 -1.56825 0.642907 0.00888994 0.765893 + 1.33324 1.12961 -1.59089 0.818431 0.471312 0.328689 + 1.30278 1.15409 -1.57476 0.682287 0.52096 0.512919 + 1.24521 1.15922 -1.53065 0.498784 0.239579 0.832956 + 1.17813 1.08863 -1.50066 0.1363 -0.130833 0.98199 + 1.3307 0.948515 -1.57777 0.67135 -0.0722876 0.737607 + 1.35813 0.962637 -1.61017 0.923359 0.00169523 0.383934 + 1.35127 1.06406 -1.60065 0.915402 0.118461 0.384716 + 1.33758 1.12621 -1.6301 0.898998 0.43401 0.0586277 + 1.29003 0.878772 -1.56184 0.250202 -0.330333 0.910098 + 1.33586 0.882732 -1.59277 0.61858 -0.181907 0.764375 + 1.29043 0.824147 -1.59318 0.12362 -0.355734 0.926375 + 1.3311 0.828058 -1.60292 0.473589 -0.19945 0.857866 + 1.29862 0.759271 -1.61262 0.0570947 -0.26075 0.963717 + 1.33929 0.763181 -1.62236 0.432294 -0.151859 0.888853 + 1.36057 0.765387 -1.63744 0.795157 -0.0192338 0.606098 + 1.32291 0.684698 -1.63226 0.0576233 -0.174582 0.982955 + 1.35212 0.687546 -1.639 0.410493 -0.066075 0.909467 + 1.3734 0.68975 -1.65408 0.805779 0.0590131 0.589269 + 1.38608 0.61591 -1.65754 0.791353 0.145577 0.593775 + 1.29516 0.680623 -1.63684 -0.354644 -0.30368 0.884311 + 1.3278 0.606846 -1.64451 -0.362319 -0.227353 0.9039 + 1.34395 0.612136 -1.64165 0.0398257 -0.0732493 0.996518 + 1.37316 0.614981 -1.64839 0.411718 0.0550103 0.90965 + 1.40118 0.546766 -1.6563 0.792155 0.0704706 0.606238 + 1.31089 0.600744 -1.65936 -0.659093 -0.350419 0.665434 + 1.35974 0.535943 -1.64708 -0.303379 -0.251928 0.918963 + 1.37589 0.541235 -1.64422 0.0791505 -0.116121 0.990076 + 1.38826 0.545838 -1.64715 0.41253 -0.000709368 0.910944 + 1.35365 0.528329 -1.65332 -0.556322 -0.412501 0.721352 + 1.38582 0.499151 -1.65473 0.134339 -0.539775 0.831021 + 1.39819 0.503755 -1.65766 0.617782 -0.403418 0.674981 + 1.4047 0.544119 -1.66455 0.989441 0.0503563 0.135904 + 1.34704 0.522626 -1.66585 -0.734782 -0.502853 0.45523 + 1.37972 0.491535 -1.66098 -0.130943 -0.7598 0.636834 + 1.33756 1.12735 -1.6807 0.899008 0.433057 -0.0651639 + 1.30767 1.16744 -1.61603 0.751556 0.642952 0.14757 + 1.27484 1.19579 -1.60417 0.676003 0.692793 0.251113 + 1.26994 1.18244 -1.56291 0.594763 0.609173 0.524562 + 1.30765 1.16858 -1.66663 0.789852 0.613264 -0.00639229 + 1.27969 1.20389 -1.65681 0.750076 0.657762 0.06881 + 1.2503 1.22033 -1.60387 0.614372 0.724107 0.313396 + 1.22353 1.20559 -1.54599 0.490416 0.63407 0.597869 + 1.1988 1.18236 -1.51373 0.414068 0.322931 0.851037 + 1.27636 1.20376 -1.71496 0.727289 0.673415 -0.132524 + 1.25515 1.22844 -1.65651 0.599518 0.798301 0.0573963 + 1.2268 1.23779 -1.60672 0.443813 0.858264 0.257707 + 1.20004 1.22305 -1.54884 0.250062 0.813578 0.524937 + 1.25695 1.20615 -1.7733 0.709569 0.659615 -0.247832 + 1.24624 1.23292 -1.70978 0.563551 0.82102 -0.0913027 + 1.21478 1.24832 -1.69966 0.221589 0.973985 -0.0474401 + 1.2237 1.24384 -1.6464 0.380929 0.922439 0.0632341 + 1.19615 1.24703 -1.59924 0.00214134 0.971592 0.236654 + 1.22478 1.21164 -1.8386 0.583801 0.705317 -0.402125 + 1.22682 1.23532 -1.76812 0.509135 0.83909 -0.191594 + 1.19986 1.24786 -1.719 0.117689 0.993019 -0.00784904 + 1.17429 1.24694 -1.67216 -0.287387 0.954447 0.0802453 + 1.19304 1.25307 -1.63892 -0.113058 0.989083 0.0945102 + 1.21375 1.16608 -1.89675 0.525675 0.470143 -0.708965 + 1.19245 1.20432 -1.88267 0.427158 0.649849 -0.628675 + 1.19359 1.23505 -1.82475 0.382408 0.865841 -0.32262 + 1.15778 1.25235 -1.80808 0.309068 0.932818 -0.185276 + 1.19101 1.25262 -1.75145 0.222814 0.974623 -0.0215485 + 1.18154 1.14862 -1.92161 0.211974 0.368095 -0.905303 + 1.16024 1.18686 -1.90753 0.191426 0.484875 -0.853377 + 1.12959 1.21066 -1.89831 0.0964721 0.611775 -0.785127 + 1.16126 1.22772 -1.86882 0.293262 0.79612 -0.52933 + 1.13452 1.09375 -1.93653 -0.173957 0.000954272 -0.984753 + 1.12806 1.14005 -1.92234 -0.145607 0.229769 -0.962291 + 1.1199 1.1752 -1.91443 -0.0879885 0.265306 -0.960141 + 1.08924 1.199 -1.90521 -0.195084 0.408978 -0.891448 + 1.10685 1.23112 -1.87862 -0.10731 0.783951 -0.611479 + 1.15876 1.03287 -1.92612 -0.1449 -0.34348 -0.927914 + 1.07232 1.0927 -1.91396 -0.433302 -0.141605 -0.890055 + 1.05117 1.12854 -1.90297 -0.439325 0.0584886 -0.896422 + 1.04301 1.16369 -1.89506 -0.564069 0.298349 -0.769944 + 1.09656 1.03181 -1.90356 -0.430267 -0.417745 -0.800224 + 1.02003 1.09118 -1.87873 -0.662863 -0.295883 -0.687798 + 0.998882 1.12702 -1.86773 -0.717754 0.0474396 -0.694678 + 1.01517 1.16314 -1.85303 -0.622892 0.599402 -0.502715 + 1.06864 1.19837 -1.89783 -0.480862 0.453194 -0.750591 + 1.13972 0.947954 -1.87361 -0.401986 -0.434215 -0.806142 + 1.04309 1.03272 -1.86026 -0.659759 -0.491604 -0.568369 + 0.956901 1.11396 -1.79899 -0.830602 -0.345704 -0.436564 + 1.20377 0.888107 -1.86701 -0.0877738 -0.299745 -0.949973 + 1.15854 0.880738 -1.85136 -0.418316 -0.296385 -0.858584 + 1.16808 0.828247 -1.84439 -0.397459 -0.211075 -0.893014 + 1.22073 0.758715 -1.84149 -0.0593844 -0.141982 -0.988086 + 1.25427 0.662903 -1.83094 -0.052426 -0.170628 -0.98394 + 1.23124 0.659392 -1.82564 -0.368729 -0.282576 -0.885544 + 1.27515 0.666054 -1.82951 0.330582 -0.0332534 -0.943191 + 1.3025 0.577936 -1.81267 0.353378 -0.124558 -0.927151 + 1.29003 0.575013 -1.81366 -0.0180117 -0.257694 -0.966059 + 1.31703 0.493869 -1.78709 0.0330283 -0.419408 -0.907197 + 1.31422 0.580905 -1.80472 0.683558 0.0207569 -0.729601 + 1.3295 0.496792 -1.78609 0.421723 -0.289783 -0.859172 + 0.931089 1.12317 -1.72831 -0.978758 -0.194938 0.0634939 + 0.935857 1.13387 -1.77346 -0.919801 -0.247786 -0.304249 + 0.977838 1.14693 -1.8422 -0.713433 0.226004 -0.663276 + 0.931083 1.16012 -1.73146 -0.960069 0.198083 0.197561 + 0.935851 1.17081 -1.7766 -0.878816 0.325906 -0.348523 + 0.94695 1.18602 -1.7729 -0.48833 0.832204 -0.262623 + 0.988936 1.16213 -1.8385 -0.402617 0.708069 -0.580119 + 0.948877 1.13357 -1.68792 -0.892675 0.166538 0.418804 + 0.957499 1.15374 -1.6868 -0.638327 0.543842 0.54477 + 0.939705 1.18028 -1.73033 -0.675073 0.686574 0.269985 + 0.980251 1.19469 -1.75863 -0.12658 0.989644 -0.067691 + 1.00648 1.1957 -1.77317 0.157047 0.984631 -0.0764015 + 0.958693 1.12583 -1.66401 -0.923881 0.0713783 0.375965 + 0.959468 1.13722 -1.66512 -0.763965 0.448867 0.463547 + 0.961984 1.1384 -1.66464 -0.150821 0.847836 0.508357 + 0.960015 1.15492 -1.68632 -0.231263 0.714546 0.660259 + 0.973007 1.18895 -1.71607 -0.146352 0.885847 0.44029 + 0.961123 1.12317 -1.657 -0.944149 0.0637159 0.3233 + 0.961898 1.13456 -1.65811 -0.86494 0.328445 0.379478 + 0.962626 1.13559 -1.65822 -0.384087 0.851115 0.357884 + 0.98726 1.13431 -1.66458 0.0946759 0.976704 0.192577 + 0.986618 1.13712 -1.671 0.171918 0.817894 0.549084 + 0.973326 1.13336 -1.63041 -0.460195 0.867698 0.187938 + 0.999435 1.13483 -1.64199 -0.00800085 0.998667 -0.0509874 + 1.03512 1.1309 -1.67772 0.0963545 0.98406 0.149475 + 0.999891 1.13813 -1.5774 -0.449345 0.806446 0.384361 + 1.026 1.1396 -1.58897 -0.0212212 0.999774 0.00117188 + 1.04729 1.13142 -1.65514 0.0204046 0.996962 -0.0751674 + 1.0614 1.12998 -1.68476 -0.107709 0.976572 0.186297 + 1.03405 1.1332 -1.68362 0.191697 0.818682 0.541306 + 1.03235 1.13051 -1.54092 -0.497561 0.542741 0.676657 + 1.05145 1.14076 -1.55772 -0.105228 0.99035 0.0901874 + 1.06772 1.13385 -1.63014 0.00884612 0.99668 -0.0809341 + 1.07244 1.1308 -1.6701 -0.214586 0.972134 0.0943835 + 1.09287 1.10325 -1.50889 -0.492499 -0.384104 0.780967 + 1.05394 1.13424 -1.52692 -0.446676 0.563416 0.695013 + 1.10211 1.13791 -1.52383 -0.0537607 0.994807 0.0864238 + 1.09734 1.13528 -1.58575 -0.00605762 0.999704 -0.0235447 + 1.09318 1.13501 -1.59889 0.022918 0.998904 -0.0407987 + 1.12869 1.08069 -1.50374 -0.232114 -0.536396 0.81142 + 1.11446 1.10698 -1.49489 -0.29937 -0.314541 0.9008 + 1.1046 1.13139 -1.49304 -0.458934 0.390508 0.798049 + 1.11791 1.13865 -1.51295 -0.446601 0.894469 0.0217219 + 1.11314 1.13602 -1.57487 -0.342866 0.939144 0.0212346 + 1.17155 1.12216 -1.49978 0.307449 -0.0241423 0.951258 + 1.14372 1.11795 -1.48887 0.186679 -0.223078 0.956759 + 1.13386 1.14237 -1.48701 -0.186214 0.291295 0.938334 + 1.12653 1.14606 -1.50415 -0.647431 0.753133 0.116726 + 1.17096 1.17815 -1.50282 0.236949 0.209959 0.948563 + 1.13805 1.15763 -1.49276 -0.478373 0.620586 0.621315 + 1.14895 1.16741 -1.52325 -0.744014 0.665116 0.0637527 + 1.1304 1.14888 -1.5377 -0.672577 0.739937 -0.01153 + 1.12178 1.14147 -1.54651 -0.60311 0.797593 0.0102085 + 1.17515 1.19341 -1.50857 -0.165826 0.67002 0.723585 + 1.16047 1.17898 -1.51187 -0.726234 0.6837 0.0716787 + 1.15501 1.17947 -1.53944 -0.797237 0.557654 0.231161 + 1.13354 1.15178 -1.54357 -0.741743 0.66919 0.0447282 + 1.12783 1.14665 -1.55347 -0.646818 0.76134 0.0445799 + 1.18622 1.21333 -1.53064 -0.11433 0.781566 0.613256 + 1.17154 1.19889 -1.53394 -0.721351 0.623456 0.301588 + 1.18233 1.23731 -1.58105 -0.372176 0.833383 0.408606 + 1.16642 1.2016 -1.54698 -0.717277 0.584391 0.379476 + 1.15433 1.20203 -1.57527 -0.828045 0.486584 0.278528 + 1.13898 1.16529 -1.56371 -0.841731 0.46904 0.267378 + 1.1396 1.16384 -1.55976 -0.828227 0.508822 0.234821 + 1.17721 1.24002 -1.59409 -0.507342 0.841389 0.186192 + 1.16573 1.22416 -1.58282 -0.700347 0.634798 0.326414 + 1.14814 1.19983 -1.59413 -0.864127 0.455548 0.213915 + 1.13279 1.16309 -1.58257 -0.864448 0.461387 0.199629 + 1.13034 1.15099 -1.56329 -0.768774 0.601694 0.216682 + 1.16328 1.23237 -1.62663 -0.61144 0.773041 0.168965 + 1.1518 1.21652 -1.61535 -0.814916 0.539121 0.212746 + 1.12289 1.15684 -1.61507 -0.859806 0.468007 0.204214 + 1.12508 1.14782 -1.57819 -0.802741 0.578767 0.143649 + 1.14452 1.22624 -1.65987 -0.706122 0.636983 0.309264 + 1.12523 1.17286 -1.63994 -0.843051 0.441654 0.306933 + 1.12654 1.17353 -1.6363 -0.875013 0.431726 0.219009 + 1.11518 1.14157 -1.61069 -0.797432 0.584675 0.149189 + 1.15936 1.24648 -1.6915 -0.0984614 0.978831 0.179428 + 1.14441 1.24339 -1.68242 -0.331272 0.812617 0.479492 + 1.14005 1.23548 -1.6827 -0.773546 0.460447 0.435449 + 1.14016 1.21833 -1.66015 -0.806717 0.448639 0.384619 + 1.15559 1.24705 -1.69839 -0.0439641 0.990115 0.13319 + 1.14064 1.24395 -1.68931 -0.571651 0.786284 0.234463 + 1.1216 1.21657 -1.69108 -0.697917 0.530416 0.481218 + 1.12101 1.20809 -1.68446 -0.733733 0.458449 0.501458 + 1.12257 1.19901 -1.67431 -0.765486 0.439666 0.469813 + 1.14674 1.25181 -1.73084 -0.102324 0.967737 0.230249 + 1.11538 1.23673 -1.7187 -0.460284 0.699311 0.546903 + 1.08343 1.1595 -1.69198 -0.731771 0.490975 0.47271 + 1.08845 1.16054 -1.68583 -0.704059 0.484914 0.518805 + 1.12011 1.26981 -1.78105 0.0548266 0.989651 0.132607 + 1.08874 1.25473 -1.76892 -0.693427 0.627103 0.354825 + 1.08338 1.23484 -1.76714 -0.855613 0.392694 0.337221 + 1.0772 1.17965 -1.71961 -0.78087 0.436185 0.447197 + 1.13853 1.24819 -1.84913 0.252862 0.868842 -0.425647 + 1.10086 1.26565 -1.8221 -0.0780995 0.936389 -0.342164 + 1.08652 1.26484 -1.8125 -0.662975 0.739671 -0.115547 + 1.08115 1.24495 -1.81071 -0.910834 0.409938 -0.0483 + 1.09251 1.23031 -1.86901 -0.530404 0.739301 -0.414857 + 1.07628 1.23323 -1.82709 -0.716986 0.673658 -0.179208 + 1.06911 1.22632 -1.80518 -0.884144 0.459173 0.0863142 + 1.07014 1.21301 -1.77236 -0.888492 0.383056 0.252684 + 1.06396 1.15782 -1.72483 -0.827479 0.429374 0.361824 + 1.08764 1.2186 -1.8854 -0.276174 0.767923 -0.577946 + 1.06703 1.21797 -1.87802 -0.512825 0.767519 -0.38461 + 1.05986 1.21106 -1.85611 -0.890276 0.450345 -0.0678118 + 1.05896 1.19094 -1.79776 -0.929683 0.342675 0.13514 + 1.05999 1.17763 -1.76494 -0.910434 0.353713 0.214469 + 1.04079 1.19782 -1.85581 -0.544305 0.834781 -0.0829051 + 1.05504 1.19843 -1.85259 -0.564073 0.763002 0.315673 + 1.05414 1.17831 -1.79423 -0.653776 0.706785 0.270245 + 1.05545 1.16187 -1.75467 -0.590011 0.717794 0.369674 + 1.05943 1.14206 -1.71456 -0.366442 0.819707 0.440228 + 1.03559 1.17519 -1.79432 0.317053 0.912267 0.259317 + 1.04984 1.1758 -1.7911 -0.138394 0.940918 0.309064 + 1.05115 1.15936 -1.75153 0.231955 0.894033 0.383278 + 1.05648 1.14191 -1.71326 0.321558 0.868807 0.37653 + 1.06328 1.13243 -1.69196 -0.337153 0.854265 0.395677 + 1.00964 1.18895 -1.7286 0.318432 0.90407 0.285059 + 1.03874 1.16844 -1.74975 0.590607 0.78108 0.202727 + 1.04408 1.15099 -1.71148 0.560772 0.694133 0.451347 + 1.03005 1.14648 -1.69451 0.338196 0.687524 0.642599 + 1.06034 1.13228 -1.69065 0.173358 0.90809 0.381208 + 0.995607 1.18444 -1.71163 0.195642 0.805308 0.559646 + 0.982616 1.1504 -1.68189 0.092698 0.640677 0.762195 + 1.06831 1.13347 -1.6858 -0.575276 0.724091 0.38046 + 1.09001 1.15145 -1.67567 -0.685546 0.508367 0.521142 + 1.10764 1.15354 -1.6541 -0.743202 0.49384 0.451412 + 1.07935 1.13428 -1.67115 -0.556622 0.739256 0.37904 + 1.09697 1.13638 -1.64958 -0.572935 0.733111 0.36646 + 1.10786 1.13774 -1.63375 -0.676676 0.692175 0.251005 + 1.10917 1.13841 -1.6301 -0.747052 0.644488 0.162936 + 1.09287 1.13322 -1.6451 -0.233288 0.968642 0.0854976 + 1.10375 1.13459 -1.62927 -0.296519 0.951917 0.0770099 + 1.10792 1.13486 -1.61614 -0.396428 0.916976 0.0447292 + 1.11393 1.13803 -1.59673 -0.516961 0.854926 0.043042 + 1.12257 1.14348 -1.56836 -0.685363 0.723943 0.07863 + 1.13097 1.14954 -1.55934 -0.581345 0.772665 0.255004 + 1.33518 0.457491 -1.76285 0.387157 -0.813576 -0.433825 + -0.700788 1.60693 -3.09201 0.87201 0.456421 0.176857 + -0.700286 1.60496 -3.09226 0.792166 0.124176 0.597539 + -0.696261 1.60389 -3.09632 0.75288 0.497834 -0.430503 + -0.713785 1.62766 -3.06485 0.678695 0.713623 -0.173537 + -0.702351 1.60795 -3.09721 0.764365 0.640976 -0.0699637 + -0.721527 1.63887 -3.08342 0.817512 0.56768 -0.0970227 + -0.719965 1.63784 -3.07821 0.830319 0.549856 -0.0907127 + -0.714287 1.62963 -3.06459 0.919042 0.367061 0.143628 + -0.698218 1.60237 -3.10074 0.882124 0.319834 -0.345778 + -0.710325 1.62074 -3.11096 0.879372 0.475631 -0.0219134 + -0.714458 1.62632 -3.10743 0.825694 0.563981 0.012463 + -0.762133 1.69675 -3.08184 0.679542 0.710222 -0.183868 + -0.697173 1.59291 -3.09688 0.817646 0.0776346 -0.570463 + -0.695999 1.5703 -3.11698 0.986147 0.1404 -0.0883226 + -0.713731 1.62839 -3.14112 0.839795 0.437362 -0.32165 + -0.755063 1.6842 -3.10586 0.730315 0.675564 -0.10126 + -0.688751 1.58509 -3.09346 0.483798 0.0783854 -0.871662 + -0.689663 1.57411 -3.09402 0.741627 0.0952044 -0.664023 + -0.694954 1.56084 -3.11312 0.978316 0.0897861 -0.186645 + -0.699405 1.57794 -3.14714 0.891748 0.207378 -0.402218 + -0.697311 1.61823 -3.08077 -0.197968 0.57859 -0.791229 + -0.674551 1.60644 -3.08384 0.623596 0.245119 -0.742324 + -0.683668 1.49664 -3.08943 0.938475 -0.0149984 -0.345021 + -0.68896 1.48336 -3.10853 0.984847 0.0140192 -0.172859 + -0.694389 1.50268 -3.15615 0.900856 0.0805795 -0.426573 + -0.700286 1.60496 -3.09226 -0.421139 0.65229 -0.630206 + -0.701336 1.61931 -3.07671 -0.328939 0.679388 -0.655921 + -0.683112 1.63959 -3.07115 0.224761 0.653228 -0.723032 + -0.666173 1.60744 -3.06324 0.955854 0.117313 -0.269409 + -0.67529 1.49763 -3.06883 0.964503 -0.0654329 -0.255836 + -0.686728 1.39615 -3.08333 0.977257 -0.0740926 -0.198693 + -0.723359 1.65031 -3.03058 -0.138716 0.81918 -0.556508 + -0.726764 1.6649 -3.00715 0.0886504 0.983024 -0.160638 + -0.686517 1.65418 -3.04772 0.11062 0.929914 -0.350747 + -0.671291 1.64734 -3.04513 0.759615 0.620625 -0.194446 + -0.660742 1.59762 -3.01491 0.998512 0.0457029 -0.0297487 + -0.735808 1.65866 -3.01872 0.666743 0.734097 -0.128668 + -0.762929 1.68282 -2.988 0.661077 0.346894 0.665314 + -0.76146 1.66694 -2.97721 0.502776 0.643523 0.577144 + -0.744332 1.65545 -2.97188 0.149607 0.885156 0.440587 + -0.710988 1.66406 -2.99897 0.186712 0.974499 0.124456 + -0.740829 1.67833 -3.01615 0.863698 0.403629 0.301843 + -0.76795 1.70249 -2.98543 0.604639 0.564535 0.561882 + -0.810379 1.70534 -2.96548 0.234079 0.696843 0.677951 + -0.80891 1.68947 -2.95469 0.316091 0.624754 0.713981 + -0.746507 1.68655 -3.02977 0.764846 0.644089 -0.0126078 + -0.784145 1.71184 -2.99598 0.309967 0.926418 0.213707 + -0.826574 1.71469 -2.97603 -0.0946936 0.911122 0.40111 + -0.848521 1.68754 -2.95309 -0.531113 0.545634 0.64823 + -0.790836 1.72448 -3.07206 0.277811 0.945056 -0.172307 + -0.77521 1.71429 -3.01999 0.481611 0.861845 0.158979 + -0.827708 1.72022 -3.03019 -0.140146 0.986951 0.0792854 + -0.8513 1.71244 -3.03504 -0.559275 0.828597 -0.0252733 + -0.850166 1.70692 -2.98088 -0.588849 0.746378 0.310125 + -0.80354 1.71436 -3.10247 0.0154224 0.882826 -0.469447 + -0.818774 1.72266 -3.0542 -0.165976 0.985525 -0.0345319 + -0.854737 1.70418 -3.06709 -0.635124 0.741478 -0.216395 + -0.878514 1.68074 -3.01539 -0.885677 0.449688 0.115577 + -0.876869 1.66136 -2.98761 -0.881197 0.294044 0.370176 + -0.773682 1.70236 -3.1145 0.415285 0.887866 -0.198074 + -0.805723 1.6918 -3.12458 -0.0900347 0.638744 -0.764134 + -0.840653 1.68224 -3.12658 -0.394434 0.629292 -0.669637 + -0.831478 1.71254 -3.0846 -0.398061 0.861189 -0.31607 + -0.73235 1.64655 -3.14976 0.513004 0.593254 -0.620384 + -0.775865 1.6798 -3.13661 0.0795118 0.603871 -0.793106 + -0.811574 1.65329 -3.14786 -0.102929 0.430473 -0.896716 + -0.733622 1.62154 -3.16383 0.350697 0.329787 -0.8765 + -0.777137 1.65479 -3.15069 -0.00986803 0.439864 -0.89801 + -0.813206 1.60082 -3.16797 -0.161349 0.265461 -0.950525 + -0.85692 1.595 -3.15879 -0.477052 0.227239 -0.848989 + -0.846504 1.64373 -3.14987 -0.360266 0.361162 -0.860099 + -0.724048 1.56911 -3.1729 0.411711 0.179164 -0.893529 + -0.778768 1.60233 -3.1708 -0.0260258 0.256338 -0.966236 + -0.813673 1.53427 -3.17938 -0.128089 0.119226 -0.98457 + -0.719033 1.49384 -3.18192 0.404354 0.0846973 -0.910673 + -0.769195 1.54989 -3.17987 0.0139145 0.128051 -0.99167 + -0.808316 1.45694 -3.18447 -0.0547645 0.046343 -0.997423 + -0.852566 1.44075 -3.18167 -0.393856 0.030329 -0.918672 + -0.857387 1.52845 -3.17019 -0.4561 0.122059 -0.881518 + -0.693939 1.4298 -3.16189 0.897554 -0.0132109 -0.440707 + -0.716485 1.43006 -3.18433 0.416663 0.00902267 -0.909016 + -0.763838 1.47256 -3.18497 0.00751894 0.0515189 -0.998644 + -0.76129 1.40878 -3.18738 0.0179453 -0.015389 -0.999721 + -0.801582 1.39762 -3.18654 -0.0330196 -0.0281901 -0.999057 + -0.68851 1.41049 -3.11426 0.993445 -0.0466734 -0.104351 + -0.694726 1.36325 -3.12214 0.991643 -0.0796369 -0.1015 + -0.69819 1.36955 -3.16113 0.901623 -0.0574822 -0.428686 + -0.720736 1.36981 -3.18358 0.383088 -0.057623 -0.921913 + -0.692944 1.34892 -3.0912 0.988056 -0.150464 -0.0332515 + -0.698909 1.27668 -3.09442 0.995134 -0.0496643 0.0850939 + -0.698506 1.28133 -3.1216 0.998452 -0.0355661 -0.0427657 + -0.70197 1.28763 -3.1606 0.89746 -0.0489395 -0.438373 + -0.684572 1.36835 -3.06714 0.953507 -0.295606 0.0586556 + -0.696866 1.34501 -3.07027 0.914862 -0.299159 0.271168 + -0.70283 1.27277 -3.07349 0.941181 -0.0619246 0.332179 + -0.679223 1.43047 -3.06729 0.92128 0.018115 -0.388478 + -0.677067 1.40267 -3.05111 0.970728 -0.214989 0.107085 + -0.703187 1.35996 -3.03439 0.790129 -0.399228 0.465095 + -0.715481 1.33661 -3.03751 0.823762 -0.289854 0.487238 + -0.717646 1.267 -3.04741 0.83722 -0.0679653 0.542626 + -0.675092 1.47307 -3.05471 0.984177 -0.0643738 -0.165081 + -0.669514 1.46659 -3.01935 0.966297 -0.190461 0.173189 + -0.688425 1.47104 -2.98324 0.753977 -0.323037 0.571984 + -0.695978 1.40712 -3.015 0.770471 -0.342081 0.537916 + -0.660545 1.57306 -3.00079 0.990586 -0.0330301 0.132844 + -0.665383 1.50919 -3.00677 0.984457 -0.120521 0.127743 + -0.675449 1.52296 -2.97583 0.830708 -0.177822 0.527544 + -0.728331 1.47624 -2.93836 0.664829 -0.308652 0.680247 + -0.665861 1.63752 -2.9968 0.852699 0.476346 0.214474 + -0.678778 1.63089 -2.96438 0.74837 0.433046 0.502407 + -0.683725 1.60477 -2.95156 0.800462 0.0485411 0.597414 + -0.670611 1.58683 -2.96985 0.909758 0.226955 0.347608 + -0.715355 1.52815 -2.93095 0.699701 -0.20971 0.682965 + -0.695763 1.65722 -2.99638 0.454934 0.8663 0.206297 + -0.70868 1.65059 -2.96396 0.341868 0.822353 0.45482 + -0.722961 1.62083 -2.91547 0.463381 0.545157 0.698629 + -0.727908 1.5947 -2.90265 0.633652 0.0798204 0.769489 + -0.728557 1.65461 -2.9637 0.0113152 0.90852 0.417688 + -0.742838 1.62485 -2.91521 -0.037868 0.83699 0.545906 + -0.752843 1.61059 -2.89508 0.0477925 0.635702 0.770454 + -0.750816 1.58804 -2.88577 0.300055 0.114677 0.947004 + -0.72847 1.54609 -2.91265 0.672044 -0.190225 0.715661 + -0.750278 1.63944 -2.94596 -0.0419403 0.82293 0.566594 + -0.750129 1.63638 -2.94029 -0.196128 0.856373 0.47766 + -0.760134 1.62211 -2.92016 -0.272601 0.828617 0.488961 + -0.777383 1.60064 -2.89336 -0.0725441 0.524825 0.848113 + -0.767406 1.65093 -2.95128 0.464054 0.686469 0.559834 + -0.759055 1.63552 -2.94107 0.235389 0.788655 0.567992 + -0.758906 1.63246 -2.93541 -0.0561691 0.788152 0.612912 + -0.76136 1.63146 -2.93523 0.0293959 0.697708 0.715779 + -0.762588 1.62112 -2.91999 -0.0550318 0.817711 0.572993 + -0.772151 1.65318 -2.94903 0.50303 0.628038 0.593741 + -0.7638 1.63777 -2.93882 0.437651 0.643943 0.627535 + -0.780306 1.6323 -2.92608 0.362909 0.634026 0.682868 + -0.795101 1.61183 -2.89945 0.0527002 0.497856 0.865657 + -0.819506 1.67489 -2.93533 0.0561581 0.616276 0.785525 + -0.782747 1.63861 -2.92967 0.424833 0.578091 0.696655 + -0.815706 1.62228 -2.90612 -0.178331 0.424784 0.887556 + -0.812919 1.58737 -2.89387 -0.329742 -0.00853355 0.944033 + -0.775356 1.57809 -2.88406 -0.0982588 0.0244805 0.99486 + -0.844721 1.63493 -2.92389 -0.610742 0.334372 0.717767 + -0.833524 1.59783 -2.90054 -0.501494 0.00354065 0.865154 + -0.856485 1.57603 -2.93009 -0.739695 -0.15111 0.655757 + -0.853575 1.52989 -2.94193 -0.728686 -0.230587 0.644861 + -0.810009 1.54124 -2.90571 -0.505813 -0.202465 0.838547 + -0.883256 1.63656 -2.98772 -0.932027 0.164436 0.322934 + -0.851108 1.61012 -2.92401 -0.798286 0.13481 0.586997 + -0.874069 1.58832 -2.95356 -0.88325 0.00170727 0.4689 + -0.883002 1.55814 -2.981 -0.944823 -0.13053 0.30045 + -0.844819 1.45278 -2.96066 -0.762443 -0.236235 0.602389 + -0.892188 1.60638 -3.01517 -0.979897 0.0684396 0.187397 + -0.88195 1.67248 -3.04744 -0.903471 0.421792 -0.0763669 + -0.892555 1.63829 -3.06061 -0.96299 0.264708 -0.0507928 + -0.899933 1.55969 -3.04404 -0.977814 -0.00851941 0.209302 + -0.874246 1.48103 -2.99973 -0.895229 -0.163218 0.414637 + -0.863912 1.67388 -3.10907 -0.735786 0.533196 -0.417517 + -0.874516 1.63969 -3.12224 -0.805323 0.351388 -0.477473 + -0.9003 1.5916 -3.08948 -0.976471 0.154134 -0.15082 + -0.902105 1.51138 -3.06534 -0.985345 -0.0566175 0.1609 + -0.884932 1.59097 -3.13117 -0.833899 0.194448 -0.51653 + -0.886875 1.52234 -3.145 -0.828293 0.0661672 -0.556374 + -0.902243 1.52298 -3.10331 -0.983168 0.0133235 -0.182215 + -0.896536 1.41999 -3.07138 -0.969009 -0.152395 0.194414 + -0.876418 1.43272 -3.02103 -0.872716 -0.171951 0.456947 + -0.882054 1.43465 -3.15648 -0.834092 -0.0343469 -0.550555 + -0.896673 1.43159 -3.10936 -0.981895 -0.088221 -0.167628 + -0.886844 1.37081 -3.11415 -0.946378 -0.294861 -0.13201 + -0.883944 1.37025 -3.07144 -0.901172 -0.352952 0.251623 + -0.863826 1.38298 -3.02108 -0.797005 -0.327477 0.507485 + -0.845832 1.38144 -3.18374 -0.365779 -0.13663 -0.920618 + -0.872225 1.37387 -3.16127 -0.788234 -0.246012 -0.564062 + -0.859534 1.34392 -3.15667 -0.77261 -0.284055 -0.567791 + -0.870607 1.33676 -3.1204 -0.942007 -0.299468 -0.151464 + -0.867707 1.3362 -3.07768 -0.91754 -0.325362 0.228605 + -0.797511 1.35535 -3.18285 -0.0383612 -0.0950201 -0.994736 + -0.833141 1.35149 -3.17915 -0.33025 -0.201621 -0.922108 + -0.757219 1.36651 -3.18369 0.00559388 -0.0770702 -0.99701 + -0.756405 1.28568 -3.17829 -0.0128796 -0.0767177 -0.99697 + -0.788812 1.28247 -3.17667 -0.0668274 -0.0866222 -0.993997 + -0.824442 1.2786 -3.17296 -0.375244 -0.117156 -0.919492 + -0.845429 1.27364 -3.155 -0.806172 -0.15623 -0.570682 + -0.719922 1.28898 -3.17817 0.382609 -0.0673176 -0.921455 + -0.721898 1.17826 -3.1696 0.381692 -0.0653494 -0.921976 + -0.750995 1.17563 -3.16969 -0.0169892 -0.0626134 -0.997893 + -0.783401 1.17241 -3.16807 -0.0691604 -0.0628298 -0.995625 + -0.703946 1.17691 -3.15202 0.903222 -0.0484222 -0.426432 + -0.707888 1.07356 -3.14842 0.923046 -0.0505435 -0.381355 + -0.72109 1.07123 -3.16464 0.441413 -0.0515657 -0.895821 + -0.750186 1.0686 -3.16473 1.25246e-005 -0.0283135 -0.999599 + -0.701184 1.17188 -3.12093 0.998569 -0.0326852 -0.0423313 + -0.705125 1.06853 -3.11732 0.998025 -0.049581 -0.0385655 + -0.710884 0.972315 -3.11638 0.997622 -0.0573218 -0.038262 + -0.713241 0.976547 -3.1442 0.924653 -0.0672904 -0.374817 + -0.726443 0.974225 -3.16042 0.551747 -0.042467 -0.832929 + -0.701586 1.16723 -3.09375 0.993363 -0.0320286 0.110476 + -0.705752 1.06448 -3.09411 0.992459 -0.0490947 0.112318 + -0.711511 0.968265 -3.09316 0.991759 -0.0566243 0.114921 + -0.716751 0.87302 -3.09366 0.990209 -0.0530098 0.12914 + -0.715786 0.876178 -3.11125 0.998434 -0.0512606 -0.0224004 + -0.705499 1.16387 -3.07604 0.936145 -0.0328721 0.350075 + -0.709665 1.06112 -3.07641 0.941353 -0.0471569 0.334113 + -0.715225 0.964675 -3.07691 0.941111 -0.053516 0.333834 + -0.720464 0.869428 -3.07741 0.948357 -0.0567908 0.312079 + -0.720315 1.1581 -3.04997 0.833103 -0.0337943 0.552084 + -0.720112 1.05203 -3.05692 0.845269 -0.04334 0.532581 + -0.725672 0.955581 -3.05743 0.859626 -0.0495315 0.508517 + -0.726842 0.85972 -3.0645 0.874302 -0.0569026 0.482035 + -0.72532 0.775814 -3.08118 0.935201 -0.0985868 0.340116 + -0.742695 1.15122 -3.02139 0.553754 -0.0650853 0.830133 + -0.742493 1.04514 -3.02834 0.494536 -0.0672188 0.866554 + -0.737453 0.933047 -3.04199 0.534197 -0.0828218 0.841293 + -0.738623 0.837186 -3.04907 0.48591 -0.0853355 0.869833 + -0.746692 1.25807 -3.01032 0.552602 -0.09964 0.827467 + -0.775955 1.25415 -3.0029 -0.1075 -0.151712 0.982561 + -0.771958 1.1473 -3.01397 -0.122854 -0.111231 0.986172 + -0.764642 1.03836 -3.02585 -0.175392 -0.124385 0.976609 + -0.744527 1.32767 -3.00042 0.569215 -0.276986 0.774127 + -0.783702 1.33029 -2.9878 -0.108099 -0.376409 0.920126 + -0.812463 1.25423 -3.02293 -0.611576 -0.165372 0.77371 + -0.801073 1.14736 -3.02995 -0.607806 -0.119498 0.785043 + -0.793758 1.03842 -3.04183 -0.597205 -0.143892 0.789076 + -0.746833 1.36701 -2.97759 0.50708 -0.430176 0.746872 + -0.786007 1.36963 -2.96497 -0.146804 -0.558744 0.816243 + -0.82021 1.33037 -3.00783 -0.591072 -0.326004 0.737804 + -0.836586 1.25639 -3.04862 -0.825053 -0.166857 0.539857 + -0.739624 1.41418 -2.9582 0.61681 -0.390308 0.683524 + -0.784733 1.39524 -2.94443 0.0154982 -0.666832 0.745047 + -0.833503 1.38189 -2.98836 -0.592472 -0.454608 0.665062 + -0.850533 1.33146 -3.04056 -0.808966 -0.298991 0.506141 + -0.75727 1.49267 -2.90546 0.478589 -0.229456 0.847527 + -0.768564 1.43061 -2.9253 0.547875 -0.475624 0.688197 + -0.792961 1.41006 -2.92624 -0.171974 -0.606727 0.776085 + -0.832229 1.40751 -2.96782 -0.642983 -0.420387 0.640194 + -0.751378 1.53942 -2.89578 0.401628 -0.223447 0.888125 + -0.781249 1.53134 -2.89374 -0.161111 -0.182067 0.969997 + -0.776791 1.44544 -2.90711 0.1735 -0.356821 0.91792 + -0.805551 1.45534 -2.91908 -0.583928 -0.211372 0.783805 + -0.85376 1.26113 -3.08574 -0.960066 -0.167307 0.224236 + -0.838893 1.1533 -3.08524 -0.962806 -0.122283 0.240939 + -0.825197 1.14953 -3.05563 -0.828872 -0.120879 0.546223 + -0.856502 1.26648 -3.11872 -0.977335 -0.16589 -0.131519 + -0.841635 1.15865 -3.11822 -0.98418 -0.122884 -0.127629 + -0.829853 1.05014 -3.11636 -0.987791 -0.100641 -0.118913 + -0.82755 1.04513 -3.0913 -0.964916 -0.105535 0.240416 + -0.813854 1.04135 -3.06169 -0.814651 -0.125386 0.566235 + -0.832804 1.16437 -3.14715 -0.822315 -0.115083 -0.557273 + -0.821023 1.05585 -3.14529 -0.833394 -0.0887406 -0.545508 + -0.81167 0.946961 -3.14421 -0.831525 -0.101834 -0.546074 + -0.819573 0.942088 -3.11833 -0.985849 -0.111316 -0.125341 + -0.81727 0.937079 -3.09327 -0.936686 -0.125531 0.326895 + -0.811817 1.16932 -3.16512 -0.379046 -0.0868437 -0.921294 + -0.803682 1.05969 -3.16112 -0.406789 -0.0495096 -0.912179 + -0.794329 0.950801 -3.16004 -0.452282 -0.0774234 -0.888508 + -0.786447 0.851142 -3.15179 -0.440704 -0.160811 -0.883131 + -0.79914 0.848498 -3.14022 -0.814523 -0.168243 -0.5552 + -0.775266 1.06278 -3.16408 -0.0622994 -0.0139068 -0.997961 + -0.770114 0.952483 -3.16563 -0.113135 -0.0522288 -0.992206 + -0.762232 0.852825 -3.15737 -0.0708876 -0.156051 -0.985202 + -0.745035 0.958311 -3.16628 0.165553 -0.042963 -0.985265 + -0.745119 0.859859 -3.15731 0.220004 -0.131641 -0.966576 + -0.758657 0.762938 -3.13818 0.0550191 -0.328372 -0.942945 + -0.772999 0.76158 -3.13749 -0.313277 -0.317313 -0.895081 + -0.785692 0.758936 -3.12592 -0.779879 -0.303734 -0.547297 + -0.726527 0.875771 -3.15145 0.637624 -0.0976846 -0.764129 + -0.73024 0.779145 -3.13746 0.579893 -0.229939 -0.78157 + -0.741544 0.769971 -3.13812 0.226529 -0.320206 -0.919866 + -0.740176 0.721669 -3.11429 0.417408 -0.711078 -0.565807 + -0.755709 0.715314 -3.11404 0.172148 -0.797448 -0.578309 + -0.718143 0.880408 -3.13907 0.939885 -0.0677119 -0.33471 + -0.721855 0.783783 -3.12507 0.940257 -0.12797 -0.315498 + -0.728872 0.730843 -3.11363 0.755628 -0.465799 -0.460497 + -0.727586 0.728534 -3.09845 0.8942 -0.447648 0.00409192 + -0.737605 0.715827 -3.07849 0.597383 -0.684818 0.417323 + -0.720568 0.781473 -3.10989 0.994763 -0.0961954 -0.0345439 + -0.721533 0.778315 -3.0923 0.979906 -0.0915413 0.177214 + -0.731373 0.726032 -3.08733 0.918867 -0.247338 0.307421 + -0.73793 0.755901 -3.05943 0.541771 -0.217753 0.81183 + -0.752399 0.748231 -3.05953 -0.118103 -0.297788 0.947298 + -0.753137 0.709472 -3.07824 0.0544323 -0.869105 0.491624 + -0.774364 0.711295 -3.09923 -0.605963 -0.794246 -0.044521 + -0.770051 0.713956 -3.11335 -0.357824 -0.752905 -0.552355 + -0.731699 0.766105 -3.06827 0.893625 -0.114176 0.434048 + -0.753092 0.829517 -3.04917 -0.267056 -0.108626 0.957539 + -0.76694 0.74808 -3.06611 -0.541848 -0.236166 0.806614 + -0.759602 0.926263 -3.03951 -0.241779 -0.119321 0.962967 + -0.778414 0.831733 -3.06725 -0.639391 -0.0982445 0.76258 + -0.793113 0.83416 -3.08097 -0.755826 -0.117781 0.644092 + -0.78164 0.750508 -3.07983 -0.804877 -0.215327 0.552999 + -0.767678 0.70932 -3.08482 -0.432226 -0.826862 0.359834 + -0.784924 0.928477 -3.05759 -0.64256 -0.129857 0.755151 + -0.80502 0.931409 -3.07746 -0.760192 -0.133541 0.635827 + -0.805363 0.839829 -3.09679 -0.933723 -0.150671 0.324746 + -0.788325 0.752482 -3.09424 -0.942382 -0.245713 0.227026 + -0.807043 0.843624 -3.11434 -0.978575 -0.16081 -0.128571 + -0.790005 0.756277 -3.1118 -0.946458 -0.280709 -0.159433 + -0.106343 0.878927 -3.34614 0.362612 -0.0130587 0.931849 + -0.118475 0.842721 -3.34595 0.166227 -0.123161 0.978366 + -0.110367 0.844247 -3.35106 0.516151 -0.813737 0.267245 + -0.124122 0.879198 -3.34372 -0.0237039 0.0262078 0.999375 + -0.133302 0.844537 -3.34848 -0.418236 -0.77872 0.467625 + -0.098235 0.880453 -3.35125 0.620088 -0.0692167 0.781473 + -0.082945 0.960539 -3.37009 0.599546 0.0773708 0.796591 + -0.105239 0.956342 -3.35604 0.327362 0.126304 0.936419 + -0.123019 0.956611 -3.35362 -0.0428739 0.14651 0.98828 + -0.138949 0.881012 -3.34624 -0.349957 -0.0045157 0.936755 + -0.088223 0.883575 -3.36059 0.861612 -0.23212 0.451381 + -0.072933 0.963663 -3.37943 0.773581 0.011667 0.63359 + -0.057545 1.05444 -3.40151 0.769322 0.0293213 0.638188 + -0.074516 1.04927 -3.38601 0.590202 0.0879483 0.802451 + -0.09681 1.04507 -3.37197 0.331846 0.132761 0.933945 + -0.108929 0.846051 -3.35592 0.531956 -0.796498 -0.287425 + -0.086785 0.885379 -3.36544 0.924554 -0.376917 -0.0559803 + -0.064728 0.968621 -3.39278 0.974747 -0.17852 0.134159 + -0.04934 1.0594 -3.41486 0.978964 -0.1059 0.174397 + -0.133971 0.849398 -3.36091 -0.374838 -0.728683 -0.573164 + -0.124687 0.850417 -3.36488 -0.0825503 -0.726829 -0.681839 + -0.113113 0.848798 -3.36239 0.224854 -0.747704 -0.624804 + -0.088296 0.889645 -3.37606 0.76816 -0.449907 -0.455536 + -0.066239 0.972886 -3.4034 0.847901 -0.310072 -0.430021 + -0.118475 0.842721 -3.34595 -0.0524469 -0.93101 -0.361206 + -0.136798 0.847063 -3.35448 -0.644376 -0.753483 -0.13055 + -0.15653 0.892167 -3.37189 -0.890448 -0.359363 -0.279214 + -0.153703 0.894503 -3.37832 -0.674709 -0.410682 -0.613277 + -0.14235 0.897646 -3.38808 -0.417194 -0.439866 -0.795278 + -0.152406 0.885082 -3.35423 -0.741875 -0.129474 0.65792 + -0.155902 0.88761 -3.36023 -0.946909 -0.249627 0.202609 + -0.17198 0.972621 -3.38504 -0.9643 -0.0919351 0.248343 + -0.172608 0.977179 -3.3967 -0.945945 -0.215313 -0.242544 + -0.162365 0.965675 -3.36855 -0.699381 0.0543021 0.712683 + -0.173576 1.05657 -3.38854 -0.70759 0.0642443 0.703697 + -0.18319 1.06351 -3.40504 -0.966261 -0.0545806 0.251715 + -0.183701 1.07108 -3.42438 -0.954115 -0.168561 -0.247492 + -0.164834 0.983602 -3.4144 -0.715077 -0.306015 -0.628507 + -0.148908 0.961604 -3.36056 -0.363474 0.127128 0.92289 + -0.151989 1.05016 -3.37509 -0.362219 0.1422 0.921182 + -0.182779 1.15464 -3.4068 -0.744595 0.0048785 0.667499 + -0.192791 1.16341 -3.42762 -0.977179 -0.0950015 0.18999 + -0.193301 1.17098 -3.44696 -0.954633 -0.154396 -0.254632 + -0.126099 1.04517 -3.36815 -0.0556157 0.15951 0.985628 + -0.120362 1.14332 -3.38379 -0.0355452 0.101679 0.994182 + -0.161192 1.14824 -3.39335 -0.374325 0.0748327 0.924273 + -0.166337 1.23463 -3.39624 -0.36861 -0.0912887 0.925091 + -0.196173 1.24694 -3.41281 -0.763863 -0.176581 0.620752 + -0.091073 1.14322 -3.38761 0.332416 0.0869823 0.939113 + -0.082343 1.22998 -3.39421 0.376697 -0.0499367 0.92499 + -0.125506 1.22972 -3.38668 -0.0387002 -0.0562603 0.997666 + -0.062932 1.14852 -3.40534 0.602212 0.0456936 0.797028 + -0.054202 1.23528 -3.41194 0.635332 -0.0503034 0.770599 + -0.039483 1.31898 -3.41339 0.690144 -0.142272 0.709549 + -0.079466 1.29589 -3.38419 0.412329 -0.155274 0.897705 + -0.122629 1.29563 -3.37666 0.00508542 -0.179858 0.98368 + -0.045961 1.1537 -3.42083 0.788275 0.00197918 0.615321 + -0.03486 1.24243 -3.43173 0.820211 -0.0729481 0.56739 + -0.020141 1.32613 -3.43318 0.907723 -0.15571 0.389608 + -0.011027 1.37809 -3.43342 0.904738 -0.252158 0.343314 + -0.033067 1.36756 -3.40765 0.720628 -0.225701 0.655556 + -0.03672 1.15996 -3.43768 0.984746 -0.101403 0.141399 + -0.025619 1.24869 -3.44858 0.992954 -0.0971488 0.0678533 + -0.020138 1.3201 -3.44856 0.984085 -0.132565 -0.118338 + -0.011025 1.37206 -3.4488 0.954851 -0.235054 -0.181681 + -0.051485 1.06648 -3.43248 0.880501 -0.236271 -0.410967 + -0.038864 1.16704 -3.4553 0.901422 -0.170848 -0.397805 + -0.030731 1.24856 -3.46418 0.885025 -0.089912 -0.456778 + -0.02525 1.31997 -3.46416 0.752804 -0.052248 -0.656168 + -0.019385 1.36442 -3.4612 0.71315 -0.158792 -0.68279 + -0.062989 1.07403 -3.45028 0.62977 -0.285083 -0.722576 + -0.053384 1.17657 -3.47777 0.658552 -0.200392 -0.725363 + -0.045251 1.2581 -3.48665 0.687995 0.0143905 -0.725573 + -0.040422 1.30972 -3.47184 0.527488 0.0333045 -0.84891 + -0.034557 1.35416 -3.46888 0.504975 -0.0713019 -0.860184 + -0.077743 0.980436 -3.4212 0.585176 -0.365 -0.724116 + -0.083243 1.08047 -3.46442 0.358027 -0.305043 -0.882477 + -0.073639 1.18301 -3.49191 0.382668 -0.207642 -0.90025 + -0.070166 1.25611 -3.50245 0.424421 -0.0109552 -0.905399 + -0.09248 0.89239 -3.38254 0.533952 -0.469653 -0.70308 + -0.104595 0.89648 -3.39094 0.260587 -0.476158 -0.839862 + -0.089859 0.984527 -3.4296 0.330789 -0.380542 -0.863578 + -0.104442 1.08492 -3.47127 0.0839557 -0.308391 -0.947548 + -0.107434 1.18723 -3.50136 0.0833086 -0.217474 -0.972504 + -0.116169 0.898099 -3.39343 0.0201028 -0.469621 -0.882639 + -0.111057 0.988976 -3.43646 0.0608176 -0.382686 -0.921874 + -0.132096 1.08551 -3.46917 -0.216844 -0.304605 -0.927467 + -0.133066 0.898663 -3.39205 -0.207426 -0.453354 -0.866859 + -0.127953 0.989541 -3.43507 -0.20885 -0.370352 -0.905108 + -0.157624 1.08271 -3.45826 -0.473128 -0.286403 -0.833141 + -0.165186 1.18429 -3.48549 -0.504392 -0.21294 -0.836806 + -0.135089 1.18782 -3.49926 -0.232552 -0.226026 -0.945955 + -0.153481 0.986745 -3.42415 -0.453962 -0.345674 -0.821236 + -0.175927 1.0775 -3.44208 -0.745893 -0.244613 -0.619523 + -0.183489 1.17908 -3.4693 -0.758234 -0.190554 -0.623514 + -0.192842 1.26553 -3.47934 -0.762133 -0.0916269 -0.640904 + -0.168579 1.25838 -3.49837 -0.517788 -0.0802621 -0.851736 + -0.202654 1.25742 -3.457 -0.940079 -0.141508 -0.310204 + -0.217438 1.34522 -3.45249 -0.913601 -0.1639 -0.372116 + -0.198307 1.32203 -3.4742 -0.704839 -0.0588379 -0.706923 + -0.174044 1.31488 -3.49323 -0.536643 -0.0347598 -0.843093 + -0.138482 1.26191 -3.51215 -0.215974 -0.0617531 -0.974444 + -0.206185 1.25572 -3.43363 -0.981405 -0.174053 0.0809284 + -0.220969 1.34351 -3.42911 -0.97659 -0.20886 -0.0514645 + -0.235157 1.39875 -3.42348 -0.938221 -0.330245 -0.103346 + -0.227261 1.39459 -3.45194 -0.896375 -0.298373 -0.32785 + -0.208129 1.3714 -3.47365 -0.75561 -0.241405 -0.608915 + -0.216163 1.33037 -3.4005 -0.834021 -0.251043 0.491311 + -0.23035 1.38562 -3.39487 -0.846167 -0.397572 0.354878 + -0.240846 1.40782 -3.38741 -0.853154 -0.306734 0.421951 + -0.246637 1.42629 -3.42525 -0.972225 -0.215448 -0.0914337 + -0.238741 1.42212 -3.45371 -0.88983 -0.204054 -0.408122 + -0.186326 1.31806 -3.38394 -0.380923 -0.241721 0.892451 + -0.193244 1.36576 -3.37333 -0.420574 -0.359847 0.832843 + -0.203739 1.38796 -3.36587 -0.440712 -0.314686 0.840682 + -0.233773 1.47268 -3.36828 -0.568142 -0.0261557 0.822515 + -0.247411 1.47396 -3.38664 -0.925928 -0.0468269 0.374787 + -0.129546 1.34333 -3.36606 -0.0229383 -0.380094 0.924663 + -0.129607 1.36256 -3.35343 -0.018699 -0.351372 0.936049 + -0.122787 1.41055 -3.34648 0.0740658 -0.0906146 0.993128 + -0.196918 1.43595 -3.35892 -0.247167 -0.0614541 0.967022 + -0.07305 1.34448 -3.37845 0.479049 -0.312017 0.820462 + -0.073112 1.36371 -3.36582 0.453341 -0.297844 0.840101 + -0.069783 1.41068 -3.36405 0.4847 -0.0663472 0.87216 + -0.117553 1.48198 -3.34654 0.0960616 -0.0144337 0.995271 + -0.164313 1.51504 -3.35114 -0.151542 0.0317332 0.987941 + -0.024941 1.39305 -3.40588 0.734603 -0.180485 0.654052 + -0.021612 1.44002 -3.40411 0.722868 -0.0173732 0.690768 + -0.064549 1.48211 -3.36411 0.542368 -0.0188203 0.83993 + -0.094516 1.52942 -3.34775 0.219293 0.0386151 0.974894 + -0.002901 1.40358 -3.43164 0.92223 -0.184969 0.339527 + 0.001168 1.44139 -3.43087 0.933247 -0.0297194 0.358005 + -0.021597 1.51175 -3.41137 0.748304 0.0181527 0.663108 + -0.013123 1.57046 -3.41925 0.914963 -0.040804 0.401468 + -0.056075 1.54083 -3.37199 0.71383 -0.0931773 0.694093 + -0.002896 1.3993 -3.45006 0.955614 -0.188155 -0.226717 + 0.001172 1.43711 -3.44928 0.955307 -0.0328413 -0.293784 + 0.001183 1.51311 -3.43813 0.989659 0.138968 0.0355261 + -0.011257 1.39166 -3.46246 0.703873 -0.169762 -0.689742 + -0.011073 1.44453 -3.46711 0.620548 0.046224 -0.782804 + -0.011063 1.52054 -3.45595 0.863862 0.088788 -0.495841 + -0.029536 1.38166 -3.47059 0.522139 -0.138507 -0.841538 + -0.029353 1.43453 -3.47524 0.575167 -0.06648 -0.81533 + -0.041779 1.51527 -3.50199 0.720635 -0.0311367 -0.692616 + -0.039756 1.59678 -3.49803 0.671506 0.042351 -0.739788 + -0.009039 1.60204 -3.45199 0.934666 -0.0735715 -0.347833 + -0.057839 1.37151 -3.48744 0.550857 -0.158949 -0.819324 + -0.054059 1.41429 -3.49364 0.595397 -0.144842 -0.790268 + -0.066486 1.49502 -3.5204 0.455704 -0.0515371 -0.888638 + -0.046079 1.64023 -3.49797 0.366265 0.195073 -0.909833 + -0.009016 1.72638 -3.45139 0.791461 0.0559912 -0.60865 + -0.06286 1.34401 -3.48573 0.544074 -0.0714078 -0.835993 + -0.101424 1.36259 -3.51539 0.317609 -0.165723 -0.933628 + -0.097644 1.40537 -3.52159 0.312029 -0.151729 -0.937879 + -0.065337 1.30773 -3.48765 0.526927 0.0953753 -0.844542 + -0.099036 1.33258 -3.50934 0.348894 -0.0589408 -0.935307 + -0.139275 1.33491 -3.513 -0.210491 -0.127275 -0.969275 + -0.141663 1.36492 -3.51906 -0.186031 -0.171324 -0.967492 + -0.101513 1.29631 -3.51126 0.253415 0.0453247 -0.966295 + -0.136033 1.29788 -3.51151 -0.209251 -0.0067073 -0.977839 + -0.177285 1.35191 -3.49472 -0.567322 -0.207713 -0.796869 + -0.184847 1.37756 -3.50042 -0.561368 -0.242097 -0.791363 + -0.103962 1.26034 -3.5119 0.131742 -0.0675522 -0.98898 + -0.215691 1.39704 -3.47935 -0.761032 -0.232816 -0.605497 + -0.241301 1.48495 -3.45658 -0.863912 -0.018531 -0.503302 + -0.218252 1.45987 -3.48222 -0.722114 -0.0439708 -0.690375 + -0.191368 1.42331 -3.50452 -0.556715 -0.0956094 -0.825183 + -0.148184 1.41067 -3.52316 -0.23442 -0.113724 -0.96546 + -0.123403 1.43634 -3.52897 -0.00501192 -0.0748548 -0.997182 + -0.253202 1.49243 -3.42449 -0.993295 -0.0314111 -0.111258 + -0.241996 1.59388 -3.44778 -0.857664 0.0824427 -0.507558 + -0.208758 1.54906 -3.49504 -0.634685 0.103079 -0.765865 + -0.181874 1.51251 -3.51734 -0.455282 0.0289566 -0.889876 + -0.157093 1.53818 -3.52316 -0.221255 0.149735 -0.963652 + -0.251002 1.57982 -3.39807 -0.922518 0.0173927 0.385562 + -0.253897 1.60135 -3.41568 -0.993631 0.0333873 -0.107627 + -0.238164 1.68532 -3.43339 -0.814071 0.214718 -0.539616 + -0.237364 1.57854 -3.37971 -0.615142 0.0878097 0.783511 + -0.234255 1.66947 -3.3863 -0.26206 -0.0333192 0.964476 + -0.249449 1.65451 -3.39346 -0.782252 -0.0145871 0.622791 + -0.252343 1.67604 -3.41108 -0.976304 0.130603 -0.17255 + -0.201168 1.55176 -3.3605 -0.296178 0.079298 0.951835 + -0.191027 1.58842 -3.36185 -0.195249 0.225642 0.954444 + -0.227224 1.6152 -3.38105 -0.197949 0.162864 0.966587 + -0.141276 1.56247 -3.35235 -0.0350407 0.18479 0.982153 + -0.143849 1.5932 -3.36212 0.00507204 0.329282 0.944218 + -0.193209 1.61933 -3.37365 -0.13668 0.296282 0.94527 + -0.225862 1.63376 -3.38559 0.167431 0.158994 0.972979 + -0.077163 1.57536 -3.35946 0.187325 0.222172 0.956843 + -0.079736 1.60609 -3.36923 0.102458 0.32863 0.938885 + -0.146032 1.62411 -3.37392 0.0161638 0.312995 0.949617 + -0.154579 1.64638 -3.37962 0.0426798 0.158979 0.986359 + -0.191848 1.63789 -3.37818 -0.123865 0.178654 0.976084 + -0.064608 1.54626 -3.36014 0.563743 -0.176207 0.806936 + -0.047256 1.5922 -3.37184 0.597639 0.0307288 0.801176 + -0.03764 1.62064 -3.38122 0.521036 0.141413 0.841739 + -0.068242 1.64546 -3.38563 0.114253 0.32247 0.939659 + -0.076789 1.66772 -3.39133 0.126788 0.181867 0.975115 + -0.021648 1.62986 -3.40189 0.798985 -0.086193 0.595142 + -0.012032 1.65829 -3.41127 0.769181 -0.0241418 0.638574 + -0.026146 1.66 -3.39762 0.465442 0.150505 0.872188 + -0.046152 1.69277 -3.39845 0.189343 0.128388 0.973481 + -0.148311 1.67115 -3.38142 0.0817894 0.0698268 0.994201 + -0.013115 1.62442 -3.41374 0.799651 -0.0706683 0.596291 + -0.003494 1.68935 -3.41994 0.782296 -0.0420202 0.621488 + -0.017607 1.69106 -3.4063 0.502039 0.0614457 0.862659 + -0.03203 1.74658 -3.40808 0.241514 0.0497681 0.96912 + -0.117674 1.6962 -3.38854 0.186673 0.0520213 0.981044 + 0.001204 1.6343 -3.43293 0.99647 -0.0624539 0.0560929 + 0.001212 1.68825 -3.42743 0.957973 -0.0297576 0.285309 + 0.00122 1.74377 -3.42341 0.952214 0.0484955 0.301557 + -0.003485 1.74487 -3.41593 0.633891 0.0715405 0.770106 + -0.041176 1.76728 -3.40588 0.299384 -0.0336773 0.953538 + 0.001227 1.75864 -3.43234 0.967184 0.197943 -0.159293 + -0.012625 1.78903 -3.41537 0.642229 0.234497 0.729762 + -0.082733 1.7756 -3.38966 0.234333 0.0185598 0.971979 + -0.126819 1.71691 -3.38634 0.1818 -0.0311398 0.982842 + -0.185579 1.66266 -3.37999 -0.0478121 0.0405391 0.998033 + -0.015339 1.76984 -3.45134 0.516497 0.33758 -0.786938 + -0.018947 1.81086 -3.42742 0.528296 0.839127 -0.129493 + -0.012619 1.80389 -3.4243 0.810861 0.573147 0.118353 + -0.054183 1.79735 -3.39915 0.312284 0.311382 0.897508 + -0.034331 1.77586 -3.45177 0.0653851 0.434678 -0.898209 + -0.037939 1.81688 -3.42785 0.170847 0.959794 -0.222725 + -0.060512 1.80431 -3.40227 0.146369 0.7268 0.671072 + -0.090427 1.62068 -3.50581 0.0462415 0.238949 -0.96993 + -0.078679 1.75631 -3.45961 0.00857797 0.384404 -0.923125 + -0.092595 1.81509 -3.42965 -0.0471287 0.921497 -0.385516 + -0.073656 1.81358 -3.41959 -0.0212948 0.938497 0.344631 + -0.096229 1.801 -3.39401 0.0430479 0.644191 0.763652 + -0.092244 1.526 -3.52778 0.200049 0.1253 -0.971741 + -0.155275 1.63286 -3.50119 -0.185561 0.254511 -0.9491 + -0.158067 1.74829 -3.46422 -0.144246 0.355974 -0.923296 + -0.171983 1.80707 -3.43425 -0.201026 0.862613 -0.464207 + -0.204926 1.6405 -3.48065 -0.546569 0.196231 -0.814098 + -0.207717 1.75593 -3.44368 -0.625529 0.318462 -0.712247 + -0.205488 1.79827 -3.42416 -0.563403 0.744809 -0.357542 + -0.180756 1.79915 -3.40445 -0.14267 0.948382 0.283227 + -0.228842 1.73752 -3.40879 -0.894368 0.327622 -0.304582 + -0.226613 1.77986 -3.38927 -0.699862 0.483846 0.52544 + -0.21426 1.79034 -3.39435 -0.354112 0.752381 0.555453 + -0.161817 1.79763 -3.39439 -0.0671082 0.738359 0.67106 + -0.243022 1.72825 -3.38648 -0.86226 0.338485 0.376743 + -0.227827 1.7432 -3.37932 -0.465084 0.283924 0.838501 + -0.215475 1.75369 -3.38439 0.0842919 0.184764 0.979161 + -0.184037 1.77387 -3.38475 -0.0551369 0.242618 0.968554 + -0.118449 1.77725 -3.38438 0.0616458 0.176749 0.982323 + -0.193972 1.69836 -3.3807 -0.037276 0.00223762 0.999302 + -0.162534 1.71855 -3.38106 0.0579043 0.00773888 0.998292 + 0.136798 0.847063 -3.35448 0.644273 -0.753569 -0.130558 + 0.133302 0.844537 -3.34848 0.418209 -0.778785 0.467541 + 0.118475 0.842721 -3.34595 0.0524625 -0.930993 -0.361248 + 0.152406 0.885082 -3.35423 0.741876 -0.129478 0.657917 + 0.138949 0.881012 -3.34624 0.345055 0.00308332 0.938577 + 0.124122 0.879198 -3.34372 0.0272044 0.0313708 0.999137 + 0.118475 0.842721 -3.34595 -0.166227 -0.123161 0.978366 + 0.133971 0.849398 -3.36091 0.374832 -0.728703 -0.573143 + 0.15653 0.892167 -3.37189 0.890448 -0.359363 -0.279214 + 0.155902 0.88761 -3.36023 0.946909 -0.249627 0.202609 + 0.162365 0.965675 -3.36855 0.698251 0.0564672 0.713622 + 0.148908 0.961604 -3.36056 0.362444 0.125742 0.923485 + 0.124687 0.850417 -3.36488 0.0825573 -0.726833 -0.681835 + 0.14235 0.897646 -3.38808 0.417194 -0.439866 -0.795278 + 0.153703 0.894503 -3.37832 0.674709 -0.410682 -0.613277 + 0.172608 0.977179 -3.3967 0.945946 -0.215314 -0.242543 + 0.17198 0.972621 -3.38504 0.964299 -0.0919315 0.248345 + 0.113113 0.848798 -3.36239 -0.224884 -0.747657 -0.624849 + 0.104595 0.89648 -3.39094 -0.259116 -0.473458 -0.841841 + 0.116169 0.898099 -3.39343 -0.0231674 -0.466681 -0.884122 + 0.133066 0.898663 -3.39205 0.207424 -0.453352 -0.866861 + 0.110367 0.844247 -3.35106 -0.51614 -0.813736 0.267271 + 0.108929 0.846051 -3.35592 -0.532043 -0.796446 -0.287409 + 0.088296 0.889645 -3.37606 -0.76816 -0.449908 -0.455535 + 0.09248 0.89239 -3.38254 -0.533949 -0.469652 -0.703082 + 0.089859 0.984527 -3.4296 -0.329647 -0.38184 -0.863441 + 0.088223 0.883575 -3.36059 -0.864952 -0.22641 0.447881 + 0.086785 0.885379 -3.36544 -0.933112 -0.357289 -0.0405903 + 0.064728 0.968621 -3.39278 -0.974249 -0.180286 0.135409 + 0.066239 0.972886 -3.4034 -0.847902 -0.310072 -0.430021 + 0.077743 0.980436 -3.4212 -0.585075 -0.364686 -0.724355 + 0.098235 0.880453 -3.35125 -0.620086 -0.0692159 0.781475 + 0.072933 0.963663 -3.37943 -0.776025 0.00563757 0.630677 + 0.057545 1.05444 -3.40151 -0.768709 0.0279504 0.638987 + 0.04934 1.0594 -3.41486 -0.979012 -0.109645 0.171793 + 0.051485 1.06648 -3.43248 -0.880498 -0.236275 -0.410971 + 0.106343 0.878927 -3.34614 -0.362615 -0.0130616 0.931847 + 0.105239 0.956342 -3.35604 -0.326999 0.126899 0.936466 + 0.082945 0.960539 -3.37009 -0.599746 0.0777342 0.796406 + 0.074516 1.04927 -3.38601 -0.59053 0.0874151 0.802267 + 0.045961 1.1537 -3.42083 -0.789501 -0.000536091 0.613749 + 0.123019 0.956611 -3.35362 0.0459985 0.143033 0.988648 + 0.126099 1.04517 -3.36815 0.054473 0.157725 0.985979 + 0.09681 1.04507 -3.37197 -0.331635 0.132492 0.934058 + 0.091073 1.14322 -3.38761 -0.335557 0.0824387 0.938406 + 0.062932 1.14852 -3.40534 -0.600801 0.0431508 0.798233 + 0.151989 1.05016 -3.37509 0.364926 0.138766 0.920637 + 0.161192 1.14824 -3.39335 0.373293 0.0729476 0.924841 + 0.120362 1.14332 -3.38379 0.0377029 0.0986842 0.994404 + 0.173576 1.05657 -3.38854 0.708296 0.0659715 0.702826 + 0.182779 1.15464 -3.4068 0.750561 -0.0066001 0.660768 + 0.196173 1.24694 -3.41281 0.77225 -0.159824 0.614887 + 0.166337 1.23463 -3.39624 0.375199 -0.0994423 0.921595 + 0.125506 1.22972 -3.38668 0.0332146 -0.0631781 0.997449 + 0.18319 1.06351 -3.40504 0.965254 -0.0474452 0.25697 + 0.192791 1.16341 -3.42762 0.977809 -0.0918353 0.188295 + 0.206185 1.25572 -3.43363 0.982062 -0.157466 0.103726 + 0.183701 1.07108 -3.42438 0.954114 -0.168562 -0.247493 + 0.193301 1.17098 -3.44696 0.958867 -0.143556 -0.244877 + 0.202654 1.25742 -3.457 0.940065 -0.13318 -0.313912 + 0.220969 1.34351 -3.42911 0.975769 -0.21253 -0.0520201 + 0.175927 1.0775 -3.44208 0.746257 -0.244036 -0.619312 + 0.183489 1.17908 -3.4693 0.75846 -0.191307 -0.623009 + 0.192842 1.26553 -3.47934 0.776011 -0.074095 -0.626352 + 0.198307 1.32203 -3.4742 0.726964 -0.0842817 -0.681484 + 0.217438 1.34522 -3.45249 0.915272 -0.162842 -0.368456 + 0.164834 0.983602 -3.4144 0.715204 -0.30648 -0.628135 + 0.157624 1.08271 -3.45826 0.473671 -0.287328 -0.832513 + 0.165186 1.18429 -3.48549 0.50443 -0.212649 -0.836858 + 0.168579 1.25838 -3.49837 0.516899 -0.079055 -0.852388 + 0.153481 0.986745 -3.42415 0.45316 -0.346539 -0.821314 + 0.132096 1.08551 -3.46917 0.215124 -0.306558 -0.927224 + 0.135089 1.18782 -3.49926 0.226565 -0.218286 -0.949221 + 0.138482 1.26191 -3.51215 0.212535 -0.0665339 -0.974886 + 0.127953 0.989541 -3.43507 0.208443 -0.369834 -0.905414 + 0.104442 1.08492 -3.47127 -0.082372 -0.310089 -0.947132 + 0.107434 1.18723 -3.50136 -0.0774923 -0.209999 -0.974626 + 0.103962 1.26034 -3.5119 -0.165686 -0.0385802 -0.985424 + 0.136033 1.29788 -3.51151 0.197503 0.00587325 -0.980285 + 0.111057 0.988976 -3.43646 -0.0611133 -0.383501 -0.921516 + 0.083243 1.08047 -3.46442 -0.358615 -0.306165 -0.88185 + 0.073639 1.18301 -3.49191 -0.38366 -0.20649 -0.900093 + 0.070166 1.25611 -3.50245 -0.40029 0.0243961 -0.916064 + 0.062989 1.07403 -3.45028 -0.629491 -0.285434 -0.722681 + 0.053384 1.17657 -3.47777 -0.658474 -0.200181 -0.725493 + 0.045251 1.2581 -3.48665 -0.663545 -0.01177 -0.748044 + 0.065337 1.30773 -3.48765 -0.513251 0.0778075 -0.854705 + 0.101513 1.29631 -3.51126 -0.289925 0.0125623 -0.956967 + 0.038864 1.16704 -3.4553 -0.896698 -0.179268 -0.404716 + 0.030731 1.24856 -3.46418 -0.886965 -0.107098 -0.449247 + 0.02525 1.31997 -3.46416 -0.762912 -0.0254145 -0.646002 + 0.040422 1.30972 -3.47184 -0.441165 0.123454 -0.888894 + 0.03672 1.15996 -3.43768 -0.984215 -0.10424 0.143019 + 0.025619 1.24869 -3.44858 -0.992268 -0.113612 0.0499617 + 0.020138 1.3201 -3.44856 -0.983841 -0.105445 -0.1447 + 0.019385 1.36442 -3.4612 -0.71315 -0.158792 -0.68279 + 0.034557 1.35416 -3.46888 -0.506327 -0.069517 -0.859535 + 0.03486 1.24243 -3.43173 -0.81622 -0.0825906 0.571808 + 0.020141 1.32613 -3.43318 -0.91029 -0.149717 0.38595 + 0.011025 1.37206 -3.4488 -0.954851 -0.235054 -0.181681 + 0.011257 1.39166 -3.46246 -0.705798 -0.165854 -0.688725 + 0.029536 1.38166 -3.47059 -0.50628 -0.123329 -0.853505 + 0.054202 1.23528 -3.41194 -0.642404 -0.0605293 0.763972 + 0.039483 1.31898 -3.41339 -0.688684 -0.144229 0.710571 + 0.033067 1.36756 -3.40765 -0.729707 -0.229854 0.643968 + 0.011027 1.37809 -3.43342 -0.906878 -0.247609 0.340972 + 0.002896 1.3993 -3.45006 -0.954732 -0.179947 -0.236867 + 0.082343 1.22998 -3.39421 -0.371166 -0.0581707 0.926743 + 0.079466 1.29589 -3.38419 -0.406767 -0.150988 0.900968 + 0.07305 1.34448 -3.37845 -0.476082 -0.317518 0.820078 + 0.073112 1.36371 -3.36582 -0.455116 -0.307591 0.835618 + 0.024941 1.39305 -3.40588 -0.73676 -0.177454 0.652453 + 0.122629 1.29563 -3.37666 -0.00834578 -0.178819 0.983847 + 0.129546 1.34333 -3.36606 0.0326732 -0.370994 0.92806 + 0.129607 1.36256 -3.35343 0.0419869 -0.366039 0.929652 + 0.122787 1.41055 -3.34648 -0.0563654 -0.068589 0.996051 + 0.069783 1.41068 -3.36405 -0.503245 -0.0429086 0.863078 + 0.186326 1.31806 -3.38394 0.386595 -0.234423 0.891959 + 0.193244 1.36576 -3.37333 0.411674 -0.355328 0.839206 + 0.203739 1.38796 -3.36587 0.449204 -0.297792 0.842339 + 0.196918 1.43595 -3.35892 0.323566 -0.0701775 0.9436 + 0.216163 1.33037 -3.4005 0.835803 -0.264212 0.481274 + 0.23035 1.38562 -3.39487 0.844753 -0.400001 0.355516 + 0.240846 1.40782 -3.38741 0.842707 -0.272854 0.464108 + 0.235157 1.39875 -3.42348 0.936443 -0.33423 -0.106606 + 0.246637 1.42629 -3.42525 0.973179 -0.207393 -0.0995559 + 0.253202 1.49243 -3.42449 0.992725 -0.0366179 -0.114701 + 0.247411 1.47396 -3.38664 0.901998 -0.0992285 0.420182 + 0.227261 1.39459 -3.45194 0.896336 -0.305675 -0.321162 + 0.238741 1.42212 -3.45371 0.893249 -0.19723 -0.403988 + 0.241301 1.48495 -3.45658 0.85445 -0.00846099 -0.519464 + 0.253897 1.60135 -3.41568 0.995215 0.0188373 -0.0958803 + 0.208129 1.3714 -3.47365 0.75453 -0.243187 -0.609545 + 0.215691 1.39704 -3.47935 0.745912 -0.216412 -0.629905 + 0.218252 1.45987 -3.48222 0.722687 -0.0414908 -0.689929 + 0.241996 1.59388 -3.44778 0.854788 0.0715361 -0.514023 + 0.177285 1.35191 -3.49472 0.554495 -0.198112 -0.808261 + 0.184847 1.37756 -3.50042 0.560997 -0.240097 -0.792234 + 0.191368 1.42331 -3.50452 0.598302 -0.122097 -0.791914 + 0.208758 1.54906 -3.49504 0.673867 0.0754104 -0.734994 + 0.174044 1.31488 -3.49323 0.538996 -0.0313707 -0.841724 + 0.139275 1.33491 -3.513 0.208385 -0.128411 -0.96958 + 0.141663 1.36492 -3.51906 0.204341 -0.191438 -0.959998 + 0.148184 1.41067 -3.52316 0.281806 -0.0985886 -0.954393 + 0.181874 1.51251 -3.51734 0.453933 0.0225164 -0.890751 + 0.099036 1.33258 -3.50934 -0.33649 -0.0718157 -0.938945 + 0.101424 1.36259 -3.51539 -0.315509 -0.164939 -0.934478 + 0.123403 1.43634 -3.52897 0.00318025 -0.053921 -0.99854 + 0.06286 1.34401 -3.48573 -0.544687 -0.0711034 -0.835619 + 0.057839 1.37151 -3.48744 -0.560434 -0.144803 -0.815442 + 0.054059 1.41429 -3.49364 -0.619498 -0.16478 -0.767509 + 0.097644 1.40537 -3.52159 -0.335099 -0.150186 -0.930136 + 0.029353 1.43453 -3.47524 -0.549058 -0.133942 -0.824982 + 0.066486 1.49502 -3.5204 -0.464117 -0.0279521 -0.885333 + 0.092244 1.526 -3.52778 -0.201548 0.125674 -0.971383 + 0.157093 1.53818 -3.52316 0.219024 0.148888 -0.964293 + 0.011073 1.44453 -3.46711 -0.701663 -0.0462202 -0.711008 + 0.041779 1.51527 -3.50199 -0.659504 0.0362806 -0.750825 + 0.090427 1.62068 -3.50581 -0.0789496 0.214656 -0.973494 + 0.155275 1.63286 -3.50119 0.181658 0.25687 -0.94922 + 0.204926 1.6405 -3.48065 0.553611 0.213123 -0.805042 + -0.001172 1.43711 -3.44928 -0.953563 -0.0380412 -0.298782 + 0.011063 1.52054 -3.45595 -0.832286 0.0430625 -0.552671 + 0.009039 1.60204 -3.45199 -0.857011 0.00284538 -0.515291 + 0.039756 1.59678 -3.49803 -0.547017 0.0302118 -0.836576 + 0.002901 1.40358 -3.43164 -0.923075 -0.188257 0.335399 + -0.001168 1.44139 -3.43087 -0.934062 -0.0272306 0.35607 + -0.001183 1.51311 -3.43813 -0.997473 0.0436565 0.0560497 + -0.001204 1.6343 -3.43293 -0.997772 -0.0301779 0.0594994 + 0.009016 1.72638 -3.45139 -0.792856 0.0694456 -0.605439 + 0.021612 1.44002 -3.40411 -0.697793 0.00819096 0.716253 + 0.021597 1.51175 -3.41137 -0.743377 0.00729435 0.668832 + 0.064549 1.48211 -3.36411 -0.54446 -0.0033888 0.83878 + 0.056075 1.54083 -3.37199 -0.71319 -0.108131 0.692581 + 0.013123 1.57046 -3.41925 -0.736621 -0.0302573 0.675628 + 0.117553 1.48198 -3.34654 -0.0977576 -0.0105094 0.995155 + 0.064608 1.54626 -3.36014 -0.575365 -0.11508 0.80976 + 0.013115 1.62442 -3.41374 -0.798984 -0.0661801 0.597699 + -0.001212 1.68825 -3.42743 -0.957608 -0.0312965 0.28637 + 0.164313 1.51504 -3.35114 0.149745 0.0264483 0.988371 + 0.141276 1.56247 -3.35235 0.0652717 0.203226 0.976954 + 0.094516 1.52942 -3.34775 -0.230284 -0.00764833 0.973093 + 0.047256 1.5922 -3.37184 -0.618391 0.00652165 0.785844 + 0.021648 1.62986 -3.40189 -0.801785 -0.0833689 0.591769 + 0.233773 1.47268 -3.36828 0.605837 -0.21071 0.767178 + 0.201168 1.55176 -3.3605 0.277501 0.0926896 0.956244 + 0.143849 1.5932 -3.36212 0.0172028 0.307579 0.951367 + 0.077163 1.57536 -3.35946 -0.184267 0.217304 0.958553 + 0.03764 1.62064 -3.38122 -0.523824 0.144665 0.839452 + 0.237364 1.57854 -3.37971 0.60568 0.0752778 0.79214 + 0.227224 1.6152 -3.38105 0.490765 0.229968 0.840395 + 0.191027 1.58842 -3.36185 0.15985 0.189648 0.968753 + 0.251002 1.57982 -3.39807 0.928625 -0.00304574 0.371007 + 0.249449 1.65451 -3.39346 0.781966 0.00512945 0.6233 + 0.225862 1.63376 -3.38559 0.23243 0.123383 0.964755 + 0.193209 1.61933 -3.37365 0.1369 0.296086 0.9453 + 0.146032 1.62411 -3.37392 -0.0189266 0.311497 0.950059 + 0.252343 1.67604 -3.41108 0.977085 0.145859 -0.155013 + 0.243022 1.72825 -3.38648 0.862257 0.338479 0.376756 + 0.227827 1.7432 -3.37932 0.465086 0.283922 0.838501 + 0.234255 1.66947 -3.3863 0.262314 -0.0480649 0.963785 + 0.238164 1.68532 -3.43339 0.721099 0.315619 -0.616767 + 0.228842 1.73752 -3.40879 0.884248 0.298036 -0.359554 + 0.226613 1.77986 -3.38927 0.699862 0.483846 0.52544 + 0.215475 1.75369 -3.38439 -0.101678 0.212118 0.97194 + 0.193972 1.69836 -3.3807 0.0147462 -0.000807294 0.999891 + 0.207717 1.75593 -3.44368 0.639032 0.293813 -0.710853 + 0.205488 1.79827 -3.42416 0.557475 0.742844 -0.37068 + 0.21426 1.79034 -3.39435 0.240132 0.743464 0.624178 + 0.158067 1.74829 -3.46422 0.149806 0.361443 -0.920281 + 0.171983 1.80707 -3.43425 0.210681 0.857248 -0.469829 + 0.180756 1.79915 -3.40445 0.186924 0.858491 0.477549 + 0.184037 1.77387 -3.38475 0.185257 0.36676 0.911683 + 0.078679 1.75631 -3.45961 -0.0180836 0.408411 -0.912619 + 0.092595 1.81509 -3.42965 -0.0998686 0.905177 -0.413135 + 0.073656 1.81358 -3.41959 -0.0489731 0.989422 -0.136549 + 0.161817 1.79763 -3.39439 0.117239 0.72963 0.673717 + 0.046079 1.64023 -3.49797 -0.35891 0.17425 -0.916963 + 0.034331 1.77586 -3.45177 -0.0388783 0.452067 -0.891136 + 0.015339 1.76984 -3.45134 -0.622701 0.309822 -0.718508 + 0.018947 1.81086 -3.42742 -0.516286 0.847025 -0.126479 + 0.037939 1.81688 -3.42785 -0.0844579 0.962918 -0.256235 + 0.060512 1.80431 -3.40227 -0.119611 0.685296 0.718375 + 0.096229 1.801 -3.39401 -0.0685941 0.624635 0.777898 + 0.012619 1.80389 -3.4243 -0.808603 0.564728 0.165056 + 0.054183 1.79735 -3.39915 -0.274466 0.318251 0.907405 + -0.001227 1.75864 -3.43234 -0.923257 0.257088 -0.285486 + 0.012625 1.78903 -3.41537 -0.64193 0.232742 0.730587 + 0.041176 1.76728 -3.40588 -0.304434 -0.0354456 0.951874 + 0.082733 1.7756 -3.38966 -0.232686 0.0457158 0.971477 + 0.118449 1.77725 -3.38438 -0.064762 0.178125 0.981874 + -0.00122 1.74377 -3.42341 -0.952216 0.0484923 0.30155 + 0.003485 1.74487 -3.41593 -0.632229 0.0733501 0.771302 + 0.03203 1.74658 -3.40808 -0.245848 0.0569166 0.967636 + 0.126819 1.71691 -3.38634 -0.177767 -0.045177 0.983035 + 0.162534 1.71855 -3.38106 -0.0562797 -0.0297123 0.997973 + 0.003494 1.68935 -3.41994 -0.78273 -0.0442299 0.620788 + 0.017607 1.69106 -3.4063 -0.488889 0.0536665 0.870694 + 0.046152 1.69277 -3.39845 -0.216602 0.0555768 0.974677 + 0.117674 1.6962 -3.38854 -0.154953 0.0559571 0.986336 + 0.012032 1.65829 -3.41127 -0.811477 -0.0666819 0.580567 + 0.026146 1.66 -3.39762 -0.4667 0.160985 0.869641 + 0.068242 1.64546 -3.38563 -0.108861 0.314174 0.943103 + 0.076789 1.66772 -3.39133 -0.125249 0.187527 0.974241 + 0.148311 1.67115 -3.38142 -0.0959864 0.0838564 0.991844 + 0.079736 1.60609 -3.36923 -0.0877122 0.33747 0.937241 + 0.154579 1.64638 -3.37962 -0.0428927 0.159269 0.986303 + 0.185579 1.66266 -3.37999 0.0509642 0.0400256 0.997898 + 0.191848 1.63789 -3.37818 0.124288 0.178936 0.975979 + -0.599647 0.53971 -3.10657 -0.395676 -0.882245 0.255117 + -0.586175 0.537351 -3.1025 0.0382405 -0.36898 0.92865 + -0.595384 0.580943 -3.08802 -0.141179 -0.173689 0.974629 + -0.576324 0.581513 -3.08902 0.232008 -0.168986 0.957923 + -0.59542 0.685736 -3.08962 -0.121704 0.0199639 0.992366 + -0.608855 0.583301 -3.0921 -0.40878 -0.186391 0.893396 + -0.621625 0.587169 -3.09879 -0.660344 -0.229308 0.715097 + -0.604914 0.543026 -3.11231 -0.598562 -0.793658 -0.108764 + -0.586175 0.537351 -3.1025 -0.000228404 -0.865987 -0.500066 + -0.571676 0.540546 -3.10803 0.494248 -0.846384 0.198376 + -0.561824 0.584708 -3.09456 0.558671 -0.186206 0.808216 + -0.551338 0.69182 -3.10017 0.52954 -0.0151439 0.84815 + -0.57636 0.686306 -3.09062 0.203849 0.0121425 0.978927 + -0.548117 0.591963 -3.10712 0.851263 -0.231359 0.470982 + -0.53763 0.699075 -3.11274 0.829607 -0.0636566 0.554708 + -0.523051 0.832381 -3.11654 0.778822 -0.0757542 0.622653 + -0.546327 0.812116 -3.10224 0.450073 -0.0204718 0.892757 + -0.571349 0.806601 -3.09268 0.137602 0.00995666 0.990437 + -0.566059 0.547996 -3.12093 0.607158 -0.724393 -0.326519 + -0.542499 0.599414 -3.12001 0.964921 -0.256918 0.0540361 + -0.527938 0.711931 -3.13499 0.986514 -0.114807 0.11666 + -0.513358 0.845238 -3.1388 0.981421 -0.121584 0.148425 + -0.605372 0.551679 -3.12737 -0.504871 -0.67326 -0.540209 + -0.591256 0.557566 -3.13757 -0.130253 -0.617476 -0.775731 + -0.577719 0.556843 -3.13631 0.13361 -0.639392 -0.757183 + -0.572659 0.555143 -3.13333 0.351091 -0.658123 -0.66604 + -0.54317 0.60936 -3.13725 0.876287 -0.286262 -0.387524 + -0.528608 0.721878 -3.15223 0.930118 -0.147194 -0.336475 + -0.511998 0.863474 -3.1584 0.945316 -0.118789 -0.303755 + -0.489735 1.01464 -3.13553 0.901997 -0.0358544 0.43025 + -0.513404 0.976579 -3.11442 0.590583 0.0166264 0.806806 + -0.536681 0.956314 -3.10013 0.301924 0.0503119 0.952004 + -0.539998 0.734214 -3.17363 0.788439 -0.157609 -0.594578 + -0.523388 0.875809 -3.1798 0.838502 -0.0856873 -0.538119 + -0.504907 1.04257 -3.16877 0.705771 -0.141211 -0.694224 + -0.488374 1.03288 -3.15513 0.894771 -0.120026 -0.430093 + -0.54977 0.616509 -3.14965 0.721342 -0.297364 -0.625492 + -0.557715 0.622536 -3.16013 0.549172 -0.304284 -0.778345 + -0.547943 0.740242 -3.18411 0.605163 -0.172563 -0.777174 + -0.53772 0.8772 -3.20066 0.671627 -0.123976 -0.730443 + -0.562775 0.624236 -3.16311 0.296171 -0.306305 -0.904688 + -0.556674 0.743174 -3.18924 0.337225 -0.194882 -0.921032 + -0.546451 0.880131 -3.2058 0.532273 -0.163371 -0.83066 + -0.539913 1.02456 -3.23291 0.784993 -0.168188 -0.596237 + -0.519239 1.04396 -3.18963 0.864432 -0.133117 -0.484806 + -0.575448 0.625885 -3.166 0.122911 -0.305821 -0.944122 + -0.569347 0.744823 -3.19213 0.135442 -0.219633 -0.966135 + -0.568121 0.873315 -3.22124 0.357146 -0.20475 -0.911331 + -0.588986 0.626609 -3.16726 -0.0837429 -0.299688 -0.950355 + -0.59271 0.746072 -3.19432 -0.0911789 -0.225703 -0.96992 + -0.591484 0.874562 -3.22342 -0.0441116 -0.246588 -0.968116 + -0.595496 1.0057 -3.25953 0.0893871 -0.245153 -0.965355 + -0.561584 1.01774 -3.24835 0.499579 -0.220708 -0.837681 + -0.60783 0.623089 -3.16117 -0.369648 -0.296901 -0.88046 + -0.611554 0.742554 -3.18823 -0.387965 -0.223543 -0.894154 + -0.620733 0.865637 -3.21597 -0.347217 -0.240953 -0.906301 + -0.621945 0.617204 -3.15097 -0.634042 -0.296573 -0.714167 + -0.635913 0.732394 -3.17062 -0.682062 -0.203838 -0.702311 + -0.645092 0.855476 -3.19836 -0.667173 -0.225454 -0.709966 + -0.660103 0.982023 -3.22652 -0.700863 -0.177584 -0.690837 + -0.624745 0.996771 -3.25208 -0.349333 -0.23417 -0.907266 + -0.631252 0.607295 -3.13376 -0.89556 -0.282222 -0.343979 + -0.64522 0.722485 -3.15341 -0.93676 -0.164801 -0.308741 + -0.659537 0.840098 -3.17165 -0.938084 -0.166875 -0.303565 + -0.630794 0.598641 -3.1187 -0.961021 -0.276293 -0.0100051 + -0.644429 0.707551 -3.12743 -0.989904 -0.109532 0.089957 + -0.658747 0.825165 -3.14567 -0.990262 -0.108617 0.0870886 + -0.673401 0.944969 -3.16209 -0.992213 -0.0530139 0.112706 + -0.674548 0.966645 -3.1998 -0.954531 -0.106706 -0.278361 + -0.626892 0.590484 -3.10453 -0.894568 -0.257589 0.365233 + -0.640528 0.699396 -3.11326 -0.88819 -0.0642961 0.454956 + -0.652691 0.812505 -3.12367 -0.883752 -0.0458961 0.4657 + -0.631437 0.693674 -3.10335 -0.61341 -0.0107478 0.789691 + -0.643601 0.806782 -3.11376 -0.630678 0.012058 0.775951 + -0.654151 0.924001 -3.12571 -0.622811 0.0443697 0.781113 + -0.667346 0.932309 -3.14009 -0.882415 -0.0134584 0.470278 + -0.618668 0.689806 -3.09666 -0.377197 0.0148861 0.926013 + -0.623781 0.803205 -3.10198 -0.402424 0.0313399 0.914917 + -0.634331 0.920423 -3.11392 -0.467161 0.0675622 0.881587 + -0.633643 1.04941 -3.12692 -0.40268 0.106096 0.909171 + -0.656342 1.0555 -3.13793 -0.585255 0.0550094 0.808981 + -0.600533 0.799135 -3.09494 -0.187967 0.0320471 0.981652 + -0.600585 0.924214 -3.09811 -0.254847 0.0736175 0.964175 + -0.599897 1.0532 -3.11111 -0.197205 0.168661 0.965745 + -0.571401 0.931682 -3.09585 -0.011632 0.0780312 0.996883 + -0.565238 1.05913 -3.11408 0.028076 0.184629 0.982407 + -0.590086 1.18348 -3.14239 0.138166 0.106386 0.984679 + -0.6301 1.19278 -3.13251 -0.0959655 0.0186021 0.995211 + -0.652799 1.19887 -3.14352 -0.784218 0.0287844 0.619817 + -0.530518 1.08377 -3.11835 0.165178 0.233346 0.958262 + -0.525271 1.19402 -3.15892 0.345001 0.213429 0.914014 + -0.555427 1.18942 -3.14536 0.225628 0.164157 0.960284 + -0.550287 1.27386 -3.15673 0.358751 -0.0906592 0.92902 + -0.59209 1.27668 -3.14199 0.268557 -0.134915 0.953769 + -0.504713 1.10571 -3.13411 0.439081 0.202716 0.875279 + -0.499466 1.21596 -3.17468 0.597109 0.190043 0.779323 + -0.492573 1.29355 -3.19233 0.78127 -0.0963477 0.616713 + -0.520131 1.27847 -3.17029 0.539567 -0.0830959 0.837832 + -0.481043 1.14377 -3.15522 0.72075 0.231674 0.653335 + -0.484796 1.23645 -3.19877 0.908286 0.105071 0.404941 + -0.477903 1.31404 -3.21642 0.962426 -0.177176 0.205777 + -0.4776 1.16244 -3.18029 0.947886 -0.0993064 -0.302738 + -0.481353 1.25512 -3.22384 0.99649 -0.0675314 -0.0494694 + -0.473405 1.33018 -3.25521 0.967246 -0.224523 -0.118427 + -0.460659 1.3721 -3.21381 0.947386 -0.201999 0.248306 + -0.494132 1.17213 -3.19393 0.621326 -0.407455 -0.669279 + -0.489383 1.26154 -3.26528 0.904318 -0.265871 -0.333947 + -0.481436 1.3366 -3.29665 0.919086 -0.253146 -0.30199 + -0.467885 1.3967 -3.30982 0.926739 -0.178114 -0.330802 + -0.456161 1.38825 -3.2526 0.973562 -0.205812 -0.0990929 + -0.51007 1.16584 -3.22143 0.878434 -0.250658 -0.406847 + -0.505321 1.25524 -3.29279 0.807945 -0.354259 -0.470878 + -0.497544 1.32711 -3.32836 0.81523 -0.298071 -0.496543 + -0.530744 1.14643 -3.26471 0.800967 -0.259368 -0.539611 + -0.523834 1.23336 -3.30446 0.711637 -0.361869 -0.602182 + -0.516057 1.30523 -3.34003 0.574913 -0.369233 -0.730166 + -0.510161 1.35627 -3.35803 0.521897 -0.224078 -0.823051 + -0.483994 1.38721 -3.34153 0.779375 -0.155347 -0.606994 + -0.554839 1.13258 -3.27977 0.492474 -0.292327 -0.819765 + -0.547929 1.21951 -3.31952 0.234365 -0.381114 -0.894329 + -0.54183 1.29023 -3.34464 0.127748 -0.388829 -0.91241 + -0.588752 1.12054 -3.29094 0.060928 -0.246485 -0.96723 + -0.571211 1.21744 -3.31362 -0.193696 -0.296705 -0.935119 + -0.565112 1.28817 -3.33874 -0.250429 -0.354414 -0.900931 + -0.571065 1.33621 -3.3588 -0.207175 -0.273593 -0.939268 + -0.535934 1.34128 -3.36264 0.136599 -0.265788 -0.954305 + -0.620091 1.11109 -3.28075 -0.396794 -0.180007 -0.900084 + -0.60255 1.20799 -3.30343 -0.364755 -0.194845 -0.910488 + -0.599507 1.281 -3.32394 -0.365231 -0.331205 -0.870005 + -0.655449 1.09635 -3.25519 -0.736141 -0.084263 -0.671562 + -0.635353 1.19906 -3.28293 -0.711862 -0.0973557 -0.695538 + -0.63231 1.27207 -3.30345 -0.668897 -0.302297 -0.679112 + -0.651824 1.31642 -3.31503 -0.68029 -0.350574 -0.643664 + -0.60546 1.32904 -3.344 -0.384072 -0.2997 -0.873309 + -0.673716 1.09031 -3.22162 -0.974606 0.0245032 -0.222582 + -0.65362 1.19303 -3.24936 -0.944054 0.0317371 -0.328261 + -0.655198 1.28001 -3.25948 -0.945845 -0.236045 -0.222844 + -0.672569 1.06863 -3.1839 -0.99552 0.0529502 0.0783397 + -0.659673 1.21423 -3.19885 -0.999563 0.0254922 -0.0149709 + -0.661251 1.30121 -3.20897 -0.979716 -0.200277 -0.00677262 + -0.681044 1.35648 -3.19517 -0.957619 -0.286415 0.030529 + -0.674712 1.32436 -3.27106 -0.92112 -0.353839 -0.162284 + -0.669537 1.06381 -3.15232 -0.911409 0.0557262 0.407711 + -0.65664 1.2094 -3.16726 -0.991558 0.015298 0.128755 + -0.661988 1.30826 -3.16319 -0.97416 -0.221999 0.0415746 + -0.681781 1.36353 -3.1494 -0.965138 -0.258043 0.0438349 + -0.69142 1.39961 -3.20542 -0.989456 -0.144563 -0.00880469 + -0.658146 1.29773 -3.13945 -0.805085 -0.301235 0.510975 + -0.676183 1.34892 -3.11645 -0.770492 -0.343897 0.536728 + -0.688456 1.41574 -3.10452 -0.792945 -0.183318 0.581062 + -0.694053 1.43035 -3.13747 -0.990135 -0.120375 0.0717083 + -0.632104 1.28597 -3.13211 -0.056002 -0.210062 0.976083 + -0.650141 1.33717 -3.10911 -0.123922 -0.362223 0.923817 + -0.663083 1.43514 -3.08933 -0.162551 -0.104915 0.981106 + -0.694699 1.50129 -3.10261 -0.830008 0.0232654 0.557266 + -0.595426 1.3246 -3.12652 0.274753 -0.25648 0.926676 + -0.592426 1.37152 -3.1152 0.34967 -0.208938 0.913278 + -0.647141 1.3841 -3.09778 0.0446279 -0.20144 0.978483 + -0.610696 1.49529 -3.0929 0.257429 -0.0587408 0.96451 + -0.669327 1.52069 -3.08742 -0.321728 0.0169348 0.946681 + -0.553622 1.32178 -3.14126 0.359052 -0.207137 0.910042 + -0.553749 1.3855 -3.13142 0.409103 -0.159627 0.898418 + -0.594754 1.44425 -3.10136 0.321298 -0.1072 0.940891 + -0.559255 1.52791 -3.11476 0.525865 -0.00144729 0.850567 + -0.630192 1.55703 -3.08185 0.100977 0.00421621 0.99488 + -0.511293 1.3278 -3.15936 0.556579 -0.206374 0.804754 + -0.511419 1.39152 -3.14952 0.546418 -0.0832728 0.833362 + -0.556076 1.45823 -3.11757 0.498239 -0.0479288 0.865714 + -0.518278 1.5461 -3.14755 0.615737 0.0208376 0.787676 + -0.578752 1.58965 -3.10371 0.481484 0.0939817 0.871402 + -0.483735 1.34288 -3.1814 0.78377 -0.196626 0.589103 + -0.476746 1.40784 -3.17703 0.747944 -0.0508529 0.661811 + -0.515098 1.47642 -3.15036 0.618598 0.015804 0.785548 + -0.45367 1.43706 -3.20944 0.918614 -0.0757433 0.387829 + -0.480425 1.49274 -3.17787 0.649703 -0.0134271 0.76007 + -0.48108 1.54865 -3.17669 0.625375 0.0117252 0.780236 + -0.505491 1.60545 -3.16036 0.59917 0.120357 0.791524 + -0.445592 1.45761 -3.24887 0.994259 -0.0965756 -0.0460731 + -0.448117 1.50459 -3.20464 0.867023 -0.0560747 0.495103 + -0.448771 1.5605 -3.20346 0.825698 -0.0102778 0.564019 + -0.468293 1.608 -3.18951 0.651428 0.105774 0.751301 + -0.511716 1.65707 -3.16855 0.560681 0.227697 0.79611 + -0.457315 1.46607 -3.30609 0.927942 -0.0428979 -0.370247 + -0.451384 1.55784 -3.28539 0.917649 0.0563454 -0.393377 + -0.440038 1.52514 -3.24407 0.997817 -0.0386578 -0.0535343 + -0.44228 1.59049 -3.2147 0.911159 0.0678879 0.406424 + -0.461802 1.63799 -3.20075 0.718727 0.172063 0.673665 + -0.479175 1.46326 -3.34309 0.709444 0.0159014 -0.704582 + -0.473244 1.55503 -3.32238 0.735131 0.147445 -0.661697 + -0.478094 1.62457 -3.30764 0.610939 0.257808 -0.748524 + -0.451207 1.62985 -3.27541 0.89141 0.0858259 -0.444996 + -0.439861 1.59715 -3.23409 0.997209 0.0732936 -0.0142172 + -0.505342 1.43232 -3.35958 0.470989 0.00252229 -0.882135 + -0.511446 1.53358 -3.35532 0.429737 0.164057 -0.887925 + -0.516295 1.60312 -3.34057 0.416979 0.309491 -0.854602 + -0.537834 1.40705 -3.37375 0.182857 -0.0822492 -0.979693 + -0.543937 1.50831 -3.36949 0.303683 0.0899715 -0.948516 + -0.537023 1.60222 -3.34832 0.184123 0.368034 -0.9114 + -0.511614 1.6777 -3.29858 0.28937 0.526455 -0.799444 + -0.572964 1.40198 -3.36991 -0.202334 -0.168695 -0.964678 + -0.574402 1.46469 -3.38058 -0.0760759 -0.0126248 -0.997022 + -0.579204 1.5192 -3.3771 -0.193519 0.176511 -0.965088 + -0.548739 1.56282 -3.36601 0.316272 0.24226 -0.917214 + -0.613389 1.3855 -3.35319 -0.410076 -0.176219 -0.894866 + -0.614827 1.44822 -3.36385 -0.511316 -0.027955 -0.858938 + -0.61217 1.51388 -3.35691 -0.602245 0.206249 -0.771208 + -0.57272 1.58157 -3.35632 -0.320473 0.419932 -0.84909 + -0.561004 1.62097 -3.33863 -0.333849 0.508427 -0.793755 + -0.659754 1.37288 -3.32422 -0.703646 -0.128658 -0.698806 + -0.664568 1.44361 -3.31868 -0.778445 0.0472612 -0.625931 + -0.66191 1.50927 -3.31174 -0.759013 0.167191 -0.629243 + -0.605686 1.57624 -3.33613 -0.557732 0.40186 -0.726253 + -0.685088 1.36749 -3.28131 -0.94787 -0.157782 -0.276854 + -0.689902 1.43823 -3.27578 -0.953167 -0.00851331 -0.302326 + -0.689713 1.50917 -3.26688 -0.934219 0.121313 -0.335437 + -0.651512 1.5761 -3.29962 -0.691041 0.356942 -0.628533 + -0.695203 1.43541 -3.17712 -0.996594 -0.0814507 -0.0129031 + -0.693685 1.47402 -3.24747 -0.994809 -0.00486001 -0.101647 + -0.696247 1.54582 -3.18751 -0.98585 0.153649 -0.0670154 + -0.679315 1.57599 -3.25476 -0.892513 0.288802 -0.346431 + -0.64218 1.63361 -3.26286 -0.620717 0.576953 -0.530882 + -0.700219 1.51068 -3.1681 -0.999331 0.0341685 -0.0130322 + -0.699069 1.50562 -3.12845 -0.992633 0.0457791 0.112181 + -0.68932 1.58412 -3.16583 -0.966944 0.254928 0.0055216 + -0.672388 1.61429 -3.23308 -0.864085 0.404913 -0.299003 + -0.681454 1.58115 -3.10895 -0.855246 0.300638 0.422103 + -0.685824 1.58547 -3.1348 -0.93901 0.297114 0.173158 + -0.662005 1.66235 -3.18016 -0.789805 0.607915 -0.0815297 + -0.631797 1.68167 -3.20994 -0.577602 0.725212 -0.374758 + -0.596354 1.63375 -3.29937 -0.509814 0.600107 -0.61641 + -0.669976 1.57825 -3.09243 -0.573563 0.209215 0.791994 + -0.644528 1.66153 -3.13093 -0.566316 0.625387 0.536821 + -0.658509 1.6637 -3.14912 -0.761311 0.573747 0.302028 + -0.616199 1.70786 -3.17339 -0.466202 0.884441 0.0204983 + -0.586291 1.68653 -3.23816 -0.442823 0.760081 -0.47559 + -0.630841 1.61459 -3.08686 -0.0659155 0.32616 0.943014 + -0.63305 1.65863 -3.1144 -0.293166 0.660131 0.691578 + -0.587185 1.68532 -3.13944 0.142529 0.609273 0.780046 + -0.602219 1.70569 -3.1552 -0.13366 0.816413 0.561787 + -0.584976 1.64128 -3.1119 0.369978 0.364401 0.854592 + -0.527694 1.69846 -3.172 0.405885 0.534781 0.741125 + -0.542727 1.71883 -3.18776 0.0864944 0.93909 0.332609 + -0.570693 1.71273 -3.20162 -0.280839 0.926943 -0.248809 + -0.55558 1.6976 -3.25378 -0.517705 0.769314 -0.37435 + -0.473636 1.66762 -3.19725 0.65203 0.228858 0.722828 + -0.489614 1.70901 -3.2007 0.430944 0.54735 0.717423 + -0.505275 1.72271 -3.2178 0.0235698 0.984215 0.1754 + -0.53324 1.7166 -3.23165 -0.302276 0.938104 -0.169085 + -0.455115 1.66861 -3.22165 0.891253 0.240903 0.384231 + -0.466949 1.69824 -3.21814 0.778274 0.294762 0.554442 + -0.486203 1.72094 -3.212 0.293686 0.834376 0.466439 + -0.479063 1.71713 -3.24826 0.180208 0.931448 -0.316118 + -0.514641 1.71965 -3.26057 -0.104614 0.921259 -0.374616 + -0.452697 1.67527 -3.24104 0.934911 0.205384 0.28941 + -0.463538 1.71018 -3.22945 0.79587 0.39513 0.458763 + -0.459991 1.71537 -3.24245 0.685288 0.726361 -0.0527265 + -0.462616 1.69921 -3.26817 0.580206 0.523166 -0.624226 + -0.44915 1.68046 -3.25404 0.968713 0.217705 -0.119158 + -0.464674 1.6486 -3.28953 0.645647 0.253095 -0.720474 + -0.498194 1.70173 -3.28048 0.14585 0.642187 -0.752545 + -0.536981 1.70065 -3.28269 -0.317241 0.762649 -0.56367 + -0.565644 1.64481 -3.31499 -0.496902 0.601337 -0.625685 + -0.532342 1.6768 -3.30633 -0.0263397 0.614403 -0.788553 + 0.586175 0.537351 -3.1025 0.000243815 -0.866319 -0.499491 + 0.571676 0.540546 -3.10803 -0.494402 -0.846208 0.19874 + 0.577719 0.556843 -3.13631 -0.133621 -0.639282 -0.757274 + 0.566059 0.547996 -3.12093 -0.607597 -0.724037 -0.326491 + 0.572659 0.555143 -3.13333 -0.351091 -0.658123 -0.66604 + 0.557715 0.622536 -3.16013 -0.549172 -0.304283 -0.778345 + 0.562775 0.624236 -3.16311 -0.296171 -0.306302 -0.904689 + 0.575448 0.625885 -3.166 -0.122914 -0.30581 -0.944125 + 0.591256 0.557566 -3.13757 0.130257 -0.617514 -0.775699 + 0.599647 0.53971 -3.10657 0.39564 -0.88214 0.255535 + 0.548117 0.591963 -3.10712 -0.851261 -0.231359 0.470985 + 0.542499 0.599414 -3.12001 -0.96492 -0.256926 0.0540289 + 0.54317 0.60936 -3.13725 -0.876285 -0.286263 -0.387527 + 0.54977 0.616509 -3.14965 -0.721344 -0.297361 -0.625491 + 0.547943 0.740242 -3.18411 -0.610035 -0.1674 -0.77449 + 0.561824 0.584708 -3.09456 -0.55867 -0.186201 0.808219 + 0.53763 0.699075 -3.11274 -0.823995 -0.0514958 0.564251 + 0.527938 0.711931 -3.13499 -0.986741 -0.113444 0.116068 + 0.528608 0.721878 -3.15223 -0.931691 -0.144223 -0.333394 + 0.539998 0.734214 -3.17363 -0.788 -0.154734 -0.595913 + 0.576324 0.581513 -3.08902 -0.232011 -0.168985 0.957922 + 0.57636 0.686306 -3.09062 -0.19836 0.0200232 0.979925 + 0.551338 0.69182 -3.10017 -0.53232 -0.00919047 0.846493 + 0.546327 0.812116 -3.10224 -0.448823 -0.0142062 0.893508 + 0.523051 0.832381 -3.11654 -0.781541 -0.0682296 0.620112 + 0.586175 0.537351 -3.1025 -0.0382405 -0.36898 0.92865 + 0.595384 0.580943 -3.08802 0.14118 -0.173692 0.974628 + 0.59542 0.685736 -3.08962 0.116646 0.0276129 0.99279 + 0.600533 0.799135 -3.09494 0.188462 0.0350788 0.981454 + 0.571349 0.806601 -3.09268 -0.142137 0.0174456 0.989693 + 0.608855 0.583301 -3.0921 0.408782 -0.186392 0.893395 + 0.618668 0.689806 -3.09666 0.378271 0.0167921 0.925543 + 0.623781 0.803205 -3.10198 0.394585 0.0423474 0.917883 + 0.621625 0.587169 -3.09879 0.660343 -0.229307 0.715098 + 0.631437 0.693674 -3.10335 0.61122 -0.00708814 0.791429 + 0.643601 0.806782 -3.11376 0.630021 0.0108439 0.776503 + 0.634331 0.920423 -3.11392 0.460695 0.0582786 0.885643 + 0.604914 0.543026 -3.11231 0.599491 -0.793042 -0.10814 + 0.626892 0.590484 -3.10453 0.894568 -0.257591 0.365234 + 0.640528 0.699396 -3.11326 0.888186 -0.0642877 0.454964 + 0.652691 0.812505 -3.12367 0.883749 -0.0458952 0.465705 + 0.605372 0.551679 -3.12737 0.504876 -0.673182 -0.540301 + 0.630794 0.598641 -3.1187 0.96102 -0.276298 -0.0100097 + 0.644429 0.707551 -3.12743 0.989905 -0.109532 0.0899532 + 0.658747 0.825165 -3.14567 0.990262 -0.108622 0.0870825 + 0.667346 0.932309 -3.14009 0.883841 -0.00785025 0.467721 + 0.60783 0.623089 -3.16117 0.369652 -0.296886 -0.880464 + 0.621945 0.617204 -3.15097 0.634053 -0.296556 -0.714165 + 0.631252 0.607295 -3.13376 0.895559 -0.282223 -0.343981 + 0.64522 0.722485 -3.15341 0.936761 -0.164802 -0.30874 + 0.659537 0.840098 -3.17165 0.938084 -0.166874 -0.303564 + 0.588986 0.626609 -3.16726 0.0837446 -0.299678 -0.950358 + 0.611554 0.742554 -3.18823 0.385992 -0.219779 -0.89594 + 0.635913 0.732394 -3.17062 0.682056 -0.203846 -0.702315 + 0.569347 0.744823 -3.19213 -0.153065 -0.198109 -0.968155 + 0.59271 0.746072 -3.19432 0.095782 -0.220521 -0.970668 + 0.591484 0.874562 -3.22342 0.0317438 -0.231361 -0.97235 + 0.620733 0.865637 -3.21597 0.343933 -0.244555 -0.906589 + 0.645092 0.855476 -3.19836 0.667174 -0.225451 -0.709966 + 0.556674 0.743174 -3.18924 -0.327316 -0.176342 -0.928314 + 0.546451 0.880131 -3.2058 -0.569295 -0.120708 -0.813224 + 0.568121 0.873315 -3.22124 -0.354692 -0.199356 -0.913483 + 0.53772 0.8772 -3.20066 -0.66086 -0.0869969 -0.74545 + 0.519239 1.04396 -3.18963 -0.865697 -0.130476 -0.483265 + 0.539913 1.02456 -3.23291 -0.790094 -0.178882 -0.586305 + 0.561584 1.01774 -3.24835 -0.494967 -0.229583 -0.838033 + 0.523388 0.875809 -3.1798 -0.828502 -0.099929 -0.550999 + 0.504907 1.04257 -3.16877 -0.701565 -0.125339 -0.701496 + 0.494132 1.17213 -3.19393 -0.702786 -0.297564 -0.646179 + 0.51007 1.16584 -3.22143 -0.883429 -0.260642 -0.389383 + 0.530744 1.14643 -3.26471 -0.793758 -0.276857 -0.541571 + 0.511998 0.863474 -3.1584 -0.945307 -0.128199 -0.299932 + 0.488374 1.03288 -3.15513 -0.907395 -0.0970555 -0.408919 + 0.4776 1.16244 -3.18029 -0.942434 -0.0736707 -0.326177 + 0.513358 0.845238 -3.1388 -0.980347 -0.103779 0.167779 + 0.489735 1.01464 -3.13553 -0.901546 -0.0392282 0.430902 + 0.481043 1.14377 -3.15522 -0.784117 0.158754 0.599965 + 0.481353 1.25512 -3.22384 -0.987784 -0.134563 -0.0785871 + 0.513404 0.976579 -3.11442 -0.620808 -0.00632017 0.783937 + 0.504713 1.10571 -3.13411 -0.43755 0.197514 0.877233 + 0.499466 1.21596 -3.17468 -0.560644 0.224104 0.797155 + 0.484796 1.23645 -3.19877 -0.909717 0.11299 0.39956 + 0.536681 0.956314 -3.10013 -0.299688 0.0448607 0.952982 + 0.530518 1.08377 -3.11835 -0.212246 0.192842 0.958 + 0.525271 1.19402 -3.15892 -0.354516 0.225312 0.907498 + 0.520131 1.27847 -3.17029 -0.522122 -0.06221 0.850599 + 0.492573 1.29355 -3.19233 -0.785878 -0.0859075 0.612386 + 0.571401 0.931682 -3.09585 -0.0186609 0.0506652 0.998541 + 0.565238 1.05913 -3.11408 -0.0270512 0.17978 0.983335 + 0.555427 1.18942 -3.14536 -0.22573 0.16772 0.959643 + 0.550287 1.27386 -3.15673 -0.377021 -0.0697977 0.923571 + 0.600585 0.924214 -3.09811 0.26355 0.0591017 0.962834 + 0.599897 1.0532 -3.11111 0.172546 0.132078 0.976106 + 0.590086 1.18348 -3.14239 -0.159698 0.122843 0.979493 + 0.59209 1.27668 -3.14199 -0.260878 -0.122862 0.957522 + 0.553622 1.32178 -3.14126 -0.370477 -0.22021 0.90236 + 0.633643 1.04941 -3.12692 0.424491 0.0719949 0.902565 + 0.6301 1.19278 -3.13251 0.110953 0.0452532 0.992795 + 0.632104 1.28597 -3.13211 0.0597121 -0.214011 0.975004 + 0.650141 1.33717 -3.10911 0.130295 -0.352698 0.926621 + 0.595426 1.3246 -3.12652 -0.269633 -0.261987 0.92664 + 0.656342 1.0555 -3.13793 0.591563 0.0726874 0.802976 + 0.652799 1.19887 -3.14352 0.805247 -0.0103013 0.59285 + 0.658146 1.29773 -3.13945 0.807861 -0.295182 0.510125 + 0.676183 1.34892 -3.11645 0.76637 -0.33731 0.546716 + 0.647141 1.3841 -3.09778 0.0196004 -0.208752 0.977772 + 0.654151 0.924001 -3.12571 0.625688 0.0396191 0.779066 + 0.669537 1.06381 -3.15232 0.902329 0.0752977 0.42442 + 0.65664 1.2094 -3.16726 0.9916 0.0126026 0.128726 + 0.661988 1.30826 -3.16319 0.972988 -0.22795 0.0365212 + 0.681781 1.36353 -3.1494 0.967543 -0.250185 0.0355947 + 0.672569 1.06863 -3.1839 0.995392 0.0595037 0.0751907 + 0.659673 1.21423 -3.19885 0.999634 0.0247544 -0.0109318 + 0.661251 1.30121 -3.20897 0.976592 -0.214797 0.011416 + 0.673401 0.944969 -3.16209 0.990919 -0.0358034 0.129608 + 0.673716 1.09031 -3.22162 0.981413 0.0772892 -0.175653 + 0.65362 1.19303 -3.24936 0.951391 0.015203 -0.307611 + 0.655198 1.28001 -3.25948 0.945373 -0.237076 -0.223751 + 0.674548 0.966645 -3.1998 0.954604 -0.107671 -0.277738 + 0.655449 1.09635 -3.25519 0.734716 -0.0814427 -0.673469 + 0.635353 1.19906 -3.28293 0.702803 -0.113193 -0.702321 + 0.63231 1.27207 -3.30345 0.667225 -0.299354 -0.682054 + 0.674712 1.32436 -3.27106 0.922116 -0.337831 -0.188608 + 0.660103 0.982023 -3.22652 0.698063 -0.181005 -0.69278 + 0.620091 1.11109 -3.28075 0.407212 -0.167293 -0.897881 + 0.60255 1.20799 -3.30343 0.37079 -0.203717 -0.906098 + 0.599507 1.281 -3.32394 0.37684 -0.318738 -0.869711 + 0.624745 0.996771 -3.25208 0.350796 -0.236701 -0.906044 + 0.588752 1.12054 -3.29094 -0.0477699 -0.263829 -0.963386 + 0.571211 1.21744 -3.31362 0.221806 -0.250833 -0.942276 + 0.565112 1.28817 -3.33874 0.235505 -0.334477 -0.912503 + 0.60546 1.32904 -3.344 0.381397 -0.294914 -0.876106 + 0.595496 1.0057 -3.25953 -0.105458 -0.262441 -0.959168 + 0.554839 1.13258 -3.27977 -0.518927 -0.321927 -0.791883 + 0.547929 1.21951 -3.31952 -0.249059 -0.359619 -0.899246 + 0.54183 1.29023 -3.34464 -0.0740494 -0.338382 -0.938091 + 0.523834 1.23336 -3.30446 -0.697298 -0.358713 -0.620564 + 0.516057 1.30523 -3.34003 -0.582081 -0.354316 -0.731876 + 0.535934 1.34128 -3.36264 -0.137462 -0.260306 -0.955691 + 0.571065 1.33621 -3.3588 0.201581 -0.280311 -0.938505 + 0.505321 1.25524 -3.29279 -0.818346 -0.327323 -0.472408 + 0.497544 1.32711 -3.32836 -0.816902 -0.301401 -0.49176 + 0.483994 1.38721 -3.34153 -0.775746 -0.161629 -0.609995 + 0.510161 1.35627 -3.35803 -0.488695 -0.194202 -0.850566 + 0.489383 1.26154 -3.26528 -0.904968 -0.270941 -0.328062 + 0.481436 1.3366 -3.29665 -0.915867 -0.261005 -0.305063 + 0.467885 1.3967 -3.30982 -0.928441 -0.188584 -0.320053 + 0.457315 1.46607 -3.30609 -0.927096 -0.0425561 -0.372401 + 0.479175 1.46326 -3.34309 -0.658218 0.0666085 -0.749875 + 0.473405 1.33018 -3.25521 -0.967109 -0.225588 -0.117519 + 0.456161 1.38825 -3.2526 -0.976451 -0.197322 -0.087216 + 0.445592 1.45761 -3.24887 -0.993196 -0.110171 -0.0377359 + 0.477903 1.31404 -3.21642 -0.960145 -0.167453 0.223787 + 0.460659 1.3721 -3.21381 -0.94851 -0.199063 0.246379 + 0.45367 1.43706 -3.20944 -0.939605 -0.120269 0.320434 + 0.440038 1.52514 -3.24407 -0.998748 -0.0292534 -0.0405875 + 0.483735 1.34288 -3.1814 -0.7891 -0.202178 0.580039 + 0.476746 1.40784 -3.17703 -0.74284 -0.0650878 0.666298 + 0.448117 1.50459 -3.20464 -0.872914 -0.0389951 0.486313 + 0.439861 1.59715 -3.23409 -0.998251 0.0590164 -0.00333648 + 0.451384 1.55784 -3.28539 -0.923745 0.0418626 -0.380713 + 0.511293 1.3278 -3.15936 -0.555793 -0.207193 0.805087 + 0.511419 1.39152 -3.14952 -0.521974 -0.0549894 0.851187 + 0.480425 1.49274 -3.17787 -0.626794 0.0123308 0.779088 + 0.48108 1.54865 -3.17669 -0.625956 0.0126517 0.779755 + 0.448771 1.5605 -3.20346 -0.827301 0.0108676 0.561654 + 0.553749 1.3855 -3.13142 -0.438725 -0.116221 0.891074 + 0.515098 1.47642 -3.15036 -0.60825 -0.00548743 0.793726 + 0.518278 1.5461 -3.14755 -0.617348 0.0191448 0.786457 + 0.468293 1.608 -3.18951 -0.655544 0.0993218 0.748597 + 0.592426 1.37152 -3.1152 -0.329543 -0.19098 0.924623 + 0.556076 1.45823 -3.11757 -0.529834 -0.0763028 0.844662 + 0.559255 1.52791 -3.11476 -0.52542 -0.0022562 0.85084 + 0.505491 1.60545 -3.16036 -0.596333 0.115572 0.794374 + 0.461802 1.63799 -3.20075 -0.728222 0.170082 0.663902 + 0.594754 1.44425 -3.10136 -0.320473 -0.108846 0.940983 + 0.610696 1.49529 -3.0929 -0.300197 -0.069006 0.951378 + 0.578752 1.58965 -3.10371 -0.455998 0.109159 0.883261 + 0.663083 1.43514 -3.08933 0.1661 -0.119303 0.978865 + 0.630192 1.55703 -3.08185 -0.10993 0.030537 0.99347 + 0.584976 1.64128 -3.1119 -0.376148 0.36761 0.850515 + 0.511716 1.65707 -3.16855 -0.528292 0.248882 0.811767 + 0.473636 1.66762 -3.19725 -0.654973 0.238546 0.717012 + 0.688456 1.41574 -3.10452 0.785701 -0.191776 0.588129 + 0.669327 1.52069 -3.08742 0.343381 0.0137743 0.939095 + 0.669976 1.57825 -3.09243 0.545064 0.242442 0.802575 + 0.630841 1.61459 -3.08686 0.0365782 0.313114 0.949011 + 0.587185 1.68532 -3.13944 -0.243375 0.578913 0.778221 + 0.694053 1.43035 -3.13747 0.98998 -0.126578 0.062592 + 0.699069 1.50562 -3.12845 0.992826 0.0512256 0.108035 + 0.694699 1.50129 -3.10261 0.831711 0.0149211 0.555008 + 0.681454 1.58115 -3.10895 0.85654 0.306446 0.415247 + 0.63305 1.65863 -3.1144 0.303509 0.605713 0.735523 + 0.695203 1.43541 -3.17712 0.994445 -0.105055 -0.00647968 + 0.700219 1.51068 -3.1681 0.999117 0.0413441 -0.00750497 + 0.685824 1.58547 -3.1348 0.953066 0.263568 0.148983 + 0.658509 1.6637 -3.14912 0.758979 0.576913 0.301865 + 0.644528 1.66153 -3.13093 0.593316 0.610819 0.524287 + 0.681044 1.35648 -3.19517 0.96115 -0.273334 0.0384635 + 0.69142 1.39961 -3.20542 0.988231 -0.150775 0.025803 + 0.693685 1.47402 -3.24747 0.984788 -0.00702456 -0.173617 + 0.685088 1.36749 -3.28131 0.939304 -0.178376 -0.293071 + 0.689902 1.43823 -3.27578 0.945442 0.0647043 -0.3193 + 0.664568 1.44361 -3.31868 0.772747 0.0315309 -0.633931 + 0.689713 1.50917 -3.26688 0.936623 0.0982223 -0.336288 + 0.659754 1.37288 -3.32422 0.700141 -0.11796 -0.704193 + 0.613389 1.3855 -3.35319 0.438298 -0.151212 -0.886019 + 0.614827 1.44822 -3.36385 0.520671 -0.036705 -0.852968 + 0.61217 1.51388 -3.35691 0.583947 0.183285 -0.79083 + 0.66191 1.50927 -3.31174 0.762714 0.1616 -0.626221 + 0.651824 1.31642 -3.31503 0.692214 -0.337772 -0.637769 + 0.572964 1.40198 -3.36991 0.180221 -0.134421 -0.974398 + 0.574402 1.46469 -3.38058 -0.0310583 -0.0582377 -0.997819 + 0.537834 1.40705 -3.37375 -0.178854 -0.0681361 -0.981514 + 0.543937 1.50831 -3.36949 -0.294815 0.0607852 -0.953619 + 0.548739 1.56282 -3.36601 -0.170037 0.270589 -0.947559 + 0.579204 1.5192 -3.3771 0.20674 0.158669 -0.965444 + 0.505342 1.43232 -3.35958 -0.470406 0.00257515 -0.882446 + 0.511446 1.53358 -3.35532 -0.48973 0.124315 -0.862966 + 0.537023 1.60222 -3.34832 -0.177116 0.384811 -0.905842 + 0.57272 1.58157 -3.35632 0.313933 0.408095 -0.857266 + 0.605686 1.57624 -3.33613 0.552667 0.405386 -0.728163 + 0.473244 1.55503 -3.32238 -0.72584 0.125452 -0.676327 + 0.478094 1.62457 -3.30764 -0.543061 0.294721 -0.786272 + 0.516295 1.60312 -3.34057 -0.420779 0.315638 -0.850481 + 0.532342 1.6768 -3.30633 0.048752 0.589195 -0.806519 + 0.561004 1.62097 -3.33863 0.273532 0.518614 -0.810074 + 0.451207 1.62985 -3.27541 -0.90451 0.100457 -0.414452 + 0.464674 1.6486 -3.28953 -0.642418 0.275969 -0.71494 + 0.511614 1.6777 -3.29858 -0.347331 0.436341 -0.830041 + 0.498194 1.70173 -3.28048 -0.230112 0.644323 -0.729312 + 0.536981 1.70065 -3.28269 0.370334 0.757388 -0.537788 + 0.44915 1.68046 -3.25404 -0.968714 0.217707 -0.119152 + 0.462616 1.69921 -3.26817 -0.580206 0.523167 -0.624225 + 0.452697 1.67527 -3.24104 -0.934911 0.205382 0.289412 + 0.459991 1.71537 -3.24245 -0.685288 0.726361 -0.0527265 + 0.479063 1.71713 -3.24826 -0.15561 0.937762 -0.310464 + 0.514641 1.71965 -3.26057 0.0862263 0.949963 -0.300226 + 0.44228 1.59049 -3.2147 -0.92994 0.0129552 0.367484 + 0.455115 1.66861 -3.22165 -0.891256 0.240899 0.384227 + 0.466949 1.69824 -3.21814 -0.778274 0.294762 0.554442 + 0.463538 1.71018 -3.22945 -0.79587 0.39513 0.458763 + 0.486203 1.72094 -3.212 -0.361332 0.839313 0.406194 + 0.489614 1.70901 -3.2007 -0.53588 0.426681 0.728544 + 0.527694 1.69846 -3.172 -0.387392 0.504702 0.771494 + 0.505275 1.72271 -3.2178 0.0152854 0.997239 0.0726618 + 0.53324 1.7166 -3.23165 0.277026 0.943507 -0.1818 + 0.55558 1.6976 -3.25378 0.525324 0.776818 -0.347259 + 0.565644 1.64481 -3.31499 0.489238 0.61329 -0.620099 + 0.602219 1.70569 -3.1552 0.117109 0.851477 0.511149 + 0.542727 1.71883 -3.18776 -0.0753783 0.939426 0.334361 + 0.570693 1.71273 -3.20162 0.284602 0.933741 -0.217093 + 0.586291 1.68653 -3.23816 0.434657 0.765782 -0.473975 + 0.596354 1.63375 -3.29937 0.515409 0.604416 -0.607483 + 0.616199 1.70786 -3.17339 0.424719 0.90491 0.0274165 + 0.662005 1.66235 -3.18016 0.83368 0.541835 -0.106734 + 0.631797 1.68167 -3.20994 0.564281 0.719699 -0.4045 + 0.64218 1.63361 -3.26286 0.61592 0.582273 -0.530661 + 0.651512 1.5761 -3.29962 0.694891 0.364893 -0.619661 + 0.68932 1.58412 -3.16583 0.968412 0.249146 0.0102062 + 0.672388 1.61429 -3.23308 0.864893 0.406283 -0.294778 + 0.696247 1.54582 -3.18751 0.986079 0.153325 -0.0643388 + 0.679315 1.57599 -3.25476 0.894676 0.284279 -0.344587 + -0.791942 1.67972 -2.78532 0.57781 0.0178925 -0.815975 + -0.814274 1.75317 -2.76932 0.5203 0.360047 -0.774374 + -0.806332 1.74827 -2.76421 0.525217 0.247992 -0.814031 + -0.798455 1.68053 -2.78978 0.573549 0.0465163 -0.817849 + -0.821988 1.74942 -2.77501 0.392105 0.393541 -0.831492 + -0.839872 1.7517 -2.78167 0.324098 0.346841 -0.880149 + -0.783999 1.67483 -2.78021 0.520899 0.00297169 -0.853613 + -0.790093 1.63509 -2.76291 0.0406251 -0.657813 -0.752085 + -0.796606 1.6359 -2.76737 0.556685 -0.551575 -0.621182 + -0.806169 1.67678 -2.79547 0.58398 0.0337181 -0.811068 + -0.766685 1.66096 -2.76934 0.516122 0.0149379 -0.856385 + -0.771053 1.63108 -2.76692 0.0382173 -0.475519 -0.878875 + -0.798681 1.59594 -2.70875 -0.0721774 -0.809432 -0.582761 + -0.806055 1.59391 -2.7076 0.346035 -0.808587 -0.475865 + -0.785028 1.76407 -2.74993 0.397479 0.181623 -0.899457 + -0.745381 1.67676 -2.75506 0.406251 0.141869 -0.902681 + -0.753738 1.61722 -2.75605 0.0231711 -0.459699 -0.887772 + -0.779641 1.59193 -2.71276 -0.331518 -0.754291 -0.566692 + -0.801867 1.57579 -2.67967 -0.0110228 -0.910444 -0.413485 + -0.790993 1.80279 -2.74591 0.275007 0.172826 -0.945782 + -0.698784 1.73801 -2.7231 0.50199 0.185631 -0.844717 + -0.679217 1.69936 -2.72044 0.629685 0.134055 -0.765197 + -0.725814 1.6381 -2.75241 0.355598 -0.0303209 -0.934147 + -0.734684 1.58857 -2.74297 0.0327962 -0.619907 -0.78399 + -0.853578 1.78375 -2.77168 0.220067 0.407499 -0.886293 + -0.844884 1.82745 -2.74932 0.163304 0.275887 -0.947216 + -0.769243 1.83163 -2.73897 0.27562 0.220377 -0.935664 + -0.70475 1.77673 -2.71907 0.421994 0.128815 -0.8974 + -0.658122 1.69592 -2.69818 0.752723 0.0196255 -0.658044 + -0.891408 1.71798 -2.81212 -0.0288314 0.365883 -0.930214 + -0.895508 1.7952 -2.77479 -0.0844793 0.454784 -0.886586 + -0.886814 1.83889 -2.75243 -0.0429062 0.443317 -0.895338 + -0.823133 1.85629 -2.74238 0.0960795 0.302845 -0.948184 + -0.747032 1.84454 -2.72582 0.413157 0.274891 -0.86818 + -0.877702 1.68593 -2.82211 0.0811858 0.173054 -0.981561 + -0.92314 1.70255 -2.80862 -0.434134 0.205941 -0.876993 + -0.92724 1.77977 -2.77129 -0.408501 0.381335 -0.829283 + -0.930033 1.84529 -2.73959 -0.358719 0.425365 -0.830895 + -0.896273 1.88951 -2.72178 -0.13649 0.4492 -0.882944 + -0.840681 1.667 -2.81473 0.317423 0.0409339 -0.9474 + -0.862381 1.6295 -2.81421 0.133586 -0.421408 -0.896978 + -0.899401 1.64843 -2.82158 -0.219311 -0.271845 -0.937018 + -0.959759 1.68877 -2.78486 -0.66129 0.110325 -0.741973 + -0.822798 1.66471 -2.80807 0.497409 -0.0407565 -0.866558 + -0.828764 1.61901 -2.79522 0.533216 -0.552134 -0.640959 + -0.886801 1.59359 -2.78687 -0.0550033 -0.675752 -0.735074 + -0.93602 1.63465 -2.79782 -0.445682 -0.311752 -0.839153 + -0.812135 1.63108 -2.78261 0.700325 -0.474183 -0.533568 + -0.853184 1.5831 -2.76788 0.363031 -0.782004 -0.506634 + -0.912271 1.57791 -2.76563 -0.193856 -0.75236 -0.629582 + -0.96149 1.61897 -2.77657 -0.630373 -0.365855 -0.684675 + -0.821584 1.58909 -2.72284 0.582354 -0.740776 -0.334836 + -0.835961 1.56237 -2.67765 0.502603 -0.853749 -0.136023 + -0.867561 1.55638 -2.72269 0.331162 -0.864951 -0.377081 + -0.907131 1.55762 -2.73451 -0.126398 -0.87775 -0.462145 + -0.967511 1.58868 -2.74568 -0.695097 -0.574968 -0.431569 + -0.80924 1.57376 -2.67852 0.270974 -0.922729 -0.274124 + -0.815939 1.57227 -2.6585 0.29356 -0.955485 0.0294999 + -0.846625 1.56037 -2.63923 0.499598 -0.859789 0.105657 + -0.880536 1.52939 -2.66746 0.362825 -0.921217 -0.140417 + -0.920106 1.53063 -2.67928 -0.314388 -0.874317 -0.369771 + -0.801583 1.5752 -2.67731 -0.0205262 -0.985793 -0.166709 + -0.808282 1.57371 -2.65728 -0.0105827 -0.997689 -0.0671084 + -0.826604 1.57027 -2.62008 0.279188 -0.959767 0.0300253 + -0.858967 1.55925 -2.59536 0.443394 -0.850433 0.283133 + -0.772061 1.57169 -2.68612 -0.196182 -0.958584 -0.206469 + -0.773179 1.56623 -2.65844 -0.205305 -0.967011 -0.150798 + -0.819686 1.57149 -2.61797 -0.0290257 -0.996849 -0.0738163 + -0.831381 1.56927 -2.59942 0.216451 -0.966743 0.136227 + -0.772345 1.57227 -2.68849 -0.261866 -0.892961 -0.366123 + -0.708951 1.55867 -2.69122 0.297745 -0.893899 -0.335102 + -0.710069 1.55321 -2.66353 0.179969 -0.963283 -0.199239 + -0.784583 1.564 -2.61912 -0.247033 -0.951614 -0.182772 + -0.727387 1.56891 -2.7187 0.0782802 -0.839601 -0.537534 + -0.685665 1.60601 -2.71707 0.685552 -0.337869 -0.644875 + -0.667228 1.59578 -2.68959 0.745192 -0.437352 -0.5034 + -0.659861 1.57763 -2.65526 0.747017 -0.635531 -0.195105 + -0.721856 1.54442 -2.62195 0.0933065 -0.989797 -0.107679 + -0.706759 1.60945 -2.73933 0.543491 -0.296007 -0.785492 + -0.635948 1.67068 -2.66666 0.875226 -0.1293 -0.466112 + -0.628581 1.65253 -2.63233 0.938848 -0.25293 -0.233646 + -0.671648 1.56884 -2.61368 0.655234 -0.754728 0.0324623 + -0.73635 1.54179 -2.59341 0.0294985 -0.999311 -0.0225176 + -0.799076 1.56137 -2.59059 -0.27454 -0.929179 -0.247497 + -0.824463 1.57049 -2.59732 -0.065448 -0.989332 -0.130146 + -0.825704 1.57004 -2.59471 -0.15939 -0.987205 0.00451154 + -0.837516 1.57337 -2.58611 0.1607 -0.924362 0.346021 + -0.691584 1.55657 -2.57761 0.495977 -0.831434 0.250447 + -0.769892 1.54273 -2.56278 -0.114509 -0.986836 0.114198 + -0.800317 1.56093 -2.58798 -0.336817 -0.92085 -0.196442 + -0.819805 1.56833 -2.57142 -0.461571 -0.886975 0.0151249 + -0.831839 1.57414 -2.58139 -0.293109 -0.940601 0.171338 + -0.647869 1.61192 -2.55956 0.751836 -0.537037 0.382536 + -0.725127 1.55751 -2.54698 0.322835 -0.844862 0.426597 + -0.78938 1.55013 -2.54623 -0.279208 -0.925488 0.255957 + -0.836968 1.58108 -2.53408 -0.531703 -0.77134 0.349752 + -0.849002 1.58689 -2.54405 -0.198611 -0.853073 0.482514 + -0.627933 1.62419 -2.59563 0.895932 -0.443789 -0.0188942 + -0.607579 1.71319 -2.55455 0.961848 -0.209037 0.176497 + -0.632771 1.68983 -2.52035 0.796637 -0.332407 0.504851 + -0.682931 1.59906 -2.52419 0.595678 -0.623201 0.506742 + -0.608227 1.74153 -2.59125 0.988661 -0.093604 -0.117422 + -0.598621 1.84131 -2.53434 0.995656 -0.0682184 0.0633647 + -0.610765 1.83919 -2.48811 0.915465 -0.179423 0.360182 + -0.635957 1.81583 -2.45391 0.735505 -0.293353 0.610718 + -0.667834 1.67697 -2.48499 0.608988 -0.369415 0.701901 + -0.612124 1.75432 -2.62735 0.93876 -0.0190606 -0.344043 + -0.602519 1.85409 -2.57044 0.990159 -0.0120693 -0.139424 + -0.59704 1.91508 -2.53562 0.991416 0.110059 -0.070574 + -0.599069 1.91403 -2.49513 0.986942 0.0314197 0.157982 + -0.611212 1.91192 -2.4489 0.926831 -0.158407 0.340429 + -0.634298 1.77956 -2.65887 0.81776 0.0940477 -0.567824 + -0.60743 1.84952 -2.60037 0.919925 0.10691 -0.377237 + -0.601951 1.91051 -2.56554 0.916953 0.183154 -0.354474 + -0.652085 1.79466 -2.67979 0.700277 0.195223 -0.686659 + -0.625217 1.86462 -2.62128 0.745472 0.264673 -0.611734 + -0.62568 1.9042 -2.60259 0.726355 0.303311 -0.616774 + -0.609082 1.94796 -2.55421 0.843702 0.381512 -0.377644 + -0.682539 1.78964 -2.70592 0.54287 0.185755 -0.819016 + -0.671696 1.85946 -2.66719 0.610272 0.334825 -0.717955 + -0.672159 1.89904 -2.64849 0.61009 0.351035 -0.710327 + -0.671718 1.93004 -2.63245 0.56861 0.44856 -0.689548 + -0.63281 1.94165 -2.59125 0.661195 0.429934 -0.6148 + -0.70215 1.85444 -2.69333 0.547532 0.325593 -0.770842 + -0.717728 1.89175 -2.68815 0.546454 0.346397 -0.762494 + -0.717287 1.92276 -2.6721 0.533751 0.454755 -0.712958 + -0.681147 1.97629 -2.60161 0.508432 0.569605 -0.645791 + -0.76261 1.88185 -2.72064 0.346042 0.291973 -0.891632 + -0.769293 1.92029 -2.7111 0.336904 0.418033 -0.843649 + -0.774611 1.97526 -2.67192 0.326314 0.606909 -0.724693 + -0.722605 1.97773 -2.63292 0.49186 0.57027 -0.657925 + -0.821635 1.89349 -2.72653 0.0229753 0.337679 -0.940981 + -0.828318 1.93192 -2.71699 -0.0504029 0.400772 -0.91479 + -0.827004 1.98142 -2.67858 0.0468778 0.647493 -0.760628 + -0.775786 2.05593 -2.59694 0.316922 0.644763 -0.695587 + -0.894775 1.92671 -2.70593 -0.163856 0.429055 -0.888292 + -0.894387 1.95759 -2.68967 -0.166821 0.526362 -0.833734 + -0.893074 2.0071 -2.65126 -0.132478 0.695714 -0.705997 + -0.88035 2.0551 -2.5984 -0.182775 0.717491 -0.672161 + -0.828179 2.06209 -2.6036 -0.00471381 0.692041 -0.721843 + -0.939981 1.93761 -2.6864 -0.445685 0.415391 -0.792979 + -0.939594 1.96849 -2.67014 -0.444465 0.534299 -0.71901 + -0.932038 2.00774 -2.6362 -0.434742 0.68001 -0.590412 + -0.919314 2.05575 -2.58333 -0.452493 0.701658 -0.550387 + -0.865733 2.12251 -2.53207 -0.223287 0.710371 -0.66747 + -0.939493 1.89591 -2.70895 -0.425375 0.416242 -0.803616 + -0.960655 1.93025 -2.67183 -0.775159 0.30184 -0.554996 + -0.960536 1.96055 -2.6545 -0.772933 0.411177 -0.483228 + -0.952981 1.9998 -2.62055 -0.747207 0.551452 -0.370921 + -0.93599 2.04759 -2.57125 -0.748226 0.579306 -0.323362 + -0.960167 1.88856 -2.69438 -0.715761 0.349496 -0.604598 + -0.975678 1.9163 -2.64574 -0.933873 0.210408 -0.289154 + -0.975559 1.9466 -2.6284 -0.934795 0.261847 -0.23999 + -0.966714 1.98608 -2.59648 -0.907364 0.393622 -0.147483 + -0.967167 1.83358 -2.72033 -0.678341 0.340172 -0.651258 + -0.98876 1.82 -2.69461 -0.843179 0.265588 -0.467453 + -0.98176 1.87498 -2.66866 -0.889918 0.319809 -0.32522 + -0.984638 1.89665 -2.60977 -0.995455 0.0869279 -0.0388972 + -0.985072 1.92573 -2.59022 -0.992825 0.118331 -0.0172081 + -0.964374 1.76805 -2.75202 -0.660491 0.281924 -0.695895 + -0.989218 1.75021 -2.72527 -0.8451 0.167064 -0.507835 + -1.00836 1.80441 -2.66154 -0.972147 0.198398 -0.124776 + -0.99072 1.85533 -2.63269 -0.973704 0.224957 0.0359918 + -0.982019 1.86931 -2.57694 -0.977464 -0.0539966 0.204077 + -0.984603 1.67093 -2.75811 -0.882443 -0.0137757 -0.470218 + -0.990624 1.64064 -2.72722 -0.946781 -0.20896 -0.244827 + -1.00882 1.73461 -2.6922 -0.964303 0.0181394 -0.264178 + -1.00914 1.71738 -2.65557 -0.981669 -0.122694 0.145849 + -1.00693 1.78301 -2.62707 -0.9627 0.040933 0.267458 + -0.96237 1.56839 -2.71456 -0.62331 -0.755816 -0.200568 + -0.990947 1.6234 -2.69058 -0.945689 -0.321992 -0.0446497 + -0.986209 1.61679 -2.64923 -0.930161 -0.305232 0.204042 + -0.989555 1.70095 -2.61435 -0.901705 -0.174052 0.39577 + -0.987338 1.76658 -2.58585 -0.864124 -0.0264926 0.502581 + -0.957632 1.56178 -2.6732 -0.748753 -0.643059 -0.160759 + -0.920658 1.52071 -2.64289 -0.235248 -0.971297 -0.0352134 + -0.958184 1.55185 -2.63682 -0.828443 -0.556163 0.0660652 + -0.960761 1.58365 -2.61395 -0.861433 -0.259178 0.43676 + -0.969637 1.61842 -2.61355 -0.837963 -0.221706 0.498663 + -0.972983 1.70257 -2.57868 -0.802892 -0.206512 0.559212 + -0.892878 1.52828 -2.6236 0.341683 -0.91388 0.219261 + -0.9349 1.53172 -2.60313 -0.485599 -0.779924 0.394858 + -0.937477 1.56351 -2.58027 -0.713627 -0.37592 0.591118 + -0.930964 1.6479 -2.55143 -0.742944 -0.186842 0.642748 + -0.93984 1.68266 -2.55103 -0.690224 -0.213433 0.691402 + -0.907121 1.53929 -2.58384 0.0272401 -0.829286 0.55816 + -0.917493 1.56796 -2.55886 -0.414358 -0.493459 0.764726 + -0.91098 1.65235 -2.53002 -0.598383 -0.165821 0.783863 + -0.870453 1.57278 -2.5533 0.204894 -0.767801 0.607042 + -0.880826 1.60145 -2.52833 -0.260776 -0.499113 0.826367 + -0.853085 1.62012 -2.50619 -0.442946 -0.440621 0.780802 + -0.883239 1.67101 -2.50788 -0.538309 -0.215685 0.81468 + -0.82717 1.59283 -2.50967 -0.414279 -0.631358 0.65556 + -0.806529 1.64262 -2.4703 -0.390172 -0.333282 0.858306 + -0.808238 1.67943 -2.46158 -0.41718 -0.25338 0.872788 + -0.884948 1.70783 -2.49917 -0.578255 -0.137293 0.804221 + -0.932378 1.72366 -2.53138 -0.623133 -0.107127 0.774745 + -0.779582 1.56188 -2.52182 -0.112349 -0.809437 0.576358 + -0.780614 1.61533 -2.47378 -0.184575 -0.537896 0.822557 + -0.753714 1.67357 -2.44263 0.0275537 -0.358409 0.933158 + -0.825457 1.74618 -2.44792 -0.484789 -0.329762 0.810085 + -0.749654 1.56542 -2.51827 0.163701 -0.804854 0.570449 + -0.750687 1.61887 -2.47023 0.154318 -0.531271 0.833029 + -0.710487 1.66167 -2.46787 0.421 -0.37668 0.825149 + -0.732821 1.75039 -2.41834 0.189249 -0.403489 0.895199 + -0.770933 1.74032 -2.42897 -0.255983 -0.367724 0.894009 + -0.707459 1.60697 -2.49548 0.435904 -0.558892 0.705427 + -0.690167 1.76568 -2.43545 0.509453 -0.355384 0.783684 + -0.697106 1.83315 -2.39531 0.528657 -0.461935 0.712136 + -0.743447 1.80265 -2.39067 0.156302 -0.545101 0.823671 + -0.642895 1.8833 -2.41377 0.723963 -0.353518 0.592371 + -0.643676 1.91163 -2.39283 0.72154 -0.326284 0.610671 + -0.698558 1.86001 -2.37167 0.521743 -0.457078 0.720322 + -0.744899 1.82951 -2.36703 0.169652 -0.550515 0.817405 + -0.78156 1.79259 -2.4013 -0.232799 -0.568733 0.78889 + -0.611993 1.94024 -2.42795 0.940178 -0.0642109 0.334577 + -0.64878 1.9439 -2.37416 0.691696 -0.153799 0.705622 + -0.703661 1.89229 -2.35301 0.442762 -0.317334 0.838606 + -0.747448 1.87221 -2.34499 0.0964543 -0.380229 0.919849 + -0.783061 1.81933 -2.37746 -0.238089 -0.558351 0.794706 + -0.606495 1.95083 -2.4826 0.97823 0.177073 0.108223 + -0.615318 1.98028 -2.46401 0.952364 0.286998 0.10313 + -0.620815 1.96969 -2.40936 0.904435 0.131668 0.405784 + -0.660547 1.96443 -2.36165 0.677487 -0.244718 0.693631 + -0.604467 1.95189 -2.52309 0.956868 0.281856 -0.0704339 + -0.616228 1.99017 -2.50007 0.922045 0.382861 -0.0570147 + -0.63063 2.01243 -2.43561 0.977425 0.195109 0.0810696 + -0.632582 1.99022 -2.39685 0.927693 0.0367494 0.371531 + -0.620843 1.98625 -2.53119 0.794554 0.503069 -0.340008 + -0.638015 2.03301 -2.49136 0.816237 0.485109 -0.31373 + -0.631541 2.02232 -2.47167 0.948275 0.315435 -0.0357073 + -0.633538 2.0472 -2.40539 0.999548 -0.0195783 -0.0228 + -0.64224 1.9879 -2.56041 0.611052 0.567786 -0.551574 + -0.659411 2.03466 -2.52058 0.626613 0.591763 -0.507122 + -0.642004 2.07463 -2.4519 0.874311 0.319315 -0.365538 + -0.63553 2.06394 -2.43221 0.984795 0.0972452 -0.143952 + -0.695002 2.04605 -2.54545 0.526019 0.600353 -0.602396 + -0.697051 2.09976 -2.49575 0.568416 0.54089 -0.619953 + -0.66146 2.08837 -2.47088 0.684603 0.4793 -0.549173 + -0.633207 2.11924 -2.40512 0.886307 0.235552 -0.398717 + -0.73646 2.04749 -2.57676 0.482143 0.597229 -0.64098 + -0.731765 2.11448 -2.51369 0.514485 0.554786 -0.653848 + -0.683014 2.15348 -2.43972 0.593593 0.509452 -0.622981 + -0.652663 2.13298 -2.42409 0.706599 0.4343 -0.55866 + -0.771091 2.12291 -2.53387 0.311195 0.636454 -0.705751 + -0.751319 2.1867 -2.46873 0.34495 0.628141 -0.697459 + -0.717728 2.16819 -2.45766 0.538277 0.537825 -0.648847 + -0.665825 2.23238 -2.35891 0.606256 0.498854 -0.619354 + -0.813562 2.1295 -2.53728 0.00273403 0.701855 -0.712315 + -0.79379 2.19329 -2.47214 0.0409115 0.709869 -0.703144 + -0.729772 2.26941 -2.38266 0.364625 0.625057 -0.690183 + -0.696182 2.2509 -2.37159 0.549229 0.532916 -0.643699 + -0.838586 2.19968 -2.45973 -0.189411 0.723393 -0.663947 + -0.811783 2.28762 -2.36961 -0.164354 0.733101 -0.659963 + -0.766986 2.28123 -2.38203 0.0618663 0.711739 -0.699714 + -0.701887 2.37513 -2.27055 0.373886 0.648147 -0.663412 + -0.897743 2.11935 -2.52144 -0.467667 0.688372 -0.554465 + -0.870596 2.19652 -2.4491 -0.442411 0.697236 -0.564034 + -0.839885 2.28881 -2.35764 -0.421895 0.710917 -0.562673 + -0.779373 2.3927 -2.25875 -0.148816 0.764298 -0.627456 + -0.739101 2.38695 -2.26991 0.0684736 0.739947 -0.669171 + -0.914418 2.11119 -2.50936 -0.754422 0.569669 -0.326073 + -0.884993 2.19264 -2.4363 -0.735518 0.583563 -0.34419 + -0.854282 2.28493 -2.34484 -0.731699 0.588301 -0.344265 + -0.820418 2.3904 -2.23527 -0.713451 0.628584 -0.309628 + -0.807475 2.39389 -2.24678 -0.409072 0.746312 -0.525051 + -0.949723 2.03387 -2.54718 -0.896401 0.428703 -0.112598 + -0.925867 2.09974 -2.48881 -0.896788 0.42718 -0.115278 + -0.896442 2.1812 -2.41575 -0.897487 0.424849 -0.118412 + -0.864403 2.27556 -2.32598 -0.897659 0.422328 -0.125891 + -0.957524 2.01599 -2.51681 -0.955873 0.283779 0.0760023 + -0.933667 2.08186 -2.45844 -0.955482 0.288736 0.0607038 + -0.903362 2.16533 -2.38881 -0.955779 0.289147 0.0536657 + -0.871323 2.25969 -2.29903 -0.961071 0.272168 0.0476102 + -0.976227 1.96522 -2.5583 -0.969524 0.239674 0.0507815 + -0.97488 1.94291 -2.52665 -0.965659 0.054861 0.253954 + -0.956177 1.99368 -2.48517 -0.958448 0.136292 0.250603 + -0.933468 2.06511 -2.43129 -0.962056 0.14511 0.231065 + -0.982453 1.8984 -2.55738 -0.978913 -0.0512429 0.197746 + -0.960645 1.90798 -2.49709 -0.903533 -0.108241 0.414622 + -0.947709 1.97814 -2.45671 -0.913408 -0.0244175 0.406312 + -0.925 2.04957 -2.40284 -0.92221 0.0065995 0.386634 + -0.968217 1.86347 -2.52782 -0.913737 -0.190978 0.358624 + -0.951119 1.83526 -2.50792 -0.817247 -0.303458 0.489919 + -0.946745 1.88814 -2.47632 -0.80619 -0.218147 0.549972 + -0.933809 1.95831 -2.43594 -0.816448 -0.163882 0.553674 + -0.967303 1.83543 -2.5493 -0.906375 -0.180192 0.382119 + -0.950205 1.80722 -2.5294 -0.804771 -0.291616 0.517014 + -0.931499 1.81302 -2.49631 -0.68208 -0.41811 0.59996 + -0.927125 1.86591 -2.46471 -0.675243 -0.315787 0.666578 + -0.920535 1.95166 -2.42247 -0.696359 -0.265959 0.666596 + -0.989285 1.83393 -2.59822 -0.949426 0.0785087 0.304017 + -0.974569 1.80005 -2.57059 -0.854614 -0.0328341 0.518224 + -0.952752 1.77705 -2.54377 -0.725919 -0.154795 0.670135 + -0.930384 1.78543 -2.5186 -0.669148 -0.361581 0.64923 + -0.96552 1.74357 -2.55903 -0.734927 -0.0970597 0.671164 + -0.932931 1.75525 -2.53296 -0.622377 -0.13721 0.770598 + -0.890599 1.77759 -2.4862 -0.592495 -0.434254 0.678508 + -0.891714 1.80518 -2.46391 -0.591678 -0.458083 0.663383 + -0.890927 1.85616 -2.43603 -0.624096 -0.337144 0.704867 + -0.885501 1.73942 -2.50075 -0.614311 -0.143049 0.775989 + -0.830554 1.78436 -2.43336 -0.486673 -0.493024 0.721164 + -0.832056 1.8111 -2.40953 -0.479915 -0.510504 0.713489 + -0.831269 1.86208 -2.38165 -0.54148 -0.345909 0.766255 + -0.78561 1.86204 -2.35542 -0.303951 -0.391738 0.868421 + -0.832096 1.92589 -2.35851 -0.543115 -0.325954 0.773809 + -0.884337 1.94192 -2.39379 -0.618329 -0.312631 0.721063 + -0.901706 2.03045 -2.37084 -0.693712 -0.270323 0.667599 + -0.753861 1.92561 -2.32744 0.0779647 -0.387109 0.918732 + -0.786437 1.92585 -2.33228 -0.313226 -0.378699 0.870906 + -0.819125 1.9989 -2.31556 -0.528493 -0.371839 0.763172 + -0.871366 2.01493 -2.35083 -0.613353 -0.325804 0.719479 + -0.710074 1.94569 -2.33546 0.434301 -0.365764 0.823164 + -0.747227 1.9851 -2.29544 0.0956462 -0.547987 0.831001 + -0.779803 1.98534 -2.30028 -0.303947 -0.458488 0.835108 + -0.799907 2.06345 -2.26903 -0.528842 -0.417472 0.738947 + -0.659523 2.00784 -2.33464 0.700719 -0.468635 0.537935 + -0.70905 1.98909 -2.30845 0.427835 -0.54444 0.721486 + -0.732671 2.0413 -2.25464 0.0843659 -0.616527 0.782801 + -0.760585 2.04989 -2.25375 -0.305038 -0.525347 0.794331 + -0.635489 2.025 -2.36662 0.94458 -0.239428 0.224594 + -0.651803 2.05132 -2.29745 0.677115 -0.546148 0.493192 + -0.694494 2.04529 -2.26765 0.413323 -0.619917 0.666983 + -0.711221 2.12707 -2.18568 0.0531025 -0.645284 0.762095 + -0.625806 2.09016 -2.36259 0.991254 -0.107836 -0.0760717 + -0.62777 2.06848 -2.32943 0.934487 -0.315185 0.165504 + -0.634814 2.13241 -2.22826 0.664094 -0.56651 0.487899 + -0.677505 2.12639 -2.19846 0.37949 -0.648561 0.659815 + -0.627798 2.10689 -2.38942 0.981496 0.00857287 -0.191293 + -0.611454 2.16777 -2.28951 0.990879 -0.109259 -0.0788736 + -0.613417 2.14609 -2.25635 0.927569 -0.332111 0.171223 + -0.613735 2.24551 -2.12377 0.646305 -0.527545 0.551349 + -0.618498 2.19627 -2.32841 0.888655 0.225263 -0.399435 + -0.613089 2.18393 -2.31271 0.980988 0.00482185 -0.194007 + -0.590573 2.27868 -2.18168 0.996485 -0.0678742 -0.0490926 + -0.592338 2.25919 -2.15187 0.936746 -0.283858 0.20477 + -0.635474 2.21187 -2.34328 0.711877 0.421106 -0.562051 + -0.597071 2.30593 -2.21899 0.893656 0.252396 -0.371047 + -0.592208 2.29483 -2.20487 0.985199 0.0430999 -0.165908 + -0.587719 2.34945 -2.12243 0.977946 0.174291 0.115079 + -0.641333 2.33997 -2.24791 0.611847 0.519943 -0.596073 + -0.614047 2.32153 -2.23386 0.715105 0.444631 -0.539377 + -0.593858 2.37316 -2.15465 0.882743 0.422712 -0.205132 + -0.588996 2.36206 -2.14054 0.966483 0.256705 0.00364073 + -0.671689 2.35849 -2.26059 0.553377 0.556708 -0.619557 + -0.634396 2.40377 -2.18031 0.621311 0.639082 -0.453372 + -0.60711 2.38534 -2.16626 0.723068 0.575599 -0.381914 + -0.607734 2.39539 -2.13214 0.694396 0.703007 0.153606 + -0.688289 2.43487 -2.20017 0.392066 0.765047 -0.510869 + -0.658091 2.41823 -2.19021 0.56824 0.670697 -0.476727 + -0.63869 2.41953 -2.15286 0.547702 0.836432 -0.020122 + -0.620986 2.40756 -2.14374 0.601163 0.798868 0.0203085 + -0.717338 2.4441 -2.19967 0.122588 0.855893 -0.502413 + -0.68198 2.44478 -2.16922 0.410428 0.909111 -0.0711744 + -0.662386 2.43398 -2.16276 0.510841 0.858766 -0.0395177 + -0.672795 2.42573 -2.1222 0.342374 0.84465 0.411516 + -0.655091 2.41377 -2.11308 0.376578 0.818919 0.433082 + -0.75761 2.44985 -2.18851 -0.0810503 0.891235 -0.44624 + -0.737161 2.45774 -2.16148 0.100596 0.99492 0.00386728 + -0.711029 2.45401 -2.16872 0.212976 0.97597 -0.0460878 + -0.69239 2.43653 -2.12866 0.290984 0.865544 0.40763 + -0.651936 2.40657 -2.10392 0.381553 0.775628 0.502811 + -0.779546 2.45078 -2.17917 -0.30742 0.891579 -0.332536 + -0.759097 2.45867 -2.15214 -0.0370713 0.995453 0.0877433 + -0.718521 2.44026 -2.12142 0.219071 0.868666 0.444328 + -0.792489 2.44729 -2.16766 -0.577158 0.808936 -0.111851 + -0.767495 2.4564 -2.14467 -0.187437 0.952816 0.238767 + -0.72692 2.43799 -2.11395 0.16542 0.847576 0.504233 + -0.694778 2.39405 -2.07133 0.223661 0.664216 0.713297 + -0.830539 2.38103 -2.21641 -0.881533 0.462726 -0.0937226 + -0.800389 2.43997 -2.15293 -0.723763 0.684222 0.0894853 + -0.775395 2.44909 -2.12994 -0.27419 0.883387 0.380063 + -0.779433 2.43983 -2.11423 -0.312894 0.82097 0.477604 + -0.730957 2.42874 -2.09823 0.159078 0.813555 0.559305 + -0.836761 2.36676 -2.19219 -0.946661 0.313167 0.0758939 + -0.806611 2.42571 -2.12871 -0.791968 0.554141 0.256348 + -0.871261 2.24376 -2.27541 -0.969185 0.108523 0.221141 + -0.836699 2.35083 -2.16856 -0.957604 0.144603 0.24917 + -0.806563 2.41327 -2.11027 -0.808616 0.411995 0.420001 + -0.779384 2.4274 -2.09579 -0.330332 0.736373 0.590454 + -0.903163 2.14858 -2.36166 -0.963085 0.132569 0.23429 + -0.86421 2.22607 -2.25259 -0.929285 -0.0416828 0.367004 + -0.83036 2.33492 -2.14804 -0.919975 -0.00651979 0.391924 + -0.800224 2.39736 -2.08975 -0.779297 0.271983 0.564554 + -0.775271 2.41707 -2.08247 -0.313604 0.665206 0.677608 + -0.896112 2.13089 -2.33884 -0.923206 -0.00632996 0.384253 + -0.886092 2.11841 -2.32031 -0.829607 -0.163921 0.533744 + -0.855504 2.2129 -2.23729 -0.836295 -0.202665 0.509448 + -0.821654 2.32176 -2.13275 -0.82778 -0.171744 0.53412 + -0.793428 2.38709 -2.07782 -0.701245 0.119225 0.702881 + -0.91498 2.03709 -2.3843 -0.831333 -0.140003 0.537851 + -0.874805 2.10837 -2.31093 -0.69172 -0.305455 0.654385 + -0.844218 2.20286 -2.22791 -0.693835 -0.354028 0.627102 + -0.811507 2.31273 -2.12431 -0.686514 -0.326457 0.649711 + -0.783282 2.37806 -2.06938 -0.551401 -0.0454096 0.833003 + -0.844465 2.09285 -2.29092 -0.615169 -0.367549 0.697477 + -0.817902 2.18362 -2.21486 -0.614205 -0.411344 0.67346 + -0.785192 2.29349 -2.11126 -0.579815 -0.40725 0.705664 + -0.773344 2.15422 -2.19296 -0.529769 -0.458467 0.713549 + -0.745921 2.26495 -2.09875 -0.494194 -0.451275 0.74305 + -0.72364 2.33405 -2.04824 -0.34988 -0.199049 0.915403 + -0.762911 2.36258 -2.06075 -0.438923 -0.143965 0.886916 + -0.739134 2.13566 -2.18479 -0.308667 -0.559451 0.769245 + -0.711712 2.24639 -2.09058 -0.294868 -0.527391 0.796813 + -0.697108 2.3191 -2.04342 -0.181196 -0.257626 0.949103 + -0.689506 2.352 -2.04349 0.0490756 0.28227 0.958079 + -0.716039 2.36695 -2.04832 -0.0397312 0.315207 0.948191 + -0.686618 2.23868 -2.09138 0.0611307 -0.603543 0.794984 + -0.672013 2.31139 -2.04422 0.122587 -0.307639 0.943574 + -0.673224 2.347 -2.04401 0.195474 0.259964 0.945626 + -0.678495 2.38904 -2.07185 0.225076 0.653767 0.722447 + -0.652901 2.23799 -2.10415 0.360663 -0.604149 0.710582 + -0.645524 2.31131 -2.05263 0.378136 -0.301161 0.875394 + -0.646734 2.34692 -2.05243 0.341751 0.27979 0.897175 + -0.653081 2.39392 -2.08458 0.320756 0.702836 0.634931 + -0.606357 2.31883 -2.07225 0.656619 -0.213063 0.723502 + -0.62132 2.3518 -2.06515 0.49193 0.326543 0.807077 + -0.604448 2.36293 -2.08553 0.692662 0.468086 0.54874 + -0.589485 2.32996 -2.09262 0.916922 -0.0124601 0.398871 + -0.603302 2.37558 -2.10487 0.725618 0.571427 0.383339 + -0.604579 2.38819 -2.12298 0.728045 0.614623 0.303626 + -0.741521 2.38546 -2.05643 -0.0821952 0.34911 0.93347 + -0.761891 2.40094 -2.06506 -0.175504 0.445567 0.877877 + -0.768476 2.4068 -2.07054 -0.274707 0.563677 0.778976 + -0.72026 2.41256 -2.07945 0.308817 0.760275 0.571501 + -0.726844 2.41842 -2.08492 0.191441 0.782105 0.59301 + 0.866811 1.38322 -1.52127 -0.509732 -0.270871 0.81658 + 0.888762 1.33938 -1.5282 -0.391881 -0.471329 0.790113 + 0.921874 1.33846 -1.52023 -0.116059 -0.65072 0.750396 + 0.828588 1.32435 -1.58429 -0.60527 -0.562075 0.563667 + 0.898161 1.30431 -1.5557 -0.316667 -0.763451 0.562908 + 0.924805 1.30314 -1.54361 0.135117 -0.744381 0.653942 + 0.915406 1.33821 -1.5161 0.00953819 -0.626113 0.779674 + 0.89667 1.41305 -1.49754 -0.495776 -0.133595 0.858113 + 0.814774 1.46235 -1.54842 -0.737016 -0.0651564 0.672727 + 0.806637 1.36818 -1.57736 -0.752968 -0.298712 0.586353 + 0.824142 1.30322 -1.61679 -0.629169 -0.6642 0.403714 + 0.898225 1.28984 -1.57942 -0.208773 -0.833488 0.511578 + 0.926761 1.34633 -1.50425 -0.600554 -0.62624 0.49715 + 0.936756 1.35346 -1.48437 -0.504794 -0.492368 0.709053 + 0.9392 1.36879 -1.48052 -0.402691 -0.122078 0.907158 + 0.929411 1.3979 -1.48212 -0.410404 -0.0659627 0.909515 + 0.926071 1.48754 -1.48244 -0.401241 -0.0239835 0.915658 + 0.844632 1.49219 -1.52469 -0.510054 -0.104623 0.853756 + 0.95556 1.31203 -1.54408 -0.379859 -0.790566 0.480325 + 0.965624 1.33399 -1.49664 -0.395119 -0.790783 0.467486 + 0.975619 1.34114 -1.47677 -0.380523 -0.763947 0.52114 + 0.995526 1.34064 -1.46447 -0.293498 -0.438771 0.849316 + 0.99797 1.35597 -1.46064 -0.150647 -0.106925 0.982788 + 0.950673 1.30417 -1.56006 -0.114048 -0.778626 0.617036 + 0.977756 1.2971 -1.54699 -0.506473 -0.73627 0.448767 + 0.987821 1.31907 -1.49956 -0.48958 -0.730349 0.476342 + 0.99798 1.32681 -1.47853 -0.436769 -0.698436 0.566939 + 1.01789 1.32631 -1.46624 0.0174018 -0.50152 0.864971 + 0.946034 1.30264 -1.56046 0.192164 -0.772265 0.605541 + 0.957355 1.29046 -1.57453 -0.0499628 -0.979301 0.196147 + 0.961993 1.29199 -1.57414 -0.198049 -0.657096 0.727325 + 0.939566 1.30239 -1.55634 0.407837 -0.71324 0.57005 + 0.946222 1.29217 -1.58454 0.394508 -0.91883 -0.0107361 + 0.959124 1.30255 -1.59204 0.133294 -0.838926 -0.52767 + 0.965185 1.29072 -1.57667 0.0689261 -0.849407 -0.523218 + 0.964165 1.28973 -1.57497 -0.181322 -0.982719 -0.0372109 + 0.931461 1.29292 -1.57181 0.134422 -0.885844 0.444084 + 0.931525 1.27846 -1.59554 0.384723 -0.896589 0.219353 + 0.95154 1.31375 -1.61899 0.641728 -0.736824 -0.212781 + 0.964442 1.32413 -1.62648 0.567989 -0.741769 -0.356607 + 0.966954 1.3028 -1.59418 0.0595751 -0.82353 -0.564136 + 0.924869 1.27115 -1.61975 0.540982 -0.82872 0.143394 + 0.944885 1.30645 -1.6432 0.803033 -0.582996 -0.123504 + 0.967505 1.3371 -1.64616 0.658293 -0.689032 -0.303126 + 0.972093 1.32925 -1.62651 0.337234 -0.790846 -0.510721 + 0.893779 1.26871 -1.61192 -0.098346 -0.873571 0.476656 + 0.906429 1.25446 -1.66273 0.462154 -0.886723 0.0116895 + 0.946496 1.31028 -1.64912 0.802415 -0.579369 -0.143043 + 0.969116 1.34092 -1.65209 0.561264 -0.812192 -0.159142 + 0.975156 1.34222 -1.6462 0.251508 -0.916943 -0.309773 + 0.875339 1.25203 -1.6549 -0.228851 -0.95378 0.194758 + 0.903505 1.25667 -1.6932 0.446769 -0.886119 -0.123247 + 0.943571 1.31249 -1.6796 0.809917 -0.571829 -0.130559 + 0.964555 1.33979 -1.67305 0.586218 -0.807387 -0.0668959 + 0.975047 1.343 -1.65421 0.138191 -0.990111 -0.0241573 + 0.80321 1.31023 -1.65291 -0.783326 -0.588685 0.199623 + 0.854407 1.25904 -1.69102 -0.440659 -0.897492 -0.0181088 + 0.902844 1.26036 -1.73079 0.40965 -0.878652 -0.24527 + 0.933747 1.30773 -1.71638 0.824156 -0.551179 -0.130266 + 0.95473 1.33503 -1.70984 0.621941 -0.775626 -0.107677 + 0.777832 1.37883 -1.62356 -0.930319 -0.211131 0.299885 + 0.792378 1.31083 -1.73172 -0.84136 -0.534063 -0.0830089 + 0.853746 1.26272 -1.72861 -0.369615 -0.928217 -0.0424014 + 0.906507 1.2704 -1.74915 0.423343 -0.821167 -0.382708 + 0.785969 1.473 -1.59462 -0.846604 -0.16432 0.506223 + 0.767001 1.37943 -1.70236 -0.957579 -0.275349 0.0849986 + 0.805334 1.30464 -1.76866 -0.703685 -0.638823 -0.311018 + 0.836232 1.54024 -1.52202 -0.559196 -0.213109 0.801177 + 0.786667 1.5553 -1.557 -0.72738 -0.247653 0.63999 + 0.757383 1.48395 -1.636 -0.930436 -0.203747 0.304592 + 0.917671 1.53559 -1.47976 -0.330372 -0.162615 0.929737 + 0.909642 1.57166 -1.47418 -0.333655 -0.250322 0.908853 + 0.837401 1.59422 -1.50277 -0.534312 -0.213828 0.817795 + 0.787836 1.60928 -1.53775 -0.701103 -0.178686 0.690308 + 0.758081 1.56626 -1.59838 -0.905764 -0.162278 0.391481 + 0.975695 1.53644 -1.46807 0.0978063 -0.0286618 0.994793 + 0.967667 1.5725 -1.4625 0.142435 -0.198551 0.969685 + 0.96191 1.62178 -1.44692 0.143792 -0.300523 0.942873 + 0.921571 1.62542 -1.45391 -0.301745 -0.277767 0.912028 + 0.958812 1.47239 -1.46701 -0.220395 0.0473985 0.974258 + 0.992002 1.49626 -1.47072 0.224827 0.0821256 0.970932 + 1.01241 1.55797 -1.48345 0.517338 0.113537 0.848216 + 0.99954 1.58436 -1.4781 0.580086 -0.0410519 0.81352 + 0.993784 1.63365 -1.46253 0.654745 -0.211883 0.725544 + 0.975596 1.43157 -1.46301 -0.125646 0.0106064 0.992018 + 1.00879 1.45545 -1.46672 0.252986 0.135154 0.957983 + 1.04955 1.45545 -1.48666 0.541948 0.172206 0.82258 + 1.02872 1.5178 -1.48609 0.503214 0.153758 0.850373 + 0.985385 1.40246 -1.46142 -0.126807 0.023592 0.991647 + 1.02388 1.41698 -1.46886 0.34373 0.106926 0.932961 + 1.06464 1.41698 -1.4888 0.587574 0.0937868 0.803717 + 1.10336 1.42596 -1.53069 0.769865 0.0661277 0.634772 + 1.0881 1.47372 -1.5253 0.705216 0.195286 0.681567 + 1.02708 1.35498 -1.46118 0.346921 -0.0640374 0.935706 + 1.01449 1.40147 -1.46196 0.216544 0.182118 0.959136 + 1.06501 1.38033 -1.48959 0.608449 -0.018807 0.79337 + 1.08948 1.37162 -1.51283 0.772983 -0.116767 0.623588 + 1.08911 1.40826 -1.51204 0.750265 0.0419963 0.659803 + 1.03833 1.32715 -1.47631 0.529763 -0.351632 0.77182 + 1.05562 1.36483 -1.48268 0.615018 -0.0358755 0.787697 + 1.06688 1.337 -1.49782 0.708889 -0.282648 0.64621 + 1.09143 1.34996 -1.52572 0.810164 -0.310612 0.497146 + 1.12177 1.38211 -1.56183 0.8468 -0.146448 0.511353 + 1.02621 1.29607 -1.4915 -0.0305767 -0.765769 0.642388 + 1.04665 1.2969 -1.50157 0.535785 -0.689587 0.487242 + 1.01605 1.28833 -1.51252 -0.334495 -0.876337 0.346622 + 1.03297 1.28272 -1.52354 0.194203 -0.97962 0.0512818 + 1.05531 1.2967 -1.54347 0.455162 -0.868409 -0.196707 + 1.06899 1.31088 -1.52149 0.709269 -0.612839 0.348377 + 1.09355 1.32383 -1.54939 0.748358 -0.648722 0.138276 + 0.979928 1.29485 -1.54782 -0.413328 -0.844 0.341795 + 0.996851 1.28924 -1.55885 0.0130213 -0.987396 -0.157735 + 0.99787 1.29022 -1.56055 0.21101 -0.874689 -0.436342 + 1.00113 1.30466 -1.58525 0.193832 -0.827729 -0.526587 + 1.05856 1.31114 -1.56816 0.337129 -0.861516 -0.379649 + 1.00627 1.33112 -1.61759 0.15531 -0.831116 -0.53397 + 1.0743 1.32636 -1.59466 0.262229 -0.894482 -0.36213 + 1.10928 1.33905 -1.57589 0.653786 -0.737074 0.171127 + 1.12372 1.36045 -1.57473 0.840681 -0.361592 0.403122 + 1.01313 1.34151 -1.63528 0.0540003 -0.955113 -0.291278 + 1.08116 1.33676 -1.61236 0.105224 -0.962444 -0.25026 + 1.12029 1.3413 -1.59924 0.546743 -0.824729 0.14455 + 1.13473 1.36269 -1.59807 0.869037 -0.356882 0.342651 + 1.01302 1.3423 -1.6433 -0.0787759 -0.994839 0.0639435 + 1.08388 1.33706 -1.61943 -0.0128107 -0.993122 0.116384 + 1.123 1.3416 -1.60631 0.496762 -0.83345 0.242051 + 1.14358 1.35647 -1.62877 0.844084 -0.425937 0.32573 + 1.13601 1.3998 -1.58048 0.861222 -0.160689 0.482158 + 0.970486 1.34187 -1.67517 0.0973232 -0.99146 0.0868046 + 1.01772 1.33528 -1.66846 -0.181854 -0.956707 0.227246 + 1.08858 1.33004 -1.64459 -0.0611224 -0.950204 0.305576 + 1.13185 1.33538 -1.63701 0.458953 -0.809627 0.365878 + 0.960991 1.33745 -1.70855 0.106363 -0.993829 0.0314786 + 1.00822 1.33085 -1.70182 -0.205089 -0.964112 0.168598 + 1.09911 1.30895 -1.69599 0.000168908 -0.993586 0.11308 + 1.14238 1.31428 -1.68841 0.53171 -0.829166 0.172534 + 0.957626 1.33829 -1.72863 0.22033 -0.861657 -0.457167 + 0.990595 1.33114 -1.72509 -0.136992 -0.88613 -0.442726 + 1.08148 1.30923 -1.71925 0.0157102 -0.955463 -0.294693 + 1.08335 1.31185 -1.72254 -0.0535052 -0.954854 -0.292217 + 0.951365 1.33587 -1.72993 0.680666 -0.684464 -0.261157 + 0.954266 1.34206 -1.73489 0.641603 -0.690388 -0.334229 + 0.960751 1.3446 -1.73259 0.203137 -0.7347 -0.647264 + 0.99372 1.33744 -1.72904 -0.0845932 -0.640538 -0.763253 + 0.995594 1.34006 -1.73234 -0.173426 -0.844825 -0.506155 + 0.93741 1.31778 -1.73474 0.828706 -0.538748 -0.151651 + 0.940311 1.32397 -1.7397 0.825138 -0.555887 -0.100681 + 0.942035 1.32651 -1.74363 0.811014 -0.581756 0.0617797 + 0.95694 1.34591 -1.74022 0.612021 -0.784068 -0.103283 + 0.963425 1.34844 -1.73791 0.140448 -0.919039 -0.368295 + 0.908231 1.27295 -1.75308 0.68021 -0.723059 0.120418 + 0.944279 1.32802 -1.75012 0.77189 -0.60442 0.197136 + 0.959184 1.34741 -1.74669 0.5284 -0.828906 0.183597 + 0.965886 1.35 -1.74384 0.0307256 -0.999527 -0.00144085 + 0.998055 1.34162 -1.73825 -0.217014 -0.957713 -0.188921 + 0.905776 1.26502 -1.76626 0.486282 -0.873507 0.0227194 + 0.941823 1.32009 -1.7633 0.754334 -0.588451 0.291044 + 0.962841 1.34356 -1.76123 0.45567 -0.809372 0.370515 + 0.969543 1.34615 -1.75837 -0.0101898 -0.956427 0.291793 + 1.01234 1.33979 -1.75085 -0.198914 -0.978947 0.0457937 + 0.866702 1.25654 -1.76555 -0.179958 -0.967861 -0.175672 + 0.873374 1.26773 -1.7878 -0.171095 -0.797875 -0.578033 + 0.912448 1.27623 -1.78851 0.481969 -0.849188 -0.215839 + 0.94631 1.31106 -1.78594 0.741521 -0.652515 0.156112 + 0.967328 1.33454 -1.78386 0.495941 -0.83553 0.2365 + 0.79685 1.32324 -1.78111 -0.790395 -0.426187 -0.440045 + 0.86489 1.28634 -1.80025 -0.354786 -0.651905 -0.670184 + 0.918915 1.28339 -1.80822 0.379433 -0.805714 -0.454814 + 0.952777 1.31823 -1.80566 0.666774 -0.741382 -0.0759342 + 0.76183 1.39164 -1.74576 -0.947077 -0.179023 -0.266452 + 0.814222 1.33839 -1.80653 -0.64372 -0.302701 -0.702848 + 0.864718 1.29753 -1.81167 -0.346094 -0.613928 -0.709444 + 0.918743 1.29457 -1.81965 0.224238 -0.692603 -0.685579 + 0.752212 1.49618 -1.6794 -0.995593 -0.0876368 0.033378 + 0.753606 1.5029 -1.71989 -0.961439 0.0233884 -0.27402 + 0.779201 1.40679 -1.77117 -0.832177 -0.0421317 -0.552907 + 0.829046 1.35425 -1.82431 -0.571572 -0.223133 -0.789631 + 0.879542 1.31338 -1.82945 -0.258196 -0.505559 -0.823253 + 0.74596 1.57993 -1.63403 -0.990521 -0.0607009 0.123224 + 0.747354 1.58665 -1.67453 -0.978295 0.0855167 -0.188749 + 0.770913 1.51923 -1.75069 -0.859402 0.0941858 -0.502551 + 0.796508 1.42312 -1.80198 -0.742 0.0132376 -0.670269 + 0.851056 1.36611 -1.83951 -0.444579 -0.16388 -0.880621 + 0.750401 1.64607 -1.60312 -0.990187 -0.00110638 0.139745 + 0.752199 1.66051 -1.6355 -0.975527 0.141205 -0.168546 + 0.76879 1.67356 -1.67546 -0.878867 0.253999 -0.403828 + 0.763945 1.5997 -1.71449 -0.884763 0.196587 -0.422549 + 0.762522 1.6324 -1.56747 -0.887756 -0.122147 0.443812 + 0.754476 1.71575 -1.57263 -0.984377 -0.0015908 0.176066 + 0.756274 1.73021 -1.60501 -0.980692 0.114585 -0.158469 + 0.791203 1.67569 -1.51711 -0.541301 -0.153592 0.826682 + 0.765889 1.69882 -1.54682 -0.859758 -0.0853924 0.503511 + 0.758561 1.78796 -1.55009 -0.982815 0.0079859 0.184422 + 0.818692 1.67483 -1.51004 -0.258377 0.0298413 0.965583 + 0.79282 1.75793 -1.50947 -0.467429 -0.178363 0.86585 + 0.769974 1.77104 -1.52429 -0.796549 -0.132821 0.589804 + 0.849331 1.64797 -1.4825 -0.590317 -0.0861354 0.802562 + 0.832232 1.66576 -1.50159 -0.23267 0.674029 0.701106 + 0.856572 1.70761 -1.52333 0.21422 0.202849 0.955491 + 0.84636 1.76001 -1.5058 0.351995 -0.201517 0.914051 + 0.820309 1.75707 -1.50241 -0.0505897 -0.183514 0.981714 + 0.924839 1.70033 -1.42998 -0.396303 -0.26986 0.877564 + 0.89595 1.71482 -1.44879 -0.662965 -0.0660972 0.745727 + 0.878852 1.73262 -1.46788 -0.912664 0.153712 0.378705 + 0.870112 1.69854 -1.51488 -0.575398 0.769583 0.276873 + 0.884407 1.72657 -1.53545 0.16572 0.351825 0.921279 + 0.965178 1.6967 -1.42299 0.0971641 -0.366115 0.925483 + 0.962515 1.76197 -1.39159 0.0494668 -0.456948 0.888117 + 0.940631 1.76602 -1.39685 -0.45406 -0.382372 0.804749 + 0.911742 1.78053 -1.41565 -0.702718 -0.271822 0.657495 + 0.986358 1.70191 -1.42978 0.60395 -0.293491 0.741018 + 0.983694 1.76718 -1.39836 0.632074 -0.331551 0.700397 + 0.977586 1.82251 -1.36353 0.632742 -0.390931 0.668439 + 0.962017 1.81868 -1.35854 0.0486928 -0.536832 0.842283 + 0.940133 1.82274 -1.3638 -0.475986 -0.476836 0.738962 + 1.01744 1.65185 -1.48818 0.82055 -0.083874 0.565388 + 1.01002 1.72012 -1.45543 0.90937 -0.0896113 0.406221 + 0.995673 1.77835 -1.41304 0.915394 -0.101612 0.389524 + 1.03451 1.61165 -1.51412 0.752299 0.0800696 0.653938 + 1.04836 1.68864 -1.53604 0.907406 0.138091 0.396919 + 1.01623 1.74048 -1.4822 0.956033 0.113264 0.270504 + 1.00188 1.79872 -1.4398 0.984819 0.0772673 0.155437 + 1.04738 1.58525 -1.51946 0.706893 0.198983 0.678754 + 1.06543 1.64843 -1.56198 0.834485 0.137703 0.533547 + 1.04813 1.70852 -1.55514 0.845394 0.424976 0.323581 + 1.01599 1.76034 -1.50129 0.901143 0.432403 -0.031131 + 1.00151 1.80988 -1.45507 0.932042 0.33166 -0.145943 + 1.06727 1.53607 -1.52473 0.708083 0.225767 0.669065 + 1.08274 1.6196 -1.57935 0.802613 0.210258 0.558215 + 1.10264 1.57041 -1.58462 0.770191 0.26683 0.579316 + 1.1061 1.64277 -1.62382 0.850943 0.239853 0.467297 + 1.08878 1.67161 -1.60646 0.851207 0.17636 0.494311 + 1.06948 1.72195 -1.58796 0.804773 0.154899 0.573015 + 1.05153 1.72021 -1.57018 0.653806 0.253555 0.712915 + 1.1312 1.49015 -1.58202 0.766807 0.236065 0.596892 + 1.15929 1.49629 -1.62432 0.888797 0.159086 0.429804 + 1.13073 1.57656 -1.62691 0.822449 0.302319 0.481851 + 1.14646 1.44239 -1.58743 0.863653 0.0225176 0.503583 + 1.16822 1.44519 -1.65465 0.974154 -0.0688945 0.215121 + 1.17284 1.51873 -1.66879 0.944891 0.177707 0.274956 + 1.16836 1.5483 -1.68293 0.926131 0.321747 0.196877 + 1.12625 1.60613 -1.64105 0.867512 0.311741 0.387608 + 1.15087 1.38488 -1.61849 0.892281 -0.270739 0.361296 + 1.16132 1.42747 -1.62544 0.953786 -0.0460698 0.296934 + 1.16281 1.36629 -1.68276 0.955738 -0.252189 0.151544 + 1.16971 1.38401 -1.71198 0.985208 -0.168634 -0.030454 + 1.16897 1.41515 -1.74191 0.97297 -0.133001 -0.188784 + 1.18177 1.46764 -1.69911 0.995487 -0.083494 0.0451023 + 1.17501 1.53132 -1.71119 0.956087 0.246035 -0.15926 + 1.15551 1.33786 -1.69304 0.921014 -0.380675 0.0825778 + 1.15435 1.34214 -1.73898 0.867569 -0.408862 -0.283118 + 1.1536 1.37329 -1.7689 0.806537 -0.338132 -0.484938 + 1.14166 1.3961 -1.79896 0.716646 -0.309902 -0.624803 + 1.16209 1.43471 -1.77781 0.894252 -0.0437264 -0.445423 + 1.14122 1.31857 -1.73434 0.537613 -0.77381 -0.33495 + 1.12081 1.34121 -1.76961 0.351543 -0.678879 -0.644625 + 1.10887 1.36402 -1.79966 0.451306 -0.65054 -0.610836 + 1.12082 1.41464 -1.82495 0.716457 -0.19234 -0.670593 + 1.14125 1.45325 -1.8038 0.776066 0.0901003 -0.624182 + 1.09764 1.31002 -1.73515 -0.00304124 -0.960758 -0.277372 + 1.07722 1.33266 -1.77041 0.0673833 -0.886457 -0.457879 + 1.06411 1.34048 -1.79374 0.184022 -0.869776 -0.457848 + 1.06981 1.35429 -1.81241 0.260993 -0.787811 -0.557886 + 1.09939 1.39036 -1.83797 0.587326 -0.491057 -0.643359 + 1.01752 1.33057 -1.77356 -0.0327945 -0.998722 0.0384657 + 1.00441 1.33839 -1.79689 0.0841538 -0.910443 -0.404983 + 1.01555 1.35052 -1.81807 0.106838 -0.847384 -0.520121 + 1.02125 1.36435 -1.83674 0.116995 -0.785207 -0.60808 + 1.06033 1.38065 -1.85071 0.264508 -0.734201 -0.625288 + 0.974722 1.33694 -1.78108 0.0378411 -0.981341 0.188514 + 0.98251 1.3384 -1.80245 0.194066 -0.954064 -0.228256 + 0.993649 1.35055 -1.82362 0.225469 -0.841464 -0.491021 + 0.99208 1.36275 -1.84143 0.224675 -0.731475 -0.64379 + 0.996414 1.38162 -1.86005 0.114721 -0.768803 -0.629111 + 0.975116 1.33601 -1.80524 0.504604 -0.860644 -0.0683099 + 0.985499 1.34774 -1.8249 0.414596 -0.790654 -0.450529 + 0.98393 1.35994 -1.8427 0.31843 -0.674411 -0.666162 + 0.967246 1.38002 -1.86474 0.122181 -0.64373 -0.755436 + 0.988765 1.39406 -1.87874 -0.00797693 -0.589412 -0.807793 + 0.963161 1.32996 -1.82532 0.533264 -0.708512 -0.462212 + 0.960586 1.34898 -1.84185 0.343788 -0.601851 -0.720822 + 0.943902 1.36906 -1.86388 0.0775461 -0.468257 -0.880183 + 0.935798 1.39002 -1.87222 -0.179161 0.289045 -0.940401 + 0.916168 1.3136 -1.83618 0.0631166 -0.548984 -0.833447 + 0.91712 1.35833 -1.85396 -0.174175 -0.385521 -0.906111 + 0.909016 1.37928 -1.86229 -0.235678 -0.29067 -0.927344 + 0.879577 1.38728 -1.85458 -0.356619 0.0186646 -0.934063 + 0.977897 1.39575 -1.87826 -0.162868 -0.130107 -0.978032 + 0.880494 1.35811 -1.84722 -0.260736 -0.32044 -0.910678 + 0.818518 1.43499 -1.81718 -0.53672 0.102321 -0.837533 + 0.905572 1.40079 -1.86012 -0.28874 0.137098 -0.947541 + 0.803685 1.53284 -1.79816 -0.635609 0.163136 -0.754578 + 0.86351 1.54431 -1.82219 -0.276032 0.278569 -0.919894 + 0.878343 1.44646 -1.8412 -0.332643 0.155606 -0.930126 + 0.905215 1.41419 -1.85732 -0.321859 0.203044 -0.924759 + 0.796717 1.61331 -1.76195 -0.639976 0.338044 -0.690042 + 0.860608 1.62202 -1.78844 -0.25166 0.441123 -0.861439 + 0.964636 1.5442 -1.83363 -0.0582802 0.404076 -0.912867 + 0.9756 1.49514 -1.85648 -0.131803 0.335862 -0.932644 + 1.00247 1.46289 -1.8726 -0.190298 0.414101 -0.890116 + 0.798428 1.69134 -1.71503 -0.636144 0.392341 -0.664371 + 0.862319 1.70005 -1.74151 -0.24999 0.501494 -0.828257 + 0.961734 1.6219 -1.79988 -0.00855115 0.473337 -0.88084 + 1.03632 1.56513 -1.82489 0.26045 0.469349 -0.843728 + 1.04729 1.51607 -1.84774 0.24433 0.475268 -0.845235 + 0.766351 1.73233 -1.63718 -0.897547 0.206641 -0.389499 + 0.795989 1.7501 -1.67675 -0.765693 0.326224 -0.55434 + 0.805752 1.77556 -1.67281 -0.333036 0.580864 -0.742754 + 0.769426 1.80185 -1.60854 -0.85964 0.279734 -0.427514 + 0.779188 1.82732 -1.60459 -0.698909 0.455559 -0.551355 + 0.805421 1.83416 -1.62143 -0.203184 0.643701 -0.737811 + 0.827982 1.82389 -1.62545 0.262275 0.564566 -0.782609 + 0.828313 1.76528 -1.67683 0.209881 0.771557 -0.600541 + 0.759348 1.79972 -1.57636 -0.980372 0.136129 -0.142617 + 0.765688 1.86275 -1.54751 -0.95088 0.246581 -0.187147 + 0.777499 1.87088 -1.56637 -0.730178 0.446996 -0.516753 + 0.803731 1.87773 -1.5832 -0.368998 0.576876 -0.728735 + 0.764901 1.85098 -1.52125 -0.973073 0.0188829 0.229721 + 0.774462 1.90805 -1.49188 -0.973258 0.0249355 0.228355 + 0.77504 1.9167 -1.51119 -0.947347 0.270956 -0.170635 + 0.786851 1.92484 -1.53005 -0.711056 0.476532 -0.517027 + 0.774543 1.8401 -1.50329 -0.790856 -0.158585 0.591098 + 0.784104 1.89718 -1.47393 -0.785578 -0.20298 0.584522 + 0.789559 1.94929 -1.44557 -0.797212 -0.245721 0.55143 + 0.782274 1.95751 -1.45914 -0.975601 -0.00475762 0.219498 + 0.782852 1.96615 -1.47846 -0.944843 0.275386 -0.177298 + 0.797389 1.827 -1.48848 -0.458213 -0.274597 0.845362 + 0.800897 1.88754 -1.46304 -0.472918 -0.349431 0.808855 + 0.806352 1.93965 -1.43468 -0.475561 -0.412114 0.777177 + 0.818764 1.82256 -1.48349 -0.0645829 -0.326339 0.943044 + 0.822272 1.88311 -1.45804 -0.0592591 -0.417456 0.906763 + 0.8225 1.93631 -1.43091 -0.0673611 -0.486741 0.870945 + 0.824935 1.98148 -1.40299 -0.0595168 -0.479643 0.875443 + 0.808788 1.98483 -1.40677 -0.478088 -0.401238 0.781306 + 0.844815 1.82551 -1.48689 0.368747 -0.302957 0.878774 + 0.841422 1.88527 -1.46055 0.369227 -0.39024 0.843436 + 0.84165 1.93848 -1.43341 0.378912 -0.454753 0.805993 + 0.840044 1.98319 -1.40497 0.370029 -0.44517 0.815415 + 0.82469 2.01045 -1.38907 -0.0618344 -0.16525 0.984311 + 0.8628 1.83228 -1.49721 0.69882 -0.193724 0.688565 + 0.859408 1.89205 -1.47086 0.719024 -0.273931 0.638722 + 0.855242 1.94359 -1.44121 0.718737 -0.328703 0.612676 + 0.853636 1.98831 -1.41276 0.719534 -0.311942 0.620453 + 0.874195 1.77897 -1.51791 0.676469 -0.125144 0.725761 + 0.877897 1.84482 -1.5174 0.939806 0.00209016 0.341701 + 0.870505 1.90126 -1.4857 0.947571 -0.0761223 0.310346 + 0.86634 1.95281 -1.45605 0.952866 -0.103574 0.285165 + 0.862391 1.99558 -1.42447 0.946617 -0.0891164 0.309796 + 0.889292 1.79151 -1.53811 0.884927 0.139111 0.444469 + 0.879305 1.85613 -1.5382 0.975399 0.206905 -0.0760704 + 0.871914 1.91258 -1.5065 0.980783 0.170718 -0.0944488 + 0.867404 1.96136 -1.47176 0.982856 0.158859 -0.0935781 + 0.863455 2.00413 -1.44018 0.978324 0.192191 -0.0771038 + 0.913283 1.74562 -1.54745 0.224599 0.679926 0.698037 + 0.91404 1.75833 -1.57116 0.444114 0.870108 0.213715 + 0.890048 1.80422 -1.56183 0.936161 0.350899 -0.0217378 + 0.867427 1.86948 -1.56556 0.823437 0.37336 -0.427263 + 0.863182 1.92239 -1.52662 0.831641 0.370929 -0.413261 + 0.894918 1.72132 -1.52531 -0.588939 0.801163 0.106246 + 0.923794 1.74036 -1.53732 -0.38094 0.924197 -0.0272937 + 0.952938 1.74542 -1.54417 -0.00632487 0.993386 -0.114652 + 0.903651 1.76204 -1.48842 -0.702699 0.533287 -0.470976 + 0.925882 1.77462 -1.50761 -0.514275 0.588201 -0.624133 + 0.955026 1.77968 -1.51447 -0.0257015 0.676512 -0.735984 + 0.878845 1.73927 -1.47799 -0.907971 0.386447 -0.162008 + 0.899087 1.79644 -1.43839 -0.935934 0.318857 -0.149525 + 0.908816 1.80483 -1.45121 -0.777495 0.459167 -0.42973 + 0.931047 1.81741 -1.4704 -0.516242 0.596004 -0.61504 + 0.899094 1.78978 -1.42827 -0.925104 -0.0390471 0.3777 + 0.906243 1.84754 -1.39768 -0.951968 0.259491 -0.162547 + 0.915972 1.85595 -1.4105 -0.7745 0.461961 -0.432136 + 0.906249 1.84265 -1.39025 -0.942177 -0.120717 0.312617 + 0.911958 1.89358 -1.35878 -0.950611 0.262794 -0.165158 + 0.919284 1.89993 -1.36844 -0.773901 0.477597 -0.415907 + 0.932314 1.86519 -1.42462 -0.525027 0.602043 -0.601574 + 0.918897 1.8334 -1.37762 -0.707853 -0.371746 0.600623 + 0.911964 1.88869 -1.35134 -0.943951 -0.153564 0.292189 + 0.915968 1.93204 -1.31999 -0.95007 0.28164 -0.134336 + 0.923294 1.9384 -1.32966 -0.767422 0.509113 -0.389702 + 0.935626 1.90917 -1.38255 -0.51493 0.630635 -0.580643 + 0.942731 1.87105 -1.32796 -0.470611 -0.536769 0.700289 + 0.921495 1.8817 -1.34177 -0.713131 -0.417184 0.563385 + 0.915973 1.92818 -1.31413 -0.9417 -0.13543 0.307993 + 0.921242 1.95604 -1.29783 -0.888689 0.45838 0.0109117 + 0.926466 1.96057 -1.30472 -0.729134 0.636521 -0.251405 + 0.959263 1.86798 -1.32398 0.0407104 -0.60349 0.79633 + 0.942258 1.91278 -1.29366 -0.474826 -0.529396 0.703051 + 0.925505 1.92119 -1.30457 -0.708821 -0.410939 0.573326 + 0.921247 1.95218 -1.29197 -0.87881 0.0971644 0.467175 + 0.974832 1.87181 -1.32896 0.641662 -0.441204 0.627383 + 0.971073 1.91275 -1.29362 0.629866 -0.437903 0.641489 + 0.95879 1.90972 -1.28968 0.0502157 -0.596327 0.801169 + 0.983883 1.88026 -1.34004 0.927611 -0.177112 0.32889 + 0.980124 1.92119 -1.3047 0.926811 -0.161075 0.339229 + 0.975262 1.94566 -1.28323 0.861922 0.0563042 0.503905 + 0.968843 1.93965 -1.27537 0.593637 -0.156446 0.78938 + 0.956559 1.93662 -1.27144 0.0317551 -0.296395 0.954537 + 0.989565 1.83369 -1.3782 0.927127 -0.141926 0.346831 + 0.988447 1.89522 -1.35972 0.993572 0.019941 0.111432 + 0.983726 1.933 -1.32021 0.990768 0.035094 0.130949 + 0.978864 1.95746 -1.29875 0.932867 0.239561 0.269015 + 0.994129 1.84866 -1.39787 0.991489 0.0328007 0.12599 + 0.988169 1.90367 -1.37124 0.9366 0.300031 -0.181001 + 0.983448 1.94144 -1.33175 0.932314 0.326099 -0.156365 + 0.978738 1.9634 -1.30719 0.874662 0.484722 -0.00345886 + 0.993755 1.85983 -1.41314 0.936184 0.299037 -0.184759 + 0.982981 1.90748 -1.37727 0.62084 0.594711 -0.510761 + 0.979354 1.94445 -1.3365 0.620038 0.623844 -0.475785 + 0.974644 1.9664 -1.31195 0.572848 0.746418 -0.338683 + 0.988567 1.86364 -1.41917 0.628031 0.57067 -0.529069 + 0.971735 1.91015 -1.38211 0.330232 0.696066 -0.637526 + 0.968108 1.94712 -1.34135 0.322806 0.729585 -0.602911 + 0.966579 1.96839 -1.31515 0.302928 0.828847 -0.470369 + 0.969805 1.9715 -1.30236 0.434397 0.899283 -0.0508902 + 0.994451 1.81507 -1.46328 0.618416 0.597983 -0.50988 + 0.979564 1.81863 -1.46965 0.323729 0.665091 -0.672943 + 0.97368 1.8672 -1.42555 0.331487 0.667147 -0.667107 + 0.95189 1.91233 -1.3868 -0.0400755 0.730379 -0.681865 + 0.952452 1.94884 -1.34504 -0.0328945 0.763208 -0.645315 + 1.00893 1.76552 -1.50949 0.509336 0.67916 -0.528506 + 0.982022 1.77671 -1.5081 0.240849 0.671748 -0.700533 + 0.952568 1.8216 -1.47601 -0.040789 0.682803 -0.729463 + 0.953835 1.86938 -1.43022 -0.031336 0.700593 -0.712873 + 1.01475 1.72657 -1.54594 0.392391 0.91356 -0.106943 + 0.987834 1.73775 -1.54454 0.313461 0.941122 -0.126613 + 1.01815 1.73827 -1.56097 0.333278 0.293653 0.895932 + 0.988572 1.74562 -1.55695 0.176454 0.371544 0.911492 + 1.0327 1.79865 -1.56084 0.604262 -0.0691682 0.793778 + 1.01567 1.7933 -1.55082 0.325016 -0.171933 0.929948 + 0.986097 1.80064 -1.54679 -0.0383162 -0.199551 0.979138 + 0.953676 1.75329 -1.55657 -0.141179 0.479831 0.865928 + 1.05065 1.80039 -1.57863 0.823027 0.076056 0.562887 + 1.02393 1.86315 -1.54429 0.670406 -0.146151 0.727458 + 1.0069 1.85779 -1.53428 0.33041 -0.252079 0.909552 + 0.98619 1.85613 -1.53234 -0.0360483 -0.296041 0.954495 + 0.955781 1.8022 -1.55238 -0.367072 -0.147251 0.918464 + 1.05823 1.80894 -1.59774 0.943709 0.18023 0.277363 + 1.04226 1.87778 -1.57615 0.957066 0.075958 0.279741 + 1.03468 1.86924 -1.55703 0.863438 -0.0279794 0.503678 + 1.01649 1.92288 -1.51957 0.68078 -0.233348 0.694325 + 1.08344 1.73643 -1.6203 0.922525 0.23309 0.307599 + 1.08388 1.74579 -1.64166 0.9155 0.365741 -0.167607 + 1.05867 1.81829 -1.61909 0.962981 0.269164 0.0147819 + 1.0442 1.88418 -1.5904 0.982566 0.183879 0.0274396 + 1.03281 1.93526 -1.54636 0.966128 0.0083907 0.257928 + 1.10274 1.68609 -1.6388 0.928477 0.285324 0.237742 + 1.10032 1.68885 -1.67007 0.844187 0.489356 -0.218812 + 1.06756 1.75407 -1.66038 0.735995 0.409781 -0.53888 + 1.05554 1.82437 -1.63257 0.854704 0.351647 -0.381871 + 1.04108 1.89025 -1.60387 0.87975 0.337209 -0.335155 + 1.12121 1.65122 -1.66364 0.905436 0.387623 0.173016 + 1.11879 1.65398 -1.69492 0.765653 0.540044 -0.349468 + 1.084 1.69714 -1.68879 0.660941 0.508547 -0.551849 + 1.04663 1.76377 -1.67854 0.640029 0.411969 -0.648571 + 1.14137 1.61459 -1.68087 0.896607 0.422757 0.131803 + 1.14801 1.59761 -1.70914 0.845088 0.449594 -0.289295 + 1.12827 1.60294 -1.7296 0.628582 0.502555 -0.593568 + 1.09857 1.6381 -1.72614 0.558262 0.535911 -0.633358 + 1.15283 1.53819 -1.75413 0.793974 0.346618 -0.499462 + 1.13309 1.54353 -1.7746 0.585097 0.46513 -0.664316 + 1.10532 1.53438 -1.79755 0.488058 0.479183 -0.729509 + 1.10805 1.58706 -1.76083 0.578885 0.469159 -0.66692 + 1.0696 1.63577 -1.75368 0.52483 0.515647 -0.677246 + 1.17489 1.48719 -1.73501 0.946845 0.0903226 -0.30875 + 1.15272 1.49406 -1.77795 0.81882 0.196125 -0.539507 + 1.12311 1.49763 -1.80977 0.610504 0.350364 -0.710303 + 1.11164 1.45681 -1.83562 0.647869 0.179895 -0.740205 + 1.09534 1.48847 -1.83271 0.513726 0.392367 -0.762977 + 1.07225 1.49111 -1.84717 0.507356 0.398034 -0.764303 + 1.0753 1.52508 -1.82485 0.489936 0.46432 -0.737814 + 1.07804 1.57775 -1.78813 0.494471 0.485232 -0.721144 + 1.09737 1.43149 -1.85176 0.629567 0.0139265 -0.776821 + 1.06557 1.4637 -1.86328 0.52843 0.279584 -0.80162 + 1.04247 1.46635 -1.87773 0.193359 0.303913 -0.932871 + 1.04423 1.48211 -1.87005 0.177522 0.470682 -0.86426 + 1.07593 1.40723 -1.86478 0.535037 -0.298819 -0.790217 + 1.05129 1.43838 -1.87943 0.321225 0.11378 -0.940143 + 1.00071 1.44711 -1.88027 -0.182705 0.30798 -0.933685 + 1.05268 1.39308 -1.8694 0.307762 -0.665634 -0.679863 + 1.05412 1.41394 -1.88015 0.38233 -0.112089 -0.917202 + 1.00389 1.40927 -1.88379 -0.0913485 -0.0431159 -0.994885 + 1.00107 1.43371 -1.88308 -0.108481 0.116047 -0.987302 + 1.03086 1.39979 -1.88477 0.114306 -0.409271 -0.905225 + 1.02788 1.62315 -1.79044 0.301681 0.519481 -0.799455 + 1.01937 1.70534 -1.74027 0.356645 0.504052 -0.786597 + 1.05503 1.69481 -1.71634 0.578423 0.494647 -0.648654 + 0.95322 1.70409 -1.74971 -0.00172616 0.500178 -0.865921 + 0.965472 1.76805 -1.71504 0.0389043 0.468356 -0.882683 + 1.01097 1.77429 -1.70247 0.388503 0.449961 -0.804115 + 0.874571 1.76401 -1.70684 -0.215765 0.50595 -0.835141 + 0.96322 1.83567 -1.68111 -0.0164933 0.516224 -0.856295 + 1.00872 1.84191 -1.66855 0.387605 0.458023 -0.799986 + 1.03461 1.83407 -1.65072 0.649079 0.390356 -0.652931 + 0.861683 1.78372 -1.68945 -0.597936 0.623598 -0.503586 + 0.950332 1.85538 -1.66374 -0.317726 0.610017 -0.725899 + 0.975267 1.90391 -1.6352 -0.208535 0.561856 -0.800519 + 1.0025 1.90419 -1.63537 0.298996 0.514333 -0.803781 + 1.02839 1.89634 -1.61754 0.674428 0.430963 -0.599515 + 0.844417 1.76425 -1.68043 -0.452432 0.794534 -0.404995 + 0.913921 1.84691 -1.6455 -0.614085 0.644286 -0.455846 + 0.938856 1.89544 -1.61696 -0.542202 0.550342 -0.634933 + 0.859869 1.76859 -1.6341 0.445026 0.793956 -0.41423 + 0.875973 1.76755 -1.63771 -0.527664 0.752669 0.393777 + 0.893836 1.82196 -1.6254 -0.896356 0.299268 0.327085 + 0.896655 1.82743 -1.63648 -0.824761 0.562959 -0.0533535 + 0.921707 1.88933 -1.60415 -0.823308 0.447233 -0.349494 + 0.853077 1.821 -1.61849 0.512321 0.398105 -0.760947 + 0.87817 1.81756 -1.5892 0.818018 0.351029 -0.455659 + 0.884962 1.76516 -1.6048 0.466176 0.828904 -0.309189 + 0.896729 1.76634 -1.60699 -0.550414 0.680166 0.484168 + 0.82617 1.87946 -1.58753 0.0376388 0.588746 -0.807441 + 0.851265 1.87658 -1.58058 0.511033 0.515434 -0.687876 + 0.828572 1.93161 -1.54674 0.0456439 0.622702 -0.781127 + 0.84702 1.92949 -1.54163 0.501914 0.544805 -0.671766 + 0.806134 1.92987 -1.54242 -0.381639 0.587692 -0.713421 + 0.811053 1.97734 -1.50506 -0.37163 0.616737 -0.693921 + 0.828013 1.97864 -1.50834 0.0387334 0.652557 -0.756749 + 0.84646 1.97652 -1.50322 0.504421 0.566935 -0.651264 + 0.858672 1.97117 -1.49188 0.825376 0.387123 -0.410963 + 0.79177 1.97231 -1.49268 -0.712301 0.491453 -0.501101 + 0.797628 2.01363 -1.45839 -0.700366 0.532269 -0.475582 + 0.812841 2.01759 -1.46816 -0.372757 0.654729 -0.657558 + 0.829801 2.0189 -1.47144 0.045444 0.692976 -0.719527 + 0.844355 2.01723 -1.4674 0.493983 0.609319 -0.620251 + 0.78871 2.00747 -1.44416 -0.942371 0.300011 -0.148091 + 0.801572 2.03748 -1.43537 -0.64767 0.688258 -0.32684 + 0.816785 2.04146 -1.44513 -0.326553 0.793927 -0.512877 + 0.828873 2.04234 -1.44754 0.0308448 0.823181 -0.566941 + 0.788254 2.00064 -1.42894 -0.972322 0.0246197 0.232345 + 0.795223 2.03311 -1.42523 -0.855234 0.517342 -0.0305192 + 0.809004 2.04415 -1.42744 -0.459798 0.881304 -0.109035 + 0.817901 2.04647 -1.43316 -0.259383 0.937276 -0.232882 + 0.829989 2.04737 -1.43556 0.0498086 0.96876 -0.242947 + 0.795539 1.99244 -1.41536 -0.787446 -0.233218 0.570559 + 0.794767 2.02627 -1.40999 -0.883441 0.280727 0.375132 + 0.802389 2.03578 -1.4084 -0.586227 0.657626 0.473145 + 0.802656 2.03978 -1.4173 -0.609266 0.770668 0.186721 + 0.813198 2.01283 -1.39175 -0.406642 -0.104597 0.90758 + 0.799949 2.02044 -1.40034 -0.713163 0.0680816 0.697684 + 0.807571 2.02994 -1.39874 -0.452224 0.47853 0.752663 + 0.813367 2.04193 -1.40993 -0.224276 0.858176 0.461773 + 0.813634 2.04593 -1.41883 -0.252492 0.939872 0.229973 + 0.826811 2.02311 -1.39104 -0.0227871 0.272833 0.961792 + 0.815319 2.0255 -1.39372 -0.278669 0.332357 0.901045 + 0.817687 2.0367 -1.40026 -0.17387 0.738249 0.651734 + 0.819485 2.04025 -1.40646 0.00673967 0.884454 0.466579 + 0.831042 2.04727 -1.42219 0.0951323 0.973182 0.209445 + 0.835646 2.02411 -1.39219 0.227234 0.297828 0.92718 + 0.825435 2.03225 -1.39523 -0.0522344 0.571525 0.818921 + 0.83427 2.03325 -1.39638 0.170607 0.635874 0.7527 + 0.83939 2.03751 -1.40323 0.261961 0.77336 0.577314 + 0.839799 2.01216 -1.39104 0.346306 -0.12512 0.929741 + 0.849475 2.0158 -1.3966 0.653227 -0.0182164 0.756943 + 0.845322 2.02775 -1.39775 0.484766 0.411856 0.771606 + 0.85823 2.02307 -1.40831 0.880558 0.187929 0.435087 + 0.850442 2.032 -1.4046 0.6102 0.563452 0.556936 + 0.858992 2.02914 -1.41954 0.910346 0.407234 0.0736904 + 0.851204 2.03807 -1.41583 0.640972 0.726727 0.247025 + 0.841188 2.04106 -1.40945 0.311558 0.836697 0.45041 + 0.837159 2.04559 -1.41873 0.214142 0.939507 0.26734 + 0.852103 2.03688 -1.43541 0.7541 0.607915 -0.24854 + 0.847176 2.0426 -1.42511 0.551476 0.833615 0.0309872 + 0.856566 2.01188 -1.45606 0.825309 0.417335 -0.38039 + 0.843427 2.04067 -1.44351 0.465508 0.753491 -0.464277 + 0.8385 2.04639 -1.43321 0.312172 0.937369 -0.154554 + 0.822531 2.04825 -1.42455 -0.0694684 0.992306 0.102483 + 0.925807 1.75951 -1.57334 -0.411299 0.597867 0.688032 + 0.927912 1.80841 -1.56914 -0.726434 -0.0335528 0.686417 + 0.914592 1.82073 -1.59468 -0.849276 0.0526088 0.525322 + 0.955874 1.85768 -1.53792 -0.411358 -0.254141 0.875327 + 0.936802 1.86374 -1.55152 -0.772608 -0.123482 0.622759 + 0.923481 1.87607 -1.57706 -0.918817 0.0106625 0.394539 + 0.918888 1.88385 -1.59307 -0.970753 0.209136 0.117899 + 0.983264 1.91729 -1.51026 -0.0385597 -0.374533 0.926412 + 0.96098 1.91842 -1.51437 -0.409665 -0.333792 0.848975 + 0.941907 1.9245 -1.52797 -0.783661 -0.194019 0.590112 + 0.932115 1.93356 -1.54674 -0.936473 -0.062891 0.345054 + 0.927522 1.94134 -1.56276 -0.992672 0.104155 0.0612658 + 1.00397 1.91895 -1.51221 0.346889 -0.336199 0.875579 + 0.999619 1.97261 -1.48749 0.344914 -0.403702 0.847384 + 0.984005 1.97135 -1.48604 -0.0315257 -0.444023 0.895461 + 0.96172 1.97249 -1.49016 -0.416772 -0.39788 0.817308 + 0.947307 1.97706 -1.50044 -0.781325 -0.248361 0.57258 + 1.01214 1.97655 -1.49485 0.686758 -0.286408 0.668082 + 1.00749 2.02171 -1.46826 0.680776 -0.273483 0.679523 + 0.997615 2.0186 -1.46245 0.347852 -0.391195 0.852036 + 0.982001 2.01733 -1.46101 -0.0372974 -0.434504 0.899897 + 1.0203 1.98114 -1.50452 0.877327 -0.151467 0.455362 + 1.01565 2.02629 -1.47792 0.875941 -0.130227 0.464509 + 1.00985 2.05379 -1.4624 0.810516 0.146105 0.567201 + 1.00404 2.05053 -1.45548 0.635856 0.0333121 0.771089 + 0.994161 2.04743 -1.44967 0.306196 -0.0730943 0.949158 + 1.02724 1.92897 -1.53232 0.875826 -0.108865 0.470189 + 1.02586 1.98743 -1.51856 0.969797 -0.0168192 0.243333 + 1.02004 2.03125 -1.48901 0.965931 0.00602489 0.258728 + 1.01424 2.05876 -1.47348 0.896998 0.265072 0.353739 + 1.02733 1.99224 -1.52935 0.991211 0.1318 0.0113461 + 1.02151 2.03608 -1.49979 0.98602 0.164408 0.0271031 + 1.01517 2.06224 -1.48085 0.908245 0.392535 0.144937 + 1.0074 2.07084 -1.47634 0.60545 0.731745 0.313018 + 1.00647 2.06735 -1.46898 0.589432 0.661352 0.463879 + 1.03476 1.94165 -1.56062 0.989212 0.145646 0.015722 + 1.02503 1.99671 -1.53925 0.881103 0.341627 -0.32703 + 1.01969 2.03959 -1.5076 0.87834 0.3744 -0.297227 + 1.01336 2.06577 -1.48866 0.805969 0.568291 -0.165708 + 1.00634 2.0729 -1.48091 0.568049 0.818645 0.0845042 + 1.03246 1.94612 -1.57052 0.884622 0.332104 -0.327339 + 1.01545 2.00132 -1.54956 0.671293 0.478968 -0.565645 + 1.01011 2.04419 -1.51791 0.662039 0.520592 -0.539155 + 1.00661 2.06898 -1.49627 0.617417 0.681319 -0.393193 + 1.01978 1.9522 -1.58419 0.672125 0.459333 -0.580742 + 0.99642 2.00708 -1.56267 0.296671 0.590118 -0.750831 + 0.995099 2.04874 -1.52825 0.305392 0.630297 -0.713766 + 0.991595 2.07352 -1.50661 0.261216 0.78147 -0.566631 + 1.00074 1.95798 -1.5973 0.309374 0.560855 -0.767938 + 0.975847 2.00687 -1.56253 -0.244207 0.588952 -0.770389 + 0.974527 2.04854 -1.52813 -0.253411 0.629372 -0.734625 + 0.976944 2.0734 -1.50646 -0.216389 0.782104 -0.58437 + 0.990813 2.07877 -1.49456 0.23579 0.934527 -0.266576 + 0.973509 1.9577 -1.59711 -0.25647 0.558232 -0.78905 + 0.949082 2.00065 -1.54913 -0.554 0.512349 -0.656187 + 0.95341 2.04363 -1.51755 -0.546134 0.555732 -0.626817 + 0.946743 1.95147 -1.58371 -0.553467 0.488961 -0.674233 + 0.936118 1.99604 -1.53943 -0.83747 0.369265 -0.402848 + 0.940447 2.03902 -1.50785 -0.838137 0.404328 -0.366122 + 0.946611 2.0652 -1.48899 -0.766267 0.605144 -0.215955 + 0.955827 2.06849 -1.4959 -0.513041 0.716547 -0.472599 + 0.929595 1.94537 -1.5709 -0.841353 0.358811 -0.404203 + 0.934046 1.99201 -1.53129 -0.995019 0.0836439 0.0542248 + 0.938812 2.03584 -1.50142 -0.990397 0.117413 0.0729926 + 0.937515 1.98613 -1.51921 -0.940343 -0.096062 0.326385 + 0.942281 2.02995 -1.48935 -0.936737 -0.0728499 0.342369 + 0.944975 2.06202 -1.48256 -0.90688 0.366934 0.20719 + 0.953641 2.07063 -1.47757 -0.585212 0.724342 0.364494 + 0.954597 2.07248 -1.48133 -0.51175 0.85593 0.0741257 + 0.950006 2.02281 -1.47453 -0.783276 -0.227617 0.578506 + 0.947446 2.05783 -1.47398 -0.867967 0.213803 0.448244 + 0.956111 2.06645 -1.46899 -0.591633 0.615421 0.520794 + 0.969766 2.07362 -1.47095 -0.17785 0.90143 0.394705 + 0.970723 2.07549 -1.47471 -0.160577 0.906602 0.390241 + 0.964419 2.01823 -1.46426 -0.407496 -0.389513 0.82597 + 0.955171 2.05069 -1.45916 -0.720075 0.0676277 0.690593 + 0.960629 2.06227 -1.46033 -0.546737 0.492337 0.677261 + 0.967214 2.07131 -1.46621 -0.300105 0.858053 0.416751 + 0.965424 2.04743 -1.45186 -0.402195 -0.0619763 0.913454 + 0.970882 2.059 -1.45302 -0.286665 0.355037 0.889816 + 0.971731 2.06713 -1.45755 -0.223775 0.703876 0.674154 + 0.982013 2.06661 -1.45565 0.00366276 0.709287 0.704911 + 0.987789 2.06842 -1.45905 0.154454 0.806582 0.570587 + 0.983006 2.04653 -1.44862 -0.033658 -0.108566 0.993519 + 0.981163 2.05847 -1.45113 -0.0549915 0.337246 0.939809 + 0.992319 2.05937 -1.45218 0.229077 0.414214 0.880881 + 0.998095 2.06118 -1.45558 0.42272 0.510028 0.749119 + 0.990342 2.07074 -1.46379 0.162296 0.858346 0.486725 + 0.992911 2.07364 -1.47028 0.173208 0.87531 0.451476 + 0.972252 2.07813 -1.48049 -0.178992 0.958553 0.221672 + 1.00391 2.06445 -1.46249 0.541523 0.599848 0.589012 + 0.99444 2.07629 -1.47606 0.207902 0.891464 0.402577 + 0.993381 2.07834 -1.48062 0.216081 0.949075 0.229271 + 0.984601 2.08101 -1.48667 0.0231545 0.998041 0.0581277 + 0.976162 2.07864 -1.49442 -0.209449 0.939131 -0.27233 + 0.963814 2.07577 -1.48824 -0.367743 0.913219 -0.175487 + 0.999594 2.0761 -1.48852 0.450022 0.882156 -0.138853 + 0.936187 1.94568 -1.34079 -0.520259 0.657385 -0.545139 + 0.939359 1.96785 -1.31586 -0.480165 0.770993 -0.418343 + 0.950922 1.97011 -1.31884 -0.0508115 0.857391 -0.512151 + 0.93348 1.96797 -1.29823 -0.545887 0.837769 0.0122377 + 0.94102 1.97224 -1.30474 -0.384694 0.918542 -0.0910491 + 0.952584 1.9745 -1.30772 -0.0324882 0.983424 -0.178388 + 0.96174 1.9735 -1.30556 0.206319 0.96462 -0.164136 + 0.928256 1.96346 -1.29133 -0.661678 0.710269 0.240211 + 0.937365 1.96768 -1.28845 -0.283502 0.862474 0.419243 + 0.944905 1.97195 -1.29496 -0.157603 0.927137 0.339969 + 0.954131 1.97383 -1.29744 -0.0301258 0.953895 0.298624 + 0.963287 1.97281 -1.29528 0.142587 0.936476 0.320439 + 0.928259 1.9612 -1.2879 -0.651478 0.469036 0.596306 + 0.937368 1.96542 -1.28502 -0.27234 0.691559 0.669011 + 0.947165 1.96051 -1.27864 -0.139935 0.633509 0.760976 + 0.951054 1.97051 -1.29305 -0.00989646 0.810656 0.585439 + 0.963575 1.96415 -1.28342 0.266397 0.715895 0.645389 + 0.928037 1.94721 -1.28517 -0.678027 -0.143787 0.720837 + 0.935049 1.95622 -1.2811 -0.489486 0.261186 0.831977 + 0.944847 1.95131 -1.27473 -0.337323 0.215754 0.916332 + 0.953314 1.95908 -1.27673 -0.0168759 0.606118 0.795196 + 0.960497 1.96084 -1.27902 0.193969 0.65272 0.732347 + 0.94479 1.9388 -1.27427 -0.429763 -0.253205 0.866713 + 0.956616 1.94912 -1.2719 0.0406909 0.213526 0.976089 + 0.963799 1.9509 -1.2742 0.405407 0.292528 0.866067 + 0.970218 1.95691 -1.28205 0.654834 0.419877 0.628407 + 0.972324 1.96381 -1.29113 0.718078 0.511066 0.472414 + 0.965681 1.97106 -1.2925 0.297962 0.813113 0.500065 + 0.972199 1.96974 -1.29958 0.659057 0.721784 0.211354 + -0.899092 1.49376 -2.24544 0.347716 0.20168 -0.915652 + -0.886486 1.45631 -2.24676 0.411627 -0.152926 -0.89843 + -0.927139 1.43888 -2.25177 0.296551 -0.376099 -0.877842 + -0.848608 1.46705 -2.22149 0.566933 0.0178786 -0.82357 + -0.871592 1.43878 -2.22644 0.360939 -0.50584 -0.783485 + -0.887581 1.43198 -2.23119 0.350441 -0.71197 -0.608514 + -0.902475 1.44951 -2.25152 0.336819 -0.586789 -0.736363 + -0.95769 1.49484 -2.26045 0.215931 0.188097 -0.95812 + -0.924909 1.56648 -2.22949 0.338979 0.369488 -0.865201 + -0.861214 1.50451 -2.22016 0.485139 0.278077 -0.829043 + -0.954314 1.44138 -2.26401 0.319065 -0.257022 -0.912216 + -1.03233 1.48352 -2.27793 0.0674862 0.214674 -0.974351 + -1.04491 1.57445 -2.23899 0.000782238 0.376687 -0.92634 + -0.983508 1.56755 -2.24452 0.0830266 0.318008 -0.944446 + -1.0136 1.39205 -2.2446 0.0963116 -0.826824 -0.554154 + -1.02895 1.43006 -2.28148 0.0655307 -0.332016 -0.940995 + -1.0787 1.49585 -2.27286 -0.224748 0.226038 -0.947837 + -1.09129 1.58679 -2.23392 -0.109045 0.414363 -0.903555 + -1.0558 1.63596 -2.21233 -0.0471832 0.478576 -0.876777 + -0.986422 1.38955 -2.23237 0.208585 -0.792402 -0.573229 + -1.05482 1.38207 -2.20798 -0.410894 -0.870223 -0.271806 + -1.04752 1.38995 -2.23971 -0.286681 -0.846133 -0.449303 + -1.06288 1.42796 -2.27657 -0.383985 -0.436768 -0.813504 + -0.920256 1.42007 -2.23255 0.326465 -0.727625 -0.60331 + -0.920522 1.4091 -2.21389 0.375115 -0.848851 -0.372479 + -0.986688 1.37858 -2.21372 0.192482 -0.924479 -0.329073 + -0.895592 1.4307 -2.23229 0.263162 -0.746972 -0.610555 + -0.895922 1.41692 -2.20714 0.2813 -0.882887 -0.376006 + -0.928203 1.39501 -2.17716 0.324915 -0.938226 -0.119002 + -0.958305 1.38611 -2.16114 0.239838 -0.965313 0.103189 + -1.01679 1.36969 -2.19769 -0.0104022 -0.97555 -0.219531 + -0.887911 1.4182 -2.20603 0.0154502 -0.854308 -0.519537 + -0.903603 1.40282 -2.17041 0.118208 -0.958889 -0.257991 + -0.915701 1.39729 -2.13927 -0.029742 -0.999541 -0.00581299 + -0.940077 1.39375 -2.14157 0.176815 -0.968049 0.177812 + -0.87123 1.41119 -2.20415 -0.0824662 -0.779439 -0.621027 + -0.896651 1.40107 -2.16767 -0.226856 -0.910269 -0.346333 + -0.908748 1.39554 -2.13654 -0.427898 -0.867193 -0.254716 + -0.930671 1.40194 -2.11612 -0.0845671 -0.988612 0.12448 + -0.848054 1.43546 -2.2199 0.426623 -0.310922 -0.849306 + -0.847692 1.40788 -2.19762 0.19371 -0.655241 -0.730162 + -0.87997 1.39407 -2.16579 -0.432775 -0.744314 -0.508628 + -0.828642 1.45837 -2.20087 0.71805 -0.0727985 -0.692174 + -0.828088 1.42677 -2.19929 0.716303 -0.313041 -0.623631 + -0.830224 1.39283 -2.17614 0.624853 -0.447201 -0.639976 + -0.849827 1.37393 -2.17447 -0.0464246 -0.709832 -0.70284 + -0.824036 1.48986 -2.20217 0.636989 0.0877634 -0.765861 + -0.809707 1.45721 -2.1801 0.8428 -0.128338 -0.522701 + -0.799637 1.43961 -2.15706 0.777028 -0.169717 -0.606155 + -0.820154 1.37524 -2.1531 0.688939 -0.52652 -0.498136 + -0.85573 1.3557 -2.14582 -0.207085 -0.775424 -0.596518 + -0.813156 1.51146 -2.18697 0.688529 0.276065 -0.670609 + -0.805101 1.4887 -2.1814 0.89159 -0.0452952 -0.450573 + -0.791442 1.54012 -2.13914 0.866171 0.159485 -0.473616 + -0.850334 1.5261 -2.20495 0.504239 0.355548 -0.786974 + -0.799498 1.56287 -2.14471 0.744863 0.249575 -0.618782 + -0.916339 1.61308 -2.20198 0.354047 0.483464 -0.800571 + -0.841764 1.57271 -2.17745 0.550908 0.341102 -0.761676 + -0.789347 1.64319 -2.10231 0.809707 0.176438 -0.559683 + -0.994392 1.62906 -2.21786 0.11842 0.507327 -0.853578 + -0.92079 1.6404 -2.18212 0.305759 0.493066 -0.814492 + -0.831614 1.65302 -2.13505 0.528621 0.326104 -0.783719 + -0.998842 1.65637 -2.198 0.120238 0.517731 -0.847053 + -0.980605 1.70774 -2.17046 0.111612 0.414575 -0.903145 + -0.917688 1.70239 -2.15691 0.312348 0.331844 -0.890123 + -0.828512 1.71502 -2.10984 0.505614 0.222222 -0.83365 + -1.05076 1.68208 -2.18405 -0.0544873 0.516237 -0.854711 + -1.03252 1.73344 -2.15652 -0.112033 0.492671 -0.862974 + -0.999865 1.7905 -2.12876 -0.118145 0.530815 -0.839212 + -0.953246 1.792 -2.13158 0.0717505 0.465315 -0.882232 + -0.890328 1.78665 -2.11804 0.304835 0.362288 -0.880808 + -1.10063 1.64679 -2.2006 -0.163567 0.499036 -0.851004 + -1.09559 1.6929 -2.17231 -0.146371 0.547252 -0.82407 + -1.07481 1.74248 -2.14068 -0.193684 0.595922 -0.779335 + -1.04216 1.79953 -2.11292 -0.403665 0.681592 -0.610317 + -0.972288 1.8385 -2.09677 -0.170103 0.76314 -0.623443 + -1.13472 1.63559 -2.19829 -0.528753 0.406951 -0.744857 + -1.13202 1.7126 -2.15023 -0.518974 0.539562 -0.662977 + -1.11124 1.76217 -2.11859 -0.383798 0.765009 -0.517166 + -1.07684 1.78557 -2.08856 -0.500082 0.800928 -0.329291 + -1.12538 1.57558 -2.23162 -0.478761 0.307786 -0.822226 + -1.14556 1.56771 -2.21169 -0.924732 0.0127687 -0.380405 + -1.15054 1.62825 -2.18043 -0.94355 0.149282 -0.295684 + -1.14784 1.70525 -2.13236 -0.93001 0.311295 -0.19539 + -1.12989 1.75606 -2.09305 -0.802141 0.597122 -0.00389197 + -1.08355 1.46722 -2.27512 -0.436262 -0.104335 -0.89375 + -1.13023 1.54695 -2.23386 -0.734542 0.00769043 -0.67852 + -1.12601 1.49299 -2.22076 -0.922489 -0.292095 -0.252379 + -1.14477 1.55028 -2.18632 -0.983483 -0.176684 -0.0393022 + -1.14975 1.61081 -2.15505 -0.999238 -0.0371698 0.0119378 + -1.11068 1.47223 -2.24293 -0.844428 -0.314825 -0.433389 + -1.09001 1.43298 -2.24439 -0.757829 -0.511739 -0.404745 + -1.12245 1.47471 -2.19044 -0.928743 -0.347266 -0.129775 + -1.1412 1.532 -2.156 -0.978863 -0.204467 -0.00462601 + -1.0973 1.42511 -2.21268 -0.809678 -0.528579 -0.255001 + -1.1238 1.4619 -2.14593 -0.955007 -0.280978 -0.0949409 + -1.1384 1.52996 -2.09554 -0.984644 -0.174196 0.0114794 + -1.14607 1.58662 -2.06973 -0.992666 -0.0603977 0.104715 + -1.14887 1.58865 -2.13019 -0.996988 -0.0766038 0.0120895 + -1.09865 1.4123 -2.16816 -0.817352 -0.52306 -0.241544 + -1.1117 1.39962 -2.10918 -0.880765 -0.418878 -0.220893 + -1.12189 1.4465 -2.09138 -0.982189 -0.169339 -0.0814219 + -1.13649 1.51456 -2.04099 -0.990881 -0.0860551 0.103681 + -1.078 1.38547 -2.16349 -0.560756 -0.776008 -0.288729 + -1.10301 1.40494 -2.14053 -0.674597 -0.676213 -0.296066 + -1.09355 1.37119 -2.09712 -0.555811 -0.775705 -0.298924 + -1.12052 1.38342 -2.03799 -0.925874 -0.376859 0.0270859 + -1.13071 1.43029 -2.0202 -0.981496 -0.15405 0.113725 + -1.03997 1.37308 -2.15319 -0.00310849 -0.999983 0.0049718 + -1.072 1.36994 -2.13355 -0.182406 -0.949212 -0.256367 + -1.08236 1.37812 -2.13585 -0.63064 -0.703357 -0.327997 + -1.08487 1.3765 -2.12848 -0.639089 -0.69553 -0.328335 + -1.02978 1.37531 -2.15087 0.183394 -0.96671 0.178434 + -1.06181 1.37216 -2.13123 0.22663 -0.973001 0.0436826 + -1.07451 1.36833 -2.12618 -0.192974 -0.95056 -0.243304 + -1.01155 1.38294 -2.1313 0.197974 -0.957821 0.208292 + -1.03001 1.38062 -2.12265 0.242302 -0.967651 0.0702951 + -1.04271 1.37679 -2.1176 0.30303 -0.928481 -0.214701 + -1.04961 1.36119 -2.08699 0.152833 -0.914261 -0.375193 + -0.955048 1.39841 -2.11842 0.172716 -0.955008 0.241098 + -0.973508 1.39608 -2.10977 0.238834 -0.96828 0.0734327 + -0.976448 1.39491 -2.1025 0.292233 -0.931926 -0.214739 + -0.983343 1.37932 -2.07189 0.297877 -0.864302 -0.405279 + -0.940627 1.40425 -2.10236 0.0119251 -0.999809 0.0154635 + -0.943567 1.40308 -2.09509 0.0806325 -0.946819 -0.3115 + -0.949257 1.38472 -2.06144 0.0515516 -0.875933 -0.47967 + -0.995344 1.34393 -2.00981 0.267433 -0.876904 -0.399398 + -1.05697 1.33738 -2.04067 0.00316493 -0.938374 -0.345607 + -0.925917 1.4005 -2.11096 -0.465319 -0.868053 -0.173098 + -0.935873 1.40281 -2.09718 -0.372385 -0.871111 -0.320149 + -0.941563 1.38446 -2.06353 -0.386165 -0.779534 -0.493156 + -0.95376 1.34832 -1.99973 -0.369016 -0.776274 -0.511102 + -0.961258 1.34933 -1.99936 0.0632665 -0.877436 -0.475503 + -0.903042 1.38081 -2.11155 -0.642412 -0.674715 -0.363411 + -0.914566 1.36855 -2.07365 -0.624128 -0.648387 -0.435957 + -0.926763 1.33242 -2.00984 -0.490945 -0.811288 -0.317466 + -0.961228 1.33076 -1.96753 -0.169257 -0.984944 -0.035164 + -0.968726 1.33177 -1.96715 -0.0120355 -0.992256 -0.123627 + -0.885873 1.37584 -2.13714 -0.591827 -0.709596 -0.382381 + -0.855708 1.33141 -2.11817 -0.109685 -0.882587 -0.457176 + -0.867232 1.31915 -2.08026 -0.244785 -0.896655 -0.368904 + -0.820131 1.35095 -2.12545 0.509325 -0.684733 -0.521276 + -0.805212 1.33538 -2.08529 0.580008 -0.755738 -0.304057 + -0.869015 1.31044 -2.04502 -0.125359 -0.972412 -0.196723 + -0.864873 1.304 -1.99944 -0.0532372 -0.997076 0.0548167 + -0.922622 1.32598 -1.96426 -0.182374 -0.961751 0.20439 + -0.77699 1.42361 -2.13262 0.758175 -0.255066 -0.600093 + -0.762071 1.40805 -2.09246 0.839452 -0.341345 -0.422852 + -0.806994 1.32668 -2.05006 0.49444 -0.842977 -0.211944 + -0.782071 1.50568 -2.13663 0.721418 0.143125 -0.677548 + -0.759425 1.48967 -2.11219 0.853145 0.0876704 -0.514253 + -0.737945 1.48817 -2.06393 0.922728 0.0628149 -0.380298 + -0.734565 1.38336 -2.02192 0.84881 -0.469183 -0.243698 + -0.762784 1.59643 -2.05332 0.881025 0.21473 -0.421529 + -0.741304 1.59492 -2.00506 0.900503 0.170746 -0.399924 + -0.710439 1.46348 -1.99338 0.975812 -0.0635473 -0.209172 + -0.739676 1.37208 -1.97537 0.778311 -0.611871 0.140875 + -0.812106 1.3154 -2.0035 0.401367 -0.915608 0.0237888 + -0.772155 1.63086 -2.05582 0.914181 0.10517 -0.391424 + -0.739236 1.6697 -1.97481 0.893909 0.0177221 -0.447898 + -0.710255 1.56845 -1.95041 0.971957 0.0764396 -0.222389 + -0.710269 1.54832 -1.89964 0.951423 -0.12042 0.28336 + -0.710452 1.44335 -1.94262 0.931513 -0.282433 0.22916 + -0.776665 1.70487 -2.06958 0.810363 0.0258287 -0.585358 + -0.759473 1.69255 -2.0231 0.922959 -0.0681686 -0.378814 + -0.729217 1.71242 -1.96378 0.913225 -0.00884209 -0.407359 + -0.708187 1.64323 -1.92017 0.97974 0.0129378 -0.199856 + -0.758738 1.75839 -2.05214 0.823093 0.0326935 -0.566965 + -0.749453 1.73526 -2.01205 0.935118 -0.0904782 -0.342591 + -0.739652 1.76789 -1.98901 0.962083 0.022823 -0.271801 + -0.727109 1.75134 -1.95088 0.944277 0.104782 -0.312027 + -0.705916 1.68333 -1.91339 0.979498 -0.00719142 -0.201327 + -0.810585 1.76854 -2.09241 0.488766 0.221227 -0.8439 + -0.791228 1.81115 -2.06378 0.557852 0.537038 -0.632764 + -0.748937 1.79101 -2.02909 0.851041 0.319981 -0.416343 + -0.870971 1.82926 -2.08941 0.308356 0.544939 -0.779717 + -0.848521 1.85072 -2.05959 0.381558 0.567316 -0.729771 + -0.786292 1.81982 -2.03777 0.606728 0.612492 -0.50669 + -0.744001 1.79968 -2.00307 0.896375 0.304134 -0.322514 + -0.925669 1.84 -2.09959 0.0886677 0.660748 -0.745352 + -0.903219 1.86146 -2.06977 0.117257 0.633783 -0.764572 + -0.889381 1.90294 -2.04387 0.134329 0.422129 -0.896528 + -0.85084 1.88291 -2.04043 0.394515 0.426646 -0.813837 + -0.939863 1.861 -2.06729 -0.174519 0.730715 -0.659999 + -0.926026 1.90248 -2.04141 -0.198054 0.430141 -0.880769 + -0.924929 1.9648 -2.02233 -0.145931 0.346733 -0.926542 + -0.892353 1.96327 -2.02012 0.220558 0.385362 -0.896019 + -0.853812 1.94323 -2.01666 0.443739 0.460189 -0.768975 + -1.01063 1.83274 -2.08394 -0.39026 0.82766 -0.403332 + -0.978204 1.85524 -2.05445 -0.368115 0.76447 -0.529223 + -0.957905 1.89687 -2.03116 -0.438548 0.465725 -0.768619 + -1.04531 1.81879 -2.05957 -0.59268 0.777709 -0.209522 + -1.01618 1.84657 -2.03436 -0.595286 0.722832 -0.350924 + -0.995883 1.8882 -2.01106 -0.646086 0.509964 -0.5679 + -0.975807 1.94944 -1.98993 -0.766071 0.32879 -0.552297 + -0.956808 1.9592 -2.01208 -0.589911 0.296411 -0.751096 + -1.06679 1.80356 -2.03872 -0.714434 0.694392 0.0860424 + -1.03766 1.83134 -2.0135 -0.796864 0.603949 -0.0159384 + -1.01403 1.8742 -1.9934 -0.8602 0.465125 -0.209081 + -1.09549 1.77946 -2.06302 -0.643207 0.761377 0.0811836 + -1.06837 1.78834 -2.0124 -0.757219 0.570832 0.317442 + -1.0501 1.80483 -1.99789 -0.817893 0.509632 0.267071 + -1.02647 1.84769 -1.9778 -0.882684 0.309897 0.353317 + -1.09708 1.76425 -2.0367 -0.761274 0.548182 0.34635 + -1.06596 1.7651 -1.96907 -0.789962 0.506357 0.345777 + -1.12907 1.73891 -2.06777 -0.889246 0.352855 0.291091 + -1.12418 1.7134 -2.0251 -0.869672 0.365851 0.331397 + -1.09218 1.73874 -1.99404 -0.791561 0.482669 0.374782 + -1.14702 1.68809 -2.10709 -0.988099 0.110558 0.106949 + -1.14066 1.67979 -2.04604 -0.959844 0.190917 0.205548 + -1.11048 1.67767 -1.96451 -0.871971 0.241375 0.425916 + -1.08523 1.7041 -1.93404 -0.82439 0.345556 0.448299 + -1.05901 1.73045 -1.90908 -0.79467 0.37722 0.475611 + -1.14614 1.66593 -2.08223 -0.994723 0.0386123 0.0950579 + -1.14059 1.60047 -2.03354 -0.974829 -0.0492873 0.21744 + -1.12697 1.64406 -1.98544 -0.932018 0.0984178 0.348792 + -1.08672 1.64681 -1.9115 -0.826502 0.118699 0.550277 + -1.06147 1.67324 -1.88104 -0.765794 0.13863 0.627965 + -1.12764 1.56808 -1.99769 -0.964985 -0.0361345 0.259805 + -1.11401 1.61167 -1.94958 -0.894939 0.0504442 0.443328 + -1.05772 1.62163 -1.86933 -0.753993 0.0847421 0.651393 + -1.01885 1.64567 -1.83592 -0.630773 0.126082 0.765655 + -1.11346 1.54151 -1.94398 -0.897603 -0.0242042 0.44014 + -1.08501 1.58649 -1.90741 -0.801013 0.00445237 0.59863 + -1.03918 1.60236 -1.84948 -0.646277 -0.109597 0.755192 + -1.12231 1.48799 -1.98729 -0.958534 -0.0410942 0.281998 + -1.106 1.4838 -1.94016 -0.787083 -0.19816 0.584152 + -1.08758 1.52264 -1.91138 -0.696611 -0.1574 0.699971 + -1.05913 1.56764 -1.87481 -0.670339 -0.144468 0.727856 + -1.11441 1.4261 -1.97307 -0.832293 -0.237944 0.50067 + -1.06537 1.47382 -1.91368 -0.604304 -0.279018 0.746301 + -1.04694 1.51267 -1.8849 -0.486776 -0.296557 0.821646 + -1.03598 1.56173 -1.86204 -0.448857 -0.302856 0.840718 + -1.01603 1.59645 -1.83673 -0.364481 -0.398658 0.841561 + -1.10104 1.3795 -1.98664 -0.736316 -0.47224 0.48459 + -1.09989 1.41162 -1.9656 -0.648861 -0.346348 0.677512 + -1.05085 1.45934 -1.90621 -0.591681 -0.206393 0.779305 + -1.00846 1.50637 -1.86986 -0.363339 -0.247272 0.898244 + -1.08144 1.34347 -1.99944 -0.612244 -0.705318 0.357328 + -1.04294 1.35016 -1.9651 -0.455384 -0.62214 0.636841 + -1.04907 1.39376 -1.9313 -0.532662 -0.50549 0.678786 + -1.04792 1.42587 -1.91027 -0.575188 -0.282947 0.767528 + -1.00553 1.4729 -1.87392 -0.386326 -0.206374 0.898978 + -1.10092 1.34738 -2.0508 -0.597087 -0.781405 -0.181368 + -1.05999 1.32342 -2.00723 -0.314764 -0.949148 -0.00648119 + -1.02149 1.3301 -1.97289 -0.187316 -0.880038 0.436401 + -1.00874 1.35683 -1.93603 -0.363404 -0.642582 0.674556 + -1.01487 1.40043 -1.90222 -0.40065 -0.450113 0.798046 + -0.976767 1.38693 -1.89556 -0.212181 -0.516547 0.829553 + -0.955031 1.42883 -1.87211 -0.134559 -0.352529 0.926076 + -0.993137 1.44233 -1.87877 -0.309951 -0.286288 0.906625 + -0.992956 1.34349 -1.94269 -0.126707 -0.816649 0.563054 + -0.960983 1.37358 -1.90222 -0.183924 -0.580943 0.792892 + -0.897501 1.43092 -1.87013 0.0120944 -0.367199 0.930064 + -0.921796 1.52442 -1.84221 -0.128176 -0.282323 0.950718 + -0.998746 1.33032 -1.97424 0.0103125 -0.961874 0.273297 + -0.970212 1.3437 -1.94403 -0.122453 -0.856635 0.501181 + -0.948804 1.35617 -1.91136 -0.25078 -0.702371 0.666172 + -0.893374 1.36083 -1.90056 -0.0224523 -0.58474 0.81091 + -0.905553 1.37825 -1.89143 -0.0392813 -0.425965 0.903886 + -0.998363 1.32996 -1.97637 0.113476 -0.989752 -0.0866871 + -0.969109 1.33213 -1.96502 -0.0793471 -0.941174 0.328475 + -0.962097 1.33641 -1.9534 -0.13941 -0.895945 0.421719 + -0.940689 1.34888 -1.92073 -0.143787 -0.858118 0.492908 + -0.954216 1.33504 -1.9559 -0.0982329 -0.912804 0.396409 + -0.909096 1.33982 -1.92908 -0.13624 -0.850832 0.507467 + -0.848994 1.34274 -1.91206 0.121809 -0.651268 0.749007 + -0.805417 1.37274 -1.90596 0.342821 -0.493843 0.79912 + -0.864716 1.32173 -1.94058 -0.0353278 -0.903518 0.427092 + -0.811948 1.33311 -1.94464 0.377319 -0.826003 0.418747 + -0.768371 1.36311 -1.93854 0.560555 -0.661809 0.497782 + -0.797364 1.42541 -1.88466 0.265085 -0.440463 0.857743 + -0.739147 1.43438 -1.90578 0.614423 -0.424512 0.665036 + -0.800958 1.50662 -1.84181 0.164989 -0.388572 0.906527 + -0.864266 1.5265 -1.84023 -0.0492242 -0.327377 0.943611 + -0.742741 1.5156 -1.86294 0.614545 -0.321978 0.720184 + -0.743671 1.58188 -1.83554 0.641008 -0.270021 0.718468 + -0.787413 1.572 -1.81563 0.205742 -0.347698 0.914755 + -0.85072 1.59187 -1.81405 -0.0574968 -0.37744 0.924247 + -0.711199 1.61461 -1.87225 0.935213 -0.109471 0.336739 + -0.708928 1.65471 -1.86548 0.942386 -0.0692211 0.327286 + -0.741793 1.62937 -1.82166 0.655061 -0.159911 0.73846 + -0.785535 1.61948 -1.80175 0.232587 -0.247171 0.940643 + -0.703809 1.72224 -1.90049 0.992577 0.103451 -0.0639395 + -0.711709 1.70214 -1.8583 0.904742 0.0544195 0.422468 + -0.744575 1.67681 -1.81449 0.660655 -0.0312616 0.750038 + -0.780673 1.66025 -1.79405 0.296559 -0.121798 0.947216 + -0.842039 1.62036 -1.79979 -0.0169634 -0.318493 0.947774 + -0.724012 1.78422 -1.92417 0.948119 0.167234 -0.270374 + -0.713326 1.77037 -1.89423 0.98975 0.140091 -0.0277306 + -0.721226 1.75027 -1.85204 0.903527 0.0572023 0.424697 + -0.751963 1.73191 -1.81056 0.672115 -0.0263851 0.739977 + -0.788062 1.71535 -1.79012 0.199623 -0.0654664 0.977683 + -0.736555 1.80077 -1.96229 0.967159 0.133638 -0.216206 + -0.736368 1.83852 -1.93163 0.961441 0.140857 -0.236199 + -0.726314 1.83497 -1.90204 0.945646 0.155665 -0.285521 + -0.715627 1.82111 -1.87211 0.999403 0.0345378 -0.000400484 + -0.725543 1.80598 -1.84147 0.912115 -0.0939597 0.399021 + -0.743814 1.83743 -1.97241 0.723326 0.456486 -0.518093 + -0.736551 1.89566 -1.90307 0.794033 0.364331 -0.486594 + -0.726497 1.89212 -1.87348 0.944126 0.154961 -0.290884 + -0.717133 1.8795 -1.84616 0.999894 0.0117124 -0.00861892 + -0.727049 1.86436 -1.81551 0.857643 -0.161196 0.488327 + -0.761862 1.84348 -1.975 0.351154 0.757904 -0.549792 + -0.749461 1.89927 -1.91012 0.410827 0.60628 -0.680915 + -0.748343 1.96032 -1.86717 0.346225 0.506933 -0.789397 + -0.735433 1.95672 -1.86013 0.72398 0.339969 -0.600228 + -0.725891 1.95057 -1.84504 0.913436 0.168941 -0.370261 + -0.778005 1.84923 -1.98921 0.738713 0.659058 0.141227 + -0.791416 1.85339 -1.94798 -0.189425 0.894161 -0.405703 + -0.792228 1.90588 -1.91082 -0.309004 0.590827 -0.745279 + -0.76751 1.90531 -1.91271 0.131846 0.653479 -0.745374 + -0.76429 1.96284 -1.86876 0.0632462 0.563842 -0.823457 + -0.784655 1.86838 -2.00259 0.829928 0.510829 -0.224218 + -0.828373 1.92925 -1.96297 0.899974 0.332641 0.281773 + -0.807559 1.85914 -1.96219 0.577452 0.640379 0.506423 + -0.818141 1.85194 -1.92974 -0.297812 0.919837 -0.255359 + -0.788611 1.85201 -2.0186 0.615083 0.429164 -0.661431 + -0.849856 1.95961 -2.00064 0.66663 0.488395 -0.563093 + -0.835023 1.94841 -1.97634 0.888805 0.447232 -0.100042 + -0.892646 2.02482 -1.99562 0.302756 0.388906 -0.87011 + -0.87111 2.01902 -1.98352 0.705783 0.361712 -0.609126 + -0.856278 2.00783 -1.95922 0.922003 0.285453 -0.261586 + -0.851627 1.99948 -1.94063 0.980289 0.17805 0.0856201 + -0.832983 1.92248 -1.94618 0.828313 0.154885 0.538431 + -0.925222 2.02636 -1.99782 -0.162053 0.389442 -0.906683 + -0.921799 2.08898 -1.96949 -0.153016 0.451938 -0.878828 + -0.895326 2.08771 -1.96769 0.308953 0.432891 -0.846849 + -0.873791 2.08192 -1.9556 0.725954 0.333154 -0.601663 + -0.948669 2.02264 -1.98866 -0.597721 0.346066 -0.723165 + -0.945246 2.08526 -1.96032 -0.608751 0.38613 -0.693056 + -0.939173 2.14027 -1.93175 -0.59624 0.47166 -0.649642 + -0.921589 2.14313 -1.93873 -0.160704 0.54685 -0.821663 + -0.895116 2.14186 -1.93694 0.317027 0.525182 -0.789733 + -0.967668 2.01288 -1.9665 -0.843969 0.273105 -0.46166 + -0.960694 2.07717 -1.94198 -0.843239 0.292986 -0.450674 + -0.954621 2.13217 -1.91341 -0.835798 0.359526 -0.414949 + -0.976243 2.00544 -1.95092 -0.963318 0.211039 -0.165772 + -0.969269 2.06972 -1.92641 -0.970206 0.185074 -0.156359 + -0.961027 2.12683 -1.90189 -0.961423 0.236467 -0.140529 + -0.944656 2.18136 -1.88442 -0.823786 0.424218 -0.376054 + -0.993954 1.93544 -1.97227 -0.923256 0.334014 -0.189825 + -0.975963 1.99982 -1.93825 -0.953652 0.074504 0.291542 + -0.969034 2.06551 -1.91693 -0.965248 0.022212 0.26039 + -0.960792 2.12263 -1.8924 -0.961549 0.0362511 0.272229 + -0.951062 2.17602 -1.8729 -0.952511 0.289073 -0.0957111 + -0.993675 1.92983 -1.9596 -0.914322 0.188608 0.35839 + -0.981995 1.92345 -1.94256 -0.76866 0.0297373 0.638966 + -0.967909 1.99389 -1.92317 -0.833792 -0.0381279 0.55076 + -0.96098 2.05958 -1.90185 -0.842948 -0.0899276 0.530426 + -0.954734 2.11813 -1.88125 -0.844093 -0.0971345 0.527325 + -1.01479 1.84131 -1.96075 -0.733716 0.382931 0.56127 + -0.972792 1.85284 -1.93957 -0.47498 0.395604 0.786061 + -0.964709 1.91481 -1.92212 -0.601728 -0.124145 0.788994 + -0.950622 1.98525 -1.90273 -0.611008 -0.132087 0.780527 + -0.946914 2.05248 -1.88496 -0.630339 -0.180557 0.755031 + -1.01408 1.83106 -1.94101 -0.402072 0.911785 -0.0835868 + -0.972088 1.84258 -1.91983 -0.0493733 0.97005 -0.237836 + -0.937711 1.85232 -1.92473 -0.310743 0.412287 0.856422 + -0.929628 1.91428 -1.90729 -0.228028 -0.178993 0.95706 + -0.929162 1.98119 -1.89321 -0.226462 -0.213016 0.950441 + -1.02479 1.83536 -1.92346 -0.7718 0.626895 -0.106433 + -0.980764 1.88526 -1.86563 -0.438602 0.762872 -0.475032 + -0.960507 1.89046 -1.87556 -0.113201 0.727348 -0.676868 + -0.925232 1.8928 -1.86607 0.252741 0.618774 -0.743802 + -0.936812 1.84492 -1.91034 0.058177 0.982972 -0.174304 + -1.04769 1.78159 -1.95457 -0.846836 0.445254 0.29089 + -1.03028 1.81533 -1.93018 -0.908675 0.135185 0.395011 + -0.998351 1.88183 -1.83149 -0.95513 0.235038 0.180233 + -0.991474 1.88956 -1.84808 -0.703425 0.640085 -0.309006 + -1.03082 1.77568 -1.89927 -0.852478 0.290877 0.434363 + -1.01341 1.80942 -1.87489 -0.906329 0.0132432 0.422365 + -1.00384 1.8618 -1.83821 -0.92452 0.0180254 0.380707 + -1.03131 1.70976 -1.86119 -0.699678 0.256514 0.666822 + -1.00313 1.75498 -1.85138 -0.737897 0.156586 0.656497 + -0.987221 1.80629 -1.83345 -0.786645 -0.128956 0.603788 + -0.977649 1.85867 -1.79678 -0.790764 -0.239965 0.563125 + -0.988692 1.68218 -1.81608 -0.534021 0.0845056 0.841237 + -0.959144 1.73527 -1.80948 -0.546456 0.0397479 0.836544 + -0.94324 1.78657 -1.79155 -0.577563 -0.223854 0.785055 + -0.94535 1.84504 -1.7678 -0.595817 -0.341886 0.726716 + -0.943913 1.66603 -1.7953 -0.239564 -0.0683772 0.96847 + -0.914365 1.71912 -1.78871 -0.168197 -0.112645 0.979296 + -0.906958 1.77198 -1.77752 -0.190975 -0.25599 0.947627 + -0.960783 1.62859 -1.80535 -0.227515 -0.27877 0.933019 + -0.887647 1.66415 -1.79206 -0.0331019 -0.0842228 0.995897 + -0.870092 1.70105 -1.79431 0.0448651 -0.0469819 0.997888 + -0.862685 1.75391 -1.78312 0.400713 -0.187489 0.896815 + -1.00031 1.62638 -1.81606 -0.378879 0.0463277 0.924286 + -0.976505 1.59867 -1.82601 -0.180738 -0.434372 0.882414 + -0.904516 1.62672 -1.80212 -0.0723308 -0.33345 0.939989 + -0.837177 1.66114 -1.7921 0.00625998 -0.0740852 0.997232 + -0.997493 1.55542 -1.847 -0.275753 -0.329017 0.903166 + -0.913198 1.59822 -1.81636 -0.118441 -0.379362 0.917636 + -0.934186 1.55499 -1.83735 -0.232062 -0.309494 0.92215 + -0.819622 1.69804 -1.79435 -0.0387735 -0.0124649 0.99917 + -0.847077 1.76163 -1.79512 0.402029 0.219578 0.888908 + -0.890218 1.83336 -1.76077 0.479761 -0.214307 0.850824 + -0.909069 1.83044 -1.75378 -0.0338413 -0.37442 0.926642 + -0.783995 1.77461 -1.7851 0.238725 -0.120581 0.963572 + -0.815555 1.75729 -1.78932 -0.208152 -0.0193717 0.977905 + -0.833175 1.76433 -1.79935 -0.247763 0.510755 0.823251 + -0.855159 1.79369 -1.81726 0.695281 0.54204 0.471992 + -0.87461 1.84108 -1.77277 0.786497 -0.0558778 0.615061 + -0.75628 1.78762 -1.79999 0.66541 -0.112653 0.737929 + -0.783561 1.84073 -1.77594 0.200331 -0.173153 0.964306 + -0.800585 1.84202 -1.77801 -0.327447 -0.106802 0.938814 + -0.818206 1.84905 -1.78803 -0.57954 -0.0510728 0.813342 + -0.755847 1.85374 -1.79084 0.611386 -0.19037 0.768092 + -0.753817 1.91743 -1.77039 0.584204 -0.278586 0.762296 + -0.773635 1.91234 -1.76087 0.180416 -0.265426 0.9471 + -0.790659 1.91362 -1.76293 -0.309668 -0.191506 0.93136 + -0.725019 1.92805 -1.79507 0.842438 -0.206819 0.497519 + -0.723834 1.99148 -1.76811 0.833647 -0.213473 0.509374 + -0.745486 1.98371 -1.75005 0.581502 -0.294912 0.75821 + -0.765304 1.97862 -1.74053 0.162009 -0.305813 0.938207 + -0.775719 1.9795 -1.74215 -0.316414 -0.230686 0.920145 + -0.716527 1.93795 -1.81772 0.999876 -0.0118021 0.0103936 + -0.715341 2.00138 -1.79076 0.999976 0.00545464 -0.00425521 + -0.716837 2.05794 -1.76226 0.99738 0.0615047 0.0380841 + -0.722807 2.05105 -1.74667 0.837025 -0.159141 0.523511 + -0.744459 2.04328 -1.72861 0.580613 -0.259033 0.771875 + -0.722661 2.01034 -1.81018 0.910634 0.185386 -0.369294 + -0.724157 2.0669 -1.78166 0.905955 0.242654 -0.346937 + -0.728679 2.11732 -1.75165 0.898159 0.300915 -0.320562 + -0.723833 2.11158 -1.73951 0.990132 0.132257 0.046338 + -0.729803 2.1047 -1.72392 0.82113 -0.108661 0.560301 + -0.732204 2.0165 -1.82526 0.708452 0.339918 -0.618508 + -0.730445 2.07118 -1.79156 0.711197 0.378445 -0.592434 + -0.734966 2.1216 -1.76153 0.694493 0.435892 -0.572431 + -0.734305 2.14794 -1.73562 0.82005 0.543113 -0.180403 + -0.72946 2.1422 -1.72349 0.909871 0.37377 0.180084 + -0.740157 2.01864 -1.82947 0.348781 0.478228 -0.806008 + -0.738398 2.07332 -1.79576 0.336615 0.500332 -0.797721 + -0.739627 2.12288 -1.76388 0.331996 0.53867 -0.774347 + -0.73814 2.15072 -1.74126 0.641562 0.656093 -0.397416 + -0.756103 2.02117 -1.83105 0.063508 0.533867 -0.84318 + -0.749025 2.07478 -1.79672 0.0591768 0.53596 -0.842167 + -0.750255 2.12433 -1.76486 0.0568512 0.563051 -0.824464 + -0.742801 2.152 -1.74362 0.307206 0.74766 -0.588752 + -0.773934 2.02176 -1.82983 -0.232359 0.554955 -0.798771 + -0.766856 2.07537 -1.79551 -0.234625 0.542753 -0.806455 + -0.761515 2.12477 -1.7641 -0.227951 0.558949 -0.797254 + -0.749178 2.1527 -1.74422 0.0699498 0.767372 -0.637375 + -0.745359 2.15596 -1.73553 0.212772 0.96367 -0.161454 + -0.789008 1.96341 -1.86688 -0.258714 0.57469 -0.776401 + -0.807276 1.96045 -1.8583 -0.58624 0.522215 -0.619366 + -0.792203 2.0188 -1.82125 -0.58549 0.521059 -0.621047 + -0.779339 2.07346 -1.78972 -0.581931 0.493149 -0.646653 + -0.818952 1.90443 -1.89258 -0.611658 0.497217 -0.615345 + -0.824707 1.95308 -1.84008 -0.839777 0.421408 -0.342331 + -0.804526 2.01368 -1.80835 -0.832331 0.429817 -0.349976 + -0.791662 2.06835 -1.77682 -0.846286 0.38395 -0.3693 + -0.849933 1.84528 -1.90432 -0.442666 0.896629 0.0102066 + -0.836383 1.89708 -1.87436 -0.836863 0.412073 -0.360355 + -0.831377 1.94503 -1.82226 -0.959859 0.28037 -0.00798095 + -0.811196 2.00563 -1.79054 -0.95888 0.283788 0.00376616 + -0.796166 2.06289 -1.76471 -0.971396 0.235862 -0.0275504 + -0.828463 1.85617 -1.9411 0.457776 0.63637 0.620866 + -0.860255 1.8495 -1.91568 0.25669 0.654807 0.710871 + -0.891764 1.84878 -1.90985 -0.0265467 0.540643 0.840833 + -0.890865 1.84138 -1.89545 0.264813 0.962688 -0.0557235 + -0.868025 1.83181 -1.87504 0.480848 0.868278 0.12198 + -0.859635 1.83394 -1.87879 -0.572641 0.751897 0.326701 + -0.853887 1.91951 -1.92509 0.681865 0.0276575 0.730955 + -0.868325 1.91479 -1.91271 0.436889 -0.0447324 0.898403 + -0.899833 1.91406 -1.90688 0.0856429 -0.115061 0.98966 + -0.856237 1.99271 -1.92384 0.898733 0.0264964 0.437696 + -0.864832 1.98759 -1.91067 0.763181 -0.0754142 0.641769 + -0.879269 1.98287 -1.89829 0.472665 -0.168787 0.864927 + -0.899367 1.98098 -1.89281 0.133559 -0.226189 0.964884 + -0.857158 2.06436 -1.91706 0.995708 0.0793665 0.0476076 + -0.860908 2.05907 -1.90378 0.918178 -0.0545638 0.392392 + -0.869502 2.05395 -1.89061 0.772328 -0.142413 0.619055 + -0.880929 2.05021 -1.88067 0.495327 -0.225271 0.83899 + -0.901027 2.04832 -1.87518 0.132524 -0.270489 0.953558 + -0.861808 2.0727 -1.93566 0.931351 0.210518 -0.2971 + -0.867014 2.12826 -1.90784 0.927464 0.263012 -0.265772 + -0.863574 2.12212 -1.8939 0.991933 0.113423 0.0566146 + -0.867324 2.11682 -1.88062 0.916317 -0.0513061 0.397153 + -0.87367 2.11305 -1.87094 0.77529 -0.154392 0.612444 + -0.878996 2.13748 -1.92777 0.715735 0.41222 -0.563736 + -0.883524 2.18432 -1.89326 0.719656 0.474219 -0.50716 + -0.875746 2.17829 -1.88002 0.917037 0.323776 -0.232834 + -0.872306 2.17216 -1.86609 0.983122 0.156257 0.0951539 + -0.874821 2.1688 -1.85752 0.909935 -0.0128292 0.414553 + -0.899644 2.1887 -1.90242 0.303733 0.602417 -0.738133 + -0.899835 2.21595 -1.87905 0.29912 0.768633 -0.565447 + -0.889857 2.21324 -1.87334 0.648607 0.66545 -0.369439 + -0.882079 2.20722 -1.8601 0.845047 0.525506 -0.0986827 + -0.879976 2.2035 -1.85141 0.900993 0.392586 0.184629 + -0.916994 2.18952 -1.9036 -0.145667 0.624458 -0.767355 + -0.917186 2.21677 -1.88024 -0.148733 0.79045 -0.594195 + -0.913686 2.22178 -1.86936 -0.0757237 0.959204 -0.272385 + -0.904212 2.22133 -1.86872 0.199324 0.946208 -0.254874 + -0.894234 2.21862 -1.86301 0.491371 0.869143 -0.0560893 + -0.934578 2.18666 -1.89663 -0.60088 0.537352 -0.591773 + -0.92809 2.21496 -1.87591 -0.531203 0.721473 -0.444186 + -0.92459 2.21998 -1.86504 -0.401493 0.908865 -0.11299 + -0.91427 2.22287 -1.85953 -0.0943551 0.987527 0.126045 + -0.904796 2.22242 -1.85888 0.167034 0.975496 0.143206 + -0.938168 2.20966 -1.86371 -0.751742 0.617742 -0.23082 + -0.930047 2.21705 -1.85831 -0.508322 0.860752 0.0267324 + -0.919726 2.21994 -1.85279 -0.199258 0.93073 0.306655 + -0.900609 2.2191 -1.8516 0.24828 0.911126 0.328947 + -0.890047 2.21531 -1.85573 0.581041 0.804545 0.122876 + -0.942085 2.20654 -1.85644 -0.861492 0.507481 0.0171726 + -0.933964 2.21393 -1.85105 -0.563602 0.794978 0.224414 + -0.919546 2.21771 -1.84761 -0.154374 0.905053 0.396292 + -0.900429 2.21687 -1.84642 0.225836 0.89461 0.385579 + -0.887945 2.21159 -1.84705 0.606595 0.726205 0.323526 + -0.950847 2.17345 -1.86696 -0.952334 0.078585 0.294762 + -0.941871 2.20398 -1.85051 -0.864557 0.320035 0.387451 + -0.933822 2.2126 -1.84796 -0.559385 0.693128 0.454601 + -0.919404 2.21638 -1.84453 -0.161879 0.912198 0.376417 + -0.944789 2.16896 -1.85581 -0.837255 -0.0691901 0.542417 + -0.938143 2.20116 -1.84379 -0.771091 0.19883 0.604885 + -0.930094 2.20979 -1.84125 -0.532186 0.60023 0.597078 + -0.940668 2.11102 -1.86436 -0.628058 -0.206575 0.750247 + -0.935579 2.16434 -1.84469 -0.631606 -0.184478 0.753021 + -0.928933 2.19654 -1.83267 -0.57054 0.0866882 0.816682 + -0.925103 2.20724 -1.83516 -0.44788 0.487353 0.749593 + -0.920719 2.2149 -1.84083 -0.294218 0.865521 0.405351 + -0.924527 2.10799 -1.85717 -0.233295 -0.298719 0.925387 + -0.919437 2.16131 -1.8375 -0.219988 -0.290115 0.931364 + -0.918901 2.19468 -1.82816 -0.221872 0.0014846 0.975074 + -0.915071 2.20537 -1.83064 -0.141283 0.377201 0.915292 + -0.915728 2.21235 -1.83474 -0.144588 0.722509 0.676073 + -0.925454 2.04843 -1.87543 -0.224325 -0.259764 0.939256 + -0.9001 2.10789 -1.85691 0.138099 -0.312533 0.939815 + -0.903484 2.16126 -1.83738 0.131391 -0.302029 0.944201 + -0.902948 2.19464 -1.82803 0.135924 -0.00864692 0.990682 + -0.906382 2.20538 -1.83059 0.089429 0.38116 0.920173 + -0.885096 2.10931 -1.861 0.492325 -0.257347 0.831498 + -0.888481 2.16268 -1.84146 0.494971 -0.237133 0.835926 + -0.893706 2.19554 -1.83051 0.451474 0.0490219 0.890937 + -0.89714 2.20628 -1.83307 0.352343 0.484708 0.80057 + -0.881167 2.16503 -1.84784 0.768296 -0.127721 0.627223 + -0.886392 2.19788 -1.83688 0.715913 0.154928 0.680784 + -0.893239 2.20754 -1.8365 0.49748 0.577045 0.647713 + -0.903138 2.21362 -1.83813 0.220427 0.843785 0.489325 + -0.907039 2.21236 -1.8347 0.096214 0.748224 0.656433 + -0.882491 2.20014 -1.84284 0.835106 0.247086 0.491473 + -0.889338 2.20981 -1.84245 0.563963 0.650341 0.508924 + -0.901823 2.2151 -1.84183 0.202977 0.883083 0.423042 + -0.898077 1.8886 -1.8564 0.518111 0.556197 -0.649774 + -0.875236 1.87903 -1.83599 0.846299 0.387714 -0.365316 + -0.92575 1.94566 -1.82462 0.171458 0.593205 -0.786581 + -0.898595 1.94146 -1.81495 0.542702 0.516385 -0.662435 + -0.883017 1.93465 -1.80089 0.847656 0.360433 -0.389317 + -0.868018 1.8683 -1.81446 0.971283 0.213673 -0.104658 + -0.947222 1.9451 -1.82456 -0.227698 0.618468 -0.752098 + -0.926855 2.00147 -1.78457 0.173959 0.564206 -0.8071 + -0.904837 1.99813 -1.77673 0.537006 0.499941 -0.679473 + -0.889259 1.99131 -1.76266 0.854599 0.344783 -0.38831 + -0.875799 1.92392 -1.77936 0.98336 0.176696 -0.0422115 + -0.967479 1.93991 -1.81463 -0.59938 0.549396 -0.582158 + -0.964441 1.99668 -1.77653 -0.612914 0.458499 -0.643518 + -0.948327 2.00093 -1.78451 -0.264128 0.550108 -0.792223 + -0.929849 2.05409 -1.74962 0.168641 0.545752 -0.820801 + -0.907831 2.05075 -1.74177 0.544322 0.479941 -0.688019 + -0.979742 1.93388 -1.803 -0.82864 0.422735 -0.366948 + -0.976704 1.99065 -1.76489 -0.840179 0.333522 -0.427624 + -0.971109 2.04514 -1.73312 -0.833151 0.349815 -0.428356 + -0.961994 2.04944 -1.74159 -0.611665 0.45846 -0.644733 + -0.94588 2.05369 -1.74957 -0.258507 0.539275 -0.801471 + -0.986619 1.92615 -1.78642 -0.990239 0.0496371 0.130245 + -0.982223 1.9849 -1.75249 -0.996053 0.0474061 0.0750426 + -0.976628 2.03938 -1.72072 -0.991546 0.0751098 0.105804 + -0.967821 2.09275 -1.6951 -0.984165 0.139841 0.108922 + -0.964161 2.09645 -1.70299 -0.825811 0.386307 -0.410856 + -0.974871 1.91696 -1.76556 -0.80809 -0.248648 0.534008 + -0.970475 1.97571 -1.73163 -0.803979 -0.234041 0.546665 + -0.967581 2.03238 -1.70531 -0.80249 -0.182964 0.567921 + -0.942573 1.90333 -1.73659 -0.575579 -0.362017 0.733247 + -0.943649 1.96439 -1.70755 -0.581096 -0.3389 0.739915 + -0.940755 2.02107 -1.68121 -0.577969 -0.280643 0.766284 + -0.94082 2.07818 -1.66356 -0.583374 -0.22183 0.781324 + -0.958773 2.08575 -1.67969 -0.792195 -0.133038 0.59559 + -0.919433 1.89794 -1.72668 -0.0542489 -0.408274 0.911246 + -0.92051 1.959 -1.69764 -0.0193238 -0.407389 0.91305 + -0.923508 2.01709 -1.67346 -0.0343958 -0.340261 0.939702 + -0.900583 1.90086 -1.73367 0.534187 -0.289061 0.79441 + -0.906322 1.96132 -1.70327 0.542863 -0.31848 0.777091 + -0.90932 2.01941 -1.6791 0.551249 -0.263009 0.791802 + -0.914512 2.0758 -1.65953 0.549208 -0.200559 0.811262 + -0.923574 2.07421 -1.65581 -0.0139618 -0.270927 0.962499 + -0.887602 1.90638 -1.74452 0.78684 -0.161921 0.595537 + -0.893341 1.96685 -1.71412 0.78975 -0.200115 0.57987 + -0.899932 2.02347 -1.68723 0.788215 -0.162624 0.593524 + -0.877244 1.91512 -1.76182 0.952226 0.00601591 0.305335 + -0.885018 1.97388 -1.72792 0.953755 -0.0384077 0.298121 + -0.891609 2.03049 -1.70102 0.951921 -0.0154722 0.305951 + -0.899657 2.08452 -1.67669 0.944719 0.0220269 0.327141 + -0.905124 2.07985 -1.66766 0.786176 -0.108657 0.608376 + -0.864252 1.84981 -1.79008 0.966876 0.0489869 0.250502 + -0.883573 1.98269 -1.74545 0.987444 0.152307 -0.0419132 + -0.890487 2.03708 -1.71403 0.987584 0.1536 -0.0329262 + -0.858926 1.81218 -1.84164 0.664845 0.675499 0.318875 + -0.841258 1.79639 -1.82149 -0.61065 0.425129 0.66811 + -0.850536 1.81431 -1.84539 -0.607895 0.5645 0.558393 + -0.834888 1.8565 -1.80171 -0.826924 -0.00906901 0.562241 + -0.844166 1.87442 -1.82561 -0.962704 0.0740148 0.260237 + -0.846085 1.88573 -1.84883 -0.973236 0.229664 -0.00818601 + -0.804706 1.91816 -1.76949 -0.561861 -0.120121 0.818464 + -0.821388 1.92561 -1.78316 -0.789027 -0.0112169 0.614255 + -0.829458 1.93372 -1.79905 -0.936361 0.121828 0.32922 + -0.789766 1.98404 -1.74871 -0.561475 -0.147216 0.814293 + -0.801708 1.9894 -1.75827 -0.777055 -0.03013 0.628711 + -0.809777 1.99751 -1.77415 -0.934908 0.128643 0.330754 + -0.794748 2.05477 -1.74833 -0.945186 0.0750444 0.317791 + -0.777267 2.04384 -1.72806 -0.571272 -0.174297 0.80204 + -0.789209 2.04921 -1.73761 -0.787247 -0.069725 0.612683 + -0.779755 2.10356 -1.71724 -0.783138 -0.0685071 0.618063 + -0.785294 2.10913 -1.72796 -0.948193 0.0738797 0.308985 + -0.78617 2.11424 -1.73815 -0.973798 0.226272 -0.0227727 + -0.768143 2.0409 -1.72353 -0.332436 -0.23951 0.912207 + -0.763122 2.09719 -1.70674 -0.340436 -0.212928 0.915841 + -0.772245 2.10013 -1.71128 -0.573704 -0.159394 0.803404 + -0.766734 2.1336 -1.70203 -0.508138 0.111972 0.853966 + -0.774245 2.13703 -1.70799 -0.708054 0.190319 0.680028 + -0.757729 2.04002 -1.72191 0.178542 -0.291066 0.939895 + -0.757071 2.09656 -1.70567 0.150243 -0.246523 0.95742 + -0.75523 2.13133 -1.69808 0.152532 0.0355986 0.987657 + -0.761281 2.13195 -1.69915 -0.310536 0.0692003 0.948039 + -0.743801 2.09981 -1.71239 0.579289 -0.207903 0.788163 + -0.74713 2.13302 -1.70226 0.527554 0.0640502 0.847103 + -0.755835 2.14043 -1.70129 0.0990452 0.516459 0.850565 + -0.759235 2.14083 -1.70197 -0.171923 0.532972 0.828482 + -0.764689 2.14247 -1.70485 -0.328024 0.515329 0.79173 + -0.733132 2.13791 -1.7138 0.77269 0.169625 0.6117 + -0.739654 2.14489 -1.71206 0.539825 0.511604 0.668469 + -0.747735 2.14211 -1.70547 0.367001 0.499715 0.784598 + -0.754787 2.14898 -1.7107 0.0287611 0.813766 0.58048 + -0.735982 2.14919 -1.72174 0.660969 0.69888 0.273288 + -0.741885 2.15134 -1.71689 0.366379 0.80411 0.468159 + -0.749965 2.14857 -1.71031 0.121882 0.75127 0.648644 + -0.738873 2.15246 -1.72863 0.591972 0.802438 0.0752545 + -0.744775 2.15462 -1.72378 0.250857 0.930569 0.26667 + -0.747427 2.15531 -1.72503 0.102425 0.964875 0.241921 + -0.752249 2.15573 -1.72543 0.0567275 0.966348 0.250906 + -0.742707 2.15526 -1.73428 0.426068 0.902384 -0.0645667 + -0.751736 2.15664 -1.73613 0.064452 0.980341 -0.186489 + -0.758081 2.15687 -1.73569 -0.0867116 0.979051 -0.184228 + -0.758594 2.15595 -1.72499 0.0179766 0.970601 0.240022 + -0.760438 2.15313 -1.74346 -0.200144 0.761241 -0.616809 + -0.768046 2.15199 -1.74006 -0.515642 0.704922 -0.487029 + -0.765689 2.15572 -1.73229 -0.331076 0.93559 -0.122717 + -0.762939 2.15581 -1.72408 -0.0825165 0.974132 0.210374 + -0.758188 2.14939 -1.71139 0.0361829 0.838524 0.543662 + -0.773998 2.12286 -1.75831 -0.590362 0.494304 -0.638073 + -0.781665 2.11969 -1.75026 -0.844155 0.382533 -0.375594 + -0.775713 2.14882 -1.73203 -0.773952 0.592416 -0.2237 + -0.769972 2.15396 -1.7278 -0.517527 0.85566 0.00334636 + -0.778422 2.14553 -1.72462 -0.884606 0.458474 0.0852825 + -0.772681 2.15067 -1.72039 -0.6473 0.715473 0.262872 + -0.767222 2.15404 -1.71959 -0.264127 0.903473 0.337598 + -0.766757 2.15118 -1.71388 -0.249765 0.81174 0.527917 + -0.762532 2.14923 -1.71048 -0.0513883 0.783867 0.618798 + -0.777547 2.14042 -1.71443 -0.85531 0.30921 0.415733 + -0.772216 2.14781 -1.71469 -0.625173 0.616445 0.478701 + -0.768914 2.14442 -1.70824 -0.461629 0.545008 0.699903 + -0.896173 2.04571 -1.73124 0.852378 0.33821 -0.39883 + -0.902247 2.09678 -1.70099 0.853588 0.353568 -0.382593 + -0.898535 2.0911 -1.6897 0.982411 0.18483 -0.0265714 + -0.913905 2.10183 -1.71152 0.534685 0.493855 -0.685725 + -0.915885 2.1311 -1.69088 0.512512 0.679784 -0.524619 + -0.908567 2.12793 -1.68416 0.789026 0.558116 -0.256796 + -0.904856 2.12225 -1.67287 0.914534 0.39122 0.102834 + -0.928436 2.10401 -1.71672 0.17659 0.556279 -0.812016 + -0.930417 2.13328 -1.69608 0.143695 0.746448 -0.649743 + -0.928869 2.13787 -1.6866 0.130476 0.937204 -0.323457 + -0.920691 2.13664 -1.68365 0.369071 0.896298 -0.245837 + -0.913373 2.13348 -1.67694 0.594563 0.803065 0.0397582 + -0.944467 2.1036 -1.71668 -0.265249 0.55625 -0.787546 + -0.940495 2.13301 -1.69609 -0.238828 0.748553 -0.61857 + -0.938947 2.1376 -1.68661 -0.203807 0.950276 -0.235453 + -0.930782 2.13926 -1.67936 -0.00554265 0.994069 0.108607 + -0.922603 2.13803 -1.67642 0.21954 0.957616 0.18648 + -0.955045 2.10075 -1.71145 -0.603677 0.485447 -0.632388 + -0.951073 2.13016 -1.69085 -0.558143 0.689945 -0.460926 + -0.944925 2.13601 -1.68367 -0.388554 0.915155 -0.107322 + -0.93676 2.13768 -1.67643 -0.167905 0.95056 0.261235 + -0.920523 2.13485 -1.67008 0.222289 0.894467 0.387965 + -0.956856 2.1275 -1.68586 -0.747685 0.606096 -0.271319 + -0.950708 2.13335 -1.67869 -0.505349 0.861755 0.0447305 + -0.941192 2.13458 -1.67025 -0.18028 0.922367 0.34167 + -0.935932 2.13522 -1.67151 -0.00962236 0.895916 0.44412 + -0.960516 2.1238 -1.67797 -0.903379 0.365592 0.224163 + -0.952845 2.13125 -1.67428 -0.622023 0.705203 0.340259 + -0.943329 2.13249 -1.66584 -0.33745 0.772634 0.53774 + -0.933078 2.12816 -1.65663 -0.149264 0.699564 0.698806 + -0.928012 2.12912 -1.65881 0.066609 0.816345 0.573711 + -0.954746 2.11933 -1.66807 -0.752944 0.118138 0.647394 + -0.947075 2.12678 -1.66438 -0.588024 0.406755 0.699127 + -0.936824 2.12246 -1.65517 -0.45541 0.349474 0.818822 + -0.92593 2.12005 -1.65015 0.0135759 0.440806 0.897499 + -0.936793 2.11176 -1.65195 -0.528903 0.0184661 0.848481 + -0.925899 2.10935 -1.64693 -0.0298801 -0.00698216 0.999529 + -0.916837 2.11094 -1.65066 0.515214 0.0619137 0.854822 + -0.920864 2.121 -1.65233 0.34043 0.495817 0.79892 + -0.922753 2.12975 -1.66006 0.159706 0.786187 0.596996 + -0.919695 2.13239 -1.66517 0.249706 0.844514 0.473754 + -0.911034 2.11345 -1.65579 0.719545 0.133633 0.681467 + -0.915061 2.12352 -1.65745 0.509886 0.52847 0.678775 + -0.912004 2.12616 -1.66256 0.611037 0.59839 0.518231 + -0.911292 2.13029 -1.6706 0.652367 0.709064 0.267667 + -0.905567 2.11812 -1.66483 0.875649 0.252918 0.411426 + 1.04961 1.36119 -2.08699 -0.131768 -0.902901 -0.409154 + 1.04271 1.37679 -2.1176 -0.250658 -0.939358 -0.234046 + 1.08487 1.3765 -2.12848 0.533065 -0.771504 -0.347309 + 0.976448 1.39491 -2.1025 -0.287715 -0.931588 -0.222181 + 1.03001 1.38062 -2.12265 -0.242302 -0.967651 0.0702951 + 1.06181 1.37216 -2.13123 -0.22663 -0.973001 0.0436826 + 1.07451 1.36833 -2.12618 0.16456 -0.954374 -0.249179 + 1.09355 1.37119 -2.09712 0.46366 -0.80056 -0.379636 + 1.05697 1.33738 -2.04067 -0.0863122 -0.907604 -0.410859 + 0.995344 1.34393 -2.00981 -0.275708 -0.879949 -0.386879 + 0.983343 1.37932 -2.07189 -0.295348 -0.865756 -0.404025 + 1.1117 1.39962 -2.10918 0.894676 -0.351076 -0.276225 + 1.10092 1.34738 -2.0508 0.601411 -0.777036 -0.185796 + 1.05999 1.32342 -2.00723 0.20829 -0.974853 0.0792307 + 0.998363 1.32996 -1.97637 -0.128317 -0.9871 -0.0957466 + 0.961258 1.34933 -1.99936 -0.052712 -0.881542 -0.469153 + 1.10301 1.40494 -2.14053 0.848584 -0.463426 -0.255227 + 1.12189 1.4465 -2.09138 0.981421 -0.174417 -0.0799454 + 1.12052 1.38342 -2.03799 0.931466 -0.358136 0.0641006 + 1.10104 1.3795 -1.98664 0.776029 -0.415731 0.474285 + 1.08144 1.34347 -1.99944 0.627897 -0.648194 0.430801 + 1.08236 1.37812 -2.13585 0.564459 -0.731405 -0.382665 + 1.078 1.38547 -2.16349 0.54335 -0.80397 -0.241668 + 1.09865 1.4123 -2.16816 0.835809 -0.506503 -0.211843 + 1.1238 1.4619 -2.14593 0.95782 -0.27263 -0.0908475 + 1.072 1.36994 -2.13355 0.190886 -0.904042 -0.382455 + 1.03997 1.37308 -2.15319 0.0163271 -0.999835 0.00795208 + 1.05482 1.38207 -2.20798 0.451542 -0.858432 -0.243319 + 1.0973 1.42511 -2.21268 0.803472 -0.541293 -0.24786 + 1.12245 1.47471 -2.19044 0.935144 -0.336898 -0.10957 + 1.02978 1.37531 -2.15087 -0.183818 -0.967505 0.173624 + 1.01679 1.36969 -2.19769 -0.00580261 -0.991659 -0.128757 + 1.04752 1.38995 -2.23971 0.323173 -0.811759 -0.486421 + 1.09001 1.43298 -2.24439 0.74219 -0.521644 -0.420764 + 1.11068 1.47223 -2.24293 0.844709 -0.298068 -0.444548 + 1.01155 1.38294 -2.1313 -0.197945 -0.957816 0.208344 + 0.958305 1.38611 -2.16114 -0.236594 -0.966147 0.102877 + 0.928203 1.39501 -2.17716 -0.334852 -0.935599 -0.111925 + 0.986688 1.37858 -2.21372 -0.246594 -0.923243 -0.294642 + 1.0136 1.39205 -2.2446 -0.0996887 -0.773555 -0.62584 + 0.973508 1.39608 -2.10977 -0.238834 -0.96828 0.0734327 + 0.955048 1.39841 -2.11842 -0.172716 -0.955008 0.241098 + 0.940077 1.39375 -2.14157 -0.191601 -0.966244 0.172228 + 0.903603 1.40282 -2.17041 -0.0885365 -0.967359 -0.237438 + 0.920522 1.4091 -2.21389 -0.378917 -0.845978 -0.375157 + 0.943567 1.40308 -2.09509 -0.0862686 -0.945055 -0.315323 + 0.940627 1.40425 -2.10236 -0.0119251 -0.999809 0.0154635 + 0.930671 1.40194 -2.11612 0.0881901 -0.988164 0.125516 + 0.915701 1.39729 -2.13927 0.0471119 -0.998054 -0.0408384 + 0.949257 1.38472 -2.06144 -0.055475 -0.878471 -0.474565 + 0.941563 1.38446 -2.06353 0.387593 -0.780663 -0.490242 + 0.935873 1.40281 -2.09718 0.418348 -0.846774 -0.32857 + 0.925917 1.4005 -2.11096 0.473359 -0.856025 -0.207731 + 0.95376 1.34832 -1.99973 0.326307 -0.834517 -0.443965 + 0.926763 1.33242 -2.00984 0.502812 -0.809181 -0.303985 + 0.914566 1.36855 -2.07365 0.611121 -0.669775 -0.421821 + 0.903042 1.38081 -2.11155 0.647879 -0.671728 -0.359214 + 0.961228 1.33076 -1.96753 -0.231518 -0.965319 -0.120657 + 0.954216 1.33504 -1.9559 0.0567867 -0.973061 0.223446 + 0.922622 1.32598 -1.96426 0.265338 -0.949518 0.167367 + 0.869015 1.31044 -2.04502 0.203827 -0.946168 -0.251438 + 0.968726 1.33177 -1.96715 0.0193318 -0.990625 -0.135232 + 0.969109 1.33213 -1.96502 0.0525341 -0.955666 0.289728 + 0.962097 1.33641 -1.9534 0.105094 -0.897294 0.428742 + 0.940689 1.34888 -1.92073 0.130125 -0.851872 0.507328 + 0.909096 1.33982 -1.92908 0.149481 -0.834531 0.530296 + 0.998746 1.33032 -1.97424 -0.00829376 -0.962241 0.272072 + 0.970212 1.3437 -1.94403 0.089345 -0.898757 0.429248 + 0.948804 1.35617 -1.91136 0.175166 -0.708052 0.68409 + 0.893374 1.36083 -1.90056 0.0448855 -0.599964 0.798767 + 0.864716 1.32173 -1.94058 0.0047596 -0.896294 0.443434 + 1.02149 1.3301 -1.97289 0.187403 -0.875971 0.444471 + 0.992956 1.34349 -1.94269 0.16134 -0.821775 0.546494 + 0.960983 1.37358 -1.90222 0.191438 -0.565118 0.802492 + 0.905553 1.37825 -1.89143 0.0205218 -0.444223 0.895681 + 0.848994 1.34274 -1.91206 -0.123856 -0.657224 0.743449 + 1.04294 1.35016 -1.9651 0.438506 -0.631287 0.639679 + 1.00874 1.35683 -1.93603 0.364965 -0.651724 0.664873 + 0.976767 1.38693 -1.89556 0.215561 -0.517039 0.828374 + 0.955031 1.42883 -1.87211 0.152066 -0.332594 0.93073 + 1.04907 1.39376 -1.9313 0.520519 -0.487289 0.701148 + 1.01487 1.40043 -1.90222 0.450038 -0.412157 0.792208 + 0.993137 1.44233 -1.87877 0.29903 -0.286766 0.910135 + 1.09989 1.41162 -1.9656 0.717945 -0.359919 0.595829 + 1.04792 1.42587 -1.91027 0.446156 -0.373659 0.813218 + 1.00553 1.4729 -1.87392 0.392448 -0.225212 0.891776 + 0.921796 1.52442 -1.84221 0.0999696 -0.232572 0.967428 + 1.13071 1.43029 -2.0202 0.989073 -0.102223 0.106236 + 1.11441 1.4261 -1.97307 0.825519 -0.358387 0.435977 + 1.05085 1.45934 -1.90621 0.593301 -0.167812 0.787295 + 1.00846 1.50637 -1.86986 0.580374 -0.226143 0.782321 + 1.12231 1.48799 -1.98729 0.967294 -0.0513573 0.248405 + 1.106 1.4838 -1.94016 0.818237 -0.0995733 0.566192 + 1.06537 1.47382 -1.91368 0.574682 -0.272768 0.771582 + 1.04694 1.51267 -1.8849 0.47682 -0.326702 0.816032 + 0.997493 1.55542 -1.847 0.271337 -0.334732 0.902403 + 1.13649 1.51456 -2.04099 0.983587 -0.142519 0.110659 + 1.12764 1.56808 -1.99769 0.952457 -0.0314376 0.303048 + 1.11346 1.54151 -1.94398 0.897598 -0.00508183 0.440786 + 1.08758 1.52264 -1.91138 0.716932 -0.166609 0.676941 + 1.03598 1.56173 -1.86204 0.467024 -0.312896 0.827034 + 1.1384 1.52996 -2.09554 0.985516 -0.168419 0.0198111 + 1.14059 1.60047 -2.03354 0.976671 -0.0318639 0.212362 + 1.11401 1.61167 -1.94958 0.891091 -0.0355853 0.452428 + 1.08501 1.58649 -1.90741 0.824324 -0.00211003 0.566115 + 1.05913 1.56764 -1.87481 0.663177 -0.174442 0.727851 + 1.1412 1.532 -2.156 0.970231 -0.241954 0.0105141 + 1.14887 1.58865 -2.13019 0.997047 -0.071887 0.0270195 + 1.14607 1.58662 -2.06973 0.984424 -0.110699 0.136586 + 1.14066 1.67979 -2.04604 0.965172 0.162581 0.204963 + 1.12697 1.64406 -1.98544 0.933678 0.097892 0.344475 + 1.12601 1.49299 -2.22076 0.922224 -0.292944 -0.252363 + 1.14477 1.55028 -2.18632 0.982319 -0.180492 -0.0497236 + 1.14975 1.61081 -2.15505 0.999523 -0.0288958 0.0108836 + 1.14614 1.66593 -2.08223 0.991982 0.0749081 0.101791 + 1.14556 1.56771 -2.21169 0.899218 0.0634379 -0.432878 + 1.15054 1.62825 -2.18043 0.941677 0.144045 -0.30413 + 1.14702 1.68809 -2.10709 0.987258 0.107658 0.117178 + 1.12907 1.73891 -2.06777 0.877959 0.386478 0.282528 + 1.12418 1.7134 -2.0251 0.855721 0.369959 0.361762 + 1.13023 1.54695 -2.23386 0.737889 0.0181865 -0.674677 + 1.13472 1.63559 -2.19829 0.534063 0.397288 -0.746284 + 1.14784 1.70525 -2.13236 0.930519 0.309847 -0.195269 + 1.12989 1.75606 -2.09305 0.79998 0.599973 0.00799541 + 1.08355 1.46722 -2.27512 0.49076 -0.106603 -0.864749 + 1.0787 1.49585 -2.27286 0.228593 0.23567 -0.944566 + 1.12538 1.57558 -2.23162 0.527381 0.300771 -0.794611 + 1.06288 1.42796 -2.27657 0.387442 -0.455687 -0.801398 + 1.02895 1.43006 -2.28148 -0.0718649 -0.335529 -0.939285 + 1.03233 1.48352 -2.27793 -0.0574481 0.196585 -0.978802 + 1.09129 1.58679 -2.23392 0.0858916 0.436199 -0.895742 + 1.10063 1.64679 -2.2006 0.157825 0.492696 -0.85577 + 0.954314 1.44138 -2.26401 -0.264294 -0.290317 -0.919709 + 0.95769 1.49484 -2.26045 -0.220935 0.189697 -0.956662 + 0.983508 1.56755 -2.24452 -0.125779 0.370253 -0.920376 + 1.04491 1.57445 -2.23899 0.0250319 0.401769 -0.915399 + 0.986422 1.38955 -2.23237 -0.266731 -0.759487 -0.593324 + 0.927139 1.43888 -2.25177 -0.278707 -0.624851 -0.729304 + 0.902475 1.44951 -2.25152 -0.307582 -0.287589 -0.90702 + 0.886486 1.45631 -2.24676 -0.451423 -0.138814 -0.881446 + 0.899092 1.49376 -2.24544 -0.364987 0.230434 -0.902045 + 0.920256 1.42007 -2.23255 -0.331344 -0.728773 -0.599251 + 0.895592 1.4307 -2.23229 -0.261028 -0.749166 -0.608781 + 0.887581 1.43198 -2.23119 -0.350441 -0.71197 -0.608514 + 0.895922 1.41692 -2.20714 -0.271922 -0.878812 -0.392106 + 0.887911 1.4182 -2.20603 -0.0235074 -0.849692 -0.526755 + 0.871592 1.43878 -2.22644 -0.360939 -0.50584 -0.783485 + 0.848608 1.46705 -2.22149 -0.631461 0.0930117 -0.769809 + 0.861214 1.50451 -2.22016 -0.501608 0.260556 -0.824924 + 0.896651 1.40107 -2.16767 0.250692 -0.885279 -0.391707 + 0.87123 1.41119 -2.20415 0.132127 -0.714936 -0.686592 + 0.848054 1.43546 -2.2199 -0.426623 -0.310922 -0.849306 + 0.828642 1.45837 -2.20087 -0.697863 -0.0299321 -0.715606 + 0.908748 1.39554 -2.13654 0.451296 -0.861089 -0.234217 + 0.885873 1.37584 -2.13714 0.60735 -0.672591 -0.422785 + 0.87997 1.39407 -2.16579 0.433408 -0.748956 -0.50122 + 0.849827 1.37393 -2.17447 0.00936951 -0.75254 -0.65848 + 0.847692 1.40788 -2.19762 -0.303254 -0.567248 -0.765681 + 0.855708 1.33141 -2.11817 0.165908 -0.852228 -0.496168 + 0.85573 1.3557 -2.14582 0.178927 -0.766808 -0.616433 + 0.867232 1.31915 -2.08026 0.304715 -0.901031 -0.308695 + 0.805212 1.33538 -2.08529 -0.534241 -0.772149 -0.344053 + 0.820131 1.35095 -2.12545 -0.514085 -0.672283 -0.532684 + 0.820154 1.37524 -2.1531 -0.597739 -0.559523 -0.574145 + 0.830224 1.39283 -2.17614 -0.624861 -0.447197 -0.639971 + 0.806994 1.32668 -2.05006 -0.452102 -0.873865 -0.178784 + 0.734565 1.38336 -2.02192 -0.851573 -0.466162 -0.239826 + 0.762071 1.40805 -2.09246 -0.841218 -0.317852 -0.437405 + 0.77699 1.42361 -2.13262 -0.786059 -0.231106 -0.573325 + 0.812106 1.3154 -2.0035 -0.407687 -0.912606 0.0306993 + 0.739676 1.37208 -1.97537 -0.764618 -0.62717 0.148381 + 0.710452 1.44335 -1.94262 -0.930888 -0.275506 0.239881 + 0.710439 1.46348 -1.99338 -0.975935 -0.0621682 -0.209013 + 0.737945 1.48817 -2.06393 -0.919145 0.0581182 -0.389608 + 0.864873 1.304 -1.99944 0.0540454 -0.997151 0.0526146 + 0.811948 1.33311 -1.94464 -0.373796 -0.826429 0.42106 + 0.768371 1.36311 -1.93854 -0.56393 -0.669294 0.483765 + 0.739147 1.43438 -1.90578 -0.620506 -0.418801 0.663007 + 0.805417 1.37274 -1.90596 -0.306034 -0.517645 0.798991 + 0.797364 1.42541 -1.88466 -0.231579 -0.402922 0.885452 + 0.742741 1.5156 -1.86294 -0.617854 -0.326273 0.715403 + 0.710269 1.54832 -1.89964 -0.953683 -0.108947 0.280392 + 0.710255 1.56845 -1.95041 -0.975956 0.087641 -0.199573 + 0.897501 1.43092 -1.87013 -0.0429599 -0.343876 0.938032 + 0.864266 1.5265 -1.84023 0.0512776 -0.341215 0.938586 + 0.800958 1.50662 -1.84181 -0.11434 -0.430144 0.89549 + 0.787413 1.572 -1.81563 -0.202424 -0.344449 0.916722 + 0.743671 1.58188 -1.83554 -0.64638 -0.260911 0.71702 + 0.934186 1.55499 -1.83735 0.12861 -0.315775 0.940077 + 0.85072 1.59187 -1.81405 0.0914737 -0.395346 0.913966 + 0.842039 1.62036 -1.79979 0.0335323 -0.298541 0.953808 + 0.785535 1.61948 -1.80175 -0.237605 -0.245062 0.939941 + 0.741793 1.62937 -1.82166 -0.661079 -0.167372 0.73141 + 0.976505 1.59867 -1.82601 0.176379 -0.430619 0.885131 + 0.913198 1.59822 -1.81636 0.0915963 -0.421893 0.902007 + 0.904516 1.62672 -1.80212 0.0674758 -0.330093 0.941534 + 0.887647 1.66415 -1.79206 0.0163266 -0.114962 0.993236 + 0.837177 1.66114 -1.7921 -0.0135795 -0.0687643 0.99754 + 1.01603 1.59645 -1.83673 0.396192 -0.345262 0.85078 + 0.960783 1.62859 -1.80535 0.20275 -0.281948 0.937762 + 0.943913 1.66603 -1.7953 0.244554 -0.072172 0.966946 + 1.03918 1.60236 -1.84948 0.639783 -0.108202 0.760901 + 1.00031 1.62638 -1.81606 0.432675 -0.148971 0.889157 + 0.988692 1.68218 -1.81608 0.529352 0.130746 0.838267 + 0.914365 1.71912 -1.78871 0.175173 -0.0901935 0.980398 + 1.05772 1.62163 -1.86933 0.754501 0.0404257 0.655053 + 1.01885 1.64567 -1.83592 0.672378 0.124962 0.729584 + 1.03131 1.70976 -1.86119 0.706374 0.254549 0.660485 + 1.00313 1.75498 -1.85138 0.738261 0.158549 0.655617 + 0.959144 1.73527 -1.80948 0.549438 0.0376273 0.834686 + 1.08672 1.64681 -1.9115 0.833922 0.118009 0.539118 + 1.06147 1.67324 -1.88104 0.762678 0.199765 0.615156 + 1.08523 1.7041 -1.93404 0.82692 0.346528 0.442856 + 1.05901 1.73045 -1.90908 0.797211 0.368281 0.478356 + 1.11048 1.67767 -1.96451 0.866277 0.271214 0.419533 + 1.09218 1.73874 -1.99404 0.794826 0.475509 0.377017 + 1.06596 1.7651 -1.96907 0.7875 0.507225 0.350095 + 1.04769 1.78159 -1.95457 0.851349 0.423118 0.310122 + 1.03082 1.77568 -1.89927 0.858434 0.286772 0.425268 + 1.09708 1.76425 -2.0367 0.761803 0.548151 0.345234 + 1.06837 1.78834 -2.0124 0.769436 0.550463 0.323972 + 1.0501 1.80483 -1.99789 0.825668 0.496217 0.268407 + 1.03028 1.81533 -1.93018 0.91773 0.353515 0.181102 + 1.01341 1.80942 -1.87489 0.90755 0.0206805 0.419434 + 1.09549 1.77946 -2.06302 0.672094 0.735425 0.0862512 + 1.06679 1.80356 -2.03872 0.710694 0.694644 0.111284 + 1.03766 1.83134 -2.0135 0.796052 0.605024 -0.0157297 + 1.01403 1.8742 -1.9934 0.858363 0.456876 -0.233403 + 1.02647 1.84769 -1.9778 0.86251 0.431032 0.265119 + 1.11124 1.76217 -2.11859 0.467288 0.724432 -0.506793 + 1.07684 1.78557 -2.08856 0.512797 0.833744 -0.204717 + 1.04531 1.81879 -2.05957 0.567436 0.796265 -0.209709 + 1.01618 1.84657 -2.03436 0.58554 0.706496 -0.397501 + 0.995883 1.8882 -2.01106 0.664036 0.489033 -0.5656 + 1.13202 1.7126 -2.15023 0.51832 0.538245 -0.664558 + 1.07481 1.74248 -2.14068 0.188278 0.55397 -0.810968 + 1.04216 1.79953 -2.11292 0.33298 0.722024 -0.606469 + 1.01063 1.83274 -2.08394 0.384714 0.821899 -0.420092 + 0.978204 1.85524 -2.05445 0.38405 0.755937 -0.530155 + 1.09559 1.6929 -2.17231 0.161811 0.538864 -0.826706 + 1.03252 1.73344 -2.15652 0.10317 0.497943 -0.861051 + 0.999865 1.7905 -2.12876 0.133453 0.56295 -0.815646 + 0.972288 1.8385 -2.09677 0.188299 0.754744 -0.628415 + 1.0558 1.63596 -2.21233 0.0817682 0.450228 -0.889162 + 1.05076 1.68208 -2.18405 0.0516619 0.509271 -0.859054 + 0.980605 1.70774 -2.17046 -0.107032 0.418275 -0.901992 + 0.953246 1.792 -2.13158 -0.0773757 0.468702 -0.879961 + 0.925669 1.84 -2.09959 -0.0907293 0.658803 -0.746825 + 0.994392 1.62906 -2.21786 -0.128752 0.49772 -0.857728 + 0.998842 1.65637 -2.198 -0.141639 0.527294 -0.837794 + 0.917688 1.70239 -2.15691 -0.311428 0.330996 -0.89076 + 0.890328 1.78665 -2.11804 -0.289286 0.384223 -0.876748 + 0.870971 1.82926 -2.08941 -0.321082 0.546554 -0.773424 + 0.916339 1.61308 -2.20198 -0.392093 0.504401 -0.769313 + 0.92079 1.6404 -2.18212 -0.35224 0.456584 -0.816981 + 0.828512 1.71502 -2.10984 -0.526938 0.193591 -0.827562 + 0.810585 1.76854 -2.09241 -0.507016 0.231429 -0.830286 + 0.791228 1.81115 -2.06378 -0.527558 0.582797 -0.618086 + 0.924909 1.56648 -2.22949 -0.332458 0.377131 -0.864433 + 0.841764 1.57271 -2.17745 -0.527686 0.378091 -0.760654 + 0.831614 1.65302 -2.13505 -0.520594 0.319383 -0.791818 + 0.776665 1.70487 -2.06958 -0.815377 0.0302016 -0.578142 + 0.850334 1.5261 -2.20495 -0.490665 0.347792 -0.79893 + 0.813156 1.51146 -2.18697 -0.696756 0.253608 -0.670979 + 0.799498 1.56287 -2.14471 -0.777025 0.258523 -0.573933 + 0.789347 1.64319 -2.10231 -0.814045 0.161517 -0.557891 + 0.824036 1.48986 -2.20217 -0.588341 0.0462795 -0.807288 + 0.805101 1.4887 -2.1814 -0.831474 -0.0140934 -0.555385 + 0.791442 1.54012 -2.13914 -0.864894 0.196373 -0.461948 + 0.772155 1.63086 -2.05582 -0.87607 0.108306 -0.469863 + 0.759473 1.69255 -2.0231 -0.920174 -0.0291921 -0.39042 + 0.809707 1.45721 -2.1801 -0.819657 -0.154198 -0.551712 + 0.782071 1.50568 -2.13663 -0.831698 0.136923 -0.538081 + 0.762784 1.59643 -2.05332 -0.880222 0.198039 -0.431266 + 0.828088 1.42677 -2.19929 -0.716303 -0.313041 -0.623631 + 0.799637 1.43961 -2.15706 -0.77218 -0.162138 -0.614368 + 0.759425 1.48967 -2.11219 -0.851914 0.0911327 -0.515691 + 0.741304 1.59492 -2.00506 -0.900082 0.175812 -0.398675 + 0.739236 1.6697 -1.97481 -0.907583 0.0297168 -0.41882 + 0.749453 1.73526 -2.01205 -0.93301 -0.0940985 -0.34733 + 0.758738 1.75839 -2.05214 -0.818666 0.0477827 -0.572279 + 0.708187 1.64323 -1.92017 -0.978804 0.0175715 -0.204042 + 0.705916 1.68333 -1.91339 -0.980359 -0.00673064 -0.197104 + 0.729217 1.71242 -1.96378 -0.913426 -0.00944856 -0.406895 + 0.727109 1.75134 -1.95088 -0.94254 0.10088 -0.318499 + 0.739652 1.76789 -1.98901 -0.963745 0.00697495 -0.266732 + 0.711199 1.61461 -1.87225 -0.941705 -0.118846 0.314748 + 0.708928 1.65471 -1.86548 -0.946007 -0.052359 0.319889 + 0.711709 1.70214 -1.8583 -0.917127 0.0404303 0.396538 + 0.703809 1.72224 -1.90049 -0.994198 0.0904608 -0.0582032 + 0.744575 1.67681 -1.81449 -0.666117 -0.0195497 0.745591 + 0.751963 1.73191 -1.81056 -0.668395 -0.0232224 0.743444 + 0.721226 1.75027 -1.85204 -0.902406 0.0478873 0.428218 + 0.713326 1.77037 -1.89423 -0.990421 0.124422 -0.0598802 + 0.780673 1.66025 -1.79405 -0.271075 -0.10147 0.957195 + 0.788062 1.71535 -1.79012 -0.200506 -0.0641711 0.977588 + 0.783995 1.77461 -1.7851 -0.236756 -0.118803 0.964278 + 0.75628 1.78762 -1.79999 -0.674165 -0.0951991 0.73242 + 0.819622 1.69804 -1.79435 0.0485028 0.00473611 0.998812 + 0.815555 1.75729 -1.78932 0.309013 -0.0623261 0.949013 + 0.800585 1.84202 -1.77801 0.32229 -0.117136 0.939366 + 0.783561 1.84073 -1.77594 -0.198504 -0.174913 0.964366 + 0.755847 1.85374 -1.79084 -0.630083 -0.210916 0.747335 + 0.870092 1.70105 -1.79431 -0.0810427 -0.0310603 0.996226 + 0.833175 1.76433 -1.79935 0.249001 0.177868 0.95203 + 0.818206 1.84905 -1.78803 0.614126 -0.0835115 0.784777 + 0.804706 1.91816 -1.76949 0.563755 -0.114943 0.817905 + 0.790659 1.91362 -1.76293 0.305111 -0.187189 0.933739 + 0.906958 1.77198 -1.77752 0.215707 -0.280146 0.935408 + 0.862685 1.75391 -1.78312 -0.354468 -0.168924 0.919683 + 0.847077 1.76163 -1.79512 -0.356989 0.598706 0.717015 + 0.855159 1.79369 -1.81726 -0.736962 0.546199 0.398187 + 0.841258 1.79639 -1.82149 0.550371 0.433013 0.713856 + 0.94324 1.78657 -1.79155 0.579369 -0.218619 0.785198 + 0.909069 1.83044 -1.75378 0.0654777 -0.338629 0.938639 + 0.890218 1.83336 -1.76077 -0.505792 -0.156398 0.84836 + 0.87461 1.84108 -1.77277 -0.753847 -0.0273371 0.656481 + 0.864252 1.84981 -1.79008 -0.96432 0.122361 0.234765 + 0.987221 1.80629 -1.83345 0.787426 -0.129193 0.602719 + 0.977649 1.85867 -1.79678 0.77756 -0.252236 0.576001 + 0.94535 1.84504 -1.7678 0.594435 -0.340595 0.728452 + 0.942573 1.90333 -1.73659 0.577675 -0.358421 0.733366 + 0.919433 1.89794 -1.72668 0.0523185 -0.405825 0.912452 + 1.00384 1.8618 -1.83821 0.936587 -0.00700767 0.350366 + 0.986619 1.92615 -1.78642 0.989079 0.060796 0.134264 + 0.974871 1.91696 -1.76556 0.807561 -0.248096 0.535064 + 1.02479 1.83536 -1.92346 0.800739 0.551633 -0.233494 + 0.998351 1.88183 -1.83149 0.930695 0.362723 -0.0473265 + 1.01408 1.83106 -1.94101 0.502432 0.86199 0.0673412 + 0.991474 1.88956 -1.84808 0.718025 0.624288 -0.307741 + 0.979742 1.93388 -1.803 0.830766 0.42629 -0.357918 + 1.01479 1.84131 -1.96075 0.549778 0.561393 0.618532 + 0.972088 1.84258 -1.91983 0.128016 0.976777 -0.171811 + 0.980764 1.88526 -1.86563 0.414956 0.735274 -0.535895 + 0.967479 1.93991 -1.81463 0.59376 0.557094 -0.580599 + 0.976704 1.99065 -1.76489 0.840678 0.332292 -0.427601 + 0.981995 1.92345 -1.94256 0.777505 0.0759679 0.624272 + 0.964709 1.91481 -1.92212 0.564554 -0.0897525 0.820502 + 0.972792 1.85284 -1.93957 0.443915 0.344486 0.827205 + 0.993675 1.92983 -1.9596 0.906861 0.197278 0.372404 + 0.967909 1.99389 -1.92317 0.830085 -0.0334193 0.556634 + 0.950622 1.98525 -1.90273 0.608777 -0.137099 0.781405 + 0.929628 1.91428 -1.90729 0.198376 -0.21833 0.955499 + 0.937711 1.85232 -1.92473 0.283853 0.429933 0.857079 + 0.993954 1.93544 -1.97227 0.919246 0.34275 -0.193675 + 0.976243 2.00544 -1.95092 0.96373 0.224933 -0.143631 + 0.975963 1.99982 -1.93825 0.953762 0.0821907 0.289106 + 0.96098 2.05958 -1.90185 0.84267 -0.0909533 0.530693 + 0.975807 1.94944 -1.98993 0.778914 0.357394 -0.515327 + 0.967668 2.01288 -1.9665 0.837103 0.28847 -0.464805 + 0.969269 2.06972 -1.92641 0.970206 0.185074 -0.156359 + 0.969034 2.06551 -1.91693 0.965329 0.022023 0.260104 + 0.956808 1.9592 -2.01208 0.564425 0.333935 -0.754925 + 0.948669 2.02264 -1.98866 0.600319 0.349677 -0.719266 + 0.945246 2.08526 -1.96032 0.608493 0.386501 -0.693075 + 0.960694 2.07717 -1.94198 0.843505 0.293524 -0.449826 + 0.957905 1.89687 -2.03116 0.416051 0.439163 -0.796265 + 0.926026 1.90248 -2.04141 0.186541 0.442705 -0.877049 + 0.924929 1.9648 -2.02233 0.131254 0.330282 -0.934712 + 0.925222 2.02636 -1.99782 0.158286 0.393945 -0.905402 + 0.939863 1.861 -2.06729 0.172178 0.727475 -0.66418 + 0.889381 1.90294 -2.04387 -0.129103 0.42459 -0.896134 + 0.892353 1.96327 -2.02012 -0.187615 0.373806 -0.908333 + 0.892646 2.02482 -1.99562 -0.314878 0.374548 -0.872104 + 0.903219 1.86146 -2.06977 -0.122963 0.636648 -0.761288 + 0.85084 1.88291 -2.04043 -0.376885 0.418507 -0.826323 + 0.853812 1.94323 -2.01666 -0.459155 0.420616 -0.78247 + 0.87111 2.01902 -1.98352 -0.695745 0.350758 -0.626823 + 0.895326 2.08771 -1.96769 -0.30918 0.433095 -0.846662 + 0.848521 1.85072 -2.05959 -0.405127 0.522966 -0.749919 + 0.788611 1.85201 -2.0186 -0.64903 0.450425 -0.613088 + 0.784655 1.86838 -2.00259 -0.876543 0.418205 -0.23828 + 0.849856 1.95961 -2.00064 -0.754811 0.451659 -0.475673 + 0.786292 1.81982 -2.03777 -0.580243 0.61506 -0.533873 + 0.744001 1.79968 -2.00307 -0.912313 0.24411 -0.328778 + 0.743814 1.83743 -1.97241 -0.794396 0.460891 -0.395619 + 0.761862 1.84348 -1.975 -0.25849 0.922216 -0.287577 + 0.778005 1.84923 -1.98921 -0.610409 0.790295 0.0532384 + 0.748937 1.79101 -2.02909 -0.846565 0.317533 -0.427201 + 0.736555 1.80077 -1.96229 -0.965925 0.131235 -0.223082 + 0.736368 1.83852 -1.93163 -0.9573 0.158464 -0.241797 + 0.724012 1.78422 -1.92417 -0.953863 0.142895 -0.264056 + 0.726314 1.83497 -1.90204 -0.947127 0.159876 -0.27819 + 0.736551 1.89566 -1.90307 -0.792095 0.360144 -0.492831 + 0.749461 1.89927 -1.91012 -0.414055 0.60128 -0.683389 + 0.76751 1.90531 -1.91271 -0.0971631 0.622788 -0.776334 + 0.715627 1.82111 -1.87211 -0.998546 0.0534961 -0.00655442 + 0.717133 1.8795 -1.84616 -0.999897 0.0132344 -0.00559226 + 0.726497 1.89212 -1.87348 -0.948664 0.136484 -0.285321 + 0.725891 1.95057 -1.84504 -0.917238 0.176364 -0.35717 + 0.735433 1.95672 -1.86013 -0.714273 0.360113 -0.600111 + 0.725543 1.80598 -1.84147 -0.894003 -0.068371 0.442813 + 0.727049 1.86436 -1.81551 -0.846168 -0.192158 0.497066 + 0.725019 1.92805 -1.79507 -0.844133 -0.209695 0.493424 + 0.716527 1.93795 -1.81772 -0.999717 -0.0202522 0.0124381 + 0.753817 1.91743 -1.77039 -0.580353 -0.285006 0.762864 + 0.745486 1.98371 -1.75005 -0.58294 -0.296831 0.756355 + 0.723834 1.99148 -1.76811 -0.833189 -0.214658 0.509626 + 0.715341 2.00138 -1.79076 -0.999973 0.00719864 -0.00103465 + 0.773635 1.91234 -1.76087 -0.187794 -0.274986 0.94293 + 0.765304 1.97862 -1.74053 -0.161586 -0.306435 0.938076 + 0.757729 2.04002 -1.72191 -0.177307 -0.289303 0.940673 + 0.744459 2.04328 -1.72861 -0.581416 -0.257542 0.771769 + 0.722807 2.05105 -1.74667 -0.837077 -0.159195 0.523411 + 0.775719 1.9795 -1.74215 0.316008 -0.231557 0.920065 + 0.768143 2.0409 -1.72353 0.331014 -0.238025 0.913112 + 0.763122 2.09719 -1.70674 0.339834 -0.214049 0.915804 + 0.757071 2.09656 -1.70567 -0.149467 -0.247627 0.957257 + 0.743801 2.09981 -1.71239 -0.579808 -0.208486 0.787627 + 0.789766 1.98404 -1.74871 0.561519 -0.147349 0.814238 + 0.777267 2.04384 -1.72806 0.571743 -0.172917 0.802004 + 0.772245 2.10013 -1.71128 0.573608 -0.159297 0.803491 + 0.761281 2.13195 -1.69915 0.309632 0.0701278 0.948267 + 0.75523 2.13133 -1.69808 -0.151824 0.0365892 0.98773 + 0.801708 1.9894 -1.75827 0.777185 -0.029527 0.628579 + 0.789209 2.04921 -1.73761 0.787039 -0.0694886 0.612977 + 0.779755 2.10356 -1.71724 0.783201 -0.0682216 0.618015 + 0.766734 2.1336 -1.70203 0.508286 0.112287 0.853837 + 0.759235 2.14083 -1.70197 0.177648 0.542294 0.821193 + 0.821388 1.92561 -1.78316 0.78452 -0.00693025 0.620065 + 0.829458 1.93372 -1.79905 0.936034 0.129826 0.327087 + 0.809777 1.99751 -1.77415 0.934855 0.128683 0.330889 + 0.794748 2.05477 -1.74833 0.945182 0.075546 0.317685 + 0.834888 1.8565 -1.80171 0.816972 -0.0563333 0.573919 + 0.844166 1.87442 -1.82561 0.957298 0.0828217 0.276984 + 0.831377 1.94503 -1.82226 0.959814 0.280534 -0.0075723 + 0.811196 2.00563 -1.79054 0.958774 0.284147 0.0036961 + 0.796166 2.06289 -1.76471 0.971383 0.235931 -0.027415 + 0.850536 1.81431 -1.84539 0.611634 0.551724 0.567013 + 0.859635 1.83394 -1.87879 0.567337 0.754982 0.328832 + 0.846085 1.88573 -1.84883 0.967324 0.253153 -0.01407 + 0.824707 1.95308 -1.84008 0.83936 0.422156 -0.34243 + 0.858926 1.81218 -1.84164 -0.660746 0.680623 0.316491 + 0.868025 1.83181 -1.87504 -0.478892 0.86608 0.143415 + 0.890865 1.84138 -1.89545 -0.279342 0.95786 -0.0668777 + 0.860255 1.8495 -1.91568 -0.240463 0.636096 0.733185 + 0.849933 1.84528 -1.90432 0.446095 0.89494 0.00901771 + 0.868018 1.8683 -1.81446 -0.971487 0.2145 -0.10101 + 0.875236 1.87903 -1.83599 -0.851069 0.377747 -0.364676 + 0.898077 1.8886 -1.8564 -0.523654 0.560859 -0.641267 + 0.877244 1.91512 -1.76182 -0.957147 -0.00180678 0.289598 + 0.875799 1.92392 -1.77936 -0.98671 0.157721 -0.0390768 + 0.883017 1.93465 -1.80089 -0.847461 0.360132 -0.390018 + 0.898595 1.94146 -1.81495 -0.543497 0.515266 -0.662655 + 0.925232 1.8928 -1.86607 -0.25583 0.616446 -0.744678 + 0.887602 1.90638 -1.74452 -0.786311 -0.163794 0.595724 + 0.893341 1.96685 -1.71412 -0.790203 -0.200638 0.579071 + 0.885018 1.97388 -1.72792 -0.953747 -0.0384268 0.298145 + 0.883573 1.98269 -1.74545 -0.987445 0.152247 -0.0421075 + 0.900583 1.90086 -1.73367 -0.53599 -0.290869 0.792534 + 0.906322 1.96132 -1.70327 -0.543394 -0.31746 0.777137 + 0.90932 2.01941 -1.6791 -0.550898 -0.262686 0.792153 + 0.899932 2.02347 -1.68723 -0.788573 -0.16142 0.593377 + 0.891609 2.03049 -1.70102 -0.951993 -0.0156148 0.305721 + 0.92051 1.959 -1.69764 0.0210432 -0.40515 0.914008 + 0.923508 2.01709 -1.67346 0.0357212 -0.342055 0.939001 + 0.923574 2.07421 -1.65581 0.0142829 -0.270472 0.962622 + 0.914512 2.0758 -1.65953 -0.549411 -0.200134 0.81123 + 0.905124 2.07985 -1.66766 -0.786453 -0.108989 0.607959 + 0.943649 1.96439 -1.70755 0.580547 -0.338264 0.740637 + 0.940755 2.02107 -1.68121 0.577304 -0.281991 0.76629 + 0.94082 2.07818 -1.66356 0.583681 -0.222137 0.781007 + 0.925899 2.10935 -1.64693 0.029823 -0.00713463 0.99953 + 0.916837 2.11094 -1.65066 -0.515326 0.0618104 0.854763 + 0.970475 1.97571 -1.73163 0.803525 -0.235237 0.546819 + 0.967581 2.03238 -1.70531 0.801857 -0.182254 0.569042 + 0.958773 2.08575 -1.67969 0.792263 -0.132821 0.595549 + 0.954746 2.11933 -1.66807 0.753159 0.117968 0.647174 + 0.936793 2.11176 -1.65195 0.529231 0.0192267 0.84826 + 0.982223 1.9849 -1.75249 0.996304 0.0460889 0.0724849 + 0.976628 2.03938 -1.72072 0.9914 0.0774988 0.105446 + 0.967821 2.09275 -1.6951 0.984288 0.139482 0.108269 + 0.960516 2.1238 -1.67797 0.903246 0.36591 0.224178 + 0.971109 2.04514 -1.73312 0.833021 0.349648 -0.428745 + 0.964161 2.09645 -1.70299 0.825535 0.386871 -0.41088 + 0.956856 2.1275 -1.68586 0.747496 0.605392 -0.273407 + 0.950708 2.13335 -1.67869 0.498957 0.865425 0.045627 + 0.952845 2.13125 -1.67428 0.622953 0.705195 0.33857 + 0.961994 2.04944 -1.74159 0.612238 0.457524 -0.644854 + 0.955045 2.10075 -1.71145 0.604372 0.486384 -0.631003 + 0.951073 2.13016 -1.69085 0.559774 0.688294 -0.461416 + 0.944925 2.13601 -1.68367 0.388572 0.916539 -0.094704 + 0.941192 2.13458 -1.67025 0.182079 0.925098 0.333228 + 0.964441 1.99668 -1.77653 0.613458 0.459099 -0.642572 + 0.94588 2.05369 -1.74957 0.258464 0.539225 -0.801519 + 0.944467 2.1036 -1.71668 0.265112 0.556414 -0.787476 + 0.940495 2.13301 -1.69609 0.238927 0.748629 -0.61844 + 0.938947 2.1376 -1.68661 0.204473 0.950056 -0.235765 + 0.948327 2.00093 -1.78451 0.263794 0.550583 -0.792004 + 0.926855 2.00147 -1.78457 -0.173881 0.56434 -0.807022 + 0.929849 2.05409 -1.74962 -0.168649 0.54576 -0.820795 + 0.928436 2.10401 -1.71672 -0.176536 0.556341 -0.811985 + 0.930417 2.13328 -1.69608 -0.143699 0.746423 -0.649771 + 0.947222 1.9451 -1.82456 0.241432 0.632124 -0.736295 + 0.92575 1.94566 -1.82462 -0.184273 0.60462 -0.774905 + 0.904837 1.99813 -1.77673 -0.537046 0.499979 -0.679414 + 0.907831 2.05075 -1.74177 -0.544256 0.480037 -0.688004 + 0.913905 2.10183 -1.71152 -0.534856 0.494059 -0.685445 + 0.960507 1.89046 -1.87556 0.165345 0.686349 -0.708227 + 0.936812 1.84492 -1.91034 -0.0543891 0.98242 -0.178588 + 0.891764 1.84878 -1.90985 0.0324371 0.55205 0.83318 + 0.899833 1.91406 -1.90688 -0.0479227 -0.162398 0.985561 + 0.868325 1.91479 -1.91271 -0.443809 -0.0519622 0.894614 + 0.853887 1.91951 -1.92509 -0.676503 0.0106423 0.736363 + 0.828463 1.85617 -1.9411 -0.456195 0.637005 0.621378 + 0.929162 1.98119 -1.89321 0.230535 -0.217435 0.94846 + 0.899367 1.98098 -1.89281 -0.126952 -0.218565 0.967529 + 0.879269 1.98287 -1.89829 -0.478062 -0.15888 0.863837 + 0.864832 1.98759 -1.91067 -0.75344 -0.0640075 0.654394 + 0.832983 1.92248 -1.94618 -0.810904 0.1688 0.560304 + 0.925454 2.04843 -1.87543 0.224618 -0.259326 0.939306 + 0.901027 2.04832 -1.87518 -0.132784 -0.270145 0.953619 + 0.880929 2.05021 -1.88067 -0.495057 -0.224936 0.839239 + 0.946914 2.05248 -1.88496 0.630728 -0.180969 0.754608 + 0.940668 2.11102 -1.86436 0.628021 -0.206684 0.750247 + 0.924527 2.10799 -1.85717 0.233477 -0.298934 0.925271 + 0.9001 2.10789 -1.85691 -0.138219 -0.312687 0.939746 + 0.954734 2.11813 -1.88125 0.843894 -0.0968828 0.527689 + 0.944789 2.16896 -1.85581 0.837255 -0.0691901 0.542417 + 0.935579 2.16434 -1.84469 0.631484 -0.184358 0.753153 + 0.919437 2.16131 -1.8375 0.220317 -0.289643 0.931433 + 0.960792 2.12263 -1.8924 0.961567 0.0367741 0.272098 + 0.950847 2.17345 -1.86696 0.952334 0.078585 0.294762 + 0.941871 2.20398 -1.85051 0.864669 0.319585 0.387574 + 0.938143 2.20116 -1.84379 0.770907 0.198926 0.605087 + 0.928933 2.19654 -1.83267 0.570529 0.0865833 0.816701 + 0.961027 2.12683 -1.90189 0.961423 0.236467 -0.140529 + 0.951062 2.17602 -1.8729 0.952518 0.289049 -0.0957081 + 0.942085 2.20654 -1.85644 0.861593 0.507321 0.0168428 + 0.933964 2.21393 -1.85105 0.553784 0.802768 0.221106 + 0.933822 2.2126 -1.84796 0.568285 0.691198 0.446428 + 0.954621 2.13217 -1.91341 0.83602 0.359056 -0.414908 + 0.944656 2.18136 -1.88442 0.823919 0.424527 -0.375412 + 0.938168 2.20966 -1.86371 0.752221 0.617217 -0.230665 + 0.930047 2.21705 -1.85831 0.501655 0.863752 0.0476899 + 0.919546 2.21771 -1.84761 0.17016 0.908978 0.380533 + 0.939173 2.14027 -1.93175 0.596336 0.471743 -0.649493 + 0.934578 2.18666 -1.89663 0.600289 0.538164 -0.591635 + 0.92809 2.21496 -1.87591 0.530881 0.721187 -0.445033 + 0.92459 2.21998 -1.86504 0.399588 0.909732 -0.112772 + 0.919726 2.21994 -1.85279 0.230901 0.918102 0.322139 + 0.921589 2.14313 -1.93873 0.160283 0.547275 -0.821462 + 0.916994 2.18952 -1.9036 0.145744 0.624578 -0.767242 + 0.917186 2.21677 -1.88024 0.148921 0.790319 -0.594321 + 0.913686 2.22178 -1.86936 0.0757486 0.95921 -0.272357 + 0.91427 2.22287 -1.85953 0.0940792 0.987495 0.1265 + 0.921799 2.08898 -1.96949 0.152714 0.451574 -0.879067 + 0.895116 2.14186 -1.93694 -0.317397 0.524734 -0.789881 + 0.899644 2.1887 -1.90242 -0.303831 0.602517 -0.73801 + 0.899835 2.21595 -1.87905 -0.299331 0.768468 -0.56556 + 0.904212 2.22133 -1.86872 -0.199345 0.946212 -0.254843 + 0.878996 2.13748 -1.92777 -0.715695 0.412176 -0.563818 + 0.883524 2.18432 -1.89326 -0.720061 0.473578 -0.507184 + 0.889857 2.21324 -1.87334 -0.648738 0.665584 -0.368968 + 0.894234 2.21862 -1.86301 -0.493346 0.868025 -0.0560627 + 0.904796 2.22242 -1.85888 -0.166693 0.975492 0.143627 + 0.873791 2.08192 -1.9556 -0.726092 0.332862 -0.601659 + 0.867014 2.12826 -1.90784 -0.927344 0.263403 -0.265803 + 0.875746 2.17829 -1.88002 -0.916976 0.323491 -0.233472 + 0.882079 2.20722 -1.8601 -0.844685 0.526049 -0.098896 + 0.890047 2.21531 -1.85573 -0.58156 0.804469 0.120906 + 0.861808 2.0727 -1.93566 -0.931239 0.210147 -0.29771 + 0.863574 2.12212 -1.8939 -0.991948 0.11335 0.056486 + 0.872306 2.17216 -1.86609 -0.983111 0.156341 0.0951378 + 0.879976 2.2035 -1.85141 -0.900921 0.392675 0.184789 + 0.887945 2.21159 -1.84705 -0.607071 0.725596 0.323999 + 0.856278 2.00783 -1.95922 -0.92024 0.289877 -0.262926 + 0.851627 1.99948 -1.94063 -0.979133 0.181526 0.0913567 + 0.857158 2.06436 -1.91706 -0.995731 0.0790079 0.0477189 + 0.860908 2.05907 -1.90378 -0.918356 -0.0549317 0.391925 + 0.867324 2.11682 -1.88062 -0.916341 -0.0511572 0.397118 + 0.835023 1.94841 -1.97634 -0.889433 0.443063 -0.112271 + 0.828373 1.92925 -1.96297 -0.891338 0.365361 0.268382 + 0.856237 1.99271 -1.92384 -0.900809 0.0466987 0.431696 + 0.869502 2.05395 -1.89061 -0.772457 -0.142099 0.618966 + 0.87367 2.11305 -1.87094 -0.775228 -0.154306 0.612545 + 0.874821 2.1688 -1.85752 -0.909935 -0.0128292 0.414553 + 0.807559 1.85914 -1.96219 -0.577743 0.604271 0.548698 + 0.818141 1.85194 -1.92974 0.302951 0.921965 -0.241248 + 0.836383 1.89708 -1.87436 0.831891 0.401223 -0.383376 + 0.791416 1.85339 -1.94798 0.123175 0.915019 -0.384146 + 0.818952 1.90443 -1.89258 0.632706 0.468125 -0.61688 + 0.807276 1.96045 -1.8583 0.58967 0.526938 -0.612067 + 0.792228 1.90588 -1.91082 0.284287 0.566471 -0.773493 + 0.789008 1.96341 -1.86688 0.25191 0.581649 -0.773451 + 0.792203 2.0188 -1.82125 0.585316 0.521297 -0.62101 + 0.804526 2.01368 -1.80835 0.832291 0.42969 -0.350226 + 0.76429 1.96284 -1.86876 -0.0581199 0.570618 -0.819156 + 0.756103 2.02117 -1.83105 -0.0623032 0.532735 -0.843986 + 0.773934 2.02176 -1.82983 0.232007 0.554454 -0.799221 + 0.766856 2.07537 -1.79551 0.234987 0.542396 -0.80659 + 0.779339 2.07346 -1.78972 0.581655 0.492699 -0.647245 + 0.748343 1.96032 -1.86717 -0.351489 0.51174 -0.783949 + 0.740157 2.01864 -1.82947 -0.34869 0.478313 -0.805998 + 0.738398 2.07332 -1.79576 -0.3372 0.500836 -0.797157 + 0.749025 2.07478 -1.79672 -0.0584302 0.537012 -0.841548 + 0.732204 2.0165 -1.82526 -0.708769 0.340289 -0.61794 + 0.730445 2.07118 -1.79156 -0.711328 0.378164 -0.592456 + 0.734966 2.1216 -1.76153 -0.69487 0.436483 -0.571522 + 0.739627 2.12288 -1.76388 -0.33169 0.539084 -0.774189 + 0.750255 2.12433 -1.76486 -0.0566549 0.562851 -0.824615 + 0.722661 2.01034 -1.81018 -0.909772 0.188637 -0.369772 + 0.724157 2.0669 -1.78166 -0.905764 0.242222 -0.347735 + 0.728679 2.11732 -1.75165 -0.897377 0.302976 -0.320811 + 0.73814 2.15072 -1.74126 -0.643105 0.654374 -0.397757 + 0.742801 2.152 -1.74362 -0.30661 0.74703 -0.589861 + 0.716837 2.05794 -1.76226 -0.997465 0.0599044 0.0384125 + 0.723833 2.11158 -1.73951 -0.989987 0.132896 0.0475782 + 0.72946 2.1422 -1.72349 -0.910106 0.37306 0.18037 + 0.734305 2.14794 -1.73562 -0.819941 0.542475 -0.182804 + 0.742707 2.15526 -1.73428 -0.426477 0.902393 -0.0616823 + 0.729803 2.1047 -1.72392 -0.820825 -0.109767 0.560533 + 0.733132 2.13791 -1.7138 -0.772121 0.169991 0.612318 + 0.735982 2.14919 -1.72174 -0.659354 0.699094 0.276622 + 0.738873 2.15246 -1.72863 -0.589454 0.80434 0.0747119 + 0.74713 2.13302 -1.70226 -0.527838 0.0644643 0.846895 + 0.747735 2.14211 -1.70547 -0.393081 0.478583 0.78514 + 0.739654 2.14489 -1.71206 -0.539771 0.510412 0.669423 + 0.741885 2.15134 -1.71689 -0.36697 0.80375 0.468315 + 0.744775 2.15462 -1.72378 -0.252655 0.930683 0.264564 + 0.755835 2.14043 -1.70129 -0.0906096 0.506884 0.857238 + 0.749965 2.14857 -1.71031 -0.15674 0.777761 0.608704 + 0.747427 2.15531 -1.72503 -0.100544 0.965803 0.238989 + 0.745359 2.15596 -1.73553 -0.209376 0.964792 -0.159177 + 0.749178 2.1527 -1.74422 -0.0701187 0.767268 -0.637482 + 0.754787 2.14898 -1.7107 -0.00569586 0.830362 0.557195 + 0.752249 2.15573 -1.72543 -0.0574738 0.966419 0.250462 + 0.751736 2.15664 -1.73613 -0.0661334 0.980626 -0.184387 + 0.760438 2.15313 -1.74346 0.20133 0.760372 -0.617495 + 0.761515 2.12477 -1.7641 0.228157 0.559199 -0.79702 + 0.758188 2.14939 -1.71139 -0.0235534 0.830253 0.556888 + 0.758594 2.15595 -1.72499 -0.0195186 0.970111 0.241873 + 0.758081 2.15687 -1.73569 0.0870593 0.979106 -0.183771 + 0.768046 2.15199 -1.74006 0.515266 0.704438 -0.488126 + 0.773998 2.12286 -1.75831 0.589916 0.494925 -0.638003 + 0.764689 2.14247 -1.70485 0.298738 0.537768 0.788392 + 0.762532 2.14923 -1.71048 0.0175476 0.755446 0.654976 + 0.762939 2.15581 -1.72408 0.0822876 0.974278 0.209788 + 0.765689 2.15572 -1.73229 0.331157 0.93556 -0.12273 + 0.768914 2.14442 -1.70824 0.461596 0.544316 0.700464 + 0.766757 2.15118 -1.71388 0.255066 0.808469 0.530396 + 0.767222 2.15404 -1.71959 0.269103 0.903174 0.334457 + 0.769972 2.15396 -1.7278 0.517533 0.855657 0.00326413 + 0.775713 2.14882 -1.73203 0.773721 0.592705 -0.223731 + 0.774245 2.13703 -1.70799 0.707927 0.19039 0.68014 + 0.777547 2.14042 -1.71443 0.855317 0.309276 0.415669 + 0.772216 2.14781 -1.71469 0.625895 0.616268 0.477985 + 0.772681 2.15067 -1.72039 0.647825 0.714857 0.263253 + 0.785294 2.10913 -1.72796 0.948142 0.0739607 0.309122 + 0.78617 2.11424 -1.73815 0.973838 0.226102 -0.0227383 + 0.778422 2.14553 -1.72462 0.884421 0.458702 0.0859739 + 0.791662 2.06835 -1.77682 0.846224 0.384069 -0.369317 + 0.781665 2.11969 -1.75026 0.844128 0.382453 -0.375736 + 0.885096 2.10931 -1.861 -0.492323 -0.25735 0.831498 + 0.881167 2.16503 -1.84784 -0.768296 -0.127721 0.627223 + 0.882491 2.20014 -1.84284 -0.83509 0.247449 0.491319 + 0.888481 2.16268 -1.84146 -0.49489 -0.237045 0.835998 + 0.886392 2.19788 -1.83688 -0.716074 0.154806 0.680641 + 0.889338 2.20981 -1.84245 -0.564553 0.650166 0.508492 + 0.900429 2.21687 -1.84642 -0.227003 0.894601 0.384914 + 0.903484 2.16126 -1.83738 -0.131675 -0.301653 0.944281 + 0.902948 2.19464 -1.82803 -0.136214 -0.00892645 0.990639 + 0.893706 2.19554 -1.83051 -0.451247 0.0485204 0.891079 + 0.89714 2.20628 -1.83307 -0.35182 0.48497 0.800642 + 0.893239 2.20754 -1.8365 -0.497469 0.577537 0.647283 + 0.918901 2.19468 -1.82816 0.222272 0.00112368 0.974984 + 0.915071 2.20537 -1.83064 0.14154 0.377498 0.915129 + 0.906382 2.20538 -1.83059 -0.0896858 0.381444 0.920031 + 0.925103 2.20724 -1.83516 0.448575 0.487065 0.749366 + 0.915728 2.21235 -1.83474 0.140901 0.72642 0.672653 + 0.907039 2.21236 -1.8347 -0.0912971 0.754418 0.650014 + 0.903138 2.21362 -1.83813 -0.218948 0.843849 0.489879 + 0.901823 2.2151 -1.84183 -0.204192 0.882249 0.424197 + 0.930094 2.20979 -1.84125 0.546616 0.568964 0.614403 + 0.920719 2.2149 -1.84083 0.242641 0.857192 0.454254 + 0.919404 2.21638 -1.84453 0.135654 0.921799 0.363159 + 0.900609 2.2191 -1.8516 -0.248187 0.91117 0.328896 + 0.889259 1.99131 -1.76266 -0.85481 0.344293 -0.388281 + 0.896173 2.04571 -1.73124 -0.852418 0.338285 -0.39868 + 0.902247 2.09678 -1.70099 -0.85347 0.353831 -0.382613 + 0.890487 2.03708 -1.71403 -0.98762 0.153378 -0.0328996 + 0.898535 2.0911 -1.6897 -0.982408 0.184851 -0.0265324 + 0.904856 2.12225 -1.67287 -0.914644 0.390943 0.102908 + 0.908567 2.12793 -1.68416 -0.78897 0.557867 -0.25751 + 0.915885 2.1311 -1.69088 -0.512878 0.679409 -0.524748 + 0.899657 2.08452 -1.67669 -0.944725 0.0221626 0.327113 + 0.905567 2.11812 -1.66483 -0.875972 0.252655 0.410899 + 0.912004 2.12616 -1.66256 -0.610862 0.59892 0.517825 + 0.911292 2.13029 -1.6706 -0.652341 0.709068 0.267719 + 0.913373 2.13348 -1.67694 -0.594521 0.803097 0.0397485 + 0.911034 2.11345 -1.65579 -0.71961 0.134254 0.681276 + 0.915061 2.12352 -1.65745 -0.509172 0.528733 0.679106 + 0.922753 2.12975 -1.66006 -0.159706 0.786187 0.596996 + 0.919695 2.13239 -1.66517 -0.249706 0.844514 0.473754 + 0.920523 2.13485 -1.67008 -0.222632 0.89424 0.38829 + 0.920864 2.121 -1.65233 -0.341149 0.497431 0.797609 + 0.928012 2.12912 -1.65881 -0.0659301 0.816484 0.573592 + 0.935932 2.13522 -1.67151 0.00962237 0.895916 0.44412 + 0.93676 2.13768 -1.67643 0.179858 0.948193 0.261878 + 0.922603 2.13803 -1.67642 -0.222073 0.957394 0.184606 + 0.92593 2.12005 -1.65015 -0.0114474 0.442266 0.896811 + 0.933078 2.12816 -1.65663 0.149333 0.700705 0.697648 + 0.943329 2.13249 -1.66584 0.335832 0.77314 0.538026 + 0.936824 2.12246 -1.65517 0.455469 0.349439 0.818804 + 0.947075 2.12678 -1.66438 0.588022 0.406693 0.699164 + 0.930782 2.13926 -1.67936 0.00629828 0.994425 0.105257 + 0.920691 2.13664 -1.68365 -0.368899 0.896251 -0.246268 + 0.928869 2.13787 -1.6866 -0.13089 0.93705 -0.323736 + 0 1.98306 -3.19152 -0.99528 -0.010888 0.0964296 + 0 1.9393 -3.21829 -0.940716 -0.259577 0.218341 + 0.011183 1.96532 -3.12314 -0.905221 -0.310724 0.289873 + 0.016252 1.92627 -3.17244 -0.857915 -0.416422 0.300957 + 0.025806 1.96262 -3.09556 -0.724444 -0.507575 0.466421 + 0.041291 1.9961 -3.05045 -0.764239 -0.356634 0.537355 + 0.011183 2.00908 -3.09637 -0.939303 -0.144079 0.311371 + 0.011587 2.07808 -3.08639 -0.980061 0.0792124 0.182224 + 0 2.00459 -3.23674 -0.973679 0.196861 -0.11487 + 0.016252 1.87696 -3.22971 -0.535559 -0.712149 0.453895 + 0.030875 1.92357 -3.14486 -0.461445 -0.77026 0.440191 + 0.066043 1.92622 -3.12427 -0.260557 -0.883968 0.388215 + 0.057187 1.95648 -3.06427 -0.507634 -0.703139 0.497899 + 0 1.88998 -3.27556 -0.875856 -0.426886 0.225044 + 0.026712 1.83793 -3.28811 -0.400048 -0.7914 0.46222 + 0.066636 1.89392 -3.21292 -0.0503872 -0.878531 0.475021 + 0.101804 1.89658 -3.19232 -0.126564 -0.917524 0.377002 + 0.120883 1.92386 -3.08813 -0.231901 -0.911108 0.340741 + 0.112028 1.95411 -3.02813 -0.359108 -0.787007 0.501659 + 0.026712 1.81199 -3.33312 -0.545924 -0.802074 0.242167 + 0.077097 1.85489 -3.27132 0.00157891 -0.826563 0.562842 + 0.120941 1.85754 -3.26589 -0.0603898 -0.839102 0.540611 + 0.122625 1.89529 -3.19047 -0.131006 -0.929045 0.345995 + 0 1.86404 -3.32057 -0.894591 -0.441082 0.0717885 + 0.033943 1.80588 -3.37903 -0.547599 -0.802874 -0.235647 + 0.083178 1.80368 -3.33461 -0.0615579 -0.92657 0.37105 + 0.127022 1.80633 -3.32918 -0.0079336 -0.904958 0.425426 + 0.141762 1.85626 -3.26403 -0.0875726 -0.841725 0.532757 + 0.149137 1.88864 -3.19486 -0.20373 -0.917412 0.341832 + 0.033943 1.8295 -3.41372 -0.500882 -0.310218 -0.808011 + 0.090409 1.79758 -3.38053 -0.08195 -0.966312 -0.243976 + 0.145802 1.79423 -3.3803 0.0072954 -0.980094 -0.198399 + 0.174726 1.80955 -3.3246 0.0311282 -0.915235 0.401715 + 0 1.88767 -3.35525 -0.96781 -0.142006 -0.207794 + 0.00609 1.89928 -3.38721 -0.721413 0.195641 -0.664295 + 0.049274 1.91604 -3.38694 -0.12575 0.450442 -0.883906 + 0.113252 1.82668 -3.4212 -0.0559755 -0.293479 -0.954325 + 0.168645 1.82333 -3.42097 0.0508069 -0.332007 -0.941908 + 0.193506 1.79745 -3.37572 0.0426891 -0.989388 -0.138884 + 0.00609 1.92264 -3.37029 -0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 -0.982417 0.118768 -0.144051 + 0.00609 1.93619 -3.35816 -0.981516 0.131151 -0.139377 + 0 1.92457 -3.32621 -0.981236 0.134574 -0.13808 + 0.00609 1.98847 -3.30463 -0.872749 0.354069 -0.336073 + 0 1.97685 -3.27268 -0.971776 0.195948 -0.13136 + 0.014034 2.05323 -3.24402 -0.843647 0.422991 -0.330663 + 0.036542 2.02576 -3.30766 -0.464882 0.588192 -0.661752 + 0.079725 2.04251 -3.30739 -0.194271 0.591029 -0.782907 + 0.128582 1.91321 -3.39442 -0.0139732 0.422247 -0.906373 + 0.014034 2.08098 -3.20808 -0.828285 0.472356 -0.301369 + 0.03972 2.11125 -3.19831 -0.630499 0.681409 -0.371689 + 0.044486 2.09052 -3.24705 -0.586181 0.630257 -0.509086 + 0.0805 2.12506 -3.23831 -0.419995 0.695904 -0.582513 + 0.136609 2.08013 -3.29146 -0.0614619 0.587716 -0.806729 + 0.011587 2.09962 -3.13161 -0.965461 0.260081 -0.0155791 + 0.023387 2.12143 -3.14955 -0.804061 0.549432 -0.227179 + 0.049073 2.1517 -3.13979 -0.614227 0.698253 -0.367652 + 0.075698 2.17553 -3.13363 -0.579977 0.716229 -0.388127 + 0.075734 2.14578 -3.18957 -0.59953 0.710085 -0.369247 + 0.037415 2.1504 -3.01405 -0.971596 0.0427349 0.232755 + 0.032105 2.15701 -3.05363 -0.966259 0.256482 0.0236783 + 0.043906 2.17882 -3.07158 -0.808726 0.533994 -0.246602 + 0.070733 2.20765 -3.06834 -0.58317 0.68184 -0.441595 + 0.097358 2.23148 -3.06218 -0.366643 0.790961 -0.489851 + 0.025536 2.06202 -3.04565 -0.906932 -0.11691 0.40473 + 0.051364 2.13434 -2.97331 -0.920072 -0.106101 0.377108 + 0.049685 2.20804 -2.96099 -0.976256 -0.0867732 0.198479 + 0.044375 2.21465 -3.00057 -0.9845 0.167476 -0.0520691 + 0.054531 2.22951 -3.02005 -0.785559 0.457976 -0.416119 + 0.055645 2.04904 -2.99974 -0.795289 -0.293652 0.530361 + 0.071744 2.11124 -2.94107 -0.816098 -0.270674 0.510607 + 0.081949 2.16734 -2.89318 -0.827892 -0.292275 0.478716 + 0.061569 2.19045 -2.92543 -0.923689 -0.18738 0.334195 + 0.048313 2.25119 -2.93151 -0.989208 -0.0356674 0.142113 + 0.080386 2.03729 -2.9747 -0.634606 -0.439718 0.63555 + 0.096485 2.0995 -2.91603 -0.5474 -0.489529 0.67876 + 0.102944 2.15383 -2.872 -0.574535 -0.483042 0.660742 + 0.082215 2.21407 -2.86212 -0.828354 -0.339528 0.44559 + 0.060198 2.2336 -2.89595 -0.923701 -0.222862 0.311625 + 0.072672 1.98996 -3.01916 -0.595095 -0.51768 0.614711 + 0.106336 2.03079 -2.95916 -0.425211 -0.539635 0.726629 + 0.119012 2.09512 -2.90956 -0.328898 -0.564679 0.756944 + 0.12547 2.14946 -2.86554 -0.317259 -0.597508 0.736431 + 0.098622 1.98346 -3.00363 -0.463877 -0.607233 0.645047 + 0.136479 2.02512 -2.9512 -0.311761 -0.53891 0.782547 + 0.149155 2.08945 -2.9016 -0.17283 -0.59087 0.788036 + 0.151331 2.14541 -2.85801 -0.195786 -0.639847 0.743144 + 0.122263 2.19353 -2.82877 -0.443179 -0.599339 0.666622 + 0.142878 1.95267 -3.0086 -0.270855 -0.804568 0.528496 + 0.129472 1.98201 -2.9841 -0.404392 -0.59007 0.698773 + 0.17514 2.01276 -2.94363 -0.165022 -0.532694 0.830063 + 0.182592 2.09 -2.89932 -0.0485238 -0.573594 0.817701 + 0.184768 2.14596 -2.85572 -0.0173365 -0.686329 0.727084 + 0.165125 1.94022 -3.02443 -0.0854405 -0.901983 0.423234 + 0.168133 1.96965 -2.97654 -0.132315 -0.700096 0.701682 + 0.20834 2.01122 -2.94405 0.088305 -0.57761 0.811523 + 0.215792 2.08846 -2.89973 0.123167 -0.550777 0.825515 + 0.147395 1.9172 -3.09252 -0.145158 -0.940262 0.307955 + 0.169656 1.91908 -3.08069 -0.0464452 -0.941227 0.334567 + 0.218463 1.93221 -3.04741 0.11532 -0.900849 0.418535 + 0.19038 1.9572 -2.99237 0.108938 -0.801353 0.588189 + 0.171053 1.8857 -3.18537 -0.182418 -0.926094 0.330263 + 0.193315 1.88757 -3.17354 -0.0469233 -0.936726 0.346904 + 0.222994 1.91107 -3.10367 0.0353866 -0.935889 0.350513 + 0.253433 1.93131 -3.06382 0.228484 -0.860089 0.456117 + 0.225351 1.9563 -3.00877 0.225062 -0.829787 0.510686 + 0.160705 1.86355 -3.24917 -0.156846 -0.878514 0.451235 + 0.182622 1.86061 -3.23967 -0.217331 -0.876959 0.428614 + 0.197347 1.8591 -3.23793 -0.0620503 -0.887299 0.457001 + 0.215573 1.88599 -3.1778 0.0195867 -0.932825 0.359796 + 0.193669 1.81684 -3.30973 -0.105814 -0.892904 0.437637 + 0.208394 1.81534 -3.30799 -0.10561 -0.894851 0.433692 + 0.219605 1.85752 -3.24219 -0.00433524 -0.875537 0.483132 + 0.248192 1.8816 -3.19291 0.0234285 -0.916136 0.400183 + 0.255613 1.90667 -3.11878 0.124299 -0.923002 0.364167 + 0.231561 1.80731 -3.31936 -0.058717 -0.932487 0.3564 + 0.242772 1.84949 -3.25356 -0.00824802 -0.863014 0.505113 + 0.272701 1.87554 -3.20482 -0.0106207 -0.898285 0.439285 + 0.285988 1.90476 -3.14008 0.233641 -0.858608 0.456294 + 0.283809 1.9294 -3.08511 0.452937 -0.767087 0.45434 + 0.235338 1.79851 -3.3656 0.090422 -0.988383 -0.122159 + 0.277517 1.8115 -3.30338 -0.0569388 -0.899895 0.432374 + 0.267281 1.84343 -3.26547 -0.0257778 -0.836133 0.547921 + 0.296138 1.86434 -3.22731 -0.0895534 -0.88083 0.464886 + 0.248572 1.81892 -3.40553 0.299515 -0.421536 -0.855919 + 0.281294 1.8027 -3.34962 0.216724 -0.970377 -0.106766 + 0.305358 1.81202 -3.29945 0.152238 -0.925993 0.345486 + 0.295121 1.84395 -3.26153 -0.101654 -0.821508 0.561062 + 0.206741 1.81786 -3.41565 0.143199 -0.441032 -0.885994 + 0.232151 1.89626 -3.39129 0.243695 0.511986 -0.823701 + 0.284143 1.82119 -3.39091 0.371882 -0.455109 -0.809061 + 0.31065 1.83131 -3.38534 0.511998 -0.299473 -0.805093 + 0.307801 1.81282 -3.34405 0.537248 -0.82021 -0.196521 + 0.194055 1.90173 -3.39661 0.12717 0.394011 -0.910266 + 0.267721 1.89853 -3.37668 0.307938 0.369786 -0.876603 + 0.310818 1.90591 -3.35837 0.334714 0.372684 -0.86549 + 0.327601 1.8476 -3.37092 0.758231 -0.144147 -0.635851 + 0.202082 2.06864 -3.29366 0.125529 0.556933 -0.821016 + 0.251458 2.05987 -3.28899 0.221157 0.542595 -0.810358 + 0.294555 2.06726 -3.27068 0.390434 0.56245 -0.728843 + 0.327769 1.9222 -3.34395 0.571264 0.376209 -0.729468 + 0.183074 2.18144 -3.21184 0.00165362 0.778244 -0.627959 + 0.23245 2.17267 -3.20717 0.232169 0.716735 -0.657562 + 0.267374 2.17265 -3.19234 0.426883 0.733695 -0.528642 + 0.293459 2.14228 -3.20248 0.625964 0.613739 -0.481138 + 0.329604 2.02374 -3.2783 0.659824 0.450233 -0.6016 + 0.137384 2.16267 -3.22238 -0.219062 0.743651 -0.63166 + 0.152461 2.19752 -3.16676 -0.210607 0.866301 -0.452954 + 0.197921 2.21078 -3.1575 0.0375035 0.889359 -0.455669 + 0.232845 2.21076 -3.14267 0.296118 0.873431 -0.386566 + 0.106772 2.17875 -3.1773 -0.427461 0.790057 -0.439417 + 0.106736 2.2085 -3.12135 -0.426032 0.811318 -0.400325 + 0.138848 2.22171 -3.11437 -0.234384 0.886546 -0.398873 + 0.184307 2.23498 -3.10511 -0.00357815 0.932072 -0.362256 + 0.120311 2.23474 -3.06283 -0.193911 0.860723 -0.470697 + 0.152423 2.24796 -3.05585 -0.14364 0.885115 -0.44265 + 0.181421 2.25134 -3.04883 0.0985539 0.90078 -0.422945 + 0.224477 2.24728 -3.03716 0.298593 0.866268 -0.400528 + 0.227363 2.23092 -3.09344 0.299926 0.908853 -0.28988 + 0.104256 2.26771 -3.01851 -0.22022 0.666688 -0.71206 + 0.127209 2.27097 -3.01915 -0.0826443 0.674335 -0.733786 + 0.154284 2.27313 -3.01843 0.01283 0.70368 -0.710401 + 0.183282 2.27651 -3.01141 0.176401 0.660773 -0.729563 + 0.219971 2.27262 -3.00065 0.356232 0.630064 -0.690013 + 0.081358 2.25834 -3.01682 -0.384387 0.596691 -0.704419 + 0.077574 2.29006 -2.99257 -0.298043 0.685559 -0.664213 + 0.100472 2.29943 -2.99426 -0.264599 0.717063 -0.644832 + 0.123349 2.30196 -2.99864 -0.127208 0.703607 -0.69911 + 0.150424 2.30412 -2.99792 0.00570241 0.713725 -0.700403 + 0.058636 2.28719 -2.9876 -0.646188 0.564057 -0.514082 + 0.070556 2.34854 -2.89817 -0.609092 0.714759 -0.343694 + 0.089494 2.35141 -2.90314 -0.22653 0.849564 -0.476367 + 0.107449 2.35357 -2.90688 -0.199395 0.858703 -0.472091 + 0.048481 2.27233 -2.96812 -0.968842 0.220467 -0.112871 + 0.062361 2.3388 -2.8813 -0.945728 0.322515 -0.0397923 + 0.096877 2.42714 -2.74869 -0.576003 0.758634 -0.304459 + 0.110532 2.42881 -2.75158 -0.19695 0.880716 -0.430755 + 0.128487 2.43097 -2.75532 -0.176351 0.883779 -0.433398 + 0.062194 2.31767 -2.84469 -0.986202 0.0171115 0.164661 + 0.088662 2.40411 -2.7088 -0.985079 0.0213175 0.170777 + 0.088682 2.4174 -2.73182 -0.942924 0.33246 -0.0190805 + 0.116132 2.49623 -2.61905 -0.572733 0.752949 -0.324105 + 0.071664 2.30111 -2.81601 -0.923915 -0.211881 0.318571 + 0.098132 2.38756 -2.68012 -0.907022 -0.257442 0.333218 + 0.110491 2.47681 -2.5854 -0.984614 -0.00297979 0.17472 + 0.110511 2.49009 -2.60842 -0.939902 0.339566 -0.0357608 + 0.093681 2.28158 -2.78219 -0.821189 -0.376285 0.429021 + 0.114185 2.37528 -2.65887 -0.79993 -0.415573 0.432911 + 0.133134 2.45403 -2.54596 -0.783163 -0.441784 0.437586 + 0.117082 2.4663 -2.56721 -0.903004 -0.268295 0.335562 + 0.127755 2.54203 -2.48539 -0.943685 0.184185 0.274834 + 0.103209 2.20056 -2.84094 -0.688975 -0.449882 0.56826 + 0.11137 2.27078 -2.76348 -0.679841 -0.514178 0.522912 + 0.131873 2.36449 -2.64017 -0.647215 -0.556778 0.520683 + 0.145322 2.44721 -2.53414 -0.630956 -0.575294 0.520511 + 0.144697 2.52364 -2.45353 -0.793994 -0.260526 0.549272 + 0.130423 2.26376 -2.75131 -0.499731 -0.633473 0.590746 + 0.145505 2.36013 -2.63263 -0.472907 -0.660406 0.583287 + 0.158954 2.44285 -2.52659 -0.456109 -0.67579 0.579027 + 0.165601 2.51404 -2.43691 -0.47646 -0.51462 0.712848 + 0.156885 2.51682 -2.44171 -0.645485 -0.408996 0.645036 + 0.148124 2.18949 -2.82124 -0.326076 -0.658011 0.678746 + 0.15082 2.25873 -2.74261 -0.380528 -0.689831 0.615899 + 0.165902 2.35511 -2.62392 -0.360201 -0.705527 0.610317 + 0.172947 2.43967 -2.52109 -0.346157 -0.717571 0.604373 + 0.176551 2.18416 -2.81201 -0.151618 -0.726648 0.670071 + 0.179248 2.2534 -2.73338 -0.201631 -0.738453 0.643454 + 0.186376 2.35171 -2.61803 -0.186437 -0.748343 0.636572 + 0.193421 2.43627 -2.5152 -0.182371 -0.756111 0.62852 + 0.212844 2.14683 -2.85505 0.133067 -0.672037 0.728463 + 0.204628 2.18504 -2.81134 0.101424 -0.746688 0.657396 + 0.203814 2.25251 -2.73182 0.0662125 -0.761723 0.64451 + 0.210942 2.35081 -2.61647 0.0537737 -0.765219 0.64152 + 0.234516 2.1519 -2.85829 0.446414 -0.60538 0.658961 + 0.233398 2.18826 -2.81693 0.416562 -0.681186 0.602048 + 0.232584 2.25573 -2.73741 0.42393 -0.691837 0.584503 + 0.231537 2.35273 -2.61976 0.408628 -0.700848 0.584667 + 0.237464 2.09352 -2.90297 0.444641 -0.484327 0.753473 + 0.272273 2.10669 -2.92795 0.629365 -0.397285 0.667881 + 0.263892 2.16543 -2.87623 0.65527 -0.474676 0.587625 + 0.262774 2.2018 -2.83487 0.719145 -0.515406 0.466033 + 0.259031 2.26576 -2.75796 0.721058 -0.526535 0.450373 + 0.247373 2.01184 -2.95231 0.403912 -0.497653 0.767591 + 0.282181 2.02501 -2.97729 0.736136 -0.348947 0.579949 + 0.306553 2.13106 -2.94589 0.810757 -0.307662 0.498014 + 0.298173 2.1898 -2.89418 0.778725 -0.264114 0.569061 + 0.295555 2.2233 -2.87989 0.864391 -0.287674 0.412397 + 0.221486 1.96884 -2.98288 -0.484795 -0.751198 0.447968 + 0.260519 1.96946 -2.99115 0.370745 -0.762606 0.530075 + 0.28828 1.97721 -3.01739 0.724165 -0.508492 0.465854 + 0.326429 2.04764 -3.04775 0.88662 -0.239082 0.395909 + 0.278599 1.9612 -3.03327 0.439232 -0.799267 0.410181 + 0.306359 1.96895 -3.05951 0.729328 -0.544323 0.414479 + 0.332527 1.99984 -3.08785 0.891649 -0.243803 0.381474 + 0.342936 2.07228 -3.07681 0.985922 0.0249179 0.165339 + 0.32306 2.1557 -2.97495 0.978776 -0.0177249 0.204163 + 0.282463 1.94866 -3.05916 0.509809 -0.707417 0.489547 + 0.318694 1.96196 -3.09111 0.760424 -0.483414 0.433666 + 0.344862 1.99285 -3.11945 0.916704 -0.145094 0.372292 + 0.352907 2.03101 -3.14275 0.982521 0.0985971 0.157897 + 0.320039 1.9427 -3.11706 0.694908 -0.56921 0.439435 + 0.351305 1.97457 -3.14482 0.919293 -0.236531 0.314569 + 0.35935 2.01272 -3.16812 0.993852 0.081452 0.0749959 + 0.340334 2.07758 -3.14371 0.946487 0.321179 -0.0317194 + 0.330363 2.11885 -3.07778 0.956347 0.284882 -0.0651359 + 0.309425 1.89356 -3.16257 0.302947 -0.791075 0.531436 + 0.326539 1.90949 -3.16483 0.727698 -0.514849 0.453195 + 0.357805 1.94136 -3.1926 0.940288 -0.249177 0.23188 + 0.361012 1.96411 -3.22222 0.998481 0.0372942 -0.040564 + 0.346668 2.05602 -3.20424 0.937829 0.30651 -0.162877 + 0.331928 1.85133 -3.23751 0.306091 -0.812713 0.495788 + 0.349042 1.86726 -3.23978 0.870889 -0.358238 0.336477 + 0.353513 1.88831 -3.25743 0.985139 -0.119263 0.123603 + 0.35672 1.91106 -3.28705 0.989724 0.0466327 -0.135173 + 0.348331 2.00741 -3.25833 0.903131 0.287127 -0.319236 + 0.330911 1.83094 -3.27173 0.358215 -0.823468 0.43998 + 0.350931 1.84522 -3.28997 0.890751 -0.450789 0.0578904 + 0.355402 1.86627 -3.30763 0.98249 -0.123401 -0.139594 + 0.346496 1.90587 -3.32399 0.883539 0.195579 -0.425567 + 0.340923 1.83189 -3.29333 0.699523 -0.713746 0.0351388 + 0.345178 1.86107 -3.34457 0.892365 -0.124907 -0.433685 + 0.31537 1.81296 -3.32104 0.457845 -0.885437 -0.0798701 + 0.33517 1.84774 -3.34792 0.779244 -0.574442 -0.25059 + 0.328509 2.09876 -3.2101 0.790439 0.512685 -0.335203 + 0.322175 2.12033 -3.14958 0.90517 0.399851 -0.144176 + 0.30984 2.1579 -3.14358 0.821859 0.504243 -0.265115 + 0.308809 2.18477 -3.07768 0.825271 0.541897 -0.158983 + 0.321143 2.14719 -3.08367 0.94544 0.31208 -0.0935356 + 0.283755 2.18828 -3.13344 0.564403 0.765534 -0.308881 + 0.278273 2.20844 -3.08421 0.523013 0.809301 -0.267374 + 0.301868 2.21323 -3.00943 0.788454 0.563203 -0.247271 + 0.313911 2.189 -3.00771 0.924042 0.360955 -0.125928 + 0.323131 2.16066 -3.00182 0.971173 0.237335 -0.0222277 + 0.271332 2.2369 -3.01597 0.497154 0.772586 -0.394903 + 0.293166 2.25013 -2.96776 0.722421 0.469087 -0.508001 + 0.305209 2.2259 -2.96604 0.910251 0.363985 -0.197375 + 0.312744 2.21232 -2.94996 0.968041 0.247167 -0.0424808 + 0.266826 2.26223 -2.97946 0.488189 0.561875 -0.667808 + 0.284352 2.27957 -2.96062 0.639842 0.501999 -0.581893 + 0.29339 2.27383 -2.95069 0.848913 0.409085 -0.334657 + 0.300925 2.26025 -2.93461 0.947726 0.279217 -0.154444 + 0.312674 2.20736 -2.92309 0.977756 0.00806135 0.209591 + 0.220585 2.29972 -2.98628 0.340832 0.629452 -0.6983 + 0.258012 2.29166 -2.97232 0.450733 0.571723 -0.685546 + 0.275893 2.33922 -2.88201 0.595605 0.697231 -0.398904 + 0.28493 2.33348 -2.87208 0.817844 0.51008 -0.266364 + 0.292781 2.32328 -2.85759 0.923464 0.348876 -0.159686 + 0.183897 2.30362 -2.99704 0.150005 0.66498 -0.731642 + 0.218494 2.35289 -2.90569 0.273723 0.833447 -0.480043 + 0.255921 2.34483 -2.89174 0.393057 0.795372 -0.4614 + 0.270638 2.41874 -2.73413 0.562921 0.735598 -0.376851 + 0.154514 2.35691 -2.91266 -0.0158405 0.873646 -0.486305 + 0.187987 2.3564 -2.91177 0.111028 0.86511 -0.48914 + 0.223585 2.42948 -2.75274 0.250266 0.858612 -0.447385 + 0.250666 2.42435 -2.74386 0.366872 0.824302 -0.431198 + 0.130326 2.3561 -2.91125 -0.121138 0.870615 -0.476818 + 0.169028 2.43334 -2.75942 -0.0153648 0.892081 -0.451615 + 0.193077 2.43299 -2.75882 0.107115 0.884647 -0.45379 + 0.199087 2.50094 -2.6272 0.103591 0.878641 -0.466111 + 0.220089 2.49869 -2.62331 0.242581 0.856881 -0.454872 + 0.14484 2.43253 -2.75802 -0.106327 0.890275 -0.442837 + 0.175038 2.50128 -2.6278 -0.0138048 0.884837 -0.465695 + 0.181559 2.5606 -2.51754 -0.0126555 0.928296 -0.371626 + 0.196999 2.56038 -2.51717 0.0930237 0.922967 -0.373468 + 0.218001 2.55814 -2.51328 0.228898 0.905491 -0.35734 + 0.142106 2.49922 -2.62423 -0.168129 0.876718 -0.450663 + 0.158459 2.50078 -2.62693 -0.104242 0.882604 -0.458414 + 0.16498 2.56009 -2.51667 -0.100165 0.926753 -0.362072 + 0.183906 2.58021 -2.44528 -0.0294621 0.993425 0.110624 + 0.199345 2.58 -2.44491 0.0828306 0.991592 0.0994189 + 0.129787 2.4979 -2.62194 -0.188868 0.874047 -0.447627 + 0.154506 2.55909 -2.51493 -0.155421 0.923938 -0.349547 + 0.173431 2.57921 -2.44353 -0.0786497 0.987 0.140158 + 0.16462 2.56961 -2.42691 -0.558005 0.570445 0.60268 + 0.133396 2.55673 -2.51085 -0.535557 0.814656 -0.222517 + 0.142187 2.55777 -2.51265 -0.171673 0.92269 -0.345211 + 0.16464 2.57817 -2.44174 -0.418282 0.882038 0.216908 + 0.127775 2.55059 -2.50022 -0.879124 0.471016 0.0726969 + 0.134346 2.53153 -2.4672 -0.892653 -0.089424 0.441785 + 0.174971 2.56172 -2.41324 -0.449944 0.386282 0.805194 + 0.196838 2.55676 -2.40464 -0.0523309 0.265583 0.962667 + 0.225304 2.56665 -2.42497 0.590286 0.572147 0.569395 + 0.220791 2.57447 -2.43529 0.403568 0.859036 0.314943 + 0.216786 2.57669 -2.43918 0.243009 0.959452 0.142824 + 0.183688 2.55895 -2.40844 -0.287777 0.310995 0.905796 + 0.192744 2.50868 -2.4276 -0.194902 -0.596464 0.778617 + 0.2096 2.50807 -2.42651 0.0609267 -0.5966 0.800222 + 0.21004 2.55797 -2.4067 0.321175 0.359835 0.875994 + 0.179594 2.51086 -2.4314 -0.360888 -0.562538 0.743849 + 0.210276 2.43566 -2.51411 0.0515216 -0.769203 0.636925 + 0.222802 2.50928 -2.42857 0.410237 -0.503183 0.7606 + 0.230871 2.43758 -2.5174 0.396325 -0.701317 0.592521 + 0.249046 2.4439 -2.53038 0.68725 -0.545273 0.479963 + 0.240977 2.5156 -2.44155 0.720232 -0.307771 0.621725 + 0.256241 2.52427 -2.45982 0.873291 -0.109277 0.474786 + 0.263116 2.53481 -2.47807 0.942119 0.269204 0.199852 + 0.257984 2.36276 -2.64031 0.700476 -0.545316 0.460395 + 0.272686 2.45737 -2.55869 0.88059 -0.32745 0.342545 + 0.281624 2.37623 -2.66861 0.880159 -0.35035 0.320274 + 0.291723 2.39286 -2.69742 0.996291 0.0757537 0.0407992 + 0.279561 2.46791 -2.57694 0.993548 0.0884857 0.0709342 + 0.258603 2.54263 -2.4884 0.828547 0.559805 -0.0113391 + 0.291812 2.28726 -2.80297 0.895909 -0.322015 0.306028 + 0.301912 2.30389 -2.83178 0.996739 0.0627705 0.0506977 + 0.284832 2.40503 -2.71352 0.910551 0.381245 -0.159843 + 0.27267 2.48008 -2.59304 0.895134 0.419879 -0.14979 + 0.310056 2.24086 -2.9088 0.997111 0.056401 0.0508826 + 0.276981 2.41524 -2.72802 0.795297 0.548125 -0.258963 + 0.267232 2.48651 -2.60215 0.779501 0.573323 -0.252347 + 0.260889 2.49002 -2.60827 0.546615 0.748691 -0.375064 + 0.24916 2.55128 -2.50139 0.509127 0.820271 -0.260664 + 0.253165 2.54906 -2.4975 0.717119 0.686213 -0.121872 + 0.247171 2.49356 -2.61442 0.354357 0.827964 -0.434635 + 0.235442 2.55483 -2.50754 0.327443 0.884803 -0.331518 + 0.851447 0.667225 -3.01935 0.318816 -0.903238 -0.287258 + 0.869612 0.679716 -3.01335 0.820938 -0.567324 0.0648372 + 0.864359 0.676199 -3.00349 0.69588 -0.578278 0.425847 + 0.870874 0.684691 -3.02581 0.789372 -0.543081 -0.286279 + 0.8803 0.712776 -3.01494 0.944125 -0.288983 0.158482 + 0.872875 0.707806 -3.00101 0.774018 -0.30433 0.555229 + 0.846194 0.663707 -3.00949 0.210564 -0.976555 0.0447499 + 0.820959 0.673984 -3.02855 -0.422815 -0.775235 -0.469295 + 0.829948 0.675789 -3.03512 -0.171502 -0.756667 -0.630905 + 0.843098 0.674141 -3.03424 0.0384074 -0.784413 -0.619048 + 0.848286 0.671955 -3.03015 0.20868 -0.833725 -0.511229 + 0.852695 0.673826 -2.99489 0.408041 -0.55183 0.727314 + 0.838616 0.673413 -2.9905 0.194177 -0.541105 0.818231 + 0.832115 0.663293 -3.0051 -0.0671604 -0.987652 0.141536 + 0.861211 0.705433 -2.99241 0.469274 -0.289306 0.834317 + 0.841311 0.704848 -2.9862 0.220978 -0.267279 0.937939 + 0.829896 0.705212 -2.98435 -0.077535 -0.248857 0.965432 + 0.827201 0.673775 -2.98865 -0.11899 -0.537847 0.834603 + 0.827276 0.664309 -3.00642 -0.317975 -0.947168 0.0420103 + 0.889696 0.781507 -2.97762 0.762165 -0.364953 0.53471 + 0.871462 0.777799 -2.96418 0.445755 -0.408123 0.796704 + 0.851562 0.777212 -2.95797 0.210513 -0.411461 0.886783 + 0.897121 0.78648 -2.99155 0.94341 -0.276691 0.182812 + 0.923644 0.903215 -2.94988 0.945482 -0.26884 0.183818 + 0.91125 0.894913 -2.92662 0.754541 -0.378117 0.536372 + 0.893016 0.891206 -2.91318 0.448379 -0.439797 0.778161 + 0.899094 0.794259 -3.01104 0.97018 -0.174067 -0.168677 + 0.925618 0.910994 -2.96936 0.976833 -0.151923 -0.150722 + 0.948089 1.0292 -2.93081 0.982228 -0.13104 -0.134372 + 0.945272 1.01735 -2.90117 0.951211 -0.234074 0.201014 + 0.932878 1.00905 -2.87791 0.790174 -0.366975 0.490871 + 0.881562 0.717753 -3.02741 0.947249 -0.24901 -0.201777 + 0.894626 0.800945 -3.02631 0.902356 -0.0911452 -0.421244 + 0.918159 0.922154 -2.99485 0.911002 -0.0636841 -0.407455 + 0.94063 1.04036 -2.9563 0.938728 -0.0819218 -0.334782 + 0.867713 0.689422 -3.03662 0.685388 -0.5203 -0.509442 + 0.877095 0.72444 -3.04267 0.859736 -0.209409 -0.465835 + 0.886751 0.807467 -3.04036 0.75314 -0.0109769 -0.657768 + 0.910284 0.928679 -3.0089 0.764004 0.0181506 -0.644956 + 0.932832 1.0504 -2.97894 0.812524 -0.0100643 -0.58284 + 0.862675 0.693595 -3.0456 0.533849 -0.493039 -0.686963 + 0.872057 0.728612 -3.05166 0.701856 -0.167027 -0.692459 + 0.864723 0.731701 -3.05745 0.413359 -0.105228 -0.904467 + 0.879417 0.810558 -3.04614 0.465475 0.0842015 -0.881047 + 0.898042 0.933835 -3.01856 0.474358 0.118234 -0.872356 + 0.857487 0.695782 -3.0497 0.296759 -0.452413 -0.840985 + 0.846422 0.698094 -3.0527 0.077843 -0.423482 -0.902554 + 0.853658 0.734015 -3.06045 0.154806 -0.063675 -0.985891 + 0.86212 0.814174 -3.05083 0.183754 0.143665 -0.972417 + 0.833272 0.699745 -3.05357 -0.107014 -0.398356 -0.910967 + 0.835072 0.736347 -3.06168 -0.0967604 -0.0342941 -0.994717 + 0.843533 0.816506 -3.05207 -0.0783359 0.171052 -0.982143 + 0.849719 0.941343 -3.02531 -0.0830815 0.203479 -0.975548 + 0.880745 0.937452 -3.02325 0.191597 0.174301 -0.965873 + 0.819914 0.699651 -3.05013 -0.37952 -0.37678 -0.844986 + 0.821714 0.736253 -3.05825 -0.4175 -0.0164593 -0.908528 + 0.822651 0.81636 -3.04669 -0.4336 0.172664 -0.884408 + 0.810925 0.697845 -3.04357 -0.669432 -0.359414 -0.650141 + 0.809008 0.733702 -3.04896 -0.761481 -0.0171776 -0.64796 + 0.809946 0.813808 -3.03741 -0.778167 0.123668 -0.615762 + 0.807629 0.936939 -3.00444 -0.789425 0.144693 -0.59655 + 0.828837 0.941197 -3.01994 -0.43045 0.202061 -0.879707 + 0.804799 0.693068 -3.03042 -0.872678 -0.351701 -0.338731 + 0.802882 0.728925 -3.03582 -0.957643 -0.0363178 -0.285658 + 0.800369 0.806341 -3.01686 -0.969461 0.0372871 -0.242394 + 0.803635 0.686956 -3.0152 -0.92744 -0.370181 -0.0531234 + 0.801237 0.720285 -3.01431 -0.99601 -0.0639219 0.0622794 + 0.798724 0.797702 -2.99535 -0.996103 -0.0539146 0.069792 + 0.795305 0.91505 -2.94799 -0.995219 -0.0570797 0.0792543 + 0.798052 0.929471 -2.98389 -0.969257 0.0522117 -0.240448 + 0.819794 0.667873 -3.01333 -0.486103 -0.860276 -0.15372 + 0.807446 0.681117 -3.00185 -0.834553 -0.416012 0.361185 + 0.805048 0.714447 -3.00096 -0.881252 -0.124895 0.455846 + 0.804682 0.788575 -2.97448 -0.872765 -0.186694 0.451028 + 0.814927 0.677555 -2.99494 -0.659907 -0.466328 0.589118 + 0.815622 0.709411 -2.99118 -0.65473 -0.166237 0.737356 + 0.815256 0.783538 -2.96471 -0.665398 -0.278073 0.692763 + 0.818915 0.897514 -2.9108 -0.665063 -0.307959 0.680333 + 0.801264 0.905924 -2.92711 -0.874384 -0.202992 0.440735 + 0.822361 0.674792 -2.98997 -0.462891 -0.501642 0.730813 + 0.823056 0.706647 -2.98622 -0.458703 -0.203063 0.865076 + 0.826877 0.779219 -2.95694 -0.466963 -0.338022 0.817121 + 0.833718 0.777782 -2.95507 -0.0954386 -0.399931 0.911563 + 0.841954 0.890798 -2.89992 -0.0969014 -0.441116 0.892203 + 0.830536 0.893194 -2.90304 -0.470514 -0.373588 0.799405 + 0.836878 1.00552 -2.84532 -0.477814 -0.391402 0.786446 + 0.8192 1.01195 -2.85771 -0.672451 -0.319296 0.667728 + 0.859798 0.890231 -2.90282 0.202751 -0.452229 0.868551 + 0.875466 1.00218 -2.84643 0.200141 -0.477651 0.855449 + 0.848297 1.00313 -2.84221 -0.105753 -0.466369 0.878246 + 0.908684 1.00316 -2.85679 0.470976 -0.464217 0.750123 + 0.931966 1.11365 -2.80007 0.488923 -0.465928 0.737472 + 0.885064 1.11308 -2.78374 0.204333 -0.488674 0.848201 + 0.857895 1.11402 -2.77952 -0.139748 -0.468734 0.872215 + 0.95616 1.11954 -2.82119 0.869869 -0.337797 0.359473 + 0.971665 1.21119 -2.77979 0.891112 -0.313301 0.328271 + 0.944055 1.19838 -2.75499 0.5148 -0.458275 0.724545 + 0.897154 1.19781 -2.73866 0.200184 -0.475786 0.856478 + 0.960425 1.13325 -2.85572 0.981694 -0.184667 0.0466304 + 0.975929 1.22491 -2.81432 0.982269 -0.183722 0.0373476 + 0.988035 1.29495 -2.78707 0.984449 -0.169569 0.0458892 + 0.983141 1.28138 -2.74361 0.887274 -0.273865 0.371138 + 0.955531 1.26856 -2.7188 0.500711 -0.389928 0.772816 + 0.963241 1.14511 -2.88537 0.987696 -0.155803 0.0135023 + 0.978886 1.23475 -2.85543 0.983966 -0.178071 0.0100942 + 0.990991 1.30479 -2.82818 0.985617 -0.167205 0.0245254 + 1.0024 1.37945 -2.80967 0.985122 -0.168223 0.035168 + 0.998719 1.37202 -2.76552 0.985564 -0.147887 0.0824256 + 0.965306 1.15935 -2.92069 0.974438 -0.121203 -0.189156 + 0.98095 1.249 -2.89075 0.981216 -0.151818 -0.119026 + 0.991593 1.30264 -2.87929 0.983173 -0.146881 -0.108614 + 1.003 1.3773 -2.86079 0.988694 -0.0982873 -0.113239 + 0.957508 1.16939 -2.94333 0.884532 -0.0546885 -0.463262 + 0.973979 1.25621 -2.92398 0.908274 -0.0804567 -0.410566 + 0.984621 1.30985 -2.91253 0.9153 -0.069382 -0.396751 + 0.994655 1.36584 -2.89536 0.92607 -0.01737 -0.376951 + 0.94395 1.17894 -2.96344 0.635193 0.0479606 -0.770863 + 0.960421 1.26577 -2.94409 0.657157 0.014158 -0.753621 + 0.967627 1.31704 -2.93891 0.655652 0.0455098 -0.753691 + 0.977661 1.37303 -2.92174 0.726886 0.066789 -0.683503 + 0.920591 1.05555 -2.98861 0.523067 0.092324 -0.847276 + 0.893041 1.06284 -2.99979 0.250513 0.13904 -0.958077 + 0.916401 1.18623 -2.97462 0.331534 0.119403 -0.935857 + 0.923632 1.28072 -2.96087 0.333564 0.0919017 -0.938237 + 0.930838 1.33198 -2.95569 0.32228 0.100601 -0.941284 + 0.862015 1.06673 -3.00185 -0.0930138 0.149708 -0.984345 + 0.863031 1.19676 -2.98754 -0.0262476 0.142536 -0.989442 + 0.870262 1.29124 -2.97378 -0.0348798 0.14459 -0.988877 + 0.867606 1.36449 -2.96342 -0.0869442 0.168138 -0.981922 + 0.829019 1.06609 -2.99239 -0.466055 0.1694 -0.868387 + 0.830034 1.19612 -2.97807 -0.578483 0.123211 -0.806335 + 0.82689 1.29929 -2.95643 -0.622048 0.116936 -0.774198 + 0.824235 1.37254 -2.94607 -0.619418 0.136247 -0.773148 + 0.878915 1.42316 -2.95133 -0.0380619 0.219382 -0.974896 + 0.807811 1.06184 -2.97689 -0.804075 0.136537 -0.578637 + 0.803656 1.18343 -2.94072 -0.892393 0.0765409 -0.444721 + 0.800511 1.2866 -2.91908 -0.905135 0.056257 -0.421386 + 0.79373 1.37437 -2.89337 -0.91074 -0.00292007 -0.412971 + 0.794835 1.04874 -2.94176 -0.979457 0.0351137 -0.198571 + 0.79068 1.17034 -2.9056 -0.98229 0.0251107 -0.185674 + 0.787186 1.25993 -2.87321 -0.988512 -0.00607771 -0.151021 + 0.792088 1.03432 -2.90586 -0.995417 -0.0572252 0.0766229 + 0.789111 1.14932 -2.85386 -0.992042 -0.0730683 0.102535 + 0.785618 1.23892 -2.82147 -0.991297 -0.0667583 0.113465 + 0.785555 1.27293 -2.80579 -0.987158 -0.13056 0.0920463 + 0.780405 1.34771 -2.8475 -0.977326 -0.0775253 -0.197035 + 0.801549 1.02036 -2.87402 -0.869399 -0.215553 0.444615 + 0.798572 1.13536 -2.82202 -0.875234 -0.210778 0.43536 + 0.799455 1.2115 -2.78489 -0.864011 -0.211666 0.456818 + 0.823078 1.12337 -2.79861 -0.676623 -0.321179 0.66259 + 0.823961 1.19951 -2.76147 -0.680204 -0.303292 0.667336 + 0.826657 1.2436 -2.73972 -0.655104 -0.327709 0.680768 + 0.799393 1.24551 -2.7692 -0.852055 -0.262258 0.453015 + 0.840756 1.11695 -2.78622 -0.510907 -0.384712 0.768746 + 0.8458 1.19538 -2.74415 -0.512158 -0.366866 0.776598 + 0.848495 1.23947 -2.7224 -0.525255 -0.346325 0.777281 + 0.848341 1.31858 -2.68862 -0.427432 -0.373272 0.823389 + 0.814154 1.31359 -2.71211 -0.596345 -0.401894 0.694877 + 0.862939 1.19246 -2.73746 -0.151772 -0.451115 0.879466 + 0.86694 1.2398 -2.71272 -0.156535 -0.411 0.898096 + 0.866786 1.3189 -2.67895 -0.147481 -0.343734 0.927414 + 0.901155 1.24515 -2.71393 0.176547 -0.412627 0.893627 + 0.910615 1.32677 -2.68468 0.203045 -0.35524 0.912457 + 0.88467 1.4419 -2.63615 0.0975733 -0.29901 0.949248 + 0.823145 1.42055 -2.64281 -0.254054 -0.36839 0.894285 + 0.788958 1.41557 -2.6663 -0.658524 -0.357761 0.662083 + 0.964992 1.35018 -2.68955 0.541089 -0.285627 0.790974 + 0.928499 1.44977 -2.64188 0.372655 -0.23721 0.89714 + 0.993825 1.35845 -2.72205 0.911373 -0.171806 0.374007 + 0.969471 1.43614 -2.67626 0.68521 -0.154782 0.711709 + 0.971492 1.50371 -2.66235 0.686943 -0.0475973 0.725151 + 0.93052 1.51733 -2.62797 0.380104 0.0317999 0.924397 + 0.998304 1.44441 -2.70876 0.883783 -0.132819 0.44865 + 0.983836 1.51751 -2.67543 0.757126 0.0418961 0.651924 + 0.940298 1.55651 -2.64549 0.447017 0.349456 0.823442 + 0.912714 1.52633 -2.6262 -0.240188 0.318376 0.917031 + 1.01339 1.45412 -2.75603 0.978367 -0.121227 0.167636 + 1.01435 1.51286 -2.74407 0.982578 0.0926606 0.161106 + 0.999264 1.50315 -2.6968 0.879387 -0.0311814 0.475086 + 0.979896 1.57252 -2.68028 0.716569 0.396413 0.573922 + 0.952642 1.57031 -2.65857 0.464902 0.418634 0.780135 + 1.01708 1.46156 -2.80018 0.998404 -0.0315648 -0.0468365 + 1.0123 1.53068 -2.77243 0.967634 0.250998 -0.0261525 + 0.995324 1.55816 -2.70165 0.900846 0.277037 0.334255 + 0.993265 1.57599 -2.73001 0.866177 0.485478 0.118526 + 0.965057 1.60113 -2.69687 0.535909 0.752794 0.382234 + 1.01122 1.47018 -2.83495 0.973282 0.0795468 -0.215392 + 1.00644 1.53931 -2.8072 0.930777 0.311429 -0.191484 + 1.00287 1.45872 -2.86952 0.917485 0.0800331 -0.389635 + 0.990762 1.54811 -2.84422 0.841094 0.39288 -0.371762 + 0.983454 1.59551 -2.77394 0.794316 0.604476 -0.0605886 + 0.955245 1.62066 -2.7408 0.484304 0.859181 0.165101 + 0.937803 1.59891 -2.67516 0.247132 0.744325 0.620408 + 0.971629 1.40838 -2.92362 0.655861 0.129806 -0.743637 + 0.996841 1.49407 -2.87139 0.903119 0.203476 -0.378119 + 0.964448 1.56129 -2.87568 0.546169 0.541281 -0.639308 + 0.967775 1.60432 -2.81096 0.657387 0.695881 -0.289123 + 0.942147 1.39065 -2.9436 0.374446 0.141876 -0.91633 + 0.970527 1.50724 -2.90286 0.590546 0.324545 -0.738868 + 0.941046 1.48951 -2.92284 0.286459 0.288637 -0.913581 + 0.934877 1.53478 -2.90699 0.18499 0.476648 -0.85941 + 0.947043 1.59822 -2.84888 0.316259 0.758959 -0.569175 + 0.872747 1.46842 -2.93547 0.154293 0.365492 -0.917938 + 0.917472 1.57171 -2.88019 0.184943 0.609851 -0.770634 + 0.925879 1.62295 -2.81582 0.0718792 0.909705 -0.408988 + 0.946612 1.62905 -2.77789 0.371293 0.925037 -0.0802927 + 0.911681 1.62195 -2.7056 0.117381 0.907897 0.402425 + 0.854955 1.47201 -2.93872 0.0327013 0.263722 -0.964044 + 0.89968 1.5753 -2.88344 0.280801 0.555829 -0.782435 + 0.905845 1.6127 -2.8457 0.327695 0.84772 -0.417117 + 0.910225 1.62389 -2.80914 -0.0735407 0.960341 -0.268956 + 0.903047 1.63034 -2.7427 0.0882651 0.99462 0.054223 + 0.827063 1.478 -2.93291 -0.480537 0.0809781 -0.873228 + 0.863711 1.54912 -2.92 0.268319 0.380992 -0.884788 + 0.869875 1.58653 -2.88225 0.057822 0.809352 -0.584471 + 0.879614 1.62164 -2.78774 -0.187019 0.951832 -0.242983 + 0.883994 1.63283 -2.75118 -0.0812795 0.994301 -0.0689816 + 0.805951 1.4555 -2.91233 -0.744406 0.0263358 -0.667208 + 0.792252 1.56646 -2.87796 -0.642678 0.398049 -0.654616 + 0.812857 1.57691 -2.88462 -0.389562 0.605829 -0.693695 + 0.835818 1.55511 -2.91418 -0.324844 0.469796 -0.820834 + 0.850232 1.58508 -2.88458 -0.0153157 0.804865 -0.59326 + 0.775446 1.45734 -2.85964 -0.898482 -0.0583242 -0.435118 + 0.77114 1.54396 -2.85738 -0.81786 0.134304 -0.559524 + 0.775063 1.59265 -2.82945 -0.513242 0.749024 -0.418982 + 0.795668 1.6031 -2.83612 -0.345461 0.910066 -0.22899 + 0.827271 1.60687 -2.85503 -0.0618566 0.900525 -0.430381 + 0.768206 1.41808 -2.82947 -0.948919 -0.135946 -0.284729 + 0.746557 1.53971 -2.81573 -0.906071 0.00205724 -0.42312 + 0.73274 1.58453 -2.77975 -0.825055 0.557522 -0.0919416 + 0.757324 1.58878 -2.8214 -0.614104 0.647941 -0.450609 + 0.769096 1.59685 -2.77483 -0.114859 0.990661 0.0734657 + 0.773356 1.3433 -2.78776 -0.966627 -0.238336 -0.0939651 + 0.739316 1.50045 -2.78555 -0.944983 -0.133906 -0.298457 + 0.726742 1.56403 -2.75754 -0.931549 0.260433 0.253754 + 0.751357 1.59298 -2.76679 -0.240599 0.890541 0.386068 + 0.78689 1.3155 -2.7416 -0.840496 -0.346318 0.416689 + 0.765923 1.35168 -2.76479 -0.936364 -0.35089 0.00990299 + 0.731883 1.50883 -2.76259 -0.984198 -0.114301 -0.135238 + 0.733332 1.50676 -2.73257 -0.943657 -0.00553194 0.33088 + 0.745359 1.57248 -2.74458 -0.697359 0.536889 0.474806 + 0.75944 1.41539 -2.71442 -0.852801 -0.309414 0.420705 + 0.738473 1.45156 -2.73762 -0.96379 -0.19406 0.18289 + 0.741668 1.50855 -2.71809 -0.909563 0.0675171 0.410045 + 0.753695 1.57426 -2.7301 -0.816777 0.482081 0.316975 + 0.772282 1.59501 -2.73269 -0.30776 0.942392 0.131077 + 0.777016 1.48688 -2.64992 -0.745128 -0.120863 0.655879 + 0.747498 1.4867 -2.69804 -0.93 -0.0932768 0.355526 + 0.760085 1.57115 -2.69963 -0.771774 0.448889 0.450404 + 0.778672 1.5919 -2.70222 -0.355355 0.879471 0.316628 + 0.793833 1.59155 -2.73908 0.0471479 0.99863 0.0226985 + 0.79043 1.50192 -2.63522 -0.601224 0.0167222 0.798906 + 0.765915 1.5493 -2.67958 -0.838299 0.223582 0.497258 + 0.779329 1.56435 -2.66489 -0.6216 0.494891 0.607204 + 0.796501 1.58053 -2.67512 -0.124875 0.83979 0.528354 + 0.811174 1.5928 -2.7105 0.00448316 0.984772 0.17379 + 0.814638 1.48823 -2.62312 -0.301328 -0.130506 0.944547 + 0.801154 1.54689 -2.63927 -0.382496 0.43066 0.817453 + 0.876163 1.50957 -2.61646 0.122089 0.0101106 0.992468 + 0.825363 1.5332 -2.62717 -0.192875 0.325132 0.925791 + 0.818326 1.56307 -2.64951 0.0231986 0.761024 0.648309 + 0.829003 1.58143 -2.6834 0.139615 0.876151 0.461375 + 0.891883 1.52196 -2.6212 0.294532 0.437669 0.849528 + 0.841083 1.54559 -2.63191 0.0869169 0.673175 0.734357 + 0.854762 1.55527 -2.65968 0.246094 0.802935 0.542894 + 0.849585 1.5812 -2.68906 0.028948 0.799637 0.599785 + 0.828368 1.59373 -2.71497 -0.146724 0.943731 0.296383 + 0.906756 1.51837 -2.62531 0.241505 0.178512 0.953839 + 0.892392 1.53419 -2.64619 0.365591 0.808455 0.461241 + 0.877519 1.53779 -2.64208 0.3016 0.825909 0.476352 + 0.875344 1.55504 -2.66534 0.0528466 0.701093 0.711109 + 0.900577 1.5312 -2.64834 -0.139518 0.805828 0.575479 + 0.898192 1.53722 -2.65553 -0.107253 0.322486 0.940478 + 0.890007 1.54021 -2.65338 0.225765 0.663121 0.713653 + 0.882551 1.55726 -2.66602 -0.230452 0.497604 0.836231 + 0.855766 1.58495 -2.69256 -0.287616 0.642058 0.710661 + 0.906535 1.53917 -2.64923 -0.819228 0.0445195 0.571737 + 0.897214 1.54243 -2.65405 -0.345225 0.0770661 0.93535 + 0.894531 1.56815 -2.66602 -0.482399 0.359026 0.798994 + 0.867746 1.59585 -2.69256 -0.452473 0.486781 0.747203 + 0.905557 1.54438 -2.64776 -0.730401 0.130773 0.670383 + 0.922492 1.56551 -2.64372 -0.0548526 0.535001 0.843069 + 0.911465 1.58928 -2.66198 -0.213208 0.576573 0.788737 + 0.885343 1.61232 -2.69242 -0.270854 0.684834 0.676492 + 0.867521 1.62475 -2.71665 -0.380702 0.828308 0.411063 + 0.849924 1.60828 -2.71679 -0.566754 0.663429 0.488521 + 0.834549 1.59748 -2.71847 -0.444904 0.799796 0.402973 + 0.887393 1.63128 -2.73602 -0.00295766 0.9891 0.147214 + 0.864122 1.6263 -2.73181 -0.418768 0.898419 0.132196 + 0.834941 1.60577 -2.74159 -0.591739 0.774122 0.224898 + 0.819566 1.59496 -2.74326 -0.424025 0.889941 0.16795 + 0.811027 1.59247 -2.74355 -0.158013 0.985071 0.0683118 + 0.859971 1.62019 -2.79007 -0.00638076 0.975498 -0.219917 + 0.85349 1.62504 -2.76183 -0.225497 0.974133 0.0147131 + 0.824309 1.60451 -2.7716 -0.574778 0.802247 0.161339 + 0.811736 1.59684 -2.77495 -0.409385 0.900436 0.147034 + 0.82079 1.61174 -2.82678 -0.344921 0.935104 -0.0813087 + 0.808217 1.60406 -2.83014 -0.287445 0.956637 0.0471191 + 0.803196 1.59435 -2.77524 -0.197297 0.972608 0.122916 + 0.790647 1.59339 -2.78122 0.0407557 0.991065 0.127002 + -0.987946 0.54202 -2.82794 -0.314751 -0.758104 -0.571148 + -0.992571 0.541618 -2.82296 -0.569927 -0.754823 -0.324693 + -1.00242 0.583273 -2.8373 -0.815654 -0.202245 -0.542039 + -0.976634 0.541924 -2.83037 0.100624 -0.766488 -0.634327 + -0.994128 0.540551 -2.81285 -0.642338 -0.764717 0.0510794 + -1.00847 0.581138 -2.81623 -0.983805 -0.178851 -0.0118184 + -1.00691 0.582204 -2.82634 -0.943677 -0.181814 -0.276437 + -0.997797 0.583674 -2.84229 -0.571961 -0.227226 -0.788181 + -0.986215 0.583895 -2.84767 -0.304596 -0.252698 -0.918349 + -1.00283 0.663444 -2.84326 -0.835847 -0.00616028 -0.548928 + -0.994011 0.664209 -2.85276 -0.576813 0.0030646 -0.816871 + -0.98243 0.664431 -2.85815 -0.313747 0.00128624 -0.949506 + -0.974903 0.583799 -2.8501 0.0217153 -0.287315 -0.95759 + -1.00732 0.662375 -2.83229 -0.959787 -0.0229856 -0.279786 + -1.01479 0.756517 -2.81332 -0.95891 -0.0201159 -0.282998 + -1.00774 0.761453 -2.82961 -0.833612 0.0594109 -0.549146 + -0.998922 0.76222 -2.83911 -0.577752 0.132626 -0.805366 + -1.01029 0.66034 -2.81301 -0.998687 -0.0512168 -0.00136146 + -1.01776 0.754481 -2.79404 -0.994497 -0.10342 -0.0167141 + -1.03214 0.858538 -2.75211 -0.985839 -0.16284 -0.0400509 + -1.02803 0.86965 -2.77662 -0.948941 -0.0583881 -0.310003 + -1.02098 0.874586 -2.79292 -0.830327 0.0456073 -0.555407 + -1.0061 0.579608 -2.80309 -0.923809 -0.190563 0.332058 + -1.00792 0.65881 -2.79987 -0.938901 -0.0955369 0.330663 + -1.01401 0.748649 -2.77438 -0.929067 -0.20081 0.310661 + -1.00127 0.578569 -2.79511 -0.709695 -0.217832 0.669986 + -0.998712 0.656831 -2.78467 -0.70851 -0.156058 0.688229 + -1.0048 0.746669 -2.75918 -0.699229 -0.308102 0.645098 + -1.01553 0.844499 -2.71281 -0.693573 -0.408079 0.593657 + -1.02839 0.852705 -2.73245 -0.922258 -0.280452 0.266057 + -0.989302 0.539512 -2.80488 -0.405061 -0.796087 0.449633 + -0.987738 0.577242 -2.78706 -0.369587 -0.249088 0.895187 + -0.985181 0.655504 -2.77662 -0.378359 -0.202362 0.903269 + -0.983544 0.743223 -2.74693 -0.368515 -0.363068 0.855791 + -0.964997 0.54048 -2.8207 0.474206 -0.819737 -0.321187 + -0.965146 0.539398 -2.81088 0.491292 -0.86562 0.0966106 + -0.969837 0.538851 -2.80456 0.327982 -0.876319 0.352835 + -0.975509 0.538725 -2.80177 0.0185124 -0.842729 0.53802 + -0.958226 0.58268 -2.84484 0.432045 -0.335508 -0.837121 + -0.946589 0.581236 -2.83517 0.676192 -0.372969 -0.635342 + -0.93824 0.5794 -2.82101 0.867774 -0.417927 -0.268896 + -0.93839 0.578319 -2.81119 0.895972 -0.43483 0.0903149 + -0.944182 0.663127 -2.85751 0.467419 -0.0700287 -0.881258 + -0.921991 0.660374 -2.83908 0.74617 -0.123118 -0.654273 + -0.913643 0.658539 -2.82492 0.937074 -0.192651 -0.291167 + -0.96086 0.664247 -2.86277 0.0563659 -0.0250413 -0.998096 + -0.959166 0.764559 -2.85158 0.0537748 0.187621 -0.980768 + -0.932966 0.762391 -2.84343 0.485805 0.152339 -0.860689 + -0.910775 0.759637 -2.825 0.756753 0.0901468 -0.647456 + -0.980736 0.764743 -2.84695 -0.304099 0.179204 -0.935633 + -0.990514 0.882944 -2.81263 -0.30217 0.236289 -0.923505 + -0.960445 0.886619 -2.81796 0.0612607 0.275325 -0.959397 + -0.934244 0.884451 -2.80981 0.476268 0.247302 -0.843807 + -1.0087 0.88042 -2.8048 -0.569491 0.158833 -0.806506 + -1.02948 0.984916 -2.773 -0.513901 0.119045 -0.849549 + -0.999928 0.98995 -2.78141 -0.246516 0.216802 -0.944577 + -0.969859 0.993627 -2.78674 0.0678551 0.286352 -0.955719 + -1.04177 0.979082 -2.76111 -0.809357 -0.0504991 -0.585142 + -1.07819 1.07044 -2.72921 -0.786941 -0.0644471 -0.613653 + -1.05317 1.08021 -2.74869 -0.467517 0.108565 -0.877292 + -1.02362 1.08524 -2.75711 -0.136557 0.231771 -0.963138 + -1.05198 0.967463 -2.73606 -0.93176 -0.161194 -0.32533 + -1.0884 1.05881 -2.70415 -0.934144 -0.221527 -0.279822 + -1.1102 1.13024 -2.67529 -0.962788 -0.170737 -0.209495 + -1.09758 1.13993 -2.71023 -0.803817 -0.0485517 -0.592892 + -1.07256 1.1497 -2.72971 -0.451082 0.111016 -0.885551 + -1.05609 0.956349 -2.71154 -0.959942 -0.271394 -0.0696948 + -1.08784 1.03906 -2.65981 -0.927381 -0.334875 -0.1668 + -1.10964 1.11049 -2.63095 -0.973536 -0.159467 -0.1637 + -1.04433 0.934346 -2.68809 -0.884365 -0.395589 0.247806 + -1.07608 1.01706 -2.63636 -0.757746 -0.613392 -0.222645 + -1.10668 1.01755 -2.59929 -0.828392 -0.202933 -0.522097 + -1.11904 1.09943 -2.58885 -0.927921 -0.0735344 -0.365452 + -1.11888 1.17747 -2.60983 -0.982429 -0.141328 -0.121902 + -1.03147 0.926142 -2.66845 -0.694617 -0.511805 0.505532 + -1.03839 0.968117 -2.63106 -0.684226 -0.727598 0.0493492 + -1.0459 0.957702 -2.60835 -0.184515 -0.37947 -0.906618 + -1.0836 1.00664 -2.61366 -0.592849 -0.434478 -0.678056 + -0.999984 0.910055 -2.65635 -0.372424 -0.582502 0.72249 + -1.00689 0.95203 -2.61896 -0.331301 -0.938719 0.0951107 + -1.01399 0.943052 -2.6019 0.129016 -0.445886 -0.885743 + -1.04918 0.898729 -2.61392 -0.0529593 0.0569046 -0.996974 + -1.07173 0.899269 -2.60639 -0.405539 -0.00624258 -0.914056 + -0.994271 0.841053 -2.70056 -0.365717 -0.47914 0.797919 + -0.963302 0.907958 -2.64809 -0.151555 -0.634684 0.757764 + -0.968171 0.946924 -2.60376 0.0340642 -0.987818 0.151841 + -0.97527 0.937947 -2.5867 0.418812 -0.50291 -0.756094 + -1.01727 0.884079 -2.60747 0.307674 0.0320804 -0.950951 + -0.957588 0.838956 -2.6923 -0.118971 -0.495253 0.860564 + -0.935371 0.839004 -2.69171 0.208339 -0.498087 0.841727 + -0.930745 0.916726 -2.63758 0.198954 -0.67443 0.711028 + -0.935615 0.955693 -2.59324 0.395482 -0.858067 0.32759 + -0.957243 0.741721 -2.74101 -0.124383 -0.381788 0.915842 + -0.935026 0.741769 -2.74041 0.211622 -0.38868 0.896741 + -0.920299 0.842552 -2.6982 0.549024 -0.438814 0.711347 + -0.915673 0.920278 -2.64408 0.57365 -0.56935 0.588868 + -0.895865 0.994424 -2.56815 0.752412 -0.588411 0.296054 + -0.958881 0.654004 -2.7707 -0.120793 -0.232502 0.965066 + -0.944736 0.653521 -2.77047 0.216364 -0.27377 0.937143 + -0.924211 0.742007 -2.74573 0.54312 -0.34933 0.763537 + -0.973945 0.576454 -2.78396 -0.130357 -0.2819 0.950547 + -0.9598 0.575973 -2.78373 0.206821 -0.349201 0.913938 + -0.954129 0.576099 -2.78652 0.518299 -0.395967 0.758008 + -0.933921 0.65376 -2.77579 0.54817 -0.289151 0.784793 + -0.91239 0.745039 -2.75548 0.723318 -0.306289 0.618869 + -0.946598 0.576588 -2.79314 0.686164 -0.416993 0.596068 + -0.92639 0.654249 -2.78241 0.720128 -0.286822 0.631783 + -0.903445 0.746082 -2.76754 0.884646 -0.241201 0.399029 + -0.896025 0.852877 -2.72309 0.891074 -0.267069 0.366963 + -0.908478 0.845585 -2.70795 0.727199 -0.366495 0.580398 + -0.941907 0.577135 -2.79946 0.819992 -0.429957 0.377822 + -0.917445 0.655293 -2.79446 0.875863 -0.274623 0.396796 + -0.897932 0.751349 -2.78499 0.98174 -0.150554 0.116279 + -0.913927 0.656476 -2.8062 0.962182 -0.246831 0.11524 + -0.897648 0.753411 -2.80372 0.961171 -0.0370835 -0.273451 + -0.890144 0.868814 -2.76442 0.960253 0.0147177 -0.278741 + -0.890512 0.858144 -2.74054 0.983523 -0.144417 0.108748 + -0.903272 0.875039 -2.78571 0.760855 0.163609 -0.627959 + -0.896103 0.980307 -2.74972 0.735065 0.154117 -0.660248 + -0.877059 0.968103 -2.72052 0.9489 -0.0632538 -0.309173 + -0.877426 0.957433 -2.69664 0.977035 -0.203195 0.0641377 + -0.885224 0.944204 -2.66774 0.895272 -0.314113 0.315945 + -0.927075 0.98972 -2.77383 0.483844 0.279546 -0.829306 + -0.929983 1.08219 -2.74118 0.396745 0.276298 -0.875359 + -0.870745 1.07144 -2.71135 0.692486 0.143328 -0.707051 + -0.8517 1.05924 -2.68214 0.973654 -0.115735 -0.196477 + -0.972767 1.0861 -2.75409 0.18173 0.303736 -0.935264 + -0.982147 1.15875 -2.73476 0.176171 0.238138 -0.95512 + -0.92431 1.14823 -2.71871 0.39196 0.236135 -0.889161 + -0.865072 1.13749 -2.68888 0.675691 0.15232 -0.721276 + -1.033 1.1579 -2.73778 -0.0890978 0.208882 -0.973874 + -1.04063 1.20456 -2.72877 -0.0802344 0.17825 -0.980709 + -0.985439 1.21494 -2.72337 0.171817 0.205438 -0.96347 + -0.927602 1.20442 -2.70733 0.379789 0.193926 -0.904518 + -1.08019 1.19637 -2.72071 -0.446707 0.1081 -0.888125 + -1.05709 1.25883 -2.71753 -0.13398 0.195056 -0.971598 + -1.0019 1.26921 -2.71213 0.0225795 0.210716 -0.977286 + -0.984992 1.30116 -2.70562 0.140018 0.185003 -0.972712 + -1.10738 1.18459 -2.69952 -0.805599 -0.0198727 -0.592128 + -1.11733 1.24921 -2.68462 -0.794659 0.0311664 -0.606255 + -1.09014 1.26099 -2.7058 -0.485336 0.12697 -0.865059 + -1.07067 1.34969 -2.69638 -0.180003 0.238498 -0.954315 + -1.05377 1.38164 -2.68987 -0.106737 0.242077 -0.964368 + -1.12001 1.17491 -2.66458 -0.972212 -0.163175 -0.167862 + -1.13216 1.23954 -2.65219 -0.974899 -0.0986769 -0.199586 + -1.12611 1.3255 -2.66586 -0.836427 0.12502 -0.533629 + -1.10373 1.35185 -2.68466 -0.564978 0.229499 -0.792546 + -1.13103 1.2421 -2.59744 -0.966651 -0.194082 -0.167089 + -1.14094 1.31582 -2.63344 -0.948642 0.019755 -0.315733 + -1.12174 1.38945 -2.64227 -0.842108 0.353837 -0.407005 + -1.09936 1.4158 -2.66107 -0.672427 0.52691 -0.519815 + -1.07108 1.41769 -2.67773 -0.276262 0.482141 -0.831396 + -1.14208 1.23005 -2.55351 -0.871477 -0.182165 -0.45535 + -1.15182 1.31268 -2.59848 -0.95788 -0.0562028 -0.281614 + -1.14786 1.37391 -2.57907 -0.920862 0.340431 -0.190051 + -1.13698 1.37706 -2.61403 -0.904803 0.30131 -0.300904 + -1.12827 1.16642 -2.56773 -0.916539 -0.061185 -0.395238 + -1.16281 1.20696 -2.51987 -0.92866 -0.141896 -0.342717 + -1.16287 1.30063 -2.55454 -0.953061 -0.0623715 -0.296284 + -1.14901 1.14333 -2.53409 -0.931537 -0.0856704 -0.353411 + -1.16746 1.19466 -2.47423 -0.981166 -0.192589 -0.0149439 + -1.17659 1.27611 -2.50215 -0.980289 -0.0477509 -0.191711 + -1.17577 1.33363 -2.48915 -0.97345 0.196955 -0.116637 + -1.16205 1.35816 -2.54154 -0.934091 0.318295 -0.16175 + -1.13759 1.0955 -2.55319 -0.933664 -0.0882777 -0.347099 + -1.14487 1.08771 -2.51268 -0.982363 -0.17545 -0.0646565 + -1.15628 1.13553 -2.49358 -0.979493 -0.197892 -0.0378522 + -1.16203 1.19729 -2.42483 -0.96313 -0.212242 0.165327 + -1.18124 1.2638 -2.45652 -0.995258 -0.0882707 0.0408512 + -1.12524 1.01362 -2.56363 -0.932185 -0.114105 -0.343527 + -1.13119 1.0094 -2.5323 -0.985767 -0.153511 -0.0685375 + -1.14009 1.08092 -2.46934 -0.968452 -0.216815 0.122851 + -1.15085 1.13817 -2.44417 -0.960275 -0.239364 0.143447 + -1.09481 0.910179 -2.59202 -0.704523 -0.0747894 -0.705729 + -1.10833 0.908268 -2.57246 -0.913468 -0.0840931 -0.398127 + -1.11428 0.904054 -2.54113 -0.991308 -0.12334 -0.0457847 + -1.12641 1.00262 -2.48896 -0.966953 -0.200898 0.156975 + -1.13367 1.07878 -2.43703 -0.929554 -0.265516 0.255794 + -1.08755 0.812336 -2.59548 -0.716041 0.0111244 -0.697969 + -1.10107 0.810427 -2.57592 -0.918004 -0.0165467 -0.396226 + -1.10538 0.80779 -2.55604 -0.997308 -0.0511498 -0.052539 + -1.11079 0.899823 -2.51437 -0.972073 -0.15423 0.176883 + -1.07207 0.812925 -2.60711 -0.464603 0.0257185 -0.885145 + -1.08934 0.722745 -2.59886 -0.72634 0.0638837 -0.68436 + -1.09904 0.721375 -2.58483 -0.919626 0.0253502 -0.391975 + -1.10334 0.71874 -2.56495 -0.998755 -0.0314128 -0.0387619 + -1.10189 0.803559 -2.52927 -0.964486 -0.0998696 0.244527 + -1.04952 0.812386 -2.61464 -0.0957679 0.0246049 -0.9951 + -1.05769 0.722945 -2.61589 -0.11051 0.0712287 -0.991319 + -1.07386 0.723332 -2.61049 -0.464771 0.0795255 -0.881852 + -1.07647 0.635409 -2.62083 -0.465279 0.146974 -0.872877 + -1.08626 0.635036 -2.61347 -0.722362 0.10618 -0.683315 + -1.02754 0.810431 -2.61238 0.256405 0.00952811 -0.966522 + -1.03571 0.720992 -2.61362 0.265148 0.0393083 -0.963406 + -1.0464 0.633785 -2.62479 0.26744 0.132617 -0.954405 + -1.0603 0.635021 -2.62623 -0.0989332 0.158532 -0.982385 + -0.998872 0.806418 -2.59956 0.546377 -0.037292 -0.836709 + -1.01516 0.718116 -2.60443 0.548501 -0.00795568 -0.836112 + -1.02585 0.630909 -2.6156 0.561694 0.0751344 -0.823927 + -0.988605 0.880068 -2.59465 0.48462 -0.0115258 -0.874649 + -0.982965 0.80307 -2.58489 0.797365 -0.1232 -0.590789 + -0.999249 0.714768 -2.58976 0.818729 -0.0850094 -0.567853 + -1.01579 0.628792 -2.60633 0.824133 -0.0222502 -0.565959 + -1.04 0.546065 -2.63712 0.544353 -0.00889895 -0.838809 + -0.946387 0.944402 -2.56808 0.641839 -0.436344 -0.630593 + -0.959722 0.886523 -2.57604 0.732243 -0.142287 -0.666014 + -0.974575 0.799283 -2.56353 0.934766 -0.196028 -0.296286 + -0.993234 0.71205 -2.57445 0.945974 -0.146481 -0.289268 + -1.00978 0.626076 -2.59102 0.952396 -0.113574 -0.282919 + -0.906638 0.983132 -2.54299 0.872801 -0.483719 -0.0650645 + -0.951332 0.882736 -2.55468 0.919928 -0.28694 -0.267203 + -0.971928 0.796861 -2.54853 0.971119 -0.235169 -0.0403012 + -0.990587 0.70963 -2.55944 0.97929 -0.200358 -0.0291048 + -1.0081 0.624545 -2.58153 0.980802 -0.192545 -0.0308896 + -0.868778 1.06759 -2.53626 0.949754 -0.235756 0.20588 + -0.901376 0.991044 -2.52247 0.858472 -0.389563 0.333567 + -0.94607 0.890647 -2.53416 0.936379 -0.35099 0.00107427 + -0.974151 0.795004 -2.53492 0.901483 -0.272687 0.33611 + -0.992181 0.708298 -2.54969 0.903423 -0.259877 0.341015 + -0.87787 1.01106 -2.57668 0.878134 -0.395548 0.269114 + -0.86407 1.08456 -2.57384 0.979385 -0.173585 0.103312 + -0.861687 1.11392 -2.56091 0.978598 -0.167926 0.11894 + -0.866668 1.10639 -2.51694 0.947761 -0.203811 0.245379 + -0.882104 1.09696 -2.48575 0.784606 -0.298018 0.543672 + -0.884215 1.05816 -2.50507 0.791205 -0.320051 0.521116 + -0.897678 0.936912 -2.6526 0.773609 -0.457386 0.438552 + -0.873162 1.02803 -2.61425 0.965281 -0.241889 0.098597 + -0.854529 1.09843 -2.61509 0.956135 -0.22225 0.190814 + -0.865363 1.04126 -2.64315 0.950426 -0.257208 0.174742 + -0.840866 1.11642 -2.65408 0.982724 -0.0997397 -0.155904 + -0.837332 1.14079 -2.6466 0.979192 -0.0863826 -0.183631 + -0.852146 1.12779 -2.60216 0.956995 -0.206165 0.204099 + -0.861538 1.16186 -2.68141 0.692888 0.152478 -0.704738 + -0.868219 1.24203 -2.66812 0.574125 0.158542 -0.803271 + -0.833628 1.23334 -2.64018 0.855648 0.0787174 -0.511537 + -0.831071 1.17745 -2.63209 0.988874 -0.12975 -0.0727619 + -0.845885 1.16446 -2.58764 0.947227 -0.255703 0.193329 + -0.934282 1.28459 -2.69404 0.364794 0.175382 -0.914422 + -0.938761 1.37007 -2.67991 0.370436 0.210525 -0.904686 + -0.890704 1.39669 -2.64796 0.555286 0.257318 -0.790851 + -0.856113 1.388 -2.62003 0.800786 0.230611 -0.552776 + -0.989471 1.38663 -2.69149 0.118226 0.249029 -0.961253 + -0.94975 1.43807 -2.66388 0.28463 0.384371 -0.878205 + -0.901693 1.4647 -2.63194 0.39648 0.78005 -0.484072 + -0.880149 1.47123 -2.59456 0.309016 0.882258 -0.355148 + -0.860366 1.44322 -2.59861 0.765271 0.403725 -0.501364 + -1.00678 1.42268 -2.67934 -0.00878301 0.438802 -0.898541 + -0.984619 1.43677 -2.67203 0.091524 0.393432 -0.914787 + -0.947564 1.47536 -2.64032 0.317784 0.868931 -0.379435 + -0.920867 1.45928 -2.62568 0.00754016 0.935387 0.353545 + -0.899324 1.46581 -2.5883 -0.338502 0.940963 0.00201027 + -1.05423 1.44533 -2.65705 -0.257718 0.683011 -0.68343 + -1.03207 1.45942 -2.64973 -0.172442 0.66318 -0.728324 + -0.982433 1.47406 -2.64846 0.0170604 0.710272 -0.70372 + -0.968794 1.48219 -2.62952 0.131853 0.980579 0.145185 + -0.942097 1.46611 -2.61488 0.339007 0.806508 0.484375 + -1.08251 1.44345 -2.64039 -0.528518 0.689857 -0.494738 + -1.06681 1.46496 -2.62013 -0.320482 0.885042 -0.337626 + -1.04387 1.46803 -2.63609 -0.297217 0.870988 -0.391206 + -0.994238 1.48267 -2.63483 -0.113418 0.983473 -0.141127 + -1.00639 1.47073 -2.61217 0.0165182 0.857013 0.51503 + -1.09875 1.45047 -2.60848 -0.700871 0.635293 -0.324317 + -1.08305 1.47199 -2.58823 -0.251531 0.967592 -0.0223144 + -1.05477 1.46814 -2.60152 0.0747224 0.986398 0.146409 + -1.03184 1.47121 -2.61748 -0.137016 0.985399 0.101065 + -1.11399 1.43808 -2.58024 -0.851421 0.515949 -0.0942342 + -1.09815 1.46439 -2.55821 -0.427883 0.864768 0.262854 + -1.07211 1.46623 -2.58029 0.266523 0.90494 0.331737 + -1.12543 1.41096 -2.55294 -0.858748 0.512325 0.00866501 + -1.10958 1.43727 -2.53091 -0.809966 0.586366 -0.0113725 + -1.0872 1.45862 -2.55028 0.092161 0.902814 0.420039 + -1.05158 1.44868 -2.55174 0.311533 0.870532 0.380948 + -1.13962 1.39521 -2.51541 -0.823225 0.544266 -0.161477 + -1.12271 1.42414 -2.49449 -0.77304 0.612434 -0.165331 + -1.10257 1.4502 -2.51064 -0.299789 0.941673 0.152899 + -1.08047 1.43007 -2.47989 0.376654 0.853787 0.359415 + -1.0651 1.43849 -2.51953 0.365384 0.852791 0.373151 + -1.16035 1.38697 -2.47996 -0.880904 0.437562 -0.180407 + -1.14345 1.41591 -2.45904 -0.746913 0.66481 -0.0122075 + -1.1157 1.43707 -2.47422 -0.296097 0.947993 0.11677 + -1.17934 1.31858 -2.44536 -0.986818 0.127857 0.0992117 + -1.16392 1.37191 -2.43618 -0.923474 0.334044 0.188704 + -1.14797 1.4016 -2.42365 -0.817402 0.519555 0.248833 + -1.12068 1.42832 -2.43095 -0.202895 0.94604 0.252669 + -1.16889 1.31433 -2.39827 -0.94343 0.166749 0.286592 + -1.1542 1.34868 -2.39596 -0.866943 0.32898 0.374409 + -1.13825 1.37837 -2.38343 -0.881053 0.316462 0.351563 + -1.12732 1.39703 -2.37291 -0.529964 0.647941 0.547092 + -1.12521 1.41402 -2.39556 -0.350048 0.839598 0.415381 + -1.17078 1.25956 -2.40942 -0.969906 -0.093237 0.22492 + -1.16267 1.24834 -2.38147 -0.931278 -0.153555 0.330367 + -1.16159 1.27016 -2.37019 -0.912586 -0.0845404 0.400049 + -1.16229 1.3028 -2.37069 -0.907364 0.131461 0.39926 + -1.1476 1.33715 -2.36837 -0.883226 0.307158 0.354352 + -1.15392 1.18608 -2.39687 -0.932328 -0.232701 0.276793 + -1.14588 1.18477 -2.37766 -0.793191 -0.286797 0.537211 + -1.1448 1.20659 -2.36638 -0.662665 -0.263007 0.701215 + -1.14957 1.27336 -2.35176 -0.668089 -0.106751 0.736383 + -1.15027 1.30599 -2.35226 -0.788477 0.0708074 0.610974 + -1.14443 1.13603 -2.41186 -0.924183 -0.273419 0.266698 + -1.1364 1.13472 -2.39265 -0.623701 -0.392 0.676264 + -1.11827 1.21179 -2.35083 -0.32055 -0.321119 0.89114 + -1.12305 1.27855 -2.33621 -0.444598 -0.212916 0.870057 + -1.12625 1.07567 -2.41973 -0.638675 -0.380241 0.668963 + -1.0902 1.07266 -2.41137 -0.121017 -0.383263 0.915677 + -1.10035 1.13172 -2.38429 -0.129938 -0.43067 0.893107 + -1.09442 1.18844 -2.3562 -0.116724 -0.426738 0.896811 + -1.05547 1.29095 -2.308 -0.219863 -0.323458 0.920345 + -1.11906 0.99834 -2.46379 -0.926896 -0.238494 0.289801 + -1.11163 0.995224 -2.44649 -0.649722 -0.320546 0.689283 + -1.08301 0.991956 -2.43864 -0.147539 -0.316111 0.93718 + -1.02824 1.06834 -2.41296 0.11534 -0.358159 0.926509 + -1.03359 1.12844 -2.38576 0.0974313 -0.429509 0.897791 + -1.10344 0.895543 -2.48919 -0.855178 -0.230617 0.464205 + -1.08971 0.892558 -2.47588 -0.501698 -0.292002 0.814269 + -1.06108 0.889287 -2.46803 -0.176379 -0.264115 0.948227 + -1.02105 0.987635 -2.44024 0.144667 -0.28957 0.946161 + -0.976925 1.05923 -2.42945 0.406835 -0.341488 0.847273 + -1.0945 0.800461 -2.51207 -0.82724 -0.159649 0.538689 + -1.08077 0.797475 -2.49876 -0.528353 -0.206582 0.823509 + -1.0614 0.795053 -2.49203 -0.219275 -0.227354 0.948804 + -1.0297 0.886628 -2.46568 0.0942056 -0.248579 0.96402 + -1.09345 0.712609 -2.52855 -0.824138 -0.154251 0.54498 + -1.08361 0.710468 -2.51901 -0.537036 -0.224478 0.813143 + -1.06424 0.708045 -2.51229 -0.220167 -0.267298 0.938125 + -1.03002 0.792394 -2.48968 0.124432 -0.250754 0.96002 + -0.991862 0.88563 -2.47769 0.498035 -0.264229 0.82592 + -1.10084 0.715706 -2.54576 -0.963889 -0.0867551 0.251777 + -1.09617 0.628966 -2.56769 -0.958431 -0.1488 0.24345 + -1.0915 0.627008 -2.55681 -0.820519 -0.238549 0.519464 + -1.08166 0.624867 -2.54726 -0.530318 -0.328996 0.78136 + -1.09868 0.632 -2.58687 -0.99689 -0.0619289 -0.0487431 + -1.09027 0.546235 -2.61337 -0.976583 -0.203776 -0.069003 + -1.08899 0.544675 -2.60351 -0.934365 -0.294292 0.200884 + -1.08432 0.542717 -2.59263 -0.791189 -0.393918 0.467813 + -1.09595 0.633667 -2.59945 -0.921519 0.0295332 -0.38721 + -1.08755 0.547902 -2.62594 -0.906116 -0.0936438 -0.412535 + -1.0736 0.503052 -2.63077 -0.657908 -0.698812 -0.280747 + -1.07232 0.501492 -2.6209 -0.5838 -0.803005 0.119837 + -1.08257 0.548607 -2.63315 -0.722697 -0.00993852 -0.691093 + -1.06862 0.503757 -2.63797 -0.43344 -0.630561 -0.643834 + -1.04974 0.502079 -2.63603 0.422817 -0.686014 -0.592124 + -1.06726 0.500393 -2.61599 -0.293236 -0.877788 0.378816 + -1.07925 0.541618 -2.58772 -0.521292 -0.480551 0.705213 + -1.07278 0.548979 -2.6405 -0.460169 0.0463358 -0.886622 + -1.06447 0.54878 -2.64328 -0.112793 0.0671714 -0.991345 + -1.06031 0.503558 -2.64075 -0.00466644 -0.612756 -0.790258 + -1.05057 0.547545 -2.64185 0.268025 0.0477428 -0.962228 + -1.02995 0.543948 -2.62785 0.809955 -0.125096 -0.572995 + -1.04665 0.500682 -2.62816 0.554375 -0.805866 -0.207959 + -1.02685 0.542552 -2.61998 0.926257 -0.225626 -0.301896 + -1.02518 0.541021 -2.61049 0.947032 -0.316871 -0.0521857 + -1.04747 0.499998 -2.62314 0.470175 -0.872482 0.133079 + -1.026 0.540337 -2.60548 0.860336 -0.419876 0.28901 + -1.03266 0.539402 -2.59588 0.688047 -0.48246 0.542055 + -1.05569 0.499412 -2.61513 0.147088 -0.899721 0.410934 + -1.05544 0.539107 -2.5826 0.0808372 -0.541862 0.836571 + -1.06701 0.540086 -2.58347 -0.222008 -0.524589 0.8219 + -1.0097 0.623214 -2.57178 0.895208 -0.292463 0.336255 + -1.01635 0.62228 -2.56218 0.730253 -0.346055 0.589048 + -1.04087 0.538816 -2.58787 0.468018 -0.521577 0.713384 + -1.04691 0.621429 -2.54133 0.105559 -0.398375 0.911128 + -1.06941 0.623335 -2.54301 -0.227649 -0.374916 0.898674 + -1.00271 0.706819 -2.53452 0.740571 -0.287232 0.607497 + -1.03234 0.621138 -2.54659 0.488824 -0.386642 0.782023 + -1.01869 0.705681 -2.51892 0.508876 -0.303807 0.805448 + -1.04174 0.706138 -2.5106 0.108581 -0.296112 0.948961 + -0.984676 0.793525 -2.51975 0.742323 -0.268092 0.61407 + -0.948293 0.888791 -2.52055 0.845078 -0.322484 0.426435 + -0.969564 0.887221 -2.49944 0.684999 -0.270924 0.676296 + -1.00697 0.791935 -2.498 0.51377 -0.263712 0.816392 + -0.926244 0.989602 -2.50043 0.660527 -0.31281 0.682535 + -0.947515 0.988032 -2.47932 0.635129 -0.288974 0.716313 + -0.909084 1.05672 -2.48303 0.614267 -0.367071 0.698524 + -0.94123 1.06063 -2.45651 0.56421 -0.377053 0.734506 + -0.983211 0.986638 -2.45225 0.443925 -0.279269 0.851434 + -0.909294 1.08518 -2.46457 0.606607 -0.376106 0.700409 + -0.941441 1.08909 -2.43805 0.532076 -0.394407 0.749226 + -0.871687 1.15593 -2.47057 0.810704 -0.268079 0.520473 + -0.898877 1.14416 -2.44938 0.669766 -0.327231 0.666583 + -0.929246 1.15389 -2.41 0.563535 -0.376751 0.735178 + -0.982273 1.11932 -2.40225 0.312706 -0.407609 0.857945 + -0.856009 1.16132 -2.50709 0.945087 -0.228352 0.233808 + -0.855299 1.23129 -2.46941 0.894735 -0.194911 0.401819 + -0.875496 1.23743 -2.42759 0.796799 -0.267322 0.541895 + -0.905865 1.24716 -2.38821 0.690921 -0.389738 0.608878 + -0.970078 1.18412 -2.3742 0.384688 -0.480377 0.788196 + -0.851029 1.16885 -2.55106 0.961848 -0.248345 0.114771 + -0.829275 1.24505 -2.54502 0.97641 -0.118939 0.180213 + -0.839621 1.23668 -2.50593 0.950809 -0.132504 0.280009 + -0.85271 1.29318 -2.44602 0.953834 -0.0165858 0.299875 + -0.824131 1.24066 -2.58161 0.994979 -0.0936058 0.0354266 + -0.831513 1.32636 -2.53217 0.980253 0.0789056 0.181322 + -0.841858 1.31798 -2.49307 0.951932 0.0791292 0.295911 + -0.85511 1.31488 -2.44981 0.952903 0.156852 0.259565 + -0.826689 1.29654 -2.58971 0.982066 0.109822 -0.153249 + -0.830941 1.35176 -2.56829 0.982874 0.16182 -0.0881616 + -0.851209 1.42879 -2.51838 0.929606 0.220327 0.295445 + -0.869253 1.38921 -2.46263 0.833821 0.316261 0.452463 + -0.882504 1.38611 -2.41937 0.905215 0.348195 0.24361 + -0.850637 1.45419 -2.5545 0.914089 0.399522 -0.0694501 + -0.869045 1.47487 -2.50963 0.450371 0.815023 0.36456 + -0.870421 1.4822 -2.55045 0.265064 0.96055 -0.0841732 + -0.896257 1.46308 -2.48865 -0.22154 0.858129 0.463178 + -0.887089 1.43529 -2.45388 0.299955 0.446597 0.842958 + -0.897632 1.47042 -2.52947 -0.390441 0.91849 0.0627135 + -0.920107 1.45833 -2.51853 -0.542513 0.832476 0.112527 + -0.925061 1.44439 -2.48453 -0.512913 0.744366 0.427597 + -0.915893 1.4166 -2.44975 -0.0692827 0.607753 0.791098 + -0.921798 1.45373 -2.57736 -0.519678 0.852963 -0.0488796 + -0.953587 1.43266 -2.53555 -0.581827 0.808137 0.0916093 + -0.958541 1.41872 -2.50155 -0.567659 0.787052 0.241481 + -0.967459 1.40174 -2.46741 -0.469628 0.78452 0.404941 + -0.934989 1.44534 -2.58484 -0.3171 0.864272 0.390489 + -0.966778 1.42428 -2.54303 -0.389897 0.896888 0.208741 + -0.983379 1.4083 -2.51108 -0.357696 0.877568 0.319262 + -0.992297 1.39131 -2.47694 -0.270847 0.886126 0.376061 + -0.976856 1.38687 -2.4505 -0.376359 0.853842 0.359594 + -0.945825 1.4539 -2.59787 0.00862971 0.854386 0.519567 + -0.97287 1.42479 -2.54844 -0.0404514 0.90323 0.427246 + -0.989471 1.40881 -2.51649 -0.00380139 0.904273 0.426938 + -1.00051 1.38963 -2.47497 0.0981652 0.898424 0.428016 + -0.996782 1.38135 -2.45573 -0.215565 0.906702 0.362523 + -1.01012 1.45852 -2.59516 0.111829 0.831013 0.544896 + -0.983706 1.43335 -2.56148 0.110045 0.853486 0.509364 + -1.00783 1.42542 -2.53927 0.226335 0.85279 0.470661 + -1.03424 1.45059 -2.57296 0.242654 0.877825 0.412967 + -1.01887 1.40624 -2.49774 0.29741 0.849331 0.436101 + -1.03239 1.39605 -2.46553 0.355674 0.821062 0.44649 + -1.00499 1.37967 -2.45376 0.0919162 0.894453 0.437612 + -0.999376 1.37777 -2.44788 -0.206506 0.923662 0.322806 + -0.979449 1.38329 -2.44266 -0.34661 0.918114 0.192165 + -0.925289 1.40173 -2.43285 -0.0513829 0.945575 0.321322 + -1.04273 1.38481 -2.43909 0.429836 0.801685 0.415382 + -1.01192 1.37339 -2.43923 0.121277 0.893529 0.432317 + -1.0063 1.37149 -2.43335 -0.233676 0.931842 0.277609 + -0.980221 1.38175 -2.42299 -0.371224 0.917588 0.142217 + -1.08827 1.42286 -2.45185 0.426117 0.859083 0.283552 + -1.05053 1.3776 -2.41105 0.568071 0.769255 0.292475 + -1.02226 1.36215 -2.41278 0.155148 0.896973 0.413967 + -1.01648 1.3611 -2.40822 -0.265174 0.926222 0.267946 + -0.990394 1.37137 -2.39786 -0.464011 0.87689 0.125531 + -1.09325 1.41411 -2.40858 0.415229 0.863528 0.286189 + -1.05104 1.3772 -2.40825 0.622306 0.746965 0.23405 + -1.02852 1.35678 -2.39971 0.28 0.90287 0.32623 + -1.02274 1.35574 -2.39516 -0.194354 0.944319 0.265495 + -1.00467 1.35807 -2.36786 -0.560909 0.798007 0.220376 + -1.09274 1.4032 -2.37737 0.320379 0.825035 0.465483 + -1.05053 1.3663 -2.37704 0.560245 0.79439 0.234669 + -1.02904 1.35638 -2.39692 0.355279 0.908303 0.220823 + -1.026 1.35042 -2.37727 0.289123 0.927375 0.237451 + -1.0197 1.34977 -2.37551 -0.30177 0.900714 0.312488 + -1.09486 1.38622 -2.35472 0.171952 0.832809 0.526176 + -1.04089 1.3488 -2.32091 0.425237 0.813488 0.39675 + -1.01635 1.33292 -2.32115 -0.0999424 0.994492 0.03158 + -1.12788 1.37252 -2.34763 -0.633704 0.60949 0.476384 + -1.10435 1.37495 -2.33329 -0.135443 0.802191 0.581503 + -1.05038 1.33753 -2.29949 0.06645 0.512045 0.856385 + -1.00133 1.34122 -2.31349 -0.338204 0.889775 0.306462 + -1.1388 1.35386 -2.35816 -0.912977 0.308797 0.266679 + -1.13502 1.34588 -2.32554 -0.785912 0.247448 0.566667 + -1.11149 1.3483 -2.31119 -0.291618 0.4455 0.846457 + -1.14148 1.32271 -2.34204 -0.858726 0.0330041 0.511372 + -1.12248 1.30853 -2.32584 -0.532563 -0.299047 0.7918 + -1.11603 1.3317 -2.30933 -0.439293 -0.140627 0.887269 + -1.05491 1.32093 -2.29762 -0.134271 -0.0906387 0.986791 + -0.999054 1.29229 -2.29894 -0.0651794 -0.270499 0.960511 + -0.98857 1.33391 -2.29523 -0.0910672 0.402129 0.911043 + -0.965906 1.38361 -2.34665 -0.464614 0.819483 0.335532 + -1.03163 1.2676 -2.31336 -0.0915104 -0.415923 0.904784 + -0.995083 1.20985 -2.34325 0.151109 -0.564242 0.811663 + -0.964126 1.2872 -2.29852 0.219764 -0.340606 0.914162 + -0.953642 1.32882 -2.2948 0.231449 0.138884 0.962882 + -0.953148 1.3763 -2.32838 -0.177089 0.709115 0.682492 + -1.02766 1.18516 -2.35767 0.0769188 -0.490747 0.8679 + -0.939121 1.26148 -2.32947 0.581246 -0.483077 0.65482 + -0.923982 1.32046 -2.31195 0.674161 -0.168656 0.71907 + -0.934902 1.34106 -2.30356 0.369274 0.260791 0.891978 + -0.890725 1.30614 -2.37069 0.828578 -0.213496 0.517569 + -0.902689 1.36227 -2.33865 0.836963 0.104198 0.537249 + -0.913609 1.38287 -2.33026 0.432614 0.508049 0.744803 + -0.934407 1.38854 -2.33714 -0.142712 0.75657 0.638149 + -0.925721 1.40547 -2.36051 -0.125967 0.953721 0.273036 + -0.872908 1.29932 -2.4042 0.872746 -0.143765 0.466525 + -0.884871 1.35545 -2.37217 0.908713 0.0655302 0.412246 + -0.88727 1.37715 -2.37596 0.902866 0.301393 0.306588 + -0.904923 1.3998 -2.35364 0.546583 0.695006 0.467133 + -0.900157 1.40875 -2.39705 0.37271 0.927874 0.0116933 + -0.926061 1.40019 -2.41319 -0.211593 0.973755 -0.0838376 + -0.951625 1.39691 -2.37665 -0.432442 0.901477 -0.0182436 + 0.987946 0.54202 -2.82794 0.314747 -0.758113 -0.571138 + 0.997797 0.583674 -2.84229 0.57196 -0.227225 -0.788182 + 1.00242 0.583273 -2.8373 0.815654 -0.202245 -0.542038 + 0.986215 0.583895 -2.84767 0.304597 -0.252697 -0.918349 + 0.994011 0.664209 -2.85276 0.576401 0.00390892 -0.817158 + 1.00283 0.663444 -2.84326 0.836168 -0.00551554 -0.548446 + 0.992571 0.541618 -2.82296 0.569947 -0.754798 -0.324716 + 0.969837 0.538851 -2.80456 -0.327952 -0.876351 0.352783 + 0.965146 0.539398 -2.81088 -0.49127 -0.865631 0.0966238 + 0.964997 0.54048 -2.8207 -0.47421 -0.819732 -0.321191 + 0.976634 0.541924 -2.83037 -0.100627 -0.76649 -0.634324 + 1.00691 0.582204 -2.82634 0.943677 -0.181814 -0.276437 + 1.00847 0.581138 -2.81623 0.983805 -0.178851 -0.0118181 + 0.994128 0.540551 -2.81285 0.64231 -0.764739 0.0511094 + 1.00732 0.662375 -2.83229 0.959681 -0.0220629 -0.280224 + 1.01029 0.66034 -2.81301 0.998707 -0.0508264 -0.000970925 + 1.00792 0.65881 -2.79987 0.939053 -0.0949233 0.330406 + 1.0061 0.579608 -2.80309 0.923809 -0.190563 0.332058 + 1.00774 0.761453 -2.82961 0.833553 0.059638 -0.549211 + 1.01479 0.756517 -2.81332 0.959144 -0.0194904 -0.282245 + 1.01776 0.754481 -2.79404 0.994713 -0.101179 -0.0175988 + 0.998922 0.76222 -2.83911 0.577709 0.132539 -0.80541 + 1.0087 0.88042 -2.8048 0.56572 0.167668 -0.807371 + 1.02098 0.874586 -2.79292 0.829802 0.0448848 -0.55625 + 1.02803 0.86965 -2.77662 0.948995 -0.0606477 -0.309405 + 0.980736 0.764743 -2.84695 0.304326 0.178861 -0.935625 + 0.990514 0.882944 -2.81263 0.307028 0.241703 -0.920496 + 0.999928 0.98995 -2.78141 0.232054 0.24215 -0.94208 + 1.02948 0.984916 -2.773 0.516343 0.120489 -0.847863 + 1.04177 0.979082 -2.76111 0.808312 -0.0403719 -0.587369 + 0.98243 0.664431 -2.85815 0.314251 0.00198932 -0.949338 + 0.959166 0.764559 -2.85158 -0.0536553 0.187806 -0.980739 + 0.960445 0.886619 -2.81796 -0.060877 0.274796 -0.959573 + 0.969859 0.993627 -2.78674 -0.0467908 0.309176 -0.949853 + 0.974903 0.583799 -2.8501 -0.0217184 -0.287312 -0.957591 + 0.96086 0.664247 -2.86277 -0.0562559 -0.0251938 -0.998098 + 0.932966 0.762391 -2.84343 -0.485838 0.152383 -0.860663 + 0.934244 0.884451 -2.80981 -0.476559 0.246822 -0.843783 + 0.927075 0.98972 -2.77383 -0.465841 0.261126 -0.845461 + 0.958226 0.58268 -2.84484 -0.432043 -0.335505 -0.837123 + 0.944182 0.663127 -2.85751 -0.467496 -0.0702007 -0.881203 + 0.910775 0.759637 -2.825 -0.75646 0.0909882 -0.64768 + 0.903272 0.875039 -2.78571 -0.760424 0.163012 -0.628636 + 0.896103 0.980307 -2.74972 -0.746515 0.121203 -0.654237 + 0.946589 0.581236 -2.83517 -0.67619 -0.372972 -0.635342 + 0.921991 0.660374 -2.83908 -0.745374 -0.12414 -0.654986 + 0.897648 0.753411 -2.80372 -0.961171 -0.0370587 -0.273452 + 0.890144 0.868814 -2.76442 -0.960313 0.0142307 -0.27856 + 0.877059 0.968103 -2.72052 -0.958223 -0.0487882 -0.28183 + 0.93824 0.5794 -2.82101 -0.867769 -0.417936 -0.268899 + 0.913643 0.658539 -2.82492 -0.937 -0.194307 -0.290302 + 0.897932 0.751349 -2.78499 -0.981591 -0.151304 0.116561 + 0.890512 0.858144 -2.74054 -0.983584 -0.146602 0.105215 + 0.877426 0.957433 -2.69664 -0.984458 -0.166027 0.0572543 + 0.93839 0.578319 -2.81119 -0.895967 -0.43484 0.0903148 + 0.913927 0.656476 -2.8062 -0.962066 -0.247728 0.114276 + 0.903445 0.746082 -2.76754 -0.884753 -0.241502 0.39861 + 0.896025 0.852877 -2.72309 -0.889135 -0.272227 0.367874 + 0.885224 0.944204 -2.66774 -0.902343 -0.331362 0.275638 + 0.941907 0.577135 -2.79946 -0.819989 -0.429965 0.377819 + 0.917445 0.655293 -2.79446 -0.875195 -0.276001 0.397313 + 0.91239 0.745039 -2.75548 -0.722376 -0.307996 0.619121 + 0.908478 0.845585 -2.70795 -0.728064 -0.367845 0.578457 + 0.897678 0.936912 -2.6526 -0.746277 -0.50435 0.434397 + 0.946598 0.576588 -2.79314 -0.68616 -0.416997 0.596069 + 0.92639 0.654249 -2.78241 -0.720316 -0.287327 0.631338 + 0.924211 0.742007 -2.74573 -0.543434 -0.349792 0.763102 + 0.920299 0.842552 -2.6982 -0.546813 -0.44217 0.710972 + 0.915673 0.920278 -2.64408 -0.571542 -0.567879 0.592328 + 0.954129 0.576099 -2.78652 -0.518299 -0.395967 0.758008 + 0.933921 0.65376 -2.77579 -0.547721 -0.289795 0.78487 + 0.935026 0.741769 -2.74041 -0.210655 -0.389935 0.896423 + 0.935371 0.839004 -2.69171 -0.213408 -0.503343 0.837319 + 0.930745 0.916726 -2.63758 -0.200866 -0.671679 0.713091 + 0.9598 0.575973 -2.78373 -0.206821 -0.349201 0.913938 + 0.944736 0.653521 -2.77047 -0.216427 -0.27386 0.937102 + 0.957243 0.741721 -2.74101 0.124426 -0.381724 0.915863 + 0.957588 0.838956 -2.6923 0.124447 -0.501602 0.856101 + 0.975509 0.538725 -2.80177 -0.0185124 -0.842729 0.53802 + 0.973945 0.576454 -2.78396 0.13036 -0.281896 0.950548 + 0.958881 0.654004 -2.7707 0.12086 -0.232587 0.965037 + 0.983544 0.743223 -2.74693 0.368552 -0.363115 0.855755 + 0.994271 0.841053 -2.70056 0.367816 -0.476657 0.798442 + 0.989302 0.539512 -2.80488 0.40503 -0.796139 0.44957 + 0.987738 0.577242 -2.78706 0.369585 -0.249085 0.895189 + 0.985181 0.655504 -2.77662 0.378428 -0.202257 0.903263 + 1.0048 0.746669 -2.75918 0.700584 -0.305787 0.64473 + 1.00127 0.578569 -2.79511 0.709695 -0.217832 0.669987 + 0.998712 0.656831 -2.78467 0.708462 -0.155975 0.688297 + 1.01401 0.748649 -2.77438 0.928875 -0.199865 0.31184 + 1.02839 0.852705 -2.73245 0.918584 -0.290291 0.268205 + 1.01553 0.844499 -2.71281 0.693033 -0.407387 0.594761 + 1.03214 0.858538 -2.75211 0.984747 -0.167407 -0.0474118 + 1.05609 0.956349 -2.71154 0.955449 -0.287842 -0.0653049 + 1.04433 0.934346 -2.68809 0.882035 -0.387309 0.268338 + 1.03147 0.926142 -2.66845 0.705381 -0.496106 0.506277 + 0.999984 0.910055 -2.65635 0.387036 -0.59509 0.704323 + 1.05198 0.967463 -2.73606 0.925331 -0.168578 -0.339625 + 1.0884 1.05881 -2.70415 0.93478 -0.2186 -0.280001 + 1.08784 1.03906 -2.65981 0.946229 -0.323299 0.011355 + 1.07608 1.01706 -2.63636 0.88807 -0.437073 -0.142472 + 1.03839 0.968117 -2.63106 0.690054 -0.723252 0.0270575 + 1.07819 1.07044 -2.72921 0.780503 -0.0701201 -0.621207 + 1.09758 1.13993 -2.71023 0.802931 -0.0429362 -0.594524 + 1.1102 1.13024 -2.67529 0.958558 -0.177376 -0.222946 + 1.10964 1.11049 -2.63095 0.969999 -0.177352 -0.166275 + 1.0836 1.00664 -2.61366 0.639169 -0.303516 -0.706641 + 1.05317 1.08021 -2.74869 0.465188 0.112529 -0.87803 + 1.07256 1.1497 -2.72971 0.446705 0.107534 -0.888195 + 1.08019 1.19637 -2.72071 0.441207 0.118918 -0.889491 + 1.10738 1.18459 -2.69952 0.810642 -0.014027 -0.585374 + 1.12001 1.17491 -2.66458 0.973171 -0.137212 -0.184691 + 1.02362 1.08524 -2.75711 0.130927 0.226315 -0.965215 + 1.033 1.1579 -2.73778 0.0918917 0.203959 -0.974657 + 1.04063 1.20456 -2.72877 0.0883932 0.184283 -0.97889 + 1.09014 1.26099 -2.7058 0.484544 0.125036 -0.865785 + 1.11733 1.24921 -2.68462 0.795821 0.0283972 -0.604866 + 0.972767 1.0861 -2.75409 -0.170756 0.289218 -0.941911 + 0.982147 1.15875 -2.73476 -0.175982 0.238265 -0.955123 + 0.985439 1.21494 -2.72337 -0.188342 0.232976 -0.95407 + 1.0019 1.26921 -2.71213 -0.119223 0.198162 -0.972891 + 1.05709 1.25883 -2.71753 0.146855 0.176704 -0.973247 + 0.929983 1.08219 -2.74118 -0.385176 0.292744 -0.87518 + 0.92431 1.14823 -2.71871 -0.391233 0.235568 -0.889631 + 0.927602 1.20442 -2.70733 -0.372542 0.201684 -0.905834 + 0.870745 1.07144 -2.71135 -0.699818 0.150315 -0.698327 + 0.865072 1.13749 -2.68888 -0.675653 0.152855 -0.721199 + 0.861538 1.16186 -2.68141 -0.682124 0.143505 -0.717017 + 0.868219 1.24203 -2.66812 -0.580575 0.15414 -0.799483 + 0.934282 1.28459 -2.69404 -0.353678 0.168968 -0.919979 + 0.8517 1.05924 -2.68214 -0.971742 -0.136094 -0.192859 + 0.840866 1.11642 -2.65408 -0.983871 -0.0973136 -0.150093 + 0.837332 1.14079 -2.6466 -0.979924 -0.0931913 -0.176251 + 0.831071 1.17745 -2.63209 -0.978199 -0.0947031 -0.18482 + 0.865363 1.04126 -2.64315 -0.951262 -0.264788 0.158077 + 0.854529 1.09843 -2.61509 -0.957178 -0.218926 0.189424 + 0.852146 1.12779 -2.60216 -0.957166 -0.20616 0.203302 + 0.845885 1.16446 -2.58764 -0.945983 -0.25868 0.195448 + 0.873162 1.02803 -2.61425 -0.972441 -0.212683 0.0955218 + 0.86407 1.08456 -2.57384 -0.979238 -0.172113 0.107099 + 0.861687 1.11392 -2.56091 -0.977969 -0.170595 0.120308 + 0.851029 1.16885 -2.55106 -0.963132 -0.237416 0.126533 + 0.824131 1.24066 -2.58161 -0.995574 -0.083762 0.0426153 + 0.87787 1.01106 -2.57668 -0.90883 -0.377834 0.17683 + 0.868778 1.06759 -2.53626 -0.949647 -0.230657 0.212056 + 0.866668 1.10639 -2.51694 -0.948296 -0.206688 0.240863 + 0.856009 1.16132 -2.50709 -0.949884 -0.216402 0.225587 + 0.895865 0.994424 -2.56815 -0.695386 -0.694595 0.184325 + 0.901376 0.991044 -2.52247 -0.8106 -0.424983 0.402886 + 0.884215 1.05816 -2.50507 -0.796943 -0.331244 0.505133 + 0.882104 1.09696 -2.48575 -0.787024 -0.292682 0.543076 + 0.871687 1.15593 -2.47057 -0.792053 -0.221006 0.569042 + 0.935615 0.955693 -2.59324 -0.389208 -0.860238 0.329405 + 0.946387 0.944402 -2.56808 -0.679977 -0.499001 -0.537242 + 0.906638 0.983132 -2.54299 -0.8216 -0.565443 -0.0724466 + 0.963302 0.907958 -2.64809 0.140922 -0.643664 0.752222 + 0.968171 0.946924 -2.60376 -0.0518793 -0.982319 0.179883 + 0.97527 0.937947 -2.5867 -0.423606 -0.498285 -0.756485 + 0.959722 0.886523 -2.57604 -0.762568 -0.106516 -0.638079 + 0.951332 0.882736 -2.55468 -0.924249 -0.24845 -0.289889 + 1.00689 0.95203 -2.61896 0.35333 -0.92978 0.10328 + 1.01399 0.943052 -2.6019 -0.132118 -0.450158 -0.883121 + 0.988605 0.880068 -2.59465 -0.472837 0.00799295 -0.881114 + 0.998872 0.806418 -2.59956 -0.536595 -0.0478441 -0.842483 + 0.982965 0.80307 -2.58489 -0.800322 -0.138274 -0.583408 + 1.0459 0.957702 -2.60835 0.0874554 -0.346659 -0.933905 + 1.01727 0.884079 -2.60747 -0.320112 0.0429812 -0.946404 + 1.02754 0.810431 -2.61238 -0.262063 -0.00013178 -0.965051 + 1.04918 0.898729 -2.61392 0.0245274 0.017327 -0.999549 + 1.04952 0.812386 -2.61464 0.103179 0.0159324 -0.994535 + 1.03571 0.720992 -2.61362 -0.265146 0.0393099 -0.963407 + 1.01516 0.718116 -2.60443 -0.548501 -0.00795235 -0.836112 + 0.999249 0.714768 -2.58976 -0.81873 -0.085002 -0.567852 + 1.07173 0.899269 -2.60639 0.429908 -0.0426861 -0.901863 + 1.07207 0.812925 -2.60711 0.461009 0.0202921 -0.887164 + 1.07386 0.723332 -2.61049 0.46477 0.0795256 -0.881853 + 1.05769 0.722945 -2.61589 0.11051 0.0712288 -0.991319 + 1.10668 1.01755 -2.59929 0.772028 -0.15355 -0.616761 + 1.09481 0.910179 -2.59202 0.699479 -0.0814139 -0.710001 + 1.08755 0.812336 -2.59548 0.718718 0.00540434 -0.695281 + 1.11904 1.09943 -2.58885 0.935383 -0.0609495 -0.348344 + 1.12524 1.01362 -2.56363 0.934191 -0.109256 -0.339634 + 1.10833 0.908268 -2.57246 0.915023 -0.0934332 -0.392433 + 1.10107 0.810427 -2.57592 0.917366 -0.0182307 -0.397626 + 1.12827 1.16642 -2.56773 0.916495 -0.0637501 -0.394933 + 1.13759 1.0955 -2.55319 0.932415 -0.075096 -0.353501 + 1.13119 1.0094 -2.5323 0.985605 -0.154897 -0.0677514 + 1.11428 0.904054 -2.54113 0.991718 -0.120902 -0.0433471 + 1.10538 0.80779 -2.55604 0.997264 -0.053058 -0.0514714 + 1.11888 1.17747 -2.60983 0.984639 -0.134004 -0.111936 + 1.13103 1.2421 -2.59744 0.963626 -0.22808 -0.139301 + 1.14208 1.23005 -2.55351 0.900858 -0.150553 -0.407171 + 1.14901 1.14333 -2.53409 0.924846 -0.0943328 -0.368457 + 1.13216 1.23954 -2.65219 0.965927 -0.123771 -0.227299 + 1.15182 1.31268 -2.59848 0.966166 -0.0273945 -0.256462 + 1.16287 1.30063 -2.55454 0.955692 -0.096258 -0.278186 + 1.17659 1.27611 -2.50215 0.971841 -0.0666209 -0.226025 + 1.16281 1.20696 -2.51987 0.927666 -0.101556 -0.359335 + 1.14094 1.31582 -2.63344 0.936773 0.0667136 -0.34352 + 1.13698 1.37706 -2.61403 0.907712 0.317374 -0.274468 + 1.14786 1.37391 -2.57907 0.892462 0.397913 -0.212549 + 1.16205 1.35816 -2.54154 0.931142 0.308527 -0.194385 + 1.12611 1.3255 -2.66586 0.828528 0.117144 -0.547557 + 1.12174 1.38945 -2.64227 0.847024 0.342069 -0.406866 + 1.11399 1.43808 -2.58024 0.869691 0.485386 -0.0896594 + 1.12543 1.41096 -2.55294 0.863571 0.502391 -0.0429885 + 1.13962 1.39521 -2.51541 0.783226 0.594915 -0.180646 + 1.10373 1.35185 -2.68466 0.558573 0.241557 -0.793503 + 1.09936 1.4158 -2.66107 0.63565 0.483752 -0.601609 + 1.09875 1.45047 -2.60848 0.698105 0.641172 -0.318666 + 1.09815 1.46439 -2.55821 0.424709 0.862599 0.274855 + 1.07067 1.34969 -2.69638 0.181525 0.227355 -0.956744 + 1.07108 1.41769 -2.67773 0.295818 0.468546 -0.83244 + 1.08251 1.44345 -2.64039 0.47912 0.716705 -0.506732 + 1.06681 1.46496 -2.62013 0.324433 0.889911 -0.320627 + 1.08305 1.47199 -2.58823 0.233902 0.971903 -0.0263657 + 0.984992 1.30116 -2.70562 -0.15007 0.150493 -0.977155 + 1.05377 1.38164 -2.68987 0.0639528 0.246367 -0.967064 + 1.00678 1.42268 -2.67934 0.0303983 0.440531 -0.897223 + 1.05423 1.44533 -2.65705 0.25189 0.674749 -0.693733 + 1.04387 1.46803 -2.63609 0.281663 0.877357 -0.388472 + 0.989471 1.38663 -2.69149 -0.129266 0.252697 -0.958872 + 0.984619 1.43677 -2.67203 -0.0806959 0.452751 -0.887978 + 1.03207 1.45942 -2.64973 0.172443 0.663187 -0.728318 + 0.994238 1.48267 -2.63483 0.113418 0.983473 -0.141127 + 1.03184 1.47121 -2.61748 0.122801 0.972111 0.199798 + 0.938761 1.37007 -2.67991 -0.370233 0.213149 -0.904154 + 0.94975 1.43807 -2.66388 -0.299035 0.398689 -0.866963 + 0.982433 1.47406 -2.64846 -0.0170661 0.710269 -0.703724 + 0.968794 1.48219 -2.62952 -0.131853 0.980579 0.145185 + 1.00639 1.47073 -2.61217 -0.00772869 0.860127 0.510021 + 0.890704 1.39669 -2.64796 -0.546375 0.237799 -0.803073 + 0.901693 1.4647 -2.63194 -0.248292 0.809819 -0.531549 + 0.920867 1.45928 -2.62568 -0.0361548 0.971886 -0.232661 + 0.947564 1.47536 -2.64032 -0.427905 0.810497 -0.399991 + 0.942097 1.46611 -2.61488 -0.136237 0.922781 0.360437 + 0.833628 1.23334 -2.64018 -0.844625 0.0435963 -0.53358 + 0.856113 1.388 -2.62003 -0.803156 0.231255 -0.549055 + 0.880149 1.47123 -2.59456 -0.322878 0.874982 -0.360773 + 0.899324 1.46581 -2.5883 0.313253 0.949669 0.0014485 + 0.826689 1.29654 -2.58971 -0.985476 0.105748 -0.132868 + 0.830941 1.35176 -2.56829 -0.983881 0.156422 -0.0866655 + 0.860366 1.44322 -2.59861 -0.707207 0.393229 -0.587562 + 0.870421 1.4822 -2.55045 -0.321848 0.946217 -0.0329823 + 0.829275 1.24505 -2.54502 -0.977149 -0.117161 0.177352 + 0.831513 1.32636 -2.53217 -0.979601 0.0821127 0.183413 + 0.850637 1.45419 -2.5545 -0.901783 0.432183 -0.00239404 + 0.839621 1.23668 -2.50593 -0.949246 -0.134066 0.284532 + 0.841858 1.31798 -2.49307 -0.954846 0.101224 0.279325 + 0.869253 1.38921 -2.46263 -0.909505 0.226027 0.348873 + 0.851209 1.42879 -2.51838 -0.927781 0.236296 0.288768 + 0.855299 1.23129 -2.46941 -0.894114 -0.187062 0.4069 + 0.85271 1.29318 -2.44602 -0.943243 -0.05159 0.328073 + 0.85511 1.31488 -2.44981 -0.939949 0.187947 0.284906 + 0.882504 1.38611 -2.41937 -0.796883 0.548155 0.253977 + 0.887089 1.43529 -2.45388 -0.315207 0.615308 0.722524 + 0.898877 1.14416 -2.44938 -0.704967 -0.285147 0.649395 + 0.875496 1.23743 -2.42759 -0.797324 -0.276447 0.536518 + 0.872908 1.29932 -2.4042 -0.854907 -0.177021 0.487645 + 0.884871 1.35545 -2.37217 -0.912129 0.0578571 0.4058 + 0.88727 1.37715 -2.37596 -0.904135 0.306716 0.297431 + 0.909294 1.08518 -2.46457 -0.608674 -0.388468 0.691815 + 0.929246 1.15389 -2.41 -0.565243 -0.396482 0.723396 + 0.905865 1.24716 -2.38821 -0.75964 -0.321651 0.565233 + 0.890725 1.30614 -2.37069 -0.832401 -0.226854 0.505615 + 0.902689 1.36227 -2.33865 -0.828869 0.0837425 0.55314 + 0.909084 1.05672 -2.48303 -0.595346 -0.388792 0.703138 + 0.94123 1.06063 -2.45651 -0.555259 -0.370464 0.744609 + 0.941441 1.08909 -2.43805 -0.436782 -0.466273 0.769293 + 0.970078 1.18412 -2.3742 -0.38829 -0.493812 0.778062 + 0.939121 1.26148 -2.32947 -0.574656 -0.442021 0.688758 + 0.926244 0.989602 -2.50043 -0.660747 -0.319605 0.679166 + 0.947515 0.988032 -2.47932 -0.640773 -0.281272 0.71435 + 0.976925 1.05923 -2.42945 -0.427862 -0.319987 0.845306 + 0.982273 1.11932 -2.40225 -0.323441 -0.428492 0.843671 + 0.995083 1.20985 -2.34325 -0.157687 -0.516432 0.841684 + 0.94607 0.890647 -2.53416 -0.94841 -0.314742 0.0381689 + 0.948293 0.888791 -2.52055 -0.866167 -0.286237 0.409663 + 0.969564 0.887221 -2.49944 -0.68352 -0.268036 0.678939 + 0.983211 0.986638 -2.45225 -0.445047 -0.282407 0.849811 + 1.02824 1.06834 -2.41296 -0.117636 -0.360854 0.925174 + 0.974575 0.799283 -2.56353 -0.935873 -0.193842 -0.294221 + 0.971928 0.796861 -2.54853 -0.971737 -0.232327 -0.0418498 + 0.974151 0.795004 -2.53492 -0.90073 -0.261043 0.347191 + 0.984676 0.793525 -2.51975 -0.749839 -0.256518 0.609869 + 0.991862 0.88563 -2.47769 -0.505107 -0.255457 0.824383 + 0.993234 0.71205 -2.57445 -0.945975 -0.146477 -0.289266 + 0.990587 0.70963 -2.55944 -0.97929 -0.200358 -0.0291079 + 0.992181 0.708298 -2.54969 -0.903422 -0.259878 0.341015 + 1.00271 0.706819 -2.53452 -0.740571 -0.287228 0.607499 + 1.00697 0.791935 -2.498 -0.512016 -0.260521 0.818516 + 1.01579 0.628792 -2.60633 -0.824134 -0.0222522 -0.565958 + 1.00978 0.626076 -2.59102 -0.952397 -0.113574 -0.282916 + 1.0081 0.624545 -2.58153 -0.980802 -0.192541 -0.0308912 + 1.0097 0.623214 -2.57178 -0.895208 -0.292463 0.336256 + 1.02585 0.630909 -2.6156 -0.561691 0.0751339 -0.823928 + 1.02995 0.543948 -2.62785 -0.809956 -0.125098 -0.572994 + 1.02685 0.542552 -2.61998 -0.926257 -0.225626 -0.301896 + 1.02518 0.541021 -2.61049 -0.947032 -0.316871 -0.0521857 + 1.026 0.540337 -2.60548 -0.860336 -0.419876 0.28901 + 1.0464 0.633785 -2.62479 -0.267439 0.132618 -0.954405 + 1.05057 0.547545 -2.64185 -0.268027 0.0477455 -0.962227 + 1.04 0.546065 -2.63712 -0.544351 -0.00889653 -0.83881 + 1.04974 0.502079 -2.63603 -0.422816 -0.686006 -0.592134 + 1.04665 0.500682 -2.62816 -0.554379 -0.805867 -0.207947 + 1.0603 0.635021 -2.62623 0.0989327 0.158535 -0.982384 + 1.06447 0.54878 -2.64328 0.112793 0.0671725 -0.991345 + 1.06031 0.503558 -2.64075 0.00466642 -0.612756 -0.790258 + 1.07647 0.635409 -2.62083 0.465277 0.146974 -0.872878 + 1.07278 0.548979 -2.6405 0.460168 0.0463376 -0.886622 + 1.06862 0.503757 -2.63797 0.433434 -0.630586 -0.643814 + 1.04747 0.499998 -2.62314 -0.470179 -0.872482 0.133066 + 1.03266 0.539402 -2.59588 -0.688048 -0.482461 0.542053 + 1.08626 0.635036 -2.61347 0.722361 0.106177 -0.683317 + 1.08257 0.548607 -2.63315 0.722697 -0.00993789 -0.691094 + 1.0736 0.503052 -2.63077 0.65789 -0.698827 -0.280752 + 1.05569 0.499412 -2.61513 -0.147125 -0.899693 0.410983 + 1.08934 0.722745 -2.59886 0.72634 0.0638904 -0.68436 + 1.09595 0.633667 -2.59945 0.92152 0.0295302 -0.387206 + 1.08755 0.547902 -2.62594 0.906116 -0.0936436 -0.412535 + 1.09027 0.546235 -2.61337 0.976583 -0.203776 -0.0690043 + 1.07232 0.501492 -2.6209 0.583831 -0.802985 0.11982 + 1.09904 0.721375 -2.58483 0.919627 0.0253546 -0.391973 + 1.09868 0.632 -2.58687 0.99689 -0.0619245 -0.0487428 + 1.08899 0.544675 -2.60351 0.934364 -0.294293 0.200884 + 1.08432 0.542717 -2.59263 0.791187 -0.393912 0.467821 + 1.06726 0.500393 -2.61599 0.293305 -0.877701 0.378963 + 1.10334 0.71874 -2.56495 0.998754 -0.031418 -0.0387635 + 1.09617 0.628966 -2.56769 0.958432 -0.148798 0.243447 + 1.0915 0.627008 -2.55681 0.820517 -0.23856 0.519462 + 1.07925 0.541618 -2.58772 0.521297 -0.480539 0.705217 + 1.10084 0.715706 -2.54576 0.963889 -0.0867574 0.251776 + 1.09345 0.712609 -2.52855 0.824137 -0.154241 0.544984 + 1.08166 0.624867 -2.54726 0.530313 -0.329002 0.781362 + 1.06941 0.623335 -2.54301 0.227654 -0.374912 0.898674 + 1.06701 0.540086 -2.58347 0.22201 -0.524586 0.821901 + 1.10189 0.803559 -2.52927 0.963508 -0.0936371 0.250766 + 1.0945 0.800461 -2.51207 0.830416 -0.152188 0.535956 + 1.08361 0.710468 -2.51901 0.537032 -0.224469 0.813148 + 1.11079 0.899823 -2.51437 0.971224 -0.157704 0.178472 + 1.10344 0.895543 -2.48919 0.852377 -0.221128 0.473873 + 1.08077 0.797475 -2.49876 0.531209 -0.210876 0.820578 + 1.0614 0.795053 -2.49203 0.216387 -0.231473 0.948471 + 1.06424 0.708045 -2.51229 0.220171 -0.267296 0.938124 + 1.12641 1.00262 -2.48896 0.966955 -0.19798 0.160628 + 1.11906 0.99834 -2.46379 0.923091 -0.248697 0.293349 + 1.08971 0.892558 -2.47588 0.513149 -0.276033 0.812701 + 1.14487 1.08771 -2.51268 0.981384 -0.178742 -0.0702674 + 1.14009 1.08092 -2.46934 0.964278 -0.230723 0.13013 + 1.13367 1.07878 -2.43703 0.929718 -0.269078 0.251437 + 1.11163 0.995224 -2.44649 0.656345 -0.339259 0.67388 + 1.15628 1.13553 -2.49358 0.97966 -0.196767 -0.039355 + 1.15085 1.13817 -2.44417 0.960349 -0.237198 0.146514 + 1.14443 1.13603 -2.41186 0.924564 -0.272338 0.266483 + 1.12625 1.07567 -2.41973 0.63928 -0.37914 0.66901 + 1.08301 0.991956 -2.43864 0.148433 -0.315211 0.937342 + 1.16746 1.19466 -2.47423 0.983086 -0.183135 -0.00209252 + 1.16203 1.19729 -2.42483 0.967483 -0.199114 0.155979 + 1.15392 1.18608 -2.39687 0.932199 -0.23209 0.277739 + 1.1364 1.13472 -2.39265 0.612832 -0.36903 0.698751 + 1.18124 1.2638 -2.45652 0.994293 -0.0962252 0.0460668 + 1.17078 1.25956 -2.40942 0.97265 -0.104292 0.207548 + 1.16267 1.24834 -2.38147 0.927814 -0.166154 0.333996 + 1.14588 1.18477 -2.37766 0.679575 -0.334967 0.652667 + 1.10035 1.13172 -2.38429 0.143664 -0.416404 0.897758 + 1.17934 1.31858 -2.44536 0.984294 0.13707 0.111249 + 1.16889 1.31433 -2.39827 0.9439 0.193923 0.267294 + 1.16229 1.3028 -2.37069 0.906753 0.132379 0.400344 + 1.16159 1.27016 -2.37019 0.904673 -0.0830735 0.41793 + 1.1448 1.20659 -2.36638 0.634223 -0.301725 0.711845 + 1.17577 1.33363 -2.48915 0.981536 0.163274 -0.0996451 + 1.16392 1.37191 -2.43618 0.927317 0.317474 0.198224 + 1.1542 1.34868 -2.39596 0.889209 0.310727 0.335792 + 1.1476 1.33715 -2.36837 0.885633 0.29452 0.359044 + 1.16035 1.38697 -2.47996 0.874099 0.472542 -0.112492 + 1.14797 1.4016 -2.42365 0.816306 0.520095 0.251286 + 1.13825 1.37837 -2.38343 0.879846 0.321204 0.350283 + 1.1388 1.35386 -2.35816 0.908964 0.309905 0.278824 + 1.12271 1.42414 -2.49449 0.77297 0.613209 -0.162766 + 1.14345 1.41591 -2.45904 0.745012 0.666919 -0.0132562 + 1.12521 1.41402 -2.39556 0.350047 0.839597 0.415385 + 1.12732 1.39703 -2.37291 0.529964 0.647941 0.547092 + 1.12788 1.37252 -2.34763 0.633704 0.60949 0.476384 + 1.10958 1.43727 -2.53091 0.807849 0.589261 -0.0123 + 1.10257 1.4502 -2.51064 0.299789 0.941673 0.152899 + 1.1157 1.43707 -2.47422 0.296098 0.947993 0.116767 + 1.12068 1.42832 -2.43095 0.202895 0.94604 0.252669 + 1.0872 1.45862 -2.55028 -0.101398 0.902043 0.419567 + 1.0651 1.43849 -2.51953 -0.365941 0.850762 0.377215 + 1.08047 1.43007 -2.47989 -0.400776 0.844491 0.355264 + 1.08827 1.42286 -2.45185 -0.426107 0.859088 0.283549 + 1.09325 1.41411 -2.40858 -0.415227 0.863527 0.286196 + 1.07211 1.46623 -2.58029 -0.266725 0.903942 0.334284 + 1.05158 1.44868 -2.55174 -0.321343 0.865676 0.383853 + 1.03239 1.39605 -2.46553 -0.310864 0.836032 0.452122 + 1.04273 1.38481 -2.43909 -0.428083 0.807162 0.406491 + 1.05053 1.3776 -2.41105 -0.56815 0.769207 0.292449 + 1.05477 1.46814 -2.60152 -0.0989378 0.98452 0.144679 + 1.03424 1.45059 -2.57296 -0.239177 0.872383 0.426313 + 1.01887 1.40624 -2.49774 -0.296905 0.851189 0.43281 + 1.01012 1.45852 -2.59516 -0.193792 0.797486 0.571367 + 1.00783 1.42542 -2.53927 -0.193781 0.858121 0.475477 + 0.989471 1.40881 -2.51649 0.00476487 0.906329 0.422545 + 1.00051 1.38963 -2.47497 -0.0955533 0.897131 0.431307 + 0.945825 1.4539 -2.59787 -0.0250903 0.822875 0.567669 + 0.983706 1.43335 -2.56148 -0.110033 0.853487 0.509366 + 0.97287 1.42479 -2.54844 0.0404528 0.903227 0.427253 + 0.966778 1.42428 -2.54303 0.380226 0.893452 0.239106 + 0.983379 1.4083 -2.51108 0.336158 0.889576 0.309279 + 0.934989 1.44534 -2.58484 0.390867 0.828509 0.400994 + 0.953587 1.43266 -2.53555 0.603205 0.790734 0.104323 + 0.958541 1.41872 -2.50155 0.537446 0.790063 0.294878 + 0.992297 1.39131 -2.47694 0.263415 0.883641 0.387029 + 0.921798 1.45373 -2.57736 0.507489 0.845633 0.165406 + 0.920107 1.45833 -2.51853 0.542512 0.832478 0.112524 + 0.925061 1.44439 -2.48453 0.558694 0.691864 0.457368 + 0.915893 1.4166 -2.44975 0.316288 0.703462 0.636477 + 0.967459 1.40174 -2.46741 0.423473 0.820583 0.383816 + 0.897632 1.47042 -2.52947 0.392928 0.916927 0.0696626 + 0.896257 1.46308 -2.48865 0.221543 0.858125 0.463184 + 0.925289 1.40173 -2.43285 0.137979 0.919375 0.36839 + 0.869045 1.47487 -2.50963 -0.481698 0.812999 0.327109 + 0.976856 1.38687 -2.4505 0.376357 0.853843 0.359594 + 0.979449 1.38329 -2.44266 0.323786 0.929389 0.177196 + 0.996782 1.38135 -2.45573 0.215565 0.906702 0.362523 + 0.926061 1.40019 -2.41319 0.10809 0.988204 -0.108484 + 0.980221 1.38175 -2.42299 0.400273 0.912347 0.0860484 + 0.999376 1.37777 -2.44788 0.224358 0.929167 0.293788 + 1.00499 1.37967 -2.45376 -0.0919162 0.894453 0.437612 + 0.900157 1.40875 -2.39705 -0.392869 0.91051 -0.128943 + 0.951625 1.39691 -2.37665 0.405354 0.911567 0.0687989 + 0.990394 1.37137 -2.39786 0.505034 0.851674 0.139969 + 1.0063 1.37149 -2.43335 0.249941 0.925642 0.284107 + 1.01192 1.37339 -2.43923 -0.121277 0.893529 0.432317 + 0.904923 1.3998 -2.35364 -0.546584 0.695006 0.467132 + 0.925721 1.40547 -2.36051 0.166479 0.943247 0.287351 + 0.934407 1.38854 -2.33714 0.154179 0.776337 0.611171 + 0.965906 1.38361 -2.34665 0.442761 0.835566 0.325258 + 0.913609 1.38287 -2.33026 -0.427888 0.509488 0.746548 + 0.934902 1.34106 -2.30356 -0.36947 0.224604 0.90169 + 0.953642 1.32882 -2.2948 -0.261363 0.113784 0.95851 + 0.953148 1.3763 -2.32838 0.178339 0.705545 0.685858 + 1.00133 1.34122 -2.31349 0.581175 0.611366 0.537091 + 1.00467 1.35807 -2.36786 0.560645 0.797741 0.222008 + 0.923982 1.32046 -2.31195 -0.564815 -0.21977 0.795415 + 0.964126 1.2872 -2.29852 -0.272026 -0.322621 0.906596 + 0.98857 1.33391 -2.29523 0.3075 0.366199 0.878261 + 0.999054 1.29229 -2.29894 0.202249 -0.194391 0.959848 + 1.03163 1.2676 -2.31336 0.0884451 -0.287302 0.953748 + 1.01635 1.33292 -2.32115 0.246751 0.578691 0.777323 + 1.0197 1.34977 -2.37551 0.301769 0.900714 0.312488 + 1.02274 1.35574 -2.39516 0.202451 0.942425 0.266175 + 1.02766 1.18516 -2.35767 0.0305372 -0.452893 0.891042 + 1.09442 1.18844 -2.3562 0.157629 -0.433256 0.88738 + 1.11827 1.21179 -2.35083 0.331964 -0.368864 0.868182 + 1.05547 1.29095 -2.308 -0.0301127 -0.185052 0.982267 + 1.04089 1.3488 -2.32091 -0.507567 0.665734 0.546968 + 1.03359 1.12844 -2.38576 -0.0801297 -0.444578 0.892149 + 1.12305 1.27855 -2.33621 0.393966 -0.259332 0.881781 + 1.0902 1.07266 -2.41137 0.119314 -0.380754 0.916946 + 1.02105 0.987635 -2.44024 -0.154308 -0.278709 0.947898 + 1.0297 0.886628 -2.46568 -0.103472 -0.260766 0.959841 + 1.06108 0.889287 -2.46803 0.183974 -0.274038 0.943958 + 1.03002 0.792394 -2.48968 -0.12729 -0.247442 0.960505 + 1.04174 0.706138 -2.5106 -0.108579 -0.29611 0.948962 + 1.04691 0.621429 -2.54133 -0.105556 -0.398376 0.911128 + 1.01869 0.705681 -2.51892 -0.508879 -0.303801 0.805449 + 1.03234 0.621138 -2.54659 -0.488823 -0.386644 0.782022 + 1.05544 0.539107 -2.5826 -0.0808367 -0.541862 0.836571 + 1.01635 0.62228 -2.56218 -0.730254 -0.346054 0.589046 + 1.04087 0.538816 -2.58787 -0.468016 -0.521579 0.713384 + 1.02226 1.36215 -2.41278 -0.155148 0.896973 0.413967 + 1.02852 1.35678 -2.39971 -0.28 0.90287 0.32623 + 1.05104 1.3772 -2.40825 -0.622327 0.746934 0.23409 + 1.01648 1.3611 -2.40822 0.267526 0.927142 0.26237 + 1.02904 1.35638 -2.39692 -0.355279 0.908303 0.220823 + 1.05053 1.3663 -2.37704 -0.604503 0.774731 0.185385 + 1.09274 1.4032 -2.37737 -0.291054 0.854274 0.430702 + 1.09486 1.38622 -2.35472 -0.0296707 0.815359 0.578194 + 1.10435 1.37495 -2.33329 0.135446 0.80219 0.581503 + 1.13502 1.34588 -2.32554 0.785912 0.247448 0.566667 + 1.05038 1.33753 -2.29949 -0.531035 0.271629 0.802633 + 1.11149 1.3483 -2.31119 0.291618 0.4455 0.846457 + 1.026 1.35042 -2.37727 -0.289128 0.927375 0.237444 + 1.11603 1.3317 -2.30933 0.439293 -0.140627 0.887269 + 1.05491 1.32093 -2.29762 -0.377026 -0.174552 0.909606 + 1.12248 1.30853 -2.32584 0.517317 -0.279085 0.809008 + 1.14148 1.32271 -2.34204 0.858726 0.0330041 0.511372 + 1.15027 1.30599 -2.35226 0.805698 0.0997527 0.583866 + 1.14957 1.27336 -2.35176 0.685183 -0.13648 0.71547 + -0.872043 1.89298 -1.22862 0.906308 0.309655 -0.287609 + -0.870466 1.89166 -1.22009 0.991227 0.124971 0.0430212 + -0.875993 1.86509 -1.23433 0.963138 -0.268909 -0.00727253 + -0.878416 1.90396 -1.21984 0.682344 0.718651 -0.133966 + -0.876839 1.90264 -1.21131 0.798859 0.588623 0.123882 + -0.873278 1.89039 -1.20845 0.877273 -0.0865625 0.472121 + -0.878806 1.86382 -1.22269 0.80529 -0.438182 0.39938 + -0.878324 1.8668 -1.24714 0.923999 -0.0316581 -0.381081 + -0.878844 1.8951 -1.23876 0.630611 0.522384 -0.573974 + -0.881941 1.90506 -1.22509 0.505147 0.792278 -0.342232 + -0.890991 1.82377 -1.25843 0.98238 -0.186885 0.00167389 + -0.893321 1.82549 -1.27123 0.92697 0.0239723 -0.374368 + -0.885126 1.86893 -1.25728 0.665671 0.256176 -0.700896 + -0.887826 1.89661 -1.24271 0.263853 0.670355 -0.693546 + -0.890922 1.90658 -1.22905 0.207468 0.850413 -0.483482 + -0.89469 1.82278 -1.24289 0.816384 -0.373652 0.440341 + -0.896376 1.771 -1.26494 0.873595 -0.112767 0.473409 + -0.892676 1.772 -1.28048 0.997121 0.0667434 0.035995 + -0.895936 1.77431 -1.29849 0.912621 0.230447 -0.337665 + -0.902286 1.82802 -1.2849 0.63934 0.29314 -0.710854 + -0.904845 1.82269 -1.23241 0.494555 -0.435937 0.751914 + -0.910577 1.77123 -1.25016 0.535428 -0.248437 0.807215 + -0.886475 1.71007 -1.2832 0.871928 -0.0515183 0.486916 + -0.88112 1.71182 -1.3056 0.990685 0.130028 0.0404335 + -0.88438 1.71413 -1.3236 0.912671 0.289861 -0.288119 + -0.88896 1.86373 -1.21221 0.483747 -0.495917 0.721148 + -0.903325 1.86447 -1.20606 0.132739 -0.436019 0.890094 + -0.924168 1.82424 -1.22396 0.108913 -0.391933 0.913524 + -0.9299 1.77278 -1.24171 0.142829 -0.285525 0.947668 + -0.880026 1.89016 -1.20144 0.579182 -0.214051 0.786594 + -0.89439 1.89091 -1.19529 0.162861 -0.23394 0.958514 + -0.90428 1.89206 -1.19567 -0.285973 -0.110498 0.951845 + -0.918214 1.86636 -1.2066 -0.333127 -0.221324 0.916538 + -0.878296 1.90197 -1.20528 0.783152 0.41717 0.461132 + -0.885044 1.90176 -1.19827 0.539733 0.162079 0.826086 + -0.89249 1.90214 -1.19508 0.214635 0.115231 0.969873 + -0.902379 1.90329 -1.19545 -0.289263 0.279122 0.915651 + -0.915198 1.89422 -1.20284 -0.647449 0.106059 0.754693 + -0.885643 1.90921 -1.20591 0.42256 0.901865 0.0898981 + -0.8871 1.90855 -1.19987 0.43175 0.7354 0.522282 + -0.894546 1.90894 -1.19668 0.0793515 0.716269 0.693298 + -0.900206 1.91005 -1.20039 -0.135364 0.87971 0.455837 + -0.908039 1.90442 -1.19917 -0.53612 0.404426 0.740955 + -0.889304 1.90999 -1.20868 0.215372 0.972149 0.0924182 + -0.887159 1.91034 -1.21301 0.493206 0.851323 0.178879 + -0.902818 1.91189 -1.21188 -0.138249 0.990397 -0.000590168 + -0.904962 1.91155 -1.20754 -0.246723 0.962109 0.116081 + -0.903867 1.91083 -1.20316 -0.236963 0.89282 0.383042 + -0.913211 1.9058 -1.20534 -0.67462 0.574165 0.463921 + -0.890685 1.91144 -1.21827 0.242829 0.956785 -0.159989 + -0.899021 1.91234 -1.21824 -0.0579772 0.985062 -0.162145 + -0.912241 1.90737 -1.21786 -0.545397 0.824269 -0.152059 + -0.914307 1.90651 -1.20973 -0.679593 0.722295 0.128231 + -0.899259 1.90748 -1.22901 -0.0452893 0.874012 -0.48379 + -0.908445 1.90781 -1.22421 -0.382049 0.863201 -0.330035 + -0.920418 1.89784 -1.2256 -0.698801 0.678636 -0.226122 + -0.922484 1.89698 -1.21745 -0.821951 0.564428 0.0762759 + -0.920371 1.8956 -1.209 -0.811236 0.318425 0.490409 + -0.903908 1.89837 -1.24266 -0.0996361 0.746249 -0.658168 + -0.913094 1.8987 -1.23785 -0.449539 0.75322 -0.480181 + -0.935862 1.8728 -1.2436 -0.734935 0.627395 -0.257385 + -0.938796 1.87199 -1.23129 -0.856756 0.510932 0.070134 + -0.936683 1.87061 -1.22284 -0.833461 0.274293 0.479694 + -0.898674 1.87111 -1.26329 0.247186 0.504264 -0.827416 + -0.914757 1.87286 -1.26323 -0.126644 0.629636 -0.766498 + -0.928538 1.87366 -1.25585 -0.512226 0.675654 -0.530204 + -0.961024 1.83316 -1.2666 -0.810346 0.510056 -0.288413 + -0.963958 1.83235 -1.2543 -0.919178 0.391394 0.0438425 + -0.915835 1.83019 -1.29091 0.233277 0.472791 -0.849736 + -0.937617 1.83285 -1.29074 -0.171827 0.568522 -0.804524 + -0.951398 1.83367 -1.28336 -0.572521 0.576395 -0.583084 + -0.904902 1.77684 -1.31216 0.636783 0.383808 -0.668729 + -0.923847 1.78005 -1.32045 0.226508 0.47211 -0.851943 + -0.94563 1.78271 -1.32028 -0.181963 0.492792 -0.850909 + -0.964985 1.78391 -1.3099 -0.639266 0.428759 -0.638361 + -0.897349 1.7179 -1.34324 0.626536 0.441472 -0.642305 + -0.916294 1.72112 -1.35154 0.237272 0.482735 -0.843012 + -0.947541 1.72482 -1.35133 -0.21631 0.420502 -0.881129 + -0.966896 1.726 -1.34095 -0.635336 0.344638 -0.691067 + -0.974611 1.7834 -1.29314 -0.883852 0.322957 -0.338385 + -0.869117 1.64944 -1.35508 0.96164 0.229512 -0.150244 + -0.882085 1.65322 -1.37472 0.737273 0.457839 -0.496801 + -0.898097 1.66592 -1.38022 0.34574 0.527152 -0.776257 + -0.929344 1.6696 -1.38002 -0.174811 0.420133 -0.890466 + -0.875055 1.65277 -1.32577 0.976768 0.0268427 0.212611 + -0.861878 1.58725 -1.38164 0.810577 0.58253 0.0601896 + -0.847109 1.57183 -1.41682 0.606951 0.544404 -0.578994 + -0.863122 1.58453 -1.42233 0.2779 0.460555 -0.843007 + -0.88041 1.65102 -1.30338 0.863869 -0.111854 0.491141 + -0.884443 1.60108 -1.31182 0.726892 0.579662 0.368266 + -0.867816 1.59058 -1.35233 0.791151 0.604791 0.0911428 + -0.838959 1.57718 -1.37458 -0.0929606 0.915269 -0.39197 + -0.904427 1.65354 -1.28173 0.504421 -0.221484 0.834568 + -0.90846 1.6036 -1.29017 0.351924 0.557286 0.752052 + -0.880133 1.59288 -1.26871 0.437136 0.885603 -0.156908 + -0.86893 1.59311 -1.27569 -0.345372 0.881904 0.320881 + -0.870447 1.59662 -1.30624 -0.182747 0.976742 -0.112155 + -0.900676 1.7103 -1.26843 0.566795 -0.183282 0.803213 + -0.932203 1.65554 -1.26966 0.248465 -0.263881 0.932004 + -0.950853 1.59833 -1.28282 0.0634073 0.500791 0.863243 + -0.908318 1.60006 -1.27887 0.0903891 0.971264 -0.220174 + -0.928452 1.71229 -1.25636 0.179959 -0.215087 0.959871 + -0.966784 1.65206 -1.26669 -0.179798 -0.0784023 0.980574 + -0.985434 1.59485 -1.27985 0.0396224 0.37881 0.924626 + -0.95071 1.59479 -1.27152 -0.189605 0.935081 -0.299456 + -0.950772 1.77543 -1.24251 -0.353209 -0.232864 0.9061 + -0.949324 1.71495 -1.25716 -0.30387 -0.149123 0.94097 + -0.987782 1.65617 -1.28064 -0.572072 0.200185 0.795399 + -1.02909 1.58369 -1.27341 -0.486597 0.588652 0.645532 + -0.986353 1.58749 -1.26568 -0.283168 0.945129 -0.162931 + -0.939057 1.82614 -1.2245 -0.353492 -0.224564 0.908083 + -0.95363 1.82897 -1.23424 -0.681336 -0.0257633 0.731517 + -0.965345 1.77828 -1.25224 -0.682496 -0.133003 0.718686 + -0.970322 1.71906 -1.2711 -0.666648 -0.0469242 0.743895 + -1.00127 1.65438 -1.2915 -0.823559 0.305949 0.477646 + -0.929133 1.86853 -1.21377 -0.659105 0.0268868 0.75157 + -0.96118 1.83107 -1.24331 -0.869195 0.177609 0.46147 + -0.976077 1.78081 -1.26509 -0.896511 0.00725937 0.442961 + -0.981054 1.7216 -1.28396 -0.886765 0.072845 0.456445 + -0.978855 1.78209 -1.27609 -0.982353 0.185872 0.0208488 + -0.985075 1.72368 -1.29993 -0.97906 0.203571 0.00074545 + -1.00529 1.65647 -1.30746 -0.954991 0.288837 -0.0675579 + -1.02939 1.58151 -1.30581 -0.802917 0.410275 -0.432433 + -1.04258 1.58189 -1.28426 -0.819923 0.552277 0.150722 + -0.980832 1.72499 -1.31697 -0.891432 0.267849 -0.36552 + -0.993663 1.65649 -1.33417 -0.860176 0.273327 -0.430569 + -0.979727 1.6575 -1.35814 -0.677031 0.312093 -0.666503 + -0.99587 1.58131 -1.37529 -0.700148 0.312471 -0.641993 + -1.01775 1.58153 -1.33251 -0.862554 0.302415 -0.405643 + -0.945141 1.64544 -1.38566 -0.364868 0.352261 -0.861849 + -0.961283 1.56924 -1.40281 -0.412822 0.280314 -0.866603 + -0.959292 1.50938 -1.42342 -0.340609 0.325865 -0.881928 + -1.01072 1.52239 -1.39266 -0.605649 0.402589 -0.686376 + -1.03261 1.52261 -1.34987 -0.674224 0.515633 -0.528719 + -0.878919 1.56037 -1.42798 -0.195071 0.310706 -0.930274 + -0.876928 1.5005 -1.44858 -0.144409 0.311681 -0.939149 + -0.91434 1.41689 -1.47011 -0.156472 0.311528 -0.937266 + -0.963096 1.45929 -1.44114 -0.315615 0.356528 -0.87936 + -1.01453 1.4723 -1.41038 -0.425182 0.364873 -0.828304 + -0.846034 1.46578 -1.46154 0.233616 0.241625 -0.941828 + -0.883447 1.38217 -1.48305 0.124474 0.13202 -0.983401 + -0.898388 1.34766 -1.48767 0.123335 -0.0950757 -0.9878 + -0.917624 1.35307 -1.48944 -0.00480222 -0.000494099 -0.999988 + -0.931404 1.37385 -1.48235 -0.146305 0.292848 -0.944899 + -0.825578 1.46091 -1.45214 0.562182 0.189546 -0.804999 + -0.858552 1.35956 -1.47319 0.409302 -0.0362143 -0.91168 + -0.873494 1.32504 -1.47781 0.291707 -0.289544 -0.911631 + -0.905805 1.32772 -1.47999 0.00711285 -0.419096 -0.907914 + -0.800462 1.47952 -1.42216 0.661257 0.205826 -0.72137 + -0.801622 1.36272 -1.44547 0.660726 -0.0894884 -0.745274 + -0.838096 1.3547 -1.4638 0.431881 -0.0956025 -0.896849 + -0.847121 1.30088 -1.4556 0.404243 -0.428369 -0.808139 + -0.878787 1.29238 -1.45967 0.135536 -0.536607 -0.832876 + -0.82419 1.56177 -1.40977 0.337066 0.553259 -0.761768 + -0.797539 1.54957 -1.40402 0.52542 0.33391 -0.782584 + -0.747944 1.46971 -1.36831 0.844839 0.0521338 -0.532475 + -0.776506 1.38133 -1.41549 0.844492 -0.077987 -0.52986 + -0.81319 1.62786 -1.33727 -0.337585 0.68048 -0.650372 + -0.796629 1.62009 -1.34554 0.206189 0.637418 -0.742418 + -0.769978 1.60789 -1.33978 0.543432 0.457793 -0.703638 + -0.745021 1.53976 -1.35016 0.834634 0.182101 -0.519833 + -0.853821 1.58612 -1.34676 -0.128819 0.933463 -0.334743 + -0.828052 1.63679 -1.30945 -0.693575 0.576219 -0.432348 + -0.810805 1.6878 -1.27831 -0.72497 0.464106 -0.508944 + -0.799337 1.68411 -1.29216 -0.350305 0.581457 -0.734298 + -0.782775 1.67633 -1.30044 0.167974 0.577252 -0.799103 + -0.838414 1.63727 -1.28553 -0.833488 0.531842 -0.149804 + -0.821167 1.68827 -1.25439 -0.948822 0.280937 -0.144264 + -0.815791 1.74438 -1.22561 -0.951264 0.268122 -0.152338 + -0.808645 1.74381 -1.24229 -0.747752 0.428121 -0.507523 + -0.797176 1.7401 -1.25615 -0.399648 0.532433 -0.746188 + -0.836896 1.63376 -1.25498 -0.888111 0.302075 0.346423 + -0.820232 1.68161 -1.23398 -0.957166 0.0693887 0.281101 + -0.824419 1.61758 -1.23136 -0.776615 0.159603 0.609423 + -0.807755 1.66545 -1.21036 -0.814483 -0.0830342 0.574216 + -0.806145 1.72636 -1.18875 -0.832721 -0.106153 0.543422 + -0.814856 1.73774 -1.2052 -0.961599 0.0447122 0.270793 + -0.850108 1.57875 -1.2451 -0.318682 0.693232 0.64643 + -0.835122 1.56096 -1.22364 -0.173449 0.690433 0.702295 + -0.809434 1.59979 -1.20989 -0.461089 -0.0244787 0.887016 + -0.796131 1.65424 -1.19988 -0.500294 -0.183112 0.846272 + -0.861311 1.57852 -1.23812 0.733863 0.679289 -0.00336986 + -0.849239 1.56173 -1.2133 0.777123 0.629332 0.0044704 + -0.8172 1.54075 -1.19538 0.0108935 0.571457 0.82056 + -0.794672 1.59027 -1.20888 -0.164164 0.049896 0.98517 + -0.781369 1.64472 -1.19888 0.0255952 -0.226581 0.973656 + -0.87211 1.63319 -1.23201 0.695116 0.40654 -0.592907 + -0.857655 1.61714 -1.21114 0.903617 0.223761 -0.365251 + -0.845582 1.60035 -1.18631 0.984695 0.170564 -0.0358382 + -0.831316 1.54152 -1.18504 0.775414 0.236603 0.58545 + -0.900294 1.64037 -1.24217 0.225142 0.590236 -0.775198 + -0.895755 1.68979 -1.20754 0.258425 0.552647 -0.792336 + -0.873755 1.68132 -1.19933 0.706402 0.434756 -0.558555 + -0.8593 1.66527 -1.17846 0.935592 0.270435 -0.227009 + -0.937101 1.64394 -1.24057 -0.1319 0.592101 -0.794996 + -0.932562 1.69336 -1.20595 -0.127838 0.56311 -0.816434 + -0.929618 1.74917 -1.16933 -0.134395 0.560104 -0.817448 + -0.903856 1.7466 -1.17053 0.228236 0.535647 -0.813013 + -0.881855 1.73813 -1.16231 0.695428 0.406208 -0.592768 + -0.972744 1.63665 -1.23472 -0.516066 0.56559 -0.64326 + -0.95376 1.69237 -1.19926 -0.514852 0.532319 -0.671985 + -0.950816 1.74817 -1.16265 -0.54821 0.518082 -0.656549 + -0.921356 1.79703 -1.13685 -0.137817 0.605058 -0.784163 + -0.895594 1.79447 -1.13804 0.230032 0.510906 -0.828288 + -0.985381 1.63085 -1.22063 -0.705974 0.603704 -0.370328 + -0.966397 1.68657 -1.18517 -0.872173 0.383358 -0.303894 + -0.95951 1.7442 -1.1529 -0.878662 0.362855 -0.310305 + -0.945054 1.79252 -1.1222 -0.826534 0.520191 -0.215043 + -0.93636 1.7965 -1.13195 -0.517403 0.627547 -0.581789 + -1.03001 1.57633 -1.25923 -0.575224 0.816809 -0.044055 + -1.0336 1.58068 -1.23618 -0.825629 0.542276 0.155799 + -0.988965 1.63519 -1.19758 -0.863934 0.503604 -0.0010976 + -0.970598 1.67943 -1.1668 -0.972993 0.229908 0.0206435 + -1.0855 1.52355 -1.28503 -0.72666 0.68691 0.0109257 + -1.07278 1.5156 -1.24957 -0.700988 0.495403 0.513022 + -1.03741 1.56026 -1.23476 -0.691879 0.213944 0.689588 + -0.986193 1.62416 -1.16889 -0.877818 0.208357 0.431304 + -0.967825 1.6684 -1.13811 -0.926718 0.0253183 0.374902 + -1.07231 1.52317 -1.30657 -0.63163 0.658588 -0.409031 + -1.1273 1.48199 -1.31873 -0.739385 0.631231 -0.234218 + -1.13437 1.47422 -1.2827 -0.842878 0.500701 0.19712 + -1.12165 1.46626 -1.24724 -0.689001 0.49929 0.525345 + -1.06195 1.51683 -1.33241 -0.530995 0.650958 -0.542492 + -1.11694 1.47565 -1.34457 -0.570321 0.593929 -0.567435 + -1.14774 1.43202 -1.33843 -0.881684 0.283683 -0.377038 + -1.15481 1.42424 -1.30241 -0.959185 0.275677 -0.0629799 + -1.07912 1.46677 -1.37376 -0.469743 0.541887 -0.696921 + -1.08654 1.42099 -1.39583 -0.492779 0.340748 -0.800662 + -1.12435 1.42987 -1.36663 -0.631998 0.330444 -0.700989 + -1.13619 1.36352 -1.37206 -0.836011 0.0723177 -0.543926 + -1.15203 1.37176 -1.33905 -0.949427 0.00150368 -0.313985 + -1.04978 1.47254 -1.39122 -0.510367 0.488991 -0.707399 + -1.05458 1.42328 -1.4134 -0.461849 0.324665 -0.825402 + -1.07643 1.36615 -1.41705 -0.456017 0.238863 -0.857317 + -1.11281 1.36137 -1.40025 -0.631286 0.163749 -0.758066 + -1.01932 1.42304 -1.43253 -0.428746 0.335059 -0.838995 + -1.04447 1.36845 -1.43462 -0.44154 0.212789 -0.871644 + -1.06289 1.32996 -1.4339 -0.433489 0.0534646 -0.899572 + -1.09927 1.32518 -1.4171 -0.566949 -0.13472 -0.812662 + -1.124 1.32265 -1.39441 -0.748603 -0.231306 -0.621362 + -0.999749 1.41196 -1.44675 -0.424941 0.315738 -0.848372 + -1.02934 1.36782 -1.44163 -0.450422 0.213904 -0.866813 + -1.04776 1.32933 -1.44091 -0.303422 -0.169625 -0.937637 + -1.0756 1.31095 -1.42544 -0.359296 -0.502092 -0.786645 + -1.10033 1.30842 -1.40275 -0.512621 -0.65194 -0.558743 + -0.98016 1.41624 -1.45338 -0.313735 0.356921 -0.879874 + -0.983801 1.36316 -1.47119 -0.44886 0.0466153 -0.892385 + -1.00976 1.35673 -1.45584 -0.476266 0.0428696 -0.878255 + -1.0232 1.32438 -1.44257 -0.164124 -0.561058 -0.811343 + -1.05104 1.306 -1.4271 -0.0461919 -0.735399 -0.676058 + -0.964212 1.36744 -1.47782 -0.278073 0.249054 -0.927711 + -0.950432 1.34667 -1.48492 -0.232695 -0.107729 -0.966565 + -0.959516 1.32626 -1.47543 -0.356838 -0.346624 -0.867478 + -0.975488 1.31856 -1.45992 -0.631631 -0.347653 -0.69295 + -0.986845 1.32558 -1.45128 -0.397712 -0.560167 -0.726662 + -0.997242 1.33079 -1.45792 -0.129543 -0.505558 -0.853012 + -0.92504 1.33313 -1.48176 -0.0503172 -0.374275 -0.925951 + -0.934125 1.31272 -1.47229 -0.0393786 -0.431432 -0.901286 + -0.953963 1.27147 -1.45152 -0.264284 -0.525873 -0.808462 + -0.969935 1.26377 -1.436 -0.5675 -0.62204 -0.539453 + -0.998013 1.28192 -1.41023 -0.681843 -0.57079 -0.457481 + -0.911098 1.29504 -1.46185 0.0410974 -0.496129 -0.867276 + -0.930936 1.2538 -1.44108 -0.0590664 -0.697573 -0.714075 + -0.956661 1.2448 -1.41453 -0.432946 -0.8877 -0.15667 + -0.893346 1.23712 -1.42343 0.13856 -0.841047 -0.522915 + -0.919071 1.22812 -1.39687 -0.226062 -0.973651 -0.030003 + -0.964953 1.26802 -1.36961 -0.365829 -0.845304 0.389398 + -0.984739 1.26295 -1.38875 -0.470922 -0.870186 0.144946 + -0.86168 1.24562 -1.41937 0.371123 -0.764703 -0.52678 + -0.89989 1.22817 -1.37247 -0.159891 -0.981796 0.102529 + -0.945771 1.26806 -1.34521 -0.4441 -0.803746 0.39594 + -0.988898 1.28436 -1.35462 -0.193064 -0.899432 0.392108 + -1.00868 1.27929 -1.37378 -0.205944 -0.946629 0.247952 + -0.810647 1.30891 -1.43728 0.663836 -0.38671 -0.640139 + -0.797745 1.30144 -1.40886 0.786186 -0.463423 -0.408841 + -0.848779 1.23816 -1.39094 0.408277 -0.865968 -0.288807 + -0.884292 1.22887 -1.33956 -0.202803 -0.96004 0.192857 + -0.940004 1.27931 -1.31705 -0.474272 -0.783072 0.402324 + -0.781434 1.29574 -1.36206 0.810838 -0.512512 -0.282618 + -0.833181 1.23887 -1.35803 0.484309 -0.865139 -0.130303 + -0.868618 1.23326 -1.31297 -0.10185 -0.938913 0.328737 + -0.92433 1.28369 -1.29046 -0.48995 -0.794124 0.359606 + -0.969913 1.30349 -1.30289 -0.26035 -0.878781 0.399952 + -0.760195 1.37562 -1.3687 0.893713 -0.185094 -0.408676 + -0.744214 1.35836 -1.33319 0.945043 -0.275886 -0.175448 + -0.769769 1.30105 -1.3271 0.854378 -0.519446 -0.014623 + -0.821516 1.24417 -1.32307 0.499518 -0.864519 0.0555766 + -0.731964 1.45244 -1.3328 0.992013 -0.0319239 -0.122028 + -0.742543 1.37551 -1.30253 0.966831 -0.210614 0.144497 + -0.768097 1.31819 -1.29644 0.892271 -0.438289 0.108423 + -0.804387 1.25859 -1.2947 0.630796 -0.774476 0.0477846 + -0.851488 1.24768 -1.28461 -0.067139 -0.931338 0.357913 + -0.731258 1.53341 -1.31358 0.998527 -0.0148241 0.0521915 + -0.741959 1.47673 -1.30362 0.901197 -0.00626066 0.433365 + -0.737625 1.4509 -1.30698 0.948698 0.0533647 0.311649 + -0.748204 1.37398 -1.2767 0.956536 -0.145545 0.252698 + -0.73042 1.58921 -1.28664 0.996852 -0.0416892 -0.0674328 + -0.754843 1.53399 -1.27322 0.864178 -0.240312 0.442093 + -0.765543 1.47731 -1.26327 0.86311 0.0311546 0.504054 + -0.771192 1.37805 -1.22652 0.854608 0.073574 0.514034 + -0.766858 1.35223 -1.22987 0.887648 -0.0364215 0.459079 + -0.744183 1.59556 -1.32321 0.797809 0.277038 -0.535491 + -0.73886 1.65542 -1.28029 0.804516 0.334796 -0.490577 + -0.729767 1.64655 -1.26158 0.988651 0.118691 -0.0920931 + -0.735051 1.58088 -1.25955 0.924088 -0.288213 0.250988 + -0.764655 1.66775 -1.29685 0.51872 0.478771 -0.708313 + -0.767748 1.72589 -1.25841 0.507052 0.46029 -0.728719 + -0.749705 1.71721 -1.2469 0.781544 0.341015 -0.522396 + -0.740612 1.70835 -1.2282 0.98953 0.115902 -0.0860029 + -0.734398 1.63822 -1.23451 0.936057 -0.0757107 0.343605 + -0.785869 1.73448 -1.26199 0.104175 0.541907 -0.833957 + -0.775806 1.7833 -1.22897 0.112083 0.538153 -0.835361 + -0.762937 1.77707 -1.22652 0.484678 0.387595 -0.784129 + -0.744894 1.76839 -1.21501 0.779226 0.193029 -0.596278 + -0.787113 1.78893 -1.22313 -0.34934 0.613948 -0.707834 + -0.755451 1.82303 -1.20038 0.1374 0.551877 -0.822528 + -0.742583 1.81679 -1.19792 0.497042 0.347328 -0.795181 + -0.729409 1.81058 -1.18933 0.77529 0.121646 -0.619781 + -0.73841 1.76216 -1.20164 0.97978 -0.0917826 -0.177783 + -0.795407 1.79133 -1.21336 -0.658041 0.586085 -0.472744 + -0.764379 1.82667 -1.19626 -0.277715 0.681506 -0.677069 + -0.741745 1.84601 -1.18167 0.204181 0.659839 -0.723134 + -0.733057 1.84215 -1.17988 0.514365 0.496153 -0.699472 + -0.802553 1.79192 -1.19667 -0.882195 0.461421 -0.0939292 + -0.772673 1.82908 -1.18649 -0.579913 0.69253 -0.429073 + -0.750673 1.84965 -1.17755 -0.188094 0.794018 -0.578062 + -0.743052 1.85483 -1.16918 0.00447195 0.913352 -0.407147 + -0.738424 1.85294 -1.17131 0.27292 0.812698 -0.514817 + -0.801975 1.78702 -1.18221 -0.911946 0.234796 0.336491 + -0.778137 1.82888 -1.1742 -0.800014 0.597594 -0.0534719 + -0.756334 1.85098 -1.17113 -0.449576 0.819039 -0.35645 + -0.793264 1.77565 -1.16576 -0.782719 0.0284441 0.621725 + -0.777559 1.82398 -1.15972 -0.844614 0.357656 0.398383 + -0.761798 1.85078 -1.15885 -0.657911 0.752358 0.0333343 + -0.751545 1.85605 -1.1564 -0.326852 0.940235 0.0955249 + -0.748713 1.85615 -1.16277 -0.217755 0.957264 -0.190338 + -0.784826 1.76798 -1.15815 -0.511949 -0.171132 0.841797 + -0.771158 1.81581 -1.14754 -0.725054 0.144512 0.673359 + -0.761438 1.84749 -1.14925 -0.684288 0.573735 0.450087 + -0.794522 1.71516 -1.17827 -0.534363 -0.246129 0.808626 + -0.774765 1.76119 -1.15758 -0.0640767 -0.360595 0.930519 + -0.754731 1.8035 -1.13919 -0.0356894 -0.330692 0.943064 + -0.76272 1.80815 -1.13993 -0.445973 -0.098756 0.889581 + -0.78446 1.70838 -1.1777 -0.0523457 -0.337575 0.939842 + -0.763914 1.75726 -1.16133 0.283687 -0.432456 0.855864 + -0.74388 1.79956 -1.14295 0.298472 -0.448309 0.842576 + -0.734015 1.8273 -1.13362 0.388158 -0.136265 0.911463 + -0.741401 1.82964 -1.13126 0.107301 -0.0399785 0.993422 + -0.766167 1.63927 -1.20409 0.390237 -0.20961 0.896537 + -0.769258 1.70293 -1.18292 0.332011 -0.329471 0.883865 + -0.74944 1.75483 -1.17051 0.626237 -0.428749 0.651154 + -0.733049 1.79826 -1.14971 0.615789 -0.479637 0.625101 + -0.774195 1.59321 -1.20828 0.302909 -0.051395 0.951633 + -0.745318 1.63607 -1.21726 0.715067 -0.168922 0.67834 + -0.754784 1.7005 -1.1921 0.668835 -0.257342 0.697448 + -0.796723 1.54369 -1.19477 0.41874 0.0558634 0.906386 + -0.753347 1.59002 -1.22145 0.722071 -0.200015 0.662275 + -0.743863 1.70264 -1.20935 0.934175 -0.0959354 0.343675 + -0.865981 1.48471 -1.16314 0.40967 -0.0576064 0.910413 + -0.823026 1.46197 -1.17892 0.487505 0.0327931 0.872504 + -0.804852 1.47827 -1.19603 0.789687 -0.00834706 0.613453 + -0.796371 1.52699 -1.20372 0.878679 -0.194765 0.435878 + -0.850865 1.53594 -1.16128 0.655846 -0.118078 0.745603 + -0.926244 1.49054 -1.13347 0.22992 -0.104114 0.967624 + -0.957644 1.41559 -1.13398 0.174036 -0.0592022 0.982958 + -0.896919 1.43523 -1.15219 0.300657 -0.0208961 0.953503 + -0.853963 1.41249 -1.16796 0.30365 -0.0227408 0.952512 + -0.871136 1.58554 -1.14314 0.621126 -0.119351 0.774569 + -0.911128 1.54176 -1.13161 0.227288 -0.127485 0.965447 + -0.959461 1.50028 -1.13282 -0.360415 0.0938556 0.928058 + -0.990861 1.42533 -1.13332 -0.302588 0.130339 0.944168 + -0.976872 1.35841 -1.13414 0.101286 -0.115824 0.988092 + -0.851587 1.59112 -1.1669 0.861823 0.0620139 0.503404 + -0.876677 1.64231 -1.1261 0.62087 -0.184222 0.76196 + -0.900081 1.58792 -1.12604 0.266269 -0.213279 0.940007 + -0.937216 1.59524 -1.12558 -0.298504 -0.193999 0.934484 + -0.948263 1.54908 -1.13115 -0.399725 0.0225855 0.916357 + -0.855673 1.6544 -1.1612 0.983547 0.13168 0.123674 + -0.861678 1.64516 -1.14179 0.859872 -0.0649668 0.506359 + -0.887343 1.7067 -1.10138 0.59639 -0.26688 0.75703 + -0.905622 1.64469 -1.10901 0.241066 -0.27587 0.930474 + -0.868179 1.71596 -1.13054 0.994723 0.0547532 0.0867635 + -0.872343 1.70956 -1.11707 0.867025 -0.132453 0.480337 + -0.871456 1.76321 -1.09177 0.847421 -0.340439 0.407405 + -0.882147 1.76099 -1.0807 0.567752 -0.422483 0.706517 + -0.90756 1.70853 -1.08935 0.233078 -0.324331 0.916779 + -0.871806 1.72683 -1.1478 0.93999 0.223535 -0.25778 + -0.869894 1.77725 -1.11761 0.927553 0.0460175 -0.370847 + -0.867292 1.76962 -1.10525 0.988085 -0.150058 -0.0342125 + -0.879943 1.78854 -1.13211 0.668 0.295993 -0.682762 + -0.863138 1.82711 -1.10443 0.686355 0.24909 -0.68328 + -0.855652 1.81903 -1.09362 0.914461 -0.0115536 -0.404508 + -0.85305 1.8114 -1.08127 0.973057 -0.221965 -0.0623749 + -0.856177 1.80659 -1.07119 0.842332 -0.399671 0.361579 + -0.878788 1.83304 -1.11036 0.244258 0.523043 -0.816556 + -0.867431 1.85564 -1.09128 0.298002 0.713316 -0.634331 + -0.857132 1.85179 -1.0873 0.700486 0.527575 -0.480608 + -0.849646 1.84372 -1.07649 0.937572 0.293633 -0.186383 + -0.897558 1.83475 -1.10967 -0.1086 0.648312 -0.75359 + -0.886201 1.85735 -1.09059 -0.0874498 0.798326 -0.595842 + -0.880174 1.86256 -1.08044 -0.0212004 0.947889 -0.317893 + -0.870445 1.86166 -1.0808 0.230179 0.915618 -0.329637 + -0.860146 1.85782 -1.07682 0.607765 0.788699 -0.0925984 + -0.912562 1.83421 -1.10477 -0.476359 0.708658 -0.520467 + -0.896175 1.85682 -1.08738 -0.408271 0.816717 -0.407784 + -0.890148 1.86201 -1.07722 -0.294137 0.949637 -0.108037 + -0.878847 1.864 -1.07216 0.00391151 0.988105 0.153731 + -0.869117 1.86311 -1.07252 0.275387 0.948594 0.155986 + -0.91926 1.83109 -1.09737 -0.760482 0.631842 -0.149811 + -0.902873 1.85371 -1.07998 -0.686894 0.723839 -0.0650683 + -0.89362 1.8604 -1.07339 -0.46137 0.879973 0.113075 + -0.882319 1.86238 -1.06833 -0.109051 0.905853 0.409314 + -0.865237 1.85893 -1.06692 0.370934 0.853788 0.365314 + -0.948172 1.78724 -1.10924 -0.919925 0.3827 0.0853091 + -0.922378 1.82582 -1.0844 -0.85215 0.502488 0.146106 + -0.904925 1.85022 -1.07134 -0.767874 0.612468 0.187758 + -0.895672 1.85692 -1.06475 -0.510303 0.809169 0.291266 + -0.8803 1.85971 -1.0642 0.0638386 0.904216 0.422277 + -0.963711 1.73707 -1.13453 -0.979912 0.198758 0.0163388 + -0.946256 1.77957 -1.08917 -0.888549 0.20346 0.4112 + -0.920922 1.82009 -1.06974 -0.830829 0.32796 0.449628 + -0.903469 1.84451 -1.05668 -0.736943 0.455267 0.499646 + -0.894917 1.85396 -1.05715 -0.514719 0.71296 0.476184 + -0.961795 1.7294 -1.11447 -0.937814 0.0362235 0.345242 + -0.937389 1.77329 -1.07643 -0.674792 -0.0327488 0.737281 + -0.912055 1.81381 -1.057 -0.626707 0.0496546 0.777671 + -0.897618 1.84035 -1.04833 -0.547161 0.254233 0.797484 + -0.955425 1.65951 -1.12022 -0.686783 -0.168119 0.707153 + -0.949395 1.72051 -1.09659 -0.69239 -0.15808 0.703993 + -0.919181 1.76651 -1.0674 -0.272467 -0.264192 0.925183 + -0.898515 1.80898 -1.05025 -0.247126 -0.216284 0.944537 + -0.963392 1.60487 -1.13858 -0.64414 -0.148649 0.750325 + -0.929249 1.64988 -1.10723 -0.243327 -0.282701 0.927832 + -0.931187 1.71372 -1.08756 -0.279694 -0.290582 0.915059 + -0.902365 1.76281 -1.06867 0.194324 -0.405529 0.893188 + -0.990011 1.60374 -1.16747 -0.790188 0.0614481 0.609776 + -0.97759 1.55466 -1.16298 -0.70395 0.0336149 0.709453 + -1.00421 1.55353 -1.19186 -0.753481 0.145523 0.641163 + -1.03957 1.50887 -1.20666 -0.644419 0.380784 0.66312 + -0.988788 1.50586 -1.16464 -0.645305 0.220088 0.731534 + -1.09297 1.44319 -1.20978 -0.589007 0.397904 0.70338 + -1.06975 1.42015 -1.1794 -0.539634 0.343438 0.768665 + -1.01636 1.48583 -1.17629 -0.548849 0.35996 0.754449 + -1.15167 1.42218 -1.25256 -0.857123 0.312085 0.409808 + -1.12299 1.39912 -1.2151 -0.700725 0.1988 0.685173 + -1.11115 1.37852 -1.19769 -0.719032 0.175663 0.67241 + -1.08528 1.38534 -1.17552 -0.595048 0.27492 0.755207 + -1.01843 1.40529 -1.14496 -0.434601 0.216568 0.874197 + -1.1603 1.41239 -1.27724 -0.971525 0.219627 0.0889032 + -1.14928 1.36379 -1.24717 -0.884151 -0.0473791 0.464792 + -1.13744 1.34319 -1.22976 -0.844491 -0.0214769 0.535139 + -1.10434 1.33974 -1.18294 -0.69842 -0.0383065 0.714662 + -1.07848 1.34656 -1.16078 -0.535038 -0.0589606 0.842768 + -1.15752 1.35991 -1.31387 -0.987781 -0.0721246 -0.138155 + -1.15791 1.354 -1.27186 -0.979507 -0.109869 0.168806 + -1.14028 1.32026 -1.23683 -0.87522 -0.17426 0.451247 + -1.10719 1.31682 -1.19002 -0.672604 -0.271434 0.688424 + -1.05663 1.3173 -1.15837 -0.303517 -0.441757 0.844232 + -1.13984 1.33089 -1.36139 -0.919016 -0.152475 -0.36354 + -1.14995 1.32335 -1.3271 -0.951244 -0.250584 -0.179842 + -1.15034 1.31745 -1.28508 -0.966005 -0.258375 -0.00879001 + -1.14609 1.30588 -1.26206 -0.932197 -0.295606 0.208866 + -1.12251 1.28682 -1.22596 -0.711889 -0.462359 0.528619 + -1.12878 1.30845 -1.37287 -0.717244 -0.572547 -0.397179 + -1.1389 1.30092 -1.33857 -0.809437 -0.473829 -0.346839 + -1.13466 1.27087 -1.31396 -0.76777 -0.560942 -0.309632 + -1.13041 1.25932 -1.29094 -0.547328 -0.832256 0.0882171 + -1.12832 1.27245 -1.2512 -0.556755 -0.761701 0.331414 + -1.10613 1.29619 -1.37587 -0.386289 -0.848846 -0.360889 + -1.10453 1.28748 -1.35446 -0.379836 -0.767747 -0.516032 + -1.1003 1.25744 -1.32985 -0.13971 -0.905314 -0.401109 + -1.09158 1.25722 -1.30268 0.184173 -0.976334 0.11337 + -1.07767 1.29616 -1.40574 -0.256972 -0.864061 -0.432855 + -1.0541 1.28699 -1.38359 -0.20425 -0.941605 -0.267698 + -1.0525 1.27827 -1.36219 0.00662837 -0.964312 -0.264685 + -1.03138 1.2821 -1.34221 0.195588 -0.979978 -0.0372543 + -1.02267 1.2819 -1.31504 0.312634 -0.939515 0.139894 + -1.05239 1.28725 -1.38674 -0.144581 -0.938619 -0.313194 + -1.02715 1.28029 -1.38065 -0.147197 -0.986975 -0.0649175 + -1.01639 1.28195 -1.37049 -0.0297525 -0.977967 0.206628 + -0.995269 1.28579 -1.35051 0.0726601 -0.976132 0.20466 + -1.02576 1.29708 -1.4081 -0.0238752 -0.836328 -0.54771 + -1.02544 1.28055 -1.3838 -0.290863 -0.850832 -0.437588 + -1.01945 1.27762 -1.38393 -0.213561 -0.962452 -0.167564 + -1.01536 1.29187 -1.40145 -0.20208 -0.76181 -0.615475 + -1.00937 1.28894 -1.4016 -0.543251 -0.532229 -0.649315 + -0.975681 1.29224 -1.33105 -0.237009 -0.882469 0.406295 + -0.982052 1.29366 -1.32695 0.158455 -0.94054 0.30046 + -1.01727 1.29321 -1.28847 0.357158 -0.914166 0.191672 + -1.08949 1.27036 -1.26294 0.175018 -0.96174 0.21077 + -0.976651 1.30498 -1.30037 0.143032 -0.925213 0.351458 + -0.97443 1.31079 -1.28553 0.111352 -0.989558 0.0915218 + -1.00854 1.29778 -1.2616 0.267142 -0.95562 -0.124199 + -1.08077 1.27493 -1.23607 0.117449 -0.991031 0.0637386 + -1.10087 1.27697 -1.21521 -0.289717 -0.842208 0.454697 + -0.967692 1.30929 -1.28807 -0.283755 -0.931474 0.227685 + -0.972711 1.31055 -1.28343 -0.0629002 -0.98014 -0.188068 + -1.00682 1.29754 -1.2595 0.13348 -0.93992 -0.314219 + -1.03364 1.27882 -1.21467 0.0470027 -0.991369 -0.122387 + -1.05374 1.28086 -1.19382 -0.11955 -0.891196 0.437582 + -0.951437 1.30384 -1.27738 -0.391854 -0.912337 0.118712 + -0.956456 1.30509 -1.27275 -0.171368 -0.957468 -0.23214 + -0.973217 1.29523 -1.24871 0.00416175 -0.919687 -0.392631 + -1.00003 1.27652 -1.20389 -0.15396 -0.971044 -0.182677 + -0.921645 1.2939 -1.25628 -0.349703 -0.934104 0.0718102 + -0.928007 1.29472 -1.25153 -0.148986 -0.943339 -0.296506 + -0.944768 1.28487 -1.2275 -0.075795 -0.884943 -0.459491 + -0.894538 1.27375 -1.26936 -0.424659 -0.805226 0.413854 + -0.873612 1.2749 -1.24928 -0.359625 -0.856121 0.371114 + -0.890082 1.28386 -1.24262 -0.316667 -0.947785 0.0377581 + -0.896444 1.28468 -1.23787 -0.183211 -0.919789 -0.347019 + -0.907848 1.27721 -1.22204 -0.128606 -0.849989 -0.510862 + -0.830563 1.24882 -1.26453 0.0500492 -0.973579 0.222797 + -0.824941 1.26014 -1.23715 0.134504 -0.954576 0.265882 + -0.841411 1.2691 -1.23049 -0.440981 -0.86615 -0.235201 + -0.852815 1.26164 -1.21466 -0.0481074 -0.976155 -0.211675 + -0.804118 1.26001 -1.27021 0.639207 -0.761723 0.105795 + -0.798497 1.27132 -1.24282 0.657952 -0.709903 0.25127 + -0.792617 1.28394 -1.22778 0.722049 -0.624145 0.298476 + -0.830468 1.26529 -1.20629 0.368574 -0.830541 0.417558 + -0.767829 1.31962 -1.27193 0.87545 -0.481816 0.0379594 + -0.761949 1.33225 -1.25689 0.934551 -0.326203 0.142147 + -0.780603 1.31049 -1.21006 0.790034 -0.326356 0.518978 + -0.818454 1.29184 -1.18857 0.474744 -0.42833 0.768864 + -0.80509 1.36213 -1.18251 0.528553 -0.0371004 0.848089 + -0.830741 1.31746 -1.17781 0.312874 -0.149178 0.938006 + -0.913342 1.25765 -1.1709 0.157883 -0.755623 0.635694 + -0.935689 1.254 -1.17927 -0.149671 -0.978562 0.141473 + -0.97261 1.26164 -1.18472 -0.194946 -0.980533 0.0234855 + -0.786916 1.37844 -1.19961 0.795651 -0.0962921 0.598053 + -0.879614 1.36781 -1.16327 0.252023 -0.0747617 0.964829 + -0.925629 1.28328 -1.16015 0.232275 -0.209838 0.949745 + -0.781268 1.4777 -1.23637 0.862814 0.0326103 0.504469 + -0.772786 1.52642 -1.24407 0.842236 -0.253051 0.47603 + -0.752994 1.57331 -1.2304 0.795897 -0.349974 0.49403 + -0.916147 1.37805 -1.15235 0.2884 -0.10794 0.951407 + -0.962162 1.29351 -1.14923 0.11506 -0.380154 0.917738 + -0.997406 1.27631 -1.15377 -0.28009 -0.711521 0.644428 + -1.01212 1.34121 -1.13867 -0.187961 -0.197365 0.962142 + -1.02483 1.29119 -1.17293 -0.333986 -0.746365 0.575667 + -1.08555 1.30697 -1.17926 -0.430371 -0.486571 0.760283 + -1.03396 1.37048 -1.14108 -0.276228 0.0983286 0.956049 + -0.881699 1.8053 -1.05151 0.224009 -0.41161 0.883401 + -0.884078 1.83552 -1.04158 -0.147377 0.043993 0.988101 + -0.866868 1.80436 -1.06011 0.560762 -0.461412 0.687492 + -0.872943 1.83326 -1.04231 0.280845 -0.0786284 0.956527 + -0.870912 1.84504 -1.04603 0.346052 0.388959 0.853791 + -0.882047 1.8473 -1.0453 -0.0799213 0.439578 0.894642 + -0.889066 1.8498 -1.0488 -0.354846 0.543174 0.760951 + -0.851051 1.83385 -1.05827 0.861569 -0.0510504 0.505067 + -0.858111 1.83233 -1.05092 0.628433 -0.114909 0.76933 + -0.863225 1.84456 -1.05049 0.539952 0.391118 0.745304 + -0.869399 1.85334 -1.05423 0.335924 0.772242 0.539256 + -0.877086 1.85383 -1.04977 0.164155 0.747204 0.644002 + -0.847924 1.83866 -1.06835 0.985729 0.12353 0.114364 + -0.854544 1.84856 -1.06307 0.763419 0.544449 0.347515 + -0.856165 1.84608 -1.05784 0.693148 0.44524 0.56684 + -0.86484 1.85376 -1.05757 0.395155 0.744711 0.537827 + -0.856266 1.85362 -1.07121 0.738622 0.66465 0.112596 + -0.863219 1.85625 -1.06279 0.427837 0.802477 0.415915 + -0.884859 1.8593 -1.06086 -0.100546 0.974081 0.202626 + -0.884105 1.85633 -1.05326 -0.120769 0.838497 0.531355 + -0.741661 1.75646 -1.18278 0.901418 -0.322646 0.288696 + -0.72527 1.79989 -1.16198 0.882191 -0.401839 0.245487 + -0.722925 1.80436 -1.17595 0.960255 -0.19539 -0.199333 + -0.715678 1.83173 -1.16247 0.992216 0.0606605 -0.108756 + -0.718023 1.82726 -1.14849 0.927909 -0.120958 0.352639 + -0.723183 1.82601 -1.14039 0.699441 -0.170049 0.694166 + -0.719883 1.83594 -1.17128 0.812393 0.29715 -0.501716 + -0.722907 1.84586 -1.16508 0.738021 0.601064 -0.306672 + -0.718702 1.84165 -1.15626 0.904508 0.422866 0.0552204 + -0.719918 1.83933 -1.14902 0.884694 0.276454 0.375354 + -0.725078 1.83808 -1.14091 0.670735 0.225041 0.706733 + -0.729735 1.84908 -1.16954 0.540625 0.683133 -0.490973 + -0.727286 1.85203 -1.15864 0.668437 0.742372 0.0455698 + -0.727866 1.85081 -1.15354 0.505989 0.833739 0.221031 + -0.72402 1.8482 -1.15171 0.65874 0.729355 0.184669 + -0.725235 1.84589 -1.14446 0.627696 0.584031 0.514689 + -0.734115 1.85525 -1.16309 0.404735 0.885162 -0.229518 + -0.738743 1.85714 -1.16096 0.175885 0.981258 -0.0787225 + -0.741575 1.85703 -1.15459 0.111935 0.981126 0.157681 + -0.742155 1.85581 -1.14948 0.0830682 0.919877 0.383309 + -0.738837 1.85158 -1.14317 0.165112 0.81137 0.560729 + -0.734991 1.84898 -1.14134 0.28898 0.734137 0.614438 + -0.73085 1.84656 -1.14096 0.41381 0.578669 0.702783 + -0.730692 1.83876 -1.1374 0.461874 0.259079 0.848263 + -0.751185 1.85277 -1.14682 -0.338569 0.797565 0.49926 + -0.747867 1.84854 -1.14049 -0.240256 0.671139 0.70132 + -0.742219 1.8435 -1.13543 -0.00154157 0.516416 0.856336 + -0.738078 1.84109 -1.13504 0.251153 0.363366 0.897155 + -0.755037 1.83934 -1.13707 -0.550152 0.370944 0.748153 + -0.749389 1.83431 -1.13199 -0.282888 0.174373 0.943169 + 0.872043 1.89298 -1.22862 -0.906308 0.309655 -0.287609 + 0.878324 1.8668 -1.24714 -0.923999 -0.0316581 -0.381081 + 0.875993 1.86509 -1.23433 -0.963138 -0.268909 -0.00727253 + 0.878844 1.8951 -1.23876 -0.630611 0.522384 -0.573974 + 0.885126 1.86893 -1.25728 -0.665671 0.256176 -0.700896 + 0.893321 1.82549 -1.27123 -0.92697 0.0239723 -0.374368 + 0.890991 1.82377 -1.25843 -0.98238 -0.186885 0.00167389 + 0.870466 1.89166 -1.22009 -0.991227 0.124971 0.0430212 + 0.878416 1.90396 -1.21984 -0.68511 0.715364 -0.137398 + 0.881941 1.90506 -1.22509 -0.505147 0.792278 -0.342232 + 0.890922 1.90658 -1.22905 -0.207644 0.850486 -0.483278 + 0.887826 1.89661 -1.24271 -0.263922 0.670285 -0.693587 + 0.878806 1.86382 -1.22269 -0.805291 -0.438182 0.39938 + 0.873278 1.89039 -1.20845 -0.877273 -0.0865625 0.472121 + 0.876839 1.90264 -1.21131 -0.797739 0.590288 0.123178 + 0.887159 1.91034 -1.21301 -0.368141 0.929522 0.0214756 + 0.890685 1.91144 -1.21827 -0.242699 0.956851 -0.159792 + 0.89469 1.82278 -1.24289 -0.816301 -0.373796 0.440374 + 0.904845 1.82269 -1.23241 -0.494589 -0.436018 0.751845 + 0.88896 1.86373 -1.21221 -0.483747 -0.495917 0.721148 + 0.880026 1.89016 -1.20144 -0.579202 -0.214069 0.786574 + 0.878296 1.90197 -1.20528 -0.783152 0.41717 0.461132 + 0.896376 1.771 -1.26494 -0.873527 -0.112645 0.473562 + 0.910577 1.77123 -1.25016 -0.535568 -0.248242 0.807182 + 0.924168 1.82424 -1.22396 -0.108986 -0.391865 0.913545 + 0.903325 1.86447 -1.20606 -0.132739 -0.436019 0.890094 + 0.89439 1.89091 -1.19529 -0.162816 -0.233976 0.958512 + 0.892676 1.772 -1.28048 -0.997109 0.066978 0.0358879 + 0.88112 1.71182 -1.3056 -0.987083 0.147237 0.0631539 + 0.886475 1.71007 -1.2832 -0.875618 -0.0391503 0.481415 + 0.900676 1.7103 -1.26843 -0.562681 -0.176691 0.807571 + 0.9299 1.77278 -1.24171 -0.142804 -0.28556 0.947661 + 0.895936 1.77431 -1.29849 -0.912612 0.230391 -0.337727 + 0.88438 1.71413 -1.3236 -0.894988 0.328628 -0.301662 + 0.869117 1.64944 -1.35508 -0.960438 0.257667 -0.105674 + 0.875055 1.65277 -1.32577 -0.976358 0.0243469 0.214784 + 0.88041 1.65102 -1.30338 -0.857546 -0.096681 0.505241 + 0.902286 1.82802 -1.2849 -0.63934 0.29314 -0.710854 + 0.904902 1.77684 -1.31216 -0.63683 0.383698 -0.668748 + 0.897349 1.7179 -1.34324 -0.632185 0.451788 -0.629468 + 0.882085 1.65322 -1.37472 -0.699378 0.503023 -0.507778 + 0.898674 1.87111 -1.26329 -0.247416 0.504394 -0.827268 + 0.915835 1.83019 -1.29091 -0.233422 0.47246 -0.84988 + 0.923847 1.78005 -1.32045 -0.22648 0.472037 -0.851991 + 0.916294 1.72112 -1.35154 -0.228769 0.490876 -0.840658 + 0.898097 1.66592 -1.38022 -0.32626 0.507299 -0.797623 + 0.903908 1.89837 -1.24266 0.100322 0.745915 -0.658442 + 0.914757 1.87286 -1.26323 0.126985 0.630355 -0.765851 + 0.937617 1.83285 -1.29074 0.171946 0.568439 -0.804557 + 0.94563 1.78271 -1.32028 0.181882 0.492761 -0.850944 + 0.947541 1.72482 -1.35133 0.216111 0.426551 -0.878265 + 0.899259 1.90748 -1.22901 0.0454413 0.874112 -0.483594 + 0.913094 1.8987 -1.23785 0.449427 0.75285 -0.480867 + 0.928538 1.87366 -1.25585 0.511887 0.675928 -0.530182 + 0.951398 1.83367 -1.28336 0.572537 0.57642 -0.583045 + 0.964985 1.78391 -1.3099 0.639097 0.429007 -0.638363 + 0.899021 1.91234 -1.21824 0.057848 0.985096 -0.161983 + 0.908445 1.90781 -1.22421 0.382049 0.863201 -0.330035 + 0.920418 1.89784 -1.2256 0.698801 0.678636 -0.226122 + 0.935862 1.8728 -1.2436 0.734935 0.627395 -0.257385 + 0.961024 1.83316 -1.2666 0.810346 0.510054 -0.288416 + 0.902818 1.91189 -1.21188 0.156502 0.987667 0.00451603 + 0.912241 1.90737 -1.21786 0.542561 0.827549 -0.14419 + 0.922484 1.89698 -1.21745 0.821951 0.564428 0.0762759 + 0.938796 1.87199 -1.23129 0.856756 0.510932 0.070134 + 0.963958 1.83235 -1.2543 0.919178 0.391394 0.0438425 + 0.889304 1.90999 -1.20868 -0.107866 0.985112 0.133863 + 0.904962 1.91155 -1.20754 0.258502 0.961302 0.0952659 + 0.914307 1.90651 -1.20973 0.672262 0.729944 0.12347 + 0.920371 1.8956 -1.209 0.811236 0.318425 0.490409 + 0.936683 1.87061 -1.22284 0.833461 0.274293 0.479694 + 0.885643 1.90921 -1.20591 -0.431256 0.890088 0.147522 + 0.900206 1.91005 -1.20039 0.13545 0.879705 0.455821 + 0.903867 1.91083 -1.20316 0.236963 0.89282 0.383042 + 0.913211 1.9058 -1.20534 0.67462 0.574165 0.463921 + 0.8871 1.90855 -1.19987 -0.432099 0.735092 0.522427 + 0.894546 1.90894 -1.19668 -0.0791984 0.71599 0.693603 + 0.902379 1.90329 -1.19545 0.28921 0.279154 0.915659 + 0.908039 1.90442 -1.19917 0.53613 0.404511 0.740902 + 0.915198 1.89422 -1.20284 0.647464 0.10605 0.754681 + 0.885044 1.90176 -1.19827 -0.539796 0.162203 0.826021 + 0.89249 1.90214 -1.19508 -0.214567 0.115304 0.969879 + 0.90428 1.89206 -1.19567 0.285952 -0.110533 0.951848 + 0.918214 1.86636 -1.2066 0.333127 -0.221324 0.916538 + 0.929133 1.86853 -1.21377 0.659105 0.0268868 0.75157 + 0.95363 1.82897 -1.23424 0.681336 -0.0257633 0.731517 + 0.96118 1.83107 -1.24331 0.869195 0.177609 0.46147 + 0.939057 1.82614 -1.2245 0.35354 -0.224459 0.90809 + 0.950772 1.77543 -1.24251 0.353381 -0.233111 0.90597 + 0.965345 1.77828 -1.25224 0.682393 -0.133226 0.718742 + 0.976077 1.78081 -1.26509 0.896513 0.00726872 0.442958 + 0.978855 1.78209 -1.27609 0.982352 0.185873 0.0208511 + 0.949324 1.71495 -1.25716 0.292957 -0.170495 0.940802 + 0.970322 1.71906 -1.2711 0.671748 -0.0529879 0.738882 + 0.981054 1.7216 -1.28396 0.885054 0.0616257 0.46139 + 0.928452 1.71229 -1.25636 -0.164525 -0.231082 0.958923 + 0.932203 1.65554 -1.26966 -0.223342 -0.225336 0.948336 + 0.966784 1.65206 -1.26669 0.232722 -0.11764 0.965402 + 0.987782 1.65617 -1.28064 0.55103 0.113918 0.826673 + 0.904427 1.65354 -1.28173 -0.519262 -0.205645 0.829504 + 0.90846 1.6036 -1.29017 -0.405016 0.511616 0.757767 + 0.950853 1.59833 -1.28282 -0.0497196 0.491563 0.869421 + 0.985434 1.59485 -1.27985 0.0444115 0.467994 0.882615 + 0.884443 1.60108 -1.31182 -0.727831 0.557227 0.399701 + 0.870447 1.59662 -1.30624 0.221189 0.971373 -0.0866567 + 0.908318 1.60006 -1.27887 -0.0959085 0.971723 -0.215768 + 0.95071 1.59479 -1.27152 0.165589 0.943181 -0.288081 + 0.867816 1.59058 -1.35233 -0.78464 0.61236 0.0967258 + 0.861878 1.58725 -1.38164 -0.861407 0.481143 0.162726 + 0.853821 1.58612 -1.34676 0.123938 0.937864 -0.324115 + 0.847109 1.57183 -1.41682 -0.55664 0.415593 -0.719329 + 0.82419 1.56177 -1.40977 -0.312548 0.545862 -0.777398 + 0.838959 1.57718 -1.37458 0.0167008 0.918155 -0.395869 + 0.828052 1.63679 -1.30945 0.661584 0.604942 -0.443116 + 0.863122 1.58453 -1.42233 -0.300306 0.376533 -0.876378 + 0.878919 1.56037 -1.42798 0.000490382 0.28073 -0.959786 + 0.797539 1.54957 -1.40402 -0.521969 0.331794 -0.785787 + 0.796629 1.62009 -1.34554 -0.152186 0.621972 -0.768108 + 0.81319 1.62786 -1.33727 0.332519 0.657284 -0.676319 + 0.929344 1.6696 -1.38002 0.104402 0.416431 -0.903153 + 0.945141 1.64544 -1.38566 0.358129 0.318716 -0.87759 + 0.979727 1.6575 -1.35814 0.695454 0.298398 -0.653683 + 0.961283 1.56924 -1.40281 0.387895 0.301147 -0.871119 + 0.966896 1.726 -1.34095 0.635205 0.344313 -0.691349 + 0.993663 1.65649 -1.33417 0.860705 0.275485 -0.428129 + 1.01775 1.58153 -1.33251 0.825631 0.358422 -0.435738 + 0.99587 1.58131 -1.37529 0.704373 0.325369 -0.630867 + 0.980832 1.72499 -1.31697 0.899691 0.251182 -0.35702 + 0.985075 1.72368 -1.29993 0.981643 0.190319 -0.012446 + 1.00529 1.65647 -1.30746 0.933858 0.341612 -0.10588 + 0.974611 1.7834 -1.29314 0.883863 0.323067 -0.338252 + 1.00127 1.65438 -1.2915 0.783175 0.352818 0.512013 + 1.04258 1.58189 -1.28426 0.803695 0.593714 0.0397228 + 1.02939 1.58151 -1.30581 0.807925 0.41078 -0.422513 + 1.07231 1.52317 -1.30657 0.666608 0.636141 -0.388534 + 1.06195 1.51683 -1.33241 0.557698 0.624062 -0.547284 + 1.03261 1.52261 -1.34987 0.649056 0.453575 -0.610734 + 1.02909 1.58369 -1.27341 0.37508 0.682689 0.627097 + 1.03741 1.56026 -1.23476 0.828056 0.359635 0.4301 + 1.0855 1.52355 -1.28503 0.760083 0.648752 -0.0373316 + 0.986353 1.58749 -1.26568 0.255703 0.940471 -0.223896 + 1.03001 1.57633 -1.25923 0.556939 0.822223 0.11734 + 0.972744 1.63665 -1.23472 0.4639 0.61487 -0.637755 + 0.985381 1.63085 -1.22063 0.711481 0.636714 -0.297304 + 0.988965 1.63519 -1.19758 0.87874 0.477179 0.0107998 + 1.0336 1.58068 -1.23618 0.902987 0.425588 0.0590622 + 0.937101 1.64394 -1.24057 0.108348 0.564176 -0.818514 + 0.932562 1.69336 -1.20595 0.125424 0.565252 -0.815328 + 0.95376 1.69237 -1.19926 0.516272 0.534465 -0.669186 + 0.966397 1.68657 -1.18517 0.864679 0.398109 -0.306332 + 0.900294 1.64037 -1.24217 -0.203537 0.578861 -0.789616 + 0.895755 1.68979 -1.20754 -0.262848 0.546604 -0.795069 + 0.903856 1.7466 -1.17053 -0.228396 0.53578 -0.812881 + 0.929618 1.74917 -1.16933 0.134549 0.560237 -0.817332 + 0.950816 1.74817 -1.16265 0.548122 0.518158 -0.656562 + 0.880133 1.59288 -1.26871 -0.440186 0.888957 -0.126459 + 0.87211 1.63319 -1.23201 -0.692026 0.412763 -0.592222 + 0.873755 1.68132 -1.19933 -0.702369 0.431544 -0.566081 + 0.86893 1.59311 -1.27569 0.333308 0.88666 0.320531 + 0.850108 1.57875 -1.2451 0.31737 0.70288 0.636581 + 0.861311 1.57852 -1.23812 -0.724329 0.689417 -0.00716767 + 0.857655 1.61714 -1.21114 -0.908471 0.230149 -0.348871 + 0.8593 1.66527 -1.17846 -0.942939 0.245602 -0.224824 + 0.836896 1.63376 -1.25498 0.887013 0.30805 0.343966 + 0.824419 1.61758 -1.23136 0.7879 0.153334 0.596408 + 0.809434 1.59979 -1.20989 0.468844 0.0923743 0.878437 + 0.835122 1.56096 -1.22364 0.2324 0.689456 0.686033 + 0.849239 1.56173 -1.2133 -0.76983 0.631154 0.0949045 + 0.838414 1.63727 -1.28553 0.829743 0.542126 -0.132761 + 0.820232 1.68161 -1.23398 0.958758 0.0668034 0.276261 + 0.807755 1.66545 -1.21036 0.817494 -0.06223 0.572566 + 0.810805 1.6878 -1.27831 0.723873 0.458609 -0.515447 + 0.821167 1.68827 -1.25439 0.951288 0.273571 -0.142159 + 0.814856 1.73774 -1.2052 0.961599 0.044988 0.270747 + 0.799337 1.68411 -1.29216 0.368262 0.568784 -0.735436 + 0.808645 1.74381 -1.24229 0.747747 0.428131 -0.507521 + 0.815791 1.74438 -1.22561 0.951262 0.268211 -0.152195 + 0.782775 1.67633 -1.30044 -0.167767 0.577624 -0.798877 + 0.785869 1.73448 -1.26199 -0.104131 0.541873 -0.833985 + 0.797176 1.7401 -1.25615 0.399636 0.532444 -0.746187 + 0.787113 1.78893 -1.22313 0.34934 0.613948 -0.707834 + 0.795407 1.79133 -1.21336 0.658041 0.586085 -0.472744 + 0.764655 1.66775 -1.29685 -0.519034 0.478927 -0.707978 + 0.767748 1.72589 -1.25841 -0.506997 0.460352 -0.728718 + 0.762937 1.77707 -1.22652 -0.485036 0.387786 -0.783812 + 0.775806 1.7833 -1.22897 -0.112055 0.538206 -0.835331 + 0.769978 1.60789 -1.33978 -0.530959 0.481728 -0.697151 + 0.73886 1.65542 -1.28029 -0.801528 0.341671 -0.490728 + 0.749705 1.71721 -1.2469 -0.781608 0.341088 -0.522253 + 0.744894 1.76839 -1.21501 -0.779076 0.193733 -0.596245 + 0.744183 1.59556 -1.32321 -0.806924 0.284152 -0.517813 + 0.729767 1.64655 -1.26158 -0.988843 0.121566 -0.0860849 + 0.740612 1.70835 -1.2282 -0.989546 0.115787 -0.085973 + 0.73841 1.76216 -1.20164 -0.979651 -0.0920684 -0.178347 + 0.729409 1.81058 -1.18933 -0.774944 0.121421 -0.620257 + 0.745021 1.53976 -1.35016 -0.857666 0.140928 -0.494518 + 0.731258 1.53341 -1.31358 -0.992166 -0.120595 -0.032611 + 0.73042 1.58921 -1.28664 -0.99532 0.0286265 -0.0922976 + 0.734398 1.63822 -1.23451 -0.93395 -0.0838859 0.347418 + 0.743863 1.70264 -1.20935 -0.93418 -0.0959446 0.343659 + 0.800462 1.47952 -1.42216 -0.654995 0.201962 -0.728143 + 0.747944 1.46971 -1.36831 -0.821622 0.0109213 -0.569928 + 0.731964 1.45244 -1.3328 -0.994701 0.0114356 -0.102175 + 0.737625 1.4509 -1.30698 -0.950366 0.0642186 0.304435 + 0.741959 1.47673 -1.30362 -0.951476 0.0479465 0.303965 + 0.825578 1.46091 -1.45214 -0.554062 0.229852 -0.800114 + 0.776506 1.38133 -1.41549 -0.878261 -0.00475248 -0.478157 + 0.760195 1.37562 -1.3687 -0.886336 -0.153831 -0.436743 + 0.744214 1.35836 -1.33319 -0.927914 -0.30871 -0.208981 + 0.846034 1.46578 -1.46154 -0.251322 0.276228 -0.92765 + 0.838096 1.3547 -1.4638 -0.415187 -0.111923 -0.902825 + 0.801622 1.36272 -1.44547 -0.651956 -0.0785874 -0.754173 + 0.810647 1.30891 -1.43728 -0.651862 -0.39695 -0.646148 + 0.797745 1.30144 -1.40886 -0.78557 -0.469365 -0.403207 + 0.876928 1.5005 -1.44858 0.132816 0.318797 -0.938471 + 0.883447 1.38217 -1.48305 -0.172928 0.145219 -0.97417 + 0.858552 1.35956 -1.47319 -0.415022 -0.074743 -0.906736 + 0.878787 1.29238 -1.45967 -0.187484 -0.482284 -0.855717 + 0.847121 1.30088 -1.4556 -0.344237 -0.382087 -0.857619 + 0.959292 1.50938 -1.42342 0.335554 0.318392 -0.886583 + 0.963096 1.45929 -1.44114 0.316869 0.355454 -0.879344 + 0.91434 1.41689 -1.47011 0.15869 0.319272 -0.934282 + 1.01072 1.52239 -1.39266 0.689735 0.308729 -0.654944 + 1.01453 1.4723 -1.41038 0.461231 0.414974 -0.784259 + 0.98016 1.41624 -1.45338 0.317951 0.362398 -0.876114 + 0.931404 1.37385 -1.48235 0.150924 0.292162 -0.944385 + 1.04978 1.47254 -1.39122 0.453557 0.540576 -0.708564 + 1.05458 1.42328 -1.4134 0.465144 0.328523 -0.822018 + 1.01932 1.42304 -1.43253 0.431923 0.331593 -0.838742 + 0.999749 1.41196 -1.44675 0.422067 0.320541 -0.848005 + 0.964212 1.36744 -1.47782 0.2982 0.188931 -0.935618 + 1.07912 1.46677 -1.37376 0.46458 0.535617 -0.705181 + 1.08654 1.42099 -1.39583 0.507833 0.322928 -0.798638 + 1.04447 1.36845 -1.43462 0.433339 0.224583 -0.8728 + 1.02934 1.36782 -1.44163 0.443659 0.159694 -0.881853 + 1.00976 1.35673 -1.45584 0.530498 0.0172642 -0.84751 + 1.11694 1.47565 -1.34457 0.615662 0.561044 -0.553345 + 1.12435 1.42987 -1.36663 0.633974 0.337756 -0.695699 + 1.07643 1.36615 -1.41705 0.46611 0.247746 -0.849331 + 1.06289 1.32996 -1.4339 0.433489 0.0534647 -0.899572 + 1.04776 1.32933 -1.44091 0.254579 -0.142309 -0.956524 + 1.1273 1.48199 -1.31873 0.730982 0.646021 -0.219823 + 1.14774 1.43202 -1.33843 0.886451 0.265743 -0.378927 + 1.11281 1.36137 -1.40025 0.602261 0.218063 -0.767939 + 1.09927 1.32518 -1.4171 0.557531 -0.140522 -0.818176 + 1.0756 1.31095 -1.42544 0.359296 -0.502092 -0.786645 + 1.13437 1.47422 -1.2827 0.801884 0.580395 0.141858 + 1.15481 1.42424 -1.30241 0.961423 0.240654 -0.133238 + 1.13619 1.36352 -1.37206 0.845504 0.0866211 -0.526896 + 1.124 1.32265 -1.39441 0.752232 -0.259531 -0.605633 + 1.10033 1.30842 -1.40275 0.512621 -0.65194 -0.558743 + 1.07278 1.5156 -1.24957 0.686427 0.548963 0.476925 + 1.12165 1.46626 -1.24724 0.671236 0.507542 0.540226 + 1.15167 1.42218 -1.25256 0.851174 0.254951 0.458806 + 1.1603 1.41239 -1.27724 0.983932 0.155433 0.0878491 + 1.15203 1.37176 -1.33905 0.929861 0.0917609 -0.356285 + 1.03957 1.50887 -1.20666 0.635208 0.390244 0.666498 + 1.09297 1.44319 -1.20978 0.589965 0.380588 0.712105 + 1.12299 1.39912 -1.2151 0.714026 0.198628 0.671352 + 1.14928 1.36379 -1.24717 0.888024 -0.0493068 0.457146 + 1.15791 1.354 -1.27186 0.960906 -0.173744 0.215576 + 1.00421 1.55353 -1.19186 0.737266 0.0997922 0.668191 + 1.01636 1.48583 -1.17629 0.554872 0.331603 0.762992 + 1.06975 1.42015 -1.1794 0.531778 0.347786 0.772177 + 1.08528 1.38534 -1.17552 0.582804 0.25968 0.770004 + 1.11115 1.37852 -1.19769 0.731748 0.138143 0.667429 + 0.990011 1.60374 -1.16747 0.810996 0.0240756 0.584556 + 0.963392 1.60487 -1.13858 0.646056 -0.107365 0.755701 + 0.97759 1.55466 -1.16298 0.733845 0.00551385 0.679294 + 0.988788 1.50586 -1.16464 0.63886 0.238227 0.73151 + 1.01843 1.40529 -1.14496 0.379943 0.231609 0.895545 + 0.986193 1.62416 -1.16889 0.920829 0.262327 0.288544 + 0.967825 1.6684 -1.13811 0.925109 0.026811 0.378754 + 0.955425 1.65951 -1.12022 0.689505 -0.170272 0.703982 + 0.937216 1.59524 -1.12558 0.255904 -0.164941 0.952527 + 0.948263 1.54908 -1.13115 0.376309 -0.0268754 0.926104 + 0.970598 1.67943 -1.1668 0.971454 0.235007 0.0323743 + 0.963711 1.73707 -1.13453 0.979887 0.198885 0.0163293 + 0.961795 1.7294 -1.11447 0.937887 0.0361091 0.345057 + 0.949395 1.72051 -1.09659 0.69234 -0.15825 0.704004 + 0.929249 1.64988 -1.10723 0.246628 -0.276896 0.928711 + 0.95951 1.7442 -1.1529 0.878679 0.362987 -0.310103 + 0.945054 1.79252 -1.1222 0.826759 0.519852 -0.214996 + 0.948172 1.78724 -1.10924 0.920011 0.382565 0.0849929 + 0.946256 1.77957 -1.08917 0.888531 0.203626 0.411155 + 0.93636 1.7965 -1.13195 0.517344 0.627447 -0.581949 + 0.91926 1.83109 -1.09737 0.760489 0.631822 -0.149855 + 0.922378 1.82582 -1.0844 0.852175 0.502442 0.146117 + 0.920922 1.82009 -1.06974 0.830829 0.32796 0.449628 + 0.937389 1.77329 -1.07643 0.674702 -0.0326782 0.737367 + 0.921356 1.79703 -1.13685 0.137795 0.605047 -0.784175 + 0.912562 1.83421 -1.10477 0.476359 0.708658 -0.520467 + 0.902873 1.85371 -1.07998 0.686777 0.723948 -0.0650869 + 0.904925 1.85022 -1.07134 0.76785 0.612483 0.187805 + 0.895594 1.79447 -1.13804 -0.229959 0.511102 -0.828187 + 0.878788 1.83304 -1.11036 -0.244041 0.52293 -0.816693 + 0.897558 1.83475 -1.10967 0.108401 0.647948 -0.753932 + 0.896175 1.85682 -1.08738 0.408285 0.81675 -0.407705 + 0.879943 1.78854 -1.13211 -0.667891 0.295933 -0.682894 + 0.863138 1.82711 -1.10443 -0.686341 0.249155 -0.683271 + 0.867431 1.85564 -1.09128 -0.297956 0.713357 -0.634306 + 0.886201 1.85735 -1.09059 0.0874 0.798347 -0.595821 + 0.890148 1.86201 -1.07722 0.294309 0.949582 -0.10806 + 0.881855 1.73813 -1.16231 -0.695486 0.406079 -0.59279 + 0.869894 1.77725 -1.11761 -0.927555 0.0460724 -0.370837 + 0.855652 1.81903 -1.09362 -0.91446 -0.0115547 -0.404512 + 0.857132 1.85179 -1.0873 -0.700516 0.527592 -0.480545 + 0.871806 1.72683 -1.1478 -0.939929 0.223364 -0.258151 + 0.867292 1.76962 -1.10525 -0.988095 -0.150014 -0.0341174 + 0.85305 1.8114 -1.08127 -0.973045 -0.222022 -0.0623643 + 0.847924 1.83866 -1.06835 -0.985721 0.123547 0.114415 + 0.849646 1.84372 -1.07649 -0.937522 0.293781 -0.186399 + 0.855673 1.6544 -1.1612 -0.987949 0.121134 0.0963535 + 0.868179 1.71596 -1.13054 -0.994725 0.054719 0.0867662 + 0.871456 1.76321 -1.09177 -0.847421 -0.340439 0.407405 + 0.856177 1.80659 -1.07119 -0.842373 -0.399871 0.361263 + 0.851051 1.83385 -1.05827 -0.861721 -0.0505548 0.504858 + 0.845582 1.60035 -1.18631 -0.998571 0.0519338 -0.0125878 + 0.861678 1.64516 -1.14179 -0.862892 -0.0525943 0.502644 + 0.872343 1.70956 -1.11707 -0.867016 -0.132437 0.480358 + 0.851587 1.59112 -1.1669 -0.910225 0.0169641 0.413766 + 0.871136 1.58554 -1.14314 -0.632264 -0.102075 0.767999 + 0.876677 1.64231 -1.1261 -0.616535 -0.179227 0.766657 + 0.887343 1.7067 -1.10138 -0.596558 -0.266608 0.756993 + 0.831316 1.54152 -1.18504 -0.668939 0.574605 0.47154 + 0.850865 1.53594 -1.16128 -0.598038 -0.059599 0.799249 + 0.900081 1.58792 -1.12604 -0.25884 -0.202557 0.944443 + 0.905622 1.64469 -1.10901 -0.247844 -0.268388 0.930882 + 0.90756 1.70853 -1.08935 -0.232993 -0.324206 0.916845 + 0.8172 1.54075 -1.19538 -0.222111 0.448176 0.865913 + 0.796371 1.52699 -1.20372 -0.6791 -0.17792 0.712157 + 0.865981 1.48471 -1.16314 -0.429084 -0.0594261 0.901308 + 0.911128 1.54176 -1.13161 -0.218763 -0.134349 0.966485 + 0.794672 1.59027 -1.20888 0.0241634 0.111627 0.993456 + 0.796723 1.54369 -1.19477 -0.298448 -0.136837 0.944566 + 0.781369 1.64472 -1.19888 -0.0332926 -0.246044 0.968687 + 0.766167 1.63927 -1.20409 -0.3666 -0.229803 0.901552 + 0.774195 1.59321 -1.20828 -0.284964 -0.0249724 0.958213 + 0.753347 1.59002 -1.22145 -0.748606 -0.191462 0.634768 + 0.752994 1.57331 -1.2304 -0.799915 -0.341954 0.493158 + 0.796131 1.65424 -1.19988 0.475111 -0.168223 0.863696 + 0.78446 1.70838 -1.1777 0.0523447 -0.337577 0.939841 + 0.769258 1.70293 -1.18292 -0.332044 -0.329531 0.88383 + 0.745318 1.63607 -1.21726 -0.718234 -0.176283 0.6731 + 0.794522 1.71516 -1.17827 0.534357 -0.246125 0.808632 + 0.774765 1.76119 -1.15758 0.0640766 -0.360595 0.930519 + 0.763914 1.75726 -1.16133 -0.282903 -0.432999 0.855849 + 0.74944 1.75483 -1.17051 -0.626443 -0.429482 0.650473 + 0.754784 1.7005 -1.1921 -0.668803 -0.257403 0.697457 + 0.806145 1.72636 -1.18875 0.8327 -0.106115 0.543462 + 0.784826 1.76798 -1.15815 0.511949 -0.171132 0.841797 + 0.754731 1.8035 -1.13919 0.0353615 -0.330528 0.943134 + 0.74388 1.79956 -1.14295 -0.298056 -0.446937 0.843451 + 0.801975 1.78702 -1.18221 0.912047 0.23468 0.336295 + 0.793264 1.77565 -1.16576 0.782726 0.0284399 0.621717 + 0.771158 1.81581 -1.14754 0.72509 0.144497 0.673324 + 0.76272 1.80815 -1.13993 0.445967 -0.0988095 0.889579 + 0.741401 1.82964 -1.13126 -0.10746 -0.0404948 0.993384 + 0.802553 1.79192 -1.19667 0.882359 0.461122 -0.0938562 + 0.778137 1.82888 -1.1742 0.800014 0.597594 -0.0534719 + 0.777559 1.82398 -1.15972 0.844614 0.357656 0.398383 + 0.761438 1.84749 -1.14925 0.684258 0.573743 0.450123 + 0.755037 1.83934 -1.13707 0.550136 0.371064 0.748106 + 0.772673 1.82908 -1.18649 0.579913 0.69253 -0.429073 + 0.756334 1.85098 -1.17113 0.449574 0.819048 -0.356432 + 0.761798 1.85078 -1.15885 0.657893 0.752374 0.0333235 + 0.751545 1.85605 -1.1564 0.318978 0.941965 0.104663 + 0.751185 1.85277 -1.14682 0.333104 0.803652 0.493138 + 0.764379 1.82667 -1.19626 0.277715 0.681506 -0.677069 + 0.750673 1.84965 -1.17755 0.187976 0.794057 -0.578047 + 0.743052 1.85483 -1.16918 -0.00451143 0.913251 -0.407371 + 0.748713 1.85615 -1.16277 0.217819 0.957252 -0.190325 + 0.741575 1.85703 -1.15459 -0.0977939 0.980734 0.169109 + 0.755451 1.82303 -1.20038 -0.1374 0.551877 -0.822528 + 0.741745 1.84601 -1.18167 -0.204156 0.659915 -0.723072 + 0.738424 1.85294 -1.17131 -0.272659 0.812695 -0.51496 + 0.734115 1.85525 -1.16309 -0.401512 0.893973 -0.199001 + 0.738743 1.85714 -1.16096 -0.208965 0.976508 -0.0525801 + 0.742583 1.81679 -1.19792 -0.497364 0.34637 -0.795397 + 0.733057 1.84215 -1.17988 -0.514376 0.496156 -0.699462 + 0.729735 1.84908 -1.16954 -0.540659 0.683093 -0.49099 + 0.727286 1.85203 -1.15864 -0.57471 0.818156 -0.0181353 + 0.719883 1.83594 -1.17128 -0.812385 0.297167 -0.501719 + 0.722907 1.84586 -1.16508 -0.73852 0.592507 -0.321752 + 0.718702 1.84165 -1.15626 -0.907116 0.417053 0.056634 + 0.72402 1.8482 -1.15171 -0.667438 0.706083 0.236586 + 0.727866 1.85081 -1.15354 -0.412949 0.86115 0.296467 + 0.722925 1.80436 -1.17595 -0.960445 -0.19422 -0.199558 + 0.715678 1.83173 -1.16247 -0.992218 0.0606729 -0.108729 + 0.719918 1.83933 -1.14902 -0.884731 0.276412 0.375296 + 0.72527 1.79989 -1.16198 -0.882196 -0.401556 0.245931 + 0.718023 1.82726 -1.14849 -0.928105 -0.120268 0.352358 + 0.725078 1.83808 -1.14091 -0.670801 0.225145 0.706637 + 0.725235 1.84589 -1.14446 -0.608543 0.606769 0.511378 + 0.741661 1.75646 -1.18278 -0.901015 -0.323545 0.288946 + 0.733049 1.79826 -1.14971 -0.616365 -0.47901 0.625015 + 0.723183 1.82601 -1.14039 -0.699206 -0.169596 0.694513 + 0.735051 1.58088 -1.25955 -0.916573 -0.241584 0.318641 + 0.754843 1.53399 -1.27322 -0.837855 -0.282676 0.467004 + 0.772786 1.52642 -1.24407 -0.842439 -0.254015 0.475156 + 0.765543 1.47731 -1.26327 -0.862801 0.0320055 0.504529 + 0.781268 1.4777 -1.23637 -0.863051 0.0330505 0.504035 + 0.804852 1.47827 -1.19603 -0.765667 0.0301711 0.64253 + 0.823026 1.46197 -1.17892 -0.485722 0.0725922 0.871094 + 0.771192 1.37805 -1.22652 -0.864946 0.0852553 0.494571 + 0.786916 1.37844 -1.19961 -0.763687 0.0299913 0.64489 + 0.80509 1.36213 -1.18251 -0.602154 -0.177118 0.778486 + 0.853963 1.41249 -1.16796 -0.298656 -0.0246048 0.954044 + 0.896919 1.43523 -1.15219 -0.342073 -0.0846641 0.935852 + 0.766858 1.35223 -1.22987 -0.884744 -0.0354246 0.464729 + 0.780603 1.31049 -1.21006 -0.777689 -0.318832 0.541799 + 0.818454 1.29184 -1.18857 -0.485622 -0.407024 0.77363 + 0.830741 1.31746 -1.17781 -0.362327 -0.138754 0.921665 + 0.748204 1.37398 -1.2767 -0.955035 -0.0941958 0.281133 + 0.761949 1.33225 -1.25689 -0.928583 -0.335763 0.158102 + 0.792617 1.28394 -1.22778 -0.682674 -0.668313 0.295491 + 0.830468 1.26529 -1.20629 -0.392183 -0.886371 0.246048 + 0.742543 1.37551 -1.30253 -0.972277 -0.195585 0.128157 + 0.767829 1.31962 -1.27193 -0.881021 -0.471925 0.0329901 + 0.798497 1.27132 -1.24282 -0.614543 -0.717929 0.326979 + 0.841411 1.2691 -1.23049 0.0483444 -0.99745 0.0524926 + 0.769769 1.30105 -1.3271 -0.84912 -0.528196 0.00219716 + 0.768097 1.31819 -1.29644 -0.877566 -0.470584 0.0918125 + 0.804118 1.26001 -1.27021 -0.609436 -0.788784 0.0800402 + 0.824941 1.26014 -1.23715 -0.140329 -0.717787 0.681974 + 0.781434 1.29574 -1.36206 -0.828096 -0.492192 -0.268334 + 0.821516 1.24417 -1.32307 -0.513552 -0.855765 0.0626942 + 0.804387 1.25859 -1.2947 -0.655639 -0.754998 -0.0107978 + 0.851488 1.24768 -1.28461 0.0906039 -0.930692 0.354406 + 0.830563 1.24882 -1.26453 -0.0780739 -0.985026 0.153713 + 0.848779 1.23816 -1.39094 -0.425209 -0.860416 -0.280859 + 0.833181 1.23887 -1.35803 -0.482021 -0.867208 -0.12492 + 0.884292 1.22887 -1.33956 0.185294 -0.962391 0.198668 + 0.868618 1.23326 -1.31297 0.106269 -0.931696 0.347347 + 0.86168 1.24562 -1.41937 -0.373122 -0.754965 -0.539267 + 0.919071 1.22812 -1.39687 0.211984 -0.976651 -0.0348715 + 0.89989 1.22817 -1.37247 0.165118 -0.979979 0.111251 + 0.893346 1.23712 -1.42343 -0.150887 -0.857482 -0.491892 + 0.956661 1.2448 -1.41453 0.428213 -0.870625 -0.242168 + 0.984739 1.26295 -1.38875 0.484595 -0.863757 0.138175 + 0.964953 1.26802 -1.36961 0.371698 -0.807456 0.4581 + 0.945771 1.26806 -1.34521 0.484522 -0.788113 0.379627 + 0.930936 1.2538 -1.44108 0.0917345 -0.701302 -0.706937 + 0.953963 1.27147 -1.45152 0.265328 -0.542998 -0.796714 + 0.969935 1.26377 -1.436 0.54423 -0.636801 -0.546166 + 0.911098 1.29504 -1.46185 -0.027406 -0.472332 -0.880994 + 0.934125 1.31272 -1.47229 0.0393782 -0.431434 -0.901285 + 0.959516 1.32626 -1.47543 0.333047 -0.34087 -0.87914 + 0.975488 1.31856 -1.45992 0.641872 -0.290741 -0.709556 + 0.998013 1.28192 -1.41023 0.705395 -0.566574 -0.425925 + 0.873494 1.32504 -1.47781 -0.515247 -0.358328 -0.778538 + 0.905805 1.32772 -1.47999 -0.00710404 -0.419085 -0.907919 + 0.92504 1.33313 -1.48176 0.0503172 -0.374276 -0.925951 + 0.898388 1.34766 -1.48767 -0.142098 -0.143099 -0.979454 + 0.917624 1.35307 -1.48944 0.0449983 -0.0314999 -0.99849 + 0.950432 1.34667 -1.48492 0.288354 -0.105204 -0.951727 + 0.983801 1.36316 -1.47119 0.427236 0.0722023 -0.901253 + 0.997242 1.33079 -1.45792 0.338374 -0.520203 -0.78415 + 0.986845 1.32558 -1.45128 0.402605 -0.714741 -0.571887 + 1.00937 1.28894 -1.4016 0.472226 -0.650258 -0.595119 + 1.0232 1.32438 -1.44257 0.404531 -0.0596138 -0.91258 + 1.05104 1.306 -1.4271 0.0790811 -0.738515 -0.669584 + 1.02576 1.29708 -1.4081 0.0205149 -0.849385 -0.527375 + 1.01536 1.29187 -1.40145 0.20208 -0.76181 -0.615475 + 1.01945 1.27762 -1.38393 0.346569 -0.921783 -0.173801 + 1.07767 1.29616 -1.40574 0.25697 -0.864048 -0.432882 + 1.05239 1.28725 -1.38674 0.144398 -0.938631 -0.313242 + 1.02544 1.28055 -1.3838 0.290863 -0.850832 -0.437588 + 1.10613 1.29619 -1.37587 0.386258 -0.84887 -0.360866 + 1.0541 1.28699 -1.38359 0.204119 -0.941706 -0.267443 + 1.02715 1.28029 -1.38065 0.147197 -0.986975 -0.0649175 + 1.01639 1.28195 -1.37049 0.0297525 -0.977967 0.206628 + 1.00868 1.27929 -1.37378 0.220717 -0.885921 0.407955 + 1.12878 1.30845 -1.37287 0.717244 -0.572547 -0.397179 + 1.10453 1.28748 -1.35446 0.319302 -0.807367 -0.496191 + 1.0525 1.27827 -1.36219 0.10893 -0.99363 -0.0288568 + 1.03138 1.2821 -1.34221 -0.175038 -0.98392 -0.0355458 + 0.995269 1.28579 -1.35051 -0.0469675 -0.966821 0.2511 + 1.13984 1.33089 -1.36139 0.917546 -0.153986 -0.366603 + 1.1389 1.30092 -1.33857 0.809431 -0.473841 -0.346838 + 1.1003 1.25744 -1.32985 0.136053 -0.906038 -0.40073 + 1.14995 1.32335 -1.3271 0.95016 -0.256995 -0.176491 + 1.15034 1.31745 -1.28508 0.970828 -0.237921 0.0297829 + 1.13466 1.27087 -1.31396 0.726152 -0.622382 -0.292138 + 1.09158 1.25722 -1.30268 -0.128954 -0.987603 0.0895049 + 1.15752 1.35991 -1.31387 0.988885 -0.0691208 -0.131642 + 1.14609 1.30588 -1.26206 0.942912 -0.258518 0.209964 + 1.13041 1.25932 -1.29094 0.521823 -0.852761 0.0223515 + 0.734015 1.8273 -1.13362 -0.38767 -0.136647 0.911613 + 0.730692 1.83876 -1.1374 -0.461778 0.259218 0.848273 + 0.73085 1.84656 -1.14096 -0.42357 0.611243 0.668559 + 0.738078 1.84109 -1.13504 -0.251027 0.36332 0.897209 + 0.734991 1.84898 -1.14134 -0.27851 0.735778 0.617303 + 0.742219 1.8435 -1.13543 0.000378643 0.525177 0.850993 + 0.747867 1.84854 -1.14049 0.230892 0.671632 0.703988 + 0.738837 1.85158 -1.14317 -0.160839 0.793045 0.587547 + 0.749389 1.83431 -1.13199 0.282749 0.17442 0.943202 + 0.742155 1.85581 -1.14948 -0.0534366 0.930321 0.362833 + 1.08949 1.27036 -1.26294 -0.156516 -0.960898 0.228423 + 1.01727 1.29321 -1.28847 -0.336425 -0.923691 0.18334 + 1.02267 1.2819 -1.31504 -0.329628 -0.937452 0.11193 + 0.982052 1.29366 -1.32695 -0.134854 -0.947086 0.291276 + 1.12832 1.27245 -1.2512 0.488962 -0.768771 0.412198 + 1.12251 1.28682 -1.22596 0.646731 -0.599199 0.47191 + 1.10087 1.27697 -1.21521 0.338222 -0.85436 0.394557 + 1.08077 1.27493 -1.23607 -0.133126 -0.988798 0.0675028 + 1.14028 1.32026 -1.23683 0.914638 -0.114474 0.387727 + 1.10719 1.31682 -1.19002 0.682683 -0.280201 0.674857 + 1.08555 1.30697 -1.17926 0.426656 -0.506852 0.749043 + 1.05374 1.28086 -1.19382 0.0737402 -0.896939 0.435963 + 1.03364 1.27882 -1.21467 -0.0694869 -0.996927 -0.0361688 + 1.13744 1.34319 -1.22976 0.852005 -0.0366785 0.522247 + 1.10434 1.33974 -1.18294 0.720211 -0.0105243 0.693675 + 1.07848 1.34656 -1.16078 0.52262 -0.0298057 0.852044 + 1.05663 1.3173 -1.15837 0.359655 -0.420748 0.832838 + 1.02483 1.29119 -1.17293 0.375889 -0.877397 0.298131 + 1.03396 1.37048 -1.14108 0.326725 0.0856427 0.941231 + 1.01212 1.34121 -1.13867 0.1634 -0.155607 0.974211 + 0.997406 1.27631 -1.15377 0.25638 -0.731277 0.632063 + 0.97261 1.26164 -1.18472 0.163784 -0.986261 0.0215399 + 1.00003 1.27652 -1.20389 0.204927 -0.964084 -0.168955 + 0.957644 1.41559 -1.13398 -0.129767 -0.0796128 0.988343 + 0.976872 1.35841 -1.13414 -0.0756399 -0.0869513 0.993337 + 0.962162 1.29351 -1.14923 -0.140313 -0.292265 0.945988 + 0.925629 1.28328 -1.16015 -0.131081 -0.334809 0.933124 + 0.990861 1.42533 -1.13332 0.295741 -0.0188302 0.955082 + 0.926244 1.49054 -1.13347 -0.217439 -0.081181 0.972692 + 0.916147 1.37805 -1.15235 -0.293647 -0.10503 0.950127 + 0.879614 1.36781 -1.16327 -0.248977 -0.0661522 0.966247 + 0.959461 1.50028 -1.13282 0.359934 0.0942121 0.928209 + 0.931187 1.71372 -1.08756 0.279745 -0.290635 0.915027 + 0.902365 1.76281 -1.06867 -0.194326 -0.405531 0.893186 + 0.882147 1.76099 -1.0807 -0.567749 -0.422487 0.706517 + 0.919181 1.76651 -1.0674 0.272466 -0.264192 0.925184 + 0.898515 1.80898 -1.05025 0.247126 -0.216284 0.944537 + 0.881699 1.8053 -1.05151 -0.224009 -0.41161 0.883401 + 0.866868 1.80436 -1.06011 -0.560519 -0.461661 0.687523 + 0.912055 1.81381 -1.057 0.626707 0.0496546 0.777671 + 0.897618 1.84035 -1.04833 0.547167 0.254229 0.797481 + 0.884078 1.83552 -1.04158 0.147373 0.0439851 0.988102 + 0.872943 1.83326 -1.04231 -0.280863 -0.0786144 0.956523 + 0.858111 1.83233 -1.05092 -0.628119 -0.114445 0.769655 + 0.903469 1.84451 -1.05668 0.736949 0.455244 0.499659 + 0.894917 1.85396 -1.05715 0.514668 0.712968 0.476228 + 0.889066 1.8498 -1.0488 0.354849 0.543194 0.760936 + 0.882047 1.8473 -1.0453 0.0798997 0.439588 0.894639 + 0.870912 1.84504 -1.04603 -0.346091 0.388921 0.853792 + 0.895672 1.85692 -1.06475 0.520328 0.803319 0.289719 + 0.884859 1.8593 -1.06086 0.0866897 0.92823 0.361766 + 0.884105 1.85633 -1.05326 0.102357 0.844771 0.525247 + 0.877086 1.85383 -1.04977 -0.163248 0.759263 0.629976 + 0.89362 1.8604 -1.07339 0.46141 0.879977 0.112877 + 0.882319 1.86238 -1.06833 0.0863302 0.933093 0.349118 + 0.8803 1.85971 -1.0642 -0.183544 0.880091 0.437895 + 0.869399 1.85334 -1.05423 -0.332736 0.773294 0.539725 + 0.863225 1.84456 -1.05049 -0.539929 0.391074 0.745344 + 0.878847 1.864 -1.07216 0.0074882 0.990518 0.13718 + 0.869117 1.86311 -1.07252 -0.28309 0.948041 0.145182 + 0.865237 1.85893 -1.06692 -0.372999 0.852487 0.366248 + 0.863219 1.85625 -1.06279 -0.427837 0.802477 0.415915 + 0.86484 1.85376 -1.05757 -0.395155 0.744711 0.537827 + 0.880174 1.86256 -1.08044 0.0210911 0.947838 -0.318054 + 0.870445 1.86166 -1.0808 -0.230059 0.9156 -0.329773 + 0.860146 1.85782 -1.07682 -0.607892 0.7886 -0.092616 + 0.856266 1.85362 -1.07121 -0.738656 0.664643 0.112411 + 0.854544 1.84856 -1.06307 -0.763381 0.544531 0.347471 + 0.856165 1.84608 -1.05784 -0.69307 0.445276 0.566906 + 0.913342 1.25765 -1.1709 -0.108216 -0.744451 0.658849 + 0.935689 1.254 -1.17927 0.187011 -0.952847 0.238977 + 0.944768 1.28487 -1.2275 0.0501451 -0.883317 -0.466086 + 0.973217 1.29523 -1.24871 -0.00638026 -0.920206 -0.391384 + 0.852815 1.26164 -1.21466 -0.0344646 -0.967893 -0.248989 + 0.907848 1.27721 -1.22204 0.132768 -0.844577 -0.518712 + 0.896444 1.28468 -1.23787 0.189388 -0.919245 -0.345138 + 0.928007 1.29472 -1.25153 0.146829 -0.945375 -0.291044 + 0.890082 1.28386 -1.24262 0.315179 -0.944327 0.0943839 + 0.921645 1.2939 -1.25628 0.355093 -0.932088 0.0715549 + 0.951437 1.30384 -1.27738 0.392175 -0.908203 0.14617 + 0.956456 1.30509 -1.27275 0.153834 -0.959353 -0.236595 + 1.00682 1.29754 -1.2595 -0.128268 -0.940916 -0.313409 + 0.873612 1.2749 -1.24928 0.34608 -0.860455 0.37396 + 0.894538 1.27375 -1.26936 0.418576 -0.850683 0.318014 + 0.92433 1.28369 -1.29046 0.46639 -0.806028 0.364415 + 0.940004 1.27931 -1.31705 0.476945 -0.780841 0.403498 + 0.969913 1.30349 -1.30289 0.272122 -0.87837 0.392958 + 0.967692 1.30929 -1.28807 0.302757 -0.923166 0.236858 + 0.972711 1.31055 -1.28343 0.0634832 -0.975958 -0.208507 + 0.975681 1.29224 -1.33105 0.232301 -0.89181 0.388214 + 0.976651 1.30498 -1.30037 -0.163974 -0.931391 0.324997 + 0.97443 1.31079 -1.28553 -0.158101 -0.98158 0.107263 + 1.00854 1.29778 -1.2616 -0.260384 -0.959425 -0.108187 + 0.988898 1.28436 -1.35462 0.162558 -0.90241 0.399038 + 0.662234 2.30119 -1.93689 -0.700089 0.712293 -0.0501403 + 0.671906 2.30149 -1.91584 -0.479282 0.787934 0.386586 + 0.691178 2.31766 -1.92781 -0.413431 0.84002 0.351343 + 0.647785 2.28544 -1.92234 -0.783983 0.614324 0.0893147 + 0.668617 2.29306 -1.90509 -0.481967 0.723909 0.493623 + 0.703591 2.30482 -1.89977 -0.188053 0.735071 0.651388 + 0.681506 2.31737 -1.94886 -0.622821 0.77692 -0.0921334 + 0.686797 2.31231 -1.96761 -0.63471 0.57292 -0.518561 + 0.656699 2.28706 -1.94892 -0.783715 0.435917 -0.442455 + 0.64225 2.2713 -1.93437 -0.917245 0.287327 -0.27587 + 0.644497 2.27701 -1.91159 -0.813221 0.500292 0.297287 + 0.701295 2.32979 -1.95471 -0.407999 0.909046 -0.0846932 + 0.706586 2.32474 -1.97346 -0.349319 0.770202 -0.533635 + 0.707219 2.26081 -2.02254 -0.612769 0.434793 -0.659901 + 0.67712 2.23555 -2.00384 -0.75054 0.302052 -0.587754 + 0.655268 2.21173 -1.98184 -0.897819 0.111924 -0.425904 + 0.702805 2.32088 -1.92498 -0.270463 0.870784 0.410591 + 0.712922 2.33301 -1.95189 -0.152197 0.988241 0.0147135 + 0.724745 2.32977 -1.96905 0.0727982 0.913513 -0.400243 + 0.755307 2.28464 -2.02698 0.157231 0.801729 -0.576636 + 0.737148 2.2796 -2.03139 -0.292383 0.657319 -0.694581 + 0.70993 2.31707 -1.91436 -0.201646 0.844682 0.495834 + 0.732056 2.32883 -1.93265 0.165328 0.941452 0.293827 + 0.724931 2.33264 -1.94327 0.0686308 0.982874 0.171022 + 0.736754 2.3294 -1.96044 0.394043 0.900366 -0.184581 + 0.710472 2.31279 -1.90741 -0.164522 0.784902 0.597379 + 0.737508 2.31936 -1.91445 0.294043 0.749937 0.592564 + 0.736966 2.32364 -1.92139 0.244051 0.874902 0.418313 + 0.752792 2.31826 -1.93259 0.680277 0.703568 0.205465 + 0.747882 2.32345 -1.94384 0.580389 0.814059 0.0213778 + 0.726568 2.30354 -1.89746 0.241862 0.496269 0.833798 + 0.733448 2.31151 -1.9051 0.284337 0.59437 0.752248 + 0.749578 2.30373 -1.9124 0.689121 0.259375 0.676637 + 0.753638 2.31157 -1.92174 0.735604 0.484882 0.47305 + 0.709599 2.28836 -1.88548 0.183861 0.433306 0.882293 + 0.721864 2.27609 -1.88848 0.530826 0.00852059 0.847438 + 0.738832 2.29127 -1.90046 0.603796 0.0915974 0.791859 + 0.775984 2.23927 -1.94341 0.714757 -0.0973038 0.692571 + 0.78673 2.25172 -1.95535 0.811373 0.0620712 0.581223 + 0.683977 2.28909 -1.88871 -0.261317 0.69527 0.669562 + 0.689985 2.27263 -1.87442 0.111999 0.404332 0.907729 + 0.691231 2.25153 -1.8712 0.399406 -0.0528014 0.915252 + 0.719688 2.19174 -1.90802 0.53058 -0.273297 0.802368 + 0.75032 2.21631 -1.92529 0.63366 -0.191532 0.749527 + 0.677903 2.28876 -1.89228 -0.417846 0.701722 0.577054 + 0.673534 2.26235 -1.86962 -0.222932 0.348037 0.910589 + 0.67478 2.24124 -1.86641 -0.0906435 -0.201483 0.975289 + 0.694806 2.17619 -1.90076 0.0208483 -0.4975 0.867213 + 0.762482 2.08295 -1.97761 0.537573 -0.292529 0.790849 + 0.648337 2.26887 -1.89649 -0.7402 0.401833 0.539106 + 0.657623 2.26457 -1.88368 -0.659817 0.377533 0.6497 + 0.66746 2.26203 -1.87319 -0.563192 0.358048 0.744725 + 0.665293 2.24074 -1.87198 -0.61694 -0.22991 0.75268 + 0.637114 2.25814 -1.91758 -0.996338 0.0638111 0.056914 + 0.640954 2.24999 -1.90248 -0.914357 -0.116577 0.387766 + 0.655456 2.24329 -1.88247 -0.779515 -0.194685 0.59536 + 0.685319 2.17569 -1.90633 -0.545464 -0.553322 0.629527 + 0.650131 2.19857 -1.96504 -0.980034 -0.161747 -0.115636 + 0.65594 2.18625 -1.94222 -0.879701 -0.405931 0.247681 + 0.670442 2.17954 -1.9222 -0.731532 -0.506676 0.456224 + 0.723551 2.06666 -1.9786 -0.546446 -0.554346 0.627772 + 0.737599 2.0674 -1.97035 0.0459017 -0.505137 0.861818 + 0.688997 2.11225 -2.0718 -0.894282 0.123659 -0.430078 + 0.681391 2.09276 -2.04693 -0.981672 -0.15543 -0.110278 + 0.687199 2.08044 -2.0241 -0.88522 -0.395371 0.245087 + 0.708674 2.0705 -1.99447 -0.730846 -0.50479 0.459403 + 0.751927 1.96167 -2.03831 -0.570912 -0.469382 0.673602 + 0.710849 2.13608 -2.09381 -0.750137 0.29866 -0.589997 + 0.708769 2.01287 -2.1491 -0.899456 0.175576 -0.400191 + 0.701163 1.99338 -2.12423 -0.995136 -0.0689562 -0.070356 + 0.708922 1.97778 -2.09036 -0.903962 -0.306828 0.29784 + 0.730396 1.96785 -2.06072 -0.757159 -0.414667 0.504739 + 0.75542 2.17348 -2.12149 -0.603776 0.431726 -0.670125 + 0.78673 2.07714 -2.21228 -0.596372 0.440829 -0.670828 + 0.742159 2.03974 -2.18461 -0.741328 0.338106 -0.579756 + 0.718511 1.91654 -2.22502 -0.891145 0.244126 -0.382443 + 0.785349 2.19226 -2.13034 -0.281568 0.635452 -0.718972 + 0.831632 2.09707 -2.22876 -0.251725 0.627628 -0.736694 + 0.820298 1.97496 -2.31063 -0.571162 0.460803 -0.679289 + 0.751901 1.94341 -2.26053 -0.726163 0.374811 -0.576371 + 0.812239 2.19972 -2.1238 0.188133 0.768188 -0.611958 + 0.858522 2.10453 -2.22223 0.211752 0.733062 -0.64636 + 0.904952 1.99817 -2.32179 0.262376 0.678786 -0.685864 + 0.8652 1.99489 -2.32711 -0.219965 0.608386 -0.76255 + 0.830036 1.89047 -2.37428 -0.546517 0.425606 -0.721234 + 0.773471 2.28407 -2.01394 0.529883 0.778731 -0.33586 + 0.830403 2.19916 -2.11077 0.558014 0.738237 -0.378981 + 0.885057 2.10202 -2.20443 0.597761 0.687941 -0.411606 + 0.931487 1.99567 -2.304 0.613714 0.639803 -0.46261 + 0.930646 1.90147 -2.39814 0.226818 0.609783 -0.75942 + 0.784599 2.27812 -1.99735 0.723945 0.679322 -0.120109 + 0.846882 2.19034 -2.0862 0.758185 0.633255 -0.15538 + 0.901535 2.09321 -2.17986 0.786074 0.585602 -0.197883 + 0.954505 1.98373 -2.26926 0.809839 0.540711 -0.227581 + 0.792025 2.27028 -1.98033 0.831936 0.548373 0.0846659 + 0.854308 2.1825 -2.06918 0.861191 0.505947 0.0486537 + 0.911928 2.08291 -2.15493 0.887771 0.460059 0.0144161 + 0.964897 1.97343 -2.24433 0.902781 0.429595 -0.0208545 + 0.99123 1.89345 -2.33937 0.815671 0.516376 -0.260839 + 0.79287 2.26359 -1.96948 0.877851 0.312938 0.362557 + 0.855559 2.1726 -2.05312 0.901852 0.271475 0.336101 + 0.91318 2.07301 -2.13887 0.92096 0.240574 0.306524 + 0.965719 1.96289 -2.21997 0.93116 0.223686 0.287935 + 0.849419 2.16073 -2.03899 0.829023 0.0346302 0.558142 + 0.903487 2.05914 -2.11689 0.839363 0.0165293 0.543321 + 0.956027 1.94903 -2.19799 0.844699 0.0120483 0.535106 + 1.0056 1.87237 -2.28108 0.934882 0.198655 0.294163 + 1.00478 1.88291 -2.30544 0.913272 0.405469 -0.0391094 + 0.833506 2.14229 -2.0213 0.725894 -0.122797 0.676757 + 0.887574 2.04071 -2.0992 0.730839 -0.12894 0.67026 + 0.931095 1.93246 -2.16816 0.731589 -0.1219 0.670759 + 0.965064 1.835 -2.2212 0.736589 -0.0954219 0.669576 + 0.989996 1.85156 -2.25103 0.82632 -0.00260556 0.563195 + 0.807843 2.11933 -2.00318 0.64524 -0.210103 0.734521 + 0.848662 2.01527 -2.06917 0.6443 -0.211368 0.734984 + 0.892183 1.90702 -2.13813 0.643306 -0.187598 0.74227 + 0.911749 1.82007 -2.17394 0.650473 -0.131969 0.747977 + 0.978848 1.7391 -2.24915 0.708725 -0.114661 0.696105 + 0.803301 1.97889 -2.0436 0.538112 -0.279418 0.795212 + 0.822741 1.87667 -2.09111 0.525186 -0.248529 0.813888 + 0.842307 1.78971 -2.12691 0.526758 -0.0699772 0.84713 + 0.843826 1.74823 -2.12572 0.53618 -0.104514 0.837609 + 0.925533 1.72417 -2.20189 0.663526 -0.150284 0.732904 + 0.765975 1.96241 -2.03005 0.0228253 -0.454682 0.890361 + 0.785415 1.86019 -2.07757 0.0106474 -0.372981 0.927778 + 0.793324 1.79183 -2.10113 0.0268625 -0.142978 0.989361 + 0.764965 1.86176 -2.08775 -0.591649 -0.372034 0.715221 + 0.772874 1.7934 -2.11132 -0.599304 -0.107782 0.793232 + 0.770512 1.76357 -2.10983 -0.574246 -0.0769935 0.815054 + 0.794844 1.75036 -2.09994 0.00249596 -0.151938 0.988387 + 0.743434 1.86794 -2.11017 -0.773143 -0.32292 0.545868 + 0.745097 1.80715 -2.13932 -0.7821 -0.101872 0.614769 + 0.742735 1.77732 -2.13783 -0.768007 -0.0310783 0.639687 + 0.757929 1.69175 -2.14181 -0.646067 -0.254363 0.719651 + 0.713282 1.88189 -2.15177 -0.919171 -0.21556 0.329633 + 0.714945 1.8211 -2.18093 -0.908906 0.0141856 0.41676 + 0.706562 1.80358 -2.18817 -0.905076 0.0886619 0.415905 + 0.696911 1.73294 -2.22085 -0.941771 -0.0615691 0.33057 + 0.733084 1.70668 -2.17051 -0.811331 -0.152904 0.564236 + 0.705524 1.89749 -2.18565 -0.999159 0.00731655 -0.0403444 + 0.705046 1.83516 -2.22793 -0.973747 0.227527 -0.0069306 + 0.696663 1.81764 -2.23517 -0.962601 0.27088 0.00478115 + 0.690782 1.74648 -2.26215 -0.99685 0.0690316 -0.0390361 + 0.718033 1.85421 -2.2673 -0.868714 0.318007 -0.379747 + 0.710402 1.81461 -2.29184 -0.863541 0.328343 -0.382737 + 0.704521 1.74345 -2.31883 -0.930635 0.170969 -0.323555 + 0.761639 1.85892 -2.32418 -0.678895 0.418539 -0.603264 + 0.754009 1.81933 -2.34872 -0.642565 0.443453 -0.624868 + 0.719399 1.73808 -2.35506 -0.80952 0.246333 -0.532914 + 0.696827 1.64032 -2.34079 -0.950187 0.090559 -0.298235 + 0.833309 1.79061 -2.43007 -0.516089 0.41206 -0.750905 + 0.827699 1.73417 -2.4562 -0.547419 0.351054 -0.759667 + 0.748398 1.76289 -2.37486 -0.658395 0.341972 -0.670501 + 0.745485 1.659 -2.4139 -0.717426 0.197369 -0.668091 + 0.711705 1.63495 -2.37702 -0.860826 0.114814 -0.495779 + 0.890894 1.89819 -2.40346 -0.188617 0.537879 -0.821651 + 0.894168 1.79832 -2.45924 -0.254788 0.460794 -0.850148 + 0.862776 1.70508 -2.49231 -0.430393 0.308177 -0.848404 + 0.774483 1.6838 -2.4337 -0.63756 0.246803 -0.729798 + 0.95015 1.82306 -2.44983 0.176843 0.539151 -0.823433 + 0.962286 1.76365 -2.48349 0.209413 0.433209 -0.876628 + 0.906304 1.73891 -2.4929 -0.209751 0.427739 -0.879229 + 0.968212 1.90539 -2.37411 0.592635 0.59902 -0.538478 + 0.987716 1.82698 -2.4258 0.57409 0.53914 -0.616237 + 1.00159 1.77161 -2.46045 0.608269 0.398638 -0.686365 + 0.964559 1.72626 -2.49555 0.329537 0.341156 -0.880351 + 0.929799 1.71694 -2.50798 -0.0314069 0.389298 -0.920576 + 1.01923 1.82657 -2.37916 0.807799 0.478478 -0.344266 + 1.0331 1.77121 -2.41381 0.783063 0.450379 -0.428918 + 1.00386 1.73423 -2.47251 0.52275 0.357287 -0.774002 + 0.972498 1.66507 -2.51892 0.338263 0.347848 -0.874403 + 1.03278 1.81604 -2.34523 0.933579 0.358352 -0.00378537 + 1.05161 1.76093 -2.37974 0.955417 0.284174 -0.0801475 + 1.0388 1.73244 -2.44884 0.706026 0.416678 -0.572631 + 1.03766 1.66368 -2.47911 0.743369 0.220584 -0.631463 + 1.00271 1.66546 -2.50279 0.492539 0.322597 -0.808292 + 1.03164 1.79677 -2.31524 0.92868 0.139109 0.343806 + 1.05047 1.74166 -2.34976 0.946588 0.106863 0.304224 + 1.05732 1.72216 -2.41478 0.935485 0.249442 -0.250294 + 1.01603 1.77596 -2.28519 0.814951 -0.0213268 0.579137 + 1.02877 1.71446 -2.30948 0.817695 -0.0764495 0.570552 + 1.06608 1.70247 -2.37884 0.98671 0.0764947 0.143359 + 1.06358 1.62938 -2.41404 0.99761 -0.0690584 -0.00230886 + 1.05483 1.64907 -2.44998 0.935142 0.0744831 -0.346356 + 0.991591 1.6776 -2.27344 0.722945 -0.170166 0.669622 + 0.987141 1.64227 -2.27943 0.721815 -0.203222 0.661577 + 1.04438 1.67527 -2.33857 0.849455 -0.135481 0.509972 + 0.928917 1.65604 -2.22124 0.654501 -0.1902 0.731746 + 0.84721 1.6801 -2.14508 0.527051 -0.253871 0.811028 + 0.924466 1.62071 -2.22722 0.622346 -0.244183 0.74368 + 0.800543 1.65759 -2.12917 -0.0247224 -0.361444 0.932066 + 0.849891 1.58028 -2.18976 0.479407 -0.337192 0.810229 + 0.847353 1.52504 -2.20593 0.252695 -0.351903 0.901282 + 0.921928 1.56547 -2.2434 0.564408 -0.195119 0.802105 + 0.78226 1.67854 -2.13192 -0.493658 -0.315895 0.810254 + 0.779096 1.55243 -2.18899 -0.485447 -0.488332 0.725171 + 0.803225 1.55777 -2.17385 0.0303811 -0.497011 0.867212 + 0.809967 1.50612 -2.21306 -0.113894 -0.627807 0.769991 + 0.858232 1.50344 -2.22114 0.321648 -0.523018 0.7893 + 0.729885 1.58097 -2.2126 -0.703871 -0.362518 0.610857 + 0.760813 1.57338 -2.19175 -0.567238 -0.393033 0.723717 + 0.763128 1.50201 -2.24492 -0.484207 -0.696389 0.529703 + 0.785838 1.50078 -2.2282 -0.339161 -0.732162 0.590685 + 0.705041 1.5959 -2.2413 -0.896007 -0.260487 0.359607 + 0.727552 1.50758 -2.29468 -0.815277 -0.566922 0.117993 + 0.732201 1.5096 -2.26577 -0.768822 -0.534011 0.351773 + 0.79173 1.45366 -2.31689 -0.400011 -0.886361 0.233142 + 0.81444 1.45243 -2.30017 -0.179193 -0.917239 0.355757 + 0.697095 1.60853 -2.27505 -0.975359 -0.177916 0.13046 + 0.719606 1.52022 -2.32843 -0.85424 -0.509483 0.103445 + 0.77798 1.45808 -2.36581 -0.542994 -0.839117 0.0322331 + 0.787081 1.45164 -2.3458 -0.471582 -0.880553 0.0472935 + 0.690965 1.62207 -2.31635 -0.997444 -0.0628849 -0.033923 + 0.714012 1.52048 -2.35343 -0.793156 -0.580599 0.18387 + 0.772387 1.45834 -2.39081 -0.459482 -0.888067 0.0146262 + 0.821425 1.44275 -2.39031 0.148141 -0.908183 -0.391481 + 0.830525 1.43631 -2.3703 0.170821 -0.965349 -0.197284 + 0.70237 1.56553 -2.37354 -0.919136 0.0165323 -0.393594 + 0.696508 1.54728 -2.34911 -0.888356 -0.330987 0.318233 + 0.739204 1.4759 -2.4068 -0.691215 -0.710952 -0.129493 + 0.768963 1.46795 -2.4262 -0.166699 -0.821156 -0.545815 + 0.802146 1.45039 -2.41021 -0.00244717 -0.858773 -0.51235 + 0.719395 1.57264 -2.40035 -0.822621 0.0772144 -0.563324 + 0.721699 1.50269 -2.40248 -0.885696 -0.348539 -0.306698 + 0.738725 1.5098 -2.42928 -0.774139 -0.165761 -0.610927 + 0.756482 1.47811 -2.43653 -0.416224 -0.613345 -0.671242 + 0.753175 1.59668 -2.43723 -0.76287 0.129119 -0.633528 + 0.752344 1.53175 -2.44773 -0.755237 -0.0412167 -0.654154 + 0.767666 1.59787 -2.45405 -0.587676 0.212831 -0.780602 + 0.766835 1.53293 -2.46456 -0.568832 -0.0943899 -0.817019 + 0.770101 1.50006 -2.45498 -0.286893 -0.491131 -0.822485 + 0.802688 1.48985 -2.43791 0.105407 -0.689741 -0.716343 + 0.787825 1.60187 -2.46326 -0.533387 0.17952 -0.826602 + 0.775175 1.53447 -2.46828 -0.407422 -0.0929335 -0.908499 + 0.783568 1.50665 -2.4605 -0.132566 -0.583799 -0.801002 + 0.816156 1.49644 -2.44343 0.0263318 -0.810131 -0.585658 + 0.815169 1.47968 -2.42758 0.105876 -0.607886 -0.786934 + 0.80956 1.65472 -2.4698 -0.585929 0.192644 -0.787131 + 0.834381 1.57937 -2.49915 -0.527979 -0.00901256 -0.849209 + 0.795335 1.53847 -2.47749 -0.379415 -0.0965355 -0.920177 + 0.799746 1.50878 -2.47087 -0.314491 -0.660004 -0.682268 + 0.791909 1.50818 -2.46422 -0.287499 -0.728917 -0.621308 + 0.856116 1.63222 -2.50569 -0.508646 0.182654 -0.841378 + 0.881593 1.58963 -2.53022 -0.500878 0.0741193 -0.862338 + 0.873375 1.55246 -2.51634 -0.599841 -0.147045 -0.786491 + 0.823302 1.53265 -2.48298 -0.344404 -0.261738 -0.901598 + 0.886271 1.68311 -2.50739 -0.339354 0.282606 -0.897202 + 0.911747 1.64053 -2.53192 -0.305904 0.280891 -0.909683 + 0.906936 1.54814 -2.54853 -0.663379 -0.0685556 -0.745136 + 0.898718 1.51097 -2.53465 -0.606455 -0.350795 -0.713552 + 0.862296 1.50574 -2.50017 -0.575435 -0.420625 -0.701391 + 0.937738 1.65575 -2.53135 0.0331199 0.344394 -0.938241 + 0.91826 1.55614 -2.56075 -0.45608 0.0795948 -0.886372 + 0.938077 1.51208 -2.56524 -0.208019 -0.339887 -0.917172 + 0.926752 1.50408 -2.55302 -0.463644 -0.477295 -0.746474 + 0.918406 1.46792 -2.50923 -0.527312 -0.596774 -0.604817 + 0.971973 1.56406 -2.55641 0.32753 0.173357 -0.928801 + 0.944251 1.57137 -2.56018 0.0427712 0.23108 -0.971994 + 0.965799 1.50478 -2.56146 0.17225 -0.313621 -0.933794 + 0.94644 1.46103 -2.5276 -0.194366 -0.720725 -0.665416 + 0.908384 1.45247 -2.48527 -0.463667 -0.826135 -0.320178 + 1.00219 1.56445 -2.54027 0.590486 0.130656 -0.796401 + 1.02563 1.56577 -2.51562 0.794473 0.0464434 -0.605522 + 1.01213 1.50124 -2.52694 0.72676 -0.313253 -0.611304 + 0.988691 1.49992 -2.55159 0.497268 -0.350932 -0.793455 + 1.04279 1.55116 -2.48648 0.926479 -0.07608 -0.368575 + 1.02045 1.48892 -2.50796 0.760931 -0.387235 -0.520608 + 0.969331 1.45617 -2.51773 0.300105 -0.695323 -0.653041 + 0.967231 1.42517 -2.48034 -0.0577114 -0.910767 -0.408869 + 0.934111 1.43808 -2.46427 -0.466483 -0.875083 -0.128933 + 1.04434 1.51289 -2.45419 0.968865 -0.236268 -0.0740094 + 1.02199 1.45065 -2.47566 0.765352 -0.543841 -0.344198 + 0.977657 1.44386 -2.49875 0.381989 -0.697831 -0.605901 + 1.05303 1.60998 -2.37494 0.900478 -0.194567 0.388951 + 1.03378 1.49348 -2.41509 0.992777 -0.119957 -0.00224613 + 1.01157 1.43196 -2.45725 0.598278 -0.744309 -0.296761 + 0.978751 1.41416 -2.43431 0.00739088 -0.999733 -0.0218946 + 0.945631 1.42706 -2.41825 -0.512825 -0.852041 0.105055 + 0.995792 1.57698 -2.3158 0.814002 -0.169589 0.555555 + 1.03849 1.50683 -2.38608 0.951259 0.306815 0.0311561 + 1.03263 1.45201 -2.41087 0.884312 -0.430984 0.17957 + 1.02792 1.43867 -2.43989 0.847379 -0.409527 -0.337988 + 0.978323 1.56018 -2.29297 0.769817 -0.174749 0.613877 + 1.02102 1.49003 -2.36325 0.778311 -0.263564 0.569882 + 1.02274 1.45627 -2.3887 0.703907 -0.528014 0.475096 + 0.9951 1.42087 -2.41695 0.402973 -0.893083 0.200042 + 0.985216 1.42513 -2.39478 0.233794 -0.893681 0.382981 + 0.957668 1.56216 -2.26916 0.654388 -0.16491 0.737958 + 0.986659 1.48947 -2.32574 0.698985 -0.326803 0.636097 + 0.988383 1.4557 -2.35119 0.448933 -0.670597 0.590558 + 0.938402 1.49795 -2.268 0.552054 -0.445063 0.705092 + 0.966005 1.49145 -2.30192 0.652621 -0.41273 0.635405 + 0.957587 1.46986 -2.31696 0.157069 -0.863637 0.479019 + 0.965733 1.4575 -2.3428 -0.0787737 -0.871895 0.483315 + 0.962566 1.42692 -2.38639 -0.203534 -0.909628 0.362148 + 0.902662 1.50126 -2.24224 0.42143 -0.450761 0.786899 + 0.895943 1.47159 -2.27488 0.229536 -0.931329 0.282736 + 0.916757 1.47828 -2.28659 0.143584 -0.964206 0.222912 + 0.929985 1.47636 -2.28303 0.0357375 -0.826778 0.561391 + 0.851514 1.47378 -2.25377 0.17846 -0.865555 0.467938 + 0.883863 1.47083 -2.31947 0.387042 -0.922057 -0.0029441 + 0.904677 1.47752 -2.33118 0.127075 -0.988903 -0.0769601 + 0.91077 1.47773 -2.33286 -0.147609 -0.984598 0.093687 + 0.923997 1.47581 -2.32931 -0.21377 -0.956465 0.198686 + 0.820847 1.48452 -2.22826 -0.251544 -0.757459 0.602479 + 0.845107 1.44169 -2.32568 0.270701 -0.949947 0.155957 + 0.869282 1.46545 -2.36408 0.594121 -0.753967 -0.280275 + 0.886052 1.48002 -2.36785 0.268451 -0.941958 -0.201619 + 0.892145 1.48023 -2.36953 -0.253546 -0.965472 0.0598149 + 0.860427 1.48621 -2.41366 -0.200694 -0.979229 -0.0288473 + 0.88349 1.46958 -2.43114 -0.485173 -0.865108 0.127257 + 0.915207 1.4636 -2.38701 -0.519909 -0.826232 0.216876 + 0.855315 1.48492 -2.40979 0.312712 -0.879647 -0.358375 + 0.837786 1.48875 -2.43245 0.0879896 -0.845276 -0.527035 + 0.842899 1.49004 -2.43632 -0.260622 -0.942107 -0.210977 + 0.857762 1.48397 -2.45214 -0.511883 -0.85835 -0.0347977 + 0.838544 1.47036 -2.40602 0.475879 -0.690743 -0.544438 + 0.819265 1.478 -2.42592 0.202534 -0.646646 -0.735411 + 0.833691 1.49043 -2.4341 0.00796357 -0.763876 -0.645313 + 0.839337 1.49281 -2.43923 -0.298526 -0.896703 -0.326812 + 0.8542 1.48674 -2.45505 -0.515067 -0.849626 -0.113324 + 0.821802 1.49881 -2.44856 -0.105673 -0.922353 -0.371616 + 0.829639 1.49942 -2.45521 -0.302403 -0.935282 -0.183849 + 0.852274 1.49029 -2.4762 -0.537337 -0.739943 -0.404663 + 0.827713 1.50296 -2.47636 -0.289065 -0.662239 -0.69129 + 0.932143 1.46345 -2.35515 -0.39054 -0.855965 0.338825 + -0.477956 2.44876 -2.42829 -0.713782 -0.394723 0.578541 + -0.467398 2.44058 -2.42085 -0.524332 -0.503582 0.686644 + -0.455121 2.49752 -2.38613 -0.168457 0.0900533 0.981587 + -0.48166 2.36212 -2.53005 -0.723287 -0.5024 0.473762 + -0.464037 2.34847 -2.51762 -0.53005 -0.616581 0.58213 + -0.447121 2.34366 -2.51467 -0.0655915 -0.719394 0.691498 + -0.450482 2.43577 -2.4179 -0.046679 -0.601423 0.797566 + -0.465679 2.5057 -2.39357 -0.383277 0.30033 0.873442 + -0.492046 2.45967 -2.43823 -0.713777 -0.394727 0.578544 + -0.495751 2.37304 -2.53998 -0.723126 -0.502265 0.474151 + -0.484332 2.25592 -2.64186 -0.720373 -0.483533 0.497251 + -0.440329 2.49849 -2.38915 0.316756 0.157133 0.935401 + -0.476236 2.51388 -2.40102 -0.566382 0.416233 0.71131 + -0.502604 2.46785 -2.44568 -0.829634 -0.25995 0.494099 + -0.513374 2.38669 -2.55241 -0.843808 -0.375323 0.383565 + -0.43569 2.43673 -2.42093 0.302498 -0.558936 0.772065 + -0.418756 2.44069 -2.42749 0.521749 -0.469847 0.712054 + -0.429745 2.50345 -2.39596 0.461368 0.283595 0.840662 + -0.424327 2.51521 -2.40944 0.601343 0.599238 0.528489 + -0.467152 2.52407 -2.41326 -0.203465 0.952545 0.226404 + -0.474164 2.52076 -2.40874 -0.44632 0.824317 0.348282 + -0.422429 2.34527 -2.51972 0.298635 -0.675887 0.673791 + -0.405496 2.34923 -2.52628 0.515755 -0.591514 0.619764 + -0.408173 2.44566 -2.43429 0.639148 -0.39315 0.661001 + -0.398907 2.45053 -2.44081 0.703453 -0.336243 0.626175 + -0.426444 2.50578 -2.39893 0.585456 0.381841 0.715149 + -0.440365 2.23543 -2.62505 -0.048931 -0.705347 0.707172 + -0.415673 2.23704 -2.6301 0.297261 -0.667154 0.683039 + -0.389712 2.24311 -2.64016 0.518166 -0.584773 0.624134 + -0.387829 2.35752 -2.53764 0.639941 -0.516832 0.568648 + -0.378564 2.36239 -2.54416 0.707258 -0.463213 0.53406 + -0.466709 2.24227 -2.62943 -0.523434 -0.600563 0.604434 + -0.44074 2.1104 -2.74687 -0.0493188 -0.687421 0.724583 + -0.404898 2.11274 -2.75421 0.302735 -0.655908 0.691474 + -0.378937 2.1188 -2.76427 0.517269 -0.583588 0.625986 + -0.372046 2.2514 -2.65151 0.639663 -0.514842 0.570761 + -0.4943 2.13491 -2.76878 -0.696929 -0.476595 0.535861 + -0.467083 2.11724 -2.75126 -0.489428 -0.592811 0.639558 + -0.442331 2.02299 -2.82772 -0.0314512 -0.640199 0.767565 + -0.40649 2.02533 -2.83506 0.318501 -0.62997 0.708305 + -0.374365 2.03609 -2.84565 0.530869 -0.575813 0.621786 + -0.505944 2.2722 -2.65711 -0.721319 -0.48383 0.495588 + -0.515912 2.15119 -2.78403 -0.733482 -0.445994 0.512926 + -0.502179 2.0455 -2.85321 -0.690503 -0.424785 0.58546 + -0.474962 2.02784 -2.83569 -0.487818 -0.526032 0.696652 + -0.452376 1.96882 -2.8685 -0.00947196 -0.619013 0.785324 + -0.523567 2.28586 -2.66954 -0.840828 -0.363677 0.400933 + -0.539896 2.17133 -2.80264 -0.852082 -0.322402 0.412326 + -0.553113 2.08232 -2.89334 -0.841536 -0.268257 0.468887 + -0.529129 2.06217 -2.87472 -0.725858 -0.391548 0.565526 + -0.513307 1.9881 -2.90143 -0.704606 -0.30485 0.640778 + -0.519036 2.39674 -2.56253 -0.993684 -0.0101956 0.111752 + -0.532252 2.30126 -2.68505 -0.993001 -0.000787938 0.118101 + -0.548581 2.18674 -2.81815 -0.988103 -0.0106538 0.153427 + -0.564027 2.1075 -2.90947 -0.977349 0.0339309 0.208896 + -0.568557 2.0192 -2.94789 -0.822824 -0.216137 0.52559 + -0.508266 2.4779 -2.45579 -0.964535 0.124737 0.23262 + -0.515576 2.40822 -2.57542 -0.924263 0.345164 -0.163094 + -0.528792 2.31274 -2.69794 -0.932179 0.328645 -0.15177 + -0.545174 2.20307 -2.83628 -0.939959 0.316103 -0.128668 + -0.56062 2.12383 -2.92759 -0.948636 0.316125 0.0124357 + -0.506193 2.48478 -2.46351 -0.887713 0.459375 -0.0306548 + -0.500131 2.49158 -2.47168 -0.702651 0.676886 -0.219333 + -0.509514 2.41502 -2.58358 -0.737999 0.578881 -0.346776 + -0.520503 2.32296 -2.7101 -0.751494 0.56082 -0.347473 + -0.536884 2.21329 -2.84844 -0.767794 0.551236 -0.326545 + -0.493119 2.4949 -2.47621 -0.490723 0.802906 -0.338427 + -0.49781 2.42055 -2.59114 -0.516982 0.720761 -0.461771 + -0.508799 2.32849 -2.71765 -0.52511 0.704602 -0.477279 + -0.522297 2.22082 -2.85854 -0.538309 0.705294 -0.461285 + -0.477694 2.49933 -2.48308 -0.36364 0.848718 -0.383984 + -0.482385 2.42499 -2.59801 -0.391614 0.770759 -0.502562 + -0.486967 2.33492 -2.72754 -0.398568 0.753249 -0.523219 + -0.500465 2.22725 -2.86843 -0.400833 0.761233 -0.509762 + -0.535618 2.15706 -2.94556 -0.526022 0.814297 -0.245401 + -0.461591 2.50266 -2.48885 -0.290495 0.869366 -0.399768 + -0.455504 2.43055 -2.60765 -0.313959 0.794689 -0.519518 + -0.460086 2.34048 -2.73717 -0.31707 0.776471 -0.544572 + -0.466308 2.23432 -2.88067 -0.314123 0.788051 -0.529435 + -0.451048 2.52741 -2.41903 -0.0854002 0.974261 0.208619 + -0.443246 2.50551 -2.4944 -0.210098 0.889037 -0.406783 + -0.437159 2.43339 -2.6132 -0.234496 0.814507 -0.53065 + -0.433981 2.34442 -2.74496 -0.236167 0.794165 -0.559934 + -0.439661 2.52833 -2.42158 0.06001 0.981835 0.179995 + -0.431859 2.50643 -2.49695 -0.0612857 0.912063 -0.405445 + -0.418151 2.43494 -2.61744 -0.075994 0.839986 -0.53726 + -0.414973 2.34596 -2.7492 -0.0696229 0.814534 -0.575923 + -0.4286 2.5258 -2.42033 0.448094 0.854593 0.262455 + -0.416879 2.50535 -2.49781 0.149029 0.915236 -0.374345 + -0.403171 2.43386 -2.61831 0.140231 0.841267 -0.522117 + -0.393462 2.34401 -2.75001 0.15221 0.807642 -0.56969 + -0.415832 2.23983 -2.89347 -0.0594768 0.811874 -0.580796 + -0.391312 2.48349 -2.47758 0.926959 0.357546 0.11361 + -0.395585 2.49407 -2.48847 0.823627 0.565352 -0.0449028 + -0.405817 2.50282 -2.49657 0.495461 0.826532 -0.26714 + -0.384707 2.42964 -2.61623 0.522457 0.743262 -0.417852 + -0.374997 2.33978 -2.74793 0.532501 0.698704 -0.47776 + -0.389873 2.47013 -2.4633 0.952587 0.195579 0.233082 + -0.367343 2.40322 -2.58996 0.972079 0.234349 -0.0119956 + -0.374474 2.42088 -2.60813 0.864561 0.465673 -0.188901 + -0.39199 2.4607 -2.45278 0.939376 0.0621409 0.33721 + -0.369437 2.37412 -2.55811 0.970087 -0.0648975 0.233922 + -0.365904 2.38986 -2.57567 0.989964 0.0803018 0.116288 + -0.352711 2.30859 -2.71715 0.96659 0.236506 -0.0988375 + -0.395605 2.45286 -2.44378 0.853254 -0.153288 0.498458 + -0.373052 2.36627 -2.54911 0.87559 -0.272512 0.398848 + -0.350354 2.27359 -2.679 0.985335 -0.0106209 0.170298 + -0.346821 2.28933 -2.69655 0.993311 0.107274 0.0427142 + -0.357841 2.25887 -2.66151 0.707496 -0.462844 0.534064 + -0.35233 2.26275 -2.66646 0.91187 -0.217126 0.348351 + -0.329112 2.15478 -2.81047 0.991712 0.127836 -0.0128568 + -0.338253 2.17287 -2.83091 0.962373 0.234008 -0.138124 + -0.344143 2.19213 -2.8515 0.967022 0.220721 -0.127082 + -0.339088 2.13831 -2.79074 0.707338 -0.467927 0.529828 + -0.331088 2.14395 -2.79793 0.914263 -0.230053 0.333465 + -0.319993 2.06227 -2.90625 0.997595 0.0415473 -0.0554786 + -0.329134 2.08035 -2.92669 0.967249 0.207806 -0.145763 + -0.353293 2.13085 -2.78075 0.639947 -0.51686 0.568615 + -0.331183 2.05649 -2.87513 0.703264 -0.491482 0.513678 + -0.323182 2.06213 -2.88232 0.911156 -0.269459 0.311748 + -0.323851 2.01424 -2.94759 0.992628 -0.0747521 0.0954014 + -0.348721 2.04813 -2.86213 0.640271 -0.53231 0.553804 + -0.335699 2.01663 -2.91063 0.649697 -0.540085 0.534979 + -0.327041 2.0141 -2.92366 0.857244 -0.379026 0.348528 + -0.381088 1.98997 -2.88234 0.532462 -0.585967 0.610842 + -0.353237 2.00827 -2.89763 0.65041 -0.539372 0.534831 + -0.338162 1.98742 -2.93632 0.65371 -0.528527 0.541592 + -0.329504 1.9849 -2.94935 0.831056 -0.389802 0.396738 + -0.413213 1.9792 -2.87175 0.331722 -0.638423 0.694534 + -0.422761 1.94126 -2.90427 0.297743 -0.670594 0.67945 + -0.383209 1.9579 -2.91144 0.523002 -0.591302 0.613865 + -0.355358 1.9762 -2.92673 0.648929 -0.531535 0.544392 + -0.461924 1.93088 -2.90102 0.0978693 -0.695188 0.712134 + -0.482886 1.89872 -2.93538 0.194687 -0.808608 0.555202 + -0.423224 1.92193 -2.92251 0.283896 -0.751676 0.595303 + -0.383672 1.93857 -2.92968 0.521782 -0.682096 0.512337 + -0.352138 1.95325 -2.95268 0.634726 -0.640366 0.432497 + -0.499306 1.93196 -2.90716 -0.480046 -0.286154 0.82926 + -0.49686 1.91642 -2.91029 -0.178898 -0.514258 0.838769 + -0.517822 1.88427 -2.94465 0.0771349 -0.809935 0.581426 + -0.520296 1.84983 -3.0054 0.147517 -0.871697 0.467315 + -0.489461 1.86738 -2.9882 0.240102 -0.863495 0.44354 + -0.485006 1.97367 -2.87647 -0.504201 -0.427606 0.75029 + -0.527606 1.94638 -2.93211 -0.713167 -0.134316 0.688006 + -0.540477 1.89771 -2.94495 -0.668362 -0.157002 0.727078 + -0.538031 1.88218 -2.94808 -0.457874 -0.632475 0.624762 + -0.540505 1.84774 -3.00883 0.044525 -0.793317 0.607178 + -0.540257 2.00477 -2.92293 -0.712884 -0.319851 0.624093 + -0.550425 1.95592 -2.95582 -0.717065 -0.137263 0.683357 + -0.563295 1.90724 -2.96866 -0.778807 -0.187871 0.598468 + -0.567529 1.8399 -3.00697 -0.104567 -0.651089 0.751764 + -0.535155 1.79806 -3.09115 0.340148 -0.840625 0.421483 + -0.578725 1.97035 -2.98078 -0.856759 -0.160377 0.490146 + -0.579954 1.94416 -2.99674 -0.905186 -0.104193 0.412046 + -0.599692 1.88911 -3.03888 -0.925468 0.00617519 0.378775 + -0.583033 1.85218 -3.0108 -0.714014 -0.257658 0.650996 + -0.589618 1.99987 -2.99685 -0.958446 -0.0246769 0.284204 + -0.590847 1.97369 -3.01281 -0.93631 -0.0896753 0.339532 + -0.579471 2.04438 -2.96402 -0.95826 -0.00316714 0.285881 + -0.584399 2.04968 -2.99969 -0.9862 0.146474 0.077163 + -0.59468 1.9906 -3.02123 -0.984201 0.0671927 0.163807 + -0.609711 1.92795 -3.07071 -0.97534 0.0723991 0.208497 + -0.605878 1.91104 -3.06229 -0.954416 -0.00805304 0.298371 + -0.574252 2.09419 -2.96686 -0.964908 0.251883 0.0742159 + -0.578828 2.08162 -3.00726 -0.931109 0.357932 -0.070149 + -0.58911 2.02254 -3.02881 -0.985573 0.159402 0.0568875 + -0.608203 1.94353 -3.09701 -0.979045 0.179536 0.0961097 + -0.637013 1.84059 -3.16702 -0.989931 0.0571008 0.129519 + -0.550205 2.14953 -2.93546 -0.813702 0.558485 -0.161193 + -0.563837 2.11988 -2.97473 -0.882279 0.460366 -0.0982188 + -0.560378 2.11072 -3.00768 -0.785948 0.55163 -0.279265 + -0.586662 2.05445 -3.04743 -0.913065 0.377179 -0.155077 + -0.605755 1.97545 -3.11563 -0.912638 0.369376 -0.17508 + -0.545387 2.14899 -2.97514 -0.661954 0.723716 -0.195068 + -0.533728 2.13537 -3.02469 -0.558143 0.735336 -0.384393 + -0.560011 2.0791 -3.06445 -0.729394 0.562423 -0.389442 + -0.576123 1.99168 -3.14484 -0.719048 0.536651 -0.44156 + -0.508183 2.17016 -2.95508 -0.398298 0.861567 -0.31474 + -0.517952 2.16209 -2.98466 -0.386136 0.884778 -0.260897 + -0.491183 2.14407 -3.04 -0.266413 0.856064 -0.44292 + -0.516853 2.10795 -3.09817 -0.470965 0.730318 -0.494801 + -0.532964 2.02054 -3.17856 -0.54834 0.591358 -0.591286 + -0.474026 2.17723 -2.96733 -0.19824 0.90362 -0.3797 + -0.475407 2.1708 -2.99997 -0.150471 0.936653 -0.316291 + -0.452411 2.14003 -3.06474 0.13632 0.845895 -0.515633 + -0.478081 2.10392 -3.12291 -0.0964758 0.803228 -0.587807 + -0.440204 2.23825 -2.88846 -0.218931 0.800731 -0.557583 + -0.441222 2.17234 -2.98279 -0.0221138 0.893085 -0.449343 + -0.442603 2.16591 -3.01543 0.329022 0.885641 -0.327695 + -0.422268 2.10312 -3.09402 0.426462 0.765735 -0.481436 + -0.41685 2.17391 -2.9878 0.0676328 0.792689 -0.605863 + -0.41246 2.12899 -3.04471 0.39343 0.758927 -0.518886 + -0.386349 2.06833 -3.10966 0.584743 0.673021 -0.4529 + -0.438839 2.08711 -3.14356 0.237809 0.786797 -0.569558 + -0.39432 2.23788 -2.89427 0.187654 0.788698 -0.585441 + -0.389817 2.15261 -2.99969 0.337419 0.731922 -0.591979 + -0.385427 2.10769 -3.0566 0.506834 0.693966 -0.511401 + -0.356933 2.02515 -3.1269 0.744423 0.553287 -0.373775 + -0.40292 2.05232 -3.15919 0.498005 0.678042 -0.540601 + -0.370119 2.2312 -2.89033 0.55757 0.66381 -0.498469 + -0.365615 2.14594 -2.99574 0.580164 0.6196 -0.528683 + -0.356011 2.06451 -3.07384 0.730735 0.537446 -0.420926 + -0.359842 2.32626 -2.73533 0.881773 0.405898 -0.240257 + -0.354964 2.21767 -2.87772 0.879801 0.390288 -0.271342 + -0.346571 2.11936 -2.98543 0.898082 0.354904 -0.259793 + -0.336966 2.03794 -3.06353 0.903413 0.351656 -0.245321 + -0.33575 2.09382 -2.95921 0.964039 0.230572 -0.132159 + -0.325227 2.00706 -3.03519 0.97344 0.195244 -0.119562 + -0.318612 1.99359 -3.00267 0.999024 0.0441667 0.000984841 + -0.321743 1.93023 -3.0794 0.923229 -0.337234 0.184178 + -0.319477 1.95721 -3.08768 0.993013 0.115719 0.0230935 + -0.331216 1.98809 -3.11602 0.909569 0.348049 -0.227037 + -0.358045 2.01003 -3.15456 0.726752 0.554167 -0.40587 + -0.324871 1.97717 -2.97205 0.932115 -0.277305 0.232944 + -0.319632 1.95652 -3.02713 0.961816 -0.252597 0.105375 + -0.334942 1.96447 -2.96227 0.726288 -0.560023 0.398598 + -0.33031 1.95675 -2.98498 0.753021 -0.580483 0.309837 + -0.332421 1.93045 -3.03725 0.716742 -0.641948 0.272365 + -0.362896 1.9105 -3.02897 0.579969 -0.751693 0.313997 + -0.34472 1.86875 -3.17277 0.67375 -0.714126 0.189961 + -0.317757 1.91413 -3.10763 0.770193 -0.558397 0.308213 + -0.31549 1.94111 -3.11592 0.989176 0.135782 -0.0556295 + -0.332328 1.97298 -3.14368 0.882671 0.379849 -0.27678 + -0.39443 1.89582 -3.00597 0.504745 -0.794646 0.337297 + -0.375195 1.84879 -3.16449 0.555768 -0.786484 0.269377 + -0.351296 1.8498 -3.23371 0.795118 -0.606203 -0.0174379 + -0.324332 1.89519 -3.16858 0.943972 -0.319452 -0.0828742 + -0.320957 1.92094 -3.15613 0.975908 0.0775858 -0.203921 + -0.4298 1.89059 -2.97533 0.340549 -0.843884 0.414593 + -0.427918 1.82882 -3.13141 0.439417 -0.839304 0.320127 + -0.441853 1.79071 -3.20774 0.415366 -0.848534 0.327813 + -0.38913 1.81069 -3.24081 0.605902 -0.736656 0.300367 + -0.361202 1.8383 -3.26571 0.940777 -0.274952 0.198343 + -0.463288 1.82359 -3.10077 0.344215 -0.874378 0.342021 + -0.494123 1.80604 -3.11798 0.365028 -0.861032 0.354088 + -0.489767 1.77749 -3.19558 0.294228 -0.919954 0.259065 + -0.460883 1.78007 -3.21531 0.294097 -0.914398 0.278177 + -0.422959 1.78291 -3.25752 0.447344 -0.881616 0.150454 + -0.530799 1.76951 -3.16875 0.324337 -0.918588 0.225834 + -0.540533 1.76076 -3.22843 0.11771 -0.991447 -0.0563651 + -0.494135 1.76554 -3.25139 0.10449 -0.994485 0.0090278 + -0.465251 1.76812 -3.27113 0.118759 -0.99217 -0.0386631 + -0.441989 1.77227 -3.2651 0.359206 -0.933256 0.00197985 + -0.558435 1.76325 -3.1555 0.293737 -0.920608 0.257293 + -0.568169 1.7545 -3.21518 0.0503074 -0.985755 -0.160488 + -0.587769 1.76593 -3.24254 -0.312762 -0.882471 -0.351318 + -0.554822 1.76938 -3.27247 -0.175481 -0.8986 -0.402149 + -0.508423 1.77416 -3.29543 -0.113135 -0.912836 -0.392339 + -0.573037 1.77082 -3.12331 0.180184 -0.906545 0.381721 + -0.580638 1.74965 -3.18292 0.0527998 -0.998467 0.0166229 + -0.600238 1.76109 -3.21029 -0.421898 -0.876679 -0.231162 + -0.562179 1.79022 -3.08929 0.225778 -0.856873 0.463457 + -0.610853 1.77971 -3.09411 -0.470898 -0.791309 0.389981 + -0.614004 1.77602 -3.11247 -0.397612 -0.832013 0.386857 + -0.595239 1.75722 -3.15073 -0.0711713 -0.950787 0.301559 + -0.599995 1.7991 -3.06009 -0.234115 -0.753129 0.614806 + -0.615499 1.81139 -3.06392 -0.866322 -0.235792 0.440327 + -0.618651 1.8077 -3.08228 -0.976566 -0.0945631 0.19333 + -0.624255 1.77598 -3.12444 -0.803737 -0.542337 0.244699 + -0.605489 1.75718 -3.16271 -0.458868 -0.884725 0.0818619 + -0.621003 1.81115 -3.103 -0.983966 0.0241603 0.176711 + -0.626607 1.77943 -3.14516 -0.914191 -0.396809 0.0824398 + -0.630666 1.78308 -3.1656 -0.897546 -0.423464 0.122836 + -0.609548 1.76084 -3.18315 -0.552403 -0.829464 -0.0827085 + -0.631179 1.79085 -3.23334 -0.847462 -0.372282 -0.378436 + -0.627189 1.83308 -3.12642 -0.971678 -0.00707808 0.236202 + -0.640489 1.7906 -3.20621 -0.926867 -0.352008 -0.130414 + -0.635505 1.85617 -3.19331 -0.953631 0.243531 -0.176862 + -0.613937 1.79682 -3.27088 -0.740642 -0.283997 -0.608929 + -0.618263 1.86215 -3.23085 -0.821367 0.35397 -0.447281 + -0.58863 1.87838 -3.26006 -0.580097 0.468114 -0.666601 + -0.58099 1.80027 -3.30081 -0.514348 -0.234756 -0.824825 + -0.532948 1.87658 -3.28699 -0.37928 0.454166 -0.806152 + -0.525308 1.79846 -3.32774 -0.282127 -0.243749 -0.927896 + -0.48922 1.79653 -3.33282 -0.0552429 -0.355778 -0.932936 + -0.472335 1.77223 -3.30051 0.10049 -0.896944 -0.430574 + -0.48838 2.02688 -3.19909 -0.257283 0.649077 -0.715894 + -0.488365 1.88292 -3.30753 -0.317856 0.41292 -0.853501 + -0.468522 1.81279 -3.33568 0.0380865 -0.158595 -0.986609 + -0.449139 2.01008 -3.21974 -0.0256102 0.686103 -0.727054 + -0.448111 1.89804 -3.30834 -0.169706 0.506088 -0.845621 + -0.428268 1.82792 -3.3365 0.158438 -0.403155 -0.901312 + -0.420566 1.99496 -3.23476 0.177246 0.670731 -0.720211 + -0.419538 1.88293 -3.32336 -0.0389268 0.42072 -0.906355 + -0.406468 1.84413 -3.33754 0.288276 -0.158864 -0.944277 + -0.390086 1.82357 -3.29044 0.532366 -0.645625 -0.547499 + -0.403222 2.00625 -3.21301 0.470228 0.653122 -0.593564 + -0.393954 1.89485 -3.30799 0.404817 0.51302 -0.756924 + -0.380884 1.85606 -3.32217 0.653747 -0.0107281 -0.756637 + -0.368286 1.83979 -3.29148 0.654441 -0.599344 -0.460971 + -0.358347 1.96397 -3.20837 0.70129 0.516857 -0.490969 + -0.368483 1.91092 -3.27321 0.7171 0.437002 -0.542952 + -0.376611 1.90614 -3.28625 0.597778 0.485397 -0.638005 + -0.36934 1.85773 -3.30622 0.807147 0.00516889 -0.590328 + -0.356741 1.84146 -3.27553 0.997983 -0.061069 0.0173252 + -0.337794 1.95281 -3.18389 0.850943 0.383801 -0.358599 + -0.347931 1.89976 -3.24873 0.881533 0.202841 -0.426328 + -0.351306 1.87401 -3.26118 0.94511 -0.0207821 -0.326092 + -0.361212 1.86251 -3.29318 0.892142 0.0802041 -0.444579 + -0.365609 1.82155 -3.26492 0.83111 -0.546298 -0.103993 + -0.428375 1.79264 -3.29734 0.48171 -0.587432 -0.650292 + -0.449073 1.77638 -3.29447 0.352737 -0.821275 -0.448424 + -0.370069 1.81839 -3.25511 0.747716 -0.381009 0.543831 + -0.403898 1.79062 -3.27181 0.558526 -0.807993 -0.187608 + 0.465679 2.5057 -2.39357 0.383464 0.300067 0.87345 + 0.455121 2.49752 -2.38613 0.168342 0.0901796 0.981595 + 0.467398 2.44058 -2.42085 0.524332 -0.503585 0.686643 + 0.474164 2.52076 -2.40874 0.446181 0.824383 0.348303 + 0.424327 2.51521 -2.40944 -0.601315 0.599213 0.528549 + 0.426444 2.50578 -2.39893 -0.585541 0.381774 0.715116 + 0.429745 2.50345 -2.39596 -0.461452 0.283428 0.840673 + 0.440329 2.49849 -2.38915 -0.316583 0.157404 0.935414 + 0.43569 2.43673 -2.42093 -0.302496 -0.558937 0.772066 + 0.450482 2.43577 -2.4179 0.0466769 -0.601423 0.797566 + 0.477956 2.44876 -2.42829 0.713783 -0.394725 0.578538 + 0.492046 2.45967 -2.43823 0.713778 -0.394725 0.578543 + 0.476236 2.51388 -2.40102 0.56647 0.416188 0.711265 + 0.464037 2.34847 -2.51762 0.530505 -0.615793 0.582549 + 0.48166 2.36212 -2.53005 0.723126 -0.502302 0.474111 + 0.495751 2.37304 -2.53998 0.723281 -0.501903 0.474297 + 0.502604 2.46785 -2.44568 0.829633 -0.259951 0.4941 + 0.508266 2.4779 -2.45579 0.964536 0.124737 0.232619 + 0.447121 2.34366 -2.51467 0.0649277 -0.718758 0.692222 + 0.466709 2.24227 -2.62943 0.525797 -0.602265 0.600678 + 0.484332 2.25592 -2.64186 0.718824 -0.487143 0.495967 + 0.505944 2.2722 -2.65711 0.720384 -0.483322 0.49744 + 0.513374 2.38669 -2.55241 0.843805 -0.375318 0.383574 + 0.422429 2.34527 -2.51972 -0.298634 -0.675886 0.673792 + 0.415673 2.23704 -2.6301 -0.297262 -0.667155 0.683037 + 0.440365 2.23543 -2.62505 0.0485824 -0.705731 0.706812 + 0.467083 2.11724 -2.75126 0.491269 -0.589695 0.641026 + 0.418756 2.44069 -2.42749 -0.521748 -0.469846 0.712056 + 0.405496 2.34923 -2.52628 -0.515754 -0.591516 0.619763 + 0.389712 2.24311 -2.64016 -0.518166 -0.584775 0.624133 + 0.404898 2.11274 -2.75421 -0.301854 -0.655118 0.692607 + 0.44074 2.1104 -2.74687 0.0485278 -0.686716 0.725304 + 0.408173 2.44566 -2.43429 -0.639148 -0.393146 0.661004 + 0.387829 2.35752 -2.53764 -0.639941 -0.516836 0.568644 + 0.372046 2.2514 -2.65151 -0.639663 -0.51484 0.570763 + 0.353293 2.13085 -2.78075 -0.640012 -0.516908 0.568498 + 0.378937 2.1188 -2.76427 -0.518318 -0.581978 0.626616 + 0.398907 2.45053 -2.44081 -0.703453 -0.33624 0.626176 + 0.378564 2.36239 -2.54416 -0.707258 -0.463217 0.534056 + 0.357841 2.25887 -2.66151 -0.707496 -0.462841 0.534066 + 0.339088 2.13831 -2.79074 -0.707264 -0.468092 0.529781 + 0.348721 2.04813 -2.86213 -0.637327 -0.536612 0.553048 + 0.395605 2.45286 -2.44378 -0.853254 -0.153287 0.498458 + 0.373052 2.36627 -2.54911 -0.874014 -0.271512 0.402965 + 0.35233 2.26275 -2.66646 -0.911269 -0.221579 0.347118 + 0.331088 2.14395 -2.79793 -0.914335 -0.230114 0.333224 + 0.39199 2.4607 -2.45278 -0.939377 0.0621389 0.337209 + 0.369437 2.37412 -2.55811 -0.970159 -0.0588267 0.235225 + 0.350354 2.27359 -2.679 -0.988654 -0.0142267 0.149537 + 0.329112 2.15478 -2.81047 -0.989325 0.145438 -0.00917028 + 0.323182 2.06213 -2.88232 -0.909419 -0.276355 0.310781 + 0.389873 2.47013 -2.4633 -0.952587 0.195578 0.233081 + 0.365904 2.38986 -2.57567 -0.989218 0.0809957 0.122012 + 0.346821 2.28933 -2.69655 -0.996135 0.0796166 0.0371043 + 0.338253 2.17287 -2.83091 -0.96365 0.236449 -0.12438 + 0.391312 2.48349 -2.47758 -0.926958 0.357549 0.113613 + 0.367343 2.40322 -2.58996 -0.970324 0.241592 -0.0101971 + 0.352711 2.30859 -2.71715 -0.966257 0.23593 -0.103361 + 0.395585 2.49407 -2.48847 -0.823625 0.565355 -0.0449006 + 0.374474 2.42088 -2.60813 -0.864413 0.465584 -0.189794 + 0.359842 2.32626 -2.73533 -0.881861 0.405688 -0.240289 + 0.354964 2.21767 -2.87772 -0.87871 0.389522 -0.275936 + 0.344143 2.19213 -2.8515 -0.967179 0.219972 -0.127186 + 0.4286 2.5258 -2.42033 -0.448167 0.85458 0.262371 + 0.405817 2.50282 -2.49657 -0.495462 0.826531 -0.26714 + 0.384707 2.42964 -2.61623 -0.523026 0.74259 -0.418334 + 0.374997 2.33978 -2.74793 -0.533984 0.69952 -0.474903 + 0.439661 2.52833 -2.42158 -0.060127 0.98191 0.179549 + 0.416879 2.50535 -2.49781 -0.149029 0.915236 -0.374344 + 0.403171 2.43386 -2.61831 -0.139572 0.840839 -0.522982 + 0.393462 2.34401 -2.75001 -0.150557 0.809282 -0.567799 + 0.451048 2.52741 -2.41903 0.0862815 0.974705 0.20617 + 0.443246 2.50551 -2.4944 0.2101 0.889036 -0.406784 + 0.431859 2.50643 -2.49695 0.0612857 0.912063 -0.405445 + 0.418151 2.43494 -2.61744 0.0754965 0.839603 -0.537929 + 0.467152 2.52407 -2.41326 0.203434 0.952476 0.226723 + 0.477694 2.49933 -2.48308 0.363639 0.848718 -0.383985 + 0.461591 2.50266 -2.48885 0.290495 0.869365 -0.399772 + 0.437159 2.43339 -2.6132 0.234317 0.814669 -0.53048 + 0.500131 2.49158 -2.47168 0.702651 0.676885 -0.219334 + 0.493119 2.4949 -2.47621 0.490724 0.802906 -0.338426 + 0.482385 2.42499 -2.59801 0.391382 0.770999 -0.502375 + 0.455504 2.43055 -2.60765 0.314064 0.794766 -0.519337 + 0.506193 2.48478 -2.46351 0.887714 0.459374 -0.0306559 + 0.509514 2.41502 -2.58358 0.737313 0.580051 -0.346281 + 0.49781 2.42055 -2.59114 0.517101 0.720842 -0.461512 + 0.486967 2.33492 -2.72754 0.398478 0.75318 -0.523389 + 0.460086 2.34048 -2.73717 0.317193 0.776348 -0.544676 + 0.519036 2.39674 -2.56253 0.993684 -0.0101844 0.111755 + 0.515576 2.40822 -2.57542 0.924382 0.345337 -0.16205 + 0.520503 2.32296 -2.7101 0.751029 0.560399 -0.349153 + 0.508799 2.32849 -2.71765 0.526003 0.703496 -0.477927 + 0.500465 2.22725 -2.86843 0.396569 0.765459 -0.50676 + 0.532252 2.30126 -2.68505 0.993247 -0.00113793 0.116011 + 0.528792 2.31274 -2.69794 0.933213 0.325278 -0.152669 + 0.536884 2.21329 -2.84844 0.761954 0.561361 -0.322955 + 0.522297 2.22082 -2.85854 0.540792 0.707033 -0.455685 + 0.523567 2.28586 -2.66954 0.841516 -0.361218 0.401712 + 0.548581 2.18674 -2.81815 0.988053 -0.00889096 0.153856 + 0.545174 2.20307 -2.83628 0.940753 0.317705 -0.118523 + 0.550205 2.14953 -2.93546 0.797245 0.555925 -0.235262 + 0.515912 2.15119 -2.78403 0.733084 -0.447089 0.512542 + 0.539896 2.17133 -2.80264 0.852708 -0.322727 0.410776 + 0.564027 2.1075 -2.90947 0.982603 0.031333 0.183055 + 0.56062 2.12383 -2.92759 0.95932 0.282243 0.00663171 + 0.4943 2.13491 -2.76878 0.695511 -0.475713 0.538481 + 0.529129 2.06217 -2.87472 0.728156 -0.392582 0.561843 + 0.553113 2.08232 -2.89334 0.840567 -0.272223 0.46834 + 0.579471 2.04438 -2.96402 0.957588 0.00358822 0.28812 + 0.474962 2.02784 -2.83569 0.482724 -0.523383 0.702173 + 0.502179 2.0455 -2.85321 0.693874 -0.417087 0.587007 + 0.540257 2.00477 -2.92293 0.710967 -0.324395 0.623934 + 0.568557 2.0192 -2.94789 0.820231 -0.21499 0.530094 + 0.442331 2.02299 -2.82772 0.0282829 -0.643783 0.764685 + 0.485006 1.97367 -2.87647 0.486894 -0.450797 0.748142 + 0.513307 1.9881 -2.90143 0.712533 -0.309086 0.629891 + 0.550425 1.95592 -2.95582 0.743826 -0.15307 0.65061 + 0.578725 1.97035 -2.98078 0.83414 -0.22848 0.502003 + 0.40649 2.02533 -2.83506 -0.314874 -0.633726 0.706573 + 0.413213 1.9792 -2.87175 -0.323645 -0.632704 0.703519 + 0.452376 1.96882 -2.8685 0.0186772 -0.625472 0.780023 + 0.374365 2.03609 -2.84565 -0.534402 -0.578503 0.616237 + 0.381088 1.98997 -2.88234 -0.538388 -0.578161 0.613082 + 0.383209 1.9579 -2.91144 -0.527345 -0.593125 0.608367 + 0.422761 1.94126 -2.90427 -0.30955 -0.658637 0.685839 + 0.461924 1.93088 -2.90102 -0.0944718 -0.667806 0.738316 + 0.353237 2.00827 -2.89763 -0.647689 -0.53793 0.539565 + 0.355358 1.9762 -2.92673 -0.649371 -0.530818 0.544563 + 0.352138 1.95325 -2.95268 -0.631407 -0.639341 0.438826 + 0.383672 1.93857 -2.92968 -0.518595 -0.686122 0.510193 + 0.423224 1.92193 -2.92251 -0.317513 -0.759529 0.567715 + 0.331183 2.05649 -2.87513 -0.706079 -0.494343 0.507028 + 0.335699 2.01663 -2.91063 -0.659364 -0.528935 0.534291 + 0.338162 1.98742 -2.93632 -0.653415 -0.528365 0.542106 + 0.327041 2.0141 -2.92366 -0.856837 -0.37716 0.35154 + 0.329504 1.9849 -2.94935 -0.831056 -0.389802 0.396738 + 0.334942 1.96447 -2.96227 -0.730143 -0.552643 0.401842 + 0.332421 1.93045 -3.03725 -0.718248 -0.64155 0.269319 + 0.362896 1.9105 -3.02897 -0.571065 -0.761074 0.307656 + 0.319993 2.06227 -2.90625 -0.998576 0.0508423 -0.0161631 + 0.323851 2.01424 -2.94759 -0.966206 -0.201075 0.161291 + 0.324871 1.97717 -2.97205 -0.932115 -0.277305 0.232944 + 0.33031 1.95675 -2.98498 -0.735857 -0.599684 0.314473 + 0.329134 2.08035 -2.92669 -0.959403 0.242602 -0.143843 + 0.318612 1.99359 -3.00267 -0.999245 0.0363079 -0.0137993 + 0.319632 1.95652 -3.02713 -0.968928 -0.224482 0.103861 + 0.321743 1.93023 -3.0794 -0.917648 -0.357241 0.174069 + 0.33575 2.09382 -2.95921 -0.96425 0.231084 -0.129701 + 0.325227 2.00706 -3.03519 -0.974958 0.191433 -0.113185 + 0.319477 1.95721 -3.08768 -0.992596 0.121279 -0.00670317 + 0.346571 2.11936 -2.98543 -0.896873 0.358838 -0.258561 + 0.336966 2.03794 -3.06353 -0.903769 0.351223 -0.244631 + 0.331216 1.98809 -3.11602 -0.900398 0.373777 -0.222653 + 0.31549 1.94111 -3.11592 -0.991997 0.111723 -0.0588171 + 0.370119 2.2312 -2.89033 -0.561163 0.658409 -0.501592 + 0.365615 2.14594 -2.99574 -0.599545 0.630378 -0.493122 + 0.356011 2.06451 -3.07384 -0.731845 0.533857 -0.423555 + 0.356933 2.02515 -3.1269 -0.755486 0.545516 -0.362839 + 0.332328 1.97298 -3.14368 -0.881472 0.379587 -0.280928 + 0.39432 2.23788 -2.89427 -0.174521 0.77983 -0.601172 + 0.389817 2.15261 -2.99969 -0.318464 0.754588 -0.57374 + 0.385427 2.10769 -3.0566 -0.480978 0.6926 -0.537555 + 0.386349 2.06833 -3.10966 -0.585664 0.671772 -0.453564 + 0.358045 2.01003 -3.15456 -0.72638 0.554229 -0.406451 + 0.414973 2.34596 -2.7492 0.0685461 0.815429 -0.574785 + 0.415832 2.23983 -2.89347 0.0498165 0.803606 -0.593073 + 0.41685 2.17391 -2.9878 -0.174051 0.838852 -0.515785 + 0.41246 2.12899 -3.04471 -0.394787 0.756238 -0.521774 + 0.422268 2.10312 -3.09402 -0.485888 0.743637 -0.459256 + 0.433981 2.34442 -2.74496 0.236487 0.794435 -0.559416 + 0.440204 2.23825 -2.88846 0.227816 0.793079 -0.564912 + 0.441222 2.17234 -2.98279 0.0827411 0.927144 -0.365455 + 0.442603 2.16591 -3.01543 -0.122953 0.890915 -0.43721 + 0.452411 2.14003 -3.06474 -0.129889 0.862102 -0.489805 + 0.466308 2.23432 -2.88067 0.308979 0.784427 -0.53778 + 0.474026 2.17723 -2.96733 0.186901 0.909097 -0.372305 + 0.475407 2.1708 -2.99997 0.145123 0.932714 -0.330127 + 0.491183 2.14407 -3.04 0.2971 0.83821 -0.457314 + 0.508183 2.17016 -2.95508 0.396365 0.860939 -0.31887 + 0.517952 2.16209 -2.98466 0.415619 0.867041 -0.274773 + 0.533728 2.13537 -3.02469 0.551186 0.717458 -0.425968 + 0.535618 2.15706 -2.94556 0.588208 0.759652 -0.277381 + 0.545387 2.14899 -2.97514 0.68128 0.705538 -0.195127 + 0.560378 2.11072 -3.00768 0.780776 0.558476 -0.280166 + 0.560011 2.0791 -3.06445 0.704083 0.595278 -0.387184 + 0.563837 2.11988 -2.97473 0.880972 0.46392 -0.0930985 + 0.578828 2.08162 -3.00726 0.888715 0.348437 -0.297956 + 0.58911 2.02254 -3.02881 0.981821 0.180999 0.0571482 + 0.586662 2.05445 -3.04743 0.916753 0.393011 -0.0714607 + 0.574252 2.09419 -2.96686 0.967748 0.246266 0.0530802 + 0.584399 2.04968 -2.99969 0.984454 0.156511 0.0797096 + 0.59468 1.9906 -3.02123 0.984021 0.0671062 0.16492 + 0.609711 1.92795 -3.07071 0.9743 0.0797177 0.210678 + 0.608203 1.94353 -3.09701 0.982589 0.178461 0.0516783 + 0.589618 1.99987 -2.99685 0.959156 -0.0248068 0.281788 + 0.590847 1.97369 -3.01281 0.935666 -0.10425 0.337136 + 0.605878 1.91104 -3.06229 0.94264 -0.00330866 0.333796 + 0.579954 1.94416 -2.99674 0.878459 -0.0938714 0.468506 + 0.599692 1.88911 -3.03888 0.926364 -0.0041942 0.376605 + 0.627189 1.83308 -3.12642 0.971195 -0.0175188 0.237643 + 0.637013 1.84059 -3.16702 0.993609 0.0480325 0.102144 + 0.635505 1.85617 -3.19331 0.945681 0.271976 -0.178088 + 0.563295 1.90724 -2.96866 0.79862 -0.0668863 0.598108 + 0.583033 1.85218 -3.0108 0.697145 -0.29103 0.655202 + 0.621003 1.81115 -3.103 0.979705 0.033747 0.197582 + 0.626607 1.77943 -3.14516 0.914192 -0.396809 0.0824398 + 0.630666 1.78308 -3.1656 0.897543 -0.42347 0.122837 + 0.527606 1.94638 -2.93211 0.717319 -0.119366 0.686443 + 0.540477 1.89771 -2.94495 0.664981 -0.153377 0.730941 + 0.499306 1.93196 -2.90716 0.678483 -0.214103 0.702724 + 0.49686 1.91642 -2.91029 0.20049 -0.56045 0.803554 + 0.538031 1.88218 -2.94808 0.386241 -0.607282 0.694281 + 0.517822 1.88427 -2.94465 -0.076252 -0.809571 0.582048 + 0.520296 1.84983 -3.0054 -0.128805 -0.891481 0.434363 + 0.540505 1.84774 -3.00883 -0.0731721 -0.843703 0.5318 + 0.567529 1.8399 -3.00697 0.059863 -0.39891 0.915034 + 0.615499 1.81139 -3.06392 0.900657 -0.0611883 0.430202 + 0.482886 1.89872 -2.93538 -0.190985 -0.81101 0.55298 + 0.489461 1.86738 -2.9882 -0.241588 -0.863665 0.442401 + 0.494123 1.80604 -3.11798 -0.344642 -0.862688 0.370123 + 0.535155 1.79806 -3.09115 -0.357319 -0.827483 0.433123 + 0.562179 1.79022 -3.08929 -0.236796 -0.861985 0.44823 + 0.4298 1.89059 -2.97533 -0.349195 -0.83856 0.418186 + 0.463288 1.82359 -3.10077 -0.342999 -0.86568 0.364622 + 0.441853 1.79071 -3.20774 -0.421799 -0.8487 0.319051 + 0.460883 1.78007 -3.21531 -0.294596 -0.916755 0.269766 + 0.489767 1.77749 -3.19558 -0.305673 -0.914792 0.264043 + 0.39443 1.89582 -3.00597 -0.50588 -0.795311 0.334016 + 0.427918 1.82882 -3.13141 -0.46362 -0.823519 0.326915 + 0.38913 1.81069 -3.24081 -0.522032 -0.800828 0.293527 + 0.422959 1.78291 -3.25752 -0.456297 -0.884217 0.0997665 + 0.441989 1.77227 -3.2651 -0.359205 -0.933256 0.00197763 + 0.375195 1.84879 -3.16449 -0.540362 -0.784873 0.303287 + 0.370069 1.81839 -3.25511 -0.711498 -0.68577 0.153266 + 0.403898 1.79062 -3.27181 -0.513455 -0.833937 -0.20227 + 0.428375 1.79264 -3.29734 -0.471256 -0.709989 -0.523292 + 0.449073 1.77638 -3.29447 -0.381119 -0.814187 -0.438004 + 0.34472 1.86875 -3.17277 -0.687105 -0.696643 0.206338 + 0.351296 1.8498 -3.23371 -0.90718 -0.414301 -0.073333 + 0.361202 1.8383 -3.26571 -0.969213 -0.231546 0.0837408 + 0.365609 1.82155 -3.26492 -0.826156 -0.558216 -0.0765548 + 0.390086 1.82357 -3.29044 -0.540085 -0.644964 -0.540675 + 0.317757 1.91413 -3.10763 -0.770193 -0.558397 0.308213 + 0.324332 1.89519 -3.16858 -0.943974 -0.319444 -0.0828771 + 0.351306 1.87401 -3.26118 -0.94511 -0.0207816 -0.326092 + 0.361212 1.86251 -3.29318 -0.892142 0.0802041 -0.444579 + 0.356741 1.84146 -3.27553 -0.99919 -0.0183303 0.0358235 + 0.320957 1.92094 -3.15613 -0.975908 0.0775768 -0.203923 + 0.347931 1.89976 -3.24873 -0.881531 0.20285 -0.426328 + 0.368483 1.91092 -3.27321 -0.711821 0.444313 -0.543964 + 0.376611 1.90614 -3.28625 -0.598068 0.486209 -0.637114 + 0.36934 1.85773 -3.30622 -0.807147 0.00516891 -0.590328 + 0.337794 1.95281 -3.18389 -0.860206 0.35781 -0.363342 + 0.358347 1.96397 -3.20837 -0.697123 0.514911 -0.498885 + 0.403222 2.00625 -3.21301 -0.48681 0.639599 -0.59492 + 0.420566 1.99496 -3.23476 -0.182199 0.653628 -0.734558 + 0.393954 1.89485 -3.30799 -0.404817 0.51302 -0.756924 + 0.40292 2.05232 -3.15919 -0.535239 0.676635 -0.505652 + 0.438839 2.08711 -3.14356 -0.24278 0.770125 -0.589886 + 0.449139 2.01008 -3.21974 0.0836736 0.6568 -0.749408 + 0.419538 1.88293 -3.32336 0.0169297 0.440701 -0.897494 + 0.478081 2.10392 -3.12291 0.145707 0.789356 -0.596395 + 0.48838 2.02688 -3.19909 0.254254 0.645091 -0.720564 + 0.488365 1.88292 -3.30753 0.289611 0.449635 -0.844958 + 0.448111 1.89804 -3.30834 0.176563 0.512221 -0.840509 + 0.516853 2.10795 -3.09817 0.495025 0.750287 -0.4382 + 0.532964 2.02054 -3.17856 0.572164 0.556786 -0.602178 + 0.576123 1.99168 -3.14484 0.703388 0.52433 -0.47992 + 0.532948 1.87658 -3.28699 0.413036 0.489111 -0.768226 + 0.525308 1.79846 -3.32774 0.30126 -0.271825 -0.913977 + 0.48922 1.79653 -3.33282 0.0262133 -0.390716 -0.920138 + 0.468522 1.81279 -3.33568 -0.0195938 -0.163252 -0.98639 + 0.605755 1.97545 -3.11563 0.922118 0.340633 -0.183487 + 0.58863 1.87838 -3.26006 0.557067 0.501212 -0.662165 + 0.58099 1.80027 -3.30081 0.535555 -0.220468 -0.815215 + 0.618263 1.86215 -3.23085 0.821617 0.357311 -0.444155 + 0.613937 1.79682 -3.27088 0.738998 -0.26562 -0.619134 + 0.554822 1.76938 -3.27247 0.177147 -0.900383 -0.397404 + 0.508423 1.77416 -3.29543 0.099608 -0.91513 -0.390661 + 0.472335 1.77223 -3.30051 -0.106219 -0.892306 -0.438757 + 0.631179 1.79085 -3.23334 0.853445 -0.369386 -0.367675 + 0.600238 1.76109 -3.21029 0.423074 -0.874949 -0.235527 + 0.587769 1.76593 -3.24254 0.35698 -0.865769 -0.350725 + 0.568169 1.7545 -3.21518 -0.03959 -0.991969 -0.120124 + 0.540533 1.76076 -3.22843 -0.135904 -0.989401 -0.0511395 + 0.640489 1.7906 -3.20621 0.94394 -0.289701 -0.158275 + 0.609548 1.76084 -3.18315 0.552403 -0.829464 -0.0827067 + 0.580638 1.74965 -3.18292 -0.0528003 -0.998467 0.0166281 + 0.558435 1.76325 -3.1555 -0.301912 -0.9153 0.2666 + 0.530799 1.76951 -3.16875 -0.317559 -0.917524 0.239387 + 0.605489 1.75718 -3.16271 0.458868 -0.884725 0.0818619 + 0.595239 1.75722 -3.15073 0.0709899 -0.954808 0.288621 + 0.573037 1.77082 -3.12331 -0.225378 -0.896046 0.382501 + 0.624255 1.77598 -3.12444 0.803737 -0.542336 0.244699 + 0.614004 1.77602 -3.11247 0.525441 -0.773302 0.354846 + 0.610853 1.77971 -3.09411 0.476413 -0.775423 0.414428 + 0.599995 1.7991 -3.06009 0.234117 -0.753126 0.614809 + 0.618651 1.8077 -3.08228 0.976578 -0.0944165 0.19334 + 0.494135 1.76554 -3.25139 -0.107306 -0.994213 0.00500804 + 0.465251 1.76812 -3.27113 -0.132568 -0.990637 -0.0326267 + 0.428268 1.82792 -3.3365 -0.176466 -0.290291 -0.940527 + 0.406468 1.84413 -3.33754 -0.302134 -0.164667 -0.938936 + 0.368286 1.83979 -3.29148 -0.655701 -0.550843 -0.516361 + 0.380884 1.85606 -3.32217 -0.653746 -0.0107272 -0.756638 + -0.557574 1.95467 -2.75219 0.90941 -0.0278976 0.414965 + -0.591195 1.94736 -2.68493 0.685719 -0.153302 0.711539 + -0.582635 1.9028 -2.69995 0.672119 -0.0751704 0.736618 + -0.576773 2.03351 -2.69323 0.87722 -0.209859 0.431792 + -0.603725 2.00268 -2.66108 0.651073 -0.313118 0.691419 + -0.65083 1.99416 -2.64194 0.100098 -0.505881 0.856776 + -0.6383 1.93884 -2.66579 0.086709 -0.348989 0.933107 + -0.6215 1.87741 -2.6876 0.125868 -0.266063 0.955703 + -0.549014 1.91012 -2.7672 0.94613 -0.00324097 0.323771 + -0.540029 1.95215 -2.79381 0.986923 0.106444 0.121046 + -0.559228 2.03099 -2.73484 0.984424 0.10089 0.14398 + -0.582231 2.12162 -2.61887 0.942312 -0.202078 0.266856 + -0.563942 1.87344 -2.71651 0.785614 -0.0785967 0.613705 + -0.560132 1.84076 -2.74265 0.891084 -0.336763 0.304238 + -0.545204 1.87744 -2.79335 0.959721 -0.112755 0.257337 + -0.536207 1.89321 -2.82428 0.998619 0.00428827 0.0523511 + -0.542424 1.9554 -2.81462 0.959283 0.232865 -0.159846 + -0.602807 1.84804 -2.70416 0.37489 -0.240105 0.895437 + -0.593886 1.81248 -2.71632 0.563545 -0.436019 0.701644 + -0.584623 1.81375 -2.72933 0.732246 -0.52654 0.431938 + -0.578252 1.79374 -2.78086 0.756421 -0.565337 0.328971 + -0.648715 1.7972 -2.70334 -0.0223477 -0.185469 0.982396 + -0.639794 1.76164 -2.7155 0.426045 -0.565836 0.705915 + -0.641574 1.74647 -2.75072 0.591306 -0.75103 0.293787 + -0.632311 1.74775 -2.76373 0.544872 -0.76406 0.345435 + -0.602743 1.76674 -2.76753 0.651479 -0.677267 0.341884 + -0.698685 1.85599 -2.71767 -0.362385 -0.180903 0.914304 + -0.731885 1.82353 -2.72971 -0.430119 -0.0689101 0.900138 + -0.681915 1.76474 -2.71539 -0.276162 -0.262936 0.924446 + -0.665852 1.74009 -2.72235 0.138845 -0.690283 0.710093 + -0.715485 1.91742 -2.69586 -0.347155 -0.423126 0.836927 + -0.777419 1.86789 -2.75917 -0.645701 -0.160296 0.746576 + -0.753448 1.83334 -2.74042 -0.543407 -0.0223325 0.839172 + -0.71418 1.75095 -2.73674 -0.490167 -0.397708 0.775606 + -0.698117 1.7263 -2.7437 -0.140991 -0.713704 0.686111 + -0.701491 2.01968 -2.63472 -0.302852 -0.519986 0.798683 + -0.745543 2.03331 -2.65112 -0.626794 -0.376569 0.682148 + -0.759537 1.93105 -2.71226 -0.604477 -0.351736 0.714765 + -0.644579 2.08591 -2.57095 0.0991367 -0.646994 0.756023 + -0.69524 2.11143 -2.56373 -0.36146 -0.588378 0.723296 + -0.727539 2.12957 -2.57257 -0.646524 -0.442853 0.621198 + -0.767489 2.04796 -2.67431 -0.822872 -0.221839 0.523134 + -0.785949 1.96684 -2.73182 -0.822726 -0.198455 0.53267 + -0.609183 2.09079 -2.58673 0.652594 -0.501539 0.567962 + -0.637776 2.19722 -2.46583 0.0609133 -0.678577 0.731999 + -0.678501 2.20954 -2.46987 -0.381566 -0.599171 0.703847 + -0.7108 2.22767 -2.47871 -0.678731 -0.43337 0.592887 + -0.749485 2.14421 -2.59576 -0.834976 -0.264766 0.482405 + -0.579138 2.22859 -2.5094 0.945477 -0.24025 0.219893 + -0.60238 2.20209 -2.48161 0.654067 -0.534983 0.53478 + -0.625194 2.30896 -2.36457 0.0832905 -0.657513 0.748825 + -0.66592 2.32128 -2.36861 -0.40161 -0.578409 0.710037 + -0.688934 2.3344 -2.37654 -0.691224 -0.413747 0.592472 + -0.576987 2.15463 -2.65067 0.994317 0.0949441 -0.0481533 + -0.573893 2.2616 -2.54119 0.996191 0.0534127 -0.0689259 + -0.572847 2.36653 -2.42594 0.996661 0.0662524 -0.0477294 + -0.576804 2.3416 -2.40205 0.947136 -0.219572 0.233928 + -0.600047 2.3151 -2.37426 0.659253 -0.51116 0.551454 + -0.570883 2.07068 -2.72723 0.939214 0.290662 -0.182735 + -0.592754 2.19486 -2.6868 0.910156 0.29793 -0.287845 + -0.587346 2.29606 -2.5723 0.914533 0.287886 -0.284168 + -0.5863 2.40099 -2.45705 0.913618 0.30641 -0.267237 + -0.55408 1.99509 -2.80701 0.929924 0.321134 -0.179204 + -0.58665 2.11092 -2.76336 0.89976 0.35383 -0.255412 + -0.616992 2.12624 -2.81177 0.640275 0.582698 -0.500511 + -0.612134 2.21989 -2.70614 0.683011 0.530756 -0.50179 + -0.606726 2.32109 -2.59164 0.683378 0.538591 -0.492863 + -0.554558 1.92862 -2.88943 0.907005 0.299255 -0.29629 + -0.562318 1.98001 -2.854 0.879112 0.354949 -0.318079 + -0.594889 2.09583 -2.81035 0.814339 0.455069 -0.360227 + -0.538602 1.89646 -2.8451 0.984215 0.0743721 -0.160589 + -0.545167 1.89124 -2.8865 0.976989 0.0944499 -0.191237 + -0.563849 1.89026 -2.95209 0.880184 0.282394 -0.381485 + -0.596077 1.95895 -2.95063 0.791354 0.433904 -0.430681 + -0.603837 2.01035 -2.9152 0.772773 0.443957 -0.453568 + -0.537723 1.8242 -2.8348 0.979183 -0.201119 -0.0274185 + -0.545798 1.83268 -2.864 0.965192 -0.126982 -0.228648 + -0.552363 1.82746 -2.9054 0.962773 -0.238395 -0.127421 + -0.554457 1.85289 -2.94916 0.960343 0.0362309 -0.276455 + -0.579126 1.88838 -2.98191 0.799307 0.300351 -0.520478 + -0.54672 1.80842 -2.80386 0.821386 -0.380042 0.425316 + -0.573284 1.75936 -2.86084 0.702268 -0.700419 0.127406 + -0.563727 1.77151 -2.88367 0.86613 -0.47246 -0.163098 + -0.571803 1.77999 -2.91288 0.890954 -0.373242 -0.258636 + -0.604816 1.74469 -2.83784 0.602023 -0.760474 0.243409 + -0.634648 1.70481 -2.92819 0.710141 -0.703781 -0.0198286 + -0.630071 1.71904 -2.9497 0.762702 -0.632085 -0.136945 + -0.620515 1.73118 -2.97252 0.726169 -0.685072 -0.0579214 + -0.626104 1.73156 -2.82037 0.59418 -0.774158 0.218241 + -0.655936 1.69168 -2.91072 0.531648 -0.826498 0.185071 + -0.67741 1.66562 -2.96674 0.566761 -0.812379 0.137197 + -0.667234 1.67281 -2.98919 0.737882 -0.66847 -0.093157 + -0.662657 1.68703 -3.01069 0.783699 -0.620388 -0.0305707 + -0.655672 1.71257 -2.81656 0.470155 -0.84746 0.246507 + -0.675411 1.68708 -2.88916 0.442259 -0.864809 0.237724 + -0.696884 1.66102 -2.94518 0.535717 -0.821316 0.196078 + -0.71439 1.63416 -3.0018 0.491678 -0.868581 -0.0618075 + -0.704214 1.64134 -3.02425 0.455574 -0.85629 -0.243353 + -0.691288 1.70242 -2.79813 0.336486 -0.896316 0.288783 + -0.711027 1.67694 -2.87073 0.396841 -0.86886 0.295971 + -0.720272 1.65889 -2.90357 0.518363 -0.781804 0.34653 + -0.712321 1.65017 -2.94006 0.613486 -0.759573 0.216065 + -0.667632 1.72493 -2.75756 0.432372 -0.860979 0.267899 + -0.68558 1.71445 -2.77081 0.232079 -0.886915 0.399401 + -0.743351 1.68614 -2.80264 0.0837186 -0.904358 0.418483 + -0.752385 1.67622 -2.81787 0.157499 -0.854919 0.494275 + -0.761631 1.65818 -2.8507 0.301615 -0.858643 0.414439 + -0.716065 1.71582 -2.75695 -0.0793514 -0.659711 0.747318 + -0.737643 1.69816 -2.77531 -0.0770784 -0.786541 0.612709 + -0.774219 1.69796 -2.79495 -0.531175 -0.531719 0.659642 + -0.783253 1.68804 -2.81018 -0.542748 -0.546194 0.638041 + -0.781818 1.65907 -2.84148 -0.312299 -0.809132 0.497771 + -0.735743 1.76076 -2.74744 -0.500528 -0.249321 0.829042 + -0.737034 1.73069 -2.75591 -0.343014 -0.309937 0.886724 + -0.758612 1.71303 -2.77428 -0.513006 -0.381767 0.768817 + -0.785062 1.75884 -2.78734 -0.785536 -0.170354 0.594906 + -0.768164 1.80399 -2.7582 -0.650416 -0.165031 0.741433 + -0.769455 1.77391 -2.76666 -0.644992 -0.187123 0.740926 + -0.792135 1.83855 -2.77695 -0.776888 -0.126564 0.616787 + -0.805177 1.78506 -2.81554 -0.85547 -0.142984 0.497721 + -0.802457 1.69142 -2.83538 -0.822484 -0.344203 0.452818 + -0.803831 1.90368 -2.77872 -0.843747 -0.114244 0.524443 + -0.82819 1.86377 -2.8299 -0.897452 -0.0935231 0.431085 + -0.841232 1.81029 -2.8685 -0.94383 -0.0815744 0.320205 + -0.822571 1.71764 -2.86359 -0.906432 -0.243485 0.345104 + -0.819798 1.9372 -2.81047 -0.911377 -0.0355782 0.410032 + -0.844157 1.89729 -2.86166 -0.978818 0.0351742 0.201689 + -0.849986 1.82833 -2.91261 -0.999344 -0.00411076 0.0359906 + -0.836928 1.73303 -2.90586 -0.958848 -0.221468 0.177658 + -0.801696 1.99261 -2.7507 -0.90194 -0.118134 0.415389 + -0.827717 1.9709 -2.82736 -0.974883 0.101854 0.198061 + -0.837639 1.93666 -2.89927 -0.983112 0.166995 -0.0748587 + -0.843468 1.8677 -2.95023 -0.957006 0.163848 -0.23936 + -0.845683 1.75107 -2.94998 -0.990866 -0.124945 -0.0507323 + -0.783236 2.07373 -2.69319 -0.907264 -0.114002 0.404816 + -0.809615 2.02631 -2.76759 -0.969992 0.0729852 0.231922 + -0.820122 2.0107 -2.8405 -0.963493 0.266953 0.0204414 + -0.830043 1.97645 -2.91241 -0.939583 0.28446 -0.190437 + -0.82513 1.87171 -2.99403 -0.880289 0.188788 -0.43526 + -0.762063 2.1617 -2.61279 -0.916748 -0.142246 0.373283 + -0.789946 2.09269 -2.7091 -0.973877 0.0676066 0.216778 + -0.786084 2.12532 -2.73327 -0.969274 0.245629 0.0131943 + -0.805753 2.05895 -2.79176 -0.964472 0.262928 0.0257243 + -0.801246 2.05817 -2.875 -0.883436 0.4276 -0.191569 + -0.73924 2.26522 -2.5111 -0.919386 -0.153615 0.362121 + -0.768773 2.18065 -2.6287 -0.980017 0.0452351 0.193705 + -0.766666 2.2036 -2.64979 -0.973657 0.227875 0.00802571 + -0.774881 2.15574 -2.76266 -0.888346 0.424037 -0.176162 + -0.786876 2.10642 -2.82626 -0.87499 0.449723 -0.179282 + -0.726663 2.24773 -2.49406 -0.854989 -0.255992 0.451067 + -0.714466 2.36952 -2.40378 -0.917555 -0.155807 0.36581 + -0.745029 2.28153 -2.5248 -0.981192 0.0368969 0.189472 + -0.742922 2.30448 -2.54589 -0.973479 0.22872 0.00503501 + -0.755463 2.23402 -2.67918 -0.889083 0.417508 -0.187666 + -0.704796 2.35446 -2.39188 -0.851793 -0.2565 0.456789 + -0.689272 2.47895 -2.29452 -0.88547 -0.0613379 0.460631 + -0.720255 2.38584 -2.41748 -0.98056 0.0410558 0.191874 + -0.718676 2.4032 -2.43332 -0.972384 0.232999 0.0134098 + -0.733201 2.33058 -2.57124 -0.889196 0.418412 -0.185099 + -0.666223 2.45027 -2.27264 -0.622171 -0.331825 0.709081 + -0.679602 2.46388 -2.28262 -0.78906 -0.196564 0.58202 + -0.654271 2.5352 -2.24488 -0.455756 0.357844 0.815006 + -0.692919 2.48925 -2.30308 -0.947203 0.126682 0.294547 + -0.69134 2.50661 -2.31892 -0.939614 0.322157 0.115499 + -0.643209 2.43715 -2.26472 -0.356077 -0.448493 0.819795 + -0.640891 2.52159 -2.2349 -0.260414 0.183163 0.947964 + -0.618804 2.5151 -2.23258 0.297855 0.0935705 0.950014 + -0.657918 2.5455 -2.25344 -0.535416 0.559567 0.632625 + -0.621121 2.43066 -2.2624 0.0927458 -0.506198 0.857416 + -0.595973 2.4368 -2.27209 0.659874 -0.359071 0.660026 + -0.60427 2.53197 -2.24989 0.686074 0.447887 0.573324 + -0.581439 2.45367 -2.28939 0.926129 -0.10229 0.363074 + -0.577483 2.4786 -2.31328 0.982456 0.175701 0.0625236 + -0.612769 2.55385 -2.26927 0.579746 0.771434 0.262266 + -0.585982 2.50048 -2.33267 0.907511 0.394451 -0.144336 + -0.600589 2.51935 -2.34722 0.685012 0.64206 -0.344264 + -0.626817 2.56116 -2.27229 0.302716 0.924591 0.231287 + -0.600907 2.41987 -2.4716 0.688193 0.554461 -0.467935 + -0.614638 2.52666 -2.35024 0.424 0.789962 -0.442926 + -0.632574 2.5333 -2.35231 0.268719 0.841433 -0.468808 + -0.640409 2.56396 -2.27254 0.0596477 0.97778 0.200968 + -0.623337 2.43172 -2.47629 0.407308 0.705702 -0.579729 + -0.641273 2.43835 -2.47837 0.25651 0.753121 -0.605815 + -0.646166 2.5361 -2.35256 0.0847524 0.876576 -0.473741 + -0.662438 2.53685 -2.3505 -0.14152 0.88569 -0.442181 + -0.651889 2.56221 -2.26917 -0.387354 0.864684 0.319811 + -0.629155 2.33295 -2.59633 0.403918 0.687019 -0.604033 + -0.652948 2.34175 -2.59907 0.251386 0.733471 -0.631526 + -0.662951 2.44292 -2.47871 0.0652099 0.787272 -0.613149 + -0.679223 2.44367 -2.47664 -0.159763 0.792598 -0.588442 + -0.673919 2.5351 -2.34713 -0.543304 0.784142 -0.299902 + -0.638004 2.23347 -2.71156 0.40011 0.677521 -0.617153 + -0.661796 2.24227 -2.7143 0.249581 0.721971 -0.645343 + -0.686989 2.24749 -2.71481 0.054629 0.756829 -0.651326 + -0.674625 2.34631 -2.59941 0.0535402 0.765986 -0.640624 + -0.642862 2.13981 -2.8172 0.385694 0.674261 -0.629772 + -0.66832 2.15902 -2.80953 0.242971 0.707254 -0.663895 + -0.693513 2.16424 -2.81003 0.132661 0.751706 -0.646017 + -0.72417 2.17647 -2.79772 -0.114863 0.784211 -0.60977 + -0.71035 2.24921 -2.71041 -0.172622 0.764017 -0.621675 + -0.62594 2.04075 -2.91662 0.397854 0.662912 -0.63424 + -0.639089 2.05134 -2.90518 0.132592 0.706807 -0.694869 + -0.664548 2.07055 -2.8975 0.317957 0.664696 -0.676079 + -0.70217 2.11799 -2.87233 0.243338 0.723504 -0.646009 + -0.732827 2.13022 -2.86002 -0.129863 0.763007 -0.633211 + -0.633091 1.98217 -2.98009 0.398518 0.645396 -0.65165 + -0.64624 1.99277 -2.96864 0.10887 0.734336 -0.669999 + -0.680429 2.01413 -2.95621 0.179709 0.67802 -0.712736 + -0.718051 2.06157 -2.93104 0.0714772 0.661859 -0.746213 + -0.611355 1.95708 -2.98045 0.686247 0.487926 -0.539438 + -0.637404 1.9462 -3.00835 0.390239 0.518796 -0.760634 + -0.665356 1.96838 -3.00144 0.167982 0.623371 -0.763669 + -0.699545 1.98975 -2.98901 0.0575373 0.688263 -0.723176 + -0.757578 1.995 -2.9828 -0.113592 0.618749 -0.777333 + -0.615668 1.92111 -3.00871 0.640755 0.393981 -0.658947 + -0.628382 1.87494 -3.04685 0.629016 0.354429 -0.691895 + -0.646766 1.88913 -3.04918 0.31548 0.484313 -0.816035 + -0.674717 1.9113 -3.04227 0.106511 0.542112 -0.833529 + -0.713644 1.91231 -3.04069 -0.0536119 0.528878 -0.847003 + -0.574841 1.84957 -2.99428 0.824434 0.14509 -0.547044 + -0.611383 1.8823 -3.02108 0.746249 0.255239 -0.614789 + -0.62545 1.80917 -3.06735 0.936792 0.0537605 -0.345732 + -0.628602 1.80548 -3.08571 0.778873 0.208287 -0.591586 + -0.646986 1.81966 -3.08803 0.348425 0.41703 -0.839456 + -0.55886 1.83319 -2.95833 0.945288 -0.186222 -0.267866 + -0.579244 1.82987 -3.00346 0.830313 0.0130896 -0.557144 + -0.608451 1.81652 -3.04159 0.812581 0.0343134 -0.581838 + -0.607899 1.78621 -3.03232 0.857571 -0.192391 -0.477029 + -0.626676 1.77042 -3.0709 0.961313 -0.107693 -0.253534 + -0.572194 1.79384 -2.94126 0.894994 -0.406265 -0.184213 + -0.578691 1.79957 -2.99419 0.878506 -0.321653 -0.353223 + -0.610714 1.75622 -3.01849 0.876862 -0.376808 -0.298544 + -0.629491 1.74042 -3.05707 0.936372 -0.288158 -0.200432 + -0.610323 1.74237 -2.99011 0.809745 -0.573259 -0.125249 + -0.636893 1.71667 -3.04421 0.852395 -0.520264 -0.0524109 + -0.641123 1.70815 -3.06481 0.771026 -0.547568 -0.325098 + -0.633721 1.73191 -3.07768 0.839998 -0.379005 -0.388276 + -0.629827 1.76674 -3.08925 0.889746 -0.119215 -0.440614 + -0.647085 1.70548 -3.02662 0.774087 -0.632234 0.0327205 + -0.653828 1.68914 -3.05635 0.674865 -0.680502 -0.285437 + -0.679261 1.69753 -3.08295 0.288505 -0.608058 -0.739615 + -0.666556 1.71654 -3.09141 0.342584 -0.569633 -0.747097 + -0.648761 1.73238 -3.09523 0.525446 -0.498374 -0.689587 + -0.6694 1.6707 -3.04041 0.632742 -0.757309 -0.16162 + -0.701236 1.67604 -3.07083 0.246896 -0.672 -0.698182 + -0.732385 1.72797 -3.10979 -0.219813 -0.267371 -0.938187 + -0.70419 1.74452 -3.12064 -0.0828964 -0.259953 -0.962057 + -0.686395 1.76035 -3.12446 0.0478373 -0.00262665 -0.998852 + -0.73605 1.64668 -3.05466 0.0382262 -0.790154 -0.611715 + -0.766549 1.68541 -3.08471 -0.385052 -0.464277 -0.79761 + -0.75436 1.70648 -3.09767 -0.287688 -0.315132 -0.904393 + -0.755636 1.79727 -3.09326 -0.47889 0.233674 -0.846204 + -0.754643 1.63341 -3.02767 -0.260362 -0.905142 -0.33605 + -0.785142 1.67213 -3.05771 -0.629832 -0.526763 -0.570818 + -0.80043 1.74889 -3.06583 -0.778712 -0.051527 -0.625262 + -0.788241 1.76996 -3.0788 -0.651549 0.0998846 -0.752002 + -0.729827 1.62331 -2.99668 0.236524 -0.960203 -0.148551 + -0.763973 1.63233 -2.97724 -0.466552 -0.881515 -0.0725268 + -0.803181 1.67052 -3.02929 -0.767807 -0.537371 -0.348862 + -0.818469 1.74728 -3.03741 -0.880974 -0.0545623 -0.470009 + -0.739157 1.62223 -2.94625 0.183848 -0.972274 0.144513 + -0.781466 1.64126 -2.93816 -0.550098 -0.835065 -0.0076684 + -0.820674 1.67945 -2.99021 -0.837698 -0.513628 -0.185605 + -0.836807 1.74327 -2.9936 -0.949727 -0.10786 -0.293914 + -0.747108 1.63095 -2.90975 0.264774 -0.925529 0.270724 + -0.767295 1.63184 -2.90053 -0.227959 -0.959113 0.167738 + -0.815193 1.67187 -2.90431 -0.815049 -0.566475 0.121658 + -0.82955 1.68726 -2.94658 -0.883619 -0.468202 0.0022076 + -0.801022 1.66245 -2.86669 -0.738001 -0.621782 0.262185 + -0.804283 1.89025 -3.02002 -0.731289 0.281872 -0.6211 + -0.815445 1.98414 -2.93955 -0.832256 0.392559 -0.391469 + -0.794598 2.00269 -2.96554 -0.595379 0.579553 -0.556455 + -0.771678 1.91756 -3.03448 -0.339907 0.451845 -0.824802 + -0.786647 2.06586 -2.90214 -0.595149 0.568378 -0.568105 + -0.755071 2.06926 -2.91379 -0.285953 0.661055 -0.693713 + -0.764403 2.12682 -2.84837 -0.553939 0.681562 -0.478148 + -0.752407 2.17614 -2.78478 -0.557694 0.691893 -0.458542 + -0.738588 2.24888 -2.69747 -0.570708 0.670019 -0.474729 + -0.716326 2.34544 -2.58953 -0.562853 0.677362 -0.473685 + -0.697987 2.34803 -2.59502 -0.175162 0.768317 -0.615635 + -0.697562 2.44109 -2.47116 -0.580256 0.688482 -0.43508 + -0.708955 2.4293 -2.45867 -0.894523 0.417737 -0.159138 + -0.685311 2.52331 -2.33464 -0.863245 0.503124 -0.0409141 + -0.727441 1.81382 -3.10411 -0.29665 0.377363 -0.877266 + -0.688514 1.81281 -3.10569 0.112141 0.401656 -0.908899 + -0.644867 1.76721 -3.1068 0.547638 -0.0186949 -0.836507 + 0.549014 1.91012 -2.7672 -0.984284 0.12032 0.12926 + 0.582635 1.9028 -2.69995 -0.669006 -0.0734864 0.739615 + 0.591195 1.94736 -2.68493 -0.698662 -0.123012 0.704797 + 0.563942 1.87344 -2.71651 -0.776688 -0.12469 0.617421 + 0.602807 1.84804 -2.70416 -0.311947 -0.272558 0.910165 + 0.6215 1.87741 -2.6876 -0.0889264 -0.375767 0.922438 + 0.6383 1.93884 -2.66579 -0.103685 -0.360115 0.927128 + 0.557574 1.95467 -2.75219 -0.913303 -0.0406652 0.405246 + 0.545204 1.87744 -2.79335 -0.96965 -0.0373939 0.241621 + 0.560132 1.84076 -2.74265 -0.841935 -0.30809 0.442974 + 0.603725 2.00268 -2.66108 -0.672136 -0.324644 0.665462 + 0.576773 2.03351 -2.69323 -0.918948 -0.116325 0.376832 + 0.559228 2.03099 -2.73484 -0.970389 0.146713 0.191889 + 0.540029 1.95215 -2.79381 -0.986709 0.0598402 0.151075 + 0.536207 1.89321 -2.82428 -0.998262 0.00129864 0.0589168 + 0.65083 1.99416 -2.64194 -0.131342 -0.47987 0.867453 + 0.609183 2.09079 -2.58673 -0.652399 -0.501865 0.567897 + 0.582231 2.12162 -2.61887 -0.947589 -0.207469 0.242964 + 0.576987 2.15463 -2.65067 -0.995985 0.0730764 -0.0517066 + 0.570883 2.07068 -2.72723 -0.983129 0.181351 0.0238725 + 0.701491 2.01968 -2.63472 0.305489 -0.515511 0.800578 + 0.69524 2.11143 -2.56373 0.354199 -0.584732 0.729816 + 0.644579 2.08591 -2.57095 -0.098464 -0.645845 0.757093 + 0.60238 2.20209 -2.48161 -0.653687 -0.534556 0.53567 + 0.715485 1.91742 -2.69586 0.341287 -0.418115 0.841845 + 0.759537 1.93105 -2.71226 0.616324 -0.306288 0.725488 + 0.745543 2.03331 -2.65112 0.6294 -0.378401 0.678726 + 0.727539 2.12957 -2.57257 0.650472 -0.43314 0.623921 + 0.678501 2.20954 -2.46987 0.379118 -0.603495 0.701472 + 0.698685 1.85599 -2.71767 0.237737 -0.204068 0.949651 + 0.648715 1.7972 -2.70334 0.0146635 -0.118088 0.992895 + 0.681915 1.76474 -2.71539 0.284735 -0.261406 0.922276 + 0.731885 1.82353 -2.72971 0.407925 -0.172844 0.896505 + 0.593886 1.81248 -2.71632 -0.636707 -0.339494 0.69235 + 0.639794 1.76164 -2.7155 -0.437006 -0.565265 0.699643 + 0.665852 1.74009 -2.72235 -0.13692 -0.695432 0.705427 + 0.71418 1.75095 -2.73674 0.426291 -0.320638 0.845853 + 0.584623 1.81375 -2.72933 -0.737073 -0.444665 0.508918 + 0.641574 1.74647 -2.75072 -0.598462 -0.737459 0.313046 + 0.667632 1.72493 -2.75756 -0.378946 -0.860555 0.34036 + 0.698117 1.7263 -2.7437 0.100129 -0.720514 0.686173 + 0.602743 1.76674 -2.76753 -0.641636 -0.673453 0.367103 + 0.632311 1.74775 -2.76373 -0.561822 -0.751114 0.346674 + 0.655672 1.71257 -2.81656 -0.47005 -0.85029 0.236769 + 0.68558 1.71445 -2.77081 -0.266447 -0.888021 0.374733 + 0.578252 1.79374 -2.78086 -0.701199 -0.630529 0.332796 + 0.604816 1.74469 -2.83784 -0.611485 -0.767432 0.192702 + 0.626104 1.73156 -2.82037 -0.58202 -0.783918 0.216158 + 0.54672 1.80842 -2.80386 -0.851015 -0.441567 0.284241 + 0.573284 1.75936 -2.86084 -0.673664 -0.729542 0.118091 + 0.630071 1.71904 -2.9497 -0.768607 -0.631468 -0.102424 + 0.634648 1.70481 -2.92819 -0.762872 -0.646528 -0.00526637 + 0.655936 1.69168 -2.91072 -0.534027 -0.828216 0.169922 + 0.537723 1.8242 -2.8348 -0.982672 -0.182463 -0.0325847 + 0.563727 1.77151 -2.88367 -0.866779 -0.471762 -0.161659 + 0.620515 1.73118 -2.97252 -0.703479 -0.70778 -0.0645406 + 0.647085 1.70548 -3.02662 -0.77346 -0.632644 0.0389986 + 0.662657 1.68703 -3.01069 -0.783826 -0.620231 -0.0305102 + 0.545798 1.83268 -2.864 -0.9674 -0.121431 -0.222243 + 0.571803 1.77999 -2.91288 -0.920957 -0.288673 -0.261737 + 0.610323 1.74237 -2.99011 -0.805913 -0.573224 -0.148047 + 0.636893 1.71667 -3.04421 -0.863633 -0.50186 -0.0476784 + 0.538602 1.89646 -2.8451 -0.989077 0.042865 -0.141026 + 0.545167 1.89124 -2.8865 -0.976249 0.0934415 -0.195463 + 0.552363 1.82746 -2.9054 -0.955981 -0.270213 -0.114393 + 0.572194 1.79384 -2.94126 -0.894126 -0.406437 -0.188011 + 0.542424 1.9554 -2.81462 -0.952158 0.243726 -0.18437 + 0.55408 1.99509 -2.80701 -0.930638 0.316891 -0.18301 + 0.562318 1.98001 -2.854 -0.88973 0.335911 -0.309103 + 0.554558 1.92862 -2.88943 -0.917363 0.300563 -0.260974 + 0.554457 1.85289 -2.94916 -0.961892 0.0318981 -0.271561 + 0.58665 2.11092 -2.76336 -0.934307 0.28971 -0.207698 + 0.594889 2.09583 -2.81035 -0.819504 0.428236 -0.380825 + 0.603837 2.01035 -2.9152 -0.781359 0.446163 -0.436367 + 0.596077 1.95895 -2.95063 -0.817915 0.401187 -0.412389 + 0.563849 1.89026 -2.95209 -0.880828 0.289969 -0.374245 + 0.592754 2.19486 -2.6868 -0.913407 0.300285 -0.274802 + 0.612134 2.21989 -2.70614 -0.678529 0.540584 -0.497361 + 0.616992 2.12624 -2.81177 -0.597247 0.583082 -0.550738 + 0.62594 2.04075 -2.91662 -0.393634 0.675562 -0.623432 + 0.611355 1.95708 -2.98045 -0.686796 0.451121 -0.569913 + 0.573893 2.2616 -2.54119 -0.996181 0.0533981 -0.0690851 + 0.587346 2.29606 -2.5723 -0.914569 0.287738 -0.284201 + 0.606726 2.32109 -2.59164 -0.683334 0.538572 -0.492945 + 0.638004 2.23347 -2.71156 -0.400008 0.677465 -0.61728 + 0.642862 2.13981 -2.8172 -0.390747 0.666457 -0.634943 + 0.579138 2.22859 -2.5094 -0.945474 -0.240265 0.219892 + 0.576804 2.3416 -2.40205 -0.947163 -0.219598 0.233795 + 0.572847 2.36653 -2.42594 -0.996664 0.066203 -0.0477373 + 0.5863 2.40099 -2.45705 -0.913605 0.306404 -0.267288 + 0.600907 2.41987 -2.4716 -0.688218 0.554409 -0.46796 + 0.600047 2.3151 -2.37426 -0.658353 -0.512858 0.550951 + 0.595973 2.4368 -2.27209 -0.659755 -0.35898 0.660195 + 0.581439 2.45367 -2.28939 -0.926143 -0.102081 0.363096 + 0.577483 2.4786 -2.31328 -0.98245 0.175707 0.0625927 + 0.637776 2.19722 -2.46583 -0.0590804 -0.68011 0.730725 + 0.625194 2.30896 -2.36457 -0.0842026 -0.658642 0.74773 + 0.621121 2.43066 -2.2624 -0.0928065 -0.506128 0.857451 + 0.618804 2.5151 -2.23258 -0.297719 0.0939191 0.950022 + 0.60427 2.53197 -2.24989 -0.682101 0.452262 0.574628 + 0.66592 2.32128 -2.36861 0.399618 -0.577219 0.712126 + 0.643209 2.43715 -2.26472 0.356109 -0.44842 0.819821 + 0.640891 2.52159 -2.2349 0.258997 0.189058 0.947195 + 0.612769 2.55385 -2.26927 -0.575663 0.772802 0.267189 + 0.585982 2.50048 -2.33267 -0.907487 0.394512 -0.144316 + 0.7108 2.22767 -2.47871 0.683211 -0.435451 0.586178 + 0.688934 2.3344 -2.37654 0.690992 -0.414727 0.592057 + 0.666223 2.45027 -2.27264 0.618234 -0.329916 0.713402 + 0.654271 2.5352 -2.24488 0.44901 0.363471 0.816259 + 0.726663 2.24773 -2.49406 0.85417 -0.260787 0.449872 + 0.704796 2.35446 -2.39188 0.853745 -0.257361 0.452642 + 0.679602 2.46388 -2.28262 0.78958 -0.191073 0.583142 + 0.689272 2.47895 -2.29452 0.885445 -0.0613291 0.46068 + 0.657918 2.5455 -2.25344 0.530299 0.561257 0.635432 + 0.749485 2.14421 -2.59576 0.833167 -0.263514 0.486202 + 0.762063 2.1617 -2.61279 0.916813 -0.141575 0.373377 + 0.73924 2.26522 -2.5111 0.919297 -0.153564 0.362369 + 0.714466 2.36952 -2.40378 0.91753 -0.156153 0.365726 + 0.692919 2.48925 -2.30308 0.947193 0.126733 0.294556 + 0.767489 2.04796 -2.67431 0.822472 -0.223583 0.523021 + 0.783236 2.07373 -2.69319 0.907812 -0.114247 0.403515 + 0.768773 2.18065 -2.6287 0.980203 0.0451205 0.192783 + 0.745029 2.28153 -2.5248 0.981188 0.0369572 0.189486 + 0.720255 2.38584 -2.41748 0.980578 0.0410447 0.191788 + 0.785949 1.96684 -2.73182 0.809728 -0.195122 0.553414 + 0.801696 1.99261 -2.7507 0.902906 -0.0985288 0.418394 + 0.789946 2.09269 -2.7091 0.973876 0.0675064 0.216816 + 0.786084 2.12532 -2.73327 0.969087 0.245989 0.0189807 + 0.766666 2.2036 -2.64979 0.973806 0.227241 0.00792497 + 0.777419 1.86789 -2.75917 0.7657 -0.163234 0.62214 + 0.803831 1.90368 -2.77872 0.839231 -0.163904 0.518485 + 0.819798 1.9372 -2.81047 0.941424 -0.0259053 0.33623 + 0.809615 2.02631 -2.76759 0.968965 0.072907 0.2362 + 0.805753 2.05895 -2.79176 0.964401 0.263179 0.0258432 + 0.753448 1.83334 -2.74042 0.612595 -0.195606 0.765811 + 0.792135 1.83855 -2.77695 0.787746 -0.0899971 0.609391 + 0.82819 1.86377 -2.8299 0.877799 -0.0868702 0.471087 + 0.844157 1.89729 -2.86166 0.971741 0.107343 0.21023 + 0.735743 1.76076 -2.74744 0.525423 -0.207513 0.825148 + 0.768164 1.80399 -2.7582 0.676137 -0.174936 0.715706 + 0.805177 1.78506 -2.81554 0.850898 -0.147504 0.504197 + 0.841232 1.81029 -2.8685 0.931471 -0.147372 0.33263 + 0.737034 1.73069 -2.75591 0.424886 -0.34653 0.836295 + 0.769455 1.77391 -2.76666 0.680699 -0.161788 0.714474 + 0.785062 1.75884 -2.78734 0.789779 -0.118538 0.601829 + 0.822571 1.71764 -2.86359 0.923573 -0.185293 0.335677 + 0.836928 1.73303 -2.90586 0.955423 -0.207571 0.209954 + 0.716065 1.71582 -2.75695 0.0695719 -0.699572 0.711167 + 0.737643 1.69816 -2.77531 0.140438 -0.800231 0.583016 + 0.758612 1.71303 -2.77428 0.504171 -0.442634 0.741543 + 0.774219 1.69796 -2.79495 0.499399 -0.534125 0.682137 + 0.802457 1.69142 -2.83538 0.819097 -0.342598 0.460116 + 0.691288 1.70242 -2.79813 -0.32445 -0.901512 0.28637 + 0.743351 1.68614 -2.80264 -0.0654722 -0.888995 0.453211 + 0.752385 1.67622 -2.81787 -0.157498 -0.854917 0.494279 + 0.783253 1.68804 -2.81018 0.550407 -0.533286 0.642385 + 0.711027 1.67694 -2.87073 -0.403975 -0.871298 0.278647 + 0.720272 1.65889 -2.90357 -0.547251 -0.764205 0.341331 + 0.761631 1.65818 -2.8507 -0.301597 -0.85865 0.414438 + 0.781818 1.65907 -2.84148 0.312298 -0.809132 0.49777 + 0.801022 1.66245 -2.86669 0.728979 -0.632091 0.262775 + 0.675411 1.68708 -2.88916 -0.408762 -0.884918 0.223233 + 0.696884 1.66102 -2.94518 -0.519993 -0.821012 0.235681 + 0.712321 1.65017 -2.94006 -0.632162 -0.737903 0.236368 + 0.747108 1.63095 -2.90975 -0.305723 -0.909531 0.28158 + 0.767295 1.63184 -2.90053 0.239336 -0.946983 0.214342 + 0.67741 1.66562 -2.96674 -0.582521 -0.80071 0.139761 + 0.71439 1.63416 -3.0018 -0.520992 -0.851917 -0.0529496 + 0.729827 1.62331 -2.99668 -0.225954 -0.969403 -0.0959314 + 0.739157 1.62223 -2.94625 -0.150652 -0.976093 0.156674 + 0.763973 1.63233 -2.97724 0.468076 -0.879589 -0.0850188 + 0.667234 1.67281 -2.98919 -0.738943 -0.668196 -0.0864664 + 0.704214 1.64134 -3.02425 -0.434164 -0.867534 -0.242663 + 0.73605 1.64668 -3.05466 -0.0408443 -0.788118 -0.614167 + 0.754643 1.63341 -3.02767 0.346965 -0.87892 -0.327283 + 0.6694 1.6707 -3.04041 -0.633511 -0.754661 -0.170739 + 0.701236 1.67604 -3.07083 -0.254173 -0.670281 -0.697223 + 0.75436 1.70648 -3.09767 0.287692 -0.323204 -0.901539 + 0.766549 1.68541 -3.08471 0.384265 -0.464444 -0.797893 + 0.785142 1.67213 -3.05771 0.634145 -0.548943 -0.544538 + 0.653828 1.68914 -3.05635 -0.659393 -0.693103 -0.291219 + 0.679261 1.69753 -3.08295 -0.293756 -0.630656 -0.718318 + 0.732385 1.72797 -3.10979 0.219546 -0.268859 -0.937824 + 0.788241 1.76996 -3.0788 0.658577 0.10265 -0.745479 + 0.80043 1.74889 -3.06583 0.779611 -0.0495978 -0.624297 + 0.641123 1.70815 -3.06481 -0.770568 -0.551637 -0.319251 + 0.666556 1.71654 -3.09141 -0.350205 -0.56881 -0.744185 + 0.70419 1.74452 -3.12064 0.0900232 -0.266866 -0.95952 + 0.727441 1.81382 -3.10411 0.255883 0.342015 -0.904184 + 0.755636 1.79727 -3.09326 0.492668 0.197896 -0.847417 + 0.629491 1.74042 -3.05707 -0.936978 -0.289343 -0.195839 + 0.633721 1.73191 -3.07768 -0.86158 -0.346916 -0.37058 + 0.648761 1.73238 -3.09523 -0.517603 -0.456057 -0.723946 + 0.686395 1.76035 -3.12446 -0.126139 -0.0451415 -0.990985 + 0.610714 1.75622 -3.01849 -0.892413 -0.349026 -0.285971 + 0.626676 1.77042 -3.0709 -0.958337 -0.117576 -0.260318 + 0.629827 1.76674 -3.08925 -0.878585 -0.0664066 -0.472946 + 0.644867 1.76721 -3.1068 -0.57333 0.0117399 -0.81924 + 0.607899 1.78621 -3.03232 -0.885647 -0.220565 -0.408632 + 0.608451 1.81652 -3.04159 -0.820529 0.0580835 -0.568646 + 0.62545 1.80917 -3.06735 -0.925097 0.0770647 -0.371829 + 0.628602 1.80548 -3.08571 -0.71194 0.141799 -0.687775 + 0.646986 1.81966 -3.08803 -0.368301 0.385008 -0.84624 + 0.578691 1.79957 -2.99419 -0.810243 -0.480429 -0.3357 + 0.579244 1.82987 -3.00346 -0.830311 0.0130861 -0.557146 + 0.611383 1.8823 -3.02108 -0.746254 0.255242 -0.614782 + 0.628382 1.87494 -3.04685 -0.628016 0.358793 -0.690553 + 0.646766 1.88913 -3.04918 -0.337487 0.493804 -0.801411 + 0.55886 1.83319 -2.95833 -0.945288 -0.186223 -0.267866 + 0.574841 1.84957 -2.99428 -0.822734 0.141529 -0.550526 + 0.579126 1.88838 -2.98191 -0.792407 0.308772 -0.526072 + 0.615668 1.92111 -3.00871 -0.635237 0.39336 -0.664637 + 0.633091 1.98217 -2.98009 -0.362506 0.645152 -0.672584 + 0.637404 1.9462 -3.00835 -0.390901 0.516721 -0.761706 + 0.674717 1.9113 -3.04227 -0.100272 0.552101 -0.827726 + 0.688514 1.81281 -3.10569 -0.129446 0.42285 -0.896907 + 0.64624 1.99277 -2.96864 -0.106922 0.737932 -0.666351 + 0.665356 1.96838 -3.00144 -0.156582 0.619203 -0.76946 + 0.713644 1.91231 -3.04069 0.0249015 0.554894 -0.831549 + 0.771678 1.91756 -3.03448 0.394279 0.500449 -0.770776 + 0.639089 2.05134 -2.90518 -0.176378 0.719694 -0.671514 + 0.680429 2.01413 -2.95621 -0.274626 0.678414 -0.681421 + 0.699545 1.98975 -2.98901 -0.0893502 0.632676 -0.769244 + 0.757578 1.995 -2.9828 0.176583 0.578985 -0.795986 + 0.804283 1.89025 -3.02002 0.724997 0.299677 -0.620139 + 0.66832 2.15902 -2.80953 -0.265073 0.720217 -0.641111 + 0.664548 2.07055 -2.8975 -0.321556 0.655354 -0.683456 + 0.718051 2.06157 -2.93104 -0.0644764 0.685328 -0.725374 + 0.755071 2.06926 -2.91379 0.232986 0.696261 -0.678925 + 0.794598 2.00269 -2.96554 0.567044 0.521304 -0.637733 + 0.661796 2.24227 -2.7143 -0.249679 0.721832 -0.64546 + 0.693513 2.16424 -2.81003 -0.115482 0.772102 -0.624918 + 0.70217 2.11799 -2.87233 -0.180041 0.710531 -0.680244 + 0.732827 2.13022 -2.86002 0.126589 0.755794 -0.642457 + 0.786647 2.06586 -2.90214 0.613934 0.613305 -0.496933 + 0.652948 2.34175 -2.59907 -0.251377 0.733465 -0.631537 + 0.674625 2.34631 -2.59941 -0.0533376 0.766246 -0.640329 + 0.686989 2.24749 -2.71481 -0.0489092 0.75303 -0.656166 + 0.71035 2.24921 -2.71041 0.169442 0.760574 -0.626751 + 0.72417 2.17647 -2.79772 0.11058 0.786538 -0.607561 + 0.629155 2.33295 -2.59633 -0.403955 0.686956 -0.604079 + 0.641273 2.43835 -2.47837 -0.256526 0.753098 -0.605836 + 0.662951 2.44292 -2.47871 -0.0646949 0.786927 -0.613645 + 0.697987 2.34803 -2.59502 0.174809 0.768606 -0.615374 + 0.623337 2.43172 -2.47629 -0.407274 0.705687 -0.57977 + 0.632574 2.5333 -2.35231 -0.268762 0.84145 -0.468751 + 0.646166 2.5361 -2.35256 -0.0847157 0.876607 -0.473691 + 0.662438 2.53685 -2.3505 0.141376 0.885775 -0.442058 + 0.679223 2.44367 -2.47664 0.159384 0.792206 -0.589072 + 0.600589 2.51935 -2.34722 -0.685051 0.642073 -0.344162 + 0.614638 2.52666 -2.35024 -0.42396 0.790017 -0.442867 + 0.626817 2.56116 -2.27229 -0.287078 0.912462 0.291545 + 0.640409 2.56396 -2.27254 -0.0666836 0.972072 0.225009 + 0.651889 2.56221 -2.26917 0.380173 0.865309 0.326663 + 0.673919 2.5351 -2.34713 0.543364 0.784178 -0.299702 + 0.697562 2.44109 -2.47116 0.581835 0.686478 -0.436137 + 0.716326 2.34544 -2.58953 0.56339 0.677932 -0.472228 + 0.738588 2.24888 -2.69747 0.571243 0.669361 -0.475013 + 0.69134 2.50661 -2.31892 0.93955 0.322188 0.11593 + 0.685311 2.52331 -2.33464 0.863028 0.503507 -0.040793 + 0.708955 2.4293 -2.45867 0.894238 0.417316 -0.16182 + 0.733201 2.33058 -2.57124 0.888569 0.419915 -0.184707 + 0.718676 2.4032 -2.43332 0.97246 0.232687 0.0133409 + 0.742922 2.30448 -2.54589 0.973484 0.228702 0.00487676 + 0.755463 2.23402 -2.67918 0.889004 0.417398 -0.188284 + 0.752407 2.17614 -2.78478 0.557229 0.691422 -0.459816 + 0.774881 2.15574 -2.76266 0.886149 0.428971 -0.17528 + 0.764403 2.12682 -2.84837 0.553754 0.681939 -0.477824 + 0.786876 2.10642 -2.82626 0.873886 0.449182 -0.185898 + 0.801246 2.05817 -2.875 0.881539 0.431406 -0.191777 + 0.815445 1.98414 -2.93955 0.865807 0.333068 -0.373422 + 0.82513 1.87171 -2.99403 0.87668 0.18386 -0.444553 + 0.820122 2.0107 -2.8405 0.963403 0.267659 0.0146105 + 0.830043 1.97645 -2.91241 0.942145 0.221111 -0.251937 + 0.837639 1.93666 -2.89927 0.981306 0.183179 -0.0590205 + 0.843468 1.8677 -2.95023 0.963375 0.135425 -0.231447 + 0.818469 1.74728 -3.03741 0.879163 -0.0480265 -0.474094 + 0.827717 1.9709 -2.82736 0.983188 0.0436214 0.177307 + 0.849986 1.82833 -2.91261 0.999864 -0.0122529 0.0110046 + 0.836807 1.74327 -2.9936 0.952236 -0.101471 -0.28801 + 0.845683 1.75107 -2.94998 0.99173 -0.115351 -0.0562623 + 0.82955 1.68726 -2.94658 0.888007 -0.45982 0.00279802 + 0.820674 1.67945 -2.99021 0.836294 -0.517847 -0.180129 + 0.803181 1.67052 -3.02929 0.726909 -0.581746 -0.364932 + 0.815193 1.67187 -2.90431 0.815013 -0.566879 0.120007 + 0.781466 1.64126 -2.93816 0.600422 -0.799324 -0.0239625 +} +TriangleList +{ + 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 88 + 92 93 94 + 95 96 94 + 97 98 99 + 100 101 102 + 103 104 105 + 3 106 107 + 108 109 110 + 111 112 113 + 114 115 116 + 117 118 119 + 120 21 121 + 122 123 124 + 125 126 127 + 128 129 130 + 131 132 133 + 134 135 136 + 137 138 139 + 140 97 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 30 + 246 247 248 + 249 250 251 + 252 253 254 + 255 256 257 + 258 259 260 + 259 258 261 + 261 262 259 + 262 261 263 + 262 263 264 + 264 265 262 + 265 264 266 + 267 268 269 + 269 268 270 + 270 271 269 + 269 271 272 + 273 269 272 + 274 269 273 + 270 268 275 + 275 276 270 + 277 270 276 + 270 277 271 + 271 277 278 + 278 279 271 + 271 279 272 + 280 275 268 + 225 275 280 + 268 281 280 + 282 278 277 + 283 278 282 + 278 283 279 + 279 283 284 + 279 284 272 + 282 285 283 + 286 283 285 + 283 286 284 + 285 282 287 + 287 288 285 + 285 288 289 + 289 290 285 + 285 290 286 + 287 282 291 + 291 292 287 + 293 291 282 + 294 289 288 + 288 295 294 + 296 294 295 + 295 297 296 + 298 296 297 + 299 296 298 + 296 299 300 + 301 295 288 + 295 301 302 + 302 297 295 + 297 302 303 + 303 304 297 + 297 304 298 + 288 287 301 + 305 301 287 + 302 301 305 + 305 306 302 + 302 306 307 + 307 303 302 + 308 303 307 + 304 303 308 + 309 305 287 + 310 305 309 + 305 310 306 + 306 310 311 + 311 307 306 + 307 311 312 + 312 313 307 + 307 313 308 + 314 309 287 + 315 309 314 + 309 315 316 + 309 316 310 + 311 310 316 + 317 311 316 + 312 311 317 + 287 318 314 + 319 314 318 + 320 314 319 + 314 320 315 + 315 320 321 + 321 322 315 + 316 315 322 + 322 323 316 + 316 323 317 + 318 324 319 + 325 319 324 + 326 319 325 + 319 326 320 + 320 326 327 + 327 321 320 + 328 321 327 + 321 328 329 + 329 322 321 + 324 330 325 + 331 325 330 + 332 325 331 + 325 332 326 + 327 326 332 + 332 333 327 + 334 327 333 + 327 334 328 + 330 335 331 + 336 331 335 + 337 331 336 + 331 337 332 + 332 337 338 + 338 333 332 + 339 333 338 + 336 340 337 + 338 337 340 + 340 336 226 + 333 341 334 + 342 334 341 + 328 334 342 + 342 343 328 + 328 343 344 + 344 329 328 + 345 329 344 + 322 329 345 + 345 323 322 + 346 343 342 + 343 346 347 + 347 344 343 + 344 347 348 + 348 349 344 + 344 349 345 + 342 350 346 + 346 350 351 + 351 352 346 + 346 352 353 + 353 347 346 + 348 347 353 + 350 342 354 + 354 355 350 + 350 355 356 + 356 351 350 + 357 351 356 + 352 351 357 + 358 354 342 + 359 354 358 + 355 354 359 + 359 360 355 + 355 360 361 + 361 356 355 + 356 361 362 + 356 362 357 + 358 363 359 + 359 363 364 + 364 365 359 + 360 359 365 + 365 366 360 + 361 360 366 + 366 367 361 + 362 361 367 + 367 368 362 + 362 368 369 + 370 364 363 + 363 371 370 + 340 370 371 + 371 363 372 + 373 374 375 + 374 373 376 + 376 377 374 + 374 377 378 + 373 379 376 + 376 379 380 + 381 376 380 + 379 373 382 + 383 379 382 + 380 379 384 + 385 377 376 + 386 387 388 + 388 387 389 + 389 390 388 + 388 390 391 + 389 387 392 + 392 393 389 + 393 394 389 + 389 394 390 + 390 394 395 + 395 396 390 + 390 396 397 + 387 398 392 + 399 392 398 + 399 393 392 + 393 399 400 + 400 401 393 + 394 393 401 + 402 394 401 + 398 387 403 + 404 398 403 + 405 398 404 + 398 405 399 + 399 405 406 + 406 400 399 + 400 406 407 + 408 400 407 + 400 408 401 + 408 409 401 + 401 409 402 + 409 410 402 + 404 411 405 + 405 411 412 + 412 406 405 + 411 404 413 + 404 414 413 + 414 415 413 + 413 415 416 + 416 417 413 + 413 417 418 + 419 414 404 + 415 414 419 + 419 420 415 + 421 419 404 + 422 421 404 + 423 417 416 + 416 424 423 + 423 424 425 + 425 426 423 + 425 427 426 + 427 425 428 + 428 429 427 + 424 416 430 + 430 431 424 + 425 424 431 + 431 432 425 + 432 428 425 + 433 430 416 + 433 434 430 + 434 435 430 + 431 430 435 + 431 435 436 + 436 437 431 + 438 437 436 + 433 439 434 + 434 439 440 + 440 441 434 + 434 441 442 + 435 434 442 + 439 433 443 + 443 444 439 + 439 444 445 + 440 439 445 + 445 446 440 + 447 440 446 + 440 447 441 + 441 447 448 + 448 449 441 + 441 449 442 + 444 419 445 + 419 450 445 + 445 450 451 + 445 451 452 + 452 446 445 + 453 446 452 + 446 453 447 + 448 447 453 + 454 419 444 + 452 451 455 + 451 450 456 + 456 388 451 + 451 388 457 + 428 432 458 + 459 428 458 + 428 459 460 + 460 429 428 + 429 460 461 + 460 462 461 + 462 460 463 + 460 459 464 + 464 463 460 + 465 463 464 + 464 466 465 + 464 459 467 + 416 415 468 + 416 468 469 + 408 407 470 + 471 470 407 + 470 471 472 + 472 473 470 + 474 470 473 + 475 474 473 + 474 475 476 + 407 477 471 + 471 477 478 + 471 478 479 + 472 471 479 + 477 407 480 + 478 481 479 + 395 482 396 + 396 482 380 + 380 483 396 + 484 485 486 + 485 484 487 + 487 488 485 + 489 488 487 + 489 487 490 + 490 224 489 + 276 224 490 + 224 276 275 + 275 491 224 + 490 487 492 + 277 490 492 + 276 490 277 + 493 494 495 + 496 493 495 + 497 496 495 + 498 496 497 + 496 498 499 + 499 500 496 + 501 496 500 + 502 497 495 + 497 502 503 + 498 497 503 + 499 498 503 + 503 504 499 + 505 499 504 + 500 499 505 + 500 505 506 + 506 507 500 + 500 507 508 + 509 503 502 + 503 509 510 + 510 504 503 + 504 510 511 + 504 511 505 + 502 512 509 + 509 512 466 + 512 513 466 + 514 515 364 + 364 515 516 + 516 365 364 + 366 365 516 + 516 517 366 + 366 517 518 + 518 367 366 + 516 515 519 + 519 520 516 + 517 516 520 + 520 521 517 + 518 517 521 + 521 522 518 + 523 518 522 + 367 518 523 + 523 368 367 + 524 519 515 + 519 524 525 + 525 526 519 + 519 526 527 + 527 520 519 + 521 520 527 + 515 528 524 + 529 524 528 + 525 524 529 + 529 530 525 + 531 525 530 + 526 525 531 + 531 532 526 + 526 532 533 + 527 526 533 + 528 534 529 + 535 529 534 + 529 535 536 + 536 530 529 + 530 536 537 + 537 538 530 + 530 538 531 + 539 531 538 + 532 531 539 + 534 540 535 + 540 534 340 + 340 534 541 + 541 179 340 + 542 543 544 + 544 545 542 + 542 545 546 + 546 547 542 + 548 542 547 + 549 542 548 + 548 308 549 + 545 544 550 + 550 551 545 + 546 545 551 + 551 552 546 + 553 546 552 + 553 547 546 + 550 544 554 + 554 555 550 + 556 550 555 + 550 556 557 + 557 551 550 + 551 557 558 + 558 552 551 + 559 554 544 + 559 560 554 + 554 560 561 + 561 555 554 + 555 561 562 + 562 563 555 + 555 563 556 + 544 564 559 + 308 548 304 + 304 548 565 + 565 298 304 + 566 298 565 + 298 566 299 + 567 299 566 + 568 299 567 + 547 565 548 + 569 565 547 + 565 569 566 + 566 569 570 + 570 571 566 + 566 571 567 + 572 567 571 + 573 567 572 + 567 573 568 + 568 573 574 + 547 553 569 + 570 569 553 + 575 570 553 + 576 570 575 + 570 576 577 + 577 571 570 + 571 577 572 + 553 578 575 + 579 575 578 + 575 579 580 + 575 580 576 + 581 576 580 + 577 576 581 + 581 582 577 + 572 577 582 + 552 578 553 + 558 578 552 + 578 558 579 + 579 558 583 + 584 579 583 + 585 579 584 + 579 585 580 + 580 585 586 + 586 587 580 + 580 587 581 + 558 557 583 + 588 583 557 + 583 588 589 + 583 589 590 + 590 591 583 + 583 591 584 + 557 556 588 + 592 588 556 + 589 588 592 + 592 593 589 + 589 593 594 + 590 589 594 + 594 595 590 + 596 590 595 + 591 590 596 + 556 563 592 + 597 592 563 + 592 597 593 + 593 597 598 + 598 594 593 + 594 598 599 + 594 599 600 + 600 595 594 + 563 562 597 + 598 597 562 + 562 601 598 + 595 600 96 + 96 602 595 + 595 602 596 + 603 596 602 + 591 596 603 + 603 584 591 + 604 584 603 + 584 604 585 + 602 96 140 + 140 605 602 + 602 605 603 + 606 603 605 + 603 606 604 + 604 606 607 + 607 608 604 + 585 604 608 + 608 586 585 + 605 140 609 + 609 610 605 + 605 610 606 + 607 606 610 + 610 611 607 + 612 607 611 + 607 612 613 + 613 608 607 + 609 140 614 + 614 615 609 + 616 609 615 + 610 609 616 + 616 611 610 + 611 616 617 + 617 618 611 + 611 618 612 + 614 140 619 + 620 621 622 + 621 620 623 + 623 228 621 + 228 623 624 + 625 623 620 + 626 627 228 + 228 627 536 + 536 535 228 + 228 535 628 + 536 627 629 + 629 537 536 + 630 537 629 + 538 537 630 + 630 631 538 + 538 631 539 + 632 629 627 + 629 632 633 + 627 624 632 + 632 624 634 + 634 635 632 + 633 632 635 + 636 634 624 + 637 634 636 + 634 637 638 + 638 635 634 + 635 638 639 + 639 640 635 + 635 640 633 + 624 623 636 + 641 636 623 + 642 636 641 + 636 642 637 + 637 642 643 + 643 644 637 + 637 644 645 + 645 638 637 + 639 638 645 + 646 641 623 + 647 641 646 + 647 648 641 + 641 648 642 + 643 642 648 + 649 643 648 + 650 643 649 + 644 643 650 + 274 646 623 + 273 646 274 + 651 646 273 + 646 651 647 + 651 652 647 + 652 653 647 + 648 647 653 + 653 654 648 + 648 654 655 + 655 649 648 + 651 273 656 + 656 652 651 + 657 652 656 + 652 657 658 + 658 659 652 + 656 273 272 + 660 656 272 + 657 656 660 + 660 661 657 + 657 661 658 + 661 662 658 + 654 658 662 + 658 654 653 + 663 660 272 + 664 660 663 + 664 661 660 + 662 661 664 + 665 662 664 + 662 665 666 + 662 666 654 + 667 663 272 + 668 663 667 + 668 669 663 + 663 669 664 + 664 669 665 + 669 670 665 + 671 665 670 + 272 672 667 + 673 667 672 + 673 674 667 + 667 674 668 + 668 674 675 + 675 676 668 + 676 677 668 + 678 672 272 + 678 679 672 + 672 679 673 + 272 680 678 + 681 678 680 + 678 681 682 + 679 678 682 + 673 679 682 + 574 680 272 + 680 574 573 + 573 683 680 + 680 683 684 + 684 681 680 + 685 681 684 + 682 681 685 + 574 272 284 + 284 686 574 + 574 686 687 + 687 688 574 + 665 689 666 + 572 683 573 + 683 572 690 + 690 684 683 + 684 690 691 + 691 692 684 + 684 692 685 + 693 685 692 + 682 685 693 + 693 694 682 + 682 694 673 + 582 690 572 + 691 690 582 + 582 695 691 + 691 695 696 + 696 697 691 + 692 691 697 + 697 698 692 + 692 698 693 + 695 582 581 + 581 699 695 + 695 699 700 + 700 696 695 + 701 696 700 + 696 701 702 + 702 697 696 + 698 697 702 + 699 581 587 + 587 703 699 + 700 699 703 + 703 704 700 + 705 700 704 + 700 705 701 + 701 705 706 + 706 707 701 + 702 701 707 + 708 703 587 + 703 708 709 + 709 704 703 + 704 709 710 + 710 711 704 + 704 711 705 + 706 705 711 + 587 586 708 + 708 586 608 + 608 613 708 + 708 613 712 + 712 709 708 + 710 709 712 + 712 713 710 + 710 713 714 + 714 715 710 + 711 710 715 + 716 712 613 + 713 712 716 + 716 717 713 + 713 717 718 + 718 714 713 + 719 714 718 + 714 719 720 + 720 715 714 + 613 612 716 + 716 612 618 + 618 721 716 + 717 716 721 + 721 722 717 + 717 722 723 + 723 718 717 + 719 718 723 + 723 724 719 + 720 719 724 + 725 721 618 + 721 725 726 + 726 722 721 + 722 726 727 + 727 728 722 + 722 728 723 + 618 617 725 + 725 617 729 + 729 730 725 + 726 725 730 + 730 731 726 + 727 726 731 + 731 732 727 + 733 727 732 + 728 727 733 + 734 729 617 + 735 729 734 + 729 735 736 + 736 730 729 + 730 736 737 + 737 731 730 + 731 737 738 + 738 732 731 + 617 616 734 + 615 734 616 + 739 734 615 + 734 739 735 + 735 739 740 + 740 741 735 + 735 741 742 + 742 736 735 + 737 736 742 + 615 743 739 + 740 739 743 + 743 744 740 + 745 740 744 + 741 740 745 + 745 746 741 + 741 746 747 + 747 742 741 + 743 615 614 + 614 748 743 + 743 748 749 + 749 744 743 + 744 749 750 + 750 751 744 + 744 751 745 + 748 614 752 + 752 753 748 + 749 748 753 + 753 754 749 + 750 749 754 + 95 752 614 + 755 752 95 + 753 752 755 + 755 756 753 + 753 756 757 + 757 754 753 + 754 757 758 + 754 758 750 + 95 759 755 + 755 759 760 + 761 755 760 + 756 755 761 + 761 762 756 + 757 756 762 + 763 757 762 + 758 757 763 + 764 759 95 + 761 765 762 + 762 765 766 + 766 767 762 + 762 767 763 + 768 763 767 + 763 768 769 + 763 769 758 + 750 758 769 + 770 750 769 + 751 750 770 + 771 766 765 + 772 766 771 + 767 766 772 + 767 772 768 + 773 768 772 + 769 768 773 + 773 774 769 + 769 774 775 + 775 770 769 + 776 771 765 + 777 677 676 + 676 778 777 + 779 777 778 + 778 676 780 + 778 780 781 + 781 782 778 + 778 782 783 + 783 784 778 + 784 779 778 + 780 676 675 + 675 785 780 + 780 785 786 + 781 780 786 + 787 781 786 + 788 781 787 + 788 782 781 + 782 788 789 + 789 783 782 + 675 790 785 + 785 790 791 + 791 792 785 + 785 792 786 + 790 675 674 + 674 673 790 + 791 790 673 + 694 791 673 + 793 791 694 + 791 793 792 + 792 793 794 + 794 795 792 + 792 795 786 + 694 796 793 + 794 793 796 + 796 797 794 + 798 794 797 + 794 798 795 + 795 798 799 + 799 800 795 + 795 800 786 + 796 694 693 + 693 801 796 + 796 801 802 + 802 797 796 + 803 797 802 + 797 803 798 + 799 798 803 + 803 804 799 + 805 799 804 + 799 805 800 + 801 693 698 + 698 806 801 + 802 801 806 + 807 802 806 + 802 807 804 + 803 802 804 + 702 806 698 + 806 702 808 + 808 809 806 + 806 809 807 + 810 807 809 + 807 810 811 + 811 804 807 + 804 811 805 + 812 805 811 + 800 805 812 + 812 786 800 + 707 808 702 + 813 808 707 + 809 808 813 + 813 814 809 + 809 814 810 + 815 810 814 + 811 810 815 + 815 816 811 + 811 816 812 + 817 812 816 + 812 817 786 + 707 818 813 + 813 818 819 + 819 820 813 + 814 813 820 + 820 821 814 + 814 821 815 + 818 707 706 + 818 706 822 + 822 819 818 + 823 819 822 + 819 823 824 + 824 820 819 + 821 820 824 + 824 825 821 + 821 825 826 + 826 815 821 + 822 706 711 + 711 827 822 + 828 822 827 + 822 828 823 + 823 828 829 + 829 830 823 + 824 823 830 + 830 831 824 + 825 824 831 + 715 827 711 + 827 715 720 + 720 832 827 + 827 832 828 + 829 828 832 + 832 833 829 + 834 829 833 + 829 834 835 + 835 830 829 + 830 835 836 + 836 831 830 + 832 720 837 + 837 833 832 + 833 837 838 + 838 839 833 + 833 839 834 + 840 834 839 + 835 834 840 + 840 841 835 + 836 835 841 + 724 837 720 + 838 837 724 + 724 842 838 + 838 842 843 + 843 844 838 + 839 838 844 + 844 845 839 + 839 845 840 + 842 724 723 + 723 846 842 + 842 846 847 + 847 843 842 + 848 843 847 + 843 848 849 + 849 844 843 + 845 844 849 + 846 723 728 + 728 850 846 + 846 850 851 + 851 847 846 + 848 847 851 + 851 852 848 + 849 848 852 + 852 853 849 + 854 849 853 + 849 854 845 + 733 850 728 + 850 733 855 + 855 856 850 + 850 856 851 + 857 851 856 + 851 857 858 + 858 852 851 + 852 858 859 + 859 853 852 + 855 733 860 + 860 861 855 + 862 855 861 + 856 855 862 + 862 863 856 + 856 863 857 + 732 860 733 + 864 860 732 + 860 864 865 + 865 861 860 + 861 865 866 + 866 867 861 + 861 867 862 + 868 862 867 + 863 862 868 + 732 738 864 + 864 738 869 + 869 870 864 + 864 870 871 + 871 865 864 + 866 865 871 + 869 738 737 + 737 872 869 + 872 873 869 + 874 869 873 + 870 869 874 + 742 872 737 + 872 742 747 + 747 875 872 + 872 875 876 + 876 873 872 + 873 876 877 + 873 877 874 + 875 747 878 + 878 879 875 + 876 875 879 + 879 880 876 + 877 876 880 + 880 881 877 + 874 877 881 + 882 878 747 + 883 878 882 + 878 883 884 + 884 879 878 + 879 884 885 + 885 880 879 + 880 885 886 + 886 881 880 + 747 746 882 + 887 882 746 + 888 882 887 + 882 888 883 + 889 883 888 + 884 883 889 + 889 890 884 + 884 890 891 + 891 885 884 + 886 885 891 + 746 745 887 + 892 887 745 + 893 887 892 + 887 893 888 + 888 893 894 + 894 895 888 + 888 895 889 + 896 889 895 + 890 889 896 + 745 751 892 + 770 892 751 + 897 892 770 + 892 897 893 + 894 893 897 + 897 898 894 + 899 894 898 + 895 894 899 + 899 900 895 + 895 900 896 + 770 901 897 + 897 901 902 + 902 898 897 + 898 902 903 + 903 904 898 + 898 904 899 + 901 770 775 + 775 905 901 + 901 905 906 + 902 901 906 + 906 907 902 + 903 902 907 + 907 908 903 + 909 903 908 + 904 903 909 + 910 905 775 + 905 910 911 + 911 906 905 + 911 912 906 + 906 912 913 + 913 907 906 + 907 913 914 + 914 908 907 + 910 775 774 + 774 915 910 + 911 910 915 + 915 916 911 + 912 911 916 + 916 917 912 + 912 917 918 + 918 913 912 + 914 913 918 + 915 774 773 + 773 919 915 + 915 919 920 + 920 916 915 + 916 920 921 + 921 917 916 + 917 921 922 + 922 918 917 + 919 773 923 + 923 924 919 + 919 924 925 + 925 920 919 + 921 920 925 + 925 926 921 + 921 926 927 + 922 921 927 + 772 923 773 + 771 923 772 + 923 771 928 + 928 924 923 + 924 928 929 + 929 925 924 + 925 929 926 + 926 929 930 + 930 927 926 + 928 771 931 + 931 932 928 + 928 932 930 + 930 929 928 + 933 932 931 + 932 933 934 + 934 935 932 + 934 933 936 + 936 937 934 + 938 934 937 + 939 934 938 + 940 936 933 + 941 936 940 + 936 941 942 + 942 937 936 + 937 942 943 + 943 944 937 + 937 944 938 + 933 945 940 + 946 940 945 + 947 940 946 + 940 947 941 + 941 947 948 + 948 949 941 + 942 941 949 + 950 945 933 + 932 951 930 + 952 930 951 + 930 952 927 + 927 952 953 + 953 954 927 + 927 954 922 + 951 955 952 + 952 955 956 + 956 953 952 + 957 953 956 + 954 953 957 + 957 958 954 + 954 958 959 + 959 922 954 + 918 922 959 + 960 956 955 + 956 960 961 + 961 962 956 + 956 962 957 + 957 962 963 + 963 964 957 + 958 957 964 + 955 938 960 + 960 938 944 + 944 965 960 + 961 960 965 + 965 966 961 + 967 961 966 + 962 961 967 + 938 955 968 + 629 969 630 + 970 630 969 + 631 630 970 + 970 971 631 + 539 631 971 + 972 539 971 + 532 539 972 + 969 973 970 + 974 970 973 + 971 970 974 + 974 975 971 + 971 975 976 + 976 977 971 + 971 977 972 + 978 972 977 + 979 973 969 + 973 979 980 + 980 981 973 + 973 981 974 + 974 981 982 + 982 983 974 + 975 974 983 + 969 633 979 + 984 979 633 + 980 979 984 + 984 985 980 + 980 985 986 + 986 987 980 + 981 980 987 + 987 982 981 + 633 969 988 + 633 640 984 + 989 984 640 + 984 989 990 + 990 985 984 + 985 990 991 + 991 986 985 + 640 639 989 + 989 639 992 + 992 993 989 + 990 989 993 + 993 994 990 + 991 990 994 + 994 995 991 + 996 991 995 + 986 991 996 + 645 992 639 + 992 645 997 + 997 998 992 + 992 998 999 + 999 993 992 + 994 993 999 + 999 1000 994 + 994 1000 1001 + 1001 995 994 + 997 645 644 + 644 1002 997 + 997 1002 1003 + 1003 1004 997 + 998 997 1004 + 1004 1005 998 + 998 1005 1006 + 1006 999 998 + 1000 999 1006 + 650 1002 644 + 1002 650 1007 + 1007 1003 1002 + 1003 1007 1008 + 1003 1008 1009 + 1009 1004 1003 + 1005 1004 1009 + 1009 1010 1005 + 1005 1010 1011 + 1011 1006 1005 + 1007 650 1012 + 1012 1013 1007 + 1008 1007 1013 + 1013 234 1008 + 649 1012 650 + 1012 649 1014 + 1012 1014 1015 + 1015 1013 1012 + 234 1013 1015 + 1015 779 234 + 234 779 784 + 784 1016 234 + 234 1016 1009 + 1014 649 655 + 655 671 1014 + 1015 1014 1017 + 977 1018 978 + 1018 977 976 + 976 1019 1018 + 1018 1019 1020 + 1020 1021 1018 + 1022 1018 1021 + 1019 976 1023 + 1023 1024 1019 + 1019 1024 1025 + 1026 1025 1024 + 1027 1025 1026 + 1023 976 975 + 975 1028 1023 + 1028 1029 1023 + 1030 1023 1029 + 1023 1030 1024 + 1024 1030 1026 + 983 1028 975 + 1028 983 1031 + 1031 1032 1028 + 1028 1032 1033 + 1033 1029 1028 + 1029 1033 1034 + 1029 1034 1030 + 1026 1030 1034 + 1031 983 982 + 982 1035 1031 + 1031 1035 1036 + 1036 1037 1031 + 1032 1031 1037 + 1037 1038 1032 + 1033 1032 1038 + 1038 1039 1033 + 1034 1033 1039 + 1040 1035 982 + 1035 1040 1041 + 1041 1036 1035 + 1036 1041 1042 + 1042 1043 1036 + 1036 1043 1044 + 1044 1037 1036 + 1038 1037 1044 + 982 987 1040 + 1040 987 986 + 986 1045 1040 + 1040 1045 1046 + 1046 1041 1040 + 1042 1041 1046 + 1046 1047 1042 + 1042 1047 1048 + 1048 1049 1042 + 1043 1042 1049 + 996 1045 986 + 1045 996 1050 + 1050 1046 1045 + 1046 1050 1051 + 1051 1047 1046 + 1047 1051 1052 + 1052 1048 1047 + 1053 1050 996 + 1051 1050 1053 + 1053 1054 1051 + 1051 1054 1055 + 1055 1052 1051 + 1056 1052 1055 + 1048 1052 1056 + 996 1057 1053 + 1058 1053 1057 + 1058 1054 1053 + 1054 1058 1059 + 1059 1055 1054 + 1060 1055 1059 + 1055 1060 1056 + 995 1057 996 + 1057 995 1001 + 1001 1061 1057 + 1057 1061 1058 + 1059 1058 1061 + 1061 1062 1059 + 1062 1063 1059 + 1064 1059 1063 + 1059 1064 1060 + 1061 1001 1065 + 1065 1062 1061 + 1066 1062 1065 + 1062 1066 1067 + 1067 1063 1062 + 1063 1067 1068 + 1063 1068 1064 + 1069 1064 1068 + 1060 1064 1069 + 1065 1001 1000 + 1000 1070 1065 + 1071 1065 1070 + 1065 1071 1066 + 1066 1071 1072 + 1072 1073 1066 + 1067 1066 1073 + 1073 1074 1067 + 1068 1067 1074 + 1006 1070 1000 + 1070 1006 1011 + 1011 1075 1070 + 1070 1075 1071 + 1071 1075 1076 + 1076 1072 1071 + 1077 1072 1076 + 1073 1072 1077 + 1077 1078 1073 + 1073 1078 1079 + 1079 1074 1073 + 1075 1011 1080 + 1080 1081 1075 + 1075 1081 1076 + 1081 1082 1076 + 1083 1076 1082 + 1083 1084 1076 + 1076 1084 1077 + 1085 1080 1011 + 1086 1080 1085 + 1081 1080 1086 + 1081 1086 1087 + 1087 1082 1081 + 1088 1082 1087 + 1082 1088 1083 + 1011 1010 1085 + 1089 1085 1010 + 1085 1089 1090 + 1090 1091 1085 + 1085 1091 1086 + 1086 1091 1092 + 1092 1093 1086 + 1093 1087 1086 + 1088 1087 1093 + 1010 1009 1089 + 1094 1089 1009 + 1090 1089 1094 + 1094 1095 1090 + 1090 1095 1096 + 1096 1097 1090 + 1097 1098 1090 + 1091 1090 1098 + 1098 1092 1091 + 1099 1094 1009 + 1100 1094 1099 + 1100 1095 1094 + 1095 1100 1101 + 1101 1096 1095 + 1101 1102 1096 + 1096 1102 1103 + 1103 1097 1096 + 1016 1099 1009 + 1104 1099 1016 + 1099 1104 1105 + 1099 1105 1100 + 1100 1105 1106 + 1016 1107 1104 + 1108 1104 1107 + 1105 1104 1108 + 1108 103 1105 + 1105 103 1109 + 784 1107 1016 + 1107 784 783 + 783 1110 1107 + 1107 1110 1108 + 783 789 1110 + 1110 789 1111 + 1111 1112 1110 + 1111 789 788 + 788 1113 1111 + 1114 1111 1113 + 1113 1115 1114 + 1116 1114 1115 + 1112 1114 1116 + 1116 1117 1112 + 787 1113 788 + 1115 1113 787 + 1115 787 1118 + 1118 1119 1115 + 1115 1119 1116 + 1120 1116 1119 + 1117 1116 1120 + 1117 1120 1121 + 1121 1108 1117 + 1108 1121 1122 + 1122 103 1108 + 1118 787 786 + 1123 1118 786 + 1124 1118 1123 + 1124 1119 1118 + 1119 1124 1120 + 1121 1120 1124 + 1124 1125 1121 + 1122 1121 1125 + 1125 1126 1122 + 1127 1122 1126 + 103 1122 1127 + 786 1128 1123 + 1128 1129 1123 + 1126 1123 1129 + 1126 1125 1123 + 1123 1125 1124 + 1130 1128 786 + 1130 1131 1128 + 1128 1131 1132 + 1132 1129 1128 + 1132 1133 1129 + 1129 1133 1126 + 786 817 1130 + 1134 1130 817 + 1131 1130 1134 + 1134 1135 1131 + 1132 1131 1135 + 1135 1136 1132 + 1136 1137 1132 + 1137 1138 1132 + 1133 1132 1138 + 817 1139 1134 + 1140 1134 1139 + 1135 1134 1140 + 1135 1140 1141 + 1141 1136 1135 + 816 1139 817 + 1139 816 815 + 815 826 1139 + 1139 826 1140 + 1140 826 825 + 825 1142 1140 + 1142 1143 1140 + 831 1142 825 + 1142 831 836 + 836 1144 1142 + 1142 1144 1145 + 1145 1146 1142 + 1144 836 1147 + 1147 1148 1144 + 1144 1148 1149 + 1149 1145 1144 + 841 1147 836 + 1150 1147 841 + 1148 1147 1150 + 1150 1151 1148 + 1148 1151 1152 + 1152 1149 1148 + 841 1153 1150 + 1150 1153 1154 + 1154 1155 1150 + 1151 1150 1155 + 1155 1156 1151 + 1151 1156 1157 + 1157 1152 1151 + 1153 841 840 + 840 1158 1153 + 1153 1158 1159 + 1159 1154 1153 + 1160 1154 1159 + 1154 1160 1161 + 1161 1155 1154 + 1156 1155 1161 + 1158 840 845 + 845 854 1158 + 1159 1158 854 + 854 1162 1159 + 1163 1159 1162 + 1159 1163 1160 + 1160 1163 1164 + 1164 1165 1160 + 1161 1160 1165 + 853 1162 854 + 1162 853 859 + 859 1166 1162 + 1162 1166 1163 + 1164 1163 1166 + 1166 1167 1164 + 1168 1164 1167 + 1164 1168 1169 + 1169 1165 1164 + 1166 859 1170 + 1170 1167 1166 + 1167 1170 1171 + 1171 1172 1167 + 1167 1172 1168 + 1168 1172 1173 + 1173 1174 1168 + 1169 1168 1174 + 1175 1170 859 + 1171 1170 1175 + 1175 1176 1171 + 1171 1176 1177 + 1177 1178 1171 + 1172 1171 1178 + 1178 1179 1172 + 1172 1179 1173 + 859 858 1175 + 1180 1175 858 + 1176 1175 1180 + 1176 1180 1181 + 1181 1177 1176 + 1182 1177 1181 + 1177 1182 1183 + 1183 1178 1177 + 1179 1178 1183 + 858 857 1180 + 1181 1180 857 + 1184 1181 857 + 1182 1181 1184 + 1184 1185 1182 + 1183 1182 1185 + 1185 1186 1183 + 1187 1183 1186 + 1183 1187 1179 + 1179 1187 1188 + 1188 1173 1179 + 1189 1184 857 + 1190 1184 1189 + 1190 1185 1184 + 1185 1190 1191 + 1191 1186 1185 + 1192 1186 1191 + 1186 1192 1187 + 1187 1192 1193 + 1188 1187 1193 + 857 863 1189 + 863 1194 1189 + 1195 1189 1194 + 1189 1195 1196 + 1196 1197 1189 + 1189 1197 1190 + 1191 1190 1197 + 868 1194 863 + 1194 868 1198 + 1198 1199 1194 + 1194 1199 1195 + 1200 1195 1199 + 1196 1195 1200 + 1200 1201 1196 + 1202 1196 1201 + 1197 1196 1202 + 1198 868 1203 + 1203 1204 1198 + 1205 1198 1204 + 1199 1198 1205 + 1205 1206 1199 + 1199 1206 1200 + 867 1203 868 + 1207 1203 867 + 1203 1207 1208 + 1208 1204 1203 + 1204 1208 1209 + 1209 1210 1204 + 1204 1210 1205 + 1211 1205 1210 + 1206 1205 1211 + 867 866 1207 + 1212 1207 866 + 1208 1207 1212 + 1212 1213 1208 + 1208 1213 1214 + 1214 1209 1208 + 1215 1209 1214 + 1210 1209 1215 + 1215 1216 1210 + 1210 1216 1211 + 866 1217 1212 + 1217 1218 1212 + 1218 1219 1212 + 1219 1220 1212 + 1221 1212 1220 + 1213 1212 1221 + 871 1217 866 + 1217 871 1222 + 1222 1223 1217 + 1217 1223 1224 + 1224 1218 1217 + 1218 1224 1225 + 1218 1225 1226 + 1226 1219 1218 + 1222 871 1227 + 1227 1228 1222 + 1222 1228 1229 + 1229 1230 1222 + 1223 1222 1230 + 1230 1231 1223 + 1224 1223 1231 + 870 1227 871 + 1232 1227 870 + 1227 1232 1228 + 1228 1232 1233 + 1233 1229 1228 + 1234 1229 1233 + 1229 1234 1235 + 1235 1230 1229 + 1230 1235 1236 + 1236 1231 1230 + 870 1237 1232 + 1232 1237 1238 + 1238 1233 1232 + 1239 1233 1238 + 1233 1239 1234 + 874 1237 870 + 1237 874 1240 + 1240 1238 1237 + 1241 1238 1240 + 1238 1241 1239 + 1242 1239 1241 + 1234 1239 1242 + 1242 1243 1234 + 1234 1243 1244 + 1244 1235 1234 + 1236 1235 1244 + 881 1240 874 + 1245 1240 881 + 1240 1245 1241 + 1241 1245 1246 + 1246 1247 1241 + 1241 1247 1242 + 1248 1242 1247 + 1243 1242 1248 + 881 886 1245 + 1246 1245 886 + 886 1249 1246 + 1250 1246 1249 + 1247 1246 1250 + 1250 1251 1247 + 1247 1251 1248 + 891 1249 886 + 1249 891 1252 + 1252 1253 1249 + 1249 1253 1250 + 1250 1253 1254 + 1254 1255 1250 + 1251 1250 1255 + 1255 1256 1251 + 1248 1251 1256 + 1252 891 1257 + 1257 1258 1252 + 1252 1258 1259 + 1259 1260 1252 + 1253 1252 1260 + 1260 1254 1253 + 890 1257 891 + 1261 1257 890 + 1257 1261 1258 + 1258 1261 1262 + 1262 1259 1258 + 1263 1259 1262 + 1259 1263 1264 + 1264 1260 1259 + 1260 1264 1265 + 1265 1254 1260 + 890 1266 1261 + 1261 1266 1267 + 1267 1262 1261 + 1268 1262 1267 + 1262 1268 1263 + 896 1266 890 + 1266 896 1269 + 1269 1267 1266 + 1270 1267 1269 + 1267 1270 1268 + 1271 1268 1270 + 1263 1268 1271 + 1271 1272 1263 + 1263 1272 1273 + 1273 1264 1263 + 1265 1264 1273 + 1274 1269 896 + 1275 1269 1274 + 1269 1275 1270 + 1270 1275 1276 + 1276 1277 1270 + 1270 1277 1271 + 896 900 1274 + 1278 1274 900 + 1279 1274 1278 + 1274 1279 1275 + 1276 1275 1279 + 1279 1280 1276 + 1281 1276 1280 + 1277 1276 1281 + 900 899 1278 + 1282 1278 899 + 1283 1278 1282 + 1278 1283 1279 + 1279 1283 1284 + 1284 1280 1279 + 1280 1284 1285 + 1280 1285 1281 + 899 904 1282 + 909 1282 904 + 1286 1282 909 + 1282 1286 1283 + 1283 1286 1287 + 1284 1283 1287 + 1287 1288 1284 + 1285 1284 1288 + 1288 1289 1285 + 1285 1289 1290 + 1281 1285 1290 + 909 1291 1286 + 1286 1291 1292 + 1292 1287 1286 + 1293 1287 1292 + 1287 1293 1294 + 1294 1288 1287 + 1294 1289 1288 + 1289 1294 1295 + 1295 1290 1289 + 1291 909 1296 + 1296 1297 1291 + 1292 1291 1297 + 1297 1298 1292 + 1298 1299 1292 + 1293 1292 1299 + 908 1296 909 + 1300 1296 908 + 1296 1300 1301 + 908 914 1300 + 1302 1300 914 + 1303 1300 1302 + 1302 132 1303 + 1304 132 1302 + 132 1304 1305 + 1305 1306 132 + 914 1307 1302 + 1308 1302 1307 + 1302 1308 1304 + 1304 1308 1309 + 1309 1310 1304 + 1304 1310 1311 + 918 1307 914 + 959 1307 918 + 1307 959 1308 + 1308 959 958 + 958 1309 1308 + 964 1309 958 + 1309 964 1310 + 1310 964 963 + 963 1312 1310 + 1310 1312 1313 + 963 1314 1312 + 1312 1314 1315 + 1315 1316 1312 + 1312 1316 1311 + 1317 1311 1316 + 1314 963 1318 + 1318 1319 1314 + 1314 1319 1320 + 1320 1315 1314 + 1321 1315 1320 + 1316 1315 1321 + 1321 1322 1316 + 1316 1322 1317 + 962 1318 963 + 967 1318 962 + 1318 967 1323 + 1323 1319 1318 + 1319 1323 1324 + 1324 1320 1319 + 1320 1324 1325 + 1325 1326 1320 + 1320 1326 1321 + 1327 1321 1326 + 1322 1321 1327 + 1323 967 1328 + 1328 1329 1323 + 1324 1323 1329 + 1329 1330 1324 + 1325 1324 1330 + 1330 1331 1325 + 1332 1325 1331 + 1326 1325 1332 + 966 1328 967 + 1333 1328 966 + 1328 1333 1334 + 1334 1329 1328 + 1329 1334 1335 + 1335 1330 1329 + 1330 1335 1336 + 1336 1331 1330 + 966 1337 1333 + 1333 1337 1338 + 1338 1339 1333 + 1334 1333 1339 + 1339 1340 1334 + 1335 1334 1340 + 1340 1341 1335 + 1336 1335 1341 + 1337 966 965 + 965 1342 1337 + 1337 1342 1343 + 1343 1338 1337 + 1343 1344 1338 + 1338 1344 1345 + 1345 1339 1338 + 1340 1339 1345 + 1342 965 944 + 944 943 1342 + 1342 943 1346 + 1346 1343 1342 + 1344 1343 1346 + 1346 1347 1344 + 1345 1344 1347 + 1348 1345 1347 + 1349 1345 1348 + 1345 1349 1340 + 1340 1349 1350 + 1350 1341 1340 + 1351 1346 943 + 1347 1346 1351 + 1351 1352 1347 + 1347 1352 1353 + 1353 1354 1347 + 1347 1354 1348 + 943 942 1351 + 949 1351 942 + 1352 1351 949 + 949 1355 1352 + 1355 1353 1352 + 1356 1353 1355 + 1353 1356 1357 + 1357 1354 1353 + 1354 1357 1358 + 1358 1348 1354 + 1359 1355 949 + 1355 1359 1356 + 1356 1359 1360 + 1360 1361 1356 + 1357 1356 1361 + 1361 1362 1357 + 1358 1357 1362 + 949 948 1359 + 1359 948 1363 + 1363 1364 1359 + 1359 1364 1360 + 1363 948 947 + 947 1365 1363 + 1366 1363 1365 + 1364 1363 1366 + 1366 1367 1364 + 1364 1367 1368 + 1368 1360 1364 + 946 1365 947 + 1369 1365 946 + 1365 1369 1366 + 1366 1369 1370 + 1370 1371 1366 + 1367 1366 1371 + 1371 1372 1367 + 1368 1367 1372 + 946 1373 1369 + 1369 1373 1374 + 1374 1370 1369 + 1374 1375 1370 + 1370 1375 1376 + 1376 1371 1370 + 1372 1371 1376 + 1373 946 1377 + 1377 1378 1373 + 1373 1378 1379 + 1379 1380 1373 + 1380 1374 1373 + 945 1377 946 + 1381 1377 945 + 1378 1377 1381 + 1381 1382 1378 + 1378 1382 1383 + 1383 1379 1378 + 945 1384 1381 + 1381 1384 1385 + 1385 1386 1381 + 1382 1381 1386 + 1386 1387 1382 + 1382 1387 1388 + 1388 1389 1382 + 1389 1390 1382 + 1391 1386 1385 + 1386 1391 1392 + 1392 1387 1386 + 1387 1392 1393 + 1393 1388 1387 + 1388 1393 1394 + 1388 1394 1395 + 1395 1389 1388 + 1385 1396 1391 + 1391 1396 760 + 760 1397 1391 + 1392 1391 1397 + 1397 1398 1392 + 1392 1398 1399 + 1393 1392 1399 + 1399 1400 1393 + 1394 1393 1400 + 1400 1401 1394 + 1395 1394 1401 + 1402 1397 760 + 1398 1397 1402 + 1402 1403 1398 + 1398 1403 1404 + 1404 1405 1398 + 1398 1405 1399 + 760 1406 1402 + 1406 1407 1402 + 1403 1402 1407 + 1407 1408 1403 + 1403 1408 1409 + 1406 760 1410 + 1410 1411 1406 + 1406 1411 1412 + 1412 1407 1406 + 1407 1412 1408 + 1408 1412 1413 + 1413 1414 1408 + 1408 1414 1415 + 1410 760 1416 + 1416 1417 1410 + 1410 1417 1418 + 1418 1419 1410 + 1411 1410 1419 + 1419 1413 1411 + 1411 1413 1412 + 759 1416 760 + 111 1416 759 + 1417 1416 111 + 111 1420 1417 + 1417 1420 1421 + 1421 1418 1417 + 759 1422 111 + 1404 1403 1423 + 1424 1383 1382 + 1127 1425 103 + 1426 1101 1100 + 20 1421 1420 + 1420 111 20 + 20 111 1427 + 1375 1374 1428 + 1428 1429 1375 + 1375 1429 1430 + 1430 1376 1375 + 1431 1376 1430 + 1376 1431 1372 + 1432 1429 1428 + 1429 1432 1433 + 1433 1434 1429 + 1429 1434 1430 + 1432 1428 1435 + 1435 1436 1432 + 1432 1436 1437 + 1433 1432 1437 + 1438 1433 1437 + 1439 1433 1438 + 1433 1439 1434 + 1434 1439 1440 + 1440 1430 1434 + 1436 1435 1441 + 1436 1441 1390 + 1390 1442 1436 + 1436 1442 1437 + 1442 1390 1443 + 1442 1443 1444 + 1444 1445 1442 + 1442 1445 1437 + 1443 1390 1389 + 1389 1446 1443 + 1444 1443 1446 + 1447 1444 1446 + 1448 1444 1447 + 1445 1444 1448 + 1445 1448 1449 + 1449 1450 1445 + 1445 1450 1437 + 1446 1389 1395 + 1446 1395 1451 + 1451 1452 1446 + 1446 1452 1453 + 1453 1447 1446 + 1454 1447 1453 + 1455 1447 1454 + 1447 1455 1448 + 1448 1455 1456 + 1451 1395 1401 + 1457 1451 1401 + 1458 1451 1457 + 1458 1452 1451 + 1452 1458 1459 + 1459 1453 1452 + 1460 1453 1459 + 1453 1460 1454 + 1461 1457 1401 + 1462 1457 1461 + 1463 1457 1462 + 1457 1463 1458 + 1458 1463 1464 + 1464 1465 1458 + 1465 1459 1458 + 1466 1461 1401 + 1467 1461 1466 + 1468 1461 1467 + 1461 1468 1462 + 1469 1462 1468 + 1463 1462 1469 + 1469 1464 1463 + 1401 1470 1466 + 1471 1466 1470 + 1466 1471 1472 + 1466 1472 1467 + 1473 1467 1472 + 1468 1467 1473 + 1473 1474 1468 + 1468 1474 1469 + 1475 1470 1401 + 1470 1475 1476 + 1470 1476 1471 + 1477 1471 1476 + 1472 1471 1477 + 1477 1478 1472 + 1472 1478 1479 + 1479 1473 1472 + 1401 1480 1475 + 1475 1480 1481 + 1482 1475 1481 + 1476 1475 1482 + 1401 1400 1480 + 1480 1400 1399 + 1399 1483 1480 + 1480 1483 1481 + 1483 1399 1484 + 1484 1485 1483 + 1483 1485 1486 + 1486 1481 1483 + 1484 1399 1405 + 1405 1487 1484 + 1484 1487 1488 + 1487 1405 1404 + 1404 1489 1487 + 1487 1489 1490 + 1490 1491 1487 + 1487 1491 1492 + 1489 1404 1493 + 1493 1494 1489 + 1490 1489 1494 + 1494 1495 1490 + 155 1490 1495 + 1491 1490 155 + 155 1427 1491 + 1496 1493 1404 + 1449 1448 1497 + 1495 1498 155 + 1498 1495 1499 + 1499 1500 1498 + 1498 1500 1501 + 1501 156 1498 + 1499 1495 1494 + 1494 1502 1499 + 1503 1499 1502 + 1500 1499 1503 + 1503 1504 1500 + 1504 1501 1500 + 1505 1501 1504 + 156 1501 1505 + 1505 1506 156 + 156 1506 1427 + 1493 1502 1494 + 1502 1493 1507 + 1507 1503 1502 + 1504 1503 1508 + 1455 1509 1456 + 1510 1509 1455 + 1455 1454 1510 + 1511 1510 1454 + 1454 1460 1511 + 1512 1511 1460 + 1460 1513 1512 + 1512 1513 1514 + 1459 1513 1460 + 1513 1459 1465 + 1465 1514 1513 + 1514 1465 1515 + 1514 1515 1516 + 1516 1517 1514 + 1514 1517 1518 + 1515 1465 1464 + 1464 1519 1515 + 1515 1519 1520 + 1520 1521 1515 + 1521 1516 1515 + 1522 1516 1521 + 1516 1522 1523 + 1523 1517 1516 + 1519 1464 1469 + 1519 1469 1474 + 1474 1524 1519 + 1519 1524 1520 + 1474 1473 1524 + 1524 1473 1479 + 1479 1525 1524 + 1524 1525 1520 + 1525 1526 1520 + 1527 1520 1526 + 1520 1527 1528 + 1520 1528 1529 + 1529 1521 1520 + 1525 1479 1530 + 1525 1530 1531 + 1531 1526 1525 + 1532 1526 1531 + 1526 1532 1527 + 1527 1532 1533 + 1533 1534 1527 + 1528 1527 1534 + 1530 1479 1478 + 1478 1535 1530 + 1530 1535 1536 + 1537 1536 1535 + 1535 1538 1537 + 1537 1538 1539 + 1539 1540 1537 + 1535 1478 1477 + 1477 1538 1535 + 1538 1477 1541 + 1541 1539 1538 + 1539 1541 1542 + 1539 1542 1543 + 1543 1540 1539 + 1541 1477 1476 + 1544 1541 1476 + 1542 1541 1544 + 1544 1545 1542 + 1542 1545 1546 + 1546 1543 1542 + 1476 1547 1544 + 1548 1544 1547 + 1545 1544 1548 + 1545 1548 1549 + 1549 1550 1545 + 1545 1550 1551 + 1550 1552 1551 + 1482 1547 1476 + 1547 1482 1553 + 1547 1553 1548 + 1548 1553 1554 + 1554 1549 1548 + 1555 1549 1554 + 1555 1550 1549 + 1550 1555 1556 + 1556 1557 1550 + 1553 1482 1558 + 1558 1559 1553 + 1553 1559 1554 + 1558 1560 1559 + 1559 1560 1561 + 1561 1562 1559 + 1559 1562 1554 + 1561 1563 1562 + 1562 1563 1564 + 1564 1565 1562 + 1562 1565 1554 + 1563 1561 1566 + 1566 1567 1563 + 1563 1567 1568 + 1568 1564 1563 + 1569 1564 1568 + 1564 1569 1565 + 1565 1569 1570 + 1570 1571 1565 + 1565 1571 1554 + 1572 1567 1566 + 1567 1572 1573 + 1573 1574 1567 + 1567 1574 1568 + 1575 1568 1574 + 1576 1568 1575 + 1568 1576 1569 + 1572 1566 1577 + 1577 1578 1572 + 1572 1578 1579 + 1579 1573 1572 + 1580 1573 1579 + 1573 1580 1581 + 1581 1574 1573 + 1574 1581 1575 + 1577 1566 1582 + 1582 1583 1577 + 1583 1584 1577 + 1585 1577 1584 + 1577 1585 1586 + 1586 1578 1577 + 1578 1586 1587 + 1587 1579 1578 + 1588 1579 1587 + 1579 1588 1580 + 1481 1584 1583 + 1589 1584 1481 + 1584 1589 1585 + 1585 1589 1590 + 1590 1591 1585 + 1586 1585 1591 + 1591 1592 1586 + 1587 1586 1592 + 1583 1593 1481 + 1481 1593 1594 + 1595 1531 1530 + 1596 1590 1589 + 1589 1486 1596 + 1481 1486 1589 + 1597 1556 1555 + 1555 1598 1597 + 1598 1599 1597 + 1600 1599 1598 + 1598 1601 1600 + 1602 1600 1601 + 1554 1598 1555 + 1601 1598 1554 + 1601 1554 1603 + 1603 1604 1601 + 1601 1604 1602 + 1571 1603 1554 + 1605 1603 1571 + 1605 1604 1603 + 1604 1605 1606 + 1606 1607 1604 + 1604 1607 1602 + 1571 1608 1605 + 1605 1608 1609 + 1606 1605 1609 + 1610 1606 1609 + 1611 1606 1610 + 1607 1606 1611 + 1570 1608 1571 + 1608 1570 1612 + 1612 1609 1608 + 1609 1612 1613 + 1613 1614 1609 + 1609 1614 1615 + 1615 1616 1609 + 1609 1616 1610 + 1617 1612 1570 + 1613 1612 1617 + 1617 1618 1613 + 1619 1613 1618 + 1614 1613 1619 + 1619 1620 1614 + 1615 1614 1620 + 1570 1569 1617 + 1569 1576 1617 + 1621 1617 1576 + 1617 1621 1618 + 1618 1621 1622 + 1622 1623 1618 + 1618 1623 1619 + 1624 1619 1623 + 1620 1619 1624 + 1576 1625 1621 + 1621 1625 1626 + 1626 1627 1621 + 1627 1622 1621 + 1628 1622 1627 + 1623 1622 1628 + 1628 1629 1623 + 1623 1629 1624 + 1575 1625 1576 + 1625 1575 1630 + 1630 1626 1625 + 1626 1630 1631 + 1631 1632 1626 + 1626 1632 1633 + 1633 1627 1626 + 1633 1634 1627 + 1627 1634 1628 + 1630 1575 1581 + 1581 1635 1630 + 1631 1630 1635 + 1635 1636 1631 + 1637 1631 1636 + 1632 1631 1637 + 1637 1638 1632 + 1632 1638 1639 + 1639 1633 1632 + 1634 1633 1639 + 1640 1635 1581 + 1635 1640 1641 + 1641 1636 1635 + 1636 1641 1642 + 1642 1643 1636 + 1636 1643 1637 + 1644 1637 1643 + 1638 1637 1644 + 1581 1580 1640 + 1645 1640 1580 + 1641 1640 1645 + 1645 1646 1641 + 1641 1646 1647 + 1647 1642 1641 + 1648 1642 1647 + 1580 1588 1645 + 1649 1645 1588 + 1645 1649 1650 + 1650 1646 1645 + 1646 1650 1651 + 1651 1647 1646 + 1647 1651 1652 + 1652 1653 1647 + 1647 1653 1648 + 1588 1654 1649 + 1649 1654 1655 + 1655 1656 1649 + 1656 1657 1649 + 1650 1649 1657 + 1657 1658 1650 + 1651 1650 1658 + 1587 1654 1588 + 1654 1587 1659 + 1659 1655 1654 + 1660 1655 1659 + 1655 1660 1661 + 1661 1656 1655 + 1592 1659 1587 + 1662 1659 1592 + 1659 1662 1660 + 1660 1662 1663 + 1663 1664 1660 + 1660 1664 1661 + 1665 1661 1664 + 1656 1661 1665 + 1592 1666 1662 + 1662 1666 1667 + 1667 1663 1662 + 1668 1663 1667 + 1664 1663 1668 + 1668 1669 1664 + 1664 1669 1665 + 1670 1666 1592 + 1666 1670 1671 + 1671 1667 1666 + 1667 1671 1672 + 1672 1673 1667 + 1667 1673 1668 + 1592 1591 1670 + 1670 1591 1590 + 1590 1674 1670 + 1670 1674 1675 + 1675 1671 1670 + 1672 1671 1675 + 1675 1676 1672 + 1672 1676 1677 + 1677 1678 1672 + 1673 1672 1678 + 1679 1674 1590 + 1674 1679 1680 + 1680 1675 1674 + 1675 1680 1681 + 1681 1676 1675 + 1676 1681 1682 + 1682 1677 1676 + 1590 1683 1679 + 1332 1684 1326 + 1326 1684 1327 + 1685 1327 1684 + 1686 1327 1685 + 1327 1686 1322 + 1317 1322 1686 + 1686 1687 1317 + 1688 1687 1686 + 1684 1689 1685 + 1690 1685 1689 + 1691 1685 1690 + 1685 1691 1686 + 1686 1691 1688 + 1688 1691 1692 + 1693 1689 1684 + 1691 1694 1692 + 1694 1695 1692 + 1696 1692 1695 + 1697 1692 1696 + 1692 1697 1698 + 1698 1699 1692 + 1698 1700 1699 + 1695 1701 1696 + 1702 1696 1701 + 1697 1696 1702 + 1702 1703 1697 + 1697 1703 1704 + 1704 1698 1697 + 1700 1698 1704 + 1704 1705 1700 + 1706 1705 1704 + 1701 1695 1707 + 1707 1695 1708 + 1708 1709 1707 + 1690 1710 1691 + 1710 1690 1711 + 1711 1690 1712 + 1712 1713 1711 + 1714 1711 1713 + 1715 1711 1714 + 1711 1715 1716 + 1717 1712 1690 + 1718 1712 1717 + 1712 1718 1719 + 1719 1713 1712 + 1713 1719 1720 + 1720 1721 1713 + 1713 1721 1714 + 1717 1722 1718 + 1718 1722 1723 + 1723 1724 1718 + 1719 1718 1724 + 1724 1725 1719 + 1720 1719 1725 + 1725 1726 1720 + 1727 1720 1726 + 1721 1720 1727 + 1728 1723 1722 + 1729 1723 1728 + 1723 1729 1730 + 1730 1724 1723 + 1724 1730 1731 + 1731 1725 1724 + 1725 1731 1732 + 1732 1726 1725 + 1722 1332 1728 + 1331 1728 1332 + 1733 1728 1331 + 1728 1733 1729 + 1729 1733 1734 + 1734 1735 1729 + 1730 1729 1735 + 1736 1332 1722 + 1331 1336 1733 + 1734 1733 1336 + 1336 1737 1734 + 1738 1734 1737 + 1738 1735 1734 + 1735 1738 1739 + 1739 1740 1735 + 1735 1740 1730 + 1731 1730 1740 + 1740 1741 1731 + 1732 1731 1741 + 1341 1737 1336 + 1737 1341 1350 + 1350 1742 1737 + 1737 1742 1738 + 1738 1742 1743 + 1743 1744 1738 + 1745 1744 1743 + 1744 1745 1746 + 1742 1350 1747 + 1747 1743 1742 + 1748 1743 1747 + 1743 1748 1745 + 1745 1748 1749 + 1749 1750 1745 + 1746 1745 1750 + 1750 1751 1746 + 1747 1350 1349 + 1349 1752 1747 + 1753 1747 1752 + 1747 1753 1748 + 1748 1753 1754 + 1754 1749 1748 + 1755 1749 1754 + 1749 1755 1756 + 1756 1750 1749 + 1348 1752 1349 + 1757 1752 1348 + 1752 1757 1753 + 1753 1757 1758 + 1758 1754 1753 + 1759 1754 1758 + 1754 1759 1755 + 1755 1759 1760 + 1760 1761 1755 + 1756 1755 1761 + 1348 1358 1757 + 1757 1358 1762 + 1762 1758 1757 + 1763 1758 1762 + 1758 1763 1759 + 1759 1763 1764 + 1764 1760 1759 + 1765 1760 1764 + 1760 1765 1766 + 1766 1761 1760 + 1362 1762 1358 + 1767 1762 1362 + 1762 1767 1763 + 1763 1767 1768 + 1768 1764 1763 + 1769 1764 1768 + 1764 1769 1765 + 1765 1769 1770 + 1770 1771 1765 + 1766 1765 1771 + 1362 1772 1767 + 1767 1772 1773 + 1773 1768 1767 + 1774 1768 1773 + 1768 1774 1769 + 1769 1774 1775 + 1775 1770 1769 + 1772 1362 1361 + 1361 1776 1772 + 1772 1776 1777 + 1777 1773 1772 + 1778 1773 1777 + 1773 1778 1774 + 1774 1778 1779 + 1779 1775 1774 + 1776 1361 1360 + 1360 1780 1776 + 1776 1780 1781 + 1781 1777 1776 + 1782 1777 1781 + 1777 1782 1778 + 1778 1782 1783 + 1783 1779 1778 + 1784 1780 1360 + 1780 1784 1785 + 1785 1781 1780 + 1781 1785 1786 + 1786 1787 1781 + 1781 1787 1782 + 1782 1787 1788 + 1788 1783 1782 + 1360 1368 1784 + 1784 1368 1789 + 1789 1790 1784 + 1785 1784 1790 + 1790 1791 1785 + 1786 1785 1791 + 1372 1789 1368 + 1792 1789 1372 + 1789 1792 1793 + 1793 1790 1789 + 1790 1793 1794 + 1794 1791 1790 + 1795 1791 1794 + 1791 1795 1786 + 1372 1431 1792 + 1796 1792 1431 + 1793 1792 1796 + 1796 1797 1793 + 1793 1797 1798 + 1798 1794 1793 + 1799 1794 1798 + 1794 1799 1795 + 1795 1799 1800 + 1800 1801 1795 + 1431 1802 1796 + 1803 1796 1802 + 1796 1803 1804 + 1804 1797 1796 + 1797 1804 1805 + 1805 1798 1797 + 1430 1802 1431 + 1806 1802 1430 + 1802 1806 1803 + 1803 1806 1807 + 1808 1803 1807 + 1804 1803 1808 + 1808 1809 1804 + 1804 1809 1810 + 1805 1804 1810 + 1430 1440 1806 + 1806 1440 1811 + 1811 1807 1806 + 1812 1807 1811 + 1807 1812 1813 + 1813 1814 1807 + 1807 1814 1808 + 1815 1808 1814 + 1808 1815 1809 + 1811 1440 1439 + 1439 1816 1811 + 1816 1817 1811 + 1812 1811 1817 + 1817 1818 1812 + 1812 1818 1819 + 1819 1813 1812 + 1820 1813 1819 + 1814 1813 1820 + 1438 1816 1439 + 1438 1821 1816 + 1816 1821 1822 + 1822 1817 1816 + 1817 1822 1823 + 1823 1818 1817 + 1818 1823 1824 + 1824 1819 1818 + 1821 1438 1825 + 1825 1826 1821 + 1822 1821 1826 + 1826 1827 1822 + 1827 1828 1822 + 1828 1829 1822 + 1823 1822 1829 + 1437 1825 1438 + 1830 1825 1437 + 1825 1830 1826 + 1826 1830 1831 + 1831 1827 1826 + 1832 1827 1831 + 1827 1832 1833 + 1833 1828 1827 + 1437 1834 1830 + 1830 1834 1835 + 1831 1830 1835 + 1836 1831 1835 + 1832 1831 1836 + 1836 1837 1832 + 1832 1837 1838 + 1833 1832 1838 + 1437 1839 1834 + 1834 1839 1840 + 1840 1841 1834 + 1834 1841 1835 + 1839 1437 1450 + 1450 1842 1839 + 1839 1842 1843 + 1843 1840 1839 + 1450 1449 1842 + 1842 1449 1844 + 1844 1845 1842 + 1842 1845 1843 + 1846 1844 1449 + 1456 1846 1449 + 1838 1847 1833 + 1848 1833 1847 + 1848 1828 1833 + 1828 1848 1849 + 1849 1829 1828 + 1849 1850 1829 + 1829 1850 1823 + 1847 1851 1848 + 1849 1848 1851 + 1852 1849 1851 + 1850 1849 1852 + 1852 1853 1850 + 1850 1853 1824 + 1824 1823 1850 + 1854 1852 1851 + 1855 1852 1854 + 1852 1855 1853 + 1853 1855 1856 + 1856 1824 1853 + 1819 1824 1856 + 1856 1857 1819 + 1819 1857 1820 + 1858 1854 1851 + 1859 1854 1858 + 1859 1860 1854 + 1854 1860 1855 + 1855 1860 1861 + 1861 1856 1855 + 1857 1856 1861 + 1861 1862 1857 + 1857 1862 1863 + 1820 1857 1863 + 1858 1864 1859 + 1865 1859 1864 + 1860 1859 1865 + 1865 1866 1860 + 1860 1866 1861 + 1866 1867 1861 + 1868 1861 1867 + 1868 1862 1861 + 1864 1869 1865 + 1869 1870 1865 + 1871 1865 1870 + 1871 1866 1865 + 1866 1871 1872 + 1872 1867 1866 + 1872 1873 1867 + 1867 1873 1868 + 1868 1873 1874 + 1875 1868 1874 + 1862 1868 1875 + 1870 1876 1871 + 1872 1871 1876 + 1877 1872 1876 + 1873 1872 1877 + 1877 1878 1873 + 1873 1878 1874 + 1879 1877 1876 + 1880 1877 1879 + 1880 1878 1877 + 1878 1880 1881 + 1881 1882 1878 + 1878 1882 1874 + 1876 1883 1879 + 1883 1884 1879 + 1884 1885 1879 + 1885 1886 1879 + 1887 1879 1886 + 1879 1887 1888 + 1879 1888 1880 + 1883 1876 1889 + 1890 1883 1889 + 1890 1891 1883 + 1892 1883 1891 + 1893 1892 1891 + 1893 1894 1892 + 1895 1889 1876 + 1889 1895 1896 + 1896 1897 1889 + 1889 1897 1898 + 1898 1890 1889 + 1891 1890 1898 + 1898 1899 1891 + 1893 1891 1899 + 1900 1895 1876 + 1895 1900 1901 + 1901 1902 1895 + 1896 1895 1902 + 1902 1903 1896 + 1904 1896 1903 + 1904 1897 1896 + 1897 1904 1905 + 1905 1898 1897 + 1905 1899 1898 + 1906 1902 1901 + 1902 1906 1907 + 1907 1903 1902 + 1908 1903 1907 + 1903 1908 1904 + 1904 1908 1909 + 1905 1904 1909 + 1910 1905 1909 + 1899 1905 1910 + 1906 1901 1911 + 1911 1912 1906 + 1907 1906 1912 + 1912 1913 1907 + 1913 1914 1907 + 1908 1907 1914 + 1914 1915 1908 + 1908 1915 1909 + 1858 1912 1911 + 1912 1858 1916 + 1916 1913 1912 + 1917 1913 1916 + 1913 1917 1918 + 1918 1914 1913 + 1915 1914 1918 + 1915 1918 1919 + 1919 1920 1915 + 1915 1920 1909 + 1921 1916 1858 + 1917 1916 1921 + 1921 1922 1917 + 1918 1917 1922 + 1922 1923 1918 + 1923 1924 1918 + 1924 1919 1918 + 1925 1919 1924 + 1920 1919 1925 + 1926 1921 1858 + 1927 1921 1926 + 1927 1922 1921 + 1922 1927 1928 + 1928 1923 1922 + 1929 1923 1928 + 1923 1929 1930 + 1930 1924 1923 + 1931 1926 1858 + 1932 1926 1931 + 1932 1933 1926 + 1926 1933 1927 + 1927 1933 1934 + 1928 1927 1934 + 1929 1928 1934 + 1931 1935 1932 + 1936 1932 1935 + 1933 1932 1936 + 1936 1934 1933 + 1937 1934 1936 + 1934 1937 1929 + 1929 1937 1938 + 1938 1939 1929 + 1939 1930 1929 + 1935 1931 1940 + 1940 1941 1935 + 1935 1941 1942 + 1942 1943 1935 + 1935 1943 1936 + 1937 1936 1943 + 1943 1944 1937 + 1937 1944 1938 + 1941 1940 1945 + 1945 1946 1941 + 1942 1941 1946 + 1946 1947 1942 + 1944 1942 1947 + 1944 1943 1942 + 1948 1946 1945 + 1946 1948 1949 + 1949 1947 1946 + 1950 1947 1949 + 1947 1950 1944 + 1944 1950 1938 + 1948 1945 1951 + 1951 1952 1948 + 1949 1948 1952 + 1952 1953 1949 + 1950 1949 1953 + 1953 1954 1950 + 1950 1954 1938 + 1952 1951 1836 + 1836 1955 1952 + 1952 1955 1956 + 1956 1953 1952 + 1954 1953 1956 + 1954 1956 1957 + 1957 1958 1954 + 1954 1958 1938 + 1955 1836 1959 + 1959 1960 1955 + 1956 1955 1960 + 1960 1957 1956 + 1961 1957 1960 + 1958 1957 1961 + 1958 1961 1962 + 1962 1963 1958 + 1958 1963 1938 + 1964 1959 1836 + 1965 1959 1964 + 1959 1965 1960 + 1960 1965 1961 + 1961 1965 1962 + 1965 1966 1962 + 1967 1962 1966 + 1963 1962 1967 + 1968 1964 1836 + 1969 1964 1968 + 1964 1969 1966 + 1964 1966 1965 + 1970 1968 1836 + 1971 1968 1970 + 1968 1971 1972 + 1968 1972 1969 + 1969 1972 1973 + 1967 1969 1973 + 1966 1969 1967 + 1835 1970 1836 + 1974 1970 1835 + 1970 1974 1975 + 1970 1975 1971 + 1971 1975 1976 + 1976 1977 1971 + 1972 1971 1977 + 1977 1973 1972 + 1835 1978 1974 + 1979 1974 1978 + 1975 1974 1979 + 1979 1980 1975 + 1975 1980 1976 + 1981 1978 1835 + 1978 1981 1982 + 1982 1983 1978 + 1978 1983 1979 + 1984 1979 1983 + 1984 1980 1979 + 1980 1984 1985 + 1985 1976 1980 + 1981 1835 1986 + 1986 1987 1981 + 1982 1981 1987 + 1987 1988 1982 + 1988 1989 1982 + 1990 1982 1989 + 1990 1983 1982 + 1983 1990 1984 + 1991 1987 1986 + 1987 1991 1992 + 1992 1988 1987 + 1992 1993 1988 + 1988 1993 1994 + 1994 1989 1988 + 1995 1989 1994 + 1989 1995 1990 + 1990 1995 1996 + 1984 1990 1996 + 1996 1997 1984 + 1997 1985 1984 + 1993 1992 1998 + 1998 1999 1993 + 1994 1993 1999 + 1999 2000 1994 + 2000 2001 1994 + 1995 1994 2001 + 2001 2002 1995 + 1995 2002 1996 + 1998 2003 1999 + 1999 2003 1846 + 1846 2000 1999 + 1846 2004 2000 + 2000 2004 2005 + 2005 2001 2000 + 2002 2001 2005 + 2002 2005 2006 + 2006 2007 2002 + 2002 2007 1996 + 2004 1846 2008 + 2008 2009 2004 + 2004 2009 2010 + 2005 2004 2010 + 2010 2006 2005 + 2011 2006 2010 + 2007 2006 2011 + 2007 2011 2012 + 2012 2013 2007 + 2007 2013 1996 + 2014 2009 2008 + 2009 2014 2015 + 2015 2010 2009 + 2015 2016 2010 + 2010 2016 2011 + 2011 2016 2017 + 2017 2012 2011 + 2018 2012 2017 + 2013 2012 2018 + 2019 2015 2014 + 2016 2015 2019 + 2019 2020 2016 + 2016 2020 2017 + 2021 2017 2020 + 2021 2022 2017 + 2017 2022 2018 + 2014 2023 2019 + 2024 2019 2023 + 2024 2020 2019 + 2020 2024 2021 + 2025 2023 2014 + 2026 2023 2025 + 2023 2026 2024 + 2024 2026 2027 + 2021 2024 2027 + 2014 2028 2025 + 2025 2028 2029 + 2029 2030 2025 + 2026 2025 2030 + 2030 2027 2026 + 2028 2014 2031 + 1881 1880 1888 + 2032 1881 1888 + 2033 1881 2032 + 2033 1882 1881 + 1882 2033 2034 + 2034 1874 1882 + 1888 2035 2032 + 2035 2036 2032 + 2036 2037 2032 + 2038 2032 2037 + 2032 2038 2039 + 2039 2040 2032 + 2032 2040 2033 + 2041 2035 1888 + 2041 2042 2035 + 2043 2035 2042 + 2044 2043 2042 + 2044 2045 2043 + 1888 1887 2041 + 2046 2041 1887 + 2042 2041 2046 + 2046 2047 2042 + 2042 2047 2048 + 2048 2044 2042 + 2045 2044 2048 + 2048 2049 2045 + 2050 2045 2049 + 2036 2045 2050 + 2050 2037 2036 + 1887 2051 2046 + 2051 2052 2046 + 2053 2046 2052 + 2053 2047 2046 + 2047 2053 2054 + 2054 2048 2047 + 2054 2049 2048 + 1886 2051 1887 + 2055 2051 1886 + 2051 2055 2056 + 2056 2052 2051 + 2057 2052 2056 + 2052 2057 2053 + 2053 2057 2058 + 2054 2053 2058 + 2059 2054 2058 + 2049 2054 2059 + 2055 1886 1885 + 1885 2060 2055 + 2056 2055 2060 + 2060 2061 2056 + 2057 2056 2061 + 2061 2062 2057 + 2057 2062 2058 + 2063 2060 1885 + 2060 2063 2064 + 2064 2061 2060 + 2062 2061 2064 + 2062 2064 2065 + 2065 2066 2062 + 2062 2066 2058 + 2063 1885 1884 + 1884 2067 2063 + 2063 2067 2068 + 2064 2063 2068 + 2068 2069 2064 + 2069 2065 2064 + 2070 2065 2069 + 2066 2065 2070 + 2066 2070 2071 + 2071 2072 2066 + 2066 2072 2058 + 2073 2068 2067 + 1910 2068 2073 + 2068 1910 2074 + 2074 2069 2068 + 2074 2075 2069 + 2069 2075 2070 + 2067 1893 2073 + 2073 1893 1899 + 1910 2073 1899 + 2074 1910 1909 + 1909 2076 2074 + 2076 2077 2074 + 2075 2074 2077 + 2077 2078 2075 + 2070 2075 2078 + 2078 2079 2070 + 2079 2080 2070 + 2080 2071 2070 + 2081 2076 1909 + 2076 2081 2082 + 2076 2082 2083 + 2083 2077 2076 + 2077 2083 2078 + 2078 2083 2084 + 2084 2079 2078 + 1909 2085 2081 + 2086 2081 2085 + 2082 2081 2086 + 2086 2087 2082 + 2082 2087 2088 + 2088 2084 2082 + 2084 2083 2082 + 1909 2089 2085 + 2085 2089 2090 + 2090 2091 2085 + 2085 2091 2086 + 2092 2086 2091 + 2091 2093 2092 + 2089 1909 2094 + 2094 2095 2089 + 2089 2095 2096 + 2096 2090 2089 + 2097 2090 2096 + 1920 2094 1909 + 2098 2094 1920 + 2094 2098 2095 + 2095 2098 2099 + 2099 2096 2095 + 2096 2099 2100 + 2100 2101 2096 + 2096 2101 2097 + 1920 1925 2098 + 2099 2098 1925 + 2102 2099 1925 + 2100 2099 2102 + 2102 2103 2100 + 2103 2104 2100 + 2091 2090 144 + 2034 2033 2040 + 2105 2034 2040 + 2106 2034 2105 + 1874 2034 2106 + 1874 2106 2107 + 2107 2108 1874 + 1874 2108 1875 + 2109 2105 2040 + 2110 2105 2109 + 2105 2110 2111 + 2105 2111 2106 + 2107 2106 2111 + 2111 2112 2107 + 2113 2107 2112 + 2108 2107 2113 + 2114 2109 2040 + 2115 2109 2114 + 2109 2115 2116 + 2109 2116 2110 + 2110 2116 2117 + 2118 2110 2117 + 2111 2110 2118 + 2118 2112 2111 + 2119 2114 2040 + 2120 2114 2119 + 2121 2114 2120 + 2114 2121 2115 + 2115 2121 2122 + 2122 2123 2115 + 2116 2115 2123 + 2123 2117 2116 + 2119 2124 2120 + 2125 2120 2124 + 2121 2120 2125 + 2125 2126 2121 + 2121 2126 2122 + 2127 2122 2126 + 2128 2122 2127 + 2122 2128 2129 + 2129 2123 2122 + 2130 2125 2124 + 2131 2125 2130 + 2131 2126 2125 + 2126 2131 2127 + 2132 2127 2131 + 2133 2127 2132 + 2127 2133 2128 + 2124 2134 2130 + 2134 2135 2130 + 2135 2136 2130 + 2137 2130 2136 + 2130 2137 2138 + 2130 2138 2131 + 2131 2138 2132 + 2139 2134 2124 + 2139 2140 2134 + 2141 2134 2140 + 33 2141 2140 + 2142 33 2140 + 2143 33 2142 + 2124 2144 2139 + 2145 2139 2144 + 2139 2145 2146 + 2140 2139 2146 + 2140 2146 2142 + 2147 2142 2146 + 2147 2148 2142 + 2142 2148 2143 + 2144 2124 2149 + 1741 1740 1739 + 1739 2150 1741 + 1741 2150 2151 + 2151 2152 1741 + 1741 2152 1732 + 2153 1732 2152 + 1726 1732 2153 + 2150 1739 2154 + 2154 2155 2150 + 2150 2155 2156 + 2156 2151 2150 + 2157 2151 2156 + 2151 2157 2158 + 2158 2152 2151 + 2152 2158 2153 + 2154 1739 1738 + 2159 2155 2154 + 2155 2159 2160 + 2160 2156 2155 + 2156 2160 2161 + 2161 2162 2156 + 2156 2162 2157 + 2163 2157 2162 + 2158 2157 2163 + 2163 2164 2158 + 2153 2158 2164 + 2160 2159 1751 + 1751 2165 2160 + 2161 2160 2165 + 2165 2166 2161 + 2167 2161 2166 + 2162 2161 2167 + 2167 2168 2162 + 2162 2168 2163 + 2169 2163 2168 + 2164 2163 2169 + 2170 2165 1751 + 2165 2170 2171 + 1751 2172 2170 + 2170 2172 2173 + 2173 2174 2170 + 2175 2170 2174 + 2174 2176 2175 + 2172 1751 1750 + 1750 1756 2172 + 2172 1756 2177 + 2177 2173 2172 + 2178 2173 2177 + 2173 2178 2179 + 2179 2174 2173 + 2174 2179 2180 + 2180 2176 2174 + 1761 2177 1756 + 2181 2177 1761 + 2177 2181 2178 + 2178 2181 2182 + 2182 2183 2178 + 2179 2178 2183 + 2183 2184 2179 + 2180 2179 2184 + 1761 1766 2181 + 2181 1766 2185 + 2185 2182 2181 + 2186 2182 2185 + 2182 2186 2187 + 2187 2183 2182 + 2183 2187 2188 + 2188 2184 2183 + 1771 2185 1766 + 2189 2185 1771 + 2185 2189 2186 + 2186 2189 2190 + 2190 2191 2186 + 2187 2186 2191 + 2191 2192 2187 + 2188 2187 2192 + 1771 2193 2189 + 2189 2193 2194 + 2194 2190 2189 + 2195 2190 2194 + 2190 2195 2196 + 2196 2191 2190 + 2191 2196 2197 + 2197 2192 2191 + 2193 1771 1770 + 1770 2198 2193 + 2193 2198 2199 + 2199 2194 2193 + 2200 2194 2199 + 2194 2200 2195 + 2195 2200 2201 + 2201 2202 2195 + 2196 2195 2202 + 2198 1770 1775 + 1775 2203 2198 + 2198 2203 2204 + 2204 2199 2198 + 2205 2199 2204 + 2199 2205 2200 + 2200 2205 2206 + 2206 2201 2200 + 2203 1775 1779 + 1779 2207 2203 + 2203 2207 2208 + 2208 2204 2203 + 2209 2204 2208 + 2204 2209 2205 + 2205 2209 2210 + 2210 2206 2205 + 2207 1779 1783 + 1783 2211 2207 + 2207 2211 2212 + 2212 2208 2207 + 2213 2208 2212 + 2208 2213 2209 + 2209 2213 2214 + 2214 2210 2209 + 2211 1783 1788 + 1788 2215 2211 + 2211 2215 2216 + 2216 2212 2211 + 2217 2212 2216 + 2212 2217 2213 + 2213 2217 2218 + 2218 2214 2213 + 2219 2215 1788 + 2215 2219 2220 + 2220 2216 2215 + 2216 2220 2221 + 2221 2222 2216 + 2216 2222 2217 + 2217 2222 2223 + 2218 2217 2223 + 2219 1788 1787 + 1787 1786 2219 + 2220 2219 1786 + 1786 1795 2220 + 1795 2224 2220 + 2221 2220 2225 + 2225 2226 2221 + 2227 2221 2226 + 2222 2221 2227 + 2227 2223 2222 + 2226 2228 2227 + 2229 2227 2228 + 2223 2227 2229 + 2230 2228 2226 + 2228 2230 2231 + 2231 2232 2228 + 2228 2232 2229 + 2229 2232 2233 + 2234 2229 2233 + 2229 2234 2223 + 2226 2235 2230 + 2236 2230 2235 + 2231 2230 2236 + 2236 2237 2231 + 2231 2237 2238 + 2238 2239 2231 + 2232 2231 2239 + 2239 2233 2232 + 1800 2235 2226 + 2235 1800 2240 + 2240 2241 2235 + 2235 2241 2236 + 2242 2236 2241 + 2236 2242 2243 + 2243 2237 2236 + 2226 2244 1800 + 2240 1800 1799 + 1799 2245 2240 + 2246 2240 2245 + 2240 2246 2247 + 2247 2241 2240 + 2241 2247 2242 + 2242 2247 2248 + 2248 2249 2242 + 2243 2242 2249 + 1798 2245 1799 + 2250 2245 1798 + 2245 2250 2246 + 2246 2250 2251 + 2252 2246 2251 + 2247 2246 2252 + 2252 2248 2247 + 2252 2253 2248 + 2248 2253 2254 + 2254 2249 2248 + 1798 1805 2250 + 2250 1805 2255 + 2255 2251 2250 + 2251 2255 2256 + 2256 2257 2251 + 2251 2257 2258 + 2258 2259 2251 + 2251 2259 2252 + 2253 2252 2259 + 1810 2255 1805 + 2256 2255 1810 + 1810 2260 2256 + 2256 2260 2261 + 2261 2262 2256 + 2257 2256 2262 + 2262 2263 2257 + 2257 2263 2264 + 2264 2258 2257 + 2265 2258 2264 + 2266 2260 1810 + 2260 2266 2267 + 2267 2268 2260 + 2260 2268 2261 + 2266 1810 1809 + 1809 1815 2266 + 2266 1815 2269 + 2267 2266 2269 + 2270 2267 2269 + 2271 2267 2270 + 2271 2268 2267 + 2268 2271 2272 + 2272 2261 2268 + 1814 2269 1815 + 1820 2269 1814 + 2269 1820 2273 + 2273 2274 2269 + 2269 2274 2275 + 2275 2270 2269 + 2276 2270 2275 + 2276 2277 2270 + 2270 2277 2271 + 1863 2273 1820 + 2278 2273 1863 + 2273 2278 2274 + 2274 2278 2279 + 2279 2275 2274 + 2279 2280 2275 + 2275 2280 2276 + 2276 2280 2281 + 2281 2282 2276 + 2277 2276 2282 + 1863 2283 2278 + 2278 2283 2284 + 2279 2278 2284 + 2285 2279 2284 + 2280 2279 2285 + 2285 2281 2280 + 2281 2285 2286 + 2281 2286 2287 + 2287 2282 2281 + 2283 1863 2288 + 2283 2288 2289 + 2289 2290 2283 + 2283 2290 2284 + 2288 1863 2291 + 2291 2292 2288 + 2288 2292 2293 + 2293 2289 2288 + 2294 2289 2293 + 2294 2290 2289 + 2290 2294 2295 + 2295 2284 2290 + 2296 2291 1863 + 2297 2291 2296 + 2291 2297 2292 + 2292 2297 2298 + 2298 2293 2292 + 2298 2299 2293 + 2293 2299 2294 + 2294 2299 2300 + 2300 2295 2294 + 2301 2296 1863 + 2302 2296 2301 + 2302 2303 2296 + 2296 2303 2297 + 2298 2297 2303 + 2303 2304 2298 + 2299 2298 2304 + 2304 2305 2299 + 2299 2305 2300 + 1862 2301 1863 + 1875 2301 1862 + 2301 1875 2306 + 2301 2306 2302 + 2302 2306 2307 + 2307 2308 2302 + 2303 2302 2308 + 2308 2304 2303 + 2308 2305 2304 + 2305 2308 2307 + 2307 2309 2305 + 2305 2309 2300 + 2306 1875 2108 + 2108 2310 2306 + 2306 2310 2307 + 2310 2311 2307 + 2312 2307 2311 + 2312 2309 2307 + 2309 2312 2313 + 2313 2300 2309 + 2113 2310 2108 + 2310 2113 2314 + 2314 2311 2310 + 2311 2314 2315 + 2315 2316 2311 + 2311 2316 2312 + 2312 2316 2317 + 2313 2312 2317 + 2318 2314 2113 + 2315 2314 2318 + 2318 2319 2315 + 2320 2315 2319 + 2316 2315 2320 + 2320 2321 2316 + 2316 2321 2317 + 2113 2322 2318 + 2323 2318 2322 + 2318 2323 2324 + 2324 2319 2318 + 2319 2324 2325 + 2325 2326 2319 + 2319 2326 2320 + 2112 2322 2113 + 2112 2118 2322 + 2322 2118 2323 + 2117 2323 2118 + 2324 2323 2117 + 2117 2327 2324 + 2324 2327 2328 + 2328 2325 2324 + 2329 2325 2328 + 2325 2329 2330 + 2330 2326 2325 + 2326 2330 2331 + 2331 2320 2326 + 2327 2117 2123 + 2123 2129 2327 + 2327 2129 2332 + 2332 2328 2327 + 2328 2332 2333 + 2333 2334 2328 + 2328 2334 2329 + 2329 2334 2335 + 2335 2336 2329 + 2330 2329 2336 + 2332 2129 2337 + 2337 2338 2332 + 2333 2332 2338 + 2338 2339 2333 + 2340 2333 2339 + 2334 2333 2340 + 2340 2335 2334 + 2129 2128 2337 + 2341 2337 2128 + 2337 2341 2342 + 2337 2342 2343 + 2343 2338 2337 + 2338 2343 2339 + 2339 2343 2344 + 2344 2345 2339 + 2339 2345 2340 + 2128 2133 2341 + 2346 2341 2133 + 2342 2341 2346 + 2346 2347 2342 + 2342 2347 2344 + 2344 2343 2342 + 2133 2348 2346 + 2349 2346 2348 + 2347 2346 2349 + 2349 2350 2347 + 2347 2350 2351 + 2351 2352 2347 + 2347 2352 2344 + 2132 2348 2133 + 2348 2132 2353 + 2353 2354 2348 + 2348 2354 2349 + 2349 2354 2355 + 2355 2356 2349 + 2350 2349 2356 + 2356 2357 2350 + 2351 2350 2357 + 2353 2132 2358 + 2358 2359 2353 + 2360 2353 2359 + 2354 2353 2360 + 2360 2355 2354 + 2355 2360 2361 + 2361 2362 2355 + 2355 2362 2363 + 2363 2356 2355 + 2357 2356 2363 + 2358 2364 2359 + 2359 2364 2365 + 2365 2366 2359 + 2359 2366 2360 + 2361 2360 2366 + 2364 2358 145 + 145 2367 2364 + 2364 2367 2368 + 2368 2365 2364 + 2369 2365 2368 + 2366 2365 2369 + 2369 2370 2366 + 2366 2370 2361 + 2367 145 2371 + 2371 2372 2367 + 2367 2372 2373 + 2373 2368 2367 + 2373 2374 2368 + 2368 2374 2369 + 2371 145 2375 + 2375 2376 2371 + 2371 2376 2377 + 2377 2378 2371 + 2379 2378 2377 + 2377 2380 2379 + 2375 145 2132 + 2138 2375 2132 + 2381 2375 2138 + 2375 2381 2376 + 2376 2381 2382 + 2382 2383 2376 + 2376 2383 2377 + 2383 2384 2377 + 2385 2377 2384 + 2385 2380 2377 + 2138 2137 2381 + 2381 2137 2386 + 2382 2381 2386 + 2136 2386 2137 + 2387 2386 2136 + 2386 2387 2388 + 2388 2389 2386 + 2388 2390 2389 + 2391 2389 2390 + 2392 2391 2390 + 2136 2393 2387 + 2387 2393 2394 + 2394 2395 2387 + 2387 2395 2396 + 2396 2388 2387 + 2390 2388 2396 + 2396 2397 2390 + 2392 2390 2397 + 2393 2136 2398 + 2398 2399 2393 + 2394 2393 2399 + 2372 2371 2400 + 2400 2401 2372 + 2372 2401 2402 + 2373 2372 2402 + 2402 2403 2373 + 2374 2373 2403 + 2400 2404 2401 + 2403 2405 2374 + 2374 2405 2406 + 2369 2374 2406 + 2406 2407 2369 + 2370 2369 2407 + 2407 2408 2370 + 2361 2370 2408 + 2405 2409 2406 + 2410 2406 2409 + 2411 2406 2410 + 2406 2411 2412 + 2412 2407 2406 + 2407 2412 2413 + 2413 2408 2407 + 2409 2414 2410 + 2410 2414 2415 + 2416 2410 2415 + 2411 2410 2416 + 2416 2417 2411 + 2414 2409 2418 + 2419 2418 2409 + 2420 2418 2419 + 2421 2418 2420 + 2420 2415 2421 + 2422 2415 2420 + 2415 2422 2423 + 2423 2416 2415 + 2423 2424 2416 + 2425 2419 2409 + 2426 2419 2425 + 2419 2426 2427 + 2427 2428 2419 + 2419 2428 2420 + 2422 2420 2428 + 2428 2429 2422 + 2422 2429 1293 + 2423 2422 1293 + 2425 2430 2426 + 2412 2411 2431 + 2429 2428 2427 + 2429 2427 2432 + 2432 2433 2429 + 2429 2433 1293 + 2433 1295 1293 + 1295 1294 1293 + 2427 2426 2432 + 2426 2434 2432 + 2435 2432 2434 + 2433 2432 2435 + 2433 2435 2436 + 2436 1295 2433 + 1295 2436 1290 + 2426 2403 2434 + 2403 2402 2434 + 2437 2434 2402 + 2434 2437 2435 + 2435 2437 2438 + 2438 2436 2435 + 1290 2436 2438 + 2438 2439 1290 + 1290 2439 2440 + 2440 1281 1290 + 2441 2437 2402 + 2401 2441 2402 + 2437 2442 2438 + 2442 2380 2438 + 2443 2438 2380 + 2443 2439 2438 + 2439 2443 2444 + 2444 2440 2439 + 2444 2445 2440 + 2440 2445 2446 + 2446 1281 2440 + 1281 2446 1277 + 2380 2385 2443 + 2443 2385 2447 + 2447 2448 2443 + 2448 2449 2443 + 2449 2444 2443 + 2445 2444 2449 + 2449 2450 2445 + 2446 2445 2450 + 2450 2451 2446 + 1277 2446 2451 + 2385 2452 2447 + 2452 2453 2447 + 2453 2454 2447 + 2454 2455 2447 + 2455 2456 2447 + 2456 2457 2447 + 2458 2447 2457 + 2447 2458 2459 + 2447 2459 2460 + 2460 2448 2447 + 2384 2452 2385 + 2452 2384 2461 + 2452 2461 2462 + 2462 2453 2452 + 2453 2462 2463 + 2453 2463 2397 + 2397 2454 2453 + 2461 2384 2383 + 2383 2464 2461 + 2461 2464 2465 + 2465 2462 2461 + 2463 2462 2465 + 2465 2392 2463 + 2463 2392 2397 + 2382 2464 2383 + 2464 2382 2465 + 2382 2391 2465 + 2454 2397 2396 + 2454 2396 2395 + 2395 2455 2454 + 2455 2395 2394 + 2455 2394 2466 + 2466 2456 2455 + 2456 2466 2467 + 2456 2467 2468 + 2468 2457 2456 + 2457 2468 2469 + 2457 2469 2458 + 2470 2466 2394 + 2467 2466 2470 + 2470 2471 2467 + 2467 2471 2472 + 2472 2473 2467 + 2473 2474 2467 + 2474 2468 2467 + 2469 2468 2474 + 2475 2470 2394 + 2476 2470 2475 + 2476 2471 2470 + 2471 2476 2477 + 2477 2472 2471 + 2477 2478 2472 + 2472 2478 206 + 206 2473 2472 + 2479 2475 2394 + 2480 2475 2479 + 2481 2475 2480 + 2475 2481 2476 + 2476 2481 2482 + 2482 2477 2476 + 2478 2477 2482 + 2482 2483 2478 + 206 2478 2483 + 2483 2484 206 + 2485 206 2484 + 2479 2143 2480 + 2480 2143 2148 + 2481 2480 2148 + 2148 2147 2481 + 2481 2147 2482 + 2147 2486 2482 + 2486 2487 2482 + 2487 2488 2482 + 2488 2489 2482 + 2489 2490 2482 + 2490 2491 2482 + 2491 2492 2482 + 2493 2482 2492 + 2482 2493 2483 + 2146 2486 2147 + 2486 2146 2145 + 2486 2145 2494 + 2494 2487 2486 + 2487 2494 2495 + 2487 2495 2496 + 2496 2488 2487 + 2488 2496 2497 + 2488 2497 2498 + 2498 2489 2488 + 2144 2494 2145 + 2495 2494 2144 + 2144 31 2495 + 2495 31 2499 + 2499 2496 2495 + 2497 2496 2499 + 2499 2500 2497 + 2497 2500 2039 + 2039 2498 2497 + 2501 2498 2039 + 2489 2498 2501 + 2489 2501 2502 + 2502 2490 2489 + 31 2503 2499 + 2503 245 2499 + 2500 2499 245 + 2039 2038 2501 + 2501 2038 2504 + 2504 2502 2501 + 2505 2502 2504 + 2490 2502 2505 + 2490 2505 2506 + 2506 2491 2490 + 2491 2506 2507 + 2491 2507 2508 + 2508 2492 2491 + 2037 2504 2038 + 2050 2504 2037 + 2504 2050 2505 + 2505 2050 2049 + 2049 2509 2505 + 2509 2506 2505 + 2507 2506 2509 + 2509 2510 2507 + 2507 2510 2511 + 2511 2512 2507 + 2512 2513 2507 + 2513 2508 2507 + 2059 2509 2049 + 2059 2510 2509 + 2510 2059 2514 + 2514 2511 2510 + 2514 2515 2511 + 2511 2515 2516 + 2516 2512 2511 + 2517 2514 2059 + 2515 2514 2517 + 2517 2518 2515 + 2515 2518 2519 + 2516 2515 2519 + 2520 2516 2519 + 2521 2516 2520 + 2522 2516 2521 + 2058 2517 2059 + 2523 2517 2058 + 2517 2523 2518 + 2518 2523 2524 + 2524 2519 2518 + 2519 2524 2525 + 2519 2525 2526 + 2526 2520 2519 + 2527 2520 2526 + 2526 2528 2527 + 2058 2529 2523 + 2529 2524 2523 + 2525 2524 2529 + 2529 2530 2525 + 2531 2525 2530 + 2525 2531 2526 + 2528 2526 2531 + 2058 2530 2529 + 2532 2530 2058 + 2530 2532 2533 + 2531 2530 2533 + 2534 2531 2533 + 2531 2534 2528 + 2072 2532 2058 + 2072 2071 2532 + 2532 2071 2533 + 2071 2080 2533 + 2533 2080 2535 + 2533 2535 2534 + 2534 2535 2536 + 2536 2537 2534 + 2528 2534 2537 + 2537 2538 2528 + 2528 2538 2539 + 2539 2540 2528 + 2541 2537 2536 + 2537 2541 2542 + 2542 2538 2537 + 2538 2542 2543 + 2543 2539 2538 + 2536 2544 2541 + 2541 2544 2545 + 2545 2546 2541 + 2542 2541 2546 + 2546 2547 2542 + 2543 2542 2547 + 2544 2536 2548 + 2548 2549 2544 + 2544 2549 2550 + 2550 2545 2544 + 2551 2545 2550 + 2545 2551 2552 + 2552 2546 2545 + 2547 2546 2552 + 2548 2536 2553 + 2553 2554 2548 + 2548 2554 2555 + 2555 2556 2548 + 2549 2548 2556 + 2557 2553 2536 + 2520 2558 2521 + 2520 2559 2558 + 2040 2039 2500 + 2500 2560 2040 + 2484 2561 2485 + 2562 2561 2484 + 2484 2563 2562 + 2562 2563 2564 + 2564 2565 2562 + 2566 2562 2565 + 2567 2562 2566 + 2563 2484 2483 + 2483 2493 2563 + 2564 2563 2493 + 2493 2568 2564 + 2513 2564 2568 + 2564 2513 2565 + 2513 2569 2565 + 2565 2569 2570 + 2570 2571 2565 + 2565 2571 2566 + 2492 2568 2493 + 2492 2508 2568 + 2568 2508 2513 + 2569 2513 2512 + 2512 2572 2569 + 2569 2572 2573 + 2573 2570 2569 + 2574 2570 2573 + 2570 2574 2575 + 2575 2571 2570 + 2571 2575 2576 + 2576 2566 2571 + 2577 2572 2512 + 2572 2577 2578 + 2578 2573 2572 + 2579 2573 2578 + 2573 2579 2574 + 2574 2579 2580 + 2580 2581 2574 + 2575 2574 2581 + 2581 2582 2575 + 2576 2575 2582 + 2583 2578 2577 + 2584 2578 2583 + 2578 2584 2579 + 2579 2584 2585 + 2585 2580 2579 + 2577 2586 2583 + 2539 2583 2586 + 2587 2583 2539 + 2583 2587 2584 + 2584 2587 2588 + 2588 2585 2584 + 2589 2585 2588 + 2580 2585 2589 + 2586 2590 2539 + 2539 2543 2587 + 2587 2543 2591 + 2591 2588 2587 + 2592 2588 2591 + 2588 2592 2589 + 2589 2592 2593 + 2594 2589 2593 + 2595 2589 2594 + 2589 2595 2580 + 2547 2591 2543 + 2592 2591 2547 + 2547 2593 2592 + 2552 2593 2547 + 2593 2552 2596 + 2596 2597 2593 + 2593 2597 2594 + 2598 2594 2597 + 2594 2598 2599 + 2599 2600 2594 + 2594 2600 2595 + 2596 2552 2601 + 2601 2602 2596 + 2603 2596 2602 + 2596 2603 2604 + 2604 2597 2596 + 2597 2604 2598 + 2552 2551 2601 + 2605 2601 2551 + 2606 2601 2605 + 2601 2606 2607 + 2607 2602 2601 + 2608 2602 2607 + 2602 2608 2603 + 2551 2550 2605 + 2605 2550 2549 + 2549 2609 2605 + 2610 2605 2609 + 2605 2610 2606 + 2606 2610 2611 + 2611 2612 2606 + 2606 2612 2613 + 2607 2606 2613 + 2556 2609 2549 + 2609 2556 142 + 142 2614 2609 + 2609 2614 2610 + 2611 2610 2614 + 2614 2615 2611 + 2616 2611 2615 + 2612 2611 2616 + 2612 2616 2617 + 2617 2613 2612 + 142 2556 2555 + 2555 2618 142 + 2619 2259 2258 + 2259 2619 2253 + 2254 2253 2619 + 2620 2254 2619 + 2621 2254 2620 + 2254 2621 2622 + 2622 2249 2254 + 2249 2622 2243 + 2619 2623 2620 + 2624 2620 2623 + 2620 2624 2625 + 2620 2625 2621 + 2626 2621 2625 + 2622 2621 2626 + 2627 2623 2619 + 2623 2627 2628 + 2628 2629 2623 + 2623 2629 2624 + 2630 2624 2629 + 2625 2624 2630 + 2630 2631 2625 + 2625 2631 2626 + 2619 2265 2627 + 2632 2627 2265 + 2628 2627 2632 + 2632 2633 2628 + 2628 2633 2634 + 2634 2635 2628 + 2629 2628 2635 + 2636 2265 2619 + 2637 2166 2165 + 2166 2637 2638 + 2638 2639 2166 + 2166 2639 2167 + 2640 2167 2639 + 2168 2167 2640 + 2640 2641 2168 + 2168 2641 2169 + 2639 2642 2640 + 2643 2640 2642 + 2641 2640 2643 + 2643 2644 2641 + 2641 2644 2645 + 2645 2169 2641 + 2646 2169 2645 + 2169 2646 2164 + 2647 2642 2639 + 2642 2647 2648 + 2648 2649 2642 + 2642 2649 2643 + 2650 2643 2649 + 2644 2643 2650 + 2650 2651 2644 + 2644 2651 2652 + 2652 2645 2644 + 2653 2648 2647 + 2654 2648 2653 + 2648 2654 2649 + 2649 2654 2650 + 2650 2654 2655 + 2656 2650 2655 + 2651 2650 2656 + 2647 2657 2653 + 2657 2658 2653 + 2659 2653 2658 + 2659 2660 2653 + 2653 2660 2654 + 2661 2657 2647 + 2662 2657 2661 + 2657 2662 2663 + 2663 2658 2657 + 2663 2664 2658 + 2658 2664 2659 + 2659 2664 16 + 2647 2638 2661 + 2176 2661 2638 + 2665 2661 2176 + 2661 2665 2662 + 2666 2638 2647 + 2638 2667 2176 + 2176 2180 2665 + 2665 2180 2668 + 2668 2669 2665 + 2662 2665 2669 + 2669 2670 2662 + 2662 2670 2671 + 2663 2662 2671 + 2672 2663 2671 + 2671 2673 2672 + 2184 2668 2180 + 2674 2668 2184 + 2668 2674 2675 + 2675 2669 2668 + 2669 2675 2676 + 2676 2670 2669 + 2670 2676 2677 + 2677 2671 2670 + 2184 2188 2674 + 2674 2188 2678 + 2678 2679 2674 + 2675 2674 2679 + 2679 2680 2675 + 2676 2675 2680 + 2680 2681 2676 + 2677 2676 2681 + 2192 2678 2188 + 2682 2678 2192 + 2678 2682 2683 + 2683 2679 2678 + 2679 2683 2684 + 2684 2680 2679 + 2680 2684 2685 + 2685 2681 2680 + 2192 2197 2682 + 2682 2197 2686 + 2686 2687 2682 + 2683 2682 2687 + 2687 2688 2683 + 2683 2688 2689 + 2684 2683 2689 + 2689 2690 2684 + 2685 2684 2690 + 2691 2686 2197 + 2692 2686 2691 + 2686 2692 2693 + 2693 2687 2686 + 2693 2688 2687 + 2688 2693 2694 + 2694 2689 2688 + 2197 2196 2691 + 2202 2691 2196 + 2695 2691 2202 + 2691 2695 2692 + 2692 2695 2696 + 2696 2697 2692 + 2692 2697 2694 + 2694 2693 2692 + 2202 2698 2695 + 2695 2698 2699 + 2699 2696 2695 + 2700 2696 2699 + 2696 2700 2701 + 2698 2202 2201 + 2201 2702 2698 + 2698 2702 2703 + 2703 2699 2698 + 2704 2699 2703 + 2699 2704 2700 + 2700 2704 2705 + 2705 2706 2700 + 2701 2700 2706 + 2702 2201 2206 + 2206 2707 2702 + 2702 2707 2708 + 2708 2703 2702 + 2709 2703 2708 + 2703 2709 2704 + 2704 2709 2710 + 2710 2705 2704 + 2707 2206 2210 + 2210 2711 2707 + 2707 2711 2712 + 2712 2708 2707 + 2713 2708 2712 + 2708 2713 2709 + 2709 2713 2714 + 2714 2710 2709 + 2711 2210 2214 + 2214 2715 2711 + 2711 2715 2716 + 2716 2712 2711 + 2717 2712 2716 + 2712 2717 2713 + 2713 2717 2718 + 2718 2714 2713 + 2715 2214 2218 + 2218 2719 2715 + 2715 2719 2720 + 2720 2716 2715 + 2721 2716 2720 + 2716 2721 2717 + 2717 2721 2722 + 2722 2718 2717 + 2719 2218 2723 + 2723 2724 2719 + 2719 2724 2725 + 2725 2720 2719 + 2726 2720 2725 + 2720 2726 2721 + 2721 2726 2727 + 2727 2722 2721 + 2723 2218 2223 + 2728 2723 2223 + 2729 2723 2728 + 2729 2724 2723 + 2724 2729 2730 + 2730 2725 2724 + 2730 2731 2725 + 2725 2731 2726 + 2726 2731 2732 + 2223 2733 2728 + 2734 2728 2733 + 2734 2735 2728 + 2728 2735 2729 + 2729 2735 2736 + 2736 2730 2729 + 2737 2730 2736 + 2738 2733 2223 + 2738 2739 2733 + 2733 2739 2734 + 2740 2734 2739 + 2735 2734 2740 + 2740 2741 2735 + 2735 2741 2736 + 2223 2234 2738 + 2742 2738 2234 + 2739 2738 2742 + 2742 2743 2739 + 2739 2743 2740 + 2743 2744 2740 + 2744 2745 2740 + 2746 2740 2745 + 2746 2741 2740 + 2234 2747 2742 + 2748 2742 2747 + 2742 2748 2749 + 2749 2743 2742 + 2743 2749 2750 + 2750 2744 2743 + 2233 2747 2234 + 2751 2747 2233 + 2747 2751 2748 + 2752 2748 2751 + 2749 2748 2752 + 2752 2753 2749 + 2749 2753 2754 + 2754 2750 2749 + 2755 2750 2754 + 2744 2750 2755 + 2233 2239 2751 + 2751 2239 2238 + 2238 2756 2751 + 2751 2756 2752 + 2757 2752 2756 + 2752 2757 2758 + 2758 2753 2752 + 2753 2758 2759 + 2759 2754 2753 + 2760 2756 2238 + 2756 2760 2757 + 2757 2760 2761 + 2761 2762 2757 + 2758 2757 2762 + 2762 2763 2758 + 2758 2763 2764 + 2764 2759 2758 + 2238 2765 2760 + 2760 2765 2766 + 2766 2761 2760 + 2761 2766 2626 + 2626 2767 2761 + 2761 2767 2768 + 2768 2762 2761 + 2763 2762 2768 + 2765 2238 2237 + 2237 2243 2765 + 2765 2243 2622 + 2622 2766 2765 + 2626 2766 2622 + 2727 2726 2769 + 2767 2626 2631 + 2631 2770 2767 + 2767 2770 2771 + 2771 2768 2767 + 2772 2768 2771 + 2768 2772 2763 + 2763 2772 2773 + 2773 2764 2763 + 2770 2631 2630 + 2630 2774 2770 + 2770 2774 2775 + 2775 2771 2770 + 2776 2771 2775 + 2771 2776 2772 + 2772 2776 2777 + 2777 2773 2772 + 2774 2630 2778 + 2778 2779 2774 + 2774 2779 2780 + 2780 2775 2774 + 2781 2775 2780 + 2775 2781 2776 + 2776 2781 2782 + 2782 2777 2776 + 2778 2630 2629 + 2629 2783 2778 + 2784 2778 2783 + 2784 2779 2778 + 2779 2784 2785 + 2785 2780 2779 + 2786 2780 2785 + 2780 2786 2781 + 2781 2786 2787 + 2787 2782 2781 + 2635 2783 2629 + 2788 2783 2635 + 2783 2788 2784 + 2784 2788 2789 + 2789 2790 2784 + 2790 2791 2784 + 2791 2785 2784 + 2792 2785 2791 + 2785 2792 2786 + 2635 2793 2788 + 2788 2793 2794 + 2794 2789 2788 + 2795 2789 2794 + 2789 2795 2796 + 2796 2790 2789 + 2793 2635 2634 + 2634 2797 2793 + 2794 2793 2797 + 2797 2798 2794 + 2799 2794 2798 + 2794 2799 2795 + 2800 2797 2634 + 2797 2800 2801 + 2801 2798 2797 + 2801 2802 2798 + 2798 2802 2799 + 2799 2802 2803 + 2803 2804 2799 + 2795 2799 2804 + 2634 2805 2800 + 2800 2805 2806 + 2806 2807 2800 + 2801 2800 2807 + 2808 2801 2807 + 2802 2801 2808 + 2808 2809 2802 + 2802 2809 2803 + 2805 2634 2810 + 2810 2811 2805 + 2805 2811 2812 + 2812 2806 2805 + 2813 2806 2812 + 2813 2807 2806 + 2633 2810 2634 + 2814 2810 2633 + 2814 2811 2810 + 2811 2814 2815 + 2815 2812 2811 + 2812 2815 2816 + 2816 2817 2812 + 2812 2817 2813 + 2633 2818 2814 + 2814 2818 2819 + 2819 2815 2814 + 2816 2815 2819 + 2819 2820 2816 + 2816 2820 2821 + 2821 2822 2816 + 2817 2816 2822 + 2818 2633 2632 + 2632 2823 2818 + 2818 2823 2824 + 2824 2819 2818 + 2820 2819 2824 + 2824 2825 2820 + 2820 2825 2826 + 2826 2821 2820 + 2823 2632 2827 + 2827 2828 2823 + 2823 2828 2829 + 2829 2824 2823 + 2825 2824 2829 + 2829 2830 2825 + 2825 2830 2831 + 2831 2826 2825 + 2265 2827 2632 + 2264 2827 2265 + 2828 2827 2264 + 2264 2832 2828 + 2828 2832 2833 + 2833 2829 2828 + 2829 2833 2834 + 2834 2830 2829 + 2830 2834 2835 + 2835 2831 2830 + 2832 2264 2263 + 2263 2836 2832 + 2832 2836 2837 + 2837 2833 2832 + 2834 2833 2837 + 2837 2838 2834 + 2834 2838 2839 + 2839 2835 2834 + 2262 2836 2263 + 2836 2262 2261 + 2261 2840 2836 + 2836 2840 2837 + 2841 2837 2840 + 2841 2838 2837 + 2838 2841 2842 + 2842 2843 2838 + 2838 2843 2839 + 2844 2840 2261 + 2840 2844 2841 + 2841 2844 2845 + 2842 2841 2845 + 2845 2846 2842 + 2847 2842 2846 + 2847 2843 2842 + 2843 2847 2848 + 2848 2839 2843 + 2261 2272 2844 + 2844 2272 2849 + 2849 2845 2844 + 2845 2849 2850 + 2845 2850 2851 + 2851 2846 2845 + 2852 2846 2851 + 2846 2852 2847 + 2847 2852 2853 + 2853 2848 2847 + 2854 2849 2272 + 2850 2849 2854 + 2854 2287 2850 + 2850 2287 2855 + 2851 2850 2855 + 2856 2851 2855 + 2852 2851 2856 + 2856 2857 2852 + 2852 2857 2853 + 2272 2271 2854 + 2271 2277 2854 + 2282 2854 2277 + 2854 2282 2287 + 2287 2286 2855 + 2286 2858 2855 + 2858 2859 2855 + 2860 2855 2859 + 2860 2861 2855 + 2855 2861 2862 + 2862 2863 2855 + 2855 2863 2856 + 2864 2858 2286 + 2864 2865 2858 + 2858 2865 2866 + 2866 2859 2858 + 2866 2867 2859 + 2859 2867 2860 + 2286 2285 2864 + 2284 2864 2285 + 2865 2864 2284 + 2284 2868 2865 + 2865 2868 2869 + 2869 2866 2865 + 2867 2866 2869 + 2869 2870 2867 + 2860 2867 2870 + 2870 2871 2860 + 2861 2860 2871 + 2295 2868 2284 + 2868 2295 2300 + 2300 2872 2868 + 2868 2872 2869 + 2872 2873 2869 + 2874 2869 2873 + 2869 2874 2875 + 2875 2870 2869 + 2870 2875 2876 + 2876 2871 2870 + 2313 2872 2300 + 2872 2313 2877 + 2877 2873 2872 + 2877 2878 2873 + 2873 2878 2874 + 2879 2874 2878 + 2875 2874 2879 + 2879 2880 2875 + 2875 2880 2881 + 2881 2876 2875 + 2317 2877 2313 + 2878 2877 2317 + 2317 2882 2878 + 2878 2882 2879 + 2882 2883 2879 + 2884 2879 2883 + 2884 2880 2879 + 2880 2884 2885 + 2885 2881 2880 + 2886 2882 2317 + 2882 2886 2887 + 2887 2883 2882 + 2887 2888 2883 + 2883 2888 2884 + 2884 2888 2889 + 2885 2884 2889 + 2886 2317 2321 + 2321 2890 2886 + 2886 2890 2891 + 2887 2886 2891 + 2891 2892 2887 + 2888 2887 2892 + 2892 2889 2888 + 2890 2321 2320 + 2320 2331 2890 + 2890 2331 2893 + 2893 2891 2890 + 2891 2893 2894 + 2894 2895 2891 + 2891 2895 2896 + 2896 2892 2891 + 2892 2896 2897 + 2897 2889 2892 + 2898 2893 2331 + 2894 2893 2898 + 2898 2899 2894 + 2894 2899 2900 + 2900 2901 2894 + 2895 2894 2901 + 2331 2330 2898 + 2336 2898 2330 + 2898 2336 2902 + 2902 2899 2898 + 2899 2902 2903 + 2903 2900 2899 + 2900 2903 2904 + 2904 2905 2900 + 2900 2905 2906 + 2906 2901 2900 + 2902 2336 2335 + 2335 2907 2902 + 2902 2907 2908 + 2908 2903 2902 + 2904 2903 2908 + 2908 2909 2904 + 2910 2904 2909 + 2905 2904 2910 + 2910 2911 2905 + 2906 2905 2911 + 2907 2335 2340 + 2340 2912 2907 + 2907 2912 2913 + 2913 2908 2907 + 2908 2913 2914 + 2914 2909 2908 + 2909 2914 2915 + 2915 2916 2909 + 2909 2916 2910 + 2912 2340 2917 + 2917 2918 2912 + 2913 2912 2918 + 2918 2919 2913 + 2914 2913 2919 + 2919 2920 2914 + 2914 2920 2921 + 2921 2915 2914 + 2345 2917 2340 + 2922 2917 2345 + 2917 2922 2923 + 2923 2918 2917 + 2918 2923 2924 + 2924 2919 2918 + 2924 2920 2919 + 2920 2924 2925 + 2925 2921 2920 + 2345 2926 2922 + 2927 2922 2926 + 2923 2922 2927 + 2927 2928 2923 + 2924 2923 2928 + 2928 2925 2924 + 2929 2925 2928 + 2925 2929 2930 + 2930 2921 2925 + 2344 2926 2345 + 2926 2344 2931 + 2931 2932 2926 + 2926 2932 2927 + 2933 2927 2932 + 2927 2933 2934 + 2934 2928 2927 + 2928 2934 2929 + 2352 2931 2344 + 2935 2931 2352 + 2931 2935 2936 + 2936 2932 2931 + 2932 2936 2933 + 2933 2936 2937 + 2938 2933 2937 + 2934 2933 2938 + 2938 2939 2934 + 2929 2934 2939 + 2352 2940 2935 + 2935 2940 2941 + 2941 2942 2935 + 2936 2935 2942 + 2942 2937 2936 + 2943 2940 2352 + 2940 2943 2944 + 2944 2941 2940 + 2945 2941 2944 + 2941 2945 2946 + 2946 2942 2941 + 2942 2946 2947 + 2947 2937 2942 + 2352 2351 2943 + 2943 2351 2948 + 2948 2949 2943 + 2943 2949 2950 + 2950 2944 2943 + 2945 2944 2950 + 2950 2951 2945 + 2945 2951 2952 + 2952 2946 2945 + 2947 2946 2952 + 2357 2948 2351 + 2953 2948 2357 + 2949 2948 2953 + 2953 2954 2949 + 2949 2954 2955 + 2955 2956 2949 + 2949 2956 2950 + 2957 2950 2956 + 2951 2950 2957 + 2357 2958 2953 + 2959 2953 2958 + 2954 2953 2959 + 2959 2960 2954 + 2955 2954 2960 + 2960 2961 2955 + 2962 2955 2961 + 2955 2962 2956 + 2956 2962 2957 + 2363 2958 2357 + 2958 2363 2963 + 2963 2964 2958 + 2958 2964 2959 + 2965 2959 2964 + 2959 2965 2966 + 2966 2960 2959 + 2960 2966 2967 + 2967 2961 2960 + 2963 2363 2362 + 2362 2968 2963 + 2969 2963 2968 + 2963 2969 2970 + 2970 2964 2963 + 2964 2970 2965 + 2965 2970 2971 + 2971 2972 2965 + 2966 2965 2972 + 2973 2968 2362 + 2974 2968 2973 + 2968 2974 2969 + 2969 2974 2975 + 2975 2976 2969 + 2970 2969 2976 + 2976 2971 2970 + 2362 2361 2973 + 2408 2973 2361 + 2977 2973 2408 + 2973 2977 2974 + 2974 2977 2978 + 2978 2975 2974 + 2979 2975 2978 + 2975 2979 2980 + 2980 2976 2975 + 2976 2980 2981 + 2981 2971 2976 + 2408 2413 2977 + 2978 2977 2413 + 2413 2982 2978 + 2983 2978 2982 + 2978 2983 2979 + 2979 2983 2984 + 2984 2985 2979 + 2979 2985 2986 + 2986 2980 2979 + 2981 2980 2986 + 2987 2982 2413 + 2988 2982 2987 + 2982 2988 2983 + 2983 2988 2989 + 2989 2984 2983 + 2990 2984 2989 + 2984 2990 2991 + 2991 2985 2984 + 2413 2412 2987 + 2987 2412 2992 + 2993 2987 2992 + 2664 2663 2994 + 2663 2995 2994 + 1714 2996 1715 + 2996 1714 2997 + 2997 2989 2996 + 2996 2989 2988 + 2988 134 2996 + 2998 2996 134 + 2997 1714 1721 + 1721 2999 2997 + 2997 2999 3000 + 3000 2990 2997 + 2989 2997 2990 + 1727 2999 1721 + 2999 1727 3001 + 3001 3000 2999 + 3002 3000 3001 + 3000 3002 2991 + 2991 2990 3000 + 13 3001 1727 + 3002 3001 13 + 13 3003 3002 + 1727 3004 13 + 3004 3005 13 + 3006 13 3005 + 3005 3007 3006 + 1726 3004 1727 + 2153 3004 1726 + 3004 2153 3008 + 3008 3005 3004 + 3005 3008 3009 + 3009 3007 3005 + 3007 3009 3010 + 3010 3011 3007 + 3012 3007 3011 + 2164 3008 2153 + 3009 3008 2164 + 2164 2646 3009 + 3009 2646 3013 + 3013 3010 3009 + 3014 3010 3013 + 3011 3010 3014 + 3014 3015 3011 + 3011 3015 3016 + 3016 3017 3011 + 3011 3017 3018 + 2645 3013 2646 + 3013 2645 2652 + 2652 3019 3013 + 3013 3019 3014 + 3014 3019 3020 + 3020 3021 3014 + 3015 3014 3021 + 3021 3022 3015 + 3015 3022 3023 + 3016 3015 3023 + 3019 2652 3024 + 3024 3020 3019 + 3025 3020 3024 + 3020 3025 3026 + 3026 3021 3020 + 3021 3026 3027 + 3027 3022 3021 + 3022 3027 3028 + 3028 3023 3022 + 3024 2652 2651 + 2651 3029 3024 + 3030 3024 3029 + 3029 3031 3030 + 3030 3031 3032 + 2656 3029 2651 + 3029 2656 3033 + 3033 3031 3029 + 3031 3033 3034 + 3034 3032 3031 + 3033 2656 3035 + 3035 3036 3033 + 3034 3033 3036 + 3036 3037 3034 + 3038 3034 3037 + 3032 3034 3038 + 3039 3036 3035 + 3036 3039 3040 + 3040 3037 3036 + 3040 3041 3037 + 3037 3041 3038 + 3042 3040 3039 + 3041 3040 3042 + 3042 3043 3041 + 3038 3041 3043 + 3043 3044 3038 + 3044 3045 3038 + 3046 3038 3045 + 3038 3046 3032 + 3039 3047 3042 + 3047 3048 3042 + 3049 3042 3048 + 3049 3043 3042 + 3043 3049 3050 + 3050 3044 3043 + 3050 3051 3044 + 3044 3051 3052 + 3052 3045 3044 + 3053 3048 3047 + 3048 3053 3054 + 3054 3053 3055 + 3055 3056 3054 + 3047 3057 3053 + 3053 3057 3058 + 3055 3053 3058 + 3058 3059 3055 + 3060 3055 3059 + 3055 3060 3061 + 3061 3056 3055 + 3057 3047 3062 + 3057 3062 3063 + 3063 3058 3057 + 3064 3058 3063 + 3058 3064 3065 + 3065 3059 3058 + 3066 3059 3065 + 3059 3066 3060 + 3062 3047 3067 + 3067 3068 3062 + 3062 3068 2659 + 3063 3062 2659 + 3069 3063 2659 + 3070 3068 3067 + 3068 3070 2660 + 2660 2659 3068 + 2660 3070 3071 + 3052 3051 3072 + 3028 3027 3073 + 3024 3074 3025 + 3064 3063 3075 + 3075 3076 3064 + 3064 3076 3077 + 3077 3065 3064 + 3078 3065 3077 + 3065 3078 3066 + 3066 3078 3079 + 3079 3080 3066 + 3060 3066 3080 + 3080 3081 3060 + 3061 3060 3081 + 3077 3082 3078 + 3078 3082 3083 + 3079 3078 3083 + 3083 3084 3079 + 3085 3079 3084 + 3079 3085 3086 + 3086 3080 3079 + 3082 3077 2673 + 3082 2673 2671 + 2671 3083 3082 + 2677 3083 2671 + 3083 2677 3087 + 3087 3084 3083 + 3088 3084 3087 + 3084 3088 3085 + 2673 3077 15 + 15 3089 2673 + 2681 3087 2677 + 3090 3087 2681 + 3087 3090 3088 + 3088 3090 3091 + 3091 3092 3088 + 3085 3088 3092 + 3092 3093 3085 + 3086 3085 3093 + 2681 2685 3090 + 3090 2685 3094 + 3094 3091 3090 + 3095 3091 3094 + 3091 3095 3096 + 3096 3092 3091 + 3092 3096 3097 + 3097 3093 3092 + 2690 3094 2685 + 3098 3094 2690 + 3094 3098 3095 + 3095 3098 3099 + 3099 3100 3095 + 3096 3095 3100 + 3100 3101 3096 + 3097 3096 3101 + 2690 3102 3098 + 3098 3102 3103 + 3103 3099 3098 + 3104 3099 3103 + 3099 3104 3105 + 3105 3100 3099 + 3100 3105 3106 + 3106 3101 3100 + 3102 2690 2689 + 2689 3107 3102 + 3103 3102 3107 + 3107 3108 3103 + 3109 3103 3108 + 3103 3109 3104 + 3104 3109 3110 + 3110 3111 3104 + 3105 3104 3111 + 3107 2689 2694 + 3107 2694 3112 + 3112 3108 3107 + 3113 3108 3112 + 3108 3113 3109 + 3109 3113 3114 + 3114 3110 3109 + 3115 3110 3114 + 3110 3115 3116 + 3116 3111 3110 + 2697 3112 2694 + 3112 2697 2701 + 3117 3112 2701 + 3112 3117 3118 + 3117 2701 3119 + 3119 3120 3117 + 3113 3117 3120 + 3120 3114 3113 + 3121 3114 3120 + 3114 3121 3115 + 3115 3121 3122 + 3122 3123 3115 + 3116 3115 3123 + 2706 3119 2701 + 3124 3119 2706 + 3119 3124 3125 + 3125 3120 3119 + 3120 3125 3121 + 3121 3125 3126 + 3126 3122 3121 + 3126 3127 3122 + 3122 3127 3128 + 3128 3123 3122 + 2706 3129 3124 + 3124 3129 3130 + 3130 3131 3124 + 3124 3131 3126 + 3126 3125 3124 + 3129 2706 2705 + 2705 3132 3129 + 3130 3129 3132 + 3132 3133 3130 + 3134 3130 3133 + 3130 3134 3135 + 3135 3131 3130 + 3132 2705 2710 + 2710 3136 3132 + 3132 3136 3137 + 3137 3133 3132 + 3138 3133 3137 + 3133 3138 3134 + 3139 3134 3138 + 3135 3134 3139 + 3136 2710 2714 + 2714 3140 3136 + 3137 3136 3140 + 3140 3141 3137 + 3142 3137 3141 + 3137 3142 3138 + 3138 3142 3143 + 3143 3144 3138 + 3138 3144 3139 + 3140 2714 2718 + 2718 3145 3140 + 3140 3145 3146 + 3146 3141 3140 + 3147 3141 3146 + 3141 3147 3142 + 3143 3142 3147 + 3145 2718 2722 + 2722 3148 3145 + 3146 3145 3148 + 3148 3149 3146 + 3150 3146 3149 + 3146 3150 3147 + 3147 3150 3151 + 3151 3152 3147 + 3147 3152 3143 + 3148 2722 2727 + 2727 3153 3148 + 3148 3153 3154 + 3154 3149 3148 + 3155 3149 3154 + 3149 3155 3150 + 3151 3150 3155 + 3153 2727 115 + 115 3156 3153 + 3154 3153 3156 + 3156 3157 3154 + 3158 3154 3157 + 3154 3158 3155 + 115 2727 3159 + 3160 3026 3025 + 3027 3026 3160 + 3160 3161 3027 + 2987 134 2988 + 134 2987 3162 + 3162 1707 134 + 3163 1305 1304 + 3164 1305 3163 + 3164 3165 1305 + 3166 3165 3164 + 3167 3166 3164 + 3163 3168 3164 + 3169 3164 3168 + 3170 3169 3168 + 3168 3171 3170 + 3172 3170 3171 + 3171 3173 3172 + 3174 3168 3163 + 3168 3174 3175 + 3175 3171 3168 + 3173 3171 3175 + 3173 3175 1703 + 1703 150 3173 + 1703 3175 3174 + 150 1703 1702 + 150 1702 3176 + 3176 3177 150 + 150 3177 1293 + 1293 3172 150 + 1299 3172 1293 + 1701 3176 1702 + 138 3176 1701 + 1701 3178 138 + 3179 3178 1701 + 3177 2423 1293 + 2423 3177 3180 + 3181 2423 3180 + 3177 3176 3180 + 1272 1271 3182 + 3182 1271 3183 + 3183 3184 3182 + 3185 3182 3184 + 3182 3185 2460 + 3186 3182 2460 + 3182 3186 3187 + 1277 3183 1271 + 2451 3183 1277 + 3183 2451 3184 + 3184 2451 2450 + 2450 3188 3184 + 3184 3188 3185 + 2448 3185 3188 + 2448 2460 3185 + 2449 3188 2450 + 3188 2449 2448 + 3186 2460 2459 + 2459 3189 3186 + 1272 3186 3189 + 3189 1273 1272 + 3190 1273 3189 + 1273 3190 1265 + 3191 3189 2459 + 3189 3191 3190 + 3190 3191 3192 + 3192 3193 3190 + 1265 3190 3193 + 3194 1265 3193 + 1254 1265 3194 + 3194 1255 1254 + 2459 2458 3191 + 3192 3191 2458 + 2458 2469 3192 + 2474 3192 2469 + 3193 3192 2474 + 3193 2474 2473 + 2473 3195 3193 + 3193 3195 3194 + 3196 3194 3195 + 1255 3194 3196 + 3196 1256 1255 + 1256 3196 3197 + 3197 3198 1256 + 1256 3198 1248 + 3199 3195 2473 + 3195 3200 3196 + 3196 3200 2567 + 2567 3197 3196 + 2566 3197 2567 + 3198 3197 2566 + 2566 2576 3198 + 3198 2576 3201 + 3201 1248 3198 + 1248 3201 1243 + 1243 3201 2582 + 2582 1244 1243 + 3202 1244 2582 + 1244 3202 1236 + 2582 3201 2576 + 2582 2581 3202 + 3202 2581 2580 + 2580 2595 3202 + 1236 3202 2595 + 2595 2600 1236 + 1231 1236 2600 + 2600 2599 1231 + 1231 2599 1224 + 1225 1224 2599 + 2599 2598 1225 + 1226 1225 2598 + 2598 2604 1226 + 3203 1226 2604 + 1219 1226 3203 + 1219 3203 3204 + 3204 1220 1219 + 1220 3204 3205 + 1220 3205 1221 + 2604 2603 3203 + 3204 3203 2603 + 2603 2608 3204 + 3205 3204 2608 + 2608 3206 3205 + 1221 3205 3206 + 3206 3207 1221 + 3208 1221 3207 + 1221 3208 1213 + 1213 3208 3209 + 3209 1214 1213 + 2607 3206 2608 + 3206 2607 3210 + 3210 3207 3206 + 3207 3210 3211 + 3211 3212 3207 + 3207 3212 3208 + 3209 3208 3212 + 2613 3210 2607 + 3211 3210 2613 + 2613 3213 3211 + 3211 3213 3214 + 3214 3215 3211 + 3212 3211 3215 + 3215 3216 3212 + 3212 3216 3209 + 3213 2613 2617 + 2617 3217 3213 + 3213 3217 3218 + 3218 3214 3213 + 3219 3214 3218 + 3214 3219 3220 + 3220 3215 3214 + 3216 3215 3220 + 3217 2617 3221 + 3221 3222 3217 + 3218 3217 3222 + 3222 3223 3218 + 3224 3218 3223 + 3218 3224 3219 + 3225 3221 2617 + 3226 3221 3225 + 3221 3226 3227 + 3227 3222 3221 + 3222 3227 3228 + 3228 3223 3222 + 2617 2616 3225 + 2615 3225 2616 + 3229 3225 2615 + 3225 3229 3226 + 3226 3229 2097 + 3230 3226 2097 + 3227 3226 3230 + 3230 3231 3227 + 3228 3227 3231 + 2615 3232 3229 + 3229 3232 3233 + 3233 2097 3229 + 3232 2615 2614 + 2614 142 3232 + 3233 3232 142 + 2097 2101 3230 + 3234 3230 2101 + 3231 3230 3234 + 3234 3235 3231 + 3231 3235 3236 + 3236 3237 3231 + 3231 3237 3228 + 3238 3228 3237 + 3223 3228 3238 + 2101 2100 3234 + 3239 3234 2100 + 3235 3234 3239 + 3239 3240 3235 + 3235 3240 3241 + 3235 3241 3236 + 3241 3242 3236 + 3243 3236 3242 + 3236 3243 3244 + 3244 3237 3236 + 3237 3244 3238 + 3245 3238 3244 + 3246 3238 3245 + 3238 3246 3223 + 3241 3247 3242 + 3247 3248 3242 + 3242 3248 3249 + 3242 3249 3243 + 3243 3249 3250 + 3250 3251 3243 + 3251 3252 3243 + 3244 3243 3252 + 3252 3253 3244 + 3244 3253 3245 + 3254 3245 3253 + 3255 3245 3254 + 3245 3255 3246 + 3251 3256 3252 + 3256 3257 3252 + 3252 3257 3258 + 3258 3253 3252 + 3253 3258 3254 + 3259 3254 3258 + 3260 3254 3259 + 3254 3260 3255 + 3257 3256 3261 + 3223 3246 3224 + 3262 3224 3246 + 3219 3224 3262 + 3262 3263 3219 + 3219 3263 3264 + 3220 3219 3264 + 3246 3255 3262 + 3265 3262 3255 + 3263 3262 3265 + 3263 3265 3266 + 3266 3264 3263 + 3255 3260 3265 + 3266 3265 3260 + 3260 3267 3266 + 3268 3266 3267 + 3264 3266 3268 + 3268 3269 3264 + 3264 3269 3270 + 3270 3271 3264 + 3264 3271 3220 + 3259 3267 3260 + 3267 3259 3272 + 3272 3273 3267 + 3267 3273 3268 + 3268 3273 3274 + 3274 3275 3268 + 3269 3268 3275 + 3272 3259 3276 + 3276 3277 3272 + 3272 3277 3278 + 3279 3272 3278 + 3273 3272 3279 + 3279 3274 3273 + 3258 3276 3259 + 3280 3276 3258 + 3277 3276 3280 + 3280 3281 3277 + 3277 3281 3282 + 3282 3278 3277 + 3258 3257 3280 + 3283 3280 3257 + 1102 1101 1109 + 1109 3284 1102 + 1102 3284 3285 + 1103 1102 3285 + 3286 1103 3285 + 3287 1103 3286 + 3287 1097 1103 + 1097 3287 3288 + 3288 1098 1097 + 1092 1098 3288 + 3289 3286 3285 + 3290 3286 3289 + 3290 3291 3286 + 3286 3291 3287 + 3288 3287 3291 + 3285 3292 3289 + 3293 3289 3292 + 3294 3289 3293 + 3289 3294 3290 + 3290 3294 3295 + 3295 3296 3290 + 3291 3290 3296 + 3297 3292 3285 + 3297 3298 3292 + 3292 3298 3293 + 3285 3299 3297 + 3297 3299 3300 + 3300 3301 3297 + 3298 3297 3301 + 3301 3302 3298 + 3293 3298 3302 + 3303 3299 3285 + 3299 3303 3304 + 3304 3305 3299 + 3299 3305 3306 + 3305 3307 3306 + 3308 3307 3305 + 3285 3309 3303 + 3303 3309 3310 + 3310 3311 3303 + 3304 3303 3311 + 3311 3312 3304 + 3313 3304 3312 + 3305 3304 3313 + 3305 3313 3308 + 3309 3285 3314 + 3314 3315 3309 + 3309 3315 3316 + 3316 3310 3309 + 3317 3310 3316 + 3311 3310 3317 + 3311 3317 3318 + 3318 3312 3311 + 3319 3312 3318 + 3312 3319 3313 + 3308 3313 3319 + 3315 3320 3316 + 3320 3321 3316 + 3316 3321 3322 + 3316 3322 3317 + 3317 3322 3323 + 3318 3317 3323 + 3324 3318 3323 + 3319 3318 3324 + 3325 3320 3315 + 3320 3325 3326 + 3326 3327 3320 + 3321 3320 3327 + 3328 3321 3327 + 3322 3321 3328 + 3328 3329 3322 + 3322 3329 3323 + 3326 3325 3330 + 3327 3326 3331 + 1020 1019 3332 + 3332 3333 1020 + 3334 1020 3333 + 1020 3334 3335 + 3335 1021 1020 + 3336 3333 3332 + 3333 3336 3337 + 3337 3338 3333 + 3333 3338 3334 + 3334 3338 3339 + 3339 3340 3334 + 3335 3334 3340 + 3332 1027 3336 + 1027 3341 3336 + 3337 3336 3342 + 3342 3343 3337 + 3344 3337 3343 + 3338 3337 3344 + 3344 3339 3338 + 3339 3344 3345 + 3345 3346 3339 + 3339 3346 3347 + 3347 3340 3339 + 3340 3347 3348 + 3348 3349 3340 + 3340 3349 3335 + 3350 3335 3349 + 1021 3335 3350 + 3346 3345 3351 + 3351 3352 3346 + 3347 3346 3352 + 3353 3347 3352 + 3348 3347 3353 + 3353 3354 3348 + 3348 3354 3355 + 3355 3356 3348 + 3349 3348 3356 + 3357 3352 3351 + 3352 3357 3358 + 3358 3359 3352 + 3352 3359 3353 + 3360 3353 3359 + 3353 3360 3361 + 3361 3354 3353 + 3354 3361 3362 + 3362 3355 3354 + 3363 3358 3357 + 3364 3358 3363 + 3358 3364 3365 + 3365 3359 3358 + 3359 3365 3360 + 3360 3365 3366 + 3366 3367 3360 + 3361 3360 3367 + 3363 3368 3364 + 3369 3364 3368 + 3365 3364 3369 + 3369 3370 3365 + 3371 3370 3369 + 3368 3363 3372 + 3372 3373 3368 + 3368 3373 3374 + 3374 3375 3368 + 3368 3375 3369 + 3376 3369 3375 + 3372 3363 3377 + 3377 3378 3372 + 3379 3372 3378 + 3373 3372 3379 + 3379 3380 3373 + 3373 3380 3381 + 3381 3374 3373 + 3382 3374 3381 + 3375 3374 3382 + 3375 3382 3376 + 3376 3382 3383 + 3384 3376 3383 + 3378 3385 3379 + 3386 3379 3385 + 3380 3379 3386 + 3386 3387 3380 + 3380 3387 3388 + 3388 3389 3380 + 3380 3389 3381 + 3390 3385 3378 + 3391 3385 3390 + 3385 3391 3386 + 3386 3391 3392 + 3392 3393 3386 + 3387 3386 3393 + 3393 3394 3387 + 3387 3394 3395 + 3378 3396 3390 + 3397 3390 3396 + 3398 3390 3397 + 3390 3398 3391 + 3391 3398 3399 + 3399 3392 3391 + 3396 3378 3400 + 3401 3388 3387 + 3381 3383 3382 + 3383 3381 3402 + 3383 3402 3403 + 3403 3404 3383 + 3383 3404 3384 + 3402 3381 3389 + 3389 3405 3402 + 3402 3405 3406 + 3403 3402 3406 + 3406 3407 3403 + 3408 3403 3407 + 3403 3408 3409 + 3409 3404 3403 + 3389 3388 3405 + 3405 3388 3410 + 3410 3406 3405 + 972 533 532 + 3411 533 972 + 3412 3413 3414 + 3414 3415 3412 + 3412 3415 3416 + 3416 3417 3412 + 3418 3417 3416 + 3418 3416 3419 + 3419 3420 3418 + 3418 3420 3421 + 3420 3419 3422 + 3420 3422 3423 + 3422 3424 3423 + 3425 3426 181 + 181 3426 3427 + 3427 3428 181 + 3427 3429 3428 + 3430 3431 3432 + 3430 3432 3433 + 3433 3434 3430 + 3430 3434 3435 + 3436 3430 3435 + 3437 3430 3436 + 3436 3438 3437 + 3437 3438 3439 + 3440 3434 3433 + 3434 3440 3441 + 3441 3435 3434 + 3433 3442 3440 + 3440 3442 3443 + 3443 3444 3440 + 3445 3440 3444 + 3445 3441 3440 + 3443 3442 3446 + 3443 3446 410 + 410 409 3443 + 3447 3443 409 + 409 408 3447 + 3448 3447 408 + 3442 3449 3446 + 3450 3444 3443 + 3444 3450 3451 + 3444 3451 3445 + 3452 3445 3451 + 3452 3453 3445 + 3445 3453 3454 + 3454 3455 3445 + 3456 3455 3454 + 3450 3457 3451 + 3458 3451 3457 + 3451 3458 3452 + 3452 3458 472 + 3459 3452 472 + 3453 3452 3459 + 473 3457 3450 + 3458 3457 473 + 473 472 3458 + 3460 3461 3462 + 3460 3462 3463 + 3463 3464 3460 + 3460 3464 3465 + 3466 3463 3462 + 3467 3463 3466 + 3464 3463 3467 + 3464 3467 3468 + 3468 3469 3464 + 3469 3468 3470 + 3470 3471 3469 + 3472 3466 3462 + 3473 3466 3472 + 3474 3466 3473 + 3466 3474 3467 + 3474 3475 3467 + 3475 3468 3467 + 3470 3468 3475 + 3462 3476 3472 + 3476 3477 3472 + 3472 3477 3478 + 3472 3478 3473 + 3473 3478 3479 + 3480 3473 3479 + 3474 3473 3480 + 3480 3475 3474 + 3481 3475 3480 + 3475 3481 3470 + 3477 3476 3482 + 3483 3477 3482 + 3478 3477 3483 + 3483 3484 3478 + 3478 3484 3479 + 3476 3485 3482 + 3486 3482 3485 + 3482 3486 3487 + 3482 3487 3488 + 3488 3489 3482 + 3482 3489 3483 + 3490 3485 3476 + 3490 3491 3485 + 3485 3491 3486 + 3492 3486 3491 + 3487 3486 3492 + 3492 3493 3487 + 3488 3487 3493 + 3476 3494 3490 + 3490 3494 3495 + 3496 3490 3495 + 3491 3490 3496 + 3496 3497 3491 + 3491 3497 3492 + 3498 3492 3497 + 3492 3498 3493 + 3499 3496 3495 + 3500 3496 3499 + 3496 3500 3497 + 3497 3500 3498 + 3501 3498 3500 + 3493 3498 3501 + 3501 3502 3493 + 3493 3502 3503 + 3503 3504 3493 + 3504 3488 3493 + 3499 3505 3500 + 3500 3505 3501 + 3505 3506 3501 + 3507 3501 3506 + 3501 3507 3502 + 3502 3507 3508 + 3508 3509 3502 + 3502 3509 3503 + 3510 3505 3499 + 3505 3510 3511 + 3511 3506 3505 + 3511 3512 3506 + 3506 3512 3507 + 3508 3507 3512 + 3512 3513 3508 + 3514 3508 3513 + 3508 3514 3509 + 3509 3514 3515 + 3515 3516 3509 + 3509 3516 3503 + 3512 3511 3517 + 3517 3513 3512 + 3517 3308 3513 + 3513 3308 3514 + 3514 3308 3319 + 3515 3514 3319 + 3319 3518 3515 + 3519 3515 3518 + 3515 3519 3516 + 3517 3511 3520 + 3324 3518 3319 + 3521 3518 3324 + 3518 3521 3519 + 3522 3519 3521 + 3516 3519 3522 + 3522 3523 3516 + 3516 3523 3503 + 3521 3324 3524 + 3524 3525 3521 + 3521 3525 3526 + 3526 182 3521 + 182 3522 3521 + 3527 3522 182 + 3522 3527 3523 + 3323 3524 3324 + 3528 3524 3323 + 3528 3525 3524 + 3525 3528 3529 + 3529 3526 3525 + 3526 3529 1157 + 1157 3530 3526 + 182 3526 3530 + 3531 182 3530 + 3323 3532 3528 + 3529 3528 3532 + 3532 3533 3529 + 1157 3529 3533 + 3533 1152 1157 + 1149 1152 3533 + 3534 3532 3323 + 3532 3534 3535 + 3535 3533 3532 + 3533 3535 1149 + 1149 3535 3536 + 3536 3537 1149 + 3538 3537 3536 + 3536 1136 3538 + 3534 3323 3539 + 3539 3540 3534 + 3534 3540 3536 + 3536 3535 3534 + 3541 3539 3323 + 1137 3539 3541 + 1137 3540 3539 + 3540 1137 1136 + 1136 3536 3540 + 3542 3541 3323 + 3543 3541 3542 + 3543 1138 3541 + 3541 1138 1137 + 3544 3542 3323 + 3545 3542 3544 + 3545 3546 3542 + 3542 3546 3543 + 3543 3546 1126 + 1126 1133 3543 + 1138 3543 1133 + 3547 3544 3323 + 3548 3544 3547 + 3548 3549 3544 + 3544 3549 3545 + 3545 3549 3550 + 3550 1127 3545 + 1127 3546 3545 + 3546 1127 1126 + 3329 3547 3323 + 3551 3547 3329 + 3551 3552 3547 + 3547 3552 3548 + 3548 3552 3553 + 3548 3553 3554 + 3549 3548 3554 + 3554 3550 3549 + 3550 3554 3555 + 3329 3556 3551 + 3551 3556 3557 + 3552 3551 3557 + 3557 3553 3552 + 3558 3553 3557 + 3553 3558 1425 + 1425 3554 3553 + 3328 3556 3329 + 3556 3328 3327 + 3327 3559 3556 + 3556 3559 3557 + 3558 3557 3559 + 3559 3560 3558 + 3561 3559 3327 + 3530 1157 1156 + 1156 3562 3530 + 3530 3562 3563 + 3563 3564 3530 + 3565 3564 3563 + 1161 3562 1156 + 3562 1161 3566 + 3566 3563 3562 + 3563 3566 3567 + 3567 3568 3563 + 3563 3568 3565 + 3565 3568 3569 + 3569 3570 3565 + 3571 3570 3569 + 1165 3566 1161 + 3567 3566 1165 + 1165 1169 3567 + 3567 1169 3572 + 3572 3573 3567 + 3568 3567 3573 + 3573 3569 3568 + 3569 3573 3574 + 3574 3575 3569 + 3569 3575 3571 + 1174 3572 1169 + 3576 3572 1174 + 3572 3576 3574 + 3574 3573 3572 + 3576 1174 1173 + 1173 3577 3576 + 3574 3576 3577 + 3577 3578 3574 + 3575 3574 3578 + 3578 3579 3575 + 3575 3579 3580 + 3580 3571 3575 + 3571 3580 3581 + 3582 3571 3581 + 3583 3577 1173 + 3577 3583 3584 + 3584 3578 3577 + 3579 3578 3584 + 3584 3585 3579 + 3579 3585 3586 + 3586 3587 3579 + 3579 3587 3580 + 1173 1188 3583 + 3583 1188 3588 + 3588 3589 3583 + 3584 3583 3589 + 3589 3590 3584 + 3585 3584 3590 + 3590 3591 3585 + 3586 3585 3591 + 3591 3592 3586 + 3593 3592 3591 + 1193 3588 1188 + 3594 3588 1193 + 3594 3589 3588 + 3589 3594 3595 + 3595 3590 3589 + 3591 3590 3595 + 3595 3596 3591 + 3591 3596 3593 + 3597 3593 3596 + 3596 3598 3597 + 3599 3597 3598 + 1193 3600 3594 + 3595 3594 3600 + 3600 3601 3595 + 3596 3595 3601 + 3601 3598 3596 + 3598 3601 3602 + 3602 231 3598 + 3598 231 3599 + 3603 3600 1193 + 3600 3603 3602 + 3602 3601 3600 + 1193 3604 3603 + 3603 3604 3605 + 3605 3606 3603 + 3602 3603 3606 + 3606 3607 3602 + 231 3602 3607 + 3607 3608 231 + 231 3608 3609 + 3604 1193 1192 + 1192 3610 3604 + 3604 3610 3611 + 3611 3605 3604 + 3612 3605 3611 + 3612 3606 3605 + 3606 3612 3613 + 3613 3607 3606 + 3608 3607 3613 + 1191 3610 1192 + 3610 1191 3614 + 3614 3615 3610 + 3610 3615 3611 + 3616 3611 3615 + 3611 3616 3617 + 3617 3618 3611 + 3611 3618 3612 + 3613 3612 3618 + 1197 3614 1191 + 1202 3614 1197 + 3615 3614 1202 + 1202 3619 3615 + 3615 3619 3616 + 3620 3616 3619 + 3617 3616 3620 + 3620 3621 3617 + 3622 3617 3621 + 3618 3617 3622 + 3622 3623 3618 + 3618 3623 3613 + 3619 1202 3624 + 3624 3625 3619 + 3619 3625 3620 + 3626 3620 3625 + 3620 3626 3627 + 3627 3621 3620 + 1201 3624 1202 + 3628 3624 1201 + 3625 3624 3628 + 3628 3629 3625 + 3625 3629 3626 + 3626 3629 3630 + 3630 3631 3626 + 3627 3626 3631 + 1201 3632 3628 + 3628 3632 3633 + 3633 3634 3628 + 3629 3628 3634 + 3634 3635 3629 + 3629 3635 3630 + 3632 1201 1200 + 1200 3636 3632 + 3632 3636 3637 + 3637 3633 3632 + 3638 3633 3637 + 3633 3638 3639 + 3639 3634 3633 + 3635 3634 3639 + 3636 1200 1206 + 1206 3640 3636 + 3637 3636 3640 + 3640 3641 3637 + 3641 3642 3637 + 3638 3637 3642 + 3642 3643 3638 + 3638 3643 3644 + 3644 3639 3638 + 1211 3640 1206 + 3640 1211 3645 + 3645 3641 3640 + 3641 3645 3646 + 3646 3647 3641 + 3641 3647 3648 + 3648 3642 3641 + 3642 3648 3649 + 3649 3643 3642 + 3645 1211 1216 + 1216 3650 3645 + 3646 3645 3650 + 3650 3651 3646 + 3651 3652 3646 + 3652 3647 3646 + 3647 3652 3653 + 3648 3647 3653 + 3649 3648 3653 + 3654 3650 1216 + 3650 3654 3652 + 3652 3655 3650 + 1216 1215 3654 + 3654 1215 3656 + 3656 3657 3654 + 3652 3654 3657 + 3657 3653 3652 + 3653 3657 3658 + 3658 3659 3653 + 3653 3659 3649 + 1215 3660 3656 + 3661 3656 3660 + 3656 3661 3662 + 3656 3662 3658 + 3658 3657 3656 + 1214 3660 1215 + 3660 1214 3209 + 3209 3663 3660 + 3660 3663 3661 + 3661 3663 3664 + 3664 3665 3661 + 3662 3661 3665 + 3665 3666 3662 + 3662 3666 3667 + 3667 3658 3662 + 3659 3658 3667 + 3663 3209 3216 + 3216 3664 3663 + 3220 3664 3216 + 3664 3220 3271 + 3271 3665 3664 + 3665 3271 3270 + 3270 3666 3665 + 3666 3270 3668 + 3668 3667 3666 + 3667 3668 3669 + 3669 3670 3667 + 3667 3670 3659 + 3649 3659 3670 + 3670 3671 3649 + 3643 3649 3671 + 3668 3270 3269 + 3672 3668 3269 + 3669 3668 3672 + 3672 3673 3669 + 3669 3673 3674 + 3674 3675 3669 + 3670 3669 3675 + 3675 3671 3670 + 3269 3676 3672 + 3677 3672 3676 + 3672 3677 3678 + 3678 3673 3672 + 3673 3678 3679 + 3679 3674 3673 + 3275 3676 3269 + 3676 3275 3680 + 3676 3680 3677 + 3681 3677 3680 + 3678 3677 3681 + 3681 3682 3678 + 3679 3678 3682 + 3682 3683 3679 + 3684 3679 3683 + 3674 3679 3684 + 3680 3275 3274 + 3274 3685 3680 + 3680 3685 3681 + 3686 3681 3685 + 3681 3686 3687 + 3687 3682 3681 + 3682 3687 3688 + 3688 3683 3682 + 3689 3685 3274 + 3685 3689 3686 + 3686 3689 3690 + 3690 3691 3686 + 3687 3686 3691 + 3691 3692 3687 + 3687 3692 3693 + 3688 3687 3693 + 3274 3279 3689 + 3689 3279 3694 + 3694 3690 3689 + 3695 3690 3694 + 3690 3695 3696 + 3696 3691 3690 + 3692 3691 3696 + 3697 3694 3279 + 3695 3694 3697 + 3697 3698 3695 + 3698 3699 3695 + 3699 3700 3695 + 3700 3701 3695 + 3278 3697 3279 + 3702 3697 3278 + 3702 3698 3697 + 3698 3702 3703 + 3703 3699 3698 + 3704 3699 3703 + 3699 3704 3705 + 3705 3700 3699 + 3706 3700 3705 + 3700 3706 3701 + 3706 3707 3701 + 3278 3708 3702 + 3708 3703 3702 + 3708 3278 3282 + 3282 3709 3708 + 3708 3709 3710 + 3710 3711 3708 + 3711 3710 3712 + 3709 3282 3713 + 3713 3714 3709 + 3709 3714 3715 + 3716 3713 3282 + 3282 3281 3716 + 3281 3717 3716 + 3717 3281 3280 + 3718 3717 3280 + 3719 3714 3713 + 3705 3720 3706 + 3706 3720 3721 + 3721 3722 3706 + 3707 3706 3722 + 3723 3707 3722 + 3721 3724 3722 + 3722 3724 3723 + 3724 3725 3723 + 3723 3725 3726 + 3723 3726 3692 + 3692 3727 3723 + 3696 3727 3692 + 3726 3725 3438 + 3438 3693 3726 + 3692 3726 3693 + 3693 3438 3436 + 3693 3436 3456 + 3456 3728 3693 + 3693 3728 3688 + 3729 3688 3728 + 3683 3688 3729 + 3729 3730 3683 + 3683 3730 3684 + 3454 3728 3456 + 3728 3454 3729 + 3729 3454 3453 + 3453 3731 3729 + 3730 3729 3731 + 3731 3732 3730 + 3730 3732 3733 + 3733 3684 3730 + 3734 3684 3733 + 3684 3734 3674 + 3459 3731 3453 + 3732 3731 3459 + 3459 3735 3732 + 3732 3735 3736 + 3736 3733 3732 + 3733 3736 3737 + 3733 3737 3734 + 3734 3737 3738 + 3739 3734 3738 + 3674 3734 3739 + 3739 3675 3674 + 3735 3459 3740 + 3740 3741 3735 + 3735 3741 3742 + 3742 3736 3735 + 3737 3736 3742 + 3742 3738 3737 + 3740 3459 472 + 472 3743 3740 + 3744 3740 3743 + 3741 3740 3744 + 3744 3745 3741 + 3741 3745 3746 + 3746 3742 3741 + 3738 3742 3746 + 479 3743 472 + 3747 3743 479 + 3743 3747 3744 + 3744 3747 3748 + 3748 3749 3744 + 3745 3744 3749 + 3749 3750 3745 + 3746 3745 3750 + 479 3751 3747 + 3747 3751 3752 + 3752 3748 3747 + 3753 3748 3752 + 3748 3753 3754 + 3754 3749 3748 + 3750 3749 3754 + 3751 479 3755 + 3755 3756 3751 + 3752 3751 3757 + 3671 3675 3739 + 3739 3644 3671 + 3671 3644 3643 + 3644 3739 3758 + 3758 3639 3644 + 3639 3758 3635 + 3635 3758 3738 + 3738 3630 3635 + 3738 3758 3739 + 3746 3630 3738 + 3630 3746 3759 + 3759 3631 3630 + 3759 3760 3631 + 3631 3760 3627 + 3761 3627 3760 + 3621 3627 3761 + 3750 3759 3746 + 3760 3759 3750 + 3750 3762 3760 + 3760 3762 3761 + 3763 3761 3762 + 3761 3763 3764 + 3764 3765 3761 + 3761 3765 3621 + 3621 3765 3622 + 3754 3762 3750 + 3762 3754 3763 + 3766 3763 3754 + 3764 3763 3766 + 3766 3767 3764 + 3764 3767 3768 + 3768 3769 3764 + 3765 3764 3769 + 3769 3622 3765 + 3622 3769 3770 + 3770 3623 3622 + 3754 3753 3766 + 3771 3766 3753 + 3767 3766 3771 + 3771 3772 3767 + 3767 3772 3773 + 3773 3768 3767 + 3774 3768 3773 + 3768 3774 3770 + 3770 3769 3768 + 3753 3775 3771 + 3771 3775 3776 + 3776 3777 3771 + 3777 3778 3771 + 3772 3771 3778 + 3778 3779 3772 + 3773 3772 3779 + 3779 3780 3773 + 3752 3775 3753 + 3775 3752 3781 + 3781 3776 3775 + 3782 3781 3752 + 3778 3783 3779 + 3779 3783 3784 + 3784 3785 3779 + 3786 3609 3608 + 3608 3787 3786 + 3786 3787 3770 + 3770 3774 3786 + 3774 3788 3786 + 3789 3786 3788 + 3613 3787 3608 + 3787 3613 3623 + 3623 3770 3787 + 3790 3582 3581 + 3527 3790 3581 + 182 3790 3527 + 3581 3791 3527 + 3523 3527 3791 + 3791 3792 3523 + 3523 3792 3503 + 3793 3791 3581 + 3791 3793 3792 + 3792 3793 3794 + 3794 3503 3792 + 3794 3795 3503 + 3503 3795 3796 + 3796 3504 3503 + 3581 3797 3793 + 3797 3794 3793 + 3794 3797 3798 + 3795 3794 3798 + 3796 3795 3798 + 3799 3796 3798 + 3800 3796 3799 + 3796 3800 3504 + 3504 3800 3801 + 3801 3488 3504 + 3798 3797 3581 + 3581 3580 3798 + 3802 3798 3580 + 3798 3802 3799 + 3803 3799 3802 + 3803 3804 3799 + 3799 3804 3800 + 3801 3800 3804 + 3587 3802 3580 + 3587 3586 3802 + 3802 3586 3803 + 3805 3803 3586 + 3804 3806 3801 + 3806 3807 3801 + 3807 3808 3801 + 3489 3801 3808 + 3801 3489 3488 + 3809 3807 3806 + 3807 3809 3810 + 3807 3810 3484 + 3484 3808 3807 + 3483 3808 3484 + 3808 3483 3489 + 3806 3811 3809 + 3812 3809 3811 + 3810 3809 3812 + 3812 3813 3810 + 3810 3813 3479 + 3484 3810 3479 + 3811 3814 3812 + 3814 3815 3812 + 3816 3812 3815 + 3812 3816 3813 + 3813 3816 3817 + 3817 3479 3813 + 3815 3414 3816 + 3817 3816 3414 + 3414 3818 3817 + 3819 3817 3818 + 3817 3819 3479 + 3414 3820 3818 + 3820 3821 3818 + 3822 3823 3824 + 3822 3824 779 + 779 1015 3822 + 3825 3822 1015 + 3826 3822 3825 + 3825 3827 3826 + 3825 1015 671 + 670 3825 671 + 3825 670 3827 + 3827 670 669 + 669 668 3827 + 3828 3827 668 + 3829 3830 3831 + 3831 3830 3832 + 3832 3833 3831 + 3831 3833 3834 + 3834 3835 3831 + 3836 3831 3835 + 3832 3837 3833 + 3833 3837 3838 + 3838 3834 3833 + 3839 3834 3838 + 3834 3839 3840 + 3840 3835 3834 + 3837 3832 3841 + 3841 3842 3837 + 3837 3842 3843 + 3843 3838 3837 + 3844 3838 3843 + 3838 3844 3839 + 3841 3832 3845 + 3846 3847 3848 + 3847 3846 3849 + 3849 3850 3847 + 3847 3850 3851 + 3852 3849 3846 + 3853 3849 3852 + 3850 3849 3853 + 3853 3854 3850 + 3850 3854 3855 + 3855 3856 3850 + 3857 3852 3846 + 3858 3852 3857 + 3859 3852 3858 + 3852 3859 3853 + 3860 3853 3859 + 3854 3853 3860 + 3860 3861 3854 + 196 3854 3861 + 3862 3857 3846 + 3863 3857 3862 + 3857 3863 3864 + 3864 3865 3857 + 3857 3865 3858 + 3858 3865 3866 + 3859 3858 3866 + 3846 3867 3862 + 3868 3862 3867 + 3862 3868 3869 + 3862 3869 3863 + 3870 3863 3869 + 3864 3863 3870 + 3871 3867 3846 + 11 3867 3871 + 3867 11 3868 + 3872 3868 11 + 3869 3868 3872 + 3872 3873 3869 + 3869 3873 3870 + 3846 3874 3871 + 3871 3874 3875 + 3876 3871 3875 + 3877 3871 3876 + 3878 3874 3846 + 3874 3878 3879 + 3879 3875 3874 + 3880 3875 3879 + 3875 3880 3881 + 3881 3882 3875 + 3875 3882 3883 + 3883 3884 3875 + 3884 3876 3875 + 3880 3879 3885 + 3885 3886 3880 + 3880 3886 3887 + 3887 3881 3880 + 3888 3881 3887 + 3881 3888 3882 + 3882 3888 235 + 235 3883 3882 + 3889 3886 3885 + 3886 3889 27 + 27 3887 3886 + 237 3887 27 + 3885 3890 3889 + 3889 3890 3891 + 3891 3892 3889 + 27 3889 3892 + 3893 27 3892 + 3894 27 3893 + 3893 3895 3894 + 3890 3885 125 + 125 3896 3890 + 3891 3890 3896 + 3896 3897 3891 + 3898 3891 3897 + 3898 3892 3891 + 3892 3898 3899 + 3899 3900 3892 + 3892 3900 3893 + 3901 3896 125 + 3896 3901 3902 + 3902 3897 3896 + 3897 3902 3903 + 3903 3904 3897 + 3897 3904 3898 + 3898 3904 3899 + 125 3905 3901 + 3901 3905 3906 + 3906 3907 3901 + 3902 3901 3907 + 3907 3908 3902 + 3903 3902 3908 + 3905 125 3909 + 3909 3910 3905 + 3906 3905 3910 + 3910 3911 3906 + 3912 3906 3911 + 3906 3912 3913 + 3913 3907 3906 + 3909 125 3914 + 3887 3915 3888 + 3861 3916 196 + 3917 3916 3861 + 3918 3916 3917 + 3916 3918 197 + 197 3919 3916 + 3861 3920 3917 + 3917 3920 3921 + 3861 3860 3920 + 3920 3860 3922 + 3922 3923 3920 + 3922 3860 3859 + 3924 3922 3859 + 3925 3922 3924 + 3922 3925 3923 + 3923 3925 3926 + 3926 3927 3923 + 3923 3927 3928 + 3928 3917 3923 + 3859 3929 3924 + 3930 3924 3929 + 3924 3930 3931 + 3931 3932 3924 + 3924 3932 3925 + 3925 3932 3933 + 3933 3926 3925 + 3866 3929 3859 + 3934 3929 3866 + 3929 3934 3930 + 3930 3934 3935 + 3935 3936 3930 + 3931 3930 3936 + 3936 3937 3931 + 3938 3931 3937 + 3932 3931 3938 + 3866 3939 3934 + 3934 3939 3940 + 3940 3941 3934 + 3934 3941 3935 + 3939 3866 3865 + 3865 3864 3939 + 3940 3939 3864 + 3864 3942 3940 + 3943 3940 3942 + 3941 3940 3943 + 3943 3944 3941 + 3941 3944 3945 + 3945 3946 3941 + 3941 3946 3935 + 3870 3942 3864 + 3942 3870 3947 + 3947 3948 3942 + 3942 3948 3943 + 3943 3948 3949 + 3949 3950 3943 + 3944 3943 3950 + 3950 3951 3944 + 3945 3944 3951 + 3947 3870 3873 + 3873 3952 3947 + 3947 3952 3953 + 3953 3954 3947 + 3948 3947 3954 + 3954 3949 3948 + 3955 3949 3954 + 3949 3955 3956 + 3956 3950 3949 + 3952 3873 3872 + 3872 3957 3952 + 3952 3957 3958 + 3958 3953 3952 + 3959 3953 3958 + 3953 3959 3960 + 3960 3954 3953 + 3954 3960 3955 + 3957 3872 3961 + 3961 3962 3957 + 3957 3962 3963 + 3963 3964 3957 + 3964 3965 3957 + 3965 3958 3957 + 11 3961 3872 + 3966 3961 11 + 3966 3962 3961 + 3962 3966 3967 + 3967 3963 3962 + 3876 3963 3967 + 3963 3876 3884 + 3884 3964 3963 + 11 3877 3966 + 3877 3967 3966 + 3876 3967 3877 + 3968 3969 3970 + 3969 3968 3971 + 3971 3972 3969 + 3969 3972 3973 + 3973 3974 3969 + 3974 3975 3969 + 3976 3969 3975 + 3977 3971 3968 + 3978 3971 3977 + 3972 3971 3978 + 3978 3979 3972 + 3972 3979 3980 + 3980 3973 3972 + 3968 3981 3977 + 3982 3977 3981 + 3983 3977 3982 + 3977 3983 3978 + 3984 3978 3983 + 3979 3978 3984 + 3984 3985 3979 + 3980 3979 3985 + 3986 3981 3968 + 3987 3981 3986 + 3981 3987 3982 + 3982 3987 3988 + 3988 3989 3982 + 3983 3982 3989 + 3968 3976 3986 + 3990 3991 3992 + 3990 3992 3993 + 3993 3994 3990 + 3990 3994 3995 + 3995 3996 3990 + 3997 3990 3996 + 3998 3993 3992 + 3999 3993 3998 + 3993 3999 4000 + 4000 3994 3993 + 3994 4000 4001 + 4001 3995 3994 + 3049 3998 3992 + 3048 3998 3049 + 4002 3998 3048 + 3998 4002 3999 + 3999 4002 3056 + 3056 4003 3999 + 4000 3999 4003 + 3992 3050 3049 + 3051 3050 3992 + 3992 3997 3051 + 4004 4005 4006 + 4005 4004 4007 + 4007 4008 4005 + 4009 4005 4008 + 4010 4005 4009 + 4009 3028 4010 + 4009 4011 3028 + 4007 4004 4012 + 4013 4007 4012 + 4014 4007 4013 + 4014 4008 4007 + 4008 4014 4015 + 4015 4016 4008 + 4008 4016 4009 + 4016 4017 4009 + 4017 4018 4009 + 4011 4009 4018 + 4013 4019 4014 + 4015 4014 4019 + 4019 4020 4015 + 4021 4015 4020 + 4015 4021 4022 + 4022 4016 4015 + 4016 4022 4023 + 4023 4017 4016 + 4024 4019 4013 + 4019 4024 4025 + 4025 4020 4019 + 4026 4020 4025 + 4020 4026 4021 + 4021 4026 4027 + 4027 4028 4021 + 4022 4021 4028 + 4013 4029 4024 + 4024 4029 4030 + 4030 4031 4024 + 4024 4031 4032 + 4032 4025 4024 + 4033 4025 4032 + 4025 4033 4026 + 4029 4013 3829 + 3829 3836 4029 + 3836 4030 4029 + 3835 4030 3836 + 4031 4030 3835 + 3835 3840 4031 + 4031 3840 4034 + 4034 4032 4031 + 4035 4032 4034 + 4032 4035 4033 + 4033 4035 4036 + 4036 4037 4033 + 4026 4033 4037 + 4037 4027 4026 + 4038 4034 3840 + 4039 4034 4038 + 4034 4039 4035 + 4035 4039 4040 + 4040 4036 4035 + 4041 4036 4040 + 4036 4041 4042 + 4042 4037 4036 + 3840 3839 4038 + 4043 4038 3839 + 4044 4038 4043 + 4038 4044 4039 + 4039 4044 4045 + 4045 4040 4039 + 4046 4040 4045 + 4040 4046 4041 + 3839 3844 4043 + 4047 4043 3844 + 4048 4043 4047 + 4043 4048 4044 + 4044 4048 4049 + 4049 4045 4044 + 4050 4045 4049 + 4045 4050 4046 + 3844 4051 4047 + 4052 4047 4051 + 4053 4047 4052 + 4047 4053 4048 + 4048 4053 4054 + 4054 4049 4048 + 4055 4049 4054 + 4049 4055 4050 + 3843 4051 3844 + 4051 3843 4056 + 4056 4057 4051 + 4051 4057 4052 + 4052 4057 4058 + 4059 4052 4058 + 4060 4052 4059 + 4052 4060 4053 + 4056 3843 3842 + 3842 4061 4056 + 4062 4056 4061 + 4057 4056 4062 + 4062 4058 4057 + 4062 4063 4058 + 4058 4063 4064 + 4064 4065 4058 + 4058 4065 4059 + 4066 4061 3842 + 4061 4066 4067 + 4067 4068 4061 + 4061 4068 4062 + 4063 4062 4068 + 3842 3841 4066 + 4066 3841 3032 + 3032 3046 4066 + 4066 3046 4069 + 4069 4067 4066 + 4070 4067 4069 + 4067 4070 4071 + 4071 4068 4067 + 4068 4071 4063 + 3032 3841 4072 + 3045 4069 3046 + 4069 3045 3052 + 3052 4073 4069 + 4069 4073 4070 + 4074 4070 4073 + 4071 4070 4074 + 4074 4075 4071 + 4063 4071 4075 + 4075 4076 4063 + 4076 4064 4063 + 4077 4064 4076 + 4064 4077 4065 + 4073 3052 4078 + 4078 4079 4073 + 4073 4079 4074 + 4080 4074 4079 + 4074 4080 4081 + 4081 4075 4074 + 4075 4081 4082 + 4082 4076 4075 + 4078 3052 4083 + 4084 4085 4086 + 4086 4085 4087 + 4087 4088 4086 + 4089 4088 4087 + 4088 4089 4090 + 4090 4091 4088 + 4092 4088 4091 + 4093 4087 4085 + 4094 4087 4093 + 4087 4094 4089 + 4089 4094 4095 + 4095 4096 4089 + 4090 4089 4096 + 4085 4097 4093 + 4098 4093 4097 + 4099 4093 4098 + 4093 4099 4094 + 4094 4099 4100 + 4095 4094 4100 + 4101 4097 4085 + 4097 4101 4102 + 4102 4103 4097 + 4097 4103 4098 + 4104 4098 4103 + 4105 4098 4104 + 4098 4105 4099 + 4085 4106 4101 + 4091 4107 4092 + 4108 4109 4110 + 4110 4109 4111 + 4111 4112 4110 + 4113 4110 4112 + 4114 4110 4113 + 4110 4114 4115 + 4116 4111 4109 + 4117 4111 4116 + 4111 4117 4118 + 4118 4112 4111 + 4112 4118 4119 + 4119 4120 4112 + 4112 4120 4113 + 4109 4121 4116 + 4122 4116 4121 + 4123 4116 4122 + 4116 4123 4117 + 4124 4117 4123 + 4118 4117 4124 + 4124 4125 4118 + 4119 4118 4125 + 4126 4121 4109 + 4109 4127 4126 + 4126 4127 4128 + 4128 4129 4126 + 4130 4126 4129 + 4131 4126 4130 + 3946 4129 4128 + 4129 3946 3945 + 4129 3945 4130 + 3951 4130 3945 + 4132 4130 3951 + 4130 4132 4121 + 4121 4132 4122 + 4128 3935 3946 + 3935 4128 4133 + 3935 4133 4134 + 4134 3936 3935 + 3936 4134 4135 + 4135 3937 3936 + 4133 4128 4136 + 4136 4114 4133 + 4133 4114 4137 + 4137 4134 4133 + 4135 4134 4137 + 4137 4138 4135 + 4139 4135 4138 + 3937 4135 4139 + 4139 4140 3937 + 3937 4140 3938 + 4113 4137 4114 + 4137 4113 4141 + 4141 4138 4137 + 4138 4141 4142 + 4142 4143 4138 + 4138 4143 4139 + 4144 4139 4143 + 4140 4139 4144 + 4141 4113 4120 + 4120 4145 4141 + 4142 4141 4145 + 4145 4146 4142 + 4147 4142 4146 + 4143 4142 4147 + 4147 4148 4143 + 4143 4148 4144 + 4149 4145 4120 + 4145 4149 4150 + 4150 4146 4145 + 4146 4150 4151 + 4151 4152 4146 + 4146 4152 4147 + 4153 4147 4152 + 4148 4147 4153 + 4120 4119 4149 + 4149 4119 4154 + 4154 4155 4149 + 4150 4149 4155 + 4155 4156 4150 + 4151 4150 4156 + 4156 4157 4151 + 4158 4151 4157 + 4152 4151 4158 + 4154 4119 4125 + 4125 4159 4154 + 4160 4154 4159 + 4154 4160 4161 + 4161 4155 4154 + 4155 4161 4162 + 4162 4156 4155 + 4156 4162 4163 + 4163 4157 4156 + 4164 4159 4125 + 4159 4164 4165 + 4159 4165 4160 + 4160 4165 4166 + 4167 4160 4166 + 4161 4160 4167 + 4167 4168 4161 + 4162 4161 4168 + 4125 4169 4164 + 4170 4164 4169 + 4165 4164 4170 + 4170 4166 4165 + 4124 4169 4125 + 4169 4124 4171 + 4171 4172 4169 + 4169 4172 4170 + 4172 4173 4170 + 4174 4170 4173 + 4166 4170 4174 + 4123 4171 4124 + 4175 4171 4123 + 4172 4171 4175 + 4175 4176 4172 + 4172 4176 4177 + 4177 4173 4172 + 4173 4177 4178 + 4178 4179 4173 + 4173 4179 4174 + 4123 4180 4175 + 4181 4175 4180 + 4176 4175 4181 + 4181 4182 4176 + 4177 4176 4182 + 4182 4183 4177 + 4183 4184 4177 + 4178 4177 4184 + 4122 4180 4123 + 4180 4122 4185 + 4185 4186 4180 + 4180 4186 4181 + 4187 4181 4186 + 4182 4181 4187 + 4187 4188 4182 + 4182 4188 4189 + 4189 4183 4182 + 4185 4122 4132 + 4132 4190 4185 + 4191 4185 4190 + 4186 4185 4191 + 4191 4192 4186 + 4186 4192 4187 + 4193 4187 4192 + 4188 4187 4193 + 3951 4190 4132 + 4190 3951 3950 + 3950 3956 4190 + 4190 3956 4191 + 4194 4191 3956 + 4192 4191 4194 + 4194 4195 4192 + 4192 4195 4193 + 4196 4193 4195 + 4197 4193 4196 + 4193 4197 4188 + 4188 4197 4198 + 4198 4189 4188 + 3956 3955 4194 + 4199 4194 3955 + 4195 4194 4199 + 4199 4200 4195 + 4195 4200 4196 + 4201 4196 4200 + 4202 4196 4201 + 4196 4202 4197 + 4197 4202 4203 + 4203 4198 4197 + 3955 3960 4199 + 4204 4199 3960 + 4200 4199 4204 + 4204 4205 4200 + 4200 4205 4201 + 4206 4201 4205 + 4207 4201 4206 + 4201 4207 4202 + 4202 4207 4208 + 4203 4202 4208 + 3960 3959 4204 + 4209 4204 3959 + 4205 4204 4209 + 4209 4210 4205 + 4205 4210 4206 + 4211 4206 4210 + 4212 4206 4211 + 4206 4212 4207 + 4207 4212 4213 + 4213 4208 4207 + 3959 4214 4209 + 4215 4209 4214 + 4210 4209 4215 + 4215 4216 4210 + 4210 4216 4211 + 4217 4211 4216 + 4218 4211 4217 + 4211 4218 4212 + 4213 4212 4218 + 3958 4214 3959 + 4214 3958 3965 + 3965 4219 4214 + 4214 4219 4215 + 4220 4215 4219 + 4216 4215 4220 + 4220 4221 4216 + 4216 4221 4217 + 4219 3965 4222 + 4222 4223 4219 + 4219 4223 4220 + 4224 4220 4223 + 4221 4220 4224 + 4224 4225 4221 + 4221 4225 4226 + 4217 4221 4226 + 4222 3965 3964 + 3964 4227 4222 + 4222 4227 4228 + 4229 4222 4228 + 4223 4222 4229 + 4229 4230 4223 + 4223 4230 4224 + 4231 4224 4230 + 4225 4224 4231 + 3884 4227 3964 + 4227 3884 3883 + 3883 4228 4227 + 235 4228 3883 + 4228 235 4232 + 4232 4233 4228 + 4228 4233 4229 + 4234 4229 4233 + 4230 4229 4234 + 4234 4235 4230 + 4230 4235 4231 + 4231 4235 4236 + 4237 4232 235 + 4238 4239 4240 + 4240 4241 4238 + 4238 4241 4242 + 4242 4243 4238 + 4244 4238 4243 + 4245 4238 4244 + 4244 4246 4245 + 4241 4240 4247 + 4247 4248 4241 + 4241 4248 4249 + 4249 4242 4241 + 4250 4242 4249 + 4242 4250 4251 + 4251 4243 4242 + 4247 4240 4252 + 4252 4253 4247 + 4254 4247 4253 + 4248 4247 4254 + 4254 4255 4248 + 4248 4255 4256 + 4256 4249 4248 + 4257 4252 4240 + 4258 4252 4257 + 4252 4258 4259 + 4259 4253 4252 + 4253 4259 4260 + 4260 4261 4253 + 4253 4261 4254 + 4240 238 4257 + 4262 4263 4246 + 4263 4262 4264 + 4264 4265 4263 + 4263 4265 4266 + 4266 4267 4263 + 4268 4263 4267 + 4267 240 4268 + 4264 4262 4269 + 4269 4270 4264 + 4271 4264 4270 + 4265 4264 4271 + 4271 4272 4265 + 4265 4272 4273 + 4273 4266 4265 + 4274 4269 4262 + 4275 4269 4274 + 4269 4275 4276 + 4276 4270 4269 + 4270 4276 4277 + 4277 4278 4270 + 4270 4278 4271 + 4262 4244 4274 + 4243 4274 4244 + 4279 4274 4243 + 4274 4279 4275 + 4275 4279 4280 + 4280 4281 4275 + 4276 4275 4281 + 4282 4244 4262 + 4243 4251 4279 + 4279 4251 4283 + 4283 4280 4279 + 4284 4280 4283 + 4280 4284 4285 + 4285 4281 4280 + 4281 4285 4286 + 4286 4287 4281 + 4281 4287 4276 + 4277 4276 4287 + 4288 4283 4251 + 4289 4283 4288 + 4283 4289 4284 + 4284 4289 4290 + 4290 4291 4284 + 4285 4284 4291 + 4291 4292 4285 + 4286 4285 4292 + 4251 4250 4288 + 4293 4288 4250 + 4294 4288 4293 + 4288 4294 4289 + 4289 4294 4295 + 4295 4290 4289 + 4296 4290 4295 + 4290 4296 4297 + 4297 4291 4290 + 4250 4298 4293 + 4299 4293 4298 + 4300 4293 4299 + 4293 4300 4294 + 4294 4300 4301 + 4301 4295 4294 + 4302 4295 4301 + 4295 4302 4296 + 4249 4298 4250 + 4298 4249 4256 + 4256 4303 4298 + 4298 4303 4299 + 4304 4299 4303 + 4305 4299 4304 + 4299 4305 4300 + 4300 4305 4306 + 4306 4301 4300 + 4307 4301 4306 + 4301 4307 4302 + 4303 4256 4308 + 4308 4309 4303 + 4303 4309 4304 + 4310 4304 4309 + 4311 4304 4310 + 4304 4311 4305 + 4305 4311 4312 + 4312 4306 4305 + 4308 4256 4255 + 4255 4313 4308 + 4314 4308 4313 + 4309 4308 4314 + 4314 4315 4309 + 4309 4315 4310 + 4316 4310 4315 + 4317 4310 4316 + 4310 4317 4311 + 4318 4313 4255 + 4313 4318 4319 + 4319 4320 4313 + 4313 4320 4314 + 4321 4314 4320 + 4315 4314 4321 + 4321 4322 4315 + 4315 4322 4316 + 4255 4254 4318 + 4318 4254 4261 + 4261 4323 4318 + 4319 4318 4323 + 4323 4324 4319 + 4325 4319 4324 + 4320 4319 4325 + 4325 4326 4320 + 4320 4326 4321 + 4327 4321 4326 + 4322 4321 4327 + 4328 4323 4261 + 4323 4328 4329 + 4329 4324 4323 + 4324 4329 4330 + 4330 4331 4324 + 4324 4331 4325 + 4332 4325 4331 + 4326 4325 4332 + 4261 4260 4328 + 4328 4260 4333 + 4333 4334 4328 + 4329 4328 4334 + 4334 4335 4329 + 4330 4329 4335 + 4335 4336 4330 + 4337 4330 4336 + 4331 4330 4337 + 4338 4333 4260 + 4333 4338 4339 + 4333 4339 4340 + 4340 4334 4333 + 4335 4334 4340 + 4340 4341 4335 + 4335 4341 4342 + 4342 4336 4335 + 4260 4259 4338 + 4343 4338 4259 + 4339 4338 4343 + 4343 4344 4339 + 4340 4339 4344 + 4345 4340 4344 + 4341 4340 4345 + 4259 4258 4343 + 4346 4343 4258 + 4343 4346 4347 + 4347 4344 4343 + 4344 4347 4348 + 4348 4349 4344 + 4344 4349 4350 + 4350 4345 4344 + 4258 4351 4346 + 4352 4346 4351 + 4347 4346 4352 + 4352 4353 4347 + 4348 4347 4353 + 4257 4351 4258 + 4351 4257 240 + 240 4354 4351 + 4351 4354 4352 + 4355 4352 4354 + 4353 4352 4355 + 240 4257 4356 + 4354 240 4267 + 4267 4357 4354 + 4354 4357 4355 + 4355 4357 4358 + 4358 4359 4355 + 4360 4355 4359 + 4355 4360 4353 + 4357 4267 4266 + 4266 4358 4357 + 4358 4266 4273 + 4273 4361 4358 + 4358 4361 4362 + 4362 4359 4358 + 4359 4362 4363 + 4363 4364 4359 + 4359 4364 4360 + 4361 4273 4365 + 4365 4366 4361 + 4361 4366 4367 + 4367 4362 4361 + 4363 4362 4367 + 4367 4368 4363 + 4369 4363 4368 + 4364 4363 4369 + 4365 4273 4272 + 4272 4370 4365 + 4371 4365 4370 + 4366 4365 4371 + 4371 4372 4366 + 4366 4372 4373 + 4373 4367 4366 + 4367 4373 4374 + 4374 4368 4367 + 4375 4370 4272 + 4370 4375 4376 + 4376 4377 4370 + 4370 4377 4371 + 4378 4371 4377 + 4372 4371 4378 + 4272 4271 4375 + 4375 4271 4278 + 4278 4379 4375 + 4376 4375 4379 + 4379 4380 4376 + 4381 4376 4380 + 4377 4376 4381 + 4381 4382 4377 + 4377 4382 4378 + 4383 4379 4278 + 4379 4383 4384 + 4384 4380 4379 + 4380 4384 4385 + 4385 4386 4380 + 4380 4386 4381 + 4387 4381 4386 + 4382 4381 4387 + 4278 4277 4383 + 4383 4277 4388 + 4388 4389 4383 + 4384 4383 4389 + 4389 4390 4384 + 4385 4384 4390 + 4390 4391 4385 + 4392 4385 4391 + 4393 4385 4392 + 4287 4388 4277 + 4394 4388 4287 + 4388 4394 4395 + 4395 4389 4388 + 4389 4395 4396 + 4396 4390 4389 + 4390 4396 4397 + 4397 4391 4390 + 4287 4286 4394 + 4394 4286 4398 + 4398 4399 4394 + 4395 4394 4399 + 4399 4400 4395 + 4396 4395 4400 + 4400 4401 4396 + 4397 4396 4401 + 4292 4398 4286 + 4402 4398 4292 + 4398 4402 4403 + 4403 4399 4398 + 4399 4403 4404 + 4404 4400 4399 + 4400 4404 4405 + 4405 4401 4400 + 4292 4406 4402 + 4407 4402 4406 + 4403 4402 4407 + 4407 4408 4403 + 4404 4403 4408 + 4409 4404 4408 + 4405 4404 4409 + 4406 4292 4291 + 4291 4297 4406 + 4406 4297 4410 + 4410 4411 4406 + 4406 4411 4407 + 4412 4407 4411 + 4407 4412 4408 + 4410 4297 4296 + 4296 4413 4410 + 4414 4410 4413 + 4411 4410 4414 + 4414 4415 4411 + 4411 4415 4412 + 4412 4415 4416 + 4416 4417 4412 + 4417 4418 4412 + 4419 4413 4296 + 4413 4419 4420 + 4420 4421 4413 + 4413 4421 4414 + 4414 4421 4422 + 4422 4423 4414 + 4415 4414 4423 + 4423 4416 4415 + 4296 4302 4419 + 4419 4302 4307 + 4307 4424 4419 + 4420 4419 4424 + 4424 4425 4420 + 4420 4425 4080 + 4080 4426 4420 + 4426 4427 4420 + 4421 4420 4427 + 4428 4424 4307 + 4428 4425 4424 + 4425 4428 4081 + 4081 4080 4425 + 4307 4429 4428 + 4428 4429 4082 + 4082 4081 4428 + 4306 4429 4307 + 4429 4306 4312 + 4312 4082 4429 + 4082 4312 4430 + 4430 4076 4082 + 4076 4430 4077 + 4077 4430 4317 + 4317 4431 4077 + 4065 4077 4431 + 4430 4312 4311 + 4311 4317 4430 + 4431 4059 4065 + 4432 4059 4431 + 4059 4432 4060 + 4060 4432 4433 + 4433 4434 4060 + 4053 4060 4434 + 4434 4054 4053 + 4431 4316 4432 + 4432 4316 4322 + 4322 4433 4432 + 4327 4433 4322 + 4433 4327 4435 + 4435 4434 4433 + 4434 4435 4436 + 4436 4054 4434 + 4054 4436 4055 + 4316 4431 4317 + 4079 4426 4080 + 4437 4426 4079 + 4426 4437 4438 + 4438 4427 4426 + 4438 4439 4427 + 4427 4439 4421 + 4421 4439 4422 + 4079 4078 4437 + 4437 4078 4440 + 4440 4441 4437 + 4437 4441 4442 + 4442 4438 4437 + 4439 4438 4442 + 4442 4422 4439 + 4443 4422 4442 + 4422 4443 4444 + 4444 4423 4422 + 3997 4440 4078 + 3996 4440 3997 + 4440 3996 4445 + 4445 4441 4440 + 4441 4445 4446 + 4446 4447 4441 + 4441 4447 4442 + 4443 4442 4447 + 4447 4448 4443 + 4443 4448 4449 + 4449 4444 4443 + 4445 3996 3995 + 3995 4450 4445 + 4446 4445 4450 + 4450 4451 4446 + 4452 4446 4451 + 4447 4446 4452 + 4452 4448 4447 + 4448 4452 4453 + 4453 4449 4448 + 4454 4450 3995 + 4450 4454 4455 + 4455 4451 4450 + 4451 4455 4456 + 4456 4457 4451 + 4451 4457 4452 + 4453 4452 4457 + 3995 4001 4454 + 4454 4001 4458 + 4458 4459 4454 + 4455 4454 4459 + 4459 4460 4455 + 4456 4455 4460 + 4460 4461 4456 + 4462 4456 4461 + 4457 4456 4462 + 4463 4458 4001 + 4464 4458 4463 + 4458 4464 4465 + 4465 4459 4458 + 4459 4465 4466 + 4466 4460 4459 + 4460 4466 4467 + 4467 4461 4460 + 4001 4000 4463 + 4003 4463 4000 + 4468 4463 4003 + 4463 4468 4464 + 4464 4468 4469 + 4469 4470 4464 + 4465 4464 4470 + 4470 4471 4465 + 4466 4465 4471 + 4471 4472 4466 + 4467 4466 4472 + 4003 4473 4468 + 4468 4473 4474 + 4474 4469 4468 + 4475 4469 4474 + 4469 4475 4476 + 4476 4470 4469 + 4470 4476 4477 + 4477 4471 4470 + 4473 4003 3056 + 3056 3061 4473 + 4473 3061 4478 + 4478 4474 4473 + 4479 4474 4478 + 4474 4479 4475 + 4475 4479 4480 + 4480 4481 4475 + 4476 4475 4481 + 4481 4482 4476 + 4477 4476 4482 + 3081 4478 3061 + 4483 4478 3081 + 4478 4483 4479 + 4479 4483 4484 + 4484 4480 4479 + 4485 4480 4484 + 4480 4485 4486 + 4486 4481 4480 + 4481 4486 4487 + 4487 4482 4481 + 3081 4488 4483 + 4483 4488 4489 + 4489 4484 4483 + 4490 4484 4489 + 4484 4490 4485 + 4485 4490 4491 + 4491 4492 4485 + 4486 4485 4492 + 4488 3081 3080 + 3080 3086 4488 + 4488 3086 4493 + 4493 4489 4488 + 4494 4489 4493 + 4489 4494 4490 + 4490 4494 4495 + 4495 4491 4490 + 4496 4491 4495 + 4491 4496 4497 + 4497 4492 4491 + 3093 4493 3086 + 4498 4493 3093 + 4493 4498 4494 + 4494 4498 4499 + 4499 4495 4494 + 4500 4495 4499 + 4495 4500 4496 + 4496 4500 4501 + 4501 4502 4496 + 4497 4496 4502 + 3093 3097 4498 + 4498 3097 4503 + 4503 4499 4498 + 4504 4499 4503 + 4499 4504 4500 + 4500 4504 4505 + 4505 4501 4500 + 4506 4501 4505 + 4501 4506 4507 + 4507 4502 4501 + 3101 4503 3097 + 4508 4503 3101 + 4503 4508 4504 + 4504 4508 4509 + 4509 4505 4504 + 4510 4505 4509 + 4505 4510 4506 + 4511 4506 4510 + 4507 4506 4511 + 3101 3106 4508 + 4508 3106 4512 + 4512 4509 4508 + 4513 4509 4512 + 4509 4513 4510 + 4510 4513 4514 + 4514 4515 4510 + 4510 4515 4511 + 4516 4512 3106 + 4517 4512 4516 + 4512 4517 4513 + 4514 4513 4517 + 4517 4518 4514 + 4519 4514 4518 + 4514 4519 4520 + 4520 4515 4514 + 3106 3105 4516 + 3111 4516 3105 + 4521 4516 3111 + 4516 4521 4517 + 4517 4521 4522 + 4522 4518 4517 + 4523 4518 4522 + 4518 4523 4519 + 4524 4519 4523 + 4520 4519 4524 + 3111 3116 4521 + 4522 4521 3116 + 3116 4525 4522 + 4526 4522 4525 + 4522 4526 4523 + 4523 4526 4527 + 4527 4528 4523 + 4523 4528 4524 + 3123 4525 3116 + 4529 4525 3123 + 4525 4529 4526 + 4527 4526 4529 + 4529 4530 4527 + 4531 4527 4530 + 4527 4531 4532 + 4532 4528 4527 + 4528 4532 4533 + 4533 4524 4528 + 3123 3128 4529 + 4529 3128 4534 + 4534 4530 4529 + 4535 4530 4534 + 4530 4535 4531 + 4536 4531 4535 + 4532 4531 4536 + 4536 4537 4532 + 4533 4532 4537 + 4534 3128 3127 + 4538 4534 3127 + 4539 4534 4538 + 4534 4539 4535 + 4535 4539 4540 + 4540 4541 4535 + 4535 4541 4536 + 4542 4536 4541 + 4542 4537 4536 + 3127 4543 4538 + 4544 4538 4543 + 4545 4538 4544 + 4538 4545 4539 + 4540 4539 4545 + 4546 4543 3127 + 4547 4543 4546 + 4543 4547 4544 + 4544 4547 3135 + 3135 4548 4544 + 4549 4544 4548 + 4544 4549 4545 + 3127 3126 4546 + 3131 4546 3126 + 4547 4546 3131 + 3131 3135 4547 + 3139 4548 3135 + 4550 4548 3139 + 4548 4550 4549 + 4551 4549 4550 + 4545 4549 4551 + 4551 4552 4545 + 4545 4552 4540 + 4553 4540 4552 + 4540 4553 4554 + 4554 4541 4540 + 4541 4554 4542 + 3139 4555 4550 + 4550 4555 4556 + 4556 4557 4550 + 4550 4557 4551 + 4558 4551 4557 + 4551 4558 4559 + 4559 4552 4551 + 4552 4559 4553 + 4555 3139 3144 + 3144 4560 4555 + 4556 4555 4560 + 4560 4561 4556 + 4562 4556 4561 + 4556 4562 4563 + 4563 4557 4556 + 4557 4563 4558 + 4564 4558 4563 + 4559 4558 4564 + 4560 3144 3143 + 3143 4565 4560 + 4560 4565 4566 + 4566 4561 4560 + 4567 4561 4566 + 4561 4567 4562 + 4568 4562 4567 + 4563 4562 4568 + 4568 4569 4563 + 4563 4569 4564 + 4565 3143 3152 + 3152 4570 4565 + 4566 4565 4570 + 4570 4571 4566 + 4572 4566 4571 + 4566 4572 4567 + 4567 4572 4573 + 4573 4574 4567 + 4567 4574 4568 + 4570 3152 3151 + 3151 4575 4570 + 4570 4575 4576 + 4576 4571 4570 + 4577 4571 4576 + 4571 4577 4572 + 4573 4572 4577 + 4575 3151 4578 + 4578 4579 4575 + 4576 4575 4579 + 4579 4580 4576 + 4581 4576 4580 + 4576 4581 4577 + 3155 4578 3151 + 4582 4578 3155 + 4579 4578 4582 + 4582 4583 4579 + 4579 4583 4584 + 4584 4580 4579 + 4585 4580 4584 + 4580 4585 4581 + 4586 4581 4585 + 4577 4581 4586 + 3155 3158 4582 + 4582 3158 4587 + 4587 4588 4582 + 4583 4582 4588 + 4588 4589 4583 + 4584 4583 4589 + 4589 4590 4584 + 4591 4584 4590 + 4584 4591 4585 + 3158 4592 4587 + 4592 2746 4587 + 2746 4593 4587 + 4594 4587 4593 + 4595 4587 4594 + 4587 4595 4596 + 4596 4588 4587 + 3157 4592 3158 + 4592 3157 4597 + 4592 4597 2741 + 2741 2746 4592 + 4597 3157 3156 + 3156 2736 4597 + 2741 4597 2736 + 3156 115 2736 + 2736 115 2737 + 2737 115 4598 + 2745 4593 2746 + 4593 2745 4599 + 4593 4599 4594 + 4594 4599 4600 + 4600 4601 4594 + 4602 4594 4601 + 4594 4602 4595 + 4599 2745 2744 + 2744 4600 4599 + 2755 4600 2744 + 4600 2755 4603 + 4603 4601 4600 + 4601 4603 4604 + 4604 4605 4601 + 4601 4605 4602 + 4602 4605 4606 + 4595 4602 4606 + 4603 2755 4607 + 4607 4608 4603 + 4604 4603 4608 + 4608 4609 4604 + 4610 4604 4609 + 4605 4604 4610 + 4610 4606 4605 + 2754 4607 2755 + 4611 4607 2754 + 4607 4611 4612 + 4612 4608 4607 + 4608 4612 4613 + 4613 4609 4608 + 4609 4613 4614 + 4614 4615 4609 + 4609 4615 4610 + 2754 2759 4611 + 4611 2759 2764 + 2764 4616 4611 + 4611 4616 4617 + 4617 4612 4611 + 4613 4612 4617 + 4617 4618 4613 + 4613 4618 4619 + 4619 4614 4613 + 4620 4614 4619 + 4615 4614 4620 + 4616 2764 2773 + 2773 4621 4616 + 4616 4621 4622 + 4622 4617 4616 + 4618 4617 4622 + 4622 4623 4618 + 4618 4623 4624 + 4624 4619 4618 + 4625 4619 4624 + 4619 4625 4620 + 4621 2773 2777 + 2777 4626 4621 + 4622 4621 4626 + 4626 4627 4622 + 4623 4622 4627 + 4627 4628 4623 + 4623 4628 4629 + 4629 4624 4623 + 4630 4624 4629 + 4624 4630 4625 + 4626 2777 2782 + 2782 4631 4626 + 4626 4631 4632 + 4632 4627 4626 + 4628 4627 4632 + 4632 4633 4628 + 4628 4633 4634 + 4634 4629 4628 + 4629 4634 4635 + 4629 4635 4630 + 4631 2782 2787 + 2787 4636 4631 + 4632 4631 4636 + 4636 4637 4632 + 4633 4632 4637 + 4637 4638 4633 + 4633 4638 4639 + 4639 4634 4633 + 4635 4634 4639 + 4636 2787 4640 + 4640 4641 4636 + 4636 4641 4642 + 4642 4637 4636 + 4638 4637 4642 + 4638 4642 4643 + 4643 4644 4638 + 4638 4644 4639 + 4640 2787 2786 + 2786 2792 4640 + 4645 4640 2792 + 4641 4640 4645 + 4645 4646 4641 + 4642 4641 4646 + 4646 4647 4642 + 4647 4648 4642 + 4648 4643 4642 + 4649 4643 4648 + 4644 4643 4649 + 2792 4650 4645 + 4651 4645 4650 + 4645 4651 4646 + 4646 4651 4652 + 4652 4647 4646 + 4653 4647 4652 + 4647 4653 4654 + 4654 4648 4647 + 2791 4650 2792 + 2791 4655 4650 + 4650 4655 4651 + 4652 4651 4655 + 4655 4656 4652 + 4657 4652 4656 + 4652 4657 4653 + 4653 4657 4658 + 4658 4659 4653 + 4654 4653 4659 + 4655 2791 2790 + 2790 4656 4655 + 4660 4656 2790 + 4656 4660 4657 + 4658 4657 4660 + 4660 4661 4658 + 4662 4658 4661 + 4658 4662 4663 + 4663 4659 4658 + 2790 2796 4660 + 4660 2796 4664 + 4664 4661 4660 + 4665 4661 4664 + 4661 4665 4662 + 4666 4662 4665 + 4663 4662 4666 + 4666 4667 4663 + 4668 4663 4667 + 4659 4663 4668 + 4664 2796 2795 + 2795 4669 4664 + 4670 4664 4669 + 4664 4670 4665 + 4665 4670 4671 + 4671 4672 4665 + 4665 4672 4666 + 2804 4669 2795 + 4669 2804 4673 + 4673 4674 4669 + 4669 4674 4670 + 4671 4670 4674 + 4674 4675 4671 + 4676 4671 4675 + 4671 4676 4677 + 4677 4672 4671 + 4673 2804 2803 + 2803 4678 4673 + 4679 4673 4678 + 4674 4673 4679 + 4679 4675 4674 + 4680 4675 4679 + 4675 4680 4676 + 4681 4676 4680 + 4677 4676 4681 + 4682 4678 2803 + 4678 4682 4683 + 4683 4684 4678 + 4678 4684 4679 + 4684 4685 4679 + 4686 4679 4685 + 4679 4686 4680 + 2803 4687 4682 + 4682 4687 4688 + 4688 4689 4682 + 4682 4689 4690 + 4690 4683 4682 + 4687 2803 2809 + 2809 4691 4687 + 4688 4687 4691 + 4691 4692 4688 + 4693 4688 4692 + 4688 4693 4694 + 4694 4689 4688 + 4689 4694 4695 + 4695 4690 4689 + 4691 2809 2808 + 4691 2808 4696 + 4696 4692 4691 + 4697 4692 4696 + 4692 4697 4693 + 4693 4697 4698 + 4698 4699 4693 + 4694 4693 4699 + 4699 4700 4694 + 4695 4694 4700 + 2807 4696 2808 + 4701 4696 2807 + 4696 4701 4697 + 4697 4701 4702 + 4702 4698 4697 + 4703 4698 4702 + 4698 4703 4704 + 4704 4699 4698 + 4699 4704 4705 + 4705 4700 4699 + 2807 2813 4701 + 4701 2813 4706 + 4706 4702 4701 + 4707 4702 4706 + 4702 4707 4703 + 4703 4707 4708 + 4708 4709 4703 + 4704 4703 4709 + 4709 4710 4704 + 4705 4704 4710 + 2813 2817 4706 + 2822 4706 2817 + 4711 4706 2822 + 4706 4711 4707 + 4707 4711 4712 + 4712 4708 4707 + 4713 4708 4712 + 4708 4713 4714 + 4714 4709 4708 + 4709 4714 4715 + 4715 4710 4709 + 2822 4716 4711 + 4711 4716 4717 + 4717 4712 4711 + 4718 4712 4717 + 4712 4718 4713 + 4713 4718 4719 + 4719 4720 4713 + 4714 4713 4720 + 4716 2822 2821 + 2821 4721 4716 + 4716 4721 4722 + 4722 4717 4716 + 4723 4717 4722 + 4717 4723 4718 + 4718 4723 4724 + 4724 4719 4718 + 4721 2821 2826 + 2826 4725 4721 + 4721 4725 4726 + 4726 4722 4721 + 4727 4722 4726 + 4722 4727 4723 + 4723 4727 4728 + 4728 4724 4723 + 4729 4724 4728 + 4719 4724 4729 + 4725 2826 2831 + 2831 4730 4725 + 4725 4730 4731 + 4731 4726 4725 + 4732 4726 4731 + 4726 4732 4727 + 4727 4732 4733 + 4733 4728 4727 + 4730 2831 2835 + 2835 4734 4730 + 4730 4734 4735 + 4735 4731 4730 + 4736 4731 4735 + 4731 4736 4732 + 4733 4732 4736 + 4736 4737 4733 + 4738 4733 4737 + 4728 4733 4738 + 4734 2835 2839 + 2839 4739 4734 + 4735 4734 4739 + 4739 4740 4735 + 4741 4735 4740 + 4735 4741 4736 + 4736 4741 4742 + 4742 4737 4736 + 4743 4737 4742 + 4737 4743 4738 + 4739 2839 2848 + 2848 4744 4739 + 4739 4744 4745 + 4745 4740 4739 + 4746 4740 4745 + 4740 4746 4741 + 4741 4746 4747 + 4747 4742 4741 + 4743 4742 4747 + 4747 4748 4743 + 4738 4743 4748 + 4744 2848 2853 + 2853 4749 4744 + 4744 4749 4750 + 4750 4745 4744 + 4751 4745 4750 + 4745 4751 4746 + 4746 4751 4752 + 4752 4747 4746 + 4747 4752 4753 + 4753 4748 4747 + 4749 2853 4754 + 4754 4755 4749 + 4749 4755 4756 + 4756 4750 4749 + 4757 4750 4756 + 4750 4757 4751 + 4752 4751 4757 + 4757 4758 4752 + 4753 4752 4758 + 4754 2853 2857 + 2857 4759 4754 + 4760 4754 4759 + 4755 4754 4760 + 4760 4761 4755 + 4755 4761 4762 + 4762 4756 4755 + 4763 4756 4762 + 4759 2857 2856 + 4759 2856 2863 + 2863 4764 4759 + 4759 4764 4760 + 4764 4765 4760 + 4766 4760 4765 + 4761 4760 4766 + 4766 4767 4761 + 4761 4767 4768 + 4768 4762 4761 + 2862 4764 2863 + 4764 2862 4769 + 4769 4765 4764 + 4770 4765 4769 + 4765 4770 4766 + 4771 4766 4770 + 4767 4766 4771 + 4771 4772 4767 + 4767 4772 4773 + 4773 4768 4767 + 4769 2862 2861 + 2861 4774 4769 + 4775 4769 4774 + 4769 4775 4770 + 4770 4775 4776 + 4776 4777 4770 + 4770 4777 4771 + 4778 4771 4777 + 4772 4771 4778 + 2871 4774 2861 + 4779 4774 2871 + 4774 4779 4775 + 4776 4775 4779 + 4779 4780 4776 + 4781 4776 4780 + 4776 4781 4782 + 4782 4777 4776 + 4777 4782 4778 + 2871 2876 4779 + 4779 2876 2881 + 2881 4780 4779 + 4783 4780 2881 + 4780 4783 4781 + 4781 4783 4784 + 4784 4785 4781 + 4782 4781 4785 + 4785 4786 4782 + 4782 4786 4787 + 4787 4778 4782 + 2881 2885 4783 + 4783 2885 4788 + 4788 4784 4783 + 4784 4788 4789 + 4789 4790 4784 + 4784 4790 4791 + 4791 4785 4784 + 4785 4791 4792 + 4792 4786 4785 + 2889 4788 2885 + 4789 4788 2889 + 2889 2897 4789 + 4789 2897 4793 + 4793 4794 4789 + 4790 4789 4794 + 4794 4795 4790 + 4790 4795 4796 + 4796 4791 4790 + 4792 4791 4796 + 4797 4793 2897 + 4793 4797 4798 + 4798 4799 4793 + 4793 4799 4800 + 4800 4794 4793 + 4794 4800 4801 + 4801 4795 4794 + 2897 2896 4797 + 4802 4797 2896 + 4798 4797 4802 + 4802 4803 4798 + 4804 4798 4803 + 4799 4798 4804 + 4804 4805 4799 + 4800 4799 4805 + 4805 4806 4800 + 4801 4800 4806 + 2896 2895 4802 + 2895 4807 4802 + 4808 4802 4807 + 4802 4808 4809 + 4809 4803 4802 + 4803 4809 4810 + 4810 4811 4803 + 4803 4811 4804 + 2901 4807 2895 + 4807 2901 2906 + 2906 4812 4807 + 4807 4812 4808 + 4813 4808 4812 + 4809 4808 4813 + 4813 4814 4809 + 4810 4809 4814 + 4812 2906 4815 + 4815 4816 4812 + 4812 4816 4813 + 4816 4817 4813 + 4818 4813 4817 + 4813 4818 4819 + 4819 4814 4813 + 2911 4815 2906 + 4820 4815 2911 + 4816 4815 4820 + 4816 4820 4821 + 4821 4817 4816 + 4822 4817 4821 + 4817 4822 4818 + 4818 4822 4823 + 4824 4818 4823 + 4819 4818 4824 + 2911 4825 4820 + 4821 4820 4825 + 4825 4826 4821 + 4827 4821 4826 + 4821 4827 4822 + 4822 4827 4828 + 4828 4829 4822 + 4822 4829 4823 + 4830 4825 2911 + 4825 4830 4831 + 4831 4826 4825 + 4826 4831 4832 + 4832 4833 4826 + 4826 4833 4827 + 4827 4833 4834 + 4834 4828 4827 + 2911 2910 4830 + 4830 2910 2916 + 2916 4835 4830 + 4830 4835 4836 + 4836 4831 4830 + 4832 4831 4836 + 4836 4837 4832 + 4832 4837 4838 + 4838 4839 4832 + 4833 4832 4839 + 4839 4834 4833 + 4840 4835 2916 + 4835 4840 4841 + 4841 4836 4835 + 4836 4841 4842 + 4842 4837 4836 + 4837 4842 4843 + 4843 4838 4837 + 2916 2915 4840 + 4840 2915 2921 + 2921 2930 4840 + 4840 2930 4844 + 4844 4841 4840 + 4842 4841 4844 + 4844 4845 4842 + 4842 4845 4846 + 4846 4843 4842 + 4847 4843 4846 + 4843 4847 4848 + 4848 4838 4843 + 2930 4849 4844 + 4850 4844 4849 + 4845 4844 4850 + 4845 4850 4851 + 4851 4852 4845 + 4845 4852 4846 + 4853 4849 2930 + 4854 4849 4853 + 4849 4854 4850 + 4850 4854 4855 + 4855 4851 4850 + 4856 4851 4855 + 4851 4856 4852 + 4852 4856 4857 + 4857 4846 4852 + 2930 2929 4853 + 2939 4853 2929 + 4858 4853 2939 + 4853 4858 4854 + 4854 4858 4859 + 4859 4860 4854 + 4854 4860 4855 + 2939 4861 4858 + 4859 4858 4861 + 4861 4862 4859 + 4862 4863 4859 + 4864 4859 4863 + 4859 4864 4860 + 4861 2939 2938 + 2938 4865 4861 + 4861 4865 4866 + 4866 4862 4861 + 4867 4862 4866 + 4862 4867 4868 + 4868 4863 4862 + 4868 4869 4863 + 4863 4869 4864 + 4865 2938 4870 + 4870 4871 4865 + 4865 4871 4872 + 4872 4866 4865 + 4873 4866 4872 + 4866 4873 4867 + 2937 4870 2938 + 4874 4870 2937 + 4870 4874 4875 + 4875 4871 4870 + 4871 4875 4876 + 4876 4872 4871 + 4872 4876 4877 + 4877 4878 4872 + 4872 4878 4873 + 2937 2947 4874 + 4874 2947 4879 + 4879 4880 4874 + 4875 4874 4880 + 4880 4881 4875 + 4876 4875 4881 + 4882 4876 4881 + 4877 4876 4882 + 2952 4879 2947 + 4879 2952 4883 + 4883 4884 4879 + 4879 4884 4885 + 4885 4880 4879 + 4881 4880 4885 + 4883 2952 2951 + 2951 4886 4883 + 4883 4886 4887 + 4887 4888 4883 + 4884 4883 4888 + 4888 4889 4884 + 4884 4889 4890 + 4890 4885 4884 + 2957 4886 2951 + 4886 2957 4891 + 4891 4887 4886 + 4892 4887 4891 + 4887 4892 4893 + 4893 4888 4887 + 4888 4893 4894 + 4894 4889 4888 + 4889 4894 4895 + 4895 4890 4889 + 4896 4891 2957 + 4897 4891 4896 + 4891 4897 4892 + 4892 4897 4898 + 4898 4899 4892 + 4893 4892 4899 + 4899 4900 4893 + 4894 4893 4900 + 2957 2962 4896 + 2961 4896 2962 + 4901 4896 2961 + 4896 4901 4897 + 4897 4901 4902 + 4902 4898 4897 + 4903 4898 4902 + 4898 4903 4904 + 4904 4899 4898 + 4899 4904 4905 + 4905 4900 4899 + 2961 2967 4901 + 4901 2967 4906 + 4906 4902 4901 + 4907 4902 4906 + 4902 4907 4903 + 4903 4907 4908 + 4908 4909 4903 + 4904 4903 4909 + 4909 4042 4904 + 4905 4904 4042 + 4910 4906 2967 + 4911 4906 4910 + 4906 4911 4907 + 4907 4911 4912 + 4912 4908 4907 + 4028 4908 4912 + 4908 4028 4027 + 4027 4909 4908 + 2967 2966 4910 + 2972 4910 2966 + 4913 4910 2972 + 4910 4913 4911 + 4911 4913 4914 + 4914 4912 4911 + 4915 4912 4914 + 4912 4915 4028 + 4028 4915 4022 + 4023 4022 4915 + 2972 4916 4913 + 4913 4916 4917 + 4917 4914 4913 + 4918 4914 4917 + 4914 4918 4915 + 4915 4918 4023 + 4919 4023 4918 + 4017 4023 4919 + 4916 2972 2971 + 2971 2981 4916 + 4916 2981 4920 + 4920 4917 4916 + 4921 4917 4920 + 4917 4921 4918 + 4918 4921 4919 + 4922 4919 4921 + 4017 4919 4922 + 4922 4018 4017 + 4923 4018 4922 + 4018 4923 4011 + 2986 4920 2981 + 4924 4920 2986 + 4920 4924 4921 + 4921 4924 4922 + 4924 4925 4922 + 4923 4922 4925 + 4925 3016 4923 + 4011 4923 3016 + 2986 4926 4924 + 4924 4926 4927 + 4927 4925 4924 + 3016 4925 4927 + 4927 3017 3016 + 3017 4927 3003 + 3003 4928 3017 + 4926 2986 2985 + 2985 2991 4926 + 4926 2991 4929 + 3003 4927 4926 + 4909 4027 4037 + 4037 4042 4909 + 4042 4041 4905 + 4930 4905 4041 + 4900 4905 4930 + 4930 4931 4900 + 4900 4931 4894 + 4895 4894 4931 + 4041 4046 4930 + 4932 4930 4046 + 4931 4930 4932 + 4932 4933 4931 + 4931 4933 4895 + 4934 4895 4933 + 4890 4895 4934 + 4046 4050 4932 + 4935 4932 4050 + 4933 4932 4935 + 4935 4936 4933 + 4933 4936 4934 + 4937 4934 4936 + 4938 4934 4937 + 4934 4938 4890 + 4890 4938 4939 + 4939 4885 4890 + 4050 4055 4935 + 4940 4935 4055 + 4936 4935 4940 + 4940 4941 4936 + 4936 4941 4937 + 4942 4937 4941 + 4943 4937 4942 + 4937 4943 4938 + 4939 4938 4943 + 4055 4436 4940 + 4944 4940 4436 + 4941 4940 4944 + 4944 4945 4941 + 4941 4945 4942 + 4946 4942 4945 + 4947 4942 4946 + 4942 4947 4943 + 4436 4435 4944 + 4948 4944 4435 + 4945 4944 4948 + 4948 4332 4945 + 4945 4332 4946 + 4331 4946 4332 + 4337 4946 4331 + 4946 4337 4947 + 4435 4327 4948 + 4326 4948 4327 + 4332 4948 4326 + 4885 4939 4881 + 4881 4939 4949 + 4949 4950 4881 + 4881 4950 4882 + 4951 4882 4950 + 4882 4951 4952 + 4882 4952 4877 + 4943 4949 4939 + 4953 4949 4943 + 4949 4953 4950 + 4950 4953 4951 + 4954 4951 4953 + 4952 4951 4954 + 4954 4342 4952 + 4952 4342 4341 + 4877 4952 4341 + 4955 4877 4341 + 4878 4877 4955 + 4943 4947 4953 + 4953 4947 4954 + 4947 4337 4954 + 4336 4954 4337 + 4954 4336 4342 + 4956 4417 4416 + 4416 4957 4956 + 4958 4956 4957 + 4957 4959 4958 + 4959 4960 4958 + 4961 4960 4959 + 4960 4961 4962 + 4957 4416 4423 + 4423 4444 4957 + 4957 4444 4449 + 4449 4959 4957 + 4963 4959 4449 + 4959 4963 4961 + 4961 4963 4964 + 4964 4965 4961 + 4962 4961 4965 + 4965 4966 4962 + 4449 4453 4963 + 4963 4453 4967 + 4967 4968 4963 + 4963 4968 4964 + 4969 4964 4968 + 4969 4970 4964 + 4964 4970 4971 + 4971 4965 4964 + 4971 4966 4965 + 4457 4967 4453 + 4462 4967 4457 + 4967 4462 4972 + 4972 4968 4967 + 4968 4972 4969 + 4969 4972 4973 + 4973 4974 4969 + 4970 4969 4974 + 4974 4975 4970 + 4970 4975 4976 + 4971 4970 4976 + 4972 4462 4977 + 4977 4973 4972 + 4978 4973 4977 + 4973 4978 4979 + 4979 4974 4973 + 4974 4979 4980 + 4980 4975 4974 + 4975 4980 4981 + 4981 4976 4975 + 4461 4977 4462 + 4982 4977 4461 + 4977 4982 4978 + 4978 4982 4983 + 4983 4984 4978 + 4979 4978 4984 + 4984 4985 4979 + 4980 4979 4985 + 4985 4986 4980 + 4981 4980 4986 + 4461 4467 4982 + 4982 4467 4987 + 4987 4983 4982 + 4988 4983 4987 + 4983 4988 4989 + 4989 4984 4983 + 4984 4989 4990 + 4990 4985 4984 + 4985 4990 4991 + 4991 4986 4985 + 4472 4987 4467 + 4992 4987 4472 + 4987 4992 4988 + 4988 4992 4993 + 4993 4994 4988 + 4989 4988 4994 + 4994 4995 4989 + 4990 4989 4995 + 4995 4996 4990 + 4991 4990 4996 + 4472 4997 4992 + 4992 4997 4998 + 4998 4999 4992 + 4992 4999 4993 + 4997 4472 4471 + 4471 4477 4997 + 4997 4477 5000 + 5000 4998 4997 + 5001 4998 5000 + 4998 5001 5002 + 5002 4999 4998 + 4999 5002 5003 + 5003 4993 4999 + 4482 5000 4477 + 5004 5000 4482 + 5000 5004 5001 + 5001 5004 5005 + 5005 5006 5001 + 5002 5001 5006 + 5006 5007 5002 + 5003 5002 5007 + 4482 4487 5004 + 5004 4487 5008 + 5008 5005 5004 + 5009 5005 5008 + 5005 5009 5010 + 5010 5006 5005 + 5006 5010 5011 + 5011 5007 5006 + 5012 5008 4487 + 5013 5008 5012 + 5008 5013 5009 + 5009 5013 5014 + 5014 5015 5009 + 5010 5009 5015 + 5015 5016 5010 + 5011 5010 5016 + 4487 4486 5012 + 4492 5012 4486 + 5017 5012 4492 + 5012 5017 5013 + 5013 5017 5018 + 5018 5014 5013 + 5019 5014 5018 + 5014 5019 5020 + 5020 5015 5014 + 5015 5020 5021 + 5021 5016 5015 + 4492 4497 5017 + 5017 4497 5022 + 5022 5018 5017 + 5023 5018 5022 + 5018 5023 5019 + 5024 5019 5023 + 5020 5019 5024 + 5024 5025 5020 + 5020 5025 5026 + 5026 5021 5020 + 4502 5022 4497 + 5027 5022 4502 + 5022 5027 5023 + 5023 5027 5028 + 5028 5029 5023 + 5023 5029 5024 + 5030 5024 5029 + 5024 5030 5031 + 5031 5025 5024 + 4502 4507 5027 + 5028 5027 4507 + 4507 5032 5028 + 5033 5028 5032 + 5028 5033 5034 + 5034 5029 5028 + 5029 5034 5030 + 5035 5030 5034 + 5031 5030 5035 + 4511 5032 4507 + 5036 5032 4511 + 5032 5036 5033 + 5037 5033 5036 + 5034 5033 5037 + 5037 5038 5034 + 5034 5038 5035 + 4511 5039 5036 + 5036 5039 5040 + 5040 5041 5036 + 5036 5041 5037 + 5042 5037 5041 + 5037 5042 5043 + 5043 5038 5037 + 5039 4511 4515 + 4515 4520 5039 + 5040 5039 4520 + 4520 5044 5040 + 5045 5040 5044 + 5040 5045 5046 + 5046 5041 5040 + 5041 5046 5042 + 5047 5042 5046 + 5043 5042 5047 + 4524 5044 4520 + 5048 5044 4524 + 5044 5048 5045 + 5049 5045 5048 + 5046 5045 5049 + 5049 5050 5046 + 5046 5050 5047 + 4524 4533 5048 + 5048 4533 5051 + 5051 5052 5048 + 5048 5052 5049 + 5053 5049 5052 + 5049 5053 5054 + 5054 5050 5049 + 5050 5054 5055 + 5055 5047 5050 + 5051 4533 4537 + 4537 5056 5051 + 5057 5051 5056 + 5051 5057 5058 + 5058 5052 5051 + 5052 5058 5053 + 5053 5058 5059 + 3409 5053 5059 + 5054 5053 3409 + 5060 5056 4537 + 5060 5061 5056 + 5056 5061 5057 + 5062 5057 5061 + 5058 5057 5062 + 5062 5059 5058 + 4537 4542 5060 + 5063 5060 4542 + 5064 5063 4542 + 5065 5064 4542 + 5066 5064 5065 + 5066 5067 5064 + 5064 5067 5068 + 5068 5069 5064 + 4542 4554 5065 + 5070 5065 4554 + 5071 5065 5070 + 5065 5071 5066 + 5072 5066 5071 + 5067 5066 5072 + 5072 5073 5067 + 5074 5067 5073 + 5075 5074 5073 + 4554 4553 5070 + 5070 4553 4559 + 4559 5076 5070 + 5077 5070 5076 + 5070 5077 5071 + 5071 5077 5078 + 5078 5079 5071 + 5071 5079 5072 + 4564 5076 4559 + 5080 5076 4564 + 5076 5080 5077 + 5078 5077 5080 + 5080 5081 5078 + 5082 5078 5081 + 5078 5082 5083 + 5083 5079 5078 + 4564 5084 5080 + 5080 5084 5085 + 5085 5081 5080 + 5086 5081 5085 + 5081 5086 5082 + 5087 5082 5086 + 5083 5082 5087 + 5084 4564 4569 + 4569 5088 5084 + 5085 5084 5088 + 5088 5089 5085 + 5090 5085 5089 + 5085 5090 5086 + 5086 5090 5091 + 5091 5092 5086 + 5086 5092 5087 + 5088 4569 4568 + 4568 5093 5088 + 5088 5093 5094 + 5094 5089 5088 + 5095 5089 5094 + 5089 5095 5090 + 5091 5090 5095 + 5095 5096 5091 + 5093 4568 4574 + 4574 5097 5093 + 5094 5093 5097 + 5097 5098 5094 + 5099 5094 5098 + 5094 5099 5095 + 5095 5099 168 + 168 5100 5095 + 5097 4574 4573 + 4573 5101 5097 + 5097 5101 5102 + 5102 5098 5097 + 5103 5098 5102 + 5098 5103 5099 + 168 5099 5103 + 5103 5104 168 + 5105 168 5104 + 5101 4573 5106 + 5106 5107 5101 + 5102 5101 5107 + 5107 5108 5102 + 5109 5102 5108 + 5102 5109 5103 + 5103 5109 5110 + 5110 5104 5103 + 4577 5106 4573 + 4586 5106 4577 + 5107 5106 4586 + 4586 5111 5107 + 5107 5111 5112 + 5112 5108 5107 + 5113 5108 5112 + 5108 5113 5109 + 5110 5109 5113 + 5111 4586 5114 + 5114 5115 5111 + 5112 5111 5115 + 5115 5116 5112 + 5117 5112 5116 + 5112 5117 5113 + 4585 5114 4586 + 5118 5114 4585 + 5115 5114 5118 + 5118 5119 5115 + 5115 5119 1658 + 1658 5116 5115 + 5120 5116 1658 + 5116 5120 5117 + 5121 5117 5120 + 5113 5117 5121 + 4585 4591 5118 + 5118 4591 5122 + 5122 1652 5118 + 5119 5118 1652 + 1652 1651 5119 + 1658 5119 1651 + 4590 5122 4591 + 5122 4590 5123 + 5122 5123 1653 + 1653 1652 5122 + 5123 4590 4589 + 4589 5124 5123 + 1653 5123 5124 + 1648 1653 5124 + 5124 5125 1648 + 5124 4589 4588 + 4588 4596 5124 + 5124 4596 5126 + 5126 5125 5124 + 5125 5126 5127 + 5127 5128 5125 + 5125 5128 5129 + 5129 5130 5125 + 1642 5130 5129 + 5126 4596 4595 + 4595 5131 5126 + 5127 5126 5131 + 5131 5132 5127 + 5127 5132 5133 + 5133 5134 5127 + 5128 5127 5134 + 5134 5135 5128 + 5129 5128 5135 + 4606 5131 4595 + 5132 5131 4606 + 4606 4610 5132 + 5132 4610 4615 + 4615 5133 5132 + 4620 5133 4615 + 5133 4620 5136 + 5136 5134 5133 + 5134 5136 5137 + 5137 5135 5134 + 5135 5137 5138 + 5138 1644 5135 + 5135 1644 5129 + 1643 5129 1644 + 5129 1643 1642 + 5139 5136 4620 + 5137 5136 5139 + 5139 5140 5137 + 5137 5140 5141 + 5141 5138 5137 + 1638 5138 5141 + 1644 5138 1638 + 4620 4625 5139 + 5142 5139 4625 + 5139 5142 5140 + 5140 5142 5143 + 5143 5144 5140 + 5140 5144 5141 + 5145 5141 5144 + 5146 5141 5145 + 5141 5146 1638 + 1638 5146 1639 + 4625 4630 5142 + 5143 5142 4630 + 4630 4635 5143 + 4635 5147 5143 + 5148 5143 5147 + 5144 5143 5148 + 5148 5149 5144 + 5144 5149 5145 + 4639 5147 4635 + 5150 5147 4639 + 5147 5150 5148 + 5148 5150 5151 + 5151 5152 5148 + 5149 5148 5152 + 5152 5153 5149 + 5145 5149 5153 + 4639 5154 5150 + 5150 5154 5155 + 5155 5151 5150 + 5156 5151 5155 + 5151 5156 5157 + 5157 5152 5151 + 5152 5157 5158 + 5158 5153 5152 + 5154 4639 4644 + 4644 5159 5154 + 5154 5159 5160 + 5155 5154 5160 + 5160 5161 5155 + 5162 5155 5161 + 5155 5162 5156 + 4649 5159 4644 + 5159 4649 5163 + 5163 5160 5159 + 5164 5160 5163 + 5160 5164 5165 + 5165 5161 5160 + 5161 5165 5166 + 5161 5166 5162 + 5167 5162 5166 + 5156 5162 5167 + 5163 4649 5168 + 5168 5169 5163 + 5170 5163 5169 + 5163 5170 5164 + 4648 5168 4649 + 5171 5168 4648 + 5168 5171 5172 + 5172 5169 5168 + 5169 5172 5173 + 5169 5173 5170 + 5174 5170 5173 + 5164 5170 5174 + 4648 4654 5171 + 5171 4654 5175 + 5175 5176 5171 + 5171 5176 5177 + 5172 5171 5177 + 5177 5178 5172 + 5173 5172 5178 + 5178 5179 5173 + 5173 5179 5174 + 4659 5175 4654 + 4668 5175 4659 + 5176 5175 4668 + 4668 5180 5176 + 5176 5180 5181 + 5181 5177 5176 + 5182 5177 5181 + 5177 5182 5183 + 5183 5178 5177 + 5179 5178 5183 + 5180 4668 5184 + 5184 5185 5180 + 5181 5180 5185 + 5186 5181 5185 + 5187 5181 5186 + 5181 5187 5182 + 4667 5184 4668 + 5188 5184 4667 + 5184 5188 5189 + 5189 5185 5184 + 5185 5189 5190 + 5190 5191 5185 + 5185 5191 5186 + 4667 5192 5188 + 5188 5192 5193 + 5193 5194 5188 + 5189 5188 5194 + 5194 5195 5189 + 5190 5189 5195 + 5192 4667 4666 + 4666 5196 5192 + 5192 5196 5197 + 5197 5193 5192 + 5198 5193 5197 + 5193 5198 5199 + 5199 5194 5193 + 5194 5199 5200 + 5200 5195 5194 + 5196 4666 4672 + 4672 4677 5196 + 5197 5196 4677 + 4677 5201 5197 + 5202 5197 5201 + 5197 5202 5198 + 5198 5202 5203 + 5203 5204 5198 + 5199 5198 5204 + 5204 5205 5199 + 5200 5199 5205 + 4681 5201 4677 + 5206 5201 4681 + 5201 5206 5202 + 5203 5202 5206 + 5206 5207 5203 + 5208 5203 5207 + 5203 5208 5209 + 5209 5204 5203 + 5204 5209 5210 + 5210 5205 5204 + 4681 5211 5206 + 5206 5211 5212 + 5212 5207 5206 + 5213 5207 5212 + 5207 5213 5208 + 5214 5208 5213 + 5209 5208 5214 + 5214 5215 5209 + 5210 5209 5215 + 5211 4681 5216 + 5216 5217 5211 + 5212 5211 5217 + 5217 5218 5212 + 5219 5212 5218 + 5212 5219 5213 + 4680 5216 4681 + 5220 5216 4680 + 5217 5216 5220 + 5220 5221 5217 + 5217 5221 5222 + 5222 5218 5217 + 5223 5218 5222 + 5218 5223 5219 + 5224 5219 5223 + 5213 5219 5224 + 4680 4686 5220 + 5220 4686 5225 + 5225 5226 5220 + 5221 5220 5226 + 5226 5227 5221 + 5222 5221 5227 + 5227 5228 5222 + 5229 5222 5228 + 5222 5229 5223 + 4685 5225 4686 + 5225 4685 5230 + 5230 5231 5225 + 5225 5231 5232 + 5232 5226 5225 + 5227 5226 5232 + 5232 5233 5227 + 5227 5233 5234 + 5234 5228 5227 + 5230 4685 4684 + 4684 5235 5230 + 5230 5235 5236 + 5236 5237 5230 + 5231 5230 5237 + 5237 5238 5231 + 5232 5231 5238 + 5238 5239 5232 + 5233 5232 5239 + 5235 4684 4683 + 4683 5240 5235 + 5235 5240 5241 + 5241 5236 5235 + 5242 5236 5241 + 5236 5242 5243 + 5243 5237 5236 + 5238 5237 5243 + 5240 4683 4690 + 4690 5244 5240 + 5240 5244 5245 + 5245 5241 5240 + 5246 5241 5245 + 5241 5246 5242 + 5242 5246 5247 + 5247 5248 5242 + 5243 5242 5248 + 5249 5244 4690 + 5244 5249 5250 + 5250 5245 5244 + 5245 5250 5251 + 5251 5252 5245 + 5245 5252 5246 + 5247 5246 5252 + 4690 4695 5249 + 5249 4695 5253 + 5253 5254 5249 + 5250 5249 5254 + 5254 5255 5250 + 5251 5250 5255 + 4700 5253 4695 + 5256 5253 4700 + 5253 5256 5257 + 5257 5254 5253 + 5254 5257 5258 + 5258 5255 5254 + 5255 5258 5259 + 5259 5260 5255 + 5255 5260 5251 + 4700 4705 5256 + 5256 4705 5261 + 5261 5262 5256 + 5257 5256 5262 + 5262 5263 5257 + 5258 5257 5263 + 5263 5264 5258 + 5259 5258 5264 + 4710 5261 4705 + 5265 5261 4710 + 5261 5265 5266 + 5266 5262 5261 + 5262 5266 5267 + 5267 5263 5262 + 5263 5267 5268 + 5268 5264 5263 + 4710 4715 5265 + 5265 4715 5269 + 5269 5270 5265 + 5266 5265 5270 + 5270 5271 5266 + 5267 5266 5271 + 5271 5272 5267 + 5268 5267 5272 + 5269 4715 4714 + 4714 5273 5269 + 5274 5269 5273 + 5270 5269 5274 + 5274 5275 5270 + 5270 5275 5276 + 5276 5271 5270 + 5272 5271 5276 + 4720 5273 4714 + 5273 4720 5277 + 5273 5277 5274 + 5274 5277 5278 + 5278 5279 5274 + 5279 5280 5274 + 5275 5274 5280 + 5277 4720 4719 + 4719 5278 5277 + 4729 5278 4719 + 5278 4729 5281 + 5281 5279 5278 + 5282 5279 5281 + 5279 5282 5283 + 5283 5280 5279 + 5280 5283 5284 + 5284 5285 5280 + 5280 5285 5275 + 5281 4729 5286 + 5286 5287 5281 + 5288 5281 5287 + 5281 5288 5282 + 5282 5288 5289 + 5289 5290 5282 + 5283 5282 5290 + 4728 5286 4729 + 4738 5286 4728 + 5286 4738 5291 + 5291 5287 5286 + 5292 5287 5291 + 5287 5292 5288 + 5288 5292 5293 + 5293 5289 5288 + 5294 5289 5293 + 5290 5289 5294 + 5295 5291 4738 + 5296 5291 5295 + 5291 5296 5292 + 5292 5296 5297 + 5297 5293 5292 + 5298 5293 5297 + 5293 5298 5294 + 4748 5295 4738 + 5299 5295 4748 + 5300 5295 5299 + 5295 5300 5296 + 5296 5300 5301 + 5301 5297 5296 + 5302 5297 5301 + 5297 5302 5298 + 4748 4753 5299 + 5303 5299 4753 + 5304 5299 5303 + 5299 5304 5300 + 5300 5304 5305 + 5305 5301 5300 + 5306 5301 5305 + 5301 5306 5302 + 4753 5307 5303 + 5308 5303 5307 + 5309 5303 5308 + 5303 5309 5304 + 5304 5309 5310 + 5310 5305 5304 + 4787 5305 5310 + 5305 4787 5306 + 4758 5307 4753 + 5311 5307 4758 + 5307 5311 5308 + 5311 5312 5308 + 4773 5308 5312 + 5308 4773 5309 + 5309 4773 4772 + 4772 5310 5309 + 4778 5310 4772 + 5310 4778 4787 + 4758 5313 5311 + 5311 5313 5314 + 5314 5312 5311 + 4768 5312 5314 + 5312 4768 4773 + 5313 4758 4757 + 4757 4763 5313 + 5313 4763 5314 + 4762 5314 4763 + 5314 4762 4768 + 5306 4787 4786 + 4786 4792 5306 + 5302 5306 4792 + 4792 5315 5302 + 5298 5302 5315 + 5315 5316 5298 + 5294 5298 5316 + 4796 5315 4792 + 5316 5315 4796 + 4796 5317 5316 + 5316 5317 5318 + 5318 5319 5316 + 5316 5319 5294 + 5320 5294 5319 + 5294 5320 5290 + 5317 4796 5321 + 5321 5322 5317 + 5318 5317 5322 + 5322 5323 5318 + 5324 5318 5323 + 5318 5324 5325 + 5325 5319 5318 + 5319 5325 5320 + 4795 5321 4796 + 5326 5321 4795 + 5321 5326 5327 + 5327 5322 5321 + 5322 5327 5328 + 5328 5323 5322 + 5323 5328 5329 + 5329 5330 5323 + 5323 5330 5324 + 4795 4801 5326 + 5326 4801 5331 + 5331 5332 5326 + 5327 5326 5332 + 5332 5333 5327 + 5328 5327 5333 + 5333 5334 5328 + 5329 5328 5334 + 4806 5331 4801 + 5331 4806 5335 + 5335 5336 5331 + 5331 5336 5337 + 5337 5332 5331 + 5332 5337 5338 + 5338 5333 5332 + 5333 5338 5339 + 5339 5334 5333 + 5335 4806 4805 + 4805 5340 5335 + 5341 5335 5340 + 5336 5335 5341 + 5341 5342 5336 + 5337 5336 5342 + 5343 5337 5342 + 5338 5337 5343 + 5343 5344 5338 + 5339 5338 5344 + 5345 5340 4805 + 5340 5345 5346 + 5346 5341 5340 + 5342 5341 5346 + 5346 5347 5342 + 5342 5347 5348 + 5348 5349 5342 + 5342 5349 5343 + 4805 4804 5345 + 5345 4804 4811 + 4811 5350 5345 + 5345 5350 5351 + 5351 5346 5345 + 5347 5346 5351 + 5351 5352 5347 + 5348 5347 5352 + 4869 5348 5352 + 5353 5348 4869 + 5349 5348 5353 + 5350 4811 4810 + 4810 5354 5350 + 5350 5354 5355 + 5355 5351 5350 + 5351 5355 5356 + 5356 5352 5351 + 5352 5356 4860 + 4860 4864 5352 + 5352 4864 4869 + 5354 4810 5357 + 5357 5358 5354 + 5354 5358 5359 + 5359 5355 5354 + 5356 5355 5359 + 5359 4855 5356 + 4860 5356 4855 + 4814 5357 4810 + 5360 5357 4814 + 5358 5357 5360 + 5360 5361 5358 + 5358 5361 5362 + 5362 5359 5358 + 5359 5362 5363 + 5363 4855 5359 + 4855 5363 4856 + 4857 4856 5363 + 4814 4819 5360 + 5360 4819 5364 + 5364 5365 5360 + 5361 5360 5365 + 5365 5366 5361 + 5362 5361 5366 + 5366 5367 5362 + 5363 5362 5367 + 5367 5368 5363 + 5363 5368 4857 + 4824 5364 4819 + 5369 5364 4824 + 5364 5369 5370 + 5370 5365 5364 + 5366 5365 5370 + 5370 5371 5366 + 5366 5371 5372 + 5372 5367 5366 + 5372 5368 5367 + 5368 5372 5373 + 5373 4857 5368 + 5369 4824 5374 + 5374 5375 5369 + 5370 5369 5375 + 5375 5376 5370 + 5377 5376 5375 + 5375 5378 5377 + 5377 5378 5379 + 4823 5374 4824 + 5378 5374 4823 + 5378 5375 5374 + 4823 5380 5378 + 5378 5380 5379 + 5381 5380 4823 + 5380 5381 5382 + 5382 5383 5380 + 5383 5382 5384 + 5384 5385 5383 + 4823 5386 5381 + 5381 5386 5387 + 5387 5388 5381 + 5382 5381 5388 + 5388 5389 5382 + 5384 5382 5389 + 5386 4823 4829 + 4829 5390 5386 + 5387 5386 5390 + 5390 5391 5387 + 5392 5387 5391 + 5388 5387 5392 + 5392 5393 5388 + 5388 5393 5394 + 5394 5389 5388 + 4828 5390 4829 + 5390 4828 4834 + 4834 5391 5390 + 5391 4834 4839 + 4839 5395 5391 + 5391 5395 5392 + 5396 5392 5395 + 5393 5392 5396 + 5396 5397 5393 + 5393 5397 5398 + 5398 5394 5393 + 5395 4839 4838 + 4838 4848 5395 + 5395 4848 5396 + 5399 5396 4848 + 5397 5396 5399 + 5399 5400 5397 + 5397 5400 5401 + 5401 5398 5397 + 5402 5398 5401 + 5398 5402 5403 + 5403 5394 5398 + 4848 4847 5399 + 5404 5399 4847 + 5400 5399 5404 + 5404 5405 5400 + 5400 5405 5406 + 5406 5401 5400 + 5407 5401 5406 + 5401 5407 5402 + 4847 5408 5404 + 5409 5404 5408 + 5404 5409 5410 + 5410 5405 5404 + 5405 5410 5411 + 5411 5412 5405 + 5405 5412 5406 + 4846 5408 4847 + 5408 4846 4857 + 4857 5373 5408 + 5408 5373 5409 + 5409 5373 5372 + 5413 5409 5372 + 5410 5409 5413 + 5413 5414 5410 + 5410 5414 5415 + 5372 5371 5413 + 5416 5413 5371 + 5413 5416 5414 + 5371 5370 5416 + 5417 5411 5410 + 5418 5411 5417 + 5411 5418 5419 + 5419 5412 5411 + 5412 5419 5420 + 5420 5406 5412 + 5421 5406 5420 + 5406 5421 5407 + 5417 5422 5418 + 5423 5418 5422 + 5419 5418 5423 + 5423 5424 5419 + 5419 5424 4174 + 5420 5419 4174 + 4174 4179 5420 + 5421 5420 4179 + 4179 4178 5421 + 5407 5421 4178 + 5425 5423 5422 + 5426 5423 5425 + 5424 5423 5426 + 5426 5427 5424 + 5424 5427 5428 + 5428 4174 5424 + 4174 5428 4166 + 5425 5429 5426 + 5426 5429 5430 + 5430 5431 5426 + 5427 5426 5431 + 5431 5432 5427 + 5428 5427 5432 + 5432 5433 5428 + 4166 5428 5433 + 5429 5425 5434 + 5429 5434 4208 + 4208 5430 5429 + 5435 5430 4208 + 5430 5435 5436 + 5436 5431 5430 + 5431 5436 5437 + 5437 5432 5431 + 5434 5425 5438 + 5438 4203 5434 + 4208 5434 4203 + 5385 5438 5425 + 5439 5438 5385 + 5438 5439 4198 + 4198 4203 5438 + 5385 5384 5439 + 5440 5439 5384 + 4198 5439 5440 + 5440 4189 4198 + 4183 4189 5440 + 5440 5441 4183 + 4183 5441 5442 + 5442 4184 4183 + 5384 5443 5440 + 5441 5440 5443 + 5443 5403 5441 + 5442 5441 5403 + 5403 5402 5442 + 5444 5442 5402 + 5444 4184 5442 + 4184 5444 4178 + 4178 5444 5407 + 5389 5443 5384 + 5443 5389 5394 + 5394 5403 5443 + 5402 5407 5444 + 4208 4213 5435 + 5435 4213 5445 + 5445 5446 5435 + 5435 5446 5447 + 5447 5448 5435 + 5448 5436 5435 + 4218 5445 4213 + 5449 5445 4218 + 5445 5449 5450 + 5450 5446 5445 + 5446 5450 5451 + 5451 5447 5446 + 5447 5451 5452 + 5447 5452 5453 + 5453 5448 5447 + 4218 5454 5449 + 5455 5449 5454 + 5450 5449 5455 + 5455 5456 5450 + 5451 5450 5456 + 5457 5451 5456 + 5452 5451 5457 + 4217 5454 4218 + 5454 4217 5458 + 5458 5459 5454 + 5454 5459 5455 + 5459 5460 5455 + 5461 5455 5460 + 5456 5455 5461 + 5458 4217 4226 + 4226 5462 5458 + 5463 5458 5462 + 5458 5463 5459 + 5459 5463 5464 + 5464 5460 5459 + 5460 5464 5465 + 5460 5465 5461 + 5466 5462 4226 + 5466 5467 5462 + 5462 5467 5463 + 5463 5467 5468 + 5468 5464 5463 + 5465 5464 5468 + 5468 5469 5465 + 5461 5465 5469 + 4226 5470 5466 + 5471 5466 5470 + 5467 5466 5471 + 5471 5468 5467 + 5468 5471 5472 + 5472 5469 5468 + 5469 5472 5473 + 5473 5474 5469 + 5469 5474 5461 + 5470 4226 5475 + 5475 5476 5470 + 5470 5476 5477 + 5477 5478 5470 + 5470 5478 5471 + 5472 5471 5478 + 5475 4226 4225 + 4225 5479 5475 + 5480 5475 5479 + 5476 5475 5480 + 5480 5481 5476 + 5476 5481 5482 + 5482 5477 5476 + 4231 5479 4225 + 5479 4231 5483 + 5483 5484 5479 + 5479 5484 5480 + 5484 5485 5480 + 5486 5480 5485 + 5480 5486 5481 + 5481 5486 5487 + 5487 5482 5481 + 3976 5483 4231 + 3975 5483 3976 + 5483 3975 5484 + 5484 3975 3974 + 3974 5485 5484 + 5485 3974 5488 + 5488 5489 5485 + 5485 5489 5486 + 5486 5489 5490 + 5490 5487 5486 + 5491 5487 5490 + 5487 5491 5482 + 5482 5491 5492 + 5492 5477 5482 + 5488 3974 3973 + 3973 5493 5488 + 5488 5493 5494 + 5494 5495 5488 + 5489 5488 5495 + 5495 5490 5489 + 5495 5496 5490 + 5490 5496 5491 + 5491 5496 5497 + 5492 5491 5497 + 3980 5493 3973 + 5493 3980 5498 + 5498 5499 5493 + 5493 5499 5494 + 5500 5494 5499 + 5500 5497 5494 + 5494 5497 5496 + 5496 5495 5494 + 3985 5498 3980 + 5501 5498 3985 + 5499 5498 5501 + 5501 5502 5499 + 5499 5502 5500 + 5500 5502 5503 + 5503 5504 5500 + 5497 5500 5504 + 3985 5505 5501 + 5501 5505 5506 + 5506 5507 5501 + 5502 5501 5507 + 5507 5503 5502 + 5503 5507 5508 + 5503 5508 5509 + 5509 5504 5503 + 5510 5505 3985 + 5505 5510 5511 + 5511 5512 5505 + 5505 5512 5506 + 3985 3984 5510 + 5510 3984 5513 + 5513 5514 5510 + 5511 5510 5514 + 5514 5515 5511 + 5516 5511 5515 + 5512 5511 5516 + 5513 3984 3983 + 5517 5513 3983 + 5518 5513 5517 + 5518 5514 5513 + 5514 5518 5519 + 5519 5515 5514 + 5515 5519 5520 + 5520 5521 5515 + 5515 5521 5516 + 5522 5517 3983 + 5523 5517 5522 + 5523 5524 5517 + 5517 5524 5518 + 5519 5518 5524 + 5525 5519 5524 + 5520 5519 5525 + 3983 5526 5522 + 5527 5522 5526 + 5528 5522 5527 + 5522 5528 5523 + 5523 5528 5529 + 5530 5523 5529 + 5524 5523 5530 + 3989 5526 3983 + 5526 3989 5531 + 5526 5531 5527 + 5532 5527 5531 + 5528 5527 5532 + 5532 5529 5528 + 5531 3989 3988 + 3988 5532 5531 + 5532 3988 5529 + 5529 3988 5533 + 5533 5534 5529 + 5529 5534 5535 + 5535 5530 5529 + 5536 5530 5535 + 5537 5530 5536 + 5530 5537 5524 + 5538 5533 3988 + 5539 5533 5538 + 5534 5533 5539 + 5534 5539 5540 + 5540 5535 5534 + 5541 5535 5540 + 5535 5541 5536 + 5542 5538 3988 + 5543 5538 5542 + 5538 5543 5544 + 5538 5544 5539 + 5539 5544 5545 + 5546 5542 3988 + 5547 5542 5546 + 5547 5548 5542 + 5542 5548 5543 + 5543 5548 5549 + 5549 5550 5543 + 5544 5543 5550 + 4234 5546 3988 + 4233 5546 4234 + 5551 5546 4233 + 5546 5551 5547 + 5547 5551 5552 + 3987 4234 3988 + 4235 4234 3987 + 3987 3986 4235 + 4235 3986 5553 + 5554 5540 5539 + 4233 4232 5551 + 5551 4232 237 + 237 5555 5551 + 5541 5540 5545 + 5545 5556 5541 + 5541 5556 5557 + 5557 5536 5541 + 5558 5536 5557 + 5536 5558 5537 + 5556 5545 5559 + 5559 5560 5556 + 5556 5560 5561 + 5561 5557 5556 + 5562 5557 5561 + 5557 5562 5558 + 5559 5545 5563 + 5563 5564 5559 + 5565 5559 5564 + 5560 5559 5565 + 5565 5566 5560 + 5566 5561 5560 + 5567 5561 5566 + 5561 5567 5562 + 5568 5563 5545 + 5569 5563 5568 + 5569 5564 5563 + 5564 5569 5570 + 5570 5565 5564 + 5565 5570 5571 + 5571 5566 5565 + 5566 5571 5567 + 5572 5567 5571 + 5562 5567 5572 + 5544 5568 5545 + 5550 5568 5544 + 5568 5550 5573 + 5573 5574 5568 + 5568 5574 5569 + 5570 5569 5574 + 5574 5575 5570 + 5575 5576 5570 + 5576 5571 5570 + 5571 5576 5572 + 5573 5550 5549 + 5549 5577 5573 + 5577 5578 5573 + 5574 5573 5578 + 5578 5575 5574 + 5575 5578 5579 + 5576 5575 5579 + 5576 5579 5580 + 5580 5572 5576 + 5581 5577 5549 + 5577 5581 5579 + 5579 5578 5577 + 5549 5582 5581 + 5581 5582 5583 + 5583 5584 5581 + 5581 5584 5580 + 5580 5579 5581 + 5582 5549 5585 + 5585 5586 5582 + 5583 5582 5586 + 5586 5587 5583 + 5587 5588 5583 + 5589 5583 5588 + 5583 5589 5584 + 5548 5585 5549 + 5590 5585 5548 + 5586 5585 5590 + 5590 5591 5586 + 5586 5591 5592 + 5592 5587 5586 + 5593 5587 5592 + 5587 5593 5594 + 5594 5588 5587 + 5548 5547 5590 + 3895 5590 5547 + 5591 5590 3895 + 3895 5595 5591 + 5592 5591 5595 + 5595 5596 5592 + 5593 5592 5596 + 5596 5597 5593 + 5593 5597 5598 + 5598 5594 5593 + 5599 3895 5547 + 5508 5507 5506 + 5506 5600 5508 + 5508 5600 5601 + 5601 5509 5508 + 5602 5509 5601 + 5504 5509 5602 + 5600 5506 5603 + 5603 5604 5600 + 5600 5604 5605 + 5605 5601 5600 + 5601 5605 5606 + 5606 5607 5601 + 5601 5607 5602 + 5603 5506 5512 + 5512 5608 5603 + 5603 5608 5609 + 5609 5610 5603 + 5604 5603 5610 + 5610 5611 5604 + 5605 5604 5611 + 5611 5612 5605 + 5606 5605 5612 + 5516 5608 5512 + 5608 5516 5613 + 5613 5609 5608 + 5609 5613 5614 + 5614 5615 5609 + 5609 5615 5616 + 5616 5610 5609 + 5611 5610 5616 + 5613 5516 5521 + 5521 5617 5613 + 5614 5613 5617 + 5617 5618 5614 + 5619 5614 5618 + 5615 5614 5619 + 5619 5620 5615 + 5616 5615 5620 + 5621 5617 5521 + 5617 5621 5622 + 5622 5618 5617 + 5618 5622 5623 + 5623 5624 5618 + 5618 5624 5619 + 5625 5619 5624 + 5620 5619 5625 + 5521 5520 5621 + 5621 5520 5626 + 5626 5627 5621 + 5622 5621 5627 + 5627 5628 5622 + 5623 5622 5628 + 5628 5629 5623 + 5630 5623 5629 + 5624 5623 5630 + 5525 5626 5520 + 5631 5626 5525 + 5626 5631 5632 + 5632 5627 5626 + 5627 5632 5633 + 5633 5628 5627 + 5628 5633 5634 + 5634 5629 5628 + 5525 5635 5631 + 5631 5635 5636 + 5636 5637 5631 + 5632 5631 5637 + 5637 5638 5632 + 5633 5632 5638 + 5638 5639 5633 + 5634 5633 5639 + 5635 5525 5640 + 5640 5641 5635 + 5636 5635 5641 + 5642 5636 5641 + 5643 5636 5642 + 5636 5643 5644 + 5644 5637 5636 + 5640 5525 5524 + 5524 5537 5640 + 5645 5640 5537 + 5641 5640 5645 + 5645 5646 5641 + 5641 5646 5647 + 5647 5648 5641 + 5641 5648 5642 + 5537 5558 5645 + 5649 5645 5558 + 5646 5645 5649 + 5649 5650 5646 + 5647 5646 5650 + 5650 5589 5647 + 5588 5647 5589 + 5647 5588 5594 + 5594 5648 5647 + 5558 5562 5649 + 5572 5649 5562 + 5650 5649 5572 + 5572 5580 5650 + 5650 5580 5584 + 5584 5589 5650 + 5648 5594 5598 + 5598 5642 5648 + 5651 5642 5598 + 5642 5651 5643 + 5643 5651 5652 + 5652 5653 5643 + 5644 5643 5653 + 5653 5654 5644 + 5655 5644 5654 + 5637 5644 5655 + 5598 5656 5651 + 5651 5656 5657 + 5657 5652 5651 + 5652 5657 5658 + 5652 5658 5659 + 5659 5653 5652 + 5654 5653 5659 + 5656 5598 5597 + 5597 5660 5656 + 5656 5660 5661 + 5661 5657 5656 + 5658 5657 5661 + 5661 5662 5658 + 5659 5658 5662 + 5663 5659 5662 + 5654 5659 5663 + 5663 5664 5654 + 5654 5664 5655 + 5660 5597 5596 + 5596 5665 5660 + 5660 5665 5666 + 5666 5661 5660 + 5661 5666 5667 + 5667 5662 5661 + 5665 5596 5595 + 5595 5668 5665 + 5665 5668 5669 + 5669 5666 5665 + 5667 5666 5669 + 5669 5670 5667 + 5671 5667 5670 + 5662 5667 5671 + 5668 5595 3895 + 3895 3893 5668 + 5668 3893 3900 + 3900 5669 5668 + 5669 3900 3899 + 3899 5670 5669 + 5670 3899 3904 + 3904 3903 5670 + 5670 3903 5671 + 3908 5671 3903 + 5672 5671 3908 + 5671 5672 5662 + 5662 5672 5673 + 5673 5663 5662 + 5674 5663 5673 + 5663 5674 5675 + 5675 5664 5663 + 5664 5675 5676 + 5676 5655 5664 + 3908 5677 5672 + 5672 5677 5678 + 5678 5673 5672 + 5679 5673 5678 + 5673 5679 5674 + 5680 5674 5679 + 5675 5674 5680 + 5677 3908 3907 + 3907 3913 5677 + 5677 3913 5681 + 5681 5678 5677 + 5682 5678 5681 + 5678 5682 5679 + 5679 5682 5683 + 5683 5684 5679 + 5679 5684 5685 + 5685 5680 5679 + 5686 5681 3913 + 5687 5681 5686 + 5681 5687 5682 + 5683 5682 5687 + 5688 5683 5687 + 5689 5683 5688 + 5684 5683 5689 + 3913 3912 5686 + 5686 3912 5690 + 5690 5691 5686 + 5691 5692 5686 + 5693 5686 5692 + 5686 5693 5687 + 3911 5690 3912 + 5690 3911 5694 + 5694 5695 5690 + 5690 5695 5696 + 5696 5691 5690 + 5697 5691 5696 + 5691 5697 5698 + 5698 5692 5691 + 5694 3911 3910 + 3910 5699 5694 + 3909 5699 3910 + 5699 3909 5700 + 5700 5701 5699 + 5655 5638 5637 + 5638 5655 5676 + 5676 5639 5638 + 5639 5676 5702 + 5702 5703 5639 + 5639 5703 5634 + 5704 5634 5703 + 5629 5634 5704 + 5702 5676 5675 + 5675 5705 5702 + 5706 5702 5705 + 5703 5702 5706 + 5706 5707 5703 + 5703 5707 5704 + 5708 5704 5707 + 5709 5704 5708 + 5704 5709 5629 + 5629 5709 5630 + 5680 5705 5675 + 5705 5680 5710 + 5705 5710 5706 + 5706 5710 5711 + 5711 5712 5706 + 5707 5706 5712 + 5712 5713 5707 + 5707 5713 5708 + 5710 5680 5685 + 5685 5711 5710 + 5711 5685 5714 + 5711 5714 5715 + 5715 5712 5711 + 5713 5712 5715 + 5715 5716 5713 + 5713 5716 5717 + 5717 5708 5713 + 5718 5708 5717 + 5708 5718 5709 + 5714 5685 5719 + 5719 5720 5714 + 5714 5720 5721 + 5721 5722 5714 + 5722 5715 5714 + 5716 5715 5722 + 5684 5719 5685 + 5723 5719 5684 + 5720 5719 5723 + 5720 5723 5724 + 5724 5721 5720 + 5725 5721 5724 + 5721 5725 5726 + 5726 5722 5721 + 5727 5722 5726 + 5722 5727 5716 + 5684 5689 5723 + 5723 5689 5728 + 5728 5724 5723 + 5729 5724 5728 + 5724 5729 5725 + 5725 5729 5730 + 5730 5731 5725 + 5725 5731 5732 + 5732 5726 5725 + 5688 5728 5689 + 5733 5728 5688 + 5728 5733 5729 + 5729 5733 5734 + 5734 5735 5729 + 5735 5730 5729 + 5736 5730 5735 + 5736 5731 5730 + 5731 5736 5737 + 5737 5732 5731 + 5688 5738 5733 + 5733 5738 5739 + 5739 5734 5733 + 5740 5734 5739 + 5734 5740 5741 + 5741 5735 5734 + 5738 5688 5742 + 5742 5743 5738 + 5738 5743 5744 + 5739 5738 5744 + 5745 5739 5744 + 5746 5739 5745 + 5739 5746 5740 + 5687 5742 5688 + 5747 5742 5687 + 5742 5747 5748 + 5748 5743 5742 + 5743 5748 5749 + 5749 5744 5743 + 5687 5693 5747 + 5750 5747 5693 + 5748 5747 5750 + 5750 5751 5748 + 5749 5748 5751 + 5751 5752 5749 + 5753 5749 5752 + 5753 5744 5749 + 5693 5754 5750 + 5755 5750 5754 + 5750 5755 5756 + 5756 5751 5750 + 5751 5756 5757 + 5757 5752 5751 + 5692 5754 5693 + 5758 5754 5692 + 5754 5758 5755 + 5755 5758 5759 + 5759 5760 5755 + 5756 5755 5760 + 5760 5761 5756 + 5757 5756 5761 + 5692 5698 5758 + 5758 5698 5762 + 5762 5763 5758 + 5758 5763 5759 + 5764 5759 5763 + 5765 5759 5764 + 5759 5765 5766 + 5766 5760 5759 + 5767 5762 5698 + 5768 5762 5767 + 5768 5763 5762 + 5763 5768 5764 + 5764 5768 5769 + 5770 5764 5769 + 5765 5764 5770 + 5698 5697 5767 + 5697 5771 5767 + 5772 5767 5771 + 5769 5767 5772 + 5767 5769 5768 + 5773 5771 5697 + 5774 5771 5773 + 5771 5774 5772 + 5772 5774 5775 + 5775 5776 5772 + 5776 5777 5772 + 5769 5772 5777 + 5777 5778 5769 + 5697 5779 5773 + 5780 5773 5779 + 5774 5773 5780 + 5780 5775 5774 + 5775 5780 5781 + 5696 5779 5697 + 5779 5696 5782 + 5782 5783 5779 + 5779 5783 5780 + 5781 5780 5783 + 5783 5784 5781 + 5785 5781 5784 + 5786 5781 5785 + 5782 5696 5695 + 5695 5787 5782 + 5788 5782 5787 + 5783 5782 5788 + 5788 5784 5783 + 5784 5788 5789 + 5789 5790 5784 + 5784 5790 5785 + 5791 5787 5695 + 5787 5791 5792 + 5792 5793 5787 + 5787 5793 5788 + 5789 5788 5793 + 5793 5794 5789 + 5795 5789 5794 + 5790 5789 5795 + 5695 5694 5791 + 5701 5791 5694 + 5792 5791 5701 + 5701 5796 5792 + 5796 5797 5792 + 5797 5798 5792 + 5793 5792 5798 + 5798 5794 5793 + 5694 5799 5701 + 5796 5701 5800 + 5437 5436 5448 + 5448 5801 5437 + 5437 5801 5802 + 5802 5803 5437 + 5432 5437 5803 + 5803 5433 5432 + 5801 5448 5453 + 5801 5453 5804 + 5804 5805 5801 + 5801 5805 5802 + 5806 5802 5805 + 5807 5802 5806 + 5802 5807 5808 + 5808 5803 5802 + 5433 5803 5808 + 5433 5808 4166 + 5804 5453 5452 + 5452 5809 5804 + 5809 5810 5804 + 5810 5811 5804 + 5811 5812 5804 + 5812 5813 5804 + 5814 5804 5813 + 5814 5805 5804 + 5457 5809 5452 + 5457 5815 5809 + 5809 5815 5816 + 5816 5810 5809 + 5816 5817 5810 + 5810 5817 5818 + 5818 5811 5810 + 5815 5457 5819 + 5819 5820 5815 + 5815 5820 5821 + 5821 5816 5815 + 5817 5816 5821 + 5821 5822 5817 + 5817 5822 5823 + 5823 5818 5817 + 5456 5819 5457 + 5824 5819 5456 + 5820 5819 5824 + 5824 5825 5820 + 5820 5825 5826 + 5826 5827 5820 + 5820 5827 5821 + 5456 5828 5824 + 5828 5829 5824 + 5825 5824 5829 + 5829 5830 5825 + 5826 5825 5830 + 5461 5828 5456 + 5828 5461 5831 + 5831 5829 5828 + 5829 5831 5832 + 5832 5830 5829 + 5830 5832 5833 + 5833 5834 5830 + 5830 5834 5826 + 5835 5831 5461 + 5832 5831 5835 + 5835 5836 5832 + 5833 5832 5836 + 5474 5835 5461 + 5837 5835 5474 + 5835 5837 5836 + 5836 5837 5838 + 5838 5839 5836 + 5836 5839 5833 + 5474 5840 5837 + 5838 5837 5840 + 5840 5841 5838 + 5841 5842 5838 + 5843 5838 5842 + 5839 5838 5843 + 5840 5474 5473 + 5840 5473 5844 + 5844 5841 5840 + 5841 5844 5845 + 5841 5845 5846 + 5846 5842 5841 + 5842 5846 5847 + 5842 5847 5843 + 5844 5473 5472 + 5472 5848 5844 + 5845 5844 5848 + 5848 5492 5845 + 5845 5492 5497 + 5846 5845 5497 + 5497 5849 5846 + 5847 5846 5849 + 5478 5848 5472 + 5848 5478 5477 + 5477 5492 5848 + 5504 5849 5497 + 5602 5849 5504 + 5849 5602 5847 + 5847 5602 5607 + 5843 5847 5607 + 5607 5850 5843 + 5839 5843 5850 + 5850 5851 5839 + 5839 5851 5833 + 5852 5850 5607 + 5850 5852 5853 + 5853 5851 5850 + 5851 5853 5854 + 5854 5855 5851 + 5851 5855 5833 + 5607 5606 5852 + 5856 5852 5606 + 5853 5852 5856 + 5856 5857 5853 + 5853 5857 5858 + 5854 5853 5858 + 5859 5856 5606 + 5860 5856 5859 + 5857 5856 5860 + 5857 5860 5861 + 5861 5862 5857 + 5857 5862 5858 + 5863 5859 5606 + 5864 5859 5863 + 5865 5859 5864 + 5859 5865 5860 + 5860 5865 5866 + 5861 5860 5866 + 5606 5867 5863 + 5868 5863 5867 + 5869 5863 5868 + 5863 5869 5864 + 5870 5864 5869 + 5865 5864 5870 + 5870 5866 5865 + 5612 5867 5606 + 5871 5867 5612 + 5867 5871 5868 + 5872 5868 5871 + 5873 5868 5872 + 5868 5873 5869 + 5869 5873 5874 + 5874 5875 5869 + 5869 5875 5870 + 5612 5876 5871 + 5871 5876 5877 + 5877 5878 5871 + 5871 5878 5872 + 5879 5872 5878 + 5880 5872 5879 + 5872 5880 5873 + 5874 5873 5880 + 5876 5612 5611 + 5611 5881 5876 + 5876 5881 5882 + 5882 5877 5876 + 5883 5877 5882 + 5877 5883 5884 + 5884 5878 5877 + 5878 5884 5879 + 5616 5881 5611 + 5881 5616 5885 + 5885 5882 5881 + 5882 5885 5886 + 5886 5887 5882 + 5882 5887 5883 + 5620 5885 5616 + 5886 5885 5620 + 5620 5888 5886 + 5889 5886 5888 + 5887 5886 5889 + 5889 5890 5887 + 5883 5887 5890 + 5890 5891 5883 + 5891 5892 5883 + 5884 5883 5892 + 5625 5888 5620 + 5888 5625 5893 + 5893 5894 5888 + 5888 5894 5889 + 5895 5889 5894 + 5889 5895 5896 + 5896 5890 5889 + 5890 5896 5897 + 5897 5891 5890 + 5893 5625 5898 + 5898 5899 5893 + 5900 5893 5899 + 5894 5893 5900 + 5900 5901 5894 + 5894 5901 5895 + 5624 5898 5625 + 5630 5898 5624 + 5898 5630 5902 + 5902 5899 5898 + 5899 5902 5903 + 5903 5904 5899 + 5899 5904 5900 + 5900 5904 5905 + 5906 5900 5905 + 5901 5900 5906 + 5902 5630 5709 + 5709 5718 5902 + 5903 5902 5718 + 5718 5907 5903 + 5908 5903 5907 + 5904 5903 5908 + 5908 5909 5904 + 5904 5909 5905 + 5717 5907 5718 + 5907 5717 5910 + 5910 5911 5907 + 5907 5911 5908 + 5912 5908 5911 + 5909 5908 5912 + 5912 5913 5909 + 5909 5913 5914 + 5914 5905 5909 + 5910 5717 5716 + 5716 5727 5910 + 5915 5910 5727 + 5911 5910 5915 + 5915 5916 5911 + 5911 5916 5912 + 5917 5912 5916 + 5913 5912 5917 + 5917 5918 5913 + 5914 5913 5918 + 5727 5919 5915 + 5920 5915 5919 + 5916 5915 5920 + 5920 5921 5916 + 5916 5921 5917 + 5922 5917 5921 + 5918 5917 5922 + 5726 5919 5727 + 5919 5726 5732 + 5732 5923 5919 + 5919 5923 5920 + 5924 5920 5923 + 5921 5920 5924 + 5924 5925 5921 + 5921 5925 5922 + 5926 5922 5925 + 5927 5922 5926 + 5922 5927 5918 + 5923 5732 5737 + 5737 5928 5923 + 5923 5928 5924 + 5929 5924 5928 + 5925 5924 5929 + 5929 5930 5925 + 5925 5930 5926 + 5931 5926 5930 + 5932 5926 5931 + 5926 5932 5927 + 5928 5737 5933 + 5933 5934 5928 + 5928 5934 5929 + 5935 5929 5934 + 5930 5929 5935 + 5935 5936 5930 + 5930 5936 5931 + 5933 5737 5736 + 5736 5937 5933 + 5938 5933 5937 + 5937 5939 5938 + 5940 5938 5939 + 5941 5938 5940 + 5938 5941 5934 + 5934 5941 5935 + 5735 5937 5736 + 5939 5937 5735 + 5735 5741 5939 + 5939 5741 5942 + 5942 5943 5939 + 5939 5943 5940 + 5944 5940 5943 + 5945 5940 5944 + 5940 5945 5941 + 5941 5945 5946 + 5946 5935 5941 + 5936 5935 5946 + 5947 5942 5741 + 5948 5942 5947 + 5942 5948 5949 + 5949 5943 5942 + 5943 5949 5944 + 5950 5944 5949 + 5951 5944 5950 + 5944 5951 5945 + 5741 5740 5947 + 5952 5947 5740 + 5953 5947 5952 + 5947 5953 5948 + 5948 5953 5954 + 5954 5955 5948 + 5955 5956 5948 + 5949 5948 5956 + 5740 5746 5952 + 5957 5952 5746 + 5958 5952 5957 + 5952 5958 5953 + 5953 5958 5959 + 5959 5954 5953 + 5960 5954 5959 + 5954 5960 5961 + 5961 5955 5954 + 5746 5962 5957 + 5963 5957 5962 + 5957 5963 5964 + 5964 5965 5957 + 5957 5965 5958 + 5958 5965 5966 + 5966 5959 5958 + 5745 5962 5746 + 5967 5962 5745 + 5962 5967 5963 + 5963 5967 5968 + 5968 5969 5963 + 5964 5963 5969 + 5969 5970 5964 + 5971 5964 5970 + 5965 5964 5971 + 5971 5966 5965 + 5745 5972 5967 + 5967 5972 5973 + 5973 5968 5967 + 5974 5968 5973 + 5968 5974 5975 + 5975 5969 5968 + 5969 5975 5976 + 5976 5970 5969 + 5972 5745 5977 + 5977 5978 5972 + 5972 5978 5979 + 5979 5973 5972 + 5980 5973 5979 + 5973 5980 5974 + 5744 5977 5745 + 5981 5977 5744 + 5978 5977 5981 + 5978 5981 5982 + 5982 5979 5978 + 5983 5979 5982 + 5979 5983 5980 + 5980 5983 5984 + 5984 5985 5980 + 5974 5980 5985 + 5744 5753 5981 + 5982 5981 5753 + 5753 5986 5982 + 5987 5982 5986 + 5982 5987 5983 + 5983 5987 5988 + 5988 5984 5983 + 5989 5984 5988 + 5984 5989 5990 + 5990 5985 5984 + 5752 5986 5753 + 5991 5986 5752 + 5986 5991 5987 + 5987 5991 5992 + 5992 5988 5987 + 5993 5988 5992 + 5988 5993 5989 + 5989 5993 5994 + 5994 5995 5989 + 5990 5989 5995 + 5752 5757 5991 + 5991 5757 5996 + 5996 5992 5991 + 5997 5992 5996 + 5992 5997 5993 + 5993 5997 5998 + 5998 5994 5993 + 5999 5994 5998 + 5994 5999 6000 + 6000 5995 5994 + 5761 5996 5757 + 6001 5996 5761 + 5996 6001 5997 + 5997 6001 6002 + 6002 5998 5997 + 6003 5998 6002 + 5998 6003 5999 + 5999 6003 6004 + 6004 6005 5999 + 6000 5999 6005 + 5761 6006 6001 + 6001 6006 6007 + 6007 6002 6001 + 6008 6002 6007 + 6002 6008 6003 + 6003 6008 6009 + 6009 6004 6003 + 6006 5761 5760 + 5760 5766 6006 + 6006 5766 6010 + 6010 6007 6006 + 6011 6007 6010 + 6007 6011 6008 + 6008 6011 6012 + 6012 6009 6008 + 6013 6009 6012 + 6009 6013 6014 + 6014 6004 6009 + 6015 6010 5766 + 6016 6010 6015 + 6010 6016 6011 + 6011 6016 6017 + 6017 6012 6011 + 6018 6012 6017 + 6012 6018 6013 + 5766 5765 6015 + 5765 6019 6015 + 6020 6015 6019 + 6021 6015 6020 + 6015 6021 6016 + 6017 6016 6021 + 6021 6022 6017 + 6023 6017 6022 + 6017 6023 6018 + 5770 6019 5765 + 6024 6019 5770 + 6019 6024 6020 + 6020 6024 6025 + 6025 6026 6020 + 6026 6027 6020 + 6021 6020 6027 + 6027 6022 6021 + 6028 6022 6027 + 6022 6028 6023 + 6024 5770 6029 + 6029 6025 6024 + 6025 6029 6030 + 6025 6030 6031 + 6031 6026 6025 + 6032 6026 6031 + 6026 6032 6033 + 6033 6027 6026 + 6027 6033 6028 + 6029 5770 5769 + 5769 6034 6029 + 6030 6029 5778 + 5778 6035 6030 + 6030 6035 6036 + 6036 6037 6030 + 6037 6031 6030 + 6038 6031 6037 + 6031 6038 6032 + 6035 5778 5777 + 6035 5777 5776 + 5776 6036 6035 + 6036 5776 6039 + 6039 6040 6036 + 6036 6040 6041 + 6041 6037 6036 + 6042 6037 6041 + 6037 6042 6038 + 6039 5776 5775 + 5775 5786 6039 + 6043 6039 5786 + 6040 6039 6043 + 6043 6044 6040 + 6040 6044 6045 + 6045 6041 6040 + 6046 6041 6045 + 6041 6046 6042 + 6047 5786 5775 + 5805 5814 5806 + 5806 5814 6048 + 6048 6049 5806 + 5807 5806 6049 + 6049 4167 5807 + 5807 4167 4166 + 4166 5808 5807 + 5813 6048 5814 + 6050 6048 5813 + 6048 6050 6051 + 6051 6049 6048 + 6049 6051 4168 + 4168 4167 6049 + 6050 5813 5812 + 5812 6052 6050 + 6051 6050 6052 + 6052 6053 6051 + 6053 6054 6051 + 6054 6055 6051 + 4168 6051 6055 + 6055 6056 4168 + 4168 6056 4162 + 6057 6052 5812 + 6052 6057 6058 + 6058 6053 6052 + 6059 6053 6058 + 6053 6059 6060 + 6060 6054 6053 + 6057 5812 5811 + 5811 6061 6057 + 6057 6061 6062 + 6062 6058 6057 + 6063 6058 6062 + 6058 6063 6059 + 6059 6063 6064 + 6064 6065 6059 + 6060 6059 6065 + 5818 6061 5811 + 6061 5818 5823 + 5823 6066 6061 + 6061 6066 6062 + 6067 6062 6066 + 6062 6067 6068 + 6068 6069 6062 + 6062 6069 6063 + 6063 6069 6070 + 6070 6064 6063 + 6071 6066 5823 + 6066 6071 6067 + 6072 6067 6071 + 6068 6067 6072 + 6072 6073 6068 + 6068 6073 6074 + 6074 6075 6068 + 6069 6068 6075 + 6075 6070 6069 + 5823 6076 6071 + 6071 6076 6077 + 6077 6078 6071 + 6071 6078 6072 + 6079 6072 6078 + 6072 6079 6080 + 6080 6073 6072 + 6076 5823 5822 + 5822 6081 6076 + 6077 6076 6081 + 6081 6082 6077 + 6083 6077 6082 + 6077 6083 6084 + 6084 6078 6077 + 6078 6084 6079 + 6085 6079 6084 + 6080 6079 6085 + 6081 5822 5821 + 5821 6086 6081 + 6081 6086 6087 + 6087 6082 6081 + 6088 6082 6087 + 6082 6088 6083 + 6089 6083 6088 + 6084 6083 6089 + 6089 6090 6084 + 6084 6090 6085 + 6086 5821 5827 + 5827 6091 6086 + 6087 6086 6091 + 6091 6092 6087 + 6093 6087 6092 + 6087 6093 6088 + 6088 6093 6094 + 6094 6095 6088 + 6088 6095 6089 + 6091 5827 5826 + 5826 6096 6091 + 6091 6096 6097 + 6097 6092 6091 + 6098 6092 6097 + 6092 6098 6093 + 6094 6093 6098 + 6096 5826 5834 + 5834 6099 6096 + 6097 6096 6099 + 6099 6100 6097 + 6101 6097 6100 + 6097 6101 6098 + 6098 6101 6102 + 6102 6103 6098 + 6098 6103 6094 + 6099 5834 5833 + 5833 6104 6099 + 6099 6104 6105 + 6105 6100 6099 + 6106 6100 6105 + 6100 6106 6101 + 6102 6101 6106 + 6104 5833 5855 + 5855 6107 6104 + 6105 6104 6107 + 6107 6108 6105 + 6109 6105 6108 + 6105 6109 6106 + 6106 6109 6110 + 6110 6111 6106 + 6106 6111 6102 + 6107 5855 5854 + 5854 6112 6107 + 6107 6112 6113 + 6113 6108 6107 + 6114 6108 6113 + 6108 6114 6109 + 6110 6109 6114 + 6112 5854 6115 + 6115 6116 6112 + 6113 6112 6116 + 6116 6117 6113 + 6118 6113 6117 + 6113 6118 6114 + 5858 6115 5854 + 6119 6115 5858 + 6116 6115 6119 + 6119 6120 6116 + 6116 6120 6121 + 6121 6117 6116 + 6122 6117 6121 + 6117 6122 6118 + 6123 6118 6122 + 6114 6118 6123 + 5858 6124 6119 + 6125 6119 6124 + 6120 6119 6125 + 6125 6126 6120 + 6121 6120 6126 + 6126 6127 6121 + 6128 6121 6127 + 6121 6128 6122 + 6124 5858 6129 + 6124 6129 6130 + 6130 6131 6124 + 6124 6131 6125 + 6132 6125 6131 + 6126 6125 6132 + 6129 5858 5862 + 5862 6133 6129 + 6129 6133 6134 + 6134 6135 6129 + 6135 6136 6129 + 6136 6137 6129 + 6137 6138 6129 + 6138 6130 6129 + 6133 5862 5861 + 6133 5861 6139 + 6139 6134 6133 + 6134 6139 6140 + 6134 6140 6141 + 6141 6135 6134 + 6135 6141 6142 + 6135 6142 6143 + 6143 6136 6135 + 5866 6139 5861 + 6140 6139 5866 + 5866 6144 6140 + 6141 6140 6144 + 6144 6145 6141 + 6142 6141 6145 + 6145 6146 6142 + 6142 6146 6147 + 6147 6143 6142 + 6148 6143 6147 + 6136 6143 6148 + 6144 5866 5870 + 6144 5870 6149 + 6149 6145 6144 + 6145 6149 6146 + 6146 6149 6150 + 6150 6151 6146 + 6146 6151 6147 + 6152 6147 6151 + 6153 6147 6152 + 6147 6153 6148 + 6150 6149 5870 + 5875 6150 5870 + 6154 6150 5875 + 6151 6150 6154 + 6154 6155 6151 + 6151 6155 6152 + 6152 6155 6156 + 6156 6157 6152 + 6158 6152 6157 + 6152 6158 6153 + 5875 6159 6154 + 6154 6159 6160 + 6160 6161 6154 + 6155 6154 6161 + 6161 6156 6155 + 6162 6156 6161 + 6156 6162 6163 + 6163 6157 6156 + 6164 6159 5875 + 6159 6164 6165 + 6165 6160 6159 + 6166 6160 6165 + 6160 6166 6167 + 6167 6161 6160 + 6161 6167 6162 + 5875 5874 6164 + 6164 5874 6168 + 6168 6169 6164 + 6164 6169 6170 + 6170 6165 6164 + 6171 6165 6170 + 6165 6171 6166 + 5880 6168 5874 + 6172 6168 5880 + 6168 6172 6173 + 6173 6169 6168 + 6169 6173 6174 + 6174 6170 6169 + 6175 6170 6174 + 6170 6175 6171 + 5880 6176 6172 + 6172 6176 6177 + 6177 6178 6172 + 6173 6172 6178 + 6178 6179 6173 + 6173 6179 6180 + 6180 6174 6173 + 5879 6176 5880 + 6176 5879 6181 + 6181 6177 6176 + 6182 6177 6181 + 6177 6182 6183 + 6183 6178 6177 + 6178 6183 6184 + 6184 6179 6178 + 6179 6184 6185 + 6185 6180 6179 + 6181 5879 5884 + 5884 6186 6181 + 6187 6181 6186 + 6181 6187 6182 + 6182 6187 6188 + 6188 6189 6182 + 6183 6182 6189 + 6189 6190 6183 + 6184 6183 6190 + 5892 6186 5884 + 6191 6186 5892 + 6186 6191 6187 + 6188 6187 6191 + 6191 6192 6188 + 6193 6188 6192 + 6188 6193 6194 + 6194 6189 6188 + 6189 6194 6195 + 6195 6190 6189 + 6191 5892 5891 + 5891 6192 6191 + 6196 6192 5891 + 6192 6196 6193 + 6197 6193 6196 + 6194 6193 6197 + 6197 6198 6194 + 6195 6194 6198 + 6198 6199 6195 + 6200 6195 6199 + 6195 6200 6190 + 6190 6200 6184 + 5891 5897 6196 + 6196 5897 6201 + 6201 6202 6196 + 6196 6202 6197 + 6203 6197 6202 + 6198 6197 6203 + 6203 6204 6198 + 6198 6204 6205 + 6205 6199 6198 + 6206 6201 5897 + 6207 6201 6206 + 6207 6202 6201 + 6202 6207 6203 + 6208 6203 6207 + 6204 6203 6208 + 6208 6209 6204 + 6205 6204 6209 + 6210 6206 5897 + 6211 6206 6210 + 6206 6211 6212 + 6212 6213 6206 + 6206 6213 6207 + 6207 6213 6208 + 6214 6208 6213 + 6208 6214 6209 + 5897 5896 6210 + 6215 6210 5896 + 6210 6215 6216 + 6216 6217 6210 + 6210 6217 6211 + 6211 6217 6218 + 6218 6219 6211 + 6212 6211 6219 + 5896 5895 6215 + 6220 6215 5895 + 6216 6215 6220 + 6220 6221 6216 + 6216 6221 6222 + 6222 6223 6216 + 6217 6216 6223 + 6223 6218 6217 + 5895 5901 6220 + 5906 6220 5901 + 5906 6221 6220 + 6221 5906 6224 + 6224 6222 6221 + 6222 6224 6225 + 6222 6225 6226 + 6226 6223 6222 + 6218 6223 6226 + 6226 6227 6218 + 6218 6227 6228 + 6228 6219 6218 + 5905 6224 5906 + 6225 6224 5905 + 5905 6229 6225 + 6226 6225 6229 + 6230 6226 6229 + 6227 6226 6230 + 6230 6231 6227 + 6228 6227 6231 + 6229 5905 5914 + 5914 6232 6229 + 6229 6232 6233 + 6233 6234 6229 + 6229 6234 6230 + 6235 6230 6234 + 6235 6231 6230 + 6232 5914 5918 + 5918 5927 6232 + 6232 5927 5932 + 5932 6233 6232 + 6236 6233 5932 + 6234 6233 6236 + 6236 6237 6234 + 6234 6237 6235 + 6235 6237 6238 + 6238 6239 6235 + 6231 6235 6239 + 6239 6240 6231 + 6231 6240 6228 + 5932 6241 6236 + 6242 6236 6241 + 6237 6236 6242 + 6242 6238 6237 + 6238 6242 6243 + 6243 6244 6238 + 6238 6244 6245 + 6245 6239 6238 + 6240 6239 6245 + 5931 6241 5932 + 6241 5931 6246 + 6246 6247 6241 + 6241 6247 6242 + 6243 6242 6247 + 6247 6248 6243 + 6249 6243 6248 + 6244 6243 6249 + 6249 6250 6244 + 6245 6244 6250 + 6246 5931 5936 + 5936 6251 6246 + 6252 6246 6251 + 6247 6246 6252 + 6252 6248 6247 + 6248 6252 6253 + 6253 6254 6248 + 6248 6254 6249 + 6255 6249 6254 + 6250 6249 6255 + 5946 6251 5936 + 6251 5946 6256 + 6256 6257 6251 + 6251 6257 6252 + 6253 6252 6257 + 6257 6258 6253 + 6259 6253 6258 + 6254 6253 6259 + 6259 6260 6254 + 6254 6260 6255 + 6256 5946 5945 + 5945 5951 6256 + 6261 6256 5951 + 6257 6256 6261 + 6261 6258 6257 + 6258 6261 6262 + 6262 6263 6258 + 6258 6263 6259 + 6264 6259 6263 + 6260 6259 6264 + 5951 6265 6261 + 6262 6261 6265 + 6265 6266 6262 + 6267 6262 6266 + 6263 6262 6267 + 6267 6268 6263 + 6263 6268 6264 + 5950 6265 5951 + 6265 5950 6269 + 6269 6266 6265 + 6266 6269 6270 + 6270 6271 6266 + 6266 6271 6267 + 6272 6267 6271 + 6268 6267 6272 + 6269 5950 6273 + 6273 6274 6269 + 6270 6269 6274 + 6274 6275 6270 + 6276 6270 6275 + 6271 6270 6276 + 6276 6277 6271 + 6271 6277 6272 + 5949 6273 5950 + 5956 6273 5949 + 6274 6273 5956 + 6274 5956 5955 + 5955 6275 6274 + 6278 6275 5955 + 6275 6278 6276 + 6276 6278 6279 + 6279 6280 6276 + 6277 6276 6280 + 6280 6281 6277 + 6277 6281 6282 + 6282 6272 6277 + 5955 5961 6278 + 6278 5961 6283 + 6283 6279 6278 + 6284 6279 6283 + 6279 6284 6285 + 6285 6280 6279 + 6281 6280 6285 + 6285 6286 6281 + 6281 6286 6287 + 6287 6282 6281 + 6283 5961 5960 + 5960 6288 6283 + 6289 6283 6288 + 6283 6289 6284 + 6284 6289 6290 + 6290 6291 6284 + 6284 6291 6292 + 6292 6285 6284 + 6286 6285 6292 + 6293 6288 5960 + 6294 6288 6293 + 6288 6294 6289 + 6289 6294 6295 + 6295 6296 6289 + 6296 6290 6289 + 5960 6297 6293 + 6293 6297 6298 + 6298 6299 6293 + 6300 6293 6299 + 6293 6300 6294 + 6294 6300 6301 + 6301 6295 6294 + 5959 6297 5960 + 6297 5959 5966 + 5966 6298 6297 + 6302 6298 5966 + 6298 6302 6303 + 6303 6299 6298 + 6299 6303 6304 + 6304 6305 6299 + 6299 6305 6300 + 6301 6300 6305 + 5966 5971 6302 + 6302 5971 6306 + 6306 6307 6302 + 6303 6302 6307 + 6307 6308 6303 + 6304 6303 6308 + 6308 6309 6304 + 6310 6304 6309 + 6305 6304 6310 + 5970 6306 5971 + 6311 6306 5970 + 6306 6311 6312 + 6312 6307 6306 + 6307 6312 6313 + 6313 6308 6307 + 6308 6313 6314 + 6314 6309 6308 + 5970 5976 6311 + 6311 5976 6315 + 6315 6316 6311 + 6312 6311 6316 + 6316 6317 6312 + 6313 6312 6317 + 6317 6318 6313 + 6314 6313 6318 + 6319 6315 5976 + 6320 6315 6319 + 6315 6320 6321 + 6321 6316 6315 + 6316 6321 6322 + 6322 6317 6316 + 6317 6322 6323 + 6323 6318 6317 + 5976 5975 6319 + 6324 6319 5975 + 6325 6319 6324 + 6319 6325 6320 + 6320 6325 6326 + 6326 6327 6320 + 6321 6320 6327 + 6327 6328 6321 + 6322 6321 6328 + 5975 5974 6324 + 5985 6324 5974 + 6329 6324 5985 + 6324 6329 6325 + 6325 6329 6330 + 6330 6326 6325 + 6331 6326 6330 + 6326 6331 6332 + 6332 6327 6326 + 6327 6332 6333 + 6333 6328 6327 + 5985 5990 6329 + 6329 5990 6334 + 6334 6330 6329 + 6335 6330 6334 + 6330 6335 6331 + 6336 6331 6335 + 6332 6331 6336 + 6336 6337 6332 + 6333 6332 6337 + 5995 6334 5990 + 6338 6334 5995 + 6334 6338 6335 + 6335 6338 6339 + 6339 6340 6335 + 6335 6340 6336 + 6341 6336 6340 + 6341 6337 6336 + 5995 6000 6338 + 6338 6000 6342 + 6342 6339 6338 + 6343 6339 6342 + 6339 6343 6344 + 6344 6340 6339 + 6340 6344 6341 + 6345 6341 6344 + 6346 6341 6345 + 6341 6346 6337 + 6005 6342 6000 + 6347 6342 6005 + 6342 6347 6343 + 6343 6347 6348 + 6348 6349 6343 + 6344 6343 6349 + 6349 6350 6344 + 6344 6350 6345 + 6005 6351 6347 + 6347 6351 6352 + 6352 6348 6347 + 6353 6348 6352 + 6348 6353 6354 + 6354 6349 6348 + 6349 6354 6350 + 6351 6005 6004 + 6004 6014 6351 + 6351 6014 6355 + 6355 6352 6351 + 6356 6352 6355 + 6352 6356 6353 + 6353 6356 6357 + 6357 6358 6353 + 6354 6353 6358 + 6358 6359 6354 + 6350 6354 6359 + 6360 6355 6014 + 6361 6355 6360 + 6355 6361 6356 + 6356 6361 6362 + 6357 6356 6362 + 6014 6013 6360 + 6363 6360 6013 + 6364 6360 6363 + 6360 6364 6361 + 6361 6364 6365 + 6365 6366 6361 + 6361 6366 6362 + 6013 6018 6363 + 6367 6363 6018 + 6368 6363 6367 + 6363 6368 6364 + 6365 6364 6368 + 6369 6365 6368 + 6366 6365 6369 + 6369 6370 6366 + 6366 6370 6371 + 6371 6362 6366 + 6018 6023 6367 + 6372 6367 6023 + 6373 6367 6372 + 6367 6373 6368 + 6368 6373 6369 + 6374 6369 6373 + 6370 6369 6374 + 6374 6375 6370 + 6371 6370 6375 + 6023 6028 6372 + 6376 6372 6028 + 6377 6372 6376 + 6372 6377 6373 + 6373 6377 6374 + 6378 6374 6377 + 6377 6379 6378 + 6378 6379 6380 + 6381 6378 6380 + 6028 6033 6376 + 6382 6376 6033 + 6379 6376 6382 + 6376 6379 6377 + 6033 6032 6382 + 6383 6382 6032 + 6380 6382 6383 + 6382 6380 6379 + 6032 6038 6383 + 6384 6383 6038 + 6385 6383 6384 + 6383 6385 6380 + 6380 6385 6381 + 6381 6385 6386 + 6386 6387 6381 + 6375 6381 6387 + 6381 6375 6374 + 6038 6042 6384 + 6388 6384 6042 + 6386 6384 6388 + 6384 6386 6385 + 6042 6046 6388 + 6389 6388 6046 + 6390 6388 6389 + 6388 6390 6386 + 6386 6390 6391 + 6391 6387 6386 + 6387 6391 6392 + 6392 6393 6387 + 6387 6393 6375 + 6046 6394 6389 + 6395 6389 6394 + 6396 6389 6395 + 6389 6396 6390 + 6391 6390 6396 + 6392 6391 6396 + 6045 6394 6046 + 6394 6045 6397 + 6397 6398 6394 + 6394 6398 6395 + 6399 6395 6398 + 6400 6395 6399 + 6395 6400 6396 + 6396 6400 6392 + 6397 6045 6044 + 6044 6401 6397 + 6402 6397 6401 + 6398 6397 6402 + 6402 6403 6398 + 6398 6403 6399 + 6404 6399 6403 + 6405 6399 6404 + 6399 6405 6400 + 6392 6400 6405 + 6406 6401 6044 + 6401 6406 6407 + 6407 6408 6401 + 6401 6408 6402 + 6409 6402 6408 + 6403 6402 6409 + 6409 6410 6403 + 6403 6410 6404 + 6044 6043 6406 + 6406 6043 6411 + 6411 6412 6406 + 6407 6406 6412 + 6412 6413 6407 + 6414 6407 6413 + 6408 6407 6414 + 6414 6415 6408 + 6408 6415 6409 + 5786 6411 6043 + 5785 6411 5786 + 6411 5785 6416 + 6416 6412 6411 + 6412 6416 6417 + 6417 6413 6412 + 6413 6417 6418 + 6418 6419 6413 + 6413 6419 6414 + 6420 6414 6419 + 6415 6414 6420 + 6416 5785 5790 + 5790 6421 6416 + 6417 6416 6421 + 6421 6422 6417 + 6418 6417 6422 + 6422 6423 6418 + 6424 6418 6423 + 6419 6418 6424 + 6424 6425 6419 + 6419 6425 6420 + 5795 6421 5790 + 6421 5795 6426 + 6426 6422 6421 + 6422 6426 6427 + 6427 6423 6422 + 6423 6427 6428 + 6428 6429 6423 + 6423 6429 6424 + 6430 6424 6429 + 6425 6424 6430 + 6426 5795 6431 + 6431 6432 6426 + 6427 6426 6432 + 6432 6433 6427 + 6428 6427 6433 + 6433 6434 6428 + 6435 6428 6434 + 6429 6428 6435 + 5794 6431 5795 + 6436 6431 5794 + 6431 6436 6437 + 6437 6432 6431 + 6432 6437 6438 + 6438 6433 6432 + 6433 6438 6439 + 6439 6434 6433 + 5794 5798 6436 + 6436 5798 5797 + 5797 6440 6436 + 6437 6436 6440 + 6440 198 6437 + 6440 5797 6441 + 6440 6441 6442 + 6442 6443 6440 + 6441 5797 5796 + 5796 123 6441 + 5700 123 5796 + 123 5700 3848 + 3848 6444 123 + 6442 6441 6445 + 6438 6437 6446 + 6446 197 6438 + 6439 6438 197 + 197 3918 6439 + 6447 6439 3918 + 6434 6439 6447 + 6447 6448 6434 + 6434 6448 6435 + 3918 6449 6447 + 6450 6447 6449 + 6448 6447 6450 + 6450 6451 6448 + 6448 6451 6452 + 6452 6435 6448 + 6453 6435 6452 + 6435 6453 6429 + 3917 6449 3918 + 6449 3917 3928 + 3928 6454 6449 + 6449 6454 6450 + 6455 6450 6454 + 6451 6450 6455 + 6455 6456 6451 + 6451 6456 6457 + 6457 6452 6451 + 6458 6452 6457 + 6452 6458 6453 + 6454 3928 6459 + 6459 4104 6454 + 6454 4104 6455 + 4103 6455 4104 + 6456 6455 4103 + 4103 4102 6456 + 6456 4102 6460 + 6460 6457 6456 + 6458 6457 6460 + 6459 3928 3927 + 3927 6461 6459 + 6459 6461 6462 + 4105 6459 6462 + 4104 6459 4105 + 3926 6461 3927 + 6461 3926 3933 + 3933 6462 6461 + 3933 6463 6462 + 6462 6463 6464 + 6464 6465 6462 + 6462 6465 4105 + 4099 4105 6465 + 6465 4100 4099 + 6463 3933 6466 + 6466 6467 6463 + 6463 6467 6468 + 6468 6469 6463 + 6469 6464 6463 + 4100 6464 6469 + 4100 6465 6464 + 3932 6466 3933 + 3938 6466 3932 + 6466 3938 6470 + 6470 6467 6466 + 6467 6470 6471 + 6471 6468 6467 + 6468 6471 6472 + 6472 6473 6468 + 6468 6473 6474 + 6474 6469 6468 + 6470 3938 4140 + 4140 6475 6470 + 6471 6470 6475 + 6475 6476 6471 + 6472 6471 6476 + 6476 4397 6472 + 4401 6472 4397 + 6473 6472 4401 + 4401 4405 6473 + 6474 6473 4405 + 4144 6475 4140 + 6475 4144 6477 + 6477 6476 6475 + 6476 6477 4391 + 4391 4397 6476 + 6477 4144 4148 + 4148 4392 6477 + 4391 6477 4392 + 4153 4392 4148 + 4392 4153 4386 + 4386 4153 4387 + 4152 4387 4153 + 4158 4387 4152 + 4387 4158 4382 + 4382 4158 6478 + 6478 4378 4382 + 6479 4378 6478 + 4378 6479 4372 + 4372 6479 6480 + 6480 4373 4372 + 4157 6478 4158 + 6481 6478 4157 + 6478 6481 6479 + 6479 6481 6482 + 6482 6480 6479 + 6480 6482 6054 + 6054 6060 6480 + 6480 6060 4374 + 4374 4373 6480 + 4157 4163 6481 + 6481 4163 6483 + 6483 6482 6481 + 6054 6482 6483 + 6483 6055 6054 + 6483 6056 6055 + 6056 6483 4163 + 4163 4162 6056 + 6065 4374 6060 + 4368 4374 6065 + 6065 6484 4368 + 4368 6484 4369 + 6485 4369 6484 + 6486 4369 6485 + 4369 6486 4364 + 4360 4364 6486 + 6484 6065 6064 + 6064 6487 6484 + 6484 6487 6485 + 6488 6485 6487 + 6489 6485 6488 + 6485 6489 6486 + 6486 6489 6490 + 6490 6491 6486 + 6486 6491 4360 + 4353 4360 6491 + 6487 6064 6070 + 6070 6492 6487 + 6487 6492 6488 + 6493 6488 6492 + 6488 6493 6494 + 6494 6495 6488 + 6488 6495 6489 + 6489 6495 6496 + 6496 6490 6489 + 6497 6492 6070 + 6492 6497 6493 + 6498 6493 6497 + 6494 6493 6498 + 6498 6499 6494 + 6494 6499 6500 + 6500 6501 6494 + 6495 6494 6501 + 6501 6496 6495 + 6070 6075 6497 + 6497 6075 6074 + 6074 6502 6497 + 6497 6502 6498 + 6503 6498 6502 + 6498 6503 6504 + 6504 6499 6498 + 6499 6504 6505 + 6505 6500 6499 + 6506 6502 6074 + 6502 6506 6503 + 6507 6503 6506 + 6504 6503 6507 + 6507 6508 6504 + 6504 6508 6509 + 6509 6505 6504 + 6510 6505 6509 + 6500 6505 6510 + 6074 6511 6506 + 6506 6511 6512 + 6512 6513 6506 + 6506 6513 6507 + 6514 6507 6513 + 6507 6514 6515 + 6515 6508 6507 + 6511 6074 6073 + 6073 6080 6511 + 6512 6511 6080 + 6080 6516 6512 + 6517 6512 6516 + 6512 6517 6518 + 6518 6513 6512 + 6513 6518 6514 + 6519 6514 6518 + 6515 6514 6519 + 6085 6516 6080 + 6520 6516 6085 + 6516 6520 6517 + 6521 6517 6520 + 6518 6517 6521 + 6521 6522 6518 + 6518 6522 6519 + 6085 6523 6520 + 6520 6523 6524 + 6524 6525 6520 + 6520 6525 6521 + 6526 6521 6525 + 6521 6526 6527 + 6527 6522 6521 + 6523 6085 6090 + 6090 6528 6523 + 6524 6523 6528 + 6528 6529 6524 + 6530 6524 6529 + 6524 6530 6531 + 6531 6525 6524 + 6525 6531 6526 + 6532 6526 6531 + 6527 6526 6532 + 6528 6090 6089 + 6089 6533 6528 + 6528 6533 6534 + 6534 6529 6528 + 6535 6529 6534 + 6529 6535 6530 + 6536 6530 6535 + 6531 6530 6536 + 6536 6537 6531 + 6531 6537 6532 + 6533 6089 6095 + 6095 6538 6533 + 6534 6533 6538 + 6538 6539 6534 + 6540 6534 6539 + 6534 6540 6535 + 6535 6540 6541 + 6541 6542 6535 + 6535 6542 6536 + 6538 6095 6094 + 6094 6543 6538 + 6538 6543 6544 + 6544 6539 6538 + 6545 6539 6544 + 6539 6545 6540 + 6541 6540 6545 + 6543 6094 6103 + 6103 6546 6543 + 6544 6543 6546 + 6546 6547 6544 + 6548 6544 6547 + 6544 6548 6545 + 6545 6548 6549 + 6549 6550 6545 + 6545 6550 6541 + 6546 6103 6102 + 6102 6551 6546 + 6546 6551 6552 + 6552 6547 6546 + 6553 6547 6552 + 6547 6553 6548 + 6549 6548 6553 + 6551 6102 6111 + 6111 6554 6551 + 6552 6551 6554 + 6554 6555 6552 + 6556 6552 6555 + 6552 6556 6553 + 6553 6556 6557 + 6557 6558 6553 + 6553 6558 6549 + 6554 6111 6110 + 6110 6559 6554 + 6554 6559 6560 + 6560 6555 6554 + 6561 6555 6560 + 6555 6561 6556 + 6557 6556 6561 + 6559 6110 6562 + 6562 6563 6559 + 6560 6559 6563 + 6563 6564 6560 + 6565 6560 6564 + 6560 6565 6561 + 6114 6562 6110 + 6123 6562 6114 + 6563 6562 6123 + 6123 6566 6563 + 6563 6566 6567 + 6567 6564 6563 + 6568 6564 6567 + 6564 6568 6565 + 6569 6565 6568 + 6561 6565 6569 + 6569 6570 6561 + 6561 6570 6557 + 6566 6123 6571 + 6571 6572 6566 + 6567 6566 6572 + 6572 6573 6567 + 6574 6567 6573 + 6567 6574 6568 + 6122 6571 6123 + 6575 6571 6122 + 6572 6571 6575 + 6575 6576 6572 + 6572 6576 6577 + 6577 6573 6572 + 6578 6573 6577 + 6573 6578 6574 + 6579 6574 6578 + 6568 6574 6579 + 6122 6128 6575 + 6575 6128 6580 + 6580 6581 6575 + 6576 6575 6581 + 6581 6582 6576 + 6577 6576 6582 + 6582 6583 6577 + 6584 6577 6583 + 6577 6584 6578 + 6127 6580 6128 + 6580 6127 6585 + 6585 6586 6580 + 6580 6586 6587 + 6587 6581 6580 + 6582 6581 6587 + 6587 6588 6582 + 6582 6588 6589 + 6589 6583 6582 + 6585 6127 6126 + 6126 6590 6585 + 6585 6590 6591 + 6591 6592 6585 + 6586 6585 6592 + 6592 6593 6586 + 6587 6586 6593 + 6593 6594 6587 + 6588 6587 6594 + 6132 6590 6126 + 6590 6132 6595 + 6595 6591 6590 + 6591 6595 6596 + 6596 6597 6591 + 6591 6597 6598 + 6598 6592 6591 + 6593 6592 6598 + 6599 6595 6132 + 6596 6595 6599 + 6599 6600 6596 + 6596 6600 6601 + 6601 6602 6596 + 6597 6596 6602 + 6602 6603 6597 + 6598 6597 6603 + 6132 6604 6599 + 6138 6599 6604 + 6599 6138 6605 + 6605 6600 6599 + 6600 6605 6606 + 6606 6601 6600 + 6131 6604 6132 + 6130 6604 6131 + 6604 6130 6138 + 6605 6138 6137 + 6137 6607 6605 + 6605 6607 6608 + 6608 6606 6605 + 6609 6606 6608 + 6601 6606 6609 + 6609 6610 6601 + 6601 6610 6611 + 6611 6602 6601 + 6603 6602 6611 + 6607 6137 6612 + 6607 6612 6613 + 6613 6608 6607 + 6608 6613 6614 + 6614 6615 6608 + 6608 6615 6609 + 6616 6609 6615 + 6610 6609 6616 + 6612 6137 6136 + 6136 6148 6612 + 6612 6148 6617 + 6617 6613 6612 + 6614 6613 6617 + 6617 6618 6614 + 6619 6614 6618 + 6615 6614 6619 + 6619 6620 6615 + 6615 6620 6616 + 6148 6153 6617 + 6621 6617 6153 + 6621 6618 6617 + 6618 6621 6622 + 6622 6623 6618 + 6618 6623 6619 + 6624 6619 6623 + 6619 6624 6625 + 6625 6620 6619 + 6153 6158 6621 + 6621 6158 6626 + 6626 6622 6621 + 6627 6622 6626 + 6622 6627 6628 + 6628 6623 6622 + 6623 6628 6624 + 6624 6628 6629 + 6629 6630 6624 + 6625 6624 6630 + 6157 6626 6158 + 6631 6626 6157 + 6626 6631 6627 + 6627 6631 6632 + 6632 6633 6627 + 6628 6627 6633 + 6633 6629 6628 + 6634 6629 6633 + 6629 6634 6635 + 6635 6630 6629 + 6157 6163 6631 + 6631 6163 6636 + 6636 6632 6631 + 6637 6632 6636 + 6632 6637 6638 + 6638 6633 6632 + 6633 6638 6634 + 6634 6638 6639 + 6639 6640 6634 + 6635 6634 6640 + 6641 6636 6163 + 6642 6636 6641 + 6636 6642 6637 + 6637 6642 6643 + 6643 6644 6637 + 6638 6637 6644 + 6644 6639 6638 + 6163 6162 6641 + 6645 6641 6162 + 6646 6641 6645 + 6641 6646 6642 + 6642 6646 6647 + 6647 6643 6642 + 6648 6643 6647 + 6643 6648 6649 + 6649 6644 6643 + 6162 6167 6645 + 6650 6645 6167 + 6651 6645 6650 + 6645 6651 6646 + 6646 6651 6652 + 6652 6647 6646 + 6653 6647 6652 + 6647 6653 6648 + 6167 6166 6650 + 6654 6650 6166 + 6655 6650 6654 + 6650 6655 6651 + 6651 6655 6656 + 6656 6652 6651 + 6657 6652 6656 + 6652 6657 6653 + 6166 6171 6654 + 6658 6654 6171 + 6659 6654 6658 + 6654 6659 6655 + 6655 6659 6660 + 6660 6656 6655 + 6661 6656 6660 + 6656 6661 6657 + 6171 6175 6658 + 6662 6658 6175 + 6663 6658 6662 + 6658 6663 6659 + 6659 6663 6664 + 6664 6660 6659 + 6665 6660 6664 + 6660 6665 6661 + 6175 6666 6662 + 6667 6662 6666 + 6668 6662 6667 + 6662 6668 6663 + 6663 6668 6669 + 6669 6664 6663 + 6670 6664 6669 + 6664 6670 6665 + 6174 6666 6175 + 6666 6174 6180 + 6180 6671 6666 + 6666 6671 6667 + 6672 6667 6671 + 6673 6667 6672 + 6667 6673 6668 + 6668 6673 6674 + 6674 6669 6668 + 6675 6669 6674 + 6669 6675 6670 + 6671 6180 6185 + 6185 6676 6671 + 6671 6676 6672 + 6677 6672 6676 + 6678 6672 6677 + 6672 6678 6673 + 6673 6678 6679 + 6679 6674 6673 + 6680 6674 6679 + 6674 6680 6675 + 6676 6185 6681 + 6681 6682 6676 + 6676 6682 6677 + 6683 6677 6682 + 6684 6677 6683 + 6677 6684 6678 + 6678 6684 6685 + 6685 6679 6678 + 6681 6185 6184 + 6686 6681 6184 + 6687 6681 6686 + 6682 6681 6687 + 6687 6688 6682 + 6682 6688 6683 + 6689 6683 6688 + 6690 6683 6689 + 6683 6690 6684 + 6184 6200 6686 + 6199 6686 6200 + 6691 6686 6199 + 6686 6691 6687 + 6692 6687 6691 + 6688 6687 6692 + 6692 6693 6688 + 6688 6693 6689 + 6694 6689 6693 + 6695 6689 6694 + 6689 6695 6690 + 6199 6205 6691 + 6691 6205 6696 + 6696 6697 6691 + 6691 6697 6698 + 6698 6692 6691 + 6699 6692 6698 + 6693 6692 6699 + 6693 6699 6694 + 6209 6696 6205 + 6700 6696 6209 + 6696 6700 6701 + 6701 6697 6696 + 6697 6701 6702 + 6702 6698 6697 + 6703 6698 6702 + 6698 6703 6699 + 6694 6699 6703 + 6209 6214 6700 + 6700 6214 6212 + 6704 6700 6212 + 6701 6700 6704 + 6704 6705 6701 + 6701 6705 6706 + 6706 6707 6701 + 6707 6702 6701 + 6213 6212 6214 + 6429 6453 6430 + 6708 6430 6453 + 6709 6430 6708 + 6430 6709 6425 + 6425 6709 6710 + 6710 6420 6425 + 6453 6458 6708 + 6458 6711 6708 + 6711 6712 6708 + 6713 6708 6712 + 6714 6708 6713 + 6708 6714 6709 + 6710 6709 6714 + 6460 6711 6458 + 6715 6711 6460 + 6711 6715 6716 + 6716 6712 6711 + 6717 6712 6716 + 6712 6717 6713 + 6715 6460 6718 + 6718 6719 6715 + 6715 6719 6720 + 6720 6716 6715 + 6717 6716 6720 + 6720 6721 6717 + 6717 6721 6722 + 6713 6717 6722 + 6723 6718 6460 + 6724 6718 6723 + 6719 6718 6724 + 6719 6724 6725 + 6725 6720 6719 + 6721 6720 6725 + 6721 6725 6726 + 6726 6722 6721 + 4102 6723 6460 + 6727 6723 4102 + 6728 6723 6727 + 6723 6728 6724 + 6724 6728 6726 + 6726 6725 6724 + 4102 4101 6727 + 6729 6727 4101 + 6728 6727 6729 + 6729 6730 6728 + 6728 6730 6726 + 6730 6731 6726 + 6732 6726 6731 + 6732 6722 6726 + 4101 6733 6729 + 6375 6393 6371 + 6393 6734 6371 + 6734 6735 6371 + 6735 6736 6371 + 6736 6737 6371 + 6737 6738 6371 + 6738 6739 6371 + 6740 6371 6739 + 6371 6740 6741 + 6741 6362 6371 + 6742 6734 6393 + 6743 6734 6742 + 6734 6743 6744 + 6744 6735 6734 + 6393 6392 6742 + 6405 6742 6392 + 6745 6742 6405 + 6742 6745 6743 + 6743 6745 6746 + 6746 6747 6743 + 6743 6747 6748 + 6748 6744 6743 + 6749 6744 6748 + 6744 6749 6750 + 6405 6751 6745 + 6745 6751 6746 + 6752 6746 6751 + 6746 6752 6753 + 6753 6747 6746 + 6747 6753 6754 + 6754 6748 6747 + 6404 6751 6405 + 6751 6404 6752 + 6752 6404 6410 + 6410 6755 6752 + 6753 6752 6755 + 6755 6756 6753 + 6754 6753 6756 + 6756 6757 6754 + 6758 6754 6757 + 6748 6754 6758 + 6758 6759 6748 + 6748 6759 6749 + 6760 6755 6410 + 6755 6760 6761 + 6761 6756 6755 + 6756 6761 6762 + 6762 6757 6756 + 6757 6762 6763 + 6763 6764 6757 + 6757 6764 6758 + 6410 6409 6760 + 6760 6409 6415 + 6415 6765 6760 + 6761 6760 6765 + 6765 6766 6761 + 6762 6761 6766 + 6766 6767 6762 + 6763 6762 6767 + 6767 6768 6763 + 6769 6763 6768 + 6764 6763 6769 + 6420 6765 6415 + 6765 6420 6710 + 6710 6766 6765 + 6766 6710 6770 + 6770 6767 6766 + 6767 6770 6771 + 6771 6768 6767 + 6768 6771 6772 + 6772 6773 6768 + 6768 6773 6769 + 6714 6770 6710 + 6771 6770 6714 + 6714 6713 6771 + 6772 6771 6713 + 6722 6772 6713 + 6774 6772 6722 + 6773 6772 6774 + 6774 6775 6773 + 6773 6775 6776 + 6776 6769 6773 + 6777 6769 6776 + 6769 6777 6764 + 6764 6777 6778 + 6778 6758 6764 + 6722 6732 6774 + 6774 6732 6779 + 6779 6780 6774 + 6775 6774 6780 + 6780 6781 6775 + 6775 6781 6782 + 6782 6776 6775 + 6783 6776 6782 + 6776 6783 6777 + 6732 6784 6779 + 4976 6779 6784 + 4981 6779 4976 + 6779 4981 6785 + 6785 6780 6779 + 6781 6780 6785 + 6731 6784 6732 + 6784 6731 6786 + 6784 6786 4976 + 4976 6786 6787 + 6787 4971 4976 + 4966 4971 6787 + 6787 6788 4966 + 4966 6788 6789 + 6786 6731 6730 + 6730 6787 6786 + 6788 6787 6730 + 6730 6729 6788 + 6788 6729 6790 + 6790 6789 6788 + 4986 6785 4981 + 6791 6785 4986 + 6785 6791 6781 + 6781 6791 6792 + 6792 6782 6781 + 6793 6782 6792 + 6782 6793 6783 + 6783 6793 6794 + 6794 6795 6783 + 6777 6783 6795 + 4986 4991 6791 + 6791 4991 6796 + 6796 6792 6791 + 6797 6792 6796 + 6792 6797 6793 + 6793 6797 6798 + 6798 6794 6793 + 6799 6794 6798 + 6794 6799 6800 + 6800 6795 6794 + 4996 6796 4991 + 6801 6796 4996 + 6796 6801 6797 + 6797 6801 6802 + 6802 6798 6797 + 6736 6798 6802 + 6798 6736 6799 + 6799 6736 6735 + 6735 6750 6799 + 6750 6800 6799 + 4996 6803 6801 + 6801 6803 6804 + 6804 6802 6801 + 6737 6802 6804 + 6802 6737 6736 + 6803 4996 4995 + 4995 6805 6803 + 6803 6805 6806 + 6804 6803 6806 + 6806 6807 6804 + 6808 6804 6807 + 6804 6808 6737 + 6737 6808 6809 + 6809 6738 6737 + 6805 4995 4994 + 6805 4994 4993 + 4993 6806 6805 + 5003 6806 4993 + 6806 5003 6810 + 6810 6807 6806 + 6811 6807 6810 + 6807 6811 6808 + 6808 6811 6812 + 6812 6809 6808 + 6813 6809 6812 + 6809 6813 6814 + 6814 6738 6809 + 5007 6810 5003 + 6815 6810 5007 + 6810 6815 6811 + 6811 6815 6816 + 6816 6812 6811 + 6817 6812 6816 + 6812 6817 6813 + 6813 6817 6818 + 6819 6813 6818 + 6814 6813 6819 + 5007 5011 6815 + 6815 5011 6820 + 6820 6816 6815 + 6821 6816 6820 + 6816 6821 6817 + 6817 6821 6822 + 6822 6818 6817 + 5016 6820 5011 + 6823 6820 5016 + 6820 6823 6821 + 6822 6821 6823 + 6823 6824 6822 + 6825 6822 6824 + 6825 6818 6822 + 6818 6825 6826 + 6826 6827 6818 + 6818 6827 6819 + 5016 5021 6823 + 6823 5021 5026 + 5026 6824 6823 + 6828 6824 5026 + 6824 6828 6825 + 6825 6828 6829 + 6829 6830 6825 + 6830 6826 6825 + 6831 6826 6830 + 6826 6831 6827 + 6827 6831 6832 + 6832 6819 6827 + 5026 6833 6828 + 6828 6833 6834 + 6834 6829 6828 + 6835 6829 6834 + 6829 6835 6836 + 6836 6830 6829 + 6833 5026 5025 + 5025 5031 6833 + 6834 6833 5031 + 5031 6837 6834 + 6838 6834 6837 + 6834 6838 6835 + 6835 6838 6839 + 6839 6840 6835 + 6835 6840 6841 + 6841 6836 6835 + 5035 6837 5031 + 6842 6837 5035 + 6837 6842 6838 + 6839 6838 6842 + 6842 6843 6839 + 6844 6839 6843 + 6839 6844 6845 + 6845 6840 6839 + 6840 6845 6846 + 6846 6841 6840 + 5035 6847 6842 + 6842 6847 6848 + 6848 6843 6842 + 6849 6843 6848 + 6843 6849 6844 + 6850 6844 6849 + 6845 6844 6850 + 6847 5035 5038 + 5038 5043 6847 + 6848 6847 5043 + 5043 6851 6848 + 6852 6848 6851 + 6848 6852 6849 + 6849 6852 6853 + 6853 6854 6849 + 6849 6854 6850 + 5047 6851 5043 + 6855 6851 5047 + 6851 6855 6852 + 6853 6852 6855 + 6855 6856 6853 + 6857 6853 6856 + 6853 6857 6858 + 6858 6854 6853 + 6854 6858 6859 + 6859 6850 6854 + 5047 5055 6855 + 6855 5055 6860 + 6860 6856 6855 + 6861 6856 6860 + 6856 6861 6857 + 6857 6861 6862 + 6862 6863 6857 + 6858 6857 6863 + 6860 5055 5054 + 5054 3408 6860 + 3407 6860 3408 + 6860 3407 6861 + 6861 3407 3406 + 3406 6862 6861 + 3406 6864 6862 + 3409 3408 5054 + 6750 6735 6865 + 6795 6778 6777 + 6866 6778 6795 + 6778 6866 6759 + 6759 6758 6778 + 6795 6800 6866 + 6866 6800 6750 + 6750 6749 6866 + 6749 6759 6866 + 4869 4868 5353 + 5353 4868 4867 + 4867 6867 5353 + 6867 6868 5353 + 5349 5353 6868 + 6868 5343 5349 + 5343 6868 6869 + 6869 5344 5343 + 6870 6867 4867 + 6871 6867 6870 + 6867 6871 6869 + 6869 6868 6867 + 4867 4873 6870 + 6870 4873 4878 + 4878 6872 6870 + 6871 6870 6872 + 6872 6873 6871 + 6869 6871 6873 + 6873 6874 6869 + 6874 6875 6869 + 6875 6876 6869 + 5344 6869 6876 + 4955 6872 4878 + 6872 4955 6877 + 6877 6873 6872 + 6873 6877 6878 + 6878 6874 6873 + 6879 6874 6878 + 6874 6879 6880 + 6880 6875 6874 + 6877 4955 6881 + 6881 6882 6877 + 6878 6877 6882 + 6882 6883 6878 + 6884 6878 6883 + 6878 6884 6879 + 4341 6881 4955 + 4345 6881 4341 + 4345 6882 6881 + 6882 4345 4350 + 4350 6883 6882 + 6883 4350 6885 + 6885 6886 6883 + 6883 6886 6884 + 6887 6884 6886 + 6879 6884 6887 + 6887 6888 6879 + 6879 6888 6889 + 6889 6880 6879 + 6885 4350 4349 + 4349 6890 6885 + 6891 6885 6890 + 6886 6885 6891 + 6891 6892 6886 + 6886 6892 6887 + 6893 6887 6892 + 6887 6893 6894 + 6894 6888 6887 + 6890 4349 4348 + 4348 6895 6890 + 6890 6895 6896 + 6896 6897 6890 + 6890 6897 6891 + 6898 6891 6897 + 6891 6898 6899 + 6899 6892 6891 + 6892 6899 6893 + 6895 4348 6900 + 6900 6901 6895 + 6896 6895 6901 + 6901 6902 6896 + 6903 6896 6902 + 6896 6903 6904 + 6904 6897 6896 + 6897 6904 6898 + 4353 6900 4348 + 6491 6900 4353 + 6900 6491 6490 + 6490 6901 6900 + 6901 6490 6496 + 6496 6902 6901 + 6905 6902 6496 + 6902 6905 6903 + 6906 6903 6905 + 6904 6903 6906 + 6906 6907 6904 + 6904 6907 6908 + 6908 6898 6904 + 6899 6898 6908 + 6496 6501 6905 + 6905 6501 6500 + 6500 6909 6905 + 6905 6909 6906 + 6910 6906 6909 + 6906 6910 6911 + 6911 6907 6906 + 6907 6911 6912 + 6912 6908 6907 + 6510 6909 6500 + 6909 6510 6910 + 6913 6910 6510 + 6911 6910 6913 + 6913 6914 6911 + 6911 6914 6915 + 6915 6912 6911 + 6916 6912 6915 + 6908 6912 6916 + 6916 6917 6908 + 6908 6917 6899 + 6510 6918 6913 + 6919 6913 6918 + 6913 6919 6920 + 6920 6914 6913 + 6914 6920 6921 + 6921 6915 6914 + 6509 6918 6510 + 6922 6918 6509 + 6918 6922 6919 + 6923 6919 6922 + 6920 6919 6923 + 6923 6924 6920 + 6920 6924 6925 + 6925 6921 6920 + 6926 6921 6925 + 6915 6921 6926 + 6509 6927 6922 + 6922 6927 6928 + 6928 6929 6922 + 6922 6929 6923 + 6930 6923 6929 + 6923 6930 6931 + 6931 6924 6923 + 6927 6509 6508 + 6508 6515 6927 + 6928 6927 6515 + 6515 6932 6928 + 6933 6928 6932 + 6928 6933 6934 + 6934 6929 6928 + 6929 6934 6930 + 6935 6930 6934 + 6931 6930 6935 + 6519 6932 6515 + 6936 6932 6519 + 6932 6936 6933 + 6937 6933 6936 + 6934 6933 6937 + 6937 6938 6934 + 6934 6938 6935 + 6519 6939 6936 + 6936 6939 6940 + 6940 6941 6936 + 6936 6941 6937 + 6942 6937 6941 + 6937 6942 6943 + 6943 6938 6937 + 6939 6519 6522 + 6522 6527 6939 + 6940 6939 6527 + 6527 6944 6940 + 6945 6940 6944 + 6940 6945 6946 + 6946 6941 6940 + 6941 6946 6942 + 6947 6942 6946 + 6943 6942 6947 + 6532 6944 6527 + 6948 6944 6532 + 6944 6948 6945 + 6949 6945 6948 + 6946 6945 6949 + 6949 6950 6946 + 6946 6950 6947 + 6951 6947 6950 + 6952 6947 6951 + 6947 6952 6943 + 6532 6953 6948 + 6948 6953 6954 + 6954 6955 6948 + 6948 6955 6949 + 6956 6949 6955 + 6950 6949 6956 + 6956 6957 6950 + 6950 6957 6951 + 6953 6532 6537 + 6537 6958 6953 + 6954 6953 6958 + 6958 6959 6954 + 6960 6954 6959 + 6955 6954 6960 + 6960 6961 6955 + 6955 6961 6956 + 6962 6956 6961 + 6957 6956 6962 + 6958 6537 6536 + 6536 6963 6958 + 6958 6963 6964 + 6964 6959 6958 + 6959 6964 6965 + 6965 6966 6959 + 6959 6966 6960 + 6967 6960 6966 + 6961 6960 6967 + 6963 6536 6542 + 6542 6968 6963 + 6964 6963 6968 + 6968 6969 6964 + 6965 6964 6969 + 6969 6970 6965 + 6971 6965 6970 + 6966 6965 6971 + 6971 6972 6966 + 6966 6972 6967 + 6968 6542 6541 + 6541 6973 6968 + 6968 6973 6974 + 6974 6969 6968 + 6969 6974 6975 + 6975 6970 6969 + 6970 6975 6976 + 6976 6977 6970 + 6970 6977 6971 + 6973 6541 6550 + 6550 6978 6973 + 6974 6973 6978 + 6978 6979 6974 + 6975 6974 6979 + 6979 6980 6975 + 6976 6975 6980 + 6978 6550 6549 + 6549 6981 6978 + 6978 6981 6982 + 6982 6979 6978 + 6982 6980 6979 + 6980 6982 6983 + 6983 6984 6980 + 6980 6984 6976 + 6981 6549 6558 + 6558 6985 6981 + 6982 6981 6985 + 6985 6983 6982 + 6986 6983 6985 + 6983 6986 6987 + 6987 6984 6983 + 6984 6987 6988 + 6988 6989 6984 + 6984 6989 6976 + 6985 6558 6557 + 6557 6990 6985 + 6985 6990 6986 + 6986 6990 6991 + 6991 6992 6986 + 6987 6986 6992 + 6992 6993 6987 + 6988 6987 6993 + 6990 6557 6570 + 6570 6991 6990 + 6991 6570 6569 + 6569 6994 6991 + 6991 6994 6995 + 6995 6992 6991 + 6995 6993 6992 + 6993 6995 6996 + 6996 6997 6993 + 6993 6997 6988 + 6994 6569 6998 + 6998 6999 6994 + 6995 6994 6999 + 6999 6996 6995 + 7000 6996 6999 + 6996 7000 7001 + 7001 6997 6996 + 6568 6998 6569 + 6579 6998 6568 + 6999 6998 6579 + 6579 7002 6999 + 6999 7002 7000 + 7000 7002 7003 + 7003 7004 7000 + 7001 7000 7004 + 7004 7005 7001 + 7006 7001 7005 + 6997 7001 7006 + 7002 6579 7007 + 7007 7003 7002 + 7003 7007 7008 + 7008 7009 7003 + 7003 7009 7010 + 7010 7004 7003 + 7010 7005 7004 + 6578 7007 6579 + 7008 7007 6578 + 6578 6584 7008 + 7008 6584 7011 + 7011 7012 7008 + 7009 7008 7012 + 7012 7013 7009 + 7010 7009 7013 + 7013 7014 7010 + 7005 7010 7014 + 7014 7015 7005 + 7005 7015 7006 + 6583 7011 6584 + 7011 6583 6589 + 6589 7016 7011 + 7011 7016 7017 + 7017 7012 7011 + 7013 7012 7017 + 7017 7018 7013 + 7013 7018 7019 + 7019 7014 7013 + 7014 7019 7020 + 7020 7015 7014 + 7016 6589 7021 + 7021 7022 7016 + 7017 7016 7022 + 7022 7023 7017 + 7018 7017 7023 + 7023 7024 7018 + 7019 7018 7024 + 7024 7025 7019 + 7020 7019 7025 + 7026 7021 6589 + 7027 7021 7026 + 7022 7021 7027 + 7027 7028 7022 + 7022 7028 7029 + 7029 7023 7022 + 7024 7023 7029 + 6589 6588 7026 + 6594 7026 6588 + 7026 6594 7030 + 7030 7031 7026 + 7026 7031 7027 + 7027 7031 7032 + 7032 7033 7027 + 7028 7027 7033 + 7033 7034 7028 + 7029 7028 7034 + 7030 6594 6593 + 6593 7035 7030 + 7030 7035 7036 + 7036 7037 7030 + 7031 7030 7037 + 7037 7032 7031 + 6598 7035 6593 + 7035 6598 7038 + 7038 7036 7035 + 7036 7038 7039 + 7039 7040 7036 + 7036 7040 7041 + 7041 7037 7036 + 7032 7037 7041 + 6603 7038 6598 + 7039 7038 6603 + 6603 7042 7039 + 7039 7042 7043 + 7043 7044 7039 + 7040 7039 7044 + 7044 7045 7040 + 7041 7040 7045 + 6611 7042 6603 + 7042 6611 7046 + 7046 7043 7042 + 7043 7046 7047 + 7047 7048 7043 + 7043 7048 7049 + 7049 7044 7043 + 7045 7044 7049 + 7050 7046 6611 + 7047 7046 7050 + 7050 7051 7047 + 7047 7051 7052 + 7052 7053 7047 + 7048 7047 7053 + 7053 7054 7048 + 7049 7048 7054 + 6611 6610 7050 + 6616 7050 6610 + 7051 7050 6616 + 6616 7055 7051 + 7051 7055 7056 + 7056 7052 7051 + 7057 7052 7056 + 7052 7057 7058 + 7058 7053 7052 + 7054 7053 7058 + 7055 6616 6620 + 6620 6625 7055 + 7055 6625 7059 + 7059 7056 7055 + 7060 7056 7059 + 7056 7060 7057 + 7057 7060 7061 + 7061 7062 7057 + 7058 7057 7062 + 6630 7059 6625 + 7063 7059 6630 + 7059 7063 7060 + 7060 7063 7064 + 7064 7061 7060 + 7065 7061 7064 + 7061 7065 7066 + 7066 7062 7061 + 6630 6635 7063 + 7063 6635 7067 + 7067 7064 7063 + 7068 7064 7067 + 7064 7068 7065 + 7065 7068 7069 + 7069 7070 7065 + 7066 7065 7070 + 6640 7067 6635 + 7071 7067 6640 + 7067 7071 7068 + 7068 7071 7072 + 7072 7069 7068 + 7073 7069 7072 + 7069 7073 7074 + 7074 7070 7069 + 6640 7075 7071 + 7071 7075 7076 + 7076 7072 7071 + 7077 7072 7076 + 7072 7077 7073 + 7073 7077 7078 + 7078 7079 7073 + 7074 7073 7079 + 7075 6640 6639 + 6639 7080 7075 + 7075 7080 7081 + 7081 7076 7075 + 7082 7076 7081 + 7076 7082 7077 + 7077 7082 7083 + 7083 7078 7077 + 7080 6639 6644 + 6644 6649 7080 + 7080 6649 7084 + 7084 7081 7080 + 7085 7081 7084 + 7081 7085 7082 + 7082 7085 7086 + 7086 7083 7082 + 7087 7083 7086 + 7083 7087 7088 + 7088 7078 7083 + 7089 7084 6649 + 7090 7084 7089 + 7084 7090 7085 + 7085 7090 7091 + 7091 7086 7085 + 7092 7086 7091 + 7086 7092 7087 + 6649 6648 7089 + 7093 7089 6648 + 7094 7089 7093 + 7089 7094 7090 + 7090 7094 7095 + 7095 7091 7090 + 7096 7091 7095 + 7091 7096 7092 + 6648 6653 7093 + 7097 7093 6653 + 7098 7093 7097 + 7093 7098 7094 + 7094 7098 7099 + 7099 7095 7094 + 7100 7095 7099 + 7095 7100 7096 + 6653 6657 7097 + 7101 7097 6657 + 7102 7097 7101 + 7097 7102 7098 + 7098 7102 7103 + 7103 7099 7098 + 7104 7099 7103 + 7099 7104 7100 + 6657 6661 7101 + 7105 7101 6661 + 7106 7101 7105 + 7101 7106 7102 + 7102 7106 7107 + 7107 7103 7102 + 7108 7103 7107 + 7103 7108 7104 + 6661 6665 7105 + 7109 7105 6665 + 7110 7105 7109 + 7105 7110 7106 + 7106 7110 7111 + 7111 7107 7106 + 7112 7107 7111 + 7107 7112 7108 + 6665 6670 7109 + 7113 7109 6670 + 7114 7109 7113 + 7109 7114 7110 + 7110 7114 7115 + 7115 7111 7110 + 7116 7111 7115 + 7111 7116 7112 + 6670 6675 7113 + 7117 7113 6675 + 7118 7113 7117 + 7113 7118 7114 + 7114 7118 7119 + 7119 7115 7114 + 7120 7115 7119 + 7115 7120 7116 + 6675 6680 7117 + 7121 7117 6680 + 7122 7117 7121 + 7117 7122 7118 + 7118 7122 7123 + 7123 7119 7118 + 7124 7119 7123 + 7119 7124 7120 + 6680 7125 7121 + 7126 7121 7125 + 7127 7121 7126 + 7121 7127 7122 + 7122 7127 7128 + 7128 7123 7122 + 7129 7123 7128 + 7123 7129 7124 + 6679 7125 6680 + 7125 6679 6685 + 6685 7130 7125 + 7125 7130 7126 + 7131 7126 7130 + 7132 7126 7131 + 7126 7132 7127 + 7127 7132 7133 + 7133 7128 7127 + 7134 7128 7133 + 7128 7134 7129 + 7130 6685 7135 + 7135 7136 7130 + 7130 7136 7131 + 7137 7131 7136 + 7138 7131 7137 + 7131 7138 7132 + 7132 7138 7139 + 7139 7133 7132 + 7135 6685 6684 + 6684 6690 7135 + 7140 7135 6690 + 7136 7135 7140 + 7140 7141 7136 + 7136 7141 7137 + 7142 7137 7141 + 6287 7137 7142 + 7137 6287 7138 + 7138 6287 6286 + 6286 7139 7138 + 6690 6695 7140 + 7143 7140 6695 + 7141 7140 7143 + 7143 7144 7141 + 7141 7144 7142 + 7145 7142 7144 + 6282 7142 7145 + 7142 6282 6287 + 6695 7146 7143 + 7147 7143 7146 + 7144 7143 7147 + 7147 7148 7144 + 7144 7148 7145 + 6268 7145 7148 + 6272 7145 6268 + 7145 6272 6282 + 6694 7146 6695 + 7146 6694 7149 + 7149 7150 7146 + 7146 7150 7147 + 7151 7147 7150 + 7148 7147 7151 + 7151 6264 7148 + 7148 6264 6268 + 6703 7149 6694 + 7152 7149 6703 + 7150 7149 7152 + 7152 7153 7150 + 7150 7153 7151 + 6260 7151 7153 + 6264 7151 6260 + 6703 7154 7152 + 7152 7154 7155 + 7155 7156 7152 + 7153 7152 7156 + 7156 6255 7153 + 7153 6255 6260 + 6702 7154 6703 + 7154 6702 6707 + 6707 7155 7154 + 7155 6707 7157 + 7155 7157 6250 + 6250 7156 7155 + 6255 7156 6250 + 7157 6707 6706 + 6706 6245 7157 + 6250 7157 6245 + 6245 6706 6240 + 6240 6706 6705 + 6705 7158 6240 + 6240 7158 6228 + 7159 6228 7158 + 6228 7159 6219 + 6219 7159 6212 + 6212 7159 6704 + 7158 6705 6704 + 7158 6704 7159 + 6292 7139 6286 + 7139 6292 7160 + 7160 7133 7139 + 7133 7160 7134 + 7134 7160 7161 + 7161 7162 7134 + 7129 7134 7162 + 7160 6292 6291 + 6291 7161 7160 + 7161 6291 6290 + 6290 7163 7161 + 7161 7163 7164 + 7164 7162 7161 + 7165 7162 7164 + 7162 7165 7129 + 7124 7129 7165 + 7165 7166 7124 + 7120 7124 7166 + 7163 6290 6296 + 6296 7167 7163 + 7163 7167 7168 + 7168 7164 7163 + 7169 7164 7168 + 7164 7169 7165 + 7165 7169 7170 + 7170 7166 7165 + 7171 7166 7170 + 7166 7171 7120 + 7116 7120 7171 + 7167 6296 7172 + 7172 7173 7167 + 7167 7173 7174 + 7174 7168 7167 + 7175 7168 7174 + 7168 7175 7169 + 7169 7175 7176 + 7176 7170 7169 + 7172 6296 6295 + 6295 7177 7172 + 7172 7177 7178 + 7178 7179 7172 + 7173 7172 7179 + 7179 7180 7173 + 7174 7173 7180 + 6301 7177 6295 + 7177 6301 7181 + 7181 7178 7177 + 7182 7178 7181 + 7178 7182 7183 + 7183 7179 7178 + 7179 7183 7184 + 7184 7180 7179 + 6305 7181 6301 + 6310 7181 6305 + 7181 6310 7182 + 7182 6310 7185 + 7185 7186 7182 + 7183 7182 7186 + 7186 7187 7183 + 7184 7183 7187 + 7187 7188 7184 + 7189 7184 7188 + 7180 7184 7189 + 6309 7185 6310 + 7190 7185 6309 + 7185 7190 7191 + 7191 7186 7185 + 7186 7191 7192 + 7192 7187 7186 + 7187 7192 7193 + 7193 7188 7187 + 6309 6314 7190 + 7190 6314 7194 + 7194 7195 7190 + 7191 7190 7195 + 7195 7196 7191 + 7192 7191 7196 + 7196 7197 7192 + 7193 7192 7197 + 6318 7194 6314 + 7198 7194 6318 + 7194 7198 7199 + 7199 7195 7194 + 7195 7199 7200 + 7200 7196 7195 + 7196 7200 7201 + 7201 7197 7196 + 6318 6323 7198 + 7198 6323 7202 + 7202 7203 7198 + 7199 7198 7203 + 7203 7204 7199 + 7200 7199 7204 + 7204 7205 7200 + 7201 7200 7205 + 7206 7202 6323 + 7207 7202 7206 + 7202 7207 7208 + 7208 7203 7202 + 7203 7208 7209 + 7209 7204 7203 + 7204 7209 7210 + 7210 7205 7204 + 6323 6322 7206 + 6328 7206 6322 + 7211 7206 6328 + 7206 7211 7207 + 7212 7207 7211 + 7208 7207 7212 + 7212 7213 7208 + 7208 7213 7214 + 7214 7209 7208 + 7210 7209 7214 + 6328 6333 7211 + 7211 6333 7215 + 7215 7216 7211 + 7211 7216 7212 + 7217 7212 7216 + 7213 7212 7217 + 7217 7218 7213 + 7213 7218 7219 + 7219 7214 7213 + 7215 6333 6337 + 6337 7220 7215 + 7221 7215 7220 + 7216 7215 7221 + 7221 7222 7216 + 7216 7222 7217 + 7223 7217 7222 + 7218 7217 7223 + 7223 7224 7218 + 7219 7218 7224 + 7225 7220 6337 + 7220 7225 7226 + 7220 7226 7221 + 7221 7226 7227 + 7227 7228 7221 + 7222 7221 7228 + 7228 7229 7222 + 7222 7229 7223 + 6337 6346 7225 + 7230 7225 6346 + 7226 7225 7230 + 7230 7227 7226 + 7227 7230 7231 + 7227 7231 7232 + 7232 7228 7227 + 7229 7228 7232 + 7232 7233 7229 + 7229 7233 7234 + 7234 7223 7229 + 7224 7223 7234 + 7235 7230 6346 + 7231 7230 7235 + 7235 7236 7231 + 7232 7231 7236 + 7237 7232 7236 + 7233 7232 7237 + 7237 7238 7233 + 7234 7233 7238 + 6345 7235 6346 + 7235 6345 7239 + 7239 7236 7235 + 7236 7239 7240 + 7240 7241 7236 + 7236 7241 7237 + 7242 7237 7241 + 7237 7242 7243 + 7243 7238 7237 + 7239 6345 7244 + 7244 7245 7239 + 7239 7245 7246 + 7246 7240 7239 + 7247 7240 7246 + 7240 7247 7248 + 7248 7241 7240 + 7241 7248 7242 + 7249 7244 6345 + 7250 7244 7249 + 7245 7244 7250 + 7250 7251 7245 + 7245 7251 7252 + 7252 7246 7245 + 7253 7246 7252 + 7246 7253 7247 + 6350 7249 6345 + 6359 7249 6350 + 7249 6359 7254 + 7249 7254 7250 + 7250 7254 7255 + 7255 7256 7250 + 7251 7250 7256 + 7256 7257 7251 + 7252 7251 7257 + 7254 6359 6358 + 6358 7255 7254 + 7255 6358 6357 + 6357 7258 7255 + 7255 7258 7259 + 7259 7256 7255 + 7257 7256 7259 + 7259 7260 7257 + 7257 7260 7261 + 7261 7262 7257 + 7257 7262 7252 + 7258 6357 7263 + 7263 7264 7258 + 7259 7258 7264 + 7264 7265 7259 + 7260 7259 7265 + 7265 7266 7260 + 7261 7260 7266 + 6362 7263 6357 + 7267 7263 6362 + 7264 7263 7267 + 7267 7268 7264 + 7264 7268 7269 + 7269 7265 7264 + 7266 7265 7269 + 6362 6741 7267 + 7267 6741 7270 + 7270 7271 7267 + 7268 7267 7271 + 7271 7272 7268 + 7269 7268 7272 + 7272 7273 7269 + 7274 7269 7273 + 7269 7274 7266 + 7275 7270 6741 + 7270 7275 7276 + 7276 7277 7270 + 7270 7277 7278 + 7278 7271 7270 + 7272 7271 7278 + 6741 6740 7275 + 7275 6740 7279 + 6740 7280 7279 + 6739 7280 6740 + 7281 7280 6739 + 7280 7281 7282 + 7282 7283 7280 + 7280 7283 7284 + 6739 7285 7281 + 7281 7285 7286 + 7286 7287 7281 + 7281 7287 7288 + 7288 7282 7281 + 7289 7282 7288 + 7283 7282 7289 + 7285 6739 6738 + 6738 6814 7285 + 7286 7285 6814 + 6814 7290 7286 + 7291 7286 7290 + 7286 7291 7292 + 7292 7287 7286 + 7287 7292 7293 + 7293 7288 7287 + 6819 7290 6814 + 7294 7290 6819 + 7290 7294 7291 + 7295 7291 7294 + 7292 7291 7295 + 7295 7296 7292 + 7292 7296 7297 + 7297 7293 7292 + 7298 7293 7297 + 7288 7293 7298 + 6819 6832 7294 + 7294 6832 7299 + 7299 7300 7294 + 7294 7300 7295 + 7301 7295 7300 + 7295 7301 7302 + 7302 7296 7295 + 7296 7302 7303 + 7303 7297 7296 + 7299 6832 6831 + 6831 7304 7299 + 7305 7299 7304 + 7299 7305 7306 + 7306 7300 7299 + 7300 7306 7301 + 7307 7301 7306 + 7302 7301 7307 + 7307 7308 7302 + 7303 7302 7308 + 6830 7304 6831 + 7309 7304 6830 + 7304 7309 7305 + 7310 7305 7309 + 7306 7305 7310 + 7310 7311 7306 + 7306 7311 7307 + 7312 7307 7311 + 7312 7308 7307 + 6830 6836 7309 + 7309 6836 6841 + 6841 7313 7309 + 7309 7313 7310 + 7314 7310 7313 + 7310 7314 7315 + 7315 7311 7310 + 7311 7315 7312 + 7316 7313 6841 + 7313 7316 7314 + 7317 7314 7316 + 7315 7314 7317 + 7317 7318 7315 + 7312 7315 7318 + 6841 6846 7316 + 7316 6846 7319 + 7319 7320 7316 + 7316 7320 7317 + 7321 7317 7320 + 7321 7318 7317 + 7318 7321 7322 + 7322 7323 7318 + 7318 7323 7312 + 7319 6846 6845 + 6845 7324 7319 + 7325 7319 7324 + 7319 7325 7326 + 7326 7320 7319 + 7320 7326 7321 + 7321 7326 7327 + 7327 7328 7321 + 7328 7322 7321 + 6850 7324 6845 + 7329 7324 6850 + 7324 7329 7325 + 7330 7325 7329 + 7326 7325 7330 + 7330 7327 7326 + 7331 7327 7330 + 7327 7331 247 + 247 7328 7327 + 7328 247 7332 + 6850 6859 7329 + 7329 6859 7333 + 7333 7334 7329 + 7329 7334 7330 + 7335 7330 7334 + 7330 7335 7331 + 7333 6859 6858 + 6858 7336 7333 + 7337 7333 7336 + 7333 7337 7338 + 7338 7334 7333 + 7334 7338 7335 + 7335 7338 7339 + 7339 7340 7335 + 7331 7335 7340 + 6863 7336 6858 + 7341 7336 6863 + 7336 7341 7337 + 7342 7337 7341 + 7338 7337 7342 + 7342 7339 7338 + 7342 7343 7339 + 7339 7343 7344 + 7344 7340 7339 + 6863 7345 7341 + 7341 7345 3394 + 3394 7346 7341 + 7341 7346 7342 + 7346 7347 7342 + 7343 7342 7347 + 7345 6863 6862 + 6862 3410 7345 + 3394 7345 3410 + 7348 247 7331 + 7331 7349 7348 + 7349 7350 7348 + 7351 7350 7349 + 7340 7349 7331 + 7352 7349 7340 + 7349 7352 7351 + 7353 7351 7352 + 7354 7351 7353 + 7351 7354 7355 + 7355 7354 7356 + 7356 248 7355 + 7340 7344 7352 + 7352 7344 7357 + 7357 7358 7352 + 7352 7358 7359 + 7359 7353 7352 + 7360 7353 7359 + 7360 7361 7353 + 7353 7361 7354 + 7356 7354 7361 + 7357 7344 7343 + 7362 7357 7343 + 7363 7357 7362 + 7358 7357 7363 + 7363 7364 7358 + 7358 7364 7365 + 7365 7359 7358 + 7366 7359 7365 + 7359 7366 7360 + 7343 7367 7362 + 7368 7362 7367 + 7362 7368 7369 + 7369 7370 7362 + 7362 7370 7363 + 7347 7367 7343 + 7371 7367 7347 + 7367 7371 7368 + 7368 7371 7372 + 7372 7373 7368 + 7373 7374 7368 + 7369 7368 7374 + 7371 7347 7346 + 7346 7372 7371 + 7372 7346 3394 + 3394 3393 7372 + 7372 3393 3392 + 3392 7373 7372 + 7373 3392 3399 + 3399 7375 7373 + 7373 7375 7376 + 7376 7374 7373 + 7377 7374 7376 + 7374 7377 7369 + 7369 7377 7378 + 7378 7379 7369 + 7370 7369 7379 + 7375 3399 7380 + 7380 7381 7375 + 7376 7375 7381 + 7381 7382 7376 + 7377 7376 7382 + 7382 7378 7377 + 7383 7378 7382 + 7378 7383 7384 + 7384 7379 7378 + 7380 3399 7385 + 7385 7386 7380 + 7387 7380 7386 + 7380 7387 7388 + 7388 7381 7380 + 7381 7388 7389 + 7389 7382 7381 + 7382 7389 7383 + 3399 3398 7385 + 3397 7385 3398 + 7390 7385 3397 + 7385 7390 7391 + 7391 7386 7385 + 7391 7392 7386 + 7386 7392 7387 + 7393 7387 7392 + 7388 7387 7393 + 7390 3397 7394 + 7394 7395 7390 + 7390 7395 7396 + 7396 7397 7390 + 7397 7391 7390 + 7392 7391 7397 + 7397 7398 7392 + 7392 7398 7393 + 3396 7394 3397 + 7399 7394 3396 + 7395 7394 7399 + 7399 7400 7395 + 7395 7400 7401 + 7401 7396 7395 + 7402 7396 7401 + 7396 7402 7403 + 7403 7397 7396 + 3396 7404 7399 + 7399 7404 7405 + 7405 7406 7399 + 7400 7399 7406 + 7406 7407 7400 + 7401 7400 7407 + 7408 7404 3396 + 7404 7408 7409 + 7409 7405 7404 + 7410 7405 7409 + 7405 7410 7411 + 7411 7406 7405 + 7407 7406 7411 + 7411 7412 7407 + 7407 7412 7413 + 7413 7414 7407 + 7407 7414 7401 + 7410 7409 7415 + 7415 7416 7410 + 7411 7410 7416 + 7416 7417 7411 + 7412 7411 7417 + 7417 7418 7412 + 7413 7412 7418 + 7418 7419 7413 + 7420 7413 7419 + 7413 7420 7421 + 7421 7414 7413 + 7422 7417 7416 + 7418 7417 7422 + 7422 7423 7418 + 7418 7423 7424 + 7424 7419 7418 + 7425 7419 7424 + 7419 7425 7420 + 7426 7420 7425 + 7421 7420 7426 + 7416 7427 7422 + 7428 7422 7427 + 7423 7422 7428 + 7428 7429 7423 + 7424 7423 7429 + 7429 7430 7424 + 7431 7424 7430 + 7424 7431 7425 + 7427 7416 7432 + 7427 7433 7428 + 7434 7428 7433 + 7428 7434 7435 + 7435 7429 7428 + 7429 7435 7436 + 7436 7430 7429 + 7437 7430 7436 + 7430 7437 7431 + 7438 7431 7437 + 7425 7431 7438 + 7433 7439 7434 + 7440 7434 7439 + 7435 7434 7440 + 7440 7441 7435 + 7435 7441 7442 + 7442 7436 7435 + 7443 7436 7442 + 7436 7443 7437 + 7444 7440 7439 + 7445 7440 7444 + 7440 7445 7441 + 7441 7445 7446 + 7446 7442 7441 + 7447 7442 7446 + 7442 7447 7443 + 7448 7443 7447 + 7437 7443 7448 + 7448 7449 7437 + 7437 7449 7438 + 7444 7450 7445 + 7445 7450 1026 + 7446 7445 1026 + 1034 7446 1026 + 1039 7446 1034 + 7446 1039 7447 + 7451 7450 7444 + 7447 1039 1038 + 1038 7452 7447 + 7447 7452 7448 + 7453 7448 7452 + 7448 7453 7454 + 7454 7449 7448 + 7449 7454 7455 + 7455 7438 7449 + 1044 7452 1038 + 7452 1044 7453 + 7456 7453 1044 + 7454 7453 7456 + 7456 7457 7454 + 7454 7457 7458 + 7458 7455 7454 + 7459 7455 7458 + 7438 7455 7459 + 1044 1043 7456 + 1049 7456 1043 + 7456 1049 7460 + 7460 7457 7456 + 7457 7460 7461 + 7461 7458 7457 + 7458 7461 7462 + 7462 7463 7458 + 7458 7463 7459 + 7460 1049 1048 + 1048 7464 7460 + 7460 7464 7465 + 7465 7461 7460 + 7462 7461 7465 + 7465 7466 7462 + 7462 7466 7467 + 7467 7468 7462 + 7463 7462 7468 + 1056 7464 1048 + 7464 1056 7469 + 7469 7465 7464 + 7465 7469 7470 + 7470 7466 7465 + 7466 7470 7471 + 7471 7467 7466 + 7472 7469 1056 + 7470 7469 7472 + 7472 7473 7470 + 7471 7470 7473 + 7473 7474 7471 + 7475 7471 7474 + 7467 7471 7475 + 1056 1060 7472 + 1069 7472 1060 + 7473 7472 1069 + 1069 7476 7473 + 7473 7476 7477 + 7477 7474 7473 + 7478 7474 7477 + 7474 7478 7475 + 7479 7475 7478 + 7480 7475 7479 + 7475 7480 7467 + 7476 1069 7481 + 7481 7482 7476 + 7476 7482 7483 + 7483 7477 7476 + 7484 7477 7483 + 7477 7484 7478 + 1068 7481 1069 + 1074 7481 1068 + 7481 1074 1079 + 1079 7482 7481 + 7482 1079 7485 + 7485 7483 7482 + 7483 7485 7486 + 7486 7487 7483 + 7483 7487 7484 + 7488 7485 1079 + 7486 7485 7488 + 7488 7489 7486 + 7490 7486 7489 + 7487 7486 7490 + 7490 7491 7487 + 7484 7487 7491 + 7492 7488 1079 + 7493 7488 7492 + 7489 7488 7493 + 7493 7494 7489 + 7489 7494 7495 + 7495 7496 7489 + 7489 7496 7490 + 1079 1078 7492 + 7497 7492 1078 + 7492 7497 7498 + 7498 7499 7492 + 7492 7499 7493 + 7493 7499 7500 + 7500 7501 7493 + 7494 7493 7501 + 1078 1077 7497 + 7497 1077 1084 + 1084 7502 7497 + 7498 7497 7502 + 7502 7503 7498 + 7498 7503 7504 + 7504 7505 7498 + 7499 7498 7505 + 7505 7500 7499 + 7506 7502 1084 + 7502 7506 7507 + 7507 7503 7502 + 7503 7507 7508 + 7508 7504 7503 + 7508 7509 7504 + 7504 7509 7510 + 7510 7505 7504 + 7500 7505 7510 + 1084 1083 7506 + 7511 7506 1083 + 7507 7506 7511 + 7511 7512 7507 + 7507 7512 7513 + 7513 7508 7507 + 7509 7508 7513 + 7513 7514 7509 + 7510 7509 7514 + 1083 1088 7511 + 1088 7515 7511 + 7516 7511 7515 + 7512 7511 7516 + 7516 7517 7512 + 7512 7517 7518 + 7518 7513 7512 + 7513 7518 7519 + 7519 7514 7513 + 1093 7515 1088 + 7520 7515 1093 + 7515 7520 7516 + 7516 7520 7521 + 7521 7522 7516 + 7517 7516 7522 + 7522 7523 7517 + 7518 7517 7523 + 7523 7524 7518 + 7519 7518 7524 + 1093 7525 7520 + 7520 7525 7526 + 7526 7521 7520 + 7521 7526 7527 + 7527 7528 7521 + 7521 7528 7529 + 7529 7522 7521 + 7525 1093 1092 + 1092 7530 7525 + 7525 7530 7531 + 7531 7526 7525 + 7527 7526 7531 + 7531 7532 7527 + 7533 7527 7532 + 7528 7527 7533 + 7533 7534 7528 + 7529 7528 7534 + 3288 7530 1092 + 7530 3288 7535 + 7535 7531 7530 + 7532 7531 7535 + 7535 7536 7532 + 7532 7536 7537 + 7537 7538 7532 + 7532 7538 7533 + 7539 7533 7538 + 7534 7533 7539 + 7540 7535 3288 + 7536 7535 7540 + 7540 7541 7536 + 7536 7541 7542 + 7542 7537 7536 + 7543 7537 7542 + 7537 7543 7544 + 7544 7538 7537 + 7538 7544 7539 + 3291 7540 3288 + 3296 7540 3291 + 7541 7540 3296 + 7541 3296 3295 + 3295 7542 7541 + 7545 7542 3295 + 7542 7545 7543 + 7546 7543 7545 + 7544 7543 7546 + 7546 7547 7544 + 7544 7547 7548 + 7548 7539 7544 + 7549 7539 7548 + 7539 7549 7534 + 3295 7550 7545 + 7545 7550 7551 + 7551 7552 7545 + 7545 7552 7546 + 7550 3295 3294 + 3294 3293 7550 + 7551 7550 3293 + 7553 7551 3293 + 7554 7551 7553 + 7552 7551 7554 + 7552 7554 7555 + 7555 7556 7552 + 7552 7556 7546 + 7557 7553 3293 + 7558 7553 7557 + 7558 7559 7553 + 7553 7559 7554 + 7554 7559 7560 + 7555 7554 7560 + 3302 7557 3293 + 7561 7557 3302 + 7562 7557 7561 + 7557 7562 7558 + 3302 7563 7561 + 7561 7563 7564 + 7564 7565 7561 + 7562 7561 7565 + 7565 7566 7562 + 7558 7562 7566 + 7563 3302 3301 + 7563 3301 3300 + 3300 3499 7563 + 7563 3499 7564 + 1027 1026 7450 + 7450 7567 1027 + 1658 1657 5120 + 5120 1657 1656 + 1656 7568 5120 + 5120 7568 5121 + 7569 5121 7568 + 5121 7569 7570 + 7570 7571 5121 + 5121 7571 5113 + 1665 7568 1656 + 7568 1665 7569 + 7569 1665 1669 + 7572 7569 1669 + 7570 7569 7572 + 7572 7573 7570 + 7574 7570 7573 + 7571 7570 7574 + 7574 5110 7571 + 5113 7571 5110 + 1669 7575 7572 + 7576 7572 7575 + 7573 7572 7576 + 7576 353 7573 + 7573 353 352 + 352 7577 7573 + 7573 7577 7574 + 7578 7575 1669 + 7579 7575 7578 + 7575 7579 7576 + 348 7576 7579 + 353 7576 348 + 1669 1668 7578 + 7580 7578 1668 + 7579 7578 7580 + 7580 7581 7579 + 7579 7581 348 + 349 348 7581 + 7581 7582 349 + 345 349 7582 + 1668 1673 7580 + 1678 7580 1673 + 7580 1678 7582 + 7582 7581 7580 + 7582 1678 1677 + 1677 7583 7582 + 7582 7583 345 + 323 345 7583 + 7583 317 323 + 317 7583 1677 + 1677 1682 317 + 317 1682 312 + 7584 312 1682 + 313 312 7584 + 7584 7585 313 + 308 313 7585 + 7586 308 7585 + 7585 559 7586 + 1682 1681 7584 + 7587 7584 1681 + 7585 7584 7587 + 7585 7587 560 + 560 559 7585 + 1681 7588 7587 + 7587 7588 1679 + 1679 561 7587 + 561 560 7587 + 562 561 1679 + 1679 7589 562 + 357 7577 352 + 7577 357 7590 + 7590 7574 7577 + 5110 7574 7590 + 7590 5104 5110 + 5104 7590 5105 + 5105 7590 362 + 7590 357 362 + 5061 7591 5062 + 5075 5062 7591 + 5075 5059 5062 + 5059 5075 7592 + 7592 7593 5059 + 5059 7593 3409 + 3404 3409 7593 + 7591 7594 5075 + 7593 3384 3404 + 7592 3384 7593 + 3384 7592 7595 + 7595 7596 3384 + 7597 7596 7595 + 5073 7595 7592 + 7598 7595 5073 + 5073 7599 7598 + 7600 7598 7599 + 7592 5075 5073 + 5072 7599 5073 + 7599 5072 7601 + 7601 3367 7599 + 7602 3367 7601 + 3367 7602 3361 + 3361 7602 5083 + 5083 3362 3361 + 5079 7601 5072 + 7602 7601 5079 + 5079 5083 7602 + 5087 3362 5083 + 3355 3362 5087 + 5087 7603 3355 + 3355 7603 7604 + 7604 3356 3355 + 7605 3356 7604 + 3356 7605 3349 + 3349 7605 3350 + 7603 5087 5092 + 5092 7606 7603 + 7604 7603 7606 + 7606 7607 7604 + 7608 7604 7607 + 7604 7608 7605 + 7605 7608 7609 + 7609 3350 7605 + 7610 3350 7609 + 3350 7610 1021 + 7606 5092 5091 + 5091 7611 7606 + 7606 7611 7612 + 7612 7607 7606 + 7607 7612 522 + 522 7613 7607 + 7607 7613 7608 + 7608 7613 7614 + 7614 7609 7608 + 7611 5091 7615 + 7615 166 7611 + 7611 166 523 + 523 7612 7611 + 522 7612 523 + 368 523 166 + 166 369 368 + 7616 369 166 + 1021 7610 7617 + 7613 522 521 + 521 7614 7613 + 527 7614 521 + 7614 527 7618 + 7618 7609 7614 + 7609 7618 7610 + 7610 7618 533 + 533 7619 7610 + 533 7618 527 + 5061 5060 7620 + 7620 254 5061 + 4408 4412 7621 + 7621 7622 4408 + 4408 7622 7623 + 7623 4409 4408 + 7624 4409 7623 + 4409 7624 7625 + 4409 7625 4405 + 7621 7626 7622 + 7622 7626 4096 + 4096 7623 7622 + 4096 4095 7623 + 7623 4095 7624 + 7624 4095 4100 + 4100 7627 7624 + 7625 7624 7627 + 7626 7621 4417 + 4417 7628 7626 + 7626 7628 4090 + 4096 7626 4090 + 7629 7628 4417 + 7628 7629 7630 + 7630 4090 7628 + 4091 4090 7630 + 4091 7630 23 + 23 7631 4091 + 6469 7627 4100 + 6474 7627 6469 + 7627 6474 7625 + 4405 7625 6474 + 148 7632 7633 + 7633 7632 7634 + 7634 7635 7633 + 7636 7635 7634 + 7636 7634 7637 + 7637 7638 7636 + 7639 7636 7638 + 7638 7637 7640 + 7641 7642 7643 + 7642 7641 7644 + 7644 7645 7642 + 7645 7646 7642 + 7646 7647 7642 + 7648 7642 7647 + 7647 7649 7648 + 7644 7641 2021 + 7650 7644 2021 + 7651 7644 7650 + 7644 7651 7645 + 7645 7651 7652 + 7652 7646 7645 + 7641 7653 2021 + 2022 2021 7653 + 7653 7654 2022 + 2018 2022 7654 + 7653 7641 7655 + 7656 7653 7655 + 7653 7656 7654 + 7654 7656 7657 + 7657 7658 7654 + 7654 7658 2018 + 7658 7659 2018 + 2013 2018 7659 + 7659 7660 2013 + 2013 7660 1996 + 7658 7657 7661 + 7659 7658 7662 + 7663 7659 7662 + 7660 7659 7663 + 7660 7663 7664 + 7664 1996 7660 + 1996 7664 7665 + 1996 7665 7666 + 7666 1997 1996 + 7664 7663 7667 + 7667 7668 7664 + 7668 7665 7664 + 7665 7668 7669 + 7665 7669 7670 + 7669 7671 7670 + 7672 7670 7671 + 7673 7668 7667 + 7668 7673 7674 + 7674 7669 7668 + 7674 7675 7669 + 7669 7675 7676 + 7676 7671 7669 + 7677 7671 7676 + 7671 7677 7672 + 7678 7673 7667 + 7678 7667 7679 + 7679 7680 7678 + 7678 7680 7681 + 7682 7679 7667 + 7683 7682 7667 + 1997 7666 7672 + 1997 7672 7684 + 7684 1985 1997 + 1985 7684 1976 + 1976 7684 7685 + 7685 1977 1976 + 1973 1977 7685 + 7672 7677 7684 + 7677 7686 7684 + 7686 7685 7684 + 7685 7686 7687 + 7688 7685 7687 + 7685 7688 1973 + 1973 7688 7689 + 7689 7690 1973 + 1973 7690 1967 + 1963 1967 7690 + 7688 7687 7691 + 7689 7688 7691 + 7691 7692 7689 + 7693 7689 7692 + 7693 7690 7689 + 7690 7693 1963 + 1963 7693 1938 + 7692 7691 7694 + 7695 7692 7694 + 7696 7692 7695 + 7692 7696 7693 + 7693 7696 1938 + 7694 7691 3240 + 7650 7697 7651 + 7650 7698 7697 + 7698 7650 7699 + 7650 7700 7699 + 7700 7701 7699 + 7699 7701 7702 + 7702 7703 7699 + 7700 7650 2021 + 7704 7700 2021 + 7701 7700 7704 + 7704 7705 7701 + 7705 7702 7701 + 7706 7702 7705 + 7702 7706 7707 + 7704 2021 2027 + 2027 7708 7704 + 7708 7709 7704 + 7709 7710 7704 + 7710 7711 7704 + 7711 7712 7704 + 7713 7704 7712 + 7704 7713 7705 + 7714 7708 2027 + 7708 7714 7715 + 7708 7715 7716 + 7716 7709 7708 + 7709 7716 7717 + 7709 7717 7718 + 7718 7710 7709 + 2027 7719 7714 + 7720 7714 7719 + 7715 7714 7720 + 7720 7721 7715 + 7715 7721 1523 + 1523 7716 7715 + 7717 7716 1523 + 2027 2030 7719 + 7719 2030 2029 + 2029 7722 7719 + 7719 7722 7720 + 7723 7720 7722 + 7721 7720 7723 + 7723 7724 7721 + 7725 7722 2029 + 7722 7725 7723 + 2029 7726 7725 + 7726 2029 2028 + 2028 7727 7726 + 1523 1522 7717 + 7717 1522 7728 + 7728 7718 7717 + 7729 7718 7728 + 7710 7718 7729 + 7710 7729 7730 + 7730 7711 7710 + 7711 7730 7731 + 1521 7728 1522 + 1529 7728 1521 + 7728 1529 7729 + 7729 1529 7732 + 7730 7729 7732 + 7732 7733 7730 + 7731 7730 7733 + 7733 7734 7731 + 7734 151 7731 + 1529 1528 7732 + 1534 7732 1528 + 7732 1534 7735 + 7732 7735 7736 + 7736 7733 7732 + 7734 7733 7736 + 7734 7736 7737 + 7737 151 7734 + 7738 151 7737 + 151 7738 3432 + 3432 7739 151 + 7735 1534 1533 + 1533 7740 7735 + 7735 7740 382 + 7740 7741 382 + 7741 7742 382 + 1533 7743 7740 + 7740 7743 7744 + 7744 7741 7740 + 7744 7745 7741 + 7741 7745 7746 + 7746 7742 7741 + 7743 1533 1532 + 1532 7747 7743 + 7744 7743 7747 + 7747 7748 7744 + 7745 7744 7748 + 7748 7749 7745 + 7746 7745 7749 + 7749 7750 7746 + 7751 7746 7750 + 7746 7751 7742 + 1531 7747 1532 + 7747 1531 7752 + 7752 7748 7747 + 7749 7748 7752 + 7753 3432 7738 + 374 7753 7738 + 391 374 7738 + 7738 7737 391 + 391 7737 7735 + 7737 7736 7735 + 1517 1523 7721 + 7721 7754 1517 + 7705 7713 7706 + 7755 7706 7713 + 2103 7756 7757 + 2103 7757 7758 + 7758 7759 2103 + 2103 7759 7760 + 7759 7758 7761 + 7759 7761 7694 + 7694 7762 7759 + 7763 7762 7694 + 7761 7758 7764 + 7764 7765 7761 + 7765 7694 7761 + 7765 7695 7694 + 7696 7695 7765 + 7765 1938 7696 + 7764 7758 7766 + 7766 7767 7764 + 1938 7764 7767 + 1938 7765 7764 + 7766 7768 7767 + 7768 7769 7767 + 1939 7767 7769 + 7767 1939 1938 + 1939 7769 7770 + 7770 1930 1939 + 1930 7770 1924 + 1924 7770 1925 + 1925 7770 7769 + 7769 7771 1925 + 7772 7773 7774 + 7774 7775 7772 + 7776 7772 7775 + 7776 7777 7772 + 7777 7778 7772 + 7779 7772 7778 + 7779 7778 7780 + 7775 7774 7781 + 7781 7782 7775 + 7775 7782 7783 + 7783 7776 7775 + 7777 7776 7783 + 7784 7781 7774 + 7781 7784 7785 + 7786 7781 7785 + 7782 7781 7786 + 7786 7787 7782 + 7783 7782 7787 + 7788 7784 7774 + 7789 7784 7788 + 7784 7789 7790 + 7790 7785 7784 + 7790 7791 7785 + 7792 7785 7791 + 7792 7786 7785 + 7788 7774 7793 + 7780 7794 7773 + 7794 7780 7795 + 7795 7796 7794 + 7797 7794 7796 + 7797 7798 7794 + 7798 7799 7794 + 7794 7799 7800 + 7795 7780 7801 + 7802 7795 7801 + 7795 7802 7803 + 7803 7804 7795 + 7804 7796 7795 + 7796 7804 7805 + 7805 7797 7796 + 7798 7797 7805 + 7801 7780 7778 + 7806 7801 7778 + 7801 7806 7807 + 7807 7808 7801 + 7801 7808 7802 + 7809 7802 7808 + 7803 7802 7809 + 7777 7806 7778 + 7807 7806 7777 + 7777 7810 7807 + 7811 7807 7810 + 7808 7807 7811 + 7811 7812 7808 + 7808 7812 7809 + 7783 7810 7777 + 7810 7783 7813 + 7813 7814 7810 + 7810 7814 7811 + 7814 7815 7811 + 7815 7816 7811 + 7816 7817 7811 + 7812 7811 7817 + 7813 7783 7787 + 7787 7818 7813 + 7819 7813 7818 + 7819 7814 7813 + 7814 7819 7820 + 7820 7815 7814 + 7816 7815 7820 + 7818 7787 7821 + 7822 7818 7821 + 7822 7823 7818 + 7818 7823 7819 + 7819 7823 7824 + 7820 7819 7824 + 7787 7786 7821 + 7821 7786 7825 + 7825 7826 7821 + 7821 7826 7827 + 7822 7821 7827 + 7828 7822 7827 + 7823 7822 7828 + 7828 7824 7823 + 7792 7825 7786 + 7829 7825 7792 + 7829 7826 7825 + 7829 7830 7826 + 7826 7830 7831 + 7831 7827 7826 + 7792 7832 7829 + 7833 7829 7832 + 7829 7833 7834 + 7830 7829 7834 + 7831 7830 7834 + 7835 7831 7834 + 7831 7835 7836 + 7836 7827 7831 + 7832 7792 7837 + 7838 7832 7837 + 7832 7838 7833 + 7838 7839 7833 + 7834 7833 7839 + 7839 7840 7834 + 7834 7840 7835 + 7837 7792 7791 + 7841 7837 7791 + 7842 7837 7841 + 7838 7837 7842 + 7843 7838 7842 + 7843 7839 7838 + 7840 7839 7843 + 7843 7844 7840 + 7844 7835 7840 + 7845 7835 7844 + 7835 7845 7836 + 7791 7846 7841 + 7847 7841 7846 + 7841 7847 7848 + 7841 7848 7842 + 7842 7848 7849 + 7850 7842 7849 + 7850 7843 7842 + 7844 7843 7850 + 7846 7791 7790 + 7851 7846 7790 + 7851 7852 7846 + 7846 7852 7847 + 7853 7847 7852 + 7848 7847 7853 + 7853 7849 7848 + 7851 7790 7789 + 7854 7851 7789 + 7852 7851 7854 + 7854 7855 7852 + 7852 7855 7856 + 7856 7853 7852 + 7857 7853 7856 + 7853 7857 7849 + 7789 7858 7854 + 7859 7854 7858 + 7859 7855 7854 + 7855 7859 7860 + 7860 7861 7855 + 7855 7861 7856 + 7789 7862 7858 + 7862 7798 7858 + 7805 7858 7798 + 7858 7805 7859 + 7860 7859 7805 + 7863 7860 7805 + 7864 7860 7863 + 7860 7864 7861 + 7788 7862 7789 + 7862 7788 7800 + 7800 7799 7862 + 7862 7799 7798 + 7805 7804 7863 + 7804 7865 7863 + 7865 7866 7863 + 7867 7863 7866 + 7863 7867 7868 + 7863 7868 7864 + 7869 7865 7804 + 7865 7869 7870 + 7870 7871 7865 + 7865 7871 7872 + 7872 7866 7865 + 7873 7866 7872 + 7866 7873 7867 + 7804 7803 7869 + 7874 7869 7803 + 7870 7869 7874 + 7874 7875 7870 + 7870 7875 7876 + 7876 7877 7870 + 7871 7870 7877 + 7877 7878 7871 + 7872 7871 7878 + 7803 7879 7874 + 7880 7874 7879 + 7874 7880 7881 + 7881 7875 7874 + 7875 7881 7882 + 7882 7876 7875 + 7809 7879 7803 + 7883 7879 7809 + 7879 7883 7880 + 7884 7880 7883 + 7881 7880 7884 + 7884 7885 7881 + 7881 7885 7886 + 7886 7882 7881 + 7887 7882 7886 + 7876 7882 7887 + 7809 7888 7883 + 7883 7888 7889 + 7889 7890 7883 + 7883 7890 7884 + 7891 7884 7890 + 7884 7891 7892 + 7892 7885 7884 + 7888 7809 7893 + 7893 7894 7888 + 7888 7894 7895 + 7895 7889 7888 + 7896 7889 7895 + 7890 7889 7896 + 7896 7897 7890 + 7890 7897 7891 + 7812 7893 7809 + 7898 7893 7812 + 7898 7894 7893 + 7894 7898 7899 + 7899 7895 7894 + 7895 7899 7900 + 7900 7901 7895 + 7895 7901 7896 + 7812 7817 7898 + 7898 7817 7816 + 7898 7816 7899 + 7900 7899 7816 + 7816 7902 7900 + 7900 7902 7903 + 7903 7904 7900 + 7901 7900 7904 + 7904 7905 7901 + 7896 7901 7905 + 7905 7906 7896 + 7897 7896 7906 + 7820 7902 7816 + 7902 7820 7907 + 7907 7903 7902 + 7908 7903 7907 + 7903 7908 7909 + 7909 7904 7903 + 7905 7904 7909 + 7909 7910 7905 + 7905 7910 7911 + 7911 7906 7905 + 7824 7907 7820 + 7908 7907 7824 + 7824 7912 7908 + 7909 7908 7912 + 7912 7913 7909 + 7913 7914 7909 + 7914 7915 7909 + 7910 7909 7915 + 7915 7916 7910 + 7911 7910 7916 + 7912 7824 7828 + 7912 7828 7917 + 7917 7913 7912 + 7918 7913 7917 + 7913 7918 7919 + 7919 7914 7913 + 7920 7914 7919 + 7914 7920 7921 + 7921 7915 7914 + 7916 7915 7921 + 7827 7917 7828 + 7918 7917 7827 + 7827 7836 7918 + 7919 7918 7836 + 7836 7922 7919 + 7920 7919 7922 + 7922 7923 7920 + 7921 7920 7923 + 7923 7924 7921 + 7925 7921 7924 + 7921 7925 7916 + 7926 7922 7836 + 7926 7923 7922 + 7923 7926 7927 + 7927 7924 7923 + 7924 7927 7928 + 7928 7929 7924 + 7924 7929 7925 + 7930 7925 7929 + 7916 7925 7930 + 7836 7845 7926 + 7926 7845 7931 + 7931 7927 7926 + 7928 7927 7931 + 7931 7932 7928 + 7933 7928 7932 + 7929 7928 7933 + 7933 7934 7929 + 7929 7934 7930 + 7845 7935 7931 + 7935 7936 7931 + 7937 7931 7936 + 7931 7937 7938 + 7938 7932 7931 + 7932 7938 7933 + 7938 7939 7933 + 7934 7933 7939 + 7844 7935 7845 + 7850 7935 7844 + 7935 7850 7940 + 7940 7936 7935 + 7940 7941 7936 + 7936 7941 7937 + 7937 7941 7857 + 7857 7942 7937 + 7942 7943 7937 + 7938 7937 7943 + 7940 7850 7849 + 7941 7940 7849 + 7849 7857 7941 + 7856 7942 7857 + 7856 7944 7942 + 7942 7944 7945 + 7945 7943 7942 + 7946 7943 7945 + 7943 7946 7938 + 7938 7946 7947 + 7947 7948 7938 + 7948 7939 7938 + 7934 7939 7948 + 7944 7856 7861 + 7861 7864 7944 + 7945 7944 7864 + 7864 7868 7945 + 7949 7945 7868 + 7945 7949 7946 + 7946 7949 7950 + 7950 7947 7946 + 7947 7950 7951 + 7951 7952 7947 + 7947 7952 7953 + 7953 7948 7947 + 7868 7867 7949 + 7949 7867 7873 + 7873 7950 7949 + 7950 7873 7954 + 7951 7950 7954 + 7951 7954 7955 + 7955 7956 7951 + 7952 7951 7956 + 7956 7957 7952 + 7953 7952 7957 + 7872 7954 7873 + 7954 7872 7958 + 7958 7955 7954 + 7955 7958 7959 + 7959 7960 7955 + 7955 7960 7961 + 7961 7956 7955 + 7957 7956 7961 + 7878 7958 7872 + 7959 7958 7878 + 7878 7962 7959 + 7959 7962 7963 + 7963 7964 7959 + 7960 7959 7964 + 7964 7965 7960 + 7961 7960 7965 + 7966 7962 7878 + 7962 7966 7967 + 7967 7963 7962 + 7963 7967 7968 + 7968 7969 7963 + 7963 7969 7970 + 7970 7964 7963 + 7965 7964 7970 + 7878 7877 7966 + 7966 7877 7876 + 7876 7971 7966 + 7966 7971 7972 + 7972 7967 7966 + 7968 7967 7972 + 7972 7973 7968 + 7968 7973 7974 + 7974 7975 7968 + 7969 7968 7975 + 7887 7971 7876 + 7971 7887 7976 + 7976 7972 7971 + 7972 7976 7977 + 7977 7973 7972 + 7973 7977 7978 + 7978 7974 7973 + 7979 7976 7887 + 7977 7976 7979 + 7979 7980 7977 + 7977 7980 7981 + 7981 7978 7977 + 7982 7978 7981 + 7974 7978 7982 + 7887 7983 7979 + 7984 7979 7983 + 7979 7984 7985 + 7985 7980 7979 + 7980 7985 7986 + 7986 7981 7980 + 7886 7983 7887 + 7987 7983 7886 + 7983 7987 7984 + 7988 7984 7987 + 7985 7984 7988 + 7988 7989 7985 + 7985 7989 7990 + 7990 7986 7985 + 7991 7986 7990 + 7981 7986 7991 + 7886 7992 7987 + 7987 7992 7993 + 7993 7994 7987 + 7987 7994 7988 + 7995 7988 7994 + 7988 7995 7996 + 7996 7989 7988 + 7992 7886 7885 + 7885 7892 7992 + 7993 7992 7892 + 7892 7997 7993 + 7998 7993 7997 + 7993 7998 7999 + 7999 7994 7993 + 7994 7999 7995 + 8000 7995 7999 + 7996 7995 8000 + 8001 7997 7892 + 8002 7997 8001 + 7997 8002 7998 + 8003 7998 8002 + 7999 7998 8003 + 8003 8004 7999 + 7999 8004 8000 + 7892 7891 8001 + 8001 7891 7897 + 7897 8005 8001 + 8006 8001 8005 + 8001 8006 8002 + 8002 8006 8007 + 8007 8008 8002 + 8002 8008 8003 + 7906 8005 7897 + 8005 7906 7911 + 7911 8009 8005 + 8005 8009 8006 + 8007 8006 8009 + 8009 8010 8007 + 8011 8007 8010 + 8007 8011 8012 + 8012 8008 8007 + 8008 8012 8013 + 8013 8003 8008 + 8009 7911 8014 + 8014 8010 8009 + 7930 8010 8014 + 8010 7930 8011 + 8015 8011 7930 + 8012 8011 8015 + 8015 8016 8012 + 8012 8016 8017 + 8017 8013 8012 + 7916 8014 7911 + 7930 8014 7916 + 7934 8015 7930 + 7948 8015 7934 + 8015 7948 7953 + 7953 8016 8015 + 8016 7953 8018 + 8018 8017 8016 + 8017 8018 8019 + 8019 8020 8017 + 8017 8020 8021 + 8021 8013 8017 + 8003 8013 8021 + 8021 8004 8003 + 7957 8018 7953 + 8019 8018 7957 + 7957 8022 8019 + 8019 8022 8023 + 8023 8024 8019 + 8020 8019 8024 + 8024 8025 8020 + 8021 8020 8025 + 8025 8026 8021 + 8004 8021 8026 + 8026 8000 8004 + 7961 8022 7957 + 8022 7961 8027 + 8027 8023 8022 + 8023 8027 8028 + 8028 8029 8023 + 8023 8029 8030 + 8030 8024 8023 + 8025 8024 8030 + 7965 8027 7961 + 8028 8027 7965 + 7965 8031 8028 + 8028 8031 8032 + 8032 8033 8028 + 8029 8028 8033 + 8033 8034 8029 + 8030 8029 8034 + 7970 8031 7965 + 8031 7970 8035 + 8035 8032 8031 + 8032 8035 8036 + 8036 8037 8032 + 8032 8037 8038 + 8038 8033 8032 + 8034 8033 8038 + 8039 8035 7970 + 8036 8035 8039 + 8039 8040 8036 + 8041 8036 8040 + 8037 8036 8041 + 8041 8042 8037 + 8042 8038 8037 + 8043 8038 8042 + 8038 8043 8034 + 7970 7969 8039 + 7975 8039 7969 + 8039 7975 8044 + 8044 8040 8039 + 8040 8044 8045 + 8045 8041 8040 + 8042 8041 8045 + 8045 8046 8042 + 8046 8047 8042 + 8042 8047 8043 + 8048 8043 8047 + 8034 8043 8048 + 8044 7975 7974 + 7974 8049 8044 + 8045 8044 8049 + 8045 8049 7982 + 8046 8045 7982 + 8046 7982 8050 + 8051 8046 8050 + 8047 8046 8051 + 8051 8052 8047 + 8047 8052 8048 + 7982 8049 7974 + 7981 8050 7982 + 7991 8050 7981 + 8051 8050 7991 + 8053 8051 7991 + 8051 8053 8054 + 8054 8052 8051 + 8052 8054 8055 + 8055 8048 8052 + 8048 8055 8056 + 8056 8057 8048 + 8048 8057 8034 + 8053 7991 8058 + 8053 8058 8059 + 8060 8053 8059 + 8053 8060 8054 + 8054 8060 8061 + 8054 8061 8055 + 8056 8055 8061 + 7990 8058 7991 + 8059 8058 7990 + 7990 8062 8059 + 8059 8062 8063 + 8063 8064 8059 + 8060 8059 8064 + 8060 8064 8061 + 8061 8064 8063 + 8063 8065 8061 + 8061 8065 8056 + 8062 7990 7989 + 7989 7996 8062 + 8063 8062 7996 + 7996 8066 8063 + 8065 8063 8066 + 8066 8067 8065 + 8056 8065 8067 + 8067 8068 8056 + 8057 8056 8068 + 8068 8030 8057 + 8034 8057 8030 + 8000 8066 7996 + 8067 8066 8000 + 8000 8026 8067 + 8067 8026 8025 + 8025 8068 8067 + 8030 8068 8025 + 8069 8070 8071 + 8072 8070 8069 + 8070 8072 8073 + 8074 8070 8073 + 8070 8074 8075 + 8069 8076 8072 + 8077 8072 8076 + 8072 8077 8078 + 8073 8072 8078 + 8078 8079 8073 + 8079 8074 8073 + 8069 8080 8076 + 8076 8080 8081 + 8081 8082 8076 + 8082 8083 8076 + 8083 8077 8076 + 8080 8069 8084 + 8084 8085 8080 + 8080 8085 8086 + 8086 8081 8080 + 8081 8086 8087 + 8088 8081 8087 + 8082 8081 8088 + 8084 8069 8075 + 8084 8075 8089 + 8089 8090 8084 + 8091 8084 8090 + 8084 8091 8085 + 8085 8091 8092 + 8092 8086 8085 + 8086 8092 8087 + 8093 8089 8075 + 8094 8089 8093 + 8089 8094 8095 + 8095 8090 8089 + 8096 8090 8095 + 8090 8096 8091 + 8091 8096 8097 + 8092 8091 8097 + 8075 8098 8093 + 8093 8098 8099 + 8099 8100 8093 + 8100 8101 8093 + 8102 8093 8101 + 8093 8102 8094 + 8098 8075 8103 + 8098 8103 8104 + 8104 8099 8098 + 8099 8104 8105 + 8099 8105 8106 + 8106 8100 8099 + 8103 8075 8074 + 8074 8107 8103 + 8103 8107 8108 + 8104 8103 8108 + 8108 8109 8104 + 8105 8104 8109 + 8109 8110 8105 + 8106 8105 8110 + 8107 8074 8079 + 8079 8111 8107 + 8107 8111 8112 + 8112 8108 8107 + 8108 8112 8113 + 8113 8114 8108 + 8108 8114 8115 + 8115 8109 8108 + 8110 8109 8115 + 8111 8079 8116 + 8111 8116 8112 + 8116 8117 8112 + 8113 8112 8117 + 8117 8118 8113 + 8113 8118 8119 + 8113 8119 8120 + 8114 8113 8120 + 8115 8114 8120 + 8079 8078 8116 + 8116 8078 8077 + 8117 8116 8077 + 8083 8117 8077 + 8118 8117 8083 + 8083 8121 8118 + 8118 8121 8122 + 8122 8123 8118 + 8118 8123 8119 + 8124 8119 8123 + 8119 8124 8125 + 8120 8119 8125 + 8121 8083 8082 + 8082 8126 8121 + 8122 8121 8126 + 8127 8122 8126 + 8128 8122 8127 + 8122 8128 8129 + 8129 8123 8122 + 8123 8129 8124 + 8088 8126 8082 + 8126 8088 8130 + 8130 8127 8126 + 8131 8127 8130 + 8131 8132 8127 + 8127 8132 8128 + 8133 8128 8132 + 8133 8134 8128 + 8134 8129 8128 + 8130 8088 8087 + 8135 8130 8087 + 8130 8135 8136 + 8131 8130 8136 + 8131 8136 8137 + 8137 8138 8131 + 8132 8131 8138 + 8138 8139 8132 + 8139 8133 8132 + 8087 8140 8135 + 8141 8135 8140 + 8135 8141 8136 + 8136 8141 8142 + 8142 8143 8136 + 8136 8143 8137 + 8144 8140 8087 + 8140 8144 8145 + 8140 8145 8141 + 8142 8141 8145 + 8146 8142 8145 + 8147 8142 8146 + 8143 8142 8147 + 8137 8143 8147 + 8087 8092 8144 + 8097 8144 8092 + 8145 8144 8097 + 8097 8148 8145 + 8145 8148 8146 + 8149 8146 8148 + 8146 8149 8150 + 8146 8150 8147 + 8147 8150 8151 + 8151 8152 8147 + 8152 8137 8147 + 8153 8148 8097 + 8148 8153 8149 + 8149 8153 8154 + 8155 8149 8154 + 8150 8149 8155 + 8155 8156 8150 + 8150 8156 8151 + 8097 8157 8153 + 8153 8157 8158 + 8158 8154 8153 + 8157 8097 8096 + 8096 8159 8157 + 8157 8159 8160 + 8160 8158 8157 + 8161 8158 8160 + 8154 8158 8161 + 8095 8159 8096 + 8159 8095 8162 + 8162 8160 8159 + 8160 8162 8163 + 8163 8164 8160 + 8160 8164 8161 + 8165 8162 8095 + 8163 8162 8165 + 8165 8166 8163 + 8163 8166 8167 + 8167 8168 8163 + 8164 8163 8168 + 8168 8169 8164 + 8161 8164 8169 + 8095 8094 8165 + 8170 8165 8094 + 8165 8170 8171 + 8171 8166 8165 + 8166 8171 8172 + 8172 8167 8166 + 8094 8102 8170 + 8173 8170 8102 + 8171 8170 8173 + 8173 8174 8171 + 8171 8174 8175 + 8175 8172 8171 + 8176 8172 8175 + 8167 8172 8176 + 8102 8177 8173 + 8178 8173 8177 + 8173 8178 8179 + 8179 8174 8173 + 8174 8179 8180 + 8180 8175 8174 + 8101 8177 8102 + 8177 8101 8181 + 8181 8182 8177 + 8177 8182 8178 + 8183 8178 8182 + 8179 8178 8183 + 8183 8184 8179 + 8179 8184 8185 + 8185 8180 8179 + 8181 8101 8100 + 8100 8186 8181 + 8181 8186 8187 + 8187 8188 8181 + 8182 8181 8188 + 8188 8189 8182 + 8182 8189 8183 + 8106 8186 8100 + 8186 8106 8190 + 8190 8187 8186 + 8187 8190 8191 + 8191 8192 8187 + 8187 8192 8193 + 8193 8188 8187 + 8189 8188 8193 + 8110 8190 8106 + 8191 8190 8110 + 8110 8194 8191 + 8191 8194 8195 + 8195 8196 8191 + 8192 8191 8196 + 8196 8197 8192 + 8193 8192 8197 + 8115 8194 8110 + 8194 8115 8198 + 8198 8195 8194 + 8198 8199 8195 + 8195 8199 8200 + 8200 8196 8195 + 8197 8196 8200 + 8201 8198 8115 + 8201 8202 8198 + 8202 8199 8198 + 8199 8202 8203 + 8200 8199 8203 + 8120 8201 8115 + 8201 8120 8125 + 8204 8201 8125 + 8202 8201 8204 + 8202 8204 8205 + 8205 8203 8202 + 8205 8206 8203 + 8203 8206 8207 + 8207 8208 8203 + 8203 8208 8200 + 8204 8125 8209 + 8204 8209 8205 + 8209 8210 8205 + 8206 8205 8210 + 8210 8211 8206 + 8206 8211 8207 + 8211 8212 8207 + 8213 8207 8212 + 8207 8213 8208 + 8125 8124 8209 + 8124 8214 8209 + 8215 8209 8214 + 8209 8215 8216 + 8216 8210 8209 + 8216 8211 8210 + 8211 8216 8217 + 8217 8212 8211 + 8124 8129 8214 + 8129 8134 8214 + 8215 8214 8134 + 8134 8218 8215 + 8216 8215 8218 + 8218 8217 8216 + 8218 8219 8217 + 8220 8217 8219 + 8212 8217 8220 + 8220 8221 8212 + 8212 8221 8213 + 8218 8134 8133 + 8218 8133 8139 + 8139 8219 8218 + 8222 8219 8139 + 8219 8222 8220 + 8223 8220 8222 + 8221 8220 8223 + 8223 8224 8221 + 8221 8224 8225 + 8213 8221 8225 + 8226 8213 8225 + 8208 8213 8226 + 8139 8138 8222 + 8222 8138 8227 + 8222 8227 8223 + 8151 8223 8227 + 8224 8223 8151 + 8151 8228 8224 + 8224 8228 8229 + 8229 8225 8224 + 8138 8137 8227 + 8137 8152 8227 + 8227 8152 8151 + 8228 8151 8156 + 8156 8230 8228 + 8228 8230 8231 + 8231 8229 8228 + 8232 8229 8231 + 8225 8229 8232 + 8156 8155 8230 + 8230 8155 8233 + 8233 8231 8230 + 8231 8233 8234 + 8234 8235 8231 + 8231 8235 8232 + 8154 8233 8155 + 8234 8233 8154 + 8154 8236 8234 + 8234 8236 8237 + 8237 8238 8234 + 8235 8234 8238 + 8238 8239 8235 + 8232 8235 8239 + 8161 8236 8154 + 8236 8161 8240 + 8240 8237 8236 + 8237 8240 8241 + 8241 8242 8237 + 8237 8242 8243 + 8243 8238 8237 + 8239 8238 8243 + 8169 8240 8161 + 8241 8240 8169 + 8169 8244 8241 + 8241 8244 8245 + 8245 8246 8241 + 8242 8241 8246 + 8246 8247 8242 + 8243 8242 8247 + 8248 8244 8169 + 8244 8248 8249 + 8249 8245 8244 + 8245 8249 8250 + 8250 8251 8245 + 8245 8251 8252 + 8252 8246 8245 + 8247 8246 8252 + 8169 8168 8248 + 8248 8168 8167 + 8167 8253 8248 + 8248 8253 8254 + 8254 8249 8248 + 8250 8249 8254 + 8176 8253 8167 + 8253 8176 8255 + 8255 8254 8253 + 8254 8255 8256 + 8256 8257 8254 + 8254 8257 8250 + 8258 8255 8176 + 8256 8255 8258 + 8258 8259 8256 + 8256 8259 8260 + 8260 8261 8256 + 8257 8256 8261 + 8261 8262 8257 + 8262 8250 8257 + 8176 8263 8258 + 8264 8258 8263 + 8258 8264 8265 + 8265 8259 8258 + 8259 8265 8266 + 8266 8260 8259 + 8175 8263 8176 + 8267 8263 8175 + 8263 8267 8264 + 8268 8264 8267 + 8265 8264 8268 + 8268 8269 8265 + 8265 8269 8270 + 8270 8266 8265 + 8175 8180 8267 + 8267 8180 8185 + 8185 8271 8267 + 8267 8271 8268 + 8272 8268 8271 + 8268 8272 8273 + 8273 8269 8268 + 8269 8273 8274 + 8274 8270 8269 + 8275 8271 8185 + 8271 8275 8272 + 8276 8272 8275 + 8273 8272 8276 + 8276 8277 8273 + 8273 8277 8278 + 8278 8274 8273 + 8185 8279 8275 + 8275 8279 8280 + 8280 8281 8275 + 8275 8281 8276 + 8282 8276 8281 + 8276 8282 8283 + 8283 8277 8276 + 8279 8185 8184 + 8184 8284 8279 + 8280 8279 8284 + 8284 8285 8280 + 8286 8280 8285 + 8280 8286 8287 + 8287 8281 8280 + 8281 8287 8282 + 8288 8282 8287 + 8283 8282 8288 + 8284 8184 8183 + 8183 8289 8284 + 8284 8289 8290 + 8290 8285 8284 + 8291 8285 8290 + 8285 8291 8286 + 8292 8286 8291 + 8287 8286 8292 + 8292 8293 8287 + 8287 8293 8288 + 8289 8183 8189 + 8189 8294 8289 + 8290 8289 8294 + 8294 8295 8290 + 8296 8290 8295 + 8290 8296 8291 + 8291 8296 8297 + 8297 8298 8291 + 8291 8298 8292 + 8193 8294 8189 + 8294 8193 8299 + 8299 8295 8294 + 8299 8300 8295 + 8295 8300 8296 + 8296 8300 8301 + 8301 8297 8296 + 8302 8297 8301 + 8297 8302 8303 + 8303 8298 8297 + 8304 8299 8193 + 8300 8299 8304 + 8304 8305 8300 + 8300 8305 8301 + 8306 8301 8305 + 8307 8301 8306 + 8301 8307 8302 + 8197 8304 8193 + 8308 8304 8197 + 8308 8305 8304 + 8305 8308 8306 + 8309 8306 8308 + 8307 8306 8309 + 8309 8226 8307 + 8302 8307 8226 + 8225 8302 8226 + 8303 8302 8225 + 8197 8310 8308 + 8308 8310 8309 + 8311 8309 8310 + 8226 8309 8311 + 8226 8311 8208 + 8208 8311 8200 + 8310 8200 8311 + 8200 8310 8197 + 8312 8313 8314 + 8315 8314 8313 + 8315 8316 8314 + 8314 8316 8317 + 8317 8318 8314 + 8314 8318 8319 + 8319 8320 8314 + 8320 42 8314 + 8313 8321 8315 + 8315 8321 8322 + 8322 8323 8315 + 8323 8324 8315 + 8316 8315 8324 + 8325 8321 8313 + 8321 8325 8326 + 8326 8322 8321 + 8322 8326 8327 + 8327 8328 8322 + 8322 8328 8329 + 8329 8323 8322 + 8325 8313 8330 + 8330 8331 8325 + 8325 8331 8332 + 8332 8326 8325 + 8327 8326 8332 + 8332 8333 8327 + 8333 8334 8327 + 8334 8335 8327 + 8335 8328 8327 + 8328 8335 8329 + 8330 8336 8331 + 8331 8336 8332 + 8336 8337 8332 + 8333 8332 8337 + 8333 8337 8338 + 8338 8339 8333 + 8333 8339 8334 + 8338 8337 8336 + 8340 8338 8336 + 8341 8338 8340 + 8339 8338 8341 + 8342 8339 8341 + 8339 8342 8334 + 8342 8343 8334 + 8334 8343 8344 + 8344 8335 8334 + 8340 8336 8345 + 8346 8340 8345 + 8347 8340 8346 + 8340 8347 8341 + 8341 8347 8348 + 8348 8349 8341 + 8342 8341 8349 + 42 8345 8336 + 8350 8345 42 + 8345 8350 8346 + 8351 8346 8350 + 8351 8348 8346 + 8348 8347 8346 + 8336 8352 42 + 8353 8354 8355 + 8356 8354 8353 + 8357 8354 8356 + 8357 8358 8354 + 8354 8358 8359 + 8359 46 8354 + 8353 8360 8356 + 8356 8360 8361 + 8361 8362 8356 + 8357 8356 8362 + 8360 8353 8363 + 8363 8364 8360 + 8360 8364 8365 + 8365 8361 8360 + 8363 8353 8366 + 8366 8367 8363 + 8363 8367 8368 + 8369 8363 8368 + 8364 8363 8369 + 8369 8370 8364 + 8365 8364 8370 + 8366 8353 8371 + 8371 8372 8366 + 8373 8366 8372 + 8373 8367 8366 + 8367 8373 8374 + 8374 8368 8367 + 8375 8372 8371 + 8375 8376 8372 + 8372 8376 8373 + 8374 8373 8376 + 8371 8377 8375 + 8375 8377 8378 + 8376 8375 8378 + 8378 8379 8376 + 8376 8379 8374 + 8380 8377 8371 + 8377 8380 8381 + 8381 8382 8377 + 8377 8382 8378 + 8382 8383 8378 + 8384 8378 8383 + 8384 8379 8378 + 8380 8371 8385 + 8385 8386 8380 + 8380 8386 8387 + 8380 8387 8381 + 8388 8381 8387 + 8381 8388 8389 + 8389 8382 8381 + 8383 8382 8389 + 8390 8385 8371 + 8385 8390 8391 + 8392 8385 8391 + 8392 8386 8385 + 8386 8392 8393 + 8393 8387 8386 + 8387 8393 8394 + 8394 8395 8387 + 8387 8395 8388 + 8396 8391 8390 + 8391 8396 8397 + 8397 8398 8391 + 8392 8391 8398 + 8392 8398 8393 + 8398 8399 8393 + 8393 8399 8400 + 8394 8393 8400 + 8401 8396 8390 + 8396 8401 8402 + 8402 8397 8396 + 8402 8403 8397 + 8403 8404 8397 + 8398 8397 8404 + 8398 8404 8405 + 8405 8399 8398 + 46 8401 8390 + 46 8359 8401 + 8401 8359 8406 + 8406 8402 8401 + 8403 8402 8406 + 46 8390 8407 + 8408 8409 8410 + 8411 8408 8410 + 8408 8411 8412 + 8412 8413 8408 + 8408 8413 8414 + 8414 8415 8408 + 8408 8415 8416 + 8417 8411 8410 + 8412 8411 8417 + 8417 8418 8412 + 8419 8412 8418 + 8413 8412 8419 + 8420 8417 8410 + 8421 8417 8420 + 8418 8417 8421 + 8418 8421 8422 + 8422 8423 8418 + 8418 8423 8419 + 8410 8424 8420 + 8425 8420 8424 + 8425 8426 8420 + 8420 8426 8421 + 8422 8421 8426 + 8427 8424 8410 + 8424 8427 8428 + 8424 8428 8425 + 8425 8428 8429 + 8429 8430 8425 + 8426 8425 8430 + 8430 8431 8426 + 8426 8431 8422 + 8410 8432 8427 + 8427 8432 8433 + 8433 8434 8427 + 8428 8427 8434 + 8434 8435 8428 + 8428 8435 8429 + 8432 8410 8436 + 8432 8437 8415 + 8415 8438 8432 + 8432 8438 8433 + 8415 8414 8438 + 8438 8414 8439 + 8439 8440 8438 + 8438 8440 8433 + 8439 8414 8413 + 8441 8439 8413 + 8442 8439 8441 + 8442 8440 8439 + 8440 8442 8443 + 8443 8433 8440 + 8413 8444 8441 + 8444 8445 8441 + 8446 8441 8445 + 8446 8447 8441 + 8441 8447 8442 + 8442 8447 8448 + 8448 8443 8442 + 8419 8444 8413 + 8449 8444 8419 + 8444 8449 8450 + 8450 8445 8444 + 8451 8445 8450 + 8445 8451 8446 + 8446 8451 8452 + 8452 8453 8446 + 8447 8446 8453 + 8449 8419 8454 + 8454 8455 8449 + 8450 8449 8455 + 8455 8456 8450 + 8457 8450 8456 + 8450 8457 8451 + 8451 8457 8458 + 8458 8452 8451 + 8423 8454 8419 + 8459 8454 8423 + 8455 8454 8459 + 8459 8460 8455 + 8455 8460 8461 + 8461 8456 8455 + 8462 8456 8461 + 8456 8462 8457 + 8457 8462 8463 + 8463 8458 8457 + 8423 8464 8459 + 8465 8459 8464 + 8460 8459 8465 + 8465 8466 8460 + 8460 8466 8467 + 8467 8461 8460 + 8468 8461 8467 + 8461 8468 8462 + 8464 8423 8422 + 8422 8469 8464 + 8464 8469 8470 + 8470 8471 8464 + 8464 8471 8465 + 8471 8472 8465 + 8473 8465 8472 + 8466 8465 8473 + 8469 8422 8474 + 8469 8474 8475 + 8475 8470 8469 + 8470 8475 8476 + 8477 8470 8476 + 8471 8470 8477 + 8471 8477 8478 + 8478 8472 8471 + 8422 8431 8474 + 8479 8474 8431 + 8474 8479 8480 + 8480 8475 8474 + 8480 8476 8475 + 8476 8480 8481 + 8481 8482 8476 + 8477 8476 8482 + 8478 8477 8482 + 8431 8430 8479 + 8479 8430 8429 + 8429 8483 8479 + 8479 8483 8484 + 8484 8481 8479 + 8481 8480 8479 + 8485 8483 8429 + 8483 8485 8486 + 8486 8484 8483 + 8484 8486 8487 + 8487 8488 8484 + 8484 8488 8489 + 8489 8481 8484 + 8481 8489 8482 + 8429 8490 8485 + 8485 8490 8491 + 8491 8492 8485 + 8485 8492 8493 + 8493 8486 8485 + 8487 8486 8493 + 8490 8429 8435 + 8435 8494 8490 + 8491 8490 8494 + 8494 8495 8491 + 8496 8491 8495 + 8491 8496 8497 + 8497 8492 8491 + 8492 8497 8498 + 8498 8493 8492 + 8494 8435 8434 + 8434 8499 8494 + 8494 8499 8500 + 8500 8495 8494 + 8495 8500 8501 + 8501 8502 8495 + 8495 8502 8496 + 8499 8434 8433 + 8433 8503 8499 + 8500 8499 8503 + 8501 8500 8503 + 8503 8504 8501 + 8501 8504 8505 + 8505 8506 8501 + 8502 8501 8506 + 8506 8507 8502 + 8496 8502 8507 + 8504 8503 8433 + 8433 8443 8504 + 8504 8443 8448 + 8448 8505 8504 + 8505 8448 8508 + 8508 8509 8505 + 8505 8509 8510 + 8510 8506 8505 + 8507 8506 8510 + 8508 8448 8511 + 8511 8512 8508 + 8508 8512 8513 + 8513 8514 8508 + 8509 8508 8514 + 8514 8515 8509 + 8510 8509 8515 + 8447 8511 8448 + 8453 8511 8447 + 8511 8453 8516 + 8516 8512 8511 + 8512 8516 8517 + 8517 8513 8512 + 8513 8517 8518 + 8518 8519 8513 + 8513 8519 8520 + 8520 8514 8513 + 8515 8514 8520 + 8516 8453 8452 + 8452 8521 8516 + 8516 8521 8522 + 8522 8517 8516 + 8518 8517 8522 + 8522 8523 8518 + 8518 8523 8524 + 8524 8525 8518 + 8519 8518 8525 + 8526 8521 8452 + 8521 8526 8527 + 8527 8522 8521 + 8522 8527 8528 + 8528 8523 8522 + 8523 8528 8529 + 8529 8524 8523 + 8452 8458 8526 + 8526 8458 8463 + 8463 8530 8526 + 8526 8530 8531 + 8531 8527 8526 + 8528 8527 8531 + 8531 8532 8528 + 8528 8532 8533 + 8533 8529 8528 + 8534 8529 8533 + 8524 8529 8534 + 8535 8530 8463 + 8530 8535 8536 + 8536 8531 8530 + 8531 8536 8537 + 8537 8532 8531 + 8532 8537 8538 + 8538 8533 8532 + 8463 8539 8535 + 8535 8539 8540 + 8540 8541 8535 + 8535 8541 8542 + 8542 8536 8535 + 8537 8536 8542 + 8539 8463 8462 + 8462 8468 8539 + 8539 8468 8543 + 8543 8540 8539 + 8544 8540 8543 + 8540 8544 8545 + 8545 8541 8540 + 8541 8545 8546 + 8546 8542 8541 + 8468 8547 8543 + 8548 8543 8547 + 8543 8548 8549 + 8543 8549 8544 + 8544 8549 8550 + 8550 8551 8544 + 8545 8544 8551 + 8467 8547 8468 + 8547 8467 8552 + 8547 8552 8548 + 8548 8552 8473 + 8553 8548 8473 + 8549 8548 8553 + 8553 8554 8549 + 8549 8554 8550 + 8552 8467 8466 + 8466 8473 8552 + 8555 8556 8557 + 8558 8557 8556 + 8557 8558 8559 + 8559 8560 8557 + 8557 8560 8561 + 8561 8562 8557 + 8557 8562 8563 + 8556 8564 8558 + 8565 8566 8567 + 8566 8568 8567 + 8568 8569 8567 + 8567 8569 8559 + 8559 8558 8567 + 8570 8567 8558 + 8568 8566 8571 + 8572 8568 8571 + 8569 8568 8572 + 8572 8573 8569 + 8569 8573 8574 + 8574 8575 8569 + 8575 8559 8569 + 8560 8559 8575 + 8563 8571 8566 + 8576 8571 8563 + 8571 8576 8577 + 8577 8578 8571 + 8571 8578 8572 + 8566 8579 8563 + 8580 8579 8566 + 8581 8582 8583 + 8584 8582 8581 + 8584 8585 8582 + 8582 8585 8586 + 8586 8587 8582 + 8582 8587 8588 + 8581 8589 8584 + 8584 8589 8590 + 8591 8584 8590 + 8585 8584 8591 + 8591 8592 8585 + 8585 8592 8593 + 8593 8586 8585 + 8581 8594 8589 + 8589 8594 8595 + 8595 8590 8589 + 8594 8581 8596 + 8596 8597 8594 + 8594 8597 8598 + 8598 8595 8594 + 8599 8595 8598 + 8590 8595 8599 + 8597 8596 8600 + 8597 8600 8601 + 8601 8602 8597 + 8597 8602 8598 + 8602 8601 8603 + 8602 8603 8604 + 8604 8605 8602 + 8602 8605 8598 + 8606 8604 8603 + 8607 8604 8606 + 8607 8605 8604 + 8605 8607 8608 + 8608 8609 8605 + 8605 8609 8598 + 8606 8610 8607 + 8607 8610 8611 + 8608 8607 8611 + 8612 8608 8611 + 8613 8608 8612 + 8608 8613 8609 + 8609 8613 8614 + 8614 8598 8609 + 8610 8606 8615 + 8610 8615 8616 + 8616 8611 8610 + 8615 8606 8617 + 8617 8618 8615 + 8615 8618 8619 + 8619 8616 8615 + 8620 8616 8619 + 8616 8620 8621 + 8621 8611 8616 + 8622 8617 8606 + 8623 8617 8622 + 8617 8623 8624 + 8624 8618 8617 + 8618 8624 8625 + 8625 8626 8618 + 8626 8625 8627 + 8628 8622 8606 + 8629 8622 8628 + 8622 8629 8630 + 8622 8630 8623 + 8631 8623 8630 + 8624 8623 8631 + 8631 8632 8624 + 8625 8624 8632 + 8628 8633 8629 + 8629 8633 8634 + 8630 8629 8634 + 8634 8635 8630 + 8630 8635 8636 + 8636 8637 8630 + 8637 8631 8630 + 8638 8631 8637 + 8632 8631 8638 + 8633 8639 8634 + 8640 8634 8639 + 8639 58 8640 + 8619 8641 8620 + 8641 8642 8620 + 8642 8643 8620 + 8643 8644 8620 + 8621 8620 8644 + 8644 8645 8621 + 8621 8645 8646 + 8647 8621 8646 + 8611 8621 8647 + 8643 8648 8644 + 8648 8649 8644 + 8648 8650 8649 + 8650 8651 8649 + 8648 8643 8652 + 8652 8650 8648 + 8650 8652 8653 + 8653 8654 8650 + 8651 8650 8654 + 8652 8643 8655 + 8655 8656 8652 + 8652 8656 8657 + 8657 8653 8652 + 8658 8653 8657 + 8653 8658 8654 + 8659 8656 8655 + 8656 8659 8660 + 8660 8661 8656 + 8656 8661 8657 + 8662 8657 8661 + 8663 8657 8662 + 8657 8663 8658 + 8659 8655 8627 + 8627 8625 8659 + 8660 8659 8625 + 8664 8660 8625 + 8665 8660 8664 + 8660 8665 8661 + 8661 8665 8662 + 8666 8662 8665 + 8667 8662 8666 + 8662 8667 8663 + 8632 8664 8625 + 8668 8664 8632 + 8664 8668 8669 + 8664 8669 8665 + 8665 8669 8666 + 8670 8666 8669 + 8671 8666 8670 + 8666 8671 8667 + 8632 8638 8668 + 8668 8638 8672 + 8670 8668 8672 + 8669 8668 8670 + 8637 8672 8638 + 8672 8637 8673 + 8673 8674 8672 + 8672 8674 8675 + 8675 8676 8672 + 8672 8676 8670 + 8677 8670 8676 + 8670 8677 8671 + 8673 8637 8636 + 8636 8678 8673 + 8679 8673 8678 + 8674 8673 8679 + 8679 8680 8674 + 8674 8680 8681 + 8681 8675 8674 + 8682 8678 8636 + 8678 8682 8683 + 8683 8684 8678 + 8678 8684 8679 + 8685 8679 8684 + 8680 8679 8685 + 8636 8686 8682 + 8682 8686 8687 + 8687 8688 8682 + 8683 8682 8688 + 8688 8689 8683 + 8690 8683 8689 + 8684 8683 8690 + 8686 8636 8635 + 8635 8691 8686 + 8687 8686 8691 + 8691 8692 8687 + 8693 8687 8692 + 8687 8693 8694 + 8694 8688 8687 + 8688 8694 8695 + 8695 8689 8688 + 8691 8635 8634 + 8634 57 8691 + 8696 8697 8698 + 8699 8696 8698 + 8700 8696 8699 + 8700 8701 8696 + 8696 8701 61 + 61 8702 8696 + 8703 8699 8698 + 8704 8699 8703 + 8705 8699 8704 + 8699 8705 8700 + 8700 8705 8706 + 8707 8700 8706 + 8701 8700 8707 + 8698 8708 8703 + 8709 8703 8708 + 8710 8703 8709 + 8703 8710 8704 + 8711 8704 8710 + 8712 8704 8711 + 8704 8712 8705 + 8713 8708 8698 + 8708 8713 8714 + 8708 8714 8709 + 8715 8709 8714 + 8716 8709 8715 + 8709 8716 8710 + 8698 8717 8713 + 8718 8713 8717 + 8714 8713 8718 + 8718 8719 8714 + 8714 8719 8715 + 8717 8698 8720 + 8720 8721 8717 + 8717 8721 8722 + 8722 8723 8717 + 8717 8723 8718 + 8720 8698 8724 + 8724 8725 8720 + 8720 8725 8726 + 8726 8727 8720 + 8727 8728 8720 + 8728 8729 8720 + 8721 8720 8729 + 8730 8724 8698 + 8724 8731 8725 + 8725 8731 8732 + 8732 8726 8725 + 8726 8732 8733 + 8726 8733 8734 + 8734 8727 8726 + 8727 8734 8735 + 8727 8735 8736 + 8736 8728 8727 + 8733 8732 8737 + 8737 8738 8733 + 8734 8733 8738 + 8739 8734 8738 + 8735 8734 8739 + 8739 8740 8735 + 8735 8740 8741 + 8741 8736 8735 + 8737 8732 8742 + 8743 8744 8745 + 8744 8746 8745 + 8747 8745 8746 + 8747 8748 8745 + 8745 8748 8749 + 8749 8750 8745 + 8745 8750 8751 + 8751 48 8745 + 8752 8746 8744 + 8752 8753 8746 + 8746 8753 8747 + 8747 8753 8754 + 8754 8755 8747 + 8748 8747 8755 + 8755 8756 8748 + 8749 8748 8756 + 8744 8757 8752 + 8752 8757 8758 + 8758 8759 8752 + 8753 8752 8759 + 8759 8754 8753 + 8760 8754 8759 + 8754 8760 8761 + 8761 8755 8754 + 8762 8757 8744 + 8757 8762 8763 + 8763 8758 8757 + 8764 8758 8763 + 8759 8758 8764 + 8765 8759 8764 + 8759 8765 8760 + 8762 8744 8766 + 8766 8767 8762 + 8762 8767 8768 + 8768 8769 8762 + 8769 8763 8762 + 8764 8763 8769 + 8769 8770 8764 + 8764 8770 8771 + 8765 8764 8771 + 8771 8772 8765 + 8760 8765 8772 + 8767 8773 8768 + 8773 8774 8768 + 8775 8768 8774 + 8768 8775 8776 + 8776 8769 8768 + 8770 8769 8776 + 8770 8776 8777 + 8777 8771 8770 + 8773 8767 8778 + 8773 8778 48 + 48 8779 8773 + 8774 8773 8779 + 8779 8780 8774 + 8775 8774 8780 + 8780 8781 8775 + 8775 8781 8782 + 8776 8775 8782 + 8782 8777 8776 + 8783 8777 8782 + 8771 8777 8783 + 8784 8779 48 + 8779 8784 8780 + 8784 8785 8780 + 8781 8780 8785 + 8785 8786 8781 + 8781 8786 8787 + 8787 8782 8781 + 8788 8782 8787 + 8782 8788 8783 + 8784 48 8751 + 8751 8789 8784 + 8784 8789 8790 + 8790 8791 8784 + 8791 8785 8784 + 8786 8785 8791 + 8791 8792 8786 + 8787 8786 8792 + 8793 8787 8792 + 8787 8793 8788 + 8794 8789 8751 + 8789 8794 8795 + 8795 8796 8789 + 8789 8796 8790 + 8794 8751 8797 + 8797 8798 8794 + 8794 8798 8799 + 8795 8794 8799 + 8800 8797 8751 + 8801 8797 8800 + 8801 8798 8797 + 8798 8801 8802 + 8802 8799 8798 + 8803 8800 8751 + 8804 8800 8803 + 8804 8805 8800 + 8800 8805 8801 + 8801 8805 8806 + 8806 8807 8801 + 8807 8802 8801 + 8808 8803 8751 + 8809 8803 8808 + 8809 8810 8803 + 8803 8810 8804 + 8804 8810 8811 + 8811 8812 8804 + 8805 8804 8812 + 8812 8806 8805 + 8750 8808 8751 + 8813 8808 8750 + 8813 8814 8808 + 8808 8814 8809 + 8809 8814 8815 + 8815 8816 8809 + 8810 8809 8816 + 8816 8811 8810 + 8750 8817 8813 + 8818 8813 8817 + 8814 8813 8818 + 8818 8815 8814 + 8819 8815 8818 + 8815 8819 8820 + 8820 8816 8815 + 8816 8820 8821 + 8821 8811 8816 + 8749 8817 8750 + 8817 8749 8822 + 8822 8823 8817 + 8817 8823 8824 + 8824 8825 8817 + 8825 8818 8817 + 8826 8818 8825 + 8818 8826 8819 + 8822 8749 8756 + 8827 8822 8756 + 8828 8822 8827 + 8823 8822 8828 + 8823 8828 8829 + 8829 8830 8823 + 8823 8830 8824 + 8756 8831 8827 + 8832 8827 8831 + 8827 8832 8833 + 8827 8833 8828 + 8834 8831 8756 + 8831 8834 8835 + 8835 8836 8831 + 8831 8836 8832 + 8837 8832 8836 + 8833 8832 8837 + 8756 8838 8834 + 8834 8838 8839 + 8839 8840 8834 + 8835 8834 8840 + 8840 8841 8835 + 8842 8835 8841 + 8836 8835 8842 + 8838 8756 8755 + 8755 8761 8838 + 8838 8761 8843 + 8843 8839 8838 + 8839 8843 8844 + 8844 8845 8839 + 8839 8845 8846 + 8846 8840 8839 + 8840 8846 8841 + 8847 8843 8761 + 8844 8843 8847 + 8847 8848 8844 + 8844 8848 8849 + 8850 8844 8849 + 8845 8844 8850 + 8761 8760 8847 + 8772 8847 8760 + 8772 8848 8847 + 8848 8772 8771 + 8771 8849 8848 + 8783 8849 8771 + 8849 8783 8851 + 8851 8852 8849 + 8849 8852 8850 + 8853 8850 8852 + 8850 8853 8854 + 8854 8855 8850 + 8850 8855 8845 + 8851 8783 8856 + 8856 8857 8851 + 8858 8851 8857 + 8851 8858 8859 + 8859 8852 8851 + 8852 8859 8853 + 8783 8788 8856 + 8860 8856 8788 + 8861 8856 8860 + 8856 8861 8862 + 8862 8857 8856 + 8863 8857 8862 + 8857 8863 8858 + 8788 8793 8860 + 8860 8793 8864 + 8864 8865 8860 + 8866 8860 8865 + 8860 8866 8861 + 8792 8864 8793 + 8864 8792 8791 + 8864 8791 8790 + 8790 8865 8864 + 8865 8790 8867 + 8867 8868 8865 + 8865 8868 8866 + 8869 8866 8868 + 8861 8866 8869 + 8869 8870 8861 + 8861 8870 8871 + 8862 8861 8871 + 8867 8790 8872 + 8872 8873 8867 + 8874 8867 8873 + 8868 8867 8874 + 8874 8875 8868 + 8868 8875 8869 + 8796 8872 8790 + 8876 8872 8796 + 8873 8872 8876 + 8873 8876 8877 + 8877 8878 8873 + 8873 8878 8879 + 8879 8874 8873 + 8796 8880 8876 + 8876 8880 8881 + 8877 8876 8881 + 8882 8877 8881 + 8883 8877 8882 + 8883 8878 8877 + 8878 8883 8884 + 8884 8879 8878 + 8796 8795 8880 + 8880 8795 8885 + 8885 8881 8880 + 8885 8886 8881 + 8881 8886 8887 + 8887 8888 8881 + 8881 8888 8889 + 8889 8882 8881 + 8890 8885 8795 + 8886 8885 8890 + 8890 8891 8886 + 8887 8886 8891 + 8891 8892 8887 + 8892 8893 8887 + 8894 8887 8893 + 8887 8894 8888 + 8895 8890 8795 + 8896 8890 8895 + 8896 8891 8890 + 8891 8896 8897 + 8897 8892 8891 + 8898 8892 8897 + 8892 8898 8899 + 8899 8893 8892 + 8799 8895 8795 + 8900 8895 8799 + 8901 8895 8900 + 8895 8901 8896 + 8896 8901 8902 + 8902 8897 8896 + 8898 8897 8902 + 8902 8903 8898 + 8899 8898 8903 + 8799 8904 8900 + 8905 8900 8904 + 8901 8900 8905 + 8905 8906 8901 + 8901 8906 8902 + 8907 8902 8906 + 8903 8902 8907 + 8904 8799 8802 + 8904 8802 8807 + 8807 8908 8904 + 8904 8908 8909 + 8909 8905 8904 + 8910 8905 8909 + 8910 8906 8905 + 8906 8910 8907 + 8911 8908 8807 + 8908 8911 8912 + 8912 8909 8908 + 8912 8913 8909 + 8909 8913 8910 + 8910 8913 8914 + 8907 8910 8914 + 8911 8807 8806 + 8806 8915 8911 + 8911 8915 8916 + 8916 8912 8911 + 8913 8912 8916 + 8916 8914 8913 + 8915 8806 8812 + 8812 8917 8915 + 8915 8917 8918 + 8918 8919 8915 + 8915 8919 8916 + 8920 8916 8919 + 8920 8914 8916 + 8917 8812 8811 + 8811 8821 8917 + 8918 8917 8821 + 8821 8921 8918 + 8922 8918 8921 + 8922 8919 8918 + 8919 8922 8920 + 8920 8922 8923 + 8923 8924 8920 + 8924 8925 8920 + 8914 8920 8925 + 8926 8921 8821 + 8927 8921 8926 + 8921 8927 8922 + 8922 8927 8923 + 8928 8923 8927 + 8929 8923 8928 + 8923 8929 8930 + 8930 8924 8923 + 8821 8820 8926 + 8926 8820 8819 + 8819 8928 8926 + 8927 8926 8928 + 8931 8928 8819 + 8928 8931 8929 + 8929 8931 8932 + 8932 8933 8929 + 8929 8933 8934 + 8934 8930 8929 + 8819 8826 8931 + 8931 8826 8935 + 8935 8932 8931 + 8935 8936 8932 + 8936 8937 8932 + 8933 8932 8937 + 8933 8937 8938 + 8938 8939 8933 + 8933 8939 8934 + 8825 8935 8826 + 8935 8825 8936 + 8936 8825 8940 + 8936 8940 8941 + 8937 8936 8941 + 8941 8938 8937 + 8942 8938 8941 + 8939 8938 8942 + 8939 8942 8943 + 8943 8944 8939 + 8939 8944 8934 + 8825 8824 8940 + 8940 8824 8945 + 8940 8945 8946 + 8946 8941 8940 + 8941 8946 8947 + 8947 8948 8941 + 8941 8948 8942 + 8942 8948 8949 + 8949 8943 8942 + 8945 8824 8830 + 8830 8950 8945 + 8946 8945 8950 + 8950 8951 8946 + 8947 8946 8951 + 8951 8952 8947 + 8953 8947 8952 + 8948 8947 8953 + 8953 8949 8948 + 8950 8830 8829 + 8950 8829 8954 + 8954 8951 8950 + 8952 8951 8954 + 8952 8954 8955 + 8955 8956 8952 + 8952 8956 8953 + 8957 8953 8956 + 8949 8953 8957 + 8954 8829 8828 + 8955 8954 8828 + 8958 8955 8828 + 8959 8955 8958 + 8959 8956 8955 + 8956 8959 8957 + 8960 8957 8959 + 8961 8957 8960 + 8957 8961 8949 + 8949 8961 8962 + 8962 8943 8949 + 8828 8833 8958 + 8833 8963 8958 + 8963 8964 8958 + 8965 8958 8964 + 8965 8966 8958 + 8958 8966 8959 + 8959 8966 8960 + 8837 8963 8833 + 8837 8967 8963 + 8963 8967 8968 + 8968 8964 8963 + 8968 8969 8964 + 8964 8969 8965 + 8965 8969 8970 + 8971 8965 8970 + 8966 8965 8971 + 8967 8837 8972 + 8972 8973 8967 + 8968 8967 8973 + 8973 8974 8968 + 8969 8968 8974 + 8974 8970 8969 + 8836 8972 8837 + 8842 8972 8836 + 8972 8842 8975 + 8975 8973 8972 + 8973 8975 8976 + 8976 8974 8973 + 8974 8976 8977 + 8977 8970 8974 + 8975 8842 8978 + 8978 8979 8975 + 8976 8975 8979 + 8979 8980 8976 + 8977 8976 8980 + 8980 8981 8977 + 8982 8977 8981 + 8970 8977 8982 + 8841 8978 8842 + 8983 8978 8841 + 8979 8978 8983 + 8983 8984 8979 + 8979 8984 8985 + 8985 8980 8979 + 8981 8980 8985 + 8841 8846 8983 + 8983 8846 8845 + 8986 8983 8845 + 8984 8983 8986 + 8986 8987 8984 + 8984 8987 8988 + 8988 8985 8984 + 8989 8985 8988 + 8985 8989 8981 + 8845 8855 8986 + 8990 8986 8855 + 8986 8990 8991 + 8991 8987 8986 + 8987 8991 8992 + 8992 8988 8987 + 8988 8992 8993 + 8993 8994 8988 + 8988 8994 8989 + 8855 8854 8990 + 8990 8854 8995 + 8995 8996 8990 + 8991 8990 8996 + 8996 8997 8991 + 8992 8991 8997 + 8997 8998 8992 + 8993 8992 8998 + 8999 8995 8854 + 9000 8995 8999 + 8995 9000 9001 + 9001 8996 8995 + 8996 9001 9002 + 9002 8997 8996 + 8997 9002 9003 + 9003 8998 8997 + 8854 8853 8999 + 9004 8999 8853 + 9005 8999 9004 + 8999 9005 9000 + 9000 9005 9006 + 9006 9007 9000 + 9001 9000 9007 + 9007 9008 9001 + 9002 9001 9008 + 8853 8859 9004 + 9009 9004 8859 + 9010 9004 9009 + 9004 9010 9005 + 9005 9010 9011 + 9011 9006 9005 + 9012 9006 9011 + 9006 9012 9013 + 9013 9007 9006 + 8859 8858 9009 + 9014 9009 8858 + 9015 9009 9014 + 9009 9015 9010 + 9010 9015 9016 + 9016 9011 9010 + 9017 9011 9016 + 9011 9017 9012 + 8858 8863 9014 + 9018 9014 8863 + 9019 9014 9018 + 9014 9019 9015 + 9015 9019 9020 + 9020 9016 9015 + 9021 9016 9020 + 9016 9021 9017 + 8863 9022 9018 + 9023 9018 9022 + 9024 9018 9023 + 9018 9024 9019 + 9019 9024 9025 + 9025 9020 9019 + 9026 9020 9025 + 9020 9026 9021 + 8862 9022 8863 + 9022 8862 9027 + 9027 9028 9022 + 9022 9028 9023 + 9029 9023 9028 + 9030 9023 9029 + 9023 9030 9024 + 9024 9030 9031 + 9031 9025 9024 + 8871 9027 8862 + 9032 9027 8871 + 9028 9027 9032 + 9032 9033 9028 + 9028 9033 9029 + 9034 9029 9033 + 9035 9029 9034 + 9029 9035 9030 + 9030 9035 9036 + 9036 9031 9030 + 8871 9037 9032 + 9032 9037 9038 + 9038 9039 9032 + 9033 9032 9039 + 9039 9040 9033 + 9033 9040 9034 + 9037 8871 9041 + 9041 9042 9037 + 9037 9042 9043 + 9043 9044 9037 + 9037 9044 9038 + 9041 8871 8870 + 8870 9045 9041 + 9041 9045 9046 + 9042 9041 9046 + 9046 9047 9042 + 9043 9042 9047 + 9047 9048 9043 + 9049 9043 9048 + 9049 9044 9043 + 9045 8870 8869 + 9050 9045 8869 + 9045 9050 9046 + 9050 9051 9046 + 9052 9046 9051 + 9046 9052 9053 + 9053 9047 9046 + 9047 9053 9054 + 9054 9048 9047 + 8875 9050 8869 + 8875 8874 9050 + 9050 8874 9051 + 8874 8879 9051 + 8879 8884 9051 + 9051 8884 9052 + 9052 8884 9055 + 9053 9052 9055 + 9055 9056 9053 + 9054 9053 9056 + 8884 8883 9055 + 8882 9055 8883 + 9056 9055 8882 + 9056 8882 8889 + 8889 9057 9056 + 9056 9057 9054 + 9057 9058 9054 + 9058 9059 9054 + 9060 9054 9059 + 9048 9054 9060 + 9060 9061 9048 + 9048 9061 9049 + 9062 9057 8889 + 9057 9062 9063 + 9063 9058 9057 + 9058 9063 9064 + 9058 9064 9065 + 9065 9059 9058 + 9066 9059 9065 + 9059 9066 9060 + 9062 8889 9067 + 9067 9068 9062 + 9062 9068 9069 + 9063 9062 9069 + 9069 9070 9063 + 9064 9063 9070 + 9071 9067 8889 + 9072 9067 9071 + 9072 9068 9067 + 9068 9072 9073 + 9073 9069 9068 + 9074 9069 9073 + 9069 9074 9075 + 9075 9070 9069 + 8888 9071 8889 + 9076 9071 8888 + 9076 9077 9071 + 9071 9077 9072 + 9073 9072 9077 + 9077 9078 9073 + 9078 9079 9073 + 9080 9073 9079 + 9073 9080 9074 + 8888 8894 9076 + 9081 9076 8894 + 9077 9076 9081 + 9081 9078 9077 + 9082 9078 9081 + 9078 9082 9083 + 9083 9079 9078 + 9083 9084 9079 + 9079 9084 9080 + 9085 9081 8894 + 9081 9085 8899 + 9086 9081 8899 + 9081 9086 9082 + 8893 9085 8894 + 8899 9085 8893 + 9086 8899 8903 + 9087 9086 8903 + 9082 9086 9087 + 9087 9088 9082 + 9082 9088 9089 + 9089 9083 9082 + 9084 9083 9089 + 9089 9090 9084 + 9080 9084 9090 + 9091 9087 8903 + 9091 9088 9087 + 9088 9091 9092 + 9092 9089 9088 + 9090 9089 9092 + 9092 9093 9090 + 9090 9093 9094 + 9094 9095 9090 + 9090 9095 9080 + 8903 9096 9091 + 9091 9096 9097 + 9092 9091 9097 + 9097 9098 9092 + 9093 9092 9098 + 9098 9099 9093 + 9093 9099 9100 + 9100 9094 9093 + 8907 9096 8903 + 9096 8907 9101 + 9101 9097 9096 + 9102 9097 9101 + 9097 9102 9103 + 9103 9098 9097 + 9099 9098 9103 + 9099 9103 9104 + 9104 9100 9099 + 9101 8907 8914 + 8914 9105 9101 + 9106 9101 9105 + 9101 9106 9102 + 9102 9106 9107 + 9107 9108 9102 + 9103 9102 9108 + 9104 9103 9108 + 8925 9105 8914 + 9109 9105 8925 + 9105 9109 9106 + 9106 9109 9110 + 9110 9107 9106 + 9111 9107 9110 + 9108 9107 9111 + 8925 9112 9109 + 9109 9112 9113 + 9113 9110 9109 + 9110 9113 9114 + 9114 9115 9110 + 9110 9115 9111 + 9112 8925 8924 + 8924 9116 9112 + 9112 9116 9117 + 9113 9112 9117 + 9117 9118 9113 + 9114 9113 9118 + 9118 9119 9114 + 9120 9114 9119 + 9115 9114 9120 + 9116 8924 8930 + 8930 9121 9116 + 9116 9121 9122 + 9122 9117 9116 + 9117 9122 9123 + 9123 9124 9117 + 9117 9124 9125 + 9125 9118 9117 + 9118 9125 9119 + 9121 8930 8934 + 8934 9126 9121 + 9121 9126 9127 + 9127 9122 9121 + 9123 9122 9127 + 9127 9128 9123 + 9129 9123 9128 + 9124 9123 9129 + 9126 8934 9130 + 9130 9131 9126 + 9126 9131 9132 + 9132 9127 9126 + 9127 9132 9133 + 9133 9128 9127 + 9130 8934 8944 + 8944 9134 9130 + 9130 9134 9135 + 9135 9136 9130 + 9131 9130 9136 + 9136 9137 9131 + 9131 9137 9138 + 9138 9132 9131 + 9133 9132 9138 + 9134 8944 8943 + 8943 8962 9134 + 9134 8962 9139 + 9139 9140 9134 + 9134 9140 9135 + 9141 9135 9140 + 9142 9135 9141 + 9135 9142 9143 + 9143 9136 9135 + 9137 9136 9143 + 9144 9139 8962 + 9145 9139 9144 + 9140 9139 9145 + 9140 9145 9141 + 9141 9145 9146 + 9146 9147 9141 + 9148 9141 9147 + 9141 9148 9142 + 8962 8961 9144 + 8960 9144 8961 + 9144 8960 9149 + 9149 9146 9144 + 9144 9146 9145 + 9149 8960 9150 + 9150 9151 9149 + 9152 9149 9151 + 9146 9149 9152 + 9152 9147 9146 + 9147 9152 9153 + 9153 9154 9147 + 9147 9154 9148 + 9155 9150 8960 + 9156 9150 9155 + 9151 9150 9156 + 9151 9156 9157 + 9157 9158 9151 + 9151 9158 9152 + 9153 9152 9158 + 8966 9155 8960 + 8971 9155 8966 + 9155 8971 9159 + 9155 9159 9156 + 9157 9156 9159 + 9160 9157 9159 + 9161 9157 9160 + 9161 9158 9157 + 9158 9161 9153 + 9162 9153 9161 + 9154 9153 9162 + 9159 8971 9163 + 9163 9164 9159 + 9159 9164 9165 + 9165 9166 9159 + 9166 9167 9159 + 9167 9160 9159 + 9163 8971 8970 + 8970 9168 9163 + 9169 9163 9168 + 9163 9169 9164 + 9164 9169 9170 + 9170 9165 9164 + 9170 9171 9165 + 9165 9171 9172 + 9172 9166 9165 + 8982 9168 8970 + 9173 9168 8982 + 9168 9173 9169 + 9170 9169 9173 + 9173 9174 9170 + 9171 9170 9174 + 9174 9175 9171 + 9172 9171 9175 + 9176 9172 9175 + 9177 9172 9176 + 9172 9177 9166 + 8982 9178 9173 + 9173 9178 9179 + 9179 9174 9173 + 9174 9179 9180 + 9180 9175 9174 + 9178 8982 9181 + 9181 9182 9178 + 9179 9178 9182 + 9182 9183 9179 + 9180 9179 9183 + 9183 9184 9180 + 9185 9180 9184 + 9175 9180 9185 + 8981 9181 8982 + 9186 9181 8981 + 9181 9186 9182 + 9182 9186 9187 + 9187 9183 9182 + 9184 9183 9187 + 9187 9188 9184 + 9184 9188 9189 + 9189 9190 9184 + 9184 9190 9185 + 8981 8989 9186 + 9187 9186 8989 + 9191 9187 8989 + 9188 9187 9191 + 9191 9192 9188 + 9188 9192 9193 + 9193 9189 9188 + 9194 9189 9193 + 9189 9194 9195 + 9195 9190 9189 + 8989 8994 9191 + 9196 9191 8994 + 9191 9196 9197 + 9197 9192 9191 + 9192 9197 9198 + 9198 9193 9192 + 9193 9198 9199 + 9199 9200 9193 + 9193 9200 9194 + 8994 8993 9196 + 9196 8993 9201 + 9201 9202 9196 + 9197 9196 9202 + 9202 9203 9197 + 9198 9197 9203 + 9203 9204 9198 + 9199 9198 9204 + 8998 9201 8993 + 9205 9201 8998 + 9201 9205 9206 + 9206 9202 9201 + 9202 9206 9207 + 9207 9203 9202 + 9203 9207 9208 + 9208 9204 9203 + 8998 9003 9205 + 9205 9003 9209 + 9209 9210 9205 + 9206 9205 9210 + 9210 9211 9206 + 9207 9206 9211 + 9211 9212 9207 + 9208 9207 9212 + 9213 9209 9003 + 9214 9209 9213 + 9209 9214 9215 + 9215 9210 9209 + 9210 9215 9216 + 9216 9211 9210 + 9211 9216 9217 + 9217 9212 9211 + 9003 9002 9213 + 9008 9213 9002 + 9218 9213 9008 + 9213 9218 9214 + 9214 9218 9219 + 9219 9220 9214 + 9215 9214 9220 + 9220 9221 9215 + 9216 9215 9221 + 9221 9222 9216 + 9217 9216 9222 + 9008 9223 9218 + 9218 9223 9224 + 9224 9219 9218 + 9219 9224 9225 + 9225 9226 9219 + 9219 9226 9227 + 9227 9220 9219 + 9221 9220 9227 + 9223 9008 9007 + 9007 9013 9223 + 9223 9013 9228 + 9228 9224 9223 + 9225 9224 9228 + 9228 9229 9225 + 9230 9225 9229 + 9226 9225 9230 + 9230 9231 9226 + 9226 9231 9232 + 9232 9227 9226 + 9233 9228 9013 + 9228 9233 9234 + 9234 9229 9228 + 9229 9234 9235 + 9235 9236 9229 + 9229 9236 9230 + 9013 9012 9233 + 9237 9233 9012 + 9234 9233 9237 + 9237 9238 9234 + 9235 9234 9238 + 9238 9239 9235 + 9240 9235 9239 + 9235 9240 9241 + 9241 9236 9235 + 9012 9017 9237 + 9242 9237 9017 + 9237 9242 9243 + 9243 9238 9237 + 9238 9243 9244 + 9244 9239 9238 + 9245 9239 9244 + 9239 9245 9240 + 9017 9021 9242 + 9246 9242 9021 + 9243 9242 9246 + 9246 9247 9243 + 9244 9243 9247 + 9247 9248 9244 + 9249 9244 9248 + 9244 9249 9245 + 9021 9026 9246 + 9250 9246 9026 + 9246 9250 9251 + 9251 9247 9246 + 9247 9251 9252 + 9252 9248 9247 + 9253 9248 9252 + 9248 9253 9249 + 9026 9254 9250 + 9255 9250 9254 + 9251 9250 9255 + 9255 9256 9251 + 9252 9251 9256 + 9256 9257 9252 + 9258 9252 9257 + 9252 9258 9253 + 9025 9254 9026 + 9254 9025 9031 + 9031 9259 9254 + 9254 9259 9255 + 9260 9255 9259 + 9255 9260 9261 + 9261 9256 9255 + 9256 9261 9262 + 9262 9257 9256 + 9263 9257 9262 + 9257 9263 9258 + 9259 9031 9036 + 9036 9264 9259 + 9259 9264 9260 + 9265 9260 9264 + 9261 9260 9265 + 9265 9266 9261 + 9262 9261 9266 + 9266 9267 9262 + 9268 9262 9267 + 9262 9268 9263 + 9264 9036 9269 + 9269 9270 9264 + 9264 9270 9265 + 9271 9265 9270 + 9265 9271 9272 + 9272 9266 9265 + 9266 9272 9273 + 9273 9267 9266 + 9269 9036 9035 + 9035 9274 9269 + 9275 9269 9274 + 9270 9269 9275 + 9275 9276 9270 + 9270 9276 9271 + 9277 9271 9276 + 9272 9271 9277 + 9277 9278 9272 + 9273 9272 9278 + 9034 9274 9035 + 9274 9034 9279 + 9279 9280 9274 + 9274 9280 9275 + 9281 9275 9280 + 9276 9275 9281 + 9281 9282 9276 + 9276 9282 9277 + 9279 9034 9040 + 9040 9283 9279 + 9284 9279 9283 + 9280 9279 9284 + 9284 9285 9280 + 9280 9285 9281 + 9286 9281 9285 + 9282 9281 9286 + 9287 9283 9040 + 9283 9287 9288 + 9288 9289 9283 + 9283 9289 9284 + 9290 9284 9289 + 9285 9284 9290 + 9290 9291 9285 + 9285 9291 9286 + 9040 9039 9287 + 9287 9039 9038 + 9038 9292 9287 + 9287 9292 9293 + 9293 9288 9287 + 9294 9288 9293 + 9289 9288 9294 + 9294 9295 9289 + 9289 9295 9290 + 9296 9290 9295 + 9291 9290 9296 + 9292 9038 9297 + 9297 9298 9292 + 9292 9298 9299 + 9299 9300 9292 + 9292 9300 9293 + 9297 9038 9044 + 9044 9049 9297 + 9297 9049 9061 + 9061 9301 9297 + 9298 9297 9301 + 9301 9302 9298 + 9299 9298 9302 + 9302 9303 9299 + 9304 9299 9303 + 9304 9300 9299 + 9305 9301 9061 + 9301 9305 9306 + 9306 9302 9301 + 9302 9306 9307 + 9307 9303 9302 + 9303 9307 9308 + 9308 9309 9303 + 9303 9309 9304 + 9061 9060 9305 + 9305 9060 9066 + 9066 9310 9305 + 9306 9305 9310 + 9310 9311 9306 + 9306 9311 9312 + 9307 9306 9312 + 9312 9313 9307 + 9313 9308 9307 + 9314 9310 9066 + 9311 9310 9314 + 9311 9314 9315 + 9315 9312 9311 + 9066 9065 9314 + 9314 9065 9064 + 9315 9314 9064 + 9316 9315 9064 + 9313 9315 9316 + 9313 9317 9315 + 9064 9318 9316 + 9318 9319 9316 + 9319 9320 9316 + 9320 9321 9316 + 9322 9316 9321 + 9322 9323 9316 + 9316 9323 9313 + 9070 9318 9064 + 9070 9075 9318 + 9318 9075 9324 + 9324 9319 9318 + 9324 9325 9319 + 9319 9325 9326 + 9326 9320 9319 + 9326 9327 9320 + 9320 9327 9328 + 9328 9321 9320 + 9324 9075 9074 + 9329 9324 9074 + 9325 9324 9329 + 9329 9330 9325 + 9326 9325 9330 + 9330 9331 9326 + 9327 9326 9331 + 9331 9332 9327 + 9328 9327 9332 + 9074 9333 9329 + 9334 9329 9333 + 9329 9334 9335 + 9335 9330 9329 + 9330 9335 9336 + 9336 9331 9330 + 9331 9336 9337 + 9337 9332 9331 + 9338 9333 9074 + 9339 9333 9338 + 9333 9339 9334 + 9340 9334 9339 + 9335 9334 9340 + 9340 9341 9335 + 9335 9341 9342 + 9342 9336 9335 + 9337 9336 9342 + 9074 9080 9338 + 9095 9338 9080 + 9339 9338 9095 + 9095 9343 9339 + 9339 9343 9340 + 9343 9344 9340 + 9345 9340 9344 + 9341 9340 9345 + 9343 9095 9094 + 9094 9346 9343 + 9343 9346 9347 + 9347 9344 9343 + 9348 9344 9347 + 9344 9348 9345 + 9346 9094 9100 + 9100 9349 9346 + 9346 9349 9350 + 9350 9347 9346 + 9348 9347 9350 + 9350 9351 9348 + 9345 9348 9351 + 9351 9352 9345 + 9353 9345 9352 + 9345 9353 9341 + 9354 9349 9100 + 9349 9354 9355 + 9355 9350 9349 + 9350 9355 9351 + 9351 9355 9356 + 9356 9352 9351 + 9357 9352 9356 + 9352 9357 9353 + 9358 9353 9357 + 9341 9353 9358 + 9100 9104 9354 + 9354 9104 9359 + 9359 9360 9354 + 9355 9354 9360 + 9360 9361 9355 + 9361 9356 9355 + 9362 9356 9361 + 9356 9362 9357 + 9108 9359 9104 + 9363 9359 9108 + 9360 9359 9363 + 9363 9364 9360 + 9360 9364 9365 + 9365 9361 9360 + 9366 9361 9365 + 9361 9366 9362 + 9108 9367 9363 + 9368 9363 9367 + 9364 9363 9368 + 9368 9369 9364 + 9364 9369 9370 + 9370 9371 9364 + 9371 9365 9364 + 9111 9367 9108 + 9367 9111 9372 + 9372 9373 9367 + 9367 9373 9368 + 9374 9368 9373 + 9369 9368 9374 + 9369 9374 9375 + 9375 9370 9369 + 9372 9111 9115 + 9115 9376 9372 + 9377 9372 9376 + 9372 9377 9378 + 9378 9373 9372 + 9373 9378 9374 + 9374 9378 9379 + 9375 9374 9379 + 9120 9376 9115 + 9380 9376 9120 + 9376 9380 9377 + 9377 9380 9381 + 9381 9382 9377 + 9378 9377 9382 + 9382 9379 9378 + 9120 9383 9380 + 9380 9383 9384 + 9384 9381 9380 + 9385 9381 9384 + 9381 9385 9386 + 9386 9382 9381 + 9382 9386 9387 + 9387 9379 9382 + 9383 9120 9388 + 9388 9389 9383 + 9383 9389 9390 + 9390 9384 9383 + 9391 9384 9390 + 9384 9391 9385 + 9119 9388 9120 + 9392 9388 9119 + 9389 9388 9392 + 9392 9393 9389 + 9389 9393 9394 + 9394 9390 9389 + 9395 9390 9394 + 9390 9395 9391 + 9119 9125 9392 + 9392 9125 9124 + 9124 9396 9392 + 9393 9392 9396 + 9396 9397 9393 + 9393 9397 9398 + 9398 9394 9393 + 9399 9394 9398 + 9394 9399 9395 + 9129 9396 9124 + 9397 9396 9129 + 9129 9400 9397 + 9397 9400 9401 + 9401 9398 9397 + 9402 9398 9401 + 9398 9402 9399 + 9399 9402 9403 + 9403 9404 9399 + 9395 9399 9404 + 9400 9129 9405 + 9405 9406 9400 + 9400 9406 9407 + 9407 9401 9400 + 9408 9401 9407 + 9401 9408 9402 + 9402 9408 9409 + 9409 9403 9402 + 9128 9405 9129 + 9410 9405 9128 + 9406 9405 9410 + 9410 9411 9406 + 9406 9411 9412 + 9412 9407 9406 + 9413 9407 9412 + 9407 9413 9408 + 9408 9413 9414 + 9414 9409 9408 + 9128 9133 9410 + 9410 9133 9415 + 9415 9416 9410 + 9411 9410 9416 + 9416 9417 9411 + 9411 9417 9418 + 9418 9412 9411 + 9419 9412 9418 + 9412 9419 9413 + 9138 9415 9133 + 9138 9420 9415 + 9415 9420 9421 + 9421 9416 9415 + 9417 9416 9421 + 9421 9422 9417 + 9417 9422 9423 + 9423 9418 9417 + 9424 9418 9423 + 9418 9424 9419 + 9420 9138 9425 + 9425 9426 9420 + 9420 9426 9427 + 9427 9421 9420 + 9422 9421 9427 + 9427 9428 9422 + 9422 9428 9429 + 9429 9423 9422 + 9137 9425 9138 + 9430 9425 9137 + 9426 9425 9430 + 9430 9431 9426 + 9426 9431 9432 + 9432 9427 9426 + 9428 9427 9432 + 9432 9433 9428 + 9428 9433 9434 + 9434 9429 9428 + 9137 9435 9430 + 9436 9430 9435 + 9431 9430 9436 + 9436 9437 9431 + 9432 9431 9437 + 9437 9438 9432 + 9433 9432 9438 + 9143 9435 9137 + 9435 9143 9439 + 9439 9440 9435 + 9435 9440 9436 + 9441 9436 9440 + 9436 9441 9442 + 9442 9437 9436 + 9437 9442 9443 + 9443 9438 9437 + 9439 9143 9444 + 9444 9445 9439 + 9445 9446 9439 + 9447 9439 9446 + 9440 9439 9447 + 9447 9448 9440 + 9440 9448 9441 + 9143 9142 9444 + 9449 9444 9142 + 9444 9449 9450 + 9444 9450 9451 + 9451 9445 9444 + 9445 9451 9452 + 9445 9452 9453 + 9453 9446 9445 + 9142 9148 9449 + 9449 9148 9154 + 9154 9454 9449 + 9454 9455 9449 + 9450 9449 9455 + 9455 9456 9450 + 9450 9456 9457 + 9457 9451 9450 + 9457 9458 9451 + 9458 9452 9451 + 9162 9454 9154 + 9454 9162 9459 + 9454 9459 9460 + 9460 9455 9454 + 9455 9460 9456 + 9456 9460 9461 + 9461 9462 9456 + 9456 9462 9457 + 9463 9457 9462 + 9458 9457 9463 + 9459 9162 9464 + 9464 9465 9459 + 9459 9465 9461 + 9461 9460 9459 + 9161 9464 9162 + 9160 9464 9161 + 9465 9464 9160 + 9465 9160 9167 + 9167 9466 9465 + 9465 9466 9461 + 9467 9461 9466 + 9462 9461 9467 + 9462 9467 9463 + 9468 9466 9167 + 9466 9468 9467 + 9467 9468 9177 + 9463 9467 9177 + 9177 9469 9463 + 9469 9470 9463 + 9471 9463 9470 + 9463 9471 9458 + 9468 9167 9166 + 9166 9177 9468 + 9176 9469 9177 + 9469 9176 9472 + 9469 9472 9473 + 9473 9470 9469 + 9474 9470 9473 + 9470 9474 9471 + 9475 9471 9474 + 9458 9471 9475 + 9472 9176 9476 + 9476 9477 9472 + 9472 9477 9478 + 9478 9479 9472 + 9479 9480 9472 + 9480 9481 9472 + 9481 9482 9472 + 9482 9483 9472 + 9483 9484 9472 + 9484 9473 9472 + 9476 9176 9175 + 9175 9485 9476 + 9486 9476 9485 + 9476 9486 9477 + 9477 9486 9487 + 9487 9478 9477 + 9487 9488 9478 + 9478 9488 9489 + 9489 9479 9478 + 9185 9485 9175 + 9485 9185 9490 + 9490 9491 9485 + 9485 9491 9486 + 9487 9486 9491 + 9491 9492 9487 + 9488 9487 9492 + 9492 9493 9488 + 9489 9488 9493 + 9490 9185 9190 + 9190 9195 9490 + 9494 9490 9195 + 9491 9490 9494 + 9494 9492 9491 + 9492 9494 9495 + 9495 9493 9492 + 9493 9495 9496 + 9496 9497 9493 + 9493 9497 9498 + 9498 9489 9493 + 9195 9499 9494 + 9495 9494 9499 + 9499 9500 9495 + 9496 9495 9500 + 9500 9501 9496 + 9502 9496 9501 + 9496 9502 9497 + 9497 9502 9503 + 9503 9498 9497 + 9504 9499 9195 + 9499 9504 9500 + 9500 9504 9505 + 9505 9501 9500 + 9506 9501 9505 + 9501 9506 9502 + 9502 9506 9507 + 9503 9502 9507 + 9195 9194 9504 + 9505 9504 9194 + 9508 9505 9194 + 9509 9505 9508 + 9505 9509 9506 + 9506 9509 9510 + 9510 9511 9506 + 9506 9511 9507 + 9194 9200 9508 + 9512 9508 9200 + 9508 9512 9513 + 9513 9514 9508 + 9508 9514 9509 + 9509 9514 9515 + 9515 9510 9509 + 9516 9510 9515 + 9511 9510 9516 + 9200 9199 9512 + 9512 9199 9517 + 9517 9518 9512 + 9513 9512 9518 + 9518 9519 9513 + 9520 9513 9519 + 9514 9513 9520 + 9520 9515 9514 + 9204 9517 9199 + 9521 9517 9204 + 9517 9521 9522 + 9522 9518 9517 + 9518 9522 9523 + 9523 9519 9518 + 9519 9523 9524 + 9524 9525 9519 + 9519 9525 9520 + 9204 9208 9521 + 9521 9208 9526 + 9526 9527 9521 + 9522 9521 9527 + 9527 9528 9522 + 9523 9522 9528 + 9528 9529 9523 + 9524 9523 9529 + 9212 9526 9208 + 9530 9526 9212 + 9526 9530 9531 + 9531 9527 9526 + 9527 9531 9532 + 9532 9528 9527 + 9528 9532 9533 + 9533 9529 9528 + 9212 9217 9530 + 9530 9217 9534 + 9534 9535 9530 + 9531 9530 9535 + 9535 9536 9531 + 9532 9531 9536 + 9536 9537 9532 + 9533 9532 9537 + 9222 9534 9217 + 9534 9222 9538 + 9538 9539 9534 + 9534 9539 9540 + 9540 9535 9534 + 9536 9535 9540 + 9540 9541 9536 + 9536 9541 9542 + 9542 9537 9536 + 9538 9222 9221 + 9221 9543 9538 + 9544 9538 9543 + 9539 9538 9544 + 9544 9545 9539 + 9539 9545 9546 + 9546 9540 9539 + 9541 9540 9546 + 9227 9543 9221 + 9543 9227 9232 + 9232 9547 9543 + 9543 9547 9544 + 9548 9544 9547 + 9544 9548 9549 + 9549 9545 9544 + 9545 9549 9550 + 9550 9546 9545 + 9551 9547 9232 + 9547 9551 9548 + 9548 9551 9552 + 9552 9553 9548 + 9549 9548 9553 + 9553 9554 9549 + 9550 9549 9554 + 9232 9555 9551 + 9551 9555 9556 + 9556 9552 9551 + 9557 9552 9556 + 9552 9557 9558 + 9558 9553 9552 + 9553 9558 9559 + 9559 9554 9553 + 9555 9232 9231 + 9231 9560 9555 + 9555 9560 9561 + 9561 9556 9555 + 9562 9556 9561 + 9556 9562 9557 + 9557 9562 9563 + 9563 9564 9557 + 9558 9557 9564 + 9560 9231 9230 + 9230 9565 9560 + 9560 9565 9566 + 9566 9561 9560 + 9567 9561 9566 + 9561 9567 9562 + 9562 9567 9568 + 9568 9563 9562 + 9565 9230 9236 + 9236 9241 9565 + 9565 9241 9569 + 9569 9566 9565 + 9570 9566 9569 + 9566 9570 9567 + 9567 9570 9571 + 9571 9568 9567 + 9572 9568 9571 + 9568 9572 9573 + 9573 9563 9568 + 9574 9569 9241 + 9575 9569 9574 + 9569 9575 9570 + 9570 9575 9576 + 9576 9571 9570 + 9577 9571 9576 + 9571 9577 9572 + 9241 9240 9574 + 9578 9574 9240 + 9579 9574 9578 + 9574 9579 9575 + 9575 9579 9580 + 9580 9576 9575 + 9581 9576 9580 + 9576 9581 9577 + 9240 9245 9578 + 9582 9578 9245 + 9583 9578 9582 + 9578 9583 9579 + 9579 9583 9584 + 9584 9580 9579 + 9585 9580 9584 + 9580 9585 9581 + 9245 9249 9582 + 9586 9582 9249 + 9587 9582 9586 + 9582 9587 9583 + 9583 9587 9588 + 9588 9584 9583 + 9589 9584 9588 + 9584 9589 9585 + 9249 9253 9586 + 9590 9586 9253 + 9591 9586 9590 + 9586 9591 9587 + 9587 9591 9592 + 9592 9588 9587 + 9593 9588 9592 + 9588 9593 9589 + 9253 9258 9590 + 9594 9590 9258 + 9595 9590 9594 + 9590 9595 9591 + 9591 9595 9596 + 9596 9592 9591 + 9597 9592 9596 + 9592 9597 9593 + 9258 9263 9594 + 9598 9594 9263 + 9599 9594 9598 + 9594 9599 9595 + 9595 9599 9600 + 9600 9596 9595 + 9601 9596 9600 + 9596 9601 9597 + 9263 9268 9598 + 9602 9598 9268 + 9603 9598 9602 + 9598 9603 9599 + 9599 9603 9604 + 9604 9600 9599 + 9605 9600 9604 + 9600 9605 9601 + 9268 9606 9602 + 9607 9602 9606 + 9608 9602 9607 + 9602 9608 9603 + 9603 9608 9609 + 9609 9604 9603 + 9610 9604 9609 + 9604 9610 9605 + 9267 9606 9268 + 9606 9267 9273 + 9273 9611 9606 + 9606 9611 9607 + 9612 9607 9611 + 9613 9607 9612 + 9607 9613 9608 + 9608 9613 9614 + 9614 9609 9608 + 9615 9609 9614 + 9609 9615 9610 + 9611 9273 9616 + 9616 9617 9611 + 9611 9617 9612 + 9618 9612 9617 + 9619 9612 9618 + 9612 9619 9613 + 9613 9619 9620 + 9620 9614 9613 + 9278 9616 9273 + 9621 9616 9278 + 9617 9616 9621 + 9621 9622 9617 + 9617 9622 9618 + 9623 9618 9622 + 9624 9618 9623 + 9618 9624 9619 + 9619 9624 9625 + 9625 9620 9619 + 9278 9626 9621 + 9627 9621 9626 + 9622 9621 9627 + 9627 9628 9622 + 9622 9628 9623 + 9629 9623 9628 + 9630 9623 9629 + 9623 9630 9624 + 9626 9278 9277 + 9277 9631 9626 + 9626 9631 9632 + 9632 9633 9626 + 9626 9633 9627 + 9634 9627 9633 + 9628 9627 9634 + 9634 9635 9628 + 9628 9635 9629 + 9631 9277 9282 + 9282 9636 9631 + 9631 9636 9637 + 9637 9632 9631 + 9638 9632 9637 + 9632 9638 9639 + 9639 9633 9632 + 9633 9639 9634 + 9640 9634 9639 + 9635 9634 9640 + 9286 9636 9282 + 9636 9286 9641 + 9641 9637 9636 + 9637 9641 9642 + 9642 9643 9637 + 9637 9643 9638 + 9638 9643 9644 + 9644 9645 9638 + 9639 9638 9645 + 9641 9286 9291 + 9291 9646 9641 + 9642 9641 9646 + 9646 9647 9642 + 9648 9642 9647 + 9643 9642 9648 + 9648 9644 9643 + 9296 9646 9291 + 9646 9296 9649 + 9649 9647 9646 + 9647 9649 9650 + 9650 9651 9647 + 9647 9651 9648 + 9652 9648 9651 + 9644 9648 9652 + 9649 9296 9653 + 9653 9654 9649 + 9650 9649 9654 + 9654 9655 9650 + 9656 9650 9655 + 9651 9650 9656 + 9656 9657 9651 + 9651 9657 9652 + 9295 9653 9296 + 9658 9653 9295 + 9653 9658 9659 + 9659 9654 9653 + 9654 9659 9660 + 9660 9655 9654 + 9655 9660 9661 + 9661 9662 9655 + 9655 9662 9656 + 9295 9294 9658 + 9658 9294 9663 + 9663 9664 9658 + 9659 9658 9664 + 9664 9665 9659 + 9660 9659 9665 + 9665 9666 9660 + 9661 9660 9666 + 9294 9667 9663 + 9668 9663 9667 + 9669 9663 9668 + 9663 9669 9670 + 9670 9664 9663 + 9665 9664 9670 + 9293 9667 9294 + 9671 9667 9293 + 9667 9671 9668 + 9668 9671 9672 + 9672 9673 9668 + 9669 9668 9673 + 9673 9674 9669 + 9669 9674 9675 + 9675 9670 9669 + 9676 9671 9293 + 9672 9671 9676 + 9677 9672 9676 + 9672 9677 9678 + 9672 9678 9679 + 9679 9673 9672 + 9673 9679 9680 + 9680 9674 9673 + 9676 9293 9681 + 9681 9682 9676 + 9676 9682 9683 + 9683 9684 9676 + 9684 9677 9676 + 9678 9677 9684 + 9685 9681 9293 + 9686 9681 9685 + 9682 9681 9686 + 9682 9686 9687 + 9687 9683 9682 + 9688 9683 9687 + 9683 9688 9689 + 9689 9684 9683 + 9300 9685 9293 + 9690 9685 9300 + 9691 9685 9690 + 9685 9691 9686 + 9686 9691 9692 + 9692 9687 9686 + 9693 9687 9692 + 9687 9693 9688 + 9300 9304 9690 + 9690 9304 9309 + 9309 9694 9690 + 9691 9690 9694 + 9694 9692 9691 + 9695 9692 9694 + 9692 9695 9693 + 9693 9695 9696 + 9696 9697 9693 + 9688 9693 9697 + 9697 9698 9688 + 9689 9688 9698 + 9699 9694 9309 + 9694 9699 9695 + 9695 9699 9700 + 9700 9696 9695 + 9696 9700 9701 + 9696 9701 9702 + 9702 9697 9696 + 9698 9697 9702 + 9309 9308 9699 + 9699 9308 9323 + 9323 9703 9699 + 9703 9700 9699 + 9701 9700 9703 + 9703 9704 9701 + 9701 9704 9705 + 9702 9701 9705 + 9308 9313 9323 + 9474 9473 9484 + 9484 9706 9474 + 9474 9706 9475 + 9707 9475 9706 + 9708 9475 9707 + 9475 9708 9458 + 9452 9458 9708 + 9709 9706 9484 + 9706 9709 9707 + 9710 9707 9709 + 9711 9707 9710 + 9707 9711 9708 + 9708 9711 9712 + 9712 9453 9708 + 9708 9453 9452 + 9709 9484 9483 + 9483 9713 9709 + 9709 9713 9710 + 9714 9710 9713 + 9715 9710 9714 + 9710 9715 9711 + 9712 9711 9715 + 9715 9716 9712 + 9717 9712 9716 + 9453 9712 9717 + 9717 9446 9453 + 9718 9713 9483 + 9713 9718 9714 + 9719 9714 9718 + 9720 9714 9719 + 9714 9720 9715 + 9715 9720 9721 + 9721 9716 9715 + 9722 9716 9721 + 9716 9722 9717 + 9718 9483 9482 + 9482 9723 9718 + 9718 9723 9719 + 9724 9719 9723 + 9725 9719 9724 + 9719 9725 9720 + 9721 9720 9725 + 9725 9726 9721 + 9722 9721 9726 + 9727 9723 9482 + 9723 9727 9724 + 9728 9724 9727 + 9729 9724 9728 + 9724 9729 9725 + 9725 9729 9730 + 9730 9726 9725 + 9731 9726 9730 + 9726 9731 9722 + 9727 9482 9481 + 9481 9732 9727 + 9727 9732 9728 + 9733 9728 9732 + 9734 9728 9733 + 9728 9734 9729 + 9729 9734 9735 + 9730 9729 9735 + 9735 9736 9730 + 9731 9730 9736 + 9737 9732 9481 + 9732 9737 9733 + 9738 9733 9737 + 9734 9733 9738 + 9738 9735 9734 + 9735 9738 9739 + 9735 9739 9740 + 9740 9736 9735 + 9737 9481 9480 + 9480 9741 9737 + 9737 9741 9742 + 9742 9738 9737 + 9739 9738 9742 + 9742 9743 9739 + 9740 9739 9743 + 9743 9744 9740 + 9745 9740 9744 + 9736 9740 9745 + 9746 9741 9480 + 9741 9746 9747 + 9747 9748 9741 + 9741 9748 9742 + 9746 9480 9479 + 9479 9749 9746 + 9746 9749 9750 + 9747 9746 9750 + 9751 9747 9750 + 9752 9747 9751 + 9748 9747 9752 + 9489 9749 9479 + 9749 9489 9498 + 9498 9750 9749 + 9503 9750 9498 + 9750 9503 9753 + 9753 9754 9750 + 9750 9754 9755 + 9755 9751 9750 + 9756 9751 9755 + 9751 9756 9757 + 9751 9757 9752 + 9758 9753 9503 + 9759 9753 9758 + 9759 9754 9753 + 9754 9759 9760 + 9760 9755 9754 + 9760 9761 9755 + 9755 9761 9756 + 9762 9756 9761 + 9757 9756 9762 + 9507 9758 9503 + 9763 9758 9507 + 9763 9764 9758 + 9758 9764 9759 + 9760 9759 9764 + 9764 9765 9760 + 9765 9766 9760 + 9761 9760 9766 + 9766 9767 9761 + 9761 9767 9762 + 9507 9768 9763 + 9769 9763 9768 + 9769 9765 9763 + 9765 9764 9763 + 9768 9507 9770 + 9768 9770 9771 + 9771 9772 9768 + 9768 9772 9769 + 9773 9769 9772 + 9769 9773 9765 + 9765 9773 8740 + 8740 9766 9765 + 9767 9766 8740 + 9770 9507 9511 + 9511 9516 9770 + 9770 9516 9774 + 9774 9775 9770 + 9775 9771 9770 + 9776 9771 9775 + 9771 9776 8741 + 8741 9772 9771 + 9772 8741 9773 + 8740 9773 8741 + 9515 9774 9516 + 9777 9774 9515 + 9774 9777 9778 + 9778 9775 9774 + 9775 9778 9779 + 9779 9780 9775 + 9775 9780 9776 + 9515 9520 9777 + 9777 9520 9525 + 9525 9781 9777 + 9778 9777 9781 + 9781 9782 9778 + 9779 9778 9782 + 9782 9783 9779 + 9784 9779 9783 + 9780 9779 9784 + 9785 9781 9525 + 9781 9785 9786 + 9786 9782 9781 + 9782 9786 9787 + 9787 9783 9782 + 9783 9787 9788 + 9788 9789 9783 + 9783 9789 9784 + 9525 9524 9785 + 9785 9524 9790 + 9790 9791 9785 + 9786 9785 9791 + 9791 9792 9786 + 9787 9786 9792 + 9792 9793 9787 + 9788 9787 9793 + 9529 9790 9524 + 9794 9790 9529 + 9790 9794 9795 + 9795 9791 9790 + 9791 9795 9796 + 9796 9792 9791 + 9792 9796 9797 + 9797 9793 9792 + 9529 9533 9794 + 9798 9794 9533 + 9795 9794 9798 + 9798 9799 9795 + 9796 9795 9799 + 9799 9800 9796 + 9797 9796 9800 + 9533 9801 9798 + 9802 9798 9801 + 9798 9802 9803 + 9803 9799 9798 + 9799 9803 9804 + 9804 9800 9799 + 9805 9800 9804 + 9800 9805 9797 + 9537 9801 9533 + 9801 9537 9542 + 9542 9806 9801 + 9801 9806 9802 + 9802 9806 9807 + 9807 9808 9802 + 9803 9802 9808 + 9808 9809 9803 + 9803 9809 9810 + 9810 9804 9803 + 9806 9542 9811 + 9811 9807 9806 + 9812 9807 9811 + 9807 9812 9813 + 9813 9808 9807 + 9808 9813 9814 + 9814 9809 9808 + 9809 9814 9815 + 9815 9810 9809 + 9811 9542 9541 + 9541 9816 9811 + 9817 9811 9816 + 9811 9817 9812 + 9812 9817 9818 + 9818 9819 9812 + 9813 9812 9819 + 9819 9820 9813 + 9814 9813 9820 + 9546 9816 9541 + 9821 9816 9546 + 9816 9821 9817 + 9817 9821 9822 + 9822 9818 9817 + 9823 9818 9822 + 9818 9823 9824 + 9824 9819 9818 + 9819 9824 9825 + 9825 9820 9819 + 9546 9550 9821 + 9821 9550 9826 + 9826 9822 9821 + 9827 9822 9826 + 9822 9827 9823 + 9823 9827 9828 + 9828 9829 9823 + 9824 9823 9829 + 9829 9830 9824 + 9825 9824 9830 + 9554 9826 9550 + 9831 9826 9554 + 9826 9831 9827 + 9827 9831 9832 + 9832 9828 9827 + 9833 9828 9832 + 9828 9833 9834 + 9834 9829 9828 + 9829 9834 9835 + 9835 9830 9829 + 9554 9559 9831 + 9831 9559 9836 + 9836 9832 9831 + 9837 9832 9836 + 9832 9837 9833 + 9833 9837 9838 + 9838 9839 9833 + 9834 9833 9839 + 9839 9840 9834 + 9835 9834 9840 + 9841 9836 9559 + 9842 9836 9841 + 9836 9842 9837 + 9837 9842 9843 + 9843 9838 9837 + 9844 9838 9843 + 9838 9844 9845 + 9845 9839 9838 + 9559 9558 9841 + 9564 9841 9558 + 9846 9841 9564 + 9841 9846 9842 + 9842 9846 9847 + 9847 9843 9842 + 9848 9843 9847 + 9843 9848 9844 + 9844 9848 9849 + 9849 9850 9844 + 9845 9844 9850 + 9564 9851 9846 + 9846 9851 9852 + 9852 9847 9846 + 9853 9847 9852 + 9847 9853 9848 + 9848 9853 9854 + 9854 9849 9848 + 9851 9564 9563 + 9563 9573 9851 + 9851 9573 9855 + 9855 9852 9851 + 9856 9852 9855 + 9852 9856 9853 + 9853 9856 9857 + 9857 9854 9853 + 9403 9854 9857 + 9854 9403 9409 + 9409 9849 9854 + 9858 9855 9573 + 9859 9855 9858 + 9855 9859 9856 + 9856 9859 9860 + 9860 9857 9856 + 9404 9857 9860 + 9857 9404 9403 + 9573 9572 9858 + 9861 9858 9572 + 9862 9858 9861 + 9858 9862 9859 + 9859 9862 9863 + 9863 9860 9859 + 9864 9860 9863 + 9860 9864 9404 + 9404 9864 9395 + 9391 9395 9864 + 9572 9577 9861 + 9865 9861 9577 + 9866 9861 9865 + 9861 9866 9862 + 9862 9866 9867 + 9867 9863 9862 + 9868 9863 9867 + 9863 9868 9864 + 9864 9868 9391 + 9385 9391 9868 + 9577 9581 9865 + 9869 9865 9581 + 9870 9865 9869 + 9865 9870 9866 + 9866 9870 9871 + 9871 9867 9866 + 9872 9867 9871 + 9867 9872 9868 + 9868 9872 9385 + 9386 9385 9872 + 9581 9585 9869 + 9873 9869 9585 + 9874 9869 9873 + 9869 9874 9870 + 9870 9874 9875 + 9875 9871 9870 + 9876 9871 9875 + 9871 9876 9872 + 9872 9876 9386 + 9387 9386 9876 + 9585 9589 9873 + 9877 9873 9589 + 9878 9873 9877 + 9873 9878 9874 + 9874 9878 9879 + 9879 9875 9874 + 9880 9875 9879 + 9875 9880 9876 + 9876 9880 9387 + 9881 9387 9880 + 9379 9387 9881 + 9589 9593 9877 + 9882 9877 9593 + 9883 9877 9882 + 9877 9883 9878 + 9878 9883 9884 + 9884 9879 9878 + 9885 9879 9884 + 9879 9885 9880 + 9880 9885 9881 + 9593 9597 9882 + 9886 9882 9597 + 9887 9882 9886 + 9882 9887 9883 + 9883 9887 9888 + 9888 9884 9883 + 9889 9884 9888 + 9884 9889 9885 + 9885 9889 9890 + 9890 9881 9885 + 9597 9601 9886 + 9891 9886 9601 + 9892 9886 9891 + 9886 9892 9887 + 9887 9892 9893 + 9893 9888 9887 + 9894 9888 9893 + 9888 9894 9889 + 9889 9894 9895 + 9895 9890 9889 + 9601 9605 9891 + 9896 9891 9605 + 9897 9891 9896 + 9891 9897 9892 + 9892 9897 9898 + 9898 9893 9892 + 9899 9893 9898 + 9893 9899 9894 + 9894 9899 9900 + 9900 9895 9894 + 9605 9610 9896 + 9901 9896 9610 + 9902 9896 9901 + 9896 9902 9897 + 9897 9902 9903 + 9903 9898 9897 + 9904 9898 9903 + 9898 9904 9899 + 9899 9904 9905 + 9905 9900 9899 + 9610 9615 9901 + 9906 9901 9615 + 9907 9901 9906 + 9901 9907 9902 + 9902 9907 9908 + 9908 9903 9902 + 9909 9903 9908 + 9903 9909 9904 + 9904 9909 9910 + 9910 9905 9904 + 9615 9911 9906 + 9912 9906 9911 + 9913 9906 9912 + 9906 9913 9907 + 9907 9913 9914 + 9914 9908 9907 + 9915 9908 9914 + 9908 9915 9909 + 9614 9911 9615 + 9911 9614 9620 + 9620 9916 9911 + 9911 9916 9912 + 9917 9912 9916 + 9918 9912 9917 + 9912 9918 9913 + 9913 9918 9919 + 9919 9914 9913 + 9920 9914 9919 + 9914 9920 9915 + 9916 9620 9625 + 9625 9921 9916 + 9916 9921 9917 + 9922 9917 9921 + 9923 9917 9922 + 9917 9923 9918 + 9918 9923 9924 + 9924 9919 9918 + 9925 9919 9924 + 9919 9925 9920 + 9921 9625 9926 + 9926 9927 9921 + 9921 9927 9922 + 9928 9922 9927 + 9929 9922 9928 + 9922 9929 9923 + 9923 9929 9930 + 9930 9924 9923 + 9926 9625 9624 + 9624 9630 9926 + 9931 9926 9630 + 9927 9926 9931 + 9931 9932 9927 + 9927 9932 9928 + 9933 9928 9932 + 9934 9928 9933 + 9928 9934 9929 + 9929 9934 9935 + 9935 9930 9929 + 9630 9936 9931 + 9937 9931 9936 + 9932 9931 9937 + 9937 9938 9932 + 9932 9938 9933 + 9939 9933 9938 + 9940 9933 9939 + 9933 9940 9934 + 9629 9936 9630 + 9936 9629 9941 + 9941 9942 9936 + 9936 9942 9937 + 9943 9937 9942 + 9938 9937 9943 + 9943 9944 9938 + 9938 9944 9939 + 9941 9629 9635 + 9635 9945 9941 + 9946 9941 9945 + 9942 9941 9946 + 9946 9947 9942 + 9942 9947 9943 + 9943 9947 9948 + 9948 9949 9943 + 9944 9943 9949 + 9640 9945 9635 + 9945 9640 9950 + 9950 9951 9945 + 9945 9951 9946 + 9946 9951 9952 + 9952 9953 9946 + 9947 9946 9953 + 9953 9948 9947 + 9950 9640 9954 + 9954 9955 9950 + 9950 9955 9956 + 9956 9957 9950 + 9951 9950 9957 + 9957 9952 9951 + 9639 9954 9640 + 9645 9954 9639 + 9955 9954 9645 + 9645 9958 9955 + 9955 9958 9959 + 9959 9956 9955 + 9960 9956 9959 + 9956 9960 9961 + 9961 9957 9956 + 9952 9957 9961 + 9958 9645 9644 + 9644 9962 9958 + 9959 9958 9962 + 9962 9963 9959 + 9964 9959 9963 + 9959 9964 9960 + 9652 9962 9644 + 9962 9652 9965 + 9965 9963 9962 + 9963 9965 9966 + 9966 9967 9963 + 9963 9967 9964 + 9964 9967 9968 + 9968 9969 9964 + 9960 9964 9969 + 9970 9965 9652 + 9966 9965 9970 + 9970 9971 9966 + 9966 9971 9972 + 9972 9973 9966 + 9967 9966 9973 + 9973 9968 9967 + 9652 9657 9970 + 9974 9970 9657 + 9970 9974 9975 + 9975 9971 9970 + 9971 9975 9976 + 9976 9972 9971 + 9657 9656 9974 + 9977 9974 9656 + 9975 9974 9977 + 9977 9978 9975 + 9975 9978 9979 + 9979 9976 9975 + 9980 9976 9979 + 9972 9976 9980 + 9656 9662 9977 + 9981 9977 9662 + 9977 9981 9982 + 9982 9978 9977 + 9978 9982 9983 + 9983 9979 9978 + 9979 9983 9984 + 9984 9985 9979 + 9979 9985 9980 + 9662 9661 9981 + 9981 9661 9986 + 9986 9987 9981 + 9982 9981 9987 + 9987 9988 9982 + 9983 9982 9988 + 9989 9983 9988 + 9984 9983 9989 + 9661 9990 9986 + 9991 9986 9990 + 9992 9986 9991 + 9986 9992 9993 + 9993 9987 9986 + 9988 9987 9993 + 9666 9990 9661 + 9990 9666 9994 + 9994 9995 9990 + 9990 9995 9991 + 9991 9995 9996 + 9996 9997 9991 + 9992 9991 9997 + 9994 9666 9665 + 9665 9998 9994 + 9999 9994 9998 + 9995 9994 9999 + 9999 9996 9995 + 10000 9996 9999 + 9996 10000 10001 + 10001 9997 9996 + 9670 9998 9665 + 9998 9670 9675 + 9675 10002 9998 + 9998 10002 9999 + 10003 9999 10002 + 9999 10003 10000 + 10000 10003 10004 + 10004 10005 10000 + 10000 10005 10006 + 10006 10001 10000 + 10007 10002 9675 + 10002 10007 10003 + 10004 10003 10007 + 10008 10004 10007 + 10004 10008 10009 + 10010 10004 10009 + 10010 10005 10004 + 10005 10010 10011 + 10011 10006 10005 + 9675 10012 10007 + 10007 10012 10013 + 10013 10014 10007 + 10007 10014 10008 + 10012 9675 9674 + 9674 9680 10012 + 10012 9680 10015 + 10015 10013 10012 + 10016 10013 10015 + 10014 10013 10016 + 10014 10016 10017 + 10017 10018 10014 + 10014 10018 10008 + 10019 10015 9680 + 10015 10019 10020 + 10015 10020 10016 + 10016 10020 10021 + 10017 10016 10021 + 9680 9679 10019 + 10022 10019 9679 + 10020 10019 10022 + 10022 10021 10020 + 10022 10023 10021 + 10021 10023 10024 + 10024 10025 10021 + 10021 10025 10017 + 9679 9678 10022 + 9678 10026 10022 + 10026 10027 10022 + 10027 10028 10022 + 10023 10022 10028 + 10028 10029 10023 + 10024 10023 10029 + 9684 10026 9678 + 9684 9689 10026 + 10027 10026 9689 + 10030 10027 9689 + 9698 10030 9689 + 10031 10030 9698 + 9698 9702 10031 + 10032 10031 9702 + 10027 10031 10032 + 10027 10033 10031 + 10032 9702 9705 + 9705 10034 10032 + 10034 10035 10032 + 10029 10032 10035 + 10029 10028 10032 + 10032 10028 10027 + 10036 10034 9705 + 10036 10037 10034 + 10034 10037 10038 + 10038 10035 10034 + 10038 10039 10035 + 10035 10039 10029 + 10029 10039 10040 + 10040 10024 10029 + 9705 10041 10036 + 10036 10041 10042 + 10042 10043 10036 + 10037 10036 10043 + 10043 10044 10037 + 10044 10045 10037 + 10045 10038 10037 + 10046 10041 9705 + 10041 10046 10047 + 10047 10042 10041 + 10048 10042 10047 + 10042 10048 10049 + 10049 10043 10042 + 10043 10049 10050 + 10050 10044 10043 + 10046 9705 10051 + 10051 10052 10046 + 10046 10052 10053 + 10053 10047 10046 + 10054 10047 10053 + 10048 10047 10054 + 9704 10051 9705 + 10055 10051 9704 + 10055 10052 10051 + 10052 10055 10056 + 10056 10053 10052 + 10057 10053 10056 + 10053 10057 10054 + 10058 10054 10057 + 10048 10054 10058 + 9704 10059 10055 + 10056 10055 10059 + 10060 10056 10059 + 10061 10056 10060 + 10056 10061 10057 + 10057 10061 10062 + 10062 10063 10057 + 10057 10063 10058 + 9703 10059 9704 + 10059 9703 9323 + 9323 9322 10059 + 10059 9322 10060 + 9322 10064 10060 + 10065 10060 10064 + 10066 10060 10065 + 10060 10066 10061 + 10062 10061 10066 + 10066 10067 10062 + 10068 10062 10067 + 10068 10063 10062 + 9321 10064 9322 + 9328 10064 9321 + 10064 9328 10065 + 9332 10065 9328 + 10069 10065 9332 + 10065 10069 10066 + 10066 10069 10070 + 10070 10067 10066 + 10071 10067 10070 + 10067 10071 10068 + 10068 10071 10072 + 10073 10068 10072 + 10063 10068 10073 + 10073 10058 10063 + 9332 9337 10069 + 10070 10069 9337 + 9337 10074 10070 + 10071 10070 10074 + 10074 10075 10071 + 10071 10075 10072 + 9342 10074 9337 + 10074 9342 10076 + 10076 10075 10074 + 10075 10076 10077 + 10077 10072 10075 + 10076 9342 10078 + 10078 10079 10076 + 10076 10079 10080 + 10080 10077 10076 + 10081 10077 10080 + 10072 10077 10081 + 9341 10078 9342 + 9358 10078 9341 + 10079 10078 9358 + 10079 9358 10082 + 10082 10080 10079 + 10080 10082 10083 + 10083 10084 10080 + 10080 10084 10081 + 10085 10081 10084 + 10086 10081 10085 + 10081 10086 10072 + 9357 10082 9358 + 10083 10082 9357 + 9357 9362 10083 + 10087 10083 9362 + 10084 10083 10087 + 10087 10088 10084 + 10084 10088 10085 + 10089 10085 10088 + 10085 10089 10090 + 10085 10090 10086 + 9362 9366 10087 + 10091 10087 9366 + 10088 10087 10091 + 10091 10092 10088 + 10088 10092 10089 + 10093 10089 10092 + 10090 10089 10093 + 10093 10094 10090 + 10086 10090 10094 + 10094 10095 10086 + 10072 10086 10095 + 9366 10096 10091 + 10097 10091 10096 + 10092 10091 10097 + 10097 10098 10092 + 10092 10098 10099 + 10099 10100 10092 + 10100 10093 10092 + 9365 10096 9366 + 10096 9365 9371 + 9371 10101 10096 + 10096 10101 10097 + 10102 10097 10101 + 10097 10102 10103 + 10103 10098 10097 + 10098 10103 10104 + 10104 10099 10098 + 10105 10101 9371 + 10101 10105 10102 + 10102 10105 10106 + 10106 10107 10102 + 10103 10102 10107 + 10107 10108 10103 + 10104 10103 10108 + 9371 10109 10105 + 10105 10109 10110 + 10110 10106 10105 + 9900 10106 10110 + 10106 9900 9905 + 9905 10107 10106 + 10107 9905 9910 + 9910 10108 10107 + 10109 9371 9370 + 9370 10111 10109 + 10110 10109 10111 + 10111 10112 10110 + 9895 10110 10112 + 10110 9895 9900 + 9370 9375 10111 + 10111 9375 10113 + 10113 10112 10111 + 9890 10112 10113 + 10112 9890 9895 + 9379 10113 9375 + 9881 10113 9379 + 10113 9881 9890 + 10039 10038 10040 + 10038 10045 10040 + 10114 10040 10045 + 10040 10114 10115 + 10115 10116 10040 + 10040 10116 10024 + 10117 10024 10116 + 10024 10117 10025 + 10045 10118 10114 + 10114 10118 10119 + 10119 10120 10114 + 10121 10114 10120 + 10121 10115 10114 + 10118 10045 10044 + 10044 10050 10118 + 10119 10118 10050 + 10050 10122 10119 + 10123 10119 10122 + 10120 10119 10123 + 10123 10124 10120 + 10120 10124 10125 + 10125 10121 10120 + 10126 10122 10050 + 10122 10126 10127 + 10127 10128 10122 + 10122 10128 10123 + 10050 10049 10126 + 10126 10049 10048 + 10048 10129 10126 + 10127 10126 10129 + 10129 10130 10127 + 10131 10127 10130 + 10128 10127 10131 + 10131 10132 10128 + 10128 10132 10133 + 10123 10128 10133 + 10058 10129 10048 + 10129 10058 10073 + 10073 10130 10129 + 10130 10073 10134 + 10134 10135 10130 + 10130 10135 10131 + 10136 10131 10135 + 10131 10136 10137 + 10137 10132 10131 + 10132 10137 10138 + 10138 10133 10132 + 10072 10134 10073 + 10095 10134 10072 + 10135 10134 10095 + 10095 10139 10135 + 10135 10139 10136 + 10136 10139 10140 + 10140 10141 10136 + 10137 10136 10141 + 10141 10142 10137 + 10138 10137 10142 + 10139 10095 10094 + 10094 10140 10139 + 10094 10093 10140 + 10140 10093 10100 + 10100 10141 10140 + 10142 10141 10100 + 10100 10143 10142 + 10142 10143 10144 + 10144 10145 10142 + 10142 10145 10138 + 10146 10138 10145 + 10133 10138 10146 + 10143 10100 10099 + 10099 10147 10143 + 10144 10143 10147 + 10148 10144 10147 + 10149 10144 10148 + 10145 10144 10149 + 10145 10149 10146 + 10146 10149 10150 + 10150 10151 10146 + 10133 10146 10151 + 10152 10147 10099 + 10147 10152 10153 + 10153 10154 10147 + 10147 10154 10148 + 10099 10104 10152 + 10152 10104 10155 + 10155 10156 10152 + 10153 10152 10156 + 10156 10157 10153 + 10158 10153 10157 + 10154 10153 10158 + 10108 10155 10104 + 10159 10155 10108 + 10155 10159 10160 + 10160 10156 10155 + 10156 10160 10161 + 10161 10157 10156 + 10157 10161 10162 + 10162 10163 10157 + 10157 10163 10158 + 10108 9910 10159 + 10159 9910 9909 + 9909 9915 10159 + 10160 10159 9915 + 9915 9920 10160 + 10161 10160 9920 + 9920 9925 10161 + 10162 10161 9925 + 9925 10164 10162 + 10165 10162 10164 + 10163 10162 10165 + 10165 10166 10163 + 10163 10166 10167 + 10167 10158 10163 + 10168 10158 10167 + 10158 10168 10154 + 9924 10164 9925 + 10164 9924 9930 + 9930 10169 10164 + 10164 10169 10165 + 10170 10165 10169 + 10166 10165 10170 + 10170 10171 10166 + 10166 10171 10172 + 10172 10167 10166 + 10173 10167 10172 + 10167 10173 10168 + 10169 9930 9935 + 9935 10174 10169 + 10169 10174 10170 + 10175 10170 10174 + 10171 10170 10175 + 10175 10176 10171 + 10171 10176 10177 + 10177 10172 10171 + 10178 10172 10177 + 10172 10178 10173 + 10174 9935 10179 + 10179 10180 10174 + 10174 10180 10175 + 10181 10175 10180 + 10176 10175 10181 + 10181 10182 10176 + 10176 10182 10183 + 10183 10177 10176 + 10179 9935 9934 + 9934 9940 10179 + 10184 10179 9940 + 10180 10179 10184 + 10184 10185 10180 + 10180 10185 10181 + 10181 10185 10186 + 10186 10187 10181 + 10182 10181 10187 + 10187 10188 10182 + 10183 10182 10188 + 9940 10189 10184 + 10184 10189 10190 + 10190 10191 10184 + 10185 10184 10191 + 10191 10186 10185 + 9939 10189 9940 + 10189 9939 10192 + 10192 10190 10189 + 10190 10192 10193 + 10193 10194 10190 + 10190 10194 10195 + 10195 10191 10190 + 10186 10191 10195 + 10196 10192 9939 + 10193 10192 10196 + 10196 10197 10193 + 10193 10197 10198 + 10198 10199 10193 + 10194 10193 10199 + 10199 10200 10194 + 10195 10194 10200 + 9939 9944 10196 + 9949 10196 9944 + 10196 9949 10201 + 10201 10197 10196 + 10197 10201 10202 + 10202 10198 10197 + 10198 10202 10203 + 10203 10204 10198 + 10198 10204 10205 + 10205 10199 10198 + 10200 10199 10205 + 10201 9949 9948 + 9948 10206 10201 + 10201 10206 10207 + 10207 10202 10201 + 10203 10202 10207 + 10207 10208 10203 + 10203 10208 10209 + 10209 10210 10203 + 10204 10203 10210 + 10211 10206 9948 + 10206 10211 10212 + 10212 10207 10206 + 10207 10212 10213 + 10213 10208 10207 + 10208 10213 10214 + 10214 10209 10208 + 9948 9953 10211 + 10211 9953 9952 + 9952 10215 10211 + 10211 10215 10216 + 10216 10212 10211 + 10213 10212 10216 + 10216 10217 10213 + 10213 10217 10218 + 10218 10214 10213 + 10219 10214 10218 + 10209 10214 10219 + 9961 10215 9952 + 10215 9961 10220 + 10220 10216 10215 + 10216 10220 10221 + 10221 10217 10216 + 10217 10221 10222 + 10222 10218 10217 + 10218 10222 10223 + 10223 10224 10218 + 10218 10224 10219 + 10220 9961 9960 + 9960 10225 10220 + 10221 10220 10225 + 10225 10226 10221 + 10222 10221 10226 + 10226 10227 10222 + 10223 10222 10227 + 10227 10228 10223 + 10229 10223 10228 + 10224 10223 10229 + 9969 10225 9960 + 10226 10225 9969 + 9969 10230 10226 + 10226 10230 10231 + 10231 10227 10226 + 10228 10227 10231 + 10231 10232 10228 + 10228 10232 10233 + 10233 10234 10228 + 10228 10234 10229 + 10230 9969 9968 + 9968 10235 10230 + 10230 10235 10236 + 10236 10231 10230 + 10232 10231 10236 + 10236 10237 10232 + 10232 10237 10238 + 10238 10233 10232 + 10239 10235 9968 + 10235 10239 10240 + 10240 10236 10235 + 10236 10240 10241 + 10241 10237 10236 + 10237 10241 10242 + 10242 10238 10237 + 9968 9973 10239 + 10239 9973 9972 + 9972 10243 10239 + 10239 10243 10244 + 10244 10240 10239 + 10241 10240 10244 + 10244 10245 10241 + 10241 10245 10246 + 10246 10242 10241 + 10247 10242 10246 + 10238 10242 10247 + 9980 10243 9972 + 10243 9980 10248 + 10248 10244 10243 + 10244 10248 10249 + 10249 10245 10244 + 10245 10249 10250 + 10250 10246 10245 + 10246 10250 10251 + 10251 10252 10246 + 10246 10252 10247 + 10253 10248 9980 + 10249 10248 10253 + 10253 10254 10249 + 10249 10254 10255 + 10255 10250 10249 + 10251 10250 10255 + 9980 9985 10253 + 10256 10253 9985 + 10253 10256 10257 + 10257 10254 10253 + 10254 10257 10258 + 10258 10255 10254 + 10255 10258 10259 + 10259 10260 10255 + 10255 10260 10251 + 9985 9984 10256 + 10256 9984 10261 + 10262 10256 10261 + 10257 10256 10262 + 10262 10263 10257 + 10258 10257 10263 + 10263 10264 10258 + 10264 10265 10258 + 10259 10258 10265 + 9989 10261 9984 + 10261 9989 10266 + 10266 10267 10261 + 10261 10267 10268 + 10268 10269 10261 + 10261 10269 10262 + 10270 10262 10269 + 10263 10262 10270 + 10266 9989 10271 + 10271 10272 10266 + 10273 10266 10272 + 10267 10266 10273 + 10273 10274 10267 + 10267 10274 10275 + 10275 10268 10267 + 10276 10271 9989 + 10277 10271 10276 + 10272 10271 10277 + 10278 10272 10277 + 10272 10278 10273 + 10279 10273 10278 + 10273 10279 10280 + 10280 10274 10273 + 10281 10276 9989 + 10282 10276 10281 + 10283 10276 10282 + 10276 10283 10277 + 10284 10277 10283 + 10284 10278 10277 + 10285 10278 10284 + 10278 10285 10279 + 9988 10281 9989 + 10286 10281 9988 + 10287 10281 10286 + 10281 10287 10282 + 10288 10282 10287 + 10283 10282 10288 + 10288 10289 10283 + 10283 10289 10284 + 10290 10284 10289 + 10284 10290 10285 + 9988 10291 10286 + 10292 10286 10291 + 10287 10286 10292 + 10292 10293 10287 + 10287 10293 10288 + 10294 10288 10293 + 10288 10294 10295 + 10295 10289 10288 + 10289 10295 10290 + 9993 10291 9988 + 10291 9993 10296 + 10296 10297 10291 + 10291 10297 10292 + 10297 10298 10292 + 10299 10292 10298 + 10292 10299 10300 + 10300 10293 10292 + 10293 10300 10294 + 10296 9993 9992 + 9992 10301 10296 + 10302 10296 10301 + 10302 10297 10296 + 10297 10302 10298 + 10302 10303 10298 + 10303 10304 10298 + 10298 10304 10299 + 10305 10299 10304 + 10300 10299 10305 + 9997 10301 9992 + 10306 10301 9997 + 10301 10306 10302 + 10303 10302 10306 + 10307 10303 10306 + 10304 10303 10307 + 10307 10308 10304 + 10304 10308 10305 + 9997 10001 10306 + 10306 10001 10006 + 10006 10309 10306 + 10306 10309 10310 + 10310 10307 10306 + 10307 10310 10311 + 10312 10307 10311 + 10312 10313 10307 + 10011 10309 10006 + 10309 10011 10314 + 10314 10315 10309 + 10309 10315 10310 + 10316 10310 10315 + 10311 10310 10316 + 10314 10011 10009 + 10009 10317 10314 + 10317 10318 10314 + 10318 10319 10314 + 10319 10320 10314 + 10320 10321 10314 + 10321 10322 10314 + 10314 10322 10315 + 10011 10010 10009 + 10315 10322 10316 + 10323 10316 10322 + 10311 10316 10323 + 10324 10323 10322 + 10325 10323 10324 + 10326 10323 10325 + 10323 10326 10311 + 10322 10321 10324 + 10321 10327 10324 + 10328 10324 10327 + 10324 10328 10329 + 10329 10330 10324 + 10324 10330 10325 + 10331 10325 10330 + 10326 10325 10331 + 10321 10332 10327 + 10332 10333 10327 + 10334 10327 10333 + 10327 10334 10328 + 10328 10334 10335 + 10335 10336 10328 + 10329 10328 10336 + 10320 10332 10321 + 10332 10320 10319 + 10319 10337 10332 + 10332 10337 10338 + 10333 10332 10338 + 10339 10333 10338 + 10333 10339 10334 + 10334 10339 10340 + 10340 10335 10334 + 10319 10341 10337 + 10337 10341 10342 + 10337 10342 10338 + 10343 10338 10342 + 10344 10338 10343 + 10338 10344 10339 + 10339 10344 10345 + 10345 10340 10339 + 10346 10341 10319 + 10347 10341 10346 + 10341 10347 10342 + 10342 10347 10348 + 10342 10348 10343 + 10343 10348 10349 + 10350 10343 10349 + 10344 10343 10350 + 10350 10345 10344 + 10318 10346 10319 + 10318 10351 10346 + 10346 10351 10352 + 10352 10353 10346 + 10346 10353 10347 + 10348 10347 10353 + 10353 10349 10348 + 10351 10318 10317 + 10317 10354 10351 + 10351 10354 10355 + 10352 10351 10355 + 10355 10356 10352 + 10356 10357 10352 + 10352 10357 10349 + 10349 10353 10352 + 10317 10358 10354 + 10354 10358 10359 + 10359 10355 10354 + 10355 10359 10360 + 10356 10355 10360 + 10358 10317 10009 + 10009 10361 10358 + 10358 10361 10362 + 10363 10358 10362 + 10363 10359 10358 + 10360 10359 10363 + 10009 10008 10361 + 10361 10008 10362 + 10008 10018 10362 + 10362 10018 10017 + 10364 10362 10017 + 10362 10364 10363 + 10364 10365 10363 + 10365 10366 10363 + 10367 10363 10366 + 10363 10367 10360 + 10368 10364 10017 + 10365 10364 10368 + 10365 10368 10369 + 10366 10365 10369 + 10370 10366 10369 + 10371 10366 10370 + 10366 10371 10367 + 10367 10371 10372 + 10372 10360 10367 + 10373 10368 10017 + 10368 10373 10369 + 10374 10369 10373 + 10369 10374 10370 + 10374 10375 10370 + 10376 10370 10375 + 10370 10376 10371 + 10377 10373 10017 + 10374 10373 10377 + 10377 10378 10374 + 10374 10378 10379 + 10379 10375 10374 + 10375 10379 10380 + 10381 10375 10380 + 10375 10381 10376 + 10025 10377 10017 + 10377 10025 10117 + 10382 10377 10117 + 10382 10378 10377 + 10378 10382 10383 + 10383 10379 10378 + 10380 10379 10383 + 10384 10380 10383 + 10380 10384 10385 + 10385 10386 10380 + 10386 10381 10380 + 10382 10117 10387 + 10387 10388 10382 + 10388 10383 10382 + 10388 10384 10383 + 10384 10388 10389 + 10384 10389 10390 + 10390 10391 10384 + 10384 10391 10385 + 10116 10387 10117 + 10387 10116 10115 + 10392 10387 10115 + 10388 10387 10392 + 10389 10388 10392 + 10390 10389 10392 + 10392 10393 10390 + 10394 10390 10393 + 10391 10390 10394 + 10394 10395 10391 + 10391 10395 10396 + 10396 10385 10391 + 10392 10115 10121 + 10121 10393 10392 + 10125 10393 10121 + 10393 10125 10394 + 10394 10125 10124 + 10124 10397 10394 + 10397 10398 10394 + 10395 10394 10398 + 10398 10399 10395 + 10396 10395 10399 + 10399 10400 10396 + 10401 10396 10400 + 10401 10385 10396 + 10402 10397 10124 + 10403 10397 10402 + 10397 10403 10404 + 10404 10398 10397 + 10398 10404 10405 + 10405 10399 10398 + 10399 10405 10406 + 10406 10400 10399 + 10124 10123 10402 + 10407 10402 10123 + 10408 10402 10407 + 10402 10408 10403 + 10403 10408 10409 + 10409 10410 10403 + 10404 10403 10410 + 10410 10411 10404 + 10405 10404 10411 + 10133 10407 10123 + 10151 10407 10133 + 10407 10151 10412 + 10407 10412 10408 + 10408 10412 10413 + 10413 10409 10408 + 10414 10409 10413 + 10409 10414 10410 + 10410 10414 10415 + 10415 10411 10410 + 10416 10411 10415 + 10411 10416 10405 + 10406 10405 10416 + 10412 10151 10150 + 10150 10413 10412 + 10413 10150 10148 + 10413 10148 10414 + 10415 10414 10148 + 10154 10415 10148 + 10417 10415 10154 + 10415 10417 10416 + 10416 10417 10418 + 10418 10419 10416 + 10416 10419 10406 + 10148 10150 10149 + 10154 10168 10417 + 10417 10168 10173 + 10173 10420 10417 + 10420 10418 10417 + 10421 10418 10420 + 10419 10418 10421 + 10419 10421 10422 + 10422 10406 10419 + 10400 10406 10422 + 10423 10420 10173 + 10420 10423 10424 + 10424 10425 10420 + 10420 10425 10421 + 10421 10425 10426 + 10426 10422 10421 + 10427 10422 10426 + 10422 10427 10400 + 10400 10427 10401 + 10173 10178 10423 + 10423 10178 10428 + 10428 10429 10423 + 10424 10423 10429 + 10429 10430 10424 + 10424 10430 10431 + 10431 10432 10424 + 10425 10424 10432 + 10432 10426 10425 + 10177 10428 10178 + 10428 10177 10183 + 10183 10433 10428 + 10428 10433 10434 + 10434 10429 10428 + 10429 10434 10435 + 10435 10430 10429 + 10430 10435 10436 + 10436 10431 10430 + 10433 10183 10437 + 10437 10438 10433 + 10433 10438 10439 + 10434 10433 10439 + 10439 10440 10434 + 10435 10434 10440 + 10440 10441 10435 + 10436 10435 10441 + 10188 10437 10183 + 10442 10437 10188 + 10438 10437 10442 + 10442 10443 10438 + 10438 10443 10444 + 10444 10439 10438 + 10188 10445 10442 + 10442 10445 10446 + 10446 10447 10442 + 10443 10442 10447 + 10448 10445 10188 + 10445 10448 10449 + 10449 10446 10445 + 10446 10449 10450 + 10450 10451 10446 + 10446 10451 10452 + 10452 10447 10446 + 10188 10187 10448 + 10448 10187 10186 + 10186 10453 10448 + 10448 10453 10454 + 10454 10449 10448 + 10450 10449 10454 + 10454 10455 10450 + 10450 10455 10456 + 10456 10457 10450 + 10451 10450 10457 + 10195 10453 10186 + 10453 10195 10458 + 10458 10454 10453 + 10454 10458 10459 + 10459 10455 10454 + 10455 10459 10460 + 10460 10456 10455 + 10200 10458 10195 + 10459 10458 10200 + 10200 10461 10459 + 10459 10461 10462 + 10462 10460 10459 + 10463 10460 10462 + 10456 10460 10463 + 10463 10464 10456 + 10456 10464 10465 + 10465 10457 10456 + 10205 10461 10200 + 10461 10205 10466 + 10466 10462 10461 + 10462 10466 10467 + 10467 10468 10462 + 10462 10468 10463 + 10463 10468 10469 + 10469 10470 10463 + 10464 10463 10470 + 10471 10466 10205 + 10467 10466 10471 + 10471 10472 10467 + 10467 10472 10473 + 10473 10474 10467 + 10468 10467 10474 + 10474 10469 10468 + 10205 10204 10471 + 10210 10471 10204 + 10471 10210 10475 + 10475 10472 10471 + 10472 10475 10476 + 10476 10473 10472 + 10473 10476 10477 + 10477 10478 10473 + 10473 10478 10479 + 10479 10474 10473 + 10469 10474 10479 + 10475 10210 10209 + 10209 10480 10475 + 10475 10480 10481 + 10481 10476 10475 + 10477 10476 10481 + 10481 10482 10477 + 10477 10482 10483 + 10483 10484 10477 + 10478 10477 10484 + 10219 10480 10209 + 10480 10219 10485 + 10485 10481 10480 + 10481 10485 10486 + 10486 10482 10481 + 10482 10486 10487 + 10487 10483 10482 + 10488 10485 10219 + 10486 10485 10488 + 10488 10489 10486 + 10486 10489 10490 + 10490 10487 10486 + 10491 10487 10490 + 10483 10487 10491 + 10219 10224 10488 + 10229 10488 10224 + 10488 10229 10492 + 10492 10489 10488 + 10489 10492 10493 + 10493 10490 10489 + 10490 10493 10494 + 10494 10495 10490 + 10490 10495 10491 + 10492 10229 10234 + 10234 10496 10492 + 10493 10492 10496 + 10496 10497 10493 + 10494 10493 10497 + 10497 10498 10494 + 10499 10494 10498 + 10495 10494 10499 + 10499 10500 10495 + 10491 10495 10500 + 10496 10234 10233 + 10233 10501 10496 + 10496 10501 10502 + 10502 10497 10496 + 10498 10497 10502 + 10502 10503 10498 + 10498 10503 10504 + 10504 10505 10498 + 10498 10505 10499 + 10501 10233 10238 + 10238 10506 10501 + 10501 10506 10507 + 10507 10502 10501 + 10503 10502 10507 + 10507 10508 10503 + 10503 10508 10509 + 10509 10504 10503 + 10247 10506 10238 + 10506 10247 10510 + 10510 10507 10506 + 10507 10510 10511 + 10511 10508 10507 + 10508 10511 10512 + 10512 10509 10508 + 10513 10510 10247 + 10511 10510 10513 + 10513 10514 10511 + 10511 10514 10515 + 10515 10512 10511 + 10516 10512 10515 + 10509 10512 10516 + 10247 10252 10513 + 10517 10513 10252 + 10513 10517 10518 + 10518 10514 10513 + 10514 10518 10519 + 10519 10515 10514 + 10515 10519 10520 + 10520 10521 10515 + 10515 10521 10516 + 10252 10251 10517 + 10522 10517 10251 + 10518 10517 10522 + 10522 10523 10518 + 10518 10523 10524 + 10524 10519 10518 + 10520 10519 10524 + 10251 10260 10522 + 10525 10522 10260 + 10522 10525 10526 + 10526 10523 10522 + 10523 10526 10527 + 10527 10524 10523 + 10524 10527 10528 + 10528 10529 10524 + 10524 10529 10520 + 10260 10259 10525 + 10525 10259 10530 + 10531 10525 10530 + 10526 10525 10531 + 10531 10532 10526 + 10527 10526 10532 + 10532 10533 10527 + 10533 10534 10527 + 10528 10527 10534 + 10265 10530 10259 + 10530 10265 10535 + 10535 10536 10530 + 10530 10536 10537 + 10537 10538 10530 + 10530 10538 10531 + 10539 10531 10538 + 10532 10531 10539 + 10535 10265 10264 + 10264 10540 10535 + 10541 10535 10540 + 10536 10535 10541 + 10541 10542 10536 + 10536 10542 10543 + 10543 10537 10536 + 10543 10544 10537 + 10544 10545 10537 + 10540 10264 10546 + 10540 10546 10547 + 10547 10548 10540 + 10540 10548 10541 + 10549 10541 10548 + 10541 10549 10550 + 10550 10542 10541 + 10546 10264 10263 + 10263 10551 10546 + 10547 10546 10551 + 10552 10547 10551 + 10553 10547 10552 + 10547 10553 10548 + 10548 10553 10549 + 10270 10551 10263 + 10551 10270 10554 + 10554 10555 10551 + 10551 10555 10552 + 10556 10552 10555 + 10552 10556 10557 + 10552 10557 10553 + 10549 10553 10557 + 10554 10270 10558 + 10558 10559 10554 + 10560 10554 10559 + 10554 10560 10561 + 10561 10555 10554 + 10555 10561 10556 + 10269 10558 10270 + 10558 10269 10268 + 10558 10268 10275 + 10275 10559 10558 + 10562 10559 10275 + 10559 10562 10560 + 10563 10560 10562 + 10561 10560 10563 + 10563 10564 10561 + 10561 10564 10556 + 10564 10565 10556 + 10565 10566 10556 + 10566 10557 10556 + 10557 10566 10549 + 10275 10567 10562 + 10562 10567 10568 + 10568 10569 10562 + 10562 10569 10570 + 10570 10571 10562 + 10571 10563 10562 + 10567 10275 10274 + 10274 10280 10567 + 10568 10567 10280 + 10280 10572 10568 + 10573 10568 10572 + 10573 10569 10568 + 10569 10573 10574 + 10574 10570 10569 + 10574 10575 10570 + 10570 10575 10576 + 10576 10571 10570 + 10577 10572 10280 + 10578 10572 10577 + 10572 10578 10573 + 10573 10578 10579 + 10574 10573 10579 + 10580 10574 10579 + 10575 10574 10580 + 10280 10279 10577 + 10577 10279 10285 + 10285 10581 10577 + 10577 10581 10582 + 10578 10577 10582 + 10578 10582 10579 + 10583 10581 10285 + 10285 10290 10583 + 10583 10290 10295 + 10584 10583 10295 + 10582 10583 10584 + 10582 10585 10583 + 10295 10586 10584 + 10586 10587 10584 + 10588 10584 10587 + 10579 10584 10588 + 10584 10579 10582 + 10589 10586 10295 + 10590 10586 10589 + 10586 10590 10591 + 10591 10587 10586 + 10591 10592 10587 + 10587 10592 10588 + 10593 10588 10592 + 10579 10588 10593 + 10295 10294 10589 + 10589 10294 10300 + 10300 10594 10589 + 10590 10589 10594 + 10594 10595 10590 + 10590 10595 10311 + 10591 10590 10311 + 10596 10591 10311 + 10592 10591 10596 + 10305 10594 10300 + 10595 10594 10305 + 10595 10305 10312 + 10595 10312 10311 + 10305 10308 10312 + 10311 10326 10596 + 10326 10597 10596 + 10597 10598 10596 + 10599 10596 10598 + 10596 10599 10600 + 10596 10600 10592 + 10592 10600 10601 + 10601 10593 10592 + 10331 10597 10326 + 10597 10331 10602 + 10597 10602 10603 + 10603 10598 10597 + 10598 10603 10604 + 10598 10604 10599 + 10605 10599 10604 + 10600 10599 10605 + 10605 10606 10600 + 10600 10606 10601 + 10602 10331 10607 + 10607 10608 10602 + 10603 10602 10608 + 10609 10603 10608 + 10604 10603 10609 + 10609 10610 10604 + 10604 10610 10605 + 10607 10331 10330 + 10611 10607 10330 + 10608 10607 10611 + 10612 10608 10611 + 10608 10612 10613 + 10613 10609 10608 + 10609 10613 10614 + 10614 10610 10609 + 10610 10614 10615 + 10615 10605 10610 + 10330 10329 10611 + 10611 10329 10616 + 10616 10617 10611 + 10612 10611 10617 + 10617 10618 10612 + 10613 10612 10618 + 10618 10619 10613 + 10614 10613 10619 + 10619 10620 10614 + 10615 10614 10620 + 10336 10616 10329 + 10616 10336 10621 + 10621 10622 10616 + 10616 10622 10623 + 10623 10617 10616 + 10618 10617 10623 + 10623 10624 10618 + 10618 10624 10625 + 10625 10619 10618 + 10620 10619 10625 + 10621 10336 10335 + 10335 10626 10621 + 10621 10626 10627 + 10628 10621 10627 + 10622 10621 10628 + 10628 10629 10622 + 10622 10629 10630 + 10623 10622 10630 + 10335 10340 10626 + 10626 10340 10345 + 10345 10627 10626 + 10631 10627 10345 + 10627 10631 10632 + 10632 10633 10627 + 10627 10633 10628 + 10634 10628 10633 + 10628 10634 10635 + 10635 10629 10628 + 10345 10350 10631 + 10631 10350 10636 + 10636 10637 10631 + 10632 10631 10637 + 10637 10638 10632 + 10639 10632 10638 + 10632 10639 10640 + 10640 10633 10632 + 10633 10640 10634 + 10636 10350 10349 + 10349 10641 10636 + 10642 10636 10641 + 10637 10636 10642 + 10637 10642 10643 + 10643 10638 10637 + 10644 10638 10643 + 10638 10644 10639 + 10645 10639 10644 + 10640 10639 10645 + 10646 10641 10349 + 10641 10646 10647 + 10641 10647 10642 + 10642 10647 10648 + 10648 10643 10642 + 10649 10643 10648 + 10643 10649 10644 + 10349 10357 10646 + 10646 10357 10356 + 10646 10356 10650 + 10647 10646 10650 + 10650 10651 10647 + 10647 10651 10648 + 10652 10648 10651 + 10436 10648 10652 + 10648 10436 10649 + 10441 10649 10436 + 10644 10649 10441 + 10653 10650 10356 + 10650 10653 10654 + 10654 10651 10650 + 10651 10654 10652 + 10652 10654 10655 + 10655 10656 10652 + 10431 10652 10656 + 10652 10431 10436 + 10356 10360 10653 + 10372 10653 10360 + 10654 10653 10372 + 10372 10655 10654 + 10657 10655 10372 + 10655 10657 10658 + 10658 10656 10655 + 10432 10656 10658 + 10656 10432 10431 + 10372 10659 10657 + 10657 10659 10660 + 10657 10660 10401 + 10658 10657 10401 + 10401 10427 10658 + 10426 10658 10427 + 10658 10426 10432 + 10371 10659 10372 + 10661 10659 10371 + 10659 10661 10660 + 10660 10661 10386 + 10660 10386 10385 + 10385 10401 10660 + 10371 10376 10661 + 10376 10381 10661 + 10381 10386 10661 + 10662 10538 10537 + 10538 10662 10539 + 10663 10539 10662 + 10664 10539 10663 + 10539 10664 10532 + 10532 10664 10665 + 10665 10533 10532 + 10662 10666 10663 + 10666 10667 10663 + 10668 10663 10667 + 10663 10668 10669 + 10663 10669 10664 + 10664 10669 10670 + 10670 10665 10664 + 10671 10666 10662 + 10672 10666 10671 + 10666 10672 10673 + 10673 10667 10666 + 10673 10674 10667 + 10667 10674 10668 + 10662 10545 10671 + 10545 10544 10671 + 10671 10544 10675 + 10676 10671 10675 + 10671 10676 10672 + 10672 10676 10677 + 10677 10678 10672 + 10673 10672 10678 + 10678 10679 10673 + 10674 10673 10679 + 10675 10544 10543 + 10675 10543 10542 + 10542 10550 10675 + 10676 10675 10550 + 10677 10676 10550 + 10680 10677 10550 + 10681 10677 10680 + 10681 10678 10677 + 10679 10678 10681 + 10682 10679 10681 + 10682 10683 10679 + 10679 10683 10674 + 10674 10683 10668 + 10684 10680 10550 + 10685 10680 10684 + 10686 10680 10685 + 10680 10686 10681 + 10682 10681 10686 + 10687 10682 10686 + 10683 10682 10687 + 10687 10688 10683 + 10683 10688 10668 + 10550 10689 10684 + 10690 10684 10689 + 10690 10691 10684 + 10684 10691 10685 + 10685 10691 10692 + 10692 10693 10685 + 10686 10685 10693 + 10694 10689 10550 + 10695 10689 10694 + 10689 10695 10690 + 10690 10695 10696 + 10697 10690 10696 + 10691 10690 10697 + 10697 10698 10691 + 10691 10698 10692 + 10550 10549 10694 + 10566 10694 10549 + 10695 10694 10566 + 10566 10699 10695 + 10695 10699 10696 + 10699 10566 10565 + 10699 10565 10700 + 10699 10700 10696 + 10565 10564 10700 + 10700 10564 10563 + 10700 10563 10571 + 10571 10696 10700 + 10696 10571 10576 + 10696 10576 10701 + 10701 10702 10696 + 10696 10702 10703 + 10703 10697 10696 + 10704 10697 10703 + 10697 10704 10698 + 10705 10701 10576 + 10706 10701 10705 + 10702 10701 10706 + 10702 10706 10707 + 10707 10708 10702 + 10702 10708 10703 + 10576 10575 10705 + 10575 10709 10705 + 10710 10705 10709 + 10705 10710 10711 + 10711 10712 10705 + 10705 10712 10706 + 10707 10706 10712 + 10580 10709 10575 + 10580 10713 10709 + 10709 10713 10710 + 10710 10713 10714 + 10714 10715 10710 + 10715 10716 10710 + 10711 10710 10716 + 10713 10580 10717 + 10717 10714 10713 + 10717 10718 10714 + 10714 10718 10719 + 10719 10715 10714 + 10720 10715 10719 + 10715 10720 10721 + 10721 10716 10715 + 10717 10580 10579 + 10579 10722 10717 + 10722 10723 10717 + 10718 10717 10723 + 10723 10724 10718 + 10719 10718 10724 + 10724 10725 10719 + 10726 10719 10725 + 10719 10726 10720 + 10593 10722 10579 + 10722 10593 10727 + 10722 10727 10728 + 10728 10723 10722 + 10723 10728 10724 + 10724 10728 10729 + 10729 10725 10724 + 10730 10725 10729 + 10725 10730 10726 + 10727 10593 10601 + 10601 10731 10727 + 10728 10727 10731 + 10729 10728 10731 + 10732 10729 10731 + 10729 10732 10730 + 10730 10732 10733 + 10733 10734 10730 + 10726 10730 10734 + 10735 10726 10734 + 10720 10726 10735 + 10736 10731 10601 + 10731 10736 10732 + 10732 10736 10737 + 10737 10733 10732 + 10738 10733 10737 + 10734 10733 10738 + 10601 10739 10736 + 10736 10739 10740 + 10740 10737 10736 + 10737 10740 10741 + 10737 10741 10738 + 10742 10738 10741 + 10743 10738 10742 + 10738 10743 10734 + 10739 10601 10606 + 10606 10744 10739 + 10739 10744 10745 + 10745 10740 10739 + 10740 10745 10746 + 10741 10740 10746 + 10741 10746 10742 + 10744 10606 10605 + 10605 10615 10744 + 10744 10615 10747 + 10747 10745 10744 + 10745 10747 10746 + 10746 10747 10620 + 10620 10748 10746 + 10746 10748 10742 + 10620 10747 10615 + 10625 10748 10620 + 10748 10625 10749 + 10749 10750 10748 + 10748 10750 10742 + 10751 10742 10750 + 10752 10742 10751 + 10742 10752 10743 + 10753 10749 10625 + 10754 10749 10753 + 10750 10749 10754 + 10754 10755 10750 + 10750 10755 10751 + 10625 10624 10753 + 10756 10753 10624 + 10757 10753 10756 + 10753 10757 10754 + 10758 10754 10757 + 10755 10754 10758 + 10758 10759 10755 + 10751 10755 10759 + 10624 10623 10756 + 10630 10756 10623 + 10760 10756 10630 + 10756 10760 10757 + 10757 10760 10761 + 10761 10762 10757 + 10757 10762 10758 + 10763 10758 10762 + 10758 10763 10759 + 10630 10764 10760 + 10761 10760 10764 + 10764 10765 10761 + 10766 10761 10765 + 10762 10761 10766 + 10766 10767 10762 + 10762 10767 10763 + 10768 10763 10767 + 10759 10763 10768 + 10769 10764 10630 + 10764 10769 10770 + 10770 10765 10764 + 10770 10771 10765 + 10765 10771 10766 + 10766 10771 10772 + 10773 10766 10772 + 10767 10766 10773 + 10769 10630 10774 + 10774 10775 10769 + 10769 10775 10776 + 10776 10770 10769 + 10771 10770 10776 + 10776 10772 10771 + 10629 10774 10630 + 10777 10774 10629 + 10777 10775 10774 + 10775 10777 10778 + 10778 10776 10775 + 10772 10776 10778 + 10772 10778 10779 + 10779 10780 10772 + 10772 10780 10443 + 10443 10773 10772 + 10629 10635 10777 + 10778 10777 10635 + 10635 10779 10778 + 10781 10779 10635 + 10781 10780 10779 + 10780 10781 10782 + 10782 10444 10780 + 10780 10444 10443 + 10635 10634 10781 + 10781 10634 10640 + 10640 10782 10781 + 10645 10782 10640 + 10782 10645 10439 + 10439 10444 10782 + 10439 10645 10783 + 10783 10440 10439 + 10441 10440 10783 + 10441 10783 10644 + 10644 10783 10645 + 10447 10773 10443 + 10773 10447 10452 + 10452 10784 10773 + 10773 10784 10767 + 10767 10784 10785 + 10785 10768 10767 + 10784 10452 10786 + 10786 10787 10784 + 10784 10787 10785 + 10788 10786 10452 + 10789 10786 10788 + 10787 10786 10789 + 10789 10790 10787 + 10787 10790 10791 + 10791 10785 10787 + 10452 10451 10788 + 10457 10788 10451 + 10788 10457 10465 + 10465 10792 10788 + 10788 10792 10789 + 10789 10792 10793 + 10793 10794 10789 + 10790 10789 10794 + 10794 10795 10790 + 10790 10795 10796 + 10796 10791 10790 + 10792 10465 10797 + 10797 10793 10792 + 10793 10797 10798 + 10798 10799 10793 + 10793 10799 10800 + 10800 10794 10793 + 10795 10794 10800 + 10801 10797 10465 + 10798 10797 10801 + 10801 10802 10798 + 10798 10802 10803 + 10803 10804 10798 + 10799 10798 10804 + 10465 10464 10801 + 10470 10801 10464 + 10801 10470 10805 + 10805 10802 10801 + 10802 10805 10806 + 10806 10803 10802 + 10803 10806 10807 + 10807 10808 10803 + 10803 10808 10809 + 10809 10804 10803 + 10805 10470 10469 + 10469 10810 10805 + 10805 10810 10811 + 10811 10806 10805 + 10807 10806 10811 + 10811 10812 10807 + 10807 10812 10813 + 10813 10814 10807 + 10808 10807 10814 + 10479 10810 10469 + 10810 10479 10815 + 10815 10811 10810 + 10811 10815 10816 + 10816 10812 10811 + 10812 10816 10817 + 10817 10813 10812 + 10818 10815 10479 + 10816 10815 10818 + 10818 10819 10816 + 10816 10819 10820 + 10820 10817 10816 + 10821 10817 10820 + 10813 10817 10821 + 10479 10478 10818 + 10484 10818 10478 + 10818 10484 10822 + 10822 10819 10818 + 10819 10822 10823 + 10823 10820 10819 + 10820 10823 10824 + 10824 10825 10820 + 10820 10825 10821 + 10822 10484 10483 + 10483 10826 10822 + 10822 10826 10827 + 10827 10823 10822 + 10824 10823 10827 + 10827 10828 10824 + 10824 10828 10829 + 10829 10830 10824 + 10825 10824 10830 + 10491 10826 10483 + 10826 10491 10831 + 10831 10827 10826 + 10827 10831 10832 + 10832 10828 10827 + 10828 10832 10833 + 10833 10829 10828 + 10500 10831 10491 + 10832 10831 10500 + 10500 10834 10832 + 10832 10834 10835 + 10835 10833 10832 + 10836 10833 10835 + 10829 10833 10836 + 10836 10837 10829 + 10829 10837 10838 + 10838 10830 10829 + 10839 10834 10500 + 10834 10839 10840 + 10840 10835 10834 + 10835 10840 10841 + 10841 10842 10835 + 10835 10842 10836 + 10500 10499 10839 + 10839 10499 10505 + 10505 10843 10839 + 10840 10839 10843 + 10843 10844 10840 + 10841 10840 10844 + 10844 10845 10841 + 10846 10841 10845 + 10842 10841 10846 + 10846 10847 10842 + 10836 10842 10847 + 10843 10505 10504 + 10504 10848 10843 + 10843 10848 10849 + 10849 10844 10843 + 10845 10844 10849 + 10849 10850 10845 + 10845 10850 10851 + 10851 10852 10845 + 10845 10852 10846 + 10848 10504 10509 + 10509 10853 10848 + 10848 10853 10854 + 10854 10849 10848 + 10850 10849 10854 + 10854 10855 10850 + 10850 10855 10856 + 10856 10851 10850 + 10516 10853 10509 + 10853 10516 10857 + 10857 10854 10853 + 10854 10857 10858 + 10858 10855 10854 + 10855 10858 10859 + 10859 10856 10855 + 10860 10857 10516 + 10858 10857 10860 + 10860 10861 10858 + 10858 10861 10862 + 10862 10859 10858 + 10863 10859 10862 + 10856 10859 10863 + 10516 10521 10860 + 10864 10860 10521 + 10860 10864 10865 + 10865 10861 10860 + 10861 10865 10866 + 10866 10862 10861 + 10862 10866 10867 + 10867 10868 10862 + 10862 10868 10863 + 10521 10520 10864 + 10869 10864 10520 + 10865 10864 10869 + 10869 10870 10865 + 10865 10870 10871 + 10871 10866 10865 + 10867 10866 10871 + 10520 10529 10869 + 10872 10869 10529 + 10869 10872 10873 + 10873 10870 10869 + 10870 10873 10874 + 10874 10871 10870 + 10871 10874 10875 + 10875 10876 10871 + 10871 10876 10867 + 10529 10528 10872 + 10872 10528 10877 + 10877 10878 10872 + 10878 10879 10872 + 10873 10872 10879 + 10879 10880 10873 + 10874 10873 10880 + 10880 10881 10874 + 10875 10874 10881 + 10534 10877 10528 + 10877 10534 10882 + 10882 10883 10877 + 10877 10883 10884 + 10884 10878 10877 + 10885 10878 10884 + 10878 10885 10886 + 10886 10879 10878 + 10880 10879 10886 + 10882 10534 10533 + 10533 10887 10882 + 10888 10882 10887 + 10883 10882 10888 + 10888 10889 10883 + 10883 10889 10890 + 10890 10884 10883 + 10885 10884 10890 + 10887 10533 10665 + 10887 10665 10670 + 10670 10891 10887 + 10887 10891 10888 + 10892 10888 10891 + 10888 10892 10893 + 10893 10889 10888 + 10889 10893 10894 + 10894 10890 10889 + 10895 10891 10670 + 10891 10895 10892 + 10896 10892 10895 + 10893 10892 10896 + 10896 10897 10893 + 10893 10897 10898 + 10898 10899 10893 + 10899 10894 10893 + 10670 10900 10895 + 10895 10900 10901 + 10901 10902 10895 + 10895 10902 10896 + 10903 10896 10902 + 10903 10897 10896 + 10900 10670 10904 + 10904 10905 10900 + 10901 10900 10905 + 10905 10906 10901 + 10907 10901 10906 + 10907 10902 10901 + 10902 10907 10903 + 10669 10904 10670 + 10908 10904 10669 + 10908 10905 10904 + 10905 10908 10688 + 10688 10906 10905 + 10687 10906 10688 + 10906 10687 10907 + 10907 10687 10686 + 10903 10907 10686 + 10909 10903 10686 + 10897 10903 10909 + 10669 10668 10908 + 10688 10908 10668 + 9849 9409 9414 + 9414 9850 9849 + 9850 9414 10910 + 10910 10911 9850 + 9850 10911 9845 + 10912 9845 10911 + 9839 9845 10912 + 10912 9840 9839 + 10910 9414 9413 + 9413 9419 10910 + 10913 10910 9419 + 10911 10910 10913 + 10913 10914 10911 + 10911 10914 10912 + 10915 10912 10914 + 9840 10912 10915 + 10915 10916 9840 + 9840 10916 9835 + 9419 9424 10913 + 10917 10913 9424 + 10914 10913 10917 + 10917 10918 10914 + 10914 10918 10915 + 10919 10915 10918 + 10916 10915 10919 + 10919 10920 10916 + 10916 10920 10921 + 10921 9835 10916 + 9830 9835 10921 + 9424 10922 10917 + 10923 10917 10922 + 10918 10917 10923 + 10923 10924 10918 + 10918 10924 10919 + 10925 10919 10924 + 10920 10919 10925 + 9423 10922 9424 + 10922 9423 9429 + 9429 10926 10922 + 10922 10926 10923 + 10927 10923 10926 + 10924 10923 10927 + 10927 10928 10924 + 10924 10928 10925 + 10929 10925 10928 + 10930 10925 10929 + 10925 10930 10920 + 10926 9429 9434 + 9434 10931 10926 + 10926 10931 10927 + 10932 10927 10931 + 10928 10927 10932 + 10932 10933 10928 + 10928 10933 10929 + 10934 10929 10933 + 10935 10929 10934 + 10929 10935 10930 + 10931 9434 10936 + 10936 10937 10931 + 10931 10937 10932 + 10938 10932 10937 + 10933 10932 10938 + 10938 10939 10933 + 10933 10939 10934 + 10936 9434 9433 + 9433 10940 10936 + 10941 10936 10940 + 10937 10936 10941 + 10941 10942 10937 + 10937 10942 10938 + 10943 10938 10942 + 10939 10938 10943 + 9438 10940 9433 + 10940 9438 9443 + 9443 10944 10940 + 10940 10944 10941 + 10945 10941 10944 + 10942 10941 10945 + 10945 10946 10942 + 10942 10946 10943 + 10947 10943 10946 + 10948 10943 10947 + 10943 10948 10939 + 10944 9443 10949 + 10949 10950 10944 + 10944 10950 10945 + 10951 10945 10950 + 10946 10945 10951 + 10951 10952 10946 + 10946 10952 10947 + 10953 10949 9443 + 10954 10949 10953 + 10950 10949 10954 + 10954 10955 10950 + 10950 10955 10951 + 10956 10951 10955 + 10952 10951 10956 + 9443 9442 10953 + 10957 10953 9442 + 10953 10957 10958 + 10953 10958 10954 + 10959 10954 10958 + 10955 10954 10959 + 10959 10960 10955 + 10955 10960 10956 + 9442 9441 10957 + 10957 9441 9448 + 9448 10961 10957 + 10961 10962 10957 + 10958 10957 10962 + 10962 10963 10958 + 10958 10963 10964 + 10964 10959 10958 + 10965 10959 10964 + 10960 10959 10965 + 10966 10961 9448 + 10961 10966 10967 + 10967 10968 10961 + 10961 10968 10969 + 10969 10962 10961 + 10963 10962 10969 + 10963 10969 10970 + 10970 10964 10963 + 9448 9447 10966 + 10966 9447 9717 + 10971 10966 9717 + 10967 10966 10971 + 10971 9745 10967 + 10972 10967 9745 + 10968 10967 10972 + 9446 9717 9447 + 9745 10971 9736 + 9736 10971 9731 + 9722 9731 10971 + 9717 9722 10971 + 8740 8739 9767 + 9767 8739 10973 + 10973 9762 9767 + 9762 10973 10974 + 9762 10974 9757 + 9752 9757 10974 + 8738 10973 8739 + 10974 10973 8738 + 8738 10975 10974 + 10974 10975 9752 + 8738 8737 10975 + 10975 8737 10976 + 10976 10977 10975 + 10975 10977 9752 + 10976 8737 10978 + 10978 10979 10976 + 10980 10981 10982 + 10983 10981 10980 + 10981 10983 10984 + 10981 10984 10985 + 10985 10986 10981 + 10981 10986 10987 + 10980 10988 10983 + 10983 10988 10989 + 10989 10990 10983 + 10984 10983 10990 + 10990 10991 10984 + 10984 10991 10992 + 10992 10985 10984 + 10980 10993 10988 + 10988 10993 10994 + 10994 10989 10988 + 10989 10994 10995 + 10989 10995 10996 + 10996 10990 10989 + 10991 10990 10996 + 10993 10980 10997 + 10997 10998 10993 + 10994 10993 10998 + 10999 10994 10998 + 10995 10994 10999 + 10999 11000 10995 + 10996 10995 11000 + 11001 10997 10980 + 11002 10997 11001 + 10998 10997 11002 + 11002 11003 10998 + 10998 11003 11004 + 11004 11005 10998 + 10998 11005 10999 + 11006 10999 11005 + 10999 11006 11000 + 11001 11007 11002 + 11008 11002 11007 + 11003 11002 11008 + 11008 11009 11003 + 11003 11009 11010 + 11004 11003 11010 + 11011 11007 11001 + 11007 11011 11012 + 11012 11013 11007 + 11007 11013 11008 + 11014 11008 11013 + 11009 11008 11014 + 11014 11015 11009 + 11009 11015 11016 + 11016 11010 11009 + 11012 11011 11017 + 11018 11012 11017 + 11019 11012 11018 + 11013 11012 11019 + 11019 11020 11013 + 11013 11020 11014 + 11021 11017 11011 + 11017 11021 11022 + 11017 11022 11023 + 11023 11024 11017 + 11017 11024 11025 + 11025 11018 11017 + 11011 11026 11021 + 11021 11026 11027 + 11027 11028 11021 + 11022 11021 11028 + 11028 11029 11022 + 11022 11029 11030 + 11030 11023 11022 + 53 11026 11011 + 52 11027 11026 + 11026 11001 52 + 11031 11032 11033 + 11032 11034 11033 + 11034 11035 11033 + 11035 11036 11033 + 11037 11033 11036 + 11033 11037 11038 + 11038 11039 11033 + 11033 11039 11040 + 11040 11041 11033 + 11033 11041 11042 + 11043 11034 11032 + 11034 11043 11044 + 11044 11045 11034 + 11034 11045 11046 + 11046 11035 11034 + 11032 11047 11043 + 11048 11043 11047 + 11044 11043 11048 + 11048 11049 11044 + 11050 11044 11049 + 11045 11044 11050 + 11050 11051 11045 + 11046 11045 11051 + 11032 11052 11047 + 11047 11052 11053 + 11053 11054 11047 + 11047 11054 11048 + 11052 11032 11055 + 11055 64 11052 + 11053 11052 64 + 11056 11053 64 + 11057 11053 11056 + 11053 11057 11054 + 11054 11057 11058 + 11058 11059 11054 + 11054 11059 11048 + 64 11060 11056 + 11061 11056 11060 + 11061 11062 11056 + 11056 11062 11057 + 11057 11062 11063 + 11063 11064 11057 + 11064 11058 11057 + 11065 11060 64 + 11066 11060 11065 + 11060 11066 11061 + 11061 11066 11067 + 11068 11061 11067 + 11062 11061 11068 + 11068 11063 11062 + 64 11069 11065 + 11040 11070 11041 + 11070 11040 11071 + 11071 11072 11070 + 11073 11072 11071 + 11072 11073 11074 + 11074 11075 11072 + 11076 11072 11075 + 11071 11040 11039 + 11077 11071 11039 + 11073 11071 11077 + 11077 11078 11073 + 11073 11078 11079 + 11074 11073 11079 + 11079 11080 11074 + 11081 11074 11080 + 11081 11075 11074 + 11082 11077 11039 + 11083 11077 11082 + 11083 11078 11077 + 11078 11083 11084 + 11084 11079 11078 + 11039 11085 11082 + 11086 11082 11085 + 11082 11086 11087 + 11082 11087 11083 + 11083 11087 11088 + 11088 11089 11083 + 11089 11084 11083 + 11090 11085 11039 + 11091 11085 11090 + 11085 11091 11086 + 11092 11086 11091 + 11087 11086 11092 + 11092 11088 11087 + 11093 11088 11092 + 11088 11093 11094 + 11094 11089 11088 + 11039 11038 11090 + 11095 11090 11038 + 11091 11090 11095 + 11095 11096 11091 + 11091 11096 11097 + 11097 11092 11091 + 11098 11092 11097 + 11092 11098 11093 + 11038 11099 11095 + 11100 11095 11099 + 11095 11100 11101 + 11101 11096 11095 + 11096 11101 11102 + 11102 11097 11096 + 11103 11099 11038 + 11104 11099 11103 + 11099 11104 11100 + 11105 11100 11104 + 11101 11100 11105 + 11105 11106 11101 + 11101 11106 11107 + 11107 11102 11101 + 11038 11037 11103 + 11108 11103 11037 + 11109 11103 11108 + 11103 11109 11104 + 11104 11109 11110 + 11110 11111 11104 + 11104 11111 11105 + 11037 11112 11108 + 11113 11108 11112 + 11114 11108 11113 + 11108 11114 11109 + 11110 11109 11114 + 11036 11112 11037 + 11115 11112 11036 + 11112 11115 11113 + 11116 11113 11115 + 11117 11113 11116 + 11113 11117 11114 + 11114 11117 11118 + 11118 11119 11114 + 11114 11119 11110 + 11115 11036 11035 + 11035 11120 11115 + 11115 11120 11116 + 11121 11116 11120 + 11122 11116 11121 + 11116 11122 11117 + 11118 11117 11122 + 11123 11120 11035 + 11120 11123 11121 + 11124 11121 11123 + 11125 11121 11124 + 11121 11125 11122 + 11122 11125 11126 + 11126 11127 11122 + 11122 11127 11118 + 11035 11046 11123 + 11123 11046 11128 + 11128 11129 11123 + 11123 11129 11124 + 11130 11124 11129 + 11131 11124 11130 + 11124 11131 11125 + 11126 11125 11131 + 11051 11128 11046 + 11132 11128 11051 + 11128 11132 11133 + 11133 11129 11128 + 11129 11133 11130 + 11134 11130 11133 + 11135 11130 11134 + 11130 11135 11131 + 11051 11136 11132 + 11132 11136 11137 + 11137 11138 11132 + 11133 11132 11138 + 11138 11139 11133 + 11133 11139 11134 + 11140 11136 11051 + 11136 11140 11141 + 11141 11137 11136 + 11137 11141 11142 + 11142 11143 11137 + 11137 11143 11144 + 11144 11138 11137 + 11051 11050 11140 + 11140 11050 11145 + 11145 11146 11140 + 11140 11146 11147 + 11147 11141 11140 + 11142 11141 11147 + 11049 11145 11050 + 11148 11145 11049 + 11146 11145 11148 + 11146 11148 11149 + 11149 11147 11146 + 11147 11149 11150 + 11150 11151 11147 + 11147 11151 11142 + 11049 11152 11148 + 11149 11148 11152 + 11153 11149 11152 + 11150 11149 11153 + 11153 11154 11150 + 11155 11150 11154 + 11151 11150 11155 + 11155 11156 11151 + 11142 11151 11156 + 11157 11152 11049 + 11152 11157 11158 + 11158 11159 11152 + 11152 11159 11153 + 11160 11153 11159 + 11153 11160 11161 + 11161 11154 11153 + 11049 11048 11157 + 11157 11048 11162 + 11162 11163 11157 + 11157 11163 11164 + 11164 11165 11157 + 11165 11158 11157 + 11059 11162 11048 + 11166 11162 11059 + 11162 11166 11163 + 11163 11166 11167 + 11167 11164 11163 + 11168 11164 11167 + 11164 11168 11169 + 11169 11165 11164 + 11059 11170 11166 + 11167 11166 11170 + 11170 11171 11167 + 11171 11172 11167 + 11173 11167 11172 + 11167 11173 11168 + 11059 11058 11170 + 11170 11058 11064 + 11064 11171 11170 + 11064 11174 11171 + 11171 11174 11175 + 11175 11172 11171 + 11172 11175 11176 + 11172 11176 11173 + 11177 11173 11176 + 11168 11173 11177 + 11174 11064 11063 + 11063 11178 11174 + 11174 11178 11179 + 11179 11180 11174 + 11180 11175 11174 + 11176 11175 11180 + 11180 11181 11176 + 11176 11181 11177 + 11068 11178 11063 + 11178 11068 11182 + 11182 11179 11178 + 11182 11183 11179 + 11179 11183 11184 + 11184 11180 11179 + 11180 11184 11181 + 11181 11184 11185 + 11185 11186 11181 + 11181 11186 11177 + 11182 11068 11067 + 11187 11182 11067 + 11183 11182 11187 + 11187 11188 11183 + 11184 11183 11188 + 11188 11189 11184 + 11189 11185 11184 + 11190 11185 11189 + 11186 11185 11190 + 11186 11190 11191 + 11191 11177 11186 + 11067 11192 11187 + 11193 11187 11192 + 11187 11193 11188 + 11188 11193 11194 + 11194 11189 11188 + 11189 11194 11195 + 11189 11195 11190 + 11191 11190 11195 + 11196 11192 11067 + 11192 11196 11197 + 11192 11197 11193 + 11194 11193 11197 + 11197 11198 11194 + 11195 11194 11198 + 11198 11199 11195 + 11195 11199 11200 + 11200 11191 11195 + 11067 11201 11196 + 11202 11196 11201 + 11197 11196 11202 + 11202 11198 11197 + 11198 11202 11203 + 11203 11199 11198 + 11199 11203 11204 + 11204 11200 11199 + 11067 11205 11201 + 11201 11205 11206 + 11206 11207 11201 + 11201 11207 11202 + 11205 11067 11208 + 11208 11209 11205 + 11205 11209 11210 + 11206 11205 11210 + 11210 11211 11206 + 11212 11206 11211 + 11212 11207 11206 + 11213 11208 11067 + 11214 11208 11213 + 11208 11214 11209 + 11209 11214 11215 + 11215 11216 11209 + 11209 11216 11210 + 11081 11213 11067 + 11080 11213 11081 + 11213 11080 11217 + 11213 11217 11214 + 11215 11214 11217 + 11217 11218 11215 + 11219 11215 11218 + 11216 11215 11219 + 11066 11081 11067 + 11075 11081 11066 + 11066 11065 11075 + 11075 11065 11220 + 11065 11221 11220 + 11217 11080 11079 + 11079 11218 11217 + 11222 11218 11079 + 11218 11222 11219 + 11219 11222 11223 + 11223 11224 11219 + 11224 11225 11219 + 11216 11219 11225 + 11225 11226 11216 + 11216 11226 11210 + 11079 11084 11222 + 11222 11084 11089 + 11089 11223 11222 + 11223 11089 11094 + 11223 11094 11227 + 11227 11224 11223 + 11228 11224 11227 + 11224 11228 11229 + 11229 11225 11224 + 11229 11226 11225 + 11226 11229 11230 + 11230 11210 11226 + 11227 11094 11093 + 11231 11227 11093 + 11228 11227 11231 + 11231 11232 11228 + 11229 11228 11232 + 11230 11229 11232 + 11233 11230 11232 + 11234 11230 11233 + 11234 11210 11230 + 11210 11234 11235 + 11235 11211 11210 + 11236 11231 11093 + 11236 11232 11231 + 11232 11236 11237 + 11237 11238 11232 + 11232 11238 11239 + 11239 11233 11232 + 11093 11098 11236 + 11236 11098 11240 + 11240 11241 11236 + 11241 11237 11236 + 11242 11237 11241 + 11237 11242 11238 + 11238 11242 11243 + 11243 11239 11238 + 11097 11240 11098 + 11244 11240 11097 + 11240 11244 11245 + 11245 11241 11240 + 11241 11245 11246 + 11246 11247 11241 + 11241 11247 11242 + 11243 11242 11247 + 11097 11102 11244 + 11244 11102 11107 + 11107 11248 11244 + 11244 11248 11249 + 11249 11245 11244 + 11246 11245 11249 + 11249 11250 11246 + 11246 11250 11251 + 11251 11252 11246 + 11247 11246 11252 + 11253 11248 11107 + 11248 11253 11254 + 11254 11249 11248 + 11249 11254 11255 + 11255 11250 11249 + 11250 11255 11256 + 11256 11251 11250 + 11107 11257 11253 + 11253 11257 11258 + 11258 11259 11253 + 11253 11259 11260 + 11260 11254 11253 + 11255 11254 11260 + 11257 11107 11106 + 11106 11261 11257 + 11258 11257 11261 + 11261 11262 11258 + 11263 11258 11262 + 11258 11263 11264 + 11264 11259 11258 + 11259 11264 11265 + 11265 11260 11259 + 11261 11106 11105 + 11105 11266 11261 + 11261 11266 11267 + 11267 11262 11261 + 11268 11262 11267 + 11262 11268 11263 + 11263 11268 11269 + 11269 11270 11263 + 11264 11263 11270 + 11266 11105 11111 + 11111 11271 11266 + 11267 11266 11271 + 11271 11272 11267 + 11273 11267 11272 + 11267 11273 11268 + 11268 11273 11274 + 11274 11269 11268 + 11271 11111 11110 + 11110 11275 11271 + 11271 11275 11276 + 11276 11272 11271 + 11277 11272 11276 + 11272 11277 11273 + 11274 11273 11277 + 11277 11278 11274 + 11279 11274 11278 + 11269 11274 11279 + 11275 11110 11119 + 11119 11280 11275 + 11276 11275 11280 + 11280 11281 11276 + 11282 11276 11281 + 11276 11282 11277 + 11277 11282 11283 + 11283 11278 11277 + 11280 11119 11118 + 11118 11284 11280 + 11280 11284 11285 + 11285 11281 11280 + 11286 11281 11285 + 11281 11286 11282 + 11283 11282 11286 + 11286 11287 11283 + 11288 11283 11287 + 11278 11283 11288 + 11284 11118 11127 + 11127 11289 11284 + 11285 11284 11289 + 11289 11290 11285 + 11291 11285 11290 + 11285 11291 11286 + 11286 11291 11292 + 11292 11287 11286 + 11289 11127 11126 + 11126 11293 11289 + 11289 11293 11294 + 11294 11290 11289 + 11295 11290 11294 + 11290 11295 11291 + 11292 11291 11295 + 11295 11296 11292 + 11297 11292 11296 + 11287 11292 11297 + 11293 11126 11298 + 11298 11299 11293 + 11294 11293 11299 + 11299 11300 11294 + 11301 11294 11300 + 11294 11301 11295 + 11295 11301 11302 + 11302 11296 11295 + 11131 11298 11126 + 11303 11298 11131 + 11299 11298 11303 + 11303 11304 11299 + 11299 11304 11305 + 11305 11300 11299 + 11306 11300 11305 + 11300 11306 11301 + 11302 11301 11306 + 11131 11135 11303 + 11303 11135 11307 + 11307 11308 11303 + 11304 11303 11308 + 11308 11309 11304 + 11305 11304 11309 + 11309 11310 11305 + 11311 11305 11310 + 11305 11311 11306 + 11134 11307 11135 + 11307 11134 11312 + 11312 11313 11307 + 11307 11313 11314 + 11314 11308 11307 + 11309 11308 11314 + 11314 11315 11309 + 11309 11315 11316 + 11316 11310 11309 + 11312 11134 11139 + 11139 11317 11312 + 11312 11317 11318 + 11318 11319 11312 + 11313 11312 11319 + 11319 11320 11313 + 11314 11313 11320 + 11320 11321 11314 + 11315 11314 11321 + 11317 11139 11138 + 11138 11144 11317 + 11317 11144 11322 + 11322 11323 11317 + 11317 11323 11318 + 11324 11318 11323 + 11325 11318 11324 + 11318 11325 11326 + 11326 11319 11318 + 11320 11319 11326 + 11327 11322 11144 + 11328 11322 11327 + 11328 11323 11322 + 11323 11328 11324 + 11324 11328 11329 + 11329 11330 11324 + 11331 11324 11330 + 11324 11331 11325 + 11144 11143 11327 + 11332 11327 11143 + 11327 11332 11333 + 11333 11329 11327 + 11327 11329 11328 + 11143 11142 11332 + 11156 11332 11142 + 11333 11332 11156 + 11156 11334 11333 + 11335 11333 11334 + 11329 11333 11335 + 11335 11330 11329 + 11330 11335 11336 + 11336 11337 11330 + 11330 11337 11331 + 11338 11331 11337 + 11325 11331 11338 + 11334 11156 11155 + 11334 11155 11339 + 11339 11340 11334 + 11334 11340 11335 + 11336 11335 11340 + 11340 11341 11336 + 11342 11336 11341 + 11337 11336 11342 + 11342 11343 11337 + 11337 11343 11338 + 11344 11339 11155 + 11341 11339 11344 + 11341 11340 11339 + 11345 11344 11155 + 11346 11344 11345 + 11344 11346 11347 + 11347 11348 11344 + 11344 11348 11341 + 11341 11348 11342 + 11349 11342 11348 + 11343 11342 11349 + 11154 11345 11155 + 11350 11345 11154 + 11345 11350 11351 + 11351 11352 11345 + 11345 11352 11346 + 11154 11161 11350 + 11350 11161 11353 + 11353 11354 11350 + 11351 11350 11354 + 11354 11355 11351 + 11356 11351 11355 + 11352 11351 11356 + 11356 11357 11352 + 11346 11352 11357 + 11161 11358 11353 + 11359 11353 11358 + 11360 11353 11359 + 11353 11360 11361 + 11361 11354 11353 + 11355 11354 11361 + 11362 11358 11161 + 11363 11358 11362 + 11358 11363 11359 + 11359 11363 11364 + 11364 11365 11359 + 11360 11359 11365 + 11161 11160 11362 + 11362 11160 11366 + 11366 11367 11362 + 11368 11362 11367 + 11362 11368 11363 + 11363 11368 11369 + 11369 11364 11363 + 11159 11366 11160 + 11366 11159 11158 + 11158 11370 11366 + 11366 11370 11371 + 11371 11367 11366 + 11367 11371 11372 + 11372 11373 11367 + 11367 11373 11368 + 11368 11373 11374 + 11374 11369 11368 + 11370 11158 11165 + 11165 11375 11370 + 11370 11375 11376 + 11371 11370 11376 + 11376 11377 11371 + 11372 11371 11377 + 11377 11378 11372 + 11379 11372 11378 + 11373 11372 11379 + 11379 11374 11373 + 11375 11165 11169 + 11169 11380 11375 + 11375 11380 11381 + 11381 11376 11375 + 11376 11381 11382 + 11382 11383 11376 + 11376 11383 11384 + 11384 11377 11376 + 11378 11377 11384 + 11380 11169 11385 + 11385 11386 11380 + 11381 11380 11386 + 11386 11387 11381 + 11387 11388 11381 + 11382 11381 11388 + 11389 11385 11169 + 11390 11385 11389 + 11386 11385 11390 + 11390 11391 11386 + 11386 11391 11392 + 11392 11387 11386 + 11169 11168 11389 + 11168 11393 11389 + 11393 11394 11389 + 11395 11389 11394 + 11396 11389 11395 + 11389 11396 11390 + 11177 11393 11168 + 11177 11191 11393 + 11393 11191 11200 + 11200 11394 11393 + 11200 11204 11394 + 11394 11204 11395 + 11395 11204 11203 + 11203 11397 11395 + 11398 11395 11397 + 11395 11398 11396 + 11396 11398 11399 + 11399 11400 11396 + 11396 11400 11401 + 11390 11396 11401 + 11402 11397 11203 + 11397 11402 11403 + 11397 11403 11398 + 11399 11398 11403 + 11403 11404 11399 + 11404 11405 11399 + 11406 11399 11405 + 11399 11406 11400 + 11203 11202 11402 + 11407 11402 11202 + 11403 11402 11407 + 11407 11404 11403 + 11407 11408 11404 + 11404 11408 11409 + 11409 11405 11404 + 11405 11409 11410 + 11410 11411 11405 + 11405 11411 11406 + 11412 11407 11202 + 11408 11407 11412 + 11412 11413 11408 + 11408 11413 11414 + 11414 11409 11408 + 11410 11409 11414 + 11207 11412 11202 + 11415 11412 11207 + 11415 11413 11412 + 11413 11415 11416 + 11416 11414 11413 + 11416 11417 11414 + 11414 11417 11410 + 11410 11417 11418 + 11418 11419 11410 + 11411 11410 11419 + 11207 11212 11415 + 11415 11212 11420 + 11416 11415 11420 + 11421 11416 11420 + 11417 11416 11421 + 11421 11418 11417 + 11421 11422 11418 + 11418 11422 11423 + 11423 11419 11418 + 11424 11419 11423 + 11419 11424 11411 + 11212 11425 11420 + 11425 11426 11420 + 11426 11427 11420 + 11428 11420 11427 + 11420 11428 11429 + 11420 11429 11430 + 11430 11431 11420 + 11420 11431 11421 + 11211 11425 11212 + 11425 11211 11235 + 11425 11235 11432 + 11432 11426 11425 + 11426 11432 11433 + 11426 11433 11434 + 11434 11427 11426 + 11427 11434 11435 + 11427 11435 11428 + 11436 11432 11235 + 11433 11432 11436 + 11436 11437 11433 + 11433 11437 11438 + 11438 11434 11433 + 11435 11434 11438 + 11438 11439 11435 + 11435 11439 11440 + 11428 11435 11440 + 11235 11234 11436 + 11234 11441 11436 + 11442 11436 11441 + 11436 11442 11443 + 11443 11437 11436 + 11437 11443 11444 + 11444 11438 11437 + 11438 11444 11445 + 11445 11439 11438 + 11233 11441 11234 + 11441 11233 11446 + 11441 11446 11442 + 11447 11442 11446 + 11443 11442 11447 + 11447 11448 11443 + 11443 11448 11449 + 11449 11444 11443 + 11445 11444 11449 + 11446 11233 11239 + 11239 11450 11446 + 11446 11450 11447 + 11451 11447 11450 + 11447 11451 11448 + 11448 11451 11452 + 11452 11449 11448 + 11453 11449 11452 + 11449 11453 11445 + 11450 11239 11243 + 11243 11454 11450 + 11450 11454 11451 + 11451 11454 11455 + 11452 11451 11455 + 11455 11456 11452 + 11457 11452 11456 + 11452 11457 11453 + 11454 11243 11458 + 11458 11455 11454 + 11459 11455 11458 + 11455 11459 11460 + 11460 11456 11455 + 11456 11460 11461 + 11461 11462 11456 + 11456 11462 11457 + 11247 11458 11243 + 11252 11458 11247 + 11458 11252 11459 + 11459 11252 11251 + 11251 11463 11459 + 11459 11463 11464 + 11464 11460 11459 + 11461 11460 11464 + 11464 11465 11461 + 11461 11465 11466 + 11466 11467 11461 + 11462 11461 11467 + 11468 11463 11251 + 11463 11468 11469 + 11469 11464 11463 + 11464 11469 11470 + 11470 11465 11464 + 11465 11470 11471 + 11471 11466 11465 + 11251 11256 11468 + 11468 11256 11472 + 11472 11473 11468 + 11468 11473 11474 + 11474 11469 11468 + 11470 11469 11474 + 11474 11475 11470 + 11470 11475 11476 + 11476 11471 11470 + 11472 11256 11255 + 11255 11477 11472 + 11478 11472 11477 + 11472 11478 11479 + 11479 11473 11472 + 11473 11479 11480 + 11480 11474 11473 + 11474 11480 11481 + 11481 11475 11474 + 11260 11477 11255 + 11482 11477 11260 + 11477 11482 11478 + 11478 11482 11483 + 11483 11484 11478 + 11479 11478 11484 + 11484 11485 11479 + 11479 11485 11486 + 11486 11480 11479 + 11481 11480 11486 + 11260 11265 11482 + 11482 11265 11487 + 11487 11483 11482 + 11488 11483 11487 + 11483 11488 11489 + 11489 11484 11483 + 11485 11484 11489 + 11489 11490 11485 + 11485 11490 11491 + 11491 11486 11485 + 11487 11265 11264 + 11264 11492 11487 + 11493 11487 11492 + 11487 11493 11488 + 11488 11493 11494 + 11494 11495 11488 + 11488 11495 11496 + 11496 11489 11488 + 11490 11489 11496 + 11270 11492 11264 + 11492 11270 11497 + 11497 11498 11492 + 11492 11498 11493 + 11493 11498 11499 + 11499 11494 11493 + 11500 11494 11499 + 11494 11500 11501 + 11501 11495 11494 + 11497 11270 11269 + 11269 11502 11497 + 11503 11497 11502 + 11498 11497 11503 + 11503 11499 11498 + 11504 11499 11503 + 11499 11504 11500 + 11505 11500 11504 + 11501 11500 11505 + 11279 11502 11269 + 11502 11279 11506 + 11506 11507 11502 + 11502 11507 11503 + 11508 11503 11507 + 11503 11508 11504 + 11504 11508 11509 + 11509 11510 11504 + 11504 11510 11505 + 11511 11506 11279 + 11512 11506 11511 + 11506 11512 11513 + 11513 11507 11506 + 11507 11513 11508 + 11509 11508 11513 + 11279 11514 11511 + 11515 11511 11514 + 11516 11511 11515 + 11511 11516 11512 + 11517 11512 11516 + 11513 11512 11517 + 11517 11518 11513 + 11513 11518 11509 + 11278 11514 11279 + 11288 11514 11278 + 11514 11288 11515 + 11519 11515 11288 + 11520 11515 11519 + 11515 11520 11516 + 11516 11520 11521 + 11521 11522 11516 + 11516 11522 11517 + 11288 11523 11519 + 11524 11519 11523 + 11525 11519 11524 + 11519 11525 11520 + 11521 11520 11525 + 11287 11523 11288 + 11297 11523 11287 + 11523 11297 11524 + 11526 11524 11297 + 11527 11524 11526 + 11524 11527 11525 + 11525 11527 11528 + 11528 11529 11525 + 11525 11529 11521 + 11297 11530 11526 + 11531 11526 11530 + 11532 11526 11531 + 11526 11532 11527 + 11528 11527 11532 + 11296 11530 11297 + 11533 11530 11296 + 11530 11533 11531 + 11534 11531 11533 + 11535 11531 11534 + 11531 11535 11532 + 11532 11535 11536 + 11536 11537 11532 + 11532 11537 11528 + 11296 11302 11533 + 11533 11302 11538 + 11538 11539 11533 + 11533 11539 11534 + 11540 11534 11539 + 11541 11534 11540 + 11534 11541 11535 + 11536 11535 11541 + 11306 11538 11302 + 11542 11538 11306 + 11538 11542 11543 + 11543 11539 11538 + 11539 11543 11540 + 11544 11540 11543 + 11545 11540 11544 + 11540 11545 11541 + 11306 11311 11542 + 11542 11311 11546 + 11546 11547 11542 + 11543 11542 11547 + 11547 11548 11543 + 11543 11548 11544 + 11549 11544 11548 + 11550 11544 11549 + 11544 11550 11545 + 11310 11546 11311 + 11546 11310 11316 + 11316 11551 11546 + 11546 11551 11552 + 11552 11547 11546 + 11547 11552 11553 + 11553 11548 11547 + 11548 11553 11549 + 11554 11549 11553 + 11555 11549 11554 + 11549 11555 11550 + 11551 11316 11556 + 11556 11557 11551 + 11552 11551 11557 + 11557 11558 11552 + 11553 11552 11558 + 11558 11559 11553 + 11553 11559 11554 + 11560 11556 11316 + 11561 11556 11560 + 11557 11556 11561 + 11561 11562 11557 + 11557 11562 11563 + 11563 11558 11557 + 11558 11563 11564 + 11564 11559 11558 + 11316 11315 11560 + 11321 11560 11315 + 11560 11321 11565 + 11565 11566 11560 + 11560 11566 11561 + 11561 11566 11567 + 11567 11568 11561 + 11562 11561 11568 + 11568 11569 11562 + 11563 11562 11569 + 11565 11321 11320 + 11320 11570 11565 + 11565 11570 11571 + 11571 11572 11565 + 11566 11565 11572 + 11572 11567 11566 + 11326 11570 11320 + 11570 11326 11573 + 11573 11571 11570 + 11571 11573 11574 + 11574 11575 11571 + 11571 11575 11576 + 11576 11572 11571 + 11567 11572 11576 + 11577 11573 11326 + 11574 11573 11577 + 11577 11578 11574 + 11579 11574 11578 + 11575 11574 11579 + 11579 11580 11575 + 11576 11575 11580 + 11326 11325 11577 + 11338 11577 11325 + 11578 11577 11338 + 11338 11581 11578 + 11578 11581 11582 + 11582 11583 11578 + 11578 11583 11584 + 11584 11579 11578 + 11585 11579 11584 + 11580 11579 11585 + 11581 11338 11343 + 11343 11586 11581 + 11581 11586 11587 + 11587 11582 11581 + 11588 11582 11587 + 11588 11583 11582 + 11583 11588 11589 + 11589 11584 11583 + 11590 11584 11589 + 11584 11590 11585 + 11349 11586 11343 + 11586 11349 11591 + 11591 11587 11586 + 11587 11591 11592 + 11592 11593 11587 + 11587 11593 11588 + 11588 11593 11594 + 11594 11589 11588 + 11595 11589 11594 + 11589 11595 11590 + 11591 11349 11347 + 11347 11596 11591 + 11592 11591 11596 + 11596 11597 11592 + 11598 11592 11597 + 11593 11592 11598 + 11598 11594 11593 + 11348 11347 11349 + 11599 8724 11600 + 11600 11601 11599 + 11041 11602 11603 + 11603 11604 11041 + 8644 11605 8651 + 8651 8645 8644 + 8645 8651 11606 + 11606 8646 8645 + 8646 11606 11607 + 8646 11607 11608 + 11608 11609 8646 + 8646 11609 8647 + 11606 8651 8654 + 8654 11610 11606 + 11610 11611 11606 + 11607 11606 11611 + 11611 11612 11607 + 11607 11612 11613 + 11613 11608 11607 + 11614 11608 11613 + 11609 11608 11614 + 11615 11610 8654 + 11616 11610 11615 + 11610 11616 11617 + 11617 11611 11610 + 11617 11612 11611 + 11612 11617 11618 + 11618 11613 11612 + 8654 8658 11615 + 11615 8658 8663 + 8663 11619 11615 + 11616 11615 11619 + 11619 11620 11616 + 11616 11620 11618 + 11617 11616 11618 + 11621 11619 8663 + 11619 11621 11622 + 11622 11620 11619 + 11620 11622 11623 + 11623 11618 11620 + 11613 11618 11623 + 11623 11624 11613 + 11613 11624 11614 + 8663 8667 11621 + 11625 11621 8667 + 11622 11621 11625 + 11625 11626 11622 + 11623 11622 11626 + 11626 11627 11623 + 11624 11623 11627 + 11627 11628 11624 + 11624 11628 11629 + 11629 11614 11624 + 8667 8671 11625 + 11630 11625 8671 + 11625 11630 11631 + 11631 11626 11625 + 11626 11631 11632 + 11632 11627 11626 + 11628 11627 11632 + 11632 11633 11628 + 11628 11633 11634 + 11634 11629 11628 + 8671 8677 11630 + 11635 11630 8677 + 11631 11630 11635 + 11635 11636 11631 + 11632 11631 11636 + 11636 11637 11632 + 11633 11632 11637 + 11637 11638 11633 + 11633 11638 11639 + 11639 11634 11633 + 8677 11640 11635 + 11641 11635 11640 + 11635 11641 11642 + 11642 11636 11635 + 11636 11642 11643 + 11643 11637 11636 + 11638 11637 11643 + 8676 11640 8677 + 11640 8676 8675 + 8675 11644 11640 + 11640 11644 11641 + 11645 11641 11644 + 11642 11641 11645 + 11645 11646 11642 + 11643 11642 11646 + 11646 11647 11643 + 11648 11643 11647 + 11643 11648 11638 + 11644 8675 8681 + 8681 11649 11644 + 11644 11649 11645 + 11650 11645 11649 + 11645 11650 11651 + 11651 11646 11645 + 11646 11651 11652 + 11652 11647 11646 + 11653 11647 11652 + 11647 11653 11648 + 11649 8681 11654 + 11654 11655 11649 + 11649 11655 11650 + 11656 11650 11655 + 11651 11650 11656 + 11656 11657 11651 + 11651 11657 11658 + 11652 11651 11658 + 11654 8681 8680 + 8680 11659 11654 + 11660 11654 11659 + 11655 11654 11660 + 11660 11661 11655 + 11655 11661 11656 + 11662 11656 11661 + 11662 11657 11656 + 11657 11662 11663 + 11663 11658 11657 + 8685 11659 8680 + 11659 8685 11664 + 11664 11665 11659 + 11659 11665 11660 + 11666 11660 11665 + 11661 11660 11666 + 11666 11667 11661 + 11661 11667 11662 + 11663 11662 11667 + 11664 8685 11668 + 11668 11669 11664 + 11670 11664 11669 + 11665 11664 11670 + 11670 11671 11665 + 11665 11671 11666 + 11672 11666 11671 + 11667 11666 11672 + 8684 11668 8685 + 8690 11668 8684 + 11668 8690 11673 + 11673 11669 11668 + 11669 11673 11674 + 11674 11675 11669 + 11669 11675 11670 + 11676 11670 11675 + 11671 11670 11676 + 11676 11677 11671 + 11671 11677 11672 + 11673 8690 11678 + 11678 11679 11673 + 11674 11673 11679 + 11679 11680 11674 + 11681 11674 11680 + 11675 11674 11681 + 11681 11682 11675 + 11675 11682 11676 + 8689 11678 8690 + 11683 11678 8689 + 11678 11683 11684 + 11684 11679 11678 + 11679 11684 11685 + 11685 11680 11679 + 11680 11685 11686 + 11686 11687 11680 + 11680 11687 11681 + 8689 8695 11683 + 11683 8695 11688 + 11688 11689 11683 + 11684 11683 11689 + 11689 11690 11684 + 11685 11684 11690 + 11690 11691 11685 + 11686 11685 11691 + 11692 11688 8695 + 11693 11688 11692 + 11688 11693 11694 + 11694 11689 11688 + 11689 11694 11695 + 11695 11690 11689 + 11690 11695 11696 + 11696 11691 11690 + 8695 8694 11692 + 11697 11692 8694 + 11698 11692 11697 + 11692 11698 11693 + 11693 11698 11699 + 11699 11700 11693 + 11694 11693 11700 + 11700 11701 11694 + 11695 11694 11701 + 8694 8693 11697 + 11697 8693 11702 + 11702 11703 11697 + 11703 11704 11697 + 11705 11697 11704 + 11697 11705 11698 + 11698 11705 11706 + 11706 11699 11698 + 8692 11702 8693 + 11702 8692 11707 + 11707 11708 11702 + 11702 11708 11709 + 11709 11703 11702 + 11703 11709 11710 + 11703 11710 11711 + 11711 11704 11703 + 11707 8692 8691 + 8691 8640 11707 + 8587 11707 8640 + 11708 11707 8587 + 8587 11712 11708 + 11708 11712 11713 + 11713 11714 11708 + 11714 11709 11708 + 11710 11709 11714 + 8586 11712 8587 + 11712 8586 8593 + 8593 11713 11712 + 11715 11713 8593 + 11713 11715 11716 + 11716 11714 11713 + 11716 11717 11714 + 11714 11717 11710 + 11710 11717 11718 + 11718 11719 11710 + 11719 11711 11710 + 11715 8593 8592 + 8592 11720 11715 + 11716 11715 11720 + 11721 11716 11720 + 11717 11716 11721 + 11721 11718 11717 + 11721 11722 11718 + 11718 11722 11723 + 11723 11719 11718 + 11720 8592 8591 + 11720 8591 11724 + 11724 11725 11720 + 11720 11725 11726 + 11726 11727 11720 + 11727 11728 11720 + 11728 11721 11720 + 11722 11721 11728 + 11724 8591 8590 + 11729 11724 8590 + 11730 11724 11729 + 11725 11724 11730 + 11725 11730 11731 + 11731 11726 11725 + 11726 11731 11732 + 11726 11732 11733 + 11733 11727 11726 + 8590 11734 11729 + 11735 11729 11734 + 11729 11735 11736 + 11729 11736 11730 + 11730 11736 11737 + 11731 11730 11737 + 11738 11731 11737 + 11732 11731 11738 + 11739 11734 8590 + 11740 11734 11739 + 11734 11740 11735 + 11741 11735 11740 + 11736 11735 11741 + 11741 11742 11736 + 11736 11742 11737 + 8590 11743 11739 + 11744 11739 11743 + 11745 11739 11744 + 11739 11745 11740 + 8599 11743 8590 + 11743 8599 11746 + 11746 11747 11743 + 11743 11747 11744 + 11748 11744 11747 + 11749 11744 11748 + 11744 11749 11745 + 11750 11746 8599 + 11751 11746 11750 + 11747 11746 11751 + 11751 11752 11747 + 11747 11752 11748 + 11753 11748 11752 + 11754 11748 11753 + 11748 11754 11749 + 8599 11755 11750 + 11756 11750 11755 + 11757 11750 11756 + 11750 11757 11751 + 11758 11751 11757 + 11752 11751 11758 + 11758 11759 11752 + 11752 11759 11753 + 8598 11755 8599 + 11760 11755 8598 + 11755 11760 11756 + 11756 11760 11761 + 11761 11762 11756 + 11762 11763 11756 + 11764 11756 11763 + 11756 11764 11757 + 8598 8614 11760 + 11760 8614 11765 + 11765 11761 11760 + 8612 11761 11765 + 11761 8612 11766 + 11766 11762 11761 + 11766 11767 11762 + 11762 11767 11768 + 11768 11763 11762 + 8614 8613 11765 + 8612 11765 8613 + 11766 8612 8611 + 11769 11766 8611 + 11767 11766 11769 + 11769 11770 11767 + 11767 11770 11771 + 11771 11768 11767 + 11772 11768 11771 + 11763 11768 11772 + 11772 11773 11763 + 11763 11773 11764 + 8611 11774 11769 + 11775 11769 11774 + 11769 11775 11770 + 11770 11775 11776 + 11776 11777 11770 + 11770 11777 11771 + 8647 11774 8611 + 11774 8647 11778 + 11774 11778 11775 + 11776 11775 11778 + 11778 11779 11776 + 11629 11776 11779 + 11776 11629 11634 + 11634 11777 11776 + 11777 11634 11639 + 11639 11771 11777 + 11778 8647 11609 + 11609 11779 11778 + 11614 11779 11609 + 11779 11614 11629 + 11780 11781 11782 + 11783 11780 11782 + 11784 11780 11783 + 11780 11784 11785 + 11780 11785 11786 + 11786 11787 11780 + 11782 11788 11783 + 11788 11789 11783 + 11790 11783 11789 + 11791 11783 11790 + 11783 11791 11784 + 11792 11784 11791 + 11785 11784 11792 + 11793 11788 11782 + 11794 11788 11793 + 11788 11794 11795 + 11795 11789 11788 + 11796 11789 11795 + 11789 11796 11790 + 11782 11797 11793 + 11798 11793 11797 + 11799 11793 11798 + 11793 11799 11794 + 11794 11799 11800 + 11800 11801 11794 + 11795 11794 11801 + 11797 11782 11802 + 11802 11803 11797 + 11797 11803 11804 + 11804 11805 11797 + 11797 11805 11798 + 11802 11782 11787 + 11787 11806 11802 + 11807 11802 11806 + 11807 11808 11802 + 11808 11809 11802 + 11803 11802 11809 + 11809 11810 11803 + 11810 11804 11803 + 11806 11787 11786 + 11806 11786 11811 + 11811 11807 11806 + 11807 11811 11812 + 11807 11812 11808 + 11812 11813 11808 + 11813 11814 11808 + 11808 11814 11815 + 11815 11809 11808 + 11811 11786 11785 + 11816 11811 11785 + 11812 11811 11816 + 11816 11817 11812 + 11813 11812 11817 + 11818 11813 11817 + 11814 11813 11818 + 11818 11819 11814 + 11814 11819 11815 + 11785 11820 11816 + 11821 11816 11820 + 11821 11817 11816 + 11817 11821 11822 + 11822 11823 11817 + 11817 11823 11818 + 11792 11820 11785 + 11792 11824 11820 + 11820 11824 11821 + 11821 11824 11825 + 11822 11821 11825 + 11825 11826 11822 + 11827 11822 11826 + 11822 11827 11828 + 11828 11823 11822 + 11824 11792 11829 + 11829 11825 11824 + 11829 11830 11825 + 11825 11830 11831 + 11831 11826 11825 + 11831 11832 11826 + 11826 11832 11827 + 11833 11827 11832 + 11828 11827 11833 + 11791 11829 11792 + 11830 11829 11791 + 11791 11834 11830 + 11830 11834 11835 + 11831 11830 11835 + 11835 11836 11831 + 11832 11831 11836 + 11836 11837 11832 + 11832 11837 11838 + 11838 11833 11832 + 11790 11834 11791 + 11834 11790 11839 + 11839 11835 11834 + 11835 11839 11840 + 11840 11841 11835 + 11835 11841 11842 + 11842 11836 11835 + 11836 11842 11837 + 11843 11839 11790 + 11840 11839 11843 + 11843 11844 11840 + 11840 11844 11845 + 11845 11846 11840 + 11841 11840 11846 + 11846 11847 11841 + 11842 11841 11847 + 11790 11796 11843 + 11848 11843 11796 + 11843 11848 11849 + 11849 11844 11843 + 11844 11849 11850 + 11850 11845 11844 + 11796 11851 11848 + 11848 11851 11852 + 11852 11853 11848 + 11849 11848 11853 + 11853 11854 11849 + 11850 11849 11854 + 11795 11851 11796 + 11851 11795 11855 + 11855 11852 11851 + 11852 11855 11856 + 11856 11857 11852 + 11852 11857 11858 + 11858 11853 11852 + 11854 11853 11858 + 11801 11855 11795 + 11856 11855 11801 + 11801 11859 11856 + 11860 11856 11859 + 11857 11856 11860 + 11860 11861 11857 + 11857 11861 11862 + 11862 11858 11857 + 11863 11858 11862 + 11858 11863 11854 + 11864 11859 11801 + 11859 11864 11865 + 11865 11866 11859 + 11859 11866 11860 + 11867 11860 11866 + 11861 11860 11867 + 11801 11800 11864 + 11864 11800 11868 + 11868 11869 11864 + 11865 11864 11869 + 11869 11870 11865 + 11871 11865 11870 + 11866 11865 11871 + 11871 11872 11866 + 11866 11872 11867 + 11873 11868 11800 + 11874 11868 11873 + 11869 11868 11874 + 11875 11869 11874 + 11869 11875 11876 + 11876 11870 11869 + 11800 11799 11873 + 11799 11877 11873 + 11878 11873 11877 + 11879 11873 11878 + 11873 11879 11874 + 11874 11879 11880 + 11880 11881 11874 + 11875 11874 11881 + 11798 11877 11799 + 11798 11882 11877 + 11877 11882 11878 + 11878 11882 11883 + 11883 11884 11878 + 11885 11878 11884 + 11878 11885 11879 + 11879 11885 11886 + 11886 11880 11879 + 11882 11798 11805 + 11805 11883 11882 + 11883 11805 11804 + 11804 11887 11883 + 11883 11887 11888 + 11888 11884 11883 + 11888 11889 11884 + 11884 11889 11885 + 11886 11885 11889 + 11889 11890 11886 + 11891 11886 11890 + 11880 11886 11891 + 11887 11804 11810 + 11810 11892 11887 + 11888 11887 11892 + 11893 11888 11892 + 11889 11888 11893 + 11893 11890 11889 + 11894 11890 11893 + 11890 11894 11891 + 11892 11810 11809 + 11809 11815 11892 + 11892 11815 11895 + 11895 11896 11892 + 11892 11896 11893 + 11897 11893 11896 + 11893 11897 11894 + 11819 11895 11815 + 11898 11895 11819 + 11895 11898 11899 + 11899 11896 11895 + 11896 11899 11897 + 11900 11897 11899 + 11894 11897 11900 + 11900 11901 11894 + 11894 11901 11902 + 11891 11894 11902 + 11819 11903 11898 + 11903 11904 11898 + 11904 11905 11898 + 11899 11898 11905 + 11905 11906 11899 + 11899 11906 11900 + 11907 11900 11906 + 11900 11907 11901 + 11903 11819 11818 + 11903 11818 11908 + 11904 11903 11908 + 11909 11904 11908 + 11904 11909 11910 + 11910 11911 11904 + 11905 11904 11911 + 11912 11905 11911 + 11906 11905 11912 + 11908 11818 11823 + 11823 11828 11908 + 11913 11908 11828 + 11913 11909 11908 + 11913 11914 11909 + 11914 11910 11909 + 11910 11914 11915 + 11915 11916 11910 + 11911 11910 11916 + 11916 11917 11911 + 11912 11911 11917 + 11833 11913 11828 + 11913 11833 11918 + 11918 11914 11913 + 11914 11918 11915 + 11918 11919 11915 + 11915 11919 11920 + 11915 11920 11916 + 11920 11921 11916 + 11916 11921 11917 + 11918 11833 11838 + 11838 11922 11918 + 11919 11918 11922 + 11923 11919 11922 + 11920 11919 11923 + 11923 11924 11920 + 11921 11920 11924 + 11925 11921 11924 + 11926 11921 11925 + 11921 11926 11917 + 11927 11922 11838 + 11922 11927 11928 + 11928 11923 11922 + 11923 11928 11929 + 11929 11924 11923 + 11924 11929 11930 + 11930 11925 11924 + 11931 11925 11930 + 11925 11931 11926 + 11838 11932 11927 + 11927 11932 11933 + 11933 11934 11927 + 11927 11934 11935 + 11935 11928 11927 + 11929 11928 11935 + 11935 11936 11929 + 11930 11929 11936 + 11932 11838 11937 + 11937 11938 11932 + 11938 11933 11932 + 11938 11939 11933 + 11939 11940 11933 + 11934 11933 11940 + 11941 11937 11838 + 11942 11937 11941 + 11942 11939 11937 + 11939 11938 11937 + 11837 11941 11838 + 11943 11941 11837 + 11943 11944 11941 + 11941 11944 11942 + 11945 11942 11944 + 11939 11942 11945 + 11945 11946 11939 + 11939 11946 11940 + 11947 11940 11946 + 11940 11947 11934 + 11837 11842 11943 + 11847 11943 11842 + 11944 11943 11847 + 11847 11948 11944 + 11944 11948 11945 + 11949 11945 11948 + 11946 11945 11949 + 11949 11950 11946 + 11946 11950 11947 + 11951 11947 11950 + 11934 11947 11951 + 11951 11935 11934 + 11936 11935 11951 + 11952 11948 11847 + 11948 11952 11949 + 11953 11949 11952 + 11950 11949 11953 + 11953 11954 11950 + 11950 11954 11951 + 11955 11951 11954 + 11951 11955 11936 + 11847 11846 11952 + 11952 11846 11845 + 11845 11956 11952 + 11952 11956 11953 + 11957 11953 11956 + 11953 11957 11958 + 11958 11954 11953 + 11954 11958 11955 + 11959 11955 11958 + 11936 11955 11959 + 11960 11956 11845 + 11956 11960 11957 + 11957 11960 11961 + 11961 11962 11957 + 11958 11957 11962 + 11962 11963 11958 + 11958 11963 11964 + 11964 11959 11958 + 11845 11850 11960 + 11960 11850 11965 + 11965 11961 11960 + 11961 11965 11966 + 11966 11967 11961 + 11961 11967 11968 + 11968 11962 11961 + 11963 11962 11968 + 11854 11965 11850 + 11966 11965 11854 + 11854 11863 11966 + 11969 11966 11863 + 11967 11966 11969 + 11969 11970 11967 + 11967 11970 11971 + 11971 11968 11967 + 11972 11968 11971 + 11968 11972 11963 + 11963 11972 11973 + 11973 11964 11963 + 11863 11974 11969 + 11975 11969 11974 + 11970 11969 11975 + 11975 11976 11970 + 11970 11976 11977 + 11977 11971 11970 + 11978 11971 11977 + 11971 11978 11972 + 11862 11974 11863 + 11974 11862 11979 + 11979 11980 11974 + 11974 11980 11975 + 11981 11975 11980 + 11976 11975 11981 + 11981 11982 11976 + 11977 11976 11982 + 11979 11862 11861 + 11861 11983 11979 + 11984 11979 11983 + 11980 11979 11984 + 11984 11985 11980 + 11980 11985 11981 + 11986 11981 11985 + 11982 11981 11986 + 11867 11983 11861 + 11983 11867 11987 + 11987 11988 11983 + 11983 11988 11984 + 11989 11984 11988 + 11985 11984 11989 + 11989 11990 11985 + 11985 11990 11986 + 11987 11867 11872 + 11872 11991 11987 + 11992 11987 11991 + 11988 11987 11992 + 11992 11993 11988 + 11988 11993 11989 + 11994 11989 11993 + 11989 11994 11995 + 11990 11989 11995 + 11996 11991 11872 + 11991 11996 11997 + 11997 11998 11991 + 11991 11998 11992 + 11992 11998 11999 + 11999 12000 11992 + 11993 11992 12000 + 11872 11871 11996 + 11996 11871 12001 + 12001 12002 11996 + 11997 11996 12002 + 12002 12003 11997 + 12004 11997 12003 + 11998 11997 12004 + 12004 11999 11998 + 11870 12001 11871 + 12005 12001 11870 + 12001 12005 12006 + 12006 12002 12001 + 12002 12006 12007 + 12007 12003 12002 + 12003 12007 12008 + 12008 12009 12003 + 12003 12009 12004 + 11870 11876 12005 + 12005 11876 12010 + 12010 12011 12005 + 12006 12005 12011 + 12011 12012 12006 + 12007 12006 12012 + 12012 12013 12007 + 12008 12007 12013 + 12014 12010 11876 + 12015 12010 12014 + 12010 12015 12016 + 12016 12011 12010 + 12011 12016 12017 + 12017 12012 12011 + 12012 12017 12018 + 12018 12013 12012 + 11876 11875 12014 + 11881 12014 11875 + 12019 12014 11881 + 12014 12019 12015 + 12020 12015 12019 + 12016 12015 12020 + 12020 12021 12016 + 12017 12016 12021 + 12021 12022 12017 + 12018 12017 12022 + 11881 12023 12019 + 12019 12023 12024 + 12024 12025 12019 + 12019 12025 12020 + 12026 12020 12025 + 12020 12026 12027 + 12027 12021 12020 + 12023 11881 11880 + 11880 12028 12023 + 12024 12023 12028 + 12028 12029 12024 + 12030 12024 12029 + 12025 12024 12030 + 12031 12025 12030 + 12025 12031 12026 + 11891 12028 11880 + 12028 11891 12032 + 12032 12029 12028 + 12033 12029 12032 + 12029 12033 12030 + 12030 12033 12034 + 12034 12035 12030 + 12031 12030 12035 + 12035 12036 12031 + 12026 12031 12036 + 11902 12032 11891 + 12037 12032 11902 + 12032 12037 12033 + 12033 12037 12038 + 12038 12039 12033 + 12033 12039 12034 + 11902 12040 12037 + 12038 12037 12040 + 12040 12041 12038 + 12042 12038 12041 + 12038 12042 12039 + 12039 12042 12043 + 12043 12034 12039 + 12040 11902 12044 + 12040 12044 12045 + 12045 12041 12040 + 12046 12041 12045 + 12041 12046 12042 + 12043 12042 12046 + 11936 12043 12046 + 11959 12043 11936 + 11959 12034 12043 + 12044 11902 11901 + 11901 11907 12044 + 12045 12044 11907 + 12047 12045 11907 + 12048 12045 12047 + 12045 12048 12046 + 12046 12048 11931 + 11931 11930 12046 + 12046 11930 11936 + 12049 12047 11907 + 12050 12047 12049 + 12051 12047 12050 + 12047 12051 12048 + 11931 12048 12051 + 12051 11926 11931 + 12051 12050 11926 + 12050 11917 11926 + 11917 12050 11912 + 11906 12049 11907 + 11912 12049 11906 + 12049 11912 12050 + 12034 11959 11964 + 11964 12035 12034 + 12035 11964 11973 + 11973 12036 12035 + 12036 11973 12052 + 12052 12053 12036 + 12036 12053 12026 + 12027 12026 12053 + 12052 11973 11972 + 11972 11978 12052 + 12054 12052 11978 + 12053 12052 12054 + 12054 12055 12053 + 12053 12055 12027 + 12056 12027 12055 + 12021 12027 12056 + 12056 12022 12021 + 11978 12057 12054 + 12058 12054 12057 + 12055 12054 12058 + 12058 12059 12055 + 12055 12059 12056 + 12060 12056 12059 + 12022 12056 12060 + 12060 12061 12022 + 12022 12061 12018 + 11977 12057 11978 + 12057 11977 12062 + 12062 12063 12057 + 12057 12063 12058 + 12064 12058 12063 + 12059 12058 12064 + 12064 12065 12059 + 12059 12065 12060 + 12066 12060 12065 + 12061 12060 12066 + 11982 12062 11977 + 12067 12062 11982 + 12063 12062 12067 + 12067 12068 12063 + 12063 12068 12064 + 12069 12064 12068 + 12065 12064 12069 + 12069 12070 12065 + 12065 12070 12066 + 11982 12071 12067 + 12072 12067 12071 + 12068 12067 12072 + 12072 12073 12068 + 12068 12073 12069 + 12073 12074 12069 + 12074 12075 12069 + 12075 12070 12069 + 11986 12071 11982 + 12071 11986 12076 + 12076 12077 12071 + 12071 12077 12072 + 12078 12072 12077 + 12078 12073 12072 + 12078 12074 12073 + 12074 12078 12079 + 12079 12080 12074 + 12075 12074 12080 + 12076 11986 11990 + 11990 11995 12076 + 12081 12076 11995 + 12081 12077 12076 + 12081 12082 12077 + 12077 12082 12078 + 12079 12078 12082 + 11995 12083 12081 + 12084 12081 12083 + 12084 12079 12081 + 12079 12082 12081 + 12083 11995 11994 + 12085 12083 11994 + 12084 12083 12085 + 12086 12084 12085 + 12084 12086 12087 + 12079 12084 12087 + 12087 12088 12079 + 12088 12080 12079 + 12080 12088 12089 + 12089 12075 12080 + 12075 12089 12070 + 12085 11994 12090 + 12090 12091 12085 + 12086 12085 12091 + 12086 12091 12092 + 12093 12086 12092 + 12086 12093 12087 + 11993 12090 11994 + 12000 12090 11993 + 12091 12090 12000 + 12092 12091 12000 + 12092 12000 11999 + 11999 12094 12092 + 12093 12092 12094 + 12095 12093 12094 + 12093 12095 12087 + 12096 12094 11999 + 12094 12096 12095 + 12095 12096 12097 + 12098 12095 12097 + 12095 12098 12087 + 12096 11999 12004 + 12097 12096 12004 + 12009 12097 12004 + 12099 12097 12009 + 12097 12099 12098 + 12098 12099 12100 + 12098 12100 12101 + 12087 12098 12101 + 12087 12101 12102 + 12087 12102 12103 + 12088 12087 12103 + 12088 12103 12089 + 12070 12089 12103 + 12099 12009 12008 + 12099 12008 12104 + 12104 12100 12099 + 12101 12100 12104 + 12101 12104 12105 + 12101 12105 12106 + 12106 12102 12101 + 12102 12106 12066 + 12103 12102 12066 + 12103 12066 12070 + 12013 12104 12008 + 12105 12104 12013 + 12013 12018 12105 + 12105 12018 12061 + 12061 12106 12105 + 12066 12106 12061 + 12107 12108 12109 + 12110 12109 12108 + 12109 12110 12111 + 12111 12112 12109 + 12109 12112 12113 + 12113 12114 12109 + 12109 12114 12115 + 12115 12116 12109 + 12116 12117 12109 + 12108 12118 12110 + 12119 12110 12118 + 12111 12110 12119 + 12119 12120 12111 + 12111 12120 12121 + 12121 12122 12111 + 12112 12111 12122 + 12108 12123 12118 + 12118 12123 12124 + 12124 12125 12118 + 12118 12125 12119 + 12123 12108 12126 + 12124 12123 12126 + 12126 12127 12124 + 12128 12124 12127 + 12128 12125 12124 + 12125 12128 12129 + 12129 12130 12125 + 12125 12130 12119 + 12108 12117 12126 + 12126 12117 12131 + 12126 12131 12132 + 12132 12127 12126 + 12127 12132 12133 + 12133 12134 12127 + 12127 12134 12128 + 12129 12128 12134 + 12131 12117 12116 + 12116 12135 12131 + 12131 12135 12136 + 12132 12131 12136 + 12136 12137 12132 + 12133 12132 12137 + 12137 12138 12133 + 12139 12133 12138 + 12134 12133 12139 + 12140 12135 12116 + 12135 12140 12141 + 12141 12136 12135 + 12141 12142 12136 + 12136 12142 12143 + 12143 12137 12136 + 12138 12137 12143 + 12140 12116 12115 + 12115 12144 12140 + 12140 12144 12145 + 12141 12140 12145 + 12145 12146 12141 + 12142 12141 12146 + 12146 12147 12142 + 12143 12142 12147 + 12148 12144 12115 + 12144 12148 12149 + 12149 12145 12144 + 12145 12149 12150 + 12150 12151 12145 + 12145 12151 12152 + 12152 12146 12145 + 12147 12146 12152 + 12148 12115 12114 + 12114 12153 12148 + 12148 12153 12154 + 12154 12149 12148 + 12150 12149 12154 + 12154 12155 12150 + 12150 12155 12156 + 12156 12157 12150 + 12151 12150 12157 + 12113 12153 12114 + 12153 12113 12158 + 12158 12159 12153 + 12153 12159 12154 + 12159 12160 12154 + 12161 12154 12160 + 12154 12161 12162 + 12162 12155 12154 + 12156 12155 12162 + 12163 12158 12113 + 12164 12158 12163 + 12158 12164 12159 + 12159 12164 12165 + 12165 12160 12159 + 12165 12166 12160 + 12160 12166 12161 + 12113 12112 12163 + 12122 12163 12112 + 12163 12122 12167 + 12163 12167 12164 + 12164 12167 12168 + 12165 12164 12168 + 12168 12169 12165 + 12166 12165 12169 + 12169 12170 12166 + 12161 12166 12170 + 12170 12171 12161 + 12162 12161 12171 + 12167 12122 12121 + 12121 12168 12167 + 12172 12168 12121 + 12168 12172 12173 + 12173 12169 12168 + 12170 12169 12173 + 12173 12174 12170 + 12170 12174 12175 + 12175 12171 12170 + 12121 12176 12172 + 12172 12176 12177 + 12177 12178 12172 + 12173 12172 12178 + 12178 12179 12173 + 12174 12173 12179 + 12179 12180 12174 + 12175 12174 12180 + 12176 12121 12120 + 12120 12181 12176 + 12176 12181 12182 + 12182 12177 12176 + 12183 12177 12182 + 12177 12183 12178 + 12178 12183 12184 + 12184 12179 12178 + 12180 12179 12184 + 12181 12120 12119 + 12119 12185 12181 + 12181 12185 12186 + 12186 12187 12181 + 12181 12187 12182 + 12185 12119 12130 + 12130 12188 12185 + 12188 12186 12185 + 12188 12189 12186 + 12189 12190 12186 + 12191 12186 12190 + 12186 12191 12192 + 12192 12187 12186 + 12188 12130 12129 + 12188 12129 12193 + 12188 12193 12189 + 12193 12194 12189 + 12189 12194 12195 + 12190 12189 12195 + 12196 12190 12195 + 12197 12190 12196 + 12190 12197 12191 + 12193 12129 12198 + 12198 12199 12193 + 12194 12193 12199 + 12200 12194 12199 + 12195 12194 12200 + 12200 12201 12195 + 12196 12195 12201 + 12198 12129 12134 + 12139 12198 12134 + 12199 12198 12139 + 12139 12202 12199 + 12199 12202 12203 + 12203 12200 12199 + 12200 12203 12204 + 12204 12201 12200 + 12201 12204 12205 + 12205 12206 12201 + 12201 12206 12196 + 12202 12139 12207 + 12207 12208 12202 + 12203 12202 12208 + 12208 12209 12203 + 12204 12203 12209 + 12209 12210 12204 + 12204 12210 12211 + 12211 12205 12204 + 12138 12207 12139 + 12212 12207 12138 + 12208 12207 12212 + 12212 12213 12208 + 12208 12213 12214 + 12214 12209 12208 + 12210 12209 12214 + 12214 12215 12210 + 12210 12215 12216 + 12216 12211 12210 + 12138 12217 12212 + 12212 12217 12218 + 12218 12219 12212 + 12213 12212 12219 + 12219 12220 12213 + 12214 12213 12220 + 12220 12221 12214 + 12215 12214 12221 + 12143 12217 12138 + 12217 12143 12222 + 12222 12218 12217 + 12218 12222 12223 + 12223 12224 12218 + 12218 12224 12225 + 12225 12219 12218 + 12220 12219 12225 + 12147 12222 12143 + 12223 12222 12147 + 12147 12226 12223 + 12223 12226 12227 + 12227 12228 12223 + 12224 12223 12228 + 12228 12229 12224 + 12225 12224 12229 + 12152 12226 12147 + 12226 12152 12230 + 12230 12227 12226 + 12227 12230 12231 + 12231 12232 12227 + 12227 12232 12233 + 12233 12228 12227 + 12229 12228 12233 + 12234 12230 12152 + 12231 12230 12234 + 12234 12235 12231 + 12236 12231 12235 + 12232 12231 12236 + 12236 12237 12232 + 12232 12237 12238 + 12238 12233 12232 + 12152 12151 12234 + 12157 12234 12151 + 12234 12157 12239 + 12239 12235 12234 + 12235 12239 12240 + 12240 12241 12235 + 12235 12241 12236 + 12242 12236 12241 + 12237 12236 12242 + 12239 12157 12156 + 12156 12243 12239 + 12240 12239 12243 + 12243 12244 12240 + 12245 12240 12244 + 12241 12240 12245 + 12245 12246 12241 + 12241 12246 12242 + 12247 12243 12156 + 12243 12247 12248 + 12248 12244 12243 + 12244 12248 12249 + 12249 12250 12244 + 12244 12250 12245 + 12251 12245 12250 + 12246 12245 12251 + 12156 12252 12247 + 12247 12252 12253 + 12253 12254 12247 + 12248 12247 12254 + 12254 12255 12248 + 12249 12248 12255 + 12252 12156 12162 + 12253 12252 12162 + 12162 12256 12253 + 12257 12253 12256 + 12253 12257 12258 + 12258 12254 12253 + 12254 12258 12259 + 12259 12255 12254 + 12171 12256 12162 + 12260 12256 12171 + 12256 12260 12257 + 12261 12257 12260 + 12258 12257 12261 + 12261 12262 12258 + 12259 12258 12262 + 12262 12263 12259 + 12264 12259 12263 + 12255 12259 12264 + 12171 12175 12260 + 12260 12175 12265 + 12265 12266 12260 + 12260 12266 12261 + 12267 12261 12266 + 12261 12267 12268 + 12268 12262 12261 + 12262 12268 12269 + 12269 12263 12262 + 12180 12265 12175 + 12270 12265 12180 + 12266 12265 12270 + 12270 12271 12266 + 12266 12271 12267 + 12272 12267 12271 + 12268 12267 12272 + 12272 12273 12268 + 12269 12268 12273 + 12180 12274 12270 + 12275 12270 12274 + 12271 12270 12275 + 12275 12276 12271 + 12271 12276 12272 + 12277 12272 12276 + 12272 12277 12278 + 12278 12273 12272 + 12184 12274 12180 + 12274 12184 12279 + 12279 12280 12274 + 12274 12280 12275 + 12281 12275 12280 + 12275 12281 12282 + 12282 12276 12275 + 12276 12282 12277 + 12283 12277 12282 + 12278 12277 12283 + 12284 12279 12184 + 12285 12279 12284 + 12280 12279 12285 + 12285 12286 12280 + 12280 12286 12281 + 12281 12286 12287 + 12287 12288 12281 + 12282 12281 12288 + 12184 12183 12284 + 12182 12284 12183 + 12289 12284 12182 + 12284 12289 12285 + 12290 12285 12289 + 12286 12285 12290 + 12290 12287 12286 + 12290 12291 12287 + 12287 12291 12292 + 12292 12288 12287 + 12293 12288 12292 + 12288 12293 12282 + 12282 12293 12283 + 12182 12294 12289 + 12289 12294 12295 + 12295 12296 12289 + 12289 12296 12290 + 12291 12290 12296 + 12296 12297 12291 + 12291 12297 12298 + 12292 12291 12298 + 12294 12182 12187 + 12187 12192 12294 + 12192 12299 12294 + 12299 12295 12294 + 12297 12295 12299 + 12295 12297 12296 + 12300 12299 12192 + 12299 12300 12301 + 12299 12301 12297 + 12297 12301 12298 + 12192 12191 12300 + 12300 12191 12197 + 12197 12302 12300 + 12301 12300 12302 + 12302 12303 12301 + 12303 12302 12304 + 12303 12304 12305 + 12303 12305 12298 + 12304 12302 12197 + 12197 12306 12304 + 12307 12304 12306 + 12304 12307 12305 + 12305 12307 12308 + 12305 12308 12309 + 12309 12298 12305 + 12196 12306 12197 + 12306 12196 12206 + 12206 12310 12306 + 12310 12307 12306 + 12308 12307 12310 + 12310 12311 12308 + 12308 12311 12312 + 12312 12309 12308 + 12313 12309 12312 + 12298 12309 12313 + 12310 12206 12205 + 12205 12311 12310 + 12311 12205 12211 + 12211 12312 12311 + 12216 12312 12211 + 12312 12216 12313 + 12313 12216 12314 + 12315 12313 12314 + 12298 12313 12315 + 12315 12316 12298 + 12298 12316 12292 + 12216 12215 12314 + 12221 12314 12215 + 12314 12221 12317 + 12317 12318 12314 + 12314 12318 12319 + 12319 12320 12314 + 12314 12320 12315 + 12317 12221 12220 + 12220 12321 12317 + 12317 12321 12322 + 12322 12323 12317 + 12318 12317 12323 + 12323 12324 12318 + 12319 12318 12324 + 12225 12321 12220 + 12321 12225 12325 + 12325 12322 12321 + 12322 12325 12326 + 12326 12327 12322 + 12322 12327 12328 + 12328 12323 12322 + 12324 12323 12328 + 12229 12325 12225 + 12326 12325 12229 + 12229 12329 12326 + 12330 12326 12329 + 12327 12326 12330 + 12330 12331 12327 + 12328 12327 12331 + 12331 12332 12328 + 12333 12328 12332 + 12328 12333 12324 + 12233 12329 12229 + 12329 12233 12238 + 12238 12334 12329 + 12329 12334 12330 + 12335 12330 12334 + 12331 12330 12335 + 12335 12336 12331 + 12331 12336 12337 + 12337 12332 12331 + 12338 12332 12337 + 12332 12338 12333 + 12334 12238 12339 + 12339 12340 12334 + 12334 12340 12335 + 12341 12335 12340 + 12336 12335 12341 + 12341 12342 12336 + 12336 12342 12343 + 12343 12337 12336 + 12339 12238 12237 + 12237 12344 12339 + 12345 12339 12344 + 12340 12339 12345 + 12345 12346 12340 + 12340 12346 12341 + 12347 12341 12346 + 12342 12341 12347 + 12242 12344 12237 + 12344 12242 12348 + 12348 12349 12344 + 12344 12349 12345 + 12350 12345 12349 + 12346 12345 12350 + 12350 12351 12346 + 12346 12351 12347 + 12348 12242 12246 + 12246 12352 12348 + 12353 12348 12352 + 12349 12348 12353 + 12353 12354 12349 + 12349 12354 12350 + 12355 12350 12354 + 12351 12350 12355 + 12251 12352 12246 + 12352 12251 12356 + 12356 12357 12352 + 12352 12357 12353 + 12358 12353 12357 + 12354 12353 12358 + 12358 12359 12354 + 12354 12359 12355 + 12356 12251 12360 + 12360 12361 12356 + 12362 12356 12361 + 12357 12356 12362 + 12362 12363 12357 + 12357 12363 12358 + 12364 12358 12363 + 12359 12358 12364 + 12250 12360 12251 + 12365 12360 12250 + 12360 12365 12366 + 12366 12361 12360 + 12361 12366 12367 + 12367 12368 12361 + 12361 12368 12362 + 12369 12362 12368 + 12363 12362 12369 + 12250 12249 12365 + 12365 12249 12370 + 12370 12371 12365 + 12366 12365 12371 + 12371 12372 12366 + 12367 12366 12372 + 12372 12373 12367 + 12374 12367 12373 + 12368 12367 12374 + 12255 12370 12249 + 12264 12370 12255 + 12370 12264 12375 + 12375 12371 12370 + 12371 12375 12376 + 12376 12372 12371 + 12372 12376 12377 + 12377 12373 12372 + 12373 12377 12378 + 12378 12379 12373 + 12373 12379 12374 + 12375 12264 12380 + 12380 12381 12375 + 12376 12375 12381 + 12381 12382 12376 + 12376 12382 12383 + 12383 12377 12376 + 12378 12377 12383 + 12263 12380 12264 + 12384 12380 12263 + 12380 12384 12385 + 12385 12381 12380 + 12381 12385 12386 + 12386 12382 12381 + 12382 12386 12387 + 12387 12383 12382 + 12263 12269 12384 + 12384 12269 12388 + 12388 12389 12384 + 12385 12384 12389 + 12389 12390 12385 + 12386 12385 12390 + 12390 12391 12386 + 12387 12386 12391 + 12273 12388 12269 + 12392 12388 12273 + 12388 12392 12393 + 12393 12389 12388 + 12389 12393 12394 + 12394 12390 12389 + 12390 12394 12395 + 12395 12391 12390 + 12273 12278 12392 + 12392 12278 12396 + 12396 12397 12392 + 12393 12392 12397 + 12397 12398 12393 + 12394 12393 12398 + 12398 12399 12394 + 12395 12394 12399 + 12283 12396 12278 + 12400 12396 12283 + 12396 12400 12401 + 12401 12397 12396 + 12397 12401 12402 + 12402 12398 12397 + 12398 12402 12403 + 12403 12399 12398 + 12283 12404 12400 + 12400 12404 12405 + 12405 12406 12400 + 12401 12400 12406 + 12406 12407 12401 + 12402 12401 12407 + 12404 12283 12293 + 12293 12408 12404 + 12404 12408 12409 + 12405 12404 12409 + 12409 12410 12405 + 12411 12405 12410 + 12405 12411 12412 + 12412 12406 12405 + 12292 12408 12293 + 12408 12292 12316 + 12316 12409 12408 + 12316 12315 12409 + 12409 12315 12413 + 12413 12410 12409 + 12413 12414 12410 + 12410 12414 12411 + 12415 12411 12414 + 12412 12411 12415 + 12415 12416 12412 + 12417 12412 12416 + 12406 12412 12417 + 12417 12407 12406 + 12320 12413 12315 + 12414 12413 12320 + 12320 12418 12414 + 12414 12418 12415 + 12419 12415 12418 + 12415 12419 12420 + 12420 12416 12415 + 12416 12420 12421 + 12421 12422 12416 + 12416 12422 12417 + 12319 12418 12320 + 12418 12319 12419 + 12324 12419 12319 + 12420 12419 12324 + 12324 12333 12420 + 12421 12420 12333 + 12333 12338 12421 + 12423 12421 12338 + 12422 12421 12423 + 12423 12424 12422 + 12422 12424 12425 + 12425 12417 12422 + 12407 12417 12425 + 12425 12426 12407 + 12407 12426 12402 + 12338 12427 12423 + 12428 12423 12427 + 12424 12423 12428 + 12428 12429 12424 + 12424 12429 12430 + 12430 12425 12424 + 12426 12425 12430 + 12430 12431 12426 + 12402 12426 12431 + 12431 12403 12402 + 12337 12427 12338 + 12427 12337 12343 + 12343 12432 12427 + 12427 12432 12428 + 12433 12428 12432 + 12429 12428 12433 + 12433 12434 12429 + 12429 12434 12435 + 12435 12430 12429 + 12431 12430 12435 + 12432 12343 12436 + 12436 12437 12432 + 12432 12437 12433 + 12438 12433 12437 + 12434 12433 12438 + 12438 12439 12434 + 12434 12439 12440 + 12440 12435 12434 + 12436 12343 12342 + 12342 12441 12436 + 12442 12436 12441 + 12437 12436 12442 + 12442 12443 12437 + 12437 12443 12438 + 12444 12438 12443 + 12439 12438 12444 + 12347 12441 12342 + 12441 12347 12445 + 12445 12446 12441 + 12441 12446 12442 + 12447 12442 12446 + 12443 12442 12447 + 12447 12448 12443 + 12443 12448 12444 + 12445 12347 12351 + 12351 12449 12445 + 12450 12445 12449 + 12446 12445 12450 + 12450 12451 12446 + 12446 12451 12447 + 12452 12447 12451 + 12448 12447 12452 + 12355 12449 12351 + 12449 12355 12453 + 12453 12454 12449 + 12449 12454 12450 + 12455 12450 12454 + 12451 12450 12455 + 12455 12456 12451 + 12451 12456 12452 + 12453 12355 12359 + 12359 12457 12453 + 12458 12453 12457 + 12454 12453 12458 + 12458 12459 12454 + 12454 12459 12455 + 12460 12455 12459 + 12456 12455 12460 + 12460 12461 12456 + 12452 12456 12461 + 12364 12457 12359 + 12457 12364 12462 + 12462 12463 12457 + 12457 12463 12458 + 12464 12458 12463 + 12459 12458 12464 + 12464 12465 12459 + 12459 12465 12460 + 12460 12465 12466 + 12461 12460 12466 + 12467 12462 12364 + 12468 12462 12467 + 12462 12468 12469 + 12463 12462 12469 + 12463 12469 12464 + 12464 12469 12470 + 12465 12464 12470 + 12470 12466 12465 + 12364 12471 12467 + 12472 12467 12471 + 12467 12472 12473 + 12473 12474 12467 + 12467 12474 12468 + 12363 12471 12364 + 12369 12471 12363 + 12471 12369 12472 + 12472 12369 12475 + 12475 12476 12472 + 12476 12477 12472 + 12477 12473 12472 + 12473 12477 12478 + 12474 12473 12478 + 12478 12479 12474 + 12468 12474 12479 + 12368 12475 12369 + 12374 12475 12368 + 12475 12374 12480 + 12480 12476 12475 + 12476 12480 12481 + 12481 12477 12476 + 12477 12481 12482 + 12482 12478 12477 + 12478 12482 12483 + 12479 12478 12483 + 12470 12479 12483 + 12468 12479 12470 + 12469 12468 12470 + 12480 12374 12379 + 12379 12484 12480 + 12484 12485 12480 + 12485 12481 12480 + 12481 12485 12482 + 12483 12482 12485 + 12486 12484 12379 + 12484 12486 12487 + 12487 12485 12484 + 12485 12487 12483 + 12379 12378 12486 + 12486 12378 12488 + 12488 12489 12486 + 12489 12490 12486 + 12490 12487 12486 + 12487 12490 12483 + 12383 12488 12378 + 12491 12488 12383 + 12488 12491 12492 + 12492 12489 12488 + 12489 12492 12493 + 12493 12490 12489 + 12490 12493 12494 + 12494 12483 12490 + 12383 12387 12491 + 12491 12387 12495 + 12495 12496 12491 + 12492 12491 12496 + 12496 12497 12492 + 12497 12498 12492 + 12498 12493 12492 + 12493 12498 12494 + 12391 12495 12387 + 12499 12495 12391 + 12495 12499 12500 + 12500 12496 12495 + 12496 12500 12501 + 12501 12497 12496 + 12497 12501 12502 + 12502 12498 12497 + 12498 12502 12494 + 12391 12395 12499 + 12499 12395 12503 + 12503 12504 12499 + 12500 12499 12504 + 12504 12505 12500 + 12501 12500 12505 + 12505 12506 12501 + 12502 12501 12506 + 12399 12503 12395 + 12507 12503 12399 + 12503 12507 12508 + 12508 12504 12503 + 12504 12508 12509 + 12509 12505 12504 + 12505 12509 12510 + 12510 12506 12505 + 12399 12403 12507 + 12507 12403 12431 + 12431 12511 12507 + 12508 12507 12511 + 12511 12512 12508 + 12509 12508 12512 + 12512 12513 12509 + 12510 12509 12513 + 12513 12514 12510 + 12515 12510 12514 + 12506 12510 12515 + 12435 12511 12431 + 12511 12435 12440 + 12440 12512 12511 + 12512 12440 12516 + 12516 12513 12512 + 12513 12516 12517 + 12517 12514 12513 + 12514 12517 12518 + 12518 12519 12514 + 12514 12519 12515 + 12516 12440 12439 + 12439 12520 12516 + 12517 12516 12520 + 12520 12521 12517 + 12521 12522 12517 + 12522 12518 12517 + 12523 12518 12522 + 12518 12523 12524 + 12519 12518 12524 + 12515 12519 12524 + 12444 12520 12439 + 12520 12444 12525 + 12525 12521 12520 + 12521 12525 12526 + 12526 12522 12521 + 12522 12526 12527 + 12527 12523 12522 + 12525 12444 12448 + 12448 12528 12525 + 12528 12529 12525 + 12529 12526 12525 + 12526 12529 12527 + 12530 12527 12529 + 12527 12530 12466 + 12523 12527 12466 + 12452 12528 12448 + 12528 12452 12531 + 12531 12529 12528 + 12529 12531 12530 + 12531 12461 12530 + 12466 12530 12461 + 12531 12452 12461 + 12466 12470 12483 + 12523 12466 12483 + 12483 12494 12523 + 12494 12532 12523 + 12532 12524 12523 + 12524 12532 12533 + 12533 12515 12524 + 12515 12533 12506 + 12506 12533 12502 + 12502 12532 12494 + 12502 12533 12532 + 12534 12535 12536 + 12537 12535 12534 + 12537 12538 12535 + 12538 12539 12535 + 12535 12539 12540 + 12540 12541 12535 + 12535 12541 12542 + 12534 12543 12537 + 12537 12543 12544 + 12544 12545 12537 + 12545 12546 12537 + 12546 12538 12537 + 12547 12538 12546 + 12539 12538 12547 + 12543 12534 12548 + 12543 12548 12549 + 12549 12544 12543 + 12544 12549 12550 + 12550 12551 12544 + 12544 12551 12552 + 12552 12545 12544 + 12552 12546 12545 + 12548 12534 12553 + 12553 12554 12548 + 12548 12554 12555 + 12555 12556 12548 + 12556 12549 12548 + 12550 12549 12556 + 12553 12534 12542 + 12557 12553 12542 + 12558 12553 12557 + 12558 12554 12553 + 12554 12558 12559 + 12559 12555 12554 + 12560 12555 12559 + 12555 12560 12561 + 12561 12556 12555 + 12542 12562 12557 + 12563 12557 12562 + 12564 12557 12563 + 12557 12564 12558 + 12559 12558 12564 + 12564 12565 12559 + 12566 12559 12565 + 12559 12566 12560 + 12567 12562 12542 + 12562 12567 12568 + 12568 12569 12562 + 12562 12569 12563 + 12542 12570 12567 + 12571 12567 12570 + 12568 12567 12571 + 12571 12572 12568 + 12568 12572 12573 + 12573 12574 12568 + 12569 12568 12574 + 12575 12570 12542 + 12570 12575 12576 + 12576 12577 12570 + 12570 12577 12571 + 12578 12571 12577 + 12571 12578 12579 + 12579 12572 12571 + 12575 12542 12580 + 12580 12581 12575 + 12575 12581 12582 + 12576 12575 12582 + 12541 12580 12542 + 12583 12580 12541 + 12583 12581 12580 + 12581 12583 12584 + 12584 12582 12581 + 12541 12585 12583 + 12583 12585 12586 + 12586 12584 12583 + 12587 12584 12586 + 12582 12584 12587 + 12588 12585 12541 + 12585 12588 12589 + 12589 12586 12585 + 12586 12589 12590 + 12590 12591 12586 + 12586 12591 12587 + 12541 12540 12588 + 12588 12540 12592 + 12592 12593 12588 + 12589 12588 12593 + 12593 12594 12589 + 12590 12589 12594 + 12592 12540 12539 + 12539 12595 12592 + 12596 12592 12595 + 12592 12596 12597 + 12597 12593 12592 + 12593 12597 12598 + 12598 12594 12593 + 12547 12595 12539 + 12599 12595 12547 + 12595 12599 12596 + 12600 12596 12599 + 12597 12596 12600 + 12600 12601 12597 + 12597 12601 12602 + 12602 12598 12597 + 12603 12598 12602 + 12594 12598 12603 + 12547 12604 12599 + 12599 12604 12605 + 12605 12606 12599 + 12599 12606 12607 + 12607 12600 12599 + 12604 12547 12608 + 12608 12609 12604 + 12605 12604 12609 + 12609 12610 12605 + 12611 12605 12610 + 12605 12611 12612 + 12612 12606 12605 + 12546 12608 12547 + 12613 12608 12546 + 12609 12608 12613 + 12613 12614 12609 + 12609 12614 12615 + 12615 12610 12609 + 12616 12610 12615 + 12610 12616 12611 + 12617 12611 12616 + 12612 12611 12617 + 12546 12618 12613 + 12619 12613 12618 + 12614 12613 12619 + 12619 12620 12614 + 12615 12614 12620 + 12620 12621 12615 + 12622 12615 12621 + 12615 12622 12616 + 12552 12618 12546 + 12618 12552 12623 + 12623 12624 12618 + 12618 12624 12619 + 12624 12625 12619 + 12625 12626 12619 + 12620 12619 12626 + 12626 12627 12620 + 12621 12620 12627 + 12628 12623 12552 + 12623 12628 12629 + 12630 12623 12629 + 12624 12623 12630 + 12630 12625 12624 + 12625 12630 12631 + 12631 12632 12625 + 12626 12625 12632 + 12552 12551 12628 + 12633 12628 12551 + 12628 12633 12634 + 12634 12629 12628 + 12629 12634 12635 + 12635 12636 12629 + 12630 12629 12636 + 12636 12631 12630 + 12637 12631 12636 + 12637 12632 12631 + 12551 12550 12633 + 12638 12633 12550 + 12634 12633 12638 + 12638 12639 12634 + 12634 12639 12640 + 12640 12635 12634 + 12635 12640 12641 + 12642 12635 12641 + 12642 12636 12635 + 12550 12643 12638 + 12644 12638 12643 + 12638 12644 12645 + 12645 12639 12638 + 12640 12639 12645 + 12646 12640 12645 + 12647 12640 12646 + 12647 12641 12640 + 12556 12643 12550 + 12648 12643 12556 + 12643 12648 12644 + 12649 12644 12648 + 12645 12644 12649 + 12649 12650 12645 + 12646 12645 12650 + 12650 12651 12646 + 12651 12652 12646 + 12652 12647 12646 + 12556 12561 12648 + 12648 12561 12653 + 12653 12654 12648 + 12648 12654 12649 + 12649 12654 12655 + 12656 12649 12655 + 12650 12649 12656 + 12657 12650 12656 + 12651 12650 12657 + 12653 12561 12560 + 12560 12658 12653 + 12659 12653 12658 + 12654 12653 12659 + 12655 12654 12659 + 12655 12659 12660 + 12660 12661 12655 + 12655 12661 12656 + 12661 12662 12656 + 12657 12656 12662 + 12663 12658 12560 + 12664 12658 12663 + 12658 12664 12659 + 12660 12659 12664 + 12664 12665 12660 + 12666 12660 12665 + 12660 12666 12667 + 12667 12661 12660 + 12662 12661 12667 + 12560 12566 12663 + 12663 12566 12668 + 12668 12669 12663 + 12670 12663 12669 + 12663 12670 12664 + 12664 12670 12671 + 12671 12665 12664 + 12672 12665 12671 + 12665 12672 12666 + 12565 12668 12566 + 12668 12565 12673 + 12673 12674 12668 + 12668 12674 12675 + 12675 12669 12668 + 12676 12669 12675 + 12669 12676 12670 + 12671 12670 12676 + 12673 12565 12564 + 12564 12677 12673 + 12673 12677 12678 + 12678 12679 12673 + 12674 12673 12679 + 12679 12680 12674 + 12675 12674 12680 + 12563 12677 12564 + 12677 12563 12681 + 12681 12678 12677 + 12678 12681 12682 + 12682 12683 12678 + 12678 12683 12684 + 12684 12679 12678 + 12679 12684 12685 + 12685 12680 12679 + 12686 12681 12563 + 12682 12681 12686 + 12563 12569 12686 + 12574 12686 12569 + 12686 12574 12687 + 12687 12688 12686 + 12686 12688 12682 + 12687 12574 12573 + 12573 12689 12687 + 12687 12689 12690 + 12690 12691 12687 + 12688 12687 12691 + 12691 12692 12688 + 12682 12688 12692 + 12689 12573 12693 + 12693 12694 12689 + 12689 12694 12695 + 12695 12690 12689 + 12696 12690 12695 + 12690 12696 12697 + 12697 12691 12690 + 12692 12691 12697 + 12693 12573 12572 + 12572 12579 12693 + 12698 12693 12579 + 12694 12693 12698 + 12698 12699 12694 + 12694 12699 12700 + 12700 12701 12694 + 12701 12695 12694 + 12702 12695 12701 + 12702 12696 12695 + 12579 12703 12698 + 12704 12698 12703 + 12698 12704 12705 + 12705 12699 12698 + 12699 12705 12706 + 12706 12700 12699 + 12707 12703 12579 + 12708 12703 12707 + 12703 12708 12704 + 12704 12708 12709 + 12709 12710 12704 + 12705 12704 12710 + 12579 12578 12707 + 12711 12707 12578 + 12712 12707 12711 + 12707 12712 12708 + 12708 12712 12713 + 12713 12714 12708 + 12708 12714 12709 + 12578 12715 12711 + 12716 12711 12715 + 12717 12711 12716 + 12711 12717 12712 + 12712 12717 12718 + 12713 12712 12718 + 12577 12715 12578 + 12715 12577 12576 + 12576 12719 12715 + 12715 12719 12716 + 12716 12719 12720 + 12720 12721 12716 + 12722 12716 12721 + 12716 12722 12717 + 12719 12576 12723 + 12723 12720 12719 + 12720 12723 12724 + 12724 12725 12720 + 12720 12725 12726 + 12726 12721 12720 + 12727 12721 12726 + 12721 12727 12722 + 12582 12723 12576 + 12724 12723 12582 + 12582 12728 12724 + 12724 12728 12729 + 12729 12730 12724 + 12725 12724 12730 + 12730 12731 12725 + 12726 12725 12731 + 12587 12728 12582 + 12728 12587 12732 + 12732 12729 12728 + 12729 12732 12733 + 12733 12734 12729 + 12730 12729 12734 + 12735 12730 12734 + 12731 12730 12735 + 12736 12732 12587 + 12732 12736 12737 + 12733 12732 12737 + 12738 12733 12737 + 12734 12733 12738 + 12738 12739 12734 + 12735 12734 12739 + 12587 12591 12736 + 12740 12736 12591 + 12737 12736 12740 + 12741 12737 12740 + 12742 12737 12741 + 12737 12742 12738 + 12742 12743 12738 + 12743 12744 12738 + 12744 12739 12738 + 12591 12590 12740 + 12745 12740 12590 + 12741 12740 12745 + 12745 12746 12741 + 12741 12746 12747 + 12747 12742 12741 + 12748 12742 12747 + 12748 12743 12742 + 12590 12749 12745 + 12750 12745 12749 + 12745 12750 12751 + 12751 12746 12745 + 12752 12746 12751 + 12746 12752 12747 + 12748 12747 12752 + 12594 12749 12590 + 12603 12749 12594 + 12749 12603 12750 + 12753 12750 12603 + 12751 12750 12753 + 12753 12754 12751 + 12751 12754 12755 + 12755 12752 12751 + 12756 12752 12755 + 12756 12757 12752 + 12752 12757 12748 + 12603 12758 12753 + 12759 12753 12758 + 12754 12753 12759 + 12760 12754 12759 + 12761 12754 12760 + 12754 12761 12755 + 12755 12761 12762 + 12756 12755 12762 + 12602 12758 12603 + 12763 12758 12602 + 12758 12763 12759 + 12764 12759 12763 + 12760 12759 12764 + 12764 12765 12760 + 12760 12765 12766 + 12766 12767 12760 + 12767 12761 12760 + 12602 12768 12763 + 12763 12768 12769 + 12769 12770 12763 + 12763 12770 12764 + 12771 12764 12770 + 12772 12764 12771 + 12772 12765 12764 + 12768 12602 12601 + 12601 12773 12768 + 12769 12768 12773 + 12773 12774 12769 + 12775 12769 12774 + 12769 12775 12776 + 12776 12770 12769 + 12770 12776 12771 + 12773 12601 12600 + 12600 12777 12773 + 12773 12777 12778 + 12778 12774 12773 + 12779 12774 12778 + 12774 12779 12775 + 12727 12775 12779 + 12776 12775 12727 + 12727 12780 12776 + 12771 12776 12780 + 12777 12600 12781 + 12781 12782 12777 + 12782 12778 12777 + 12778 12782 12718 + 12783 12778 12718 + 12778 12783 12779 + 12600 12607 12781 + 12781 12607 12784 + 12784 12785 12781 + 12781 12785 12786 + 12786 12782 12781 + 12718 12782 12786 + 12784 12607 12787 + 12787 12788 12784 + 12784 12788 12789 + 12789 12790 12784 + 12785 12784 12790 + 12790 12791 12785 + 12786 12785 12791 + 12606 12787 12607 + 12606 12612 12787 + 12612 12792 12787 + 12787 12792 12793 + 12793 12788 12787 + 12788 12793 12794 + 12794 12789 12788 + 12792 12612 12795 + 12796 12792 12795 + 12793 12792 12796 + 12796 12797 12793 + 12793 12797 12798 + 12798 12794 12793 + 12799 12794 12798 + 12789 12794 12799 + 12617 12795 12612 + 12800 12795 12617 + 12795 12800 12801 + 12801 12796 12795 + 12802 12796 12801 + 12802 12797 12796 + 12798 12797 12802 + 12803 12798 12802 + 12804 12798 12803 + 12798 12804 12799 + 12617 12805 12800 + 12800 12805 12672 + 12672 12806 12800 + 12800 12806 12807 + 12801 12800 12807 + 12808 12801 12807 + 12802 12801 12808 + 12805 12617 12809 + 12809 12810 12805 + 12805 12810 12666 + 12666 12672 12805 + 12616 12809 12617 + 12811 12809 12616 + 12811 12810 12809 + 12811 12812 12810 + 12810 12812 12667 + 12667 12666 12810 + 12616 12622 12811 + 12811 12622 12813 + 12813 12814 12811 + 12814 12815 12811 + 12815 12812 12811 + 12667 12812 12815 + 12815 12816 12667 + 12816 12662 12667 + 12621 12813 12622 + 12813 12621 12817 + 12817 12818 12813 + 12813 12818 12819 + 12819 12814 12813 + 12819 12820 12814 + 12820 12815 12814 + 12815 12820 12821 + 12821 12816 12815 + 12817 12621 12627 + 12817 12627 12822 + 12822 12823 12817 + 12818 12817 12823 + 12823 12824 12818 + 12819 12818 12824 + 12824 12825 12819 + 12825 12826 12819 + 12826 12820 12819 + 12827 12822 12627 + 12828 12822 12827 + 12828 12829 12822 + 12823 12822 12829 + 12830 12823 12829 + 12830 12824 12823 + 12627 12626 12827 + 12632 12827 12626 + 12827 12632 12831 + 12828 12827 12831 + 12832 12828 12831 + 12829 12828 12832 + 12832 12833 12829 + 12830 12829 12833 + 12833 12834 12830 + 12834 12835 12830 + 12830 12835 12824 + 12637 12831 12632 + 12831 12637 12836 + 12836 12837 12831 + 12832 12831 12837 + 12838 12832 12837 + 12833 12832 12838 + 12838 12834 12833 + 12834 12838 12839 + 12839 12835 12834 + 12824 12835 12839 + 12839 12825 12824 + 12839 12826 12825 + 12637 12840 12836 + 12840 12841 12836 + 12842 12836 12841 + 12836 12842 12843 + 12843 12837 12836 + 12837 12843 12838 + 12844 12838 12843 + 12838 12844 12839 + 12839 12844 12826 + 12636 12840 12637 + 12642 12840 12636 + 12840 12642 12841 + 12642 12845 12841 + 12841 12845 12846 + 12846 12847 12841 + 12841 12847 12842 + 12641 12845 12642 + 12846 12845 12641 + 12641 12647 12846 + 12846 12647 12652 + 12847 12846 12652 + 12652 12848 12847 + 12842 12847 12848 + 12848 12849 12842 + 12842 12849 12850 + 12843 12842 12850 + 12850 12844 12843 + 12850 12851 12844 + 12851 12826 12844 + 12820 12826 12851 + 12848 12652 12651 + 12848 12651 12852 + 12848 12852 12853 + 12853 12849 12848 + 12850 12849 12853 + 12850 12853 12851 + 12851 12853 12821 + 12821 12820 12851 + 12852 12651 12657 + 12657 12854 12852 + 12854 12853 12852 + 12853 12854 12821 + 12821 12854 12816 + 12854 12662 12816 + 12662 12854 12657 + 12671 12806 12672 + 12806 12671 12855 + 12855 12807 12806 + 12676 12855 12671 + 12856 12855 12676 + 12807 12855 12856 + 12856 12857 12807 + 12807 12857 12858 + 12858 12859 12807 + 12807 12859 12808 + 12676 12860 12856 + 12861 12856 12860 + 12857 12856 12861 + 12861 12862 12857 + 12858 12857 12862 + 12675 12860 12676 + 12860 12675 12863 + 12863 12864 12860 + 12860 12864 12861 + 12864 12865 12861 + 12866 12861 12865 + 12862 12861 12866 + 12680 12863 12675 + 12867 12863 12680 + 12863 12867 12868 + 12868 12864 12863 + 12864 12868 12869 + 12869 12865 12864 + 12869 12870 12865 + 12865 12870 12866 + 12680 12685 12867 + 12871 12867 12685 + 12868 12867 12871 + 12871 12872 12868 + 12868 12872 12873 + 12873 12869 12868 + 12870 12869 12873 + 12873 12874 12870 + 12866 12870 12874 + 12875 12866 12874 + 12862 12866 12875 + 12685 12876 12871 + 12877 12871 12876 + 12871 12877 12878 + 12878 12872 12871 + 12872 12878 12879 + 12879 12873 12872 + 12873 12879 12880 + 12880 12874 12873 + 12881 12876 12685 + 12881 12882 12876 + 12876 12882 12877 + 12877 12882 12883 + 12883 12884 12877 + 12878 12877 12884 + 12884 12885 12878 + 12879 12878 12885 + 12685 12684 12881 + 12881 12684 12683 + 12683 12886 12881 + 12882 12881 12886 + 12886 12887 12882 + 12882 12887 12883 + 12888 12883 12887 + 12889 12883 12888 + 12883 12889 12890 + 12890 12884 12883 + 12885 12884 12890 + 12891 12886 12683 + 12887 12886 12891 + 12887 12891 12888 + 12888 12891 12682 + 12892 12888 12682 + 12889 12888 12892 + 12892 12893 12889 + 12893 12894 12889 + 12894 12890 12889 + 12683 12682 12891 + 12892 12895 12893 + 12895 12892 12896 + 12896 12897 12895 + 12895 12897 12898 + 12899 12895 12898 + 12892 12692 12896 + 12697 12896 12692 + 12896 12697 12900 + 12900 12897 12896 + 12897 12900 12901 + 12901 12898 12897 + 12902 12898 12901 + 12692 12892 12682 + 12899 12898 12903 + 12903 12904 12899 + 12893 12899 12904 + 12904 12894 12893 + 12894 12904 12905 + 12894 12905 12890 + 12905 12906 12890 + 12890 12906 12885 + 12905 12904 12903 + 12903 12907 12905 + 12906 12905 12907 + 12907 12908 12906 + 12885 12906 12908 + 12908 12909 12885 + 12885 12909 12879 + 12880 12879 12909 + 12910 12907 12903 + 12907 12910 12911 + 12911 12908 12907 + 12908 12911 12912 + 12912 12909 12908 + 12909 12912 12880 + 12880 12912 12913 + 12913 12914 12880 + 12874 12880 12914 + 12903 12915 12910 + 12910 12915 12916 + 12916 12917 12910 + 12910 12917 12918 + 12918 12911 12910 + 12912 12911 12918 + 12918 12913 12912 + 12919 12915 12903 + 12920 12915 12919 + 12920 12916 12915 + 12921 12916 12920 + 12917 12916 12921 + 12917 12921 12922 + 12922 12923 12917 + 12917 12923 12918 + 12902 12919 12903 + 12924 12919 12902 + 12919 12924 12925 + 12925 12920 12919 + 12926 12920 12925 + 12920 12926 12921 + 12921 12926 12927 + 12927 12922 12921 + 12924 12902 12901 + 12925 12924 12901 + 12901 12928 12925 + 12929 12925 12928 + 12925 12929 12926 + 12926 12929 12927 + 12930 12928 12901 + 12931 12928 12930 + 12928 12931 12929 + 12932 12929 12931 + 12929 12932 12927 + 12901 12900 12930 + 12930 12900 12697 + 12697 12696 12930 + 12933 12930 12696 + 12930 12933 12931 + 12931 12933 12934 + 12931 12934 12932 + 12932 12934 12935 + 12936 12932 12935 + 12932 12936 12927 + 12696 12702 12933 + 12937 12933 12702 + 12933 12937 12934 + 12935 12934 12937 + 12937 12938 12935 + 12935 12938 12939 + 12939 12940 12935 + 12936 12935 12940 + 12702 12941 12937 + 12938 12937 12941 + 12941 12942 12938 + 12938 12942 12943 + 12943 12944 12938 + 12944 12945 12938 + 12945 12939 12938 + 12701 12941 12702 + 12942 12941 12701 + 12942 12701 12700 + 12700 12943 12942 + 12946 12943 12700 + 12943 12946 12947 + 12947 12944 12943 + 12944 12947 12948 + 12948 12949 12944 + 12944 12949 12950 + 12950 12945 12944 + 12700 12706 12946 + 12946 12706 12951 + 12951 12952 12946 + 12946 12952 12953 + 12953 12947 12946 + 12948 12947 12953 + 12954 12951 12706 + 12955 12951 12954 + 12955 12952 12951 + 12952 12955 12956 + 12956 12953 12952 + 12957 12953 12956 + 12953 12957 12948 + 12706 12705 12954 + 12705 12958 12954 + 12959 12954 12958 + 12960 12954 12959 + 12954 12960 12955 + 12960 12961 12955 + 12961 12956 12955 + 12962 12956 12961 + 12956 12962 12957 + 12710 12958 12705 + 12958 12710 12963 + 12958 12963 12959 + 12964 12959 12963 + 12965 12959 12964 + 12959 12965 12960 + 12960 12965 12966 + 12966 12961 12960 + 12963 12710 12709 + 12709 12967 12963 + 12963 12967 12964 + 12967 12709 12968 + 12967 12968 12969 + 12969 12970 12967 + 12967 12970 12964 + 12968 12709 12714 + 12714 12971 12968 + 12968 12971 12972 + 12972 12969 12968 + 12973 12969 12972 + 12973 12970 12969 + 12970 12973 12974 + 12974 12975 12970 + 12970 12975 12964 + 12971 12714 12713 + 12713 12976 12971 + 12971 12976 12977 + 12977 12978 12971 + 12971 12978 12972 + 12979 12972 12978 + 12980 12972 12979 + 12972 12980 12973 + 12974 12973 12980 + 12976 12713 12981 + 12981 12982 12976 + 12977 12976 12982 + 12982 12983 12977 + 12984 12977 12983 + 12977 12984 12985 + 12985 12978 12977 + 12978 12985 12979 + 12718 12981 12713 + 12986 12981 12718 + 12982 12981 12986 + 12986 12987 12982 + 12982 12987 12988 + 12988 12983 12982 + 12989 12983 12988 + 12983 12989 12984 + 12990 12984 12989 + 12985 12984 12990 + 12718 12991 12986 + 12986 12991 12992 + 12992 12993 12986 + 12987 12986 12993 + 12993 12994 12987 + 12988 12987 12994 + 12786 12991 12718 + 12991 12786 12995 + 12995 12992 12991 + 12992 12995 12996 + 12996 12997 12992 + 12992 12997 12998 + 12998 12993 12992 + 12994 12993 12998 + 12791 12995 12786 + 12996 12995 12791 + 12791 12999 12996 + 13000 12996 12999 + 12997 12996 13000 + 13000 13001 12997 + 12998 12997 13001 + 13001 13002 12998 + 13003 12998 13002 + 12998 13003 12994 + 13004 12999 12791 + 12999 13004 13005 + 13005 13006 12999 + 12999 13006 13000 + 13006 13007 13000 + 13007 13008 13000 + 13001 13000 13008 + 12791 12790 13004 + 13004 12790 12789 + 12789 13009 13004 + 13004 13009 13010 + 13010 13005 13004 + 13005 13010 13011 + 13012 13005 13011 + 13006 13005 13012 + 13012 13007 13006 + 12799 13009 12789 + 13009 12799 13013 + 13013 13010 13009 + 13011 13010 13013 + 13014 13011 13013 + 13015 13011 13014 + 13012 13011 13015 + 13015 13016 13012 + 13007 13012 13016 + 13016 13017 13007 + 13008 13007 13017 + 13018 13013 12799 + 13014 13013 13018 + 13018 13019 13014 + 13014 13019 13020 + 13020 13015 13014 + 13021 13015 13020 + 13021 13022 13015 + 13016 13015 13022 + 12799 12804 13018 + 13018 12804 13023 + 13024 13018 13023 + 13019 13018 13024 + 13025 13019 13024 + 13026 13019 13025 + 13019 13026 13020 + 13020 13026 13027 + 13021 13020 13027 + 13023 12804 12803 + 13023 12803 13028 + 13028 13029 13023 + 13023 13029 13030 + 13030 13024 13023 + 13025 13024 13030 + 13030 13031 13025 + 13032 13025 13031 + 13032 13026 13025 + 13028 12803 12802 + 12802 13033 13028 + 13034 13028 13033 + 13028 13034 13035 + 13035 13029 13028 + 13029 13035 13036 + 13036 13030 13029 + 13030 13036 13037 + 13037 13031 13030 + 12808 13033 12802 + 13038 13033 12808 + 13033 13038 13034 + 13034 13038 13039 + 13039 13040 13034 + 13035 13034 13040 + 13040 13041 13035 + 13035 13041 13042 + 13042 13036 13035 + 13037 13036 13042 + 12808 13043 13038 + 13038 13043 12989 + 12989 13039 13038 + 12988 13039 12989 + 13039 12988 13044 + 13044 13040 13039 + 13040 13044 13045 + 13045 13041 13040 + 13043 12808 12859 + 12859 12990 13043 + 12989 13043 12990 + 12990 12859 12858 + 12858 13046 12990 + 12990 13046 12985 + 12979 12985 13046 + 13046 13047 12979 + 13048 12979 13047 + 12979 13048 12980 + 13046 12858 13049 + 13049 13047 13046 + 13047 13049 13050 + 13050 13051 13047 + 13047 13051 13048 + 13048 13051 13052 + 13052 13053 13048 + 12980 13048 13053 + 13049 12858 12862 + 12862 13054 13049 + 13050 13049 13054 + 13054 13055 13050 + 13050 13055 13056 + 13056 13057 13050 + 13057 13058 13050 + 13051 13050 13058 + 12875 13054 12862 + 12875 13055 13054 + 13055 12875 13059 + 13059 13056 13055 + 13060 13056 13059 + 13056 13060 13061 + 13061 13057 13056 + 13062 13057 13061 + 13057 13062 13063 + 13063 13058 13057 + 12874 13059 12875 + 12914 13059 12874 + 13059 12914 13060 + 13060 12914 12913 + 12913 13064 13060 + 13060 13064 13065 + 13065 13061 13060 + 13062 13061 13065 + 13065 13066 13062 + 13062 13066 13067 + 13067 13063 13062 + 13068 13063 13067 + 13068 13058 13063 + 13058 13068 13051 + 13051 13068 13052 + 13064 12913 12918 + 12918 13069 13064 + 13064 13069 13070 + 13070 13065 13064 + 13065 13070 13071 + 13071 13066 13065 + 13066 13071 13072 + 13072 13073 13066 + 13066 13073 13067 + 13069 12918 12923 + 12923 13074 13069 + 13069 13074 13075 + 13075 13076 13069 + 13076 13070 13069 + 13071 13070 13076 + 13076 13077 13071 + 13071 13077 13078 + 13078 13072 13071 + 13074 12923 12922 + 12922 13079 13074 + 13074 13079 13080 + 13080 13081 13074 + 13074 13081 13075 + 13079 12922 12927 + 12927 13082 13079 + 13079 13082 13080 + 13082 13083 13080 + 13084 13080 13083 + 13080 13084 13081 + 13081 13084 13075 + 12936 13082 12927 + 13082 12936 13085 + 13085 13083 13082 + 13083 13085 13086 + 13083 13086 13084 + 13087 13084 13086 + 13084 13087 13075 + 13075 13087 13088 + 13075 13088 13089 + 13089 13076 13075 + 13077 13076 13089 + 13085 12936 12940 + 13090 13085 12940 + 13085 13090 13086 + 13086 13090 13091 + 13086 13091 13087 + 13088 13087 13091 + 13091 13092 13088 + 13088 13092 13093 + 13093 13089 13088 + 13094 13089 13093 + 13089 13094 13077 + 12940 13095 13090 + 13096 13090 13095 + 13090 13096 13091 + 13092 13091 13096 + 13096 13097 13092 + 13092 13097 13098 + 13098 13093 13092 + 13099 13093 13098 + 13093 13099 13094 + 13095 12940 12939 + 13095 12939 13100 + 13100 13096 13095 + 13097 13096 13100 + 13100 12950 13097 + 13098 13097 12950 + 12950 12949 13098 + 13101 13098 12949 + 13098 13101 13099 + 13099 13101 13102 + 13094 13099 13102 + 12939 12945 13100 + 12945 12950 13100 + 12949 12948 13101 + 13103 13101 12948 + 13101 13103 13102 + 13102 13103 13104 + 13105 13102 13104 + 13102 13105 13094 + 13077 13094 13105 + 13105 13078 13077 + 12948 12957 13103 + 13106 13103 12957 + 13103 13106 13104 + 13107 13104 13106 + 13104 13107 13108 + 13108 13109 13104 + 13109 13105 13104 + 13109 13078 13105 + 12957 12962 13106 + 13106 12962 13110 + 13110 13111 13106 + 13111 13107 13106 + 13112 13107 13111 + 13107 13112 13113 + 13113 13108 13107 + 12961 13110 12962 + 13114 13110 12961 + 13110 13114 13115 + 13115 13111 13110 + 13111 13115 13112 + 13112 13115 13116 + 13113 13112 13116 + 13116 13117 13113 + 13118 13113 13117 + 13108 13113 13118 + 12961 12966 13114 + 13114 12966 13119 + 13114 13119 13120 + 13120 13115 13114 + 13115 13120 13116 + 13121 13116 13120 + 13121 13122 13116 + 13116 13122 13123 + 13123 13117 13116 + 12966 13124 13119 + 13124 12964 13119 + 13119 12964 13125 + 13125 13126 13119 + 13119 13126 13120 + 13126 13127 13120 + 13127 13121 13120 + 13124 12966 12965 + 12964 13124 12965 + 13127 13126 13125 + 13127 13125 13128 + 13121 13127 13128 + 13128 13129 13121 + 13122 13121 13129 + 13129 13130 13122 + 13130 13123 13122 + 13131 13123 13130 + 13117 13123 13131 + 13132 13117 13131 + 13117 13132 13118 + 13125 13133 13128 + 13134 13128 13133 + 13128 13134 13135 + 13135 13129 13128 + 13130 13129 13135 + 13136 13130 13135 + 13130 13136 13131 + 13136 13137 13131 + 13132 13131 13137 + 13133 13125 12964 + 13138 13133 12964 + 13134 13133 13138 + 13138 13139 13134 + 13135 13134 13139 + 13139 13140 13135 + 13136 13135 13140 + 13140 13141 13136 + 13136 13141 13137 + 12975 13138 12964 + 13142 13138 12975 + 13139 13138 13142 + 13139 13142 13140 + 13142 13143 13140 + 13140 13143 13141 + 13141 13143 13144 + 13144 13137 13141 + 13145 13137 13144 + 13137 13145 13132 + 13118 13132 13145 + 12975 13146 13142 + 13142 13146 13147 + 13143 13142 13147 + 13147 13144 13143 + 13148 13144 13147 + 13144 13148 13145 + 13145 13148 13149 + 13149 13150 13145 + 13145 13150 13118 + 12975 12974 13146 + 13146 12974 13151 + 13151 13147 13146 + 13147 13151 13152 + 13147 13152 13148 + 13149 13148 13152 + 13153 13151 12974 + 13152 13151 13153 + 13153 13154 13152 + 13152 13154 13149 + 13154 13155 13149 + 13156 13149 13155 + 13149 13156 13157 + 13157 13150 13149 + 12980 13153 12974 + 13053 13153 12980 + 13153 13053 13154 + 13154 13053 13052 + 13052 13155 13154 + 13067 13155 13052 + 13155 13067 13156 + 13073 13156 13067 + 13073 13158 13156 + 13158 13157 13156 + 13157 13158 13159 + 13159 13160 13157 + 13150 13157 13160 + 13160 13118 13150 + 13118 13160 13108 + 13067 13052 13068 + 13108 13160 13159 + 13159 13109 13108 + 13109 13159 13078 + 13078 13159 13158 + 13158 13072 13078 + 13072 13158 13073 + 12994 13044 12988 + 13045 13044 12994 + 12994 13003 13045 + 13045 13003 13161 + 13161 13162 13045 + 13041 13045 13162 + 13162 13042 13041 + 13163 13042 13162 + 13042 13163 13037 + 13002 13161 13003 + 13161 13002 13164 + 13164 13165 13161 + 13162 13161 13165 + 13166 13162 13165 + 13166 13163 13162 + 13167 13163 13166 + 13037 13163 13167 + 13164 13002 13168 + 13164 13168 13169 + 13169 13170 13164 + 13165 13164 13170 + 13170 13171 13165 + 13166 13165 13171 + 13171 13172 13166 + 13172 13167 13166 + 13002 13001 13168 + 13008 13168 13001 + 13168 13008 13173 + 13173 13169 13168 + 13174 13169 13173 + 13174 13175 13169 + 13170 13169 13175 + 13176 13170 13175 + 13176 13171 13170 + 13017 13173 13008 + 13174 13173 13017 + 13017 13177 13174 + 13174 13177 13178 + 13175 13174 13178 + 13178 13179 13175 + 13176 13175 13179 + 13179 13180 13176 + 13180 13181 13176 + 13176 13181 13171 + 13182 13177 13017 + 13177 13182 13183 + 13183 13178 13177 + 13178 13183 13180 + 13180 13179 13178 + 13182 13017 13016 + 13182 13016 13022 + 13183 13182 13022 + 13184 13183 13022 + 13180 13183 13184 + 13184 13185 13180 + 13181 13180 13185 + 13185 13186 13181 + 13171 13181 13186 + 13186 13172 13171 + 13186 13167 13172 + 13022 13187 13184 + 13187 13188 13184 + 13188 13189 13184 + 13184 13189 13185 + 13185 13189 13190 + 13190 13186 13185 + 13186 13190 13167 + 13191 13167 13190 + 13167 13191 13037 + 13187 13022 13021 + 13192 13187 13021 + 13187 13192 13193 + 13193 13188 13187 + 13188 13193 13194 + 13194 13195 13188 + 13189 13188 13195 + 13195 13190 13189 + 13195 13191 13190 + 13195 13196 13191 + 13191 13196 13037 + 13196 13031 13037 + 13021 13027 13192 + 13192 13027 13197 + 13193 13192 13197 + 13197 13194 13193 + 13196 13194 13197 + 13195 13194 13196 + 13197 13027 13026 + 13197 13026 13032 + 13197 13032 13196 + 13031 13196 13032 + 12717 12783 12718 + 12779 12783 12717 + 12717 12722 12779 + 12779 12722 12727 + 12726 12780 12727 + 12780 12726 13198 + 13198 13199 12780 + 12780 13199 12771 + 12772 12771 13199 + 12731 13198 12726 + 13198 12731 13200 + 13201 13198 13200 + 13201 13199 13198 + 13201 13202 13199 + 13199 13202 12772 + 12772 13202 13203 + 13203 13204 12772 + 12765 12772 13204 + 12735 13200 12731 + 13200 12735 13205 + 13205 13206 13200 + 13201 13200 13206 + 13206 13207 13201 + 13207 13203 13201 + 13203 13202 13201 + 12739 13205 12735 + 13205 12739 13208 + 13209 13205 13208 + 13209 13206 13205 + 13209 13210 13206 + 13206 13210 13211 + 13211 13207 13206 + 13211 13203 13207 + 12744 13208 12739 + 13208 12744 13212 + 13212 13213 13208 + 13209 13208 13213 + 13213 13214 13209 + 13214 13210 13209 + 13210 13214 13215 + 13215 13216 13210 + 13216 13211 13210 + 12744 12743 13212 + 13217 13212 12743 + 13212 13217 13214 + 13214 13213 13212 + 12743 12748 13217 + 13218 13217 12748 + 13217 13218 13215 + 13214 13217 13215 + 12748 12757 13218 + 12757 12756 13218 + 12756 13219 13218 + 13215 13218 13219 + 13215 13219 13220 + 13220 13216 13215 + 13221 13216 13220 + 13216 13221 13222 + 13222 13211 13216 + 13211 13222 13203 + 13219 12756 12762 + 12762 13220 13219 + 13220 12762 13223 + 13224 13220 13223 + 13220 13224 13221 + 13221 13224 13225 + 13225 13226 13221 + 13226 13222 13221 + 13203 13222 13226 + 13226 13204 13203 + 13223 12762 12761 + 13223 12761 12767 + 13223 12767 13225 + 13223 13225 13224 + 12767 12766 13225 + 13226 13225 12766 + 13226 12766 13204 + 13204 12766 12765 + 13227 13228 13229 + 13230 13227 13229 + 13230 13229 13231 + 13232 13230 13231 + 13233 13232 13231 + 13231 13234 13233 + 13233 13234 13235 + 13236 13233 13235 + 13237 13234 13231 + 13234 13237 13238 + 13238 13235 13234 + 13239 13235 13238 + 13235 13239 13236 + 13236 13239 13240 + 13240 13241 13236 + 13242 13236 13241 + 13231 13228 13237 + 13237 13228 13243 + 13243 13244 13237 + 13237 13244 13245 + 13245 13238 13237 + 13246 13238 13245 + 13238 13246 13239 + 13239 13246 13247 + 13247 13240 13239 + 13248 13244 13243 + 13244 13248 13249 + 13249 13245 13244 + 13250 13245 13249 + 13245 13250 13246 + 13247 13246 13250 + 13250 13251 13247 + 13252 13247 13251 + 13240 13247 13252 + 13243 13253 13248 + 13248 13253 13254 + 13254 13255 13248 + 13249 13248 13255 + 13255 13256 13249 + 13257 13249 13256 + 13249 13257 13250 + 13253 13243 13258 + 13258 13259 13253 + 13254 13253 13259 + 13259 13260 13254 + 13261 13254 13260 + 13255 13254 13261 + 13227 13258 13243 + 13242 13262 13263 + 13236 13242 13263 + 13233 13236 13263 + 13232 13233 13263 + 13230 13232 13263 + 13227 13230 13263 + 13263 13264 13227 + 13265 13266 13267 + 13266 13268 13267 + 98 13269 2731 + 13269 13270 2731 + 13271 13272 13273 + 13274 13272 13271 + 13272 13274 13275 + 13272 13275 13276 + 13276 13277 13272 + 13271 13278 13274 + 13274 13278 13279 + 13280 13274 13279 + 13275 13274 13280 + 13280 13281 13275 + 13275 13281 13282 + 13282 13276 13275 + 13271 13283 13278 + 13278 13283 13284 + 13284 13279 13278 + 13283 13271 13285 + 13285 13286 13283 + 13284 13283 13286 + 13285 13271 13277 + 13287 13285 13277 + 13288 13285 13287 + 13285 13288 13286 + 13286 13288 13289 + 13289 13290 13286 + 13286 13290 13284 + 13277 13291 13287 + 13292 13287 13291 + 13293 13287 13292 + 13287 13293 13288 + 13288 13293 13294 + 13289 13288 13294 + 13295 13291 13277 + 13291 13295 13296 + 13291 13296 13292 + 13297 13292 13296 + 13298 13292 13297 + 13292 13298 13293 + 13293 13298 13299 + 13299 13294 13293 + 13277 13300 13295 + 13301 13295 13300 + 13296 13295 13301 + 13301 13297 13296 + 13297 13301 13302 + 13302 13303 13297 + 13297 13303 13298 + 13303 13299 13298 + 13304 13300 13277 + 13300 13304 13305 + 13305 13306 13300 + 13277 13276 13304 + 13304 13276 13282 + 13282 13307 13304 + 13307 13305 13304 + 13308 13305 13307 + 13305 13308 13309 + 13309 13310 13305 + 13311 13307 13282 + 13307 13311 13308 + 13312 13308 13311 + 13309 13308 13312 + 13312 13313 13309 + 13302 13309 13313 + 13309 13302 13301 + 13314 13309 13301 + 13282 13315 13311 + 13311 13315 13316 + 13316 13312 13311 + 13313 13312 13316 + 13316 13317 13313 + 13313 13317 13318 + 13318 13319 13313 + 13313 13319 13302 + 13315 13282 13281 + 13281 13320 13315 + 13316 13315 13320 + 13320 13321 13316 + 13317 13316 13321 + 13321 13322 13317 + 13317 13322 13323 + 13323 13318 13317 + 13324 13318 13323 + 13319 13318 13324 + 13320 13281 13280 + 13280 13325 13320 + 13320 13325 13326 + 13326 13321 13320 + 13322 13321 13326 + 13326 13327 13322 + 13322 13327 13328 + 13328 13323 13322 + 13329 13323 13328 + 13323 13329 13324 + 13325 13280 13330 + 13330 13331 13325 + 13326 13325 13331 + 13332 13326 13331 + 13327 13326 13332 + 13330 13280 13279 + 13279 13333 13330 + 13334 13330 13333 + 13334 13331 13330 + 13331 13334 13335 + 13335 13336 13331 + 13331 13336 13337 + 13337 13332 13331 + 13338 13333 13279 + 13338 13339 13333 + 13333 13339 13334 + 13334 13339 13340 + 13335 13334 13340 + 13341 13335 13340 + 13342 13335 13341 + 13335 13342 13336 + 13279 13343 13338 + 13343 13344 13338 + 13339 13338 13344 + 13344 13345 13339 + 13339 13345 13340 + 13279 13284 13343 + 13343 13284 13346 + 13346 13344 13343 + 13344 13346 13345 + 13345 13346 13347 + 13347 13340 13345 + 13347 13348 13340 + 13340 13348 13349 + 13349 13350 13340 + 13340 13350 13341 + 13347 13346 13284 + 13351 13347 13284 + 13348 13347 13351 + 13351 13352 13348 + 13348 13352 13349 + 13352 13353 13349 + 13354 13349 13353 + 13349 13354 13355 + 13355 13350 13349 + 13356 13351 13284 + 13357 13351 13356 + 13357 13352 13351 + 13352 13357 13358 + 13358 13353 13352 + 13359 13356 13284 + 13360 13356 13359 + 13361 13356 13360 + 13356 13361 13357 + 13362 13357 13361 + 13290 13359 13284 + 13363 13359 13290 + 13359 13363 13364 + 13364 13365 13359 + 13359 13365 13360 + 13290 13366 13363 + 13367 13363 13366 + 13290 13289 13366 + 13366 13289 13368 + 13368 13369 13366 + 13366 13369 13370 + 13370 13371 13366 + 13294 13368 13289 + 13372 13368 13294 + 13368 13372 13373 + 13373 13369 13368 + 13369 13373 13374 + 13374 13370 13369 + 13375 13370 13374 + 13370 13375 13376 + 13376 13377 13370 + 13294 13378 13372 + 13372 13378 13324 + 13379 13372 13324 + 13373 13372 13379 + 13379 13380 13373 + 13374 13373 13380 + 13378 13294 13299 + 13299 13381 13378 + 13378 13381 13319 + 13319 13324 13378 + 13381 13299 13303 + 13303 13302 13381 + 13319 13381 13302 + 13300 13382 13301 + 13324 13329 13379 + 13383 13379 13329 + 13380 13379 13383 + 13380 13383 13384 + 13384 13385 13380 + 13380 13385 13374 + 13386 13374 13385 + 13374 13386 13375 + 13329 13387 13383 + 13383 13387 13388 + 13388 13384 13383 + 13389 13384 13388 + 13384 13389 13390 + 13390 13385 13384 + 13385 13390 13386 + 13391 13386 13390 + 13375 13386 13391 + 13328 13387 13329 + 13387 13328 13392 + 13392 13388 13387 + 13393 13388 13392 + 13388 13393 13389 + 13394 13389 13393 + 13390 13389 13394 + 13394 13395 13390 + 13390 13395 13391 + 13392 13328 13327 + 13396 13392 13327 + 13397 13392 13396 + 13392 13397 13393 + 13393 13397 13398 + 13398 13399 13393 + 13393 13399 13394 + 13400 13394 13399 + 13395 13394 13400 + 13327 13401 13396 + 13402 13396 13401 + 13403 13396 13402 + 13396 13403 13397 + 13398 13397 13403 + 13403 13404 13398 + 13405 13398 13404 + 13405 13399 13398 + 13399 13405 13400 + 13332 13401 13327 + 13401 13332 13406 + 13406 13407 13401 + 13401 13407 13402 + 13402 13407 13408 + 13408 13409 13402 + 13410 13402 13409 + 13402 13410 13403 + 13406 13332 13337 + 13337 13411 13406 + 13406 13411 13412 + 13412 13413 13406 + 13407 13406 13413 + 13413 13408 13407 + 13414 13411 13337 + 13411 13414 13415 + 13415 13412 13411 + 13412 13415 13416 + 13416 13417 13412 + 13412 13417 13418 + 13418 13413 13412 + 13408 13413 13418 + 13337 13419 13414 + 13414 13419 13420 + 13420 13421 13414 + 13414 13421 13422 + 13422 13415 13414 + 13416 13415 13422 + 13419 13337 13336 + 13336 13342 13419 + 13420 13419 13342 + 13342 13423 13420 + 13424 13420 13423 + 13420 13424 13425 + 13425 13421 13420 + 13421 13425 13426 + 13426 13422 13421 + 13341 13423 13342 + 13427 13423 13341 + 13423 13427 13424 + 13428 13424 13427 + 13425 13424 13428 + 13428 13429 13425 + 13426 13425 13429 + 13429 13430 13426 + 13431 13426 13430 + 13422 13426 13431 + 13341 13432 13427 + 13427 13432 13433 + 13433 13434 13427 + 13427 13434 13428 + 13432 13341 13350 + 13350 13355 13432 + 13432 13355 13435 + 13435 13433 13432 + 13436 13433 13435 + 13433 13436 13437 + 13437 13434 13433 + 13434 13437 13438 + 13438 13439 13434 + 13434 13439 13428 + 13440 13435 13355 + 13440 13441 13435 + 13435 13441 13436 + 13442 13436 13441 + 13437 13436 13442 + 13442 13443 13437 + 13438 13437 13443 + 13355 13354 13440 + 13440 13354 13444 + 13445 13440 13444 + 13441 13440 13445 + 13445 13446 13441 + 13441 13446 13442 + 13446 13447 13442 + 13448 13442 13447 + 13442 13448 13443 + 13353 13444 13354 + 13449 13444 13353 + 13364 13363 13450 + 13450 13451 13364 + 13452 13364 13451 + 13365 13364 13452 + 13452 13453 13365 + 13360 13365 13453 + 13451 13454 13452 + 13455 13456 13457 + 13458 13455 13457 + 13459 13455 13458 + 13459 13460 13455 + 13455 13460 13461 + 13461 13462 13455 + 13463 13458 13457 + 13464 13458 13463 + 13465 13458 13464 + 13458 13465 13459 + 13466 13459 13465 + 13460 13459 13466 + 13457 13467 13463 + 13468 13463 13467 + 13463 13468 7297 + 7297 7303 13463 + 13463 7303 13464 + 13469 13467 13457 + 13470 13467 13469 + 13467 13470 13468 + 7298 13468 13470 + 7297 13468 7298 + 13457 13471 13469 + 13472 13469 13471 + 13473 13469 13472 + 13469 13473 13470 + 13470 13473 13474 + 13474 13475 13470 + 13470 13475 7298 + 13457 13476 13471 + 13471 13476 13477 + 13477 13478 13471 + 13471 13478 13472 + 13479 13472 13478 + 13480 13472 13479 + 13472 13480 13473 + 13474 13473 13480 + 13476 13457 13481 + 13481 13482 13476 + 13476 13482 13483 + 13483 13484 13476 + 13484 13485 13476 + 13485 13477 13476 + 13486 13477 13485 + 13478 13477 13486 + 13486 13487 13478 + 13478 13487 13479 + 13488 13483 13482 + 13489 13483 13488 + 13483 13489 13490 + 13490 13484 13483 + 13490 13491 13484 + 13484 13491 13492 + 13492 13485 13484 + 13482 13461 13488 + 13488 13461 13460 + 13460 13493 13488 + 13489 13488 13493 + 13461 13482 13494 + 13466 13493 13460 + 13466 13495 13493 + 13493 13495 13489 + 13489 13495 13496 + 13496 13497 13489 + 13497 13498 13489 + 13498 13490 13489 + 13491 13490 13498 + 13495 13466 13499 + 13499 13496 13495 + 13500 13496 13499 + 13496 13500 13501 + 13501 13497 13496 + 13502 13497 13501 + 13497 13502 13503 + 13503 13498 13497 + 13499 13466 13465 + 13504 13499 13465 + 13500 13499 13504 + 13504 13505 13500 + 13501 13500 13505 + 13505 13506 13501 + 13465 13507 13504 + 13508 13504 13507 + 13505 13504 13508 + 13508 13509 13505 + 13505 13509 13510 + 13510 13511 13505 + 13512 13507 13465 + 13513 13507 13512 + 13507 13513 13508 + 13508 13513 7312 + 7323 13508 7312 + 13509 13508 7323 + 13465 13464 13512 + 7308 13512 13464 + 13513 13512 7308 + 7308 7312 13513 + 13464 7303 7308 + 13514 13515 13516 + 13517 13514 13516 + 13518 13514 13517 + 13519 13514 13518 + 13514 13519 13520 + 13520 13521 13514 + 13516 13522 13517 + 13522 13523 13517 + 13524 13517 13523 + 13517 13524 13525 + 13517 13525 13518 + 13526 13522 13516 + 13526 13527 13522 + 13522 13527 13528 + 13528 13523 13522 + 13523 13528 13529 + 13523 13529 13524 + 13530 13524 13529 + 13525 13524 13530 + 13516 13531 13526 + 13532 13526 13531 + 13527 13526 13532 + 13532 13533 13527 + 13528 13527 13533 + 13533 13534 13528 + 13534 13535 13528 + 13529 13528 13535 + 13536 13531 13516 + 13531 13536 13537 + 13537 13538 13531 + 13531 13538 13539 + 13539 13532 13531 + 13536 13516 13521 + 13521 13540 13536 + 13536 13540 13541 + 13541 13542 13536 + 13542 13537 13536 + 13543 13537 13542 + 13543 13538 13537 + 13538 13543 13544 + 13544 13539 13538 + 13540 13521 13520 + 13540 13520 13545 + 13545 13541 13540 + 13541 13545 13546 + 13546 13547 13541 + 13541 13547 13548 + 13548 13542 13541 + 13549 13542 13548 + 13542 13549 13543 + 13544 13543 13549 + 13545 13520 13519 + 13550 13545 13519 + 13546 13545 13550 + 13550 13551 13546 + 13546 13551 13552 + 13552 13553 13546 + 13547 13546 13553 + 13553 13554 13547 + 13548 13547 13554 + 13519 13555 13550 + 13556 13550 13555 + 13550 13556 13557 + 13557 13551 13550 + 13551 13557 13558 + 13558 13552 13551 + 13559 13555 13519 + 13560 13555 13559 + 13555 13560 13556 + 13561 13556 13560 + 13557 13556 13561 + 13561 13562 13557 + 13557 13562 13563 + 13563 13558 13557 + 13519 13518 13559 + 13559 13518 13564 + 13564 13565 13559 + 13566 13559 13565 + 13559 13566 13560 + 13560 13566 13567 + 13567 13568 13560 + 13560 13568 13561 + 13518 13525 13564 + 13530 13564 13525 + 13564 13530 13569 + 13564 13569 13570 + 13570 13565 13564 + 13571 13565 13570 + 13565 13571 13566 + 13567 13566 13571 + 13569 13530 13572 + 13572 13573 13569 + 13569 13573 13574 + 13574 13570 13569 + 13575 13570 13574 + 13570 13575 13571 + 13576 13572 13530 + 13577 13572 13576 + 13573 13572 13577 + 13577 13578 13573 + 13573 13578 13579 + 13579 13574 13573 + 13580 13574 13579 + 13574 13580 13575 + 13529 13576 13530 + 13535 13576 13529 + 13576 13535 13581 + 13581 13582 13576 + 13576 13582 13577 + 13577 13582 13583 + 13583 13584 13577 + 13578 13577 13584 + 13584 13585 13578 + 13579 13578 13585 + 13581 13535 13534 + 13534 13586 13581 + 13581 13586 13587 + 13587 13588 13581 + 13582 13581 13588 + 13588 13583 13582 + 13589 13586 13534 + 13586 13589 13590 + 13590 13587 13586 + 13587 13590 13591 + 13591 13592 13587 + 13587 13592 13593 + 13593 13588 13587 + 13583 13588 13593 + 13534 13594 13589 + 13589 13594 13595 + 13595 13596 13589 + 13589 13596 13597 + 13597 13590 13589 + 13591 13590 13597 + 13594 13534 13533 + 13533 13598 13594 + 13594 13598 13599 + 13599 13595 13594 + 13600 13595 13599 + 13595 13600 13601 + 13601 13596 13595 + 13596 13601 13602 + 13602 13597 13596 + 13598 13533 13532 + 13532 13603 13598 + 13598 13603 13604 + 13604 13599 13598 + 13599 13604 13605 + 13605 13606 13599 + 13599 13606 13600 + 13607 13600 13606 + 13601 13600 13607 + 13603 13532 13539 + 13539 13608 13603 + 13604 13603 13608 + 13608 13609 13604 + 13609 13610 13604 + 13605 13604 13610 + 13608 13539 13544 + 13544 13611 13608 + 13608 13611 13612 + 13612 13609 13608 + 13613 13609 13612 + 13609 13613 13614 + 13614 13610 13609 + 13611 13544 13615 + 13615 13616 13611 + 13612 13611 13616 + 13616 13617 13612 + 216 13612 13617 + 13612 216 13613 + 13549 13615 13544 + 13618 13615 13549 + 13616 13615 13618 + 13618 13619 13616 + 13616 13619 13620 + 13620 13617 13616 + 13621 13617 13620 + 13617 13621 216 + 216 13621 13622 + 13549 13623 13618 + 13618 13623 13624 + 13624 13625 13618 + 13619 13618 13625 + 13625 13626 13619 + 13620 13619 13626 + 13548 13623 13549 + 13623 13548 13627 + 13627 13624 13623 + 13624 13627 13628 + 13628 13629 13624 + 13624 13629 13630 + 13630 13625 13624 + 13626 13625 13630 + 13554 13627 13548 + 13628 13627 13554 + 13554 13631 13628 + 13628 13631 13632 + 13632 13633 13628 + 13629 13628 13633 + 13633 13634 13629 + 13630 13629 13634 + 13635 13631 13554 + 13631 13635 13636 + 13636 13632 13631 + 13632 13636 13637 + 13637 13638 13632 + 13632 13638 13639 + 13639 13633 13632 + 13634 13633 13639 + 13554 13553 13635 + 13635 13553 13552 + 13552 13640 13635 + 13635 13640 13641 + 13641 13636 13635 + 13637 13636 13641 + 13641 13642 13637 + 13637 13642 13643 + 13643 13644 13637 + 13638 13637 13644 + 13645 13640 13552 + 13640 13645 13646 + 13646 13641 13640 + 13641 13646 13647 + 13647 13642 13641 + 13642 13647 13648 + 13648 13643 13642 + 13552 13558 13645 + 13645 13558 13563 + 13563 13649 13645 + 13645 13649 13650 + 13650 13646 13645 + 13647 13646 13650 + 13650 13651 13647 + 13647 13651 13652 + 13652 13648 13647 + 13653 13648 13652 + 13643 13648 13653 + 13654 13649 13563 + 13649 13654 13655 + 13655 13650 13649 + 13650 13655 13656 + 13656 13651 13650 + 13651 13656 13657 + 13657 13652 13651 + 13563 13658 13654 + 13654 13658 13659 + 13659 13660 13654 + 13660 13655 13654 + 13656 13655 13660 + 13660 13661 13656 + 13657 13656 13661 + 13658 13563 13562 + 13562 13662 13658 + 13659 13658 13662 + 13662 13663 13659 + 7284 13659 13663 + 13659 7284 13661 + 13661 13660 13659 + 13662 13562 13561 + 13561 13664 13662 + 13662 13664 13665 + 13665 13663 13662 + 13664 13561 13568 + 13568 13666 13664 + 13665 13664 13666 + 13667 13665 13666 + 13666 13568 13567 + 13567 13668 13666 + 13666 13668 13667 + 13667 13668 13669 + 13669 7276 13667 + 13670 13667 7276 + 13667 13670 13663 + 13663 13670 7284 + 13668 13567 13671 + 13671 13669 13668 + 13669 13671 13672 + 13672 13673 13669 + 13669 13673 7277 + 7277 7276 13669 + 13571 13671 13567 + 13672 13671 13571 + 13571 13575 13672 + 13672 13575 13580 + 13580 13674 13672 + 13673 13672 13674 + 13674 7278 13673 + 7277 13673 7278 + 7272 13674 13580 + 7278 13674 7272 + 13580 7273 7272 + 13579 7273 13580 + 7273 13579 7274 + 13585 7274 13579 + 7266 7274 13585 + 13585 13675 7266 + 7266 13675 7261 + 13676 7261 13675 + 7261 13676 13677 + 13677 7262 7261 + 13678 13675 13585 + 13675 13678 13676 + 13679 13676 13678 + 13677 13676 13679 + 13679 13680 13677 + 13677 13680 13681 + 13681 13682 13677 + 7262 13677 13682 + 13682 7252 7262 + 13585 13584 13678 + 13678 13584 13583 + 13583 13683 13678 + 13678 13683 13679 + 13684 13679 13683 + 13679 13684 13685 + 13685 13680 13679 + 13680 13685 13686 + 13686 13681 13680 + 13593 13683 13583 + 13683 13593 13684 + 13687 13684 13593 + 13685 13684 13687 + 13687 13688 13685 + 13685 13688 13689 + 13689 13686 13685 + 13690 13686 13689 + 13681 13686 13690 + 13593 13592 13687 + 13691 13687 13592 + 13687 13691 13692 + 13692 13688 13687 + 13688 13692 13693 + 13693 13689 13688 + 13689 13693 13694 + 13694 13695 13689 + 13689 13695 13690 + 13592 13591 13691 + 13691 13591 13696 + 13696 13697 13691 + 13692 13691 13697 + 13697 13698 13692 + 13692 13698 13699 + 13699 13693 13692 + 13694 13693 13699 + 13597 13696 13591 + 13597 13602 13696 + 13696 13602 13700 + 13700 13697 13696 + 13697 13700 13698 + 13698 13700 13701 + 13701 13699 13698 + 13699 13701 13702 + 13702 13703 13699 + 13699 13703 13694 + 13701 13700 13602 + 13704 13701 13602 + 13702 13701 13704 + 13704 13705 13702 + 13706 13702 13705 + 13703 13702 13706 + 13706 13707 13703 + 13694 13703 13707 + 13707 13708 13694 + 13695 13694 13708 + 13709 13704 13602 + 13710 13704 13709 + 13705 13704 13710 + 13710 13711 13705 + 13705 13711 13712 + 13712 13713 13705 + 13705 13713 13706 + 13602 13601 13709 + 13607 13709 13601 + 13709 13607 13714 + 13714 13715 13709 + 13709 13715 13710 + 13710 13715 13716 + 13717 13710 13716 + 13711 13710 13717 + 13717 13718 13711 + 13712 13711 13718 + 13714 13607 13719 + 13719 13720 13714 + 13714 13720 13721 + 13721 13722 13714 + 13715 13714 13722 + 13722 13716 13715 + 13719 13607 13606 + 13606 13723 13719 + 13724 13719 13723 + 13720 13719 13724 + 13720 13724 13725 + 13725 13721 13720 + 13721 13725 13726 + 13721 13726 13727 + 13727 13722 13721 + 13716 13722 13727 + 13728 13723 13606 + 13723 13728 13729 + 13729 13730 13723 + 13723 13730 13724 + 13724 13730 13731 + 13731 13725 13724 + 13726 13725 13731 + 13731 13732 13726 + 13727 13726 13732 + 13606 13605 13728 + 13733 13728 13605 + 13729 13728 13733 + 13733 13734 13729 + 13729 13734 13400 + 13735 13729 13400 + 13730 13729 13735 + 13735 13736 13730 + 13730 13736 13731 + 13605 13737 13733 + 13738 13733 13737 + 13733 13738 13739 + 13739 13734 13733 + 13734 13739 13740 + 13740 13400 13734 + 13400 13740 13395 + 13610 13737 13605 + 13741 13737 13610 + 13737 13741 13738 + 13742 13738 13741 + 13739 13738 13742 + 13742 13743 13739 + 13739 13743 13744 + 13744 13740 13739 + 13395 13740 13744 + 13744 13391 13395 + 13610 13614 13741 + 13741 13614 13745 + 13745 13746 13741 + 13741 13746 13742 + 13747 13742 13746 + 13742 13747 13748 + 13748 13743 13742 + 13743 13748 13749 + 13749 13744 13743 + 13750 13745 13614 + 222 13745 13750 + 13745 222 13751 + 13751 13746 13745 + 13746 13751 13747 + 13752 13747 13751 + 13748 13747 13752 + 13752 13753 13748 + 13753 13749 13748 + 13614 13613 13750 + 13754 13750 13613 + 13750 13754 13755 + 13750 13755 222 + 222 13755 13756 + 13613 216 13754 + 13755 13754 13757 + 13757 13758 13755 + 13759 13758 13757 + 13758 13759 13760 + 13760 13761 13758 + 13751 222 13762 + 13762 13763 13751 + 13751 13763 13752 + 13764 13752 13763 + 13752 13764 13753 + 13753 13764 13765 + 13765 13749 13753 + 13744 13749 13765 + 13765 13391 13744 + 13391 13765 13375 + 13763 13762 13766 + 13766 13767 13763 + 13763 13767 13764 + 13764 13767 13376 + 13376 13375 13764 + 13375 13765 13764 + 13766 13762 13768 + 13768 13769 13766 + 13770 13766 13769 + 13767 13766 13770 + 13770 13376 13767 + 13771 13376 13770 + 13768 13772 13769 + 13769 13772 13773 + 13773 13774 13769 + 13769 13774 13770 + 13451 13770 13774 + 13770 13451 13775 + 13772 13768 13761 + 13761 13776 13772 + 13772 13776 13777 + 13777 13778 13772 + 13778 13779 13772 + 13779 13780 13772 + 13780 13773 13772 + 13776 13761 13781 + 13774 13782 13451 + 13773 13782 13774 + 13782 13773 13780 + 13780 13452 13782 + 13780 13453 13452 + 13453 13780 13779 + 13779 13783 13453 + 13453 13783 13784 + 13784 13360 13453 + 13785 13360 13784 + 13360 13785 13361 + 13786 13783 13779 + 13783 13786 13787 + 13787 13784 13783 + 13788 13784 13787 + 13784 13788 13785 + 13789 13785 13788 + 13361 13785 13789 + 13789 13790 13361 + 13361 13790 13791 + 13786 13779 13778 + 13778 13792 13786 + 13786 13792 13793 + 13787 13786 13793 + 13793 13794 13787 + 13795 13787 13794 + 13787 13795 13788 + 13796 13792 13778 + 13792 13796 13797 + 13797 13798 13792 + 13792 13798 13793 + 13796 13778 13777 + 13777 13799 13796 + 13799 13797 13796 + 13800 13797 13799 + 13800 13798 13797 + 13798 13800 13801 + 13801 13793 13798 + 13799 13777 13802 + 13802 13803 13799 + 13799 13803 13800 + 13801 13800 13803 + 13803 13804 13801 + 13805 13801 13804 + 13793 13801 13805 + 13802 13777 13776 + 13776 13806 13802 + 13807 13802 13806 + 13803 13802 13807 + 13807 13804 13803 + 13808 13804 13807 + 13804 13808 13805 + 13809 13805 13808 + 13810 13805 13809 + 13805 13810 13793 + 13811 13806 13776 + 7252 13682 7253 + 7253 13682 13681 + 13681 13812 7253 + 7253 13812 13813 + 13813 7247 7253 + 7248 7247 13813 + 13690 13812 13681 + 13812 13690 13814 + 13814 13813 13812 + 13813 13814 13815 + 13815 13816 13813 + 13813 13816 7248 + 7248 13816 13817 + 13817 7242 7248 + 7243 7242 13817 + 13818 13814 13690 + 13815 13814 13818 + 13818 13819 13815 + 13815 13819 13820 + 13820 13821 13815 + 13816 13815 13821 + 13821 13817 13816 + 13690 13695 13818 + 13708 13818 13695 + 13818 13708 13822 + 13822 13819 13818 + 13819 13822 13823 + 13823 13820 13819 + 13820 13823 13824 + 13824 13825 13820 + 13820 13825 13826 + 13826 13821 13820 + 13817 13821 13826 + 13822 13708 13707 + 13707 13827 13822 + 13822 13827 13828 + 13828 13823 13822 + 13824 13823 13828 + 13828 13829 13824 + 13824 13829 13830 + 13830 13831 13824 + 13825 13824 13831 + 13832 13827 13707 + 13827 13832 13833 + 13833 13828 13827 + 13828 13833 13834 + 13834 13829 13828 + 13829 13834 13835 + 13835 13830 13829 + 13707 13706 13832 + 13832 13706 13713 + 13713 13836 13832 + 13833 13832 13836 + 13836 13837 13833 + 13834 13833 13837 + 13837 13838 13834 + 13834 13838 13839 + 13839 13835 13834 + 13840 13835 13839 + 13830 13835 13840 + 13836 13713 13712 + 13712 13841 13836 + 13836 13841 13842 + 13842 13837 13836 + 13838 13837 13842 + 13842 13843 13838 + 13838 13843 13844 + 13844 13839 13838 + 13845 13839 13844 + 13839 13845 13840 + 13841 13712 13846 + 13846 13847 13841 + 13842 13841 13847 + 13848 13842 13847 + 13843 13842 13848 + 13848 13849 13843 + 13843 13849 13850 + 13850 13844 13843 + 13718 13846 13712 + 13851 13846 13718 + 13847 13846 13851 + 13851 13852 13847 + 13847 13852 13853 + 13853 13854 13847 + 13847 13854 13848 + 13855 13848 13854 + 13849 13848 13855 + 13718 13856 13851 + 13857 13851 13856 + 13852 13851 13857 + 13857 13858 13852 + 13852 13858 13859 + 13859 13853 13852 + 13860 13853 13859 + 13854 13853 13860 + 13854 13860 13855 + 13861 13856 13718 + 13856 13861 13862 + 13862 13863 13856 + 13856 13863 13857 + 13864 13857 13863 + 13857 13864 13865 + 13865 13858 13857 + 13718 13717 13861 + 13861 13717 13866 + 13866 13867 13861 + 13862 13861 13867 + 13867 13868 13862 + 13869 13862 13868 + 13862 13869 13870 + 13870 13863 13862 + 13863 13870 13864 + 13716 13866 13717 + 13871 13866 13716 + 13866 13871 13867 + 13867 13871 13872 + 13872 13868 13867 + 13873 13868 13872 + 13868 13873 13869 + 13874 13869 13873 + 13870 13869 13874 + 13716 13875 13871 + 13872 13871 13875 + 13875 13876 13872 + 13877 13872 13876 + 13872 13877 13873 + 13873 13877 13878 + 13878 13879 13873 + 13873 13879 13874 + 13727 13875 13716 + 13875 13727 13880 + 13880 13876 13875 + 13881 13876 13880 + 13876 13881 13877 + 13878 13877 13881 + 13881 13882 13878 + 13883 13878 13882 + 13878 13883 13884 + 13884 13879 13878 + 13880 13727 13732 + 13732 13885 13880 + 13886 13880 13885 + 13880 13886 13881 + 13881 13886 13887 + 13887 13882 13881 + 13888 13882 13887 + 13882 13888 13883 + 13889 13883 13888 + 13884 13883 13889 + 13890 13885 13732 + 13891 13885 13890 + 13885 13891 13886 + 13887 13886 13891 + 13891 13892 13887 + 13893 13887 13892 + 13887 13893 13888 + 13732 13894 13890 + 13895 13890 13894 + 13896 13890 13895 + 13890 13896 13891 + 13891 13896 13897 + 13897 13892 13891 + 13898 13892 13897 + 13892 13898 13893 + 13732 13731 13894 + 13894 13731 13899 + 13899 13900 13894 + 13894 13900 13895 + 13901 13895 13900 + 13902 13895 13901 + 13895 13902 13896 + 13897 13896 13902 + 13736 13899 13731 + 13903 13899 13736 + 13900 13899 13903 + 13900 13903 13901 + 13901 13903 13904 + 13904 13905 13901 + 13906 13901 13905 + 13901 13906 13902 + 13736 13904 13903 + 13907 13904 13736 + 13904 13907 13908 + 13908 13905 13904 + 13909 13905 13908 + 13905 13909 13906 + 13910 13906 13909 + 13902 13906 13910 + 13910 13911 13902 + 13902 13911 13897 + 13736 13735 13907 + 13907 13735 13912 + 13912 13913 13907 + 13908 13907 13913 + 13913 13410 13908 + 13409 13908 13410 + 13908 13409 13909 + 13912 13735 13400 + 13400 13405 13912 + 13404 13912 13405 + 13912 13404 13913 + 13913 13404 13403 + 13403 13410 13913 + 13909 13409 13408 + 13408 13914 13909 + 13909 13914 13910 + 13915 13910 13914 + 13910 13915 13916 + 13916 13911 13910 + 13911 13916 13917 + 13917 13897 13911 + 13897 13917 13898 + 13418 13914 13408 + 13914 13418 13915 + 13918 13915 13418 + 13916 13915 13918 + 13918 13919 13916 + 13916 13919 13920 + 13920 13917 13916 + 13898 13917 13920 + 13920 13921 13898 + 13898 13921 13922 + 13922 13893 13898 + 13418 13417 13918 + 13923 13918 13417 + 13918 13923 13924 + 13924 13919 13918 + 13919 13924 13925 + 13925 13920 13919 + 13920 13925 13926 + 13926 13921 13920 + 13921 13926 13927 + 13927 13922 13921 + 13417 13416 13923 + 13928 13923 13416 + 13924 13923 13928 + 13928 13929 13924 + 13924 13929 13930 + 13930 13925 13924 + 13926 13925 13930 + 13930 13931 13926 + 13926 13931 13932 + 13932 13927 13926 + 13416 13933 13928 + 13934 13928 13933 + 13928 13934 13935 + 13935 13929 13928 + 13929 13935 13936 + 13936 13930 13929 + 13930 13936 13937 + 13937 13931 13930 + 13422 13933 13416 + 13431 13933 13422 + 13933 13431 13934 + 13934 13431 13938 + 13938 13939 13934 + 13935 13934 13939 + 13939 13940 13935 + 13935 13940 13941 + 13941 13936 13935 + 13937 13936 13941 + 13430 13938 13431 + 13942 13938 13430 + 13938 13942 13943 + 13943 13939 13938 + 13939 13943 13944 + 13944 13940 13939 + 13940 13944 13945 + 13945 13941 13940 + 13946 13941 13945 + 13941 13946 13937 + 13430 13947 13942 + 13942 13947 13948 + 13948 13949 13942 + 13943 13942 13949 + 13949 13950 13943 + 13944 13943 13950 + 13950 13951 13944 + 13945 13944 13951 + 13947 13430 13429 + 13429 13952 13947 + 13947 13952 13953 + 13953 13948 13947 + 13954 13948 13953 + 13949 13948 13954 + 13954 13955 13949 + 13949 13955 13956 + 13956 13950 13949 + 13951 13950 13956 + 13952 13429 13428 + 13428 13957 13952 + 13952 13957 13958 + 13958 13953 13952 + 13953 13958 13959 + 13959 13960 13953 + 13953 13960 13954 + 13961 13954 13960 + 13955 13954 13961 + 13957 13428 13439 + 13439 13962 13957 + 13958 13957 13962 + 13962 13963 13958 + 13959 13958 13963 + 13962 13439 13438 + 13962 13438 13964 + 13964 13963 13962 + 13963 13964 13965 + 13965 13966 13963 + 13963 13966 13959 + 13443 13964 13438 + 13965 13964 13443 + 13443 13448 13965 + 13967 13965 13448 + 13966 13965 13967 + 13967 13968 13966 + 13959 13966 13968 + 13968 13969 13959 + 13969 13970 13959 + 13960 13959 13970 + 13971 13967 13448 + 13972 13967 13971 + 13968 13967 13972 + 13968 13972 13973 + 13973 13969 13968 + 13969 13973 13974 + 13969 13974 13975 + 13975 13970 13969 + 13976 13971 13448 + 13977 13971 13976 + 13971 13977 13978 + 13971 13978 13972 + 13973 13972 13978 + 13978 13979 13973 + 13979 13980 13973 + 13974 13973 13980 + 13981 13976 13448 + 13982 13976 13981 + 13976 13982 13983 + 13983 13984 13976 + 13976 13984 13977 + 13448 13985 13981 + 13986 13981 13985 + 13987 13981 13986 + 13981 13987 13982 + 13988 13982 13987 + 13983 13982 13988 + 13447 13985 13448 + 13989 13985 13447 + 13985 13989 13986 + 13990 13986 13989 + 13987 13986 13990 + 13990 13991 13987 + 13987 13991 13988 + 13989 13447 13446 + 13446 13992 13989 + 13989 13992 13990 + 13993 13990 13992 + 13991 13990 13993 + 13991 13993 13994 + 13994 13988 13991 + 13988 13994 13995 + 13995 13996 13988 + 13988 13996 13983 + 13992 13446 13445 + 13445 13997 13992 + 13992 13997 13993 + 13993 13997 13998 + 13998 13999 13993 + 13999 13994 13993 + 13995 13994 13999 + 13997 13445 14000 + 14000 13998 13997 + 13998 14000 14001 + 13998 14001 13790 + 13790 13999 13998 + 13999 13790 13789 + 13789 14002 13999 + 13999 14002 13995 + 13444 14000 13445 + 14001 14000 13444 + 13444 13358 14001 + 13790 14001 13358 + 13888 13893 13922 + 13922 14003 13888 + 13888 14003 13889 + 14004 13889 14003 + 13889 14004 14005 + 14005 14006 13889 + 13889 14006 13884 + 14007 14003 13922 + 14003 14007 14004 + 14008 14004 14007 + 14005 14004 14008 + 14008 14009 14005 + 14010 14005 14009 + 14006 14005 14010 + 14010 14011 14006 + 13884 14006 14011 + 13922 13927 14007 + 14007 13927 13932 + 13932 14008 14007 + 14008 13932 14012 + 14009 14008 14012 + 14009 14012 14013 + 14013 14014 14009 + 14009 14014 14010 + 14015 14010 14014 + 14011 14010 14015 + 14012 13932 14016 + 14016 14017 14012 + 14012 14017 14018 + 14018 14019 14012 + 14019 14013 14012 + 14020 14013 14019 + 14014 14013 14020 + 14021 14016 13932 + 14022 14016 14021 + 14017 14016 14022 + 14017 14022 14023 + 14023 14018 14017 + 14024 14018 14023 + 14018 14024 14025 + 14025 14019 14018 + 13931 14021 13932 + 14026 14021 13931 + 14026 14027 14021 + 14021 14027 14022 + 14022 14027 14028 + 14028 14023 14022 + 14029 14023 14028 + 14023 14029 14024 + 13931 13937 14026 + 14026 13937 13946 + 13946 14030 14026 + 14027 14026 14030 + 14030 14028 14027 + 14031 14028 14030 + 14028 14031 14029 + 14029 14031 14032 + 14032 14033 14029 + 14024 14029 14033 + 14033 14034 14024 + 14025 14024 14034 + 14035 14030 13946 + 14030 14035 14031 + 14031 14035 14036 + 14036 14032 14031 + 14032 14036 14037 + 14037 14038 14032 + 14032 14038 14039 + 14039 14033 14032 + 14033 14039 14034 + 13946 14040 14035 + 14035 14040 14041 + 14036 14035 14041 + 14041 14042 14036 + 14037 14036 14042 + 14042 14043 14037 + 14044 14037 14043 + 14038 14037 14044 + 13945 14040 13946 + 14040 13945 14045 + 14045 14041 14040 + 14041 14045 14046 + 14046 14047 14041 + 14041 14047 14048 + 14048 14042 14041 + 14042 14048 14043 + 14045 13945 13951 + 13951 14049 14045 + 14046 14045 14049 + 14049 14050 14046 + 14051 14046 14050 + 14047 14046 14051 + 14051 14052 14047 + 14047 14052 14053 + 14053 14048 14047 + 14043 14048 14053 + 14054 14049 13951 + 14049 14054 14050 + 14050 14054 14055 + 14055 14056 14050 + 14050 14056 14051 + 14057 14051 14056 + 14052 14051 14057 + 13951 14058 14054 + 14055 14054 14058 + 14058 14059 14055 + 14060 14055 14059 + 14056 14055 14060 + 14060 14061 14056 + 14056 14061 14057 + 13956 14058 13951 + 14058 13956 14062 + 14062 14059 14058 + 14063 14059 14062 + 14059 14063 14060 + 14060 14063 14064 + 14064 14065 14060 + 14061 14060 14065 + 14065 14066 14061 + 14057 14061 14066 + 14062 13956 13955 + 13955 14067 14062 + 14068 14062 14067 + 14062 14068 14063 + 14063 14068 14069 + 14069 14064 14063 + 13961 14067 13955 + 14070 14067 13961 + 14067 14070 14068 + 14068 14070 14071 + 14071 14069 14068 + 14072 14069 14071 + 14064 14069 14072 + 14072 14073 14064 + 14064 14073 14074 + 14074 14065 14064 + 14066 14065 14074 + 13961 14075 14070 + 14070 14075 14076 + 14076 14071 14070 + 14071 14076 14077 + 14077 14078 14071 + 14071 14078 14072 + 14079 14072 14078 + 14073 14072 14079 + 14075 13961 14080 + 14080 14081 14075 + 14075 14081 14082 + 14076 14075 14082 + 14083 14076 14082 + 14077 14076 14083 + 14080 13961 13960 + 14084 14080 13960 + 14085 14080 14084 + 14081 14080 14085 + 14081 14085 14086 + 14086 14082 14081 + 13960 14087 14084 + 14088 14084 14087 + 14089 14084 14088 + 14084 14089 14085 + 14086 14085 14089 + 13970 14087 13960 + 14087 13970 13975 + 13975 14090 14087 + 14087 14090 14088 + 14088 14090 14091 + 14091 14092 14088 + 14089 14088 14092 + 14092 14093 14089 + 14089 14093 14086 + 14090 13975 14094 + 14094 14095 14090 + 14090 14095 14091 + 14096 14094 13975 + 14097 14094 14096 + 14094 14097 14098 + 14098 14095 14094 + 14095 14098 14099 + 14099 14100 14095 + 14095 14100 14091 + 13975 13974 14096 + 13974 14101 14096 + 14101 14102 14096 + 14103 14096 14102 + 14104 14096 14103 + 14096 14104 14097 + 13980 14101 13974 + 14101 13980 14105 + 14101 14105 14106 + 14106 14102 14101 + 14107 14102 14106 + 14102 14107 14103 + 14108 14103 14107 + 14109 14103 14108 + 14103 14109 14104 + 14105 13980 13979 + 13979 14110 14105 + 14105 14110 14111 + 14106 14105 14111 + 14111 14112 14106 + 14113 14106 14112 + 14106 14113 14107 + 14114 14110 13979 + 14110 14114 14115 + 14115 14116 14110 + 14110 14116 14111 + 14114 13979 13978 + 13978 13977 14114 + 14115 14114 13977 + 13977 13984 14115 + 14117 14115 13984 + 14116 14115 14117 + 14117 14118 14116 + 14116 14118 14119 + 14119 14111 14116 + 13984 13983 14117 + 14117 13983 13996 + 13996 14120 14117 + 14118 14117 14120 + 14120 14121 14118 + 14119 14118 14121 + 14121 14122 14119 + 14123 14119 14122 + 14111 14119 14123 + 14124 14120 13996 + 14124 14121 14120 + 14121 14124 14125 + 14125 14122 14121 + 14126 14122 14125 + 14122 14126 14123 + 13996 13995 14124 + 14125 14124 13995 + 14127 14125 13995 + 14126 14125 14127 + 14127 14128 14126 + 14123 14126 14128 + 14128 14129 14123 + 14130 14123 14129 + 14123 14130 14111 + 14131 14127 13995 + 14132 14127 14131 + 14128 14127 14132 + 14132 14133 14128 + 14128 14133 14134 + 14134 14129 14128 + 13995 14002 14131 + 14135 14131 14002 + 14131 14135 14136 + 14136 14137 14131 + 14131 14137 14132 + 14132 14137 14138 + 14138 14139 14132 + 14133 14132 14139 + 14002 13789 14135 + 13788 14135 13789 + 14136 14135 13788 + 13788 13795 14136 + 14136 13795 14140 + 14140 14141 14136 + 14137 14136 14141 + 14141 14138 14137 + 14138 14141 14142 + 14142 14143 14138 + 14138 14143 14144 + 14144 14139 14138 + 13794 14140 13795 + 14140 13794 14145 + 14145 14146 14140 + 14140 14146 14142 + 14142 14141 14140 + 14145 13794 13793 + 13793 13810 14145 + 14145 13810 14147 + 14147 14148 14145 + 14146 14145 14148 + 14148 14149 14146 + 14142 14146 14149 + 14149 14150 14142 + 14143 14142 14150 + 14150 14151 14143 + 14144 14143 14151 + 13809 14147 13810 + 14152 14147 13809 + 14147 14152 14153 + 14153 14148 14147 + 14149 14148 14153 + 14153 14154 14149 + 14149 14154 14155 + 14155 14150 14149 + 14151 14150 14155 + 13809 14156 14152 + 14152 14156 14157 + 14157 14158 14152 + 14153 14152 14158 + 14158 14159 14153 + 14154 14153 14159 + 14159 14160 14154 + 14155 14154 14160 + 14156 13809 14161 + 14161 14162 14156 + 14157 14156 14162 + 14162 14163 14157 + 14164 14157 14163 + 14157 14164 14165 + 14165 14158 14157 + 13808 14161 13809 + 14166 14161 13808 + 14161 14166 14167 + 14167 14162 14161 + 14162 14167 14168 + 14168 14163 14162 + 14163 14168 14169 + 14169 14170 14163 + 14163 14170 14164 + 13808 13807 14166 + 14166 13807 13806 + 14171 14166 13806 + 14167 14166 14171 + 14171 14172 14167 + 14172 14168 14167 + 14169 14168 14172 + 14172 14173 14169 + 14174 14169 14173 + 14170 14169 14174 + 13806 14175 14171 + 14173 14171 14175 + 14172 14171 14173 + 14176 14175 13806 + 14175 14176 14177 + 14177 14178 14175 + 14175 14178 14173 + 14173 14178 14179 + 14179 14180 14173 + 14180 14174 14173 + 13806 14181 14176 + 14182 14176 14181 + 14177 14176 14182 + 14182 14183 14177 + 7276 7275 13670 + 14184 13670 7275 + 13661 7284 14185 + 14185 14186 13661 + 13661 14186 13657 + 14187 13657 14186 + 13652 13657 14187 + 14187 14188 13652 + 13652 14188 13653 + 14186 14185 14189 + 14189 14190 14186 + 14186 14190 14187 + 14190 14191 14187 + 14188 14187 14191 + 14191 14192 14188 + 13653 14188 14192 + 14189 14185 7283 + 7283 14193 14189 + 14189 14193 14194 + 14190 14189 14194 + 14194 14191 14190 + 14192 14191 14194 + 14194 14195 14192 + 14192 14195 14196 + 14196 14197 14192 + 14192 14197 13653 + 7289 14193 7283 + 14193 7289 14195 + 14195 14194 14193 + 14196 14195 7289 + 7289 14198 14196 + 13475 14196 14198 + 14196 13475 13474 + 13474 14197 14196 + 14197 13474 14199 + 14199 13653 14197 + 13653 14199 13643 + 7288 14198 7289 + 7298 14198 7288 + 14198 7298 13475 + 13480 14199 13474 + 13643 14199 13480 + 13480 13644 13643 + 13479 13644 13480 + 13644 13479 13638 + 13639 13638 13479 + 13479 13487 13639 + 14200 13639 13487 + 13639 14200 13634 + 13634 14200 14201 + 14201 14202 13634 + 13634 14202 13630 + 13487 13486 14200 + 14201 14200 13486 + 13486 14203 14201 + 14204 14201 14203 + 14201 14204 14205 + 14205 14202 14201 + 14202 14205 14206 + 14206 13630 14202 + 13630 14206 13626 + 13485 14203 13486 + 14207 14203 13485 + 14203 14207 14204 + 14208 14204 14207 + 14205 14204 14208 + 14208 14209 14205 + 14205 14209 14210 + 14210 14206 14205 + 13626 14206 14210 + 14210 14211 13626 + 13626 14211 13620 + 13485 13492 14207 + 14207 13492 14212 + 14212 14213 14207 + 14207 14213 14208 + 14214 14208 14213 + 14208 14214 14215 + 14215 14209 14208 + 14209 14215 14216 + 14216 14210 14209 + 14212 13492 13491 + 13491 14217 14212 + 14218 14212 14217 + 14212 14218 14219 + 14219 14213 14212 + 14213 14219 14214 + 14220 14214 14219 + 14215 14214 14220 + 13498 14217 13491 + 14221 14217 13498 + 14217 14221 14218 + 14222 14218 14221 + 14219 14218 14222 + 14222 14223 14219 + 14219 14223 14220 + 14224 14220 14223 + 14223 14225 14224 + 13498 13503 14221 + 14221 13503 14226 + 14226 14227 14221 + 14221 14227 14222 + 14228 14222 14227 + 14227 14229 14228 + 14228 14229 14230 + 14226 13503 13502 + 13502 14231 14226 + 14232 14226 14231 + 14226 14232 14229 + 14229 14227 14226 + 14233 14231 13502 + 14234 14231 14233 + 14231 14234 14232 + 14232 14234 14235 + 14235 14236 14232 + 14229 14232 14236 + 14236 14237 14229 + 14229 14237 14230 + 13502 14238 14233 + 14233 14238 14239 + 14239 14240 14233 + 14241 14233 14240 + 14233 14241 14234 + 13501 14238 13502 + 14238 13501 14242 + 14242 14239 14238 + 14225 14223 14222 + 14222 14243 14225 + 14225 14243 14244 + 14244 14245 14225 + 14246 14225 14245 + 14245 14177 14246 + 14178 14177 14245 + 14247 14244 14243 + 14245 14179 14178 + 14244 14179 14245 + 14179 14244 14230 + 14230 14180 14179 + 14230 14248 14180 + 14180 14248 14249 + 14249 14174 14180 + 14250 14174 14249 + 14174 14250 14170 + 14248 14230 14237 + 14237 14251 14248 + 14248 14251 14252 + 14249 14248 14252 + 14252 14253 14249 + 14254 14249 14253 + 14249 14254 14250 + 14237 14236 14251 + 14251 14236 14235 + 14235 14252 14251 + 14235 14255 14252 + 14252 14255 14256 + 14256 14253 14252 + 14257 14253 14256 + 14253 14257 14254 + 14258 14254 14257 + 14250 14254 14258 + 14255 14235 14259 + 14259 14260 14255 + 14255 14260 14261 + 14261 14262 14255 + 14262 14256 14255 + 14263 14256 14262 + 14256 14263 14257 + 14234 14259 14235 + 14264 14259 14234 + 14260 14259 14264 + 14260 14264 14265 + 14265 14261 14260 + 14261 14265 14266 + 14261 14266 14267 + 14267 14262 14261 + 14268 14262 14267 + 14262 14268 14263 + 14234 14241 14264 + 14264 14241 14269 + 14269 14270 14264 + 14270 14271 14264 + 14271 14265 14264 + 14266 14265 14271 + 14271 14272 14266 + 14266 14272 14273 + 14273 14267 14266 + 14240 14269 14241 + 14269 14240 14274 + 14274 14275 14269 + 14269 14275 14276 + 14276 14270 14269 + 14277 14270 14276 + 14270 14277 14278 + 14278 14271 14270 + 14272 14271 14278 + 14274 14240 14239 + 14239 14279 14274 + 14280 14274 14279 + 14275 14274 14280 + 14280 7356 14275 + 14276 14275 7356 + 7361 14276 7356 + 14277 14276 7361 + 14281 14279 14239 + 14279 14282 14280 + 7361 7360 14277 + 14277 7360 7366 + 14278 14277 7366 + 14283 14278 7366 + 14272 14278 14283 + 14283 14273 14272 + 14284 14273 14283 + 14273 14284 14285 + 14285 14267 14273 + 14267 14285 14268 + 7366 14286 14283 + 14287 14283 14286 + 14283 14287 14284 + 14284 14287 14288 + 14288 14289 14284 + 14284 14289 14290 + 14290 14285 14284 + 14268 14285 14290 + 14291 14286 7366 + 14292 14286 14291 + 14286 14292 14287 + 14288 14287 14292 + 14292 14293 14288 + 14294 14288 14293 + 14288 14294 14295 + 14295 14289 14288 + 7366 7365 14291 + 14296 14291 7365 + 14297 14291 14296 + 14291 14297 14292 + 14292 14297 14298 + 14298 14293 14292 + 14299 14293 14298 + 14293 14299 14294 + 14300 14294 14299 + 14295 14294 14300 + 7365 7364 14296 + 14301 14296 7364 + 14302 14296 14301 + 14296 14302 14297 + 14298 14297 14302 + 14302 14303 14298 + 14304 14298 14303 + 14298 14304 14299 + 7364 7363 14301 + 14305 14301 7363 + 14306 14301 14305 + 14301 14306 14302 + 14302 14306 14307 + 14307 14303 14302 + 14308 14303 14307 + 14303 14308 14304 + 14309 14304 14308 + 14299 14304 14309 + 7363 7370 14305 + 7379 14305 7370 + 14310 14305 7379 + 14305 14310 14306 + 14307 14306 14310 + 14310 14311 14307 + 14312 14307 14311 + 14307 14312 14308 + 14308 14312 14313 + 14313 14314 14308 + 14308 14314 14309 + 7379 7384 14310 + 14310 7384 14315 + 14315 14311 14310 + 14316 14311 14315 + 14311 14316 14312 + 14313 14312 14316 + 14316 14317 14313 + 14318 14313 14317 + 14313 14318 14319 + 14319 14314 14313 + 14315 7384 7383 + 7383 14320 14315 + 14321 14315 14320 + 14315 14321 14316 + 14316 14321 14322 + 14322 14317 14316 + 14323 14317 14322 + 14317 14323 14318 + 14324 14318 14323 + 14319 14318 14324 + 14325 14320 7383 + 14326 14320 14325 + 14320 14326 14321 + 14322 14321 14326 + 14326 14327 14322 + 14328 14322 14327 + 14322 14328 14323 + 7383 7389 14325 + 14325 7389 7388 + 7388 14329 14325 + 14330 14325 14329 + 14325 14330 14326 + 14326 14330 14331 + 14331 14327 14326 + 14332 14327 14331 + 14327 14332 14328 + 14333 14328 14332 + 14323 14328 14333 + 7393 14329 7388 + 14334 14329 7393 + 14329 14334 14330 + 14331 14330 14334 + 14334 14335 14331 + 14336 14331 14335 + 14331 14336 14332 + 14332 14336 14337 + 14337 14338 14332 + 14332 14338 14333 + 7393 14339 14334 + 14334 14339 14340 + 14340 14335 14334 + 14341 14335 14340 + 14335 14341 14336 + 14337 14336 14341 + 14339 7393 7398 + 7398 14342 14339 + 14340 14339 14342 + 14342 14343 14340 + 14344 14340 14343 + 14340 14344 14341 + 14341 14344 14345 + 14345 14346 14341 + 14341 14346 14337 + 14342 7398 7397 + 7397 7403 14342 + 14342 7403 14347 + 14347 14343 14342 + 14348 14343 14347 + 14343 14348 14344 + 14345 14344 14348 + 14348 14349 14345 + 14350 14345 14349 + 14345 14350 14351 + 14351 14346 14345 + 14347 7403 7402 + 7402 14352 14347 + 14353 14347 14352 + 14347 14353 14348 + 14348 14353 14354 + 14354 14349 14348 + 14355 14349 14354 + 14349 14355 14350 + 14356 14350 14355 + 14351 14350 14356 + 14357 14352 7402 + 14358 14352 14357 + 14352 14358 14353 + 14354 14353 14358 + 14358 14359 14354 + 14360 14354 14359 + 14354 14360 14355 + 7402 14361 14357 + 14357 14361 7421 + 7421 14362 14357 + 14363 14357 14362 + 14357 14363 14358 + 14358 14363 171 + 171 14359 14358 + 7401 14361 7402 + 14361 7401 7414 + 7414 7421 14361 + 7426 14362 7421 + 14364 14362 7426 + 14362 14364 14363 + 171 14363 14364 + 14364 14365 171 + 14366 171 14365 + 171 14366 14367 + 7426 14368 14364 + 14364 14368 14369 + 14369 14365 14364 + 14370 14365 14369 + 14365 14370 14366 + 14371 14366 14370 + 14367 14366 14371 + 14368 7426 14372 + 14372 7459 14368 + 14369 14368 7459 + 7459 7463 14369 + 7468 14369 7463 + 14369 7468 14370 + 7425 14372 7426 + 7438 14372 7425 + 7459 14372 7438 + 14370 7468 7467 + 7467 7480 14370 + 14370 7480 14371 + 7479 14371 7480 + 14371 7479 14373 + 14373 14374 14371 + 14371 14374 14367 + 14367 14374 14375 + 14375 14360 14367 + 14359 14367 14360 + 14373 7479 14376 + 14376 14377 14373 + 14373 14377 14378 + 14378 14379 14373 + 14374 14373 14379 + 14379 14375 14374 + 7478 14376 7479 + 14380 14376 7478 + 14380 14377 14376 + 14377 14380 14381 + 14381 14382 14377 + 14377 14382 14378 + 7478 7484 14380 + 14381 14380 7484 + 7491 14381 7484 + 14383 14381 7491 + 14383 14382 14381 + 14382 14383 14384 + 14384 14378 14382 + 14384 14385 14378 + 14378 14385 14386 + 14386 14379 14378 + 14375 14379 14386 + 7491 14387 14383 + 14383 14387 14388 + 14388 14384 14383 + 14385 14384 14388 + 14388 14389 14385 + 14386 14385 14389 + 14389 14390 14386 + 14391 14386 14390 + 14386 14391 14375 + 14392 14387 7491 + 14387 14392 14393 + 14393 14394 14387 + 14387 14394 14388 + 7491 7490 14392 + 14392 7490 7496 + 7496 14395 14392 + 14392 14395 14396 + 14396 14393 14392 + 14397 14393 14396 + 14394 14393 14397 + 14395 7496 7495 + 7495 14398 14395 + 14395 14398 14399 + 14399 14396 14395 + 14396 14399 14400 + 14396 14400 14397 + 14398 7495 14401 + 14401 14402 14398 + 14398 14402 14403 + 14399 14398 14403 + 14403 14404 14399 + 14400 14399 14404 + 14404 14405 14400 + 14397 14400 14405 + 14406 14401 7495 + 14407 14401 14406 + 14401 14407 14402 + 14402 14407 14408 + 14408 14403 14402 + 14403 14408 14409 + 14403 14409 14410 + 14410 14404 14403 + 7495 7494 14406 + 7494 14411 14406 + 14412 14406 14411 + 14412 14413 14406 + 14406 14413 14407 + 14407 14413 14414 + 14408 14407 14414 + 14414 14415 14408 + 14409 14408 14415 + 7501 14411 7494 + 14411 7501 14416 + 14416 14417 14411 + 14411 14417 14412 + 14412 14417 14418 + 14418 14419 14412 + 14413 14412 14419 + 14419 14414 14413 + 14416 7501 7500 + 7500 14420 14416 + 14421 14416 14420 + 14417 14416 14421 + 14421 14422 14417 + 14417 14422 14418 + 7510 14420 7500 + 14420 7510 14423 + 14423 14424 14420 + 14420 14424 14421 + 14424 14425 14421 + 14426 14421 14425 + 14422 14421 14426 + 7514 14423 7510 + 14427 14423 7514 + 14423 14427 14428 + 14428 14424 14423 + 14424 14428 14429 + 14429 14425 14424 + 14425 14429 14430 + 14430 14431 14425 + 14425 14431 14426 + 7514 7519 14427 + 14432 14427 7519 + 14428 14427 14432 + 14432 14433 14428 + 14429 14428 14433 + 14433 14434 14429 + 14430 14429 14434 + 14434 14435 14430 + 14436 14430 14435 + 14431 14430 14436 + 7519 14437 14432 + 14438 14432 14437 + 14432 14438 14439 + 14439 14433 14432 + 14433 14439 14440 + 14440 14434 14433 + 14434 14440 14441 + 14441 14435 14434 + 7524 14437 7519 + 14442 14437 7524 + 14437 14442 14438 + 14438 14442 14443 + 14443 14444 14438 + 14439 14438 14444 + 14444 14445 14439 + 14439 14445 14446 + 14446 14440 14439 + 14441 14440 14446 + 7524 14447 14442 + 14442 14447 14448 + 14448 14443 14442 + 14449 14443 14448 + 14443 14449 14450 + 14450 14444 14443 + 14445 14444 14450 + 14445 14450 14451 + 14451 14446 14445 + 14447 7524 7523 + 7523 14452 14447 + 14447 14452 14453 + 14453 14448 14447 + 14454 14448 14453 + 14448 14454 14449 + 14452 7523 7522 + 7522 7529 14452 + 14452 7529 14455 + 14455 14453 14452 + 14456 14453 14455 + 14453 14456 14454 + 14457 14454 14456 + 14449 14454 14457 + 14457 14458 14449 + 14449 14458 14459 + 14450 14449 14459 + 14459 14451 14450 + 7534 14455 7529 + 14460 14455 7534 + 14455 14460 14456 + 14456 14460 14461 + 14461 14462 14456 + 14456 14462 14457 + 14462 14463 14457 + 14464 14457 14463 + 14458 14457 14464 + 7534 7549 14460 + 14460 7549 14465 + 14465 14466 14460 + 14466 14461 14460 + 14467 14461 14466 + 14462 14461 14467 + 14467 14468 14462 + 14462 14468 14469 + 14469 14463 14462 + 7548 14465 7549 + 7548 14470 14465 + 14465 14470 14471 + 14471 14466 14465 + 14471 14472 14466 + 14466 14472 14467 + 14470 7548 14473 + 14473 14474 14470 + 14470 14474 14475 + 14475 14471 14470 + 14472 14471 14475 + 14475 14476 14472 + 14467 14472 14476 + 14477 14473 7548 + 14478 14473 14477 + 14478 14474 14473 + 14474 14478 14479 + 14479 14480 14474 + 14474 14480 14475 + 14481 14475 14480 + 14475 14481 14476 + 7547 14477 7548 + 14482 14477 7547 + 14482 14483 14477 + 14477 14483 14478 + 14479 14478 14483 + 7547 14484 14482 + 14482 14484 14485 + 14485 14486 14482 + 14486 14487 14482 + 14487 14488 14482 + 14483 14482 14488 + 7546 14484 7547 + 14484 7546 14489 + 14489 14485 14484 + 14490 14485 14489 + 14485 14490 14491 + 14491 14486 14485 + 14492 14486 14491 + 14486 14492 14493 + 14493 14487 14486 + 7556 14489 7546 + 14490 14489 7556 + 7556 14494 14490 + 14491 14490 14494 + 14494 14495 14491 + 14492 14491 14495 + 14495 14496 14492 + 14492 14496 14497 + 14497 14493 14492 + 14498 14493 14497 + 14493 14498 14487 + 7555 14494 7556 + 14494 7555 14499 + 14499 14495 14494 + 14496 14495 14499 + 14496 14499 7560 + 7560 14497 14496 + 14497 7560 14500 + 14497 14500 14498 + 14501 14498 14500 + 14487 14498 14501 + 14501 14488 14487 + 14501 14502 14488 + 14488 14502 14483 + 14483 14502 14479 + 7560 14499 7555 + 14355 14360 14375 + 14375 14391 14355 + 14355 14391 14356 + 14390 14356 14391 + 14356 14390 14503 + 14503 14504 14356 + 14356 14504 14351 + 14351 14504 14505 + 14505 14506 14351 + 14346 14351 14506 + 14503 14390 14389 + 14389 14507 14503 + 14503 14507 14508 + 14508 14509 14503 + 14504 14503 14509 + 14509 14505 14504 + 14507 14389 14388 + 14388 14510 14507 + 14507 14510 14511 + 14511 14508 14507 + 14511 14512 14508 + 14508 14512 14513 + 14513 14509 14508 + 14505 14509 14513 + 14510 14388 14514 + 14514 14515 14510 + 14510 14515 14516 + 14516 14511 14510 + 14512 14511 14516 + 14516 14517 14512 + 14513 14512 14517 + 14394 14514 14388 + 14518 14514 14394 + 14514 14518 14515 + 14515 14518 14519 + 14519 14520 14515 + 14515 14520 14516 + 14394 14521 14518 + 14518 14521 14522 + 14522 14519 14518 + 14523 14519 14522 + 14520 14519 14523 + 14397 14521 14394 + 14521 14397 14524 + 14524 14522 14521 + 14525 14522 14524 + 14522 14525 14523 + 14523 14525 14526 + 14526 14527 14523 + 14528 14523 14527 + 14523 14528 14520 + 14524 14397 14405 + 14529 14524 14405 + 14530 14524 14529 + 14524 14530 14525 + 14525 14530 14531 + 14531 14526 14525 + 14532 14526 14531 + 14526 14532 14533 + 14533 14527 14526 + 14405 14534 14529 + 14535 14529 14534 + 14529 14535 14536 + 14529 14536 14530 + 14530 14536 14537 + 14537 14531 14530 + 14538 14531 14537 + 14531 14538 14532 + 14539 14534 14405 + 14540 14534 14539 + 14534 14540 14535 + 14535 14540 14541 + 14541 14542 14535 + 14536 14535 14542 + 14542 14537 14536 + 14543 14537 14542 + 14537 14543 14538 + 14405 14544 14539 + 14545 14539 14544 + 14546 14539 14545 + 14539 14546 14540 + 14540 14546 14547 + 14547 14541 14540 + 14544 14405 14404 + 14404 14410 14544 + 14544 14410 14548 + 14548 14549 14544 + 14544 14549 14545 + 14550 14545 14549 + 14545 14550 14551 + 14551 14552 14545 + 14545 14552 14546 + 14547 14546 14552 + 14548 14410 14553 + 14553 14554 14548 + 14555 14548 14554 + 14548 14555 14556 + 14556 14549 14548 + 14549 14556 14550 + 14557 14550 14556 + 14551 14550 14557 + 14410 14409 14553 + 14415 14553 14409 + 14558 14553 14415 + 14553 14558 14559 + 14559 14554 14553 + 14554 14559 14560 + 14560 14561 14554 + 14554 14561 14555 + 14562 14555 14561 + 14556 14555 14562 + 14415 14563 14558 + 14558 14563 14564 + 14564 14565 14558 + 14558 14565 14559 + 14560 14559 14565 + 14565 14566 14560 + 14567 14560 14566 + 14561 14560 14567 + 14563 14415 14414 + 14414 14568 14563 + 14564 14563 14568 + 14568 14569 14564 + 14570 14564 14569 + 14565 14564 14570 + 14570 14566 14565 + 14566 14570 14571 + 14571 14572 14566 + 14566 14572 14567 + 14573 14568 14414 + 14568 14573 14574 + 14574 14569 14568 + 14575 14569 14574 + 14569 14575 14570 + 14570 14575 14464 + 14464 14571 14570 + 14463 14571 14464 + 14572 14571 14463 + 14414 14419 14573 + 14573 14419 14418 + 14418 14576 14573 + 14574 14573 14576 + 14576 14577 14574 + 14578 14574 14577 + 14574 14578 14575 + 14579 14576 14418 + 14576 14579 14580 + 14580 14577 14576 + 14581 14577 14580 + 14577 14581 14578 + 14418 14582 14579 + 14579 14582 14583 + 14583 14584 14579 + 14579 14584 14585 + 14585 14580 14579 + 14586 14580 14585 + 14580 14586 14581 + 14582 14418 14587 + 14587 14588 14582 + 14582 14588 14589 + 14589 14583 14582 + 14590 14583 14589 + 14584 14583 14590 + 14584 14590 14591 + 14591 14585 14584 + 14422 14587 14418 + 14592 14587 14422 + 14592 14588 14587 + 14588 14592 14593 + 14593 14589 14588 + 14594 14589 14593 + 14589 14594 14590 + 14590 14594 14595 + 14595 14596 14590 + 14596 14591 14590 + 14597 14591 14596 + 14422 14426 14592 + 14593 14592 14426 + 14426 14431 14593 + 14431 14598 14593 + 14599 14593 14598 + 14593 14599 14594 + 14594 14599 14600 + 14600 14595 14594 + 14436 14598 14431 + 14601 14598 14436 + 14598 14601 14599 + 14600 14599 14601 + 14601 14602 14600 + 14603 14600 14602 + 14595 14600 14603 + 14603 14604 14595 + 14595 14604 14605 + 14605 14596 14595 + 14436 14606 14601 + 14601 14606 14607 + 14607 14602 14601 + 14608 14602 14607 + 14602 14608 14603 + 14603 14608 14609 + 14609 14610 14603 + 14604 14603 14610 + 14606 14436 14611 + 14611 14612 14606 + 14607 14606 14612 + 14612 14613 14607 + 14614 14607 14613 + 14607 14614 14608 + 14435 14611 14436 + 14615 14611 14435 + 14612 14611 14615 + 14615 14616 14612 + 14612 14616 14617 + 14617 14613 14612 + 14618 14613 14617 + 14613 14618 14614 + 14619 14614 14618 + 14608 14614 14619 + 14435 14441 14615 + 14615 14441 14620 + 14620 14621 14615 + 14616 14615 14621 + 14621 14622 14616 + 14617 14616 14622 + 14622 14623 14617 + 14624 14617 14623 + 14617 14624 14618 + 14446 14620 14441 + 14620 14446 14451 + 14451 14625 14620 + 14620 14625 14626 + 14626 14621 14620 + 14626 14622 14621 + 14622 14626 14627 + 14627 14623 14622 + 14623 14627 14628 + 14628 14629 14623 + 14623 14629 14624 + 14625 14451 14459 + 14459 14630 14625 + 14625 14630 14627 + 14627 14626 14625 + 14630 14459 14631 + 14631 14632 14630 + 14630 14632 14633 + 14633 14634 14630 + 14630 14634 14627 + 14634 14635 14627 + 14628 14627 14635 + 14631 14459 14458 + 14458 14636 14631 + 14631 14636 14637 + 14637 14581 14631 + 14632 14631 14581 + 14581 14586 14632 + 14633 14632 14586 + 14464 14636 14458 + 14636 14464 14575 + 14575 14637 14636 + 14605 14604 14638 + 14629 14628 14639 + 14639 14640 14629 + 14624 14629 14640 + 14640 14641 14624 + 14618 14624 14641 + 14641 14642 14618 + 14618 14642 14619 + 14640 14639 14643 + 14643 14644 14640 + 14640 14644 14645 + 14645 14641 14640 + 14641 14645 14646 + 14646 14642 14641 + 14642 14646 14647 + 14647 14619 14642 + 14644 14643 14648 + 14648 14649 14644 + 14644 14649 14650 + 14650 14645 14644 + 14646 14645 14650 + 14650 14651 14646 + 14646 14651 14652 + 14652 14647 14646 + 14653 14648 14643 + 14654 14648 14653 + 14649 14648 14654 + 14654 14655 14649 + 14649 14655 14656 + 14656 14650 14649 + 14651 14650 14656 + 14656 14657 14651 + 14651 14657 14658 + 14658 14652 14651 + 14653 14659 14654 + 14660 14654 14659 + 14655 14654 14660 + 14660 14661 14655 + 14655 14661 14662 + 14662 14656 14655 + 14657 14656 14662 + 14659 14653 14663 + 14663 14664 14659 + 14659 14664 14665 + 14665 14666 14659 + 14659 14666 14667 + 14667 14660 14659 + 14663 14653 14668 + 14668 14669 14663 + 14663 14669 14670 + 14664 14663 14670 + 14671 14668 14653 + 14672 14668 14671 + 14668 14672 14673 + 14673 14669 14668 + 14669 14673 14674 + 14674 14670 14669 + 14675 14670 14674 + 14670 14675 14664 + 14676 14671 14653 + 14677 14671 14676 + 14671 14677 14610 + 14610 14678 14671 + 14671 14678 14672 + 14679 14672 14678 + 14673 14672 14679 + 14679 14680 14673 + 14680 14674 14673 + 14676 14681 14677 + 14604 14677 14681 + 14610 14677 14604 + 14678 14610 14609 + 14609 14682 14678 + 14678 14682 14679 + 14682 14683 14679 + 14683 14684 14679 + 14685 14679 14684 + 14680 14679 14685 + 14682 14609 14686 + 14682 14686 14687 + 14687 14683 14682 + 14683 14687 14688 + 14688 14689 14683 + 14683 14689 14690 + 14690 14684 14683 + 14686 14609 14691 + 14691 14692 14686 + 14687 14686 14692 + 14692 14693 14687 + 14688 14687 14693 + 14608 14691 14609 + 14619 14691 14608 + 14692 14691 14619 + 14619 14647 14692 + 14692 14647 14652 + 14652 14693 14692 + 14652 14658 14693 + 14693 14658 14688 + 14688 14658 14657 + 14657 14694 14688 + 14694 14695 14688 + 14689 14688 14695 + 14695 14696 14689 + 14689 14696 14697 + 14690 14689 14697 + 14662 14694 14657 + 14698 14694 14662 + 14694 14698 14699 + 14699 14695 14694 + 14695 14699 14700 + 14700 14696 14695 + 14696 14700 14701 + 14701 14697 14696 + 14662 14702 14698 + 14698 14702 14703 + 14703 14704 14698 + 14698 14704 14705 + 14705 14699 14698 + 14700 14699 14705 + 14705 14706 14700 + 14701 14700 14706 + 14702 14662 14661 + 14661 14707 14702 + 14703 14702 14707 + 14707 14708 14703 + 14709 14703 14708 + 14703 14709 14710 + 14710 14704 14703 + 14704 14710 14711 + 14711 14705 14704 + 14707 14661 14660 + 14660 14712 14707 + 14707 14712 14151 + 14151 14708 14707 + 14155 14708 14151 + 14708 14155 14709 + 14160 14709 14155 + 14710 14709 14160 + 14712 14660 14667 + 14667 14144 14712 + 14151 14712 14144 + 14144 14667 14713 + 14713 14139 14144 + 14139 14713 14133 + 14133 14713 14714 + 14714 14134 14133 + 14713 14667 14666 + 14666 14714 14713 + 14665 14714 14666 + 14714 14665 14715 + 14715 14134 14714 + 14129 14134 14715 + 14715 14716 14129 + 14129 14716 14130 + 14715 14665 14664 + 14717 14715 14664 + 14716 14715 14717 + 14717 14718 14716 + 14130 14716 14718 + 14718 14719 14130 + 14719 14720 14130 + 14720 14721 14130 + 14111 14130 14721 + 14722 14717 14664 + 14723 14717 14722 + 14723 14718 14717 + 14718 14723 14724 + 14724 14719 14718 + 14724 14725 14719 + 14719 14725 14726 + 14726 14720 14719 + 14664 14675 14722 + 14727 14722 14675 + 14728 14722 14727 + 14722 14728 14723 + 14723 14728 14729 + 14724 14723 14729 + 14730 14724 14729 + 14725 14724 14730 + 14675 14731 14727 + 14727 14731 14732 + 14733 14727 14732 + 14728 14727 14733 + 14733 14729 14728 + 14674 14731 14675 + 14731 14674 14680 + 14680 14732 14731 + 14685 14732 14680 + 14732 14685 14734 + 14734 14735 14732 + 14732 14735 14733 + 14736 14733 14735 + 14729 14733 14736 + 14737 14734 14685 + 14738 14734 14737 + 14738 14735 14734 + 14735 14738 14736 + 14739 14736 14738 + 14729 14736 14739 + 14740 14737 14685 + 14741 14737 14740 + 14737 14741 14742 + 14742 14743 14737 + 14737 14743 14738 + 14738 14743 14739 + 14744 14740 14685 + 14745 14740 14744 + 14740 14745 14746 + 14746 14747 14740 + 14740 14747 14741 + 14685 14748 14744 + 14749 14744 14748 + 14744 14749 14750 + 14744 14750 14745 + 14745 14750 14751 + 14752 14745 14751 + 14746 14745 14752 + 14684 14748 14685 + 14684 14690 14748 + 14748 14690 14749 + 14697 14749 14690 + 14750 14749 14697 + 14697 14751 14750 + 14751 14697 14701 + 14751 14701 14753 + 14753 14754 14751 + 14751 14754 14752 + 14755 14752 14754 + 14752 14755 14756 + 14756 14757 14752 + 14752 14757 14746 + 14706 14753 14701 + 14758 14753 14706 + 14753 14758 14759 + 14759 14754 14753 + 14754 14759 14755 + 14760 14755 14759 + 14756 14755 14760 + 14706 14761 14758 + 14762 14758 14761 + 14759 14758 14762 + 14762 14763 14759 + 14759 14763 14760 + 14761 14706 14705 + 14705 14711 14761 + 14761 14711 14764 + 14764 14765 14761 + 14761 14765 14762 + 14766 14762 14765 + 14762 14766 14767 + 14767 14763 14762 + 14763 14767 14768 + 14768 14760 14763 + 14764 14711 14710 + 14710 14769 14764 + 14770 14764 14769 + 14764 14770 14771 + 14771 14765 14764 + 14765 14771 14766 + 14772 14766 14771 + 14767 14766 14772 + 14772 14773 14767 + 14768 14767 14773 + 14160 14769 14710 + 14774 14769 14160 + 14769 14774 14770 + 14775 14770 14774 + 14771 14770 14775 + 14775 14776 14771 + 14771 14776 14772 + 14777 14772 14776 + 14773 14772 14777 + 14160 14159 14774 + 14774 14159 14158 + 14158 14165 14774 + 14774 14165 14775 + 14778 14775 14165 + 14775 14778 14776 + 14776 14778 14777 + 14777 14778 14164 + 14164 14170 14777 + 14170 14250 14777 + 14250 14779 14777 + 14773 14777 14779 + 14165 14164 14778 + 14258 14779 14250 + 14780 14779 14258 + 14779 14780 14773 + 14773 14780 14768 + 14781 14768 14780 + 14760 14768 14781 + 14781 14782 14760 + 14760 14782 14756 + 14258 14783 14780 + 14780 14783 14781 + 14781 14783 14784 + 14784 14785 14781 + 14782 14781 14785 + 14785 14786 14782 + 14756 14782 14786 + 14786 14787 14756 + 14757 14756 14787 + 14783 14258 14788 + 14788 14784 14783 + 14784 14788 14789 + 14789 14790 14784 + 14784 14790 14791 + 14791 14785 14784 + 14786 14785 14791 + 14257 14788 14258 + 14789 14788 14257 + 14257 14263 14789 + 14789 14263 14268 + 14268 14792 14789 + 14790 14789 14792 + 14792 14793 14790 + 14791 14790 14793 + 14793 14794 14791 + 14795 14791 14794 + 14791 14795 14786 + 14786 14795 14796 + 14796 14787 14786 + 14290 14792 14268 + 14793 14792 14290 + 14290 14797 14793 + 14793 14797 14798 + 14798 14794 14793 + 14799 14794 14798 + 14794 14799 14795 + 14796 14795 14799 + 14799 14800 14796 + 14801 14796 14800 + 14796 14801 14802 + 14797 14290 14289 + 14289 14295 14797 + 14798 14797 14295 + 14295 14803 14798 + 14804 14798 14803 + 14798 14804 14799 + 14799 14804 14805 + 14805 14800 14799 + 14300 14803 14295 + 14806 14803 14300 + 14803 14806 14804 + 14805 14804 14806 + 14806 14807 14805 + 14808 14805 14807 + 14805 14808 14809 + 14300 14810 14806 + 14806 14810 14811 + 14811 14807 14806 + 14812 14807 14811 + 14807 14812 14808 + 14813 14808 14812 + 14809 14808 14813 + 14810 14300 14814 + 14814 14815 14810 + 14811 14810 14815 + 14815 14816 14811 + 14817 14811 14816 + 14811 14817 14812 + 14299 14814 14300 + 14309 14814 14299 + 14815 14814 14309 + 14309 14818 14815 + 14815 14818 14819 + 14819 14816 14815 + 14820 14816 14819 + 14816 14820 14817 + 14821 14817 14820 + 14812 14817 14821 + 14821 14822 14812 + 14812 14822 14813 + 14818 14309 14314 + 14314 14319 14818 + 14819 14818 14319 + 14319 14823 14819 + 14824 14819 14823 + 14819 14824 14820 + 14820 14824 14825 + 14825 14826 14820 + 14820 14826 14821 + 14324 14823 14319 + 14827 14823 14324 + 14823 14827 14824 + 14825 14824 14827 + 14827 14828 14825 + 14829 14825 14828 + 14825 14829 14830 + 14830 14826 14825 + 14826 14830 14831 + 14831 14821 14826 + 14324 14832 14827 + 14832 14324 14833 + 14833 14834 14832 + 14323 14833 14324 + 14333 14833 14323 + 14834 14833 14333 + 14333 14835 14834 + 14834 14835 14836 + 14836 14837 14834 + 14834 14837 14838 + 14838 14839 14834 + 14827 14839 14838 + 14838 14828 14827 + 14835 14333 14338 + 14338 14840 14835 + 14836 14835 14840 + 14840 14841 14836 + 14842 14836 14841 + 14836 14842 14843 + 14843 14837 14836 + 14837 14843 14844 + 14844 14838 14837 + 14840 14338 14337 + 14337 14506 14840 + 14840 14506 14505 + 14505 14841 14840 + 14513 14841 14505 + 14841 14513 14842 + 14517 14842 14513 + 14843 14842 14517 + 14506 14337 14346 + 14800 14809 14801 + 14845 14801 14809 + 14802 14801 14845 + 14845 14846 14802 + 14802 14846 14746 + 14746 14757 14802 + 14787 14802 14757 + 14809 14847 14845 + 14848 14845 14847 + 14845 14848 14849 + 14849 14846 14845 + 14846 14849 14747 + 14747 14746 14846 + 14813 14847 14809 + 14850 14847 14813 + 14847 14850 14848 + 14851 14848 14850 + 14849 14848 14851 + 14851 14852 14849 + 14849 14852 14741 + 14741 14747 14849 + 14813 14853 14850 + 14850 14853 14854 + 14854 14855 14850 + 14850 14855 14851 + 14856 14851 14855 + 14856 14852 14851 + 14852 14856 14742 + 14742 14741 14852 + 14853 14813 14822 + 14822 14857 14853 + 14854 14853 14857 + 14857 14858 14854 + 14859 14854 14858 + 14855 14854 14859 + 14859 14860 14855 + 14855 14860 14856 + 14742 14856 14860 + 14857 14822 14821 + 14821 14831 14857 + 14857 14831 14861 + 14861 14858 14857 + 14858 14861 14862 + 14862 14863 14858 + 14858 14863 14859 + 14859 14863 14864 + 14864 14865 14859 + 14860 14859 14865 + 14861 14831 14830 + 14830 14866 14861 + 14862 14861 14866 + 14866 14867 14862 + 14862 14867 14868 + 14868 14869 14862 + 14863 14862 14869 + 14869 14864 14863 + 14870 14866 14830 + 14866 14870 14871 + 14871 14867 14866 + 14867 14871 14872 + 14872 14868 14867 + 14830 14829 14870 + 14873 14870 14829 + 14871 14870 14873 + 14873 14874 14871 + 14872 14871 14874 + 14874 14875 14872 + 14876 14872 14875 + 14868 14872 14876 + 14829 14877 14873 + 14878 14873 14877 + 14874 14873 14878 + 14878 14879 14874 + 14874 14879 14880 + 14880 14875 14874 + 14828 14877 14829 + 14877 14828 14838 + 14838 14844 14877 + 14877 14844 14878 + 14878 14844 14843 + 14843 14881 14878 + 14879 14878 14881 + 14881 14882 14879 + 14879 14882 14883 + 14883 14880 14879 + 14884 14880 14883 + 14875 14880 14884 + 14884 14885 14875 + 14875 14885 14876 + 14517 14881 14843 + 14881 14517 14516 + 14516 14882 14881 + 14882 14516 14886 + 14886 14883 14882 + 14887 14883 14886 + 14883 14887 14884 + 14884 14887 14888 + 14888 14889 14884 + 14885 14884 14889 + 14889 14890 14885 + 14876 14885 14890 + 14520 14886 14516 + 14891 14886 14520 + 14886 14891 14887 + 14887 14891 14892 + 14892 14888 14887 + 14893 14888 14892 + 14888 14893 14894 + 14894 14889 14888 + 14889 14894 14895 + 14895 14890 14889 + 14520 14528 14891 + 14891 14528 14896 + 14896 14892 14891 + 14897 14892 14896 + 14892 14897 14893 + 14893 14897 14898 + 14898 14899 14893 + 14894 14893 14899 + 14899 14900 14894 + 14895 14894 14900 + 14527 14896 14528 + 14901 14896 14527 + 14896 14901 14897 + 14897 14901 14902 + 14902 14898 14897 + 14903 14898 14902 + 14898 14903 14904 + 14904 14899 14898 + 14899 14904 14905 + 14905 14900 14899 + 14527 14533 14901 + 14901 14533 14906 + 14906 14902 14901 + 14907 14902 14906 + 14902 14907 14903 + 14903 14907 14908 + 14908 14909 14903 + 14904 14903 14909 + 14909 14910 14904 + 14905 14904 14910 + 14911 14906 14533 + 14912 14906 14911 + 14906 14912 14907 + 14907 14912 14913 + 14913 14908 14907 + 14914 14908 14913 + 14908 14914 14915 + 14915 14909 14908 + 14533 14532 14911 + 14916 14911 14532 + 14917 14911 14916 + 14911 14917 14912 + 14912 14917 14918 + 14918 14913 14912 + 14919 14913 14918 + 14913 14919 14914 + 14532 14538 14916 + 14916 14538 14920 + 14920 14921 14916 + 14922 14916 14921 + 14916 14922 14917 + 14917 14922 14923 + 14923 14918 14917 + 14924 14918 14923 + 14918 14924 14919 + 14538 14543 14920 + 14541 14920 14543 + 14925 14920 14541 + 14920 14925 14926 + 14926 14921 14920 + 14927 14921 14926 + 14921 14927 14922 + 14922 14927 14928 + 14928 14923 14922 + 14543 14542 14541 + 14541 14547 14925 + 14925 14547 14929 + 14929 14930 14925 + 14925 14930 14931 + 14931 14926 14925 + 14932 14926 14931 + 14926 14932 14927 + 14927 14932 14933 + 14933 14928 14927 + 14552 14929 14547 + 14934 14929 14552 + 14930 14929 14934 + 14934 14935 14930 + 14930 14935 14936 + 14936 14931 14930 + 14937 14931 14936 + 14931 14937 14932 + 14932 14937 14938 + 14938 14933 14932 + 14552 14551 14934 + 14939 14934 14551 + 14935 14934 14939 + 14939 14940 14935 + 14935 14940 14941 + 14941 14936 14935 + 14942 14936 14941 + 14936 14942 14937 + 14937 14942 14943 + 14943 14938 14937 + 14551 14944 14939 + 14944 14945 14939 + 14946 14939 14945 + 14940 14939 14946 + 14946 14947 14940 + 14940 14947 14948 + 14948 14941 14940 + 14557 14944 14551 + 14949 14944 14557 + 14944 14949 14950 + 14950 14945 14944 + 14945 14950 14951 + 14951 14952 14945 + 14945 14952 14946 + 14953 14946 14952 + 14947 14946 14953 + 14557 14954 14949 + 14949 14954 14955 + 14955 14956 14949 + 14950 14949 14956 + 14956 14957 14950 + 14951 14950 14957 + 14954 14557 14958 + 14958 14959 14954 + 14955 14954 14959 + 14959 14960 14955 + 14961 14955 14960 + 14956 14955 14961 + 14556 14958 14557 + 14562 14958 14556 + 14959 14958 14562 + 14562 14962 14959 + 14959 14962 14963 + 14963 14960 14959 + 14960 14963 14964 + 14964 14965 14960 + 14960 14965 14961 + 14962 14562 14966 + 14966 14967 14962 + 14963 14962 14967 + 14967 14968 14963 + 14968 14969 14963 + 14964 14963 14969 + 14561 14966 14562 + 14567 14966 14561 + 14967 14966 14567 + 14567 14970 14967 + 14967 14970 14971 + 14971 14968 14967 + 14968 14971 14972 + 14972 14973 14968 + 14968 14973 14974 + 14974 14969 14968 + 14970 14567 14572 + 14572 14469 14970 + 14971 14970 14469 + 14469 14468 14971 + 14972 14971 14468 + 14468 14467 14972 + 14975 14972 14467 + 14973 14972 14975 + 14463 14469 14572 + 14476 14975 14467 + 14976 14975 14476 + 14975 14976 14977 + 14977 14978 14975 + 14975 14978 14973 + 14973 14978 14979 + 14979 14974 14973 + 14980 14974 14979 + 14969 14974 14980 + 14476 14481 14976 + 14976 14481 14981 + 14981 14982 14976 + 14977 14976 14982 + 14982 14983 14977 + 14984 14977 14983 + 14978 14977 14984 + 14984 14979 14978 + 14480 14981 14481 + 14985 14981 14480 + 14981 14985 14986 + 14986 14982 14981 + 14982 14986 14987 + 14987 14983 14982 + 14983 14987 14988 + 14988 14989 14983 + 14983 14989 14984 + 14480 14479 14985 + 14985 14479 14990 + 14990 14991 14985 + 14985 14991 14992 + 14992 14986 14985 + 14987 14986 14992 + 14992 14993 14987 + 14988 14987 14993 + 14994 14990 14479 + 14995 14990 14994 + 14995 14991 14990 + 14991 14995 14996 + 14996 14992 14991 + 14996 14993 14992 + 14993 14996 14997 + 14997 14998 14993 + 14993 14998 14988 + 14502 14994 14479 + 14999 14994 14502 + 15000 14994 14999 + 14994 15000 14995 + 14996 14995 15000 + 14502 14501 14999 + 15001 14999 14501 + 15000 14999 15001 + 15001 15002 15000 + 15000 15002 14996 + 15003 15001 14501 + 15004 15001 15003 + 15002 15001 15004 + 15002 15004 15005 + 15005 15006 15002 + 15002 15006 14996 + 15007 15003 14501 + 15008 15003 15007 + 15008 15009 15003 + 15003 15009 15004 + 15004 15009 15010 + 15010 15005 15004 + 15011 15005 15010 + 15006 15005 15011 + 14500 15007 14501 + 15012 15007 14500 + 15013 15007 15012 + 15007 15013 15008 + 15008 15013 1628 + 15014 15008 1628 + 15009 15008 15014 + 15014 15010 15009 + 15014 15015 15010 + 15010 15015 15011 + 14500 7560 15012 + 1629 15012 7560 + 15013 15012 1629 + 1629 1628 15013 + 1624 1629 7560 + 7559 1624 7560 + 15016 1624 7559 + 1624 15016 1620 + 1620 15016 15017 + 15017 15018 1620 + 1620 15018 1615 + 7559 7558 15016 + 15017 15016 7558 + 15019 15017 7558 + 15020 15017 15019 + 15018 15017 15020 + 15018 15020 15021 + 15021 1615 15018 + 1616 1615 15021 + 1616 15021 15022 + 15022 1610 1616 + 7566 15019 7558 + 15023 15019 7566 + 15024 15019 15023 + 15019 15024 15020 + 15020 15024 15025 + 15021 15020 15025 + 15025 15022 15021 + 15026 15022 15025 + 15026 1610 15022 + 1610 15026 1611 + 7566 15027 15023 + 15028 15023 15027 + 15024 15023 15028 + 15028 15029 15024 + 15024 15029 15025 + 15027 7566 7565 + 15027 7565 7564 + 7564 15030 15027 + 15027 15030 15028 + 15025 15031 15026 + 15026 15031 15032 + 1611 15026 15032 + 15032 15033 1611 + 1607 1611 15033 + 15033 15034 1607 + 1607 15034 1602 + 15034 15035 1602 + 15035 15036 1602 + 15036 15037 1602 + 15037 15038 1602 + 15039 15034 15033 + 15034 15039 15040 + 15040 15035 15034 + 15040 15041 15035 + 15035 15041 15042 + 15042 15036 15035 + 15033 15043 15039 + 15039 15043 15044 + 15044 15045 15039 + 15040 15039 15045 + 15045 15046 15040 + 15041 15040 15046 + 15046 15047 15041 + 15042 15041 15047 + 15043 15033 15048 + 15048 15049 15043 + 15043 15049 15050 + 15050 15044 15043 + 15051 15044 15050 + 15045 15044 15051 + 15045 15051 15052 + 15052 15046 15045 + 15047 15046 15052 + 15048 15053 15049 + 15049 15053 15054 + 15054 15050 15049 + 15050 15054 15055 + 15050 15055 15051 + 15051 15055 505 + 15052 15051 505 + 15053 15048 15056 + 15056 15057 15053 + 15054 15053 15057 + 15058 15054 15057 + 15055 15054 15058 + 15058 15059 15055 + 15055 15059 505 + 15057 15056 15060 + 15060 15061 15057 + 15057 15061 15062 + 15062 15058 15057 + 15058 15062 15059 + 15059 15062 15063 + 15063 15064 15059 + 15059 15064 505 + 15061 15060 15065 + 15065 15066 15061 + 15062 15061 15066 + 15063 15062 15066 + 15067 15063 15066 + 15063 15067 15064 + 15064 15067 15068 + 15068 15069 15064 + 15064 15069 505 + 15069 15070 505 + 15070 506 505 + 15065 15071 15066 + 15066 15071 15067 + 15067 15071 15072 + 15068 15067 15072 + 15073 15068 15072 + 15068 15073 15069 + 15069 15073 15074 + 15074 15070 15069 + 15071 15065 15075 + 15075 15072 15071 + 15075 15076 15072 + 15072 15076 15073 + 15073 15076 15077 + 15074 15073 15077 + 15077 15078 15074 + 15079 15074 15078 + 15074 15079 15070 + 15075 15065 15080 + 505 511 15052 + 511 15081 15052 + 15081 15082 15052 + 15047 15052 15082 + 15082 15083 15047 + 15047 15083 15042 + 15084 15081 511 + 15084 15085 15081 + 15081 15085 15086 + 15086 15082 15081 + 15086 15083 15082 + 15042 15083 15086 + 15087 15042 15086 + 15042 15087 15036 + 511 510 15084 + 15084 510 509 + 509 15088 15084 + 15088 15089 15084 + 15085 15084 15089 + 15089 15090 15085 + 15085 15090 15091 + 15086 15085 15091 + 15091 15087 15086 + 15036 15087 15091 + 15091 15037 15036 + 15092 15089 15088 + 15089 15092 15093 + 15093 15090 15089 + 15090 15093 15094 + 15094 15091 15090 + 15091 15094 15037 + 15037 15094 15095 + 15095 15096 15037 + 15088 15097 15092 + 15092 15097 15098 + 14721 14112 14111 + 14721 15099 14112 + 14112 15099 14113 + 15099 15100 14113 + 14107 14113 15100 + 15100 15101 14107 + 14107 15101 14108 + 15099 14721 14720 + 14720 15100 15099 + 15101 15100 14720 + 14720 14726 15101 + 15101 14726 15102 + 15102 14108 15101 + 15103 14108 15102 + 14108 15103 14109 + 14109 15103 15104 + 15104 15105 14109 + 14104 14109 15105 + 15106 15102 14726 + 15107 15102 15106 + 15102 15107 15103 + 15103 15107 15108 + 15108 15104 15103 + 15109 15104 15108 + 15104 15109 15110 + 15110 15105 15104 + 14726 14725 15106 + 14725 15111 15106 + 15112 15106 15111 + 15113 15106 15112 + 15106 15113 15107 + 15107 15113 15114 + 15114 15108 15107 + 15115 15108 15114 + 15108 15115 15109 + 14730 15111 14725 + 14730 15116 15111 + 15111 15116 15112 + 15117 15112 15116 + 15118 15112 15117 + 15112 15118 15113 + 15113 15118 15119 + 15119 15114 15113 + 15120 15114 15119 + 15114 15120 15115 + 15116 14730 15121 + 15121 15122 15116 + 15116 15122 15117 + 15123 15117 15122 + 15124 15117 15123 + 15117 15124 15118 + 15118 15124 15125 + 15125 15119 15118 + 15121 14730 14729 + 15126 15121 14729 + 15127 15121 15126 + 15121 15127 15122 + 15122 15127 15123 + 15128 15123 15127 + 15129 15123 15128 + 15123 15129 15124 + 15124 15129 15130 + 15130 15125 15124 + 14729 15131 15126 + 15132 15126 15131 + 15126 15132 15133 + 15126 15133 15127 + 15127 15133 15128 + 14739 15131 14729 + 15131 14739 15134 + 15131 15134 15132 + 15132 15134 14742 + 15135 15132 14742 + 15133 15132 15135 + 15135 15136 15133 + 15133 15136 15128 + 15134 14739 14743 + 14743 14742 15134 + 14860 15135 14742 + 14865 15135 14860 + 15135 14865 15137 + 15137 15136 15135 + 15136 15137 15138 + 15138 15128 15136 + 15139 15128 15138 + 15128 15139 15129 + 15129 15139 15140 + 15140 15130 15129 + 15137 14865 14864 + 14864 15141 15137 + 15137 15141 15142 + 15142 15138 15137 + 15143 15138 15142 + 15138 15143 15139 + 15139 15143 15144 + 15144 15140 15139 + 15145 15141 14864 + 15141 15145 15146 + 15146 15142 15141 + 15147 15142 15146 + 15142 15147 15143 + 15143 15147 15148 + 15148 15144 15143 + 14864 14869 15145 + 15145 14869 14868 + 14868 15149 15145 + 15145 15149 15150 + 15150 15146 15145 + 15151 15146 15150 + 15146 15151 15147 + 15147 15151 15152 + 15152 15148 15147 + 14876 15149 14868 + 15149 14876 15153 + 15153 15150 15149 + 15154 15150 15153 + 15150 15154 15151 + 15151 15154 15155 + 15155 15152 15151 + 15156 15152 15155 + 15152 15156 15157 + 15157 15148 15152 + 14890 15153 14876 + 15158 15153 14890 + 15153 15158 15154 + 15154 15158 15159 + 15159 15155 15154 + 15160 15155 15159 + 15155 15160 15156 + 15156 15160 15161 + 15161 15162 15156 + 15157 15156 15162 + 14890 14895 15158 + 15158 14895 15163 + 15163 15159 15158 + 15164 15159 15163 + 15159 15164 15160 + 15160 15164 15165 + 15165 15161 15160 + 15166 15161 15165 + 15161 15166 15167 + 15167 15162 15161 + 14900 15163 14895 + 15168 15163 14900 + 15163 15168 15164 + 15164 15168 15169 + 15169 15165 15164 + 15170 15165 15169 + 15165 15170 15166 + 15166 15170 15171 + 15171 15172 15166 + 15167 15166 15172 + 14900 14905 15168 + 15168 14905 15173 + 15173 15169 15168 + 15174 15169 15173 + 15169 15174 15170 + 15170 15174 15175 + 15175 15171 15170 + 15176 15171 15175 + 15171 15176 15177 + 15177 15172 15171 + 14910 15173 14905 + 15178 15173 14910 + 15173 15178 15174 + 15174 15178 15179 + 15179 15175 15174 + 15180 15175 15179 + 15175 15180 15176 + 15176 15180 15181 + 15181 15182 15176 + 15177 15176 15182 + 14910 15183 15178 + 15178 15183 15184 + 15184 15179 15178 + 15185 15179 15184 + 15179 15185 15180 + 15180 15185 15186 + 15186 15181 15180 + 15183 14910 14909 + 14909 14915 15183 + 15183 14915 15187 + 15187 15184 15183 + 15188 15184 15187 + 15184 15188 15185 + 15185 15188 15189 + 15189 15186 15185 + 15190 15186 15189 + 15186 15190 15191 + 15191 15181 15186 + 15192 15187 14915 + 15193 15187 15192 + 15187 15193 15188 + 15188 15193 15194 + 15194 15189 15188 + 15195 15189 15194 + 15189 15195 15190 + 15196 15190 15195 + 15191 15190 15196 + 14915 14914 15192 + 15197 15192 14914 + 15198 15192 15197 + 15192 15198 15193 + 15193 15198 15199 + 15199 15194 15193 + 15200 15194 15199 + 15194 15200 15195 + 14914 14919 15197 + 15201 15197 14919 + 15202 15197 15201 + 15197 15202 15198 + 15198 15202 15203 + 15203 15199 15198 + 15204 15199 15203 + 15199 15204 15200 + 15205 15200 15204 + 15195 15200 15205 + 14919 14924 15201 + 15206 15201 14924 + 15207 15201 15206 + 15201 15207 15202 + 15202 15207 15208 + 15208 15203 15202 + 15209 15203 15208 + 15203 15209 15204 + 14924 15210 15206 + 15211 15206 15210 + 15212 15206 15211 + 15206 15212 15207 + 15207 15212 15213 + 15213 15208 15207 + 15214 15208 15213 + 15208 15214 15209 + 14923 15210 14924 + 15210 14923 14928 + 14928 15215 15210 + 15210 15215 15211 + 15216 15211 15215 + 15217 15211 15216 + 15211 15217 15212 + 15212 15217 15218 + 15218 15213 15212 + 15219 15213 15218 + 15213 15219 15214 + 15215 14928 14933 + 14933 15220 15215 + 15215 15220 15216 + 15221 15216 15220 + 15222 15216 15221 + 15216 15222 15217 + 15217 15222 15223 + 15223 15218 15217 + 15224 15218 15223 + 15218 15224 15219 + 15220 14933 14938 + 14938 15225 15220 + 15220 15225 15221 + 15226 15221 15225 + 15227 15221 15226 + 15221 15227 15222 + 15222 15227 15228 + 15228 15223 15222 + 15229 15223 15228 + 15223 15229 15224 + 15225 14938 14943 + 14943 15230 15225 + 15225 15230 15226 + 15231 15226 15230 + 15232 15226 15231 + 15226 15232 15227 + 15227 15232 15233 + 15233 15228 15227 + 15234 15228 15233 + 15228 15234 15229 + 15230 14943 15235 + 15235 15236 15230 + 15230 15236 15231 + 15237 15231 15236 + 15238 15231 15237 + 15231 15238 15232 + 15232 15238 15239 + 15239 15233 15232 + 15235 14943 14942 + 14942 15240 15235 + 15241 15235 15240 + 15236 15235 15241 + 15241 15242 15236 + 15236 15242 15237 + 15243 15237 15242 + 15244 15237 15243 + 15237 15244 15238 + 14941 15240 14942 + 15240 14941 14948 + 14948 15245 15240 + 15240 15245 15241 + 15246 15241 15245 + 15242 15241 15246 + 15246 15247 15242 + 15242 15247 15243 + 15248 15243 15247 + 15249 15243 15248 + 15243 15249 15244 + 15245 14948 15250 + 15250 15251 15245 + 15245 15251 15246 + 15252 15246 15251 + 15247 15246 15252 + 15252 15253 15247 + 15247 15253 15248 + 15250 14948 14947 + 14947 15254 15250 + 15255 15250 15254 + 15251 15250 15255 + 15255 15256 15251 + 15251 15256 15252 + 15257 15252 15256 + 15253 15252 15257 + 14953 15254 14947 + 15254 14953 15258 + 15258 15259 15254 + 15254 15259 15255 + 15260 15255 15259 + 15256 15255 15260 + 15260 15261 15256 + 15256 15261 15257 + 15258 14953 15262 + 15262 15263 15258 + 15264 15258 15263 + 15259 15258 15264 + 15264 15265 15259 + 15259 15265 15260 + 15266 15260 15265 + 15261 15260 15266 + 14952 15262 14953 + 15267 15262 14952 + 15262 15267 15268 + 15268 15263 15262 + 15263 15268 15269 + 15269 15270 15263 + 15263 15270 15264 + 15271 15264 15270 + 15265 15264 15271 + 14952 14951 15267 + 15267 14951 15272 + 15272 15273 15267 + 15268 15267 15273 + 15273 15274 15268 + 15269 15268 15274 + 14957 15272 14951 + 15272 14957 15275 + 15275 15276 15272 + 15272 15276 15277 + 15277 15273 15272 + 15274 15273 15277 + 15275 14957 14956 + 14956 15278 15275 + 15275 15278 15279 + 15279 15280 15275 + 15276 15275 15280 + 15280 15281 15276 + 15277 15276 15281 + 14961 15278 14956 + 15278 14961 15282 + 15282 15279 15278 + 15279 15282 15283 + 15283 15284 15279 + 15279 15284 15285 + 15285 15280 15279 + 15281 15280 15285 + 15282 14961 14965 + 14965 15286 15282 + 15283 15282 15286 + 15286 15287 15283 + 15288 15283 15287 + 15284 15283 15288 + 15288 15289 15284 + 15284 15289 15290 + 15290 15285 15284 + 15291 15286 14965 + 15287 15286 15291 + 15291 15292 15287 + 15287 15292 15293 + 15293 15294 15287 + 15287 15294 15288 + 14965 14964 15291 + 15291 14964 15295 + 15295 15296 15291 + 15292 15291 15296 + 15296 15297 15292 + 15293 15292 15297 + 14969 15295 14964 + 14980 15295 14969 + 15295 14980 15298 + 15298 15296 15295 + 15297 15296 15298 + 15298 15299 15297 + 15297 15299 15300 + 15300 15301 15297 + 15297 15301 15293 + 15298 14980 15302 + 15302 15303 15298 + 15299 15298 15303 + 15303 15304 15299 + 15300 15299 15304 + 14979 15302 14980 + 15305 15302 14979 + 15302 15305 15306 + 15306 15303 15302 + 15304 15303 15306 + 15306 15307 15304 + 15304 15307 15308 + 15308 15309 15304 + 15304 15309 15300 + 14979 14984 15305 + 15305 14984 14989 + 14989 15310 15305 + 15306 15305 15310 + 15310 15311 15306 + 15307 15306 15311 + 15311 15312 15307 + 15308 15307 15312 + 15313 15310 14989 + 15310 15313 15314 + 15314 15311 15310 + 15312 15311 15314 + 15314 15315 15312 + 15312 15315 15316 + 15316 15317 15312 + 15312 15317 15308 + 14989 14988 15313 + 15313 14988 14998 + 14998 15318 15313 + 15314 15313 15318 + 15318 15319 15314 + 15319 15320 15314 + 15315 15314 15320 + 15320 15321 15315 + 15316 15315 15321 + 14997 15318 14998 + 15318 14997 15322 + 15322 15319 15318 + 15322 15323 15319 + 15319 15323 15324 + 15324 15320 15319 + 15321 15320 15324 + 15322 14997 14996 + 15325 15322 14996 + 15323 15322 15325 + 15325 15326 15323 + 15324 15323 15326 + 15326 15327 15324 + 15327 15328 15324 + 15329 15324 15328 + 15324 15329 15321 + 15330 15325 14996 + 15331 15325 15330 + 15325 15331 15326 + 15326 15331 15332 + 15332 15327 15326 + 15332 15333 15327 + 15327 15333 15334 + 15334 15328 15327 + 15006 15330 14996 + 15335 15330 15006 + 15330 15335 15336 + 15330 15336 15331 + 15332 15331 15336 + 15337 15332 15336 + 15333 15332 15337 + 15337 15338 15333 + 15334 15333 15338 + 15006 15011 15335 + 15339 15335 15011 + 15336 15335 15339 + 15339 15340 15336 + 15336 15340 15337 + 15341 15337 15340 + 15341 15338 15337 + 15338 15341 15342 + 15342 15343 15338 + 15338 15343 15334 + 15344 15339 15011 + 15345 15339 15344 + 15339 15345 15346 + 15346 15340 15339 + 15340 15346 15341 + 15341 15346 15347 + 15347 5158 15341 + 5158 15342 15341 + 15011 15015 15344 + 15348 15344 15015 + 15348 15349 15344 + 15344 15349 15345 + 15345 15349 15350 + 15350 15351 15345 + 15351 15352 15345 + 15346 15345 15352 + 15352 15347 15346 + 15015 15014 15348 + 15348 15014 1628 + 15353 15348 1628 + 15349 15348 15353 + 15353 15350 15349 + 1639 15350 15353 + 15350 1639 5146 + 5146 15351 15350 + 5145 15351 5146 + 15351 5145 15354 + 15354 15352 15351 + 15354 15347 15352 + 1628 1634 15353 + 1639 15353 1634 + 5153 15354 5145 + 15347 15354 5153 + 5153 5158 15347 + 14605 15355 14596 + 14596 15355 14597 + 248 7356 14280 + 248 14280 15356 + 15357 15358 13509 + 15359 15357 13509 + 7328 15357 15359 + 15360 15357 7328 + 7323 15359 13509 + 7322 15359 7323 + 15359 7322 7328 + 7409 15361 3363 + 15362 7409 3363 + 15363 14182 15364 + 15365 14182 15363 + 14182 15365 14220 + 14220 15366 14182 + 15363 15367 15365 + 14215 15365 15367 + 14220 15365 14215 + 15363 15368 15367 + 15367 15368 15369 + 15369 14216 15367 + 15367 14216 14215 + 15368 15363 15370 + 15370 250 15368 + 15369 15368 250 + 250 15371 15369 + 14211 15369 15371 + 15369 14211 14210 + 14210 14216 15369 + 13621 15371 250 + 13620 15371 13621 + 15371 13620 14211 + 250 214 13621 + 13755 15372 15373 + 15372 13761 15373 + 15374 1486 15375 + 1486 1485 15375 + 15376 15375 1485 + 1485 1484 15376 + 15377 15376 1484 + 15378 336 15379 + 15380 336 15378 + 15378 621 15380 + 15381 15382 3773 + 15383 3773 15382 + 3773 15383 3774 + 3774 15383 15384 + 15384 3788 3774 + 15382 15385 15383 + 15383 15385 495 + 495 15384 15383 + 15386 15384 495 + 3788 15384 15386 + 15386 15387 3788 + 3788 15387 3789 + 3819 3789 15387 + 3818 3789 3819 + 3789 3818 229 + 495 15388 15386 + 15386 15388 15389 + 15389 15390 15386 + 15387 15386 15390 + 15390 15391 15387 + 15387 15391 3819 + 3479 3819 15391 + 15392 15390 15389 + 15391 15390 15392 + 15391 15392 3479 + 3479 15392 15393 + 15393 15394 3479 + 15394 3480 3479 + 3481 3480 15394 + 15389 15395 15392 + 15392 15395 15393 + 15077 15393 15395 + 15077 15396 15393 + 15393 15396 15397 + 15397 15394 15393 + 15397 15398 15394 + 15394 15398 3481 + 3481 15398 3470 + 15389 15078 15395 + 15395 15078 15077 + 15078 15389 15079 + 15399 15079 15389 + 15070 15079 15399 + 15399 506 15070 + 15399 507 506 + 507 15399 15400 + 15400 15401 507 + 15402 15399 15389 + 15403 6 15404 + 6 15405 15404 + 15406 15407 15408 + 15409 15408 15407 + 15408 15409 15410 + 15407 15411 15409 + 15409 15411 15412 + 15412 15413 15409 + 15413 15414 15409 + 15414 15415 15409 + 15415 15410 15409 + 15416 15411 15407 + 15411 15416 15417 + 15417 15412 15411 + 15412 15417 442 + 15412 442 449 + 449 15413 15412 + 15416 15407 15418 + 15418 15419 15416 + 15416 15419 15420 + 15420 15417 15416 + 442 15417 15420 + 15420 15421 442 + 442 15421 435 + 15419 15418 15422 + 15419 15422 15423 + 15423 15424 15419 + 15419 15424 15420 + 15425 15420 15424 + 15420 15425 15421 + 15421 15425 15426 + 15426 15427 15421 + 15421 15427 435 + 15428 15424 15423 + 15424 15428 15425 + 15425 15428 15429 + 15426 15425 15429 + 15429 15430 15426 + 15431 15426 15430 + 15426 15431 15427 + 15428 15423 15432 + 15432 15429 15428 + 15433 15429 15432 + 15429 15433 1602 + 1602 15430 15429 + 1602 15434 15430 + 15430 15434 15431 + 15435 15431 15434 + 15427 15431 15435 + 15435 15436 15427 + 15427 15436 435 + 15436 15437 435 + 15437 436 435 + 438 436 15437 + 15434 1602 15096 + 15096 15438 15434 + 15434 15438 15435 + 15439 15435 15438 + 15435 15439 15436 + 15436 15439 15440 + 15440 15437 15436 + 15440 15441 15437 + 15437 15441 438 + 438 15441 15092 + 15093 15092 15441 + 15095 15438 15096 + 15438 15095 15439 + 15439 15095 15094 + 15440 15439 15094 + 15094 15093 15440 + 15441 15440 15093 + 448 15413 449 + 15413 448 15442 + 15442 15414 15413 + 15414 15442 15415 + 15415 15442 15443 + 15443 15444 15415 + 15410 15415 15444 + 15442 448 453 + 453 15443 15442 + 15445 15443 453 + 15444 15443 15445 + 15444 15445 15446 + 15446 15447 15444 + 15444 15447 15410 + 15448 15410 15447 + 15410 15448 15449 + 453 452 15445 + 15445 452 391 + 15446 15445 375 + 7742 15446 375 + 15450 15446 7742 + 15450 15447 15446 + 15447 15450 15448 + 15451 15448 15450 + 15452 15448 15451 + 15451 15453 15452 + 15453 15451 7750 + 7750 15454 15453 + 7742 7751 15450 + 15450 7751 15451 + 7750 15451 7751 + 15454 7750 7749 + 7749 15455 15454 + 15456 15455 7749 + 15457 15458 3030 + 3025 3030 15458 + 15458 186 3025 + 3025 186 15459 + 5800 3909 15460 + 15460 3878 5800 + 15461 15462 15463 + 15464 15462 15461 + 15464 15465 15462 + 15462 15465 15466 + 15466 15467 15462 + 15466 15468 15467 + 15461 15469 15464 + 15468 15466 15470 + 15470 15471 15468 + 15470 2086 15471 + 2086 15472 15471 + 3715 15473 15474 + 3704 15473 3715 + 3715 15475 3704 + 3704 15475 15476 + 15476 15477 3704 + 15477 3705 3704 + 15477 15478 3705 + 15479 15475 3715 + 15475 15479 15480 + 15480 15476 15475 + 3715 15481 15479 + 15479 15481 15482 + 15482 7652 15479 + 15479 7652 7651 + 15480 15479 7651 + 15481 3715 3714 + 3714 15483 15481 + 15483 15484 15481 + 15484 15482 15481 + 7646 15482 15484 + 7646 7652 15482 + 15484 15483 15485 + 7681 15484 15485 + 7647 15484 7681 + 15484 7647 7646 + 7681 7649 7647 + 7649 7681 7680 + 7680 15486 7649 + 7649 15486 15487 + 15488 7649 15487 + 7680 7679 15486 + 7657 15486 7679 + 15486 7657 15487 + 15489 7657 7679 + 15490 38 15491 + 15492 15490 15491 + 15493 15494 7731 + 15494 15495 7731 + 15357 15496 14279 + 14279 15497 15357 + 3442 15498 15499 + 15499 15500 3442 + 15501 1423 1414 + 1414 15502 15501 + 15501 15502 15503 + 15503 1505 15501 + 1504 15501 1505 + 1507 15501 1504 + 15502 1414 1413 + 1413 1419 15502 + 15502 1419 1418 + 1418 15503 15502 + 20 15503 1418 + 15503 20 1506 + 1506 1505 15503 + 15504 1506 20 + 15505 4962 15506 + 15506 15507 15505 + 15508 15509 3705 + 15510 15508 3705 + 15511 15512 15513 + 15514 15513 15512 + 14635 15513 15514 + 15513 14635 14634 + 14634 15515 15513 + 15513 15515 15516 + 15517 15516 15515 + 15512 15518 15514 + 15514 15518 15519 + 15519 14628 15514 + 14635 15514 14628 + 14634 14633 15515 + 15515 14633 15517 + 14586 15517 14633 + 14585 15517 14586 + 15517 14585 14591 + 14591 15520 15517 + 7763 15521 15522 + 15522 15523 7763 + 15523 15522 15524 + 15525 15523 15524 + 15525 15524 7677 + 7677 15526 15525 + 15527 15525 15526 + 15528 15527 15526 + 15526 7676 15528 + 7676 15526 7677 + 15398 15529 3470 + 15530 15529 15398 + 15531 15529 15530 + 15529 15531 3471 + 3471 3470 15529 + 15398 15397 15530 + 15532 15530 15397 + 15531 15530 15532 + 15532 15533 15531 + 3471 15531 15533 + 15534 15532 15397 + 15029 15532 15534 + 15533 15532 15029 + 15397 15396 15534 + 15535 15534 15396 + 15536 15534 15535 + 15534 15536 15029 + 15029 15536 15537 + 15536 15538 15537 + 15076 15538 15536 + 15396 15077 15535 + 15076 15535 15077 + 15536 15535 15076 + 15539 15342 5158 + 15342 15539 15540 + 15540 15343 15342 + 15343 15540 15541 + 15541 15542 15343 + 15343 15542 15334 + 5158 5157 15539 + 15539 5157 5156 + 5156 15543 15539 + 15540 15539 15543 + 15543 15544 15540 + 15541 15540 15544 + 15544 15545 15541 + 15546 15541 15545 + 15541 15546 15547 + 15547 15542 15541 + 5167 15543 5156 + 15544 15543 5167 + 5167 15548 15544 + 15544 15548 15549 + 15549 15545 15544 + 15550 15545 15549 + 15545 15550 15546 + 15551 15546 15550 + 15547 15546 15551 + 15548 5167 15552 + 15552 15553 15548 + 15549 15548 15553 + 15553 15554 15549 + 15555 15549 15554 + 15549 15555 15550 + 5166 15552 5167 + 15556 15552 5166 + 15552 15556 15557 + 15557 15553 15552 + 15553 15557 15558 + 15558 15554 15553 + 15559 15554 15558 + 15554 15559 15555 + 15560 15555 15559 + 15550 15555 15560 + 5166 5165 15556 + 15556 5165 5164 + 5164 15561 15556 + 15557 15556 15561 + 15561 15562 15557 + 15558 15557 15562 + 15562 15563 15558 + 15563 15564 15558 + 15565 15558 15564 + 15558 15565 15559 + 5174 15561 5164 + 15561 5174 15562 + 15562 5174 15566 + 15566 15563 15562 + 15563 15566 15567 + 15567 15568 15563 + 15563 15568 15569 + 15569 15564 15563 + 15570 15564 15569 + 15564 15570 15565 + 5179 15566 5174 + 15567 15566 5179 + 5179 5183 15567 + 15571 15567 5183 + 15568 15567 15571 + 15571 15572 15568 + 15569 15568 15572 + 15572 15573 15569 + 15574 15569 15573 + 15569 15574 15570 + 5183 5182 15571 + 15575 15571 5182 + 15572 15571 15575 + 15575 15576 15572 + 15572 15576 15577 + 15577 15573 15572 + 15578 15573 15577 + 15573 15578 15574 + 15579 15574 15578 + 15570 15574 15579 + 5182 5187 15575 + 15580 15575 5187 + 15576 15575 15580 + 15580 15581 15576 + 15577 15576 15581 + 15581 15582 15577 + 15583 15577 15582 + 15577 15583 15578 + 5187 15584 15580 + 15585 15580 15584 + 15581 15580 15585 + 15585 15586 15581 + 15581 15586 15587 + 15587 15582 15581 + 15588 15582 15587 + 15582 15588 15583 + 5186 15584 5187 + 15589 15584 5186 + 15584 15589 15585 + 15590 15585 15589 + 15586 15585 15590 + 15590 15591 15586 + 15587 15586 15591 + 15591 15592 15587 + 15593 15587 15592 + 15587 15593 15588 + 5186 15594 15589 + 15589 15594 15595 + 15595 15596 15589 + 15589 15596 15590 + 15597 15590 15596 + 15591 15590 15597 + 15594 5186 5191 + 5191 15598 15594 + 15595 15594 15598 + 15598 15599 15595 + 15600 15595 15599 + 15595 15600 15601 + 15601 15596 15595 + 15596 15601 15597 + 15602 15598 5191 + 15598 15602 15603 + 15603 15599 15598 + 15599 15603 15604 + 15604 15605 15599 + 15599 15605 15600 + 15606 15600 15605 + 15601 15600 15606 + 5191 5190 15602 + 15602 5190 15607 + 15607 15608 15602 + 15603 15602 15608 + 15608 15609 15603 + 15604 15603 15609 + 15609 15610 15604 + 15611 15604 15610 + 15605 15604 15611 + 5195 15607 5190 + 15612 15607 5195 + 15607 15612 15613 + 15613 15608 15607 + 15608 15613 15614 + 15614 15609 15608 + 15609 15614 15615 + 15615 15610 15609 + 5195 5200 15612 + 15612 5200 15616 + 15616 15617 15612 + 15613 15612 15617 + 15617 15618 15613 + 15614 15613 15618 + 15618 15619 15614 + 15615 15614 15619 + 5205 15616 5200 + 15620 15616 5205 + 15616 15620 15621 + 15621 15617 15616 + 15617 15621 15622 + 15622 15618 15617 + 15618 15622 15623 + 15623 15619 15618 + 5205 5210 15620 + 15620 5210 15624 + 15624 15625 15620 + 15621 15620 15625 + 15625 15626 15621 + 15622 15621 15626 + 15626 15627 15622 + 15623 15622 15627 + 5215 15624 5210 + 15628 15624 5215 + 15624 15628 15629 + 15629 15625 15624 + 15625 15629 15630 + 15630 15626 15625 + 15626 15630 15631 + 15631 15627 15626 + 5215 15632 15628 + 15628 15632 15633 + 15633 15634 15628 + 15629 15628 15634 + 15634 15635 15629 + 15630 15629 15635 + 15635 15636 15630 + 15631 15630 15636 + 15632 5215 5214 + 5214 15637 15632 + 15632 15637 15638 + 15638 15633 15632 + 15639 15633 15638 + 15633 15639 15640 + 15640 15634 15633 + 15634 15640 15641 + 15641 15635 15634 + 15637 5214 15642 + 15642 15643 15637 + 15638 15637 15643 + 15643 15644 15638 + 15645 15638 15644 + 15638 15645 15639 + 5213 15642 5214 + 5224 15642 5213 + 15643 15642 5224 + 5224 15646 15643 + 15643 15646 15647 + 15647 15644 15643 + 15648 15644 15647 + 15644 15648 15645 + 15649 15645 15648 + 15639 15645 15649 + 15646 5224 15650 + 15650 15651 15646 + 15647 15646 15651 + 15651 15652 15647 + 15653 15647 15652 + 15647 15653 15648 + 5223 15650 5224 + 15654 15650 5223 + 15651 15650 15654 + 15654 15655 15651 + 15651 15655 15656 + 15656 15652 15651 + 15657 15652 15656 + 15652 15657 15653 + 5223 5229 15654 + 15654 5229 15658 + 15658 15659 15654 + 15655 15654 15659 + 15659 15660 15655 + 15656 15655 15660 + 15660 15661 15656 + 15662 15656 15661 + 15656 15662 15657 + 5228 15658 5229 + 15658 5228 5234 + 5234 15663 15658 + 15658 15663 15664 + 15664 15659 15658 + 15660 15659 15664 + 15664 15665 15660 + 15660 15665 15666 + 15666 15661 15660 + 15667 15661 15666 + 15661 15667 15662 + 15663 5234 15668 + 15668 15669 15663 + 15664 15663 15669 + 15669 15670 15664 + 15665 15664 15670 + 15670 15671 15665 + 15666 15665 15671 + 15672 15668 5234 + 15673 15668 15672 + 15669 15668 15673 + 15673 15674 15669 + 15669 15674 15675 + 15675 15670 15669 + 15671 15670 15675 + 5234 5233 15672 + 5239 15672 5233 + 15672 5239 15676 + 15676 15677 15672 + 15672 15677 15673 + 15673 15677 15678 + 15678 15679 15673 + 15674 15673 15679 + 15679 15680 15674 + 15675 15674 15680 + 15676 5239 5238 + 5238 15681 15676 + 15676 15681 15682 + 15682 15683 15676 + 15677 15676 15683 + 15683 15678 15677 + 5243 15681 5238 + 15681 5243 15684 + 15684 15682 15681 + 15682 15684 15685 + 15685 15686 15682 + 15682 15686 15687 + 15687 15683 15682 + 15678 15683 15687 + 5248 15684 5243 + 15685 15684 5248 + 5248 15688 15685 + 15685 15688 15689 + 15689 15690 15685 + 15686 15685 15690 + 15690 15691 15686 + 15687 15686 15691 + 15688 5248 5247 + 5247 15692 15688 + 15688 15692 15693 + 15693 15689 15688 + 15694 15689 15693 + 15689 15694 15695 + 15695 15690 15689 + 15691 15690 15695 + 15692 5247 15696 + 15696 15697 15692 + 15692 15697 15698 + 15698 15693 15692 + 15699 15693 15698 + 15693 15699 15694 + 5252 15696 5247 + 15700 15696 5252 + 15697 15696 15700 + 15700 15701 15697 + 15697 15701 15702 + 15702 15698 15697 + 15703 15698 15702 + 15698 15703 15699 + 5252 5251 15700 + 15704 15700 5251 + 15701 15700 15704 + 15704 15705 15701 + 15701 15705 15706 + 15706 15702 15701 + 15707 15702 15706 + 15702 15707 15703 + 5251 5260 15704 + 15708 15704 5260 + 15704 15708 15709 + 15709 15705 15704 + 15705 15709 15710 + 15710 15706 15705 + 15706 15710 15711 + 15711 15712 15706 + 15706 15712 15707 + 5260 5259 15708 + 15708 5259 15713 + 15713 15714 15708 + 15709 15708 15714 + 15714 15715 15709 + 15710 15709 15715 + 15715 15716 15710 + 15711 15710 15716 + 5264 15713 5259 + 15717 15713 5264 + 15713 15717 15718 + 15718 15714 15713 + 15714 15718 15719 + 15719 15715 15714 + 15715 15719 15720 + 15720 15716 15715 + 5264 5268 15717 + 15717 5268 15721 + 15721 15722 15717 + 15722 15718 15717 + 15719 15718 15722 + 15722 15723 15719 + 15719 15723 15724 + 15720 15719 15724 + 5272 15721 5268 + 15723 15721 5272 + 15722 15721 15723 + 5272 15724 15723 + 5276 15724 5272 + 15724 5276 15725 + 15725 15726 15724 + 15724 15726 15720 + 15727 15720 15726 + 15716 15720 15727 + 15727 15728 15716 + 15716 15728 15711 + 15729 15711 15728 + 15712 15711 15729 + 15725 5276 5275 + 15730 15725 5275 + 15731 15725 15730 + 15731 15726 15725 + 15726 15731 15727 + 15731 15732 15727 + 15728 15727 15732 + 15732 15733 15728 + 15728 15733 15729 + 5275 5285 15730 + 15734 15730 5285 + 15730 15734 15733 + 15733 15732 15730 + 15730 15732 15731 + 5285 5284 15734 + 15734 5284 15735 + 15735 15736 15734 + 15733 15734 15736 + 15736 15729 15733 + 15729 15736 15737 + 15737 15738 15729 + 15729 15738 15712 + 15707 15712 15738 + 15739 15735 5284 + 15735 15739 15740 + 15740 15741 15735 + 15735 15741 15737 + 15737 15736 15735 + 5284 5283 15739 + 5290 15739 5283 + 15740 15739 5290 + 5290 5320 15740 + 15742 15740 5320 + 15741 15740 15742 + 15742 15743 15741 + 15741 15743 15744 + 15744 15737 15741 + 15738 15737 15744 + 15744 15745 15738 + 15738 15745 15707 + 15703 15707 15745 + 5320 5325 15742 + 15746 15742 5325 + 15743 15742 15746 + 15746 15747 15743 + 15743 15747 15748 + 15748 15744 15743 + 15745 15744 15748 + 15748 15749 15745 + 15745 15749 15703 + 15699 15703 15749 + 5325 5324 15746 + 15750 15746 5324 + 15747 15746 15750 + 15750 15751 15747 + 15747 15751 15752 + 15752 15748 15747 + 15749 15748 15752 + 15752 15753 15749 + 15749 15753 15699 + 15694 15699 15753 + 5324 5330 15750 + 15754 15750 5330 + 15750 15754 15755 + 15755 15751 15750 + 15751 15755 15756 + 15756 15752 15751 + 15752 15756 15757 + 15757 15753 15752 + 15753 15757 15694 + 15695 15694 15757 + 5330 5329 15754 + 15758 15754 5329 + 15755 15754 15758 + 15758 15759 15755 + 15755 15759 15760 + 15760 15756 15755 + 15757 15756 15760 + 15760 15761 15757 + 15757 15761 15695 + 15762 15695 15761 + 15695 15762 15691 + 5329 15763 15758 + 15763 15764 15758 + 15765 15758 15764 + 15758 15765 15766 + 15766 15759 15758 + 15759 15766 15767 + 15767 15760 15759 + 5334 15763 5329 + 15768 15763 5334 + 15763 15768 15769 + 15769 15764 15763 + 15770 15764 15769 + 15764 15770 15765 + 15771 15765 15770 + 15766 15765 15771 + 5334 5339 15768 + 15768 5339 15772 + 15772 15773 15768 + 15768 15773 15774 + 15774 15769 15768 + 15775 15769 15774 + 15769 15775 15770 + 5344 15772 5339 + 6876 15772 5344 + 15773 15772 6876 + 6876 15776 15773 + 15773 15776 15777 + 15777 15774 15773 + 15778 15774 15777 + 15774 15778 15775 + 15775 15778 15779 + 15780 15775 15779 + 15770 15775 15780 + 15776 6876 6875 + 6875 15781 15776 + 15776 15781 15782 + 15782 15777 15776 + 15778 15777 15782 + 15782 15779 15778 + 15783 15779 15782 + 15779 15783 15784 + 15784 15785 15779 + 15779 15785 15780 + 6880 15781 6875 + 15781 6880 6889 + 6889 15782 15781 + 15782 6889 15783 + 15783 6889 6888 + 6888 6894 15783 + 15783 6894 15786 + 15786 15784 15783 + 15787 15784 15786 + 15784 15787 15788 + 15788 15785 15784 + 15785 15788 15789 + 15789 15780 15785 + 15790 15786 6894 + 15791 15786 15790 + 15786 15791 15787 + 15792 15787 15791 + 15788 15787 15792 + 15792 15793 15788 + 15788 15793 15794 + 15794 15789 15788 + 6894 6893 15790 + 15790 6893 6899 + 6899 6917 15790 + 15795 15790 6917 + 15790 15795 15791 + 15791 15795 15796 + 15796 15797 15791 + 15791 15797 15792 + 15798 15792 15797 + 15792 15798 15799 + 15799 15793 15792 + 6917 6916 15795 + 15796 15795 6916 + 6916 15800 15796 + 15801 15796 15800 + 15796 15801 15802 + 15802 15797 15796 + 15797 15802 15798 + 15803 15798 15802 + 15799 15798 15803 + 6915 15800 6916 + 6926 15800 6915 + 15800 6926 15801 + 15804 15801 6926 + 15802 15801 15804 + 15804 15805 15802 + 15802 15805 15803 + 15806 15803 15805 + 15803 15806 15807 + 15807 15808 15803 + 15803 15808 15799 + 6926 15809 15804 + 15810 15804 15809 + 15804 15810 15811 + 15811 15805 15804 + 15805 15811 15806 + 15812 15806 15811 + 15807 15806 15812 + 6925 15809 6926 + 15813 15809 6925 + 15809 15813 15810 + 15814 15810 15813 + 15811 15810 15814 + 15814 15815 15811 + 15811 15815 15812 + 6925 15816 15813 + 15813 15816 15817 + 15817 15818 15813 + 15813 15818 15814 + 15819 15814 15818 + 15814 15819 15820 + 15820 15815 15814 + 15816 6925 6924 + 6924 6931 15816 + 15817 15816 6931 + 6931 15821 15817 + 15822 15817 15821 + 15817 15822 15823 + 15823 15818 15817 + 15818 15823 15819 + 15819 15823 15824 + 15824 15825 15819 + 15820 15819 15825 + 6935 15821 6931 + 15826 15821 6935 + 15821 15826 15822 + 15822 15826 15827 + 15827 15828 15822 + 15823 15822 15828 + 15828 15824 15823 + 15824 15828 15829 + 15824 15829 15830 + 15830 15825 15824 + 6935 15831 15826 + 15826 15831 15832 + 15832 15827 15826 + 15827 15832 15833 + 15833 15834 15827 + 15827 15834 15829 + 15829 15828 15827 + 15831 6935 6938 + 6938 6943 15831 + 15831 6943 6952 + 6952 15832 15831 + 15833 15832 6952 + 6952 15835 15833 + 15836 15833 15835 + 15834 15833 15836 + 15836 15837 15834 + 15834 15837 15838 + 15829 15834 15838 + 15838 15830 15829 + 6951 15835 6952 + 15835 6951 15839 + 15839 15840 15835 + 15835 15840 15836 + 15841 15836 15840 + 15836 15841 15837 + 15837 15841 15842 + 15842 15838 15837 + 15839 6951 6957 + 6957 15843 15839 + 15844 15839 15843 + 15840 15839 15844 + 15844 15845 15840 + 15840 15845 15841 + 15841 15845 15846 + 15846 15842 15841 + 6962 15843 6957 + 6962 15847 15843 + 15843 15847 15844 + 15848 15844 15847 + 15845 15844 15848 + 15848 15849 15845 + 15845 15849 15846 + 15847 6962 15850 + 15850 15851 15847 + 15847 15851 15848 + 15851 15852 15848 + 15853 15848 15852 + 15849 15848 15853 + 6961 15850 6962 + 6967 15850 6961 + 15850 6967 15854 + 15854 15851 15850 + 15851 15854 15855 + 15855 15852 15851 + 15852 15855 15856 + 15856 15857 15852 + 15852 15857 15853 + 15854 6967 6972 + 6972 15858 15854 + 15855 15854 15858 + 15858 15859 15855 + 15856 15855 15859 + 15860 15858 6972 + 15858 15860 15861 + 15861 15859 15858 + 15861 15862 15859 + 15859 15862 15856 + 6972 6971 15860 + 15860 6971 6977 + 6977 15863 15860 + 15861 15860 15863 + 15863 15864 15861 + 15862 15861 15864 + 15864 15865 15862 + 15856 15862 15865 + 15865 15866 15856 + 15866 15867 15856 + 15857 15856 15867 + 15868 15863 6977 + 15863 15868 15869 + 15869 15864 15863 + 15864 15869 15870 + 15870 15865 15864 + 15865 15870 15871 + 15871 15866 15865 + 6977 6976 15868 + 15868 6976 6989 + 6989 15872 15868 + 15869 15868 15872 + 15872 15873 15869 + 15870 15869 15873 + 15873 15874 15870 + 15870 15874 15875 + 15875 15871 15870 + 15876 15871 15875 + 15866 15871 15876 + 15877 15872 6989 + 15872 15877 15878 + 15878 15873 15872 + 15873 15878 15879 + 15879 15874 15873 + 15874 15879 15880 + 15880 15875 15874 + 6989 6988 15877 + 15877 6988 15881 + 15881 15882 15877 + 15878 15877 15882 + 15882 15883 15878 + 15879 15878 15883 + 15883 15884 15879 + 15879 15884 15885 + 15885 15880 15879 + 6997 15881 6988 + 7006 15881 6997 + 15881 7006 15886 + 15886 15882 15881 + 15882 15886 15887 + 15887 15883 15882 + 15883 15887 15888 + 15888 15884 15883 + 15884 15888 15889 + 15889 15885 15884 + 15886 7006 15890 + 15890 15891 15886 + 15887 15886 15891 + 15891 15892 15887 + 15888 15887 15892 + 15892 15893 15888 + 15888 15893 15894 + 15894 15889 15888 + 7015 15890 7006 + 15895 15890 7015 + 15890 15895 15896 + 15896 15891 15890 + 15891 15896 15897 + 15897 15892 15891 + 15893 15892 15897 + 15897 15898 15893 + 15893 15898 15899 + 15899 15894 15893 + 7015 7020 15895 + 15895 7020 15900 + 15900 15901 15895 + 15896 15895 15901 + 15901 15902 15896 + 15896 15902 15903 + 15903 15897 15896 + 15898 15897 15903 + 15903 15904 15898 + 15899 15898 15904 + 7025 15900 7020 + 15905 15900 7025 + 15900 15905 15906 + 15906 15901 15900 + 15901 15906 15907 + 15907 15902 15901 + 15902 15907 15908 + 15908 15903 15902 + 15903 15908 15909 + 15909 15904 15903 + 7025 15910 15905 + 15905 15910 15911 + 15911 15912 15905 + 15906 15905 15912 + 15912 15913 15906 + 15907 15906 15913 + 15913 15914 15907 + 15908 15907 15914 + 15910 7025 7024 + 7024 15915 15910 + 15910 15915 15916 + 15916 15911 15910 + 15917 15911 15916 + 15911 15917 15918 + 15918 15912 15911 + 15912 15918 15919 + 15919 15913 15912 + 7029 15915 7024 + 15915 7029 15920 + 15920 15916 15915 + 15916 15920 15921 + 15921 15922 15916 + 15916 15922 15917 + 15917 15922 15923 + 15923 15924 15917 + 15918 15917 15924 + 7034 15920 7029 + 15921 15920 7034 + 7034 15925 15921 + 15921 15925 15926 + 15926 15927 15921 + 15922 15921 15927 + 15927 15923 15922 + 15928 15925 7034 + 15925 15928 15929 + 15929 15926 15925 + 15926 15929 15930 + 15930 15931 15926 + 15926 15931 15932 + 15932 15927 15926 + 15923 15927 15932 + 7034 7033 15928 + 15928 7033 7032 + 7032 15933 15928 + 15928 15933 15934 + 15934 15929 15928 + 15930 15929 15934 + 15934 15935 15930 + 15930 15935 15936 + 15936 15937 15930 + 15931 15930 15937 + 7041 15933 7032 + 15933 7041 15938 + 15938 15934 15933 + 15934 15938 15939 + 15939 15935 15934 + 15935 15939 15940 + 15940 15936 15935 + 7045 15938 7041 + 15939 15938 7045 + 7045 15941 15939 + 15939 15941 15942 + 15942 15940 15939 + 15943 15940 15942 + 15936 15940 15943 + 15943 15944 15936 + 15936 15944 15945 + 15945 15937 15936 + 7049 15941 7045 + 15941 7049 15946 + 15946 15942 15941 + 15942 15946 15947 + 15947 15948 15942 + 15942 15948 15943 + 15943 15948 15949 + 15949 15950 15943 + 15944 15943 15950 + 7054 15946 7049 + 15947 15946 7054 + 7054 15951 15947 + 15947 15951 15952 + 15952 15953 15947 + 15948 15947 15953 + 15953 15949 15948 + 7058 15951 7054 + 15951 7058 15954 + 15954 15952 15951 + 15952 15954 15955 + 15955 15956 15952 + 15952 15956 15957 + 15957 15953 15952 + 15949 15953 15957 + 7062 15954 7058 + 15955 15954 7062 + 7062 7066 15955 + 15955 7066 15958 + 15958 15959 15955 + 15956 15955 15959 + 15959 15960 15956 + 15957 15956 15960 + 15960 15961 15957 + 15962 15957 15961 + 15957 15962 15949 + 7070 15958 7066 + 15963 15958 7070 + 15958 15963 15964 + 15964 15959 15958 + 15960 15959 15964 + 15964 15965 15960 + 15960 15965 15966 + 15966 15961 15960 + 15967 15961 15966 + 15961 15967 15962 + 7070 7074 15963 + 15963 7074 15968 + 15968 15969 15963 + 15964 15963 15969 + 15969 15970 15964 + 15965 15964 15970 + 15970 15971 15965 + 15966 15965 15971 + 7079 15968 7074 + 15972 15968 7079 + 15968 15972 15973 + 15973 15969 15968 + 15969 15973 15974 + 15974 15970 15969 + 15971 15970 15974 + 7079 15975 15972 + 15972 15975 15976 + 15976 15977 15972 + 15973 15972 15977 + 15977 15978 15973 + 15974 15973 15978 + 15975 7079 7078 + 7078 7088 15975 + 15975 7088 15979 + 15979 15976 15975 + 15976 15979 15980 + 15980 15981 15976 + 15976 15981 15982 + 15982 15977 15976 + 15977 15982 15983 + 15983 15978 15977 + 15984 15979 7088 + 15980 15979 15984 + 15984 15985 15980 + 15986 15980 15985 + 15981 15980 15986 + 15986 15987 15981 + 15981 15987 15988 + 15988 15982 15981 + 15983 15982 15988 + 7088 7087 15984 + 15989 15984 7087 + 15984 15989 15990 + 15990 15985 15984 + 15985 15990 15991 + 15991 15992 15985 + 15985 15992 15986 + 7087 7092 15989 + 15993 15989 7092 + 15990 15989 15993 + 15993 15994 15990 + 15991 15990 15994 + 15994 15995 15991 + 15996 15991 15995 + 15991 15996 15997 + 15997 15992 15991 + 7092 7096 15993 + 15998 15993 7096 + 15993 15998 15999 + 15999 15994 15993 + 15994 15999 16000 + 16000 15995 15994 + 16001 15995 16000 + 15995 16001 15996 + 7096 7100 15998 + 16002 15998 7100 + 15999 15998 16002 + 16002 16003 15999 + 15999 16003 16004 + 16000 15999 16004 + 16004 16005 16000 + 16006 16000 16005 + 16000 16006 16001 + 7100 7104 16002 + 16007 16002 7104 + 16002 16007 16008 + 16008 16003 16002 + 16003 16008 16009 + 16009 16004 16003 + 16010 16004 16009 + 16004 16010 16011 + 16011 16005 16004 + 7104 7108 16007 + 16012 16007 7108 + 16008 16007 16012 + 16012 16013 16008 + 16009 16008 16013 + 7108 7112 16012 + 16014 16012 7112 + 16012 16014 16013 + 16013 16014 7171 + 7171 16015 16013 + 16013 16015 16009 + 7112 7116 16014 + 7171 16014 7116 + 7170 16015 7171 + 16015 7170 7176 + 7176 16016 16015 + 16015 16016 16009 + 16016 16017 16009 + 16018 16009 16017 + 16009 16018 16010 + 16016 7176 16019 + 16019 16020 16016 + 16016 16020 16021 + 16021 16017 16016 + 16021 16022 16017 + 16017 16022 16018 + 16019 7176 7175 + 7175 16023 16019 + 16019 16023 16024 + 16024 16025 16019 + 16020 16019 16025 + 16025 16026 16020 + 16021 16020 16026 + 16026 16027 16021 + 16022 16021 16027 + 7174 16023 7175 + 16023 7174 16028 + 16028 16024 16023 + 16029 16024 16028 + 16024 16029 16030 + 16030 16025 16024 + 16025 16030 16031 + 16031 16026 16025 + 16026 16031 16032 + 16032 16027 16026 + 7180 16028 7174 + 7189 16028 7180 + 16028 7189 16029 + 16029 7189 16033 + 16033 16034 16029 + 16030 16029 16034 + 16034 16035 16030 + 16031 16030 16035 + 16035 16036 16031 + 16032 16031 16036 + 7188 16033 7189 + 16037 16033 7188 + 16033 16037 16038 + 16038 16034 16033 + 16034 16038 16039 + 16039 16035 16034 + 16035 16039 16040 + 16040 16036 16035 + 7188 7193 16037 + 16037 7193 16041 + 16041 16042 16037 + 16038 16037 16042 + 16042 16043 16038 + 16039 16038 16043 + 16043 16044 16039 + 16040 16039 16044 + 7197 16041 7193 + 16045 16041 7197 + 16041 16045 16046 + 16046 16042 16041 + 16042 16046 16047 + 16047 16043 16042 + 16043 16047 16048 + 16048 16044 16043 + 7197 7201 16045 + 16045 7201 16049 + 16049 16050 16045 + 16046 16045 16050 + 16050 16051 16046 + 16047 16046 16051 + 16051 16052 16047 + 16048 16047 16052 + 7205 16049 7201 + 16053 16049 7205 + 16049 16053 16054 + 16054 16050 16049 + 16050 16054 16055 + 16055 16051 16050 + 16051 16055 16056 + 16056 16052 16051 + 7205 7210 16053 + 16053 7210 16057 + 16057 16058 16053 + 16054 16053 16058 + 16058 16059 16054 + 16055 16054 16059 + 16059 16060 16055 + 16056 16055 16060 + 7214 16057 7210 + 16057 7214 7219 + 7219 16061 16057 + 16057 16061 16062 + 16062 16058 16057 + 16058 16062 16063 + 16063 16059 16058 + 16059 16063 16064 + 16064 16060 16059 + 16061 7219 16065 + 16065 16066 16061 + 16062 16061 16066 + 16066 16067 16062 + 16063 16062 16067 + 16067 16068 16063 + 16064 16063 16068 + 16069 16065 7219 + 16070 16065 16069 + 16066 16065 16070 + 16067 16066 16070 + 16071 16067 16070 + 16067 16071 16068 + 16069 7219 7224 + 7224 16072 16069 + 16073 16069 16072 + 16074 16069 16073 + 16069 16074 16070 + 16071 16070 16074 + 16074 16075 16071 + 16076 16071 16075 + 16071 16076 16068 + 16077 16072 7224 + 16078 16072 16077 + 16072 16078 16073 + 16073 16078 16079 + 16079 16080 16073 + 16074 16073 16080 + 16080 16075 16074 + 7224 16081 16077 + 16077 16081 16082 + 16082 16083 16077 + 16084 16077 16083 + 16077 16084 16078 + 16078 16084 16085 + 16085 16079 16078 + 7234 16081 7224 + 16081 7234 16086 + 16086 16082 16081 + 16087 16082 16086 + 16082 16087 16088 + 16088 16083 16082 + 16083 16088 16089 + 16089 16090 16083 + 16083 16090 16084 + 7238 16086 7234 + 16091 16086 7238 + 16086 16091 16087 + 16087 16091 16092 + 16092 16093 16087 + 16087 16093 16094 + 16094 16088 16087 + 16089 16088 16094 + 7238 7243 16091 + 16092 16091 7243 + 7243 16095 16092 + 16096 16092 16095 + 16092 16096 16097 + 16097 16093 16092 + 16093 16097 16098 + 16098 16094 16093 + 13817 16095 7243 + 13826 16095 13817 + 16095 13826 16096 + 16099 16096 13826 + 16097 16096 16099 + 16099 16100 16097 + 16097 16100 16101 + 16101 16098 16097 + 16102 16098 16101 + 16094 16098 16102 + 16102 16103 16094 + 16094 16103 16089 + 13826 13825 16099 + 13831 16099 13825 + 16099 13831 16104 + 16104 16100 16099 + 16100 16104 16105 + 16105 16101 16100 + 16101 16105 16106 + 16106 16107 16101 + 16101 16107 16102 + 16104 13831 13830 + 13830 16108 16104 + 16104 16108 16109 + 16109 16105 16104 + 16106 16105 16109 + 16109 16110 16106 + 16106 16110 16111 + 16111 16112 16106 + 16107 16106 16112 + 13840 16108 13830 + 16108 13840 16113 + 16113 16109 16108 + 16109 16113 16114 + 16114 16110 16109 + 16110 16114 16115 + 16115 16111 16110 + 16116 16113 13840 + 16114 16113 16116 + 16116 16117 16114 + 16114 16117 16118 + 16118 16115 16114 + 16119 16115 16118 + 16111 16115 16119 + 13840 13845 16116 + 16120 16116 13845 + 16120 16117 16116 + 16117 16120 16121 + 16121 16118 16117 + 16122 16118 16121 + 16118 16122 16119 + 13845 16123 16120 + 16120 16123 16124 + 16121 16120 16124 + 16124 16125 16121 + 16126 16121 16125 + 16121 16126 16122 + 13844 16123 13845 + 16123 13844 13850 + 13850 16124 16123 + 16124 13850 16127 + 16127 16128 16124 + 16124 16128 16129 + 16129 16125 16124 + 16130 16125 16129 + 16125 16130 16126 + 16131 16126 16130 + 16122 16126 16131 + 16127 13850 13849 + 13849 16132 16127 + 16127 16132 16133 + 16133 16134 16127 + 16128 16127 16134 + 16134 16135 16128 + 16128 16135 16136 + 16136 16129 16128 + 13855 16132 13849 + 16132 13855 16137 + 16137 16133 16132 + 16138 16133 16137 + 16133 16138 16139 + 16139 16134 16133 + 16134 16139 16140 + 16140 16135 16134 + 16135 16140 16141 + 16141 16136 16135 + 16137 13855 13860 + 13860 16142 16137 + 16143 16137 16142 + 16137 16143 16138 + 16138 16143 16144 + 16144 16145 16138 + 16138 16145 16146 + 16146 16139 16138 + 16140 16139 16146 + 13859 16142 13860 + 16147 16142 13859 + 16142 16147 16143 + 16144 16143 16147 + 16147 16148 16144 + 16149 16144 16148 + 16144 16149 16150 + 16150 16145 16144 + 16145 16150 16151 + 16151 16146 16145 + 13859 16152 16147 + 16147 16152 16153 + 16153 16148 16147 + 16154 16148 16153 + 16148 16154 16149 + 16155 16149 16154 + 16150 16149 16155 + 16152 13859 13858 + 13858 13865 16152 + 16153 16152 13865 + 13865 16156 16153 + 16157 16153 16156 + 16153 16157 16154 + 16154 16157 16158 + 16158 16159 16154 + 16154 16159 16155 + 16160 16156 13865 + 16161 16156 16160 + 16156 16161 16157 + 16158 16157 16161 + 16161 16162 16158 + 16163 16158 16162 + 16158 16163 16164 + 16164 16159 16158 + 13865 13864 16160 + 16160 13864 13870 + 13870 16165 16160 + 16166 16160 16165 + 16160 16166 16161 + 16161 16166 16167 + 16167 16162 16161 + 16168 16162 16167 + 16162 16168 16163 + 16169 16163 16168 + 16164 16163 16169 + 13874 16165 13870 + 16170 16165 13874 + 16165 16170 16166 + 16167 16166 16170 + 16170 16171 16167 + 16172 16167 16171 + 16167 16172 16168 + 16168 16172 16173 + 16173 16174 16168 + 16168 16174 16169 + 13874 16175 16170 + 16170 16175 14011 + 14011 16171 16170 + 14015 16171 14011 + 16171 14015 16172 + 16173 16172 14015 + 16175 13874 13879 + 13879 13884 16175 + 14011 16175 13884 + 14015 16176 16173 + 14014 16176 14015 + 14020 16176 14014 + 16176 14020 16177 + 16177 16173 16176 + 16173 16177 16178 + 16178 16174 16173 + 16174 16178 16179 + 16179 16169 16174 + 16169 16179 16180 + 16180 16181 16169 + 16169 16181 16164 + 16177 14020 16182 + 16182 16183 16177 + 16178 16177 16183 + 16183 16184 16178 + 16179 16178 16184 + 16184 16185 16179 + 16180 16179 16185 + 14019 16182 14020 + 14019 14025 16182 + 16182 14025 16186 + 16186 16183 16182 + 16183 16186 16187 + 16187 16184 16183 + 16184 16187 16188 + 16188 16185 16184 + 16185 16188 16189 + 16185 16189 16180 + 16190 16180 16189 + 16181 16180 16190 + 16186 14025 14034 + 14034 16191 16186 + 16187 16186 16191 + 16191 16192 16187 + 16187 16192 16193 + 16188 16187 16193 + 16193 16194 16188 + 16189 16188 16194 + 16194 16195 16189 + 16189 16195 16190 + 16196 16191 14034 + 16196 16192 16191 + 16192 16196 16197 + 16197 16193 16192 + 16198 16193 16197 + 16193 16198 16199 + 16199 16194 16193 + 16195 16194 16199 + 14034 14039 16196 + 16196 14039 14038 + 16197 16196 14038 + 14038 16200 16197 + 16201 16197 16200 + 16197 16201 16198 + 16198 16201 16202 + 16202 16203 16198 + 16199 16198 16203 + 14044 16200 14038 + 16204 16200 14044 + 16200 16204 16201 + 16202 16201 16204 + 16204 16205 16202 + 16206 16202 16205 + 16202 16206 16207 + 16207 16203 16202 + 16204 14044 16208 + 16208 16205 16204 + 16205 16208 14053 + 14053 16209 16205 + 16205 16209 16206 + 16210 16206 16209 + 16207 16206 16210 + 14043 16208 14044 + 14053 16208 14043 + 16209 14053 14052 + 14052 16211 16209 + 16209 16211 16210 + 16212 16210 16211 + 16212 16213 16210 + 16210 16213 16207 + 16207 16213 16214 + 16215 16207 16214 + 16203 16207 16215 + 14057 16211 14052 + 16211 14057 16212 + 14066 16212 14057 + 16213 16212 14066 + 14066 16214 16213 + 14074 16214 14066 + 16214 14074 16216 + 16216 16217 16214 + 16214 16217 16215 + 16218 16215 16217 + 16215 16218 16219 + 16219 16220 16215 + 16215 16220 16203 + 16216 14074 14073 + 14073 16221 16216 + 16222 16216 16221 + 16216 16222 16223 + 16223 16217 16216 + 16217 16223 16218 + 16224 16218 16223 + 16219 16218 16224 + 14079 16221 14073 + 16225 16221 14079 + 16221 16225 16222 + 16226 16222 16225 + 16223 16222 16226 + 16226 16227 16223 + 16223 16227 16224 + 14079 16228 16225 + 16225 16228 16229 + 16229 16230 16225 + 16225 16230 16226 + 16231 16226 16230 + 16226 16231 16232 + 16232 16227 16226 + 16228 14079 16233 + 16233 16234 16228 + 16229 16228 16234 + 16234 16235 16229 + 16236 16229 16235 + 16229 16236 16237 + 16237 16230 16229 + 16230 16237 16231 + 14078 16233 14079 + 16238 16233 14078 + 16234 16233 16238 + 16238 16239 16234 + 16234 16239 16240 + 16240 16235 16234 + 16241 16235 16240 + 16235 16241 16236 + 16242 16236 16241 + 16237 16236 16242 + 14078 14077 16238 + 16238 14077 16243 + 16243 16244 16238 + 16239 16238 16244 + 16244 16245 16239 + 16240 16239 16245 + 16245 16246 16240 + 16247 16240 16246 + 16240 16247 16241 + 14083 16243 14077 + 16248 16243 14083 + 16243 16248 16249 + 16249 16244 16243 + 16245 16244 16249 + 16249 16250 16245 + 16245 16250 16251 + 16251 16246 16245 + 16252 16246 16251 + 16246 16252 16247 + 14083 16253 16248 + 16248 16253 16254 + 16254 16255 16248 + 16249 16248 16255 + 16255 16256 16249 + 16250 16249 16256 + 16256 16257 16250 + 16251 16250 16257 + 16253 14083 16258 + 16258 16259 16253 + 16254 16253 16259 + 14082 16258 14083 + 16260 16258 14082 + 16259 16258 16260 + 16259 16260 16261 + 16261 16262 16259 + 16259 16262 16254 + 14082 16263 16260 + 16261 16260 16263 + 16263 16264 16261 + 16265 16261 16264 + 16262 16261 16265 + 16262 16265 16266 + 16266 16267 16262 + 16262 16267 16254 + 14082 14086 16263 + 16263 14086 16268 + 16268 16264 16263 + 16264 16268 16269 + 16264 16269 16265 + 16265 16269 16270 + 16266 16265 16270 + 16271 16266 16270 + 16272 16266 16271 + 16272 16267 16266 + 14093 16268 14086 + 16269 16268 14093 + 14093 16273 16269 + 16269 16273 16270 + 14093 14092 16273 + 16273 14092 14091 + 14091 16270 16273 + 16270 14091 16274 + 16270 16274 16275 + 16275 16276 16270 + 16270 16276 16277 + 16277 16271 16270 + 16274 14091 14100 + 14100 16278 16274 + 16274 16278 16279 + 16279 16275 16274 + 16280 16275 16279 + 16275 16280 16276 + 16276 16280 16281 + 16281 16277 16276 + 16282 16278 14100 + 16278 16282 16283 + 16283 16279 16278 + 16279 16283 16284 + 16284 16285 16279 + 16279 16285 16280 + 16281 16280 16285 + 14100 14099 16282 + 16282 14099 16286 + 16286 16287 16282 + 16283 16282 16287 + 16287 16288 16283 + 16284 16283 16288 + 16288 16289 16284 + 16290 16284 16289 + 16285 16284 16290 + 16291 16286 14099 + 16292 16286 16291 + 16286 16292 16293 + 16293 16287 16286 + 16287 16293 16294 + 16294 16288 16287 + 16288 16294 16295 + 16295 16289 16288 + 14099 14098 16291 + 16296 16291 14098 + 16297 16291 16296 + 16291 16297 16292 + 16292 16297 16298 + 16298 16299 16292 + 16293 16292 16299 + 16299 16300 16293 + 16294 16293 16300 + 14098 14097 16296 + 16301 16296 14097 + 16302 16296 16301 + 16296 16302 16297 + 16297 16302 16303 + 16303 16298 16297 + 16304 16298 16303 + 16298 16304 16305 + 16305 16299 16298 + 14097 14104 16301 + 15105 16301 14104 + 16306 16301 15105 + 16301 16306 16302 + 16302 16306 16307 + 16307 16303 16302 + 16308 16303 16307 + 16303 16308 16304 + 16304 16308 16309 + 16309 16310 16304 + 16305 16304 16310 + 15105 15110 16306 + 16306 15110 16311 + 16311 16307 16306 + 16312 16307 16311 + 16307 16312 16308 + 16308 16312 16313 + 16313 16309 16308 + 16314 16309 16313 + 16309 16314 16315 + 16315 16310 16309 + 16316 16311 15110 + 16317 16311 16316 + 16311 16317 16312 + 16312 16317 16318 + 16318 16313 16312 + 16319 16313 16318 + 16313 16319 16314 + 15110 15109 16316 + 16320 16316 15109 + 16321 16316 16320 + 16316 16321 16317 + 16317 16321 16322 + 16322 16318 16317 + 16323 16318 16322 + 16318 16323 16319 + 15109 15115 16320 + 16324 16320 15115 + 16325 16320 16324 + 16320 16325 16321 + 16321 16325 16326 + 16326 16322 16321 + 16327 16322 16326 + 16322 16327 16323 + 15115 15120 16324 + 16328 16324 15120 + 16329 16324 16328 + 16324 16329 16325 + 16325 16329 16330 + 16330 16326 16325 + 16331 16326 16330 + 16326 16331 16327 + 15120 16332 16328 + 16333 16328 16332 + 16334 16328 16333 + 16328 16334 16329 + 16329 16334 16335 + 16335 16330 16329 + 16336 16330 16335 + 16330 16336 16331 + 15119 16332 15120 + 16332 15119 15125 + 15125 16337 16332 + 16332 16337 16333 + 16338 16333 16337 + 16339 16333 16338 + 16333 16339 16334 + 16334 16339 16340 + 16340 16335 16334 + 16341 16335 16340 + 16335 16341 16336 + 16337 15125 15130 + 15130 16342 16337 + 16337 16342 16338 + 16343 16338 16342 + 16344 16338 16343 + 16338 16344 16339 + 16339 16344 16345 + 16345 16340 16339 + 16346 16340 16345 + 16340 16346 16341 + 16342 15130 15140 + 15140 16347 16342 + 16342 16347 16343 + 16348 16343 16347 + 16349 16343 16348 + 16343 16349 16344 + 16344 16349 16350 + 16350 16345 16344 + 16351 16345 16350 + 16345 16351 16346 + 16347 15140 15144 + 15144 16352 16347 + 16347 16352 16348 + 16353 16348 16352 + 16354 16348 16353 + 16348 16354 16349 + 16349 16354 16355 + 16355 16350 16349 + 16356 16350 16355 + 16350 16356 16351 + 16352 15144 15148 + 15148 15157 16352 + 16352 15157 16353 + 15162 16353 15157 + 16357 16353 15162 + 16353 16357 16354 + 16354 16357 16358 + 16358 16355 16354 + 16359 16355 16358 + 16355 16359 16356 + 16356 16359 16360 + 16360 16361 16356 + 16351 16356 16361 + 15162 15167 16357 + 16357 15167 16362 + 16362 16358 16357 + 16363 16358 16362 + 16358 16363 16359 + 16359 16363 16364 + 16364 16360 16359 + 16365 16360 16364 + 16360 16365 16366 + 16366 16361 16360 + 15172 16362 15167 + 16367 16362 15172 + 16362 16367 16363 + 16363 16367 16368 + 16368 16364 16363 + 16369 16364 16368 + 16364 16369 16365 + 16365 16369 16370 + 16370 16371 16365 + 16366 16365 16371 + 15172 15177 16367 + 16367 15177 16372 + 16372 16368 16367 + 16373 16368 16372 + 16368 16373 16369 + 16369 16373 16374 + 16374 16370 16369 + 15182 16372 15177 + 16375 16372 15182 + 16372 16375 16373 + 16373 16375 16376 + 16376 16374 16373 + 16377 16374 16376 + 16370 16374 16377 + 16377 16378 16370 + 16370 16378 16379 + 16379 16371 16370 + 15182 16380 16375 + 16375 16380 16381 + 16381 16376 16375 + 16376 16381 16382 + 16382 16383 16376 + 16376 16383 16377 + 16380 15182 15181 + 15181 15191 16380 + 16380 15191 16384 + 16384 16381 16380 + 16382 16381 16384 + 16384 16385 16382 + 16382 16385 16386 + 16386 16387 16382 + 16383 16382 16387 + 16387 16388 16383 + 16377 16383 16388 + 15196 16384 15191 + 16384 15196 16389 + 16389 16385 16384 + 16385 16389 16390 + 16390 16386 16385 + 16386 16390 16391 + 16391 16392 16386 + 16386 16392 16393 + 16393 16387 16386 + 16387 16393 16388 + 16389 15196 16394 + 16394 16395 16389 + 16389 16395 16396 + 16396 16390 16389 + 16391 16390 16396 + 15195 16394 15196 + 15205 16394 15195 + 16394 15205 16397 + 16397 16395 16394 + 16395 16397 16398 + 16398 16396 16395 + 16398 16399 16396 + 16396 16399 16391 + 16391 16399 16400 + 16400 16401 16391 + 16392 16391 16401 + 16397 15205 16402 + 16402 16403 16397 + 16397 16403 16404 + 16404 16398 16397 + 16399 16398 16404 + 16404 16405 16399 + 16399 16405 16400 + 15204 16402 15205 + 16406 16402 15204 + 16403 16402 16406 + 16403 16406 16407 + 16407 16408 16403 + 16403 16408 16404 + 16409 16404 16408 + 16404 16409 16410 + 16410 16405 16404 + 15204 15209 16406 + 16406 15209 15214 + 15214 16407 16406 + 16411 16407 15214 + 16407 16411 16412 + 16412 16408 16407 + 16408 16412 16409 + 16413 16409 16412 + 16410 16409 16413 + 15214 15219 16411 + 16411 15219 15224 + 15224 16414 16411 + 16412 16411 16414 + 16414 16415 16412 + 16412 16415 16413 + 16416 16413 16415 + 16413 16416 16417 + 16417 16418 16413 + 16413 16418 16410 + 16419 16414 15224 + 16414 16419 16420 + 16420 16415 16414 + 16415 16420 16416 + 16421 16416 16420 + 16417 16416 16421 + 15224 15229 16419 + 16419 15229 15234 + 15234 16422 16419 + 16420 16419 16422 + 16422 16423 16420 + 16420 16423 16421 + 16424 16422 15234 + 16423 16422 16424 + 16423 16424 16425 + 16425 16426 16423 + 16423 16426 16421 + 15234 16427 16424 + 16424 16427 16428 + 16428 16425 16424 + 16429 16425 16428 + 16425 16429 16430 + 16430 16426 16425 + 16426 16430 16431 + 16431 16421 16426 + 15233 16427 15234 + 16427 15233 15239 + 15239 16428 16427 + 16428 15239 16432 + 16432 16433 16428 + 16428 16433 16429 + 16429 16433 16434 + 16434 16435 16429 + 16430 16429 16435 + 16432 15239 15238 + 15238 15244 16432 + 16436 16432 15244 + 16433 16432 16436 + 16436 16434 16433 + 16434 16436 16437 + 16437 16438 16434 + 16434 16438 16439 + 16439 16435 16434 + 15244 15249 16436 + 16437 16436 15249 + 15249 16440 16437 + 16441 16437 16440 + 16438 16437 16441 + 16441 16442 16438 + 16439 16438 16442 + 16442 16443 16439 + 16444 16439 16443 + 16435 16439 16444 + 15248 16440 15249 + 16440 15248 16445 + 16445 16446 16440 + 16440 16446 16441 + 16447 16441 16446 + 16442 16441 16447 + 16447 16448 16442 + 16442 16448 16449 + 16449 16443 16442 + 16445 15248 15253 + 15253 16450 16445 + 16451 16445 16450 + 16446 16445 16451 + 16451 16452 16446 + 16446 16452 16447 + 16453 16447 16452 + 16448 16447 16453 + 16453 16454 16448 + 16449 16448 16454 + 15257 16450 15253 + 16450 15257 16455 + 16455 16456 16450 + 16450 16456 16451 + 16457 16451 16456 + 16452 16451 16457 + 16457 16458 16452 + 16452 16458 16453 + 16459 16453 16458 + 16454 16453 16459 + 16455 15257 15261 + 15261 16460 16455 + 16461 16455 16460 + 16456 16455 16461 + 16461 16462 16456 + 16456 16462 16457 + 16463 16457 16462 + 16458 16457 16463 + 16463 16464 16458 + 16458 16464 16459 + 15266 16460 15261 + 16460 15266 16465 + 16465 16466 16460 + 16460 16466 16461 + 16467 16461 16466 + 16462 16461 16467 + 16467 16468 16462 + 16462 16468 16463 + 16469 16463 16468 + 16464 16463 16469 + 16465 15266 16470 + 16470 16471 16465 + 16472 16465 16471 + 16466 16465 16472 + 16472 16473 16466 + 16466 16473 16467 + 16474 16467 16473 + 16468 16467 16474 + 15265 16470 15266 + 15271 16470 15265 + 16470 15271 16475 + 16475 16471 16470 + 16471 16475 16476 + 16476 15611 16471 + 16471 15611 16472 + 15610 16472 15611 + 16473 16472 15610 + 15610 15615 16473 + 16473 15615 16474 + 16475 15271 16477 + 16477 16478 16475 + 16476 16475 16478 + 16478 15606 16476 + 15605 16476 15606 + 15611 16476 15605 + 15270 16477 15271 + 16477 15270 15269 + 15269 16479 16477 + 16477 16479 16480 + 16480 16478 16477 + 15606 16478 16480 + 16480 16481 15606 + 15606 16481 15601 + 15597 15601 16481 + 16479 15269 16482 + 16482 16483 16479 + 16480 16479 16483 + 16483 16484 16480 + 16481 16480 16484 + 16484 16485 16481 + 16481 16485 15597 + 16486 15597 16485 + 15597 16486 15591 + 15274 16482 15269 + 16487 16482 15274 + 16483 16482 16487 + 16487 16488 16483 + 16483 16488 16489 + 16489 16484 16483 + 16485 16484 16489 + 16489 16490 16485 + 16485 16490 16486 + 15274 16491 16487 + 16487 16491 16492 + 16492 16493 16487 + 16488 16487 16493 + 16493 16494 16488 + 16489 16488 16494 + 16494 16495 16489 + 16490 16489 16495 + 15277 16491 15274 + 16491 15277 16496 + 16496 16492 16491 + 16492 16496 16497 + 16497 16498 16492 + 16492 16498 16499 + 16499 16493 16492 + 16493 16499 16500 + 16500 16494 16493 + 15281 16496 15277 + 16497 16496 15281 + 15281 16501 16497 + 16502 16497 16501 + 16498 16497 16502 + 16502 16503 16498 + 16498 16503 16504 + 16504 16499 16498 + 16500 16499 16504 + 15285 16501 15281 + 16501 15285 15290 + 15290 16505 16501 + 16501 16505 16502 + 16506 16502 16505 + 16502 16506 16507 + 16507 16503 16502 + 16503 16507 16508 + 16508 16504 16503 + 16509 16505 15290 + 16505 16509 16506 + 16506 16509 16510 + 16511 16506 16510 + 16507 16506 16511 + 16511 16512 16507 + 16512 16508 16507 + 16513 16508 16512 + 16504 16508 16513 + 15290 16514 16509 + 16509 16514 16515 + 16515 16510 16509 + 16516 16510 16515 + 16510 16516 16517 + 16517 16518 16510 + 16510 16518 16511 + 16514 15290 15289 + 15289 16519 16514 + 16514 16519 16520 + 16520 16515 16514 + 16516 16515 16520 + 16520 16521 16516 + 16517 16516 16521 + 16519 15289 15288 + 15288 16522 16519 + 16519 16522 16523 + 16523 16524 16519 + 16519 16524 16520 + 16525 16520 16524 + 16520 16525 16526 + 16526 16521 16520 + 16522 15288 15294 + 15294 16527 16522 + 16522 16527 16528 + 16528 16523 16522 + 16529 16523 16528 + 16524 16523 16529 + 16529 16530 16524 + 16524 16530 16525 + 16527 15294 15293 + 15293 16531 16527 + 16527 16531 16532 + 16532 16528 16527 + 16528 16532 16533 + 16533 16534 16528 + 16528 16534 16529 + 16535 16529 16534 + 16530 16529 16535 + 16531 15293 15301 + 15301 16536 16531 + 16532 16531 16536 + 16536 16537 16532 + 16537 16538 16532 + 16533 16532 16538 + 16536 15301 15300 + 15300 16539 16536 + 16536 16539 16540 + 16540 16537 16536 + 16537 16540 16541 + 16541 16542 16537 + 16537 16542 16543 + 16543 16538 16537 + 16539 15300 15309 + 15309 16544 16539 + 16540 16539 16544 + 16544 16545 16540 + 16541 16540 16545 + 16545 16546 16541 + 16541 16546 16547 + 16547 16548 16541 + 16542 16541 16548 + 16544 15309 15308 + 15308 16549 16544 + 16544 16549 16550 + 16550 16545 16544 + 16545 16550 16551 + 16551 16546 16545 + 16546 16551 16552 + 16552 16547 16546 + 16549 15308 15317 + 15317 16553 16549 + 16550 16549 16553 + 16551 16550 16553 + 16553 16554 16551 + 16551 16554 16552 + 16555 16552 16554 + 16552 16555 16556 + 16556 16547 16552 + 16547 16556 16557 + 16557 16548 16547 + 16553 15317 15316 + 15316 16554 16553 + 16554 15316 16555 + 15321 16555 15316 + 16556 16555 15321 + 15321 15329 16556 + 16556 15329 16558 + 16558 16557 16556 + 16559 16557 16558 + 16548 16557 16559 + 16559 16560 16548 + 16548 16560 16542 + 16542 16560 16561 + 16561 16543 16542 + 15328 16558 15329 + 16558 15328 15334 + 15334 16562 16558 + 16558 16562 16559 + 16563 16559 16562 + 16560 16559 16563 + 16563 16561 16560 + 16561 16563 15551 + 15551 16564 16561 + 16561 16564 16565 + 16565 16543 16561 + 16543 16565 16538 + 16562 15334 15542 + 15542 15547 16562 + 16562 15547 16563 + 15551 16563 15547 + 16538 16565 16533 + 16533 16565 16564 + 16564 16566 16533 + 16534 16533 16566 + 16566 16567 16534 + 16534 16567 16535 + 16568 16566 16564 + 16566 16568 15560 + 15560 16567 16566 + 16567 15560 16569 + 16569 16535 16567 + 16535 16569 16570 + 16570 16571 16535 + 16535 16571 16530 + 16564 15551 16568 + 15550 16568 15551 + 15560 16568 15550 + 16525 16530 16571 + 16571 16572 16525 + 16526 16525 16572 + 16572 16573 16526 + 16526 16573 16574 + 16521 16526 16574 + 16575 16572 16571 + 16572 16575 15579 + 15579 16573 16572 + 16573 15579 16576 + 16576 16574 16573 + 16574 16576 16577 + 16577 16578 16574 + 16574 16578 16521 + 16571 16570 16575 + 15570 16575 16570 + 15579 16575 15570 + 16570 15565 15570 + 15559 15565 16570 + 16570 16569 15559 + 15559 16569 15560 + 15578 16576 15579 + 16577 16576 15578 + 15578 15583 16577 + 16577 15583 15588 + 15588 16579 16577 + 16578 16577 16579 + 16579 16580 16578 + 16521 16578 16580 + 16580 16517 16521 + 16581 16517 16580 + 16517 16581 16582 + 16582 16518 16517 + 16583 16579 15588 + 16580 16579 16583 + 16583 16584 16580 + 16580 16584 16581 + 16581 16584 16585 + 16585 16586 16581 + 16582 16581 16586 + 15588 15593 16583 + 16583 15593 16587 + 16587 16588 16583 + 16584 16583 16588 + 16588 16585 16584 + 16585 16588 16589 + 16589 16590 16585 + 16585 16590 16591 + 16591 16586 16585 + 15592 16587 15593 + 16587 15592 16592 + 16592 16593 16587 + 16587 16593 16589 + 16589 16588 16587 + 16592 15592 15591 + 15591 16486 16592 + 16594 16592 16486 + 16593 16592 16594 + 16594 16595 16593 + 16589 16593 16595 + 16595 16596 16589 + 16590 16589 16596 + 16596 16597 16590 + 16591 16590 16597 + 16598 16591 16597 + 16598 16586 16591 + 16586 16598 16582 + 16486 16490 16594 + 16495 16594 16490 + 16595 16594 16495 + 16495 16599 16595 + 16595 16599 16600 + 16600 16596 16595 + 16597 16596 16600 + 16600 16601 16597 + 16597 16601 16598 + 16582 16598 16601 + 16599 16495 16494 + 16494 16500 16599 + 16600 16599 16500 + 16500 16602 16600 + 16601 16600 16602 + 16602 16513 16601 + 16601 16513 16582 + 16513 16603 16582 + 16518 16582 16603 + 16603 16511 16518 + 16511 16603 16512 + 16504 16602 16500 + 16513 16602 16504 + 16512 16603 16513 + 15619 16474 15615 + 16604 16474 15619 + 16474 16604 16468 + 16468 16604 16469 + 16605 16469 16604 + 16606 16469 16605 + 16469 16606 16464 + 15619 15623 16604 + 16604 15623 16605 + 15627 16605 15623 + 16607 16605 15627 + 16605 16607 16606 + 16606 16607 16608 + 16608 16609 16606 + 16464 16606 16609 + 16609 16459 16464 + 16610 16459 16609 + 16459 16610 16454 + 15627 15631 16607 + 16607 15631 16611 + 16611 16608 16607 + 16612 16608 16611 + 16608 16612 16613 + 16613 16609 16608 + 16609 16613 16610 + 16614 16610 16613 + 16454 16610 16614 + 16614 16615 16454 + 16454 16615 16449 + 15636 16611 15631 + 16616 16611 15636 + 16611 16616 16612 + 16617 16612 16616 + 16613 16612 16617 + 16617 16618 16613 + 16613 16618 16614 + 16619 16614 16618 + 16615 16614 16619 + 15636 16620 16616 + 16616 16620 16621 + 16621 16622 16616 + 16616 16622 16617 + 16623 16617 16622 + 16618 16617 16623 + 16623 16624 16618 + 16618 16624 16619 + 16620 15636 15635 + 15635 15641 16620 + 16621 16620 15641 + 15641 16625 16621 + 16626 16621 16625 + 16622 16621 16626 + 16626 16627 16622 + 16622 16627 16623 + 16623 16627 16628 + 16628 16629 16623 + 16624 16623 16629 + 16630 16625 15641 + 16625 16630 16631 + 16631 16632 16625 + 16625 16632 16626 + 16626 16632 16633 + 16633 16634 16626 + 16627 16626 16634 + 16634 16628 16627 + 15641 15640 16630 + 16630 15640 15639 + 15639 16635 16630 + 16631 16630 16635 + 16635 16636 16631 + 16637 16631 16636 + 16632 16631 16637 + 16637 16633 16632 + 15649 16635 15639 + 16636 16635 15649 + 15649 16638 16636 + 16636 16638 16639 + 16639 16640 16636 + 16636 16640 16637 + 16641 16637 16640 + 16633 16637 16641 + 16638 15649 16642 + 16642 16643 16638 + 16639 16638 16643 + 16643 16644 16639 + 16645 16639 16644 + 16639 16645 16640 + 16640 16645 16641 + 15648 16642 15649 + 16646 16642 15648 + 16643 16642 16646 + 16646 16647 16643 + 16643 16647 16648 + 16648 16644 16643 + 16648 16649 16644 + 16644 16649 16645 + 16645 16649 16650 + 16650 16641 16645 + 15648 15653 16646 + 16651 16646 15653 + 16647 16646 16651 + 16651 16652 16647 + 16647 16652 16653 + 16653 16648 16647 + 16649 16648 16653 + 16653 16654 16649 + 16649 16654 16650 + 15653 15657 16651 + 16655 16651 15657 + 16651 16655 16656 + 16656 16652 16651 + 16652 16656 16657 + 16657 16653 16652 + 16653 16657 16658 + 16658 16654 16653 + 15657 15662 16655 + 16659 16655 15662 + 16656 16655 16659 + 16659 16660 16656 + 16657 16656 16660 + 16660 16661 16657 + 16658 16657 16661 + 15662 15667 16659 + 16662 16659 15667 + 16659 16662 16663 + 16663 16660 16659 + 16660 16663 16664 + 16664 16661 16660 + 16664 16665 16661 + 16661 16665 16658 + 15667 16666 16662 + 16667 16662 16666 + 16663 16662 16667 + 16667 16668 16663 + 16664 16663 16668 + 16668 16669 16664 + 16665 16664 16669 + 15666 16666 15667 + 16666 15666 16670 + 16670 16671 16666 + 16666 16671 16667 + 16672 16667 16671 + 16667 16672 16673 + 16673 16668 16667 + 16668 16673 16674 + 16674 16669 16668 + 15671 16670 15666 + 16675 16670 15671 + 16671 16670 16675 + 16675 16676 16671 + 16671 16676 16672 + 16677 16672 16676 + 16673 16672 16677 + 16677 16678 16673 + 16674 16673 16678 + 15671 16679 16675 + 16675 16679 16680 + 16680 16681 16675 + 16676 16675 16681 + 16681 16682 16676 + 16676 16682 16677 + 15675 16679 15671 + 16679 15675 16683 + 16683 16680 16679 + 16680 16683 16684 + 16684 16685 16680 + 16680 16685 16686 + 16686 16681 16680 + 16682 16681 16686 + 15680 16683 15675 + 16684 16683 15680 + 15680 16687 16684 + 16684 16687 16688 + 16688 16689 16684 + 16685 16684 16689 + 16689 16690 16685 + 16686 16685 16690 + 16691 16687 15680 + 16687 16691 16692 + 16692 16688 16687 + 16688 16692 16693 + 16693 16694 16688 + 16688 16694 16695 + 16695 16689 16688 + 16690 16689 16695 + 15680 15679 16691 + 16691 15679 15678 + 15678 16696 16691 + 16691 16696 16697 + 16697 16692 16691 + 16693 16692 16697 + 16697 16698 16693 + 16693 16698 16699 + 16699 16700 16693 + 16694 16693 16700 + 15687 16696 15678 + 16696 15687 16701 + 16701 16697 16696 + 16697 16701 16702 + 16702 16698 16697 + 16698 16702 16703 + 16703 16699 16698 + 15691 16701 15687 + 16702 16701 15691 + 15691 15762 16702 + 16702 15762 16704 + 16704 16703 16702 + 16705 16703 16704 + 16699 16703 16705 + 16705 16706 16699 + 16699 16706 16707 + 16707 16700 16699 + 16708 16700 16707 + 16700 16708 16694 + 16695 16694 16708 + 15761 16704 15762 + 16704 15761 15760 + 15760 15767 16704 + 16704 15767 16705 + 16705 15767 15766 + 15766 16709 16705 + 16706 16705 16709 + 16709 16710 16706 + 16707 16706 16710 + 16710 16711 16707 + 16712 16707 16711 + 16707 16712 16708 + 15771 16709 15766 + 16710 16709 15771 + 15771 16713 16710 + 16710 16713 16714 + 16714 16711 16710 + 16715 16711 16714 + 16711 16715 16712 + 16716 16712 16715 + 16708 16712 16716 + 16716 16717 16708 + 16708 16717 16695 + 16713 15771 16718 + 16718 16719 16713 + 16714 16713 16719 + 16719 16720 16714 + 16721 16714 16720 + 16714 16721 16715 + 15770 16718 15771 + 15780 16718 15770 + 16719 16718 15780 + 15780 15789 16719 + 16719 15789 15794 + 15794 16720 16719 + 16722 16720 15794 + 16720 16722 16721 + 16723 16721 16722 + 16715 16721 16723 + 16723 16724 16715 + 16715 16724 16716 + 16725 16716 16724 + 16716 16725 16726 + 16726 16717 16716 + 15794 16727 16722 + 16722 16727 16728 + 16728 16729 16722 + 16722 16729 16723 + 16730 16723 16729 + 16723 16730 16731 + 16731 16724 16723 + 16724 16731 16725 + 16727 15794 15793 + 15793 15799 16727 + 16728 16727 15799 + 15799 15808 16728 + 16732 16728 15808 + 16728 16732 16733 + 16733 16729 16728 + 16729 16733 16730 + 16734 16730 16733 + 16731 16730 16734 + 16734 16735 16731 + 16731 16735 16736 + 16736 16725 16731 + 16726 16725 16736 + 15808 15807 16732 + 16737 16732 15807 + 16733 16732 16737 + 16737 16738 16733 + 16733 16738 16734 + 16739 16734 16738 + 16734 16739 16740 + 16740 16735 16734 + 16735 16740 16741 + 16741 16736 16735 + 15807 16742 16737 + 16743 16737 16742 + 16737 16743 16744 + 16744 16738 16737 + 16738 16744 16739 + 16739 16744 16745 + 16745 16746 16739 + 16740 16739 16746 + 15812 16742 15807 + 16747 16742 15812 + 16742 16747 16743 + 16743 16747 16748 + 16748 16749 16743 + 16744 16743 16749 + 16749 16745 16744 + 16745 16749 16750 + 16745 16750 16751 + 16751 16746 16745 + 15812 16752 16747 + 16747 16752 16753 + 16753 16748 16747 + 16748 16753 16754 + 16754 16755 16748 + 16748 16755 16750 + 16750 16749 16748 + 16752 15812 15815 + 15815 15820 16752 + 16752 15820 16756 + 16756 16753 16752 + 16754 16753 16756 + 16756 16757 16754 + 16758 16754 16757 + 16755 16754 16758 + 16758 16759 16755 + 16755 16759 16760 + 16750 16755 16760 + 16760 16751 16750 + 15825 16756 15820 + 16756 15825 15830 + 15830 16757 16756 + 16757 15830 15838 + 15838 16761 16757 + 16757 16761 16758 + 16762 16758 16761 + 16759 16758 16762 + 16762 16763 16759 + 16759 16763 16764 + 16764 16760 16759 + 16761 15838 15842 + 15842 16765 16761 + 16761 16765 16762 + 16766 16762 16765 + 16763 16762 16766 + 16766 16767 16763 + 16763 16767 16768 + 16768 16764 16763 + 16765 15842 15846 + 15846 16769 16765 + 16765 16769 16766 + 16770 16766 16769 + 16766 16770 16767 + 16767 16770 16771 + 16771 16768 16767 + 16772 16768 16771 + 16768 16772 16773 + 16773 16764 16768 + 16769 15846 16774 + 16774 16775 16769 + 16769 16775 16770 + 16771 16770 16775 + 16774 15846 15849 + 15849 16776 16774 + 16774 16776 16777 + 16777 16778 16774 + 16775 16774 16778 + 16778 16779 16775 + 16775 16779 16771 + 15853 16776 15849 + 16776 15853 16780 + 16780 16777 16776 + 16777 16780 16781 + 16781 16782 16777 + 16777 16782 16783 + 16783 16778 16777 + 16779 16778 16783 + 16784 16780 15853 + 16781 16780 16784 + 16784 16785 16781 + 16781 16785 16786 + 16786 16787 16781 + 16782 16781 16787 + 16787 16788 16782 + 16783 16782 16788 + 15853 15857 16784 + 15867 16784 15857 + 15867 16785 16784 + 16785 15867 15866 + 15866 16789 16785 + 16785 16789 16786 + 16790 16786 16789 + 16786 16790 16791 + 16791 16792 16786 + 16786 16792 16793 + 16793 16787 16786 + 16788 16787 16793 + 15876 16789 15866 + 16789 15876 16790 + 16794 16790 15876 + 16791 16790 16794 + 16794 16795 16791 + 16796 16791 16795 + 16792 16791 16796 + 16796 16797 16792 + 16792 16797 16798 + 16798 16793 16792 + 15876 16799 16794 + 16800 16794 16799 + 16794 16800 16795 + 16795 16800 16801 + 16801 16802 16795 + 16795 16802 16796 + 15875 16799 15876 + 16803 16799 15875 + 16799 16803 16800 + 16801 16800 16803 + 16803 16804 16801 + 16805 16801 16804 + 16801 16805 16806 + 16806 16802 16801 + 15875 15880 16803 + 16803 15880 15885 + 15885 16804 16803 + 16807 16804 15885 + 16804 16807 16805 + 16808 16805 16807 + 16806 16805 16808 + 16808 16809 16806 + 16810 16806 16809 + 16802 16806 16810 + 16810 16811 16802 + 16802 16811 16796 + 15885 15889 16807 + 16807 15889 15894 + 15894 16812 16807 + 16807 16812 16808 + 16813 16808 16812 + 16808 16813 16814 + 16814 16809 16808 + 16809 16814 16815 + 16815 16816 16809 + 16809 16816 16810 + 16817 16812 15894 + 16812 16817 16813 + 16818 16813 16817 + 16814 16813 16818 + 16818 16819 16814 + 16815 16814 16819 + 16819 16820 16815 + 16821 16815 16820 + 16815 16821 16816 + 15894 15899 16817 + 16817 15899 16822 + 16822 16823 16817 + 16817 16823 16818 + 16824 16818 16823 + 16818 16824 16825 + 16825 16819 16818 + 16819 16825 16826 + 16826 16820 16819 + 15904 16822 15899 + 16827 16822 15904 + 16822 16827 16828 + 16828 16823 16822 + 16823 16828 16824 + 16829 16824 16828 + 16825 16824 16829 + 16829 16830 16825 + 16826 16825 16830 + 15904 15909 16827 + 16831 16827 15909 + 16828 16827 16831 + 16831 16832 16828 + 16828 16832 16829 + 16833 16829 16832 + 16829 16833 16834 + 16834 16830 16829 + 15909 16835 16831 + 16836 16831 16835 + 16831 16836 16837 + 16837 16832 16831 + 16832 16837 16833 + 16838 16833 16837 + 16834 16833 16838 + 16839 16835 15909 + 16840 16835 16839 + 16835 16840 16836 + 16841 16836 16840 + 16837 16836 16841 + 16841 16842 16837 + 16837 16842 16838 + 15909 15908 16839 + 15914 16839 15908 + 16843 16839 15914 + 16839 16843 16840 + 16840 16843 16844 + 16844 16845 16840 + 16840 16845 16841 + 16846 16841 16845 + 16841 16846 16847 + 16847 16842 16841 + 15914 16848 16843 + 16843 16848 16849 + 16849 16850 16843 + 16850 16844 16843 + 16851 16844 16850 + 16844 16851 16852 + 16852 16845 16844 + 16845 16852 16846 + 16848 15914 15913 + 15913 15919 16848 + 16848 15919 16853 + 16853 16849 16848 + 16854 16849 16853 + 16849 16854 16855 + 16855 16850 16849 + 16856 16850 16855 + 16850 16856 16851 + 16857 16853 15919 + 16854 16853 16857 + 16857 16858 16854 + 16854 16858 16859 + 16859 16855 16854 + 16860 16855 16859 + 16855 16860 16856 + 16861 16857 15919 + 16862 16857 16861 + 16858 16857 16862 + 16862 16863 16858 + 16858 16863 16864 + 16864 16859 16858 + 16865 16859 16864 + 16859 16865 16860 + 15919 15918 16861 + 15924 16861 15918 + 16866 16861 15924 + 16861 16866 16862 + 16867 16862 16866 + 16863 16862 16867 + 16867 16868 16863 + 16863 16868 16869 + 16869 16864 16863 + 16870 16864 16869 + 16864 16870 16865 + 16866 15924 15923 + 15923 16871 16866 + 16866 16871 16867 + 16872 16867 16871 + 16867 16872 16873 + 16873 16868 16867 + 16868 16873 16874 + 16874 16869 16868 + 15932 16871 15923 + 16871 15932 16872 + 16875 16872 15932 + 16873 16872 16875 + 16875 16876 16873 + 16873 16876 16877 + 16877 16874 16873 + 16878 16874 16877 + 16869 16874 16878 + 16878 16879 16869 + 16869 16879 16870 + 15932 15931 16875 + 15937 16875 15931 + 16875 15937 15945 + 15945 16876 16875 + 16876 15945 16880 + 16880 16877 16876 + 16877 16880 16881 + 16881 16882 16877 + 16877 16882 16878 + 16878 16882 16883 + 16883 16884 16878 + 16879 16878 16884 + 16885 16880 15945 + 16881 16880 16885 + 16885 16886 16881 + 16881 16886 16887 + 16887 16888 16881 + 16882 16881 16888 + 16888 16883 16882 + 15945 15944 16885 + 15950 16885 15944 + 16885 15950 16889 + 16889 16886 16885 + 16886 16889 16890 + 16890 16887 16886 + 16887 16890 16891 + 16891 16892 16887 + 16887 16892 16893 + 16893 16888 16887 + 16883 16888 16893 + 16889 15950 15949 + 15949 15962 16889 + 16889 15962 15967 + 15967 16890 16889 + 16891 16890 15967 + 15967 16894 16891 + 16891 16894 16895 + 16895 16896 16891 + 16892 16891 16896 + 16896 16897 16892 + 16893 16892 16897 + 15966 16894 15967 + 16894 15966 16898 + 16898 16895 16894 + 16895 16898 16899 + 16899 16900 16895 + 16895 16900 16901 + 16901 16896 16895 + 16897 16896 16901 + 15971 16898 15966 + 16899 16898 15971 + 15971 16902 16899 + 16899 16902 16903 + 16903 16904 16899 + 16900 16899 16904 + 16904 16905 16900 + 16901 16900 16905 + 15974 16902 15971 + 16902 15974 16906 + 16906 16903 16902 + 16903 16906 16907 + 16907 16908 16903 + 16903 16908 16909 + 16909 16904 16903 + 16905 16904 16909 + 15978 16906 15974 + 16907 16906 15978 + 15978 15983 16907 + 16907 15983 16910 + 16910 16911 16907 + 16908 16907 16911 + 16911 16912 16908 + 16909 16908 16912 + 16912 16913 16909 + 16914 16909 16913 + 16909 16914 16905 + 15988 16910 15983 + 16915 16910 15988 + 16910 16915 16916 + 16916 16911 16910 + 16912 16911 16916 + 16916 16917 16912 + 16912 16917 16918 + 16918 16913 16912 + 16919 16913 16918 + 16913 16919 16914 + 15988 16920 16915 + 16915 16920 16921 + 16921 16922 16915 + 16916 16915 16922 + 16922 16923 16916 + 16917 16916 16923 + 16923 16924 16917 + 16918 16917 16924 + 16920 15988 15987 + 15987 16925 16920 + 16920 16925 16926 + 16926 16921 16920 + 16927 16921 16926 + 16921 16927 16928 + 16928 16922 16921 + 16922 16928 16929 + 16929 16923 16922 + 16924 16923 16929 + 16925 15987 15986 + 15986 16930 16925 + 16925 16930 16931 + 16931 16926 16925 + 16932 16926 16931 + 16926 16932 16927 + 16927 16932 16933 + 16933 16934 16927 + 16928 16927 16934 + 16930 15986 15992 + 15992 15997 16930 + 16930 15997 16935 + 16935 16931 16930 + 16936 16931 16935 + 16931 16936 16932 + 16932 16936 16937 + 16937 16933 16932 + 16938 16933 16937 + 16933 16938 16939 + 16939 16934 16933 + 16940 16935 15997 + 16941 16935 16940 + 16935 16941 16936 + 16936 16941 16942 + 16942 16937 16936 + 16943 16937 16942 + 16937 16943 16938 + 15997 15996 16940 + 16944 16940 15996 + 16945 16940 16944 + 16940 16945 16941 + 16941 16945 16946 + 16946 16942 16941 + 16947 16942 16946 + 16942 16947 16943 + 15996 16001 16944 + 16948 16944 16001 + 16949 16944 16948 + 16944 16949 16945 + 16945 16949 16950 + 16950 16946 16945 + 16951 16946 16950 + 16946 16951 16947 + 16001 16006 16948 + 16952 16948 16006 + 16953 16948 16952 + 16948 16953 16949 + 16949 16953 16954 + 16954 16950 16949 + 16955 16950 16954 + 16950 16955 16951 + 16006 16956 16952 + 16957 16952 16956 + 16958 16952 16957 + 16952 16958 16953 + 16953 16958 16959 + 16959 16954 16953 + 16960 16954 16959 + 16954 16960 16955 + 16005 16956 16006 + 16956 16005 16011 + 16956 16011 16957 + 16957 16011 16010 + 16010 16961 16957 + 16962 16957 16961 + 16957 16962 16958 + 16958 16962 16963 + 16963 16959 16958 + 16964 16959 16963 + 16959 16964 16960 + 16965 16961 16010 + 16966 16961 16965 + 16961 16966 16962 + 16962 16966 16967 + 16967 16963 16962 + 16968 16963 16967 + 16963 16968 16964 + 16010 16018 16965 + 16969 16965 16018 + 16970 16965 16969 + 16965 16970 16966 + 16966 16970 16971 + 16971 16967 16966 + 16972 16967 16971 + 16967 16972 16968 + 16018 16022 16969 + 16027 16969 16022 + 16973 16969 16027 + 16969 16973 16970 + 16970 16973 16974 + 16974 16971 16970 + 16975 16971 16974 + 16971 16975 16972 + 16972 16975 16976 + 16976 16977 16972 + 16968 16972 16977 + 16027 16032 16973 + 16973 16032 16978 + 16978 16974 16973 + 16979 16974 16978 + 16974 16979 16975 + 16975 16979 16980 + 16980 16976 16975 + 16981 16976 16980 + 16976 16981 16982 + 16982 16977 16976 + 16036 16978 16032 + 16983 16978 16036 + 16978 16983 16979 + 16979 16983 16984 + 16984 16980 16979 + 16985 16980 16984 + 16980 16985 16981 + 16981 16985 16986 + 16986 16987 16981 + 16982 16981 16987 + 16036 16040 16983 + 16983 16040 16988 + 16988 16984 16983 + 16989 16984 16988 + 16984 16989 16985 + 16985 16989 16990 + 16990 16986 16985 + 16991 16986 16990 + 16986 16991 16992 + 16992 16987 16986 + 16044 16988 16040 + 16993 16988 16044 + 16988 16993 16989 + 16989 16993 16994 + 16994 16990 16989 + 16995 16990 16994 + 16990 16995 16991 + 16991 16995 16996 + 16996 16997 16991 + 16992 16991 16997 + 16044 16048 16993 + 16993 16048 16998 + 16998 16994 16993 + 16999 16994 16998 + 16994 16999 16995 + 16995 16999 17000 + 17000 16996 16995 + 17001 16996 17000 + 16996 17001 17002 + 17002 16997 16996 + 16052 16998 16048 + 17003 16998 16052 + 16998 17003 16999 + 16999 17003 17004 + 17004 17000 16999 + 17005 17000 17004 + 17000 17005 17001 + 17001 17005 17006 + 17006 17007 17001 + 17002 17001 17007 + 16052 16056 17003 + 17003 16056 17008 + 17008 17004 17003 + 17009 17004 17008 + 17004 17009 17005 + 17005 17009 17010 + 17010 17006 17005 + 17011 17006 17010 + 17006 17011 17012 + 17012 17007 17006 + 16060 17008 16056 + 17013 17008 16060 + 17008 17013 17009 + 17009 17013 17014 + 17014 17010 17009 + 17015 17010 17014 + 17010 17015 17011 + 17011 17015 17016 + 17016 17017 17011 + 17012 17011 17017 + 16060 16064 17013 + 17013 16064 17018 + 17018 17014 17013 + 17019 17014 17018 + 17014 17019 17015 + 17015 17019 17020 + 17020 17016 17015 + 17021 17016 17020 + 17016 17021 17022 + 17022 17017 17016 + 16068 17018 16064 + 17023 17018 16068 + 17018 17023 17019 + 17019 17023 17024 + 17024 17020 17019 + 17025 17020 17024 + 17020 17025 17021 + 17026 17021 17025 + 17022 17021 17026 + 16068 16076 17023 + 17023 16076 17027 + 17027 17024 17023 + 17028 17024 17027 + 17024 17028 17025 + 17025 17028 17029 + 17029 17030 17025 + 17025 17030 17026 + 16075 17027 16076 + 17031 17027 16075 + 17027 17031 17028 + 17029 17028 17031 + 17031 17032 17029 + 17033 17029 17032 + 17029 17033 17034 + 17034 17030 17029 + 17030 17034 17035 + 17035 17026 17030 + 16075 16080 17031 + 17031 16080 16079 + 16079 17032 17031 + 17036 17032 16079 + 17032 17036 17033 + 17037 17033 17036 + 17034 17033 17037 + 17037 17038 17034 + 17034 17038 17039 + 17039 17035 17034 + 17040 17035 17039 + 17026 17035 17040 + 16079 16085 17036 + 17036 16085 17041 + 17041 17042 17036 + 17036 17042 17037 + 17043 17037 17042 + 17037 17043 17044 + 17044 17038 17037 + 17038 17044 17045 + 17045 17039 17038 + 17041 16085 16084 + 16084 16090 17041 + 17046 17041 16090 + 17041 17046 17047 + 17047 17042 17041 + 17042 17047 17043 + 17048 17043 17047 + 17044 17043 17048 + 17048 17049 17044 + 17044 17049 17050 + 17050 17045 17044 + 16090 16089 17046 + 17051 17046 16089 + 17047 17046 17051 + 17051 17052 17047 + 17047 17052 17048 + 17053 17048 17052 + 17048 17053 17054 + 17054 17049 17048 + 17049 17054 17055 + 17055 17050 17049 + 16089 16103 17051 + 17056 17051 16103 + 17051 17056 17057 + 17057 17052 17051 + 17052 17057 17053 + 17058 17053 17057 + 17054 17053 17058 + 17058 17059 17054 + 17054 17059 17060 + 17060 17055 17054 + 16103 16102 17056 + 17061 17056 16102 + 17057 17056 17061 + 17061 17062 17057 + 17057 17062 17058 + 17063 17058 17062 + 17058 17063 17064 + 17064 17059 17058 + 17059 17064 17065 + 17065 17060 17059 + 16102 16107 17061 + 16112 17061 16107 + 17061 16112 17066 + 17066 17062 17061 + 17062 17066 17063 + 17067 17063 17066 + 17064 17063 17067 + 17067 17068 17064 + 17064 17068 17069 + 17069 17065 17064 + 17070 17065 17069 + 17060 17065 17070 + 17066 16112 16111 + 16111 17071 17066 + 17066 17071 17067 + 17072 17067 17071 + 17067 17072 17073 + 17073 17068 17067 + 17068 17073 17074 + 17074 17069 17068 + 16119 17071 16111 + 17071 16119 17072 + 17075 17072 16119 + 17073 17072 17075 + 17075 17076 17073 + 17073 17076 17077 + 17077 17074 17073 + 17078 17074 17077 + 17069 17074 17078 + 17078 17079 17069 + 17069 17079 17070 + 16119 16122 17075 + 16131 17075 16122 + 17076 17075 16131 + 16131 17080 17076 + 17076 17080 17081 + 17081 17077 17076 + 17082 17077 17081 + 17077 17082 17078 + 17078 17082 17083 + 17083 17084 17078 + 17079 17078 17084 + 17080 16131 17085 + 17085 17086 17080 + 17081 17080 17086 + 17086 17087 17081 + 17088 17081 17087 + 17081 17088 17082 + 17082 17088 17089 + 17089 17083 17082 + 16130 17085 16131 + 17090 17085 16130 + 17086 17085 17090 + 17090 17091 17086 + 17086 17091 17092 + 17092 17087 17086 + 17093 17087 17092 + 17087 17093 17088 + 17088 17093 17094 + 17094 17089 17088 + 16130 17095 17090 + 17096 17090 17095 + 17091 17090 17096 + 17096 17097 17091 + 17091 17097 17098 + 17098 17092 17091 + 17099 17092 17098 + 17092 17099 17093 + 16129 17095 16130 + 17095 16129 16136 + 16136 17100 17095 + 17095 17100 17096 + 17101 17096 17100 + 17096 17101 17102 + 17102 17097 17096 + 17097 17102 17103 + 17103 17098 17097 + 17104 17100 16136 + 17100 17104 17101 + 17105 17101 17104 + 17102 17101 17105 + 17105 17106 17102 + 17102 17106 17107 + 17107 17103 17102 + 17108 17103 17107 + 17098 17103 17108 + 16136 16141 17104 + 17104 16141 17109 + 17109 17110 17104 + 17104 17110 17105 + 17111 17105 17110 + 17105 17111 17112 + 17112 17106 17105 + 17106 17112 17113 + 17113 17107 17106 + 17109 16141 16140 + 16140 17114 17109 + 17115 17109 17114 + 17109 17115 17116 + 17116 17110 17109 + 17110 17116 17111 + 17117 17111 17116 + 17112 17111 17117 + 16146 17114 16140 + 17118 17114 16146 + 17114 17118 17115 + 17119 17115 17118 + 17116 17115 17119 + 17119 17120 17116 + 17116 17120 17117 + 16146 16151 17118 + 17118 16151 17121 + 17121 17122 17118 + 17118 17122 17119 + 17123 17119 17122 + 17119 17123 17124 + 17124 17120 17119 + 17120 17124 17125 + 17125 17117 17120 + 17121 16151 16150 + 16150 17126 17121 + 17127 17121 17126 + 17121 17127 17128 + 17128 17122 17121 + 17122 17128 17123 + 17129 17123 17128 + 17124 17123 17129 + 16155 17126 16150 + 17130 17126 16155 + 17126 17130 17127 + 17131 17127 17130 + 17128 17127 17131 + 17131 17132 17128 + 17128 17132 17129 + 16155 17133 17130 + 17130 17133 17134 + 17134 17135 17130 + 17130 17135 17131 + 17136 17131 17135 + 17131 17136 17137 + 17137 17132 17131 + 17133 16155 16159 + 16159 16164 17133 + 17134 17133 16164 + 16164 16181 17134 + 16190 17134 16181 + 17134 16190 17138 + 17138 17135 17134 + 17135 17138 17136 + 17136 17138 17139 + 17139 17140 17136 + 17137 17136 17140 + 17138 16190 16195 + 16195 17139 17138 + 16199 17139 16195 + 17139 16199 17141 + 17141 17140 17139 + 17140 17141 17142 + 17140 17142 17137 + 17137 17142 16219 + 16219 17143 17137 + 17132 17137 17143 + 17143 17129 17132 + 17141 16199 16203 + 16203 16220 17141 + 17142 17141 16220 + 16220 16219 17142 + 16224 17143 16219 + 17129 17143 16224 + 16224 17144 17129 + 17129 17144 17124 + 17124 17144 16232 + 16232 17125 17124 + 17145 17125 16232 + 17117 17125 17145 + 17144 16224 16227 + 16227 16232 17144 + 16232 16231 17145 + 17145 16231 16237 + 16237 17146 17145 + 17147 17145 17146 + 17145 17147 17117 + 17117 17147 17112 + 17112 17147 17148 + 17148 17113 17112 + 16242 17146 16237 + 17148 17146 16242 + 17146 17148 17147 + 16242 17149 17148 + 17148 17149 17150 + 17150 17113 17148 + 17107 17113 17150 + 17150 17151 17107 + 17107 17151 17108 + 17149 16242 17152 + 17152 17153 17149 + 17150 17149 17153 + 17153 17154 17150 + 17151 17150 17154 + 17154 17155 17151 + 17108 17151 17155 + 16241 17152 16242 + 17156 17152 16241 + 17153 17152 17156 + 17156 17157 17153 + 17153 17157 17158 + 17158 17154 17153 + 17155 17154 17158 + 16241 16247 17156 + 17156 16247 16252 + 16252 17159 17156 + 17157 17156 17159 + 17159 17160 17157 + 17158 17157 17160 + 17160 17161 17158 + 17162 17158 17161 + 17158 17162 17155 + 17163 17159 16252 + 17160 17159 17163 + 17163 17164 17160 + 17160 17164 17165 + 17165 17161 17160 + 17166 17161 17165 + 17161 17166 17162 + 17167 17162 17166 + 17155 17162 17167 + 16252 17168 17163 + 17163 17168 17169 + 17169 17170 17163 + 17164 17163 17170 + 17170 17171 17164 + 17165 17164 17171 + 16251 17168 16252 + 17168 16251 17172 + 17172 17169 17168 + 17169 17172 17173 + 17173 17174 17169 + 17169 17174 17175 + 17175 17170 17169 + 17171 17170 17175 + 16257 17172 16251 + 17173 17172 16257 + 16257 17176 17173 + 17173 17176 17177 + 17177 17178 17173 + 17174 17173 17178 + 17178 17179 17174 + 17175 17174 17179 + 17180 17176 16257 + 17176 17180 17181 + 17181 17177 17176 + 17177 17181 17182 + 17182 17183 17177 + 17177 17183 17184 + 17184 17178 17177 + 17179 17178 17184 + 16257 16256 17180 + 17180 16256 16255 + 16255 17185 17180 + 17180 17185 17186 + 17186 17181 17180 + 17182 17181 17186 + 17186 17187 17182 + 17188 17182 17187 + 17183 17182 17188 + 17188 17189 17183 + 17184 17183 17189 + 17185 16255 16254 + 16254 17190 17185 + 17185 17190 17191 + 17191 17186 17185 + 17191 17187 17186 + 17187 17191 17192 + 17192 17193 17187 + 17187 17193 17188 + 17194 17188 17193 + 17189 17188 17194 + 17190 16254 16267 + 16267 16272 17190 + 17191 17190 16272 + 16272 17195 17191 + 17195 17192 17191 + 17196 17192 17195 + 17192 17196 17197 + 17197 17193 17192 + 17193 17197 17194 + 17198 17194 17197 + 17199 17194 17198 + 17194 17199 17189 + 16271 17195 16272 + 17195 16271 17200 + 17195 17200 17196 + 17196 17200 17201 + 17201 17202 17196 + 17197 17196 17202 + 17202 17203 17197 + 17197 17203 17198 + 17200 16271 16277 + 16277 17201 17200 + 17204 17201 16277 + 17201 17204 17205 + 17205 17202 17201 + 17202 17205 17206 + 17206 17203 17202 + 17203 17206 17207 + 17207 17198 17203 + 17208 17198 17207 + 17198 17208 17199 + 16277 16281 17204 + 17204 16281 17209 + 17209 17210 17204 + 17205 17204 17210 + 17210 17211 17205 + 17206 17205 17211 + 17211 17212 17206 + 17207 17206 17212 + 16285 17209 16281 + 16290 17209 16285 + 17209 16290 17213 + 17213 17210 17209 + 17210 17213 17214 + 17214 17211 17210 + 17211 17214 17215 + 17215 17212 17211 + 17212 17215 17216 + 17216 17217 17212 + 17212 17217 17207 + 17213 16290 17218 + 17218 17219 17213 + 17214 17213 17219 + 17219 17220 17214 + 17215 17214 17220 + 17220 17221 17215 + 17216 17215 17221 + 16289 17218 16290 + 17222 17218 16289 + 17218 17222 17223 + 17223 17219 17218 + 17219 17223 17224 + 17224 17220 17219 + 17220 17224 17225 + 17225 17221 17220 + 16289 16295 17222 + 17222 16295 17226 + 17226 17227 17222 + 17223 17222 17227 + 17227 17228 17223 + 17224 17223 17228 + 17228 17229 17224 + 17225 17224 17229 + 17230 17226 16295 + 17231 17226 17230 + 17226 17231 17232 + 17232 17227 17226 + 17227 17232 17233 + 17233 17228 17227 + 17228 17233 17234 + 17234 17229 17228 + 16295 16294 17230 + 16300 17230 16294 + 17235 17230 16300 + 17230 17235 17231 + 17231 17235 17236 + 17236 17237 17231 + 17232 17231 17237 + 17237 17238 17232 + 17233 17232 17238 + 17238 17239 17233 + 17234 17233 17239 + 16300 17240 17235 + 17235 17240 17241 + 17241 17236 17235 + 17242 17236 17241 + 17236 17242 17243 + 17243 17237 17236 + 17237 17243 17244 + 17244 17238 17237 + 17240 16300 16299 + 16299 16305 17240 + 17240 16305 17245 + 17245 17241 17240 + 17246 17241 17245 + 17241 17246 17242 + 17242 17246 17247 + 17247 17248 17242 + 17243 17242 17248 + 17248 17249 17243 + 17244 17243 17249 + 16310 17245 16305 + 17250 17245 16310 + 17245 17250 17246 + 17246 17250 17251 + 17251 17247 17246 + 17252 17247 17251 + 17247 17252 17253 + 17253 17248 17247 + 17248 17253 17254 + 17254 17249 17248 + 16310 16315 17250 + 17250 16315 17255 + 17255 17251 17250 + 17256 17251 17255 + 17251 17256 17252 + 17252 17256 17257 + 17257 17258 17252 + 17253 17252 17258 + 17258 17259 17253 + 17254 17253 17259 + 17260 17255 16315 + 17261 17255 17260 + 17255 17261 17256 + 17256 17261 17262 + 17262 17257 17256 + 17263 17257 17262 + 17257 17263 17258 + 17258 17263 17264 + 17264 17259 17258 + 16315 16314 17260 + 17265 17260 16314 + 17266 17260 17265 + 17260 17266 17261 + 17261 17266 17267 + 17267 17262 17261 + 17262 17267 17268 + 17268 17269 17262 + 17262 17269 17263 + 16314 16319 17265 + 17270 17265 16319 + 17271 17265 17270 + 17265 17271 17266 + 17266 17271 17272 + 17272 17267 17266 + 17268 17267 17272 + 16319 16323 17270 + 17273 17270 16323 + 17274 17270 17273 + 17270 17274 17271 + 17271 17274 17275 + 17275 17272 17271 + 17275 17276 17272 + 17272 17276 17268 + 16323 16327 17273 + 17277 17273 16327 + 17278 17273 17277 + 17273 17278 17274 + 17274 17278 17279 + 17279 17275 17274 + 17276 17275 17279 + 17279 17280 17276 + 17276 17280 17281 + 17268 17276 17281 + 16327 16331 17277 + 17282 17277 16331 + 17283 17277 17282 + 17277 17283 17278 + 17278 17283 17284 + 17284 17279 17278 + 17279 17284 17285 + 17285 17280 17279 + 17280 17285 17286 + 17286 17281 17280 + 16331 16336 17282 + 17287 17282 16336 + 17288 17282 17287 + 17282 17288 17283 + 17283 17288 17289 + 17289 17284 17283 + 17285 17284 17289 + 17289 17290 17285 + 17285 17290 17291 + 17291 17286 17285 + 16336 16341 17287 + 17292 17287 16341 + 17293 17287 17292 + 17287 17293 17288 + 17288 17293 17294 + 17294 17289 17288 + 17294 17290 17289 + 17290 17294 17295 + 17295 17296 17290 + 17290 17296 17291 + 16341 16346 17292 + 17297 17292 16346 + 17298 17292 17297 + 17292 17298 17293 + 17293 17298 17295 + 17295 17294 17293 + 16346 16351 17297 + 16361 17297 16351 + 17299 17297 16361 + 17297 17299 17298 + 17298 17299 17300 + 17300 17295 17298 + 17295 17300 17301 + 17301 17296 17295 + 17296 17301 17302 + 17302 17291 17296 + 16361 16366 17299 + 17299 16366 17303 + 17303 17300 17299 + 17301 17300 17303 + 17303 17304 17301 + 17301 17304 17305 + 17305 17302 17301 + 17306 17302 17305 + 17291 17302 17306 + 16371 17303 16366 + 17303 16371 16379 + 16379 17304 17303 + 17304 16379 17307 + 17307 17305 17304 + 17305 17307 17308 + 17308 17309 17305 + 17305 17309 17306 + 17310 17307 16379 + 17308 17307 17310 + 17310 17311 17308 + 17308 17311 17312 + 17312 17313 17308 + 17309 17308 17313 + 17313 17314 17309 + 17306 17309 17314 + 16379 16378 17310 + 17315 17310 16378 + 17310 17315 17316 + 17316 17311 17310 + 17311 17316 17317 + 17317 17312 17311 + 16378 16377 17315 + 16388 17315 16377 + 17316 17315 16388 + 16388 16393 17316 + 17316 16393 17318 + 17318 17317 17316 + 17319 17317 17318 + 17312 17317 17319 + 17319 17320 17312 + 17312 17320 17321 + 17321 17313 17312 + 17313 17321 17314 + 16393 16392 17318 + 16401 17318 16392 + 17318 16401 17322 + 17322 17323 17318 + 17318 17323 17319 + 17324 17319 17323 + 17320 17319 17324 + 17322 16401 16400 + 16400 17325 17322 + 17326 17322 17325 + 17323 17322 17326 + 17326 17327 17323 + 17323 17327 17324 + 17328 17324 17327 + 17324 17328 17329 + 17324 17329 17320 + 17330 17325 16400 + 17325 17330 17331 + 17331 17332 17325 + 17325 17332 17326 + 17333 17326 17332 + 17327 17326 17333 + 17333 17334 17327 + 17327 17334 17328 + 16400 17335 17330 + 17330 17335 17336 + 17336 17337 17330 + 17330 17337 17338 + 17331 17330 17338 + 17335 16400 16405 + 16405 16410 17335 + 17336 17335 16410 + 16410 16418 17336 + 17339 17336 16418 + 17339 17337 17336 + 17337 17339 17340 + 17340 17338 17337 + 16418 16417 17339 + 17340 17339 16417 + 16417 17341 17340 + 17342 17340 17341 + 17340 17342 17343 + 17343 17338 17340 + 16421 17341 16417 + 17344 17341 16421 + 17341 17344 17342 + 17345 17342 17344 + 17343 17342 17345 + 17345 17346 17343 + 17347 17343 17346 + 17338 17343 17347 + 16421 16431 17344 + 17344 16431 17348 + 17348 17349 17344 + 17344 17349 17345 + 17349 17350 17345 + 17351 17345 17350 + 17345 17351 17352 + 17352 17346 17345 + 17348 16431 16430 + 16430 17353 17348 + 17354 17348 17353 + 17354 17349 17348 + 17349 17354 17355 + 17355 17350 17349 + 17356 17350 17355 + 17350 17356 17351 + 17357 17351 17356 + 17352 17351 17357 + 16435 17353 16430 + 16444 17353 16435 + 17353 16444 17354 + 17355 17354 16444 + 16444 17358 17355 + 17358 17359 17355 + 17360 17355 17359 + 17355 17360 17356 + 17356 17360 17361 + 17361 17362 17356 + 17356 17362 17357 + 16443 17358 16444 + 16443 16449 17358 + 17358 16449 16615 + 16615 17359 17358 + 16619 17359 16615 + 17359 16619 17360 + 17361 17360 16619 + 16619 16624 17361 + 16629 17361 16624 + 17361 16629 17363 + 17363 17362 17361 + 17362 17363 17364 + 17364 17357 17362 + 17357 17364 17365 + 17365 17366 17357 + 17357 17366 17352 + 17367 17352 17366 + 17346 17352 17367 + 17363 16629 16628 + 16628 17368 17363 + 17364 17363 17368 + 17368 17369 17364 + 17369 17370 17364 + 17365 17364 17370 + 16634 17368 16628 + 17368 16634 16633 + 16633 17369 17368 + 16641 17369 16633 + 17369 16641 16650 + 16650 17370 17369 + 17370 16650 17371 + 17371 17372 17370 + 17370 17372 17365 + 17365 17372 17373 + 17373 17374 17365 + 17366 17365 17374 + 17374 17375 17366 + 17366 17375 17367 + 17371 16650 17376 + 17376 17377 17371 + 17371 17377 17378 + 17378 17379 17371 + 17372 17371 17379 + 17379 17373 17372 + 16654 17376 16650 + 17380 17376 16654 + 17376 17380 17381 + 17381 17377 17376 + 17377 17381 17382 + 17382 17378 17377 + 17382 17383 17378 + 17378 17383 17384 + 17384 17379 17378 + 17379 17384 17373 + 16654 16658 17380 + 17385 17380 16658 + 17381 17380 17385 + 17385 17386 17381 + 17382 17381 17386 + 17386 17387 17382 + 17383 17382 17387 + 17387 17388 17383 + 17383 17388 17389 + 17384 17383 17389 + 16658 16665 17385 + 16665 17390 17385 + 17391 17385 17390 + 17385 17391 17392 + 17392 17386 17385 + 17386 17392 17393 + 17393 17387 17386 + 17387 17393 17394 + 17394 17388 17387 + 16669 17390 16665 + 17395 17390 16669 + 17390 17395 17391 + 17391 17395 17396 + 17396 17397 17391 + 17392 17391 17397 + 17397 17398 17392 + 17392 17398 17399 + 17399 17393 17392 + 17394 17393 17399 + 16669 16674 17395 + 17395 16674 17400 + 17400 17396 17395 + 17401 17396 17400 + 17396 17401 17402 + 17402 17397 17396 + 17397 17402 17403 + 17403 17398 17397 + 17398 17403 17404 + 17404 17399 17398 + 16678 17400 16674 + 17405 17400 16678 + 17400 17405 17401 + 17401 17405 17406 + 17406 17407 17401 + 17402 17401 17407 + 17407 16773 17402 + 16773 16772 17402 + 17403 17402 16772 + 16678 17408 17405 + 17405 17408 17409 + 17409 17410 17405 + 17410 17406 17405 + 17411 17406 17410 + 17411 17407 17406 + 17407 17411 17412 + 17412 16773 17407 + 16764 16773 17412 + 17408 16678 16677 + 16677 17413 17408 + 17408 17413 17414 + 17414 17409 17408 + 17409 17414 17415 + 17409 17415 17416 + 17416 17410 17409 + 17417 17410 17416 + 17410 17417 17411 + 17413 16677 16682 + 16682 17418 17413 + 17414 17413 17418 + 17418 17419 17414 + 17415 17414 17419 + 17419 17420 17415 + 17416 17415 17420 + 17420 17421 17416 + 17422 17416 17421 + 17416 17422 17417 + 16686 17418 16682 + 17418 16686 17423 + 17423 17419 17418 + 17419 17423 17424 + 17424 17420 17419 + 17420 17424 17425 + 17425 17421 17420 + 17421 17425 16736 + 16736 16741 17421 + 17421 16741 17422 + 16690 17423 16686 + 17424 17423 16690 + 16690 17426 17424 + 17424 17426 16726 + 16726 17425 17424 + 16736 17425 16726 + 16695 17426 16690 + 17426 16695 16717 + 16717 16726 17426 + 17412 16760 16764 + 16760 17412 17427 + 17427 16751 16760 + 16751 17427 17428 + 17428 16746 16751 + 16746 17428 16740 + 16741 16740 17428 + 17428 17422 16741 + 17417 17422 17428 + 17427 17412 17411 + 17411 17417 17427 + 17428 17427 17417 + 16772 17429 17403 + 16771 17429 16772 + 17429 16771 17430 + 17430 17431 17429 + 17403 17429 17431 + 17431 17404 17403 + 17432 17404 17431 + 17404 17432 17399 + 17399 17432 17394 + 17433 17430 16771 + 17434 17430 17433 + 17431 17430 17434 + 17434 17435 17431 + 17431 17435 17432 + 17432 17435 17436 + 17394 17432 17436 + 17436 17437 17394 + 17388 17394 17437 + 16779 17433 16771 + 17438 17433 16779 + 17438 17439 17433 + 17433 17439 17434 + 17434 17439 17440 + 17440 17441 17434 + 17435 17434 17441 + 17441 17436 17435 + 16779 17442 17438 + 17438 17442 17443 + 17443 17444 17438 + 17439 17438 17444 + 17444 17440 17439 + 16783 17442 16779 + 17442 16783 17445 + 17445 17443 17442 + 17443 17445 17446 + 17443 17446 17447 + 17447 17444 17443 + 17440 17444 17447 + 17447 17448 17440 + 17440 17448 17449 + 17449 17441 17440 + 17436 17441 17449 + 16788 17445 16783 + 17446 17445 16788 + 16788 17450 17446 + 17446 17450 17451 + 17451 17447 17446 + 17448 17447 17451 + 17451 17452 17448 + 17448 17452 17453 + 17449 17448 17453 + 17454 17449 17453 + 17436 17449 17454 + 17454 17437 17436 + 16793 17450 16788 + 17450 16793 16798 + 16798 17455 17450 + 17450 17455 17451 + 17456 17451 17455 + 17451 17456 17452 + 17452 17456 17457 + 17457 17453 17452 + 16798 17458 17455 + 17455 17458 17456 + 17457 17456 17458 + 17458 16798 16797 + 16797 17459 17458 + 17458 17459 17457 + 16796 17459 16797 + 17459 16796 16811 + 16811 17460 17459 + 17459 17460 17457 + 16810 17460 16811 + 17460 16810 16816 + 16816 16821 17460 + 17460 16821 17457 + 16821 17461 17457 + 17461 17462 17457 + 17462 17463 17457 + 17463 17464 17457 + 17464 17465 17457 + 17465 17466 17457 + 17466 17467 17457 + 17467 17468 17457 + 17468 17469 17457 + 17469 17470 17457 + 17471 17457 17470 + 17453 17457 17471 + 16820 17461 16821 + 16826 17461 16820 + 17461 16826 17472 + 17472 17462 17461 + 17473 17462 17472 + 17462 17473 17474 + 17474 17463 17462 + 17475 17463 17474 + 17463 17475 17476 + 17476 17464 17463 + 16830 17472 16826 + 17473 17472 16830 + 16830 16834 17473 + 17473 16834 17477 + 17477 17478 17473 + 17478 17479 17473 + 17479 17474 17473 + 17475 17474 17479 + 17479 17480 17475 + 17476 17475 17480 + 16838 17477 16834 + 16838 17481 17477 + 17477 17481 17482 + 17482 17478 17477 + 17482 17483 17478 + 17478 17483 17484 + 17484 17479 17478 + 17480 17479 17484 + 17481 16838 16842 + 16842 16847 17481 + 17482 17481 16847 + 16847 17485 17482 + 17485 17486 17482 + 17483 17482 17486 + 17486 17487 17483 + 17483 17487 17488 + 17488 17489 17483 + 17489 17484 17483 + 17490 17485 16847 + 17491 17485 17490 + 17485 17491 17492 + 17492 17486 17485 + 17487 17486 17492 + 17492 17493 17487 + 17487 17493 17494 + 17494 17488 17487 + 16847 16846 17490 + 17490 16846 16852 + 16852 17495 17490 + 17491 17490 17495 + 17495 17496 17491 + 17492 17491 17496 + 17496 17497 17492 + 17493 17492 17497 + 17497 17498 17493 + 17494 17493 17498 + 17499 17495 16852 + 17496 17495 17499 + 17499 17500 17496 + 17496 17500 17501 + 17501 17497 17496 + 17498 17497 17501 + 16852 16851 17499 + 17502 17499 16851 + 17500 17499 17502 + 17502 17503 17500 + 17500 17503 17504 + 17504 17501 17500 + 17505 17501 17504 + 17501 17505 17498 + 16851 16856 17502 + 17506 17502 16856 + 17503 17502 17506 + 17506 17507 17503 + 17503 17507 17508 + 17508 17504 17503 + 17509 17504 17508 + 17504 17509 17505 + 16856 16860 17506 + 17510 17506 16860 + 17507 17506 17510 + 17510 17511 17507 + 17507 17511 17512 + 17512 17513 17507 + 17513 17508 17507 + 17514 17508 17513 + 17508 17514 17509 + 16860 16865 17510 + 17515 17510 16865 + 17511 17510 17515 + 17515 17516 17511 + 17511 17516 17517 + 17517 17512 17511 + 17518 17512 17517 + 17512 17518 17519 + 17519 17513 17512 + 16865 16870 17515 + 17520 17515 16870 + 17516 17515 17520 + 17520 17521 17516 + 17516 17521 17522 + 17522 17517 17516 + 17518 17517 17522 + 17522 17523 17518 + 17518 17523 17524 + 17524 17519 17518 + 16870 16879 17520 + 16884 17520 16879 + 17520 16884 17525 + 17525 17521 17520 + 17521 17525 17526 + 17526 17522 17521 + 17522 17526 17527 + 17527 17523 17522 + 17523 17527 17528 + 17528 17524 17523 + 17525 16884 16883 + 16883 17529 17525 + 17525 17529 17530 + 17530 17526 17525 + 17527 17526 17530 + 17530 17531 17527 + 17527 17531 17532 + 17532 17528 17527 + 17533 17528 17532 + 17524 17528 17533 + 16893 17529 16883 + 17529 16893 17534 + 17534 17530 17529 + 17530 17534 17535 + 17535 17531 17530 + 17531 17535 17536 + 17536 17532 17531 + 17532 17536 17537 + 17537 17538 17532 + 17532 17538 17533 + 16897 17534 16893 + 17535 17534 16897 + 16897 17539 17535 + 17535 17539 17540 + 17540 17536 17535 + 17537 17536 17540 + 17540 17541 17537 + 17537 17541 17542 + 17542 17543 17537 + 17538 17537 17543 + 16901 17539 16897 + 17539 16901 17544 + 17544 17540 17539 + 17540 17544 17545 + 17545 17541 17540 + 17541 17545 17546 + 17546 17542 17541 + 16905 17544 16901 + 17545 17544 16905 + 16905 16914 17545 + 17545 16914 16919 + 16919 17546 17545 + 17547 17546 16919 + 17542 17546 17547 + 17547 17548 17542 + 17542 17548 17549 + 17549 17543 17542 + 17550 17543 17549 + 17543 17550 17538 + 17533 17538 17550 + 16919 17551 17547 + 17547 17551 17552 + 17552 17553 17547 + 17548 17547 17553 + 17553 17554 17548 + 17549 17548 17554 + 16918 17551 16919 + 17551 16918 17555 + 17555 17552 17551 + 17552 17555 17556 + 17556 17557 17552 + 17552 17557 17558 + 17558 17553 17552 + 17554 17553 17558 + 16924 17555 16918 + 17556 17555 16924 + 16924 17559 17556 + 17556 17559 17560 + 17560 17561 17556 + 17557 17556 17561 + 17561 17562 17557 + 17558 17557 17562 + 16929 17559 16924 + 17559 16929 17563 + 17563 17560 17559 + 17560 17563 17564 + 17564 17565 17560 + 17560 17565 17566 + 17566 17561 17560 + 17562 17561 17566 + 17567 17563 16929 + 17564 17563 17567 + 17567 17568 17564 + 17564 17568 17569 + 17569 17570 17564 + 17565 17564 17570 + 17570 17571 17565 + 17566 17565 17571 + 16929 16928 17567 + 16934 17567 16928 + 17568 17567 16934 + 16934 16939 17568 + 17568 16939 17572 + 17572 17569 17568 + 17573 17569 17572 + 17569 17573 17574 + 17574 17570 17569 + 17571 17570 17574 + 17575 17572 16939 + 17576 17572 17575 + 17572 17576 17573 + 17573 17576 17577 + 17577 17578 17573 + 17574 17573 17578 + 16939 16938 17575 + 17579 17575 16938 + 17580 17575 17579 + 17575 17580 17576 + 17576 17580 17581 + 17581 17577 17576 + 17582 17577 17581 + 17578 17577 17582 + 16938 16943 17579 + 17583 17579 16943 + 17584 17579 17583 + 17579 17584 17580 + 17580 17584 17585 + 17585 17581 17580 + 17586 17581 17585 + 17581 17586 17582 + 16943 16947 17583 + 17587 17583 16947 + 17588 17583 17587 + 17583 17588 17584 + 17584 17588 17589 + 17589 17585 17584 + 17590 17585 17589 + 17585 17590 17586 + 16947 16951 17587 + 17591 17587 16951 + 17592 17587 17591 + 17587 17592 17588 + 17588 17592 17593 + 17593 17589 17588 + 17594 17589 17593 + 17589 17594 17590 + 16951 16955 17591 + 17595 17591 16955 + 17596 17591 17595 + 17591 17596 17592 + 17592 17596 17597 + 17597 17593 17592 + 17598 17593 17597 + 17593 17598 17594 + 16955 16960 17595 + 17599 17595 16960 + 17600 17595 17599 + 17595 17600 17596 + 17596 17600 17601 + 17601 17597 17596 + 17602 17597 17601 + 17597 17602 17598 + 16960 16964 17599 + 17603 17599 16964 + 17604 17599 17603 + 17599 17604 17600 + 17600 17604 17605 + 17605 17601 17600 + 17606 17601 17605 + 17601 17606 17602 + 16964 16968 17603 + 16977 17603 16968 + 17607 17603 16977 + 17603 17607 17604 + 17604 17607 17608 + 17608 17605 17604 + 17609 17605 17608 + 17605 17609 17606 + 17606 17609 17610 + 17610 17611 17606 + 17602 17606 17611 + 16977 16982 17607 + 17607 16982 17612 + 17612 17608 17607 + 17613 17608 17612 + 17608 17613 17609 + 17609 17613 17614 + 17614 17610 17609 + 17615 17610 17614 + 17610 17615 17616 + 17616 17611 17610 + 16987 17612 16982 + 17617 17612 16987 + 17612 17617 17613 + 17613 17617 17618 + 17618 17614 17613 + 17619 17614 17618 + 17614 17619 17615 + 17615 17619 17620 + 17620 17621 17615 + 17616 17615 17621 + 16987 16992 17617 + 17617 16992 17622 + 17622 17618 17617 + 17623 17618 17622 + 17618 17623 17619 + 17619 17623 17624 + 17624 17620 17619 + 17625 17620 17624 + 17620 17625 17626 + 17626 17621 17620 + 16997 17622 16992 + 17627 17622 16997 + 17622 17627 17623 + 17623 17627 17628 + 17628 17624 17623 + 17629 17624 17628 + 17624 17629 17625 + 17630 17625 17629 + 17626 17625 17630 + 16997 17002 17627 + 17627 17002 17631 + 17631 17628 17627 + 17632 17628 17631 + 17628 17632 17629 + 17629 17632 17633 + 17633 17634 17629 + 17634 17630 17629 + 17007 17631 17002 + 17635 17631 17007 + 17631 17635 17632 + 17632 17635 17636 + 17636 17633 17632 + 17637 17633 17636 + 17633 17637 17638 + 17638 17634 17633 + 17634 17638 17639 + 17639 17630 17634 + 17007 17012 17635 + 17635 17012 17640 + 17640 17636 17635 + 17641 17636 17640 + 17636 17641 17637 + 17642 17637 17641 + 17638 17637 17642 + 17642 17643 17638 + 17638 17643 17644 + 17644 17639 17638 + 17017 17640 17012 + 17645 17640 17017 + 17640 17645 17641 + 17641 17645 17646 + 17646 17647 17641 + 17641 17647 17642 + 17648 17642 17647 + 17642 17648 17649 + 17649 17643 17642 + 17017 17022 17645 + 17646 17645 17022 + 17022 17650 17646 + 17651 17646 17650 + 17646 17651 17652 + 17652 17647 17646 + 17647 17652 17648 + 17653 17648 17652 + 17649 17648 17653 + 17026 17650 17022 + 17040 17650 17026 + 17650 17040 17651 + 17654 17651 17040 + 17652 17651 17654 + 17654 17655 17652 + 17652 17655 17653 + 17656 17653 17655 + 17653 17656 17657 + 17657 17658 17653 + 17653 17658 17649 + 17040 17659 17654 + 17660 17654 17659 + 17654 17660 17661 + 17661 17655 17654 + 17655 17661 17656 + 17662 17656 17661 + 17657 17656 17662 + 17039 17659 17040 + 17663 17659 17039 + 17659 17663 17660 + 17664 17660 17663 + 17661 17660 17664 + 17664 17665 17661 + 17661 17665 17662 + 17039 17045 17663 + 17663 17045 17050 + 17050 17666 17663 + 17663 17666 17664 + 17667 17664 17666 + 17664 17667 17668 + 17668 17665 17664 + 17665 17668 17669 + 17669 17662 17665 + 17670 17666 17050 + 17666 17670 17667 + 17671 17667 17670 + 17668 17667 17671 + 17671 17672 17668 + 17668 17672 17673 + 17673 17669 17668 + 17674 17669 17673 + 17662 17669 17674 + 17050 17055 17670 + 17670 17055 17060 + 17060 17675 17670 + 17670 17675 17671 + 17676 17671 17675 + 17671 17676 17677 + 17677 17672 17671 + 17672 17677 17678 + 17678 17673 17672 + 17070 17675 17060 + 17675 17070 17676 + 17679 17676 17070 + 17677 17676 17679 + 17679 17680 17677 + 17677 17680 17681 + 17681 17678 17677 + 17682 17678 17681 + 17673 17678 17682 + 17682 17683 17673 + 17673 17683 17674 + 17070 17079 17679 + 17084 17679 17079 + 17679 17084 17684 + 17684 17680 17679 + 17680 17684 17685 + 17685 17681 17680 + 17681 17685 17686 + 17686 17687 17681 + 17681 17687 17682 + 17684 17084 17083 + 17083 17688 17684 + 17684 17688 17689 + 17689 17685 17684 + 17686 17685 17689 + 17689 17690 17686 + 17691 17686 17690 + 17687 17686 17691 + 17691 17692 17687 + 17682 17687 17692 + 17089 17688 17083 + 17688 17089 17094 + 17094 17689 17688 + 17689 17094 17693 + 17693 17690 17689 + 17690 17693 17694 + 17694 17695 17690 + 17690 17695 17691 + 17696 17691 17695 + 17692 17691 17696 + 17693 17094 17697 + 17697 17698 17693 + 17693 17698 17699 + 17699 17700 17693 + 17700 17694 17693 + 17701 17694 17700 + 17695 17694 17701 + 17695 17701 17696 + 17702 17697 17094 + 17703 17697 17702 + 17698 17697 17703 + 17703 17704 17698 + 17698 17704 17705 + 17705 17699 17698 + 17093 17702 17094 + 17706 17702 17093 + 17702 17706 17707 + 17702 17707 17703 + 17708 17703 17707 + 17704 17703 17708 + 17708 17709 17704 + 17704 17709 17710 + 17710 17705 17704 + 17093 17099 17706 + 17711 17706 17099 + 17707 17706 17711 + 17711 17712 17707 + 17707 17712 17708 + 17713 17708 17712 + 17708 17713 17714 + 17714 17709 17708 + 17709 17714 17715 + 17715 17710 17709 + 17099 17716 17711 + 17717 17711 17716 + 17711 17717 17167 + 17167 17712 17711 + 17712 17167 17713 + 17166 17713 17167 + 17714 17713 17166 + 17098 17716 17099 + 17108 17716 17098 + 17716 17108 17717 + 17155 17717 17108 + 17167 17717 17155 + 17166 17718 17714 + 17165 17718 17166 + 17718 17165 17719 + 17719 17720 17718 + 17714 17718 17720 + 17720 17715 17714 + 17721 17715 17720 + 17710 17715 17721 + 17721 17722 17710 + 17710 17722 17723 + 17723 17705 17710 + 17171 17719 17165 + 17724 17719 17171 + 17720 17719 17724 + 17724 17725 17720 + 17720 17725 17721 + 17721 17725 17726 + 17726 17727 17721 + 17722 17721 17727 + 17727 17728 17722 + 17723 17722 17728 + 17171 17729 17724 + 17724 17729 17730 + 17730 17731 17724 + 17725 17724 17731 + 17731 17726 17725 + 17175 17729 17171 + 17729 17175 17732 + 17732 17730 17729 + 17730 17732 17733 + 17733 17734 17730 + 17730 17734 17735 + 17735 17731 17730 + 17726 17731 17735 + 17179 17732 17175 + 17733 17732 17179 + 17179 17736 17733 + 17733 17736 17737 + 17737 17738 17733 + 17734 17733 17738 + 17738 17739 17734 + 17735 17734 17739 + 17184 17736 17179 + 17736 17184 17740 + 17740 17737 17736 + 17737 17740 17741 + 17741 17742 17737 + 17737 17742 17743 + 17743 17738 17737 + 17739 17738 17743 + 17189 17740 17184 + 17741 17740 17189 + 17189 17199 17741 + 17741 17199 17208 + 17208 17744 17741 + 17742 17741 17744 + 17744 17745 17742 + 17743 17742 17745 + 17745 17746 17743 + 17747 17743 17746 + 17743 17747 17739 + 17748 17744 17208 + 17745 17744 17748 + 17748 17749 17745 + 17745 17749 17750 + 17750 17746 17745 + 17751 17746 17750 + 17746 17751 17747 + 17752 17747 17751 + 17739 17747 17752 + 17208 17753 17748 + 17748 17753 17754 + 17754 17755 17748 + 17749 17748 17755 + 17755 17756 17749 + 17750 17749 17756 + 17207 17753 17208 + 17753 17207 17217 + 17217 17754 17753 + 17757 17754 17217 + 17754 17757 17758 + 17758 17755 17754 + 17755 17758 17759 + 17759 17756 17755 + 17756 17759 17760 + 17760 17761 17756 + 17756 17761 17750 + 17217 17216 17757 + 17757 17216 17762 + 17762 17763 17757 + 17758 17757 17763 + 17763 17764 17758 + 17759 17758 17764 + 17764 17765 17759 + 17760 17759 17765 + 17221 17762 17216 + 17766 17762 17221 + 17762 17766 17767 + 17767 17763 17762 + 17763 17767 17768 + 17768 17764 17763 + 17764 17768 17769 + 17769 17765 17764 + 17221 17225 17766 + 17766 17225 17770 + 17770 17771 17766 + 17767 17766 17771 + 17771 17772 17767 + 17768 17767 17772 + 17772 17773 17768 + 17769 17768 17773 + 17229 17770 17225 + 17774 17770 17229 + 17770 17774 17775 + 17775 17771 17770 + 17771 17775 17776 + 17776 17772 17771 + 17772 17776 17777 + 17777 17773 17772 + 17229 17234 17774 + 17774 17234 17778 + 17778 17779 17774 + 17775 17774 17779 + 17779 17780 17775 + 17776 17775 17780 + 17780 17781 17776 + 17777 17776 17781 + 17239 17778 17234 + 17782 17778 17239 + 17778 17782 17783 + 17783 17779 17778 + 17779 17783 17784 + 17784 17780 17779 + 17780 17784 17785 + 17785 17781 17780 + 17239 17786 17782 + 17782 17786 17787 + 17787 17788 17782 + 17783 17782 17788 + 17788 17789 17783 + 17784 17783 17789 + 17789 17790 17784 + 17785 17784 17790 + 17786 17239 17238 + 17238 17244 17786 + 17786 17244 17791 + 17791 17787 17786 + 17792 17787 17791 + 17787 17792 17793 + 17793 17788 17787 + 17788 17793 17794 + 17794 17789 17788 + 17789 17794 17795 + 17795 17790 17789 + 17249 17791 17244 + 17796 17791 17249 + 17791 17796 17792 + 17792 17796 17797 + 17797 17798 17792 + 17793 17792 17798 + 17798 17799 17793 + 17794 17793 17799 + 17799 17800 17794 + 17795 17794 17800 + 17249 17254 17796 + 17796 17254 17801 + 17801 17797 17796 + 17802 17797 17801 + 17798 17797 17802 + 17802 17803 17798 + 17798 17803 17804 + 17804 17799 17798 + 17800 17799 17804 + 17259 17801 17254 + 17801 17259 17264 + 17264 17805 17801 + 17801 17805 17802 + 17802 17805 17806 + 17806 17807 17802 + 17803 17802 17807 + 17807 17808 17803 + 17804 17803 17808 + 17805 17264 17809 + 17809 17806 17805 + 17806 17809 17810 + 17810 17811 17806 + 17806 17811 17812 + 17812 17807 17806 + 17808 17807 17812 + 17813 17809 17264 + 17810 17809 17813 + 17813 17814 17810 + 17810 17814 17815 + 17815 17816 17810 + 17811 17810 17816 + 17264 17263 17813 + 17263 17269 17813 + 17817 17813 17269 + 17813 17817 17818 + 17818 17814 17813 + 17814 17818 17819 + 17819 17815 17814 + 17269 17268 17817 + 17281 17817 17268 + 17818 17817 17281 + 17281 17820 17818 + 17818 17820 17821 + 17821 17819 17818 + 17822 17819 17821 + 17815 17819 17822 + 17822 17823 17815 + 17815 17823 17824 + 17824 17816 17815 + 17825 17820 17281 + 17820 17825 17826 + 17826 17821 17820 + 17821 17826 17827 + 17827 17828 17821 + 17821 17828 17822 + 17829 17822 17828 + 17823 17822 17829 + 17281 17286 17825 + 17825 17286 17291 + 17291 17830 17825 + 17825 17830 17831 + 17831 17826 17825 + 17827 17826 17831 + 17831 17832 17827 + 17833 17827 17832 + 17828 17827 17833 + 17833 17834 17828 + 17828 17834 17829 + 17306 17830 17291 + 17830 17306 17835 + 17835 17831 17830 + 17831 17835 17836 + 17836 17832 17831 + 17832 17836 17837 + 17837 17838 17832 + 17832 17838 17833 + 17839 17833 17838 + 17834 17833 17839 + 17314 17835 17306 + 17836 17835 17314 + 17314 17321 17836 + 17836 17321 17320 + 17837 17836 17320 + 17320 17329 17837 + 17840 17837 17329 + 17838 17837 17840 + 17840 17841 17838 + 17838 17841 17839 + 17842 17839 17841 + 17843 17839 17842 + 17839 17843 17834 + 17834 17843 17844 + 17844 17829 17834 + 17329 17328 17840 + 17845 17840 17328 + 17841 17840 17845 + 17845 17846 17841 + 17841 17846 17842 + 17847 17842 17846 + 17847 17848 17842 + 17842 17848 17843 + 17843 17848 17849 + 17849 17844 17843 + 17328 17334 17845 + 17334 17850 17845 + 17851 17845 17850 + 17846 17845 17851 + 17851 17852 17846 + 17846 17852 17847 + 17847 17852 17853 + 17854 17847 17853 + 17848 17847 17854 + 17854 17849 17848 + 17855 17850 17334 + 17850 17855 17856 + 17856 17857 17850 + 17850 17857 17851 + 17851 17857 17858 + 17858 17859 17851 + 17852 17851 17859 + 17859 17853 17852 + 17334 17333 17855 + 17855 17333 17860 + 17860 17861 17855 + 17856 17855 17861 + 17861 17862 17856 + 17856 17862 17471 + 17471 17863 17856 + 17857 17856 17863 + 17863 17858 17857 + 17332 17860 17333 + 17864 17860 17332 + 17860 17864 17865 + 17865 17861 17860 + 17862 17861 17865 + 17862 17865 17866 + 17866 17867 17862 + 17862 17867 17471 + 17453 17471 17867 + 17332 17331 17864 + 17864 17331 17868 + 17868 17869 17864 + 17865 17864 17869 + 17869 17866 17865 + 17870 17866 17869 + 17866 17870 17871 + 17871 17867 17866 + 17867 17871 17453 + 17868 17331 17338 + 17338 17872 17868 + 17873 17868 17872 + 17868 17873 17869 + 17869 17873 17870 + 17870 17873 17874 + 17874 17875 17870 + 17871 17870 17875 + 17875 17876 17871 + 17453 17871 17876 + 17347 17872 17338 + 17872 17347 17877 + 17877 17874 17872 + 17872 17874 17873 + 17877 17347 17878 + 17878 17879 17877 + 17880 17877 17879 + 17874 17877 17880 + 17880 17875 17874 + 17876 17875 17880 + 17876 17880 17881 + 17881 17882 17876 + 17876 17882 17453 + 17882 17454 17453 + 17346 17878 17347 + 17367 17878 17346 + 17367 17879 17878 + 17879 17367 17375 + 17375 17883 17879 + 17879 17883 17880 + 17883 17881 17880 + 17389 17881 17883 + 17882 17881 17389 + 17882 17389 17884 + 17884 17454 17882 + 17884 17437 17454 + 17437 17884 17388 + 17388 17884 17389 + 17885 17883 17375 + 17883 17885 17389 + 17389 17885 17384 + 17373 17384 17885 + 17885 17374 17373 + 17375 17374 17885 + 17470 17863 17471 + 17863 17470 17858 + 17858 17470 17469 + 17469 17859 17858 + 17859 17469 17853 + 17853 17469 17468 + 17468 17886 17853 + 17853 17886 17854 + 17887 17854 17886 + 17854 17887 17888 + 17888 17849 17854 + 17886 17468 17889 + 17886 17889 17887 + 17890 17887 17889 + 17888 17887 17890 + 17890 17891 17888 + 17892 17888 17891 + 17849 17888 17892 + 17892 17844 17849 + 17889 17468 17467 + 17467 17893 17889 + 17889 17893 17890 + 17894 17890 17893 + 17890 17894 17895 + 17895 17891 17890 + 17891 17895 17896 + 17896 17897 17891 + 17891 17897 17892 + 17893 17467 17898 + 17893 17898 17894 + 17899 17894 17898 + 17895 17894 17899 + 17899 17900 17895 + 17896 17895 17900 + 17900 17901 17896 + 17902 17896 17901 + 17897 17896 17902 + 17898 17467 17466 + 17466 17903 17898 + 17898 17903 17899 + 17904 17899 17903 + 17899 17904 17905 + 17905 17900 17899 + 17900 17905 17906 + 17906 17901 17900 + 17903 17466 17907 + 17903 17907 17904 + 17908 17904 17907 + 17905 17904 17908 + 17908 17909 17905 + 17906 17905 17909 + 17909 17910 17906 + 17911 17906 17910 + 17901 17906 17911 + 17907 17466 17465 + 17465 17912 17907 + 17907 17912 17908 + 17913 17908 17912 + 17908 17913 17914 + 17914 17909 17908 + 17909 17914 17915 + 17915 17910 17909 + 17912 17465 17916 + 17912 17916 17913 + 17917 17913 17916 + 17914 17913 17917 + 17917 17918 17914 + 17915 17914 17918 + 17918 17919 17915 + 17920 17915 17919 + 17910 17915 17920 + 17916 17465 17464 + 17464 17921 17916 + 17916 17921 17922 + 17922 17923 17916 + 17923 17917 17916 + 17924 17917 17923 + 17917 17924 17918 + 17918 17924 17925 + 17925 17919 17918 + 17921 17464 17476 + 17921 17476 17926 + 17926 17922 17921 + 17922 17926 17927 + 17927 17928 17922 + 17922 17928 17929 + 17929 17923 17922 + 17923 17929 17930 + 17923 17930 17924 + 17925 17924 17930 + 17480 17926 17476 + 17927 17926 17480 + 17480 17931 17927 + 17927 17931 17932 + 17932 17933 17927 + 17928 17927 17933 + 17933 17934 17928 + 17929 17928 17934 + 17484 17931 17480 + 17931 17484 17489 + 17489 17932 17931 + 17932 17489 17935 + 17935 17936 17932 + 17932 17936 17937 + 17937 17933 17932 + 17934 17933 17937 + 17935 17489 17488 + 17488 17938 17935 + 17935 17938 17939 + 17939 17940 17935 + 17936 17935 17940 + 17940 17941 17936 + 17936 17941 17942 + 17942 17937 17936 + 17938 17488 17494 + 17938 17494 17943 + 17943 17939 17938 + 17939 17943 17944 + 17944 17945 17939 + 17939 17945 17946 + 17946 17940 17939 + 17941 17940 17946 + 17498 17943 17494 + 17944 17943 17498 + 17498 17505 17944 + 17947 17944 17505 + 17945 17944 17947 + 17947 17948 17945 + 17945 17948 17949 + 17949 17950 17945 + 17950 17951 17945 + 17951 17946 17945 + 17952 17947 17505 + 17953 17947 17952 + 17948 17947 17953 + 17953 17954 17948 + 17948 17954 17955 + 17955 17949 17948 + 17505 17509 17952 + 17956 17952 17509 + 17957 17952 17956 + 17952 17957 17953 + 17958 17953 17957 + 17954 17953 17958 + 17509 17514 17956 + 17959 17956 17514 + 17957 17956 17959 + 17959 17960 17957 + 17957 17960 17958 + 17961 17958 17960 + 17962 17958 17961 + 17958 17962 17954 + 17514 17963 17959 + 17964 17959 17963 + 17960 17959 17964 + 17964 17965 17960 + 17960 17965 17961 + 17966 17961 17965 + 17967 17961 17966 + 17961 17967 17962 + 17513 17963 17514 + 17963 17513 17519 + 17519 17968 17963 + 17963 17968 17964 + 17969 17964 17968 + 17965 17964 17969 + 17969 17970 17965 + 17965 17970 17966 + 17968 17519 17524 + 17524 17971 17968 + 17968 17971 17969 + 17972 17969 17971 + 17969 17972 17973 + 17973 17970 17969 + 17970 17973 17974 + 17974 17966 17970 + 17533 17971 17524 + 17971 17533 17972 + 17550 17972 17533 + 17973 17972 17550 + 17550 17975 17973 + 17973 17975 17976 + 17976 17974 17973 + 17977 17974 17976 + 17966 17974 17977 + 17977 17978 17966 + 17966 17978 17967 + 17549 17975 17550 + 17975 17549 17979 + 17979 17976 17975 + 17976 17979 17980 + 17980 17981 17976 + 17976 17981 17977 + 17977 17981 17982 + 17982 17983 17977 + 17978 17977 17983 + 17554 17979 17549 + 17980 17979 17554 + 17554 17984 17980 + 17980 17984 17985 + 17985 17986 17980 + 17981 17980 17986 + 17986 17982 17981 + 17558 17984 17554 + 17984 17558 17987 + 17987 17985 17984 + 17985 17987 17988 + 17988 17989 17985 + 17985 17989 17990 + 17990 17986 17985 + 17982 17986 17990 + 17562 17987 17558 + 17988 17987 17562 + 17562 17991 17988 + 17988 17991 17992 + 17992 17993 17988 + 17989 17988 17993 + 17993 17994 17989 + 17990 17989 17994 + 17566 17991 17562 + 17991 17566 17995 + 17995 17992 17991 + 17992 17995 17996 + 17996 17997 17992 + 17992 17997 17998 + 17998 17993 17992 + 17994 17993 17998 + 17571 17995 17566 + 17996 17995 17571 + 17571 17999 17996 + 17996 17999 18000 + 18000 18001 17996 + 17997 17996 18001 + 18001 18002 17997 + 17998 17997 18002 + 17574 17999 17571 + 17999 17574 18003 + 18003 18000 17999 + 18000 18003 18004 + 18004 18005 18000 + 18000 18005 18006 + 18006 18001 18000 + 18002 18001 18006 + 17578 18003 17574 + 18004 18003 17578 + 17578 18007 18004 + 18004 18007 18008 + 18008 18009 18004 + 18005 18004 18009 + 18009 18010 18005 + 18006 18005 18010 + 17582 18007 17578 + 18007 17582 18011 + 18011 18008 18007 + 18008 18011 18012 + 18012 18013 18008 + 18008 18013 18014 + 18014 18009 18008 + 18010 18009 18014 + 18015 18011 17582 + 18012 18011 18015 + 18015 18016 18012 + 18012 18016 18017 + 18017 18018 18012 + 18013 18012 18018 + 17582 17586 18015 + 18019 18015 17586 + 18016 18015 18019 + 18019 18020 18016 + 18016 18020 18021 + 18021 18017 18016 + 18022 18017 18021 + 18017 18022 18023 + 18023 18018 18017 + 17586 17590 18019 + 18024 18019 17590 + 18020 18019 18024 + 18024 18025 18020 + 18020 18025 18026 + 18026 18021 18020 + 18027 18021 18026 + 18021 18027 18022 + 17590 17594 18024 + 18028 18024 17594 + 18025 18024 18028 + 18028 18029 18025 + 18025 18029 18030 + 18030 18026 18025 + 18031 18026 18030 + 18026 18031 18027 + 18032 18027 18031 + 18022 18027 18032 + 17594 17598 18028 + 18033 18028 17598 + 18029 18028 18033 + 18033 18034 18029 + 18029 18034 18035 + 18030 18029 18035 + 17598 17602 18033 + 17611 18033 17602 + 18034 18033 17611 + 17611 17616 18034 + 18034 17616 18036 + 18036 118 18034 + 18037 118 18036 + 118 18037 18038 + 18037 18039 18038 + 257 18039 18037 + 17621 18036 17616 + 18040 18036 17621 + 18036 18040 18037 + 18037 18040 257 + 257 18040 17626 + 18041 257 17626 + 18042 257 18041 + 257 18042 18043 + 17621 17626 18040 + 17630 18041 17626 + 18041 17630 17639 + 18044 18041 17639 + 18041 18044 18042 + 18045 18042 18044 + 18043 18042 18045 + 18045 18046 18043 + 18043 18046 18030 + 18047 18030 18046 + 18030 18047 18031 + 18044 17639 17644 + 17644 18048 18044 + 18044 18048 18045 + 18049 18045 18048 + 18045 18049 18050 + 18050 18046 18045 + 18046 18050 18047 + 18051 18047 18050 + 18031 18047 18051 + 18051 18052 18031 + 18031 18052 18032 + 18053 18048 17644 + 18048 18053 18049 + 18054 18049 18053 + 18050 18049 18054 + 18054 18055 18050 + 18050 18055 18051 + 18056 18051 18055 + 18051 18056 18057 + 18057 18052 18051 + 17644 18058 18053 + 18053 18058 18059 + 18059 18060 18053 + 18053 18060 18054 + 18061 18054 18060 + 18054 18061 18062 + 18062 18055 18054 + 18055 18062 18056 + 18058 17644 17643 + 17643 17649 18058 + 18059 18058 17649 + 17649 17658 18059 + 18063 18059 17658 + 18059 18063 18064 + 18064 18060 18059 + 18060 18064 18061 + 18065 18061 18064 + 18062 18061 18065 + 18065 18066 18062 + 18062 18066 18067 + 18067 18056 18062 + 18057 18056 18067 + 17658 17657 18063 + 18068 18063 17657 + 18064 18063 18068 + 18068 18069 18064 + 18064 18069 18065 + 18070 18065 18069 + 18065 18070 18071 + 18071 18066 18065 + 18066 18071 18072 + 18072 18067 18066 + 17657 18073 18068 + 18074 18068 18073 + 18068 18074 18075 + 18075 18069 18068 + 18069 18075 18070 + 18076 18070 18075 + 18071 18070 18076 + 17662 18073 17657 + 17674 18073 17662 + 18073 17674 18074 + 18077 18074 17674 + 18075 18074 18077 + 18077 18078 18075 + 18075 18078 18076 + 18079 18076 18078 + 18076 18079 18080 + 18080 18081 18076 + 18076 18081 18071 + 17674 17683 18077 + 18082 18077 17683 + 18077 18082 18083 + 18083 18078 18077 + 18078 18083 18079 + 18084 18079 18083 + 18080 18079 18084 + 17683 17682 18082 + 17692 18082 17682 + 18083 18082 17692 + 17692 18085 18083 + 18083 18085 18084 + 18086 18084 18085 + 18084 18086 18087 + 18087 18088 18084 + 18084 18088 18080 + 17696 18085 17692 + 18085 17696 18086 + 18089 18086 17696 + 18087 18086 18089 + 18089 18090 18087 + 18087 18090 18091 + 18091 18092 18087 + 18088 18087 18092 + 18092 18093 18088 + 18080 18088 18093 + 17696 17701 18089 + 17700 18089 17701 + 18089 17700 18094 + 18094 18090 18089 + 18090 18094 18095 + 18095 18091 18090 + 18091 18095 18096 + 18096 18097 18091 + 18091 18097 18098 + 18098 18092 18091 + 18093 18092 18098 + 18094 17700 17699 + 17699 18099 18094 + 18095 18094 18099 + 18099 18100 18095 + 18096 18095 18100 + 18100 18101 18096 + 18102 18096 18101 + 18097 18096 18102 + 18102 18103 18097 + 18098 18097 18103 + 18099 17699 17705 + 17705 17723 18099 + 18099 17723 18104 + 18104 18100 18099 + 18101 18100 18104 + 18104 18105 18101 + 18101 18105 18106 + 18106 18107 18101 + 18101 18107 18102 + 18108 18102 18107 + 18103 18102 18108 + 17728 18104 17723 + 18105 18104 17728 + 17728 18109 18105 + 18105 18109 18110 + 18110 18106 18105 + 18111 18106 18110 + 18106 18111 18112 + 18112 18107 18106 + 18107 18112 18108 + 18113 18109 17728 + 18109 18113 18114 + 18114 18110 18109 + 18110 18114 18115 + 18115 18116 18110 + 18110 18116 18111 + 17728 17727 18113 + 18113 17727 17726 + 17726 18117 18113 + 18113 18117 18118 + 18118 18114 18113 + 18115 18114 18118 + 18118 18119 18115 + 18115 18119 18120 + 18120 18121 18115 + 18116 18115 18121 + 17735 18117 17726 + 18117 17735 18122 + 18122 18118 18117 + 18118 18122 17752 + 17752 18119 18118 + 18119 17752 18123 + 18123 18120 18119 + 17739 18122 17735 + 17752 18122 17739 + 17751 18123 17752 + 18124 18123 17751 + 18120 18123 18124 + 18124 18125 18120 + 18120 18125 18126 + 18126 18121 18120 + 18127 18121 18126 + 18121 18127 18116 + 18111 18116 18127 + 18127 18128 18111 + 18112 18111 18128 + 17751 18129 18124 + 18124 18129 18130 + 18130 18131 18124 + 18125 18124 18131 + 18131 18132 18125 + 18126 18125 18132 + 17750 18129 17751 + 18129 17750 17761 + 17761 18130 18129 + 18133 18130 17761 + 18130 18133 18134 + 18134 18131 18130 + 18131 18134 18135 + 18135 18132 18131 + 18132 18135 18136 + 18136 18137 18132 + 18132 18137 18126 + 17761 17760 18133 + 18133 17760 18138 + 18138 18139 18133 + 18134 18133 18139 + 18139 18140 18134 + 18135 18134 18140 + 18140 18141 18135 + 18136 18135 18141 + 17765 18138 17760 + 18142 18138 17765 + 18138 18142 18143 + 18143 18139 18138 + 18139 18143 18144 + 18144 18140 18139 + 18140 18144 18145 + 18145 18141 18140 + 17765 17769 18142 + 18142 17769 18146 + 18146 18147 18142 + 18143 18142 18147 + 18147 18148 18143 + 18144 18143 18148 + 18148 18149 18144 + 18145 18144 18149 + 17773 18146 17769 + 18150 18146 17773 + 18146 18150 18151 + 18151 18147 18146 + 18147 18151 18152 + 18152 18148 18147 + 18148 18152 18153 + 18153 18149 18148 + 17773 17777 18150 + 18150 17777 18154 + 18154 18155 18150 + 18151 18150 18155 + 18155 18156 18151 + 18152 18151 18156 + 18156 18157 18152 + 18153 18152 18157 + 17781 18154 17777 + 18158 18154 17781 + 18154 18158 18159 + 18159 18155 18154 + 18155 18159 18160 + 18160 18156 18155 + 18156 18160 18161 + 18161 18157 18156 + 17781 17785 18158 + 18158 17785 18162 + 18162 18163 18158 + 18159 18158 18163 + 18163 18164 18159 + 18160 18159 18164 + 18164 18165 18160 + 18161 18160 18165 + 17790 18162 17785 + 18166 18162 17790 + 18162 18166 18167 + 18167 18163 18162 + 18163 18167 18168 + 18168 18164 18163 + 18164 18168 18169 + 18169 18165 18164 + 17790 17795 18166 + 18166 17795 18170 + 18170 18171 18166 + 18167 18166 18171 + 18171 18172 18167 + 18168 18167 18172 + 18172 18173 18168 + 18169 18168 18173 + 17800 18170 17795 + 18174 18170 17800 + 18170 18174 18171 + 18171 18174 18175 + 18175 18172 18171 + 18173 18172 18175 + 18175 18176 18173 + 18173 18176 18177 + 18177 18178 18173 + 18173 18178 18169 + 17800 18179 18174 + 18174 18179 18180 + 18175 18174 18180 + 18180 18181 18175 + 18176 18175 18181 + 18181 18182 18176 + 18177 18176 18182 + 17804 18179 17800 + 18179 17804 18183 + 18183 18180 18179 + 18180 18183 18184 + 18184 18185 18180 + 18180 18185 18186 + 18186 18181 18180 + 18181 18186 18182 + 17808 18183 17804 + 18184 18183 17808 + 17808 18187 18184 + 18184 18187 18188 + 18188 18189 18184 + 18185 18184 18189 + 18189 18190 18185 + 18186 18185 18190 + 18191 18186 18190 + 18182 18186 18191 + 17812 18187 17808 + 18187 17812 18192 + 18192 18188 18187 + 18188 18192 18193 + 18193 18194 18188 + 18188 18194 18195 + 18195 18189 18188 + 18190 18189 18195 + 18192 17812 17811 + 17811 18196 18192 + 18193 18192 18196 + 18196 18197 18193 + 18193 18197 17902 + 17902 18198 18193 + 18194 18193 18198 + 17816 18196 17811 + 18197 18196 17816 + 17816 17824 18197 + 18197 17824 18199 + 18199 17902 18197 + 17902 18199 17897 + 17897 18199 18200 + 18200 17892 17897 + 17844 17892 18200 + 18200 17829 17844 + 18199 17824 17823 + 17823 18200 18199 + 17829 18200 17823 + 17901 18198 17902 + 17911 18198 17901 + 18198 17911 18194 + 18194 17911 18201 + 18201 18195 18194 + 18202 18195 18201 + 18195 18202 18190 + 18190 18202 18203 + 18203 18204 18190 + 18190 18204 18191 + 17910 18201 17911 + 17920 18201 17910 + 18201 17920 18202 + 18202 17920 18205 + 18205 18203 18202 + 18206 18203 18205 + 18203 18206 18207 + 18207 18204 18203 + 18204 18207 18208 + 18208 18191 18204 + 17919 18205 17920 + 18209 18205 17919 + 18205 18209 18206 + 18206 18209 18210 + 18210 18211 18206 + 18207 18206 18211 + 18211 18212 18207 + 18207 18212 18213 + 18213 18208 18207 + 17919 17925 18209 + 18209 17925 18214 + 18214 18210 18209 + 18210 18214 18215 + 18210 18215 18216 + 18216 18211 18210 + 18211 18216 18217 + 18217 18212 18211 + 18212 18217 18218 + 18218 18213 18212 + 18214 17925 17930 + 17930 18219 18214 + 18215 18214 18219 + 18219 18220 18215 + 18216 18215 18220 + 18220 18221 18216 + 18217 18216 18221 + 18221 18222 18217 + 18217 18222 18223 + 18223 18218 18217 + 18224 18219 17930 + 18219 18224 18225 + 18225 18220 18219 + 18220 18225 18226 + 18226 18221 18220 + 18221 18226 18227 + 18227 18222 18221 + 18222 18227 18228 + 18228 18223 18222 + 17930 17929 18224 + 18229 18224 17929 + 18225 18224 18229 + 18229 18230 18225 + 18226 18225 18230 + 18230 18231 18226 + 18227 18226 18231 + 17934 18229 17929 + 18232 18229 17934 + 18230 18229 18232 + 18230 18232 18233 + 18233 18231 18230 + 18231 18233 18234 + 18234 18235 18231 + 18231 18235 18227 + 17934 18236 18232 + 18233 18232 18236 + 18236 18237 18233 + 18234 18233 18237 + 17937 18236 17934 + 18236 17937 17942 + 17942 18237 18236 + 18237 17942 18238 + 18238 18239 18237 + 18237 18239 18234 + 18238 17942 17941 + 17941 18240 18238 + 18238 18240 18241 + 18241 18242 18238 + 18242 18243 18238 + 18243 18244 18238 + 18239 18238 18244 + 17946 18240 17941 + 18240 17946 17951 + 17951 18241 18240 + 18241 17951 18245 + 18245 18246 18241 + 18241 18246 18247 + 18247 18242 18241 + 18248 18242 18247 + 18242 18248 18249 + 18249 18243 18242 + 18245 17951 17950 + 17950 18250 18245 + 18251 18245 18250 + 18246 18245 18251 + 18251 18252 18246 + 18246 18252 18253 + 18253 18247 18246 + 18248 18247 18253 + 18253 18254 18248 + 18249 18248 18254 + 18250 17950 18255 + 18250 18255 18256 + 18256 18257 18250 + 18250 18257 18251 + 18258 18251 18257 + 18252 18251 18258 + 18255 17950 17949 + 17949 18259 18255 + 18256 18255 18259 + 18259 18260 18256 + 18261 18256 18260 + 18257 18256 18261 + 18261 18262 18257 + 18257 18262 18258 + 18259 17949 17955 + 18259 17955 18263 + 18263 18260 18259 + 18260 18263 18264 + 18264 18265 18260 + 18260 18265 18261 + 18266 18261 18265 + 18262 18261 18266 + 18263 17955 17954 + 18267 18263 17954 + 18264 18263 18267 + 18267 18268 18264 + 18269 18264 18268 + 18265 18264 18269 + 18269 18270 18265 + 18265 18270 18266 + 17954 17962 18267 + 18271 18267 17962 + 18268 18267 18271 + 18268 18271 18272 + 18272 18273 18268 + 18268 18273 18269 + 18274 18269 18273 + 18269 18274 18275 + 18275 18270 18269 + 17962 17967 18271 + 18272 18271 17967 + 17967 17978 18272 + 17983 18272 17978 + 18272 17983 18276 + 18276 18273 18272 + 18273 18276 18274 + 18277 18274 18276 + 18275 18274 18277 + 18277 18278 18275 + 18275 18278 18279 + 18279 18280 18275 + 18270 18275 18280 + 18280 18266 18270 + 18276 17983 17982 + 17982 18281 18276 + 18276 18281 18277 + 18282 18277 18281 + 18277 18282 18283 + 18283 18278 18277 + 18278 18283 18284 + 18284 18279 18278 + 17990 18281 17982 + 18281 17990 18282 + 17994 18282 17990 + 18283 18282 17994 + 17994 18285 18283 + 18283 18285 18286 + 18286 18284 18283 + 18287 18284 18286 + 18279 18284 18287 + 18287 18288 18279 + 18279 18288 18289 + 18289 18280 18279 + 18266 18280 18289 + 17998 18285 17994 + 18285 17998 18290 + 18290 18286 18285 + 18286 18290 18291 + 18291 18292 18286 + 18286 18292 18287 + 18287 18292 18293 + 18293 18294 18287 + 18288 18287 18294 + 18002 18290 17998 + 18291 18290 18002 + 18002 18295 18291 + 18291 18295 18296 + 18296 18297 18291 + 18292 18291 18297 + 18297 18293 18292 + 18006 18295 18002 + 18295 18006 18298 + 18298 18296 18295 + 18296 18298 18299 + 18299 18300 18296 + 18296 18300 18301 + 18301 18297 18296 + 18293 18297 18301 + 18010 18298 18006 + 18299 18298 18010 + 18010 18302 18299 + 18299 18302 18303 + 18303 18304 18299 + 18300 18299 18304 + 18304 18305 18300 + 18301 18300 18305 + 18014 18302 18010 + 18302 18014 18306 + 18306 18303 18302 + 18303 18306 18307 + 18303 18307 18308 + 18308 18304 18303 + 18305 18304 18308 + 18308 18309 18305 + 18305 18309 18310 + 18310 18311 18305 + 18305 18311 18301 + 18307 18306 18312 + 18312 18313 18307 + 18308 18307 18313 + 18313 18314 18308 + 18309 18308 18314 + 18314 18315 18309 + 18309 18315 18316 + 18316 18310 18309 + 18313 18312 18317 + 18313 18317 18318 + 18318 18314 18313 + 18315 18314 18318 + 18318 18319 18315 + 18315 18319 18320 + 18320 18316 18315 + 18317 18312 18321 + 18321 18322 18317 + 18317 18322 18323 + 18323 18318 18317 + 18319 18318 18323 + 18323 18324 18319 + 18319 18324 18325 + 18325 18320 18319 + 18326 18321 18312 + 18327 18321 18326 + 18322 18321 18327 + 18327 18328 18322 + 18322 18328 18329 + 18329 18323 18322 + 18324 18323 18329 + 18013 18326 18312 + 18018 18326 18013 + 18326 18018 18023 + 18023 18330 18326 + 18326 18330 18327 + 18331 18327 18330 + 18328 18327 18331 + 18014 18013 18312 + 18331 18332 18328 + 18332 18331 18333 + 18333 18334 18332 + 18332 18334 18335 + 18335 18336 18332 + 18328 18332 18336 + 18336 18329 18328 + 18337 18329 18336 + 18329 18337 18324 + 18333 18331 18338 + 18338 18339 18333 + 18340 18333 18339 + 18334 18333 18340 + 18340 18341 18334 + 18334 18341 18342 + 18342 18335 18334 + 18330 18338 18331 + 18343 18338 18330 + 18338 18343 18344 + 18344 18339 18338 + 18339 18344 18345 + 18345 18346 18339 + 18339 18346 18340 + 18347 18340 18346 + 18341 18340 18347 + 18330 18023 18343 + 18343 18023 18022 + 18022 18348 18343 + 18344 18343 18348 + 18348 18349 18344 + 18345 18344 18349 + 18349 18350 18345 + 18351 18345 18350 + 18345 18351 18352 + 18352 18346 18345 + 18346 18352 18347 + 18032 18348 18022 + 18349 18348 18032 + 18032 18353 18349 + 18349 18353 18354 + 18354 18350 18349 + 18355 18350 18354 + 18350 18355 18351 + 18356 18351 18355 + 18352 18351 18356 + 18353 18032 18052 + 18052 18057 18353 + 18354 18353 18057 + 18057 18357 18354 + 18358 18354 18357 + 18354 18358 18355 + 18355 18358 18359 + 18359 18360 18355 + 18355 18360 18356 + 18067 18357 18057 + 18361 18357 18067 + 18357 18361 18358 + 18359 18358 18361 + 18361 18362 18359 + 18363 18359 18362 + 18359 18363 18364 + 18364 18360 18359 + 18360 18364 18365 + 18365 18356 18360 + 18067 18072 18361 + 18361 18072 18366 + 18366 18362 18361 + 18367 18362 18366 + 18362 18367 18363 + 18368 18363 18367 + 18364 18363 18368 + 18368 18369 18364 + 18364 18369 18370 + 18370 18365 18364 + 18366 18072 18071 + 18071 18081 18366 + 18371 18366 18081 + 18366 18371 18367 + 18367 18371 18093 + 18093 18372 18367 + 18367 18372 18368 + 18373 18368 18372 + 18368 18373 18374 + 18374 18369 18368 + 18081 18080 18371 + 18093 18371 18080 + 18098 18372 18093 + 18372 18098 18373 + 18103 18373 18098 + 18374 18373 18103 + 18103 18375 18374 + 18374 18375 18376 + 18376 18377 18374 + 18369 18374 18377 + 18377 18370 18369 + 18108 18375 18103 + 18375 18108 18378 + 18378 18376 18375 + 18376 18378 18379 + 18379 18380 18376 + 18376 18380 18381 + 18381 18377 18376 + 18370 18377 18381 + 18378 18108 18112 + 18112 18382 18378 + 18379 18378 18382 + 18382 18383 18379 + 18379 18383 18384 + 18384 18385 18379 + 18380 18379 18385 + 18385 18386 18380 + 18381 18380 18386 + 18128 18382 18112 + 18382 18128 18387 + 18387 18383 18382 + 18383 18387 18388 + 18388 18384 18383 + 18389 18384 18388 + 18384 18389 18390 + 18390 18385 18384 + 18385 18390 18391 + 18391 18386 18385 + 18387 18128 18127 + 18127 18392 18387 + 18387 18392 18393 + 18393 18388 18387 + 18394 18388 18393 + 18388 18394 18389 + 18389 18394 18395 + 18395 18396 18389 + 18390 18389 18396 + 18126 18392 18127 + 18392 18126 18137 + 18137 18393 18392 + 18397 18393 18137 + 18393 18397 18394 + 18394 18397 18398 + 18398 18395 18394 + 18399 18395 18398 + 18395 18399 18400 + 18400 18396 18395 + 18137 18136 18397 + 18397 18136 18401 + 18401 18398 18397 + 18402 18398 18401 + 18398 18402 18399 + 18399 18402 18403 + 18403 18404 18399 + 18400 18399 18404 + 18141 18401 18136 + 18405 18401 18141 + 18401 18405 18402 + 18402 18405 18406 + 18406 18403 18402 + 18407 18403 18406 + 18403 18407 18408 + 18408 18404 18403 + 18141 18145 18405 + 18405 18145 18409 + 18409 18406 18405 + 18410 18406 18409 + 18406 18410 18407 + 18407 18410 18411 + 18411 18412 18407 + 18408 18407 18412 + 18149 18409 18145 + 18413 18409 18149 + 18409 18413 18410 + 18410 18413 18414 + 18414 18411 18410 + 18415 18411 18414 + 18411 18415 18416 + 18416 18412 18411 + 18149 18153 18413 + 18413 18153 18417 + 18417 18414 18413 + 18418 18414 18417 + 18414 18418 18415 + 18415 18418 18419 + 18419 18420 18415 + 18416 18415 18420 + 18157 18417 18153 + 18421 18417 18157 + 18417 18421 18418 + 18418 18421 18422 + 18422 18419 18418 + 18423 18419 18422 + 18419 18423 18424 + 18424 18420 18419 + 18157 18161 18421 + 18421 18161 18425 + 18425 18422 18421 + 18426 18422 18425 + 18422 18426 18423 + 18423 18426 18427 + 18427 18428 18423 + 18424 18423 18428 + 18165 18425 18161 + 18429 18425 18165 + 18425 18429 18426 + 18426 18429 18430 + 18430 18427 18426 + 18431 18427 18430 + 18428 18427 18431 + 18165 18169 18429 + 18429 18169 18178 + 18178 18430 18429 + 18430 18178 18177 + 18177 18432 18430 + 18430 18432 18431 + 18431 18432 18433 + 18433 18434 18431 + 18435 18431 18434 + 18431 18435 18428 + 18432 18177 18436 + 18436 18433 18432 + 18433 18436 18191 + 18191 18208 18433 + 18433 18208 18213 + 18213 18434 18433 + 18437 18434 18213 + 18434 18437 18435 + 18182 18436 18177 + 18191 18436 18182 + 18213 18218 18437 + 18437 18218 18223 + 18223 18438 18437 + 18437 18438 18439 + 18439 18440 18437 + 18440 18435 18437 + 18428 18435 18440 + 18440 18441 18428 + 18428 18441 18424 + 18442 18438 18223 + 18438 18442 18443 + 18443 18439 18438 + 18439 18443 18444 + 18444 18445 18439 + 18439 18445 18446 + 18446 18440 18439 + 18441 18440 18446 + 18223 18228 18442 + 18442 18228 18447 + 18447 18448 18442 + 18442 18448 18449 + 18449 18443 18442 + 18444 18443 18449 + 18447 18228 18227 + 18450 18447 18227 + 18451 18447 18450 + 18448 18447 18451 + 18448 18451 18452 + 18452 18449 18448 + 18449 18452 18453 + 18453 18454 18449 + 18449 18454 18444 + 18227 18235 18450 + 18455 18450 18235 + 18450 18455 18456 + 18456 18457 18450 + 18450 18457 18451 + 18451 18457 18458 + 18458 18452 18451 + 18453 18452 18458 + 18235 18234 18455 + 18459 18455 18234 + 18456 18455 18459 + 18459 18460 18456 + 18456 18460 18461 + 18461 18462 18456 + 18462 18463 18456 + 18457 18456 18463 + 18463 18458 18457 + 18464 18459 18234 + 18465 18459 18464 + 18460 18459 18465 + 18460 18465 18466 + 18466 18461 18460 + 18467 18464 18234 + 18468 18464 18467 + 18469 18464 18468 + 18464 18469 18465 + 18465 18469 18470 + 18470 18466 18465 + 18471 18466 18470 + 18461 18466 18471 + 18234 18239 18467 + 18244 18467 18239 + 18467 18244 18472 + 18472 18473 18467 + 18467 18473 18468 + 18468 18473 18474 + 18474 18475 18468 + 18469 18468 18475 + 18475 18470 18469 + 18472 18244 18243 + 18243 18476 18472 + 18472 18476 18477 + 18477 18478 18472 + 18473 18472 18478 + 18478 18474 18473 + 18476 18243 18249 + 18476 18249 18479 + 18479 18477 18476 + 18477 18479 18480 + 18480 18481 18477 + 18477 18481 18482 + 18482 18478 18477 + 18474 18478 18482 + 18254 18479 18249 + 18480 18479 18254 + 18254 18483 18480 + 18480 18483 18484 + 18484 18485 18480 + 18481 18480 18485 + 18485 18486 18481 + 18481 18486 18487 + 18487 18482 18481 + 18488 18483 18254 + 18483 18488 18489 + 18489 18484 18483 + 18490 18484 18489 + 18484 18490 18491 + 18491 18485 18484 + 18485 18491 18492 + 18492 18486 18485 + 18254 18253 18488 + 18488 18253 18252 + 18252 18493 18488 + 18488 18493 18494 + 18494 18489 18488 + 18495 18489 18494 + 18489 18495 18490 + 18490 18495 18496 + 18496 18497 18490 + 18491 18490 18497 + 18258 18493 18252 + 18493 18258 18498 + 18498 18494 18493 + 18499 18494 18498 + 18494 18499 18495 + 18496 18495 18499 + 18499 18500 18496 + 18501 18496 18500 + 18496 18501 18502 + 18502 18497 18496 + 18498 18258 18262 + 18262 18503 18498 + 18504 18498 18503 + 18498 18504 18499 + 18499 18504 18505 + 18505 18500 18499 + 18506 18500 18505 + 18500 18506 18501 + 18507 18501 18506 + 18502 18501 18507 + 18266 18503 18262 + 18289 18503 18266 + 18503 18289 18504 + 18505 18504 18289 + 18289 18288 18505 + 18294 18505 18288 + 18505 18294 18506 + 18506 18294 18293 + 18293 18508 18506 + 18506 18508 18507 + 18311 18507 18508 + 18507 18311 18310 + 18310 18509 18507 + 18507 18509 18502 + 18510 18502 18509 + 18497 18502 18510 + 18301 18508 18293 + 18508 18301 18311 + 18509 18310 18316 + 18316 18511 18509 + 18509 18511 18510 + 18512 18510 18511 + 18513 18510 18512 + 18510 18513 18497 + 18497 18513 18491 + 18492 18491 18513 + 18511 18316 18320 + 18320 18514 18511 + 18511 18514 18512 + 18515 18512 18514 + 18516 18512 18515 + 18512 18516 18513 + 18513 18516 18492 + 18517 18492 18516 + 18486 18492 18517 + 18517 18487 18486 + 18514 18320 18325 + 18325 18518 18514 + 18514 18518 18515 + 18519 18515 18518 + 18520 18515 18519 + 18515 18520 18516 + 18516 18520 18517 + 18521 18517 18520 + 18487 18517 18521 + 18518 18325 18522 + 18522 18523 18518 + 18518 18523 18519 + 18524 18519 18523 + 18525 18519 18524 + 18519 18525 18520 + 18520 18525 18521 + 18522 18325 18324 + 18324 18337 18522 + 18526 18522 18337 + 18523 18522 18526 + 18526 18527 18523 + 18523 18527 18524 + 18528 18524 18527 + 18529 18524 18528 + 18524 18529 18525 + 18525 18529 18530 + 18530 18521 18525 + 18337 18531 18526 + 18532 18526 18531 + 18527 18526 18532 + 18532 18533 18527 + 18527 18533 18528 + 18534 18528 18533 + 18535 18528 18534 + 18528 18535 18529 + 18336 18531 18337 + 18531 18336 18335 + 18335 18536 18531 + 18531 18536 18532 + 18537 18532 18536 + 18533 18532 18537 + 18537 18538 18533 + 18533 18538 18534 + 18539 18534 18538 + 18540 18534 18539 + 18534 18540 18535 + 18536 18335 18342 + 18342 18541 18536 + 18536 18541 18537 + 18542 18537 18541 + 18538 18537 18542 + 18542 18543 18538 + 18538 18543 18539 + 18544 18539 18543 + 18545 18539 18544 + 18539 18545 18540 + 18541 18342 18546 + 18546 18547 18541 + 18541 18547 18542 + 18548 18542 18547 + 18543 18542 18548 + 18548 18549 18543 + 18543 18549 18544 + 18546 18342 18341 + 18341 18550 18546 + 18551 18546 18550 + 18547 18546 18551 + 18551 18552 18547 + 18547 18552 18548 + 18553 18548 18552 + 18549 18548 18553 + 18347 18550 18341 + 18550 18347 18554 + 18554 18555 18550 + 18550 18555 18551 + 18556 18551 18555 + 18552 18551 18556 + 18556 18557 18552 + 18552 18557 18553 + 18554 18347 18352 + 18352 18558 18554 + 18559 18554 18558 + 18555 18554 18559 + 18559 18560 18555 + 18555 18560 18556 + 18561 18556 18560 + 18557 18556 18561 + 18356 18558 18352 + 18562 18558 18356 + 18558 18562 18559 + 18563 18559 18562 + 18560 18559 18563 + 18563 18564 18560 + 18560 18564 18561 + 18565 18561 18564 + 18566 18561 18565 + 18561 18566 18557 + 18356 18365 18562 + 18562 18365 18370 + 18370 18567 18562 + 18562 18567 18563 + 18568 18563 18567 + 18564 18563 18568 + 18568 18569 18564 + 18564 18569 18565 + 18570 18565 18569 + 18571 18565 18570 + 18565 18571 18566 + 18381 18567 18370 + 18567 18381 18568 + 18386 18568 18381 + 18569 18568 18386 + 18386 18391 18569 + 18569 18391 18570 + 18572 18570 18391 + 18573 18570 18572 + 18570 18573 18571 + 18571 18573 18574 + 18574 18575 18571 + 18566 18571 18575 + 18575 18576 18566 + 18557 18566 18576 + 18391 18390 18572 + 18396 18572 18390 + 18577 18572 18396 + 18572 18577 18573 + 18573 18577 18578 + 18578 18574 18573 + 18579 18574 18578 + 18574 18579 18580 + 18580 18575 18574 + 18575 18580 18581 + 18581 18576 18575 + 18396 18400 18577 + 18577 18400 18582 + 18582 18578 18577 + 18583 18578 18582 + 18578 18583 18579 + 18579 18583 18584 + 18584 18585 18579 + 18580 18579 18585 + 18585 18586 18580 + 18581 18580 18586 + 18404 18582 18400 + 18587 18582 18404 + 18582 18587 18583 + 18583 18587 18588 + 18588 18584 18583 + 18589 18584 18588 + 18584 18589 18590 + 18590 18585 18584 + 18585 18590 18591 + 18591 18586 18585 + 18404 18408 18587 + 18587 18408 18592 + 18592 18588 18587 + 18593 18588 18592 + 18588 18593 18589 + 18589 18593 18594 + 18594 18595 18589 + 18590 18589 18595 + 18595 18596 18590 + 18591 18590 18596 + 18412 18592 18408 + 18597 18592 18412 + 18592 18597 18593 + 18593 18597 18598 + 18598 18594 18593 + 18599 18594 18598 + 18594 18599 18600 + 18600 18595 18594 + 18595 18600 18601 + 18601 18596 18595 + 18412 18416 18597 + 18597 18416 18602 + 18602 18598 18597 + 18603 18598 18602 + 18598 18603 18599 + 18599 18603 18445 + 18445 18444 18599 + 18600 18599 18444 + 18444 18454 18600 + 18601 18600 18454 + 18420 18602 18416 + 18604 18602 18420 + 18602 18604 18603 + 18603 18604 18446 + 18446 18445 18603 + 18420 18424 18604 + 18604 18424 18441 + 18441 18446 18604 + 18454 18453 18601 + 18605 18601 18453 + 18596 18601 18605 + 18605 18606 18596 + 18596 18606 18591 + 18607 18591 18606 + 18586 18591 18607 + 18453 18608 18605 + 18609 18605 18608 + 18606 18605 18609 + 18609 18610 18606 + 18606 18610 18607 + 18611 18607 18610 + 18612 18607 18611 + 18607 18612 18586 + 18586 18612 18581 + 18458 18608 18453 + 18613 18608 18458 + 18608 18613 18609 + 18614 18609 18613 + 18610 18609 18614 + 18614 18615 18610 + 18610 18615 18611 + 18616 18611 18615 + 18617 18611 18616 + 18611 18617 18612 + 18458 18463 18613 + 18613 18463 18462 + 18462 18618 18613 + 18613 18618 18614 + 18619 18614 18618 + 18615 18614 18619 + 18619 18620 18615 + 18615 18620 18616 + 18545 18616 18620 + 18544 18616 18545 + 18616 18544 18617 + 18618 18462 18621 + 18618 18621 18619 + 18622 18619 18621 + 18620 18619 18622 + 18622 18623 18620 + 18620 18623 18545 + 18540 18545 18623 + 18623 18624 18540 + 18535 18540 18624 + 18621 18462 18461 + 18461 18625 18621 + 18621 18625 18622 + 18626 18622 18625 + 18623 18622 18626 + 18626 18624 18623 + 18624 18626 18627 + 18627 18628 18624 + 18624 18628 18535 + 18529 18535 18628 + 18628 18530 18529 + 18471 18625 18461 + 18625 18471 18626 + 18627 18626 18471 + 18471 18629 18627 + 18630 18627 18629 + 18628 18627 18630 + 18630 18530 18628 + 18530 18630 18631 + 18631 18521 18530 + 18521 18631 18487 + 18470 18629 18471 + 18632 18629 18470 + 18629 18632 18630 + 18631 18630 18632 + 18632 18633 18631 + 18487 18631 18633 + 18633 18482 18487 + 18482 18633 18474 + 18474 18633 18632 + 18632 18475 18474 + 18470 18475 18632 + 18617 18544 18549 + 18549 18634 18617 + 18612 18617 18634 + 18634 18581 18612 + 18576 18581 18634 + 18634 18553 18576 + 18576 18553 18557 + 18553 18634 18549 + 18635 13255 13261 + 13255 18635 18636 + 18636 13256 13255 + 18637 13256 18636 + 13256 18637 13257 + 13261 18638 18635 + 18635 18638 18639 + 18639 18640 18635 + 18636 18635 18640 + 18638 13261 18641 + 18641 18642 18638 + 18638 18642 18643 + 18643 18639 18638 + 18644 18639 18643 + 18639 18644 18645 + 18645 18640 18639 + 13261 18646 18641 + 18647 18641 18646 + 18642 18641 18647 + 18647 18648 18642 + 18642 18648 18649 + 18649 18643 18642 + 18650 18643 18649 + 18643 18650 18644 + 13260 18646 13261 + 18646 13260 18651 + 18651 18652 18646 + 18646 18652 18647 + 18651 13260 13259 + 13259 18653 18651 + 18651 18653 18654 + 18654 18655 18651 + 18652 18651 18655 + 18655 18656 18652 + 18647 18652 18656 + 18657 18653 13259 + 18653 18657 18658 + 18658 18654 18653 + 18654 18658 18659 + 18659 18660 18654 + 18654 18660 18661 + 18661 18655 18654 + 18656 18655 18661 + 13259 13258 18657 + 18657 13258 18662 + 18662 13264 18657 + 13264 18658 18657 + 18659 18658 13264 + 13264 13263 18659 + 13263 18663 18659 + 18660 18659 18663 + 18663 18664 18660 + 18661 18660 18664 + 18664 18665 18661 + 18666 18661 18665 + 18661 18666 18656 + 18667 18663 13263 + 18664 18663 18667 + 18667 18668 18664 + 18664 18668 18669 + 18669 18665 18664 + 18670 18665 18669 + 18665 18670 18666 + 18671 18666 18670 + 18656 18666 18671 + 13263 13262 18667 + 18672 18667 13262 + 18668 18667 18672 + 18672 18673 18668 + 18668 18673 18674 + 18674 18669 18668 + 18675 18669 18674 + 18669 18675 18670 + 18676 18672 13262 + 18673 18672 18676 + 18676 18677 18673 + 18673 18677 18678 + 18678 18674 18673 + 18679 18674 18678 + 18674 18679 18675 + 18680 18675 18679 + 18670 18675 18680 + 13262 13242 18676 + 18681 18676 13242 + 18677 18676 18681 + 18681 18682 18677 + 18678 18677 18682 + 18682 18683 18678 + 18684 18678 18683 + 18678 18684 18679 + 13242 18685 18681 + 18686 18681 18685 + 18682 18681 18686 + 18686 18687 18682 + 18682 18687 18688 + 18688 18683 18682 + 18689 18683 18688 + 18683 18689 18684 + 13241 18685 13242 + 18685 13241 18690 + 18690 18691 18685 + 18685 18691 18686 + 18692 18686 18691 + 18687 18686 18692 + 18692 18693 18687 + 18687 18693 18694 + 18694 18688 18687 + 18690 13241 13240 + 13240 18695 18690 + 18696 18690 18695 + 18691 18690 18696 + 18696 18697 18691 + 18691 18697 18692 + 18698 18692 18697 + 18693 18692 18698 + 13252 18695 13240 + 18695 13252 18699 + 18699 18700 18695 + 18695 18700 18696 + 18701 18696 18700 + 18697 18696 18701 + 18701 18702 18697 + 18697 18702 18698 + 18699 13252 18703 + 18703 18704 18699 + 18705 18699 18704 + 18700 18699 18705 + 18705 18706 18700 + 18700 18706 18701 + 13251 18703 13252 + 18707 18703 13251 + 18703 18707 18708 + 18708 18704 18703 + 18704 18708 18709 + 18709 18710 18704 + 18704 18710 18705 + 18711 18705 18710 + 18706 18705 18711 + 13251 18712 18707 + 18707 18712 18713 + 18713 18714 18707 + 18708 18707 18714 + 18714 18715 18708 + 18709 18708 18715 + 18712 13251 13250 + 13250 13257 18712 + 18713 18712 13257 + 13257 18637 18713 + 18716 18713 18637 + 18713 18716 18717 + 18717 18714 18713 + 18714 18717 18718 + 18718 18715 18714 + 18715 18718 18719 + 18719 18720 18715 + 18715 18720 18709 + 18637 18721 18716 + 18722 18716 18721 + 18717 18716 18722 + 18722 18723 18717 + 18718 18717 18723 + 18723 18724 18718 + 18719 18718 18724 + 18636 18721 18637 + 18721 18636 18725 + 18725 18726 18721 + 18721 18726 18722 + 18727 18722 18726 + 18722 18727 18728 + 18728 18723 18722 + 18723 18728 18729 + 18729 18724 18723 + 18730 18725 18636 + 18731 18725 18730 + 18731 18726 18725 + 18726 18731 18727 + 18727 18731 18732 + 18732 18733 18727 + 18728 18727 18733 + 18733 18734 18728 + 18729 18728 18734 + 18640 18730 18636 + 18735 18730 18640 + 18732 18730 18735 + 18730 18732 18731 + 18640 18645 18735 + 18735 18645 18736 + 18736 18737 18735 + 18738 18735 18737 + 18735 18738 18732 + 18732 18738 18739 + 18739 18733 18732 + 18733 18739 18740 + 18740 18734 18733 + 18741 18736 18645 + 18742 18736 18741 + 18736 18742 18743 + 18743 18737 18736 + 18737 18743 18744 + 18744 18745 18737 + 18737 18745 18738 + 18739 18738 18745 + 18645 18644 18741 + 18741 18644 18650 + 18650 18746 18741 + 18746 18747 18741 + 18748 18741 18747 + 18741 18748 18742 + 18742 18748 18749 + 18749 18750 18742 + 18743 18742 18750 + 18751 18746 18650 + 18746 18751 18752 + 18746 18752 18747 + 18752 18753 18747 + 18753 18754 18747 + 18747 18754 18748 + 18748 18754 18749 + 18755 18749 18754 + 18750 18749 18755 + 18650 18649 18751 + 18756 18751 18649 + 18752 18751 18756 + 18756 18757 18752 + 18753 18752 18757 + 18755 18753 18757 + 18754 18753 18755 + 18758 18756 18649 + 18759 18756 18758 + 18756 18759 18757 + 18757 18759 18760 + 18760 18761 18757 + 18757 18761 18755 + 18762 18755 18761 + 18755 18762 18750 + 18649 18648 18758 + 18763 18758 18648 + 18758 18763 18764 + 18764 18765 18758 + 18758 18765 18759 + 18759 18765 18766 + 18766 18760 18759 + 18767 18760 18766 + 18767 18761 18760 + 18761 18767 18762 + 18648 18647 18763 + 18768 18763 18647 + 18764 18763 18768 + 18768 18769 18764 + 18764 18769 18770 + 18770 18771 18764 + 18765 18764 18771 + 18771 18766 18765 + 18772 18768 18647 + 18773 18768 18772 + 18768 18773 18769 + 18769 18773 18774 + 18774 18770 18769 + 18656 18772 18647 + 18671 18772 18656 + 18772 18671 18775 + 18772 18775 18773 + 18773 18775 18776 + 18776 18774 18773 + 18777 18774 18776 + 18770 18774 18777 + 18777 18778 18770 + 18770 18778 18779 + 18779 18771 18770 + 18766 18771 18779 + 18775 18671 18780 + 18780 18776 18775 + 18776 18780 18680 + 18776 18680 18777 + 18777 18680 18679 + 18781 18777 18679 + 18778 18777 18781 + 18781 18782 18778 + 18779 18778 18782 + 18670 18780 18671 + 18680 18780 18670 + 18782 18783 18779 + 18784 18783 18782 + 18783 18784 18785 + 18785 18786 18783 + 18783 18786 18787 + 18787 18779 18783 + 18779 18787 18766 + 18766 18787 18767 + 18782 18788 18784 + 18784 18788 18789 + 18790 18784 18789 + 18785 18784 18790 + 18782 18781 18788 + 18788 18781 18791 + 18791 18792 18788 + 18788 18792 18789 + 18679 18791 18781 + 18793 18791 18679 + 18791 18793 18792 + 18792 18793 18794 + 18794 18789 18792 + 18679 18684 18793 + 18793 18684 18689 + 18689 18794 18793 + 18795 18794 18689 + 18789 18794 18795 + 18795 18796 18789 + 18789 18796 18797 + 18797 18798 18789 + 18789 18798 18790 + 18689 18799 18795 + 18795 18799 18800 + 18800 18801 18795 + 18796 18795 18801 + 18801 18802 18796 + 18796 18802 18803 + 18803 18797 18796 + 18688 18799 18689 + 18799 18688 18694 + 18694 18800 18799 + 18800 18694 18804 + 18804 18805 18800 + 18800 18805 18806 + 18806 18801 18800 + 18802 18801 18806 + 18806 18807 18802 + 18802 18807 18808 + 18808 18803 18802 + 18804 18694 18693 + 18693 18809 18804 + 18810 18804 18809 + 18805 18804 18810 + 18810 18811 18805 + 18805 18811 18812 + 18812 18806 18805 + 18807 18806 18812 + 18698 18809 18693 + 18809 18698 18813 + 18813 18814 18809 + 18809 18814 18810 + 18815 18810 18814 + 18811 18810 18815 + 18815 18816 18811 + 18811 18816 18817 + 18817 18812 18811 + 18813 18698 18702 + 18702 18818 18813 + 18819 18813 18818 + 18814 18813 18819 + 18819 18820 18814 + 18814 18820 18815 + 18821 18815 18820 + 18816 18815 18821 + 18822 18818 18702 + 18818 18822 18823 + 18823 18824 18818 + 18818 18824 18819 + 18825 18819 18824 + 18820 18819 18825 + 18825 18826 18820 + 18820 18826 18821 + 18702 18701 18822 + 18827 18822 18701 + 18823 18822 18827 + 18827 18828 18823 + 18829 18823 18828 + 18824 18823 18829 + 18829 18830 18824 + 18824 18830 18825 + 18831 18825 18830 + 18826 18825 18831 + 18701 18706 18827 + 18711 18827 18706 + 18827 18711 18832 + 18832 18828 18827 + 18828 18832 18833 + 18833 18834 18828 + 18828 18834 18829 + 18835 18829 18834 + 18830 18829 18835 + 18835 18836 18830 + 18830 18836 18831 + 18832 18711 18837 + 18837 18838 18832 + 18833 18832 18838 + 18838 18839 18833 + 18840 18833 18839 + 18834 18833 18840 + 18840 18841 18834 + 18834 18841 18835 + 18710 18837 18711 + 18842 18837 18710 + 18837 18842 18843 + 18843 18838 18837 + 18838 18843 18844 + 18844 18839 18838 + 18839 18844 18845 + 18845 18846 18839 + 18839 18846 18840 + 18710 18709 18842 + 18842 18709 18720 + 18720 18847 18842 + 18843 18842 18847 + 18847 18848 18843 + 18844 18843 18848 + 18848 18849 18844 + 18845 18844 18849 + 18850 18847 18720 + 18847 18850 18851 + 18851 18848 18847 + 18848 18851 18852 + 18852 18849 18848 + 18849 18852 18853 + 18853 18854 18849 + 18849 18854 18845 + 18720 18719 18850 + 18850 18719 18855 + 18855 18856 18850 + 18851 18850 18856 + 18856 18857 18851 + 18851 18857 18858 + 18858 18852 18851 + 18853 18852 18858 + 18724 18855 18719 + 18859 18855 18724 + 18855 18859 18860 + 18860 18856 18855 + 18856 18860 18861 + 18861 18857 18856 + 18857 18861 18862 + 18862 18858 18857 + 18724 18729 18859 + 18863 18859 18729 + 18860 18859 18863 + 18863 18864 18860 + 18861 18860 18864 + 18864 18865 18861 + 18862 18861 18865 + 18865 18866 18862 + 18867 18862 18866 + 18858 18862 18867 + 18868 18863 18729 + 18869 18863 18868 + 18863 18869 18870 + 18870 18864 18863 + 18864 18870 18871 + 18871 18865 18864 + 18865 18871 18872 + 18872 18866 18865 + 18734 18868 18729 + 18873 18868 18734 + 18868 18873 18869 + 18869 18873 18874 + 18874 18875 18869 + 18870 18869 18875 + 18875 18876 18870 + 18871 18870 18876 + 18876 18877 18871 + 18872 18871 18877 + 18734 18740 18873 + 18873 18740 18878 + 18878 18874 18873 + 18879 18874 18878 + 18874 18879 18880 + 18880 18875 18874 + 18875 18880 18881 + 18881 18876 18875 + 18876 18881 18882 + 18882 18877 18876 + 18883 18878 18740 + 18884 18878 18883 + 18878 18884 18879 + 18879 18884 18885 + 18885 18886 18879 + 18880 18879 18886 + 18886 18887 18880 + 18881 18880 18887 + 18740 18739 18883 + 18745 18883 18739 + 18888 18883 18745 + 18883 18888 18884 + 18884 18888 18889 + 18889 18885 18884 + 18890 18885 18889 + 18885 18890 18891 + 18891 18886 18885 + 18886 18891 18892 + 18892 18887 18886 + 18745 18744 18888 + 18889 18888 18744 + 18744 18893 18889 + 18893 18894 18889 + 18895 18889 18894 + 18889 18895 18890 + 18890 18895 18896 + 18896 18897 18890 + 18891 18890 18897 + 18898 18893 18744 + 18893 18898 18899 + 18899 18900 18893 + 18893 18900 18901 + 18901 18894 18893 + 18901 18902 18894 + 18894 18902 18895 + 18896 18895 18902 + 18744 18743 18898 + 18750 18898 18743 + 18899 18898 18750 + 18750 18762 18899 + 18786 18899 18762 + 18900 18899 18786 + 18786 18785 18900 + 18901 18900 18785 + 18785 18903 18901 + 18902 18901 18903 + 18903 18904 18902 + 18902 18904 18896 + 18762 18767 18786 + 18767 18787 18786 + 18790 18903 18785 + 18903 18790 18904 + 18904 18790 18798 + 18798 18896 18904 + 18896 18798 18797 + 18797 18897 18896 + 18897 18797 18803 + 18803 18905 18897 + 18897 18905 18891 + 18892 18891 18905 + 18905 18906 18892 + 18907 18892 18906 + 18887 18892 18907 + 18905 18803 18808 + 18808 18906 18905 + 18906 18808 18908 + 18908 18909 18906 + 18906 18909 18907 + 18910 18907 18909 + 18911 18907 18910 + 18907 18911 18887 + 18887 18911 18881 + 18882 18881 18911 + 18908 18808 18807 + 18807 18912 18908 + 18913 18908 18912 + 18909 18908 18913 + 18913 18914 18909 + 18909 18914 18910 + 18915 18910 18914 + 18916 18910 18915 + 18910 18916 18911 + 18911 18916 18882 + 18812 18912 18807 + 18912 18812 18817 + 18817 18917 18912 + 18912 18917 18913 + 18918 18913 18917 + 18914 18913 18918 + 18918 18919 18914 + 18914 18919 18915 + 18920 18915 18919 + 18921 18915 18920 + 18915 18921 18916 + 18917 18817 18922 + 18922 18923 18917 + 18917 18923 18918 + 18924 18918 18923 + 18919 18918 18924 + 18924 18925 18919 + 18919 18925 18920 + 18922 18817 18816 + 18816 18926 18922 + 18927 18922 18926 + 18923 18922 18927 + 18927 18928 18923 + 18923 18928 18924 + 18924 18928 18929 + 18929 18930 18924 + 18930 18925 18924 + 18930 18920 18925 + 18821 18926 18816 + 18926 18821 18931 + 18931 18932 18926 + 18926 18932 18927 + 18933 18927 18932 + 18928 18927 18933 + 18933 18929 18928 + 18930 18929 18933 + 18934 18930 18933 + 18930 18934 18935 + 18935 18920 18930 + 18920 18935 18921 + 18931 18821 18826 + 18826 18936 18931 + 18937 18931 18936 + 18932 18931 18937 + 18937 18933 18932 + 18933 18937 18938 + 18938 18939 18933 + 18939 18940 18933 + 18940 18934 18933 + 18831 18936 18826 + 18936 18831 18941 + 18941 18937 18936 + 18937 18941 18938 + 18941 18831 18836 + 18942 18941 18836 + 18941 18942 18938 + 18836 18835 18942 + 18942 18835 18841 + 18942 18841 18840 + 18943 18942 18840 + 18942 18943 18938 + 18943 18944 18938 + 18938 18944 18854 + 18854 18853 18938 + 18938 18853 18945 + 18939 18938 18945 + 18943 18840 18846 + 18943 18846 18845 + 18944 18943 18845 + 18944 18845 18854 + 18858 18945 18853 + 18867 18945 18858 + 18945 18867 18939 + 18939 18867 18946 + 18939 18946 18947 + 18940 18939 18947 + 18940 18947 18948 + 18940 18948 18949 + 18934 18940 18949 + 18934 18949 18935 + 18866 18946 18867 + 18946 18866 18872 + 18947 18946 18872 + 18947 18872 18950 + 18950 18948 18947 + 18949 18948 18950 + 18950 18951 18949 + 18949 18951 18921 + 18921 18935 18949 + 18877 18950 18872 + 18951 18950 18877 + 18877 18882 18951 + 18951 18882 18916 + 18916 18921 18951 + 18952 11771 11639 + 11771 18952 11772 + 11772 18952 18953 + 18953 18954 11772 + 11773 11772 18954 + 11639 18955 18952 + 18952 18955 18956 + 18956 18953 18952 + 18957 18953 18956 + 18953 18957 18958 + 18958 18954 18953 + 18959 18954 18958 + 18954 18959 11773 + 11764 11773 18959 + 18955 11639 11638 + 11638 11648 18955 + 18956 18955 11648 + 11648 11653 18956 + 18960 18956 11653 + 18956 18960 18957 + 18957 18960 18961 + 18961 18962 18957 + 18958 18957 18962 + 18962 18963 18958 + 18964 18958 18963 + 18958 18964 18959 + 11653 18965 18960 + 18960 18965 18966 + 18966 18961 18960 + 18967 18961 18966 + 18961 18967 18962 + 18962 18967 18968 + 18968 18963 18962 + 18969 18963 18968 + 18963 18969 18964 + 11652 18965 11653 + 18965 11652 18970 + 18970 18971 18965 + 18965 18971 18966 + 18972 18966 18971 + 18966 18972 18973 + 18973 18974 18966 + 18966 18974 18967 + 18968 18967 18974 + 11658 18970 11652 + 18975 18970 11658 + 18971 18970 18975 + 18975 18976 18971 + 18971 18976 18972 + 18977 18972 18976 + 18973 18972 18977 + 18977 18978 18973 + 18979 18973 18978 + 18974 18973 18979 + 11658 18980 18975 + 18975 18980 18981 + 18982 18975 18981 + 18976 18975 18982 + 18982 18983 18976 + 18976 18983 18984 + 18984 18977 18976 + 18980 11658 11663 + 11663 18985 18980 + 18980 18985 18986 + 18986 18981 18980 + 18987 18981 18986 + 18981 18987 18988 + 18988 18989 18981 + 18981 18989 18982 + 18985 11663 18990 + 18990 18991 18985 + 18986 18985 18991 + 18991 18992 18986 + 18987 18986 18992 + 18992 18993 18987 + 18987 18993 18994 + 18994 18988 18987 + 11667 18990 11663 + 11672 18990 11667 + 18990 11672 18995 + 18995 18991 18990 + 18991 18995 18996 + 18996 18992 18991 + 18992 18996 18997 + 18997 18993 18992 + 18993 18997 18998 + 18998 18994 18993 + 18995 11672 11677 + 11677 18999 18995 + 18996 18995 18999 + 18999 19000 18996 + 18997 18996 19000 + 19000 19001 18997 + 18998 18997 19001 + 19001 19002 18998 + 19003 18998 19002 + 18994 18998 19003 + 19004 18999 11677 + 18999 19004 19005 + 19005 19000 18999 + 19000 19005 19006 + 19006 19001 19000 + 19001 19006 19007 + 19007 19002 19001 + 11677 11676 19004 + 19004 11676 11682 + 11682 19008 19004 + 19005 19004 19008 + 19008 19009 19005 + 19006 19005 19009 + 19009 19010 19006 + 19007 19006 19010 + 19010 19011 19007 + 19012 19007 19011 + 19002 19007 19012 + 19013 19008 11682 + 19008 19013 19014 + 19014 19009 19008 + 19009 19014 19015 + 19015 19010 19009 + 19010 19015 19016 + 19016 19011 19010 + 11682 11681 19013 + 19013 11681 11687 + 11687 19017 19013 + 19014 19013 19017 + 19017 19018 19014 + 19015 19014 19018 + 19018 19019 19015 + 19016 19015 19019 + 19019 19020 19016 + 19021 19016 19020 + 19011 19016 19021 + 19022 19017 11687 + 19017 19022 19023 + 19023 19018 19017 + 19018 19023 19024 + 19024 19019 19018 + 19019 19024 19025 + 19025 19020 19019 + 11687 11686 19022 + 19022 11686 19026 + 19026 19027 19022 + 19023 19022 19027 + 19027 19028 19023 + 19024 19023 19028 + 19028 19029 19024 + 19025 19024 19029 + 11691 19026 11686 + 19030 19026 11691 + 19026 19030 19031 + 19031 19027 19026 + 19027 19031 19032 + 19032 19028 19027 + 19028 19032 19033 + 19033 19029 19028 + 11691 11696 19030 + 19030 11696 19034 + 19034 19035 19030 + 19031 19030 19035 + 19035 19036 19031 + 19032 19031 19036 + 19036 19037 19032 + 19033 19032 19037 + 19038 19034 11696 + 19039 19034 19038 + 19034 19039 19040 + 19040 19035 19034 + 19035 19040 19041 + 19041 19036 19035 + 19036 19041 19042 + 19042 19037 19036 + 11696 11695 19038 + 11701 19038 11695 + 19043 19038 11701 + 19038 19043 19039 + 19039 19043 19044 + 19044 19045 19039 + 19040 19039 19045 + 19045 19046 19040 + 19041 19040 19046 + 19046 19047 19041 + 19042 19041 19047 + 11701 19048 19043 + 19043 19048 19049 + 19049 19044 19043 + 19050 19044 19049 + 19044 19050 19051 + 19051 19045 19044 + 19045 19051 19052 + 19052 19046 19045 + 19048 11701 11700 + 11700 19053 19048 + 19048 19053 19054 + 19054 19049 19048 + 19055 19049 19054 + 19049 19055 19050 + 19050 19055 19056 + 19056 19057 19050 + 19051 19050 19057 + 19053 11700 11699 + 11699 19058 19053 + 19053 19058 19059 + 19059 19054 19053 + 19060 19054 19059 + 19054 19060 19055 + 19055 19060 19061 + 19061 19056 19055 + 19058 11699 11706 + 11706 19062 19058 + 19058 19062 19063 + 19063 19059 19058 + 19064 19059 19063 + 19059 19064 19060 + 19061 19060 19064 + 19064 19065 19061 + 19066 19061 19065 + 19056 19061 19066 + 19062 11706 19067 + 19067 19068 19062 + 19063 19062 19068 + 19069 19067 11706 + 19070 19067 19069 + 19068 19067 19070 + 19068 19070 19071 + 19071 19072 19068 + 19068 19072 19063 + 19073 19069 11706 + 11719 19069 19073 + 11723 19069 11719 + 19069 11723 19070 + 11706 11705 19073 + 11704 19073 11705 + 11711 19073 11704 + 19073 11711 11719 + 19070 11723 11722 + 11722 19074 19070 + 19074 19075 19070 + 19075 19076 19070 + 19076 19071 19070 + 19077 19071 19076 + 19071 19077 19072 + 11728 19074 11722 + 11728 19078 19074 + 19074 19078 19079 + 19079 19075 19074 + 19080 19075 19079 + 19075 19080 19081 + 19081 19076 19075 + 19082 19076 19081 + 19076 19082 19077 + 19078 11728 11727 + 11727 19083 19078 + 19079 19078 19083 + 19083 19084 19079 + 19080 19079 19084 + 19084 19085 19080 + 19080 19085 19086 + 19086 19081 19080 + 19082 19081 19086 + 11727 11733 19083 + 19083 11733 19087 + 19087 19084 19083 + 19084 19087 19088 + 19088 19085 19084 + 19085 19088 19089 + 19089 19086 19085 + 19086 19089 19090 + 19090 19091 19086 + 19086 19091 19082 + 19087 11733 11732 + 11732 19092 19087 + 19092 19093 19087 + 19088 19087 19093 + 19093 19094 19088 + 19088 19094 19095 + 19095 19089 19088 + 19090 19089 19095 + 11738 19092 11732 + 11738 19096 19092 + 19092 19096 19097 + 19097 19093 19092 + 19094 19093 19097 + 19097 19098 19094 + 19094 19098 19099 + 19099 19095 19094 + 19100 19095 19099 + 19095 19100 19090 + 19096 11738 19101 + 19101 19102 19096 + 19097 19096 19102 + 19102 19103 19097 + 19103 19104 19097 + 19098 19097 19104 + 11737 19101 11738 + 19105 19101 11737 + 19101 19105 19102 + 19102 19105 19106 + 19106 19103 19102 + 19103 19106 19107 + 19103 19107 19108 + 19108 19104 19103 + 19109 19104 19108 + 19104 19109 19098 + 11737 19110 19105 + 19105 19110 19111 + 19106 19105 19111 + 19111 19112 19106 + 19107 19106 19112 + 19112 19113 19107 + 19108 19107 19113 + 11737 19114 19110 + 19110 19114 19115 + 19115 19111 19110 + 19111 19115 19116 + 19111 19116 19117 + 19117 19112 19111 + 19112 19117 19113 + 19114 11737 11742 + 11742 19118 19114 + 19114 19118 19119 + 19119 19115 19114 + 19116 19115 19119 + 19119 19120 19116 + 19117 19116 19120 + 19121 19117 19120 + 19113 19117 19121 + 19121 19122 19113 + 19113 19122 19108 + 11741 19118 11742 + 19118 11741 19123 + 19123 19119 19118 + 19120 19119 19123 + 19123 11741 11740 + 11740 19124 19123 + 19125 19123 19124 + 19123 19125 19120 + 19126 19124 11740 + 19127 19124 19126 + 19124 19127 19125 + 19125 19127 19128 + 19128 19129 19125 + 19120 19125 19129 + 11740 11745 19126 + 19130 19126 11745 + 19131 19126 19130 + 19126 19131 19127 + 19127 19131 19132 + 19132 19128 19127 + 19133 19128 19132 + 19128 19133 19134 + 19134 19129 19128 + 11745 11749 19130 + 19135 19130 11749 + 19136 19130 19135 + 19130 19136 19131 + 19131 19136 19066 + 19066 19132 19131 + 19065 19132 19066 + 19132 19065 19133 + 11749 11754 19135 + 19137 19135 11754 + 19138 19135 19137 + 19135 19138 19136 + 19136 19138 19139 + 19139 19066 19136 + 19066 19139 19056 + 19056 19139 19140 + 19140 19057 19056 + 11754 19141 19137 + 19142 19137 19141 + 19143 19137 19142 + 19137 19143 19138 + 19139 19138 19143 + 19143 19140 19139 + 19144 19140 19143 + 19140 19144 19145 + 19145 19057 19140 + 19057 19145 19051 + 11753 19141 11754 + 19141 11753 19146 + 19146 19147 19141 + 19141 19147 19142 + 19148 19142 19147 + 19149 19142 19148 + 19142 19149 19143 + 19143 19149 19144 + 19150 19144 19149 + 19145 19144 19150 + 19146 11753 11759 + 11759 19151 19146 + 19152 19146 19151 + 19147 19146 19152 + 19152 19153 19147 + 19147 19153 19148 + 19154 19148 19153 + 19155 19148 19154 + 19148 19155 19149 + 19149 19155 19150 + 19156 19151 11759 + 19151 19156 19157 + 19157 19158 19151 + 19151 19158 19152 + 19159 19152 19158 + 19153 19152 19159 + 19159 19160 19153 + 19153 19160 19154 + 11759 11758 19156 + 19156 11758 19161 + 19161 19162 19156 + 19156 19162 19163 + 19163 19157 19156 + 19164 19157 19163 + 19158 19157 19164 + 19164 19165 19158 + 19158 19165 19159 + 11757 19161 11758 + 19166 19161 11757 + 19162 19161 19166 + 19166 19167 19162 + 19162 19167 19168 + 19168 19169 19162 + 19162 19169 19163 + 11757 11764 19166 + 18959 19166 11764 + 19167 19166 18959 + 18959 18964 19167 + 19168 19167 18964 + 18964 18969 19168 + 19170 19168 18969 + 19170 19169 19168 + 19169 19170 19171 + 19171 19163 19169 + 19172 19163 19171 + 19163 19172 19164 + 19173 19164 19172 + 19165 19164 19173 + 18969 19174 19170 + 19171 19170 19174 + 19174 19175 19171 + 19176 19171 19175 + 19171 19176 19172 + 19172 19176 19177 + 19177 19178 19172 + 19172 19178 19173 + 18968 19174 18969 + 19174 18968 19179 + 19179 19175 19174 + 19175 19179 18979 + 18979 19180 19175 + 19175 19180 19176 + 19176 19180 19181 + 19181 19177 19176 + 18974 19179 18968 + 18979 19179 18974 + 19133 19065 19064 + 19064 19182 19133 + 19133 19182 19183 + 19183 19184 19133 + 19184 19185 19133 + 19185 19134 19133 + 19063 19182 19064 + 19182 19063 19186 + 19186 19183 19182 + 19183 19186 19187 + 19187 19188 19183 + 19183 19188 19189 + 19189 19184 19183 + 19190 19186 19063 + 19187 19186 19190 + 19190 19191 19187 + 19187 19191 19192 + 19192 19193 19187 + 19188 19187 19193 + 19072 19190 19063 + 19194 19190 19072 + 19191 19190 19194 + 19191 19194 19195 + 19195 19192 19191 + 19192 19195 19196 + 19192 19196 19197 + 19197 19193 19192 + 19198 19193 19197 + 19193 19198 19188 + 19072 19077 19194 + 19194 19077 19082 + 19082 19091 19194 + 19091 19195 19194 + 19196 19195 19091 + 19091 19090 19196 + 19196 19090 19100 + 19100 19197 19196 + 19199 19197 19100 + 19197 19199 19198 + 19198 19199 19200 + 19200 19201 19198 + 19188 19198 19201 + 19201 19189 19188 + 19202 19189 19201 + 19202 19184 19189 + 19100 19203 19199 + 19200 19199 19203 + 19203 19204 19200 + 19204 19205 19200 + 19206 19200 19205 + 19206 19201 19200 + 19201 19206 19202 + 19099 19203 19100 + 19203 19099 19207 + 19207 19204 19203 + 19204 19207 19208 + 19208 19209 19204 + 19204 19209 19210 + 19210 19205 19204 + 19211 19205 19210 + 19205 19211 19206 + 19207 19099 19098 + 19098 19109 19207 + 19208 19207 19109 + 19109 19212 19208 + 19208 19212 19213 + 19213 19214 19208 + 19209 19208 19214 + 19214 19215 19209 + 19210 19209 19215 + 19215 19216 19210 + 19211 19210 19216 + 19108 19212 19109 + 19212 19108 19122 + 19122 19213 19212 + 19121 19213 19122 + 19213 19121 19217 + 19217 19214 19213 + 19214 19217 19215 + 19215 19217 19218 + 19218 19216 19215 + 19219 19216 19218 + 19216 19219 19211 + 19206 19211 19219 + 19202 19206 19219 + 19219 19220 19202 + 19184 19202 19220 + 19217 19121 19120 + 19218 19217 19120 + 19221 19218 19120 + 19219 19218 19221 + 19221 19220 19219 + 19220 19221 19185 + 19220 19185 19184 + 19120 19222 19221 + 19185 19221 19222 + 19222 19134 19185 + 19222 19129 19134 + 19129 19222 19120 + 19223 19177 19181 + 19177 19223 19224 + 19224 19178 19177 + 19178 19224 19225 + 19225 19173 19178 + 19181 19226 19223 + 19223 19226 19227 + 19227 19228 19223 + 19224 19223 19228 + 19229 19226 19181 + 19226 19229 19230 + 19230 19227 19226 + 19227 19230 19231 + 19231 19232 19227 + 19227 19232 19233 + 19233 19228 19227 + 19181 19234 19229 + 19229 19234 18978 + 18978 19235 19229 + 19229 19235 19236 + 19236 19230 19229 + 19231 19230 19236 + 19234 19181 19180 + 19180 18979 19234 + 18978 19234 18979 + 18977 19235 18978 + 19235 18977 18984 + 18984 19236 19235 + 18984 19237 19236 + 19236 19237 19231 + 19238 19231 19237 + 19232 19231 19238 + 19238 19239 19232 + 19232 19239 19240 + 19240 19233 19232 + 19241 19233 19240 + 19233 19241 19228 + 19228 19241 19224 + 19237 18984 19242 + 19242 19243 19237 + 19237 19243 19238 + 19244 19238 19243 + 19239 19238 19244 + 19244 19245 19239 + 19239 19245 19246 + 19246 19240 19239 + 18983 19242 18984 + 19247 19242 18983 + 19243 19242 19247 + 19247 19248 19243 + 19243 19248 19244 + 19249 19244 19248 + 19245 19244 19249 + 19249 19250 19245 + 19245 19250 19251 + 19251 19246 19245 + 18983 19252 19247 + 19247 19252 19253 + 19253 19254 19247 + 19254 19255 19247 + 19248 19247 19255 + 19255 19256 19248 + 19248 19256 19249 + 19257 19252 18983 + 19252 19257 19258 + 19258 19253 19252 + 19253 19258 19259 + 19259 19260 19253 + 19253 19260 19261 + 19261 19254 19253 + 18983 18982 19257 + 19257 18982 18989 + 18989 19262 19257 + 19258 19257 19262 + 19262 19263 19258 + 19259 19258 19263 + 19263 19264 19259 + 19259 19264 19265 + 19265 19266 19259 + 19260 19259 19266 + 19267 19262 18989 + 19262 19267 19268 + 19268 19263 19262 + 19264 19263 19268 + 19268 19269 19264 + 19264 19269 19270 + 19270 19271 19264 + 19264 19271 19265 + 18989 18988 19267 + 19267 18988 18994 + 18994 19272 19267 + 19267 19272 19273 + 19273 19268 19267 + 19269 19268 19273 + 19273 19274 19269 + 19270 19269 19274 + 19274 19275 19270 + 19276 19270 19275 + 19276 19271 19270 + 19003 19272 18994 + 19272 19003 19277 + 19277 19273 19272 + 19273 19277 19278 + 19278 19274 19273 + 19274 19278 19279 + 19279 19275 19274 + 19275 19279 19280 + 19280 19281 19275 + 19275 19281 19276 + 19277 19003 19282 + 19282 19283 19277 + 19278 19277 19283 + 19283 19284 19278 + 19279 19278 19284 + 19284 19285 19279 + 19280 19279 19285 + 19002 19282 19003 + 19012 19282 19002 + 19282 19012 19286 + 19286 19283 19282 + 19283 19286 19287 + 19287 19284 19283 + 19284 19287 19288 + 19288 19285 19284 + 19285 19288 19289 + 19289 19290 19285 + 19285 19290 19280 + 19286 19012 19291 + 19291 19292 19286 + 19287 19286 19292 + 19292 19293 19287 + 19288 19287 19293 + 19293 19294 19288 + 19289 19288 19294 + 19011 19291 19012 + 19021 19291 19011 + 19291 19021 19295 + 19295 19292 19291 + 19292 19295 19296 + 19296 19293 19292 + 19293 19296 19297 + 19297 19294 19293 + 19294 19297 19298 + 19298 19299 19294 + 19294 19299 19289 + 19295 19021 19300 + 19300 19301 19295 + 19296 19295 19301 + 19301 19302 19296 + 19297 19296 19302 + 19302 19303 19297 + 19298 19297 19303 + 19020 19300 19021 + 19304 19300 19020 + 19300 19304 19305 + 19305 19301 19300 + 19301 19305 19306 + 19306 19302 19301 + 19302 19306 19307 + 19307 19303 19302 + 19020 19025 19304 + 19304 19025 19308 + 19308 19309 19304 + 19305 19304 19309 + 19309 19310 19305 + 19306 19305 19310 + 19310 19311 19306 + 19307 19306 19311 + 19029 19308 19025 + 19312 19308 19029 + 19308 19312 19313 + 19313 19309 19308 + 19309 19313 19314 + 19314 19310 19309 + 19310 19314 19315 + 19315 19311 19310 + 19029 19033 19312 + 19312 19033 19316 + 19316 19317 19312 + 19313 19312 19317 + 19317 19318 19313 + 19314 19313 19318 + 19318 19319 19314 + 19315 19314 19319 + 19037 19316 19033 + 19320 19316 19037 + 19316 19320 19321 + 19321 19317 19316 + 19317 19321 19322 + 19322 19318 19317 + 19318 19322 19323 + 19323 19319 19318 + 19037 19042 19320 + 19320 19042 19324 + 19324 19325 19320 + 19321 19320 19325 + 19325 19326 19321 + 19322 19321 19326 + 19326 19327 19322 + 19323 19322 19327 + 19047 19324 19042 + 19328 19324 19047 + 19324 19328 19329 + 19329 19325 19324 + 19325 19329 19330 + 19330 19326 19325 + 19326 19330 19331 + 19331 19327 19326 + 19047 19332 19328 + 19333 19328 19332 + 19329 19328 19333 + 19333 19334 19329 + 19329 19334 19335 + 19335 19330 19329 + 19331 19330 19335 + 19332 19047 19046 + 19046 19052 19332 + 19332 19052 19336 + 19336 19337 19332 + 19332 19337 19333 + 19338 19333 19337 + 19334 19333 19338 + 19338 19339 19334 + 19334 19339 19340 + 19340 19335 19334 + 19336 19052 19051 + 19051 19145 19336 + 19150 19336 19145 + 19337 19336 19150 + 19150 19341 19337 + 19337 19341 19338 + 19338 19341 19342 + 19342 19343 19338 + 19339 19338 19343 + 19343 19344 19339 + 19340 19339 19344 + 19341 19150 19155 + 19155 19342 19341 + 19154 19342 19155 + 19342 19154 19345 + 19345 19343 19342 + 19343 19345 19346 + 19346 19344 19343 + 19344 19346 19347 + 19347 19348 19344 + 19344 19348 19340 + 19345 19154 19160 + 19160 19349 19345 + 19346 19345 19349 + 19349 19350 19346 + 19347 19346 19350 + 19350 19351 19347 + 19352 19347 19351 + 19348 19347 19352 + 19353 19349 19160 + 19349 19353 19354 + 19354 19350 19349 + 19350 19354 19355 + 19355 19351 19350 + 19351 19355 19356 + 19356 19357 19351 + 19351 19357 19352 + 19160 19159 19353 + 19353 19159 19165 + 19165 19358 19353 + 19354 19353 19358 + 19358 19359 19354 + 19355 19354 19359 + 19359 19360 19355 + 19356 19355 19360 + 19360 19361 19356 + 19362 19356 19361 + 19357 19356 19362 + 19173 19358 19165 + 19358 19173 19225 + 19225 19359 19358 + 19359 19225 19363 + 19363 19360 19359 + 19360 19363 19364 + 19364 19361 19360 + 19361 19364 19365 + 19365 19366 19361 + 19361 19366 19362 + 19363 19225 19224 + 19367 19363 19224 + 19364 19363 19367 + 19367 19368 19364 + 19364 19368 19369 + 19369 19365 19364 + 19370 19365 19369 + 19366 19365 19370 + 19224 19241 19367 + 19240 19367 19241 + 19368 19367 19240 + 19240 19246 19368 + 19368 19246 19251 + 19251 19369 19368 + 19371 19369 19251 + 19369 19371 19370 + 19370 19371 8716 + 8716 19372 19370 + 19373 19370 19372 + 19370 19373 19366 + 19366 19373 19374 + 19374 19362 19366 + 19251 19375 19371 + 19371 19375 8710 + 8710 8716 19371 + 19375 19251 19250 + 19250 8711 19375 + 8710 19375 8711 + 19376 8711 19250 + 8711 19376 8712 + 19377 8712 19376 + 8705 8712 19377 + 19377 8706 8705 + 19250 19249 19376 + 19376 19249 19256 + 19256 19378 19376 + 19376 19378 19377 + 19378 19379 19377 + 19380 19377 19379 + 8706 19377 19380 + 19255 19378 19256 + 19378 19255 19254 + 19254 19379 19378 + 19379 19254 19261 + 19379 19261 19380 + 19380 19261 19260 + 19260 19381 19380 + 19381 19382 19380 + 19383 19380 19382 + 19380 19383 8706 + 8706 19383 19384 + 19384 19385 8706 + 8706 19385 8707 + 19266 19381 19260 + 19381 19266 19386 + 19386 10972 19381 + 19381 10972 19387 + 19387 19382 19381 + 19382 19387 19388 + 19388 19389 19382 + 19382 19389 19383 + 19386 19266 19265 + 19265 19390 19386 + 10968 19386 19390 + 10972 19386 10968 + 19390 19265 19391 + 19391 19392 19390 + 19390 19392 19393 + 19393 10970 19390 + 19390 10970 10969 + 10969 10968 19390 + 19391 19265 19271 + 19271 19276 19391 + 19391 19276 19281 + 19281 19394 19391 + 19392 19391 19394 + 19394 19395 19392 + 19392 19395 10965 + 10965 19393 19392 + 10964 19393 10965 + 10964 10970 19393 + 19396 19394 19281 + 19394 19396 19397 + 19397 19395 19394 + 19395 19397 19398 + 19398 10965 19395 + 10965 19398 10960 + 10960 19398 19399 + 19399 10956 10960 + 19281 19280 19396 + 19396 19280 19290 + 19290 19400 19396 + 19397 19396 19400 + 19400 19401 19397 + 19398 19397 19401 + 19401 19399 19398 + 19402 19399 19401 + 19399 19402 19403 + 19403 10956 19399 + 10956 19403 10952 + 19404 19400 19290 + 19400 19404 19405 + 19405 19401 19400 + 19401 19405 19402 + 19402 19405 19406 + 19406 19407 19402 + 19403 19402 19407 + 19407 19408 19403 + 10952 19403 19408 + 19408 10947 10952 + 19290 19289 19404 + 19404 19289 19299 + 19299 19409 19404 + 19405 19404 19409 + 19409 19406 19405 + 19410 19406 19409 + 19406 19410 19411 + 19411 19407 19406 + 19407 19411 19412 + 19412 19408 19407 + 19408 19412 19413 + 19413 10947 19408 + 10947 19413 10948 + 19414 19409 19299 + 19409 19414 19410 + 19410 19414 19415 + 19415 19416 19410 + 19411 19410 19416 + 19416 19417 19411 + 19412 19411 19417 + 19417 19418 19412 + 19413 19412 19418 + 19299 19298 19414 + 19414 19298 19419 + 19419 19415 19414 + 19420 19415 19419 + 19415 19420 19421 + 19421 19416 19415 + 19416 19421 19422 + 19422 19417 19416 + 19417 19422 19423 + 19423 19418 19417 + 19303 19419 19298 + 19424 19419 19303 + 19419 19424 19420 + 19420 19424 19425 + 19425 19426 19420 + 19421 19420 19426 + 19426 19427 19421 + 19422 19421 19427 + 19427 19428 19422 + 19423 19422 19428 + 19303 19307 19424 + 19424 19307 19429 + 19429 19425 19424 + 19430 19425 19429 + 19425 19430 19431 + 19431 19426 19425 + 19426 19431 19432 + 19432 19427 19426 + 19427 19432 19433 + 19433 19428 19427 + 19311 19429 19307 + 19434 19429 19311 + 19429 19434 19430 + 19430 19434 19435 + 19435 19436 19430 + 19431 19430 19436 + 19436 19437 19431 + 19432 19431 19437 + 19437 19438 19432 + 19433 19432 19438 + 19311 19315 19434 + 19434 19315 19439 + 19439 19435 19434 + 19440 19435 19439 + 19435 19440 19441 + 19441 19436 19435 + 19436 19441 19442 + 19442 19437 19436 + 19437 19442 19443 + 19443 19438 19437 + 19319 19439 19315 + 19444 19439 19319 + 19439 19444 19440 + 19440 19444 19445 + 19445 19446 19440 + 19441 19440 19446 + 19446 19447 19441 + 19442 19441 19447 + 19447 19448 19442 + 19443 19442 19448 + 19319 19323 19444 + 19444 19323 19449 + 19449 19445 19444 + 19450 19445 19449 + 19445 19450 19451 + 19451 19446 19445 + 19446 19451 19452 + 19452 19447 19446 + 19447 19452 19453 + 19453 19448 19447 + 19327 19449 19323 + 19454 19449 19327 + 19449 19454 19450 + 19450 19454 19455 + 19455 19456 19450 + 19450 19456 19457 + 19457 19451 19450 + 19452 19451 19457 + 19327 19331 19454 + 19455 19454 19331 + 19331 19458 19455 + 19459 19455 19458 + 19456 19455 19459 + 19459 19460 19456 + 19456 19460 19461 + 19461 19457 19456 + 19462 19457 19461 + 19457 19462 19452 + 19335 19458 19331 + 19458 19335 19340 + 19340 19463 19458 + 19458 19463 19459 + 19459 19463 19464 + 19464 19465 19459 + 19460 19459 19465 + 19465 19466 19460 + 19461 19460 19466 + 19463 19340 19348 + 19348 19464 19463 + 19352 19464 19348 + 19464 19352 19467 + 19467 19465 19464 + 19465 19467 19468 + 19468 19466 19465 + 19466 19468 19469 + 19469 19470 19466 + 19466 19470 19461 + 19471 19461 19470 + 19461 19471 19462 + 19467 19352 19357 + 19357 19472 19467 + 19468 19467 19472 + 19472 19473 19468 + 19469 19468 19473 + 19473 19474 19469 + 19475 19469 19474 + 19470 19469 19475 + 19475 19476 19470 + 19470 19476 19471 + 19362 19472 19357 + 19472 19362 19374 + 19374 19473 19472 + 19473 19374 19477 + 19477 19474 19473 + 19474 19477 19478 + 19478 19479 19474 + 19474 19479 19475 + 19480 19475 19479 + 19476 19475 19480 + 19477 19374 19373 + 19373 19481 19477 + 19478 19477 19481 + 19481 19482 19478 + 19483 19478 19482 + 19479 19478 19483 + 19483 19484 19479 + 19479 19484 19480 + 19372 19481 19373 + 19481 19372 8715 + 8715 19482 19481 + 19482 8715 8719 + 8719 19485 19482 + 19482 19485 19483 + 19486 19483 19485 + 19484 19483 19486 + 8715 19372 8716 + 19485 8719 8718 + 8718 19487 19485 + 19485 19487 19486 + 19488 19486 19487 + 19489 19486 19488 + 19486 19489 19484 + 19484 19489 19490 + 19490 19480 19484 + 19491 19480 19490 + 19480 19491 19476 + 19487 8718 8723 + 8723 19492 19487 + 19487 19492 19488 + 19493 19488 19492 + 19494 19488 19493 + 19488 19494 19489 + 19489 19494 19495 + 19495 19490 19489 + 19496 19490 19495 + 19490 19496 19491 + 19492 8723 8722 + 8722 19497 19492 + 19492 19497 19493 + 19498 19493 19497 + 19499 19493 19498 + 19493 19499 19494 + 19494 19499 19500 + 19500 19495 19494 + 19501 19495 19500 + 19495 19501 19496 + 19497 8722 19502 + 19502 19503 19497 + 19497 19503 19498 + 9789 19498 19503 + 19504 19498 9789 + 19498 19504 19499 + 19499 19504 19505 + 19505 19500 19499 + 19502 8722 8721 + 8721 19506 19502 + 19507 19502 19506 + 19503 19502 19507 + 19507 9784 19503 + 19503 9784 9789 + 8729 19506 8721 + 19506 8729 19508 + 19506 19508 19507 + 9780 19507 19508 + 9784 19507 9780 + 19508 8729 8728 + 8728 19509 19508 + 19508 19509 9776 + 9776 9780 19508 + 8736 19509 8728 + 19509 8736 8741 + 8741 9776 19509 + 9789 9788 19504 + 19504 9788 19510 + 19510 19505 19504 + 19511 19505 19510 + 19505 19511 19512 + 19512 19500 19505 + 19500 19512 19501 + 19501 19512 19513 + 19513 19514 19501 + 19496 19501 19514 + 9793 19510 9788 + 19515 19510 9793 + 19510 19515 19511 + 19511 19515 19516 + 19516 19517 19511 + 19512 19511 19517 + 19517 19513 19512 + 19518 19513 19517 + 19514 19513 19518 + 9793 9797 19515 + 19516 19515 9797 + 9797 9805 19516 + 19519 19516 9805 + 19517 19516 19519 + 19519 19520 19517 + 19517 19520 19518 + 19521 19518 19520 + 19522 19518 19521 + 19518 19522 19514 + 9805 19523 19519 + 19519 19523 19524 + 19524 19525 19519 + 19520 19519 19525 + 19525 19526 19520 + 19520 19526 19521 + 9804 19523 9805 + 19523 9804 9810 + 9810 19524 19523 + 19527 19524 9810 + 19524 19527 19528 + 19528 19525 19524 + 19525 19528 19529 + 19529 19526 19525 + 19526 19529 19530 + 19530 19521 19526 + 9810 9815 19527 + 19527 9815 19531 + 19531 19532 19527 + 19528 19527 19532 + 19532 19533 19528 + 19529 19528 19533 + 19533 19534 19529 + 19530 19529 19534 + 19535 19531 9815 + 19536 19531 19535 + 19531 19536 19537 + 19537 19532 19531 + 19532 19537 19538 + 19538 19533 19532 + 19533 19538 19539 + 19539 19534 19533 + 9815 9814 19535 + 9820 19535 9814 + 19540 19535 9820 + 19535 19540 19536 + 19536 19540 19541 + 19541 19542 19536 + 19537 19536 19542 + 19542 19543 19537 + 19538 19537 19543 + 19543 19544 19538 + 19539 19538 19544 + 9820 9825 19540 + 19540 9825 19545 + 19545 19541 19540 + 19546 19541 19545 + 19541 19546 19547 + 19547 19542 19541 + 19542 19547 19548 + 19548 19543 19542 + 19543 19548 19549 + 19549 19544 19543 + 9830 19545 9825 + 10921 19545 9830 + 19545 10921 19546 + 19546 10921 10920 + 10920 10930 19546 + 19547 19546 10930 + 10930 10935 19547 + 19548 19547 10935 + 10935 19550 19548 + 19549 19548 19550 + 19550 19551 19549 + 19552 19549 19551 + 19544 19549 19552 + 19552 19553 19544 + 19544 19553 19539 + 19554 19539 19553 + 19534 19539 19554 + 10934 19550 10935 + 19550 10934 19555 + 19555 19551 19550 + 19551 19555 19556 + 19556 19557 19551 + 19551 19557 19552 + 19558 19552 19557 + 19553 19552 19558 + 19558 19559 19553 + 19553 19559 19554 + 19555 10934 10939 + 10939 10948 19555 + 19556 19555 10948 + 10948 19413 19556 + 19418 19556 19413 + 19557 19556 19418 + 19418 19423 19557 + 19557 19423 19558 + 19428 19558 19423 + 19559 19558 19428 + 19428 19433 19559 + 19559 19433 19560 + 19560 19554 19559 + 19561 19554 19560 + 19554 19561 19534 + 19534 19561 19530 + 19562 19530 19561 + 19521 19530 19562 + 19438 19560 19433 + 19563 19560 19438 + 19560 19563 19561 + 19561 19563 19562 + 19564 19562 19563 + 19565 19562 19564 + 19562 19565 19521 + 19521 19565 19522 + 19438 19443 19563 + 19563 19443 19564 + 19448 19564 19443 + 19566 19564 19448 + 19564 19566 19565 + 19522 19565 19566 + 19566 19567 19522 + 19514 19522 19567 + 19567 19568 19514 + 19514 19568 19496 + 19491 19496 19568 + 19448 19453 19566 + 19566 19453 19569 + 19569 19567 19566 + 19567 19569 19570 + 19570 19568 19567 + 19568 19570 19491 + 19476 19491 19570 + 19570 19471 19476 + 19462 19471 19570 + 19569 19453 19452 + 19452 19462 19569 + 19570 19569 19462 + 19387 10972 9745 + 9745 19571 19387 + 19571 19572 19387 + 19388 19387 19572 + 19572 19573 19388 + 19574 19388 19573 + 19389 19388 19574 + 9744 19571 9745 + 19571 9744 19575 + 19571 19575 19576 + 19576 19572 19571 + 19572 19576 19573 + 19573 19576 19577 + 19577 19578 19573 + 19573 19578 19574 + 19575 9744 9743 + 9743 19579 19575 + 19575 19579 19580 + 19580 19577 19575 + 19577 19576 19575 + 19579 9743 9742 + 9742 19581 19579 + 19579 19581 19582 + 19582 19580 19579 + 19580 19582 19583 + 19577 19580 19583 + 19584 19577 19583 + 19577 19584 19578 + 19578 19584 19585 + 19578 19585 19574 + 19581 9742 19586 + 19586 19587 19581 + 19582 19581 19587 + 19587 19588 19582 + 19583 19582 19588 + 19588 19589 19583 + 19584 19583 19589 + 19590 19584 19589 + 19584 19590 19585 + 9748 19586 9742 + 19591 19586 9748 + 19587 19586 19591 + 19587 19591 19592 + 19592 19588 19587 + 19589 19588 19592 + 19589 19592 19593 + 19593 19594 19589 + 19589 19594 19590 + 19595 19590 19594 + 19585 19590 19595 + 9748 9752 19591 + 19592 19591 9752 + 19593 19592 9752 + 19596 19593 9752 + 19597 19593 19596 + 19597 19594 19593 + 19594 19597 19595 + 19598 19595 19597 + 19585 19595 19598 + 19598 19574 19585 + 19574 19598 19599 + 19574 19599 19389 + 19600 19596 9752 + 19601 19596 19600 + 19601 19602 19596 + 19596 19602 19597 + 19597 19602 19603 + 19603 19598 19597 + 19599 19598 19603 + 10977 19600 9752 + 19604 19600 10977 + 19604 19605 19600 + 19600 19605 19601 + 19601 19605 19606 + 19607 19601 19606 + 19602 19601 19607 + 19607 19603 19602 + 19608 19603 19607 + 19603 19608 19599 + 10977 19609 19604 + 19604 19609 61 + 19610 19604 61 + 19605 19604 19610 + 19610 19606 19605 + 10976 19609 10977 + 19609 10976 19611 + 19611 61 19609 + 61 8701 19610 + 8707 19610 8701 + 8707 19606 19610 + 19606 8707 19385 + 19385 19612 19606 + 19606 19612 19607 + 19608 19607 19612 + 19612 19384 19608 + 19608 19384 19383 + 19599 19608 19383 + 19383 19389 19599 + 19384 19612 19385 + 11594 11598 19613 + 19613 11598 19614 + 19614 19615 19613 + 19616 19613 19615 + 19617 19613 19616 + 19613 19617 11594 + 11594 19617 11595 + 11597 19614 11598 + 19618 19614 11597 + 19615 19614 19618 + 19618 19619 19615 + 19615 19619 19620 + 19620 19621 19615 + 19615 19621 19616 + 11597 19622 19618 + 19618 19622 11346 + 11357 19618 11346 + 19619 19618 11357 + 11357 19623 19619 + 19619 19623 19624 + 19624 19620 19619 + 11597 11596 19622 + 19622 11596 11347 + 11347 11346 19622 + 19625 19620 19624 + 19620 19625 19626 + 19626 19621 19620 + 19621 19626 19627 + 19627 19616 19621 + 19628 19616 19627 + 19616 19628 19617 + 19617 19628 19629 + 19629 11595 19617 + 11590 11595 19629 + 19624 19630 19625 + 19625 19630 19631 + 19631 19632 19625 + 19626 19625 19632 + 19633 19630 19624 + 19630 19633 19634 + 19634 19631 19630 + 19631 19634 19635 + 19635 19636 19631 + 19631 19636 19637 + 19637 19632 19631 + 19624 19638 19633 + 19633 19638 19639 + 19639 19640 19633 + 19634 19633 19640 + 19640 19641 19634 + 19635 19634 19641 + 19638 19624 19623 + 19623 19642 19638 + 19638 19642 19643 + 19643 19639 19638 + 19642 19623 11357 + 11357 11356 19642 + 19642 11356 19644 + 19644 19643 19642 + 19643 19644 19645 + 19645 19646 19643 + 19643 19646 19647 + 19647 19648 19643 + 19640 19648 19647 + 19649 19644 11356 + 19645 19644 19649 + 19649 19650 19645 + 19651 19645 19650 + 19646 19645 19651 + 19651 19652 19646 + 19646 19652 19653 + 19653 19647 19646 + 11355 19649 11356 + 19654 19649 11355 + 19650 19649 19654 + 19650 19654 19655 + 19655 19656 19650 + 19650 19656 19651 + 19657 19651 19656 + 19651 19657 19658 + 19658 19652 19651 + 11355 19659 19654 + 19655 19654 19659 + 19659 19660 19655 + 19661 19655 19660 + 19655 19661 19662 + 19662 19656 19655 + 19656 19662 19657 + 19663 19657 19662 + 19658 19657 19663 + 11361 19659 11355 + 19659 11361 19664 + 19664 19660 19659 + 19665 19660 19664 + 19660 19665 19661 + 19666 19661 19665 + 19662 19661 19666 + 19666 19667 19662 + 19662 19667 19663 + 19664 11361 11360 + 11360 19668 19664 + 19669 19664 19668 + 19664 19669 19665 + 19665 19669 19670 + 19670 19671 19665 + 19665 19671 19666 + 11365 19668 11360 + 19672 19668 11365 + 19668 19672 19669 + 19670 19669 19672 + 19672 19673 19670 + 19674 19670 19673 + 19670 19674 19675 + 19675 19671 19670 + 19671 19675 19676 + 19676 19666 19671 + 11365 19677 19672 + 19672 19677 19678 + 19678 19673 19672 + 19679 19673 19678 + 19673 19679 19674 + 19680 19674 19679 + 19675 19674 19680 + 19677 11365 11364 + 11364 19681 19677 + 19678 19677 19681 + 19681 19682 19678 + 19683 19678 19682 + 19678 19683 19679 + 19679 19683 19684 + 19684 19685 19679 + 19679 19685 19680 + 19681 11364 11369 + 11369 19686 19681 + 19681 19686 19687 + 19687 19682 19681 + 19688 19682 19687 + 19682 19688 19683 + 19684 19683 19688 + 19686 11369 11374 + 11374 19689 19686 + 19687 19686 19689 + 19689 19690 19687 + 19691 19687 19690 + 19687 19691 19688 + 19688 19691 19692 + 19692 19693 19688 + 19688 19693 19684 + 19689 11374 11379 + 11379 19694 19689 + 19689 19694 19695 + 19695 19690 19689 + 19696 19690 19695 + 19690 19696 19691 + 19692 19691 19696 + 19694 11379 19697 + 19697 19698 19694 + 19695 19694 19698 + 19698 19699 19695 + 19700 19695 19699 + 19695 19700 19696 + 11378 19697 11379 + 19701 19697 11378 + 19698 19697 19701 + 19701 19702 19698 + 19698 19702 19703 + 19703 19699 19698 + 19704 19699 19703 + 19699 19704 19700 + 19705 19700 19704 + 19696 19700 19705 + 11378 11384 19701 + 19701 11384 11383 + 11383 19706 19701 + 19702 19701 19706 + 19706 19707 19702 + 19703 19702 19707 + 19707 19708 19703 + 19709 19703 19708 + 19703 19709 19704 + 19710 19706 11383 + 19707 19706 19710 + 19710 19711 19707 + 19707 19711 19712 + 19712 19708 19707 + 19713 19708 19712 + 19708 19713 19709 + 19714 19709 19713 + 19704 19709 19714 + 11383 11382 19710 + 19715 19710 11382 + 19711 19710 19715 + 19715 19716 19711 + 19712 19711 19716 + 19716 19717 19712 + 19718 19712 19717 + 19712 19718 19713 + 11382 19719 19715 + 19720 19715 19719 + 19716 19715 19720 + 19720 19721 19716 + 19716 19721 19722 + 19722 19717 19716 + 19723 19717 19722 + 19717 19723 19718 + 11388 19719 11382 + 19719 11388 19724 + 19719 19724 19720 + 19720 19724 19725 + 19725 19726 19720 + 19721 19720 19726 + 19726 19727 19721 + 19722 19721 19727 + 19724 11388 11387 + 11387 19728 19724 + 19724 19728 19725 + 19729 19725 19728 + 19725 19729 19730 + 19725 19730 19731 + 19731 19726 19725 + 19727 19726 19731 + 11387 11392 19728 + 19728 11392 19729 + 19729 11392 11391 + 11391 19732 19729 + 19732 19733 19729 + 19730 19729 19733 + 19733 19734 19730 + 19730 19734 19735 + 19735 19731 19730 + 19736 19731 19735 + 19731 19736 19727 + 19737 19732 11391 + 19732 19737 19738 + 19738 19739 19732 + 19732 19739 19740 + 19740 19733 19732 + 19733 19740 19741 + 19741 19734 19733 + 11391 11390 19737 + 11401 19737 11390 + 19738 19737 11401 + 11401 19742 19738 + 19738 19742 19743 + 19744 19738 19743 + 19739 19738 19744 + 19744 19745 19739 + 19740 19739 19745 + 19745 19746 19740 + 19741 19740 19746 + 19742 11401 19747 + 19747 19748 19742 + 19742 19748 19749 + 19749 19750 19742 + 19742 19750 19743 + 19747 11401 19751 + 19751 19752 19747 + 19747 19752 19753 + 19753 19754 19747 + 19748 19747 19754 + 19754 19755 19748 + 19749 19748 19755 + 11400 19751 11401 + 19756 19751 11400 + 19756 19752 19751 + 19752 19756 11424 + 11424 19753 19752 + 11423 19753 11424 + 19753 11423 19757 + 19757 19754 19753 + 19754 19757 19758 + 19758 19755 19754 + 11400 11406 19756 + 19756 11406 11411 + 19756 11411 11424 + 19759 19755 19758 + 19755 19759 19749 + 19760 19749 19759 + 19749 19760 19750 + 19750 19760 19761 + 19761 19743 19750 + 19762 19759 19758 + 19763 19759 19762 + 19759 19763 19760 + 19760 19763 19764 + 19761 19760 19764 + 19764 19765 19761 + 19766 19761 19765 + 19761 19766 19743 + 19758 19767 19762 + 19767 19768 19762 + 19769 19762 19768 + 19762 19769 19763 + 19763 19769 19770 + 19770 19764 19763 + 19771 19767 19758 + 19772 19767 19771 + 19767 19772 11431 + 11431 19768 19767 + 11431 11430 19768 + 19768 11430 19769 + 19758 19757 19771 + 19771 19757 11423 + 11423 11422 19771 + 19772 19771 11422 + 11422 11421 19772 + 11431 19772 11421 + 19769 11430 11429 + 11429 19773 19769 + 19773 19774 19769 + 19774 19770 19769 + 19775 19770 19774 + 19770 19775 19764 + 19764 19775 19776 + 19776 19765 19764 + 19765 19776 19777 + 19765 19777 19766 + 19778 19773 11429 + 19779 19773 19778 + 19773 19779 19780 + 19780 19774 19773 + 19780 19781 19774 + 19774 19781 19775 + 19775 19781 19782 + 19782 19776 19775 + 11429 11428 19778 + 19778 11428 11440 + 11440 19783 19778 + 19779 19778 19783 + 19784 19783 11440 + 19785 19783 19784 + 19783 19785 19779 + 11440 19786 19784 + 19784 19786 19787 + 19787 19788 19784 + 19785 19784 19788 + 19788 19789 19785 + 19785 19789 19790 + 19779 19785 19790 + 19791 19786 11440 + 19786 19791 19792 + 19792 19787 19786 + 19793 19787 19792 + 19787 19793 19794 + 19794 19788 19787 + 19789 19788 19794 + 19789 19794 19795 + 19795 19790 19789 + 11440 19796 19791 + 19791 19796 19797 + 19797 19798 19791 + 19791 19798 19799 + 19799 19792 19791 + 19800 19792 19799 + 19792 19800 19793 + 19796 11440 11439 + 11439 11445 19796 + 19797 19796 11445 + 11445 11453 19797 + 19801 19797 11453 + 19798 19797 19801 + 19801 19802 19798 + 19798 19802 19803 + 19803 19799 19798 + 19799 19803 19804 + 19799 19804 19800 + 11453 11457 19801 + 19801 11457 11462 + 11462 19805 19801 + 19802 19801 19805 + 19805 19806 19802 + 19802 19806 19807 + 19807 19803 19802 + 19804 19803 19807 + 19807 19808 19804 + 19800 19804 19808 + 19808 19809 19800 + 19793 19800 19809 + 11467 19805 11462 + 19805 11467 19810 + 19810 19806 19805 + 19806 19810 10876 + 10876 10875 19806 + 19806 10875 19807 + 10881 19807 10875 + 19807 10881 19811 + 19811 19808 19807 + 19810 11467 11466 + 11466 19812 19810 + 19810 19812 10867 + 10867 10876 19810 + 19813 19812 11466 + 19812 19813 10868 + 10868 10867 19812 + 11466 11471 19813 + 19813 11471 11476 + 11476 19814 19813 + 19813 19814 10863 + 10863 10868 19813 + 19815 19814 11476 + 19814 19815 19816 + 19816 10863 19814 + 10863 19816 10856 + 10856 19816 19817 + 19817 10851 10856 + 11476 19818 19815 + 19815 19818 19819 + 19819 19820 19815 + 19815 19820 19817 + 19817 19816 19815 + 19818 11476 11475 + 11475 11481 19818 + 19819 19818 11481 + 11481 19821 19819 + 19822 19819 19821 + 19820 19819 19822 + 19822 19823 19820 + 19820 19823 19824 + 19824 19817 19820 + 10851 19817 19824 + 19824 10852 10851 + 11486 19821 11481 + 19821 11486 11491 + 11491 19825 19821 + 19821 19825 19822 + 19822 19825 19826 + 19826 19827 19822 + 19823 19822 19827 + 19827 19828 19823 + 19824 19823 19828 + 19828 19829 19824 + 10852 19824 19829 + 19829 10846 10852 + 19825 11491 19830 + 19830 19826 19825 + 19831 19826 19830 + 19826 19831 19832 + 19832 19827 19826 + 19827 19832 19833 + 19833 19828 19827 + 19828 19833 19834 + 19834 19829 19828 + 19835 19830 11491 + 19836 19830 19835 + 19830 19836 19831 + 19831 19836 19837 + 19837 19838 19831 + 19831 19838 19839 + 19839 19832 19831 + 19833 19832 19839 + 11491 11490 19835 + 11496 19835 11490 + 19840 19835 11496 + 19835 19840 19836 + 19837 19836 19840 + 19840 19841 19837 + 19842 19837 19841 + 19837 19842 19843 + 19843 19838 19837 + 19838 19843 19844 + 19844 19839 19838 + 11496 19845 19840 + 19840 19845 19846 + 19846 19841 19840 + 19847 19841 19846 + 19841 19847 19842 + 19848 19842 19847 + 19843 19842 19848 + 19845 11496 11495 + 11495 11501 19845 + 19846 19845 11501 + 11501 19849 19846 + 19850 19846 19849 + 19846 19850 19847 + 19847 19850 19851 + 19851 19852 19847 + 19847 19852 19848 + 11505 19849 11501 + 19853 19849 11505 + 19849 19853 19850 + 19851 19850 19853 + 19853 19854 19851 + 19855 19851 19854 + 19851 19855 19856 + 19856 19852 19851 + 19852 19856 19857 + 19857 19848 19852 + 11505 19858 19853 + 19853 19858 19859 + 19859 19854 19853 + 19860 19854 19859 + 19854 19860 19855 + 19861 19855 19860 + 19856 19855 19861 + 19858 11505 11510 + 11510 19862 19858 + 19859 19858 19862 + 19862 19863 19859 + 19864 19859 19863 + 19859 19864 19860 + 19860 19864 19865 + 19865 19866 19860 + 19860 19866 19861 + 19862 11510 11509 + 11509 19867 19862 + 19862 19867 19868 + 19868 19863 19862 + 19869 19863 19868 + 19863 19869 19864 + 19865 19864 19869 + 19867 11509 11518 + 11518 19870 19867 + 19868 19867 19870 + 19870 19871 19868 + 19872 19868 19871 + 19868 19872 19869 + 19869 19872 19873 + 19873 19874 19869 + 19869 19874 19865 + 19870 11518 11517 + 11517 19875 19870 + 19870 19875 19876 + 19876 19871 19870 + 19877 19871 19876 + 19871 19877 19872 + 19873 19872 19877 + 19875 11517 11522 + 11522 19878 19875 + 19876 19875 19878 + 19878 19879 19876 + 19880 19876 19879 + 19876 19880 19877 + 19877 19880 19881 + 19881 19882 19877 + 19877 19882 19873 + 19878 11522 11521 + 11521 19883 19878 + 19878 19883 19884 + 19884 19879 19878 + 19885 19879 19884 + 19879 19885 19880 + 19881 19880 19885 + 19883 11521 11529 + 11529 19886 19883 + 19884 19883 19886 + 19886 19887 19884 + 19888 19884 19887 + 19884 19888 19885 + 19885 19888 19889 + 19889 19890 19885 + 19885 19890 19881 + 19886 11529 11528 + 11528 19891 19886 + 19886 19891 19892 + 19892 19887 19886 + 19893 19887 19892 + 19887 19893 19888 + 19889 19888 19893 + 19891 11528 11537 + 11537 19894 19891 + 19892 19891 19894 + 19894 19895 19892 + 19896 19892 19895 + 19892 19896 19893 + 19893 19896 19897 + 19897 19898 19893 + 19893 19898 19889 + 19894 11537 11536 + 11536 19899 19894 + 19894 19899 19900 + 19900 19895 19894 + 19901 19895 19900 + 19895 19901 19896 + 19897 19896 19901 + 19899 11536 19902 + 19902 19903 19899 + 19900 19899 19903 + 19903 19904 19900 + 19905 19900 19904 + 19900 19905 19901 + 11541 19902 11536 + 19906 19902 11541 + 19903 19902 19906 + 19906 19907 19903 + 19903 19907 19908 + 19908 19904 19903 + 19909 19904 19908 + 19904 19909 19905 + 19910 19905 19909 + 19901 19905 19910 + 11541 11545 19906 + 19906 11545 11550 + 11550 19911 19906 + 19907 19906 19911 + 19911 19912 19907 + 19908 19907 19912 + 19912 19913 19908 + 19914 19908 19913 + 19908 19914 19909 + 19915 19911 11550 + 19912 19911 19915 + 19915 19916 19912 + 19912 19916 19917 + 19917 19913 19912 + 19918 19913 19917 + 19913 19918 19914 + 19919 19914 19918 + 19909 19914 19919 + 11550 11555 19915 + 19915 11555 19920 + 19920 19921 19915 + 19916 19915 19921 + 19921 19922 19916 + 19917 19916 19922 + 19922 19923 19917 + 19924 19917 19923 + 19917 19924 19918 + 11554 19920 11555 + 19920 11554 19925 + 19925 19926 19920 + 19920 19926 19927 + 19927 19921 19920 + 19922 19921 19927 + 19927 19928 19922 + 19922 19928 19929 + 19929 19923 19922 + 19925 11554 11559 + 11559 11564 19925 + 19930 19925 11564 + 19926 19925 19930 + 19930 19931 19926 + 19927 19926 19931 + 19931 19932 19927 + 19928 19927 19932 + 19932 19933 19928 + 19929 19928 19933 + 11564 19934 19930 + 19935 19930 19934 + 19931 19930 19935 + 19935 19936 19931 + 19931 19936 19937 + 19937 19932 19931 + 19933 19932 19937 + 19938 19934 11564 + 19939 19934 19938 + 19934 19939 19935 + 19940 19935 19939 + 19936 19935 19940 + 19940 19941 19936 + 19937 19936 19941 + 11564 11563 19938 + 11569 19938 11563 + 19942 19938 11569 + 19938 19942 19939 + 19939 19942 19943 + 19943 19944 19939 + 19939 19944 19940 + 19945 19940 19944 + 19941 19940 19945 + 11569 19946 19942 + 19942 19946 19947 + 19947 19943 19942 + 19948 19943 19947 + 19943 19948 19949 + 19949 19944 19943 + 19944 19949 19945 + 19950 19946 11569 + 19946 19950 19951 + 19951 19947 19946 + 19947 19951 19952 + 19952 19953 19947 + 19947 19953 19948 + 19954 19948 19953 + 19949 19948 19954 + 11569 11568 19950 + 19950 11568 11567 + 11567 19955 19950 + 19950 19955 19956 + 19956 19951 19950 + 19952 19951 19956 + 19956 19957 19952 + 19952 19957 19958 + 19958 19959 19952 + 19953 19952 19959 + 11576 19955 11567 + 19955 11576 19960 + 19960 19956 19955 + 19956 19960 19961 + 19961 19957 19956 + 19957 19961 19962 + 19962 19958 19957 + 11580 19960 11576 + 19961 19960 11580 + 11580 19963 19961 + 19961 19963 19964 + 19964 19962 19961 + 19965 19962 19964 + 19958 19962 19965 + 19965 19966 19958 + 19958 19966 19967 + 19967 19959 19958 + 11585 19963 11580 + 19963 11585 19968 + 19968 19964 19963 + 19964 19968 19969 + 19969 19970 19964 + 19964 19970 19965 + 19965 19970 19971 + 19971 19972 19965 + 19966 19965 19972 + 19973 19968 11585 + 19969 19968 19973 + 19973 19974 19969 + 19975 19969 19974 + 19970 19969 19975 + 19975 19971 19970 + 11585 11590 19973 + 19629 19973 11590 + 19974 19973 19629 + 19629 19976 19974 + 19974 19976 19977 + 19977 19978 19974 + 19974 19978 19975 + 19979 19975 19978 + 19971 19975 19979 + 19976 19629 19628 + 19628 19980 19976 + 19976 19980 19981 + 19981 19982 19976 + 19982 19977 19976 + 19983 19977 19982 + 19978 19977 19983 + 19983 19984 19978 + 19978 19984 19979 + 19627 19980 19628 + 19980 19627 19985 + 19985 19981 19980 + 19981 19985 19986 + 19981 19986 19987 + 19987 19982 19981 + 19988 19982 19987 + 19982 19988 19983 + 19983 19988 19989 + 19984 19983 19989 + 19985 19627 19626 + 19990 19985 19626 + 19986 19985 19990 + 19990 19991 19986 + 19986 19991 19992 + 19987 19986 19992 + 19993 19987 19992 + 19988 19987 19993 + 19993 19989 19988 + 19994 19989 19993 + 19989 19994 19984 + 19626 19995 19990 + 19996 19990 19995 + 19990 19996 19991 + 19991 19996 19997 + 19997 19998 19991 + 19991 19998 19992 + 19632 19995 19626 + 19995 19632 19637 + 19637 19999 19995 + 19995 19999 19996 + 19997 19996 19999 + 19999 20000 19997 + 20001 19997 20000 + 19997 20001 19998 + 19998 20001 20002 + 20002 19992 19998 + 19999 19637 20003 + 20003 20000 19999 + 20000 20003 20004 + 20004 20005 20000 + 20000 20005 20001 + 20001 20005 20006 + 20002 20001 20006 + 20007 20003 19637 + 20004 20003 20007 + 20007 20008 20004 + 20009 20004 20008 + 20005 20004 20009 + 20009 20006 20005 + 19637 19636 20007 + 20010 20007 19636 + 20007 20010 20011 + 20011 20008 20007 + 20008 20011 20012 + 20012 20013 20008 + 20008 20013 20009 + 20014 20009 20013 + 20009 20014 20006 + 19636 19635 20010 + 20010 19635 20015 + 20015 20016 20010 + 20011 20010 20016 + 20016 20017 20011 + 20011 20017 20018 + 20012 20011 20018 + 19641 20015 19635 + 20015 19641 20019 + 20019 20020 20015 + 20015 20020 20021 + 20021 20016 20015 + 20017 20016 20021 + 20021 20022 20017 + 20017 20022 20023 + 20023 20018 20017 + 20019 19641 19640 + 19640 20024 20019 + 20025 20019 20024 + 20020 20019 20025 + 20025 20026 20020 + 20020 20026 20027 + 20027 20021 20020 + 20022 20021 20027 + 20027 20028 20022 + 20023 20022 20028 + 19647 20024 19640 + 20024 19647 19653 + 19653 20029 20024 + 20024 20029 20025 + 20030 20025 20029 + 20025 20030 20031 + 20031 20026 20025 + 20026 20031 20032 + 20032 20027 20026 + 20027 20032 20033 + 20033 20028 20027 + 20034 20029 19653 + 20029 20034 20030 + 20030 20034 20035 + 20036 20030 20035 + 20031 20030 20036 + 20036 20037 20031 + 20031 20037 20038 + 20038 20032 20031 + 20033 20032 20038 + 19653 20039 20034 + 20034 20039 20040 + 20040 20035 20034 + 11018 20035 20040 + 20035 11018 11025 + 11025 20041 20035 + 20035 20041 20036 + 20039 19653 19652 + 19652 19658 20039 + 20040 20039 19658 + 19658 20042 20040 + 20043 20040 20042 + 20040 20043 11018 + 11018 20043 11019 + 11019 20043 20044 + 20044 20045 11019 + 11020 11019 20045 + 19663 20042 19658 + 20044 20042 19663 + 20042 20044 20043 + 19663 20046 20044 + 20044 20046 20047 + 20047 20045 20044 + 20048 20045 20047 + 20045 20048 11020 + 11014 11020 20048 + 20048 20049 11014 + 11015 11014 20049 + 20046 19663 19667 + 19667 20050 20046 + 20047 20046 20050 + 20050 20051 20047 + 20052 20047 20051 + 20047 20052 20048 + 20048 20052 20053 + 20053 20049 20048 + 20054 20049 20053 + 20049 20054 11015 + 11016 11015 20054 + 20050 19667 19666 + 19666 19676 20050 + 20050 19676 20055 + 20055 20051 20050 + 20056 20051 20055 + 20051 20056 20052 + 20053 20052 20056 + 20056 20057 20053 + 20058 20053 20057 + 20053 20058 20054 + 20055 19676 19675 + 19675 20059 20055 + 20060 20055 20059 + 20055 20060 20056 + 20056 20060 20061 + 20061 20057 20056 + 20062 20057 20061 + 20057 20062 20058 + 20063 20058 20062 + 20054 20058 20063 + 19680 20059 19675 + 20064 20059 19680 + 20059 20064 20060 + 20061 20060 20064 + 20064 20065 20061 + 20066 20061 20065 + 20061 20066 20062 + 20062 20066 20067 + 20067 20068 20062 + 20062 20068 20063 + 19680 20069 20064 + 20064 20069 20070 + 20070 20065 20064 + 20071 20065 20070 + 20065 20071 20066 + 20067 20066 20071 + 20069 19680 19685 + 19685 20072 20069 + 20070 20069 20072 + 20072 20073 20070 + 20074 20070 20073 + 20070 20074 20071 + 20071 20074 20075 + 20075 20076 20071 + 20071 20076 20067 + 20072 19685 19684 + 19684 20077 20072 + 20072 20077 20078 + 20078 20073 20072 + 20079 20073 20078 + 20073 20079 20074 + 20075 20074 20079 + 20077 19684 19693 + 19693 20080 20077 + 20078 20077 20080 + 20080 20081 20078 + 20082 20078 20081 + 20078 20082 20079 + 20079 20082 20083 + 20083 20084 20079 + 20079 20084 20075 + 20080 19693 19692 + 19692 20085 20080 + 20080 20085 20086 + 20086 20081 20080 + 20087 20081 20086 + 20081 20087 20082 + 20083 20082 20087 + 20085 19692 20088 + 20088 20089 20085 + 20086 20085 20089 + 20089 20090 20086 + 20091 20086 20090 + 20086 20091 20087 + 19696 20088 19692 + 19705 20088 19696 + 20089 20088 19705 + 19705 20092 20089 + 20089 20092 20093 + 20093 20090 20089 + 19919 20090 20093 + 20090 19919 20091 + 19918 20091 19919 + 20087 20091 19918 + 19918 19924 20087 + 20087 19924 20083 + 20092 19705 20094 + 20094 20095 20092 + 20093 20092 20095 + 20095 20096 20093 + 20097 20093 20096 + 20093 20097 19919 + 19919 20097 19909 + 19909 20097 19910 + 19704 20094 19705 + 19714 20094 19704 + 20095 20094 19714 + 19714 20098 20095 + 20095 20098 20099 + 20099 20096 20095 + 19910 20096 20099 + 20096 19910 20097 + 20098 19714 20100 + 20100 20101 20098 + 20099 20098 20101 + 20101 20102 20099 + 20103 20099 20102 + 20099 20103 19910 + 19910 20103 19901 + 19901 20103 19897 + 19713 20100 19714 + 20104 20100 19713 + 20101 20100 20104 + 20104 20105 20101 + 20101 20105 20106 + 20106 20102 20101 + 19897 20102 20106 + 20102 19897 20103 + 19713 19718 20104 + 20104 19718 19723 + 19723 20107 20104 + 20105 20104 20107 + 20107 20108 20105 + 20106 20105 20108 + 20108 20109 20106 + 19898 20106 20109 + 20106 19898 19897 + 20110 20107 19723 + 20108 20107 20110 + 20110 20111 20108 + 20108 20111 20112 + 20112 20109 20108 + 19889 20109 20112 + 20109 19889 19898 + 19723 20113 20110 + 20110 20113 20114 + 20114 20115 20110 + 20111 20110 20115 + 20115 20116 20111 + 20112 20111 20116 + 19722 20113 19723 + 20113 19722 20117 + 20117 20114 20113 + 20114 20117 20118 + 20118 20119 20114 + 20114 20119 20120 + 20120 20115 20114 + 20116 20115 20120 + 19727 20117 19722 + 20118 20117 19727 + 19727 19736 20118 + 20118 19736 20121 + 20121 20122 20118 + 20119 20118 20122 + 20122 20123 20119 + 20120 20119 20123 + 20123 20124 20120 + 20125 20120 20124 + 20120 20125 20116 + 19735 20121 19736 + 20121 19735 20126 + 20126 20127 20121 + 20121 20127 20128 + 20128 20122 20121 + 20123 20122 20128 + 20128 20129 20123 + 20123 20129 20130 + 20130 20124 20123 + 20126 19735 19734 + 19734 19741 20126 + 20131 20126 19741 + 20127 20126 20131 + 20131 20132 20127 + 20128 20127 20132 + 20132 20133 20128 + 20129 20128 20133 + 20133 20134 20129 + 20130 20129 20134 + 19741 20135 20131 + 20136 20131 20135 + 20132 20131 20136 + 20136 20137 20132 + 20132 20137 20138 + 20138 20133 20132 + 20134 20133 20138 + 19746 20135 19741 + 20135 19746 20139 + 20139 20140 20135 + 20135 20140 20136 + 20136 20140 20141 + 20141 20142 20136 + 20137 20136 20142 + 20142 20143 20137 + 20138 20137 20143 + 20139 19746 19745 + 19745 20144 20139 + 20145 20139 20144 + 20140 20139 20145 + 20145 20141 20140 + 20146 20141 20145 + 20141 20146 20147 + 20147 20142 20141 + 20143 20142 20147 + 20148 20144 19745 + 20144 20148 20149 + 20149 20150 20144 + 20144 20150 20145 + 20150 20151 20145 + 20146 20145 20151 + 19745 19744 20148 + 20148 19744 20152 + 20152 20153 20148 + 20149 20148 20153 + 20154 20149 20153 + 20155 20149 20154 + 20150 20149 20155 + 19743 20152 19744 + 20156 20152 19743 + 20153 20152 20156 + 20156 20157 20153 + 20153 20157 20158 + 20158 20159 20153 + 20153 20159 20154 + 19743 19766 20156 + 20160 20156 19766 + 20157 20156 20160 + 20160 20161 20157 + 20157 20161 20162 + 20162 20158 20157 + 20163 20158 20162 + 20158 20163 20159 + 20159 20163 20164 + 20164 20154 20159 + 19766 19777 20160 + 19777 20165 20160 + 20166 20160 20165 + 20160 20166 20167 + 20167 20161 20160 + 20161 20167 20168 + 20168 20162 20161 + 19777 19776 20165 + 19776 19782 20165 + 19782 20169 20165 + 20165 20169 20166 + 20170 20166 20169 + 20167 20166 20170 + 20170 20171 20167 + 20167 20171 20172 + 20172 20168 20167 + 20173 20168 20172 + 20162 20168 20173 + 20174 20169 19782 + 20169 20174 20170 + 20175 20170 20174 + 20175 20171 20170 + 20171 20175 20176 + 20176 20172 20171 + 20176 20177 20172 + 20172 20177 20173 + 20178 20174 19782 + 20179 20174 20178 + 20174 20179 20175 + 20175 20179 19779 + 20176 20175 19779 + 19790 20176 19779 + 20177 20176 19790 + 19790 20180 20177 + 20173 20177 20180 + 19781 20178 19782 + 20178 19781 19780 + 20179 20178 19780 + 20179 19780 19779 + 19790 19795 20180 + 20180 19795 20181 + 20181 20182 20180 + 20180 20182 20173 + 20182 20183 20173 + 20183 20184 20173 + 20185 20173 20184 + 20173 20185 20162 + 20181 19795 20186 + 20186 20187 20181 + 20188 20181 20187 + 20188 20182 20181 + 20182 20188 20189 + 20189 20183 20182 + 19795 19794 20186 + 19794 19793 20186 + 19809 20186 19793 + 20186 19809 20190 + 20190 20191 20186 + 20186 20191 20192 + 20192 20187 20186 + 20193 20187 20192 + 20187 20193 20188 + 20188 20193 20194 + 20189 20188 20194 + 20190 19809 19808 + 19808 19811 20190 + 20190 19811 20195 + 20195 20196 20190 + 20191 20190 20196 + 20196 20197 20191 + 20192 20191 20197 + 20197 20198 20192 + 20193 20192 20198 + 20198 20199 20193 + 20193 20199 20194 + 10880 20195 19811 + 10886 20195 10880 + 20195 10886 20200 + 20200 20196 20195 + 20197 20196 20200 + 20200 20201 20197 + 20197 20201 20202 + 20202 20198 20197 + 20199 20198 20202 + 19811 10881 10880 + 20200 10886 10885 + 10885 20203 20200 + 20201 20200 20203 + 20203 20204 20201 + 20202 20201 20204 + 20204 20205 20202 + 20199 20202 20205 + 20205 20206 20199 + 20199 20206 20194 + 10890 20203 10885 + 20204 20203 10890 + 10890 10894 20204 + 20204 10894 10899 + 10899 20205 20204 + 20206 20205 10899 + 20206 10899 10898 + 10898 20194 20206 + 20194 10898 20207 + 20194 20207 20208 + 20208 20209 20194 + 20194 20209 20189 + 20207 10898 20210 + 20210 20211 20207 + 20208 20207 20211 + 20212 20208 20211 + 20213 20208 20212 + 20209 20208 20213 + 10897 20210 10898 + 10909 20210 10897 + 10909 20211 20210 + 20211 10909 20214 + 20214 20215 20211 + 20211 20215 20212 + 20214 10909 10686 + 20216 20214 10686 + 20217 20214 20216 + 20214 20217 20215 + 20215 20217 20218 + 20218 20219 20215 + 20215 20219 20212 + 10686 20220 20216 + 20220 20221 20216 + 20222 20216 20221 + 20216 20222 20223 + 20216 20223 20217 + 20218 20217 20223 + 10693 20220 10686 + 20220 10693 20224 + 20220 20224 20225 + 20225 20221 20220 + 20221 20225 20226 + 20221 20226 20222 + 20227 20222 20226 + 20223 20222 20227 + 20227 20228 20223 + 20223 20228 20218 + 20224 10693 10692 + 10692 20229 20224 + 20224 20229 20230 + 20230 20225 20224 + 20226 20225 20230 + 20230 20231 20226 + 20226 20231 20227 + 20232 20227 20231 + 20227 20232 20233 + 20233 20228 20227 + 20229 10692 20234 + 20229 20234 20235 + 20235 20236 20229 + 20229 20236 20230 + 20237 20230 20236 + 20230 20237 20238 + 20238 20231 20230 + 20231 20238 20232 + 20234 10692 20239 + 20239 20240 20234 + 20235 20234 20240 + 20241 20235 20240 + 20242 20235 20241 + 20236 20235 20242 + 20236 20242 20237 + 20243 20237 20242 + 20238 20237 20243 + 20244 20239 10692 + 20245 20239 20244 + 20240 20239 20245 + 20240 20245 20246 + 20246 20247 20240 + 20240 20247 20241 + 10698 20244 10692 + 20248 20244 10698 + 20244 20248 20249 + 20244 20249 20245 + 20245 20249 20250 + 20246 20245 20250 + 20251 20246 20250 + 20252 20246 20251 + 20247 20246 20252 + 10698 10704 20248 + 20248 10704 20253 + 20253 20254 20248 + 20254 20255 20248 + 20249 20248 20255 + 20255 20250 20249 + 20250 20255 20256 + 20250 20256 20257 + 20257 20251 20250 + 10703 20253 10704 + 10703 20258 20253 + 20253 20258 20259 + 20259 20254 20253 + 20254 20259 20260 + 20254 20260 20256 + 20256 20255 20254 + 20258 10703 10708 + 10708 20261 20258 + 20258 20261 20262 + 20259 20258 20262 + 20260 20259 20262 + 20262 20263 20260 + 20260 20263 20264 + 20256 20260 20264 + 20264 20257 20256 + 20265 20257 20264 + 20251 20257 20265 + 10708 10707 20261 + 20261 10707 20266 + 20266 20262 20261 + 20263 20262 20266 + 20266 20267 20263 + 20263 20267 20268 + 20268 20264 20263 + 20264 20268 20269 + 20264 20269 20265 + 20270 20266 10707 + 20270 20271 20266 + 20271 20267 20266 + 20267 20271 20272 + 20272 20268 20267 + 20269 20268 20272 + 20272 20273 20269 + 20265 20269 20273 + 10712 20270 10707 + 20274 20270 10712 + 20270 20274 20271 + 20271 20274 20275 + 20275 20272 20271 + 20272 20275 20276 + 20276 20273 20272 + 10712 10711 20274 + 20275 20274 10711 + 20277 20275 10711 + 20276 20275 20277 + 20277 20278 20276 + 20276 20278 20279 + 20279 20280 20276 + 20273 20276 20280 + 10711 20281 20277 + 20282 20277 20281 + 20277 20282 20283 + 20283 20278 20277 + 20278 20283 20284 + 20284 20279 20278 + 10716 20281 10711 + 20281 10716 10721 + 20281 10721 20282 + 20282 10721 20285 + 20285 20286 20282 + 20283 20282 20286 + 20286 20287 20283 + 20283 20287 20288 + 20288 20284 20283 + 10721 10720 20285 + 10735 20285 10720 + 20285 10735 20289 + 20289 20290 20285 + 20285 20290 20291 + 20291 20286 20285 + 20287 20286 20291 + 20287 20291 20292 + 20292 20288 20287 + 20289 10735 20293 + 20293 20294 20289 + 20295 20289 20294 + 20290 20289 20295 + 20295 20296 20290 + 20290 20296 20292 + 20292 20291 20290 + 10734 20293 10735 + 20297 20293 10734 + 20294 20293 20297 + 20294 20297 20298 + 20298 20299 20294 + 20294 20299 20295 + 20300 20295 20299 + 20296 20295 20300 + 10734 10743 20297 + 20298 20297 10743 + 10743 10752 20298 + 20301 20298 10752 + 20299 20298 20301 + 20301 20302 20299 + 20299 20302 20300 + 20300 20302 20303 + 20303 20304 20300 + 20305 20300 20304 + 20300 20305 20296 + 10752 20306 20301 + 20301 20306 20307 + 20307 20308 20301 + 20302 20301 20308 + 20308 20303 20302 + 10751 20306 10752 + 20306 10751 20309 + 20309 20307 20306 + 20309 10768 20307 + 20307 10768 10785 + 10785 20308 20307 + 20303 20308 10785 + 10785 10791 20303 + 20303 10791 10796 + 10796 20304 20303 + 10759 20309 10751 + 10768 20309 10759 + 20162 20185 20163 + 20164 20163 20185 + 20185 20310 20164 + 20311 20164 20310 + 20164 20311 20312 + 20312 20154 20164 + 20154 20312 20155 + 20184 20310 20185 + 20310 20184 20313 + 20313 20314 20310 + 20310 20314 20311 + 20315 20311 20314 + 20312 20311 20315 + 20315 20316 20312 + 20312 20316 20317 + 20155 20312 20317 + 20313 20184 20183 + 20183 20318 20313 + 20313 20318 20319 + 20319 20320 20313 + 20314 20313 20320 + 20320 20321 20314 + 20314 20321 20315 + 20322 20315 20321 + 20315 20322 20316 + 20189 20318 20183 + 20318 20189 20323 + 20323 20319 20318 + 20323 20324 20319 + 20319 20324 20325 + 20325 20320 20319 + 20321 20320 20325 + 20325 20326 20321 + 20321 20326 20322 + 20209 20323 20189 + 20324 20323 20209 + 20209 20213 20324 + 20324 20213 20327 + 20325 20324 20327 + 20326 20325 20327 + 20327 20328 20326 + 20322 20326 20328 + 20329 20322 20328 + 20316 20322 20329 + 20329 20330 20316 + 20316 20330 20317 + 20212 20327 20213 + 20327 20212 20328 + 20328 20212 20331 + 20331 20332 20328 + 20328 20332 20329 + 20333 20329 20332 + 20329 20333 20330 + 20330 20333 20334 + 20334 20317 20330 + 20219 20331 20212 + 20335 20331 20219 + 20332 20331 20335 + 20332 20335 20333 + 20334 20333 20335 + 20335 20336 20334 + 20337 20334 20336 + 20334 20337 20338 + 20338 20317 20334 + 20219 20336 20335 + 20336 20219 20218 + 20218 20339 20336 + 20336 20339 20337 + 20340 20337 20339 + 20338 20337 20340 + 20340 20341 20338 + 20338 20341 20342 + 20343 20338 20342 + 20317 20338 20343 + 20339 20218 20228 + 20228 20233 20339 + 20339 20233 20340 + 20344 20340 20233 + 20340 20344 20341 + 20341 20344 20345 + 20345 20346 20341 + 20341 20346 20342 + 20233 20232 20344 + 20345 20344 20232 + 20232 20238 20345 + 20243 20345 20238 + 20345 20243 20346 + 20346 20243 20347 + 20347 20342 20346 + 20347 20348 20342 + 20342 20348 20349 + 20349 20350 20342 + 20342 20350 20343 + 20347 20243 20242 + 20242 20351 20347 + 20348 20347 20351 + 20351 20352 20348 + 20348 20352 20353 + 20353 20354 20348 + 20354 20349 20348 + 20241 20351 20242 + 20241 20352 20351 + 20352 20241 20247 + 20247 20252 20352 + 20352 20252 20353 + 20251 20353 20252 + 20265 20353 20251 + 20353 20265 20355 + 20355 20354 20353 + 20356 20354 20355 + 20354 20356 20357 + 20357 20349 20354 + 20349 20357 20358 + 20358 20350 20349 + 20350 20358 20359 + 20359 20343 20350 + 20355 20265 20273 + 20273 20360 20355 + 20361 20355 20360 + 20355 20361 20356 + 20356 20361 20362 + 20362 20363 20356 + 20356 20363 20364 + 20364 20357 20356 + 20358 20357 20364 + 20280 20360 20273 + 20365 20360 20280 + 20360 20365 20361 + 20362 20361 20365 + 20365 20366 20362 + 20366 20367 20362 + 20368 20362 20367 + 20363 20362 20368 + 20365 20280 20279 + 20279 20366 20365 + 20366 20279 20284 + 20284 20369 20366 + 20366 20369 20370 + 20370 20367 20366 + 20367 20370 20371 + 20371 20372 20367 + 20367 20372 20368 + 20369 20284 20288 + 20288 20373 20369 + 20370 20369 20373 + 20374 20370 20373 + 20371 20370 20374 + 20292 20373 20288 + 20373 20292 20296 + 20296 20305 20373 + 20373 20305 20374 + 20304 20374 20305 + 20374 20304 10796 + 10796 20375 20374 + 20374 20375 20371 + 20371 20375 20376 + 20376 20377 20371 + 20377 20378 20371 + 20372 20371 20378 + 20378 20379 20372 + 20368 20372 20379 + 20375 10796 10795 + 10795 20376 20375 + 10800 20376 10795 + 20376 10800 20380 + 20380 20377 20376 + 20380 20381 20377 + 20377 20381 20382 + 20382 20378 20377 + 20382 20379 20378 + 20379 20382 20383 + 20383 20384 20379 + 20379 20384 20368 + 20380 10800 10799 + 10799 20385 20380 + 20381 20380 20385 + 20385 20386 20381 + 20381 20386 20387 + 20387 20383 20381 + 20383 20382 20381 + 10804 20385 10799 + 20385 10804 10809 + 10809 20386 20385 + 20386 10809 20388 + 20388 20387 20386 + 20387 20388 20389 + 20389 20390 20387 + 20387 20390 20391 + 20391 20383 20387 + 20384 20383 20391 + 20392 20388 10809 + 20389 20388 20392 + 20392 20393 20389 + 20389 20393 20394 + 20394 20395 20389 + 20390 20389 20395 + 20395 20396 20390 + 20391 20390 20396 + 10809 10808 20392 + 10814 20392 10808 + 20392 10814 20397 + 20397 20393 20392 + 20393 20397 20398 + 20398 20394 20393 + 20394 20398 20399 + 20399 20400 20394 + 20394 20400 20401 + 20401 20395 20394 + 20396 20395 20401 + 20397 10814 10813 + 10813 20402 20397 + 20397 20402 20403 + 20403 20398 20397 + 20399 20398 20403 + 20403 20404 20399 + 20399 20404 20405 + 20405 20406 20399 + 20400 20399 20406 + 10821 20402 10813 + 20402 10821 20407 + 20407 20403 20402 + 20403 20407 20408 + 20408 20404 20403 + 20404 20408 20409 + 20409 20405 20404 + 20410 20407 10821 + 20408 20407 20410 + 20410 20411 20408 + 20408 20411 20412 + 20412 20409 20408 + 20413 20409 20412 + 20405 20409 20413 + 10821 10825 20410 + 10830 20410 10825 + 20410 10830 10838 + 10838 20411 20410 + 20411 10838 20414 + 20414 20412 20411 + 20412 20414 20415 + 20415 20416 20412 + 20412 20416 20413 + 20417 20414 10838 + 20415 20414 20417 + 20417 20418 20415 + 20415 20418 20419 + 20419 20420 20415 + 20416 20415 20420 + 20420 20421 20416 + 20413 20416 20421 + 10838 10837 20417 + 20422 20417 10837 + 20417 20422 20423 + 20423 20418 20417 + 20418 20423 20424 + 20424 20419 20418 + 10837 10836 20422 + 10847 20422 10836 + 20423 20422 10847 + 10847 19834 20423 + 20423 19834 19833 + 19833 20424 20423 + 19839 20424 19833 + 20419 20424 19839 + 19839 19844 20419 + 20419 19844 20425 + 20425 20420 20419 + 20421 20420 20425 + 19829 19834 10847 + 10847 10846 19829 + 20425 19844 19843 + 19843 20426 20425 + 20427 20425 20426 + 20425 20427 20421 + 20421 20427 20428 + 20428 20429 20421 + 20421 20429 20413 + 19848 20426 19843 + 20430 20426 19848 + 20426 20430 20427 + 20428 20427 20430 + 20430 20431 20428 + 20432 20428 20431 + 20428 20432 20433 + 20433 20429 20428 + 20429 20433 20434 + 20434 20413 20429 + 20413 20434 20405 + 19848 19857 20430 + 20430 19857 20435 + 20435 20431 20430 + 20436 20431 20435 + 20431 20436 20432 + 20437 20432 20436 + 20433 20432 20437 + 20437 20438 20433 + 20433 20438 20439 + 20439 20434 20433 + 20405 20434 20439 + 20439 20406 20405 + 20435 19857 19856 + 19856 20440 20435 + 20441 20435 20440 + 20435 20441 20436 + 20436 20441 20442 + 20442 20443 20436 + 20436 20443 20437 + 19861 20440 19856 + 20444 20440 19861 + 20440 20444 20441 + 20442 20441 20444 + 20444 20445 20442 + 20446 20442 20445 + 20442 20446 20447 + 20447 20443 20442 + 20443 20447 20448 + 20448 20437 20443 + 19861 20449 20444 + 20444 20449 20450 + 20450 20445 20444 + 20451 20445 20450 + 20445 20451 20446 + 20452 20446 20451 + 20447 20446 20452 + 20449 19861 19866 + 19866 20453 20449 + 20450 20449 20453 + 20453 20454 20450 + 20455 20450 20454 + 20450 20455 20451 + 20451 20455 20456 + 20456 20457 20451 + 20451 20457 20452 + 20453 19866 19865 + 19865 20458 20453 + 20453 20458 20459 + 20459 20454 20453 + 20460 20454 20459 + 20454 20460 20455 + 20456 20455 20460 + 20458 19865 19874 + 19874 20461 20458 + 20459 20458 20461 + 20461 20462 20459 + 20463 20459 20462 + 20459 20463 20460 + 20460 20463 20134 + 20134 20464 20460 + 20460 20464 20456 + 20461 19874 19873 + 19873 20465 20461 + 20461 20465 20466 + 20466 20462 20461 + 20130 20462 20466 + 20462 20130 20463 + 20134 20463 20130 + 20465 19873 19882 + 19882 20467 20465 + 20466 20465 20467 + 20467 20125 20466 + 20124 20466 20125 + 20466 20124 20130 + 20467 19882 19881 + 19881 20468 20467 + 20467 20468 20116 + 20116 20125 20467 + 20468 19881 19890 + 19890 20112 20468 + 20116 20468 20112 + 20112 19890 19889 + 20138 20464 20134 + 20464 20138 20469 + 20469 20456 20464 + 20456 20469 20470 + 20470 20457 20456 + 20457 20470 20471 + 20471 20452 20457 + 20143 20469 20138 + 20470 20469 20143 + 20143 20472 20470 + 20470 20472 20473 + 20473 20471 20470 + 20474 20471 20473 + 20452 20471 20474 + 20474 20475 20452 + 20452 20475 20447 + 20147 20472 20143 + 20472 20147 20476 + 20476 20473 20472 + 20473 20476 20477 + 20477 20478 20473 + 20473 20478 20474 + 20474 20478 20479 + 20479 20480 20474 + 20475 20474 20480 + 20476 20147 20146 + 20146 20481 20476 + 20477 20476 20481 + 20481 20482 20477 + 20483 20477 20482 + 20478 20477 20483 + 20483 20479 20478 + 20151 20481 20146 + 20482 20481 20151 + 20151 20484 20482 + 20482 20484 20485 + 20485 20486 20482 + 20482 20486 20483 + 20487 20483 20486 + 20479 20483 20487 + 20484 20151 20150 + 20150 20488 20484 + 20484 20488 20489 + 20489 20485 20484 + 20490 20485 20489 + 20485 20490 20491 + 20491 20486 20485 + 20486 20491 20487 + 20155 20488 20150 + 20488 20155 20492 + 20492 20489 20488 + 20489 20492 20343 + 20343 20359 20489 + 20489 20359 20490 + 20317 20492 20155 + 20343 20492 20317 + 20490 20359 20358 + 20358 20493 20490 + 20493 20494 20490 + 20491 20490 20494 + 20494 20495 20491 + 20491 20495 20496 + 20496 20487 20491 + 20497 20487 20496 + 20487 20497 20479 + 20364 20493 20358 + 20493 20364 20498 + 20498 20499 20493 + 20493 20499 20500 + 20500 20494 20493 + 20500 20495 20494 + 20495 20500 20501 + 20501 20496 20495 + 20502 20496 20501 + 20496 20502 20497 + 20498 20364 20363 + 20363 20503 20498 + 20498 20503 20504 + 20504 20505 20498 + 20499 20498 20505 + 20505 20506 20499 + 20500 20499 20506 + 20506 20501 20500 + 20507 20501 20506 + 20501 20507 20502 + 20368 20503 20363 + 20503 20368 20384 + 20384 20504 20503 + 20391 20504 20384 + 20504 20391 20508 + 20508 20505 20504 + 20505 20508 20509 + 20509 20506 20505 + 20506 20509 20507 + 20510 20507 20509 + 20502 20507 20510 + 20510 20511 20502 + 20502 20511 20512 + 20512 20497 20502 + 20479 20497 20512 + 20512 20480 20479 + 20396 20508 20391 + 20509 20508 20396 + 20396 20513 20509 + 20509 20513 20510 + 20514 20510 20513 + 20510 20514 20515 + 20515 20511 20510 + 20511 20515 20516 + 20516 20512 20511 + 20512 20516 20517 + 20517 20480 20512 + 20480 20517 20475 + 20401 20513 20396 + 20513 20401 20514 + 20518 20514 20401 + 20515 20514 20518 + 20518 20519 20515 + 20515 20519 20520 + 20520 20516 20515 + 20517 20516 20520 + 20520 20448 20517 + 20517 20448 20447 + 20447 20475 20517 + 20401 20400 20518 + 20406 20518 20400 + 20518 20406 20439 + 20439 20519 20518 + 20519 20439 20438 + 20438 20520 20519 + 20520 20438 20437 + 20437 20448 20520 + 19923 20083 19924 + 20083 19923 19929 + 19929 20084 20083 + 20084 19929 20521 + 20521 20075 20084 + 20075 20521 20522 + 20522 20076 20075 + 20076 20522 20523 + 20523 20067 20076 + 19933 20521 19929 + 20522 20521 19933 + 19933 20524 20522 + 20522 20524 20525 + 20525 20523 20522 + 20526 20523 20525 + 20067 20523 20526 + 20526 20068 20067 + 20068 20526 20527 + 20527 20063 20068 + 19937 20524 19933 + 20524 19937 20528 + 20528 20525 20524 + 20525 20528 20529 + 20529 20530 20525 + 20525 20530 20526 + 20526 20530 20531 + 20531 20527 20526 + 20532 20527 20531 + 20063 20527 20532 + 19941 20528 19937 + 20529 20528 19941 + 19941 20533 20529 + 20529 20533 20534 + 20534 20535 20529 + 20530 20529 20535 + 20535 20531 20530 + 20531 20535 20536 + 20536 20537 20531 + 20531 20537 20532 + 19945 20533 19941 + 20533 19945 20538 + 20538 20534 20533 + 20534 20538 20539 + 20539 20540 20534 + 20534 20540 20536 + 20536 20535 20534 + 20541 20538 19945 + 20539 20538 20541 + 20541 20542 20539 + 20543 20539 20542 + 20540 20539 20543 + 20543 20544 20540 + 20536 20540 20544 + 20544 20545 20536 + 20537 20536 20545 + 19945 19949 20541 + 19954 20541 19949 + 20542 20541 19954 + 19954 20546 20542 + 20542 20546 20547 + 20547 20548 20542 + 20542 20548 20543 + 20549 20543 20548 + 20544 20543 20549 + 20546 19954 20550 + 20550 20551 20546 + 20546 20551 20552 + 20552 20547 20546 + 20553 20547 20552 + 20548 20547 20553 + 20553 20554 20548 + 20548 20554 20549 + 19953 20550 19954 + 19959 20550 19953 + 20550 19959 19967 + 19967 20551 20550 + 20551 19967 20555 + 20555 20552 20551 + 20552 20555 20556 + 20556 20557 20552 + 20552 20557 20553 + 20553 20557 20558 + 20558 20559 20553 + 20554 20553 20559 + 20560 20555 19967 + 20556 20555 20560 + 20560 20561 20556 + 20562 20556 20561 + 20557 20556 20562 + 20562 20558 20557 + 19967 19966 20560 + 19972 20560 19966 + 20560 19972 20563 + 20563 20561 20560 + 20561 20563 20564 + 20564 20565 20561 + 20561 20565 20566 + 20566 20562 20561 + 20567 20562 20566 + 20558 20562 20567 + 20563 19972 19971 + 19971 10992 20563 + 20564 20563 10992 + 20568 20564 10992 + 20569 20564 20568 + 20569 20565 20564 + 20565 20569 20570 + 20570 20566 20565 + 20570 20571 20566 + 20566 20571 20567 + 19979 10992 19971 + 10992 19979 20572 + 20572 10985 10992 + 10985 20572 10986 + 10986 20572 20573 + 20573 20574 10986 + 20575 20574 20573 + 20572 19979 19984 + 20573 20572 19984 + 20576 20573 19984 + 20575 20573 20576 + 20576 20577 20575 + 20578 20577 20576 + 20578 20576 20579 + 20579 20580 20578 + 20578 20580 11030 + 20579 20576 19984 + 19984 19994 20579 + 20581 20579 19994 + 20580 20579 20581 + 20580 20581 20582 + 20582 11030 20580 + 20583 11030 20582 + 11030 20583 20584 + 20584 11023 11030 + 11024 11023 20584 + 19994 19993 20581 + 20581 19993 19992 + 19992 20582 20581 + 20583 20582 19992 + 19992 20585 20583 + 20583 20585 20586 + 20586 20584 20583 + 20587 20585 19992 + 20585 20587 20588 + 20588 20586 20585 + 19992 20002 20587 + 20587 20002 20589 + 20589 20590 20587 + 20588 20587 20590 + 20590 20591 20588 + 20591 20592 20588 + 20593 20588 20592 + 20588 20593 20594 + 20006 20589 20002 + 20595 20589 20006 + 20589 20595 20596 + 20596 20590 20589 + 20590 20596 20597 + 20597 20591 20590 + 20006 20014 20595 + 10991 20568 10992 + 20598 20568 10991 + 20599 20568 20598 + 20568 20599 20569 + 20569 20599 20600 + 20600 20570 20569 + 20571 20570 20600 + 10991 10996 20598 + 20601 20598 10996 + 20599 20598 20601 + 20601 20602 20599 + 20599 20602 20600 + 20603 20601 10996 + 20604 20601 20603 + 20604 20602 20601 + 20602 20604 20605 + 20605 20606 20602 + 20602 20606 20600 + 20607 20603 10996 + 20608 20603 20607 + 20608 20609 20603 + 20603 20609 20604 + 20604 20609 20610 + 20605 20604 20610 + 20611 20607 10996 + 20612 20607 20611 + 20612 20613 20607 + 20607 20613 20608 + 20608 20613 20614 + 20614 20615 20608 + 20609 20608 20615 + 20615 20610 20609 + 11000 20611 10996 + 20616 20611 11000 + 20616 20617 20611 + 20611 20617 20612 + 20612 20617 20618 + 20619 20612 20618 + 20613 20612 20619 + 20619 20614 20613 + 11000 11006 20616 + 20616 11006 20620 + 20621 20616 20620 + 20617 20616 20621 + 20621 20622 20617 + 20617 20622 20618 + 11005 20620 11006 + 20620 11005 11004 + 20620 11004 20623 + 20623 20624 20620 + 20620 20624 20621 + 20625 20621 20624 + 20621 20625 20622 + 20622 20625 20626 + 20626 20618 20622 + 11010 20623 11004 + 20627 20623 11010 + 20623 20627 20624 + 20624 20627 20625 + 20625 20627 20628 + 20628 20626 20625 + 20629 20626 20628 + 20618 20626 20629 + 11010 20630 20627 + 20627 20630 20628 + 20631 20628 20630 + 20632 20628 20631 + 20628 20632 20629 + 20629 20632 20633 + 20634 20629 20633 + 20618 20629 20634 + 20630 11010 11016 + 11016 20635 20630 + 20630 20635 20631 + 20631 20635 20532 + 20532 20537 20631 + 20545 20631 20537 + 20631 20545 20632 + 20632 20545 20544 + 20544 20633 20632 + 20635 11016 20636 + 20636 20532 20635 + 20532 20636 20063 + 20063 20636 20054 + 20054 20636 11016 + 20549 20633 20544 + 20633 20549 20637 + 20637 20638 20633 + 20633 20638 20639 + 20639 20634 20633 + 20640 20634 20639 + 20634 20640 20641 + 20634 20641 20618 + 20637 20549 20554 + 20642 20637 20554 + 20643 20637 20642 + 20638 20637 20643 + 20643 20644 20638 + 20638 20644 20645 + 20645 20639 20638 + 20646 20639 20645 + 20639 20646 20640 + 20647 20642 20554 + 20648 20642 20647 + 20649 20642 20648 + 20642 20649 20643 + 20643 20649 20650 + 20650 20651 20643 + 20644 20643 20651 + 20554 20652 20647 + 20653 20647 20652 + 20647 20653 20654 + 20647 20654 20648 + 20648 20654 20655 + 20656 20648 20655 + 20649 20648 20656 + 20656 20650 20649 + 20559 20652 20554 + 20652 20559 20657 + 20652 20657 20653 + 20653 20657 20658 + 20659 20653 20658 + 20654 20653 20659 + 20659 20655 20654 + 20657 20559 20558 + 20558 20658 20657 + 20567 20658 20558 + 20658 20567 20660 + 20660 20661 20658 + 20658 20661 20662 + 20662 20663 20658 + 20663 20659 20658 + 20664 20659 20663 + 20659 20664 20655 + 20665 20660 20567 + 20666 20660 20665 + 20661 20660 20666 + 20661 20666 20667 + 20667 20668 20661 + 20661 20668 20662 + 20567 20571 20665 + 20600 20665 20571 + 20669 20665 20600 + 20665 20669 20666 + 20666 20669 20670 + 20670 20671 20666 + 20671 20667 20666 + 20672 20667 20671 + 20672 20668 20667 + 20668 20672 20673 + 20673 20662 20668 + 20669 20600 20674 + 20674 20670 20669 + 20675 20670 20674 + 20670 20675 20676 + 20676 20671 20670 + 20677 20671 20676 + 20671 20677 20672 + 20672 20677 20678 + 20678 20673 20672 + 20606 20674 20600 + 20675 20674 20606 + 20606 20679 20675 + 20675 20679 20680 + 20676 20675 20680 + 20680 20681 20676 + 20677 20676 20681 + 20681 20678 20677 + 20682 20678 20681 + 20678 20682 20683 + 20683 20673 20678 + 20673 20683 20662 + 20605 20679 20606 + 20679 20605 20684 + 20684 20680 20679 + 20685 20680 20684 + 20680 20685 20686 + 20686 20681 20680 + 20681 20686 20682 + 20682 20686 20687 + 20687 20688 20682 + 20683 20682 20688 + 20610 20684 20605 + 20689 20684 20610 + 20684 20689 20685 + 20685 20689 20690 + 20690 20691 20685 + 20685 20691 20687 + 20687 20686 20685 + 20610 20692 20689 + 20690 20689 20692 + 20692 20693 20690 + 20694 20690 20693 + 20690 20694 20695 + 20695 20691 20690 + 20691 20695 20696 + 20696 20687 20691 + 20697 20692 20610 + 20692 20697 20698 + 20698 20693 20692 + 20693 20698 20699 + 20699 20700 20693 + 20693 20700 20694 + 20610 20615 20697 + 20697 20615 20614 + 20614 20701 20697 + 20698 20697 20701 + 20701 20702 20698 + 20699 20698 20702 + 20702 20703 20699 + 20699 20703 20646 + 20646 20704 20699 + 20700 20699 20704 + 20614 20619 20701 + 20701 20619 20705 + 20705 20702 20701 + 20702 20705 20703 + 20703 20705 20641 + 20641 20640 20703 + 20703 20640 20646 + 20705 20619 20618 + 20618 20641 20705 + 20013 20706 20014 + 20706 20013 20012 + 20707 20706 20012 + 20706 20707 20708 + 20709 20706 20708 + 20708 20710 20709 + 20710 20711 20709 + 20596 20711 20710 + 20018 20707 20012 + 20023 20707 20018 + 20707 20023 20712 + 20712 20708 20707 + 20708 20712 20713 + 20708 20713 20714 + 20714 20710 20708 + 20710 20714 20591 + 20591 20597 20710 + 20710 20597 20596 + 20028 20712 20023 + 20713 20712 20028 + 20028 20033 20713 + 20714 20713 20033 + 20715 20714 20033 + 20591 20714 20715 + 20715 20592 20591 + 20592 20715 20716 + 20592 20716 20593 + 20033 20717 20715 + 20716 20715 20717 + 20717 20718 20716 + 20593 20716 20718 + 20718 20719 20593 + 20719 20720 20593 + 20720 20721 20593 + 20594 20593 20721 + 20038 20717 20033 + 20717 20038 20718 + 20718 20038 20037 + 20037 20719 20718 + 20037 20036 20719 + 20719 20036 20041 + 20041 20720 20719 + 20041 11025 20720 + 20720 11025 11024 + 11024 20721 20720 + 20584 20721 11024 + 20721 20584 20594 + 20704 20722 20700 + 20722 20704 20723 + 20722 20723 20724 + 20724 20725 20722 + 20722 20725 20694 + 20694 20700 20722 + 20723 20704 20646 + 20646 20645 20723 + 20723 20645 20644 + 20644 20724 20723 + 20651 20724 20644 + 20724 20651 20726 + 20726 20725 20724 + 20725 20726 20695 + 20695 20694 20725 + 20726 20651 20650 + 20650 20727 20726 + 20695 20726 20727 + 20696 20695 20727 + 20727 20728 20696 + 20729 20696 20728 + 20687 20696 20729 + 20729 20688 20687 + 20727 20650 20656 + 20727 20656 20730 + 20730 20728 20727 + 20731 20728 20730 + 20728 20731 20729 + 20732 20729 20731 + 20688 20729 20732 + 20732 20733 20688 + 20688 20733 20683 + 20662 20683 20733 + 20655 20730 20656 + 20731 20730 20655 + 20655 20664 20731 + 20731 20664 20732 + 20663 20732 20664 + 20732 20663 20733 + 20733 20663 20662 + 8578 20734 8572 + 20735 20734 8578 + 20736 20734 20735 + 20734 20736 20737 + 20737 8572 20734 + 8573 8572 20737 + 8578 20738 20735 + 20735 20738 20739 + 20740 20735 20739 + 20735 20740 20736 + 20738 8578 8577 + 8577 20741 20738 + 20738 20741 20742 + 20742 20739 20738 + 20739 20742 20743 + 20743 20744 20739 + 20739 20744 20740 + 20741 8577 20745 + 20745 20746 20741 + 20742 20741 20746 + 20746 20747 20742 + 20743 20742 20747 + 20748 20745 8577 + 20749 20745 20748 + 20746 20745 20749 + 20749 20750 20746 + 20746 20750 20751 + 20751 20747 20746 + 20752 20747 20751 + 20747 20752 20743 + 20753 20748 8577 + 20754 20748 20753 + 20748 20754 20755 + 20755 20756 20748 + 20748 20756 20749 + 8577 8576 20753 + 20757 20753 8576 + 20757 20758 20753 + 20753 20758 20754 + 20754 20758 20759 + 20759 20760 20754 + 20755 20754 20760 + 8576 8563 20757 + 8562 20757 8563 + 20757 8562 20759 + 20758 20757 20759 + 20759 8562 8561 + 20759 8561 20761 + 20761 20760 20759 + 20762 20760 20761 + 20760 20762 20755 + 20755 20762 20763 + 20763 20764 20755 + 20756 20755 20764 + 20764 20765 20756 + 20749 20756 20765 + 20766 20761 8561 + 20767 20761 20766 + 20761 20767 20762 + 20762 20767 20768 + 20768 20763 20762 + 20769 20763 20768 + 20763 20769 20770 + 20770 20764 20763 + 20764 20770 20765 + 8561 8560 20766 + 8560 20771 20766 + 20772 20766 20771 + 20766 20772 20773 + 20773 20774 20766 + 20766 20774 20767 + 20767 20774 20775 + 20775 20768 20767 + 20769 20768 20775 + 8575 20771 8560 + 20771 8575 20776 + 20771 20776 20772 + 20777 20772 20776 + 20773 20772 20777 + 20777 20778 20773 + 20779 20773 20778 + 20774 20773 20779 + 20779 20780 20774 + 20774 20780 20775 + 20776 8575 8574 + 8574 20781 20776 + 20776 20781 20777 + 20782 20777 20781 + 20777 20782 20783 + 20783 20778 20777 + 20778 20783 20784 + 20784 20785 20778 + 20778 20785 20779 + 20786 20781 8574 + 20781 20786 20782 + 20782 20786 20787 + 20787 20788 20782 + 20783 20782 20788 + 20788 20789 20783 + 20784 20783 20789 + 8574 20790 20786 + 20786 20790 20791 + 20791 20787 20786 + 20787 20791 20792 + 20792 20793 20787 + 20787 20793 20794 + 20794 20788 20787 + 20789 20788 20794 + 20790 8574 20795 + 20795 20796 20790 + 20790 20796 20797 + 20797 20791 20790 + 20792 20791 20797 + 8573 20795 8574 + 20798 20795 8573 + 20795 20798 20796 + 20796 20798 20799 + 20799 20797 20796 + 20797 20799 20800 + 20800 20801 20797 + 20797 20801 20792 + 8573 20737 20798 + 20798 20737 20736 + 20799 20798 20736 + 20736 20802 20799 + 20800 20799 20802 + 20802 20803 20800 + 20800 20803 20804 + 20804 20805 20800 + 20801 20800 20805 + 20805 20806 20801 + 20792 20801 20806 + 20807 20802 20736 + 20803 20802 20807 + 20808 20803 20807 + 20803 20808 20809 + 20809 20804 20803 + 20736 20740 20807 + 20810 20807 20740 + 20808 20807 20810 + 20810 20811 20808 + 20808 20811 20812 + 20812 20809 20808 + 20813 20809 20812 + 20804 20809 20813 + 20740 20744 20810 + 20814 20810 20744 + 20810 20814 20815 + 20815 20811 20810 + 20811 20815 20816 + 20816 20812 20811 + 20812 20816 20817 + 20817 20818 20812 + 20812 20818 20813 + 20744 20743 20814 + 20819 20814 20743 + 20815 20814 20819 + 20819 20820 20815 + 20815 20820 20821 + 20821 20816 20815 + 20817 20816 20821 + 20743 20752 20819 + 20822 20819 20752 + 20819 20822 20823 + 20823 20820 20819 + 20820 20823 20824 + 20824 20821 20820 + 20821 20824 20825 + 20825 20826 20821 + 20821 20826 20817 + 20752 20827 20822 + 20828 20822 20827 + 20823 20822 20828 + 20828 20829 20823 + 20823 20829 20830 + 20830 20824 20823 + 20825 20824 20830 + 20751 20827 20752 + 20827 20751 20831 + 20831 20832 20827 + 20827 20832 20828 + 20833 20828 20832 + 20828 20833 20834 + 20834 20829 20828 + 20829 20834 20835 + 20835 20830 20829 + 20836 20831 20751 + 20837 20831 20836 + 20831 20837 20832 + 20832 20837 20833 + 20833 20837 20838 + 20839 20833 20838 + 20834 20833 20839 + 20751 20750 20836 + 20840 20836 20750 + 20836 20840 20841 + 20841 20838 20836 + 20836 20838 20837 + 20750 20749 20840 + 20842 20840 20749 + 20841 20840 20842 + 20842 20843 20841 + 20841 20843 20844 + 20844 20845 20841 + 20838 20841 20845 + 20765 20842 20749 + 20846 20842 20765 + 20846 20843 20842 + 20843 20846 20847 + 20847 20844 20843 + 20848 20844 20847 + 20844 20848 20849 + 20849 20845 20844 + 20845 20849 20850 + 20845 20850 20838 + 20765 20770 20846 + 20846 20770 20769 + 20769 20851 20846 + 20851 20847 20846 + 20848 20847 20851 + 20851 20852 20848 + 20848 20852 20853 + 20849 20848 20853 + 20853 20854 20849 + 20850 20849 20854 + 20854 20855 20850 + 20838 20850 20855 + 20855 20839 20838 + 20775 20851 20769 + 20851 20775 20852 + 20852 20775 20780 + 20780 20856 20852 + 20852 20856 20853 + 20785 20853 20856 + 20853 20785 20784 + 20853 20784 20857 + 20857 20854 20853 + 20855 20854 20857 + 20855 20857 20858 + 20858 20839 20855 + 20856 20780 20779 + 20856 20779 20785 + 20858 20857 20784 + 20789 20858 20784 + 20859 20858 20789 + 20839 20858 20859 + 20859 20860 20839 + 20839 20860 20834 + 20834 20860 20861 + 20861 20835 20834 + 20789 20862 20859 + 20859 20862 20863 + 20863 20864 20859 + 20860 20859 20864 + 20864 20861 20860 + 20794 20862 20789 + 20862 20794 20865 + 20865 20863 20862 + 20863 20865 20866 + 20866 20867 20863 + 20863 20867 20868 + 20868 20864 20863 + 20861 20864 20868 + 20869 20865 20794 + 20866 20865 20869 + 20869 20870 20866 + 20866 20870 20871 + 20871 20872 20866 + 20867 20866 20872 + 20872 20873 20867 + 20868 20867 20873 + 20794 20793 20869 + 20874 20869 20793 + 20869 20874 20875 + 20875 20870 20869 + 20870 20875 20876 + 20876 20871 20870 + 20793 20792 20874 + 20806 20874 20792 + 20875 20874 20806 + 20806 20877 20875 + 20875 20877 20878 + 20878 20876 20875 + 20879 20876 20878 + 20871 20876 20879 + 20879 20880 20871 + 20871 20880 20881 + 20881 20872 20871 + 20873 20872 20881 + 20882 20877 20806 + 20877 20882 20883 + 20883 20878 20877 + 20878 20883 20884 + 20884 20885 20878 + 20878 20885 20879 + 20806 20805 20882 + 20882 20805 20804 + 20804 20886 20882 + 20882 20886 20887 + 20887 20883 20882 + 20884 20883 20887 + 20887 20888 20884 + 20884 20888 20889 + 20889 20890 20884 + 20885 20884 20890 + 20813 20886 20804 + 20886 20813 20891 + 20891 20887 20886 + 20887 20891 20892 + 20892 20888 20887 + 20888 20892 20893 + 20893 20889 20888 + 20894 20891 20813 + 20892 20891 20894 + 20894 20895 20892 + 20892 20895 20896 + 20896 20893 20892 + 20897 20893 20896 + 20889 20893 20897 + 20813 20818 20894 + 20898 20894 20818 + 20894 20898 20899 + 20899 20895 20894 + 20895 20899 20900 + 20900 20896 20895 + 20896 20900 20901 + 20901 20902 20896 + 20896 20902 20897 + 20818 20817 20898 + 20903 20898 20817 + 20899 20898 20903 + 20903 20904 20899 + 20899 20904 20905 + 20905 20900 20899 + 20901 20900 20905 + 20905 20906 20901 + 20907 20901 20906 + 20902 20901 20907 + 20817 20826 20903 + 20908 20903 20826 + 20903 20908 20909 + 20909 20904 20903 + 20904 20909 20910 + 20910 20905 20904 + 20906 20905 20910 + 20911 20906 20910 + 20907 20906 20911 + 20826 20825 20908 + 20912 20908 20825 + 20909 20908 20912 + 20912 20913 20909 + 20909 20913 20914 + 20914 20910 20909 + 20911 20910 20914 + 20914 20915 20911 + 20916 20911 20915 + 20916 20907 20911 + 20825 20917 20912 + 20918 20912 20917 + 20912 20918 20919 + 20919 20913 20912 + 20913 20919 20920 + 20920 20914 20913 + 20915 20914 20920 + 20921 20915 20920 + 20916 20915 20921 + 20830 20917 20825 + 20922 20917 20830 + 20917 20922 20918 + 20923 20918 20922 + 20919 20918 20923 + 20923 20924 20919 + 20919 20924 20925 + 20925 20920 20919 + 20921 20920 20925 + 20830 20835 20922 + 20922 20835 20861 + 20861 20926 20922 + 20922 20926 20923 + 20927 20923 20926 + 20923 20927 20928 + 20928 20924 20923 + 20924 20928 20929 + 20929 20925 20924 + 20930 20925 20929 + 20925 20930 20921 + 20868 20926 20861 + 20926 20868 20927 + 20873 20927 20868 + 20928 20927 20873 + 20873 20931 20928 + 20928 20931 20932 + 20932 20929 20928 + 20933 20929 20932 + 20933 20930 20929 + 20934 20930 20933 + 20934 20921 20930 + 20934 20916 20921 + 20907 20916 20934 + 20881 20931 20873 + 20931 20881 20935 + 20935 20932 20931 + 20936 20932 20935 + 20932 20936 20933 + 20933 20936 20937 + 20937 20934 20933 + 20934 20937 20938 + 20938 20907 20934 + 20907 20938 20902 + 20938 20897 20902 + 20939 20935 20881 + 20940 20935 20939 + 20940 20936 20935 + 20937 20936 20940 + 20941 20937 20940 + 20937 20941 20938 + 20881 20880 20939 + 20942 20939 20880 + 20939 20942 20943 + 20943 20944 20939 + 20939 20944 20940 + 20941 20940 20944 + 20945 20941 20944 + 20941 20945 20938 + 20880 20879 20942 + 20946 20942 20879 + 20943 20942 20946 + 20946 20947 20943 + 20945 20943 20947 + 20944 20943 20945 + 20879 20885 20946 + 20890 20946 20885 + 20946 20890 20948 + 20948 20947 20946 + 20947 20948 20949 + 20949 20945 20947 + 20945 20949 20938 + 20938 20949 20950 + 20950 20897 20938 + 20897 20950 20889 + 20889 20950 20948 + 20948 20890 20889 + 20949 20948 20950 + 8554 8487 8550 + 8488 8487 8554 + 8554 20951 8488 + 8489 8488 20951 + 20951 20952 8489 + 8482 8489 20952 + 20952 20953 8482 + 20953 8478 8482 + 8554 8553 20951 + 20951 8553 20954 + 20954 20952 20951 + 20953 20952 20954 + 20953 20954 20955 + 20955 8478 20953 + 20955 8472 8478 + 8472 20955 8473 + 8473 20955 20954 + 20954 8553 8473 + 8493 8550 8487 + 8498 8550 8493 + 8550 8498 20956 + 20956 8551 8550 + 8551 20956 20957 + 20957 20958 8551 + 8551 20958 8545 + 20959 20956 8498 + 20957 20956 20959 + 20959 20960 20957 + 20957 20960 20961 + 20961 20962 20957 + 20958 20957 20962 + 20962 20963 20958 + 8545 20958 20963 + 20963 8546 8545 + 8498 8497 20959 + 20964 20959 8497 + 20959 20964 20965 + 20965 20960 20959 + 20960 20965 20966 + 20966 20961 20960 + 8497 8496 20964 + 8507 20964 8496 + 20965 20964 8507 + 8507 20967 20965 + 20965 20967 20968 + 20968 20966 20965 + 20969 20966 20968 + 20961 20966 20969 + 20969 20970 20961 + 20961 20970 20971 + 20971 20962 20961 + 20963 20962 20971 + 8510 20967 8507 + 20967 8510 20972 + 20972 20968 20967 + 20968 20972 20973 + 20973 20974 20968 + 20968 20974 20969 + 20969 20974 20975 + 20975 20976 20969 + 20970 20969 20976 + 8515 20972 8510 + 20973 20972 8515 + 8515 20977 20973 + 20973 20977 20978 + 20978 20979 20973 + 20974 20973 20979 + 20979 20975 20974 + 8520 20977 8515 + 20977 8520 20980 + 20980 20978 20977 + 20978 20980 20981 + 20981 20982 20978 + 20978 20982 20983 + 20983 20979 20978 + 20975 20979 20983 + 20984 20980 8520 + 20981 20980 20984 + 20984 20985 20981 + 20981 20985 20986 + 20986 20987 20981 + 20982 20981 20987 + 20987 20988 20982 + 20983 20982 20988 + 8520 8519 20984 + 8525 20984 8519 + 20984 8525 20989 + 20989 20985 20984 + 20985 20989 20990 + 20990 20986 20985 + 20986 20990 20991 + 20991 20992 20986 + 20986 20992 20993 + 20993 20987 20986 + 20988 20987 20993 + 20989 8525 8524 + 8524 20994 20989 + 20989 20994 20995 + 20995 20990 20989 + 20991 20990 20995 + 20995 20996 20991 + 20991 20996 20997 + 20991 20997 20998 + 20992 20991 20998 + 20993 20992 20998 + 8534 20994 8524 + 20994 8534 20999 + 20999 20995 20994 + 20995 20999 21000 + 21000 20996 20995 + 20996 21000 20997 + 21000 21001 20997 + 20998 20997 21001 + 21002 20998 21001 + 20993 20998 21002 + 21003 20993 21002 + 20993 21003 20988 + 21004 20999 8534 + 21000 20999 21004 + 21004 21005 21000 + 21000 21005 21001 + 21006 21001 21005 + 21001 21006 21007 + 21007 21002 21001 + 8534 21008 21004 + 21009 21004 21008 + 21004 21009 21010 + 21010 21005 21004 + 21005 21010 21006 + 21006 21010 21011 + 21012 21006 21011 + 21006 21012 21007 + 8533 21008 8534 + 21013 21008 8533 + 21008 21013 21009 + 21014 21009 21013 + 21010 21009 21014 + 21014 21011 21010 + 21015 21011 21014 + 21011 21015 21012 + 21015 21016 21012 + 21007 21012 21016 + 8533 8538 21013 + 21013 8538 21017 + 21017 21018 21013 + 21013 21018 21014 + 21019 21014 21018 + 21014 21019 21015 + 21015 21019 21020 + 21020 21016 21015 + 21021 21016 21020 + 21016 21021 21007 + 21017 8538 8537 + 8537 21022 21017 + 21023 21017 21022 + 21017 21023 21024 + 21024 21018 21017 + 21018 21024 21019 + 21020 21019 21024 + 21024 21025 21020 + 21026 21020 21025 + 21020 21026 21021 + 8542 21022 8537 + 21027 21022 8542 + 21022 21027 21023 + 21028 21023 21027 + 21024 21023 21028 + 21028 21025 21024 + 21029 21025 21028 + 21025 21029 21026 + 21030 21026 21029 + 21021 21026 21030 + 21030 21031 21021 + 21021 21031 21007 + 8542 8546 21027 + 21027 8546 20963 + 20963 21032 21027 + 21027 21032 21028 + 21033 21028 21032 + 21028 21033 21029 + 21029 21033 21034 + 21034 21035 21029 + 21029 21035 21030 + 20971 21032 20963 + 21032 20971 21033 + 21034 21033 20971 + 20971 20970 21034 + 20976 21034 20970 + 21034 20976 21036 + 21036 21035 21034 + 21035 21036 21037 + 21037 21030 21035 + 21030 21037 21038 + 21038 21031 21030 + 21031 21038 21039 + 21039 21007 21031 + 21007 21039 21002 + 21036 20976 20975 + 20975 21040 21036 + 21036 21040 21041 + 21041 21037 21036 + 21038 21037 21041 + 21041 21042 21038 + 21038 21042 21039 + 21042 21043 21039 + 21043 21002 21039 + 21043 21003 21002 + 20988 21003 21043 + 20983 21040 20975 + 21040 20983 21044 + 21044 21041 21040 + 21041 21044 21043 + 21043 21042 21041 + 20988 21044 20983 + 21043 21044 20988 + 21045 8403 8406 + 8403 21045 21046 + 21046 21047 8403 + 8404 8403 21047 + 21047 8405 8404 + 21045 8406 21048 + 21048 21049 21045 + 21045 21049 21050 + 21050 21046 21045 + 21051 21046 21050 + 21047 21046 21051 + 21048 8406 8359 + 8359 8358 21048 + 21048 8358 8357 + 21052 21048 8357 + 21048 21052 21053 + 21053 21049 21048 + 21050 21049 21053 + 21054 21050 21053 + 21050 21054 21055 + 21055 21056 21050 + 21050 21056 21051 + 21057 21052 8357 + 21053 21052 21057 + 21057 21058 21053 + 21053 21058 21059 + 21059 21054 21053 + 21055 21054 21059 + 8362 21057 8357 + 21057 8362 21060 + 21060 21058 21057 + 21058 21060 21061 + 21061 21059 21058 + 21059 21061 21062 + 21062 21063 21059 + 21059 21063 21055 + 21060 8362 8361 + 8361 21064 21060 + 21060 21064 21065 + 21065 21061 21060 + 21062 21061 21065 + 21065 21066 21062 + 21062 21066 21067 + 21067 21068 21062 + 21063 21062 21068 + 21069 21064 8361 + 21064 21069 21070 + 21070 21065 21064 + 21065 21070 21071 + 21071 21066 21065 + 21066 21071 21072 + 21072 21067 21066 + 8361 8365 21069 + 21069 8365 21073 + 21073 21074 21069 + 21070 21069 21074 + 21074 21075 21070 + 21071 21070 21075 + 21075 21076 21071 + 21072 21071 21076 + 8370 21073 8365 + 21077 21073 8370 + 21074 21073 21077 + 21077 21078 21074 + 21074 21078 21079 + 21079 21075 21074 + 21076 21075 21079 + 8370 21080 21077 + 21077 21080 21081 + 21081 21082 21077 + 21078 21077 21082 + 21082 21083 21078 + 21079 21078 21083 + 21084 21080 8370 + 21080 21084 21085 + 21085 21081 21080 + 21081 21085 21086 + 21086 21087 21081 + 21081 21087 21088 + 21088 21082 21081 + 21083 21082 21088 + 8370 8369 21084 + 21084 8369 21089 + 21089 21090 21084 + 21084 21090 21091 + 21091 21085 21084 + 21086 21085 21091 + 8368 21089 8369 + 21092 21089 8368 + 21089 21092 21093 + 21093 21090 21089 + 21090 21093 21094 + 21094 21091 21090 + 21091 21094 21095 + 21095 21096 21091 + 21091 21096 21086 + 8368 21097 21092 + 21092 21097 21098 + 21098 21099 21092 + 21099 21100 21092 + 21093 21092 21100 + 8374 21097 8368 + 21097 8374 21101 + 21101 21098 21097 + 21102 21098 21101 + 21098 21102 21103 + 21103 21099 21098 + 21104 21099 21103 + 21099 21104 21105 + 21105 21100 21099 + 21106 21101 8374 + 21102 21101 21106 + 21106 21107 21102 + 21103 21102 21107 + 21107 21108 21103 + 21108 21109 21103 + 21109 21110 21103 + 21104 21103 21110 + 8379 21106 8374 + 21111 21106 8379 + 21107 21106 21111 + 21107 21111 21112 + 21112 21108 21107 + 21113 21108 21112 + 21108 21113 21114 + 21114 21109 21108 + 8379 8384 21111 + 21111 8384 21115 + 21115 21112 21111 + 21113 21112 21115 + 21115 21116 21113 + 21114 21113 21116 + 21116 21117 21114 + 21117 21118 21114 + 21119 21114 21118 + 21119 21109 21114 + 8384 21120 21115 + 21120 21121 21115 + 21121 21122 21115 + 21123 21115 21122 + 21116 21115 21123 + 21116 21123 21124 + 21124 21117 21116 + 8383 21120 8384 + 21120 8383 21125 + 21120 21125 21121 + 21125 21126 21121 + 21126 21127 21121 + 21122 21121 21127 + 21128 21122 21127 + 21129 21122 21128 + 21122 21129 21123 + 21125 8383 8389 + 21125 8389 21130 + 21130 21126 21125 + 21127 21126 21130 + 21130 21131 21127 + 21128 21127 21131 + 8389 8388 21130 + 8388 21132 21130 + 21131 21130 21132 + 21131 21132 21133 + 21131 21133 21128 + 21133 21134 21128 + 21128 21134 21135 + 21136 21128 21135 + 21128 21136 21129 + 8388 8395 21132 + 8395 21137 21132 + 21132 21137 21133 + 21138 21133 21137 + 21134 21133 21138 + 21139 21134 21138 + 21135 21134 21139 + 21140 21137 8395 + 21137 21140 21138 + 21141 21138 21140 + 21139 21138 21141 + 21141 21142 21139 + 21135 21139 21142 + 21142 21143 21135 + 21135 21143 21144 + 21135 21144 21136 + 8395 8394 21140 + 21145 21140 8394 + 21145 21141 21140 + 21141 21145 21146 + 21147 21141 21146 + 21141 21147 21142 + 21147 21148 21142 + 21143 21142 21148 + 21148 21149 21143 + 21144 21143 21149 + 8394 8400 21145 + 21146 21145 8400 + 8400 21150 21146 + 21151 21146 21150 + 21147 21146 21151 + 21151 21152 21147 + 21148 21147 21152 + 21153 21148 21152 + 21149 21148 21153 + 8400 8399 21150 + 8399 8405 21150 + 21150 8405 21047 + 21047 21154 21150 + 21150 21154 21151 + 21155 21151 21154 + 21151 21155 21156 + 21156 21152 21151 + 21157 21152 21156 + 21152 21157 21153 + 21051 21154 21047 + 21154 21051 21155 + 21155 21051 21056 + 21158 21155 21056 + 21155 21158 21159 + 21156 21155 21159 + 21160 21156 21159 + 21160 21157 21156 + 21160 21161 21157 + 21157 21161 21162 + 21162 21153 21157 + 21056 21055 21158 + 21055 21163 21158 + 21159 21158 21163 + 21164 21159 21163 + 21164 21160 21159 + 21164 21165 21160 + 21165 21161 21160 + 21161 21165 21166 + 21166 21162 21161 + 21167 21163 21055 + 21167 21164 21163 + 21164 21167 21168 + 21168 21165 21164 + 21165 21168 21169 + 21169 21166 21165 + 21166 21169 21170 + 21170 21171 21166 + 21166 21171 21162 + 21172 21167 21055 + 21168 21167 21172 + 21172 21173 21168 + 21168 21173 21174 + 21174 21169 21168 + 21170 21169 21174 + 21055 21063 21172 + 21068 21172 21063 + 21172 21068 21175 + 21175 21173 21172 + 21173 21175 21176 + 21176 21174 21173 + 21174 21176 21177 + 21177 21178 21174 + 21174 21178 21170 + 21175 21068 21067 + 21067 21179 21175 + 21175 21179 21180 + 21180 21176 21175 + 21177 21176 21180 + 21180 21181 21177 + 21177 21181 21182 + 21182 21183 21177 + 21178 21177 21183 + 21184 21179 21067 + 21179 21184 21185 + 21185 21180 21179 + 21180 21185 21186 + 21186 21181 21180 + 21181 21186 21187 + 21187 21182 21181 + 21067 21072 21184 + 21184 21072 21188 + 21188 21189 21184 + 21185 21184 21189 + 21189 21190 21185 + 21186 21185 21190 + 21190 21191 21186 + 21187 21186 21191 + 21076 21188 21072 + 21192 21188 21076 + 21189 21188 21192 + 21192 21193 21189 + 21189 21193 21194 + 21194 21190 21189 + 21191 21190 21194 + 21076 21195 21192 + 21192 21195 21196 + 21196 21197 21192 + 21197 21198 21192 + 21198 21199 21192 + 21193 21192 21199 + 21079 21195 21076 + 21195 21079 21200 + 21200 21196 21195 + 21196 21200 21201 + 21201 21202 21196 + 21196 21202 21203 + 21203 21197 21196 + 21083 21200 21079 + 21201 21200 21083 + 21083 21204 21201 + 21201 21204 21205 + 21205 21206 21201 + 21202 21201 21206 + 21206 21207 21202 + 21203 21202 21207 + 21088 21204 21083 + 21204 21088 21208 + 21208 21205 21204 + 21205 21208 21209 + 21209 21210 21205 + 21205 21210 21211 + 21211 21206 21205 + 21207 21206 21211 + 21212 21208 21088 + 21209 21208 21212 + 21212 21213 21209 + 21209 21213 21214 + 21214 21215 21209 + 21210 21209 21215 + 21215 21216 21210 + 21211 21210 21216 + 21088 21087 21212 + 21217 21212 21087 + 21212 21217 21218 + 21218 21213 21212 + 21213 21218 21219 + 21219 21214 21213 + 21087 21086 21217 + 21220 21217 21086 + 21218 21217 21220 + 21220 21221 21218 + 21218 21221 21222 + 21222 21219 21218 + 21223 21219 21222 + 21214 21219 21223 + 21086 21096 21220 + 21224 21220 21096 + 21220 21224 21225 + 21225 21221 21220 + 21221 21225 21226 + 21226 21222 21221 + 21222 21226 21227 + 21227 21228 21222 + 21222 21228 21223 + 21096 21095 21224 + 21229 21224 21095 + 21225 21224 21229 + 21229 21230 21225 + 21225 21230 21231 + 21231 21226 21225 + 21227 21226 21231 + 21231 21232 21227 + 21227 21232 21233 + 21228 21227 21233 + 21095 21234 21229 + 21235 21229 21234 + 21229 21235 21236 + 21236 21230 21229 + 21230 21236 21237 + 21237 21231 21230 + 21231 21237 21238 + 21238 21232 21231 + 21233 21232 21238 + 21239 21234 21095 + 21240 21234 21239 + 21234 21240 21235 + 21241 21235 21240 + 21236 21235 21241 + 21241 21242 21236 + 21236 21242 21243 + 21243 21237 21236 + 21238 21237 21243 + 21095 21094 21239 + 21239 21094 21093 + 21093 21244 21239 + 21245 21239 21244 + 21239 21245 21240 + 21240 21245 21246 + 21246 21247 21240 + 21240 21247 21241 + 21100 21244 21093 + 21248 21244 21100 + 21244 21248 21245 + 21246 21245 21248 + 21249 21246 21248 + 21250 21246 21249 + 21246 21250 21251 + 21251 21247 21246 + 21247 21251 21252 + 21252 21241 21247 + 21100 21105 21248 + 21248 21105 21253 + 21253 21254 21248 + 21248 21254 21255 + 21255 21249 21248 + 21253 21105 21104 + 21104 21256 21253 + 21257 21253 21256 + 21253 21257 21258 + 21258 21254 21253 + 21254 21258 21259 + 21259 21255 21254 + 21110 21256 21104 + 21256 21110 21260 + 21260 21261 21256 + 21256 21261 21257 + 21257 21261 21262 + 21262 21263 21257 + 21258 21257 21263 + 21260 21110 21109 + 21109 21119 21260 + 21264 21260 21119 + 21261 21260 21264 + 21264 21262 21261 + 21262 21264 21265 + 21265 21266 21262 + 21262 21266 21267 + 21267 21263 21262 + 21119 21268 21264 + 21265 21264 21268 + 21268 21269 21265 + 21265 21269 21270 + 21270 21271 21265 + 21266 21265 21271 + 21271 21272 21266 + 21267 21266 21272 + 21118 21268 21119 + 21269 21268 21118 + 21269 21118 21117 + 21117 21273 21269 + 21269 21273 21270 + 21274 21270 21273 + 21270 21274 21275 + 21270 21275 21276 + 21276 21271 21270 + 21276 21272 21271 + 21273 21117 21124 + 21273 21124 21274 + 21274 21124 21123 + 21277 21274 21123 + 21274 21277 21278 + 21275 21274 21278 + 21275 21278 21279 + 21276 21275 21279 + 21280 21276 21279 + 21272 21276 21280 + 21123 21129 21277 + 21281 21277 21129 + 21278 21277 21281 + 21278 21281 21282 + 21278 21282 21279 + 21129 21283 21281 + 21283 21284 21281 + 21284 21285 21281 + 21281 21285 21282 + 21285 21286 21282 + 21282 21286 21287 + 21287 21279 21282 + 21136 21283 21129 + 21283 21136 21144 + 21144 21284 21283 + 21288 21284 21144 + 21284 21288 21286 + 21286 21285 21284 + 21288 21144 21149 + 21288 21149 21289 + 21287 21288 21289 + 21287 21286 21288 + 21153 21289 21149 + 21290 21289 21153 + 21289 21290 21291 + 21291 21287 21289 + 21287 21291 21279 + 21279 21291 21292 + 21292 21293 21279 + 21279 21293 21280 + 21153 21162 21290 + 21171 21290 21162 + 21290 21171 21292 + 21292 21291 21290 + 21294 21292 21171 + 21292 21294 21295 + 21295 21293 21292 + 21293 21295 21296 + 21296 21280 21293 + 21297 21280 21296 + 21280 21297 21272 + 21171 21170 21294 + 21298 21294 21170 + 21295 21294 21298 + 21298 21299 21295 + 21295 21299 21300 + 21300 21296 21295 + 21301 21296 21300 + 21296 21301 21297 + 21170 21178 21298 + 21183 21298 21178 + 21298 21183 21299 + 21299 21183 21182 + 21182 21300 21299 + 21302 21300 21182 + 21300 21302 21301 + 21301 21302 21303 + 21303 21304 21301 + 21297 21301 21304 + 21304 21305 21297 + 21272 21297 21305 + 21305 21267 21272 + 21187 21302 21182 + 21302 21187 21306 + 21306 21303 21302 + 21303 21306 21307 + 21307 21308 21303 + 21303 21308 21309 + 21309 21304 21303 + 21305 21304 21309 + 21191 21306 21187 + 21307 21306 21191 + 21191 21310 21307 + 21307 21310 21311 + 21311 21312 21307 + 21308 21307 21312 + 21312 21313 21308 + 21309 21308 21313 + 21194 21310 21191 + 21310 21194 21314 + 21314 21311 21310 + 21311 21314 21315 + 21315 21316 21311 + 21311 21316 21317 + 21317 21312 21311 + 21313 21312 21317 + 21318 21314 21194 + 21315 21314 21318 + 21318 21319 21315 + 21315 21319 21320 + 21320 21321 21315 + 21316 21315 21321 + 21321 21322 21316 + 21317 21316 21322 + 21194 21193 21318 + 21199 21318 21193 + 21318 21199 21323 + 21323 21319 21318 + 21319 21323 21324 + 21324 21320 21319 + 21320 21324 21325 + 21325 21326 21320 + 21320 21326 21327 + 21327 21321 21320 + 21322 21321 21327 + 21323 21199 21198 + 21198 21328 21323 + 21323 21328 21329 + 21329 21324 21323 + 21325 21324 21329 + 21329 21330 21325 + 21325 21330 21331 + 21331 21332 21325 + 21326 21325 21332 + 21333 21328 21198 + 21328 21333 21334 + 21334 21329 21328 + 21329 21334 21335 + 21335 21330 21329 + 21330 21335 21336 + 21336 21331 21330 + 21198 21337 21333 + 21333 21337 21338 + 21338 21339 21333 + 21333 21339 21340 + 21340 21334 21333 + 21335 21334 21340 + 21337 21198 21197 + 21197 21341 21337 + 21337 21341 21338 + 21341 21342 21338 + 21343 21338 21342 + 21338 21343 21344 + 21344 21339 21338 + 21339 21344 21345 + 21345 21340 21339 + 21341 21197 21203 + 21203 21346 21341 + 21341 21346 21347 + 21347 21342 21341 + 21348 21342 21347 + 21342 21348 21343 + 21349 21343 21348 + 21344 21343 21349 + 21346 21203 21350 + 21350 21351 21346 + 21347 21346 21351 + 21351 21352 21347 + 21353 21347 21352 + 21347 21353 21348 + 21207 21350 21203 + 21354 21350 21207 + 21351 21350 21354 + 21354 21355 21351 + 21351 21355 21356 + 21356 21352 21351 + 21357 21352 21356 + 21352 21357 21353 + 21251 21353 21357 + 21348 21353 21251 + 21207 21358 21354 + 21354 21358 21359 + 21359 21360 21354 + 21355 21354 21360 + 21360 21361 21355 + 21356 21355 21361 + 21211 21358 21207 + 21358 21211 21362 + 21362 21359 21358 + 21359 21362 21363 + 21363 21364 21359 + 21359 21364 21365 + 21365 21360 21359 + 21361 21360 21365 + 21216 21362 21211 + 21363 21362 21216 + 21216 21366 21363 + 21367 21363 21366 + 21367 21368 21363 + 21368 21364 21363 + 21368 21365 21364 + 21368 21369 21365 + 21369 21370 21365 + 21365 21370 21361 + 21371 21366 21216 + 21366 21371 21372 + 21372 21367 21366 + 21367 21372 21373 + 21368 21367 21373 + 21369 21368 21373 + 21216 21215 21371 + 21371 21215 21214 + 21214 21374 21371 + 21372 21371 21374 + 21373 21372 21374 + 21374 21223 21373 + 21373 21223 21228 + 21233 21373 21228 + 21373 21233 21369 + 21223 21374 21214 + 21251 21250 21348 + 21349 21348 21250 + 21249 21349 21250 + 21375 21349 21249 + 21349 21375 21344 + 21344 21375 21376 + 21376 21345 21344 + 21377 21345 21376 + 21340 21345 21377 + 21378 21375 21249 + 21375 21378 21379 + 21379 21376 21375 + 21380 21376 21379 + 21376 21380 21377 + 21378 21249 21255 + 21255 21381 21378 + 21378 21381 21382 + 21382 21379 21378 + 21383 21379 21382 + 21383 21380 21379 + 21380 21383 21384 + 21384 21385 21380 + 21377 21380 21385 + 21386 21381 21255 + 21381 21386 21387 + 21387 21382 21381 + 21382 21387 21388 + 21388 21389 21382 + 21382 21389 21383 + 21383 21389 21390 + 21390 21384 21383 + 21255 21259 21386 + 21386 21259 21391 + 21391 21392 21386 + 21386 21392 21393 + 21393 21387 21386 + 21388 21387 21393 + 21391 21259 21258 + 21258 21394 21391 + 21395 21391 21394 + 21391 21395 21396 + 21396 21392 21391 + 21392 21396 21397 + 21397 21393 21392 + 21263 21394 21258 + 21398 21394 21263 + 21394 21398 21395 + 21399 21395 21398 + 21396 21395 21399 + 21399 21400 21396 + 21396 21400 21401 + 21401 21397 21396 + 21402 21397 21401 + 21393 21397 21402 + 21263 21267 21398 + 21398 21267 21305 + 21305 21403 21398 + 21398 21403 21399 + 21404 21399 21403 + 21399 21404 21405 + 21405 21400 21399 + 21400 21405 21406 + 21406 21401 21400 + 21309 21403 21305 + 21403 21309 21404 + 21313 21404 21309 + 21405 21404 21313 + 21313 21407 21405 + 21405 21407 21408 + 21408 21406 21405 + 21409 21406 21408 + 21401 21406 21409 + 21409 21410 21401 + 21401 21410 21402 + 21317 21407 21313 + 21407 21317 21411 + 21411 21408 21407 + 21408 21411 21412 + 21412 21413 21408 + 21408 21413 21409 + 21409 21413 21414 + 21414 21415 21409 + 21410 21409 21415 + 21322 21411 21317 + 21412 21411 21322 + 21322 21416 21412 + 21412 21416 21417 + 21417 21418 21412 + 21413 21412 21418 + 21418 21414 21413 + 21327 21416 21322 + 21416 21327 21419 + 21419 21417 21416 + 21417 21419 21420 + 21420 21421 21417 + 21417 21421 21422 + 21422 21418 21417 + 21422 21414 21418 + 21423 21419 21327 + 21420 21419 21423 + 21423 21424 21420 + 21425 21420 21424 + 21421 21420 21425 + 21425 21426 21421 + 21426 21422 21421 + 21327 21326 21423 + 21332 21423 21326 + 21423 21332 21427 + 21427 21424 21423 + 21424 21427 21428 + 21428 21425 21424 + 21425 21428 21429 + 21426 21425 21429 + 21430 21426 21429 + 21426 21430 21422 + 21430 21431 21422 + 21422 21431 21414 + 21427 21332 21331 + 21331 21432 21427 + 21428 21427 21432 + 21429 21428 21432 + 21432 21433 21429 + 21429 21433 21434 + 21435 21429 21434 + 21429 21435 21430 + 21433 21432 21331 + 21331 21336 21433 + 21433 21336 21436 + 21436 21434 21433 + 21437 21434 21436 + 21434 21437 21435 + 21437 21438 21435 + 21435 21438 21439 + 21440 21435 21439 + 21435 21440 21430 + 21436 21336 21335 + 21335 21441 21436 + 21442 21436 21441 + 21436 21442 21437 + 21437 21442 21385 + 21385 21438 21437 + 21439 21438 21385 + 21340 21441 21335 + 21377 21441 21340 + 21441 21377 21442 + 21385 21442 21377 + 21439 21385 21384 + 21439 21384 21390 + 21390 21443 21439 + 21440 21439 21443 + 21440 21443 21444 + 21445 21440 21444 + 21440 21445 21430 + 21444 21443 21390 + 21390 21446 21444 + 21444 21446 21447 + 21447 21448 21444 + 21445 21444 21448 + 21445 21448 21449 + 21450 21445 21449 + 21445 21450 21430 + 21446 21390 21389 + 21389 21388 21446 + 21447 21446 21388 + 21388 21451 21447 + 21452 21447 21451 + 21448 21447 21452 + 21449 21448 21452 + 21449 21452 21453 + 21453 21454 21449 + 21450 21449 21454 + 21430 21450 21454 + 21454 21455 21430 + 21430 21455 21431 + 21393 21451 21388 + 21402 21451 21393 + 21451 21402 21452 + 21453 21452 21402 + 21402 21410 21453 + 21415 21453 21410 + 21453 21415 21455 + 21455 21454 21453 + 21455 21415 21414 + 21414 21431 21455 + 21357 21252 21251 + 21456 21252 21357 + 21241 21252 21456 + 21456 21242 21241 + 21242 21456 21457 + 21457 21243 21242 + 21357 21458 21456 + 21456 21458 21459 + 21459 21457 21456 + 21460 21457 21459 + 21243 21457 21460 + 21460 21461 21243 + 21243 21461 21238 + 21356 21458 21357 + 21458 21356 21462 + 21462 21459 21458 + 21459 21462 21463 + 21463 21464 21459 + 21459 21464 21460 + 21465 21460 21464 + 21465 21466 21460 + 21466 21461 21460 + 21466 21238 21461 + 21466 21233 21238 + 21361 21462 21356 + 21463 21462 21361 + 21361 21370 21463 + 21369 21463 21370 + 21464 21463 21369 + 21369 21465 21464 + 21466 21465 21369 + 21233 21466 21369 + 21467 8348 8351 + 8348 21467 21468 + 21468 8349 8348 + 21469 8349 21468 + 8349 21469 8342 + 8342 21469 8343 + 21470 21467 8351 + 21467 21470 21471 + 21467 21471 21472 + 21472 21473 21467 + 21473 21468 21467 + 21470 8351 21474 + 21474 21475 21470 + 21476 21470 21475 + 21470 21476 21471 + 21477 21471 21476 + 21471 21477 21478 + 21478 21472 21471 + 8350 21474 8351 + 21474 8350 21479 + 21480 21474 21479 + 21474 21480 21475 + 21481 21475 21480 + 21475 21481 21482 + 21476 21475 21482 + 21483 21476 21482 + 21476 21483 21477 + 21479 8350 42 + 42 21484 21479 + 21479 21484 21485 + 21485 21486 21479 + 21486 21487 21479 + 21487 21480 21479 + 21487 21481 21480 + 21488 21481 21487 + 21481 21488 21482 + 21484 42 8320 + 8320 21489 21484 + 21484 21489 21490 + 21485 21484 21490 + 21490 21491 21485 + 21492 21485 21491 + 21486 21485 21492 + 21486 21492 21488 + 21488 21487 21486 + 21489 8320 21493 + 21489 21493 21494 + 21494 21490 21489 + 21490 21494 21495 + 21490 21495 21496 + 21496 21491 21490 + 21497 21491 21496 + 21491 21497 21492 + 21488 21492 21497 + 21493 8320 8319 + 8319 21498 21493 + 21493 21498 21499 + 21499 21494 21493 + 21495 21494 21499 + 21499 21500 21495 + 21496 21495 21500 + 21501 21496 21500 + 21497 21496 21501 + 8319 21502 21498 + 21498 21502 21503 + 21503 21504 21498 + 21498 21504 21499 + 21505 21499 21504 + 21499 21505 21500 + 21502 8319 8318 + 8318 21506 21502 + 21502 21506 21507 + 21507 21503 21502 + 21508 21503 21507 + 21504 21503 21508 + 21504 21508 21505 + 21505 21508 21509 + 21509 21510 21505 + 21500 21505 21510 + 8318 8317 21506 + 21506 8317 21511 + 21511 21512 21506 + 21506 21512 21507 + 21511 8317 8316 + 8316 21513 21511 + 21513 21514 21511 + 21514 21515 21511 + 21516 21511 21515 + 21511 21516 21512 + 8324 21513 8316 + 21517 21513 8324 + 21513 21517 21518 + 21518 21514 21513 + 21518 21519 21514 + 21514 21519 21520 + 21520 21515 21514 + 21520 21521 21515 + 21515 21521 21516 + 21517 8324 8323 + 8323 21522 21517 + 21517 21522 21523 + 21523 21518 21517 + 21519 21518 21523 + 21523 21524 21519 + 21519 21524 21525 + 21525 21526 21519 + 21526 21520 21519 + 21521 21520 21526 + 21522 8323 8329 + 21522 8329 21527 + 21527 21528 21522 + 21522 21528 21523 + 8335 21527 8329 + 21529 21527 8335 + 21528 21527 21529 + 21528 21529 21530 + 21530 21531 21528 + 21528 21531 21523 + 8335 8344 21529 + 8344 21532 21529 + 21532 21533 21529 + 21533 21530 21529 + 21530 21533 21534 + 21535 21530 21534 + 21531 21530 21535 + 21536 21532 8344 + 21532 21536 21537 + 21537 21538 21532 + 21532 21538 21533 + 21538 21539 21533 + 21539 21534 21533 + 8344 8343 21536 + 21469 21536 8343 + 21536 21469 21540 + 21537 21536 21540 + 21537 21540 21541 + 21542 21537 21541 + 21538 21537 21542 + 21542 21543 21538 + 21539 21538 21543 + 21544 21539 21543 + 21534 21539 21544 + 21540 21469 21468 + 21541 21540 21468 + 21473 21541 21468 + 21473 21545 21541 + 21541 21545 21546 + 21546 21542 21541 + 21542 21546 21547 + 21547 21543 21542 + 21543 21547 21548 + 21548 21544 21543 + 21549 21544 21548 + 21544 21549 21534 + 21535 21534 21549 + 21473 21550 21545 + 21545 21550 21551 + 21551 21552 21545 + 21545 21552 21553 + 21553 21546 21545 + 21547 21546 21553 + 21553 21554 21547 + 21548 21547 21554 + 21550 21473 21472 + 21472 21555 21550 + 21551 21550 21555 + 21555 21556 21551 + 21557 21551 21556 + 21557 21552 21551 + 21552 21557 21558 + 21558 21553 21552 + 21553 21558 21559 + 21559 21554 21553 + 21472 21478 21555 + 21555 21478 21560 + 21560 21556 21555 + 21556 21560 21561 + 21562 21556 21561 + 21556 21562 21557 + 21557 21562 21563 + 21558 21557 21563 + 21564 21558 21563 + 21559 21558 21564 + 21560 21478 21565 + 21561 21560 21565 + 21565 21566 21561 + 21567 21561 21566 + 21562 21561 21567 + 21567 21563 21562 + 21568 21563 21567 + 21563 21568 21569 + 21569 21564 21563 + 21478 21477 21565 + 21570 21565 21477 + 21566 21565 21570 + 21570 21571 21566 + 21566 21571 21572 + 21572 21573 21566 + 21566 21573 21567 + 21574 21567 21573 + 21567 21574 21568 + 21477 21483 21570 + 21570 21483 21575 + 21575 21576 21570 + 21571 21570 21576 + 21576 21577 21571 + 21572 21571 21577 + 21482 21575 21483 + 21578 21575 21482 + 21575 21578 21579 + 21579 21576 21575 + 21577 21576 21579 + 21579 21580 21577 + 21577 21580 21581 + 21581 21582 21577 + 21577 21582 21572 + 21488 21578 21482 + 21579 21578 21488 + 21583 21579 21488 + 21580 21579 21583 + 21583 21584 21580 + 21581 21580 21584 + 21584 21585 21581 + 21586 21581 21585 + 21581 21586 21582 + 21582 21586 21587 + 21587 21572 21582 + 21488 21497 21583 + 21497 21588 21583 + 21589 21583 21588 + 21583 21589 21590 + 21590 21584 21583 + 21584 21590 21591 + 21591 21585 21584 + 21592 21585 21591 + 21585 21592 21586 + 21501 21588 21497 + 21501 21593 21588 + 21588 21593 21589 + 21589 21593 21594 + 21595 21589 21594 + 21590 21589 21595 + 21595 21596 21590 + 21591 21590 21596 + 21593 21501 21597 + 21597 21594 21593 + 21594 21597 21510 + 21510 21598 21594 + 21594 21598 21599 + 21599 21600 21594 + 21594 21600 21595 + 21500 21597 21501 + 21510 21597 21500 + 21598 21510 21509 + 21509 21601 21598 + 21599 21598 21601 + 21601 21602 21599 + 21603 21599 21602 + 21600 21599 21603 + 21603 21604 21600 + 21600 21604 21605 + 21605 21595 21600 + 21596 21595 21605 + 21601 21509 21507 + 21507 21606 21601 + 21601 21606 21607 + 21607 21602 21601 + 21602 21607 21608 + 21608 21609 21602 + 21602 21609 21603 + 21507 21509 21508 + 21603 21609 21610 + 21611 21610 21609 + 21610 21611 21612 + 21612 21613 21610 + 21610 21613 21614 + 21614 21615 21610 + 21610 21615 21603 + 21604 21603 21615 + 21609 21608 21611 + 21616 21611 21608 + 21612 21611 21616 + 21616 21617 21612 + 21612 21617 21618 + 21618 21619 21612 + 21613 21612 21619 + 21619 21620 21613 + 21614 21613 21620 + 21621 21616 21608 + 21622 21616 21621 + 21616 21622 21623 + 21623 21617 21616 + 21617 21623 21624 + 21624 21618 21617 + 21625 21621 21608 + 21626 21621 21625 + 21627 21621 21626 + 21621 21627 21622 + 21627 21628 21622 + 21628 21629 21622 + 21623 21622 21629 + 21608 21630 21625 + 21631 21625 21630 + 21625 21631 21632 + 21632 21633 21625 + 21625 21633 21626 + 21634 21630 21608 + 21635 21630 21634 + 21630 21635 21631 + 21636 21631 21635 + 21632 21631 21636 + 21608 21607 21634 + 21634 21607 21606 + 21606 21637 21634 + 21638 21634 21637 + 21634 21638 21635 + 21635 21638 21639 + 21639 21640 21635 + 21635 21640 21636 + 21641 21637 21606 + 21641 21642 21637 + 21637 21642 21638 + 21638 21642 21521 + 21521 21639 21638 + 21526 21639 21521 + 21639 21526 21643 + 21643 21640 21639 + 21606 21507 21641 + 21512 21641 21507 + 21642 21641 21512 + 21512 21516 21642 + 21642 21516 21521 + 21643 21526 21525 + 21525 21644 21643 + 21643 21644 21645 + 21645 21646 21643 + 21640 21643 21646 + 21646 21636 21640 + 21636 21646 21647 + 21647 21648 21636 + 21636 21648 21632 + 21649 21644 21525 + 21644 21649 21650 + 21650 21645 21644 + 21645 21650 21651 + 21651 21652 21645 + 21645 21652 21647 + 21647 21646 21645 + 21525 21653 21649 + 21649 21653 21654 + 21654 21655 21649 + 21649 21655 21656 + 21656 21650 21649 + 21651 21650 21656 + 21653 21525 21524 + 21524 21657 21653 + 21654 21653 21657 + 21657 21658 21654 + 21659 21654 21658 + 21654 21659 21660 + 21660 21655 21654 + 21655 21660 21661 + 21661 21656 21655 + 21657 21524 21523 + 21523 21662 21657 + 21657 21662 21663 + 21663 21658 21657 + 21658 21663 21664 + 21664 21665 21658 + 21658 21665 21659 + 21666 21659 21665 + 21660 21659 21666 + 21662 21523 21667 + 21667 21668 21662 + 21662 21668 21669 + 21669 21663 21662 + 21664 21663 21669 + 21670 21667 21523 + 21671 21667 21670 + 21668 21667 21671 + 21671 21672 21668 + 21668 21672 21673 + 21673 21669 21668 + 21531 21670 21523 + 21674 21670 21531 + 21674 21675 21670 + 21670 21675 21671 + 21671 21675 21676 + 21676 21677 21671 + 21672 21671 21677 + 21677 21678 21672 + 21672 21678 21673 + 21531 21535 21674 + 21674 21535 21549 + 21675 21674 21549 + 21549 21676 21675 + 21676 21549 21548 + 21676 21548 21679 + 21679 21677 21676 + 21678 21677 21679 + 21679 21680 21678 + 21678 21680 21681 + 21681 21673 21678 + 21669 21673 21681 + 21681 21682 21669 + 21669 21682 21664 + 21679 21548 21554 + 21680 21679 21554 + 21554 21559 21680 + 21681 21680 21559 + 21559 21683 21681 + 21682 21681 21683 + 21683 21684 21682 + 21664 21682 21684 + 21684 21685 21664 + 21665 21664 21685 + 21564 21683 21559 + 21684 21683 21564 + 21564 21569 21684 + 21684 21569 21686 + 21686 21685 21684 + 21687 21685 21686 + 21685 21687 21665 + 21665 21687 21666 + 21686 21569 21568 + 21568 21688 21686 + 21689 21686 21688 + 21686 21689 21687 + 21687 21689 21690 + 21690 21666 21687 + 21666 21690 21691 + 21691 21692 21666 + 21666 21692 21660 + 21693 21688 21568 + 21694 21688 21693 + 21688 21694 21689 + 21689 21694 21695 + 21695 21690 21689 + 21691 21690 21695 + 21568 21574 21693 + 21693 21574 21696 + 21696 21697 21693 + 21698 21693 21697 + 21693 21698 21694 + 21694 21698 21699 + 21699 21695 21694 + 21573 21696 21574 + 21696 21573 21572 + 21572 21587 21696 + 21696 21587 21700 + 21700 21697 21696 + 21701 21697 21700 + 21697 21701 21698 + 21698 21701 21702 + 21702 21699 21698 + 21703 21699 21702 + 21695 21699 21703 + 21703 21704 21695 + 21695 21704 21691 + 21700 21587 21586 + 21586 21592 21700 + 21705 21700 21592 + 21700 21705 21701 + 21701 21705 21706 + 21706 21702 21701 + 21702 21706 21707 + 21707 21708 21702 + 21702 21708 21703 + 21592 21709 21705 + 21705 21709 21710 + 21710 21706 21705 + 21707 21706 21710 + 21710 21711 21707 + 21707 21711 21712 + 21712 21713 21707 + 21708 21707 21713 + 21591 21709 21592 + 21709 21591 21714 + 21714 21710 21709 + 21710 21714 21715 + 21715 21711 21710 + 21711 21715 21716 + 21716 21712 21711 + 21596 21714 21591 + 21715 21714 21596 + 21596 21717 21715 + 21715 21717 21718 + 21718 21716 21715 + 21719 21716 21718 + 21712 21716 21719 + 21719 21720 21712 + 21712 21720 21721 + 21721 21713 21712 + 21605 21717 21596 + 21717 21605 21722 + 21722 21718 21717 + 21718 21722 21723 + 21723 21724 21718 + 21718 21724 21719 + 21719 21724 21725 + 21725 21726 21719 + 21720 21719 21726 + 21727 21722 21605 + 21723 21722 21727 + 21727 21728 21723 + 21723 21728 21729 + 21729 21730 21723 + 21724 21723 21730 + 21730 21725 21724 + 21605 21604 21727 + 21615 21727 21604 + 21727 21615 21614 + 21614 21728 21727 + 21728 21614 21731 + 21731 21729 21728 + 21729 21731 21732 + 21732 21733 21729 + 21729 21733 21734 + 21734 21730 21729 + 21725 21730 21734 + 21620 21731 21614 + 21732 21731 21620 + 21620 21735 21732 + 21732 21735 21736 + 21736 21737 21732 + 21733 21732 21737 + 21737 21738 21733 + 21734 21733 21738 + 21739 21735 21620 + 21735 21739 21740 + 21740 21736 21735 + 21736 21740 21741 + 21741 21742 21736 + 21736 21742 21743 + 21743 21737 21736 + 21738 21737 21743 + 21620 21619 21739 + 21739 21619 21618 + 21618 21744 21739 + 21739 21744 21745 + 21745 21740 21739 + 21741 21740 21745 + 21745 21746 21741 + 21741 21746 21747 + 21742 21741 21747 + 21747 21748 21742 + 21743 21742 21748 + 21749 21744 21618 + 21744 21749 21750 + 21750 21745 21744 + 21745 21750 21751 + 21751 21746 21745 + 21746 21751 21752 + 21752 21747 21746 + 21747 21752 21753 + 21748 21747 21753 + 21618 21624 21749 + 21749 21624 21754 + 21754 21755 21749 + 21749 21755 21756 + 21756 21750 21749 + 21751 21750 21756 + 21756 21757 21751 + 21752 21751 21757 + 21758 21752 21757 + 21752 21758 21753 + 21754 21624 21623 + 21623 21759 21754 + 21760 21754 21759 + 21754 21760 21761 + 21761 21755 21754 + 21755 21761 21762 + 21762 21756 21755 + 21756 21762 21763 + 21763 21757 21756 + 21757 21763 21758 + 21629 21759 21623 + 21764 21759 21629 + 21759 21764 21760 + 21765 21760 21764 + 21761 21760 21765 + 21765 21766 21761 + 21761 21766 21767 + 21767 21762 21761 + 21763 21762 21767 + 21767 21768 21763 + 21763 21768 21758 + 21629 21769 21764 + 21764 21769 21770 + 21770 21771 21764 + 21764 21771 21765 + 21772 21765 21771 + 21765 21772 21773 + 21773 21766 21765 + 21774 21769 21629 + 21769 21774 21775 + 21775 21770 21769 + 21776 21770 21775 + 21770 21776 21777 + 21777 21771 21770 + 21771 21777 21772 + 21778 21772 21777 + 21773 21772 21778 + 21628 21774 21629 + 21774 21628 21779 + 21779 21780 21774 + 21774 21780 21781 + 21781 21775 21774 + 21782 21775 21781 + 21775 21782 21776 + 21779 21628 21627 + 21627 21783 21779 + 21779 21783 21784 + 21784 21785 21779 + 21780 21779 21785 + 21785 21786 21780 + 21781 21780 21786 + 21626 21783 21627 + 21783 21626 21787 + 21787 21784 21783 + 21784 21787 21788 + 21788 21789 21784 + 21784 21789 21790 + 21790 21785 21784 + 21786 21785 21790 + 21791 21787 21626 + 21788 21787 21791 + 21791 21792 21788 + 21788 21792 21793 + 21793 21794 21788 + 21789 21788 21794 + 21794 21795 21789 + 21790 21789 21795 + 21626 21633 21791 + 21796 21791 21633 + 21791 21796 21797 + 21797 21792 21791 + 21792 21797 21798 + 21798 21793 21792 + 21633 21632 21796 + 21799 21796 21632 + 21797 21796 21799 + 21799 21800 21797 + 21797 21800 21801 + 21801 21798 21797 + 21802 21798 21801 + 21793 21798 21802 + 21632 21648 21799 + 21803 21799 21648 + 21799 21803 21804 + 21804 21800 21799 + 21800 21804 21805 + 21805 21801 21800 + 21801 21805 21806 + 21806 21807 21801 + 21801 21807 21802 + 21648 21647 21803 + 21808 21803 21647 + 21804 21803 21808 + 21808 21809 21804 + 21804 21809 21810 + 21810 21805 21804 + 21806 21805 21810 + 21810 21811 21806 + 21806 21811 21812 + 21807 21806 21812 + 21647 21652 21808 + 21813 21808 21652 + 21808 21813 21814 + 21814 21809 21808 + 21809 21814 21815 + 21815 21810 21809 + 21810 21815 21816 + 21816 21811 21810 + 21811 21816 21817 + 21817 21812 21811 + 21652 21651 21813 + 21818 21813 21651 + 21814 21813 21818 + 21818 21819 21814 + 21814 21819 21820 + 21820 21815 21814 + 21816 21815 21820 + 21820 21821 21816 + 21816 21821 21817 + 21651 21822 21818 + 21823 21818 21822 + 21818 21823 21824 + 21824 21819 21818 + 21819 21824 21825 + 21825 21820 21819 + 21820 21825 21826 + 21826 21821 21820 + 21656 21822 21651 + 21827 21822 21656 + 21822 21827 21823 + 21828 21823 21827 + 21824 21823 21828 + 21828 21829 21824 + 21824 21829 21830 + 21830 21825 21824 + 21826 21825 21830 + 21656 21661 21827 + 21827 21661 21831 + 21831 21832 21827 + 21827 21832 21828 + 21833 21828 21832 + 21828 21833 21834 + 21834 21829 21828 + 21829 21834 21835 + 21835 21830 21829 + 21831 21661 21660 + 21660 21692 21831 + 21836 21831 21692 + 21831 21836 21837 + 21837 21832 21831 + 21832 21837 21833 + 21838 21833 21837 + 21834 21833 21838 + 21838 21839 21834 + 21834 21839 21840 + 21840 21835 21834 + 21692 21691 21836 + 21836 21691 21841 + 21841 21776 21836 + 21776 21782 21836 + 21837 21836 21782 + 21782 21842 21837 + 21837 21842 21838 + 21691 21704 21841 + 21843 21841 21704 + 21841 21843 21844 + 21844 21845 21841 + 21841 21845 21777 + 21777 21776 21841 + 21704 21703 21843 + 21846 21843 21703 + 21844 21843 21846 + 21846 21847 21844 + 21844 21847 21848 + 21848 21849 21844 + 21845 21844 21849 + 21849 21778 21845 + 21777 21845 21778 + 21703 21708 21846 + 21713 21846 21708 + 21846 21713 21721 + 21721 21847 21846 + 21847 21721 21850 + 21850 21848 21847 + 21848 21850 21851 + 21851 21852 21848 + 21848 21852 21853 + 21853 21849 21848 + 21778 21849 21853 + 21853 21854 21778 + 21778 21854 21773 + 21855 21850 21721 + 21851 21850 21855 + 21855 21856 21851 + 21851 21856 21857 + 21857 21858 21851 + 21852 21851 21858 + 21858 21859 21852 + 21853 21852 21859 + 21721 21720 21855 + 21726 21855 21720 + 21855 21726 21860 + 21860 21856 21855 + 21856 21860 21861 + 21861 21857 21856 + 21857 21861 21862 + 21862 21863 21857 + 21857 21863 21864 + 21864 21858 21857 + 21859 21858 21864 + 21860 21726 21725 + 21725 21865 21860 + 21860 21865 21866 + 21866 21861 21860 + 21862 21861 21866 + 21866 21867 21862 + 21862 21867 21868 + 21863 21862 21868 + 21868 21869 21863 + 21864 21863 21869 + 21734 21865 21725 + 21865 21734 21870 + 21870 21866 21865 + 21866 21870 21871 + 21871 21867 21866 + 21867 21871 21872 + 21872 21868 21867 + 21868 21872 21748 + 21869 21868 21748 + 21873 21869 21748 + 21864 21869 21873 + 21738 21870 21734 + 21871 21870 21738 + 21738 21874 21871 + 21871 21874 21872 + 21748 21872 21874 + 21874 21743 21748 + 21743 21874 21738 + 21753 21873 21748 + 21875 21873 21753 + 21875 21876 21873 + 21876 21864 21873 + 21864 21876 21859 + 21859 21876 21875 + 21875 21877 21859 + 21859 21877 21853 + 21854 21853 21877 + 21878 21875 21753 + 21875 21878 21879 + 21879 21877 21875 + 21877 21879 21854 + 21773 21854 21879 + 21879 21880 21773 + 21766 21773 21880 + 21880 21767 21766 + 21881 21878 21753 + 21879 21878 21881 + 21881 21880 21879 + 21767 21880 21881 + 21881 21768 21767 + 21768 21881 21758 + 21881 21753 21758 + 21781 21842 21782 + 21842 21781 21882 + 21882 21838 21842 + 21838 21882 21883 + 21883 21839 21838 + 21839 21883 21884 + 21884 21840 21839 + 21786 21882 21781 + 21883 21882 21786 + 21786 21885 21883 + 21883 21885 21886 + 21886 21884 21883 + 21887 21884 21886 + 21840 21884 21887 + 21887 21888 21840 + 21840 21888 21889 + 21889 21835 21840 + 21790 21885 21786 + 21885 21790 21890 + 21890 21886 21885 + 21886 21890 21891 + 21891 21892 21886 + 21886 21892 21887 + 21887 21892 21893 + 21888 21887 21893 + 21893 21894 21888 + 21889 21888 21894 + 21795 21890 21790 + 21891 21890 21795 + 21795 21895 21891 + 21891 21895 21896 + 21892 21891 21896 + 21896 21893 21892 + 21894 21893 21896 + 21897 21894 21896 + 21894 21897 21898 + 21898 21889 21894 + 21889 21898 21830 + 21830 21835 21889 + 21899 21895 21795 + 21895 21899 21900 + 21900 21896 21895 + 21896 21900 21817 + 21817 21897 21896 + 21897 21817 21821 + 21821 21826 21897 + 21826 21898 21897 + 21830 21898 21826 + 21795 21794 21899 + 21899 21794 21793 + 21793 21901 21899 + 21899 21901 21900 + 21902 21900 21901 + 21900 21902 21817 + 21902 21812 21817 + 21812 21902 21807 + 21902 21802 21807 + 21802 21901 21793 + 21901 21802 21902 + 8225 21903 8303 + 8232 21903 8225 + 21903 8232 21904 + 21904 21905 21903 + 8303 21903 21905 + 21905 21906 8303 + 8298 8303 21906 + 21906 8292 8298 + 8239 21904 8232 + 21907 21904 8239 + 21905 21904 21907 + 21907 21908 21905 + 21905 21908 21909 + 21909 21906 21905 + 8292 21906 21909 + 21909 8293 8292 + 8293 21909 21910 + 21910 8288 8293 + 8239 21911 21907 + 21907 21911 21912 + 21912 21913 21907 + 21908 21907 21913 + 21913 21914 21908 + 21909 21908 21914 + 21914 21910 21909 + 21915 21910 21914 + 8288 21910 21915 + 8243 21911 8239 + 21911 8243 21916 + 21916 21912 21911 + 21912 21916 21917 + 21917 21918 21912 + 21912 21918 21919 + 21919 21913 21912 + 21914 21913 21919 + 21919 21920 21914 + 21914 21920 21915 + 8247 21916 8243 + 21917 21916 8247 + 8247 21921 21917 + 21917 21921 21922 + 21922 21923 21917 + 21918 21917 21923 + 21923 21924 21918 + 21919 21918 21924 + 21924 21925 21919 + 21920 21919 21925 + 8252 21921 8247 + 21921 8252 21926 + 21926 21922 21921 + 21922 21926 21927 + 21922 21927 21928 + 21928 21923 21922 + 21923 21928 21929 + 21924 21923 21929 + 21924 21929 21930 + 21930 21925 21924 + 21926 8252 8251 + 21931 21926 8251 + 21932 21926 21931 + 21926 21932 21927 + 21927 21932 21933 + 21928 21927 21933 + 21928 21933 21934 + 21929 21928 21934 + 21930 21929 21934 + 21931 8251 8250 + 21935 21931 8250 + 21931 21935 21936 + 21931 21936 21932 + 21932 21936 21937 + 21932 21937 21933 + 21934 21933 21937 + 21938 21934 21937 + 21930 21934 21938 + 21939 21930 21938 + 21925 21930 21939 + 8262 21935 8250 + 21935 8262 21940 + 21941 21935 21940 + 21935 21941 21936 + 21936 21941 21937 + 21941 21942 21937 + 21937 21942 21943 + 21943 21938 21937 + 21944 21940 8262 + 21940 21944 21945 + 21945 21942 21940 + 21941 21940 21942 + 8262 8261 21944 + 21944 8261 21946 + 21945 21944 21946 + 21947 21945 21946 + 21945 21947 21943 + 21942 21945 21943 + 8261 8260 21946 + 21948 21946 8260 + 21946 21948 21947 + 21948 21949 21947 + 21943 21947 21949 + 21949 21950 21943 + 21950 21951 21943 + 21952 21943 21951 + 21943 21952 21938 + 8260 8266 21948 + 21948 8266 21949 + 8266 8270 21949 + 21950 21949 8270 + 8270 8274 21950 + 21950 8274 21951 + 8274 8278 21951 + 21953 21951 8278 + 21951 21953 21952 + 21953 21954 21952 + 21938 21952 21954 + 21954 21955 21938 + 21955 21939 21938 + 8278 21956 21953 + 21953 21956 21954 + 21956 21957 21954 + 21955 21954 21957 + 21957 21958 21955 + 21955 21958 21959 + 21959 21939 21955 + 21959 21925 21939 + 21925 21959 21920 + 21956 8278 8277 + 8277 8283 21956 + 21957 21956 8283 + 8283 21960 21957 + 21958 21957 21960 + 21960 21915 21958 + 21959 21958 21915 + 21915 21920 21959 + 8288 21960 8283 + 21915 21960 8288 + 7712 21961 7713 + 7712 21962 21961 + 21961 21962 3721 + 21961 3721 21963 + 7713 21961 21963 + 21962 7712 7711 + 7711 21964 21962 + 15495 21962 21964 + 21962 15495 3721 + 21965 21966 21967 + 21968 21966 21965 + 21966 21968 21969 + 21969 21970 21966 + 21971 21966 21970 + 21971 21972 21966 + 21967 21973 21965 + 21974 21965 21973 + 21975 21965 21974 + 21965 21975 21976 + 21976 21968 21965 + 21973 21967 21977 + 21978 21973 21977 + 21973 21978 21974 + 21979 21974 21978 + 21980 21974 21979 + 21974 21980 21975 + 21977 21967 21972 + 21972 21981 21977 + 21982 21977 21981 + 21982 21978 21977 + 21982 21983 21978 + 21983 21984 21978 + 21978 21984 21979 + 21981 21972 21985 + 21981 21985 21986 + 21986 21987 21981 + 21987 21982 21981 + 21987 21988 21982 + 21982 21988 21989 + 21983 21982 21989 + 21985 21972 21990 + 21985 21990 21991 + 21986 21985 21991 + 21992 21986 21991 + 21992 21993 21986 + 21994 21986 21993 + 21987 21986 21994 + 21988 21987 21994 + 21972 21971 21990 + 21971 21995 21990 + 21990 21995 21996 + 21996 21991 21990 + 21997 21991 21996 + 21991 21997 21998 + 21998 21992 21991 + 21995 21971 21970 + 21970 21999 21995 + 21996 21995 21999 + 21999 22000 21996 + 22001 21996 22000 + 21996 22001 21997 + 21999 21970 21969 + 21969 22002 21999 + 21999 22002 22003 + 22003 22000 21999 + 22004 22000 22003 + 22000 22004 22001 + 22005 22001 22004 + 21997 22001 22005 + 22002 21969 22006 + 22006 22007 22002 + 22002 22007 22008 + 22003 22002 22008 + 22008 22009 22003 + 22010 22003 22009 + 22003 22010 22004 + 22011 22006 21969 + 22006 22011 22012 + 22013 22006 22012 + 22007 22006 22013 + 22007 22013 22014 + 22014 22008 22007 + 21969 21968 22011 + 22015 22011 21968 + 22012 22011 22015 + 22016 22012 22015 + 22013 22012 22016 + 22013 22016 22014 + 22016 22017 22014 + 22018 22014 22017 + 22008 22014 22018 + 21968 21976 22015 + 22019 22015 21976 + 22019 22016 22015 + 22020 22016 22019 + 22016 22020 22021 + 22021 22017 22016 + 22017 22021 22022 + 22022 22023 22017 + 22017 22023 22018 + 22024 22019 21976 + 22025 22019 22024 + 22019 22025 22020 + 22026 22024 21976 + 22027 22024 22026 + 22024 22027 22025 + 22025 22027 22028 + 22028 22029 22025 + 22020 22025 22029 + 21976 22030 22026 + 22026 22030 22031 + 22031 22032 22026 + 22027 22026 22032 + 22032 22028 22027 + 22028 22032 22033 + 22028 22033 22034 + 22028 22034 22029 + 21975 22030 21976 + 22030 21975 22035 + 22035 22031 22030 + 22036 22031 22035 + 22031 22036 22033 + 22033 22032 22031 + 21975 21980 22035 + 21980 22037 22035 + 22038 22035 22037 + 22035 22038 22036 + 22036 22038 22039 + 22033 22036 22039 + 22040 22033 22039 + 22034 22033 22040 + 22041 22037 21980 + 22037 22041 22042 + 22037 22042 22038 + 22043 22038 22042 + 22038 22043 22039 + 22044 22039 22043 + 22039 22044 22045 + 22045 22040 22039 + 21980 21979 22041 + 22046 22041 21979 + 22047 22041 22046 + 22041 22047 22042 + 22042 22047 22048 + 22042 22048 22043 + 22049 22043 22048 + 22043 22049 22044 + 21984 22046 21979 + 22046 21984 21983 + 22050 22046 21983 + 22046 22050 22051 + 22046 22051 22047 + 22052 22047 22051 + 22047 22052 22048 + 22052 22053 22048 + 22048 22053 22049 + 22054 22049 22053 + 22044 22049 22054 + 21989 22050 21983 + 22051 22050 21989 + 21989 22055 22051 + 22051 22055 22052 + 22053 22052 22055 + 22055 22056 22053 + 22053 22056 22057 + 22054 22053 22057 + 22058 22054 22057 + 22054 22058 22059 + 22054 22059 22044 + 22055 21989 21988 + 22056 22055 21988 + 22056 21988 21994 + 22056 21994 22057 + 21993 22057 21994 + 22057 21993 22060 + 22057 22060 22058 + 22058 22060 22061 + 22061 22062 22058 + 22059 22058 22062 + 22062 22063 22059 + 22059 22063 22064 + 22044 22059 22064 + 22060 21993 21992 + 21992 22065 22060 + 22060 22065 22061 + 22065 22066 22061 + 22067 22061 22066 + 22061 22067 22068 + 22061 22068 22069 + 22069 22062 22061 + 22063 22062 22069 + 22064 22063 22069 + 21992 21998 22065 + 22065 21998 22070 + 22070 22066 22065 + 22066 22070 22071 + 22066 22071 22067 + 22067 22071 22072 + 22073 22067 22072 + 22068 22067 22073 + 22074 22070 21998 + 22071 22070 22074 + 22074 22075 22071 + 22071 22075 22072 + 21998 21997 22074 + 21997 22076 22074 + 22077 22074 22076 + 22074 22077 22075 + 22075 22077 22078 + 22078 22072 22075 + 22005 22076 21997 + 22079 22076 22005 + 22076 22079 22077 + 22077 22079 22080 + 22080 22078 22077 + 22081 22078 22080 + 22072 22078 22081 + 22005 22082 22079 + 22079 22082 22083 + 22083 22080 22079 + 22080 22083 22084 + 22084 22085 22080 + 22080 22085 22081 + 22082 22005 22086 + 22086 22087 22082 + 22082 22087 22088 + 22088 22083 22082 + 22084 22083 22088 + 22004 22086 22005 + 22089 22086 22004 + 22087 22086 22089 + 22089 22090 22087 + 22087 22090 22091 + 22091 22088 22087 + 22088 22091 22092 + 22092 22093 22088 + 22088 22093 22084 + 22004 22010 22089 + 22089 22010 22094 + 22094 22095 22089 + 22090 22089 22095 + 22095 22096 22090 + 22090 22096 22097 + 22097 22091 22090 + 22092 22091 22097 + 22009 22094 22010 + 22094 22009 22098 + 22098 22099 22094 + 22094 22099 22100 + 22100 22095 22094 + 22096 22095 22100 + 22100 22101 22096 + 22096 22101 22102 + 22102 22097 22096 + 22098 22009 22008 + 22008 22103 22098 + 22098 22103 22104 + 22104 22105 22098 + 22099 22098 22105 + 22105 22106 22099 + 22100 22099 22106 + 22106 22107 22100 + 22101 22100 22107 + 22018 22103 22008 + 22103 22018 22108 + 22108 22104 22103 + 22109 22104 22108 + 22104 22109 22110 + 22110 22105 22104 + 22105 22110 22111 + 22111 22106 22105 + 22106 22111 22112 + 22112 22107 22106 + 22113 22108 22018 + 22113 22114 22108 + 22114 22109 22108 + 22109 22114 22115 + 22109 22115 22110 + 22111 22110 22115 + 22115 22116 22111 + 22111 22116 22117 + 22117 22112 22111 + 22018 22023 22113 + 22118 22113 22023 + 22114 22113 22118 + 22114 22118 22119 + 22119 22120 22114 + 22114 22120 22115 + 22121 22115 22120 + 22116 22115 22121 + 22023 22022 22118 + 22022 22122 22118 + 22122 22123 22118 + 22123 22119 22118 + 22123 22124 22119 + 22124 22125 22119 + 22125 22120 22119 + 22120 22125 22121 + 22126 22122 22022 + 22127 22122 22126 + 22122 22127 22128 + 22128 22123 22122 + 22124 22123 22128 + 22022 22021 22126 + 22126 22021 22020 + 22129 22126 22020 + 22129 22130 22126 + 22130 22127 22126 + 22127 22130 22131 + 22131 22128 22127 + 22131 22132 22128 + 22132 22124 22128 + 22020 22133 22129 + 22134 22129 22133 + 22129 22134 22135 + 22130 22129 22135 + 22130 22135 22136 + 22136 22131 22130 + 22132 22131 22136 + 22029 22133 22020 + 22137 22133 22029 + 22133 22137 22134 + 22138 22134 22137 + 22135 22134 22138 + 22138 22139 22135 + 22136 22135 22139 + 22140 22136 22139 + 22132 22136 22140 + 22140 22141 22132 + 22124 22132 22141 + 22137 22029 22142 + 22143 22137 22142 + 22138 22137 22143 + 22143 22144 22138 + 22145 22138 22144 + 22138 22145 22139 + 22139 22145 22146 + 22146 22140 22139 + 22034 22142 22029 + 22142 22034 22147 + 22148 22142 22147 + 22148 22143 22142 + 22149 22143 22148 + 22143 22149 22144 + 22149 22150 22144 + 22144 22150 22151 + 22144 22151 22145 + 22040 22147 22034 + 22152 22147 22040 + 22147 22152 22153 + 22153 22148 22147 + 22148 22153 22149 + 22149 22153 22154 + 22150 22149 22154 + 22154 22155 22150 + 22151 22150 22155 + 22155 22156 22151 + 22145 22151 22156 + 22146 22145 22156 + 22040 22045 22152 + 22152 22045 22064 + 22064 22157 22152 + 22153 22152 22157 + 22158 22153 22157 + 22153 22158 22154 + 22064 22045 22044 + 22121 22125 22124 + 22124 22141 22121 + 22159 22121 22141 + 22121 22159 22116 + 22116 22159 22160 + 22160 22117 22116 + 22141 22161 22159 + 22160 22159 22161 + 22161 22162 22160 + 22162 22163 22160 + 22163 22164 22160 + 22165 22160 22164 + 22117 22160 22165 + 22161 22141 22140 + 22140 22146 22161 + 22161 22146 22166 + 22166 22162 22161 + 22166 22167 22162 + 22162 22167 22168 + 22168 22163 22162 + 22168 22169 22163 + 22163 22169 22170 + 22170 22164 22163 + 22166 22146 22156 + 22167 22166 22156 + 22156 22171 22167 + 22168 22167 22171 + 22171 22172 22168 + 22169 22168 22172 + 22172 22173 22169 + 22169 22173 22174 + 22170 22169 22174 + 22156 22155 22171 + 22155 22175 22171 + 22171 22175 22176 + 22176 22172 22171 + 22173 22172 22176 + 22176 22177 22173 + 22173 22177 22178 + 22178 22174 22173 + 22175 22155 22154 + 22154 22179 22175 + 22176 22175 22179 + 22179 22180 22176 + 22177 22176 22180 + 22180 22181 22177 + 22177 22181 22182 + 22182 22178 22177 + 22183 22178 22182 + 22174 22178 22183 + 22154 22184 22179 + 22180 22179 22184 + 22185 22180 22184 + 22181 22180 22185 + 22181 22185 22186 + 22186 22187 22181 + 22181 22187 22182 + 22154 22158 22184 + 22184 22158 22188 + 22185 22184 22188 + 22188 22186 22185 + 22189 22186 22188 + 22186 22189 22187 + 22187 22189 22190 + 22190 22191 22187 + 22187 22191 22182 + 22158 22157 22188 + 22192 22188 22157 + 22188 22192 22189 + 22189 22192 22069 + 22190 22189 22069 + 22069 22068 22190 + 22068 22193 22190 + 22194 22190 22193 + 22190 22194 22191 + 22157 22064 22192 + 22192 22064 22069 + 22073 22193 22068 + 22193 22073 22195 + 22193 22195 22194 + 22194 22195 22196 + 22196 22197 22194 + 22191 22194 22197 + 22197 22182 22191 + 22182 22197 22198 + 22198 22199 22182 + 22182 22199 22183 + 22195 22073 22200 + 22200 22196 22195 + 22196 22200 22201 + 22201 22202 22196 + 22196 22202 22198 + 22198 22197 22196 + 22072 22200 22073 + 22201 22200 22072 + 22072 22203 22201 + 22201 22203 22204 + 22204 22205 22201 + 22202 22201 22205 + 22205 22206 22202 + 22198 22202 22206 + 22081 22203 22072 + 22203 22081 22207 + 22207 22204 22203 + 22204 22207 22208 + 22208 22209 22204 + 22204 22209 22210 + 22210 22205 22204 + 22206 22205 22210 + 22211 22207 22081 + 22208 22207 22211 + 22211 22212 22208 + 22208 22212 22213 + 22213 22214 22208 + 22209 22208 22214 + 22214 22215 22209 + 22210 22209 22215 + 22081 22085 22211 + 22216 22211 22085 + 22211 22216 22217 + 22217 22212 22211 + 22212 22217 22218 + 22218 22213 22212 + 22085 22084 22216 + 22219 22216 22084 + 22217 22216 22219 + 22219 22220 22217 + 22217 22220 22221 + 22221 22218 22217 + 22222 22218 22221 + 22213 22218 22222 + 22084 22093 22219 + 22223 22219 22093 + 22219 22223 22224 + 22224 22220 22219 + 22220 22224 22225 + 22225 22221 22220 + 22221 22225 22226 + 22226 22227 22221 + 22221 22227 22222 + 22093 22092 22223 + 22228 22223 22092 + 22224 22223 22228 + 22228 22229 22224 + 22224 22229 22230 + 22230 22225 22224 + 22226 22225 22230 + 22231 22228 22092 + 22232 22228 22231 + 22228 22232 22233 + 22233 22229 22228 + 22229 22233 22234 + 22234 22230 22229 + 22235 22231 22092 + 22236 22231 22235 + 22237 22231 22236 + 22231 22237 22232 + 22232 22237 22238 + 22233 22232 22238 + 22092 22239 22235 + 22240 22235 22239 + 22235 22240 22241 + 22241 22242 22235 + 22235 22242 22236 + 22097 22239 22092 + 22243 22239 22097 + 22239 22243 22240 + 22244 22240 22243 + 22241 22240 22244 + 22244 22245 22241 + 22241 22245 22246 + 22246 22247 22241 + 22242 22241 22247 + 22097 22102 22243 + 22243 22102 22248 + 22248 22249 22243 + 22243 22249 22244 + 22250 22244 22249 + 22244 22250 22251 + 22251 22245 22244 + 22245 22251 22252 + 22252 22246 22245 + 22248 22102 22101 + 22101 22253 22248 + 22254 22248 22253 + 22248 22254 22255 + 22255 22249 22248 + 22249 22255 22250 + 22256 22250 22255 + 22251 22250 22256 + 22107 22253 22101 + 22257 22253 22107 + 22253 22257 22254 + 22258 22254 22257 + 22255 22254 22258 + 22258 22259 22255 + 22255 22259 22256 + 22107 22112 22257 + 22257 22112 22117 + 22117 22260 22257 + 22257 22260 22258 + 22261 22258 22260 + 22258 22261 22262 + 22262 22259 22258 + 22259 22262 22263 + 22263 22256 22259 + 22165 22260 22117 + 22260 22165 22261 + 22264 22261 22165 + 22262 22261 22264 + 22264 22265 22262 + 22262 22265 22266 + 22266 22263 22262 + 22267 22263 22266 + 22256 22263 22267 + 22267 22268 22256 + 22256 22268 22251 + 22165 22269 22264 + 22270 22264 22269 + 22264 22270 22271 + 22271 22265 22264 + 22265 22271 22272 + 22272 22266 22265 + 22164 22269 22165 + 22164 22170 22269 + 22269 22170 22270 + 22174 22270 22170 + 22271 22270 22174 + 22174 22273 22271 + 22271 22273 22274 + 22274 22272 22271 + 22275 22272 22274 + 22266 22272 22275 + 22275 22276 22266 + 22266 22276 22267 + 22183 22273 22174 + 22273 22183 22277 + 22277 22274 22273 + 22274 22277 22278 + 22278 22279 22274 + 22274 22279 22275 + 22275 22279 22280 + 22280 22281 22275 + 22276 22275 22281 + 22282 22277 22183 + 22278 22277 22282 + 22282 22283 22278 + 22278 22283 22284 + 22284 22285 22278 + 22279 22278 22285 + 22285 22280 22279 + 22183 22199 22282 + 22286 22282 22199 + 22282 22286 22287 + 22287 22283 22282 + 22283 22287 22288 + 22288 22284 22283 + 22199 22198 22286 + 22289 22286 22198 + 22287 22286 22289 + 22289 22290 22287 + 22287 22290 22291 + 22291 22288 22287 + 22292 22288 22291 + 22284 22288 22292 + 22293 22289 22198 + 22294 22289 22293 + 22289 22294 22295 + 22295 22290 22289 + 22290 22295 22296 + 22296 22291 22290 + 22206 22293 22198 + 22297 22293 22206 + 22298 22293 22297 + 22293 22298 22294 + 22299 22294 22298 + 22295 22294 22299 + 22299 22300 22295 + 22295 22300 22301 + 22301 22296 22295 + 22206 22302 22297 + 22297 22302 22303 + 22303 22304 22297 + 22305 22297 22304 + 22297 22305 22298 + 22210 22302 22206 + 22302 22210 22306 + 22306 22303 22302 + 22303 22306 22307 + 22307 22308 22303 + 22303 22308 22309 + 22309 22304 22303 + 22310 22304 22309 + 22304 22310 22305 + 22215 22306 22210 + 22307 22306 22215 + 22215 22311 22307 + 22307 22311 22312 + 22312 22313 22307 + 22308 22307 22313 + 22313 22314 22308 + 22309 22308 22314 + 22315 22311 22215 + 22311 22315 22316 + 22316 22312 22311 + 22312 22316 22317 + 22317 22318 22312 + 22312 22318 22319 + 22319 22313 22312 + 22314 22313 22319 + 22215 22214 22315 + 22315 22214 22213 + 22213 22320 22315 + 22315 22320 22321 + 22321 22316 22315 + 22317 22316 22321 + 22321 22322 22317 + 22323 22317 22322 + 22318 22317 22323 + 22323 22324 22318 + 22319 22318 22324 + 22222 22320 22213 + 22320 22222 22325 + 22325 22321 22320 + 22321 22325 22326 + 22326 22322 22321 + 22322 22326 22323 + 22326 22327 22323 + 22323 22327 22328 + 22324 22323 22328 + 22329 22325 22222 + 22326 22325 22329 + 22329 22330 22326 + 22326 22330 22327 + 22330 22331 22327 + 22331 22328 22327 + 22222 22227 22329 + 22332 22329 22227 + 22329 22332 22331 + 22331 22330 22329 + 22227 22226 22332 + 22333 22332 22226 + 22331 22332 22333 + 22333 22334 22331 + 22331 22334 22328 + 22334 22335 22328 + 22335 22336 22328 + 22328 22336 22324 + 22226 22337 22333 + 22338 22333 22337 + 22333 22338 22335 + 22335 22334 22333 + 22230 22337 22226 + 22339 22337 22230 + 22337 22339 22338 + 22340 22338 22339 + 22335 22338 22340 + 22340 22341 22335 + 22335 22341 22336 + 22342 22336 22341 + 22336 22342 22324 + 22230 22234 22339 + 22339 22234 22343 + 22343 22344 22339 + 22339 22344 22340 + 22345 22340 22344 + 22340 22345 22346 + 22346 22341 22340 + 22341 22346 22342 + 22343 22234 22233 + 22233 22347 22343 + 22348 22343 22347 + 22343 22348 22349 + 22349 22344 22343 + 22344 22349 22345 + 22350 22345 22349 + 22346 22345 22350 + 22350 22351 22346 + 22346 22351 22342 + 22238 22347 22233 + 22352 22347 22238 + 22347 22352 22348 + 22310 22348 22352 + 22349 22348 22310 + 22310 22353 22349 + 22349 22353 22350 + 22354 22350 22353 + 22350 22354 22355 + 22355 22351 22350 + 22238 22356 22352 + 22352 22356 22298 + 22298 22305 22352 + 22352 22305 22310 + 22356 22238 22357 + 22357 22299 22356 + 22356 22299 22298 + 22237 22357 22238 + 22309 22353 22310 + 22353 22309 22354 + 22314 22354 22309 + 22355 22354 22314 + 22314 22358 22355 + 22355 22358 22359 + 22351 22355 22359 + 22359 22342 22351 + 22342 22359 22324 + 22324 22359 22358 + 22358 22319 22324 + 22319 22358 22314 + 22360 22296 22301 + 22291 22296 22360 + 22360 22361 22291 + 22291 22361 22292 + 22301 22362 22360 + 22360 22362 22363 + 22363 22364 22360 + 22361 22360 22364 + 22364 22365 22361 + 22365 22366 22361 + 22366 22292 22361 + 22367 22362 22301 + 22362 22367 22368 + 22368 22363 22362 + 22363 22368 22369 + 22369 22370 22363 + 22363 22370 22371 + 22371 22364 22363 + 22365 22364 22371 + 22301 22372 22367 + 22367 22372 22373 + 22373 22374 22367 + 22367 22374 22375 + 22375 22368 22367 + 22369 22368 22375 + 22372 22301 22300 + 22300 22376 22372 + 22373 22372 22376 + 22376 22377 22373 + 22378 22373 22377 + 22373 22378 22379 + 22379 22374 22373 + 22374 22379 22380 + 22380 22375 22374 + 22376 22300 22299 + 22299 22381 22376 + 22376 22381 22237 + 22237 22377 22376 + 22236 22377 22237 + 22377 22236 22378 + 22382 22378 22236 + 22379 22378 22382 + 22382 22383 22379 + 22379 22383 22384 + 22384 22380 22379 + 22385 22380 22384 + 22375 22380 22385 + 22385 22386 22375 + 22375 22386 22369 + 22236 22242 22382 + 22247 22382 22242 + 22382 22247 22387 + 22387 22383 22382 + 22383 22387 22388 + 22388 22384 22383 + 22384 22388 22389 + 22389 22390 22384 + 22384 22390 22385 + 22387 22247 22246 + 22246 22391 22387 + 22387 22391 22392 + 22392 22388 22387 + 22389 22388 22392 + 22392 22393 22389 + 22389 22393 22394 + 22389 22394 22395 + 22390 22389 22395 + 22385 22390 22395 + 22396 22391 22246 + 22391 22396 22397 + 22397 22392 22391 + 22392 22397 22398 + 22398 22393 22392 + 22393 22398 22399 + 22399 22394 22393 + 22394 22399 22400 + 22395 22394 22400 + 22246 22252 22396 + 22396 22252 22401 + 22401 22402 22396 + 22396 22402 22403 + 22403 22397 22396 + 22398 22397 22403 + 22403 22404 22398 + 22398 22404 22399 + 22400 22399 22404 + 22401 22252 22251 + 22251 22268 22401 + 22405 22401 22268 + 22401 22405 22406 + 22406 22402 22401 + 22402 22406 22407 + 22407 22403 22402 + 22403 22407 22408 + 22408 22404 22403 + 22404 22408 22400 + 22268 22267 22405 + 22409 22405 22267 + 22406 22405 22409 + 22409 22410 22406 + 22406 22410 22411 + 22411 22407 22406 + 22408 22407 22411 + 22411 22412 22408 + 22408 22412 22400 + 22267 22276 22409 + 22281 22409 22276 + 22409 22281 22413 + 22413 22410 22409 + 22410 22413 22414 + 22414 22411 22410 + 22411 22414 22415 + 22415 22412 22411 + 22412 22415 22416 + 22416 22400 22412 + 22413 22281 22280 + 22280 22417 22413 + 22413 22417 22418 + 22418 22414 22413 + 22415 22414 22418 + 22418 22419 22415 + 22415 22419 22416 + 22420 22416 22419 + 22416 22420 22421 + 22400 22416 22421 + 22422 22417 22280 + 22417 22422 22423 + 22423 22418 22417 + 22418 22423 22424 + 22424 22419 22418 + 22419 22424 22420 + 22420 22424 22425 + 22426 22420 22425 + 22420 22426 22421 + 22280 22285 22422 + 22422 22285 22284 + 22284 22427 22422 + 22422 22427 22428 + 22428 22423 22422 + 22423 22428 22425 + 22424 22423 22425 + 22292 22427 22284 + 22428 22427 22292 + 22366 22428 22292 + 22428 22366 22425 + 22366 22429 22425 + 22425 22429 22426 + 22429 22430 22426 + 22430 22371 22426 + 22371 22421 22426 + 22429 22366 22365 + 22365 22430 22429 + 22371 22430 22365 + 22371 22370 22421 + 22370 22369 22421 + 22369 22431 22421 + 22421 22431 22400 + 22431 22395 22400 + 22385 22395 22431 + 22386 22385 22431 + 22369 22386 22431 + 22432 22433 22434 + 22433 22432 22435 + 22435 22436 22433 + 22437 22433 22436 + 22438 22433 22437 + 22439 22432 22434 + 22432 22439 22440 + 22440 22441 22432 + 22432 22441 22442 + 22442 22435 22432 + 22443 22435 22442 + 22435 22443 22436 + 22439 22434 22444 + 22444 22445 22439 + 22440 22439 22445 + 22445 22446 22440 + 22440 22446 22447 + 22447 22448 22440 + 22441 22440 22448 + 22448 22449 22441 + 22442 22441 22449 + 22445 22444 22450 + 22451 22445 22450 + 22445 22451 22452 + 22452 22446 22445 + 22446 22452 22453 + 22453 22447 22446 + 22450 22444 22454 + 22454 22455 22450 + 22450 22455 22456 + 22456 22457 22450 + 22450 22457 22458 + 22451 22450 22458 + 22454 22444 22438 + 22438 22459 22454 + 22454 22459 22460 + 22460 22461 22454 + 22455 22454 22461 + 22461 22462 22455 + 22456 22455 22462 + 22437 22459 22438 + 22459 22437 22463 + 22463 22460 22459 + 22460 22463 22464 + 22464 22465 22460 + 22460 22465 22466 + 22466 22461 22460 + 22462 22461 22466 + 22467 22463 22437 + 22464 22463 22467 + 22467 22468 22464 + 22464 22468 22469 + 22469 22470 22464 + 22465 22464 22470 + 22470 22471 22465 + 22466 22465 22471 + 22437 22472 22467 + 22473 22467 22472 + 22467 22473 22474 + 22474 22468 22467 + 22468 22474 22475 + 22475 22469 22468 + 22436 22472 22437 + 22476 22472 22436 + 22472 22476 22473 + 22477 22473 22476 + 22474 22473 22477 + 22477 22478 22474 + 22474 22478 22479 + 22479 22475 22474 + 22436 22480 22476 + 22476 22480 22481 + 22481 22482 22476 + 22476 22482 22477 + 22483 22477 22482 + 22477 22483 22484 + 22484 22478 22477 + 22443 22480 22436 + 22480 22443 22485 + 22481 22480 22485 + 22485 22486 22481 + 22487 22481 22486 + 22482 22481 22487 + 22488 22482 22487 + 22482 22488 22483 + 22489 22483 22488 + 22484 22483 22489 + 22443 22490 22485 + 22491 22485 22490 + 22485 22491 22492 + 22492 22493 22485 + 22485 22493 22494 + 22494 22486 22485 + 22495 22490 22443 + 22496 22490 22495 + 22490 22496 22491 + 22497 22491 22496 + 22492 22491 22497 + 22443 22498 22495 + 22495 22498 22499 + 22499 22500 22495 + 22501 22495 22500 + 22495 22501 22496 + 22442 22498 22443 + 22498 22442 22502 + 22502 22499 22498 + 22499 22502 22503 + 22503 22504 22499 + 22499 22504 22505 + 22505 22500 22499 + 22506 22500 22505 + 22500 22506 22501 + 22449 22502 22442 + 22503 22502 22449 + 22449 22507 22503 + 22503 22507 22508 + 22508 22509 22503 + 22504 22503 22509 + 22509 22510 22504 + 22505 22504 22510 + 22511 22507 22449 + 22507 22511 22512 + 22512 22508 22507 + 22508 22512 22513 + 22513 22514 22508 + 22508 22514 22515 + 22515 22509 22508 + 22449 22448 22511 + 22511 22448 22447 + 22447 22516 22511 + 22511 22516 22517 + 22517 22512 22511 + 22513 22512 22517 + 22517 22518 22513 + 22519 22513 22518 + 22519 22520 22513 + 22520 22514 22513 + 22520 22515 22514 + 22521 22516 22447 + 22516 22521 22522 + 22522 22517 22516 + 22517 22522 22523 + 22523 22518 22517 + 22518 22523 22524 + 22524 22519 22518 + 22447 22453 22521 + 22521 22453 22525 + 22525 22526 22521 + 22521 22526 22527 + 22527 22522 22521 + 22523 22522 22527 + 22527 22528 22523 + 22524 22523 22528 + 22529 22524 22528 + 22519 22524 22529 + 22525 22453 22452 + 22452 22530 22525 + 22531 22525 22530 + 22525 22531 22532 + 22532 22526 22525 + 22526 22532 22533 + 22533 22527 22526 + 22527 22533 22534 + 22534 22528 22527 + 22528 22534 22529 + 22535 22530 22452 + 22536 22530 22535 + 22530 22536 22531 + 22537 22531 22536 + 22532 22531 22537 + 22537 22538 22532 + 22532 22538 22539 + 22539 22533 22532 + 22534 22533 22539 + 22452 22451 22535 + 22535 22451 22458 + 22458 22540 22535 + 22541 22535 22540 + 22535 22541 22536 + 22536 22541 22542 + 22542 22543 22536 + 22536 22543 22537 + 22544 22540 22458 + 22545 22540 22544 + 22540 22545 22541 + 22542 22541 22545 + 22545 22546 22542 + 22547 22542 22546 + 22542 22547 22548 + 22548 22543 22542 + 22458 22549 22544 + 22544 22549 22550 + 22550 22551 22544 + 22552 22544 22551 + 22544 22552 22545 + 22545 22552 22553 + 22553 22546 22545 + 22554 22549 22458 + 22549 22554 22555 + 22555 22550 22549 + 22556 22550 22555 + 22550 22556 22557 + 22557 22551 22550 + 22458 22558 22554 + 22554 22558 22559 + 22559 22560 22554 + 22554 22560 22561 + 22561 22555 22554 + 22562 22555 22561 + 22555 22562 22556 + 22558 22458 22457 + 22457 22563 22558 + 22559 22558 22563 + 22563 22564 22559 + 22565 22559 22564 + 22559 22565 22566 + 22566 22560 22559 + 22560 22566 22567 + 22567 22561 22560 + 22563 22457 22456 + 22456 22568 22563 + 22563 22568 22569 + 22569 22564 22563 + 22570 22564 22569 + 22564 22570 22565 + 22571 22565 22570 + 22566 22565 22571 + 22568 22456 22572 + 22572 22573 22568 + 22569 22568 22573 + 22573 22574 22569 + 22575 22569 22574 + 22569 22575 22570 + 22462 22572 22456 + 22576 22572 22462 + 22573 22572 22576 + 22576 22577 22573 + 22573 22577 22578 + 22578 22574 22573 + 22579 22574 22578 + 22574 22579 22575 + 22580 22575 22579 + 22570 22575 22580 + 22462 22581 22576 + 22576 22581 22582 + 22582 22583 22576 + 22577 22576 22583 + 22583 22584 22577 + 22578 22577 22584 + 22466 22581 22462 + 22581 22466 22585 + 22585 22582 22581 + 22582 22585 22586 + 22586 22587 22582 + 22582 22587 22588 + 22588 22583 22582 + 22584 22583 22588 + 22471 22585 22466 + 22586 22585 22471 + 22471 22589 22586 + 22590 22586 22589 + 22587 22586 22590 + 22590 22591 22587 + 22591 22588 22587 + 22592 22588 22591 + 22588 22592 22584 + 22593 22589 22471 + 22589 22593 22594 + 22594 22590 22589 + 22590 22594 22595 + 22591 22590 22595 + 22596 22591 22595 + 22591 22596 22592 + 22596 22597 22592 + 22584 22592 22597 + 22471 22470 22593 + 22593 22470 22469 + 22469 22598 22593 + 22594 22593 22598 + 22595 22594 22598 + 22598 22599 22595 + 22595 22599 22600 + 22595 22600 22601 + 22602 22595 22601 + 22595 22602 22596 + 22599 22598 22469 + 22599 22469 22475 + 22599 22475 22600 + 22475 22479 22600 + 22600 22479 22603 + 22601 22600 22603 + 22601 22603 22604 + 22604 22605 22601 + 22601 22605 22602 + 22602 22605 22606 + 22607 22602 22606 + 22602 22607 22596 + 22603 22479 22478 + 22478 22484 22603 + 22604 22603 22484 + 22484 22608 22604 + 22609 22604 22608 + 22605 22604 22609 + 22606 22605 22609 + 22606 22609 22610 + 22610 22611 22606 + 22607 22606 22611 + 22489 22608 22484 + 22612 22608 22489 + 22608 22612 22609 + 22610 22609 22612 + 22612 22613 22610 + 22614 22610 22613 + 22611 22610 22614 + 22615 22611 22614 + 22607 22611 22615 + 22616 22607 22615 + 22607 22616 22596 + 22489 22617 22612 + 22612 22617 22618 + 22618 22613 22612 + 22619 22613 22618 + 22613 22619 22614 + 22620 22614 22619 + 22615 22614 22620 + 22620 22621 22615 + 22616 22615 22621 + 22617 22489 22622 + 22622 22623 22617 + 22618 22617 22623 + 22623 22624 22618 + 22625 22618 22624 + 22618 22625 22619 + 22488 22622 22489 + 22626 22622 22488 + 22623 22622 22626 + 22626 22627 22623 + 22623 22627 22628 + 22628 22624 22623 + 22629 22624 22628 + 22624 22629 22625 + 22630 22625 22629 + 22619 22625 22630 + 22488 22487 22626 + 22626 22487 22631 + 22631 22632 22626 + 22627 22626 22632 + 22632 22633 22627 + 22628 22627 22633 + 22633 22634 22628 + 22635 22628 22634 + 22628 22635 22629 + 22486 22631 22487 + 22631 22486 22494 + 22494 22636 22631 + 22631 22636 22637 + 22637 22632 22631 + 22633 22632 22637 + 22637 22638 22633 + 22633 22638 22639 + 22639 22634 22633 + 22640 22634 22639 + 22634 22640 22635 + 22636 22494 22641 + 22641 22642 22636 + 22637 22636 22642 + 22642 22643 22637 + 22643 22644 22637 + 22644 22645 22637 + 22638 22637 22645 + 22646 22641 22494 + 22647 22641 22646 + 22642 22641 22647 + 22642 22647 22648 + 22648 22643 22642 + 22643 22648 22649 + 22643 22649 22644 + 22494 22493 22646 + 22650 22646 22493 + 22646 22650 22651 + 22646 22651 22647 + 22648 22647 22651 + 22652 22648 22651 + 22648 22652 22653 + 22649 22648 22653 + 22493 22492 22650 + 22650 22492 22654 + 22654 22655 22650 + 22655 22656 22650 + 22651 22650 22656 + 22656 22657 22651 + 22651 22657 22658 + 22658 22652 22651 + 22492 22659 22654 + 22660 22654 22659 + 22654 22660 22661 + 22654 22661 22662 + 22662 22655 22654 + 22497 22659 22492 + 22663 22659 22497 + 22659 22663 22660 + 22664 22660 22663 + 22661 22660 22664 + 22664 22665 22661 + 22662 22661 22665 + 22666 22662 22665 + 22667 22662 22666 + 22655 22662 22667 + 22497 22668 22663 + 22663 22668 22669 + 22669 22670 22663 + 22663 22670 22664 + 22671 22664 22670 + 22665 22664 22671 + 22668 22497 22672 + 22672 22673 22668 + 22669 22668 22673 + 22673 22547 22669 + 22546 22669 22547 + 22669 22546 22553 + 22553 22670 22669 + 22670 22553 22671 + 22496 22672 22497 + 22674 22672 22496 + 22673 22672 22674 + 22674 22675 22673 + 22673 22675 22548 + 22548 22547 22673 + 22496 22501 22674 + 22674 22501 22506 + 22506 22676 22674 + 22675 22674 22676 + 22676 22677 22675 + 22548 22675 22677 + 22677 22678 22548 + 22543 22548 22678 + 22678 22537 22543 + 22679 22676 22506 + 22677 22676 22679 + 22679 22680 22677 + 22677 22680 22681 + 22681 22678 22677 + 22537 22678 22681 + 22681 22538 22537 + 22538 22681 22682 + 22682 22539 22538 + 22506 22683 22679 + 22679 22683 22684 + 22684 22685 22679 + 22680 22679 22685 + 22685 22686 22680 + 22681 22680 22686 + 22686 22682 22681 + 22687 22682 22686 + 22539 22682 22687 + 22505 22683 22506 + 22683 22505 22688 + 22688 22684 22683 + 22689 22684 22688 + 22684 22689 22690 + 22690 22685 22684 + 22690 22691 22685 + 22691 22686 22685 + 22686 22691 22687 + 22510 22688 22505 + 22692 22688 22510 + 22692 22689 22688 + 22693 22689 22692 + 22693 22690 22689 + 22693 22694 22690 + 22694 22691 22690 + 22687 22691 22694 + 22695 22687 22694 + 22687 22695 22539 + 22539 22695 22534 + 22529 22534 22695 + 22510 22696 22692 + 22697 22692 22696 + 22697 22693 22692 + 22693 22697 22519 + 22529 22693 22519 + 22529 22694 22693 + 22694 22529 22695 + 22696 22510 22509 + 22515 22696 22509 + 22697 22696 22515 + 22520 22697 22515 + 22697 22520 22519 + 22698 22671 22553 + 22699 22671 22698 + 22671 22699 22665 + 22665 22699 22700 + 22700 22701 22665 + 22665 22701 22666 + 22553 22552 22698 + 22551 22698 22552 + 22702 22698 22551 + 22698 22702 22699 + 22700 22699 22702 + 22702 22703 22700 + 22704 22700 22703 + 22700 22704 22705 + 22705 22701 22700 + 22701 22705 22706 + 22706 22666 22701 + 22551 22557 22702 + 22702 22557 22707 + 22707 22703 22702 + 22708 22703 22707 + 22703 22708 22704 + 22709 22704 22708 + 22705 22704 22709 + 22709 22710 22705 + 22705 22710 22706 + 22707 22557 22556 + 22556 22711 22707 + 22712 22707 22711 + 22707 22712 22708 + 22708 22712 22713 + 22713 22714 22708 + 22708 22714 22709 + 22715 22709 22714 + 22710 22709 22715 + 22716 22711 22556 + 22717 22711 22716 + 22711 22717 22712 + 22713 22712 22717 + 22718 22713 22717 + 22719 22713 22718 + 22713 22719 22720 + 22720 22714 22713 + 22714 22720 22715 + 22556 22562 22716 + 22716 22562 22721 + 22721 22722 22716 + 22723 22716 22722 + 22716 22723 22717 + 22717 22723 22724 + 22724 22725 22717 + 22717 22725 22718 + 22561 22721 22562 + 22726 22721 22561 + 22721 22726 22727 + 22727 22722 22721 + 22722 22727 22728 + 22728 22729 22722 + 22722 22729 22723 + 22724 22723 22729 + 22561 22567 22726 + 22726 22567 22730 + 22730 22731 22726 + 22726 22731 22732 + 22732 22727 22726 + 22728 22727 22732 + 22732 22733 22728 + 22728 22733 22734 + 22729 22728 22734 + 22730 22567 22566 + 22566 22735 22730 + 22736 22730 22735 + 22730 22736 22737 + 22737 22731 22730 + 22731 22737 22738 + 22738 22732 22731 + 22733 22732 22738 + 22571 22735 22566 + 22739 22735 22571 + 22735 22739 22736 + 22740 22736 22739 + 22737 22736 22740 + 22740 22741 22737 + 22738 22737 22741 + 22742 22738 22741 + 22743 22738 22742 + 22738 22743 22733 + 22571 22744 22739 + 22739 22744 22640 + 22640 22745 22739 + 22739 22745 22740 + 22746 22740 22745 + 22740 22746 22741 + 22744 22571 22747 + 22747 22748 22744 + 22640 22744 22748 + 22748 22635 22640 + 22629 22635 22748 + 22748 22749 22629 + 22629 22749 22630 + 22570 22747 22571 + 22580 22747 22570 + 22748 22747 22580 + 22580 22749 22748 + 22749 22580 22750 + 22750 22630 22749 + 22630 22750 22751 + 22751 22752 22630 + 22630 22752 22619 + 22619 22752 22620 + 22579 22750 22580 + 22751 22750 22579 + 22579 22753 22751 + 22751 22753 22754 + 22754 22755 22751 + 22752 22751 22755 + 22755 22620 22752 + 22621 22620 22755 + 22756 22621 22755 + 22616 22621 22756 + 22578 22753 22579 + 22753 22578 22757 + 22757 22754 22753 + 22597 22754 22757 + 22597 22758 22754 + 22754 22758 22756 + 22756 22755 22754 + 22584 22757 22578 + 22597 22757 22584 + 22639 22745 22640 + 22745 22639 22746 + 22746 22639 22759 + 22759 22760 22746 + 22741 22746 22760 + 22760 22761 22741 + 22741 22761 22742 + 22639 22638 22759 + 22645 22759 22638 + 22762 22759 22645 + 22759 22762 22763 + 22763 22760 22759 + 22761 22760 22763 + 22761 22763 22764 + 22764 22765 22761 + 22761 22765 22742 + 22645 22766 22762 + 22762 22766 22767 + 22767 22768 22762 + 22762 22768 22763 + 22768 22764 22763 + 22769 22764 22768 + 22765 22764 22769 + 22765 22769 22770 + 22770 22742 22765 + 22766 22645 22771 + 22771 22772 22766 + 22772 22767 22766 + 22767 22772 22773 + 22774 22767 22773 + 22767 22774 22775 + 22768 22767 22775 + 22768 22775 22769 + 22770 22769 22775 + 22645 22644 22771 + 22776 22771 22644 + 22771 22776 22777 + 22777 22772 22771 + 22772 22777 22778 + 22778 22773 22772 + 22773 22778 22779 + 22779 22780 22773 + 22774 22773 22780 + 22649 22776 22644 + 22777 22776 22649 + 22649 22653 22777 + 22778 22777 22653 + 22653 22781 22778 + 22779 22778 22781 + 22781 22782 22779 + 22783 22779 22782 + 22780 22779 22783 + 22781 22653 22652 + 22652 22784 22781 + 22781 22784 22785 + 22785 22782 22781 + 22786 22782 22785 + 22782 22786 22783 + 22787 22783 22786 + 22788 22783 22787 + 22788 22780 22783 + 22784 22652 22658 + 22658 22789 22784 + 22785 22784 22789 + 22790 22785 22789 + 22791 22785 22790 + 22785 22791 22786 + 22786 22791 22792 + 22786 22792 22787 + 22658 22793 22789 + 22789 22793 22794 + 22789 22794 22790 + 22795 22790 22794 + 22795 22796 22790 + 22796 22797 22790 + 22790 22797 22791 + 22793 22658 22657 + 22657 22798 22793 + 22799 22793 22798 + 22793 22799 22794 + 22794 22799 22800 + 22794 22800 22795 + 22801 22795 22800 + 22795 22801 22802 + 22796 22795 22802 + 22657 22656 22798 + 22798 22656 22655 + 22655 22667 22798 + 22667 22803 22798 + 22803 22804 22798 + 22804 22799 22798 + 22804 22805 22799 + 22805 22800 22799 + 22805 22806 22800 + 22806 22801 22800 + 22666 22803 22667 + 22803 22666 22706 + 22803 22706 22807 + 22807 22804 22803 + 22804 22807 22805 + 22805 22807 22808 + 22805 22808 22806 + 22809 22806 22808 + 22810 22806 22809 + 22806 22810 22801 + 22810 22811 22801 + 22802 22801 22811 + 22812 22807 22706 + 22807 22812 22808 + 22808 22812 22813 + 22808 22813 22809 + 22814 22809 22813 + 22815 22809 22814 + 22809 22815 22810 + 22810 22815 22816 + 22810 22816 22811 + 22817 22812 22706 + 22817 22818 22812 + 22818 22813 22812 + 22818 22814 22813 + 22710 22817 22706 + 22819 22817 22710 + 22817 22819 22818 + 22818 22819 22820 + 22818 22820 22814 + 22821 22814 22820 + 22821 22822 22814 + 22822 22823 22814 + 22814 22823 22815 + 22710 22715 22819 + 22824 22819 22715 + 22819 22824 22820 + 22820 22824 22825 + 22820 22825 22821 + 22826 22821 22825 + 22826 22827 22821 + 22827 22822 22821 + 22828 22822 22827 + 22823 22822 22828 + 22829 22824 22715 + 22829 22830 22824 + 22830 22825 22824 + 22830 22826 22825 + 22831 22826 22830 + 22827 22826 22831 + 22827 22831 22832 + 22827 22832 22828 + 22720 22829 22715 + 22833 22829 22720 + 22830 22829 22833 + 22834 22830 22833 + 22834 22835 22830 + 22830 22835 22831 + 22836 22831 22835 + 22831 22836 22832 + 22720 22719 22833 + 22837 22833 22719 + 22837 22838 22833 + 22833 22838 22839 + 22840 22833 22839 + 22833 22840 22834 + 22718 22837 22719 + 22841 22837 22718 + 22837 22841 22842 + 22842 22838 22837 + 22839 22838 22842 + 22839 22842 22843 + 22843 22844 22839 + 22840 22839 22844 + 22844 22845 22840 + 22834 22840 22845 + 22841 22718 22725 + 22725 22846 22841 + 22842 22841 22846 + 22843 22842 22846 + 22846 22847 22843 + 22848 22843 22847 + 22849 22843 22848 + 22849 22844 22843 + 22845 22844 22849 + 22846 22725 22724 + 22724 22850 22846 + 22846 22850 22851 + 22851 22847 22846 + 22851 22852 22847 + 22852 22853 22847 + 22847 22853 22848 + 22850 22724 22854 + 22854 22855 22850 + 22855 22856 22850 + 22856 22851 22850 + 22856 22857 22851 + 22857 22852 22851 + 22729 22854 22724 + 22734 22854 22729 + 22855 22854 22734 + 22855 22734 22858 + 22858 22856 22855 + 22857 22856 22858 + 22857 22858 22859 + 22857 22859 22860 + 22857 22860 22852 + 22860 22861 22852 + 22853 22852 22861 + 22861 22862 22853 + 22853 22862 22848 + 22863 22858 22734 + 22858 22863 22859 + 22859 22863 22864 + 22859 22864 22865 + 22865 22860 22859 + 22866 22860 22865 + 22860 22866 22867 + 22867 22861 22860 + 22862 22861 22867 + 22733 22863 22734 + 22863 22733 22743 + 22864 22863 22743 + 22864 22743 22868 + 22868 22869 22864 + 22869 22865 22864 + 22866 22865 22869 + 22869 22870 22866 + 22866 22870 22867 + 22870 22871 22867 + 22862 22867 22871 + 22871 22872 22862 + 22862 22872 22848 + 22742 22868 22743 + 22868 22742 22770 + 22770 22873 22868 + 22868 22873 22869 + 22873 22874 22869 + 22874 22870 22869 + 22871 22870 22874 + 22875 22871 22874 + 22872 22871 22875 + 22875 22876 22872 + 22877 22872 22876 + 22872 22877 22848 + 22873 22770 22878 + 22878 22879 22873 + 22874 22873 22879 + 22879 22875 22874 + 22879 22880 22875 + 22880 22876 22875 + 22876 22880 22881 + 22881 22882 22876 + 22882 22877 22876 + 22883 22878 22770 + 22880 22878 22883 + 22879 22878 22880 + 22775 22883 22770 + 22884 22883 22775 + 22883 22884 22881 + 22883 22881 22880 + 22775 22774 22884 + 22780 22884 22774 + 22881 22884 22780 + 22780 22788 22881 + 22881 22788 22882 + 22787 22882 22788 + 22877 22882 22787 + 22787 22885 22877 + 22877 22885 22848 + 22885 22849 22848 + 22886 22849 22885 + 22886 22845 22849 + 22887 22845 22886 + 22845 22887 22834 + 22885 22787 22792 + 22792 22888 22885 + 22885 22888 22886 + 22886 22888 22889 + 22887 22886 22889 + 22887 22889 22890 + 22834 22887 22890 + 22834 22890 22891 + 22835 22834 22891 + 22891 22836 22835 + 22889 22888 22792 + 22792 22892 22889 + 22890 22889 22892 + 22893 22890 22892 + 22891 22890 22893 + 22894 22891 22893 + 22891 22894 22836 + 22894 22895 22836 + 22832 22836 22895 + 22791 22892 22792 + 22893 22892 22791 + 22797 22893 22791 + 22894 22893 22797 + 22797 22796 22894 + 22895 22894 22796 + 22802 22895 22796 + 22896 22895 22802 + 22895 22896 22832 + 22828 22832 22896 + 22816 22828 22896 + 22816 22897 22828 + 22828 22897 22823 + 22823 22897 22815 + 22802 22811 22896 + 22816 22896 22811 + 22815 22897 22816 + 22898 22756 22758 + 22898 22616 22756 + 22616 22898 22596 + 22596 22898 22597 + 22898 22758 22597 + 22899 22900 22901 + 22900 22899 22902 + 22903 22899 22901 + 22899 22903 22904 + 22904 22905 22899 + 22906 22899 22905 + 22899 22906 22902 + 22907 22903 22901 + 22903 22907 22908 + 22908 22909 22903 + 22903 22909 22904 + 22910 22904 22909 + 22905 22904 22910 + 22901 22911 22907 + 22907 22911 22912 + 22908 22907 22912 + 22913 22908 22912 + 22909 22908 22913 + 22909 22913 22914 + 22909 22914 22910 + 22911 22901 22915 + 22915 22916 22911 + 22917 22911 22916 + 22911 22917 22912 + 22918 22912 22917 + 22912 22918 22913 + 22915 22901 22919 + 22920 22915 22919 + 22916 22915 22920 + 22916 22920 22921 + 22916 22921 22922 + 22922 22917 22916 + 22917 22922 22923 + 22923 22918 22917 + 22901 22924 22919 + 22924 22925 22919 + 22919 22925 22926 + 22919 22926 22920 + 22927 22920 22926 + 22921 22920 22927 + 22927 22928 22921 + 22921 22928 22929 + 22922 22921 22929 + 22924 22902 22925 + 22930 22925 22902 + 22925 22930 22926 + 22926 22930 22931 + 22931 22932 22926 + 22926 22932 22933 + 22926 22933 22927 + 22934 22927 22933 + 22927 22934 22928 + 22902 22935 22930 + 22931 22930 22935 + 22935 22936 22931 + 22936 22937 22931 + 22937 22938 22931 + 22939 22931 22938 + 22931 22939 22932 + 22902 22906 22935 + 22906 22940 22935 + 22935 22940 22936 + 22940 22941 22936 + 22942 22936 22941 + 22936 22942 22943 + 22943 22937 22936 + 22940 22906 22905 + 22905 22944 22940 + 22941 22940 22944 + 22945 22941 22944 + 22942 22941 22945 + 22945 22946 22942 + 22942 22946 22947 + 22943 22942 22947 + 22905 22910 22944 + 22944 22910 22948 + 22948 22949 22944 + 22944 22949 22945 + 22950 22945 22949 + 22945 22950 22946 + 22946 22950 22951 + 22951 22952 22946 + 22946 22952 22947 + 22953 22948 22910 + 22954 22948 22953 + 22949 22948 22954 + 22949 22954 22950 + 22951 22950 22954 + 22955 22951 22954 + 22956 22951 22955 + 22952 22951 22956 + 22952 22956 22957 + 22957 22947 22952 + 22910 22914 22953 + 22914 22958 22953 + 22959 22953 22958 + 22953 22959 22960 + 22960 22961 22953 + 22953 22961 22954 + 22954 22961 22955 + 22962 22958 22914 + 22963 22958 22962 + 22958 22963 22959 + 22964 22959 22963 + 22960 22959 22964 + 22914 22913 22962 + 22965 22962 22913 + 22963 22962 22965 + 22965 22966 22963 + 22963 22966 22964 + 22967 22964 22966 + 22964 22967 22968 + 22968 22969 22964 + 22964 22969 22960 + 22913 22918 22965 + 22918 22970 22965 + 22971 22965 22970 + 22965 22971 22966 + 22966 22971 22967 + 22972 22967 22971 + 22968 22967 22972 + 22973 22970 22918 + 22974 22970 22973 + 22970 22974 22971 + 22971 22974 22972 + 22975 22972 22974 + 22972 22975 22976 + 22976 22977 22972 + 22972 22977 22968 + 22918 22923 22973 + 22973 22923 22978 + 22978 22979 22973 + 22980 22973 22979 + 22973 22980 22974 + 22974 22980 22975 + 22975 22980 22981 + 22981 22982 22975 + 22976 22975 22982 + 22983 22978 22923 + 22978 22983 22984 + 22984 22985 22978 + 22978 22985 22986 + 22986 22979 22978 + 22981 22979 22986 + 22979 22981 22980 + 22923 22922 22983 + 22929 22983 22922 + 22984 22983 22929 + 22929 22987 22984 + 22984 22987 22988 + 22988 22989 22984 + 22985 22984 22989 + 22989 22990 22985 + 22986 22985 22990 + 22929 22991 22987 + 22991 22992 22987 + 22987 22992 22993 + 22993 22988 22987 + 22991 22929 22994 + 22994 22995 22991 + 22996 22991 22995 + 22992 22991 22996 + 22996 22997 22992 + 22992 22997 22998 + 22998 22993 22992 + 22999 22994 22929 + 23000 22994 22999 + 23000 22995 22994 + 22995 23000 23001 + 23001 23002 22995 + 22995 23002 22996 + 22928 22999 22929 + 23003 22999 22928 + 23003 23004 22999 + 22999 23004 23000 + 23000 23004 23005 + 23005 23001 23000 + 23006 23001 23005 + 23002 23001 23006 + 22928 22934 23003 + 23003 22934 23007 + 23007 23008 23003 + 23008 23009 23003 + 23009 23010 23003 + 23004 23003 23010 + 23010 23005 23004 + 23011 23005 23010 + 23005 23011 23006 + 22933 23007 22934 + 23012 23007 22933 + 23007 23012 23013 + 23013 23008 23007 + 23014 23008 23013 + 23008 23014 23015 + 23015 23009 23008 + 23012 22933 22932 + 22932 22939 23012 + 23012 22939 23013 + 22939 23016 23013 + 23014 23013 23016 + 23016 23017 23014 + 23014 23017 23018 + 23015 23014 23018 + 23018 23019 23015 + 23020 23015 23019 + 23015 23020 23009 + 22938 23016 22939 + 23017 23016 22938 + 22938 23021 23017 + 23021 23022 23017 + 23017 23022 23023 + 23023 23018 23017 + 23023 23024 23018 + 23018 23024 23019 + 23025 23021 22938 + 23021 23025 23026 + 23022 23021 23026 + 23026 23027 23022 + 23022 23027 23023 + 23027 23028 23023 + 23028 23029 23023 + 23023 23029 23024 + 22937 23025 22938 + 23030 23025 22937 + 23025 23030 23031 + 23031 23026 23025 + 23027 23026 23031 + 23028 23027 23031 + 23028 23031 23032 + 23028 23032 23029 + 23032 23033 23029 + 23033 23024 23029 + 22937 22943 23030 + 23030 22943 23034 + 23034 23035 23030 + 23031 23030 23035 + 23031 23035 23032 + 23032 23035 23034 + 23033 23032 23034 + 23034 23036 23033 + 23037 23033 23036 + 23024 23033 23037 + 23038 23024 23037 + 23024 23038 23019 + 22947 23034 22943 + 23036 23034 22947 + 22947 23039 23036 + 23040 23036 23039 + 23040 23037 23036 + 23040 23041 23037 + 23037 23041 23042 + 23042 23043 23037 + 23037 23043 23038 + 22947 22957 23039 + 23039 22957 23044 + 23044 23045 23039 + 23039 23045 23040 + 23041 23040 23045 + 23045 23046 23041 + 23042 23041 23046 + 23046 23047 23042 + 23048 23042 23047 + 23043 23042 23048 + 23044 22957 22956 + 23049 23044 22956 + 23046 23044 23049 + 23045 23044 23046 + 22956 23050 23049 + 23050 23051 23049 + 23052 23049 23051 + 23049 23052 23053 + 23053 23047 23049 + 23049 23047 23046 + 22955 23050 22956 + 22955 23054 23050 + 23050 23054 23055 + 23055 23051 23050 + 23056 23051 23055 + 23051 23056 23052 + 23057 23052 23056 + 23053 23052 23057 + 23054 22955 22961 + 22961 22960 23054 + 23055 23054 22960 + 22960 22969 23055 + 23058 23055 22969 + 23055 23058 23056 + 23056 23058 23059 + 23059 23060 23056 + 23056 23060 23057 + 23061 23057 23060 + 23057 23061 23062 + 23057 23062 23053 + 22969 22968 23058 + 23059 23058 22968 + 22968 22977 23059 + 23063 23059 22977 + 23059 23063 23064 + 23064 23060 23059 + 23060 23064 23061 + 23061 23064 23065 + 23065 23066 23061 + 23062 23061 23066 + 23066 23067 23062 + 23053 23062 23067 + 22977 22976 23063 + 23063 22976 23068 + 23068 23069 23063 + 23064 23063 23069 + 23069 23065 23064 + 23065 23069 23070 + 23070 23071 23065 + 23065 23071 23072 + 23072 23066 23065 + 23067 23066 23072 + 22982 23068 22976 + 23068 22982 23073 + 23073 23074 23068 + 23068 23074 23070 + 23070 23069 23068 + 23073 22982 22981 + 22981 23075 23073 + 23073 23075 23076 + 23076 23077 23073 + 23074 23073 23077 + 23077 23078 23074 + 23070 23074 23078 + 23078 23079 23070 + 23071 23070 23079 + 22986 23075 22981 + 23075 22986 23080 + 23080 23076 23075 + 23076 23080 23081 + 23081 23082 23076 + 23076 23082 23083 + 23083 23077 23076 + 23078 23077 23083 + 22990 23080 22986 + 23081 23080 22990 + 22990 23084 23081 + 23081 23084 23085 + 23085 23086 23081 + 23082 23081 23086 + 23086 23087 23082 + 23083 23082 23087 + 23088 23084 22990 + 23084 23088 23089 + 23089 23085 23084 + 23085 23089 23090 + 23090 23091 23085 + 23085 23091 23092 + 23092 23086 23085 + 23087 23086 23092 + 22990 22989 23088 + 23088 22989 22988 + 22988 23093 23088 + 23088 23093 23094 + 23094 23089 23088 + 23090 23089 23094 + 23094 23095 23090 + 23090 23095 23096 + 23096 23097 23090 + 23091 23090 23097 + 23098 23093 22988 + 23093 23098 23099 + 23099 23094 23093 + 23094 23099 23100 + 23100 23095 23094 + 23095 23100 23101 + 23101 23096 23095 + 22988 22993 23098 + 23098 22993 22998 + 22998 23102 23098 + 23098 23102 23103 + 23103 23099 23098 + 23100 23099 23103 + 23103 23104 23100 + 23100 23104 23105 + 23105 23101 23100 + 23106 23101 23105 + 23096 23101 23106 + 23107 23102 22998 + 23102 23107 23108 + 23108 23103 23102 + 23103 23108 23109 + 23109 23104 23103 + 23104 23109 23110 + 23110 23105 23104 + 22998 23111 23107 + 23107 23111 23112 + 23112 23113 23107 + 23107 23113 23114 + 23114 23108 23107 + 23109 23108 23114 + 23111 22998 22997 + 22997 23115 23111 + 23112 23111 23115 + 23115 23116 23112 + 23117 23112 23116 + 23112 23117 23118 + 23118 23113 23112 + 23113 23118 23119 + 23119 23114 23113 + 23115 22997 22996 + 22996 23120 23115 + 23115 23120 23121 + 23121 23116 23115 + 23122 23116 23121 + 23116 23122 23117 + 23123 23117 23122 + 23118 23117 23123 + 23120 22996 23002 + 23002 23124 23120 + 23120 23124 23125 + 23125 23121 23120 + 23126 23121 23125 + 23121 23126 23122 + 23122 23126 23067 + 23067 23127 23122 + 23122 23127 23123 + 23006 23124 23002 + 23124 23006 23128 + 23128 23129 23124 + 23124 23129 23125 + 23130 23125 23129 + 23125 23130 23131 + 23125 23131 23126 + 23067 23126 23131 + 23131 23048 23067 + 23048 23053 23067 + 23132 23128 23006 + 23133 23128 23132 + 23128 23133 23134 + 23134 23129 23128 + 23129 23134 23130 + 23134 23135 23130 + 23131 23130 23135 + 23135 23048 23131 + 23048 23135 23043 + 23020 23132 23006 + 23019 23132 23020 + 23038 23132 23019 + 23132 23038 23133 + 23043 23133 23038 + 23134 23133 23043 + 23043 23135 23134 + 23006 23011 23020 + 23009 23020 23011 + 23011 23010 23009 + 23047 23053 23048 + 23072 23127 23067 + 23127 23072 23136 + 23136 23123 23127 + 23123 23136 23137 + 23137 23138 23123 + 23123 23138 23118 + 23139 23136 23072 + 23137 23136 23139 + 23139 23140 23137 + 23137 23140 23141 + 23141 23142 23137 + 23138 23137 23142 + 23142 23143 23138 + 23118 23138 23143 + 23143 23119 23118 + 23072 23071 23139 + 23079 23139 23071 + 23139 23079 23144 + 23144 23140 23139 + 23140 23144 23145 + 23145 23141 23140 + 23141 23145 23146 + 23146 23147 23141 + 23141 23147 23148 + 23148 23142 23141 + 23143 23142 23148 + 23144 23079 23078 + 23078 23149 23144 + 23144 23149 23150 + 23150 23145 23144 + 23146 23145 23150 + 23150 23151 23146 + 23146 23151 23152 + 23152 23153 23146 + 23147 23146 23153 + 23083 23149 23078 + 23149 23083 23154 + 23154 23150 23149 + 23150 23154 23155 + 23155 23151 23150 + 23151 23155 23156 + 23156 23152 23151 + 23087 23154 23083 + 23155 23154 23087 + 23087 23157 23155 + 23155 23157 23158 + 23158 23156 23155 + 23159 23156 23158 + 23152 23156 23159 + 23159 23160 23152 + 23152 23160 23161 + 23161 23153 23152 + 23092 23157 23087 + 23157 23092 23162 + 23162 23158 23157 + 23158 23162 23163 + 23163 23164 23158 + 23158 23164 23159 + 23159 23164 23165 + 23165 23166 23159 + 23160 23159 23166 + 23167 23162 23092 + 23163 23162 23167 + 23167 23168 23163 + 23163 23168 23169 + 23164 23163 23169 + 23169 23165 23164 + 23165 23169 23170 + 23170 23171 23165 + 23165 23171 23166 + 23092 23091 23167 + 23097 23167 23091 + 23167 23097 23172 + 23172 23168 23167 + 23168 23172 23169 + 23172 23170 23169 + 23172 23173 23170 + 23173 23106 23170 + 23106 23174 23170 + 23170 23174 23171 + 23172 23097 23096 + 23096 23173 23172 + 23106 23173 23096 + 23175 23171 23174 + 23171 23175 23176 + 23177 23171 23176 + 23171 23177 23166 + 23178 23166 23177 + 23178 23179 23166 + 23166 23179 23160 + 23180 23175 23174 + 23175 23180 23105 + 23105 23110 23175 + 23175 23110 23181 + 23181 23176 23175 + 23182 23176 23181 + 23176 23182 23177 + 23106 23180 23174 + 23105 23180 23106 + 23181 23110 23109 + 23109 23183 23181 + 23184 23181 23183 + 23181 23184 23182 + 23182 23184 23185 + 23185 23186 23182 + 23182 23186 23187 + 23182 23187 23177 + 23177 23187 23178 + 23114 23183 23109 + 23188 23183 23114 + 23183 23188 23184 + 23185 23184 23188 + 23188 23189 23185 + 23190 23185 23189 + 23185 23190 23191 + 23191 23186 23185 + 23186 23191 23178 + 23178 23187 23186 + 23114 23119 23188 + 23188 23119 23143 + 23143 23189 23188 + 23148 23189 23143 + 23189 23148 23190 + 23192 23190 23148 + 23191 23190 23192 + 23192 23193 23191 + 23191 23193 23178 + 23179 23178 23193 + 23193 23161 23179 + 23161 23160 23179 + 23148 23147 23192 + 23153 23192 23147 + 23192 23153 23161 + 23161 23193 23192 + 23194 23195 23196 + 23194 23197 23195 + 23198 23195 23197 + 23199 23194 23196 + 23194 23199 23200 + 23200 23201 23194 + 23194 23201 23202 + 23202 23197 23194 + 23203 23197 23202 + 23197 23203 23198 + 23204 23199 23196 + 23200 23199 23204 + 23204 23205 23200 + 23200 23205 23206 + 23206 23207 23200 + 23201 23200 23207 + 23207 23208 23201 + 23202 23201 23208 + 23204 23196 23209 + 23210 23204 23209 + 23204 23210 23211 + 23211 23205 23204 + 23205 23211 23212 + 23212 23206 23205 + 23209 23196 23213 + 23213 23214 23209 + 23214 23215 23209 + 23216 23209 23215 + 23216 23210 23209 + 23211 23210 23216 + 23216 23217 23211 + 23211 23217 23212 + 23196 23218 23213 + 23218 23198 23213 + 23198 23219 23213 + 23213 23219 23220 + 23220 23221 23213 + 23221 23222 23213 + 23214 23213 23222 + 23219 23198 23223 + 23223 23224 23219 + 23224 23220 23219 + 23224 23225 23220 + 23225 23226 23220 + 23221 23220 23226 + 23203 23223 23198 + 23227 23223 23203 + 23224 23223 23227 + 23227 23225 23224 + 23225 23227 23228 + 23228 23229 23225 + 23226 23225 23229 + 23229 23230 23226 + 23231 23226 23230 + 23226 23231 23221 + 23203 23232 23227 + 23227 23232 23233 + 23233 23228 23227 + 23234 23228 23233 + 23229 23228 23234 + 23234 23235 23229 + 23229 23235 23236 + 23236 23230 23229 + 23202 23232 23203 + 23232 23202 23237 + 23237 23233 23232 + 23233 23237 23238 + 23238 23239 23233 + 23233 23239 23234 + 23234 23239 23240 + 23240 23241 23234 + 23235 23234 23241 + 23208 23237 23202 + 23238 23237 23208 + 23208 23242 23238 + 23238 23242 23243 + 23243 23244 23238 + 23239 23238 23244 + 23244 23240 23239 + 23245 23242 23208 + 23242 23245 23246 + 23246 23243 23242 + 23243 23246 23247 + 23247 23248 23243 + 23243 23248 23249 + 23249 23244 23243 + 23240 23244 23249 + 23208 23207 23245 + 23245 23207 23206 + 23206 23250 23245 + 23245 23250 23251 + 23251 23246 23245 + 23247 23246 23251 + 23251 23252 23247 + 23247 23252 23253 + 23253 23254 23247 + 23248 23247 23254 + 23255 23250 23206 + 23250 23255 23256 + 23256 23251 23250 + 23251 23256 23257 + 23257 23252 23251 + 23252 23257 23258 + 23258 23253 23252 + 23206 23212 23255 + 23255 23212 23259 + 23259 23260 23255 + 23255 23260 23261 + 23261 23256 23255 + 23257 23256 23261 + 23261 23262 23257 + 23257 23262 23263 + 23263 23258 23257 + 23217 23259 23212 + 23264 23259 23217 + 23259 23264 23265 + 23265 23260 23259 + 23260 23265 23266 + 23266 23261 23260 + 23261 23266 23267 + 23267 23262 23261 + 23262 23267 23268 + 23268 23263 23262 + 23217 23269 23264 + 23270 23264 23269 + 23265 23264 23270 + 23270 23271 23265 + 23265 23271 23272 + 23272 23266 23265 + 23267 23266 23272 + 23269 23217 23216 + 23216 23273 23269 + 23269 23273 23274 + 23274 23275 23269 + 23269 23275 23270 + 23276 23270 23275 + 23270 23276 23277 + 23277 23271 23270 + 23273 23216 23215 + 23274 23273 23215 + 23274 23215 23214 + 23278 23274 23214 + 23274 23278 23279 + 23279 23275 23274 + 23275 23279 23276 + 23280 23276 23279 + 23277 23276 23280 + 23214 23281 23278 + 23279 23278 23281 + 23281 23282 23279 + 23279 23282 23280 + 23283 23280 23282 + 23280 23283 23284 + 23284 23285 23280 + 23280 23285 23277 + 23222 23281 23214 + 23281 23222 23286 + 23286 23282 23281 + 23282 23286 23283 + 23287 23283 23286 + 23284 23283 23287 + 23287 23288 23284 + 23284 23288 23289 + 23289 23290 23284 + 23285 23284 23290 + 23286 23222 23221 + 23221 23231 23286 + 23286 23231 23287 + 23230 23287 23231 + 23287 23230 23236 + 23236 23288 23287 + 23288 23236 23291 + 23291 23289 23288 + 23289 23291 23292 + 23292 23293 23289 + 23289 23293 23294 + 23294 23290 23289 + 23295 23290 23294 + 23290 23295 23285 + 23277 23285 23295 + 23296 23291 23236 + 23292 23291 23296 + 23296 23297 23292 + 23292 23297 23298 + 23298 23299 23292 + 23293 23292 23299 + 23299 23300 23293 + 23294 23293 23300 + 23236 23235 23296 + 23241 23296 23235 + 23296 23241 23301 + 23301 23297 23296 + 23297 23301 23302 + 23302 23298 23297 + 23298 23302 23303 + 23303 23304 23298 + 23298 23304 23305 + 23305 23299 23298 + 23301 23241 23240 + 23240 23306 23301 + 23301 23306 23307 + 23307 23302 23301 + 23303 23302 23307 + 23307 23308 23303 + 23303 23308 23309 + 23309 23310 23303 + 23304 23303 23310 + 23249 23306 23240 + 23306 23249 23311 + 23311 23307 23306 + 23307 23311 23312 + 23312 23308 23307 + 23308 23312 23313 + 23313 23314 23308 + 23308 23314 23309 + 23315 23311 23249 + 23312 23311 23315 + 23315 23316 23312 + 23312 23316 23317 + 23317 23313 23312 + 23318 23313 23317 + 23313 23318 23319 + 23319 23314 23313 + 23249 23248 23315 + 23254 23315 23248 + 23315 23254 23320 + 23320 23316 23315 + 23316 23320 23321 + 23321 23317 23316 + 23322 23317 23321 + 23317 23322 23318 + 23323 23318 23322 + 23319 23318 23323 + 23320 23254 23253 + 23253 23324 23320 + 23321 23320 23324 + 23324 23325 23321 + 23326 23321 23325 + 23321 23326 23322 + 23322 23326 23327 + 23327 23328 23322 + 23322 23328 23323 + 23329 23324 23253 + 23324 23329 23330 + 23330 23325 23324 + 23330 23331 23325 + 23325 23331 23326 + 23327 23326 23331 + 23253 23258 23329 + 23332 23329 23258 + 23330 23329 23332 + 23330 23332 23333 + 23331 23330 23333 + 23333 23334 23331 + 23331 23334 23327 + 23263 23332 23258 + 23335 23332 23263 + 23332 23335 23336 + 23336 23333 23332 + 23334 23333 23336 + 23336 23337 23334 + 23334 23337 23338 + 23338 23339 23334 + 23334 23339 23327 + 23263 23268 23335 + 23340 23335 23268 + 23335 23340 23341 + 23341 23336 23335 + 23337 23336 23341 + 23341 23342 23337 + 23338 23337 23342 + 23343 23338 23342 + 23344 23338 23343 + 23338 23344 23339 + 23345 23340 23268 + 23346 23340 23345 + 23340 23346 23347 + 23347 23341 23340 + 23341 23347 23342 + 23345 23268 23267 + 23267 23348 23345 + 23349 23345 23348 + 23345 23349 23346 + 23346 23349 23350 + 23350 23351 23346 + 23347 23346 23351 + 23272 23348 23267 + 23352 23348 23272 + 23348 23352 23349 + 23350 23349 23352 + 23352 23353 23350 + 23354 23350 23353 + 23350 23354 23355 + 23355 23351 23350 + 23272 23356 23352 + 23352 23356 23295 + 23295 23353 23352 + 23294 23353 23295 + 23353 23294 23354 + 23300 23354 23294 + 23355 23354 23300 + 23356 23272 23271 + 23271 23277 23356 + 23295 23356 23277 + 23300 23357 23355 + 23357 23300 23299 + 23305 23357 23299 + 23357 23305 23358 + 23358 23359 23357 + 23357 23359 23360 + 23360 23355 23357 + 23351 23355 23360 + 23360 23361 23351 + 23351 23361 23347 + 23361 23362 23347 + 23342 23347 23362 + 23363 23358 23305 + 23364 23358 23363 + 23358 23364 23365 + 23365 23359 23358 + 23359 23365 23366 + 23366 23360 23359 + 23361 23360 23366 + 23361 23366 23367 + 23367 23362 23361 + 23305 23304 23363 + 23310 23363 23304 + 23363 23310 23368 + 23368 23369 23363 + 23363 23369 23364 + 23370 23364 23369 + 23365 23364 23370 + 23368 23310 23309 + 23309 23371 23368 + 23368 23371 23372 + 23372 23373 23368 + 23369 23368 23373 + 23373 23374 23369 + 23369 23374 23370 + 23309 23375 23371 + 23371 23375 23376 + 23376 23377 23371 + 23371 23377 23372 + 23375 23309 23314 + 23314 23319 23375 + 23376 23375 23319 + 23319 23378 23376 + 23378 23379 23376 + 23380 23376 23379 + 23377 23376 23380 + 23377 23380 23381 + 23377 23381 23372 + 23323 23378 23319 + 23378 23323 23382 + 23378 23382 23383 + 23383 23379 23378 + 23384 23379 23383 + 23379 23384 23380 + 23380 23384 23385 + 23385 23386 23380 + 23380 23386 23381 + 23382 23323 23387 + 23387 23388 23382 + 23383 23382 23388 + 23388 23389 23383 + 23390 23383 23389 + 23383 23390 23384 + 23384 23390 23391 + 23391 23385 23384 + 23328 23387 23323 + 23392 23387 23328 + 23387 23392 23388 + 23389 23388 23392 + 23393 23389 23392 + 23389 23393 23394 + 23389 23394 23390 + 23391 23390 23394 + 23395 23391 23394 + 23396 23391 23395 + 23385 23391 23396 + 23328 23397 23392 + 23393 23392 23397 + 23398 23393 23397 + 23398 23399 23393 + 23399 23394 23393 + 23394 23399 23395 + 23400 23395 23399 + 23395 23400 23401 + 23395 23401 23396 + 23328 23327 23397 + 23397 23327 23402 + 23402 23403 23397 + 23398 23397 23403 + 23398 23403 23404 + 23405 23398 23404 + 23399 23398 23405 + 23399 23405 23400 + 23406 23400 23405 + 23401 23400 23406 + 23339 23402 23327 + 23407 23402 23339 + 23403 23402 23407 + 23407 23404 23403 + 23408 23404 23407 + 23405 23404 23408 + 23408 23406 23405 + 23409 23406 23408 + 23409 23410 23406 + 23406 23410 23401 + 23396 23401 23410 + 23411 23396 23410 + 23385 23396 23411 + 23339 23344 23407 + 23407 23344 23412 + 23412 23413 23407 + 23413 23414 23407 + 23414 23408 23407 + 23408 23414 23415 + 23408 23415 23409 + 23343 23412 23344 + 23416 23412 23343 + 23412 23416 23413 + 23416 23417 23413 + 23413 23417 23418 + 23413 23418 23415 + 23415 23414 23413 + 23416 23343 23419 + 23419 23420 23416 + 23417 23416 23420 + 23420 23421 23417 + 23421 23422 23417 + 23418 23417 23422 + 23422 23423 23418 + 23415 23418 23423 + 23409 23415 23423 + 23419 23343 23342 + 23342 23424 23419 + 23425 23419 23424 + 23420 23419 23425 + 23425 23426 23420 + 23420 23426 23427 + 23427 23421 23420 + 23362 23424 23342 + 23367 23424 23362 + 23424 23367 23425 + 23425 23367 23365 + 23365 23428 23425 + 23426 23425 23428 + 23428 23429 23426 + 23427 23426 23429 + 23429 23430 23427 + 23431 23427 23430 + 23421 23427 23431 + 23367 23366 23365 + 23370 23428 23365 + 23429 23428 23370 + 23370 23432 23429 + 23429 23432 23433 + 23433 23430 23429 + 23430 23433 23434 + 23430 23434 23431 + 23435 23431 23434 + 23421 23431 23435 + 23435 23422 23421 + 23422 23435 23423 + 23432 23370 23374 + 23374 23436 23432 + 23436 23437 23432 + 23437 23433 23432 + 23437 23438 23433 + 23438 23434 23433 + 23434 23438 23439 + 23439 23435 23434 + 23423 23435 23439 + 23439 23440 23423 + 23423 23440 23409 + 23374 23373 23436 + 23436 23373 23372 + 23372 23437 23436 + 23437 23372 23441 + 23438 23437 23441 + 23438 23441 23442 + 23442 23439 23438 + 23442 23440 23439 + 23440 23442 23410 + 23410 23409 23440 + 23441 23372 23381 + 23381 23411 23441 + 23442 23441 23411 + 23410 23442 23411 + 23386 23411 23381 + 23411 23386 23385 + 23443 23444 23445 + 23444 23443 23446 + 23444 23446 23447 + 23444 23447 23448 + 23449 23444 23448 + 23450 23443 23445 + 23443 23450 23451 + 23443 23451 23452 + 23443 23452 23446 + 23446 23452 23453 + 23446 23453 23454 + 23454 23447 23446 + 23448 23447 23454 + 23455 23450 23445 + 23450 23455 23456 + 23450 23456 23457 + 23450 23457 23451 + 23451 23457 23458 + 23451 23458 23459 + 23459 23452 23451 + 23452 23459 23453 + 23460 23455 23445 + 23455 23460 23461 + 23461 23462 23455 + 23462 23463 23455 + 23455 23463 23456 + 23445 23464 23460 + 23464 23465 23460 + 23460 23465 23466 + 23466 23467 23460 + 23460 23467 23461 + 23468 23461 23467 + 23462 23461 23468 + 23465 23464 23469 + 23469 23470 23465 + 23465 23470 23466 + 23470 23471 23466 + 23471 23472 23466 + 23467 23466 23472 + 23472 23473 23467 + 23467 23473 23468 + 23464 23474 23469 + 23475 23469 23474 + 23470 23469 23475 + 23475 23471 23470 + 23471 23475 23476 + 23476 23477 23471 + 23472 23471 23477 + 23477 23478 23472 + 23473 23472 23478 + 23479 23474 23464 + 23474 23479 23480 + 23480 23481 23474 + 23474 23481 23475 + 23475 23481 23482 + 23482 23476 23475 + 23483 23476 23482 + 23477 23476 23483 + 23464 23449 23479 + 23449 23448 23479 + 23480 23479 23448 + 23448 23484 23480 + 23480 23484 23485 + 23485 23486 23480 + 23481 23480 23486 + 23486 23482 23481 + 23482 23486 23487 + 23487 23488 23482 + 23482 23488 23483 + 23454 23484 23448 + 23484 23454 23489 + 23489 23485 23484 + 23485 23489 23490 + 23490 23491 23485 + 23485 23491 23487 + 23487 23486 23485 + 23492 23489 23454 + 23490 23489 23492 + 23492 23493 23490 + 23490 23493 23494 + 23494 23495 23490 + 23491 23490 23495 + 23495 23496 23491 + 23487 23491 23496 + 23454 23453 23492 + 23497 23492 23453 + 23492 23497 23498 + 23498 23493 23492 + 23493 23498 23499 + 23499 23494 23493 + 23453 23459 23497 + 23459 23458 23497 + 23458 23500 23497 + 23498 23497 23500 + 23500 23501 23498 + 23498 23501 23502 + 23502 23499 23498 + 23503 23499 23502 + 23494 23499 23503 + 23504 23500 23458 + 23500 23504 23505 + 23505 23501 23500 + 23501 23505 23506 + 23506 23502 23501 + 23502 23506 23507 + 23507 23508 23502 + 23502 23508 23503 + 23458 23509 23504 + 23510 23504 23509 + 23505 23504 23510 + 23510 23511 23505 + 23505 23511 23512 + 23512 23506 23505 + 23507 23506 23512 + 23457 23509 23458 + 23509 23457 23456 + 23456 23513 23509 + 23509 23513 23510 + 23514 23510 23513 + 23510 23514 23515 + 23515 23511 23510 + 23511 23515 23516 + 23516 23512 23511 + 23456 23463 23513 + 23463 23517 23513 + 23513 23517 23514 + 23518 23514 23517 + 23515 23514 23518 + 23518 23519 23515 + 23515 23519 23520 + 23520 23516 23515 + 23521 23516 23520 + 23512 23516 23521 + 23517 23463 23462 + 23462 23522 23517 + 23517 23522 23518 + 23523 23518 23522 + 23518 23523 23524 + 23524 23519 23518 + 23519 23524 23525 + 23525 23520 23519 + 23468 23522 23462 + 23522 23468 23523 + 23526 23523 23468 + 23524 23523 23526 + 23526 23527 23524 + 23524 23527 23528 + 23528 23525 23524 + 23529 23525 23528 + 23520 23525 23529 + 23529 23530 23520 + 23520 23530 23521 + 23468 23473 23526 + 23478 23526 23473 + 23526 23478 23531 + 23531 23527 23526 + 23527 23531 23532 + 23532 23528 23527 + 23528 23532 23533 + 23533 23534 23528 + 23528 23534 23529 + 23531 23478 23477 + 23477 23535 23531 + 23531 23535 23536 + 23536 23532 23531 + 23533 23532 23536 + 23536 23537 23533 + 23538 23533 23537 + 23538 23539 23533 + 23539 23534 23533 + 23529 23534 23539 + 23483 23535 23477 + 23535 23483 23540 + 23540 23536 23535 + 23536 23540 23541 + 23541 23537 23536 + 23542 23537 23541 + 23542 23538 23537 + 23543 23538 23542 + 23538 23543 23544 + 23539 23538 23544 + 23545 23540 23483 + 23541 23540 23545 + 23545 23546 23541 + 23541 23546 23547 + 23547 23548 23541 + 23548 23542 23541 + 23542 23548 23549 + 23542 23549 23543 + 23483 23488 23545 + 23550 23545 23488 + 23545 23550 23551 + 23551 23546 23545 + 23546 23551 23552 + 23552 23547 23546 + 23547 23552 23553 + 23553 23554 23547 + 23547 23554 23548 + 23488 23487 23550 + 23496 23550 23487 + 23551 23550 23496 + 23496 23555 23551 + 23551 23555 23556 + 23556 23552 23551 + 23553 23552 23556 + 23556 23557 23553 + 23553 23557 23558 + 23558 23559 23553 + 23554 23553 23559 + 23560 23555 23496 + 23555 23560 23561 + 23561 23556 23555 + 23556 23561 23562 + 23562 23557 23556 + 23557 23562 23563 + 23563 23558 23557 + 23496 23495 23560 + 23560 23495 23494 + 23494 23564 23560 + 23560 23564 23565 + 23565 23561 23560 + 23562 23561 23565 + 23565 23566 23562 + 23563 23562 23566 + 23503 23564 23494 + 23564 23503 23567 + 23567 23565 23564 + 23565 23567 23566 + 23567 23568 23566 + 23566 23568 23569 + 23569 23570 23566 + 23566 23570 23563 + 23571 23567 23503 + 23571 23572 23567 + 23572 23568 23567 + 23568 23572 23573 + 23573 23569 23568 + 23574 23569 23573 + 23570 23569 23574 + 23503 23508 23571 + 23575 23571 23508 + 23571 23575 23576 + 23576 23572 23571 + 23572 23576 23577 + 23577 23573 23572 + 23578 23573 23577 + 23573 23578 23574 + 23508 23507 23575 + 23579 23575 23507 + 23579 23580 23575 + 23580 23576 23575 + 23577 23576 23580 + 23580 23581 23577 + 23582 23577 23581 + 23577 23582 23578 + 23507 23583 23579 + 23584 23579 23583 + 23579 23584 23585 + 23585 23580 23579 + 23580 23585 23586 + 23586 23581 23580 + 23587 23581 23586 + 23581 23587 23582 + 23512 23583 23507 + 23521 23583 23512 + 23583 23521 23584 + 23588 23584 23521 + 23585 23584 23588 + 23588 23589 23585 + 23585 23589 23590 + 23590 23586 23585 + 23587 23586 23590 + 23521 23530 23588 + 23591 23588 23530 + 23588 23591 23592 + 23592 23589 23588 + 23589 23592 23593 + 23593 23594 23589 + 23589 23594 23590 + 23530 23529 23591 + 23539 23591 23529 + 23592 23591 23539 + 23539 23544 23592 + 23592 23544 23595 + 23595 23593 23592 + 23596 23593 23595 + 23596 23594 23593 + 23594 23596 23597 + 23597 23590 23594 + 23590 23597 23598 + 23590 23598 23587 + 23599 23595 23544 + 23600 23595 23599 + 23595 23600 23596 + 23597 23596 23600 + 23601 23597 23600 + 23598 23597 23601 + 23601 23602 23598 + 23587 23598 23602 + 23602 23603 23587 + 23603 23582 23587 + 23544 23543 23599 + 23599 23543 23549 + 23549 23604 23599 + 23605 23599 23604 + 23599 23605 23600 + 23600 23605 23606 + 23606 23607 23600 + 23600 23607 23601 + 23604 23549 23608 + 23609 23604 23608 + 23609 23610 23604 + 23604 23610 23605 + 23605 23610 23611 + 23611 23606 23605 + 23612 23606 23611 + 23606 23612 23607 + 23548 23608 23549 + 23554 23608 23548 + 23609 23608 23554 + 23554 23613 23609 + 23610 23609 23613 + 23613 23614 23610 + 23610 23614 23611 + 23559 23613 23554 + 23614 23613 23559 + 23559 23615 23614 + 23614 23615 23616 + 23616 23617 23614 + 23614 23617 23611 + 23615 23559 23558 + 23558 23618 23615 + 23616 23615 23618 + 23619 23616 23618 + 23620 23616 23619 + 23620 23617 23616 + 23617 23620 23621 + 23621 23611 23617 + 23618 23558 23563 + 23563 23622 23618 + 23618 23622 23623 + 23623 23624 23618 + 23618 23624 23619 + 23625 23619 23624 + 23625 23626 23619 + 23619 23626 23620 + 23621 23620 23626 + 23622 23563 23627 + 23627 23628 23622 + 23623 23622 23628 + 23629 23623 23628 + 23630 23623 23629 + 23630 23624 23623 + 23624 23630 23625 + 23631 23625 23630 + 23626 23625 23631 + 23570 23627 23563 + 23632 23627 23570 + 23632 23628 23627 + 23628 23632 23633 + 23633 23634 23628 + 23628 23634 23629 + 23570 23635 23632 + 23632 23635 23636 + 23637 23632 23636 + 23637 23633 23632 + 23638 23633 23637 + 23638 23634 23633 + 23634 23638 23639 + 23639 23629 23634 + 23574 23635 23570 + 23635 23574 23640 + 23640 23636 23635 + 23641 23636 23640 + 23636 23641 23642 + 23642 23643 23636 + 23636 23643 23637 + 23640 23574 23578 + 23578 23644 23640 + 23641 23640 23644 + 23644 23645 23641 + 23642 23641 23645 + 23645 23646 23642 + 23647 23642 23646 + 23642 23647 23648 + 23648 23643 23642 + 23603 23644 23578 + 23645 23644 23603 + 23603 23649 23645 + 23645 23649 23650 + 23650 23646 23645 + 23651 23646 23650 + 23646 23651 23647 + 23578 23582 23603 + 23649 23603 23602 + 23602 23652 23649 + 23650 23649 23652 + 23652 23653 23650 + 23653 23654 23650 + 23654 23651 23650 + 23647 23651 23654 + 23655 23647 23654 + 23648 23647 23655 + 23652 23602 23601 + 23601 23656 23652 + 23652 23656 23657 + 23657 23653 23652 + 23654 23653 23657 + 23654 23657 23658 + 23658 23659 23654 + 23654 23659 23655 + 23656 23601 23660 + 23660 23661 23656 + 23656 23661 23658 + 23658 23657 23656 + 23607 23660 23601 + 23662 23660 23607 + 23660 23662 23661 + 23661 23662 23663 + 23663 23664 23661 + 23661 23664 23658 + 23664 23665 23658 + 23665 23666 23658 + 23666 23659 23658 + 23607 23612 23662 + 23662 23612 23667 + 23667 23663 23662 + 23663 23667 23668 + 23665 23663 23668 + 23665 23664 23663 + 23612 23669 23667 + 23670 23667 23669 + 23668 23667 23670 + 23668 23670 23671 + 23671 23672 23668 + 23665 23668 23672 + 23665 23672 23673 + 23673 23666 23665 + 23659 23666 23673 + 23673 23655 23659 + 23611 23669 23612 + 23674 23669 23611 + 23669 23674 23670 + 23674 23675 23670 + 23675 23676 23670 + 23676 23671 23670 + 23677 23671 23676 + 23671 23677 23672 + 23672 23677 23678 + 23678 23673 23672 + 23655 23673 23678 + 23611 23621 23674 + 23674 23621 23679 + 23679 23675 23674 + 23675 23679 23680 + 23675 23680 23681 + 23681 23676 23675 + 23682 23676 23681 + 23676 23682 23677 + 23678 23677 23682 + 23648 23678 23682 + 23655 23678 23648 + 23683 23679 23621 + 23680 23679 23683 + 23683 23684 23680 + 23680 23684 23685 + 23685 23686 23680 + 23686 23681 23680 + 23682 23681 23686 + 23686 23687 23682 + 23682 23687 23648 + 23626 23683 23621 + 23631 23683 23626 + 23684 23683 23631 + 23684 23631 23688 + 23688 23685 23684 + 23685 23688 23629 + 23629 23639 23685 + 23685 23639 23689 + 23689 23686 23685 + 23687 23686 23689 + 23690 23687 23689 + 23687 23690 23648 + 23643 23648 23690 + 23630 23688 23631 + 23629 23688 23630 + 23690 23637 23643 + 23637 23690 23691 + 23637 23691 23638 + 23691 23639 23638 + 23691 23689 23639 + 23691 23690 23689 + 23692 23693 23694 + 23693 23695 23694 + 23696 23694 23695 + 23697 23694 23696 + 23694 23697 23692 + 23697 23698 23692 + 23699 23692 23698 + 23700 23692 23699 + 23695 23693 23701 + 23702 23695 23701 + 23695 23702 23703 + 23703 23704 23695 + 23695 23704 23696 + 23705 23702 23701 + 23703 23702 23705 + 23705 23706 23703 + 23703 23706 23707 + 23707 23708 23703 + 23704 23703 23708 + 23708 23709 23704 + 23696 23704 23709 + 23705 23701 23710 + 23711 23705 23710 + 23705 23711 23712 + 23712 23706 23705 + 23706 23712 23713 + 23713 23707 23706 + 23710 23701 23699 + 23699 23714 23710 + 23714 23715 23710 + 23715 23716 23710 + 23716 23717 23710 + 23718 23710 23717 + 23718 23711 23710 + 23701 23700 23699 + 23712 23711 23718 + 23718 23719 23712 + 23712 23719 23720 + 23720 23713 23712 + 23721 23713 23720 + 23707 23713 23721 + 23721 23722 23707 + 23707 23722 23723 + 23723 23708 23707 + 23709 23708 23723 + 23724 23719 23718 + 23719 23724 23725 + 23725 23720 23719 + 23720 23725 23726 + 23726 23727 23720 + 23720 23727 23721 + 23718 23728 23724 + 23724 23728 23729 + 23729 23730 23724 + 23724 23730 23731 + 23731 23725 23724 + 23726 23725 23731 + 23728 23718 23717 + 23729 23728 23717 + 23729 23717 23716 + 23732 23729 23716 + 23729 23732 23733 + 23733 23730 23729 + 23730 23733 23734 + 23734 23731 23730 + 23731 23734 23735 + 23735 23736 23731 + 23731 23736 23726 + 23737 23732 23716 + 23733 23732 23737 + 23737 23738 23733 + 23733 23738 23739 + 23739 23734 23733 + 23735 23734 23739 + 23740 23737 23716 + 23737 23740 23741 + 23741 23738 23737 + 23738 23741 23742 + 23742 23739 23738 + 23739 23742 23743 + 23743 23744 23739 + 23739 23744 23735 + 23716 23715 23740 + 23745 23740 23715 + 23741 23740 23745 + 23745 23746 23741 + 23741 23746 23747 + 23747 23742 23741 + 23743 23742 23747 + 23748 23745 23715 + 23745 23748 23749 + 23749 23746 23745 + 23746 23749 23750 + 23750 23747 23746 + 23747 23750 23751 + 23751 23752 23747 + 23747 23752 23743 + 23715 23714 23748 + 23753 23748 23714 + 23749 23748 23753 + 23753 23754 23749 + 23749 23754 23755 + 23755 23750 23749 + 23751 23750 23755 + 23756 23753 23714 + 23753 23756 23757 + 23757 23754 23753 + 23754 23757 23758 + 23758 23755 23754 + 23755 23758 23759 + 23759 23760 23755 + 23755 23760 23751 + 23714 23699 23756 + 23761 23756 23699 + 23757 23756 23761 + 23761 23762 23757 + 23757 23762 23763 + 23763 23758 23757 + 23759 23758 23763 + 23698 23761 23699 + 23761 23698 23764 + 23764 23762 23761 + 23762 23764 23765 + 23765 23763 23762 + 23763 23765 23766 + 23766 23767 23763 + 23763 23767 23759 + 23764 23698 23697 + 23697 23768 23764 + 23764 23768 23769 + 23769 23765 23764 + 23766 23765 23769 + 23769 23770 23766 + 23766 23770 23771 + 23771 23772 23766 + 23767 23766 23772 + 23696 23768 23697 + 23768 23696 23773 + 23773 23769 23768 + 23769 23773 23774 + 23774 23770 23769 + 23770 23774 23775 + 23775 23771 23770 + 23709 23773 23696 + 23774 23773 23709 + 23709 23776 23774 + 23774 23776 23777 + 23777 23775 23774 + 23778 23775 23777 + 23771 23775 23778 + 23778 23779 23771 + 23771 23779 23780 + 23780 23772 23771 + 23723 23776 23709 + 23776 23723 23781 + 23781 23777 23776 + 23777 23781 23782 + 23782 23783 23777 + 23777 23783 23778 + 23778 23783 23784 + 23784 23785 23778 + 23779 23778 23785 + 23786 23781 23723 + 23782 23781 23786 + 23786 23787 23782 + 23782 23787 23788 + 23788 23789 23782 + 23783 23782 23789 + 23789 23784 23783 + 23723 23722 23786 + 23790 23786 23722 + 23786 23790 23791 + 23791 23787 23786 + 23787 23791 23792 + 23792 23788 23787 + 23722 23721 23790 + 23793 23790 23721 + 23791 23790 23793 + 23793 23794 23791 + 23791 23794 23795 + 23795 23792 23791 + 23796 23792 23795 + 23788 23792 23796 + 23721 23727 23793 + 23797 23793 23727 + 23793 23797 23798 + 23798 23794 23793 + 23794 23798 23799 + 23799 23795 23794 + 23795 23799 23800 + 23800 23801 23795 + 23795 23801 23796 + 23727 23726 23797 + 23802 23797 23726 + 23798 23797 23802 + 23802 23803 23798 + 23798 23803 23804 + 23804 23799 23798 + 23800 23799 23804 + 23726 23736 23802 + 23805 23802 23736 + 23802 23805 23806 + 23806 23803 23802 + 23803 23806 23807 + 23807 23804 23803 + 23804 23807 23808 + 23808 23809 23804 + 23804 23809 23800 + 23736 23735 23805 + 23810 23805 23735 + 23806 23805 23810 + 23810 23811 23806 + 23806 23811 23812 + 23812 23807 23806 + 23808 23807 23812 + 23735 23744 23810 + 23813 23810 23744 + 23810 23813 23814 + 23814 23811 23810 + 23811 23814 23815 + 23815 23812 23811 + 23812 23815 23816 + 23816 23817 23812 + 23812 23817 23808 + 23744 23743 23813 + 23818 23813 23743 + 23814 23813 23818 + 23818 23819 23814 + 23814 23819 23820 + 23820 23815 23814 + 23816 23815 23820 + 23743 23752 23818 + 23821 23818 23752 + 23818 23821 23822 + 23822 23819 23818 + 23819 23822 23823 + 23823 23820 23819 + 23820 23823 23824 + 23824 23825 23820 + 23820 23825 23816 + 23752 23751 23821 + 23826 23821 23751 + 23822 23821 23826 + 23826 23827 23822 + 23822 23827 23828 + 23828 23823 23822 + 23824 23823 23828 + 23751 23760 23826 + 23829 23826 23760 + 23826 23829 23830 + 23830 23827 23826 + 23827 23830 23831 + 23831 23828 23827 + 23828 23831 23832 + 23832 23833 23828 + 23828 23833 23824 + 23760 23759 23829 + 23834 23829 23759 + 23830 23829 23834 + 23834 23835 23830 + 23830 23835 23836 + 23836 23831 23830 + 23832 23831 23836 + 23836 23837 23832 + 23838 23832 23837 + 23833 23832 23838 + 23759 23767 23834 + 23772 23834 23767 + 23834 23772 23780 + 23780 23835 23834 + 23835 23780 23839 + 23839 23836 23835 + 23836 23839 23840 + 23840 23837 23836 + 23837 23840 23841 + 23841 23842 23837 + 23837 23842 23838 + 23843 23839 23780 + 23840 23839 23843 + 23843 23844 23840 + 23840 23844 23845 + 23845 23841 23840 + 23846 23841 23845 + 23842 23841 23846 + 23780 23779 23843 + 23785 23843 23779 + 23843 23785 23847 + 23847 23844 23843 + 23844 23847 23848 + 23848 23849 23844 + 23844 23849 23845 + 23850 23845 23849 + 23851 23845 23850 + 23845 23851 23846 + 23847 23785 23784 + 23784 23852 23847 + 23847 23852 23853 + 23853 23848 23847 + 23854 23848 23853 + 23848 23854 23849 + 23849 23854 23850 + 23855 23850 23854 + 23856 23850 23855 + 23850 23856 23851 + 23857 23852 23784 + 23852 23857 23858 + 23858 23853 23852 + 23859 23853 23858 + 23853 23859 23854 + 23854 23859 23855 + 23860 23855 23859 + 23861 23855 23860 + 23855 23861 23856 + 23784 23789 23857 + 23857 23789 23788 + 23788 23862 23857 + 23857 23862 23863 + 23863 23858 23857 + 23864 23858 23863 + 23858 23864 23859 + 23859 23864 23860 + 23796 23862 23788 + 23862 23796 23865 + 23865 23863 23862 + 23866 23863 23865 + 23863 23866 23864 + 23860 23864 23866 + 23866 23867 23860 + 23868 23860 23867 + 23860 23868 23861 + 23869 23865 23796 + 23870 23865 23869 + 23865 23870 23866 + 23866 23870 23871 + 23871 23867 23866 + 23867 23871 23872 + 23867 23872 23868 + 23873 23868 23872 + 23861 23868 23873 + 23796 23801 23869 + 23874 23869 23801 + 23869 23874 23875 + 23875 23876 23869 + 23869 23876 23870 + 23871 23870 23876 + 23877 23871 23876 + 23872 23871 23877 + 23877 23878 23872 + 23872 23878 23873 + 23801 23800 23874 + 23879 23874 23800 + 23875 23874 23879 + 23879 23880 23875 + 23875 23880 23881 + 23882 23875 23881 + 23876 23875 23882 + 23882 23883 23876 + 23876 23883 23877 + 23800 23809 23879 + 23884 23879 23809 + 23879 23884 23885 + 23885 23880 23879 + 23880 23885 23886 + 23886 23881 23880 + 23809 23808 23884 + 23887 23884 23808 + 23885 23884 23887 + 23887 23888 23885 + 23886 23885 23888 + 23889 23886 23888 + 23890 23886 23889 + 23886 23890 23881 + 23808 23817 23887 + 23891 23887 23817 + 23887 23891 23892 + 23892 23888 23887 + 23888 23892 23893 + 23893 23894 23888 + 23888 23894 23889 + 23817 23816 23891 + 23895 23891 23816 + 23892 23891 23895 + 23895 23896 23892 + 23893 23892 23896 + 23896 23897 23893 + 23898 23893 23897 + 23893 23898 23894 + 23894 23898 23899 + 23899 23889 23894 + 23816 23825 23895 + 23900 23895 23825 + 23896 23895 23900 + 23900 23901 23896 + 23896 23901 23902 + 23902 23897 23896 + 23903 23897 23902 + 23897 23903 23898 + 23825 23824 23900 + 23904 23900 23824 + 23901 23900 23904 + 23904 23905 23901 + 23902 23901 23905 + 23906 23902 23905 + 23907 23902 23906 + 23902 23907 23903 + 23824 23833 23904 + 23838 23904 23833 + 23904 23838 23905 + 23905 23838 23908 + 23908 23909 23905 + 23905 23909 23906 + 23910 23906 23909 + 23906 23910 23911 + 23906 23911 23907 + 23912 23907 23911 + 23903 23907 23912 + 23842 23908 23838 + 23913 23908 23842 + 23909 23908 23913 + 23909 23913 23910 + 23910 23913 23914 + 23915 23910 23914 + 23911 23910 23915 + 23915 23916 23911 + 23911 23916 23912 + 23842 23914 23913 + 23846 23914 23842 + 23914 23846 23917 + 23917 23918 23914 + 23914 23918 23915 + 23919 23915 23918 + 23919 23916 23915 + 23916 23919 23920 + 23920 23912 23916 + 23921 23912 23920 + 23912 23921 23903 + 23898 23903 23921 + 23917 23846 23851 + 23851 23922 23917 + 23923 23917 23922 + 23918 23917 23923 + 23923 23924 23918 + 23918 23924 23919 + 23920 23919 23924 + 23924 23925 23920 + 23926 23920 23925 + 23920 23926 23921 + 23927 23922 23851 + 23922 23927 23928 + 23922 23928 23923 + 23923 23928 23929 + 23929 23930 23923 + 23924 23923 23930 + 23930 23925 23924 + 23851 23856 23927 + 23927 23856 23861 + 23861 23931 23927 + 23928 23927 23931 + 23931 23929 23928 + 23932 23929 23931 + 23929 23932 23933 + 23933 23930 23929 + 23925 23930 23933 + 23933 23934 23925 + 23925 23934 23926 + 23935 23926 23934 + 23921 23926 23935 + 23873 23931 23861 + 23931 23873 23932 + 23932 23873 23936 + 23936 23937 23932 + 23932 23937 23938 + 23933 23932 23938 + 23934 23933 23938 + 23938 23939 23934 + 23934 23939 23935 + 23878 23936 23873 + 23936 23878 23940 + 23941 23936 23940 + 23936 23941 23937 + 23937 23941 23942 + 23937 23942 23938 + 23943 23938 23942 + 23938 23943 23944 + 23944 23939 23938 + 23878 23877 23940 + 23940 23877 23883 + 23883 23945 23940 + 23941 23940 23945 + 23945 23946 23941 + 23941 23946 23942 + 23946 23947 23942 + 23942 23947 23943 + 23943 23947 23948 + 23944 23943 23948 + 23949 23945 23883 + 23945 23949 23947 + 23947 23946 23945 + 23883 23882 23949 + 23949 23882 23950 + 23950 23948 23949 + 23947 23949 23948 + 23881 23950 23882 + 23951 23950 23881 + 23950 23951 23948 + 23948 23951 23944 + 23944 23951 23890 + 23952 23944 23890 + 23939 23944 23952 + 23952 23935 23939 + 23953 23935 23952 + 23935 23953 23921 + 23881 23890 23951 + 23921 23953 23898 + 23953 23899 23898 + 23954 23899 23953 + 23889 23899 23954 + 23889 23954 23890 + 23890 23954 23952 + 23953 23952 23954 + 23955 23956 23957 + 23956 23958 23957 + 23958 23959 23957 + 23957 23959 23960 + 23960 23961 23957 + 23957 23961 23962 + 23963 23957 23962 + 23957 23963 23964 + 23964 23955 23957 + 23958 23956 23965 + 23965 23966 23958 + 23958 23966 23967 + 23959 23958 23967 + 23967 23968 23959 + 23959 23968 23960 + 23969 23960 23968 + 23961 23960 23969 + 23956 23970 23965 + 23971 23965 23970 + 23966 23965 23971 + 23971 23972 23966 + 23966 23972 23973 + 23973 23967 23966 + 23968 23967 23973 + 23973 23974 23968 + 23968 23974 23969 + 23975 23970 23956 + 23970 23975 23976 + 23976 23977 23970 + 23970 23977 23971 + 23971 23977 23978 + 23978 23979 23971 + 23972 23971 23979 + 23956 23980 23975 + 23981 23975 23980 + 23976 23975 23981 + 23981 23982 23976 + 23976 23982 23983 + 23983 23984 23976 + 23977 23976 23984 + 23984 23978 23977 + 23980 23964 23981 + 23964 23985 23981 + 23981 23985 23986 + 23986 23982 23981 + 23982 23986 23987 + 23987 23983 23982 + 23964 23988 23985 + 23986 23985 23988 + 23988 23989 23986 + 23986 23989 23990 + 23990 23987 23986 + 23991 23987 23990 + 23983 23987 23991 + 23964 23992 23988 + 23992 23993 23988 + 23988 23993 23989 + 23993 23994 23989 + 23989 23994 23995 + 23995 23990 23989 + 23996 23992 23964 + 23992 23996 23997 + 23992 23997 23993 + 23994 23993 23997 + 23997 23998 23994 + 23994 23998 23999 + 23999 23995 23994 + 24000 23995 23999 + 23990 23995 24000 + 23963 23996 23964 + 23996 23963 24001 + 24001 24002 23996 + 23996 24002 24003 + 23996 24003 23997 + 23997 24003 24004 + 24004 23998 23997 + 23998 24004 24005 + 24005 23999 23998 + 23963 24006 24001 + 24007 24001 24006 + 24002 24001 24007 + 24007 24008 24002 + 24002 24008 24004 + 24004 24003 24002 + 23962 24006 23963 + 24006 23962 24009 + 24009 24010 24006 + 24006 24010 24007 + 24007 24010 24011 + 24011 24012 24007 + 24008 24007 24012 + 24012 24013 24008 + 24004 24008 24013 + 24013 24005 24004 + 24009 23962 23961 + 23961 24014 24009 + 24009 24014 24015 + 24015 24016 24009 + 24010 24009 24016 + 24016 24011 24010 + 23969 24014 23961 + 24014 23969 24017 + 24017 24015 24014 + 24015 24017 24018 + 24018 24019 24015 + 24015 24019 24020 + 24020 24016 24015 + 24011 24016 24020 + 24021 24017 23969 + 24018 24017 24021 + 24021 24022 24018 + 24018 24022 24023 + 24023 24024 24018 + 24019 24018 24024 + 24024 24025 24019 + 24020 24019 24025 + 23969 23974 24021 + 24026 24021 23974 + 24021 24026 24027 + 24027 24022 24021 + 24022 24027 24028 + 24028 24023 24022 + 23974 23973 24026 + 24029 24026 23973 + 24027 24026 24029 + 24029 24030 24027 + 24027 24030 24031 + 24031 24028 24027 + 24032 24028 24031 + 24023 24028 24032 + 23973 23972 24029 + 23979 24029 23972 + 24029 23979 24033 + 24033 24030 24029 + 24030 24033 24034 + 24034 24031 24030 + 24031 24034 24035 + 24035 24036 24031 + 24031 24036 24032 + 24033 23979 23978 + 23978 24037 24033 + 24033 24037 24038 + 24038 24034 24033 + 24035 24034 24038 + 24038 24039 24035 + 24035 24039 24040 + 24040 24041 24035 + 24036 24035 24041 + 24042 24037 23978 + 24037 24042 24043 + 24043 24038 24037 + 24038 24043 24044 + 24044 24039 24038 + 24039 24044 24045 + 24045 24040 24039 + 23978 23984 24042 + 24042 23984 23983 + 23983 24046 24042 + 24042 24046 24047 + 24047 24043 24042 + 24044 24043 24047 + 24047 24048 24044 + 24044 24048 24049 + 24049 24045 24044 + 24050 24045 24049 + 24040 24045 24050 + 23991 24046 23983 + 24046 23991 24051 + 24051 24047 24046 + 24047 24051 24052 + 24052 24048 24047 + 24048 24052 24053 + 24053 24049 24048 + 24049 24053 24054 + 24054 24055 24049 + 24049 24055 24050 + 24056 24051 23991 + 24052 24051 24056 + 24056 24057 24052 + 24052 24057 24058 + 24058 24053 24052 + 24054 24053 24058 + 24058 24059 24054 + 24060 24054 24059 + 24055 24054 24060 + 23991 24061 24056 + 24062 24056 24061 + 24056 24062 24063 + 24063 24057 24056 + 24057 24063 24064 + 24064 24058 24057 + 24058 24064 24065 + 24065 24059 24058 + 23990 24061 23991 + 24000 24061 23990 + 24061 24000 24062 + 24066 24062 24000 + 24063 24062 24066 + 24066 24067 24063 + 24063 24067 24068 + 24068 24064 24063 + 24065 24064 24068 + 24000 24069 24066 + 24070 24066 24069 + 24066 24070 24071 + 24071 24067 24066 + 24067 24071 24072 + 24072 24068 24067 + 23999 24069 24000 + 24073 24069 23999 + 24069 24073 24070 + 24074 24070 24073 + 24071 24070 24074 + 24074 24075 24071 + 24071 24075 24076 + 24076 24072 24071 + 24077 24072 24076 + 24068 24072 24077 + 23999 24005 24073 + 24073 24005 24013 + 24013 24078 24073 + 24073 24078 24074 + 24079 24074 24078 + 24074 24079 24080 + 24080 24075 24074 + 24075 24080 24081 + 24081 24076 24075 + 24082 24078 24013 + 24078 24082 24079 + 24083 24079 24082 + 24080 24079 24083 + 24083 24084 24080 + 24080 24084 24085 + 24085 24081 24080 + 24086 24081 24085 + 24076 24081 24086 + 24013 24012 24082 + 24082 24012 24011 + 24011 24087 24082 + 24082 24087 24083 + 24088 24083 24087 + 24083 24088 24089 + 24089 24084 24083 + 24084 24089 24090 + 24090 24085 24084 + 24020 24087 24011 + 24087 24020 24088 + 24025 24088 24020 + 24089 24088 24025 + 24025 24091 24089 + 24089 24091 24092 + 24092 24090 24089 + 24093 24090 24092 + 24085 24090 24093 + 24093 24094 24085 + 24085 24094 24086 + 24095 24091 24025 + 24091 24095 24096 + 24096 24092 24091 + 24092 24096 24097 + 24097 24098 24092 + 24092 24098 24093 + 24025 24024 24095 + 24095 24024 24023 + 24023 24099 24095 + 24095 24099 24100 + 24100 24096 24095 + 24097 24096 24100 + 24100 24101 24097 + 24097 24101 24102 + 24102 24103 24097 + 24098 24097 24103 + 24032 24099 24023 + 24099 24032 24104 + 24104 24100 24099 + 24100 24104 24105 + 24105 24101 24100 + 24101 24105 24106 + 24106 24102 24101 + 24107 24104 24032 + 24105 24104 24107 + 24107 24108 24105 + 24105 24108 24109 + 24109 24106 24105 + 24110 24106 24109 + 24102 24106 24110 + 24032 24036 24107 + 24041 24107 24036 + 24107 24041 24111 + 24111 24108 24107 + 24108 24111 24112 + 24112 24109 24108 + 24113 24109 24112 + 24109 24113 24110 + 24114 24110 24113 + 24115 24110 24114 + 24110 24115 24102 + 24111 24041 24040 + 24040 24116 24111 + 24111 24116 24117 + 24117 24112 24111 + 24118 24112 24117 + 24112 24118 24113 + 24113 24118 24119 + 24119 24120 24113 + 24113 24120 24114 + 24050 24116 24040 + 24116 24050 24121 + 24121 24117 24116 + 24122 24117 24121 + 24117 24122 24118 + 24119 24118 24122 + 24122 24123 24119 + 24124 24119 24123 + 24124 24120 24119 + 24125 24121 24050 + 24126 24121 24125 + 24121 24126 24122 + 24122 24126 24127 + 24127 24123 24122 + 24128 24123 24127 + 24123 24128 24124 + 24129 24124 24128 + 24120 24124 24129 + 24050 24055 24125 + 24060 24125 24055 + 24060 24130 24125 + 24125 24130 24126 + 24126 24130 24131 + 24131 24127 24126 + 24132 24127 24131 + 24127 24132 24128 + 24130 24060 24133 + 24133 24131 24130 + 24134 24131 24133 + 24131 24134 24132 + 24135 24132 24134 + 24128 24132 24135 + 24135 24136 24128 + 24128 24136 24137 + 24137 24129 24128 + 24138 24133 24060 + 24139 24133 24138 + 24133 24139 24134 + 24134 24139 24140 + 24140 24141 24134 + 24134 24141 24135 + 24142 24135 24141 + 24136 24135 24142 + 24059 24138 24060 + 24143 24138 24059 + 24138 24143 24144 + 24144 24145 24138 + 24138 24145 24139 + 24140 24139 24145 + 24145 24146 24140 + 24147 24140 24146 + 24147 24141 24140 + 24141 24147 24142 + 24059 24065 24143 + 24148 24143 24065 + 24144 24143 24148 + 24148 24149 24144 + 24150 24144 24149 + 24145 24144 24150 + 24150 24146 24145 + 24146 24150 24151 + 24151 24152 24146 + 24146 24152 24147 + 24065 24153 24148 + 24153 24154 24148 + 24155 24148 24154 + 24149 24148 24155 + 24068 24153 24065 + 24077 24153 24068 + 24153 24077 24156 + 24156 24154 24153 + 24157 24154 24156 + 24154 24157 24155 + 24155 24157 24158 + 24159 24155 24158 + 24149 24155 24159 + 24160 24156 24077 + 24157 24156 24160 + 24160 24158 24157 + 24158 24160 24161 + 24161 24162 24158 + 24158 24162 24163 + 24163 24164 24158 + 24158 24164 24159 + 24077 24165 24160 + 24161 24160 24165 + 24165 24086 24161 + 24166 24161 24086 + 24162 24161 24166 + 24166 24167 24162 + 24163 24162 24167 + 24076 24165 24077 + 24086 24165 24076 + 24086 24094 24166 + 24168 24166 24094 + 24166 24168 24169 + 24169 24167 24166 + 24167 24169 24170 + 24170 24171 24167 + 24167 24171 24163 + 24094 24093 24168 + 24172 24168 24093 + 24169 24168 24172 + 24172 24173 24169 + 24170 24169 24173 + 24174 24170 24173 + 24175 24170 24174 + 24170 24175 24171 + 24171 24175 24176 + 24176 24163 24171 + 24093 24098 24172 + 24103 24172 24098 + 24172 24103 24177 + 24177 24173 24172 + 24173 24177 24178 + 24178 24179 24173 + 24173 24179 24174 + 24180 24174 24179 + 24180 24181 24174 + 24174 24181 24175 + 24176 24175 24181 + 24177 24103 24102 + 24102 24115 24177 + 24177 24115 24182 + 24182 24183 24177 + 24183 24178 24177 + 24184 24178 24183 + 24178 24184 24179 + 24179 24184 24180 + 24180 24184 24185 + 24186 24180 24185 + 24181 24180 24186 + 24114 24182 24115 + 24187 24182 24114 + 24182 24187 24188 + 24188 24183 24182 + 24188 24185 24183 + 24183 24185 24184 + 24189 24187 24114 + 24190 24187 24189 + 24188 24187 24190 + 24190 24191 24188 + 24185 24188 24191 + 24191 24192 24185 + 24185 24192 24186 + 24189 24114 24193 + 24193 24194 24189 + 24194 24195 24189 + 24195 24196 24189 + 24196 24190 24189 + 24197 24190 24196 + 24191 24190 24197 + 24120 24193 24114 + 24129 24193 24120 + 24194 24193 24129 + 24194 24129 24137 + 24137 24195 24194 + 24198 24195 24137 + 24195 24198 24197 + 24197 24196 24195 + 24198 24137 24136 + 24136 24199 24198 + 24197 24198 24199 + 24200 24197 24199 + 24200 24191 24197 + 24191 24200 24201 + 24201 24192 24191 + 24192 24201 24202 + 24202 24186 24192 + 24186 24202 24203 + 24186 24203 24181 + 24142 24199 24136 + 24199 24142 24204 + 24204 24205 24199 + 24199 24205 24200 + 24201 24200 24205 + 24205 24206 24201 + 24201 24206 24207 + 24207 24202 24201 + 24203 24202 24207 + 24207 24208 24203 + 24181 24203 24208 + 24208 24176 24181 + 24204 24142 24147 + 24147 24152 24204 + 24209 24204 24152 + 24204 24209 24206 + 24206 24205 24204 + 24152 24151 24209 + 24209 24151 24210 + 24210 24211 24209 + 24206 24209 24211 + 24211 24207 24206 + 24207 24211 24212 + 24212 24208 24207 + 24208 24212 24213 + 24213 24176 24208 + 24163 24176 24213 + 24213 24164 24163 + 24214 24210 24151 + 24214 24215 24210 + 24210 24215 24212 + 24212 24211 24210 + 24151 24150 24214 + 24214 24150 24149 + 24149 24216 24214 + 24215 24214 24216 + 24216 24217 24215 + 24215 24217 24213 + 24213 24212 24215 + 24159 24216 24149 + 24217 24216 24159 + 24217 24159 24164 + 24164 24213 24217 + 24218 24219 24220 + 24218 24221 24219 + 24222 24219 24221 + 24219 24222 24223 + 24220 24224 24218 + 24225 24218 24224 + 24225 24226 24218 + 24226 24221 24218 + 24227 24221 24226 + 24227 24222 24221 + 24228 24224 24220 + 24229 24224 24228 + 24224 24229 24225 + 24230 24225 24229 + 24225 24230 24231 + 24225 24231 24226 + 24228 24220 24232 + 24232 24233 24228 + 24234 24228 24233 + 24234 24229 24228 + 24235 24229 24234 + 24229 24235 24230 + 24236 24230 24235 + 24231 24230 24236 + 24232 24220 24223 + 24237 24232 24223 + 24238 24232 24237 + 24238 24233 24232 + 24233 24238 24239 + 24239 24240 24233 + 24233 24240 24234 + 24241 24234 24240 + 24234 24241 24235 + 24223 24242 24237 + 24242 24243 24237 + 24244 24237 24243 + 24244 24245 24237 + 24237 24245 24238 + 24238 24245 24246 + 24246 24239 24238 + 24247 24242 24223 + 24248 24242 24247 + 24242 24248 24249 + 24249 24243 24242 + 24250 24243 24249 + 24243 24250 24244 + 24251 24244 24250 + 24245 24244 24251 + 24223 24252 24247 + 24253 24247 24252 + 24248 24247 24253 + 24253 24254 24248 + 24249 24248 24254 + 24254 24255 24249 + 24256 24249 24255 + 24249 24256 24250 + 24252 24223 24257 + 24252 24257 24258 + 24258 24259 24252 + 24252 24259 24253 + 24260 24253 24259 + 24254 24253 24260 + 24257 24223 24222 + 24222 24261 24257 + 24257 24261 24262 + 24258 24257 24262 + 24263 24258 24262 + 24258 24263 24264 + 24264 24259 24258 + 24259 24264 24260 + 24222 24227 24261 + 24261 24227 24265 + 24265 24262 24261 + 24266 24262 24265 + 24262 24266 24263 + 24267 24263 24266 + 24264 24263 24267 + 24267 24268 24264 + 24260 24264 24268 + 24265 24227 24226 + 24269 24265 24226 + 24265 24269 24266 + 24266 24269 24270 + 24270 24271 24266 + 24266 24271 24272 + 24272 24267 24266 + 24273 24267 24272 + 24273 24268 24267 + 24226 24231 24269 + 24270 24269 24231 + 24231 24274 24270 + 24274 24275 24270 + 24276 24270 24275 + 24270 24276 24277 + 24277 24271 24270 + 24271 24277 24278 + 24278 24272 24271 + 24236 24274 24231 + 24236 24279 24274 + 24274 24279 24280 + 24280 24275 24274 + 24281 24275 24280 + 24275 24281 24276 + 24281 24282 24276 + 24277 24276 24282 + 24283 24279 24236 + 24279 24283 24284 + 24284 24280 24279 + 24285 24280 24284 + 24280 24285 24281 + 24286 24281 24285 + 24281 24286 24282 + 24287 24283 24236 + 24288 24283 24287 + 24283 24288 24289 + 24289 24284 24283 + 24290 24284 24289 + 24284 24290 24285 + 24235 24287 24236 + 24291 24287 24235 + 24287 24291 24288 + 24288 24291 24292 + 24292 24293 24288 + 24289 24288 24293 + 24293 24294 24289 + 24295 24289 24294 + 24289 24295 24290 + 24235 24241 24291 + 24241 24296 24291 + 24296 24292 24291 + 24246 24292 24296 + 24293 24292 24246 + 24246 24297 24293 + 24293 24297 24298 + 24298 24294 24293 + 24299 24294 24298 + 24294 24299 24295 + 24240 24296 24241 + 24296 24240 24239 + 24296 24239 24246 + 24300 24295 24299 + 24290 24295 24300 + 24300 24301 24290 + 24301 24285 24290 + 24301 24302 24285 + 24302 24286 24285 + 24303 24286 24302 + 24286 24303 24304 + 24286 24304 24282 + 24299 24305 24300 + 24306 24300 24305 + 24301 24300 24306 + 24306 24307 24301 + 24301 24307 24302 + 24307 24303 24302 + 24303 24307 24308 + 24308 24309 24303 + 24303 24309 24304 + 24310 24305 24299 + 24311 24305 24310 + 24305 24311 24306 + 24312 24306 24311 + 24307 24306 24312 + 24312 24308 24307 + 24312 24313 24308 + 24308 24313 24314 + 24314 24309 24308 + 24304 24309 24314 + 24299 24315 24310 + 24310 24315 24316 + 24316 24317 24310 + 24318 24310 24317 + 24310 24318 24311 + 24298 24315 24299 + 24315 24298 24319 + 24319 24316 24315 + 24316 24319 24320 + 24320 24321 24316 + 24316 24321 24322 + 24322 24317 24316 + 24323 24317 24322 + 24317 24323 24318 + 24324 24319 24298 + 24320 24319 24324 + 24324 24325 24320 + 24320 24325 24326 + 24326 24327 24320 + 24321 24320 24327 + 24327 24328 24321 + 24322 24321 24328 + 24298 24297 24324 + 24329 24324 24297 + 24324 24329 24330 + 24330 24325 24324 + 24325 24330 24331 + 24331 24326 24325 + 24297 24246 24329 + 24332 24329 24246 + 24330 24329 24332 + 24332 24333 24330 + 24330 24333 24334 + 24334 24331 24330 + 24335 24331 24334 + 24326 24331 24335 + 24336 24332 24246 + 24337 24332 24336 + 24332 24337 24333 + 24333 24337 24338 + 24338 24334 24333 + 24334 24338 24339 + 24339 24340 24334 + 24334 24340 24335 + 24245 24336 24246 + 24251 24336 24245 + 24251 24341 24336 + 24336 24341 24337 + 24337 24341 24342 + 24342 24338 24337 + 24339 24338 24342 + 24342 24343 24339 + 24344 24339 24343 + 24340 24339 24344 + 24341 24251 24345 + 24345 24342 24341 + 24342 24345 24346 + 24346 24343 24342 + 24343 24346 24347 + 24347 24348 24343 + 24343 24348 24344 + 24345 24251 24250 + 24250 24349 24345 + 24346 24345 24349 + 24349 24350 24346 + 24347 24346 24350 + 24350 24351 24347 + 24352 24347 24351 + 24348 24347 24352 + 24353 24349 24250 + 24349 24353 24354 + 24354 24350 24349 + 24350 24354 24355 + 24355 24351 24350 + 24351 24355 24356 + 24356 24357 24351 + 24351 24357 24352 + 24250 24256 24353 + 24358 24353 24256 + 24354 24353 24358 + 24358 24359 24354 + 24355 24354 24359 + 24359 24360 24355 + 24356 24355 24360 + 24360 24361 24356 + 24362 24356 24361 + 24357 24356 24362 + 24256 24363 24358 + 24364 24358 24363 + 24359 24358 24364 + 24365 24359 24364 + 24359 24365 24366 + 24366 24360 24359 + 24360 24366 24367 + 24367 24361 24360 + 24255 24363 24256 + 24368 24363 24255 + 24363 24368 24364 + 24369 24364 24368 + 24365 24364 24369 + 24369 24370 24365 + 24366 24365 24370 + 24370 24371 24366 + 24367 24366 24371 + 24255 24372 24368 + 24368 24372 24373 + 24373 24374 24368 + 24368 24374 24369 + 24375 24369 24374 + 24369 24375 24376 + 24376 24370 24369 + 24372 24255 24254 + 24254 24377 24372 + 24373 24372 24377 + 24377 24378 24373 + 24379 24373 24378 + 24374 24373 24379 + 24379 24380 24374 + 24374 24380 24375 + 24381 24375 24380 + 24376 24375 24381 + 24260 24377 24254 + 24377 24260 24382 + 24382 24378 24377 + 24378 24382 24383 + 24383 24384 24378 + 24378 24384 24379 + 24379 24384 24385 + 24385 24386 24379 + 24380 24379 24386 + 24268 24382 24260 + 24383 24382 24268 + 24268 24273 24383 + 24383 24273 24387 + 24387 24388 24383 + 24384 24383 24388 + 24388 24385 24384 + 24385 24388 24389 + 24389 24390 24385 + 24385 24390 24391 + 24391 24386 24385 + 24272 24387 24273 + 24392 24387 24272 + 24387 24392 24389 + 24389 24388 24387 + 24272 24278 24392 + 24392 24278 24393 + 24393 24394 24392 + 24389 24392 24394 + 24394 24395 24389 + 24395 24396 24389 + 24390 24389 24396 + 24396 24397 24390 + 24391 24390 24397 + 24393 24278 24277 + 24277 24398 24393 + 24399 24393 24398 + 24394 24393 24399 + 24394 24399 24400 + 24400 24395 24394 + 24401 24395 24400 + 24395 24401 24402 + 24402 24396 24395 + 24402 24397 24396 + 24282 24398 24277 + 24403 24398 24282 + 24398 24403 24399 + 24400 24399 24403 + 24403 24404 24400 + 24401 24400 24404 + 24404 24405 24401 + 24402 24401 24405 + 24282 24406 24403 + 24403 24406 24407 + 24407 24404 24403 + 24407 24405 24404 + 24405 24407 24408 + 24408 24409 24405 + 24405 24409 24402 + 24406 24282 24304 + 24304 24314 24406 + 24407 24406 24314 + 24408 24407 24314 + 24314 24313 24408 + 24313 24410 24408 + 24411 24408 24410 + 24408 24411 24409 + 24409 24411 24412 + 24412 24413 24409 + 24409 24413 24402 + 24413 24414 24402 + 24397 24402 24414 + 24415 24410 24313 + 24410 24415 24416 + 24410 24416 24411 + 24411 24416 24417 + 24417 24412 24411 + 24418 24412 24417 + 24413 24412 24418 + 24313 24312 24415 + 24415 24312 24311 + 24311 24419 24415 + 24416 24415 24419 + 24419 24420 24416 + 24416 24420 24417 + 24421 24417 24420 + 24417 24421 24422 + 24422 24423 24417 + 24417 24423 24418 + 24424 24419 24311 + 24419 24424 24420 + 24420 24424 24421 + 24323 24421 24424 + 24422 24421 24323 + 24323 24425 24422 + 24422 24425 24426 + 24426 24427 24422 + 24423 24422 24427 + 24311 24318 24424 + 24424 24318 24323 + 24322 24425 24323 + 24425 24322 24428 + 24428 24426 24425 + 24426 24428 24429 + 24429 24430 24426 + 24426 24430 24431 + 24431 24427 24426 + 24432 24427 24431 + 24427 24432 24423 + 24418 24423 24432 + 24328 24428 24322 + 24429 24428 24328 + 24328 24433 24429 + 24434 24429 24433 + 24430 24429 24434 + 24434 24435 24430 + 24430 24435 24436 + 24436 24431 24430 + 24437 24431 24436 + 24431 24437 24432 + 24438 24433 24328 + 24433 24438 24439 + 24439 24440 24433 + 24433 24440 24434 + 24441 24434 24440 + 24435 24434 24441 + 24328 24327 24438 + 24438 24327 24326 + 24326 24442 24438 + 24438 24442 24443 + 24443 24439 24438 + 24444 24439 24443 + 24440 24439 24444 + 24444 24445 24440 + 24440 24445 24441 + 24335 24442 24326 + 24442 24335 24446 + 24446 24443 24442 + 24443 24446 24447 + 24447 24448 24443 + 24443 24448 24444 + 24449 24444 24448 + 24445 24444 24449 + 24446 24335 24340 + 24340 24450 24446 + 24447 24446 24450 + 24450 24451 24447 + 24452 24447 24451 + 24448 24447 24452 + 24452 24453 24448 + 24448 24453 24449 + 24344 24450 24340 + 24450 24344 24454 + 24454 24451 24450 + 24451 24454 24455 + 24455 24456 24451 + 24451 24456 24452 + 24457 24452 24456 + 24453 24452 24457 + 24454 24344 24348 + 24348 24458 24454 + 24455 24454 24458 + 24458 24459 24455 + 24460 24455 24459 + 24456 24455 24460 + 24460 24461 24456 + 24456 24461 24457 + 24352 24458 24348 + 24458 24352 24462 + 24462 24459 24458 + 24459 24462 24463 + 24463 24464 24459 + 24459 24464 24460 + 24465 24460 24464 + 24461 24460 24465 + 24466 24462 24352 + 24463 24462 24466 + 24466 24467 24463 + 24468 24463 24467 + 24464 24463 24468 + 24468 24469 24464 + 24464 24469 24465 + 24352 24357 24466 + 24362 24466 24357 + 24466 24362 24470 + 24470 24467 24466 + 24467 24470 24471 + 24471 24472 24467 + 24467 24472 24468 + 24473 24468 24472 + 24469 24468 24473 + 24470 24362 24474 + 24474 24475 24470 + 24471 24470 24475 + 24475 24476 24471 + 24477 24471 24476 + 24472 24471 24477 + 24477 24478 24472 + 24472 24478 24473 + 24361 24474 24362 + 24479 24474 24361 + 24474 24479 24480 + 24480 24475 24474 + 24475 24480 24481 + 24481 24476 24475 + 24476 24481 24482 + 24482 24483 24476 + 24476 24483 24477 + 24361 24367 24479 + 24479 24367 24484 + 24484 24485 24479 + 24480 24479 24485 + 24485 24486 24480 + 24481 24480 24486 + 24486 24487 24481 + 24482 24481 24487 + 24371 24484 24367 + 24488 24484 24371 + 24484 24488 24489 + 24489 24485 24484 + 24485 24489 24490 + 24490 24486 24485 + 24486 24490 24491 + 24491 24487 24486 + 24371 24492 24488 + 24488 24492 24493 + 24493 24494 24488 + 24489 24488 24494 + 24494 24495 24489 + 24490 24489 24495 + 24492 24371 24370 + 24370 24376 24492 + 24492 24376 24496 + 24496 24493 24492 + 24497 24493 24496 + 24493 24497 24498 + 24498 24494 24493 + 24494 24498 24499 + 24499 24495 24494 + 24381 24496 24376 + 24500 24496 24381 + 24496 24500 24497 + 24497 24500 24501 + 24501 24502 24497 + 24498 24497 24502 + 24502 24503 24498 + 24499 24498 24503 + 24381 24504 24500 + 24500 24504 24505 + 24505 24501 24500 + 24506 24501 24505 + 24501 24506 24507 + 24507 24502 24501 + 24502 24507 24508 + 24508 24503 24502 + 24504 24381 24509 + 24509 24510 24504 + 24505 24504 24510 + 24510 24511 24505 + 24512 24505 24511 + 24505 24512 24506 + 24380 24509 24381 + 24386 24509 24380 + 24510 24509 24386 + 24386 24391 24510 + 24510 24391 24513 + 24513 24511 24510 + 24514 24511 24513 + 24511 24514 24512 + 24515 24512 24514 + 24506 24512 24515 + 24515 24516 24506 + 24507 24506 24516 + 24516 24517 24507 + 24508 24507 24517 + 24397 24513 24391 + 24414 24513 24397 + 24513 24414 24514 + 24514 24414 24413 + 24413 24518 24514 + 24514 24518 24515 + 24519 24515 24518 + 24515 24519 24520 + 24520 24516 24515 + 24516 24520 24521 + 24521 24517 24516 + 24418 24518 24413 + 24518 24418 24519 + 24432 24519 24418 + 24520 24519 24432 + 24432 24437 24520 + 24521 24520 24437 + 24437 24522 24521 + 24523 24521 24522 + 24517 24521 24523 + 24523 24524 24517 + 24517 24524 24508 + 24525 24508 24524 + 24503 24508 24525 + 24436 24522 24437 + 24522 24436 24526 + 24526 24527 24522 + 24522 24527 24523 + 24528 24523 24527 + 24524 24523 24528 + 24528 24529 24524 + 24524 24529 24525 + 24526 24436 24435 + 24435 24530 24526 + 24531 24526 24530 + 24527 24526 24531 + 24531 24532 24527 + 24527 24532 24528 + 24533 24528 24532 + 24529 24528 24533 + 24441 24530 24435 + 24530 24441 24534 + 24534 24535 24530 + 24530 24535 24531 + 24536 24531 24535 + 24532 24531 24536 + 24536 24537 24532 + 24532 24537 24533 + 24534 24441 24445 + 24445 24538 24534 + 24539 24534 24538 + 24535 24534 24539 + 24539 24540 24535 + 24535 24540 24536 + 24541 24536 24540 + 24537 24536 24541 + 24449 24538 24445 + 24538 24449 24542 + 24542 24543 24538 + 24538 24543 24539 + 24544 24539 24543 + 24540 24539 24544 + 24544 24545 24540 + 24540 24545 24541 + 24542 24449 24453 + 24453 24546 24542 + 24547 24542 24546 + 24543 24542 24547 + 24547 24548 24543 + 24543 24548 24544 + 24549 24544 24548 + 24545 24544 24549 + 24457 24546 24453 + 24546 24457 24550 + 24550 24551 24546 + 24546 24551 24547 + 24552 24547 24551 + 24548 24547 24552 + 24552 24553 24548 + 24548 24553 24549 + 24550 24457 24461 + 24461 24554 24550 + 24555 24550 24554 + 24551 24550 24555 + 24555 24556 24551 + 24551 24556 24552 + 24557 24552 24556 + 24553 24552 24557 + 24465 24554 24461 + 24554 24465 24558 + 24558 24559 24554 + 24554 24559 24555 + 24560 24555 24559 + 24556 24555 24560 + 24560 24561 24556 + 24556 24561 24557 + 24558 24465 24469 + 24469 24562 24558 + 24563 24558 24562 + 24559 24558 24563 + 24563 24564 24559 + 24559 24564 24560 + 24565 24560 24564 + 24565 24561 24560 + 24473 24562 24469 + 24562 24473 24566 + 24566 24567 24562 + 24562 24567 24563 + 24568 24563 24567 + 24568 24569 24563 + 24569 24564 24563 + 24564 24569 24565 + 24566 24473 24478 + 24478 24570 24566 + 24571 24566 24570 + 24571 24567 24566 + 24571 24572 24567 + 24567 24572 24568 + 24568 24572 24573 + 24573 24574 24568 + 24574 24569 24568 + 24574 24565 24569 + 24575 24570 24478 + 24576 24570 24575 + 24576 24577 24570 + 24570 24577 24571 + 24578 24571 24577 + 24572 24571 24578 + 24578 24573 24572 + 24574 24573 24578 + 24579 24574 24578 + 24574 24579 24565 + 24478 24477 24575 + 24575 24477 24483 + 24483 24580 24575 + 24580 24581 24575 + 24581 24576 24575 + 24582 24576 24581 + 24577 24576 24582 + 24582 24578 24577 + 24583 24580 24483 + 24584 24580 24583 + 24584 24581 24580 + 24581 24584 24585 + 24585 24582 24581 + 24582 24585 24586 + 24578 24582 24586 + 24483 24482 24583 + 24583 24482 24587 + 24587 24588 24583 + 24584 24583 24588 + 24588 24589 24584 + 24585 24584 24589 + 24585 24589 24590 + 24591 24585 24590 + 24585 24591 24586 + 24487 24587 24482 + 24592 24587 24487 + 24587 24592 24593 + 24593 24588 24587 + 24590 24588 24593 + 24590 24589 24588 + 24487 24491 24592 + 24592 24491 24594 + 24594 24595 24592 + 24593 24592 24595 + 24595 24596 24593 + 24590 24593 24596 + 24596 24597 24590 + 24591 24590 24597 + 24594 24491 24490 + 24490 24598 24594 + 24599 24594 24598 + 24594 24599 24600 + 24600 24595 24594 + 24595 24600 24601 + 24601 24596 24595 + 24602 24596 24601 + 24602 24597 24596 + 24591 24597 24602 + 24495 24598 24490 + 24603 24598 24495 + 24598 24603 24599 + 24599 24603 24604 + 24604 24605 24599 + 24600 24599 24605 + 24605 24606 24600 + 24601 24600 24606 + 24606 24607 24601 + 24602 24601 24607 + 24495 24499 24603 + 24603 24499 24608 + 24608 24604 24603 + 24609 24604 24608 + 24604 24609 24610 + 24610 24605 24604 + 24605 24610 24611 + 24611 24606 24605 + 24606 24611 24612 + 24612 24607 24606 + 24503 24608 24499 + 24525 24608 24503 + 24608 24525 24609 + 24609 24525 24529 + 24529 24613 24609 + 24610 24609 24613 + 24613 24614 24610 + 24611 24610 24614 + 24614 24615 24611 + 24612 24611 24615 + 24533 24613 24529 + 24613 24533 24616 + 24616 24614 24613 + 24614 24616 24617 + 24617 24615 24614 + 24615 24617 24618 + 24618 24619 24615 + 24615 24619 24612 + 24616 24533 24537 + 24537 24620 24616 + 24617 24616 24620 + 24620 24621 24617 + 24617 24621 24622 + 24622 24618 24617 + 24622 24623 24618 + 24623 24624 24618 + 24619 24618 24624 + 24541 24620 24537 + 24620 24541 24625 + 24625 24621 24620 + 24621 24625 24626 + 24626 24622 24621 + 24622 24626 24627 + 24627 24623 24622 + 24623 24627 24628 + 24628 24586 24623 + 24586 24624 24623 + 24625 24541 24545 + 24545 24629 24625 + 24626 24625 24629 + 24629 24630 24626 + 24630 24631 24626 + 24631 24627 24626 + 24628 24627 24631 + 24632 24628 24631 + 24628 24632 24578 + 24586 24628 24578 + 24549 24629 24545 + 24629 24549 24633 + 24633 24630 24629 + 24630 24633 24634 + 24634 24631 24630 + 24631 24634 24632 + 24632 24634 24635 + 24579 24632 24635 + 24632 24579 24578 + 24633 24549 24553 + 24553 24636 24633 + 24634 24633 24636 + 24636 24635 24634 + 24637 24635 24636 + 24635 24637 24579 + 24579 24637 24638 + 24579 24638 24565 + 24565 24638 24561 + 24557 24636 24553 + 24637 24636 24557 + 24637 24557 24561 + 24561 24638 24637 + 24639 24624 24586 + 24624 24639 24619 + 24619 24639 24640 + 24640 24612 24619 + 24640 24641 24612 + 24641 24607 24612 + 24586 24642 24639 + 24642 24640 24639 + 24642 24643 24640 + 24643 24641 24640 + 24643 24602 24641 + 24607 24641 24602 + 24643 24642 24586 + 24591 24643 24586 + 24643 24591 24602 + 24644 24645 24646 + 24647 24645 24644 + 24648 24645 24647 + 24645 24648 24649 + 24649 24650 24645 + 24651 24644 24646 + 24652 24644 24651 + 24644 24652 24653 + 24644 24653 24647 + 24654 24647 24653 + 24655 24647 24654 + 24647 24655 24648 + 24646 24656 24651 + 24656 24657 24651 + 24657 24658 24651 + 24658 24659 24651 + 24660 24651 24659 + 24660 24661 24651 + 24651 24661 24652 + 24662 24656 24646 + 24656 24662 24663 + 24657 24656 24663 + 24664 24657 24663 + 24665 24657 24664 + 24657 24665 24666 + 24666 24658 24657 + 24646 24667 24662 + 24668 24662 24667 + 24663 24662 24668 + 24668 24669 24663 + 24663 24669 24664 + 24669 24670 24664 + 24665 24664 24670 + 24670 24671 24665 + 24666 24665 24671 + 24646 24672 24667 + 24667 24672 24673 + 24673 24674 24667 + 24667 24674 24668 + 24675 24672 24646 + 24672 24675 24676 + 24672 24676 24673 + 24676 24677 24673 + 24678 24673 24677 + 24673 24678 24679 + 24679 24674 24673 + 24668 24674 24679 + 24650 24675 24646 + 24675 24650 24649 + 24675 24649 24680 + 24680 24676 24675 + 24676 24680 24681 + 24682 24676 24681 + 24676 24682 24677 + 24682 24683 24677 + 24684 24677 24683 + 24677 24684 24678 + 24648 24680 24649 + 24680 24648 24655 + 24681 24680 24655 + 24685 24681 24655 + 24682 24681 24685 + 24685 24686 24682 + 24683 24682 24686 + 24686 24687 24683 + 24688 24683 24687 + 24688 24684 24683 + 24689 24685 24655 + 24690 24685 24689 + 24686 24685 24690 + 24690 24691 24686 + 24686 24691 24687 + 24691 24692 24687 + 24693 24687 24692 + 24687 24693 24688 + 24654 24689 24655 + 24654 24694 24689 + 24689 24694 24690 + 24695 24690 24694 + 24691 24690 24695 + 24695 24696 24691 + 24691 24696 24697 + 24697 24692 24691 + 24698 24692 24697 + 24692 24698 24693 + 24694 24654 24699 + 24699 24700 24694 + 24694 24700 24695 + 24701 24695 24700 + 24695 24701 24702 + 24702 24696 24695 + 24696 24702 24703 + 24703 24697 24696 + 24699 24654 24653 + 24653 24704 24699 + 24705 24699 24704 + 24699 24705 24706 + 24706 24700 24699 + 24700 24706 24701 + 24707 24701 24706 + 24702 24701 24707 + 24708 24704 24653 + 24709 24704 24708 + 24704 24709 24705 + 24710 24705 24709 + 24706 24705 24710 + 24653 24652 24708 + 24708 24652 24711 + 24711 24712 24708 + 24713 24708 24712 + 24708 24713 24709 + 24652 24661 24711 + 24714 24711 24661 + 24711 24714 24715 + 24715 24716 24711 + 24711 24716 24717 + 24717 24712 24711 + 24718 24712 24717 + 24712 24718 24713 + 24661 24660 24714 + 24719 24714 24660 + 24715 24714 24719 + 24719 24720 24715 + 24715 24720 24721 + 24721 24722 24715 + 24716 24715 24722 + 24660 24723 24719 + 24723 24724 24719 + 24725 24719 24724 + 24719 24725 24726 + 24726 24720 24719 + 24720 24726 24727 + 24727 24721 24720 + 24659 24723 24660 + 24723 24659 24728 + 24723 24728 24729 + 24729 24724 24723 + 24724 24729 24730 + 24730 24731 24724 + 24724 24731 24725 + 24728 24659 24658 + 24658 24732 24728 + 24728 24732 24733 + 24733 24729 24728 + 24730 24729 24733 + 24733 24734 24730 + 24730 24734 24735 + 24735 24736 24730 + 24731 24730 24736 + 24666 24732 24658 + 24732 24666 24737 + 24737 24738 24732 + 24732 24738 24733 + 24739 24733 24738 + 24739 24734 24733 + 24734 24739 24740 + 24740 24741 24734 + 24734 24741 24735 + 24666 24671 24737 + 24671 24742 24737 + 24743 24737 24742 + 24743 24738 24737 + 24738 24743 24739 + 24739 24743 24744 + 24740 24739 24744 + 24744 24745 24740 + 24746 24740 24745 + 24741 24740 24746 + 24742 24671 24747 + 24748 24742 24747 + 24744 24742 24748 + 24742 24744 24743 + 24747 24671 24670 + 24747 24670 24669 + 24669 24749 24747 + 24747 24749 24750 + 24750 24748 24747 + 24748 24750 24751 + 24752 24748 24751 + 24748 24752 24744 + 24744 24752 24753 + 24753 24745 24744 + 24669 24668 24749 + 24668 24754 24749 + 24749 24754 24755 + 24755 24750 24749 + 24750 24755 24751 + 24754 24668 24679 + 24679 24755 24754 + 24755 24679 24678 + 24756 24755 24678 + 24755 24756 24751 + 24751 24756 24757 + 24757 24758 24751 + 24751 24758 24753 + 24753 24752 24751 + 24756 24678 24684 + 24684 24757 24756 + 24759 24757 24684 + 24757 24759 24760 + 24760 24758 24757 + 24758 24760 24761 + 24761 24753 24758 + 24753 24761 24745 + 24761 24762 24745 + 24745 24762 24746 + 24684 24688 24759 + 24763 24759 24688 + 24760 24759 24763 + 24763 24764 24760 + 24760 24764 24765 + 24765 24761 24760 + 24762 24761 24765 + 24765 24766 24762 + 24746 24762 24766 + 24688 24693 24763 + 24767 24763 24693 + 24764 24763 24767 + 24767 24768 24764 + 24764 24768 24765 + 24768 24769 24765 + 24766 24765 24769 + 24770 24766 24769 + 24766 24770 24771 + 24771 24746 24766 + 24741 24746 24771 + 24693 24698 24767 + 24767 24698 24772 + 24772 24773 24767 + 24768 24767 24773 + 24773 24774 24768 + 24769 24768 24774 + 24774 24775 24769 + 24775 24770 24769 + 24697 24772 24698 + 24776 24772 24697 + 24772 24776 24777 + 24777 24773 24772 + 24773 24777 24778 + 24778 24774 24773 + 24774 24778 24779 + 24779 24775 24774 + 24770 24775 24779 + 24776 24697 24703 + 24776 24703 24780 + 24780 24781 24776 + 24781 24777 24776 + 24778 24777 24781 + 24781 24782 24778 + 24778 24782 24783 + 24779 24778 24783 + 24703 24784 24780 + 24780 24784 24785 + 24786 24780 24785 + 24781 24780 24786 + 24787 24781 24786 + 24781 24787 24782 + 24782 24787 24788 + 24788 24783 24782 + 24784 24703 24702 + 24702 24789 24784 + 24789 24790 24784 + 24790 24785 24784 + 24785 24790 24791 + 24791 24792 24785 + 24786 24785 24792 + 24792 24793 24786 + 24787 24786 24793 + 24788 24787 24793 + 24707 24789 24702 + 24790 24789 24707 + 24790 24707 24794 + 24794 24791 24790 + 24794 24795 24791 + 24792 24791 24795 + 24796 24792 24795 + 24793 24792 24796 + 24796 24797 24793 + 24793 24797 24788 + 24797 24798 24788 + 24783 24788 24798 + 24794 24707 24706 + 24799 24794 24706 + 24799 24800 24794 + 24800 24795 24794 + 24795 24800 24801 + 24801 24796 24795 + 24801 24802 24796 + 24802 24797 24796 + 24798 24797 24802 + 24802 24803 24798 + 24783 24798 24803 + 24706 24804 24799 + 24799 24804 24805 + 24806 24799 24805 + 24799 24806 24807 + 24807 24800 24799 + 24800 24807 24808 + 24808 24801 24800 + 24710 24804 24706 + 24710 24805 24804 + 24805 24710 24809 + 24809 24810 24805 + 24805 24810 24811 + 24811 24806 24805 + 24807 24806 24811 + 24811 24812 24807 + 24808 24807 24812 + 24809 24710 24709 + 24709 24813 24809 + 24814 24809 24813 + 24809 24814 24815 + 24815 24810 24809 + 24811 24810 24815 + 24816 24811 24815 + 24812 24811 24816 + 24817 24813 24709 + 24813 24817 24818 + 24818 24819 24813 + 24813 24819 24814 + 24820 24814 24819 + 24815 24814 24820 + 24820 24821 24815 + 24815 24821 24816 + 24709 24713 24817 + 24817 24713 24718 + 24718 24822 24817 + 24818 24817 24822 + 24822 24823 24818 + 24824 24818 24823 + 24819 24818 24824 + 24824 24825 24819 + 24819 24825 24820 + 24826 24820 24825 + 24820 24826 24821 + 24827 24822 24718 + 24823 24822 24827 + 24827 24828 24823 + 24823 24828 24829 + 24829 24830 24823 + 24823 24830 24824 + 24718 24831 24827 + 24832 24827 24831 + 24828 24827 24832 + 24832 24833 24828 + 24829 24828 24833 + 24717 24831 24718 + 24831 24717 24834 + 24834 24835 24831 + 24831 24835 24832 + 24836 24832 24835 + 24833 24832 24836 + 24837 24834 24717 + 24838 24834 24837 + 24835 24834 24838 + 24838 24839 24835 + 24835 24839 24836 + 24717 24716 24837 + 24716 24840 24837 + 24840 24841 24837 + 24842 24837 24841 + 24837 24842 24843 + 24843 24844 24837 + 24837 24844 24838 + 24722 24840 24716 + 24840 24722 24845 + 24845 24846 24840 + 24840 24846 24847 + 24847 24841 24840 + 24848 24841 24847 + 24841 24848 24842 + 24849 24842 24848 + 24843 24842 24849 + 24845 24722 24721 + 24721 24850 24845 + 24845 24850 24851 + 24851 24852 24845 + 24846 24845 24852 + 24852 24853 24846 + 24847 24846 24853 + 24854 24850 24721 + 24850 24854 24855 + 24855 24851 24850 + 24851 24855 24856 + 24856 24857 24851 + 24851 24857 24858 + 24858 24852 24851 + 24853 24852 24858 + 24721 24727 24854 + 24854 24727 24859 + 24859 24860 24854 + 24855 24854 24860 + 24860 24861 24855 + 24856 24855 24861 + 24859 24727 24726 + 24726 24862 24859 + 24863 24859 24862 + 24859 24863 24864 + 24864 24860 24859 + 24860 24864 24865 + 24865 24861 24860 + 24866 24862 24726 + 24867 24862 24866 + 24862 24867 24863 + 24868 24863 24867 + 24864 24863 24868 + 24868 24869 24864 + 24864 24869 24870 + 24870 24865 24864 + 24726 24725 24866 + 24871 24866 24725 + 24872 24866 24871 + 24866 24872 24867 + 24725 24731 24871 + 24736 24871 24731 + 24873 24871 24736 + 24871 24873 24872 + 24874 24872 24873 + 24867 24872 24874 + 24874 24875 24867 + 24867 24875 24876 + 24876 24877 24867 + 24877 24868 24867 + 24736 24878 24873 + 24873 24878 24879 + 24879 24880 24873 + 24873 24880 24874 + 24878 24736 24735 + 24735 24881 24878 + 24879 24878 24881 + 24882 24879 24881 + 24883 24879 24882 + 24880 24879 24883 + 24880 24883 24884 + 24884 24885 24880 + 24880 24885 24874 + 24771 24881 24735 + 24881 24771 24886 + 24886 24887 24881 + 24881 24887 24882 + 24771 24735 24741 + 24770 24886 24771 + 24888 24886 24770 + 24888 24887 24886 + 24887 24888 24889 + 24889 24882 24887 + 24882 24889 24890 + 24890 24891 24882 + 24882 24891 24883 + 24883 24891 24892 + 24892 24884 24883 + 24770 24893 24888 + 24888 24893 24894 + 24894 24889 24888 + 24890 24889 24894 + 24894 24895 24890 + 24890 24895 24896 + 24896 24897 24890 + 24891 24890 24897 + 24779 24893 24770 + 24893 24779 24898 + 24898 24894 24893 + 24895 24894 24898 + 24898 24899 24895 + 24895 24899 24900 + 24900 24896 24895 + 24901 24896 24900 + 24896 24901 24902 + 24902 24897 24896 + 24903 24898 24779 + 24899 24898 24903 + 24903 24904 24899 + 24900 24899 24904 + 24904 24905 24900 + 24905 24906 24900 + 24907 24900 24906 + 24900 24907 24901 + 24783 24903 24779 + 24803 24903 24783 + 24904 24903 24803 + 24803 24908 24904 + 24904 24908 24909 + 24909 24905 24904 + 24909 24910 24905 + 24905 24910 24911 + 24911 24906 24905 + 24912 24906 24911 + 24906 24912 24907 + 24908 24803 24802 + 24802 24913 24908 + 24914 24908 24913 + 24914 24909 24908 + 24909 24914 24915 + 24910 24909 24915 + 24910 24915 24916 + 24916 24911 24910 + 24917 24911 24916 + 24911 24917 24912 + 24913 24802 24801 + 24801 24808 24913 + 24913 24808 24918 + 24918 24914 24913 + 24914 24918 24919 + 24915 24914 24919 + 24915 24919 24916 + 24919 24920 24916 + 24921 24916 24920 + 24916 24921 24917 + 24922 24917 24921 + 24912 24917 24922 + 24918 24808 24812 + 24812 24923 24918 + 24923 24919 24918 + 24919 24923 24924 + 24920 24919 24924 + 24921 24920 24924 + 24924 24925 24921 + 24921 24925 24926 + 24926 24922 24921 + 24923 24812 24816 + 24923 24816 24927 + 24927 24924 24923 + 24925 24924 24927 + 24927 24928 24925 + 24925 24928 24929 + 24929 24926 24925 + 24926 24929 24930 + 24931 24926 24930 + 24922 24926 24931 + 24821 24927 24816 + 24928 24927 24821 + 24821 24932 24928 + 24929 24928 24932 + 24930 24929 24932 + 24932 24826 24930 + 24930 24826 24933 + 24934 24930 24933 + 24931 24930 24934 + 24826 24932 24821 + 24825 24933 24826 + 24933 24825 24824 + 24824 24935 24933 + 24933 24935 24936 + 24936 24937 24933 + 24933 24937 24938 + 24938 24934 24933 + 24935 24824 24830 + 24830 24939 24935 + 24936 24935 24939 + 24939 24940 24936 + 24941 24936 24940 + 24936 24941 24942 + 24942 24937 24936 + 24937 24942 24943 + 24943 24938 24937 + 24939 24830 24829 + 24829 24944 24939 + 24939 24944 24945 + 24945 24940 24939 + 24946 24940 24945 + 24940 24946 24941 + 24947 24941 24946 + 24942 24941 24947 + 24947 24948 24942 + 24943 24942 24948 + 24944 24829 24949 + 24949 24950 24944 + 24944 24950 24951 + 24945 24944 24951 + 24833 24949 24829 + 24952 24949 24833 + 24950 24949 24952 + 24950 24952 24953 + 24953 24951 24950 + 24951 24953 24954 + 24951 24954 24955 + 24955 24956 24951 + 24951 24956 24945 + 24833 24957 24952 + 24952 24957 24958 + 24953 24952 24958 + 24958 24959 24953 + 24954 24953 24959 + 24959 24960 24954 + 24955 24954 24960 + 24836 24957 24833 + 24957 24836 24961 + 24961 24958 24957 + 24958 24961 24962 + 24962 24963 24958 + 24958 24963 24964 + 24964 24959 24958 + 24960 24959 24964 + 24965 24961 24836 + 24962 24961 24965 + 24965 24966 24962 + 24962 24966 24967 + 24967 24968 24962 + 24963 24962 24968 + 24968 24969 24963 + 24964 24963 24969 + 24836 24839 24965 + 24970 24965 24839 + 24965 24970 24971 + 24971 24966 24965 + 24966 24971 24972 + 24972 24967 24966 + 24839 24838 24970 + 24973 24970 24838 + 24971 24970 24973 + 24973 24974 24971 + 24972 24971 24974 + 24974 24975 24972 + 24975 24976 24972 + 24976 24977 24972 + 24967 24972 24977 + 24838 24844 24973 + 24978 24973 24844 + 24973 24978 24979 + 24979 24974 24973 + 24974 24979 24980 + 24980 24975 24974 + 24975 24980 24981 + 24981 24976 24975 + 24976 24981 24982 + 24982 24977 24976 + 24844 24843 24978 + 24983 24978 24843 + 24979 24978 24983 + 24983 24984 24979 + 24985 24979 24984 + 24985 24980 24979 + 24980 24985 24986 + 24981 24980 24986 + 24843 24987 24983 + 24988 24983 24987 + 24983 24988 24989 + 24989 24984 24983 + 24984 24989 24990 + 24990 24985 24984 + 24985 24990 24991 + 24991 24986 24985 + 24849 24987 24843 + 24992 24987 24849 + 24987 24992 24988 + 24993 24988 24992 + 24989 24988 24993 + 24993 24994 24989 + 24989 24994 24995 + 24995 24990 24989 + 24990 24995 24996 + 24991 24990 24996 + 24849 24997 24992 + 24992 24997 24998 + 24998 24999 24992 + 24992 24999 24993 + 25000 24993 24999 + 24993 25000 25001 + 25001 24994 24993 + 24997 24849 25002 + 25002 25003 24997 + 24997 25003 25004 + 24998 24997 25004 + 24848 25002 24849 + 25005 25002 24848 + 25003 25002 25005 + 25005 25006 25003 + 25003 25006 25007 + 25007 25004 25003 + 24848 25008 25005 + 25005 25008 25009 + 25009 25010 25005 + 25006 25005 25010 + 25010 25011 25006 + 25007 25006 25011 + 24847 25008 24848 + 25008 24847 25009 + 24847 25012 25009 + 25009 25012 25013 + 25009 25013 25014 + 25014 25010 25009 + 25011 25010 25014 + 24853 25012 24847 + 25015 25012 24853 + 25012 25015 25013 + 25013 25015 25016 + 25013 25016 25017 + 25017 25014 25013 + 25018 25014 25017 + 25014 25018 25011 + 24853 25019 25015 + 25020 25015 25019 + 25015 25020 25016 + 25016 25020 25021 + 25016 25021 25022 + 25022 25017 25016 + 25023 25017 25022 + 25017 25023 25018 + 24858 25019 24853 + 25019 24858 25024 + 25024 25025 25019 + 25025 25020 25019 + 25026 25020 25025 + 25020 25026 25021 + 25021 25026 25027 + 25027 25028 25021 + 25028 25022 25021 + 25029 25024 24858 + 25030 25024 25029 + 25025 25024 25030 + 25030 25031 25025 + 25025 25031 25026 + 25032 25026 25031 + 25026 25032 25027 + 24858 24857 25029 + 25033 25029 24857 + 25029 25033 25034 + 25034 25035 25029 + 25029 25035 25030 + 24857 24856 25033 + 25036 25033 24856 + 25033 25036 25037 + 25034 25033 25037 + 25038 25034 25037 + 25038 25039 25034 + 25035 25034 25039 + 25039 25040 25035 + 25040 25030 25035 + 24856 25041 25036 + 25042 25036 25041 + 25036 25042 25043 + 25043 25037 25036 + 25037 25043 25044 + 25044 25038 25037 + 24861 25041 24856 + 25045 25041 24861 + 25041 25045 25042 + 25046 25042 25045 + 25042 25046 25047 + 25043 25042 25047 + 25043 25047 25048 + 25044 25043 25048 + 24861 24865 25045 + 25045 24865 24870 + 24870 25049 25045 + 25045 25049 25046 + 25050 25046 25049 + 25046 25050 25051 + 25051 25047 25046 + 25047 25051 25052 + 25052 25048 25047 + 25053 25049 24870 + 25049 25053 25050 + 25054 25050 25053 + 25050 25054 25055 + 25051 25050 25055 + 25056 25051 25055 + 25056 25052 25051 + 25057 25052 25056 + 25048 25052 25057 + 24870 25058 25053 + 25053 25058 25059 + 25059 25060 25053 + 25053 25060 25054 + 25061 25054 25060 + 25054 25061 25062 + 25062 25055 25054 + 25058 24870 24869 + 24869 25063 25058 + 25059 25058 25063 + 25063 25064 25059 + 25065 25059 25064 + 25059 25065 25066 + 25066 25060 25059 + 25060 25066 25061 + 25023 25061 25066 + 25062 25061 25023 + 25063 24869 24868 + 24868 25067 25063 + 25063 25067 25068 + 25068 25064 25063 + 25007 25064 25068 + 25064 25007 25065 + 25011 25065 25007 + 25066 25065 25011 + 25011 25018 25066 + 25066 25018 25023 + 25067 24868 25069 + 25069 25070 25067 + 25070 25068 25067 + 25004 25068 25070 + 25068 25004 25007 + 24868 24877 25069 + 25069 24877 25071 + 25071 25072 25069 + 25069 25072 25073 + 25073 25070 25069 + 25074 25070 25073 + 25070 25074 25004 + 25004 25074 24998 + 25071 24877 24876 + 24876 25075 25071 + 25076 25071 25075 + 25072 25071 25076 + 25076 25077 25072 + 25073 25072 25077 + 25077 25078 25073 + 25079 25073 25078 + 25073 25079 25074 + 25080 25075 24876 + 25075 25080 25081 + 25081 25082 25075 + 25075 25082 25076 + 25083 25076 25082 + 25077 25076 25083 + 24876 25084 25080 + 25080 25084 25085 + 25085 25086 25080 + 25080 25086 25087 + 25087 25081 25080 + 25088 25081 25087 + 25082 25081 25088 + 25084 24876 24875 + 24875 25089 25084 + 25085 25084 25089 + 25089 25090 25085 + 25091 25085 25090 + 25085 25091 25092 + 25092 25086 25085 + 25086 25092 25093 + 25093 25087 25086 + 25089 24875 24874 + 24874 25094 25089 + 25089 25094 25095 + 25095 25090 25089 + 25096 25090 25095 + 25090 25096 25091 + 25097 25091 25096 + 25092 25091 25097 + 25094 24874 24885 + 24885 25098 25094 + 25094 25098 25099 + 25095 25094 25099 + 25099 25100 25095 + 25101 25095 25100 + 25095 25101 25096 + 24884 25098 24885 + 25098 24884 24892 + 24892 25099 25098 + 25099 24892 25102 + 25099 25102 25103 + 25103 25100 25099 + 25100 25103 25104 + 25104 25105 25100 + 25100 25105 25101 + 25106 25101 25105 + 25096 25101 25106 + 25102 24892 25107 + 25107 25108 25102 + 25102 25108 25109 + 25109 25103 25102 + 25104 25103 25109 + 24891 25107 24892 + 24897 25107 24891 + 25107 24897 24902 + 24902 25108 25107 + 25108 24902 25110 + 25110 25109 25108 + 25111 25109 25110 + 25109 25111 25104 + 25104 25111 25112 + 25112 25113 25104 + 25105 25104 25113 + 25113 25114 25105 + 25105 25114 25106 + 25110 24902 24901 + 24901 25115 25110 + 25116 25110 25115 + 25116 25111 25110 + 25111 25116 25112 + 25116 25117 25112 + 25112 25117 25118 + 25112 25118 24948 + 24948 25113 25112 + 25114 25113 24948 + 25119 25115 24901 + 25119 25120 25115 + 25115 25120 25116 + 25117 25116 25120 + 25121 25117 25120 + 25117 25121 24943 + 25118 25117 24943 + 24948 25118 24943 + 24901 24907 25119 + 25119 24907 24912 + 25122 25119 24912 + 25123 25119 25122 + 25119 25123 25120 + 25120 25123 25124 + 25124 25125 25120 + 25120 25125 25121 + 24938 25121 25125 + 24938 24943 25121 + 24922 25122 24912 + 25122 24922 25126 + 25122 25126 25123 + 25124 25123 25126 + 25126 24931 25124 + 24934 25124 24931 + 24934 25125 25124 + 25125 24934 24938 + 25126 24922 24931 + 24948 24947 25114 + 25114 24947 25127 + 25127 25106 25114 + 25106 25127 25128 + 25128 25129 25106 + 25106 25129 25096 + 24946 25127 24947 + 25128 25127 24946 + 24946 25130 25128 + 25128 25130 25131 + 25131 25132 25128 + 25129 25128 25132 + 25132 25097 25129 + 25096 25129 25097 + 24945 25130 24946 + 25130 24945 25133 + 25133 25131 25130 + 25133 25134 25131 + 25131 25134 25135 + 25135 25132 25131 + 25097 25132 25135 + 25135 25136 25097 + 25097 25136 25092 + 25137 25133 24945 + 25134 25133 25137 + 25137 25138 25134 + 25134 25138 25139 + 25135 25134 25139 + 25139 25140 25135 + 25136 25135 25140 + 25140 25141 25136 + 25092 25136 25141 + 25141 25093 25092 + 25142 25137 24945 + 25143 25137 25142 + 25138 25137 25143 + 25138 25143 25144 + 25144 25139 25138 + 24956 25142 24945 + 25142 24956 25145 + 25146 25142 25145 + 25142 25146 25147 + 25147 25148 25142 + 25142 25148 25143 + 25143 25148 25149 + 25149 25144 25143 + 25145 24956 24955 + 24955 25150 25145 + 25145 25150 25151 + 25151 25152 25145 + 25145 25152 25146 + 25152 25153 25146 + 25147 25146 25153 + 25150 24955 25154 + 25154 25155 25150 + 25150 25155 25000 + 25000 25151 25150 + 24999 25151 25000 + 25151 24999 24998 + 24998 25152 25151 + 25153 25152 24998 + 24960 25154 24955 + 25156 25154 24960 + 25155 25154 25156 + 25156 25157 25155 + 25155 25157 25001 + 25001 25000 25155 + 24960 25158 25156 + 25156 25158 25159 + 25159 25160 25156 + 25157 25156 25160 + 25160 25161 25157 + 25001 25157 25161 + 25161 25162 25001 + 24994 25001 25162 + 24964 25158 24960 + 25158 24964 25163 + 25163 25159 25158 + 25159 25163 25164 + 25164 25165 25159 + 25159 25165 25166 + 25166 25160 25159 + 25161 25160 25166 + 25166 25167 25161 + 25162 25161 25167 + 24969 25163 24964 + 25164 25163 24969 + 24969 25168 25164 + 25169 25164 25168 + 25164 25169 25170 + 25165 25164 25170 + 25165 25170 25171 + 25171 25166 25165 + 25167 25166 25171 + 25172 25168 24969 + 25168 25172 25173 + 25173 25169 25168 + 25174 25169 25173 + 25170 25169 25174 + 25174 25175 25170 + 25170 25175 25176 + 25176 25171 25170 + 24969 24968 25172 + 25172 24968 24967 + 24967 25177 25172 + 25178 25172 25177 + 25172 25178 25173 + 25173 25178 25179 + 25179 25180 25173 + 25173 25180 25174 + 24977 25177 24967 + 25177 24977 25181 + 25181 25182 25177 + 25182 25178 25177 + 25178 25182 25183 + 25179 25178 25183 + 25184 25179 25183 + 25180 25179 25184 + 25184 25185 25180 + 25185 25174 25180 + 24982 25181 24977 + 25181 24982 25186 + 25187 25181 25186 + 25182 25181 25187 + 25187 25183 25182 + 25183 25187 25188 + 25183 25188 25184 + 25188 25189 25184 + 25190 25184 25189 + 25185 25184 25190 + 25191 25186 24982 + 25186 25191 25192 + 25192 25187 25186 + 25187 25192 25188 + 25188 25192 25193 + 25193 25194 25188 + 25189 25188 25194 + 24982 25195 25191 + 25191 25195 25196 + 25196 25197 25191 + 25193 25191 25197 + 25191 25193 25192 + 24981 25195 24982 + 25196 25195 24981 + 25196 24981 24986 + 25198 25196 24986 + 25196 25198 25199 + 25199 25197 25196 + 25197 25199 25194 + 25194 25193 25197 + 24986 24991 25198 + 25200 25198 24991 + 25199 25198 25200 + 25200 25201 25199 + 25194 25199 25201 + 25201 25202 25194 + 25202 25189 25194 + 25202 25203 25189 + 25189 25203 25190 + 24991 24996 25200 + 25204 25200 24996 + 25200 25204 25205 + 25205 25201 25200 + 25201 25205 25203 + 25203 25202 25201 + 24996 25206 25204 + 25207 25204 25206 + 25204 25207 25208 + 25205 25204 25208 + 25203 25205 25208 + 25190 25203 25208 + 25208 25176 25190 + 25176 25209 25190 + 25190 25209 25185 + 25206 24996 24995 + 24995 25162 25206 + 25206 25162 25167 + 25206 25167 25207 + 25171 25207 25167 + 25207 25171 25176 + 25176 25208 25207 + 25162 24995 24994 + 25174 25185 25209 + 25175 25174 25209 + 25209 25176 25175 + 25210 25153 24998 + 25153 25210 25211 + 25211 25212 25153 + 25153 25212 25147 + 25074 25210 24998 + 25211 25210 25074 + 25074 25079 25211 + 25211 25079 25213 + 25213 25214 25211 + 25212 25211 25214 + 25214 25215 25212 + 25147 25212 25215 + 25215 25216 25147 + 25148 25147 25216 + 25216 25149 25148 + 25078 25213 25079 + 25213 25078 25217 + 25217 25218 25213 + 25213 25218 25219 + 25219 25214 25213 + 25215 25214 25219 + 25219 25220 25215 + 25215 25220 25221 + 25221 25216 25215 + 25149 25216 25221 + 25217 25078 25077 + 25077 25222 25217 + 25223 25217 25222 + 25223 25224 25217 + 25218 25217 25224 + 25224 25225 25218 + 25219 25218 25225 + 25225 25226 25219 + 25220 25219 25226 + 25083 25222 25077 + 25222 25083 25227 + 25227 25223 25222 + 25223 25227 25228 + 25228 25229 25223 + 25224 25223 25229 + 25230 25224 25229 + 25225 25224 25230 + 25231 25227 25083 + 25227 25231 25232 + 25228 25227 25232 + 25228 25232 25233 + 25233 25234 25228 + 25229 25228 25234 + 25234 25235 25229 + 25235 25230 25229 + 25083 25236 25231 + 25237 25231 25236 + 25231 25237 25238 + 25238 25232 25231 + 25232 25238 25239 + 25239 25233 25232 + 25082 25236 25083 + 25088 25236 25082 + 25236 25088 25237 + 25240 25237 25088 + 25237 25240 25241 + 25238 25237 25241 + 25238 25241 25242 + 25242 25239 25238 + 25239 25242 25243 + 25244 25239 25243 + 25233 25239 25244 + 25088 25245 25240 + 25246 25240 25245 + 25240 25246 25247 + 25247 25241 25240 + 25241 25247 25248 + 25248 25242 25241 + 25242 25248 25249 + 25249 25243 25242 + 25087 25245 25088 + 25250 25245 25087 + 25245 25250 25246 + 25251 25246 25250 + 25246 25251 25252 + 25247 25246 25252 + 25247 25252 25253 + 25248 25247 25253 + 25249 25248 25253 + 25087 25093 25250 + 25250 25093 25141 + 25141 25254 25250 + 25250 25254 25251 + 25255 25251 25254 + 25251 25255 25256 + 25256 25252 25251 + 25252 25256 25257 + 25257 25253 25252 + 25258 25254 25141 + 25254 25258 25255 + 25259 25255 25258 + 25256 25255 25259 + 25259 25260 25256 + 25261 25256 25260 + 25261 25257 25256 + 25262 25257 25261 + 25253 25257 25262 + 25141 25140 25258 + 25258 25140 25139 + 25139 25263 25258 + 25258 25263 25259 + 25264 25259 25263 + 25259 25264 25265 + 25265 25260 25259 + 25260 25265 25261 + 25266 25263 25139 + 25263 25266 25264 + 25267 25264 25266 + 25265 25264 25267 + 25267 25268 25265 + 25269 25265 25268 + 25269 25270 25265 + 25265 25270 25261 + 25139 25144 25266 + 25266 25144 25149 + 25149 25271 25266 + 25266 25271 25267 + 25271 25221 25267 + 25221 25272 25267 + 25267 25272 25268 + 25272 25273 25268 + 25268 25273 25269 + 25221 25271 25149 + 25272 25221 25220 + 25220 25274 25272 + 25273 25272 25274 + 25274 25275 25273 + 25276 25273 25275 + 25273 25276 25269 + 25269 25276 25277 + 25277 25278 25269 + 25270 25269 25278 + 25226 25274 25220 + 25274 25226 25279 + 25279 25275 25274 + 25275 25279 25280 + 25280 25276 25275 + 25277 25276 25280 + 25280 25281 25277 + 25282 25277 25281 + 25277 25282 25283 + 25278 25277 25283 + 25279 25226 25225 + 25225 25284 25279 + 25285 25279 25284 + 25279 25285 25280 + 25280 25285 25286 + 25286 25281 25280 + 25281 25286 25287 + 25281 25287 25282 + 25230 25284 25225 + 25284 25230 25288 + 25288 25285 25284 + 25286 25285 25288 + 25288 25289 25286 + 25290 25286 25289 + 25286 25290 25287 + 25287 25290 25291 + 25291 25292 25287 + 25287 25292 25282 + 25230 25293 25288 + 25288 25293 25294 + 25294 25289 25288 + 25289 25294 25291 + 25291 25290 25289 + 25235 25293 25230 + 25293 25235 25295 + 25294 25293 25295 + 25291 25294 25295 + 25292 25291 25295 + 25295 25296 25292 + 25297 25292 25296 + 25292 25297 25282 + 25282 25297 25298 + 25298 25283 25282 + 25299 25283 25298 + 25283 25299 25278 + 25296 25295 25235 + 25235 25234 25296 + 25296 25234 25233 + 25233 25300 25296 + 25297 25296 25300 + 25298 25297 25300 + 25300 25244 25298 + 25298 25244 25243 + 25243 25301 25298 + 25301 25299 25298 + 25244 25300 25233 + 25301 25243 25249 + 25302 25301 25249 + 25301 25302 25303 + 25303 25299 25301 + 25299 25303 25304 + 25304 25305 25299 + 25299 25305 25278 + 25305 25270 25278 + 25261 25270 25305 + 25249 25306 25302 + 25302 25306 25262 + 25303 25302 25262 + 25304 25303 25262 + 25261 25304 25262 + 25305 25304 25261 + 25253 25306 25249 + 25262 25306 25253 + 25023 25307 25062 + 25022 25307 25023 + 25307 25022 25308 + 25308 25062 25307 + 25308 25309 25062 + 25055 25062 25309 + 25309 25056 25055 + 25022 25028 25308 + 25308 25028 25310 + 25310 25311 25308 + 25308 25311 25312 + 25312 25309 25308 + 25056 25309 25312 + 25312 25313 25056 + 25056 25313 25057 + 25310 25028 25314 + 25315 25310 25314 + 25310 25315 25316 + 25311 25310 25316 + 25311 25316 25317 + 25317 25312 25311 + 25313 25312 25317 + 25317 25318 25313 + 25318 25057 25313 + 25028 25027 25314 + 25319 25314 25027 + 25314 25319 25315 + 25319 25320 25315 + 25316 25315 25320 + 25320 25321 25316 + 25322 25316 25321 + 25316 25322 25317 + 25323 25317 25322 + 25318 25317 25323 + 25027 25032 25319 + 25319 25032 25324 + 25324 25325 25319 + 25320 25319 25325 + 25321 25320 25325 + 25325 25326 25321 + 25321 25326 25327 + 25327 25322 25321 + 25327 25328 25322 + 25322 25328 25323 + 25324 25032 25031 + 25031 25030 25324 + 25030 25329 25324 + 25324 25329 25326 + 25326 25325 25324 + 25040 25329 25030 + 25329 25040 25330 + 25326 25329 25330 + 25326 25330 25327 + 25327 25330 25331 + 25328 25327 25331 + 25328 25331 25332 + 25323 25328 25332 + 25332 25333 25323 + 25333 25334 25323 + 25323 25334 25318 + 25331 25330 25040 + 25040 25039 25331 + 25331 25039 25038 + 25038 25332 25331 + 25333 25332 25038 + 25038 25044 25333 + 25335 25333 25044 + 25334 25333 25335 + 25318 25334 25335 + 25335 25057 25318 + 25057 25335 25048 + 25048 25335 25044 + 25336 25337 25338 + 25339 25337 25336 + 25340 25337 25339 + 25337 25340 25341 + 25341 25342 25337 + 25343 25336 25338 + 25344 25336 25343 + 25345 25336 25344 + 25336 25345 25339 + 25338 25346 25343 + 25347 25343 25346 + 25343 25347 25348 + 25348 25349 25343 + 25343 25349 25344 + 25350 25346 25338 + 25350 25351 25346 + 25346 25351 25347 + 25352 25347 25351 + 25348 25347 25352 + 25352 25353 25348 + 25354 25348 25353 + 25349 25348 25354 + 25338 25355 25350 + 25350 25355 25356 + 25356 25357 25350 + 25351 25350 25357 + 25357 25358 25351 + 25351 25358 25352 + 25355 25338 25359 + 25355 25359 25360 + 25360 25361 25355 + 25355 25361 25356 + 25362 25359 25338 + 25360 25359 25362 + 25363 25360 25362 + 25364 25360 25363 + 25361 25360 25364 + 25361 25364 25365 + 25365 25366 25361 + 25361 25366 25356 + 25342 25362 25338 + 25341 25362 25342 + 25362 25341 25363 + 25341 25367 25363 + 25368 25363 25367 + 25363 25368 25364 + 25364 25368 25369 + 25369 25370 25364 + 25370 25365 25364 + 25367 25341 25340 + 25340 25371 25367 + 25372 25367 25371 + 25367 25372 25368 + 25368 25372 25369 + 25372 25373 25369 + 25374 25369 25373 + 25369 25374 25370 + 25340 25375 25371 + 25375 25376 25371 + 25377 25371 25376 + 25371 25377 25372 + 25373 25372 25377 + 25339 25375 25340 + 25375 25339 25378 + 25378 25379 25375 + 25376 25375 25379 + 25379 25380 25376 + 25380 25381 25376 + 25376 25381 25377 + 25382 25378 25339 + 25383 25378 25382 + 25379 25378 25383 + 25380 25379 25383 + 25380 25383 25384 + 25384 25385 25380 + 25381 25380 25385 + 25386 25381 25385 + 25377 25381 25386 + 25339 25345 25382 + 25387 25382 25345 + 25382 25387 25388 + 25382 25388 25383 + 25383 25388 25389 + 25384 25383 25389 + 25345 25390 25387 + 25391 25387 25390 + 25388 25387 25391 + 25391 25389 25388 + 25390 25345 25344 + 25390 25344 25392 + 25392 25393 25390 + 25390 25393 25391 + 25394 25391 25393 + 25389 25391 25394 + 25395 25392 25344 + 25396 25392 25395 + 25392 25396 25397 + 25397 25393 25392 + 25393 25397 25394 + 25344 25349 25395 + 25354 25395 25349 + 25398 25395 25354 + 25395 25398 25396 + 25396 25398 25399 + 25399 25400 25396 + 25397 25396 25400 + 25400 25401 25397 + 25394 25397 25401 + 25354 25402 25398 + 25398 25402 25403 + 25403 25399 25398 + 25399 25403 25404 + 25404 25405 25399 + 25399 25405 25406 + 25406 25400 25399 + 25401 25400 25406 + 25402 25354 25407 + 25407 25408 25402 + 25402 25408 25409 + 25409 25403 25402 + 25404 25403 25409 + 25409 25410 25404 + 25411 25404 25410 + 25405 25404 25411 + 25353 25407 25354 + 25412 25407 25353 + 25407 25412 25413 + 25413 25408 25407 + 25408 25413 25414 + 25414 25409 25408 + 25409 25414 25415 + 25415 25410 25409 + 25353 25416 25412 + 25412 25416 25417 + 25417 25418 25412 + 25413 25412 25418 + 25418 25419 25413 + 25413 25419 25420 + 25420 25414 25413 + 25415 25414 25420 + 25416 25353 25352 + 25416 25352 25421 + 25421 25422 25416 + 25416 25422 25417 + 25423 25417 25422 + 25424 25417 25423 + 25417 25424 25425 + 25425 25418 25417 + 25419 25418 25425 + 25358 25421 25352 + 25426 25421 25358 + 25426 25422 25421 + 25422 25426 25423 + 25423 25426 25427 + 25428 25423 25427 + 25424 25423 25428 + 25428 25429 25424 + 25425 25424 25429 + 25358 25427 25426 + 25427 25358 25357 + 25427 25357 25356 + 25356 25430 25427 + 25427 25430 25428 + 25431 25428 25430 + 25429 25428 25431 + 25431 25432 25429 + 25429 25432 25433 + 25433 25434 25429 + 25429 25434 25425 + 25435 25430 25356 + 25430 25435 25431 + 25431 25435 25436 + 25436 25437 25431 + 25432 25431 25437 + 25437 25438 25432 + 25433 25432 25438 + 25356 25439 25435 + 25440 25435 25439 + 25435 25440 25436 + 25441 25436 25440 + 25442 25436 25441 + 25436 25442 25443 + 25443 25437 25436 + 25438 25437 25443 + 25439 25356 25366 + 25366 25444 25439 + 25445 25439 25444 + 25445 25446 25439 + 25446 25440 25439 + 25446 25447 25440 + 25440 25447 25441 + 25444 25366 25365 + 25365 25448 25444 + 25444 25448 25449 + 25449 25445 25444 + 25445 25449 25450 + 25445 25450 25447 + 25447 25446 25445 + 25448 25365 25370 + 25370 25451 25448 + 25451 25452 25448 + 25452 25449 25448 + 25452 25453 25449 + 25453 25450 25449 + 25450 25453 25454 + 25454 25441 25450 + 25441 25447 25450 + 25451 25370 25455 + 25451 25455 25456 + 25456 25452 25451 + 25452 25456 25457 + 25457 25453 25452 + 25453 25457 25458 + 25458 25454 25453 + 25374 25455 25370 + 25455 25374 25459 + 25459 25456 25455 + 25456 25459 25460 + 25457 25456 25460 + 25458 25457 25460 + 25460 25461 25458 + 25462 25458 25461 + 25458 25462 25463 + 25463 25454 25458 + 25374 25464 25459 + 25464 25465 25459 + 25459 25465 25460 + 25460 25465 25466 + 25466 25461 25460 + 25466 25467 25461 + 25467 25468 25461 + 25461 25468 25462 + 25373 25464 25374 + 25464 25373 25469 + 25465 25464 25469 + 25466 25465 25469 + 25469 25470 25466 + 25467 25466 25470 + 25470 25471 25467 + 25472 25467 25471 + 25468 25467 25472 + 25472 25473 25468 + 25462 25468 25473 + 25373 25474 25469 + 25469 25474 25386 + 25386 25475 25469 + 25469 25475 25476 + 25476 25470 25469 + 25471 25470 25476 + 25377 25474 25373 + 25386 25474 25377 + 25475 25386 25385 + 25385 25477 25475 + 25476 25475 25477 + 25477 25478 25476 + 25479 25476 25478 + 25476 25479 25471 + 25471 25479 25480 + 25480 25481 25471 + 25471 25481 25472 + 25477 25385 25384 + 25384 25482 25477 + 25477 25482 25483 + 25483 25478 25477 + 25484 25478 25483 + 25478 25484 25479 + 25480 25479 25484 + 25482 25384 25485 + 25485 25486 25482 + 25483 25482 25486 + 25486 25487 25483 + 25488 25483 25487 + 25483 25488 25484 + 25389 25485 25384 + 25489 25485 25389 + 25486 25485 25489 + 25486 25489 25490 + 25490 25487 25486 + 25491 25487 25490 + 25487 25491 25488 + 25492 25488 25491 + 25484 25488 25492 + 25492 25493 25484 + 25484 25493 25480 + 25389 25494 25489 + 25489 25494 25495 + 25495 25490 25489 + 25496 25490 25495 + 25490 25496 25491 + 25491 25496 25497 + 25497 25498 25491 + 25491 25498 25492 + 25394 25494 25389 + 25494 25394 25499 + 25499 25500 25494 + 25494 25500 25495 + 25501 25495 25500 + 25502 25495 25501 + 25495 25502 25496 + 25497 25496 25502 + 25401 25499 25394 + 25503 25499 25401 + 25500 25499 25503 + 25503 25504 25500 + 25500 25504 25501 + 25501 25504 25505 + 25505 25506 25501 + 25507 25501 25506 + 25501 25507 25502 + 25401 25508 25503 + 25503 25508 25509 + 25509 25510 25503 + 25504 25503 25510 + 25510 25505 25504 + 25406 25508 25401 + 25508 25406 25511 + 25511 25509 25508 + 25509 25511 25512 + 25512 25513 25509 + 25509 25513 25514 + 25514 25510 25509 + 25505 25510 25514 + 25515 25511 25406 + 25512 25511 25515 + 25515 25516 25512 + 25512 25516 25517 + 25517 25518 25512 + 25513 25512 25518 + 25406 25405 25515 + 25411 25515 25405 + 25515 25411 25519 + 25519 25516 25515 + 25516 25519 25520 + 25520 25517 25516 + 25517 25520 25521 + 25521 25522 25517 + 25517 25522 25523 + 25523 25518 25517 + 25519 25411 25524 + 25524 25525 25519 + 25519 25525 25526 + 25526 25520 25519 + 25521 25520 25526 + 25410 25524 25411 + 25527 25524 25410 + 25524 25527 25528 + 25528 25525 25524 + 25525 25528 25529 + 25529 25526 25525 + 25526 25529 25530 + 25530 25531 25526 + 25526 25531 25521 + 25410 25415 25527 + 25532 25527 25415 + 25528 25527 25532 + 25532 25533 25528 + 25528 25533 25534 + 25534 25529 25528 + 25530 25529 25534 + 25415 25535 25532 + 25536 25532 25535 + 25532 25536 25537 + 25537 25533 25532 + 25533 25537 25538 + 25538 25534 25533 + 25420 25535 25415 + 25539 25535 25420 + 25535 25539 25536 + 25540 25536 25539 + 25537 25536 25540 + 25420 25541 25539 + 25539 25541 25542 + 25542 25543 25539 + 25539 25543 25540 + 25541 25420 25419 + 25419 25544 25541 + 25542 25541 25544 + 25545 25542 25544 + 25546 25542 25545 + 25542 25546 25547 + 25547 25543 25542 + 25543 25547 25548 + 25548 25540 25543 + 25425 25544 25419 + 25544 25425 25434 + 25434 25549 25544 + 25544 25549 25545 + 25550 25545 25549 + 25551 25545 25550 + 25545 25551 25546 + 25552 25546 25551 + 25547 25546 25552 + 25552 25553 25547 + 25548 25547 25553 + 25434 25433 25549 + 25549 25433 25550 + 25554 25550 25433 + 25551 25550 25554 + 25554 25555 25551 + 25551 25555 25552 + 25556 25552 25555 + 25552 25556 25557 + 25557 25553 25552 + 25438 25554 25433 + 25558 25554 25438 + 25555 25554 25558 + 25558 25559 25555 + 25555 25559 25556 + 25560 25556 25559 + 25557 25556 25560 + 25438 25561 25558 + 25558 25561 25562 + 25562 25563 25558 + 25559 25558 25563 + 25563 25564 25559 + 25559 25564 25560 + 25443 25561 25438 + 25561 25443 25565 + 25565 25562 25561 + 25566 25562 25565 + 25562 25566 25567 + 25567 25563 25562 + 25564 25563 25567 + 25567 25568 25564 + 25564 25568 25569 + 25569 25560 25564 + 25565 25443 25442 + 25442 25570 25565 + 25570 25571 25565 + 25566 25565 25571 + 25571 25572 25566 + 25567 25566 25572 + 25572 25573 25567 + 25568 25567 25573 + 25574 25570 25442 + 25570 25574 25575 + 25575 25576 25570 + 25570 25576 25577 + 25577 25571 25570 + 25577 25572 25571 + 25572 25577 25578 + 25578 25573 25572 + 25442 25579 25574 + 25574 25579 25463 + 25463 25580 25574 + 25575 25574 25580 + 25580 25581 25575 + 25582 25575 25581 + 25576 25575 25582 + 25441 25579 25442 + 25579 25441 25454 + 25454 25463 25579 + 25582 25583 25576 + 25583 25582 25584 + 25583 25584 25585 + 25585 25586 25583 + 25583 25586 25577 + 25577 25576 25583 + 25584 25582 25587 + 25587 25588 25584 + 25584 25588 25589 + 25589 25585 25584 + 25590 25585 25589 + 25586 25585 25590 + 25581 25587 25582 + 25587 25581 25591 + 25592 25587 25591 + 25587 25592 25588 + 25592 25593 25588 + 25588 25593 25594 + 25594 25595 25588 + 25588 25595 25589 + 25596 25591 25581 + 25591 25596 25473 + 25473 25597 25591 + 25592 25591 25597 + 25597 25598 25592 + 25598 25599 25592 + 25599 25593 25592 + 25581 25580 25596 + 25596 25580 25463 + 25463 25462 25596 + 25473 25596 25462 + 25597 25473 25472 + 25598 25597 25472 + 25600 25598 25472 + 25598 25600 25599 + 25599 25600 25481 + 25481 25601 25599 + 25593 25599 25601 + 25601 25594 25593 + 25602 25594 25601 + 25594 25602 25603 + 25603 25595 25594 + 25481 25600 25472 + 25601 25481 25480 + 25480 25604 25601 + 25601 25604 25602 + 25604 25605 25602 + 25603 25602 25605 + 25605 25606 25603 + 25607 25603 25606 + 25595 25603 25607 + 25607 25589 25595 + 25604 25480 25493 + 25493 25605 25604 + 25605 25493 25492 + 25492 25606 25605 + 25606 25492 25498 + 25498 25608 25606 + 25606 25608 25607 + 25609 25607 25608 + 25589 25607 25609 + 25609 25610 25589 + 25589 25610 25590 + 25608 25498 25497 + 25497 25611 25608 + 25608 25611 25609 + 25609 25611 25612 + 25612 25613 25609 + 25610 25609 25613 + 25613 25614 25610 + 25590 25610 25614 + 25611 25497 25615 + 25615 25612 25611 + 25612 25615 25616 + 25616 25617 25612 + 25612 25617 25618 + 25618 25613 25612 + 25614 25613 25618 + 25502 25615 25497 + 25616 25615 25502 + 25502 25507 25616 + 25616 25507 25619 + 25619 25620 25616 + 25617 25616 25620 + 25620 25621 25617 + 25618 25617 25621 + 25621 25622 25618 + 25623 25618 25622 + 25618 25623 25614 + 25506 25619 25507 + 25619 25506 25624 + 25624 25625 25619 + 25619 25625 25626 + 25626 25620 25619 + 25621 25620 25626 + 25626 25627 25621 + 25621 25627 25628 + 25628 25622 25621 + 25624 25506 25505 + 25505 25629 25624 + 25624 25629 25630 + 25630 25631 25624 + 25625 25624 25631 + 25631 25632 25625 + 25625 25632 25633 + 25633 25626 25625 + 25627 25626 25633 + 25514 25629 25505 + 25629 25514 25634 + 25634 25630 25629 + 25635 25630 25634 + 25630 25635 25636 + 25636 25631 25630 + 25632 25631 25636 + 25636 25637 25632 + 25632 25637 25638 + 25638 25633 25632 + 25639 25634 25514 + 25640 25634 25639 + 25640 25635 25634 + 25635 25640 25641 + 25641 25642 25635 + 25636 25635 25642 + 25642 25643 25636 + 25637 25636 25643 + 25644 25639 25514 + 25645 25639 25644 + 25639 25645 25646 + 25646 25647 25639 + 25639 25647 25640 + 25640 25647 25648 + 25648 25641 25640 + 25649 25644 25514 + 25650 25644 25649 + 25651 25644 25650 + 25644 25651 25645 + 25652 25645 25651 + 25646 25645 25652 + 25514 25513 25649 + 25513 25653 25649 + 25654 25649 25653 + 25655 25649 25654 + 25649 25655 25650 + 25518 25653 25513 + 25518 25523 25653 + 25653 25523 25654 + 25654 25523 25522 + 25522 25656 25654 + 25656 25657 25654 + 25655 25654 25657 + 25657 25658 25655 + 25650 25655 25658 + 25658 25659 25650 + 25660 25650 25659 + 25650 25660 25651 + 25661 25656 25522 + 25656 25661 25662 + 25662 25663 25656 + 25656 25663 25664 + 25664 25657 25656 + 25658 25657 25664 + 25522 25521 25661 + 25665 25661 25521 + 25662 25661 25665 + 25665 25666 25662 + 25662 25666 25667 + 25667 25668 25662 + 25663 25662 25668 + 25668 25669 25663 + 25664 25663 25669 + 25521 25531 25665 + 25670 25665 25531 + 25665 25670 25671 + 25671 25666 25665 + 25666 25671 25672 + 25672 25667 25666 + 25531 25530 25670 + 25673 25670 25530 + 25671 25670 25673 + 25673 25674 25671 + 25671 25674 25675 + 25675 25672 25671 + 25676 25672 25675 + 25676 25667 25672 + 25530 25677 25673 + 25678 25673 25677 + 25673 25678 25679 + 25679 25674 25673 + 25674 25679 25680 + 25680 25675 25674 + 25681 25675 25680 + 25675 25681 25676 + 25534 25677 25530 + 25682 25677 25534 + 25677 25682 25678 + 25678 25682 25683 + 25683 25684 25678 + 25679 25678 25684 + 25684 25685 25679 + 25679 25685 25686 + 25686 25680 25679 + 25534 25538 25682 + 25682 25538 25687 + 25687 25683 25682 + 25683 25687 25688 + 25688 25689 25683 + 25683 25689 25690 + 25690 25684 25683 + 25684 25690 25691 + 25691 25685 25684 + 25687 25538 25537 + 25692 25687 25537 + 25688 25687 25692 + 25692 25693 25688 + 25694 25688 25693 + 25689 25688 25694 + 25694 25695 25689 + 25689 25695 25696 + 25696 25690 25689 + 25691 25690 25696 + 25697 25692 25537 + 25698 25692 25697 + 25692 25698 25699 + 25699 25693 25692 + 25693 25699 25700 + 25700 25701 25693 + 25693 25701 25694 + 25537 25702 25697 + 25702 25703 25697 + 25704 25697 25703 + 25705 25697 25704 + 25697 25705 25698 + 25540 25702 25537 + 25706 25702 25540 + 25702 25706 25707 + 25707 25703 25702 + 25707 25708 25703 + 25703 25708 25704 + 25540 25548 25706 + 25706 25548 25709 + 25709 25710 25706 + 25706 25710 25711 + 25711 25707 25706 + 25708 25707 25711 + 25711 25712 25708 + 25704 25708 25712 + 25553 25709 25548 + 25713 25709 25553 + 25709 25713 25714 + 25714 25710 25709 + 25710 25714 25715 + 25715 25711 25710 + 25711 25715 25716 + 25716 25712 25711 + 25553 25557 25713 + 25717 25713 25557 + 25714 25713 25717 + 25717 25718 25714 + 25714 25718 25719 + 25719 25715 25714 + 25716 25715 25719 + 25720 25717 25557 + 25721 25717 25720 + 25717 25721 25722 + 25722 25718 25717 + 25718 25722 25723 + 25723 25719 25718 + 25557 25724 25720 + 25725 25720 25724 + 25726 25720 25725 + 25720 25726 25721 + 25727 25721 25726 + 25722 25721 25727 + 25560 25724 25557 + 25724 25560 25569 + 25724 25569 25725 + 25725 25569 25568 + 25568 25728 25725 + 25729 25725 25728 + 25725 25729 25726 + 25726 25729 25614 + 25614 25623 25726 + 25726 25623 25727 + 25573 25728 25568 + 25730 25728 25573 + 25728 25730 25729 + 25729 25730 25590 + 25614 25729 25590 + 25573 25578 25730 + 25730 25578 25586 + 25586 25590 25730 + 25586 25578 25577 + 25622 25727 25623 + 25731 25727 25622 + 25727 25731 25722 + 25722 25731 25732 + 25732 25723 25722 + 25733 25723 25732 + 25719 25723 25733 + 25733 25734 25719 + 25719 25734 25716 + 25628 25731 25622 + 25731 25628 25735 + 25735 25736 25731 + 25731 25736 25732 + 25736 25737 25732 + 25738 25732 25737 + 25739 25732 25738 + 25732 25739 25733 + 25740 25735 25628 + 25741 25735 25740 + 25736 25735 25741 + 25741 25742 25736 + 25736 25742 25743 + 25743 25737 25736 + 25628 25627 25740 + 25633 25740 25627 + 25740 25633 25638 + 25638 25744 25740 + 25740 25744 25741 + 25741 25744 25745 + 25745 25746 25741 + 25742 25741 25746 + 25746 25747 25742 + 25743 25742 25747 + 25744 25638 25748 + 25748 25745 25744 + 25745 25748 25749 + 25749 25750 25745 + 25745 25750 25751 + 25751 25746 25745 + 25751 25752 25746 + 25752 25747 25746 + 25753 25748 25638 + 25749 25748 25753 + 25753 25754 25749 + 25749 25754 25755 + 25755 25756 25749 + 25750 25749 25756 + 25756 25757 25750 + 25751 25750 25757 + 25638 25637 25753 + 25643 25753 25637 + 25753 25643 25758 + 25758 25754 25753 + 25754 25758 25759 + 25759 25755 25754 + 25760 25755 25759 + 25760 25761 25755 + 25755 25761 25762 + 25762 25756 25755 + 25757 25756 25762 + 25758 25643 25642 + 25642 25763 25758 + 25758 25763 25764 + 25764 25759 25758 + 25759 25764 25765 + 25760 25759 25765 + 25766 25760 25765 + 25766 25767 25760 + 25767 25761 25760 + 25762 25761 25767 + 25768 25763 25642 + 25763 25768 25769 + 25769 25764 25763 + 25770 25764 25769 + 25770 25765 25764 + 25771 25765 25770 + 25765 25771 25766 + 25642 25641 25768 + 25768 25641 25648 + 25648 25772 25768 + 25768 25772 25773 + 25773 25769 25768 + 25770 25769 25773 + 25773 25774 25770 + 25770 25774 25775 + 25775 25771 25770 + 25776 25772 25648 + 25772 25776 25777 + 25777 25773 25772 + 25778 25773 25777 + 25778 25774 25773 + 25779 25774 25778 + 25774 25779 25775 + 25780 25775 25779 + 25780 25771 25775 + 25648 25781 25776 + 25776 25781 25782 + 25782 25783 25776 + 25776 25783 25784 + 25784 25777 25776 + 25778 25777 25784 + 25781 25648 25647 + 25647 25646 25781 + 25781 25646 25785 + 25785 25782 25781 + 25786 25782 25785 + 25782 25786 25787 + 25787 25783 25782 + 25783 25787 25788 + 25788 25784 25783 + 25652 25785 25646 + 25785 25652 25789 + 25789 25790 25785 + 25785 25790 25786 + 25791 25786 25790 + 25787 25786 25791 + 25791 25792 25787 + 25787 25792 25793 + 25793 25788 25787 + 25789 25652 25794 + 25794 25795 25789 + 25789 25795 25796 + 25796 25797 25789 + 25797 25798 25789 + 25798 25799 25789 + 25790 25789 25799 + 25651 25794 25652 + 25800 25794 25651 + 25794 25800 25801 + 25801 25795 25794 + 25795 25801 25802 + 25802 25796 25795 + 25651 25660 25800 + 25800 25660 25803 + 25803 25804 25800 + 25801 25800 25804 + 25804 25805 25801 + 25802 25801 25805 + 25805 25806 25802 + 25695 25802 25806 + 25796 25802 25695 + 25659 25803 25660 + 25803 25659 25807 + 25807 25808 25803 + 25803 25808 25809 + 25809 25804 25803 + 25805 25804 25809 + 25809 25810 25805 + 25805 25810 25811 + 25811 25806 25805 + 25807 25659 25658 + 25658 25812 25807 + 25807 25812 25813 + 25813 25814 25807 + 25808 25807 25814 + 25814 25815 25808 + 25808 25815 25816 + 25816 25809 25808 + 25810 25809 25816 + 25664 25812 25658 + 25812 25664 25817 + 25817 25813 25812 + 25818 25813 25817 + 25818 25819 25813 + 25814 25813 25819 + 25820 25814 25819 + 25815 25814 25820 + 25820 25821 25815 + 25815 25821 25816 + 25669 25817 25664 + 25818 25817 25669 + 25669 25822 25818 + 25818 25822 25823 + 25823 25824 25818 + 25819 25818 25824 + 25824 25825 25819 + 25820 25819 25825 + 25825 25826 25820 + 25821 25820 25826 + 25827 25822 25669 + 25822 25827 25828 + 25828 25823 25822 + 25829 25823 25828 + 25829 25830 25823 + 25824 25823 25830 + 25831 25824 25830 + 25831 25825 25824 + 25669 25668 25827 + 25827 25668 25667 + 25667 25832 25827 + 25828 25827 25832 + 25832 25833 25828 + 25833 25834 25828 + 25834 25829 25828 + 25835 25829 25834 + 25830 25829 25835 + 25835 25836 25830 + 25830 25836 25831 + 25676 25832 25667 + 25833 25832 25676 + 25837 25833 25676 + 25838 25833 25837 + 25838 25834 25833 + 25834 25838 25839 + 25839 25835 25834 + 25835 25839 25840 + 25840 25836 25835 + 25831 25836 25840 + 25841 25831 25840 + 25831 25841 25825 + 25842 25837 25676 + 25837 25842 25843 + 25838 25837 25843 + 25839 25838 25843 + 25839 25843 25844 + 25840 25839 25844 + 25844 25845 25840 + 25841 25840 25845 + 25846 25841 25845 + 25825 25841 25846 + 25676 25681 25842 + 25842 25681 25847 + 25848 25842 25847 + 25849 25842 25848 + 25849 25843 25842 + 25844 25843 25849 + 25850 25844 25849 + 25845 25844 25850 + 25847 25681 25680 + 25847 25680 25686 + 25686 25851 25847 + 25847 25851 25848 + 25851 25852 25848 + 25849 25848 25852 + 25852 25853 25849 + 25849 25853 25850 + 25851 25686 25854 + 25855 25851 25854 + 25852 25851 25855 + 25856 25852 25855 + 25857 25852 25856 + 25857 25853 25852 + 25858 25853 25857 + 25853 25858 25850 + 25854 25686 25685 + 25685 25691 25854 + 25859 25854 25691 + 25855 25854 25859 + 25859 25860 25855 + 25855 25860 25861 + 25861 25856 25855 + 25857 25856 25861 + 25861 25862 25857 + 25857 25862 25863 + 25863 25858 25857 + 25691 25864 25859 + 25865 25859 25864 + 25866 25859 25865 + 25866 25860 25859 + 25861 25860 25866 + 25867 25861 25866 + 25868 25861 25867 + 25868 25862 25861 + 25696 25864 25691 + 25811 25864 25696 + 25864 25811 25865 + 25869 25865 25811 + 25865 25869 25870 + 25866 25865 25870 + 25866 25870 25871 + 25871 25867 25866 + 25867 25871 25872 + 25868 25867 25872 + 25696 25806 25811 + 25806 25696 25695 + 25811 25810 25869 + 25816 25869 25810 + 25869 25816 25873 + 25873 25870 25869 + 25870 25873 25874 + 25874 25871 25870 + 25875 25871 25874 + 25875 25872 25871 + 25872 25875 25876 + 25876 25877 25872 + 25868 25872 25877 + 25862 25868 25877 + 25877 25863 25862 + 25858 25863 25877 + 25821 25873 25816 + 25873 25821 25878 + 25878 25874 25873 + 25874 25878 25879 + 25875 25874 25879 + 25875 25879 25880 + 25880 25876 25875 + 25880 25850 25876 + 25850 25858 25876 + 25877 25876 25858 + 25826 25878 25821 + 25846 25878 25826 + 25846 25879 25878 + 25879 25846 25845 + 25845 25880 25879 + 25850 25880 25845 + 25846 25826 25825 + 25695 25694 25796 + 25796 25694 25701 + 25701 25797 25796 + 25881 25797 25701 + 25797 25881 25882 + 25882 25798 25797 + 25701 25700 25881 + 25881 25700 25883 + 25883 25884 25881 + 25882 25881 25884 + 25884 25885 25882 + 25886 25882 25885 + 25798 25882 25886 + 25887 25883 25700 + 25888 25883 25887 + 25884 25883 25888 + 25888 25889 25884 + 25884 25889 25890 + 25890 25885 25884 + 25891 25885 25890 + 25885 25891 25886 + 25700 25699 25887 + 25892 25887 25699 + 25887 25892 25893 + 25893 25894 25887 + 25887 25894 25888 + 25895 25888 25894 + 25889 25888 25895 + 25895 25896 25889 + 25890 25889 25896 + 25699 25698 25892 + 25897 25892 25698 + 25893 25892 25897 + 25897 25898 25893 + 25893 25898 25899 + 25899 25900 25893 + 25894 25893 25900 + 25900 25901 25894 + 25894 25901 25895 + 25698 25705 25897 + 25902 25897 25705 + 25897 25902 25903 + 25903 25898 25897 + 25899 25898 25903 + 25904 25899 25903 + 25905 25899 25904 + 25905 25906 25899 + 25900 25899 25906 + 25705 25704 25902 + 25907 25902 25704 + 25903 25902 25907 + 25907 25908 25903 + 25903 25908 25909 + 25909 25904 25903 + 25905 25904 25909 + 25712 25907 25704 + 25910 25907 25712 + 25907 25910 25911 + 25911 25908 25907 + 25908 25911 25912 + 25912 25909 25908 + 25909 25912 25913 + 25913 25914 25909 + 25909 25914 25905 + 25712 25716 25910 + 25915 25910 25716 + 25911 25910 25915 + 25915 25916 25911 + 25911 25916 25917 + 25917 25912 25911 + 25913 25912 25917 + 25716 25734 25915 + 25918 25915 25734 + 25915 25918 25919 + 25919 25916 25915 + 25916 25919 25920 + 25920 25917 25916 + 25921 25917 25920 + 25921 25922 25917 + 25917 25922 25913 + 25734 25733 25918 + 25918 25733 25739 + 25739 25923 25918 + 25919 25918 25923 + 25923 25924 25919 + 25919 25924 25925 + 25925 25920 25919 + 25921 25920 25925 + 25926 25923 25739 + 25923 25926 25927 + 25927 25924 25923 + 25924 25927 25928 + 25928 25925 25924 + 25929 25925 25928 + 25929 25930 25925 + 25925 25930 25921 + 25739 25931 25926 + 25891 25926 25931 + 25927 25926 25891 + 25891 25932 25927 + 25927 25932 25933 + 25933 25928 25927 + 25929 25928 25933 + 25738 25931 25739 + 25931 25738 25934 + 25934 25886 25931 + 25931 25886 25891 + 25934 25738 25935 + 25935 25936 25934 + 25798 25934 25936 + 25886 25934 25798 + 25737 25935 25738 + 25937 25935 25737 + 25935 25937 25938 + 25938 25936 25935 + 25936 25938 25939 + 25939 25799 25936 + 25936 25799 25798 + 25737 25743 25937 + 25937 25743 25940 + 25940 25941 25937 + 25938 25937 25941 + 25941 25942 25938 + 25939 25938 25942 + 25942 25791 25939 + 25790 25939 25791 + 25799 25939 25790 + 25747 25940 25743 + 25943 25940 25747 + 25941 25940 25943 + 25943 25944 25941 + 25941 25944 25945 + 25945 25942 25941 + 25791 25942 25945 + 25945 25792 25791 + 25792 25945 25946 + 25946 25793 25792 + 25747 25752 25943 + 25947 25943 25752 + 25944 25943 25947 + 25947 25948 25944 + 25945 25944 25948 + 25948 25946 25945 + 25946 25948 25949 + 25950 25946 25949 + 25950 25793 25946 + 25950 25951 25793 + 25788 25793 25951 + 25752 25952 25947 + 25952 25953 25947 + 25953 25954 25947 + 25954 25948 25947 + 25954 25949 25948 + 25949 25954 25955 + 25955 25956 25949 + 25950 25949 25956 + 25952 25752 25751 + 25957 25952 25751 + 25958 25952 25957 + 25958 25953 25952 + 25953 25958 25959 + 25959 25960 25953 + 25954 25953 25960 + 25960 25955 25954 + 25757 25957 25751 + 25958 25957 25757 + 25757 25961 25958 + 25958 25961 25962 + 25962 25959 25958 + 25963 25959 25962 + 25963 25960 25959 + 25963 25964 25960 + 25955 25960 25964 + 25965 25955 25964 + 25965 25956 25955 + 25762 25961 25757 + 25961 25762 25966 + 25966 25962 25961 + 25967 25962 25966 + 25967 25968 25962 + 25962 25968 25963 + 25963 25968 25969 + 25964 25963 25969 + 25767 25966 25762 + 25966 25767 25970 + 25967 25966 25970 + 25970 25971 25967 + 25967 25971 25972 + 25968 25967 25972 + 25968 25972 25969 + 25973 25970 25767 + 25970 25973 25974 + 25974 25971 25970 + 25972 25971 25974 + 25974 25975 25972 + 25972 25975 25976 + 25976 25969 25972 + 25973 25767 25766 + 25977 25973 25766 + 25974 25973 25977 + 25975 25974 25977 + 25977 25780 25975 + 25975 25780 25978 + 25978 25976 25975 + 25976 25978 25979 + 25980 25976 25979 + 25969 25976 25980 + 25771 25977 25766 + 25780 25977 25771 + 25779 25978 25780 + 25979 25978 25779 + 25979 25779 25981 + 25979 25981 25982 + 25982 25983 25979 + 25979 25983 25980 + 25983 25984 25980 + 25985 25980 25984 + 25980 25985 25969 + 25969 25985 25964 + 25981 25779 25778 + 25982 25981 25778 + 25778 25986 25982 + 25982 25986 25987 + 25988 25982 25987 + 25989 25982 25988 + 25989 25983 25982 + 25984 25983 25989 + 25784 25986 25778 + 25987 25986 25784 + 25987 25784 25788 + 25987 25788 25951 + 25987 25951 25990 + 25990 25988 25987 + 25988 25990 25991 + 25989 25988 25991 + 25989 25991 25992 + 25992 25984 25989 + 25984 25992 25993 + 25993 25994 25984 + 25984 25994 25985 + 25994 25964 25985 + 25994 25965 25964 + 25995 25990 25951 + 25996 25990 25995 + 25996 25991 25990 + 25991 25996 25993 + 25993 25992 25991 + 25951 25950 25995 + 25956 25995 25950 + 25995 25956 25997 + 25996 25995 25997 + 25996 25997 25993 + 25994 25993 25997 + 25997 25965 25994 + 25965 25997 25956 + 25890 25932 25891 + 25932 25890 25998 + 25998 25933 25932 + 25999 25933 25998 + 25999 26000 25933 + 25933 26000 25929 + 25896 25998 25890 + 25999 25998 25896 + 25896 26001 25999 + 25999 26001 26002 + 26002 26003 25999 + 26003 26004 25999 + 26004 26000 25999 + 25929 26000 26004 + 26005 26001 25896 + 26001 26005 26006 + 26006 26002 26001 + 26007 26002 26006 + 26007 26008 26002 + 26002 26008 26009 + 26009 26003 26002 + 26009 26004 26003 + 26005 25896 25895 + 26010 26005 25895 + 26005 26010 26011 + 26011 26006 26005 + 26006 26011 26012 + 26007 26006 26012 + 26007 26012 26013 + 26008 26007 26013 + 26013 26014 26008 + 26009 26008 26014 + 25901 26010 25895 + 26015 26010 25901 + 26010 26015 26016 + 26016 26011 26010 + 26017 26011 26016 + 26017 26012 26011 + 26012 26017 26018 + 26018 26013 26012 + 26013 26018 26019 + 26019 26014 26013 + 26014 26019 26009 + 26015 25901 25900 + 26015 25900 25906 + 26015 25906 26020 + 26020 26016 26015 + 26016 26020 26021 + 26017 26016 26021 + 26018 26017 26021 + 26018 26021 26022 + 26022 26023 26018 + 26019 26018 26023 + 26024 26020 25906 + 26025 26020 26024 + 26025 26021 26020 + 26022 26021 26025 + 26026 26022 26025 + 26022 26026 26027 + 26027 26028 26022 + 26022 26028 26023 + 25906 25905 26024 + 26029 26024 25905 + 26025 26024 26029 + 26029 26030 26025 + 26025 26030 26026 + 26026 26030 26031 + 26027 26026 26031 + 26031 26032 26027 + 26028 26027 26032 + 25905 25914 26029 + 26029 25914 25913 + 26033 26029 25913 + 26031 26029 26033 + 26031 26030 26029 + 26033 25913 25922 + 25922 26034 26033 + 26034 26032 26033 + 26032 26031 26033 + 26034 25922 25921 + 26035 26034 25921 + 26036 26034 26035 + 26036 26032 26034 + 26032 26036 26028 + 26037 26028 26036 + 26028 26037 26023 + 26023 26037 26038 + 26023 26038 26019 + 26039 26035 25921 + 26036 26035 26039 + 26039 26040 26036 + 26036 26040 26037 + 26040 26041 26037 + 26041 26038 26037 + 26038 26041 26042 + 26042 26019 26038 + 26019 26042 26009 + 26009 26042 26004 + 25921 25930 26039 + 26039 25930 25929 + 26043 26039 25929 + 26041 26039 26043 + 26041 26040 26039 + 26004 26043 25929 + 26041 26043 26004 + 26004 26042 26041 + 26044 26045 26046 + 26047 26045 26044 + 26048 26045 26047 + 26045 26048 26049 + 26049 26050 26045 + 26046 26051 26044 + 26052 26044 26051 + 26044 26052 26053 + 26053 26054 26044 + 26044 26054 26047 + 26055 26051 26046 + 26056 26051 26055 + 26051 26056 26052 + 26057 26052 26056 + 26053 26052 26057 + 26057 26058 26053 + 26059 26053 26058 + 26054 26053 26059 + 26046 26060 26055 + 26061 26055 26060 + 26062 26055 26061 + 26055 26062 26056 + 26056 26062 26063 + 26063 26064 26056 + 26056 26064 26057 + 26060 26046 26065 + 26060 26065 26066 + 26066 26067 26060 + 26060 26067 26068 + 26068 26061 26060 + 26069 26065 26046 + 26065 26069 26070 + 26070 26066 26065 + 26071 26066 26070 + 26066 26071 26072 + 26072 26067 26066 + 26067 26072 26073 + 26073 26068 26067 + 26050 26069 26046 + 26050 26049 26069 + 26069 26049 26070 + 26049 26074 26070 + 26075 26070 26074 + 26070 26075 26071 + 26076 26071 26075 + 26072 26071 26076 + 26076 26077 26072 + 26072 26077 26078 + 26073 26072 26078 + 26074 26049 26048 + 26048 26079 26074 + 26080 26074 26079 + 26074 26080 26075 + 26075 26080 26081 + 26081 26082 26075 + 26075 26082 26083 + 26083 26076 26075 + 26079 26048 26084 + 26085 26079 26084 + 26085 26086 26079 + 26079 26086 26080 + 26080 26086 26087 + 26087 26081 26080 + 26088 26081 26087 + 26081 26088 26082 + 26084 26048 26047 + 26084 26047 26089 + 26089 26090 26084 + 26084 26090 26085 + 26090 26091 26085 + 26086 26085 26091 + 26091 26092 26086 + 26086 26092 26087 + 26093 26089 26047 + 26089 26093 26094 + 26095 26089 26094 + 26089 26095 26090 + 26090 26095 26096 + 26096 26091 26090 + 26092 26091 26096 + 26047 26054 26093 + 26059 26093 26054 + 26093 26059 26097 + 26097 26094 26093 + 26094 26097 26098 + 26098 26099 26094 + 26094 26099 26100 + 26096 26094 26100 + 26096 26095 26094 + 26101 26097 26059 + 26097 26101 26102 + 26098 26097 26102 + 26102 26103 26098 + 26104 26098 26103 + 26099 26098 26104 + 26105 26101 26059 + 26101 26105 26106 + 26101 26106 26107 + 26107 26102 26101 + 26108 26102 26107 + 26102 26108 26109 + 26109 26103 26102 + 26058 26105 26059 + 26058 26110 26105 + 26110 26106 26105 + 26107 26106 26110 + 26107 26110 26111 + 26108 26107 26111 + 26111 26112 26108 + 26108 26112 26113 + 26113 26109 26108 + 26114 26109 26113 + 26103 26109 26114 + 26115 26110 26058 + 26110 26115 26116 + 26116 26111 26110 + 26112 26111 26116 + 26117 26112 26116 + 26112 26117 26118 + 26118 26113 26112 + 26119 26113 26118 + 26113 26119 26114 + 26058 26057 26115 + 26115 26057 26064 + 26064 26120 26115 + 26116 26115 26120 + 26120 26121 26116 + 26117 26116 26121 + 26121 26122 26117 + 26117 26122 26123 + 26118 26117 26123 + 26124 26120 26064 + 26120 26124 26125 + 26125 26121 26120 + 26122 26121 26125 + 26122 26125 26126 + 26126 26123 26122 + 26064 26063 26124 + 26124 26063 26127 + 26127 26128 26124 + 26124 26128 26129 + 26125 26124 26129 + 26129 26126 26125 + 26130 26126 26129 + 26130 26123 26126 + 26127 26063 26062 + 26062 26131 26127 + 26131 26132 26127 + 26133 26127 26132 + 26127 26133 26128 + 26128 26133 26134 + 26134 26129 26128 + 26061 26131 26062 + 26135 26131 26061 + 26131 26135 26136 + 26136 26132 26131 + 26132 26136 26137 + 26132 26137 26133 + 26134 26133 26137 + 26137 26138 26134 + 26139 26134 26138 + 26129 26134 26139 + 26061 26140 26135 + 26135 26140 26141 + 26141 26142 26135 + 26135 26142 26143 + 26143 26136 26135 + 26137 26136 26143 + 26143 26138 26137 + 26144 26138 26143 + 26138 26144 26139 + 26140 26061 26068 + 26068 26145 26140 + 26140 26145 26146 + 26146 26141 26140 + 26147 26141 26146 + 26141 26147 26148 + 26148 26142 26141 + 26142 26148 26149 + 26149 26143 26142 + 26143 26149 26144 + 26145 26068 26073 + 26073 26150 26145 + 26145 26150 26151 + 26151 26152 26145 + 26145 26152 26146 + 26153 26146 26152 + 26146 26153 26154 + 26146 26154 26147 + 26150 26073 26155 + 26155 26156 26150 + 26151 26150 26156 + 26156 26157 26151 + 26158 26151 26157 + 26158 26152 26151 + 26152 26158 26153 + 26078 26155 26073 + 26159 26155 26078 + 26155 26159 26156 + 26156 26159 26160 + 26160 26157 26156 + 26161 26157 26160 + 26157 26161 26158 + 26158 26161 26162 + 26153 26158 26162 + 26162 26163 26153 + 26154 26153 26163 + 26078 26164 26159 + 26160 26159 26164 + 26165 26160 26164 + 26166 26160 26165 + 26160 26166 26161 + 26161 26166 26167 + 26167 26162 26161 + 26168 26164 26078 + 26164 26168 26169 + 26169 26170 26164 + 26164 26170 26165 + 26168 26078 26077 + 26077 26171 26168 + 26168 26171 26172 + 26172 26173 26168 + 26173 26169 26168 + 26174 26169 26173 + 26169 26174 26170 + 26170 26174 26175 + 26175 26165 26170 + 26076 26171 26077 + 26171 26076 26083 + 26083 26172 26171 + 26176 26172 26083 + 26172 26176 26177 + 26177 26173 26172 + 26173 26177 26178 + 26178 26179 26173 + 26173 26179 26174 + 26175 26174 26179 + 26176 26083 26180 + 26180 26181 26176 + 26176 26181 26182 + 26177 26176 26182 + 26182 26183 26177 + 26183 26184 26177 + 26178 26177 26184 + 26082 26180 26083 + 26185 26180 26082 + 26185 26181 26180 + 26181 26185 26186 + 26186 26182 26181 + 26182 26186 26187 + 26183 26182 26187 + 26082 26088 26185 + 26185 26088 26188 + 26186 26185 26188 + 26187 26186 26188 + 26188 26189 26187 + 26187 26189 26190 + 26190 26183 26187 + 26183 26190 26191 + 26183 26191 26192 + 26192 26184 26183 + 26087 26188 26088 + 26188 26087 26193 + 26188 26193 26189 + 26194 26189 26193 + 26189 26194 26190 + 26195 26190 26194 + 26190 26195 26191 + 26191 26195 26196 + 26192 26191 26196 + 26193 26087 26092 + 26092 26197 26193 + 26193 26197 26198 + 26198 26199 26193 + 26199 26194 26193 + 26194 26199 26200 + 26200 26201 26194 + 26194 26201 26195 + 26092 26096 26197 + 26197 26096 26100 + 26100 26198 26197 + 26198 26100 26202 + 26202 26203 26198 + 26198 26203 26200 + 26200 26199 26198 + 26202 26100 26099 + 26099 26204 26202 + 26202 26204 26205 + 26205 26206 26202 + 26203 26202 26206 + 26206 26207 26203 + 26200 26203 26207 + 26207 26208 26200 + 26201 26200 26208 + 26104 26204 26099 + 26204 26104 26209 + 26209 26205 26204 + 26205 26209 26210 + 26210 26211 26205 + 26205 26211 26212 + 26212 26206 26205 + 26207 26206 26212 + 26213 26209 26104 + 26210 26209 26213 + 26213 26214 26210 + 26210 26214 26215 + 26215 26216 26210 + 26211 26210 26216 + 26216 26217 26211 + 26212 26211 26217 + 26104 26218 26213 + 26219 26213 26218 + 26213 26219 26220 + 26220 26214 26213 + 26214 26220 26221 + 26221 26215 26214 + 26103 26218 26104 + 26114 26218 26103 + 26218 26114 26219 + 26119 26219 26114 + 26220 26219 26119 + 26119 26222 26220 + 26221 26220 26222 + 26222 26223 26221 + 26224 26221 26223 + 26215 26221 26224 + 26224 26225 26215 + 26215 26225 26226 + 26226 26216 26215 + 26217 26216 26226 + 26118 26222 26119 + 26222 26118 26227 + 26227 26223 26222 + 26223 26227 26228 + 26228 26229 26223 + 26223 26229 26224 + 26224 26229 26230 + 26230 26231 26224 + 26225 26224 26231 + 26123 26227 26118 + 26228 26227 26123 + 26123 26130 26228 + 26228 26130 26232 + 26233 26228 26232 + 26229 26228 26233 + 26233 26230 26229 + 26230 26233 26234 + 26234 26235 26230 + 26230 26235 26236 + 26236 26231 26230 + 26129 26232 26130 + 26139 26232 26129 + 26232 26139 26237 + 26237 26238 26232 + 26232 26238 26233 + 26234 26233 26238 + 26238 26239 26234 + 26234 26239 26240 + 26240 26241 26234 + 26235 26234 26241 + 26242 26237 26139 + 26243 26237 26242 + 26238 26237 26243 + 26243 26239 26238 + 26239 26243 26244 + 26244 26240 26239 + 26139 26144 26242 + 26245 26242 26144 + 26242 26245 26246 + 26242 26246 26243 + 26243 26246 26247 + 26247 26244 26243 + 26248 26244 26247 + 26240 26244 26248 + 26144 26149 26245 + 26249 26245 26149 + 26246 26245 26249 + 26249 26250 26246 + 26246 26250 26247 + 26251 26247 26250 + 26247 26251 26252 + 26252 26253 26247 + 26247 26253 26248 + 26149 26148 26249 + 26254 26249 26148 + 26249 26254 26255 + 26255 26250 26249 + 26250 26255 26251 + 26251 26255 26256 + 26256 26257 26251 + 26252 26251 26257 + 26148 26147 26254 + 26258 26254 26147 + 26255 26254 26258 + 26258 26256 26255 + 26259 26256 26258 + 26256 26259 26260 + 26260 26257 26256 + 26257 26260 26261 + 26261 26262 26257 + 26257 26262 26252 + 26147 26154 26258 + 26163 26258 26154 + 26258 26163 26259 + 26259 26163 26162 + 26162 26263 26259 + 26259 26263 26264 + 26264 26260 26259 + 26261 26260 26264 + 26264 26265 26261 + 26266 26261 26265 + 26262 26261 26266 + 26266 26267 26262 + 26252 26262 26267 + 26268 26263 26162 + 26263 26268 26269 + 26269 26264 26263 + 26264 26269 26270 + 26270 26265 26264 + 26265 26270 26271 + 26271 26272 26265 + 26265 26272 26266 + 26162 26167 26268 + 26268 26167 26273 + 26273 26274 26268 + 26268 26274 26275 + 26275 26269 26268 + 26270 26269 26275 + 26275 26276 26270 + 26270 26276 26277 + 26277 26271 26270 + 26273 26167 26166 + 26166 26278 26273 + 26279 26273 26278 + 26273 26279 26280 + 26280 26274 26273 + 26274 26280 26281 + 26281 26275 26274 + 26275 26281 26282 + 26282 26276 26275 + 26165 26278 26166 + 26283 26278 26165 + 26278 26283 26279 + 26284 26279 26283 + 26280 26279 26284 + 26284 26285 26280 + 26281 26280 26285 + 26285 26286 26281 + 26282 26281 26286 + 26165 26175 26283 + 26283 26175 26287 + 26287 26288 26283 + 26283 26288 26284 + 26289 26284 26288 + 26284 26289 26290 + 26290 26285 26284 + 26285 26290 26291 + 26291 26286 26285 + 26179 26287 26175 + 26292 26287 26179 + 26288 26287 26292 + 26292 26293 26288 + 26288 26293 26289 + 26294 26289 26293 + 26290 26289 26294 + 26294 26295 26290 + 26290 26295 26296 + 26296 26291 26290 + 26179 26178 26292 + 26297 26292 26178 + 26293 26292 26297 + 26297 26298 26293 + 26293 26298 26294 + 26299 26294 26298 + 26294 26299 26300 + 26300 26295 26294 + 26295 26300 26301 + 26301 26296 26295 + 26178 26302 26297 + 26303 26297 26302 + 26298 26297 26303 + 26303 26304 26298 + 26298 26304 26299 + 26305 26299 26304 + 26300 26299 26305 + 26184 26302 26178 + 26302 26184 26192 + 26192 26306 26302 + 26302 26306 26303 + 26303 26306 26307 + 26307 26308 26303 + 26304 26303 26308 + 26308 26309 26304 + 26304 26309 26305 + 26306 26192 26310 + 26310 26307 26306 + 26311 26307 26310 + 26307 26311 26312 + 26312 26308 26307 + 26308 26312 26313 + 26313 26309 26308 + 26309 26313 26314 + 26314 26305 26309 + 26196 26310 26192 + 26196 26315 26310 + 26315 26311 26310 + 26311 26315 26316 + 26316 26312 26311 + 26313 26312 26316 + 26316 26317 26313 + 26314 26313 26317 + 26315 26196 26318 + 26318 26208 26315 + 26315 26208 26207 + 26207 26319 26315 + 26315 26319 26316 + 26320 26316 26319 + 26317 26316 26320 + 26195 26318 26196 + 26318 26195 26201 + 26208 26318 26201 + 26212 26319 26207 + 26319 26212 26320 + 26217 26320 26212 + 26317 26320 26217 + 26217 26321 26317 + 26317 26321 26314 + 26321 26322 26314 + 26323 26314 26322 + 26305 26314 26323 + 26323 26324 26305 + 26305 26324 26300 + 26226 26321 26217 + 26321 26226 26325 + 26325 26322 26321 + 26322 26325 26326 + 26326 26327 26322 + 26322 26327 26323 + 26323 26327 26328 + 26328 26329 26323 + 26324 26323 26329 + 26330 26325 26226 + 26326 26325 26330 + 26330 26331 26326 + 26326 26331 26332 + 26332 26333 26326 + 26327 26326 26333 + 26333 26328 26327 + 26226 26225 26330 + 26231 26330 26225 + 26330 26231 26236 + 26236 26331 26330 + 26331 26236 26334 + 26334 26332 26331 + 26332 26334 26335 + 26335 26336 26332 + 26332 26336 26337 + 26337 26333 26332 + 26328 26333 26337 + 26338 26334 26236 + 26335 26334 26338 + 26338 26339 26335 + 26335 26339 26340 + 26340 26341 26335 + 26336 26335 26341 + 26236 26235 26338 + 26241 26338 26235 + 26338 26241 26342 + 26342 26339 26338 + 26339 26342 26343 + 26343 26340 26339 + 26340 26343 26344 + 26344 26345 26340 + 26340 26345 26346 + 26346 26341 26340 + 26342 26241 26240 + 26240 26347 26342 + 26342 26347 26348 + 26348 26343 26342 + 26344 26343 26348 + 26348 26349 26344 + 26344 26349 26350 + 26350 26351 26344 + 26345 26344 26351 + 26248 26347 26240 + 26347 26248 26352 + 26352 26353 26347 + 26347 26353 26348 + 26353 26354 26348 + 26354 26355 26348 + 26355 26356 26348 + 26349 26348 26356 + 26357 26352 26248 + 26358 26352 26357 + 26353 26352 26358 + 26358 26359 26353 + 26353 26359 26360 + 26360 26354 26353 + 26354 26360 26361 + 26361 26355 26354 + 26248 26253 26357 + 26362 26357 26253 + 26357 26362 26363 + 26363 26364 26357 + 26357 26364 26358 + 26358 26364 26365 + 26365 26366 26358 + 26359 26358 26366 + 26253 26252 26362 + 26267 26362 26252 + 26363 26362 26267 + 26267 26367 26363 + 26363 26367 26368 + 26368 26369 26363 + 26364 26363 26369 + 26369 26365 26364 + 26266 26367 26267 + 26367 26266 26370 + 26370 26371 26367 + 26367 26371 26368 + 26372 26370 26266 + 26373 26370 26372 + 26371 26370 26373 + 26371 26373 26374 + 26374 26368 26371 + 26375 26372 26266 + 26376 26372 26375 + 26377 26372 26376 + 26372 26377 26373 + 26373 26377 26378 + 26378 26374 26373 + 26379 26374 26378 + 26368 26374 26379 + 26272 26375 26266 + 26380 26375 26272 + 26375 26380 26381 + 26381 26382 26375 + 26375 26382 26376 + 26272 26383 26380 + 26384 26380 26383 + 26381 26380 26384 + 26384 26385 26381 + 26386 26381 26385 + 26382 26381 26386 + 26386 26387 26382 + 26376 26382 26387 + 26388 26383 26272 + 26383 26388 26389 + 26389 26390 26383 + 26383 26390 26384 + 26391 26384 26390 + 26385 26384 26391 + 26272 26271 26388 + 26388 26271 26277 + 26277 26392 26388 + 26388 26392 26393 + 26393 26389 26388 + 26394 26389 26393 + 26389 26394 26395 + 26390 26389 26395 + 26390 26395 26391 + 26396 26392 26277 + 26392 26396 26397 + 26397 26393 26392 + 26393 26397 26398 + 26398 26399 26393 + 26393 26399 26394 + 26277 26400 26396 + 26396 26400 26401 + 26401 26402 26396 + 26396 26402 26403 + 26403 26397 26396 + 26398 26397 26403 + 26400 26277 26276 + 26276 26282 26400 + 26401 26400 26282 + 26282 26404 26401 + 26405 26401 26404 + 26401 26405 26406 + 26406 26402 26401 + 26402 26406 26407 + 26407 26403 26402 + 26286 26404 26282 + 26408 26404 26286 + 26404 26408 26405 + 26409 26405 26408 + 26406 26405 26409 + 26409 26410 26406 + 26406 26410 26411 + 26411 26407 26406 + 26412 26407 26411 + 26403 26407 26412 + 26286 26291 26408 + 26408 26291 26296 + 26296 26413 26408 + 26408 26413 26409 + 26414 26409 26413 + 26414 26410 26409 + 26410 26414 26415 + 26415 26416 26410 + 26410 26416 26411 + 26417 26413 26296 + 26413 26417 26414 + 26414 26417 26418 + 26418 26419 26414 + 26419 26420 26414 + 26420 26421 26414 + 26421 26415 26414 + 26296 26301 26417 + 26417 26301 26422 + 26422 26418 26417 + 26423 26418 26422 + 26418 26423 26424 + 26424 26419 26418 + 26422 26301 26300 + 26300 26324 26422 + 26329 26422 26324 + 26422 26329 26423 + 26423 26329 26328 + 26328 26425 26423 + 26423 26425 26426 + 26426 26424 26423 + 26427 26424 26426 + 26419 26424 26427 + 26427 26428 26419 + 26419 26428 26429 + 26429 26420 26419 + 26337 26425 26328 + 26425 26337 26430 + 26430 26426 26425 + 26426 26430 26431 + 26431 26432 26426 + 26426 26432 26427 + 26427 26432 26433 + 26433 26434 26427 + 26428 26427 26434 + 26430 26337 26336 + 26336 26435 26430 + 26431 26430 26435 + 26435 26436 26431 + 26431 26436 26437 + 26437 26438 26431 + 26432 26431 26438 + 26438 26433 26432 + 26341 26435 26336 + 26435 26341 26346 + 26346 26436 26435 + 26436 26346 26439 + 26439 26437 26436 + 26437 26439 26440 + 26440 26441 26437 + 26437 26441 26442 + 26442 26438 26437 + 26433 26438 26442 + 26443 26439 26346 + 26440 26439 26443 + 26443 26444 26440 + 26440 26444 26445 + 26445 26446 26440 + 26441 26440 26446 + 26446 26447 26441 + 26442 26441 26447 + 26346 26345 26443 + 26351 26443 26345 + 26443 26351 26448 + 26448 26444 26443 + 26444 26448 26449 + 26449 26445 26444 + 26445 26449 26450 + 26450 26451 26445 + 26446 26445 26451 + 26452 26446 26451 + 26447 26446 26452 + 26448 26351 26350 + 26350 26453 26448 + 26449 26448 26453 + 26453 26454 26449 + 26450 26449 26454 + 26454 26455 26450 + 26456 26450 26455 + 26450 26456 26457 + 26451 26450 26457 + 26457 26452 26451 + 26458 26453 26350 + 26453 26458 26459 + 26459 26454 26453 + 26454 26459 26460 + 26460 26455 26454 + 26455 26460 26461 + 26455 26461 26456 + 26462 26456 26461 + 26457 26456 26462 + 26350 26463 26458 + 26458 26463 26464 + 26464 26465 26458 + 26466 26458 26465 + 26466 26459 26458 + 26460 26459 26466 + 26463 26350 26349 + 26349 26467 26463 + 26464 26463 26467 + 26467 26468 26464 + 26469 26464 26468 + 26464 26469 26470 + 26470 26465 26464 + 26465 26470 26471 + 26471 26466 26465 + 26356 26467 26349 + 26467 26356 26472 + 26472 26468 26467 + 26468 26472 26473 + 26473 26474 26468 + 26468 26474 26469 + 26475 26469 26474 + 26470 26469 26475 + 26472 26356 26476 + 26476 26477 26472 + 26477 26473 26472 + 26473 26477 26478 + 26479 26473 26478 + 26479 26480 26473 + 26474 26473 26480 + 26356 26355 26476 + 26481 26476 26355 + 26476 26481 26482 + 26482 26477 26476 + 26477 26482 26483 + 26483 26478 26477 + 26355 26361 26481 + 26481 26361 26484 + 26484 26485 26481 + 26482 26481 26485 + 26485 26486 26482 + 26483 26482 26486 + 26486 26487 26483 + 26488 26483 26487 + 26478 26483 26488 + 26489 26484 26361 + 26484 26489 26490 + 26490 26491 26484 + 26484 26491 26492 + 26492 26485 26484 + 26486 26485 26492 + 26361 26360 26489 + 26489 26360 26359 + 26359 26493 26489 + 26490 26489 26493 + 26493 26494 26490 + 26495 26490 26494 + 26495 26496 26490 + 26491 26490 26496 + 26496 26497 26491 + 26497 26492 26491 + 26366 26493 26359 + 26493 26366 26498 + 26498 26494 26493 + 26494 26498 26495 + 26498 26499 26495 + 26495 26499 26500 + 26500 26501 26495 + 26496 26495 26501 + 26502 26496 26501 + 26497 26496 26502 + 26498 26366 26365 + 26365 26503 26498 + 26498 26503 26504 + 26504 26499 26498 + 26500 26499 26504 + 26504 26505 26500 + 26506 26500 26505 + 26501 26500 26506 + 26506 26507 26501 + 26507 26502 26501 + 26508 26503 26365 + 26503 26508 26509 + 26509 26504 26503 + 26504 26509 26510 + 26510 26505 26504 + 26505 26510 26511 + 26511 26512 26505 + 26505 26512 26506 + 26365 26369 26508 + 26508 26369 26368 + 26368 26513 26508 + 26508 26513 26514 + 26514 26509 26508 + 26510 26509 26514 + 26514 26515 26510 + 26516 26510 26515 + 26516 26511 26510 + 26379 26513 26368 + 26513 26379 26517 + 26517 26514 26513 + 26514 26517 26518 + 26518 26515 26514 + 26515 26518 26516 + 26518 26519 26516 + 26516 26519 26520 + 26520 26521 26516 + 26511 26516 26521 + 26522 26517 26379 + 26518 26517 26522 + 26522 26523 26518 + 26524 26518 26523 + 26524 26519 26518 + 26520 26519 26524 + 26524 26525 26520 + 26526 26520 26525 + 26521 26520 26526 + 26522 26379 26527 + 26528 26522 26527 + 26522 26528 26529 + 26529 26523 26522 + 26523 26529 26524 + 26529 26530 26524 + 26524 26530 26531 + 26531 26525 26524 + 26378 26527 26379 + 26532 26527 26378 + 26527 26532 26528 + 26528 26532 26533 + 26533 26534 26528 + 26529 26528 26534 + 26534 26535 26529 + 26536 26529 26535 + 26536 26530 26529 + 26531 26530 26536 + 26378 26537 26532 + 26532 26537 26538 + 26538 26533 26532 + 26539 26533 26538 + 26533 26539 26540 + 26540 26534 26533 + 26534 26540 26541 + 26541 26535 26534 + 26535 26541 26536 + 26537 26378 26377 + 26377 26542 26537 + 26538 26537 26542 + 26542 26488 26538 + 26487 26538 26488 + 26538 26487 26539 + 26376 26542 26377 + 26542 26376 26543 + 26543 26488 26542 + 26488 26543 26478 + 26544 26478 26543 + 26478 26544 26479 + 26543 26376 26387 + 26387 26544 26543 + 26545 26544 26387 + 26544 26545 26546 + 26546 26479 26544 + 26479 26546 26547 + 26547 26548 26479 + 26480 26479 26548 + 26387 26386 26545 + 26545 26386 26549 + 26549 26550 26545 + 26546 26545 26550 + 26550 26551 26546 + 26547 26546 26551 + 26551 26552 26547 + 26553 26547 26552 + 26548 26547 26553 + 26385 26549 26386 + 26554 26549 26385 + 26550 26549 26554 + 26554 26555 26550 + 26550 26555 26556 + 26556 26551 26550 + 26552 26551 26556 + 26385 26557 26554 + 26554 26557 26558 + 26558 26559 26554 + 26555 26554 26559 + 26559 26560 26555 + 26560 26556 26555 + 26391 26557 26385 + 26557 26391 26561 + 26561 26558 26557 + 26558 26561 26562 + 26562 26563 26558 + 26558 26563 26564 + 26564 26559 26558 + 26560 26559 26564 + 26565 26561 26391 + 26561 26565 26566 + 26562 26561 26566 + 26562 26566 26567 + 26567 26568 26562 + 26563 26562 26568 + 26568 26569 26563 + 26569 26564 26563 + 26391 26395 26565 + 26395 26394 26565 + 26394 26570 26565 + 26565 26570 26571 + 26571 26566 26565 + 26566 26571 26572 + 26572 26567 26566 + 26567 26572 26573 + 26573 26574 26567 + 26568 26567 26574 + 26570 26394 26399 + 26575 26570 26399 + 26570 26575 26576 + 26571 26570 26576 + 26577 26571 26576 + 26577 26572 26571 + 26573 26572 26577 + 26577 26578 26573 + 26579 26573 26578 + 26574 26573 26579 + 26580 26575 26399 + 26575 26580 26581 + 26581 26576 26575 + 26576 26581 26582 + 26582 26577 26576 + 26577 26582 26583 + 26583 26578 26577 + 26584 26578 26583 + 26578 26584 26579 + 26399 26398 26580 + 26585 26580 26398 + 26581 26580 26585 + 26585 26586 26581 + 26582 26581 26586 + 26586 26587 26582 + 26583 26582 26587 + 26587 26588 26583 + 26583 26588 26589 + 26589 26584 26583 + 26398 26590 26585 + 26591 26585 26590 + 26585 26591 26592 + 26592 26586 26585 + 26586 26592 26587 + 26592 26593 26587 + 26587 26593 26594 + 26594 26588 26587 + 26589 26588 26594 + 26403 26590 26398 + 26412 26590 26403 + 26590 26412 26591 + 26595 26591 26412 + 26592 26591 26595 + 26595 26596 26592 + 26597 26592 26596 + 26597 26593 26592 + 26594 26593 26597 + 26597 26598 26594 + 26598 26599 26594 + 26599 26589 26594 + 26584 26589 26599 + 26412 26600 26595 + 26601 26595 26600 + 26595 26601 26602 + 26602 26596 26595 + 26596 26602 26597 + 26602 26603 26597 + 26597 26603 26604 + 26604 26598 26597 + 26411 26600 26412 + 26605 26600 26411 + 26600 26605 26601 + 26606 26601 26605 + 26602 26601 26606 + 26606 26607 26602 + 26608 26602 26607 + 26608 26603 26602 + 26603 26608 26609 + 26604 26603 26609 + 26411 26610 26605 + 26605 26610 26611 + 26611 26612 26605 + 26606 26605 26612 + 26612 26613 26606 + 26613 26614 26606 + 26606 26614 26607 + 26610 26411 26416 + 26416 26615 26610 + 26611 26610 26615 + 26615 26616 26611 + 26617 26611 26616 + 26611 26617 26613 + 26613 26612 26611 + 26416 26415 26615 + 26615 26415 26421 + 26421 26616 26615 + 26553 26616 26421 + 26616 26553 26617 + 26552 26617 26553 + 26613 26617 26552 + 26552 26618 26613 + 26614 26613 26618 + 26618 26619 26614 + 26620 26614 26619 + 26614 26620 26607 + 26607 26620 26608 + 26421 26621 26553 + 26553 26621 26548 + 26622 26548 26621 + 26622 26480 26548 + 26623 26480 26622 + 26480 26623 26474 + 26624 26621 26421 + 26621 26624 26622 + 26625 26622 26624 + 26622 26625 26623 + 26623 26625 26626 + 26626 26475 26623 + 26474 26623 26475 + 26420 26624 26421 + 26624 26420 26429 + 26429 26627 26624 + 26624 26627 26625 + 26626 26625 26627 + 26627 26628 26626 + 26629 26626 26628 + 26475 26626 26629 + 26629 26630 26475 + 26475 26630 26470 + 26627 26429 26631 + 26631 26628 26627 + 26628 26631 26632 + 26632 26633 26628 + 26628 26633 26629 + 26634 26629 26633 + 26634 26635 26629 + 26630 26629 26635 + 26636 26631 26429 + 26632 26631 26636 + 26636 26637 26632 + 26638 26632 26637 + 26638 26639 26632 + 26633 26632 26639 + 26639 26634 26633 + 26429 26428 26636 + 26434 26636 26428 + 26636 26434 26640 + 26640 26637 26636 + 26637 26640 26638 + 26640 26641 26638 + 26638 26641 26642 + 26642 26643 26638 + 26639 26638 26643 + 26644 26639 26643 + 26634 26639 26644 + 26640 26434 26433 + 26433 26645 26640 + 26641 26640 26645 + 26646 26641 26645 + 26642 26641 26646 + 26646 26647 26642 + 26648 26642 26647 + 26643 26642 26648 + 26648 26649 26643 + 26644 26643 26649 + 26442 26645 26433 + 26645 26442 26650 + 26650 26646 26645 + 26646 26650 26651 + 26651 26647 26646 + 26647 26651 26652 + 26652 26653 26647 + 26647 26653 26648 + 26654 26648 26653 + 26649 26648 26654 + 26447 26650 26442 + 26651 26650 26447 + 26447 26655 26651 + 26656 26651 26655 + 26656 26652 26651 + 26657 26652 26656 + 26653 26652 26657 + 26657 26658 26653 + 26653 26658 26654 + 26452 26655 26447 + 26655 26452 26656 + 26452 26659 26656 + 26656 26659 26660 + 26660 26661 26656 + 26656 26661 26657 + 26661 26662 26657 + 26662 26663 26657 + 26663 26658 26657 + 26654 26658 26663 + 26457 26659 26452 + 26659 26457 26664 + 26660 26659 26664 + 26665 26660 26664 + 26661 26660 26665 + 26665 26662 26661 + 26662 26665 26666 + 26666 26663 26662 + 26663 26666 26654 + 26666 26667 26654 + 26654 26667 26649 + 26668 26649 26667 + 26649 26668 26644 + 26462 26664 26457 + 26664 26462 26669 + 26669 26665 26664 + 26665 26669 26670 + 26666 26665 26670 + 26667 26666 26670 + 26670 26671 26667 + 26671 26668 26667 + 26672 26668 26671 + 26668 26672 26673 + 26673 26644 26668 + 26644 26673 26634 + 26462 26674 26669 + 26674 26670 26669 + 26674 26675 26670 + 26670 26675 26676 + 26676 26671 26670 + 26671 26676 26672 + 26677 26672 26676 + 26672 26677 26678 + 26672 26678 26673 + 26674 26462 26679 + 26679 26680 26674 + 26680 26681 26674 + 26681 26675 26674 + 26675 26681 26682 + 26675 26682 26676 + 26682 26677 26676 + 26461 26679 26462 + 26683 26679 26461 + 26679 26683 26680 + 26683 26684 26680 + 26680 26684 26685 + 26685 26681 26680 + 26681 26685 26686 + 26686 26682 26681 + 26682 26686 26687 + 26687 26677 26682 + 26461 26688 26683 + 26683 26688 26689 + 26689 26690 26683 + 26684 26683 26690 + 26690 26691 26684 + 26691 26685 26684 + 26685 26691 26686 + 26687 26686 26691 + 26460 26688 26461 + 26689 26688 26460 + 26689 26460 26692 + 26692 26693 26689 + 26693 26694 26689 + 26689 26694 26691 + 26691 26690 26689 + 26466 26692 26460 + 26693 26692 26466 + 26466 26471 26693 + 26693 26471 26695 + 26695 26696 26693 + 26687 26693 26696 + 26687 26694 26693 + 26691 26694 26687 + 26695 26471 26470 + 26695 26470 26630 + 26635 26695 26630 + 26695 26635 26678 + 26678 26696 26695 + 26696 26678 26677 + 26677 26687 26696 + 26678 26635 26673 + 26635 26634 26673 + 26556 26618 26552 + 26618 26556 26619 + 26556 26697 26619 + 26619 26697 26698 + 26619 26698 26620 + 26699 26620 26698 + 26620 26699 26608 + 26560 26697 26556 + 26700 26697 26560 + 26697 26700 26698 + 26698 26700 26701 + 26701 26699 26698 + 26702 26699 26701 + 26608 26699 26702 + 26702 26609 26608 + 26609 26702 26703 + 26703 26604 26609 + 26560 26704 26700 + 26705 26700 26704 + 26705 26706 26700 + 26700 26706 26701 + 26701 26706 26707 + 26707 26708 26701 + 26701 26708 26702 + 26564 26704 26560 + 26704 26564 26709 + 26709 26705 26704 + 26705 26709 26710 + 26710 26711 26705 + 26705 26711 26707 + 26707 26706 26705 + 26569 26709 26564 + 26709 26569 26712 + 26710 26709 26712 + 26713 26710 26712 + 26710 26713 26714 + 26711 26710 26714 + 26714 26707 26711 + 26707 26714 26715 + 26708 26707 26715 + 26708 26715 26716 + 26716 26702 26708 + 26702 26716 26703 + 26717 26712 26569 + 26712 26717 26718 + 26718 26713 26712 + 26713 26718 26715 + 26715 26714 26713 + 26569 26568 26717 + 26717 26568 26574 + 26718 26717 26574 + 26719 26718 26574 + 26715 26718 26719 + 26719 26716 26715 + 26716 26719 26579 + 26716 26579 26703 + 26720 26703 26579 + 26703 26720 26604 + 26598 26604 26720 + 26720 26599 26598 + 26599 26720 26584 + 26579 26719 26574 + 26584 26720 26579 + 26539 26487 26486 + 26486 26721 26539 + 26539 26721 26722 + 26722 26540 26539 + 26540 26722 26723 + 26541 26540 26723 + 26492 26721 26486 + 26721 26492 26724 + 26724 26722 26721 + 26722 26724 26725 + 26725 26723 26722 + 26723 26725 26726 + 26726 26727 26723 + 26727 26541 26723 + 26727 26728 26541 + 26541 26728 26536 + 26497 26724 26492 + 26724 26497 26729 + 26725 26724 26729 + 26730 26725 26729 + 26730 26726 26725 + 26726 26730 26731 + 26732 26726 26731 + 26727 26726 26732 + 26732 26733 26727 + 26728 26727 26733 + 26502 26729 26497 + 26729 26502 26734 + 26734 26730 26729 + 26730 26734 26735 + 26735 26731 26730 + 26731 26735 26736 + 26736 26737 26731 + 26732 26731 26737 + 26738 26732 26737 + 26733 26732 26738 + 26507 26734 26502 + 26734 26507 26739 + 26735 26734 26739 + 26736 26735 26739 + 26740 26736 26739 + 26741 26736 26740 + 26737 26736 26741 + 26737 26741 26738 + 26741 26742 26738 + 26743 26738 26742 + 26738 26743 26733 + 26744 26739 26507 + 26739 26744 26740 + 26744 26745 26740 + 26740 26745 26746 + 26746 26526 26740 + 26740 26526 26741 + 26742 26741 26526 + 26507 26506 26744 + 26744 26506 26512 + 26512 26747 26744 + 26745 26744 26747 + 26746 26745 26747 + 26747 26748 26746 + 26746 26748 26521 + 26526 26746 26521 + 26748 26747 26512 + 26512 26511 26748 + 26748 26511 26521 + 26525 26742 26526 + 26525 26531 26742 + 26531 26749 26742 + 26742 26749 26743 + 26750 26743 26749 + 26743 26750 26733 + 26750 26728 26733 + 26536 26728 26750 + 26749 26531 26751 + 26751 26750 26749 + 26750 26751 26536 + 26536 26751 26531 + 26752 26753 26754 + 26753 26755 26754 + 26756 26754 26755 + 26754 26756 26757 + 26757 26758 26754 + 26754 26758 26752 + 26759 26752 26758 + 26760 26752 26759 + 26761 26755 26753 + 26762 26755 26761 + 26755 26762 26756 + 26756 26762 26763 + 26763 26764 26756 + 26757 26756 26764 + 26753 26765 26761 + 26766 26761 26765 + 26767 26761 26766 + 26761 26767 26762 + 26762 26767 26768 + 26768 26763 26762 + 26769 26763 26768 + 26763 26769 26770 + 26770 26764 26763 + 26771 26766 26765 + 26772 26766 26771 + 26766 26772 26767 + 26768 26767 26772 + 26772 26773 26768 + 26774 26768 26773 + 26768 26774 26769 + 26765 26775 26771 + 26776 26771 26775 + 26777 26771 26776 + 26771 26777 26772 + 26772 26777 26778 + 26778 26773 26772 + 26779 26773 26778 + 26773 26779 26774 + 26780 26774 26779 + 26769 26774 26780 + 26781 26776 26775 + 26782 26776 26781 + 26776 26782 26777 + 26778 26777 26782 + 26782 26783 26778 + 26784 26778 26783 + 26778 26784 26779 + 26775 26785 26781 + 26781 26785 26786 + 26786 26787 26781 + 26788 26781 26787 + 26781 26788 26782 + 26782 26788 26789 + 26789 26783 26782 + 26790 26783 26789 + 26783 26790 26784 + 26791 26786 26785 + 26785 26792 26791 + 26793 26791 26792 + 26792 26794 26793 + 26795 26793 26794 + 26794 26796 26795 + 26797 26795 26796 + 26798 26795 26797 + 26795 26798 26786 + 26786 26798 26799 + 26799 26787 26786 + 26800 26787 26799 + 26787 26800 26788 + 26789 26788 26800 + 26801 26797 26796 + 26797 26801 26802 + 26802 26803 26797 + 26797 26803 26798 + 26799 26798 26803 + 26803 26804 26799 + 26805 26799 26804 + 26799 26805 26800 + 26796 26760 26801 + 26801 26760 26806 + 26806 26807 26801 + 26802 26801 26807 + 26807 26808 26802 + 26802 26808 26809 + 26809 26810 26802 + 26803 26802 26810 + 26810 26804 26803 + 26759 26806 26760 + 26806 26759 26811 + 26811 26812 26806 + 26806 26812 26813 + 26813 26807 26806 + 26808 26807 26813 + 26813 26814 26808 + 26808 26814 26815 + 26815 26809 26808 + 26811 26759 26816 + 26816 26817 26811 + 26818 26811 26817 + 26812 26811 26818 + 26818 26819 26812 + 26812 26819 26820 + 26820 26813 26812 + 26814 26813 26820 + 26758 26816 26759 + 26821 26816 26758 + 26816 26821 26822 + 26822 26817 26816 + 26817 26822 26823 + 26823 26824 26817 + 26817 26824 26818 + 26825 26818 26824 + 26819 26818 26825 + 26758 26757 26821 + 26826 26821 26757 + 26822 26821 26826 + 26826 26827 26822 + 26823 26822 26827 + 26827 26828 26823 + 26829 26823 26828 + 26824 26823 26829 + 26829 26830 26824 + 26824 26830 26825 + 26757 26831 26826 + 26832 26826 26831 + 26826 26832 26833 + 26833 26827 26826 + 26827 26833 26834 + 26834 26828 26827 + 26764 26831 26757 + 26835 26831 26764 + 26831 26835 26832 + 26836 26832 26835 + 26833 26832 26836 + 26836 26837 26833 + 26833 26837 26838 + 26838 26834 26833 + 26839 26834 26838 + 26828 26834 26839 + 26764 26770 26835 + 26835 26770 26840 + 26840 26841 26835 + 26835 26841 26836 + 26842 26836 26841 + 26836 26842 26843 + 26843 26837 26836 + 26837 26843 26844 + 26844 26838 26837 + 26840 26770 26769 + 26845 26840 26769 + 26846 26840 26845 + 26846 26841 26840 + 26841 26846 26842 + 26847 26842 26846 + 26843 26842 26847 + 26847 26848 26843 + 26844 26843 26848 + 26769 26849 26845 + 26849 26850 26845 + 26851 26845 26850 + 26852 26845 26851 + 26845 26852 26846 + 26846 26852 26847 + 26780 26849 26769 + 26849 26780 26853 + 26849 26853 26854 + 26854 26850 26849 + 26855 26850 26854 + 26850 26855 26851 + 26856 26851 26855 + 26852 26851 26856 + 26856 26857 26852 + 26852 26857 26847 + 26853 26780 26858 + 26858 26859 26853 + 26854 26853 26859 + 26859 26860 26854 + 26861 26854 26860 + 26854 26861 26855 + 26779 26858 26780 + 26862 26858 26779 + 26859 26858 26862 + 26859 26862 26863 + 26863 26860 26859 + 26864 26860 26863 + 26860 26864 26861 + 26865 26861 26864 + 26855 26861 26865 + 26865 26866 26855 + 26855 26866 26856 + 26779 26784 26862 + 26862 26784 26790 + 26863 26862 26790 + 26867 26863 26790 + 26864 26863 26867 + 26867 26868 26864 + 26864 26868 26865 + 26869 26865 26868 + 26865 26869 26870 + 26870 26866 26865 + 26866 26870 26871 + 26871 26856 26866 + 26857 26856 26871 + 26790 26872 26867 + 26873 26867 26872 + 26867 26873 26874 + 26874 26868 26867 + 26868 26874 26869 + 26875 26869 26874 + 26870 26869 26875 + 26876 26872 26790 + 26877 26872 26876 + 26872 26877 26873 + 26878 26873 26877 + 26874 26873 26878 + 26878 26879 26874 + 26874 26879 26875 + 26790 26880 26876 + 26876 26880 26881 + 26882 26876 26881 + 26876 26882 26877 + 26877 26882 26883 + 26883 26884 26877 + 26877 26884 26878 + 26789 26880 26790 + 26880 26789 26885 + 26885 26881 26880 + 26886 26881 26885 + 26881 26886 26882 + 26882 26886 26887 + 26887 26883 26882 + 26888 26883 26887 + 26884 26883 26888 + 26800 26885 26789 + 26889 26885 26800 + 26885 26889 26890 + 26890 26886 26885 + 26886 26890 26891 + 26891 26887 26886 + 26892 26887 26891 + 26887 26892 26888 + 26800 26805 26889 + 26893 26889 26805 + 26890 26889 26893 + 26893 26894 26890 + 26890 26894 26895 + 26891 26890 26895 + 26895 26896 26891 + 26897 26891 26896 + 26891 26897 26892 + 26805 26898 26893 + 26899 26893 26898 + 26893 26899 26900 + 26900 26894 26893 + 26894 26900 26901 + 26901 26895 26894 + 26804 26898 26805 + 26902 26898 26804 + 26898 26902 26899 + 26899 26902 26903 + 26903 26904 26899 + 26900 26899 26904 + 26904 26905 26900 + 26901 26900 26905 + 26804 26810 26902 + 26902 26810 26809 + 26809 26903 26902 + 26903 26809 26815 + 26815 26906 26903 + 26903 26906 26907 + 26907 26904 26903 + 26905 26904 26907 + 26907 26908 26905 + 26905 26908 26909 + 26909 26910 26905 + 26905 26910 26901 + 26906 26815 26911 + 26911 26912 26906 + 26906 26912 26913 + 26913 26907 26906 + 26908 26907 26913 + 26913 26914 26908 + 26908 26914 26915 + 26915 26909 26908 + 26911 26815 26814 + 26814 26916 26911 + 26916 26917 26911 + 26917 26918 26911 + 26912 26911 26918 + 26918 26919 26912 + 26912 26919 26920 + 26920 26913 26912 + 26914 26913 26920 + 26820 26916 26814 + 26916 26820 26921 + 26921 26917 26916 + 26917 26921 26922 + 26922 26923 26917 + 26917 26923 26924 + 26924 26918 26917 + 26919 26918 26924 + 26921 26820 26819 + 26819 26925 26921 + 26921 26925 26926 + 26926 26922 26921 + 26927 26922 26926 + 26923 26922 26927 + 26927 26928 26923 + 26923 26928 26929 + 26929 26924 26923 + 26825 26925 26819 + 26925 26825 26930 + 26930 26926 26925 + 26926 26930 26931 + 26931 26932 26926 + 26926 26932 26927 + 26933 26927 26932 + 26928 26927 26933 + 26930 26825 26830 + 26830 26934 26930 + 26931 26930 26934 + 26934 26935 26931 + 26936 26931 26935 + 26932 26931 26936 + 26936 26937 26932 + 26932 26937 26933 + 26938 26934 26830 + 26934 26938 26939 + 26939 26935 26934 + 26935 26939 26940 + 26940 26941 26935 + 26935 26941 26936 + 26942 26936 26941 + 26937 26936 26942 + 26830 26829 26938 + 26938 26829 26943 + 26943 26944 26938 + 26939 26938 26944 + 26944 26945 26939 + 26940 26939 26945 + 26945 26946 26940 + 26947 26940 26946 + 26941 26940 26947 + 26828 26943 26829 + 26839 26943 26828 + 26943 26839 26948 + 26948 26944 26943 + 26944 26948 26949 + 26949 26945 26944 + 26945 26949 26950 + 26950 26946 26945 + 26946 26950 26951 + 26951 26952 26946 + 26946 26952 26947 + 26948 26839 26953 + 26953 26954 26948 + 26949 26948 26954 + 26954 26955 26949 + 26950 26949 26955 + 26955 26956 26950 + 26951 26950 26956 + 26838 26953 26839 + 26957 26953 26838 + 26953 26957 26958 + 26958 26954 26953 + 26954 26958 26959 + 26959 26955 26954 + 26955 26959 26960 + 26960 26956 26955 + 26838 26844 26957 + 26957 26844 26961 + 26961 26962 26957 + 26958 26957 26962 + 26962 26963 26958 + 26959 26958 26963 + 26963 26964 26959 + 26960 26959 26964 + 26848 26961 26844 + 26965 26961 26848 + 26961 26965 26966 + 26966 26962 26961 + 26962 26966 26967 + 26967 26963 26962 + 26963 26967 26968 + 26968 26964 26963 + 26848 26969 26965 + 26965 26969 26970 + 26970 26971 26965 + 26966 26965 26971 + 26971 26972 26966 + 26967 26966 26972 + 26972 26973 26967 + 26968 26967 26973 + 26969 26848 26847 + 26847 26974 26969 + 26969 26974 26975 + 26975 26970 26969 + 26976 26970 26975 + 26970 26976 26977 + 26977 26971 26970 + 26971 26977 26978 + 26978 26972 26971 + 26974 26847 26979 + 26979 26980 26974 + 26975 26974 26980 + 26980 26981 26975 + 26982 26975 26981 + 26975 26982 26976 + 26857 26979 26847 + 26983 26979 26857 + 26980 26979 26983 + 26980 26983 26981 + 26983 26984 26981 + 26985 26981 26984 + 26981 26985 26982 + 26986 26982 26985 + 26976 26982 26986 + 26986 26987 26976 + 26977 26976 26987 + 26857 26988 26983 + 26983 26988 26989 + 26989 26984 26983 + 26985 26984 26989 + 26989 26990 26985 + 26985 26990 26991 + 26991 26986 26985 + 26871 26988 26857 + 26988 26871 26992 + 26992 26989 26988 + 26989 26992 26993 + 26993 26990 26989 + 26990 26993 26994 + 26994 26991 26990 + 26995 26991 26994 + 26991 26995 26996 + 26996 26986 26991 + 26992 26871 26870 + 26870 26997 26992 + 26997 26998 26992 + 26993 26992 26998 + 26998 26999 26993 + 26993 26999 27000 + 27000 26994 26993 + 27001 26994 27000 + 26994 27001 26995 + 26875 26997 26870 + 26875 27002 26997 + 26997 27002 27003 + 27003 26998 26997 + 26998 27003 27004 + 27004 26999 26998 + 26999 27004 27005 + 27005 27000 26999 + 27006 27000 27005 + 27000 27006 27001 + 27002 26875 26879 + 26879 27007 27002 + 27002 27007 27008 + 27008 27003 27002 + 27004 27003 27008 + 27008 27009 27004 + 27004 27009 27005 + 27010 27005 27009 + 27005 27010 27006 + 27007 26879 26878 + 27007 26878 27011 + 27007 27011 27008 + 27012 27008 27011 + 27012 27009 27008 + 27009 27012 27010 + 27010 27012 26888 + 26892 27010 26888 + 27006 27010 26892 + 26892 26897 27006 + 27001 27006 26897 + 26878 27013 27011 + 27011 27013 27014 + 27011 27014 27012 + 27012 27014 26888 + 26884 26888 27014 + 27014 27013 26884 + 26884 27013 26878 + 26897 27015 27001 + 26896 27015 26897 + 27016 27015 26896 + 27015 27016 26995 + 26995 27001 27015 + 26896 27017 27016 + 27016 27017 27018 + 27018 27019 27016 + 27016 27019 26996 + 26996 26995 27016 + 27017 26896 26895 + 26895 27020 27017 + 27018 27017 27020 + 27020 27021 27018 + 27022 27018 27021 + 27019 27018 27022 + 27022 27023 27019 + 27019 27023 27024 + 27024 26996 27019 + 26986 26996 27024 + 26895 26901 27020 + 27020 26901 26910 + 26910 27021 27020 + 27021 26910 26909 + 26909 27025 27021 + 27021 27025 27022 + 27026 27022 27025 + 27023 27022 27026 + 27026 27027 27023 + 27023 27027 27028 + 27028 27024 27023 + 26987 27024 27028 + 27024 26987 26986 + 27025 26909 26915 + 26915 27029 27025 + 27025 27029 27026 + 27030 27026 27029 + 27026 27030 27031 + 27027 27026 27031 + 27027 27031 27032 + 27032 27028 27027 + 27033 27028 27032 + 27028 27033 26987 + 26987 27033 26977 + 27029 26915 27034 + 27034 27035 27029 + 27029 27035 27030 + 27036 27030 27035 + 27031 27030 27036 + 27036 27037 27031 + 27031 27037 27038 + 27038 27032 27031 + 27034 26915 26914 + 26914 27039 27034 + 27040 27034 27039 + 27035 27034 27040 + 27040 27041 27035 + 27035 27041 27036 + 27042 27036 27041 + 27037 27036 27042 + 26920 27039 26914 + 27039 26920 27043 + 27043 27044 27039 + 27039 27044 27040 + 27045 27040 27044 + 27041 27040 27045 + 27045 27046 27041 + 27041 27046 27042 + 27043 26920 26919 + 26919 27047 27043 + 27048 27043 27047 + 27044 27043 27048 + 27048 27049 27044 + 27044 27049 27045 + 27045 27049 27050 + 27050 27051 27045 + 27046 27045 27051 + 26924 27047 26919 + 27047 26924 26929 + 26929 27052 27047 + 27047 27052 27048 + 27053 27048 27052 + 27049 27048 27053 + 27053 27050 27049 + 27050 27053 27054 + 27054 27055 27050 + 27050 27055 27056 + 27056 27051 27050 + 27052 26929 27057 + 27057 27058 27052 + 27052 27058 27053 + 27054 27053 27058 + 27058 27059 27054 + 27054 27059 27060 + 27055 27054 27060 + 27060 27061 27055 + 27056 27055 27061 + 27057 26929 26928 + 26928 27062 27057 + 27063 27057 27062 + 27058 27057 27063 + 27063 27059 27058 + 27059 27063 27064 + 27064 27060 27059 + 27060 27064 27065 + 27061 27060 27065 + 26933 27062 26928 + 27062 26933 27066 + 27066 27067 27062 + 27062 27067 27063 + 27063 27067 27064 + 27068 27064 27067 + 27064 27068 27065 + 27066 26933 26937 + 26937 27069 27066 + 27066 27069 27068 + 27067 27066 27068 + 26942 27069 26937 + 27069 26942 27065 + 27065 27068 27069 + 26942 27070 27065 + 27071 27065 27070 + 27065 27071 27072 + 27072 27073 27065 + 27073 27074 27065 + 27074 27075 27065 + 27075 27061 27065 + 26941 27070 26942 + 26947 27070 26941 + 27070 26947 27071 + 26947 26952 27071 + 26952 26951 27071 + 26951 27076 27071 + 27071 27076 27072 + 27077 27072 27076 + 27072 27077 27078 + 27079 27072 27078 + 27072 27079 27073 + 26951 27080 27076 + 27080 27077 27076 + 27077 27080 26956 + 26956 26960 27077 + 27077 26960 27081 + 27081 27078 27077 + 27082 27078 27081 + 27078 27082 27079 + 26956 27080 26951 + 26964 27081 26960 + 27083 27081 26964 + 27081 27083 27082 + 27082 27083 27084 + 27084 27085 27082 + 27082 27085 27079 + 27073 27079 27085 + 27085 27086 27073 + 27086 27087 27073 + 27074 27073 27087 + 26964 26968 27083 + 27083 26968 27088 + 27088 27084 27083 + 27089 27084 27088 + 27084 27089 27086 + 27086 27085 27084 + 26973 27088 26968 + 27090 27088 26973 + 27088 27090 27089 + 27089 27090 27091 + 27091 27092 27089 + 27086 27089 27092 + 27092 27087 27086 + 27093 27087 27092 + 27087 27093 27074 + 26973 27094 27090 + 27090 27094 27095 + 27095 27091 27090 + 27096 27091 27095 + 27091 27096 27097 + 27097 27092 27091 + 27092 27097 27093 + 27094 26973 26972 + 26972 26978 27094 + 27094 26978 27098 + 27098 27095 27094 + 27038 27095 27098 + 27095 27038 27096 + 27096 27038 27037 + 27037 27099 27096 + 27097 27096 27099 + 27099 27100 27097 + 27093 27097 27100 + 27033 27098 26978 + 27032 27098 27033 + 27098 27032 27038 + 26978 26977 27033 + 27042 27099 27037 + 27099 27042 27101 + 27101 27100 27099 + 27100 27101 27102 + 27102 27103 27100 + 27100 27103 27093 + 27093 27103 27074 + 27075 27074 27103 + 27101 27042 27046 + 27046 27104 27101 + 27102 27101 27104 + 27104 27105 27102 + 27102 27105 27075 + 27103 27102 27075 + 27051 27104 27046 + 27104 27051 27056 + 27056 27105 27104 + 27105 27056 27061 + 27061 27075 27105 + 27106 27107 27108 + 27106 27109 27107 + 27110 27107 27109 + 27107 27110 27111 + 27108 27107 27111 + 27112 27106 27108 + 27106 27112 27113 + 27113 27114 27106 + 27114 27115 27106 + 27115 27116 27106 + 27106 27116 27109 + 27108 27117 27112 + 27112 27117 27118 + 27119 27112 27118 + 27112 27119 27113 + 27120 27117 27108 + 27117 27120 27121 + 27118 27117 27121 + 27118 27121 27122 + 27122 27123 27118 + 27119 27118 27123 + 27124 27119 27123 + 27119 27124 27113 + 27108 27111 27120 + 27120 27111 27125 + 27125 27126 27120 + 27121 27120 27126 + 27126 27127 27121 + 27122 27121 27127 + 27128 27125 27111 + 27125 27128 27129 + 27129 27130 27125 + 27125 27130 27131 + 27131 27126 27125 + 27127 27126 27131 + 27111 27110 27128 + 27132 27128 27110 + 27129 27128 27132 + 27132 27133 27129 + 27129 27133 27134 + 27134 27135 27129 + 27130 27129 27135 + 27135 27136 27130 + 27131 27130 27136 + 27110 27137 27132 + 27138 27132 27137 + 27132 27138 27139 + 27139 27133 27132 + 27133 27139 27140 + 27140 27134 27133 + 27109 27137 27110 + 27109 27141 27137 + 27141 27142 27137 + 27137 27142 27138 + 27143 27138 27142 + 27139 27138 27143 + 27143 27144 27139 + 27139 27144 27145 + 27145 27140 27139 + 27116 27141 27109 + 27116 27146 27141 + 27142 27141 27146 + 27146 27147 27142 + 27142 27147 27143 + 27143 27147 27148 + 27149 27143 27148 + 27143 27149 27150 + 27150 27144 27143 + 27116 27115 27146 + 27115 27151 27146 + 27146 27151 27147 + 27151 27148 27147 + 27148 27151 27152 + 27152 27153 27148 + 27148 27153 27154 + 27148 27154 27149 + 27150 27149 27154 + 27115 27152 27151 + 27115 27114 27152 + 27114 27155 27152 + 27152 27155 27156 + 27152 27156 27153 + 27153 27156 27157 + 27157 27154 27153 + 27154 27157 27158 + 27158 27159 27154 + 27154 27159 27150 + 27114 27160 27155 + 27160 27161 27155 + 27161 27156 27155 + 27156 27161 27162 + 27162 27157 27156 + 27158 27157 27162 + 27163 27160 27114 + 27160 27163 27164 + 27164 27161 27160 + 27161 27164 27165 + 27165 27162 27161 + 27162 27165 27166 + 27166 27167 27162 + 27162 27167 27158 + 27114 27113 27163 + 27113 27168 27163 + 27168 27169 27163 + 27169 27164 27163 + 27164 27169 27170 + 27170 27165 27164 + 27166 27165 27170 + 27171 27168 27113 + 27168 27171 27172 + 27172 27169 27168 + 27169 27172 27173 + 27173 27170 27169 + 27170 27173 27174 + 27174 27175 27170 + 27170 27175 27166 + 27113 27176 27171 + 27176 27177 27171 + 27171 27177 27178 + 27172 27171 27178 + 27172 27178 27179 + 27179 27173 27172 + 27174 27173 27179 + 27124 27176 27113 + 27176 27124 27180 + 27180 27177 27176 + 27177 27180 27181 + 27181 27178 27177 + 27178 27181 27182 + 27182 27179 27178 + 27179 27182 27183 + 27183 27184 27179 + 27179 27184 27174 + 27124 27185 27180 + 27185 27186 27180 + 27186 27181 27180 + 27181 27186 27187 + 27187 27182 27181 + 27183 27182 27187 + 27123 27185 27124 + 27185 27123 27122 + 27122 27186 27185 + 27186 27122 27188 + 27188 27187 27186 + 27187 27188 27189 + 27189 27190 27187 + 27187 27190 27183 + 27183 27190 27191 + 27191 27192 27183 + 27184 27183 27192 + 27127 27188 27122 + 27189 27188 27127 + 27127 27193 27189 + 27189 27193 27194 + 27194 27195 27189 + 27190 27189 27195 + 27195 27191 27190 + 27131 27193 27127 + 27193 27131 27196 + 27196 27194 27193 + 27194 27196 27197 + 27197 27198 27194 + 27194 27198 27199 + 27199 27195 27194 + 27191 27195 27199 + 27136 27196 27131 + 27197 27196 27136 + 27136 27200 27197 + 27197 27200 27201 + 27201 27202 27197 + 27198 27197 27202 + 27202 27203 27198 + 27199 27198 27203 + 27204 27200 27136 + 27200 27204 27205 + 27205 27201 27200 + 27201 27205 27206 + 27206 27207 27201 + 27201 27207 27208 + 27208 27202 27201 + 27203 27202 27208 + 27136 27135 27204 + 27204 27135 27134 + 27134 27209 27204 + 27204 27209 27210 + 27210 27205 27204 + 27206 27205 27210 + 27210 27211 27206 + 27206 27211 27212 + 27212 27213 27206 + 27207 27206 27213 + 27214 27209 27134 + 27209 27214 27215 + 27215 27210 27209 + 27210 27215 27216 + 27216 27211 27210 + 27211 27216 27217 + 27217 27212 27211 + 27134 27140 27214 + 27214 27140 27145 + 27145 27218 27214 + 27214 27218 27219 + 27219 27215 27214 + 27216 27215 27219 + 27219 27220 27216 + 27216 27220 27221 + 27221 27217 27216 + 27222 27218 27145 + 27218 27222 27223 + 27223 27219 27218 + 27219 27223 27224 + 27224 27220 27219 + 27220 27224 27225 + 27225 27221 27220 + 27145 27226 27222 + 27222 27226 27227 + 27227 27228 27222 + 27222 27228 27229 + 27229 27223 27222 + 27224 27223 27229 + 27229 27230 27224 + 27225 27224 27230 + 27226 27145 27144 + 27144 27150 27226 + 27227 27226 27150 + 27150 27159 27227 + 27231 27227 27159 + 27227 27231 27232 + 27232 27228 27227 + 27228 27232 27233 + 27233 27229 27228 + 27229 27233 27234 + 27234 27230 27229 + 27159 27158 27231 + 27235 27231 27158 + 27232 27231 27235 + 27235 27236 27232 + 27232 27236 27237 + 27237 27233 27232 + 27234 27233 27237 + 27237 27238 27234 + 27239 27234 27238 + 27230 27234 27239 + 27158 27167 27235 + 27240 27235 27167 + 27235 27240 27241 + 27241 27236 27235 + 27236 27241 27242 + 27242 27237 27236 + 27237 27242 27243 + 27243 27238 27237 + 27167 27166 27240 + 27244 27240 27166 + 27241 27240 27244 + 27244 27245 27241 + 27241 27245 27246 + 27246 27242 27241 + 27243 27242 27246 + 27166 27175 27244 + 27247 27244 27175 + 27244 27247 27248 + 27248 27245 27244 + 27245 27248 27249 + 27249 27246 27245 + 27246 27249 27250 + 27250 27251 27246 + 27246 27251 27243 + 27175 27174 27247 + 27252 27247 27174 + 27248 27247 27252 + 27252 27253 27248 + 27248 27253 27254 + 27254 27249 27248 + 27250 27249 27254 + 27174 27184 27252 + 27192 27252 27184 + 27252 27192 27255 + 27255 27253 27252 + 27253 27255 27256 + 27256 27254 27253 + 27254 27256 27257 + 27257 27258 27254 + 27254 27258 27250 + 27255 27192 27191 + 27191 27259 27255 + 27255 27259 27260 + 27260 27256 27255 + 27257 27256 27260 + 27260 27261 27257 + 27257 27261 27262 + 27262 27263 27257 + 27258 27257 27263 + 27199 27259 27191 + 27259 27199 27264 + 27264 27260 27259 + 27260 27264 27261 + 27264 27265 27261 + 27261 27265 27266 + 27266 27262 27261 + 27203 27264 27199 + 27265 27264 27203 + 27203 27267 27265 + 27265 27267 27268 + 27268 27266 27265 + 27269 27266 27268 + 27262 27266 27269 + 27269 27270 27262 + 27262 27270 27271 + 27271 27263 27262 + 27208 27267 27203 + 27267 27208 27272 + 27272 27268 27267 + 27273 27268 27272 + 27268 27273 27269 + 27274 27272 27208 + 27275 27272 27274 + 27272 27275 27273 + 27273 27275 27276 + 27276 27277 27273 + 27269 27273 27277 + 27208 27207 27274 + 27213 27274 27207 + 27278 27274 27213 + 27274 27278 27275 + 27276 27275 27278 + 27279 27276 27278 + 27280 27276 27279 + 27280 27277 27276 + 27277 27280 27281 + 27277 27281 27269 + 27213 27282 27278 + 27278 27282 27283 + 27283 27284 27278 + 27278 27284 27279 + 27285 27279 27284 + 27285 27286 27279 + 27279 27286 27280 + 27282 27213 27212 + 27212 27287 27282 + 27283 27282 27287 + 27287 27288 27283 + 27289 27283 27288 + 27284 27283 27289 + 27284 27289 27285 + 27285 27289 27290 + 27290 27291 27285 + 27286 27285 27291 + 27287 27212 27217 + 27217 27292 27287 + 27287 27292 27293 + 27293 27288 27287 + 27290 27288 27293 + 27288 27290 27289 + 27292 27217 27221 + 27221 27294 27292 + 27293 27292 27294 + 27295 27293 27294 + 27296 27293 27295 + 27293 27296 27290 + 27290 27296 27297 + 27297 27291 27290 + 27298 27291 27297 + 27291 27298 27286 + 27280 27286 27298 + 27221 27225 27294 + 27294 27225 27299 + 27299 27300 27294 + 27294 27300 27295 + 27301 27295 27300 + 27302 27295 27301 + 27295 27302 27296 + 27297 27296 27302 + 27299 27225 27230 + 27230 27303 27299 + 27304 27299 27303 + 27300 27299 27304 + 27300 27304 27301 + 27301 27304 27305 + 27305 27306 27301 + 27307 27301 27306 + 27301 27307 27302 + 27239 27303 27230 + 27305 27303 27239 + 27303 27305 27304 + 27305 27239 27308 + 27308 27306 27305 + 27309 27306 27308 + 27306 27309 27307 + 27310 27307 27309 + 27302 27307 27310 + 27310 27311 27302 + 27302 27311 27297 + 27312 27297 27311 + 27297 27312 27298 + 27313 27308 27239 + 27309 27308 27313 + 27313 27314 27309 + 27309 27314 27315 + 27315 27316 27309 + 27316 27310 27309 + 27317 27310 27316 + 27311 27310 27317 + 27311 27317 27312 + 27318 27313 27239 + 27319 27313 27318 + 27314 27313 27319 + 27314 27319 27320 + 27320 27315 27314 + 27315 27320 27321 + 27315 27321 27322 + 27322 27316 27315 + 27323 27318 27239 + 27324 27318 27323 + 27318 27324 27325 + 27325 27326 27318 + 27318 27326 27319 + 27319 27326 27327 + 27327 27320 27319 + 27321 27320 27327 + 27238 27323 27239 + 27328 27323 27238 + 27329 27323 27328 + 27323 27329 27324 + 27330 27324 27329 + 27325 27324 27330 + 27330 27331 27325 + 27332 27325 27331 + 27326 27325 27332 + 27332 27327 27326 + 27238 27243 27328 + 27333 27328 27243 + 27334 27328 27333 + 27328 27334 27329 + 27329 27334 27335 + 27335 27336 27329 + 27336 27330 27329 + 27337 27330 27336 + 27331 27330 27337 + 27243 27251 27333 + 27338 27333 27251 + 27333 27338 27339 + 27333 27339 27334 + 27335 27334 27339 + 27340 27335 27339 + 27341 27335 27340 + 27336 27335 27341 + 27336 27341 27337 + 27251 27250 27338 + 27338 27250 27342 + 27342 27343 27338 + 27339 27338 27343 + 27343 27344 27339 + 27339 27344 27340 + 27345 27340 27344 + 27340 27345 27346 + 27340 27346 27341 + 27337 27341 27346 + 27250 27258 27342 + 27263 27342 27258 + 27347 27342 27263 + 27342 27347 27348 + 27348 27343 27342 + 27344 27343 27348 + 27344 27348 27345 + 27345 27348 27347 + 27349 27345 27347 + 27346 27345 27349 + 27349 27350 27346 + 27346 27350 27351 + 27346 27351 27337 + 27263 27271 27347 + 27347 27271 27352 + 27352 27353 27347 + 27347 27353 27349 + 27354 27349 27353 + 27350 27349 27354 + 27350 27354 27355 + 27355 27351 27350 + 27356 27351 27355 + 27351 27356 27337 + 27352 27271 27270 + 27357 27352 27270 + 27358 27352 27357 + 27353 27352 27358 + 27353 27358 27354 + 27355 27354 27358 + 27358 27359 27355 + 27359 27360 27355 + 27361 27355 27360 + 27355 27361 27356 + 27270 27362 27357 + 27363 27357 27362 + 27359 27357 27363 + 27357 27359 27358 + 27364 27362 27270 + 27365 27362 27364 + 27362 27365 27363 + 27366 27363 27365 + 27359 27363 27366 + 27366 27360 27359 + 27367 27360 27366 + 27360 27367 27361 + 27270 27269 27364 + 27368 27364 27269 + 27365 27364 27368 + 27368 27369 27365 + 27365 27369 27366 + 27370 27366 27369 + 27366 27370 27367 + 27367 27370 27371 + 27367 27371 27372 + 27372 27361 27367 + 27373 27368 27269 + 27368 27373 27374 + 27375 27368 27374 + 27375 27369 27368 + 27369 27375 27370 + 27376 27370 27375 + 27370 27376 27371 + 27281 27373 27269 + 27377 27373 27281 + 27377 27374 27373 + 27374 27377 27378 + 27378 27379 27374 + 27375 27374 27379 + 27379 27376 27375 + 27380 27376 27379 + 27371 27376 27380 + 27371 27380 27381 + 27372 27371 27381 + 27281 27382 27377 + 27377 27382 27378 + 27383 27378 27382 + 27379 27378 27383 + 27379 27383 27380 + 27384 27380 27383 + 27384 27385 27380 + 27385 27381 27380 + 27386 27382 27281 + 27382 27386 27383 + 27383 27386 27384 + 27384 27386 27387 + 27388 27384 27387 + 27384 27388 27389 + 27389 27385 27384 + 27386 27281 27387 + 27280 27387 27281 + 27388 27387 27280 + 27298 27388 27280 + 27389 27388 27298 + 27298 27312 27389 + 27390 27389 27312 + 27385 27389 27390 + 27390 27391 27385 + 27381 27385 27391 + 27391 27392 27381 + 27392 27372 27381 + 27393 27390 27312 + 27394 27390 27393 + 27391 27390 27394 + 27394 27395 27391 + 27391 27395 27392 + 27395 27396 27392 + 27372 27392 27396 + 27397 27372 27396 + 27361 27372 27397 + 27317 27393 27312 + 27316 27393 27317 + 27322 27393 27316 + 27393 27322 27394 + 27394 27322 27321 + 27321 27398 27394 + 27398 27399 27394 + 27395 27394 27399 + 27399 27400 27395 + 27396 27395 27400 + 27400 27401 27396 + 27397 27396 27401 + 27327 27398 27321 + 27398 27327 27332 + 27398 27332 27402 + 27402 27399 27398 + 27400 27399 27402 + 27400 27402 27401 + 27402 27403 27401 + 27404 27401 27403 + 27401 27404 27397 + 27397 27404 27405 + 27356 27397 27405 + 27356 27361 27397 + 27403 27402 27332 + 27331 27403 27332 + 27331 27405 27403 + 27405 27404 27403 + 27337 27405 27331 + 27356 27405 27337 + 27406 27407 27408 + 27407 27406 27409 + 27410 27407 27409 + 27407 27410 27411 + 27411 27412 27407 + 27407 27412 27408 + 27408 27413 27406 + 27413 27414 27406 + 27409 27406 27414 + 27413 27408 27415 + 27415 27416 27413 + 27413 27416 27417 + 27417 27414 27413 + 27418 27414 27417 + 27414 27418 27409 + 27419 27415 27408 + 27415 27419 27420 + 27420 27421 27415 + 27416 27415 27421 + 27421 27422 27416 + 27417 27416 27422 + 27412 27419 27408 + 27423 27419 27412 + 27419 27423 27424 + 27424 27420 27419 + 27420 27424 27425 + 27425 27426 27420 + 27420 27426 27427 + 27427 27421 27420 + 27422 27421 27427 + 27412 27411 27423 + 27423 27411 27428 + 27428 27429 27423 + 27423 27429 27430 + 27430 27424 27423 + 27425 27424 27430 + 27428 27411 27410 + 27431 27428 27410 + 27428 27431 27432 + 27432 27429 27428 + 27429 27432 27433 + 27433 27430 27429 + 27430 27433 27434 + 27434 27435 27430 + 27430 27435 27425 + 27410 27436 27431 + 27437 27431 27436 + 27432 27431 27437 + 27437 27438 27432 + 27432 27438 27439 + 27439 27433 27432 + 27434 27433 27439 + 27436 27410 27409 + 27409 27440 27436 + 27440 27441 27436 + 27441 27442 27436 + 27442 27443 27436 + 27437 27436 27443 + 27440 27409 27444 + 27444 27445 27440 + 27445 27446 27440 + 27446 27447 27440 + 27447 27441 27440 + 27418 27444 27409 + 27448 27444 27418 + 27445 27444 27448 + 27448 27449 27445 + 27445 27449 27450 + 27450 27446 27445 + 27447 27446 27450 + 27418 27451 27448 + 27448 27451 27452 + 27452 27453 27448 + 27449 27448 27453 + 27453 27454 27449 + 27450 27449 27454 + 27417 27451 27418 + 27451 27417 27455 + 27455 27452 27451 + 27452 27455 27456 + 27456 27457 27452 + 27452 27457 27458 + 27458 27453 27452 + 27454 27453 27458 + 27422 27455 27417 + 27456 27455 27422 + 27422 27459 27456 + 27456 27459 27460 + 27460 27461 27456 + 27457 27456 27461 + 27461 27462 27457 + 27458 27457 27462 + 27427 27459 27422 + 27459 27427 27463 + 27463 27460 27459 + 27460 27463 27464 + 27464 27465 27460 + 27460 27465 27466 + 27466 27461 27460 + 27462 27461 27466 + 27467 27463 27427 + 27464 27463 27467 + 27467 27468 27464 + 27464 27468 27469 + 27469 27470 27464 + 27465 27464 27470 + 27470 27471 27465 + 27466 27465 27471 + 27427 27426 27467 + 27472 27467 27426 + 27467 27472 27473 + 27473 27468 27467 + 27468 27473 27474 + 27474 27469 27468 + 27426 27425 27472 + 27475 27472 27425 + 27473 27472 27475 + 27475 27476 27473 + 27473 27476 27477 + 27477 27478 27473 + 27478 27474 27473 + 27479 27474 27478 + 27469 27474 27479 + 27425 27435 27475 + 27480 27475 27435 + 27476 27475 27480 + 27480 27481 27476 + 27476 27481 27482 + 27482 27483 27476 + 27476 27483 27477 + 27435 27434 27480 + 27484 27480 27434 + 27481 27480 27484 + 27484 27485 27481 + 27482 27481 27485 + 27485 27486 27482 + 27487 27482 27486 + 27482 27487 27488 + 27488 27483 27482 + 27434 27489 27484 + 27490 27484 27489 + 27485 27484 27490 + 27490 27491 27485 + 27485 27491 27486 + 27491 27492 27486 + 27493 27486 27492 + 27486 27493 27487 + 27439 27489 27434 + 27494 27489 27439 + 27489 27494 27490 + 27490 27494 27495 + 27495 27496 27490 + 27491 27490 27496 + 27496 27497 27491 + 27492 27491 27497 + 27439 27498 27494 + 27494 27498 27499 + 27499 27495 27494 + 27500 27495 27499 + 27495 27500 27501 + 27501 27496 27495 + 27496 27501 27502 + 27497 27496 27502 + 27498 27439 27438 + 27438 27503 27498 + 27499 27498 27503 + 27503 27504 27499 + 27505 27499 27504 + 27499 27505 27500 + 27503 27438 27437 + 27437 27506 27503 + 27503 27506 27507 + 27507 27504 27503 + 27504 27507 27508 + 27509 27504 27508 + 27504 27509 27505 + 27510 27505 27509 + 27500 27505 27510 + 27506 27437 27443 + 27507 27506 27443 + 27507 27443 27442 + 27508 27507 27442 + 27511 27508 27442 + 27509 27508 27511 + 27511 27512 27509 + 27509 27512 27510 + 27513 27510 27512 + 27510 27513 27514 + 27514 27515 27510 + 27510 27515 27500 + 27511 27442 27441 + 27516 27511 27441 + 27511 27516 27517 + 27517 27512 27511 + 27512 27517 27513 + 27518 27513 27517 + 27514 27513 27518 + 27447 27516 27441 + 27517 27516 27447 + 27447 27519 27517 + 27517 27519 27518 + 27520 27518 27519 + 27518 27520 27521 + 27521 27522 27518 + 27518 27522 27514 + 27450 27519 27447 + 27519 27450 27520 + 27454 27520 27450 + 27521 27520 27454 + 27454 27523 27521 + 27521 27523 27524 + 27524 27525 27521 + 27522 27521 27525 + 27525 27526 27522 + 27514 27522 27526 + 27526 27527 27514 + 27515 27514 27527 + 27458 27523 27454 + 27523 27458 27528 + 27528 27524 27523 + 27524 27528 27529 + 27529 27530 27524 + 27524 27530 27531 + 27531 27525 27524 + 27526 27525 27531 + 27462 27528 27458 + 27529 27528 27462 + 27462 27532 27529 + 27529 27532 27533 + 27533 27534 27529 + 27530 27529 27534 + 27534 27535 27530 + 27531 27530 27535 + 27466 27532 27462 + 27532 27466 27536 + 27536 27533 27532 + 27533 27536 27537 + 27537 27538 27533 + 27533 27538 27539 + 27539 27534 27533 + 27535 27534 27539 + 27471 27536 27466 + 27537 27536 27471 + 27471 27540 27537 + 27541 27537 27540 + 27538 27537 27541 + 27541 27542 27538 + 27538 27542 27543 + 27539 27538 27543 + 27544 27540 27471 + 27540 27544 27545 + 27545 27546 27540 + 27540 27546 27541 + 27547 27541 27546 + 27542 27541 27547 + 27542 27547 27548 + 27548 27543 27542 + 27471 27470 27544 + 27544 27470 27469 + 27469 27549 27544 + 27544 27549 27550 + 27550 27545 27544 + 27551 27545 27550 + 27545 27551 27552 + 27552 27546 27545 + 27546 27552 27547 + 27548 27547 27552 + 27479 27549 27469 + 27549 27479 27553 + 27553 27550 27549 + 27554 27550 27553 + 27550 27554 27551 + 27555 27551 27554 + 27552 27551 27555 + 27555 27556 27552 + 27552 27556 27557 + 27557 27548 27552 + 27558 27553 27479 + 27559 27553 27558 + 27553 27559 27554 + 27554 27559 27560 + 27560 27561 27554 + 27554 27561 27555 + 27479 27562 27558 + 27563 27558 27562 + 27564 27558 27563 + 27558 27564 27559 + 27560 27559 27564 + 27478 27562 27479 + 27565 27562 27478 + 27562 27565 27563 + 27566 27563 27565 + 27567 27563 27566 + 27563 27567 27564 + 27564 27567 27568 + 27568 27569 27564 + 27564 27569 27560 + 27478 27570 27565 + 27565 27570 27571 + 27571 27572 27565 + 27565 27572 27566 + 27573 27566 27572 + 27574 27566 27573 + 27566 27574 27567 + 27568 27567 27574 + 27570 27478 27477 + 27477 27575 27570 + 27571 27570 27575 + 27575 27576 27571 + 27577 27571 27576 + 27571 27577 27578 + 27578 27572 27571 + 27572 27578 27573 + 27575 27477 27579 + 27579 27580 27575 + 27575 27580 27581 + 27581 27576 27575 + 27582 27576 27581 + 27576 27582 27577 + 27583 27577 27582 + 27578 27577 27583 + 27579 27477 27483 + 27483 27488 27579 + 27584 27579 27488 + 27580 27579 27584 + 27584 27585 27580 + 27581 27580 27585 + 27585 27586 27581 + 27587 27581 27586 + 27581 27587 27582 + 27488 27588 27584 + 27589 27584 27588 + 27585 27584 27589 + 27589 27590 27585 + 27585 27590 27591 + 27591 27586 27585 + 27592 27586 27591 + 27586 27592 27587 + 27593 27588 27488 + 27588 27593 27594 + 27594 27595 27588 + 27588 27595 27589 + 27589 27595 27596 + 27596 27597 27589 + 27590 27589 27597 + 27488 27487 27593 + 27593 27487 27493 + 27493 27598 27593 + 27594 27593 27598 + 27598 27599 27594 + 27594 27599 27600 + 27600 27601 27594 + 27595 27594 27601 + 27601 27596 27595 + 27602 27598 27493 + 27598 27602 27603 + 27603 27599 27598 + 27599 27603 27604 + 27604 27600 27599 + 27493 27605 27602 + 27606 27602 27605 + 27603 27602 27606 + 27606 27607 27603 + 27603 27607 27608 + 27608 27604 27603 + 27609 27604 27608 + 27600 27604 27609 + 27492 27605 27493 + 27605 27492 27610 + 27610 27611 27605 + 27605 27611 27606 + 27612 27606 27611 + 27606 27612 27613 + 27613 27607 27606 + 27607 27613 27614 + 27614 27608 27607 + 27492 27497 27610 + 27615 27610 27497 + 27611 27610 27615 + 27615 27616 27611 + 27611 27616 27612 + 27617 27612 27616 + 27613 27612 27617 + 27617 27618 27613 + 27613 27618 27619 + 27619 27614 27613 + 27497 27502 27615 + 27615 27502 27620 + 27621 27615 27620 + 27616 27615 27621 + 27621 27622 27616 + 27616 27622 27617 + 27623 27617 27622 + 27617 27623 27624 + 27624 27618 27617 + 27502 27625 27620 + 27626 27620 27625 + 27620 27626 27627 + 27627 27628 27620 + 27620 27628 27629 + 27629 27630 27620 + 27620 27630 27621 + 27631 27625 27502 + 27632 27625 27631 + 27625 27632 27626 + 27633 27626 27632 + 27627 27626 27633 + 27502 27501 27631 + 27631 27501 27500 + 27500 27515 27631 + 27527 27631 27515 + 27631 27527 27632 + 27632 27527 27526 + 27526 27634 27632 + 27632 27634 27633 + 27635 27633 27634 + 27633 27635 27636 + 27636 27637 27633 + 27633 27637 27627 + 27531 27634 27526 + 27634 27531 27635 + 27535 27635 27531 + 27636 27635 27535 + 27535 27638 27636 + 27636 27638 27639 + 27639 27640 27636 + 27640 27641 27636 + 27637 27636 27641 + 27641 27642 27637 + 27627 27637 27642 + 27539 27638 27535 + 27638 27539 27643 + 27643 27639 27638 + 27639 27643 27644 + 27644 27645 27639 + 27639 27645 27646 + 27646 27640 27639 + 27543 27643 27539 + 27644 27643 27543 + 27543 27647 27644 + 27648 27644 27647 + 27645 27644 27648 + 27648 27649 27645 + 27645 27649 27650 + 27650 27651 27645 + 27651 27646 27645 + 27647 27543 27548 + 27647 27548 27557 + 27557 27652 27647 + 27647 27652 27648 + 27652 27653 27648 + 27654 27648 27653 + 27649 27648 27654 + 27654 27655 27649 + 27649 27655 27656 + 27656 27650 27649 + 27657 27652 27557 + 27652 27657 27658 + 27658 27653 27652 + 27658 27659 27653 + 27653 27659 27654 + 27660 27654 27659 + 27654 27660 27661 + 27655 27654 27661 + 27657 27557 27556 + 27556 27662 27657 + 27657 27662 27663 + 27663 27664 27657 + 27664 27658 27657 + 27664 27665 27658 + 27665 27659 27658 + 27659 27665 27660 + 27666 27660 27665 + 27661 27660 27666 + 27662 27556 27555 + 27555 27667 27662 + 27662 27667 27668 + 27668 27663 27662 + 27668 27669 27663 + 27663 27669 27670 + 27670 27664 27663 + 27665 27664 27670 + 27665 27670 27666 + 27667 27555 27561 + 27561 27671 27667 + 27668 27667 27671 + 27671 27672 27668 + 27673 27668 27672 + 27668 27673 27669 + 27671 27561 27560 + 27560 27674 27671 + 27671 27674 27675 + 27675 27672 27671 + 27676 27672 27675 + 27672 27676 27673 + 27677 27673 27676 + 27669 27673 27677 + 27674 27560 27569 + 27569 27678 27674 + 27675 27674 27678 + 27678 27679 27675 + 27680 27675 27679 + 27675 27680 27676 + 27676 27680 27681 + 27681 27682 27676 + 27676 27682 27677 + 27678 27569 27568 + 27568 27683 27678 + 27678 27683 27684 + 27684 27679 27678 + 27685 27679 27684 + 27679 27685 27680 + 27681 27680 27685 + 27683 27568 27686 + 27686 27687 27683 + 27684 27683 27687 + 27687 27688 27684 + 27689 27684 27688 + 27684 27689 27685 + 27574 27686 27568 + 27690 27686 27574 + 27687 27686 27690 + 27690 27691 27687 + 27687 27691 27692 + 27692 27688 27687 + 27692 27693 27688 + 27693 27694 27688 + 27688 27694 27689 + 27574 27695 27690 + 27690 27695 27696 + 27696 27697 27690 + 27697 27698 27690 + 27691 27690 27698 + 27698 27699 27691 + 27699 27692 27691 + 27573 27695 27574 + 27695 27573 27700 + 27700 27696 27695 + 27696 27700 27701 + 27696 27701 27702 + 27702 27697 27696 + 27703 27697 27702 + 27698 27697 27703 + 27704 27698 27703 + 27699 27698 27704 + 27700 27573 27578 + 27578 27705 27700 + 27701 27700 27705 + 27705 27706 27701 + 27702 27701 27706 + 27707 27702 27706 + 27703 27702 27707 + 27707 27708 27703 + 27704 27703 27708 + 27583 27705 27578 + 27706 27705 27583 + 27583 27709 27706 + 27706 27709 27710 + 27710 27711 27706 + 27706 27711 27712 + 27712 27707 27706 + 27713 27707 27712 + 27708 27707 27713 + 27709 27583 27714 + 27714 27715 27709 + 27710 27709 27715 + 27715 27716 27710 + 27717 27710 27716 + 27710 27717 27718 + 27718 27711 27710 + 27582 27714 27583 + 27719 27714 27582 + 27715 27714 27719 + 27719 27720 27715 + 27715 27720 27721 + 27721 27716 27715 + 27722 27716 27721 + 27716 27722 27717 + 27723 27717 27722 + 27718 27717 27723 + 27582 27587 27719 + 27719 27587 27592 + 27592 27724 27719 + 27720 27719 27724 + 27724 27725 27720 + 27721 27720 27725 + 27725 27726 27721 + 27727 27721 27726 + 27721 27727 27722 + 27728 27724 27592 + 27725 27724 27728 + 27728 27729 27725 + 27725 27729 27730 + 27730 27726 27725 + 27731 27726 27730 + 27726 27731 27727 + 27732 27727 27731 + 27722 27727 27732 + 27592 27733 27728 + 27728 27733 27734 + 27734 27735 27728 + 27729 27728 27735 + 27735 27736 27729 + 27730 27729 27736 + 27591 27733 27592 + 27733 27591 27737 + 27737 27734 27733 + 27734 27737 27738 + 27738 27739 27734 + 27734 27739 27740 + 27740 27735 27734 + 27736 27735 27740 + 27741 27737 27591 + 27738 27737 27741 + 27741 27742 27738 + 27738 27742 27743 + 27738 27743 27744 + 27739 27738 27744 + 27740 27739 27744 + 27591 27590 27741 + 27597 27741 27590 + 27741 27597 27745 + 27745 27742 27741 + 27742 27745 27743 + 27745 27746 27743 + 27743 27746 27747 + 27744 27743 27747 + 27748 27744 27747 + 27740 27744 27748 + 27749 27740 27748 + 27740 27749 27736 + 27745 27597 27596 + 27596 27750 27745 + 27745 27750 27746 + 27750 27751 27746 + 27751 27752 27746 + 27746 27752 27747 + 27751 27750 27596 + 27596 27601 27751 + 27751 27601 27600 + 27600 27753 27751 + 27751 27753 27752 + 27747 27752 27753 + 27753 27609 27747 + 27609 27754 27747 + 27755 27747 27754 + 27747 27755 27748 + 27609 27753 27600 + 27608 27754 27609 + 27756 27754 27608 + 27754 27756 27755 + 27756 27757 27755 + 27758 27755 27757 + 27755 27758 27748 + 27608 27614 27756 + 27756 27614 27757 + 27614 27619 27757 + 27759 27757 27619 + 27757 27759 27758 + 27758 27759 27760 + 27761 27758 27760 + 27758 27761 27748 + 27748 27761 27762 + 27762 27763 27748 + 27763 27749 27748 + 27736 27749 27763 + 27619 27764 27759 + 27759 27764 27765 + 27765 27760 27759 + 27766 27760 27765 + 27760 27766 27761 + 27766 27762 27761 + 27767 27762 27766 + 27763 27762 27767 + 27767 27768 27763 + 27763 27768 27736 + 27736 27768 27730 + 27764 27619 27618 + 27618 27624 27764 + 27765 27764 27624 + 27624 27769 27765 + 27770 27765 27769 + 27765 27770 27766 + 27766 27770 27767 + 27767 27770 27771 + 27771 27772 27767 + 27768 27767 27772 + 27772 27730 27768 + 27730 27772 27731 + 27773 27769 27624 + 27771 27769 27773 + 27769 27771 27770 + 27624 27623 27773 + 27773 27623 27774 + 27774 27775 27773 + 27776 27773 27775 + 27773 27776 27771 + 27771 27776 27731 + 27731 27772 27771 + 27622 27774 27623 + 27774 27622 27621 + 27621 27777 27774 + 27774 27777 27778 + 27778 27775 27774 + 27732 27775 27778 + 27775 27732 27776 + 27731 27776 27732 + 27777 27621 27630 + 27630 27779 27777 + 27778 27777 27779 + 27779 27780 27778 + 27781 27778 27780 + 27778 27781 27732 + 27732 27781 27722 + 27722 27781 27723 + 27779 27630 27629 + 27629 27782 27779 + 27779 27782 27783 + 27783 27780 27779 + 27723 27780 27783 + 27780 27723 27781 + 27782 27629 27784 + 27784 27785 27782 + 27783 27782 27785 + 27785 27786 27783 + 27787 27783 27786 + 27783 27787 27723 + 27723 27787 27718 + 27788 27784 27629 + 27789 27784 27788 + 27784 27789 27790 + 27790 27785 27784 + 27785 27790 27791 + 27791 27786 27785 + 27792 27786 27791 + 27786 27792 27787 + 27629 27628 27788 + 27793 27788 27628 + 27788 27793 27794 + 27794 27795 27788 + 27788 27795 27789 + 27796 27789 27795 + 27790 27789 27796 + 27628 27627 27793 + 27642 27793 27627 + 27794 27793 27642 + 27642 27797 27794 + 27798 27794 27797 + 27795 27794 27798 + 27798 27799 27795 + 27795 27799 27800 + 27800 27796 27795 + 27797 27642 27641 + 27797 27641 27640 + 27640 27801 27797 + 27797 27801 27802 + 27802 27798 27797 + 27803 27798 27802 + 27799 27798 27803 + 27803 27804 27799 + 27799 27804 27805 + 27805 27800 27799 + 27646 27801 27640 + 27801 27646 27651 + 27651 27802 27801 + 27806 27802 27651 + 27802 27806 27803 + 27807 27803 27806 + 27804 27803 27807 + 27806 27651 27650 + 27650 27808 27806 + 27806 27808 27807 + 27809 27807 27808 + 27810 27807 27809 + 27807 27810 27804 + 27811 27808 27650 + 27808 27811 27809 + 27811 27812 27809 + 27812 27813 27809 + 27810 27809 27813 + 27813 27814 27810 + 27804 27810 27814 + 27650 27656 27811 + 27811 27656 27815 + 27815 27812 27811 + 27816 27812 27815 + 27812 27816 27817 + 27817 27813 27812 + 27813 27817 27818 + 27818 27814 27813 + 27819 27815 27656 + 27816 27815 27819 + 27819 27820 27816 + 27816 27820 27821 + 27816 27821 27817 + 27818 27817 27821 + 27821 27822 27818 + 27818 27822 27823 + 27814 27818 27823 + 27824 27819 27656 + 27825 27819 27824 + 27819 27825 27820 + 27820 27825 27826 + 27826 27821 27820 + 27822 27821 27826 + 27826 27827 27822 + 27822 27827 27828 + 27822 27828 27823 + 27824 27656 27655 + 27655 27661 27824 + 27829 27824 27661 + 27824 27829 27830 + 27824 27830 27825 + 27825 27830 27831 + 27831 27826 27825 + 27827 27826 27831 + 27661 27666 27829 + 27829 27666 27669 + 27669 27832 27829 + 27830 27829 27832 + 27832 27831 27830 + 27831 27832 27677 + 27677 27833 27831 + 27831 27833 27827 + 27666 27670 27669 + 27677 27832 27669 + 27833 27677 27682 + 27682 27834 27833 + 27827 27833 27834 + 27835 27827 27834 + 27827 27835 27828 + 27836 27828 27835 + 27828 27836 27837 + 27837 27823 27828 + 27823 27837 27838 + 27823 27838 27814 + 27834 27682 27681 + 27681 27839 27834 + 27840 27834 27839 + 27834 27840 27835 + 27836 27835 27840 + 27840 27841 27836 + 27837 27836 27841 + 27837 27841 27842 + 27838 27837 27842 + 27839 27681 27843 + 27843 27844 27839 + 27845 27839 27844 + 27845 27840 27839 + 27841 27840 27845 + 27845 27846 27841 + 27841 27846 27847 + 27847 27842 27841 + 27685 27843 27681 + 27848 27843 27685 + 27848 27849 27843 + 27849 27844 27843 + 27850 27844 27849 + 27844 27850 27845 + 27846 27845 27850 + 27850 27851 27846 + 27846 27851 27852 + 27847 27846 27852 + 27685 27689 27848 + 27848 27689 27694 + 27694 27853 27848 + 27849 27848 27853 + 27853 27854 27849 + 27855 27849 27854 + 27855 27850 27849 + 27850 27855 27851 + 27851 27855 27856 + 27856 27857 27851 + 27851 27857 27852 + 27853 27694 27693 + 27858 27853 27693 + 27854 27853 27858 + 27858 27859 27854 + 27854 27859 27860 + 27860 27856 27854 + 27854 27856 27855 + 27858 27693 27861 + 27861 27862 27858 + 27859 27858 27862 + 27862 27863 27859 + 27860 27859 27863 + 27864 27860 27863 + 27857 27860 27864 + 27860 27857 27856 + 27861 27693 27692 + 27865 27861 27692 + 27866 27861 27865 + 27862 27861 27866 + 27867 27862 27866 + 27863 27862 27867 + 27699 27865 27692 + 27868 27865 27699 + 27868 27866 27865 + 27866 27868 27869 + 27869 27870 27866 + 27870 27867 27866 + 27863 27867 27870 + 27699 27704 27868 + 27869 27868 27704 + 27708 27869 27704 + 27871 27869 27708 + 27871 27870 27869 + 27870 27871 27863 + 27863 27871 27872 + 27872 27873 27863 + 27873 27864 27863 + 27874 27864 27873 + 27864 27874 27852 + 27864 27852 27857 + 27708 27713 27871 + 27871 27713 27872 + 27713 27875 27872 + 27876 27872 27875 + 27876 27877 27872 + 27872 27877 27878 + 27878 27873 27872 + 27873 27878 27879 + 27873 27879 27874 + 27712 27875 27713 + 27712 27880 27875 + 27875 27880 27876 + 27792 27876 27880 + 27877 27876 27792 + 27792 27881 27877 + 27877 27881 27882 + 27882 27883 27877 + 27883 27878 27877 + 27879 27878 27883 + 27880 27712 27711 + 27711 27718 27880 + 27880 27718 27787 + 27787 27792 27880 + 27791 27881 27792 + 27881 27791 27884 + 27884 27882 27881 + 27882 27884 27885 + 27882 27885 27886 + 27886 27883 27882 + 27883 27886 27887 + 27883 27887 27879 + 27879 27887 27888 + 27874 27879 27888 + 27884 27791 27790 + 27790 27889 27884 + 27885 27884 27889 + 27889 27890 27885 + 27886 27885 27890 + 27890 27891 27886 + 27891 27892 27886 + 27887 27886 27892 + 27892 27888 27887 + 27796 27889 27790 + 27890 27889 27796 + 27890 27796 27800 + 27800 27891 27890 + 27805 27891 27800 + 27891 27805 27893 + 27893 27892 27891 + 27888 27892 27893 + 27888 27893 27894 + 27894 27895 27888 + 27888 27895 27874 + 27852 27874 27895 + 27895 27847 27852 + 27893 27805 27804 + 27894 27893 27804 + 27838 27894 27804 + 27842 27894 27838 + 27894 27842 27847 + 27847 27895 27894 + 27814 27838 27804 + 27896 27897 27898 + 27896 27899 27897 + 27900 27897 27899 + 27897 27900 27901 + 27898 27897 27901 + 27902 27896 27898 + 27896 27902 27903 + 27903 27904 27896 + 27904 27905 27896 + 27905 27906 27896 + 27896 27906 27899 + 27898 27907 27902 + 27902 27907 27908 + 27909 27902 27908 + 27902 27909 27903 + 27910 27907 27898 + 27907 27910 27911 + 27908 27907 27911 + 27908 27911 27912 + 27912 27913 27908 + 27909 27908 27913 + 27898 27901 27910 + 27910 27901 27914 + 27914 27915 27910 + 27911 27910 27915 + 27915 27916 27911 + 27912 27911 27916 + 27917 27914 27901 + 27914 27917 27918 + 27918 27919 27914 + 27914 27919 27920 + 27920 27915 27914 + 27916 27915 27920 + 27901 27900 27917 + 27921 27917 27900 + 27918 27917 27921 + 27921 27922 27918 + 27918 27922 27923 + 27923 27924 27918 + 27919 27918 27924 + 27924 27925 27919 + 27920 27919 27925 + 27900 27926 27921 + 27927 27921 27926 + 27921 27927 27928 + 27928 27922 27921 + 27922 27928 27929 + 27929 27923 27922 + 27899 27926 27900 + 27899 27930 27926 + 27930 27931 27926 + 27926 27931 27927 + 27932 27927 27931 + 27928 27927 27932 + 27932 27933 27928 + 27928 27933 27934 + 27934 27929 27928 + 27906 27930 27899 + 27906 27935 27930 + 27931 27930 27935 + 27935 27936 27931 + 27931 27936 27932 + 27937 27932 27936 + 27932 27937 27938 + 27938 27933 27932 + 27933 27938 27939 + 27939 27934 27933 + 27906 27905 27935 + 27905 27940 27935 + 27935 27940 27941 + 27941 27936 27935 + 27936 27941 27937 + 27942 27937 27941 + 27938 27937 27942 + 27942 27943 27938 + 27938 27943 27944 + 27944 27939 27938 + 27905 27945 27940 + 27941 27940 27945 + 27945 27946 27941 + 27941 27946 27942 + 27947 27942 27946 + 27942 27947 27948 + 27948 27943 27942 + 27943 27948 27949 + 27949 27944 27943 + 27950 27945 27905 + 27945 27950 27951 + 27951 27946 27945 + 27946 27951 27947 + 27952 27947 27951 + 27948 27947 27952 + 27952 27953 27948 + 27948 27953 27954 + 27954 27949 27948 + 27905 27904 27950 + 27904 27955 27950 + 27951 27950 27955 + 27955 27956 27951 + 27951 27956 27952 + 27957 27952 27956 + 27952 27957 27958 + 27958 27953 27952 + 27953 27958 27959 + 27959 27954 27953 + 27960 27955 27904 + 27955 27960 27961 + 27961 27956 27955 + 27956 27961 27957 + 27962 27957 27961 + 27958 27957 27962 + 27962 27963 27958 + 27958 27963 27964 + 27964 27959 27958 + 27904 27903 27960 + 27903 27965 27960 + 27965 27966 27960 + 27966 27961 27960 + 27961 27966 27962 + 27967 27962 27966 + 27962 27967 27968 + 27968 27963 27962 + 27963 27968 27969 + 27969 27964 27963 + 27970 27965 27903 + 27965 27970 27971 + 27971 27966 27965 + 27966 27971 27967 + 27972 27967 27971 + 27968 27967 27972 + 27972 27973 27968 + 27969 27968 27973 + 27903 27974 27970 + 27974 27975 27970 + 27971 27970 27975 + 27975 27976 27971 + 27971 27976 27972 + 27977 27972 27976 + 27972 27977 27978 + 27978 27973 27972 + 27979 27974 27903 + 27974 27979 27980 + 27980 27975 27974 + 27975 27980 27981 + 27981 27976 27975 + 27976 27981 27977 + 27982 27977 27981 + 27978 27977 27982 + 27909 27979 27903 + 27979 27909 27983 + 27979 27983 27980 + 27981 27980 27983 + 27983 27984 27981 + 27981 27984 27982 + 27985 27982 27984 + 27982 27985 27986 + 27986 27987 27982 + 27982 27987 27978 + 27909 27913 27983 + 27983 27913 27912 + 27983 27912 27984 + 27984 27912 27985 + 27916 27985 27912 + 27986 27985 27916 + 27916 27988 27986 + 27986 27988 27989 + 27989 27990 27986 + 27987 27986 27990 + 27990 27991 27987 + 27978 27987 27991 + 27991 27992 27978 + 27973 27978 27992 + 27920 27988 27916 + 27988 27920 27993 + 27993 27989 27988 + 27989 27993 27994 + 27994 27995 27989 + 27989 27995 27996 + 27996 27990 27989 + 27990 27996 27997 + 27997 27991 27990 + 27925 27993 27920 + 27994 27993 27925 + 27925 27998 27994 + 27994 27998 27999 + 27999 28000 27994 + 27995 27994 28000 + 28000 28001 27995 + 27996 27995 28001 + 28002 27996 28001 + 27997 27996 28002 + 28003 27998 27925 + 27998 28003 28004 + 28004 27999 27998 + 27999 28004 28005 + 28005 28006 27999 + 27999 28006 28007 + 28007 28000 27999 + 28001 28000 28007 + 27925 27924 28003 + 28003 27924 27923 + 27923 28008 28003 + 28003 28008 28009 + 28009 28004 28003 + 28005 28004 28009 + 28009 28010 28005 + 28011 28005 28010 + 28006 28005 28011 + 28011 28012 28006 + 28007 28006 28012 + 28013 28008 27923 + 28008 28013 28014 + 28014 28009 28008 + 28009 28014 28015 + 28015 28010 28009 + 28010 28015 28016 + 28016 28017 28010 + 28010 28017 28011 + 27923 27929 28013 + 28013 27929 27934 + 27934 28018 28013 + 28013 28018 28019 + 28019 28014 28013 + 28015 28014 28019 + 28019 28020 28015 + 28016 28015 28020 + 28021 28018 27934 + 28018 28021 28022 + 28022 28019 28018 + 28019 28022 28023 + 28023 28020 28019 + 28020 28023 28024 + 28024 28025 28020 + 28020 28025 28016 + 27934 27939 28021 + 28021 27939 27944 + 27944 28026 28021 + 28021 28026 28027 + 28027 28022 28021 + 28023 28022 28027 + 28027 28028 28023 + 28023 28028 28029 + 28024 28023 28029 + 28030 28026 27944 + 28026 28030 28031 + 28031 28027 28026 + 28027 28031 28032 + 28032 28028 28027 + 28028 28032 28033 + 28033 28029 28028 + 27944 27949 28030 + 28030 27949 27954 + 27954 28034 28030 + 28030 28034 28035 + 28035 28031 28030 + 28032 28031 28035 + 28035 28036 28032 + 28032 28036 28037 + 28037 28033 28032 + 28038 28033 28037 + 28029 28033 28038 + 28039 28034 27954 + 28034 28039 28040 + 28040 28035 28034 + 28035 28040 28041 + 28041 28036 28035 + 28036 28041 28042 + 28042 28037 28036 + 27954 27959 28039 + 28039 27959 27964 + 27964 28043 28039 + 28039 28043 28044 + 28044 28045 28039 + 28045 28040 28039 + 28041 28040 28045 + 28045 28046 28041 + 28041 28046 28047 + 28047 28042 28041 + 28043 27964 27969 + 27969 28048 28043 + 28043 28048 28049 + 28049 28050 28043 + 28043 28050 28044 + 28048 27969 28051 + 28051 28052 28048 + 28049 28048 28052 + 28052 28053 28049 + 28054 28049 28053 + 28049 28054 28055 + 28055 28050 28049 + 27973 28051 27969 + 27992 28051 27973 + 28052 28051 27992 + 27992 28056 28052 + 28052 28056 28057 + 28057 28053 28052 + 28058 28053 28057 + 28053 28058 28054 + 28054 28058 28059 + 28059 28060 28054 + 28055 28054 28060 + 28056 27992 27991 + 27991 27997 28056 + 27997 28061 28056 + 28061 28057 28056 + 28062 28057 28061 + 28057 28062 28058 + 28058 28062 28063 + 28063 28059 28058 + 28002 28061 27997 + 28064 28061 28002 + 28061 28064 28062 + 28063 28062 28064 + 28064 28065 28063 + 28066 28063 28065 + 28059 28063 28066 + 28066 28067 28059 + 28059 28067 28068 + 28068 28060 28059 + 28002 28069 28064 + 28064 28069 28070 + 28070 28065 28064 + 28065 28070 28071 + 28071 28072 28065 + 28065 28072 28066 + 28069 28002 28073 + 28073 28074 28069 + 28070 28069 28074 + 28074 28075 28070 + 28071 28070 28075 + 28073 28002 28001 + 28001 28076 28073 + 28077 28073 28076 + 28073 28077 28078 + 28078 28074 28073 + 28074 28078 28079 + 28079 28075 28074 + 28080 28076 28001 + 28081 28076 28080 + 28076 28081 28077 + 28082 28077 28081 + 28078 28077 28082 + 28082 28083 28078 + 28078 28083 28084 + 28084 28079 28078 + 28001 28085 28080 + 28080 28085 28086 + 28086 28087 28080 + 28088 28080 28087 + 28080 28088 28081 + 28007 28085 28001 + 28085 28007 28089 + 28089 28086 28085 + 28090 28086 28089 + 28086 28090 28091 + 28091 28087 28086 + 28087 28091 28092 + 28092 28093 28087 + 28087 28093 28088 + 28012 28089 28007 + 28094 28089 28012 + 28089 28094 28090 + 28090 28094 28095 + 28095 28096 28090 + 28090 28096 28097 + 28097 28091 28090 + 28092 28091 28097 + 28012 28098 28094 + 28095 28094 28098 + 28098 28099 28095 + 28100 28095 28099 + 28095 28100 28101 + 28101 28096 28095 + 28096 28101 28102 + 28102 28097 28096 + 28098 28012 28011 + 28011 28103 28098 + 28098 28103 28104 + 28104 28099 28098 + 28105 28099 28104 + 28099 28105 28100 + 28106 28100 28105 + 28101 28100 28106 + 28103 28011 28017 + 28017 28107 28103 + 28104 28103 28107 + 28108 28104 28107 + 28109 28104 28108 + 28104 28109 28105 + 28105 28109 28110 + 28110 28111 28105 + 28105 28111 28106 + 28107 28017 28016 + 28107 28016 28112 + 28112 28113 28107 + 28107 28113 28108 + 28114 28108 28113 + 28108 28114 28115 + 28108 28115 28109 + 28116 28109 28115 + 28116 28110 28109 + 28025 28112 28016 + 28117 28112 28025 + 28113 28112 28117 + 28113 28117 28114 + 28118 28114 28117 + 28115 28114 28118 + 28118 28119 28115 + 28115 28119 28116 + 28120 28116 28119 + 28121 28116 28120 + 28116 28121 28110 + 28025 28122 28117 + 28117 28122 28118 + 28122 28123 28118 + 28124 28118 28123 + 28118 28124 28119 + 28119 28124 28120 + 28125 28120 28124 + 28120 28125 28126 + 28121 28120 28126 + 28127 28122 28025 + 28122 28127 28128 + 28128 28123 28122 + 28123 28128 28129 + 28129 28130 28123 + 28123 28130 28124 + 28130 28125 28124 + 28131 28125 28130 + 28126 28125 28131 + 28025 28024 28127 + 28127 28024 28132 + 28132 28133 28127 + 28128 28127 28133 + 28134 28128 28133 + 28134 28135 28128 + 28135 28129 28128 + 28131 28129 28135 + 28130 28129 28131 + 28029 28132 28024 + 28136 28132 28029 + 28132 28136 28133 + 28133 28136 28137 + 28137 28138 28133 + 28133 28138 28134 + 28139 28134 28138 + 28135 28134 28139 + 28029 28038 28136 + 28136 28038 28140 + 28137 28136 28140 + 28140 28141 28137 + 28142 28137 28141 + 28138 28137 28142 + 28138 28142 28139 + 28037 28140 28038 + 28143 28140 28037 + 28140 28143 28144 + 28144 28141 28140 + 28141 28144 28145 + 28145 28146 28141 + 28141 28146 28142 + 28139 28142 28146 + 28037 28042 28143 + 28143 28042 28047 + 28047 28147 28143 + 28144 28143 28147 + 28147 28148 28144 + 28148 28149 28144 + 28145 28144 28149 + 28149 28150 28145 + 28151 28145 28150 + 28146 28145 28151 + 28147 28047 28152 + 28152 28153 28147 + 28147 28153 28154 + 28154 28148 28147 + 28148 28154 28155 + 28148 28155 28156 + 28156 28149 28148 + 28149 28156 28150 + 28152 28047 28046 + 28046 28157 28152 + 28158 28152 28157 + 28153 28152 28158 + 28158 28159 28153 + 28154 28153 28159 + 28159 28160 28154 + 28155 28154 28160 + 28160 28161 28155 + 28156 28155 28161 + 28157 28046 28045 + 28045 28162 28157 + 28157 28162 28163 + 28163 28164 28157 + 28157 28164 28158 + 28165 28158 28164 + 28158 28165 28166 + 28166 28159 28158 + 28162 28045 28044 + 28044 28167 28162 + 28163 28162 28167 + 28167 28168 28163 + 28169 28163 28168 + 28163 28169 28170 + 28170 28164 28163 + 28164 28170 28165 + 28171 28165 28170 + 28166 28165 28171 + 28167 28044 28172 + 28172 28173 28167 + 28167 28173 28174 + 28174 28168 28167 + 28175 28168 28174 + 28168 28175 28169 + 28176 28169 28175 + 28170 28169 28176 + 28172 28044 28050 + 28050 28055 28172 + 28172 28055 28177 + 28177 28178 28172 + 28173 28172 28178 + 28178 28179 28173 + 28174 28173 28179 + 28179 28180 28174 + 28181 28174 28180 + 28174 28181 28175 + 28060 28177 28055 + 28177 28060 28068 + 28068 28182 28177 + 28177 28182 28183 + 28183 28178 28177 + 28179 28178 28183 + 28183 28184 28179 + 28179 28184 28185 + 28185 28180 28179 + 28186 28180 28185 + 28180 28186 28181 + 28182 28068 28187 + 28187 28188 28182 + 28183 28182 28188 + 28188 28189 28183 + 28183 28189 28190 + 28184 28183 28190 + 28185 28184 28190 + 28191 28187 28068 + 28192 28187 28191 + 28192 28193 28187 + 28193 28188 28187 + 28188 28193 28194 + 28194 28189 28188 + 28194 28195 28189 + 28195 28190 28189 + 28068 28067 28191 + 28196 28191 28067 + 28191 28196 28197 + 28197 28198 28191 + 28191 28198 28192 + 28199 28192 28198 + 28199 28200 28192 + 28200 28193 28192 + 28200 28194 28193 + 28067 28066 28196 + 28201 28196 28066 + 28197 28196 28201 + 28201 28202 28197 + 28203 28197 28202 + 28203 28199 28197 + 28199 28198 28197 + 28066 28072 28201 + 28204 28201 28072 + 28201 28204 28205 + 28205 28202 28201 + 28202 28205 28206 + 28206 28203 28202 + 28199 28203 28206 + 28200 28199 28206 + 28207 28200 28206 + 28200 28207 28194 + 28207 28195 28194 + 28208 28195 28207 + 28190 28195 28208 + 28072 28071 28204 + 28209 28204 28071 + 28205 28204 28209 + 28209 28210 28205 + 28206 28205 28210 + 28211 28206 28210 + 28206 28211 28212 + 28212 28207 28206 + 28207 28212 28208 + 28071 28213 28209 + 28214 28209 28213 + 28209 28214 28215 + 28215 28210 28209 + 28210 28215 28211 + 28211 28215 28216 + 28217 28211 28216 + 28211 28217 28212 + 28075 28213 28071 + 28218 28213 28075 + 28213 28218 28214 + 28219 28214 28218 + 28215 28214 28219 + 28219 28216 28215 + 28220 28216 28219 + 28216 28220 28217 + 28217 28220 28221 + 28222 28217 28221 + 28217 28222 28212 + 28075 28079 28218 + 28218 28079 28084 + 28084 28223 28218 + 28218 28223 28219 + 28224 28219 28223 + 28219 28224 28220 + 28220 28224 28225 + 28225 28221 28220 + 28226 28221 28225 + 28221 28226 28222 + 28227 28223 28084 + 28223 28227 28224 + 28225 28224 28227 + 28227 28228 28225 + 28229 28225 28228 + 28225 28229 28226 + 28226 28229 28230 + 28230 28231 28226 + 28222 28226 28231 + 28084 28232 28227 + 28227 28232 28233 + 28233 28228 28227 + 28234 28228 28233 + 28228 28234 28229 + 28230 28229 28234 + 28232 28084 28083 + 28083 28235 28232 + 28233 28232 28235 + 28235 28236 28233 + 28237 28233 28236 + 28233 28237 28234 + 28234 28237 28238 + 28238 28239 28234 + 28234 28239 28230 + 28235 28083 28082 + 28082 28240 28235 + 28235 28240 28241 + 28241 28236 28235 + 28242 28236 28241 + 28236 28242 28237 + 28238 28237 28242 + 28240 28082 28243 + 28243 28244 28240 + 28241 28240 28244 + 28244 28245 28241 + 28246 28241 28245 + 28241 28246 28242 + 28081 28243 28082 + 28247 28243 28081 + 28244 28243 28247 + 28247 28248 28244 + 28244 28248 28249 + 28249 28245 28244 + 28250 28245 28249 + 28245 28250 28246 + 28251 28246 28250 + 28242 28246 28251 + 28081 28088 28247 + 28247 28088 28093 + 28093 28252 28247 + 28248 28247 28252 + 28252 28253 28248 + 28249 28248 28253 + 28253 28254 28249 + 28255 28249 28254 + 28249 28255 28250 + 28256 28252 28093 + 28252 28256 28257 + 28257 28253 28252 + 28253 28257 28258 + 28258 28254 28253 + 28259 28254 28258 + 28254 28259 28255 + 28260 28255 28259 + 28250 28255 28260 + 28093 28092 28256 + 28261 28256 28092 + 28257 28256 28261 + 28261 28262 28257 + 28257 28262 28263 + 28263 28264 28257 + 28264 28258 28257 + 28258 28264 28265 + 28259 28258 28265 + 28092 28266 28261 + 28267 28261 28266 + 28261 28267 28268 + 28268 28262 28261 + 28262 28268 28269 + 28269 28263 28262 + 28097 28266 28092 + 28270 28266 28097 + 28266 28270 28267 + 28271 28267 28270 + 28268 28267 28271 + 28271 28272 28268 + 28268 28272 28273 + 28273 28269 28268 + 28097 28102 28270 + 28270 28102 28274 + 28274 28275 28270 + 28270 28275 28271 + 28276 28271 28275 + 28271 28276 28277 + 28277 28272 28271 + 28272 28277 28278 + 28278 28273 28272 + 28274 28102 28101 + 28101 28279 28274 + 28279 28280 28274 + 28280 28281 28274 + 28274 28281 28275 + 28281 28282 28275 + 28275 28282 28276 + 28106 28279 28101 + 28106 28283 28279 + 28283 28280 28279 + 28280 28283 28284 + 28284 28285 28280 + 28280 28285 28281 + 28285 28286 28281 + 28282 28281 28286 + 28286 28287 28282 + 28282 28287 28276 + 28288 28283 28106 + 28284 28283 28288 + 28288 28289 28284 + 28290 28284 28289 + 28284 28290 28291 + 28291 28285 28284 + 28285 28291 28292 + 28292 28286 28285 + 28286 28292 28287 + 28111 28288 28106 + 28293 28288 28111 + 28288 28293 28294 + 28294 28289 28288 + 28295 28289 28294 + 28289 28295 28290 + 28110 28293 28111 + 28121 28293 28110 + 28294 28293 28121 + 28121 28126 28294 + 28126 28296 28294 + 28297 28294 28296 + 28294 28297 28295 + 28295 28297 28298 + 28298 28299 28295 + 28295 28299 28290 + 28300 28296 28126 + 28301 28296 28300 + 28296 28301 28297 + 28301 28302 28297 + 28302 28298 28297 + 28298 28302 28303 + 28304 28298 28303 + 28304 28299 28298 + 28126 28131 28300 + 28305 28300 28131 + 28301 28300 28305 + 28305 28302 28301 + 28303 28302 28305 + 28306 28303 28305 + 28303 28306 28307 + 28307 28304 28303 + 28308 28304 28307 + 28304 28308 28299 + 28309 28305 28131 + 28309 28306 28305 + 28309 28310 28306 + 28306 28310 28311 + 28311 28307 28306 + 28307 28311 28312 + 28312 28313 28307 + 28307 28313 28308 + 28135 28309 28131 + 28310 28309 28135 + 28135 28314 28310 + 28310 28314 28315 + 28315 28311 28310 + 28312 28311 28315 + 28315 28151 28312 + 28312 28151 28150 + 28316 28312 28150 + 28313 28312 28316 + 28139 28314 28135 + 28314 28139 28317 + 28317 28315 28314 + 28315 28317 28151 + 28151 28317 28146 + 28146 28317 28139 + 28316 28318 28313 + 28316 28319 28318 + 28318 28319 28320 + 28318 28320 28308 + 28308 28313 28318 + 28319 28316 28321 + 28321 28322 28319 + 28323 28319 28322 + 28319 28323 28320 + 28324 28320 28323 + 28320 28324 28299 + 28299 28308 28320 + 28321 28316 28150 + 28150 28325 28321 + 28326 28321 28325 + 28322 28321 28326 + 28326 28327 28322 + 28322 28327 28328 + 28322 28328 28323 + 28323 28328 28329 + 28324 28323 28329 + 28330 28325 28150 + 28325 28330 28331 + 28325 28331 28326 + 28326 28331 28332 + 28333 28326 28332 + 28327 28326 28333 + 28150 28156 28330 + 28334 28330 28156 + 28334 28332 28330 + 28332 28331 28330 + 28161 28334 28156 + 28335 28334 28161 + 28332 28334 28335 + 28332 28335 28336 + 28336 28337 28332 + 28332 28337 28333 + 28338 28333 28337 + 28339 28333 28338 + 28333 28339 28327 + 28161 28340 28335 + 28335 28340 28166 + 28336 28335 28166 + 28166 28341 28336 + 28342 28336 28341 + 28337 28336 28342 + 28337 28342 28338 + 28161 28160 28340 + 28340 28160 28159 + 28159 28166 28340 + 28171 28341 28166 + 28343 28341 28171 + 28341 28343 28342 + 28342 28343 28344 + 28338 28342 28344 + 28345 28338 28344 + 28339 28338 28345 + 28345 28346 28339 + 28339 28346 28347 + 28339 28347 28327 + 28343 28171 28348 + 28348 28344 28343 + 28344 28348 28349 + 28344 28349 28350 + 28350 28351 28344 + 28344 28351 28352 + 28352 28345 28344 + 28353 28348 28171 + 28349 28348 28353 + 28353 28260 28349 + 28349 28260 28259 + 28259 28265 28349 + 28265 28350 28349 + 28354 28350 28265 + 28351 28350 28354 + 28170 28353 28171 + 28176 28353 28170 + 28260 28353 28176 + 28176 28355 28260 + 28260 28355 28250 + 28250 28355 28251 + 28355 28176 28356 + 28356 28251 28355 + 28251 28356 28357 + 28357 28358 28251 + 28251 28358 28242 + 28242 28358 28238 + 28175 28356 28176 + 28357 28356 28175 + 28175 28181 28357 + 28357 28181 28186 + 28186 28359 28357 + 28358 28357 28359 + 28359 28238 28358 + 28238 28359 28360 + 28360 28239 28238 + 28239 28360 28361 + 28361 28230 28239 + 28360 28359 28186 + 28186 28362 28360 + 28360 28362 28363 + 28363 28361 28360 + 28364 28361 28363 + 28230 28361 28364 + 28364 28231 28230 + 28222 28231 28364 + 28212 28222 28364 + 28185 28362 28186 + 28362 28185 28365 + 28365 28363 28362 + 28363 28365 28208 + 28208 28366 28363 + 28363 28366 28364 + 28212 28364 28366 + 28212 28366 28208 + 28190 28365 28185 + 28208 28365 28190 + 28299 28324 28290 + 28324 28329 28290 + 28291 28290 28329 + 28329 28367 28291 + 28291 28367 28292 + 28367 28368 28292 + 28369 28292 28368 + 28292 28369 28287 + 28367 28329 28328 + 28370 28367 28328 + 28368 28367 28370 + 28347 28368 28370 + 28347 28371 28368 + 28368 28371 28369 + 28369 28371 28372 + 28287 28369 28372 + 28372 28373 28287 + 28287 28373 28276 + 28327 28370 28328 + 28347 28370 28327 + 28277 28276 28373 + 28373 28374 28277 + 28277 28374 28278 + 28374 28375 28278 + 28376 28278 28375 + 28273 28278 28376 + 28352 28374 28373 + 28374 28352 28377 + 28377 28375 28374 + 28378 28375 28377 + 28375 28378 28376 + 28373 28372 28352 + 28352 28372 28379 + 28379 28345 28352 + 28379 28346 28345 + 28347 28346 28379 + 28371 28347 28379 + 28371 28379 28372 + 28376 28378 28380 + 28381 28380 28378 + 28382 28380 28381 + 28376 28380 28382 + 28383 28376 28382 + 28376 28383 28273 + 28269 28273 28383 + 28384 28269 28383 + 28384 28263 28269 + 28378 28377 28381 + 28381 28377 28352 + 28351 28381 28352 + 28382 28381 28351 + 28351 28354 28382 + 28382 28354 28385 + 28385 28384 28382 + 28384 28383 28382 + 28265 28385 28354 + 28265 28264 28385 + 28385 28264 28263 + 28263 28384 28385 + 28386 28387 28388 + 28387 28386 28389 + 28390 28387 28389 + 28391 28387 28390 + 28387 28391 28392 + 28392 28388 28387 + 28388 28393 28386 + 28394 28386 28393 + 28386 28394 28395 + 28395 28389 28386 + 28388 28396 28393 + 28396 28397 28393 + 28398 28393 28397 + 28393 28398 28394 + 28399 28394 28398 + 28394 28399 28400 + 28395 28394 28400 + 28401 28396 28388 + 28396 28401 28402 + 28402 28403 28396 + 28397 28396 28403 + 28403 28404 28397 + 28405 28397 28404 + 28397 28405 28398 + 28388 28392 28401 + 28401 28392 28406 + 28402 28401 28406 + 28406 28407 28402 + 28408 28402 28407 + 28403 28402 28408 + 28408 28409 28403 + 28403 28409 28410 + 28410 28404 28403 + 28392 28411 28406 + 28411 28412 28406 + 28412 28413 28406 + 28406 28413 28414 + 28414 28407 28406 + 28411 28392 28391 + 28391 28415 28411 + 28415 28416 28411 + 28416 28412 28411 + 28412 28416 28417 + 28418 28412 28417 + 28413 28412 28418 + 28415 28391 28419 + 28420 28415 28419 + 28420 28416 28415 + 28420 28421 28416 + 28416 28421 28422 + 28422 28417 28416 + 28422 28423 28417 + 28417 28423 28418 + 28390 28419 28391 + 28419 28390 28424 + 28424 28425 28419 + 28420 28419 28425 + 28421 28420 28425 + 28425 28426 28421 + 28422 28421 28426 + 28426 28427 28422 + 28427 28428 28422 + 28422 28428 28423 + 28424 28390 28389 + 28429 28424 28389 + 28427 28424 28429 + 28425 28424 28427 + 28427 28426 28425 + 28389 28430 28429 + 28430 28431 28429 + 28431 28432 28429 + 28429 28432 28433 + 28429 28433 28427 + 28428 28427 28433 + 28433 28434 28428 + 28423 28428 28434 + 28430 28389 28395 + 28435 28430 28395 + 28430 28435 28436 + 28436 28431 28430 + 28431 28436 28437 + 28432 28431 28437 + 28437 28438 28432 + 28438 28434 28432 + 28434 28433 28432 + 28395 28400 28435 + 28435 28400 28439 + 28436 28435 28439 + 28439 28440 28436 + 28436 28440 28437 + 28437 28440 28441 + 28437 28441 28442 + 28442 28438 28437 + 28438 28442 28443 + 28434 28438 28443 + 28434 28443 28423 + 28439 28400 28399 + 28439 28399 28444 + 28439 28444 28445 + 28445 28440 28439 + 28440 28445 28441 + 28441 28445 28446 + 28446 28447 28441 + 28447 28442 28441 + 28442 28447 28448 + 28443 28442 28448 + 28444 28399 28449 + 28449 28450 28444 + 28444 28450 28451 + 28451 28445 28444 + 28445 28451 28446 + 28446 28451 28452 + 28446 28452 28453 + 28453 28447 28446 + 28398 28449 28399 + 28398 28405 28449 + 28405 28454 28449 + 28450 28449 28454 + 28454 28455 28450 + 28450 28455 28451 + 28455 28456 28451 + 28451 28456 28452 + 28454 28405 28457 + 28457 28458 28454 + 28455 28454 28458 + 28458 28459 28455 + 28456 28455 28459 + 28459 28460 28456 + 28452 28456 28460 + 28404 28457 28405 + 28457 28404 28410 + 28410 28461 28457 + 28457 28461 28462 + 28462 28458 28457 + 28459 28458 28462 + 28462 28463 28459 + 28459 28463 28464 + 28464 28460 28459 + 28465 28460 28464 + 28460 28465 28452 + 28461 28410 28466 + 28466 28467 28461 + 28462 28461 28467 + 28467 28468 28462 + 28463 28462 28468 + 28468 28469 28463 + 28464 28463 28469 + 28470 28466 28410 + 28471 28466 28470 + 28467 28466 28471 + 28471 28472 28467 + 28467 28472 28473 + 28473 28468 28467 + 28468 28473 28469 + 28410 28409 28470 + 28474 28470 28409 + 28470 28474 28475 + 28475 28476 28470 + 28470 28476 28471 + 28471 28476 28477 + 28472 28471 28477 + 28409 28408 28474 + 28478 28474 28408 + 28475 28474 28478 + 28478 28479 28475 + 28475 28479 28480 + 28480 28481 28475 + 28481 28482 28475 + 28476 28475 28482 + 28408 28483 28478 + 28484 28478 28483 + 28478 28484 28485 + 28485 28479 28478 + 28486 28479 28485 + 28479 28486 28480 + 28407 28483 28408 + 28487 28483 28407 + 28483 28487 28484 + 28488 28484 28487 + 28485 28484 28488 + 28488 28489 28485 + 28485 28489 28490 + 28490 28486 28485 + 28407 28414 28487 + 28487 28414 28491 + 28491 28492 28487 + 28487 28492 28488 + 28493 28488 28492 + 28488 28493 28494 + 28494 28489 28488 + 28495 28489 28494 + 28489 28495 28490 + 28491 28414 28413 + 28413 28496 28491 + 28496 28497 28491 + 28497 28498 28491 + 28491 28498 28499 + 28499 28492 28491 + 28492 28499 28493 + 28500 28493 28499 + 28494 28493 28500 + 28418 28496 28413 + 28418 28501 28496 + 28501 28497 28496 + 28497 28501 28448 + 28448 28502 28497 + 28498 28497 28502 + 28503 28498 28502 + 28499 28498 28503 + 28503 28504 28499 + 28499 28504 28500 + 28423 28501 28418 + 28501 28423 28443 + 28448 28501 28443 + 28448 28447 28502 + 28447 28453 28502 + 28502 28453 28503 + 28453 28505 28503 + 28503 28505 28504 + 28505 28506 28504 + 28504 28506 28507 + 28507 28500 28504 + 28500 28507 28508 + 28508 28509 28500 + 28500 28509 28494 + 28505 28453 28452 + 28465 28505 28452 + 28506 28505 28465 + 28465 28510 28506 + 28507 28506 28510 + 28510 28511 28507 + 28508 28507 28511 + 28464 28510 28465 + 28510 28464 28512 + 28512 28511 28510 + 28511 28512 28513 + 28513 28514 28511 + 28511 28514 28508 + 28512 28464 28469 + 28469 28515 28512 + 28513 28512 28515 + 28515 28516 28513 + 28513 28516 28517 + 28517 28518 28513 + 28514 28513 28518 + 28518 28519 28514 + 28508 28514 28519 + 28520 28515 28469 + 28516 28515 28520 + 28516 28520 28521 + 28521 28517 28516 + 28517 28521 28522 + 28522 28523 28517 + 28517 28523 28524 + 28524 28518 28517 + 28469 28473 28520 + 28521 28520 28473 + 28525 28521 28473 + 28522 28521 28525 + 28525 28526 28522 + 28522 28526 28527 + 28527 28528 28522 + 28528 28529 28522 + 28523 28522 28529 + 28530 28525 28473 + 28531 28525 28530 + 28531 28526 28525 + 28526 28531 28532 + 28532 28527 28526 + 28533 28527 28532 + 28528 28527 28533 + 28534 28530 28473 + 28535 28530 28534 + 28536 28530 28535 + 28530 28536 28531 + 28531 28536 28537 + 28532 28531 28537 + 28537 28538 28532 + 28533 28532 28538 + 28473 28472 28534 + 28472 28539 28534 + 28539 28540 28534 + 28541 28534 28540 + 28542 28534 28541 + 28534 28542 28535 + 28477 28539 28472 + 28539 28477 28543 + 28543 28544 28539 + 28539 28544 28545 + 28545 28540 28539 + 28546 28540 28545 + 28540 28546 28541 + 28543 28477 28547 + 28547 28548 28543 + 28543 28548 28549 + 28549 28550 28543 + 28544 28543 28550 + 28550 28551 28544 + 28545 28544 28551 + 28476 28547 28477 + 28482 28547 28476 + 28547 28482 28552 + 28552 28548 28547 + 28548 28552 28553 + 28553 28549 28548 + 28549 28553 28554 + 28554 28555 28549 + 28549 28555 28556 + 28556 28550 28549 + 28552 28482 28481 + 28481 28557 28552 + 28553 28552 28557 + 28557 28558 28553 + 28554 28553 28558 + 28559 28557 28481 + 28557 28559 28560 + 28560 28558 28557 + 28558 28560 28561 + 28561 28562 28558 + 28558 28562 28554 + 28481 28563 28559 + 28559 28563 28564 + 28564 28565 28559 + 28559 28565 28566 + 28566 28560 28559 + 28561 28560 28566 + 28563 28481 28480 + 28480 28567 28563 + 28564 28563 28567 + 28567 28568 28564 + 28569 28564 28568 + 28570 28564 28569 + 28570 28565 28564 + 28565 28570 28571 + 28571 28566 28565 + 28567 28480 28572 + 28572 28573 28567 + 28567 28573 28574 + 28574 28568 28567 + 28575 28568 28574 + 28568 28575 28569 + 28572 28480 28486 + 28486 28576 28572 + 28572 28576 28577 + 28577 28578 28572 + 28573 28572 28578 + 28578 28579 28573 + 28574 28573 28579 + 28580 28576 28486 + 28576 28580 28581 + 28581 28577 28576 + 28577 28581 28582 + 28582 28583 28577 + 28577 28583 28584 + 28584 28578 28577 + 28579 28578 28584 + 28486 28490 28580 + 28580 28490 28495 + 28495 28585 28580 + 28580 28585 28586 + 28586 28581 28580 + 28582 28581 28586 + 28586 28587 28582 + 28588 28582 28587 + 28583 28582 28588 + 28588 28589 28583 + 28584 28583 28589 + 28590 28585 28495 + 28585 28590 28591 + 28591 28586 28585 + 28587 28586 28591 + 28592 28587 28591 + 28587 28592 28593 + 28593 28594 28587 + 28587 28594 28588 + 28495 28595 28590 + 28590 28595 28596 + 28596 28597 28590 + 28590 28597 28598 + 28598 28591 28590 + 28592 28591 28598 + 28595 28495 28494 + 28595 28494 28599 + 28596 28595 28599 + 28599 28600 28596 + 28600 28601 28596 + 28602 28596 28601 + 28597 28596 28602 + 28597 28602 28603 + 28603 28598 28597 + 28494 28509 28599 + 28604 28599 28509 + 28599 28604 28605 + 28605 28606 28599 + 28599 28606 28607 + 28607 28600 28599 + 28509 28508 28604 + 28608 28604 28508 + 28605 28604 28608 + 28608 28609 28605 + 28610 28605 28609 + 28606 28605 28610 + 28610 28611 28606 + 28607 28606 28611 + 28519 28608 28508 + 28612 28608 28519 + 28608 28612 28609 + 28609 28612 28613 + 28613 28614 28609 + 28609 28614 28610 + 28615 28610 28614 + 28610 28615 28616 + 28616 28611 28610 + 28519 28617 28612 + 28613 28612 28617 + 28617 28618 28613 + 28619 28613 28618 + 28613 28619 28620 + 28620 28614 28613 + 28614 28620 28615 + 28617 28519 28518 + 28518 28524 28617 + 28617 28524 28621 + 28621 28618 28617 + 28622 28618 28621 + 28618 28622 28619 + 28619 28622 28623 + 28620 28619 28623 + 28623 28624 28620 + 28615 28620 28624 + 28624 28625 28615 + 28616 28615 28625 + 28626 28621 28524 + 28627 28621 28626 + 28621 28627 28622 + 28622 28627 28628 + 28628 28623 28622 + 28623 28628 28629 + 28624 28623 28629 + 28624 28629 28630 + 28630 28625 28624 + 28524 28523 28626 + 28523 28631 28626 + 28632 28626 28631 + 28626 28632 28633 + 28626 28633 28627 + 28628 28627 28633 + 28633 28634 28628 + 28634 28635 28628 + 28635 28629 28628 + 28529 28631 28523 + 28636 28631 28529 + 28631 28636 28632 + 28636 28529 28637 + 28632 28636 28637 + 28637 28638 28632 + 28638 28639 28632 + 28639 28640 28632 + 28640 28641 28632 + 28633 28632 28641 + 28641 28634 28633 + 28529 28528 28637 + 28637 28528 28642 + 28637 28642 28638 + 28642 28643 28638 + 28638 28643 28644 + 28638 28644 28645 + 28645 28639 28638 + 28639 28645 28646 + 28640 28639 28646 + 28642 28528 28533 + 28643 28642 28533 + 28533 28647 28643 + 28644 28643 28647 + 28647 28648 28644 + 28645 28644 28648 + 28649 28645 28648 + 28646 28645 28649 + 28538 28647 28533 + 28647 28538 28650 + 28650 28648 28647 + 28648 28650 28651 + 28651 28649 28648 + 28649 28651 28652 + 28652 28653 28649 + 28649 28653 28646 + 28650 28538 28537 + 28537 28654 28650 + 28650 28654 28655 + 28655 28651 28650 + 28652 28651 28655 + 28655 28656 28652 + 28657 28652 28656 + 28653 28652 28657 + 28657 28658 28653 + 28646 28653 28658 + 28654 28537 28659 + 28654 28659 28660 + 28660 28661 28654 + 28654 28661 28655 + 28662 28655 28661 + 28655 28662 28663 + 28663 28656 28655 + 28659 28537 28536 + 28536 28535 28659 + 28660 28659 28535 + 28535 28542 28660 + 28664 28660 28542 + 28660 28664 28665 + 28665 28661 28660 + 28661 28665 28662 + 28666 28662 28665 + 28663 28662 28666 + 28666 28667 28663 + 28668 28663 28667 + 28656 28663 28668 + 28542 28669 28664 + 28664 28669 28670 + 28670 28671 28664 + 28665 28664 28671 + 28671 28672 28665 + 28665 28672 28666 + 28541 28669 28542 + 28669 28541 28673 + 28673 28670 28669 + 28670 28673 28674 + 28670 28674 28675 + 28675 28671 28670 + 28671 28675 28676 + 28676 28672 28671 + 28672 28676 28677 + 28677 28666 28672 + 28673 28541 28678 + 28678 28679 28673 + 28679 28680 28673 + 28674 28673 28680 + 28680 28681 28674 + 28675 28674 28681 + 28541 28546 28678 + 28682 28678 28546 + 28683 28678 28682 + 28678 28683 28684 + 28684 28679 28678 + 28679 28684 28685 + 28679 28685 28686 + 28686 28680 28679 + 28686 28681 28680 + 28546 28687 28682 + 28682 28687 28688 + 28688 28689 28682 + 28690 28682 28689 + 28682 28690 28683 + 28545 28687 28546 + 28687 28545 28691 + 28691 28688 28687 + 28688 28691 28692 + 28692 28693 28688 + 28688 28693 28694 + 28694 28689 28688 + 28695 28689 28694 + 28689 28695 28690 + 28551 28691 28545 + 28692 28691 28551 + 28551 28696 28692 + 28692 28696 28697 + 28697 28698 28692 + 28693 28692 28698 + 28698 28699 28693 + 28694 28693 28699 + 28696 28551 28550 + 28556 28696 28550 + 28697 28696 28556 + 28700 28697 28556 + 28701 28697 28700 + 28698 28697 28701 + 28702 28698 28701 + 28699 28698 28702 + 28702 28703 28699 + 28704 28699 28703 + 28699 28704 28694 + 28556 28555 28700 + 28555 28705 28700 + 28706 28700 28705 + 28706 28701 28700 + 28707 28701 28706 + 28702 28701 28707 + 28707 28708 28702 + 28703 28702 28708 + 28705 28555 28554 + 28709 28705 28554 + 28710 28705 28709 + 28705 28710 28706 + 28711 28706 28710 + 28711 28707 28706 + 28712 28707 28711 + 28712 28713 28707 + 28708 28707 28713 + 28714 28709 28554 + 28715 28709 28714 + 28715 28710 28709 + 28716 28710 28715 + 28710 28716 28711 + 28712 28711 28716 + 28554 28562 28714 + 28717 28714 28562 + 28718 28714 28717 + 28714 28718 28715 + 28715 28718 28719 + 28719 28716 28715 + 28720 28716 28719 + 28720 28721 28716 + 28716 28721 28712 + 28562 28561 28717 + 28722 28717 28561 + 28723 28717 28722 + 28723 28718 28717 + 28724 28718 28723 + 28718 28724 28719 + 28720 28719 28724 + 28561 28725 28722 + 28726 28722 28725 + 28727 28722 28726 + 28727 28728 28722 + 28722 28728 28723 + 28566 28725 28561 + 28729 28725 28566 + 28725 28729 28726 + 28730 28726 28729 + 28726 28730 28731 + 28727 28726 28731 + 28727 28731 28732 + 28732 28733 28727 + 28728 28727 28733 + 28566 28571 28729 + 28729 28571 28734 + 28734 28735 28729 + 28729 28735 28730 + 28736 28730 28735 + 28737 28730 28736 + 28737 28731 28730 + 28732 28731 28737 + 28738 28734 28571 + 28739 28734 28738 + 28734 28739 28740 + 28740 28735 28734 + 28735 28740 28736 + 28570 28738 28571 + 28741 28738 28570 + 28738 28741 28742 + 28738 28742 28739 + 28695 28739 28742 + 28740 28739 28695 + 28695 28743 28740 + 28736 28740 28743 + 28570 28569 28741 + 28741 28569 28744 + 28744 28745 28741 + 28745 28746 28741 + 28746 28747 28741 + 28742 28741 28747 + 28569 28575 28744 + 28575 28748 28744 + 28749 28744 28748 + 28744 28749 28750 + 28750 28751 28744 + 28744 28751 28752 + 28752 28745 28744 + 28753 28748 28575 + 28754 28748 28753 + 28748 28754 28749 + 28755 28749 28754 + 28750 28749 28755 + 28755 28756 28750 + 28757 28750 28756 + 28751 28750 28757 + 28575 28758 28753 + 28759 28753 28758 + 28760 28753 28759 + 28753 28760 28754 + 28754 28760 28761 + 28761 28762 28754 + 28754 28762 28755 + 28574 28758 28575 + 28758 28574 28763 + 28763 28764 28758 + 28758 28764 28759 + 28765 28759 28764 + 28766 28759 28765 + 28759 28766 28760 + 28761 28760 28766 + 28579 28763 28574 + 28767 28763 28579 + 28764 28763 28767 + 28767 28768 28764 + 28764 28768 28765 + 28765 28768 28769 + 28769 28770 28765 + 28771 28765 28770 + 28765 28771 28766 + 28579 28772 28767 + 28767 28772 28773 + 28773 28774 28767 + 28774 28769 28767 + 28769 28768 28767 + 28584 28772 28579 + 28772 28584 28775 + 28775 28773 28772 + 28773 28775 28776 + 28776 28777 28773 + 28774 28773 28777 + 28778 28774 28777 + 28778 28779 28774 + 28779 28769 28774 + 28589 28775 28584 + 28775 28589 28780 + 28776 28775 28780 + 28776 28780 28781 + 28781 28782 28776 + 28777 28776 28782 + 28782 28783 28777 + 28778 28777 28783 + 28784 28780 28589 + 28780 28784 28785 + 28785 28781 28780 + 28786 28781 28785 + 28786 28787 28781 + 28781 28787 28788 + 28788 28782 28781 + 28788 28783 28782 + 28589 28588 28784 + 28789 28784 28588 + 28784 28789 28790 + 28790 28785 28784 + 28785 28790 28791 + 28786 28785 28791 + 28786 28791 28792 + 28787 28786 28792 + 28792 28793 28787 + 28788 28787 28793 + 28594 28789 28588 + 28794 28789 28594 + 28789 28794 28795 + 28795 28790 28789 + 28796 28790 28795 + 28796 28791 28790 + 28791 28796 28797 + 28797 28792 28791 + 28792 28797 28798 + 28798 28793 28792 + 28793 28798 28788 + 28594 28593 28794 + 28794 28593 28799 + 28799 28800 28794 + 28794 28800 28801 + 28801 28795 28794 + 28796 28795 28801 + 28801 28802 28796 + 28797 28796 28802 + 28803 28797 28802 + 28798 28797 28803 + 28799 28593 28592 + 28592 28804 28799 + 28805 28799 28804 + 28800 28799 28805 + 28806 28800 28805 + 28801 28800 28806 + 28807 28801 28806 + 28808 28801 28807 + 28808 28802 28801 + 28598 28804 28592 + 28809 28804 28598 + 28804 28809 28805 + 28810 28805 28809 + 28806 28805 28810 + 28810 28811 28806 + 28806 28811 28807 + 28811 28812 28807 + 28808 28807 28812 + 28598 28603 28809 + 28809 28603 28813 + 28813 28814 28809 + 28809 28814 28810 + 28815 28810 28814 + 28811 28810 28815 + 28816 28811 28815 + 28812 28811 28816 + 28813 28603 28602 + 28817 28813 28602 + 28818 28813 28817 + 28813 28818 28819 + 28819 28814 28813 + 28814 28819 28815 + 28820 28815 28819 + 28816 28815 28820 + 28602 28821 28817 + 28822 28817 28821 + 28761 28817 28822 + 28817 28761 28818 + 28766 28818 28761 + 28819 28818 28766 + 28766 28771 28819 + 28819 28771 28820 + 28601 28821 28602 + 28823 28821 28601 + 28821 28823 28822 + 28822 28823 28824 + 28825 28822 28824 + 28762 28822 28825 + 28822 28762 28761 + 28823 28601 28600 + 28600 28824 28823 + 28826 28824 28600 + 28824 28826 28827 + 28827 28828 28824 + 28824 28828 28825 + 28756 28825 28828 + 28756 28755 28825 + 28825 28755 28762 + 28600 28607 28826 + 28826 28607 28829 + 28829 28830 28826 + 28826 28830 28831 + 28827 28826 28831 + 28831 28832 28827 + 28833 28827 28832 + 28833 28828 28827 + 28828 28833 28756 + 28834 28829 28607 + 28835 28829 28834 + 28830 28829 28835 + 28830 28835 28836 + 28836 28831 28830 + 28837 28831 28836 + 28831 28837 28838 + 28838 28832 28831 + 28611 28834 28607 + 28839 28834 28611 + 28840 28834 28839 + 28834 28840 28835 + 28836 28835 28840 + 28841 28836 28840 + 28837 28836 28841 + 28841 28842 28837 + 28837 28842 28843 + 28843 28838 28837 + 28611 28616 28839 + 28839 28616 28844 + 28844 28845 28839 + 28840 28839 28845 + 28845 28846 28840 + 28840 28846 28847 + 28847 28841 28840 + 28848 28841 28847 + 28842 28841 28848 + 28625 28844 28616 + 28844 28625 28849 + 28844 28849 28850 + 28850 28845 28844 + 28846 28845 28850 + 28850 28851 28846 + 28846 28851 28852 + 28852 28847 28846 + 28847 28852 28853 + 28847 28853 28848 + 28625 28630 28849 + 28854 28849 28630 + 28849 28854 28855 + 28850 28849 28855 + 28851 28850 28855 + 28855 28856 28851 + 28852 28851 28856 + 28856 28857 28852 + 28853 28852 28857 + 28858 28854 28630 + 28859 28854 28858 + 28854 28859 28860 + 28860 28855 28854 + 28856 28855 28860 + 28860 28861 28856 + 28856 28861 28862 + 28862 28857 28856 + 28858 28630 28629 + 28629 28635 28858 + 28863 28858 28635 + 28858 28863 28859 + 28864 28859 28863 + 28860 28859 28864 + 28864 28865 28860 + 28861 28860 28865 + 28865 28866 28861 + 28862 28861 28866 + 28635 28867 28863 + 28868 28863 28867 + 28868 28864 28863 + 28868 28869 28864 + 28865 28864 28869 + 28658 28865 28869 + 28866 28865 28658 + 28867 28635 28634 + 28634 28641 28867 + 28867 28641 28640 + 28640 28870 28867 + 28867 28870 28868 + 28869 28868 28870 + 28870 28871 28869 + 28869 28871 28646 + 28658 28869 28646 + 28871 28870 28640 + 28871 28640 28646 + 28658 28657 28866 + 28866 28657 28872 + 28872 28873 28866 + 28866 28873 28862 + 28874 28862 28873 + 28862 28874 28875 + 28875 28857 28862 + 28857 28875 28853 + 28656 28872 28657 + 28668 28872 28656 + 28872 28668 28873 + 28668 28876 28873 + 28873 28876 28874 + 28874 28876 28877 + 28877 28878 28874 + 28875 28874 28878 + 28878 28879 28875 + 28853 28875 28879 + 28879 28880 28853 + 28880 28848 28853 + 28876 28668 28881 + 28881 28877 28876 + 28882 28877 28881 + 28877 28882 28883 + 28883 28878 28877 + 28879 28878 28883 + 28883 28884 28879 + 28879 28884 28885 + 28885 28880 28879 + 28881 28668 28667 + 28667 28886 28881 + 28886 28887 28881 + 28887 28882 28881 + 28882 28887 28888 + 28888 28883 28882 + 28884 28883 28888 + 28888 28889 28884 + 28885 28884 28889 + 28890 28886 28667 + 28886 28890 28891 + 28891 28887 28886 + 28887 28891 28892 + 28892 28888 28887 + 28889 28888 28892 + 28667 28893 28890 + 28890 28893 28894 + 28894 28895 28890 + 28895 28896 28890 + 28896 28891 28890 + 28891 28896 28897 + 28897 28892 28891 + 28893 28667 28666 + 28666 28677 28893 + 28893 28677 28898 + 28898 28894 28893 + 28898 28899 28894 + 28894 28899 28900 + 28900 28895 28894 + 28896 28895 28900 + 28896 28900 28901 + 28901 28897 28896 + 28898 28677 28676 + 28676 28902 28898 + 28899 28898 28902 + 28902 28903 28899 + 28899 28903 28904 + 28899 28904 28905 + 28905 28901 28899 + 28901 28900 28899 + 28906 28902 28676 + 28903 28902 28906 + 28903 28906 28907 + 28907 28904 28903 + 28904 28907 28908 + 28904 28908 28909 + 28909 28905 28904 + 28676 28675 28906 + 28907 28906 28675 + 28681 28907 28675 + 28908 28907 28681 + 28681 28686 28908 + 28908 28686 28910 + 28909 28908 28910 + 28910 28911 28909 + 28912 28909 28911 + 28905 28909 28912 + 28905 28912 28913 + 28913 28901 28905 + 28897 28901 28913 + 28897 28913 28914 + 28914 28892 28897 + 28686 28685 28910 + 28685 28915 28910 + 28745 28910 28915 + 28745 28752 28910 + 28910 28752 28916 + 28916 28911 28910 + 28917 28911 28916 + 28911 28917 28912 + 28918 28915 28685 + 28746 28915 28918 + 28915 28746 28745 + 28685 28684 28918 + 28918 28684 28683 + 28683 28919 28918 + 28746 28918 28919 + 28919 28747 28746 + 28919 28920 28747 + 28747 28920 28742 + 28742 28920 28690 + 28742 28690 28695 + 28920 28919 28683 + 28683 28690 28920 + 28916 28752 28751 + 28751 28921 28916 + 28917 28916 28921 + 28921 28922 28917 + 28912 28917 28922 + 28913 28912 28922 + 28914 28913 28922 + 28922 28923 28914 + 28889 28914 28923 + 28892 28914 28889 + 28757 28921 28751 + 28922 28921 28757 + 28922 28757 28924 + 28924 28923 28922 + 28925 28923 28924 + 28923 28925 28889 + 28889 28925 28885 + 28926 28885 28925 + 28926 28880 28885 + 28924 28757 28756 + 28756 28833 28924 + 28833 28927 28924 + 28843 28924 28927 + 28924 28843 28925 + 28925 28843 28926 + 28842 28926 28843 + 28880 28926 28842 + 28842 28848 28880 + 28832 28927 28833 + 28838 28927 28832 + 28927 28838 28843 + 28770 28820 28771 + 28928 28820 28770 + 28820 28928 28816 + 28929 28816 28928 + 28929 28812 28816 + 28930 28928 28770 + 28931 28928 28930 + 28928 28931 28929 + 28931 28932 28929 + 28932 28933 28929 + 28933 28812 28929 + 28933 28934 28812 + 28812 28934 28808 + 28930 28770 28769 + 28769 28779 28930 + 28930 28779 28935 + 28935 28936 28930 + 28936 28931 28930 + 28937 28931 28936 + 28937 28932 28931 + 28932 28937 28938 + 28938 28939 28932 + 28933 28932 28939 + 28935 28779 28778 + 28940 28935 28778 + 28941 28935 28940 + 28941 28942 28935 + 28936 28935 28942 + 28937 28936 28942 + 28937 28942 28943 + 28943 28938 28937 + 28783 28940 28778 + 28941 28940 28783 + 28783 28944 28941 + 28945 28941 28944 + 28941 28945 28943 + 28942 28941 28943 + 28788 28944 28783 + 28798 28944 28788 + 28944 28798 28945 + 28803 28945 28798 + 28803 28943 28945 + 28938 28943 28803 + 28946 28938 28803 + 28939 28938 28946 + 28946 28947 28939 + 28939 28947 28933 + 28947 28934 28933 + 28808 28934 28947 + 28947 28946 28808 + 28946 28802 28808 + 28802 28946 28803 + 28694 28743 28695 + 28743 28694 28704 + 28704 28948 28743 + 28743 28948 28736 + 28948 28949 28736 + 28949 28737 28736 + 28948 28704 28950 + 28950 28949 28948 + 28949 28950 28951 + 28951 28952 28949 + 28737 28949 28952 + 28952 28953 28737 + 28953 28732 28737 + 28950 28704 28703 + 28950 28703 28954 + 28954 28951 28950 + 28951 28954 28955 + 28956 28951 28955 + 28956 28952 28951 + 28956 28957 28952 + 28952 28957 28958 + 28958 28953 28952 + 28958 28732 28953 + 28708 28954 28703 + 28959 28954 28708 + 28959 28955 28954 + 28960 28955 28959 + 28955 28960 28961 + 28961 28962 28955 + 28962 28956 28955 + 28957 28956 28962 + 28962 28963 28957 + 28958 28957 28963 + 28959 28708 28713 + 28959 28713 28964 + 28964 28960 28959 + 28960 28964 28965 + 28965 28966 28960 + 28960 28966 28961 + 28964 28713 28712 + 28965 28964 28712 + 28712 28721 28965 + 28966 28965 28721 + 28721 28720 28966 + 28967 28966 28720 + 28966 28967 28961 + 28961 28967 28968 + 28961 28968 28969 + 28969 28962 28961 + 28963 28962 28969 + 28969 28970 28963 + 28963 28970 28958 + 28970 28971 28958 + 28958 28971 28732 + 28720 28972 28967 + 28972 28973 28967 + 28973 28968 28967 + 28968 28973 28974 + 28974 28969 28968 + 28969 28974 28975 + 28970 28969 28975 + 28975 28971 28970 + 28732 28971 28975 + 28975 28733 28732 + 28724 28972 28720 + 28973 28972 28724 + 28973 28724 28976 + 28973 28976 28974 + 28976 28977 28974 + 28975 28974 28977 + 28975 28977 28733 + 28733 28977 28728 + 28723 28728 28977 + 28977 28976 28723 + 28976 28724 28723 + 28978 28979 28980 + 28979 28978 28981 + 28982 28979 28981 + 28983 28979 28982 + 28979 28983 28984 + 28984 28980 28979 + 28985 28978 28980 + 28986 28978 28985 + 28978 28986 28987 + 28981 28978 28987 + 28981 28987 28988 + 28988 28989 28981 + 28981 28989 28982 + 28980 28990 28985 + 28990 28991 28985 + 28985 28991 28992 + 28985 28992 28986 + 28993 28986 28992 + 28987 28986 28993 + 28993 28994 28987 + 28994 28988 28987 + 28995 28990 28980 + 28990 28995 28996 + 28996 28997 28990 + 28991 28990 28997 + 28998 28991 28997 + 28999 28991 28998 + 28991 28999 28992 + 28984 28995 28980 + 29000 28995 28984 + 28995 29000 29001 + 29001 28996 28995 + 29002 28996 29001 + 28996 29002 29003 + 29003 28997 28996 + 28997 29003 29004 + 29004 28998 28997 + 29005 29000 28984 + 29000 29005 29006 + 29006 29007 29000 + 29000 29007 29008 + 29008 29001 29000 + 29009 29001 29008 + 29001 29009 29002 + 28984 28983 29005 + 28983 29010 29005 + 29006 29005 29010 + 29010 29011 29006 + 29006 29011 29012 + 29012 29013 29006 + 29007 29006 29013 + 29013 29014 29007 + 29008 29007 29014 + 29010 28983 29015 + 29016 29010 29015 + 29010 29016 29017 + 29017 29011 29010 + 29011 29017 29018 + 29018 29012 29011 + 29015 28983 28982 + 29015 28982 29019 + 29019 29020 29015 + 29015 29020 29016 + 29020 29021 29016 + 29017 29016 29021 + 29021 29022 29017 + 29017 29022 29023 + 29023 29018 29017 + 28989 29019 28982 + 29019 28989 29024 + 29025 29019 29024 + 29019 29025 29026 + 29026 29020 29019 + 29020 29026 29027 + 29027 29021 29020 + 29021 29027 29028 + 29028 29022 29021 + 29024 28989 28988 + 28988 29029 29024 + 29024 29029 29030 + 29025 29024 29030 + 29030 29031 29025 + 29026 29025 29031 + 29031 29032 29026 + 29026 29032 29033 + 29033 29027 29026 + 29028 29027 29033 + 29029 28988 28994 + 28994 29034 29029 + 29034 29035 29029 + 29029 29035 29030 + 29036 29030 29035 + 29030 29036 29037 + 29037 29031 29030 + 29031 29037 29038 + 29038 29032 29031 + 29039 29034 28994 + 29034 29039 29040 + 29040 29035 29034 + 29035 29040 29036 + 29041 29036 29040 + 29036 29041 29042 + 29042 29037 29036 + 29042 29043 29037 + 29043 29038 29037 + 28994 28993 29039 + 29039 28993 29044 + 29044 29045 29039 + 29039 29045 29046 + 29039 29046 29040 + 29046 29041 29040 + 29047 29041 29046 + 29041 29047 29048 + 29048 29042 29041 + 29049 29044 28993 + 29044 29049 29050 + 29051 29044 29050 + 29051 29045 29044 + 29045 29051 29052 + 29052 29046 29045 + 29046 29052 29047 + 28992 29049 28993 + 28992 28999 29049 + 28999 29053 29049 + 29049 29053 29054 + 29054 29050 29049 + 29050 29054 29055 + 29055 29056 29050 + 29050 29056 29051 + 29056 29052 29051 + 29056 29057 29052 + 29057 29047 29052 + 29053 28999 29058 + 29058 29059 29053 + 29059 29054 29053 + 29054 29059 29055 + 29059 29004 29055 + 29004 29060 29055 + 29056 29055 29060 + 29060 29057 29056 + 28998 29058 28999 + 29059 29058 28998 + 28998 29004 29059 + 29060 29004 29003 + 29003 29061 29060 + 29057 29060 29061 + 29061 29062 29057 + 29047 29057 29062 + 29062 29048 29047 + 29062 29063 29048 + 29063 29064 29048 + 29042 29048 29064 + 29064 29043 29042 + 29003 29002 29061 + 29002 29065 29061 + 29062 29061 29065 + 29065 29063 29062 + 29063 29065 29066 + 29066 29067 29063 + 29064 29063 29067 + 29067 29068 29064 + 29043 29064 29068 + 29068 29069 29043 + 29038 29043 29069 + 29065 29002 29009 + 29065 29009 29066 + 29070 29066 29009 + 29067 29066 29070 + 29070 29071 29067 + 29067 29071 29072 + 29072 29068 29067 + 29069 29068 29072 + 29009 29073 29070 + 29070 29073 29074 + 29074 29075 29070 + 29071 29070 29075 + 29075 29076 29071 + 29072 29071 29076 + 29008 29073 29009 + 29073 29008 29077 + 29077 29074 29073 + 29074 29077 29078 + 29078 29079 29074 + 29074 29079 29080 + 29080 29075 29074 + 29076 29075 29080 + 29014 29077 29008 + 29078 29077 29014 + 29014 29081 29078 + 29078 29081 29082 + 29083 29078 29082 + 29079 29078 29083 + 29083 29084 29079 + 29080 29079 29084 + 29085 29081 29014 + 29081 29085 29082 + 29014 29013 29085 + 29085 29013 29012 + 29012 29086 29085 + 29087 29085 29086 + 29085 29087 29082 + 29088 29086 29012 + 29086 29088 29089 + 29089 29090 29086 + 29090 29087 29086 + 29091 29087 29090 + 29082 29087 29091 + 29012 29018 29088 + 29088 29018 29023 + 29023 29092 29088 + 29088 29092 29093 + 29089 29088 29093 + 29094 29089 29093 + 29095 29089 29094 + 29090 29089 29095 + 29095 29096 29090 + 29090 29096 29091 + 29097 29092 29023 + 29092 29097 29098 + 29098 29093 29092 + 29097 29023 29022 + 29022 29028 29097 + 29098 29097 29028 + 29099 29098 29028 + 29100 29098 29099 + 29093 29098 29100 + 29028 29101 29099 + 29102 29099 29101 + 29099 29102 29103 + 29103 29104 29099 + 29099 29104 29100 + 29033 29101 29028 + 29105 29101 29033 + 29101 29105 29102 + 29102 29105 29106 + 29106 29107 29102 + 29103 29102 29107 + 29033 29108 29105 + 29105 29108 29069 + 29069 29106 29105 + 29072 29106 29069 + 29106 29072 29109 + 29109 29107 29106 + 29108 29033 29032 + 29032 29038 29108 + 29069 29108 29038 + 29076 29109 29072 + 29110 29109 29076 + 29107 29109 29110 + 29110 29111 29107 + 29107 29111 29103 + 29103 29111 29112 + 29112 29113 29103 + 29113 29114 29103 + 29104 29103 29114 + 29076 29115 29110 + 29110 29115 29116 + 29117 29110 29116 + 29111 29110 29117 + 29117 29112 29111 + 29080 29115 29076 + 29115 29080 29118 + 29118 29119 29115 + 29115 29119 29116 + 29084 29118 29080 + 29120 29118 29084 + 29119 29118 29120 + 29120 29121 29119 + 29119 29121 29122 + 29122 29123 29119 + 29119 29123 29116 + 29084 29124 29120 + 29120 29124 29125 + 29125 29126 29120 + 29121 29120 29126 + 29126 29127 29121 + 29122 29121 29127 + 29128 29124 29084 + 29124 29128 29129 + 29129 29125 29124 + 29125 29129 29130 + 29130 29131 29125 + 29125 29131 29132 + 29132 29126 29125 + 29127 29126 29132 + 29084 29083 29128 + 29128 29083 29133 + 29133 29134 29128 + 29128 29134 29135 + 29135 29129 29128 + 29130 29129 29135 + 29136 29133 29083 + 29133 29136 29137 + 29138 29133 29137 + 29133 29138 29139 + 29139 29134 29133 + 29134 29139 29140 + 29140 29135 29134 + 29082 29136 29083 + 29141 29136 29082 + 29137 29136 29141 + 29141 29142 29137 + 29137 29142 29143 + 29143 29144 29137 + 29137 29144 29145 + 29145 29138 29137 + 29139 29138 29145 + 29082 29146 29141 + 29147 29141 29146 + 29142 29141 29147 + 29147 29148 29142 + 29143 29142 29148 + 29091 29146 29082 + 29146 29091 29149 + 29149 29150 29146 + 29146 29150 29147 + 29151 29147 29150 + 29148 29147 29151 + 29152 29149 29091 + 29153 29149 29152 + 29150 29149 29153 + 29153 29154 29150 + 29150 29154 29151 + 29091 29096 29152 + 29155 29152 29096 + 29152 29155 29156 + 29156 29157 29152 + 29152 29157 29153 + 29153 29157 29158 + 29158 29159 29153 + 29154 29153 29159 + 29096 29095 29155 + 29160 29155 29095 + 29156 29155 29160 + 29160 29161 29156 + 29156 29161 29162 + 29162 29163 29156 + 29157 29156 29163 + 29163 29158 29157 + 29095 29164 29160 + 29165 29160 29164 + 29160 29165 29166 + 29166 29161 29160 + 29161 29166 29167 + 29167 29162 29161 + 29094 29164 29095 + 29168 29164 29094 + 29164 29168 29165 + 29169 29165 29168 + 29166 29165 29169 + 29169 29170 29166 + 29167 29166 29170 + 29171 29167 29170 + 29172 29167 29171 + 29162 29167 29172 + 29094 29173 29168 + 29168 29173 29174 + 29174 29175 29168 + 29168 29175 29169 + 29176 29169 29175 + 29169 29176 29177 + 29177 29170 29169 + 29173 29094 29178 + 29178 29179 29173 + 29173 29179 29180 + 29180 29181 29173 + 29181 29182 29173 + 29182 29174 29173 + 29178 29094 29093 + 29183 29178 29093 + 29184 29178 29183 + 29178 29184 29185 + 29185 29179 29178 + 29179 29185 29186 + 29186 29180 29179 + 29187 29183 29093 + 29188 29183 29187 + 29189 29183 29188 + 29183 29189 29184 + 29184 29189 29190 + 29190 29191 29184 + 29185 29184 29191 + 29093 29192 29187 + 29193 29187 29192 + 29187 29193 29194 + 29187 29194 29188 + 29188 29194 29195 + 29195 29196 29188 + 29189 29188 29196 + 29196 29190 29189 + 29197 29192 29093 + 29192 29197 29198 + 29198 29199 29192 + 29192 29199 29193 + 29093 29100 29197 + 29200 29197 29100 + 29198 29197 29200 + 29200 29201 29198 + 29202 29198 29201 + 29199 29198 29202 + 29202 29203 29199 + 29193 29199 29203 + 29100 29104 29200 + 29114 29200 29104 + 29201 29200 29114 + 29114 29204 29201 + 29201 29204 29205 + 29205 29206 29201 + 29201 29206 29202 + 29206 29207 29202 + 29208 29202 29207 + 29203 29202 29208 + 29204 29114 29113 + 29113 29209 29204 + 29205 29204 29209 + 29209 29210 29205 + 29211 29205 29210 + 29205 29211 29212 + 29212 29206 29205 + 29206 29212 29213 + 29213 29207 29206 + 29214 29209 29113 + 29209 29214 29215 + 29215 29210 29209 + 29216 29210 29215 + 29210 29216 29211 + 29217 29211 29216 + 29211 29217 29218 + 29212 29211 29218 + 29214 29113 29112 + 29112 29219 29214 + 29215 29214 29219 + 29219 29220 29215 + 29221 29215 29220 + 29215 29221 29216 + 29216 29221 29222 + 29222 29217 29216 + 29217 29222 29223 + 29223 29218 29217 + 29224 29219 29112 + 29219 29224 29225 + 29225 29220 29219 + 29226 29220 29225 + 29220 29226 29221 + 29221 29226 29227 + 29227 29222 29221 + 29222 29227 29228 + 29223 29222 29228 + 29112 29117 29224 + 29224 29117 29229 + 29229 29230 29224 + 29224 29230 29231 + 29231 29232 29224 + 29232 29225 29224 + 29233 29225 29232 + 29225 29233 29226 + 29116 29229 29117 + 29234 29229 29116 + 29230 29229 29234 + 29234 29235 29230 + 29230 29235 29236 + 29236 29231 29230 + 29237 29231 29236 + 29231 29237 29238 + 29238 29232 29231 + 29116 29239 29234 + 29240 29234 29239 + 29235 29234 29240 + 29240 29241 29235 + 29236 29235 29241 + 29241 29242 29236 + 29242 29243 29236 + 29237 29236 29243 + 29116 29244 29239 + 29239 29244 29245 + 29245 29246 29239 + 29239 29246 29247 + 29247 29240 29239 + 29248 29240 29247 + 29241 29240 29248 + 29244 29116 29123 + 29123 29249 29244 + 29244 29249 29250 + 29245 29244 29250 + 29250 29251 29245 + 29252 29245 29251 + 29245 29252 29253 + 29253 29246 29245 + 29249 29123 29122 + 29249 29122 29254 + 29254 29250 29249 + 29250 29254 29255 + 29255 29256 29250 + 29250 29256 29257 + 29257 29251 29250 + 29258 29251 29257 + 29251 29258 29252 + 29127 29254 29122 + 29255 29254 29127 + 29127 29259 29255 + 29255 29259 29260 + 29260 29261 29255 + 29256 29255 29261 + 29261 29262 29256 + 29257 29256 29262 + 29132 29259 29127 + 29259 29132 29260 + 29132 29263 29260 + 29260 29263 29264 + 29261 29260 29264 + 29265 29261 29264 + 29262 29261 29265 + 29265 29266 29262 + 29267 29262 29266 + 29262 29267 29257 + 29263 29132 29131 + 29131 29268 29263 + 29269 29263 29268 + 29263 29269 29264 + 29264 29269 29270 + 29270 29265 29264 + 29270 29271 29265 + 29266 29265 29271 + 29272 29268 29131 + 29268 29272 29273 + 29273 29274 29268 + 29268 29274 29269 + 29275 29269 29274 + 29269 29275 29270 + 29131 29130 29272 + 29276 29272 29130 + 29273 29272 29276 + 29276 29277 29273 + 29278 29273 29277 + 29273 29278 29279 + 29274 29273 29279 + 29279 29275 29274 + 29280 29275 29279 + 29270 29275 29280 + 29130 29281 29276 + 29282 29276 29281 + 29276 29282 29283 + 29283 29277 29276 + 29277 29283 29284 + 29284 29278 29277 + 29135 29281 29130 + 29285 29281 29135 + 29281 29285 29282 + 29286 29282 29285 + 29283 29282 29286 + 29286 29287 29283 + 29288 29283 29287 + 29288 29289 29283 + 29283 29289 29284 + 29135 29140 29285 + 29285 29140 29290 + 29290 29291 29285 + 29285 29291 29286 + 29292 29286 29291 + 29286 29292 29293 + 29293 29287 29286 + 29287 29293 29294 + 29294 29288 29287 + 29290 29140 29139 + 29139 29295 29290 + 29296 29290 29295 + 29290 29296 29297 + 29297 29291 29290 + 29291 29297 29292 + 29145 29295 29139 + 29298 29295 29145 + 29295 29298 29296 + 29296 29298 29299 + 29299 29300 29296 + 29297 29296 29300 + 29300 29301 29297 + 29292 29297 29301 + 29145 29302 29298 + 29298 29302 29303 + 29303 29299 29298 + 29304 29299 29303 + 29299 29304 29305 + 29305 29300 29299 + 29300 29305 29306 + 29306 29301 29300 + 29302 29145 29307 + 29302 29307 29308 + 29303 29302 29308 + 29309 29303 29308 + 29310 29303 29309 + 29303 29310 29304 + 29145 29144 29307 + 29307 29144 29143 + 29143 29311 29307 + 29312 29307 29311 + 29307 29312 29308 + 29311 29143 29313 + 29313 29314 29311 + 29314 29315 29311 + 29315 29312 29311 + 29316 29312 29315 + 29312 29316 29317 + 29317 29308 29312 + 29143 29318 29313 + 29313 29318 29319 + 29313 29319 29320 + 29320 29314 29313 + 29321 29314 29320 + 29314 29321 29316 + 29316 29315 29314 + 29148 29318 29143 + 29322 29318 29148 + 29318 29322 29319 + 29319 29322 29323 + 29323 29324 29319 + 29324 29320 29319 + 29320 29324 29325 + 29326 29320 29325 + 29320 29326 29321 + 29148 29327 29322 + 29328 29322 29327 + 29322 29328 29323 + 29323 29328 29329 + 29323 29329 29330 + 29330 29324 29323 + 29325 29324 29330 + 29151 29327 29148 + 29327 29151 29331 + 29331 29332 29327 + 29332 29328 29327 + 29328 29332 29333 + 29334 29328 29333 + 29328 29334 29329 + 29329 29334 29335 + 29335 29330 29329 + 29336 29331 29151 + 29331 29336 29337 + 29338 29331 29337 + 29332 29331 29338 + 29338 29333 29332 + 29333 29338 29339 + 29339 29340 29333 + 29340 29334 29333 + 29151 29154 29336 + 29159 29336 29154 + 29336 29159 29341 + 29341 29337 29336 + 29337 29341 29342 + 29342 29343 29337 + 29338 29337 29343 + 29343 29339 29338 + 29339 29343 29344 + 29345 29339 29344 + 29340 29339 29345 + 29341 29159 29346 + 29341 29346 29347 + 29342 29341 29347 + 29347 29348 29342 + 29348 29349 29342 + 29343 29342 29349 + 29349 29344 29343 + 29344 29349 29350 + 29350 29345 29344 + 29159 29158 29346 + 29351 29346 29158 + 29346 29351 29352 + 29352 29347 29346 + 29347 29352 29353 + 29353 29348 29347 + 29348 29353 29354 + 29354 29355 29348 + 29355 29349 29348 + 29349 29355 29350 + 29158 29163 29351 + 29351 29163 29162 + 29162 29356 29351 + 29352 29351 29356 + 29357 29352 29356 + 29353 29352 29357 + 29357 29358 29353 + 29354 29353 29358 + 29359 29354 29358 + 29354 29359 29350 + 29350 29355 29354 + 29172 29356 29162 + 29356 29172 29357 + 29172 29360 29357 + 29357 29360 29361 + 29361 29358 29357 + 29358 29361 29359 + 29359 29361 29362 + 29362 29363 29359 + 29363 29364 29359 + 29350 29359 29364 + 29360 29172 29365 + 29366 29360 29365 + 29361 29360 29366 + 29366 29362 29361 + 29367 29362 29366 + 29362 29367 29363 + 29171 29365 29172 + 29368 29365 29171 + 29365 29368 29366 + 29368 29369 29366 + 29366 29369 29367 + 29367 29369 29370 + 29371 29367 29370 + 29367 29371 29363 + 29171 29372 29368 + 29368 29372 29325 + 29325 29373 29368 + 29374 29368 29373 + 29374 29369 29368 + 29369 29374 29370 + 29372 29171 29170 + 29170 29177 29372 + 29372 29177 29326 + 29326 29325 29372 + 29321 29326 29177 + 29177 29176 29321 + 29321 29176 29375 + 29375 29317 29321 + 29317 29316 29321 + 29175 29375 29176 + 29375 29175 29174 + 29174 29376 29375 + 29375 29376 29377 + 29377 29317 29375 + 29308 29317 29377 + 29376 29174 29182 + 29182 29378 29376 + 29377 29376 29378 + 29378 29379 29377 + 29308 29377 29379 + 29379 29380 29308 + 29308 29380 29381 + 29381 29309 29308 + 29382 29378 29182 + 29378 29382 29383 + 29383 29379 29378 + 29379 29383 29380 + 29380 29383 29384 + 29384 29381 29380 + 29384 29385 29381 + 29381 29385 29386 + 29386 29309 29381 + 29382 29182 29181 + 29181 29387 29382 + 29382 29387 29388 + 29383 29382 29388 + 29388 29389 29383 + 29389 29390 29383 + 29390 29384 29383 + 29385 29384 29390 + 29181 29391 29387 + 29387 29391 29392 + 29392 29388 29387 + 29388 29392 29393 + 29388 29393 29394 + 29394 29389 29388 + 29391 29181 29180 + 29180 29395 29391 + 29392 29391 29395 + 29396 29392 29395 + 29393 29392 29396 + 29396 29397 29393 + 29393 29397 29398 + 29394 29393 29398 + 29395 29180 29186 + 29395 29186 29399 + 29399 29400 29395 + 29395 29400 29396 + 29401 29396 29400 + 29396 29401 29397 + 29402 29397 29401 + 29397 29402 29398 + 29399 29186 29185 + 29185 29403 29399 + 29404 29399 29403 + 29400 29399 29404 + 29404 29405 29400 + 29400 29405 29401 + 29401 29405 29406 + 29406 29407 29401 + 29407 29402 29401 + 29191 29403 29185 + 29403 29191 29408 + 29408 29409 29403 + 29403 29409 29404 + 29404 29409 29410 + 29410 29411 29404 + 29405 29404 29411 + 29411 29406 29405 + 29408 29191 29190 + 29190 29412 29408 + 29408 29412 29413 + 29413 29414 29408 + 29409 29408 29414 + 29414 29410 29409 + 29190 29196 29412 + 29412 29196 29195 + 29195 29415 29412 + 29412 29415 29413 + 29416 29413 29415 + 29413 29416 29417 + 29417 29418 29413 + 29413 29418 29419 + 29419 29414 29413 + 29410 29414 29419 + 29420 29415 29195 + 29415 29420 29416 + 29420 29421 29416 + 29421 29422 29416 + 29417 29416 29422 + 29195 29423 29420 + 29420 29423 29424 + 29424 29421 29420 + 29421 29424 29425 + 29421 29425 29426 + 29426 29422 29421 + 29427 29422 29426 + 29422 29427 29417 + 29423 29195 29428 + 29428 29429 29423 + 29424 29423 29429 + 29429 29430 29424 + 29425 29424 29430 + 29194 29428 29195 + 29431 29428 29194 + 29428 29431 29429 + 29429 29431 29432 + 29432 29430 29429 + 29430 29432 29433 + 29430 29433 29425 + 29194 29193 29431 + 29432 29431 29193 + 29203 29432 29193 + 29433 29432 29203 + 29203 29208 29433 + 29425 29433 29208 + 29208 29434 29425 + 29434 29435 29425 + 29435 29436 29425 + 29436 29426 29425 + 29427 29426 29436 + 29436 29437 29427 + 29417 29427 29437 + 29207 29434 29208 + 29213 29434 29207 + 29434 29213 29435 + 29213 29438 29435 + 29435 29438 29439 + 29439 29440 29435 + 29435 29440 29436 + 29440 29441 29436 + 29436 29441 29437 + 29442 29437 29441 + 29437 29442 29417 + 29438 29213 29212 + 29212 29218 29438 + 29439 29438 29218 + 29218 29223 29439 + 29439 29223 29443 + 29440 29439 29443 + 29443 29444 29440 + 29440 29444 29445 + 29445 29441 29440 + 29445 29442 29441 + 29223 29228 29443 + 29446 29443 29228 + 29444 29443 29446 + 29446 29447 29444 + 29444 29447 29448 + 29448 29445 29444 + 29448 29442 29445 + 29442 29448 29449 + 29449 29450 29442 + 29442 29450 29417 + 29228 29451 29446 + 29452 29446 29451 + 29447 29446 29452 + 29452 29453 29447 + 29448 29447 29453 + 29449 29448 29453 + 29453 29454 29449 + 29454 29455 29449 + 29449 29455 29450 + 29451 29228 29227 + 29227 29456 29451 + 29451 29456 29457 + 29452 29451 29457 + 29458 29452 29457 + 29452 29458 29454 + 29454 29453 29452 + 29456 29227 29226 + 29226 29233 29456 + 29459 29456 29233 + 29456 29459 29457 + 29457 29459 29460 + 29461 29457 29460 + 29457 29461 29458 + 29462 29458 29461 + 29454 29458 29462 + 29233 29463 29459 + 29460 29459 29463 + 29463 29238 29460 + 29460 29238 29237 + 29464 29460 29237 + 29461 29460 29464 + 29464 29465 29461 + 29461 29465 29462 + 29232 29463 29233 + 29463 29232 29238 + 29330 29373 29325 + 29373 29330 29466 + 29466 29374 29373 + 29374 29466 29467 + 29467 29370 29374 + 29370 29467 29468 + 29468 29371 29370 + 29335 29466 29330 + 29466 29335 29469 + 29467 29466 29469 + 29468 29467 29469 + 29470 29468 29469 + 29468 29470 29363 + 29363 29371 29468 + 29471 29469 29335 + 29469 29471 29470 + 29470 29471 29472 + 29472 29473 29470 + 29473 29364 29470 + 29364 29363 29470 + 29335 29474 29471 + 29471 29474 29340 + 29340 29472 29471 + 29345 29472 29340 + 29472 29345 29475 + 29475 29473 29472 + 29473 29475 29364 + 29364 29475 29350 + 29350 29475 29345 + 29334 29474 29335 + 29340 29474 29334 + 29476 29462 29465 + 29462 29476 29477 + 29477 29478 29462 + 29462 29478 29454 + 29454 29478 29479 + 29479 29455 29454 + 29465 29480 29476 + 29476 29480 29481 + 29481 29482 29476 + 29482 29483 29476 + 29477 29476 29483 + 29480 29465 29464 + 29480 29464 29484 + 29484 29481 29480 + 29481 29484 29485 + 29481 29485 29486 + 29486 29482 29481 + 29487 29482 29486 + 29482 29487 29488 + 29488 29483 29482 + 29489 29484 29464 + 29485 29484 29489 + 29489 29490 29485 + 29485 29490 29491 + 29486 29485 29491 + 29491 29492 29486 + 29487 29486 29492 + 29492 29493 29487 + 29488 29487 29493 + 29237 29489 29464 + 29243 29489 29237 + 29489 29243 29490 + 29490 29243 29242 + 29242 29491 29490 + 29242 29494 29491 + 29491 29494 29495 + 29495 29492 29491 + 29492 29495 29496 + 29496 29493 29492 + 29493 29496 29497 + 29497 29498 29493 + 29493 29498 29488 + 29494 29242 29241 + 29241 29248 29494 + 29494 29248 29499 + 29495 29494 29499 + 29499 29500 29495 + 29496 29495 29500 + 29500 29501 29496 + 29496 29501 29502 + 29497 29496 29502 + 29248 29503 29499 + 29504 29499 29503 + 29386 29499 29504 + 29499 29386 29505 + 29505 29500 29499 + 29500 29505 29501 + 29501 29505 29506 + 29506 29502 29501 + 29247 29503 29248 + 29247 29507 29503 + 29503 29507 29504 + 29504 29507 29253 + 29253 29310 29504 + 29309 29504 29310 + 29504 29309 29386 + 29507 29247 29246 + 29246 29253 29507 + 29304 29310 29253 + 29253 29252 29304 + 29304 29252 29258 + 29258 29305 29304 + 29306 29305 29258 + 29258 29508 29306 + 29509 29306 29508 + 29301 29306 29509 + 29509 29510 29301 + 29510 29292 29301 + 29257 29508 29258 + 29508 29257 29267 + 29267 29511 29508 + 29511 29509 29508 + 29509 29511 29512 + 29513 29509 29512 + 29510 29509 29513 + 29513 29514 29510 + 29292 29510 29514 + 29293 29292 29514 + 29511 29267 29515 + 29515 29512 29511 + 29512 29515 29516 + 29516 29517 29512 + 29513 29512 29517 + 29518 29513 29517 + 29514 29513 29518 + 29518 29519 29514 + 29519 29293 29514 + 29519 29294 29293 + 29515 29267 29266 + 29515 29266 29520 + 29520 29516 29515 + 29516 29520 29521 + 29522 29516 29521 + 29517 29516 29522 + 29522 29523 29517 + 29517 29523 29524 + 29524 29518 29517 + 29519 29518 29524 + 29271 29520 29266 + 29520 29271 29525 + 29525 29521 29520 + 29521 29525 29526 + 29526 29527 29521 + 29527 29522 29521 + 29523 29522 29527 + 29527 29528 29523 + 29528 29524 29523 + 29525 29271 29529 + 29525 29529 29530 + 29530 29526 29525 + 29530 29531 29526 + 29532 29526 29531 + 29527 29526 29532 + 29532 29528 29527 + 29524 29528 29532 + 29533 29524 29532 + 29524 29533 29519 + 29271 29270 29529 + 29280 29529 29270 + 29529 29280 29530 + 29280 29534 29530 + 29530 29534 29535 + 29535 29536 29530 + 29531 29530 29536 + 29537 29531 29536 + 29537 29538 29531 + 29531 29538 29532 + 29532 29538 29533 + 29534 29280 29539 + 29539 29540 29534 + 29540 29535 29534 + 29535 29540 29541 + 29536 29535 29541 + 29541 29542 29536 + 29536 29542 29537 + 29542 29543 29537 + 29538 29537 29543 + 29279 29539 29280 + 29540 29539 29279 + 29279 29278 29540 + 29540 29278 29541 + 29278 29284 29541 + 29542 29541 29284 + 29284 29289 29542 + 29542 29289 29543 + 29289 29288 29543 + 29544 29543 29288 + 29543 29544 29538 + 29538 29544 29533 + 29519 29533 29544 + 29544 29294 29519 + 29288 29294 29544 + 29505 29386 29385 + 29385 29506 29505 + 29390 29506 29385 + 29506 29390 29502 + 29502 29390 29389 + 29389 29545 29502 + 29502 29545 29546 + 29546 29497 29502 + 29547 29497 29546 + 29497 29547 29548 + 29548 29498 29497 + 29545 29389 29394 + 29545 29394 29549 + 29549 29546 29545 + 29546 29549 29550 + 29546 29550 29547 + 29547 29550 29551 + 29551 29552 29547 + 29548 29547 29552 + 29398 29549 29394 + 29550 29549 29398 + 29398 29551 29550 + 29398 29553 29551 + 29551 29553 29554 + 29554 29552 29551 + 29552 29554 29555 + 29556 29552 29555 + 29552 29556 29548 + 29556 29557 29548 + 29498 29548 29557 + 29557 29488 29498 + 29558 29553 29398 + 29553 29558 29559 + 29559 29554 29553 + 29555 29554 29559 + 29402 29558 29398 + 29558 29402 29407 + 29558 29407 29406 + 29406 29559 29558 + 29560 29559 29406 + 29559 29560 29555 + 29555 29560 29561 + 29561 29562 29555 + 29562 29563 29555 + 29556 29555 29563 + 29563 29564 29556 + 29556 29564 29557 + 29406 29411 29560 + 29560 29411 29410 + 29410 29561 29560 + 29419 29561 29410 + 29561 29419 29565 + 29565 29562 29561 + 29562 29565 29479 + 29479 29566 29562 + 29563 29562 29566 + 29567 29563 29566 + 29563 29567 29564 + 29557 29564 29567 + 29568 29557 29567 + 29488 29557 29568 + 29568 29483 29488 + 29565 29419 29418 + 29418 29569 29565 + 29569 29455 29565 + 29455 29479 29565 + 29418 29417 29569 + 29417 29450 29569 + 29455 29569 29450 + 29483 29568 29477 + 29566 29477 29568 + 29478 29477 29566 + 29566 29479 29478 + 29568 29567 29566 + 29570 29571 29572 + 29570 29573 29571 + 29574 29571 29573 + 29571 29574 29575 + 29572 29571 29575 + 29576 29570 29572 + 29570 29576 29577 + 29577 29578 29570 + 29573 29570 29578 + 29579 29573 29578 + 29580 29573 29579 + 29573 29580 29574 + 29572 29581 29576 + 29577 29576 29581 + 29581 29582 29577 + 29583 29577 29582 + 29578 29577 29583 + 29583 29584 29578 + 29578 29584 29585 + 29585 29579 29578 + 29581 29572 29586 + 29587 29581 29586 + 29581 29587 29588 + 29588 29582 29581 + 29582 29588 29589 + 29589 29590 29582 + 29582 29590 29583 + 29591 29586 29572 + 29586 29591 29592 + 29592 29593 29586 + 29593 29587 29586 + 29587 29593 29594 + 29588 29587 29594 + 29589 29588 29594 + 29595 29591 29572 + 29591 29595 29596 + 29596 29597 29591 + 29597 29592 29591 + 29592 29597 29598 + 29599 29592 29598 + 29593 29592 29599 + 29599 29594 29593 + 29575 29595 29572 + 29595 29575 29600 + 29600 29601 29595 + 29601 29596 29595 + 29596 29601 29602 + 29603 29596 29602 + 29597 29596 29603 + 29603 29598 29597 + 29604 29600 29575 + 29600 29604 29605 + 29606 29600 29605 + 29601 29600 29606 + 29606 29602 29601 + 29602 29606 29607 + 29607 29608 29602 + 29603 29602 29608 + 29604 29575 29609 + 29610 29604 29609 + 29604 29610 29611 + 29611 29605 29604 + 29605 29611 29612 + 29612 29613 29605 + 29606 29605 29613 + 29613 29607 29606 + 29614 29609 29575 + 29615 29609 29614 + 29615 29610 29609 + 29611 29610 29615 + 29615 29616 29611 + 29612 29611 29616 + 29616 29617 29612 + 29618 29612 29617 + 29613 29612 29618 + 29574 29614 29575 + 29614 29574 29619 + 29619 29620 29614 + 29620 29621 29614 + 29621 29615 29614 + 29615 29621 29622 + 29622 29616 29615 + 29616 29622 29617 + 29580 29619 29574 + 29580 29623 29619 + 29623 29624 29619 + 29620 29619 29624 + 29624 29625 29620 + 29621 29620 29625 + 29622 29621 29625 + 29626 29622 29625 + 29622 29626 29617 + 29579 29623 29580 + 29623 29579 29585 + 29585 29627 29623 + 29623 29627 29628 + 29628 29624 29623 + 29625 29624 29628 + 29628 29629 29625 + 29625 29629 29626 + 29630 29626 29629 + 29617 29626 29630 + 29630 29631 29617 + 29617 29631 29618 + 29627 29585 29632 + 29632 29633 29627 + 29627 29633 29634 + 29634 29628 29627 + 29629 29628 29634 + 29634 29635 29629 + 29629 29635 29630 + 29636 29630 29635 + 29631 29630 29636 + 29632 29585 29584 + 29584 29637 29632 + 29638 29632 29637 + 29633 29632 29638 + 29638 29639 29633 + 29633 29639 29640 + 29640 29634 29633 + 29635 29634 29640 + 29640 29641 29635 + 29635 29641 29636 + 29642 29637 29584 + 29637 29642 29643 + 29643 29644 29637 + 29637 29644 29638 + 29645 29638 29644 + 29639 29638 29645 + 29584 29583 29642 + 29642 29583 29590 + 29590 29646 29642 + 29643 29642 29646 + 29646 29647 29643 + 29648 29643 29647 + 29644 29643 29648 + 29648 29649 29644 + 29644 29649 29645 + 29650 29646 29590 + 29646 29650 29651 + 29651 29647 29646 + 29647 29651 29652 + 29652 29653 29647 + 29647 29653 29648 + 29654 29648 29653 + 29649 29648 29654 + 29590 29589 29650 + 29650 29589 29655 + 29655 29656 29650 + 29650 29656 29657 + 29657 29651 29650 + 29652 29651 29657 + 29657 29658 29652 + 29659 29652 29658 + 29653 29652 29659 + 29594 29655 29589 + 29660 29655 29594 + 29655 29660 29661 + 29661 29656 29655 + 29656 29661 29662 + 29662 29657 29656 + 29657 29662 29663 + 29663 29658 29657 + 29594 29599 29660 + 29660 29599 29598 + 29598 29664 29660 + 29661 29660 29664 + 29664 29665 29661 + 29662 29661 29665 + 29665 29666 29662 + 29663 29662 29666 + 29666 29667 29663 + 29668 29663 29667 + 29658 29663 29668 + 29669 29664 29598 + 29664 29669 29670 + 29670 29665 29664 + 29665 29670 29671 + 29671 29666 29665 + 29666 29671 29672 + 29672 29667 29666 + 29598 29603 29669 + 29669 29603 29608 + 29670 29669 29608 + 29608 29673 29670 + 29671 29670 29673 + 29673 29674 29671 + 29672 29671 29674 + 29674 29675 29672 + 29676 29672 29675 + 29667 29672 29676 + 29676 29677 29667 + 29667 29677 29668 + 29678 29673 29608 + 29673 29678 29679 + 29679 29674 29673 + 29674 29679 29680 + 29680 29675 29674 + 29675 29680 29681 + 29681 29682 29675 + 29675 29682 29676 + 29608 29607 29678 + 29678 29607 29613 + 29613 29683 29678 + 29679 29678 29683 + 29683 29684 29679 + 29680 29679 29684 + 29684 29685 29680 + 29681 29680 29685 + 29685 29686 29681 + 29687 29681 29686 + 29682 29681 29687 + 29618 29683 29613 + 29683 29618 29688 + 29688 29684 29683 + 29684 29688 29689 + 29689 29685 29684 + 29685 29689 29690 + 29690 29686 29685 + 29686 29690 29691 + 29691 29692 29686 + 29686 29692 29687 + 29688 29618 29631 + 29631 29693 29688 + 29689 29688 29693 + 29693 29694 29689 + 29690 29689 29694 + 29694 29695 29690 + 29691 29690 29695 + 29636 29693 29631 + 29693 29636 29696 + 29696 29694 29693 + 29694 29696 29697 + 29697 29695 29694 + 29695 29697 29698 + 29698 29699 29695 + 29695 29699 29691 + 29696 29636 29641 + 29641 29700 29696 + 29697 29696 29700 + 29700 29701 29697 + 29698 29697 29701 + 29701 29702 29698 + 29703 29698 29702 + 29699 29698 29703 + 29704 29700 29641 + 29700 29704 29705 + 29705 29701 29700 + 29701 29705 29706 + 29706 29702 29701 + 29702 29706 29707 + 29707 29708 29702 + 29702 29708 29703 + 29641 29640 29704 + 29704 29640 29639 + 29639 29709 29704 + 29704 29709 29710 + 29710 29705 29704 + 29706 29705 29710 + 29710 29711 29706 + 29706 29711 29712 + 29712 29707 29706 + 29645 29709 29639 + 29709 29645 29713 + 29713 29710 29709 + 29710 29713 29714 + 29714 29711 29710 + 29711 29714 29715 + 29715 29712 29711 + 29713 29645 29649 + 29649 29716 29713 + 29714 29713 29716 + 29716 29717 29714 + 29714 29717 29718 + 29718 29715 29714 + 29719 29715 29718 + 29712 29715 29719 + 29654 29716 29649 + 29716 29654 29720 + 29720 29717 29716 + 29717 29720 29721 + 29721 29722 29717 + 29717 29722 29718 + 29723 29718 29722 + 29718 29723 29724 + 29718 29724 29719 + 29720 29654 29725 + 29725 29726 29720 + 29720 29726 29727 + 29727 29721 29720 + 29728 29721 29727 + 29728 29722 29721 + 29722 29728 29723 + 29653 29725 29654 + 29659 29725 29653 + 29725 29659 29729 + 29729 29726 29725 + 29726 29729 29730 + 29730 29731 29726 + 29726 29731 29727 + 29729 29659 29732 + 29732 29733 29729 + 29729 29733 29734 + 29734 29730 29729 + 29735 29730 29734 + 29730 29735 29736 + 29736 29731 29730 + 29658 29732 29659 + 29668 29732 29658 + 29732 29668 29737 + 29737 29733 29732 + 29733 29737 29738 + 29738 29734 29733 + 29739 29734 29738 + 29734 29739 29735 + 29740 29735 29739 + 29736 29735 29740 + 29737 29668 29677 + 29677 29741 29737 + 29737 29741 29742 + 29742 29738 29737 + 29743 29738 29742 + 29738 29743 29739 + 29739 29743 29744 + 29744 29745 29739 + 29739 29745 29740 + 29746 29741 29677 + 29741 29746 29747 + 29747 29742 29741 + 29748 29742 29747 + 29742 29748 29743 + 29744 29743 29748 + 29677 29676 29746 + 29746 29676 29682 + 29682 29749 29746 + 29746 29749 29750 + 29750 29747 29746 + 29751 29747 29750 + 29747 29751 29748 + 29748 29751 29752 + 29752 29753 29748 + 29748 29753 29744 + 29687 29749 29682 + 29749 29687 29754 + 29754 29750 29749 + 29750 29754 29755 + 29755 29756 29750 + 29750 29756 29751 + 29752 29751 29756 + 29757 29754 29687 + 29755 29754 29757 + 29687 29692 29757 + 29758 29757 29692 + 29759 29757 29758 + 29757 29759 29755 + 29692 29691 29758 + 29760 29758 29691 + 29761 29758 29760 + 29758 29761 29759 + 29759 29761 29762 + 29762 29763 29759 + 29755 29759 29763 + 29691 29699 29760 + 29699 29764 29760 + 29765 29760 29764 + 29760 29765 29766 + 29760 29766 29761 + 29761 29766 29767 + 29767 29762 29761 + 29768 29762 29767 + 29763 29762 29768 + 29703 29764 29699 + 29764 29703 29769 + 29769 29770 29764 + 29764 29770 29765 + 29765 29770 29771 + 29771 29772 29765 + 29766 29765 29772 + 29772 29767 29766 + 29769 29703 29708 + 29708 29773 29769 + 29769 29773 29774 + 29774 29775 29769 + 29770 29769 29775 + 29775 29771 29770 + 29771 29775 29776 + 29771 29776 29777 + 29777 29772 29771 + 29767 29772 29777 + 29773 29708 29707 + 29707 29778 29773 + 29773 29778 29779 + 29779 29774 29773 + 29774 29779 29780 + 29780 29781 29774 + 29774 29781 29776 + 29776 29775 29774 + 29778 29707 29712 + 29712 29782 29778 + 29778 29782 29783 + 29783 29779 29778 + 29780 29779 29783 + 29783 29784 29780 + 29780 29784 29785 + 29781 29780 29785 + 29785 29786 29781 + 29776 29781 29786 + 29777 29776 29786 + 29719 29782 29712 + 29782 29719 29787 + 29787 29788 29782 + 29782 29788 29783 + 29789 29783 29788 + 29783 29789 29784 + 29784 29789 29790 + 29790 29791 29784 + 29784 29791 29785 + 29792 29787 29719 + 29793 29787 29792 + 29793 29788 29787 + 29788 29793 29789 + 29789 29793 29794 + 29794 29795 29789 + 29795 29790 29789 + 29719 29724 29792 + 29796 29792 29724 + 29792 29796 29797 + 29797 29794 29792 + 29792 29794 29793 + 29724 29723 29796 + 29798 29796 29723 + 29797 29796 29798 + 29798 29799 29797 + 29797 29799 29800 + 29794 29797 29800 + 29800 29795 29794 + 29801 29795 29800 + 29795 29801 29790 + 29802 29798 29723 + 29803 29798 29802 + 29798 29803 29799 + 29799 29803 29804 + 29799 29804 29800 + 29801 29800 29804 + 29804 29805 29801 + 29801 29805 29806 + 29801 29806 29790 + 29807 29802 29723 + 29808 29802 29807 + 29809 29802 29808 + 29802 29809 29803 + 29809 29810 29803 + 29810 29811 29803 + 29803 29811 29804 + 29805 29804 29811 + 29723 29728 29807 + 29727 29807 29728 + 29812 29807 29727 + 29807 29812 29808 + 29808 29812 29813 + 29813 29814 29808 + 29815 29808 29814 + 29808 29815 29809 + 29810 29809 29815 + 29727 29816 29812 + 29812 29816 29817 + 29817 29813 29812 + 29818 29813 29817 + 29813 29818 29819 + 29819 29814 29813 + 29820 29814 29819 + 29814 29820 29815 + 29816 29727 29731 + 29731 29736 29816 + 29817 29816 29736 + 29736 29821 29817 + 29822 29817 29821 + 29817 29822 29818 + 29818 29822 29823 + 29823 29824 29818 + 29819 29818 29824 + 29825 29819 29824 + 29819 29825 29820 + 29740 29821 29736 + 29821 29740 29826 + 29826 29827 29821 + 29821 29827 29822 + 29822 29827 29823 + 29828 29823 29827 + 29824 29823 29828 + 29829 29824 29828 + 29824 29829 29825 + 29830 29825 29829 + 29820 29825 29830 + 29826 29740 29745 + 29745 29831 29826 + 29828 29826 29831 + 29827 29826 29828 + 29831 29745 29744 + 29744 29832 29831 + 29831 29832 29833 + 29833 29834 29831 + 29831 29834 29828 + 29829 29828 29834 + 29832 29744 29753 + 29753 29835 29832 + 29833 29832 29835 + 29835 29836 29833 + 29837 29833 29836 + 29837 29834 29833 + 29834 29837 29829 + 29829 29837 29838 + 29838 29839 29829 + 29839 29830 29829 + 29835 29753 29752 + 29752 29840 29835 + 29835 29840 29841 + 29841 29836 29835 + 29842 29836 29841 + 29836 29842 29837 + 29837 29842 29838 + 29840 29752 29843 + 29843 29844 29840 + 29841 29840 29844 + 29845 29841 29844 + 29842 29841 29845 + 29845 29838 29842 + 29846 29838 29845 + 29838 29846 29847 + 29847 29839 29838 + 29756 29843 29752 + 29848 29843 29756 + 29844 29843 29848 + 29848 29849 29844 + 29844 29849 29850 + 29850 29851 29844 + 29844 29851 29845 + 29846 29845 29851 + 29756 29755 29848 + 29852 29848 29755 + 29849 29848 29852 + 29852 29853 29849 + 29853 29854 29849 + 29854 29850 29849 + 29855 29850 29854 + 29855 29851 29850 + 29851 29855 29846 + 29846 29855 29856 + 29846 29856 29847 + 29857 29852 29755 + 29858 29852 29857 + 29858 29853 29852 + 29853 29858 29859 + 29859 29854 29853 + 29859 29856 29854 + 29854 29856 29855 + 29763 29857 29755 + 29860 29857 29763 + 29861 29857 29860 + 29857 29861 29858 + 29859 29858 29861 + 29861 29862 29859 + 29862 29863 29859 + 29856 29859 29863 + 29863 29864 29856 + 29856 29864 29847 + 29763 29865 29860 + 29860 29865 29866 + 29866 29867 29860 + 29867 29868 29860 + 29861 29860 29868 + 29868 29862 29861 + 29768 29865 29763 + 29865 29768 29869 + 29869 29866 29865 + 29870 29866 29869 + 29866 29870 29871 + 29871 29867 29866 + 29867 29871 29872 + 29867 29872 29873 + 29873 29868 29867 + 29873 29862 29868 + 29768 29874 29869 + 29875 29869 29874 + 29869 29875 29870 + 29870 29875 29786 + 29786 29876 29870 + 29870 29876 29877 + 29877 29871 29870 + 29767 29874 29768 + 29777 29874 29767 + 29874 29777 29875 + 29786 29875 29777 + 29871 29877 29878 + 29879 29878 29877 + 29878 29879 29880 + 29880 29881 29878 + 29872 29878 29881 + 29872 29871 29878 + 29877 29882 29879 + 29879 29882 29883 + 29883 29884 29879 + 29879 29884 29885 + 29880 29879 29885 + 29839 29880 29885 + 29881 29880 29839 + 29882 29877 29876 + 29876 29886 29882 + 29883 29882 29886 + 29886 29887 29883 + 29888 29883 29887 + 29883 29888 29889 + 29884 29883 29889 + 29884 29889 29890 + 29890 29885 29884 + 29886 29876 29786 + 29786 29785 29886 + 29886 29785 29791 + 29791 29887 29886 + 29887 29791 29790 + 29790 29806 29887 + 29887 29806 29888 + 29805 29888 29806 + 29805 29891 29888 + 29891 29889 29888 + 29889 29891 29892 + 29890 29889 29892 + 29893 29890 29892 + 29890 29893 29830 + 29830 29885 29890 + 29885 29830 29839 + 29811 29891 29805 + 29891 29811 29810 + 29810 29892 29891 + 29810 29894 29892 + 29892 29894 29893 + 29893 29894 29815 + 29820 29893 29815 + 29830 29893 29820 + 29894 29810 29815 + 29839 29847 29881 + 29881 29847 29864 + 29864 29895 29881 + 29881 29895 29872 + 29895 29873 29872 + 29862 29873 29895 + 29895 29863 29862 + 29863 29895 29864 + 29896 29897 29898 + 29897 29896 29899 + 29899 29900 29897 + 29897 29900 29901 + 29901 29902 29897 + 29897 29902 29898 + 29898 29903 29896 + 29903 29904 29896 + 29899 29896 29904 + 29904 29905 29899 + 29906 29899 29905 + 29900 29899 29906 + 29903 29898 29907 + 29908 29903 29907 + 29903 29908 29909 + 29909 29904 29903 + 29904 29909 29910 + 29910 29905 29904 + 29907 29898 29902 + 29902 29911 29907 + 29907 29911 29912 + 29913 29907 29912 + 29907 29913 29914 + 29907 29914 29915 + 29915 29916 29907 + 29916 29908 29907 + 29911 29902 29901 + 29901 29917 29911 + 29911 29917 29918 + 29918 29912 29911 + 29919 29912 29918 + 29912 29919 29913 + 29913 29919 29920 + 29921 29913 29920 + 29913 29921 29914 + 29917 29901 29922 + 29922 29923 29917 + 29917 29923 29924 + 29924 29918 29917 + 29925 29918 29924 + 29918 29925 29919 + 29919 29925 29926 + 29926 29920 29919 + 29922 29901 29900 + 29900 29927 29922 + 29928 29922 29927 + 29923 29922 29928 + 29928 29929 29923 + 29923 29929 29930 + 29930 29924 29923 + 29931 29924 29930 + 29924 29931 29925 + 29906 29927 29900 + 29927 29906 29932 + 29932 29933 29927 + 29927 29933 29928 + 29934 29928 29933 + 29929 29928 29934 + 29934 29935 29929 + 29929 29935 29936 + 29936 29930 29929 + 29932 29906 29937 + 29937 29938 29932 + 29939 29932 29938 + 29933 29932 29939 + 29939 29940 29933 + 29933 29940 29934 + 29941 29934 29940 + 29935 29934 29941 + 29905 29937 29906 + 29942 29937 29905 + 29937 29942 29943 + 29943 29938 29937 + 29938 29943 29944 + 29944 29945 29938 + 29938 29945 29939 + 29946 29939 29945 + 29940 29939 29946 + 29905 29910 29942 + 29942 29910 29947 + 29947 29948 29942 + 29943 29942 29948 + 29948 29949 29943 + 29944 29943 29949 + 29949 29950 29944 + 29951 29944 29950 + 29945 29944 29951 + 29952 29947 29910 + 29953 29947 29952 + 29947 29953 29954 + 29954 29948 29947 + 29948 29954 29955 + 29955 29949 29948 + 29949 29955 29956 + 29956 29950 29949 + 29910 29909 29952 + 29908 29952 29909 + 29908 29916 29952 + 29916 29957 29952 + 29952 29957 29953 + 29953 29957 29958 + 29958 29959 29953 + 29954 29953 29959 + 29959 29960 29954 + 29955 29954 29960 + 29960 29961 29955 + 29956 29955 29961 + 29916 29958 29957 + 29916 29915 29958 + 29915 29962 29958 + 29958 29962 29963 + 29963 29959 29958 + 29959 29963 29964 + 29964 29960 29959 + 29960 29964 29965 + 29965 29961 29960 + 29915 29966 29962 + 29963 29962 29966 + 29966 29967 29963 + 29964 29963 29967 + 29967 29968 29964 + 29965 29964 29968 + 29968 29969 29965 + 29970 29965 29969 + 29961 29965 29970 + 29971 29966 29915 + 29966 29971 29972 + 29972 29967 29966 + 29967 29972 29973 + 29973 29968 29967 + 29968 29973 29974 + 29974 29969 29968 + 29915 29975 29971 + 29975 29976 29971 + 29972 29971 29976 + 29976 29977 29972 + 29972 29977 29978 + 29978 29973 29972 + 29974 29973 29978 + 29979 29975 29915 + 29975 29979 29976 + 29979 29980 29976 + 29976 29980 29981 + 29981 29977 29976 + 29977 29981 29982 + 29982 29978 29977 + 29983 29979 29915 + 29979 29983 29984 + 29979 29984 29980 + 29981 29980 29984 + 29984 29985 29981 + 29982 29981 29985 + 29985 29986 29982 + 29987 29982 29986 + 29978 29982 29987 + 29914 29983 29915 + 29983 29914 29988 + 29988 29989 29983 + 29983 29989 29990 + 29983 29990 29984 + 29984 29990 29991 + 29991 29985 29984 + 29985 29991 29992 + 29992 29986 29985 + 29914 29993 29988 + 29994 29988 29993 + 29989 29988 29994 + 29994 29995 29989 + 29989 29995 29991 + 29991 29990 29989 + 29996 29993 29914 + 29993 29996 29997 + 29997 29998 29993 + 29993 29998 29994 + 29999 29994 29998 + 29995 29994 29999 + 29914 29921 29996 + 29921 30000 29996 + 29997 29996 30000 + 30000 30001 29997 + 30002 29997 30001 + 29998 29997 30002 + 30002 30003 29998 + 29998 30003 29999 + 29920 30000 29921 + 30000 29920 29926 + 29926 30001 30000 + 30001 29926 30004 + 30004 30005 30001 + 30001 30005 30002 + 30006 30002 30005 + 30003 30002 30006 + 30006 30007 30003 + 30003 30007 30008 + 30008 29999 30003 + 30004 29926 29925 + 29925 29931 30004 + 30009 30004 29931 + 30005 30004 30009 + 30009 30010 30005 + 30005 30010 30006 + 30011 30006 30010 + 30007 30006 30011 + 30011 30012 30007 + 30008 30007 30012 + 29931 30013 30009 + 30014 30009 30013 + 30010 30009 30014 + 30014 30015 30010 + 30010 30015 30011 + 30016 30011 30015 + 30012 30011 30016 + 29930 30013 29931 + 30013 29930 29936 + 29936 30017 30013 + 30013 30017 30014 + 30018 30014 30017 + 30014 30018 30019 + 30015 30014 30019 + 30015 30019 30016 + 30017 29936 30020 + 30020 30021 30017 + 30017 30021 30018 + 30022 30018 30021 + 30019 30018 30022 + 30022 30023 30019 + 30016 30019 30023 + 30020 29936 29935 + 29935 30024 30020 + 30020 30024 30025 + 30025 30026 30020 + 30021 30020 30026 + 30026 30027 30021 + 30027 30022 30021 + 29941 30024 29935 + 30024 29941 30028 + 30028 30025 30024 + 30025 30028 30029 + 30029 30030 30025 + 30025 30030 30031 + 30031 30026 30025 + 30027 30026 30031 + 30031 30032 30027 + 30027 30032 30022 + 30028 29941 30033 + 30033 30034 30028 + 30029 30028 30034 + 30034 30035 30029 + 30029 30035 30036 + 30036 30037 30029 + 30030 30029 30037 + 29941 30038 30033 + 30039 30033 30038 + 30033 30039 30040 + 30033 30040 30034 + 30040 30041 30034 + 30035 30034 30041 + 30035 30041 30042 + 30042 30036 30035 + 29940 30038 29941 + 29946 30038 29940 + 30038 29946 30039 + 30039 29946 30043 + 30043 30044 30039 + 30040 30039 30044 + 30044 30045 30040 + 30041 30040 30045 + 30042 30041 30045 + 30046 30042 30045 + 30047 30042 30046 + 30036 30042 30047 + 29945 30043 29946 + 29951 30043 29945 + 30043 29951 30048 + 30048 30044 30043 + 30045 30044 30048 + 30048 30049 30045 + 30045 30049 30050 + 30050 30051 30045 + 30045 30051 30046 + 30052 30048 29951 + 30052 30053 30048 + 30053 30049 30048 + 30050 30049 30053 + 29951 30054 30052 + 30055 30052 30054 + 30052 30055 30056 + 30053 30052 30056 + 30053 30056 30057 + 30057 30058 30053 + 30053 30058 30050 + 29950 30054 29951 + 30059 30054 29950 + 30054 30059 30055 + 30060 30055 30059 + 30056 30055 30060 + 30060 30061 30056 + 30056 30061 30062 + 30062 30057 30056 + 30063 30057 30062 + 30058 30057 30063 + 29950 29956 30059 + 30059 29956 30064 + 30064 30065 30059 + 30059 30065 30060 + 30066 30060 30065 + 30060 30066 30067 + 30067 30061 30060 + 30061 30067 30068 + 30068 30062 30061 + 29961 30064 29956 + 29970 30064 29961 + 30064 29970 30069 + 30064 30069 30065 + 30065 30069 30066 + 30070 30066 30069 + 30067 30066 30070 + 30070 30071 30067 + 30067 30071 30072 + 30072 30068 30067 + 30069 29970 30073 + 30073 30074 30069 + 30069 30074 30070 + 30075 30070 30074 + 30070 30075 30076 + 30076 30071 30070 + 30071 30076 30077 + 30077 30072 30071 + 29969 30073 29970 + 30078 30073 29969 + 30073 30078 30079 + 30079 30074 30073 + 30074 30079 30075 + 30080 30075 30079 + 30076 30075 30080 + 30080 30081 30076 + 30077 30076 30081 + 29969 29974 30078 + 30078 29974 30082 + 30082 30083 30078 + 30079 30078 30083 + 30083 30084 30079 + 30079 30084 30080 + 30085 30080 30084 + 30081 30080 30085 + 29978 30082 29974 + 29987 30082 29978 + 30082 29987 30086 + 30086 30083 30082 + 30083 30086 30087 + 30087 30084 30083 + 30084 30087 30085 + 30088 30085 30087 + 30089 30085 30088 + 30085 30089 30081 + 30086 29987 30090 + 30090 30091 30086 + 30087 30086 30091 + 30091 30092 30087 + 30087 30092 30088 + 30093 30088 30092 + 30094 30088 30093 + 30088 30094 30089 + 29986 30090 29987 + 30095 30090 29986 + 30090 30095 30096 + 30096 30091 30090 + 30091 30096 30097 + 30097 30092 30091 + 30092 30097 30093 + 29986 29992 30095 + 30095 29992 30098 + 30098 30099 30095 + 30096 30095 30099 + 30099 30100 30096 + 30097 30096 30100 + 30100 30101 30097 + 30093 30097 30101 + 29995 30098 29992 + 29999 30098 29995 + 30098 29999 30008 + 30008 30099 30098 + 30099 30008 30102 + 30102 30100 30099 + 30100 30102 30103 + 30103 30101 30100 + 29992 29991 29995 + 30012 30102 30008 + 30103 30102 30012 + 30012 30104 30103 + 30103 30104 30105 + 30105 30106 30103 + 30101 30103 30106 + 30106 30107 30101 + 30101 30107 30093 + 30108 30093 30107 + 30093 30108 30094 + 30016 30104 30012 + 30104 30016 30109 + 30109 30110 30104 + 30104 30110 30105 + 30023 30109 30016 + 30109 30023 30111 + 30112 30109 30111 + 30112 30110 30109 + 30110 30112 30113 + 30113 30105 30110 + 30111 30023 30022 + 30032 30111 30022 + 30111 30032 30114 + 30112 30111 30114 + 30114 30113 30112 + 30115 30113 30114 + 30105 30113 30115 + 30115 30116 30105 + 30105 30116 30117 + 30117 30106 30105 + 30106 30117 30118 + 30118 30107 30106 + 30107 30118 30108 + 30119 30114 30032 + 30120 30114 30119 + 30114 30120 30115 + 30121 30115 30120 + 30116 30115 30121 + 30121 30122 30116 + 30116 30122 30123 + 30123 30117 30116 + 30118 30117 30123 + 30032 30031 30119 + 30124 30119 30031 + 30125 30119 30124 + 30119 30125 30120 + 30120 30125 30126 + 30126 30127 30120 + 30120 30127 30128 + 30128 30121 30120 + 30031 30030 30124 + 30037 30124 30030 + 30124 30037 30129 + 30124 30129 30125 + 30125 30129 30130 + 30130 30131 30125 + 30131 30132 30125 + 30132 30126 30125 + 30133 30126 30132 + 30133 30127 30126 + 30129 30037 30036 + 30036 30130 30129 + 30047 30130 30036 + 30130 30047 30134 + 30134 30131 30130 + 30131 30134 30135 + 30135 30136 30131 + 30131 30136 30137 + 30137 30132 30131 + 30137 30138 30132 + 30132 30138 30133 + 30139 30134 30047 + 30135 30134 30139 + 30139 30140 30135 + 30135 30140 30141 + 30141 30142 30135 + 30136 30135 30142 + 30142 30143 30136 + 30137 30136 30143 + 30144 30139 30047 + 30145 30139 30144 + 30145 30140 30139 + 30140 30145 30146 + 30146 30141 30140 + 30047 30147 30144 + 30148 30144 30147 + 30144 30148 30149 + 30149 30150 30144 + 30144 30150 30145 + 30046 30147 30047 + 30046 30151 30147 + 30147 30151 30148 + 30152 30148 30151 + 30152 30153 30148 + 30153 30149 30148 + 30153 30154 30149 + 30150 30149 30154 + 30154 30155 30150 + 30145 30150 30155 + 30151 30046 30051 + 30051 30152 30151 + 30152 30051 30050 + 30153 30152 30050 + 30050 30156 30153 + 30153 30156 30154 + 30156 30157 30154 + 30154 30157 30155 + 30155 30157 30158 + 30158 30159 30155 + 30155 30159 30145 + 30159 30146 30145 + 30160 30146 30159 + 30141 30146 30160 + 30156 30050 30058 + 30058 30161 30156 + 30157 30156 30161 + 30158 30157 30161 + 30162 30158 30161 + 30159 30158 30162 + 30159 30162 30160 + 30163 30160 30162 + 30164 30160 30163 + 30160 30164 30141 + 30063 30161 30058 + 30161 30063 30162 + 30162 30063 30163 + 30062 30163 30063 + 30163 30062 30068 + 30068 30165 30163 + 30163 30165 30164 + 30164 30165 30166 + 30166 30167 30164 + 30141 30164 30167 + 30167 30142 30141 + 30143 30142 30167 + 30165 30068 30072 + 30072 30166 30165 + 30166 30072 30077 + 30077 30168 30166 + 30166 30168 30169 + 30169 30167 30166 + 30167 30169 30143 + 30143 30169 30170 + 30170 30171 30143 + 30143 30171 30137 + 30168 30077 30172 + 30172 30173 30168 + 30168 30173 30174 + 30174 30170 30168 + 30170 30169 30168 + 30081 30172 30077 + 30175 30172 30081 + 30172 30175 30176 + 30176 30173 30172 + 30173 30176 30177 + 30177 30174 30173 + 30081 30089 30175 + 30175 30089 30094 + 30178 30175 30094 + 30176 30175 30178 + 30178 30179 30176 + 30176 30179 30180 + 30180 30177 30176 + 30181 30177 30180 + 30174 30177 30181 + 30094 30182 30178 + 30183 30178 30182 + 30179 30178 30183 + 30179 30183 30184 + 30184 30180 30179 + 30180 30184 30185 + 30180 30185 30181 + 30186 30182 30094 + 30182 30186 30187 + 30187 30188 30182 + 30182 30188 30183 + 30188 30189 30183 + 30189 30184 30183 + 30185 30184 30189 + 30189 30190 30185 + 30181 30185 30190 + 30094 30108 30186 + 30186 30108 30118 + 30118 30191 30186 + 30187 30186 30191 + 30191 30192 30187 + 30187 30192 30193 + 30193 30194 30187 + 30188 30187 30194 + 30194 30189 30188 + 30189 30194 30190 + 30123 30191 30118 + 30191 30123 30192 + 30192 30123 30122 + 30122 30193 30192 + 30193 30122 30121 + 30193 30121 30128 + 30128 30194 30193 + 30194 30128 30190 + 30195 30190 30128 + 30190 30195 30181 + 30196 30181 30195 + 30181 30196 30174 + 30174 30196 30197 + 30197 30170 30174 + 30170 30197 30171 + 30198 30195 30128 + 30199 30195 30198 + 30195 30199 30196 + 30197 30196 30199 + 30199 30133 30197 + 30133 30138 30197 + 30197 30138 30137 + 30171 30197 30137 + 30127 30198 30128 + 30199 30198 30127 + 30127 30133 30199 + 30200 30201 30202 + 30201 30200 30203 + 30201 30203 30204 + 30204 30205 30201 + 30205 30206 30201 + 30206 30207 30201 + 30201 30207 30208 + 30208 30209 30201 + 30201 30209 30202 + 30202 30210 30200 + 30210 30211 30200 + 30212 30200 30211 + 30200 30212 30203 + 30210 30202 30213 + 30213 30214 30210 + 30210 30214 30215 + 30215 30211 30210 + 30216 30211 30215 + 30211 30216 30212 + 30216 30217 30212 + 30203 30212 30217 + 30213 30202 30209 + 30209 30218 30213 + 30219 30213 30218 + 30214 30213 30219 + 30219 30220 30214 + 30214 30220 30221 + 30221 30215 30214 + 30222 30215 30221 + 30215 30222 30216 + 30223 30218 30209 + 30218 30223 30224 + 30224 30225 30218 + 30218 30225 30219 + 30226 30219 30225 + 30220 30219 30226 + 30209 30208 30223 + 30223 30208 30227 + 30227 30228 30223 + 30224 30223 30228 + 30228 30229 30224 + 30230 30224 30229 + 30225 30224 30230 + 30230 30231 30225 + 30225 30231 30226 + 30227 30208 30207 + 30227 30207 30206 + 30232 30227 30206 + 30227 30232 30233 + 30233 30228 30227 + 30228 30233 30234 + 30234 30229 30228 + 30229 30234 30235 + 30235 30236 30229 + 30229 30236 30230 + 30237 30232 30206 + 30233 30232 30237 + 30237 30238 30233 + 30234 30233 30238 + 30238 30239 30234 + 30235 30234 30239 + 30239 30240 30235 + 30241 30235 30240 + 30236 30235 30241 + 30237 30206 30205 + 30242 30237 30205 + 30237 30242 30243 + 30243 30238 30237 + 30238 30243 30244 + 30244 30239 30238 + 30239 30244 30245 + 30245 30240 30239 + 30246 30242 30205 + 30243 30242 30246 + 30246 30247 30243 + 30244 30243 30247 + 30247 30248 30244 + 30245 30244 30248 + 30248 30249 30245 + 30250 30245 30249 + 30240 30245 30250 + 30251 30246 30205 + 30246 30251 30252 + 30252 30247 30246 + 30247 30252 30253 + 30253 30248 30247 + 30248 30253 30254 + 30254 30249 30248 + 30205 30204 30251 + 30255 30251 30204 + 30252 30251 30255 + 30255 30256 30252 + 30253 30252 30256 + 30256 30257 30253 + 30254 30253 30257 + 30258 30255 30204 + 30255 30258 30259 + 30259 30256 30255 + 30256 30259 30260 + 30260 30257 30256 + 30257 30260 30261 + 30261 30262 30257 + 30257 30262 30254 + 30204 30263 30258 + 30264 30258 30263 + 30259 30258 30264 + 30264 30265 30259 + 30260 30259 30265 + 30265 30266 30260 + 30261 30260 30266 + 30267 30263 30204 + 30263 30267 30268 + 30268 30264 30263 + 30264 30268 30269 + 30269 30265 30264 + 30265 30269 30270 + 30270 30266 30265 + 30271 30267 30204 + 30267 30271 30272 + 30272 30273 30267 + 30273 30268 30267 + 30269 30268 30273 + 30273 30274 30269 + 30270 30269 30274 + 30275 30271 30204 + 30271 30275 30276 + 30276 30277 30271 + 30277 30272 30271 + 30278 30272 30277 + 30273 30272 30278 + 30278 30274 30273 + 30203 30275 30204 + 30275 30203 30279 + 30279 30280 30275 + 30280 30276 30275 + 30281 30276 30280 + 30277 30276 30281 + 30281 30282 30277 + 30277 30282 30278 + 30283 30279 30203 + 30284 30279 30283 + 30280 30279 30284 + 30284 30285 30280 + 30280 30285 30281 + 30286 30281 30285 + 30282 30281 30286 + 30286 30287 30282 + 30278 30282 30287 + 30217 30283 30203 + 30283 30217 30288 + 30288 30289 30283 + 30283 30289 30284 + 30290 30284 30289 + 30285 30284 30290 + 30290 30291 30285 + 30285 30291 30286 + 30292 30286 30291 + 30287 30286 30292 + 30288 30217 30216 + 30216 30222 30288 + 30293 30288 30222 + 30289 30288 30293 + 30293 30294 30289 + 30289 30294 30290 + 30295 30290 30294 + 30291 30290 30295 + 30295 30296 30291 + 30291 30296 30292 + 30222 30297 30293 + 30298 30293 30297 + 30294 30293 30298 + 30298 30299 30294 + 30294 30299 30295 + 30300 30295 30299 + 30296 30295 30300 + 30221 30297 30222 + 30297 30221 30301 + 30301 30302 30297 + 30297 30302 30298 + 30303 30298 30302 + 30299 30298 30303 + 30303 30304 30299 + 30299 30304 30300 + 30301 30221 30220 + 30220 30305 30301 + 30306 30301 30305 + 30302 30301 30306 + 30306 30307 30302 + 30302 30307 30303 + 30308 30303 30307 + 30304 30303 30308 + 30226 30305 30220 + 30305 30226 30309 + 30309 30310 30305 + 30305 30310 30306 + 30311 30306 30310 + 30307 30306 30311 + 30311 30312 30307 + 30307 30312 30308 + 30309 30226 30231 + 30231 30313 30309 + 30314 30309 30313 + 30310 30309 30314 + 30314 30315 30310 + 30310 30315 30311 + 30316 30311 30315 + 30312 30311 30316 + 30316 30317 30312 + 30308 30312 30317 + 30318 30313 30231 + 30313 30318 30319 + 30319 30320 30313 + 30313 30320 30314 + 30231 30230 30318 + 30318 30230 30236 + 30236 30321 30318 + 30319 30318 30321 + 30321 30322 30319 + 30319 30322 30323 + 30323 30324 30319 + 30320 30319 30324 + 30324 30325 30320 + 30314 30320 30325 + 30241 30321 30236 + 30321 30241 30326 + 30326 30322 30321 + 30322 30326 30327 + 30327 30323 30322 + 30323 30327 30328 + 30328 30329 30323 + 30323 30329 30330 + 30330 30324 30323 + 30325 30324 30330 + 30326 30241 30331 + 30331 30332 30326 + 30326 30332 30327 + 30332 30333 30327 + 30328 30327 30333 + 30240 30331 30241 + 30250 30331 30240 + 30332 30331 30250 + 30334 30332 30250 + 30332 30334 30333 + 30334 30335 30333 + 30333 30335 30336 + 30333 30336 30328 + 30328 30336 30337 + 30337 30338 30328 + 30329 30328 30338 + 30334 30250 30339 + 30339 30340 30334 + 30335 30334 30340 + 30341 30335 30340 + 30336 30335 30341 + 30341 30342 30336 + 30336 30342 30337 + 30249 30339 30250 + 30343 30339 30249 + 30339 30343 30344 + 30344 30340 30339 + 30340 30344 30345 + 30345 30341 30340 + 30341 30345 30342 + 30342 30345 30346 + 30346 30337 30342 + 30249 30254 30343 + 30347 30343 30254 + 30344 30343 30347 + 30347 30348 30344 + 30345 30344 30348 + 30348 30349 30345 + 30349 30346 30345 + 30254 30262 30347 + 30350 30347 30262 + 30347 30350 30351 + 30351 30348 30347 + 30348 30351 30352 + 30352 30349 30348 + 30353 30349 30352 + 30349 30353 30346 + 30262 30261 30350 + 30350 30261 30354 + 30354 30355 30350 + 30351 30350 30355 + 30355 30356 30351 + 30352 30351 30356 + 30356 30357 30352 + 30358 30352 30357 + 30352 30358 30353 + 30266 30354 30261 + 30359 30354 30266 + 30354 30359 30360 + 30360 30355 30354 + 30355 30360 30361 + 30361 30356 30355 + 30356 30361 30362 + 30362 30357 30356 + 30363 30357 30362 + 30357 30363 30358 + 30266 30270 30359 + 30359 30270 30364 + 30364 30365 30359 + 30360 30359 30365 + 30365 30366 30360 + 30361 30360 30366 + 30366 30367 30361 + 30361 30367 30368 + 30368 30362 30361 + 30274 30364 30270 + 30369 30364 30274 + 30364 30369 30370 + 30370 30365 30364 + 30365 30370 30371 + 30371 30366 30365 + 30366 30371 30372 + 30372 30367 30366 + 30367 30372 30373 + 30373 30368 30367 + 30274 30278 30369 + 30287 30369 30278 + 30370 30369 30287 + 30287 30374 30370 + 30371 30370 30374 + 30374 30375 30371 + 30372 30371 30375 + 30375 30376 30372 + 30372 30376 30377 + 30377 30373 30372 + 30292 30374 30287 + 30374 30292 30378 + 30378 30375 30374 + 30375 30378 30379 + 30379 30376 30375 + 30376 30379 30380 + 30380 30377 30376 + 30378 30292 30296 + 30296 30381 30378 + 30379 30378 30381 + 30381 30382 30379 + 30379 30382 30383 + 30383 30380 30379 + 30384 30380 30383 + 30377 30380 30384 + 30300 30381 30296 + 30381 30300 30385 + 30385 30382 30381 + 30382 30385 30386 + 30386 30383 30382 + 30383 30386 30387 + 30387 30388 30383 + 30383 30388 30384 + 30385 30300 30304 + 30304 30389 30385 + 30385 30389 30390 + 30390 30386 30385 + 30387 30386 30390 + 30390 30391 30387 + 30387 30391 30392 + 30392 30393 30387 + 30388 30387 30393 + 30308 30389 30304 + 30389 30308 30394 + 30394 30390 30389 + 30391 30390 30394 + 30394 30395 30391 + 30391 30395 30396 + 30396 30392 30391 + 30317 30394 30308 + 30395 30394 30317 + 30317 30397 30395 + 30396 30395 30397 + 30397 30398 30396 + 30399 30396 30398 + 30392 30396 30399 + 30399 30400 30392 + 30392 30400 30401 + 30401 30393 30392 + 30397 30317 30316 + 30316 30402 30397 + 30397 30402 30403 + 30403 30398 30397 + 30404 30398 30403 + 30398 30404 30399 + 30399 30404 30405 + 30405 30406 30399 + 30400 30399 30406 + 30402 30316 30407 + 30407 30408 30402 + 30403 30402 30408 + 30315 30407 30316 + 30409 30407 30315 + 30408 30407 30409 + 30408 30409 30410 + 30410 30411 30408 + 30408 30411 30403 + 30315 30314 30409 + 30410 30409 30314 + 30325 30410 30314 + 30412 30410 30325 + 30411 30410 30412 + 30411 30412 30413 + 30413 30414 30411 + 30411 30414 30403 + 30414 30415 30403 + 30416 30403 30415 + 30403 30416 30404 + 30325 30417 30412 + 30412 30417 30418 + 30418 30413 30412 + 30419 30413 30418 + 30414 30413 30419 + 30419 30420 30414 + 30414 30420 30421 + 30421 30415 30414 + 30330 30417 30325 + 30417 30330 30422 + 30422 30418 30417 + 30423 30418 30422 + 30418 30423 30419 + 30419 30423 30424 + 30424 30425 30419 + 30425 30426 30419 + 30420 30419 30426 + 30427 30422 30330 + 30423 30422 30427 + 30427 30428 30423 + 30423 30428 30424 + 30429 30424 30428 + 30424 30429 30430 + 30424 30430 30431 + 30431 30425 30424 + 30330 30329 30427 + 30338 30427 30329 + 30428 30427 30338 + 30338 30432 30428 + 30428 30432 30429 + 30433 30429 30432 + 30429 30433 30434 + 30430 30429 30434 + 30430 30434 30435 + 30435 30436 30430 + 30436 30431 30430 + 30432 30338 30337 + 30337 30437 30432 + 30432 30437 30433 + 30437 30438 30433 + 30438 30439 30433 + 30440 30433 30439 + 30433 30440 30434 + 30434 30440 30441 + 30441 30435 30434 + 30337 30346 30437 + 30346 30442 30437 + 30437 30442 30443 + 30443 30438 30437 + 30438 30443 30444 + 30438 30444 30445 + 30445 30439 30438 + 30446 30439 30445 + 30439 30446 30440 + 30353 30442 30346 + 30353 30447 30442 + 30447 30443 30442 + 30444 30443 30447 + 30447 30448 30444 + 30444 30448 30449 + 30445 30444 30449 + 30445 30449 30450 + 30451 30445 30450 + 30445 30451 30446 + 30452 30447 30353 + 30448 30447 30452 + 30448 30452 30453 + 30453 30449 30448 + 30450 30449 30453 + 30453 30454 30450 + 30450 30454 30455 + 30455 30456 30450 + 30451 30450 30456 + 30353 30358 30452 + 30452 30358 30363 + 30363 30453 30452 + 30454 30453 30363 + 30363 30457 30454 + 30454 30457 30458 + 30455 30454 30458 + 30458 30459 30455 + 30460 30455 30459 + 30456 30455 30460 + 30362 30457 30363 + 30457 30362 30368 + 30368 30458 30457 + 30458 30368 30373 + 30373 30461 30458 + 30458 30461 30462 + 30462 30459 30458 + 30459 30462 30463 + 30463 30464 30459 + 30459 30464 30460 + 30461 30373 30377 + 30377 30465 30461 + 30462 30461 30465 + 30465 30466 30462 + 30463 30462 30466 + 30384 30465 30377 + 30465 30384 30467 + 30467 30466 30465 + 30468 30466 30467 + 30466 30468 30463 + 30463 30468 30469 + 30469 30470 30463 + 30470 30471 30463 + 30464 30463 30471 + 30472 30467 30384 + 30473 30467 30472 + 30467 30473 30468 + 30468 30473 30474 + 30474 30469 30468 + 30384 30388 30472 + 30393 30472 30388 + 30475 30472 30393 + 30472 30475 30473 + 30474 30473 30475 + 30475 30476 30474 + 30477 30474 30476 + 30469 30474 30477 + 30477 30478 30469 + 30469 30478 30479 + 30479 30470 30469 + 30393 30401 30475 + 30475 30401 30480 + 30480 30476 30475 + 30476 30480 30481 + 30481 30482 30476 + 30476 30482 30477 + 30477 30482 30483 + 30483 30484 30477 + 30478 30477 30484 + 30480 30401 30400 + 30400 30485 30480 + 30481 30480 30485 + 30485 30486 30481 + 30481 30486 30487 + 30482 30481 30487 + 30487 30483 30482 + 30488 30483 30487 + 30483 30488 30489 + 30489 30484 30483 + 30406 30485 30400 + 30485 30406 30486 + 30490 30486 30406 + 30486 30490 30487 + 30490 30491 30487 + 30488 30487 30491 + 30491 30492 30488 + 30488 30492 30421 + 30489 30488 30421 + 30405 30490 30406 + 30490 30405 30493 + 30491 30490 30493 + 30494 30491 30493 + 30491 30494 30495 + 30495 30492 30491 + 30492 30495 30496 + 30496 30421 30492 + 30421 30496 30415 + 30415 30496 30416 + 30493 30405 30404 + 30404 30497 30493 + 30494 30493 30497 + 30495 30494 30497 + 30497 30416 30495 + 30496 30495 30416 + 30416 30497 30404 + 30421 30420 30489 + 30426 30489 30420 + 30489 30426 30498 + 30498 30484 30489 + 30484 30498 30478 + 30479 30478 30498 + 30498 30499 30479 + 30436 30479 30499 + 30479 30436 30470 + 30498 30426 30425 + 30425 30499 30498 + 30425 30431 30499 + 30499 30431 30436 + 30470 30436 30435 + 30435 30471 30470 + 30500 30471 30435 + 30471 30500 30464 + 30460 30464 30500 + 30500 30501 30460 + 30456 30460 30501 + 30435 30441 30500 + 30500 30441 30502 + 30502 30501 30500 + 30502 30503 30501 + 30501 30503 30456 + 30456 30503 30451 + 30451 30503 30502 + 30446 30451 30502 + 30440 30446 30502 + 30502 30441 30440 + 30504 30505 30506 + 30505 30504 30507 + 30507 30508 30505 + 30505 30508 30509 + 30509 30510 30505 + 30505 30510 30511 + 30511 30506 30505 + 30506 30512 30504 + 30513 30504 30512 + 30507 30504 30513 + 30513 30514 30507 + 30515 30507 30514 + 30508 30507 30515 + 30516 30512 30506 + 30512 30516 30517 + 30517 30518 30512 + 30512 30518 30519 + 30519 30513 30512 + 30520 30513 30519 + 30514 30513 30520 + 30516 30506 30511 + 30511 30521 30516 + 30516 30521 30522 + 30522 30523 30516 + 30523 30517 30516 + 30524 30517 30523 + 30518 30517 30524 + 30525 30521 30511 + 30521 30525 30526 + 30526 30522 30521 + 30522 30526 30527 + 30522 30527 30528 + 30528 30523 30522 + 30528 30529 30523 + 30523 30529 30524 + 30511 30530 30525 + 30525 30530 30531 + 30531 30532 30525 + 30526 30525 30532 + 30532 30533 30526 + 30527 30526 30533 + 30530 30511 30510 + 30510 30534 30530 + 30530 30534 30535 + 30535 30536 30530 + 30536 30531 30530 + 30537 30531 30536 + 30537 30532 30531 + 30532 30537 30538 + 30538 30533 30532 + 30534 30510 30509 + 30509 30539 30534 + 30534 30539 30540 + 30540 30541 30534 + 30534 30541 30535 + 30539 30509 30542 + 30542 30543 30539 + 30539 30543 30544 + 30544 30540 30539 + 30545 30540 30544 + 30540 30545 30546 + 30546 30541 30540 + 30542 30509 30508 + 30508 30547 30542 + 30548 30542 30547 + 30543 30542 30548 + 30548 30549 30543 + 30543 30549 30550 + 30550 30544 30543 + 30551 30544 30550 + 30544 30551 30545 + 30515 30547 30508 + 30547 30515 30552 + 30552 30553 30547 + 30547 30553 30548 + 30554 30548 30553 + 30549 30548 30554 + 30554 30555 30549 + 30549 30555 30556 + 30556 30550 30549 + 30552 30515 30557 + 30557 30558 30552 + 30552 30558 30559 + 30559 30560 30552 + 30553 30552 30560 + 30560 30561 30553 + 30553 30561 30554 + 30557 30515 30514 + 30514 30562 30557 + 30563 30557 30562 + 30557 30563 30564 + 30564 30558 30557 + 30558 30564 30565 + 30565 30559 30558 + 30566 30562 30514 + 30562 30566 30567 + 30562 30567 30563 + 30563 30567 30568 + 30568 30569 30563 + 30564 30563 30569 + 30569 30570 30564 + 30565 30564 30570 + 30514 30520 30566 + 30566 30520 30571 + 30571 30572 30566 + 30567 30566 30572 + 30572 30573 30567 + 30567 30573 30568 + 30520 30574 30571 + 30574 30575 30571 + 30576 30571 30575 + 30577 30571 30576 + 30571 30577 30578 + 30578 30572 30571 + 30573 30572 30578 + 30519 30574 30520 + 30574 30519 30579 + 30579 30580 30574 + 30574 30580 30581 + 30581 30575 30574 + 30582 30575 30581 + 30575 30582 30576 + 30583 30576 30582 + 30577 30576 30583 + 30579 30519 30518 + 30518 30584 30579 + 30579 30584 30585 + 30585 30586 30579 + 30580 30579 30586 + 30586 30587 30580 + 30581 30580 30587 + 30524 30584 30518 + 30584 30524 30588 + 30588 30585 30584 + 30585 30588 30589 + 30589 30590 30585 + 30585 30590 30591 + 30591 30586 30585 + 30587 30586 30591 + 30592 30588 30524 + 30589 30588 30592 + 30592 30593 30589 + 30589 30593 30594 + 30594 30595 30589 + 30590 30589 30595 + 30595 30596 30590 + 30591 30590 30596 + 30524 30529 30592 + 30597 30592 30529 + 30592 30597 30598 + 30598 30593 30592 + 30593 30598 30599 + 30599 30594 30593 + 30600 30594 30599 + 30594 30600 30601 + 30601 30595 30594 + 30596 30595 30601 + 30529 30528 30597 + 30602 30597 30528 + 30598 30597 30602 + 30602 30603 30598 + 30598 30603 30604 + 30604 30605 30598 + 30605 30599 30598 + 30600 30599 30605 + 30528 30527 30602 + 30527 30606 30602 + 30606 30607 30602 + 30608 30602 30607 + 30602 30608 30603 + 30608 30609 30603 + 30603 30609 30610 + 30610 30604 30603 + 30533 30606 30527 + 30538 30606 30533 + 30607 30606 30538 + 30611 30607 30538 + 30607 30611 30612 + 30607 30612 30608 + 30608 30612 30613 + 30609 30608 30613 + 30613 30614 30609 + 30609 30614 30615 + 30615 30610 30609 + 30611 30538 30616 + 30616 30617 30611 + 30612 30611 30617 + 30617 30618 30612 + 30612 30618 30613 + 30619 30613 30618 + 30614 30613 30619 + 30538 30537 30616 + 30536 30616 30537 + 30536 30620 30616 + 30616 30620 30621 + 30621 30617 30616 + 30618 30617 30621 + 30618 30621 30619 + 30619 30621 30622 + 30622 30623 30619 + 30624 30619 30623 + 30619 30624 30614 + 30620 30536 30535 + 30535 30622 30620 + 30621 30620 30622 + 30622 30535 30625 + 30625 30626 30622 + 30622 30626 30627 + 30627 30623 30622 + 30628 30623 30627 + 30623 30628 30624 + 30625 30535 30541 + 30541 30546 30625 + 30629 30625 30546 + 30626 30625 30629 + 30629 30630 30626 + 30626 30630 30631 + 30631 30627 30626 + 30632 30627 30631 + 30627 30632 30628 + 30546 30633 30629 + 30634 30629 30633 + 30630 30629 30634 + 30634 30635 30630 + 30630 30635 30636 + 30636 30631 30630 + 30637 30631 30636 + 30631 30637 30632 + 30638 30633 30546 + 30639 30633 30638 + 30633 30639 30634 + 30640 30634 30639 + 30635 30634 30640 + 30640 30641 30635 + 30635 30641 30642 + 30642 30636 30635 + 30546 30545 30638 + 30643 30638 30545 + 30644 30638 30643 + 30638 30644 30639 + 30639 30644 30645 + 30645 30646 30639 + 30639 30646 30640 + 30647 30640 30646 + 30640 30647 30641 + 30545 30551 30643 + 30648 30643 30551 + 30649 30643 30648 + 30643 30649 30644 + 30644 30649 30650 + 30650 30645 30644 + 30651 30645 30650 + 30645 30651 30652 + 30652 30646 30645 + 30646 30652 30647 + 30551 30653 30648 + 30654 30648 30653 + 30655 30648 30654 + 30648 30655 30649 + 30649 30655 30656 + 30656 30650 30649 + 30657 30650 30656 + 30650 30657 30651 + 30550 30653 30551 + 30653 30550 30556 + 30556 30658 30653 + 30653 30658 30654 + 30659 30654 30658 + 30660 30654 30659 + 30654 30660 30655 + 30655 30660 30661 + 30661 30656 30655 + 30662 30656 30661 + 30656 30662 30657 + 30658 30556 30663 + 30663 30664 30658 + 30658 30664 30659 + 30665 30659 30664 + 30666 30659 30665 + 30659 30666 30660 + 30660 30666 30667 + 30667 30661 30660 + 30663 30556 30555 + 30555 30668 30663 + 30663 30668 30669 + 30664 30663 30669 + 30669 30665 30664 + 30665 30669 30670 + 30671 30665 30670 + 30665 30671 30666 + 30671 30667 30666 + 30672 30668 30555 + 30668 30672 30670 + 30670 30669 30668 + 30555 30554 30672 + 30672 30554 30561 + 30561 30673 30672 + 30670 30672 30673 + 30674 30670 30673 + 30670 30674 30671 + 30675 30673 30561 + 30673 30675 30674 + 30674 30675 30676 + 30677 30674 30676 + 30674 30677 30671 + 30561 30560 30675 + 30675 30560 30559 + 30559 30676 30675 + 30678 30676 30559 + 30676 30678 30677 + 30677 30678 30679 + 30680 30677 30679 + 30677 30680 30671 + 30559 30565 30678 + 30678 30565 30681 + 30681 30679 30678 + 30682 30679 30681 + 30679 30682 30680 + 30680 30682 30683 + 30684 30680 30683 + 30680 30684 30671 + 30570 30681 30565 + 30685 30681 30570 + 30681 30685 30682 + 30682 30685 30686 + 30686 30683 30682 + 30687 30683 30686 + 30683 30687 30684 + 30684 30687 30688 + 30689 30684 30688 + 30684 30689 30671 + 30570 30690 30685 + 30685 30690 30691 + 30691 30686 30685 + 30692 30686 30691 + 30686 30692 30687 + 30687 30692 30693 + 30693 30688 30687 + 30694 30688 30693 + 30688 30694 30689 + 30690 30570 30569 + 30569 30695 30690 + 30690 30695 30696 + 30696 30691 30690 + 30691 30696 30697 + 30697 30698 30691 + 30691 30698 30692 + 30693 30692 30698 + 30695 30569 30568 + 30568 30699 30695 + 30695 30699 30700 + 30700 30696 30695 + 30697 30696 30700 + 30700 30701 30697 + 30697 30701 30702 + 30702 30703 30697 + 30698 30697 30703 + 30699 30568 30704 + 30704 30705 30699 + 30699 30705 30706 + 30706 30700 30699 + 30701 30700 30706 + 30706 30707 30701 + 30701 30707 30708 + 30708 30702 30701 + 30704 30568 30573 + 30573 30578 30704 + 30709 30704 30578 + 30705 30704 30709 + 30709 30710 30705 + 30706 30705 30710 + 30710 30711 30706 + 30707 30706 30711 + 30711 30712 30707 + 30708 30707 30712 + 30578 30577 30709 + 30577 30713 30709 + 30714 30709 30713 + 30709 30714 30715 + 30715 30710 30709 + 30710 30715 30716 + 30716 30711 30710 + 30711 30716 30717 + 30717 30712 30711 + 30583 30713 30577 + 30718 30713 30583 + 30713 30718 30714 + 30714 30718 30719 + 30719 30720 30714 + 30715 30714 30720 + 30720 30721 30715 + 30716 30715 30721 + 30721 30722 30716 + 30717 30716 30722 + 30718 30583 30723 + 30723 30724 30718 + 30718 30724 30719 + 30725 30719 30724 + 30725 30726 30719 + 30719 30726 30727 + 30727 30720 30719 + 30721 30720 30727 + 30582 30723 30583 + 30582 30728 30723 + 30728 30729 30723 + 30723 30729 30724 + 30729 30730 30724 + 30724 30730 30725 + 30725 30730 30731 + 30731 30732 30725 + 30726 30725 30732 + 30581 30728 30582 + 30728 30581 30733 + 30733 30734 30728 + 30734 30729 30728 + 30730 30729 30734 + 30734 30731 30730 + 30735 30731 30734 + 30731 30735 30736 + 30736 30732 30731 + 30587 30733 30581 + 30735 30733 30587 + 30734 30733 30735 + 30587 30737 30735 + 30735 30737 30738 + 30738 30736 30735 + 30736 30738 30739 + 30740 30736 30739 + 30732 30736 30740 + 30740 30741 30732 + 30732 30741 30726 + 30591 30737 30587 + 30737 30591 30742 + 30742 30738 30737 + 30739 30738 30742 + 30743 30739 30742 + 30739 30743 30744 + 30744 30745 30739 + 30740 30739 30745 + 30745 30746 30740 + 30741 30740 30746 + 30596 30742 30591 + 30742 30596 30747 + 30743 30742 30747 + 30743 30747 30748 + 30748 30744 30743 + 30749 30744 30748 + 30745 30744 30749 + 30749 30750 30745 + 30745 30750 30751 + 30751 30746 30745 + 30601 30747 30596 + 30747 30601 30752 + 30752 30748 30747 + 30748 30752 30753 + 30753 30754 30748 + 30748 30754 30749 + 30755 30749 30754 + 30750 30749 30755 + 30756 30752 30601 + 30753 30752 30756 + 30756 30757 30753 + 30758 30753 30757 + 30754 30753 30758 + 30758 30759 30754 + 30754 30759 30755 + 30601 30600 30756 + 30600 30760 30756 + 30761 30756 30760 + 30756 30761 30762 + 30762 30757 30756 + 30757 30762 30763 + 30763 30758 30757 + 30758 30763 30642 + 30759 30758 30642 + 30605 30760 30600 + 30764 30760 30605 + 30760 30764 30761 + 30765 30761 30764 + 30762 30761 30765 + 30765 30766 30762 + 30763 30762 30766 + 30766 30767 30763 + 30642 30763 30767 + 30767 30636 30642 + 30636 30767 30637 + 30764 30605 30604 + 30604 30768 30764 + 30764 30768 30765 + 30768 30769 30765 + 30770 30765 30769 + 30765 30770 30771 + 30771 30766 30765 + 30766 30771 30637 + 30637 30767 30766 + 30768 30604 30610 + 30768 30610 30615 + 30615 30769 30768 + 30615 30772 30769 + 30769 30772 30770 + 30770 30772 30624 + 30624 30628 30770 + 30771 30770 30628 + 30628 30632 30771 + 30637 30771 30632 + 30772 30615 30614 + 30614 30624 30772 + 30642 30773 30759 + 30773 30642 30774 + 30774 30775 30773 + 30776 30773 30775 + 30759 30773 30776 + 30776 30755 30759 + 30641 30774 30642 + 30777 30774 30641 + 30774 30777 30778 + 30778 30775 30774 + 30775 30778 30712 + 30712 30717 30775 + 30775 30717 30776 + 30722 30776 30717 + 30755 30776 30722 + 30641 30647 30777 + 30777 30647 30652 + 30652 30779 30777 + 30778 30777 30779 + 30779 30708 30778 + 30712 30778 30708 + 30780 30779 30652 + 30708 30779 30780 + 30780 30702 30708 + 30702 30780 30781 + 30781 30703 30702 + 30652 30651 30780 + 30781 30780 30651 + 30651 30657 30781 + 30782 30781 30657 + 30703 30781 30782 + 30782 30783 30703 + 30703 30783 30698 + 30698 30783 30693 + 30784 30693 30783 + 30693 30784 30694 + 30657 30662 30782 + 30784 30782 30662 + 30783 30782 30784 + 30662 30785 30784 + 30694 30784 30785 + 30785 30786 30694 + 30689 30694 30786 + 30671 30689 30786 + 30786 30667 30671 + 30661 30785 30662 + 30785 30661 30667 + 30667 30786 30785 + 30722 30787 30755 + 30787 30722 30721 + 30721 30788 30787 + 30750 30787 30788 + 30755 30787 30750 + 30727 30788 30721 + 30788 30727 30789 + 30789 30751 30788 + 30788 30751 30750 + 30727 30726 30789 + 30726 30741 30789 + 30746 30789 30741 + 30751 30789 30746 + 30790 30791 30792 + 30791 30790 30793 + 30791 30793 30794 + 30794 30795 30791 + 30791 30795 30796 + 30796 30792 30791 + 30792 30797 30790 + 30798 30790 30797 + 30793 30790 30798 + 30798 30799 30793 + 30794 30793 30799 + 30797 30792 30800 + 30800 30801 30797 + 30797 30801 30802 + 30802 30803 30797 + 30797 30803 30804 + 30804 30798 30797 + 30800 30792 30796 + 30796 30805 30800 + 30806 30800 30805 + 30801 30800 30806 + 30806 30807 30801 + 30801 30807 30808 + 30808 30809 30801 + 30809 30802 30801 + 30810 30805 30796 + 30805 30810 30811 + 30811 30812 30805 + 30805 30812 30806 + 30813 30806 30812 + 30807 30806 30813 + 30796 30814 30810 + 30810 30814 30815 + 30815 30816 30810 + 30811 30810 30816 + 30816 30817 30811 + 30818 30811 30817 + 30812 30811 30818 + 30814 30796 30795 + 30795 30819 30814 + 30815 30814 30819 + 30819 30795 30794 + 30794 30820 30819 + 30819 30820 30821 + 30821 30822 30819 + 30819 30822 30815 + 30820 30794 30823 + 30823 30824 30820 + 30820 30824 30825 + 30825 30821 30820 + 30826 30821 30825 + 30822 30821 30826 + 30827 30823 30794 + 30828 30823 30827 + 30828 30824 30823 + 30824 30828 30829 + 30829 30825 30824 + 30825 30829 30830 + 30825 30830 30826 + 30799 30827 30794 + 30831 30827 30799 + 30827 30831 30832 + 30827 30832 30828 + 30828 30832 30833 + 30829 30828 30833 + 30834 30829 30833 + 30830 30829 30834 + 30799 30835 30831 + 30831 30835 30836 + 30836 30837 30831 + 30832 30831 30837 + 30837 30833 30832 + 30838 30835 30799 + 30835 30838 30839 + 30839 30836 30835 + 30836 30839 30840 + 30840 30841 30836 + 30836 30841 30842 + 30842 30837 30836 + 30833 30837 30842 + 30799 30798 30838 + 30838 30798 30804 + 30804 30843 30838 + 30838 30843 30844 + 30844 30839 30838 + 30840 30839 30844 + 30844 30845 30840 + 30840 30845 30846 + 30846 30847 30840 + 30841 30840 30847 + 30848 30843 30804 + 30843 30848 30849 + 30849 30844 30843 + 30844 30849 30850 + 30850 30845 30844 + 30845 30850 30851 + 30851 30846 30845 + 30804 30852 30848 + 30848 30852 30853 + 30853 30854 30848 + 30848 30854 30855 + 30855 30849 30848 + 30850 30849 30855 + 30852 30804 30803 + 30803 30856 30852 + 30853 30852 30856 + 30856 30857 30853 + 30857 30858 30853 + 30858 30859 30853 + 30860 30853 30859 + 30853 30860 30854 + 30856 30803 30802 + 30856 30802 30809 + 30809 30857 30856 + 30861 30857 30809 + 30857 30861 30862 + 30862 30858 30857 + 30863 30858 30862 + 30858 30863 30864 + 30864 30859 30858 + 30865 30859 30864 + 30859 30865 30860 + 30861 30809 30808 + 30808 30866 30861 + 30862 30861 30866 + 30866 30867 30862 + 30867 30868 30862 + 30863 30862 30868 + 30868 30869 30863 + 30863 30869 30870 + 30870 30864 30863 + 30865 30864 30870 + 30866 30808 30871 + 30871 30872 30866 + 30866 30872 30873 + 30873 30867 30866 + 30874 30867 30873 + 30867 30874 30875 + 30875 30868 30867 + 30871 30808 30807 + 30807 30876 30871 + 30871 30876 30877 + 30877 30878 30871 + 30872 30871 30878 + 30878 30879 30872 + 30872 30879 30880 + 30880 30873 30872 + 30813 30876 30807 + 30876 30813 30881 + 30881 30877 30876 + 30877 30881 30882 + 30882 30883 30877 + 30877 30883 30884 + 30884 30878 30877 + 30879 30878 30884 + 30881 30813 30885 + 30885 30886 30881 + 30882 30881 30886 + 30886 30887 30882 + 30882 30887 30888 + 30883 30882 30888 + 30888 30889 30883 + 30884 30883 30889 + 30812 30885 30813 + 30818 30885 30812 + 30885 30818 30890 + 30890 30886 30885 + 30886 30890 30891 + 30891 30887 30886 + 30887 30891 30892 + 30892 30888 30887 + 30889 30888 30892 + 30893 30889 30892 + 30889 30893 30894 + 30894 30884 30889 + 30884 30894 30879 + 30890 30818 30895 + 30895 30896 30890 + 30891 30890 30896 + 30896 30897 30891 + 30892 30891 30897 + 30898 30892 30897 + 30892 30898 30893 + 30817 30895 30818 + 30899 30895 30817 + 30895 30899 30900 + 30900 30896 30895 + 30896 30900 30901 + 30901 30897 30896 + 30897 30901 30898 + 30901 30902 30898 + 30903 30898 30902 + 30898 30903 30893 + 30817 30904 30899 + 30899 30904 30905 + 30905 30906 30899 + 30900 30899 30906 + 30906 30907 30900 + 30901 30900 30907 + 30907 30902 30901 + 30908 30902 30907 + 30902 30908 30903 + 30904 30817 30816 + 30816 30909 30904 + 30904 30909 30910 + 30910 30905 30904 + 30911 30905 30910 + 30905 30911 30912 + 30912 30906 30905 + 30906 30912 30913 + 30913 30907 30906 + 30907 30913 30908 + 30909 30816 30815 + 30815 30914 30909 + 30909 30914 30915 + 30915 30910 30909 + 30916 30910 30915 + 30910 30916 30911 + 30911 30916 30917 + 30917 30918 30911 + 30912 30911 30918 + 30914 30815 30919 + 30919 30920 30914 + 30915 30914 30920 + 30920 30921 30915 + 30922 30915 30921 + 30915 30922 30916 + 30916 30922 30923 + 30923 30917 30916 + 30924 30919 30815 + 30925 30919 30924 + 30919 30925 30926 + 30926 30920 30919 + 30920 30926 30927 + 30927 30921 30920 + 30822 30924 30815 + 30928 30924 30822 + 30928 30929 30924 + 30924 30929 30925 + 30930 30925 30929 + 30926 30925 30930 + 30930 30931 30926 + 30927 30926 30931 + 30822 30826 30928 + 30932 30928 30826 + 30929 30928 30932 + 30932 30933 30929 + 30929 30933 30930 + 30933 30934 30930 + 30935 30930 30934 + 30930 30935 30936 + 30936 30931 30930 + 30826 30830 30932 + 30830 30937 30932 + 30932 30937 30938 + 30939 30932 30938 + 30933 30932 30939 + 30933 30939 30940 + 30940 30934 30933 + 30941 30934 30940 + 30934 30941 30935 + 30834 30937 30830 + 30938 30937 30834 + 30938 30834 30942 + 30942 30943 30938 + 30939 30938 30943 + 30940 30939 30943 + 30940 30943 30944 + 30945 30940 30944 + 30940 30945 30941 + 30833 30942 30834 + 30946 30942 30833 + 30943 30942 30946 + 30946 30944 30943 + 30944 30946 30947 + 30947 30948 30944 + 30948 30949 30944 + 30949 30945 30944 + 30941 30945 30949 + 30949 30950 30941 + 30935 30941 30950 + 30833 30951 30946 + 30946 30951 30952 + 30952 30953 30946 + 30953 30947 30946 + 30954 30947 30953 + 30948 30947 30954 + 30948 30954 30955 + 30955 30949 30948 + 30955 30950 30949 + 30842 30951 30833 + 30951 30842 30956 + 30956 30952 30951 + 30952 30956 30957 + 30952 30957 30958 + 30958 30953 30952 + 30953 30958 30959 + 30953 30959 30954 + 30954 30959 30960 + 30955 30954 30960 + 30961 30956 30842 + 30957 30956 30961 + 30961 30962 30957 + 30957 30962 30963 + 30958 30957 30963 + 30963 30964 30958 + 30959 30958 30964 + 30964 30960 30959 + 30842 30841 30961 + 30847 30961 30841 + 30961 30847 30962 + 30847 30965 30962 + 30962 30965 30966 + 30966 30963 30962 + 30963 30966 30967 + 30967 30968 30963 + 30963 30968 30969 + 30969 30964 30963 + 30960 30964 30969 + 30965 30847 30846 + 30846 30970 30965 + 30965 30970 30971 + 30971 30966 30965 + 30967 30966 30971 + 30971 30972 30967 + 30973 30967 30972 + 30968 30967 30973 + 30973 30974 30968 + 30969 30968 30974 + 30846 30851 30970 + 30851 30975 30970 + 30970 30975 30971 + 30975 30976 30971 + 30971 30976 30977 + 30977 30972 30971 + 30972 30977 30978 + 30978 30979 30972 + 30972 30979 30973 + 30975 30851 30980 + 30980 30981 30975 + 30975 30981 30982 + 30982 30976 30975 + 30977 30976 30982 + 30982 30983 30977 + 30978 30977 30983 + 30980 30851 30850 + 30850 30984 30980 + 30985 30980 30984 + 30980 30985 30981 + 30985 30986 30981 + 30981 30986 30982 + 30986 30987 30982 + 30982 30987 30983 + 30855 30984 30850 + 30988 30984 30855 + 30984 30988 30985 + 30985 30988 30989 + 30989 30990 30985 + 30985 30990 30991 + 30986 30985 30991 + 30986 30991 30992 + 30987 30986 30992 + 30983 30987 30992 + 30855 30993 30988 + 30988 30993 30994 + 30994 30989 30988 + 30995 30989 30994 + 30989 30995 30996 + 30996 30990 30989 + 30996 30991 30990 + 30991 30996 30997 + 30997 30992 30991 + 30993 30855 30854 + 30854 30998 30993 + 30998 30994 30993 + 30999 30994 30998 + 30994 30999 30995 + 30995 30999 31000 + 31000 31001 30995 + 30996 30995 31001 + 30997 30996 31001 + 30860 30998 30854 + 30998 30860 30999 + 30999 30860 30865 + 30865 31000 30999 + 30870 31000 30865 + 31000 30870 31001 + 31001 30870 31002 + 31002 31003 31001 + 31001 31003 30997 + 31004 30997 31003 + 30997 31004 31005 + 31005 30992 30997 + 30992 31005 30983 + 30983 31005 30978 + 30869 31002 30870 + 31006 31002 30869 + 31002 31006 31007 + 31003 31002 31007 + 31003 31007 31004 + 31008 31004 31007 + 31005 31004 31008 + 31008 30978 31005 + 30978 31008 31009 + 31009 30979 30978 + 30869 31010 31006 + 31011 31006 31010 + 31007 31006 31011 + 31011 31012 31007 + 31007 31012 31008 + 31009 31008 31012 + 31012 31013 31009 + 31014 31009 31013 + 30979 31009 31014 + 31014 30973 30979 + 31010 30869 30868 + 30868 30875 31010 + 31010 30875 31015 + 31015 31016 31010 + 31010 31016 31011 + 31017 31011 31016 + 31012 31011 31017 + 31017 31013 31012 + 31013 31017 31018 + 31018 31019 31013 + 31013 31019 31014 + 31020 31015 30875 + 31021 31015 31020 + 31015 31021 31022 + 31022 31016 31015 + 31016 31022 31017 + 31018 31017 31022 + 31022 31023 31018 + 31024 31018 31023 + 31019 31018 31024 + 30875 30874 31020 + 31025 31020 30874 + 31020 31025 31026 + 31026 31027 31020 + 31020 31027 31021 + 31021 31027 31028 + 31028 31029 31021 + 31022 31021 31029 + 31029 31023 31022 + 30874 31030 31025 + 31031 31025 31030 + 31026 31025 31031 + 31031 31032 31026 + 31033 31026 31032 + 31027 31026 31033 + 31033 31028 31027 + 30873 31030 30874 + 31030 30873 30880 + 30880 31034 31030 + 31030 31034 31031 + 31035 31031 31034 + 31032 31031 31035 + 31035 31036 31032 + 31032 31036 31037 + 31037 31038 31032 + 31032 31038 31033 + 31034 30880 31039 + 31039 31040 31034 + 31034 31040 31035 + 31035 31040 31041 + 31036 31035 31041 + 31041 31042 31036 + 31037 31036 31042 + 31039 30880 30879 + 30879 30894 31039 + 31039 30894 30893 + 31040 31039 30893 + 30893 31041 31040 + 31042 31041 30893 + 31043 31042 30893 + 31042 31043 31044 + 31044 31037 31042 + 31037 31044 31045 + 31045 31038 31037 + 31038 31045 31046 + 31046 31033 31038 + 31033 31046 31047 + 31047 31028 31033 + 30903 31043 30893 + 31043 30903 31048 + 31048 31049 31043 + 31049 31044 31043 + 31045 31044 31049 + 31049 31050 31045 + 31046 31045 31050 + 31050 31051 31046 + 31047 31046 31051 + 30908 31048 30903 + 31052 31048 30908 + 31049 31048 31052 + 31052 31050 31049 + 31050 31052 31053 + 31053 31051 31050 + 31051 31053 30918 + 30918 31054 31051 + 31051 31054 31047 + 31055 31047 31054 + 31028 31047 31055 + 31055 31029 31028 + 30908 30913 31052 + 31053 31052 30913 + 30913 30912 31053 + 30918 31053 30912 + 31054 30918 30917 + 30917 31056 31054 + 31054 31056 31055 + 31057 31055 31056 + 31029 31055 31057 + 31057 31023 31029 + 31023 31057 31024 + 31056 30917 30923 + 30923 31058 31056 + 31056 31058 31057 + 31057 31058 31059 + 31059 31024 31057 + 31060 31024 31059 + 31024 31060 31019 + 31019 31060 31061 + 31061 31014 31019 + 31058 30923 31062 + 31062 31059 31058 + 31063 31059 31062 + 31059 31063 31060 + 31060 31063 31064 + 31064 31065 31060 + 31065 31061 31060 + 31066 31061 31065 + 31014 31061 31066 + 31067 31062 30923 + 31063 31062 31067 + 31067 31064 31063 + 31064 31067 30921 + 30921 30927 31064 + 31064 30927 31068 + 31068 31065 31064 + 31069 31065 31068 + 31065 31069 31066 + 30923 30922 31067 + 30921 31067 30922 + 30931 31068 30927 + 31070 31068 30931 + 31068 31070 31069 + 31069 31070 31071 + 31071 31072 31069 + 31069 31072 31073 + 31073 31066 31069 + 30974 31066 31073 + 31066 30974 31014 + 30974 30973 31014 + 30931 30936 31070 + 30936 31071 31070 + 31074 31071 30936 + 31072 31071 31074 + 31074 31075 31072 + 31072 31075 30960 + 30960 31073 31072 + 30969 31073 30960 + 31073 30969 30974 + 30936 30935 31074 + 30950 31074 30935 + 31075 31074 30950 + 30950 30955 31075 + 30960 31075 30955 +} diff --git a/Chapter 17 Picking/Textures/WoodCrate01.dds b/Chapter 17 Picking/Textures/WoodCrate01.dds new file mode 100644 index 0000000..63abd5a Binary files /dev/null and b/Chapter 17 Picking/Textures/WoodCrate01.dds differ diff --git a/Chapter 17 Picking/Textures/bricks.dds b/Chapter 17 Picking/Textures/bricks.dds new file mode 100644 index 0000000..60fe972 Binary files /dev/null and b/Chapter 17 Picking/Textures/bricks.dds differ diff --git a/Chapter 17 Picking/Textures/grass.dds b/Chapter 17 Picking/Textures/grass.dds new file mode 100644 index 0000000..3088c1a Binary files /dev/null and b/Chapter 17 Picking/Textures/grass.dds differ diff --git a/Chapter 17 Picking/Textures/ice.dds b/Chapter 17 Picking/Textures/ice.dds new file mode 100644 index 0000000..7bb0f0a Binary files /dev/null and b/Chapter 17 Picking/Textures/ice.dds differ diff --git a/Chapter 17 Picking/Textures/stone.dds b/Chapter 17 Picking/Textures/stone.dds new file mode 100644 index 0000000..cc02ee3 Binary files /dev/null and b/Chapter 17 Picking/Textures/stone.dds differ diff --git a/Chapter 17 Picking/Textures/tile.dds b/Chapter 17 Picking/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 17 Picking/Textures/tile.dds differ diff --git a/Chapter 17 Picking/Textures/white1x1.dds b/Chapter 17 Picking/Textures/white1x1.dds new file mode 100644 index 0000000..54df118 Binary files /dev/null and b/Chapter 17 Picking/Textures/white1x1.dds differ diff --git a/Chapter 17 Picking/d3dUtil.h b/Chapter 17 Picking/d3dUtil.h new file mode 100644 index 0000000..268c8a5 --- /dev/null +++ b/Chapter 17 Picking/d3dUtil.h @@ -0,0 +1,177 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; +// �Ƿ�����׶���޳� +static bool g_openFrustumCull = true; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; + UINT ObjPad0; + UINT ObjPad1; + UINT ObjPad2; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; + UINT MaterialPad0; // ռλ����16�ֽڶ��� + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z, float nx, float ny, float nz, float u, float v) : + Pos(x, y, z), + Normal(nx, ny, nz), + TexC(u, v) {} + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; + Math::Vector3 vMin; + Math::Vector3 vMax; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void storeVertexAndIndex(std::vector& vertex, std::vector& index) + { + vecVertex = std::move(vertex); + vecIndex = std::move(index); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + + // �洢������������� + std::vector vecVertex; + std::vector vecIndex; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + RenderItem() = default; + ~RenderItem() + { + matrixs.Destroy(); + } + + std::string name; + + int allCount = 0; // ������ + + int visibileCount = 0; // ���Ƶ����� �ھ�ͷ�е����� + std::vector vDrawObjs; // ��Ҫ���Ƶ�Ŀ������λ�� + + int selectedCount = 0; // ѡ�е���������Ҫ��� + std::vector vDrawOutLineObjs; // ��Ҫ��ߵ�Ŀ������λ�� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� + + std::vector vObjsData; + StructuredBuffer matrixs; // t0 �洢�����һЩ�����Լ���������id + + Math::Vector3 vMin; + Math::Vector3 vMax; +}; \ No newline at end of file diff --git a/Chapter 17 Picking/main.cpp b/Chapter 17 Picking/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 17 Picking/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 17 Picking/packages.config b/Chapter 17 Picking/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 17 Picking/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj b/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj new file mode 100644 index 0000000..96ad212 --- /dev/null +++ b/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj @@ -0,0 +1,551 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {6B93AE6B-3432-44AA-A6DA-87065A625F00} + Chapter18CubeMapping + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj.filters b/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj.filters new file mode 100644 index 0000000..d1b80fb --- /dev/null +++ b/Chapter 18 Cube Mapping/Chapter 18 Cube Mapping.vcxproj.filters @@ -0,0 +1,967 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/CameraController.cpp b/Chapter 18 Cube Mapping/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 18 Cube Mapping/Core/CameraController.h b/Chapter 18 Cube Mapping/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 18 Cube Mapping/Core/EngineProfiling.cpp b/Chapter 18 Cube Mapping/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 18 Cube Mapping/Core/EngineProfiling.h b/Chapter 18 Cube Mapping/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 18 Cube Mapping/Core/EngineTuning.cpp b/Chapter 18 Cube Mapping/Core/EngineTuning.cpp new file mode 100644 index 0000000..aa8bba5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, (float)log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp((float)log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return (float)exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 18 Cube Mapping/Core/EngineTuning.h b/Chapter 18 Cube Mapping/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 18 Cube Mapping/Core/FileUtility.cpp b/Chapter 18 Cube Mapping/Core/FileUtility.cpp new file mode 100644 index 0000000..78ee5bf --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (unsigned char*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (unsigned char*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 18 Cube Mapping/Core/FileUtility.h b/Chapter 18 Cube Mapping/Core/FileUtility.h new file mode 100644 index 0000000..999b030 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 18 Cube Mapping/Core/Fonts/consola24.h b/Chapter 18 Cube Mapping/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 18 Cube Mapping/Core/GameCore.cpp b/Chapter 18 Cube Mapping/Core/GameCore.cpp new file mode 100644 index 0000000..8ac190f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/GameCore.cpp @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_MOUSEMOVE: + GameInput::OnMouseMove(wParam, LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 18 Cube Mapping/Core/GameCore.h b/Chapter 18 Cube Mapping/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/GameInput.cpp b/Chapter 18 Cube Mapping/Core/GameInput.cpp new file mode 100644 index 0000000..733b0a1 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/GameInput.cpp @@ -0,0 +1,595 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + + int s_Mouse_X; + int s_Mouse_Y; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +void GameInput::OnMouseMove(WPARAM btnState, int x, int y) +{ + s_Mouse_X = x; + s_Mouse_Y = y; +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} + +POINT GameInput::GetCurPos() +{ + return { s_Mouse_X, s_Mouse_Y }; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/GameInput.h b/Chapter 18 Cube Mapping/Core/GameInput.h new file mode 100644 index 0000000..649b1df --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/GameInput.h @@ -0,0 +1,198 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + void OnMouseMove(WPARAM btnState, int x, int y); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + + POINT GetCurPos(); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Camera.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..486a16f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Camera.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::Update() +{ + BaseCamera::Update(); + + m_FrustumVS = Frustum(m_ProjMatrix, m_NearClip / m_FarClip); + m_FrustumWS = m_CameraToWorld * m_FrustumVS; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Camera.h b/Chapter 18 Cube Mapping/Core/Graphics/Camera.h new file mode 100644 index 0000000..240ccde --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Camera.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + virtual void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + // �޸ĸú�����ԭ�ȵ��Ƿ��� + const Vector3 GetForwardVec() const { return m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + const Frustum& GetViewSpaceFrustum() const { return m_FrustumVS; } + const Frustum& GetWorldSpaceFrustum() const { return m_FrustumWS; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + + // ��׶����� + Frustum m_FrustumVS; // View-space view frustum + Frustum m_FrustumWS; // World-space view frustum + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + virtual void Update() override; + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Color.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Color.h b/Chapter 18 Cube Mapping/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..ef38fe6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,623 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearColor(ColorCubeBuffer& Target) +{ + for (int i = 0; i < 6; ++i) + m_CommandList->ClearRenderTargetView(Target.GetRTV(i), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.h b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..722c7bf --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,763 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class ColorCubeBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearColor(ColorCubeBuffer& Target); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.h b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Command/readme_command.txt b/Chapter 18 Cube Mapping/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.cpp b/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..35e5eea --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + // ���������������������shader�����˵��µ� + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.h b/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.cpp b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.h b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.cpp b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.h b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.h b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.h b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.h b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..5b0f7b6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorCubeBuffer g_SceneCubeBuff; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_SceneCubeBuff.Create(L"scene cube buffer", 1024, 1024, 1, DefaultHdrColorFormat); + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_SceneCubeBuff.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..5cf9d30 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + extern ColorCubeBuffer g_SceneCubeBuff; // ��պ�6��RTV��colorbuffer + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp new file mode 100644 index 0000000..927b1cd --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp @@ -0,0 +1,60 @@ +#include "pch.h" +#include "ColorCubeBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + +void ColorCubeBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = 1; + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + // Create the render target view + for (int i = 0; i < 6; ++i) + { + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + RTVDesc.Format = Format; + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.PlaneSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = i; + RTVDesc.Texture2DArray.ArraySize = 1; + + if (m_RTVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_RTVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle[i]); + } +} + +void ColorCubeBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 6, NumMips, Format, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET); + + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 6, NumMips); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.h new file mode 100644 index 0000000..7e5e869 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ColorCubeBuffer.h @@ -0,0 +1,53 @@ +/* + ��պ���ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle[6]: ��ȾĿ����ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorCubeBuffer : public PixelBuffer +{ +public: + ColorCubeBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_RTVHandle, 0xFF, sizeof(m_RTVHandle)); + } + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(int idx = 0) const { + if (idx < 0 || idx > 5) + idx = 0; + + return m_RTVHandle[idx]; + } + + Color GetClearColor(void) const { return m_ClearColor; } + +protected: + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle[6]; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/EsramAllocator.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuResource.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Resource/readme_resource.txt b/Chapter 18 Cube Mapping/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..6280d42 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,80 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--ColorCubeBuffer -> PixelBuffer -> GpuResource +--��պ���ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����2������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle[6]: ��ȾĿ����ͼ��� + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.cpp b/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.h b/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 18 Cube Mapping/Core/Graphics/Texture/dds.h b/Chapter 18 Cube Mapping/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 18 Cube Mapping/Core/Graphics/d3dx12.h b/Chapter 18 Cube Mapping/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 18 Cube Mapping/Core/Hash.h b/Chapter 18 Cube Mapping/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 18 Cube Mapping/Core/Math/BoundingPlane.h b/Chapter 18 Cube Mapping/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Math/BoundingSphere.h b/Chapter 18 Cube Mapping/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Math/Common.h b/Chapter 18 Cube Mapping/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Frustum.cpp b/Chapter 18 Cube Mapping/Core/Math/Frustum.cpp new file mode 100644 index 0000000..c38f478 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Frustum.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + // �Ѹ�Ϊ��������ϵ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // ��׶�壬�����Զ�������4������ + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = NVy * VTan; + + // ������׶���6���棬�洢���Ƿ������Լ����ϵ�һ���� + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // TODO ���޸�Ϊ��������ϵ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum(const Matrix4& ProjMat, float NearDivFar) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / NearDivFar; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // TODO ���޸�Ϊ��������ϵ + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // ���޸�Ϊ��������ϵ + // Perspective + float NearClip, FarClip; + + FarClip = -ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Frustum.h b/Chapter 18 Cube Mapping/Core/Math/Frustum.h new file mode 100644 index 0000000..86211a8 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix, float NearDivFar); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Math/Functions.inl b/Chapter 18 Cube Mapping/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Math/Matrix3.h b/Chapter 18 Cube Mapping/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Math/Matrix4.h b/Chapter 18 Cube Mapping/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Quaternion.h b/Chapter 18 Cube Mapping/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Random.cpp b/Chapter 18 Cube Mapping/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Random.h b/Chapter 18 Cube Mapping/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 18 Cube Mapping/Core/Math/Scalar.h b/Chapter 18 Cube Mapping/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Math/Transform.h b/Chapter 18 Cube Mapping/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 18 Cube Mapping/Core/Math/Vector.h b/Chapter 18 Cube Mapping/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoRender1CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoRender2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AoRenderCS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/AverageLumaCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BlurCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/BufferCopyPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFCommon.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPass1CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/FXAARootSignature.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticlePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleUtility.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ParticleVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PostEffectsRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PresentHDRPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PresentRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 18 Cube Mapping/Core/Shaders/PresentSDRPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ResolveTAACS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/SSAORS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ShaderUtility.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/SharpenTAACS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TemporalRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TextRS.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TextShadowPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/TextVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ToneMap2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ToneMapCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 18 Cube Mapping/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 18 Cube Mapping/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 18 Cube Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/LightingUtil.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/bezierDS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/bezierHS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/bezierPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/bezierVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/billboardGS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/billboardPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/billboardVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/blurVertCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/compositeCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/defaultPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/defaultVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..34dc6e7 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,137 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; + float Mpad1; // ռλ�� + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t0); + +// ռ��t1-t4 +Texture2D gDiffuseMap[3] : register(t1); +// gDiffuseMapռ�ݵ���t1-t4������պ����������Ƿ���t4λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t4); + +SamplerState gsamLinearWrap : register(s0); + +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; + uint vPad0; // ռλ�� + uint vPad1; // ռλ�� + uint vPad2; // ռλ�� +}; + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[gMaterialIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + + diffuseAlbedo *= gDiffuseMap[diffuseTexIndex].Sample(gsamLinearWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - roughness; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // ���淴�� + float3 r = reflect(-toEyeW, pin.NormalW); + float4 reflectionColor = gCubeMap.Sample(gsamLinearWrap, r); + float3 fresnelFactor = SchlickFresnel(fresnelR0, pin.NormalW, r); + litColor.rgb += shininess * fresnelFactor * reflectionColor.rgb; + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..62900c5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,48 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl new file mode 100644 index 0000000..4add4f5 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl @@ -0,0 +1,4 @@ +float4 main() : SV_Target0 +{ + return float4(0.0f, 1.0f, 0.0f, 0.1f); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl new file mode 100644 index 0000000..936a286 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl @@ -0,0 +1,74 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ������ŷ�����ƫ��һ�� + float3 viPos = vin.PosL + vin.NormalL * 0.2; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(viPos, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxPS.hlsl new file mode 100644 index 0000000..e8cbd2a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxPS.hlsl @@ -0,0 +1,17 @@ + +// Texture2D gDiffuseMap[4] : register(t1); +// gDiffuseMapռ�ݵ���t1-t4������պ����������Ƿ���t4λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t4); + +SamplerState gsamLinearWrap : register(s0); + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + return gCubeMap.Sample(gsamLinearWrap, pin.PosL); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxVS.hlsl new file mode 100644 index 0000000..2b3fa24 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/skyboxVS.hlsl @@ -0,0 +1,48 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + // ... +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // ʹ��ģ������ϵ + vout.PosL = vin.PosL; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + + // ������պе�����ʼ�����������λ�� + posW.xyz += gEyePosW; + + // ����ת����ͶӰ����ϵ + // ʹ��z=w������ʼ������Զ��ƽ�� + vout.PosH = mul(posW, gViewProj).xyww; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/sobelCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/tessDS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/tessHS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/tessPS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/tessVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/vecAdd.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/Shaders/default/waveVS.hlsl b/Chapter 18 Cube Mapping/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/Core/SystemTime.cpp b/Chapter 18 Cube Mapping/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 18 Cube Mapping/Core/SystemTime.h b/Chapter 18 Cube Mapping/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 18 Cube Mapping/Core/Utility.cpp b/Chapter 18 Cube Mapping/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 18 Cube Mapping/Core/Utility.h b/Chapter 18 Cube Mapping/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 18 Cube Mapping/Core/VectorMath.h b/Chapter 18 Cube Mapping/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 18 Cube Mapping/Core/pch.cpp b/Chapter 18 Cube Mapping/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 18 Cube Mapping/Core/pch.h b/Chapter 18 Cube Mapping/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 18 Cube Mapping/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 18 Cube Mapping/GameApp.cpp b/Chapter 18 Cube Mapping/GameApp.cpp new file mode 100644 index 0000000..bf751ad --- /dev/null +++ b/Chapter 18 Cube Mapping/GameApp.cpp @@ -0,0 +1,689 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include +#include +#include "GeometryGenerator.h" +#include + +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" +#include "CompiledShaders/skyboxPS.h" +#include "CompiledShaders/skyboxVS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + buildCubeCamera(0.0f, 2.0f, 0.0f); + + m_Camera.SetEyeAtUp({ 0.0f, 5.0f, -10.0f }, { 0.0f, 0.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + // skull ����������һֱ�仯 + static float fAllTime = 0; + fAllTime += deltaT; + using namespace Math; + Matrix4 skullScale = Matrix4::MakeScale(0.2f); + Matrix4 skullOffset = Matrix4(Matrix3(kIdentity), { 3.0f, 2.0f, 0.0f }); + Matrix4 skullLocalRotate = Matrix3::MakeYRotation(2.0f * fAllTime); + Matrix4 skullGlobalRotate = Matrix3::MakeYRotation(0.5f * fAllTime); + // ע�ⷴ�� + m_SkullRItem->modeToWorld = Transpose(skullGlobalRotate * skullOffset * skullLocalRotate * skullScale); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + // ��̬��պ���Ⱦ�� => g_SceneCubeBuffer + DrawSceneToCubeMap(gfxContext); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 4, &m_srvs[0]); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ��Ⱦ�м��ˮ���������������ϱ߶�̬���ɵ���պ� + // ���ö�̬����պ���Դ + gfxContext.SetDynamicDescriptors(3, 3, 1, &Graphics::g_SceneCubeBuff.GetSRV()); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + // ����ԭʼ����պ���Դ + gfxContext.SetDynamicDescriptors(3, 3, 1, &m_srvs[3]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::DrawSceneToCubeMap(GraphicsContext& gfxContext) +{ + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + // �������ģ�建�� + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + + // ��������ɫ + gfxContext.ClearColor(Graphics::g_SceneCubeBuff); + + // �����ӿںͲü����� + auto width = Graphics::g_SceneCubeBuff.GetWidth(); + auto height = Graphics::g_SceneCubeBuff.GetHeight(); + D3D12_VIEWPORT mViewport = { 0.0f, 0.0f, (float)width, (float)height, 0.0f, 1.0f }; + D3D12_RECT mScissorRect = { 0, 0, (LONG)width, (LONG)height }; + gfxContext.SetViewportAndScissor(mViewport, mScissorRect); + + // ���ø�ǩ�� + gfxContext.SetRootSignature(m_RootSignature); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 4, &m_srvs[0]); + + for (int i = 0; i < 6; ++i) + { + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + // ����Ϊ��ȾĿ�� + gfxContext.SetRenderTarget(Graphics::g_SceneCubeBuff.GetRTV(i), Graphics::g_SceneDepthBuffer.GetDSV()); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_CameraCube[i].GetViewProjMatrix()); + psc.eyePosW = m_CameraCube[i].GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ��ʼ���� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + } + + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_GENERIC_READ, true); +} + +void GameApp::RenderUI(class GraphicsContext& gfxContext) +{ + +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + obc.texTransform = item->texTransform; + obc.matTransform = item->matTransform; + obc.MaterialIndex = item->MaterialIndex; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(4, 1); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature[0].InitAsConstantBuffer(0); + m_RootSignature[1].InitAsConstantBuffer(1); + m_RootSignature[2].InitAsBufferSRV(0); + m_RootSignature[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1, 4); + m_RootSignature.Finalize(L"18 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + // ��պ�PSO + auto ras = Graphics::RasterizerDefaultCw; + ras.CullMode = D3D12_CULL_MODE_NONE; + auto dep = Graphics::DepthStateReadWrite; + dep.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + GraphicsPSO skyPSO = defaultPSO; + skyPSO.SetRasterizerState(ras); + skyPSO.SetDepthStencilState(dep); + skyPSO.SetVertexShader(g_pskyboxVS, sizeof(g_pskyboxVS)); + skyPSO.SetPixelShader(g_pskyboxPS, sizeof(g_pskyboxPS)); + skyPSO.Finalize(); + m_mapPSO[E_EPT_SKY] = skyPSO; +} + +void GameApp::buildGeo() +{ + buildShapeGeo(); + buildSkullGeo(); +} + +void GameApp::buildShapeGeo() +{ + // ������״���� + GeometryGenerator geoGen; + GeometryGenerator::MeshData box = geoGen.CreateBox(1.0f, 1.0f, 1.0f, 3); + GeometryGenerator::MeshData grid = geoGen.CreateGrid(20.0f, 30.0f, 60, 40); + GeometryGenerator::MeshData sphere = geoGen.CreateSphere(0.5f, 20, 20); + GeometryGenerator::MeshData cylinder = geoGen.CreateCylinder(0.5f, 0.3f, 3.0f, 20, 20); + + // + // We are concatenating all the geometry into one big vertex/index buffer. So + // define the regions in the buffer each submesh covers. + // + + // Cache the vertex offsets to each object in the concatenated vertex buffer. + UINT boxVertexOffset = 0; + UINT gridVertexOffset = (UINT)box.Vertices.size(); + UINT sphereVertexOffset = gridVertexOffset + (UINT)grid.Vertices.size(); + UINT cylinderVertexOffset = sphereVertexOffset + (UINT)sphere.Vertices.size(); + + // Cache the starting index for each object in the concatenated index buffer. + UINT boxIndexOffset = 0; + UINT gridIndexOffset = (UINT)box.Indices32.size(); + UINT sphereIndexOffset = gridIndexOffset + (UINT)grid.Indices32.size(); + UINT cylinderIndexOffset = sphereIndexOffset + (UINT)sphere.Indices32.size(); + + SubmeshGeometry boxSubmesh; + boxSubmesh.IndexCount = (UINT)box.Indices32.size(); + boxSubmesh.StartIndexLocation = boxIndexOffset; + boxSubmesh.BaseVertexLocation = boxVertexOffset; + + SubmeshGeometry gridSubmesh; + gridSubmesh.IndexCount = (UINT)grid.Indices32.size(); + gridSubmesh.StartIndexLocation = gridIndexOffset; + gridSubmesh.BaseVertexLocation = gridVertexOffset; + + SubmeshGeometry sphereSubmesh; + sphereSubmesh.IndexCount = (UINT)sphere.Indices32.size(); + sphereSubmesh.StartIndexLocation = sphereIndexOffset; + sphereSubmesh.BaseVertexLocation = sphereVertexOffset; + + SubmeshGeometry cylinderSubmesh; + cylinderSubmesh.IndexCount = (UINT)cylinder.Indices32.size(); + cylinderSubmesh.StartIndexLocation = cylinderIndexOffset; + cylinderSubmesh.BaseVertexLocation = cylinderVertexOffset; + + // + // Extract the vertex elements we are interested in and pack the + // vertices of all the meshes into one vertex buffer. + // + + auto totalVertexCount = + box.Vertices.size() + + grid.Vertices.size() + + sphere.Vertices.size() + + cylinder.Vertices.size(); + + std::vector vertices(totalVertexCount); + + UINT k = 0; + for (size_t i = 0; i < box.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = box.Vertices[i].Position; + vertices[k].Normal = box.Vertices[i].Normal; + vertices[k].TexC = box.Vertices[i].TexC; + } + + for (size_t i = 0; i < grid.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = grid.Vertices[i].Position; + vertices[k].Normal = grid.Vertices[i].Normal; + vertices[k].TexC = grid.Vertices[i].TexC; + } + + for (size_t i = 0; i < sphere.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = sphere.Vertices[i].Position; + vertices[k].Normal = sphere.Vertices[i].Normal; + vertices[k].TexC = sphere.Vertices[i].TexC; + } + + for (size_t i = 0; i < cylinder.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = cylinder.Vertices[i].Position; + vertices[k].Normal = cylinder.Vertices[i].Normal; + vertices[k].TexC = cylinder.Vertices[i].TexC; + } + + std::vector indices; + indices.insert(indices.end(), std::begin(box.GetIndices16()), std::end(box.GetIndices16())); + indices.insert(indices.end(), std::begin(grid.GetIndices16()), std::end(grid.GetIndices16())); + indices.insert(indices.end(), std::begin(sphere.GetIndices16()), std::end(sphere.GetIndices16())); + indices.insert(indices.end(), std::begin(cylinder.GetIndices16()), std::end(cylinder.GetIndices16())); + + auto geo = std::make_unique(); + geo->name = "shapeGeo"; + + // GPUBuff�࣬�Զ��Ѷ���ͨ���ϴ������������˶�Ӧ��Ĭ�϶��� + geo->createVertex(L"vertex buff", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"index buff", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + geo->geoMap["box"] = boxSubmesh; + geo->geoMap["grid"] = gridSubmesh; + geo->geoMap["sphere"] = sphereSubmesh; + geo->geoMap["cylinder"] = cylinderSubmesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildSkullGeo() +{ + std::ifstream fin("Models/skull.txt"); + + if (!fin) + { + MessageBox(0, L"Models/skull.txt not found.", 0, 0); + return; + } + + UINT vcount = 0; + UINT tcount = 0; + std::string ignore; + + fin >> ignore >> vcount; + fin >> ignore >> tcount; + fin >> ignore >> ignore >> ignore >> ignore; + + std::vector vertices(vcount); + for (UINT i = 0; i < vcount; ++i) + { + fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; + fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; + + XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); + + // ������������ + XMFLOAT3 spherePos; + XMStoreFloat3(&spherePos, XMVector3Normalize(P)); + + float theta = atan2f(spherePos.z, spherePos.x); + + // Put in [0, 2pi]. + if (theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(spherePos.y); + + float u = theta / (2.0f * XM_PI); + float v = phi / XM_PI; + + vertices[i].TexC = { u, v }; + } + + fin >> ignore; + fin >> ignore; + fin >> ignore; + + std::vector indices(3 * tcount); + for (UINT i = 0; i < tcount; ++i) + { + fin >> indices[i * 3 + 0] >> indices[i * 3 + 1] >> indices[i * 3 + 2]; + } + + fin.close(); + + auto geo = std::make_unique(); + geo->name = "skullGeo"; + + geo->createVertex(L"skullGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"skullGeo index", (UINT)indices.size(), sizeof(std::int32_t), indices.data()); + geo->storeVertexAndIndex(vertices, indices); + + SubmeshGeometry submesh; + submesh.IndexCount = 3 * tcount; + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["skull"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + // 5���������� + std::vector v = { + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 0.3f, 0 }, // bricks + { { 0.9f, 0.9f, 0.9f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.1f, 1 }, // tile + { { 0.0f, 0.0f, 0.1f, 1.0f }, { 0.98f, 0.97f, 0.95f }, 0.1f, 2 }, // mirror + { { 0.8f, 0.8f, 0.8f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.2f, 2 }, // skull + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 1.0f, 3 }, // sky + }; + + // ���������������� + m_mats.Create(L"skull mats", (UINT)v.size(), sizeof(MaterialConstants), v.data()); + + // 4������ + m_srvs.resize(4); + TextureManager::Initialize(L"Textures/"); + m_srvs[0] = TextureManager::LoadFromFile(L"bricks2", true)->GetSRV(); + m_srvs[1] = TextureManager::LoadFromFile(L"tile", true)->GetSRV(); + m_srvs[2] = TextureManager::LoadFromFile(L"white1x1", true)->GetSRV(); + m_srvs[3] = TextureManager::LoadFromFile(L"grasscube1024", true)->GetSRV(); +} + +void GameApp::buildRenderItem() +{ + using namespace Math; + auto skyRitem = std::make_unique(); + skyRitem->modeToWorld = Transpose(Matrix4::MakeScale(5000.0f)); + skyRitem->texTransform = Transpose(Matrix4(kIdentity)); + skyRitem->matTransform = Transpose(Matrix4(kIdentity)); + skyRitem->MaterialIndex = 4; + skyRitem->geo = m_mapGeometries["shapeGeo"].get(); + skyRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skyRitem->IndexCount = skyRitem->geo->geoMap["sphere"].IndexCount; + skyRitem->StartIndexLocation = skyRitem->geo->geoMap["sphere"].StartIndexLocation; + skyRitem->BaseVertexLocation = skyRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Sky].push_back(skyRitem.get()); + m_vecAll.push_back(std::move(skyRitem)); + + auto boxRitem = std::make_unique(); + boxRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 1.0f, 2.0f), Vector3(0.0f, 0.5f, 0.0f)))); + boxRitem->texTransform = Transpose(Matrix4(kIdentity)); + boxRitem->matTransform = Transpose(Matrix4(kIdentity)); + boxRitem->MaterialIndex = 0; + boxRitem->geo = m_mapGeometries["shapeGeo"].get(); + boxRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + boxRitem->IndexCount = boxRitem->geo->geoMap["box"].IndexCount; + boxRitem->StartIndexLocation = boxRitem->geo->geoMap["box"].StartIndexLocation; + boxRitem->BaseVertexLocation = boxRitem->geo->geoMap["box"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(boxRitem.get()); + m_vecAll.push_back(std::move(boxRitem)); + + auto globeRitem = std::make_unique(); + globeRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 2.0f, 2.0f), Vector3(0.0f, 2.0f, 0.0f)))); + globeRitem->texTransform = Transpose(Matrix4::MakeScale(1.0f)); + globeRitem->matTransform = Transpose(Matrix4(kIdentity)); + globeRitem->MaterialIndex = 2; + globeRitem->geo = m_mapGeometries["shapeGeo"].get(); + globeRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + globeRitem->IndexCount = globeRitem->geo->geoMap["sphere"].IndexCount; + globeRitem->StartIndexLocation = globeRitem->geo->geoMap["sphere"].StartIndexLocation; + globeRitem->BaseVertexLocation = globeRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors].push_back(globeRitem.get()); + m_vecAll.push_back(std::move(globeRitem)); + + auto skullRitem = std::make_unique(); + skullRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + skullRitem->texTransform = Transpose(Matrix4(kIdentity)); + skullRitem->matTransform = Transpose(Matrix4(kIdentity)); + skullRitem->MaterialIndex = 3; + skullRitem->geo = m_mapGeometries["skullGeo"].get(); + skullRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skullRitem->IndexCount = skullRitem->geo->geoMap["skull"].IndexCount; + skullRitem->StartIndexLocation = skullRitem->geo->geoMap["skull"].StartIndexLocation; + skullRitem->BaseVertexLocation = skullRitem->geo->geoMap["skull"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(skullRitem.get()); + m_SkullRItem = skullRitem.get(); + m_vecAll.push_back(std::move(skullRitem)); + + auto gridRitem = std::make_unique(); + gridRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + gridRitem->texTransform = Transpose(Matrix4::MakeScale({ 8.0f, 8.0f, 1.0f })); + gridRitem->matTransform = Transpose(Matrix4(kIdentity)); + gridRitem->MaterialIndex = 1; + gridRitem->geo = m_mapGeometries["shapeGeo"].get(); + gridRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + gridRitem->IndexCount = gridRitem->geo->geoMap["grid"].IndexCount; + gridRitem->StartIndexLocation = gridRitem->geo->geoMap["grid"].StartIndexLocation; + gridRitem->BaseVertexLocation = gridRitem->geo->geoMap["grid"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(gridRitem.get()); + m_vecAll.push_back(std::move(gridRitem)); + + for (int i = 0; i < 5; ++i) + { + auto leftCylRitem = std::make_unique(); + leftCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 1.5f, -10.0f + i * 5.0f)))); + leftCylRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->MaterialIndex = 0; + leftCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftCylRitem->IndexCount = leftCylRitem->geo->geoMap["cylinder"].IndexCount; + leftCylRitem->StartIndexLocation = leftCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + leftCylRitem->BaseVertexLocation = leftCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftCylRitem.get()); + m_vecAll.push_back(std::move(leftCylRitem)); + + auto rightCylRitem = std::make_unique(); + rightCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 1.5f, -10.0f + i * 5.0f)))); + rightCylRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->MaterialIndex = 0; + rightCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightCylRitem->IndexCount = rightCylRitem->geo->geoMap["cylinder"].IndexCount; + rightCylRitem->StartIndexLocation = rightCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + rightCylRitem->BaseVertexLocation = rightCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightCylRitem.get()); + m_vecAll.push_back(std::move(rightCylRitem)); + + auto leftSphereRitem = std::make_unique(); + leftSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 3.5f, -10.0f + i * 5.0f)))); + leftSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->MaterialIndex = 2; + leftSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftSphereRitem->IndexCount = leftSphereRitem->geo->geoMap["sphere"].IndexCount; + leftSphereRitem->StartIndexLocation = leftSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + leftSphereRitem->BaseVertexLocation = leftSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftSphereRitem.get()); + m_vecAll.push_back(std::move(leftSphereRitem)); + + auto rightSphereRitem = std::make_unique(); + rightSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 3.5f, -10.0f + i * 5.0f)))); + rightSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->MaterialIndex = 2; + rightSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightSphereRitem->IndexCount = rightSphereRitem->geo->geoMap["sphere"].IndexCount; + rightSphereRitem->StartIndexLocation = rightSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + rightSphereRitem->BaseVertexLocation = rightSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightSphereRitem.get()); + m_vecAll.push_back(std::move(rightSphereRitem)); + } +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} + +void GameApp::buildCubeCamera(float x, float y, float z) +{ + // �������� + Math::Vector3 targets[6] = + { + { x + 1.0f, y, z }, // +X + { x - 1.0f, y, z }, // -X + { x, y + 1.0f, z }, // +Y + { x, y - 1.0f, z }, // -Y + { x, y, z + 1.0f }, // +Z + { x, y, z - 1.0f } // -Z + }; + + // ��������Ϸ� + Math::Vector3 ups[6] = + { + { +0.0f, +1.0f, +0.0f }, // +X + { +0.0f, +1.0f, +0.0f }, // -X + { +0.0f, +0.0f, -1.0f }, // +Y + { +0.0f, +0.0f, +1.0f }, // -Y + { +0.0f, +1.0f, +0.0f }, // +Z + { +0.0f, +1.0f, +0.0f } // -Z + }; + + for (int i = 0; i < 6; ++i) + { + m_CameraCube[i].SetEyeAtUp({ x, y, z }, targets[i], ups[i]); + m_CameraCube[i].SetPerspectiveMatrix(Math::XM_PIDIV2, 1.0f, 0.1f, 1000.0f); + m_CameraCube[i].Update(); + } +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/GameApp.h b/Chapter 18 Cube Mapping/GameApp.h new file mode 100644 index 0000000..3f4817a --- /dev/null +++ b/Chapter 18 Cube Mapping/GameApp.h @@ -0,0 +1,102 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + virtual void RenderUI(class GraphicsContext& gfxContext) override; + +private: + void cameraUpdate(); // camera���� + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + + void buildCubeCamera(float x, float y, float z); + void DrawSceneToCubeMap(GraphicsContext& gfxContext); + +private: + void buildShapeGeo(); + void buildSkullGeo(); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + OpaqueDynamicReflectors, + Sky, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + StructuredBuffer m_mats; // t1 �洢���е��������� + std::vector m_srvs; // �洢���е�������Դ + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_SKY, + }; + std::unordered_map m_mapPSO; + + RenderItem* m_SkullRItem = nullptr; + + // ��պ������ + Math::Camera m_CameraCube[6]; + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::unique_ptr m_CameraController; + + // �뾶 + float m_radius = 10.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/GeometryGenerator.cpp b/Chapter 18 Cube Mapping/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 18 Cube Mapping/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 18 Cube Mapping/GeometryGenerator.h b/Chapter 18 Cube Mapping/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 18 Cube Mapping/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 18 Cube Mapping/Models/skull.txt b/Chapter 18 Cube Mapping/Models/skull.txt new file mode 100644 index 0000000..5e0f3ce --- /dev/null +++ b/Chapter 18 Cube Mapping/Models/skull.txt @@ -0,0 +1,91423 @@ +VertexCount: 31076 +TriangleCount: 60339 +VertexList (pos, normal) +{ + 0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907 + 0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907 + 0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907 + 1.12127 1.64042 -1.94785 -0.0941668 0.904117 0.416779 + 1.04654 1.60198 -1.86107 0.0955379 0.877073 0.47076 + 1.06964 1.60894 -1.87873 0.0955378 0.877073 0.47076 + 1.151 1.65245 -1.7697 -0.378509 0.925514 -0.01241 + 1.11866 1.63277 -1.6602 -0.373131 0.92607 0.0562804 + 1.13374 1.64126 -1.6999 -0.373131 0.92607 0.0562804 + -1.55433 1.51188 0.462787 -0.650629 -0.723091 0.231995 + -1.58157 1.5563 0.524846 -0.650628 -0.723091 0.231995 + -1.63136 1.61203 0.558918 -0.189662 0.407906 -0.893108 + -0.948906 1.69815 -1.06444 0.06309 -0.586398 -0.807562 + -0.883508 1.6865 -1.05088 0.333777 -0.941824 -0.0394929 + -0.901206 1.61571 -1.00085 0.06309 -0.586398 -0.807562 + -0.698766 2.11852 0.21365 0.449339 0.0647742 -0.89101 + -0.800745 2.16722 0.143497 0.233569 0.963598 0.130093 + -0.757773 2.14908 0.186115 0.510221 0.846084 -0.154329 + -0.026884 2.45107 -1.11594 0.569732 0.569877 -0.592153 + -0.026893 2.5207 -1.04894 0.569732 0.569877 -0.592153 + -0.00861 2.52374 -1.02842 -0.412524 0.686678 0.59858 + -0.925082 1.67623 0.632925 0.327682 0.790395 0.517591 + -1.02369 1.81801 0.51875 0.764479 0.632399 0.12507 + -1.07771 1.88665 0.501859 0.768834 0.630814 0.104728 + -1.21447 1.45124 0.759218 -0.977394 0.0525264 0.204796 + -1.24213 1.58922 0.591819 -0.977394 0.0525264 0.204796 + -1.25585 1.60974 0.521077 -0.977394 0.0525264 0.204796 + -1.46174 1.30584 0.581853 0.864067 -0.492757 0.102851 + -1.46161 1.25622 0.403406 0.828898 0.539105 -0.149312 + -1.49721 1.30268 0.373529 0.828898 0.539105 -0.149312 + -1.14801 1.74733 -2.15642 0.627914 0.700696 0.338748 + -1.14244 1.71124 -2.06432 0.928712 0.127139 -0.348326 + -1.11856 1.68698 -2.02151 0.312969 0.890586 0.330011 + -1.0984 1.63391 -1.92098 0.487942 -0.510099 -0.708315 + -1.04635 1.60183 -1.86122 0.772868 0.0817976 -0.629273 + -1.12108 1.64027 -1.948 0.772868 0.0817976 -0.629273 + -1.13384 1.64128 -1.69995 0.359386 0.931225 0.060508 + -1.11876 1.63288 -1.66019 0.359386 0.931225 0.060508 + -1.1511 1.65248 -1.76974 0.66363 0.744796 -0.0698237 + -1.18233 1.23731 -1.58105 -0.922929 -0.0737541 -0.37784 + -1.17721 1.24002 -1.59409 -0.922929 -0.073754 -0.37784 + -1.16328 1.23237 -1.62663 -0.922929 -0.073754 -0.37784 + -0.91314 1.26874 -2.12118 -0.105577 0.815147 0.569551 + -0.898511 1.25175 -2.09719 -0.887193 -0.36437 0.283061 + -0.883033 1.24766 -2.05395 -0.887193 -0.36437 0.283061 + 1.04301 1.16262 -1.8932 0.397469 0.0978369 -0.912385 + 1.01556 1.17173 -1.90419 0.0633285 0.952548 -0.297727 + 0.980129 1.18837 -1.91784 0.397469 0.0978369 -0.912385 + 0.800364 1.32241 -2.89805 0.629678 0.750854 -0.199307 + 0.806559 1.32541 -2.88944 0.823409 -0.271908 -0.49806 + 0.831275 1.27798 -2.82269 0.823409 -0.271908 -0.49806 + -2.04759 1.79087 -0.419645 -0.988527 -0.10864 0.104937 + -2.05701 1.81152 -0.487006 -0.997315 -0.0537478 0.0497454 + -2.05691 1.78848 -0.509912 -0.980777 -0.193847 -0.0223518 + -0.692099 1.2342 -2.95767 -0.573742 0.803924 -0.156607 + -0.695861 1.23354 -2.94732 -0.573742 0.803924 -0.156607 + -0.697976 1.23713 -2.92113 -0.573742 0.803924 -0.156607 + 2.05691 1.78848 -0.509912 0.998191 -0.0583625 -0.0144192 + 2.05701 1.81152 -0.487006 0.997306 -0.0538525 0.0498041 + 2.04758 1.79087 -0.419637 0.988507 -0.108734 0.105031 + 1.24544 1.07804 -1.44958 0.649224 -0.0182511 -0.760378 + 1.21165 1.0146 -1.47691 0.166265 0.745609 -0.645308 + 1.1173 1.02629 -1.55774 0.649224 -0.0182511 -0.760378 + -1.11728 1.02629 -1.55775 -0.649255 -0.0183743 -0.760349 + -1.21163 1.0146 -1.47691 -0.166337 0.745526 -0.645385 + -1.24542 1.07804 -1.44959 -0.649255 -0.0183743 -0.760349 + -0.806332 1.74827 -2.76421 -0.434612 0.209157 0.875994 + -0.814274 1.75317 -2.76932 -0.434612 0.209157 0.875994 + -0.839872 1.7517 -2.78167 -0.434612 0.209157 0.875994 + 0.821988 1.74942 -2.77501 0.329372 -0.519014 0.788757 + 0.814274 1.75317 -2.76932 0.329372 -0.519014 0.788757 + 0.785028 1.76407 -2.74993 0.329372 -0.519014 0.788757 + 0.888762 1.33938 -1.5282 0.00961599 0.997143 0.0749256 + 0.915406 1.33821 -1.5161 0.00961599 0.997143 0.0749256 + 0.921874 1.33846 -1.52023 0.00961599 0.997143 0.0749256 + -0.886486 1.45631 -2.24676 -0.396142 0.917961 0.0204671 + -0.902475 1.44951 -2.25152 -0.396142 0.917961 0.0204671 + -0.927139 1.43888 -2.25177 -0.396142 0.917961 0.0204671 + 1.04271 1.37679 -2.1176 0.2494 -0.0437617 0.967411 + 1.07451 1.36833 -2.12618 0.2494 -0.0437617 0.967411 + 1.08487 1.3765 -2.12848 0.2494 -0.0437617 0.967411 + -0.943902 1.36906 -1.86388 0.166581 0.42439 0.890025 + -0.967246 1.38002 -1.86474 0.166581 0.42439 0.890025 + -0.996414 1.38162 -1.86005 0.166581 0.42439 0.890025 + -0.909016 1.37928 -1.86229 -0.0199364 0.651776 0.75815 + -0.935798 1.39002 -1.87222 -0.0199364 0.651776 0.75815 + -0.977897 1.39575 -1.87826 -0.0199364 0.651776 0.75815 + -0.049274 1.91604 -3.38694 -0.350601 -0.899629 -0.26028 + -0.00609 1.89928 -3.38721 -0.369168 -0.892749 -0.258289 + 0 1.88767 -3.35525 -0.350601 -0.899629 -0.26028 + -0.00609 1.93619 -3.35816 -1 0 0 + -0.00609 1.92264 -3.37029 -1 0 0 + -0.011004 2.20909 -0.926224 0.999938 0.00708208 -0.00860211 + -0.011004 1.92279 -1.16193 0.999938 0.00708208 -0.00860211 + -0.014777 2.65435 -0.998232 0.995471 -0.0158419 0.0937386 + -0.011004 1.92279 -1.16193 0.785848 -0.421049 0.452946 + 0.031727 1.84797 -1.26694 0.686473 -0.714394 -0.13563 + 0.031727 1.84797 -1.26694 -0.882422 -0.413073 0.225172 + 0.064756 1.84625 -1.22456 -0.869915 -0.210535 0.446008 + -0.014777 2.65435 -0.998232 -0.770175 -0.241181 0.590477 + 0.161362 1.08963 0.567937 0.195338 0.92057 0.338221 + 0.15157 1.06403 0.643287 0.195338 0.92057 0.33822 + 0.202299 1.02452 0.721508 0.195338 0.92057 0.33822 + 1.13441 1.64513 -1.92742 0.664039 -0.745121 -0.0620253 + 1.12127 1.64042 -1.94785 0.577008 -0.794899 -0.187611 + 1.15142 1.68191 -2.03092 0.577008 -0.794899 -0.187611 + 1.14237 1.66056 -1.98515 -0.181527 0.904501 0.385909 + 1.15142 1.68191 -2.03092 -0.181527 0.904501 0.385909 + 0.173526 2.0323 -3.02581 0.421532 0.687881 -0.590873 + 0.164996 2.02874 -3.03604 0.421532 0.687881 -0.590873 + 0.156435 2.02905 -3.04178 0.421532 0.687881 -0.590873 + -0.018207 2.29242 -0.86875 -0.16113 0.133196 0.977904 + -0.011004 2.20909 -0.926224 -0.329358 -0.555228 0.763704 + 0.016514 2.25648 -0.879903 -0.329358 -0.555228 0.763704 + -0.011004 2.20909 -0.926224 0.902381 -0.119202 -0.414126 + 0.014767 2.65435 -0.998232 0.630835 -0.424023 -0.649809 + 0.016514 2.25648 -0.879903 0.902381 -0.119202 -0.414126 + -0.042206 0.01602 3.24589 0 0.626778 0.779198 + -0.001795 0.003301 3.25612 -0.369989 -0.0689123 0.926477 + 0.001808 0.003301 3.25612 0 0.626778 0.779198 + -0.972324 1.71963 0.59555 0.307586 0.790657 0.529389 + -0.848978 1.62264 0.668739 0.307586 0.790657 0.529389 + -1.237 1.53076 0.60848 -0.417096 0.181801 0.890494 + -1.26298 1.58624 0.584985 -0.819253 -0.356714 0.448976 + -1.33145 1.63145 0.543685 -0.417096 0.181801 0.890494 + -1.30863 1.42333 0.768356 -0.275156 -0.302959 -0.912417 + -1.35441 1.57088 0.718197 -0.944445 -0.205966 0.256128 + -1.37295 1.58577 0.661806 -0.944445 -0.205966 0.256128 + -0.995136 1.68804 -1.12174 0.696565 0.353522 -0.624355 + -0.971002 1.70035 -1.08785 0.696565 0.353522 -0.624355 + -0.948906 1.69815 -1.06444 0.696565 0.353522 -0.624355 + -0.686108 1.69237 -1.37664 -0.112009 0.079852 0.990494 + -0.668868 1.74969 -1.37931 0.942787 -0.288834 0.166514 + -0.692772 1.67708 -1.37616 -0.112009 0.079852 0.990494 + -0.991592 1.54803 -1.21183 -0.598015 -0.458623 -0.657299 + -0.955511 1.48158 -1.19533 -0.725065 -0.232811 0.648136 + -0.922127 1.44708 -1.17038 -0.725065 -0.232811 0.648136 + -1.02216 1.67959 -1.28351 0.554421 -0.0861091 -0.82777 + -1.00886 1.67572 -1.2742 0.686154 -0.0106421 -0.727379 + -0.994441 1.63158 -1.25995 0.554421 -0.0861091 -0.82777 + 0.02884 1.8545 -1.31386 0.209354 -0.97749 0.0261592 + -0.011004 1.92279 -1.16193 -0.876146 -0.481864 -0.0131942 + -0.566524 1.95757 -2.62998 0.80872 -0.586442 0.0453573 + -0.592266 1.91999 -2.61288 0.735678 -0.623871 -0.263747 + -0.593047 1.92413 -2.62486 0.731705 -0.641824 -0.229498 + -1.14934 1.85886 -1.621 -0.748231 -0.0628384 0.660455 + -1.18042 1.92842 -1.63808 0.695388 0.448556 0.561456 + -1.22327 1.99607 -1.63906 0.695388 0.448556 0.561456 + -0.848896 1.59106 -1.29936 0.0547428 0.991271 -0.119936 + -0.862195 1.59124 -1.28868 -0.607286 0.231798 -0.759916 + -0.906036 1.59329 -1.25302 -0.240133 -0.963498 -0.118355 + 0.040846 2.03476 -3.07187 0.32524 -0.797022 -0.508895 + 0.021963 2.02879 -3.08313 0.412098 0.310944 -0.856439 + -0.030826 2.04626 -3.10218 0.412098 0.310944 -0.856439 + 0.016514 2.25648 -0.879903 0.361972 0.492241 0.791628 + 0.036031 2.2728 -0.898977 0.854781 0.134694 0.501205 + 0.026896 2.5207 -1.04894 0.89138 0.34194 0.297521 + 0.342526 0.826727 1.0007 0.953858 0.107937 0.280186 + 0.321893 0.815854 1.07513 0.953858 0.107937 0.280186 + 0.312155 0.767184 1.12703 0.953858 0.107937 0.280186 + -0.280438 0.691045 1.20391 -0.945571 0.12964 0.298478 + -0.28423 0.755168 1.16405 -0.945571 0.12964 0.298478 + -0.293968 0.803753 1.11209 -0.945571 0.12964 0.298478 + 1.02368 1.78898 0.51143 0.89627 -0.163857 0.41213 + 0.939812 1.7023 0.659358 0.89627 -0.163857 0.41213 + 0.972324 1.71963 0.595543 0.89627 -0.163857 0.41213 + 0.639283 1.82867 -0.742512 0.949949 -0.265038 0.165381 + 0.641212 1.80309 -0.633011 -0.155079 -0.962606 -0.222129 + 0.588889 1.81998 -0.669658 -0.576988 -0.694303 0.430148 + 0.996149 2.87607 -0.646464 0.195019 -0.66248 0.723248 + 0.779571 2.78279 -0.673504 0.195019 -0.66248 0.723249 + 0.739695 2.74565 -0.696773 0.694051 -0.493486 -0.524181 + 2.01559 2.518 -0.205467 -0.398232 -0.638181 0.65889 + 1.85647 2.54302 -0.277405 -0.398232 -0.638181 0.65889 + 1.78909 2.52885 -0.331856 -0.398232 -0.638181 0.65889 + 2.06551 2.37554 -0.14513 0.209248 0.739158 0.640203 + 1.98115 2.45802 -0.212777 0.209248 0.739158 0.640203 + 1.90735 2.49937 -0.236397 0.209248 0.739158 0.640203 + 0.701621 1.59347 -1.07093 -0.310767 -0.590351 -0.744923 + 0.795773 1.58717 -1.10522 -0.407193 -0.681904 -0.607618 + 0.857639 1.53971 -1.09341 -0.310767 -0.59035 -0.744923 + 0.700579 1.79093 -2.19915 0.794599 0.593925 -0.125957 + 0.750666 1.75461 -2.12943 0.145023 -0.880776 -0.45078 + 0.719806 1.76903 -2.18362 0.813011 0.475148 -0.336522 + -0.92271 1.96082 -0.624798 0.172164 -0.446348 0.878142 + -0.929869 1.89636 -0.656157 0.172164 -0.446348 0.878142 + -0.915918 1.85125 -0.681822 0.892288 -0.365755 0.26466 + -1.25705 3.37972 -1.68482 -0.110911 -0.983827 0.14065 + -1.14214 3.39251 -1.50476 -0.110911 -0.983827 0.14065 + -1.11887 3.39705 -1.45464 -0.110911 -0.983827 0.14065 + -0.010689 2.2749 -0.3052 0.629784 0.648282 0.427905 + -0.009414 2.2992 -0.343893 0.629784 0.648282 0.427905 + -0.048528 2.35557 -0.371727 0.629784 0.648282 0.427905 + -1.07094 1.86141 0.481375 -0.876493 -0.32002 0.359647 + -0.972324 1.71963 0.59555 -0.876493 -0.32002 0.359647 + -0.939812 1.7023 0.659365 -0.876493 -0.32002 0.359647 + -1.25585 1.60974 0.521077 0.204306 -0.604269 -0.770141 + -1.18554 1.48162 0.722401 -0.0429436 -0.669492 -0.741577 + -1.21447 1.45124 0.759218 0.24249 -0.645061 -0.724634 + -1.70723 0.427067 1.15213 -0.205891 0.970178 -0.12792 + -1.70775 0.443486 1.2775 -0.205891 0.970178 -0.12792 + -1.7011 0.453737 1.34454 -0.205891 0.970178 -0.12792 + -0.609115 1.90933 -2.58583 -0.554437 0.827813 0.0855872 + -0.571293 1.94331 -2.66948 -0.554437 0.827813 0.0855872 + -0.593047 1.92413 -2.62486 -0.554437 0.827813 0.0855872 + -0.729379 1.60414 -1.84242 -0.735368 0.676003 -0.0474693 + -0.696971 1.63682 -1.87903 -0.82698 -0.194483 -0.527522 + -0.692433 1.63726 -1.94318 -0.735368 0.676003 -0.0474693 + -1.0984 1.63391 -1.92098 -0.244409 0.749525 0.615204 + -1.06945 1.6088 -1.87888 -0.244409 0.749526 0.615204 + -1.04635 1.60183 -1.86122 -0.244409 0.749525 0.615204 + 0.036031 2.2728 -0.898977 -0.996262 0.014774 0.0851082 + 0.03663 2.30385 -0.897355 -0.996262 0.014774 0.0851082 + 0.026896 2.5207 -1.04894 -0.996262 0.014774 0.0851082 + 1.21543 1.25463 0.632758 -0.912708 0.113447 -0.392548 + 1.20241 1.08491 0.659711 -0.928512 0.0122976 -0.371098 + 1.1661 0.918671 0.745052 -0.286635 -0.61351 -0.73583 + 1.33145 1.63145 0.543685 0.417147 0.181782 0.890474 + 1.26299 1.58624 0.584984 0.417147 0.181782 0.890474 + 1.23701 1.53076 0.60848 0.417147 0.181782 0.890474 + 1.37295 1.58577 0.661806 0.944445 -0.205962 0.256133 + 1.35441 1.57088 0.718196 0.944445 -0.205962 0.256133 + 1.30863 1.42333 0.768356 0.275663 -0.291308 -0.916051 + 0.792052 1.49776 -1.24696 -0.0135992 0.985387 0.169787 + 0.828512 1.49337 -1.21855 0.221899 0.853284 -0.471877 + 0.874389 1.49643 -1.23266 -0.449359 0.864271 0.226078 + 0.922122 1.44708 -1.17038 -0.238096 -0.602308 0.761929 + 0.955513 1.48149 -1.19538 0.725133 -0.232945 0.648011 + 0.991592 1.54803 -1.21183 0.601275 -0.451223 -0.659444 + 0.592978 1.92413 -2.62486 -0.733794 -0.641747 -0.222951 + 0.592234 1.92008 -2.61283 -0.738748 -0.623481 -0.255977 + 0.566529 1.95757 -2.62998 -0.805241 -0.592217 0.0294389 + 1.22327 1.99606 -1.63905 -0.695663 0.448589 0.56109 + 1.18043 1.92842 -1.63808 -0.695663 0.448589 0.56109 + 1.14935 1.85886 -1.621 0.743443 -0.0685493 0.665277 + -1.59486 1.39116 0.355271 -0.0661124 0.295114 -0.953172 + -1.51069 1.33656 0.353853 -0.384054 -0.573208 -0.723834 + -1.49721 1.30268 0.373529 -0.328928 -0.706901 -0.626177 + -1.49586 2.56716 -0.58981 -0.607194 -0.445574 -0.65786 + -1.58602 2.58657 -0.536845 -0.516028 -0.066654 -0.853974 + -1.72019 2.70443 -0.464969 -0.717703 -0.338326 -0.608637 + 0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.069411 0.149083 3.81521 0 0.702478 -0.711705 + -1.13431 1.77915 -2.24394 0.748987 0.576371 0.326825 + -1.15072 1.77302 -2.19552 0.796931 0.528217 0.293067 + 1.02369 1.81801 0.518748 -0.769296 0.630583 0.102705 + 1.0777 1.88665 0.501858 -0.548412 -0.0230373 -0.835891 + 1.18729 2.0375 0.396588 -0.788918 0.537794 0.297298 + 1.21543 1.25463 0.632758 -0.943445 0.0893122 -0.319273 + 1.21129 1.35382 0.672741 -0.659387 -0.123053 -0.741665 + 1.26299 1.58624 0.584984 -0.943445 0.0893122 -0.319273 + 0.757834 2.14915 0.186202 -0.510264 0.846046 -0.154393 + 0.800807 2.16729 0.143582 -0.510264 0.846046 -0.154393 + 0.698828 2.11859 0.213736 -0.448671 0.0631055 -0.891466 + 0.001808 0.003301 3.25612 1 0 0 + 0.001808 -0.013762 3.24667 1 0 0 + 0.001808 -0.005483 3.17033 0.46511 -0.884971 -0.0223388 + 0.74827 1.58102 -1.31758 0.185978 0.978799 -0.085815 + 0.748333 1.58493 -1.27294 0.139582 0.986432 -0.0864167 + 0.848893 1.59105 -1.29935 -0.083259 0.992753 -0.0866547 + 0.711042 1.59463 -1.33315 0.839186 0.541675 -0.0485298 + 0.711105 1.59853 -1.28851 0.687275 0.724916 -0.0463682 + 0.699505 1.64767 -1.36081 0.956663 0.288108 0.0423007 + 0.686132 1.69228 -1.37669 0.936448 0.341179 0.0816172 + 0.697732 1.64315 -1.30438 0.94884 0.310267 0.0586247 + 0.656563 1.77702 -1.40086 0.932306 0.350624 0.0887014 + 1.00885 1.67572 -1.27419 0.670214 -0.693233 -0.265032 + 0.977919 1.61141 -1.18422 -0.548297 -0.595979 -0.586669 + 0.946949 1.61536 -1.27285 0.462875 -0.884401 -0.059845 + 0.937006 1.58934 -1.16439 0.0125529 -0.640481 -0.767871 + 0.906036 1.59329 -1.25302 0.240627 -0.963412 -0.118054 + 0.85677 1.58823 -1.32627 0.043441 -0.986395 0.158547 + 0.960259 1.61924 -1.28217 -0.0511243 -0.433055 0.899916 + 1.00885 1.67572 -1.27419 0.578205 -0.561083 0.592339 + 0.963515 1.56736 -1.16991 -0.691064 0.46106 -0.556646 + 0.917637 1.56429 -1.1558 0.00972007 0.191642 -0.981417 + 0.845353 1.58744 -1.19488 0.17914 -0.851587 -0.492654 + 0.801509 1.58539 -1.23054 -0.335613 -0.85461 0.396239 + 0.862192 1.59116 -1.28874 0.0295432 -0.9993 0.0229327 + 0.994443 1.63158 -1.25994 -0.925431 0.375615 -0.0498965 + 1.00885 1.67572 -1.27419 -0.953877 0.267096 -0.137033 + 0.75894 1.61619 -1.24569 -0.790815 -0.347 0.504184 + 0.761569 1.58122 -1.30691 -0.242761 -0.955401 0.168154 + 0.848893 1.59105 -1.29935 0.0612642 -0.998073 0.00988391 + 0.718999 1.61201 -1.32205 -0.802857 -0.23298 0.548763 + 0.74827 1.58102 -1.31758 -0.492294 -0.557249 0.66867 + 0.699021 1.70327 -1.32391 -0.803778 -0.594448 0.0239307 + 0.707462 1.66505 -1.34971 -0.935553 -0.137607 0.325277 + 0.699505 1.64767 -1.36081 -0.840344 0.0395603 0.540607 + 0.711042 1.59463 -1.33315 -0.686943 -0.140715 0.712958 + 0.76871 1.61927 -1.22983 -0.829319 -0.146584 0.539206 + 0.708791 1.70626 -1.3081 -0.838716 -0.095275 0.53617 + 0.789525 1.56678 -1.21471 -0.823792 -0.170977 0.540493 + 0.686132 1.69228 -1.37669 -0.866756 -0.211662 0.45159 + 0.668871 1.74969 -1.37931 -0.92902 -0.312853 0.197597 + 0.656563 1.77702 -1.40086 -0.944761 -0.140863 0.295946 + 0.639302 1.83442 -1.40348 -0.945695 -0.302329 0.119408 + 0.600297 1.9196 -1.45941 -0.935523 -0.35319 -0.00734592 + 0.636604 1.83901 -1.44743 -0.909434 -0.393561 -0.134309 + 0.697732 1.64315 -1.30438 -0.904037 0.0293146 0.426448 + 0.66043 1.78791 -1.35351 -0.858241 -0.478347 0.186029 + 0.626051 1.87036 -1.31612 -0.909292 -0.346445 -0.230571 + 0.599786 1.94895 -1.30965 -0.875446 -0.276772 -0.39622 + 0.613037 1.91293 -1.39706 -0.951128 -0.301862 0.0650784 + 0.654263 1.77702 -1.32405 -0.751583 -0.211272 -0.624889 + 0.619884 1.85947 -1.28666 -0.501873 -0.163251 -0.849396 + 0.589443 1.89582 -1.28503 -0.0798705 -0.0211582 -0.996581 + 0.572223 2.03146 -1.30735 -0.650346 -0.512783 -0.56045 + 0.657449 1.71478 -1.31545 -0.182016 -0.375202 -0.908897 + 0.628195 1.74036 -1.30896 -0.284599 -0.0806566 -0.955247 + 0.597753 1.77671 -1.30732 0.190494 0.01163 -0.981619 + 0.548924 1.83147 -1.32837 0.353545 0.0467009 -0.934251 + 0.56188 1.97841 -1.28267 -0.148599 -0.106591 -0.983136 + 0.684132 1.6989 -1.29475 -0.0788835 -0.724345 -0.68491 + 0.631718 1.61943 -1.2503 0.0298424 -0.668702 -0.742932 + 0.631381 1.67812 -1.30036 0.0169822 -0.488516 -0.87239 + 0.590278 1.68513 -1.29089 -0.376297 -0.43088 -0.820209 + 0.708791 1.70626 -1.3081 -0.0330505 -0.848193 -0.528656 + 0.726242 1.62827 -1.2706 -0.311936 -0.689434 -0.65374 + 0.658401 1.60355 -1.2296 0.185007 -0.812766 -0.552434 + 0.636545 1.55107 -1.1577 0.30473 -0.846636 -0.436287 + 0.605073 1.57287 -1.20325 0.0408359 -0.779023 -0.625664 + 0.604736 1.63147 -1.25336 -0.219954 -0.619859 -0.753257 + 0.750901 1.63563 -1.28395 -0.352328 -0.550117 -0.757123 + 0.770083 1.58651 -1.24989 -0.862131 -0.476999 -0.170882 + 0.711337 1.62078 -1.18883 -0.05394 -0.934159 -0.352757 + 0.689481 1.5683 -1.11694 0.330974 -0.873629 -0.356691 + 0.622039 1.51561 -1.08948 -0.117519 -0.919616 -0.374827 + 0.590567 1.53741 -1.13503 -0.335536 -0.906502 -0.256262 + 0.771717 1.58314 -1.26884 -0.950377 -0.309946 -0.0267693 + 0.790419 1.50113 -1.22799 -0.805017 -0.546168 0.231621 + 0.755178 1.57902 -1.16811 -0.517039 -0.830337 -0.207874 + 0.704378 1.56692 -1.09036 0.112455 -0.869528 -0.480911 + 0.635703 1.4879 -1.04188 -0.0054858 -0.928742 -0.370685 + 0.792052 1.49776 -1.24696 -0.872426 -0.488606 0.0116762 + 0.840998 1.46202 -1.20765 -0.327813 -0.943636 -0.045711 + 0.809256 1.55981 -1.16444 -0.507047 -0.838293 0.200418 + 0.758457 1.54772 -1.08669 -0.29294 -0.824332 -0.484419 + 0.6506 1.48652 -1.0153 -0.164864 -0.611883 -0.773575 + 0.859835 1.52061 -1.14415 -0.563628 -0.7081 0.425344 + 0.6506 1.48652 -1.0153 0.282589 -0.936699 -0.206731 + 0.612757 1.47847 -0.963546 -0.195089 -0.933803 0.29992 + 0.599093 1.50618 -1.01114 -0.791459 -0.597956 -0.126651 + 0.579459 1.54475 -1.05154 -0.850008 -0.526332 0.0214585 + 0.556701 1.56805 -1.18832 -0.580403 -0.7039 -0.409458 + 0.586667 1.54747 -0.91427 -0.844742 -0.444083 0.298665 + 0.567033 1.58604 -0.954669 -0.977182 -0.203594 0.0605327 + 0.567352 1.65255 -1.00526 -0.990658 -0.0825064 0.108583 + 0.545593 1.57539 -1.10483 -0.891632 -0.434143 0.128501 + 0.6172 1.53206 -0.889972 0.030182 -0.796937 0.603307 + 0.612248 1.60182 -0.819792 -0.496877 -0.648056 0.57718 + 0.581715 1.61732 -0.84404 -0.875442 -0.341842 0.341681 + 0.565407 1.66919 -0.887485 -0.990111 -0.0742072 0.119056 + 0.629692 1.50131 -0.961109 0.862344 -0.383833 0.330206 + 0.634135 1.5549 -0.887535 0.907243 -0.352565 0.229366 + 0.630172 1.5876 -0.82637 0.539158 -0.579954 0.610706 + 0.601719 1.6529 -0.769478 -0.577694 -0.438679 0.688353 + 0.6506 1.48652 -1.0153 0.916919 -0.109968 0.383624 + 0.643397 1.56889 -0.998153 0.953583 -0.111151 0.279865 + 0.643726 1.61889 -0.917968 0.983699 -0.140621 0.112079 + 0.639763 1.6516 -0.856812 0.979198 -0.0845448 0.184455 + 0.619643 1.63869 -0.776057 0.471726 -0.542211 0.695329 + 0.664305 1.55402 -1.0524 0.699612 -0.0272337 0.714004 + 0.701621 1.59347 -1.07093 0.503858 0.0379935 0.862951 + 0.658945 1.63178 -1.03008 0.875368 -0.124851 0.467058 + 0.659274 1.68187 -0.949849 0.978211 -0.107128 0.177839 + 0.646938 1.71515 -0.867495 0.982201 -0.0753932 0.172038 + 0.626818 1.70224 -0.78674 0.973819 -0.11088 0.198448 + 0.616518 1.72023 -0.715886 0.952295 -0.110975 0.284286 + 0.795773 1.58717 -1.10522 0.43991 0.00564992 0.898024 + 0.758457 1.54772 -1.08669 0.384658 0.112744 0.916148 + 0.6506 1.48652 -1.0153 0.337107 0.400058 0.85224 + 0.133271 1.97001 -3.02272 0.0154635 -0.521531 -0.853092 + 0.093994 2.00582 -3.01375 -0.0964595 -0.529434 -0.842849 + 0.156435 2.02905 -3.04178 -0.329619 -0.159169 -0.9306 + 0.122012 1.95733 -3.01055 -0.0762406 -0.997074 0.00553609 + 0.082735 1.99305 -3.00163 -0.423956 -0.745927 -0.513667 + 0.080404 2.00707 -3.02371 0.31784 -0.784906 -0.531884 + 0.141832 1.9697 -3.01698 0.779898 -0.625712 0.0155829 + 0.128453 1.99899 -2.99251 0.691133 -0.559822 0.457094 + 0.108633 1.98662 -2.9861 0.501486 -0.407871 0.762989 + 0.156435 2.02905 -3.04178 0.475826 -0.443846 -0.759335 + 0.164996 2.02874 -3.03604 0.4903 -0.436023 -0.754645 + 0.164996 2.02874 -3.03604 0.80018 -0.124512 0.586693 + 0.108633 1.98662 -2.9861 -0.49426 -0.678915 0.542938 + 0.284568 2.00427 -2.96887 0.56808 -0.247494 -0.784877 + 0.261295 1.99188 -2.9818 0.187019 0.265387 -0.94583 + 0.2203 2.03343 -3.02458 -0.0508619 -0.991931 0.116125 + 0.240299 1.98703 -2.9834 -0.0571379 -0.00710554 -0.998341 + 0.199304 2.0285 -3.02623 0.0826115 -0.771611 -0.630708 + 0.156435 2.02905 -3.04178 -0.105135 -0.719327 -0.686669 + 0.263765 1.97714 -2.99568 -0.119907 0.938453 -0.323926 + 0.22481 1.97654 -2.98743 -0.0130644 0.94052 -0.339487 + 0.201344 1.98642 -2.97515 -0.0161998 0.130523 -0.991313 + 0.175566 1.99014 -2.97478 -0.121146 -0.768017 -0.628867 + 0.173526 2.0323 -3.02581 0.0509812 -0.987473 -0.149324 + 0.156435 2.02905 -3.04178 -0.132375 -0.934101 0.33156 + 0.286899 1.98164 -2.99787 -0.241542 0.932903 -0.267114 + 0.293134 1.98928 -3.0755 -0.0133371 0.983189 0.182106 + 0.268182 1.99335 -3.07676 0.253084 0.874727 0.413281 + 0.199857 1.98061 -2.98869 0.204668 0.977909 -0.0424764 + 0.175566 1.99014 -2.97478 0.287814 0.946572 -0.145479 + 0.284568 2.00427 -2.96887 -0.0733668 0.783513 -0.617028 + 0.310171 1.99395 -2.98499 -0.173813 0.973152 -0.150879 + 0.316268 1.99369 -3.07773 -0.223476 0.972495 0.0656668 + 0.319848 1.99731 -3.11521 -0.0681588 0.981479 0.179032 + 0.295996 1.99739 -3.09994 0.460292 -0.348579 0.81647 + 0.24433 1.99334 -3.06154 0.124711 0.929926 0.345956 + 0.161274 1.99295 -2.99625 0.215005 0.976527 0.0129801 + 0.136983 2.00247 -2.98234 0.170644 0.951116 -0.257408 + 0.322326 1.99302 -3.04417 0.00197971 0.999987 -0.00458595 + 0.325906 1.99664 -3.08165 -0.267212 0.961274 0.0674538 + 0.332804 1.99775 -3.02017 0.191921 0.950702 -0.24358 + 0.320649 1.99868 -2.96098 -0.564124 0.814722 0.134134 + 0.32929 2.00113 -2.94802 -0.154741 0.954427 0.255193 + 0.343366 1.99505 -2.9427 0.310494 0.919074 -0.242686 + 0.34688 1.99167 -3.01484 0.425132 0.903039 -0.0615074 + 0.313291 2.00102 -3.03582 0.492869 0.738373 -0.46031 + 0.320286 1.98989 -2.94595 -0.828572 0.0466269 0.557938 + 0.328927 1.99242 -2.93294 -0.700958 0.624826 0.343874 + 0.295702 1.99981 -2.96814 0.373223 0.927739 -0.00221117 + 0.284568 2.00427 -2.96887 0.372151 0.928166 -0.00327953 + 0.365691 1.98304 -2.9843 0.421741 0.906473 0.0210214 + 0.371161 1.97686 -2.92739 0.518874 0.766784 -0.377906 + 0.397432 1.96751 -2.92599 0.320663 0.923046 -0.21251 + 0.391961 1.97369 -2.9829 0.274841 0.958349 0.0776548 + 0.436121 1.96422 -2.97889 0.18569 0.97975 0.0748887 + 0.423477 1.96208 -2.9154 0.25171 0.923845 -0.288363 + 0.462167 1.9588 -2.9683 0.0456098 0.998736 -0.0211222 + 0.356671 2.00434 -2.92579 0.528511 -0.481743 -0.698999 + 0.384466 1.98607 -2.91054 0.263444 -0.0453287 -0.963609 + 0.406745 1.97654 -2.90444 0.373114 0.765192 -0.524659 + 0.348135 2.00185 -2.93868 0.745781 -0.658126 0.103347 + 0.39795 2.0237 -2.97152 0.719518 -0.692725 -0.0492576 + 0.406486 2.02619 -2.95862 0.19985 -0.78305 -0.588976 + 0.428765 2.01675 -2.95248 -0.153313 -0.745058 -0.649141 + 0.406745 1.97654 -2.90444 -0.132424 -0.729384 -0.671166 + 0.44583 1.96623 -2.90117 -0.151335 -0.750736 -0.643034 + 0.350242 1.97577 -2.9623 0.49825 -0.830182 0.250088 + 0.35437 1.97828 -2.99445 0.386881 -0.907121 -0.165695 + 0.402078 2.0262 -3.00365 0.856346 -0.503661 -0.114005 + 0.418264 2.08128 -3.01025 0.7548 -0.317299 -0.574106 + 0.328927 1.99242 -2.93294 0.479015 -0.567757 0.669476 + 0.331034 1.96634 -2.95656 -0.0169217 -0.972696 0.231465 + 0.30645 1.97627 -2.97876 -0.454314 -0.880803 0.133358 + 0.313322 1.9798 -3.00647 -0.180227 -0.93728 -0.298371 + 0.364508 2.01202 -3.06709 0.474649 -0.715071 -0.513208 + 0.36865 2.03918 -3.08753 0.68518 -0.346518 -0.640667 + 0.40622 2.05345 -3.02404 0.881552 -0.238116 -0.407635 + 0.295702 1.99981 -2.96814 -0.65275 -0.623705 0.430011 + 0.231434 2.02898 -3.02386 -0.328901 -0.943378 -0.043141 + 0.238306 2.0325 -3.05156 -0.238856 -0.842117 -0.483514 + 0.32346 2.01354 -3.07911 -0.0808887 -0.797601 -0.597737 + 0.328927 1.99242 -2.93294 -0.649816 -0.538453 0.536477 + 0.156435 2.02905 -3.04178 0.0275726 -0.992469 -0.119352 + 0.284568 2.00427 -2.96887 -0.367788 -0.927873 -0.061516 + 0.156435 2.02905 -3.04178 -0.214287 -0.391188 0.895016 + 0.44583 1.96623 -2.90117 0.249323 0.75169 -0.610573 + 0.462562 1.95177 -2.91213 0.30346 0.951695 -0.0467856 + 0.49606 1.95866 -2.97745 0.0813961 0.993522 0.0793004 + 0.483244 1.9587 -2.99094 0.004039 0.999992 -0.000346849 + 0.517137 1.95856 -3.00009 0.092826 0.992272 0.0823419 + 0.517922 1.95242 -2.95825 0.13078 0.978736 0.158024 + 0.484424 1.94553 -2.89293 0.171707 0.980794 0.092513 + 0.508552 1.94894 -2.92703 0.0423027 0.990757 0.128884 + 0.52042 1.93869 -2.87167 0.428624 0.900379 0.0748257 + 0.44583 1.96623 -2.90117 0.499743 0.810446 -0.305669 + 0.328927 1.99242 -2.93294 -0.026466 0.974304 0.223678 + 0.348135 2.00185 -2.93868 -0.494815 0.672304 -0.550605 + 0.267677 2.00019 -3.0754 0.259724 -0.874459 0.409713 + 0.297587 1.99953 -3.05706 -0.126168 -0.988859 0.0789889 + 0.213992 2.01165 -3.01764 -0.035651 -0.947964 0.316375 + 0.243514 1.99815 -3.05565 0.329877 -0.864645 0.378905 + 0.221579 1.99604 -3.06701 0.0763245 -0.997034 -0.00985793 + 0.197416 1.994 -3.04727 -0.547475 -0.434681 -0.715069 + 0.138523 1.99564 -3.00172 -0.590193 -0.29206 -0.752577 + 0.325906 1.99664 -3.08165 -0.082742 -0.996488 -0.0128938 + 0.322326 1.99302 -3.04417 -0.353591 -0.912555 0.205467 + 0.313291 2.00102 -3.03582 -0.30181 -0.929701 0.21111 + 0.319848 1.99731 -3.11521 -0.0142549 -0.999747 -0.0174161 + 0.332804 1.99775 -3.02017 -0.419856 -0.838005 0.348523 + 0.136983 2.00247 -2.98234 0.245324 -0.883155 -0.399817 + 0.164996 2.02874 -3.03604 0.519605 -0.842885 -0.13984 + 0.76871 1.61927 -1.22983 0.919224 0.339172 -0.199975 + 0.750901 1.63563 -1.28395 0.890788 0.423336 -0.165177 + 0.708791 1.70626 -1.3081 0.870879 0.469742 -0.144616 + 0.789525 1.56678 -1.21471 0.779198 0.138322 -0.611325 + 0.771717 1.58314 -1.26884 0.93754 0.261539 -0.229383 + 0.792052 1.49776 -1.24696 0.747982 0.303256 -0.590389 + 0.825985 1.56239 -1.1863 0.433016 -0.0171771 -0.901222 + 0.874389 1.49643 -1.23266 -0.227826 0.78994 -0.569289 + 0.75894 1.61619 -1.24569 0.465107 -0.328062 -0.822223 + 0.568883 1.86808 -2.71898 -0.52045 0.793298 0.315928 + 0.596791 1.8903 -2.71226 -0.637409 0.710444 0.298294 + 0.56253 1.89213 -2.78983 -0.70778 0.526266 0.471265 + 0.554398 1.87296 -2.73802 0.755214 0.513528 -0.407359 + 0.548045 1.897 -2.80887 0.412423 0.871442 0.265511 + 0.539499 1.90956 -2.78862 0.925239 -0.210193 -0.315836 + 0.56062 1.92182 -2.78625 0.348483 -0.763202 -0.544135 + 0.575518 1.88522 -2.73566 0.394795 -0.738155 -0.54705 + 0.568883 1.86808 -2.71898 0.467932 -0.702741 -0.535906 + 0.540993 1.91304 -2.85124 0.887587 0.458544 0.0439012 + 0.532448 1.92559 -2.83099 0.952967 -0.290272 -0.0871579 + 0.556381 1.93513 -2.81012 0.43379 -0.829295 -0.352272 + 0.63233 1.9467 -2.79915 0.224633 -0.819026 -0.527955 + 0.646581 1.94192 -2.78008 0.121137 -0.906707 -0.403989 + 0.58977 1.88043 -2.71657 0.456878 -0.852569 0.253748 + 0.568883 1.86808 -2.71898 0.47583 -0.7011 -0.531078 + 0.534839 1.92882 -2.85178 0.926069 -0.287059 -0.244934 + 0.558772 1.93836 -2.83091 0.386607 -0.913901 -0.123772 + 0.628091 1.96002 -2.82302 0.325178 -0.872606 -0.364443 + 0.52297 1.93907 -2.90713 0.56514 0.824394 0.0314878 + 0.508552 1.94894 -2.92703 0.519872 0.852978 0.04649 + 0.857639 1.53971 -1.09341 0.209745 0.209288 0.955095 + 0.734627 1.66052 -1.09287 0.272265 -0.276923 0.921513 + 0.691951 1.69874 -1.05208 0.72977 -0.187247 0.657551 + 0.666266 1.73981 -0.991201 0.918423 -0.181836 0.351332 + 0.653929 1.77309 -0.908846 0.980147 -0.0816021 0.180704 + 0.801719 1.66092 -1.09516 -0.0503109 -0.227895 0.972385 + 0.727067 1.74912 -1.07274 0.276988 -0.481855 0.83132 + 0.701382 1.79018 -1.01185 0.770398 -0.17425 0.613289 + 0.665803 1.85544 -0.942675 0.951726 -0.0417351 0.304099 + 0.649583 1.8106 -0.813416 0.981967 -0.133608 0.133752 + 0.924731 1.54019 -1.09564 0.122894 -0.206633 0.97067 + 0.956135 1.59387 -1.09764 0.135844 -0.186392 0.973039 + 0.872103 1.65857 -1.07749 -0.104962 -0.498 0.860801 + 0.797451 1.74686 -1.05501 -0.282399 -0.438527 0.853197 + 0.857639 1.53971 -1.09341 0.0284716 -0.108768 0.993659 + 0.976813 1.48683 -1.12362 0.493183 -0.54229 0.680214 + 1.00822 1.5406 -1.12556 0.817988 -0.259632 0.513309 + 0.989639 1.62409 -1.09438 0.525123 -0.0615618 0.848797 + 0.905607 1.68879 -1.07423 0.279292 -0.713321 0.642783 + 0.883508 1.6865 -1.05088 -0.333675 -0.941855 -0.0396204 + 0.921701 1.47324 -1.1323 -0.217656 -0.728071 0.650029 + 0.977234 1.46075 -1.16166 0.561699 -0.820421 -0.106785 + 1.00584 1.5264 -1.17677 0.909123 -0.355602 -0.216894 + 1.0114 1.59751 -1.17953 0.997605 -0.014321 -0.0676686 + 1.01377 1.61179 -1.12827 0.964203 0.0650206 0.257071 + 0.971005 1.70035 -1.08785 0.673212 0.0295699 0.738858 + 0.922122 1.44708 -1.17038 -0.182077 -0.811392 0.55542 + 0.857639 1.53971 -1.09341 -0.618596 -0.743815 0.253138 + 0.547729 2.0507 -1.40088 -0.559879 -0.824023 0.086733 + 0.531356 2.07762 -1.31671 -0.0112687 -0.95303 0.302666 + 0.474402 2.06298 -1.36495 0.239511 -0.909373 -0.340109 + 0.474158 2.07625 -1.40354 -0.0695818 -0.980446 -0.184076 + 0.465143 2.07809 -1.44612 -0.119267 -0.985195 -0.123147 + 0.538714 2.05245 -1.44351 -0.55642 -0.798752 0.228893 + 0.588596 2.00453 -1.39151 -0.898385 -0.436873 0.0452392 + 0.531356 2.07762 -1.31671 -0.753587 -0.654347 0.062748 + 0.400545 2.05461 -1.39905 0.360664 -0.803443 -0.47371 + 0.400301 2.06788 -1.43764 0.354171 -0.892785 -0.278385 + 0.426899 2.08626 -1.47047 0.106958 -0.971244 -0.212707 + 0.47773 2.07946 -1.47809 -0.393151 -0.918755 0.0363416 + 0.445089 2.02378 -1.34266 0.518758 -0.456248 -0.723 + 0.388764 1.99841 -1.35531 0.279624 -0.388313 -0.87808 + 0.319803 2.01877 -1.40457 0.315089 -0.808891 -0.496401 + 0.359019 2.06661 -1.50784 0.373913 -0.898965 -0.228146 + 0.385616 2.08499 -1.54067 0.255332 -0.966667 0.0189735 + 0.502044 2.03843 -1.29442 0.201838 -0.365986 -0.908469 + 0.412598 1.90184 -1.34124 0.301508 0.0049376 -0.953451 + 0.356273 1.87655 -1.35384 -0.242239 -0.43785 -0.865799 + 0.289944 1.91605 -1.33405 -0.186541 -0.539196 -0.821261 + 0.308022 1.96257 -1.36083 0.10913 -0.57836 -0.80845 + 0.531356 2.07762 -1.31671 0.565559 -0.684525 -0.459966 + 0.575856 2.0112 -1.45386 -0.800007 -0.554324 0.229596 + 0.580338 1.98159 -1.50598 -0.856886 -0.50255 0.114844 + 0.63432 1.85705 -1.49726 -0.944821 -0.325087 0.0403969 + 0.697732 1.64315 -1.30438 -0.768268 -0.612395 -0.186378 + 0.514872 2.03813 -1.48851 -0.659248 -0.721121 0.213018 + 0.497177 2.05931 -1.52979 -0.565527 -0.824655 0.011116 + 0.562643 2.00285 -1.54721 -0.787953 -0.614582 0.037663 + 0.62704 1.86132 -1.54027 -0.920635 -0.387396 0.0485341 + 0.695448 1.66118 -1.35421 -0.862039 -0.496172 -0.103452 + 0.75621 1.58202 -1.2999 -0.267214 -0.962764 -0.0410026 + 0.439282 2.08334 -1.53762 -0.191282 -0.974035 0.121109 + 0.51533 2.05069 -1.57487 -0.607573 -0.792174 -0.0575836 + 0.555363 2.00713 -1.59022 -0.81299 -0.582006 0.0177664 + 0.439486 2.08755 -1.50251 -0.115273 -0.992837 0.031416 + 0.385413 2.08078 -1.57577 0.138568 -0.981181 0.134473 + 0.457435 2.07473 -1.5827 -0.229298 -0.967001 0.111045 + 0.515561 2.0499 -1.62109 -0.53729 -0.841135 0.0617415 + 0.555594 2.00625 -1.63649 -0.827284 -0.561476 0.0185904 + 0.297377 2.03902 -1.49545 0.35498 -0.912076 -0.205198 + 0.29011 2.04489 -1.55221 0.393179 -0.915676 -0.0833482 + 0.3657 2.07343 -1.60525 0.177192 -0.980202 0.0883553 + 0.359616 2.06797 -1.64419 0.124811 -0.987634 0.0948761 + 0.451351 2.06927 -1.62164 -0.148316 -0.980866 0.12611 + 0.258161 1.99109 -1.39224 0.259526 -0.876804 -0.404798 + 0.166984 1.95299 -1.35484 0.273097 -0.880025 -0.388553 + 0.140569 1.94325 -1.36118 0.523372 -0.83758 -0.156656 + 0.270961 2.02929 -1.5018 0.437071 -0.889907 -0.130519 + 0.239043 1.95976 -1.34897 -0.00762572 -0.667344 -0.74471 + 0.147866 1.92165 -1.31156 -0.00968685 -0.754085 -0.656706 + 0.112991 1.89426 -1.27811 0.0651212 -0.828291 -0.556502 + 0.078295 1.88988 -1.28734 0.486043 -0.831921 -0.267713 + 0.152396 1.95209 -1.41768 0.604537 -0.796573 -0.00249135 + 0.220964 1.91315 -1.32224 -0.1379 -0.589326 -0.796039 + 0.186089 1.88576 -1.28879 -0.161239 -0.700465 -0.695234 + 0.099451 1.85062 -1.21534 0.121784 -0.827132 -0.548655 + 0.064756 1.84625 -1.22456 0.345297 -0.803886 -0.48429 + 0.307145 1.88639 -1.30329 -0.0763115 -0.738844 -0.669542 + 0.090122 1.89871 -1.34383 0.601238 -0.796726 -0.0611623 + 0.171544 1.96768 -1.46809 0.512808 -0.85304 -0.0966938 + 0.270397 2.03754 -1.58169 0.41276 -0.904147 -0.110213 + 0.087235 1.90525 -1.39075 0.549947 -0.825664 -0.125846 + 0.171197 1.97345 -1.51008 0.481269 -0.865152 -0.14104 + 0.162867 1.97594 -1.54879 0.44374 -0.873146 -0.20177 + 0.262067 2.04011 -1.62035 0.38276 -0.920835 -0.0745459 + 0.02884 1.85513 -1.35635 0.327307 -0.941844 -0.0761579 + 0.086888 1.91102 -1.43274 0.567938 -0.815084 -0.114392 + 0.089782 1.91973 -1.48143 0.561941 -0.812529 -0.154978 + 0.173147 1.99886 -1.61009 0.431061 -0.885795 -0.171911 + 0.249812 2.03641 -1.65153 0.357099 -0.930957 -0.0761602 + -0.028838 1.8545 -1.31385 -0.210111 -0.977045 0.0351617 + -0.028838 1.85513 -1.35634 -0.348063 -0.934808 -0.0706067 + 0.031734 1.86393 -1.40499 0.337605 -0.933536 -0.120551 + 0.031734 1.86779 -1.44848 0.31907 -0.935751 -0.150211 + 0.100061 1.94265 -1.54273 0.566829 -0.807746 -0.162021 + -0.011004 1.92279 -1.16193 0.000143575 -0.91209 0.409991 + 0.994443 1.63158 -1.25994 0.451141 -0.445626 -0.773233 + 0.955513 1.48149 -1.19538 0.278587 -0.55692 -0.782451 + 0.874389 1.49643 -1.23266 0.306049 -0.442079 -0.843149 + 1.03052 1.69812 -1.27639 0.843935 -0.181655 0.504752 + 1.03288 1.78952 -1.25311 0.91013 -0.0638198 0.409378 + 1.00885 1.67572 -1.27419 0.305529 -0.381384 -0.872467 + 1.03288 1.78952 -1.25311 -0.216746 -0.128378 -0.96775 + 1.0202 1.61368 -1.22695 0.72889 -0.16296 -0.664954 + 0.922122 1.44708 -1.17038 0.256915 -0.513074 -0.818993 + 1.01446 1.69188 -1.20979 0.889155 0.0632542 0.453214 + 0.995087 1.68693 -1.18041 0.934164 0.201385 0.294589 + 0.995136 1.68804 -1.12174 0.938642 0.210084 0.273524 + 1.02713 1.86772 -1.23595 0.827111 -0.0210253 0.561645 + 0.992933 1.94976 -1.19305 0.708781 -0.0524788 0.703473 + 1.05983 1.83094 -1.29605 0.866174 -0.109213 0.487663 + 1.06221 1.92259 -1.27918 0.77134 -0.13212 0.622558 + 1.05748 1.73954 -1.31934 0.844177 -0.0109204 0.535954 + 1.09515 1.77972 -1.37113 0.936955 -0.161103 0.310098 + 1.09753 1.87136 -1.35425 0.820421 -0.209637 0.531942 + 1.12102 1.97158 -1.32344 0.747078 -0.25842 0.612448 + 1.02801 2.00471 -1.23623 0.730534 -0.171177 0.661073 + 1.05056 1.6794 -1.29078 0.719179 0.30666 0.623491 + 1.08036 1.67959 -1.33931 0.952271 0.0121125 0.305014 + 1.08457 1.69014 -1.39597 0.843293 -0.337756 -0.418065 + 1.09936 1.79026 -1.42779 0.817456 -0.444766 -0.365991 + 1.14099 1.87746 -1.41543 0.895959 -0.360931 0.258815 + 1.02216 1.67959 -1.28351 0.305812 0.00347126 0.952086 + 1.05968 1.62708 -1.22854 0.517828 0.615892 0.593744 + 1.07345 1.61946 -1.31076 0.942933 0.332733 -0.0129195 + 1.04813 1.6359 -1.39004 0.636789 -0.437044 -0.635211 + 1.03903 1.79188 -1.47559 0.66187 -0.559084 -0.499352 + 1.03127 1.62727 -1.22128 -0.294471 0.350689 0.88899 + 1.04195 1.61112 -1.2181 -0.0172773 -0.558898 0.829056 + 1.07094 1.61182 -1.22433 0.55557 0.69889 0.450437 + 1.08471 1.6042 -1.30653 -0.344203 0.874207 0.342471 + 1.06697 1.60458 -1.35498 0.910741 0.180925 -0.371236 + 0.970943 1.60308 -1.27899 -0.246095 -0.831474 0.498084 + 1.0649 1.61489 -1.27083 0.065591 -0.996733 -0.0471223 + 1.09389 1.61568 -1.277 -0.931783 -0.287204 -0.222022 + 1.07094 1.61182 -1.22433 0.0094432 -0.997581 -0.0688635 + 0.974214 1.60453 -1.30429 0.153899 -0.967906 0.198678 + 1.06817 1.61633 -1.29612 0.0398838 -0.998653 -0.0331873 + 1.07614 1.61597 -1.3255 -0.632925 -0.737396 0.235907 + 0.958138 1.59199 -1.32117 0.0683383 -0.826753 0.558399 + 1.05513 1.61691 -1.31914 0.149368 -0.986403 0.0685423 + 1.06311 1.61647 -1.34857 -0.252598 -0.914244 0.316782 + 1.06697 1.60458 -1.35498 -0.715491 -0.465826 0.520653 + 0.916015 1.58052 -1.33811 -0.0512089 -0.880662 0.470969 + 1.0045 1.56971 -1.36039 0.384251 -0.865048 0.322558 + 1.03906 1.60429 -1.33608 0.42292 -0.860697 0.283443 + 1.04445 1.60833 -1.36107 0.66917 -0.639706 -0.378136 + 0.999675 1.61762 -1.41156 0.577824 -0.513928 -0.634032 + 0.874885 1.58171 -1.35816 -0.155836 -0.935521 0.317042 + 0.869803 1.55489 -1.40731 -0.117366 -0.951148 0.285557 + 0.962381 1.55824 -1.37732 0.0737749 -0.961406 0.265058 + 0.962586 1.55538 -1.43136 0.16705 -0.984224 -0.0582934 + 1.00391 1.56712 -1.43049 0.500222 -0.861933 -0.0827651 + 1.00949 1.57435 -1.40242 0.746686 -0.664781 0.0229117 + 0.797842 1.56298 -1.45753 -0.373286 -0.8553 0.359333 + 0.828673 1.55607 -1.42736 -0.435269 -0.785725 0.439519 + 0.779727 1.56951 -1.42564 -0.419993 -0.901678 0.102872 + 0.764601 1.55928 -1.50431 -0.560087 -0.819925 0.118428 + 0.795433 1.55237 -1.47414 -0.408857 -0.847247 0.339128 + 0.718965 1.64867 -1.47995 -0.833241 -0.547865 -0.0745153 + 0.709268 1.66856 -1.55219 -0.910085 -0.336092 0.242461 + 0.741883 1.56683 -1.54499 -0.772004 -0.538919 0.337011 + 0.748333 1.58493 -1.27294 -0.168059 -0.98413 0.0569621 + 0.711105 1.59853 -1.28851 -0.392707 -0.580329 -0.713442 + 0.697732 1.64315 -1.30438 -0.36092 -0.406732 -0.839229 + 0.999675 1.61762 -1.41156 -0.606195 -0.520986 0.600917 + 0.617342 1.88121 -1.61252 -0.90865 -0.416987 0.0218258 + 0.614695 1.88295 -1.65654 -0.924023 -0.346765 0.161047 + 0.68655 1.67611 -1.59288 -0.899378 -0.247155 0.360602 + 0.735827 1.56272 -1.57048 -0.763838 -0.554399 0.330445 + 0.789377 1.54835 -1.49958 -0.338769 -0.907886 0.246939 + 0.552946 2.00791 -1.68057 -0.798235 -0.598307 0.069638 + 0.550943 2.00401 -1.7274 -0.801423 -0.589201 0.10278 + 0.602854 1.87946 -1.70009 -0.934379 -0.315812 0.16492 + 0.674709 1.67271 -1.63638 -0.903988 -0.220834 0.366111 + 0.510269 2.04669 -1.66974 -0.477782 -0.872512 0.102211 + 0.508265 2.04278 -1.71657 -0.476349 -0.872615 0.107861 + 0.550714 1.99679 -1.7715 -0.802137 -0.589271 0.0966212 + 0.602625 1.87233 -1.74413 -0.95172 -0.27653 0.13327 + 0.446058 2.06606 -1.67028 -0.136581 -0.986829 0.0866803 + 0.440412 2.06276 -1.71117 -0.132052 -0.985838 0.103375 + 0.507865 2.03663 -1.76551 -0.457713 -0.86867 0.189502 + 0.514368 2.02202 -1.8028 -0.577323 -0.808095 0.11696 + 0.557217 1.98227 -1.80875 -0.824748 -0.543819 0.155086 + 0.34736 2.06418 -1.67543 0.140809 -0.988981 0.0457112 + 0.341714 2.06088 -1.71631 0.118041 -0.992768 0.0218711 + 0.338668 2.061 -1.74972 0.081344 -0.996683 0.00225337 + 0.440012 2.0566 -1.76011 -0.176853 -0.979986 0.091382 + 0.251153 2.04122 -1.70027 0.319286 -0.94645 -0.0478393 + 0.248108 2.04134 -1.73368 0.381642 -0.924035 -0.022558 + 0.264373 2.05085 -1.77315 0.314288 -0.945223 -0.0881893 + 0.339247 2.05993 -1.79147 0.030166 -0.998423 -0.0473315 + 0.174488 2.00368 -1.65883 0.538045 -0.842662 0.0206794 + 0.189027 2.00479 -1.72437 0.501598 -0.864757 -0.0243829 + 0.205292 2.0143 -1.76384 0.356518 -0.923188 -0.143591 + 0.265035 2.05477 -1.80713 0.228708 -0.956795 -0.179543 + 0.339909 2.06385 -1.82546 -0.000285224 -0.995065 -0.0992229 + 0.111065 1.95909 -1.59961 0.587067 -0.809264 -0.0210554 + 0.125604 1.96012 -1.66519 0.335336 -0.92672 -0.169525 + 0.187894 2.01719 -1.79183 0.169331 -0.918047 -0.358491 + 0.247637 2.05774 -1.83508 0.26027 -0.935877 -0.237474 + 0.042738 1.88424 -1.50536 0.33673 -0.88782 -0.313669 + 0.042738 1.90673 -1.53852 0.0774374 -0.866322 -0.493446 + 0.040862 1.9282 -1.58431 -0.118476 -0.798496 -0.590226 + 0.123728 1.98159 -1.71098 -0.161344 -0.893084 -0.419963 + -0.031751 1.86788 -1.44843 -0.348314 -0.926419 -0.142913 + -0.042737 1.88423 -1.50535 -0.331087 -0.895377 -0.297794 + -0.042737 1.90673 -1.53852 0.13453 -0.849144 -0.510741 + -0.040873 1.9282 -1.58431 0.125077 -0.810713 -0.571926 + 0.040862 1.96688 -1.60749 -0.334689 -0.645822 -0.68622 + -0.031751 1.86393 -1.40499 -0.339445 -0.932228 -0.12541 + -0.100078 1.94265 -1.54273 -0.565744 -0.808957 -0.159757 + -0.111065 1.95909 -1.5996 -0.672005 -0.740429 0.0132315 + -0.125604 1.96012 -1.66519 -0.338467 -0.924021 -0.177833 + -0.12374 1.98159 -1.71098 0.0467623 -0.904869 -0.423113 + -0.089799 1.91981 -1.48138 -0.52149 -0.834869 -0.176187 + -0.162859 1.97594 -1.54879 -0.446653 -0.870728 -0.205752 + -0.173139 1.99886 -1.61009 -0.464722 -0.872677 -0.149894 + -0.174485 2.00368 -1.65883 -0.534945 -0.844501 0.0255376 + -0.086886 1.91101 -1.43273 -0.566541 -0.816399 -0.111913 + -0.171197 1.97345 -1.51008 -0.483083 -0.864242 -0.140419 + -0.262059 2.04011 -1.62035 -0.357959 -0.930292 -0.0801356 + -0.249804 2.03641 -1.65153 -0.348048 -0.935789 -0.0562269 + -0.25115 2.04123 -1.70028 -0.346664 -0.937405 -0.033101 + -0.087233 1.90524 -1.39074 -0.527614 -0.838987 -0.13313 + -0.171544 1.96768 -1.46809 -0.512997 -0.852862 -0.0972679 + -0.290109 2.04489 -1.55221 -0.392271 -0.916058 -0.0834259 + -0.270397 2.03754 -1.58169 -0.4122 -0.904524 -0.109213 + -0.031728 1.84797 -1.26694 0.437367 -0.897671 -0.0538279 + -0.090123 1.89872 -1.34384 -0.6065 -0.791501 -0.0753859 + -0.152415 1.95209 -1.41768 -0.604237 -0.7968 -0.0028008 + -0.064756 1.84625 -1.22456 0.0618531 -0.984561 0.163748 + -0.078296 1.88988 -1.28734 -0.788453 -0.592911 -0.163702 + -0.140588 1.94325 -1.36118 -0.523398 -0.837579 -0.156575 + -0.270981 2.02929 -1.5018 -0.437137 -0.889871 -0.130543 + -0.044032 1.92098 -1.1196 -0.0115868 -0.707289 0.706829 + -0.055769 1.94427 -1.11555 -0.910722 -0.180195 0.371638 + -0.099451 1.85062 -1.21534 -0.0480097 -0.996661 -0.0660425 + -0.112991 1.89426 -1.27811 -0.0651286 -0.828299 -0.556488 + -0.166982 1.95299 -1.35484 -0.273241 -0.880027 -0.388448 + -0.011004 2.20909 -0.926224 0.7156 -0.443972 0.539263 + -0.186089 1.88576 -1.28879 0.161232 -0.700466 -0.695235 + -0.220969 1.91315 -1.32224 0.137791 -0.589257 -0.796109 + -0.147871 1.92165 -1.31156 0.00972485 -0.754059 -0.656734 + -0.258158 1.99109 -1.39224 -0.259558 -0.876762 -0.404868 + -0.297374 2.03902 -1.49545 -0.35527 -0.91204 -0.204857 + -0.385413 2.08078 -1.57577 -0.138565 -0.981181 0.134478 + -0.289946 1.91605 -1.33405 0.277019 -0.573605 -0.770868 + -0.239048 1.95976 -1.34897 0.00738439 -0.667543 -0.744535 + -0.319803 2.01877 -1.40457 -0.317686 -0.806755 -0.498218 + -0.359019 2.06661 -1.50784 -0.374431 -0.899556 -0.224946 + -0.385615 2.08499 -1.54067 -0.255338 -0.966666 0.0189713 + -0.307158 1.88639 -1.30328 0.0762721 -0.738896 -0.669489 + 1.04089 1.60615 -1.42989 0.816785 -0.57681 -0.0123572 + 1.03531 1.59883 -1.45802 0.720083 -0.692699 -0.0406009 + 1.07254 1.68849 -1.48572 0.460321 0.326474 0.825542 + 0.958147 1.58084 -1.55326 0.318838 -0.928762 -0.189058 + 0.974159 1.59288 -1.59131 0.252233 -0.962968 -0.0952475 + 1.05132 1.61087 -1.49608 0.251025 -0.956782 -0.146815 + 1.09371 1.62534 -1.52933 0.734313 -0.600706 0.316129 + 1.11344 1.68017 -1.5459 0.899975 -0.129682 0.416207 + 0.91682 1.56909 -1.55411 0.230899 -0.95778 -0.171298 + 0.854296 1.57472 -1.65427 0.127203 -0.985126 -0.115527 + 0.984777 1.59709 -1.6334 0.217578 -0.976041 0.00205133 + 1.06806 1.61524 -1.58263 0.280751 -0.959757 -0.00679284 + 1.11045 1.62969 -1.61588 0.571944 -0.818042 0.0607276 + 0.870008 1.5521 -1.46128 0.102568 -0.994519 -0.0203004 + 0.835008 1.54712 -1.48826 0.0904825 -0.992795 0.0785595 + 0.88182 1.56411 -1.58109 0.333728 -0.928299 -0.163972 + 0.822507 1.53543 -1.53941 0.195749 -0.97751 0.0784601 + 0.808802 1.53514 -1.5703 0.149093 -0.97645 -0.15594 + 0.868116 1.5639 -1.61192 0.561916 -0.744045 -0.361451 + 0.776876 1.53665 -1.55073 -0.327038 -0.918534 0.222127 + 0.766598 1.5343 -1.58024 -0.239272 -0.970949 0.00269664 + 0.780273 1.54606 -1.61161 0.13826 -0.915184 -0.378579 + 0.765583 1.55312 -1.63144 0.167659 -0.857169 -0.486982 + 0.853425 1.57097 -1.63176 -0.00466186 -0.959275 -0.282436 + 0.708811 1.56323 -1.62117 -0.773408 -0.51719 0.366543 + 0.698533 1.56096 -1.65062 -0.690655 -0.685795 0.229522 + 0.738069 1.5453 -1.62151 -0.133907 -0.977187 -0.164845 + 0.710916 1.55531 -1.66445 0.00711219 -0.924414 -0.381325 + 0.750306 1.56372 -1.6498 0.234349 -0.853668 -0.465114 + 0.647693 1.67322 -1.68706 -0.924547 -0.16637 0.342832 + 0.67138 1.57105 -1.69351 -0.72205 -0.660574 0.205637 + 0.594177 1.86686 -1.79246 -0.96086 -0.237148 0.143211 + 0.639244 1.66784 -1.73534 -0.965609 -0.220461 0.137828 + 0.66662 1.5694 -1.74905 -0.563861 -0.822548 -0.0739995 + 0.695639 1.56591 -1.6828 0.0581625 -0.941151 -0.332944 + 0.751176 1.56747 -1.67231 0.050207 -0.994112 -0.096026 + 0.594023 1.85066 -1.8352 -0.96658 -0.252292 0.0455186 + 0.634484 1.66618 -1.79088 -0.959732 -0.279773 0.0253176 + 0.67391 1.57456 -1.78639 -0.470853 -0.849224 -0.238989 + 0.702929 1.57108 -1.72015 0.0412472 -0.996137 -0.0775247 + 0.768767 1.56808 -1.72116 0.0530425 -0.996764 -0.060392 + 0.557063 1.96606 -1.85148 -0.883195 -0.456076 0.109363 + 0.552771 1.96938 -1.88103 -0.887925 -0.459138 -0.0279655 + 0.594288 1.85134 -1.88378 -0.959408 -0.277764 -0.0488163 + 0.634749 1.66686 -1.83946 -0.927225 -0.358029 -0.10986 + 0.510076 2.02542 -1.8323 -0.604471 -0.796521 -0.0129642 + 0.555563 1.97222 -1.92336 -0.894779 -0.431104 -0.116272 + 0.59708 1.85427 -1.92606 -0.943277 -0.295349 -0.151648 + 0.638298 1.6843 -1.89185 -0.883089 -0.410002 -0.228147 + 0.677459 1.59199 -1.83878 -0.51054 -0.791386 -0.336239 + 0.44059 2.05553 -1.80185 -0.227041 -0.973863 0.00660674 + 0.516572 2.02379 -1.88107 -0.665881 -0.737829 -0.110502 + 0.520779 2.02929 -1.92639 -0.654446 -0.741409 -0.148369 + 0.55977 1.97772 -1.96868 -0.890791 -0.400217 -0.215214 + 0.603326 1.86842 -1.97277 -0.92247 -0.311388 -0.228225 + 0.447086 2.0539 -1.85062 -0.268111 -0.961703 -0.0569544 + 0.449094 2.05791 -1.89177 -0.280381 -0.951832 -0.124101 + 0.522501 2.03545 -1.97427 -0.612652 -0.773905 -0.160398 + 0.565518 1.9927 -2.01062 -0.860653 -0.477821 -0.175963 + 0.609074 1.8834 -2.01471 -0.891675 -0.341021 -0.297691 + 0.341917 2.06786 -1.86661 -0.0445563 -0.984371 -0.170377 + 0.340549 2.07585 -1.89925 -0.0944188 -0.969281 -0.227112 + 0.450816 2.06408 -1.93966 -0.300418 -0.939814 -0.16278 + 0.522957 2.04655 -2.01909 -0.582695 -0.798623 -0.150557 + 0.565974 2.00379 -2.05543 -0.830559 -0.50032 -0.244648 + 0.246269 2.06574 -1.86774 0.12086 -0.933249 -0.338289 + 0.259559 2.08354 -1.90636 0.0402131 -0.940388 -0.337718 + 0.338979 2.08419 -1.93909 -0.142759 -0.958185 -0.247996 + 0.449246 2.07242 -1.9795 -0.302975 -0.937516 -0.171086 + 0.17614 2.05015 -1.86073 0.0867517 -0.912287 -0.400258 + 0.18943 2.06804 -1.89932 0.143896 -0.918931 -0.367231 + 0.261 2.09316 -1.93783 -0.00387187 -0.955782 -0.294049 + 0.34042 2.09381 -1.97056 -0.162819 -0.948114 -0.273074 + 0.111974 2.01456 -1.77988 -0.27701 -0.859301 -0.429962 + 0.171277 2.07515 -1.92282 -0.0161006 -0.916453 -0.399819 + 0.242848 2.10027 -1.96134 0.0538339 -0.947297 -0.315802 + 0.337427 2.1054 -2.00943 -0.182357 -0.934912 -0.304442 + 0.437442 2.0831 -2.0248 -0.318361 -0.928611 -0.190599 + 0.035854 1.99695 -1.65639 -0.258966 -0.831457 -0.491545 + 0.106966 2.04463 -1.82877 -0.320906 -0.852873 -0.411858 + 0.158061 2.0999 -1.9735 -0.0158891 -0.920281 -0.390935 + 0.247097 2.11101 -1.99235 -0.0366604 -0.920525 -0.38896 + 0.341676 2.11606 -2.04048 -0.225425 -0.924514 -0.30734 + -0.040873 1.96688 -1.60749 0.447342 -0.605901 -0.657852 + -0.035869 1.99695 -1.65639 0.259909 -0.833199 -0.488085 + 0.035854 2.01767 -1.68967 -0.294139 -0.83197 -0.470434 + 0.093749 2.06938 -1.87943 -0.259546 -0.892635 -0.368563 + -0.111985 2.01456 -1.77988 0.275051 -0.855166 -0.43936 + -0.106981 2.04463 -1.82877 0.292868 -0.860237 -0.417396 + -0.093765 2.06929 -1.87949 0.2604 -0.89144 -0.370846 + -0.035869 2.01767 -1.68967 0.365537 -0.808481 -0.461239 + 0.025987 2.03612 -1.72583 -0.168121 -0.904856 -0.391115 + -0.187894 2.01719 -1.79183 -0.174317 -0.913408 -0.36783 + -0.17614 2.05015 -1.86073 -0.108508 -0.915471 -0.387478 + -0.171277 2.07515 -1.92282 0.011308 -0.913346 -0.407028 + -0.189024 2.00479 -1.72437 -0.486474 -0.872838 -0.0386927 + -0.205292 2.0143 -1.76384 -0.356607 -0.923126 -0.143773 + -0.247637 2.05774 -1.83508 -0.185314 -0.943872 -0.273431 + -0.248104 2.04134 -1.73368 -0.394612 -0.918022 -0.0389338 + -0.264373 2.05085 -1.77315 -0.314272 -0.94523 -0.088168 + -0.265035 2.05477 -1.80713 -0.228408 -0.956859 -0.179586 + -0.341714 2.06088 -1.71631 -0.105217 -0.993904 0.0329194 + -0.338669 2.061 -1.74972 -0.0692507 -0.997581 -0.00607547 + -0.339247 2.05993 -1.79147 -0.0202501 -0.999058 -0.0383757 + -0.339909 2.06385 -1.82546 0.0163608 -0.993846 -0.109556 + -0.34736 2.06418 -1.67543 -0.143915 -0.988425 0.0480109 + -0.440412 2.06276 -1.71117 0.12431 -0.986141 0.109878 + -0.440012 2.0566 -1.76011 0.162983 -0.983239 0.0817146 + -0.44059 2.05553 -1.80185 0.215503 -0.976374 0.0158792 + -0.447086 2.0539 -1.85062 0.262667 -0.962886 -0.0621016 + -0.359616 2.06797 -1.64419 -0.133723 -0.987247 0.0863842 + -0.446058 2.06606 -1.67028 0.140596 -0.985975 0.0899251 + -0.508265 2.04278 -1.71657 0.474703 -0.873774 0.105713 + -0.507865 2.03663 -1.76551 0.482399 -0.865182 0.136935 + -0.510076 2.02542 -1.8323 0.61025 -0.792073 0.0146968 + -0.3657 2.07343 -1.60525 -0.177184 -0.980204 0.088356 + -0.451351 2.06927 -1.62164 0.150486 -0.980798 0.124052 + -0.515571 2.0499 -1.62109 0.543541 -0.836332 0.0714971 + -0.510278 2.04669 -1.66974 0.492073 -0.865777 0.0910711 + -0.550943 2.00401 -1.7274 0.804281 -0.585967 0.0988655 + -0.457435 2.07473 -1.5827 0.229321 -0.966998 0.111025 + -0.515322 2.05069 -1.57487 0.576369 -0.816993 -0.0179433 + -0.555603 2.00625 -1.63649 0.817199 -0.575558 0.0303213 + -0.552956 2.00791 -1.68057 0.793023 -0.606439 0.0578475 + -0.439282 2.08334 -1.53762 0.191301 -0.974031 0.121108 + -0.497169 2.05931 -1.52979 0.558127 -0.829746 0.00398275 + -0.562635 2.00285 -1.54721 0.80071 -0.598515 0.0253719 + -0.555354 2.00713 -1.59022 0.821027 -0.569684 0.0370653 + -0.439484 2.08755 -1.50251 0.115367 -0.992835 0.0311252 + -0.47773 2.07946 -1.47809 0.392774 -0.91892 0.0362546 + -0.514858 2.03812 -1.4885 0.692738 -0.691325 0.205385 + -0.580324 1.98159 -1.50598 0.814622 -0.560088 -0.15064 + -0.63432 1.85705 -1.49726 0.921812 -0.387524 0.00933292 + -0.426897 2.08626 -1.47047 -0.106515 -0.971316 -0.212603 + -0.465143 2.07809 -1.44612 0.1193 -0.985214 -0.122965 + -0.538714 2.05245 -1.44351 0.55632 -0.798899 0.228624 + -0.575842 2.0112 -1.45386 0.771179 -0.440403 0.459704 + -0.600283 1.9196 -1.4594 0.922073 -0.387009 0.00237487 + -0.400301 2.06788 -1.43764 -0.317224 -0.909285 -0.269389 + -0.474158 2.07625 -1.40354 -0.000841495 -0.994941 -0.100453 + -0.547729 2.0507 -1.40088 0.595961 -0.794513 0.116533 + -0.588591 2.00453 -1.39152 0.893102 -0.445823 0.0600933 + -0.400545 2.05461 -1.39905 -0.351901 -0.801865 -0.482884 + -0.474401 2.06298 -1.36495 -0.445921 -0.790117 -0.420558 + -0.531356 2.07762 -1.31671 0.190772 -0.863539 -0.466805 + -0.572218 2.03154 -1.3073 0.643406 -0.517911 -0.563734 + -0.308024 1.96257 -1.36083 0.0454341 -0.434275 -0.899634 + -0.388766 1.99849 -1.35526 -0.301134 -0.3669 -0.880172 + -0.445089 2.02378 -1.34266 -0.518481 -0.45634 -0.72314 + -0.502044 2.03843 -1.29442 -0.201851 -0.365996 -0.908462 + -0.516749 1.9941 -1.29365 -0.16422 -0.00214567 -0.986421 + -0.356275 1.87655 -1.35384 0.209898 -0.484645 -0.849154 + -0.412598 1.90184 -1.34124 -0.301528 0.00494521 -0.953444 + -0.427303 1.85751 -1.34046 -0.0279439 -0.123754 -0.991919 + -0.307158 1.88639 -1.30328 0.544734 -0.814191 -0.200894 + -0.373487 1.84689 -1.32308 0.417849 -0.900289 -0.12199 + -0.436509 1.85922 -1.26723 0.429557 -0.543335 0.721296 + -0.49098 1.81562 -1.26952 0.751295 -0.349062 0.5601 + -0.427958 1.8033 -1.32537 0.457793 -0.606249 0.650299 + -0.475914 1.89309 -1.2211 0.782113 -0.491869 0.382575 + -0.500833 1.82957 -1.20268 0.939012 -0.332084 0.0893095 + -0.51418 1.75007 -1.25658 0.840412 -0.540167 0.0438927 + -0.427958 1.8033 -1.32537 0.652006 -0.0819838 0.753769 + -0.422755 1.953 -1.21965 0.844536 0.00795385 0.535439 + -0.45742 1.9356 -1.16112 0.9233 -0.216313 0.317374 + -0.482339 1.87208 -1.1427 0.945903 -0.307456 0.103623 + -0.506073 1.81232 -1.1118 0.958146 -0.27496 0.0797017 + -0.524033 1.76402 -1.18974 0.942365 -0.331354 0.0464063 + -0.38335 1.9192 -1.26572 0.640686 0.0840649 0.763187 + -0.406668 2.21423 -1.56392 0.802703 0.471233 0.365524 + -0.458864 2.00335 -1.18766 0.948296 0.193561 0.251535 + -0.470622 2.07197 -1.13612 0.989595 0.086953 0.114639 + -0.469178 2.00413 -1.10962 0.972673 0.00364498 0.232153 + -0.307158 1.88639 -1.30328 0.314201 -0.301025 0.900367 + -0.427958 1.8033 -1.32537 0.102436 -0.26789 -0.957988 + -0.503793 1.84717 -1.33935 -0.120804 0.0310537 -0.992191 + -0.548917 1.83148 -1.32838 -0.357764 0.0485685 -0.932548 + -0.561873 1.97841 -1.28268 0.147875 -0.106814 -0.983221 + -0.504448 1.79296 -1.32426 0.174015 -0.517839 -0.837593 + -0.541439 1.73998 -1.3119 0.364933 -0.463747 -0.807318 + -0.597746 1.77671 -1.30732 -0.189676 0.012338 -0.981769 + -0.589436 1.89582 -1.28503 0.103275 -0.0258392 -0.994317 + -0.599781 1.94896 -1.30966 0.87307 -0.263721 -0.410122 + -0.551171 1.69718 -1.24416 0.991708 -0.118923 0.0487045 + -0.542234 1.62171 -1.22585 0.780819 -0.375076 -0.499639 + -0.590268 1.68522 -1.29085 0.221149 -0.440923 -0.869873 + -0.631381 1.67812 -1.30036 -0.0164012 -0.488553 -0.87238 + -0.628198 1.74036 -1.30896 0.284703 -0.080724 -0.955211 + -0.541192 1.70115 -1.16484 0.992566 -0.116392 -0.0355904 + -0.532254 1.62568 -1.14653 0.996308 -0.0840098 0.0176845 + -0.556701 1.56805 -1.18832 0.482479 -0.752529 -0.448235 + -0.427958 1.8033 -1.32537 0.106893 -0.846721 -0.521189 + 0.998147 1.78121 -1.21072 0.176721 0.0027352 0.984257 + 0.973831 1.76895 -1.17167 0.931008 0.205379 0.301735 + 0.97388 1.77014 -1.11294 0.962471 0.214047 0.166836 + 0.948906 1.69815 -1.06444 0.65038 -0.758601 -0.0391053 + 0.97091 1.85955 -1.1818 0.645793 0.0168485 0.763327 + 0.947908 1.85511 -1.16152 0.872688 0.225909 0.432875 + 0.950398 1.84448 -1.0949 0.955143 0.277036 0.104658 + 0.940618 1.79502 -1.02983 0.988135 0.0332332 0.149946 + 0.9641 1.72068 -1.04788 0.953665 -0.172208 0.246715 + 0.901206 1.61571 -1.00085 0.845814 -0.530776 -0.0536267 + 0.965696 2.02809 -1.16413 0.73215 -0.09829 0.674014 + 0.937612 2.10506 -1.11184 0.459765 -0.284535 0.841223 + 0.944987 1.94571 -1.17164 0.118054 -0.164887 0.979222 + 0.914823 2.0173 -1.13822 0.454341 -0.170611 0.874338 + 0.918321 1.93126 -1.14001 0.856898 0.2115 0.470099 + 1.01448 2.0909 -1.18991 0.62502 -0.268693 0.732908 + 0.986391 2.16787 -1.13762 0.613835 -0.297592 0.731194 + 0.964182 2.25192 -1.0832 0.515252 -0.329734 0.791069 + 0.907448 2.17665 -1.07843 0.507999 -0.269674 0.818054 + 1.01446 1.69188 -1.20979 -0.601831 -0.101663 0.792126 + 1.10748 2.05776 -1.27712 0.655601 -0.30825 0.689325 + 1.09549 2.15062 -1.22155 0.636267 -0.307186 0.707673 + 1.07328 2.23468 -1.16714 0.605909 -0.333226 0.722381 + 1.16448 1.97777 -1.38457 0.876606 -0.270515 0.397974 + 1.17192 2.06806 -1.34315 0.851429 -0.241055 0.465792 + 1.15993 2.16082 -1.28762 0.792213 -0.25469 0.554556 + 1.15643 2.2665 -1.23506 0.773664 -0.244587 0.584483 + 1.05397 2.32482 -1.10727 0.575139 -0.330183 0.748462 + 1.17722 1.95109 -1.46175 0.928746 -0.342127 0.142757 + 1.18692 2.03124 -1.42838 0.943336 -0.220648 0.247853 + 1.19436 2.12152 -1.38695 0.912291 -0.221821 0.344267 + 1.20373 2.19955 -1.34889 0.87031 -0.266113 0.41442 + 1.20022 2.30514 -1.29638 0.823583 -0.222867 0.521576 + 1.13559 1.86389 -1.47411 0.772915 -0.587424 -0.239867 + 1.16166 1.92269 -1.53557 0.773735 -0.633217 -0.0192284 + 1.20451 1.99043 -1.53648 0.924552 -0.348469 0.154186 + 1.2142 2.0705 -1.50317 0.940541 -0.271985 0.203488 + 1.23862 2.16438 -1.46977 0.926123 -0.269104 0.264348 + 1.0651 1.85068 -1.53704 0.803781 -0.572182 0.162926 + 1.18043 1.92842 -1.63808 0.800181 -0.549045 0.24137 + 1.22327 1.99606 -1.63905 0.930457 -0.325114 0.168969 + 1.24255 2.08485 -1.60643 0.943292 -0.286116 0.168336 + 1.26697 2.17874 -1.57305 0.900717 -0.375908 0.217721 + 1.00259 1.73764 -1.46965 0.911143 -0.354519 -0.210083 + 1.03402 1.78122 -1.51992 0.819924 -0.155853 0.550849 + 0.98083 1.64894 -1.44662 0.914052 0.402404 0.0507898 + 1.01227 1.69252 -1.49689 0.506191 0.324629 0.798991 + 1.19025 1.85053 -1.68118 0.923312 -0.229289 0.308094 + 0.999675 1.61762 -1.41156 0.0173156 0.75015 0.661041 + 0.9164 1.63825 -0.984295 0.740895 -0.606086 0.289368 + 0.943193 1.68178 -0.955688 0.87374 -0.484211 0.0460162 + 0.912573 1.69183 -0.920301 -0.500376 -0.688659 0.52476 + 0.885779 1.6483 -0.948908 -0.301474 -0.649747 0.697812 + 0.901206 1.61571 -1.00085 0.425495 -0.704292 0.568267 + 0.942229 1.8297 -1.0013 0.994588 0.102939 0.0140512 + 0.944804 1.71646 -0.927156 0.999425 -0.0305215 -0.0147637 + 0.942828 1.68755 -0.866894 0.998141 -0.0411194 0.0449861 + 0.945445 1.76854 -0.856961 0.99584 0.0460406 0.0786322 + 0.934322 1.71336 -0.760589 0.598627 -0.707114 0.376344 + 0.920811 1.92063 -1.0734 0.925506 0.374322 0.0576395 + 0.930003 1.89001 -1.01636 0.953451 0.300533 0.0246987 + 0.947421 1.79745 -0.917232 0.994185 0.101218 0.0367644 + 0.882867 2.01003 -1.11103 0.861614 0.220036 0.457389 + 0.886784 1.98825 -1.04451 0.909922 0.407703 0.0762849 + 0.895976 1.95763 -0.987472 0.920109 0.390461 0.030656 + 0.935195 1.85775 -0.932285 0.962104 0.265439 0.0624326 + 0.879369 2.09615 -1.1092 0.321053 -0.253941 0.912381 + 0.845327 2.17518 -1.06869 0.448241 -0.259466 0.855428 + 0.849735 2.0802 -1.07638 0.878367 0.198379 0.434876 + 0.853651 2.05842 -1.00985 0.91679 0.398687 0.0233236 + 0.881246 1.99862 -0.951473 0.926245 0.376605 -0.0154823 + 0.879442 2.25536 -1.02896 0.267248 -0.391944 0.880317 + 0.845399 2.33448 -0.9884 0.0790563 -0.382344 0.920632 + 0.809396 2.42101 -0.952472 0.270372 -0.321581 0.90746 + 0.808738 2.24592 -1.02162 0.612162 -0.17746 0.770562 + 0.813146 2.15103 -1.02926 0.916703 0.217531 0.335167 + 0.936176 2.33064 -1.03375 0.491946 -0.322704 0.80861 + 0.91135 2.41981 -0.9836 0.385384 -0.286813 0.87705 + 0.875347 2.50634 -0.947673 0.339144 -0.271432 0.900725 + 0.84901 2.5959 -0.908795 0.348091 -0.260138 0.900645 + 0.776939 2.49672 -0.913018 0.150996 -0.336835 0.929377 + 1.02915 2.41408 -1.05708 0.530968 -0.318174 0.785391 + 1.01347 2.5095 -1.00474 0.499452 -0.26853 0.823674 + 0.987138 2.59905 -0.965853 0.474369 -0.204146 0.856328 + 1.11549 2.42714 -1.11729 0.705029 -0.262086 0.658972 + 1.09981 2.52255 -1.06495 0.684773 -0.222131 0.694077 + 1.10261 2.61414 -1.04439 0.712006 -0.102851 0.6946 + 0.958832 2.696 -0.930375 0.47887 -0.227707 0.84784 + 1.13711 2.35673 -1.17514 0.751653 -0.263745 0.60453 + 1.17913 2.52014 -1.17458 0.827472 -0.163829 0.537075 + 1.18193 2.61173 -1.15402 0.747321 -0.218951 0.627353 + 1.0743 2.71118 -1.00886 0.634746 -0.167597 0.754326 + 1.20076 2.44965 -1.23248 0.806375 -0.215933 0.550575 + 1.26461 2.50664 -1.301 0.707621 -0.297575 0.640876 + 1.25061 2.61971 -1.22144 0.662115 -0.340955 0.667348 + 1.17847 2.75048 -1.09314 0.681459 -0.21774 0.698715 + 1.26406 2.36205 -1.36495 0.827636 -0.300358 0.474135 + 1.33952 2.57633 -1.3355 0.677111 -0.40554 0.61405 + 1.32552 2.6894 -1.25595 0.644429 -0.334869 0.68744 + 1.24715 2.75846 -1.16056 0.64424 -0.279807 0.711802 + 1.15569 2.85747 -1.04705 0.643262 -0.174932 0.745394 + 1.24798 2.24232 -1.43177 0.885961 -0.32003 0.33564 + 1.33449 2.41726 -1.46819 0.768124 -0.41294 0.489354 + 1.4176 2.48106 -1.51169 0.562564 -0.550139 0.617146 + 1.42262 2.64013 -1.379 0.606178 -0.441856 0.661295 + 1.35603 2.76998 -1.24792 0.598128 -0.363393 0.714275 + 1.31841 2.29753 -1.535 0.812886 -0.464384 0.351518 + 1.43417 2.38079 -1.61921 0.552759 -0.682558 0.478092 + 1.53345 2.52886 -1.54308 0.396722 -0.594562 0.699363 + 1.49076 2.72627 -1.3838 0.454796 -0.502434 0.735337 + 1.42417 2.85621 -1.25266 0.47138 -0.451471 0.757611 + 1.28924 2.1782 -1.66811 0.884098 -0.433425 0.174684 + 1.34068 2.29708 -1.63003 0.761071 -0.612964 0.212241 + 1.38679 2.33015 -1.6615 0.589487 -0.744131 0.314283 + 1.52086 2.36081 -1.75201 0.317471 -0.810465 0.492299 + 1.55002 2.42859 -1.6506 0.319272 -0.73415 0.59924 + 1.26074 2.09963 -1.71582 0.932064 -0.343325 0.115697 + 1.31454 2.19299 -1.78813 0.81329 -0.555462 0.173264 + 1.36065 2.22605 -1.8196 0.626467 -0.72319 0.290751 + 1.47347 2.31008 -1.79434 0.436712 -0.833116 0.339412 + 1.24146 2.01092 -1.74839 0.965315 -0.257614 0.0424489 + 1.24278 2.03662 -1.8647 0.939585 -0.338999 -0.0475287 + 1.28605 2.1145 -1.83579 0.901687 -0.431892 0.0207403 + 1.29907 2.1611 -1.92471 0.807038 -0.545618 -0.225813 + 1.39568 2.23147 -1.89478 0.597069 -0.780679 -0.184524 + 1.21483 1.91541 -1.79335 0.978002 -0.208562 -0.0036083 + 1.21616 1.94119 -1.90961 0.974387 -0.219436 -0.0491665 + 1.20434 1.9139 -1.99994 0.980805 -0.158822 -0.113129 + 1.21327 1.99216 -2.01029 0.96728 -0.169182 -0.189066 + 1.25581 2.08331 -1.95357 0.909478 -0.351334 -0.222294 + 1.20517 1.85808 -1.77485 0.977937 -0.203172 0.048575 + 1.18278 1.76785 -1.93897 0.9789 -0.193564 -0.0654797 + 1.17096 1.74047 -2.02934 0.959981 -0.25989 -0.104377 + 1.16752 1.80589 -2.15486 0.954694 -0.207466 -0.213347 + 1.17645 1.88415 -2.16522 0.942118 -0.0382446 -0.333092 + 1.17745 1.71176 -1.83562 0.936087 -0.350697 0.0274444 + 1.17311 1.71051 -1.92046 0.938578 -0.339105 -0.0638635 + 1.15142 1.68191 -2.03092 0.968679 -0.207435 -0.1365 + 1.16252 1.70413 -1.742 0.944067 -0.305173 0.124926 + 1.13874 1.64637 -1.84257 0.698468 -0.714866 -0.0333007 + 1.15142 1.68191 -2.03092 0.913985 -0.383838 -0.131527 + 1.1428 1.64929 -1.72542 0.852678 -0.512774 0.100018 + 1.11866 1.63277 -1.6602 0.472415 -0.881191 -0.0180574 + 1.151 1.65245 -1.7697 0.728805 -0.680928 0.0719691 + 1.07868 1.61952 -1.62466 0.260139 -0.963641 -0.0610206 + 1.13374 1.64126 -1.6999 0.395596 -0.91711 0.0491234 + 1.09376 1.62793 -1.66441 0.262589 -0.964091 -0.0396832 + 1.13429 1.63956 -1.72157 0.593647 -0.799579 0.0908634 + 1.15155 1.65076 -1.79137 0.575327 -0.817291 -0.0321529 + 0.983657 1.59513 -1.65601 0.235754 -0.962681 0.132913 + 1.09264 1.62597 -1.68702 0.356762 -0.92549 0.12724 + 1.11412 1.62372 -1.75273 0.461114 -0.886532 0.0378739 + 1.10131 1.61933 -1.80392 0.429413 -0.899486 -0.0808002 + 1.05968 1.60678 -1.84059 0.378753 -0.924359 -0.0458907 + 0.962638 1.58518 -1.67937 0.158432 -0.978443 0.132473 + 1.07247 1.61012 -1.71818 0.354357 -0.923003 0.149987 + 1.05145 1.60017 -1.74154 0.307079 -0.949714 0.0612074 + 1.00982 1.58762 -1.7782 0.172976 -0.98369 -0.0493352 + 1.04654 1.60198 -1.86107 0.174137 -0.96499 -0.19614 + 0.862281 1.57804 -1.67641 0.0931563 -0.990595 -0.100212 + 0.90641 1.58098 -1.68711 0.0536302 -0.99854 -0.00642122 + 0.776752 1.5714 -1.74331 0.194425 -0.953838 -0.228891 + 0.783099 1.58057 -1.76098 0.174883 -0.95598 -0.235623 + 0.827227 1.58351 -1.77167 0.0109612 -0.984911 -0.172712 + 0.953589 1.58342 -1.78594 0.0390918 -0.990586 -0.131189 + 0.733873 1.5759 -1.7889 0.119775 -0.950791 -0.285747 + 0.740219 1.58506 -1.80657 0.219833 -0.880022 -0.420994 + 0.729381 1.60414 -1.84241 0.272837 -0.748053 -0.604961 + 0.782992 1.61007 -1.84089 -0.0277679 -0.867597 -0.496492 + 0.835885 1.59909 -1.83347 -0.0936769 -0.928144 -0.360239 + 0.72052 1.57168 -1.769 -0.00286543 -0.990885 -0.134677 + 0.690812 1.59621 -1.85868 -0.135229 -0.854711 -0.50118 + 0.679974 1.61528 -1.89451 0.377307 -0.765326 -0.521455 + 0.644544 1.69845 -1.93856 -0.850646 -0.419864 -0.316411 + 0.679974 1.61528 -1.89451 -0.933281 -0.34537 0.0985241 + 0.657005 1.72042 -1.98722 -0.799496 -0.443119 -0.405526 + 0.692435 1.63725 -1.94316 -0.716957 -0.539359 -0.441661 + 0.679974 1.61528 -1.89451 -0.726925 -0.53663 -0.428494 + 0.618961 1.9043 -2.05851 -0.866897 -0.378982 -0.323825 + 0.666892 1.74132 -2.03102 -0.734983 -0.471582 -0.487248 + 0.702546 1.66783 -1.99233 -0.0219185 -0.890527 -0.454403 + 0.628127 1.91379 -2.10014 -0.854525 -0.417905 -0.308451 + 0.680883 1.77302 -2.07412 -0.744353 -0.48553 -0.458475 + 0.716537 1.69952 -2.03542 -0.0872129 -0.839277 -0.536664 + 0.575139 2.01336 -2.097 -0.774972 -0.609114 -0.168518 + 0.575473 2.02009 -2.14067 -0.70299 -0.708263 -0.0645623 + 0.637969 1.92843 -2.1431 -0.846333 -0.47816 -0.234698 + 0.690725 1.78757 -2.11712 -0.788109 -0.507852 -0.347807 + 0.729336 1.72366 -2.08744 -0.192497 -0.878335 -0.437576 + 0.511152 2.05723 -2.06439 -0.485559 -0.867525 -0.107859 + 0.511486 2.06396 -2.10805 -0.547314 -0.820497 -0.16502 + 0.58823 2.00932 -2.18261 -0.751994 -0.654913 -0.0747964 + 0.650726 1.91757 -2.18509 -0.872408 -0.471314 -0.129487 + 0.434449 2.09469 -2.06367 -0.372701 -0.893503 -0.250493 + 0.506492 2.07895 -2.15301 -0.544495 -0.829369 -0.125188 + 0.508242 2.08118 -2.19707 -0.544658 -0.837964 -0.0341302 + 0.589979 2.01155 -2.22667 -0.746194 -0.657017 -0.107346 + 0.429455 2.10959 -2.10868 -0.372252 -0.89973 -0.227848 + 0.426015 2.12053 -2.14762 -0.374498 -0.918667 -0.125708 + 0.499475 2.08507 -2.24461 -0.506715 -0.861706 0.0265007 + 0.594652 2.01541 -2.26976 -0.708885 -0.703051 -0.0565841 + 0.338236 2.127 -2.07943 -0.267992 -0.909635 -0.317403 + 0.33785 2.1411 -2.11065 -0.303875 -0.90752 -0.289944 + 0.417248 2.12441 -2.19516 -0.410398 -0.908732 -0.0760271 + 0.48074 2.09326 -2.3066 -0.558767 -0.82853 0.0362838 + 0.510478 2.07515 -2.28504 -0.570969 -0.817278 0.07779 + 0.264106 2.12716 -2.02732 -0.114793 -0.897597 -0.425608 + 0.263721 2.14117 -2.05859 -0.136458 -0.902535 -0.408423 + 0.25955 2.15094 -2.07891 -0.144676 -0.906434 -0.396794 + 0.326549 2.15319 -2.1476 -0.3484 -0.901596 -0.256404 + 0.405947 2.13659 -2.23205 -0.483291 -0.867556 -0.117372 + 0.17507 2.11596 -2.00852 0.00177045 -0.90716 -0.420782 + 0.170899 2.12573 -2.02884 0.0719704 -0.910264 -0.407725 + 0.248157 2.16615 -2.10865 -0.108761 -0.934486 -0.33898 + 0.315156 2.1684 -2.17734 -0.35421 -0.900309 -0.252939 + 0.159007 2.13113 -2.04539 0.120753 -0.926079 -0.357487 + 0.236265 2.17147 -2.12526 0.0254303 -0.970293 -0.240592 + 0.295471 2.1831 -2.2082 -0.188415 -0.975883 -0.110237 + 0.38386 2.15237 -2.27137 -0.476518 -0.87343 -0.100257 + 0.458653 2.10904 -2.34592 -0.60858 -0.793344 0.0153674 + 0.127671 2.12562 -2.04185 -0.054145 -0.936223 -0.34721 + 0.211459 2.17238 -2.14525 0.139326 -0.979542 -0.145211 + 0.270665 2.18392 -2.22823 -0.0497684 -0.993653 -0.100876 + 0.364174 2.16698 -2.30229 -0.502063 -0.845702 -0.18089 + 0.426257 2.13531 -2.39723 -0.677894 -0.732475 -0.062769 + 0.083882 2.08784 -1.9156 -0.264595 -0.900368 -0.345436 + 0.100328 2.13502 -2.05032 -0.104897 -0.948047 -0.300338 + 0.146993 2.16015 -2.15325 0.0947447 -0.974619 -0.202835 + 0.180123 2.16687 -2.14169 0.186481 -0.962434 -0.197349 + 0.025987 2.05142 -1.76373 -0.208507 -0.901287 -0.379745 + 0.056539 2.09723 -1.92407 -0.239743 -0.91712 -0.318456 + 0.072668 2.13843 -2.06243 -0.0528516 -0.962844 -0.264835 + 0.119333 2.16347 -2.1654 -0.0430622 -0.975191 -0.217137 + 0.206692 2.18146 -2.25856 0.148823 -0.987598 -0.0500119 + -0.025977 2.03612 -1.72583 0.168117 -0.905339 -0.389998 + -0.025977 2.05142 -1.76373 0.276984 -0.88459 -0.375207 + 0.011625 2.06196 -1.78159 -0.138052 -0.892613 -0.429166 + 0.042178 2.10776 -1.94192 -0.197782 -0.939715 -0.278958 + -0.083873 2.08784 -1.9156 0.263369 -0.899651 -0.348231 + -0.05653 2.09723 -1.92407 0.240676 -0.915964 -0.321068 + -0.042178 2.10776 -1.94192 0.183491 -0.938271 -0.293221 + -0.011625 2.06196 -1.78159 0.1385 -0.894316 -0.42546 + 0.011625 2.08203 -1.81914 -0.45952 -0.767627 -0.446756 + -0.127671 2.12562 -2.04185 0.0642568 -0.920803 -0.384698 + -0.100328 2.13502 -2.05032 0.0741297 -0.945151 -0.31811 + -0.072668 2.13843 -2.06243 0.0536213 -0.962334 -0.266531 + -0.020866 2.11114 -1.94717 0.410788 -0.874217 -0.258839 + -0.011625 2.08203 -1.81914 0.647897 -0.649197 -0.398462 + -0.158061 2.0999 -1.9735 0.0038983 -0.923565 -0.383421 + -0.17507 2.11596 -2.00852 -0.0538746 -0.910176 -0.410704 + -0.170899 2.12573 -2.02884 -0.0814251 -0.902378 -0.423182 + -0.159006 2.13113 -2.04539 -0.119246 -0.927615 -0.353993 + -0.180123 2.16687 -2.14169 -0.164198 -0.968946 -0.184887 + -0.242848 2.10027 -1.96134 -0.0138784 -0.941603 -0.336439 + -0.247097 2.11101 -1.99235 0.0460035 -0.92402 -0.379565 + -0.264106 2.12716 -2.02732 0.114963 -0.897662 -0.425426 + -0.263721 2.14117 -2.05859 0.136896 -0.902412 -0.408549 + -0.25955 2.15094 -2.07891 0.144677 -0.906435 -0.396793 + -0.189428 2.06804 -1.89932 -0.143543 -0.918847 -0.367581 + -0.260998 2.09316 -1.93783 0.0038661 -0.955783 -0.294049 + -0.340421 2.09381 -1.97056 0.182245 -0.942206 -0.281131 + -0.337429 2.1054 -2.00943 0.185472 -0.93537 -0.301135 + -0.341678 2.11606 -2.04048 0.242006 -0.918396 -0.313022 + -0.259557 2.08354 -1.90636 -0.0403483 -0.940346 -0.337817 + -0.33898 2.08419 -1.93909 0.148525 -0.959011 -0.241326 + -0.437442 2.0831 -2.0248 0.314833 -0.928536 -0.196729 + -0.43445 2.09469 -2.06367 0.365523 -0.89702 -0.248491 + -0.429457 2.10959 -2.10868 0.370975 -0.899499 -0.230824 + -0.246269 2.06574 -1.86774 -0.0986639 -0.945306 -0.310905 + -0.340548 2.07585 -1.89925 0.106115 -0.966711 -0.23283 + -0.449247 2.07242 -1.9795 0.294349 -0.940763 -0.168298 + -0.341916 2.06786 -1.86661 0.0503669 -0.985137 -0.164218 + -0.450815 2.06408 -1.93966 0.29727 -0.94016 -0.166522 + -0.522957 2.04655 -2.01909 0.596232 -0.793401 -0.122566 + -0.511152 2.05723 -2.06439 0.516766 -0.847458 -0.121522 + -0.511485 2.06396 -2.10805 0.538179 -0.823708 -0.178514 + -0.449093 2.05791 -1.89177 0.272106 -0.954851 -0.119236 + -0.520794 2.02929 -1.92639 0.661218 -0.737992 -0.134754 + -0.522516 2.03537 -1.97433 0.643903 -0.743746 -0.179529 + -0.565974 2.00379 -2.05543 0.796459 -0.564439 -0.216935 + -0.516572 2.02379 -1.88107 0.665865 -0.737832 -0.110575 + -0.559785 1.97772 -1.96868 0.876198 -0.436896 -0.203467 + -0.565533 1.99261 -2.01067 0.854261 -0.482859 -0.192575 + -0.552771 1.96938 -1.88103 0.887936 -0.459114 -0.027991 + -0.555563 1.97222 -1.92336 0.89484 -0.430939 -0.116422 + -0.597085 1.85418 -1.9261 0.942802 -0.298046 -0.149304 + -0.603334 1.86842 -1.97277 0.916039 -0.322945 -0.237864 + -0.609082 1.88331 -2.01476 0.890919 -0.346005 -0.294184 + -0.514372 2.02202 -1.8028 0.761433 -0.638277 0.113238 + -0.557067 1.96606 -1.85148 0.883078 -0.456279 0.109467 + -0.594023 1.85066 -1.8352 0.966753 -0.251769 0.0447406 + -0.594293 1.85134 -1.88378 0.957728 -0.282989 -0.0517112 + -0.557221 1.98226 -1.80874 0.824846 -0.543675 0.155067 + -0.594177 1.86686 -1.79246 0.960993 -0.23646 0.143457 + -0.634484 1.66618 -1.79088 0.959525 -0.280525 0.024858 + -0.634754 1.66686 -1.83946 0.92789 -0.356015 -0.110789 + -0.638303 1.68421 -1.8919 0.885992 -0.405678 -0.224598 + -0.550714 1.99679 -1.7715 0.803544 -0.587014 0.0986484 + -0.602625 1.87233 -1.74413 0.958586 -0.260788 0.114468 + -0.639244 1.66784 -1.73534 0.965476 -0.220812 0.138194 + -0.602854 1.87955 -1.70004 0.941382 -0.286731 0.177721 + -0.647692 1.67322 -1.68706 0.924954 -0.195323 0.32605 + -0.671382 1.57105 -1.69351 0.771201 -0.603015 0.204014 + -0.666623 1.5694 -1.74905 0.571741 -0.81744 -0.0700294 + -0.673911 1.57456 -1.78639 0.290986 -0.911775 -0.289815 + -0.614695 1.88295 -1.65654 0.929028 -0.337637 0.151352 + -0.674709 1.67271 -1.63638 0.897458 -0.23081 0.375893 + -0.735823 1.56272 -1.57048 0.766215 -0.550049 0.332204 + -0.708806 1.56324 -1.62117 0.765484 -0.520409 0.378429 + -0.617342 1.88121 -1.61252 0.917994 -0.395065 0.0347914 + -0.68655 1.67611 -1.59288 0.89776 -0.278795 0.341028 + -0.741883 1.56683 -1.54499 0.771661 -0.539409 0.337011 + -0.789372 1.54835 -1.49959 0.339912 -0.907341 0.247369 + -0.62704 1.86132 -1.54027 0.913981 -0.400713 0.0637825 + -0.709268 1.66856 -1.55219 0.905355 -0.343962 0.249045 + -0.764601 1.55928 -1.50431 0.55999 -0.819957 0.11867 + -0.795433 1.55237 -1.47414 0.40947 -0.846557 0.34011 + -0.718965 1.64867 -1.47995 0.840284 -0.537683 -0.0694279 + -0.779727 1.56951 -1.42564 0.418519 -0.902479 0.101849 + -0.797832 1.56316 -1.45743 0.371349 -0.856028 0.359604 + -0.828664 1.55625 -1.42726 0.438238 -0.782213 0.442821 + -0.869795 1.5549 -1.40733 0.118829 -0.950683 0.286499 + -0.695448 1.66118 -1.35421 0.863235 -0.492792 -0.109461 + -0.75621 1.58202 -1.2999 0.267065 -0.962814 -0.0408011 + -0.85677 1.58823 -1.32627 -0.0438062 -0.986232 0.15946 + -0.874876 1.58179 -1.35811 0.155722 -0.935971 0.315768 + -0.916007 1.58053 -1.33812 0.0515232 -0.880915 0.470462 + -0.636581 1.83901 -1.44743 0.909857 -0.392923 -0.133311 + -0.697709 1.64323 -1.30433 0.731193 -0.604022 -0.317039 + -0.711105 1.59853 -1.28851 0.392562 -0.579307 -0.714351 + -0.748335 1.58493 -1.27294 0.167833 -0.984176 0.0568265 + -0.65654 1.77702 -1.40086 0.946832 -0.314013 0.0700285 + -0.686108 1.69237 -1.37664 0.937616 -0.343276 -0.0551146 + -0.639299 1.83442 -1.40348 0.940583 -0.311006 0.136304 + -0.686108 1.69237 -1.37664 0.942462 -0.274508 0.190815 + -0.660427 1.78791 -1.35351 0.938143 -0.341573 -0.0567117 + -0.684331 1.71531 -1.35037 0.936451 -0.275172 0.217579 + -0.692772 1.67708 -1.37616 0.942 -0.303974 0.142255 + -0.613032 1.91293 -1.39706 0.952444 -0.29688 0.0686564 + -0.626048 1.87036 -1.31612 0.906816 -0.350627 -0.233978 + -0.619887 1.85947 -1.28666 0.501903 -0.163292 -0.849369 + -0.654266 1.77702 -1.32406 0.757721 -0.206092 -0.619181 + -0.699814 1.69538 -1.32206 0.673289 -0.67932 -0.291902 + -0.657449 1.71478 -1.31545 0.192012 -0.364222 -0.911303 + -0.699814 1.69538 -1.32206 0.216656 -0.144532 -0.96549 + -0.631718 1.61943 -1.2503 -0.0311826 -0.668894 -0.742703 + -0.658401 1.60355 -1.2296 -0.332418 -0.729388 -0.597906 + -0.684132 1.6989 -1.29475 0.278865 -0.794212 -0.539872 + -0.741925 1.62467 -1.29797 0.704304 -0.653188 -0.278033 + -0.604736 1.63147 -1.25336 0.224865 -0.62885 -0.7443 + -0.605073 1.57287 -1.20325 0.380604 -0.709631 -0.592929 + -0.636539 1.55107 -1.1577 -0.297041 -0.837696 -0.458292 + -0.711337 1.62078 -1.18883 0.101616 -0.871829 -0.479154 + -0.726242 1.62827 -1.2706 0.71587 -0.651824 -0.250309 + -0.590567 1.53741 -1.13503 0.339035 -0.899062 -0.277024 + -0.622033 1.51561 -1.08948 0.343836 -0.87628 -0.337507 + -0.635697 1.4879 -1.04188 0.00751525 -0.934855 -0.35495 + -0.689475 1.5683 -1.11694 -0.350767 -0.863784 -0.361717 + -0.755178 1.57902 -1.16811 0.378852 -0.869663 -0.316478 + -0.545593 1.57539 -1.10483 0.897589 -0.433879 0.0779912 + -0.579459 1.54475 -1.05154 0.767467 -0.641044 -0.00753826 + -0.599094 1.50618 -1.01114 0.793352 -0.600673 -0.0989179 + -0.612758 1.47846 -0.963537 0.279977 -0.883991 0.374396 + -0.650522 1.48642 -1.01532 -0.715281 -0.68983 0.111835 + -0.567352 1.65255 -1.00526 0.992325 -0.0191993 0.122159 + -0.567033 1.58604 -0.954669 0.970839 -0.211109 0.113597 + -0.586668 1.54747 -0.914262 0.806259 -0.525457 0.271736 + -0.617201 1.53206 -0.889963 -0.00423025 -0.831079 0.556138 + -0.554013 1.70283 -1.04696 0.961291 -0.182841 0.206127 + -0.553473 1.76406 -0.988607 0.948561 -0.222102 0.225614 + -0.565723 1.7357 -0.938079 0.992174 -0.124417 -0.0104999 + -0.565405 1.66919 -0.887485 0.988102 -0.0941568 0.121607 + -0.581715 1.61732 -0.84404 0.850924 -0.310676 0.423567 + -0.523232 1.74945 -1.0869 0.932527 -0.334931 0.134959 + -0.522692 1.81068 -1.02855 0.920143 -0.237118 0.311627 + -0.534472 1.87048 -0.966136 0.95338 -0.223758 0.20248 + -0.546722 1.84212 -0.915617 0.977181 -0.159196 0.14062 + -0.503299 1.87251 -1.05165 0.938181 -0.206877 0.277522 + -0.515079 1.9324 -0.989183 0.951914 -0.111092 0.285516 + -0.536851 1.93903 -0.89247 0.976825 -0.131189 0.16912 + -0.567757 1.78059 -0.839841 0.976729 -0.119337 0.178214 + -0.584067 1.72863 -0.796446 0.968529 -0.167063 0.184503 + -0.479565 1.93227 -1.08255 0.963501 -0.125677 0.23637 + -0.492001 2.01237 -1.04649 0.948521 -0.0337905 0.314907 + -0.496957 2.08891 -1.01227 0.973452 -0.0328019 0.226527 + -0.520036 2.00887 -0.955024 0.974866 -0.0986475 0.199762 + -0.481613 2.08432 -1.07351 0.923746 -0.0504893 0.379664 + -0.505886 2.17583 -0.98122 0.992226 0.0217894 0.122524 + -0.509794 2.09676 -0.93526 0.988415 -0.0781303 0.130122 + -0.52661 2.02693 -0.872705 0.98329 -0.138406 0.118259 + -0.490542 2.17132 -1.0424 0.978338 0.0821304 0.190023 + -0.49373 2.54348 -1.26601 0.999342 0.00589675 0.0357823 + -0.506727 2.26545 -0.910037 0.999197 -0.0214141 0.033875 + -0.510635 2.18637 -0.864076 0.996615 -0.0523124 0.0634119 + -0.467295 2.31933 -1.42137 0.985123 0.123665 0.119328 + -0.487215 2.4186 -1.32771 0.995357 0.0661781 0.0698997 + -0.442777 2.26449 -1.53198 0.929293 0.282405 0.238039 + -0.456831 2.73908 -1.99399 0.986106 0.134142 0.0979889 + -0.470319 2.85022 -1.94529 0.9968 0.0652334 0.0461988 + -0.476834 2.9751 -1.88358 0.999986 -0.00210731 0.00484943 + -0.432314 2.68433 -2.10455 0.971987 0.199479 0.124294 + -0.443245 2.88386 -2.37756 0.830384 0.52645 -0.182517 + -0.46452 2.95675 -2.31301 0.896288 0.33638 -0.288992 + -0.478007 3.06789 -2.2643 0.924597 0.171125 -0.340349 + -0.406533 2.64024 -2.2384 0.884267 0.411198 0.221333 + -0.417465 2.83978 -2.51141 0.364933 0.765226 -0.530333 + -0.469929 2.87812 -2.40661 0.14398 0.810099 -0.56834 + -0.491204 2.95109 -2.34201 0.375426 0.547034 -0.748204 + -0.349571 2.16502 -1.59929 0.637748 0.619766 0.457348 + -0.349436 2.59104 -2.27377 0.512443 0.750513 0.417292 + -0.361948 2.7581 -2.62793 0.359333 0.854852 0.374311 + -0.409998 2.77346 -2.58234 0.765625 0.602423 0.225621 + -0.273379 2.13212 -1.6369 0.254902 0.790299 0.557182 + -0.257731 2.58286 -2.30601 0.0841082 0.86008 0.503178 + -0.270242 2.74992 -2.66017 0.578968 0.745126 0.331033 + -0.307158 1.88639 -1.30328 0.267175 0.762781 0.588883 + -0.186089 1.88576 -1.28879 -0.121253 0.80607 0.579265 + -0.182064 2.14381 -1.64916 -0.111481 0.80854 0.577784 + -0.166416 2.59446 -2.3183 -0.2985 0.80161 0.517996 + -0.138812 2.83607 -2.68899 -0.742492 0.669326 -0.0266218 + -0.164632 2.7747 -2.71669 -0.800169 0.471337 -0.370906 + -0.230933 2.71078 -2.69637 -0.569766 0.606267 -0.554803 + -0.095427 2.10859 -1.57575 -0.531619 0.696565 0.481848 + -0.062398 2.67037 -2.31079 -0.395123 0.831159 0.39122 + -0.034794 2.91207 -2.68142 -0.284627 0.948242 0.1408 + -0.034794 2.88076 -2.79778 -0.297152 0.744523 -0.597817 + -0.060614 2.81939 -2.82549 -0.541063 0.486951 -0.68566 + -0.099451 1.85062 -1.21534 -0.795101 0.497334 0.347093 + -0.046205 2.12026 -1.46977 -0.910752 0.371934 0.179433 + -0.013176 2.68204 -2.2048 -0.445739 0.883173 0.14602 + 0.062399 2.67037 -2.31079 0.399386 0.826521 0.396678 + 0.034794 2.91207 -2.68142 0.284652 0.948231 0.140826 + 0.034794 2.88076 -2.79778 0.30504 0.779772 -0.546723 + -0.031447 2.23142 -1.4257 -0.995398 0.0920102 0.0267833 + -0.013176 2.64772 -1.98235 -0.871707 0.443988 -0.207369 + 0.013176 2.64772 -1.98235 0.872058 0.435194 -0.223876 + 0.013176 2.68204 -2.2048 0.445656 0.883314 0.145421 + -0.04101 2.05543 -1.07148 -0.944183 0.197634 -0.263551 + -0.030452 2.20762 -1.25668 -0.998651 0.0512888 -0.00810898 + -0.012182 2.62392 -1.81333 -0.999068 0.0418518 -0.0105813 + 0.00729 2.80633 -1.93447 -0.992372 0.121137 0.0228938 + -0.041014 2.1598 -1.00965 -0.998697 0.0508875 -0.00390431 + -0.04101 2.12203 -1.03943 -0.999756 0.00996567 -0.0197393 + -0.030452 2.27413 -1.22468 -0.998667 -0.00298986 -0.0515299 + -0.02556 2.45654 -1.34582 -0.999583 0.0134728 -0.0255595 + -0.00729 2.80633 -1.93447 -0.610295 -0.0995614 -0.785893 + 0.00729 2.80633 -1.93447 0 -0.553235 -0.833025 + -0.051236 2.00431 -1.06212 -0.685473 -0.375545 0.623773 + -0.036481 2.21983 -0.956232 -0.99162 -0.0178171 0.127951 + -0.026884 2.45107 -1.11594 -0.997671 0.0651839 0.020107 + -0.025563 2.49432 -1.31605 -0.99952 0.0292854 -0.0100625 + -0.03649 2.28937 -0.889273 -0.878614 -0.0850716 0.469894 + -0.026893 2.5207 -1.04894 -0.931517 0.231986 0.280105 + -0.011004 2.20909 -0.926224 0.0760722 -0.561671 0.823856 + 0.00729 2.80633 -1.93447 0 0.314016 -0.949418 + -0.230933 2.71078 -2.69637 0.787045 0.5682 0.240225 + 1.12127 1.64042 -1.94785 -0.317944 -0.790147 -0.524004 + 1.15142 1.68191 -2.03092 0.948434 -0.3157 -0.0284066 + 0.016514 2.25648 -0.879903 0.776853 -0.00706368 0.629642 + -0.409998 2.77346 -2.58234 -0.740481 0.341366 -0.578928 + -0.462462 2.81189 -2.4775 -0.568156 0.516505 -0.640641 + -0.531689 2.93747 -2.3582 0.065333 0.57323 -0.816786 + -0.50897 3.07022 -2.29494 0.46853 0.315402 -0.825228 + -0.413206 2.61819 -2.66241 -0.497029 0.532658 -0.685009 + -0.449813 2.61727 -2.64002 -0.32977 0.609351 -0.721071 + -0.499068 2.81097 -2.45511 -0.21711 0.587325 -0.779687 + -0.361948 2.7581 -2.62793 -0.452281 0.416146 -0.788837 + -0.365156 2.60283 -2.70801 -0.350217 0.538606 -0.766324 + -0.446128 2.39177 -2.86763 -0.414887 0.721435 -0.554437 + -0.475367 2.54895 -2.68768 -0.38227 0.612555 -0.691842 + -0.556401 2.77007 -2.49266 -0.129048 0.635654 -0.761111 + -0.589022 2.89656 -2.39575 -0.194771 0.579782 -0.791149 + -0.270242 2.74992 -2.66017 -0.281987 0.456403 -0.843907 + -0.325847 2.56369 -2.74422 -0.25929 0.594643 -0.761031 + -0.204709 2.60208 -2.77249 -0.525392 0.541078 -0.656656 + -0.230387 2.49807 -2.86374 -0.494574 0.656453 -0.569619 + -0.351525 2.45968 -2.83546 -0.313763 0.705908 -0.635017 + -0.138408 2.666 -2.79281 -0.659639 0.374018 -0.65191 + -0.201101 2.45831 -2.94429 -0.366786 0.729211 -0.577685 + -0.333607 2.29487 -3.0612 -0.368372 0.72948 -0.576334 + -0.38881 2.23339 -3.1151 -0.0893524 0.680593 -0.727193 + -0.406728 2.39811 -2.88941 -0.342595 0.774223 -0.532172 + -0.033806 2.75669 -2.8853 -0.591287 0.455811 -0.665294 + -0.1116 2.60339 -2.85257 -0.551518 0.451658 -0.701307 + -0.145455 2.47997 -2.93701 -0.269226 0.663349 -0.698202 + -0.234477 2.30039 -3.15796 -0.372612 0.690146 -0.62037 + -0.304321 2.25512 -3.14175 -0.593571 0.591758 -0.545431 + -0.350353 2.16381 -3.16919 -0.639689 0.438702 -0.631141 + -0.007876 2.73617 -2.92294 -0.350781 0.468796 -0.810668 + -0.057432 2.52427 -2.95573 -0.592475 0.432198 -0.679837 + -0.091287 2.40085 -3.04016 -0.122002 0.711941 -0.69156 + -0.178832 2.32205 -3.15067 -0.0637383 0.737679 -0.672136 + 0.007879 2.73617 -2.92294 0.345702 0.452125 -0.822237 + -0.007876 2.52092 -3.00333 -0.298719 0.397261 -0.867727 + -0.031502 2.50374 -2.99337 -0.62924 0.354526 -0.691642 + -0.031473 2.38415 -3.06184 -0.22481 0.603237 -0.765223 + -0.047726 2.34737 -3.09734 -0.000692336 0.730375 -0.683046 + 0.033806 2.75669 -2.8853 0.677335 0.354392 -0.644688 + 0.031505 2.50374 -2.99337 0.629258 0.354532 -0.691622 + 0.007879 2.52092 -3.00333 0.298718 0.397264 -0.867726 + -0.007848 2.40133 -3.07179 -0.324993 0.542027 -0.774975 + 0.060613 2.81939 -2.82549 0.635719 0.439739 -0.634422 + 0.1116 2.60339 -2.85257 0.551519 0.451666 -0.701302 + 0.057432 2.52427 -2.95573 0.592496 0.432196 -0.67982 + 0.03148 2.38415 -3.06184 0.224564 0.603292 -0.765251 + 0.007854 2.40133 -3.07179 0.324986 0.542032 -0.774974 + 0.164631 2.7747 -2.71669 0.800169 0.471334 -0.37091 + 0.138407 2.666 -2.79281 0.659627 0.374025 -0.651918 + 0.145455 2.47997 -2.93701 0.268966 0.662206 -0.699386 + 0.091287 2.40085 -3.04016 0.153104 0.703494 -0.694014 + 0.047727 2.34738 -3.09734 0.000404965 0.730374 -0.683048 + 0.138812 2.83607 -2.68899 0.74248 0.669341 -0.0265605 + 0.257731 2.58286 -2.30601 -0.0876816 0.863071 0.497414 + 0.230933 2.71078 -2.69637 0.569748 0.606277 -0.55481 + 0.166417 2.59446 -2.3183 0.288668 0.797265 0.530132 + 0.095427 2.10859 -1.57575 0.527492 0.690172 0.495393 + 0.182065 2.14381 -1.64916 0.0843685 0.821569 0.563832 + 0.273379 2.13212 -1.6369 -0.261582 0.783301 0.563928 + 0.046205 2.12026 -1.46977 0.948433 0.25557 0.187506 + 0.064756 1.84625 -1.22456 0.855419 0.376344 0.355841 + 0.031447 2.23142 -1.4257 0.995229 0.0931339 0.0290761 + 0.036018 2.0989 -1.02776 0.988156 0.106063 -0.110896 + 0.049543 1.96837 -1.07328 0.995808 0.0878904 0.0253151 + 0.064756 1.84625 -1.22456 0.995484 0.091141 0.0265352 + 0.012182 2.62392 -1.81333 0.99935 0.03588 -0.00343977 + 0.030452 2.20762 -1.25668 0.99872 0.050545 -0.00164767 + 0.036617 2.12995 -1.02614 0.999934 -0.0106089 -0.0044382 + 0.00729 2.80633 -1.93447 0.999369 0.0338723 0.0106468 + -0.350353 2.16381 -3.16919 0.0529504 0.631009 -0.773966 + 0.03663 2.30385 -0.897355 0.999827 0.0135726 -0.0127152 + 0.036617 2.19646 -0.99414 0.999907 0.00717034 -0.0116362 + 0.03662 2.23423 -0.964364 0.999869 0.0120505 -0.0108013 + 0.026886 2.45107 -1.11594 0.999407 0.0327774 -0.0105639 + 0.030452 2.27413 -1.22468 0.999662 0.0113855 -0.02336 + 0.025561 2.45654 -1.34582 0.999656 0.0133546 -0.0225628 + 0.025564 2.49432 -1.31605 0.999591 0.0268187 -0.00991077 + 0.008613 2.95866 -1.66912 0.653216 0.699 0.291048 + 0.008613 2.52374 -1.02842 0.354026 0.619904 0.700275 + 0.00729 2.80633 -1.93447 0.999643 0.00881096 -0.0252111 + 0.00729 2.80633 -1.93447 0.999638 0.0166024 -0.0211621 + -0.318018 2.1931 -3.18552 -0.64503 0.530517 -0.54999 + -0.248174 2.23837 -3.20173 -0.409537 0.584682 -0.700304 + -0.191271 2.24886 -3.2109 -0.0693939 0.625955 -0.776766 + -0.129043 2.23586 -3.21559 -0.0403564 0.638843 -0.768278 + -0.116604 2.30914 -3.15531 0.0698724 0.722511 -0.68782 + -0.073042 2.25566 -3.21249 0.0214699 0.603984 -0.796707 + -0.0241 2.22116 -3.23232 0.223686 0.468088 -0.854903 + -0.032099 2.17756 -3.24701 -0.300288 -0.158146 -0.940647 + -0.081041 2.21207 -3.22718 -0.450354 -0.271353 -0.850617 + -0.129043 2.23586 -3.21559 -0.0643849 0.329374 -0.942002 + -0.007848 2.25785 -3.19687 -0.0128833 0.626788 -0.779083 + 0.009784 2.14998 -3.24683 0.286438 -0.361634 -0.887229 + -0.009793 2.14998 -3.24684 -0.283293 -0.388088 -0.877002 + -0.057733 2.16318 -3.18711 -0.683371 -0.50201 -0.530085 + -0.088709 2.19606 -3.17486 -0.599271 -0.631342 -0.492222 + 0.007854 2.25785 -3.19687 0.0135554 0.620051 -0.784445 + 0.024101 2.22116 -3.23232 -0.321714 0.432609 -0.842229 + 0.032099 2.17755 -3.247 0.285428 -0.160409 -0.944881 + 0.035418 2.1356 -3.18694 0.682134 -0.458799 -0.569383 + 0.009784 2.10533 -3.19671 0.312958 -0.725233 -0.613266 + -0.009793 2.10534 -3.19672 -0.312869 -0.724859 -0.613752 + 0.073043 2.25567 -3.2125 -0.0214286 0.603882 -0.796786 + 0.081041 2.21207 -3.22718 0.461091 -0.235483 -0.855537 + 0.057733 2.16318 -3.1871 0.674272 -0.535415 -0.508613 + 0.083967 2.13643 -3.14198 0.599704 -0.300238 -0.741763 + 0.06521 2.11575 -3.14935 0.594944 -0.265207 -0.758753 + 0.116604 2.30914 -3.15531 -0.0651908 0.729148 -0.681244 + 0.129042 2.23586 -3.21559 0.0403984 0.638798 -0.768313 + 0.19127 2.24886 -3.2109 0.0694461 0.62592 -0.776789 + 0.178832 2.32205 -3.15067 0.0561378 0.742644 -0.667329 + 0.234475 2.30039 -3.15796 0.372622 0.690143 -0.620367 + 0.248177 2.23837 -3.20173 0.409587 0.58472 -0.700244 + 0.201098 2.45831 -2.94429 0.366757 0.729216 -0.577696 + 0.304318 2.25512 -3.14175 0.593548 0.591756 -0.545459 + 0.31802 2.1931 -3.18552 0.645089 0.530539 -0.549899 + 0.230391 2.49807 -2.86374 0.494556 0.656466 -0.56962 + 0.333611 2.29487 -3.0612 0.368457 0.72947 -0.576292 + 0.350348 2.16381 -3.16919 0.704639 0.505005 -0.498452 + 0.204709 2.60208 -2.77249 0.525397 0.541079 -0.656651 + 0.351529 2.45968 -2.83546 0.313768 0.705906 -0.635017 + 0.406727 2.39811 -2.88941 0.342517 0.774218 -0.53223 + 0.388809 2.23339 -3.1151 0.0915615 0.6895 -0.718475 + 0.350348 2.16381 -3.16919 -0.088849 0.641514 -0.761949 + 0.393486 2.18026 -3.16149 -0.112469 0.647904 -0.753373 + 0.325847 2.56369 -2.74422 0.259282 0.594632 -0.761043 + 0.446128 2.39177 -2.86763 0.414807 0.721467 -0.554455 + 0.451255 2.25163 -3.07989 0.33271 0.695687 -0.636651 + 0.455932 2.1985 -3.12628 0.402806 0.621866 -0.671588 + 0.393486 2.18026 -3.16149 0.218372 0.652678 -0.725483 + 0.270244 2.74992 -2.66017 0.281983 0.456419 -0.8439 + 0.365158 2.60283 -2.70801 0.350234 0.5386 -0.76632 + 0.36195 2.7581 -2.62793 0.452291 0.416145 -0.788833 + 0.409998 2.77346 -2.58234 0.74047 0.341373 -0.578938 + 0.413206 2.61819 -2.66241 0.497038 0.532655 -0.685005 + 0.462462 2.81189 -2.4775 0.568235 0.516443 -0.640621 + 0.499068 2.81097 -2.45511 0.217087 0.587319 -0.779698 + 0.449813 2.61727 -2.64002 0.329823 0.609345 -0.721052 + 0.417464 2.83978 -2.5114 -0.365156 0.765216 -0.530194 + 0.469928 2.87812 -2.40661 -0.144009 0.810101 -0.568329 + 0.531689 2.93747 -2.3582 -0.169709 0.517115 -0.838923 + 0.556401 2.77007 -2.49266 0.129042 0.635644 -0.76112 + 0.58196 2.70165 -2.54037 0.34765 0.562426 -0.750211 + 0.475371 2.54895 -2.68768 0.382261 0.612566 -0.691837 + 0.443244 2.88386 -2.37756 -0.830348 0.526504 -0.182523 + 0.464522 2.95676 -2.31302 -0.897812 0.3331 -0.288058 + 0.491206 2.9511 -2.34202 -0.374928 0.545713 -0.749418 + 0.549455 3.05667 -2.31108 0.169685 0.422691 -0.890247 + 0.589022 2.89656 -2.39575 0.202176 0.561392 -0.802473 + 0.40654 2.64024 -2.2384 -0.883762 0.41017 0.225221 + 0.43232 2.68433 -2.10455 -0.974885 0.184017 0.125449 + 0.456831 2.73908 -1.99399 -0.986289 0.134004 0.096312 + 0.478009 3.06797 -2.26425 -0.924978 0.172248 -0.338744 + 0.508972 3.07022 -2.29494 -0.467015 0.317391 -0.825324 + 0.409998 2.77346 -2.58234 -0.765625 0.602418 0.225635 + 0.36195 2.7581 -2.62793 -0.359337 0.854849 0.374314 + 0.349436 2.59104 -2.27377 -0.505605 0.758477 0.411187 + 0.406675 2.21423 -1.56392 -0.798571 0.482637 0.359648 + 0.442784 2.26449 -1.53198 -0.932561 0.282969 0.224186 + 0.467295 2.31933 -1.42137 -0.985252 0.122309 0.119664 + 0.470319 2.85022 -1.94529 -0.996754 0.0662457 0.0457528 + 0.349571 2.16502 -1.59929 -0.634105 0.617943 0.46482 + 0.383337 1.9192 -1.26572 -0.672311 -0.00124287 0.740268 + 0.422755 1.95308 -1.2196 -0.704806 -0.0179974 0.709172 + 0.458864 2.00335 -1.18766 -0.964596 0.108898 0.240199 + 0.270244 2.74992 -2.66017 -0.578955 0.745135 0.331035 + 0.230933 2.71078 -2.69637 -0.78703 0.568219 0.24023 + 0.129042 2.23586 -3.21559 0.0644217 0.328979 -0.942137 + 0.307145 1.88639 -1.30329 -0.542571 0.649074 0.533217 + 0.480623 2.19749 -3.09233 0.362943 0.566643 -0.739722 + 0.490656 2.24529 -3.05811 0.520403 0.650578 -0.553108 + 0.509415 2.1894 -3.09931 0.455896 0.622136 -0.636479 + 0.565038 2.15256 -3.06872 0.803158 0.503868 -0.317891 + 0.546279 2.20846 -3.02752 0.677107 0.566185 -0.470064 + 0.576688 2.13834 -3.04387 -0.0601419 -0.217417 -0.974224 + 0.473219 2.43685 -2.79011 0.507879 0.605489 -0.612733 + 0.57337 2.25345 -2.95005 0.345375 0.698932 -0.626266 + 0.599183 2.42489 -2.7486 0.286103 0.68804 -0.666892 + 0.65657 2.36347 -2.79322 0.437725 0.675891 -0.592932 + 0.630757 2.19211 -2.99461 0.225267 0.600956 -0.766881 + 0.601336 2.53699 -2.64617 0.393818 0.578579 -0.714251 + 0.677919 2.54619 -2.58509 0.592926 0.503555 -0.628388 + 0.700677 2.34287 -2.76293 0.705752 0.55509 -0.440216 + 0.702641 2.19183 -2.96792 0.457771 0.586314 -0.668342 + 0.658544 2.71084 -2.47928 0.55527 0.483449 -0.676722 + 0.733518 2.69688 -2.4195 0.668498 0.43335 -0.604416 + 0.751342 2.50776 -2.52614 0.69828 0.443283 -0.562054 + 0.783212 2.34884 -2.62608 0.718171 0.489483 -0.494607 + 0.709789 2.38727 -2.68504 0.779784 0.45942 -0.425288 + 0.636617 2.85949 -2.39415 0.507461 0.494197 -0.70587 + 0.711591 2.84553 -2.33437 0.630863 0.447285 -0.633994 + 0.802339 2.68845 -2.3385 0.726678 0.391408 -0.56457 + 0.820163 2.49925 -2.44519 0.789892 0.356433 -0.499026 + 0.638357 3.03011 -2.26808 0.541585 0.45227 -0.708617 + 0.697201 3.05442 -2.19217 0.576616 0.386934 -0.71958 + 0.770435 2.86984 -2.25847 0.680048 0.405366 -0.610911 + 0.894426 2.68315 -2.21772 0.770299 0.277584 -0.574097 + 0.590762 3.06718 -2.26968 0.476981 0.368642 -0.797867 + 0.588448 3.23589 -2.21229 0.669453 0.211068 -0.712238 + 0.634906 3.22009 -2.17392 0.615188 0.257919 -0.744998 + 0.776695 3.07793 -2.1311 0.493319 0.256638 -0.831128 + 0.862523 2.86462 -2.13763 0.583459 0.34318 -0.736073 + 0.547142 3.22538 -2.25369 0.453372 0.180983 -0.872753 + 0.542813 3.40623 -2.23413 0.578812 0.159623 -0.799686 + 0.57015 3.42786 -2.18299 0.757566 0.203239 -0.620312 + 0.616608 3.41206 -2.14463 0.663809 0.235384 -0.709895 + 0.7144 3.24369 -2.1128 0.581099 0.269512 -0.767911 + 0.513561 3.21526 -2.26297 -0.269929 0.156558 -0.950067 + 0.509232 3.39612 -2.24342 -0.170948 0.0590479 -0.983509 + 0.510975 3.56567 -2.21989 0.668912 0.223092 -0.709075 + 0.538313 3.58721 -2.1688 0.794228 0.304578 -0.52577 + 0.619672 3.48872 -2.11141 0.750214 0.310856 -0.583565 + 0.482598 3.21302 -2.23229 -0.92284 0.0444947 -0.382604 + 0.47536 3.38339 -2.21817 -0.871412 -0.068937 -0.485684 + 0.448788 3.53384 -2.21555 -0.774776 -0.247451 -0.581799 + 0.48266 3.54656 -2.24079 0.00278559 0.0256981 -0.999666 + 0.463356 3.69601 -2.21324 0.670272 0.279488 -0.687475 + 0.476834 2.9751 -1.88358 -0.99997 -0.00143462 0.00754503 + 0.469596 3.14547 -1.86948 -0.994934 -0.0858837 -0.0522469 + 0.451787 3.26083 -1.83669 -0.952288 -0.261039 -0.158135 + 0.399831 3.66393 -2.24569 -0.875164 -0.403234 -0.267377 + 0.49373 2.54348 -1.26601 -0.999343 0.00816976 0.0353259 + 0.494948 2.63292 -1.14452 -0.996782 -0.076722 -0.0232157 + 0.477139 2.7482 -1.11179 -0.987412 -0.143962 -0.0655108 + 0.465519 2.78306 -1.02856 -0.96844 -0.225712 -0.105725 + 0.40283 3.39093 -1.86683 -0.896832 -0.3773 -0.230949 + 0.487215 2.41869 -1.32766 -0.995291 0.0660846 0.0709138 + 0.490541 2.17124 -1.04245 -0.978541 0.0811493 0.189399 + 0.505886 2.17583 -0.98122 -0.992248 0.0075929 0.124039 + 0.506727 2.26545 -0.910037 -0.999323 -0.0209609 0.0302518 + 0.507945 2.3548 -0.788592 -0.998115 -0.0605284 0.010089 + 0.470621 2.07197 -1.13612 -0.988659 0.0860481 0.123083 + 0.481612 2.08431 -1.0735 -0.975834 0.0184801 0.217731 + 0.496957 2.08883 -1.01232 -0.958089 -0.0243643 0.285432 + 0.469177 2.00413 -1.10962 -0.97259 0.00594725 0.232449 + 0.479563 1.93218 -1.0826 -0.949778 -0.124338 0.28716 + 0.491999 2.01237 -1.04649 -0.947713 -0.046703 0.315689 + 0.520036 2.00887 -0.955024 -0.976567 -0.0859685 0.197299 + 0.45742 1.9356 -1.16112 -0.980677 -0.160428 0.111959 + 0.482339 1.87208 -1.1427 -0.947319 -0.302591 0.105005 + 0.503297 1.87252 -1.05166 -0.941491 -0.186516 0.280725 + 0.515077 1.93232 -0.989242 -0.958975 -0.109645 0.261429 + 0.475913 1.89309 -1.2211 -0.806349 -0.425524 0.410767 + 0.500832 1.82957 -1.20268 -0.941159 -0.328798 0.078175 + 0.524033 1.76402 -1.18974 -0.941246 -0.334725 0.0448846 + 0.506073 1.81232 -1.1118 -0.957115 -0.276476 0.0865558 + 0.436496 1.8593 -1.26718 -0.466891 -0.530503 0.707517 + 0.490999 1.81553 -1.26956 -0.75349 -0.555674 0.351396 + 0.514199 1.75007 -1.25657 -0.875709 -0.482828 -0.00331005 + 0.551181 1.69709 -1.24422 -0.903034 -0.323384 -0.282757 + 0.54119 1.70115 -1.16484 -0.985668 -0.0840994 -0.14624 + 0.373475 1.84698 -1.32303 -0.460123 -0.887518 -0.0244592 + 0.427977 1.80321 -1.32542 -0.38086 -0.714159 0.587301 + 0.504467 1.79287 -1.32431 -0.373739 -0.60172 -0.70587 + 0.541449 1.73998 -1.3119 -0.352566 -0.515199 -0.781196 + 0.307145 1.88639 -1.30329 -0.126312 -0.605969 0.785396 + -0.7043 1.56683 -1.09039 -0.0579134 -0.910528 -0.40937 + -0.809256 1.55981 -1.16444 0.621692 -0.782816 0.0264271 + -0.770083 1.58651 -1.24989 0.822565 -0.56759 -0.0350532 + -0.771717 1.58314 -1.26884 0.902702 -0.430264 -0.00125148 + -0.792052 1.49776 -1.24696 0.795663 -0.604491 0.0388702 + -0.758379 1.54753 -1.08676 0.319953 -0.8652 -0.386082 + -0.85984 1.52061 -1.14415 0.578219 -0.689216 0.436628 + -0.790419 1.50113 -1.22799 0.764077 -0.599054 0.239417 + -0.828509 1.49337 -1.21855 -0.171815 0.0361979 -0.984464 + -0.664227 1.55392 -1.05243 0.250962 -0.804405 -0.538471 + -0.841003 1.46202 -1.20765 0.108578 -0.364707 -0.92477 + -0.874387 1.49643 -1.23266 -0.00756757 0.0824023 -0.99657 + -0.917635 1.56429 -1.1558 -0.00963629 0.191667 -0.981413 + -0.825982 1.56239 -1.1863 -0.436581 -0.0238436 -0.899349 + -0.789525 1.56678 -1.21471 -0.764503 0.151685 -0.626519 + -0.792052 1.49776 -1.24696 -0.748 0.303248 -0.590369 + -0.771717 1.58314 -1.26884 -0.889854 0.42572 -0.164081 + -0.963513 1.56736 -1.16992 0.617042 0.228292 -0.753089 + -0.937006 1.58934 -1.16439 -0.0124739 -0.64044 -0.767907 + -0.845353 1.58744 -1.19488 -0.188978 -0.851268 -0.489521 + -0.759733 1.60831 -1.24384 -0.872302 0.409161 -0.267726 + -0.741925 1.62467 -1.29797 -0.865477 0.481194 -0.139294 + -0.699814 1.69538 -1.32206 -0.871046 0.469408 -0.144688 + -0.955511 1.48158 -1.19533 -0.387509 -0.241353 -0.889711 + -0.841003 1.46202 -1.20765 -0.193037 -0.691838 -0.695771 + -0.922127 1.44708 -1.17038 -0.19297 -0.690765 -0.696855 + -0.841003 1.46202 -1.20765 0.592124 -0.497074 0.634277 + -0.921706 1.47324 -1.1323 0.172693 -0.711149 0.681502 + -0.795782 1.58707 -1.10525 0.0980888 -0.358145 0.928499 + -0.857648 1.5397 -1.0934 0.332808 -0.489426 0.80604 + -0.976804 1.48683 -1.12362 -0.443535 -0.546361 0.710469 + -0.922127 1.44708 -1.17038 0.177745 -0.812123 0.555755 + -0.841003 1.46202 -1.20765 0.380096 -0.764325 0.520896 + -0.758379 1.54753 -1.08676 -0.38932 0.061382 0.919055 + -0.701631 1.59346 -1.07091 -0.537525 0.014305 0.843127 + -0.734637 1.66043 -1.09291 -0.280765 -0.308062 0.908993 + -0.801723 1.66092 -1.09515 0.066854 -0.221603 0.972842 + -0.924734 1.54009 -1.09569 -0.129045 -0.237832 0.962696 + -0.664227 1.55392 -1.05243 -0.755839 -0.041935 0.653413 + -0.643397 1.56889 -0.998153 -0.951572 -0.112991 0.285908 + -0.658945 1.63178 -1.03008 -0.874385 -0.0773671 0.479026 + -0.691951 1.69874 -1.05208 -0.677794 -0.20054 0.707375 + -0.727078 1.74912 -1.07274 -0.355439 -0.221842 0.907992 + -0.872106 1.65856 -1.07748 0.0821934 -0.374116 0.923732 + -0.629692 1.50131 -0.961109 -0.864165 -0.378523 0.331571 + -0.643726 1.61889 -0.917968 -0.983074 -0.146316 0.110257 + -0.659274 1.68178 -0.9499 -0.987941 -0.0967153 0.120911 + -0.666266 1.73981 -0.991201 -0.909565 -0.25308 0.32961 + -0.701392 1.79019 -1.01186 -0.871963 -0.165792 0.460644 + -0.634135 1.5549 -0.887535 -0.909793 -0.351305 0.221046 + -0.630176 1.5876 -0.82637 -0.539263 -0.579913 0.610651 + -0.639767 1.6515 -0.856854 -0.97921 -0.0845585 0.184384 + -0.7043 1.56683 -1.09039 -0.60997 0.283033 0.740155 + -0.612248 1.60182 -0.819792 0.555118 -0.578507 0.59764 + -0.619647 1.6386 -0.776098 -0.470889 -0.542769 0.695461 + -0.626818 1.70224 -0.78674 -0.976858 -0.102375 0.187796 + -0.646938 1.71515 -0.867495 -0.977445 -0.0104043 0.210932 + -0.653929 1.77309 -0.908846 -0.976016 -0.0883579 0.19896 + -0.601719 1.6529 -0.769478 0.65135 -0.467801 0.597415 + -0.590095 1.7375 -0.728603 0.841118 -0.367801 0.396539 + -0.616529 1.72023 -0.715886 0.612314 -0.474959 0.632048 + -0.5889 1.81998 -0.669658 0.627277 -0.499679 0.597365 + -0.641223 1.8031 -0.63302 0.587385 -0.566776 0.577706 + -0.572443 1.81332 -0.755521 0.983876 -0.17622 0.0305689 + -0.562466 1.83725 -0.682375 0.896986 -0.323236 0.301553 + -0.552602 1.93633 -0.620381 0.962293 -0.195013 0.189635 + -0.584926 1.90744 -0.569742 0.73605 -0.465421 0.491542 + -0.637249 1.89055 -0.533104 0.00908 -0.757238 0.653076 + -0.557886 1.8775 -0.816694 0.982529 -0.143459 0.118557 + -0.55954 1.90423 -0.743586 0.992212 -0.122825 0.0206999 + -0.549676 2.00331 -0.6816 0.993608 -0.103677 0.0446549 + -0.559972 2.04854 -0.520547 0.940104 -0.248689 0.233148 + -0.592296 2.01965 -0.469899 0.62371 -0.553381 0.552046 + -0.544982 1.96833 -0.804808 0.982153 -0.148528 0.115387 + -0.537917 2.06141 -0.743632 0.983455 -0.155479 0.0929626 + -0.5417 2.10455 -0.577354 0.980999 -0.170093 0.0933201 + -0.540315 2.19079 -0.463918 0.973147 -0.202817 0.108859 + -0.558588 2.13478 -0.407112 0.927606 -0.318897 0.194556 + -0.519544 2.12001 -0.811529 0.989764 -0.116048 0.0830708 + -0.529941 2.16265 -0.639385 0.990571 -0.126732 0.0520317 + -0.522905 2.24451 -0.524367 0.986944 -0.150328 0.0578225 + -0.536521 2.25412 -0.344224 0.959709 -0.274802 0.058674 + -0.557372 2.19883 -0.281854 0.899123 -0.402624 0.171671 + -0.522444 2.21458 -0.698937 0.994634 -0.0896011 0.0517238 + -0.515408 2.29635 -0.583968 0.986639 -0.162866 0.00419181 + -0.519111 2.30785 -0.404672 0.957907 -0.282892 0.0488582 + -0.497717 2.37589 -0.348125 0.914707 -0.39995 -0.057882 + -0.516823 2.31852 -0.290163 0.905928 -0.409674 -0.107056 + -0.513535 2.28095 -0.751484 0.996512 -0.0753354 0.035887 + -0.507187 2.34934 -0.641333 0.991345 -0.128146 -0.0285081 + -0.49643 2.3586 -0.468174 0.954609 -0.297862 -0.000882352 + -0.475036 2.42664 -0.411626 0.941501 -0.331841 -0.058804 + -0.507945 2.35488 -0.788542 0.997951 -0.0633102 0.00921731 + -0.501598 2.42318 -0.678441 0.991835 -0.117823 -0.0487934 + -0.488209 2.41158 -0.525539 0.976829 -0.193367 -0.09173 + -0.466466 2.48194 -0.471415 0.950986 -0.268709 -0.153042 + -0.494948 2.63292 -1.14452 0.996798 -0.076866 -0.0220273 + -0.477139 2.7482 -1.11179 0.985375 -0.15794 -0.063955 + -0.489977 2.45804 -0.595212 0.98076 -0.163975 -0.105934 + -0.468234 2.52849 -0.541039 0.957523 -0.235423 -0.166511 + -0.469596 3.14547 -1.86948 0.994976 -0.0851184 -0.0527081 + -0.451787 3.26083 -1.83669 0.948527 -0.265786 -0.172206 + -0.40283 3.39093 -1.86683 0.897252 -0.375317 -0.232542 + -0.465519 2.78306 -1.02856 0.968669 -0.226854 -0.10108 + -0.452473 2.74238 -0.853301 0.958597 -0.254835 -0.127084 + -0.482601 3.21302 -2.23229 0.920849 0.0522264 -0.386405 + -0.475363 3.3834 -2.21818 0.867229 -0.0766204 -0.491978 + -0.448792 3.53384 -2.21555 0.778464 -0.294577 -0.554272 + -0.513564 3.21526 -2.26297 0.274215 0.163424 -0.947681 + -0.509235 3.39612 -2.24342 0.174029 0.0527565 -0.983326 + -0.482664 3.54656 -2.24079 -0.0558913 -0.0151413 -0.998322 + -0.399835 3.66393 -2.24569 0.433788 -0.242433 -0.867787 + -0.54714 3.22538 -2.25369 -0.459696 0.194748 -0.86646 + -0.542811 3.40624 -2.23414 -0.600675 0.135025 -0.788009 + -0.510975 3.56567 -2.21989 -0.669435 0.227458 -0.707191 + -0.435045 3.67681 -2.2342 -0.398752 0.149052 -0.904865 + -0.393058 3.77165 -2.24425 -0.449267 0.107329 -0.886927 + -0.357848 3.75877 -2.25574 -0.299592 0.0315814 -0.953544 + -0.549455 3.05667 -2.31108 -0.263344 0.31596 -0.911493 + -0.588446 3.23589 -2.21229 -0.654255 0.229934 -0.720472 + -0.570148 3.42786 -2.18299 -0.75517 0.192317 -0.626684 + -0.538313 3.58721 -2.1688 -0.790129 0.308344 -0.529736 + -0.590762 3.06718 -2.26968 -0.460774 0.344314 -0.818007 + -0.638357 3.03011 -2.26808 -0.541586 0.452267 -0.708617 + -0.6349 3.2201 -2.17393 -0.615206 0.257916 -0.744984 + -0.616602 3.41206 -2.14463 -0.663813 0.23537 -0.709897 + -0.619672 3.48872 -2.11141 -0.750212 0.310852 -0.58357 + -0.636617 2.85949 -2.39415 -0.507461 0.494196 -0.705871 + -0.711591 2.84553 -2.33437 -0.630863 0.447285 -0.633993 + -0.770435 2.86984 -2.25847 -0.686712 0.432042 -0.584608 + -0.697201 3.05442 -2.19217 -0.618691 0.351899 -0.702417 + -0.714394 3.24369 -2.1128 -0.581069 0.269497 -0.767939 + -0.581956 2.70165 -2.54037 -0.347692 0.562429 -0.750189 + -0.658544 2.71084 -2.47928 -0.564727 0.471622 -0.677241 + -0.733518 2.69688 -2.4195 -0.664314 0.42752 -0.613118 + -0.802339 2.68845 -2.3385 -0.736232 0.376285 -0.56247 + -0.862522 2.86462 -2.13764 -0.56203 0.360548 -0.744398 + -0.601332 2.537 -2.64618 -0.39382 0.578568 -0.714259 + -0.67792 2.54619 -2.58509 -0.598892 0.509756 -0.617638 + -0.751343 2.50776 -2.52614 -0.692542 0.452599 -0.56173 + -0.820163 2.49925 -2.44519 -0.799046 0.36698 -0.47629 + -0.473219 2.43685 -2.79011 -0.507862 0.605494 -0.612743 + -0.599183 2.42489 -2.7486 -0.286101 0.688043 -0.666891 + -0.65657 2.36347 -2.79322 -0.437782 0.67589 -0.59289 + -0.700677 2.34287 -2.76293 -0.705758 0.555088 -0.440207 + -0.709787 2.38727 -2.68504 -0.7798 0.459401 -0.42528 + -0.57337 2.25345 -2.95005 -0.345234 0.69896 -0.626314 + -0.630757 2.19211 -2.99461 -0.225273 0.600944 -0.766889 + -0.702641 2.19183 -2.96792 -0.457773 0.586308 -0.668346 + -0.746748 2.17122 -2.93763 -0.726054 0.505952 -0.465681 + -0.546279 2.20846 -3.02752 -0.677085 0.566198 -0.47008 + -0.576693 2.13834 -3.04387 0.0911394 -0.189261 -0.977688 + -0.640043 2.12566 -3.02751 -0.475565 -0.117881 -0.871746 + -0.711928 2.12546 -3.00077 -0.456863 0.445075 -0.770185 + -0.745388 2.12484 -2.9707 -0.652627 0.418267 -0.631768 + -0.490656 2.24529 -3.05811 -0.520412 0.65057 -0.553109 + -0.50941 2.1894 -3.09931 -0.455886 0.622112 -0.63651 + -0.565033 2.15256 -3.06872 -0.803082 0.503888 -0.318051 + -0.451256 2.25163 -3.07989 -0.332721 0.695688 -0.636643 + -0.480623 2.19749 -3.09233 -0.36293 0.566636 -0.739733 + -0.393484 2.18027 -3.1615 0.309983 0.609779 -0.729438 + -0.45593 2.1985 -3.12628 -0.402882 0.621838 -0.671568 + -0.372272 2.1636 -3.15483 -0.515333 -0.430193 -0.741192 + -0.7722 2.09951 -2.95763 -0.794376 0.407612 -0.450356 + -0.807259 2.10921 -2.87383 -0.829615 0.434968 -0.35006 + -0.816369 2.15362 -2.79594 -0.75658 0.503765 -0.416902 + -0.78321 2.34884 -2.62608 -0.718184 0.489468 -0.494603 + -0.832711 2.03751 -2.89384 -0.796911 0.429894 -0.424411 + -0.851231 2.13087 -2.76174 -0.766625 0.493754 -0.410479 + -0.818072 2.32609 -2.59188 -0.808241 0.418749 -0.413999 + -0.879773 2.05483 -2.80203 -0.745883 0.479179 -0.462651 + -0.849238 2.29637 -2.54819 -0.807388 0.432161 -0.401698 + -0.85133 2.46952 -2.4015 -0.855075 0.291833 -0.42858 + -0.894426 2.68315 -2.21772 -0.768031 0.274872 -0.578423 + -0.891264 1.98563 -2.84077 -0.593613 -0.298406 -0.74738 + -0.932252 2.02172 -2.75308 -0.791953 0.450271 -0.412391 + -0.877781 2.22032 -2.58847 -0.801371 0.474694 -0.363964 + -0.891187 2.40223 -2.36215 -0.887686 0.261363 -0.379083 + -0.934283 2.61586 -2.17837 -0.808242 0.18417 -0.559309 + -0.975074 2.89702 -2.06695 -0.80171 0.0435097 -0.596128 + -0.943743 1.95252 -2.79183 -0.829521 0.35162 -0.433887 + -0.957339 2.00159 -2.71642 -0.883227 0.374803 -0.281839 + -0.902867 2.20019 -2.5518 -0.867896 0.409687 -0.280915 + -0.902565 2.25588 -2.45786 -0.942132 0.269094 -0.199938 + -0.944732 2.3707 -2.24494 -0.850126 0.222032 -0.47748 + -0.961467 1.93615 -2.75448 -0.85944 0.29645 -0.41651 + -0.976679 1.92511 -2.73795 -0.887227 0.318337 -0.333901 + -0.980083 1.97465 -2.65517 -0.926228 0.326448 -0.188502 + -0.97978 2.03034 -2.56122 -0.892225 0.38394 -0.237748 + -0.95611 2.22434 -2.34064 -0.886865 0.336692 -0.3164 + -1.02199 2.18508 -2.21343 -0.778211 0.262492 -0.570513 + -0.996492 2.4102 -2.17036 -0.660322 0.207774 -0.721668 + -0.999423 1.89818 -2.6767 -0.564249 -0.59868 -0.568512 + -1.01974 1.93901 -2.55022 -0.927356 0.298486 -0.225649 + -0.996071 2.13301 -2.32965 -0.909622 0.327295 -0.255863 + -1.03285 1.85781 -2.57419 -0.797408 -0.476615 -0.370107 + -1.06243 1.89044 -2.4139 -0.936067 0.272282 -0.222802 + -1.08587 1.87405 -2.34371 -0.929636 0.244839 -0.275375 + -1.01952 2.11653 -2.25951 -0.885086 0.279309 -0.372304 + -0.999951 1.87606 -2.63399 0.128967 -0.841571 -0.524525 + -0.988363 1.85496 -2.62205 -0.546797 -0.72186 -0.424183 + -0.992294 1.85263 -2.60982 -0.460463 -0.839095 -0.289642 + -1.01338 1.85759 -2.5856 -0.163371 -0.986546 -0.00610426 + -1.04854 1.80823 -2.42551 -0.0165023 -0.946948 -0.320961 + -1.07554 1.80925 -2.43787 -0.684384 -0.584851 -0.435394 + -0.986254 1.88944 -2.63897 0.382906 -0.823668 -0.418275 + -0.986783 1.86741 -2.59621 0.655489 -0.487962 -0.576392 + -0.972097 1.83359 -2.56863 0.758818 -0.0740781 -0.647076 + -0.988363 1.85496 -2.62205 0.887672 0.45272 -0.0841598 + -0.960509 1.81249 -2.55669 0.775684 0.275018 -0.568049 + -0.940727 1.79069 -2.54593 0.6882 0.706349 0.165686 + -0.977312 1.90902 -2.67488 0.326318 -0.881797 -0.340516 + -0.942907 1.89832 -2.63916 0.0931135 -0.887607 -0.451091 + -0.95185 1.87874 -2.60324 0.204543 -0.79365 -0.572959 + -0.949697 1.86099 -2.5821 0.127297 -0.684584 -0.717733 + -0.935011 1.82717 -2.55452 0.156906 -0.518131 -0.840786 + -0.976679 1.92511 -2.73795 0.408287 -0.885504 -0.221777 + -0.961467 1.93615 -2.75448 0.285962 -0.921694 -0.262116 + -0.9621 1.92007 -2.69142 0.233567 -0.9203 -0.313836 + -0.932709 1.90732 -2.65595 0.0517874 -0.902264 -0.428063 + -0.854408 1.8762 -2.59584 0.0677582 -0.832606 -0.549705 + -0.852255 1.85836 -2.57475 0.0738102 -0.65499 -0.752024 + -0.941467 1.92742 -2.70595 0.119757 -0.936985 -0.328203 + -0.912075 1.91468 -2.67049 -0.113951 -0.929047 -0.351975 + -0.844209 1.88512 -2.61269 -0.0876091 -0.961355 -0.261001 + -0.731115 1.88176 -2.57266 0.240312 -0.969697 -0.0440154 + -0.840742 1.83956 -2.56178 0.175113 -0.652347 -0.737414 + -0.943743 1.95252 -2.79183 0.294881 -0.912308 -0.284147 + -0.923743 1.94387 -2.74325 0.0231523 -0.935339 -0.352995 + -0.892881 1.92997 -2.73397 -0.370541 -0.850887 -0.372411 + -0.881181 1.90619 -2.68198 -0.379758 -0.903856 -0.197049 + -0.813314 1.87664 -2.6242 -0.200225 -0.971413 0.127542 + -0.860402 1.97181 -2.83144 -0.281652 -0.817224 -0.50281 + -0.819887 1.8968 -2.75452 -0.33971 -0.8377 -0.427617 + -0.808187 1.87303 -2.70255 -0.247318 -0.952387 -0.178306 + -0.756234 1.86791 -2.70108 0.0602364 -0.982106 -0.178436 + -0.761362 1.87152 -2.62273 0.0199043 -0.991865 0.125726 + -0.839839 1.97294 -2.84319 0.439026 -0.435866 -0.78567 + -0.799324 1.89793 -2.76628 0.0703518 -0.696227 -0.714366 + -0.768363 1.89362 -2.75541 0.0197245 -0.740419 -0.671856 + -0.736661 1.88587 -2.74199 0.166587 -0.850358 -0.49914 + -0.67396 1.88607 -2.67533 0.224113 -0.970805 -0.0855009 + -0.846348 1.99907 -2.85285 0.424848 -0.589848 -0.68672 + -0.81119 1.93752 -2.78025 0.689812 -0.0718933 -0.72041 + -0.780228 1.9332 -2.76937 0.00172394 -0.355061 -0.934842 + -0.714993 1.95113 -2.79983 -0.0688085 -0.542818 -0.837027 + -0.683291 1.9433 -2.78645 0.134201 -0.766003 -0.628673 + -0.832711 2.03751 -2.89384 0.537891 -0.763711 -0.356958 + -0.825596 1.99728 -2.80676 0.601099 -0.451418 -0.659471 + -0.817699 1.96365 -2.78991 0.654127 -0.16328 -0.738551 + -0.787041 1.95828 -2.78001 -0.00779252 -0.408731 -0.912622 + -0.811959 2.03572 -2.84774 0.589355 -0.663873 -0.460362 + -0.794939 1.99191 -2.79686 0.0151458 -0.52397 -0.851602 + -0.721806 1.97612 -2.81051 -0.173775 -0.479595 -0.860111 + -0.63233 1.9467 -2.79915 -0.226831 -0.830723 -0.508376 + -0.646625 1.94192 -2.78008 -0.135315 -0.895651 -0.423674 + -0.7722 2.09951 -2.95763 0.719673 -0.694112 0.0166993 + -0.793107 2.08309 -2.88218 0.780176 -0.587641 -0.214486 + -0.771598 2.06407 -2.84745 0.0991126 -0.629943 -0.770291 + -0.79045 2.01671 -2.81301 0.17133 -0.576187 -0.799158 + -0.717317 2.00101 -2.82661 -0.193824 -0.528686 -0.826392 + -0.745388 2.12484 -2.9707 0.105438 -0.985176 -0.135318 + -0.766295 2.10833 -2.8953 0.322422 -0.881794 -0.344214 + -0.754926 2.08123 -2.86297 -0.088241 -0.669275 -0.737756 + -0.734795 2.11178 -2.90688 -0.18419 -0.897889 -0.399835 + -0.723426 2.08469 -2.87455 -0.317962 -0.661377 -0.679323 + -0.700645 2.01817 -2.84213 -0.322437 -0.570899 -0.755055 + -0.711928 2.12546 -3.00077 -0.0942479 -0.978302 -0.184505 + -0.701335 2.1124 -2.93695 -0.434316 -0.827924 -0.354839 + -0.70669 2.08199 -2.88367 -0.556543 -0.624325 -0.548159 + -0.683909 2.01546 -2.85125 -0.63762 -0.589122 -0.496363 + -0.679138 2.09519 -2.95214 -0.650221 -0.572981 -0.498904 + -0.684493 2.06486 -2.89881 -0.738842 -0.498467 -0.453479 + -0.671611 2.04896 -2.90707 -0.824363 -0.360687 -0.436269 + -0.671027 1.99965 -2.85946 -0.832657 -0.514013 -0.206091 + -0.619337 2.10537 -3.02358 -0.774776 -0.598747 -0.203037 + -0.658431 2.07491 -2.94821 -0.719512 -0.476982 -0.504768 + -0.656267 2.01889 -2.91698 -0.847577 -0.345666 -0.402651 + -0.645456 2.00311 -2.92446 -0.796217 -0.434369 -0.421144 + -0.660216 1.98387 -2.86694 -0.694732 -0.681264 -0.230709 + -0.610102 2.09214 -3.03065 -0.648038 -0.417286 -0.637118 + -0.643087 2.04483 -2.95812 -0.82228 -0.283918 -0.4932 + -0.633852 2.0316 -2.96519 -0.787272 -0.336108 -0.516947 + -0.632333 1.99251 -2.93589 -0.523645 -0.703772 -0.480105 + -0.598376 2.08982 -3.03804 -0.0216755 -0.397058 -0.917537 + -0.620729 2.02099 -2.97662 -0.599586 -0.548391 -0.582892 + -0.588531 2.10963 -3.04154 0.33991 -0.205779 -0.917669 + -0.588059 2.02391 -2.99407 0.0558765 -0.592923 -0.803318 + -0.609004 2.01859 -2.98406 -0.354576 -0.67891 -0.642928 + -0.582176 1.97927 -2.93717 -0.146671 -0.864848 -0.48013 + -0.568856 2.10302 -2.9977 0.676745 -0.220017 -0.702573 + -0.578214 2.04372 -2.99759 0.511444 -0.27269 -0.814902 + -0.534166 2.00115 -2.96645 0.120555 -0.661453 -0.740234 + -0.561231 1.9846 -2.94719 -0.0037534 -0.81851 -0.57448 + -0.557018 2.13173 -3.00002 0.53759 -0.49929 -0.679489 + -0.540525 2.08938 -2.98327 0.193884 -0.095052 -0.976409 + -0.549883 2.03016 -2.98311 0.22911 -0.262468 -0.937347 + -0.532865 2.15391 -3.00765 0.237224 -0.777528 -0.582387 + -0.505218 2.1392 -2.99357 -0.0178397 -0.464766 -0.885254 + -0.529371 2.1171 -2.98589 0.108102 -0.267392 -0.957505 + -0.476331 2.05192 -2.98459 0.113045 -0.24789 -0.96217 + -0.460613 2.02282 -2.96798 0.248829 -0.520817 -0.816599 + -0.565033 2.15256 -3.06872 0.484069 -0.846474 -0.221718 + -0.521205 2.16814 -3.0325 0.358025 -0.861725 -0.35951 + -0.492418 2.17623 -3.02551 0.15063 -0.831792 -0.534259 + -0.483079 2.14953 -3.00127 -0.129771 -0.496484 -0.858291 + -0.465177 2.07955 -2.98726 -0.0437703 -0.249576 -0.967365 + -0.50941 2.1894 -3.09931 0.368776 -0.902609 -0.222038 + -0.480623 2.19749 -3.09233 0.05889 -0.976603 -0.206831 + -0.449959 2.18494 -3.04079 -0.257076 -0.853096 -0.454026 + -0.440619 2.15824 -3.01654 -0.398102 -0.517548 -0.757403 + -0.443037 2.08988 -2.99495 -0.353468 -0.3979 -0.846603 + -0.406483 2.02619 -2.95862 -0.232996 -0.809607 -0.538749 + -0.428765 2.01675 -2.95248 0.138018 -0.68137 -0.718809 + -0.45593 2.1985 -3.12628 -0.241834 -0.966007 -0.0913623 + -0.425266 2.18595 -3.07474 -0.394178 -0.887344 -0.239257 + -0.404054 2.16929 -3.06809 -0.679295 -0.628527 -0.378831 + -0.415846 2.14963 -3.03183 -0.674938 -0.397921 -0.621384 + -0.418264 2.08128 -3.01025 -0.753756 -0.316226 -0.576067 + -0.393484 2.18027 -3.1615 -0.501108 -0.855941 -0.127496 + -0.371147 2.13183 -3.0994 -0.713108 -0.487069 -0.504223 + -0.38294 2.11217 -3.06315 -0.812176 -0.21162 -0.543679 + -0.370886 2.08425 -3.07699 -0.813072 0.0218246 -0.581754 + -0.406211 2.05336 -3.02409 -0.891624 -0.241537 -0.382971 + -0.350353 2.16381 -3.16919 -0.29822 -0.830397 -0.470644 + -0.349228 2.13195 -3.11381 -0.462097 -0.573419 -0.676503 + -0.35431 2.09602 -3.09818 -0.713984 -0.0871747 -0.694714 + -0.368641 2.03918 -3.08753 -0.684455 -0.346635 -0.641378 + -0.364508 2.01202 -3.06709 -0.474709 -0.715003 -0.513247 + -0.402078 2.0262 -3.00365 -0.84527 -0.509436 -0.161223 + -0.334436 2.13338 -3.1253 0.199361 -0.454001 -0.868411 + -0.339518 2.09737 -3.10972 -0.288629 -0.190774 -0.938242 + -0.352065 2.05095 -3.10872 -0.394263 -0.244131 -0.885978 + -0.323458 2.01354 -3.07911 0.0809718 -0.797337 -0.598077 + -0.35437 1.97828 -2.99445 -0.405852 -0.893079 -0.194152 + -0.310485 2.08449 -3.1044 0.277689 -0.115665 -0.953683 + -0.323032 2.03799 -3.10346 0.139075 -0.466517 -0.87351 + -0.238304 2.0325 -3.05156 0.339023 -0.780841 -0.524738 + -0.31332 1.9798 -3.00647 0.180299 -0.937267 -0.298366 + -0.302064 2.11371 -3.10301 0.450584 -0.0484366 -0.891419 + -0.237878 2.05695 -3.07591 0.529582 -0.39172 -0.752395 + -0.289754 2.15123 -3.09701 0.371972 -0.235149 -0.897965 + -0.229457 2.08617 -3.07451 0.104246 -0.0261088 -0.994209 + -0.208237 2.10715 -3.07546 0.0272764 -0.330273 -0.943491 + -0.322126 2.17091 -3.1193 0.589221 -0.493477 -0.639764 + -0.289791 2.2002 -3.13563 0.407427 -0.790579 -0.457153 + -0.268534 2.17222 -3.09796 0.235879 -0.484311 -0.842498 + -0.350353 2.16381 -3.16919 0.863495 -0.209925 -0.458593 + -1.10664 1.77992 -2.31808 -0.839459 -0.448712 -0.306541 + -1.11354 1.8732 -2.26963 -0.921075 0.202699 -0.332465 + -1.11601 1.94174 -2.22355 -0.733331 0.272861 -0.622714 + -1.08037 1.78631 -2.37834 -0.268936 -0.87116 -0.410797 + -1.06729 1.76693 -2.35678 -0.529537 -0.799574 -0.283322 + -1.07252 1.76395 -2.33541 -0.49166 -0.841967 -0.222176 + -1.0932 1.74848 -2.21302 -0.467606 -0.868302 -0.165517 + -1.12955 1.76009 -2.17713 -0.388941 -0.899444 -0.199311 + -1.13431 1.77915 -2.24394 -0.823167 -0.455097 -0.339533 + -1.05337 1.7853 -2.36599 0.113347 -0.884727 -0.452117 + -1.05223 1.76606 -2.33606 0.501433 -0.546948 -0.670382 + -1.06729 1.76693 -2.35678 0.812098 -0.0785088 -0.578215 + -1.03915 1.74659 -2.31455 0.693161 -0.0985847 -0.714009 + -1.00204 1.70979 -2.2786 -0.0834123 -0.861284 -0.50123 + -1.01319 1.78128 -2.35383 0.00959363 -0.905434 -0.424379 + -1.01205 1.76204 -2.32391 0.0818213 -0.780047 -0.620349 + -0.999293 1.74336 -2.30196 0.114434 -0.668815 -0.734568 + -0.962187 1.70664 -2.26596 0.125684 -0.873764 -0.46983 + -1.00727 1.7068 -2.25724 -0.314082 -0.929948 -0.191178 + -1.02907 1.808 -2.43692 -0.246026 -0.92968 -0.274166 + -1.0031 1.78788 -2.37926 -0.1156 -0.967138 -0.226452 + -0.919578 1.77053 -2.32961 0.0250614 -0.878133 -0.477759 + -0.906824 1.75185 -2.30766 0.150893 -0.811615 -0.564369 + -0.997619 1.80835 -2.48351 -0.424834 -0.870825 -0.247343 + -0.971655 1.78821 -2.42584 -0.241776 -0.964547 -0.105801 + -0.909494 1.77704 -2.35508 -0.0565466 -0.993731 -0.0964449 + -0.809792 1.77706 -2.32613 0.188447 -0.982079 0.00278942 + -0.863841 1.74856 -2.26716 0.367874 -0.886781 -0.279799 + -0.976528 1.80348 -2.50768 -0.503138 -0.838327 -0.209903 + -0.950965 1.78361 -2.44946 -0.350992 -0.93597 -0.0276399 + -0.888804 1.77243 -2.3787 -0.0913196 -0.992784 0.0777251 + -0.944658 1.78837 -2.53371 -0.350349 -0.905888 -0.237954 + -0.919094 1.7685 -2.47549 -0.180214 -0.977904 -0.105958 + -0.875386 1.76883 -2.46366 0.142442 -0.977915 -0.152948 + -0.845095 1.77276 -2.36687 0.0609837 -0.997089 0.0457605 + -0.940727 1.79069 -2.54593 -0.0728904 -0.727367 -0.682366 + -0.903717 1.78657 -2.5308 0.125959 -0.787047 -0.603897 + -0.864548 1.78519 -2.5062 0.291836 -0.861078 -0.416385 + -0.777425 1.78562 -2.40034 0.261389 -0.949915 -0.171279 + -0.743873 1.78945 -2.37079 0.203337 -0.961421 -0.185268 + -0.811544 1.77651 -2.33737 0.111896 -0.993688 -0.00792463 + -0.923498 1.80837 -2.54156 0.18622 -0.36191 -0.913424 + -0.801573 1.83818 -2.53719 0.379027 -0.799878 -0.465332 + -0.766587 1.80198 -2.44288 0.420044 -0.840084 -0.343253 + -0.731199 1.88017 -2.54571 0.395795 -0.903312 -0.165451 + -0.750759 1.86051 -2.52226 0.460266 -0.799169 -0.386632 + -0.715772 1.8243 -2.42795 0.417089 -0.773367 -0.477431 + -0.693494 1.82274 -2.41123 0.357652 -0.725317 -0.588219 + -0.710576 1.80419 -2.39672 0.346268 -0.851554 -0.393642 + -0.63728 1.90316 -2.52174 0.181397 -0.976218 -0.118719 + -0.64211 1.89408 -2.4698 0.165093 -0.924706 -0.343022 + -0.66167 1.87441 -2.44634 0.405501 -0.773259 -0.487483 + -0.639392 1.87276 -2.42967 0.272619 -0.792925 -0.54493 + -0.637196 1.90475 -2.54868 0.227812 -0.973699 -0.00349911 + -0.603434 1.90976 -2.54397 -0.748915 -0.614656 -0.247638 + -0.608264 1.9006 -2.4921 0.0412206 -0.974082 -0.222408 + -0.621012 1.88748 -2.46078 -0.0896543 -0.892265 -0.442522 + -0.642098 1.90017 -2.57856 0.254049 -0.963444 0.0850545 + -0.609115 1.90933 -2.58583 0.475288 -0.879233 0.0324001 + -0.604214 1.91391 -2.55595 -0.156328 -0.973167 -0.168841 + -0.592266 1.91999 -2.61288 -0.640771 -0.737514 -0.213273 + -0.593047 1.92413 -2.62486 -0.640765 -0.737519 -0.213273 + -0.733381 1.87888 -2.59848 0.193993 -0.977533 0.0824332 + -0.644363 1.8973 -2.60438 0.290735 -0.953812 0.0756082 + -0.594698 1.91353 -2.65769 0.610895 -0.78464 0.105579 + -0.571293 1.94331 -2.66948 0.796323 -0.587156 0.145317 + -0.645979 1.89343 -2.65109 0.285741 -0.957429 0.0410105 + -0.596314 1.90958 -2.70445 0.488558 -0.803174 0.340916 + -0.562054 1.91149 -2.78196 0.892178 -0.327389 0.311183 + -0.556875 1.94742 -2.7414 0.783711 -0.595774 0.175642 + -0.596777 1.8903 -2.71226 0.732716 -0.270747 0.624358 + -0.562516 1.89213 -2.78983 0.707667 0.552525 0.440367 + -0.540993 1.91304 -2.85124 0.948403 -0.138484 0.285227 + -1.15743 1.91745 -2.19529 -0.765219 0.152997 -0.625325 + -1.09573 2.14878 -2.15916 -0.644858 0.242609 -0.724775 + -1.10695 2.28195 -2.11301 -0.632824 0.155424 -0.758537 + -1.0332 2.31833 -2.16724 -0.609489 0.191343 -0.769358 + -1.17645 1.88416 -2.16522 -0.942099 -0.0382322 -0.333148 + -1.18765 2.08689 -2.10077 -0.750283 0.168071 -0.639396 + -1.13716 2.12449 -2.13089 -0.641379 0.256433 -0.723101 + -1.14179 2.21318 -2.0973 -0.651842 0.19096 -0.733918 + -1.14109 2.34193 -2.07631 -0.522511 0.0925126 -0.847599 + -1.16752 1.8059 -2.15487 -0.9547 -0.207369 -0.213416 + -1.21327 1.99216 -2.01029 -0.967286 -0.169126 -0.189087 + -1.20666 2.0536 -2.07071 -0.916515 -0.0594466 -0.395557 + -1.2492 2.14475 -2.01399 -0.773145 -0.235086 -0.589051 + -1.19228 2.17558 -2.06719 -0.60126 0.120367 -0.789936 + -1.14801 1.74733 -2.15642 -0.9288 -0.303759 -0.212278 + -1.17096 1.74047 -2.02934 -0.960066 -0.259605 -0.104302 + -1.20434 1.9139 -1.99994 -0.980805 -0.158871 -0.113052 + -1.24278 2.03662 -1.8647 -0.931278 -0.35514 -0.0812146 + -1.2558 2.08331 -1.95357 -0.901063 -0.375583 -0.216848 + -1.15145 1.6819 -2.03091 -0.486241 -0.794128 -0.364597 + -1.18277 1.76785 -1.93897 -0.978926 -0.193431 -0.0654877 + -1.21615 1.94119 -1.90961 -0.974374 -0.219508 -0.0491093 + -1.24146 2.01092 -1.74839 -0.952108 -0.298057 0.0682104 + -1.28605 2.1145 -1.83579 -0.918882 -0.3945 -0.00512896 + -1.29906 2.16111 -1.92472 -0.830483 -0.540358 -0.135319 + -1.17311 1.71051 -1.92046 -0.935592 -0.34672 -0.0667287 + -1.21483 1.91541 -1.79335 -0.97801 -0.208528 -0.0036615 + -1.22327 1.99607 -1.63906 -0.930147 -0.329843 0.161339 + -1.26074 2.09963 -1.71582 -0.933772 -0.32675 0.145961 + -1.14237 1.66056 -1.98515 -0.402532 -0.874839 -0.26949 + -1.12108 1.64027 -1.948 -0.818254 -0.565399 -0.103853 + -1.13441 1.64513 -1.92742 -0.699975 -0.6896 -0.185703 + -1.17745 1.71176 -1.83562 -0.93609 -0.350689 0.0274534 + -1.20517 1.85808 -1.77485 -0.97794 -0.203166 0.0485556 + -1.10948 1.66565 -1.97575 0.135518 -0.874943 -0.464877 + -1.11968 1.6542 -1.95812 0.352141 -0.739179 -0.574118 + -1.12108 1.64027 -1.948 0.595698 -0.510438 -0.620159 + -1.08136 1.64392 -1.93812 -0.00774151 -0.862955 -0.505221 + -1.06945 1.6088 -1.87888 0.00737978 -0.880066 -0.474794 + -1.11856 1.68698 -2.02151 0.237111 -0.830548 -0.503953 + -1.0775 1.66753 -1.97561 -0.00641392 -0.852507 -0.522676 + -1.08771 1.65608 -1.95799 0.0123477 -0.848293 -0.529384 + -1.0079 1.65625 -1.96487 0.024702 -0.857507 -0.513879 + -1.05241 1.61881 -1.89603 -0.00116581 -0.870749 -0.491726 + -1.14801 1.74733 -2.15642 0.258762 -0.859452 -0.440889 + -0.649583 1.8106 -0.813416 -0.980869 -0.14873 0.125599 + -0.661456 1.89294 -0.847236 -0.993982 -0.0438529 0.100377 + -0.665803 1.85544 -0.942675 -0.953548 -0.102119 0.283404 + -0.723908 1.85085 -1.04912 -0.280782 -0.340263 0.897431 + -0.616529 1.72023 -0.715886 -0.981363 -0.163407 0.101122 + -0.639294 1.82867 -0.742512 -0.97765 -0.198828 0.0683203 + -0.656365 1.90801 -0.744739 -0.997035 -0.0769454 0.0010585 + -0.65719 1.99449 -0.872528 -0.921122 -0.271916 0.278562 + -0.688318 1.91609 -0.979938 -0.818349 -0.264622 0.510176 + -0.641223 1.8031 -0.63302 -0.976983 -0.213048 0.0106765 + -0.658294 1.88243 -0.635237 -0.980913 -0.193882 0.0148055 + -0.66404 1.99448 -0.668502 -0.992128 -0.0802442 -0.0961359 + -0.652099 2.00947 -0.770073 -0.995772 -0.0882967 0.0253457 + -0.690586 2.04601 -0.869965 -0.651675 -0.578504 0.490564 + -0.721714 1.96762 -0.977374 -0.0653536 -0.61846 0.783094 + -0.670984 1.91222 -0.532224 -0.785764 -0.522623 0.330819 + -0.67673 2.02426 -0.56549 -0.98629 -0.109726 -0.123255 + -0.675378 2.08841 -0.670391 -0.993583 -0.0114219 -0.112528 + -0.663437 2.10349 -0.771912 -0.857258 -0.417236 0.3017 + -0.745918 2.11019 -0.834725 0.0945999 -0.771066 0.629688 + -0.677353 2.07043 -0.42066 0.168401 -0.700289 0.693712 + -0.719851 2.09289 -0.351357 0.732537 -0.37235 0.569864 + -0.643618 2.04868 -0.42158 -0.110878 -0.720557 0.684473 + -0.642861 2.13821 -0.297858 -0.0476366 -0.950944 0.305674 + -0.683856 2.1495 -0.235005 0.0157995 -0.967238 0.253381 + -0.719851 2.09289 -0.351357 0.159494 -0.906225 0.391558 + -0.726354 2.17204 -0.165652 -0.245095 -0.965109 0.0921618 + -0.591539 2.1091 -0.346226 0.525479 -0.738011 0.423335 + -0.632028 2.15113 -0.149236 0.301249 -0.929363 0.213385 + -0.673023 2.1625 -0.086333 -0.0360688 -0.990365 0.133701 + -0.694818 2.17955 -0.003062 -0.0667867 -0.990247 0.122268 + -0.590323 2.17315 -0.220969 0.797921 -0.567165 0.204074 + -0.559074 2.21804 -0.16272 0.742297 -0.669738 -0.0210964 + -0.600778 2.19602 -0.090987 0.508197 -0.861075 0.0168798 + -0.617838 2.17332 -0.016465 0.151545 -0.987773 -0.0365742 + -0.537674 2.26323 -0.227793 0.874435 -0.483853 -0.0353454 + -0.519612 2.28057 -0.179638 0.688921 -0.661905 -0.295414 + -0.525803 2.23951 -0.112705 0.565716 -0.803141 -0.186895 + -0.542863 2.21689 -0.038133 0.336101 -0.869336 -0.362343 + -0.498212 2.32577 -0.24471 0.77181 -0.582199 -0.255642 + -0.442832 2.38537 -0.239753 0.598936 -0.611056 -0.517577 + -0.445415 2.33028 -0.186529 0.430497 -0.680179 -0.59332 + -0.451606 2.2893 -0.119546 0.345365 -0.810414 -0.473235 + -0.481643 2.38683 -0.29747 0.783133 -0.529422 -0.326214 + -0.426263 2.44644 -0.292521 0.63061 -0.577187 -0.518833 + -0.361921 2.4423 -0.221354 0.219892 -0.676355 -0.702987 + -0.364504 2.38729 -0.16808 0.179872 -0.620493 -0.763305 + -0.35169 2.32451 -0.12374 0.0690669 -0.742476 -0.666302 + -0.462537 2.44419 -0.355431 0.850651 -0.481766 -0.210462 + -0.415492 2.50481 -0.344625 0.694633 -0.557192 -0.454996 + -0.3606 2.49977 -0.271703 0.259769 -0.658679 -0.70616 + -0.266055 2.51805 -0.310551 -0.407732 -0.602135 -0.686432 + -0.267376 2.46057 -0.260203 -0.371141 -0.620333 -0.690971 + -0.446736 2.50631 -0.40663 0.859747 -0.425557 -0.282376 + -0.39969 2.56693 -0.395823 0.677224 -0.54382 -0.495609 + -0.349828 2.55815 -0.323807 0.250919 -0.68534 -0.683629 + -0.271304 2.57523 -0.3564 -0.387972 -0.617953 -0.683821 + -0.438166 2.56162 -0.466418 0.879113 -0.365454 -0.305947 + -0.392707 2.62786 -0.447353 0.688569 -0.493727 -0.531137 + -0.340044 2.61075 -0.377513 0.230001 -0.691242 -0.685044 + -0.26152 2.62783 -0.410106 -0.387313 -0.649707 -0.654117 + -0.439425 2.6232 -0.51988 0.884767 -0.352439 -0.304915 + -0.393966 2.68945 -0.500823 0.718516 -0.526767 -0.454148 + -0.333061 2.67159 -0.4291 0.150934 -0.612573 -0.775869 + -0.26243 2.671 -0.458472 -0.448585 -0.573961 -0.685084 + -0.423663 2.83709 -0.832142 0.899465 -0.382728 -0.210906 + -0.383908 2.96572 -0.936345 0.754844 -0.569141 -0.326019 + -0.328671 2.73479 -0.471964 0.182213 -0.686864 -0.703574 + -0.258041 2.73411 -0.501386 -0.532705 -0.599616 -0.597232 + -0.389784 3.35025 -1.69157 0.907022 -0.377863 -0.185823 + -0.350029 3.47889 -1.79577 0.865349 -0.438158 -0.243288 + -0.31586 3.53684 -1.79416 0.787117 -0.529784 -0.315874 + -0.318614 3.01098 -0.907536 0.688474 -0.621364 -0.374046 + -0.26365 3.18553 -1.08067 0.535459 -0.631209 -0.561124 + -0.357848 3.75877 -2.25574 0.870537 -0.413683 -0.266518 + -0.357848 3.75877 -2.25574 0.824205 -0.477442 -0.304524 + -0.323679 3.81672 -2.25412 0.515322 -0.433265 -0.739408 + -0.260896 3.7114 -1.9673 0.784248 -0.525438 -0.329954 + -0.287798 3.87878 -2.26541 0.547926 -0.423239 -0.721558 + -0.226921 3.78392 -1.9845 0.744677 -0.555421 -0.370085 + -0.320441 3.88862 -2.27345 -0.237887 -0.0412594 -0.970416 + -0.280552 3.9586 -2.28646 -0.248078 0.0220471 -0.968489 + -0.253823 3.9513 -2.28262 0.464591 -0.392343 -0.793865 + -0.201838 4.02314 -2.28604 0.437655 -0.340648 -0.832116 + -0.170029 3.8391 -1.98008 0.612836 -0.657875 -0.437759 + -0.356322 3.82656 -2.26216 -0.260274 -0.0890776 -0.961417 + -0.335666 3.91617 -2.25556 -0.681655 0.292058 -0.670857 + -0.295777 3.98606 -2.26862 -0.686428 0.385977 -0.61631 + -0.238178 4.05334 -2.27375 -0.537741 0.499111 -0.679502 + -0.228567 4.03034 -2.28992 -0.183981 0.171153 -0.967914 + -0.414938 3.79883 -2.22034 -0.720113 0.272106 -0.638275 + -0.378202 3.85375 -2.23826 -0.701246 0.273284 -0.658461 + -0.342256 3.96762 -2.21109 -0.748213 0.449247 -0.488216 + -0.289296 4.02531 -2.231 -0.722365 0.526344 -0.448499 + -0.357848 3.75877 -2.25574 -0.247884 0.172693 -0.953274 + -0.463356 3.69601 -2.21324 -0.678449 0.274489 -0.681441 + -0.429885 3.82907 -2.17531 -0.813272 0.379751 -0.440883 + -0.384793 3.90521 -2.19379 -0.801508 0.391873 -0.451686 + -0.378565 3.95873 -2.14769 -0.829334 0.460094 -0.317047 + -0.335829 4.02806 -2.14717 -0.776441 0.524639 -0.349133 + -0.478303 3.72625 -2.16821 -0.803751 0.342748 -0.486321 + -0.504429 3.73987 -2.11361 -0.82587 0.397715 -0.399702 + -0.423657 3.88259 -2.12921 -0.833771 0.440712 -0.332565 + -0.365999 4.02351 -2.06529 -0.824745 0.498463 -0.267076 + -0.323263 4.09292 -2.06472 -0.806498 0.507759 -0.302889 + -0.564439 3.60092 -2.11415 -0.794199 0.36304 -0.487289 + -0.591852 3.63862 -2.04383 -0.653269 0.433813 -0.620521 + -0.549484 3.70203 -2.04408 -0.757982 0.467353 -0.455021 + -0.501226 3.80578 -2.03256 -0.773217 0.383494 -0.505042 + -0.456171 3.84361 -2.1021 -0.831653 0.446748 -0.329801 + -0.647085 3.52642 -2.0411 -0.496292 0.278787 -0.822175 + -0.700534 3.60249 -2.02207 0.0222737 0.125976 -0.991783 + -0.619137 3.65463 -2.00676 -0.208829 0.341478 -0.916397 + -0.576769 3.71804 -2.007 -0.317497 0.22297 -0.921672 + -0.532606 3.80752 -1.99978 -0.343624 0.303519 -0.888706 + -0.427697 3.95708 -2.04764 -0.0749504 0.101348 -0.992024 + -0.717464 3.32035 -2.07958 -0.430209 0.27129 -0.861 + -0.770078 3.30759 -2.07469 0.18806 0.182001 -0.965147 + -0.6997 3.51375 -2.03617 0.0713413 0.171735 -0.982557 + -0.776695 3.07793 -2.1311 -0.479383 0.210897 -0.851889 + -0.816951 3.26181 -2.10819 0.367657 -0.000813715 -0.929961 + -0.830246 3.43662 -2.09196 0.337313 0.152628 -0.928937 + -0.831081 3.52536 -2.07787 0.0343598 0.437928 -0.898353 + -0.934467 2.91554 -2.08703 -0.430684 0.111011 -0.895649 + -0.84864 3.12885 -2.08049 -0.353126 -0.0253951 -0.935231 + -0.843466 3.22363 -2.09885 -0.166718 -0.253941 -0.952743 + -0.887219 3.33249 -2.16981 0.36213 0.079671 -0.928716 + -0.877119 3.39084 -2.12547 0.415215 0.373389 -0.829564 + -0.988181 3.1422 -2.07001 -0.230553 -0.116348 -0.966079 + -0.983007 3.23697 -2.08837 -0.25442 -0.358061 -0.898367 + -0.913734 3.29439 -2.16042 -0.0756926 -0.44545 -0.892101 + -0.971944 3.33475 -2.15372 -0.454421 -0.144641 -0.878966 + -0.945597 3.3738 -2.16275 -0.139378 0.337716 -0.930872 + -1.02879 3.12367 -2.04993 -0.567989 -0.356446 -0.741845 + -1.13992 3.1959 -2.03623 -0.229918 -0.177834 -0.956824 + -1.04122 3.27733 -2.08166 -0.430465 -0.205168 -0.87898 + -1.0767 3.38613 -2.07192 -0.431981 -0.0467594 -0.90067 + -1.05036 3.42518 -2.08095 -0.347645 0.418403 -0.839096 + -1.01116 3.05512 -1.99999 -0.827572 -0.310506 -0.467665 + -1.06198 3.0943 -1.98165 -0.214445 -0.482203 -0.849407 + -1.07961 3.16294 -2.03154 -0.414817 -0.837076 -0.356693 + -0.975289 2.85138 -2.0535 -0.951523 0.238084 -0.19473 + -1.01137 3.00939 -1.98658 -0.65421 0.00718047 -0.756279 + -1.06208 3.04749 -1.96857 -0.144276 -0.111882 -0.983192 + -1.17824 3.0538 -1.99369 0.0675386 -0.279717 -0.957704 + -1.23855 3.08685 -1.99834 -0.09158 -0.143726 -0.985371 + -1.00064 2.76627 -2.06269 -0.64153 0.199236 -0.740772 + -1.02943 2.93831 -1.99707 -0.35258 0.213584 -0.911081 + -1.08014 2.97632 -1.97911 -0.0795743 0.149333 -0.98558 + -1.17835 3.00699 -1.98062 0.0720652 -0.065211 -0.995266 + -1.31949 3.00873 -1.98584 -0.0162973 -0.0208787 -0.999649 + -0.986043 2.65546 -2.10375 -0.655297 0.19743 -0.729114 + -1.11286 2.67152 -2.02258 -0.301424 0.261841 -0.916833 + -1.05478 2.85312 -2.00632 -0.362516 0.201705 -0.909889 + -1.10555 2.89233 -1.98803 -0.0906678 0.125675 -0.987919 + -1.20375 2.92299 -1.98954 0.0203355 0.0750271 -0.996974 + -1.09827 2.56071 -2.06364 -0.416537 0.204287 -0.885869 + -1.24444 2.67947 -2.00494 -0.0963287 0.107055 -0.989576 + -1.16363 2.71074 -2.0043 -0.108192 0.175012 -0.978604 + -1.28456 2.89182 -1.99014 -0.0221535 0.0461543 -0.998689 + -1.13497 2.46883 -2.06051 -0.43348 0.143259 -0.889703 + -1.24701 2.56134 -2.01134 -0.227772 0.0698009 -0.971209 + -1.42874 2.76685 -1.99049 -0.0696272 0.0429395 -0.996648 + -1.46366 2.88377 -1.98619 -0.0932224 0.0330562 -0.995096 + -1.25313 2.43444 -2.02713 -0.270164 0.073252 -0.960024 + -1.376 2.51822 -1.99585 -0.114477 0.0144164 -0.993321 + -1.43131 2.64864 -1.99695 -0.075487 0.0136572 -0.997053 + -1.63719 2.8068 -1.96728 -0.093509 0.133554 -0.98662 + -1.23734 2.32035 -2.03312 -0.343442 0.0366645 -0.938458 + -1.36021 2.40413 -2.00184 -0.216379 -0.0373293 -0.975596 + -1.53882 2.55361 -1.98375 -0.0473551 -0.0389049 -0.99812 + -1.59413 2.68402 -1.98483 -0.0448303 0.0564439 -0.997399 + -1.17593 2.27307 -2.06064 -0.473531 0.0996804 -0.875119 + -1.25369 2.22285 -2.03966 -0.502976 -0.0939219 -0.859182 + -1.33576 2.3177 -2.00015 -0.399315 -0.189006 -0.89712 + -1.46842 2.37095 -1.97597 -0.223438 -0.345836 -0.911303 + -1.49287 2.45738 -1.97767 -0.116185 -0.0937373 -0.988794 + -1.33127 2.23969 -1.97442 -0.646114 -0.420912 -0.636687 + -1.42789 2.30996 -1.94454 -0.446572 -0.617113 -0.647878 + -1.62731 2.40409 -1.94996 -0.235512 -0.634903 -0.735821 + -1.66729 2.45157 -1.98061 -0.106977 -0.338737 -0.93478 + -1.71324 2.5478 -1.98668 -0.0974185 -0.0390775 -0.994476 + -1.39568 2.23147 -1.89478 -0.626229 -0.755703 -0.191702 + -1.50851 2.3155 -1.86953 -0.340965 -0.935321 -0.0944317 + -1.58678 2.34309 -1.91852 -0.260574 -0.815644 -0.516552 + -1.73092 2.37115 -1.88572 -0.131401 -0.848915 -0.511934 + -1.781 2.40746 -1.9224 -0.142853 -0.706798 -0.692842 + -1.31454 2.19299 -1.78813 -0.813264 -0.555502 0.173263 + -1.36065 2.22605 -1.8196 -0.626462 -0.723195 0.290748 + -1.47348 2.31008 -1.79434 -0.436618 -0.833227 0.339262 + -1.65265 2.34347 -1.83677 -0.127858 -0.990665 0.0472872 + -1.28924 2.1782 -1.66811 -0.884102 -0.433411 0.174695 + -1.34068 2.29708 -1.63003 -0.761031 -0.612996 0.212291 + -1.38679 2.33015 -1.6615 -0.589409 -0.744175 0.314326 + -1.43417 2.38079 -1.61921 -0.55271 -0.682526 0.478193 + -1.52085 2.36072 -1.75206 -0.317515 -0.81048 0.492246 + -1.26697 2.17874 -1.57305 -0.900365 -0.390708 0.19155 + -1.31841 2.29754 -1.53501 -0.823395 -0.449967 0.345761 + -1.24255 2.08486 -1.60644 -0.947869 -0.274829 0.161286 + -1.23862 2.16438 -1.46977 -0.905292 -0.313672 0.286453 + -1.24799 2.24232 -1.43177 -0.8767 -0.305355 0.371694 + -1.26407 2.36213 -1.3649 -0.841359 -0.267282 0.469762 + -1.33449 2.41726 -1.46819 -0.756846 -0.403412 0.51424 + -1.2045 1.99043 -1.53649 -0.917416 -0.362814 0.163444 + -1.2142 2.0705 -1.50317 -0.940018 -0.267209 0.212052 + -1.18692 2.03124 -1.42837 -0.941062 -0.229075 0.248849 + -1.19436 2.12152 -1.38695 -0.92791 -0.233749 0.290421 + -1.20373 2.19955 -1.3489 -0.87935 -0.241729 0.410257 + -1.18042 1.92842 -1.63808 -0.800197 -0.54896 0.241512 + -1.16165 1.92269 -1.53557 -0.773768 -0.633174 -0.0193038 + -1.17722 1.95109 -1.46175 -0.925285 -0.338291 0.171486 + -1.14099 1.87746 -1.41543 -0.897996 -0.356174 0.258347 + -1.16448 1.97777 -1.38457 -0.885871 -0.279823 0.370041 + -1.17192 2.06806 -1.34315 -0.844979 -0.263254 0.465519 + -1.0651 1.85069 -1.53705 -0.803826 -0.572122 0.162914 + -1.03903 1.79188 -1.47559 -0.62161 -0.56532 -0.542231 + -1.13558 1.86389 -1.47411 -0.784048 -0.569633 -0.246549 + -1.03402 1.78121 -1.51991 -0.745892 0.00624042 0.666037 + -1.00259 1.73764 -1.46965 -0.911133 -0.354543 -0.210087 + -1.08457 1.69014 -1.39597 -0.841294 -0.353496 -0.408982 + -1.09935 1.79026 -1.42779 -0.913192 -0.136649 0.383938 + -1.07254 1.68849 -1.48572 -0.493736 0.219424 0.841474 + -1.01226 1.69252 -1.49689 -0.433205 0.25784 0.863627 + -0.98083 1.64894 -1.44662 -0.999595 -0.0181607 0.0219353 + -1.04813 1.6359 -1.39004 -0.63553 -0.439626 -0.634689 + -1.19025 1.85053 -1.68118 -0.923306 -0.229262 0.308131 + -1.11344 1.68017 -1.5459 -0.899984 -0.129642 0.416199 + -1.03534 1.59892 -1.45797 -0.720565 -0.692201 -0.0405528 + -1.04089 1.60615 -1.4299 -0.816759 -0.576836 -0.0128116 + -1.00949 1.57435 -1.40242 -0.72558 -0.687312 0.0336929 + -1.00394 1.56712 -1.43049 -0.480069 -0.87658 -0.0337773 + -1.16252 1.70413 -1.742 -0.944069 -0.305172 0.124916 + -1.1428 1.64929 -1.72542 -0.853456 -0.511329 0.100777 + -1.09371 1.62534 -1.52933 -0.734295 -0.600879 0.315842 + -1.05132 1.61087 -1.49608 -0.25206 -0.956804 -0.144884 + -0.958178 1.58084 -1.55326 -0.318905 -0.928741 -0.189051 + -1.13874 1.64637 -1.84257 -0.734216 -0.678743 -0.0152977 + -1.10131 1.61933 -1.80392 -0.427943 -0.902582 -0.0470206 + -1.11409 1.62372 -1.75273 -0.461266 -0.886452 0.037892 + -1.15152 1.65076 -1.79137 -0.574764 -0.817688 -0.032139 + -1.13426 1.63956 -1.72157 -0.589242 -0.802918 0.0900953 + -1.1511 1.65248 -1.76974 -0.722256 -0.688154 0.069209 + -1.13384 1.64128 -1.69995 -0.387328 -0.920801 0.0458632 + -1.05968 1.60678 -1.84059 -0.360312 -0.931784 -0.0441978 + -1.00982 1.58762 -1.7782 -0.172767 -0.983746 -0.0489417 + -1.05145 1.60017 -1.74154 -0.306909 -0.949764 0.0612722 + -1.07246 1.61012 -1.71817 -0.354464 -0.922949 0.150067 + -1.09263 1.62597 -1.68702 -0.359884 -0.924163 0.128086 + -1.12108 1.64027 -1.948 -0.409749 -0.910838 -0.0498061 + -1.04635 1.60183 -1.86122 -0.390813 -0.919916 -0.0319293 + -1.04089 1.60615 -1.4299 0.101406 0.631667 0.768579 + -0.980616 1.61008 -1.44111 -0.759623 0.365778 0.537754 + -0.981012 1.60939 -1.42411 -0.943301 0.0838024 -0.321186 + -0.999654 1.61778 -1.41144 -0.58114 -0.451522 -0.677056 + -1.00949 1.57435 -1.40242 0.0864199 0.698891 0.709988 + -1.06695 1.60474 -1.35485 -0.911111 0.180789 -0.370394 + -1.07344 1.61946 -1.31076 -0.94261 0.333636 -0.0131445 + -1.08036 1.67959 -1.33931 -0.953034 -0.0079723 0.30276 + -1.09514 1.77971 -1.37112 -0.952395 -0.141753 0.269905 + -1.0847 1.60428 -1.30646 0.344914 0.873386 0.343847 + -1.05967 1.62708 -1.22854 -0.517706 0.616087 0.593648 + -1.05056 1.6794 -1.29078 -0.623353 0.434418 0.650163 + -1.05747 1.73953 -1.31933 -0.608519 -0.141346 0.78085 + -1.05982 1.83094 -1.29605 -0.863655 -0.0959455 0.494869 + -1.07093 1.61181 -1.2243 -0.555215 0.698731 0.451122 + -1.04195 1.61112 -1.2181 0.0177145 -0.558759 0.829141 + -1.03127 1.62727 -1.22128 0.294438 0.350709 0.888993 + -1.02216 1.67959 -1.28351 -0.163998 0.766711 0.620693 + -1.09388 1.61566 -1.27697 0.931842 -0.292028 -0.215386 + -1.07612 1.61612 -1.32537 0.630763 -0.740881 0.230724 + -1.0649 1.61489 -1.27083 -0.0609777 -0.997269 -0.0416578 + -1.07093 1.61181 -1.2243 -0.0100838 -0.997679 -0.0673415 + -0.970943 1.60308 -1.27899 0.24613 -0.83141 0.498173 + -0.960261 1.61924 -1.28217 0.0509955 -0.433233 0.899838 + -1.02216 1.67959 -1.28351 0.562905 0.590162 0.578659 + -1.06695 1.60474 -1.35485 0.715576 -0.465775 0.52058 + -1.06309 1.61663 -1.34844 0.250124 -0.915138 0.316164 + -1.05514 1.61691 -1.31914 -0.152138 -0.986159 0.0659096 + -1.06817 1.61632 -1.29611 0.151025 -0.985457 -0.0778796 + -0.974216 1.60452 -1.30428 -0.15388 -0.967894 0.198749 + -0.999654 1.61778 -1.41144 0.606177 -0.521017 0.600908 + -1.02216 1.67959 -1.28351 -0.230206 0.395678 0.889069 + -1.03906 1.60437 -1.33602 -0.423485 -0.860589 0.282926 + -0.958142 1.59198 -1.32116 -0.0682836 -0.826814 0.558315 + -1.04444 1.60832 -1.36106 -0.674257 -0.633505 -0.379538 + -1.00451 1.56971 -1.36038 -0.38392 -0.868722 0.312933 + -0.962374 1.55825 -1.37734 -0.0735577 -0.961427 0.265043 + -1.00989 1.57366 -1.38542 -0.7333 -0.633382 -0.247181 + -0.962586 1.55538 -1.43136 -0.177867 -0.982673 -0.052131 + -0.870008 1.5521 -1.46128 -0.103584 -0.994415 -0.020232 + -0.834993 1.54703 -1.48831 -0.0902 -0.99277 0.0791909 + -1.00949 1.57435 -1.40242 -0.773667 0.633547 0.00764688 + -1.00949 1.57435 -1.40242 -0.365035 -0.930807 0.0186478 + -0.91682 1.56909 -1.55411 -0.231713 -0.95774 -0.170419 + -0.881805 1.56411 -1.58109 -0.266134 -0.960008 -0.0869348 + -0.822492 1.53543 -1.53941 -0.1957 -0.977601 0.0774421 + -0.776871 1.53666 -1.55074 0.326105 -0.918971 0.221692 + -0.854296 1.57473 -1.65427 -0.126971 -0.986502 -0.103406 + -0.853425 1.57096 -1.63175 -0.183366 -0.937702 -0.295113 + -0.868117 1.5639 -1.61192 -0.556573 -0.663322 -0.500231 + -0.808803 1.53514 -1.5703 -0.14933 -0.976427 -0.155857 + -0.766598 1.5343 -1.58024 0.238431 -0.971158 0.00170524 + -0.97416 1.59288 -1.59131 -0.252404 -0.962905 -0.0954239 + -0.984773 1.59709 -1.6334 -0.217725 -0.976008 0.00221638 + -0.983652 1.59513 -1.65601 -0.23537 -0.962867 0.132239 + -0.962637 1.58526 -1.67932 -0.159118 -0.978441 0.131661 + -0.90641 1.58098 -1.68711 -0.0566384 -0.997395 -0.0446586 + -0.862303 1.57804 -1.67641 -0.0813725 -0.990691 -0.109134 + -0.768767 1.56808 -1.72116 -0.0529709 -0.996773 -0.060315 + -0.751176 1.56748 -1.67232 -0.0502469 -0.994098 -0.0961447 + -0.750306 1.56371 -1.64979 -0.234412 -0.853581 -0.465242 + -1.06806 1.61523 -1.58262 -0.280695 -0.959771 -0.00704812 + -1.07867 1.61952 -1.62466 -0.260978 -0.963437 -0.0606632 + -1.09376 1.62793 -1.66441 -0.262901 -0.963972 -0.0405197 + -1.11045 1.62969 -1.61588 -0.571358 -0.81851 0.0599255 + -1.11876 1.63288 -1.66019 -0.474541 -0.880086 -0.0161062 + -0.95359 1.58342 -1.78594 -0.0391885 -0.990612 -0.130963 + -0.827228 1.58351 -1.77167 -0.0109673 -0.98491 -0.172719 + -0.783121 1.58057 -1.76098 -0.174831 -0.955985 -0.235641 + -0.776774 1.5714 -1.74331 -0.194397 -0.953847 -0.228879 + -0.962247 1.59901 -1.84773 0.0180731 -0.944338 -0.32848 + -0.835885 1.59909 -1.83347 0.0936741 -0.928146 -0.360237 + -0.782991 1.61007 -1.84089 0.0279097 -0.867559 -0.49655 + -0.729379 1.60414 -1.84242 -0.230313 -0.788832 -0.569824 + -0.740212 1.58506 -1.80657 -0.219807 -0.880026 -0.420997 + -1.01211 1.60125 -1.8584 0.0253295 -0.951035 -0.308043 + -0.940837 1.64332 -1.93428 0.0752452 -0.864885 -0.496299 + -0.887944 1.6543 -1.9417 0.134328 -0.844154 -0.518999 + -0.750584 1.64268 -1.87757 0.0117227 -0.799987 -0.599903 + -1.04635 1.60183 -1.86122 0.00874517 -0.947906 -0.318429 + -1.03521 1.60812 -1.87612 0.0296281 -0.902393 -0.429895 + -0.990703 1.64564 -1.9449 0.0524718 -0.871027 -0.488424 + -0.891333 1.6773 -1.97893 0.153092 -0.871262 -0.466332 + -0.753973 1.66567 -1.91479 0.0224135 -0.87181 -0.489332 + -0.707074 1.6674 -1.92818 -0.566941 -0.767826 -0.298363 + -0.692433 1.63726 -1.94318 -0.910186 -0.408722 -0.0671495 + -1.01425 1.66841 -1.98473 0.0153449 -0.852979 -0.52172 + -1.01888 1.6804 -2.0049 0.0210473 -0.855876 -0.516753 + -1.02739 1.69411 -2.02766 -0.0805906 -0.92199 -0.378735 + -1.01531 1.69599 -2.04791 -0.265431 -0.96072 -0.0810168 + -0.985795 1.68354 -2.06893 -0.213297 -0.97662 0.0267923 + -0.937936 1.68407 -2.04925 0.176096 -0.979275 -0.100049 + -0.906403 1.69126 -2.01231 0.475863 -0.795416 -0.375323 + -0.796615 1.70206 -1.98982 0.055276 -0.895607 -0.441399 + -1.08214 1.67944 -1.99584 0.0674367 -0.855493 -0.513404 + -1.10601 1.7037 -2.03866 0.112258 -0.830651 -0.545359 + -1.11452 1.7175 -2.06136 0.160372 -0.807428 -0.567751 + -1.11534 1.73461 -2.08659 -0.0194852 -0.90383 -0.427449 + -1.10326 1.7364 -2.1069 -0.313409 -0.931672 -0.183744 + -1.14514 1.73694 -2.10343 0.788842 -0.485393 -0.376992 + -1.14596 1.75405 -2.12866 0.537945 -0.790808 -0.291955 + -1.06691 1.72479 -2.14278 -0.420761 -0.901761 -0.0989347 + -1.03739 1.71233 -2.1638 -0.453159 -0.888195 -0.0758787 + -1.14801 1.74733 -2.15642 0.998327 0.0327699 -0.0476409 + -1.05909 1.73242 -2.2304 -0.48969 -0.858861 -0.150206 + -0.985578 1.68671 -2.19063 -0.186364 -0.973788 -0.1304 + -0.937719 1.68725 -2.17096 0.199297 -0.973203 -0.114701 + -0.845878 1.71426 -2.08535 0.311308 -0.944806 -0.102125 + -0.814345 1.72146 -2.04842 0.197049 -0.971279 -0.133371 + -0.919204 1.70335 -2.22546 0.319808 -0.906084 -0.277009 + -0.827363 1.73046 -2.13981 0.418124 -0.89073 -0.178248 + -0.780045 1.75154 -2.13453 0.273036 -0.904565 -0.327434 + -0.750666 1.75461 -2.12943 -0.109871 -0.895508 -0.431271 + -0.765201 1.73346 -2.0804 -0.0347549 -0.962335 -0.269637 + -0.816523 1.76973 -2.26183 0.376997 -0.908085 -0.182357 + -0.729958 1.78796 -2.20421 0.253118 -0.927286 -0.275812 + -0.700579 1.79093 -2.19915 -0.743828 -0.298767 -0.597879 + -0.804428 1.78088 -2.30394 0.335722 -0.941955 -0.00349396 + -0.717864 1.79902 -2.24636 0.371396 -0.923487 -0.0961088 + -0.693261 1.81091 -2.24576 -0.233866 -0.954053 -0.187325 + -0.685856 1.80393 -2.25027 -0.984765 -0.124044 -0.121863 + -0.705589 1.77883 -2.23698 -0.781478 0.616823 -0.093918 + -0.750666 1.75461 -2.12943 -0.696716 0.704855 -0.133289 + -0.731575 1.796 -2.30292 0.322661 -0.946137 0.0267417 + -0.706973 1.80789 -2.30233 -0.477063 -0.826336 0.299298 + -0.709495 1.8001 -2.31164 -0.0983555 -0.908419 0.406326 + -0.689605 1.80637 -2.26988 -0.208619 -0.976405 0.0557856 + -0.685589 1.8085 -2.33898 -0.349439 -0.935665 -0.0492316 + -0.689338 1.81093 -2.35859 0.66566 -0.72292 -0.185157 + -0.736939 1.79227 -2.32506 0.100539 -0.889494 0.445749 + -0.739461 1.78448 -2.33438 0.20031 -0.942322 0.268152 + -0.705839 1.79564 -2.33571 0.454571 -0.89069 0.00599458 + -0.741214 1.78393 -2.34563 0.217153 -0.971784 -0.0920932 + -0.707916 1.79867 -2.37156 0.466936 -0.869884 -0.158975 + -0.676915 1.83214 -2.40552 0.77628 -0.628439 -0.0495339 + -0.678992 1.83517 -2.44137 0.699189 -0.706441 -0.109891 + -0.625186 1.8998 -2.49551 0.836443 -0.481083 0.26253 + -0.645874 1.8849 -2.45391 0.899239 -0.353088 0.258259 + -0.658297 1.8637 -2.40698 0.896016 -0.436693 0.0803439 + -0.67171 1.85164 -2.3627 0.933788 -0.343174 0.101344 + -0.685589 1.8085 -2.33898 0.886894 -0.406265 -0.219929 + -0.601053 1.95609 -2.44482 0.761608 -0.602336 0.239047 + -0.623155 1.94846 -2.40779 0.806442 -0.557092 0.198242 + -0.636569 1.9364 -2.36351 0.851163 -0.477634 0.217687 + -0.580364 1.971 -2.48643 0.774992 -0.596831 0.207798 + -0.534165 2.03217 -2.44998 0.710168 -0.694223 0.117115 + -0.539496 2.03274 -2.40997 0.665053 -0.728829 0.162829 + -0.561598 2.0251 -2.37295 0.643269 -0.738155 0.203301 + -0.600397 1.91406 -2.54321 0.837195 -0.502207 0.216549 + -0.555263 1.99129 -2.51618 0.778008 -0.605523 0.167467 + -0.509064 2.05246 -2.47973 0.713234 -0.691458 0.114813 + -0.453323 2.10837 -2.38597 0.689644 -0.720919 0.068306 + -0.458653 2.10904 -2.34592 0.599352 -0.800315 0.0164888 + -0.643531 1.86852 -2.48694 0.854673 -0.416059 0.31053 + -0.618742 1.88277 -2.53462 0.860034 -0.428077 0.277654 + -0.605994 1.89588 -2.56593 0.853302 -0.506708 0.122973 + -0.580252 1.93347 -2.58302 0.835735 -0.54771 0.0394952 + -0.661911 1.8537 -2.45587 0.855295 -0.417418 0.306975 + -0.690866 1.79182 -2.28809 -0.917138 0.398523 -0.00612391 + -0.685589 1.8085 -2.33898 -0.93944 0.342393 0.0148036 + -1.15072 1.77302 -2.19552 -0.347946 -0.908119 -0.232924 + -0.702535 1.66783 -1.99233 -0.883527 -0.463758 -0.0656402 + -0.716526 1.69944 -2.03547 0.0796162 -0.864748 -0.495855 + -0.749716 1.7037 -2.00326 -0.218345 -0.913923 -0.342155 + -0.762541 1.72793 -2.05523 -0.160226 -0.946201 -0.281124 + -0.729351 1.72366 -2.08744 0.19206 -0.878248 -0.437942 + -0.680883 1.77302 -2.07412 0.766567 -0.468225 -0.439476 + -0.702535 1.66783 -1.99233 0.656057 -0.561386 -0.504416 + -0.811685 1.71602 -2.0232 0.119001 -0.934931 -0.334279 + -0.734341 1.74788 -2.13459 0.138231 -0.865202 -0.481993 + -0.695709 1.8117 -2.16432 0.854791 -0.478307 -0.201384 + -0.690719 1.78757 -2.11712 0.789548 -0.503589 -0.35073 + -0.719806 1.76903 -2.18362 0.677607 -0.735353 0.0102454 + -0.698701 1.8166 -2.21121 0.923499 -0.37738 0.0688019 + -0.65072 1.91757 -2.18509 0.869658 -0.479051 -0.119186 + -0.637963 1.92843 -2.1431 0.841574 -0.48477 -0.238224 + -0.628127 1.91379 -2.10014 0.852506 -0.428285 -0.299677 + -0.705589 1.77883 -2.23698 0.927225 -0.331085 0.175035 + -0.684484 1.8263 -2.26462 0.93937 -0.324291 0.111438 + -0.653712 1.92238 -2.23203 0.881598 -0.461787 -0.0976589 + -0.589979 2.01155 -2.22668 0.732055 -0.674682 -0.0943325 + -0.588229 2.00932 -2.18261 0.757157 -0.649671 -0.0681215 + -0.575472 2.02009 -2.14067 0.732037 -0.674041 -0.0989495 + -0.676987 1.83497 -2.31182 0.960058 -0.274072 0.0563378 + -0.658385 1.92633 -2.27507 0.913671 -0.405278 -0.0308882 + -0.594651 2.01542 -2.26977 0.701129 -0.709864 -0.0671595 + -0.690866 1.79182 -2.28809 0.961302 -0.21348 0.174139 + -0.650887 1.9349 -2.32232 0.889135 -0.429839 0.15709 + -0.605655 2.0055 -2.31019 0.727177 -0.679353 0.0984513 + -0.499475 2.08507 -2.24461 0.519983 -0.85397 0.0187846 + -0.685589 1.8085 -2.33898 0.951615 -0.307286 -0.00203496 + -0.591336 2.007 -2.35139 0.682898 -0.660177 0.312756 + -0.510478 2.07515 -2.28504 0.570976 -0.817267 0.077858 + -0.48074 2.09326 -2.3066 0.555463 -0.8312 0.0238116 + -0.417248 2.12441 -2.19516 0.405727 -0.909644 -0.0890718 + -0.508241 2.08118 -2.19707 0.553133 -0.83281 -0.0217055 + -0.38386 2.15237 -2.27137 0.475121 -0.873301 -0.107726 + -0.405947 2.13659 -2.23205 0.470782 -0.87426 -0.118463 + -0.33785 2.1411 -2.11065 0.374059 -0.877031 -0.30149 + -0.338236 2.127 -2.07943 0.277855 -0.912856 -0.29915 + -0.426015 2.12053 -2.14762 0.3304 -0.936474 -0.117699 + -0.426257 2.13531 -2.39723 0.677107 -0.732586 -0.0696004 + -0.364172 2.16698 -2.30229 0.546318 -0.820226 -0.169608 + -0.315156 2.1684 -2.17734 0.375775 -0.891915 -0.251557 + -0.326549 2.15319 -2.1476 0.351074 -0.903235 -0.246807 + -0.481998 2.07939 -2.49098 0.734128 -0.678113 0.0349072 + -0.407235 2.16024 -2.42981 0.587936 -0.808522 -0.0249545 + -0.34515 2.19191 -2.33487 0.37602 -0.920074 -0.109878 + -0.295469 2.1831 -2.2082 0.186945 -0.969252 -0.160008 + -0.535117 2.0107 -2.556 0.793361 -0.603424 0.0803571 + -0.465729 2.09545 -2.52819 0.729711 -0.68172 0.052724 + -0.460517 2.0966 -2.57438 0.675915 -0.725058 0.13202 + -0.402023 2.16139 -2.476 0.480139 -0.866346 0.137519 + -0.36698 2.17379 -2.47308 0.181389 -0.959584 0.215165 + -0.518848 2.02675 -2.59321 0.777784 -0.623559 0.0789044 + -0.501167 2.04318 -2.63445 0.722833 -0.674191 0.151589 + -0.440632 2.10339 -2.61014 0.43435 -0.824677 0.362282 + -0.405589 2.11579 -2.60722 0.267636 -0.902011 0.338745 + -0.592266 1.91999 -2.61288 0.809897 -0.583216 -0.0626508 + -0.398513 3.98461 -2.03812 -0.535311 0.490147 -0.687894 + -0.30799 4.16202 -1.9874 -0.790491 0.519779 -0.323965 + -0.276587 4.16497 -2.0711 -0.739835 0.556714 -0.377773 + -0.282869 4.08583 -2.16703 -0.712881 0.566542 -0.413317 + -0.326369 4.14841 -1.97002 -0.611097 0.596423 -0.520423 + -0.250851 4.29974 -1.89373 -0.693572 0.66508 -0.276816 + -0.261313 4.23416 -1.99374 -0.730399 0.592907 -0.339084 + -0.21748 4.22262 -2.07876 -0.574808 0.683907 -0.449296 + -0.355553 4.12096 -1.97949 -0.460189 0.563263 -0.686266 + -0.292218 4.25662 -1.87365 -0.722555 0.559325 -0.406287 + -0.26923 4.28621 -1.8763 -0.723482 0.579816 -0.374683 + -0.205029 4.34236 -1.89375 -0.550503 0.718014 -0.425915 + -0.215492 4.27678 -1.99376 -0.549715 0.717863 -0.427183 + -0.401211 4.07733 -1.95971 -0.733835 0.549341 -0.399638 + -0.337876 4.21298 -1.85386 -0.72149 0.581723 -0.375568 + -0.285288 4.38676 -1.73806 -0.698805 0.489042 -0.522025 + -0.237996 4.41396 -1.75877 -0.641133 0.550732 -0.534455 + -0.501226 3.80578 -2.03256 0.573652 -0.352441 -0.739398 + -0.719851 2.09289 -0.351357 -0.980183 -0.11691 -0.159915 + -0.733426 2.16917 -0.325479 -0.422968 -0.872168 0.245806 + -0.690305 2.10063 -0.539561 -0.985224 -0.00356063 -0.171232 + -0.665292 2.18573 -0.653752 -0.867224 -0.469909 0.164646 + -0.718769 2.16766 -0.736671 -0.248566 -0.784045 0.56876 + -0.680219 2.19795 -0.522923 -0.979217 -0.152937 -0.133212 + -0.708907 2.22741 -0.610553 -0.547199 -0.797935 0.25273 + -0.762384 2.20935 -0.693472 0.197273 -0.844076 0.498618 + -0.797269 2.10626 -0.78912 0.578752 -0.634939 0.51176 + -0.775359 1.95469 -0.938779 0.588975 -0.498634 0.635982 + -0.77872 2.17722 -0.248824 -0.694277 -0.696737 -0.180378 + -0.796669 2.22433 -0.213417 -0.94676 -0.136116 -0.291749 + -0.698169 2.24505 -0.487516 -0.871912 -0.48212 -0.0856091 + -0.754293 2.27651 -0.547195 0.0832475 -0.964228 0.251662 + -0.830699 2.16795 -0.637373 0.744345 -0.603115 0.286709 + -0.865584 2.06487 -0.733021 0.828694 -0.431946 0.355933 + -0.829931 2.21614 -0.096232 -0.996534 -0.0432626 -0.071053 + -0.743554 2.29407 -0.424208 -0.314497 -0.942117 -0.116222 + -0.776816 2.28588 -0.307023 0.582122 -0.808527 0.0861305 + -0.793376 2.25035 -0.483283 0.723206 -0.681119 0.114231 + -0.806663 2.18697 -0.024113 -0.319221 -0.938301 -0.133004 + -0.833448 2.18638 0.014919 -0.787728 -0.608449 -0.096299 + -0.830529 2.21353 -0.017905 -0.998984 -0.0415037 -0.0175808 + -0.776816 2.28588 -0.307023 -0.968634 -0.196423 -0.152207 + -0.761369 2.17901 -0.100718 -0.104107 -0.994115 0.0299452 + -0.764288 2.1663 0.096893 0.0609571 -0.994559 -0.0844741 + -0.791073 2.16562 0.135874 -0.0875311 -0.989017 -0.119097 + -0.834045 2.18376 0.093254 -0.844415 0.116963 0.522764 + -0.729833 2.18652 0.061879 0.227542 -0.970325 -0.0818157 + -0.690305 2.10063 -0.539561 0.45234 -0.818888 0.353285 + -0.719851 2.09289 -0.351357 -0.980593 -0.190385 0.0468075 + -0.639633 2.19037 0.066806 -0.0936961 -0.995599 -0.0018826 + -0.649184 2.18275 0.132395 0.050891 -0.975688 -0.213172 + -0.683639 2.16254 0.167409 -0.136421 -0.956444 0.258077 + -0.67044 2.19247 0.209165 0.33403 -0.919375 0.207781 + -0.757773 2.14908 0.186115 0.485313 -0.695055 -0.530443 + -0.69311 2.17527 0.216759 0.527183 -0.447327 -0.722479 + -0.544957 2.17091 0.038111 0.107141 -0.970295 -0.216904 + -0.554508 2.1632 0.10366 0.00154227 -0.998902 0.0468303 + -0.556535 2.1815 0.171369 0.115546 -0.918586 0.377952 + -0.543336 2.21135 0.213068 0.0632389 -0.718486 0.692661 + -0.450826 2.24422 -0.055273 0.222567 -0.824429 -0.520366 + -0.452919 2.19833 0.021021 0.28435 -0.89334 -0.347977 + -0.452089 2.18241 0.091793 0.274449 -0.961493 -0.0144336 + -0.454116 2.2007 0.159503 0.179526 -0.951409 0.250184 + -0.35091 2.27944 -0.059467 0.124402 -0.87549 -0.46695 + -0.346556 2.25176 0.008467 0.169659 -0.931193 -0.322639 + -0.345726 2.23594 0.079281 0.245021 -0.955129 -0.166414 + -0.351772 2.22323 0.157091 0.26965 -0.958692 0.0905479 + -0.237927 2.33918 -0.172751 -0.370569 -0.680571 -0.632061 + -0.248223 2.30299 -0.114056 -0.209345 -0.868011 -0.450256 + -0.24387 2.27531 -0.046122 -0.364768 -0.565263 -0.739879 + -0.211494 2.26453 -0.064842 -0.471636 -0.774043 -0.422395 + -0.247164 2.25438 0.014126 -0.0198724 -0.992017 -0.124527 + -0.25074 2.40196 -0.217091 -0.402341 -0.603263 -0.688618 + -0.086589 2.32683 -0.287961 -0.549091 -0.661287 -0.511075 + -0.096886 2.29063 -0.229258 -0.489414 -0.719265 -0.493084 + -0.06451 2.27976 -0.248027 -0.42926 -0.740469 -0.517148 + -0.125703 2.38312 -0.315846 -0.585852 -0.625718 -0.515029 + -0.048528 2.35557 -0.371727 -0.710127 -0.64505 -0.282189 + -0.009414 2.2992 -0.343893 -0.586879 -0.685003 -0.431676 + -0.142339 2.44172 -0.358958 -0.649364 -0.575581 -0.497024 + -0.061399 2.38566 -0.424453 -0.783583 -0.558522 -0.272122 + -0.010689 2.2915 -0.381352 -0.456529 -0.844607 -0.279678 + -0.010689 2.2749 -0.3052 -0.635906 -0.734806 -0.235975 + -0.162727 2.49951 -0.404448 -0.677746 -0.547546 -0.490769 + -0.081787 2.44345 -0.469944 -0.817378 -0.506353 -0.274773 + -0.02356 2.3215 -0.43412 -0.580548 -0.800358 -0.149635 + 0.02356 2.3215 -0.43412 0.564381 -0.814872 -0.132127 + 0.010678 2.29141 -0.381402 0.488746 -0.844055 -0.220678 + -0.167976 2.5567 -0.450297 -0.717515 -0.45609 -0.526455 + -0.089769 2.48429 -0.520287 -0.85363 -0.409796 -0.321533 + -0.02356 2.31923 -0.513395 -0.481353 -0.837175 -0.259687 + 0.02356 2.31923 -0.513395 0.472986 -0.838855 -0.269458 + -0.180935 2.62069 -0.484529 -0.69222 -0.512026 -0.508587 + -0.102728 2.54819 -0.55457 -0.840253 -0.434519 -0.324297 + -0.031542 2.36016 -0.563687 -0.5556 -0.662305 -0.502654 + 0.031537 2.36008 -0.563737 0.554929 -0.662304 -0.503396 + -0.181846 2.66385 -0.532888 -0.725622 -0.652622 -0.218076 + -0.100078 2.57141 -0.606185 -0.823751 -0.557597 -0.102567 + -0.031542 2.40605 -0.616164 -0.56558 -0.684565 -0.459881 + 0.031537 2.40605 -0.616164 0.566461 -0.684378 -0.459075 + -0.154947 2.62717 -0.609756 -0.800089 -0.579183 -0.156221 + -0.073179 2.53464 -0.683094 -0.88261 -0.41589 -0.219168 + -0.028892 2.42927 -0.667781 -0.542946 -0.77979 -0.31167 + 0.02889 2.42927 -0.667781 0.543045 -0.779693 -0.311739 + -0.211292 2.9129 -0.796651 -0.738777 -0.513833 -0.436101 + -0.108198 2.80586 -0.905062 -0.843288 -0.391336 -0.368404 + -0.059065 2.74121 -0.955474 -0.878553 -0.347436 -0.327769 + -0.028892 2.44778 -0.725853 -0.752265 -0.65779 -0.0375527 + 0.02889 2.44778 -0.725853 0.762213 -0.647315 0.00380121 + -0.196517 3.1695 -1.0593 -0.560707 -0.505592 -0.655732 + -0.06391 3.39357 -1.63559 -0.849924 -0.334386 -0.407204 + -0.014777 3.32891 -1.68601 -0.390802 -0.120575 -0.912544 + -0.014777 2.65435 -0.998232 -0.936183 -0.257571 -0.239202 + 0.016514 2.25648 -0.879903 -0.982725 -0.119354 -0.14144 + -0.214432 3.22701 -1.07951 -0.116923 -0.655085 -0.746454 + -0.049135 3.83237 -1.95563 -0.465604 -0.380007 -0.799254 + -0.049135 3.65017 -1.89825 -0.594469 -0.345198 -0.726254 + 0.014767 3.32891 -1.68601 0.348821 -0.516646 -0.781921 + -0.014777 2.65435 -0.998232 0 -0.46053 -0.887644 + -0.120811 3.88058 -1.97892 0.38784 -0.755631 -0.527827 + -0.067051 3.88988 -1.97584 -0.0901157 -0.735746 -0.671236 + 0.049134 3.83237 -1.95562 0.497791 -0.480955 -0.721725 + 0.049134 3.65017 -1.89824 0.594319 -0.342208 -0.72779 + -0.084071 4.11489 -2.27757 0.139527 -0.330621 -0.933393 + -0.030311 4.12419 -2.27447 0.0489921 -0.443205 -0.89508 + 0.030311 4.1242 -2.27448 -0.0201643 -0.424243 -0.905324 + 0.067051 3.88988 -1.97584 0.388566 -0.705807 -0.592329 + 0.196516 3.1695 -1.0593 0.560764 -0.505454 -0.65579 + -0.144946 4.07823 -2.28167 0.276653 -0.300278 -0.912851 + -0.0953 4.14486 -2.27287 -0.104897 0.290836 -0.951005 + -0.030311 4.15293 -2.27666 -0.0222827 0.197133 -0.980124 + 0.030311 4.15293 -2.27666 0.0390194 0.181315 -0.982651 + -0.156175 4.10828 -2.27693 -0.175556 0.314576 -0.932857 + -0.096826 4.17112 -2.26095 -0.224933 0.570322 -0.790024 + -0.031836 4.17919 -2.26473 -0.0592718 0.561371 -0.825439 + 0.031829 4.17919 -2.26474 0.0604002 0.562218 -0.824781 + 0.095301 4.14486 -2.27287 0.0884889 0.282878 -0.955065 + -0.165785 4.13128 -2.26075 -0.413641 0.56131 -0.716821 + -0.094081 4.1974 -2.23568 -0.268107 0.738435 -0.618735 + -0.031836 4.20574 -2.23932 -0.0690251 0.755118 -0.651945 + 0.031829 4.20566 -2.23938 0.0701433 0.754455 -0.652593 + -0.163041 4.15757 -2.23549 -0.498186 0.665898 -0.555329 + -0.155107 4.20838 -2.17409 -0.489497 0.72553 -0.483735 + -0.090118 4.23945 -2.17751 -0.274891 0.810832 -0.516707 + -0.027872 4.2477 -2.1812 -0.0695179 0.832476 -0.549683 + 0.027872 4.2477 -2.1812 0.0698179 0.832529 -0.549564 + -0.231697 4.09259 -2.23614 -0.633747 0.603666 -0.483686 + -0.223763 4.1434 -2.17474 -0.629403 0.628153 -0.457467 + -0.142402 4.26511 -2.08456 -0.427982 0.781915 -0.453255 + -0.077413 4.2961 -2.08803 -0.270787 0.838045 -0.473661 + 0.016514 2.25648 -0.879903 0 -0.627193 0.778864 + -0.140414 4.31927 -1.99955 -0.381968 0.809692 -0.445532 + -0.077222 4.33603 -2.01459 -0.240827 0.869099 -0.432053 + -0.027872 4.30445 -2.0877 -0.070864 0.86523 -0.496341 + 0.027872 4.30445 -2.0877 0.0711782 0.865085 -0.49655 + -0.149779 4.33989 -1.94548 -0.343558 0.828861 -0.44154 + -0.086587 4.35656 -1.96056 -0.253029 0.849795 -0.462412 + -0.027682 4.3443 -2.01431 -0.0764981 0.897563 -0.434198 + 0.027676 4.34431 -2.01432 0.0734926 0.896408 -0.437094 + -0.191334 4.41115 -1.80271 -0.408517 0.694829 -0.591884 + -0.136083 4.4086 -1.85448 -0.373955 0.758172 -0.534166 + -0.090758 4.42195 -1.861 -0.243877 0.790964 -0.561159 + -0.027682 4.36549 -1.96582 -0.0864853 0.875305 -0.475774 + 0.027676 4.3655 -1.96584 0.0836663 0.876806 -0.473509 + -0.215009 4.44355 -1.76142 -0.516817 0.680783 -0.519071 + -0.135694 4.54426 -1.67186 -0.238937 0.724962 -0.646018 + -0.090369 4.55762 -1.67839 -0.247756 0.783397 -0.570005 + -0.031852 4.43088 -1.86627 -0.0892357 0.813982 -0.573994 + 0.031855 4.43088 -1.86627 0.0878237 0.813034 -0.575554 + -0.159369 4.57666 -1.63058 0.0128266 0.522972 -0.852254 + -0.144635 4.68977 -1.56729 0.330427 0.354524 -0.874717 + -0.088188 4.69572 -1.55799 0.0258261 0.351729 -0.935746 + -0.078099 4.62054 -1.59598 0.0842606 0.606381 -0.790698 + -0.031852 4.51372 -1.75675 -0.104115 0.793682 -0.599357 + -0.209419 4.58301 -1.66818 0.0254648 0.475088 -0.87957 + -0.194686 4.69612 -1.60488 0.10529 0.409634 -0.906153 + -0.147078 4.80597 -1.54415 0.121547 0.297353 -0.946999 + -0.090631 4.812 -1.5348 0.0247308 0.225096 -0.974023 + -0.256711 4.55582 -1.64747 -0.70818 0.409758 -0.57496 + -0.237951 4.66941 -1.59862 -0.620995 0.363117 -0.69463 + -0.203348 4.79753 -1.55013 -0.131802 0.363286 -0.922308 + -0.310484 4.52313 -1.57026 -0.802408 0.376124 -0.463327 + -0.291724 4.63672 -1.52141 -0.748005 0.226768 -0.62375 + -0.246614 4.77073 -1.54392 -0.517528 0.212484 -0.828864 + -0.31653 4.85085 -1.50488 -0.300161 0.0195752 -0.953688 + -0.231399 4.89724 -1.51704 -0.0665514 0.275791 -0.958911 + -0.336983 4.39134 -1.6486 -0.765878 0.441601 -0.467353 + -0.388448 4.37418 -1.57967 -0.742577 0.461037 -0.485823 + -0.361948 4.50597 -1.50133 -0.717274 0.342467 -0.606823 + -0.328191 4.64972 -1.48851 -0.549166 0.0699804 -0.832778 + -0.283081 4.78373 -1.51102 -0.575292 -0.107422 -0.810864 + -0.31438 4.29125 -1.78103 -0.86387 0.436561 -0.251282 + -0.366075 4.29584 -1.69158 -0.73677 0.496339 -0.459149 + -0.417436 4.27618 -1.63193 -0.731863 0.493108 -0.470341 + -0.447268 4.41163 -1.46274 -0.705631 0.34455 -0.619169 + -0.382639 4.23564 -1.74191 -0.710522 0.567209 -0.416452 + -0.434 4.21608 -1.68223 -0.776324 0.51782 -0.359422 + -0.484016 4.13257 -1.67439 -0.891224 0.375442 -0.254486 + -0.476256 4.31372 -1.51495 -0.859402 0.39074 -0.329773 + -0.406135 4.15745 -1.81468 -0.72814 0.576172 -0.371265 + -0.463537 4.10564 -1.77914 -0.785553 0.522746 -0.331123 + -0.513553 4.02222 -1.77126 -0.876295 0.4747 -0.0822618 + -0.534289 3.94934 -1.71543 -0.909097 0.267691 0.319193 + -0.508511 4.08163 -1.62556 -0.994447 0.0968672 -0.0411247 + -0.461047 4.0245 -1.90301 -0.753345 0.554199 -0.354027 + -0.518448 3.97269 -1.86747 -0.686953 0.644963 -0.33484 + -0.574631 3.9544 -1.82219 -0.746063 0.661437 -0.0767546 + -0.595367 3.88153 -1.76637 -0.744993 0.460924 0.482217 + -0.459077 3.95874 -2.0149 -0.71835 0.447079 -0.533005 + -0.518913 3.90592 -1.95821 -0.654694 0.517844 -0.550647 + -0.581128 3.8813 -1.91798 -0.593882 0.653541 -0.469243 + -0.63731 3.86293 -1.87275 -0.717521 0.660918 -0.219889 + -0.664799 3.81544 -1.7985 -0.745189 0.551675 0.374632 + -0.57649 3.82336 -2.00542 -0.199712 0.443968 -0.873503 + -0.638704 3.79866 -1.96524 -0.571018 0.687658 -0.448404 + -0.705771 3.78952 -1.8924 -0.674436 0.721331 -0.157537 + -0.733259 3.74194 -1.8182 -0.63824 0.657479 0.400462 + -0.620652 3.73389 -2.01265 -0.0117598 0.101754 -0.99474 + -0.705245 3.728 -1.99306 -0.441691 0.630195 -0.638563 + -0.772312 3.71886 -1.92022 -0.594243 0.758329 -0.267978 + -0.834258 3.66848 -1.83855 -0.566494 0.73125 0.379945 + -0.702049 3.68176 -2.02795 -0.0868603 0.26937 -0.959112 + -0.846738 3.62203 -1.9957 -0.435314 0.661417 -0.610761 + -0.910701 3.59059 -1.97905 -0.431854 0.726968 -0.533872 + -0.836274 3.68742 -1.90357 -0.502088 0.861533 -0.0752853 + -0.843542 3.57578 -2.0306 -0.215124 0.570767 -0.792431 + -0.948754 3.51836 -2.04094 -0.304793 0.657604 -0.688955 + -0.969458 3.54005 -2.00651 -0.349924 0.726273 -0.591677 + -0.96066 3.60365 -1.92487 -0.49498 0.849033 -0.184763 + -0.958644 3.58479 -1.8598 -0.478888 0.77011 0.421423 + -0.936293 3.46802 -2.08816 -0.271233 0.618736 -0.737291 + -1.05115 3.46115 -2.05065 -0.260596 0.671883 -0.693299 + -1.07186 3.48275 -2.01626 -0.307229 0.760497 -0.572062 + -1.01942 3.5531 -1.95232 -0.42653 0.804003 -0.414309 + -1.10742 3.52012 -1.86978 -0.317231 0.863952 0.39109 + -0.935497 3.43206 -2.11846 -0.067642 0.560242 -0.825562 + -1.21528 3.4251 -2.03881 -0.132946 0.343208 -0.929803 + -1.15462 3.4633 -1.99157 -0.297732 0.841876 -0.450112 + -1.10218 3.53356 -1.92768 -0.301341 0.938192 -0.170265 + -1.15429 3.37695 -2.03582 -0.298708 -0.215492 -0.929697 + -1.21141 3.39853 -2.0294 -0.114029 -0.2606 -0.958689 + -1.35098 3.38002 -2.02933 -0.0591391 -0.279084 -0.958444 + -1.35475 3.42672 -2.04083 -0.132516 0.383609 -0.913939 + -1.35795 3.44244 -2.01504 -0.114242 0.947434 -0.298861 + -1.21849 3.44081 -2.01302 -0.103024 0.899356 -0.424906 + -1.1188 3.26806 -2.04562 -0.341523 -0.0244298 -0.939556 + -1.28209 3.29816 -2.00954 -0.181955 -0.0719586 -0.98067 + -1.33921 3.31983 -2.00308 -0.0693361 -0.282772 -0.956678 + -1.34711 3.35337 -2.01998 0.010529 -0.386072 -0.922409 + -1.30321 3.226 -2.00016 -0.179517 -0.0636078 -0.981696 + -1.48786 3.25512 -1.9694 -0.125144 -0.239845 -0.962711 + -1.49576 3.28867 -1.9863 -0.131868 -0.287625 -0.948622 + -1.49195 3.33784 -1.99188 -0.265667 -0.144179 -0.953223 + -1.38414 3.14797 -1.98761 -0.127415 -0.00609528 -0.991831 + -1.4767 3.16306 -1.97075 -0.206201 0.0169054 -0.978363 + -1.70089 3.16095 -1.91709 -0.215306 -0.118051 -0.969385 + -1.68929 3.21364 -1.93175 -0.244063 -0.141248 -0.959418 + -1.68549 3.26274 -1.93739 -0.373132 0.133625 -0.918105 + -1.55622 2.89886 -1.96934 -0.187411 0.102336 -0.976936 + -1.68973 3.06898 -1.9184 -0.229259 0.0713814 -0.970745 + -1.8276 3.12336 -1.88178 -0.236696 -0.000425215 -0.971584 + -1.816 3.17597 -1.8965 -0.319094 0.0325694 -0.947163 + -1.81518 3.23462 -1.87768 -0.419443 0.33053 -0.845469 + -1.7707 2.97684 -1.9164 -0.133249 0.200992 -0.970488 + -1.84137 3.0456 -1.89209 -0.156951 0.206904 -0.96569 + -1.90588 3.15745 -1.86043 -0.444964 0.201379 -0.872613 + -1.90506 3.21602 -1.84167 -0.588689 0.37704 -0.715043 + -1.80062 2.79505 -1.96253 -0.133814 0.152216 -0.979247 + -1.8713 2.86373 -1.93829 -0.294856 0.185338 -0.937395 + -1.91965 3.07969 -1.87075 -0.373913 0.193058 -0.907148 + -1.98323 3.03521 -1.84151 -0.656245 0.193747 -0.729249 + -1.75757 2.67228 -1.98008 -0.124107 0.0468761 -0.991161 + -1.90627 2.66502 -1.94612 -0.391631 0.041007 -0.919208 + -1.93488 2.81925 -1.90905 -0.537433 0.129762 -0.833263 + -1.86195 2.54063 -1.95267 -0.284155 -0.0919722 -0.954357 + -1.98576 2.53832 -1.90667 -0.4989 -0.0543889 -0.864951 + -2.03739 2.64602 -1.85741 -0.635439 0.0875217 -0.767175 + -2.066 2.80025 -1.82034 -0.686532 0.126833 -0.715952 + -2.03558 3.02965 -1.78487 -0.723429 0.249492 -0.643743 + -1.82098 2.45495 -1.95305 -0.228883 -0.375661 -0.898049 + -1.94479 2.45264 -1.90706 -0.350374 -0.327981 -0.877307 + -2.05358 2.41321 -1.84278 -0.494072 -0.300003 -0.816021 + -2.1144 2.48689 -1.80179 -0.669233 -0.0502481 -0.741352 + -1.91748 2.39915 -1.88422 -0.207774 -0.650334 -0.730681 + -2.02627 2.35974 -1.81995 -0.176308 -0.659126 -0.731074 + -2.11269 2.29131 -1.74084 -0.260374 -0.68608 -0.679338 + -2.14522 2.32336 -1.74013 -0.58607 -0.341166 -0.734934 + -2.20604 2.39694 -1.69919 -0.702351 -0.10835 -0.703536 + -1.86741 2.36285 -1.84754 -0.0723934 -0.865948 -0.494868 + -1.99787 2.33884 -1.79176 0.0342845 -0.875306 -0.482353 + -2.0843 2.27043 -1.71266 0.357818 -0.920097 -0.159338 + -2.22028 2.2444 -1.62197 -0.315277 -0.83798 -0.44541 + -2.25281 2.27635 -1.62132 -0.622178 -0.432474 -0.652581 + -1.82591 2.34578 -1.80238 0.0589825 -0.99629 -0.0626645 + -1.95637 2.32169 -1.74665 0.180869 -0.983194 -0.0248368 + -2.07981 2.29329 -1.66846 0.498506 -0.787628 0.362124 + -2.19142 2.26339 -1.55927 0.585489 -0.685228 0.433203 + -2.19591 2.24044 -1.60352 0.265559 -0.960946 0.0778554 + -1.62473 2.36295 -1.77832 -0.0650082 -0.893835 0.443659 + -1.79798 2.36518 -1.74398 0.170597 -0.813671 0.55573 + -1.92422 2.34637 -1.7204 0.339186 -0.744728 0.574745 + -2.04766 2.31797 -1.64221 0.368669 -0.738623 0.564374 + -2.09623 2.36604 -1.57067 0.571067 -0.625583 0.531534 + -1.65389 2.43073 -1.67692 -0.124636 -0.739206 0.661847 + -1.78809 2.42361 -1.69979 0.111038 -0.647294 0.754109 + -1.91434 2.40472 -1.67626 0.369514 -0.597183 0.711922 + -1.96291 2.45279 -1.60472 0.453011 -0.483146 0.749234 + -1.55002 2.42859 -1.6506 -0.319291 -0.734046 0.599359 + -1.6553 2.55664 -1.57659 -0.235761 -0.578077 0.781181 + -1.7895 2.54952 -1.59947 0.049477 -0.51376 0.856506 + -1.98412 2.60114 -1.53767 0.425468 -0.355264 0.832325 + -2.19343 2.3614 -1.44902 0.658474 -0.437393 0.612454 + -1.4176 2.48106 -1.51169 -0.572434 -0.533142 0.62296 + -1.53345 2.52886 -1.54308 -0.381702 -0.58713 0.71385 + -1.61261 2.75404 -1.41731 -0.341463 -0.526345 0.778694 + -1.81071 2.69787 -1.53241 -0.0531796 -0.461109 0.885749 + -1.42262 2.64013 -1.379 -0.646269 -0.448759 0.617213 + -1.49076 2.72627 -1.3838 -0.450147 -0.516117 0.728692 + -1.42417 2.85621 -1.25266 -0.456849 -0.454836 0.764469 + -1.6557 2.9089 -1.34153 -0.371355 -0.448269 0.813112 + -1.8538 2.85272 -1.45663 -0.0043441 -0.48191 0.87621 + -1.33952 2.57633 -1.3355 -0.665193 -0.432081 0.608954 + -1.32552 2.6894 -1.25595 -0.644431 -0.334877 0.687435 + -1.35603 2.76998 -1.24792 -0.596201 -0.342642 0.726044 + -1.26461 2.50664 -1.301 -0.751112 -0.319782 0.577556 + -1.25061 2.61971 -1.22144 -0.662114 -0.340955 0.66735 + -1.24715 2.75846 -1.16056 -0.644224 -0.279814 0.711814 + -1.27766 2.83913 -1.15248 -0.656332 -0.213873 0.723524 + -1.26369 2.93221 -1.11991 -0.543691 -0.377198 0.749748 + -1.20022 2.30514 -1.29638 -0.829237 -0.227693 0.510413 + -1.20076 2.44973 -1.23243 -0.807709 -0.211129 0.550483 + -1.18193 2.61173 -1.15402 -0.757177 -0.231489 0.610816 + -1.17847 2.75048 -1.09314 -0.697503 -0.188561 0.691328 + -1.15569 2.85747 -1.04705 -0.648235 -0.178146 0.740307 + -1.15642 2.2665 -1.23506 -0.768634 -0.25871 0.585039 + -1.13711 2.35673 -1.17514 -0.742867 -0.261386 0.6163 + -1.11549 2.42714 -1.11729 -0.705038 -0.26208 0.658965 + -1.17913 2.52014 -1.17457 -0.82744 -0.163809 0.537131 + -1.10261 2.61414 -1.04439 -0.678291 -0.162712 0.716552 + -1.15994 2.16083 -1.28762 -0.779226 -0.245919 0.576481 + -1.07329 2.23459 -1.16719 -0.602811 -0.330372 0.726273 + -1.05398 2.32482 -1.10727 -0.562054 -0.346554 0.750996 + -1.02917 2.41408 -1.05708 -0.520297 -0.309529 0.795916 + -1.09981 2.52255 -1.06495 -0.684803 -0.222119 0.694052 + -1.10748 2.05776 -1.27712 -0.653928 -0.306117 0.691861 + -1.09549 2.15062 -1.22155 -0.626568 -0.318646 0.711251 + -0.964186 2.25183 -1.08325 -0.534239 -0.306893 0.787658 + -0.93618 2.33064 -1.03375 -0.49618 -0.325829 0.804761 + -0.911368 2.41982 -0.983609 -0.422087 -0.240743 0.874005 + -1.12102 1.97167 -1.3234 -0.710353 -0.293973 0.639515 + -1.01448 2.0909 -1.18991 -0.641829 -0.247052 0.725962 + -0.986391 2.16787 -1.13762 -0.615956 -0.299513 0.728622 + -0.937618 2.10507 -1.11184 -0.461012 -0.290509 0.838494 + -0.907448 2.17665 -1.07843 -0.347757 -0.346562 0.871183 + -1.09753 1.87136 -1.35425 -0.816195 -0.192413 0.544796 + -1.02801 2.00471 -1.23623 -0.738019 -0.181504 0.649911 + -0.992937 1.94976 -1.19306 -0.70954 -0.0574575 0.702319 + -0.965703 2.0281 -1.16413 -0.618031 -0.17955 0.765375 + -1.06221 1.92259 -1.27918 -0.889397 0.073742 0.451149 + -1.02713 1.86773 -1.23596 -0.792379 -0.0446357 0.608394 + -0.99815 1.78121 -1.21072 -0.679744 0.0880096 0.72815 + -0.970916 1.85955 -1.1818 -0.64461 0.0236216 0.764147 + -0.944993 1.94571 -1.17164 -0.49636 -0.0377188 0.867297 + -1.03288 1.78952 -1.25311 -0.915521 -0.0604097 0.397709 + -1.01446 1.69188 -1.20979 -0.879753 0.0666659 0.470735 + -1.0114 1.59751 -1.17953 -0.998089 -0.00594584 -0.061504 + -0.995087 1.68693 -1.18041 -0.933843 0.191168 0.30231 + -0.973838 1.76895 -1.17167 -0.930113 0.206864 0.303474 + -1.03052 1.69812 -1.27639 -0.955703 -0.268696 0.120138 + -1.0202 1.61368 -1.22695 -0.951187 -0.250823 -0.179811 + -1.00583 1.52632 -1.17682 -0.909522 -0.337774 -0.242235 + -1.01377 1.61179 -1.12827 -0.966765 0.0807322 0.242585 + -0.995136 1.68804 -1.12174 -0.936915 0.198063 0.288029 + -1.02216 1.67959 -1.28351 -0.884993 -0.448046 0.126656 + -0.994441 1.63158 -1.25995 -0.884773 -0.448254 0.127458 + -0.800745 2.16722 0.143497 -0.266488 -0.953999 -0.13737 + -0.757773 2.14908 0.186115 -0.266484 -0.954 -0.137366 + -0.977225 1.46075 -1.16166 -0.540388 -0.833129 -0.117799 + -1.00821 1.5406 -1.12556 -0.819157 -0.235047 0.523196 + -0.922127 1.44708 -1.17038 -0.25698 -0.513093 -0.818961 + -0.956138 1.59387 -1.09763 -0.188993 -0.184014 0.964583 + -0.989636 1.62409 -1.09438 -0.525167 -0.061513 0.848773 + -0.905604 1.68879 -1.07423 -0.27887 -0.713951 0.642266 + -0.971002 1.70035 -1.08785 -0.509734 -0.180965 0.841084 + -0.948906 1.69815 -1.06444 -0.61871 -0.785323 -0.0216053 + -0.797461 1.74686 -1.05502 0.348302 -0.398457 0.84848 + -0.837016 1.7382 -1.03661 0.775411 -0.49829 0.387873 + -0.901206 1.61571 -1.00085 0.715941 -0.513326 -0.473208 + -0.854714 1.6674 -0.986595 0.88732 -0.454064 0.080551 + -0.763463 1.84218 -1.03071 0.515865 -0.435311 0.737826 + -0.817107 1.82925 -0.992113 0.72016 -0.382189 0.579052 + -0.848173 1.81015 -0.954435 0.831705 -0.250724 0.495383 + -0.88578 1.6483 -0.948908 0.29959 -0.669645 0.679574 + -0.901206 1.61571 -1.00085 0.693105 -0.685132 0.224053 + -0.826709 1.95084 -0.893124 0.736538 -0.417882 0.531871 + -0.882893 1.77276 -0.908069 0.867289 -0.280717 0.411106 + -0.912574 1.69183 -0.92031 0.393387 -0.722894 0.568042 + -0.943193 1.68178 -0.955688 -0.850662 -0.47655 0.22198 + -0.9164 1.63825 -0.984295 -0.695892 -0.656655 0.290755 + -0.901206 1.61571 -1.00085 -0.425502 -0.704292 0.568261 + -0.861429 1.91345 -0.846758 0.889291 -0.274612 0.365719 + -0.893682 1.87478 -0.783184 0.952703 -0.194267 0.233706 + -0.901912 1.77293 -0.848373 0.938045 -0.280433 0.203542 + -0.931592 1.69201 -0.860605 0.617175 -0.764469 0.186231 + -0.942828 1.68755 -0.866885 0.286173 -0.949441 0.129099 + -0.897836 2.0262 -0.669447 0.954947 -0.251594 0.157406 + -0.906177 1.85878 -0.71386 0.857558 -0.509565 0.0702668 + -0.914407 1.75692 -0.77904 0.971355 -0.133928 0.196298 + -0.923086 1.71773 -0.754359 0.624715 -0.644696 0.440565 + -0.934322 1.71336 -0.760589 -0.598461 -0.707358 0.376152 + -0.869782 2.14179 -0.573461 0.888404 -0.447224 0.103582 + -0.910296 1.95936 -0.588676 0.961004 -0.229764 0.153884 + -0.882242 2.07495 -0.492681 0.941447 -0.330552 0.0664271 + -0.915054 2.03059 -0.423643 0.703566 -0.688659 0.175335 + -0.833842 2.20954 -0.4174 0.843498 -0.529591 0.0896856 + -0.866654 2.16518 -0.348362 0.884182 -0.453976 0.110124 + -0.779985 2.29664 -0.306655 0.78012 -0.618285 0.0955808 + -0.820451 2.25574 -0.240823 0.775963 -0.622929 0.0992019 + -0.84198 2.23368 -0.221018 0.82061 -0.563294 0.0964302 + -0.899356 2.11045 -0.280376 0.81514 -0.559007 0.151852 + -0.848062 2.25593 0.053241 0.726813 -0.686831 -0.00237746 + -0.86959 2.23379 0.072996 0.867972 -0.492529 -0.0635625 + -0.874682 2.17887 -0.153082 0.93638 -0.34992 0.0273723 + -0.872962 2.20626 0.169881 0.949076 -0.200427 -0.243071 + -0.878053 2.15134 -0.056197 0.966319 -0.249561 -0.0628171 + -0.892074 2.13502 -0.102131 0.440964 -0.893313 0.0868521 + -0.923579 2.11023 -0.208393 0.514534 -0.830556 0.213148 + -0.9677 2.00174 -0.371486 0.504991 -0.852363 0.135872 + -0.828119 2.24167 0.237951 0.389455 -0.912287 -0.12672 + -0.822356 2.22867 0.269664 0.624984 -0.414468 -0.661522 + -0.855557 2.12347 0.166472 0.95707 0.0074767 -0.289759 + -0.869578 2.10715 0.120537 0.52764 -0.815524 -0.237731 + -0.928957 2.14091 -0.013939 0.514104 -0.828587 -0.221675 + -0.960462 2.11612 -0.120201 0.114763 -0.949988 0.290435 + -0.689714 2.22859 0.3148 -0.221485 -0.916279 0.333731 + -0.645114 2.2745 0.37449 -0.197541 -0.70019 0.686084 + -0.549107 2.2493 0.375134 -0.182217 -0.884402 0.429687 + -0.504507 2.2952 0.434824 -0.249365 -0.967644 -0.0384942 + -0.695478 2.2415 0.283037 -0.290957 -0.953189 0.0823044 + -0.656684 2.21392 0.282414 -0.340352 -0.706998 0.619931 + -0.570774 2.244 0.324112 0.0107686 -0.880301 0.474292 + -0.451134 2.24204 0.399915 -0.239691 -0.85309 -0.463449 + -0.414515 2.17767 0.436803 -0.770046 -0.633828 -0.0727464 + -0.813755 2.21001 0.167176 -0.653682 -0.725331 0.215857 + -0.774962 2.18234 0.16651 -0.662782 -0.387812 0.640564 + -0.672983 2.13364 0.236662 -0.234453 -0.678889 0.695803 + -0.587072 2.16372 0.27836 0.433978 -0.883631 0.17567 + -0.4728 2.23674 0.348895 -0.0690611 -0.964036 -0.256641 + -0.848062 2.25593 0.053241 -0.899549 -0.436635 0.0126956 + -0.833698 2.22428 -0.017537 -0.972286 -0.201425 -0.118696 + -0.800745 2.16722 0.143497 -0.673742 0.668008 0.31597 + -0.779985 2.29664 -0.306655 -0.961153 -0.268991 -0.0618751 + -0.793376 2.25035 -0.483283 -0.94756 -0.284124 0.146298 + -0.905691 2.11918 0.074307 0.960751 -0.0657779 -0.269501 + -0.927779 1.73612 -0.733023 -0.0606392 -0.762523 0.644113 + -0.910296 1.95936 -0.588676 0.99301 -0.0738874 0.0920415 + -0.800745 2.16722 0.143497 -0.607963 -0.149967 0.779673 + -0.698766 2.11852 0.21365 -0.562192 -0.244004 0.790191 + -0.634104 2.14471 0.244295 0.483673 -0.72715 -0.487148 + -0.49705 2.29366 0.303292 0.132551 -0.898236 -0.419048 + -0.417636 2.26287 0.309421 -0.558912 -0.726121 -0.400456 + -0.393386 2.20586 0.354973 -0.751536 -0.583386 -0.307984 + -0.368257 2.13837 0.383673 -0.842988 -0.492074 -0.217336 + -0.544082 2.27465 0.269227 0.636425 -0.625105 -0.451892 + -0.521412 2.29176 0.261582 0.198375 -0.913628 0.354868 + -0.436632 2.29198 0.270599 -0.349242 -0.918979 0.183051 + -0.341659 2.14994 0.304622 -0.590922 -0.461859 -0.661436 + -0.323066 2.06909 0.320072 -0.787551 -0.396245 -0.471969 + -0.458556 2.21157 0.222087 -0.0816158 -0.864391 0.496151 + -0.360655 2.17914 0.26585 -0.594786 -0.739531 -0.315156 + -0.757773 2.14908 0.186115 0.425881 0.00712076 -0.904751 + -0.356213 2.23418 0.219722 -0.0791444 -0.906976 -0.413679 + -0.255573 2.2155 0.158679 -0.472097 -0.709327 -0.523431 + -0.260015 2.16046 0.204812 -0.546939 -0.531354 -0.646932 + -0.25963 2.10261 0.248802 -0.628203 -0.369867 -0.684514 + -0.25321 2.24159 0.091878 -0.182373 -0.952253 -0.244857 + -0.159262 2.21968 0.033037 -0.309951 -0.870516 -0.382272 + -0.154596 2.18535 0.100294 -0.405122 -0.706198 -0.580655 + -0.154212 2.12742 0.144235 -0.42478 -0.510078 -0.747918 + -0.156899 2.24578 -0.033764 -0.155742 -0.968762 -0.192988 + -0.082695 2.24703 -0.071537 -0.022138 -0.989172 -0.145084 + -0.081395 2.22044 -0.002884 0.0259693 -0.913436 -0.406154 + -0.07673 2.18603 0.064323 -0.0808295 -0.830636 -0.550918 + -0.154394 2.249 -0.110343 -0.250281 -0.94924 -0.190531 + -0.08019 2.25017 -0.148166 0.0928859 -0.990571 -0.100701 + -0.02725 2.24172 -0.024536 0.105285 -0.945042 -0.309532 + -0.02595 2.21513 0.044117 0.183362 -0.83223 -0.523231 + -0.02595 2.16442 0.105158 0.126649 -0.73229 -0.669112 + -0.118724 2.25914 -0.189312 -0.644393 -0.505473 -0.573807 + -0.070071 2.25744 -0.21357 -0.0346311 -0.950151 -0.309862 + -0.02725 2.26148 -0.094764 0.204235 -0.958795 -0.197484 + 0.02725 2.26148 -0.094764 -0.112465 -0.980759 -0.159571 + 0.02725 2.24172 -0.024536 -0.0973461 -0.940416 -0.325793 + -0.015856 2.27806 -0.272286 -0.692326 -0.674947 -0.255208 + -0.017131 2.26876 -0.160169 0.132692 -0.991072 -0.0129884 + 0.017132 2.26876 -0.160169 -0.0970983 -0.995025 0.0222771 + 0.08019 2.25017 -0.148166 -0.0992598 -0.991427 -0.0849676 + 0.082695 2.24703 -0.071537 -0.0676404 -0.980529 -0.184354 + -0.017131 2.25377 -0.233603 -0.672001 -0.739387 -0.0414943 + -0.017131 2.26876 -0.160169 -0.999184 0.0395704 -0.00807802 + 0.010678 2.2749 -0.3052 0.640246 -0.728935 -0.24236 + 0.017132 2.25377 -0.233603 0.12652 -0.980525 -0.150209 + 0.070072 2.25744 -0.21357 0.131999 -0.946954 -0.293008 + 0.118717 2.25914 -0.18932 0.644411 -0.505444 -0.573813 + 0.154394 2.249 -0.110343 0.248355 -0.948936 -0.194524 + 0.009403 2.2992 -0.343893 0.907328 -0.39374 -0.147391 + 0.015857 2.27806 -0.272286 0.680649 -0.659772 -0.318463 + 0.064503 2.27977 -0.248036 0.429281 -0.740471 -0.517127 + 0.211487 2.26453 -0.064851 0.47178 -0.773808 -0.422663 + 0.247164 2.25439 0.014118 0.0696504 -0.988172 -0.136617 + 0.048517 2.35557 -0.371727 0.704882 -0.656029 -0.269754 + 0.125703 2.38312 -0.315846 0.581502 -0.618836 -0.528107 + 0.086589 2.32683 -0.287961 0.542128 -0.665705 -0.512771 + 0.061399 2.38566 -0.424453 0.808042 -0.548472 -0.215049 + 0.142328 2.44172 -0.358949 0.638228 -0.585929 -0.499351 + 0.25074 2.40196 -0.217091 0.412862 -0.596397 -0.688372 + 0.237927 2.33919 -0.172759 0.374804 -0.684412 -0.625381 + 0.081787 2.44345 -0.469944 0.821557 -0.498454 -0.276745 + 0.162716 2.49951 -0.404439 0.672959 -0.54307 -0.502196 + 0.267365 2.46057 -0.260203 0.376942 -0.624658 -0.683899 + 0.364503 2.38729 -0.16808 -0.147701 -0.662525 -0.734333 + 0.089764 2.48429 -0.520287 0.852656 -0.40991 -0.323962 + 0.167976 2.5567 -0.450297 0.720992 -0.452007 -0.525223 + 0.266044 2.51805 -0.310551 0.425678 -0.588121 -0.687686 + 0.360602 2.49977 -0.271703 -0.252078 -0.667705 -0.700447 + 0.361923 2.4423 -0.221354 -0.200971 -0.667831 -0.716667 + 0.102723 2.54819 -0.55457 0.84008 -0.434995 -0.324106 + 0.180935 2.62069 -0.484529 0.693794 -0.514081 -0.504352 + 0.271304 2.57523 -0.3564 0.386137 -0.616703 -0.685986 + 0.100077 2.57141 -0.606185 0.823852 -0.557405 -0.102796 + 0.181855 2.66385 -0.532888 0.313529 -0.948602 0.0430502 + 0.26152 2.62783 -0.410106 0.378469 -0.656392 -0.652618 + 0.340041 2.61075 -0.377513 -0.233545 -0.687877 -0.687228 + 0.349826 2.55815 -0.323807 -0.258667 -0.689309 -0.676716 + 0.073178 2.53464 -0.683094 0.882518 -0.416255 -0.218848 + 0.154956 2.62717 -0.609756 0.790133 -0.588326 -0.171937 + 0.262439 2.671 -0.458472 0.481221 -0.592234 -0.646286 + 0.059054 2.74121 -0.955474 0.878544 -0.347442 -0.327789 + 0.108192 2.80586 -0.905062 0.84321 -0.391443 -0.368469 + 0.25805 2.7342 -0.501336 0.575171 -0.552291 -0.603451 + 0.016514 2.25648 -0.879903 0.997942 -0.0142128 -0.0625224 + -0.9191 1.77532 -0.757703 0.863215 -0.272616 0.424901 + -0.927779 1.73612 -0.733023 0.965021 -0.051872 0.256989 + -0.994441 1.63158 -1.25995 -0.485316 -0.448721 -0.750412 + -0.699814 1.69538 -1.32206 0.90454 -0.205812 0.373428 + -0.704309 1.62413 -1.34845 0.818599 -0.454673 -0.350952 + -0.692772 1.67708 -1.37616 0.976357 -0.216071 -0.00636239 + -0.699505 1.64767 -1.36081 0.120086 -0.480725 -0.86861 + -0.711042 1.59463 -1.33315 0.233098 -0.489048 -0.840534 + -0.719793 1.60413 -1.3202 0.761892 -0.349214 0.5455 + -0.711042 1.59463 -1.33315 0.751826 -0.174539 0.63584 + -0.748272 1.58103 -1.31759 0.447718 -0.677802 0.58321 + -0.761571 1.58121 -1.3069 0.188617 -0.973236 0.131283 + -0.848896 1.59106 -1.29936 -0.0676339 -0.997591 0.015436 + -0.862195 1.59124 -1.28868 -0.0867424 -0.995577 -0.036101 + -0.759733 1.60831 -1.24384 0.640418 -0.650066 0.408998 + -0.801512 1.58539 -1.23054 0.285219 -0.890828 0.353661 + -0.977933 1.61141 -1.18422 0.548729 -0.595782 -0.586464 + -0.946964 1.61536 -1.27285 -0.462913 -0.884374 -0.059952 + -0.994441 1.63158 -1.25995 0.956751 0.248319 -0.151541 + -0.955511 1.48158 -1.19533 0.963046 0.15508 -0.22021 + -1.00886 1.67572 -1.2742 -0.651743 -0.660064 0.373559 + -1.02216 1.67959 -1.28351 -0.574611 -0.57638 0.581041 + -0.710918 1.55531 -1.66445 -0.0168882 -0.92895 -0.369821 + -0.698533 1.56096 -1.65062 0.562251 -0.808668 0.173002 + -0.738069 1.5453 -1.62151 0.133805 -0.977218 -0.164746 + -0.765583 1.55311 -1.63143 -0.167649 -0.857189 -0.48695 + -0.695642 1.56591 -1.6828 -0.777786 -0.411159 -0.475391 + -0.666623 1.5694 -1.74905 -0.761908 0.572093 -0.303654 + -0.780274 1.54606 -1.61161 -0.137724 -0.915593 -0.377784 + -0.70293 1.57108 -1.72015 -0.0398422 -0.994837 -0.0933409 + -0.67746 1.59199 -1.83878 0.508764 -0.797592 -0.324047 + -0.72052 1.57168 -1.769 0.0946379 -0.986478 -0.133807 + -0.733866 1.5759 -1.7889 -0.119709 -0.950796 -0.285755 + -0.690805 1.59621 -1.85868 0.135136 -0.854781 -0.501087 + -0.644552 1.69844 -1.93855 0.851291 -0.416087 -0.319648 + -0.679972 1.61529 -1.89452 0.529116 -0.808327 -0.258155 + -0.657013 1.72041 -1.98721 0.807873 -0.434723 -0.397941 + -0.666892 1.74132 -2.03102 0.736366 -0.464695 -0.491755 + -0.618961 1.9043 -2.05851 0.853878 -0.396202 -0.337516 + -0.692433 1.63726 -1.94318 -0.180185 -0.91296 -0.366112 + -0.692433 1.63726 -1.94318 0.717053 -0.53926 -0.441625 + -0.575139 2.01336 -2.097 0.763209 -0.617583 -0.190008 + -0.506492 2.07895 -2.15301 0.531751 -0.838599 -0.118292 + -0.248157 2.16615 -2.10865 0.108474 -0.934503 -0.339024 + -0.236264 2.17147 -2.12526 -0.0254974 -0.970204 -0.240943 + -0.211458 2.17238 -2.14524 -0.139532 -0.979493 -0.14534 + -0.270663 2.18392 -2.22823 -0.00269414 -0.99329 -0.115618 + -0.239822 2.18818 -2.24701 -0.081898 -0.992073 -0.095312 + -0.146993 2.16015 -2.15325 -0.104751 -0.980314 -0.16737 + -0.119333 2.16347 -2.1654 0.0441472 -0.975183 -0.216954 + -0.314309 2.19617 -2.35364 0.0538928 -0.997682 0.0415453 + -0.268684 2.19336 -2.36638 -0.0585484 -0.995402 0.0758044 + -0.206692 2.18146 -2.25856 -0.157522 -0.986015 -0.0544196 + -0.321355 2.17099 -2.48582 0.0353566 -0.964084 0.263235 + -0.27985 2.16796 -2.50339 -0.0479251 -0.958592 0.280722 + -0.230059 2.1897 -2.37884 -0.128191 -0.98699 0.0970404 + -0.168067 2.17779 -2.27101 -0.0113098 -0.996495 -0.082884 + -0.364216 2.11959 -2.62621 0.160657 -0.921714 0.353033 + -0.322711 2.11657 -2.64377 0.113074 -0.942002 0.315985 + -0.236111 2.15775 -2.5155 -0.0391953 -0.964627 0.260688 + -0.18632 2.17957 -2.3909 -0.0550696 -0.992989 0.104592 + -0.450585 2.06243 -2.70541 0.449636 -0.837078 0.311654 + -0.409212 2.06633 -2.72435 0.292901 -0.8983 0.327514 + -0.370329 2.07271 -2.7538 0.271262 -0.917557 0.2907 + -0.290031 2.11226 -2.67471 0.0813537 -0.955006 0.285209 + -0.481281 2.05005 -2.67016 0.609404 -0.753512 0.246668 + -0.496392 2.00565 -2.75105 0.653384 -0.714778 0.249365 + -0.458077 2.02381 -2.7897 0.484304 -0.818918 0.307934 + -0.419195 2.03027 -2.8191 0.380277 -0.876176 0.29615 + -0.527088 1.99318 -2.71585 0.787791 -0.442397 0.428567 + -0.526564 1.96599 -2.80317 0.736628 -0.61928 0.271795 + -0.48825 1.98423 -2.84176 0.610204 -0.76504 0.205827 + -0.548842 1.974 -2.67123 0.795435 -0.593333 0.123447 + -0.593047 1.92413 -2.62486 0.794315 -0.596341 0.115931 + -0.531743 1.92998 -2.84378 0.823273 -0.5396 0.176218 + -0.51372 1.95601 -2.89967 0.730385 -0.667414 0.145246 + -0.481219 1.9705 -2.93378 0.455656 -0.873991 0.168869 + -0.455748 1.99864 -2.87592 0.439666 -0.871288 0.218064 + -0.374755 2.03635 -2.85183 0.282487 -0.906706 0.313186 + -0.540993 1.91304 -2.85124 0.841803 -0.521316 0.139993 + -0.52297 1.93907 -2.90713 0.825938 -0.544307 0.146821 + -0.508552 1.94894 -2.92703 0.636434 -0.757467 0.145582 + -0.507767 1.95508 -2.96886 0.213725 -0.97544 -0.0532826 + -0.456696 1.97413 -2.95585 0.286324 -0.869506 0.402465 + -0.411309 2.00472 -2.90865 0.31193 -0.904832 0.28979 + -0.334863 2.03597 -2.88316 0.261405 -0.917724 0.299082 + -0.337649 2.06849 -2.78469 0.191887 -0.933404 0.30321 + -0.517922 1.95242 -2.95826 0.1088 -0.983819 -0.14235 + -0.517137 1.95856 -3.00009 0.053763 -0.990498 -0.126585 + -0.483244 1.9587 -2.99094 0.0992161 -0.983626 0.150452 + -0.462167 1.9588 -2.9683 -0.337711 -0.517515 0.786212 + -0.436121 1.96423 -2.9789 0.412128 -0.537216 0.7359 + -0.418222 1.97945 -2.97868 0.274929 -0.612696 0.740957 + -0.372835 2.01005 -2.93147 0.285233 -0.913547 0.289955 + -0.288907 2.03914 -2.91625 0.185164 -0.93607 0.299144 + -0.297757 2.06811 -2.81603 0.14378 -0.946268 0.289663 + -0.391961 1.97369 -2.9829 0.119732 -0.155226 0.980596 + -0.374062 1.98892 -2.98267 0.245697 -0.527914 0.812982 + -0.326879 2.01322 -2.96456 0.261368 -0.902153 0.343229 + -0.243345 2.03958 -2.93603 0.0675455 -0.943215 0.325244 + -0.262208 2.06183 -2.84155 0.0815764 -0.958129 0.27447 + -0.3657 1.98304 -2.9843 0.0994869 -0.131514 0.986309 + -0.26893 2.09855 -2.72197 0.0653673 -0.954627 0.29054 + -0.21501 2.14395 -2.5628 0.0811233 -0.956504 0.280212 + -0.176994 2.15529 -2.54404 0.154638 -0.964924 0.212152 + -0.233381 2.09228 -2.74749 0.0991773 -0.957212 0.271862 + -0.195365 2.10352 -2.72877 0.199717 -0.947145 0.251056 + -0.216646 2.06227 -2.86133 0.164678 -0.944947 0.282767 + -0.151773 2.11226 -2.73851 0.288032 -0.927812 0.237069 + -0.128718 2.16379 -2.55436 0.256177 -0.952474 0.164822 + -0.098774 2.18937 -2.41326 0.121431 -0.991376 0.0492831 + -0.14705 2.18087 -2.40294 0.118078 -0.990372 0.072249 + -0.188123 2.03604 -2.94528 0.166006 -0.932256 0.321465 + -0.173054 2.07101 -2.87106 0.255078 -0.916478 0.308226 + -0.126505 2.07915 -2.88576 0.384142 -0.869572 0.310288 + -0.120238 2.11383 -2.78023 0.435674 -0.869701 0.231964 + -0.284915 2.01668 -2.98715 0.139171 -0.854689 0.500138 + -0.229693 2.01313 -2.99641 0.110544 -0.955673 0.272891 + -0.21399 2.01164 -3.01763 0.0319108 -0.947525 0.318084 + -0.141573 2.04417 -2.95997 0.285424 -0.888593 0.359076 + -0.332098 1.99229 -3.00532 0.233097 -0.965953 0.112253 + -0.313287 2.00102 -3.03582 0.278906 -0.951632 0.12887 + -0.297585 1.99953 -3.05705 0.107263 -0.990981 0.0803216 + -0.3657 1.98304 -2.9843 0.418968 0.366156 0.8309 + 1.14799 1.74733 -2.15643 0.928722 -0.304044 -0.212207 + 1.13429 1.77906 -2.24399 0.815696 -0.46777 -0.34034 + 1.15743 1.91745 -2.19529 0.765258 0.153009 -0.625275 + 1.20667 2.0536 -2.0707 0.916496 -0.0594858 -0.395597 + 1.24921 2.14475 -2.01399 0.800373 -0.233246 -0.552267 + 1.11601 1.94174 -2.22355 0.73333 0.272877 -0.622708 + 1.13715 2.12449 -2.13089 0.641395 0.256459 -0.723077 + 1.18765 2.08689 -2.10077 0.750226 0.168115 -0.639451 + 1.11354 1.8732 -2.26963 0.921117 0.202597 -0.332413 + 1.02199 2.18507 -2.21342 0.778208 0.262519 -0.570505 + 1.09573 2.14878 -2.15916 0.644863 0.242643 -0.724759 + 1.10694 2.28195 -2.11301 0.632316 0.157299 -0.758573 + 1.14176 2.21318 -2.09731 0.651887 0.190926 -0.733887 + 1.08587 1.87405 -2.34371 0.92966 0.244765 -0.275358 + 1.01952 2.11653 -2.25951 0.885084 0.279305 -0.372311 + 1.10662 1.77992 -2.31807 0.836646 -0.450327 -0.311815 + 1.07554 1.80925 -2.43787 0.952325 0.203261 -0.227515 + 1.06243 1.89044 -2.4139 0.936046 0.272328 -0.222833 + 0.996072 2.13292 -2.3297 0.909632 0.327286 -0.255837 + 1.09318 1.74847 -2.21301 0.471848 -0.865716 -0.167019 + 1.05909 1.73242 -2.2304 0.489568 -0.858959 -0.150045 + 1.07252 1.76395 -2.33541 0.512921 -0.821206 -0.250063 + 1.07554 1.80925 -2.43787 0.574721 -0.75459 -0.316684 + 1.06729 1.76693 -2.35678 0.655905 -0.708823 -0.259536 + 1.00205 1.70979 -2.27861 0.093853 -0.847204 -0.522913 + 1.12953 1.76009 -2.17713 0.386969 -0.900022 -0.200537 + 1.10326 1.7364 -2.1069 0.313372 -0.931716 -0.183587 + 1.0669 1.72478 -2.14277 0.420731 -0.901772 -0.0989536 + 1.03738 1.71233 -2.1638 0.453112 -0.888217 -0.0758886 + 1.00727 1.7068 -2.25724 0.400765 -0.898458 -0.179334 + 1.15072 1.77302 -2.19552 0.351682 -0.906842 -0.232286 + 1.14596 1.75405 -2.12866 -0.537992 -0.790792 -0.291912 + 1.11534 1.73461 -2.08659 0.0192434 -0.903832 -0.427454 + 1.01531 1.69599 -2.04791 0.265646 -0.96066 -0.0810202 + 0.985789 1.68354 -2.06893 0.213289 -0.976622 0.0267796 + 0.985572 1.68671 -2.19063 0.186134 -0.974207 -0.127576 + 1.14514 1.73694 -2.10343 -0.789833 -0.484626 -0.375901 + 1.11452 1.7175 -2.06136 -0.12554 -0.820661 -0.557454 + 1.02739 1.69411 -2.02766 0.0801468 -0.921829 -0.379221 + 0.891333 1.6773 -1.97893 -0.153091 -0.871265 -0.466327 + 0.937936 1.68407 -2.04925 -0.17611 -0.979272 -0.100057 + 1.15072 1.77302 -2.19552 -0.797612 0.527641 0.292252 + 1.14799 1.74733 -2.15643 -0.997747 0.0634496 -0.0217945 + 1.14241 1.71125 -2.06434 -0.547246 -0.706409 -0.448896 + 1.10601 1.7037 -2.03866 -0.111 -0.830124 -0.546418 + 1.01888 1.6804 -2.0049 -0.0208503 -0.856074 -0.516433 + 1.13429 1.77906 -2.24399 -0.749858 0.575728 0.32596 + 1.15142 1.68191 -2.03092 -0.798592 -0.54239 -0.260892 + 0.942828 1.68755 -0.866894 -0.285676 -0.949615 0.128919 + 0.931592 1.69201 -0.860605 -0.621255 -0.759147 0.194263 + 0.882892 1.77276 -0.908069 -0.880223 -0.330703 0.340357 + 0.848172 1.81015 -0.954435 -0.824321 -0.264242 0.50067 + 0.923086 1.71773 -0.754359 -0.637496 -0.643845 0.423158 + 0.914407 1.75692 -0.77904 -0.972244 -0.178628 0.151107 + 0.901911 1.77293 -0.848373 -0.941113 -0.262454 0.213132 + 0.8945 1.86096 -0.814435 -0.929991 -0.202739 0.306616 + 0.86143 1.91345 -0.846758 -0.854838 -0.322911 0.406178 + 0.927778 1.73612 -0.733014 0.0604344 -0.762729 0.643888 + 0.927778 1.73612 -0.733014 -0.965046 -0.0519368 0.256883 + 0.919099 1.77531 -0.757695 -0.925774 -0.160899 0.342131 + 0.906995 1.84494 -0.745102 -0.979667 0.0247327 0.199099 + 0.920946 1.88997 -0.719496 -0.948819 -0.13377 0.286092 + 0.898654 2.01237 -0.70069 -0.907191 -0.265216 0.326595 + 0.865585 2.06487 -0.733021 -0.784253 -0.448947 0.428245 + 0.79727 2.10626 -0.78912 -0.590938 -0.620716 0.515271 + 0.82671 1.95084 -0.893124 -0.749553 -0.431167 0.502261 + 0.817107 1.82925 -0.992113 -0.690958 -0.284297 0.664644 + 0.925346 1.94468 -0.654843 -0.963054 -0.202689 0.177324 + 0.903054 2.06699 -0.636095 -0.915931 -0.375406 0.141917 + 0.830701 2.16795 -0.637364 -0.676618 -0.678194 0.286777 + 0.762385 2.20934 -0.693463 -0.222679 -0.898963 0.3772 + 0.718762 2.16758 -0.736722 0.409235 -0.743795 0.528485 + 0.745911 2.11019 -0.834725 -0.0881068 -0.750393 0.655093 + 0.915514 2.00015 -0.555323 -0.951565 -0.30599 -0.0298895 + 0.882244 2.07495 -0.492681 -0.908861 -0.416316 0.0255637 + 0.869784 2.14179 -0.573461 -0.861026 -0.508257 0.0175657 + 0.754295 2.27651 -0.547195 -0.0862156 -0.942741 0.322189 + 0.708909 2.2274 -0.610544 0.357385 -0.884183 0.300825 + 0.665285 2.18573 -0.653752 0.875837 -0.408195 0.257462 + 0.915054 2.03059 -0.423643 -0.703805 -0.6802 0.204906 + 0.833844 2.20954 -0.4174 -0.845466 -0.51177 0.152574 + 0.793378 2.25035 -0.483283 -0.754844 -0.646424 0.111117 + 0.776758 2.28597 -0.306972 -0.581938 -0.808646 0.0862505 + 0.743554 2.29407 -0.424208 0.314961 -0.941988 -0.116012 + 0.866654 2.16518 -0.348362 -0.868133 -0.483363 0.11272 + 0.820451 2.25574 -0.240823 -0.737043 -0.674493 0.0427327 + 0.779985 2.29664 -0.306655 -0.766011 -0.638531 0.0741976 + 0.833698 2.22428 -0.017537 -0.652667 -0.754624 -0.0675919 + 0.9677 2.00174 -0.371486 -0.540538 -0.829977 0.137682 + 0.899356 2.11045 -0.280376 -0.814365 -0.571365 0.101739 + 0.874688 2.17887 -0.153082 -0.936324 -0.350063 0.0274422 + 0.841986 2.2336 -0.221068 -0.821032 -0.56268 0.0964225 + 0.848062 2.25593 0.053241 -0.724839 -0.688894 -0.00578605 + 0.948408 2.01676 -0.468093 -0.440186 -0.896435 -0.0513962 + 1.00105 1.98792 -0.415936 0.491473 -0.781639 -0.384051 + 0.991919 2.0016 -0.299444 0.192013 -0.869892 0.454333 + 0.923575 2.11031 -0.208334 -0.463531 -0.855419 0.231077 + 0.878053 2.15134 -0.056197 -0.966034 -0.250109 -0.0649895 + 0.869596 2.23379 0.072996 -0.867958 -0.492548 -0.0635955 + 0.872962 2.20626 0.169881 -0.949061 -0.200448 -0.243111 + 0.828111 2.24166 0.237958 -0.389069 -0.912578 -0.125804 + 1.018 2.02083 -0.35915 0.968861 -0.247604 0.000397428 + 0.983368 2.07331 -0.217248 0.314194 -0.839755 0.442825 + 0.960458 2.11612 -0.120201 -0.11602 -0.95524 0.272131 + 0.928955 2.14092 -0.013948 -0.514095 -0.828573 -0.221749 + 0.892072 2.13503 -0.10214 -0.74989 -0.652426 -0.109573 + 1.00554 2.1554 -0.369826 0.985544 -0.0256754 -0.167462 + 1.00945 2.09254 -0.276952 0.976226 -0.185235 0.112561 + 1.02436 2.14526 -0.215457 0.965487 -0.257281 -0.0405055 + 1.0088 2.10705 -0.139885 0.60466 -0.750663 0.266256 + 0.985888 2.14995 -0.042786 0.480837 -0.872258 0.0892287 + 0.905681 2.11917 0.074324 0.559914 -0.810846 0.170369 + 0.988594 2.12248 -0.426613 0.930138 -0.0321563 -0.365798 + 1.00756 2.25448 -0.396038 0.97163 -0.0942255 -0.216926 + 1.01462 2.2153 -0.323177 0.987623 -0.0737678 -0.138414 + 1.02953 2.26801 -0.26168 0.872103 -0.363405 -0.327677 + 0.948408 2.01676 -0.468093 0.706343 0.00922063 -0.70781 + 0.905681 2.11917 0.074324 -0.960751 -0.0657405 -0.269511 + 0.855557 2.12347 0.166472 -0.957056 0.00752283 -0.289806 + 0.804931 2.14597 0.266304 -0.707835 0.102181 -0.698948 + 0.822335 2.22876 0.269713 -0.583502 -0.399815 -0.706876 + 0.869576 2.10715 0.120537 -0.527845 -0.815367 -0.237815 + 0.846302 2.08541 0.208805 -0.87344 0.292854 -0.389023 + 0.738914 2.12985 0.32183 -0.655032 -0.00053789 -0.755601 + 0.645094 2.2745 0.37449 -0.445687 -0.88854 -0.108906 + 0.689694 2.22859 0.3148 -0.137128 -0.987659 0.07567 + 0.905681 2.11917 0.074324 -0.107938 -0.933078 -0.343096 + 0.901206 1.61571 -1.00085 -0.0630899 -0.586398 -0.807562 + 0.605962 1.89597 -2.56588 0.923388 0.373922 -0.0868155 + 0.592234 1.92008 -2.61283 0.936869 0.334412 -0.102206 + 0.603401 1.90985 -2.54392 0.747603 -0.617252 -0.245134 + 0.608231 1.90077 -2.492 0.809966 0.583106 -0.0627855 + 0.621039 1.88748 -2.46078 0.657496 0.752541 -0.0371633 + 0.618769 1.88277 -2.53462 0.757364 0.649774 -0.06475 + 0.643558 1.86843 -2.48698 0.630719 0.773953 -0.0564912 + 0.63938 1.87276 -2.42967 0.651434 0.758661 0.00822009 + 0.661899 1.8537 -2.45587 0.813414 0.547971 -0.195155 + 0.672911 1.83834 -2.44066 0.882328 0.221354 -0.415332 + 0.693482 1.82274 -2.41123 0.75964 0.643992 -0.0906696 + 0.678992 1.83517 -2.44137 0.773457 0.623367 -0.114794 + 0.710576 1.80419 -2.39672 0.773541 0.623246 -0.114885 + 0.719806 1.76903 -2.18362 0.780362 0.618151 -0.0944661 + 0.705589 1.77883 -2.23698 0.799448 0.594769 -0.0844562 + 0.690866 1.79182 -2.28809 0.917138 0.398523 -0.00611514 + 0.685856 1.80393 -2.25027 0.826716 0.558339 -0.0692761 + 0.685589 1.8085 -2.33898 0.93944 0.342393 0.0148036 + 0.05808 2.02101 -3.09945 0.166767 0.877209 0.450214 + 0.021963 2.02879 -3.08313 0.255024 0.96108 0.106246 + 0.052011 2.01575 -3.03735 0.774316 0.344201 -0.530999 + 0.080404 2.00707 -3.02371 0.242811 0.966685 0.08101 + 0.086472 2.01224 -3.08588 0.0147812 0.897971 0.439807 + 0.074256 2.02532 -3.10312 -0.0780005 0.745662 0.661743 + 0.048257 2.03376 -3.11254 -0.0341371 -0.0290121 0.998996 + 0.021963 2.02879 -3.08313 0.290487 0.785079 0.547054 + 0.012141 2.04154 -3.09621 0.192698 0.296144 0.935503 + -0.030826 2.04626 -3.10218 -0.0202983 0.708357 0.705563 + 0.128187 1.99744 -3.05683 -0.0637266 0.896948 0.437519 + 0.11597 2.01052 -3.07408 -0.257645 0.673376 0.692953 + 0.106302 2.00064 -3.00818 0.00746884 0.959279 0.282363 + 0.138523 1.99564 -3.00172 0.126377 0.984305 -0.123176 + 0.160408 1.99253 -3.05032 0.0651072 0.828602 0.556039 + 0.145789 2.00213 -3.05075 -0.323149 -0.629332 0.706764 + 0.128453 1.99899 -2.99251 0.00105117 0.997997 -0.0632477 + 0.221579 1.99604 -3.06701 0.0740882 0.981615 0.175904 + 0.267677 2.00019 -3.0754 -0.000177651 0.896667 0.442706 + 0.108633 1.98662 -2.9861 -0.317524 0.785011 0.531917 + 0.197416 1.994 -3.04727 -0.0632734 0.805886 0.588679 + 0.170471 1.99605 -3.05282 -0.124991 -0.154432 0.980065 + 0.153275 2.0171 -3.00969 -0.210018 -0.876372 0.433433 + 0.107118 2.02426 -3.03748 -0.429885 -0.846334 0.314512 + 0.0773 2.03273 -3.06076 -0.503356 -0.823811 0.260709 + 0.11597 2.01052 -3.07408 -0.429506 -0.876949 0.215605 + 0.074256 2.02532 -3.10312 -0.471371 -0.846677 0.246875 + 0.20748 1.99752 -3.04977 0.122771 -0.442068 0.88854 + 0.177958 2.01102 -3.01176 0.0449212 -0.473426 0.879687 + 0.141569 2.04417 -2.95997 -0.302838 -0.880115 0.365633 + 0.988445 1.85505 -2.622 -0.878003 0.477838 -0.0279526 + 0.940809 1.79078 -2.54588 -0.688319 0.706263 0.165561 + 0.96059 1.81258 -2.55664 -0.776608 0.270433 -0.568987 + 0.972108 1.83344 -2.56877 -0.761714 -0.0722076 -0.643877 + 0.999963 1.87599 -2.63407 -0.993306 -0.0704394 -0.0915477 + 0.99941 1.89818 -2.6767 -0.74186 0.590827 0.317122 + 0.93501 1.82717 -2.55451 -0.157193 -0.519338 -0.839987 + 0.986794 1.86725 -2.59635 -0.68801 -0.439859 -0.577205 + 0.986241 1.88944 -2.63897 -0.388349 -0.825609 -0.409335 + 0.99941 1.89818 -2.6767 -0.46223 -0.835078 -0.298311 + 0.977299 1.90902 -2.67488 -0.320458 -0.883482 -0.341711 + 0.976666 1.92511 -2.73795 -0.411386 -0.884875 -0.218535 + 0.923497 1.80836 -2.54154 -0.185011 -0.362747 -0.913337 + 0.852254 1.85836 -2.57474 -0.0736101 -0.654922 -0.752103 + 0.949696 1.86099 -2.58209 -0.114851 -0.669024 -0.734314 + 0.95185 1.87874 -2.60324 -0.0989063 -0.833448 -0.543675 + 0.940809 1.79078 -2.54588 0.0827279 -0.710166 -0.699157 + 0.903715 1.78656 -2.53079 -0.136504 -0.783727 -0.60592 + 0.840741 1.83956 -2.56177 -0.175085 -0.652354 -0.737414 + 0.731119 1.88176 -2.57267 -0.242526 -0.967617 -0.0699833 + 0.854408 1.8762 -2.59584 -0.0676272 -0.832852 -0.549348 + 0.942908 1.89832 -2.63916 -0.0937025 -0.889475 -0.447274 + 0.919104 1.7685 -2.47549 0.179908 -0.978183 -0.103879 + 0.864548 1.78519 -2.5062 -0.291845 -0.861076 -0.416382 + 0.801573 1.83818 -2.53719 -0.374448 -0.802298 -0.464873 + 0.944645 1.78837 -2.53371 0.4061 -0.883839 -0.232188 + 0.950974 1.78361 -2.44946 0.351076 -0.935938 -0.0276754 + 0.888813 1.77243 -2.3787 0.0895855 -0.99265 0.0813651 + 0.845095 1.77276 -2.36687 -0.0551768 -0.996462 0.0633942 + 0.875385 1.76883 -2.46366 -0.142435 -0.977914 -0.152959 + 0.992281 1.85263 -2.60982 0.581792 -0.736947 -0.344131 + 0.976516 1.80348 -2.50768 0.503351 -0.838155 -0.210082 + 0.971656 1.78821 -2.42584 0.241772 -0.964544 -0.10583 + 0.909495 1.77704 -2.35508 0.0545723 -0.993792 -0.0969456 + 0.988445 1.85505 -2.622 0.665404 -0.663961 -0.341165 + 0.99941 1.89818 -2.6767 0.538185 -0.7392 -0.404895 + 1.01338 1.85759 -2.5856 0.401176 -0.839211 -0.367129 + 0.997619 1.80835 -2.48351 0.424748 -0.870826 -0.247491 + 1.00311 1.78787 -2.37925 0.115823 -0.967061 -0.226668 + 1.03285 1.85781 -2.57419 0.784597 -0.47881 -0.393889 + 1.02907 1.808 -2.43692 0.246043 -0.929671 -0.274179 + 1.01319 1.78128 -2.35383 -0.00934356 -0.905481 -0.424285 + 0.919578 1.77053 -2.32961 -0.0249025 -0.878239 -0.477573 + 0.809791 1.777 -2.32622 -0.184381 -0.982652 -0.0199646 + 0.811545 1.77651 -2.33737 -0.0737089 -0.997265 0.00539728 + 1.04854 1.80823 -2.42551 0.0164932 -0.946946 -0.320968 + 1.05337 1.7853 -2.36599 -0.113349 -0.884727 -0.452118 + 1.01205 1.76204 -2.32391 -0.0818345 -0.780033 -0.620364 + 0.999293 1.74336 -2.30196 -0.114029 -0.669421 -0.73408 + 0.906824 1.75185 -2.30766 -0.150546 -0.811826 -0.564158 + 1.07554 1.80925 -2.43787 -0.112449 -0.939684 -0.32303 + 1.08037 1.78631 -2.37835 -0.967737 -0.200749 -0.152265 + 1.05223 1.76606 -2.33607 -0.501349 -0.547009 -0.670396 + 1.03915 1.7466 -2.31456 -0.693142 -0.0989139 -0.713982 + 0.962187 1.70664 -2.26596 -0.139371 -0.869368 -0.474104 + 0.919208 1.70335 -2.22546 -0.319646 -0.906121 -0.277076 + 0.863845 1.74856 -2.26716 -0.36381 -0.889022 -0.277997 + 1.06729 1.76693 -2.35678 -0.858027 0.0242464 -0.513031 + 0.937719 1.68725 -2.17096 -0.199332 -0.973195 -0.114711 + 0.827367 1.73037 -2.13986 -0.4184 -0.89074 -0.177551 + 1.07554 1.80925 -2.43787 -0.56335 0.754606 0.336462 + 0.845878 1.71427 -2.08536 -0.311218 -0.944863 -0.101862 + 0.780043 1.75154 -2.13453 -0.273662 -0.904408 -0.327346 + 0.816521 1.76973 -2.26183 -0.384722 -0.908388 -0.16377 + 0.906401 1.69126 -2.01231 -0.475823 -0.795449 -0.375304 + 0.814343 1.72146 -2.04842 -0.196403 -0.971376 -0.133618 + 0.765186 1.73346 -2.0804 0.0346962 -0.962277 -0.269849 + 0.729957 1.78796 -2.20421 -0.226103 -0.93998 -0.255567 + 0.811683 1.71602 -2.0232 -0.118898 -0.935009 -0.334098 + 0.762526 1.72793 -2.05523 0.15969 -0.946325 -0.28101 + 0.734326 1.74788 -2.13459 -0.13896 -0.86526 -0.481679 + 0.719806 1.76903 -2.18362 0.458204 -0.758763 -0.462956 + 0.796615 1.70206 -1.98982 -0.0554451 -0.895639 -0.441312 + 0.749727 1.7037 -2.00326 0.277602 -0.893677 -0.352531 + 0.753973 1.66567 -1.91479 -0.0225075 -0.871666 -0.489584 + 0.707085 1.6674 -1.92819 0.566041 -0.774363 -0.282772 + 0.696973 1.63682 -1.87902 0.588237 -0.579241 -0.564319 + 0.692435 1.63725 -1.94316 0.895204 -0.440702 -0.0662708 + 0.679974 1.61528 -1.89451 0.841999 -0.437785 -0.315249 + 0.887944 1.6543 -1.9417 -0.134328 -0.844154 -0.518998 + 0.750584 1.64268 -1.87757 -0.0114864 -0.799686 -0.600308 + 0.940837 1.64332 -1.93428 -0.0750667 -0.864966 -0.496185 + 0.990703 1.64564 -1.9449 -0.0530004 -0.871056 -0.488316 + 0.962247 1.59901 -1.84773 -0.0179635 -0.944272 -0.328675 + 1.0079 1.65625 -1.96487 -0.0247148 -0.857414 -0.514033 + 1.03521 1.60812 -1.87612 -0.0262762 -0.904125 -0.42646 + 1.01211 1.60125 -1.8584 -0.0235787 -0.951236 -0.307562 + 1.01425 1.66841 -1.98473 -0.0150394 -0.85289 -0.521874 + 1.08136 1.64392 -1.93812 0.0100114 -0.864092 -0.503234 + 1.05241 1.61881 -1.89603 0.00499999 -0.871903 -0.489654 + 1.06964 1.60894 -1.87873 -0.0283936 -0.873847 -0.485371 + 1.07751 1.66753 -1.97561 0.0187494 -0.846229 -0.532489 + 1.08771 1.65608 -1.95798 -0.0123419 -0.848289 -0.529389 + 1.11968 1.6542 -1.95813 -0.345921 -0.745367 -0.569882 + 1.09859 1.63405 -1.92082 -0.389466 -0.658427 -0.644042 + 1.12127 1.64042 -1.94785 -0.697529 -0.292428 -0.65417 + 1.08214 1.67944 -1.99584 -0.0257029 -0.871891 -0.489025 + 1.10948 1.66565 -1.97575 -0.146814 -0.867404 -0.475453 + 1.14237 1.66056 -1.98515 -0.297753 -0.833052 -0.466227 + 1.11854 1.68699 -2.02152 -0.243061 -0.815177 -0.525745 + 1.15142 1.68191 -2.03092 -0.260626 -0.854212 -0.449885 + 1.15142 1.68191 -2.03092 -0.285007 -0.757116 -0.587832 + 0.695715 1.8117 -2.16432 -0.84513 -0.49006 -0.213534 + 0.698705 1.81652 -2.21126 -0.929584 -0.364112 0.0574169 + 0.719806 1.76903 -2.18362 -0.932769 -0.329769 0.145584 + 0.705589 1.77883 -2.23698 -0.937332 -0.295927 0.183946 + 0.653716 1.92238 -2.23203 -0.861246 -0.493111 -0.122864 + 0.658388 1.92625 -2.27512 -0.904402 -0.426575 -0.00949785 + 0.684488 1.8263 -2.26462 -0.946262 -0.290834 0.141437 + 0.676987 1.83497 -2.31182 -0.954873 -0.289287 0.0673056 + 0.690866 1.79182 -2.28809 -0.961303 -0.213477 0.174136 + 0.685589 1.8085 -2.33898 -0.531176 -0.840559 -0.106357 + 0.605655 2.0055 -2.31019 -0.727267 -0.679278 0.0983055 + 0.650887 1.9349 -2.32232 -0.898501 -0.396874 0.187583 + 0.636569 1.9364 -2.36351 -0.866627 -0.457012 0.200243 + 0.67171 1.85164 -2.3627 -0.9307 -0.356629 0.081325 + 0.591336 2.007 -2.35139 -0.682898 -0.660177 0.312756 + 0.561598 2.0251 -2.37295 -0.632528 -0.746887 0.205107 + 0.623155 1.94846 -2.40779 -0.818553 -0.516234 0.25194 + 0.658297 1.8637 -2.40698 -0.888783 -0.449241 0.0908186 + 0.688957 1.80989 -2.34959 -0.729614 -0.672942 -0.121705 + 0.689224 1.80532 -2.26088 -0.00198846 -0.99766 -0.0683426 + 0.685856 1.80393 -2.25027 -0.14933 -0.973203 -0.174861 + 0.539496 2.03274 -2.40997 -0.662498 -0.733775 0.150567 + 0.601053 1.95609 -2.44482 -0.781668 -0.581461 0.225607 + 0.645874 1.8849 -2.45391 -0.858388 -0.493948 0.13851 + 0.672911 1.83834 -2.44066 -0.686624 -0.701432 -0.191157 + 0.685333 1.81714 -2.39374 -0.669002 -0.728987 -0.144962 + 0.453322 2.10837 -2.38597 -0.689794 -0.720783 0.0682383 + 0.534164 2.03217 -2.44998 -0.71007 -0.694369 0.116843 + 0.58036 1.97108 -2.48638 -0.776028 -0.592062 0.217355 + 0.625181 1.8998 -2.49552 -0.833791 -0.481988 0.269221 + 0.643558 1.86843 -2.48698 -0.859723 -0.427569 0.279395 + 0.618769 1.88277 -2.53462 -0.859778 -0.428671 0.277529 + 0.509063 2.05246 -2.47973 -0.713164 -0.691593 0.114444 + 0.555258 1.99137 -2.51613 -0.779658 -0.603485 0.16715 + 0.600393 1.91406 -2.54321 -0.836679 -0.504813 0.212445 + 0.605962 1.89597 -2.56588 -0.853097 -0.507039 0.123034 + 0.580257 1.93347 -2.58302 -0.829106 -0.557465 0.0426112 + 0.592234 1.92008 -2.61283 -0.809492 -0.583738 -0.0630373 + 0.481998 2.07939 -2.49098 -0.726315 -0.686515 0.0341247 + 0.535122 2.0107 -2.556 -0.797876 -0.594102 0.102163 + 0.518853 2.02675 -2.59321 -0.787628 -0.611561 0.0750756 + 0.465729 2.09545 -2.52819 -0.729191 -0.682697 0.0469641 + 0.407234 2.16024 -2.42981 -0.594599 -0.803673 -0.0237138 + 0.402023 2.16139 -2.476 -0.480142 -0.866346 0.137509 + 0.460517 2.0966 -2.57438 -0.675891 -0.725099 0.131919 + 0.501171 2.04318 -2.63445 -0.726673 -0.664823 0.173081 + 0.548847 1.974 -2.67123 -0.785996 -0.60498 0.127312 + 0.592978 1.92413 -2.62486 -0.795144 -0.59506 0.116829 + 0.345152 2.19191 -2.33487 -0.373347 -0.917638 -0.136206 + 0.36698 2.17379 -2.47308 -0.186296 -0.961549 0.201787 + 0.440632 2.10339 -2.61014 -0.434183 -0.824771 0.362268 + 0.481286 2.05005 -2.67016 -0.629525 -0.738069 0.242801 + 0.239822 2.18818 -2.24701 0.0848382 -0.993234 -0.0793073 + 0.314309 2.19617 -2.35364 -0.0478683 -0.998108 0.0385948 + 0.321355 2.17099 -2.48582 -0.0239328 -0.966633 0.255046 + 0.364216 2.11959 -2.62621 -0.156134 -0.917783 0.365098 + 0.405589 2.11579 -2.60722 -0.28078 -0.895119 0.346302 + 0.268684 2.19336 -2.36638 0.0556852 -0.996435 0.0633834 + 0.27985 2.16797 -2.5034 0.0425746 -0.963081 0.265825 + 0.322711 2.11657 -2.64377 -0.14093 -0.934372 0.327243 + 0.409211 2.06633 -2.72435 -0.33009 -0.881896 0.336599 + 0.450584 2.06243 -2.70541 -0.43858 -0.811436 0.386289 + 0.168068 2.17779 -2.27101 0.00387069 -0.992617 -0.121228 + 0.23006 2.1897 -2.37884 0.110104 -0.988137 0.107063 + 0.236111 2.15775 -2.51551 0.0530436 -0.966552 0.250924 + 0.290031 2.11226 -2.67471 -0.0791806 -0.951862 0.296123 + 0.136501 2.18334 -2.28403 -0.0499216 -0.994533 -0.0917138 + 0.186321 2.17957 -2.3909 0.0636485 -0.988647 0.13611 + 0.176997 2.15529 -2.54403 -0.153803 -0.964792 0.213357 + 0.21501 2.14396 -2.56281 -0.0813519 -0.956509 0.280129 + 0.087766 2.16911 -2.17837 -0.0710534 -0.972233 -0.222967 + 0.06815 2.17549 -2.20082 -0.0365212 -0.98288 -0.180591 + 0.09723 2.18464 -2.29607 -0.0302796 -0.998604 -0.0432892 + 0.14705 2.18087 -2.40294 -0.112111 -0.991343 0.0683447 + 0.051356 2.1418 -2.06767 -0.0580746 -0.96413 -0.258999 + 0.031741 2.14827 -2.09007 -0.108783 -0.964701 -0.239829 + 0.035064 2.17725 -2.21087 -0.0455962 -0.988311 -0.145476 + 0.064144 2.1864 -2.30612 -0.0394146 -0.997158 -0.0642082 + 0.020866 2.11114 -1.94717 -0.403464 -0.881483 -0.245368 + 0.011392 2.12379 -1.95869 -0.715407 -0.675197 -0.179729 + 0.014718 2.14764 -2.07438 -0.473125 -0.860291 -0.189876 + 0.018041 2.17662 -2.19519 -0.20174 -0.961301 -0.187621 + 0.029223 2.18812 -2.31711 -0.150187 -0.984385 -0.0918098 + 0.002151 2.0946 -1.83072 -0.349107 -0.783439 -0.514147 + 0.002151 2.1184 -1.86854 -0.59547 -0.742069 -0.307814 + 0.002151 2.13624 -1.96643 -0.419138 -0.889477 -0.182082 + 0.005477 2.16008 -2.08213 -0.418278 -0.89195 -0.171661 + 0.005477 2.17994 -2.19533 -0.132208 -0.979458 -0.15226 + -0.002113 2.09469 -1.83067 0.328957 -0.789289 -0.518468 + -0.002113 2.11848 -1.86849 -0.0235515 -0.931561 -0.36282 + -0.002113 2.13632 -1.96638 0.402711 -0.894165 -0.195686 + -0.005484 2.16008 -2.08213 0.395542 -0.897507 -0.195008 + -0.011354 2.12388 -1.95864 0.692403 -0.690699 -0.208595 + -0.002113 2.11848 -1.86849 1 0 0 + -0.031741 2.14827 -2.09007 0.1092 -0.964707 -0.239615 + -0.014725 2.14764 -2.07438 0.475505 -0.857196 -0.197762 + -0.018048 2.17662 -2.19519 0.21306 -0.961856 -0.171577 + -0.005484 2.17994 -2.19533 0.12258 -0.982895 -0.137449 + -0.051356 2.1418 -2.06767 0.0567394 -0.963986 -0.259828 + -0.06815 2.17549 -2.20082 0.0365345 -0.98286 -0.180698 + -0.035064 2.17725 -2.21087 0.0456091 -0.988311 -0.145471 + -0.087766 2.16911 -2.17837 0.0702526 -0.972457 -0.222241 + -0.1365 2.18334 -2.28403 0.0793184 -0.993959 -0.0758595 + -0.097229 2.18464 -2.29606 0.0346223 -0.997773 -0.0570121 + -0.064143 2.1864 -2.30612 0.0292856 -0.997033 -0.0711883 + -0.029223 2.18812 -2.31711 0.125127 -0.991131 -0.0447426 + -0.063854 2.19118 -2.4242 -0.00484698 -0.998882 0.0470204 + -0.016659 2.18512 -2.41971 -0.0572962 -0.99722 0.0476374 + -0.016659 2.19144 -2.31725 0.13125 -0.991112 -0.021707 + 0.01666 2.19144 -2.31725 -0.105249 -0.993016 -0.0533088 + -0.066816 2.18306 -2.56814 0.136549 -0.986821 0.0868206 + -0.019621 2.17709 -2.5636 -0.0644406 -0.997621 0.0244778 + 0.019625 2.17709 -2.5636 0.0423929 -0.997362 0.0589169 + 0.01666 2.18512 -2.41971 0.0660385 -0.996058 0.0592181 + -0.097183 2.16536 -2.59609 0.350658 -0.914514 0.201749 + -0.051781 2.15049 -2.76553 0.546643 -0.818045 0.178838 + -0.019621 2.17927 -2.78057 0.345269 -0.928424 0.137175 + 0.019625 2.17927 -2.78057 -0.362621 -0.926028 0.10478 + -0.082149 2.13271 -2.79353 0.430533 -0.87808 0.208848 + -0.049759 2.11734 -2.9173 0.617215 -0.735984 0.27816 + -0.017598 2.14611 -2.93234 0.369743 -0.864803 0.339713 + 0.017596 2.14611 -2.93234 -0.358336 -0.873881 0.328523 + 0.051785 2.15049 -2.76553 -0.512599 -0.848531 0.131292 + -0.088416 2.09802 -2.89905 0.52097 -0.798956 0.300432 + -0.056759 2.07064 -3.00603 0.557569 -0.760354 0.333136 + -0.017598 2.09191 -3.02626 0.309954 -0.849749 0.426445 + 0.017596 2.09191 -3.02626 -0.302777 -0.850348 0.430388 + -0.095416 2.05133 -2.98778 0.46486 -0.813286 0.349959 + -0.10711 2.02426 -3.03749 0.429799 -0.846141 0.315149 + -0.077283 2.03273 -3.06076 0.507711 -0.837308 0.20284 + -0.038122 2.054 -3.08099 0.428458 -0.836678 0.341166 + 0.012141 2.06244 -3.09041 -0.0630865 -0.724519 0.686361 + -0.153267 2.01711 -3.0097 0.263286 -0.879889 0.395571 + -0.14578 2.00214 -3.05077 0.322576 -0.62977 0.706635 + -0.115954 2.01052 -3.07408 0.44436 -0.870199 0.212834 + -0.177958 2.01103 -3.01177 0.0229328 -0.886177 0.462778 + -0.170472 1.99605 -3.05282 0.126099 -0.162419 0.978631 + -0.16041 1.99245 -3.05039 -0.0634353 0.826033 0.560041 + -0.128186 1.99744 -3.05683 0.0508681 0.898799 0.4354 + -0.115954 2.01052 -3.07408 0.2578 0.673148 0.693117 + -0.20748 1.99752 -3.04978 -0.122397 -0.442876 0.888189 + -0.197418 1.99401 -3.04728 0.0639059 0.805355 0.589337 + -0.138525 1.99565 -3.00174 -0.126523 0.98429 -0.12315 + -0.106301 2.00065 -3.00819 -0.0107928 0.95537 0.295214 + -0.086472 2.01224 -3.08588 -0.0123343 0.900004 0.435707 + -0.074239 2.02532 -3.10312 0.0780137 0.745587 0.661826 + -0.243512 1.99814 -3.05565 -0.0650774 -0.980629 0.184748 + -0.267675 2.00019 -3.07539 -0.278348 -0.901611 0.331088 + -0.221581 1.99605 -3.06703 -0.0759167 -0.99706 -0.0103557 + -0.197418 1.99401 -3.04728 0.547496 -0.434578 -0.715116 + -0.138525 1.99565 -3.00174 0.590231 -0.291836 -0.752635 + -0.325906 1.99664 -3.08165 0.0820147 -0.996547 -0.0129895 + -0.295996 1.99739 -3.09994 -0.460867 -0.349252 0.815858 + -0.244328 1.99334 -3.06154 -0.124772 0.929909 0.345979 + -0.322338 1.99302 -3.04417 0.367126 -0.90602 0.210586 + -0.346889 1.99167 -3.01484 0.193866 -0.973581 -0.120645 + -0.3657 1.98304 -2.9843 0.155747 -0.971517 -0.178596 + -0.319848 1.99731 -3.11521 0.0142549 -0.999747 -0.0174161 + -0.080403 2.00708 -3.02372 -0.206357 0.973241 0.101089 + -0.052009 2.01575 -3.03735 -0.774373 0.343769 -0.531196 + -0.058077 2.02101 -3.09945 -0.166707 0.877136 0.450379 + -0.048219 2.03375 -3.11253 0.0336214 -0.0285343 0.999027 + -0.021961 2.02879 -3.08313 -0.338109 0.882253 0.327586 + -0.012102 2.04153 -3.0962 -0.289705 0.0301424 0.956641 + -0.012102 2.06243 -3.0904 0.013743 -0.970612 0.240255 + -0.074239 2.02532 -3.10312 0.465547 -0.827793 0.313089 + 0.038139 2.05391 -3.08104 -0.476639 -0.807923 0.34652 + 0.056757 2.07064 -3.00603 -0.569344 -0.747539 0.342102 + 0.049757 2.11734 -2.9173 -0.625374 -0.735515 0.260626 + 0.095412 2.05133 -2.98777 -0.460017 -0.811154 0.361127 + 0.088411 2.09802 -2.89905 -0.507649 -0.811172 0.290333 + 0.082143 2.1327 -2.79352 -0.430592 -0.878062 0.2088 + 0.06682 2.18306 -2.56814 -0.107911 -0.986458 0.123515 + 0.1265 2.07915 -2.88575 -0.394793 -0.871917 0.289652 + 0.120232 2.11383 -2.78023 -0.435596 -0.869733 0.231995 + 0.097178 2.16536 -2.59608 -0.350573 -0.914514 0.201899 + 0.128721 2.16379 -2.55435 -0.257283 -0.951991 0.165884 + 0.063855 2.19118 -2.4242 -0.000975231 -0.998607 0.0527618 + 0.188124 2.03604 -2.94528 -0.150306 -0.925153 0.348569 + 0.173055 2.07101 -2.87106 -0.22875 -0.929199 0.290281 + 0.151776 2.11226 -2.73851 -0.288771 -0.927944 0.23565 + 0.229697 2.01313 -2.99641 -0.0932213 -0.95808 0.270912 + 0.243346 2.03958 -2.93603 -0.0896241 -0.936437 0.339196 + 0.216647 2.06227 -2.86133 -0.184957 -0.952038 0.243752 + 0.195368 2.10352 -2.72876 -0.198373 -0.947702 0.25002 + 0.284919 2.01668 -2.98715 -0.149152 -0.942242 0.299888 + 0.326879 2.01322 -2.96456 -0.268307 -0.900392 0.3425 + 0.288908 2.03914 -2.91625 -0.189532 -0.940151 0.283185 + 0.262209 2.06183 -2.84155 -0.116807 -0.950909 0.286581 + 0.332102 1.99229 -3.00532 -0.291332 -0.951267 0.101077 + 0.374062 1.98892 -2.98267 -0.273677 -0.581606 0.766052 + 0.372835 2.01005 -2.93147 -0.283981 -0.909524 0.303515 + 0.334864 2.03597 -2.88316 -0.238648 -0.925878 0.292913 + 0.34688 1.99167 -3.01484 -0.156409 -0.971258 -0.179428 + 0.365691 1.98304 -2.9843 -0.155845 -0.971513 -0.178535 + 0.365691 1.98304 -2.9843 -0.418863 0.366701 0.830713 + 0.098775 2.18937 -2.41326 -0.12522 -0.99134 0.0395571 + 0.233381 2.09228 -2.74749 -0.0990519 -0.957195 0.271969 + 0.26893 2.09856 -2.72197 -0.065376 -0.954634 0.290517 + 0.33765 2.06849 -2.78469 -0.215051 -0.92693 0.307496 + 0.297758 2.06811 -2.81603 -0.139598 -0.940116 0.310956 + 0.374756 2.03635 -2.85183 -0.28497 -0.910517 0.299585 + 0.419196 2.03027 -2.8191 -0.367728 -0.882284 0.293855 + 0.37033 2.07271 -2.7538 -0.270668 -0.913019 0.305181 + 0.411303 2.00472 -2.90865 -0.30848 -0.906146 0.289377 + 0.455743 1.99864 -2.87592 -0.440521 -0.871775 0.214361 + 0.48825 1.98423 -2.84176 -0.544509 -0.815323 0.19687 + 0.458077 2.02381 -2.7897 -0.48864 -0.831724 0.263563 + 0.496391 2.00565 -2.75105 -0.626191 -0.738698 0.249418 + 0.45669 1.97413 -2.95585 -0.285572 -0.866724 0.408949 + 0.481213 1.9705 -2.93378 -0.414682 -0.893845 0.170531 + 0.51372 1.95601 -2.89967 -0.735211 -0.660761 0.151195 + 0.526564 1.96599 -2.80317 -0.749502 -0.626188 0.214791 + 0.418222 1.97945 -2.97868 -0.268608 -0.616232 0.740343 + 0.436121 1.96422 -2.97889 -0.412185 -0.536924 0.736082 + 0.462167 1.9588 -2.9683 0.337973 -0.517308 0.786236 + 0.483244 1.9587 -2.99094 -0.099222 -0.98363 0.150426 + 0.507767 1.95508 -2.96886 -0.21824 -0.9754 -0.0310735 + 0.508552 1.94894 -2.92703 -0.919444 0.386207 0.0739347 + 0.391961 1.97369 -2.9829 -0.119741 -0.155146 0.980608 + 0.365691 1.98304 -2.9843 -0.0994297 -0.131447 0.986324 + 0.517137 1.95856 -3.00009 -0.0538259 -0.990492 -0.126603 + 0.517922 1.95242 -2.95825 -0.109137 -0.98378 -0.142361 + 0.508552 1.94894 -2.92703 -0.109161 -0.98378 -0.142338 + 0.571224 1.94331 -2.66948 -0.79599 -0.587679 0.145031 + 0.527093 1.99318 -2.71585 -0.791332 -0.451765 0.411949 + 0.556864 1.94751 -2.74135 -0.744495 -0.641418 0.185232 + 0.609047 1.90942 -2.58578 -0.474647 -0.879605 0.0317055 + 0.700579 1.79093 -2.19915 -0.144659 -0.952667 -0.267395 + 0.717862 1.79902 -2.24636 -0.19776 -0.9714 -0.131429 + 0.804427 1.78079 -2.30399 -0.407845 -0.913024 -0.00711501 + 0.731574 1.796 -2.30293 -0.220019 -0.974287 0.0485341 + 0.736939 1.79212 -2.32521 -0.171861 -0.901383 0.397458 + 0.739461 1.78442 -2.33447 -0.183961 -0.938257 0.292972 + 0.741214 1.78393 -2.34562 -0.189176 -0.976166 -0.106364 + 0.702936 1.8023 -2.31744 0.536282 -0.760112 0.366922 + 0.705458 1.7946 -2.32671 -0.346331 -0.913361 0.214073 + 0.707916 1.79867 -2.37156 -0.373513 -0.908516 -0.187316 + 0.743874 1.78945 -2.37079 -0.203501 -0.961387 -0.185264 + 0.777424 1.78561 -2.40034 -0.261454 -0.949836 -0.171622 + 0.701834 1.80185 -2.37086 -0.531235 -0.834439 -0.146633 + 0.678992 1.83517 -2.44137 -0.470099 -0.831225 -0.296768 + 0.710576 1.80419 -2.39672 -0.346261 -0.851567 -0.39362 + 0.661899 1.8537 -2.45587 -0.45384 -0.76975 -0.448903 + 0.693482 1.82274 -2.41123 -0.357646 -0.724737 -0.588936 + 0.715772 1.8243 -2.42795 -0.417218 -0.773273 -0.477471 + 0.766587 1.80198 -2.44288 -0.420047 -0.840071 -0.343281 + 0.66167 1.87441 -2.44634 -0.405396 -0.773493 -0.487199 + 0.750759 1.86051 -2.52226 -0.472392 -0.813009 -0.340386 + 0.63938 1.87276 -2.42967 -0.272151 -0.793003 -0.545051 + 0.64211 1.89408 -2.4698 -0.166273 -0.924298 -0.343551 + 0.731199 1.88017 -2.54571 -0.474357 -0.869574 -0.137207 + 0.621039 1.88748 -2.46078 0.0885132 -0.891278 -0.444735 + 0.608231 1.90077 -2.492 -0.04725 -0.973987 -0.221623 + 0.63728 1.90316 -2.52174 -0.182826 -0.975969 -0.118569 + 0.6372 1.90475 -2.54868 -0.228304 -0.973585 -0.00300028 + 0.604146 1.91391 -2.55595 0.150155 -0.974546 -0.166474 + 0.642102 1.90017 -2.57856 -0.254315 -0.963386 0.0849251 + 0.592234 1.92008 -2.61283 0.629907 -0.746916 -0.212916 + 0.592978 1.92413 -2.62486 0.629913 -0.746911 -0.212917 + 0.980616 1.61008 -1.44111 0.759422 0.366883 0.537284 + 1.00949 1.57435 -1.40242 -0.0864719 0.698867 0.710005 + 1.04089 1.60615 -1.42989 -0.101678 0.632006 0.768264 + 0.981022 1.60948 -1.42407 0.946317 -0.023956 -0.322352 + 1.00949 1.57435 -1.40242 0.775835 0.630926 0.00358046 + 1.0099 1.57375 -1.38538 0.755706 -0.609669 -0.239191 + 1.00949 1.57435 -1.40242 0.465199 -0.884194 -0.0423172 + -0.915918 1.85125 -0.681822 -0.971441 -0.2338 -0.0405009 + -0.920037 1.95183 -0.55663 -0.995019 -0.0961423 0.0263379 + -0.92271 1.96082 -0.624798 -0.999424 -0.0187193 0.028308 + -0.924635 2.00506 -0.519026 -0.954455 0.0669949 -0.290736 + -0.927308 2.01413 -0.587145 -0.994889 -0.081764 -0.0592547 + -0.927079 2.0888 -0.602681 -0.978241 0.0251031 -0.205949 + -0.920312 2.0305 -0.651286 -0.994058 0.0651446 -0.087207 + -0.929869 1.89636 -0.656157 -0.997049 -0.0766943 -0.00330807 + -0.940043 2.06386 -0.530873 -0.954912 -0.151628 -0.255248 + -0.939814 2.13853 -0.546399 -0.945401 -0.0122623 -0.325679 + -0.917013 2.20864 -0.606034 -0.919853 0.121785 -0.37288 + -0.910245 2.15041 -0.65459 -0.938109 0.168784 -0.302428 + -0.948391 2.01676 -0.468093 -0.468949 -0.844946 -0.257204 + -0.963799 2.07547 -0.479989 -0.884744 -0.118253 -0.450826 + -0.964867 2.1885 -0.493562 -0.913728 -0.0286139 -0.405318 + -0.936145 2.27055 -0.554076 -0.878188 0.0606318 -0.474457 + -0.910296 1.95936 -0.588676 -0.757762 0.463024 -0.459788 + -1.42465 1.65393 0.554738 0.158651 -0.348461 -0.923799 + -1.33145 1.63145 0.543685 -0.0662636 -0.755799 -0.651442 + -1.36103 1.64833 0.656244 -0.44662 -0.894571 0.0165496 + -1.42107 1.71157 0.51291 -0.341219 -0.537438 -0.771187 + -1.32788 1.68917 0.501908 -0.499495 -0.749325 -0.43476 + -1.24213 1.58922 0.591819 0.152189 -0.58564 -0.796156 + -1.4907 1.74001 0.544657 -0.49971 -0.517585 -0.694547 + -1.47947 1.78026 0.487332 -0.513283 -0.578693 -0.633763 + -1.3416 1.70969 0.431165 -0.247209 -0.720373 -0.648036 + -1.25585 1.60974 0.521077 -0.733074 -0.677962 -0.0544878 + -1.24213 1.58922 0.591819 -0.733074 -0.677962 -0.0544896 + -1.55876 1.75007 0.57343 -0.274106 0.0021195 -0.961697 + -1.55474 1.7939 0.567707 -0.574034 -0.467154 -0.672497 + -1.5491 1.8087 0.519079 -0.558101 -0.675418 -0.48201 + -1.48119 1.81453 0.465381 -0.403333 -0.407991 -0.819064 + -1.34332 1.74387 0.409165 0.172048 -0.0571056 -0.983432 + -1.54673 1.70181 0.56561 -0.125475 0.235197 -0.963815 + -1.72344 1.78891 0.607946 0.0614365 0.200849 -0.977694 + -1.73866 1.86406 0.624396 -0.0594945 -0.0861165 -0.994507 + -1.62279 1.80396 0.596478 -0.258931 -0.0251385 -0.965569 + -1.63474 1.85424 0.577997 -0.531421 -0.600955 -0.597029 + -1.5057 1.64402 0.533103 0.00407243 0.4744 -0.8803 + -1.67239 1.66973 0.591376 -0.0118551 0.3349 -0.942179 + -1.71141 1.74066 0.600128 -0.0154851 0.123927 -0.99217 + -1.84873 1.84604 0.584596 0.346673 0.132744 -0.928545 + -1.55433 1.51188 0.462787 0.0783771 0.182104 -0.98015 + -1.78626 1.7063 0.586033 0.116068 0.148598 -0.982063 + -1.82528 1.77714 0.594734 0.284094 0.125119 -0.950598 + -1.47328 1.52179 0.484423 0.576575 0.04319 -0.815902 + -1.4852 1.45922 0.489986 0.674998 0.159123 -0.720457 + -1.6279 1.51032 0.455686 -0.361603 -0.319779 -0.875777 + -1.58157 1.5563 0.524846 0.0200238 0.749896 -0.661252 + -1.36103 1.64833 0.656244 0.718026 -0.156207 -0.678261 + -1.37295 1.58577 0.661806 0.906335 -0.102093 -0.410041 + -1.4117 1.40588 0.573584 0.890971 0.0662854 -0.449195 + -1.44611 1.34345 0.496517 0.862761 0.182988 -0.471338 + -1.51962 1.39679 0.412919 0.598471 0.554336 -0.578398 + -1.60378 1.4514 0.414339 0.252118 0.685964 -0.682561 + -1.6785 1.53268 0.464751 -0.0695768 0.427526 -0.901321 + -1.35441 1.57088 0.718197 0.895974 -0.14791 -0.418751 + -1.39315 1.39099 0.629975 0.925882 -0.376372 0.0329614 + -1.43263 1.30966 0.516243 0.751217 -0.630082 -0.196646 + -1.51069 1.33656 0.353853 0.736424 0.451479 -0.503832 + -1.42226 1.38717 0.695585 0.901474 -0.432822 -0.00318933 + -1.37611 1.46992 0.725658 0.613776 -0.264279 -0.743933 + -1.38745 1.42682 0.758114 0.291409 -0.549019 -0.783364 + -1.43361 1.34407 0.72804 0.871131 -0.370591 -0.322169 + -1.4716 1.28252 0.647242 0.807773 -0.588772 0.0291533 + -1.46161 1.25622 0.403406 0.971141 -0.229602 0.0645576 + -1.47147 1.2329 0.468794 0.970547 -0.240874 -0.0042273 + -1.33033 1.32237 0.775818 -0.0139062 -0.260345 -0.965415 + -1.36663 1.3271 0.796625 -0.0331493 -0.312713 -0.949269 + -1.40545 1.33244 0.772376 0.608169 -0.300587 -0.734696 + -1.42922 1.26703 0.791681 0.265653 -0.4725 -0.84034 + -1.45738 1.27865 0.747345 0.628655 -0.713754 -0.308783 + -1.30379 1.01935 0.842075 -0.701042 -0.274019 -0.658372 + -1.3401 1.02416 0.862932 -0.26384 -0.291012 -0.91962 + -1.39111 1.13398 0.83733 0.120392 -0.243485 -0.962404 + -1.38463 1.23273 0.810888 0.449948 -0.263087 -0.853424 + -1.25658 1.00816 0.761047 -0.816984 -0.227274 -0.529984 + -1.23493 0.81986 0.848598 -0.3394 -0.739154 -0.581773 + -1.28214 0.831044 0.929626 -0.572969 -0.185011 -0.798422 + -1.34743 0.893034 0.898256 0.0404228 -0.329513 -0.943285 + -1.27955 1.43341 0.724495 -0.787108 -0.264702 -0.55713 + -1.2275 1.01816 0.717136 -0.668107 -0.322756 -0.670419 + -1.19119 0.851915 0.802477 0.177938 -0.726068 -0.664201 + -1.19143 0.74391 1.06795 0.121434 -0.810634 -0.572823 + -1.32722 0.760374 0.965028 -0.103016 -0.722529 -0.683622 + -1.37295 1.58577 0.661806 -0.603513 -0.590461 -0.535843 + -1.49721 1.30268 0.373529 0.902449 0.118537 -0.414167 + -1.26058 1.67037 0.479465 0.748008 -0.111949 -0.654179 + -1.27974 1.74305 0.504183 0.532834 -0.346579 -0.771991 + -1.19027 1.54224 0.680788 0.641162 -0.279753 -0.714598 + -1.25585 1.60974 0.521077 0.855809 -0.245671 -0.455232 + -1.36248 1.81655 0.433883 0.428058 0.603827 -0.672428 + -1.40002 1.84843 0.43166 0.645561 0.762778 0.0376799 + -1.51874 1.84632 0.463109 -0.371993 -0.682685 -0.628937 + -1.40002 1.84843 0.43166 -0.31818 -0.808407 -0.495216 + -1.6096 1.89578 0.469648 -0.532898 -0.672036 -0.514185 + -1.49371 1.87369 0.4009 -0.342336 -0.911483 -0.228044 + -1.45697 1.86202 0.356314 -0.354889 -0.929502 0.100401 + -1.36329 1.83676 0.387075 -0.505364 -0.851676 0.138762 + -1.26813 1.77022 0.467517 -0.65214 -0.740768 -0.161171 + -1.62911 1.86903 0.52937 -0.601119 -0.697692 -0.389719 + -1.71663 1.98444 0.482682 -0.280927 -0.831833 -0.47868 + -1.70041 2.01636 0.421399 -0.302824 -0.874058 -0.379895 + -1.58458 1.92315 0.407439 -0.55551 -0.750692 -0.357589 + -1.4805 1.86989 0.323886 -0.530858 -0.844972 -0.0649066 + -1.73614 1.95778 0.542455 -0.386941 -0.789641 -0.476177 + -1.85217 2.01488 0.387354 -0.221925 -0.975061 -0.0020898 + -1.82237 2.0239 0.372136 0.209587 -0.926501 -0.312521 + -1.80615 2.05582 0.310853 0.260895 -0.927769 -0.266794 + -1.68151 2.01991 0.357853 -0.516562 -0.856238 0.00441094 + -1.75061 1.91433 0.605915 -0.198178 -0.546767 -0.813493 + -1.86303 1.97649 0.569659 0.0790728 -0.655159 -0.751342 + -1.84856 2.01994 0.506199 -0.282637 -0.901608 -0.327445 + -1.86395 1.92119 0.601046 0.292483 -0.153384 -0.943889 + -1.9859 2.03839 0.470843 0.378025 -0.690931 -0.616208 + -1.97685 2.07276 0.415306 0.134482 -0.934255 -0.330275 + -1.98985 2.08774 0.344357 -0.133822 -0.991001 -0.00308779 + -1.86155 2.03492 0.43525 -0.59574 -0.802765 0.0257306 + -1.97939 1.91008 0.527281 0.55678 -0.0870311 -0.826088 + -1.98682 1.983 0.502179 0.573622 -0.319895 -0.754073 + -2.10785 2.01579 0.369994 0.72488 -0.523015 -0.448336 + -2.09749 2.04099 0.300132 0.612565 -0.7504 -0.248322 + -2.08845 2.07545 0.244645 0.631907 -0.753134 -0.18298 + -1.95594 1.84118 0.537418 0.318832 -0.267833 -0.909182 + -2.11899 1.92745 0.436187 0.487515 -0.601926 -0.632466 + -2.10042 1.94287 0.395095 0.480734 -0.688386 -0.543158 + -2.21448 1.97213 0.146212 0.340431 -0.938293 -0.0609351 + -2.20412 1.99725 0.076298 0.422197 -0.904346 -0.0625178 + -1.92435 1.7883 0.580401 0.0339354 -0.222883 -0.974254 + -2.0874 1.87467 0.479219 0.111452 -0.663774 -0.739582 + -2.25096 1.97584 0.273977 -0.0299687 -0.985607 -0.166376 + -2.23239 1.99125 0.232885 -0.118591 -0.992596 -0.026269 + -1.73074 1.64424 0.584322 0.0741838 0.316941 -0.94554 + -1.86882 1.72633 0.57874 0.513882 0.526135 -0.677574 + -1.84301 1.69247 0.546183 0.315118 0.669452 -0.672706 + -1.89362 1.71493 0.555299 0.0694684 0.222082 -0.97255 + -2.06103 1.82402 0.535744 0.404489 -0.204117 -0.891474 + -1.68095 1.58851 0.550251 0.225784 0.686037 -0.691647 + -1.65514 1.55474 0.517745 0.280253 0.801447 -0.528338 + -2.11446 1.66752 0.536 -0.668628 -0.425153 0.610067 + -2.07944 1.69408 0.561203 -0.540933 -0.521962 0.659506 + -2.17596 1.71816 0.505099 -0.520638 -0.116165 0.845838 + -2.06416 1.6055 0.555424 -0.736878 -0.396759 0.547351 + -2.02915 1.63206 0.580626 -0.619384 -0.25349 0.743038 + -1.99323 1.67405 0.641699 -0.679049 -0.496245 0.540956 + -2.03536 1.72045 0.660326 -0.396191 -0.82836 0.396045 + -2.09294 1.7091 0.57958 -0.341504 -0.883916 0.31948 + -2.17596 1.71816 0.505099 -0.49317 -0.804002 0.33221 + -2.05331 1.58948 0.539777 -0.539813 -0.340268 -0.769948 + -2.03335 1.52095 0.551873 -0.928457 -0.2446 0.279532 + -1.97254 1.54083 0.602234 -0.716622 -0.156022 0.679787 + -1.93662 1.58282 0.663307 -0.960484 -0.0456554 0.274564 + -2.08416 1.6346 0.53063 -0.525064 -0.671323 -0.5231 + -1.92623 1.52555 0.55051 -0.171319 -0.160066 -0.972126 + -2.0225 1.50484 0.536176 -0.468757 -0.0323017 -0.882736 + -2.02235 1.43909 0.554258 -0.978711 -0.187128 0.084304 + -1.96154 1.45906 0.604668 -0.93673 0.228917 0.264827 + -2.14566 1.68514 0.49968 -0.472258 -0.603201 -0.642744 + -1.95708 1.57075 0.541413 -0.064221 -0.166665 -0.98392 + -1.81379 1.44762 0.531278 -0.346612 -0.0335845 -0.937407 + -1.87226 1.48096 0.546936 -0.240218 -0.125874 -0.962523 + -0.798114 2.04695 0.249812 0.582907 -0.482716 -0.653609 + -0.905691 2.11918 0.074307 0.678748 0.724874 -0.117722 + -0.846312 2.08542 0.208784 0.87355 0.292197 -0.38927 + -0.738912 2.12985 0.321833 0.667648 0.0013291 -0.744476 + -0.690714 2.09138 0.362861 0.713596 -0.0775135 -0.696256 + -0.675598 2.02754 0.398431 0.658085 -0.394429 -0.641366 + -0.815225 2.03678 0.260635 0.448631 -0.71777 -0.532481 + -0.905691 2.11918 0.074307 0.10775 -0.933094 -0.343112 + -0.804951 2.14597 0.266304 0.718092 0.128867 -0.683913 + -0.579075 2.25846 0.43007 0.496331 -0.498872 -0.71048 + -0.547216 2.19947 0.491447 0.522684 -0.400135 -0.75279 + -0.5321 2.13554 0.526966 0.50735 -0.165553 -0.845688 + -0.645114 2.2745 0.37449 0.588502 -0.17204 -0.789979 + -0.4687 2.2542 0.479834 -0.365837 -0.796584 -0.481267 + -0.9191 1.77532 -0.757703 -0.921344 0.26709 0.282469 + -0.938901 1.7913 -0.829386 -0.967888 0.120528 0.220604 + -0.927779 1.73612 -0.733023 -0.859058 0.395144 0.325392 + -0.919516 1.81726 -0.779352 -0.970921 0.0678472 0.229586 + -0.939318 1.83324 -0.851034 -0.993218 0.116063 0.00684519 + -0.945445 1.76854 -0.856961 -0.99584 0.0460393 0.0786314 + -0.927779 1.73612 -0.733023 -0.982974 0.0857149 0.162529 + -0.942828 1.68755 -0.866885 -0.998141 -0.0411133 0.04499 + -0.906177 1.85878 -0.71386 -0.977632 -0.0166357 0.209664 + -0.914713 1.86018 -0.745692 -0.99153 -0.0836206 0.0993798 + -0.926983 1.90829 -0.818027 -0.993211 0.112422 0.0299023 + -0.908131 1.97388 -0.863228 -0.94228 0.295835 -0.156816 + -0.920465 1.89883 -0.896237 -0.96343 0.259979 -0.0649091 + -0.935194 1.85775 -0.932285 -0.962114 0.265406 0.0624215 + -0.947421 1.79744 -0.917223 -0.994183 0.101227 0.0367764 + -0.92218 1.95121 -0.784367 -0.991157 0.125322 0.0436205 + -0.889057 2.0438 -0.824329 -0.920411 0.323342 -0.219759 + -0.853357 2.06532 -0.916001 -0.904602 0.40171 -0.142567 + -0.881246 1.99862 -0.951473 -0.921489 0.379427 -0.0830305 + -0.895974 1.95763 -0.987472 -0.920106 0.390474 0.0305702 + -0.911212 2.02207 -0.740895 -0.968058 0.180607 -0.17391 + -0.87809 2.11465 -0.780856 -0.905549 0.336539 -0.258307 + -0.834284 2.13524 -0.87711 -0.877909 0.411532 -0.244781 + -0.794945 2.19464 -0.931195 -0.908282 0.409743 -0.0844633 + -0.825763 2.12504 -0.97444 -0.912184 0.409762 -0.00392631 + -0.928664 1.90521 -0.720078 -0.967429 -0.0535973 -0.247402 + -0.927471 1.96604 -0.682646 -0.995367 0.0887608 -0.0369671 + -0.910019 2.0829 -0.703454 -0.948029 0.185944 -0.258197 + -0.867241 2.18075 -0.73473 -0.861721 0.329599 -0.385748 + -0.808844 2.2017 -0.834823 -0.854692 0.437788 -0.279004 + -0.867467 2.24817 -0.685917 -0.821212 0.306916 -0.481055 + -0.797996 2.26779 -0.788689 -0.816448 0.413034 -0.403504 + -0.742346 2.33211 -0.841297 -0.895377 0.381106 -0.230344 + -0.769506 2.2611 -0.8889 -0.896867 0.427295 -0.114234 + -0.879963 2.30651 -0.635553 -0.798769 0.254947 -0.544951 + -0.790321 2.32833 -0.73795 -0.783134 0.401007 -0.475284 + -0.734671 2.39274 -0.790508 -0.835662 0.436833 -0.332934 + -0.723082 2.36367 -0.89277 -0.952793 0.234904 0.19237 + -0.750241 2.29266 -0.940374 -0.93994 0.240587 0.242137 + -0.899095 2.36842 -0.583594 -0.744534 0.122759 -0.6562 + -0.802816 2.38658 -0.687645 -0.712985 0.287553 -0.639504 + -0.724962 2.45691 -0.737052 -0.775946 0.283106 -0.563701 + -0.683658 2.44041 -0.844285 -0.952871 0.272195 0.133969 + -0.943494 2.41256 -0.535238 -0.757947 0.0332098 -0.65147 + -0.843535 2.43289 -0.63406 -0.688584 0.153698 -0.708681 + -0.76568 2.50322 -0.683475 -0.628235 0.296858 -0.719164 + -0.673949 2.50458 -0.790829 -0.965184 0.246424 -0.0877197 + -0.961197 2.32062 -0.501188 -0.859715 -0.0457565 -0.50872 + -0.98843 2.44837 -0.481262 -0.618629 -0.390629 -0.681694 + -0.887934 2.47711 -0.585654 -0.605344 -0.0538717 -0.794139 + -0.798624 2.54457 -0.643083 -0.510764 0.1197 -0.851347 + -0.640952 2.57393 -0.734741 -0.958912 0.202906 -0.198285 + -0.989645 2.23551 -0.440186 -0.916228 -0.0672446 -0.394974 + -1.00613 2.35642 -0.447203 -0.88277 -0.081908 -0.46261 + -1.02405 2.3753 -0.403114 -0.918116 -0.253661 -0.304499 + -1.04836 2.45826 -0.454405 -0.665428 -0.475437 -0.575469 + -0.960276 2.50357 -0.553475 -0.434735 -0.480003 -0.761972 + -0.988577 2.12248 -0.426613 -0.934876 -0.0052776 -0.354934 + -1.00756 2.25448 -0.396038 -0.971597 -0.094175 -0.217095 + -1.01663 2.3143 -0.349446 -0.951964 -0.210719 -0.222177 + -1.03504 2.35087 -0.329394 -0.815363 -0.303482 -0.493033 + -1.04245 2.41196 -0.383011 -0.765655 -0.543822 -0.343555 + -1.00104 1.98792 -0.415936 -0.496606 -0.799198 -0.338622 + -1.018 2.02083 -0.35915 -0.965877 -0.258968 -0.00407133 + -1.00554 2.1554 -0.369826 -0.967887 0.00481509 -0.251339 + -0.991923 2.00152 -0.299495 -0.195315 -0.878073 0.436853 + -1.00945 2.09254 -0.276952 -0.968933 -0.19708 0.149428 + -1.01462 2.2153 -0.323177 -0.989167 -0.0561285 -0.135639 + -0.910296 1.95936 -0.588676 -0.140828 -0.910463 0.388876 + -0.983372 2.07331 -0.217248 -0.868739 -0.417688 0.266137 + -1.02436 2.14526 -0.215457 -0.94804 -0.314095 -0.0506466 + -1.02953 2.26801 -0.26168 -0.851984 -0.313542 -0.419303 + -1.06899 2.33969 -0.284833 -0.692449 -0.464131 -0.552355 + -1.08109 2.40086 -0.315784 -0.531204 -0.658702 -0.532855 + -0.985891 2.14995 -0.042786 -0.0406279 -0.98201 0.184409 + -1.0088 2.10705 -0.139893 -0.602097 -0.76224 0.237632 + -1.03829 2.21156 -0.143494 -0.863502 -0.504267 -0.00885052 + -1.08053 2.27656 -0.209287 -0.748895 -0.537308 -0.387887 + -1.11999 2.34824 -0.23243 -0.550238 -0.587228 -0.593635 + -0.905691 2.11918 0.074307 -0.559876 -0.810866 0.170398 + -0.939812 1.7023 0.659365 0.856444 0.472057 -0.208964 + -1.02368 1.78898 0.511438 0.875293 0.159408 -0.456564 + -1.07094 1.86141 0.481375 0.853731 0.506002 -0.122905 + -1.07689 1.85796 0.419351 0.895538 0.126612 -0.426592 + -1.12415 1.9304 0.389289 0.870411 0.488948 0.0575688 + -1.17438 2.06327 0.257947 0.900989 0.163297 -0.401936 + -1.18352 2.10173 0.282137 0.975216 0.190671 -0.112247 + -1.1333 1.96885 0.413481 0.869201 0.494442 0.00400529 + -1.07094 1.86141 0.481375 0.466296 -0.263077 -0.844606 + -1.08471 1.76643 0.448892 0.644822 -0.371989 -0.667704 + -1.19886 1.96262 0.243077 0.696707 -0.225157 -0.681105 + -1.26321 2.0167 0.155611 0.652707 -0.227057 -0.722786 + -1.23873 2.11735 0.170481 0.741797 -0.0562659 -0.66826 + -0.963729 1.67169 0.607384 0.748538 -0.209375 -0.629168 + -1.08988 1.68747 0.501654 0.334339 -0.70916 -0.620733 + -1.20667 1.87117 0.272668 0.581034 -0.372146 -0.723814 + -1.30139 1.91958 0.191021 0.260718 -0.473027 -0.841588 + -0.879863 1.58501 0.755312 0.511077 -0.277831 -0.813394 + -0.897106 1.49916 0.727805 0.499125 -0.113589 -0.859053 + -0.9689 1.59273 0.660146 0.26412 -0.489588 -0.83099 + -1.11069 1.64926 0.56604 -0.104398 -0.871487 -0.479177 + -1.25634 1.77205 0.302146 0.280348 -0.705549 -0.65085 + -0.939812 1.7023 0.659365 0.88661 0.080599 -0.455441 + -1.02369 1.81801 0.51875 0.389526 -0.319725 -0.863739 + -2.01921 2.08801 0.063897 0.891652 -0.363071 -0.270437 + -2.05462 2.14025 -0.122982 0.706738 -0.521509 -0.478068 + -2.02297 2.22611 -0.133903 0.307269 -0.652945 -0.692278 + -2.11 2.13872 -0.166128 -0.0225143 -0.134814 -0.990615 + -2.07834 2.22467 -0.176999 -0.234222 -0.0311514 -0.971684 + -1.99525 2.25385 -0.159755 0.368819 -0.473768 -0.799698 + -2.00431 2.06925 -0.007613 -0.435439 -0.782534 -0.445009 + -2.01921 2.08801 0.063897 -0.963397 -0.228058 -0.140913 + -2.1564 2.07049 -0.153557 0.272909 -0.420879 -0.86509 + -2.21245 2.05771 -0.140023 -0.285395 0.204076 -0.936431 + -2.15347 2.13098 -0.122723 -0.474097 0.330843 -0.81595 + -2.11643 2.21115 -0.126387 -0.731772 0.290711 -0.616439 + -2.0413 2.30484 -0.180664 -0.33293 -0.033589 -0.942353 + -2.08449 2.10682 -0.082678 0.622944 -0.738172 -0.258925 + -2.20285 2.00328 -0.128748 0.393814 -0.715142 -0.577479 + -2.25885 1.98948 -0.127453 0.0654146 -0.410799 -0.909376 + -2.28707 2.03025 -0.12807 0.0726322 0.0373063 -0.996661 + -2.22809 2.10343 -0.110819 -0.108063 0.451365 -0.885772 + -2.04908 2.05457 0.10421 -0.394549 -0.904236 -0.163367 + -2.01921 2.08801 0.063897 0.445365 -0.822987 -0.352623 + -1.96677 2.0257 0.223427 -0.477639 -0.864623 0.155847 + -1.97616 2.04573 0.271322 -0.576478 -0.770909 0.270873 + -2.06277 2.09659 0.177242 -0.0374822 -0.993785 0.104814 + -2.08449 2.10682 -0.082678 -0.913318 -0.402732 0.0604703 + -2.13094 2.03961 -0.057868 0.669738 -0.722122 -0.173179 + -1.95187 2.00685 0.151865 -0.29087 -0.949658 -0.116377 + -1.92207 2.01587 0.136647 0.26746 -0.928651 -0.257044 + -1.90933 2.03896 0.068049 0.0729942 -0.964419 -0.254103 + -2.01921 2.08801 0.063897 -0.772591 -0.634878 0.00569207 + -1.9766 2.09699 -0.033465 -0.181133 -0.798418 -0.574212 + -1.96385 2.12008 -0.10206 -0.502451 -0.590536 -0.631514 + -1.88992 2.05432 0.003641 0.175826 -0.91176 -0.371186 + -1.78673 2.07109 0.246399 -0.195834 -0.98047 0.0180721 + -1.95888 2.33143 -0.179713 -0.160192 -0.365857 -0.916781 + -1.91703 2.39073 -0.221035 -0.199487 -0.259334 -0.944961 + -1.922 2.17939 -0.143383 -0.0811221 -0.538241 -0.838878 + -1.84277 2.10366 -0.031417 0.0408099 -0.879235 -0.474636 + -2.00493 2.38241 -0.200621 -0.402876 -0.110237 -0.908591 + -1.98115 2.45802 -0.212777 -0.401571 0.0593372 -0.913904 + -1.84323 2.43208 -0.244655 -0.338361 -0.225106 -0.913695 + -1.87485 2.22873 -0.178439 -0.194052 -0.47996 -0.855559 + -2.08929 2.29985 -0.133025 -0.702724 0.137258 -0.698097 + -2.06551 2.37554 -0.14513 -0.649134 -0.0154919 -0.760516 + -2.06646 2.47435 -0.164459 -0.589917 -0.069556 -0.804463 + -1.90735 2.49937 -0.236397 -0.324489 -0.273372 -0.905524 + -1.78377 2.48357 -0.285444 -0.551084 -0.389166 -0.738144 + -2.18137 2.18104 -0.066045 -0.610975 0.487603 -0.623661 + -2.15423 2.26975 -0.072682 -0.746867 0.132608 -0.651617 + -2.14124 2.36422 -0.079906 -0.739422 -0.0379092 -0.672174 + -2.1422 2.46302 -0.099236 -0.724802 -0.136636 -0.675272 + -2.01558 2.518 -0.205467 -0.451924 -0.352835 -0.819312 + -2.22713 2.13299 -0.089216 -0.106504 0.701112 -0.705052 + -2.23721 2.19597 -0.019299 -0.401947 0.577828 -0.710319 + -2.20792 2.29565 0.00465 -0.754194 0.195071 -0.627008 + -2.19493 2.39012 -0.002574 -0.82334 -0.045999 -0.565681 + -2.19766 2.49044 -0.027537 -0.819587 -0.122525 -0.559701 + -2.34943 2.14379 -0.120915 0.20603 0.815703 -0.540537 + -2.28297 2.148 -0.04242 0.0294366 0.754191 -0.655995 + -2.39238 2.16494 -0.055148 0.0178468 0.996255 -0.0846045 + -2.29868 2.23092 0.067564 -0.715059 0.543131 -0.440113 + -2.26939 2.33052 0.091463 -0.780482 0.159953 -0.60437 + -2.35039 2.11423 -0.142518 0.187993 0.291966 -0.937771 + -2.45884 2.16073 -0.133652 0.464929 0.746119 -0.4766 + -2.34741 1.98765 -0.137876 0.0395935 -0.34346 -0.938332 + -2.41073 2.07162 -0.152324 0.417677 0.0289103 -0.908135 + -2.47436 2.13853 -0.208818 0.692414 0.4631 -0.553264 + -2.57149 2.19664 -0.189667 0.368222 0.929039 -0.0360333 + -2.41388 1.93289 -0.102239 0.117337 -0.726642 -0.676922 + -2.46026 1.99781 -0.192677 0.407568 -0.490041 -0.770551 + -2.52389 2.06472 -0.24917 0.562199 -0.435811 -0.702852 + -2.57622 2.1621 -0.327435 0.864073 0.345566 -0.366008 + -2.58701 2.17446 -0.264832 0.691813 0.691644 -0.20742 + -2.32532 1.93473 -0.091815 0.282242 -0.835506 -0.471454 + -2.4752 1.90394 -0.065482 -0.184357 -0.928635 -0.321946 + -2.52159 1.96885 -0.155921 -0.216449 -0.819189 -0.531112 + -2.57747 2.04533 -0.243775 -0.224516 -0.830237 -0.510195 + -2.55172 2.0625 -0.290718 0.351439 -0.666144 -0.657832 + -2.26235 1.96594 -0.076878 0.466506 -0.883362 -0.0452016 + -2.38482 1.89739 -0.039944 0.229607 -0.969668 -0.0838089 + -2.52786 1.90878 0.011527 -0.324616 -0.940898 -0.0966134 + -2.59692 1.97242 -0.081094 -0.513403 -0.812734 -0.275465 + -2.6528 2.0488 -0.168998 -0.570032 -0.742784 -0.351191 + -2.15662 2.01839 0.009485 0.535389 -0.844412 -0.0181095 + -2.30984 1.9448 -0.010065 0.423462 -0.896017 0.133542 + -2.43748 1.90232 0.037117 0.135359 -0.982911 0.124752 + -2.56208 1.9173 0.096568 -0.446336 -0.893011 0.0575868 + -2.33788 1.95024 0.068513 0.304299 -0.936248 0.175618 + -2.46552 1.90768 0.115641 0.123459 -0.980982 0.149772 + -2.56497 1.93226 0.183856 -0.439401 -0.891893 0.107025 + -2.63114 1.98094 0.00394 -0.683884 -0.726283 -0.0693862 + -2.69489 2.06219 -0.099988 -0.756224 -0.640445 -0.133998 + -2.35579 1.96937 0.155186 0.250707 -0.952246 0.174281 + -2.46841 1.92264 0.20293 0.153463 -0.981928 0.110753 + -2.55743 1.93752 0.279154 -0.486431 -0.868117 0.0987784 + -2.63891 1.99185 0.10725 -0.72968 -0.682228 0.0461766 + -2.70266 2.07318 0.003376 -0.822254 -0.56912 0.000746165 + -2.35464 1.97552 0.240132 0.23627 -0.968858 0.0740969 + -2.46726 1.92879 0.287876 0.171688 -0.98125 -0.0875881 + -2.51789 1.91892 0.360977 -0.36936 -0.927258 -0.061358 + -2.63136 1.99719 0.2026 -0.729722 -0.675936 0.103038 + -2.69203 2.06454 0.153948 -0.832593 -0.545824 0.0941518 + -2.36393 1.98662 0.325503 0.306812 -0.943564 -0.124715 + -2.42772 1.91018 0.369699 0.270018 -0.903994 -0.331491 + -2.49455 1.90443 0.452073 -0.465108 -0.883359 -0.0578806 + -2.62208 2.00313 0.305904 -0.721649 -0.685928 0.0934048 + -2.68276 2.07057 0.257303 -0.869396 -0.482955 0.104423 + -2.26025 1.98694 0.35935 -0.217413 -0.94835 -0.231006 + -2.3478 1.96087 0.399315 0.250601 -0.780095 -0.573281 + -2.4116 1.88434 0.44346 0.0186851 -0.913316 -0.406823 + -2.45006 1.8742 0.527831 -0.396996 -0.895642 -0.20055 + -2.59874 1.98865 0.397 -0.680365 -0.732865 -0.00338486 + -2.23387 1.93629 0.415874 -0.0206697 -0.684186 -0.729015 + -2.3475 1.89328 0.451581 0.0304835 -0.718822 -0.694525 + -2.36711 1.85411 0.519218 -0.263996 -0.881681 -0.39108 + -2.02509 1.75372 0.534509 0.226373 0.0154897 -0.973918 + -2.23356 1.86879 0.468189 -0.0801071 -0.518449 -0.851348 + -2.29796 1.84198 0.496837 -0.316115 -0.638518 -0.701687 + -2.31758 1.80281 0.564476 -0.530786 -0.824015 -0.198154 + -2.32775 1.80176 0.638488 -0.354247 -0.932081 -0.0757208 + -1.85767 1.64454 0.554014 0.00223835 0.344011 -0.938963 + -1.78295 1.56325 0.503601 -0.316717 0.174407 -0.932348 + -1.98656 1.67634 0.551519 0.0121252 -0.0451675 -0.998906 + -2.19504 1.79142 0.4852 -0.00539201 -0.199273 -0.979929 + -2.25122 1.76773 0.50923 -0.496109 -0.710724 -0.498746 + -1.60429 1.36788 0.3626 -0.552506 -0.452338 -0.700091 + -1.79238 1.54006 0.510978 -0.361389 -0.0101552 -0.93236 + -1.95973 1.60279 0.539327 0.0337568 0.0391626 -0.998662 + -2.1483 1.71718 0.497593 -0.00359493 -0.103174 -0.994657 + -2.17596 1.71816 0.505099 -0.258826 -0.316883 -0.912466 + -1.49721 1.30268 0.373529 -0.0689533 -0.274035 -0.959245 + -1.3001 2.61612 -0.639218 -0.198498 -0.763167 0.614959 + -1.49586 2.56716 -0.58981 0.325213 -0.813204 0.482634 + -1.42854 2.55889 -0.649095 -0.261824 -0.953626 -0.148479 + -1.29075 2.53949 -0.6781 -0.273143 -0.946443 0.17216 + -1.25085 2.53548 -0.642347 -0.422825 -0.891601 0.162072 + -1.2602 2.61211 -0.603465 -0.817925 -0.562122 -0.122549 + -1.39026 2.63554 -0.586252 0.138319 -0.9763 0.166454 + -1.49586 2.56716 -0.58981 0.331158 -0.551235 0.765817 + -1.58602 2.58657 -0.536845 0.286573 -0.582008 0.761014 + -1.38815 2.56513 -0.686901 -0.36841 -0.647767 -0.666838 + -1.25037 2.54573 -0.715897 0.0747647 -0.674029 -0.734912 + -1.20705 2.52844 -0.663145 0.369842 -0.921393 -0.119382 + -1.3163 2.56033 -0.481979 0.0779208 -0.994226 -0.073779 + -1.38229 2.53653 -0.460558 -0.203936 -0.811828 -0.547124 + -1.57837 2.67193 -0.59068 -0.656773 -0.297396 -0.692968 + -1.51214 2.66684 -0.652472 -0.609066 -0.322124 -0.724758 + -1.33797 2.62379 -0.735296 -0.205029 -0.183532 -0.961394 + -1.1783 2.60536 -0.717774 0.255144 -0.437048 -0.862491 + -1.13498 2.58814 -0.664965 0.32786 -0.884544 -0.331798 + -1.6457 2.68019 -0.531396 -0.674609 -0.346892 -0.65159 + -1.68768 2.91119 -0.517889 -0.673386 -0.0672369 -0.736228 + -1.62145 2.9061 -0.57968 -0.722778 -0.104964 -0.683063 + -1.55545 2.87743 -0.65243 -0.700632 -0.122339 -0.702957 + -1.46196 2.7255 -0.700868 -0.532933 -0.234319 -0.813066 + -1.47007 2.61951 -0.553496 0.0691955 -0.996045 0.0557275 + -1.65093 2.62757 -0.481455 -0.442259 -0.871965 -0.209962 + -1.49939 2.62158 -0.514475 -0.182048 -0.886402 -0.425618 + -1.68026 2.62964 -0.442434 -0.511415 -0.808471 -0.291254 + -1.85563 2.74393 -0.352592 -0.687383 -0.376163 -0.621293 + -1.7851 2.74542 -0.40958 -0.653868 -0.154463 -0.740674 + -1.58602 2.58657 -0.536845 -0.714862 -0.552201 -0.429008 + -1.40544 2.59553 -0.522956 -0.091748 -0.826615 -0.555239 + -1.47385 2.56861 -0.483731 -0.0671506 -0.742373 -0.666613 + -1.56168 2.57668 -0.468498 -0.327449 -0.502145 -0.800392 + -1.74718 2.65567 -0.375326 -0.601375 -0.450839 -0.659615 + -1.92255 2.76996 -0.285484 -0.596367 -0.140757 -0.790275 + -1.32563 2.61155 -0.555713 -0.313955 -0.768675 -0.557289 + -1.5158 2.50943 -0.384024 0.0381157 -0.825219 -0.563525 + -1.58421 2.4825 -0.34479 -0.184095 -0.722046 -0.666902 + -1.64313 2.46622 -0.302775 0.153892 -0.89812 -0.411943 + -1.53614 2.52362 -0.437803 0.285919 -0.873028 -0.395059 + -1.44772 2.53598 -0.412815 -0.0344637 -0.87907 -0.475444 + -1.50702 2.42195 -0.279312 0.11945 -0.724956 -0.678359 + -1.5751 2.3954 -0.250513 0.00538386 -0.670113 -0.742239 + -1.58602 2.58657 -0.536845 0.299558 -0.910718 0.284354 + -1.44638 2.46044 -0.300165 0.15228 -0.780961 -0.605731 + -1.51313 2.29001 -0.149574 0.379767 -0.632734 -0.674852 + -1.56252 2.23009 -0.131389 0.175666 -0.618888 -0.765584 + -1.614 2.19748 -0.106921 0.3588 -0.532128 -0.766878 + -1.62659 2.3628 -0.226055 -0.187271 -0.599717 -0.777991 + -1.38039 2.48423 -0.321586 0.103289 -0.850498 -0.515738 + -1.45249 2.32849 -0.170436 0.265634 -0.6968 -0.666265 + -1.40673 2.26514 -0.0839 0.343748 -0.632489 -0.694114 + -1.44143 2.21733 -0.061887 0.333725 -0.500521 -0.798816 + -1.49081 2.1574 -0.043692 0.26466 -0.454164 -0.8507 + -1.31783 2.50633 -0.353252 -0.269259 -0.818702 -0.507175 + -1.39437 2.37983 -0.191359 0.22857 -0.761374 -0.606684 + -1.3486 2.31648 -0.104823 0.153892 -0.768012 -0.621671 + -1.27698 2.27543 -0.022522 0.241215 -0.849161 -0.469831 + -1.31168 2.22762 -0.000509 0.502434 -0.358478 -0.7868 + -1.27251 2.55328 -0.502778 -0.321253 -0.926771 -0.194658 + -1.25834 2.48932 -0.404594 -0.393215 -0.82417 -0.407585 + -1.33181 2.40193 -0.223025 -0.0107838 -0.804446 -0.593928 + -1.30396 2.34659 -0.149771 -0.0339501 -0.780982 -0.62363 + -1.27338 2.29774 -0.092373 -0.0574718 -0.892647 -0.447077 + -1.21302 2.53636 -0.55407 -0.309272 -0.769486 -0.558786 + -1.19745 2.49031 -0.447509 -0.345417 -0.851623 -0.394239 + -1.26661 2.4303 -0.253176 -0.0271631 -0.888749 -0.457588 + -1.23877 2.37488 -0.179981 -0.192944 -0.740977 -0.643214 + -1.22874 2.32785 -0.137321 -0.201154 -0.804231 -0.55924 + -1.05893 2.61404 -0.683015 0.33478 -0.768482 -0.545305 + -1.13696 2.56225 -0.572121 -0.211886 -0.806495 -0.55197 + -1.14564 2.48276 -0.502629 -0.408862 -0.780114 -0.473555 + -1.20572 2.43121 -0.29614 -0.257861 -0.878056 -0.403144 + -1.18009 2.38412 -0.225178 -0.357684 -0.725287 -0.588235 + -1.10129 2.65799 -0.720933 0.176528 -0.169503 -0.969591 + -0.952736 2.65753 -0.671346 0.117545 -0.543568 -0.831094 + -1.08515 2.55479 -0.6272 -0.418655 -0.25149 -0.872629 + -1.09197 2.49324 -0.547582 0.0035975 -0.881634 -0.471921 + -1.14067 2.43669 -0.342226 -0.187104 -0.904363 -0.383561 + -1.26096 2.67633 -0.738513 0.0744521 0.00752472 -0.997196 + -1.18748 2.72607 -0.714866 0.137809 0.221193 -0.965444 + -0.995101 2.70139 -0.709312 0.178388 -0.0654426 -0.981781 + -0.875328 2.66696 -0.670681 0.0796277 -0.327457 -0.941505 + -1.00774 2.56423 -0.626535 0.199668 -0.711624 -0.67359 + -1.40656 2.74411 -0.750897 -0.221084 -0.407019 -0.88626 + -1.33308 2.79385 -0.727258 0.214473 -0.218816 -0.951904 + -1.11543 2.77194 -0.693708 0.168783 0.248755 -0.953747 + -0.923048 2.74734 -0.688105 0.121206 0.193536 -0.973577 + -0.778789 2.66576 -0.665798 -0.0887103 -0.34113 -0.935821 + -1.50006 2.89604 -0.702459 -0.797797 -0.284566 -0.531547 + -1.45443 2.86248 -0.801524 -0.454077 -0.405666 -0.793252 + -1.38219 2.88944 -0.808829 0.0923162 -0.461446 -0.882352 + -1.26083 2.82082 -0.734563 0.285119 -0.354411 -0.890562 + -1.04309 2.83942 -0.656181 0.167087 0.185379 -0.968358 + -1.61028 3.04066 -0.617947 -0.802366 -0.119512 -0.584743 + -1.56896 3.04128 -0.69341 -0.884303 -0.226945 -0.408048 + -1.52334 3.00771 -0.792474 -0.838766 -0.279602 -0.467219 + -1.46456 2.96133 -0.856744 -0.43366 -0.509505 -0.743198 + -1.30813 2.92966 -0.807285 0.338312 -0.37687 -0.862273 + -1.67628 3.06941 -0.545148 -0.726891 -0.05382 -0.684641 + -1.65569 3.23792 -0.566404 -0.787428 -0.254808 -0.561275 + -1.61437 3.23854 -0.641875 -0.890128 -0.183726 -0.417033 + -1.54549 3.15754 -0.791375 -0.887836 -0.374175 -0.267844 + -1.48671 3.11124 -0.855596 -0.59334 -0.175434 -0.785602 + -1.74535 3.11365 -0.478972 -0.678771 -0.0264612 -0.733873 + -1.72475 3.28224 -0.500178 -0.735128 -0.0979724 -0.670812 + -1.65737 3.38525 -0.628392 -0.881319 -0.268854 -0.388581 + -1.82338 3.13348 -0.411117 -0.65923 -0.00961781 -0.75188 + -1.85704 3.26162 -0.378462 -0.66499 -0.035641 -0.746001 + -1.89281 3.42958 -0.364967 -0.677891 -0.0988322 -0.728488 + -1.76052 3.45011 -0.486733 -0.764736 -0.153269 -0.625849 + -1.72596 3.52404 -0.570377 -0.877418 -0.287079 -0.384348 + -1.76571 2.93101 -0.450025 -0.66997 -0.0674115 -0.739321 + -1.93094 3.12032 -0.315717 -0.688146 -0.03703 -0.724626 + -1.9646 3.24846 -0.283062 -0.656972 -0.0300507 -0.753316 + -1.8402 2.95534 -0.383558 -0.688682 -0.0853769 -0.720019 + -2.00248 3.10753 -0.242768 -0.647973 -0.0453044 -0.760315 + -1.49586 2.56716 -0.58981 -0.637179 -0.585839 -0.500795 + -1.91174 2.94255 -0.310608 -0.665606 -0.0556807 -0.744223 + -1.98227 2.94105 -0.25362 -0.558639 0.0198152 -0.829174 + -2.08849 3.05709 -0.174005 -0.576015 0.0573106 -0.815428 + -2.09573 3.21649 -0.178093 -0.630168 -0.0245891 -0.776069 + -2.06155 2.88877 -0.219268 -0.513809 0.0245556 -0.857553 + -2.16776 3.0049 -0.139603 -0.622669 0.148497 -0.768265 + -2.24769 3.06839 -0.04557 -0.709019 0.0349271 -0.704324 + -2.18174 3.16605 -0.10933 -0.657452 0.0110682 -0.753415 + -1.97577 2.71731 -0.247687 -0.45761 -0.00880304 -0.889109 + -2.11477 2.83612 -0.18147 -0.621534 -0.0347292 -0.782617 + -2.22059 2.91037 -0.085081 -0.735021 -0.0397142 -0.67688 + -2.30052 2.97378 0.008902 -0.789742 -0.0420709 -0.611995 + -2.31727 3.15669 0.028492 -0.770474 0.0286842 -0.636825 + -1.83669 2.6434 -0.321467 -0.457957 -0.0221103 -0.8887 + -2.03681 2.65629 -0.224989 -0.534364 -0.0485526 -0.843859 + -2.13665 2.73934 -0.144843 -0.698631 -0.0887716 -0.709954 + -2.24246 2.81351 -0.048503 -0.769853 -0.107974 -0.629022 + -2.3405 2.85857 0.084852 -0.82496 -0.0994869 -0.556366 + -1.6512 2.5644 -0.41463 -0.440221 -0.305126 -0.844455 + -1.72545 2.55667 -0.373052 -0.428378 -0.256508 -0.866427 + -1.89774 2.58237 -0.29876 -0.438942 -0.111462 -0.891575 + -2.07411 2.58682 -0.186068 -0.605043 -0.161246 -0.779694 + -1.59495 2.48724 -0.400794 0.137899 -0.839391 -0.525744 + -1.66919 2.47952 -0.359216 -0.366408 -0.44297 -0.818243 + -1.78908 2.52885 -0.331856 -0.470619 -0.492298 -0.732229 + -1.96138 2.55454 -0.257564 -0.430506 -0.382153 -0.817694 + -1.70194 2.42975 -0.265816 0.645164 -0.737215 -0.200693 + -1.73553 2.35858 -0.256944 0.332164 -0.651797 -0.681783 + -1.78273 2.34838 -0.237672 0.538597 -0.692638 -0.479756 + -1.71639 2.46932 -0.339945 -0.371202 -0.410771 -0.832752 + -1.85647 2.54302 -0.277405 -0.311587 -0.843734 -0.437065 + -1.68551 2.34651 -0.184032 -0.0935676 -0.609139 -0.787525 + -1.71628 2.29053 -0.14388 0.347864 -0.548168 -0.760593 + -1.74988 2.21936 -0.135015 0.186513 -0.612087 -0.76848 + -1.77436 2.17638 -0.08636 0.271163 -0.665157 -0.695728 + -1.8154 2.28022 -0.219228 0.137216 -0.472127 -0.870786 + -1.71639 2.46932 -0.339945 0.907551 -0.4055 0.10918 + -1.63216 2.1283 -0.077687 0.0192926 -0.498098 -0.866906 + -1.66293 2.07241 -0.037486 -0.40343 -0.597529 -0.692967 + -1.68409 2.03939 0.025701 -0.273643 -0.713378 -0.645145 + -1.70857 1.99641 0.074348 -0.572156 -0.73765 -0.358484 + -1.53196 2.1008 -0.030862 0.279885 -0.438283 -0.85415 + -1.55011 2.03162 -0.001628 0.22981 -0.584972 -0.777814 + -1.57347 1.98018 0.03807 -0.00642807 -0.773817 -0.633377 + -1.59463 1.94725 0.1013 -0.107748 -0.887259 -0.448511 + -1.38042 2.10717 0.002718 0.411046 -0.67189 -0.616121 + -1.43484 2.0693 0.0235 0.399968 -0.680769 -0.613661 + -1.4582 2.01786 0.063199 0.345951 -0.577204 -0.739699 + -1.47766 1.95416 0.101329 0.153002 -0.790946 -0.592447 + -1.33928 2.16376 -0.010112 0.468369 -0.342054 -0.814635 + -1.27263 2.16069 0.057417 0.641721 -0.744093 -0.185796 + -1.32704 2.12282 0.078207 0.703728 -0.633441 -0.321744 + -1.37329 2.02361 0.083435 0.334338 -0.352658 -0.873985 + -1.1922 2.27055 0.073518 0.450513 -0.681699 -0.576476 + -1.21979 2.20679 0.063957 0.723967 -0.575963 -0.379656 + -1.19121 2.27081 0.18087 0.69421 -0.717527 -0.056813 + -1.17331 2.26835 0.009938 -0.0378973 -0.999281 0.00106347 + -1.0976 2.3003 0.121208 -0.224908 -0.973844 -0.0323156 + -1.13837 2.31692 0.187409 0.0824058 -0.986284 -0.143015 + -1.12303 2.27615 0.261829 -0.480785 -0.673812 -0.561091 + -1.14682 2.27224 0.275606 0.251423 -0.717666 -0.649417 + -1.17764 2.27532 0.212466 -0.871159 -0.266775 0.412206 + -1.16971 2.29075 -0.059863 -0.283283 -0.931787 -0.226987 + -1.0774 2.23682 -0.044042 -0.552576 -0.818903 0.155106 + -1.07871 2.29809 0.057626 -0.262194 -0.942435 0.207535 + -1.05384 2.25235 0.14565 -0.840032 -0.35726 -0.408303 + -1.08226 2.25953 0.195622 -0.848131 -0.337051 -0.408742 + -1.17186 2.29449 -0.122738 -0.437185 -0.854362 -0.280954 + -1.07955 2.24064 -0.106867 -0.580085 -0.801537 -0.14505 + -1.02273 2.17336 -0.067931 -0.929554 -0.368633 0.00620746 + -1.03478 2.21398 -0.011292 -0.862637 -0.46737 0.193452 + -1.12179 2.30564 -0.172649 -0.512935 -0.728255 -0.454469 + -1.17866 2.339 -0.187233 -0.388309 -0.697699 -0.602023 + -1.11505 2.38959 -0.271264 -0.467927 -0.676145 -0.569097 + -1.087 2.44716 -0.387179 -0.287327 -0.868946 -0.402959 + -1.02021 2.51347 -0.526628 -0.0238733 -0.821431 -0.569808 + -0.935985 2.58446 -0.605581 0.104523 -0.764177 -0.636481 + -0.870966 2.57111 -0.610862 -0.297528 -0.270653 -0.915546 + -0.713771 2.65233 -0.67113 -0.475959 -0.188093 -0.859118 + -0.673895 2.61527 -0.694348 -0.745561 -0.0926619 -0.659964 + -1.02167 2.1516 0.035751 -0.740981 -0.667115 -0.0768413 + -1.03372 2.19214 0.092341 -0.979933 -0.0172478 -0.19858 + -1.0361 2.27517 0.090327 -0.763857 -0.624151 -0.164187 + -0.922802 2.10901 0.085129 -0.0730675 -0.940762 -0.331101 + -0.958577 2.11066 0.163666 -0.403519 -0.847821 -0.344053 + -1.05147 2.16932 0.147664 -0.741176 -0.418416 -0.524963 + -1.10586 2.12196 0.209692 -0.660401 -0.396373 -0.637777 + -1.13427 2.12922 0.259715 -0.902301 -0.177056 -0.39307 + -0.810344 1.97817 0.320542 0.252569 -0.775443 -0.578703 + -0.833391 1.94058 0.379053 0.383086 -0.588722 -0.711794 + -0.981624 2.07298 0.222127 -0.165579 -0.749026 -0.641516 + -1.03601 2.02571 0.284205 -0.172602 -0.721006 -0.671088 + -1.05697 1.97337 0.346654 -0.456815 -0.712095 -0.533142 + -0.670717 1.96894 0.458339 0.5406 -0.452775 -0.709046 + -0.667906 1.89635 0.48865 0.486931 -0.350594 -0.799989 + -0.815929 1.8798 0.41873 0.196764 -0.638051 -0.744429 + -0.836881 1.82746 0.481179 0.137446 -0.657438 -0.740867 + -0.538643 2.04431 0.522979 0.487738 -0.177435 -0.854768 + -0.535832 1.97165 0.553241 0.337731 -0.287496 -0.896261 + -0.544717 1.8913 0.575002 0.281666 -0.394091 -0.874846 + -0.650445 1.83549 0.528277 0.448517 -0.508229 -0.735211 + -0.427416 2.11128 0.562994 -0.244922 -0.165181 -0.955368 + -0.433959 2.01996 0.558956 0.0292519 -0.0334085 -0.999014 + -0.456382 1.94003 0.566206 -0.125882 -0.107125 -0.986244 + -0.465268 1.85968 0.587968 -0.578016 -0.164181 -0.799339 + -0.570279 1.82633 0.611336 0.204365 -0.59909 -0.774161 + -0.436841 2.19521 0.541212 -0.404992 -0.582201 -0.704999 + -0.353586 1.97298 0.525926 -0.695918 -0.130636 -0.706139 + -0.378271 1.89349 0.544613 -0.439686 -0.00325801 -0.898145 + -0.400694 1.81364 0.551913 -0.2421 0.06829 -0.967845 + -0.446909 1.74023 0.544275 -0.46875 0.0966612 -0.878026 + -0.363011 2.05692 0.504144 -0.819735 -0.279144 -0.500113 + -0.301749 1.91849 0.465723 -0.963012 -0.158057 -0.218232 + -0.308399 1.84823 0.493806 -0.830271 -0.0286213 -0.556625 + -0.333084 1.76874 0.512494 -0.586746 -0.028627 -0.809265 + -0.348014 1.70073 0.530483 -0.396609 0.0165682 -0.917838 + -0.378708 2.13667 0.481814 -0.726258 -0.499145 -0.472655 + -0.317446 1.99815 0.443342 -0.914962 -0.251027 -0.31596 + -0.290161 1.78861 0.420064 -0.877068 -0.0629937 -0.476218 + -0.296811 1.71836 0.448148 -0.944697 -0.204777 -0.256153 + -0.280895 1.6451 0.472234 -0.74401 -0.151147 -0.650848 + -0.331639 2.07409 0.420611 -0.910034 -0.398997 -0.112426 + -0.26363 1.85203 0.385818 -0.792137 -0.143332 -0.593275 + -0.206389 1.80208 0.32754 -0.640929 -0.246385 -0.726983 + -0.23292 1.73866 0.361786 -0.617796 -0.251387 -0.745072 + -0.235821 1.6716 0.395736 -0.601231 -0.361446 -0.712655 + -0.277823 1.92789 0.363036 -0.862772 -0.299925 -0.407025 + -0.21079 1.87381 0.301308 -0.693584 -0.301411 -0.654288 + -0.14511 1.84072 0.259615 -0.45794 -0.377817 -0.804702 + -0.135439 1.77259 0.295815 -0.40197 -0.420262 -0.813511 + -0.13834 1.70553 0.329765 -0.409917 -0.406786 -0.816391 + -0.297938 2.00159 0.348771 -0.796957 -0.359634 -0.485306 + -0.230905 1.94743 0.286993 -0.694517 -0.305071 -0.651597 + -0.149511 1.91236 0.233334 -0.432045 -0.321497 -0.842601 + -0.084582 1.92307 0.212986 0.0414754 -0.299385 -0.953231 + -0.081362 1.84769 0.230549 -0.0483851 -0.284384 -0.957489 + -0.241038 2.02176 0.264251 -0.650004 -0.31712 -0.690601 + -0.1517 1.98683 0.207735 -0.424964 -0.322893 -0.845663 + -0.086772 1.99754 0.187387 0.124605 -0.352569 -0.927453 + -0.028371 1.90395 0.240101 0.206269 -0.20136 -0.957553 + -0.025151 1.82848 0.257614 0.208168 -0.0754405 -0.975179 + -0.161833 2.06108 0.184943 -0.470986 -0.361832 -0.804518 + -0.086495 2.06566 0.157802 0.0707083 -0.471308 -0.87913 + -0.028371 1.98169 0.227848 0.262455 -0.257919 -0.929836 + 0.028384 1.98169 0.227848 -0.232164 -0.281559 -0.931034 + 0.028384 1.90395 0.240102 -0.196088 -0.186512 -0.962685 + -0.078873 2.13192 0.117042 0.0419019 -0.640991 -0.766404 + -0.028094 2.04981 0.198263 0.223948 -0.456923 -0.860853 + 0.028086 2.04981 0.198263 -0.223684 -0.456645 -0.86107 + 0.086785 1.99754 0.187387 -0.133314 -0.365728 -0.921125 + 0.084595 1.92307 0.212986 -0.080155 -0.2709 -0.959264 + -0.028094 2.11031 0.157878 0.182796 -0.60551 -0.77456 + 0.028086 2.11031 0.157878 -0.180857 -0.606177 -0.774494 + 0.086487 2.06566 0.157802 -0.0716737 -0.470248 -0.879619 + 0.151697 1.98684 0.207726 0.42598 -0.325174 -0.844276 + 0.025953 2.16442 0.105158 -0.119504 -0.723437 -0.679969 + 0.078865 2.13201 0.117092 -0.0420762 -0.641547 -0.765929 + 0.154209 2.12742 0.144226 0.421737 -0.506752 -0.751891 + 0.16183 2.06108 0.184937 0.445027 -0.38063 -0.8106 + 0.025953 2.21513 0.044117 -0.1192 -0.857985 -0.499653 + 0.076732 2.18603 0.064323 -0.016313 -0.804925 -0.593153 + 0.154605 2.18535 0.100294 0.309959 -0.754485 -0.578513 + 0.259627 2.10262 0.248796 0.637108 -0.363523 -0.679665 + 0.241035 2.02176 0.264245 0.652543 -0.322855 -0.685531 + 0.081398 2.22044 -0.002884 -0.0330055 -0.918829 -0.393273 + 0.15927 2.21967 0.033045 0.303564 -0.865301 -0.398877 + 0.260023 2.16046 0.204816 0.556213 -0.540992 -0.630836 + 0.341669 2.14994 0.304624 0.739955 -0.480742 -0.470482 + 0.156899 2.24578 -0.033764 0.108098 -0.977051 -0.183538 + 0.255581 2.21549 0.158688 0.548452 -0.659496 -0.514068 + 0.35622 2.23418 0.219711 0.302315 -0.925348 -0.228772 + 0.360662 2.17915 0.265841 0.672493 -0.639137 -0.373172 + 0.25321 2.24159 0.091878 0.183784 -0.952974 -0.240965 + 0.351766 2.22323 0.157082 -0.226873 -0.972716 0.0485016 + 0.458563 2.21157 0.222077 -0.0542141 -0.822172 0.566652 + 0.436639 2.29199 0.27059 0.256662 -0.960627 0.106399 + 0.417646 2.26287 0.309422 0.549386 -0.735699 -0.396135 + 0.345719 2.23594 0.079281 -0.218538 -0.965642 -0.140629 + 0.454109 2.20062 0.159444 -0.222399 -0.951529 0.212441 + 0.543356 2.21135 0.213069 -0.063121 -0.718424 0.692736 + 0.521432 2.29176 0.261583 -0.19864 -0.913644 0.354677 + 0.346555 2.25176 0.008467 -0.188592 -0.932179 -0.308991 + 0.452082 2.18241 0.091785 -0.317062 -0.948202 0.0195966 + 0.554508 2.1632 0.10366 -0.0359045 -0.999279 0.0123136 + 0.556535 2.1815 0.171369 -0.161488 -0.896338 0.412916 + 0.67046 2.19247 0.209166 -0.334003 -0.919569 0.206967 + 0.243867 2.27531 -0.046122 0.364803 -0.565114 -0.739976 + 0.350908 2.27944 -0.059467 -0.134923 -0.868025 -0.477838 + 0.452918 2.19833 0.021021 -0.277137 -0.898218 -0.341173 + 0.096883 2.29063 -0.229258 0.489284 -0.71954 -0.492812 + 0.24822 2.30299 -0.114056 0.209344 -0.868014 -0.450252 + 0.35169 2.32451 -0.12374 0.00205613 -0.713908 -0.700236 + 0.450824 2.24422 -0.055273 -0.205456 -0.820718 -0.533113 + 0.451606 2.2893 -0.119546 -0.37794 -0.779885 -0.498939 + 0.542863 2.2168 -0.038182 -0.292597 -0.904761 -0.309508 + 0.544957 2.17091 0.038111 0.019762 -0.948674 -0.315637 + 0.649184 2.18275 0.132395 0.124707 -0.893937 -0.430494 + 0.683639 2.16253 0.167417 0.179414 -0.94545 0.27191 + 0.445414 2.33028 -0.186529 -0.496531 -0.687819 -0.529491 + 0.519611 2.28058 -0.179647 -0.673012 -0.687869 -0.271828 + 0.525802 2.23951 -0.112714 -0.4558 -0.834679 -0.309124 + 0.617838 2.17332 -0.016465 -0.310813 -0.943415 0.115597 + 0.639633 2.19037 0.066806 0.047314 -0.997631 -0.0499374 + 0.442834 2.38537 -0.239753 -0.604136 -0.603835 -0.520003 + 0.4982 2.32577 -0.24471 -0.727964 -0.601011 -0.32993 + 0.559073 2.21804 -0.162728 -0.814487 -0.558261 0.157976 + 0.600777 2.19603 -0.090996 -0.527749 -0.8494 -0.000225221 + 0.673023 2.1625 -0.086333 0.0349253 -0.990374 0.133937 + 0.426266 2.44644 -0.292521 -0.647424 -0.580264 -0.4941 + 0.481631 2.38683 -0.29747 -0.780826 -0.534269 -0.323833 + 0.537662 2.26323 -0.227793 -0.876742 -0.479452 -0.0380599 + 0.590327 2.17315 -0.220969 -0.681039 -0.714986 0.158051 + 0.632032 2.15113 -0.149236 -0.309219 -0.932848 0.184872 + 0.415489 2.50481 -0.344625 -0.692527 -0.560435 -0.454223 + 0.46255 2.44419 -0.355431 -0.810433 -0.503731 -0.299087 + 0.516811 2.31852 -0.290163 -0.919632 -0.389169 -0.0531396 + 0.536521 2.25412 -0.344224 -0.960938 -0.27025 0.0596881 + 0.557372 2.19883 -0.281854 -0.898655 -0.402766 0.173778 + 0.399688 2.56693 -0.395823 -0.670596 -0.542369 -0.5061 + 0.446749 2.50631 -0.40663 -0.856737 -0.433576 -0.279309 + 0.49773 2.37589 -0.348125 -0.917936 -0.391819 -0.0622153 + 0.333062 2.67159 -0.4291 -0.139327 -0.605185 -0.783798 + 0.392709 2.62786 -0.447361 -0.691659 -0.487732 -0.532659 + 0.438169 2.56162 -0.466418 -0.861458 -0.375875 -0.341481 + 0.475049 2.42664 -0.411635 -0.950012 -0.312144 -0.0066024 + 0.328673 2.73479 -0.471964 -0.178235 -0.691386 -0.700156 + 0.393967 2.68945 -0.500823 -0.723978 -0.527399 -0.444641 + 0.439427 2.62312 -0.519938 -0.882883 -0.35938 -0.302263 + 0.466469 2.48194 -0.471415 -0.952664 -0.260561 -0.156651 + 0.49643 2.3586 -0.468174 -0.964303 -0.26474 0.00566451 + 0.26365 3.18553 -1.08067 -0.535437 -0.631319 -0.56102 + 0.318613 3.01098 -0.907536 -0.690458 -0.621868 -0.369523 + 0.383908 2.96572 -0.936345 -0.752941 -0.57307 -0.323527 + 0.423656 2.83709 -0.832142 -0.899409 -0.382795 -0.211024 + 0.468237 2.52849 -0.541048 -0.96266 -0.227596 -0.146579 + 0.211286 2.9128 -0.796693 0.73924 -0.513497 -0.435713 + 0.214432 3.22701 -1.07952 0.11691 -0.655131 -0.746415 + 0.170029 3.8391 -1.98009 -0.624127 -0.64204 -0.445253 + 0.260896 3.7114 -1.9673 -0.741447 -0.559738 -0.370066 + 0.315859 3.53684 -1.79416 -0.788261 -0.526422 -0.318629 + 0.063904 3.39356 -1.63558 0.881494 -0.32128 -0.346047 + -0.011004 2.20909 -0.926224 0 -0.159648 -0.987174 + 0.120811 3.88058 -1.97892 -0.387844 -0.755631 -0.527825 + 0.084072 4.11489 -2.27757 -0.161473 -0.305658 -0.938349 + 0.144953 4.07833 -2.28164 -0.302697 -0.298767 -0.905049 + 0.226921 3.78392 -1.9845 -0.651826 -0.488595 -0.579998 + 0.156182 4.10829 -2.27694 0.172708 0.322697 -0.930612 + 0.228575 4.03035 -2.28994 0.194202 0.166993 -0.966643 + 0.201845 4.02314 -2.28606 -0.43519 -0.372215 -0.819796 + 0.253826 3.95131 -2.28264 -0.471122 -0.386856 -0.792708 + 0.096818 4.17112 -2.26096 0.223833 0.571077 -0.789791 + 0.165782 4.13128 -2.26075 0.419336 0.561333 -0.713486 + 0.238175 4.05342 -2.2737 0.537699 0.500127 -0.678787 + 0.280556 3.95861 -2.28647 0.250303 0.033792 -0.967578 + 0.094074 4.19741 -2.23569 0.266597 0.738094 -0.619793 + 0.163038 4.15765 -2.23543 0.498966 0.664795 -0.55595 + 0.231694 4.09268 -2.23609 0.630681 0.60432 -0.486866 + 0.289297 4.02531 -2.231 0.713252 0.542923 -0.443289 + 0.295778 3.98606 -2.26862 0.639188 0.38878 -0.663542 + 0.090118 4.23945 -2.17751 0.274533 0.810976 -0.516672 + 0.155107 4.20838 -2.17409 0.522863 0.726506 -0.445873 + 0.223763 4.1434 -2.17474 0.622931 0.639694 -0.450276 + 0.282864 4.08583 -2.16703 0.702945 0.566731 -0.429749 + 0.342257 3.96762 -2.21109 0.771023 0.445835 -0.454702 + 0.077413 4.2961 -2.08803 0.270437 0.838046 -0.47386 + 0.142402 4.26511 -2.08456 0.440203 0.76892 -0.463664 + 0.21748 4.22262 -2.07876 0.550759 0.681972 -0.481225 + 0.276581 4.16497 -2.0711 0.73689 0.562623 -0.374763 + 0.335824 4.02814 -2.14711 0.780547 0.516235 -0.352488 + 0.077217 4.33595 -2.01465 0.243611 0.866787 -0.435125 + 0.140414 4.31927 -1.99955 0.393913 0.810496 -0.433508 + 0.215492 4.27678 -1.99376 0.544849 0.723776 -0.423425 + 0.261316 4.23416 -1.99374 0.730379 0.592927 -0.339092 + 0.323258 4.09292 -2.06472 0.818049 0.503243 -0.278464 + 0.086582 4.35657 -1.96057 0.255164 0.850071 -0.460729 + 0.149779 4.33989 -1.94548 0.387382 0.798444 -0.460892 + 0.205029 4.34236 -1.89375 0.547656 0.716354 -0.432332 + 0.250854 4.29974 -1.89373 0.693542 0.665126 -0.276779 + 0.307993 4.16202 -1.9874 0.790539 0.519727 -0.323931 + 0.090761 4.42195 -1.861 0.2451 0.789811 -0.56225 + 0.136076 4.4086 -1.85449 0.374044 0.758101 -0.534203 + 0.191327 4.41115 -1.80271 0.408515 0.694799 -0.591921 + 0.269232 4.28621 -1.8763 0.72102 0.584076 -0.372806 + 0.031855 4.51372 -1.75675 0.0975426 0.796003 -0.597381 + 0.090371 4.55762 -1.67839 0.24802 0.783585 -0.569632 + 0.135687 4.54427 -1.67187 0.238956 0.72497 -0.646002 + 0.159375 4.57666 -1.63058 -0.0272755 0.539777 -0.841366 + 0.215015 4.44355 -1.76142 0.410891 0.620843 -0.667625 + 0.019581 4.57673 -1.67429 0.0822428 0.808915 -0.582145 + 0.078097 4.62054 -1.59598 -0.084314 0.606392 -0.790683 + 0.088187 4.69572 -1.55799 -0.0242987 0.349665 -0.93656 + 0.144635 4.68969 -1.56734 -0.284522 0.404217 -0.869285 + 0.209426 4.5831 -1.66813 0.00589629 0.524071 -0.851654 + -0.019583 4.57673 -1.67429 -0.0824503 0.808871 -0.582176 + 0.019581 4.62602 -1.60127 0.0626536 0.656613 -0.751621 + 0.02967 4.70111 -1.56333 0.0582603 0.322479 -0.944782 + 0.09063 4.812 -1.5348 -0.0225725 0.227466 -0.973524 + 0.147078 4.80597 -1.54415 -0.0877212 0.2508 -0.964056 + -0.019583 4.62602 -1.60127 -0.0626653 0.656621 -0.751613 + -0.029672 4.70111 -1.56333 -0.0602841 0.324572 -0.943938 + 0.02967 4.82222 -1.5379 0.0436184 0.230337 -0.972133 + 0.031893 4.92248 -1.51155 0.0302154 0.302891 -0.952546 + 0.092852 4.91217 -1.5085 0.0337277 0.271666 -0.9618 + -0.029672 4.82222 -1.5379 -0.0449098 0.228458 -0.972517 + -0.031893 4.92248 -1.51155 -0.0509479 0.321189 -0.945643 + 0.031893 5.00159 -1.47878 -0.0240052 0.367767 -0.929608 + 0.098094 4.99545 -1.48494 -0.0148726 0.330447 -0.943707 + -0.092852 4.91218 -1.50851 -0.0203891 0.288639 -0.957221 + -0.031893 5.00159 -1.47878 0.0112348 0.353127 -0.935508 + 0.058347 5.10813 -1.43912 -0.0236694 0.362587 -0.931649 + 0.124549 5.10199 -1.44528 -0.0222974 0.367918 -0.929591 + 0.180374 4.98905 -1.48744 -0.0034224 0.321428 -0.946928 + -0.175129 4.90577 -1.51101 0.0222455 0.304884 -0.95213 + -0.098094 4.99545 -1.48495 0.0330762 0.314555 -0.948663 + -0.124545 5.10199 -1.44528 0.0183492 0.360004 -0.93277 + -0.058344 5.10813 -1.43912 0.028584 0.358655 -0.933033 + -0.314178 4.96879 -1.49417 -0.121927 0.239438 -0.963226 + -0.180371 4.98905 -1.48744 -0.000528955 0.316294 -0.948661 + -0.245024 5.10121 -1.44312 -0.0136319 0.356406 -0.934232 + -0.212368 5.21916 -1.39982 -0.00446196 0.457778 -0.889055 + -0.058344 5.22547 -1.39355 0.0103232 0.465922 -0.884765 + -0.39931 4.92231 -1.48206 -0.256635 0.0693434 -0.964018 + -0.378831 5.08096 -1.44984 -0.101233 0.314973 -0.943686 + -0.332847 5.21829 -1.39771 -0.0324007 0.446595 -0.89415 + -0.229843 5.34087 -1.31843 -0.00111754 0.603123 -0.797648 + -0.47304 4.8423 -1.45428 -0.331432 -0.132738 -0.934095 + -0.575158 4.91974 -1.42141 -0.337859 -0.0384835 -0.94041 + -0.501428 4.99984 -1.44914 -0.271212 0.121322 -0.954843 + -0.506441 5.13501 -1.41247 -0.174721 0.307506 -0.935368 + -0.457463 5.29863 -1.35106 -0.0300837 0.480176 -0.876656 + -0.417519 4.7888 -1.46101 -0.347509 -0.161835 -0.923605 + -0.497081 4.70961 -1.41125 -0.43423 -0.196027 -0.879214 + -0.552602 4.7632 -1.40447 -0.392368 -0.270892 -0.879014 + -0.62043 4.83545 -1.39461 -0.398448 -0.216285 -0.891325 + -0.384069 4.72168 -1.46716 -0.402101 -0.0752056 -0.912501 + -0.44761 4.64259 -1.43078 -0.484941 -0.112088 -0.867334 + -0.567514 4.62001 -1.34906 -0.599506 -0.251952 -0.759679 + -0.61531 4.69129 -1.34531 -0.528167 -0.361802 -0.768205 + -0.683138 4.76353 -1.33545 -0.574009 -0.391888 -0.718984 + -0.391732 4.57063 -1.45213 -0.585631 0.101293 -0.804224 + -0.518043 4.55291 -1.36864 -0.607452 -0.0769277 -0.790623 + -0.569416 4.48354 -1.31309 -0.835857 -0.167358 -0.522814 + -0.605012 4.56017 -1.27502 -0.846825 -0.297333 -0.440999 + -0.652807 4.63153 -1.27122 -0.760136 -0.493465 -0.422712 + -0.477052 4.4763 -1.41354 -0.683593 0.171459 -0.709438 + -0.528424 4.40693 -1.35799 -0.848818 0.0960515 -0.519887 + -0.583852 4.43159 -1.2419 -0.918135 -0.134537 -0.372731 + -0.619448 4.5083 -1.20378 -0.914321 -0.206562 -0.34835 + -0.650159 4.59414 -1.17185 -0.846763 -0.404485 -0.345519 + -0.500752 4.26279 -1.46613 -0.903235 0.254771 -0.345339 + -0.562038 4.35849 -1.3121 -0.922541 0.102806 -0.371952 + -0.627602 4.1418 -1.07658 -0.974118 0.051195 -0.220165 + -0.649416 4.21499 -1.00634 -0.975156 -0.0115375 -0.221218 + -0.654169 4.28647 -0.963151 -0.968055 -0.0879768 -0.234795 + -0.534365 4.21435 -1.42024 -0.937499 0.100705 -0.333097 + -0.6201 4.04521 -1.17587 -0.963158 0.0446895 -0.265197 + -0.768658 3.74322 -0.619611 -0.943966 0.320068 -0.080525 + -0.737398 3.80817 -0.584916 -0.963018 0.236611 -0.128882 + -0.74215 3.87974 -0.541678 -0.966102 0.153859 -0.207302 + -0.484063 4.0017 -1.55352 -0.999533 0.013755 -0.0272776 + -0.569798 3.83247 -1.3092 -0.950406 0.195093 -0.242211 + -0.761156 3.64662 -0.718893 -0.919456 0.351286 -0.176633 + -0.91 3.44794 -0.45138 -0.552901 0.70962 -0.436738 + -0.859614 3.51785 -0.392463 -0.607293 0.649221 -0.457938 + -0.509841 3.86933 -1.64343 -0.912811 0.33702 0.230639 + -0.599227 3.72037 -1.38404 -0.858173 0.510049 -0.0582163 + -0.806855 3.56984 -0.807711 -0.847204 0.510248 -0.147961 + -0.955699 3.37117 -0.540198 -0.592616 0.760361 -0.265814 + -0.588362 3.78145 -1.68063 -0.746333 0.566857 0.348799 + -0.677748 3.63249 -1.42123 -0.699057 0.710278 0.0826107 + -0.836284 3.45774 -0.882547 -0.787825 0.599044 -0.143101 + -1.00753 3.3111 -0.661758 -0.561087 0.818899 -0.120772 + -1.043 3.33197 -0.549702 0.127586 0.78626 -0.60458 + -0.657794 3.71536 -1.71276 -0.663381 0.641159 0.385798 + -0.7262 3.6026 -1.49185 -0.613381 0.77274 0.163206 + -0.858807 3.44275 -0.997782 -0.63744 0.768601 0.0540593 + -1.03005 3.29611 -0.776992 -0.502932 0.863789 0.0304564 + -0.732849 3.66746 -1.731 -0.575377 0.718392 0.390965 + -0.801256 3.55478 -1.51003 -0.515467 0.841093 0.163879 + -0.907259 3.41294 -1.06835 -0.420587 0.882242 0.211555 + -1.03338 3.30779 -0.868825 -0.457397 0.866819 0.198527 + -1.16827 3.23591 -0.834932 -0.032081 0.992397 -0.118825 + -0.833848 3.59399 -1.75135 -0.565725 0.732274 0.379118 + -0.863759 3.53291 -1.58534 -0.523009 0.83752 0.158182 + -0.925856 3.45071 -1.17737 -0.216647 0.945458 0.243255 + -1.05197 3.34555 -0.977836 -0.391998 0.868885 0.302286 + -1.1716 3.24768 -0.926706 -0.409463 0.893203 0.185815 + -0.969964 3.5092 -1.77767 -0.46573 0.78007 0.417836 + -0.999875 3.44811 -1.61167 -0.459858 0.87967 0.121289 + -0.98836 3.42883 -1.25267 -0.4556 0.882473 0.116919 + -1.09283 3.34785 -1.08122 -0.505851 0.842624 0.18466 + -1.21245 3.24989 -1.03014 -0.282424 0.945185 0.163895 + -1.11874 3.44462 -1.78761 -0.278944 0.832069 0.479428 + -1.09957 3.413 -1.67885 -0.315615 0.93014 0.187688 + -1.01918 3.43216 -1.38745 -0.295156 0.951244 0.0895472 + -1.12364 3.35118 -1.21599 -0.5044 0.851531 0.143092 + -1.23216 3.2789 -1.20999 -0.304035 0.93962 0.157086 + -1.30519 3.45113 -1.84669 -0.181255 0.884041 0.430835 + -1.27622 3.41134 -1.79357 -0.162275 0.853107 0.495859 + -1.25705 3.37972 -1.68482 -0.218171 0.956111 0.195583 + -1.11887 3.39705 -1.45464 -0.412461 0.904531 0.108162 + -1.13075 3.36642 -1.32257 -0.526437 0.837185 0.148276 + -1.29995 3.46466 -1.90454 -0.265125 0.959469 -0.0955401 + -1.46391 3.41461 -1.81744 -0.0341149 0.923737 0.381506 + -1.43494 3.37481 -1.76431 -0.0350859 0.889098 0.456369 + -1.35307 3.35536 -1.67502 -0.1563 0.96949 0.188839 + -1.14214 3.39251 -1.50476 -0.284377 0.946908 0.149986 + -1.36382 3.44217 -1.92598 -0.179917 0.982134 -0.0551585 + -1.48277 3.42564 -1.88494 -0.0776707 0.993122 0.0876163 + -1.59004 3.40451 -1.78076 0.119371 0.935239 0.333285 + -1.55599 3.35431 -1.7118 0.113256 0.920255 0.374572 + -1.47412 3.33477 -1.62255 -0.0691088 0.97927 0.190408 + -1.47691 3.4259 -1.974 -0.318429 0.873374 -0.368538 + -1.6089 3.41555 -1.84827 -0.211726 0.960048 -0.182973 + -1.69671 3.41036 -1.72967 0.207314 0.955132 0.211528 + -1.66266 3.36006 -1.66077 0.314831 0.922706 0.222475 + -1.54073 3.32302 -1.56781 0.133456 0.990554 -0.0314893 + -1.49571 3.38455 -2.00338 -0.405016 0.220916 -0.887219 + -1.64401 3.36864 -1.89082 -0.437396 0.700827 -0.563494 + -1.76033 3.36363 -1.82314 -0.364025 0.684239 -0.631905 + -1.72522 3.41054 -1.78059 -0.167285 0.931208 -0.323833 + -1.79723 3.42649 -1.65382 0.258902 0.962067 0.0860093 + -1.66281 3.32729 -1.92019 -0.440612 0.485897 -0.754828 + -1.79251 3.29908 -1.86053 -0.454315 0.47498 -0.753652 + -1.83363 3.39129 -1.76046 -0.398294 0.735366 -0.548269 + -1.82574 3.42676 -1.70469 -0.214448 0.93276 -0.289776 + -1.86581 3.32674 -1.79784 -0.554988 0.533983 -0.637849 + -1.94243 3.33731 -1.68535 -0.700685 0.562802 -0.438514 + -1.92308 3.40147 -1.61709 -0.656105 0.661208 -0.363773 + -1.9152 3.43695 -1.56133 -0.422771 0.883772 -0.200529 + -1.88163 3.43962 -1.53096 0.195688 0.978016 0.0720413 + -1.98168 3.22658 -1.72917 -0.709701 0.412668 -0.57099 + -2.03403 3.22111 -1.67248 -0.706009 0.479468 -0.521212 + -2.04657 3.34112 -1.43756 -0.651581 0.64886 -0.392967 + -2.02722 3.40521 -1.36935 -0.544128 0.69565 -0.469036 + -1.98072 3.43541 -1.38007 -0.294537 0.906434 -0.302696 + -2.14444 3.08049 -1.62792 -0.776127 0.289602 -0.560141 + -2.12598 3.21637 -1.55647 -0.669219 0.556196 -0.492739 + -2.13852 3.33638 -1.32155 -0.395261 0.725467 -0.563442 + -2.08324 3.49396 -1.20809 -0.390149 0.567836 -0.724808 + -2.17485 2.85109 -1.6634 -0.79539 0.200263 -0.572057 + -2.31866 3.01833 -1.37227 -0.833806 0.237462 -0.498376 + -2.27807 3.12168 -1.39247 -0.815392 0.298196 -0.4962 + -2.25962 3.25755 -1.32101 -0.789205 0.330252 -0.517772 + -2.25356 3.33286 -1.28524 -0.579242 0.519918 -0.627825 + -2.24194 2.72805 -1.6143 -0.782503 0.209447 -0.586362 + -2.38575 2.89521 -1.32322 -0.8413 0.23941 -0.484662 + -2.38694 3.07967 -1.2155 -0.899898 0.422306 0.108813 + -2.34636 3.18301 -1.2357 -0.933782 0.248663 -0.25733 + -2.33018 3.2656 -1.21775 -0.914582 0.240842 -0.32486 + -2.16603 2.59459 -1.75254 -0.709151 0.137168 -0.691585 + -2.3903 2.63865 -1.45183 -0.801119 0.225301 -0.554479 + -2.43603 2.83347 -1.26568 -0.824146 0.297454 -0.481979 + -2.46885 2.93672 -1.12491 -0.621371 0.73428 0.273368 + -2.41857 2.99846 -1.18245 -0.859254 0.509805 -0.0422177 + -2.31438 2.50519 -1.59007 -0.763846 0.0744398 -0.641092 + -2.49329 2.5927 -1.31286 -0.825116 0.215545 -0.522229 + -2.53903 2.78753 -1.1267 -0.849247 0.332748 -0.40995 + -2.28302 2.33097 -1.61352 -0.694635 -0.170568 -0.698848 + -2.39136 2.43913 -1.50445 -0.790298 0.0546029 -0.610284 + -2.49452 2.4665 -1.34626 -0.838856 0.0752713 -0.539124 + -2.64128 2.60297 -1.06884 -0.869722 0.227182 -0.438146 + -2.58184 2.76009 -1.05317 -0.831745 0.384051 -0.400879 + -2.40166 2.32341 -1.48662 -0.790425 -0.196533 -0.580176 + -2.50482 2.35078 -1.32843 -0.857148 -0.168307 -0.486795 + -2.64251 2.47677 -1.10226 -0.897715 -0.0294658 -0.439589 + -2.74077 2.4962 -0.832505 -0.979981 0.0277292 -0.197152 + -2.6903 2.62741 -0.943175 -0.924 0.242128 -0.29597 + -2.37144 2.26879 -1.49442 -0.664562 -0.534611 -0.522061 + -2.48835 2.28339 -1.31431 -0.764429 -0.523551 -0.376221 + -2.62715 2.384 -1.08077 -0.882861 -0.275063 -0.380653 + -2.7039 2.38727 -0.910439 -0.880312 -0.385573 -0.276377 + -2.71926 2.48005 -0.931931 -0.882633 0.335294 -0.32945 + -2.34168 2.2341 -1.47373 -0.3536 -0.899385 -0.257049 + -2.45859 2.24861 -1.29367 -0.380601 -0.919034 -0.102559 + -2.58583 2.29395 -1.05661 -0.39012 -0.920493 -0.0223533 + -2.61069 2.3166 -1.06664 -0.789673 -0.549192 -0.273503 + -2.68906 2.3493 -0.878472 -0.772178 -0.619099 -0.143034 + -2.31731 2.23023 -1.45523 0.206065 -0.963579 0.170449 + -2.43314 2.249 -1.27375 0.222823 -0.937244 0.268184 + -2.56038 2.29426 -1.03674 0.234198 -0.930731 0.280876 + -2.62978 2.32533 -0.864149 0.254835 -0.934433 0.248787 + -2.66421 2.32665 -0.868442 -0.39123 -0.919039 0.0480244 + -2.28861 2.25875 -1.43763 0.594899 -0.647939 0.475679 + -2.40444 2.27752 -1.25615 0.675387 -0.554943 0.485686 + -2.52836 2.321 -1.03146 0.717266 -0.534882 0.446576 + -2.59777 2.35215 -0.858812 0.772203 -0.567406 0.285925 + -2.38166 2.37619 -1.23645 0.780595 -0.270465 0.563489 + -2.50558 2.41975 -1.0117 0.85921 -0.219896 0.461956 + -2.57205 2.442 -0.857433 0.944664 -0.2284 0.235463 + -2.60291 2.36298 -0.752564 0.7427 -0.653014 0.14822 + -2.6482 2.34852 -0.75112 0.146052 -0.983998 0.102065 + -2.25441 2.49434 -1.34129 0.691931 -0.254839 0.675491 + -2.41966 2.65186 -1.08493 0.812118 -0.190609 0.551482 + -2.44962 2.72882 -0.999425 0.903561 -0.118441 0.411763 + -2.53554 2.49671 -0.9262 0.904866 -0.172492 0.389185 + -2.0451 2.73408 -1.42993 0.523529 -0.337583 0.782276 + -2.29241 2.76992 -1.18981 0.705283 -0.207141 0.677988 + -2.43195 2.81345 -1.02221 0.731419 0.224719 0.643838 + -2.50149 2.68375 -0.894552 0.912299 -0.144821 0.383062 + -2.538 2.62912 -0.825736 0.870357 -0.0740285 0.486825 + -2.11149 2.90972 -1.33014 0.529617 -0.258764 0.807804 + -2.14282 3.05528 -1.26346 0.49627 -0.218821 0.840139 + -2.32373 2.91548 -1.12313 0.587956 0.0175165 0.808703 + -1.92019 3.02836 -1.35684 0.0963612 -0.429583 0.897872 + -1.99462 3.17363 -1.27045 0.107677 -0.521472 0.846447 + -2.09605 3.15024 -1.26755 0.263202 -0.305561 0.915072 + -2.2651 3.05915 -1.17558 0.53726 -0.0839273 0.83923 + -1.76545 3.0591 -1.32967 -0.245598 -0.431619 0.867978 + -1.83988 3.20445 -1.24323 -0.220652 -0.682028 0.697245 + -2.03489 3.3184 -1.1424 0.0322312 -0.624419 0.780424 + -2.13633 3.2951 -1.13945 0.266788 -0.551032 0.790688 + -2.21834 3.15412 -1.17966 0.500302 -0.335962 0.798015 + -1.49485 2.94623 -1.23198 -0.444425 -0.532135 0.720637 + -1.6046 3.09642 -1.22012 -0.511415 -0.617923 0.597181 + -1.69808 3.18616 -1.16996 -0.45118 -0.748657 0.485746 + -1.91688 3.30486 -1.13415 -0.2609 -0.720263 0.642769 + -1.33436 3.02223 -1.09923 -0.30023 -0.772109 0.560098 + -1.45654 3.06137 -1.05041 -0.388008 -0.800663 0.456496 + -1.55002 3.15102 -1.0003 -0.547426 -0.777128 0.310478 + -1.59496 3.20381 -0.955135 -0.634939 -0.727498 0.259998 + -1.77508 3.28657 -1.06087 -0.486594 -0.717848 0.497916 + -1.14172 2.95056 -1.01449 -0.600859 -0.406927 0.688026 + -1.18623 3.02234 -0.981609 -0.408484 -0.830733 0.378184 + -1.30841 3.06147 -0.932784 -0.210476 -0.97115 0.112102 + -1.43413 3.09074 -0.915481 -0.503019 -0.851738 -0.146679 + -1.05152 2.81816 -0.962764 -0.612905 -0.173159 0.77095 + -1.02259 2.92278 -0.922776 -0.601848 -0.392151 0.695699 + -1.06711 2.99456 -0.889893 -0.490929 -0.751292 0.441077 + -1.0743 2.71117 -1.00885 -0.612019 -0.152118 0.776075 + -0.95884 2.696 -0.930375 -0.480876 -0.224871 0.847461 + -0.946305 2.78767 -0.892355 -0.521581 -0.255388 0.814082 + -0.917374 2.89238 -0.852317 -0.647176 -0.384337 0.658368 + -0.953604 2.96515 -0.807556 -0.554282 -0.75766 0.344562 + -0.987146 2.59906 -0.965861 -0.475489 -0.204962 0.855512 + -0.825757 2.68506 -0.875432 -0.369797 -0.28638 0.883876 + -0.813222 2.77682 -0.837363 -0.574381 -0.474245 0.667217 + -0.842561 2.85913 -0.788723 -0.721909 -0.524633 0.451228 + -0.87879 2.93189 -0.743953 -0.691349 -0.722272 0.0189484 + -1.01349 2.5095 -1.00474 -0.475416 -0.298697 0.827502 + -0.849018 2.5959 -0.908795 -0.345662 -0.263008 0.900747 + -0.77694 2.49672 -0.913018 -0.301612 -0.29547 0.906492 + -0.753679 2.58589 -0.879656 -0.486869 -0.271014 0.830367 + -0.732766 2.65292 -0.837963 -0.772046 -0.394459 0.498345 + -0.875364 2.50634 -0.947682 -0.352174 -0.279786 0.893137 + -0.809399 2.42101 -0.952472 -0.269808 -0.318405 0.908747 + -0.776282 2.32164 -0.982164 -0.598309 -0.179432 0.780917 + -0.744195 2.39376 -0.936474 -0.731219 -0.145468 0.666452 + -0.723282 2.4607 -0.894831 -0.7267 -0.123874 0.675694 + -0.845402 2.33448 -0.9884 -0.194417 -0.344254 0.918527 + -0.808741 2.24592 -1.02162 -0.541358 -0.225661 0.809943 + -0.813146 2.15103 -1.02926 -0.914109 0.232175 0.332415 + -0.782328 2.22055 -0.986063 -0.932343 0.232615 0.276813 + -0.879442 2.25536 -1.02896 -0.267778 -0.395307 0.878651 + -0.84533 2.17518 -1.06869 -0.449074 -0.263539 0.853745 + -0.849735 2.0802 -1.07638 -0.883195 0.195516 0.426309 + -0.879369 2.09615 -1.1092 -0.434824 -0.200162 0.877988 + -0.882867 2.01003 -1.11103 -0.862044 0.212673 0.460055 + -0.853651 2.05842 -1.00985 -0.922479 0.384975 0.028763 + -0.914823 2.0173 -1.13822 -0.453696 -0.16657 0.875451 + -0.918321 1.93126 -1.14001 -0.853472 0.214328 0.475026 + -0.886784 1.98825 -1.04451 -0.9117 0.404844 0.0700266 + -0.930002 1.89001 -1.01636 -0.953447 0.300546 0.0247175 + -0.947915 1.85511 -1.16152 -0.872664 0.223746 0.434046 + -0.920811 1.92063 -1.0734 -0.922426 0.382505 0.0531098 + -0.942229 1.8297 -1.0013 -0.994587 0.102947 0.0140837 + -0.944804 1.71646 -0.927156 -0.999425 -0.0305201 -0.0147665 + -0.950406 1.84448 -1.0949 -0.955758 0.275624 0.102749 + -0.940618 1.79502 -1.02983 -0.987349 0.0696285 0.142455 + -0.973888 1.77006 -1.11299 -0.963183 0.21098 0.166631 + -0.9641 1.72068 -1.04788 -0.981482 -0.172416 0.0834631 + -0.901206 1.61571 -1.00085 -0.845823 -0.530761 -0.0536288 + -0.948906 1.69815 -1.06444 -0.78258 0.137988 0.607064 + -0.683858 2.53744 -0.846346 -0.858172 -0.164745 0.48621 + -0.762105 2.73523 -0.789314 -0.726278 -0.478221 0.493786 + -0.683088 2.60532 -0.795705 -0.77092 -0.263774 0.579747 + -0.761334 2.80318 -0.738623 -0.756367 -0.644287 0.113148 + -0.953552 2.97745 -0.695252 -0.356628 -0.71408 -0.602417 + -0.650091 2.67466 -0.739618 -0.919101 -0.389863 -0.0570955 + -0.836096 2.84874 -0.689923 -0.658549 -0.621486 -0.424344 + -1.04074 2.97995 -0.685998 0.0895136 -0.695155 -0.713265 + -1.02738 3.01237 -0.781739 -0.292768 -0.955866 -0.0246249 + -1.14089 3.04178 -0.864075 -0.270503 -0.946077 0.178231 + -0.739713 2.74565 -0.696773 -0.70068 -0.487566 -0.520891 + -0.925718 2.91973 -0.647078 -0.402639 -0.651497 -0.642987 + -1.11119 2.9363 -0.685384 0.323845 -0.433356 -0.841027 + -1.11457 3.01479 -0.772534 0.135978 -0.865108 -0.482802 + -0.779589 2.78279 -0.673504 -0.509753 -0.442289 -0.737924 + -0.996167 2.87607 -0.646464 0.0903809 -0.00983747 -0.995859 + -1.18849 2.88821 -0.697087 0.428702 -0.204449 -0.880009 + -1.23083 2.97775 -0.795581 0.363353 -0.589363 -0.721544 + -0.82651 2.74605 -0.683273 0.0443094 0.0475857 -0.997884 + -1.19572 3.04732 -0.839083 0.082926 -0.901285 -0.425216 + -1.36324 3.06702 -0.907792 -0.154665 -0.833665 -0.530172 + -1.38286 3.03392 -0.869869 -0.260885 -0.545611 -0.796397 + -1.47907 3.14352 -0.870306 -0.666419 -0.700017 -0.256636 + -1.31198 3.01028 -0.86213 0.148443 -0.670087 -0.727288 + -1.3905 3.00163 -0.85515 0.0343783 -0.33501 -0.941587 + -1.68164 3.35355 -0.865289 -0.685426 -0.54663 0.481027 + -1.19064 2.1133 0.362099 -0.418103 -0.373553 -0.828039 + -1.16685 2.11721 0.348321 -0.60143 -0.400633 -0.691213 + -1.18731 2.03749 0.39659 -0.115408 -0.520295 -0.846153 + -1.08955 1.96145 0.43531 -0.461465 -0.678634 -0.571407 + -1.07771 1.88665 0.501859 -0.404213 -0.649958 -0.643558 + -0.895428 1.6969 0.571713 -0.247759 -0.720322 -0.647882 + -0.925082 1.67623 0.632925 -0.404549 -0.767018 -0.498019 + -0.907269 1.77161 0.505114 -0.110171 -0.644206 -0.756875 + -0.765246 1.66905 0.611158 0.342274 -0.476751 -0.809665 + -0.819324 1.64323 0.607476 -0.00636929 -0.705998 -0.708186 + -0.848978 1.62264 0.668739 -0.231957 -0.826573 -0.512809 + -0.676006 1.77051 0.564613 0.418287 -0.677524 -0.604977 + -0.746393 1.71475 0.588597 0.374677 -0.594613 -0.711374 + -0.632869 1.72466 0.683228 0.2201 -0.242516 -0.94485 + -0.667674 1.64144 0.666177 0.168601 0.0796185 -0.982463 + -0.721751 1.61571 0.662546 -0.0557991 -0.603254 -0.795595 + -0.614016 1.77037 0.660667 0.215028 -0.643981 -0.734201 + -0.537044 1.73605 0.661114 -0.466283 -0.187858 -0.864459 + -0.560694 1.66274 0.668891 -0.345965 0.14876 -0.92638 + -0.595499 1.57951 0.651842 -0.089707 0.299817 -0.94977 + -0.609086 1.49934 0.623102 -0.358854 0.284633 -0.888936 + -0.493306 1.79201 0.611783 -0.563764 -0.158282 -0.810627 + -0.470814 1.59102 0.579113 -0.679126 0.00141297 -0.73402 + -0.494464 1.51771 0.586891 -0.523104 0.173738 -0.834372 + -0.523226 1.45056 0.587791 -0.352038 0.295744 -0.888034 + -0.536813 1.37039 0.559051 -0.0712238 0.434175 -0.898008 + -0.474948 1.67246 0.56804 -0.82181 -0.0489156 -0.567658 + -0.403462 1.55309 0.519801 -0.360455 -0.0122598 -0.932696 + -0.399328 1.47156 0.530822 -0.567327 0.0898514 -0.818576 + -0.430158 1.4069 0.519009 -0.425503 0.281932 -0.859919 + -0.45892 1.33984 0.519959 -0.488517 0.273818 -0.828477 + -0.394229 1.62731 0.522845 -0.176745 0.0650789 -0.982103 + -0.293227 1.44316 0.523598 0.0487424 0.282895 -0.957911 + -0.337539 1.38741 0.477964 -0.087005 0.380719 -0.920589 + -0.36837 1.32276 0.46615 -0.23837 0.353237 -0.904656 + -0.404201 1.26275 0.450694 -0.376759 0.322577 -0.86833 + -0.283994 1.51739 0.526643 -0.34297 -0.183991 -0.921151 + -0.18183 1.41074 0.48616 -0.522886 0.0774162 -0.84888 + -0.221171 1.38548 0.495105 -0.176352 0.438397 -0.881311 + -0.265483 1.32973 0.44947 -0.101295 0.515548 -0.850853 + -0.283711 1.28422 0.428496 -0.164203 0.363246 -0.917109 + -0.295824 1.5771 0.490223 -0.781044 -0.294882 -0.550468 + -0.210234 1.5283 0.447544 -0.526203 -0.426964 -0.735399 + -0.198404 1.46867 0.484013 -0.579941 -0.320817 -0.748829 + -0.219905 1.59834 0.419821 -0.525719 -0.339941 -0.779782 + -0.127071 1.56688 0.393913 -0.431722 -0.304748 -0.848967 + -0.124814 1.48874 0.411456 -0.529382 -0.237627 -0.814425 + -0.10824 1.43089 0.413652 -0.531732 -0.145506 -0.834319 + -0.136742 1.63693 0.36619 -0.403456 -0.404359 -0.820803 + -0.067915 1.63866 0.328985 -0.480558 -0.398719 -0.78108 + -0.066978 1.57055 0.359558 -0.463832 -0.329064 -0.822543 + -0.064721 1.49241 0.377102 -0.23782 -0.23073 -0.943507 + -0.069513 1.70727 0.292561 -0.454163 -0.354367 -0.81741 + -0.022973 1.60797 0.312956 -0.27179 -0.415256 -0.868155 + -0.022036 1.53985 0.343528 -0.275752 -0.443021 -0.853049 + -0.022036 1.47459 0.381172 -0.0526471 -0.342582 -0.938012 + -0.071691 1.77956 0.266749 -0.428516 -0.420676 -0.799628 + -0.022973 1.67413 0.279962 -0.241002 -0.389383 -0.888987 + 0.022972 1.67413 0.279957 0.249451 -0.394279 -0.884488 + 0.022972 1.60797 0.312951 0.273966 -0.41155 -0.869235 + 0.022033 1.53986 0.34352 0.211773 -0.401878 -0.890868 + -0.025151 1.74642 0.25415 -0.168328 -0.228454 -0.958892 + 0.025152 1.74642 0.25415 0.195837 -0.179824 -0.964008 + 0.069512 1.70727 0.292556 0.452452 -0.357785 -0.81687 + 0.067914 1.63867 0.32898 0.473636 -0.395008 -0.78717 + 0.066975 1.57056 0.359551 0.478287 -0.302429 -0.824487 + 0.025152 1.82848 0.257614 -0.094793 -0.165363 -0.981667 + 0.071692 1.77956 0.266749 0.267132 -0.321371 -0.908494 + 0.138335 1.70553 0.329772 0.406794 -0.402298 -0.820168 + 0.136737 1.63693 0.366197 0.382705 -0.417345 -0.824233 + 0.127071 1.56688 0.393913 0.444677 -0.326375 -0.834111 + 0.081363 1.84769 0.230549 0.0179551 -0.328724 -0.944255 + 0.145096 1.84073 0.259605 0.451012 -0.366014 -0.814016 + 0.135424 1.7726 0.295804 0.358816 -0.44562 -0.820167 + 0.235816 1.6716 0.395743 0.612861 -0.352643 -0.707138 + 0.2199 1.59834 0.419828 0.528765 -0.346037 -0.775026 + 0.149508 1.91236 0.233325 0.441942 -0.315568 -0.839705 + 0.206375 1.80209 0.327529 0.727398 -0.140786 -0.671618 + 0.232905 1.73867 0.361775 0.624394 -0.258729 -0.737015 + 0.29681 1.71836 0.448149 0.860846 -0.209775 -0.463615 + 0.210787 1.87381 0.301299 0.692924 -0.298311 -0.656404 + 0.263629 1.85203 0.385818 0.838912 -0.128431 -0.528897 + 0.29016 1.78861 0.420064 0.877701 -0.0393647 -0.477589 + 0.230902 1.94743 0.286985 0.689676 -0.308795 -0.654975 + 0.297934 2.00159 0.348771 0.860567 -0.371393 -0.348555 + 0.277819 1.92789 0.363036 0.865623 -0.292029 -0.406712 + 0.317445 1.99815 0.443342 0.910565 -0.26615 -0.316283 + 0.301748 1.91849 0.465723 0.901525 -0.16344 -0.400674 + 0.323077 2.06909 0.320073 0.791825 -0.387351 -0.472199 + 0.368253 2.13837 0.383673 0.838894 -0.499458 -0.216328 + 0.331635 2.07409 0.420611 0.89681 -0.407382 -0.172546 + 0.378705 2.13667 0.481815 0.845794 -0.477248 -0.238469 + 0.393396 2.20586 0.354975 0.708447 -0.591826 -0.384506 + 0.451134 2.24204 0.399915 0.582689 -0.812491 0.0182176 + 0.414515 2.17767 0.436803 0.791461 -0.605465 -0.0836763 + 0.497044 2.29366 0.303292 -0.0509846 -0.944861 -0.32348 + 0.472794 2.23674 0.348895 0.168552 -0.932217 -0.320253 + 0.549107 2.2493 0.375134 0.127075 -0.879058 0.459466 + 0.504507 2.2952 0.434824 0.161504 -0.978919 -0.125037 + 0.468697 2.2542 0.479835 0.351181 -0.809393 -0.470696 + 0.544082 2.27465 0.269227 -0.636557 -0.624973 -0.45189 + 0.587066 2.16372 0.27836 -0.50263 -0.835519 0.221971 + 0.570767 2.244 0.324112 -0.311043 -0.907562 0.282104 + 0.656683 2.21392 0.282416 0.340378 -0.706974 0.619944 + 0.69311 2.17527 0.216759 -0.526058 -0.447447 -0.723224 + 0.634104 2.14471 0.244295 -0.483446 -0.727164 -0.487352 + 0.672982 2.13364 0.236664 0.233829 -0.679581 0.695337 + 0.757834 2.14915 0.186202 -0.484517 -0.697017 -0.528593 + 0.791075 2.16562 0.135865 0.0890415 -0.989088 -0.117375 + 0.764288 2.1663 0.096893 -0.0659463 -0.990531 -0.120415 + 0.83345 2.18638 0.01491 0.788276 -0.607753 -0.0962156 + 0.834047 2.18376 0.093245 0.846173 0.115969 0.520137 + 0.800807 2.16729 0.143582 0.269573 -0.9536 -0.134083 + 0.757834 2.14915 0.186202 0.269567 -0.953602 -0.134076 + 0.729833 2.18652 0.061879 -0.13134 -0.983256 -0.126323 + 0.806663 2.18697 -0.024105 0.225126 -0.968103 -0.109977 + 0.829873 2.21614 -0.096232 0.996469 -0.0440814 -0.0714557 + 0.83047 2.21361 -0.017854 0.998851 -0.0444163 -0.0179958 + 0.800807 2.16729 0.143582 0.583007 0.746251 0.321266 + 0.774961 2.18234 0.16651 0.662776 -0.386191 0.641549 + 0.694818 2.17955 -0.003062 0.0667963 -0.990243 0.122303 + 0.761369 2.179 -0.100709 0.105361 -0.993434 0.0445938 + 0.733426 2.16917 -0.325479 0.836294 -0.526484 -0.153056 + 0.77872 2.17723 -0.248833 0.689654 -0.697818 -0.19346 + 0.726354 2.17204 -0.165652 0.245391 -0.965046 0.0920265 + 0.719845 2.09289 -0.351357 0.623882 -0.756021 0.197997 + 0.690305 2.10063 -0.539561 0.988101 -0.00750337 -0.153625 + 0.680219 2.19795 -0.522923 0.979196 -0.169943 -0.110879 + 0.683856 2.1495 -0.235005 -0.0153914 -0.967276 0.25326 + 0.677348 2.07035 -0.42071 0.267895 -0.841857 0.468519 + 0.676724 2.02426 -0.56549 0.989777 -0.124688 -0.0692404 + 0.675371 2.08841 -0.670391 0.991742 -0.125312 -0.0272947 + 0.642865 2.13821 -0.29785 -0.133497 -0.911534 0.388954 + 0.643619 2.04868 -0.42158 0.113588 -0.714654 0.690194 + 0.670978 1.91222 -0.532224 0.796404 -0.496356 0.3455 + 0.658296 1.88243 -0.635237 0.982107 -0.188133 0.00841582 + 0.664042 1.99448 -0.668502 0.988357 -0.1008 -0.113968 + 0.591543 2.1091 -0.346226 -0.51506 -0.725892 0.455844 + 0.592297 2.01965 -0.469899 -0.665171 -0.505269 0.549773 + 0.63725 1.89055 -0.533104 0.00704404 -0.770106 0.637877 + 0.641212 1.80309 -0.633011 0.956379 -0.199951 0.212975 + 0.558588 2.13478 -0.407112 -0.926325 -0.323327 0.193344 + 0.559973 2.04854 -0.520547 -0.93419 -0.245391 0.258983 + 0.584927 1.90744 -0.569742 -0.741954 -0.471341 0.476804 + 0.641212 1.80309 -0.633011 -0.572073 -0.628236 0.527306 + 0.540315 2.19079 -0.463918 -0.973453 -0.202623 0.106453 + 0.5417 2.10455 -0.577354 -0.984898 -0.144494 0.095384 + 0.552602 1.93633 -0.620381 -0.958182 -0.216193 0.187479 + 0.562467 1.83725 -0.682375 -0.90242 -0.332575 0.27392 + 0.616518 1.72023 -0.715886 -0.614284 -0.476627 0.628874 + 0.519111 2.30785 -0.404672 -0.956811 -0.283568 0.064045 + 0.522905 2.24451 -0.524367 -0.981203 -0.186234 0.050573 + 0.52994 2.16265 -0.639385 -0.991032 -0.12787 0.0387863 + 0.549676 2.00322 -0.681651 -0.994271 -0.105033 0.0198208 + 0.559541 1.90423 -0.743586 -0.991122 -0.131 0.0227111 + 0.515408 2.29635 -0.583968 -0.986721 -0.16194 -0.0125587 + 0.522443 2.21458 -0.698937 -0.993023 -0.106653 0.0502947 + 0.537916 2.06141 -0.743632 -0.98551 -0.14134 0.0937756 + 0.488206 2.41158 -0.525548 -0.976745 -0.193347 -0.0926653 + 0.507184 2.34934 -0.641333 -0.991555 -0.126623 -0.0280074 + 0.513535 2.28095 -0.751484 -0.996295 -0.075932 0.0403803 + 0.519544 2.12001 -0.811529 -0.988874 -0.115325 0.0939528 + 0.489974 2.45804 -0.595221 -0.98003 -0.167869 -0.106592 + 0.501595 2.42327 -0.678391 -0.991855 -0.118328 -0.047128 + 0.510635 2.18637 -0.864076 -0.996516 -0.0549294 0.0627552 + 0.526611 2.02693 -0.872705 -0.983096 -0.139465 0.118621 + 0.452466 2.74238 -0.853301 -0.958588 -0.254863 -0.127098 + 0.389777 3.35025 -1.69156 -0.90702 -0.377863 -0.185833 + 0.350028 3.47889 -1.79577 -0.86164 -0.439859 -0.253183 + 0.357852 3.75867 -2.25577 -0.378537 -0.320033 -0.868498 + 0.323683 3.81663 -2.25415 -0.55997 -0.402122 -0.724384 + 0.356326 3.82647 -2.2622 0.27545 0.00164683 -0.961314 + 0.393062 3.77164 -2.24423 0.48678 0.0899744 -0.868879 + 0.435041 3.67681 -2.2342 0.383895 0.0863823 -0.919327 + 0.399831 3.66393 -2.24569 0.318722 -0.0261144 -0.947488 + 0.287801 3.87879 -2.26543 -0.54885 -0.430104 -0.71678 + 0.320444 3.88863 -2.27347 0.243756 -0.044005 -0.968838 + 0.335666 3.91617 -2.25556 0.685093 0.277404 -0.673569 + 0.3782 3.85375 -2.23826 0.704552 0.273052 -0.655018 + 0.414936 3.79883 -2.22034 0.719672 0.274838 -0.637602 + 0.38479 3.90521 -2.19379 0.80188 0.390519 -0.452198 + 0.429882 3.82916 -2.17526 0.8114 0.380702 -0.443504 + 0.478303 3.72625 -2.16821 0.803247 0.346498 -0.484492 + 0.378568 3.95873 -2.14769 0.829358 0.460048 -0.31705 + 0.42366 3.88259 -2.12921 0.833792 0.440717 -0.332505 + 0.504429 3.73987 -2.11361 0.832936 0.388421 -0.39414 + 0.366002 4.02351 -2.06529 0.824725 0.498538 -0.266999 + 0.398513 3.98461 -2.03812 0.52043 0.513402 -0.682328 + 0.456171 3.84361 -2.1021 0.829315 0.425742 -0.361911 + 0.549484 3.70203 -2.04408 0.750844 0.413037 -0.515395 + 0.564439 3.60092 -2.11415 0.792874 0.379289 -0.476961 + 0.326371 4.14841 -1.97002 0.575364 0.583458 -0.573178 + 0.427696 3.95708 -2.04764 0.452818 0.461964 -0.762591 + 0.501226 3.80578 -2.03256 0.774085 0.369589 -0.514 + 0.355555 4.12096 -1.97949 0.462404 0.559329 -0.687992 + 0.401214 4.07733 -1.95971 0.738456 0.554933 -0.383056 + 0.459072 3.95874 -2.0149 0.701962 0.46593 -0.538664 + 0.532601 3.80743 -1.99983 0.315249 0.148063 -0.937388 + 0.29222 4.25662 -1.87364 0.736924 0.565396 -0.3705 + 0.337879 4.21298 -1.85387 0.726191 0.575107 -0.376695 + 0.46105 4.0245 -1.90301 0.747877 0.561824 -0.353602 + 0.518908 3.90592 -1.95821 0.685419 0.610261 -0.39722 + 0.576484 3.82328 -2.00548 0.305577 0.375593 -0.874958 + 0.238003 4.41405 -1.75872 0.654101 0.523305 -0.546171 + 0.285288 4.38676 -1.73806 0.697759 0.485415 -0.526787 + 0.314373 4.29125 -1.78103 0.863923 0.436556 -0.251108 + 0.406139 4.15745 -1.81468 0.721169 0.569685 -0.394177 + 0.256711 4.55582 -1.64747 0.702959 0.417535 -0.575772 + 0.336983 4.39134 -1.6486 0.775187 0.429336 -0.463416 + 0.366068 4.29584 -1.69158 0.736767 0.496379 -0.45911 + 0.382632 4.23573 -1.74186 0.710506 0.567284 -0.416377 + 0.463537 4.10564 -1.77914 0.777978 0.536105 -0.327629 + 0.194685 4.69612 -1.60488 -0.137093 0.456697 -0.878995 + 0.237949 4.66941 -1.59862 0.621001 0.363116 -0.694625 + 0.310484 4.52313 -1.57026 0.805047 0.380646 -0.454982 + 0.203348 4.79744 -1.55017 0.0744521 0.312668 -0.94694 + 0.246611 4.77073 -1.54392 0.517578 0.212346 -0.828868 + 0.291722 4.63672 -1.52141 0.747856 0.226739 -0.62394 + 0.361952 4.50588 -1.50138 0.717337 0.342523 -0.606716 + 0.175131 4.90577 -1.51101 -0.0329069 0.297754 -0.954075 + 0.231401 4.89724 -1.51704 0.0738258 0.254109 -0.964354 + 0.316543 4.85085 -1.50488 0.308706 0.0200356 -0.950946 + 0.283094 4.78372 -1.51101 0.575219 -0.107421 -0.810915 + 0.328204 4.64963 -1.48855 0.549114 0.0701608 -0.832797 + 0.314181 4.96879 -1.49417 0.124741 0.240233 -0.962667 + 0.399322 4.9224 -1.48201 0.25692 0.0540487 -0.96492 + 0.417531 4.7888 -1.46101 0.345654 -0.139805 -0.927889 + 0.384082 4.72168 -1.46715 0.402205 -0.0750398 -0.912469 + 0.245031 5.10121 -1.44312 0.0210488 0.360268 -0.932611 + 0.378838 5.08096 -1.44984 0.0946743 0.327072 -0.940245 + 0.501443 4.99974 -1.44918 0.250674 0.122408 -0.960301 + 0.473052 4.8423 -1.45428 0.314939 -0.132493 -0.939819 + 0.332854 5.21829 -1.39771 0.10649 0.373271 -0.92159 + 0.45747 5.29863 -1.35106 0.0276865 0.477643 -0.878118 + 0.585074 5.3526 -1.31374 0.106686 0.475025 -0.873481 + 0.506442 5.13492 -1.41252 0.175392 0.308239 -0.935001 + 0.212371 5.21916 -1.39982 0.00301754 0.457123 -0.889398 + 0.229843 5.34087 -1.31843 -0.00131149 0.605226 -0.796053 + 0.36618 5.37449 -1.29245 -0.0418319 0.616756 -0.786042 + 0.490796 5.45483 -1.24581 -0.0808134 0.665567 -0.74195 + 0.058347 5.22547 -1.39355 -0.0082534 0.463639 -0.885986 + 0.075818 5.34727 -1.31211 -0.000853593 0.607026 -0.794681 + 0.221985 5.48645 -1.18898 -0.00177469 0.661158 -0.750245 + 0.358322 5.52015 -1.16295 0.00660434 0.6685 -0.743683 + 0.482726 5.58027 -1.10407 -0.0234419 0.705847 -0.707976 + -0.075818 5.34727 -1.31211 0.00394171 0.604507 -0.79659 + 0.075818 5.48662 -1.19328 0.0115321 0.655618 -0.755005 + 0.072429 5.69616 -1.00801 0.0122119 0.663558 -0.748025 + 0.218596 5.69599 -1.00371 0.0213943 0.668653 -0.743267 + 0.355916 5.71389 -0.98212 0.0243196 0.675759 -0.736721 + -0.075818 5.48662 -1.19328 -0.00852906 0.658008 -0.752962 + -0.072429 5.69616 -1.00801 -0.0113551 0.662747 -0.748757 + 0.072429 5.97501 -0.760987 0.0188381 0.661816 -0.74943 + 0.216766 5.96896 -0.759101 0.0332929 0.663227 -0.747678 + 0.354086 5.98686 -0.737507 0.0320341 0.666046 -0.745223 + -0.221985 5.48645 -1.18898 -0.00105603 0.663519 -0.748159 + -0.218595 5.69599 -1.00371 -0.0222974 0.667812 -0.743996 + -0.072429 5.97501 -0.760987 -0.0179775 0.66265 -0.748714 + 0.069681 6.1512 -0.605952 0.0212353 0.649818 -0.759793 + 0.214018 6.14506 -0.604125 0.0402827 0.658258 -0.751713 + -0.366178 5.37449 -1.29246 0.0466732 0.608305 -0.79233 + -0.35832 5.52015 -1.16296 0.0333867 0.68461 -0.728144 + -0.355915 5.71389 -0.98212 -0.0243469 0.675759 -0.73672 + -0.216766 5.96896 -0.759101 -0.0342174 0.664055 -0.746901 + -0.490794 5.45483 -1.24581 0.0400022 0.650851 -0.758151 + -0.482724 5.58027 -1.10407 0.0180154 0.713899 -0.700017 + -0.480319 5.77401 -0.923245 -0.0259058 0.676964 -0.73556 + -0.354086 5.98686 -0.737507 -0.0319879 0.666052 -0.745219 + -0.214024 6.14514 -0.604066 -0.0427082 0.656454 -0.753156 + -0.585073 5.3526 -1.31374 -0.101309 0.480809 -0.870953 + -0.625152 5.50066 -1.20399 -0.0437619 0.671224 -0.739962 + -0.617082 5.6261 -1.06225 -0.00699847 0.715133 -0.698953 + -0.621968 5.79243 -0.899559 -0.0313346 0.682893 -0.729846 + -0.498003 5.99299 -0.726127 -0.0340916 0.667247 -0.744056 + -0.648565 5.23973 -1.34765 -0.207584 0.314417 -0.92631 + -0.729833 5.37582 -1.27596 -0.176161 0.459542 -0.87051 + -0.769912 5.52379 -1.16626 -0.116869 0.659197 -0.742833 + -0.763907 5.64422 -1.03944 -0.0865878 0.710005 -0.698853 + -0.768794 5.81046 -0.876784 -0.0847802 0.679394 -0.728859 + -0.643552 5.10455 -1.38431 -0.260173 0.191913 -0.946298 + -0.75869 5.15924 -1.34083 -0.280034 0.219362 -0.934592 + -0.790913 5.27267 -1.2991 -0.268294 0.295482 -0.916902 + -0.87218 5.40876 -1.22741 -0.246897 0.452568 -0.856869 + -0.916419 5.52384 -1.13374 -0.242149 0.635748 -0.732932 + -0.693761 4.99564 -1.38867 -0.278328 0.0317936 -0.95996 + -0.808899 5.05033 -1.34519 -0.318793 0.117759 -0.940481 + -0.874585 5.17472 -1.29805 -0.283043 0.22411 -0.932556 + -0.906808 5.28823 -1.25626 -0.291465 0.29207 -0.910903 + -0.739033 4.91135 -1.36187 -0.380542 -0.250171 -0.890282 + -0.834022 4.97093 -1.34046 -0.349652 -0.150342 -0.924738 + -0.897439 5.07519 -1.31066 -0.287299 0.119157 -0.9504 + -1.06721 5.0593 -1.27034 -0.20662 0.178672 -0.961969 + -1.04436 5.15892 -1.25768 -0.262494 0.256333 -0.930263 + -0.753886 4.85831 -1.3304 -0.518264 -0.445583 -0.729971 + -0.848875 4.91789 -1.309 -0.381662 -0.546568 -0.745384 + -0.935001 4.94725 -1.30045 -0.250948 -0.435305 -0.864601 + -0.922562 4.99579 -1.30592 -0.275955 0.0117628 -0.961099 + -0.707743 4.71343 -1.26267 -0.754112 -0.523825 -0.396135 + -0.778492 4.80821 -1.25762 -0.64273 -0.597651 -0.479281 + -0.858119 4.86914 -1.24797 -0.464162 -0.728206 -0.504251 + -0.705095 4.67604 -1.1633 -0.743944 -0.564044 -0.358332 + -0.778795 4.75395 -1.16045 -0.63737 -0.635574 -0.435665 + -0.858422 4.81498 -1.15075 -0.529484 -0.706651 -0.469351 + -0.946564 4.86002 -1.13477 -0.283752 -0.834323 -0.472642 + -0.944245 4.89859 -1.23938 -0.233714 -0.834893 -0.498328 + -0.68488 4.37231 -0.931225 -0.920786 -0.226122 -0.31784 + -0.713711 4.4393 -0.891461 -0.81785 -0.409644 -0.40412 + -0.787411 4.51721 -0.888613 -0.715847 -0.531571 -0.452764 + -0.840733 4.59343 -0.868419 -0.660605 -0.603681 -0.446284 + -0.735201 3.93699 -0.506827 -0.952922 0.0327594 -0.301441 + -0.764032 4.00398 -0.467072 -0.944732 -0.0579927 -0.322673 + -0.773668 4.10225 -0.429669 -0.892892 -0.220631 -0.392511 + -0.826991 4.17847 -0.409485 -0.848911 -0.359368 -0.387562 + -0.866016 3.63627 -0.323968 -0.515665 0.355658 -0.779485 + -0.859066 3.69351 -0.289117 -0.590769 0.434929 -0.67958 + -0.839342 3.77394 -0.251423 -0.670237 0.351858 -0.653436 + -0.848979 3.8722 -0.21402 -0.626161 0.265036 -0.733266 + -0.828354 3.58281 -0.357777 -0.719455 0.350056 -0.599871 + -0.973384 3.56342 -0.355589 0.229455 0.551609 -0.801921 + -1.05349 3.68378 -0.282855 0.311257 0.603251 -0.734308 + -1.03377 3.76411 -0.245203 -0.0755589 0.395936 -0.915164 + -0.935722 3.50996 -0.389398 -0.0210866 0.595645 -0.802971 + -0.986107 3.44005 -0.448314 0.224153 0.608274 -0.761419 + -1.26445 3.5853 -0.576089 0.596143 0.344512 -0.725207 + -1.25245 3.70489 -0.517631 0.646656 0.477446 -0.594879 + -1.32135 3.47721 -0.677476 0.552852 0.389911 -0.736427 + -1.77462 3.94002 -0.880283 0.564184 0.175329 -0.806818 + -1.76261 4.05962 -0.821833 0.608472 0.144961 -0.780223 + -1.73801 4.16008 -0.797641 0.67549 0.120899 -0.72739 + -1.33256 3.82517 -0.444947 0.69554 0.437485 -0.569939 + -1.09483 3.2719 -0.671261 0.0498391 0.926215 -0.373688 + -1.34655 3.34276 -0.768394 0.487895 0.648745 -0.584027 + -1.74741 3.72033 -0.871373 0.512495 0.196337 -0.835943 + -1.99585 3.86673 -1.01114 0.535749 0.141729 -0.832397 + -2.02305 4.08633 -1.0201 0.705316 -0.031425 -0.708196 + -1.41999 3.30677 -0.932065 0.451377 0.807032 -0.380733 + -1.77261 3.58579 -0.962341 0.541556 0.459701 -0.703841 + -1.97489 3.67645 -1.06076 0.563931 0.390834 -0.727483 + -2.05102 3.88745 -1.04243 0.414272 0.14586 -0.898389 + -1.41563 3.25271 -1.08502 0.203698 0.977548 -0.0539174 + -1.74752 3.40461 -1.07452 0.484354 0.706031 -0.516644 + -1.9498 3.49535 -1.17289 0.620114 0.63803 -0.456482 + -2.03006 3.69726 -1.092 0.419035 0.403192 -0.813539 + -1.43534 3.28172 -1.26488 0.122931 0.985309 0.118547 + -1.74317 3.35054 -1.22748 0.350866 0.931439 -0.0965076 + -1.90418 3.40747 -1.31688 0.490889 0.868698 -0.0662685 + -1.99278 3.52588 -1.20576 0.477286 0.704185 -0.525662 + -1.39002 3.28857 -1.38414 0.0142937 0.966325 0.256926 + -1.68608 3.35453 -1.39578 0.238921 0.963974 0.11692 + -1.84709 3.41146 -1.48519 0.379312 0.912703 0.151973 + -1.94716 3.43808 -1.3497 0.401155 0.905302 -0.139654 + -1.23927 3.29413 -1.31657 -0.307173 0.932089 0.191976 + -1.34359 3.3214 -1.449 -0.0746816 0.97037 0.229792 + -1.64076 3.36138 -1.51505 0.238689 0.970394 0.0369177 + -1.76269 3.39842 -1.608 0.378296 0.915542 0.136654 + -1.19284 3.32696 -1.38142 -0.497938 0.817225 0.290175 + -1.27698 3.33323 -1.50369 -0.379465 0.771364 0.510885 + -1.15402 3.36187 -1.3727 -0.562822 0.788342 0.248492 + -1.23816 3.36814 -1.49496 -0.420223 0.846644 0.326506 + -2.03674 3.52417 -1.2188 -0.20668 0.680349 -0.703142 + -2.07403 3.69546 -1.10509 -0.133465 0.406055 -0.90405 + -2.10814 3.70056 -1.08372 -0.352327 0.320457 -0.879303 + -2.12779 3.92912 -1.0268 -0.48189 0.0725509 -0.873223 + -2.09368 3.92411 -1.04812 -0.217651 0.0481205 -0.97484 + -2.04662 4.10856 -1.05841 0.496568 -0.0961534 -0.862655 + -2.15277 3.49152 -1.19185 -0.22057 0.530183 -0.818691 + -2.17767 3.69811 -1.06748 -0.0261827 0.395142 -0.918247 + -2.1757 3.92894 -1.00148 -0.214309 0.168308 -0.962156 + -2.14407 4.18355 -1.03649 -0.495373 -0.0225646 -0.868387 + -2.08927 4.14522 -1.0641 -0.251775 -0.0967016 -0.962943 + -2.26781 3.48799 -1.15554 -0.433034 0.399989 -0.807769 + -2.25717 3.7201 -1.07276 -0.214088 0.338873 -0.91615 + -2.2552 3.95093 -1.00678 -0.348059 0.285967 -0.892792 + -2.21741 4.1759 -0.951634 -0.817518 0.18664 -0.544821 + -2.19198 4.18327 -1.01121 -0.747521 0.0392026 -0.66308 + -2.32413 3.3409 -1.18198 -0.938841 0.218272 -0.266337 + -2.31998 3.49107 -1.12188 -0.882703 0.171152 -0.437655 + -2.30934 3.72318 -1.0391 -0.768542 0.237593 -0.594048 + -2.28632 3.94674 -0.972512 -0.850108 0.265913 -0.45454 + -2.33304 3.25212 -1.1848 -0.986146 0.0807105 0.144923 + -2.31988 3.32512 -1.13384 -0.988285 -0.00159184 0.152614 + -2.31574 3.47529 -1.07374 -0.86991 -0.154588 0.468359 + -2.32832 3.70336 -0.997166 -0.954095 -0.0450388 0.296099 + -2.30531 3.92699 -0.930517 -0.974764 0.122282 0.186768 + -2.34921 3.16953 -1.20275 -0.971452 0.0462548 0.232685 + -2.3288 3.19885 -1.17333 -0.915978 0.0124456 0.401035 + -2.31564 3.27193 -1.12231 -0.667049 -0.196994 0.718498 + -2.27542 3.46653 -1.04677 -0.276034 -0.323147 0.905197 + -2.28801 3.69459 -0.970183 -0.42858 -0.27725 0.859914 + -2.34791 3.10641 -1.19963 -0.754527 0.288436 0.589486 + -2.3275 3.13582 -1.17016 -0.693225 0.0636203 0.717908 + -2.30229 3.14979 -1.15956 -0.459799 -0.0169939 0.887861 + -2.26361 3.19658 -1.1378 0.108022 -0.319313 0.941473 + -2.27696 3.31872 -1.10056 -0.0500991 -0.323178 0.945011 + -2.37953 3.0253 -1.16654 -0.441648 0.523007 0.72898 + -2.34848 3.02759 -1.15571 -0.466432 0.427424 0.774435 + -2.32327 3.04155 -1.14509 -0.037935 0.189986 0.981054 + -2.1816 3.33755 -1.09758 0.132213 -0.416153 0.899631 + -2.42194 2.92441 -1.12279 -0.0872067 0.584255 0.806871 + -2.39088 2.92679 -1.11191 -0.244572 0.547449 0.800302 + -2.3819 2.89788 -1.09264 0.18471 0.505911 0.842577 + -2.51375 2.87948 -1.06177 -0.497057 0.85052 0.171903 + -2.46684 2.86717 -1.05965 0.204828 0.729196 0.652931 + -2.44093 2.84227 -1.04153 0.239355 0.672351 0.700466 + -2.55656 2.85204 -0.988248 -0.341542 0.926441 0.158288 + -2.51101 2.82575 -0.98151 0.345405 0.755607 0.556554 + -2.48511 2.80086 -0.963391 0.302031 0.775501 0.554414 + -2.48381 2.76838 -0.917348 0.708668 0.414782 0.570742 + -2.63086 2.78461 -0.927457 -0.806476 0.566714 -0.168617 + -2.59755 2.8118 -0.900746 -0.18606 0.933011 0.308013 + -2.55199 2.7856 -0.893959 0.430014 0.725366 0.537524 + -2.52567 2.7659 -0.891038 0.370613 0.735319 0.567407 + -2.52438 2.73342 -0.844986 0.64503 0.432435 0.630028 + -2.66066 2.74987 -0.83028 -0.82744 0.561399 0.0132083 + -2.62735 2.77706 -0.803569 -0.0493439 0.873465 0.484379 + -2.60067 2.72773 -0.789934 0.531507 0.589788 0.607988 + -2.57435 2.70811 -0.786954 0.64034 0.39903 0.656308 + -2.58797 2.60381 -0.767704 0.834478 0.0537793 0.548411 + -2.72259 2.56669 -0.860208 -0.956183 0.231627 -0.179062 + -2.69296 2.68907 -0.747364 -0.889107 0.457443 -0.0153327 + -2.67426 2.71354 -0.70516 -0.838971 0.541086 0.0579133 + -2.74137 2.56587 -0.553589 -0.880493 0.457054 0.125831 + -2.76006 2.54148 -0.595733 -0.936866 0.349607 0.00749561 + -2.79322 2.40892 -0.417933 -0.938189 0.337526 0.076671 + -2.77823 2.47099 -0.568038 -0.987795 0.139993 -0.0682804 + -2.77526 2.41856 -0.604634 -0.952243 -0.234386 -0.195694 + -2.79025 2.35658 -0.454487 -0.94422 -0.283216 -0.16804 + -2.79322 2.40892 -0.417933 -0.994755 -0.0682202 -0.0762121 + -2.7775 2.26562 -0.336527 -0.835773 -0.475701 -0.274212 + -2.80481 2.30012 -0.301482 -0.875531 -0.403008 -0.266514 + -2.75386 2.42636 -0.691736 -0.900818 -0.381683 -0.206991 + -2.7346 2.37815 -0.659845 -0.715397 -0.677388 -0.171325 + -2.75601 2.37036 -0.572744 -0.677809 -0.67288 -0.296322 + -2.7551 2.32544 -0.485146 -0.630155 -0.673156 -0.386995 + -2.73235 2.41021 -0.791162 -0.935062 -0.318862 -0.154873 + -2.71751 2.37223 -0.759195 -0.751532 -0.656511 -0.0647519 + -2.69972 2.35576 -0.656064 -0.34996 -0.931197 -0.101984 + -2.69724 2.3427 -0.584036 -0.326262 -0.894569 -0.305449 + -2.69634 2.29778 -0.49643 -0.379151 -0.778764 -0.499771 + -2.68263 2.34984 -0.755413 -0.31506 -0.946747 0.0663902 + -2.65726 2.35028 -0.663776 0.0794665 -0.994686 -0.0654554 + -2.65478 2.33722 -0.591748 0.131387 -0.942476 -0.307371 + -2.65599 2.29595 -0.515472 0.0694266 -0.82843 -0.555773 + -2.61197 2.36466 -0.665269 0.863419 -0.495081 0.0969687 + -2.6308 2.34821 -0.587988 0.891864 -0.44596 -0.0754884 + -2.63201 2.30695 -0.511721 0.664362 -0.626642 -0.407362 + -2.64478 2.22857 -0.436561 -0.115513 -0.725978 -0.677948 + -2.68512 2.23031 -0.417578 -0.422456 -0.720006 -0.550566 + -2.62188 2.43396 -0.655106 0.915079 0.129608 0.38188 + -2.64071 2.41751 -0.577825 0.838624 0.42812 0.336785 + -2.62464 2.29899 -0.474341 0.965654 0.235955 0.108801 + -2.62827 2.23067 -0.436606 0.624547 -0.494214 -0.604726 + -2.57719 2.45282 -0.751176 0.950076 -0.121724 0.287295 + -2.63265 2.58495 -0.671634 0.792221 0.187362 0.580759 + -2.72643 2.48661 -0.533697 0.706814 0.384221 0.593959 + -2.75702 2.40792 -0.417813 0.326771 0.734124 0.595216 + -2.6713 2.33883 -0.461941 0.66829 0.595627 0.445665 + -2.64759 2.66422 -0.691526 0.617413 0.408156 0.672465 + -2.74137 2.56587 -0.553589 0.678726 0.311166 0.665212 + -2.79322 2.40892 -0.417933 0.730069 0.292584 0.617571 + -2.67426 2.71354 -0.70516 0.585618 0.494254 0.642468 + -2.79322 2.40892 -0.417933 0.0190187 0.771061 0.636477 + -2.76861 2.29912 -0.301354 0.184847 0.822265 0.538249 + -2.67835 2.27482 -0.324272 0.509222 0.781928 0.359558 + -2.63169 2.23507 -0.336622 0.773302 0.630507 0.066812 + -2.6209 2.22272 -0.399226 0.922044 0.387 0.00812664 + -2.80481 2.30012 -0.301482 0.0150156 0.836221 0.548187 + -2.7715 2.24308 -0.168698 0.0686574 0.941178 0.330863 + -2.68124 2.21887 -0.191567 0.252826 0.926529 0.27861 + -2.78894 2.21716 -0.116009 -0.974741 0.183439 0.127398 + -2.75434 2.21575 -0.014957 -0.119126 0.968143 0.220248 + -2.68391 2.19877 -0.072337 0.281741 0.943273 0.175662 + -2.57417 2.17654 -0.070437 0.116701 0.976384 0.181812 + -2.77177 2.18983 0.037742 -0.897126 0.328558 0.295322 + -2.74515 2.15659 0.136712 -0.87528 0.266124 0.40381 + -2.72403 2.18317 0.102277 -0.0532834 0.948269 0.312964 + -2.65361 2.16627 0.044948 0.275911 0.940453 0.198549 + -2.56437 2.16259 -0.001088 0.107395 0.964623 0.240768 + -2.71866 2.09769 0.054926 -0.847469 -0.529968 0.0304928 + -2.69974 2.11281 0.241532 -0.931868 0.263087 0.249814 + -2.67862 2.13939 0.207101 -0.129672 0.955035 0.266634 + -2.59974 2.13291 0.120721 0.151966 0.981231 0.11871 + -2.77295 2.19257 -0.167609 -0.871961 -0.47949 -0.0988584 + -2.74563 2.15807 -0.202654 -0.779736 -0.586112 -0.220195 + -2.70354 2.14469 -0.271672 -0.605016 -0.69265 -0.392673 + -2.64631 2.14052 -0.322056 -0.461534 -0.735068 -0.49665 + -2.62056 2.15769 -0.36899 -0.20352 -0.722511 -0.660725 + -2.74235 2.23447 -0.367186 -0.644679 -0.653046 -0.397391 + -2.60405 2.15979 -0.369034 0.495254 -0.455903 -0.739511 + -2.66377 2.05986 0.383058 -0.862399 -0.504179 0.0455193 + -2.68075 2.1021 0.367288 -0.98935 0.0869814 0.116705 + -2.65377 2.14535 0.367786 -0.625829 0.779616 -0.0231731 + -2.63115 2.14083 0.289608 -0.263948 0.955437 -0.132179 + -2.65958 2.04483 0.483687 -0.902284 -0.425122 -0.0718033 + -2.66952 2.10925 0.515707 -0.970708 0.234125 0.0539545 + -2.64254 2.15241 0.516154 -0.753836 0.65417 -0.0615804 + -2.54722 2.20302 0.444684 -0.44355 0.878741 -0.176288 + -2.52459 2.1986 0.366555 -0.328891 0.92046 -0.211148 + -2.59455 1.97362 0.497629 -0.62556 -0.767548 -0.139802 + -2.66026 2.01101 0.590262 -0.915908 -0.309181 -0.255968 + -2.6702 2.07543 0.622282 -0.99197 0.016934 -0.125338 + -2.64937 2.17764 0.618454 -0.823647 0.470607 -0.316441 + -2.44827 1.85895 0.591642 -0.425711 -0.871234 -0.24438 + -2.59276 1.95846 0.561489 -0.547416 -0.780403 -0.30217 + -2.64805 1.97062 0.596026 -0.673337 -0.516994 -0.52852 + -2.68163 1.94816 0.724126 -0.947784 -0.158946 -0.27648 + -2.40772 1.82859 0.626028 -0.309207 -0.916334 -0.254408 + -2.56371 1.90541 0.638774 -0.421108 -0.815377 -0.397277 + -2.619 1.91757 0.673311 -0.408098 -0.789303 -0.458755 + -2.66943 1.90768 0.72984 -0.835491 -0.540317 -0.100059 + -2.43108 1.83731 0.699726 -0.285353 -0.920983 -0.265262 + -2.52315 1.87505 0.673161 -0.311142 -0.876903 -0.366377 + -2.58025 1.85702 0.72798 -0.337728 -0.737034 -0.585424 + -2.63068 1.84713 0.784507 -0.467577 -0.587057 -0.66086 + -2.35111 1.81048 0.712186 -0.226399 -0.936499 -0.267794 + -2.48818 1.81928 0.754544 -0.155314 -0.723602 -0.672516 + -2.58267 1.73848 0.824504 -0.27478 -0.546245 -0.791273 + -2.62966 1.70621 0.870192 -0.482056 -0.492275 -0.724767 + -2.67768 1.81487 0.830195 -0.561067 -0.484789 -0.670957 + -2.24022 1.7703 0.672387 -0.216768 -0.97406 0.0649485 + -2.25326 1.7895 0.740333 -0.0978414 -0.986684 -0.129931 + -2.32032 1.74681 0.80888 0.0655626 -0.739591 -0.669855 + -2.41817 1.76788 0.780783 -0.0811627 -0.701237 -0.708293 + -2.23005 1.77135 0.598375 -0.39503 -0.914604 0.0863156 + -2.16063 1.76303 0.711379 -0.179924 -0.950519 0.253259 + -2.17367 1.78214 0.779274 0.0584101 -0.993014 -0.102523 + -2.23175 1.7483 0.824294 0.202526 -0.806138 -0.55599 + -2.18945 1.73318 0.523476 -0.468713 -0.850047 0.240265 + -2.16828 1.73679 0.612622 -0.375291 -0.901582 0.215189 + -2.11071 1.74814 0.693367 -0.186954 -0.927475 0.323787 + -2.07002 1.79113 0.816904 -0.136102 -0.976311 -0.168207 + -2.1281 1.7572 0.861874 0.191651 -0.750324 -0.63268 + -1.96398 1.75787 0.800715 -0.61827 -0.765524 -0.178085 + -2.0201 1.77624 0.798892 -0.299101 -0.953547 0.0358793 + -2.07482 1.75424 0.87501 -0.0678023 -0.603834 -0.794221 + -2.39266 1.62727 0.890711 0.178703 -0.409148 -0.894798 + -2.48123 1.62578 0.875297 -0.0509209 -0.564103 -0.824133 + -1.92184 1.71138 0.78204 -0.919863 -0.383005 -0.0846055 + -2.0322 1.70732 0.876675 -0.371098 0.230403 -0.899556 + -2.0187 1.73586 0.876834 -0.549696 -0.251992 -0.796451 + -2.33938 1.62431 0.903847 0.0807427 -0.234473 -0.968764 + -2.35287 1.59576 0.903688 -0.0285176 -0.0623737 -0.997645 + -1.95162 1.54327 0.695609 -0.893541 0.362483 -0.264936 + -1.93684 1.67183 0.814342 -0.742547 0.171886 -0.647363 + -2.1287 1.64025 0.874234 -0.273124 0.369562 -0.888159 + -1.99576 1.4709 0.701758 -0.629161 0.535672 -0.563215 + -2.03334 1.60485 0.811951 -0.363201 0.503872 -0.783708 + -2.09902 1.5652 0.821238 -0.367398 0.493523 -0.788324 + -2.22983 1.57812 0.886249 -0.261304 0.298129 -0.918063 + -2.00568 1.3866 0.610768 -0.776792 0.47007 -0.41908 + -2.10772 1.36445 0.683333 -0.383125 0.545403 -0.745487 + -2.06144 1.43125 0.711045 -0.395991 0.556382 -0.7305 + -2.1753 1.4964 0.804189 -0.355822 0.535242 -0.766099 + -2.30612 1.50933 0.869199 -0.425902 0.407795 -0.807658 + -2.01091 1.34499 0.547637 -0.82101 0.187108 -0.539382 + -2.04117 1.26221 0.547429 -0.823187 0.0125159 -0.567633 + -2.03594 1.30382 0.610558 -0.706906 0.399197 -0.583889 + -1.99104 1.3952 0.534271 -0.362261 -0.0715226 -0.929329 + -1.9796 1.30111 0.52765 -0.0896282 0.0114549 -0.995909 + -1.96357 1.2312 0.53693 0.0409232 -0.119397 -0.992003 + -2.03364 1.17372 0.55069 -0.275874 0.116181 -0.954146 + -1.93628 1.39256 0.520656 -0.356412 -0.348423 -0.866932 + -1.84257 1.26513 0.553172 -0.0791193 -0.224305 -0.971302 + -1.82655 1.19522 0.562451 0.213439 -0.479395 -0.851249 + -1.87035 1.14444 0.593405 0.422897 -0.30261 -0.854158 + -1.95604 1.14272 0.540192 0.24263 -0.00450295 -0.970108 + -1.9422 1.42049 0.512666 -0.241462 0.0906465 -0.966167 + -1.76075 1.29119 0.47323 -0.475316 -0.348325 -0.807926 + -1.78781 1.26248 0.539557 -0.424987 -0.579908 -0.695048 + -1.75005 1.18048 0.619175 0.229811 -0.875825 -0.424403 + -1.96852 1.46025 0.532603 0.279973 0.455906 -0.844846 + -1.81121 1.37251 0.505971 0.110625 0.597934 -0.793875 + -1.76668 1.31913 0.465241 -0.110583 0.0740392 -0.991105 + -1.73453 1.32555 0.469519 -0.598576 -0.0676313 -0.798206 + -1.69201 1.22698 0.438445 -0.849049 -0.159216 -0.503752 + -1.83753 1.41219 0.525857 0.0165979 0.379719 -0.924953 + -1.77906 1.37893 0.510249 -0.454201 0.20119 -0.867885 + -1.77486 1.40457 0.487045 -0.498039 0.350622 -0.793109 + -1.6956 1.2825 0.425286 -0.827926 -0.190966 -0.527323 + -1.66144 1.21731 0.386586 -0.829269 0.00101613 -0.558849 + -1.66855 1.1534 0.384091 -0.927191 -0.0580284 -0.370067 + -1.71907 1.19827 0.504771 -0.799903 -0.540106 -0.261613 + -1.73841 1.37974 0.466652 0.0308051 0.628342 -0.777327 + -1.6236 1.20702 0.333423 -0.510988 0.289906 -0.809225 + -1.58944 1.14192 0.294773 -0.959969 -0.236139 -0.150657 + -1.63799 1.14373 0.332232 -0.71601 0.258553 -0.648444 + -1.72334 1.39731 0.482822 -0.304943 0.269619 -0.913409 + -1.55 1.18402 0.345047 0.372253 0.60795 -0.701302 + -1.58715 1.1821 0.312979 0.214456 0.648658 -0.730241 + -1.54797 1.02022 0.202565 -0.230462 0.523247 -0.820427 + -1.76554 1.46641 0.498735 -0.467581 -0.105256 -0.877661 + -1.52648 1.25231 0.376564 0.193148 0.279237 -0.940596 + -1.53493 1.20159 0.361217 0.208956 0.424488 -0.880992 + -1.47932 1.00796 0.269591 0.943581 -0.0354123 0.329243 + -1.47344 1.01536 0.236374 0.884015 0.398156 -0.244927 + -1.56869 1.32141 0.392476 -0.483494 -0.419662 -0.768191 + -1.46161 1.25622 0.403406 0.33007 0.398658 -0.855643 + -2.17596 1.71816 0.505099 -0.263738 -0.0843385 -0.9609 + -1.54797 1.02022 0.202565 -0.521385 -0.621049 0.585197 + -1.46161 1.25622 0.403406 -0.349121 -0.681257 -0.643431 + -1.59651 1.02203 0.240025 -0.671117 0.289821 -0.682353 + -1.61359 1.00509 0.256167 -0.914185 0.0015515 -0.405295 + -1.67449 1.15068 0.422399 -0.893056 -0.436931 -0.107439 + -1.50234 0.79014 0.055474 -0.353134 0.453329 -0.818406 + -1.51852 0.785997 0.06025 -0.57868 0.344038 -0.739437 + -1.53559 0.768969 0.076342 -0.833049 0.124216 -0.539072 + -1.61953 1.00237 0.294474 -0.954233 -0.297303 -0.0324203 + -1.51479 0.962226 0.156811 0.157683 0.565378 -0.809619 + -1.46917 0.732146 0.009719 0.122346 0.494524 -0.86051 + -1.46578 0.650271 -0.032268 0.197986 -0.209541 -0.957546 + -1.48196 0.646043 -0.027542 -0.427993 -0.309191 -0.849249 + -1.54581 0.757617 0.093804 -0.960131 -0.201784 -0.193471 + -1.51058 1.01353 0.204357 0.382254 0.59817 -0.704326 + -1.4571 0.731029 0.019659 0.786894 0.350643 -0.507787 + -1.45372 0.649152 -0.02233 0.65373 -0.308235 -0.691106 + -1.49218 0.634691 -0.010081 -0.609276 -0.697937 -0.376386 + -1.54175 0.759102 0.133231 -0.736178 -0.58669 0.337397 + -1.44014 0.777232 0.086428 0.965795 0.207333 -0.155736 + -1.45289 0.782328 0.067205 0.737273 0.43294 -0.518644 + -1.44451 0.644244 -0.008829 0.693537 -0.376036 -0.614495 + -1.48298 0.629783 0.00342 -0.32377 -0.946123 0.00487623 + -1.44603 0.769833 0.119646 0.78951 -0.28675 0.542631 + -1.43177 0.639149 0.010395 0.876247 -0.479596 -0.0466862 + -1.46019 0.624934 0.016618 0.112789 -0.969363 0.218207 + -1.51896 0.754167 0.14638 -0.162587 -0.788857 0.59268 + -1.47445 0.755618 0.125869 0.437179 -0.55398 0.708506 + -1.52288 0.986717 0.329392 0.770085 -0.334956 0.542931 + -1.5559 1.0049 0.38149 0.696801 -0.40086 0.594794 + -1.50747 0.773805 0.177967 0.216367 -0.70042 0.680145 + -1.48532 1.13277 0.359413 0.993469 0.0522243 -0.101446 + -1.52888 1.11144 0.419164 0.790188 -0.492035 0.365383 + -1.55706 1.1107 0.472043 0.537579 -0.644801 0.54336 + -1.59401 1.11498 0.500825 0.536835 -0.562131 0.62914 + -1.58579 1.01846 0.423404 0.193689 -0.684936 0.702387 + -1.47688 1.18341 0.374709 0.864777 0.066944 -0.497674 + -1.48993 1.15558 0.452516 0.820847 -0.554378 0.137388 + -1.51811 1.15484 0.505396 0.488966 -0.785006 0.380365 + -1.58083 1.16838 0.550743 0.217533 -0.881851 0.418353 + -1.61778 1.17257 0.579474 0.16423 -0.937898 0.305574 + -1.48452 1.20507 0.546602 0.923418 -0.323581 0.206383 + -1.51974 1.17783 0.595377 0.475071 -0.84225 0.254797 + -1.58246 1.19137 0.640725 0.24207 -0.97019 -0.0115609 + -1.61781 1.15953 0.666276 0.117909 -0.964051 -0.238124 + -1.46161 1.25622 0.403406 0.182702 -0.934433 -0.305706 + -2.22158 1.4297 0.776526 -0.399677 0.576859 -0.712385 + -2.3626 1.4335 0.884137 -0.499741 0.383233 -0.776783 + -2.51607 1.4707 0.967903 -0.314174 -0.156043 -0.936453 + -2.18905 1.30173 0.668175 -0.377341 0.480985 -0.79137 + -2.29883 1.35653 0.762461 -0.457124 0.527599 -0.716015 + -2.43985 1.36033 0.870072 -0.679531 0.528154 -0.509207 + -2.55795 1.29515 1.00677 -0.777668 -0.0362123 -0.627631 + -2.57256 1.39479 0.98279 -0.468191 -0.191573 -0.86261 + -2.11727 1.24109 0.5954 -0.375559 0.364049 -0.852305 + -2.13899 1.16138 0.587867 -0.405973 0.198356 -0.892099 + -2.24957 1.22143 0.65906 -0.461721 0.312796 -0.830044 + -2.35935 1.27623 0.753346 -0.568282 0.37039 -0.734756 + -2.45962 1.2704 0.860231 -0.758861 0.275312 -0.590197 + -2.05536 1.09401 0.543158 -0.24911 0.0975772 -0.963547 + -2.03337 1.0074 0.527763 -0.112446 0.228181 -0.967103 + -2.17506 1.07656 0.587571 -0.391157 0.198376 -0.89869 + -2.28565 1.13661 0.658765 -0.483454 0.248239 -0.839434 + -1.95709 1.06466 0.54279 0.280709 0.104229 -0.954117 + -1.9351 0.978054 0.527395 0.359277 0.250944 -0.898859 + -2.02185 0.925852 0.501813 -0.026173 0.362291 -0.931698 + -2.16355 0.995014 0.561621 -0.30587 0.316225 -0.898023 + -1.87139 1.06639 0.596003 0.608294 0.0443129 -0.792474 + -1.86447 0.985962 0.583301 0.638048 0.223832 -0.736746 + -1.84667 0.90357 0.570806 0.69828 0.0693767 -0.712455 + -1.9173 0.895663 0.514903 0.473333 0.342722 -0.811478 + -1.9978 0.845877 0.461334 0.0371751 0.462423 -0.88588 + -1.79385 1.1297 0.650129 0.586702 -0.485353 -0.648239 + -1.80259 1.06251 0.667518 0.768497 -0.0722046 -0.635767 + -1.79567 0.982171 0.654866 0.808225 0.144551 -0.570857 + -1.78401 0.905763 0.660809 0.837957 0.0601161 -0.542415 + -1.8293 0.835938 0.596148 0.817203 0.0901419 -0.569258 + -1.73359 1.12172 0.728554 0.495678 -0.494808 -0.713771 + -1.74233 1.05453 0.745943 0.680259 -0.162053 -0.714833 + -1.7404 0.972385 0.752615 0.761869 0.0278333 -0.647133 + -1.72873 0.895891 0.758508 0.806428 0.0939876 -0.583815 + -1.72804 1.18235 0.68035 0.285053 -0.847523 -0.447716 + -1.6787 1.12832 0.732518 0.160881 -0.579655 -0.798822 + -1.68426 1.0677 0.780721 -0.0431545 -0.437108 -0.898373 + -1.67503 0.993074 0.804182 0.151432 -0.226414 -0.962187 + -1.67309 0.910845 0.810805 0.535372 -0.088663 -0.83995 + -1.71513 1.18513 0.556936 -0.568156 -0.821054 -0.0554042 + -1.69311 1.18699 0.618111 -0.135757 -0.989895 0.0409699 + -1.66467 1.16989 0.715122 0.133919 -0.807543 -0.574404 + -1.62616 1.00956 0.800619 0.743316 -0.0441051 -0.667485 + -1.60738 0.938321 0.794815 0.196255 -0.0880708 -0.97659 + -1.67055 1.13745 0.474514 -0.813186 -0.578851 0.0604995 + -1.65237 1.13251 0.532479 -0.526637 -0.776519 0.345934 + -1.6239 1.12854 0.542738 0.18189 -0.757081 0.627491 + -1.66465 1.18294 0.628321 -0.202455 -0.976883 0.0686345 + -1.61546 1.00377 0.333852 -0.881271 -0.444839 0.159623 + -1.59728 0.998827 0.391816 -0.626495 -0.653323 0.425057 + -1.61213 1.05113 0.783223 0.555339 -0.294414 -0.777765 + -1.5683 0.988202 0.841219 0.547399 0.0488385 -0.835445 + -1.5629 0.938744 0.837082 0.558675 0.180516 -0.809504 + -1.54412 0.867502 0.831277 0.432244 -0.111071 -0.89489 + -1.59815 0.863693 0.818274 -0.21058 -0.422443 -0.881588 + -1.60952 1.13005 0.79013 0.773799 -0.44207 -0.453661 + -1.56569 1.06712 0.848126 0.525555 -0.0998693 -0.844878 + -1.48094 0.947401 0.878488 0.109901 0.0457181 -0.992891 + -1.47554 0.897944 0.874352 0.555507 -0.0448609 -0.8303 + -1.57418 1.16189 0.764578 0.643914 -0.687121 -0.33651 + -1.54296 1.11265 0.844866 0.306169 -0.354462 -0.883525 + -1.45821 0.993018 0.875278 0.0809339 -0.209781 -0.974393 + -1.4594 0.843428 0.897777 0.648958 -0.222243 -0.727641 + -1.52797 0.812986 0.854702 0.377584 -0.371614 -0.848135 + -1.54804 1.22667 0.747174 0.814744 -0.57145 -0.0981658 + -1.51682 1.17743 0.827461 0.325364 -0.412496 -0.850873 + -1.45391 1.09575 0.847134 -0.0822618 -0.301143 -0.950024 + -1.51282 1.25382 0.698348 0.686531 -0.7209 0.0947574 + -1.4986 1.24995 0.798452 0.370037 -0.665066 -0.64866 + -1.43569 1.16827 0.818123 0.0269922 -0.299273 -0.953786 + -1.39844 1.00285 0.872655 -0.0319888 -0.264807 -0.963771 + -1.40273 0.900111 0.9008 -0.0964257 -0.330437 -0.938889 + -1.42705 0.810131 0.938248 0.268959 -0.383339 -0.883579 + -1.48115 0.749575 0.933935 0.590757 -0.414201 -0.692418 + -1.52058 0.751028 0.891216 0.493563 -0.401586 -0.771443 + -1.59075 0.801736 0.854789 0.124545 -0.357172 -0.925698 + -1.3925 0.822363 0.933659 0.0203045 -0.444787 -0.895406 + -1.41682 0.732299 0.971057 0.277714 -0.437923 -0.855043 + -1.4488 0.716278 0.974406 0.313028 -0.499471 -0.807801 + -1.49687 0.688112 0.95859 0.596314 -0.520787 -0.610893 + -1.33489 0.693301 1.0436 0.393503 -0.576032 -0.716479 + -1.42433 0.648578 1.01686 0.201754 -0.557455 -0.805319 + -1.45478 0.596872 1.05422 -0.0269332 -0.686943 -0.726212 + -1.47925 0.664574 1.01176 0.20294 -0.750257 -0.62923 + -1.50627 0.652275 0.987461 0.678628 -0.670131 -0.300646 + -1.1991 0.676835 1.14652 0.449861 -0.632005 -0.631027 + -1.3424 0.60958 1.08941 0.40311 -0.549624 -0.731721 + -1.45688 0.548566 1.10849 -0.0682584 -0.740357 -0.668739 + -1.54082 0.606679 1.08404 0.0652579 -0.800728 -0.595463 + -1.14769 0.775965 1.02182 0.425913 -0.790026 -0.440974 + -1.07025 0.74551 1.15717 0.460718 -0.742964 -0.485534 + -1.05089 0.714986 1.22064 0.473928 -0.645433 -0.599006 + -1.17527 0.617705 1.20894 0.499067 -0.508761 -0.701495 + -1.1661 0.918671 0.745052 0.286612 -0.613039 -0.736231 + -1.14172 0.8227 0.960676 0.697446 -0.567514 -0.437603 + -1.06428 0.792159 1.09598 0.406018 -0.801647 -0.438761 + -0.948354 0.796696 1.19172 0.380433 -0.849613 -0.36528 + -0.928998 0.766172 1.25519 0.432385 -0.795523 -0.424483 + -1.20241 1.08491 0.659711 -0.821727 -0.175557 -0.542167 + -1.29256 1.60304 0.697494 -0.812119 -0.563741 -0.15053 + -1.21542 1.25462 0.632759 -0.0031453 -0.00839504 -0.99996 + -1.587 0.730286 0.874144 0.0665804 -0.448761 -0.891168 + -1.66934 0.839396 0.83016 0.573369 -0.0696163 -0.816334 + -1.71192 0.812042 0.755739 0.804134 0.0394228 -0.593139 + -1.53629 0.689567 0.915871 0.436515 -0.5196 -0.734486 + -1.59718 0.672544 0.915154 0.449715 -0.429837 -0.782941 + -1.65253 0.75546 0.827341 0.824798 -0.0082988 -0.565367 + -1.69959 0.744897 0.780836 0.756707 -0.0979742 -0.646371 + -1.76663 0.838045 0.6861 0.810457 -0.0213166 -0.58541 + -1.54647 0.631827 0.956881 0.40973 -0.619083 -0.669969 + -1.55587 0.595988 0.985752 0.578711 -0.615123 -0.53546 + -1.59539 0.606046 0.942334 0.438197 -0.540751 -0.718033 + -1.65074 0.688961 0.854519 0.773858 -0.154545 -0.614215 + -1.57421 0.54596 1.0314 0.73269 -0.637314 -0.238741 + -1.61372 0.556018 0.987985 0.602529 -0.590915 -0.53645 + -1.6368 0.619564 0.87692 0.787817 -0.316406 -0.528424 + -1.68565 0.675413 0.803186 0.387969 -0.471947 -0.791673 + -1.7543 0.770899 0.711198 0.769803 -0.295818 -0.565593 + -1.51022 0.651849 1.0122 0.607161 -0.79105 -0.074804 + -1.57817 0.545448 1.05609 0.901714 -0.375559 0.214166 + -1.60585 0.49996 1.10848 0.834642 -0.550431 0.0199433 + -1.62122 0.504521 1.03438 0.342927 -0.836223 -0.42794 + -1.5718 0.593954 1.08447 0.724252 -0.6792 -0.118936 + -1.59948 0.548467 1.13686 0.723504 -0.659554 -0.203789 + -1.62677 0.468698 1.16843 0.780966 -0.620852 -0.0680772 + -1.64214 0.473346 1.09438 0.513707 -0.815679 -0.26603 + -1.6443 0.568153 0.923365 0.467164 -0.655206 -0.593686 + -1.54292 0.558373 1.13831 -0.0577527 -0.810044 -0.583519 + -1.60355 0.505276 1.20727 0.517044 -0.801543 -0.300325 + -1.62257 0.484198 1.25658 0.529428 -0.846497 -0.0561147 + -1.64579 0.44762 1.21774 0.402664 -0.90742 0.120211 + -1.66103 0.442873 1.15136 -0.04617 -0.980104 -0.19304 + -1.54699 0.515182 1.20871 -0.0749877 -0.809016 -0.582983 + -1.52479 0.464575 1.26937 -0.31232 -0.874101 -0.372026 + -1.59744 0.481079 1.30738 -0.0259835 -0.972897 -0.229774 + -1.6726 0.458265 1.2863 0.383771 -0.917937 -0.100556 + -1.68784 0.453432 1.21987 0.295227 -0.952111 0.0795293 + -1.44043 0.486339 1.17467 -0.111137 -0.760384 -0.639894 + -1.41823 0.435732 1.23532 -0.147158 -0.788088 -0.597713 + -1.44873 0.417293 1.32726 -0.541541 -0.783838 -0.303861 + -1.52138 0.433797 1.36528 -0.365322 -0.895546 -0.254041 + -1.32655 0.544633 1.1463 0.351928 -0.596813 -0.721083 + -1.31011 0.482406 1.21249 0.297737 -0.662763 -0.687093 + -1.26219 0.434609 1.27727 0.349234 -0.582392 -0.734068 + -1.27731 0.371808 1.32425 0.240972 -0.661891 -0.709811 + -1.40647 0.371246 1.30042 -0.406111 -0.755673 -0.513841 + -1.15942 0.552757 1.26583 0.500775 -0.466544 -0.729082 + -1.13583 0.493105 1.31715 0.470839 -0.494101 -0.730872 + -1.08792 0.445309 1.38194 0.44709 -0.495578 -0.744656 + -0.987842 0.616329 1.33052 0.433735 -0.464773 -0.771919 + -0.964256 0.556677 1.38184 0.377966 -0.474035 -0.795256 + -0.958075 0.487541 1.42119 0.352676 -0.486815 -0.799144 + -1.06737 0.38742 1.4322 0.417652 -0.529008 -0.738726 + -1.02706 0.655854 1.28306 0.483618 -0.479365 -0.732341 + -0.815221 0.742389 1.35778 0.313595 -0.419724 -0.851757 + -0.79827 0.664136 1.38552 0.264558 -0.375585 -0.888226 + -0.792089 0.594913 1.42482 0.195617 -0.419154 -0.886591 + -0.854442 0.781914 1.31032 0.433389 -0.680396 -0.590962 + -0.695028 0.820486 1.34571 -0.0541374 -0.660398 -0.748961 + -0.708286 0.770455 1.36997 0.016561 -0.390295 -0.920541 + -0.691335 0.692288 1.39776 -0.312427 -0.389432 -0.866448 + -0.812578 0.820227 1.26856 0.348052 -0.885531 -0.307726 + -0.738021 0.83597 1.32369 0.20944 -0.86485 -0.456255 + -0.618769 0.825268 1.31523 -0.701038 -0.67658 -0.225354 + -0.640121 0.757806 1.35788 -0.480281 -0.300874 -0.823896 + -0.653379 0.707775 1.38213 -0.453169 -0.246801 -0.856579 + -0.811583 0.827076 1.2515 0.343971 -0.810517 -0.474075 + -0.661762 0.840666 1.29316 -0.0297325 -0.936742 -0.348755 + -0.660767 0.847515 1.2761 -0.255366 -0.947414 0.192862 + -0.59698 0.776022 1.30872 -0.911292 -0.297893 -0.284263 + -0.862432 0.824007 1.21941 0.406876 -0.822885 -0.396626 + -0.734307 0.862237 1.2566 -0.094028 -0.87659 -0.471962 + -0.864203 0.836358 1.14702 0.425711 -0.872347 -0.240376 + -0.785156 0.85908 1.22446 0.365456 -0.848031 -0.383778 + -0.78827 0.875179 1.17438 -0.0730326 -0.996704 0.0353108 + -0.712689 0.835707 1.21915 -0.655829 -0.635822 0.406962 + -0.687961 0.839972 1.25976 -0.474731 -0.542775 0.692839 + -0.614421 0.825336 1.27931 -0.362325 -0.173236 0.915811 + -0.950125 0.809046 1.11933 0.269323 -0.921694 -0.279185 + -0.867317 0.852369 1.09689 0.477885 -0.790046 -0.383997 + -0.865264 0.89818 1.02414 0.242881 -0.890796 -0.384045 + -1.04637 0.825001 1.03549 0.234761 -0.86554 -0.442411 + -0.932214 0.841889 1.05884 0.331304 -0.843882 -0.42202 + -0.930161 0.8877 0.986093 0.397391 -0.824751 -0.402326 + -0.860678 0.922089 0.953931 0.198095 -0.896026 -0.397361 + -0.826398 0.869631 1.10659 -0.830173 -0.520502 0.199724 + -1.11972 0.886319 0.929887 0.502918 -0.673538 -0.541683 + -0.988034 0.855089 0.986578 0.212904 -0.869801 -0.445105 + -0.960444 0.897098 0.922215 0.218833 -0.770023 -0.599314 + -0.902572 0.92971 0.921729 0.279728 -0.855884 -0.434988 + -1.1441 0.982289 0.714262 0.570624 -0.289262 -0.768581 + -1.13996 1.08149 0.754245 0.881795 -0.00266715 -0.471624 + -1.06139 0.916319 0.880924 0.169801 -0.549543 -0.818028 + -1.05187 0.99702 0.888545 0.28604 -0.290561 -0.913102 + -0.928793 0.949374 0.86747 -0.0679236 -0.763173 -0.642614 + -1.21128 1.35382 0.672742 0.426411 -0.042953 -0.903509 + -1.1853 1.29834 0.696237 0.835049 0.0870797 -0.54324 + -1.13045 1.1621 0.761815 0.894394 0.152379 -0.420523 + -1.20241 1.08491 0.659711 0.928462 0.0122208 -0.371226 + -1.29256 1.60304 0.697494 0.437824 -0.105642 -0.892832 + -2.55227 2.13444 0.203282 -0.144941 0.975208 -0.167216 + -2.46869 2.13569 0.121704 -0.206607 0.964036 -0.167178 + -2.5105 2.12924 0.074687 0.0104376 0.989857 0.141682 + -2.4744 2.21408 0.359739 -0.617388 0.685529 -0.385852 + -2.50208 2.14992 0.196466 -0.336006 0.889614 -0.309334 + -2.39707 2.18859 0.187288 -0.578816 0.703306 -0.412714 + -2.34077 2.15746 0.061211 -0.648427 0.76038 -0.0369516 + -2.38258 2.151 0.014202 -0.200623 0.963665 0.176352 + -2.55404 2.22825 0.546984 -0.691729 0.636677 -0.340814 + -2.54716 2.2602 0.573062 -0.858596 0.267177 -0.437526 + -2.51401 2.31498 0.503967 -0.910698 0.032595 -0.411784 + -2.46937 2.34416 0.416232 -0.868306 0.0381956 -0.494556 + -2.44543 2.27979 0.37632 -0.718041 0.275045 -0.639349 + -2.43045 2.20281 0.26205 -0.612632 0.694204 -0.37784 + -2.68135 2.24606 0.776546 -0.81152 0.410326 -0.416014 + -2.67447 2.278 0.802623 -0.720618 0.411119 -0.558293 + -2.62183 2.30578 0.72291 -0.87712 0.0831844 -0.473013 + -2.58868 2.36048 0.653765 -0.895234 -0.0565549 -0.441993 + -2.69067 2.14011 0.697649 -0.968115 0.0605135 -0.243087 + -2.72265 2.20853 0.85574 -0.939291 0.0748139 -0.334867 + -2.73841 2.35365 0.931195 -0.907184 0.0635316 -0.41591 + -2.68577 2.38143 0.851482 -0.878298 0.0280821 -0.477288 + -2.64802 2.47483 0.752112 -0.90022 -0.0899189 -0.426051 + -2.6886 2.09026 0.768796 -0.968818 -0.0878022 -0.231693 + -2.73772 2.11713 0.89106 -0.940948 0.00987779 -0.338408 + -2.78481 2.16824 1.04533 -0.949733 0.0332333 -0.311293 + -2.76975 2.25965 1.01001 -0.94575 0.0366028 -0.322828 + -2.66813 2.02558 0.693429 -0.997575 0.0600019 -0.0352705 + -2.71138 1.98324 0.833166 -0.941642 0.0235637 -0.33579 + -2.7605 2.01002 0.95538 -0.936041 0.0429695 -0.349257 + -2.72489 1.90573 0.863813 -0.922793 -0.0425729 -0.382938 + -2.81001 1.8243 1.04305 -0.925878 -0.0272132 -0.376842 + -2.86532 1.87272 1.20998 -0.952521 0.000752998 -0.304472 + -2.81581 2.05844 1.12231 -0.944092 0.0713675 -0.321864 + -2.72178 1.82364 0.876602 -0.80842 -0.285164 -0.514916 + -2.8069 1.74221 1.05584 -0.890098 -0.21666 -0.400979 + -2.72186 1.72568 0.947274 -0.734147 -0.372987 -0.567371 + -2.71597 1.64793 0.986144 -0.712937 -0.337375 -0.614735 + -2.80101 1.66446 1.09471 -0.864067 -0.233578 -0.445902 + -2.67776 1.71691 0.900867 -0.615568 -0.460027 -0.639884 + -2.65143 1.66036 0.922402 -0.540757 -0.461793 -0.703086 + -2.66111 1.61844 0.948007 -0.54897 -0.341838 -0.762744 + -2.69851 1.5131 1.03227 -0.708767 -0.344801 -0.615436 + -2.60333 1.64967 0.891728 -0.390486 -0.520427 -0.759392 + -2.5719 1.58847 0.916332 -0.242246 -0.493655 -0.835237 + -2.58158 1.54655 0.941937 -0.266086 -0.418532 -0.868348 + -2.64365 1.48362 0.994138 -0.522657 -0.378444 -0.763943 + -2.51266 1.68707 0.850743 -0.116092 -0.518464 -0.847182 + -2.45401 1.53363 0.915703 -0.112405 -0.304601 -0.945824 + -2.71043 1.46155 1.07875 -0.739514 -0.310717 -0.597138 + -2.81293 1.61291 1.14119 -0.870545 -0.246686 -0.42579 + -2.69582 1.36191 1.10273 -0.749938 -0.445746 -0.488778 + -2.83411 1.59996 1.19782 -0.920479 -0.256511 -0.294823 + -2.92455 1.84272 1.39255 -0.973138 -0.0687242 -0.219724 + -2.90337 1.85575 1.33597 -0.94824 0.0143974 -0.317229 + -2.69088 1.31879 1.16603 -0.83262 -0.488595 -0.260803 + -2.82917 1.55684 1.26112 -0.911736 -0.404557 -0.0712168 + -2.88132 1.67507 1.38653 -0.916345 -0.399691 -0.0236408 + -2.63789 1.20703 1.1818 -0.924112 -0.302307 -0.233726 + -2.73704 1.3818 1.34469 -0.898637 -0.438456 0.0144213 + -2.75066 1.43318 1.4467 -0.893538 -0.394871 0.213698 + -2.8428 1.60821 1.36313 -0.856803 -0.490194 0.159995 + -2.61381 1.14019 1.11437 -0.978571 -0.0727289 -0.192639 + -2.61716 1.10996 1.32433 -0.934912 -0.354656 -0.0126379 + -2.68404 1.27004 1.36046 -0.912307 -0.409137 -0.0174159 + -2.68566 1.28041 1.4271 -0.833467 -0.458792 0.307965 + -2.57772 1.20514 0.996875 -0.904527 0.147861 -0.39996 + -2.60092 1.04733 1.08021 -0.985106 -0.145394 -0.0917945 + -2.59308 1.04304 1.25684 -0.950259 -0.311364 0.00781739 + -2.61877 1.12024 1.39092 -0.928899 -0.346585 0.130485 + -2.56484 1.11228 0.962714 -0.919465 0.105989 -0.378616 + -2.58618 0.98852 1.00507 -0.969967 -0.190865 -0.150778 + -2.58243 1.00189 1.14671 -0.945154 -0.323487 0.0451764 + -2.54816 0.916788 1.24551 -0.924532 -0.377052 0.0554235 + -2.55881 0.957931 1.35565 -0.925182 -0.375946 0.0519808 + -2.50194 1.17043 0.851593 -0.821886 0.309601 -0.478173 + -2.49899 1.08753 0.812577 -0.810373 0.197348 -0.551679 + -2.56188 1.02929 0.923648 -0.93213 0.0344602 -0.36048 + -2.55869 0.93982 0.946217 -0.96478 -0.129222 -0.229133 + -2.56768 0.943084 1.07156 -0.945993 -0.321485 0.0417764 + -2.40168 1.17625 0.744709 -0.619436 0.298552 -0.726062 + -2.41419 1.08425 0.721255 -0.61971 0.265996 -0.738381 + -2.49104 0.990875 0.771388 -0.824036 0.158811 -0.543823 + -2.5344 0.980593 0.864797 -0.924585 0.0233744 -0.380258 + -2.29816 1.04453 0.635261 -0.448085 0.294329 -0.844151 + -2.27494 0.963113 0.591875 -0.410539 0.358633 -0.838355 + -2.40624 0.987598 0.680065 -0.617791 0.253472 -0.744369 + -2.14033 0.913598 0.518236 -0.231781 0.399618 -0.886895 + -2.24601 0.882803 0.540174 -0.375682 0.422097 -0.825044 + -2.37731 0.907288 0.628365 -0.566056 0.310739 -0.763559 + -2.45752 0.899734 0.695248 -0.762946 0.183049 -0.620005 + -2.48473 0.934199 0.747354 -0.875126 0.0847596 -0.476414 + -1.96912 0.765755 0.420306 0.136233 0.291685 -0.946763 + -2.11165 0.833479 0.477208 -0.146208 0.497451 -0.855082 + -2.20315 0.817744 0.481859 -0.324 0.470537 -0.820743 + -2.33615 0.828191 0.564767 -0.558406 0.286279 -0.778606 + -2.41636 0.820637 0.631649 -0.735722 0.114228 -0.667582 + -1.89324 0.815688 0.474423 0.617393 0.322612 -0.717459 + -1.88089 0.74382 0.478903 0.783604 0.124291 -0.608701 + -1.96103 0.67472 0.399785 0.449127 0.333875 -0.828741 + -2.06879 0.768334 0.418843 0.209192 0.663968 -0.717904 + -1.81695 0.764071 0.600627 0.86766 -0.183795 -0.461937 + -1.81262 0.720615 0.663493 0.876135 -0.325717 -0.355382 + -1.87281 0.652784 0.458382 0.832041 0.0362028 -0.553532 + -1.91603 0.534961 0.413056 0.789759 -0.279424 -0.546079 + -1.96117 0.623916 0.370181 0.582356 0.309594 -0.751673 + -1.74998 0.727445 0.774065 0.26545 -0.746467 -0.610183 + -1.80877 0.671025 0.710185 0.86313 -0.426725 -0.270022 + -1.86896 0.60328 0.505124 0.945919 -0.196669 -0.257988 + -1.68642 0.623923 0.855168 -0.0045126 -0.708756 -0.705439 + -1.75074 0.675868 0.825996 0.214467 -0.785796 -0.580112 + -1.8218 0.634855 0.772834 0.833828 -0.514777 -0.199338 + -1.85867 0.560345 0.575091 0.957778 -0.223931 -0.180319 + -1.90574 0.492112 0.483073 0.829766 -0.421959 -0.365293 + -1.69254 0.569577 0.911698 -0.158111 -0.733039 -0.661554 + -1.76377 0.639697 0.888646 0.105377 -0.842898 -0.527655 + -1.82642 0.59689 0.838591 0.7945 -0.584643 -0.1642 + -1.86328 0.522381 0.640847 0.966507 -0.214487 -0.140924 + -1.65042 0.513721 0.979845 0.525468 -0.716742 -0.458436 + -1.70803 0.526187 0.970451 -0.238842 -0.749552 -0.617355 + -1.77926 0.596395 0.94745 0.0728766 -0.840701 -0.536573 + -1.85124 0.55914 0.898178 0.809196 -0.579714 -0.0955744 + -1.66931 0.483248 1.03682 0.266847 -0.854562 -0.445551 + -1.72604 0.479952 1.02813 -0.222569 -0.779222 -0.585898 + -1.80409 0.558557 1.00699 0.0564278 -0.87805 -0.475231 + -1.86902 0.523285 0.957278 0.84407 -0.530537 -0.0779501 + -1.85602 0.483439 0.700495 0.962704 -0.259133 -0.0777881 + -1.68732 0.437013 1.09451 0.485507 -0.842984 -0.231648 + -1.74607 0.451085 1.08933 -0.400766 -0.840026 -0.36571 + -1.82411 0.52969 1.06819 0.0629603 -0.912948 -0.40319 + -1.88128 0.493809 1.02393 0.757383 -0.64941 -0.0680977 + -1.87381 0.447584 0.759596 0.806986 -0.589472 0.036005 + -1.70775 0.443486 1.2775 0.372705 -0.927857 -0.0131178 + -1.70723 0.427067 1.15213 0.206735 -0.977373 -0.0447376 + -1.77727 0.448527 1.15856 -0.429328 -0.85716 -0.284526 + -1.83637 0.500213 1.13484 0.00218417 -0.947644 -0.319322 + -1.64747 0.455233 1.33715 0.287165 -0.957778 0.0140231 + -1.7011 0.453737 1.34454 0.320589 -0.944677 0.0693361 + -1.64082 0.465398 1.40414 -0.00173264 -0.981346 -0.192241 + -1.70716 0.451032 1.41863 0.746003 -0.553233 -0.370692 + -1.73843 0.424595 1.22141 0.0774129 -0.99613 -0.0416256 + -1.48839 0.408059 1.43006 -0.449636 -0.874282 -0.182915 + -1.60783 0.439747 1.46897 -0.101088 -0.935032 -0.339847 + -1.67675 0.424968 1.47897 0.194083 -0.932887 -0.303405 + -1.74448 0.42189 1.2955 0.226335 -0.973954 -0.0136437 + -1.7944 0.430866 1.22575 -0.355016 -0.914442 -0.194316 + -1.417 0.365191 1.40291 -0.655971 -0.738087 -0.157892 + -1.46206 0.367494 1.51932 -0.475959 -0.842572 -0.252063 + -1.57742 0.413598 1.52926 -0.208755 -0.932572 -0.294502 + -1.67259 0.411655 1.55043 0.289223 -0.867086 -0.4056 + -1.76926 0.424379 1.37059 0.07764 -0.991337 -0.105937 + -1.37475 0.319144 1.37606 -0.432593 -0.810749 -0.394397 + -1.39068 0.324625 1.49217 -0.770867 -0.619188 -0.149566 + -1.38133 0.290225 1.57975 -0.80906 -0.568873 -0.147665 + -1.43898 0.324733 1.62698 -0.483201 -0.844856 -0.229641 + -1.46494 0.348315 1.57954 -0.318927 -0.898098 -0.302829 + -1.2514 0.260562 1.46153 0.119277 -0.827592 -0.548511 + -1.36742 0.271559 1.45088 -0.587021 -0.731977 -0.345856 + -1.35807 0.237154 1.53847 -0.627426 -0.748182 -0.215778 + -1.38355 0.264554 1.67781 -0.780556 -0.606511 -0.151251 + -1.44119 0.299154 1.72508 -0.4835 -0.852908 -0.196913 + -1.26555 0.307234 1.38929 0.20303 -0.746738 -0.633372 + -1.03236 0.181381 1.67547 0.111045 -0.884332 -0.453459 + -1.01916 0.153671 1.75087 0.0721301 -0.93162 -0.356205 + -1.24407 0.212977 1.53635 0.0391076 -0.894326 -0.445704 + -1.23482 0.182879 1.61828 -0.0921612 -0.951509 -0.293492 + -1.04651 0.228051 1.60324 0.241731 -0.787234 -0.5673 + -0.878998 0.208596 1.69633 0.14939 -0.785803 -0.600164 + -0.858484 0.160513 1.75982 0.0567368 -0.871973 -0.486255 + -0.845283 0.132889 1.83526 -0.0105737 -0.911851 -0.410385 + -1.00992 0.123663 1.83285 0.0085355 -0.954924 -0.296728 + -1.06378 0.27098 1.53688 0.263569 -0.738922 -0.620101 + -0.896263 0.251439 1.62993 0.203733 -0.725197 -0.65771 + -0.771005 0.252727 1.6505 -0.00640396 -0.731077 -0.682265 + -0.750491 0.20473 1.71403 -0.0403855 -0.772602 -0.633605 + -0.72341 0.149105 1.77358 -0.0860938 -0.840909 -0.534285 + -1.24913 0.397413 1.31329 0.361401 -0.602578 -0.71154 + -1.0356 0.296588 1.52593 0.350375 -0.646162 -0.678021 + -0.912573 0.310585 1.57489 0.271502 -0.633978 -0.724126 + -0.793357 0.317255 1.59913 0.0353987 -0.640977 -0.766743 + -1.05431 0.350224 1.46823 0.383147 -0.593471 -0.707806 + -0.93128 0.364226 1.51718 0.310855 -0.586365 -0.748028 + -0.809666 0.376401 1.54409 0.0933004 -0.592463 -0.800177 + -0.703249 0.385732 1.53053 -0.17649 -0.557519 -0.811186 + -0.673794 0.323089 1.57323 -0.223171 -0.642032 -0.733478 + -0.937526 0.429652 1.47146 0.339301 -0.527993 -0.778523 + -0.810899 0.450873 1.5015 0.117863 -0.513104 -0.850196 + -0.704481 0.460204 1.48794 -0.227218 -0.464816 -0.855756 + -0.574079 0.336989 1.51655 -0.356712 -0.633116 -0.686965 + -0.544624 0.274352 1.55925 -0.322191 -0.722232 -0.612024 + -0.817145 0.516216 1.45572 0.204672 -0.489189 -0.847823 + -0.719093 0.531891 1.45677 -0.106355 -0.390648 -0.914376 + -0.62273 0.398818 1.48366 -0.502321 -0.597337 -0.62519 + -0.513597 0.336729 1.48201 -0.539356 -0.746407 -0.389835 + -0.464946 0.27499 1.51494 -0.272045 -0.728313 -0.628929 + -0.694037 0.610589 1.42586 -0.185737 -0.324988 -0.9273 + -0.637341 0.470503 1.4525 -0.425363 -0.39714 -0.813232 + -0.556858 0.379338 1.4482 -0.387109 -0.551252 -0.739099 + -0.411498 0.244197 1.49247 -0.500021 -0.860111 0.100936 + -0.344818 0.220911 1.52321 -0.278767 -0.909458 -0.308503 + -0.66784 0.546321 1.43458 -0.824893 -0.380433 -0.418118 + -0.587357 0.455156 1.43028 -0.713086 -0.493871 -0.497594 + -0.454759 0.286808 1.45867 -0.542028 -0.820163 -0.183132 + -0.378843 0.25661 1.45817 -0.0156217 -0.773723 -0.633332 + -0.316716 0.227436 1.4939 0.0254412 -0.781327 -0.623603 + -0.665138 0.627934 1.40642 -0.480783 -0.237754 -0.843991 + -0.620104 0.518944 1.3988 -0.643216 -0.356192 -0.67779 + -0.506451 0.320803 1.41179 -0.673958 -0.726159 -0.135919 + -0.430534 0.290693 1.41134 -0.0206024 -0.743793 -0.668092 + -0.608345 0.598784 1.37451 -0.895837 -0.231059 -0.37959 + -0.539198 0.384677 1.38036 -0.758753 -0.614424 -0.216279 + -0.475534 0.339011 1.37125 -0.0499525 -0.602305 -0.796701 + -0.359348 0.340435 1.42019 0.321289 -0.322209 -0.89048 + -0.311006 0.293472 1.45073 0.260868 -0.434924 -0.861852 + -0.617936 0.632074 1.35425 -0.959442 -0.174028 -0.221776 + -0.585745 0.435954 1.33994 -0.852909 -0.519024 -0.0562139 + -0.522081 0.390288 1.33083 -0.172224 -0.660943 -0.730406 + -0.404348 0.388668 1.38004 0.378828 -0.364832 -0.850521 + -0.618333 0.70856 1.35137 -0.695973 -0.0389876 -0.717009 + -0.607887 0.547783 1.32225 -0.921173 -0.209015 -0.328258 + -0.595336 0.469246 1.31968 -0.853359 -0.256599 -0.453802 + -0.553227 0.446257 1.2989 -0.225587 -0.371602 -0.900568 + -0.438301 0.447908 1.33823 0.348344 -0.377143 -0.858149 + -0.608283 0.624181 1.31932 -0.972663 0.0112533 -0.231947 + -0.604949 0.61793 1.29995 -0.942718 -0.0709479 -0.325958 + -0.579984 0.587683 1.26814 -0.649754 -0.342972 -0.678372 + -0.565778 0.524706 1.30142 -0.373989 -0.315839 -0.871997 + -0.469447 0.503789 1.30625 0.214758 -0.460341 -0.861374 + -0.593646 0.769686 1.2893 -0.926238 -0.201482 0.318573 + -0.604988 0.683732 1.27398 -0.973907 -0.224224 0.0350467 + -0.580023 0.653486 1.24217 -0.753327 -0.396395 -0.524757 + -0.52019 0.609442 1.22065 -0.28038 -0.542816 -0.791667 + -0.505983 0.546464 1.25393 -0.0549415 -0.64068 -0.76584 + -0.614421 0.825336 1.27931 -0.019841 -0.183826 -0.982758 + -0.625762 0.739297 1.26394 -0.675628 -0.202438 0.708904 + -0.65049 0.735117 1.22337 -0.742742 -0.665145 0.0769174 + -0.583397 0.700325 1.18764 -0.578078 -0.706451 -0.408353 + -0.524591 0.665486 1.16738 -0.266571 -0.722343 -0.638092 + -0.750817 0.830245 1.15141 -0.594226 -0.793715 0.130048 + -0.656362 0.772864 1.1512 -0.50883 -0.812218 -0.285295 + -0.589269 0.73807 1.11546 -0.475727 -0.802918 -0.359176 + -0.527966 0.712325 1.11285 -0.231629 -0.835416 -0.498426 + -0.761403 0.847206 1.07903 -0.478168 -0.862449 -0.165942 + -0.666948 0.789911 1.07887 -0.427857 -0.882308 -0.196139 + -0.58677 0.76533 1.04744 -0.384727 -0.868118 -0.313617 + -0.528096 0.742561 1.04268 -0.172658 -0.91587 -0.362452 + -0.865264 0.89818 1.02414 -0.863132 0.183568 0.470432 + -2.40148 2.26853 0.27863 -0.855898 0.261633 -0.446079 + -2.35498 2.26205 0.193641 -0.818023 0.283417 -0.500513 + -2.38615 2.4128 0.262939 -0.879792 -0.0017056 -0.475355 + -2.33965 2.40641 0.178006 -0.814221 -0.000115831 -0.580555 + -2.41009 2.47716 0.302859 -0.871212 -0.0786176 -0.48457 + -2.40968 2.60772 0.270929 -0.856088 -0.135507 -0.498749 + -2.33398 2.58486 0.15232 -0.826289 -0.139883 -0.545599 + -2.31542 2.48829 0.153996 -0.689462 -0.100011 -0.717384 + -2.24517 2.41248 0.067503 -0.806713 -0.0430281 -0.589375 + -2.49718 2.52572 0.438165 -0.866028 -0.0962787 -0.490637 + -2.49677 2.65627 0.406242 -0.870145 -0.128671 -0.4757 + -2.43035 2.76938 0.249128 -0.859047 -0.138095 -0.492918 + -2.35465 2.74652 0.130519 -0.833927 -0.147293 -0.531856 + -2.54182 2.49645 0.525851 -0.888186 -0.0924913 -0.450078 + -2.58091 2.74515 0.544287 -0.888185 -0.120127 -0.443505 + -2.49429 2.81905 0.355288 -0.87711 -0.114313 -0.466488 + -2.47963 2.97629 0.295346 -0.872185 -0.0770665 -0.483067 + -2.41569 2.92662 0.189185 -0.854615 -0.0783679 -0.513314 + -2.60116 2.6108 0.624196 -0.89595 -0.110302 -0.43024 + -2.68695 2.89679 0.71864 -0.900823 -0.106143 -0.421013 + -2.66019 3.0171 0.63406 -0.896377 -0.086915 -0.434689 + -2.57843 2.90803 0.493386 -0.885997 -0.104187 -0.451834 + -2.54816 3.04584 0.411292 -0.880319 -0.0648228 -0.469933 + -2.7072 2.76244 0.798549 -0.908201 -0.119095 -0.401231 + -2.76845 3.07492 0.860518 -0.915771 -0.081857 -0.393273 + -2.74168 3.19523 0.775939 -0.910102 -0.0631682 -0.409541 + -2.70095 3.29493 0.677653 -0.893609 -0.0381599 -0.447222 + -2.62992 3.15491 0.551967 -0.885189 -0.04706 -0.462846 + -2.72096 2.63579 0.876315 -0.912156 -0.104979 -0.396169 + -2.81207 2.84551 1.03226 -0.921891 -0.106169 -0.372619 + -2.79831 2.97216 0.954499 -0.924879 -0.10066 -0.366696 + -2.84357 3.31723 0.997227 -0.933814 -0.0304933 -0.356456 + -2.80086 3.39498 0.886163 -0.924031 -0.0232215 -0.381612 + -2.75872 2.54239 0.975684 -0.913895 -0.0672549 -0.400341 + -2.837 2.73734 1.12262 -0.919997 -0.0929037 -0.380755 + -2.90994 3.12542 1.19425 -0.93675 -0.0493234 -0.346507 + -2.87343 3.21447 1.09121 -0.935326 -0.0433438 -0.351122 + -2.89598 3.56679 1.14817 -0.953682 0.0275757 -0.299551 + -2.78123 2.41982 1.05658 -0.931449 -0.0280248 -0.362791 + -2.85952 2.61477 1.20352 -0.925594 -0.0867182 -0.36845 + -2.93487 3.01725 1.2846 -0.941858 -0.0638603 -0.329887 + -2.96473 3.39293 1.3569 -0.962692 0.0326232 -0.268627 + -2.92822 3.48207 1.25391 -0.957043 0.0321749 -0.288154 + -2.81256 2.32573 1.13535 -0.939687 -0.0201803 -0.34144 + -2.88121 2.50385 1.29123 -0.934029 -0.0814847 -0.347778 + -2.96272 2.92172 1.38686 -0.947394 -0.0625004 -0.313907 + -3.02043 3.20382 1.55945 -0.976259 0.0130221 -0.216214 + -2.99258 3.29926 1.45715 -0.969218 0.0229619 -0.245131 + -2.84567 2.22835 1.24362 -0.941299 -0.00359974 -0.337555 + -2.91431 2.40647 1.3995 -0.948569 -0.0835005 -0.305359 + -2.98441 2.8109 1.47462 -0.955763 -0.0713432 -0.285355 + -2.87667 2.11855 1.3206 -0.952512 0.0394207 -0.30194 + -2.93623 2.33865 1.51157 -0.961664 -0.0740546 -0.264042 + -2.99463 2.69059 1.5504 -0.962682 -0.0881337 -0.255882 + -3.05017 2.98744 1.73523 -0.989332 -0.0291787 -0.142728 + -3.03994 3.10766 1.65941 -0.98569 -0.00413942 -0.16852 + -2.91676 2.11445 1.45989 -0.959711 0.0316562 -0.279202 + -2.97632 2.33456 1.65087 -0.978085 -0.0789315 -0.192666 + -3.01655 2.62285 1.66252 -0.980868 -0.105634 -0.163521 + -2.95481 2.09748 1.58589 -0.972261 0.0237855 -0.232688 + -2.99255 2.32319 1.78795 -0.986442 -0.0465786 -0.15736 + -3.01529 2.55297 1.78236 -0.990024 -0.106132 -0.0926679 + -3.0561 2.83204 1.959 -0.996434 -0.0761684 -0.0362971 + -3.05736 2.90192 1.83917 -0.99577 -0.0602179 -0.0693919 + -2.98303 2.14159 1.73209 -0.989139 -0.039658 -0.141534 + -3.02077 2.3673 1.93415 -0.994754 -0.0769954 -0.0673586 + -3.03153 2.54161 1.91944 -0.994429 -0.079158 -0.0696074 + -2.93726 1.8551 1.51631 -0.982642 -0.154902 -0.10208 + -2.99574 2.15389 1.85579 -0.989668 -0.143212 0.00682483 + -3.01987 2.36333 2.07983 -0.987959 -0.142507 0.0602385 + -3.02892 2.52052 2.06117 -0.996994 -0.0773228 0.00494252 + -2.96054 1.88031 1.66985 -0.978932 -0.204185 -0.000654397 + -2.97736 2.1481 2.00502 -0.959616 -0.245991 0.136477 + -3.00149 2.35754 2.22905 -0.970838 -0.212374 0.111225 + -3.02802 2.51664 2.20689 -0.992721 -0.112198 0.0437818 + -3.05121 2.75296 2.22377 -0.994911 -0.0964525 0.0291278 + -2.9046 1.70027 1.54007 -0.866205 -0.499639 0.00702912 + -2.92564 1.84141 1.81123 -0.890258 -0.401248 0.215501 + -2.94247 2.1092 2.14639 -0.939378 -0.310889 0.14463 + -2.97441 2.31554 2.36321 -0.958614 -0.251129 0.134142 + -3.01751 2.4999 2.34988 -0.982392 -0.159453 0.097373 + -2.78394 1.59132 1.59758 -0.787785 -0.605424 0.113386 + -2.75872 1.58567 1.72018 -0.831279 -0.534721 0.151817 + -2.87938 1.69462 1.66267 -0.793194 -0.584787 0.169904 + -2.82662 1.79901 2.02526 -0.876113 -0.44198 0.192559 + -2.74542 1.52447 1.57417 -0.864803 -0.467161 0.184059 + -2.70084 1.45524 1.60888 -0.870726 -0.459715 0.174635 + -2.68044 1.42697 1.65945 -0.904854 -0.420712 0.0651221 + -2.67129 1.41559 1.73735 -0.91534 -0.397516 0.0642925 + -2.67396 1.43037 1.80435 -0.919041 -0.39083 0.0511448 + -2.69898 1.49683 1.84245 -0.910748 -0.407124 0.0692 + -2.70609 1.36395 1.48141 -0.791284 -0.472552 0.388026 + -2.66486 1.33239 1.50287 -0.812307 -0.468514 0.347351 + -2.64446 1.30412 1.55343 -0.939658 -0.326793 0.101235 + -2.62412 1.24978 1.68276 -0.954804 -0.291127 0.05995 + -2.61496 1.2384 1.76067 -0.948755 -0.301912 0.0933429 + -2.64442 1.24894 1.44861 -0.814684 -0.398577 0.421219 + -2.6239 1.22028 1.49886 -0.951316 -0.279558 0.129792 + -2.60356 1.16593 1.62819 -0.958683 -0.274484 0.0747332 + -2.57155 1.11526 1.79054 -0.947149 -0.301288 0.110158 + -2.60791 1.25902 1.86534 -0.939972 -0.329724 0.0879468 + -2.59824 1.09167 1.44121 -0.950671 -0.246932 0.187746 + -2.56943 1.00822 1.47854 -0.935792 -0.340606 0.0909984 + -2.57475 1.08248 1.66552 -0.949045 -0.301088 0.0930595 + -2.52548 0.975537 1.80256 -0.912902 -0.377776 0.15458 + -2.5645 1.13589 1.89522 -0.938668 -0.307645 0.155745 + -2.52091 0.910412 1.57756 -0.911048 -0.401822 0.092363 + -2.52867 0.942755 1.67753 -0.917669 -0.388548 0.0831501 + -2.45901 0.838753 1.79127 -0.815526 -0.553404 0.169296 + -2.45238 0.870138 1.88291 -0.831487 -0.506998 0.227117 + -2.51609 1.00412 1.90324 -0.902943 -0.38792 0.184963 + -2.51029 0.860121 1.45466 -0.898337 -0.434165 0.0670126 + -2.45187 0.773464 1.59656 -0.867058 -0.486056 0.109362 + -2.45124 0.806408 1.69129 -0.872684 -0.466425 0.144465 + -2.35716 0.768187 1.95149 -0.82638 -0.469243 0.3113 + -2.35053 0.799572 2.04313 -0.757813 -0.613114 0.223182 + -2.49949 0.828385 1.35403 -0.890069 -0.450992 0.0661992 + -2.44107 0.741642 1.49587 -0.857665 -0.509839 0.0668962 + -2.37738 0.689151 1.77499 -0.824916 -0.540635 0.165009 + -2.37676 0.722098 1.86973 -0.877664 -0.387375 0.282216 + -2.53911 0.88031 1.14569 -0.92035 -0.384449 0.071797 + -2.49044 0.791906 1.25421 -0.888431 -0.451782 0.0811384 + -2.42665 0.707026 1.40663 -0.863806 -0.497431 0.0800094 + -2.37651 0.663807 1.68489 -0.822636 -0.554232 0.126872 + -2.53166 0.838905 1.05261 -0.91301 -0.40319 0.0620577 + -2.48424 0.761973 1.15306 -0.875184 -0.477214 0.0795046 + -2.42046 0.677093 1.30547 -0.829327 -0.55385 0.0739398 + -2.36209 0.629193 1.59564 -0.780686 -0.619751 0.0802384 + -2.56023 0.901679 0.978482 -0.973021 -0.223459 -0.0574181 + -2.54015 0.858694 0.912934 -0.935028 -0.312015 -0.168429 + -2.51634 0.799821 0.971907 -0.894208 -0.446819 -0.0272932 + -2.46893 0.722889 1.07235 -0.856475 -0.511347 0.0705366 + -2.39861 0.638763 1.21626 -0.814999 -0.574484 0.0757926 + -2.53861 0.896836 0.880669 -0.960877 -0.111013 -0.253756 + -2.51454 0.823445 0.866386 -0.919587 -0.373631 -0.12149 + -2.49074 0.764572 0.925359 -0.887821 -0.454023 -0.0750764 + -2.45263 0.684515 0.975821 -0.851662 -0.523362 0.0276422 + -2.38231 0.600476 1.11978 -0.78982 -0.609055 0.0723661 + -2.52809 0.923916 0.840764 -0.942134 0.0156036 -0.334874 + -2.52028 0.852697 0.830319 -0.955498 -0.204132 -0.212964 + -2.49906 0.810617 0.786604 -0.941473 -0.221403 -0.254182 + -2.49332 0.781365 0.822671 -0.927539 -0.364063 -0.0844333 + -2.48104 0.747248 0.863964 -0.914465 -0.403719 -0.0276527 + -2.50975 0.879778 0.790414 -0.921391 -0.0226009 -0.387978 + -2.48254 0.845314 0.738309 -0.899068 -0.0321586 -0.436625 + -2.47901 0.76723 0.747753 -0.921246 -0.263998 -0.285677 + -2.47308 0.737895 0.783763 -0.903785 -0.408652 -0.127182 + -2.4608 0.703778 0.825056 -0.890975 -0.450108 -0.0597247 + -2.4625 0.80184 0.699408 -0.879635 -0.0610529 -0.471714 + -2.45367 0.732083 0.713031 -0.869966 -0.371918 -0.323783 + -2.44773 0.702748 0.74904 -0.819459 -0.524584 -0.230865 + -2.43712 0.665621 0.797747 -0.850379 -0.495211 -0.177827 + -2.44294 0.667191 0.914427 -0.870124 -0.492801 -0.00557889 + -2.40083 0.774758 0.610516 -0.726129 -0.024312 -0.687128 + -2.44697 0.756048 0.678323 -0.864056 -0.192797 -0.465013 + -2.42472 0.700478 0.684772 -0.78797 -0.521589 -0.327182 + -2.41327 0.679273 0.7131 -0.734305 -0.631986 -0.247767 + -2.40265 0.642147 0.761806 -0.808713 -0.441402 -0.388778 + -2.36064 0.744002 0.573184 -0.72022 -0.10465 -0.685807 + -2.41802 0.724444 0.650064 -0.791102 -0.314027 -0.524923 + -2.39664 0.676451 0.657788 -0.753974 -0.552474 -0.35538 + -2.38518 0.655246 0.686115 -0.781181 -0.571712 -0.2508 + -2.29095 0.754305 0.50994 -0.591253 0.155886 -0.791277 + -2.29897 0.667007 0.517945 -0.74976 -0.244727 -0.614791 + -2.3376 0.653831 0.596767 -0.74753 -0.434721 -0.502211 + -2.37782 0.693687 0.612733 -0.711692 -0.378537 -0.591781 + -2.35641 0.636681 0.641871 -0.759225 -0.502721 -0.413339 + -2.15795 0.743773 0.426982 -0.358854 0.368239 -0.857685 + -2.13163 0.660542 0.387545 -0.441128 0.14915 -0.884964 + -2.22928 0.677311 0.4547 -0.605838 0.0213153 -0.795302 + -2.19049 0.596965 0.432463 -0.654034 -0.283244 -0.701436 + -2.25055 0.615227 0.490032 -0.718078 -0.437556 -0.541211 + -2.06893 0.717615 0.389289 -0.0168169 0.44988 -0.89293 + -2.04261 0.634297 0.349801 -0.0356685 0.264495 -0.963727 + -2.03077 0.576074 0.342247 -0.0478531 -0.0217802 -0.998617 + -2.09283 0.580194 0.365307 -0.450414 -0.079126 -0.889307 + -1.94933 0.565779 0.362676 0.617395 -0.0383686 -0.785717 + -2.0216 0.483798 0.359073 0.03749 -0.57505 -0.817259 + -2.08366 0.48792 0.382134 -0.501791 -0.444887 -0.74181 + -2.13465 0.524988 0.431131 -0.724638 -0.520652 -0.451466 + -2.19471 0.54325 0.4887 -0.681666 -0.526662 -0.507896 + -1.9883 0.45298 0.409452 0.417605 -0.705126 -0.573065 + -2.06513 0.433022 0.407219 -0.264069 -0.739561 -0.619126 + -2.11612 0.470089 0.456215 -0.721532 -0.570265 -0.39267 + -1.89848 0.453085 0.542671 0.793456 -0.534458 -0.291174 + -1.91972 0.415229 0.60264 0.571507 -0.803509 -0.166594 + -2.00954 0.415124 0.469421 0.202572 -0.93421 -0.293626 + -2.08196 0.418872 0.489529 -0.407875 -0.873911 -0.26442 + -1.95867 0.386642 0.672753 0.371757 -0.922483 -0.104025 + -2.02637 0.400974 0.55173 0.016649 -0.980646 -0.195081 + -2.05472 0.382269 0.629927 -0.0656474 -0.97698 -0.202979 + -2.11198 0.414983 0.555663 -0.52412 -0.81267 -0.254686 + -2.14614 0.466201 0.522352 -0.628522 -0.668658 -0.397311 + -1.91275 0.418999 0.82971 0.693866 -0.719589 0.0272241 + -1.98702 0.367937 0.750949 0.331112 -0.939201 -0.0909184 + -2.02519 0.351912 0.827106 0.188981 -0.979275 -0.0728461 + -2.07224 0.36711 0.717184 -0.12392 -0.976833 -0.174473 + -2.12951 0.399824 0.64292 -0.396362 -0.887535 -0.234903 + -1.90422 0.465659 1.09489 0.82056 -0.557494 -0.126022 + -1.9357 0.390763 0.900615 0.652078 -0.757994 0.0154749 + -1.97387 0.374737 0.976771 0.532508 -0.844279 -0.0602339 + -2.04494 0.342123 0.90966 0.25723 -0.959014 -0.118847 + -2.092 0.357321 0.799737 -0.324932 -0.943242 -0.0686484 + -1.8535 0.482553 1.20203 0.205393 -0.902307 -0.379019 + -1.90727 0.422201 1.15736 0.796622 -0.575877 -0.183737 + -1.92036 0.393833 1.2301 0.775941 -0.59943 -0.196465 + -1.98696 0.346454 1.04956 0.585345 -0.799063 -0.137366 + -2.05528 0.326128 0.991967 -0.126362 -0.987207 -0.0972343 + -1.81918 0.433355 1.30084 -0.0277061 -0.977844 -0.207493 + -1.85654 0.439093 1.2645 0.513435 -0.79257 -0.328965 + -1.87002 0.41583 1.3378 0.528912 -0.806925 -0.262914 + -1.92652 0.351051 1.2894 0.706499 -0.678503 -0.20123 + -1.9973 0.330459 1.13187 0.387721 -0.911763 -0.135499 + -1.83267 0.410092 1.37414 0.0622999 -0.986552 -0.151107 + -1.84235 0.406737 1.45075 0.396169 -0.916194 -0.0603194 + -1.87618 0.373049 1.39709 0.738808 -0.658861 -0.141651 + -1.93117 0.334753 1.36423 0.335112 -0.942016 0.0174829 + -1.76511 0.411152 1.4421 0.132338 -0.981785 -0.13633 + -1.7748 0.407712 1.51866 -0.0291195 -0.993767 -0.107607 + -1.85045 0.398633 1.52138 0.425075 -0.904203 -0.0415591 + -1.88427 0.364945 1.46773 0.483536 -0.871073 0.0861698 + -1.65583 0.378339 1.60973 -0.0143902 -0.950904 -0.30915 + -1.65108 0.366233 1.6813 -0.134821 -0.972098 -0.191959 + -1.77005 0.395607 1.59022 -0.0856149 -0.99261 -0.0860006 + -1.85122 0.398926 1.59928 0.155597 -0.985889 0.0617382 + -1.58031 0.394507 1.58953 -0.163262 -0.903683 -0.395856 + -1.56355 0.361189 1.64884 -0.21887 -0.914201 -0.341076 + -1.53758 0.337601 1.69629 -0.246375 -0.942465 -0.225963 + -1.64358 0.352119 1.74875 -0.24884 -0.961295 -0.11828 + -1.77082 0.395987 1.66817 -0.194979 -0.98054 -0.0229125 + -1.53008 0.323491 1.76373 -0.269889 -0.945882 -0.180189 + -1.53293 0.308826 1.84893 -0.293583 -0.952625 -0.0794605 + -1.64093 0.345863 1.82318 -0.306584 -0.950613 -0.048381 + -1.76818 0.389645 1.74255 -0.183639 -0.979459 -0.0832907 + -1.85945 0.40399 1.6747 0.194425 -0.980656 -0.0226389 + -1.44405 0.284483 1.8103 -0.501312 -0.847054 -0.176596 + -1.53307 0.306576 1.92143 -0.37376 -0.920959 -0.110176 + -1.64107 0.343527 1.89563 -0.283628 -0.956871 -0.0628742 + -1.771 0.382386 1.81952 -0.197358 -0.977344 -0.0764759 + -1.86227 0.396732 1.75168 -0.060034 -0.998192 0.00308328 + -1.38511 0.244046 1.77334 -0.795532 -0.578955 -0.178715 + -1.45856 0.269326 1.90935 -0.542716 -0.823284 -0.166318 + -1.46891 0.259892 1.99509 -0.49757 -0.851334 -0.166296 + -1.54342 0.297141 2.00717 -0.394842 -0.906355 -0.150401 + -1.64148 0.337272 1.96966 -0.270629 -0.954985 -0.121503 + -1.35462 0.194096 1.72325 -0.634296 -0.754835 -0.16701 + -1.39962 0.228884 1.8724 -0.709918 -0.687838 -0.151312 + -1.39166 0.208942 1.93914 -0.703805 -0.706451 -0.0747323 + -1.40439 0.215415 2.01313 -0.633085 -0.761753 -0.137605 + -1.35305 0.21461 1.62772 -0.622323 -0.765293 -0.164442 + -1.2298 0.160337 1.70752 -0.152031 -0.962783 -0.223464 + -1.22831 0.141582 1.79381 -0.177832 -0.965211 -0.191688 + -1.34899 0.176277 1.81411 -0.554387 -0.819961 -0.142548 + -1.34103 0.156335 1.88086 -0.523057 -0.840986 -0.1384 + -1.01064 0.104507 1.91102 -0.0511396 -0.973439 -0.223163 + -1.00914 0.085758 1.9973 -0.0735815 -0.977959 -0.195401 + -1.0238 0.072506 2.07605 -0.103697 -0.982693 -0.153494 + -1.22268 0.123849 1.88472 -0.17623 -0.96992 -0.167921 + -0.828999 0.095944 1.90606 -0.083087 -0.935663 -0.342975 + -0.829722 0.076875 1.98428 -0.116355 -0.965344 -0.233608 + -0.833452 0.058511 2.06169 -0.0812208 -0.97989 -0.182262 + -0.848105 0.045259 2.14045 -0.0470974 -0.992081 -0.116435 + -1.02656 0.061384 2.16131 -0.143608 -0.985868 -0.0862618 + -0.707126 0.112246 1.84442 -0.10426 -0.876729 -0.469548 + -0.685094 0.06822 1.91427 -0.102666 -0.928156 -0.357752 + -0.688824 0.049855 1.99168 -0.0446493 -0.992636 -0.112609 + -0.70527 0.051219 2.07712 0.0129491 -0.999305 -0.0349546 + -0.594742 0.15241 1.74105 -0.0968202 -0.826016 -0.555269 + -0.573582 0.116783 1.81176 -0.0538481 -0.892294 -0.448233 + -0.55155 0.072756 1.88162 0.0649407 -0.921598 -0.382675 + -0.549722 0.058582 1.96297 0.0975851 -0.991879 -0.0815633 + -0.621823 0.208035 1.68151 -0.180549 -0.784136 -0.593745 + -0.450434 0.140476 1.73692 -0.0949033 -0.904495 -0.41579 + -0.429275 0.104849 1.80763 -0.0286014 -0.96104 -0.274927 + -0.42024 0.092654 1.88995 0.0786705 -0.97761 -0.195165 + -0.418412 0.078475 1.97131 0.123636 -0.988986 -0.0813699 + -0.651443 0.258561 1.6246 -0.18797 -0.717513 -0.670703 + -0.475349 0.171371 1.66461 -0.195166 -0.877559 -0.437951 + -0.325697 0.165847 1.65678 -0.00118046 -0.927848 -0.372958 + -0.300782 0.134952 1.72909 0.0606308 -0.935267 -0.348712 + -0.289261 0.11663 1.80043 0.0949077 -0.971575 -0.216876 + -0.504969 0.221988 1.60774 -0.245306 -0.762138 -0.599142 + -0.372127 0.188644 1.6019 -0.0691583 -0.825454 -0.560216 + -0.172667 0.169411 1.65301 0.0849025 -0.946659 -0.310851 + -0.140145 0.15994 1.71921 0.135867 -0.958466 -0.250766 + -0.128624 0.141613 1.79056 0.163049 -0.953283 -0.254294 + -0.411782 0.241094 1.55345 -0.280466 -0.850581 -0.444803 + -0.219097 0.192294 1.59817 0.0299338 -0.97964 -0.198516 + -0.077383 0.188657 1.64287 0.293998 -0.882087 -0.368085 + -0.044861 0.179094 1.70903 0.399989 -0.873307 -0.278107 + -0.291654 0.187008 1.56173 -0.247922 -0.960947 0.122945 + -0.185978 0.19434 1.55923 0.213793 -0.883714 -0.416344 + -0.113421 0.19954 1.59562 0.26995 -0.830748 -0.48681 + -0.023065 0.212553 1.65228 0.253661 -0.949396 -0.18521 + -0.250036 0.204145 1.52465 0.117748 -0.750248 -0.650587 + -0.108752 0.245665 1.55153 0.421344 -0.548282 -0.722396 + -0.059102 0.223437 1.60503 0.443465 -0.633577 -0.63397 + 0.023071 0.212553 1.65228 -0.232932 -0.931158 -0.280512 + -0.023065 0.214616 1.66891 0.49486 -0.868783 -0.0181345 + -0.17281 0.255556 1.517 0.31142 -0.477568 -0.821552 + -0.094316 0.306883 1.5237 0.490621 -0.118273 -0.863309 + -0.066104 0.284205 1.55838 0.622683 -0.326266 -0.711208 + -0.016455 0.26198 1.61187 0.347317 -0.362888 -0.864687 + -0.24888 0.264298 1.48646 0.270889 -0.499393 -0.822937 + -0.170386 0.315624 1.49316 0.336756 -0.410803 -0.847252 + -0.044666 0.359282 1.56194 0.40639 -0.713754 -0.57044 + -0.016455 0.33661 1.59661 0.298498 -0.480461 -0.824655 + -0.224871 0.336079 1.46153 0.290301 -0.375165 -0.880328 + -0.044666 0.372658 1.50717 0.175735 -0.837016 -0.518191 + 0.044666 0.372658 1.50717 -0.244256 -0.774419 -0.583622 + 0.044666 0.359282 1.56194 -0.486855 -0.713556 -0.503796 + 0.016455 0.33661 1.59661 -0.298489 -0.480461 -0.824658 + -0.273213 0.382957 1.43094 0.31134 -0.226667 -0.92287 + -0.099152 0.393027 1.47549 0.170834 -0.570332 -0.803454 + 0.044471 0.592403 1.28836 -0.0305786 -0.70551 -0.70804 + -0.338859 0.425044 1.39604 0.398628 -0.302546 -0.865772 + -0.214573 0.417707 1.45135 0.176207 -0.273014 -0.945735 + -0.171573 0.58754 1.30419 0.0149532 -0.710869 -0.703165 + -0.056152 0.56286 1.32833 -0.04853 -0.678418 -0.733072 + -0.372812 0.484198 1.35418 0.452908 -0.369414 -0.811423 + -0.28022 0.459794 1.41645 0.243815 -0.448458 -0.859907 + -0.222009 0.62574 1.26182 0.00246949 -0.699496 -0.714633 + -0.056152 0.989814 0.876228 -0.0716674 -0.711215 -0.699312 + 0.044471 1.01944 0.836308 -0.251443 -0.770222 -0.586118 + -0.405591 0.540158 1.30665 0.424081 -0.468904 -0.77478 + -0.330656 0.497994 1.37408 0.300375 -0.501479 -0.811353 + -0.280438 0.691045 1.20391 -0.191637 -0.620482 -0.760446 + -0.114581 1.05512 0.818315 0.0988504 -0.841224 -0.531573 + -0.442128 0.582833 1.25434 0.42768 -0.547012 -0.71963 + -0.363435 0.553954 1.32656 0.257175 -0.53453 -0.805071 + -0.28423 0.755168 1.16405 0.0341988 -0.690832 -0.722206 + -0.367227 0.618077 1.2867 0.124615 -0.557305 -0.820903 + -0.380763 0.667435 1.2396 0.311923 -0.630579 -0.710686 + -0.293968 0.803753 1.11209 0.0529057 -0.772095 -0.633301 + -0.455664 0.632193 1.20725 0.328751 -0.596318 -0.732344 + -0.460065 0.688236 1.15398 0.354125 -0.721347 -0.595193 + -0.468769 0.724255 1.09359 0.28326 -0.843411 -0.456533 + -0.3905 0.71602 1.18765 0.350846 -0.698669 -0.623513 + -0.399204 0.752039 1.12726 0.432839 -0.791565 -0.431365 + -0.30355 0.842645 1.03113 0.46646 -0.822832 -0.324598 + -0.468899 0.754491 1.02342 0.212639 -0.948744 -0.233814 + -0.462394 0.767838 0.951901 0.0608051 -0.973128 -0.222091 + -0.419837 0.762911 1.05283 0.40376 -0.89112 -0.207083 + -0.324183 0.853516 0.956702 0.213502 -0.976913 0.00758949 + -0.305268 0.847475 0.879167 0.729367 -0.676845 0.0995277 + -0.124163 1.09392 0.737303 0.388621 -0.907413 -0.159923 + -0.525597 0.769822 0.974665 -0.243091 -0.908593 -0.339655 + -0.436888 0.782429 0.890828 -0.118575 -0.980616 -0.155989 + -0.413333 0.776258 0.981316 0.431472 -0.900803 -0.0488351 + -0.58699 0.789665 0.976497 -0.337743 -0.894964 -0.291494 + -0.500091 0.784326 0.913543 -0.186117 -0.94779 -0.258949 + -0.405465 0.790071 0.823591 -0.165292 -0.977783 -0.128911 + -0.394417 0.770217 0.903782 0.213678 -0.975171 0.0581723 + -0.667167 0.814158 1.00787 -0.381927 -0.881872 -0.276467 + -0.566088 0.802553 0.906574 -0.288792 -0.926904 -0.239682 + -0.479189 0.797301 0.843669 -0.191591 -0.965331 -0.177281 + -0.357763 0.788004 0.755173 0.0895674 -0.964573 -0.248148 + -0.362994 0.777859 0.836545 0.310881 -0.950424 0.00686539 + -0.754306 0.855908 0.997757 -0.475686 -0.857574 -0.195679 + -0.74951 0.875033 0.919634 -0.471692 -0.831234 -0.294206 + -0.662371 0.833281 0.929749 -0.378801 -0.892376 -0.245307 + -0.554784 0.816955 0.832629 -0.302037 -0.918025 -0.256912 + -0.431487 0.795234 0.775251 -0.188452 -0.962806 -0.193622 + -0.821812 0.89354 1.03638 -0.296111 -0.916493 -0.268996 + -0.814715 0.902242 0.955106 -0.670643 -0.703059 -0.236528 + -0.800184 0.935 0.882766 -0.58176 -0.723686 -0.37126 + -0.75087 0.903341 0.841204 -0.535807 -0.785773 -0.308985 + -0.651067 0.847683 0.855804 -0.395862 -0.870878 -0.291316 + -0.838622 0.960135 0.881234 -0.166581 -0.88348 -0.437852 + -0.824091 0.992893 0.808894 0.0105744 -0.763329 -0.645923 + -0.796283 1.05165 0.751717 -0.464893 -0.547181 -0.696037 + -0.801544 0.963308 0.804335 -0.893126 -0.344565 -0.289137 + -0.738356 0.929695 0.768755 -0.514745 -0.696352 -0.500132 + -0.880516 0.967757 0.849032 0.0764414 -0.84054 -0.53633 + -0.864227 1.02491 0.785246 -0.0796097 -0.684865 -0.724308 + -0.836419 1.08358 0.728018 -0.177641 -0.52834 -0.830241 + -0.775011 1.09626 0.700851 0.219363 -0.404125 -0.888011 + -0.780272 1.008 0.75352 -0.739608 -0.361515 -0.567703 + -0.912504 1.00652 0.803684 -0.229923 -0.662436 -0.712961 + -0.925344 1.0704 0.75084 -0.381783 -0.518897 -0.764844 + -0.908048 1.13717 0.722007 -0.292062 -0.270252 -0.917422 + -0.819123 1.15034 0.699185 -0.115459 -0.125561 -0.985344 + -0.735288 1.17414 0.702162 -0.574918 -0.0112688 -0.818134 + -1.02022 1.0493 0.8338 -0.420134 -0.335859 -0.843022 + -1.0018 1.08846 0.824958 -0.490644 -0.316394 -0.811889 + -1.01464 1.15234 0.772115 -0.69356 -0.413412 -0.589971 + -1.00783 1.21606 0.740161 -0.498853 -0.246026 -0.831034 + -0.899154 1.20921 0.706027 -0.175162 -0.039471 -0.983748 + -1.15449 1.25662 0.841506 0.565143 0.0883656 -0.820247 + -1.13607 1.2957 0.832614 -0.18194 -0.360993 -0.914649 + -1.10714 1.32608 0.795797 -0.534369 -0.406833 -0.740903 + -1.10033 1.38979 0.763843 -0.296152 -0.327334 -0.897299 + -1.20934 1.39286 0.775928 0.847249 0.0204626 -0.530802 + -1.237 1.53076 0.60848 0.714429 -0.153688 -0.68262 + -1.24213 1.58922 0.591819 0.565643 -0.179735 -0.804825 + -1.21447 1.45124 0.759218 0.991328 0.0526531 -0.1204 + -1.33145 1.63145 0.543685 -0.543737 -0.839083 -0.0170354 + -1.33145 1.63145 0.543685 0.378768 -0.222766 -0.898282 + -1.21447 1.45124 0.759218 -0.379993 -0.544417 -0.747807 + -1.09286 1.46508 0.743649 0.0027724 -0.227357 -0.973807 + -0.998936 1.2881 0.724181 -0.320784 -0.129488 -0.938259 + -1.18281 1.61753 0.660593 0.275143 -0.564068 -0.77854 + -1.06473 1.5217 0.727976 -0.27238 -0.469576 -0.839826 + -0.970805 1.34472 0.708509 -0.0359701 -0.0326016 -0.998821 + -0.894772 1.27125 0.713167 -0.0207977 0.145216 -0.989181 + -0.7794 1.22822 0.700495 -0.199746 0.0276441 -0.979458 + -1.1712 1.6447 0.623927 -0.24367 -0.832528 -0.497517 + -1.00422 1.52625 0.67009 -0.00280247 -0.480093 -0.877213 + -0.932428 1.43269 0.737749 0.381381 -0.0696506 -0.92179 + -0.856396 1.35913 0.742356 0.168024 0.308933 -0.936124 + -0.775018 1.29018 0.707586 -0.0104874 0.387028 -0.922008 + -1.27714 1.73384 0.366533 -0.374423 -0.912398 -0.165342 + -0.799592 1.37863 0.763184 0.241643 0.326155 -0.91391 + -1.3723 1.80029 0.286041 -0.627611 -0.711864 0.315205 + -1.39582 1.80824 0.253663 -0.46484 -0.795354 -0.389019 + -1.45718 1.86782 0.25627 -0.503789 -0.747313 -0.433266 + -1.41241 1.88004 0.223108 -0.297405 -0.475482 -0.827929 + -1.35106 1.82046 0.2205 -0.0313051 -0.583739 -0.811338 + -1.56568 1.92661 0.343843 -0.551292 -0.823554 -0.133553 + -1.54235 1.92454 0.276228 -0.472824 -0.880222 -0.040572 + -1.52271 1.90991 0.211972 -0.234054 -0.95291 -0.192823 + -1.42618 1.90793 0.206006 -0.0561791 -0.788695 -0.612213 + -1.66635 1.9747 0.290952 -0.535822 -0.817738 0.210239 + -1.64671 1.96007 0.226696 -0.464553 -0.880411 0.095215 + -1.61945 1.92603 0.158052 -0.33048 -0.940355 -0.0807135 + -1.50248 1.93303 0.158131 0.00728966 -0.929354 -0.369119 + -1.40595 1.93105 0.152166 0.15712 -0.870197 -0.466981 + -1.77158 2.02597 0.179548 -0.621402 -0.783101 -0.0247466 + -1.73583 2.03045 0.142996 -0.460332 -0.859672 -0.221492 + -1.80703 2.10814 -0.067965 0.195607 -0.7968 -0.571706 + -2.12832 2.55027 -0.13397 -0.689854 -0.160919 -0.705838 + -2.17394 2.66979 -0.105973 -0.750962 -0.0705465 -0.656566 + -2.25662 2.70147 -0.002845 -0.79765 -0.14991 -0.584194 + -2.18378 2.5777 -0.062271 -0.804477 -0.150715 -0.574545 + -2.26645 2.60929 0.040805 -0.813158 -0.171333 -0.556254 + -2.2479 2.5128 0.042531 -0.820598 -0.153481 -0.550511 + -2.37571 3.04191 0.113286 -0.832983 -0.0400175 -0.55185 + -2.38088 3.25584 0.119155 -0.810771 0.0473385 -0.583446 + -2.25132 3.25444 -0.035226 -0.721731 0.0259835 -0.691686 + -2.43932 3.14098 0.203898 -0.84968 -0.0239841 -0.526753 + -2.44382 3.3279 0.219741 -0.842178 0.0874708 -0.532058 + -2.28491 3.35096 0.002008 -0.765119 0.0445854 -0.642344 + -2.17411 3.43345 -0.107079 -0.704157 0.035426 -0.70916 + -2.14052 3.33694 -0.144314 -0.664055 0.0142197 -0.747548 + -2.50785 3.21052 0.319844 -0.873912 0.00319087 -0.486073 + -2.51801 3.37872 0.359921 -0.851918 0.0551105 -0.520766 + -2.44711 3.46454 0.261678 -0.830247 0.0761797 -0.552166 + -2.34785 3.42302 0.102595 -0.819047 0.111565 -0.562775 + -2.26119 3.51529 -0.00802 -0.771448 0.0498969 -0.634333 + -2.58204 3.26134 0.460024 -0.873316 -0.00277948 -0.487147 + -2.59962 3.50006 0.490758 -0.846954 0.00289049 -0.531659 + -2.52873 3.58587 0.392516 -0.832929 -0.00277913 -0.553372 + -2.47465 3.68253 0.300103 -0.840098 -0.0532368 -0.539816 + -2.36046 3.55681 0.151055 -0.830931 0.00181216 -0.556373 + -2.65306 3.40136 0.58571 -0.871641 -0.0167948 -0.489857 + -2.66362 3.68599 0.593915 -0.867821 -0.00513404 -0.49685 + -2.61641 3.79249 0.510856 -0.857105 -0.0178233 -0.514833 + -2.56234 3.88914 0.418443 -0.853785 -0.0404341 -0.519052 + -2.71706 3.58728 0.688875 -0.893354 -0.0102524 -0.449236 + -2.73856 3.90859 0.73135 -0.907438 2.0857e-005 -0.420185 + -2.69136 4.01509 0.648292 -0.887157 -0.00997291 -0.461361 + -2.64914 4.11155 0.555025 -0.884528 -0.0275563 -0.465673 + -2.51631 3.99197 0.330737 -0.859935 -0.0475704 -0.508182 + -2.76012 3.49468 0.787875 -0.91455 -0.016034 -0.404154 + -2.81888 3.72601 0.929804 -0.940141 0.00992018 -0.340642 + -2.77582 3.81861 0.830804 -0.928393 0.00401201 -0.371577 + -2.80241 4.17046 0.902182 -0.94793 0.00487846 -0.318442 + -2.77019 4.2544 0.796595 -0.932733 0.00112957 -0.360565 + -2.85327 3.64454 1.03711 -0.947445 0.0200021 -0.319293 + -2.86699 4.00351 1.11354 -0.965229 0.0167854 -0.260867 + -2.83967 4.08039 1.00158 -0.956757 0.00987816 -0.29072 + -2.83456 4.40331 1.01987 -0.964107 0.0603643 -0.258562 + -2.90137 3.92205 1.22085 -0.96863 0.0299047 -0.246702 + -2.89466 4.25686 1.24234 -0.975151 0.0444389 -0.217036 + -2.86733 4.33374 1.13038 -0.972457 0.0521519 -0.227171 + -2.92656 3.84275 1.33099 -0.972578 0.0410079 -0.228934 + -2.9469 4.10375 1.46152 -0.978346 0.0458449 -0.201833 + -2.92172 4.18305 1.35138 -0.978451 0.0445725 -0.201611 + -2.89572 4.50276 1.32343 -0.974935 0.149329 -0.164933 + -2.8645 4.56131 1.20821 -0.969388 0.161899 -0.184596 + -2.95881 3.75803 1.43673 -0.973203 0.0538567 -0.22355 + -2.97224 4.01901 1.5641 -0.979032 0.0505875 -0.197327 + -2.94816 4.34934 1.53556 -0.981947 0.124941 -0.14202 + -2.92278 4.42895 1.43246 -0.980037 0.133249 -0.147557 + -2.85402 4.73817 1.43067 -0.949257 0.295463 -0.10776 + -2.98331 3.6646 1.53557 -0.977377 0.0574731 -0.203548 + -2.99674 3.92558 1.66294 -0.97907 0.0488919 -0.197565 + -2.9735 4.26459 1.63814 -0.981855 0.125075 -0.142537 + -2.90846 4.59979 1.64576 -0.967813 0.247346 -0.046447 + -2.88307 4.67932 1.54261 -0.961713 0.263951 -0.0737469 + -3.01117 3.57084 1.63576 -0.979552 0.0589202 -0.192371 + -3.0208 3.83789 1.76322 -0.981289 0.0477542 -0.186525 + -2.99948 4.17727 1.73478 -0.982301 0.120258 -0.143604 + -2.95514 4.4525 1.85547 -0.970935 0.235756 -0.0412756 + -2.92916 4.53973 1.75878 -0.96645 0.254427 -0.0352258 + -3.03359 3.47522 1.73278 -0.985593 0.0485326 -0.162024 + -3.04323 3.74227 1.86023 -0.985333 0.0410416 -0.165636 + -3.02354 4.08968 1.8351 -0.98447 0.117686 -0.130267 + -3.0531 3.37906 1.83273 -0.990131 0.0334703 -0.136087 + -3.06252 3.66391 1.96755 -0.990077 0.0307512 -0.137123 + -3.04636 4.01302 1.94028 -0.98691 0.115826 -0.112223 + -2.99596 4.31437 2.09793 -0.971905 0.23494 -0.0142546 + -2.97314 4.39094 1.99271 -0.970877 0.237901 -0.0283056 + -3.06928 3.30294 1.94597 -0.995183 0.00961897 -0.097564 + -3.0787 3.58771 2.08074 -0.995121 0.0150453 -0.0975064 + -3.06565 3.93467 2.04759 -0.990221 0.104895 -0.0919771 + -3.07647 3.21742 2.04991 -0.997908 -0.0162816 -0.0625671 + -3.08895 3.52185 2.21422 -0.998323 -0.000920435 -0.0578908 + -3.0818 3.87102 2.16324 -0.993673 0.0951125 -0.0597268 + -3.0344 4.15634 2.33024 -0.974326 0.223808 0.0244825 + -3.01826 4.2199 2.21454 -0.973043 0.230585 -0.00422352 + -3.08109 3.14025 2.16597 -0.99861 -0.0419668 -0.0319002 + -3.09356 3.44468 2.33028 -0.999739 -0.0187587 -0.0130365 + -3.09204 3.80515 2.29671 -0.996723 0.0797864 -0.0133175 + -3.05381 2.77414 2.08209 -0.996405 -0.084485 -0.00629648 + -3.0788 3.08234 2.28906 -0.997644 -0.0664127 0.0172218 + -3.08929 3.3725 2.4613 -0.998404 -0.0420702 0.037683 + -3.09588 3.72791 2.47051 -0.997261 0.0645251 0.0361433 + -3.06812 3.01108 2.40629 -0.994893 -0.0861612 0.0525723 + -3.07861 3.30131 2.57859 -0.994863 -0.05994 0.0815805 + -3.09161 3.65564 2.60148 -0.995924 0.0343002 0.0834155 + -3.04793 4.00287 2.62426 -0.976937 0.187824 0.101568 + -3.04409 4.0802 2.45051 -0.977306 0.203266 0.059628 + -3.03966 2.71913 2.35896 -0.992734 -0.104479 0.0596978 + -3.05657 2.97725 2.54149 -0.990005 -0.0999076 0.0995394 + -3.0629 3.26618 2.70544 -0.989233 -0.0753762 0.125446 + -3.07773 3.62876 2.73185 -0.99218 0.0308193 0.120949 + -3.02916 2.70248 2.502 -0.985016 -0.130322 0.112954 + -3.03511 2.96217 2.67901 -0.981701 -0.116037 0.150994 + -3.04144 3.2511 2.84297 -0.98389 -0.0914496 0.153614 + -3.06202 3.59362 2.8587 -0.990392 0.018643 0.137027 + -3.02245 3.93634 2.89569 -0.971203 0.17576 0.160849 + -2.99042 2.45789 2.48404 -0.965662 -0.205132 0.159428 + -3.00339 2.67289 2.63705 -0.970397 -0.162974 0.178237 + -3.00934 2.93258 2.81406 -0.97263 -0.138556 0.186526 + -3.01648 3.21906 2.97146 -0.974828 -0.114358 0.191399 + -3.04423 3.55852 2.9869 -0.986437 0.00130627 0.164133 + -2.93387 2.23435 2.47923 -0.94443 -0.28361 0.166182 + -2.9537 2.39974 2.60716 -0.950611 -0.233367 0.204643 + -2.96667 2.61474 2.76017 -0.954502 -0.196147 0.224615 + -2.97642 2.9104 2.94847 -0.956968 -0.16692 0.237381 + -2.98356 3.19688 3.10587 -0.963389 -0.139286 0.229087 + -2.90194 2.0281 2.26247 -0.92667 -0.353867 0.126728 + -2.83818 1.92807 2.39192 -0.922833 -0.360306 0.136231 + -2.88684 2.14071 2.57242 -0.931236 -0.309609 0.192202 + -2.90666 2.30602 2.7003 -0.934106 -0.263819 0.240509 + -2.92343 2.55214 2.87299 -0.93494 -0.22638 0.273201 + -2.76286 1.69898 2.15471 -0.925325 -0.372706 0.0697392 + -2.70903 1.55131 2.28208 -0.92923 -0.35873 0.0885699 + -2.78184 1.79753 2.44243 -0.922195 -0.356699 0.149407 + -2.83049 2.01008 2.62288 -0.920057 -0.332534 0.207163 + -2.72062 1.56338 1.99899 -0.923537 -0.378857 0.0595535 + -2.66678 1.41571 2.12635 -0.930263 -0.361337 0.0636041 + -2.59055 1.28583 2.30111 -0.882091 -0.442249 0.162268 + -2.63475 1.40743 2.3743 -0.892844 -0.411875 0.182176 + -2.70756 1.65364 2.53465 -0.904637 -0.381123 0.190729 + -2.78036 1.65222 1.87671 -0.844322 -0.508604 0.168649 + -2.65077 1.36379 2.06668 -0.930127 -0.363955 0.0489987 + -2.57454 1.23391 2.24143 -0.869265 -0.472003 0.146941 + -2.62574 1.29734 2.02858 -0.905831 -0.423349 0.015689 + -2.57253 1.20236 2.14269 -0.874843 -0.477347 0.0824048 + -2.49688 1.14894 2.35241 -0.797846 -0.577688 0.172392 + -2.47789 1.15753 2.47854 -0.801425 -0.551778 0.230782 + -2.52209 1.27912 2.55174 -0.844095 -0.454112 0.285106 + -2.61058 1.2738 1.93234 -0.91332 -0.407003 0.013949 + -2.55736 1.17874 2.0464 -0.89168 -0.449123 0.0565332 + -2.49804 1.0787 2.15467 -0.845913 -0.49919 0.187725 + -2.49487 1.11739 2.25366 -0.811537 -0.547891 0.203034 + -2.3746 1.0412 2.47782 -0.737199 -0.640993 0.213693 + -2.54855 1.13661 1.98176 -0.923823 -0.352456 0.149419 + -2.48922 1.03649 2.08999 -0.867064 -0.450973 0.211715 + -2.3982 0.9821 2.26839 -0.763188 -0.589093 0.265543 + -2.39503 1.02079 2.36737 -0.778268 -0.575211 0.251857 + -2.50013 1.00485 1.98979 -0.886277 -0.414869 0.205907 + -2.42456 0.923891 2.07661 -0.818905 -0.496968 0.287082 + -2.41365 0.955533 2.1768 -0.774064 -0.567695 0.280263 + -2.26307 0.891843 2.39772 -0.675971 -0.708013 0.204404 + -2.24738 0.891026 2.48613 -0.692788 -0.696211 0.187975 + -2.44299 0.898732 1.98359 -0.831434 -0.499844 0.242637 + -2.31965 0.836749 2.22674 -0.825006 -0.373394 0.424195 + -2.27852 0.865364 2.30618 -0.762481 -0.50065 0.409844 + -2.17378 0.795248 2.41202 -0.706789 -0.56219 0.429408 + -2.14557 0.806572 2.49401 -0.640421 -0.739745 0.206492 + -2.33809 0.811585 2.13373 -0.774895 -0.582227 0.246066 + -2.24336 0.743201 2.25177 -0.697289 -0.652148 0.297474 + -2.21492 0.766726 2.33263 -0.734153 -0.481645 0.478578 + -2.08783 0.74786 2.47611 -0.730279 -0.512078 0.452181 + -2.05961 0.759091 2.55805 -0.647539 -0.745887 0.156029 + -2.2558 0.73119 2.16118 -0.735008 -0.629485 0.252016 + -2.15809 0.695136 2.32363 -0.73305 -0.570873 0.369785 + -2.12965 0.71866 2.40448 -0.748755 -0.436536 0.498801 + -2.04338 0.641992 2.48507 -0.808803 -0.352878 0.470442 + -2.00156 0.671104 2.55665 -0.828498 -0.321208 0.458713 + -2.26814 0.703118 2.0762 -0.789196 -0.499355 0.357509 + -2.17751 0.671424 2.24169 -0.752863 -0.576913 0.316809 + -2.09016 0.602344 2.32814 -0.763927 -0.578689 0.285542 + -2.07074 0.626055 2.41008 -0.79726 -0.480614 0.365221 + -2.28774 0.657029 1.99443 -0.73705 -0.571119 0.361359 + -2.18985 0.643355 2.15671 -0.711715 -0.641943 0.285256 + -2.10681 0.59144 2.24863 -0.729728 -0.642076 0.235023 + -1.99277 0.524004 2.43263 -0.735676 -0.640561 0.220141 + -1.97127 0.522689 2.50491 -0.780389 -0.54591 0.304918 + -2.29048 0.621709 1.9102 -0.667492 -0.702247 0.247594 + -2.18733 0.613612 2.07243 -0.620495 -0.73439 0.27506 + -2.1043 0.561692 2.16436 -0.701603 -0.679374 0.214952 + -2.00942 0.513183 2.35318 -0.71777 -0.668456 0.194866 + -2.28961 0.596452 1.82015 -0.687799 -0.695352 0.208371 + -2.19008 0.578291 1.98821 -0.628913 -0.714082 0.307498 + -2.11079 0.542994 2.08414 -0.708206 -0.657741 0.256555 + -2.03023 0.518534 2.27931 -0.65453 -0.739604 0.156767 + -2.28026 0.562414 1.73771 -0.679328 -0.714799 0.166061 + -2.18691 0.539241 1.90664 -0.6342 -0.724581 0.269764 + -2.10762 0.50394 2.00259 -0.640231 -0.724305 0.255904 + -2.03672 0.499833 2.1991 -0.65951 -0.726239 0.193967 + -2.24905 0.521653 1.65891 -0.684254 -0.716505 0.135709 + -2.17756 0.505198 1.82421 -0.630668 -0.737194 0.242493 + -2.10575 0.4792 1.92564 -0.631569 -0.735123 0.246405 + -2.05096 0.495578 2.12347 -0.484012 -0.859925 0.162056 + -2.33088 0.588432 1.51684 -0.744028 -0.663789 0.0762042 + -2.22442 0.481562 1.57934 -0.694638 -0.708134 0.126589 + -2.17066 0.469328 1.74214 -0.635417 -0.740743 0.218051 + -2.09886 0.44333 1.84357 -0.486876 -0.838458 0.244825 + -2.0491 0.470745 2.04648 -0.495894 -0.846812 0.19235 + -2.30903 0.550103 1.42763 -0.750388 -0.655746 0.0831516 + -2.18976 0.4357 1.50058 -0.672905 -0.732342 0.104283 + -2.14603 0.429243 1.66256 -0.598331 -0.778142 0.191037 + -2.08491 0.41771 1.76634 -0.472304 -0.848543 0.238546 + -2.04536 0.459435 1.97107 -0.214931 -0.962309 0.16663 + -2.27437 0.504326 1.34892 -0.723764 -0.685416 0.0798187 + -2.16101 0.400339 1.41963 -0.643431 -0.761764 0.0755844 + -2.12044 0.391848 1.58513 -0.560477 -0.810525 0.170045 + -2.05932 0.380315 1.68891 -0.289083 -0.92232 0.256431 + -2.03142 0.433901 1.89389 -0.251125 -0.944618 0.211263 + -2.3602 0.564961 1.02569 -0.78062 -0.621002 0.0706385 + -2.25227 0.468723 1.25478 -0.697441 -0.713735 0.0644751 + -2.13629 0.374728 1.33399 -0.611773 -0.79012 0.037991 + -2.09168 0.356484 1.50419 -0.52082 -0.840147 0.151325 + -2.03896 0.35597 1.61188 -0.262853 -0.931513 0.251379 + -2.41926 0.62912 0.887167 -0.834734 -0.550042 0.0259435 + -2.33831 0.524184 0.926321 -0.72016 -0.693218 0.0286187 + -2.22755 0.443112 1.16914 -0.636467 -0.77051 0.0349839 + -2.11923 0.35999 1.24832 -0.541833 -0.839667 -0.0370968 + -2.06554 0.327366 1.42382 -0.458538 -0.882794 0.102062 + -2.39736 0.588431 0.787844 -0.834602 -0.523427 -0.171649 + -2.30226 0.493857 0.894251 -0.593066 -0.804758 -0.0252384 + -2.19151 0.412783 1.13707 -0.558935 -0.828683 -0.0295925 + -2.10625 0.362893 1.15849 -0.572301 -0.81804 -0.0572907 + -2.04848 0.312717 1.33819 -0.402113 -0.914284 0.0488823 + -2.36268 0.60947 0.695201 -0.835358 -0.403851 -0.372937 + -2.35739 0.555668 0.72119 -0.776904 -0.546223 -0.313146 + -2.3056 0.499838 0.79589 -0.61471 -0.786615 -0.0580366 + -2.17853 0.415688 1.04724 -0.503147 -0.861923 -0.0627045 + -2.33391 0.590818 0.650907 -0.78666 -0.467235 -0.403555 + -2.28997 0.514976 0.652872 -0.713512 -0.619832 -0.326663 + -2.23818 0.459146 0.727572 -0.593176 -0.802481 -0.0645463 + -2.18187 0.421669 0.948884 -0.550253 -0.834858 -0.0153152 + -2.2873 0.572308 0.595769 -0.741835 -0.45959 -0.48832 + -2.24336 0.496377 0.597683 -0.680646 -0.579164 -0.448654 + -2.19667 0.44916 0.60447 -0.539142 -0.767248 -0.347357 + -2.20274 0.435055 0.681698 -0.580149 -0.805973 -0.117619 + -0.713836 1.20864 0.668001 -0.550473 0.327647 -0.767872 + -0.76307 1.05071 0.687555 -0.865885 -0.130153 -0.483015 + -0.721154 0.972399 0.702789 -0.591722 -0.587199 -0.552325 + -0.718215 1.30967 0.728414 0.224483 0.627249 -0.745766 + -0.687688 1.26297 0.695711 0.126179 0.626822 -0.768878 + -0.703623 1.13731 0.60416 -0.764048 0.101558 -0.637116 + -0.741618 1.08512 0.653345 -0.824341 -0.0358251 -0.564958 + -0.667994 1.35128 0.798747 -0.0132149 0.405154 -0.914153 + -0.637467 1.30458 0.766045 -0.553887 0.636284 -0.536984 + -0.677474 1.19172 0.63192 -0.755109 0.497765 -0.426661 + -0.793653 1.40654 0.767637 0.0632094 -0.107809 -0.99216 + -0.662055 1.37911 0.803149 -0.456809 -0.424754 -0.781607 + -0.631551 1.33229 0.770247 -0.955349 -0.0691095 -0.287285 + -0.671558 1.21943 0.636123 -0.987962 0.15401 -0.01459 + -0.664457 1.19884 0.575777 -0.801503 0.195911 -0.564988 + -0.831875 1.44489 0.765211 0.345372 0.232124 -0.909305 + -0.694071 1.41874 0.7437 -0.588084 -0.77514 -0.230902 + -0.663568 1.37192 0.710797 -0.897815 -0.419413 0.134243 + -0.656467 1.35125 0.650401 -0.909617 0.1083 -0.401084 + -0.814632 1.53065 0.792667 -0.0193719 -0.0446855 -0.998813 + -0.732294 1.45709 0.741273 -0.556268 -0.16247 -0.814966 + -0.797789 1.57132 0.771423 -0.486179 -0.653187 -0.580497 + -0.715451 1.49768 0.71998 -0.61024 -0.151298 -0.777635 + -0.649712 1.43033 0.669226 -0.703279 0.12038 -0.700647 + -0.60316 1.24951 0.528621 -0.626123 0.163761 -0.762333 + -0.939812 1.7023 0.659365 0.0514114 -0.616467 -0.7857 + -0.097276 1.11213 0.652366 0.640076 -0.765317 -0.0677761 + -0.05827 1.15812 0.604717 0.522918 -0.597341 -0.608063 + -0.069667 1.21195 0.547068 0.540397 -0.65274 -0.530944 + -0.037458 1.25754 0.527104 0.277973 -0.849107 -0.449164 + 0.037461 1.25754 0.527104 -0.287828 -0.866197 -0.408483 + 0.069674 1.21195 0.547068 -0.617967 -0.651894 -0.439489 + 0.106297 0.963787 0.855306 -0.302552 -0.778666 -0.549675 + 0.159893 0.617168 1.26427 -0.00018195 -0.723562 -0.690259 + -0.278381 0.865595 0.794182 0.793877 -0.57517 0.19733 + -0.196947 0.932788 0.689999 0.825396 -0.522807 0.213058 + -0.157942 0.978861 0.642399 0.827801 -0.522574 0.204111 + -0.241614 0.889583 0.738233 0.791228 -0.560691 0.244097 + -0.288895 0.827734 0.717356 0.635839 -0.771518 -0.0216514 + -0.244228 0.870942 0.669121 0.68001 -0.727993 -0.0872503 + -0.219008 0.907592 0.615839 0.652838 -0.737088 -0.174652 + -0.121262 1.0174 0.600437 0.971148 -0.221631 -0.0880376 + -0.120096 1.10255 0.623764 0.401105 -0.241361 -0.883663 + -0.326227 0.801761 0.780547 0.626899 -0.775722 0.0724724 + -0.320431 0.813893 0.691933 0.276914 -0.917187 -0.286508 + -0.309675 0.843907 0.623746 0.234508 -0.872709 -0.428234 + -0.284455 0.880559 0.570464 0.325062 -0.838464 -0.437394 + -0.405103 0.809844 0.705145 -0.138438 -0.935576 -0.324859 + -0.394347 0.839772 0.636909 -0.157283 -0.878174 -0.451743 + -0.376098 0.87127 0.570549 -0.117394 -0.848915 -0.515327 + -0.268356 0.921192 0.510285 0.314855 -0.672168 -0.670117 + -0.182329 0.946137 0.573879 0.682998 -0.663204 -0.306064 + -0.5284 0.831478 0.762472 -0.344344 -0.878752 -0.330487 + -0.50752 0.852181 0.689413 -0.351198 -0.839542 -0.414523 + -0.489271 0.88368 0.623056 -0.383332 -0.760798 -0.523682 + -0.464 0.918458 0.559421 -0.396583 -0.667741 -0.629955 + -0.359999 0.911817 0.510322 -0.120931 -0.733906 -0.668399 + -0.638553 0.874038 0.783357 -0.419054 -0.821211 -0.387307 + -0.617673 0.894655 0.710248 -0.459057 -0.761781 -0.457118 + -0.593 0.932484 0.647928 -0.475582 -0.645681 -0.597426 + -0.56773 0.967259 0.584292 -0.516091 -0.555809 -0.651711 + -0.44088 0.967001 0.506741 -0.420403 -0.499455 -0.7575 + -0.696481 1.01014 0.64042 -0.563423 -0.467338 -0.681285 + -0.658486 1.06232 0.591236 -0.555324 -0.366803 -0.746371 + -0.623498 1.11123 0.54193 -0.55144 -0.212606 -0.806668 + -0.532742 1.01616 0.534987 -0.477022 -0.399104 -0.783049 + -0.562201 1.16198 0.494825 -0.467206 -0.0966409 -0.878851 + -0.508158 1.07115 0.493348 -0.449762 -0.267959 -0.852005 + -0.416295 1.0219 0.465053 -0.416386 -0.309639 -0.854837 + -0.336879 0.960448 0.457692 -0.0367639 -0.638476 -0.768764 + -0.248564 0.979545 0.481016 0.439468 -0.591959 -0.675613 + -0.568156 1.31347 0.519837 -0.248861 0.375811 -0.892656 + -0.520369 1.21784 0.473467 -0.0513135 0.205582 -0.977294 + -0.466326 1.12701 0.471992 -0.371089 -0.0715025 -0.92584 + -0.390225 1.08754 0.441956 -0.417755 -0.14868 -0.896312 + -0.312808 1.02384 0.415092 -0.0392679 -0.411501 -0.910563 + -0.596406 1.32859 0.547445 -0.713339 0.233785 -0.660675 + -0.489027 1.27485 0.512732 -0.189612 0.389764 -0.901183 + -0.637336 1.51437 0.650661 -0.734374 -0.0989793 -0.671489 + -0.703075 1.58181 0.701465 -0.470371 -0.510864 -0.719561 + -0.830301 1.58874 0.707658 -0.532356 -0.805434 -0.260524 + -0.972324 1.71963 0.59555 -0.71085 -0.698134 0.0854449 + -0.939812 1.7023 0.659365 -0.746828 -0.631325 0.208988 + -0.434308 1.19784 0.443518 -0.520866 0.0958387 -0.848242 + -0.358207 1.15828 0.413431 -0.286541 0.00440085 -0.958058 + -0.286738 1.0894 0.391946 0.0889776 -0.153882 -0.984075 + -0.194616 1.1096 0.436545 0.700968 -0.218571 -0.678875 + -0.224494 1.04294 0.438416 0.561182 -0.37126 -0.739757 + -0.319542 1.22421 0.413041 -0.147284 0.193216 -0.970039 + -0.258145 1.16068 0.410479 0.18777 0.0261342 -0.981865 + -0.166023 1.18089 0.455079 0.656369 -0.481118 -0.581124 + -0.131493 1.15639 0.566116 0.652731 -0.576033 -0.492066 + -0.161371 1.08963 0.567937 0.866261 -0.13673 -0.480518 + -0.21948 1.22669 0.410138 0.0613259 -0.0554027 -0.996579 + -0.133813 1.22648 0.435115 0.465124 -0.553232 -0.691082 + -0.160933 1.28092 0.40182 0.0291503 0.0203809 -0.999367 + -0.075267 1.2807 0.426797 0.352949 -0.536901 -0.766267 + -0.142705 1.32643 0.422794 -0.375198 0.498522 -0.781475 + -0.103364 1.35168 0.413848 -0.347091 0.0392415 -0.93701 + -0.058157 1.3369 0.399255 0.187623 -0.214952 -0.958433 + -0.037458 1.26966 0.460324 0.0588953 -0.872721 -0.484653 + 0.037461 1.26966 0.460324 -0.29007 -0.794245 -0.533886 + -0.063033 1.41611 0.399059 -0.142519 -0.196359 -0.970119 + -0.020348 1.32586 0.432783 0.231741 -0.401437 -0.886084 + 0.020343 1.32585 0.43279 -0.252983 -0.437843 -0.862724 + 0.07527 1.2807 0.426797 -0.330844 -0.437348 -0.836223 + 0.133816 1.22648 0.435115 -0.443435 -0.563743 -0.696821 + -0.020348 1.3982 0.403079 -0.0271822 -0.33499 -0.94183 + 0.020343 1.3982 0.403087 -0.0815778 -0.250729 -0.964614 + 0.058152 1.3369 0.399263 -0.100473 -0.294318 -0.950412 + 0.103371 1.35168 0.413852 0.347001 0.0392828 -0.937042 + 0.160933 1.28092 0.40182 -0.0430296 0.0255672 -0.998747 + 0.022033 1.47459 0.381164 0.0315029 -0.376409 -0.925918 + 0.063028 1.41611 0.399067 0.169006 -0.152092 -0.973809 + 0.108247 1.43089 0.413656 0.531612 -0.145584 -0.834382 + 0.064718 1.49242 0.377094 0.317126 -0.287932 -0.903618 + 0.124814 1.48874 0.411456 0.582193 -0.194188 -0.789521 + 0.181837 1.41074 0.486163 0.522952 0.0773544 -0.848844 + 0.221193 1.38548 0.495113 0.176339 0.438415 -0.881304 + 0.142727 1.32642 0.422802 0.375128 0.498526 -0.781505 + 0.198404 1.46867 0.484013 0.565244 -0.297728 -0.769323 + 0.283988 1.51739 0.52664 0.324128 -0.22821 -0.918075 + 0.293227 1.44316 0.523606 0.0526546 0.28335 -0.95757 + 0.265505 1.32973 0.449478 0.101272 0.515591 -0.850829 + 0.283711 1.28422 0.428496 0.193634 0.407203 -0.892576 + 0.210234 1.5283 0.447544 0.45081 -0.475953 -0.755142 + 0.295818 1.5771 0.490221 0.573441 -0.301096 -0.76191 + 0.394222 1.62731 0.522844 0.282031 0.0675666 -0.957023 + 0.403461 1.553 0.51976 0.345415 -0.0507179 -0.937078 + 0.280894 1.6451 0.472234 0.739166 -0.170683 -0.651538 + 0.348007 1.70073 0.530481 0.400072 0.060822 -0.914463 + 0.400693 1.81364 0.551913 0.370849 0.089959 -0.924326 + 0.446908 1.74023 0.544275 0.466976 0.122535 -0.875739 + 0.474947 1.67246 0.56804 0.728444 -0.0387595 -0.684008 + 0.333083 1.76874 0.512495 0.694432 -0.0192365 -0.719301 + 0.378274 1.89349 0.544616 0.438766 -0.0111476 -0.898532 + 0.456381 1.94003 0.566206 0.123192 -0.129377 -0.983913 + 0.465267 1.85968 0.587968 0.345129 -0.159922 -0.92483 + 0.493306 1.79201 0.611783 0.563225 -0.139724 -0.814404 + 0.308398 1.84823 0.493807 0.831084 -0.0086162 -0.556081 + 0.353588 1.97298 0.525929 0.663916 -0.133579 -0.73578 + 0.433961 2.01996 0.558959 0.0721653 -0.0444385 -0.996402 + 0.535835 1.97165 0.553246 -0.334563 -0.292087 -0.895965 + 0.363007 2.05692 0.504145 0.824621 -0.263804 -0.500408 + 0.427419 2.11128 0.562997 0.246753 -0.158179 -0.956082 + 0.532117 2.13554 0.526962 -0.490472 -0.188304 -0.850869 + 0.538659 2.04423 0.522924 -0.400579 -0.128175 -0.907253 + 0.436838 2.19521 0.541213 0.324947 -0.561984 -0.760647 + 0.547218 2.19947 0.491443 -0.535375 -0.40146 -0.743104 + 0.675615 2.02754 0.398427 -0.688805 -0.400184 -0.604484 + 0.670734 1.96894 0.458334 -0.572778 -0.40382 -0.71334 + 0.667909 1.89627 0.488606 -0.493779 -0.352755 -0.794825 + 0.579077 2.25846 0.430067 -0.509442 -0.476457 -0.71656 + 0.690716 2.09138 0.362858 -0.705055 -0.124379 -0.698159 + 0.798104 2.04702 0.249884 -0.583926 -0.481146 -0.653857 + 0.815225 2.03678 0.260635 -0.217635 -0.802835 -0.555059 + 0.905681 2.11917 0.074324 -0.677792 0.725881 -0.117028 + -0.157942 0.978861 0.642399 -0.231013 -0.0754603 -0.97002 + -0.162537 1.00449 0.54461 0.784285 -0.254138 -0.565959 + -2.09165 3.45262 -1.04988 -0.0543093 -0.45732 0.887643 + -2.18006 3.48536 -1.04378 -0.0209092 -0.388401 0.921253 + -2.2058 3.68529 -0.95188 -0.2531 -0.394922 0.883163 + -1.97364 3.439 -1.04168 -0.297213 -0.583841 0.755509 + -2.1174 3.65256 -0.957993 -0.258198 -0.660296 0.705225 + -1.86176 3.43631 -0.971036 -0.505425 -0.593745 0.626109 + -2.00552 3.64988 -0.887349 -0.44918 -0.5374 0.71375 + -2.07039 3.82545 -0.818837 -0.506927 -0.317155 0.801522 + -2.14037 3.9084 -0.844915 -0.519915 -0.226356 0.823682 + -2.20152 3.88538 -0.885033 -0.363834 -0.250587 0.897124 + -1.79986 3.5921 -0.782469 -0.625921 -0.509609 0.590357 + -1.86474 3.76767 -0.713957 -0.683507 -0.470865 0.557767 + -1.97612 3.9831 -0.709897 -0.76075 -0.338078 0.554042 + -2.04609 4.06606 -0.735983 -0.608563 -0.297325 0.735697 + -1.58849 3.30425 -0.777901 -0.914295 -0.357266 0.190855 + -1.70671 3.54272 -0.695131 -0.871353 -0.468831 0.144714 + -1.77531 3.6815 -0.637106 -0.88567 -0.455344 0.090835 + -1.92994 3.90122 -0.673683 -0.853646 -0.465011 0.234633 + -1.82364 3.76664 -0.537178 -0.861739 -0.387494 -0.327496 + -1.84051 3.81505 -0.596833 -0.856313 -0.512053 0.0672991 + -1.94943 4.01591 -0.560924 -0.910745 -0.404165 -0.0848185 + -1.99561 4.09788 -0.597096 -0.909061 -0.406266 0.0925032 + -2.03906 4.19652 -0.66155 -0.785931 -0.500045 0.363687 + -1.8582 3.6928 -0.453484 -0.761729 -0.209058 -0.61324 + -1.93577 3.88299 -0.4305 -0.791942 -0.415927 -0.447026 + -1.95263 3.9314 -0.490156 -0.828293 -0.436161 -0.351701 + -2.03259 4.06293 -0.415175 -0.885005 -0.287457 -0.366244 + -2.03936 4.18336 -0.499351 -0.906514 -0.379454 -0.185058 + -1.93562 3.58438 -0.343901 -0.717892 -0.114539 -0.686668 + -2.05642 3.6944 -0.238661 -0.731413 -0.124679 -0.67044 + -1.979 3.80282 -0.348244 -0.727421 -0.218734 -0.650396 + -2.10697 3.8933 -0.246166 -0.759824 -0.172866 -0.626725 + -2.0358 3.97843 -0.344406 -0.821546 -0.21935 -0.526259 + -2.00939 3.36899 -0.249225 -0.661383 -0.0449468 -0.7487 + -2.0522 3.5238 -0.228167 -0.703479 -0.0532264 -0.70872 + -2.13928 3.60563 -0.129109 -0.740915 -0.0352635 -0.670672 + -2.2237 3.73838 -0.061223 -0.757445 -0.109574 -0.643639 + -2.15021 3.81314 -0.163911 -0.761943 -0.159675 -0.627652 + -2.30656 3.64969 0.04838 -0.8004 -0.0724007 -0.595079 + -2.36788 3.86899 0.100744 -0.817208 -0.0760076 -0.571309 + -2.29439 3.94375 -0.001943 -0.790675 -0.0926866 -0.605179 + -2.24075 4.03992 -0.09271 -0.79328 -0.097494 -0.601 + -2.42075 3.77541 0.197428 -0.843604 -0.0850079 -0.530194 + -2.46344 4.08564 0.234104 -0.870739 -0.0700197 -0.486734 + -2.42688 4.18807 0.142888 -0.852323 -0.075422 -0.517549 + -2.37324 4.28423 0.052122 -0.834333 -0.0749794 -0.546139 + -2.55816 4.3135 0.378037 -0.886111 -0.0396392 -0.461775 + -2.5216 4.41592 0.286831 -0.893206 -0.0227285 -0.449073 + -2.47784 4.52184 0.207375 -0.884018 -0.0024716 -0.467446 + -2.34308 4.40835 -0.01565 -0.845198 -0.0911075 -0.52663 + -2.16957 4.12504 -0.190949 -0.795887 -0.110816 -0.595218 + -2.60312 4.21438 0.46731 -0.874776 -0.0297995 -0.483611 + -2.64047 4.54202 0.519619 -0.88904 0.0479407 -0.455313 + -2.586 4.64014 0.436469 -0.893476 0.0723779 -0.443241 + -2.54224 4.74606 0.357013 -0.898797 0.10193 -0.426349 + -2.68542 4.4429 0.6089 -0.906215 0.0169883 -0.422476 + -2.66822 4.75083 0.630958 -0.911901 0.157781 -0.37887 + -2.61376 4.84895 0.547808 -0.900977 0.177215 -0.396023 + -2.55713 4.93932 0.463279 -0.900637 0.193606 -0.389062 + -2.48569 4.84565 0.275923 -0.900593 0.129705 -0.414859 + -2.72797 4.35094 0.703387 -0.915186 0.0102556 -0.402902 + -2.76089 4.56788 0.813234 -0.941275 0.103216 -0.321478 + -2.71834 4.65994 0.718789 -0.9311 0.130438 -0.340644 + -2.65025 4.94789 0.708834 -0.920467 0.267033 -0.285365 + -2.59492 5.03463 0.622196 -0.909378 0.282126 -0.305673 + -2.80234 4.48734 0.914338 -0.958409 0.0835529 -0.272894 + -2.74932 4.77044 0.885785 -0.940867 0.225482 -0.252838 + -2.70037 4.857 0.796664 -0.931207 0.250401 -0.264863 + -2.61138 5.14084 0.817034 -0.911251 0.354851 -0.209049 + -2.79077 4.6899 0.98689 -0.951738 0.206352 -0.227187 + -2.7084 4.97785 0.998734 -0.931745 0.32956 -0.152452 + -2.65944 5.06441 0.909622 -0.921912 0.338252 -0.188848 + -2.83173 4.63089 1.0977 -0.959075 0.189566 -0.210331 + -2.78712 4.84956 1.20634 -0.930227 0.338752 -0.141156 + -2.74616 4.90857 1.09554 -0.931493 0.333064 -0.146247 + -2.63199 5.20228 1.15381 -0.918214 0.393414 -0.0459125 + -2.60005 5.27246 1.05447 -0.912686 0.399923 -0.0840546 + -2.8228 4.79673 1.31545 -0.93772 0.326351 -0.119063 + -2.69677 5.07788 1.34668 -0.905787 0.420403 -0.0530262 + -2.66975 5.13291 1.25057 -0.912907 0.404943 -0.0512024 + -2.53978 5.40978 1.32602 -0.898035 0.439922 0.00130757 + -2.73246 5.02505 1.45579 -0.888433 0.44311 -0.11975 + -2.59562 5.29916 1.50761 -0.885355 0.464805 -0.0101343 + -2.5686 5.35419 1.4115 -0.894304 0.447457 0.00138431 + -2.42323 5.62676 1.5194 -0.818219 0.574298 0.0264345 + -2.50784 5.47996 1.22667 -0.873247 0.486304 -0.0307972 + -2.77865 4.97933 1.56458 -0.901265 0.419155 -0.109685 + -2.66938 5.20707 1.70372 -0.856494 0.513361 -0.0536392 + -2.62319 5.25279 1.59493 -0.859418 0.506552 -0.0693241 + -2.46568 5.52634 1.67394 -0.85751 0.509483 0.071438 + -2.45206 5.57117 1.60488 -0.859907 0.502524 0.0896057 + -2.80769 4.92047 1.67653 -0.93074 0.365679 0.00157322 + -2.68816 5.16972 1.81502 -0.881842 0.468562 0.0529564 + -2.50869 5.45074 1.83768 -0.820295 0.570351 0.0426088 + -2.49325 5.47997 1.76125 -0.837623 0.544791 0.0398699 + -2.31828 5.7211 1.80079 -0.784604 0.580258 0.218397 + -2.82122 4.86942 1.79256 -0.933617 0.35671 0.0334293 + -2.70169 5.11875 1.9311 -0.89055 0.44423 0.0978837 + -2.55329 5.34863 2.07074 -0.8275 0.544612 0.136531 + -2.52747 5.41347 1.94903 -0.816856 0.569034 0.0945872 + -2.30026 5.70265 1.96015 -0.742642 0.655494 0.137152 + -2.84193 4.80944 1.90563 -0.928767 0.37057 -0.00836971 + -2.71208 5.05683 2.09695 -0.866553 0.493758 0.0727193 + -2.56369 5.28679 2.23664 -0.82575 0.527754 0.199031 + -2.36036 5.57092 2.18392 -0.739523 0.637411 0.21636 + -2.33453 5.63576 2.06221 -0.745054 0.642313 0.1798 + -2.86009 4.78554 2.03663 -0.923899 0.382483 -0.010808 + -2.73024 5.03293 2.22795 -0.788939 0.610517 0.0696004 + -2.58513 5.13559 2.48833 -0.790199 0.568266 0.229475 + -2.41336 5.32076 2.59061 -0.745234 0.597703 0.295596 + -2.39192 5.47197 2.33891 -0.74202 0.614454 0.268054 + -2.87809 4.72406 2.17391 -0.940136 0.337211 0.0493238 + -2.78208 4.9222 2.33093 -0.869903 0.475428 0.13129 + -2.63696 5.02486 2.59132 -0.788866 0.56382 0.244535 + -2.89948 4.61338 2.36022 -0.944468 0.318925 0.079168 + -2.80347 4.81152 2.51723 -0.87635 0.438099 0.200202 + -2.77926 4.7781 2.66272 -0.853893 0.462914 0.237861 + -2.61275 4.99135 2.73675 -0.777742 0.562653 0.280247 + -2.92178 4.51901 2.47688 -0.941396 0.320807 0.104194 + -2.7918 4.70423 2.76488 -0.857363 0.466237 0.218063 + -2.6075 4.91344 2.9007 -0.769537 0.556362 0.313487 + -2.39793 5.14652 2.96539 -0.715766 0.609412 0.341021 + -2.40318 5.22443 2.80145 -0.727052 0.607832 0.319273 + -2.93431 4.44513 2.57904 -0.93877 0.321731 0.123289 + -2.944 4.36891 2.69926 -0.942316 0.300852 0.146728 + -2.82734 4.60859 2.84251 -0.878694 0.435094 0.196444 + -2.64304 4.81781 2.97834 -0.78528 0.53861 0.305343 + -2.93668 4.31809 2.81409 -0.941943 0.287876 0.172833 + -2.82002 4.55769 2.95729 -0.865309 0.411778 0.285796 + -2.76831 4.56016 3.08241 -0.833603 0.455824 0.31198 + -2.59133 4.8202 3.1034 -0.761178 0.551585 0.341118 + -3.03633 3.96322 2.76533 -0.974454 0.17874 0.135982 + -2.92508 4.27844 2.95516 -0.930415 0.302307 0.207214 + -2.75332 4.51485 3.20068 -0.829055 0.476306 0.292917 + -2.56165 4.72498 3.30773 -0.746222 0.550401 0.374448 + -2.91008 4.23313 3.07343 -0.923007 0.310234 0.227627 + -2.89556 4.19064 3.19443 -0.921938 0.304481 0.239418 + -2.77868 4.4125 3.29715 -0.850802 0.436808 0.292122 + -2.58701 4.62271 3.40426 -0.75346 0.533149 0.384772 + -2.35703 4.93946 3.37123 -0.688603 0.6029 0.402911 + -3.00792 3.89376 3.01664 -0.969872 0.166385 0.177947 + -2.99013 3.85874 3.14489 -0.964628 0.158448 0.21068 + -2.88356 4.12758 3.30345 -0.920057 0.276043 0.27802 + -2.76669 4.34953 3.40622 -0.83521 0.402747 0.37446 + -3.01927 3.52656 3.11545 -0.978264 -0.0181472 0.206569 + -2.9702 3.80311 3.25965 -0.957509 0.127008 0.258931 + -2.86364 4.07195 3.41821 -0.903613 0.265969 0.335775 + -2.71835 4.34324 3.50512 -0.804391 0.419175 0.421007 + -2.53868 4.61643 3.50315 -0.738434 0.544643 0.39759 + -2.99093 3.47223 3.23235 -0.966858 -0.0510364 0.250161 + -2.94185 3.7487 3.3765 -0.946037 0.0993097 0.308467 + -2.84152 4.00321 3.52207 -0.890499 0.243175 0.384549 + -2.69623 4.2745 3.60898 -0.813905 0.382305 0.437495 + -2.52007 4.5369 3.64849 -0.73621 0.513257 0.441092 + -2.94526 3.14078 3.22244 -0.947246 -0.168592 0.272583 + -2.95263 3.41614 3.34891 -0.950557 -0.0799189 0.300089 + -2.9106 3.68128 3.48288 -0.930175 0.0592283 0.362306 + -2.81027 3.93579 3.62845 -0.882242 0.215088 0.418791 + -2.65982 4.2023 3.73764 -0.802569 0.364417 0.472316 + -2.93318 2.84781 3.06129 -0.941533 -0.196948 0.273363 + -2.8961 3.06982 3.33155 -0.933504 -0.194095 0.301493 + -2.91085 3.34236 3.45169 -0.934533 -0.111482 0.337964 + -2.86882 3.6075 3.58566 -0.918938 0.0248867 0.393616 + -2.86976 2.44501 2.95194 -0.918618 -0.255853 0.301133 + -2.88402 2.77684 3.17041 -0.922545 -0.225435 0.313192 + -2.82897 2.67436 3.24551 -0.90573 -0.254176 0.339188 + -2.84745 2.98667 3.42657 -0.912453 -0.222497 0.343402 + -2.86219 3.25922 3.54671 -0.929621 -0.13405 0.343271 + -2.85299 2.1988 2.7792 -0.915081 -0.292864 0.277233 + -2.79381 2.07464 2.83085 -0.901153 -0.318168 0.294435 + -2.81471 2.34254 3.02704 -0.900527 -0.281915 0.331021 + -2.77132 1.88583 2.67448 -0.901379 -0.35691 0.245216 + -2.70523 1.74766 2.70259 -0.885211 -0.384821 0.261368 + -2.73262 1.95246 2.88208 -0.885417 -0.343054 0.31361 + -2.75351 2.22044 3.07832 -0.887788 -0.302792 0.346627 + -2.64147 1.51538 2.56272 -0.886635 -0.444319 0.12829 + -2.5387 1.40196 2.66698 -0.848709 -0.455277 0.269102 + -2.63705 1.62676 2.7512 -0.880864 -0.41533 0.227113 + -2.66443 1.83164 2.93074 -0.8636 -0.371295 0.341079 + -2.41932 1.16569 2.65599 -0.757829 -0.486036 0.435274 + -2.27515 1.08933 2.76686 -0.72349 -0.621395 0.300717 + -2.46649 1.2873 2.72756 -0.766638 -0.630721 -0.120241 + -2.56484 1.51211 2.81178 -0.860239 -0.431404 0.271809 + -2.35561 1.04979 2.60395 -0.672192 -0.68579 0.279017 + -2.21144 0.973508 2.71487 -0.721084 -0.577432 0.382898 + -2.10981 0.896364 2.79808 -0.823418 -0.512403 0.243772 + -2.20762 1.03299 2.84985 -0.750614 -0.657077 0.0694844 + -2.39897 1.23088 2.81048 -0.781194 -0.591803 0.198757 + -2.22695 0.911439 2.59657 -0.735958 -0.599618 0.314362 + -2.12532 0.8343 2.67978 -0.71394 -0.635401 0.294203 + -2.07563 0.857085 2.85552 -0.763329 -0.605712 0.224595 + -2.17345 0.993706 2.90729 -0.753335 -0.643149 0.13728 + -2.12988 0.805667 2.58238 -0.656956 -0.733925 0.172516 + -2.03971 0.774912 2.74105 -0.707772 -0.662453 0.245387 + -1.97094 0.723982 2.81546 -0.73055 -0.638569 0.241921 + -2.00686 0.806154 2.92993 -0.72925 -0.638309 0.246488 + -2.04427 0.746279 2.64364 -0.66514 -0.737012 0.120011 + -1.96054 0.673768 2.71784 -0.679722 -0.724682 0.113197 + -1.89341 0.665197 2.89428 -0.741697 -0.621265 0.252815 + -1.92394 0.74449 3.01254 -0.725632 -0.639517 0.253921 + -1.97589 0.68658 2.63224 -0.799499 -0.561566 0.213177 + -1.88301 0.61507 2.7967 -0.813589 -0.496025 0.303368 + -1.82403 0.563674 2.87752 -0.86339 -0.39021 0.319833 + -1.83081 0.619075 2.95577 -0.786076 -0.550375 0.281375 + -1.89952 0.575276 2.72663 -0.856007 -0.363034 0.368046 + -1.84054 0.52388 2.80745 -0.804464 -0.46877 0.364817 + -1.78991 0.540926 2.95392 -0.745189 -0.581831 0.325831 + -1.79669 0.59624 3.03212 -0.765077 -0.50521 0.399274 + -1.9252 0.559805 2.65102 -0.844864 -0.386319 0.370083 + -1.84902 0.490325 2.73637 -0.777631 -0.520484 0.352684 + -1.78719 0.502876 2.88203 -0.665964 -0.658825 0.349917 + -1.73148 0.480153 2.93659 -0.569271 -0.725555 0.386653 + -1.73421 0.51829 3.00853 -0.538427 -0.714791 0.446285 + -1.94391 0.538627 2.57991 -0.804422 -0.471355 0.361564 + -1.86774 0.469151 2.66524 -0.750918 -0.572214 0.329686 + -1.79567 0.469321 2.81095 -0.670839 -0.645173 0.365685 + -1.73252 0.44352 2.86664 -0.572203 -0.725371 0.382648 + -1.88031 0.447599 2.59177 -0.688693 -0.683989 0.240544 + -1.80017 0.435389 2.73712 -0.637175 -0.694699 0.333767 + -1.73702 0.409586 2.79281 -0.552377 -0.75448 0.354455 + -1.66489 0.41602 2.90367 -0.500535 -0.772213 0.391346 + -1.66385 0.452739 2.97367 -0.526799 -0.734419 0.427915 + -1.9018 0.448913 2.5195 -0.717192 -0.665489 0.206787 + -1.81274 0.413835 2.66365 -0.642262 -0.696881 0.319151 + -1.74226 0.381653 2.72039 -0.546807 -0.76448 0.341427 + -1.66729 0.385132 2.83637 -0.458282 -0.815868 0.352615 + -1.91665 0.442788 2.4447 -0.706371 -0.685974 0.174582 + -1.82285 0.386233 2.58806 -0.648848 -0.715846 0.257994 + -1.75237 0.35405 2.6448 -0.477941 -0.833239 0.278003 + -1.67252 0.357199 2.76395 -0.401829 -0.861335 0.310861 + -1.93747 0.448141 2.37083 -0.66322 -0.74147 0.101789 + -1.8377 0.380114 2.51326 -0.618341 -0.771339 0.150635 + -1.75667 0.33829 2.5721 -0.410896 -0.898397 0.155073 + -1.67697 0.338785 2.69304 -0.318146 -0.917909 0.237122 + -1.94748 0.45034 2.29522 -0.652028 -0.747666 0.125917 + -1.84167 0.373013 2.43696 -0.570074 -0.81826 0.0739376 + -1.76064 0.33119 2.4958 -0.392025 -0.916909 0.0747872 + -1.68127 0.323023 2.62034 -0.292781 -0.938828 0.181332 + -1.96172 0.44608 2.2196 -0.545545 -0.835137 0.070196 + -1.85169 0.375125 2.3613 -0.511168 -0.859007 -0.0285292 + -1.75908 0.327635 2.42095 -0.31491 -0.947448 -0.0563375 + -1.68045 0.311597 2.54813 -0.290844 -0.950306 0.111036 + -1.96598 0.448469 2.14407 -0.483277 -0.87237 0.0735853 + -1.84948 0.386313 2.28472 -0.413375 -0.907028 -0.0801349 + -1.75687 0.338735 2.34433 -0.36352 -0.926843 -0.0938897 + -1.67889 0.30813 2.47334 -0.303308 -0.952342 0.0323784 + -1.96224 0.437152 2.06866 -0.373598 -0.925468 0.0627102 + -1.85374 0.388701 2.20919 -0.404561 -0.913232 -0.0483561 + -1.75317 0.342798 2.27029 -0.368158 -0.925502 -0.0889166 + -1.67281 0.301677 2.40131 -0.371055 -0.928604 0.0036374 + -1.9619 0.434756 1.99342 -0.320484 -0.943178 0.0877777 + -1.85671 0.399638 2.13244 -0.326285 -0.943416 -0.0591966 + -1.75615 0.353735 2.19355 -0.37183 -0.923184 -0.0973329 + -1.66911 0.305741 2.32728 -0.361023 -0.930197 -0.0662937 + -1.94478 0.420302 1.91885 -0.242144 -0.966171 0.0887686 + -1.85638 0.397241 2.05719 -0.34773 -0.937278 0.0243521 + -1.75483 0.359828 2.1202 -0.403427 -0.91483 -0.0182605 + -1.66021 0.306524 2.25632 -0.390768 -0.918382 -0.0622521 + -2.01429 0.419449 1.81933 0.000201078 -0.976165 0.217028 + -1.9407 0.415079 1.8431 -0.193123 -0.974072 0.117843 + -1.86792 0.40068 1.98044 -0.27893 -0.960268 0.00916281 + -1.76638 0.363265 2.04344 -0.323562 -0.944997 -0.0478489 + -1.65889 0.312522 2.18293 -0.363883 -0.924314 -0.115032 + -1.99393 0.39519 1.74235 -0.000629854 -0.96888 0.247529 + -1.92829 0.401439 1.76872 -0.0227849 -0.993839 0.108469 + -1.86385 0.395455 1.90469 -0.241658 -0.970327 0.00815342 + -1.76647 0.37023 1.97018 -0.282978 -0.957349 -0.0583555 + -1.64877 0.321744 2.11336 -0.305524 -0.942695 -0.134089 + -2.01282 0.326938 1.53156 -0.00306389 -0.969994 0.243107 + -1.98152 0.381463 1.66792 0.303052 -0.928114 0.216248 + -1.92178 0.39673 1.69228 0.0234258 -0.988778 0.147541 + -1.86879 0.401352 1.82807 -0.0709514 -0.996959 -0.0322347 + -1.77141 0.376127 1.89356 -0.228292 -0.970658 -0.075535 + -1.99759 0.31104 1.4545 0.258246 -0.955681 0.14136 + -1.9663 0.36556 1.59087 0.268162 -0.931293 0.24654 + -1.90934 0.379825 1.61676 0.2331 -0.960014 0.15504 + -1.9927 0.303234 1.36722 0.217083 -0.971962 0.0903619 + -1.95386 0.34866 1.51534 0.303079 -0.937723 0.169764 + -1.90111 0.374766 1.54132 0.321714 -0.936831 0.137285 + -2.04358 0.304913 1.25091 -0.408087 -0.912941 0.00203094 + -1.98685 0.299232 1.28975 0.583597 -0.804124 -0.113135 + -1.94801 0.344573 1.43782 0.417967 -0.900173 0.122445 + -2.10656 0.366408 1.0692 -0.619418 -0.784896 -0.0160926 + -2.04389 0.308428 1.16162 -0.165263 -0.976137 -0.140874 + -2.00195 0.314246 1.20675 0.46818 -0.863876 -0.18581 + -2.10102 0.361741 0.977082 -0.600154 -0.799549 -0.0231476 + -2.05899 0.323441 1.07862 -0.287557 -0.956446 -0.0502304 + -2.17633 0.417002 0.856766 -0.574413 -0.818565 -0.00089604 + -2.14088 0.392912 0.810892 -0.573654 -0.819044 0.00939378 + -2.0973 0.364427 0.890429 -0.593997 -0.804343 -0.0141689 + -2.13557 0.385806 0.720198 -0.454311 -0.884817 -0.103444 + -2.19283 0.513421 0.515565 -0.613024 -0.568446 -0.5487 + -2.28918 0.60205 0.568854 -0.744975 -0.480878 -0.462352 + -1.64886 0.328703 2.0401 -0.300308 -0.947308 -0.111459 + -1.5508 0.28849 2.07756 -0.417531 -0.896406 -0.148742 + -1.56516 0.281293 2.16402 -0.421362 -0.892018 -0.163578 + -1.48961 0.249849 2.09508 -0.498856 -0.852899 -0.153969 + -1.50396 0.242652 2.18155 -0.438085 -0.889565 -0.129441 + -1.57528 0.272073 2.23359 -0.416914 -0.904021 -0.0944887 + -1.58532 0.274212 2.32089 -0.414239 -0.909138 -0.0432954 + -1.42509 0.205372 2.11312 -0.552619 -0.830091 -0.0745739 + -1.43347 0.208092 2.21021 -0.466861 -0.88171 -0.0680356 + -1.52169 0.24162 2.28234 -0.431556 -0.901287 -0.0379507 + -1.53174 0.243759 2.36963 -0.375807 -0.925829 0.040131 + -1.59423 0.273517 2.39189 -0.362183 -0.931812 0.0234357 + -1.34864 0.1531 2.04626 -0.536426 -0.843531 -0.0265117 + -1.34554 0.158488 2.14013 -0.456358 -0.889265 0.0307576 + -1.35392 0.161294 2.23726 -0.422963 -0.905377 0.0373347 + -1.4512 0.206969 2.31095 -0.400125 -0.915105 0.0498191 + -1.45679 0.220878 2.40706 -0.333336 -0.934438 0.125353 + -1.33591 0.146628 1.97227 -0.52148 -0.851632 -0.052743 + -1.22032 0.103022 2.0614 -0.252562 -0.966088 -0.0537253 + -1.22021 0.101478 2.14847 -0.321263 -0.94675 0.0213059 + -1.21711 0.106865 2.24234 -0.342811 -0.938572 0.0395335 + -1.22545 0.112729 1.96998 -0.211424 -0.971177 -0.110067 + -1.02737 0.056695 2.24564 -0.164359 -0.98576 -0.0355564 + -1.02726 0.055147 2.33272 -0.192495 -0.981253 -0.00936353 + -1.02824 0.056105 2.41526 -0.227889 -0.973438 0.0220352 + -0.867153 0.039802 2.2227 -0.0501389 -0.99665 -0.064616 + -0.867964 0.035107 2.30703 -0.0566004 -0.996033 -0.068656 + -0.879902 0.028684 2.38955 -0.124479 -0.990823 -0.0526654 + -0.880885 0.029725 2.47215 -0.202916 -0.976444 -0.0733684 + -1.03752 0.060968 2.49944 -0.198429 -0.976019 -0.0895106 + -0.724318 0.045762 2.15937 0.0411721 -0.997937 -0.0492575 + -0.756667 0.040633 2.24066 0.0373009 -0.997558 -0.0590538 + -0.768605 0.034296 2.32323 -0.0148463 -0.988781 -0.148635 + -0.787987 0.016661 2.40498 -0.0765398 -0.986346 -0.145821 + -0.566167 0.059859 2.04836 0.095351 -0.995418 0.00718027 + -0.583467 0.056534 2.13152 0.0920215 -0.995314 -0.0296966 + -0.615817 0.051409 2.21279 0.0697268 -0.993691 -0.0878428 + -0.637802 0.036659 2.29194 0.0172544 -0.979085 -0.202718 + -0.4243 0.077633 2.05497 0.118094 -0.992988 -0.00533023 + -0.4416 0.074308 2.13813 0.0911641 -0.993795 -0.0637168 + -0.456349 0.065611 2.21919 0.0690841 -0.989662 -0.12568 + -0.478334 0.050861 2.29834 0.0362249 -0.963091 -0.266728 + -0.285543 0.092543 1.96235 0.082683 -0.99299 -0.0844699 + -0.291431 0.091702 2.046 0.0472788 -0.996903 -0.062845 + -0.301232 0.081181 2.12422 -0.00713135 -0.990435 -0.137798 + -0.315981 0.072491 2.20528 -0.0564023 -0.978318 -0.199279 + -0.280226 0.104435 1.88275 0.0850947 -0.984963 -0.150357 + -0.154552 0.107445 1.94174 0.130729 -0.981449 -0.140239 + -0.161487 0.095491 2.01744 0.0906738 -0.986474 -0.136554 + -0.171288 0.084975 2.09565 0.0223911 -0.979078 -0.202248 + -0.183179 0.063995 2.16679 -0.0165967 -0.964244 -0.264497 + -0.149236 0.119336 1.86214 0.144734 -0.970682 -0.191909 + -0.065459 0.122525 1.94562 0.333935 -0.934339 -0.12449 + -0.072394 0.110565 2.02133 0.332738 -0.928511 -0.16478 + -0.079232 0.091678 2.08985 0.304363 -0.929804 -0.206948 + -0.039051 0.157157 1.80163 0.364521 -0.907556 -0.208488 + -0.059663 0.134967 1.87326 0.331259 -0.92966 -0.161244 + -0.023052 0.142337 1.9765 0.252548 -0.958922 -0.129184 + -0.023052 0.132783 2.05185 0.240554 -0.952935 -0.184525 + -0.029889 0.113896 2.12036 0.33783 -0.907215 -0.250663 + -0.029835 0.176438 1.74344 0.509049 -0.819146 -0.264328 + -0.017255 0.16442 1.82885 0.265666 -0.945975 -0.185886 + -0.017255 0.15478 1.90415 0.244123 -0.960376 -0.134465 + 0.023052 0.142337 1.9765 -0.257471 -0.957182 -0.132328 + 0.023052 0.132783 2.05185 -0.243841 -0.954338 -0.172574 + -0.008039 0.211872 1.70326 0.273746 -0.921409 -0.275806 + -0.008039 0.183616 1.7706 0.275276 -0.912485 -0.302645 + 0.00804 0.183611 1.77061 -0.275861 -0.912252 -0.302816 + 0.017255 0.16442 1.82885 -0.252688 -0.950749 -0.179513 + 0.017255 0.15478 1.90415 -0.243275 -0.960318 -0.136405 + 0.00804 0.211867 1.70327 -0.273303 -0.921494 -0.275959 + 0.029836 0.176433 1.74344 -0.508916 -0.819128 -0.264638 + 0.039051 0.157157 1.80163 -0.364626 -0.908268 -0.205173 + 0.059663 0.134967 1.87326 -0.335117 -0.927885 -0.16348 + 0.065459 0.122525 1.94562 -0.333115 -0.93439 -0.126292 + 0.023071 0.214616 1.66891 -0.301299 -0.948176 -0.100904 + 0.044867 0.179094 1.70903 -0.402852 -0.866191 -0.295675 + 0.128624 0.141618 1.79055 -0.156189 -0.955816 -0.249038 + 0.149236 0.119336 1.86214 -0.127307 -0.969749 -0.208277 + 0.077389 0.188657 1.64287 -0.310978 -0.880171 -0.358597 + 0.172667 0.169411 1.65301 -0.111582 -0.9323 -0.344043 + 0.140145 0.15994 1.71921 -0.151988 -0.95824 -0.24223 + 0.289262 0.11663 1.80043 -0.104833 -0.972077 -0.209945 + 0.280227 0.104435 1.88275 -0.0934368 -0.982816 -0.15919 + 0.059101 0.223437 1.60503 -0.492994 -0.625485 -0.604753 + 0.113419 0.19954 1.59562 -0.266812 -0.844287 -0.464748 + 0.219097 0.192294 1.59817 -0.0519375 -0.979975 -0.19223 + 0.325697 0.165847 1.65678 0.0170248 -0.924096 -0.381781 + 0.300782 0.134952 1.72909 -0.0412717 -0.944205 -0.326763 + 0.016455 0.26198 1.61187 -0.33597 -0.439832 -0.832869 + 0.10875 0.245665 1.55153 -0.421674 -0.543614 -0.725724 + 0.185977 0.19434 1.55923 -0.212517 -0.883403 -0.417654 + 0.291654 0.187008 1.56173 0.0826667 -0.965876 -0.245459 + 0.372127 0.188644 1.6019 0.151304 -0.872841 -0.463957 + 0.066104 0.284205 1.55838 -0.622691 -0.326218 -0.711222 + 0.094316 0.306883 1.5237 -0.491361 -0.423392 -0.76112 + 0.172807 0.255556 1.517 -0.31558 -0.476786 -0.820418 + 0.250034 0.204145 1.52465 -0.117479 -0.764324 -0.63404 + 0.170386 0.315624 1.49316 -0.311988 -0.415864 -0.854237 + 0.248877 0.264298 1.48646 -0.26823 -0.470975 -0.840378 + 0.316714 0.227436 1.4939 -0.019341 -0.781214 -0.623964 + 0.411496 0.244192 1.49248 0.389863 -0.898825 -0.200303 + 0.344816 0.220906 1.52322 0.26835 -0.913575 -0.305565 + 0.099147 0.393027 1.47549 -0.178478 -0.571875 -0.80069 + 0.224866 0.336079 1.46153 -0.302939 -0.321099 -0.897287 + 0.311003 0.293472 1.45073 -0.2287 -0.433422 -0.871689 + 0.378839 0.25661 1.45817 0.00399699 -0.732972 -0.680247 + 0.214568 0.417707 1.45135 -0.175932 -0.405625 -0.896948 + 0.273208 0.382957 1.43094 -0.341688 -0.22859 -0.91159 + 0.359344 0.340435 1.42019 -0.313158 -0.371842 -0.87388 + 0.234373 0.595155 1.2896 0.00199342 -0.695913 -0.718123 + 0.280223 0.459798 1.41644 -0.229196 -0.456427 -0.859735 + 0.338862 0.425048 1.39603 -0.39924 -0.299754 -0.866461 + 0.404353 0.388668 1.38004 -0.383904 -0.36497 -0.848183 + 0.430531 0.290693 1.41134 -0.00866732 -0.74897 -0.662547 + 0.180778 0.941774 0.880636 0.0874276 -0.796584 -0.598172 + 0.288601 0.697477 1.20737 0.13617 -0.706496 -0.694494 + 0.284809 0.633355 1.24723 -0.0167387 -0.565796 -0.824375 + 0.330659 0.497998 1.37408 -0.296662 -0.512839 -0.805597 + 0.202299 1.02452 0.721508 -0.237914 -0.808776 -0.537846 + 0.1315 1.15639 0.566116 -0.683273 -0.674188 -0.280372 + 0.194623 1.1096 0.436545 -0.675886 -0.241239 -0.696407 + 0.224485 1.04294 0.438416 -0.60556 -0.420037 -0.675919 + 0.161362 1.08963 0.567937 -0.941146 -0.271414 -0.201444 + 0.202299 1.02452 0.721508 -0.881071 -0.357353 0.30986 + 0.166029 1.18089 0.455079 -0.604039 -0.362134 -0.709926 + 0.258117 1.16069 0.410469 -0.140426 -0.00502579 -0.990078 + 0.286711 1.0894 0.391936 -0.0190481 -0.0590518 -0.998073 + 0.312808 1.02384 0.415092 0.0412183 -0.413174 -0.909719 + 0.248556 0.979544 0.481017 -0.514629 -0.534366 -0.67053 + 0.21948 1.22669 0.410138 -0.111188 -0.156652 -0.981375 + 0.35818 1.15829 0.413422 0.201108 -0.118426 -0.972384 + 0.390198 1.08755 0.441946 0.384308 -0.126856 -0.914448 + 0.416295 1.0219 0.465053 0.410432 -0.317729 -0.854748 + 0.319542 1.22421 0.413041 0.165406 0.183347 -0.969033 + 0.4343 1.19784 0.443514 0.384609 0.101531 -0.917479 + 0.466318 1.12702 0.471987 0.364306 -0.134856 -0.921463 + 0.508152 1.07115 0.493346 0.414522 -0.272607 -0.868249 + 0.44088 0.967001 0.506741 0.418383 -0.49861 -0.759173 + 0.368359 1.32276 0.466147 0.296338 0.350691 -0.888369 + 0.40419 1.26275 0.450692 0.37819 0.34222 -0.86015 + 0.489019 1.27485 0.512728 0.195126 0.447301 -0.872839 + 0.520361 1.21793 0.473514 0.304285 0.210338 -0.929069 + 0.562195 1.16198 0.494822 0.465224 -0.0802301 -0.881549 + 0.337539 1.38741 0.477972 0.094197 0.434565 -0.895701 + 0.430147 1.4069 0.519008 0.423498 0.262598 -0.867001 + 0.458909 1.33976 0.519908 0.437379 0.280545 -0.854397 + 0.536813 1.37039 0.559051 0.0712872 0.434187 -0.897998 + 0.568156 1.31347 0.519837 0.248883 0.375791 -0.892658 + 0.399327 1.47155 0.530832 0.29048 0.1643 -0.94267 + 0.494464 1.51771 0.586891 0.48701 0.173572 -0.855975 + 0.523226 1.45056 0.587791 0.351529 0.285556 -0.891563 + 0.609086 1.49934 0.623102 0.358834 0.284674 -0.888931 + 0.470813 1.59102 0.579113 0.677248 -0.0090501 -0.735699 + 0.560694 1.66274 0.668891 0.346754 0.156162 -0.924865 + 0.595499 1.57951 0.651842 0.130183 0.301985 -0.944382 + 0.537043 1.73605 0.661113 0.489452 -0.183572 -0.852489 + 0.63287 1.72467 0.683221 -0.220073 -0.242601 -0.944835 + 0.667675 1.64153 0.666221 -0.168833 0.0794248 -0.982439 + 0.570279 1.82633 0.611337 -0.200123 -0.601636 -0.773295 + 0.614016 1.77037 0.660667 -0.208448 -0.636527 -0.742552 + 0.765247 1.66905 0.611151 -0.342337 -0.4768 -0.809609 + 0.819324 1.64323 0.607476 0.00663408 -0.706049 -0.708132 + 0.721752 1.61571 0.662546 0.0554567 -0.602927 -0.795867 + 0.544721 1.8913 0.575008 -0.270023 -0.387148 -0.881592 + 0.676006 1.77051 0.564613 -0.42849 -0.691888 -0.581109 + 0.746393 1.71475 0.588597 -0.377476 -0.592926 -0.711302 + 0.907269 1.77161 0.505114 0.119378 -0.583327 -0.803417 + 0.895425 1.6969 0.571711 0.228782 -0.725119 -0.649508 + 0.650448 1.83548 0.528282 -0.454389 -0.500496 -0.736909 + 0.836882 1.82746 0.481179 -0.0777549 -0.654659 -0.751914 + 1.08955 1.96145 0.43531 0.388775 -0.706283 -0.591623 + 1.02369 1.81801 0.518748 -0.557543 0.243408 -0.793661 + 0.833391 1.94058 0.379053 -0.226783 -0.656655 -0.719287 + 0.815929 1.8798 0.41873 -0.190316 -0.630613 -0.752401 + 1.05697 1.97337 0.346654 0.442259 -0.750163 -0.491592 + 0.810344 1.97817 0.320542 -0.246073 -0.765187 -0.594926 + 0.981624 2.07298 0.222127 0.163624 -0.758487 -0.630813 + 1.03601 2.02571 0.284205 0.150126 -0.724684 -0.672529 + 1.10585 2.12196 0.209687 0.660096 -0.396582 -0.637963 + 1.13428 2.12922 0.259715 0.882049 -0.226791 -0.412984 + 0.958577 2.11066 0.163666 0.343393 -0.87323 -0.345759 + 1.05147 2.16932 0.147664 0.741189 -0.418469 -0.524902 + 1.05384 2.25235 0.14565 0.840021 -0.357247 -0.408338 + 1.08226 2.25953 0.195622 0.842923 -0.32878 -0.425892 + 0.922802 2.10901 0.085129 0.0690286 -0.949442 -0.306259 + 1.02166 2.1516 0.03576 0.735983 -0.668118 -0.109302 + 1.03372 2.19214 0.092341 0.979928 -0.0173254 -0.198597 + 1.18729 2.0375 0.396588 0.11454 -0.51983 -0.846556 + 1.16686 2.1173 0.348371 0.604834 -0.408006 -0.683891 + 1.19065 2.1133 0.362098 0.415425 -0.374356 -0.829023 + 1.14683 2.27224 0.275606 -0.251369 -0.703331 -0.664935 + 1.12304 2.27624 0.261878 0.518217 -0.639739 -0.567614 + 1.17763 2.27532 0.212466 -0.466835 -0.86589 -0.179719 + 1.18686 2.17753 0.247647 -0.923615 -0.216732 -0.316169 + 1.19065 2.1133 0.362098 -0.99948 -0.00159498 0.0322018 + 1.1835 2.10173 0.282136 -0.975206 0.190751 -0.112197 + 1.09759 2.3003 0.121208 0.319193 -0.947526 -0.0176331 + 1.13837 2.31692 0.187409 -0.0712604 -0.976293 -0.204385 + 1.19122 2.27081 0.18087 -0.696198 -0.715946 -0.05225 + 1.31347 2.12724 0.109754 -0.793508 -0.28562 -0.53737 + 1.21766 2.18061 0.184504 -0.765389 -0.119618 -0.632354 + 1.07871 2.29808 0.057635 0.297169 -0.94411 0.142642 + 1.19219 2.27055 0.073518 -0.564576 -0.798629 -0.208438 + 1.21979 2.20679 0.063957 -0.756811 -0.543957 -0.362418 + 1.27264 2.16069 0.057417 -0.641701 -0.744126 -0.185731 + 1.32705 2.12282 0.078207 -0.703711 -0.633417 -0.321828 + 1.0361 2.27517 0.090327 0.763837 -0.624206 -0.164072 + 1.0774 2.23681 -0.044033 0.620122 -0.757082 0.20561 + 1.1697 2.29075 -0.059863 0.207982 -0.969606 -0.128869 + 1.17331 2.26835 0.009938 -0.173367 -0.977501 -0.120148 + 1.03478 2.21398 -0.011292 0.862466 -0.467678 0.193468 + 1.02272 2.17335 -0.067922 0.805969 -0.584621 0.0929153 + 1.03829 2.21156 -0.143494 0.865686 -0.486219 -0.119077 + 1.07955 2.24064 -0.106867 0.58024 -0.801442 -0.144955 + 1.08053 2.27656 -0.209287 0.652902 -0.643199 -0.400017 + 1.12179 2.30564 -0.172649 0.512942 -0.728268 -0.454441 + 1.17186 2.29449 -0.122738 0.43716 -0.854415 -0.280829 + 1.22873 2.32785 -0.137321 0.168746 -0.879145 -0.445678 + 1.27338 2.29774 -0.092373 -0.0457302 -0.865845 -0.498218 + 1.06901 2.33969 -0.284824 0.678377 -0.47301 -0.562197 + 1.12 2.34824 -0.23243 0.539317 -0.683937 -0.491291 + 1.17866 2.339 -0.187233 0.356476 -0.702752 -0.615682 + 1.30396 2.34659 -0.149771 0.0614656 -0.782636 -0.619438 + 1.3486 2.31648 -0.104823 -0.0978227 -0.653546 -0.750538 + 1.01663 2.3143 -0.349446 0.951981 -0.210593 -0.22222 + 1.03503 2.35088 -0.329403 0.815209 -0.303388 -0.493346 + 1.11506 2.38959 -0.271264 0.468928 -0.602128 -0.64618 + 1.18011 2.38412 -0.225178 0.373677 -0.721976 -0.582337 + 1.23876 2.37488 -0.179972 0.212932 -0.626427 -0.749833 + 1.02405 2.3753 -0.403114 0.918254 -0.253542 -0.304181 + 1.04244 2.41197 -0.383019 0.765658 -0.543893 -0.343436 + 1.08108 2.40086 -0.315784 0.531257 -0.658405 -0.533169 + 1.14067 2.43669 -0.342226 0.226085 -0.885337 -0.40628 + 0.989653 2.23551 -0.440186 0.936124 -0.103942 -0.335957 + 1.00614 2.35642 -0.447203 0.887363 -0.0667328 -0.456216 + 0.98841 2.44837 -0.48127 0.649857 -0.398456 -0.647239 + 1.04836 2.45826 -0.454405 0.323119 -0.802898 -0.500947 + 1.087 2.44716 -0.387179 0.2938 -0.87552 -0.383597 + 0.964875 2.1885 -0.493562 0.910786 -0.0428506 -0.410649 + 0.961205 2.32061 -0.501179 0.840011 -0.0187463 -0.542245 + 0.943474 2.41256 -0.535247 0.749377 -0.0817093 -0.657083 + 0.960257 2.50357 -0.553484 0.479821 -0.380069 -0.790772 + 1.02021 2.51347 -0.526628 -0.0167753 -0.797881 -0.602581 + 0.963816 2.07556 -0.479939 0.928115 -0.193392 -0.318122 + 0.940043 2.06386 -0.530873 0.954931 -0.151602 -0.255193 + 0.939814 2.13853 -0.546399 0.95328 -0.025994 -0.300968 + 0.936145 2.27055 -0.554076 0.878685 0.0654387 -0.472895 + 0.948408 2.01676 -0.468093 0.903603 -0.298642 -0.307108 + 0.924635 2.00506 -0.519026 0.394429 -0.91787 0.0440384 + 0.927308 2.01413 -0.587145 0.903983 -0.407302 -0.130075 + 0.927079 2.0888 -0.602681 0.977534 0.0101431 -0.210532 + 0.917013 2.20864 -0.606034 0.905177 0.136502 -0.40252 + 0.879951 2.30643 -0.635612 0.803202 0.237296 -0.546404 + 0.899083 2.36834 -0.583653 0.759423 0.123513 -0.638765 + 0.915514 2.00015 -0.555323 0.67694 -0.732603 -0.0710247 + 0.918187 2.00922 -0.623443 0.99943 -0.0337012 -0.00200876 + 0.92031 2.03058 -0.651237 0.999368 0.0300102 0.0190617 + 0.910244 2.15041 -0.65459 0.937828 0.171801 -0.301602 + 0.867467 2.24817 -0.685917 0.809552 0.305848 -0.501082 + 0.802804 2.38658 -0.687645 0.702115 0.288865 -0.650839 + 0.843523 2.4329 -0.634069 0.684831 0.18255 -0.705465 + 0.927469 1.96604 -0.682646 0.997563 0.0666929 -0.0205148 + 0.910018 2.0829 -0.703454 0.939819 0.193352 -0.281702 + 0.867241 2.18075 -0.73473 0.857674 0.340548 -0.385255 + 0.790321 2.32833 -0.73795 0.788343 0.389661 -0.476108 + 0.724965 2.45691 -0.737052 0.73263 0.406756 -0.545712 + 0.925346 1.94468 -0.654843 0.995348 0.00755878 0.0960458 + 0.928663 1.90521 -0.720078 0.978418 -0.199941 0.0521718 + 0.911212 2.02207 -0.740895 0.965652 0.195 -0.171732 + 0.87809 2.11465 -0.780856 0.893804 0.336039 -0.296971 + 0.797996 2.26779 -0.788689 0.827154 0.412986 -0.38113 + 0.915514 2.00015 -0.555323 0.995032 0.0858065 0.050475 + 0.920946 1.88997 -0.719496 0.859532 -0.424604 0.284458 + 0.914712 1.86018 -0.745692 0.941118 -0.259361 0.216859 + 0.922179 1.95121 -0.784367 0.988399 0.142361 -0.0529256 + 0.889057 2.0438 -0.824337 0.91589 0.335957 -0.219723 + 0.808844 2.2017 -0.834823 0.8605 0.426274 -0.278981 + 0.742346 2.33211 -0.841297 0.871273 0.430974 -0.234829 + 0.906995 1.84494 -0.745102 0.843147 -0.274478 0.462347 + 0.919515 1.81725 -0.779344 0.959868 0.0716058 0.271157 + 0.926982 1.90829 -0.818027 0.993211 0.11242 0.0298957 + 0.908131 1.97388 -0.863228 0.929556 0.294501 -0.221798 + 0.834284 2.13524 -0.87711 0.889457 0.411568 -0.198689 + 0.919099 1.77531 -0.757695 0.906247 0.289663 0.307916 + 0.939316 1.83324 -0.851034 0.993216 0.116079 0.00686109 + 0.920465 1.89883 -0.896237 0.959648 0.2734 -0.0657916 + 0.853357 2.06532 -0.916001 0.910547 0.388286 -0.14191 + 0.794945 2.19464 -0.931195 0.904049 0.418535 -0.0867431 + 0.769505 2.2611 -0.8889 0.896928 0.42444 -0.123978 + 0.9389 1.79129 -0.829378 0.967886 0.120559 0.220597 + 0.927778 1.73612 -0.733014 0.859051 0.395155 0.325397 + 0.825763 2.12504 -0.97444 0.914092 0.405114 -0.017842 + 0.782328 2.22055 -0.986063 0.929348 0.23474 0.284974 + 0.750241 2.29266 -0.940374 0.941732 0.232421 0.243149 + 0.723081 2.36367 -0.89277 0.939013 0.244247 0.242068 + 0.776281 2.32164 -0.982164 0.597743 -0.176709 0.78197 + 0.744194 2.39376 -0.936474 0.768441 -0.113274 0.629815 + 0.723281 2.4607 -0.894831 0.728022 -0.132818 0.672565 + 0.683658 2.44041 -0.844285 0.960032 0.245488 0.134442 + 0.753678 2.58589 -0.879656 0.487133 -0.273232 0.829485 + 0.732765 2.65292 -0.837963 0.984934 -0.161452 0.0619613 + 0.762104 2.73531 -0.789264 0.728586 -0.471099 0.49722 + 0.683857 2.53744 -0.846346 0.808967 -0.215405 0.546967 + 0.825749 2.68506 -0.875424 0.371184 -0.287287 0.882999 + 0.813222 2.77682 -0.837363 0.615377 -0.42938 0.661018 + 0.842561 2.85913 -0.788723 0.748743 -0.554919 0.362558 + 0.87879 2.93189 -0.743953 0.694823 -0.718947 0.0183238 + 0.761325 2.80318 -0.738623 0.889461 -0.424716 -0.168745 + 0.946305 2.78767 -0.892355 0.491148 -0.233846 0.8391 + 0.917374 2.89238 -0.852317 0.596918 -0.454373 0.661236 + 0.953604 2.96515 -0.807556 0.55331 -0.751557 0.359179 + 1.05152 2.81816 -0.962764 0.617008 -0.165531 0.76935 + 1.02259 2.92278 -0.922776 0.605181 -0.394181 0.691648 + 1.0671 2.99456 -0.889893 0.509886 -0.741533 0.436055 + 1.02738 3.01237 -0.781739 0.288641 -0.957141 -0.0238343 + 1.14171 2.95065 -1.01444 0.594889 -0.414362 0.688775 + 1.18623 3.02234 -0.981609 0.400739 -0.804318 0.438725 + 1.14088 3.04178 -0.864075 0.278975 -0.957474 0.0736036 + 1.11456 3.01479 -0.772534 -0.128487 -0.875975 -0.464928 + 0.953552 2.97745 -0.695252 0.352744 -0.709932 -0.609564 + 1.27766 2.83913 -1.15248 0.595693 -0.258769 0.760387 + 1.26369 2.93221 -1.11991 0.538965 -0.36915 0.757129 + 1.33436 3.02223 -1.09923 0.374899 -0.757695 0.53418 + 1.30841 3.06147 -0.932784 0.199208 -0.97344 0.112829 + 1.49484 2.94614 -1.23203 0.431399 -0.450109 0.781855 + 1.60459 3.09642 -1.22012 0.46498 -0.637982 0.613818 + 1.45654 3.06128 -1.05046 0.380886 -0.87477 0.299507 + 1.65571 2.9089 -1.34153 0.402663 -0.434872 0.805449 + 1.76546 3.0591 -1.32967 0.273189 -0.5078 0.817011 + 1.69808 3.18616 -1.16996 0.451621 -0.749236 0.484443 + 1.55002 3.15102 -1.0003 0.545271 -0.778457 0.310942 + 1.61261 2.75404 -1.41731 0.335411 -0.520052 0.785522 + 1.8538 2.85272 -1.45663 -0.00908349 -0.450488 0.892736 + 1.9202 3.02836 -1.35684 -0.141619 -0.448079 0.882706 + 1.99461 3.17363 -1.27045 -0.0990468 -0.535452 0.838738 + 1.83988 3.20445 -1.24323 0.20631 -0.689934 0.69385 + 1.6553 2.55664 -1.57659 0.200426 -0.611083 0.765772 + 1.7895 2.54952 -1.59947 -0.0247822 -0.543034 0.839345 + 1.81071 2.69787 -1.53241 0.0930443 -0.437005 0.894634 + 1.98412 2.60123 -1.53762 -0.416579 -0.37579 0.827794 + 2.0451 2.73408 -1.42993 -0.499449 -0.334107 0.799327 + 1.65389 2.43073 -1.67692 0.0984026 -0.720387 0.686557 + 1.78809 2.42361 -1.69979 -0.0579976 -0.613869 0.787274 + 1.91434 2.40472 -1.67626 -0.369532 -0.597193 0.711904 + 1.96291 2.45279 -1.60472 -0.393898 -0.47166 0.788911 + 1.62473 2.36295 -1.77831 0.0484259 -0.900565 0.432015 + 1.79798 2.36518 -1.74398 -0.129398 -0.833912 0.536514 + 1.92422 2.34637 -1.7204 -0.339189 -0.744819 0.574626 + 2.04766 2.31797 -1.64221 -0.368673 -0.738629 0.564365 + 2.09623 2.36604 -1.57067 -0.602334 -0.510557 0.613617 + 1.65265 2.34347 -1.83677 0.130695 -0.990335 0.0464219 + 1.82591 2.34578 -1.80238 -0.0669262 -0.994633 -0.0789024 + 1.95638 2.32169 -1.74666 -0.248998 -0.968228 -0.0231163 + 2.07981 2.29329 -1.66846 -0.462743 -0.781348 0.418765 + 1.50851 2.3155 -1.86953 0.405143 -0.898496 0.169011 + 1.73092 2.37115 -1.88572 0.13724 -0.857311 -0.496168 + 1.86741 2.36285 -1.84754 0.0661882 -0.867166 -0.493601 + 1.99788 2.33885 -1.79177 -0.0445374 -0.841804 -0.537942 + 2.0843 2.27043 -1.71266 -0.227093 -0.959056 -0.169234 + 1.58678 2.34309 -1.91852 0.29018 -0.803058 -0.520474 + 1.62731 2.40409 -1.94996 0.152462 -0.552871 -0.8192 + 1.781 2.40746 -1.9224 0.155324 -0.70291 -0.694113 + 1.91748 2.39915 -1.88422 0.193242 -0.633388 -0.749318 + 2.02626 2.35974 -1.81995 0.190851 -0.658213 -0.728239 + 1.42789 2.30996 -1.94454 0.365639 -0.567879 -0.737442 + 1.46842 2.37095 -1.97597 0.247474 -0.328742 -0.911419 + 1.49287 2.45738 -1.97767 0.159663 -0.138554 -0.9774 + 1.66729 2.45157 -1.98061 0.0760049 -0.35324 -0.93244 + 1.82098 2.45494 -1.95305 0.24581 -0.39973 -0.883059 + 1.33128 2.23969 -1.97442 0.638914 -0.433309 -0.635635 + 1.33576 2.3177 -2.00015 0.510398 -0.249068 -0.823079 + 1.36021 2.40413 -2.00185 0.223148 -0.0276724 -0.974392 + 1.53882 2.55361 -1.98375 0.0424011 -0.0418811 -0.998222 + 1.71324 2.5478 -1.98668 0.104952 -0.049717 -0.993234 + 1.25368 2.22285 -2.03966 0.497939 -0.106475 -0.860651 + 1.23734 2.32035 -2.03313 0.301296 0.0518492 -0.95212 + 1.25312 2.43435 -2.02718 0.262671 0.0598724 -0.963026 + 1.37599 2.51822 -1.99585 0.20468 -0.053114 -0.977387 + 1.59413 2.68402 -1.98483 0.0373841 0.0674627 -0.997021 + 1.19226 2.17559 -2.0672 0.601184 0.120441 -0.789982 + 1.17591 2.27308 -2.06065 0.473602 0.0994598 -0.875105 + 1.14108 2.34184 -2.07636 0.518574 0.0935959 -0.849894 + 1.247 2.56125 -2.01139 0.190673 0.0908362 -0.977442 + 1.4313 2.64864 -1.99694 0.082035 0.0206508 -0.996415 + 1.13496 2.46875 -2.06056 0.43331 0.14307 -0.889816 + 1.24444 2.67947 -2.00494 0.0962112 0.107172 -0.989574 + 1.42874 2.76685 -1.99049 0.0697176 0.0429018 -0.996644 + 1.63719 2.8068 -1.96728 0.0934946 0.133542 -0.986623 + 1.75757 2.67228 -1.98008 0.129854 0.0505806 -0.990242 + 1.03319 2.31833 -2.16724 0.60999 0.191388 -0.76895 + 0.996497 2.4102 -2.17036 0.660312 0.207757 -0.721682 + 1.09827 2.56071 -2.06364 0.416426 0.204381 -0.885899 + 0.944732 2.3707 -2.24494 0.850122 0.222017 -0.477494 + 0.986048 2.65546 -2.10375 0.65528 0.197438 -0.729127 + 1.00064 2.76627 -2.06269 0.641548 0.199214 -0.740763 + 1.11286 2.67152 -2.02258 0.301432 0.261851 -0.916827 + 0.956106 2.22434 -2.34064 0.886879 0.336654 -0.316401 + 0.891187 2.40223 -2.36215 0.887693 0.261349 -0.379075 + 0.934283 2.61586 -2.17837 0.808235 0.184166 -0.55932 + 0.975073 2.89702 -2.06695 0.80162 0.0435633 -0.596244 + 0.979776 2.03034 -2.56122 0.892278 0.383864 -0.237672 + 0.902561 2.25588 -2.45786 0.942154 0.269055 -0.199891 + 1.01974 1.93892 -2.55027 0.927369 0.298454 -0.225638 + 0.99941 1.89818 -2.6767 0.931517 0.290391 -0.218971 + 0.980083 1.97465 -2.65517 0.926274 0.326345 -0.188453 + 0.902867 2.20019 -2.5518 0.867913 0.40967 -0.280888 + 0.927778 1.73612 -0.733014 0.982974 0.0857146 0.162528 + 0.509794 2.09676 -0.93526 -0.995136 -0.0926188 0.0335534 + 0.536853 1.93903 -0.89247 -0.976427 -0.130032 0.172286 + 0.557887 1.87741 -0.816744 -0.982702 -0.142523 0.118253 + 0.544984 1.96833 -0.804808 -0.982382 -0.149969 0.111508 + 0.546724 1.84212 -0.915617 -0.973415 -0.176739 0.145692 + 0.567759 1.7805 -0.83989 -0.981761 -0.131877 0.136946 + 0.572445 1.81332 -0.755521 -0.977391 -0.160809 0.137288 + 0.534472 1.87048 -0.966136 -0.95337 -0.223907 0.202362 + 0.565725 1.7357 -0.938079 -0.991994 -0.100695 0.0762124 + 0.584067 1.72863 -0.796446 -0.971245 -0.148662 0.185966 + 0.522692 1.81068 -1.02855 -0.920148 -0.237118 0.311613 + 0.553473 1.76406 -0.988607 -0.948559 -0.222105 0.225623 + 0.52323 1.74945 -1.08691 -0.955974 -0.247696 0.157356 + 0.554011 1.70283 -1.04696 -0.943987 -0.18619 0.272435 + 0.532253 1.62568 -1.14653 -0.992083 -0.125579 0.0011034 + 0.542243 1.62171 -1.22585 -0.779024 -0.341375 -0.525913 + 0.50379 1.84717 -1.33935 0.121064 0.0314344 -0.992147 + 0.516746 1.9941 -1.29365 0.16402 -0.00232964 -0.986454 + 0.531356 2.07762 -1.31671 -0.202793 -0.227498 -0.952428 + 0.4273 1.85751 -1.34046 0.027498 -0.123479 -0.991966 + 0.427977 1.80321 -1.32542 -0.102736 -0.26681 -0.958258 + 0.307145 1.88639 -1.30329 -0.553259 -0.732472 -0.396724 + 0.590096 1.7375 -0.728603 -0.843983 -0.360656 0.397015 + 0.698828 2.11859 0.213736 0.561962 -0.240564 0.791408 + 0.813747 2.21001 0.167185 0.653596 -0.725447 0.215729 + 0.695469 2.2415 0.283044 0.290899 -0.953211 0.0822541 + 0.800807 2.16729 0.143582 0.607242 -0.146729 0.780851 + 0.833698 2.22428 -0.017537 0.954621 -0.287115 -0.0791371 + 0.848062 2.25593 0.053241 0.880113 -0.473604 0.0331692 + 0.820451 2.25574 -0.240823 0.967446 -0.236273 -0.0906826 + 0.779985 2.29664 -0.306655 0.956183 -0.287545 -0.0550654 + 0.776758 2.28597 -0.306972 0.968082 -0.19913 -0.152197 + 0.793378 2.25035 -0.483283 0.94545 -0.290324 0.147773 + 0.796669 2.22433 -0.213417 0.947011 -0.135195 -0.291364 + 0.698168 2.24505 -0.487516 0.871803 -0.482344 -0.0854645 + 0.66343 2.1034 -0.771961 0.850608 -0.481138 0.212067 + 0.690579 2.04601 -0.869965 0.530727 -0.599501 0.599105 + 0.775351 1.95469 -0.938787 -0.535531 -0.562834 0.629622 + 0.652101 2.00956 -0.770023 0.994828 -0.0958681 0.0335539 + 0.65719 1.99449 -0.872528 0.917711 -0.294289 0.266834 + 0.721707 1.96762 -0.977374 0.0359111 -0.684208 0.728403 + 0.763463 1.84218 -1.03071 -0.548072 -0.408358 0.729973 + 0.854714 1.6674 -0.986595 -0.874925 -0.476245 0.0877331 + 0.656367 1.90801 -0.744739 0.998217 -0.05561 0.0216843 + 0.661456 1.89294 -0.847236 0.998215 -0.0245201 0.0544646 + 0.688318 1.91609 -0.979938 0.791239 -0.269277 0.549027 + 0.723897 1.85084 -1.04911 0.281007 -0.228072 0.932211 + 0.641212 1.80309 -0.633011 0.975034 -0.211814 -0.0666538 + 0.588889 1.81998 -0.669658 0.82384 -0.0340243 0.5658 + 0.901206 1.61571 -1.00085 -0.693109 -0.685132 0.224039 + 0.837016 1.7382 -1.03661 -0.749239 -0.647207 0.140586 + 0.901206 1.61571 -1.00085 -0.715932 -0.513342 -0.473204 + 0.757834 2.14915 0.186202 -0.425153 0.00538387 -0.905105 + -1.17764 2.27532 0.212466 0.843377 -0.296139 -0.44835 + -1.31347 2.12724 0.109754 0.793546 -0.285467 -0.537395 + -1.33453 2.06406 0.095774 0.606277 -0.214905 -0.765666 + -1.30196 1.97625 0.143271 0.467733 -0.51259 -0.720054 + -1.39275 1.95991 0.121567 0.251253 -0.663219 -0.704991 + -1.21767 2.18061 0.184507 0.765395 -0.119622 -0.632346 + -1.31516 1.94747 0.173919 -0.0441729 -0.69767 -0.715056 + -1.18685 2.17753 0.247647 0.923516 -0.216905 -0.316341 + -1.19064 2.1133 0.362099 0.999487 -0.00202297 0.0319622 + -1.18731 2.03749 0.39659 0.788496 0.538188 0.297704 + -1.02369 1.81801 0.51875 0.769241 0.630648 0.102723 + -0.748335 1.58493 -1.27294 -0.139546 0.986449 -0.086292 + -0.748272 1.58103 -1.31759 -0.185898 0.978822 -0.0857284 + -0.711105 1.59853 -1.28851 -0.687442 0.724761 -0.0463128 + -0.711042 1.59463 -1.33315 -0.839139 0.541748 -0.0485361 + -0.699505 1.64767 -1.36081 -0.954206 0.293462 0.0580593 + -0.697709 1.64323 -1.30433 -0.948507 0.311161 0.059277 + -0.686108 1.69237 -1.37664 -0.928851 0.353046 0.112224 + -0.692772 1.67708 -1.37616 -0.851335 0.382325 0.359245 + -0.636581 1.83901 -1.44743 -0.928226 0.359568 0.0954311 + -0.220308 2.03334 -3.02461 -0.0801513 -0.938798 -0.335013 + -0.261303 1.99187 -2.98179 -0.187502 0.265591 -0.945677 + -0.284575 2.00426 -2.96885 -0.568285 -0.248324 -0.784466 + -0.199306 2.0285 -3.02623 0.045883 -0.866926 -0.49632 + -0.240301 1.98703 -2.9834 0.0570533 -0.00749639 -0.998343 + -0.263765 1.97714 -2.99568 0.119604 0.938579 -0.323671 + -0.28691 1.98164 -2.99787 0.221935 0.934964 -0.276743 + -0.284575 2.00426 -2.96885 0.0737328 0.783795 -0.616627 + -0.310183 1.99395 -2.98499 0.176062 0.959149 -0.221438 + -0.173526 2.0323 -3.02582 -0.133698 -0.964241 -0.228831 + -0.201346 1.98642 -2.97515 0.0163988 0.130809 -0.991272 + -0.22481 1.97654 -2.98743 0.0130636 0.940518 -0.339493 + -0.231446 2.02897 -3.02385 0.407855 -0.903828 -0.129423 + -0.306462 1.97626 -2.97875 0.483915 -0.866438 0.122931 + -0.284575 2.00426 -2.96885 0.366653 -0.928229 -0.0628972 + -0.295713 1.99981 -2.96814 0.652643 -0.62387 0.429933 + -0.320303 1.98989 -2.94595 0.796372 0.0261013 0.604244 + -0.331051 1.96634 -2.95656 0.0622725 -0.929419 0.363734 + -0.350253 1.97577 -2.9623 -0.583802 -0.743936 0.32517 + -0.39796 2.02379 -2.97147 -0.488138 -0.872068 0.0348973 + -0.328944 1.99242 -2.93294 0.649816 -0.538453 0.536477 + -0.328944 1.99242 -2.93294 -0.479139 -0.567698 0.669435 + -0.348145 2.00185 -2.93868 -0.745905 -0.657938 0.103655 + -0.356668 2.00434 -2.92579 -0.528691 -0.481318 -0.699156 + -0.384464 1.98607 -2.91054 -0.263055 -0.0453457 -0.963715 + -0.406745 1.97654 -2.90444 0.132234 -0.729845 -0.670702 + -0.343375 1.99505 -2.9427 -0.310433 0.919121 -0.242588 + -0.371171 1.97686 -2.92739 -0.5188 0.766889 -0.377794 + -0.397431 1.96752 -2.926 -0.320649 0.923092 -0.212335 + -0.406745 1.97654 -2.90444 -0.373183 0.765303 -0.524448 + -0.423478 1.96208 -2.9154 -0.262391 0.919116 -0.293898 + -0.44583 1.96623 -2.90117 0.0398298 0.040284 -0.998394 + -0.3657 1.98304 -2.9843 -0.421775 0.906457 0.0210142 + -0.391961 1.97369 -2.9829 -0.274839 0.958352 0.0776163 + -0.436121 1.96423 -2.9789 -0.185733 0.979741 0.0749052 + -0.462167 1.9588 -2.9683 -0.107238 0.990077 0.0908189 + -0.462562 1.95177 -2.91213 -0.169802 0.837056 -0.520101 + -0.346889 1.99167 -3.01484 -0.431965 0.897309 -0.0907949 + -0.329296 2.00112 -2.94802 0.155097 0.954334 0.255325 + -0.33281 1.99774 -3.02016 -0.15277 0.971756 -0.179863 + -0.322338 1.99302 -3.04417 0.20789 0.978012 -0.016584 + -0.328944 1.99242 -2.93294 0.0265057 0.974311 0.223643 + -0.348145 2.00185 -2.93868 0.494962 0.672361 -0.550403 + -0.477678 1.9723 -2.91668 0.0749566 -0.666881 -0.741385 + -0.504744 1.95583 -2.89736 -0.102313 -0.786442 -0.609132 + -0.484424 1.94554 -2.89294 -0.26841 -0.643287 -0.717034 + -0.52042 1.93869 -2.87167 -0.247113 -0.751105 -0.61219 + -0.54074 1.94898 -2.8761 -0.210205 -0.847566 -0.487284 + -0.573469 1.94957 -2.85811 -0.305937 -0.909683 -0.280856 + -0.614905 1.97986 -2.91918 -0.288926 -0.901819 -0.321317 + -0.534839 1.92882 -2.85178 -0.180211 -0.946202 -0.26875 + -0.558772 1.93836 -2.83091 -0.386603 -0.913903 -0.12377 + -0.642788 1.97122 -2.85022 -0.298621 -0.904674 -0.303957 + -0.532448 1.92559 -2.83099 -0.948828 -0.290266 -0.124383 + -0.556381 1.93513 -2.81012 -0.433795 -0.829294 -0.352268 + -0.628091 1.96002 -2.82302 -0.0925388 -0.917999 -0.385634 + -0.175566 1.99014 -2.97479 0.120543 -0.767637 -0.629447 + -0.136983 2.00247 -2.98235 -0.245385 -0.883166 -0.399754 + -0.128457 1.99899 -2.99252 -0.691513 -0.559645 0.456735 + -0.165001 2.02874 -3.03604 -0.37203 -0.914019 -0.16175 + -0.141836 1.9697 -3.01698 -0.780814 -0.624578 0.0152173 + -0.122047 1.95724 -3.0106 0.074926 -0.997181 0.00405767 + -0.108668 1.98654 -2.98615 -0.502205 -0.407388 0.762774 + -0.156423 2.02915 -3.04175 -0.116466 -0.596074 -0.794438 + -0.133259 1.97002 -3.02274 -0.0161232 -0.519196 -0.854503 + -0.082769 1.99305 -3.00163 0.425325 -0.744893 -0.514035 + -0.108668 1.98654 -2.98615 0.495081 -0.678801 0.542331 + -0.175985 2.10943 -3.08141 -0.278335 -0.390708 -0.877426 + -0.150816 2.0951 -3.08878 -0.523344 -0.335971 -0.783093 + -0.132025 2.07441 -3.09614 -0.524532 -0.425441 -0.737473 + -0.123316 2.05662 -3.08433 -0.260741 -0.778195 -0.571338 + -0.133336 2.04513 -3.05403 0.18847 -0.879113 -0.437768 + -0.093982 2.00583 -3.01377 0.0960676 -0.528986 -0.843176 + -0.185473 2.19701 -3.11309 -0.204291 -0.571278 -0.794925 + -0.140105 2.18376 -3.12234 -0.396297 -0.501788 -0.768868 + -0.114936 2.16933 -3.12975 -0.540457 -0.385614 -0.747802 + -0.083959 2.13644 -3.14199 -0.599683 -0.300588 -0.741639 + -0.065169 2.11575 -3.14936 -0.595133 -0.265103 -0.758641 + -0.217725 2.19464 -3.10718 0.00753708 -0.589024 -0.80808 + -0.182079 2.23311 -3.15402 -0.14078 -0.881711 -0.450296 + -0.136711 2.21986 -3.16327 -0.38733 -0.796874 -0.463646 + -0.238982 2.22262 -3.14485 0.191657 -0.861874 -0.469512 + -0.191271 2.24886 -3.2109 -0.0616488 -0.957934 -0.280289 + -0.129043 2.23586 -3.21559 -0.216743 -0.924201 -0.314443 + -0.248174 2.23837 -3.20173 0.268604 -0.92598 -0.265356 + -0.318018 2.1931 -3.18552 0.556114 -0.806754 -0.199714 + -0.350353 2.16381 -3.16919 0.590012 -0.775904 -0.223291 + -0.035427 2.13561 -3.18694 -0.682214 -0.458894 -0.56921 + -0.039535 2.08549 -3.15914 -0.379286 -0.54305 -0.749159 + -0.030826 2.06779 -3.14729 -0.13509 -0.749882 -0.647632 + -0.030826 2.04626 -3.10218 -0.0590464 -0.87446 -0.48149 + 0.039576 2.08557 -3.15907 0.379912 -0.542272 -0.749405 + 0.030828 2.06779 -3.14728 0.135537 -0.748663 -0.648948 + 0.030828 2.04626 -3.10218 0.081593 -0.911789 -0.402473 + 0.132066 2.0744 -3.09612 0.526476 -0.445916 -0.723866 + 0.123318 2.05662 -3.08433 0.411402 -0.759432 -0.503996 + 0.133336 2.04513 -3.05403 -0.0332632 -0.814664 -0.578979 + 0.070894 2.02181 -3.02604 0.351005 -0.486734 -0.799928 + 0.021963 2.02879 -3.08313 0.527441 -0.660561 -0.534289 + 0.150823 2.095 -3.08881 0.524743 -0.335332 -0.78243 + 0.175985 2.10953 -3.08138 0.278799 -0.389795 -0.877685 + 0.208237 2.10715 -3.07546 -0.0254115 -0.317133 -0.94804 + 0.114943 2.16932 -3.12973 0.540321 -0.3855 -0.747959 + 0.140105 2.18376 -3.12235 0.396281 -0.501989 -0.768744 + 0.185474 2.19702 -3.11311 0.204268 -0.571453 -0.794805 + 0.217725 2.19464 -3.10718 -0.00740461 -0.58899 -0.808106 + 0.088709 2.19606 -3.17486 0.617181 -0.628128 -0.47386 + 0.136709 2.21986 -3.16327 0.403162 -0.780595 -0.477631 + 0.182078 2.23311 -3.15402 0.126937 -0.876067 -0.465181 + 0.238985 2.22262 -3.14485 -0.222732 -0.863119 -0.453228 + 0.268534 2.17222 -3.09796 -0.236088 -0.484316 -0.842437 + 0.129042 2.23586 -3.21559 0.442592 -0.837313 -0.320967 + 0.080404 2.00707 -3.02371 0.558278 0.234857 -0.795718 + -0.129043 2.23586 -3.21559 -0.481621 -0.815823 -0.320117 + -0.080403 2.00708 -3.02372 -0.318263 -0.784542 -0.532167 + -0.596777 1.8903 -2.71226 0.637413 0.71044 0.298295 + -0.568869 1.86808 -2.71897 0.520562 0.793228 0.315919 + -0.554396 1.87296 -2.73803 -0.755406 0.513444 -0.407108 + -0.548043 1.89701 -2.80889 -0.412445 0.871443 0.265473 + -0.540993 1.91304 -2.85124 0.186979 0.908097 0.374698 + -0.539497 1.90957 -2.78863 -0.925256 -0.210189 -0.315789 + -0.540993 1.91304 -2.85124 -0.837668 0.545976 0.0149386 + -0.52297 1.93907 -2.90713 -0.555133 0.830707 0.0418757 + -0.575518 1.88522 -2.73566 -0.394493 -0.738218 -0.547184 + -0.56062 1.92182 -2.78625 -0.348486 -0.763191 -0.544148 + -0.568869 1.86808 -2.71897 -0.485676 -0.739604 -0.465945 + -0.589813 1.88044 -2.71658 -0.456706 -0.852813 0.253238 + -0.596777 1.8903 -2.71226 -0.205753 -0.510838 0.834691 + -0.61772 1.90266 -2.70986 -0.369921 -0.770768 -0.518724 + -0.654387 1.90403 -2.71624 0.15042 -0.886631 -0.437332 + -0.596777 1.8903 -2.71226 -0.363154 -0.457952 -0.811418 + 0.700788 1.60693 -3.09201 -0.935445 0.353103 0.0161381 + 0.700286 1.60496 -3.09226 -0.953977 0.189685 0.232263 + 0.713785 1.62766 -3.06485 -0.678695 0.713623 -0.173537 + 0.714287 1.62963 -3.06459 -0.919041 0.367061 0.143628 + 0.719965 1.63784 -3.07821 -0.830357 0.549801 -0.0906978 + 0.721527 1.63887 -3.08342 -0.817532 0.567644 -0.097067 + 0.702351 1.60795 -3.09721 -0.830406 0.556598 -0.0249845 + 0.700286 1.60496 -3.09226 -0.895389 0.430489 -0.113827 + 0.698218 1.60237 -3.10074 -0.935982 0.331597 -0.118238 + 0.735808 1.65866 -3.01872 -0.666743 0.734097 -0.128668 + 0.740829 1.67833 -3.01615 -0.863698 0.403629 0.301843 + 0.746507 1.68655 -3.02977 -0.771492 0.635909 -0.0205227 + 0.723359 1.65031 -3.03058 0.138716 0.819181 -0.556508 + 0.726764 1.6649 -3.00715 -0.0995092 0.980206 -0.171155 + 0.762929 1.68282 -2.988 -0.638984 0.39098 0.662445 + 0.76795 1.70249 -2.98543 -0.594273 0.5275 0.607111 + 0.701336 1.61931 -3.07671 0.328939 0.679388 -0.655921 + 0.683112 1.63959 -3.07115 -0.224761 0.653228 -0.723032 + 0.686517 1.65418 -3.04772 -0.11062 0.929914 -0.350747 + 0.710988 1.66406 -2.99897 -0.186712 0.974499 0.124456 + 0.744332 1.65545 -2.97188 -0.17084 0.85622 0.487546 + 0.700286 1.60496 -3.09226 0.159707 0.720202 -0.675132 + 0.697173 1.59291 -3.09688 -0.813514 0.116336 -0.56979 + 0.695999 1.5703 -3.11698 -0.986078 0.14171 -0.0869993 + 0.694954 1.56084 -3.11312 -0.978094 0.0883813 -0.188468 + 0.689663 1.57411 -3.09402 -0.741581 0.095203 -0.664074 + 0.688751 1.58509 -3.09346 -0.48378 0.0783975 -0.871671 + 0.696261 1.60389 -3.09632 -0.180911 0.450164 -0.874428 + 0.700286 1.60496 -3.09226 0.546028 0.497951 -0.67372 + 0.710325 1.62074 -3.11096 -0.879374 0.475627 -0.0219122 + 0.699405 1.57794 -3.14714 -0.888559 0.212688 -0.406482 + 0.694389 1.50268 -3.15615 -0.90074 0.0799559 -0.426936 + 0.68896 1.48336 -3.10853 -0.982827 0.0246061 -0.182883 + 0.683668 1.49664 -3.08943 -0.944176 -0.0217137 -0.328724 + 0.714458 1.62632 -3.10743 -0.825696 0.563977 0.0124751 + 0.755063 1.6842 -3.10586 -0.76741 0.630373 -0.117099 + 0.713731 1.62839 -3.14112 -0.831432 0.433017 -0.348163 + 0.724048 1.56911 -3.1729 -0.410332 0.178925 -0.894211 + 0.762133 1.69675 -3.08184 -0.736743 0.668983 -0.0983438 + 0.773682 1.70236 -3.1145 -0.399395 0.788765 -0.467262 + 0.73235 1.64655 -3.14976 -0.520148 0.581192 -0.625829 + 0.77521 1.71429 -3.01999 -0.440014 0.893548 0.0892177 + 0.790836 1.72448 -3.07206 -0.25334 0.960429 -0.115734 + 0.80354 1.71436 -3.10247 0.135789 0.848434 -0.511588 + 0.805723 1.6918 -3.12458 0.128472 0.662692 -0.73779 + 0.775865 1.6798 -3.13661 -0.0676384 0.598624 -0.798169 + 0.784145 1.71184 -2.99598 -0.230467 0.940921 0.248098 + 0.818774 1.72266 -3.0542 0.157211 0.987058 -0.0316526 + 0.831478 1.71254 -3.0846 0.385266 0.855034 -0.347111 + 0.810379 1.70534 -2.96548 -0.260932 0.717954 0.645334 + 0.826574 1.71469 -2.97603 0.12208 0.899702 0.419085 + 0.827708 1.72022 -3.03019 0.140143 0.986952 0.0792875 + 0.8513 1.71244 -3.03504 0.561292 0.827393 -0.0192898 + 0.76146 1.66694 -2.97721 -0.365876 0.625914 0.688743 + 0.80891 1.68947 -2.95469 -0.526387 0.535264 0.660613 + 0.819506 1.67489 -2.93533 -0.0602987 0.583959 0.80954 + 0.850166 1.70692 -2.98088 0.568615 0.745217 0.348323 + 0.767406 1.65093 -2.95128 -0.464066 0.686456 0.559841 + 0.772151 1.65318 -2.94903 -0.503024 0.628014 0.593772 + 0.782747 1.63861 -2.92967 -0.368758 0.557467 0.743806 + 0.750278 1.63944 -2.94596 0.0209299 0.823393 0.567086 + 0.759055 1.63552 -2.94107 -0.235389 0.788655 0.567992 + 0.7638 1.63777 -2.93882 -0.437651 0.643943 0.627535 + 0.780306 1.6323 -2.92608 -0.288204 0.647061 0.705868 + 0.815706 1.62228 -2.90612 0.124878 0.479006 0.868883 + 0.728557 1.65461 -2.9637 -0.00793514 0.907688 0.419572 + 0.750129 1.63638 -2.94029 0.18042 0.860595 0.476262 + 0.758906 1.63246 -2.93541 0.0561691 0.788152 0.612912 + 0.76136 1.63146 -2.93523 -0.0293958 0.697708 0.715779 + 0.70868 1.65059 -2.96396 -0.341861 0.822352 0.454827 + 0.742838 1.62485 -2.91521 -0.0152496 0.78271 0.6222 + 0.760134 1.62211 -2.92016 0.272579 0.828643 0.488929 + 0.762588 1.62112 -2.91999 0.0550852 0.817751 0.572931 + 0.795101 1.61183 -2.89945 -0.0469307 0.49094 0.869929 + 0.695763 1.65722 -2.99638 -0.454934 0.8663 0.206297 + 0.678778 1.63089 -2.96438 -0.758219 0.422261 0.496789 + 0.722961 1.62083 -2.91547 -0.40496 0.522384 0.750415 + 0.727908 1.5947 -2.90265 -0.623075 0.124454 0.772197 + 0.752843 1.61059 -2.89508 -0.094553 0.654026 0.75054 + 0.671291 1.64734 -3.04513 -0.759618 0.620622 -0.194444 + 0.665861 1.63752 -2.9968 -0.852983 0.476924 0.212044 + 0.683725 1.60477 -2.95156 -0.787319 0.0556653 0.614028 + 0.666173 1.60744 -3.06324 -0.955854 0.117315 -0.269407 + 0.660742 1.59762 -3.01491 -0.998913 0.0453507 0.0107923 + 0.670611 1.58683 -2.96985 -0.881131 -0.00980823 0.47277 + 0.72847 1.54609 -2.91265 -0.675457 -0.182414 0.714481 + 0.674551 1.60644 -3.08384 -0.623596 0.24512 -0.742324 + 0.67529 1.49763 -3.06883 -0.955341 -0.109941 -0.274294 + 0.675092 1.47307 -3.05471 -0.978055 -0.0556893 -0.200764 + 0.660545 1.57306 -3.00079 -0.991605 -0.0224113 0.127348 + 0.697311 1.61823 -3.08077 0.197968 0.57859 -0.791229 + 0.679223 1.43047 -3.06729 -0.978327 -0.0415076 -0.202863 + 0.665383 1.50919 -3.00677 -0.978842 -0.141584 0.147721 + 0.68851 1.41049 -3.11426 -0.989145 -0.0619066 -0.133268 + 0.686728 1.39615 -3.08333 -0.976048 -0.109724 -0.187857 + 0.677067 1.40267 -3.05111 -0.965029 -0.234309 0.117556 + 0.669514 1.46659 -3.01935 -0.966267 -0.184369 0.179824 + 0.693939 1.4298 -3.16189 -0.896329 -0.00861553 -0.443306 + 0.69819 1.36955 -3.16113 -0.898081 -0.0640788 -0.435136 + 0.694726 1.36325 -3.12214 -0.991672 -0.0822054 -0.0991424 + 0.692944 1.34892 -3.0912 -0.989454 -0.142851 -0.0239792 + 0.684572 1.36835 -3.06714 -0.954512 -0.289552 0.0711758 + 0.716485 1.43006 -3.18433 -0.41442 0.0047709 -0.910073 + 0.720736 1.36981 -3.18358 -0.373408 -0.0469636 -0.926478 + 0.719922 1.28898 -3.17817 -0.383264 -0.0664205 -0.921248 + 0.70197 1.28763 -3.1606 -0.897244 -0.0481392 -0.438902 + 0.698506 1.28133 -3.1216 -0.997817 -0.0432214 -0.0499371 + 0.719033 1.49384 -3.18192 -0.392002 0.0949836 -0.915048 + 0.76129 1.40878 -3.18738 -0.0326972 -0.0248075 -0.999157 + 0.757219 1.36651 -3.18369 -0.0128779 -0.0681832 -0.99759 + 0.756405 1.28568 -3.17829 0.016686 -0.0727226 -0.997213 + 0.763838 1.47256 -3.18497 -0.0105868 0.0574224 -0.998294 + 0.801582 1.39762 -3.18654 0.0371262 -0.0345071 -0.998715 + 0.797511 1.35535 -3.18285 0.0453096 -0.0904423 -0.994871 + 0.788812 1.28247 -3.17667 0.063947 -0.0823329 -0.994551 + 0.750995 1.17563 -3.16969 0.0160812 -0.061235 -0.997994 + 0.769195 1.54989 -3.17987 -0.0249877 0.120279 -0.992426 + 0.813673 1.53427 -3.17938 0.135486 0.108803 -0.984787 + 0.808316 1.45694 -3.18447 0.0694908 0.0581577 -0.995886 + 0.845832 1.38144 -3.18374 0.354266 -0.143398 -0.924085 + 0.833141 1.35149 -3.17915 0.320905 -0.185374 -0.928793 + 0.733622 1.62154 -3.16383 -0.453746 0.321119 -0.831263 + 0.778768 1.60233 -3.1708 0.028152 0.253517 -0.966921 + 0.813206 1.60082 -3.16797 0.137868 0.242546 -0.960294 + 0.857387 1.52845 -3.17019 0.451533 0.117568 -0.884475 + 0.852566 1.44075 -3.18167 0.38889 0.0403665 -0.9204 + 0.777137 1.65479 -3.15069 0.0154395 0.445613 -0.895093 + 0.811574 1.65329 -3.14786 0.0838981 0.451101 -0.88852 + 0.846504 1.64373 -3.14987 0.395785 0.395273 -0.828923 + 0.85692 1.595 -3.15879 0.495367 0.203617 -0.844483 + 0.840653 1.68224 -3.12658 0.376947 0.648321 -0.661506 + 0.863912 1.67388 -3.10907 0.737494 0.536513 -0.41019 + 0.874516 1.63969 -3.12224 0.81587 0.337792 -0.469312 + 0.884932 1.59097 -3.13117 0.835199 0.198623 -0.512827 + 0.886875 1.52234 -3.145 0.822874 0.0787617 -0.562739 + 0.854737 1.70418 -3.06709 0.646513 0.730064 -0.221421 + 0.88195 1.67248 -3.04744 0.888013 0.448523 -0.101287 + 0.892555 1.63829 -3.06061 0.964454 0.25371 -0.0738963 + 0.9003 1.5916 -3.08948 0.971079 0.174759 -0.162678 + 0.902243 1.52298 -3.10331 0.984157 0.0188288 -0.176299 + 0.878514 1.68074 -3.01539 0.886186 0.445666 0.126712 + 0.876869 1.66136 -2.98761 0.895263 0.283128 0.344008 + 0.883256 1.63656 -2.98772 0.932162 0.174993 0.316941 + 0.892188 1.60638 -3.01517 0.978727 0.081796 0.188154 + 0.899933 1.55969 -3.04404 0.986329 -0.0091884 0.164535 + 0.848521 1.68754 -2.95309 0.492205 0.602971 0.627822 + 0.844721 1.63493 -2.92389 0.598312 0.288512 0.747518 + 0.851108 1.61012 -2.92401 0.745631 0.174029 0.643232 + 0.874069 1.58832 -2.95356 0.882402 -0.00570791 0.470462 + 0.883002 1.55814 -2.981 0.923409 -0.11779 0.365297 + 0.833524 1.59783 -2.90054 0.519677 0.0550165 0.85259 + 0.856485 1.57603 -2.93009 0.743148 -0.15405 0.651153 + 0.853575 1.52989 -2.94193 0.746095 -0.207528 0.632672 + 0.874246 1.48103 -2.99973 0.894297 -0.167073 0.415113 + 0.812919 1.58737 -2.89387 0.217734 -0.0105637 0.975951 + 0.810009 1.54124 -2.90571 0.519032 -0.208213 0.829007 + 0.805551 1.45534 -2.91908 0.568426 -0.228602 0.790337 + 0.844819 1.45278 -2.96066 0.768549 -0.257066 0.585874 + 0.876418 1.43272 -3.02103 0.869527 -0.188582 0.456465 + 0.781249 1.53134 -2.89374 0.151456 -0.184957 0.971006 + 0.776791 1.44544 -2.90711 -0.328562 -0.252617 0.910072 + 0.792961 1.41006 -2.92624 0.171971 -0.606728 0.776085 + 0.832229 1.40751 -2.96782 0.673481 -0.419816 0.608422 + 0.777383 1.60064 -2.89336 0.200314 0.424396 0.883042 + 0.775356 1.57809 -2.88406 0.480751 0.039515 0.875966 + 0.75727 1.49267 -2.90546 -0.343978 -0.301939 0.889108 + 0.768564 1.43061 -2.9253 -0.541749 -0.438385 0.717166 + 0.784733 1.39524 -2.94443 -0.0485043 -0.694091 0.718251 + 0.750816 1.58804 -2.88577 -0.300059 0.114674 0.947003 + 0.751378 1.53942 -2.89578 -0.395611 -0.215859 0.892691 + 0.715355 1.52815 -2.93095 -0.702633 -0.207871 0.680512 + 0.728331 1.47624 -2.93836 -0.6625 -0.305273 0.684033 + 0.675449 1.52296 -2.97583 -0.831941 -0.184289 0.523365 + 0.688425 1.47104 -2.98324 -0.771179 -0.302461 0.560179 + 0.739624 1.41418 -2.9582 -0.654186 -0.363178 0.663433 + 0.746833 1.36701 -2.97759 -0.511635 -0.444488 0.735296 + 0.786007 1.36963 -2.96497 0.141565 -0.554925 0.819767 + 0.695978 1.40712 -3.015 -0.773997 -0.350969 0.527019 + 0.703187 1.35996 -3.03439 -0.784807 -0.400852 0.472648 + 0.715481 1.33661 -3.03751 -0.813503 -0.266747 0.516778 + 0.744527 1.32767 -3.00042 -0.587356 -0.254346 0.768323 + 0.783702 1.33029 -2.9878 0.120904 -0.3648 0.923203 + 0.696866 1.34501 -3.07027 -0.914946 -0.298987 0.271072 + 0.70283 1.27277 -3.07349 -0.940969 -0.060861 0.332976 + 0.717646 1.267 -3.04741 -0.837119 -0.0682182 0.54275 + 0.746692 1.25807 -3.01032 -0.555269 -0.103092 0.825256 + 0.698909 1.27668 -3.09442 -0.99453 -0.0551595 0.0887001 + 0.701586 1.16723 -3.09375 -0.993417 -0.0329606 0.109707 + 0.705499 1.16387 -3.07604 -0.935535 -0.0353781 0.351458 + 0.720315 1.1581 -3.04997 -0.833832 -0.0353227 0.550887 + 0.701184 1.17188 -3.12093 -0.998571 -0.0322023 -0.0426532 + 0.705125 1.06853 -3.11732 -0.997987 -0.050053 -0.038954 + 0.705752 1.06448 -3.09411 -0.992409 -0.0495043 0.112581 + 0.709665 1.06112 -3.07641 -0.940536 -0.0444678 0.336771 + 0.703946 1.17691 -3.15202 -0.905141 -0.0426522 -0.422967 + 0.707888 1.07356 -3.14842 -0.924691 -0.0569793 -0.376429 + 0.713241 0.976547 -3.1442 -0.925466 -0.0642167 -0.373347 + 0.710884 0.972315 -3.11638 -0.997643 -0.0566793 -0.0386713 + 0.711511 0.968265 -3.09316 -0.991721 -0.0556331 0.115734 + 0.721898 1.17826 -3.1696 -0.37877 -0.0602308 -0.923529 + 0.72109 1.07123 -3.16464 -0.444997 -0.0453588 -0.894383 + 0.726443 0.974225 -3.16042 -0.580861 -0.0676771 -0.811184 + 0.726527 0.875771 -3.15145 -0.634698 -0.105587 -0.765512 + 0.718143 0.880408 -3.13907 -0.941296 -0.073221 -0.329545 + 0.750186 1.0686 -3.16473 0.00844807 -0.0177461 -0.999807 + 0.745035 0.958311 -3.16628 -0.162641 -0.0515508 -0.985338 + 0.745119 0.859859 -3.15731 -0.234301 -0.1429 -0.961604 + 0.775266 1.06278 -3.16408 0.066902 -0.0214768 -0.997528 + 0.770114 0.952483 -3.16563 0.12031 -0.0438588 -0.991767 + 0.762232 0.852825 -3.15737 0.0680338 -0.151879 -0.986055 + 0.741544 0.769971 -3.13812 -0.229043 -0.313945 -0.9214 + 0.783401 1.17241 -3.16807 0.0703857 -0.0614228 -0.995627 + 0.803682 1.05969 -3.16112 0.403698 -0.0536019 -0.913321 + 0.794329 0.950801 -3.16004 0.448426 -0.070075 -0.891069 + 0.786447 0.851142 -3.15179 0.445215 -0.1548 -0.881941 + 0.811817 1.16932 -3.16512 0.379728 -0.0883243 -0.920872 + 0.821023 1.05585 -3.14529 0.832958 -0.0870153 -0.546451 + 0.81167 0.946961 -3.14421 0.831544 -0.1018 -0.54605 + 0.79914 0.848498 -3.14022 0.814522 -0.168242 -0.555201 + 0.772999 0.76158 -3.13749 0.3191 -0.328354 -0.889021 + 0.824442 1.2786 -3.17296 0.37599 -0.116431 -0.91928 + 0.845429 1.27364 -3.155 0.805996 -0.155493 -0.571132 + 0.832804 1.16437 -3.14715 0.821373 -0.116734 -0.558319 + 0.829853 1.05014 -3.11636 0.987854 -0.100336 -0.118644 + 0.819573 0.942088 -3.11833 0.985848 -0.111342 -0.125325 + 0.859534 1.34392 -3.15667 0.764696 -0.290696 -0.575096 + 0.856502 1.26648 -3.11872 0.976875 -0.167397 -0.133013 + 0.841635 1.15865 -3.11822 0.984171 -0.123086 -0.127505 + 0.82755 1.04513 -3.0913 0.963053 -0.112741 0.244577 + 0.872225 1.37387 -3.16127 0.786749 -0.240202 -0.568621 + 0.870607 1.33676 -3.1204 0.940795 -0.305928 -0.145988 + 0.85376 1.26113 -3.08574 0.959641 -0.168593 0.225091 + 0.838893 1.1533 -3.08524 0.962827 -0.122529 0.240728 + 0.882054 1.43465 -3.15648 0.83209 -0.0378242 -0.553349 + 0.886844 1.37081 -3.11415 0.952646 -0.281034 -0.116129 + 0.883944 1.37025 -3.07144 0.917392 -0.326949 0.226926 + 0.867707 1.3362 -3.07768 0.917191 -0.337814 0.211289 + 0.896673 1.43159 -3.10936 0.982078 -0.104648 -0.156752 + 0.896536 1.41999 -3.07138 0.969828 -0.170033 0.174707 + 0.863826 1.38298 -3.02108 0.785117 -0.292005 0.546191 + 0.850533 1.33146 -3.04056 0.798927 -0.312346 0.513961 + 0.836586 1.25639 -3.04862 0.825092 -0.166957 0.539767 + 0.902105 1.51138 -3.06534 0.985669 -0.0539359 0.159834 + 0.833503 1.38189 -2.98836 0.630331 -0.412928 0.657399 + 0.82021 1.33037 -3.00783 0.585936 -0.318945 0.744952 + 0.812463 1.25423 -3.02293 0.611503 -0.165467 0.773747 + 0.775955 1.25415 -3.0029 0.109863 -0.155232 0.98175 + 0.771958 1.1473 -3.01397 0.127433 -0.105463 0.986224 + 0.801073 1.14736 -3.02995 0.608752 -0.121245 0.784041 + 0.825197 1.14953 -3.05563 0.828094 -0.122487 0.547044 + 0.742695 1.15122 -3.02139 -0.556495 -0.059617 0.82871 + 0.742493 1.04514 -3.02834 -0.503241 -0.0782431 0.860597 + 0.764642 1.03836 -3.02585 0.173733 -0.123124 0.977066 + 0.793758 1.03842 -3.04183 0.603302 -0.134541 0.786082 + 0.813854 1.04135 -3.06169 0.816734 -0.131012 0.561945 + 0.720112 1.05203 -3.05692 -0.845027 -0.0437517 0.532931 + 0.725672 0.955581 -3.05743 -0.855401 -0.0455373 0.515961 + 0.737453 0.933047 -3.04199 -0.535915 -0.0780239 0.840659 + 0.759602 0.926263 -3.03951 0.239594 -0.123193 0.963025 + 0.715225 0.964675 -3.07691 -0.940826 -0.0548141 0.334429 + 0.720464 0.869428 -3.07741 -0.946526 -0.0502731 0.318686 + 0.726842 0.85972 -3.0645 -0.874596 -0.0557324 0.481638 + 0.738623 0.837186 -3.04907 -0.49374 -0.0934459 0.864574 + 0.716751 0.87302 -3.09366 -0.990353 -0.0518002 0.128522 + 0.721533 0.778315 -3.0923 -0.980171 -0.096369 0.173143 + 0.72532 0.775814 -3.08118 -0.934154 -0.102162 0.341935 + 0.731699 0.766105 -3.06827 -0.892646 -0.112527 0.436486 + 0.715786 0.876178 -3.11125 -0.998312 -0.0529804 -0.0237958 + 0.720568 0.781473 -3.10989 -0.994763 -0.0961929 -0.0345456 + 0.727586 0.728534 -3.09845 -0.753101 -0.657734 -0.0149931 + 0.731373 0.726032 -3.08733 -0.896027 -0.413148 0.162615 + 0.73793 0.755901 -3.05943 -0.54205 -0.217014 0.811841 + 0.721855 0.783783 -3.12507 -0.940259 -0.127966 -0.315497 + 0.728872 0.730843 -3.11363 -0.753535 -0.485996 -0.442711 + 0.740176 0.721669 -3.11429 -0.43502 -0.711477 -0.551867 + 0.737605 0.715827 -3.07849 -0.610775 -0.681908 0.402436 + 0.752399 0.748231 -3.05953 0.131267 -0.282889 0.950128 + 0.73024 0.779145 -3.13746 -0.562717 -0.215037 -0.798191 + 0.758657 0.762938 -3.13818 -0.0637806 -0.337891 -0.939022 + 0.755709 0.715314 -3.11404 -0.172974 -0.796798 -0.578958 + 0.753137 0.709472 -3.07824 -0.0550107 -0.868767 0.492156 + 0.770051 0.713956 -3.11335 0.358864 -0.751013 -0.554252 + 0.767678 0.70932 -3.08482 0.434262 -0.824148 0.363588 + 0.76694 0.74808 -3.06611 0.533913 -0.219183 0.816637 + 0.778414 0.831733 -3.06725 0.635848 -0.103489 0.764845 + 0.753092 0.829517 -3.04917 0.274375 -0.12115 0.953961 + 0.785692 0.758936 -3.12592 0.779881 -0.303731 -0.547296 + 0.790005 0.756277 -3.1118 0.946459 -0.280706 -0.159434 + 0.774364 0.711295 -3.09923 0.611396 -0.790103 -0.0439523 + 0.78164 0.750508 -3.07983 0.799905 -0.22335 0.557016 + 0.807043 0.843624 -3.11434 0.978606 -0.1607 -0.128475 + 0.805363 0.839829 -3.09679 0.935664 -0.144888 0.321777 + 0.788325 0.752482 -3.09424 0.941537 -0.257519 0.217237 + 0.793113 0.83416 -3.08097 0.749946 -0.104536 0.653187 + 0.81727 0.937079 -3.09327 0.933411 -0.10991 0.341561 + 0.80502 0.931409 -3.07746 0.764571 -0.123691 0.632559 + 0.784924 0.928477 -3.05759 0.64749 -0.138817 0.749324 + -0.891883 1.52196 -2.6212 -0.22609 0.561287 0.796141 + -0.906756 1.51837 -2.62531 0.10449 0.994419 -0.0145637 + -0.93052 1.51733 -2.62797 0.0584756 0.636585 -0.768986 + -0.892392 1.53419 -2.64619 -0.365591 0.808455 0.461241 + -0.900577 1.5312 -2.64834 0.139518 0.805828 0.575479 + -0.912714 1.52633 -2.6262 0.242418 0.388341 0.889058 + -0.93052 1.51733 -2.62797 -0.419363 0.0396953 0.90695 + -0.877519 1.53779 -2.64208 -0.301602 0.825908 0.476352 + -0.890007 1.54021 -2.65338 -0.225765 0.663121 0.713653 + -0.898192 1.53722 -2.65553 0.107253 0.322486 0.940478 + -0.906535 1.53917 -2.64923 0.655018 0.201444 0.728266 + -0.841083 1.54559 -2.63191 -0.102775 0.670841 0.734445 + -0.818326 1.56307 -2.64951 -0.0447733 0.804111 0.59279 + -0.854762 1.55527 -2.65968 -0.231459 0.809545 0.539503 + -0.875344 1.55504 -2.66534 -0.0540791 0.707923 0.704217 + -0.876163 1.50957 -2.61646 -0.0435633 0.0331228 0.998501 + -0.825363 1.5332 -2.62717 0.190283 0.303543 0.933624 + -0.801154 1.54689 -2.63927 0.39546 0.427512 0.812923 + -0.779329 1.56435 -2.66489 0.592562 0.485385 0.642862 + -0.796501 1.58053 -2.67512 0.103071 0.837004 0.537402 + -0.928499 1.44977 -2.64188 -0.393582 -0.269532 0.878889 + -0.88467 1.4419 -2.63615 -0.0961734 -0.303545 0.947951 + -0.814638 1.48823 -2.62312 0.295047 -0.124756 0.947303 + -0.79043 1.50192 -2.63522 0.601685 0.0229928 0.798403 + -0.969471 1.43614 -2.67626 -0.647472 -0.201327 0.735015 + -0.910615 1.32677 -2.68468 -0.221259 -0.330885 0.917365 + -0.866786 1.3189 -2.67895 0.106557 -0.392402 0.913601 + -0.823145 1.42055 -2.64281 0.267356 -0.355809 0.8955 + -0.788958 1.41557 -2.6663 0.656989 -0.353273 0.666006 + -0.971492 1.50371 -2.66235 -0.693407 -0.0525904 0.718624 + -0.983836 1.51751 -2.67543 -0.75654 0.03766 0.652862 + -0.999264 1.50315 -2.6968 -0.879837 -0.0303789 0.474304 + -0.998304 1.44441 -2.70876 -0.876009 -0.114088 0.468606 + -0.964992 1.35018 -2.68955 -0.491557 -0.234337 0.838724 + -0.940298 1.55651 -2.64549 -0.447077 0.350576 0.822933 + -0.952642 1.57031 -2.65857 -0.461898 0.419921 0.781228 + -0.979896 1.57252 -2.68028 -0.721434 0.400796 0.564708 + -0.995324 1.55816 -2.70165 -0.897094 0.288711 0.334466 + -0.922492 1.56551 -2.64372 0.0630064 0.524095 0.849326 + -0.911465 1.58928 -2.66198 0.190243 0.574209 0.796299 + -0.937803 1.59891 -2.67516 -0.243033 0.734408 0.633703 + -0.965057 1.60113 -2.69687 -0.559648 0.733901 0.384946 + -0.905557 1.54438 -2.64776 0.354318 -0.0592797 0.933244 + -0.894531 1.56815 -2.66602 0.48239 0.337818 0.808195 + -0.867746 1.59585 -2.69256 0.474283 0.485573 0.734353 + -0.885343 1.61232 -2.69242 0.267523 0.705233 0.656565 + -0.911681 1.62195 -2.7056 -0.10586 0.910048 0.400757 + -0.897214 1.54243 -2.65405 0.345225 0.077066 0.93535 + -0.882551 1.55726 -2.66602 0.234796 0.498919 0.834237 + -0.855766 1.58495 -2.69256 0.28742 0.637788 0.714574 + -0.849924 1.60828 -2.71679 0.566754 0.663429 0.488521 + -0.867521 1.62475 -2.71665 0.380702 0.828308 0.411063 + -0.849585 1.5812 -2.68906 -0.0353293 0.798288 0.601239 + -0.828368 1.59373 -2.71497 0.146724 0.943731 0.296383 + -0.834549 1.59748 -2.71847 0.444904 0.799796 0.402973 + -0.834941 1.60577 -2.74159 0.591739 0.774122 0.224898 + -0.864122 1.6263 -2.73181 0.423915 0.889071 0.172767 + -0.829003 1.58143 -2.6834 -0.121484 0.851511 0.510069 + -0.811174 1.5928 -2.7105 -0.0214423 0.983216 0.181182 + -0.811027 1.59247 -2.74355 0.153523 0.985513 0.072074 + -0.819566 1.59496 -2.74326 0.424025 0.889941 0.16795 + -0.778672 1.5919 -2.70222 0.35084 0.880319 0.319296 + -0.772282 1.59501 -2.73269 0.302944 0.940593 0.153327 + -0.793833 1.59155 -2.73908 -0.060727 0.998063 -0.0134772 + -0.803196 1.59435 -2.77524 0.186314 0.976174 0.111227 + -0.811736 1.59684 -2.77495 0.409385 0.900436 0.147034 + -0.760085 1.57115 -2.69963 0.825939 0.432965 0.361061 + -0.753695 1.57426 -2.7301 0.817051 0.471931 0.331223 + -0.751357 1.59298 -2.76679 0.446724 0.879992 0.161407 + -0.769096 1.59685 -2.77483 0.0491148 0.998454 -0.0260182 + -0.790647 1.59339 -2.78122 0.0213143 0.998105 0.0577178 + -0.765915 1.5493 -2.67958 0.848401 0.161521 0.504109 + -0.741668 1.50855 -2.71809 0.880022 0.19405 0.433481 + -0.733332 1.50676 -2.73257 0.956958 0.0327701 0.288369 + -0.745359 1.57248 -2.74458 0.735298 0.470937 0.487396 + -0.777016 1.48688 -2.64992 0.750565 -0.115649 0.650598 + -0.747498 1.4867 -2.69804 0.889495 -0.0654025 0.45224 + -0.738473 1.45156 -2.73762 0.969209 -0.219454 0.111688 + -0.726742 1.56403 -2.75754 0.931474 0.259925 0.25455 + -0.75944 1.41539 -2.71442 0.855891 -0.307935 0.415485 + -0.765923 1.35168 -2.76479 0.958521 -0.283734 0.0270655 + -0.731883 1.50883 -2.76259 0.984025 -0.112073 -0.138327 + -0.746557 1.53971 -2.81573 0.906447 0.0021148 -0.422314 + -0.73274 1.58453 -2.77975 0.824529 0.558302 -0.0919244 + -0.78689 1.3155 -2.7416 0.805312 -0.353729 0.47576 + -0.799393 1.24551 -2.7692 0.854398 -0.260015 0.449884 + -0.773356 1.3433 -2.78776 0.966381 -0.20482 -0.155421 + -0.739316 1.50045 -2.78555 0.945678 -0.13106 -0.297517 + -0.814154 1.31359 -2.71211 0.593899 -0.404248 0.695606 + -0.826657 1.2436 -2.73972 0.661291 -0.338552 0.669385 + -0.848341 1.31858 -2.68862 0.446106 -0.406151 0.797515 + -0.848495 1.23947 -2.7224 0.513131 -0.362928 0.777805 + -0.823961 1.19951 -2.76147 0.67794 -0.307272 0.667818 + -0.86694 1.2398 -2.71272 0.162325 -0.417997 0.893828 + -0.862939 1.19246 -2.73746 0.15102 -0.452062 0.879109 + -0.8458 1.19538 -2.74415 0.512286 -0.367034 0.776434 + -0.901155 1.24515 -2.71393 -0.189097 -0.424621 0.885403 + -0.897154 1.19781 -2.73866 -0.202264 -0.474083 0.856933 + -0.885064 1.11308 -2.78374 -0.203041 -0.486904 0.849529 + -0.857895 1.11402 -2.77952 0.139952 -0.469199 0.871932 + -0.840756 1.11695 -2.78622 0.510101 -0.386238 0.768516 + -0.955531 1.26856 -2.7188 -0.496144 -0.396083 0.772632 + -0.944055 1.19838 -2.75499 -0.510399 -0.452603 0.731193 + -0.931966 1.11365 -2.80007 -0.484807 -0.470809 0.737089 + -0.983141 1.28138 -2.74361 -0.889107 -0.279328 0.36258 + -0.971665 1.21119 -2.77979 -0.893401 -0.307535 0.327502 + -0.95616 1.11954 -2.82119 -0.868557 -0.330632 0.369177 + -0.908684 1.00316 -2.85679 -0.470362 -0.462925 0.751306 + -0.993825 1.35845 -2.72205 -0.905694 -0.185731 0.381081 + -0.988035 1.29495 -2.78707 -0.984831 -0.167623 0.0448501 + -0.975929 1.22491 -2.81432 -0.982278 -0.183621 0.0376019 + -0.960425 1.13325 -2.85572 -0.985402 -0.165077 0.0416373 + -1.01339 1.45412 -2.75603 -0.984817 -0.0887633 0.149187 + -0.998719 1.37202 -2.76552 -0.984029 -0.169562 0.0541816 + -0.990991 1.30479 -2.82818 -0.985617 -0.167175 0.0247397 + -0.978886 1.23475 -2.85543 -0.984693 -0.174093 0.00843553 + -0.963241 1.14511 -2.88537 -0.986167 -0.165736 -0.00230545 + -1.01435 1.51286 -2.74407 -0.987585 0.0792685 0.135622 + -1.0123 1.53068 -2.77243 -0.972831 0.230619 -0.0203678 + -1.01708 1.46156 -2.80018 -0.997232 -0.0441868 -0.0598019 + -1.0024 1.37945 -2.80967 -0.988283 -0.151019 0.0221316 + -0.993265 1.57599 -2.73001 -0.864745 0.486161 0.125953 + -0.983454 1.59551 -2.77394 -0.806544 0.588438 -0.0568123 + -1.00644 1.53931 -2.8072 -0.930646 0.307611 -0.198176 + -1.01122 1.47018 -2.83495 -0.978063 0.0583339 -0.199974 + -0.955245 1.62066 -2.7408 -0.48232 0.859587 0.168754 + -0.946612 1.62905 -2.77789 -0.340305 0.936351 -0.086251 + -0.967775 1.60432 -2.81096 -0.657293 0.687269 -0.309236 + -0.990762 1.54811 -2.84422 -0.836216 0.402474 -0.372502 + -0.903047 1.63034 -2.7427 -0.0882662 0.99462 0.0542233 + -0.925879 1.62295 -2.81582 -0.168011 0.937725 -0.304048 + -0.947043 1.59822 -2.84888 -0.427489 0.715085 -0.553088 + -0.887393 1.63128 -2.73602 0.00295766 0.9891 0.147214 + -0.910225 1.62389 -2.80914 0.102165 0.974336 -0.200577 + -0.905845 1.6127 -2.8457 0.0248469 0.874337 -0.484684 + -0.883994 1.63283 -2.75118 -0.0178476 0.999277 -0.0335799 + -0.879614 1.62164 -2.78774 0.168309 0.947439 -0.272085 + -0.869875 1.58653 -2.88225 -0.0578116 0.809356 -0.584467 + -0.863711 1.54912 -2.92 -0.268314 0.380988 -0.884791 + -0.89968 1.5753 -2.88344 -0.271146 0.550918 -0.789284 + -0.85349 1.62504 -2.76183 0.379809 0.925062 0.00223308 + -0.859971 1.62019 -2.79007 0.0168362 0.970605 -0.240088 + -0.850232 1.58508 -2.88458 0.0153005 0.804867 -0.593257 + -0.835818 1.55511 -2.91418 0.278561 0.479645 -0.832072 + -0.854955 1.47201 -2.93872 -0.063711 0.182406 -0.981157 + -0.824309 1.60451 -2.7716 0.574778 0.802247 0.161339 + -0.82079 1.61174 -2.82678 0.344894 0.935113 -0.0813088 + -0.827271 1.60687 -2.85503 0.149029 0.890965 -0.428919 + -0.812857 1.57691 -2.88462 0.373274 0.661785 -0.650159 + -0.808217 1.60406 -2.83014 0.314385 0.944017 -0.0999674 + -0.795668 1.6031 -2.83612 0.258166 0.929567 -0.263164 + -0.792252 1.56646 -2.87796 0.662158 0.402325 -0.632204 + -0.827063 1.478 -2.93291 0.468141 0.172441 -0.866665 + -0.775063 1.59265 -2.82945 0.473812 0.80152 -0.364785 + -0.77114 1.54396 -2.85738 0.817065 0.136911 -0.560053 + -0.805951 1.4555 -2.91233 0.808165 0.0559644 -0.586291 + -0.824235 1.37254 -2.94607 0.613753 0.122473 -0.77994 + -0.872747 1.46842 -2.93547 -0.0893839 0.29444 -0.951481 + -0.757324 1.58878 -2.8214 0.614111 0.647935 -0.450609 + -0.775446 1.45734 -2.85964 0.898803 -0.0613154 -0.434044 + -0.79373 1.37437 -2.89337 0.912884 0.00115234 -0.408217 + -0.768206 1.41808 -2.82947 0.948323 -0.136453 -0.286467 + -0.780405 1.34771 -2.8475 0.977473 -0.0739796 -0.197671 + -0.800511 1.2866 -2.91908 0.906474 0.0521904 -0.419024 + -0.785555 1.27293 -2.80579 0.983717 -0.124474 0.129641 + -0.785618 1.23892 -2.82147 0.989766 -0.0798494 0.118267 + -0.787186 1.25993 -2.87321 0.988089 -0.00621435 -0.153757 + -0.799455 1.2115 -2.78489 0.864258 -0.211996 0.456198 + -0.798572 1.13536 -2.82202 0.873662 -0.215576 0.436168 + -0.789111 1.14932 -2.85386 0.992109 -0.0734903 0.101584 + -0.79068 1.17034 -2.9056 0.982825 0.0193546 -0.183523 + -0.823078 1.12337 -2.79861 0.67682 -0.321418 0.662273 + -0.8192 1.01195 -2.85771 0.67275 -0.318662 0.667729 + -0.801549 1.02036 -2.87402 0.8689 -0.214634 0.446032 + -0.792088 1.03432 -2.90586 0.995083 -0.0613204 0.0777778 + -0.836878 1.00552 -2.84532 0.476401 -0.389876 0.78806 + -0.830536 0.893194 -2.90304 0.470886 -0.372882 0.799515 + -0.818915 0.897514 -2.9108 0.664699 -0.307494 0.680898 + -0.801264 0.905924 -2.92711 0.874166 -0.203711 0.440836 + -0.848297 1.00313 -2.84221 0.107195 -0.464102 0.879272 + -0.841954 0.890798 -2.89992 0.0966079 -0.440808 0.892387 + -0.833718 0.777782 -2.95507 0.095437 -0.399929 0.911564 + -0.826877 0.779219 -2.95694 0.466962 -0.338023 0.817121 + -0.815256 0.783538 -2.96471 0.665399 -0.278073 0.692762 + -0.875466 1.00218 -2.84643 -0.198566 -0.479279 0.854905 + -0.859798 0.890231 -2.90282 -0.202535 -0.45191 0.868767 + -0.893016 0.891206 -2.91318 -0.444824 -0.444226 0.777685 + -0.871462 0.777799 -2.96418 -0.445752 -0.408124 0.796706 + -0.851562 0.777212 -2.95797 -0.210514 -0.411461 0.886783 + -0.91125 0.894913 -2.92662 -0.755978 -0.381665 0.531816 + -0.889696 0.781507 -2.97762 -0.762165 -0.364953 0.53471 + -0.872875 0.707806 -3.00101 -0.774018 -0.304332 0.555228 + -0.861211 0.705433 -2.99241 -0.469271 -0.289304 0.834319 + -0.841311 0.704848 -2.9862 -0.220981 -0.267276 0.93794 + -0.932878 1.00905 -2.87791 -0.77868 -0.387517 0.493445 + -0.923644 0.903215 -2.94988 -0.945361 -0.269203 0.183908 + -0.897121 0.78648 -2.99155 -0.943409 -0.276693 0.18281 + -0.8803 0.712776 -3.01494 -0.944125 -0.288983 0.158481 + -0.945272 1.01735 -2.90117 -0.952154 -0.248534 0.177858 + -0.925618 0.910994 -2.96936 -0.976745 -0.152146 -0.151068 + -0.899094 0.794259 -3.01104 -0.970179 -0.17407 -0.168677 + -0.881562 0.717753 -3.02741 -0.947249 -0.24901 -0.201775 + -0.948089 1.0292 -2.93081 -0.984171 -0.107365 -0.140996 + -0.918159 0.922154 -2.99485 -0.910556 -0.0551202 -0.409694 + -0.894626 0.800945 -3.02631 -0.902355 -0.0911458 -0.421246 + -0.877095 0.72444 -3.04267 -0.859735 -0.20941 -0.465836 + -0.94063 1.04036 -2.9563 -0.944878 -0.0718342 -0.319445 + -0.910284 0.928679 -3.0089 -0.769099 0.0239422 -0.63868 + -0.886751 0.807467 -3.04036 -0.75314 -0.0109761 -0.657769 + -0.872057 0.728612 -3.05166 -0.701856 -0.167027 -0.692459 + -0.965306 1.15935 -2.92069 -0.973982 -0.126356 -0.18813 + -0.957508 1.16939 -2.94333 -0.886139 -0.0530251 -0.460376 + -0.932832 1.0504 -2.97894 -0.810818 0.000326564 -0.585298 + -0.898042 0.933835 -3.01856 -0.471304 0.125816 -0.872951 + -0.879417 0.810558 -3.04614 -0.465475 0.084202 -0.881046 + -0.98095 1.249 -2.89075 -0.980846 -0.153496 -0.119916 + -0.973979 1.25621 -2.92398 -0.908819 -0.0870864 -0.408 + -0.94395 1.17894 -2.96344 -0.635531 0.0442598 -0.770806 + -0.920591 1.05555 -2.98861 -0.53069 0.0996473 -0.841688 + -0.880745 0.937452 -3.02325 -0.197101 0.180046 -0.963709 + -0.991593 1.30264 -2.87929 -0.983016 -0.1495 -0.106435 + -0.984621 1.30985 -2.91253 -0.91517 -0.0696551 -0.397003 + -0.960421 1.26577 -2.94409 -0.657008 0.0139924 -0.753753 + -0.916401 1.18623 -2.97462 -0.328534 0.116524 -0.937277 + -0.893041 1.06284 -2.99979 -0.242959 0.152349 -0.957998 + -1.003 1.3773 -2.86079 -0.990521 -0.0897947 -0.103947 + -0.994655 1.36584 -2.89536 -0.927406 -0.0223782 -0.373387 + -0.967627 1.31704 -2.93891 -0.662031 0.0267576 -0.748999 + -0.930838 1.33198 -2.95569 -0.323075 0.100271 -0.941046 + -0.923632 1.28072 -2.96087 -0.343138 0.0765542 -0.93616 + -1.00287 1.45872 -2.86952 -0.91665 0.0707902 -0.393373 + -0.977661 1.37303 -2.92174 -0.735059 0.0779156 -0.673512 + -0.942147 1.39065 -2.9436 -0.374008 0.15113 -0.915029 + -0.867606 1.36449 -2.96342 0.0916473 0.176359 -0.98005 + -0.870262 1.29124 -2.97378 0.0425137 0.1387 -0.989422 + -0.996841 1.49407 -2.87139 -0.875051 0.214786 -0.433765 + -0.971629 1.40838 -2.92362 -0.655032 0.127388 -0.744786 + -0.941046 1.48951 -2.92284 -0.281737 0.277741 -0.918414 + -0.878915 1.42316 -2.95133 0.0809528 0.247303 -0.965551 + -0.970527 1.50724 -2.90286 -0.6206 0.297853 -0.725354 + -0.934877 1.53478 -2.90699 -0.140902 0.493199 -0.858429 + -0.964448 1.56129 -2.87568 -0.553006 0.556796 -0.619809 + -0.917472 1.57171 -2.88019 -0.191852 0.567192 -0.800928 + -0.898511 1.25175 -2.09719 0.892978 0.346908 -0.286786 + -0.893679 1.25709 -2.07569 0.456797 0.847666 -0.269812 + -0.883033 1.24766 -2.05395 0.832686 0.550594 0.0589866 + -0.896025 1.26076 -1.99076 0.631475 0.700116 0.333281 + -0.87489 1.21524 -1.98255 0.885859 0.24839 0.391863 + -0.866728 1.19559 -2.00045 0.974383 -0.00889473 0.22472 + -0.874871 1.22801 -2.07185 0.952748 0.274217 0.130675 + -0.871571 1.24751 -2.11555 0.864158 0.412797 0.2878 + -0.88557 1.27604 -2.1347 0.391807 0.787321 0.476039 + -0.906671 1.27018 -2.01251 0.324928 0.94425 -0.0530492 + -0.919716 1.27212 -2.00414 0.0949342 0.98965 0.107614 + -0.930917 1.25764 -1.96193 0.041314 0.776417 0.628863 + -0.91676 1.24203 -1.95501 0.407149 0.495529 0.767255 + -0.917472 1.25296 -2.06952 -0.14029 0.958992 -0.246279 + -0.930517 1.25489 -2.06115 0.0215812 0.955997 -0.292583 + -0.93684 1.25535 -2.06139 0.0257109 0.946378 -0.322037 + -0.941049 1.27345 -2.01668 0.00362017 0.997321 -0.0730553 + -0.95225 1.25897 -1.97446 -0.272476 0.840383 0.468522 + -0.898511 1.25175 -2.09719 -0.201253 0.971477 -0.125416 + -0.922304 1.24762 -2.09102 -0.146563 0.989199 0.00198903 + -0.932343 1.24639 -2.08904 -0.0239433 0.997775 -0.0622208 + -0.938666 1.24684 -2.08927 0.0369946 0.996177 -0.0791387 + -0.956727 1.2527 -2.06544 -0.04595 0.963301 -0.264462 + -0.960936 1.27081 -2.02073 -0.272243 0.959653 -0.0703551 + -0.926001 1.24885 -2.0985 -0.0964539 0.902875 0.418943 + -0.93604 1.24762 -2.09652 -0.0170284 0.960047 0.27932 + -0.950931 1.24801 -2.0982 -0.00550002 0.955936 0.293523 + -0.953558 1.24724 -2.09095 0.0209443 0.998688 -0.0467285 + -0.952937 1.25444 -2.11069 -0.0586869 0.834614 0.5477 + -0.978095 1.2481 -2.099 0.0441309 0.958969 0.280053 + -0.979279 1.24761 -2.09173 0.0563735 0.996304 -0.0648139 + -0.982449 1.25307 -2.06622 -0.0417126 0.989159 -0.140798 + -0.987106 1.25807 -2.02339 -0.273993 0.961183 0.0324747 + -0.940629 1.26583 -2.12249 -0.114706 0.774715 0.62182 + -0.975395 1.27283 -2.13765 -9.02355e-005 0.779726 0.626121 + -0.980101 1.25453 -2.11149 0.10135 0.862903 0.495103 + -0.991501 1.26042 -2.1175 0.265802 0.787418 0.556167 + -0.994803 1.24965 -2.09998 0.293211 0.90135 0.318739 + -0.963088 1.28421 -2.14945 -0.11339 0.75338 0.647735 + -0.986795 1.27872 -2.14366 0.209386 0.77013 0.602542 + -0.898511 1.25175 -2.09719 -0.111811 0.777643 0.618684 + 1.05117 1.12715 -1.90057 0.0662268 -0.171641 0.982931 + 1.04301 1.16262 -1.8932 -0.138049 -0.0522402 0.989047 + 0.980129 1.18837 -1.91784 -0.447262 -0.27944 0.849629 + 1.1199 1.17478 -1.91371 0.473942 0.0978725 0.8751 + 1.08924 1.19869 -1.90469 0.378253 0.22797 0.897193 + 1.06864 1.19787 -1.89697 0.107883 0.209246 0.971894 + 1.04118 1.20698 -1.90796 -0.452956 0.493767 0.742311 + 1.12806 1.13932 -1.92108 0.477789 -0.115971 0.870786 + 1.17441 1.14361 -1.95867 0.801182 0.0679804 0.594547 + 1.15065 1.19284 -1.94371 0.707235 0.395257 0.586166 + 1.07232 1.09107 -1.91115 0.115185 -0.388734 0.914122 + 1.13452 1.09271 -1.93472 0.483907 -0.298475 0.822646 + 1.18087 1.097 -1.97232 0.776563 -0.162315 0.608773 + 0.989426 1.13764 -1.89975 -0.246098 -0.111477 0.962813 + 1.01057 1.10156 -1.91032 -0.255411 -0.553567 0.792672 + 1.00457 1.08538 -1.93131 -0.418346 -0.632369 0.651994 + 1.07934 1.04655 -1.93878 0.0810999 -0.591904 0.801918 + 1.14155 1.04819 -1.96235 0.443516 -0.50213 0.742401 + 0.980129 1.18837 -1.91784 0.134531 0.540413 0.830575 + 0.965973 1.17276 -1.91092 -0.227417 0.232093 0.945735 + 0.919078 1.1614 -1.93562 -0.60827 -0.306227 0.732279 + 0.913074 1.14522 -1.9566 -0.686922 -0.514411 0.513342 + 0.91676 1.24203 -1.95501 -0.407155 0.495529 0.767252 + 0.895625 1.19651 -1.94679 -0.726461 0.0217994 0.686862 + 0.930917 1.25764 -1.96193 -0.041317 0.776415 0.628866 + 0.896025 1.26076 -1.99076 -0.631476 0.700117 0.333279 + 0.87489 1.21524 -1.98255 -0.888637 0.207783 0.408842 + 0.95225 1.25897 -1.97446 0.272492 0.840374 0.468529 + 0.941049 1.27345 -2.01668 0.00364353 0.997716 -0.0674545 + 0.919716 1.27212 -2.00414 -0.0962171 0.989277 0.109874 + 0.906671 1.27018 -2.01251 -0.324939 0.944246 -0.0530534 + 0.883033 1.24766 -2.05395 -0.832981 0.550264 0.0578914 + 0.995964 1.18457 -1.9229 0.354686 0.701349 0.61831 + 0.968084 1.25517 -1.97953 0.38769 0.803675 0.451446 + 0.960936 1.27081 -2.02073 0.244574 0.969016 -0.0345248 + 0.93684 1.25535 -2.06139 -0.0150176 0.941578 -0.33646 + 0.930517 1.25489 -2.06115 -0.0327555 0.950541 -0.308867 + 1.00645 1.17926 -1.92269 -0.070925 0.843162 0.532962 + 1.00474 1.23713 -1.98197 0.164995 0.700408 0.69441 + 0.994254 1.24243 -1.98218 0.308637 0.761385 0.570119 + 0.987106 1.25807 -2.02339 0.260051 0.96521 0.0272653 + 0.982449 1.25307 -2.06622 0.0808846 0.977999 -0.19229 + 0.956727 1.2527 -2.06544 0.00781325 0.953414 -0.301562 + 1.01002 1.23395 -1.97869 -0.313765 0.690069 0.652194 + 1.01179 1.25355 -1.99836 -0.302507 0.6774 0.670536 + 1.00651 1.25674 -2.00165 -0.136821 0.917672 0.373039 + 1.00371 1.25545 -2.02439 0.0084103 0.996068 -0.0881855 + 0.999056 1.25046 -2.06722 0.00821282 0.996386 -0.0845421 + 1.01913 1.22641 -1.96018 -0.62756 0.583376 0.515598 + 1.02713 1.2549 -1.9832 -0.604268 0.609424 0.513286 + 1.02889 1.25904 -1.98622 -0.58748 0.689504 0.423616 + 1.01355 1.2577 -2.00138 -0.396477 0.847567 0.352755 + 1.01075 1.25642 -2.02412 -0.391076 0.919622 -0.0368149 + 1.04919 1.23547 -1.93097 -0.53378 0.63185 0.562001 + 0.980129 1.18837 -1.91784 0.353085 0.914284 0.198533 + -0.265027 1.74133 -3.37072 0.608582 0.176412 0.773632 + -0.261467 1.75486 -3.37977 0.405413 0.43226 0.805476 + -0.286397 1.7575 -3.36864 0.37424 0.926179 -0.046233 + -0.289957 1.74398 -3.35959 0.454078 0.191852 0.870061 + -0.290079 1.69202 -3.35677 0.531317 0.0558839 0.845328 + -0.263388 1.66691 -3.37811 0.721112 -0.0194369 0.692546 + -0.250973 1.65474 -3.39333 0.941656 -0.0536991 0.332266 + -0.252611 1.72917 -3.38594 0.965166 0.24466 -0.0927086 + -0.261467 1.75486 -3.37977 0.821733 0.151318 0.549415 + -0.311519 1.7617 -3.35095 0.347925 0.550309 0.759018 + -0.311641 1.70974 -3.34812 0.366798 0.103597 0.924514 + -0.298838 1.64784 -3.34424 0.595801 0.192498 0.779721 + -0.319147 1.76774 -3.36248 0.229633 0.931589 -0.281798 + -0.337551 1.76806 -3.34796 0.2119 0.658287 0.722327 + -0.363175 1.76019 -3.33739 0.202236 0.59766 0.775824 + -0.337265 1.70187 -3.33755 0.372538 0.188176 0.908738 + -0.302376 1.7471 -3.37552 0.0828534 0.576953 -0.812564 + -0.342152 1.73389 -3.39425 -0.0644843 0.58809 -0.806221 + -0.345179 1.7741 -3.35949 -0.0419621 0.979265 -0.198189 + -0.278095 1.69156 -3.41165 0.165581 0.444574 -0.880305 + -0.325381 1.71326 -3.40729 0.0546254 0.531179 -0.845497 + -0.373982 1.66906 -3.42415 -0.270237 0.446519 -0.85299 + -0.36635 1.72855 -3.39056 -0.288517 0.550972 -0.783063 + -0.369377 1.76876 -3.3558 -0.258623 0.940838 -0.218947 + -0.262116 1.70196 -3.40477 0.256435 0.427005 -0.867126 + -0.265668 1.59394 -3.44147 0.665034 0.156589 -0.730212 + -0.285878 1.6439 -3.43792 0.360814 0.369512 -0.856314 + -0.333165 1.6656 -3.43356 -0.0260002 0.439998 -0.897622 + -0.261467 1.75486 -3.37977 -0.336333 0.405795 -0.84983 + -0.261467 1.75486 -3.37977 0.508502 0.36284 -0.78088 + -0.25326 1.67627 -3.41094 0.757799 0.207451 -0.618631 + -0.251006 1.6008 -3.4046 0.985798 -0.00604765 0.167825 + -0.253294 1.62233 -3.42221 0.907878 0.0770128 -0.412101 + -0.254886 1.56206 -3.39721 0.93169 -0.0672253 0.35698 + -0.252745 1.5134 -3.43101 0.971276 -0.0195466 -0.237152 + -0.26512 1.48501 -3.45027 0.719997 0.00756946 -0.693936 + -0.272148 1.62272 -3.36558 0.792666 0.0339366 0.608711 + -0.275901 1.5648 -3.36241 0.824765 -0.0536535 0.562925 + -0.268812 1.46739 -3.39265 0.89524 -0.119957 0.429134 + -0.256625 1.47467 -3.42362 0.987255 -0.12629 0.0968424 + -0.267812 1.42086 -3.44995 0.835022 -0.127189 -0.535314 + -0.312908 1.59752 -3.31389 0.635482 0.133297 0.760522 + -0.316661 1.5396 -3.31073 0.701162 -0.0253243 0.712552 + -0.289828 1.47013 -3.35786 0.830505 -0.0954493 0.548773 + -0.29734 1.40521 -3.35865 0.844437 -0.131489 0.519265 + -0.275158 1.41654 -3.39595 0.903332 -0.150612 0.401632 + -0.332826 1.64955 -3.32398 0.443863 0.315853 0.838584 + -0.346895 1.59923 -3.29364 0.408375 0.217354 0.886559 + -0.352689 1.52951 -3.28365 0.441666 0.0273881 0.896761 + -0.326163 1.45287 -3.30861 0.718472 -0.0810191 0.690821 + -0.333676 1.38795 -3.30941 0.697126 -0.11975 0.706877 + -0.393265 1.6544 -3.30009 0.323102 0.306307 0.895422 + -0.377439 1.60125 -3.28521 0.286481 0.228842 0.930355 + -0.383233 1.53154 -3.27522 0.206028 0.01021 0.978493 + -0.362191 1.44278 -3.28154 0.320038 -0.0850304 0.943581 + -0.367138 1.38005 -3.28699 0.280995 -0.151444 0.947685 + -0.397704 1.70673 -3.31366 0.366105 0.188659 0.911249 + -0.423719 1.64686 -3.28781 0.262929 0.284979 0.921768 + -0.407894 1.59371 -3.27293 0.248335 0.179211 0.951952 + -0.407762 1.54644 -3.27043 0.198923 0.00279423 0.980011 + -0.398662 1.44285 -3.2826 -0.0962749 -0.153384 0.983466 + -0.387798 1.75425 -3.32289 0.356258 0.527686 0.771121 + -0.418806 1.75845 -3.31183 0.162655 0.640958 0.750144 + -0.428712 1.71092 -3.3026 0.303439 0.181344 0.935435 + -0.437086 1.67696 -3.29285 0.260686 0.234293 0.936563 + -0.438935 1.59252 -3.26779 -0.238769 0.0619927 0.969096 + -0.393999 1.76282 -3.34131 -0.18787 0.973892 -0.127437 + -0.419446 1.76383 -3.32485 -0.140627 0.986581 -0.0829547 + -0.453626 1.75346 -3.31585 -0.603686 0.793128 -0.0806886 + -0.452985 1.74807 -3.30283 -0.393021 0.548496 0.738029 + -0.461359 1.71412 -3.29308 -0.361702 0.314179 0.87776 + -0.405828 1.73146 -3.37114 -0.413503 0.563814 -0.714932 + -0.431275 1.73247 -3.35469 -0.483916 0.569356 -0.664575 + -0.443239 1.71002 -3.36003 -0.612301 0.366396 -0.7006 + -0.46559 1.73101 -3.32119 -0.900693 0.383894 -0.203414 + -0.413459 1.67197 -3.40473 -0.526387 0.42897 -0.734099 + -0.443485 1.65151 -3.38545 -0.702603 0.314714 -0.638204 + -0.421977 1.58169 -3.44311 -0.531918 0.323934 -0.782387 + -0.452003 1.56124 -3.42383 -0.794192 0.255368 -0.551404 + -0.473777 1.52375 -3.39233 -0.94315 0.132378 -0.304867 + -0.467549 1.61552 -3.37163 -0.874239 0.167728 -0.455603 + -0.467302 1.67403 -3.34621 -0.90584 0.185067 -0.381056 + -0.387188 1.59292 -3.45548 -0.302176 0.349149 -0.887009 + -0.392478 1.51526 -3.47722 -0.2913 0.202795 -0.934889 + -0.427267 1.50404 -3.46484 -0.502611 0.155071 -0.850491 + -0.451868 1.50135 -3.44542 -0.758451 0.141644 -0.636152 + -0.346372 1.58946 -3.46489 -0.0950784 0.336429 -0.936897 + -0.356547 1.51892 -3.48286 -0.0839514 0.180585 -0.97997 + -0.392487 1.43292 -3.48973 -0.33083 0.0638047 -0.941531 + -0.42669 1.44214 -3.46954 -0.549193 0.0463773 -0.834408 + -0.451292 1.43946 -3.45012 -0.760532 -0.0217099 -0.648938 + -0.304657 1.58899 -3.46638 0.209098 0.325753 -0.922043 + -0.314833 1.51845 -3.48435 0.19791 0.0728223 -0.977511 + -0.323541 1.44968 -3.48392 0.346154 0.0167443 -0.938028 + -0.356556 1.43658 -3.49537 0.0757598 0.0630933 -0.995128 + -0.284447 1.53902 -3.46994 0.677107 0.0315538 -0.735207 + -0.293155 1.47025 -3.46951 0.528596 -0.0304665 -0.848327 + -0.295847 1.40611 -3.46918 0.543833 -0.0629988 -0.836826 + -0.323849 1.39324 -3.48339 0.405857 -0.054603 -0.912304 + -0.356864 1.38014 -3.49484 0.111892 -0.0929572 -0.989363 + -0.276146 1.37933 -3.44706 0.879099 -0.128788 -0.45891 + -0.290122 1.36875 -3.46237 0.644369 -0.0930436 -0.759034 + -0.318124 1.35588 -3.47658 0.420436 -0.128133 -0.898229 + -0.26297 1.42381 -3.42693 0.985584 -0.15623 0.0649388 + -0.271304 1.38229 -3.42404 0.987079 -0.140247 0.0774975 + -0.278449 1.29525 -3.41344 0.992734 -0.0508365 0.109065 + -0.281624 1.29572 -3.43696 0.913391 -0.110583 -0.391776 + -0.295601 1.28513 -3.45226 0.648705 -0.135066 -0.748958 + -0.281762 1.37604 -3.39747 0.904234 -0.0957594 0.416163 + -0.288907 1.28901 -3.38686 0.889855 0.0141175 0.456024 + -0.293574 1.15781 -3.36481 0.923363 -0.00195039 0.383922 + -0.287422 1.16036 -3.39442 0.996868 -0.0725267 0.0315257 + -0.290597 1.16082 -3.41794 0.920458 -0.13103 -0.368224 + -0.303945 1.36472 -3.36017 0.849301 -0.0899559 0.520188 + -0.307281 1.28333 -3.3581 0.824663 0.0103439 0.565529 + -0.311948 1.15213 -3.33605 0.694553 0.0583915 0.717068 + -0.317682 1.04499 -3.32682 0.684034 0.017217 0.729247 + -0.303511 1.04582 -3.34643 0.915049 -0.042819 0.401063 + -0.333694 1.3502 -3.31774 0.711332 -0.0949383 0.696415 + -0.33703 1.26882 -3.31568 0.63988 -0.0218807 0.768163 + -0.339085 1.15273 -3.31962 0.486193 0.0284324 0.873389 + -0.344819 1.04559 -3.31039 0.36838 0.0573657 0.927904 + -0.367156 1.34229 -3.29532 0.287706 -0.143707 0.946876 + -0.365862 1.26606 -3.30244 0.209757 -0.0547727 0.976218 + -0.367918 1.14997 -3.30638 0.122155 -0.0125416 0.992432 + -0.367929 1.04705 -3.30553 0.0293487 0.0568498 0.997951 + -0.348894 0.95487 -3.30343 0.37192 0.0454904 0.927149 + -0.398451 1.34236 -3.29623 -0.348792 -0.155851 0.924151 + -0.397157 1.26612 -3.30336 -0.320237 -0.0827486 0.943716 + -0.395067 1.15279 -3.31141 -0.377308 -0.0158285 0.925952 + -0.395078 1.04987 -3.31056 -0.337019 0.0398671 0.940654 + -0.403609 1.38012 -3.28805 -0.351364 -0.195463 0.915608 + -0.435699 1.3942 -3.31337 -0.791835 -0.244577 0.559624 + -0.43054 1.35643 -3.32155 -0.783858 -0.151577 0.602155 + -0.422927 1.27418 -3.32113 -0.733292 -0.0584317 0.677398 + -0.439204 1.43827 -3.29809 -0.703119 -0.257571 0.662783 + -0.468309 1.42442 -3.36681 -0.956274 -0.17538 0.234055 + -0.458523 1.38237 -3.36741 -0.946108 -0.159846 0.281653 + -0.450909 1.30012 -3.36699 -0.942399 -0.0715862 0.32674 + -0.423191 1.45776 -3.27781 -0.265779 -0.304789 0.914585 + -0.454815 1.52576 -3.28556 -0.817729 -0.140938 0.558082 + -0.471814 1.4685 -3.35154 -0.951706 -0.172839 0.253736 + -0.473642 1.46386 -3.41391 -0.958757 -0.00928643 -0.284076 + -0.473075 1.42713 -3.40846 -0.978893 -0.117253 -0.167392 + -0.438802 1.54524 -3.26529 -0.356851 -0.0418794 0.933222 + -0.463609 1.56642 -3.29648 -0.895441 -0.0418163 0.443212 + -0.480608 1.50917 -3.36245 -0.997003 -0.0356092 0.0686778 + 0.302376 1.7471 -3.37552 0.605009 0.546625 0.578934 + 0.286397 1.7575 -3.36864 -0.0282659 0.550726 0.834208 + 0.289957 1.74398 -3.35959 -0.378524 0.394632 0.837249 + 0.265027 1.74133 -3.37072 -0.592574 0.151185 0.791201 + 0.263388 1.66691 -3.37811 -0.712373 0.0100714 0.701729 + 0.290079 1.69202 -3.35677 -0.572382 0.0871925 0.815338 + 0.311641 1.70974 -3.34812 -0.376733 0.12915 0.917274 + 0.311519 1.7617 -3.35095 -0.518698 0.59519 0.61376 + 0.302376 1.7471 -3.37552 -0.251226 0.674389 -0.694324 + 0.261467 1.75486 -3.37977 -0.405413 0.43226 0.805476 + 0.261467 1.75486 -3.37977 -0.508502 0.36284 -0.78088 + 0.262116 1.70196 -3.40477 -0.255932 0.424602 -0.868454 + 0.252611 1.72917 -3.38594 -0.965163 0.244672 -0.0927199 + 0.25326 1.67627 -3.41094 -0.722976 0.175062 -0.668325 + 0.250973 1.65474 -3.39333 -0.960679 -0.00159407 0.277656 + 0.261467 1.75486 -3.37977 -0.821733 0.151318 0.549415 + 0.278095 1.69156 -3.41165 -0.176609 0.433651 -0.883604 + 0.253294 1.62233 -3.42221 -0.856372 0.149487 -0.494248 + 0.251006 1.6008 -3.4046 -0.985186 -0.0272702 0.169307 + 0.275901 1.5648 -3.36241 -0.826746 -0.0530138 0.560071 + 0.272148 1.62272 -3.36558 -0.763999 0.0393004 0.64402 + 0.325381 1.71326 -3.40729 -0.0754329 0.536348 -0.840619 + 0.333165 1.6656 -3.43356 0.0310609 0.447888 -0.89355 + 0.285878 1.6439 -3.43792 -0.356144 0.377426 -0.854816 + 0.286397 1.7575 -3.36864 0.142721 0.49512 -0.857022 + 0.261467 1.75486 -3.37977 0.336333 0.405795 -0.84983 + 2.04758 1.79087 -0.419637 -0.249284 0.966606 0.0594206 + 2.06611 1.79246 -0.363198 -0.316726 0.945977 0.0693761 + 2.05691 1.78848 -0.509912 -0.00432426 0.999631 -0.0268118 + 2.03494 1.76178 -0.21826 -0.450717 0.892185 -0.0293273 + 2.0868 1.79252 -0.279496 -0.396395 0.918036 0.00894935 + 2.10728 1.79865 -0.302325 0.225013 0.960324 -0.164764 + 2.08659 1.79868 -0.385977 0.450068 0.868791 -0.206496 + 2.05691 1.78848 -0.509912 -0.298098 0.954508 -0.00716793 + 2.01641 1.76019 -0.274698 -0.646056 0.744558 0.168059 + 1.99292 1.73621 -0.301369 -0.834937 0.550078 0.0171822 + 2.05739 1.77861 -0.145405 -0.149682 0.942619 -0.298437 + 2.10924 1.80934 -0.206632 -0.48522 0.868103 -0.104686 + 2.13002 1.81455 -0.230656 0.10985 0.941445 -0.31877 + 2.01201 1.78593 -0.505683 -0.647752 0.745353 0.157689 + 1.98853 1.76195 -0.532355 -0.808373 0.563605 0.169948 + 2.05701 1.81152 -0.487006 -0.605781 0.768424 0.206288 + 2.02145 1.80658 -0.573053 -0.684981 0.658453 0.311834 + 1.95822 1.80145 -0.69817 -0.902349 0.239872 0.358089 + 1.95457 1.72805 -0.596037 -0.882649 0.420461 0.210103 + 2.05368 1.84205 -0.544286 -0.816998 0.44394 0.368009 + 2.04962 1.87449 -0.581082 -0.807561 0.34688 0.47699 + 2.01739 1.83903 -0.60986 -0.801433 0.276898 0.530125 + 2.04145 1.94214 -0.633857 -0.509342 0.297551 0.807486 + 1.99541 2.02753 -0.68675 -0.451245 0.240122 0.859488 + 1.97135 1.9245 -0.662693 -0.66393 0.110395 0.739601 + 1.99534 2.10094 -0.703895 0.0674122 0.297012 0.952491 + 1.86547 2.21636 -0.792618 -0.671514 0.080592 0.736596 + 1.84979 2.19327 -0.819613 -0.869377 -0.115087 0.480561 + 1.95567 1.90131 -0.689739 -0.912574 -0.0905374 0.398763 + 1.86541 2.28977 -0.809761 -0.103607 0.135346 0.985366 + 1.83866 2.42426 -0.82771 -0.676891 -0.0164193 0.7359 + 1.81648 2.20599 -0.877656 -0.814349 -0.118305 0.56819 + 1.93269 1.9349 -0.794719 -0.938157 -0.168725 0.302311 + 1.93524 1.83504 -0.80315 -0.745945 0.469677 0.472197 + 1.97011 2.21519 -0.731785 -0.441618 0.0311642 0.896662 + 1.94336 2.34968 -0.749733 -0.608066 -0.0518974 0.792188 + 2.02648 2.0249 -0.695197 0.977184 0.208644 0.0397491 + 2.00125 2.13916 -0.723096 0.869589 0.265344 0.416423 + 1.9866 2.29243 -0.724362 -0.495486 -0.0100094 0.868559 + 1.92042 2.52582 -0.743409 -0.584158 8.24479e-005 0.81164 + 1.86427 2.60485 -0.810302 -0.717714 0.0241957 0.695918 + 2.04085 1.94543 -0.658947 0.97875 0.0890772 -0.184696 + 2.00071 1.93192 -0.74635 0.907332 -0.018104 -0.420025 + 1.9952 2.15733 -0.756969 0.955995 0.0692947 -0.285084 + 1.98055 2.3106 -0.758235 0.964562 0.107044 -0.241166 + 1.9866 2.29243 -0.724362 0.987131 0.106805 -0.119018 + 1.96367 2.46847 -0.718087 0.967344 0.154519 -0.200921 + 2.04145 1.94214 -0.633857 0.986129 0.165973 -0.00186748 + 2.04902 1.87778 -0.606172 0.989278 -0.00254245 -0.14602 + 2.01508 1.85244 -0.710092 0.952747 -0.0137097 -0.303456 + 1.97115 1.95368 -0.81144 0.928207 0.0460719 -0.3692 + 1.96563 2.17909 -0.822059 0.910113 0.0404235 -0.412383 + 2.04962 1.87449 -0.581082 0.996867 0.0760077 -0.0218788 + 2.05358 1.81893 -0.567241 0.987726 -0.0195535 -0.154965 + 2.01964 1.79368 -0.671101 0.979189 -0.00273165 -0.202932 + 2.01547 1.73294 -0.734101 0.969893 0.14779 -0.193558 + 1.9663 1.86477 -0.850038 0.956227 0.138399 -0.257828 + 1.9045 2.14994 -0.949971 0.922767 0.0635816 -0.380076 + 2.05368 1.84205 -0.544286 0.997817 0.044314 -0.048968 + 2.05691 1.78848 -0.509912 0.984295 0.0710033 -0.161622 + 1.96367 2.46847 -0.718087 -0.561329 -0.0588435 0.825498 + 1.94728 2.53942 -0.740764 -0.15 0.105041 0.98309 + 1.93692 2.63864 -0.741815 0.92548 -0.00228058 0.37879 + 1.93078 2.6463 -0.737484 -0.10585 0.0512121 0.993062 + 1.87462 2.72542 -0.804329 -0.601269 0.302205 0.739694 + 1.84108 2.75625 -0.85193 -0.678126 0.368373 0.635961 + 1.81909 2.66232 -0.855642 -0.752589 0.108002 0.649574 + 1.93854 2.71913 -0.745837 0.949914 0.201573 0.238813 + 1.93239 2.72679 -0.741506 0.819548 0.497016 0.28516 + 1.90746 2.75606 -0.820608 0.903148 0.362832 -0.229514 + 1.90131 2.76364 -0.816327 0.21572 0.852988 0.475263 + 1.91067 2.6755 -0.81607 0.927014 0.037004 -0.373197 + 1.88433 2.6978 -0.875887 0.907588 0.0219838 -0.419285 + 1.88111 2.77836 -0.880432 0.891321 0.337764 -0.302427 + 1.94728 2.53942 -0.740764 0.955538 0.142827 -0.257968 + 1.92103 2.57619 -0.81506 0.933266 0.123653 -0.337229 + 1.8688 2.6436 -0.913422 0.901446 0.0778739 -0.42583 + 1.84788 2.75571 -0.943395 0.84028 0.151041 -0.520688 + 1.96416 2.38154 -0.780912 0.945128 0.137359 -0.296422 + 1.94617 2.36492 -0.83112 0.907722 0.112059 -0.404332 + 1.90304 2.55966 -0.865218 0.903324 0.130819 -0.408524 + 1.84113 2.55759 -0.989435 0.879284 0.090636 -0.467594 + 1.83235 2.70152 -0.98093 0.841532 0.127519 -0.52494 + 1.94017 2.29025 -0.862401 0.903979 0.0835848 -0.419328 + 1.87537 2.47364 -0.941231 0.8806 0.111494 -0.460556 + 1.82428 2.46175 -1.03645 0.878147 0.110511 -0.465451 + 1.8116 2.64031 -1.02712 0.812591 0.13374 -0.567282 + 1.87904 2.26111 -0.990322 0.876491 0.0896242 -0.473002 + 1.86936 2.39898 -0.972522 0.873941 0.123227 -0.470151 + 1.83396 2.32389 -1.05426 0.836788 0.118065 -0.534646 + 1.79476 2.54448 -1.07413 0.771538 0.117822 -0.625177 + 1.89966 2.06103 -0.988568 0.933014 0.14294 -0.330233 + 1.97308 1.77805 -0.900439 0.956211 0.154462 -0.2486 + 1.90809 1.96695 -1.02102 0.929627 0.168928 -0.3275 + 1.84003 2.13082 -1.11226 0.842112 0.187269 -0.505745 + 1.8316 2.22491 -1.07981 0.875838 0.165954 -0.453175 + 1.77241 2.45597 -1.10923 0.711894 0.120935 -0.691796 + 2.02224 1.64622 -0.784511 0.954705 0.186192 -0.232099 + 1.96957 1.69115 -0.948727 0.945285 0.131515 -0.298563 + 1.90458 1.88014 -1.06926 0.898545 0.12779 -0.419866 + 1.83533 2.04015 -1.14441 0.814819 0.165328 -0.555641 + 2.05874 1.57734 -0.692196 0.955637 0.220504 -0.195282 + 2.06228 1.48826 -0.746906 0.959337 0.133581 -0.248655 + 2.02579 1.55705 -0.839262 0.947982 0.153683 -0.278768 + 1.96564 1.60198 -0.996678 0.927121 0.126419 -0.352796 + 2.04671 1.65056 -0.619819 0.961811 0.219504 -0.163514 + 2.0836 1.60426 -0.499617 0.944556 0.227231 -0.237024 + 2.09564 1.53103 -0.571994 0.962523 0.206975 -0.175247 + 2.09122 1.45139 -0.640447 0.975894 0.0889762 -0.199283 + 2.06073 1.38864 -0.790966 0.960789 0.118105 -0.250872 + 2.05087 1.7113 -0.556819 0.97071 0.08963 -0.222909 + 2.08045 1.67933 -0.46125 0.941754 0.153503 -0.299225 + 2.13379 1.6011 -0.367149 0.923814 0.167903 -0.34406 + 2.12301 1.50724 -0.430988 0.935587 0.191822 -0.296449 + 2.11859 1.42768 -0.499382 0.982869 0.038253 -0.180294 + 1.30253 1.11291 -1.43659 -0.820237 0.429347 0.377985 + 1.24544 1.07804 -1.44958 -0.173027 -0.082297 0.981473 + 1.26037 1.02438 -1.45144 -0.700595 -0.0458828 0.712082 + 1.3426 1.16556 -1.41618 -0.820964 0.52714 0.219409 + 1.3456 1.16561 -1.50585 -0.810721 0.564313 -0.155826 + 1.26874 1.04947 -1.46391 -0.478295 0.655899 -0.583979 + 1.24544 1.07804 -1.44958 -0.0479991 0.416655 -0.907797 + 1.33891 1.09936 -1.36652 -0.778355 0.197498 0.595952 + 1.39323 1.22173 -1.37206 -0.831872 0.518805 0.197055 + 1.38567 1.21834 -1.48539 -0.718961 0.690609 -0.078447 + 1.40949 1.225 -1.56412 -0.608212 0.750192 -0.259402 + 1.35337 1.16552 -1.5321 -0.822267 0.493318 -0.28375 + 1.31526 1.03417 -1.3908 -0.737079 -0.00556368 0.675784 + 1.38245 1.00039 -1.32068 -0.741638 0.0431278 0.669412 + 1.38954 1.15545 -1.32246 -0.800763 0.189376 0.568257 + 1.42804 1.26844 -1.32856 -0.874294 0.46343 0.144372 + 1.42592 1.25813 -1.43972 -0.71915 0.690669 -0.0761482 + 1.31912 0.885883 -1.39596 -0.743856 -0.0551313 0.666062 + 1.3588 0.935104 -1.34501 -0.759096 -0.0387793 0.649823 + 1.43222 0.938435 -1.25338 -0.792483 -0.0251114 0.609377 + 1.41032 1.07485 -1.29766 -0.756665 0.0477295 0.652058 + 1.26424 0.876179 -1.45655 -0.712912 -0.0276757 0.700707 + 1.36481 0.824607 -1.35122 -0.73417 -0.1549 0.66106 + 1.40449 0.873828 -1.30028 -0.767333 -0.0822381 0.635953 + 1.15338 0.931117 -1.57811 -0.750803 -0.0925044 0.654017 + 1.20752 0.861958 -1.50692 -0.735522 0.00278936 0.677495 + 1.26447 0.772444 -1.46028 -0.702389 -0.306301 0.642518 + 1.32119 0.786574 -1.40995 -0.694927 -0.0859872 0.713921 + 1.22106 1.06807 -1.48272 -0.270686 -0.808357 0.522769 + 1.11407 0.974727 -1.60944 -0.586119 -0.266673 0.765082 + 1.05745 0.968945 -1.65383 -0.630711 -0.550673 0.546775 + 1.05439 0.957346 -1.67294 -0.687817 -0.547951 0.476085 + 1.08013 0.917146 -1.67951 -0.745556 -0.464935 0.477475 + 1.10835 0.891593 -1.64305 -0.853496 -0.242545 0.461212 + 1.24544 1.07804 -1.44958 -0.749579 -0.230172 0.620607 + 1.09292 1.01632 -1.59089 -0.442721 -0.5433 0.713318 + 1.03631 1.01054 -1.63527 -0.630817 -0.110333 0.768048 + 0.994771 1.04413 -1.66085 -0.78387 0.19825 0.588425 + 0.99171 1.03263 -1.67992 -0.876001 -0.285815 0.3885 + 1.0238 0.965114 -1.71099 -0.78903 -0.517803 0.330622 + 1.04954 0.924914 -1.71756 -0.744273 -0.545269 0.385667 + 1.05009 1.03581 -1.64904 -0.0977583 0.735303 0.670651 + 1.00856 1.06949 -1.67458 -0.238031 0.660262 0.712317 + 0.969315 1.06119 -1.7084 -0.895747 -0.067017 0.439483 + 1.00141 0.993682 -1.73947 -0.883995 -0.467468 0.00506182 + 1.03953 0.916941 -1.75575 -0.845507 -0.492238 0.206931 + 1.09292 1.01632 -1.59089 -0.526645 0.609847 0.592227 + 0.806559 1.32541 -2.88944 -0.558204 0.564681 0.607901 + 0.806972 1.30427 -2.86942 -0.220093 0.648024 0.729126 + 0.831275 1.27798 -2.82269 -0.239099 0.870245 0.430704 + 0.815389 1.28112 -2.84272 -0.396157 0.70014 0.594023 + 0.812282 1.24475 -2.75953 -0.423957 0.774806 0.468974 + 0.829082 1.2376 -2.73315 -0.299861 0.753459 0.585134 + 0.855869 1.243 -2.7345 -0.191148 0.859784 0.473533 + 0.858063 1.28346 -2.82399 -0.122556 0.90488 0.407643 + 0.81342 1.32127 -2.91208 0.211659 0.926348 0.311577 + 0.765252 1.25011 -2.81322 -0.382628 0.700336 0.602599 + 0.796396 1.24789 -2.77957 -0.449154 0.757355 0.473998 + 0.781786 1.22053 -2.76578 -0.686583 0.412622 0.59862 + 0.802751 1.21632 -2.7361 -0.700208 0.441925 0.560724 + 0.819551 1.20909 -2.70976 -0.648239 0.537428 0.539405 + 0.756835 1.27327 -2.83993 -0.167237 0.642949 0.747428 + 0.740141 1.25385 -2.8313 -0.857479 0.332431 0.392708 + 0.750642 1.22267 -2.79949 -0.816389 0.242884 0.523943 + 0.767105 1.18344 -2.77254 -0.824546 0.0466552 0.563868 + 0.78807 1.17924 -2.74286 -0.819109 0.139 0.556543 + 0.762815 1.34027 -2.88619 -0.0796048 0.626757 0.775138 + 0.746121 1.32086 -2.87756 -0.629411 0.51735 0.579819 + 0.740144 1.22732 -2.83495 -0.942062 0.0918383 0.322623 + 0.750645 1.19614 -2.80314 -0.901227 -0.0012949 0.433346 + 0.806559 1.32541 -2.88944 0.277143 0.663466 0.694985 + 0.762402 1.36142 -2.90621 0.399341 0.900846 0.170304 + 0.743612 1.36243 -2.90876 -0.346555 0.794944 0.49796 + 0.740452 1.32252 -2.89143 -0.730302 0.393102 0.558686 + 0.734475 1.22898 -2.84882 -0.875732 0.197576 0.44052 + 0.723961 1.18408 -2.85365 -0.889039 0.00510389 0.457803 + 0.744275 1.16953 -2.81506 -0.892096 -0.0712825 0.446188 + 0.753638 1.36216 -2.9173 0.381278 0.849204 -0.365348 + 0.734848 1.36318 -2.91986 -0.569972 0.815532 -0.100198 + 0.722285 1.30336 -2.90405 -0.837144 0.290727 0.463323 + 0.719125 1.26344 -2.88671 -0.835075 0.246424 0.491858 + 0.708611 1.21854 -2.89154 -0.884514 0.135836 0.4463 + 0.806559 1.32541 -2.88944 0.644271 0.471065 -0.602504 + 0.747443 1.35908 -2.92595 0.241799 0.709465 -0.661961 + 0.723498 1.34021 -2.93208 -0.826675 0.559168 -0.0627738 + 0.710935 1.28039 -2.91626 -0.938589 0.231137 0.256177 + 0.697968 1.23703 -2.92117 -0.93935 0.23392 0.250806 + 0.686418 1.1672 -2.92422 -0.870361 0.079408 0.48597 + 0.739216 1.34428 -2.94413 -0.163885 0.944227 -0.285616 + 0.715271 1.32541 -2.95025 -0.82395 0.547343 -0.146702 + 0.70882 1.27688 -2.94239 -0.972672 0.20551 0.108054 + 0.695853 1.23354 -2.94732 -0.926637 0.334136 0.172329 + 0.675775 1.18578 -2.9538 -0.814374 0.323878 0.481558 + 0.752272 1.34314 -2.95816 -0.0644487 0.976553 0.205405 + 0.690081 1.32223 -2.99214 -0.707555 0.426026 0.563797 + 0.710462 1.31384 -2.964 -0.868745 0.257874 0.422828 + 0.704011 1.26531 -2.95615 -0.936897 0.25001 0.244376 + 0.692091 1.2342 -2.95767 -0.832678 0.327486 0.446542 + 0.799768 1.35538 -2.98155 0.107882 0.95339 0.281796 + 0.777883 1.36636 -3.02257 0.0510507 0.987437 0.149539 + 0.730388 1.35412 -2.99916 -0.288904 0.894992 0.339889 + 0.850375 1.31449 -2.91732 0.271329 0.876976 0.396602 + 0.836722 1.34868 -2.98676 0.296147 0.940715 0.165382 + 0.846376 1.34513 -3.0218 0.399249 0.901544 -0.166789 + 0.877136 1.30123 -2.90596 0.240545 0.961887 0.130045 + 0.899954 1.31617 -2.97904 0.441076 0.886789 0.13805 + 0.909608 1.31262 -3.01408 0.576954 0.801029 -0.159614 + 0.882594 1.29958 -2.8801 0.154256 0.985508 0.070555 + 0.943709 1.29575 -2.94127 0.33275 0.942986 -0.0074522 + 0.926715 1.30291 -2.96768 0.404418 0.914238 0.0247991 + 0.949318 1.28643 -2.99374 0.662062 0.702712 -0.260518 + 0.933412 1.29065 -3.02023 0.658798 0.675252 -0.331691 + 0.880748 1.29581 -2.84857 0.00134481 0.960866 0.277012 + 0.948567 1.29623 -2.86431 0.221952 0.974397 0.0358988 + 0.949168 1.29402 -2.91547 0.27578 0.961148 -0.0118441 + 0.98106 1.27856 -2.92569 0.794983 0.59719 -0.106617 + 0.966312 1.27927 -2.96733 0.745938 0.617867 -0.248628 + 0.941826 1.27882 -2.78935 0.141964 0.885366 0.442689 + 0.94672 1.29238 -2.83283 0.161147 0.960719 0.225943 + 0.988214 1.27832 -2.83389 0.526555 0.833225 0.168746 + 0.980459 1.28078 -2.87453 0.531262 0.843032 -0.084012 + 0.91914 1.26648 -2.76477 -0.0257045 0.917182 0.397638 + 0.983319 1.26477 -2.79041 0.361393 0.848285 0.387051 + 1.01994 1.25288 -2.85401 0.681815 0.720368 -0.127269 + 1.01218 1.25533 -2.89466 0.720218 0.629439 -0.291707 + 0.986984 1.24749 -2.93948 0.842663 0.395526 -0.365346 + 0.878192 1.22829 -2.69583 -0.202904 0.896 0.394987 + 0.941463 1.25178 -2.72611 -0.0217896 0.928727 0.370124 + 1.0015 1.25512 -2.76769 0.171379 0.98227 -0.0759961 + 1.00108 1.25237 -2.77993 0.335067 0.941782 0.0278619 + 1.0373 1.24602 -2.83274 0.59118 0.795722 -0.131652 + 0.862039 1.21597 -2.67048 -0.353989 0.860613 0.366111 + 0.94738 1.22467 -2.66936 -0.0527854 0.921491 0.384797 + 0.986856 1.22901 -2.68127 0.106088 0.863739 0.492647 + 0.98094 1.25611 -2.73802 0.0255142 0.986986 0.158767 + 0.835042 1.19344 -2.67006 -0.74745 0.498613 0.43898 + 0.876853 1.2022 -2.62483 -0.346184 0.878847 0.328306 + 0.931226 1.21225 -2.64405 -0.0962557 0.94093 0.324631 + 0.82485 1.16142 -2.67061 -0.895127 0.240871 0.375138 + 0.834107 1.13159 -2.62274 -0.899956 0.25666 0.352427 + 0.849856 1.17976 -2.62437 -0.76307 0.514633 0.390995 + 0.883468 1.19496 -2.5945 -0.413403 0.867205 0.277585 + 0.80936 1.17716 -2.71027 -0.851487 0.194764 0.486864 + 0.798097 1.1421 -2.72174 -0.884447 0.0911255 0.457656 + 0.814874 1.13507 -2.68037 -0.920936 0.169296 0.351021 + 0.824131 1.10524 -2.6325 -0.941854 0.0956495 0.322121 + 0.846683 1.11699 -2.58144 -0.850833 0.157033 0.501421 + 0.776807 1.14418 -2.75434 -0.852351 -0.114855 0.510201 + 0.762373 1.12165 -2.79273 -0.893641 -0.0200451 0.448335 + 0.791705 1.10019 -2.72515 -0.910796 0.0867619 0.403637 + 0.808482 1.09317 -2.68378 -0.932208 0.0815051 0.352626 + 0.760734 1.15684 -2.78447 -0.883749 -0.0639518 0.463571 + 0.7463 1.13431 -2.82285 -0.896797 -0.147159 0.417252 + 0.725986 1.14877 -2.86149 -0.873084 -0.0543001 0.484537 + 0.758251 0.991941 -2.78005 -0.907306 0.0560661 0.416715 + 0.686176 1.06194 -2.9165 -0.78003 0.0929665 0.618797 + 0.725744 1.0435 -2.85377 -0.873127 0.0417324 0.485704 + 0.763945 0.810468 -2.75313 -0.950184 0.00335823 0.311672 + 0.784835 0.713102 -2.65509 -0.955928 0.0222523 0.292757 + 0.787583 0.970479 -2.71248 -0.910953 0.083724 0.403924 + 0.647707 1.18379 -2.99095 -0.728875 0.242059 0.640429 + 0.636951 1.07292 -2.96692 -0.694806 0.166539 0.69965 + 0.691375 0.908283 -2.88575 -0.756229 0.0722199 0.650309 + 0.731438 0.862037 -2.82686 -0.863858 0.0379043 0.502307 + 0.664024 1.23221 -2.99482 -0.723184 0.293507 0.625187 + 0.596155 1.19695 -3.04635 -0.673594 0.289111 0.68021 + 0.585399 1.08609 -3.02232 -0.667304 0.215735 0.712857 + 0.642151 0.919266 -2.93618 -0.575568 0.139635 0.805744 + 0.70025 1.26598 -2.9665 -0.839475 0.242667 0.486205 + 0.679869 1.27438 -2.99465 -0.749496 0.213944 0.626485 + 0.619842 1.24071 -3.04454 -0.695664 0.306045 0.649913 + 0.646435 1.3151 -3.04898 -0.703495 0.439975 0.558137 + 0.635687 1.28288 -3.04437 -0.711662 0.302413 0.6341 + 0.595684 1.25431 -3.07788 -0.749735 0.353766 0.559238 + 0.571997 1.21055 -3.0797 -0.599589 0.478256 0.641689 + 0.539081 1.20411 -3.10155 -0.588134 0.349215 0.729484 + 0.700087 1.3477 -3.01025 -0.44719 0.793062 0.413609 + 0.65644 1.34066 -3.06706 -0.487157 0.766258 0.418959 + 0.620873 1.3181 -3.08259 -0.722537 0.40748 0.558481 + 0.610125 1.28579 -3.07802 -0.767265 0.342722 0.542076 + 0.695376 1.35868 -3.08727 -0.190913 0.952482 0.23734 + 0.681277 1.36645 -3.11213 -0.00826762 0.927968 0.372568 + 0.642341 1.34843 -3.09191 -0.327128 0.66882 0.667583 + 0.620269 1.32826 -3.09077 -0.689576 0.437648 0.577018 + 0.725677 1.3651 -3.07618 -0.152684 0.988161 0.0150318 + 0.748237 1.36493 -3.10089 0.0761242 0.996453 -0.0358613 + 0.663343 1.37105 -3.12769 0.0609541 0.975168 0.212913 + 0.644497 1.37624 -3.10808 0.00601558 0.829783 0.558054 + 0.622425 1.35607 -3.10695 -0.496327 0.447925 0.743655 + 0.800443 1.36619 -3.04727 0.297307 0.947271 0.119521 + 0.820561 1.35346 -3.09762 0.331798 0.939532 -0.0847929 + 0.822392 1.35025 -3.13007 0.374969 0.924829 -0.0639524 + 0.750068 1.36172 -3.13333 0.190851 0.981604 0.00546958 + 0.665156 1.37844 -3.1423 -0.0203897 0.8774 0.479326 + 0.828296 1.3515 -3.05063 0.6188 0.741501 0.25935 + 0.848414 1.33877 -3.10098 0.805762 0.588042 0.070385 + 0.850536 1.32721 -3.13796 0.842903 0.519016 -0.141902 + 0.842038 1.33793 -3.14952 0.74284 0.660398 -0.109829 + 0.807773 1.35332 -3.17718 0.344728 0.936776 -0.0601094 + 0.836077 1.34062 -3.04639 0.604754 0.788035 -0.11521 + 0.859362 1.30741 -3.11426 0.91799 0.389819 -0.0730424 + 0.861484 1.29584 -3.15123 0.961286 0.169616 -0.217163 + 0.83701 1.30443 -3.1987 0.873634 0.162979 -0.458477 + 0.828512 1.31515 -3.21027 0.75927 0.18011 -0.625355 + 0.879112 1.29481 -3.08344 0.728265 0.590416 -0.347906 + 0.867142 1.29652 -3.11001 0.798194 0.500449 -0.335318 + 0.860707 1.25354 -3.15315 0.892924 0.028105 -0.449329 + 0.836233 1.26212 -3.20062 0.782612 -0.115591 -0.611683 + 0.889411 1.29932 -3.05886 0.549736 0.69309 -0.466278 + 0.892395 1.25566 -3.09584 0.842981 0.215754 -0.492781 + 0.880425 1.25738 -3.12241 0.85511 0.189574 -0.482544 + 0.871592 1.18768 -3.12529 0.826093 -0.0241988 -0.563014 + 0.913215 1.27735 -3.065 0.517098 0.497921 -0.696193 + 0.906593 1.25503 -3.07875 0.672367 0.222181 -0.706087 + 0.891311 1.19161 -3.0945 0.821475 0.0304554 -0.56943 + 0.940599 1.25994 -3.04386 0.782028 0.31206 -0.539492 + 0.933976 1.23772 -3.05755 0.724393 0.0474008 -0.687756 + 0.905509 1.19098 -3.0774 0.736723 -0.0626343 -0.673287 + 0.924853 1.16125 -3.05211 0.757926 0.092378 -0.645767 + 0.956505 1.25574 -3.01736 0.845158 0.315706 -0.431321 + 0.953321 1.20799 -3.03226 0.76822 -0.0603313 -0.637336 + 0.972236 1.24811 -2.98116 0.901768 0.285438 -0.324561 + 0.983819 1.212 -2.97801 0.900292 0.21221 -0.380053 + 0.968088 1.21962 -3.01421 0.840211 0.113884 -0.530165 + 0.986052 1.14559 -2.97619 0.802296 0.138504 -0.580635 + 0.997624 1.21503 -2.94985 0.843359 0.255684 -0.472622 + 1.00082 1.15722 -2.95813 0.852129 -0.0160561 -0.523085 + 1.04075 1.13677 -2.8959 0.805804 0.287854 -0.517514 + 1.06735 1.08183 -2.90755 0.720687 0.549714 -0.422402 + 1.00278 1.09979 -2.98406 0.711893 0.501873 -0.491254 + 1.02282 1.22287 -2.90504 0.844313 0.311891 -0.435729 + 1.01462 1.16025 -2.92998 0.854996 0.182781 -0.485358 + 1.04895 1.19939 -2.87097 0.81289 0.314196 -0.490399 + 1.09691 1.11595 -2.82104 0.799905 0.313031 -0.512019 + 1.1235 1.06101 -2.83269 0.698799 0.586245 -0.409874 + 1.06631 1.19254 -2.84971 0.784574 0.301124 -0.542004 + 1.0807 1.1925 -2.82743 0.779574 0.356129 -0.515206 + 1.1113 1.11582 -2.79883 0.772065 0.249808 -0.58439 + 1.1847 1.04322 -2.75687 0.678877 0.638404 -0.36272 + 1.05505 1.23363 -2.82227 0.652053 0.745352 -0.138843 + 1.06865 1.22229 -2.81203 0.601831 0.737651 -0.306056 + 1.0943 1.18108 -2.81725 0.665882 0.147786 -0.731274 + 1.10832 1.18096 -2.80125 0.812738 0.211133 -0.543028 + 1.12532 1.1158 -2.78279 0.809449 0.228221 -0.541025 + 1.06907 1.22495 -2.79984 0.367358 0.878654 -0.304985 + 1.10091 1.21132 -2.79184 0.684034 0.566983 -0.458941 + 1.12906 1.16266 -2.76575 0.890237 0.221544 -0.397991 + 1.153 1.14253 -2.72549 0.880135 0.277413 -0.385233 + 1.14926 1.09558 -2.74257 0.83547 0.384426 -0.392692 + 1.05669 1.24472 -2.77308 0.276617 0.938121 -0.208355 + 1.08853 1.23109 -2.76508 0.445763 0.880753 -0.159903 + 1.11572 1.21894 -2.74322 0.682791 0.714263 -0.153706 + 1.12164 1.19301 -2.75633 0.889767 0.334273 -0.310767 + 1.13784 1.18449 -2.71436 0.893461 0.379847 -0.239673 + 1.03613 1.2458 -2.74336 0.212104 0.949005 0.23324 + 1.06359 1.23826 -2.73789 0.240886 0.954662 0.174915 + 1.09078 1.2261 -2.71603 0.235643 0.96309 0.130119 + 1.13191 1.21041 -2.70125 0.770303 0.634702 -0.0615336 + 1.01432 1.22146 -2.67579 0.0882708 0.964511 0.24885 + 1.02305 1.21805 -2.64968 -0.0348986 0.987771 0.151954 + 1.09952 1.22269 -2.68993 0.187654 0.98196 0.023254 + 1.13078 1.21224 -2.64523 0.590672 0.806697 -0.0186057 + 0.990116 1.20637 -2.60766 -0.0839998 0.956858 0.27815 + 1.09838 1.22452 -2.6339 0.133558 0.981804 0.134998 + 1.14095 1.20304 -2.60229 0.560528 0.825679 0.0637312 + 1.15267 1.18141 -2.66743 0.839699 0.516898 -0.166499 + 1.16783 1.13946 -2.67856 0.864399 0.43995 -0.243429 + 0.937842 1.20493 -2.61377 -0.0585684 0.963529 0.261115 + 0.948539 1.19817 -2.59145 -0.0251799 0.950696 0.309101 + 0.967912 1.176 -2.52145 -0.158938 0.929052 0.334067 + 1.06545 1.21285 -2.59188 -0.0449399 0.973614 0.22373 + 0.888448 1.18672 -2.54942 -0.422628 0.850001 0.314456 + 0.899145 1.17995 -2.5271 -0.25357 0.831593 0.494121 + 0.926335 1.16779 -2.50524 0.0118262 0.734204 0.678827 + 0.91171 1.13684 -2.48263 -0.594806 0.556296 0.580294 + 0.982868 1.16997 -2.4862 -0.272244 0.949284 0.157298 + 0.862432 1.16515 -2.58306 -0.843803 0.424433 0.32841 + 0.867412 1.15699 -2.53792 -0.891763 0.293355 0.34453 + 0.88452 1.14899 -2.50448 -0.688939 0.341354 0.639406 + 0.867952 1.10422 -2.55012 -0.888783 0.00310142 0.458318 + 0.885061 1.09631 -2.51663 -0.911197 0.0305639 0.410835 + 0.90077 1.09393 -2.4795 -0.894608 0.159997 0.417226 + 0.834743 1.0821 -2.60222 -0.891384 -0.190872 0.411099 + 0.856012 1.06933 -2.5709 -0.882663 0.107983 0.457434 + 0.876887 1.05242 -2.51521 -0.889029 0.231324 0.395115 + 0.892596 1.05004 -2.47808 -0.906558 0.266655 0.32718 + 0.91422 1.0936 -2.44394 -0.947581 0.260035 0.185669 + 0.819094 1.07002 -2.65349 -0.937619 0.0156662 0.347312 + 0.842512 1.04608 -2.58462 -0.910644 0.16722 0.377843 + 0.863387 1.02917 -2.52894 -0.913336 0.175327 0.367529 + 0.813708 0.928872 -2.64202 -0.924804 0.0743181 0.373113 + 0.837126 0.904844 -2.5732 -0.934105 0.0506815 0.353383 + 0.862232 0.8689 -2.50514 -0.94576 0.0402809 0.322359 + 0.882186 1.00437 -2.45918 -0.948184 0.169656 0.268635 + 0.81096 0.671494 -2.58463 -0.884844 0.0459353 0.463618 + 0.843492 0.617564 -2.52622 -0.916776 -0.0154819 0.399102 + 0.868597 0.581615 -2.45815 -0.939481 -0.0542891 0.338273 + 0.895077 0.562532 -2.3843 -0.94922 -0.0924291 0.300729 + 0.881031 0.844101 -2.43539 -0.959831 0.0229515 0.279638 + 0.79294 0.560906 -2.64128 -0.964058 -0.194843 0.180632 + 0.83036 0.496081 -2.5744 -0.916484 -0.257982 0.30578 + 0.862892 0.442151 -2.51599 -0.888344 -0.401692 0.22246 + 0.904768 0.409989 -2.44929 -0.843064 -0.467362 0.26611 + 0.77205 0.658362 -2.73928 -0.947906 -0.0393929 0.316105 + 0.820585 0.480402 -2.67264 -0.918146 -0.32715 0.223562 + 0.858005 0.415578 -2.60577 -0.845312 -0.436601 0.307939 + 0.910705 0.378083 -2.54642 -0.788636 -0.563118 0.246883 + 0.95258 0.345927 -2.47973 -0.717796 -0.629482 0.297525 + 0.736264 0.710197 -2.81106 -0.863871 0.00460857 0.503692 + 0.77928 0.535043 -2.72769 -0.877255 -0.146152 0.457235 + 0.81956 0.390287 -2.77676 -0.846957 -0.394571 0.35634 + 0.860865 0.33565 -2.72173 -0.84238 -0.459432 0.281633 + 0.911098 0.308272 -2.65471 -0.765361 -0.534496 0.358521 + 0.696201 0.756447 -2.86997 -0.789895 0.0132344 0.613099 + 0.743494 0.586878 -2.79947 -0.898543 -0.126245 0.420337 + 0.771455 0.415147 -2.84922 -0.854741 -0.354118 0.379497 + 0.873381 0.196486 -2.86869 -0.750353 -0.520508 0.407482 + 0.930101 0.177676 -2.79671 -0.746588 -0.556319 0.364849 + 0.650257 0.756918 -2.92238 -0.542823 0.0236162 0.839515 + 0.701816 0.617653 -2.86977 -0.822584 -0.154655 0.547208 + 0.729778 0.44592 -2.91952 -0.828065 -0.328785 0.454102 + 0.825276 0.221345 -2.94114 -0.789122 -0.464703 0.401669 + 0.592856 0.721468 -2.93838 -0.499686 -0.0680936 0.863526 + 0.655872 0.618129 -2.92219 -0.684809 -0.242747 0.687103 + 0.682178 0.444467 -2.9922 -0.710059 -0.376243 0.595196 + 0.772757 0.219313 -3.03282 -0.742349 -0.477129 0.470389 + 0.58475 0.88381 -2.95217 -0.50823 0.150182 0.848026 + 0.542083 0.679823 -2.98485 -0.612835 -0.169475 0.771824 + 0.607761 0.585761 -2.98813 -0.565869 -0.370678 0.736471 + 0.634068 0.412018 -3.0582 -0.638313 -0.416062 0.647649 + 0.725157 0.217773 -3.10556 -0.701475 -0.491603 0.516004 + 0.531513 1.06108 -3.0644 -0.625987 0.244037 0.740667 + 0.530865 0.858806 -2.99426 -0.704745 0.0984981 0.70259 + 0.494928 0.617412 -3.03835 -0.574625 -0.195356 0.794759 + 0.556988 0.544116 -3.0346 -0.399929 -0.435911 0.806249 + 0.582788 0.389107 -3.12352 -0.468106 -0.495807 0.731473 + 0.470823 1.0643 -3.11199 -0.632253 0.192894 0.750366 + 0.48371 0.796392 -3.04775 -0.713334 0.0518902 0.698901 + 0.440181 0.567976 -3.08593 -0.514652 -0.195692 0.834768 + 0.505421 0.495836 -3.08818 -0.369874 -0.45455 0.810295 + 0.531221 0.340828 -3.17709 -0.408243 -0.546315 0.731353 + 0.478391 1.20726 -3.14919 -0.548683 0.279114 0.788062 + 0.411206 1.20736 -3.19318 -0.520528 0.281555 0.806087 + 0.413563 1.03519 -3.15817 -0.588014 0.157852 0.793298 + 0.42645 0.767278 -3.09393 -0.644101 0.0580872 0.762732 + 0.550071 1.24921 -3.12146 -0.519171 0.346405 0.781323 + 0.508176 1.25605 -3.1455 -0.506641 0.261836 0.821436 + 0.477073 1.2723 -3.17425 -0.587973 0.245212 0.770817 + 0.447288 1.22359 -3.17789 -0.531353 0.351651 0.770718 + 0.582987 1.25574 -3.09956 -0.674543 0.373596 0.636724 + 0.571491 1.29953 -3.12541 -0.507356 0.253325 0.82366 + 0.529596 1.30636 -3.14945 -0.481966 0.213162 0.849865 + 0.484204 1.31017 -3.17625 -0.550425 0.128092 0.825 + 0.441119 1.27996 -3.20792 -0.542797 0.227698 0.808409 + 0.597427 1.28713 -3.09974 -0.7191 0.364049 0.591914 + 0.596824 1.29737 -3.10787 -0.628685 0.382611 0.677026 + 0.597092 1.35823 -3.12449 -0.481094 0.399942 0.780125 + 0.540536 1.34948 -3.15254 -0.452757 0.341733 0.823547 + 0.495144 1.35338 -3.17928 -0.367877 0.431313 0.823793 + 0.626563 1.38075 -3.12369 -0.14922 0.981271 0.121821 + 0.570007 1.37209 -3.15169 -0.326274 0.763485 0.557347 + 0.57182 1.37949 -3.16631 -0.243952 0.853876 0.459764 + 0.535893 1.3848 -3.19771 -0.279474 0.862132 0.422637 + 0.501026 1.37766 -3.19754 -0.156716 0.805888 0.57095 + 0.45252 1.35984 -3.19848 -0.478666 0.263273 0.837595 + 0.44825 1.31783 -3.20992 -0.624181 0.036017 0.780449 + 0.633806 1.40745 -3.18594 -0.0523282 0.941843 0.331954 + 0.597879 1.41285 -3.21729 -0.0988632 0.983253 0.153097 + 0.521536 1.39995 -3.26795 -0.0862199 0.988228 0.126376 + 0.486669 1.39281 -3.26778 -0.0158785 0.905248 0.424587 + 0.458403 1.38412 -3.21674 -0.0611349 0.828436 0.556737 + 0.700704 1.3806 -3.14983 0.250097 0.725419 0.641263 + 0.669354 1.40969 -3.19342 0.176446 0.978852 0.103515 + 0.661598 1.4 -3.24124 0.286453 0.924849 -0.250197 + 0.618248 1.4097 -3.25283 0.145553 0.969154 -0.198883 + 0.730432 1.36816 -3.14988 0.2606 0.938643 0.225912 + 0.714159 1.38846 -3.19644 0.406331 0.913714 0.00464153 + 0.706403 1.37868 -3.24431 0.491951 0.764685 -0.416222 + 0.660643 1.36268 -3.328 0.50912 0.763275 -0.397754 + 0.617293 1.37238 -3.33959 0.229824 0.91507 -0.331403 + 0.788137 1.35976 -3.19374 0.343841 0.933367 -0.102948 + 0.743887 1.37593 -3.19654 0.374091 0.927254 -0.0159809 + 0.759644 1.36237 -3.21786 0.387649 0.740591 -0.548865 + 0.734897 1.36508 -3.22996 0.517085 0.301449 -0.801094 + 0.695527 1.3494 -3.28519 0.733434 0.436486 -0.521109 + 0.803894 1.3462 -3.21505 0.433349 0.670951 -0.601692 + 0.775423 1.33123 -3.23053 0.314749 0.335889 -0.887756 + 0.750676 1.33395 -3.24263 0.569269 0.372345 -0.733002 + 0.724021 1.3358 -3.27084 0.611058 0.356967 -0.706528 + 0.827419 1.341 -3.19664 0.711096 0.602111 -0.363049 + 0.804987 1.32035 -3.22868 0.406684 0.242789 -0.880717 + 0.81049 1.2834 -3.23168 0.467265 -0.0275923 -0.883687 + 0.780926 1.29429 -3.23354 0.308523 0.0410823 -0.950329 + 0.758508 1.28489 -3.24767 0.632447 0.0881508 -0.769572 + 0.731854 1.28674 -3.27587 0.743752 0.149028 -0.651632 + 0.798461 1.22376 -3.22077 0.579906 -0.132253 -0.803877 + 0.776043 1.21436 -3.2349 0.635483 -0.0263831 -0.771664 + 0.74007 1.21133 -3.26986 0.755918 0.0101932 -0.654586 + 0.711436 1.20857 -3.31008 0.83955 0.00589757 -0.543251 + 0.70322 1.28398 -3.31609 0.874413 0.145166 -0.462957 + 0.824204 1.20238 -3.18975 0.7643 -0.100354 -0.637004 + 0.831356 1.13163 -3.18461 0.732241 -0.0189649 -0.680782 + 0.792498 1.14151 -3.21772 0.668946 -0.0403856 -0.742213 + 0.756525 1.13848 -3.25267 0.719142 -0.0116432 -0.694766 + 0.729949 1.09364 -3.2816 0.792301 -0.0141198 -0.609967 + 0.878744 1.11684 -3.12019 0.692636 0.2474 -0.677532 + 0.844468 1.01909 -3.16388 0.461867 0.136264 -0.876419 + 0.805611 1.02897 -3.19699 0.673932 0.0307018 -0.738155 + 0.779035 0.984124 -3.22592 0.675871 0.0635502 -0.734275 + 0.941584 1.11545 -3.05998 0.680165 0.47123 -0.561531 + 0.906005 1.05988 -3.15032 0.331442 0.398504 -0.855185 + 0.924277 0.952189 -3.16241 0.39304 0.121718 -0.91143 + 0.862741 0.911406 -3.17596 0.374121 0.163141 -0.912918 + 0.968845 1.05849 -3.09012 0.674047 0.449019 -0.586552 + 0.981885 0.970858 -3.11574 0.682698 0.185786 -0.706687 + 0.924354 0.819293 -3.17382 0.552254 0.13559 -0.822576 + 1.03934 1.04783 -3.00726 0.702325 0.486809 -0.519381 + 1.05238 0.960199 -3.03288 0.733141 0.228749 -0.640452 + 1.04096 0.835847 -3.07489 0.691687 0.109127 -0.713905 + 0.981962 0.837958 -3.12715 0.636854 0.0708287 -0.767724 + 1.1039 1.02987 -2.93075 0.705609 0.53323 -0.46667 + 1.14424 0.938086 -2.94017 0.730665 0.282997 -0.621322 + 1.10361 0.92803 -2.98836 0.712472 0.205664 -0.670884 + 1.09219 0.803672 -3.03036 0.669875 0.166967 -0.723457 + 1.03949 0.728479 -3.08773 0.5943 0.106962 -0.797099 + 1.171 1.00422 -2.86553 0.681395 0.559318 -0.472085 + 1.21134 0.912432 -2.87494 0.719467 0.23453 -0.653729 + 1.24475 0.789843 -2.86081 0.760583 0.196185 -0.61889 + 1.1949 0.799574 -2.92747 0.76117 0.227231 -0.607443 + 1.15427 0.789519 -2.97565 0.701597 0.205424 -0.682322 + 1.23221 0.986422 -2.7897 0.675687 0.613269 -0.409082 + 1.26662 0.915059 -2.81249 0.725456 0.341597 -0.597516 + 1.30003 0.792556 -2.79831 0.599488 0.116832 -0.791811 + 1.2762 0.695953 -2.85739 0.73175 0.312722 -0.605597 + 1.23602 1.03286 -2.68113 0.655973 0.688321 -0.309698 + 1.30144 0.975091 -2.69707 0.660996 0.64522 -0.383112 + 1.33585 0.903728 -2.71987 0.695777 0.480519 -0.53385 + 1.34461 0.824924 -2.77497 0.613318 0.243218 -0.751456 + 1.20058 1.08523 -2.66683 0.805471 0.497716 -0.321706 + 1.2355 1.07169 -2.57379 0.715248 0.670455 -0.197257 + 1.28515 1.0287 -2.58513 0.612554 0.759543 -0.218797 + 1.35057 0.970939 -2.60108 0.628319 0.718758 -0.297661 + 1.38363 0.891352 -2.67423 0.716143 0.510962 -0.475455 + 1.18088 1.1429 -2.63392 0.839339 0.518009 -0.164855 + 1.21363 1.08867 -2.62219 0.867228 0.446428 -0.220494 + 1.212 1.11193 -2.53548 0.756913 0.637373 -0.144352 + 1.27318 1.0645 -2.46373 0.664414 0.731832 -0.151576 + 1.32283 1.02151 -2.47507 0.533209 0.816656 -0.22082 + 1.16285 1.17229 -2.62444 0.834291 0.544902 -0.0839092 + 1.19013 1.12891 -2.58389 0.826729 0.554336 -0.0960763 + 1.1721 1.15831 -2.57441 0.856889 0.512622 -0.0543991 + 1.18127 1.14826 -2.52601 0.805008 0.590456 -0.0576533 + 1.22233 1.10923 -2.49381 0.716509 0.684521 -0.134333 + 1.16169 1.17928 -2.56753 0.757527 0.651927 0.0338273 + 1.11981 1.21108 -2.56861 0.168116 0.985702 0.0113623 + 1.14055 1.18741 -2.53381 0.432184 0.87621 0.213246 + 1.17086 1.16932 -2.51908 0.735448 0.676211 0.043078 + 1.16543 1.17131 -2.46853 0.570611 0.821127 -0.0123467 + 1.1916 1.14556 -2.48434 0.701022 0.707854 -0.0866668 + 1.0804 1.20673 -2.55668 -0.0678785 0.981014 0.181669 + 1.08928 1.18644 -2.47874 0.0821197 0.965555 0.2469 + 1.09447 1.1792 -2.45001 0.0182652 0.997846 0.0630083 + 1.14574 1.18017 -2.50508 0.301642 0.948149 0.100127 + 1.04987 1.18209 -2.46681 -0.127035 0.980773 0.148146 + 1.09184 1.17938 -2.4269 0.0142783 0.999779 -0.0154023 + 1.14031 1.18208 -2.45458 0.148682 0.988638 -0.0221078 + 1.16158 1.17478 -2.43814 0.537232 0.841689 0.0542304 + 0.952427 1.16044 -2.45231 -0.437754 0.897693 -0.0501898 + 1.01943 1.17257 -2.43291 -0.190886 0.981002 0.0346086 + 1.01558 1.17032 -2.39601 -0.0987706 0.990661 0.0939989 + 1.04735 1.17306 -2.38357 -0.1449 0.987065 0.0686003 + 1.08819 1.18004 -2.40846 -0.0644724 0.997895 0.00699668 + 0.925161 1.13651 -2.44707 -0.836032 0.519219 0.177373 + 0.95903 1.1691 -2.4199 -0.3522 0.933655 -0.0651455 + 0.955185 1.16677 -2.38307 -0.358833 0.930344 0.0754888 + 0.93663 1.15101 -2.30578 -0.420606 0.880546 0.21847 + 0.9684 1.15384 -2.29328 -0.202692 0.955332 0.215076 + 0.931764 1.14517 -2.41466 -0.82712 0.562025 -0.000698458 + 0.932578 1.14581 -2.36357 -0.849154 0.528143 -0.00128994 + 0.914023 1.12997 -2.28633 -0.930181 0.367025 -0.00748337 + 0.974547 1.14311 -2.24689 -0.146146 0.96026 0.237787 + 1.08239 1.17791 -2.33317 -0.0478934 0.985577 0.162311 + 0.919198 1.10644 -2.39597 -0.956791 0.290327 0.0161777 + 0.920013 1.10707 -2.34487 -0.944296 0.268242 0.19066 + 0.929803 1.09339 -2.29977 -0.997613 -0.0684833 -0.00881137 + 0.904511 1.05753 -2.44045 -0.951047 0.272972 0.144897 + 0.909489 1.07044 -2.39242 -0.975029 0.202737 0.0906424 + 0.914026 1.05165 -2.35327 -0.971286 0.111476 0.210184 + 0.923815 1.03796 -2.30816 -0.980843 0.0810049 0.177156 + 0.926824 1.07678 -2.2384 -0.974239 -0.198443 -0.107135 + 0.894101 1.01186 -2.42156 -0.94737 0.25029 0.199614 + 0.898638 0.993068 -2.38241 -0.972827 0.0846928 0.215486 + 0.913802 0.9689 -2.31155 -0.976611 0.0558439 0.207637 + 0.923286 0.9505 -2.24968 -0.989984 -0.0133627 0.140548 + 0.9333 1.01948 -2.24635 -0.999525 0.0138456 0.027546 + 0.900385 0.845177 -2.37266 -0.967859 0.00332926 0.251472 + 0.915549 0.821097 -2.30175 -0.970909 -0.0303687 0.237513 + 0.936049 0.81885 -2.23186 -0.968691 -0.0553289 0.242026 + 0.940327 0.92798 -2.17827 -0.974351 -0.13064 0.183231 + 0.92678 0.999707 -2.18871 -0.995003 -0.0861782 0.0504268 + 0.914431 0.563609 -2.32156 -0.899239 -0.120208 0.420618 + 0.934239 0.615486 -2.27582 -0.930408 -0.1012 0.352278 + 0.954739 0.613244 -2.20594 -0.932294 -0.187961 0.309028 + 0.9812 0.627521 -2.12066 -0.931412 -0.205704 0.300262 + 0.953089 0.796417 -2.1604 -0.965353 -0.0840891 0.247028 + 0.931247 0.390906 -2.37543 -0.784739 -0.550677 0.284497 + 0.9674 0.395445 -2.30669 -0.684164 -0.517101 0.514322 + 0.987209 0.44724 -2.26101 -0.744546 -0.366499 0.557969 + 1.00997 0.477562 -2.19773 -0.764592 -0.47245 0.438394 + 1.00436 0.330429 -2.40948 -0.629916 -0.706063 0.323543 + 1.04052 0.334882 -2.34079 -0.603828 -0.723666 0.334215 + 1.07843 0.337759 -2.25998 -0.631622 -0.624216 0.459791 + 1.10119 0.368082 -2.1967 -0.595181 -0.528881 0.605015 + 1.01351 0.260159 -2.51977 -0.696086 -0.611783 0.375747 + 1.06529 0.244662 -2.44953 -0.694796 -0.608913 0.382731 + 1.11078 0.244901 -2.36655 -0.698305 -0.61152 0.37204 + 1.14869 0.247773 -2.28572 -0.680572 -0.612644 0.401857 + 0.963798 0.270777 -2.59536 -0.747005 -0.570387 0.341529 + 1.08132 0.139613 -2.57138 -0.66432 -0.646582 0.374982 + 1.12487 0.148312 -2.48305 -0.66486 -0.644521 0.377562 + 1.17036 0.148551 -2.40006 -0.665451 -0.645935 0.37409 + 1.21585 0.15262 -2.31431 -0.643736 -0.653095 0.398837 + 1.03161 0.150229 -2.64697 -0.682573 -0.623963 0.38048 + 1.0949 0.063421 -2.70421 -0.499715 -0.814254 0.295424 + 1.14295 0.067705 -2.61003 -0.488574 -0.817523 0.30488 + 1.1865 0.076404 -2.5217 -0.51608 -0.800222 0.305461 + 1.23065 0.082109 -2.42798 -0.526274 -0.793275 0.306186 + 0.980334 0.150298 -2.72969 -0.700203 -0.606399 0.376824 + 1.04362 0.063489 -2.78693 -0.506161 -0.812992 0.287829 + 1.10235 0.025305 -2.8486 -0.341774 -0.92234 0.180219 + 1.15152 0.028616 -2.74833 -0.3442 -0.917666 0.198531 + 1.19957 0.032899 -2.65415 -0.372208 -0.898997 0.230793 + 0.989418 0.068168 -2.87763 -0.549534 -0.791573 0.267254 + 1.04815 0.029898 -2.93935 -0.357127 -0.918277 0.17096 + 1.13541 0.009312 -2.87949 0.114029 -0.990566 -0.0760006 + 1.18457 0.012616 -2.77921 -0.215265 -0.968517 0.125045 + 1.23162 0.013941 -2.67851 -0.244951 -0.957156 0.154439 + 0.932698 0.086978 -2.94961 -0.570699 -0.758707 0.314113 + 0.989046 0.03358 -3.04213 -0.366431 -0.909163 0.197867 + 1.02346 0.014294 -3.08632 -0.0908701 -0.992946 0.0761693 + 1.08256 0.010615 -2.98355 0.121831 -0.988497 -0.0896097 + 0.87449 0.089578 -3.03132 -0.57292 -0.734133 0.364433 + 0.930838 0.036182 -3.12383 -0.287014 -0.91081 0.296731 + 0.963492 0.009705 -3.17978 -0.0451712 -0.988402 0.144984 + 1.04045 0.016546 -3.10162 0.331272 -0.932238 -0.145572 + 1.09387 0.020379 -2.98946 0.509725 -0.817379 -0.268464 + 0.821971 0.08746 -3.12305 -0.603842 -0.679487 0.416741 + 0.863394 0.02385 -3.19867 -0.344298 -0.873396 0.344439 + 0.896048 -0.002625 -3.25462 -0.0205348 -0.996729 0.0781625 + 0.980486 0.012045 -3.19503 0.340731 -0.926335 -0.160643 + 0.763439 0.084031 -3.20171 -0.57675 -0.68164 0.450251 + 0.804862 0.020423 -3.27734 -0.407896 -0.860627 0.304863 + 0.835807 -0.002219 -3.32752 -0.0700688 -0.997515 0.00733986 + 0.925137 0.007863 -3.27798 0.360889 -0.898524 -0.249827 + 0.711511 0.081249 -3.27089 -0.558544 -0.696653 0.450226 + 0.741351 0.027227 -3.35152 -0.403801 -0.866071 0.294731 + 0.772297 0.004586 -3.40171 -0.0598842 -0.996163 -0.0638226 + 0.864896 0.00827 -3.35089 0.316588 -0.892167 -0.322197 + 0.67323 0.214898 -3.17478 -0.624533 -0.531767 0.571998 + 0.652094 0.083546 -3.34127 -0.523599 -0.723974 0.449117 + 0.681935 0.029526 -3.4219 -0.386268 -0.885552 0.25806 + 0.704692 0.015375 -3.47239 -0.0465797 -0.993761 -0.101337 + 0.798552 0.018302 -3.42467 0.295475 -0.867659 -0.399828 + 0.62195 0.191992 -3.2401 -0.530702 -0.61379 0.584481 + 0.596305 0.078852 -3.40994 -0.468465 -0.77211 0.429403 + 0.614264 0.039505 -3.49159 -0.34018 -0.90857 0.242441 + 0.637021 0.02535 -3.54207 0.0214712 -0.97588 -0.21725 + 0.730947 0.029087 -3.49534 0.281707 -0.855416 -0.434631 + 0.56616 0.187379 -3.30871 -0.488216 -0.658847 0.572333 + 0.528555 0.085339 -3.47517 -0.411344 -0.815162 0.407807 + 0.546514 0.045994 -3.55683 -0.337205 -0.92125 0.193882 + 0.563558 0.039291 -3.60282 0.0269834 -0.966717 -0.254422 + 0.656432 0.045461 -3.56171 0.296049 -0.784103 -0.54547 + 0.468641 0.323794 -3.23039 -0.279337 -0.626816 0.727374 + 0.50358 0.170259 -3.36206 -0.344741 -0.750712 0.563547 + 0.458603 0.088549 -3.53054 -0.294802 -0.880461 0.371322 + 0.473631 0.061026 -3.62246 -0.23212 -0.960076 0.15612 + 0.490675 0.054324 -3.66846 0.172489 -0.783244 -0.597307 + 0.450674 0.446399 -3.13575 -0.230695 -0.52117 0.821682 + 0.39922 0.297007 -3.26859 -0.227283 -0.67582 0.701149 + 0.433628 0.173555 -3.41737 -0.319599 -0.785446 0.53003 + 0.373358 0.097524 -3.56988 -0.200434 -0.905933 0.372976 + 0.388386 0.070091 -3.66177 -0.147227 -0.978731 0.142862 + 0.38411 0.510512 -3.131 -0.416219 -0.219768 0.882306 + 0.381253 0.419616 -3.17396 -0.229077 -0.521411 0.821982 + 0.320793 0.288955 -3.30525 -0.144923 -0.73143 0.666338 + 0.355201 0.165506 -3.45403 -0.169198 -0.832435 0.527659 + 0.370379 0.709814 -3.139 -0.580902 0.043998 0.812784 + 0.316229 0.474584 -3.16837 -0.38356 -0.201283 0.901314 + 0.313372 0.383687 -3.21133 -0.138834 -0.582747 0.800706 + 0.238392 0.271757 -3.33506 -0.0800217 -0.759537 0.645523 + 0.346861 1.02945 -3.19722 -0.519687 0.140874 0.842663 + 0.282676 1.00031 -3.23375 -0.457483 0.123581 0.880589 + 0.306194 0.680591 -3.17558 -0.504488 0.0540576 0.861725 + 0.251104 0.432437 -3.20417 -0.258066 -0.23745 0.936493 + 0.230971 0.366491 -3.24114 -0.100362 -0.594957 0.797467 + 0.344504 1.20162 -3.23223 -0.463287 0.20697 0.861701 + 0.261176 1.19278 -3.27112 -0.408149 0.202499 0.890173 + 0.212322 0.988001 -3.26123 -0.330996 0.134717 0.933966 + 0.241069 0.63853 -3.21133 -0.379493 0.0552298 0.923544 + 0.159293 0.409373 -3.22522 -0.0779895 -0.249167 0.965315 + 0.405038 1.26374 -3.22322 -0.349371 0.231071 0.908045 + 0.380499 1.26393 -3.22596 -0.28359 0.114307 0.952108 + 0.360752 1.27625 -3.24029 -0.609799 0.256532 0.749891 + 0.324758 1.21402 -3.24652 -0.463511 0.269363 0.844157 + 0.417691 1.33543 -3.23319 -0.441942 0.0954144 0.891954 + 0.393152 1.33563 -3.23594 -0.341058 0.246031 0.907275 + 0.374771 1.3332 -3.24893 -0.65165 0.251949 0.715453 + 0.351967 1.277 -3.25119 -0.612715 0.290973 0.734789 + 0.421961 1.37743 -3.22175 -0.597949 0.288871 0.74767 + 0.401225 1.40643 -3.25577 -0.436917 0.487309 0.756065 + 0.382844 1.404 -3.26876 -0.639616 0.467118 0.610485 + 0.363138 1.38292 -3.27385 -0.545824 0.525512 0.652621 + 0.365986 1.33394 -3.25982 -0.59251 0.215319 0.776254 + 0.437347 1.39596 -3.23444 0.0327572 0.815414 0.57795 + 0.416611 1.42487 -3.26852 0.212195 0.785863 0.580855 + 0.403286 1.43616 -3.27807 -0.12814 0.756958 0.640776 + 0.38358 1.415 -3.28322 -0.67523 0.732613 -0.0856932 + 0.465614 1.40456 -3.28554 0.0890856 0.757408 0.646836 + 0.452289 1.41586 -3.2951 0.217186 0.976129 -0.00175134 + 0.455867 1.41022 -3.31814 0.218478 0.97298 0.0746824 + 0.403286 1.43616 -3.27807 -0.162617 0.373302 -0.913346 + 0.541905 1.39688 -3.30343 0.104012 0.971656 -0.212286 + 0.526225 1.38861 -3.34211 0.228445 0.958278 -0.171801 + 0.497237 1.3962 -3.34946 0.347955 0.936135 -0.0507878 + 0.475313 1.40955 -3.34178 0.539652 0.814042 0.214736 + 0.418215 1.43963 -3.35968 0.112036 0.971377 0.209461 + 0.387158 1.40937 -3.30626 -0.228393 0.946287 0.228862 + 0.601613 1.36411 -3.37827 0.321798 0.901763 -0.288566 + 0.555249 1.37678 -3.40721 0.334122 0.913865 -0.230681 + 0.526261 1.38436 -3.41455 0.235829 0.923571 -0.302325 + 0.485753 1.39471 -3.40748 0.312397 0.898944 -0.307094 + 0.463829 1.40797 -3.39984 0.534539 0.784976 -0.313178 + 0.619329 1.34505 -3.40407 0.474979 0.713402 -0.51522 + 0.572965 1.35764 -3.43306 0.437896 0.663495 -0.606647 + 0.528327 1.36562 -3.44609 0.194917 0.688982 -0.698077 + 0.487819 1.37588 -3.43906 0.152479 0.721684 -0.67522 + 0.657265 1.34065 -3.37004 0.593032 0.666855 -0.451241 + 0.630083 1.32452 -3.4159 0.589529 0.23171 -0.7738 + 0.569569 1.32693 -3.45287 0.434248 0.14585 -0.888908 + 0.524932 1.33491 -3.4659 0.146665 0.230935 -0.961851 + 0.490004 1.34003 -3.46416 0.0897001 0.32474 -0.94154 + 0.692149 1.32736 -3.32722 0.863762 0.366736 -0.345571 + 0.668019 1.32011 -3.38187 0.737632 0.273871 -0.617167 + 0.631042 1.25434 -3.39814 0.489285 -0.235391 -0.839756 + 0.570529 1.25675 -3.43512 0.435845 -0.298502 -0.84908 + 0.516745 1.26462 -3.46175 0.127914 -0.274834 -0.952945 + 0.679089 1.27673 -3.37073 0.759658 -0.00281797 -0.650317 + 0.65761 1.23795 -3.38175 0.477493 -0.192601 -0.857266 + 0.606513 1.1171 -3.35144 0.448723 -0.257495 -0.855771 + 0.685681 1.19519 -3.35049 0.745618 -0.0818122 -0.661333 + 0.664201 1.1564 -3.36151 0.162401 -0.204653 -0.965268 + 0.633081 1.10071 -3.33505 0.0239507 -0.220876 -0.975008 + 0.704194 1.08025 -3.32202 0.731503 -0.0652825 -0.678706 + 0.667664 1.07883 -3.34755 0.0803001 -0.161119 -0.983663 + 0.636544 1.02322 -3.32103 -0.0319817 -0.127823 -0.991281 + 0.613294 0.983224 -3.32556 0.396543 0.075697 -0.91489 + 0.583599 1.12337 -3.3677 0.413698 -0.306237 -0.857364 + 0.708008 0.92919 -3.30037 0.642857 0.0275413 -0.765491 + 0.671478 0.927766 -3.3259 0.305039 0.0231653 -0.952058 + 0.648228 0.887856 -3.33038 0.2457 0.150311 -0.957621 + 0.590379 0.98949 -3.34181 0.474715 0.033359 -0.879507 + 0.55476 1.09691 -3.36786 0.190968 -0.237163 -0.952515 + 0.807312 0.8757 -3.21712 0.561123 0.201085 -0.802936 + 0.736285 0.820761 -3.29156 0.579098 0.206179 -0.788756 + 0.669651 0.802808 -3.33947 0.476023 0.214456 -0.852884 + 0.592546 0.886392 -3.36024 0.44205 0.197623 -0.874949 + 0.833049 0.737981 -3.25239 0.538082 0.232332 -0.81024 + 0.770918 0.732946 -3.30046 0.565695 0.275949 -0.777072 + 0.704285 0.714901 -3.34841 0.44325 0.319158 -0.837656 + 0.613969 0.801339 -3.36932 0.45534 0.205917 -0.866177 + 0.888478 0.773687 -3.21123 0.567982 0.183687 -0.802282 + 0.853694 0.663423 -3.25465 0.650339 -0.0904432 -0.754241 + 0.791563 0.65847 -3.30267 0.763411 0.200832 -0.613897 + 0.784197 0.647313 -3.32094 0.656346 0.549182 -0.51731 + 0.729674 0.650131 -3.36422 0.41197 0.49529 -0.764832 + 0.92887 0.716168 -3.1782 0.664848 -0.0383567 -0.745993 + 0.892994 0.670479 -3.21567 0.76955 -0.160969 -0.617967 + 0.842585 0.617559 -3.24441 0.7351 0.113864 -0.668329 + 0.835219 0.606485 -3.26263 0.801096 0.461663 -0.380937 + 0.980501 0.730595 -3.13999 0.629372 -0.0288895 -0.776567 + 0.920828 0.628098 -3.16606 0.651729 0.0909913 -0.752974 + 0.881886 0.624614 -3.20543 0.722501 0.0317045 -0.690642 + 0.891832 0.577881 -3.21908 0.534798 0.638518 -0.553431 + 0.972459 0.64252 -3.12784 0.520016 0.054793 -0.852397 + 0.994589 0.583223 -3.13074 0.327934 0.629721 -0.704209 + 0.930774 0.581364 -3.17972 0.454383 0.666697 -0.590806 + 1.05871 0.662694 -3.09238 0.458811 0.203702 -0.864869 + 1.08084 0.603397 -3.09528 0.501695 0.29678 -0.812542 + 1.03412 0.56884 -3.14922 0.422113 0.632248 -0.649679 + 0.97031 0.566982 -3.19821 0.381049 0.774132 -0.505491 + 0.917456 0.547772 -3.26173 0.483719 0.717608 -0.501054 + 1.10836 0.726897 -3.03779 0.624903 0.218848 -0.749401 + 1.12758 0.661112 -3.04244 0.623997 0.248429 -0.740885 + 1.14228 0.592282 -3.05423 0.620139 0.26761 -0.737437 + 1.09371 0.52643 -3.11337 0.625206 0.325646 -0.709276 + 1.17045 0.71283 -2.98302 0.695398 0.235141 -0.679065 + 1.18938 0.64572 -2.98918 0.689498 0.263844 -0.674521 + 1.20408 0.57689 -3.00097 0.681756 0.268097 -0.680685 + 1.15514 0.515313 -3.07231 0.618157 0.259105 -0.742123 + 1.22635 0.705679 -2.92404 0.75791 0.250957 -0.602157 + 1.24529 0.638654 -2.93015 0.723852 0.298555 -0.622016 + 1.26352 0.578902 -2.93805 0.71217 0.281597 -0.643052 + 1.21596 0.512611 -3.01483 0.687582 0.257546 -0.678897 + 1.30118 0.653066 -2.85931 0.708234 0.351445 -0.612284 + 1.31942 0.593315 -2.86721 0.748489 0.29479 -0.594023 + 1.2754 0.514542 -2.95198 0.713026 0.240679 -0.658534 + 1.29227 0.447821 -2.95441 0.729493 0.204651 -0.652655 + 1.23276 0.442429 -3.02388 0.710127 0.232011 -0.664748 + 1.32933 0.706247 -2.79182 0.557873 0.252084 -0.790715 + 1.35431 0.66336 -2.79374 0.747785 0.210929 -0.629545 + 1.37088 0.599904 -2.79263 0.809278 0.248619 -0.532219 + 1.32947 0.522163 -2.88898 0.750871 0.252577 -0.610243 + 1.34634 0.455443 -2.89141 0.778821 0.172184 -0.60315 + 1.37391 0.738612 -2.76848 0.655395 0.0481836 -0.753748 + 1.39956 0.667331 -2.71382 0.82527 0.0249825 -0.564186 + 1.41613 0.603874 -2.71271 0.81195 0.247132 -0.528831 + 1.38094 0.528752 -2.81439 0.805896 0.25281 -0.535367 + 1.40063 0.465663 -2.81112 0.821897 0.181855 -0.539828 + 1.39239 0.812546 -2.72934 0.742928 0.323868 -0.585805 + 1.41427 0.75751 -2.72101 0.809959 0.0538787 -0.584006 + 1.43992 0.686233 -2.66636 0.722784 -0.0417284 -0.689813 + 1.46558 0.611347 -2.63985 0.645131 0.159636 -0.74721 + 1.43291 0.53521 -2.72537 0.820223 0.247739 -0.515616 + 1.43613 0.819446 -2.65289 0.798975 0.36091 -0.481023 + 1.45802 0.764408 -2.64456 0.784234 0.188934 -0.591 + 1.48718 0.714298 -2.63396 0.693372 0.122475 -0.710095 + 1.51284 0.639411 -2.60746 0.765854 0.0194789 -0.64272 + 1.48236 0.542768 -2.65247 0.808971 0.129818 -0.573335 + 1.40873 0.912972 -2.60628 0.716328 0.577249 -0.391992 + 1.46124 0.841065 -2.58493 0.769079 0.473773 -0.429017 + 1.50327 0.780374 -2.57541 0.775586 0.379359 -0.504532 + 1.53243 0.730259 -2.56481 0.823798 0.213562 -0.525117 + 1.55426 0.652742 -2.53995 0.866902 0.0218731 -0.497998 + 1.45178 0.922027 -2.49836 0.691849 0.611657 -0.383694 + 1.50043 0.854552 -2.50769 0.740065 0.514944 -0.432593 + 1.54246 0.793947 -2.49812 0.779228 0.437461 -0.448811 + 1.57515 0.749187 -2.48239 0.852548 0.264386 -0.450846 + 1.59698 0.67167 -2.45753 0.909424 0.0398459 -0.413958 + 1.39361 0.979989 -2.49315 0.543362 0.783952 -0.300293 + 1.48815 0.946809 -2.39809 0.641728 0.657973 -0.394026 + 1.53679 0.879339 -2.40742 0.737068 0.533261 -0.415166 + 1.57527 0.815265 -2.41484 0.776954 0.467845 -0.421265 + 1.35937 1.0365 -2.36624 0.420685 0.87693 -0.232417 + 1.43015 0.994892 -2.38437 0.473087 0.818023 -0.32715 + 1.52471 0.991998 -2.27056 0.611797 0.678336 -0.406895 + 1.56388 0.906056 -2.3267 0.727361 0.544335 -0.417906 + 1.60236 0.841891 -2.33416 0.82618 0.428335 -0.365998 + 1.27743 1.06971 -2.41596 0.600584 0.795858 -0.0768686 + 1.28157 1.06511 -2.39559 0.484029 0.874865 0.0181271 + 1.30015 1.05879 -2.37105 0.420067 0.895238 -0.148635 + 1.37522 1.05238 -2.28095 0.312883 0.896626 -0.313314 + 1.46671 1.04008 -2.25684 0.378151 0.848294 -0.370673 + 1.22658 1.11436 -2.44609 0.686137 0.724526 -0.0654051 + 1.23658 1.10612 -2.40041 0.660108 0.750974 0.0171641 + 1.24072 1.1016 -2.37999 0.668683 0.737594 0.093909 + 1.24393 1.09531 -2.36529 0.613106 0.789782 -0.0186014 + 1.2625 1.08908 -2.3407 0.503436 0.835522 -0.220125 + 1.18775 1.14912 -2.45389 0.684302 0.728927 0.0199044 + 1.19962 1.13794 -2.44374 0.660533 0.750396 0.0245554 + 1.20963 1.1297 -2.39806 0.655957 0.754313 0.0270673 + 1.2086 1.12749 -2.36263 0.659315 0.741602 0.123811 + 1.21181 1.12119 -2.34793 0.620873 0.783802 0.0130641 + 1.15943 1.1735 -2.41832 0.50957 0.85734 0.0728458 + 1.1713 1.16232 -2.40817 0.656824 0.753402 0.0311189 + 1.15925 1.17136 -2.38481 0.512867 0.857249 0.0457278 + 1.19758 1.13864 -2.37475 0.649799 0.756277 0.0762025 + 1.16163 1.16328 -2.33763 0.508381 0.823473 0.251873 + 1.13768 1.18233 -2.43142 0.129183 0.990719 0.0422811 + 1.13552 1.18105 -2.41161 0.152814 0.987582 0.0364712 + 1.13186 1.18171 -2.39315 0.173294 0.984571 -0.0242587 + 1.15061 1.17453 -2.34971 0.392002 0.873585 0.288417 + 1.12323 1.18489 -2.35805 0.117122 0.976248 0.182271 + 1.08854 1.16718 -2.28678 0.0116818 0.95891 0.283469 + 1.13451 1.168 -2.2984 0.256328 0.949696 0.179927 + 1.18562 1.14149 -2.33268 0.566389 0.816278 0.113548 + 1.07193 1.13042 -2.19791 0.0266725 0.945007 0.32596 + 1.1179 1.13115 -2.20958 0.172195 0.89986 0.400751 + 1.1585 1.1462 -2.29345 0.466686 0.831772 0.300598 + 1.20242 1.13319 -2.31351 0.395237 0.914411 -0.0874055 + 0.937486 1.13191 -2.21189 -0.332083 0.928381 0.166821 + 1.03487 1.11922 -2.16291 0.0351643 0.953752 0.298532 + 1.04583 1.10626 -2.12786 -0.0446316 0.94583 0.32158 + 1.06895 1.10064 -2.09712 -0.18693 0.960553 0.205902 + 1.10267 1.10541 -2.0876 0.00300693 0.990756 0.135622 + 1.13199 1.10347 -2.11343 0.229389 0.968709 0.0947763 + 1.14066 1.10399 -2.14793 0.244749 0.951117 0.188347 + 1.14071 1.11475 -2.17696 0.163689 0.920856 0.353879 + 1.13323 1.12325 -2.19868 0.129903 0.935574 0.328368 + 0.911044 1.11345 -2.22492 -0.963276 0.268069 0.0154602 + 0.940285 1.12247 -2.14673 -0.328392 0.894372 0.303738 + 0.951245 1.1095 -2.11167 -0.256759 0.809431 0.528107 + 0.9813 1.08014 -2.07162 -0.294401 0.784818 0.545334 + 1.00443 1.07461 -2.04084 -0.398733 0.888064 0.228809 + 0.920305 1.05709 -2.18069 -0.987307 -0.158592 0.00863486 + 0.913844 1.10391 -2.1598 -0.917789 0.344785 0.196943 + 0.924854 1.08378 -2.10833 -0.840551 0.253402 0.478814 + 0.95491 1.05443 -2.06828 -0.765272 0.297479 0.570846 + 0.931315 1.03687 -2.12927 -0.964255 -0.171283 0.202173 + 0.950425 1.01243 -2.07954 -0.927932 -0.106069 0.357339 + 0.969659 0.993571 -2.03348 -0.947 -0.0449968 0.318066 + 0.974144 1.03556 -2.02221 -0.914344 0.118798 0.387119 + 0.988982 1.05418 -2.00106 -0.745034 0.568496 0.348907 + 0.9335 0.994386 -2.14149 -0.970841 -0.132049 0.200078 + 0.952611 0.969858 -2.09181 -0.945439 -0.126386 0.300288 + 0.969799 0.949883 -2.04361 -0.950464 -0.104315 0.292807 + 0.99163 0.99924 -1.9591 -0.934978 0.102049 0.339709 + 1.00647 1.01785 -1.93794 -0.877015 0.331856 0.347444 + 0.947047 0.922664 -2.13107 -0.924332 -0.349831 0.152411 + 0.964235 0.902602 -2.08292 -0.957746 -0.130321 0.256397 + 0.991771 0.955552 -1.96923 -0.952357 -0.101618 0.287559 + 1.014 0.959053 -1.88549 -0.974349 -0.199628 0.103885 + 0.977004 0.797029 -2.08306 -0.954093 -0.100056 0.282305 + 0.986775 0.88534 -2.01142 -0.947548 -0.118233 0.29694 + 1.006 0.870142 -1.95989 -0.932876 -0.157087 0.324139 + 1.011 0.940273 -1.91776 -0.937037 -0.216011 0.274408 + 1.00511 0.628134 -2.04333 -0.896041 -0.25459 0.363722 + 1.03454 0.654822 -1.96195 -0.884102 -0.259336 0.388726 + 0.999544 0.779769 -2.01156 -0.939958 -0.13009 0.315523 + 1.02907 0.790633 -1.93678 -0.917207 -0.137907 0.373782 + 1.03466 0.865062 -1.88869 -0.939729 -0.188265 0.285423 + 1.03643 0.491839 -2.11245 -0.718326 -0.579297 0.385256 + 1.06777 0.515248 -2.0376 -0.669479 -0.593515 0.446697 + 1.09719 0.541936 -1.95623 -0.68675 -0.591894 0.421944 + 1.06407 0.665688 -1.88717 -0.849345 -0.26081 0.458903 + 1.13094 0.40575 -2.14854 -0.575993 -0.604141 0.550678 + 1.16228 0.429159 -2.07369 -0.60288 -0.671368 0.431046 + 1.19008 0.455437 -1.98781 -0.616682 -0.672129 0.409812 + 1.2211 0.481229 -1.89808 -0.663714 -0.67197 0.328541 + 1.12821 0.567733 -1.86651 -0.702856 -0.544659 0.457537 + 1.18918 0.259384 -2.20843 -0.64749 -0.532737 0.54493 + 1.21894 0.297052 -2.16027 -0.659153 -0.474784 0.583179 + 1.2501 0.32239 -2.08156 -0.736925 -0.521878 0.429634 + 1.2779 0.348663 -1.99567 -0.754168 -0.531704 0.385385 + 1.25634 0.164224 -2.23701 -0.670172 -0.628885 0.394174 + 1.29498 0.176688 -2.14659 -0.702887 -0.557584 0.441643 + 1.32614 0.201938 -2.06793 -0.75443 -0.510301 0.41283 + 1.36476 0.21381 -1.97769 -0.768286 -0.518039 0.375996 + 1.27614 0.086092 -2.34228 -0.55246 -0.772458 0.313204 + 1.31981 0.091549 -2.24473 -0.583983 -0.742856 0.327306 + 1.35845 0.104011 -2.15432 -0.634402 -0.692185 0.344113 + 1.39973 0.110487 -2.05993 -0.663337 -0.659972 0.352734 + 1.29001 0.043919 -2.45923 -0.420708 -0.874545 0.241196 + 1.33236 0.04906 -2.35634 -0.450329 -0.860929 0.236654 + 1.37603 0.054431 -2.25884 -0.47066 -0.846477 0.248911 + 1.42215 0.052258 -2.15928 -0.512005 -0.821614 0.250602 + 1.46343 0.05873 -2.06489 -0.505815 -0.81703 0.276792 + 1.24586 0.0383 -2.5529 -0.40197 -0.885474 0.233143 + 1.32447 0.025344 -2.47006 -0.270454 -0.946848 0.174167 + 1.36682 0.030486 -2.36717 -0.197779 -0.972139 0.125815 + 1.4169 0.033245 -2.26275 -0.202524 -0.973683 0.104526 + 1.27791 0.019255 -2.57732 -0.259785 -0.950946 0.167969 + 1.33261 0.023419 -2.47613 0.196222 -0.980274 -0.0236396 + 1.37851 0.030783 -2.37168 0.264077 -0.960865 -0.0836729 + 1.42859 0.03363 -2.26721 0.22163 -0.96943 -0.105291 + 1.28605 0.01733 -2.58338 0.196201 -0.980105 -0.0300053 + 1.31177 0.039233 -2.61412 0.542821 -0.818054 -0.190087 + 1.35501 0.043626 -2.51033 0.539472 -0.821016 -0.186823 + 1.4009 0.050985 -2.40587 0.516667 -0.832304 -0.200813 + 1.24117 0.011804 -2.68801 0.196778 -0.978806 -0.0567286 + 1.26688 0.033708 -2.71875 0.524446 -0.823346 -0.216925 + 1.35264 0.084103 -2.67244 0.679295 -0.68754 -0.256607 + 1.39589 0.088496 -2.56864 0.6508 -0.720002 -0.240951 + 1.43552 0.089799 -2.4631 0.614271 -0.747486 -0.252853 + 1.19412 0.010571 -2.78867 0.200901 -0.974925 -0.0957104 + 1.21938 0.0345 -2.82152 0.489494 -0.828939 -0.27066 + 1.30804 0.080062 -2.77604 0.657698 -0.697242 -0.285109 + 1.3159 0.131596 -2.85429 0.762123 -0.507885 -0.401523 + 1.3605 0.135637 -2.75069 0.78718 -0.513423 -0.34168 + 1.14672 0.019074 -2.8854 0.48808 -0.823107 -0.290298 + 1.17197 0.043004 -2.91825 0.467872 -0.839717 -0.27563 + 1.26054 0.08085 -2.8788 0.651794 -0.680302 -0.335192 + 1.2627 0.132812 -2.9466 0.784661 -0.43852 -0.438187 + 1.11726 0.04216 -3.01339 0.50675 -0.825445 -0.248687 + 1.20361 0.082894 -2.98534 0.615799 -0.705182 -0.35144 + 1.20578 0.134944 -3.05309 0.750552 -0.411881 -0.516745 + 1.23257 0.198224 -3.0411 0.832212 -0.134002 -0.538022 + 1.28577 0.197006 -2.94879 0.82367 -0.270193 -0.498562 + 1.06385 0.038414 -3.1255 0.546693 -0.778636 -0.307982 + 1.14891 0.082051 -3.08048 0.672507 -0.628995 -0.389999 + 1.14272 0.132298 -3.13651 0.762568 -0.319812 -0.562326 + 1.17071 0.195576 -3.11291 0.767707 -0.146829 -0.623753 + 1.00439 0.03507 -3.21691 0.560201 -0.758229 -0.333561 + 1.08511 0.074678 -3.15911 0.657542 -0.599452 -0.456395 + 1.07893 0.12484 -3.21519 0.7338 -0.31935 -0.599628 + 1.10766 0.192935 -3.19634 0.772763 -0.050199 -0.632706 + 0.949043 0.030887 -3.29986 0.549324 -0.724851 -0.415733 + 1.02565 0.071333 -3.25052 0.724519 -0.497494 -0.477045 + 1.0167 0.11971 -3.28931 0.77394 -0.199875 -0.600888 + 1.04185 0.188535 -3.26612 0.744788 -0.0415938 -0.666004 + 0.887218 0.033712 -3.37595 0.504073 -0.713261 -0.487 + 0.966535 0.072591 -3.32869 0.687346 -0.472205 -0.551886 + 0.957584 0.120966 -3.36748 0.753851 -0.176111 -0.633003 + 0.979623 0.183405 -3.34023 0.76658 0.0446406 -0.640595 + 0.820874 0.04374 -3.44972 0.452365 -0.720547 -0.525526 + 0.90471 0.07541 -3.40478 0.655355 -0.46554 -0.594797 + 0.891333 0.117574 -3.44041 0.717991 -0.186819 -0.670513 + 0.916497 0.168037 -3.41381 0.74106 0.043587 -0.670023 + 0.749319 0.051972 -3.51798 0.401379 -0.722141 -0.56339 + 0.834662 0.079343 -3.47739 0.5872 -0.508025 -0.630164 + 0.821285 0.121507 -3.51302 0.665907 -0.201872 -0.718203 + 0.850245 0.164647 -3.48674 0.712563 0.0526355 -0.699631 + 0.674804 0.068439 -3.5843 0.32359 -0.758158 -0.566114 + 0.763107 0.087575 -3.54565 0.533237 -0.526078 -0.662495 + 0.747396 0.126027 -3.58025 0.629351 -0.217549 -0.746049 + 0.779473 0.166045 -3.55116 0.67338 0.0539229 -0.737328 + 0.587938 0.081027 -3.64191 0.273497 -0.725732 -0.631278 + 0.682155 0.090917 -3.60984 0.430722 -0.612291 -0.663007 + 0.666445 0.129282 -3.64449 0.534465 -0.343079 -0.772427 + 0.705585 0.170568 -3.6184 0.661444 0.00572989 -0.749972 + 0.582969 0.059404 -3.62245 0.328086 -0.719442 -0.612178 + 0.495604 0.097005 -3.69178 0.195581 -0.695335 -0.691561 + 0.595289 0.103505 -3.66744 0.321267 -0.631731 -0.705481 + 0.584202 0.141342 -3.69718 0.3921 -0.431442 -0.812475 + 0.636835 0.183147 -3.68218 0.595842 -0.0951547 -0.797445 + 0.490635 0.07538 -3.67233 0.31935 -0.443692 -0.837349 + 0.392792 0.111121 -3.72923 0.153326 -0.651705 -0.742814 + 0.499956 0.118466 -3.71255 0.219973 -0.623153 -0.750528 + 0.488869 0.156304 -3.74229 0.245794 -0.494677 -0.833595 + 0.554592 0.195121 -3.73492 0.445141 -0.198265 -0.873236 + 0.389211 0.068004 -3.70975 0.0901472 -0.756543 -0.647701 + 0.389172 0.088973 -3.71367 0.206662 -0.414812 -0.886127 + 0.285338 0.121152 -3.7546 0.0858579 -0.616796 -0.782426 + 0.397144 0.132582 -3.75 0.172042 -0.581549 -0.795111 + 0.389831 0.172658 -3.77302 0.177267 -0.471326 -0.863961 + 0.280005 0.078806 -3.72246 -0.0160651 -0.903159 -0.429006 + 0.281718 0.099004 -3.73904 0.0738285 -0.616244 -0.784087 + 0.174334 0.128605 -3.76831 0.00536578 -0.681278 -0.732005 + 0.290328 0.147155 -3.77605 0.0913476 -0.556444 -0.825848 + 0.283016 0.187238 -3.79907 0.0716524 -0.397154 -0.914951 + 0.27918 0.080809 -3.67453 -0.0947214 -0.983147 0.156365 + 0.168313 0.087526 -3.72896 -0.0809119 -0.887337 -0.453968 + 0.170026 0.107717 -3.74554 -0.0386115 -0.700158 -0.712943 + 0.059143 0.132298 -3.76991 -0.00293313 -0.707647 -0.70656 + 0.179324 0.15461 -3.78975 0.0395974 -0.518969 -0.853875 + 0.279441 0.105189 -3.59316 -0.115536 -0.91874 0.377582 + 0.174324 0.110026 -3.60193 -0.0329214 -0.934406 0.354685 + 0.174064 0.085731 -3.68326 -0.0660142 -0.990614 0.119694 + 0.054835 0.097839 -3.71703 -0.0334079 -0.971145 -0.236139 + 0.054835 0.111412 -3.74713 -0.00920017 -0.833823 -0.551956 + 0.261284 0.173084 -3.47735 -0.107452 -0.844954 0.523934 + 0.165895 0.160955 -3.49994 0.00289706 -0.861474 0.507794 + 0.060586 0.098942 -3.61633 0.0324895 -0.968829 0.24559 + 0.060586 0.096136 -3.67128 -0.0153833 -0.999194 0.0370713 + -0.054834 0.097839 -3.71703 0.0538067 -0.973959 -0.220247 + 0.143003 0.259629 -3.35765 0.0364686 -0.779498 0.625342 + 0.052156 0.233569 -3.37552 0.0421687 -0.802373 0.595331 + 0.052156 0.149869 -3.51435 0.0120491 -0.876828 0.480654 + -0.052156 0.149869 -3.51435 -0.0193578 -0.8719 0.489301 + -0.060586 0.098947 -3.61634 0.000757084 -0.962699 0.270575 + 0.13916 0.343427 -3.2622 0.0232743 -0.636446 0.77097 + 0.048313 0.317362 -3.28005 0.0248013 -0.66934 0.742542 + -0.052156 0.233564 -3.37551 -0.0603506 -0.81052 0.582593 + 0.048313 0.39542 -3.22765 -0.00128654 -0.283842 0.95887 + -0.048316 0.39542 -3.22765 -0.00859111 -0.291272 0.956602 + -0.048316 0.317362 -3.28005 -0.0297717 -0.664647 0.746564 + -0.143003 0.259629 -3.35765 -0.0297728 -0.78688 0.616388 + 0.159773 0.610328 -3.23008 -0.150103 0.081427 0.985312 + 0.048793 0.596376 -3.23252 -0.016907 0.0980659 0.995036 + -0.048793 0.596376 -3.23252 0.0219971 0.0903335 0.995669 + -0.159296 0.409373 -3.22522 0.0840981 -0.254132 0.963506 + -0.139163 0.343427 -3.2622 -0.00319524 -0.623154 0.782092 + 0.131025 0.959799 -3.27998 -0.229988 0.129924 0.964482 + 0.048793 0.941243 -3.29465 -0.0959883 0.14968 0.984064 + -0.048793 0.941243 -3.29465 0.106681 0.161356 0.981113 + -0.131025 0.959799 -3.27998 0.224561 0.140295 0.964308 + -0.159772 0.610328 -3.23008 0.142823 0.073393 0.987023 + 0.153945 1.1952 -3.31131 -0.174267 0.175552 0.968923 + 0.114166 1.17597 -3.31341 -0.154999 0.130972 0.979194 + 0.031933 1.15733 -3.32813 -0.0904492 0.105169 0.990332 + -0.031937 1.15732 -3.32811 0.09557 0.0980074 0.990586 + 0.190822 1.18046 -3.29858 -0.316954 0.180388 0.931128 + 0.160899 1.2621 -3.32539 -0.0991105 0.23849 0.966074 + 0.11631 1.26212 -3.32542 -0.0824543 0.192453 0.977836 + 0.076531 1.24281 -3.32756 -0.131371 0.153666 0.979351 + 0.197776 1.24736 -3.31266 -0.249331 0.293441 0.92289 + 0.177853 1.30956 -3.33679 -0.049485 0.280975 0.958439 + 0.153964 1.31145 -3.33627 0.0298063 0.229923 0.972752 + 0.109375 1.31139 -3.33635 -0.0939241 0.170043 0.98095 + 0.062433 1.31188 -3.34561 -0.19475 0.221675 0.955475 + 0.203355 1.25836 -3.31571 -0.26872 0.299404 0.915504 + 0.183432 1.32056 -3.33984 -0.0685056 0.292341 0.953857 + 0.170708 1.37497 -3.35408 0.0321088 0.35861 0.932935 + 0.146819 1.37676 -3.35359 0.0127079 0.474305 0.880269 + 0.100607 1.34927 -3.34237 -0.101084 0.327527 0.939419 + 0.280732 1.22028 -3.26996 -0.408561 0.234757 0.882024 + 0.222911 1.28587 -3.31456 -0.402411 0.211562 0.890678 + 0.211256 1.33662 -3.33106 -0.454471 0.24275 0.857046 + 0.186303 1.34668 -3.34808 -0.15653 0.291956 0.943536 + 0.308595 1.21723 -3.25627 -0.428268 0.279597 0.859309 + 0.26534 1.28981 -3.29397 -0.43334 0.192196 0.880498 + 0.253685 1.34056 -3.31048 -0.50602 0.109472 0.855546 + 0.214499 1.40225 -3.35213 -0.47451 0.399363 0.784443 + 0.189546 1.41231 -3.36916 -0.0726872 0.392406 0.916916 + 0.335804 1.2802 -3.26094 -0.416463 0.221702 0.881707 + 0.293203 1.28675 -3.28029 -0.400339 0.192104 0.896005 + 0.296609 1.33174 -3.28701 -0.43812 0.0485444 0.897605 + 0.258705 1.38294 -3.30408 -0.547454 0.241454 0.801245 + 0.33921 1.32519 -3.26767 -0.329269 0.164307 0.929831 + 0.301628 1.37404 -3.28067 -0.244839 0.289297 0.925398 + 0.294955 1.40256 -3.30208 -0.0987777 0.800415 0.591252 + 0.268466 1.40904 -3.31769 -0.178262 0.829259 0.529672 + 0.22426 1.42835 -3.36575 -0.0703497 0.858586 0.50782 + 0.336362 1.37408 -3.28175 -0.125644 0.498092 0.857973 + 0.329689 1.40261 -3.30316 0.0753393 0.797063 0.599178 + 0.291361 1.41354 -3.36028 -0.0218483 0.986369 0.163091 + 0.264872 1.42001 -3.37589 0.223335 0.970896 0.086503 + 0.351495 1.41275 -3.32132 -0.141962 0.868005 0.475829 + 0.313167 1.42367 -3.37844 -0.32941 0.93576 0.125867 + 0.29845 1.41438 -3.42715 -0.0514491 0.977812 -0.203066 + 1.17383 1.1383 -2.28255 0.194613 0.970105 0.14499 + 1.22424 1.13141 -2.28583 0.413817 0.904967 -0.0989409 + 1.22861 1.11298 -2.32871 0.528261 0.821847 -0.213325 + 1.19565 1.13651 -2.25487 0.109195 0.982264 0.152424 + 1.2357 1.12492 -2.25118 0.541182 0.808211 0.2322 + 1.2456 1.11119 -2.3016 0.564608 0.807396 -0.171257 + 1.27949 1.08729 -2.3136 0.475525 0.854761 -0.207989 + 1.20313 1.12802 -2.23314 0.239668 0.884039 0.401291 + 1.2362 1.1012 -2.2137 0.137806 0.951148 0.276272 + 1.25706 1.10469 -2.26695 0.495192 0.86841 -0.0254913 + 1.27976 1.09644 -2.26906 0.372953 0.917345 -0.139225 + 1.316 1.07477 -2.28571 0.385327 0.893984 -0.228726 + 1.20362 1.1043 -2.19567 0.238304 0.889581 0.389688 + 1.24091 1.09246 -2.16535 -0.071895 0.977773 0.196955 + 1.26129 1.10663 -2.2153 0.0715909 0.995352 0.0644136 + 1.28399 1.0983 -2.21747 0.327265 0.944682 -0.0217718 + 1.31627 1.08384 -2.24124 0.347565 0.927761 -0.135862 + 1.20357 1.09346 -2.1667 0.126448 0.954904 0.268644 + 1.24051 1.08368 -2.11575 -0.126674 0.989325 0.0720449 + 1.26601 1.0978 -2.167 -0.0723418 0.989714 0.12342 + 1.29085 1.09788 -2.18675 0.18714 0.982137 -0.019651 + 1.20317 1.08477 -2.11704 0.127915 0.98607 0.106317 + 1.22956 1.08229 -2.07395 -0.133262 0.984262 -0.116057 + 1.28135 1.09502 -2.12479 -0.137151 0.990519 0.00790676 + 1.3062 1.0951 -2.14453 0.0604684 0.995696 -0.0702398 + 1.32313 1.08342 -2.21051 -0.0672484 0.997689 0.0097306 + 1.1945 1.08434 -2.08249 0.164639 0.986353 -0.00122404 + 1.20388 1.08947 -2.01999 0.0502951 0.903703 -0.425196 + 1.27041 1.09363 -2.08299 -0.27621 0.955386 -0.104625 + 1.28695 1.09954 -2.07262 -0.17438 0.976454 -0.127 + 1.3294 1.10126 -2.095 -0.0517155 0.987727 -0.147377 + 1.16882 1.09152 -2.02854 0.0959799 0.994324 -0.0458997 + 1.22043 1.09538 -2.00962 -0.138517 0.979629 -0.145398 + 1.29729 1.10744 -2.02971 -0.135188 0.984822 -0.108855 + 1.33975 1.10917 -2.0521 -0.0840485 0.98392 -0.157597 + 1.1395 1.09346 -2.0027 0.0166381 0.997789 0.0643516 + 1.21825 1.09746 -1.98082 -0.117738 0.992968 0.0123341 + 1.29512 1.10951 -2.0009 -0.169237 0.97886 -0.114858 + 1.33864 1.11785 -1.99854 -0.118338 0.982547 -0.143519 + 1.38558 1.11758 -2.01527 -0.0404582 0.978936 -0.200118 + 1.0773 1.09187 -1.97934 -0.139717 0.980491 0.138261 + 1.08885 1.08668 -1.91054 -0.0543864 0.997953 -0.0336387 + 1.15105 1.08818 -1.93396 -0.0322639 0.997527 0.0624434 + 1.04358 1.08718 -1.98882 -0.335124 0.920743 0.199811 + 1.02814 1.06684 -1.94899 -0.656876 0.724309 0.2095 + 1.04704 1.09328 -1.87537 -0.0568165 0.973459 -0.221696 + 1.14875 1.08447 -1.81252 0.0166636 0.99893 0.0431429 + 1.01312 1.00698 -1.8999 -0.865874 0.464506 0.185732 + 1.03479 1.05596 -1.91095 -0.999783 -0.00282248 0.0206327 + 1.02131 1.08018 -1.88689 -0.783526 0.443773 -0.434916 + 0.983915 1.11468 -1.79325 -0.102163 0.983633 -0.148422 + 1.10695 1.09107 -1.77734 0.193433 0.980445 0.036208 + 1.00757 0.9871 -1.87747 -0.999527 0.0279341 0.0128563 + 1.01754 1.01435 -1.84748 -0.980148 0.0821281 -0.180456 + 1.00406 1.03856 -1.82341 -0.881742 -0.332062 -0.33506 + 0.958184 1.10158 -1.80475 -0.844795 0.338915 -0.414075 + 0.969238 1.11357 -1.74933 -0.426329 0.859398 0.282274 + 1.01144 0.973013 -1.82287 -0.992641 -0.100177 0.0680311 + 1.01199 0.994478 -1.82505 -0.999822 -0.0137948 0.0128437 + 1.01533 0.98769 -1.79489 -0.983281 -0.180019 -0.0274183 + 0.996084 1.02283 -1.77676 -0.852529 -0.450039 -0.265817 + 0.950205 1.08585 -1.75811 -0.997753 0.00627019 0.0667073 + 1.01787 0.944963 -1.83089 -0.948448 -0.308782 0.0714167 + 1.01477 0.966219 -1.79271 -0.977988 -0.167108 0.124954 + 1.03766 0.883841 -1.85642 -0.936011 -0.29024 0.199107 + 1.05344 0.863585 -1.81634 -0.869877 -0.456995 0.185658 + 1.03365 0.924709 -1.79081 -0.918624 -0.378818 0.11237 + 1.02065 0.95854 -1.7576 -0.920918 -0.382938 -0.0725823 + 1.05773 0.785549 -1.86557 -0.899163 -0.216533 0.380289 + 1.09745 0.79464 -1.78372 -0.871335 -0.271412 0.408793 + 1.08484 0.863034 -1.74498 -0.811353 -0.472962 0.34353 + 1.10162 0.703111 -1.81219 -0.838781 -0.265915 0.475117 + 1.14134 0.7122 -1.73033 -0.842879 -0.285457 0.456146 + 1.19672 0.711416 -1.63137 -0.832189 -0.330822 0.444992 + 1.12885 0.794089 -1.71237 -0.849674 -0.358839 0.386378 + 1.16576 0.605239 -1.79147 -0.747742 -0.443804 0.493882 + 1.19759 0.632303 -1.70194 -0.770217 -0.466625 0.434772 + 1.25297 0.631515 -1.60298 -0.718975 -0.531517 0.447844 + 1.24 0.709635 -1.55049 -0.78085 -0.247533 0.573585 + 1.2434 0.501544 -1.78166 -0.723235 -0.581448 0.372624 + 1.27523 0.528608 -1.69214 -0.720071 -0.51528 0.464741 + 1.30463 0.57125 -1.6108 -0.679335 -0.545572 0.490771 + 1.35822 0.581842 -1.52854 -0.656583 -0.539662 0.526938 + 1.30656 0.642111 -1.52073 -0.660908 -0.507948 0.55244 + 1.3082 0.368428 -1.9001 -0.776223 -0.545595 0.315918 + 1.3305 0.388747 -1.78369 -0.756266 -0.57022 0.320797 + 1.36581 0.406463 -1.68898 -0.730104 -0.523775 0.438872 + 1.39521 0.449102 -1.60763 -0.723074 -0.48696 0.489932 + 1.39505 0.233576 -1.88213 -0.767191 -0.520094 0.375393 + 1.4351 0.243462 -1.79225 -0.74423 -0.554587 0.37223 + 1.47042 0.261177 -1.69754 -0.73133 -0.564573 0.38264 + 1.51087 0.270411 -1.60753 -0.737571 -0.529534 0.419025 + 1.48207 0.129597 -1.87343 -0.683504 -0.633734 0.362221 + 1.52211 0.139485 -1.78356 -0.684904 -0.628296 0.368986 + 1.56892 0.142187 -1.69044 -0.68261 -0.632699 0.365698 + 1.43834 0.12236 -1.9697 -0.68387 -0.636318 0.356961 + 1.54867 0.072714 -1.86511 -0.541253 -0.786384 0.297733 + 1.60296 0.071117 -1.76894 -0.548631 -0.785206 0.287151 + 1.64978 0.073826 -1.67583 -0.594865 -0.743055 0.306601 + 1.60938 0.151428 -1.60044 -0.69843 -0.62922 0.340994 + 1.50495 0.06539 -1.96142 -0.529744 -0.799468 0.283236 + 1.55544 0.042441 -1.96028 -0.128213 -0.985428 0.111771 + 1.60319 0.045063 -1.86662 -0.144472 -0.985996 0.0833079 + 1.65748 0.043559 -1.77041 -0.154326 -0.987293 0.0378994 + 1.70933 0.036278 -1.6716 -0.220039 -0.974594 0.0418279 + 1.51392 0.035693 -2.06379 -0.118869 -0.987129 0.106985 + 1.59725 0.050773 -1.9709 0.28735 -0.952473 -0.101115 + 1.645 0.053394 -1.87724 0.255373 -0.957105 -0.136877 + 1.69304 0.049387 -1.7757 0.224058 -0.959964 -0.168126 + 1.74489 0.042194 -1.67685 0.200715 -0.952112 -0.230643 + 1.46302 0.031072 -2.16318 -0.151168 -0.984575 0.0880925 + 1.5377 0.03982 -2.07013 0.281672 -0.956024 -0.0817188 + 1.5584 0.054865 -2.10739 0.448973 -0.873183 -0.189669 + 1.61795 0.065818 -2.00816 0.470416 -0.858163 -0.205585 + 1.67244 0.068455 -1.90453 0.409726 -0.884014 -0.225042 + 1.4868 0.035107 -2.16957 0.295092 -0.946694 -0.129194 + 1.50602 0.052899 -2.20699 0.438454 -0.869963 -0.225661 + 1.58162 0.083373 -2.16217 0.614934 -0.74329 -0.263392 + 1.62722 0.088345 -2.05878 0.60824 -0.742768 -0.279892 + 1.68171 0.091068 -1.9551 0.594195 -0.735021 -0.326614 + 1.44781 0.051335 -2.30468 0.449054 -0.862328 -0.233966 + 1.52924 0.081407 -2.26176 0.526251 -0.802257 -0.281857 + 1.5361 0.121257 -2.34579 0.669314 -0.663609 -0.334129 + 1.5781 0.118879 -2.24587 0.790392 -0.519879 -0.324048 + 1.6237 0.123939 -2.14243 0.808366 -0.48473 -0.334038 + 1.48243 0.090151 -2.36191 0.53415 -0.794824 -0.287989 + 1.48929 0.129995 -2.44592 0.631937 -0.699259 -0.334204 + 1.51576 0.167229 -2.46501 0.774431 -0.511087 -0.37289 + 1.55775 0.164852 -2.3651 0.858598 -0.397825 -0.323334 + 1.59089 0.16895 -2.26439 0.878137 -0.345949 -0.330448 + 1.44616 0.135233 -2.545 0.720464 -0.622236 -0.306194 + 1.47405 0.177061 -2.55984 0.774775 -0.505775 -0.379361 + 1.461 0.248108 -2.6577 0.826048 -0.357328 -0.435846 + 1.50271 0.238276 -2.56287 0.84771 -0.346865 -0.401339 + 1.5414 0.229123 -2.47201 0.854706 -0.369007 -0.365118 + 1.40652 0.13393 -2.65054 0.744357 -0.583335 -0.325043 + 1.43091 0.182214 -2.65897 0.840434 -0.388022 -0.378298 + 1.41123 0.246872 -2.74796 0.8547 -0.287013 -0.432564 + 1.44686 0.33257 -2.73139 0.84968 -0.199013 -0.4883 + 1.49747 0.340717 -2.6479 0.883143 -0.175278 -0.435127 + 1.38632 0.185582 -2.7542 0.834678 -0.375493 -0.402887 + 1.36663 0.250236 -2.84319 0.825653 -0.28402 -0.487473 + 1.39708 0.331328 -2.82164 0.857538 -0.116913 -0.500959 + 1.37354 0.397061 -2.86469 0.823809 0.0155686 -0.566653 + 1.42783 0.407363 -2.78434 0.844701 -0.0024908 -0.535233 + 1.34029 0.187375 -2.85431 0.865257 -0.252638 -0.433018 + 1.31287 0.247542 -2.92752 0.841424 -0.178422 -0.510069 + 1.33473 0.319051 -2.90858 0.822832 -0.0951803 -0.560258 + 1.31119 0.384784 -2.95163 0.773205 0.0210807 -0.633806 + 1.25835 0.25717 -3.02199 0.787327 -0.172088 -0.592032 + 1.28097 0.316272 -2.99296 0.821111 0.0322024 -0.569859 + 1.25167 0.379392 -3.02109 0.757663 0.120298 -0.641464 + 1.19801 0.257929 -3.09751 0.775382 -0.0560858 -0.628996 + 1.22401 0.308672 -3.0596 0.761525 0.0677958 -0.64458 + 1.19471 0.371712 -3.08779 0.701771 0.120874 -0.702074 + 1.13615 0.255278 -3.16932 0.724929 -0.0724772 -0.685 + 1.16367 0.309433 -3.13512 0.744582 0.136117 -0.653506 + 1.13457 0.383945 -3.14298 0.699053 0.226511 -0.678246 + 1.17194 0.445132 -3.08136 0.662967 0.274658 -0.696446 + 1.07432 0.25742 -3.23383 0.73092 0.0408514 -0.68124 + 1.10446 0.320445 -3.19199 0.70577 0.158678 -0.690442 + 1.07535 0.395043 -3.1998 0.681112 0.252963 -0.687093 + 1.11179 0.457364 -3.13654 0.668815 0.333525 -0.664415 + 1.00851 0.253025 -3.30362 0.718451 0.0519048 -0.693639 + 1.04262 0.322675 -3.25645 0.706391 0.17828 -0.685003 + 1.01994 0.404621 -3.25099 0.681459 0.277771 -0.677094 + 1.05221 0.499857 -3.17234 0.645736 0.378265 -0.66328 + 0.944428 0.249624 -3.37032 0.732425 0.115271 -0.671019 + 0.980638 0.325053 -3.31757 0.697502 0.190228 -0.690872 + 0.957952 0.406999 -3.31211 0.678046 0.278316 -0.68029 + 0.996791 0.50944 -3.22354 0.632031 0.444915 -0.634498 + 0.881302 0.234337 -3.44385 0.706798 0.126796 -0.695959 + 0.916559 0.321651 -3.38428 0.696719 0.206907 -0.686856 + 0.899258 0.399787 -3.37301 0.672912 0.279736 -0.68479 + 0.943938 0.490236 -3.28708 0.646297 0.409179 -0.644106 + 0.876258 0.541468 -3.31861 0.473963 0.683883 -0.554674 + 0.817145 0.232554 -3.50676 0.68057 0.157737 -0.715502 + 0.853666 0.326434 -3.44337 0.669238 0.237034 -0.704227 + 0.836365 0.404575 -3.43211 0.633331 0.301495 -0.712736 + 0.885244 0.483021 -3.34798 0.629417 0.379515 -0.678087 + 0.746372 0.233952 -3.57118 0.669883 0.156931 -0.725692 + 0.789509 0.324651 -3.50627 0.662242 0.263051 -0.701598 + 0.769752 0.39896 -3.49018 0.629927 0.332175 -0.702034 + 0.826932 0.46533 -3.40914 0.598605 0.39314 -0.697935 + 0.817946 0.523864 -3.37972 0.648699 0.355459 -0.672933 + 0.680662 0.232892 -3.63234 0.679381 0.154297 -0.71738 + 0.724944 0.323717 -3.56626 0.646391 0.269001 -0.714014 + 0.705187 0.397941 -3.55022 0.552641 0.451557 -0.700488 + 0.760318 0.459718 -3.46722 0.525491 0.431257 -0.733401 + 0.763341 0.514662 -3.43259 0.527047 0.380368 -0.759962 + 0.611912 0.245471 -3.69613 0.608378 0.150566 -0.779235 + 0.659234 0.322565 -3.62746 0.632226 0.313554 -0.708501 + 0.633228 0.392851 -3.6094 0.524499 0.509453 -0.682172 + 0.686246 0.450249 -3.51362 0.447668 0.54437 -0.709404 + 0.689269 0.50519 -3.47898 0.451928 0.465408 -0.761023 + 0.53144 0.25276 -3.74876 0.483301 0.0969158 -0.870073 + 0.592167 0.301591 -3.69274 0.568567 0.318986 -0.758274 + 0.566161 0.371871 -3.67466 0.523248 0.454411 -0.720918 + 0.614287 0.445155 -3.57279 0.526912 0.546538 -0.650891 + 0.608234 0.503811 -3.53379 0.556263 0.458323 -0.69319 + 0.44283 0.266892 -3.78923 0.322154 0.0675238 -0.944276 + 0.511694 0.308967 -3.74531 0.474516 0.321334 -0.819499 + 0.494656 0.378376 -3.71793 0.459761 0.460824 -0.759119 + 0.541237 0.456002 -3.63058 0.527577 0.509415 -0.679823 + 0.535184 0.51466 -3.59158 0.537571 0.473167 -0.697947 + 0.465982 0.209252 -3.7754 0.3021 -0.258712 -0.917498 + 0.355308 0.284864 -3.81136 0.19792 0.0967771 -0.975429 + 0.431191 0.33672 -3.77258 0.354235 0.346198 -0.868714 + 0.414152 0.406132 -3.74521 0.36191 0.489554 -0.79332 + 0.469732 0.4625 -3.67384 0.430857 0.527184 -0.73242 + 0.366945 0.225613 -3.80614 0.181632 -0.242402 -0.953022 + 0.252434 0.307248 -3.82213 0.0817809 0.081911 -0.993279 + 0.343669 0.354777 -3.79466 0.231617 0.325292 -0.916809 + 0.328062 0.418079 -3.7713 0.241082 0.47718 -0.845091 + 0.389347 0.471242 -3.70698 0.340012 0.549087 -0.763475 + 0.26407 0.248002 -3.81692 0.0603427 -0.160659 -0.985164 + 0.147688 0.318304 -3.82488 -0.00684758 0.108863 -0.994033 + 0.248549 0.359507 -3.81045 0.124471 0.288709 -0.949291 + 0.232942 0.422812 -3.7871 0.176342 0.414317 -0.892885 + 0.303257 0.483193 -3.73308 0.279063 0.525115 -0.803977 + 0.176903 0.195293 -3.80722 0.0407228 -0.336927 -0.94065 + 0.157958 0.255972 -3.82512 0.0188621 -0.12006 -0.992587 + 0.046452 0.314111 -3.81882 -0.0291123 0.0995672 -0.994605 + 0.143803 0.370477 -3.81325 -0.00485322 0.230677 -0.973018 + 0.145096 0.431693 -3.79748 0.047996 0.336661 -0.940402 + 0.056722 0.196941 -3.80987 -0.00373321 -0.291163 -0.956666 + 0.056722 0.251864 -3.81901 -0.0298785 -0.0846121 -0.995966 + -0.046453 0.314111 -3.81882 0.0302387 0.0984484 -0.994683 + 0.046452 0.391079 -3.80313 -0.0262006 0.226635 -0.973627 + 0.047745 0.452294 -3.78736 0.0110155 0.228217 -0.973548 + 0.059143 0.156342 -3.79236 0.00529499 -0.546063 -0.837727 + -0.056722 0.196941 -3.80987 -0.00851193 -0.281138 -0.95963 + -0.056722 0.251864 -3.81901 0.0163078 -0.0953417 -0.995311 + -0.147688 0.318304 -3.82488 0.00542591 0.107405 -0.994201 + -0.046453 0.391079 -3.80313 0.0270779 0.227553 -0.973389 + -0.059144 0.132308 -3.76993 0.00680413 -0.70964 -0.704532 + -0.059144 0.156351 -3.79237 -0.00182354 -0.543587 -0.839351 + -0.176904 0.195293 -3.80722 -0.0322481 -0.331945 -0.942747 + -0.157958 0.255972 -3.82512 -0.00591289 -0.134356 -0.990915 + -0.054834 0.111412 -3.74713 0.0307269 -0.824498 -0.56503 + -0.174334 0.128615 -3.76833 -0.00914269 -0.683778 -0.729633 + -0.179325 0.154625 -3.78978 -0.0428574 -0.516867 -0.854992 + -0.290328 0.147155 -3.77605 -0.094679 -0.559306 -0.823537 + -0.283017 0.187238 -3.79907 -0.114784 -0.36001 -0.925861 + -0.168312 0.087521 -3.72895 0.0496754 -0.898873 -0.435385 + -0.170024 0.107717 -3.74554 0.0118117 -0.687459 -0.726127 + -0.281723 0.098999 -3.73903 -0.0584176 -0.603617 -0.795131 + -0.285337 0.121152 -3.7546 -0.091184 -0.614501 -0.783629 + -0.060586 0.096136 -3.67128 0.0466666 -0.998847 0.0113056 + -0.174064 0.085736 -3.68326 0.048937 -0.993376 0.103972 + -0.27918 0.080809 -3.67453 0.0927764 -0.98278 0.159801 + -0.28001 0.078715 -3.7225 0.0430148 -0.907461 -0.417929 + -0.174324 0.110026 -3.60193 0.0166475 -0.929162 0.369299 + -0.279441 0.105189 -3.59316 0.111749 -0.920389 0.374694 + -0.388386 0.070091 -3.66177 0.149617 -0.978069 0.144895 + -0.389216 0.067999 -3.70974 -0.117379 -0.768087 -0.629496 + -0.165895 0.16095 -3.49994 0.00834939 -0.856492 0.516093 + -0.261283 0.173084 -3.47735 0.0987227 -0.837787 0.536998 + -0.373358 0.097524 -3.56988 0.202337 -0.906663 0.370164 + -0.238391 0.271757 -3.33506 0.0595084 -0.770229 0.634984 + -0.320792 0.288955 -3.30525 0.151164 -0.739532 0.655928 + -0.3552 0.165506 -3.45403 0.181601 -0.824866 0.535366 + -0.433629 0.173555 -3.41737 0.311265 -0.773587 0.551976 + -0.458605 0.088544 -3.53053 0.331167 -0.862598 0.382431 + -0.230969 0.366491 -3.24114 0.0995276 -0.594179 0.798151 + -0.31337 0.383687 -3.21133 0.141697 -0.58093 0.801525 + -0.381253 0.419616 -3.17396 0.228272 -0.520139 0.823011 + -0.399221 0.297007 -3.26859 0.174258 -0.706702 0.685717 + -0.251102 0.432437 -3.20417 0.250327 -0.243591 0.937016 + -0.316227 0.474584 -3.16837 0.38403 -0.20214 0.900922 + -0.384109 0.510512 -3.131 0.406972 -0.225809 0.88509 + -0.241066 0.63853 -3.21133 0.377262 0.0614409 0.924066 + -0.306191 0.680596 -3.17559 0.514185 0.0625139 0.855398 + -0.370374 0.709814 -3.139 0.578864 0.0521354 0.813756 + -0.44018 0.567976 -3.08593 0.515034 -0.19669 0.834298 + -0.212319 0.988087 -3.26118 0.324308 0.127323 0.937344 + -0.282673 1.00032 -3.23376 0.461718 0.114725 0.879576 + -0.346856 1.02945 -3.19722 0.511971 0.130633 0.849011 + -0.413558 1.03519 -3.15817 0.595967 0.142712 0.790226 + -0.426445 0.767278 -3.09393 0.659974 0.0706526 0.747959 + -0.153945 1.1952 -3.31132 0.174574 0.17545 0.968887 + -0.190816 1.18047 -3.29859 0.316914 0.180531 0.931114 + -0.26117 1.19278 -3.27112 0.410115 0.201215 0.889561 + -0.344489 1.20163 -3.23224 0.477331 0.195364 0.856731 + -0.114169 1.17588 -3.31345 0.14803 0.126719 0.980831 + -0.11631 1.26212 -3.32543 0.0820971 0.192741 0.977809 + -0.160899 1.2621 -3.32539 0.0995642 0.238302 0.966074 + -0.19777 1.24737 -3.31267 0.249493 0.293113 0.922951 + -0.031937 1.24305 -3.33199 0.0637637 0.156528 0.985613 + -0.076534 1.2428 -3.32755 0.115328 0.181314 0.976639 + -0.062427 1.31189 -3.34562 0.140711 0.170437 0.97527 + -0.109376 1.31139 -3.33635 0.0787367 0.190525 0.97852 + 0.031933 1.24315 -3.33196 -0.0516016 0.145085 0.988073 + -0.017829 1.31214 -3.35006 0.0988941 0.340303 0.935101 + -0.053659 1.34977 -3.35164 0.270054 0.404265 0.873865 + -0.100608 1.34927 -3.34237 0.0763008 0.317099 0.945318 + 0.017835 1.31214 -3.35006 -0.0417941 0.393612 0.918326 + -0.017829 1.37905 -3.39174 0.160566 0.585753 0.794426 + -0.02584 1.40636 -3.41205 -0.00505257 0.861277 0.50811 + -0.061669 1.37709 -3.37195 0.172867 0.766493 0.618551 + -0.088954 1.37642 -3.3624 0.206618 0.720412 0.662054 + 0.017835 1.37904 -3.39173 -0.164955 0.59249 0.788508 + -0.013819 1.41482 -3.4315 -0.0556168 0.987237 0.149232 + -0.055307 1.40668 -3.44081 -0.117956 0.987172 -0.107599 + -0.067327 1.39831 -3.4213 -0.0216331 0.915 0.402873 + -0.094612 1.39773 -3.41171 0.27398 0.870181 0.409537 + 0.053665 1.34977 -3.35164 -0.480395 0.253956 0.83948 + 0.061669 1.37709 -3.37195 -0.172497 0.766738 0.618351 + 0.02584 1.40636 -3.41205 0.0097644 0.844262 0.535842 + 0.088951 1.37642 -3.3624 -0.206806 0.720557 0.661837 + 0.067327 1.39831 -3.4213 0.000186073 0.906139 0.42298 + 0.055319 1.40667 -3.44079 0.0784006 0.992009 -0.0988484 + 0.013832 1.41481 -3.43149 0.0804617 0.993241 0.083655 + 0.135162 1.40392 -3.37363 -0.171998 0.757538 0.629724 + 0.094609 1.39773 -3.41171 -0.26881 0.865612 0.422443 + 0.111364 1.41296 -3.42808 -0.363813 0.900301 0.238952 + 0.151917 1.41924 -3.38996 -0.307755 0.812301 0.495433 + 0.156277 1.43764 -3.42784 -0.285621 0.938718 0.19295 + 0.15292 1.43718 -3.44704 -0.206158 0.926448 -0.314948 + 0.108007 1.4125 -3.44729 -0.321138 0.911293 -0.257713 + 0.173579 1.40108 -3.36231 -0.254519 0.382566 0.88818 + 0.187502 1.42533 -3.37352 -0.0976133 0.863239 0.495267 + 0.184397 1.42224 -3.38296 -0.0686834 0.997477 0.0179669 + 0.188757 1.44073 -3.42079 -0.0162508 0.987682 0.155629 + 0.203469 1.43657 -3.38037 -0.0886693 0.716164 0.692276 + 0.244081 1.42822 -3.39051 0.285648 0.935309 -0.208812 + 0.240976 1.42512 -3.39995 0.171851 0.985119 -0.00276594 + 0.203469 1.43657 -3.38037 -0.273932 -0.186205 -0.943551 + 0.273714 1.41652 -3.42925 0.202362 0.965394 -0.164512 + 0.251959 1.4259 -3.4201 0.374003 0.924182 0.0775175 + 0.289238 1.40217 -3.48199 0.140981 0.891409 -0.430714 + 0.248195 1.41737 -3.46932 0.190556 0.89119 -0.411666 + 0.22644 1.42675 -3.46018 0.170376 0.876864 -0.449534 + 0.19974 1.44151 -3.44094 -0.121399 0.958384 -0.258385 + 0.190844 1.42436 -3.46183 -0.0614585 0.718917 -0.692374 + 0.313974 1.40012 -3.47984 0.0742122 0.891002 -0.447893 + 0.330946 1.38218 -3.50197 0.182925 0.670616 -0.718897 + 0.288755 1.38388 -3.50732 0.0512786 0.653434 -0.755245 + 0.247711 1.399 -3.4947 -0.0481689 0.666744 -0.743729 + 0.217544 1.4096 -3.48106 -0.204916 0.6054 -0.769091 + 0.346548 1.40927 -3.45969 0.00868479 0.878648 -0.477391 + 0.36352 1.39142 -3.48178 0.247026 0.695938 -0.674276 + 0.336869 1.3615 -3.51435 0.221369 0.391135 -0.893314 + 0.294678 1.3632 -3.5197 0.0467424 0.372107 -0.927012 + 0.25492 1.35791 -3.51993 -0.146598 0.337282 -0.929919 + 0.316487 1.42576 -3.40806 -0.338962 0.928199 -0.153462 + 0.364585 1.42065 -3.44061 -0.0226793 0.85014 -0.526069 + 0.389512 1.40048 -3.46206 0.323625 0.674508 -0.663556 + 0.375559 1.35026 -3.50649 0.38076 0.350827 -0.855536 + 0.385872 1.44511 -3.40436 0.212699 0.963748 -0.161084 + 0.410798 1.42493 -3.42582 0.28736 0.811221 -0.509259 + 0.401551 1.3594 -3.48672 0.374962 0.47191 -0.797938 + 0.38448 1.29631 -3.51504 0.269127 0.0632948 -0.961022 + 0.382552 1.44302 -3.37474 -0.0412554 0.987495 0.152158 + 0.431014 1.42252 -3.41704 0.349737 0.802369 -0.48362 + 0.420168 1.36919 -3.47308 0.324627 0.555358 -0.765634 + 0.428869 1.32363 -3.49155 0.49583 0.268433 -0.825891 + 0.410252 1.31375 -3.50525 0.346747 0.223354 -0.910977 + 0.437661 1.43887 -3.38337 0.217246 0.955316 -0.200436 + 0.457182 1.39153 -3.43356 0.356417 0.694627 -0.624868 + 0.440384 1.36678 -3.4643 0.431359 0.501611 -0.749877 + 0.44041 1.31497 -3.48615 0.462112 0.198961 -0.864214 + 0.428342 1.24897 -3.49684 0.418722 -0.0477808 -0.906857 + 0.459366 1.35568 -3.45866 0.298453 0.473778 -0.828529 + 0.459392 1.30386 -3.48052 0.447459 0.0877752 -0.889986 + 0.439884 1.24031 -3.49145 0.443513 -0.11501 -0.888858 + 0.45177 1.11419 -3.4558 0.628216 -0.197709 -0.7525 + 0.402571 1.23153 -3.50663 0.36982 -0.111089 -0.922438 + 0.481817 1.26982 -3.45996 0.35386 -0.164402 -0.920736 + 0.462308 1.20627 -3.47089 0.659232 -0.158976 -0.734942 + 0.500979 1.14196 -3.4007 0.548185 -0.309852 -0.776843 + 0.490441 1.04989 -3.38562 0.673376 -0.0727248 -0.735715 + 0.54169 1.23037 -3.43524 0.316975 -0.420198 -0.850271 + 0.525924 1.10772 -3.37419 0.350719 -0.259242 -0.899883 + 0.523947 1.00931 -3.36355 0.410235 0.0254605 -0.911624 + 0.483309 0.9457 -3.40716 0.38816 0.0450427 -0.920491 + 0.552783 0.998588 -3.35717 0.311503 0.0379845 -0.949486 + 0.554949 0.895571 -3.37554 0.353821 0.217668 -0.909632 + 0.516815 0.905132 -3.3851 0.440698 0.168369 -0.881724 + 0.478449 0.842041 -3.41942 0.343439 0.347188 -0.872645 + 0.453938 0.960764 -3.40646 0.18714 -0.143293 -0.971826 + 0.549585 0.807847 -3.4032 0.369654 0.20877 -0.905412 + 0.51145 0.817408 -3.41276 0.415847 0.319928 -0.851303 + 0.452226 0.777477 -3.47419 0.218744 0.143885 -0.965116 + 0.449078 0.857014 -3.41876 0.182208 0.338376 -0.923202 + 0.562027 0.731222 -3.41288 0.517741 0.338327 -0.785799 + 0.485227 0.752929 -3.46748 0.511071 0.425893 -0.746607 + 0.429639 0.78645 -3.47633 0.315643 0.499265 -0.80691 + 0.426491 0.865992 -3.42091 0.311218 0.263877 -0.912969 + 0.415375 0.969923 -3.43112 0.442703 -0.16193 -0.881925 + 0.62641 0.7248 -3.37895 0.434195 0.284204 -0.854812 + 0.57491 0.667283 -3.44113 0.539399 0.479631 -0.6921 + 0.498111 0.688905 -3.49578 0.533051 0.479051 -0.6974 + 0.419446 0.698937 -3.53976 0.36682 0.526179 -0.767189 + 0.401327 0.760889 -3.50386 0.311133 0.534954 -0.785507 + 0.6518 0.659947 -3.39483 0.434262 0.444228 -0.783632 + 0.608552 0.602889 -3.4668 0.524961 0.515402 -0.677331 + 0.526324 0.622523 -3.52641 0.530705 0.514742 -0.673344 + 0.447658 0.632468 -3.57043 0.410001 0.521637 -0.748194 + 0.685442 0.595548 -3.42048 0.398138 0.516228 -0.758284 + 0.700774 0.548617 -3.4434 0.37111 0.523403 -0.767024 + 0.619739 0.547326 -3.49816 0.532904 0.471288 -0.702781 + 0.53751 0.56696 -3.55777 0.541562 0.467465 -0.698704 + 0.769571 0.623474 -3.37065 0.414621 0.619307 -0.666744 + 0.784903 0.576636 -3.39353 0.514389 0.398737 -0.759218 + 0.824094 0.620744 -3.32732 0.689605 0.667044 -0.281952 + 0.839508 0.585837 -3.34066 0.880302 0.234367 -0.412481 + 0.850633 0.571579 -3.27597 0.691401 0.624303 -0.363607 + 0.202863 1.37775 -3.4871 -0.246237 0.390109 -0.887233 + 0.18102 1.37515 -3.48979 0.284148 0.480033 -0.829957 + 0.169001 1.42167 -3.46457 0.0410484 0.663436 -0.747106 + 0.135567 1.41214 -3.47266 -0.214545 0.785278 -0.580783 + 0.224753 1.36843 -3.50635 -0.415741 0.338208 -0.84426 + 0.23124 1.30733 -3.52613 -0.410462 0.0793803 -0.908416 + 0.20935 1.31665 -3.50687 -0.216845 0.232952 -0.948004 + 0.186503 1.33698 -3.50528 0.399705 0.319828 -0.859038 + 0.265468 1.30618 -3.52993 -0.0489671 0.0972229 -0.994057 + 0.240546 1.23784 -3.52937 -0.139411 -0.0449392 -0.989214 + 0.205617 1.25386 -3.52612 0.0793408 0.0959397 -0.99222 + 0.18277 1.27427 -3.52447 0.278017 0.213043 -0.936653 + 0.305226 1.31147 -3.52969 0.0808413 0.105789 -0.991097 + 0.313998 1.23121 -3.52948 0.11317 -0.0763665 -0.990636 + 0.274773 1.23669 -3.53318 -0.00492439 -0.0564707 -0.998392 + 0.34579 1.30755 -3.5229 0.210507 0.0991929 -0.972547 + 0.354562 1.22729 -3.52269 0.246926 -0.0850897 -0.965291 + 0.328106 1.12278 -3.50867 0.171585 -0.230828 -0.957746 + 0.288882 1.12826 -3.51238 0.130659 -0.194822 -0.972097 + 0.271159 1.09806 -3.51045 0.223639 -0.178084 -0.958265 + 0.413208 1.12335 -3.48046 0.413676 -0.219259 -0.883627 + 0.365199 1.1191 -3.49651 0.305335 -0.240667 -0.921331 + 0.340683 0.972804 -3.45911 0.350587 -0.134777 -0.926782 + 0.321531 0.967345 -3.46626 0.266288 -0.123788 -0.955912 + 0.303809 0.937137 -3.46433 0.208122 -0.0170007 -0.977955 + 0.377776 0.969135 -3.44696 0.340925 -0.160459 -0.926295 + 0.388892 0.865204 -3.43674 0.435932 0.24891 -0.864874 + 0.36058 0.839644 -3.46427 0.336231 0.355347 -0.872168 + 0.341428 0.834182 -3.47141 0.253304 0.3868 -0.886692 + 0.324119 0.755671 -3.53462 0.313321 0.54734 -0.776047 + 0.291475 0.778169 -3.53319 0.408725 0.542398 -0.733994 + 0.308783 0.856679 -3.46998 0.308499 0.272868 -0.911247 + 0.273883 0.94721 -3.48018 0.347105 -0.0545972 -0.936236 + 0.342238 0.693626 -3.57056 0.278259 0.543769 -0.791762 + 0.276321 0.788484 -3.53466 0.0526014 0.542389 -0.838479 + 0.278858 0.866753 -3.48582 0.432091 0.310496 -0.846694 + 0.263704 0.877155 -3.48724 0.0778299 0.264969 -0.961111 + 0.258453 0.951896 -3.4843 0.000965101 -0.07946 -0.996838 + 0.366268 0.635173 -3.60391 0.295469 0.53815 -0.789362 + 0.283918 0.635585 -3.63123 0.275975 0.569554 -0.774239 + 0.259889 0.694043 -3.59788 0.204008 0.580512 -0.78828 + 0.459741 0.576667 -3.60318 0.422799 0.504339 -0.752917 + 0.37835 0.579463 -3.63662 0.319651 0.54525 -0.774936 + 0.295794 0.585203 -3.66637 0.295661 0.573611 -0.763908 + 0.19882 0.638771 -3.65915 0.19567 0.613711 -0.7649 + 0.457415 0.524364 -3.63699 0.426486 0.501637 -0.752642 + 0.37703 0.533192 -3.67008 0.33887 0.534265 -0.774421 + 0.294473 0.538852 -3.69988 0.299305 0.539182 -0.787209 + 0.210359 0.547039 -3.72446 0.243693 0.54762 -0.800454 + 0.210696 0.588303 -3.69433 0.234628 0.586332 -0.775348 + 0.219143 0.491294 -3.75771 0.226493 0.465643 -0.855499 + 0.125856 0.550614 -3.74385 0.164237 0.519415 -0.83859 + 0.126193 0.591881 -3.71373 0.161139 0.615806 -0.771244 + 0.121754 0.635303 -3.67714 0.13727 0.643985 -0.752622 + 0.177596 0.693464 -3.61488 0.148772 0.64176 -0.752337 + 0.131297 0.500173 -3.76809 0.116093 0.402432 -0.908059 + 0.042305 0.554897 -3.75507 0.0635508 0.528745 -0.846398 + 0.042305 0.592503 -3.72521 0.0562201 0.633567 -0.771642 + 0.037866 0.635925 -3.68862 0.0399128 0.675958 -0.735859 + 0.10053 0.689996 -3.63287 0.0719798 0.673846 -0.735357 + 0.047745 0.504458 -3.77931 0.0729337 0.299081 -0.951436 + -0.042299 0.554897 -3.75507 -0.067407 0.531543 -0.844345 + -0.042299 0.592503 -3.72521 -0.0608131 0.630536 -0.773774 + -0.037866 0.635925 -3.68862 -0.0506536 0.684472 -0.727278 + 0.037866 0.679163 -3.64331 -0.00267406 0.708749 -0.705456 + -0.047746 0.452294 -3.78736 0.0304382 0.197922 -0.979745 + -0.047746 0.504458 -3.77931 -0.0424475 0.326367 -0.94429 + -0.125851 0.550614 -3.74385 -0.160109 0.522816 -0.837274 + -0.126187 0.591881 -3.71373 -0.157705 0.613615 -0.773696 + -0.121754 0.635303 -3.67714 -0.12676 0.65031 -0.749018 + -0.145096 0.431693 -3.79748 -0.0623385 0.323363 -0.94422 + -0.131297 0.500178 -3.7681 -0.145146 0.428246 -0.891929 + -0.219143 0.491294 -3.75771 -0.209934 0.478385 -0.852687 + -0.210358 0.547039 -3.72446 -0.244548 0.548124 -0.799848 + -0.210694 0.588303 -3.69433 -0.23583 0.585459 -0.775643 + -0.143803 0.370477 -3.81325 0.00251031 0.232517 -0.972589 + -0.248561 0.359502 -3.81044 -0.121637 0.291314 -0.948863 + -0.232942 0.422812 -3.7871 -0.158052 0.39551 -0.90476 + -0.252446 0.307248 -3.82213 -0.0774734 0.0785539 -0.993895 + -0.35532 0.284859 -3.81135 -0.199613 0.0952325 -0.975236 + -0.343681 0.354772 -3.79465 -0.23448 0.327842 -0.915171 + -0.328062 0.418079 -3.7713 -0.254814 0.466885 -0.846811 + -0.264071 0.247997 -3.81691 -0.0745682 -0.171886 -0.98229 + -0.366946 0.225613 -3.80614 -0.132483 -0.290398 -0.947691 + -0.46598 0.209252 -3.7754 -0.303117 -0.259466 -0.91695 + -0.442819 0.266897 -3.78924 -0.331122 0.0754069 -0.94057 + -0.43118 0.336725 -3.77259 -0.359 0.341411 -0.868653 + -0.389832 0.172658 -3.77302 -0.164427 -0.462954 -0.870998 + -0.488867 0.156299 -3.74228 -0.250614 -0.490366 -0.834706 + -0.5842 0.141337 -3.69717 -0.391415 -0.430963 -0.813059 + -0.55459 0.195116 -3.73491 -0.440772 -0.204233 -0.874076 + -0.531429 0.25276 -3.74876 -0.478224 0.101717 -0.872327 + -0.397143 0.132582 -3.75 -0.165876 -0.58462 -0.794169 + -0.499958 0.118466 -3.71255 -0.223329 -0.626162 -0.747024 + -0.595291 0.103505 -3.66744 -0.313826 -0.635406 -0.70553 + -0.682147 0.090917 -3.60984 -0.426149 -0.606739 -0.671018 + -0.666436 0.129377 -3.64445 -0.515866 -0.36769 -0.773748 + -0.392791 0.111121 -3.72923 -0.149574 -0.648977 -0.74596 + -0.495606 0.097005 -3.69178 -0.205233 -0.691502 -0.692607 + -0.58794 0.081027 -3.64191 -0.270917 -0.723488 -0.634956 + -0.674795 0.068439 -3.5843 -0.302017 -0.766649 -0.5666 + -0.389177 0.088968 -3.71366 -0.237191 -0.396388 -0.886914 + -0.490638 0.07538 -3.67233 -0.347933 -0.472663 -0.80965 + -0.582971 0.059404 -3.62245 -0.295983 -0.729356 -0.616794 + -0.656429 0.045461 -3.56171 -0.300589 -0.794469 -0.527698 + -0.74931 0.051972 -3.51798 -0.404311 -0.725625 -0.556778 + -0.490677 0.054324 -3.66846 -0.271277 -0.764678 -0.584531 + -0.56356 0.039286 -3.60281 -0.0151808 -0.956663 -0.290801 + -0.637018 0.02535 -3.54207 -0.0474612 -0.975787 -0.213512 + -0.704689 0.015375 -3.47239 0.0497116 -0.991183 -0.12282 + -0.730944 0.029087 -3.49534 -0.262881 -0.859505 -0.438343 + -0.473633 0.061026 -3.62246 0.236519 -0.960869 0.144188 + -0.546516 0.045994 -3.55683 0.304335 -0.934442 0.184926 + -0.614262 0.039505 -3.49159 0.342227 -0.909834 0.234698 + -0.681933 0.029531 -3.42191 0.368968 -0.893535 0.255847 + -0.772297 0.004586 -3.40171 0.0500294 -0.996834 -0.0617984 + -0.528557 0.085339 -3.47517 0.405513 -0.811049 0.421613 + -0.596303 0.078852 -3.40994 0.494828 -0.754489 0.431152 + -0.652092 0.083551 -3.34128 0.521612 -0.720876 0.456354 + -0.711505 0.081249 -3.27089 0.568741 -0.688788 0.44956 + -0.741345 0.027227 -3.35152 0.404557 -0.867117 0.290587 + -0.503581 0.170259 -3.36206 0.382646 -0.723755 0.574248 + -0.56616 0.187379 -3.30871 0.483675 -0.646985 0.589464 + -0.62195 0.191992 -3.2401 0.566958 -0.581271 0.583681 + -0.67323 0.214898 -3.17478 0.622908 -0.5263 0.578787 + -0.468642 0.323794 -3.23039 0.287651 -0.643127 0.709679 + -0.531221 0.340828 -3.17709 0.323101 -0.596325 0.734848 + -0.582788 0.389107 -3.12352 0.470962 -0.508368 0.720942 + -0.634068 0.412018 -3.0582 0.618481 -0.435186 0.654289 + -0.450673 0.446399 -3.13575 0.234921 -0.518637 0.822087 + -0.505423 0.495836 -3.08818 0.369441 -0.453015 0.811351 + -0.55699 0.544116 -3.0346 0.409437 -0.430524 0.80437 + -0.60776 0.585761 -2.98813 0.557687 -0.34303 0.755854 + -0.682178 0.444467 -2.9922 0.711149 -0.381336 0.590635 + -0.49493 0.617412 -3.03835 0.563081 -0.203271 0.801013 + -0.542085 0.679823 -2.98485 0.613253 -0.170892 0.771178 + -0.592855 0.721468 -2.93838 0.391013 -0.158552 0.906626 + -0.650256 0.756918 -2.92238 0.560709 -0.0199546 0.827772 + -0.655871 0.618124 -2.92219 0.749676 -0.176908 0.637722 + -0.483712 0.796392 -3.04775 0.710443 0.0649358 0.700752 + -0.530867 0.858801 -2.99425 0.728672 0.117238 0.674754 + -0.584755 0.88381 -2.95217 0.515703 0.130637 0.846749 + -0.470825 1.0643 -3.11199 0.622835 0.17802 0.76183 + -0.531515 1.06107 -3.06439 0.644572 0.214255 0.733909 + -0.585403 1.08609 -3.02232 0.67448 0.232207 0.700826 + -0.636956 1.07292 -2.96692 0.67064 0.202604 0.713578 + -0.642155 0.919266 -2.93618 0.538513 0.108757 0.835569 + -0.411191 1.20737 -3.19319 0.503364 0.263393 0.822951 + -0.478377 1.20727 -3.14921 0.561896 0.270668 0.781673 + -0.539068 1.20412 -3.10156 0.564598 0.326131 0.7582 + -0.571991 1.21055 -3.0797 0.641148 0.346885 0.684544 + -0.596152 1.19696 -3.04635 0.701851 0.271422 0.658586 + -0.380483 1.26394 -3.22597 0.349973 0.242226 0.904901 + -0.405022 1.26374 -3.22323 0.282333 0.308878 0.90823 + -0.441117 1.27996 -3.20793 0.54275 0.227806 0.80841 + -0.447286 1.2236 -3.1779 0.531465 0.351648 0.770641 + -0.508162 1.25605 -3.14551 0.52243 0.305436 0.7961 + -0.324758 1.21402 -3.24652 0.480054 0.237997 0.844337 + -0.360752 1.27625 -3.24029 0.609766 0.256482 0.749935 + -0.393174 1.33562 -3.23593 0.412858 0.166265 0.895491 + -0.417713 1.33543 -3.23319 0.36587 -0.0340581 0.930042 + -0.448258 1.31784 -3.20993 0.587047 0.0656499 0.806886 + -0.308602 1.21724 -3.25628 0.396627 0.337141 0.853828 + -0.351967 1.277 -3.25119 0.613052 0.290892 0.73454 + -0.374757 1.3333 -3.24891 0.66002 0.269898 0.701091 + -0.401247 1.40643 -3.25577 0.458557 0.565264 0.685712 + -0.421983 1.37743 -3.22175 0.479854 0.342175 0.807872 + -0.280751 1.22028 -3.26996 0.415013 0.246145 0.875886 + -0.29321 1.28676 -3.2803 0.400311 0.192049 0.896029 + -0.335811 1.28021 -3.26095 0.416642 0.221769 0.881605 + -0.365972 1.33396 -3.25985 0.570043 0.250602 0.782464 + -0.38283 1.40402 -3.26879 0.617982 0.481989 0.621115 + -0.22293 1.28596 -3.31451 0.403117 0.211752 0.890313 + -0.265359 1.28981 -3.29397 0.432818 0.192407 0.880709 + -0.296601 1.33175 -3.28702 0.389387 0.0914541 0.916523 + -0.339203 1.3252 -3.26767 0.356037 0.195876 0.913712 + -0.363124 1.38293 -3.27388 0.434251 0.348162 0.830788 + -0.203349 1.25836 -3.31571 0.268914 0.296926 0.916253 + -0.21125 1.33662 -3.33106 0.472873 0.215991 0.854248 + -0.253679 1.34056 -3.31048 0.454215 0.0415636 0.889922 + -0.301621 1.37405 -3.28068 0.184177 0.216919 0.958658 + -0.336355 1.37418 -3.28171 0.216154 0.405705 0.888077 + -0.177853 1.30966 -3.33677 0.046587 0.281948 0.958298 + -0.183432 1.32058 -3.33987 0.184337 0.273368 0.944081 + -0.186302 1.34668 -3.34808 0.163969 0.306378 0.937682 + -0.214493 1.40225 -3.35213 0.483943 0.417706 0.768974 + -0.258698 1.38294 -3.30408 0.492748 0.276341 0.825127 + -0.153965 1.31145 -3.33627 -0.0179711 0.23833 0.971018 + -0.170708 1.37498 -3.3541 -0.0879593 0.279533 0.956098 + -0.173578 1.40108 -3.36231 -0.00961449 0.393126 0.919434 + -0.189545 1.41231 -3.36916 0.0731095 0.393161 0.916558 + -0.224264 1.42835 -3.36575 0.0706971 0.86016 0.505101 + -0.146819 1.37676 -3.35359 0.0449542 0.416268 0.90813 + -0.187495 1.4252 -3.37349 0.259943 0.850018 0.458148 + -0.203462 1.43643 -3.38034 0.0906212 0.718171 0.689941 + -0.135165 1.40392 -3.37363 0.262243 0.744137 0.614401 + -0.184397 1.42224 -3.38296 0.271134 0.927153 0.258599 + -0.240976 1.42512 -3.39995 -0.0953237 0.995206 0.0218627 + -0.244074 1.42809 -3.39048 -0.282114 0.937571 -0.203402 + -0.203462 1.43643 -3.38034 0.273906 -0.186256 -0.943549 + -0.111356 1.41296 -3.42808 0.411951 0.891038 0.190648 + -0.15191 1.41924 -3.38996 0.294832 0.849487 0.437546 + -0.188757 1.44073 -3.42079 0.00273671 0.9709 0.239468 + -0.059856 1.40067 -3.4512 -0.0651882 0.889861 -0.451551 + -0.075108 1.39564 -3.46168 0.0534032 0.927157 -0.370848 + -0.094483 1.39846 -3.46257 0.263931 0.905424 -0.332488 + -0.108024 1.41251 -3.4473 0.594 0.795571 -0.119289 + -0.152937 1.43718 -3.44704 0.134764 0.951098 -0.277942 + -0.15627 1.43764 -3.42784 0.245363 0.960705 0.129784 + -0.199714 1.44152 -3.44096 -0.0491463 0.962796 -0.265722 + -0.190848 1.42427 -3.46188 0.0699882 0.706934 -0.703808 + -0.226414 1.42676 -3.46019 -0.169941 0.876752 -0.449919 + -0.251933 1.42591 -3.42012 -0.191869 0.97744 -0.0883005 + -0.169 1.42167 -3.46457 -0.0414682 0.663814 -0.746748 + -0.202867 1.37775 -3.4871 0.281507 0.355621 -0.891228 + -0.224757 1.36843 -3.50635 0.411895 0.33284 -0.848269 + -0.217548 1.4096 -3.48106 0.16487 0.63056 -0.758428 + -0.248204 1.41737 -3.46932 -0.190634 0.891346 -0.411292 + -0.135584 1.41214 -3.47267 0.214519 0.78425 -0.58218 + -0.151647 1.39662 -3.49018 -0.174491 0.673595 -0.718208 + -0.181019 1.37515 -3.48979 -0.284144 0.480028 -0.829961 + -0.186503 1.33698 -3.50528 -0.399625 0.319892 -0.859051 + -0.209365 1.31665 -3.50687 0.237464 0.274236 -0.931882 + -0.122043 1.39809 -3.48794 0.148184 0.822446 -0.549203 + -0.126074 1.37867 -3.50889 -0.012152 0.668185 -0.743896 + -0.153831 1.37137 -3.51385 -0.335538 0.546428 -0.767353 + -0.159315 1.33329 -3.52929 -0.386848 0.284674 -0.877103 + -0.099131 1.38335 -3.5078 0.0769065 0.841667 -0.534492 + -0.117655 1.38251 -3.50654 -0.114319 0.666873 -0.73635 + -0.08848 1.33753 -3.53403 0.096666 0.317675 -0.943259 + -0.128258 1.35342 -3.53255 -0.0913116 0.443083 -0.891818 + -0.135059 1.31346 -3.53994 -0.170567 0.144479 -0.974696 + -0.079756 1.38052 -3.5069 0.187132 0.841228 -0.507263 + -0.094743 1.36776 -3.5264 -0.316799 0.300163 -0.899745 + -0.080061 1.34137 -3.53168 0.0987366 0.286026 -0.953121 + -0.058754 1.33893 -3.52826 0.372046 0.284184 -0.883641 + -0.095281 1.29757 -3.54142 0.078685 0.123629 -0.989204 + -0.046942 1.38944 -3.47895 0.106689 0.861233 -0.496885 + -0.040622 1.37433 -3.49498 0.332874 0.638963 -0.693485 + -0.073436 1.36542 -3.52293 0.299095 0.53609 -0.789398 + -0.03169 1.39448 -3.46848 -0.0312237 0.779153 -0.626056 + -0.020389 1.38216 -3.47973 0.176764 0.613621 -0.769561 + -0.022016 1.35661 -3.49828 0.457628 0.376069 -0.805698 + -0.04225 1.34878 -3.51353 0.457271 0.395466 -0.796561 + -0.018368 1.40455 -3.46031 -0.0775444 0.795788 -0.60059 + -0.007067 1.39222 -3.47157 0.0127303 0.600312 -0.799664 + -0.007067 1.36636 -3.48576 0.180249 0.415998 -0.891322 + -0.013819 1.41047 -3.44996 -0.0705546 0.930499 -0.359435 + 0.013832 1.41055 -3.4499 0.05415 0.915858 -0.397834 + 0.007074 1.39222 -3.47157 -0.0157734 0.626372 -0.779365 + 0.01834 1.40455 -3.46031 -0.0100483 0.803799 -0.594816 + 0.031661 1.39457 -3.46843 0.0321566 0.7794 -0.625701 + 0.020396 1.38225 -3.47968 -0.176175 0.613781 -0.769568 + 0.007074 1.36644 -3.48571 -0.179221 0.416617 -0.891241 + 0.059827 1.40067 -3.4512 0.0313504 0.880414 -0.473169 + 0.046942 1.38944 -3.47895 -0.105918 0.860726 -0.497928 + 0.040618 1.37425 -3.49503 -0.335451 0.641835 -0.68958 + 0.022024 1.35669 -3.49822 -0.457355 0.376553 -0.805626 + 0.006906 1.32209 -3.4975 -0.282331 0.204947 -0.937169 + 0.075108 1.39564 -3.46168 -0.086145 0.896469 -0.434653 + 0.079756 1.38052 -3.5069 -0.187833 0.840961 -0.507448 + 0.073432 1.36533 -3.52298 -0.288449 0.539421 -0.791089 + 0.042246 1.34869 -3.51357 -0.496431 0.365892 -0.787197 + 0.094483 1.39846 -3.46257 -0.231166 0.863868 -0.447543 + 0.099131 1.38335 -3.5078 -0.0774568 0.841973 -0.53393 + 0.094713 1.36778 -3.52642 0.316134 0.300896 -0.899734 + 0.080031 1.34138 -3.53171 -0.0996003 0.274027 -0.956551 + 0.05875 1.33893 -3.52826 -0.37021 0.273795 -0.887683 + 0.122043 1.39809 -3.48794 -0.155638 0.822449 -0.547133 + 0.117625 1.38252 -3.50657 0.115323 0.666777 -0.736281 + 0.088466 1.33752 -3.53402 -0.0944428 0.320119 -0.942658 + 0.066479 1.28183 -3.53956 -0.298008 0.0248699 -0.954239 + 0.051653 1.3072 -3.5327 -0.435792 0.115722 -0.892577 + 0.151647 1.39662 -3.49018 0.176984 0.67318 -0.717987 + 0.12606 1.37867 -3.50889 0.0129282 0.667218 -0.744751 + 0.128244 1.35342 -3.53255 0.0910695 0.443035 -0.891867 + 0.135067 1.31345 -3.53993 0.159501 0.111153 -0.98092 + 0.095289 1.29747 -3.54145 -0.0440092 0.106649 -0.993322 + 0.153831 1.37137 -3.51385 0.335495 0.546419 -0.767378 + 0.159315 1.33329 -3.52929 0.386712 0.284775 -0.87713 + 0.158522 1.25435 -3.53517 0.258226 0.00560321 -0.966068 + 0.122837 1.23369 -3.54737 0.1603 -0.0281909 -0.986666 + 0.094027 1.21796 -3.54554 -0.197356 -0.128487 -0.971875 + 0.2026 1.15117 -3.50946 -0.0385232 -0.237621 -0.970594 + 0.17446 1.14901 -3.5117 0.261492 -0.223895 -0.938879 + 0.138775 1.12834 -3.52391 0.281318 -0.20583 -0.93728 + 0.101669 1.11634 -3.52693 -0.122127 -0.208053 -0.970463 + 0.049246 1.23504 -3.52671 -0.460089 -0.109814 -0.881056 + 0.237529 1.13524 -3.51266 -0.300422 -0.19243 -0.934193 + 0.199765 0.994883 -3.45615 -0.287079 -0.149053 -0.946239 + 0.171624 0.99271 -3.45839 0.4724 -0.128666 -0.871942 + 0.153737 0.971674 -3.47695 0.424746 -0.0277147 -0.904888 + 0.116631 0.959679 -3.47998 0.100339 -0.0814759 -0.991612 + 0.255729 1.10274 -3.51457 -0.0779485 -0.151425 -0.985391 + 0.224304 0.9899 -3.47912 -0.551881 -0.114408 -0.826038 + 0.234171 0.879942 -3.47827 -0.562222 0.116394 -0.818755 + 0.209632 0.884925 -3.4553 -0.123649 0.201072 -0.971741 + 0.188623 0.8582 -3.47441 0.319617 0.414404 -0.852123 + 0.242504 0.9574 -3.48103 -0.169874 -0.0526683 -0.984057 + 0.247755 0.882659 -3.48397 -0.282803 0.165282 -0.94483 + 0.262738 0.785681 -3.529 -0.288017 0.565391 -0.772903 + 0.241729 0.758958 -3.54812 -0.00934317 0.620757 -0.783948 + 0.170736 0.837166 -3.49298 0.137954 0.507563 -0.850499 + 0.159436 0.758378 -3.56511 0.111522 0.648325 -0.753152 + 0.116505 0.772062 -3.55781 0.0292675 0.639227 -0.768461 + 0.127805 0.850848 -3.48568 -0.00138549 0.334279 -0.942473 + 0.085191 0.749427 -3.57601 -0.010711 0.681014 -0.732192 + 0.078727 0.845574 -3.49134 0.111025 0.389887 -0.914145 + 0.067553 0.954492 -3.48559 -0.0841475 -0.0805331 -0.993194 + 0.022527 0.738598 -3.58645 -0.0021121 0.70788 -0.706329 + 0.022527 0.824989 -3.49509 -0.205911 0.446642 -0.870696 + 0.047413 0.822939 -3.50954 -0.213885 0.473741 -0.854297 + 0.035048 0.945606 -3.4772 -0.352676 0.0103365 -0.935688 + 0.056888 1.13333 -3.50816 -0.321801 -0.170372 -0.931352 + -0.037866 0.679168 -3.64332 -0.0184305 0.697304 -0.716538 + -0.022528 0.738598 -3.58645 0.0101019 0.698287 -0.715747 + -0.022528 0.824989 -3.49509 0.22356 0.465964 -0.856095 + -0.010165 0.947661 -3.46276 0.244268 0.00352737 -0.969701 + 0.010163 0.947656 -3.46275 -0.235267 0.0157254 -0.971803 + -0.100529 0.689996 -3.63287 -0.061335 0.66172 -0.747238 + -0.085191 0.749427 -3.57601 -0.00416693 0.672755 -0.739853 + -0.047413 0.822939 -3.50954 0.152378 0.551159 -0.820368 + -0.03505 0.945606 -3.4772 0.345375 -0.00167197 -0.938463 + -0.198824 0.638771 -3.65915 -0.209035 0.627992 -0.74962 + -0.177599 0.693464 -3.61488 -0.164666 0.632744 -0.756651 + -0.159444 0.758378 -3.56511 -0.108944 0.645719 -0.755763 + -0.116506 0.772062 -3.55781 -0.029263 0.639229 -0.768459 + -0.078728 0.845574 -3.49134 -0.110972 0.389815 -0.914182 + -0.283922 0.635585 -3.63123 -0.261182 0.578932 -0.772413 + -0.259892 0.694038 -3.59787 -0.188098 0.563649 -0.804313 + -0.241737 0.759039 -3.54806 -0.0548734 0.61744 -0.784702 + -0.295792 0.585203 -3.66637 -0.295008 0.573145 -0.76451 + -0.378347 0.579463 -3.63662 -0.327201 0.538748 -0.776331 + -0.366271 0.635173 -3.60391 -0.301963 0.546706 -0.78098 + -0.294472 0.538846 -3.69987 -0.298325 0.540013 -0.787012 + -0.377027 0.533192 -3.67008 -0.343154 0.53723 -0.770473 + -0.457412 0.524364 -3.63699 -0.420185 0.50786 -0.752012 + -0.459738 0.576753 -3.60313 -0.419189 0.501755 -0.756653 + -0.447662 0.632468 -3.57043 -0.403088 0.526571 -0.748494 + -0.303257 0.483193 -3.73308 -0.296881 0.543916 -0.784868 + -0.38935 0.471242 -3.70698 -0.348059 0.542941 -0.764245 + -0.469735 0.4625 -3.67384 -0.424179 0.519869 -0.741491 + -0.541235 0.456002 -3.63058 -0.514318 0.520291 -0.681743 + -0.535185 0.51466 -3.59158 -0.538157 0.473573 -0.69722 + -0.414155 0.406132 -3.74521 -0.373511 0.500378 -0.781097 + -0.494659 0.378376 -3.71793 -0.454684 0.466169 -0.758913 + -0.566159 0.371876 -3.67467 -0.519093 0.44633 -0.728925 + -0.511684 0.308967 -3.74531 -0.460029 0.306354 -0.833379 + -0.592165 0.301591 -3.69274 -0.579007 0.31238 -0.753107 + -0.633226 0.392851 -3.6094 -0.550613 0.490718 -0.675294 + -0.614285 0.445155 -3.57279 -0.535048 0.557665 -0.634612 + -0.608234 0.503811 -3.53379 -0.554614 0.460293 -0.693205 + -0.61191 0.245383 -3.69618 -0.617183 0.164426 -0.769447 + -0.68066 0.232892 -3.63234 -0.674761 0.159253 -0.72065 + -0.659232 0.322565 -3.62746 -0.629497 0.306615 -0.713947 + -0.724942 0.323717 -3.56626 -0.645886 0.269511 -0.71428 + -0.705186 0.397941 -3.55022 -0.566836 0.471824 -0.675336 + -0.636826 0.183152 -3.68219 -0.592698 -0.0935264 -0.799976 + -0.705576 0.170573 -3.61841 -0.679548 0.0578139 -0.731349 + -0.779496 0.166131 -3.55111 -0.676408 0.052661 -0.734642 + -0.74637 0.233952 -3.57118 -0.669501 0.156098 -0.726224 + -0.747388 0.126032 -3.58026 -0.631936 -0.219128 -0.743397 + -0.821308 0.121588 -3.51296 -0.685282 -0.159372 -0.710626 + -0.891356 0.117655 -3.44035 -0.715784 -0.185291 -0.673291 + -0.850268 0.164728 -3.48668 -0.701302 0.0115068 -0.712771 + -0.817142 0.232554 -3.50676 -0.680946 0.157225 -0.715257 + -0.763098 0.087575 -3.54565 -0.543683 -0.518915 -0.659648 + -0.834658 0.079343 -3.47739 -0.586614 -0.506409 -0.632008 + -0.904706 0.07541 -3.40478 -0.65785 -0.463285 -0.593802 + -0.966542 0.072591 -3.32869 -0.691116 -0.479752 -0.540552 + -0.957584 0.120966 -3.36748 -0.768471 -0.136347 -0.62519 + -0.82087 0.04374 -3.44972 -0.448737 -0.722323 -0.526198 + -0.887214 0.033712 -3.37595 -0.504798 -0.713993 -0.485173 + -0.94905 0.030974 -3.29981 -0.569094 -0.712661 -0.410178 + -0.798552 0.018302 -3.42467 -0.296489 -0.871084 -0.391543 + -0.864896 0.00827 -3.35089 -0.308312 -0.89423 -0.324494 + -0.925134 0.007858 -3.27797 -0.362021 -0.900442 -0.241133 + -1.0044 0.03507 -3.21691 -0.558394 -0.753938 -0.346083 + -0.835807 -0.002219 -3.32752 0.0706723 -0.997497 -0.00213926 + -0.896045 -0.00263 -3.25461 0.0113316 -0.996675 0.0806855 + -0.963489 0.009705 -3.17978 0.0460634 -0.990561 0.129104 + -0.980483 0.012045 -3.19503 -0.323737 -0.931545 -0.165586 + -0.804855 0.020423 -3.27734 0.400169 -0.864293 0.304734 + -0.863391 0.02385 -3.19867 0.341767 -0.865227 0.366849 + -0.930835 0.036187 -3.12384 0.332217 -0.895097 0.297376 + -1.02345 0.014294 -3.08632 0.11366 -0.991258 0.0669937 + -1.04045 0.016546 -3.10162 -0.330771 -0.929967 -0.160475 + -0.763432 0.084119 -3.20166 0.576011 -0.679436 0.454508 + -0.821968 0.087465 -3.12306 0.556768 -0.713211 0.425839 + -0.874487 0.089583 -3.03133 0.574691 -0.741456 0.346371 + -0.932695 0.086978 -2.94961 0.555391 -0.769562 0.315143 + -0.989043 0.03358 -3.04213 0.366423 -0.907486 0.205433 + -0.725157 0.217773 -3.10556 0.71214 -0.4788 0.513427 + -0.772757 0.219313 -3.03282 0.74329 -0.482304 0.463577 + -0.825276 0.221345 -2.94114 0.779225 -0.477597 0.405844 + -0.873382 0.196486 -2.86869 0.752954 -0.532971 0.386008 + -0.729778 0.44592 -2.91952 0.833864 -0.316914 0.451926 + -0.771455 0.415147 -2.84922 0.852014 -0.346097 0.392797 + -0.819561 0.390287 -2.77676 0.854515 -0.378972 0.355225 + -0.701812 0.617653 -2.86977 0.818919 -0.148005 0.554496 + -0.743489 0.586878 -2.79947 0.899891 -0.122892 0.418443 + -0.779279 0.535043 -2.72769 0.92705 -0.224895 0.300002 + -0.860866 0.33565 -2.72173 0.835946 -0.441921 0.325424 + -0.696197 0.756447 -2.86997 0.788908 0.0101232 0.614427 + -0.736259 0.710197 -2.81106 0.870703 -0.0053864 0.49178 + -0.772049 0.658362 -2.73928 0.950574 -0.0242424 0.309549 + -0.792939 0.560906 -2.64128 0.945914 -0.168161 0.277431 + -0.820584 0.480402 -2.67264 0.901959 -0.363881 0.23251 + -0.691375 0.908283 -2.88575 0.764759 0.0617762 0.641348 + -0.731438 0.862037 -2.82686 0.863204 0.0356039 0.503599 + -0.76395 0.810468 -2.75313 0.937546 0.0290762 0.346643 + -0.686176 1.06194 -2.9165 0.78134 0.0960812 0.616665 + -0.725744 1.0435 -2.85377 0.869827 0.0488439 0.490933 + -0.758256 0.991941 -2.78005 0.905073 0.0472874 0.422619 + -0.787588 0.970479 -2.71248 0.919307 0.063206 0.388433 + -0.78484 0.713096 -2.65508 0.956327 0.0252929 0.291203 + -0.647704 1.1838 -2.99096 0.730735 0.247443 0.636238 + -0.686414 1.1672 -2.92421 0.862902 0.0838233 0.498371 + -0.725982 1.14876 -2.86148 0.882645 -0.0251462 0.469367 + -0.746306 1.13431 -2.82284 0.889112 -0.0362587 0.456251 + -0.76236 1.12166 -2.79273 0.897618 -0.0208858 0.440279 + -0.619839 1.24072 -3.04455 0.693616 0.2983 0.655679 + -0.664021 1.23222 -2.99483 0.72792 0.289704 0.621453 + -0.692099 1.2342 -2.95767 0.857161 0.331456 0.394224 + -0.675783 1.18578 -2.9538 0.816407 0.320006 0.480704 + -0.708607 1.21854 -2.89153 0.884636 0.108438 0.453498 + -0.595678 1.25431 -3.07789 0.74964 0.353486 0.559542 + -0.635705 1.28287 -3.04436 0.731787 0.285136 0.619019 + -0.679887 1.27437 -2.99464 0.74163 0.19584 0.641586 + -0.70025 1.26598 -2.9665 0.839518 0.242642 0.486143 + -0.704011 1.26531 -2.95615 0.936856 0.249922 0.244623 + -0.695861 1.23354 -2.94732 0.935366 0.302221 0.18372 + -0.582981 1.25574 -3.09956 0.671599 0.364336 0.645146 + -0.597425 1.28722 -3.0997 0.742004 0.376349 0.55479 + -0.610123 1.2858 -3.07803 0.766642 0.342624 0.543017 + -0.646453 1.31519 -3.04893 0.709055 0.458261 0.535946 + -0.6901 1.32223 -2.99213 0.70561 0.434965 0.559392 + -0.550057 1.24921 -3.12147 0.486541 0.372525 0.790255 + -0.596822 1.29737 -3.10788 0.671906 0.327617 0.664235 + -0.620871 1.31811 -3.08259 0.754948 0.366346 0.543915 + -0.529577 1.30636 -3.14945 0.480931 0.214275 0.850171 + -0.571472 1.29953 -3.12542 0.496228 0.240126 0.834324 + -0.622424 1.35607 -3.10695 0.496206 0.448015 0.743681 + -0.620268 1.32826 -3.09078 0.698394 0.445526 0.560137 + -0.477071 1.2723 -3.17425 0.588087 0.245457 0.770652 + -0.484212 1.31017 -3.17625 0.574634 0.175209 0.799436 + -0.540517 1.34949 -3.15255 0.452004 0.340472 0.824482 + -0.597073 1.35823 -3.12449 0.481182 0.399079 0.780513 + -0.495152 1.35338 -3.17929 0.417314 0.402569 0.814732 + -0.570031 1.37209 -3.15169 0.326319 0.76413 0.556436 + -0.626587 1.38075 -3.12369 0.149002 0.981322 0.121681 + -0.644495 1.37625 -3.1081 -0.00598481 0.829881 0.557908 + -0.642339 1.34843 -3.09192 0.327896 0.663587 0.672411 + -0.452528 1.35984 -3.19848 0.447026 0.208104 0.869977 + -0.458403 1.38412 -3.21673 0.0612236 0.828206 0.557069 + -0.501026 1.37766 -3.19754 0.156714 0.805843 0.571014 + -0.535893 1.3848 -3.19771 0.279328 0.862153 0.422691 + -0.57182 1.37949 -3.16631 0.24394 0.854031 0.459483 + -0.437333 1.39596 -3.23444 -0.0313357 0.815458 0.577967 + -0.486669 1.39281 -3.26778 -0.00487984 0.951158 0.308667 + -0.521536 1.39995 -3.26795 0.105452 0.987283 0.118962 + -0.597879 1.41285 -3.21729 0.0989004 0.983156 0.153695 + -0.633806 1.40745 -3.18594 0.0527407 0.941863 0.331833 + -0.416597 1.42487 -3.26851 -0.130774 0.790754 0.598002 + -0.4656 1.40456 -3.28554 -0.464568 0.870663 0.161624 + -0.455866 1.41022 -3.31814 -0.231533 0.963696 0.132973 + -0.541909 1.39688 -3.30343 -0.104008 0.971629 -0.212412 + -0.403292 1.43617 -3.27808 0.126301 0.67881 0.723371 + -0.452295 1.41595 -3.29506 -0.375708 0.925981 -0.037452 + -0.383586 1.41509 -3.28317 0.59724 0.801426 -0.0319518 + -0.387157 1.40937 -3.30626 0.172799 0.967918 0.182413 + -0.403292 1.43617 -3.27808 0.162657 0.372724 -0.913575 + -0.329689 1.40261 -3.30316 0.051933 0.813752 0.578887 + -0.351495 1.41275 -3.32132 0.148803 0.913498 0.378656 + -0.418215 1.43963 -3.35968 -0.121709 0.945761 0.301203 + -0.294955 1.40256 -3.30208 0.0990731 0.800527 0.591051 + -0.291361 1.41354 -3.36028 0.0241639 0.962897 0.268787 + -0.313167 1.42367 -3.37844 0.166527 0.962278 0.215151 + -0.382552 1.44302 -3.37474 0.0783278 0.982132 0.17112 + -0.437666 1.43887 -3.38337 -0.365385 0.916094 -0.165124 + -0.268469 1.40904 -3.31769 0.178235 0.829284 0.529641 + -0.264876 1.42001 -3.37589 -0.255714 0.965837 0.0420664 + -0.316495 1.42576 -3.40805 0.129876 0.970776 -0.201809 + -0.273723 1.41652 -3.42925 -0.187884 0.911902 -0.364877 + -0.29845 1.41438 -3.42715 -0.0248339 0.910229 -0.41336 + -0.364593 1.42073 -3.44055 0.0226781 0.850136 -0.526074 + -0.38588 1.4451 -3.40435 -0.101595 0.975382 -0.195727 + -0.431022 1.42252 -3.41704 -0.385412 0.76951 -0.509227 + -0.289247 1.40217 -3.48199 -0.142651 0.89036 -0.432332 + -0.313974 1.40012 -3.47984 -0.0724862 0.889387 -0.451372 + -0.346548 1.40927 -3.45969 -0.0084214 0.878237 -0.478152 + -0.389518 1.40048 -3.46206 -0.273068 0.69308 -0.667139 + -0.410805 1.42493 -3.42582 -0.274452 0.761445 -0.587262 + -0.247715 1.39909 -3.49465 0.0476116 0.667443 -0.743138 + -0.288758 1.38388 -3.50732 -0.0524574 0.654239 -0.754467 + -0.330949 1.38218 -3.50197 -0.181435 0.671538 -0.718414 + -0.363523 1.39142 -3.48178 -0.246849 0.696206 -0.674064 + -0.254924 1.35791 -3.51993 0.146615 0.337262 -0.929924 + -0.294682 1.3632 -3.5197 -0.046744 0.372108 -0.927012 + -0.336873 1.3615 -3.51435 -0.220808 0.39067 -0.893656 + -0.375563 1.35026 -3.50649 -0.380891 0.350707 -0.855527 + -0.401558 1.3594 -3.48672 -0.370166 0.45785 -0.808301 + -0.231255 1.30733 -3.52613 0.326247 0.168402 -0.930163 + -0.265471 1.30618 -3.52993 0.0573695 0.104924 -0.992824 + -0.305229 1.31147 -3.52969 -0.0866864 0.114666 -0.989615 + -0.345791 1.30755 -3.52291 -0.20309 0.107999 -0.973186 + -0.384481 1.29631 -3.51505 -0.291074 0.0906114 -0.9524 + -0.205632 1.25386 -3.52612 -0.00186938 0.03479 -0.999393 + -0.240561 1.23784 -3.52937 0.121702 -0.0731405 -0.989868 + -0.274776 1.23669 -3.53318 0.0149927 -0.0686066 -0.997531 + -0.314001 1.23121 -3.52948 -0.11862 -0.0827736 -0.989483 + -0.354563 1.22729 -3.52269 -0.238059 -0.0971919 -0.966376 + -0.18277 1.27427 -3.52447 -0.27771 0.213127 -0.936725 + -0.158514 1.25436 -3.53517 -0.294021 -0.0103963 -0.955742 + -0.202594 1.15117 -3.50946 0.0477741 -0.219127 -0.974526 + -0.237523 1.13524 -3.51266 0.155527 -0.159038 -0.974945 + -0.271166 1.09805 -3.51044 -0.205029 -0.157363 -0.966023 + -0.122829 1.2337 -3.54739 -0.151469 -0.0569415 -0.986821 + -0.138765 1.12834 -3.52391 -0.303527 -0.224051 -0.926106 + -0.17445 1.14901 -3.5117 -0.255493 -0.237549 -0.937173 + -0.199758 0.994971 -3.4561 0.305179 -0.173767 -0.936307 + -0.224297 0.9899 -3.47912 0.536828 -0.146619 -0.830854 + -0.066486 1.28184 -3.53957 0.297325 0.0274514 -0.954382 + -0.094034 1.21797 -3.54555 0.197254 -0.128294 -0.971922 + -0.10167 1.11635 -3.52693 0.159304 -0.252449 -0.954406 + -0.153727 0.971674 -3.47695 -0.428914 -0.00879569 -0.903303 + -0.171614 0.99271 -3.45839 -0.439955 -0.101958 -0.892213 + -0.051677 1.3072 -3.53271 0.431915 0.117217 -0.894265 + -0.049252 1.23504 -3.52672 0.467704 -0.10956 -0.877069 + -0.056889 1.13333 -3.50816 0.306545 -0.195787 -0.931503 + -0.116632 0.959679 -3.47998 -0.0723335 -0.0508205 -0.996085 + -0.170744 0.837161 -3.49297 -0.0807517 0.532283 -0.842706 + -0.035173 1.31697 -3.51802 0.570229 0.154511 -0.806824 + -0.034443 1.26032 -3.51991 0.518682 -0.0327048 -0.854341 + -0.024385 1.12445 -3.49976 0.0705888 -0.125775 -0.989544 + -0.067554 0.954492 -3.48559 0.0622058 -0.0461901 -0.996994 + -0.021855 1.31235 -3.51002 0.535864 0.139557 -0.83269 + -0.021125 1.2557 -3.5119 0.249718 -0.0230944 -0.968043 + -0.010165 1.11387 -3.50005 -0.035103 -0.135426 -0.990165 + -0.006905 1.3221 -3.49751 0.288907 0.219125 -0.931943 + -0.006905 1.24513 -3.51219 -0.00634015 0.00313263 -0.999975 + 0.006906 1.24504 -3.51223 0.0128487 0.0201976 -0.999713 + 0.010163 1.11387 -3.50005 0.0763811 -0.167599 -0.982892 + 0.021126 1.2557 -3.51189 -0.318241 0.0319158 -0.947472 + 0.024383 1.12445 -3.49976 -0.0754617 -0.140816 -0.987156 + 0.021855 1.31234 -3.51001 -0.570926 0.103883 -0.814403 + 0.034419 1.26032 -3.5199 -0.517014 -0.0240446 -0.855639 + 0.035149 1.31696 -3.51801 -0.570615 0.154536 -0.806546 + -0.697976 1.23713 -2.92113 0.938193 0.224392 0.263518 + -0.719127 1.26344 -2.8867 0.833935 0.245431 0.494284 + -0.723957 1.18398 -2.85369 0.91868 -0.0162691 0.394666 + -0.744281 1.16962 -2.81501 0.892174 -0.0710925 0.446063 + -0.710942 1.28047 -2.91621 0.941252 0.24797 0.229252 + -0.722284 1.30336 -2.90405 0.83628 0.292019 0.46407 + -0.740454 1.32251 -2.89142 0.720709 0.416755 0.55398 + -0.734477 1.22897 -2.84881 0.874796 0.188329 0.446391 + -0.750635 1.19613 -2.80312 0.875663 0.0328588 0.481803 + -0.708827 1.27688 -2.94239 0.967793 0.222699 0.117393 + -0.723505 1.34021 -2.93208 0.833721 0.548095 -0.0670915 + -0.734848 1.36318 -2.91986 0.56904 0.816208 -0.0999884 + -0.743611 1.36243 -2.90876 0.304418 0.772023 0.557952 + -0.710462 1.31384 -2.964 0.897196 0.00296292 0.441624 + -0.715278 1.32541 -2.95025 0.874164 0.40786 0.263606 + -0.73922 1.34428 -2.94413 0.14817 0.94997 -0.274959 + -0.747447 1.35908 -2.92595 -0.241704 0.710506 -0.660878 + -0.753688 1.36208 -2.91735 -0.384206 0.846995 -0.367404 + -0.752272 1.34314 -2.95816 0.0644246 0.97649 0.205708 + -0.800368 1.32232 -2.8981 -0.339659 0.877823 -0.337725 + -0.806609 1.32532 -2.88949 -0.660117 0.706291 0.255732 + -0.762452 1.36133 -2.90626 -0.346835 0.906606 0.240358 + -0.730388 1.35412 -2.99916 0.288946 0.894964 0.339927 + -0.799767 1.35538 -2.98155 -0.107673 0.953461 0.281634 + -0.81342 1.32127 -2.91208 -0.219553 0.93154 0.289879 + -0.806973 1.30427 -2.86942 -0.426794 0.67748 0.599056 + -0.762816 1.34027 -2.88619 0.14582 0.670579 0.727365 + -0.700092 1.3477 -3.01025 0.447027 0.793116 0.413684 + -0.725677 1.3651 -3.07618 0.109228 0.985576 0.129264 + -0.777884 1.36636 -3.02257 -0.0277869 0.987041 0.158041 + -0.846376 1.34513 -3.0218 -0.451253 0.88407 -0.12162 + -0.836724 1.34868 -2.98676 -0.296305 0.940721 0.165069 + -0.656446 1.34066 -3.06706 0.487509 0.768067 0.41522 + -0.695381 1.35868 -3.08727 0.301383 0.889776 0.342734 + -0.665156 1.37845 -3.1423 0.0397632 0.884147 0.465514 + -0.748238 1.36493 -3.10089 -0.118587 0.99198 -0.0437333 + -0.800445 1.36619 -3.04728 -0.235835 0.97156 0.0212905 + -0.681275 1.36646 -3.11215 0.446156 0.694746 0.564156 + -0.663367 1.37105 -3.12769 -0.0320323 0.975216 0.218923 + -0.66935 1.40969 -3.19342 -0.176412 0.978892 0.103199 + -0.7007 1.3806 -3.14983 -0.21487 0.863985 0.45537 + -0.750069 1.36172 -3.13333 -0.201581 0.979425 0.00952228 + -0.820562 1.35346 -3.09763 -0.330672 0.939886 -0.0852659 + -0.661605 1.4 -3.24124 -0.310781 0.908952 -0.277889 + -0.714155 1.38846 -3.19644 -0.406761 0.91352 0.00523802 + -0.743885 1.37593 -3.19654 -0.373163 0.926866 -0.040853 + -0.73043 1.36816 -3.14988 -0.344936 0.934734 0.0853891 + -0.618252 1.40969 -3.25282 -0.145747 0.969107 -0.198969 + -0.66065 1.36268 -3.328 -0.51932 0.766937 -0.376981 + -0.695535 1.34931 -3.28524 -0.665785 0.556929 -0.496548 + -0.70641 1.37868 -3.24431 -0.449078 0.762527 -0.465705 + -0.617297 1.37237 -3.33958 -0.229767 0.915119 -0.331306 + -0.601612 1.36411 -3.37827 -0.321734 0.901716 -0.288782 + -0.619326 1.34505 -3.40407 -0.490089 0.726922 -0.481037 + -0.657254 1.34065 -3.37004 -0.592836 0.667174 -0.451025 + -0.526224 1.38862 -3.34212 -0.238401 0.955782 -0.172177 + -0.555248 1.37678 -3.40721 -0.334303 0.913785 -0.230734 + -0.572962 1.35764 -3.43306 -0.415488 0.680636 -0.603411 + -0.63008 1.32452 -3.4159 -0.607219 0.215558 -0.764735 + -0.668008 1.3202 -3.38182 -0.737567 0.274932 -0.616772 + -0.475318 1.40955 -3.34178 -0.449008 0.8872 0.106145 + -0.497237 1.3962 -3.34946 -0.358989 0.89945 -0.249232 + -0.526261 1.38436 -3.41455 -0.235587 0.923559 -0.302551 + -0.528327 1.36562 -3.44609 -0.187363 0.686163 -0.702905 + -0.569567 1.32693 -3.45287 -0.422742 0.138622 -0.895585 + -0.463834 1.40797 -3.39984 -0.534547 0.785011 -0.313077 + -0.485753 1.39471 -3.40748 -0.31293 0.898748 -0.307128 + -0.487819 1.37588 -3.43906 -0.155624 0.718995 -0.677368 + -0.524932 1.33491 -3.4659 -0.141916 0.236938 -0.961104 + -0.457189 1.39153 -3.43356 -0.280674 0.68233 -0.675017 + -0.490004 1.34003 -3.46416 -0.0970424 0.330048 -0.938963 + -0.48183 1.26982 -3.45996 -0.27983 0.00130047 -0.960049 + -0.516758 1.26462 -3.46175 -0.229068 -0.185606 -0.955551 + -0.570524 1.25675 -3.43512 -0.435926 -0.298686 -0.848973 + -0.459374 1.35568 -3.45866 -0.287349 0.491665 -0.822007 + -0.459392 1.30386 -3.48052 -0.447396 0.0878286 -0.890013 + -0.462321 1.20627 -3.47089 -0.551825 -0.213002 -0.8063 + -0.440392 1.36678 -3.4643 -0.456044 0.517094 -0.724319 + -0.44041 1.31497 -3.48615 -0.461842 0.199007 -0.864348 + -0.439884 1.24031 -3.49145 -0.443041 -0.115054 -0.889088 + -0.451774 1.11419 -3.4558 -0.631497 -0.21112 -0.746083 + -0.500992 1.14196 -3.4007 -0.551265 -0.324636 -0.768582 + -0.420175 1.36919 -3.47308 -0.368042 0.526619 -0.766301 + -0.428884 1.32362 -3.49154 -0.495725 0.268344 -0.825983 + -0.428357 1.24896 -3.49682 -0.418738 -0.0476719 -0.906855 + -0.410267 1.31374 -3.50523 -0.347302 0.223187 -0.910807 + -0.402571 1.23154 -3.50665 -0.378505 -0.11856 -0.917975 + -0.365196 1.11911 -3.49652 -0.303239 -0.238381 -0.922616 + -0.413205 1.12335 -3.48047 -0.415682 -0.21607 -0.883472 + -0.453942 0.960764 -3.40646 -0.344691 0.00182879 -0.938714 + -0.490445 1.04989 -3.38562 -0.596686 -0.127539 -0.792275 + -0.328109 1.12278 -3.50867 -0.162214 -0.24417 -0.956069 + -0.377773 0.969135 -3.44696 -0.338157 -0.164971 -0.926517 + -0.415372 0.969923 -3.43112 -0.444899 -0.164805 -0.880286 + -0.288884 1.12826 -3.51238 -0.135813 -0.201475 -0.970032 + -0.340686 0.972809 -3.45912 -0.334685 -0.119372 -0.934738 + -0.388887 0.865204 -3.43674 -0.435817 0.248918 -0.86493 + -0.426486 0.865992 -3.42091 -0.311655 0.264027 -0.912776 + -0.321534 0.967345 -3.46626 -0.274533 -0.103264 -0.956017 + -0.341429 0.834182 -3.47141 -0.223318 0.416186 -0.88143 + -0.360581 0.839731 -3.46422 -0.345501 0.373164 -0.861033 + -0.429634 0.78645 -3.47633 -0.288984 0.544585 -0.787347 + -0.303815 0.937131 -3.46432 -0.207943 -0.0169981 -0.977993 + -0.308784 0.856679 -3.46998 -0.308517 0.272904 -0.91123 + -0.32412 0.755671 -3.53462 -0.325248 0.548037 -0.770629 + -0.401328 0.760889 -3.50386 -0.310948 0.529622 -0.789184 + -0.452223 0.777477 -3.47419 -0.383998 0.440329 -0.811576 + -0.27389 0.947205 -3.48017 -0.34731 -0.0545515 -0.936162 + -0.278858 0.866753 -3.48582 -0.432233 0.310528 -0.846609 + -0.291475 0.778083 -3.53324 -0.519863 0.734893 -0.435517 + -0.276334 0.788484 -3.53466 -0.0196673 0.522402 -0.852472 + -0.342242 0.693626 -3.57056 -0.287546 0.537936 -0.792428 + -0.255729 1.10274 -3.51457 0.00763824 -0.0249272 -0.99966 + -0.258453 0.951896 -3.4843 -0.000998641 -0.0796473 -0.996822 + -0.263717 0.877155 -3.48724 -0.0774602 0.265318 -0.961044 + -0.242504 0.9574 -3.48103 0.170447 -0.0531088 -0.983935 + -0.247767 0.882745 -3.48392 0.282547 0.164616 -0.945023 + -0.234171 0.879942 -3.47827 0.561333 0.116954 -0.819285 + -0.262738 0.785681 -3.529 0.260835 0.509604 -0.81992 + -0.209632 0.884925 -3.4553 0.123735 0.201055 -0.971734 + -0.188632 0.858195 -3.4744 -0.3209 0.421017 -0.848391 + -0.127806 0.850848 -3.48568 0.0012032 0.334229 -0.942491 + -0.419449 0.698937 -3.53976 -0.361202 0.517912 -0.775435 + -0.485231 0.752929 -3.46748 -0.501751 0.414547 -0.759208 + -0.526323 0.622523 -3.52641 -0.529495 0.513142 -0.675514 + -0.498111 0.688905 -3.49578 -0.531749 0.480195 -0.697607 + -0.537511 0.56696 -3.55777 -0.542696 0.466241 -0.698642 + -0.608552 0.602889 -3.4668 -0.526246 0.514464 -0.677046 + -0.57491 0.667283 -3.44113 -0.5409 0.481648 -0.689523 + -0.56203 0.731222 -3.41288 -0.536445 0.315892 -0.782585 + -0.619739 0.547326 -3.49816 -0.532272 0.470982 -0.703464 + -0.700775 0.548705 -3.44335 -0.414279 0.487641 -0.768491 + -0.685445 0.59546 -3.42053 -0.393888 0.506739 -0.766856 + -0.651803 0.659947 -3.39483 -0.426033 0.449402 -0.785197 + -0.626387 0.724717 -3.37901 -0.44313 0.29615 -0.846127 + -0.68927 0.50519 -3.47898 -0.458667 0.470756 -0.753667 + -0.763342 0.514662 -3.43259 -0.498172 0.412364 -0.762746 + -0.784905 0.576636 -3.39353 -0.510376 0.394981 -0.763876 + -0.769575 0.623479 -3.37066 -0.42582 0.615554 -0.663152 + -0.686245 0.450249 -3.51362 -0.488393 0.515967 -0.70374 + -0.760317 0.459718 -3.46722 -0.509769 0.409101 -0.756817 + -0.826931 0.46533 -3.40914 -0.606798 0.386306 -0.694668 + -0.817946 0.523864 -3.37972 -0.627834 0.33238 -0.703809 + -0.769751 0.39896 -3.49018 -0.594744 0.365778 -0.715882 + -0.836365 0.404575 -3.43211 -0.636286 0.305727 -0.708288 + -0.899257 0.399787 -3.37301 -0.668785 0.284345 -0.686931 + -0.885243 0.483021 -3.34798 -0.627994 0.376449 -0.681109 + -0.876258 0.541468 -3.31861 -0.653415 0.557851 -0.511715 + -0.789506 0.324651 -3.50627 -0.662559 0.263873 -0.70099 + -0.85367 0.326434 -3.44337 -0.675102 0.23173 -0.700385 + -0.916562 0.321651 -3.38428 -0.689992 0.189181 -0.698657 + -0.980646 0.325053 -3.31757 -0.699639 0.188527 -0.689175 + -0.957952 0.406999 -3.31211 -0.677412 0.277269 -0.681347 + -0.881306 0.234342 -3.44386 -0.710566 0.136038 -0.690355 + -0.944432 0.24971 -3.37027 -0.72634 0.120221 -0.67674 + -1.00852 0.253025 -3.30362 -0.721009 0.0577907 -0.690512 + -0.916497 0.168037 -3.41381 -0.744195 0.042118 -0.666633 + -0.979623 0.183405 -3.34023 -0.761718 0.0222245 -0.647528 + -1.04184 0.18854 -3.26613 -0.74849 -0.043733 -0.661703 + -1.07433 0.25742 -3.23383 -0.72919 0.0423298 -0.683 + -1.0167 0.11971 -3.28931 -0.771749 -0.198337 -0.604207 + -1.07892 0.124845 -3.2152 -0.749588 -0.288555 -0.595697 + -1.14271 0.132217 -3.13657 -0.759696 -0.318452 -0.566966 + -1.10765 0.192935 -3.19634 -0.761872 -0.0869551 -0.641865 + -1.02566 0.071333 -3.25052 -0.707459 -0.51346 -0.485655 + -1.08511 0.074678 -3.15911 -0.663352 -0.609216 -0.434534 + -1.14891 0.082051 -3.08048 -0.646054 -0.652184 -0.396573 + -1.20362 0.082894 -2.98534 -0.615211 -0.704137 -0.354551 + -1.20577 0.134949 -3.0531 -0.808709 -0.308618 -0.500744 + -1.06385 0.038414 -3.1255 -0.583036 -0.756388 -0.296557 + -1.11726 0.04216 -3.01339 -0.5059 -0.822782 -0.259027 + -1.17198 0.043004 -2.91825 -0.455321 -0.845817 -0.277984 + -1.09386 0.020379 -2.98946 -0.5307 -0.808432 -0.25455 + -1.14672 0.019074 -2.8854 -0.487059 -0.830987 -0.268763 + -1.21938 0.0345 -2.82152 -0.489515 -0.830114 -0.266994 + -1.26054 0.08085 -2.8788 -0.659247 -0.674555 -0.33222 + -1.2627 0.132817 -2.94661 -0.781702 -0.435847 -0.446071 + -1.08255 0.010615 -2.98355 -0.120284 -0.990917 -0.0601254 + -1.13542 0.009312 -2.87949 -0.137101 -0.988634 -0.0616938 + -1.18458 0.012616 -2.77921 0.214938 -0.971133 0.103456 + -1.19413 0.010571 -2.78867 -0.162578 -0.980218 -0.112874 + -1.04814 0.029898 -2.93935 0.37529 -0.911531 0.168135 + -1.10234 0.025305 -2.8486 0.341399 -0.922831 0.178407 + -1.15151 0.028616 -2.74833 0.34072 -0.918739 0.199571 + -1.23162 0.013941 -2.67851 0.243915 -0.95739 0.154625 + -1.24117 0.011804 -2.68801 -0.19652 -0.978881 -0.0563109 + -0.989415 0.068168 -2.87763 0.550681 -0.795727 0.252129 + -1.04361 0.063489 -2.78693 0.509476 -0.811212 0.287 + -1.09489 0.063421 -2.70421 0.499826 -0.813227 0.298052 + -1.14295 0.067705 -2.61003 0.499514 -0.812636 0.300181 + -1.19957 0.032899 -2.65415 0.371172 -0.901168 0.223891 + -0.930102 0.177676 -2.79671 0.731444 -0.573901 0.368276 + -0.980336 0.150298 -2.72969 0.700095 -0.612051 0.367777 + -1.03161 0.150143 -2.64702 0.672089 -0.633023 0.384159 + -1.08132 0.139613 -2.57138 0.664147 -0.647134 0.374336 + -0.9111 0.308272 -2.65471 0.77121 -0.526868 0.357275 + -0.963799 0.270777 -2.59536 0.745057 -0.560169 0.36208 + -1.01351 0.260159 -2.51977 0.696839 -0.611076 0.375501 + -0.858011 0.415583 -2.60577 0.85481 -0.461343 0.23762 + -0.910711 0.378083 -2.54642 0.76891 -0.587098 0.253167 + -0.952577 0.345927 -2.47973 0.71597 -0.65084 0.252577 + -1.06529 0.244662 -2.44953 0.694772 -0.608019 0.384192 + -0.830366 0.496 -2.57446 0.92631 -0.230387 0.298113 + -0.862898 0.442151 -2.51599 0.873814 -0.374449 0.31022 + -0.904765 0.409989 -2.44929 0.864552 -0.436537 0.248969 + -0.931244 0.390993 -2.37538 0.785399 -0.527753 0.323458 + -1.00436 0.330429 -2.40948 0.608251 -0.720988 0.331974 + -0.810958 0.671494 -2.58463 0.899464 0.0199178 0.436541 + -0.84349 0.617564 -2.52622 0.915709 -0.0203555 0.401326 + -0.868595 0.581615 -2.45815 0.940753 -0.0604942 0.333654 + -0.813706 0.928877 -2.64202 0.925978 0.0806582 0.368861 + -0.837125 0.904849 -2.57321 0.928137 0.0676635 0.366038 + -0.862229 0.8689 -2.50514 0.946262 0.0429775 0.320532 + -0.881028 0.844101 -2.43539 0.957894 0.0304208 0.285505 + -0.895074 0.562532 -2.3843 0.948378 -0.0950314 0.30257 + -0.791692 1.10011 -2.72521 0.906639 0.0671882 0.416523 + -0.80848 1.09317 -2.68379 0.933675 0.0740411 0.350385 + -0.819086 1.07003 -2.65352 0.941812 0.0150642 0.335802 + -0.842504 1.04609 -2.58464 0.909114 0.0981918 0.404809 + -0.863389 1.02916 -2.52893 0.915619 0.173593 0.36264 + -0.776795 1.14418 -2.75435 0.878355 0.0212247 0.477538 + -0.798085 1.14211 -2.72175 0.869721 0.108442 0.481483 + -0.814873 1.13508 -2.68038 0.920951 0.169147 0.351054 + -0.82413 1.10525 -2.63251 0.941899 0.0956513 0.321988 + -0.834735 1.08211 -2.60224 0.910544 0.00363815 0.413396 + -0.76074 1.15692 -2.78442 0.883719 -0.0639152 0.463633 + -0.788046 1.17924 -2.74286 0.817161 0.141228 0.55884 + -0.809336 1.17707 -2.71031 0.852518 0.198846 0.483398 + -0.824851 1.16142 -2.6706 0.891979 0.243592 0.380837 + -0.767094 1.18343 -2.77253 0.833324 0.082408 0.546607 + -0.802728 1.21624 -2.73615 0.70089 0.437004 0.56372 + -0.819528 1.20909 -2.70976 0.66716 0.513197 0.539931 + -0.835043 1.19344 -2.67006 0.747953 0.495711 0.441404 + -0.781776 1.22044 -2.76582 0.704393 0.400478 0.586044 + -0.812288 1.24475 -2.75953 0.424592 0.774234 0.469343 + -0.829088 1.2376 -2.73315 0.362487 0.775994 0.516175 + -0.878192 1.2283 -2.69584 0.188865 0.89445 0.405327 + -0.862039 1.21597 -2.67048 0.353578 0.860882 0.365876 + -0.750632 1.22266 -2.79948 0.803947 0.203722 0.558718 + -0.765252 1.25011 -2.81322 0.381514 0.700577 0.603025 + -0.796396 1.24789 -2.77957 0.4494 0.75685 0.474572 + -0.831281 1.27798 -2.82269 0.235721 0.879753 0.412881 + -0.740139 1.2274 -2.83489 0.949084 0.061087 0.309042 + -0.740136 1.25394 -2.83125 0.856419 0.333671 0.393968 + -0.756836 1.27327 -2.83993 0.164245 0.643231 0.747848 + -0.815389 1.28112 -2.84272 0.244358 0.818869 0.519368 + -0.746116 1.32094 -2.8775 0.628467 0.519046 0.579328 + -0.858062 1.28346 -2.82399 0.122449 0.904965 0.407486 + 1.45261 0.472207 -2.72205 0.846829 0.216699 -0.485719 + 1.47845 0.415515 -2.70086 0.8709 0.0420003 -0.489662 + 1.53616 0.331475 -2.5571 0.877718 -0.231189 -0.419718 + 1.49924 0.468028 -2.63601 0.861062 0.164256 -0.481241 + 1.52509 0.411336 -2.61482 0.889471 -0.00556116 -0.456957 + 1.57127 0.306457 -2.47256 0.896678 -0.249413 -0.365734 + 1.57454 0.233221 -2.37131 0.898987 -0.317792 -0.301381 + 1.54396 0.462983 -2.55687 0.903801 0.104927 -0.41489 + 1.56019 0.386316 -2.53028 0.914206 -0.0691379 -0.399309 + 1.60575 0.310399 -2.37859 0.922365 -0.252243 -0.292603 + 1.60902 0.237071 -2.27738 0.913262 -0.262684 -0.311367 + 1.63386 0.173251 -2.16504 0.893975 -0.285388 -0.345489 + 1.52708 0.537637 -2.57338 0.871701 0.00847439 -0.489964 + 1.5792 0.459677 -2.47515 0.908337 0.0209943 -0.417711 + 1.59543 0.383098 -2.44851 0.924195 -0.103934 -0.367507 + 1.63363 0.327312 -2.28708 0.923524 -0.232254 -0.305224 + 1.56851 0.550967 -2.50587 0.881095 -0.0502244 -0.470264 + 1.61732 0.461668 -2.39239 0.931579 -0.0370847 -0.361642 + 1.62331 0.400016 -2.35701 0.945922 -0.114288 -0.303595 + 1.66959 0.336595 -2.19856 0.89974 -0.255241 -0.354006 + 1.64677 0.245073 -2.17824 0.90529 -0.260687 -0.335399 + 1.60662 0.552958 -2.42312 0.921648 -0.0287569 -0.386961 + 1.64523 0.478729 -2.32075 0.947218 -0.0449714 -0.317419 + 1.65123 0.417072 -2.28535 0.927974 -0.115325 -0.35435 + 1.6967 0.352746 -2.14414 0.880801 -0.27371 -0.386359 + 1.68272 0.254356 -2.08972 0.891986 -0.248242 -0.377805 + 1.62548 0.694368 -2.38345 0.946686 0.0697107 -0.314524 + 1.63512 0.575662 -2.34904 0.946435 0.00129848 -0.322891 + 1.66055 0.507282 -2.271 0.942295 -0.00223324 -0.334775 + 1.67833 0.43314 -2.23098 0.918481 -0.0835185 -0.386545 + 1.60796 0.770499 -2.39911 0.885756 0.282469 -0.368303 + 1.64705 0.719534 -2.29283 0.958266 0.100971 -0.267453 + 1.65044 0.604129 -2.29935 0.953504 0.0396657 -0.298758 + 1.68726 0.517667 -2.19919 0.943339 0.0539296 -0.327419 + 1.62954 0.79567 -2.3085 0.921323 0.258183 -0.290698 + 1.66896 0.729781 -2.21098 0.966131 0.108195 -0.234274 + 1.67234 0.614464 -2.21745 0.957262 0.0796398 -0.278042 + 1.71697 0.522975 -2.10938 0.944673 0.0817996 -0.317651 + 1.70504 0.443523 -2.15917 0.939808 0.00288297 -0.34169 + 1.62358 0.866281 -2.2448 0.869465 0.372424 -0.324547 + 1.65077 0.820142 -2.21909 0.931695 0.251491 -0.262099 + 1.68803 0.731209 -2.11905 0.95566 0.14238 -0.257763 + 1.70205 0.619774 -2.12764 0.945033 0.117978 -0.304949 + 1.59304 0.919411 -2.25863 0.775834 0.500474 -0.384196 + 1.63942 0.904651 -2.16327 0.895177 0.344165 -0.283212 + 1.66984 0.821567 -2.12716 0.949787 0.213068 -0.229142 + 1.71475 0.731724 -2.02935 0.947246 0.171256 -0.270919 + 1.55387 1.00544 -2.20244 0.617275 0.669127 -0.413812 + 1.60888 0.957783 -2.17709 0.788335 0.493296 -0.367678 + 1.65644 0.92519 -2.07784 0.918725 0.29385 -0.263812 + 1.68686 0.842111 -2.04174 0.940862 0.22969 -0.249038 + 1.4908 1.0756 -2.14036 0.26001 0.889867 -0.374875 + 1.54839 1.05144 -2.14471 0.489667 0.728006 -0.479827 + 1.6034 1.00377 -2.11935 0.690615 0.596978 -0.408249 + 1.62395 1.00397 -2.08508 0.80265 0.47478 -0.361021 + 1.6628 0.974096 -1.99975 0.912035 0.303283 -0.276063 + 1.39932 1.0879 -2.16447 0.132861 0.961096 -0.242161 + 1.43855 1.1159 -2.01876 -0.0386831 0.95426 -0.296464 + 1.51379 1.12676 -2.02398 0.0638906 0.914765 -0.398903 + 1.57138 1.1026 -2.02832 0.518408 0.729382 -0.44638 + 1.59193 1.10279 -1.99405 0.673292 0.595965 -0.437611 + 1.34634 1.0895 -2.16103 0.0369523 0.987302 -0.154498 + 1.46346 1.16028 -1.89442 -0.23982 0.942984 -0.230797 + 0.988349 1.08892 -1.69963 -0.36581 0.683973 0.631161 + 1.09227 1.08996 -1.73342 0.261129 0.915849 0.305012 + 1.11248 1.07053 -1.70838 0.166592 0.90663 0.387645 + 1.09541 1.02064 -1.61357 -0.023803 0.962626 0.269788 + 1.15779 1.05545 -1.67285 -0.195693 0.924334 0.327584 + 1.09292 1.01632 -1.59089 -0.354268 0.925022 0.137218 + 1.1173 1.02629 -1.55774 -0.499264 0.859587 0.10884 + -2.0866 1.79868 -0.385969 -0.450143 0.868692 -0.206751 + -2.06612 1.79246 -0.363198 0.317015 0.945894 0.0691808 + -2.05691 1.78848 -0.509912 0.297877 0.954577 -0.00716328 + -2.08681 1.79252 -0.279496 0.39676 0.917871 0.00967817 + -2.03495 1.76178 -0.21826 0.450823 0.892131 -0.029331 + -2.01642 1.76019 -0.274707 0.646245 0.744378 0.168134 + -2.04759 1.79087 -0.419645 0.249125 0.966647 0.0594145 + -2.05691 1.78848 -0.509912 0.00397707 0.999632 -0.0268333 + -2.10728 1.79874 -0.302267 -0.224544 0.960517 -0.164277 + -2.13006 1.81445 -0.230689 -0.110625 0.941329 -0.318846 + -2.10924 1.80934 -0.206632 0.484039 0.86867 -0.105443 + -2.05739 1.77861 -0.145405 0.14963 0.942622 -0.298453 + -1.99295 1.73621 -0.301369 0.83562 0.549196 0.0110664 + -2.11821 1.78343 -0.31315 -0.843627 0.437169 -0.311732 + -2.14098 1.79923 -0.241522 -0.524124 0.721479 -0.452506 + -2.17594 1.86452 -0.096405 0.0643315 0.957873 -0.279893 + -2.15513 1.8594 -0.07235 0.32547 0.872805 -0.363703 + -2.08649 1.7566 -0.414291 -0.938982 0.156244 -0.306431 + -2.1181 1.74126 -0.341513 -0.90115 0.18041 -0.394184 + -2.17356 1.80731 -0.204712 -0.475464 0.696599 -0.537293 + -2.20852 1.87268 -0.059546 -0.019154 0.925532 -0.378184 + -2.05691 1.78848 -0.509912 -0.982277 0.0686332 -0.17442 + -2.08045 1.67933 -0.46125 -0.941302 0.152532 -0.301138 + -2.13064 1.67626 -0.328739 -0.909521 0.135366 -0.392998 + -2.17854 1.69863 -0.236073 -0.852201 0.021149 -0.522787 + -2.16601 1.76363 -0.248856 -0.814249 0.229287 -0.533316 + -2.26032 1.84742 -0.082585 -0.339492 0.733317 -0.589059 + -2.05087 1.7113 -0.556828 -0.967225 0.114483 -0.22665 + -2.08361 1.60417 -0.499667 -0.91313 0.305299 -0.270159 + -2.13379 1.6011 -0.367149 -0.928556 0.176043 -0.326792 + -2.17994 1.62481 -0.232215 -0.826142 0.179614 -0.534067 + -2.01964 1.79368 -0.67111 -0.981152 -0.00407053 -0.193195 + -2.01547 1.73294 -0.734101 -0.972584 0.133596 -0.190349 + -2.04671 1.65056 -0.619819 -0.959585 0.218274 -0.177633 + -2.09564 1.53103 -0.571994 -0.960136 0.200244 -0.19504 + -2.12301 1.50724 -0.430988 -0.952883 0.135384 -0.271449 + -2.16916 1.53095 -0.296056 -0.966723 -0.0486957 -0.25115 + -2.01507 1.85244 -0.710092 -0.952732 -0.0137144 -0.303503 + -1.9663 1.86477 -0.850038 -0.954697 0.138719 -0.263267 + -2.02224 1.64622 -0.784511 -0.958662 0.189841 -0.211963 + -2.05874 1.57734 -0.692196 -0.950602 0.23948 -0.197496 + -2.04901 1.87769 -0.606221 -0.98889 -0.00170281 -0.148637 + -2.04084 1.94534 -0.658996 -0.978647 0.0887841 -0.185384 + -2.02648 2.0249 -0.695197 -0.972804 0.231595 -0.00389074 + -2.00071 1.93192 -0.74635 -0.907793 -0.0136759 -0.419195 + -1.97115 1.95368 -0.81144 -0.928221 0.0460678 -0.369167 + -2.05358 1.81893 -0.567241 -0.978176 -0.129611 -0.162394 + -2.05367 1.84205 -0.544286 -0.998185 0.0436692 -0.0414662 + -2.04962 1.87449 -0.581074 -0.993561 0.11288 -0.0097189 + -2.04145 1.94214 -0.633849 -0.986185 0.165622 -0.00283097 + -1.9953 2.10086 -0.703953 -0.0654755 0.296776 0.9527 + -1.24542 1.07804 -1.44959 0.173142 -0.0822395 0.981457 + -1.30253 1.11291 -1.43659 0.82029 0.42927 0.377958 + -1.26037 1.02438 -1.45144 0.697685 -0.0379477 0.715399 + -1.3426 1.16556 -1.41618 0.818352 0.531273 0.219201 + -1.33891 1.09937 -1.36652 0.779628 0.197893 0.594154 + -1.31527 1.03417 -1.3908 0.737068 -0.00548835 0.675796 + -1.26424 0.876179 -1.45655 0.69155 -0.0476274 0.720756 + -1.20752 0.862044 -1.50687 0.74719 -0.0679487 0.661127 + -1.15338 0.931117 -1.57811 0.759355 -0.0907354 0.644319 + -1.11406 0.974813 -1.60939 0.586011 -0.267587 0.764845 + -1.22105 1.06807 -1.48272 0.27089 -0.808143 0.522995 + -1.24542 1.07804 -1.44959 0.749546 -0.230328 0.620588 + -1.38567 1.21834 -1.48539 0.731757 0.678101 -0.0686348 + -1.42592 1.25813 -1.43972 0.72592 0.685023 -0.0615047 + -1.39323 1.22173 -1.37206 0.833855 0.518408 0.189573 + -1.38954 1.15545 -1.32246 0.800471 0.190871 0.568167 + -1.3456 1.16561 -1.50585 0.807646 0.56773 -0.159343 + -1.42313 1.24458 -1.54323 0.599116 0.767823 -0.226954 + -1.46338 1.28437 -1.49756 0.652605 0.726901 -0.213829 + -1.46073 1.30484 -1.39622 0.812452 0.5688 -0.128014 + -1.42804 1.26844 -1.32856 0.881324 0.448974 0.147277 + -1.26875 1.04947 -1.46391 0.478371 0.656019 -0.583781 + -1.27651 1.04939 -1.49016 0.700866 0.708303 -0.0842194 + -1.35337 1.16552 -1.5321 0.818574 0.503214 -0.27697 + -1.24542 1.07804 -1.44959 0.0475818 0.416344 -0.907961 + -1.24022 1.02623 -1.52285 0.478502 0.862283 0.165843 + -1.33367 1.11258 -1.54161 0.772216 0.605052 -0.19389 + -1.36149 1.14219 -1.57689 0.863292 0.418384 -0.282279 + -1.38119 1.19504 -1.56743 0.798107 0.567022 -0.203743 + -1.18975 1.00904 -1.53268 0.062907 0.995546 0.0702265 + -1.20826 1.07264 -1.66304 0.415145 0.859062 0.299445 + -1.29738 1.08942 -1.5743 0.562487 0.792297 0.236376 + -1.31783 1.10964 -1.60512 0.369622 0.927123 0.0618199 + -1.35577 1.12264 -1.59423 0.659886 0.737977 -0.141213 + -1.09541 1.02064 -1.61357 0.0237913 0.962556 0.270036 + -1.15779 1.05545 -1.67285 0.195469 0.924385 0.327572 + -1.14875 1.08447 -1.81252 -0.0166731 0.99893 0.043146 + -1.22871 1.09286 -1.69385 0.3051 0.943457 0.129627 + -1.11728 1.02629 -1.55775 -0.295542 0.931926 -0.210163 + -1.09291 1.01632 -1.59089 0.442612 -0.543432 0.713286 + -1.05745 0.968945 -1.65383 0.630685 -0.550842 0.546635 + -1.0363 1.01054 -1.63527 0.630821 -0.110549 0.768013 + -0.994768 1.04414 -1.66086 0.655605 0.0954371 0.749048 + -1.00856 1.06949 -1.67458 0.16273 0.701066 0.694281 + -1.05009 1.03582 -1.64905 0.0974265 0.735369 0.670627 + -1.09291 1.01632 -1.59089 0.526572 0.61002 0.592113 + -1.0544 0.957346 -1.67294 0.687805 -0.548067 0.47597 + -0.991716 1.03263 -1.67992 0.815287 -0.473244 0.333686 + -0.969312 1.06119 -1.7084 0.926927 -0.0756831 0.36753 + -0.988349 1.08892 -1.69963 0.365777 0.683989 0.631163 + -1.11248 1.07053 -1.70838 -0.166583 0.90673 0.387415 + -1.08014 0.917146 -1.67951 0.74554 -0.464936 0.477498 + -1.02381 0.965114 -1.71099 0.79491 -0.521387 0.310281 + -1.0014 0.993682 -1.73947 0.892418 -0.451204 -0.00241486 + -1.10836 0.891593 -1.64305 0.853521 -0.242521 0.461178 + -1.09486 0.870919 -1.70684 0.801495 -0.493602 0.337582 + -1.04955 0.924909 -1.71755 0.744193 -0.545299 0.38578 + -1.03953 0.916936 -1.75575 0.824881 -0.548452 0.137012 + -1.02065 0.95854 -1.7576 0.915138 -0.400652 0.0447345 + -1.16249 0.822434 -1.57186 0.836226 -0.343911 0.427143 + -1.12307 0.845368 -1.67038 0.836454 -0.447241 0.316734 + -1.08484 0.863034 -1.74498 0.824632 -0.459995 0.329221 + -1.03365 0.924709 -1.79081 0.894405 -0.425211 0.138694 + -1.01477 0.966219 -1.79271 0.97713 -0.191171 0.0931124 + -1.21154 0.769462 -1.53291 0.787037 -0.409205 0.461653 + -1.17212 0.792308 -1.63148 0.836245 -0.441014 0.325886 + -1.12885 0.794089 -1.71237 0.857283 -0.316273 0.406248 + -1.05344 0.863585 -1.81634 0.872638 -0.440905 0.210011 + -1.26447 0.772444 -1.46028 0.695533 -0.308164 0.649052 + -1.29789 0.714715 -1.48249 0.673517 -0.48752 0.555608 + -1.24 0.709635 -1.55049 0.754407 -0.437563 0.489294 + -1.19672 0.711416 -1.63137 0.830035 -0.332251 0.447941 + -1.32119 0.786574 -1.40995 0.688698 -0.190326 0.699622 + -1.35082 0.717703 -1.40986 0.675227 -0.414784 0.609937 + -1.36445 0.647105 -1.45278 0.645421 -0.514315 0.564723 + -1.30656 0.642106 -1.52072 0.658748 -0.509325 0.55375 + -1.25297 0.631515 -1.60298 0.721021 -0.506995 0.472319 + -1.36481 0.824607 -1.35122 0.724988 -0.153365 0.67147 + -1.39914 0.743891 -1.34262 0.667865 -0.338687 0.662757 + -1.4656 0.683465 -1.31776 0.658023 -0.446382 0.606423 + -1.41728 0.657188 -1.38505 0.61585 -0.508591 0.601717 + -1.31913 0.885966 -1.3959 0.743944 -0.0553597 0.665945 + -1.40449 0.873828 -1.30028 0.755522 -0.134008 0.641271 + -1.44277 0.781924 -1.2839 0.71458 -0.284723 0.63899 + -1.35881 0.935192 -1.34496 0.759032 -0.0386245 0.649907 + -1.43222 0.93844 -1.25339 0.76997 -0.0115449 0.637976 + -1.47412 0.841002 -1.21862 0.738598 -0.213192 0.639548 + -1.53037 0.782376 -1.18348 0.766098 -0.300331 0.568238 + -1.49902 0.723384 -1.2487 0.676639 -0.391776 0.623436 + -1.38245 1.00039 -1.32068 0.741655 0.0422017 0.669453 + -1.46009 1.01299 -1.23031 0.82379 0.000647658 0.566895 + -1.50185 0.905609 -1.17173 0.817054 -0.146961 0.557517 + -1.41032 1.07485 -1.29766 0.752916 0.0473755 0.656409 + -1.48367 1.07867 -1.18368 0.868379 0.0439774 0.493946 + -1.51686 0.973193 -1.12178 0.860304 -0.103619 0.499139 + -1.56396 0.914514 -1.06795 0.816421 -0.169329 0.552073 + -1.54895 0.846931 -1.11789 0.805782 -0.2504 0.53667 + -1.42778 1.21479 -1.28065 0.857926 0.159448 0.488405 + -1.44856 1.13419 -1.25584 0.8129 0.0627485 0.579014 + -1.51747 1.13409 -1.13427 0.895261 0.081783 0.437973 + -1.54043 1.03896 -1.07509 0.875969 -0.085484 0.474732 + -1.45892 1.26563 -1.2397 0.866108 0.153312 0.475766 + -1.48237 1.18961 -1.20643 0.839119 0.0558851 0.541069 + -1.54824 1.19931 -1.08523 0.892584 0.202536 0.402832 + -1.55596 1.11245 -1.01639 0.896302 -0.0196309 0.443009 + -1.45918 1.31928 -1.28762 0.907493 0.396119 0.139806 + -1.482 1.36422 -1.25526 0.905756 0.377442 0.192728 + -1.49134 1.31266 -1.19896 0.837718 0.160443 0.522003 + -1.51478 1.23655 -1.16574 0.833717 0.119872 0.539024 + -1.47664 1.34482 -1.35347 0.858846 0.499496 -0.11352 + -1.49947 1.38977 -1.32112 0.888233 0.452212 -0.0809087 + -1.5168 1.43611 -1.29238 0.904034 0.425647 -0.0393292 + -1.50491 1.40026 -1.23249 0.901912 0.36012 0.238472 + -1.51425 1.3487 -1.17618 0.838207 0.16343 0.520289 + -1.48146 1.32614 -1.4323 0.742308 0.629793 -0.228778 + -1.49738 1.36613 -1.38956 0.781875 0.537231 -0.316314 + -1.5245 1.42932 -1.36002 0.831078 0.470068 -0.29723 + -1.51048 1.35755 -1.41971 0.785497 0.565423 -0.251577 + -1.5376 1.42074 -1.39016 0.809508 0.487 -0.327915 + -1.58824 1.56145 -1.33468 0.864036 0.442911 -0.239315 + -1.54182 1.47566 -1.33128 0.878835 0.438414 -0.18826 + -1.4924 1.31578 -1.48496 0.682665 0.667858 -0.296536 + -1.55899 1.44397 -1.42699 0.863564 0.435221 -0.254636 + -1.60964 1.58459 -1.37157 0.944732 0.322602 -0.0583826 + -1.60153 1.60372 -1.30009 0.914593 0.385592 -0.121815 + -1.55511 1.51792 -1.29669 0.893597 0.437526 -0.100283 + -1.46548 1.23855 -1.61559 0.572906 0.758523 -0.310517 + -1.50726 1.26305 -1.64863 0.644095 0.695631 -0.318179 + -1.53418 1.34028 -1.51799 0.753159 0.579994 -0.310417 + -1.59651 1.47515 -1.4948 0.835756 0.42398 -0.34893 + -1.61771 1.62371 -1.39571 0.917012 0.326939 -0.228471 + -1.4019 1.21062 -1.58843 0.646922 0.697115 -0.309069 + -1.44425 1.20459 -1.66078 0.638012 0.737988 -0.219804 + -1.4398 1.18462 -1.73799 0.48088 0.852271 -0.205886 + -1.48964 1.19978 -1.76384 0.491435 0.835547 -0.245667 + -1.40843 1.18278 -1.6526 0.633276 0.732962 -0.24845 + -1.40398 1.16281 -1.72981 0.522368 0.846345 -0.104075 + -1.41362 1.14503 -1.86862 0.320512 0.934897 -0.152442 + -1.46347 1.16028 -1.89442 0.27376 0.926384 -0.258589 + -1.38772 1.1672 -1.63161 0.825308 0.510224 -0.241945 + -1.38199 1.14774 -1.6489 0.835776 0.54096 -0.0940225 + -1.38227 1.15146 -1.69034 0.556547 0.827417 0.0750823 + -1.37664 1.14592 -1.80136 0.36247 0.928366 -0.0821708 + -1.36011 1.12005 -1.63475 0.592442 0.803189 -0.0624442 + -1.36038 1.12376 -1.67618 0.770781 0.632918 0.0728784 + -1.35493 1.13465 -1.76184 0.683378 0.728207 0.0520413 + -1.35051 1.13019 -1.85951 0.260086 0.96343 -0.0644806 + -1.32217 1.10706 -1.64564 0.220286 0.973971 -0.053426 + -1.32173 1.1061 -1.68638 0.21761 0.975953 -0.0127332 + -1.35104 1.11445 -1.69885 0.586982 0.807809 0.0538187 + -1.34559 1.12525 -1.78456 0.898268 0.432898 0.0755937 + -1.22827 1.0919 -1.73459 0.114962 0.993313 -0.0106827 + -1.31574 1.10599 -1.7686 0.212411 0.976995 0.0190527 + -1.34506 1.11426 -1.78112 0.77047 0.632282 0.0812103 + -1.33747 1.11615 -1.8326 0.837045 0.520751 0.167849 + -1.33801 1.12714 -1.83603 0.692712 0.706621 0.144346 + -1.21204 1.08971 -1.78439 0.116011 0.993232 -0.00562076 + -1.29951 1.1038 -1.8184 0.195488 0.980549 0.0175863 + -1.32299 1.11005 -1.85383 0.418816 0.900976 0.113291 + -1.32052 1.12088 -1.90499 0.453739 0.888132 0.0730834 + -1.33303 1.12393 -1.92846 0.210548 0.975773 -0.0594717 + -1.18366 1.08628 -1.81346 0.0817664 0.996602 -0.00990603 + -1.25696 1.09743 -1.88518 0.169439 0.98513 0.0284454 + -1.28043 1.1036 -1.92066 0.277512 0.95671 0.0877068 + -1.30604 1.11478 -1.92621 0.347487 0.935136 0.0690866 + -1.18596 1.09 -1.9349 0.0767218 0.994352 0.0733329 + -1.22858 1.09393 -1.9143 0.137355 0.989622 0.0422201 + -1.26087 1.10138 -1.96022 0.223457 0.973129 0.0555531 + -1.28648 1.11256 -1.96577 0.319311 0.946757 -0.0411404 + -1.33 1.12081 -1.96347 0.159355 0.984233 -0.0767621 + -1.15105 1.08818 -1.93396 0.0325011 0.997528 0.0623048 + -1.21825 1.09746 -1.98082 0.111722 0.993739 0.000589359 + -1.29512 1.10951 -2.0009 0.184854 0.977755 -0.0991183 + -1.33863 1.11785 -1.99855 0.117618 0.982567 -0.143972 + -1.08885 1.08668 -1.91054 0.0542806 0.997954 -0.0337843 + -1.0773 1.09187 -1.97934 0.13935 0.980498 0.138586 + -1.1395 1.09346 -2.0027 -0.0165511 0.99778 0.0645019 + -1.10695 1.09107 -1.77734 -0.193431 0.980445 0.0362127 + -1.04704 1.09328 -1.87537 0.0569004 0.973453 -0.221701 + -1.02812 1.06684 -1.94899 0.656839 0.724231 0.209884 + -1.04358 1.08719 -1.98883 0.334814 0.920845 0.199859 + -1.10267 1.10541 -2.0876 -0.00308561 0.990809 0.135235 + -1.09227 1.08996 -1.73342 -0.261124 0.915849 0.305016 + -0.983915 1.11468 -1.79325 0.102135 0.983635 -0.148429 + -0.958179 1.10158 -1.80475 0.844946 0.338635 -0.413995 + -1.02131 1.08017 -1.88688 0.783676 0.443465 -0.434961 + -0.969238 1.11357 -1.74933 0.425771 0.859656 0.282329 + -0.950201 1.08593 -1.75806 0.99664 -0.0195232 0.0795413 + -1.00406 1.03856 -1.82341 0.881778 -0.332204 -0.334826 + -1.09291 1.01632 -1.59089 0.354243 0.925053 0.137072 + -1.11728 1.02629 -1.55775 0.499307 0.859589 0.108618 + -0.996081 1.02292 -1.77671 0.876835 -0.433937 -0.207024 + -1.01533 0.98769 -1.79489 0.983354 -0.179662 -0.0271248 + -1.012 0.994478 -1.82505 0.999829 -0.0134116 0.0127323 + -1.01756 1.01435 -1.84748 0.980127 0.0823714 -0.18046 + -1.03481 1.05596 -1.91095 0.999773 -0.00306452 0.0210607 + -1.01144 0.973099 -1.82282 0.987951 -0.128609 0.086098 + -1.00757 0.987186 -1.87742 0.995834 0.0198532 -0.0889959 + -1.01314 1.00706 -1.89985 0.966596 0.238096 0.094885 + -1.00645 1.01785 -1.93794 0.875372 0.325751 0.357224 + -1.01786 0.945051 -1.83084 0.950162 -0.293284 0.10572 + -1.01399 0.959138 -1.88544 0.979392 -0.176513 0.0981545 + -0.99163 0.99924 -1.9591 0.935095 0.101867 0.339441 + -0.988968 1.05418 -2.00106 0.745405 0.568094 0.348771 + -1.00443 1.07461 -2.04084 0.398694 0.888189 0.228391 + -1.03765 0.883927 -1.85637 0.93604 -0.290251 0.198955 + -1.03466 0.865062 -1.88869 0.939733 -0.188261 0.285413 + -1.011 0.940273 -1.91776 0.937055 -0.215974 0.27438 + -0.991771 0.955552 -1.96923 0.9521 -0.101055 0.288605 + -1.09745 0.79464 -1.78372 0.875019 -0.268242 0.402973 + -1.05773 0.785549 -1.86557 0.899101 -0.167006 0.404632 + -1.006 0.870142 -1.95989 0.932887 -0.157103 0.324099 + -0.986775 0.88534 -2.01142 0.946685 -0.121602 0.29833 + -1.14134 0.712286 -1.73028 0.840727 -0.314113 0.441034 + -1.10162 0.703111 -1.81219 0.830778 -0.270314 0.486557 + -1.06407 0.665688 -1.88717 0.847717 -0.277697 0.451952 + -1.02908 0.790633 -1.93678 0.921692 -0.131475 0.364963 + -1.19759 0.632303 -1.70194 0.778508 -0.460176 0.426806 + -1.16577 0.605239 -1.79147 0.737381 -0.493769 0.460935 + -1.12821 0.567733 -1.86651 0.647001 -0.573674 0.502283 + -1.09718 0.541941 -1.95623 0.685948 -0.594715 0.419274 + -1.03454 0.654822 -1.96195 0.879723 -0.263726 0.395646 + -1.27522 0.528608 -1.69214 0.715921 -0.530846 0.453497 + -1.2434 0.501544 -1.78166 0.755033 -0.560987 0.339438 + -1.22111 0.481229 -1.89808 0.675259 -0.644874 0.357998 + -1.19008 0.455437 -1.98781 0.621183 -0.669827 0.406773 + -1.30462 0.57125 -1.6108 0.653371 -0.55673 0.512989 + -1.39521 0.449102 -1.60763 0.720441 -0.496904 0.483789 + -1.36581 0.406463 -1.68898 0.71644 -0.532194 0.451092 + -1.33049 0.388747 -1.78369 0.761052 -0.5572 0.332157 + -1.35822 0.581842 -1.52854 0.656139 -0.535145 0.532073 + -1.43477 0.463087 -1.52806 0.71188 -0.458388 0.532079 + -1.51087 0.270411 -1.60753 0.745923 -0.523087 0.412285 + -1.47041 0.261263 -1.69749 0.734902 -0.55189 0.394128 + -1.4351 0.243462 -1.79225 0.731062 -0.564496 0.383267 + -1.41888 0.576279 -1.46511 0.646976 -0.496289 0.578895 + -1.49543 0.45761 -1.46457 0.752044 -0.40799 0.517661 + -1.55043 0.284485 -1.52791 0.770437 -0.476393 0.423646 + -1.64693 0.158135 -1.50386 0.728119 -0.599991 0.331442 + -1.60938 0.151428 -1.60044 0.702056 -0.62076 0.348962 + -1.47171 0.58636 -1.39737 0.693619 -0.45853 0.555556 + -1.52999 0.476495 -1.38248 0.801063 -0.349192 0.486172 + -1.57685 0.307882 -1.43463 0.806349 -0.444788 0.389828 + -1.67335 0.181532 -1.41058 0.771124 -0.541297 0.33521 + -1.51673 0.601888 -1.32347 0.73258 -0.394978 0.554364 + -1.57501 0.491937 -1.30862 0.854505 -0.282919 0.435635 + -1.6114 0.326762 -1.35253 0.840761 -0.412313 0.350883 + -1.69386 0.205535 -1.30996 0.793536 -0.536675 0.286845 + -1.77078 0.075799 -1.37565 0.68536 -0.682119 0.254942 + -1.55015 0.641811 -1.25441 0.790138 -0.360605 0.495628 + -1.59402 0.539542 -1.22688 0.908984 -0.237773 0.342362 + -1.61983 0.365541 -1.2569 0.889323 -0.339409 0.306442 + -1.70229 0.244309 -1.21432 0.79847 -0.50459 0.328383 + -1.56162 0.702814 -1.18007 0.854852 -0.28339 0.434648 + -1.60549 0.60055 -1.15255 0.907737 -0.230313 0.35067 + -1.63884 0.413152 -1.17517 0.883781 -0.29005 0.367153 + -1.71489 0.294507 -1.11826 0.805347 -0.440134 0.397113 + -1.80779 0.132344 -1.16719 0.711517 -0.611219 0.346634 + -1.58019 0.76737 -1.11449 0.85704 -0.244885 0.453336 + -1.61581 0.67097 -1.08032 0.914331 -0.19806 0.35323 + -1.65143 0.480345 -1.09594 0.885192 -0.269321 0.379343 + -1.72749 0.361699 -1.03904 0.815727 -0.38333 0.433182 + -1.59302 0.838534 -1.04755 0.857829 -0.170253 0.484916 + -1.62864 0.74213 -1.01337 0.907813 -0.148264 0.392291 + -1.66176 0.550679 -1.02377 0.894996 -0.253189 0.367256 + -1.73373 0.435792 -0.954179 0.834671 -0.365902 0.411632 + -1.8313 0.24669 -0.970242 0.726684 -0.513273 0.456597 + -1.58681 0.989069 -1.01928 0.832526 -0.176992 0.524952 + -1.61587 0.913088 -0.998879 0.718302 -0.054998 0.693554 + -1.64391 0.823498 -0.957905 0.803516 0.0356972 0.594212 + -1.66647 0.634013 -0.954109 0.893489 -0.196039 0.404038 + -1.73844 0.519127 -0.884519 0.853437 -0.31061 0.418528 + -1.60233 1.06256 -0.96058 0.600196 -0.284741 0.747454 + -1.66335 0.996747 -0.978581 0.469243 -0.157034 0.868995 + -1.69139 0.907156 -0.937606 0.867169 0.145639 0.476243 + -1.68175 0.715383 -0.898643 0.930508 -0.137929 0.339309 + -1.58673 1.17767 -0.967345 0.866091 0.107659 0.488155 + -1.63217 1.13485 -0.91298 0.53935 -0.251011 0.8038 + -1.69319 1.06903 -0.930981 0.685085 -0.268883 0.677023 + -1.71302 0.976869 -0.880152 0.966357 0.102141 0.236053 + -1.67673 0.798432 -0.840487 0.984347 -0.021866 0.174878 + -1.58645 1.25696 -1.04068 0.88288 0.265888 0.387073 + -1.62401 1.25131 -0.923105 0.859705 0.163754 0.483831 + -1.66946 1.2085 -0.86874 0.731817 -0.180123 0.657267 + -1.71522 1.12579 -0.863086 0.849517 -0.178815 0.496333 + -1.73504 1.03363 -0.812257 0.964998 0.122164 0.232066 + -1.553 1.29421 -1.1212 0.826732 0.142832 0.544163 + -1.59609 1.36052 -1.07345 0.84029 0.142386 0.523106 + -1.62539 1.32331 -0.995411 0.891507 0.26432 0.3679 + -1.66295 1.31767 -0.877832 0.880105 0.197236 0.431872 + -1.69943 1.27083 -0.806712 0.748984 -0.100641 0.654901 + -1.53056 1.3972 -1.16099 0.861567 0.170934 0.477999 + -1.56931 1.3428 -1.10596 0.786053 0.0714698 0.614014 + -1.58452 1.45584 -1.09935 0.816287 0.170745 0.551835 + -1.63139 1.42106 -1.02992 0.841445 0.168355 0.513447 + -1.66069 1.38386 -0.951877 0.886274 0.275812 0.372083 + -1.52672 1.44195 -1.2025 0.908297 0.340478 0.243046 + -1.55774 1.43811 -1.13185 0.825473 0.220466 0.519604 + -1.55391 1.48278 -1.17341 0.886322 0.332952 0.321834 + -1.57536 1.52092 -1.14547 0.884572 0.293971 0.362097 + -1.60743 1.48643 -1.07733 0.81361 0.189247 0.549749 + -1.5386 1.4778 -1.26239 0.91024 0.410397 0.0551191 + -1.55989 1.52355 -1.22323 0.909299 0.401645 0.108891 + -1.5764 1.56368 -1.25754 0.903344 0.42881 -0.00961589 + -1.58134 1.56168 -1.19528 0.92928 0.348741 0.121733 + -1.59512 1.59787 -1.17855 0.918722 0.344777 0.19256 + -1.59827 1.55151 -1.12345 0.85495 0.291415 0.429112 + -1.63962 1.53551 -1.04434 0.80926 0.215384 0.546542 + -1.61323 1.63106 -1.28145 0.950067 0.307948 0.0504122 + -1.5881 1.59102 -1.23889 0.923268 0.383847 -0.015392 + -1.60188 1.6272 -1.22216 0.943095 0.332503 -0.00366988 + -1.61773 1.64263 -1.16089 0.921459 0.298711 0.248366 + -1.62087 1.59636 -1.10574 0.850282 0.294279 0.436372 + -1.63079 1.69475 -1.26975 0.965671 0.259755 -0.00262169 + -1.64063 1.746 -1.29753 0.981808 0.18736 -0.0308098 + -1.65095 1.83516 -1.20736 0.987992 0.134976 0.0751928 + -1.64342 1.75405 -1.19387 0.968595 0.192593 0.157261 + -1.61944 1.69088 -1.21046 0.949872 0.31088 0.033105 + -1.64171 1.70581 -1.14431 0.904836 0.277634 0.322786 + -1.6487 1.78512 -1.32169 0.958587 0.199575 -0.203176 + -1.67051 1.94782 -1.27149 0.967009 0.168724 -0.190856 + -1.66079 1.88642 -1.23514 0.988287 0.139971 -0.0608062 + -1.6578 1.70994 -1.38728 0.685234 0.393604 -0.612805 + -1.65962 1.79027 -1.34981 0.801938 0.270827 -0.532492 + -1.68143 1.95297 -1.29961 0.704724 0.300802 -0.642559 + -1.68429 2.08831 -1.22682 0.967528 0.102554 -0.231025 + -1.67457 2.027 -1.19043 0.99549 0.0922849 0.0219888 + -1.64283 1.63651 -1.43129 0.642264 0.483408 -0.594822 + -1.67945 1.64718 -1.44516 -0.139892 0.500138 -0.854571 + -1.68468 1.72955 -1.40063 -0.00451575 0.429118 -0.903237 + -1.6865 1.80988 -1.36317 0.0242019 0.391968 -0.91966 + -1.62162 1.48795 -1.53037 0.66687 0.527203 -0.526633 + -1.66448 1.57375 -1.48918 -0.128547 0.52756 -0.839736 + -1.72826 1.47856 -1.47591 -0.748902 0.314693 -0.583193 + -1.72777 1.56512 -1.43703 -0.708755 0.288441 -0.643792 + -1.5717 1.37146 -1.5858 0.745003 0.560257 -0.362053 + -1.61248 1.3985 -1.60823 0.581359 0.5953 -0.554652 + -1.65498 1.50123 -1.54717 -0.108795 0.619411 -0.777492 + -1.71876 1.40596 -1.53395 -0.754409 0.329249 -0.567858 + -1.56679 1.29244 -1.68874 0.601428 0.674473 -0.428218 + -1.60758 1.31948 -1.71117 0.326133 0.720529 -0.611944 + -1.63912 1.34099 -1.68663 -0.382134 0.670327 -0.636109 + -1.64584 1.41169 -1.62508 -0.153842 0.639864 -0.752932 + -1.71504 1.32517 -1.58463 -0.798321 0.327842 -0.505176 + -1.54917 1.22917 -1.80395 0.260681 0.875349 -0.407196 + -1.60006 1.21441 -1.83039 -0.172425 0.799119 -0.575915 + -1.60983 1.26131 -1.77081 -0.355723 0.662634 -0.659073 + -1.64137 1.28281 -1.74627 -0.499421 0.596737 -0.628079 + -1.70833 1.25447 -1.64618 -0.826482 0.323048 -0.461051 + -1.53871 1.17114 -1.89964 0.0665979 0.897041 -0.436901 + -1.5896 1.15638 -1.92608 -0.397037 0.790209 -0.466831 + -1.62797 1.10647 -1.93902 -0.765356 0.504198 -0.400018 + -1.62972 1.16616 -1.86822 -0.640316 0.563034 -0.522483 + -1.63948 1.21306 -1.80864 -0.639744 0.540692 -0.546242 + -1.43855 1.1159 -2.01876 0.0727262 0.966674 -0.245464 + -1.51379 1.12676 -2.02398 -0.0953847 0.923993 -0.370322 + -1.57138 1.1026 -2.02832 -0.51876 0.729184 -0.446295 + -1.59193 1.1027 -1.9941 -0.673649 0.595491 -0.437708 + -1.38557 1.11758 -2.01527 0.041107 0.979143 -0.198972 + -1.39932 1.0879 -2.16447 -0.115984 0.958613 -0.260017 + -1.4908 1.0756 -2.14036 -0.301435 0.856809 -0.418347 + -1.54839 1.05144 -2.14471 -0.489676 0.727995 -0.479833 + -1.38749 1.1293 -1.92677 0.203054 0.973422 -0.105919 + -1.38446 1.12618 -1.96176 -0.235509 0.964317 -0.120943 + -1.33975 1.10917 -2.0521 0.0800733 0.983705 -0.160977 + -1.34634 1.0895 -2.16103 -0.0357518 0.987175 -0.155588 + -1.29729 1.10744 -2.02971 0.135192 0.984821 -0.108859 + -1.3294 1.10126 -2.095 0.0444298 0.988207 -0.146535 + -1.30621 1.0951 -2.14454 -0.058199 0.996153 -0.0655115 + -1.32314 1.08343 -2.21052 -0.17548 0.979131 -0.102519 + -1.31599 1.07477 -2.28572 -0.385102 0.894613 -0.226635 + -1.22043 1.09538 -2.00962 0.228125 0.966454 -0.118005 + -1.28695 1.09954 -2.07262 0.178507 0.97375 -0.141231 + -1.27041 1.09363 -2.08299 0.250065 0.960632 -0.121053 + -1.28136 1.09502 -2.12479 0.0811391 0.9951 0.0565034 + -1.29086 1.09788 -2.18676 -0.187011 0.982159 -0.0197482 + -1.20388 1.08947 -2.01999 0.0361177 0.983928 -0.174876 + -1.22956 1.08229 -2.07395 0.133266 0.984258 -0.116087 + -1.24051 1.08368 -2.11575 0.128339 0.988893 0.0749617 + -1.24092 1.09246 -2.16535 0.0765288 0.978473 0.19166 + -1.26601 1.0978 -2.167 0.0684345 0.990901 0.115898 + -1.16882 1.09152 -2.02854 -0.103222 0.993759 -0.0422805 + -1.19449 1.08434 -2.08249 -0.164808 0.986325 -0.00108854 + -1.20317 1.08477 -2.11703 -0.127966 0.986048 0.106457 + -1.13199 1.10347 -2.11344 -0.2288 0.968857 0.0946935 + -1.14066 1.10399 -2.14793 -0.244385 0.951314 0.187826 + -1.20358 1.09346 -2.16669 -0.125805 0.955117 0.268189 + -1.20362 1.1043 -2.19567 -0.238142 0.889549 0.38986 + -1.23619 1.1012 -2.2137 -0.0647689 0.923384 0.378375 + -1.07193 1.13033 -2.19796 -0.024249 0.945075 0.325953 + -1.14071 1.11474 -2.17695 -0.167989 0.918081 0.359036 + -1.20313 1.12802 -2.23314 -0.239696 0.884025 0.401305 + -1.2357 1.12492 -2.25118 -0.444914 0.880695 0.162567 + -1.26129 1.10663 -2.2153 -0.169965 0.971981 0.162373 + -1.06896 1.10064 -2.09713 0.187102 0.960629 0.205391 + -1.04583 1.10626 -2.12786 0.0440734 0.9459 0.321452 + -1.03487 1.11922 -2.16291 -0.0361829 0.953847 0.298104 + -0.974548 1.14311 -2.24689 0.145567 0.960289 0.238026 + -1.08854 1.16718 -2.28678 -0.0115867 0.958846 0.283689 + -1.13452 1.168 -2.2984 -0.256421 0.949666 0.179949 + -1.11791 1.13115 -2.20958 -0.173721 0.914506 0.365375 + -0.9813 1.08014 -2.07162 0.294152 0.784897 0.545355 + -0.951245 1.1095 -2.11168 0.257384 0.809139 0.52825 + -0.940285 1.12247 -2.14673 0.328488 0.894388 0.303587 + -0.937486 1.13191 -2.21189 0.332247 0.928216 0.167415 + -0.954909 1.05443 -2.06828 0.804878 0.278694 0.523929 + -0.924853 1.0837 -2.10838 0.84013 0.22087 0.495377 + -0.913843 1.10392 -2.15981 0.926368 0.335705 0.17072 + -0.911044 1.11345 -2.22492 0.973042 0.225081 0.0502845 + -0.914023 1.13006 -2.28628 0.918688 0.389675 0.0645338 + -0.974143 1.03556 -2.02221 0.914424 0.118565 0.387003 + -0.950424 1.01234 -2.07959 0.936629 -0.07147 0.342955 + -0.931314 1.03687 -2.12927 0.957038 -0.156572 0.244057 + -0.920304 1.05709 -2.18069 0.992451 -0.122179 -0.010626 + -0.926823 1.07678 -2.2384 0.980467 -0.183094 -0.0718396 + -0.969659 0.993571 -2.03348 0.947023 -0.0449454 0.318006 + -0.952612 0.969858 -2.09181 0.945446 -0.12635 0.300279 + -0.933501 0.994386 -2.14149 0.970845 -0.132088 0.200033 + -0.926781 0.999793 -2.18866 0.987968 -0.15197 -0.0287218 + -0.969799 0.949883 -2.04361 0.952234 -0.0972612 0.289467 + -0.947048 0.922664 -2.13107 0.967483 -0.155459 0.199522 + -0.940327 0.928066 -2.17822 0.982403 -0.103286 0.155618 + -0.9333 1.01957 -2.2463 0.998326 -0.0233835 0.052892 + -0.964235 0.902602 -2.08292 0.951822 -0.118642 0.282771 + -0.977004 0.797029 -2.08306 0.955386 -0.097933 0.27865 + -0.953089 0.796417 -2.1604 0.963165 -0.0675538 0.260289 + -0.923287 0.9505 -2.24968 0.979987 0.0275919 0.19714 + -0.999544 0.779769 -2.01156 0.937617 -0.10709 0.330765 + -1.00511 0.628134 -2.04333 0.895379 -0.263211 0.359189 + -0.9812 0.627521 -2.12066 0.92832 -0.210969 0.306128 + -0.954739 0.613244 -2.20594 0.932296 -0.195628 0.304228 + -0.936049 0.81885 -2.23186 0.969981 -0.0499561 0.237994 + -1.06776 0.515253 -2.03761 0.665001 -0.596063 0.44998 + -1.03642 0.491844 -2.11246 0.727047 -0.546295 0.41589 + -1.00996 0.477562 -2.19773 0.794171 -0.449285 0.40919 + -0.987213 0.44724 -2.26101 0.735311 -0.410456 0.539299 + -0.934241 0.615491 -2.27583 0.918927 -0.11539 0.377172 + -1.16227 0.429164 -2.0737 0.603788 -0.668898 0.433607 + -1.13093 0.405755 -2.14855 0.504108 -0.629814 0.590939 + -1.10118 0.368082 -2.1967 0.581672 -0.573917 0.576434 + -1.07843 0.337759 -2.25998 0.66629 -0.604275 0.436931 + -1.2779 0.348663 -1.99567 0.754261 -0.531393 0.385631 + -1.2501 0.32239 -2.08156 0.73718 -0.521743 0.42936 + -1.21894 0.297052 -2.16027 0.650316 -0.512833 0.560439 + -1.18919 0.259384 -2.20843 0.579813 -0.564258 0.587732 + -1.14869 0.247773 -2.28572 0.681187 -0.608254 0.407444 + -1.3082 0.368428 -1.9001 0.787299 -0.536785 0.30335 + -1.36476 0.21381 -1.97769 0.768104 -0.518164 0.376194 + -1.32614 0.201938 -2.06793 0.754365 -0.510653 0.412513 + -1.29498 0.176688 -2.14659 0.725484 -0.542638 0.423339 + -1.25635 0.164224 -2.23701 0.677059 -0.602807 0.422155 + -1.39505 0.233576 -1.88213 0.76082 -0.542501 0.356153 + -1.48207 0.129597 -1.87343 0.682624 -0.634174 0.363108 + -1.43835 0.122355 -1.96969 0.68794 -0.625107 0.368754 + -1.39973 0.110482 -2.05993 0.670276 -0.656216 0.34657 + -1.35845 0.104011 -2.15432 0.639467 -0.678156 0.362197 + -1.52211 0.139485 -1.78356 0.684211 -0.630122 0.367153 + -1.54867 0.072714 -1.86511 0.542206 -0.784721 0.300376 + -1.50496 0.06539 -1.96142 0.523912 -0.80173 0.287656 + -1.46343 0.05873 -2.06489 0.500826 -0.823959 0.265075 + -1.42215 0.052258 -2.15928 0.501515 -0.825834 0.257838 + -1.56892 0.142187 -1.69044 0.686286 -0.630615 0.362403 + -1.60296 0.071117 -1.76894 0.549244 -0.785052 0.286397 + -1.65748 0.043559 -1.77041 0.153631 -0.987522 0.0346111 + -1.60319 0.045063 -1.86662 0.143323 -0.986081 0.0842797 + -1.55544 0.042446 -1.96028 0.12878 -0.985175 0.113338 + -1.70267 0.06714 -1.57905 0.598631 -0.750262 0.280621 + -1.64978 0.073826 -1.67583 0.589737 -0.751714 0.29519 + -1.70933 0.036278 -1.6716 0.206748 -0.977039 0.0514759 + -1.69304 0.049387 -1.7757 -0.22278 -0.96006 -0.169277 + -1.645 0.053394 -1.87724 -0.25473 -0.957594 -0.134631 + -1.74022 0.073933 -1.48242 0.644235 -0.729187 0.230752 + -1.76223 0.029679 -1.57477 0.337237 -0.937576 0.0849903 + -1.74489 0.042194 -1.67685 -0.191787 -0.960279 -0.202689 + -1.72049 0.064447 -1.80299 -0.35515 -0.905699 -0.231467 + -1.83471 0.025187 -1.36499 0.436433 -0.8833 0.171193 + -1.80415 0.023321 -1.47176 0.381871 -0.917714 0.109436 + -1.79512 0.025566 -1.58045 -0.0922438 -0.985356 -0.143401 + -1.82149 0.041109 -1.60877 -0.442671 -0.849374 -0.287412 + -1.77126 0.05782 -1.70511 -0.296105 -0.915917 -0.270956 + -1.86011 0.040048 -1.25573 0.447953 -0.849213 0.279599 + -1.86908 0.015865 -1.36964 -0.120348 -0.991968 0.0389295 + -1.83704 0.019212 -1.47744 -0.121295 -0.989967 -0.0724768 + -1.79129 0.099711 -1.27507 0.710707 -0.63697 0.298606 + -1.87661 0.072682 -1.14785 0.490809 -0.791054 0.365158 + -1.89448 0.030728 -1.26038 -0.0224925 -0.981886 0.188132 + -1.89584 0.031306 -1.39999 -0.544022 -0.826537 -0.14449 + -1.8638 0.034655 -1.50779 -0.533683 -0.81644 -0.220474 + -1.8892 0.11967 -1.04724 0.491107 -0.73462 0.468132 + -1.91654 0.057357 -1.15051 -0.0664251 -0.937121 0.342626 + -1.94594 0.060274 -1.18596 -0.424581 -0.887641 0.178394 + -1.92388 0.03373 -1.29579 -0.512177 -0.858808 -0.0111148 + -1.82039 0.18254 -1.07113 0.715962 -0.563761 0.411792 + -1.90011 0.183815 -0.946342 0.40796 -0.714354 0.568566 + -1.92914 0.104254 -1.04994 -0.0017037 -0.859972 0.510339 + -1.90442 0.264828 -0.848658 0.407666 -0.684278 0.604626 + -1.93193 0.175895 -0.951423 -0.126213 -0.782923 0.609182 + -1.96125 0.164999 -0.98295 -0.4823 -0.704669 0.520412 + -1.95845 0.09336 -1.08147 -0.445979 -0.814433 0.371216 + -1.83755 0.320778 -0.885367 0.743809 -0.490286 0.454277 + -1.90238 0.345574 -0.758916 0.252848 -0.654547 0.712486 + -1.93624 0.256906 -0.853739 -0.186993 -0.718289 0.670145 + -1.83552 0.40161 -0.795576 0.757055 -0.449723 0.473937 + -1.9005 0.439095 -0.683499 0.22376 -0.574554 0.787286 + -1.93979 0.349147 -0.769904 -0.397779 -0.591454 0.701395 + -1.96402 0.330959 -0.803601 -0.719051 -0.454278 0.525925 + -1.96047 0.238717 -0.887436 -0.529062 -0.635927 0.561863 + -1.73691 0.605799 -0.81344 0.879357 -0.306427 0.364464 + -1.83398 0.488196 -0.724546 0.757838 -0.400816 0.514809 + -1.89473 0.542755 -0.617445 0.266518 -0.504582 0.821198 + -1.9379 0.44258 -0.694537 -0.441434 -0.515706 0.734291 + -1.73189 0.688842 -0.755276 0.882044 -0.271597 0.385011 + -1.82821 0.591858 -0.658491 0.746126 -0.372853 0.551613 + -1.89444 0.652219 -0.557439 0.223468 -0.454549 0.862234 + -1.93576 0.547198 -0.624538 -0.425058 -0.461598 0.778622 + -1.69835 0.868144 -0.783033 0.971882 0.0827049 0.220466 + -1.73465 0.775569 -0.692687 0.899378 -0.205636 0.385789 + -1.83097 0.678666 -0.59585 0.702944 -0.354677 0.616502 + -1.89441 0.764101 -0.504826 0.211403 -0.429864 0.877796 + -1.93547 0.65666 -0.564533 -0.489309 -0.39302 0.778532 + -1.72244 0.926738 -0.699321 0.969121 0.0967503 0.226811 + -1.75873 0.834162 -0.608975 0.856447 -0.241278 0.456381 + -1.83094 0.790462 -0.543286 0.675589 -0.349146 0.649366 + -1.90827 0.87039 -0.446126 0.0923059 -0.552086 0.828662 + -1.94212 0.77194 -0.513802 -0.504601 -0.426751 0.750508 + -1.76018 1.08757 -0.733287 0.979458 0.113183 0.166886 + -1.74758 0.980684 -0.62036 0.954768 0.111829 0.275521 + -1.78124 0.914346 -0.53626 0.856383 -0.147809 0.494732 + -1.85344 0.870648 -0.470571 0.553392 -0.437721 0.708631 + -1.74518 1.18812 -0.801049 0.879133 -0.139851 0.455596 + -1.77403 1.13592 -0.650637 0.969242 0.107163 0.221555 + -1.78834 1.03441 -0.536214 0.936855 0.102752 0.334281 + -1.822 0.968071 -0.452114 0.79048 -0.269115 0.550198 + -1.88088 0.964924 -0.39846 0.502809 -0.456807 0.733832 + -1.74325 1.34093 -0.758132 0.887192 0.0441054 0.459288 + -1.75903 1.23639 -0.718449 0.962019 -0.0014114 0.272979 + -1.78886 1.28967 -0.649536 0.944103 0.0596126 0.324217 + -1.80398 1.18699 -0.568694 0.962772 0.0990288 0.251521 + -1.81829 1.08548 -0.45427 0.932449 0.0646542 0.35547 + -1.70677 1.38786 -0.829211 0.871686 0.241045 0.426687 + -1.7464 1.44765 -0.780767 0.896455 0.259433 0.359254 + -1.77308 1.39422 -0.689219 0.904058 0.108271 0.41347 + -1.70032 1.44373 -0.903383 0.876662 0.307219 0.370242 + -1.74034 1.49789 -0.858394 0.866347 0.341449 0.364492 + -1.78704 1.49931 -0.716844 0.874499 0.342764 0.343167 + -1.81373 1.44579 -0.625345 0.924458 0.191136 0.329916 + -1.66357 1.47014 -0.99693 0.838241 0.195143 0.509187 + -1.70359 1.5243 -0.951933 0.829102 0.26667 0.491403 + -1.78188 1.54323 -0.805916 0.828395 0.447641 0.336719 + -1.82859 1.54464 -0.664366 0.848237 0.439456 0.295589 + -1.66809 1.57701 -1.02522 0.792729 0.263704 0.549583 + -1.68527 1.62043 -1.02003 0.763601 0.279338 0.582137 + -1.72078 1.56773 -0.946754 0.786063 0.263578 0.559135 + -1.74954 1.58263 -0.912958 0.807513 0.344869 0.478527 + -1.83001 1.59114 -0.762101 0.826915 0.459996 0.323443 + -1.64934 1.63786 -1.08662 0.833499 0.27127 0.481344 + -1.67123 1.69079 -1.07069 0.812778 0.251001 0.525729 + -1.70927 1.65192 -1.00797 0.766288 0.2652 0.585211 + -1.73804 1.66673 -0.974226 0.80212 0.212312 0.558147 + -1.79767 1.63046 -0.8692 0.811469 0.339352 0.475772 + -1.6636 1.75882 -1.12833 0.940747 0.158885 0.299585 + -1.67721 1.82691 -1.10747 0.904157 0.104037 0.414339 + -1.69524 1.72227 -1.05862 0.791299 0.191216 0.58076 + -1.71156 1.78375 -1.0419 0.836549 0.109677 0.536802 + -1.75646 1.70307 -0.956964 0.800844 0.182837 0.57028 + -1.65796 1.81516 -1.16071 0.960048 0.102709 0.260307 + -1.67156 1.88334 -1.1398 0.949171 0.0938131 0.300456 + -1.69353 1.88847 -1.0907 0.908299 0.0581232 0.414264 + 1.09292 1.01632 -1.59089 0.36811 -0.929741 0.00873225 + 1.24544 1.07804 -1.44958 0.368108 -0.929742 0.00873484 + 1.1173 1.02629 -1.55774 0.36811 -0.929741 0.00873143 + -1.09291 1.01632 -1.59089 -0.367616 -0.92993 0.00940683 + -1.11728 1.02629 -1.55775 -0.367616 -0.92993 0.00940681 + -1.24542 1.07804 -1.44959 -0.367617 -0.92993 0.00940625 + 1.93239 2.72679 -0.741506 -0.916 0.0382739 0.399347 + 1.86777 2.79456 -0.863879 0.112702 0.880319 0.4608 + 1.82515 2.77478 -0.886633 -0.729584 0.436691 0.526317 + 1.80133 2.74089 -0.909921 -0.892707 0.165894 0.41899 + 1.81726 2.72235 -0.875219 -0.845523 0.175199 0.504377 + 1.86198 2.8063 -0.896229 0.50297 0.83669 -0.216727 + 1.85923 2.80544 -0.885537 -0.0592395 0.92662 0.371303 + 1.81661 2.78567 -0.908291 -0.743352 0.45415 0.491097 + 1.79003 2.7526 -0.944002 -0.907992 0.158258 0.38795 + 1.78061 2.68483 -0.955633 -0.949351 0.137416 0.282574 + 1.82875 2.78366 -0.959199 0.561422 0.544702 -0.62298 + 1.80795 2.79902 -0.949217 -0.187596 0.917246 -0.35138 + 1.8052 2.79816 -0.938525 -0.646271 0.729673 0.223407 + 1.77862 2.76509 -0.974238 -0.905423 0.40769 0.118315 + 1.80458 2.75174 -1.00111 0.472688 0.47962 -0.739278 + 1.78378 2.76702 -0.991191 -0.396033 0.746265 -0.535019 + 1.78383 2.69045 -1.04735 0.444954 0.377498 -0.812103 + 1.76305 2.71127 -1.03682 -0.47726 0.585845 -0.654987 + 1.75789 2.70925 -1.01992 -0.963661 0.259097 0.0650122 + 1.7693 2.69654 -0.989714 -0.936065 0.056336 0.347288 + 1.76503 2.61621 -1.08778 0.330892 0.303752 -0.893446 + 1.74425 2.63695 -1.0773 -0.626099 0.41643 -0.659232 + 1.74104 2.63256 -1.0577 -0.984457 0.129693 0.118423 + 1.75246 2.61995 -1.02745 -0.950653 0.0442371 0.307086 + 1.76075 2.60809 -0.991314 -0.972834 0.0960788 0.210627 + 1.74268 2.5277 -1.12287 0.0477392 0.320426 -0.94607 + 1.7312 2.54263 -1.10692 -0.809607 0.320956 -0.491452 + 1.728 2.53824 -1.08732 -0.985972 0.104142 0.130439 + 1.73941 2.52038 -1.0578 -0.950493 0.0418529 0.307916 + 1.7477 2.50862 -1.02162 -0.978792 0.0827069 0.187419 + 1.72818 2.43651 -1.15392 0.0810189 0.330372 -0.940367 + 1.7167 2.45152 -1.13792 -0.854077 0.287388 -0.433546 + 1.7122 2.432 -1.11812 -0.981024 0.0939114 0.169625 + 1.72362 2.41406 -1.08864 -0.950572 0.0560772 0.305399 + 1.73003 2.38788 -1.0561 -0.974624 0.0962894 0.202078 + 1.77005 2.3569 -1.13484 0.713429 0.144014 -0.685769 + 1.72075 2.34607 -1.17588 0.391001 0.21588 -0.894714 + 1.70418 2.37334 -1.1703 -0.650951 0.280336 -0.70546 + 1.69969 2.35382 -1.15051 -0.990737 0.111569 0.0774106 + 1.76262 2.26646 -1.1568 0.658389 0.163777 -0.734643 + 1.71276 2.24476 -1.2068 0.388641 0.245919 -0.887965 + 1.6962 2.27211 -1.20117 -0.564513 0.2812 -0.776049 + 1.68711 2.23536 -1.18593 -0.993446 0.0838867 -0.0776394 + 1.70018 2.27691 -1.12029 -0.973089 0.0769613 0.217197 + 1.75792 2.17579 -1.18895 0.667364 0.202865 -0.716569 + 1.7067 2.15597 -1.23461 0.23055 0.28228 -0.931217 + 1.69337 2.12496 -1.24211 -0.648277 0.243186 -0.721525 + 1.68429 2.08831 -1.22682 -0.981199 0.119198 -0.151789 + 1.68761 2.15846 -1.15573 -0.995449 0.0538875 0.0785941 + 1.8141 1.95582 -1.19674 0.771757 0.171607 -0.612325 + 1.75186 2.08692 -1.21682 0.642961 0.212671 -0.73578 + 1.70639 2.07934 -1.25929 0.253922 0.304421 -0.918069 + 1.69305 2.04842 -1.26673 -0.0811285 0.336144 -0.93831 + 1.68143 1.95297 -1.29961 -0.704906 0.297907 -0.643707 + 1.88335 1.79572 -1.12164 0.871595 0.126337 -0.473668 + 1.80276 1.87013 -1.23573 0.775056 0.188371 -0.603162 + 1.74052 2.00132 -1.25576 0.665366 0.235785 -0.708303 + 1.70175 1.99203 -1.29306 0.152272 0.337195 -0.929039 + 1.69013 1.89658 -1.32594 0.0329159 0.343605 -0.938537 + 1.95992 1.51335 -1.04196 0.932547 0.176951 -0.314714 + 1.87763 1.70717 -1.16687 0.873451 0.157859 -0.460612 + 1.7962 1.78133 -1.27253 0.774396 0.200558 -0.600073 + 1.73589 1.91402 -1.28954 0.632478 0.238087 -0.737079 + 2.02186 1.46779 -0.887253 0.94337 0.137798 -0.301768 + 2.02129 1.37888 -0.937849 0.946085 0.178483 -0.27031 + 1.96479 1.42748 -1.09262 0.919534 0.202505 -0.33682 + 1.87107 1.61838 -1.20367 0.859476 0.181911 -0.477713 + 1.79399 1.69277 -1.30653 0.783743 0.223034 -0.579657 + 2.06017 1.29964 -0.841612 0.963235 0.135786 -0.231821 + 2.05816 1.21379 -0.905509 0.966162 0.135598 -0.219419 + 2.02617 1.29301 -0.988521 0.949195 0.178161 -0.2594 + 1.96847 1.33642 -1.13131 0.913559 0.196022 -0.356349 + 1.87474 1.52722 -1.2424 0.870186 0.218854 -0.441452 + 2.08967 1.35177 -0.684508 0.980638 0.0678055 -0.183716 + 2.08309 1.26324 -0.753163 0.982409 0.074765 -0.171124 + 2.08108 1.17739 -0.817061 0.988014 0.0492373 -0.146304 + 2.05549 1.1299 -0.964603 0.971445 0.0808971 -0.223049 + 2.02351 1.20911 -1.04761 0.945827 0.155188 -0.285182 + 2.10357 1.35566 -0.589833 0.985757 0.040358 -0.163258 + 2.09699 1.26712 -0.658488 0.993712 -0.000132064 -0.111969 + 2.08871 1.18155 -0.736669 0.996009 -0.00997451 -0.0886932 + 2.07962 1.08929 -0.804875 0.995133 -0.077164 -0.0612927 + 2.07198 1.08521 -0.885208 0.990669 -0.0184381 -0.135034 + 2.14132 1.44162 -0.358728 0.979014 -0.170212 -0.112072 + 2.1263 1.3696 -0.449178 0.990215 -0.0964402 -0.100859 + 2.10602 1.28468 -0.5331 0.987303 -0.156358 -0.0280198 + 2.09775 1.19911 -0.611281 0.994332 -0.105224 -0.0152324 + 2.16917 1.53095 -0.296056 0.970738 -0.0371363 -0.237253 + 2.17486 1.49982 -0.209326 0.956756 -0.283565 -0.064881 + 2.14119 1.40637 -0.285263 0.974198 -0.217438 -0.0604918 + 2.12091 1.32145 -0.369194 0.967122 -0.253942 0.0137075 + 2.09766 1.23015 -0.449251 0.979001 -0.202001 0.0274191 + 2.17995 1.62481 -0.232215 0.924273 -0.00134944 -0.381731 + 2.2027 1.58923 -0.146599 0.946364 -0.21384 -0.242214 + 2.23459 1.63726 -0.042976 0.871473 -0.480251 0.0994638 + 2.18673 1.53689 -0.099744 0.89042 -0.438547 0.121769 + 2.15307 1.44336 -0.175734 0.923469 -0.377588 0.0680578 + 2.13064 1.67626 -0.328739 0.908047 0.137683 -0.395594 + 2.17853 1.69854 -0.236123 0.852335 0.0211165 -0.52257 + 2.20713 1.69783 -0.193899 0.838437 -0.0222997 -0.544542 + 2.25308 1.68695 -0.118641 0.913854 -0.256464 -0.314797 + 2.28498 1.73488 -0.015069 0.863761 -0.501686 -0.0472033 + 2.08649 1.75651 -0.414333 0.941138 0.149615 -0.303108 + 2.1181 1.74126 -0.341513 0.899235 0.173892 -0.401419 + 2.166 1.76363 -0.248856 0.814259 0.2293 -0.533295 + 2.25276 1.80374 -0.126729 0.74387 0.255286 -0.617646 + 2.28136 1.80294 -0.084555 0.80767 -0.122768 -0.576712 + 2.1182 1.78343 -0.313159 0.84332 0.437863 -0.311589 + 2.14095 1.79924 -0.241539 0.524803 0.72091 -0.452627 + 2.17356 1.80731 -0.204712 0.475833 0.696268 -0.537395 + 2.17591 1.86453 -0.096423 -0.0647697 0.957956 -0.27951 + 2.20852 1.87268 -0.059546 0.0192487 0.925546 -0.378146 + 2.26032 1.84742 -0.082585 0.339512 0.733387 -0.588961 + 2.30147 1.86921 -0.036331 0.147606 0.602991 -0.783973 + 2.31679 1.83824 -0.046093 0.406966 0.180917 -0.895348 + 2.15513 1.8594 -0.07235 -0.325661 0.872809 -0.363523 + 2.24968 1.89447 -0.013292 0.0940125 0.61456 -0.783248 + 2.33587 1.87955 -0.031042 0.497156 0.502094 -0.707628 + 2.35118 1.84867 -0.040755 0.740308 0.0524998 -0.670215 + 2.04625 1.81044 -0.084535 -0.29816 0.796579 -0.525892 + 2.14399 1.89124 -0.011488 -0.426955 0.672222 -0.604836 + 2.15986 1.95106 0.0341 -0.269385 0.585088 -0.764921 + 2.19351 1.9624 0.028866 -0.19832 0.533223 -0.822401 + 2.23918 1.92694 0.002671 0.000354123 0.505196 -0.863005 + 1.98549 1.76989 -0.0955 -0.587841 0.68839 -0.424925 + 2.06493 1.93633 0.036612 -0.195793 0.646177 -0.737644 + 2.08081 1.99615 0.0822 -0.248424 0.504436 -0.82694 + 2.10964 2.04865 0.097671 -0.238838 0.542146 -0.805627 + 2.14329 2.05998 0.092438 -0.250881 0.672396 -0.696378 + 1.96656 1.69425 -0.164895 -0.762686 0.585145 -0.275527 + 1.90108 1.7297 -0.05469 -0.416517 0.642807 -0.642894 + 2.00417 1.89569 0.025602 -0.345405 0.624199 -0.700765 + 1.9399 1.94676 0.091551 -0.284117 0.614465 -0.73601 + 2.03839 2.02387 0.109794 -0.271635 0.449645 -0.850902 + 1.95085 1.65504 -0.247183 -0.878572 0.446154 -0.170463 + 1.88215 1.65406 -0.124082 -0.780122 0.366224 -0.507238 + 1.85621 1.7471 -0.020024 -0.479762 0.468106 -0.742095 + 1.95931 1.91309 0.060267 -0.320211 0.539667 -0.778604 + 1.97722 1.697 -0.383658 -0.947737 0.305239 0.0928613 + 1.94178 1.60443 -0.321116 -0.898011 0.439216 -0.0257884 + 1.90366 1.58585 -0.184941 -0.92423 0.210981 -0.318253 + 1.92188 1.68619 -0.662742 -0.868341 0.413427 0.273975 + 1.94453 1.65515 -0.450362 -0.889792 0.427568 0.15955 + 1.90903 1.55894 -0.395126 -0.91421 0.39655 0.0834777 + 1.89458 1.53524 -0.258873 -0.954281 0.295487 -0.045118 + 1.88155 1.734 -0.804341 -0.794698 0.347802 0.497482 + 1.87312 1.63301 -0.700431 -0.829292 0.472889 0.297742 + 1.91178 1.60975 -0.524332 -0.903729 0.362156 0.228289 + 1.88306 1.51248 -0.474651 -0.891369 0.404275 0.204997 + 1.88468 1.48434 -0.340922 -0.971865 0.229913 0.0511796 + 1.92426 1.76755 -0.761852 -0.854154 0.29644 0.427252 + 1.81558 1.806 -0.914846 -0.740293 0.142317 0.657048 + 1.8328 1.68082 -0.84203 -0.808046 0.323488 0.492359 + 1.83001 1.59114 -0.762101 -0.826089 0.462812 0.321531 + 1.86867 1.56779 -0.586052 -0.844081 0.45369 0.285819 + 1.85829 1.83954 -0.872349 -0.723624 0.176787 0.667169 + 1.82242 1.95205 -0.922019 -0.597101 0.00831807 0.802123 + 1.78843 2.05003 -0.946326 -0.823241 -0.0835126 0.561516 + 1.77205 1.97564 -0.98287 -0.795458 0.0273482 0.605391 + 1.79158 1.75343 -0.929793 -0.779573 0.181061 0.599569 + 1.89937 1.94763 -0.852761 -0.777405 -0.0751455 0.624496 + 1.78249 2.30397 -0.901962 -0.855789 -0.0775616 0.511478 + 1.76337 2.3391 -0.950211 -0.922985 -0.04299 0.382427 + 1.74699 2.26462 -0.986805 -0.885803 -0.0371201 0.462575 + 1.77868 2.43366 -0.894787 -0.862155 -0.034492 0.505469 + 1.75957 2.4688 -0.943045 -0.945401 0.024567 0.324983 + 1.73501 2.3795 -1.01098 -0.96367 0.0425334 0.263687 + 1.72145 2.09212 -1.04902 -0.872722 -0.00981404 0.488119 + 1.74805 1.92307 -0.997825 -0.782443 0.0616857 0.61966 + 1.79348 2.48173 -0.873041 -0.788227 0.0169487 0.615151 + 1.77315 2.56887 -0.917576 -0.924316 0.0714179 0.374887 + 1.76627 2.60023 -0.951096 -0.966713 0.117521 0.227277 + 1.75268 2.50015 -0.976557 -0.977098 0.084948 0.195096 + 1.78795 2.61693 -0.89583 -0.881208 0.0900346 0.464075 + 1.78612 2.67697 -0.915407 -0.917066 0.240604 0.317962 + -0.978323 1.56018 -2.29297 -0.735672 0.0373439 0.676308 + -0.957668 1.56216 -2.26916 -0.0867878 0.996198 -0.00755631 + -0.921928 1.56547 -2.2434 -0.595457 -0.177077 0.783629 + -0.995792 1.57698 -2.3158 -0.762851 -0.148632 0.629259 + -1.02102 1.49003 -2.36325 -0.778307 -0.263573 0.569883 + -0.986659 1.48947 -2.32574 -0.652615 -0.40069 0.643071 + -0.966005 1.49145 -2.30192 -0.660713 -0.427226 0.6172 + -0.957668 1.56216 -2.26916 -0.662956 -0.188835 0.724452 + -0.924466 1.62071 -2.22722 -0.605303 -0.230266 0.761962 + -0.987141 1.64227 -2.27943 -0.709784 -0.236276 0.663611 + -1.05303 1.60998 -2.37494 -0.902174 -0.190409 0.387074 + -1.03849 1.50683 -2.38608 -0.952761 -0.158236 0.259244 + -1.02274 1.45627 -2.3887 -0.703906 -0.528012 0.475099 + -0.849891 1.58028 -2.18976 -0.503663 -0.297231 0.811158 + -0.928917 1.65604 -2.22124 -0.63435 -0.211001 0.743692 + -0.991591 1.6776 -2.27344 -0.718364 -0.167692 0.675153 + -1.04438 1.67527 -2.33857 -0.839388 -0.127089 0.528465 + -0.847353 1.52504 -2.20593 -0.332792 -0.401038 0.853474 + -0.803225 1.55777 -2.17385 0.0172905 -0.462384 0.886511 + -0.84721 1.6801 -2.14508 -0.474003 -0.234857 0.848624 + -0.843826 1.74823 -2.12572 -0.536354 -0.115995 0.835984 + -0.925533 1.72417 -2.20189 -0.656415 -0.142547 0.74081 + -0.902662 1.50126 -2.24224 -0.434564 -0.472666 0.766642 + -0.858232 1.50344 -2.22114 -0.267051 -0.57633 0.772352 + -0.820847 1.48452 -2.22826 0.0749807 -0.772945 0.630027 + -0.809967 1.50612 -2.21306 0.117651 -0.606083 0.786652 + -0.938402 1.49795 -2.268 -0.586322 -0.401596 0.703525 + -0.929985 1.47636 -2.28303 -0.154777 -0.895837 0.416557 + -0.916757 1.47828 -2.28659 -0.0562905 -0.980846 0.186472 + -0.895943 1.47159 -2.27488 -0.362217 -0.866165 0.344319 + -0.851514 1.47378 -2.25377 -0.152115 -0.848139 0.507466 + -0.957587 1.46986 -2.31696 -0.242345 -0.862889 0.443499 + -0.923997 1.47581 -2.32931 0.213766 -0.956467 0.198684 + -0.91077 1.47773 -2.33286 0.146659 -0.98545 0.0858982 + -0.904677 1.47752 -2.33118 -0.127075 -0.988903 -0.0769603 + -0.883863 1.47083 -2.31947 -0.463197 -0.878129 -0.11974 + -0.965733 1.4575 -2.3428 -0.0335626 -0.810173 0.585229 + -0.932143 1.46345 -2.35515 0.405092 -0.850522 0.33543 + -0.892145 1.48023 -2.36953 0.239076 -0.968836 0.0648013 + -0.886052 1.48002 -2.36785 -0.267837 -0.943374 -0.195724 + -0.988383 1.4557 -2.35119 -0.419168 -0.648732 0.635173 + -0.962566 1.42692 -2.38639 0.211574 -0.901396 0.377786 + -0.945631 1.42706 -2.41825 0.440494 -0.889389 0.122277 + -0.915207 1.4636 -2.38701 0.523848 -0.807688 0.270598 + -0.985216 1.42513 -2.39478 -0.259437 -0.888376 0.378788 + -0.9951 1.42087 -2.41695 -0.331484 -0.919492 0.211313 + -0.978751 1.41416 -2.43431 -0.00302993 -0.999401 0.0344635 + -0.934111 1.43808 -2.46427 0.461561 -0.883787 -0.076694 + -0.88349 1.46958 -2.43114 0.521108 -0.845238 0.118399 + -1.03263 1.45201 -2.41087 -0.884312 -0.430984 0.17957 + -1.02792 1.43867 -2.43989 -0.804007 -0.571435 -0.164423 + -1.01157 1.43196 -2.45725 -0.557874 -0.766235 -0.318841 + -0.967231 1.42517 -2.48034 0.0462574 -0.893403 -0.446869 + -0.908384 1.45247 -2.48527 0.477693 -0.810585 -0.338766 + -1.03378 1.49348 -2.41509 -0.991537 -0.129274 0.011892 + -1.04434 1.51289 -2.45419 -0.974827 -0.205479 -0.0865535 + -1.02199 1.45065 -2.47566 -0.771623 -0.543072 -0.331165 + -0.977657 1.44386 -2.49875 -0.2131 -0.728745 -0.650784 + -0.918406 1.46792 -2.50923 0.456538 -0.66701 -0.588788 + -1.06358 1.62938 -2.41404 -0.995578 -0.0855496 -0.0388107 + -1.05483 1.64907 -2.44998 -0.93666 0.0643339 -0.344282 + -1.04279 1.55116 -2.48648 -0.930687 -0.0742056 -0.35821 + -1.02045 1.48892 -2.50796 -0.762795 -0.378169 -0.52453 + -1.06608 1.70247 -2.37884 -0.987975 0.0566257 0.143871 + -1.05732 1.72216 -2.41478 -0.929807 0.242186 -0.277137 + -1.0388 1.73244 -2.44884 -0.752109 0.349376 -0.55881 + -1.03766 1.66368 -2.47911 -0.738379 0.212933 -0.639887 + -1.02563 1.56577 -2.51562 -0.787121 0.064665 -0.6134 + -1.05047 1.74166 -2.34976 -0.934652 0.113055 0.337112 + -1.05161 1.76093 -2.37974 -0.934433 0.345113 -0.0879335 + -1.0331 1.77121 -2.41381 -0.791675 0.467505 -0.393306 + -1.02877 1.71446 -2.30948 -0.818322 -0.0733619 0.570059 + -1.01603 1.77596 -2.28519 -0.818803 -0.0235674 0.573591 + -1.03164 1.79677 -2.31524 -0.929254 0.133601 0.344439 + -1.03278 1.81604 -2.34523 -0.936369 0.35019 -0.0241015 + -0.978848 1.7391 -2.24915 -0.709422 -0.115477 0.695259 + -0.965064 1.835 -2.2212 -0.730807 -0.0905793 0.676548 + -0.989996 1.85156 -2.25103 -0.828143 0.0130016 0.560365 + -1.0056 1.87237 -2.28108 -0.929679 0.204244 0.306564 + -0.911749 1.82007 -2.17394 -0.640784 -0.149391 0.753046 + -0.931095 1.93246 -2.16816 -0.732297 -0.11865 0.670569 + -0.956027 1.94903 -2.19799 -0.846892 0.010513 0.531661 + -0.965719 1.96289 -2.21997 -0.932072 0.218976 0.288601 + -1.00478 1.88291 -2.30544 -0.908991 0.414745 -0.0414974 + -0.842307 1.78971 -2.12691 -0.559307 -0.0968779 0.82328 + -0.822741 1.87667 -2.09111 -0.526007 -0.246633 0.813934 + -0.892183 1.90702 -2.13813 -0.64141 -0.186451 0.744197 + -0.887574 2.04071 -2.0992 -0.731235 -0.129121 0.669793 + -0.794844 1.75036 -2.09994 -0.0264171 -0.202189 0.97899 + -0.793324 1.79183 -2.10113 -0.0250974 -0.145366 0.98906 + -0.785415 1.86019 -2.07757 -0.00816341 -0.370813 0.928672 + -0.803301 1.97889 -2.0436 -0.537974 -0.279342 0.795331 + -0.848662 2.01527 -2.06917 -0.64428 -0.211466 0.734973 + -0.78226 1.67854 -2.13192 0.250986 -0.265461 0.93088 + -0.770512 1.76357 -2.10983 0.579467 -0.0807575 0.810985 + -0.772874 1.7934 -2.11132 0.600408 -0.105542 0.792698 + -0.764965 1.86176 -2.08775 0.593107 -0.374126 0.71292 + -0.800543 1.65759 -2.12917 0.00205592 -0.182778 0.983152 + -0.760813 1.57338 -2.19175 0.562037 -0.405248 0.721033 + -0.757929 1.69175 -2.14181 0.651087 -0.240095 0.720028 + -0.733084 1.70668 -2.17051 0.817202 -0.157824 0.554322 + -0.742735 1.77732 -2.13783 0.766605 -0.038325 0.640974 + -0.779096 1.55243 -2.18899 0.50512 -0.496959 0.70561 + -0.785838 1.50078 -2.2282 0.411992 -0.688119 0.59729 + -0.763128 1.50201 -2.24492 0.481373 -0.692752 0.537005 + -0.729885 1.58097 -2.2126 0.696314 -0.353577 0.624604 + -0.705041 1.5959 -2.2413 0.917405 -0.187347 0.351096 + -0.81444 1.45243 -2.30017 0.178553 -0.918884 0.35181 + -0.79173 1.45366 -2.31689 0.393858 -0.891762 0.222792 + -0.732201 1.5096 -2.26577 0.71652 -0.593496 0.366554 + -0.727552 1.50758 -2.29468 0.80966 -0.579632 0.0920732 + -0.697095 1.60853 -2.27505 0.970974 -0.149193 0.186951 + -0.845107 1.44169 -2.32568 -0.230677 -0.965962 0.11707 + -0.787081 1.45164 -2.3458 0.470087 -0.880941 0.0544246 + -0.719606 1.52022 -2.32843 0.817049 -0.561168 0.132371 + -0.869282 1.46545 -2.36408 -0.595181 -0.753412 -0.279517 + -0.830525 1.43631 -2.3703 -0.164754 -0.969015 -0.184027 + -0.77798 1.45808 -2.36581 0.548944 -0.83444 0.0486847 + -0.838544 1.47036 -2.40602 -0.475844 -0.68906 -0.546598 + -0.821425 1.44275 -2.39031 -0.140088 -0.908503 -0.393697 + -0.772387 1.45834 -2.39081 0.45948 -0.888067 0.0146243 + -0.714012 1.52048 -2.35343 0.769923 -0.622796 0.139081 + -0.696508 1.54728 -2.34911 0.957258 -0.288905 0.0138323 + -0.855315 1.48492 -2.40979 -0.309046 -0.880299 -0.359949 + -0.837786 1.48875 -2.43245 -0.0879896 -0.845276 -0.527035 + -0.819265 1.478 -2.42592 -0.202526 -0.646646 -0.735413 + -0.802146 1.45039 -2.41021 0.00245151 -0.858773 -0.512351 + -0.739204 1.4759 -2.4068 0.691214 -0.710953 -0.129494 + -0.860427 1.48621 -2.41366 0.200966 -0.979055 -0.032627 + -0.842899 1.49004 -2.43632 0.260622 -0.942107 -0.210977 + -0.839337 1.49281 -2.43923 0.298526 -0.896703 -0.326812 + -0.833691 1.49043 -2.4341 -0.00796357 -0.763876 -0.645313 + -0.815169 1.47968 -2.42758 -0.105872 -0.607902 -0.786922 + -0.857762 1.48397 -2.45214 0.511881 -0.858352 -0.0347629 + -0.8542 1.48674 -2.45505 0.515106 -0.849605 -0.113297 + -0.829639 1.49942 -2.45521 0.302403 -0.935282 -0.183849 + -0.821802 1.49881 -2.44856 0.105673 -0.922353 -0.371616 + -0.816156 1.49644 -2.44343 -0.0263318 -0.810131 -0.585658 + -0.852274 1.49029 -2.4762 0.49115 -0.793029 -0.360384 + -0.827713 1.50296 -2.47636 0.420363 -0.700806 -0.576338 + -0.799746 1.50878 -2.47087 0.361619 -0.634493 -0.683118 + -0.791909 1.50818 -2.46422 0.280423 -0.689507 -0.667789 + -0.862296 1.50574 -2.50017 0.449318 -0.395313 -0.80115 + -0.823302 1.53265 -2.48298 0.410897 -0.153139 -0.898728 + -0.795335 1.53847 -2.47749 0.307128 -0.0294234 -0.951213 + -0.775175 1.53447 -2.46828 0.392769 -0.102806 -0.913873 + -0.783568 1.50665 -2.4605 0.132566 -0.583799 -0.801002 + -0.873375 1.55246 -2.51634 0.601034 -0.153906 -0.784265 + -0.834381 1.57937 -2.49915 0.524368 -0.0215471 -0.851219 + -0.787825 1.60187 -2.46326 0.475107 0.090796 -0.875231 + -0.767666 1.59787 -2.45405 0.634915 0.211303 -0.743124 + -0.766835 1.53293 -2.46456 0.568836 -0.0943859 -0.817017 + -0.898718 1.51097 -2.53465 0.750577 -0.39981 -0.526104 + -0.906936 1.54814 -2.54853 0.666973 -0.145621 -0.730713 + -0.881593 1.58963 -2.53022 0.624693 0.0651682 -0.778146 + -0.856116 1.63222 -2.50569 0.509991 0.178057 -0.841549 + -0.80956 1.65472 -2.4698 0.570199 0.200911 -0.79656 + -0.94644 1.46103 -2.5276 0.198247 -0.852294 -0.484038 + -0.926752 1.50408 -2.55302 0.524936 -0.451182 -0.721718 + -0.938077 1.51208 -2.56524 0.223468 -0.262323 -0.938749 + -0.91826 1.55614 -2.56075 0.399215 0.0428475 -0.915856 + -0.969331 1.45617 -2.51773 -0.152062 -0.801907 -0.577774 + -0.965799 1.50478 -2.56146 -0.191097 -0.30805 -0.93198 + -1.01213 1.50124 -2.52694 -0.737201 -0.30711 -0.601845 + -0.988691 1.49992 -2.55159 -0.499773 -0.35886 -0.788319 + -0.971973 1.56406 -2.55641 -0.321586 0.181791 -0.929265 + -0.944251 1.57137 -2.56018 -0.0446945 0.23323 -0.971394 + -0.911747 1.64053 -2.53192 0.30084 0.302379 -0.904468 + -1.00219 1.56445 -2.54027 -0.600184 0.143902 -0.786811 + -0.972498 1.66507 -2.51892 -0.339214 0.34905 -0.873555 + -0.937738 1.65575 -2.53135 -0.0166662 0.352514 -0.935658 + -0.886271 1.68311 -2.50739 0.35738 0.274521 -0.892702 + -1.00271 1.66546 -2.50279 -0.500502 0.310935 -0.807971 + -0.964559 1.72626 -2.49555 -0.276415 0.374294 -0.885155 + -0.929799 1.71694 -2.50798 0.0111196 0.449004 -0.893461 + -0.862776 1.70508 -2.49231 0.432013 0.303466 -0.849278 + -1.00386 1.73423 -2.47251 -0.489415 0.318101 -0.811963 + -0.962286 1.76365 -2.48349 -0.200547 0.42083 -0.884694 + -0.906304 1.73891 -2.4929 0.207584 0.432738 -0.877295 + -0.827699 1.73417 -2.4562 0.525142 0.363281 -0.76958 + -1.00159 1.77161 -2.46045 -0.540087 0.462084 -0.703409 + -0.987716 1.82698 -2.4258 -0.574031 0.540817 -0.614822 + -0.95015 1.82306 -2.44983 -0.17298 0.542358 -0.822147 + -0.894168 1.79832 -2.45924 0.261396 0.454127 -0.851728 + -0.833309 1.79061 -2.43007 0.507059 0.401788 -0.762534 + -1.01923 1.82657 -2.37916 -0.805096 0.481279 -0.346685 + -0.99123 1.89345 -2.33937 -0.814683 0.50723 -0.281085 + -0.968212 1.90539 -2.37411 -0.614985 0.575999 -0.538534 + -0.930646 1.90147 -2.39814 -0.214773 0.59214 -0.776687 + -0.954505 1.98373 -2.26926 -0.808143 0.543176 -0.227737 + -0.931487 1.99567 -2.304 -0.615686 0.644897 -0.452812 + -0.904952 1.99817 -2.32179 -0.254399 0.684437 -0.683247 + -0.890894 1.89819 -2.40346 0.176766 0.528986 -0.830016 + -0.830036 1.89047 -2.37428 0.530299 0.447076 -0.720351 + -0.964897 1.97343 -2.24433 -0.902333 0.430659 -0.0181286 + -0.901535 2.09321 -2.17986 -0.786094 0.58543 -0.198312 + -0.885057 2.10202 -2.20443 -0.598458 0.68725 -0.411746 + -0.858522 2.10453 -2.22223 -0.212597 0.734758 -0.644153 + -0.8652 1.99489 -2.32711 0.225469 0.599496 -0.767964 + -0.91318 2.07301 -2.13887 -0.921443 0.240205 0.30536 + -0.911928 2.08291 -2.15493 -0.888448 0.45875 0.0144434 + -0.846882 2.19034 -2.0862 -0.757821 0.633696 -0.155358 + -0.830403 2.19916 -2.11077 -0.558099 0.738657 -0.378035 + -0.903487 2.05914 -2.11689 -0.839413 0.0153026 0.543278 + -0.855559 2.1726 -2.05312 -0.901624 0.272233 0.336101 + -0.854308 2.1825 -2.06918 -0.861094 0.50607 0.0490848 + -0.784599 2.27812 -1.99735 -0.723949 0.679316 -0.120111 + -0.833506 2.14229 -2.0213 -0.7259 -0.122689 0.676769 + -0.849419 2.16073 -2.03899 -0.828673 0.0347784 0.558651 + -0.79287 2.26359 -1.96948 -0.87785 0.31294 0.362557 + -0.792025 2.27028 -1.98033 -0.831938 0.548371 0.084665 + -0.807843 2.11933 -2.00318 -0.645171 -0.210074 0.73459 + -0.775984 2.23927 -1.94341 -0.714757 -0.0973061 0.692571 + -0.78673 2.25172 -1.95535 -0.811373 0.0620697 0.581224 + -0.753638 2.31157 -1.92174 -0.735604 0.484882 0.47305 + -0.752792 2.31826 -1.93259 -0.680276 0.703568 0.205468 + -0.762482 2.08295 -1.97761 -0.537501 -0.292838 0.790783 + -0.719688 2.19174 -1.90802 -0.530579 -0.273299 0.802368 + -0.75032 2.21631 -1.92529 -0.633662 -0.191531 0.749525 + -0.721864 2.27609 -1.88848 -0.530824 0.00852193 0.847439 + -0.738832 2.29127 -1.90046 -0.603796 0.0915941 0.791859 + -0.765975 1.96241 -2.03005 -0.0227249 -0.454939 0.890233 + -0.737599 2.0674 -1.97035 -0.0462216 -0.50535 0.861676 + -0.694806 2.17619 -1.90076 -0.0208488 -0.497499 0.867214 + -0.691231 2.25153 -1.8712 -0.399405 -0.0527992 0.915253 + -0.751927 1.96167 -2.03831 0.57048 -0.469926 0.673589 + -0.723551 2.06666 -1.9786 0.54645 -0.554354 0.62776 + -0.685319 2.17569 -1.90633 0.545468 -0.553316 0.629529 + -0.665293 2.24074 -1.87198 0.616946 -0.229921 0.752671 + -0.67478 2.24124 -1.86641 0.0906377 -0.201489 0.975288 + -0.743434 1.86794 -2.11017 0.771105 -0.326619 0.546551 + -0.730396 1.96785 -2.06072 0.757156 -0.414665 0.504745 + -0.708674 2.0705 -1.99447 0.730836 -0.504805 0.459402 + -0.670442 2.17954 -1.9222 0.731534 -0.50667 0.456228 + -0.745097 1.80715 -2.13932 0.782187 -0.101768 0.614676 + -0.713282 1.88189 -2.15177 0.919165 -0.215541 0.329664 + -0.708922 1.97778 -2.09036 0.904023 -0.306665 0.297823 + -0.687199 2.08044 -2.0241 0.885236 -0.395453 0.244895 + -0.65594 2.18625 -1.94222 0.8797 -0.405933 0.247681 + -0.714945 1.8211 -2.18093 0.908057 0.0103445 0.418719 + -0.705524 1.89749 -2.18565 0.999195 0.00369994 -0.0399548 + -0.701163 1.99338 -2.12423 0.99554 -0.0675015 -0.0658986 + -0.681391 2.09276 -2.04693 0.981635 -0.155672 -0.110267 + -0.706562 1.80358 -2.18817 0.901448 0.0921141 0.422974 + -0.696663 1.81764 -2.23517 0.96056 0.278069 0.00165307 + -0.705046 1.83516 -2.22793 0.973749 0.22752 -0.00694964 + -0.718511 1.91654 -2.22502 0.886919 0.240021 -0.39467 + -0.708769 2.01287 -2.1491 0.898348 0.18185 -0.399876 + -0.696911 1.73294 -2.22085 0.936618 -0.0934312 0.337665 + -0.690782 1.74648 -2.26215 0.996843 0.0634328 -0.0477425 + -0.710402 1.81461 -2.29184 0.862524 0.32148 -0.390772 + -0.718033 1.85421 -2.2673 0.862475 0.331309 -0.382586 + -0.690965 1.62207 -2.31635 0.998923 -0.0164482 -0.0433782 + -0.704521 1.74345 -2.31883 0.910927 0.204912 -0.358082 + -0.748398 1.76289 -2.37486 0.682017 0.34605 -0.644284 + -0.754009 1.81933 -2.34872 0.681665 0.404008 -0.610008 + -0.761639 1.85892 -2.32418 0.695985 0.433864 -0.572159 + -0.696827 1.64032 -2.34079 0.954217 0.102061 -0.281164 + -0.711705 1.63495 -2.37702 0.851026 0.138091 -0.506642 + -0.719399 1.73808 -2.35506 0.802015 0.338053 -0.492434 + -0.70237 1.56553 -2.37354 0.921939 -0.00122586 -0.387333 + -0.719395 1.57264 -2.40035 0.810744 0.0651058 -0.581769 + -0.745485 1.659 -2.4139 0.723251 0.197655 -0.661695 + -0.774483 1.6838 -2.4337 0.635835 0.256915 -0.72781 + -0.721699 1.50269 -2.40248 0.885695 -0.348526 -0.306716 + -0.738725 1.5098 -2.42928 0.774464 -0.152584 -0.613941 + -0.753175 1.59668 -2.43723 0.744829 0.155501 -0.648883 + -0.756482 1.47811 -2.43653 0.416224 -0.613345 -0.671242 + -0.752344 1.53175 -2.44773 0.778281 -0.026552 -0.627355 + -0.768963 1.46795 -2.4262 0.166699 -0.821156 -0.545816 + -0.802688 1.48985 -2.43791 -0.105407 -0.689741 -0.716343 + -0.770101 1.50006 -2.45498 0.286894 -0.491131 -0.822485 + -0.820298 1.97496 -2.31063 0.563242 0.456573 -0.688694 + -0.751901 1.94341 -2.26053 0.733487 0.358551 -0.577441 + -0.78673 2.07714 -2.21228 0.592425 0.450911 -0.667617 + -0.742159 2.03974 -2.18461 0.74734 0.340538 -0.57054 + -0.688997 2.11225 -2.0718 0.893224 0.123075 -0.432439 + -0.831632 2.09707 -2.22876 0.256402 0.629752 -0.733261 + -0.75542 2.17348 -2.12149 0.60167 0.431034 -0.67246 + -0.710849 2.13608 -2.09381 0.750729 0.296103 -0.590532 + -0.655268 2.21173 -1.98184 0.897818 0.111921 -0.425907 + -0.650131 2.19857 -1.96504 0.980032 -0.161755 -0.11564 + -0.812239 2.19972 -2.1238 -0.187112 0.768747 -0.611569 + -0.785349 2.19226 -2.13034 0.282734 0.632751 -0.720894 + -0.707219 2.26081 -2.02254 0.612771 0.434798 -0.659896 + -0.67712 2.23555 -2.00384 0.750541 0.302056 -0.587751 + -0.64225 2.2713 -1.93437 0.917244 0.28733 -0.275871 + -0.755307 2.28464 -2.02698 -0.157226 0.801736 -0.576628 + -0.737148 2.2796 -2.03139 0.292386 0.657328 -0.694573 + -0.686797 2.31231 -1.96761 0.634707 0.572917 -0.518568 + -0.656699 2.28706 -1.94892 0.783717 0.435912 -0.442458 + -0.773471 2.28407 -2.01394 -0.529881 0.778732 -0.335862 + -0.724745 2.32977 -1.96905 -0.072796 0.913511 -0.400248 + -0.706586 2.32474 -1.97346 0.349314 0.770202 -0.533637 + -0.701295 2.32979 -1.95471 0.407993 0.909048 -0.0846973 + -0.681506 2.31737 -1.94886 0.622813 0.776928 -0.0921282 + -0.747882 2.32345 -1.94384 -0.580374 0.81407 0.0213808 + -0.736754 2.3294 -1.96044 -0.394038 0.90037 -0.184573 + -0.712922 2.33301 -1.95189 0.152201 0.98824 0.0147047 + -0.702805 2.32088 -1.92498 0.27044 0.870804 0.410564 + -0.691178 2.31766 -1.92781 0.413452 0.840047 0.351253 + -0.732056 2.32883 -1.93265 -0.165332 0.941457 0.293808 + -0.724931 2.33264 -1.94327 -0.0686573 0.982872 0.171023 + -0.736966 2.32364 -1.92139 -0.244051 0.874902 0.418313 + -0.70993 2.31707 -1.91436 0.201495 0.844749 0.495781 + -0.737508 2.31936 -1.91445 -0.294043 0.749937 0.592564 + -0.710472 2.31279 -1.90741 0.164396 0.784888 0.597431 + -0.668617 2.29306 -1.90509 0.481994 0.723886 0.493629 + -0.671906 2.30149 -1.91584 0.479355 0.787921 0.386522 + -0.662234 2.30119 -1.93689 0.700092 0.712291 -0.0501296 + -0.749578 2.30373 -1.9124 -0.689121 0.259375 0.676637 + -0.733448 2.31151 -1.9051 -0.284337 0.59437 0.752248 + -0.726568 2.30354 -1.89746 -0.241862 0.496269 0.833798 + -0.703591 2.30482 -1.89977 0.188003 0.735029 0.65145 + -0.709599 2.28836 -1.88548 -0.18386 0.433298 0.882297 + -0.683977 2.28909 -1.88871 0.261307 0.695252 0.669585 + -0.689985 2.27263 -1.87442 -0.112013 0.404329 0.907729 + -0.673534 2.26235 -1.86962 0.222924 0.348046 0.910587 + -0.677903 2.28876 -1.89228 0.417893 0.701664 0.57709 + -0.66746 2.26203 -1.87319 0.563196 0.358057 0.744718 + -0.657623 2.26457 -1.88368 0.65981 0.377538 0.649705 + -0.648337 2.26887 -1.89649 0.740199 0.40184 0.5391 + -0.644497 2.27701 -1.91159 0.813221 0.500292 0.297287 + -0.647785 2.28544 -1.92234 0.783983 0.614324 0.0893147 + -0.655456 2.24329 -1.88247 0.77951 -0.194699 0.595363 + -0.640954 2.24999 -1.90248 0.914357 -0.116579 0.387764 + -0.637114 2.25814 -1.91758 0.996337 0.0638149 0.0569169 + 0.836968 1.58108 -2.53408 -0.529244 -0.278961 -0.8013 + 0.849002 1.58689 -2.54405 -0.231101 -0.923839 -0.305145 + 0.870453 1.57278 -2.5533 -0.161916 -0.811215 0.561883 + 0.858967 1.55925 -2.59536 -0.480914 -0.834799 0.268014 + 0.892878 1.52828 -2.6236 -0.3311 -0.925079 0.186016 + 0.907121 1.53929 -2.58384 -0.0693211 -0.836373 0.54376 + 0.917493 1.56796 -2.55886 0.40571 -0.477343 0.77945 + 0.880826 1.60145 -2.52833 0.306076 -0.477655 0.823507 + 0.853085 1.62012 -2.50619 0.44327 -0.399519 0.802432 + 0.82717 1.59283 -2.50967 0.356478 -0.630121 0.689834 + 0.836968 1.58108 -2.53408 0.300681 -0.889637 0.34371 + 0.837516 1.57337 -2.58611 -0.143927 -0.947201 0.286522 + 0.846625 1.56037 -2.63923 -0.487877 -0.87038 0.0664382 + 0.880536 1.52939 -2.66746 -0.376819 -0.916215 -0.136225 + 0.920106 1.53063 -2.67928 0.25347 -0.92227 -0.291841 + 0.920658 1.52071 -2.64289 0.146261 -0.984981 -0.0917605 + 0.831839 1.57414 -2.58139 0.293109 -0.940601 0.171338 + 0.825704 1.57004 -2.59471 0.15939 -0.987205 0.00451157 + 0.831381 1.56927 -2.59942 -0.046646 -0.987739 0.148982 + 0.819805 1.56833 -2.57142 0.461567 -0.886976 0.0151249 + 0.800317 1.56093 -2.58798 0.33693 -0.920816 -0.196407 + 0.824463 1.57049 -2.59732 0.065448 -0.989332 -0.130146 + 0.819686 1.57149 -2.61797 0.0288438 -0.996895 -0.0732735 + 0.826604 1.57027 -2.62008 -0.291709 -0.956182 0.0249299 + 0.78938 1.55013 -2.54623 0.299884 -0.920252 0.251408 + 0.769892 1.54273 -2.56278 0.119963 -0.989273 0.083352 + 0.73635 1.54179 -2.59341 -0.00512646 -0.999904 -0.012889 + 0.799076 1.56137 -2.59059 0.274611 -0.92913 -0.247601 + 0.779582 1.56188 -2.52182 0.125974 -0.800099 0.586491 + 0.749654 1.56542 -2.51827 -0.173842 -0.78436 0.595448 + 0.725127 1.55751 -2.54698 -0.31064 -0.85028 0.424883 + 0.691584 1.55657 -2.57761 -0.497564 -0.834238 0.237648 + 0.721856 1.54442 -2.62195 -0.088708 -0.988174 -0.125074 + 0.780614 1.61533 -2.47378 0.161607 -0.480563 0.861941 + 0.750687 1.61887 -2.47023 -0.113863 -0.503501 0.856459 + 0.707459 1.60697 -2.49548 -0.482508 -0.520281 0.704623 + 0.682931 1.59906 -2.52419 -0.5862 -0.583065 0.562499 + 0.806529 1.64262 -2.4703 0.324654 -0.309088 0.893904 + 0.808238 1.67943 -2.46158 0.405139 -0.269722 0.873563 + 0.753714 1.67357 -2.44263 -0.0881242 -0.288874 0.953303 + 0.710487 1.66167 -2.46787 -0.423221 -0.374537 0.824989 + 0.883239 1.67101 -2.50788 0.520974 -0.222013 0.824194 + 0.884948 1.70783 -2.49917 0.520417 -0.0886289 0.849301 + 0.885501 1.73942 -2.50075 0.57843 -0.174445 0.796861 + 0.825457 1.74618 -2.44792 0.484661 -0.335141 0.80795 + 0.770933 1.74032 -2.42897 0.206856 -0.404116 0.891011 + 0.91098 1.65235 -2.53002 0.593177 -0.208412 0.777628 + 0.932378 1.72366 -2.53138 0.622406 -0.100417 0.776226 + 0.932931 1.75525 -2.53296 0.557635 -0.103001 0.823671 + 0.930384 1.78543 -2.5186 0.663167 -0.368326 0.651572 + 0.890599 1.77759 -2.4862 0.595131 -0.436902 0.674489 + 0.937477 1.56351 -2.58027 0.750783 -0.325756 0.574637 + 0.930964 1.6479 -2.55143 0.743431 -0.188964 0.641563 + 0.93984 1.68266 -2.55103 0.721776 -0.21694 0.657249 + 0.96552 1.74357 -2.55903 0.760425 -0.111008 0.639868 + 0.952752 1.77705 -2.54377 0.731841 -0.131457 0.668676 + 0.9349 1.53172 -2.60313 0.49009 -0.786692 0.375403 + 0.960761 1.58365 -2.61395 0.923558 -0.230741 0.306268 + 0.969637 1.61842 -2.61355 0.847841 -0.275641 0.452976 + 0.972983 1.70257 -2.57868 0.819259 -0.171981 0.547026 + 0.958184 1.55185 -2.63682 0.885324 -0.463885 0.0318226 + 0.957632 1.56178 -2.6732 0.80879 -0.587373 -0.0291866 + 0.986209 1.61679 -2.64923 0.910859 -0.341267 0.232106 + 0.989555 1.70095 -2.61435 0.906179 -0.182344 0.381562 + 0.987338 1.76658 -2.58585 0.858615 -0.0559184 0.509562 + 0.96237 1.56839 -2.71456 0.676905 -0.694211 -0.244687 + 0.990947 1.6234 -2.69058 0.952436 -0.304419 -0.0139587 + 1.00914 1.71738 -2.65557 0.97822 -0.14128 0.152072 + 1.00693 1.78301 -2.62707 0.966659 0.0356724 0.253569 + 0.907131 1.55762 -2.73451 0.0904279 -0.865588 -0.492524 + 0.912271 1.57791 -2.76563 0.193799 -0.752384 -0.629572 + 0.967511 1.58868 -2.74568 0.686138 -0.576451 -0.443755 + 0.990624 1.64064 -2.72722 0.944689 -0.219302 -0.243862 + 1.00882 1.73461 -2.6922 0.971831 0.0351207 -0.233048 + 0.867561 1.55638 -2.72269 -0.333967 -0.869329 -0.364325 + 0.886801 1.59359 -2.78687 0.0484448 -0.69519 -0.717192 + 0.96149 1.61897 -2.77657 0.631099 -0.349328 -0.692592 + 0.984603 1.67093 -2.75811 0.85292 -0.0351305 -0.520858 + 0.835961 1.56237 -2.67765 -0.422165 -0.899461 -0.112901 + 0.821584 1.58909 -2.72284 -0.577195 -0.741375 -0.342358 + 0.853184 1.5831 -2.76788 -0.337355 -0.796361 -0.501998 + 0.815939 1.57227 -2.6585 -0.281784 -0.95886 -0.0344407 + 0.80924 1.57376 -2.67852 0.0286495 -0.967249 -0.252208 + 0.806055 1.59391 -2.7076 -0.388355 -0.778758 -0.492663 + 0.812135 1.63108 -2.78261 -0.707527 -0.461325 -0.535336 + 0.828764 1.61901 -2.79522 -0.524726 -0.545668 -0.653383 + 0.808282 1.57371 -2.65728 0.0102338 -0.997671 -0.0674312 + 0.801583 1.5752 -2.67731 0.0205262 -0.985793 -0.166709 + 0.801867 1.57579 -2.67967 0.00979677 -0.909811 -0.414907 + 0.798681 1.59594 -2.70875 0.0660528 -0.814171 -0.576856 + 0.796606 1.6359 -2.76737 -0.555843 -0.550282 -0.62308 + 0.784583 1.564 -2.61912 0.258324 -0.950155 -0.174565 + 0.773179 1.56623 -2.65844 0.224088 -0.959351 -0.171553 + 0.772061 1.57169 -2.68612 0.196159 -0.958583 -0.206494 + 0.772345 1.57227 -2.68849 0.26389 -0.891924 -0.367198 + 0.710069 1.55321 -2.66353 -0.148991 -0.973818 -0.171698 + 0.708951 1.55867 -2.69122 -0.245517 -0.893039 -0.377098 + 0.727387 1.56891 -2.7187 -0.0782791 -0.839603 -0.537531 + 0.734684 1.58857 -2.74297 -0.0566682 -0.63082 -0.773857 + 0.779641 1.59193 -2.71276 0.340283 -0.759882 -0.553884 + 0.671648 1.56884 -2.61368 -0.625943 -0.778312 0.0492529 + 0.659861 1.57763 -2.65526 -0.737212 -0.640644 -0.214694 + 0.667228 1.59578 -2.68959 -0.752914 -0.411699 -0.513443 + 0.685665 1.60601 -2.71707 -0.68077 -0.34087 -0.648352 + 0.706759 1.60945 -2.73933 -0.543492 -0.296008 -0.785491 + 0.627933 1.62419 -2.59563 -0.911088 -0.408095 0.0581156 + 0.628581 1.65253 -2.63233 -0.947183 -0.205286 -0.246379 + 0.635948 1.67068 -2.66666 -0.883542 -0.122301 -0.452101 + 0.658122 1.69592 -2.69818 -0.766696 0.0031688 -0.642002 + 0.679217 1.69936 -2.72044 -0.60579 0.089137 -0.790615 + 0.647869 1.61192 -2.55956 -0.765996 -0.521087 0.376455 + 0.632771 1.68983 -2.52035 -0.78935 -0.323772 0.52163 + 0.607579 1.71319 -2.55455 -0.966156 -0.189301 0.175234 + 0.608227 1.74153 -2.59125 -0.991388 -0.088012 -0.096973 + 0.612124 1.75432 -2.62735 -0.939314 -0.00908203 -0.342937 + 0.667834 1.67697 -2.48499 -0.618388 -0.348957 0.704149 + 0.690167 1.76568 -2.43545 -0.52172 -0.358107 0.774317 + 0.635957 1.81583 -2.45391 -0.735904 -0.295343 0.609276 + 0.610765 1.83919 -2.48811 -0.915532 -0.185415 0.356964 + 0.732821 1.75039 -2.41834 -0.17546 -0.43856 0.881407 + 0.743447 1.80265 -2.39067 -0.177277 -0.554538 0.813056 + 0.697106 1.83315 -2.39531 -0.522479 -0.473941 0.708799 + 0.642895 1.8833 -2.41377 -0.734475 -0.356784 0.57728 + 0.78156 1.79259 -2.4013 0.24011 -0.578732 0.779369 + 0.783061 1.81933 -2.37746 0.237475 -0.558674 0.794663 + 0.744899 1.82951 -2.36703 -0.169312 -0.551006 0.817145 + 0.698558 1.86001 -2.37167 -0.518317 -0.457142 0.722751 + 0.830554 1.78436 -2.43336 0.469313 -0.50653 0.723307 + 0.832056 1.8111 -2.40953 0.481788 -0.512384 0.710875 + 0.78561 1.86204 -2.35542 0.304196 -0.392347 0.86806 + 0.747448 1.87221 -2.34499 -0.0968603 -0.380952 0.919507 + 0.703661 1.89229 -2.35301 -0.443742 -0.315421 0.83881 + 0.891714 1.80518 -2.46391 0.584491 -0.464796 0.665083 + 0.890927 1.85616 -2.43603 0.625132 -0.338618 0.703241 + 0.831269 1.86208 -2.38165 0.535945 -0.351631 0.76754 + 0.786437 1.92585 -2.33228 0.317231 -0.374022 0.871477 + 0.931499 1.81302 -2.49631 0.685991 -0.419362 0.594602 + 0.927125 1.86591 -2.46471 0.676861 -0.311731 0.666846 + 0.884337 1.94192 -2.39379 0.623156 -0.304589 0.720349 + 0.832096 1.92589 -2.35851 0.537725 -0.320904 0.779661 + 0.951119 1.83526 -2.50792 0.815294 -0.309731 0.489247 + 0.946745 1.88814 -2.47632 0.799019 -0.214216 0.561854 + 0.933809 1.95831 -2.43594 0.814003 -0.175048 0.553857 + 0.920535 1.95166 -2.42247 0.698709 -0.268539 0.663093 + 0.871366 2.01493 -2.35083 0.614805 -0.326722 0.717821 + 0.950205 1.80722 -2.5294 0.806295 -0.292485 0.514141 + 0.967303 1.83543 -2.5493 0.906405 -0.180151 0.382067 + 0.968217 1.86347 -2.52782 0.918564 -0.192238 0.345377 + 0.960645 1.90798 -2.49709 0.905291 -0.092692 0.414555 + 0.974569 1.80005 -2.57059 0.84144 -0.0289492 0.539574 + 0.982019 1.86931 -2.57694 0.974105 -0.0520607 0.22002 + 0.982453 1.8984 -2.55738 0.978268 -0.059994 0.198475 + 0.97488 1.94291 -2.52665 0.959882 0.0580655 0.274326 + 0.989285 1.83393 -2.59822 0.949207 0.0791123 0.304544 + 0.984638 1.89665 -2.60977 0.994851 0.0930935 -0.0400536 + 0.985072 1.92573 -2.59022 0.992818 0.117399 -0.0230152 + 0.976227 1.96522 -2.5583 0.968177 0.245205 0.050083 + 0.956177 1.99368 -2.48517 0.961038 0.109783 0.253678 + 1.00836 1.80441 -2.66154 0.964083 0.230153 -0.132563 + 0.99072 1.85533 -2.63269 0.977796 0.209208 -0.0120721 + 0.975678 1.9163 -2.64574 0.938999 0.220034 -0.264322 + 0.975559 1.9466 -2.6284 0.934168 0.263886 -0.240196 + 0.966714 1.98608 -2.59648 0.907218 0.393033 -0.149937 + 0.98876 1.82 -2.69461 0.856976 0.286266 -0.428536 + 0.98176 1.87498 -2.66866 0.911828 0.264892 -0.313692 + 0.960655 1.93025 -2.67183 0.763613 0.325428 -0.557666 + 0.960536 1.96055 -2.6545 0.773513 0.411801 -0.481766 + 0.989218 1.75021 -2.72527 0.836597 0.193717 -0.512424 + 0.967167 1.83358 -2.72033 0.682186 0.333391 -0.650748 + 0.960167 1.88856 -2.69438 0.71344 0.349019 -0.60761 + 0.939981 1.93761 -2.6864 0.449762 0.420299 -0.788076 + 0.939594 1.96849 -2.67014 0.428185 0.548653 -0.718079 + 0.959759 1.68877 -2.78486 0.66902 0.0857639 -0.73828 + 0.964374 1.76805 -2.75202 0.665187 0.286628 -0.689471 + 0.930033 1.84529 -2.73959 0.356475 0.425539 -0.831771 + 0.939493 1.89591 -2.70895 0.426344 0.422212 -0.79998 + 0.894775 1.92671 -2.70593 0.193933 0.417535 -0.887724 + 0.93602 1.63465 -2.79782 0.474063 -0.30298 -0.826721 + 0.92314 1.70255 -2.80862 0.416158 0.195859 -0.887948 + 0.92724 1.77977 -2.77129 0.407635 0.381528 -0.82962 + 0.895508 1.7952 -2.77479 0.0612267 0.434692 -0.898496 + 0.886814 1.83889 -2.75243 -0.0258629 0.491093 -0.870723 + 0.899401 1.64843 -2.82158 0.219461 -0.216447 -0.951308 + 0.891408 1.71798 -2.81212 0.0331725 0.35334 -0.934907 + 0.853578 1.78375 -2.77168 -0.274737 0.406796 -0.871227 + 0.844884 1.82745 -2.74932 -0.141503 0.332949 -0.932267 + 0.896273 1.88951 -2.72178 0.120896 0.43092 -0.894255 + 0.862381 1.6295 -2.81421 -0.150587 -0.418167 -0.895801 + 0.840681 1.667 -2.81473 -0.305041 0.0662291 -0.950034 + 0.877702 1.68593 -2.82211 -0.053599 0.177384 -0.982681 + 0.839872 1.7517 -2.78167 -0.333201 0.384723 -0.860793 + 0.785028 1.76407 -2.74993 -0.352535 0.220555 -0.909436 + 0.822798 1.66471 -2.80807 -0.511128 -0.0265206 -0.859095 + 0.806169 1.67678 -2.79547 -0.583979 0.0337159 -0.811068 + 0.821988 1.74942 -2.77501 -0.391889 0.391583 -0.832518 + 0.798455 1.68053 -2.78978 -0.573549 0.0465163 -0.81785 + 0.814274 1.75317 -2.76932 -0.550827 0.26096 -0.792773 + 0.791942 1.67972 -2.78532 -0.57781 0.0178925 -0.815975 + 0.806332 1.74827 -2.76421 -0.558725 0.207544 -0.802964 + 0.790093 1.63509 -2.76291 -0.0450581 -0.654894 -0.754376 + 0.783999 1.67483 -2.78021 -0.520899 0.00297168 -0.853613 + 0.766685 1.66096 -2.76934 -0.45916 0.0390612 -0.887495 + 0.745381 1.67676 -2.75506 -0.413751 0.191193 -0.890087 + 0.771053 1.63108 -2.76692 -0.0260312 -0.453194 -0.891032 + 0.753738 1.61722 -2.75605 -0.3947 -0.145953 -0.907144 + 0.725814 1.6381 -2.75241 -0.413907 -0.0494596 -0.908974 + 0.698784 1.73801 -2.7231 -0.482258 0.193695 -0.854347 + 0.634298 1.77956 -2.65887 -0.803022 0.0927684 -0.588685 + 0.70475 1.77673 -2.71907 -0.465112 0.121587 -0.876862 + 0.790993 1.80279 -2.74591 -0.195927 0.110458 -0.974377 + 0.602519 1.85409 -2.57044 -0.989775 -0.0171107 -0.141611 + 0.60743 1.84952 -2.60037 -0.940452 -0.0136382 -0.339653 + 0.625217 1.86462 -2.62128 -0.741903 0.261455 -0.617432 + 0.652085 1.79466 -2.67979 -0.690009 0.0510876 -0.721996 + 0.598621 1.84131 -2.53434 -0.993402 -0.0891303 0.0721672 + 0.599069 1.91403 -2.49513 -0.991341 0.0147544 0.130479 + 0.59704 1.91508 -2.53562 -0.994661 0.0833361 -0.0608726 + 0.601951 1.91051 -2.56554 -0.917656 0.185892 -0.351216 + 0.611212 1.91192 -2.4489 -0.902772 -0.222533 0.368078 + 0.611993 1.94024 -2.42795 -0.930858 -0.0550729 0.361208 + 0.606495 1.95083 -2.4826 -0.975055 0.202647 0.0905612 + 0.604467 1.95189 -2.52309 -0.957179 0.280245 -0.072603 + 0.643676 1.91163 -2.39283 -0.727034 -0.314237 0.610472 + 0.620815 1.96969 -2.40936 -0.905041 0.145275 0.399743 + 0.615318 1.98028 -2.46401 -0.950925 0.289127 0.110213 + 0.616228 1.99017 -2.50007 -0.906227 0.416864 -0.070542 + 0.609082 1.94796 -2.55421 -0.851563 0.370101 -0.371302 + 0.64878 1.9439 -2.37416 -0.698782 -0.156308 0.698048 + 0.632582 1.99022 -2.39685 -0.935138 0.0330864 0.352735 + 0.63063 2.01243 -2.43561 -0.979628 0.181901 0.0850901 + 0.631541 2.02232 -2.47167 -0.948994 0.311316 -0.0499301 + 0.620843 1.98625 -2.53119 -0.79502 0.509016 -0.329918 + 0.710074 1.94569 -2.33546 -0.440496 -0.369597 0.818145 + 0.660547 1.96443 -2.36165 -0.676542 -0.246812 0.693811 + 0.635489 2.025 -2.36662 -0.945593 -0.235756 0.224217 + 0.633538 2.0472 -2.40539 -0.999492 -0.0199863 -0.0248049 + 0.63553 2.06394 -2.43221 -0.985003 0.0954169 -0.143749 + 0.753861 1.92561 -2.32744 -0.0779226 -0.387061 0.918756 + 0.70905 1.98909 -2.30845 -0.435597 -0.536 0.723159 + 0.659523 2.00784 -2.33464 -0.696934 -0.465806 0.545259 + 0.62777 2.06848 -2.32943 -0.934597 -0.315599 0.16409 + 0.779803 1.98534 -2.30028 0.304596 -0.458945 0.83462 + 0.747227 1.9851 -2.29544 -0.0902986 -0.542122 0.835434 + 0.694494 2.04529 -2.26765 -0.417284 -0.624472 0.660234 + 0.651803 2.05132 -2.29745 -0.671476 -0.553332 0.492893 + 0.819125 1.9989 -2.31556 0.526806 -0.375013 0.762785 + 0.760585 2.04989 -2.25375 0.304931 -0.525779 0.794087 + 0.732671 2.0413 -2.25464 -0.0799034 -0.619927 0.78058 + 0.677505 2.12639 -2.19846 -0.387856 -0.640766 0.662561 + 0.844465 2.09285 -2.29092 0.616114 -0.364898 0.698035 + 0.799907 2.06345 -2.26903 0.527434 -0.416829 0.740315 + 0.739134 2.13566 -2.18479 0.30962 -0.55993 0.768514 + 0.711221 2.12707 -2.18568 -0.0512291 -0.642287 0.76475 + 0.901706 2.03045 -2.37084 0.692787 -0.27321 0.667385 + 0.874805 2.10837 -2.31093 0.690601 -0.304851 0.655847 + 0.817902 2.18362 -2.21486 0.618527 -0.413089 0.668418 + 0.773344 2.15422 -2.19296 0.527377 -0.464518 0.711405 + 0.711712 2.24639 -2.09058 0.293885 -0.529355 0.795874 + 0.91498 2.03709 -2.3843 0.829221 -0.138502 0.541489 + 0.886092 2.11841 -2.32031 0.829745 -0.162649 0.533919 + 0.855504 2.2129 -2.23729 0.836434 -0.202743 0.509189 + 0.844218 2.20286 -2.22791 0.693456 -0.35549 0.626695 + 0.785192 2.29349 -2.11126 0.582077 -0.399666 0.708134 + 0.947709 1.97814 -2.45671 0.920878 -0.0304977 0.388655 + 0.925 2.04957 -2.40284 0.922237 0.0109609 0.38647 + 0.896112 2.13089 -2.33884 0.92254 -0.00589091 0.385856 + 0.86421 2.22607 -2.25259 0.929283 -0.0420559 0.366965 + 0.821654 2.32176 -2.13275 0.82778 -0.171743 0.53412 + 0.933468 2.06511 -2.43129 0.96132 0.145756 0.233706 + 0.903163 2.14858 -2.36166 0.962891 0.133979 0.234287 + 0.871261 2.24376 -2.27541 0.969106 0.108601 0.221447 + 0.836699 2.35083 -2.16856 0.957603 0.144605 0.249171 + 0.83036 2.33492 -2.14804 0.919974 -0.00651825 0.391925 + 0.957524 2.01599 -2.51681 0.956234 0.283177 0.073668 + 0.933667 2.08186 -2.45844 0.953969 0.293753 0.0604318 + 0.903362 2.16533 -2.38881 0.955816 0.289075 0.0534023 + 0.871323 2.25969 -2.29903 0.96095 0.272592 0.047626 + 0.949723 2.03387 -2.54718 0.895743 0.430067 -0.112632 + 0.925867 2.09974 -2.48881 0.896787 0.427097 -0.115588 + 0.896442 2.1812 -2.41575 0.897696 0.424396 -0.118452 + 0.864403 2.27556 -2.32598 0.897656 0.422454 -0.125483 + 0.952981 1.9998 -2.62055 0.750634 0.546339 -0.371566 + 0.93599 2.04759 -2.57125 0.749261 0.58059 -0.318627 + 0.914418 2.11119 -2.50936 0.753502 0.571078 -0.325739 + 0.884993 2.19264 -2.4363 0.735171 0.582479 -0.346759 + 0.932038 2.00774 -2.6362 0.426825 0.672039 -0.605131 + 0.919314 2.05575 -2.58333 0.446381 0.707449 -0.54796 + 0.897743 2.11935 -2.52144 0.466568 0.68746 -0.556518 + 0.870596 2.19652 -2.4491 0.446092 0.693783 -0.565391 + 0.894387 1.95759 -2.68967 0.181568 0.543906 -0.819267 + 0.893074 2.0071 -2.65126 0.173788 0.671227 -0.720591 + 0.88035 2.0551 -2.5984 0.201658 0.732872 -0.649795 + 0.865733 2.12251 -2.53207 0.222487 0.711071 -0.666991 + 0.828318 1.93192 -2.71699 -0.00385911 0.42863 -0.903472 + 0.827004 1.98142 -2.67858 -0.0542592 0.638747 -0.767501 + 0.828179 2.06209 -2.6036 -0.00900196 0.702534 -0.711593 + 0.813562 2.1295 -2.53728 0.00371492 0.70896 -0.705239 + 0.821635 1.89349 -2.72653 -0.0379539 0.320115 -0.946618 + 0.76261 1.88185 -2.72064 -0.348699 0.31201 -0.883775 + 0.769293 1.92029 -2.7111 -0.3462 0.413572 -0.842083 + 0.774611 1.97526 -2.67192 -0.323512 0.605061 -0.72749 + 0.823133 1.85629 -2.74238 -0.0656082 0.302468 -0.950899 + 0.769243 1.83163 -2.73897 -0.273363 0.176144 -0.945646 + 0.747032 1.84454 -2.72582 -0.444234 0.262938 -0.856458 + 0.717728 1.89175 -2.68815 -0.529601 0.361514 -0.767353 + 0.717287 1.92276 -2.6721 -0.528112 0.448408 -0.72113 + 0.682539 1.78964 -2.70592 -0.608635 -0.0405407 -0.792414 + 0.70215 1.85444 -2.69333 -0.548166 0.326985 -0.769802 + 0.672159 1.89904 -2.64849 -0.609067 0.349716 -0.711854 + 0.671718 1.93004 -2.63245 -0.569186 0.447479 -0.689775 + 0.722605 1.97773 -2.63292 -0.487543 0.574136 -0.657776 + 0.671696 1.85946 -2.66719 -0.608519 0.336563 -0.71863 + 0.62568 1.9042 -2.60259 -0.722428 0.309389 -0.618366 + 0.63281 1.94165 -2.59125 -0.660744 0.428873 -0.616024 + 0.64224 1.9879 -2.56041 -0.582087 0.593427 -0.555895 + 0.681147 1.97629 -2.60161 -0.512187 0.576299 -0.636824 + 0.659411 2.03466 -2.52058 -0.61816 0.581069 -0.529374 + 0.695002 2.04605 -2.54545 -0.546413 0.578407 -0.605704 + 0.73646 2.04749 -2.57676 -0.479866 0.595033 -0.64472 + 0.775786 2.05593 -2.59694 -0.318106 0.643455 -0.696258 + 0.638015 2.03301 -2.49136 -0.83395 0.455184 -0.311985 + 0.66146 2.08837 -2.47088 -0.675343 0.495717 -0.546055 + 0.697051 2.09976 -2.49575 -0.574924 0.544827 -0.61043 + 0.731765 2.11448 -2.51369 -0.505128 0.568826 -0.649063 + 0.771091 2.12291 -2.53387 -0.314378 0.638417 -0.70256 + 0.642004 2.07463 -2.4519 -0.876969 0.321684 -0.356995 + 0.652663 2.13298 -2.42409 -0.702558 0.432981 -0.564747 + 0.683014 2.15348 -2.43972 -0.597597 0.501115 -0.625909 + 0.717728 2.16819 -2.45766 -0.533156 0.535886 -0.654653 + 0.627798 2.10689 -2.38942 -0.981431 0.00851246 -0.191625 + 0.633207 2.11924 -2.40512 -0.886673 0.233692 -0.398998 + 0.635474 2.21187 -2.34328 -0.711483 0.422248 -0.561693 + 0.665825 2.23238 -2.35891 -0.607682 0.499412 -0.617502 + 0.696182 2.2509 -2.37159 -0.548256 0.535068 -0.642742 + 0.625806 2.09016 -2.36259 -0.991313 -0.107273 -0.0761004 + 0.613089 2.18393 -2.31271 -0.980987 0.00471444 -0.194014 + 0.618498 2.19627 -2.32841 -0.889052 0.225481 -0.398428 + 0.614047 2.32153 -2.23386 -0.715106 0.444629 -0.539377 + 0.613417 2.14609 -2.25635 -0.928504 -0.329442 0.171316 + 0.611454 2.16777 -2.28951 -0.990872 -0.109273 -0.0789475 + 0.592208 2.29483 -2.20487 -0.985199 0.0431024 -0.165906 + 0.597071 2.30593 -2.21899 -0.893656 0.252396 -0.371046 + 0.634814 2.13241 -2.22826 -0.662188 -0.563703 0.493706 + 0.592338 2.25919 -2.15187 -0.936909 -0.28433 0.203364 + 0.590573 2.27868 -2.18168 -0.996486 -0.067872 -0.0490905 + 0.588996 2.36206 -2.14054 -0.966485 0.256697 0.00363897 + 0.652901 2.23799 -2.10415 -0.364571 -0.609089 0.704343 + 0.613735 2.24551 -2.12377 -0.641395 -0.534826 0.550066 + 0.589485 2.32996 -2.09262 -0.917093 -0.00982676 0.398553 + 0.587719 2.34945 -2.12243 -0.977948 0.174287 0.115074 + 0.686618 2.23868 -2.09138 -0.0588529 -0.605251 0.793856 + 0.645524 2.31131 -2.05263 -0.380565 -0.298017 0.875417 + 0.606357 2.31883 -2.07225 -0.655361 -0.211977 0.72496 + 0.604448 2.36293 -2.08553 -0.692656 0.468093 0.54874 + 0.603302 2.37558 -2.10487 -0.725614 0.571432 0.383341 + 0.697108 2.3191 -2.04342 0.177742 -0.255731 0.950268 + 0.672013 2.31139 -2.04422 -0.120665 -0.304798 0.944742 + 0.646734 2.34692 -2.05243 -0.341751 0.279793 0.897174 + 0.62132 2.3518 -2.06515 -0.491925 0.326545 0.80708 + 0.653081 2.39392 -2.08458 -0.336742 0.695034 0.635242 + 0.72364 2.33405 -2.04824 0.350697 -0.196004 0.915748 + 0.689506 2.352 -2.04349 -0.0490756 0.28227 0.958079 + 0.673224 2.347 -2.04401 -0.195474 0.259964 0.945626 + 0.678495 2.38904 -2.07185 -0.226056 0.627679 0.744928 + 0.745921 2.26495 -2.09875 0.490999 -0.450093 0.745879 + 0.762911 2.36258 -2.06075 0.441742 -0.145001 0.885347 + 0.741521 2.38546 -2.05643 0.0821967 0.349115 0.933468 + 0.716039 2.36695 -2.04832 0.0397241 0.315208 0.948191 + 0.811507 2.31273 -2.12431 0.685079 -0.325964 0.651471 + 0.783282 2.37806 -2.06938 0.551221 -0.0486067 0.832942 + 0.761891 2.40094 -2.06506 0.175504 0.445567 0.877877 + 0.72026 2.41256 -2.07945 -0.25585 0.724551 0.639974 + 0.694778 2.39405 -2.07133 -0.215268 0.649897 0.728899 + 0.793428 2.38709 -2.07782 0.701245 0.119224 0.70288 + 0.768476 2.4068 -2.07054 0.274707 0.563677 0.778976 + 0.726844 2.41842 -2.08492 -0.129791 0.777026 0.615943 + 0.730957 2.42874 -2.09823 -0.128335 0.815768 0.563961 + 0.800224 2.39736 -2.08975 0.779302 0.271967 0.564555 + 0.775271 2.41707 -2.08247 0.313588 0.665203 0.677619 + 0.806563 2.41327 -2.11027 0.808623 0.411992 0.419991 + 0.779384 2.4274 -2.09579 0.330316 0.736389 0.590442 + 0.836761 2.36676 -2.19219 0.94666 0.313168 0.0758933 + 0.806611 2.42571 -2.12871 0.791962 0.554152 0.256344 + 0.779433 2.43983 -2.11423 0.312905 0.820975 0.477588 + 0.830539 2.38103 -2.21641 0.881532 0.462728 -0.0937213 + 0.800389 2.43997 -2.15293 0.723763 0.684221 0.0894924 + 0.775395 2.44909 -2.12994 0.274214 0.883376 0.38007 + 0.72692 2.43799 -2.11395 -0.146258 0.857057 0.494026 + 0.854282 2.28493 -2.34484 0.731351 0.588777 -0.344192 + 0.820418 2.3904 -2.23527 0.713449 0.628588 -0.309623 + 0.792489 2.44729 -2.16766 0.577168 0.808929 -0.111855 + 0.767495 2.4564 -2.14467 0.187435 0.952813 0.23878 + 0.839885 2.28881 -2.35764 0.422638 0.712098 -0.560619 + 0.807475 2.39389 -2.24678 0.409071 0.746315 -0.525047 + 0.779546 2.45078 -2.17917 0.307423 0.891575 -0.332545 + 0.759097 2.45867 -2.15214 0.0370589 0.995453 0.0877453 + 0.838586 2.19968 -2.45973 0.18498 0.717368 -0.671689 + 0.811783 2.28762 -2.36961 0.162041 0.734636 -0.658826 + 0.779373 2.3927 -2.25875 0.148816 0.764298 -0.627457 + 0.75761 2.44985 -2.18851 0.0810486 0.891237 -0.446238 + 0.79379 2.19329 -2.47214 -0.0312491 0.70472 -0.708797 + 0.766986 2.28123 -2.38203 -0.0604195 0.713955 -0.69758 + 0.739101 2.38695 -2.26991 -0.0684724 0.739944 -0.669175 + 0.717338 2.4441 -2.19967 -0.122586 0.855898 -0.502405 + 0.751319 2.1867 -2.46873 -0.349591 0.620235 -0.702208 + 0.729772 2.26941 -2.38266 -0.367233 0.626148 -0.687808 + 0.701887 2.37513 -2.27055 -0.373887 0.648146 -0.663411 + 0.688289 2.43487 -2.20017 -0.392067 0.765045 -0.510871 + 0.711029 2.45401 -2.16872 -0.212971 0.975971 -0.0460893 + 0.671689 2.35849 -2.26059 -0.553376 0.556712 -0.619553 + 0.658091 2.41823 -2.19021 -0.568242 0.670692 -0.476731 + 0.662386 2.43398 -2.16276 -0.510846 0.858764 -0.0395079 + 0.68198 2.44478 -2.16922 -0.410419 0.909116 -0.0711663 + 0.641333 2.33997 -2.24791 -0.611848 0.519942 -0.596073 + 0.634396 2.40377 -2.18031 -0.621311 0.639083 -0.453371 + 0.63869 2.41953 -2.15286 -0.547701 0.836432 -0.0201219 + 0.672795 2.42573 -2.1222 -0.342466 0.844668 0.411403 + 0.69239 2.43653 -2.12866 -0.295278 0.872108 0.390179 + 0.60711 2.38534 -2.16626 -0.723069 0.575599 -0.381913 + 0.620986 2.40756 -2.14374 -0.601163 0.798868 0.0203085 + 0.655091 2.41377 -2.11308 -0.376575 0.818915 0.433092 + 0.593858 2.37316 -2.15465 -0.882743 0.422708 -0.205139 + 0.607734 2.39539 -2.13214 -0.694391 0.703013 0.153605 + 0.651936 2.40657 -2.10392 -0.381509 0.775641 0.502824 + 0.604579 2.38819 -2.12298 -0.728042 0.614623 0.303635 + 0.718521 2.44026 -2.12142 -0.210033 0.878992 0.428087 + 0.737161 2.45774 -2.16148 -0.1006 0.994919 0.00386093 + -0.861683 1.78372 -1.68945 0.542942 0.676105 -0.498092 + -0.844417 1.76425 -1.68043 0.295676 0.853413 0.429257 + -0.795989 1.7501 -1.67675 0.0704556 0.470165 0.879762 + -0.896655 1.82743 -1.63648 0.819838 0.570199 -0.0523411 + -0.893836 1.82196 -1.6254 0.891577 0.305086 0.334685 + -0.875973 1.76755 -1.63771 0.527652 0.752673 0.393784 + -0.859869 1.76859 -1.6341 -0.509809 0.758022 -0.406813 + -0.828313 1.76528 -1.67683 -0.0515056 0.57841 -0.814119 + -0.795989 1.7501 -1.67675 0.619461 0.360333 -0.697444 + -0.913921 1.84691 -1.6455 0.628337 0.660206 -0.411486 + -0.938856 1.89544 -1.61696 0.553402 0.538562 -0.635372 + -0.921707 1.88933 -1.60415 0.819835 0.433994 -0.373524 + -0.918888 1.88385 -1.59307 0.976606 0.173526 0.127003 + -0.914592 1.82073 -1.59468 0.849752 0.0515985 0.524652 + -0.950332 1.85538 -1.66374 0.228995 0.62174 -0.749 + -0.975267 1.90391 -1.6352 0.215899 0.562513 -0.798102 + -0.973509 1.9577 -1.59711 0.256444 0.558221 -0.789067 + -0.946743 1.95147 -1.58371 0.553459 0.488953 -0.674246 + -0.929595 1.94537 -1.5709 0.841358 0.358801 -0.404202 + -0.874571 1.76401 -1.70684 0.24176 0.499863 -0.831678 + -0.96322 1.83567 -1.68111 -0.00269435 0.560421 -0.828204 + -1.00872 1.84191 -1.66855 -0.371559 0.465291 -0.803398 + -1.0025 1.90419 -1.63537 -0.304839 0.519388 -0.798316 + -0.862319 1.70005 -1.74151 0.254402 0.500152 -0.827724 + -0.965472 1.76805 -1.71504 -0.0500905 0.458199 -0.887437 + -1.01097 1.77429 -1.70247 -0.384834 0.445536 -0.808332 + -1.03461 1.83407 -1.65072 -0.650961 0.392859 -0.649547 + -1.02839 1.89634 -1.61754 -0.678934 0.423899 -0.599466 + -0.798428 1.69134 -1.71503 0.627613 0.409576 -0.66208 + -0.860608 1.62202 -1.78844 0.252982 0.439702 -0.861778 + -0.95322 1.70409 -1.74971 -0.00297674 0.504452 -0.863435 + -1.01937 1.70534 -1.74027 -0.363104 0.497155 -0.788031 + -1.04663 1.76377 -1.67854 -0.648101 0.399675 -0.648248 + -0.76879 1.67356 -1.67546 0.87792 0.252431 -0.406859 + -0.763945 1.5997 -1.71449 0.881476 0.206488 -0.424691 + -0.796717 1.61331 -1.76195 0.639402 0.337439 -0.690869 + -0.766351 1.73233 -1.63718 0.89385 0.216533 -0.392615 + -0.752199 1.66051 -1.6355 0.97648 0.136311 -0.167049 + -0.747354 1.58665 -1.67453 0.979245 0.0889351 -0.182123 + -0.753606 1.5029 -1.71989 0.965301 -0.0427322 -0.25762 + -0.770913 1.51923 -1.75069 0.861404 0.0973666 -0.498501 + -0.769426 1.80185 -1.60854 0.861362 0.282283 -0.42234 + -0.759348 1.79972 -1.57636 0.97648 0.155311 -0.149549 + -0.756274 1.73021 -1.60501 0.980811 0.115874 -0.156792 + -0.750401 1.64607 -1.60312 0.989386 0.00195389 0.145294 + -0.74596 1.57993 -1.63403 0.992367 -0.0378516 0.117364 + -0.805752 1.77556 -1.67281 0.296163 0.483039 -0.823991 + -0.779188 1.82732 -1.60459 0.686472 0.456702 -0.565844 + -0.777499 1.87088 -1.56637 0.735772 0.439402 -0.51533 + -0.805421 1.83416 -1.62143 0.239147 0.611648 -0.754119 + -0.803731 1.87773 -1.5832 0.384125 0.590126 -0.71007 + -0.827982 1.82389 -1.62545 -0.212933 0.608359 -0.764564 + -0.82617 1.87946 -1.58753 -0.0574496 0.608425 -0.791529 + -0.806134 1.92987 -1.54242 0.381638 0.58766 -0.713448 + -0.853077 1.821 -1.61849 -0.558502 0.456633 -0.692504 + -0.851265 1.87658 -1.58058 -0.511802 0.514498 -0.688004 + -0.84702 1.92949 -1.54163 -0.501892 0.544839 -0.671755 + -0.828572 1.93161 -1.54674 -0.04566 0.622728 -0.781105 + -0.884962 1.76516 -1.6048 -0.471562 0.844265 -0.254649 + -0.87817 1.81756 -1.5892 -0.841018 0.311302 -0.442469 + -0.867427 1.86948 -1.56556 -0.823135 0.372758 -0.428369 + -0.896729 1.76634 -1.60699 0.532001 0.687299 0.494565 + -0.91404 1.75833 -1.57116 -0.425466 0.881673 0.204038 + -0.890048 1.80422 -1.56183 -0.945887 0.308043 -0.102017 + -0.879305 1.85613 -1.5382 -0.976116 0.203773 -0.0753241 + -0.925807 1.75951 -1.57334 0.416597 0.58701 0.694166 + -0.913283 1.74562 -1.54745 -0.293624 0.672019 0.679835 + -0.889292 1.79151 -1.53811 -0.883087 0.204614 0.422245 + -0.877897 1.84482 -1.5174 -0.941031 0.000393014 0.33832 + -0.871914 1.91258 -1.5065 -0.980782 0.170719 -0.0944559 + -0.927912 1.80841 -1.56914 0.748761 -0.0563014 0.660444 + -0.955781 1.8022 -1.55238 0.356948 -0.15968 0.920375 + -0.953676 1.75329 -1.55657 0.10946 0.503488 0.85704 + -0.923794 1.74036 -1.53732 0.371164 0.92692 -0.0552796 + -0.923481 1.87607 -1.57706 0.931412 -0.00718635 0.363897 + -0.936802 1.86374 -1.55152 0.768744 -0.134296 0.625297 + -0.955874 1.85768 -1.53792 0.418948 -0.262017 0.869384 + -0.986097 1.80064 -1.54679 0.0576717 -0.220796 0.973614 + -0.988572 1.74562 -1.55695 -0.150924 0.398619 0.904613 + -0.932115 1.93356 -1.54674 0.936475 -0.0628728 0.345052 + -0.941907 1.9245 -1.52797 0.78366 -0.194031 0.590109 + -0.96098 1.91842 -1.51437 0.409649 -0.33383 0.848967 + -0.98619 1.85613 -1.53234 0.0389872 -0.292569 0.955449 + -1.01567 1.7933 -1.55082 -0.297138 -0.14412 0.943895 + -0.927522 1.94134 -1.56276 0.992671 0.10416 0.0612771 + -0.937515 1.98613 -1.51921 0.940351 -0.096075 0.326359 + -0.947307 1.97706 -1.50044 0.781325 -0.248362 0.57258 + -0.96172 1.97249 -1.49016 0.41677 -0.397877 0.817311 + -0.983264 1.91729 -1.51026 0.038501 -0.37452 0.926419 + -0.936118 1.99604 -1.53943 0.837471 0.369266 -0.402846 + -0.934046 1.99201 -1.53129 0.995022 0.0836096 0.0542295 + -0.938812 2.03584 -1.50142 0.990397 0.117413 0.0729926 + -0.942281 2.02995 -1.48935 0.936737 -0.072848 0.342369 + -0.950006 2.02281 -1.47453 0.783275 -0.227616 0.578508 + -0.949082 2.00065 -1.54913 0.554014 0.512331 -0.65619 + -0.95341 2.04363 -1.51755 0.54609 0.555685 -0.626898 + -0.940447 2.03902 -1.50785 0.838202 0.404192 -0.366124 + -0.946611 2.0652 -1.48899 0.766284 0.605202 -0.215731 + -0.944975 2.06202 -1.48256 0.906873 0.366954 0.207187 + -0.975847 2.00687 -1.56253 0.2442 0.588885 -0.770442 + -0.974527 2.04854 -1.52813 0.253542 0.62928 -0.734659 + -0.976944 2.0734 -1.50646 0.216557 0.78221 -0.584167 + -0.955827 2.06849 -1.4959 0.5129 0.716682 -0.472546 + -0.954597 2.07248 -1.48133 0.501042 0.862294 0.0735273 + -0.99642 2.00708 -1.56267 -0.296677 0.590083 -0.750856 + -0.995099 2.04874 -1.52825 -0.305563 0.630162 -0.713812 + -0.991595 2.07352 -1.50661 -0.261439 0.781612 -0.566332 + -0.990813 2.07877 -1.49456 -0.23599 0.934454 -0.266656 + -0.976162 2.07864 -1.49442 0.209394 0.939152 -0.272302 + -1.00074 1.95798 -1.5973 -0.309319 0.560863 -0.767955 + -1.01545 2.00132 -1.54956 -0.671264 0.479027 -0.565631 + -1.01011 2.04419 -1.51791 -0.662031 0.520583 -0.539174 + -1.00661 2.06898 -1.49627 -0.61735 0.681379 -0.393195 + -0.999594 2.0761 -1.48852 -0.449988 0.882143 -0.139047 + -1.01978 1.9522 -1.58419 -0.672114 0.459341 -0.580748 + -1.02503 1.99671 -1.53925 -0.881109 0.341643 -0.326996 + -1.01969 2.03959 -1.5076 -0.87834 0.3744 -0.297227 + -1.01336 2.06577 -1.48866 -0.80597 0.568286 -0.165721 + -1.00634 2.0729 -1.48091 -0.568024 0.818663 0.0844981 + -1.04108 1.89025 -1.60387 -0.878394 0.332351 -0.343462 + -1.03246 1.94612 -1.57052 -0.884638 0.332088 -0.327313 + -1.03476 1.94165 -1.56062 -0.989207 0.14568 0.0157156 + -1.02733 1.99224 -1.52935 -0.991211 0.1318 0.0113462 + -1.02151 2.03608 -1.49979 -0.98602 0.164408 0.0271031 + -1.05554 1.82437 -1.63257 -0.868041 0.324169 -0.376057 + -1.0442 1.88418 -1.5904 -0.984005 0.175679 0.0295085 + -1.04226 1.87778 -1.57615 -0.959584 0.0712467 0.272255 + -1.03281 1.93526 -1.54636 -0.966121 0.00840258 0.257954 + -1.02586 1.98743 -1.51856 -0.969797 -0.0168192 0.243333 + -1.06756 1.75407 -1.66038 -0.735671 0.414641 -0.535594 + -1.05867 1.81829 -1.61909 -0.968395 0.248755 -0.0182061 + -1.05823 1.80894 -1.59774 -0.94289 0.188163 0.27487 + -1.03468 1.86924 -1.55703 -0.861852 -0.0367449 0.505827 + -1.02724 1.92897 -1.53232 -0.875806 -0.108841 0.470232 + -1.05503 1.69481 -1.71634 -0.573101 0.490184 -0.656715 + -1.084 1.69714 -1.68879 -0.674157 0.490231 -0.552437 + -1.08388 1.74579 -1.64166 -0.91784 0.360949 -0.165182 + -1.08344 1.73643 -1.6203 -0.931969 0.222139 0.286508 + -1.05065 1.80039 -1.57863 -0.818814 0.0811334 0.568297 + -1.02788 1.62315 -1.79044 -0.289454 0.509889 -0.81008 + -1.0696 1.63577 -1.75368 -0.520732 0.518179 -0.678476 + -1.09857 1.6381 -1.72614 -0.556987 0.539667 -0.631289 + -1.10032 1.68885 -1.67007 -0.840847 0.477293 -0.25528 + -0.961734 1.6219 -1.79988 -0.010275 0.458752 -0.888505 + -0.964636 1.5442 -1.83363 0.0835684 0.379133 -0.921561 + -1.03632 1.56513 -1.82489 -0.228865 0.492134 -0.839896 + -1.07804 1.57775 -1.78813 -0.498248 0.49233 -0.713695 + -0.86351 1.54431 -1.82219 0.259389 0.267042 -0.92812 + -0.878343 1.44646 -1.8412 0.326135 0.179794 -0.928068 + -0.9756 1.49514 -1.85648 0.186908 0.35741 -0.915054 + -1.04729 1.51607 -1.84774 -0.25159 0.480981 -0.839857 + -1.0753 1.52508 -1.82485 -0.497551 0.457676 -0.736869 + -0.803685 1.53284 -1.79816 0.625118 0.186471 -0.757928 + -0.796508 1.42312 -1.80198 0.74657 -0.0126133 -0.665187 + -0.818518 1.43499 -1.81718 0.496852 0.0713508 -0.864897 + -0.779201 1.40679 -1.77117 0.858954 -0.0209808 -0.511623 + -0.814222 1.33839 -1.80653 0.640426 -0.322429 -0.697061 + -0.829046 1.35425 -1.82431 0.553095 -0.229478 -0.80089 + -0.851056 1.36611 -1.83951 0.440722 -0.141564 -0.88641 + -0.752212 1.49618 -1.6794 0.994201 -0.107525 -0.00179019 + -0.76183 1.39164 -1.74576 0.953425 -0.106439 -0.282224 + -0.79685 1.32324 -1.78111 0.788249 -0.426068 -0.443992 + -0.864718 1.29753 -1.81167 0.346095 -0.613927 -0.709445 + -0.879542 1.31338 -1.82945 0.258197 -0.505559 -0.823252 + -0.757383 1.48395 -1.636 0.944214 -0.153962 0.291127 + -0.767001 1.37943 -1.70236 0.95799 -0.27371 0.0856636 + -0.792378 1.31083 -1.73172 0.819668 -0.570517 -0.0515171 + -0.805334 1.30464 -1.76866 0.690927 -0.647656 -0.321188 + -0.86489 1.28634 -1.80025 0.319797 -0.674995 -0.664915 + -0.758081 1.56626 -1.59838 0.901097 -0.153857 0.405404 + -0.785969 1.473 -1.59462 0.820348 -0.134906 0.555724 + -0.777832 1.37883 -1.62356 0.905003 -0.270068 0.328684 + -0.80321 1.31023 -1.65291 0.785106 -0.58282 0.209593 + -0.762522 1.6324 -1.56747 0.890223 -0.112723 0.441356 + -0.786667 1.5553 -1.557 0.737383 -0.231265 0.634651 + -0.844632 1.49219 -1.52469 0.573965 -0.0973955 0.813067 + -0.814774 1.46235 -1.54842 0.74533 0.0523511 0.664638 + -0.765889 1.69882 -1.54682 0.877079 -0.106486 0.468395 + -0.787836 1.60928 -1.53775 0.698236 -0.180004 0.692868 + -0.837401 1.59422 -1.50277 0.538881 -0.204098 0.817283 + -0.836232 1.54024 -1.52202 0.541309 -0.204292 0.815628 + -0.754476 1.71575 -1.57263 0.983949 -0.010114 0.178165 + -0.769974 1.77104 -1.52429 0.803068 -0.111664 0.585331 + -0.791203 1.67569 -1.51711 0.566783 -0.134394 0.812831 + -0.832232 1.66576 -1.50159 0.583904 0.209753 0.784258 + -0.758561 1.78796 -1.55009 0.983459 0.00664217 0.181008 + -0.764901 1.85098 -1.52125 0.973265 0.0260329 0.228204 + -0.774543 1.8401 -1.50329 0.78652 -0.153738 0.598122 + -0.79282 1.75793 -1.50947 0.432875 -0.146761 0.889427 + -0.765688 1.86275 -1.54751 0.950277 0.239754 -0.198725 + -0.77504 1.9167 -1.51119 0.947341 0.270981 -0.17063 + -0.774462 1.90805 -1.49188 0.973254 0.024937 0.228373 + -0.784104 1.89718 -1.47393 0.785585 -0.20298 0.584513 + -0.797389 1.827 -1.48848 0.457099 -0.276565 0.845324 + -0.786851 1.92484 -1.53005 0.711075 0.476506 -0.517025 + -0.79177 1.97231 -1.49268 0.712307 0.491471 -0.501073 + -0.782852 1.96615 -1.47846 0.944844 0.27537 -0.177317 + -0.782274 1.95751 -1.45914 0.975602 -0.00478825 0.219495 + -0.811053 1.97734 -1.50506 0.371627 0.616783 -0.693881 + -0.812841 2.01759 -1.46816 0.372689 0.654804 -0.657522 + -0.797628 2.01363 -1.45839 0.700356 0.532257 -0.475609 + -0.78871 2.00747 -1.44416 0.942368 0.30002 -0.148092 + -0.828013 1.97864 -1.50834 -0.0387738 0.652543 -0.756759 + -0.829801 2.0189 -1.47144 -0.0453624 0.693058 -0.719453 + -0.816785 2.04146 -1.44513 0.326457 0.793863 -0.513038 + -0.801572 2.03748 -1.43537 0.647661 0.688267 -0.32684 + -0.84646 1.97652 -1.50322 -0.504384 0.566943 -0.651285 + -0.844355 2.01723 -1.4674 -0.493983 0.609319 -0.620251 + -0.828873 2.04234 -1.44754 -0.0306886 0.823086 -0.567087 + -0.829989 2.04737 -1.43556 -0.0497992 0.968762 -0.24294 + -0.817901 2.04647 -1.43316 0.25941 0.937266 -0.232892 + -0.858672 1.97117 -1.49188 -0.825384 0.387134 -0.410937 + -0.856566 2.01188 -1.45606 -0.825313 0.417327 -0.38039 + -0.843427 2.04067 -1.44351 -0.465512 0.753488 -0.464278 + -0.8385 2.04639 -1.43321 -0.312177 0.937369 -0.154544 + -0.863182 1.92239 -1.52662 -0.831654 0.370901 -0.413261 + -0.867404 1.96136 -1.47176 -0.982855 0.158866 -0.0935788 + -0.863455 2.00413 -1.44018 -0.978324 0.192189 -0.0771096 + -0.852103 2.03688 -1.43541 -0.754099 0.607915 -0.248543 + -0.86634 1.95281 -1.45605 -0.952865 -0.103577 0.285166 + -0.862391 1.99558 -1.42447 -0.946617 -0.0891164 0.309796 + -0.858992 2.02914 -1.41954 -0.910348 0.40723 0.0736918 + -0.851204 2.03807 -1.41583 -0.644971 0.725994 0.238632 + -0.847176 2.0426 -1.42511 -0.551467 0.833621 0.0309861 + -0.870505 1.90126 -1.4857 -0.947568 -0.0761338 0.310353 + -0.855242 1.94359 -1.44121 -0.718738 -0.328704 0.612674 + -0.853636 1.98831 -1.41276 -0.719562 -0.311967 0.620409 + -0.85823 2.02307 -1.40831 -0.880551 0.187933 0.435099 + -0.850442 2.032 -1.4046 -0.616316 0.552086 0.561565 + -0.859408 1.89205 -1.47086 -0.719033 -0.273932 0.638712 + -0.84165 1.93848 -1.43341 -0.378928 -0.454768 0.805977 + -0.840044 1.98319 -1.40497 -0.370014 -0.445191 0.815411 + -0.839799 2.01216 -1.39104 -0.346252 -0.125076 0.929766 + -0.849475 2.0158 -1.3966 -0.653254 -0.0181182 0.756922 + -0.8628 1.83228 -1.49721 -0.700578 -0.188892 0.688121 + -0.844815 1.82551 -1.48689 -0.365152 -0.299583 0.881427 + -0.841422 1.88527 -1.46055 -0.36923 -0.390232 0.843439 + -0.8225 1.93631 -1.43091 0.0673759 -0.486757 0.870935 + -0.824935 1.98148 -1.40299 0.0594858 -0.479681 0.875424 + -0.874195 1.77897 -1.51791 -0.631738 -0.0953256 0.769299 + -0.84636 1.76001 -1.5058 -0.325903 -0.246802 0.91262 + -0.818764 1.82256 -1.48349 0.0664525 -0.32836 0.942212 + -0.822272 1.88311 -1.45804 0.0592593 -0.417445 0.906768 + -0.884407 1.72657 -1.53545 -0.153748 0.309262 0.938466 + -0.856572 1.70761 -1.52333 -0.168963 0.220004 0.960755 + -0.820309 1.75707 -1.50241 0.02009 -0.215358 0.976329 + -0.800897 1.88754 -1.46304 0.47293 -0.349431 0.808848 + -0.894918 1.72132 -1.52531 0.600347 0.793044 0.103276 + -0.870112 1.69854 -1.51488 0.573723 0.789857 0.216722 + -0.818692 1.67483 -1.51004 0.131552 0.29778 0.945527 + -0.925882 1.77462 -1.50761 0.502066 0.602654 -0.620273 + -0.903651 1.76204 -1.48842 0.699505 0.533594 -0.475362 + -0.878845 1.73927 -1.47799 0.858185 0.486475 -0.163891 + -0.952938 1.74542 -1.54417 -0.0222476 0.995374 -0.0934673 + -0.955026 1.77968 -1.51447 0.0120528 0.665044 -0.746707 + -0.952568 1.8216 -1.47601 0.0382501 0.685138 -0.727409 + -0.931047 1.81741 -1.4704 0.518223 0.597492 -0.611922 + -0.908816 1.80483 -1.45121 0.764668 0.482294 -0.427406 + -0.987834 1.73775 -1.54454 -0.288217 0.951613 -0.106601 + -0.982022 1.77671 -1.5081 -0.244803 0.672643 -0.6983 + -0.979564 1.81863 -1.46965 -0.337055 0.650955 -0.680185 + -1.01815 1.73827 -1.56097 -0.310807 0.264974 0.912791 + -1.01475 1.72657 -1.54594 -0.445772 0.894263 -0.0397493 + -1.00893 1.76552 -1.50949 -0.55517 0.628102 -0.545229 + -0.994451 1.81507 -1.46328 -0.610959 0.590116 -0.527724 + -0.97368 1.8672 -1.42555 -0.331486 0.667198 -0.667056 + -1.05153 1.72021 -1.57018 -0.678542 0.247599 0.691574 + -1.04813 1.70852 -1.55514 -0.794529 0.488288 0.360968 + -1.01599 1.76034 -1.50129 -0.903596 0.415545 -0.104097 + -1.00151 1.80988 -1.45507 -0.930384 0.336381 -0.145717 + -0.988567 1.86364 -1.41917 -0.628021 0.570687 -0.529061 + -1.0327 1.79865 -1.56084 -0.620006 -0.0294021 0.784046 + -1.06948 1.72195 -1.58796 -0.793704 0.0978317 0.600385 + -1.08878 1.67161 -1.60646 -0.855911 0.180056 0.484764 + -1.04836 1.68864 -1.53604 -0.890805 0.13957 0.43242 + -1.0069 1.85779 -1.53428 -0.33282 -0.248125 0.909761 + -1.02393 1.86315 -1.54429 -0.675669 -0.151786 0.72141 + -1.00397 1.91895 -1.51221 -0.346819 -0.336182 0.875613 + -1.01649 1.92288 -1.51957 -0.680799 -0.233301 0.694322 + -0.984005 1.97135 -1.48604 0.0314484 -0.444111 0.895419 + -0.999619 1.97261 -1.48749 -0.344846 -0.403809 0.84736 + -1.01214 1.97655 -1.49485 -0.686794 -0.286449 0.668028 + -1.0203 1.98114 -1.50452 -0.877307 -0.151552 0.455372 + -0.964419 2.01823 -1.46426 0.407492 -0.389519 0.825969 + -0.982001 2.01733 -1.46101 0.0373872 -0.434607 0.899844 + -0.997615 2.0186 -1.46245 -0.34794 -0.391279 0.851962 + -1.00749 2.02171 -1.46826 -0.680776 -0.273483 0.679523 + -1.01565 2.02629 -1.47792 -0.875941 -0.130227 0.464509 + -0.955171 2.05069 -1.45916 0.720065 0.0675929 0.690606 + -0.965424 2.04743 -1.45186 0.402204 -0.0619828 0.913449 + -0.983006 2.04653 -1.44862 0.0337902 -0.108413 0.993531 + -0.994161 2.04743 -1.44967 -0.306286 -0.0729372 0.949141 + -1.00404 2.05053 -1.45548 -0.635883 0.0332925 0.771067 + -0.947446 2.05783 -1.47398 0.867983 0.213795 0.448215 + -0.956111 2.06645 -1.46899 0.610177 0.586505 0.532631 + -0.960629 2.06227 -1.46033 0.546666 0.49236 0.677302 + -0.970882 2.059 -1.45302 0.286682 0.355062 0.8898 + -0.953641 2.07063 -1.47757 0.593337 0.72326 0.353335 + -0.967214 2.07131 -1.46621 0.265496 0.845889 0.462584 + -0.971731 2.06713 -1.45755 0.221329 0.705967 0.672773 + -0.982013 2.06661 -1.45565 -0.00177327 0.712973 0.701189 + -0.981163 2.05847 -1.45113 0.0549696 0.337265 0.939804 + -0.970723 2.07549 -1.47471 0.179435 0.915809 0.3593 + -0.969766 2.07362 -1.47095 0.15416 0.909084 0.387041 + -0.987789 2.06842 -1.45905 -0.153577 0.806631 0.570754 + -0.992319 2.05937 -1.45218 -0.229001 0.414255 0.880881 + -0.963814 2.07577 -1.48824 0.367629 0.919463 -0.139413 + -0.972252 2.07813 -1.48049 0.234788 0.943636 0.233294 + -0.992911 2.07364 -1.47028 -0.174837 0.875338 0.450795 + -0.990342 2.07074 -1.46379 -0.163391 0.857355 0.488104 + -0.998095 2.06118 -1.45558 -0.422733 0.510091 0.749069 + -0.984601 2.08101 -1.48667 -0.0231295 0.998052 0.0579329 + -0.993381 2.07834 -1.48062 -0.216603 0.949029 0.228971 + -0.99444 2.07629 -1.47606 -0.207986 0.89141 0.402654 + -1.0074 2.07084 -1.47634 -0.605436 0.731746 0.313041 + -1.00647 2.06735 -1.46898 -0.589308 0.661583 0.463707 + -1.00391 2.06445 -1.46249 -0.541286 0.599912 0.589165 + -1.00985 2.05379 -1.4624 -0.810502 0.145974 0.567255 + -1.01517 2.06224 -1.48085 -0.908251 0.392521 0.144941 + -1.01424 2.05876 -1.47348 -0.897053 0.265032 0.353631 + -1.02004 2.03125 -1.48901 -0.965931 0.00602489 0.258728 + -1.10274 1.68609 -1.6388 -0.928522 0.286858 0.235709 + -1.12121 1.65122 -1.66364 -0.900856 0.39323 0.183924 + -1.1061 1.64277 -1.62382 -0.852629 0.243119 0.462511 + -1.08274 1.6196 -1.57935 -0.803775 0.207646 0.55752 + -1.06543 1.64843 -1.56198 -0.836344 0.0856898 0.541467 + -1.11879 1.65398 -1.69492 -0.724962 0.575102 -0.379063 + -1.14137 1.61459 -1.68087 -0.902482 0.424152 0.07497 + -1.12625 1.60613 -1.64105 -0.84108 0.30273 0.448261 + -1.10805 1.58706 -1.76083 -0.511412 0.5276 -0.678303 + -1.12827 1.60294 -1.7296 -0.649726 0.528113 -0.546766 + -1.14801 1.59761 -1.70914 -0.78781 0.5466 -0.283872 + -1.16836 1.5483 -1.68293 -0.938686 0.291499 0.184111 + -1.10532 1.53438 -1.79755 -0.484818 0.473429 -0.735402 + -1.13309 1.54353 -1.7746 -0.606646 0.44187 -0.660857 + -1.15283 1.53819 -1.75413 -0.794711 0.347706 -0.497529 + -1.17501 1.53132 -1.71119 -0.992373 0.118036 -0.0355381 + -1.09534 1.48847 -1.83271 -0.515778 0.38929 -0.763169 + -1.12311 1.49763 -1.80977 -0.609845 0.349881 -0.711107 + -1.15272 1.49406 -1.77795 -0.807926 0.224801 -0.54472 + -1.17489 1.48719 -1.73501 -0.957577 0.110455 -0.266168 + -1.17284 1.51873 -1.66879 -0.9567 0.181032 0.227931 + -1.07225 1.49111 -1.84717 -0.506229 0.397058 -0.765557 + -1.06557 1.4637 -1.86328 -0.488367 0.259635 -0.833119 + -1.11164 1.45681 -1.83562 -0.643574 0.189797 -0.741478 + -1.14125 1.45325 -1.8038 -0.765504 0.0850554 -0.637784 + -1.16209 1.43471 -1.77781 -0.893668 -0.0357329 -0.447304 + -1.04423 1.48211 -1.87005 -0.218264 0.443524 -0.86928 + -1.04247 1.46635 -1.87773 -0.272638 0.0838189 -0.958458 + -1.00107 1.43371 -1.88308 0.105073 0.110682 -0.988286 + -1.05129 1.43838 -1.87943 -0.24013 0.267479 -0.933163 + -1.09737 1.43149 -1.85176 -0.630431 0.0146473 -0.776107 + -1.00247 1.46289 -1.8726 0.202006 0.383679 -0.901101 + -1.00071 1.44711 -1.88027 0.207208 0.318562 -0.924977 + -0.905572 1.40079 -1.86012 0.273116 0.129672 -0.953202 + -1.00389 1.40927 -1.88379 0.091356 -0.043122 -0.994884 + -1.05412 1.41394 -1.88015 -0.361046 -0.127194 -0.923833 + -0.905215 1.41419 -1.85732 0.302473 0.209436 -0.929864 + -0.879577 1.38728 -1.85458 0.391346 0.0133918 -0.920146 + -0.977897 1.39575 -1.87826 0.162585 -0.14137 -0.976515 + -1.03086 1.39979 -1.88477 -0.114306 -0.409271 -0.905225 + -0.909016 1.37928 -1.86229 0.219388 -0.203368 -0.954207 + -0.880494 1.35811 -1.84722 0.260736 -0.32044 -0.910678 + -0.91712 1.35833 -1.85396 0.0698016 -0.443323 -0.89364 + -0.943902 1.36906 -1.86388 -0.0627396 -0.52475 -0.848941 + -0.935798 1.39002 -1.87222 0.0335625 -0.449008 -0.892897 + -0.916168 1.3136 -1.83618 -0.0729311 -0.532352 -0.843375 + -0.960586 1.34898 -1.84185 -0.287512 -0.601493 -0.745347 + -0.967246 1.38002 -1.86474 -0.232559 -0.636904 -0.73503 + -0.996414 1.38162 -1.86005 -0.0993971 -0.755664 -0.647373 + -0.988765 1.39406 -1.87874 0.0326634 -0.61536 -0.787569 + -1.05268 1.39308 -1.8694 -0.307762 -0.665633 -0.679864 + -1.07593 1.40723 -1.86478 -0.539408 -0.326004 -0.776377 + -1.06033 1.38065 -1.85071 -0.252805 -0.744048 -0.618452 + -1.09939 1.39036 -1.83797 -0.549298 -0.490807 -0.676299 + -1.12082 1.41464 -1.82495 -0.717299 -0.125166 -0.685431 + -1.06981 1.35429 -1.81241 -0.23753 -0.775376 -0.585125 + -1.10887 1.36402 -1.79966 -0.471611 -0.630467 -0.616518 + -1.14166 1.3961 -1.79896 -0.72833 -0.303682 -0.614257 + -1.1536 1.37329 -1.7689 -0.797641 -0.374192 -0.473022 + -1.16897 1.41515 -1.74191 -0.967478 -0.131729 -0.215948 + -1.02125 1.36435 -1.83674 -0.175971 -0.734549 -0.655341 + -1.01555 1.35052 -1.81807 -0.107532 -0.847897 -0.519141 + -1.06411 1.34048 -1.79374 -0.130243 -0.877904 -0.460783 + -1.12081 1.34121 -1.76961 -0.391113 -0.683013 -0.616866 + -0.99208 1.36275 -1.84143 -0.224003 -0.731134 -0.644411 + -0.993649 1.35055 -1.82362 -0.224075 -0.842317 -0.490196 + -1.00441 1.33839 -1.79689 -0.0287457 -0.936412 -0.349722 + -1.01752 1.33057 -1.77356 0.129109 -0.99008 -0.0554308 + -1.07722 1.33266 -1.77041 -0.118343 -0.865469 -0.486783 + -0.98393 1.35994 -1.8427 -0.31843 -0.674411 -0.666162 + -0.985499 1.34774 -1.8249 -0.414596 -0.790654 -0.450529 + -0.98251 1.3384 -1.80245 -0.215971 -0.95673 -0.194997 + -0.974722 1.33694 -1.78108 -0.0578647 -0.982442 0.17737 + -0.963161 1.32996 -1.82532 -0.533246 -0.708516 -0.462226 + -0.975116 1.33601 -1.80524 -0.504604 -0.860644 -0.0683099 + -0.918743 1.29457 -1.81965 -0.224243 -0.692597 -0.685583 + -0.952777 1.31823 -1.80566 -0.666774 -0.741382 -0.0759341 + -0.967328 1.33454 -1.78386 -0.495941 -0.83553 0.2365 + -0.918915 1.28339 -1.80822 -0.344704 -0.832042 -0.434609 + -0.94631 1.31106 -1.78594 -0.7073 -0.680454 0.191596 + -0.941823 1.32009 -1.7633 -0.742413 -0.612218 0.27205 + -0.962841 1.34356 -1.76123 -0.45567 -0.809372 0.370515 + -0.912448 1.27623 -1.78851 -0.464107 -0.851731 -0.243226 + -0.905776 1.26502 -1.76626 -0.525256 -0.844972 -0.100638 + -0.908231 1.27295 -1.75308 -0.852086 -0.513351 0.102083 + -0.944279 1.32802 -1.75012 -0.77189 -0.60442 0.197136 + -0.873374 1.26773 -1.7878 0.120622 -0.762145 -0.63607 + -0.866702 1.25654 -1.76555 0.179958 -0.967861 -0.175672 + -0.853746 1.26272 -1.72861 0.36219 -0.930236 -0.0589842 + -0.902844 1.26036 -1.73079 -0.455028 -0.882391 -0.119733 + -0.906507 1.2704 -1.74915 -0.906012 -0.423252 -0.000438769 + -0.854407 1.25904 -1.69102 0.400661 -0.916198 0.00725012 + -0.903505 1.25667 -1.6932 -0.427851 -0.898359 -0.0994688 + -0.943571 1.31249 -1.6796 -0.81202 -0.569409 -0.128053 + -0.933747 1.30773 -1.71638 -0.830983 -0.537681 -0.142713 + -0.93741 1.31778 -1.73474 -0.82851 -0.538919 -0.152109 + -0.824142 1.30322 -1.61679 0.635607 -0.656789 0.40575 + -0.875339 1.25203 -1.6549 0.218927 -0.960509 0.171738 + -0.906429 1.25446 -1.66273 -0.443213 -0.896406 -0.00427416 + -0.828588 1.32435 -1.58429 0.604075 -0.563931 0.563094 + -0.893779 1.26871 -1.61192 0.138584 -0.882422 0.449584 + -0.924869 1.27115 -1.61975 -0.561155 -0.82311 0.0871518 + -0.946496 1.31028 -1.64912 -0.801549 -0.580988 -0.14132 + -0.806637 1.36818 -1.57736 0.752837 -0.299582 0.586078 + -0.888762 1.33938 -1.5282 0.446472 -0.501837 0.740826 + -0.898225 1.28984 -1.57942 0.236675 -0.79988 0.551522 + -0.931525 1.27846 -1.59554 -0.446088 -0.86093 0.244549 + -0.944885 1.30645 -1.6432 -0.818586 -0.564125 -0.108075 + -0.866811 1.38322 -1.52127 0.533514 -0.259367 0.805041 + -0.915406 1.33821 -1.5161 0.146542 -0.625799 0.766095 + -0.898161 1.30431 -1.5557 0.548481 -0.695978 0.463447 + -0.931461 1.29292 -1.57181 -0.134422 -0.885844 0.444084 + -0.89667 1.41305 -1.49754 0.483713 -0.132438 0.865149 + -0.926071 1.48754 -1.48244 0.363866 -0.0126134 0.931366 + -0.958812 1.47239 -1.46701 0.222013 0.168505 0.960373 + -0.929411 1.3979 -1.48212 0.464505 -0.134078 0.875361 + -0.917671 1.53559 -1.47976 0.320139 -0.170836 0.93184 + -0.992002 1.49626 -1.47072 -0.106889 0.113836 0.987733 + -0.975596 1.43157 -1.46301 0.148548 0.0180906 0.98874 + -0.985385 1.40246 -1.46142 0.133275 0.00861454 0.991042 + -0.9392 1.36879 -1.48052 0.529687 -0.136329 0.837166 + -0.909642 1.57166 -1.47418 0.323231 -0.241514 0.914982 + -0.967667 1.5725 -1.4625 -0.132686 -0.192944 0.972197 + -0.975695 1.53644 -1.46807 -0.0810722 -0.07865 0.9936 + -1.02872 1.5178 -1.48609 -0.506208 0.164417 0.846594 + -1.00879 1.45545 -1.46672 -0.239736 0.115339 0.963962 + -0.849331 1.64797 -1.4825 0.606455 -0.0838512 0.790684 + -0.921571 1.62542 -1.45391 0.311314 -0.261905 0.913504 + -0.96191 1.62178 -1.44692 -0.148253 -0.293165 0.944497 + -0.99954 1.58436 -1.4781 -0.583804 -0.0313831 0.811288 + -1.01241 1.55797 -1.48345 -0.520782 0.112509 0.846243 + -0.89595 1.71482 -1.44879 0.651254 -0.120181 0.749283 + -0.924839 1.70033 -1.42998 0.425196 -0.289024 0.857714 + -0.965178 1.6967 -1.42299 -0.10667 -0.376135 0.920404 + -0.993784 1.63365 -1.46253 -0.644593 -0.203386 0.736976 + -1.03451 1.61165 -1.51412 -0.76567 0.0762977 0.638692 + -0.878852 1.73262 -1.46788 0.867103 0.180607 0.464234 + -0.899094 1.78978 -1.42827 0.925539 -0.0306324 0.377411 + -0.911742 1.78053 -1.41565 0.698934 -0.269162 0.662603 + -0.940631 1.76602 -1.39685 0.447424 -0.394469 0.802624 + -0.899087 1.79644 -1.43839 0.936939 0.327141 -0.122981 + -0.906243 1.84754 -1.39768 0.951956 0.259521 -0.16257 + -0.906249 1.84265 -1.39025 0.942178 -0.120714 0.312617 + -0.918897 1.8334 -1.37762 0.707862 -0.371766 0.600601 + -0.915972 1.85595 -1.4105 0.774524 0.461932 -0.432125 + -0.911958 1.89358 -1.35878 0.950607 0.262781 -0.165201 + -0.911964 1.88869 -1.35134 0.943951 -0.153564 0.292189 + -0.921495 1.8817 -1.34177 0.713127 -0.417147 0.563417 + -0.940133 1.82274 -1.3638 0.475995 -0.476833 0.738959 + -0.932314 1.86519 -1.42462 0.52505 0.602032 -0.601564 + -0.935626 1.90917 -1.38255 0.514935 0.630654 -0.580618 + -0.919284 1.89993 -1.36844 0.773918 0.477572 -0.415903 + -0.923294 1.9384 -1.32966 0.767415 0.509108 -0.389721 + -0.915968 1.93204 -1.31999 0.95007 0.28164 -0.134336 + -0.953835 1.86938 -1.43022 0.0313139 0.700647 -0.712821 + -0.95189 1.91233 -1.3868 0.0400432 0.730366 -0.681882 + -0.952452 1.94884 -1.34504 0.0329559 0.76326 -0.645251 + -0.936187 1.94568 -1.34079 0.520211 0.657447 -0.545109 + -0.971735 1.91015 -1.38211 -0.330231 0.696033 -0.637562 + -0.968108 1.94712 -1.34135 -0.322806 0.729585 -0.602911 + -0.950922 1.97011 -1.31884 0.0509809 0.857286 -0.512311 + -0.939359 1.96785 -1.31586 0.480082 0.770957 -0.418506 + -0.926466 1.96057 -1.30472 0.729153 0.6365 -0.251403 + -0.982981 1.90748 -1.37727 -0.620831 0.594702 -0.510782 + -0.979354 1.94445 -1.3365 -0.620038 0.623844 -0.475785 + -0.966579 1.96839 -1.31515 -0.302998 0.828806 -0.470397 + -0.96174 1.9735 -1.30556 -0.206415 0.96463 -0.163957 + -0.952584 1.9745 -1.30772 0.0363779 0.986315 -0.16081 + -0.993755 1.85983 -1.41314 -0.93619 0.299033 -0.184735 + -0.988169 1.90367 -1.37124 -0.936612 0.299991 -0.181005 + -0.983448 1.94144 -1.33175 -0.932314 0.326099 -0.156365 + -0.974644 1.9664 -1.31195 -0.572853 0.746425 -0.338658 + -0.969805 1.9715 -1.30236 -0.434444 0.89926 -0.0509001 + -1.00188 1.79872 -1.4398 -0.984069 0.0783702 0.159582 + -0.994129 1.84866 -1.39787 -0.99149 0.0328186 0.125979 + -0.988447 1.89522 -1.35972 -0.993575 0.0199373 0.111409 + -0.983726 1.933 -1.32021 -0.990769 0.0350772 0.130948 + -0.978738 1.9634 -1.30719 -0.874648 0.484746 -0.00345629 + -1.01623 1.74048 -1.4822 -0.948702 0.168944 0.26725 + -0.995673 1.77835 -1.41304 -0.914287 -0.11021 0.389786 + -0.989565 1.83369 -1.3782 -0.927134 -0.14191 0.346821 + -0.983883 1.88026 -1.34004 -0.927613 -0.177096 0.328893 + -0.980124 1.92119 -1.3047 -0.926822 -0.161084 0.339194 + -1.01002 1.72012 -1.45543 -0.884363 -0.0721925 0.461183 + -0.986358 1.70191 -1.42978 -0.597492 -0.306496 0.740988 + -0.983694 1.76718 -1.39836 -0.637187 -0.33585 0.693684 + -0.977586 1.82251 -1.36353 -0.632741 -0.390838 0.668494 + -0.974832 1.87181 -1.32896 -0.641643 -0.441238 0.627378 + -1.01744 1.65185 -1.48818 -0.816826 -0.104458 0.567348 + -0.962515 1.76197 -1.39159 -0.0408746 -0.466521 0.883565 + -0.962017 1.81868 -1.35854 -0.0486911 -0.536721 0.842354 + -1.04738 1.58525 -1.51946 -0.709079 0.214903 0.671583 + -1.06727 1.53607 -1.52473 -0.704163 0.22816 0.672382 + -1.04955 1.45545 -1.48666 -0.551179 0.162455 0.818419 + -1.10264 1.57041 -1.58462 -0.773551 0.281002 0.568029 + -1.1312 1.49015 -1.58202 -0.801776 0.204968 0.561376 + -1.0881 1.47372 -1.5253 -0.70442 0.195132 0.682434 + -1.08911 1.40826 -1.51204 -0.745394 0.0500508 0.664743 + -1.06464 1.41698 -1.4888 -0.596013 0.102991 0.796342 + -1.13073 1.57656 -1.62691 -0.802559 0.333469 0.494669 + -1.15929 1.49629 -1.62432 -0.877949 0.0822719 0.471633 + -1.16822 1.44519 -1.65465 -0.962054 -0.0510071 0.26805 + -1.16132 1.42747 -1.62544 -0.952895 -0.0187484 0.30272 + -1.14646 1.44239 -1.58743 -0.886167 0.0826178 0.455941 + -1.18177 1.46764 -1.69911 -0.999475 -0.00395709 0.0321609 + -1.16971 1.38401 -1.71198 -0.980138 -0.195089 -0.0356455 + -1.16281 1.36629 -1.68276 -0.954273 -0.243047 0.174045 + -1.15087 1.38488 -1.61849 -0.902374 -0.258588 0.344752 + -1.13601 1.3998 -1.58048 -0.859078 -0.156505 0.487331 + -1.15435 1.34214 -1.73898 -0.838713 -0.427998 -0.336717 + -1.15551 1.33786 -1.69304 -0.908353 -0.40434 0.106789 + -1.14358 1.35647 -1.62877 -0.842491 -0.434269 0.318779 + -1.12177 1.38211 -1.56183 -0.849258 -0.147795 0.50687 + -1.10336 1.42596 -1.53069 -0.776559 0.0606686 0.627116 + -1.14122 1.31857 -1.73434 -0.532018 -0.776227 -0.338274 + -1.14238 1.31428 -1.68841 -0.53909 -0.8226 0.180862 + -1.13185 1.33538 -1.63701 -0.478529 -0.805413 0.349743 + -1.123 1.3416 -1.60631 -0.49341 -0.837358 0.235324 + -1.13473 1.36269 -1.59807 -0.932562 -0.184748 0.310156 + -1.09764 1.31002 -1.73515 -0.0600342 -0.968137 -0.24312 + -1.08148 1.30923 -1.71925 0.173325 -0.957252 -0.231574 + -1.09911 1.30895 -1.69599 0.0262624 -0.986821 0.159673 + -1.08858 1.33004 -1.64459 0.0642073 -0.951029 0.302361 + -1.08388 1.33706 -1.61943 0.00117658 -0.99386 0.110644 + -1.01234 1.33979 -1.75085 0.268562 -0.959749 0.0821983 + -0.998055 1.34162 -1.73825 0.217022 -0.957711 -0.188919 + -1.08335 1.31185 -1.72254 0.428468 -0.728845 -0.534041 + -0.969543 1.34615 -1.75837 0.0101574 -0.956433 0.291774 + -0.965886 1.35 -1.74384 -0.0307256 -0.999527 -0.00144084 + -0.995594 1.34006 -1.73234 0.173426 -0.844825 -0.506155 + -0.959184 1.34741 -1.74669 -0.5284 -0.828906 0.183597 + -0.963425 1.34844 -1.73791 -0.140448 -0.919039 -0.368294 + -0.99372 1.33744 -1.72904 0.0845933 -0.640538 -0.763253 + -0.990595 1.33114 -1.72509 0.13701 -0.886124 -0.442733 + -1.00822 1.33085 -1.70182 0.19308 -0.964863 0.17821 + -0.95694 1.34591 -1.74022 -0.612021 -0.784068 -0.103283 + -0.960751 1.3446 -1.73259 -0.203137 -0.7347 -0.647264 + -0.957626 1.33829 -1.72863 -0.22033 -0.861657 -0.457167 + -0.960991 1.33745 -1.70855 -0.107104 -0.993787 0.0302585 + -1.01772 1.33528 -1.66846 0.135129 -0.971788 0.19331 + -0.942035 1.32651 -1.74363 -0.811014 -0.581756 0.0617796 + -0.954266 1.34206 -1.73489 -0.641603 -0.690389 -0.334229 + -0.951365 1.33587 -1.72993 -0.6809 -0.684109 -0.261477 + -0.95473 1.33503 -1.70984 -0.621785 -0.775724 -0.107869 + -0.970486 1.34187 -1.67517 -0.0865242 -0.99325 0.0772496 + -0.940311 1.32397 -1.7397 -0.825138 -0.555887 -0.100681 + -0.964555 1.33979 -1.67305 -0.588996 -0.805096 -0.070021 + -0.975047 1.343 -1.65421 -0.106749 -0.994286 0.000790287 + -0.969116 1.34092 -1.65209 -0.563581 -0.810951 -0.15727 + -0.975156 1.34222 -1.6462 -0.256534 -0.918018 -0.302379 + -1.01302 1.3423 -1.6433 0.0684837 -0.994645 0.0774064 + -0.967505 1.3371 -1.64616 -0.647959 -0.704487 -0.289564 + -0.972093 1.32925 -1.62651 -0.345998 -0.785019 -0.513839 + -1.00627 1.33112 -1.61759 -0.16015 -0.833879 -0.528202 + -1.01313 1.34151 -1.63528 -0.0436079 -0.956924 -0.287044 + -0.95154 1.31375 -1.61899 -0.655142 -0.70744 -0.265174 + -0.964442 1.32413 -1.62648 -0.415925 -0.775437 -0.475083 + -0.966954 1.3028 -1.59418 -0.0525192 -0.818805 -0.571665 + -1.00113 1.30466 -1.58525 -0.226532 -0.810941 -0.539497 + -0.946222 1.29217 -1.58454 -0.386929 -0.921374 -0.0368235 + -0.959124 1.30255 -1.59204 -0.133294 -0.838926 -0.52767 + -0.965185 1.29072 -1.57667 0.00321453 -0.875983 -0.482332 + -0.99787 1.29022 -1.56055 -0.215064 -0.876743 -0.430197 + -1.05856 1.31114 -1.56816 -0.34662 -0.865903 -0.360648 + -0.939566 1.30239 -1.55634 -0.38153 -0.701608 0.601815 + -0.957355 1.29046 -1.57453 -0.0240168 -0.983625 0.178618 + -0.961993 1.29199 -1.57414 0.182617 -0.817752 0.545832 + -0.964165 1.28973 -1.57497 0.433743 -0.878655 -0.199582 + -0.996851 1.28924 -1.55885 -0.0132995 -0.987392 -0.157734 + -0.924805 1.30314 -1.54361 -0.13515 -0.744394 0.65392 + -0.921874 1.33846 -1.52023 -0.14568 -0.778188 0.610901 + -0.946034 1.30264 -1.56046 -0.34344 -0.565627 0.749743 + -0.950673 1.30417 -1.56006 0.0581413 -0.778074 0.625476 + -0.95556 1.31203 -1.54408 0.373475 -0.801729 0.466634 + -0.977756 1.2971 -1.54699 0.516219 -0.732936 0.443085 + -0.979928 1.29485 -1.54782 0.413325 -0.843953 0.341914 + -1.03297 1.28272 -1.52354 -0.189174 -0.978299 0.084523 + -1.05531 1.2967 -1.54347 -0.565358 -0.794439 -0.221892 + -0.926761 1.34633 -1.50425 -0.144246 -0.947473 0.285463 + -0.965624 1.33399 -1.49664 0.395119 -0.790783 0.467486 + -0.987821 1.31907 -1.49956 0.489562 -0.730359 0.476345 + -1.01605 1.28833 -1.51252 0.288612 -0.884435 0.366711 + -1.04665 1.2969 -1.50157 -0.532196 -0.687789 0.493673 + -0.936756 1.35346 -1.48437 0.581016 -0.413242 0.701179 + -0.975619 1.34114 -1.47677 0.380523 -0.763947 0.52114 + -0.99798 1.32681 -1.47853 0.436767 -0.698445 0.566931 + -1.02621 1.29607 -1.4915 0.0172932 -0.790759 0.611884 + -0.995526 1.34064 -1.46447 0.2745 -0.432883 0.85864 + -1.01789 1.32631 -1.46624 -0.0142333 -0.495639 0.868412 + -1.03833 1.32715 -1.47631 -0.540477 -0.35733 0.761708 + -1.06899 1.31088 -1.52149 -0.716384 -0.627478 0.305066 + -0.99797 1.35597 -1.46064 0.141579 -0.118927 0.982757 + -1.02708 1.35498 -1.46118 -0.341749 -0.06788 0.937337 + -1.06688 1.337 -1.49782 -0.713885 -0.278871 0.642339 + -1.09143 1.34996 -1.52572 -0.79421 -0.296403 0.530449 + -1.09355 1.32383 -1.54939 -0.716845 -0.681378 0.147839 + -1.01449 1.40147 -1.46196 -0.216498 0.182084 0.959153 + -1.05562 1.36483 -1.48268 -0.632206 -0.0377527 0.77388 + -1.02388 1.41698 -1.46886 -0.355908 0.101447 0.928998 + -1.06501 1.38033 -1.48959 -0.620866 -0.0466155 0.78253 + -1.08948 1.37162 -1.51283 -0.725051 -0.191942 0.661406 + -1.12372 1.36045 -1.57473 -0.840676 -0.361587 0.403136 + -1.10928 1.33905 -1.57589 -0.644088 -0.754409 0.12656 + -1.12029 1.3413 -1.59924 -0.509695 -0.845123 0.161175 + -1.08116 1.33676 -1.61236 -0.137504 -0.971094 -0.195111 + -1.0743 1.32636 -1.59466 -0.288154 -0.882814 -0.370955 + -0.942731 1.87105 -1.32796 0.470613 -0.53673 0.700317 + -0.959263 1.86798 -1.32398 -0.0407287 -0.603519 0.796307 + -0.971073 1.91275 -1.29362 -0.629854 -0.437929 0.641484 + -0.925505 1.92119 -1.30457 0.708799 -0.410987 0.573318 + -0.942258 1.91278 -1.29366 0.474868 -0.529428 0.702998 + -0.95879 1.90972 -1.28968 -0.0502332 -0.596344 0.801156 + -0.968843 1.93965 -1.27537 -0.59362 -0.156437 0.789394 + -0.915973 1.92818 -1.31413 0.9417 -0.13543 0.307993 + -0.921247 1.95218 -1.29197 0.878811 0.0971569 0.467175 + -0.928037 1.94721 -1.28517 0.67805 -0.143793 0.720813 + -0.94479 1.9388 -1.27427 0.429764 -0.253191 0.866716 + -0.956559 1.93662 -1.27144 -0.0317741 -0.296374 0.954543 + -0.921242 1.95604 -1.29783 0.888691 0.458377 0.0109046 + -0.928256 1.96346 -1.29133 0.661668 0.710279 0.240207 + -0.928259 1.9612 -1.2879 0.651468 0.469038 0.596316 + -0.935049 1.95622 -1.2811 0.489499 0.261265 0.831944 + -0.93348 1.96797 -1.29823 0.54589 0.837766 0.0123134 + -0.937365 1.96768 -1.28845 0.270531 0.86261 0.427454 + -0.937368 1.96542 -1.28502 0.262033 0.698448 0.665965 + -0.947165 1.96051 -1.27864 0.140392 0.633998 0.760485 + -0.944847 1.95131 -1.27473 0.337241 0.215795 0.916352 + -0.94102 1.97224 -1.30474 0.383802 0.918964 -0.0905595 + -0.944905 1.97195 -1.29496 0.10464 0.94009 0.324471 + -0.951054 1.97051 -1.29305 0.0350931 0.868002 0.495319 + -0.953314 1.95908 -1.27673 0.0168759 0.606118 0.795196 + -0.956616 1.94912 -1.2719 -0.0406626 0.213546 0.976086 + -0.954131 1.97383 -1.29744 0.236857 0.933192 0.270279 + -0.963575 1.96415 -1.28342 -0.26646 0.715367 0.645948 + -0.960497 1.96084 -1.27902 -0.193969 0.652721 0.732347 + -0.963799 1.9509 -1.2742 -0.405418 0.292556 0.866053 + -0.975262 1.94566 -1.28323 -0.861922 0.0563489 0.5039 + -0.963287 1.97281 -1.29528 -0.1506 0.940355 0.305045 + -0.965681 1.97106 -1.2925 -0.311302 0.810207 0.496644 + -0.972324 1.96381 -1.29113 -0.71808 0.511063 0.472415 + -0.970218 1.95691 -1.28205 -0.654836 0.419876 0.628405 + -0.978864 1.95746 -1.29875 -0.932867 0.239561 0.269016 + -0.972199 1.96974 -1.29958 -0.659069 0.721789 0.211303 + -0.789559 1.94929 -1.44557 0.797223 -0.245734 0.551407 + -0.806352 1.93965 -1.43468 0.475559 -0.412121 0.777174 + -0.788254 2.00064 -1.42894 0.972321 0.0246218 0.23235 + -0.795539 1.99244 -1.41536 0.787449 -0.233208 0.57056 + -0.808788 1.98483 -1.40677 0.478136 -0.401277 0.781257 + -0.813198 2.01283 -1.39175 0.406694 -0.104484 0.90757 + -0.82469 2.01045 -1.38907 0.0617445 -0.165163 0.984332 + -0.795223 2.03311 -1.42523 0.855236 0.517339 -0.0305339 + -0.794767 2.02627 -1.40999 0.883444 0.28071 0.375139 + -0.799949 2.02044 -1.40034 0.713175 0.0680769 0.697673 + -0.809004 2.04415 -1.42744 0.459793 0.881303 -0.109063 + -0.802656 2.03978 -1.4173 0.609237 0.770695 0.186706 + -0.802389 2.03578 -1.4084 0.586213 0.66012 0.469675 + -0.807571 2.02994 -1.39874 0.454208 0.468879 0.757527 + -0.822531 2.04825 -1.42455 0.0694523 0.991485 0.110152 + -0.813634 2.04593 -1.41883 0.246162 0.940865 0.232762 + -0.813367 2.04193 -1.40993 0.219155 0.818463 0.531121 + -0.819485 2.04025 -1.40646 0.0644264 0.872314 0.484683 + -0.817687 2.0367 -1.40026 0.173607 0.754034 0.633477 + -0.831042 2.04727 -1.42219 -0.0937982 0.973253 0.209717 + -0.837159 2.04559 -1.41873 -0.214142 0.939507 0.26734 + -0.841188 2.04106 -1.40945 -0.283642 0.856168 0.431883 + -0.83939 2.03751 -1.40323 -0.243246 0.769416 0.590619 + -0.825435 2.03225 -1.39523 0.0387021 0.597015 0.801296 + -0.815319 2.0255 -1.39372 0.278633 0.332372 0.901051 + -0.845322 2.02775 -1.39775 -0.484795 0.411847 0.771593 + -0.83427 2.03325 -1.39638 -0.146429 0.66012 0.73675 + -0.835646 2.02411 -1.39219 -0.227252 0.297854 0.927167 + -0.826811 2.02311 -1.39104 0.022814 0.272858 0.961784 + 0 1.88767 -3.35525 0.954836 0.139621 -0.262288 + -0.00609 1.89928 -3.38721 0.73586 0.391916 -0.552188 + -0.00609 1.92264 -3.37029 0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 0.995304 0.0615783 -0.0746866 + -0.00609 1.93619 -3.35816 0.804944 0.379203 -0.456367 + 0 1.92457 -3.32621 0.995095 0.069045 -0.0708434 + 0 1.97685 -3.27268 0.992394 0.102252 -0.0685482 + -0.00609 1.98847 -3.30463 0.876866 0.357759 -0.321114 + -0.014034 2.05323 -3.24402 0.847172 0.410905 -0.336834 + 0 2.00459 -3.23674 0.987841 0.135558 -0.0761145 + -0.036542 2.02576 -3.30766 0.469584 0.580569 -0.665154 + -0.044486 2.09052 -3.24705 0.596458 0.635622 -0.490125 + -0.014034 2.08098 -3.20808 0.881133 0.428775 -0.199391 + -0.023387 2.12143 -3.14955 0.815642 0.528358 -0.235726 + -0.011587 2.09962 -3.13161 0.964855 0.259286 -0.0427265 + 0 1.98306 -3.19152 0.996986 -0.00648198 0.0773058 + -0.049274 1.91604 -3.38694 0.229826 0.457821 -0.858825 + -0.079725 2.04251 -3.30739 0.188988 0.587024 -0.787202 + -0.0805 2.12506 -3.23831 0.409341 0.71635 -0.565051 + -0.03972 2.11125 -3.19831 0.626549 0.689362 -0.363617 + -0.049073 2.1517 -3.13979 0.618566 0.697315 -0.362115 + -0.136609 2.08013 -3.29146 0.0487676 0.600445 -0.798177 + -0.137384 2.16267 -3.22238 0.22175 0.733824 -0.642129 + -0.075734 2.14578 -3.18957 0.547429 0.728775 -0.411349 + -0.075698 2.17553 -3.13363 0.573402 0.726165 -0.379335 + -0.070733 2.20765 -3.06834 0.585511 0.678113 -0.444229 + -0.128582 1.91321 -3.39442 0.0116184 0.419262 -0.907791 + -0.194055 1.90173 -3.39661 -0.116477 0.390591 -0.913166 + -0.202082 2.06864 -3.29366 -0.12001 0.562741 -0.817876 + -0.183074 2.18144 -3.21184 -0.0442381 0.828972 -0.557538 + -0.106772 2.17875 -3.1773 0.434574 0.770525 -0.4663 + -0.033943 1.8295 -3.41372 0.518421 -0.283289 -0.806837 + -0.113252 1.82668 -3.4212 0.061524 -0.295893 -0.953238 + -0.168645 1.82333 -3.42097 -0.0308865 -0.303605 -0.952297 + -0.232151 1.89626 -3.39129 -0.253492 0.360478 -0.897662 + 0 1.9393 -3.21829 0.982047 -0.14436 0.121427 + 0 1.88998 -3.27556 0.964815 -0.232589 0.122617 + 0 1.86404 -3.32057 0.952614 -0.300232 0.0488543 + 0.00609 1.89928 -3.38721 1 0 0 + 0.00609 1.92264 -3.37029 1 0 0 + 0.00609 1.98847 -3.30463 1 0 0 + 0.00609 1.93619 -3.35816 1 0 0 + 0.049543 1.96837 -1.07328 -0.995507 -0.0901895 -0.0288196 + 0.016514 2.25648 -0.879903 -0.99532 -0.0892786 -0.0369856 + 1.6236 1.20702 0.333423 0.510365 0.290661 -0.809348 + 1.58944 1.14183 0.294724 0.959968 -0.235533 -0.151609 + 1.54797 1.02022 0.202565 0.523282 -0.620808 0.583757 + 1.66144 1.21731 0.386587 0.829473 0.000741546 -0.558546 + 1.63799 1.14373 0.332233 0.716039 0.258524 -0.648423 + 1.59651 1.02203 0.240025 0.672063 0.290901 -0.680961 + 1.54797 1.02022 0.202565 0.226642 0.528293 -0.818254 + 1.6956 1.2825 0.425286 0.827912 -0.190931 -0.527359 + 1.73453 1.32555 0.469515 0.59851 -0.0676555 -0.798253 + 1.692 1.22698 0.438445 0.845628 -0.195696 -0.496605 + 1.66855 1.1534 0.384091 0.935831 -0.0489318 -0.349036 + 1.61359 1.00509 0.256167 0.913109 0.016752 -0.40737 + 1.77486 1.40457 0.487045 0.498028 0.350576 -0.793136 + 1.81379 1.44763 0.531275 0.346877 -0.0339696 -0.937295 + 1.58713 1.18209 0.312985 -0.214621 0.648706 -0.73015 + 1.73839 1.37974 0.466657 -0.0308607 0.628315 -0.777347 + 1.51058 1.01353 0.204356 -0.374377 0.604993 -0.702727 + 1.54999 1.18402 0.345052 -0.372224 0.60787 -0.701387 + 1.53494 1.20168 0.361265 -0.208387 0.42428 -0.881227 + 1.72335 1.39731 0.482819 0.304993 0.269628 -0.913389 + 1.51479 0.962226 0.156811 -0.157681 0.565375 -0.809622 + 1.45289 0.782328 0.067205 -0.72597 0.439872 -0.528659 + 1.47344 1.01536 0.236373 -0.883827 0.40215 -0.239009 + 1.47932 1.00805 0.26964 -0.944953 -0.0140928 0.326903 + 1.46916 0.732146 0.009719 0.102647 0.384459 -0.917418 + 1.4571 0.731029 0.019659 -0.6994 0.421026 -0.57756 + 1.43836 0.646562 -0.011843 -0.689147 -0.261958 -0.675614 + 1.44014 0.777232 0.086428 -0.967332 0.207528 -0.145603 + 1.44603 0.769833 0.119645 -0.805823 -0.299857 0.510622 + 1.50234 0.79014 0.055474 0.350218 0.433111 -0.830519 + 1.45043 0.647681 -0.021782 -0.393666 -0.207783 -0.895463 + 1.45404 0.627251 0.013604 -0.290697 -0.932272 0.215325 + 1.42562 0.641468 0.007382 -0.886585 -0.459955 -0.0490732 + 1.51852 0.785997 0.06025 0.577753 0.321199 -0.750355 + 1.48511 0.641076 -0.02074 0.425259 -0.331964 -0.841994 + 1.46893 0.645218 -0.025515 0.351453 0.393669 -0.849415 + 1.5356 0.768969 0.076342 0.826409 0.117779 -0.550615 + 1.49533 0.629724 -0.003278 0.636739 -0.730776 -0.246027 + 1.47254 0.624788 0.009871 0.0761257 -0.98873 0.128911 + 1.46893 0.645218 -0.025515 -0.0765132 -0.866848 -0.492667 + 1.54581 0.757617 0.093804 0.960075 -0.197828 -0.197786 + 1.54175 0.759103 0.13323 0.734959 -0.571755 0.364598 + 1.51896 0.754167 0.146379 0.402359 -0.716633 0.569687 + 1.46893 0.645218 -0.025515 -0.20936 -0.855931 -0.472811 + 1.61953 1.00237 0.294474 0.955052 -0.29502 -0.0289627 + 1.61547 1.00377 0.333851 0.872187 -0.461668 0.16172 + 1.59729 0.998827 0.391816 0.627257 -0.656573 0.418881 + 1.58579 1.01838 0.423353 -0.192795 -0.685146 0.702428 + 1.50747 0.773805 0.177967 -0.206319 -0.667966 0.715021 + 1.67448 1.15068 0.422399 0.94249 -0.303089 -0.140891 + 1.67055 1.13745 0.474519 0.812658 -0.580282 0.0534738 + 1.65236 1.1325 0.532484 0.499967 -0.79345 0.347087 + 1.6239 1.12854 0.542745 -0.22435 -0.727669 0.648201 + 1.5559 1.00482 0.38144 -0.696829 -0.400836 0.594778 + 1.71906 1.19827 0.504771 0.795508 -0.541855 -0.27122 + 1.71512 1.18512 0.556941 0.593966 -0.802384 -0.0581649 + 1.69311 1.18699 0.618116 0.136508 -0.989503 0.0474213 + 1.66465 1.18294 0.628327 0.200871 -0.977265 0.0678582 + 1.59401 1.11498 0.500832 -0.536172 -0.561187 0.630547 + 1.76075 1.29119 0.47323 0.475269 -0.3485 -0.807878 + 1.78781 1.26248 0.539557 0.424672 -0.579949 -0.695207 + 1.75006 1.18048 0.619176 -0.225521 -0.899222 -0.374887 + 1.7667 1.31913 0.465227 0.11062 0.0739337 -0.991109 + 1.93628 1.39256 0.520656 0.356604 -0.348769 -0.866714 + 1.99104 1.3952 0.534275 0.362224 -0.0715316 -0.929342 + 1.84258 1.26504 0.553125 0.0784366 -0.223787 -0.971477 + 1.82655 1.19522 0.562452 -0.2759 -0.454501 -0.84694 + 1.81123 1.37244 0.505908 -0.110928 0.598447 -0.793445 + 1.94223 1.4205 0.512653 0.241929 0.0903826 -0.966075 + 2.0225 1.50484 0.536169 0.469032 -0.0321816 -0.882595 + 2.02235 1.43909 0.554254 0.998357 -0.0372874 -0.0434996 + 1.9796 1.30111 0.527655 0.0897314 0.0114527 -0.9959 + 1.77906 1.37894 0.510245 0.454176 0.201232 -0.867888 + 1.83752 1.41218 0.525862 -0.0167261 0.380014 -0.924829 + 1.96852 1.46025 0.532606 -0.280149 0.456054 -0.844708 + 1.87225 1.48096 0.54694 0.239515 -0.124146 -0.962923 + 1.92623 1.52564 0.550554 0.172475 -0.161453 -0.971692 + 2.05331 1.58948 0.539771 0.54734 -0.332092 -0.768202 + 2.06414 1.60558 0.55548 0.780939 -0.375439 0.49918 + 2.03333 1.52095 0.551879 0.927057 -0.258818 0.271255 + 1.95708 1.57075 0.541413 0.0655887 -0.168645 -0.983492 + 2.08416 1.6346 0.53063 0.567752 -0.724193 -0.391411 + 2.11451 1.66753 0.53599 0.666764 -0.427903 0.610184 + 2.02913 1.63205 0.580633 0.618854 -0.235073 0.749506 + 1.97252 1.54083 0.60224 0.710247 -0.160271 0.685465 + 1.95975 1.6027 0.539277 -0.0294818 0.0429675 -0.998641 + 2.14566 1.68514 0.49968 0.471094 -0.603399 -0.643414 + 2.17601 1.71808 0.505039 0.493545 -0.803153 0.333705 + 1.76554 1.46641 0.498737 0.555026 -0.166265 -0.815048 + 1.98658 1.67634 0.551519 0.0189887 -0.0624135 -0.99787 + 2.14832 1.71718 0.497593 -0.0606716 -0.0515479 -0.996826 + 2.17601 1.71808 0.505039 0.261306 -0.0843447 -0.961564 + 1.56869 1.32141 0.392478 0.470856 -0.431441 -0.769515 + 1.60429 1.36788 0.362601 0.509988 -0.43286 -0.743333 + 1.79238 1.54006 0.510979 0.368331 -0.00141475 -0.929694 + 1.52649 1.25232 0.376561 -0.192984 0.279094 -0.940672 + 1.46161 1.25622 0.403405 -0.330055 0.398679 -0.85564 + 1.48532 1.13277 0.359413 -0.976364 -0.00819381 -0.215976 + 1.47688 1.18341 0.374709 -0.843832 0.154716 -0.51382 + 1.47147 1.2329 0.468794 -0.970484 -0.240582 -0.016795 + 1.46161 1.25622 0.403405 -0.182658 -0.93444 -0.30571 + 1.52888 1.11144 0.419164 -0.746584 -0.541723 0.386197 + 1.48992 1.15558 0.452516 -0.822669 -0.532214 0.19991 + 1.48452 1.20507 0.546602 -0.87594 -0.449635 0.174809 + 1.4716 1.28252 0.647242 -0.84839 -0.525813 0.0612872 + 1.46174 1.30584 0.581852 -0.861665 -0.490563 0.12993 + 1.46161 1.25622 0.403405 -0.971142 -0.229598 0.0645564 + 1.52288 0.986717 0.329392 -0.765954 -0.330527 0.551422 + 1.55706 1.1107 0.47205 -0.537589 -0.644784 0.543371 + 1.5181 1.15484 0.505402 -0.489018 -0.784974 0.380363 + 1.47445 0.755618 0.125868 -0.576922 -0.479247 0.661425 + 1.46893 0.645218 -0.025515 -0.105967 0.503593 -0.857417 + 1.58083 1.16837 0.550749 -0.21705 -0.88192 0.418456 + 1.58246 1.19137 0.640725 -0.43872 -0.885924 0.150543 + 1.51974 1.17783 0.595377 -0.45268 -0.838773 0.302557 + 1.51282 1.25382 0.698348 -0.681814 -0.722766 0.11287 + 1.61778 1.17266 0.579532 -0.145801 -0.943844 0.296481 + 1.61781 1.15953 0.666276 -0.0959474 -0.982855 -0.15745 + 1.57418 1.16189 0.764578 -0.656618 -0.640319 -0.398554 + 1.54804 1.22667 0.747174 -0.744862 -0.641889 -0.182097 + 1.4986 1.24995 0.798455 -0.203004 -0.719298 -0.664379 + 1.66467 1.16989 0.715122 -0.293473 -0.835617 -0.464346 + 1.60952 1.13005 0.79013 -0.62645 -0.479115 -0.614824 + 1.54296 1.11265 0.844866 -0.310264 -0.353472 -0.882493 + 1.51682 1.17743 0.827462 -0.325504 -0.413572 -0.850297 + 1.6787 1.12823 0.732476 -0.163096 -0.590504 -0.790383 + 1.61213 1.05113 0.783223 -0.548869 -0.241584 -0.800238 + 1.5683 0.988111 0.841178 -0.547422 0.0486342 -0.835442 + 1.56569 1.06703 0.848084 -0.525994 -0.0993635 -0.844664 + 1.45821 0.993018 0.875279 -0.0813083 -0.209352 -0.974454 + 1.72804 1.18235 0.680351 -0.155506 -0.879822 -0.449146 + 1.68426 1.0677 0.780728 -0.125696 -0.429738 -0.894162 + 1.62616 1.00947 0.800577 -0.440865 -0.10875 -0.890961 + 1.56293 0.938751 0.83707 -0.558799 0.180336 -0.809458 + 1.48094 0.947396 0.878496 -0.109455 0.0458741 -0.992932 + 1.79385 1.1297 0.65013 -0.628969 -0.456384 -0.629374 + 1.73359 1.12172 0.728555 -0.484665 -0.476802 -0.733321 + 1.74233 1.05453 0.745943 -0.701051 -0.139494 -0.699335 + 1.67503 0.993074 0.804182 -0.147553 -0.213552 -0.965724 + 1.60738 0.938317 0.794822 -0.189863 -0.0721526 -0.979156 + 1.87035 1.14444 0.593406 -0.490213 -0.410335 -0.768971 + 1.8714 1.0663 0.595953 -0.6176 0.0565013 -0.78446 + 1.80259 1.06251 0.667518 -0.756807 -0.0514879 -0.651608 + 1.95605 1.14271 0.540193 -0.166259 -0.0730329 -0.983374 + 1.9571 1.06466 0.54279 -0.26905 0.113571 -0.956407 + 1.93511 0.978054 0.527395 -0.350577 0.23699 -0.906053 + 1.86448 0.985962 0.583301 -0.651692 0.209617 -0.728944 + 1.79567 0.982171 0.654865 -0.797821 0.127589 -0.589238 + 1.96358 1.2312 0.53693 -0.005607 -0.0794771 -0.996821 + 2.04117 1.26221 0.547429 0.52779 0.198538 -0.825846 + 2.03364 1.17372 0.55069 0.254421 0.0580307 -0.965351 + 2.05537 1.09401 0.543158 0.214348 0.118331 -0.969563 + 2.01091 1.34499 0.547634 0.81624 0.127041 -0.563572 + 2.03594 1.30382 0.610558 0.68583 0.48723 -0.540595 + 2.11727 1.24118 0.595449 0.471294 0.349728 -0.809674 + 2.139 1.16138 0.587867 0.408253 0.205988 -0.889325 + 2.00568 1.3866 0.610764 0.8956 0.389303 -0.215274 + 2.10772 1.36445 0.683332 0.390779 0.544198 -0.742388 + 2.18905 1.30173 0.668173 0.378002 0.493255 -0.783462 + 2.24957 1.22143 0.659059 0.45356 0.315919 -0.833354 + 2.17508 1.07656 0.587571 0.400354 0.195079 -0.895355 + 1.96154 1.45906 0.604665 0.906871 0.294318 0.3016 + 1.95162 1.54327 0.695611 0.848633 0.372677 -0.375412 + 1.99576 1.4709 0.701759 0.63831 0.508945 -0.577525 + 1.93662 1.58282 0.663307 0.960497 -0.0456671 0.274518 + 1.93684 1.67183 0.814343 0.739532 0.196784 -0.643714 + 2.03334 1.60485 0.811952 0.408198 0.516888 -0.752463 + 2.09902 1.56519 0.821239 0.367379 0.493529 -0.788328 + 2.06144 1.43124 0.711046 0.395982 0.556402 -0.73049 + 1.99323 1.67405 0.641699 0.67895 -0.496368 0.540967 + 1.92184 1.71138 0.78204 0.919819 -0.383088 -0.0847195 + 2.03223 1.70722 0.876638 0.371309 0.231117 -0.899285 + 2.12873 1.64024 0.874247 0.273064 0.369404 -0.888244 + 2.0795 1.694 0.561142 0.541121 -0.520916 0.660178 + 2.03537 1.72045 0.660322 0.397973 -0.822373 0.406595 + 1.96398 1.75787 0.800712 0.625753 -0.757657 -0.185443 + 2.0187 1.73586 0.876834 0.549683 -0.251798 -0.796522 + 2.35291 1.59576 0.903702 0.0285107 -0.0624801 -0.997639 + 2.17601 1.71808 0.505039 0.52057 -0.115346 0.845992 + 1.46161 1.25622 0.403405 0.349143 -0.681253 -0.643423 + 1.49721 1.30268 0.373527 -0.37272 -0.374124 -0.849182 + 1.59486 1.39116 0.355271 0.0661859 0.295105 -0.95317 + 1.78295 1.56325 0.503601 0.316794 0.174222 -0.932356 + 1.51069 1.33656 0.353853 0.384043 -0.57319 -0.723854 + 0.671558 1.21943 0.636123 0.983072 0.18314 0.00534615 + 0.677479 1.19172 0.631921 0.799627 0.0806201 0.595061 + 0.703623 1.13731 0.604161 0.7663 0.0905741 -0.636067 + 0.664457 1.19876 0.575727 0.786868 0.20078 -0.583546 + 0.663568 1.37192 0.710797 0.897814 -0.419412 0.134249 + 0.631551 1.33229 0.770247 0.955351 -0.0690554 -0.287291 + 0.637472 1.30458 0.766046 0.553653 0.636433 -0.537048 + 0.677479 1.19172 0.631921 0.973251 0.187902 0.132193 + 0.623492 1.11123 0.541927 0.564488 -0.20943 -0.798431 + 0.60316 1.24951 0.528621 0.62607 0.163866 -0.762354 + 0.656467 1.35125 0.650401 0.909619 0.108296 -0.40108 + 0.694071 1.41874 0.7437 0.588084 -0.775142 -0.230894 + 0.658484 1.06232 0.591236 0.561809 -0.332218 -0.757629 + 0.532736 1.01616 0.534984 0.473469 -0.412744 -0.77812 + 0.696479 1.01014 0.640421 0.599495 -0.459591 -0.655273 + 0.567728 0.967259 0.584293 0.476373 -0.563204 -0.675182 + 0.741618 1.08512 0.653345 0.824359 -0.0358048 -0.564934 + 0.721161 0.972399 0.702789 0.600172 -0.566654 -0.564532 + 0.592998 0.932483 0.647929 0.46096 -0.676248 -0.574633 + 0.489273 0.883681 0.623055 0.38148 -0.760402 -0.525607 + 0.464003 0.918458 0.55942 0.387628 -0.676796 -0.625853 + 0.713836 1.20864 0.668001 0.550632 0.327563 -0.767793 + 0.735281 1.17415 0.702152 0.570207 0.00791372 -0.821463 + 0.763063 1.05071 0.687546 0.771286 -0.231551 -0.592876 + 0.738363 0.929695 0.768755 0.54624 -0.689676 -0.475361 + 0.61768 0.894655 0.710248 0.432531 -0.766956 -0.47402 + 0.677479 1.19172 0.631921 0.432823 0.565969 -0.701671 + 0.687693 1.26305 0.695763 -0.126491 0.626772 -0.768867 + 0.718215 1.30967 0.728414 -0.224358 0.627313 -0.745749 + 0.775011 1.29018 0.707583 0.0104317 0.38707 -0.921991 + 0.77941 1.22822 0.700495 0.213732 0.0171579 -0.976742 + 0.775003 1.09627 0.700841 0.393209 -0.12387 -0.911067 + 0.780265 1.00801 0.753511 0.74184 -0.378022 -0.553871 + 0.667994 1.35128 0.798747 0.0131407 0.405127 -0.914166 + 0.799592 1.37863 0.763184 -0.24156 0.326181 -0.913923 + 0.856388 1.35922 0.742404 -0.168118 0.308778 -0.936159 + 0.894765 1.27125 0.713165 0.0208732 0.145352 -0.98916 + 0.899164 1.20921 0.706027 0.134098 -0.077727 -0.987915 + 0.662054 1.37911 0.803149 0.456739 -0.424743 -0.781654 + 0.677479 1.19172 0.631921 -0.388276 0.644804 -0.658384 + 0.793652 1.40654 0.767637 -0.0631322 -0.107736 -0.992173 + 0.831874 1.44489 0.765213 -0.345299 0.232157 -0.909325 + 0.897125 1.49917 0.7278 -0.489156 -0.074926 -0.868972 + 0.932428 1.43269 0.737749 -0.189256 -0.0589247 -0.980158 + 0.732292 1.45709 0.741276 0.556258 -0.162581 -0.814951 + 0.814631 1.53065 0.792669 0.0196056 -0.0447594 -0.998805 + 0.879882 1.58502 0.755306 -0.45102 -0.287418 -0.844969 + 0.968919 1.59273 0.660141 -0.522094 -0.393728 -0.756569 + 1.00422 1.52625 0.67009 0.0161814 -0.621083 -0.783577 + 0.715451 1.49768 0.719977 0.646056 -0.0668012 -0.760361 + 0.797789 1.57132 0.771421 0.329567 -0.603551 -0.726024 + 0.939812 1.7023 0.659358 -0.0514133 -0.616475 -0.785694 + 0.649712 1.43033 0.669226 0.703275 0.12043 -0.700643 + 0.703075 1.58181 0.701463 0.567189 -0.551004 -0.61212 + 0.830301 1.58874 0.707657 0.436486 -0.872244 -0.220615 + 0.972324 1.71963 0.595543 0.746934 -0.631206 0.208969 + 0.939812 1.7023 0.659358 0.747034 -0.630996 0.209247 + 0.596406 1.32859 0.547445 0.713354 0.233755 -0.66067 + 0.637336 1.51437 0.650661 0.734461 -0.0990238 -0.671388 + 0.593646 0.769686 1.2893 0.92627 -0.201533 0.318446 + 0.614436 0.825338 1.27931 0.0199751 -0.18394 -0.982734 + 0.660776 0.847515 1.2761 0.309724 -0.941107 0.135601 + 0.596975 0.776023 1.30872 0.907173 -0.310714 -0.283714 + 0.604949 0.61793 1.29995 0.942752 -0.0708002 -0.325892 + 0.604988 0.683733 1.27397 0.973905 -0.224235 0.0350467 + 0.625778 0.7393 1.26393 0.675428 -0.202503 0.709077 + 0.614436 0.825338 1.27931 0.362314 -0.173322 0.915799 + 0.661762 0.840666 1.29316 0.237359 -0.93121 -0.276602 + 0.618764 0.825271 1.31522 0.705172 -0.704806 -0.077339 + 0.618328 0.70856 1.35137 0.695864 -0.0389635 -0.717116 + 0.608278 0.624182 1.31932 0.972629 0.0113972 -0.232082 + 0.812578 0.820227 1.26856 -0.348042 -0.885505 -0.30781 + 0.738021 0.83597 1.32369 -0.209302 -0.864843 -0.456333 + 0.695024 0.820489 1.34571 0.0542812 -0.660843 -0.748559 + 0.640117 0.757809 1.35787 0.480275 -0.300903 -0.823889 + 0.617934 0.632076 1.35425 0.959473 -0.173992 -0.221674 + 0.811592 0.827076 1.2515 -0.343823 -0.810948 -0.473445 + 0.928995 0.766171 1.25519 -0.467682 -0.712154 -0.523556 + 0.854439 0.781914 1.31032 -0.439701 -0.678319 -0.588683 + 0.815221 0.742389 1.35778 -0.303508 -0.436673 -0.846876 + 0.708284 0.770454 1.36997 -0.0187659 -0.394964 -0.918505 + 0.734317 0.862237 1.2566 0.0939015 -0.876588 -0.471991 + 0.785162 0.85908 1.22446 -0.365618 -0.847624 -0.384521 + 0.862438 0.824007 1.21941 -0.406828 -0.822903 -0.396638 + 0.948354 0.796696 1.19172 -0.410287 -0.848688 -0.333757 + 0.687977 0.839975 1.25976 0.474716 -0.542805 0.692826 + 0.712689 0.835707 1.21915 0.62195 -0.718834 0.310574 + 0.78827 0.875179 1.17438 0.0673945 -0.996713 0.0449497 + 0.864209 0.836358 1.14702 -0.426044 -0.872168 -0.240436 + 0.950125 0.809046 1.11933 -0.323084 -0.8923 -0.315304 + 0.65049 0.735117 1.22337 0.778201 -0.626407 0.0449143 + 0.656362 0.772864 1.1512 0.598655 -0.781203 -0.177017 + 0.750817 0.830245 1.15141 0.544324 -0.822513 0.164873 + 0.826398 0.869631 1.10659 -0.0233187 -0.974607 -0.222705 + 0.867317 0.852369 1.09689 -0.419848 -0.826584 -0.374816 + 0.583394 0.700325 1.18764 0.57882 -0.707174 -0.406044 + 0.589266 0.73807 1.11546 0.489678 -0.793882 -0.360508 + 0.586773 0.765331 1.04744 0.383968 -0.868039 -0.314765 + 0.666944 0.789911 1.07887 0.440452 -0.873255 -0.208391 + 0.761399 0.847206 1.07903 0.462576 -0.868051 -0.180308 + 0.580026 0.653479 1.24218 0.807556 -0.329218 -0.489355 + 0.527962 0.712325 1.11285 0.209525 -0.843828 -0.494017 + 0.528092 0.742561 1.04268 0.171667 -0.915098 -0.364865 + 0.5256 0.769822 0.974664 0.270024 -0.896064 -0.352358 + 0.579987 0.587676 1.26815 0.662342 -0.364872 -0.654348 + 0.524594 0.665479 1.16739 0.257533 -0.708012 -0.657568 + 0.468772 0.724256 1.09359 -0.26343 -0.85706 -0.442779 + 0.468902 0.754492 1.02342 -0.204557 -0.947174 -0.247018 + 0.462395 0.767841 0.951896 0.00153005 -0.980961 -0.194197 + 0.607885 0.547698 1.32219 0.920988 -0.209194 -0.328664 + 0.565778 0.5247 1.30143 0.531529 -0.227359 -0.815956 + 0.520193 0.609434 1.22066 0.172091 -0.600808 -0.78065 + 0.455669 0.632191 1.20725 -0.328024 -0.597129 -0.732009 + 0.46007 0.688235 1.15398 -0.353447 -0.721074 -0.595926 + 0.595334 0.469248 1.31967 0.853564 -0.256671 -0.453374 + 0.553228 0.446164 1.29886 0.256957 -0.447485 -0.85658 + 0.505984 0.546459 1.25394 0.0193538 -0.536586 -0.843624 + 0.608345 0.598784 1.37451 0.901692 -0.202569 -0.38199 + 0.585745 0.435954 1.33994 0.798244 -0.553802 -0.236875 + 0.522086 0.390288 1.33083 0.176729 -0.659583 -0.73056 + 0.469447 0.503784 1.30626 -0.329217 -0.470044 -0.818948 + 0.653377 0.707774 1.38213 0.500445 -0.257571 -0.826566 + 0.620104 0.518943 1.3988 0.80884 -0.327255 -0.488551 + 0.539198 0.384676 1.38036 0.741735 -0.636758 -0.210636 + 0.475539 0.339011 1.37125 0.0516421 -0.607722 -0.792469 + 0.438306 0.447908 1.33823 -0.349948 -0.372669 -0.85945 + 0.691333 0.692201 1.39771 0.0756771 -0.324047 -0.943009 + 0.665136 0.627933 1.40642 0.480813 -0.231379 -0.845744 + 0.66784 0.546323 1.43458 0.474523 -0.315874 -0.821615 + 0.587339 0.455159 1.43027 0.720245 -0.481984 -0.498937 + 0.506433 0.320807 1.41178 0.6115 -0.747892 -0.258311 + 0.79827 0.664136 1.38552 -0.224547 -0.367723 -0.902418 + 0.792089 0.594912 1.42482 -0.191261 -0.424136 -0.885171 + 0.694037 0.61059 1.42586 0.187231 -0.320463 -0.928573 + 0.964256 0.556677 1.38184 -0.389096 -0.452307 -0.80251 + 0.958075 0.487539 1.42119 -0.369341 -0.487834 -0.790952 + 0.937526 0.429651 1.47146 -0.344313 -0.51796 -0.783049 + 0.817145 0.516214 1.45573 -0.156101 -0.468159 -0.869747 + 0.719093 0.531893 1.45677 0.121676 -0.395528 -0.910358 + 0.987842 0.616329 1.33052 -0.462038 -0.465012 -0.755172 + 1.15942 0.552757 1.26583 -0.479621 -0.489079 -0.728536 + 1.13583 0.493105 1.31715 -0.465161 -0.491342 -0.736348 + 1.08792 0.445309 1.38194 -0.447094 -0.495578 -0.744654 + 1.02706 0.655854 1.28306 -0.477108 -0.492572 -0.727833 + 1.17526 0.617706 1.20894 -0.496012 -0.507105 -0.704852 + 1.32655 0.544633 1.1463 -0.356891 -0.599697 -0.716235 + 1.31011 0.482405 1.21249 -0.317483 -0.648429 -0.691914 + 1.26219 0.434609 1.27727 -0.34923 -0.58241 -0.734055 + 1.05089 0.714985 1.22065 -0.461147 -0.64533 -0.60901 + 1.19909 0.676836 1.14652 -0.429144 -0.648771 -0.628436 + 1.33488 0.693301 1.0436 -0.396769 -0.579324 -0.71201 + 1.34239 0.60958 1.08941 -0.411784 -0.543683 -0.73133 + 1.45688 0.548566 1.10849 0.0567372 -0.730387 -0.680673 + 1.07025 0.74551 1.15717 -0.427829 -0.771936 -0.470189 + 1.14769 0.775965 1.02182 -0.426195 -0.789631 -0.441408 + 1.19143 0.74391 1.06795 -0.104974 -0.797144 -0.594594 + 1.06428 0.792158 1.09598 -0.370419 -0.79465 -0.480959 + 1.14172 0.8227 0.960676 -0.684337 -0.577558 -0.445095 + 1.19119 0.851914 0.802478 -0.182632 -0.725836 -0.66318 + 1.23493 0.81986 0.848598 0.375051 -0.773427 -0.511025 + 0.932215 0.841889 1.05884 -0.309534 -0.837981 -0.449417 + 1.04637 0.825001 1.03549 -0.251448 -0.858541 -0.446857 + 1.11972 0.886319 0.929887 -0.492359 -0.719802 -0.489354 + 0.930162 0.8877 0.986093 -0.372316 -0.845254 -0.383311 + 0.988035 0.855089 0.986578 -0.303414 -0.912191 -0.275403 + 1.06139 0.916319 0.880924 -0.372279 -0.592725 -0.714203 + 1.1441 0.982289 0.714262 -0.481174 -0.287238 -0.828231 + 1.21543 1.25463 0.632758 0.273383 -0.340805 -0.899507 + 0.865264 0.89818 1.02414 -0.219596 -0.89621 -0.385468 + 0.860678 0.922089 0.953931 0.0263632 -0.917131 -0.397713 + 0.902573 0.92971 0.921729 -0.320844 -0.866806 -0.381714 + 0.960445 0.897099 0.922214 -0.206608 -0.779844 -0.590894 + 0.821812 0.89354 1.03638 0.293648 -0.922189 -0.251672 + 0.814715 0.902242 0.955106 0.461388 -0.835719 -0.297816 + 0.838622 0.960135 0.881234 0.166373 -0.875291 -0.454076 + 0.880517 0.967757 0.849032 -0.0888985 -0.831377 -0.548552 + 0.754302 0.855908 0.997757 0.463563 -0.867508 -0.180384 + 0.749509 0.875033 0.919634 0.482272 -0.828576 -0.284386 + 0.800219 0.935087 0.882817 0.579955 -0.732049 -0.357431 + 0.824126 0.992981 0.808944 0.405311 -0.671363 -0.62048 + 0.667163 0.814158 1.00787 0.4065 -0.877395 -0.254825 + 0.662371 0.833281 0.929749 0.372905 -0.896905 -0.237703 + 0.651066 0.847683 0.855804 0.38658 -0.87276 -0.29807 + 0.75087 0.903341 0.841204 0.53932 -0.781601 -0.313424 + 0.80158 0.963308 0.804335 0.701991 -0.56239 -0.436951 + 0.586993 0.789665 0.976497 0.331114 -0.898062 -0.289566 + 0.56609 0.802554 0.906573 0.29108 -0.927231 -0.235615 + 0.554785 0.816956 0.832628 0.317929 -0.909997 -0.266134 + 0.528399 0.831478 0.762472 0.340283 -0.878914 -0.334241 + 0.638559 0.874038 0.783357 0.403963 -0.838962 -0.364632 + 0.500094 0.784327 0.913542 0.188155 -0.9475 -0.258537 + 0.479191 0.797302 0.843667 0.125233 -0.985027 -0.118485 + 0.431488 0.795235 0.775249 0.186393 -0.962749 -0.195885 + 0.405102 0.809844 0.705145 0.154431 -0.929857 -0.333941 + 0.436889 0.782346 0.890773 0.144953 -0.964497 -0.22076 + 0.405466 0.790068 0.823596 0.114393 -0.982008 -0.150246 + 0.357764 0.788001 0.755178 -0.0986554 -0.98039 -0.170593 + 0.320431 0.813892 0.691934 -0.268402 -0.920949 -0.282513 + 0.394347 0.839772 0.636909 0.161998 -0.879637 -0.447208 + 0.394418 0.77022 0.903777 -0.32008 -0.94701 0.0268429 + 0.362995 0.777856 0.83655 -0.334832 -0.939989 -0.0656432 + 0.326228 0.801844 0.780602 -0.569555 -0.815808 0.100323 + 0.288896 0.827734 0.717357 -0.650398 -0.759585 0.0035483 + 0.413333 0.776261 0.981311 -0.441724 -0.896683 -0.0289581 + 0.340494 0.839684 0.921859 -0.75494 -0.651871 0.0716227 + 0.321578 0.833643 0.844325 -0.754277 -0.610662 0.241159 + 0.284811 0.85763 0.788377 -0.834879 -0.470989 0.284862 + 0.41984 0.762912 1.05283 -0.443539 -0.863495 -0.240105 + 0.342526 0.826727 1.0007 -0.525246 -0.805011 -0.275814 + 0.399207 0.75204 1.12726 -0.438023 -0.792164 -0.424984 + 0.321893 0.815854 1.07513 -0.385493 -0.835576 -0.391418 + 0.390505 0.716019 1.18765 -0.280909 -0.715741 -0.639379 + 0.312155 0.767184 1.12703 0.047574 -0.761667 -0.64622 + 0.380768 0.667434 1.23961 -0.22867 -0.657369 -0.718036 + 0.367227 0.618077 1.2867 -0.138123 -0.569559 -0.810262 + 0.204332 1.01157 0.800351 0.140382 -0.956403 -0.256098 + 0.442128 0.582833 1.25434 -0.429512 -0.547422 -0.718226 + 0.405591 0.540158 1.30665 -0.428595 -0.459577 -0.777879 + 0.363435 0.553954 1.32656 -0.234677 -0.535858 -0.811038 + 0.372815 0.484203 1.35417 -0.4545 -0.370133 -0.810204 + 0.454742 0.286813 1.45866 0.529305 -0.829656 -0.177503 + 0.513595 0.336723 1.48201 0.547143 -0.739573 -0.392003 + 0.464944 0.274985 1.51495 0.424898 -0.791161 -0.439916 + 0.556841 0.379342 1.44819 0.660228 -0.616026 -0.429664 + 0.622733 0.398813 1.48367 0.413708 -0.545651 -0.728773 + 0.574081 0.336989 1.51655 0.3484 -0.639017 -0.685766 + 0.544624 0.274352 1.55925 0.29643 -0.707359 -0.641695 + 0.411782 0.241094 1.55345 0.304053 -0.83739 -0.454236 + 0.637341 0.470505 1.4525 0.423389 -0.400165 -0.812779 + 0.704484 0.460203 1.48794 0.235895 -0.452694 -0.859896 + 0.703252 0.385732 1.53053 0.204329 -0.571039 -0.795088 + 0.673794 0.323089 1.57323 0.23101 -0.635907 -0.736381 + 0.810897 0.450873 1.5015 -0.110266 -0.525487 -0.843626 + 0.809665 0.376401 1.54409 -0.0318477 -0.574155 -0.818127 + 0.793357 0.317255 1.59913 -0.0234177 -0.662293 -0.748879 + 0.651443 0.258561 1.6246 0.205977 -0.727571 -0.654381 + 0.931278 0.364221 1.51719 -0.348678 -0.587841 -0.729977 + 0.912571 0.310585 1.57489 -0.280475 -0.617036 -0.735255 + 0.896263 0.251439 1.62993 -0.263604 -0.727988 -0.632887 + 0.878998 0.208596 1.69633 -0.16299 -0.766043 -0.621781 + 0.771006 0.252727 1.6505 0.0630077 -0.716838 -0.694387 + 1.06737 0.38742 1.4322 -0.417632 -0.529055 -0.738705 + 1.05432 0.350224 1.46823 -0.383137 -0.593501 -0.707787 + 1.03561 0.296588 1.52593 -0.350384 -0.64611 -0.678066 + 1.06378 0.27098 1.53688 -0.30591 -0.718648 -0.624472 + 1.24914 0.397413 1.31329 -0.36142 -0.602596 -0.711515 + 1.27731 0.371808 1.32425 -0.239567 -0.659883 -0.712153 + 1.26555 0.307234 1.38929 -0.178416 -0.755017 -0.630965 + 1.04651 0.228051 1.60324 -0.243893 -0.788599 -0.564471 + 1.41823 0.435732 1.23532 0.0978256 -0.745623 -0.659148 + 1.40647 0.371246 1.30042 0.341774 -0.807519 -0.480732 + 1.2514 0.260562 1.46153 -0.117096 -0.825638 -0.551915 + 1.03236 0.181381 1.67547 -0.156214 -0.872193 -0.463547 + 0.858484 0.160513 1.75982 -0.130643 -0.879407 -0.457794 + 1.44043 0.486339 1.17467 0.0991666 -0.767305 -0.633568 + 1.52479 0.464575 1.26937 0.342517 -0.860059 -0.378127 + 1.44873 0.417293 1.32726 0.582041 -0.807053 -0.0994715 + 1.417 0.365191 1.40291 0.682119 -0.710361 -0.173495 + 1.37475 0.319144 1.37606 0.406041 -0.800521 -0.440791 + 1.54292 0.558372 1.13831 0.0788931 -0.798403 -0.596932 + 1.54699 0.515181 1.20871 0.0854089 -0.814929 -0.573233 + 1.60355 0.505276 1.20727 -0.529479 -0.807406 -0.260283 + 1.59744 0.481078 1.30738 0.00332927 -0.929065 -0.369902 + 1.52138 0.433797 1.36528 0.333371 -0.909355 -0.248871 + 1.45478 0.596872 1.05422 0.0269449 -0.68694 -0.726214 + 1.54082 0.606679 1.08404 -0.065265 -0.800736 -0.595452 + 1.5718 0.593954 1.08447 -0.72425 -0.679202 -0.118938 + 1.59948 0.548467 1.13686 -0.754554 -0.615717 -0.227026 + 1.42433 0.648577 1.01687 -0.201513 -0.554291 -0.807561 + 1.47925 0.664574 1.01176 -0.202741 -0.750115 -0.629463 + 1.51022 0.651849 1.0122 -0.606925 -0.791157 -0.0755789 + 1.57817 0.545448 1.05609 -0.901635 -0.375955 0.213802 + 1.60585 0.49996 1.10848 -0.829963 -0.556707 -0.0351931 + 1.41682 0.732298 0.971058 -0.00818089 -0.470001 -0.882628 + 1.42704 0.810131 0.938248 -0.269831 -0.386336 -0.882007 + 1.4488 0.716278 0.974406 -0.366956 -0.483879 -0.794484 + 1.50632 0.652275 0.987461 -0.685511 -0.659946 -0.307483 + 1.57426 0.545874 1.03135 -0.732346 -0.63746 -0.239403 + 1.3925 0.822365 0.933657 -0.0201024 -0.436979 -0.899247 + 1.40273 0.900198 0.900847 -0.261108 -0.310053 -0.914161 + 1.4594 0.843428 0.897777 -0.644665 -0.229194 -0.729299 + 1.48115 0.749575 0.933935 -0.586509 -0.418205 -0.693622 + 1.32722 0.760374 0.965028 -0.0412927 -0.675207 -0.736472 + 1.34742 0.893035 0.898255 0.00805139 -0.32697 -0.945 + 1.39844 1.00285 0.872652 0.0318738 -0.269614 -0.962441 + 1.45392 1.09575 0.847134 0.0879558 -0.302245 -0.949164 + 1.28214 0.831044 0.929625 0.285419 -0.655278 -0.69939 + 1.3401 1.02416 0.862932 0.263538 -0.292307 -0.919296 + 1.39111 1.13398 0.83733 -0.0701664 -0.262316 -0.962428 + 1.43569 1.16827 0.818127 -0.0359714 -0.332134 -0.942546 + 1.25658 1.00816 0.761047 0.808058 -0.242504 -0.536875 + 1.30379 1.01935 0.842075 0.706865 -0.292324 -0.644118 + 1.36663 1.3271 0.796625 0.032978 -0.310657 -0.94995 + 1.38463 1.23273 0.810888 -0.219713 -0.236823 -0.946383 + 1.42922 1.26702 0.791684 -0.521084 -0.321673 -0.790568 + 1.2275 1.01816 0.717136 0.668087 -0.322776 -0.670429 + 1.33033 1.32237 0.775818 0.361061 -0.180405 -0.914926 + 1.38744 1.42682 0.758114 -0.291341 -0.549014 -0.783392 + 1.40544 1.33244 0.772376 -0.608186 -0.300621 -0.734668 + 1.20241 1.08491 0.659711 0.821737 -0.175556 -0.542152 + 1.27955 1.43341 0.724495 0.787079 -0.2647 -0.557172 + 1.37295 1.58577 0.661806 0.603513 -0.590461 -0.535843 + 1.21543 1.25463 0.632758 0.920161 -0.135399 -0.367382 + 1.29257 1.60304 0.697493 0.833208 -0.528713 -0.161949 + 1.26299 1.58624 0.584984 0.813464 -0.56708 -0.129213 + 1.33145 1.63145 0.543685 0.543916 -0.838958 -0.0174777 + 1.36103 1.64833 0.656244 -0.298211 -0.854922 -0.424475 + 1.35441 1.57088 0.718196 -0.903337 -0.116272 -0.412872 + 1.3761 1.46992 0.725657 -0.793977 -0.33983 -0.504099 + 1.4336 1.34407 0.72804 -0.871107 -0.370603 -0.322221 + 1.45738 1.27865 0.747349 -0.632673 -0.65034 -0.420455 + 1.39315 1.39099 0.629974 -0.918886 -0.394522 0.000149688 + 1.42226 1.38717 0.695584 -0.874198 -0.485303 0.0160831 + 1.37295 1.58577 0.661806 -0.906335 -0.102063 -0.410048 + 1.41169 1.40588 0.573584 -0.890991 0.0662353 -0.449163 + 1.43263 1.30966 0.516241 -0.908723 -0.406028 -0.0967652 + 1.46161 1.25622 0.403405 -0.590293 -0.777568 0.216662 + 1.4852 1.45922 0.489986 -0.674987 0.159167 -0.720457 + 1.51961 1.39679 0.412919 -0.598489 0.554314 -0.5784 + 1.44611 1.34345 0.496517 -0.862759 0.182983 -0.471343 + 1.46161 1.25622 0.403405 -0.833932 0.384215 -0.396152 + 1.47328 1.52179 0.484423 -0.55284 0.0157892 -0.833138 + 1.55433 1.51188 0.462787 -0.0458869 0.183572 -0.981935 + 1.6279 1.51032 0.455686 0.361807 -0.319823 -0.875676 + 1.6785 1.53269 0.464743 0.0694811 0.427603 -0.901292 + 1.60378 1.4514 0.414339 -0.25211 0.68595 -0.682579 + 1.33145 1.63145 0.543685 -0.520805 -0.813476 0.258881 + 1.51069 1.33656 0.353853 -0.736409 0.451454 -0.503876 + 1.85767 1.64454 0.554005 -0.00225008 0.343957 -0.938983 + 2.02507 1.75372 0.534508 -0.210753 0.0301314 -0.977075 + 2.19506 1.79142 0.4852 0.00211821 -0.202454 -0.97929 + 1.89362 1.71493 0.55529 -0.0698114 0.222428 -0.972446 + 2.06102 1.82402 0.535743 -0.234465 -0.288846 -0.928221 + 2.23355 1.86879 0.468189 -0.0140452 -0.49414 -0.869269 + 2.29796 1.84198 0.49684 0.293068 -0.701961 -0.649124 + 2.25122 1.76773 0.509233 0.649237 -0.649562 -0.395677 + 2.17601 1.71808 0.505039 0.256217 -0.310771 -0.9153 + 1.84301 1.69247 0.546183 -0.315416 0.669603 -0.672417 + 1.92435 1.7883 0.580415 -0.245577 -0.0998971 -0.964216 + 2.0874 1.87467 0.479216 -0.100475 -0.653987 -0.749804 + 2.23386 1.9363 0.415873 0.00987048 -0.698067 -0.715965 + 1.65514 1.55474 0.517745 -0.280241 0.801455 -0.528332 + 1.68095 1.58851 0.550251 -0.22565 0.685992 -0.691735 + 1.86882 1.72633 0.57874 -0.5141 0.526502 -0.677124 + 1.58157 1.5563 0.524846 0.234794 0.617193 -0.750963 + 1.73074 1.64424 0.584322 -0.0742102 0.317076 -0.945492 + 1.78626 1.70629 0.586049 -0.101839 0.161284 -0.98164 + 1.50569 1.64402 0.533103 0.0164701 0.457677 -0.888966 + 1.63136 1.61203 0.558918 0.155741 0.390001 -0.907548 + 1.67239 1.66973 0.591372 0.0119341 0.334782 -0.94222 + 1.82528 1.77713 0.594749 -0.125755 0.00273734 -0.992058 + 1.42465 1.65393 0.554737 0.125815 0.0144747 -0.991948 + 1.54673 1.70181 0.565607 0.125471 0.235171 -0.963821 + 1.71141 1.74066 0.600124 0.0154467 0.124025 -0.992159 + 1.84873 1.84604 0.584593 -0.366665 0.109098 -0.923934 + 1.95594 1.84108 0.537384 -0.333553 -0.281617 -0.899686 + 1.33145 1.63145 0.543685 -0.007949 0.467433 -0.883993 + 0.504969 0.221988 1.60774 0.237825 -0.766746 -0.596271 + 0.475349 0.171371 1.66461 0.157695 -0.863973 -0.478208 + 0.621823 0.208035 1.68151 0.201233 -0.772149 -0.602736 + 0.594741 0.15241 1.74105 0.136813 -0.846672 -0.514226 + 0.450434 0.140476 1.73692 0.0706211 -0.9128 -0.402254 + 0.429275 0.104849 1.80763 -0.0147282 -0.948953 -0.315074 + 0.750491 0.20473 1.71403 0.0571877 -0.795196 -0.60365 + 0.72341 0.149105 1.77358 0.140004 -0.826015 -0.545983 + 0.707126 0.112246 1.84442 0.116904 -0.886261 -0.44819 + 0.573582 0.116783 1.81176 0.0858164 -0.880066 -0.467033 + 0.845283 0.132889 1.83526 -0.00712098 -0.898008 -0.439922 + 0.828999 0.095944 1.90606 0.0262662 -0.947878 -0.317548 + 0.829722 0.076875 1.98428 0.104221 -0.962419 -0.250775 + 0.685094 0.06822 1.91427 0.135809 -0.91992 -0.367835 + 0.55155 0.072756 1.88162 -0.0154271 -0.9426 -0.333566 + 1.01916 0.153671 1.75087 -0.0749727 -0.932811 -0.352481 + 1.00992 0.123663 1.83285 -0.00953909 -0.954883 -0.296828 + 1.01064 0.104512 1.91101 0.0508786 -0.973464 -0.223114 + 1.00914 0.085753 1.99731 0.0726489 -0.977996 -0.195563 + 0.833452 0.058511 2.06169 0.119228 -0.97156 -0.204585 + 1.24407 0.212977 1.53635 -0.00844745 -0.898485 -0.438923 + 1.23482 0.182879 1.61828 0.0924586 -0.951464 -0.293543 + 1.2298 0.160337 1.70752 0.152977 -0.962698 -0.223184 + 1.22831 0.141582 1.79381 0.178141 -0.965141 -0.191752 + 1.36742 0.271559 1.45088 0.552388 -0.768584 -0.322717 + 1.35807 0.237154 1.53847 0.631495 -0.747611 -0.205653 + 1.35305 0.21461 1.62772 0.639089 -0.74878 -0.175767 + 1.35462 0.194096 1.72325 0.640707 -0.752951 -0.150199 + 1.22268 0.123844 1.88473 0.177579 -0.969734 -0.167572 + 1.39068 0.324625 1.49217 0.779432 -0.616511 -0.111353 + 1.38133 0.290225 1.57975 0.797888 -0.586871 -0.137683 + 1.38355 0.264554 1.67781 0.777919 -0.607992 -0.158705 + 1.38511 0.244046 1.77334 0.763435 -0.628064 -0.150674 + 1.34899 0.176277 1.81411 0.589128 -0.791234 -0.163945 + 1.48839 0.408057 1.43006 0.44459 -0.874828 -0.192395 + 1.46206 0.367494 1.51932 0.470969 -0.846269 -0.249031 + 1.43897 0.324733 1.62698 0.480796 -0.844795 -0.234856 + 1.44119 0.299154 1.72508 0.469891 -0.862275 -0.188902 + 1.44404 0.284487 1.81029 0.493293 -0.849294 -0.188047 + 1.60783 0.439745 1.46897 0.109248 -0.932497 -0.344259 + 1.57742 0.413593 1.52927 0.220968 -0.935259 -0.276521 + 1.58031 0.394507 1.58953 0.163125 -0.903667 -0.395949 + 1.46494 0.348315 1.57954 0.318997 -0.898043 -0.302918 + 1.53758 0.337601 1.69629 0.267681 -0.934524 -0.234546 + 1.64082 0.465397 1.40414 0.046207 -0.99173 -0.11973 + 1.70716 0.451029 1.41863 -0.429796 -0.840721 -0.329337 + 1.67675 0.424968 1.47897 -0.182324 -0.929255 -0.321315 + 1.67259 0.411655 1.55043 -0.0930051 -0.932799 -0.348189 + 1.56355 0.361189 1.64884 0.218852 -0.914201 -0.341086 + 1.64747 0.455233 1.33715 -0.0884755 -0.993173 -0.0760226 + 1.70774 0.443485 1.2775 -0.373478 -0.926359 0.0487167 + 1.7011 0.453736 1.34454 -0.321336 -0.944484 0.0685023 + 1.74448 0.421888 1.2955 -0.229203 -0.973324 0.0102887 + 1.76927 0.424377 1.37059 -0.218054 -0.969941 -0.108015 + 1.62255 0.484202 1.25657 -0.529236 -0.846614 -0.0561619 + 1.67258 0.458269 1.28629 -0.384053 -0.917826 -0.100491 + 1.68785 0.453432 1.21987 -0.292349 -0.951219 0.0985656 + 1.70722 0.427067 1.15213 -0.206535 -0.977385 -0.0454132 + 1.73842 0.424595 1.22141 -0.082505 -0.995759 -0.0407002 + 1.64577 0.44771 1.21778 -0.404307 -0.906621 0.120719 + 1.66104 0.442785 1.15131 -0.327013 -0.943935 -0.0452763 + 1.68733 0.437013 1.09451 -0.2811 -0.906551 -0.314878 + 1.74607 0.451085 1.08933 0.38557 -0.844264 -0.372228 + 1.62677 0.468698 1.16843 -0.740285 -0.670151 -0.0536352 + 1.64214 0.473346 1.09438 -0.512874 -0.818667 -0.25835 + 1.66932 0.483248 1.03682 -0.267884 -0.845797 -0.461373 + 1.70803 0.526187 0.970451 0.249358 -0.749471 -0.613281 + 1.72604 0.479952 1.02813 0.224074 -0.776557 -0.588854 + 1.62122 0.504521 1.03438 -0.537848 -0.768184 -0.347293 + 1.65042 0.513721 0.979845 -0.31386 -0.785172 -0.53385 + 1.69254 0.569577 0.911697 0.164414 -0.724033 -0.669884 + 1.77926 0.596395 0.94745 -0.0748964 -0.843285 -0.532223 + 1.80408 0.558557 1.00699 -0.0652228 -0.876019 -0.477847 + 1.61372 0.556018 0.987985 -0.602199 -0.604026 -0.522023 + 1.6443 0.568153 0.923365 -0.467755 -0.649808 -0.599128 + 1.68642 0.623924 0.855168 0.0633865 -0.722658 -0.688294 + 1.76377 0.639698 0.888645 -0.148995 -0.827491 -0.541349 + 1.82641 0.596891 0.83859 -0.831164 -0.536003 -0.147874 + 1.59539 0.606046 0.942334 -0.640329 -0.465984 -0.610604 + 1.6368 0.619564 0.87692 -0.632854 -0.404949 -0.659934 + 1.68565 0.675408 0.803195 -0.370572 -0.441957 -0.816915 + 1.75074 0.675868 0.825996 -0.219666 -0.795801 -0.564312 + 1.55592 0.595988 0.985752 -0.578901 -0.614615 -0.535838 + 1.59717 0.672538 0.915164 -0.456079 -0.452806 -0.766132 + 1.65074 0.688961 0.854519 -0.768384 -0.140612 -0.624351 + 1.69959 0.744892 0.780844 -0.601941 -0.268584 -0.752017 + 1.74998 0.727353 0.774023 -0.514271 -0.579191 -0.632505 + 1.49687 0.688112 0.95859 -0.854548 -0.403535 -0.326966 + 1.54647 0.631827 0.956881 -0.409921 -0.61929 -0.66966 + 1.587 0.73028 0.874155 -0.323355 -0.404275 -0.855572 + 1.65252 0.755455 0.82735 -0.689923 -0.0795619 -0.719497 + 1.53629 0.689567 0.915871 -0.436454 -0.519615 -0.734512 + 1.52058 0.751028 0.891216 -0.514173 -0.37798 -0.769907 + 1.59075 0.801736 0.854789 -0.129658 -0.369474 -0.920151 + 1.66934 0.83939 0.830171 -0.565248 -0.0487041 -0.823482 + 1.52797 0.812986 0.854702 -0.387274 -0.378952 -0.840485 + 1.59815 0.863693 0.818274 0.00621149 -0.391408 -0.920196 + 1.67309 0.910845 0.810805 -0.389945 -0.130503 -0.911544 + 1.72873 0.895888 0.758512 -0.796035 0.0757938 -0.600486 + 1.71192 0.81204 0.755743 -0.797092 0.0510415 -0.601697 + 1.47557 0.897951 0.87434 -0.555298 -0.0447722 -0.830446 + 1.54415 0.867509 0.831265 -0.432187 -0.111064 -0.894919 + 1.7404 0.972385 0.752615 -0.772429 0.0119071 -0.634989 + 1.784 0.90576 0.660813 -0.844497 0.05193 -0.533037 + 1.76663 0.838042 0.686105 -0.83602 0.0261024 -0.548078 + 1.7543 0.770894 0.711207 -0.781265 -0.311228 -0.541075 + 1.84667 0.90357 0.570808 -0.741144 0.177801 -0.647373 + 1.82929 0.835937 0.59615 -0.846533 0.0632503 -0.528566 + 1.81694 0.764071 0.600627 -0.904114 -0.0662976 -0.422117 + 1.81262 0.720615 0.663493 -0.88331 -0.330036 -0.332925 + 1.80878 0.671025 0.710185 -0.888061 -0.380465 -0.258059 + 1.91729 0.895662 0.514904 -0.395556 0.394136 -0.829573 + 1.89324 0.815687 0.474424 -0.60156 0.290562 -0.74411 + 1.88089 0.74382 0.478903 -0.74833 0.158326 -0.644155 + 1.8728 0.652784 0.458382 -0.82356 0.0196149 -0.566889 + 1.86896 0.603195 0.505073 -0.943057 -0.196082 -0.268691 + 2.02185 0.925852 0.501813 0.0194175 0.366195 -0.930335 + 1.9978 0.845877 0.461334 -0.0378628 0.461631 -0.886264 + 1.96911 0.765755 0.420306 -0.243309 0.337251 -0.90943 + 1.96102 0.67472 0.399785 -0.45954 0.313179 -0.831109 + 1.91603 0.534961 0.413056 -0.78968 -0.27946 -0.546176 + 2.03338 1.0074 0.527763 0.109678 0.224496 -0.968283 + 2.16355 0.995014 0.561621 0.30655 0.316882 -0.89756 + 2.14033 0.913598 0.518236 0.237985 0.395526 -0.887086 + 2.11164 0.833479 0.477208 0.158222 0.508014 -0.846692 + 2.06878 0.768334 0.418843 0.0346415 0.545491 -0.8374 + 2.28565 1.13661 0.658763 0.480438 0.24021 -0.843492 + 2.29816 1.04453 0.635263 0.444883 0.297324 -0.844795 + 2.27494 0.963112 0.591876 0.410017 0.358164 -0.838812 + 2.24601 0.882803 0.540174 0.373561 0.424456 -0.824796 + 2.40167 1.17625 0.744707 0.62545 0.295034 -0.722335 + 2.41419 1.08425 0.721256 0.62007 0.266557 -0.737876 + 2.40624 0.987597 0.680067 0.619445 0.251694 -0.743598 + 2.37731 0.907288 0.628365 0.566246 0.310875 -0.763362 + 2.20315 0.817744 0.481859 0.323724 0.470376 -0.820944 + 2.35935 1.27623 0.753345 0.569768 0.376025 -0.730732 + 2.45962 1.2704 0.860231 0.746365 0.290998 -0.598548 + 2.50194 1.17043 0.851594 0.795723 0.267893 -0.543192 + 2.499 1.08753 0.812577 0.807296 0.204484 -0.553588 + 2.49105 0.990875 0.771388 0.821083 0.155633 -0.549182 + 2.29884 1.35653 0.76246 0.449463 0.529444 -0.719494 + 2.43986 1.36033 0.870073 0.60841 0.399242 -0.685888 + 2.57772 1.20514 0.996876 0.917296 0.16136 -0.364048 + 2.56484 1.11228 0.962714 0.929446 0.0686311 -0.362519 + 2.56189 1.02938 0.923698 0.934205 0.0353729 -0.354978 + 2.22158 1.4297 0.776525 0.399504 0.567108 -0.720268 + 2.36261 1.4335 0.884138 0.465973 0.403284 -0.787547 + 2.57256 1.39479 0.982791 0.549311 -0.135382 -0.824578 + 2.55796 1.29515 1.00677 0.801521 -0.0799392 -0.5926 + 2.61381 1.14019 1.11437 0.978215 -0.0848983 -0.18944 + 2.1753 1.4964 0.804189 0.35581 0.535244 -0.766103 + 2.3061 1.50942 0.869238 0.344642 0.291116 -0.892453 + 2.22982 1.57813 0.886237 0.243367 0.306875 -0.920109 + 2.45399 1.53364 0.915692 0.25468 -0.134575 -0.957616 + 2.51606 1.47071 0.967891 0.330929 -0.163916 -0.92931 + 2.58157 1.54655 0.941937 0.266095 -0.418526 -0.868349 + 2.64364 1.48362 0.994138 0.522602 -0.378271 -0.764067 + 2.69852 1.5131 1.03227 0.708694 -0.344683 -0.615587 + 2.71043 1.46155 1.07875 0.716198 -0.306736 -0.626876 + 2.5719 1.58847 0.916332 0.24231 -0.493795 -0.835136 + 2.6611 1.61844 0.948007 0.549291 -0.341806 -0.762527 + 2.71598 1.64801 0.986193 0.712945 -0.337458 -0.61468 + 2.80102 1.66446 1.09471 0.864027 -0.233586 -0.445976 + 2.81293 1.61291 1.14119 0.873009 -0.225582 -0.432398 + 2.48122 1.62578 0.875297 0.0576972 -0.586627 -0.807799 + 2.60333 1.64967 0.891728 0.39063 -0.520367 -0.75936 + 2.65143 1.66036 0.922402 0.541031 -0.461766 -0.702892 + 2.67776 1.7169 0.900876 0.615671 -0.46008 -0.639747 + 2.72185 1.72568 0.947274 0.734082 -0.373179 -0.567328 + 2.39266 1.62727 0.890711 -0.178698 -0.409407 -0.89468 + 2.32032 1.74681 0.80888 -0.080778 -0.736278 -0.671841 + 2.41817 1.76788 0.780783 0.0867385 -0.663433 -0.743192 + 2.51266 1.68707 0.850743 0.176262 -0.512871 -0.840176 + 2.33938 1.62431 0.903847 -0.0807268 -0.234746 -0.968699 + 2.1281 1.7572 0.861874 -0.191533 -0.75013 -0.632945 + 2.23175 1.7483 0.824294 -0.202616 -0.80611 -0.555997 + 2.25326 1.7895 0.740335 0.113395 -0.981665 -0.153219 + 2.07482 1.75424 0.87501 0.0678055 -0.603834 -0.794221 + 2.07002 1.79113 0.816903 0.136201 -0.976298 -0.168201 + 2.17367 1.78214 0.779273 -0.0585759 -0.993051 -0.102069 + 2.0201 1.77625 0.798888 0.28461 -0.958639 0.00302481 + 2.16063 1.76303 0.711379 0.17972 -0.950578 0.253183 + 2.24023 1.7703 0.672389 0.244021 -0.966599 0.0783627 + 2.32775 1.80176 0.63849 0.343177 -0.937812 -0.0523219 + 2.35111 1.81057 0.712237 0.202888 -0.938995 -0.277712 + 2.11072 1.74814 0.693364 0.17752 -0.928081 0.32734 + 2.16828 1.73679 0.612622 0.375287 -0.901583 0.215191 + 2.23005 1.77134 0.598377 0.433469 -0.900303 0.0394736 + 2.09294 1.7091 0.57958 0.34235 -0.883237 0.320451 + 2.18945 1.73318 0.523476 0.468924 -0.849497 0.241797 + 2.31758 1.80281 0.564478 0.393126 -0.869731 -0.298361 + 1.82181 0.634855 0.772834 -0.836211 -0.515998 -0.185735 + 1.86328 0.522468 0.640895 -0.963848 -0.213776 -0.159052 + 1.85602 0.48344 0.700494 -0.939084 -0.329717 -0.0969986 + 1.85124 0.55914 0.898177 -0.80946 -0.582162 -0.076567 + 1.85867 0.560346 0.57509 -0.942193 -0.275062 -0.191345 + 1.90574 0.492112 0.483073 -0.829741 -0.422046 -0.365249 + 1.89848 0.453085 0.542671 -0.793513 -0.534383 -0.291156 + 1.87381 0.447583 0.759598 -0.806263 -0.589642 0.0475713 + 1.86903 0.523284 0.95728 -0.803541 -0.588331 -0.0904918 + 1.9883 0.45298 0.409452 -0.417599 -0.705123 -0.573072 + 2.00954 0.415124 0.469421 -0.204335 -0.935948 -0.286789 + 1.91972 0.415229 0.60264 -0.549737 -0.81767 -0.170893 + 1.91275 0.418998 0.829711 -0.727032 -0.685426 0.0402044 + 1.94935 0.565786 0.362664 -0.617152 -0.0384118 -0.785906 + 2.02161 0.483805 0.35906 -0.03745 -0.574896 -0.817369 + 2.08366 0.48792 0.382134 0.525269 -0.420733 -0.739646 + 2.06514 0.433022 0.407221 0.26415 -0.739555 -0.619099 + 2.02637 0.400974 0.55173 -0.0700898 -0.977697 -0.197978 + 1.96117 0.623916 0.370181 -0.582338 0.309576 -0.751695 + 2.03079 0.576167 0.342284 0.0479223 -0.0215181 -0.998619 + 2.09283 0.580194 0.365307 0.48037 -0.11017 -0.870119 + 2.13465 0.524988 0.431131 0.689607 -0.423183 -0.587671 + 2.11612 0.470088 0.456217 0.721537 -0.57025 -0.392682 + 2.06893 0.717615 0.389289 0.0168197 0.449892 -0.892925 + 2.0426 0.634297 0.349801 0.0357102 0.264327 -0.963772 + 2.13163 0.660539 0.38755 0.443276 0.150754 -0.883618 + 2.19049 0.596965 0.432463 0.639774 -0.295599 -0.709444 + 2.15795 0.743771 0.426986 0.366044 0.360736 -0.857835 + 2.22929 0.677309 0.454703 0.597338 0.0398495 -0.800999 + 2.29897 0.667008 0.517943 0.739136 -0.248636 -0.625986 + 2.25055 0.615226 0.490033 0.718076 -0.437572 -0.5412 + 2.19471 0.543249 0.488701 0.681708 -0.526608 -0.507895 + 2.29095 0.754304 0.509943 0.590004 0.155228 -0.792338 + 2.36063 0.744003 0.573183 0.723767 -0.0701408 -0.68647 + 2.37781 0.693688 0.612731 0.750656 -0.375087 -0.543898 + 2.33759 0.653832 0.596765 0.73113 -0.500001 -0.464164 + 2.28918 0.60205 0.568855 0.744919 -0.480831 -0.46249 + 2.33615 0.828191 0.564767 0.559638 0.28448 -0.778381 + 2.41636 0.820637 0.631649 0.739303 0.115705 -0.663358 + 2.40083 0.774762 0.610509 0.726021 -0.0241785 -0.687247 + 2.41802 0.724447 0.650057 0.791033 -0.314137 -0.524962 + 2.39662 0.676452 0.657786 0.754001 -0.5525 -0.355283 + 2.45752 0.899734 0.695248 0.764468 0.172604 -0.621125 + 2.48254 0.845314 0.738309 0.892254 -0.0327908 -0.450342 + 2.4625 0.801927 0.699457 0.877721 -0.0342006 -0.47795 + 2.44697 0.756052 0.678316 0.86418 -0.192485 -0.464912 + 2.48473 0.934199 0.747354 0.875184 0.0846304 -0.47633 + 2.50976 0.879865 0.790465 0.92145 -0.0224679 -0.387847 + 2.49905 0.810617 0.786604 0.941661 -0.220736 -0.254069 + 2.479 0.767145 0.747704 0.921024 -0.264187 -0.286217 + 2.45367 0.732084 0.713029 0.860567 -0.394201 -0.322536 + 2.52809 0.924004 0.840815 0.942149 0.0156458 -0.33483 + 2.5386 0.896836 0.880669 0.964608 -0.082113 -0.250576 + 2.52027 0.852697 0.830319 0.949232 -0.204135 -0.239349 + 2.49331 0.781366 0.82267 0.9276 -0.364023 -0.0839421 + 2.5344 0.980681 0.864848 0.928631 -0.00801826 -0.370919 + 2.55869 0.939821 0.946216 0.951577 -0.124901 -0.280894 + 2.54014 0.858694 0.912934 0.939332 -0.313187 -0.13989 + 2.51454 0.823445 0.866386 0.904225 -0.40913 -0.122436 + 2.58618 0.988521 1.00507 0.979071 -0.140135 -0.147585 + 2.56023 0.901679 0.978481 0.954078 -0.290333 -0.0737738 + 2.53165 0.838818 1.05256 0.913538 -0.402561 0.0582432 + 2.51634 0.79982 0.971909 0.883863 -0.466957 -0.027164 + 2.49073 0.764571 0.92536 0.886831 -0.459666 -0.0473023 + 2.60092 1.04733 1.08021 0.98845 -0.138787 -0.0608608 + 2.56768 0.943084 1.07156 0.944623 -0.322299 0.0617331 + 2.5391 0.88031 1.14569 0.924055 -0.37523 0.0729709 + 2.58243 1.00189 1.14671 0.958156 -0.282252 0.0476613 + 2.54816 0.916788 1.24551 0.924885 -0.376572 0.0527289 + 2.49043 0.791906 1.25421 0.887843 -0.45236 0.0842909 + 2.48424 0.761974 1.15306 0.869378 -0.488031 0.0775038 + 2.46892 0.722888 1.07236 0.857893 -0.510084 0.0619184 + 2.59308 1.04304 1.25684 0.950486 -0.310767 0.000276595 + 2.55881 0.957931 1.35565 0.927786 -0.369289 0.0532814 + 2.51029 0.860121 1.45466 0.897745 -0.434915 0.0700224 + 2.49949 0.828385 1.35403 0.886072 -0.459019 0.0646431 + 2.42666 0.707028 1.40663 0.845744 -0.527412 0.0809584 + 2.63788 1.20703 1.1818 0.924135 -0.302237 -0.233726 + 2.61715 1.10987 1.32427 0.934838 -0.354857 -0.0124516 + 2.61877 1.12024 1.39092 0.928873 -0.346621 0.130568 + 2.56943 1.00822 1.47854 0.936878 -0.339198 0.0848845 + 2.69088 1.31879 1.16602 0.832613 -0.488627 -0.260765 + 2.68403 1.27004 1.36046 0.912318 -0.409108 -0.0174877 + 2.68566 1.28041 1.4271 0.833458 -0.458786 0.307997 + 2.69582 1.36191 1.10273 0.747763 -0.449461 -0.488707 + 2.82917 1.55684 1.26112 0.91173 -0.404572 -0.0712022 + 2.73704 1.3818 1.34469 0.898624 -0.438482 0.0144118 + 2.83411 1.59996 1.19782 0.924772 -0.25079 -0.286185 + 2.88133 1.67507 1.38653 0.916335 -0.399711 -0.023677 + 2.84279 1.60821 1.36312 0.856738 -0.490286 0.160061 + 2.75066 1.43318 1.4467 0.893546 -0.394843 0.213716 + 2.90337 1.85575 1.33597 0.949621 0.0161176 -0.312987 + 2.92455 1.84272 1.39255 0.973919 -0.0519995 -0.220858 + 2.86532 1.87264 1.20993 0.952761 0.00404706 -0.303695 + 2.95481 2.09748 1.58589 0.974836 -0.00174564 -0.222915 + 2.98303 2.14159 1.73209 0.988962 -0.0402742 -0.142589 + 2.99574 2.15389 1.85579 0.981807 -0.189344 0.014288 + 2.93726 1.8551 1.51631 0.983621 -0.15214 -0.0966632 + 2.80689 1.74221 1.05584 0.890065 -0.216512 -0.401132 + 2.81001 1.82439 1.0431 0.925427 -0.0260535 -0.37803 + 2.81581 2.05844 1.12231 0.945637 0.0702556 -0.317545 + 2.91676 2.11437 1.45984 0.958892 0.030765 -0.282098 + 2.72177 1.82364 0.876602 0.808816 -0.282963 -0.515509 + 2.72489 1.90582 0.863861 0.923415 -0.0291651 -0.382693 + 2.76051 2.01011 0.95543 0.934749 0.0349288 -0.353588 + 2.7848 2.16815 1.04528 0.950584 0.0400578 -0.307871 + 2.87667 2.11855 1.3206 0.954486 -0.0238058 -0.297303 + 2.67768 1.81486 0.830204 0.559341 -0.493534 -0.666004 + 2.67396 1.9354 0.721423 0.776952 -0.421209 -0.467898 + 2.68502 1.95172 0.749157 0.954307 -0.0233638 -0.297914 + 2.71138 1.98324 0.833165 0.938418 0.0114834 -0.345311 + 2.62967 1.7062 0.870201 0.482092 -0.492265 -0.72475 + 2.58267 1.73848 0.824504 0.270608 -0.514977 -0.81337 + 2.63068 1.84713 0.784507 0.351959 -0.618914 -0.702189 + 2.48818 1.81928 0.754544 0.206464 -0.72191 -0.660468 + 2.58025 1.85702 0.72798 0.356293 -0.776905 -0.519109 + 2.62354 1.94529 0.664895 0.485335 -0.76367 -0.425744 + 2.43108 1.83731 0.699718 0.284864 -0.921229 -0.264933 + 2.52314 1.87505 0.673153 0.380824 -0.851003 -0.361617 + 2.56371 1.90541 0.638774 0.538406 -0.813374 -0.220321 + 2.65259 1.99834 0.58761 0.855624 -0.475973 -0.203363 + 2.40771 1.82859 0.62602 0.309136 -0.916423 -0.254175 + 2.44828 1.85895 0.591641 0.425765 -0.871223 -0.244324 + 2.59276 1.95846 0.561488 0.568262 -0.78942 -0.23215 + 2.45007 1.87419 0.527834 0.393111 -0.89808 -0.197273 + 2.59456 1.9737 0.497681 0.629886 -0.764202 -0.138706 + 2.65958 2.04483 0.483687 0.897798 -0.437804 -0.0478185 + 2.66253 2.06267 0.61958 0.98472 -0.0204596 -0.17294 + 2.36711 1.85411 0.519218 0.266042 -0.869767 -0.415603 + 2.49456 1.90442 0.452076 0.427214 -0.898405 -0.101765 + 2.59875 1.98864 0.397003 0.681887 -0.731436 -0.00562154 + 2.66377 2.05986 0.383058 0.854675 -0.518882 0.0171137 + 2.3475 1.89328 0.451581 0.467733 -0.587779 -0.660107 + 2.3478 1.96087 0.399315 -0.244105 -0.794221 -0.556441 + 2.4116 1.88434 0.44346 -0.106566 -0.913771 -0.392003 + 2.42771 1.91018 0.369699 -0.251129 -0.929934 -0.268622 + 2.51789 1.91892 0.360977 0.367215 -0.928262 -0.0590254 + 2.26025 1.98695 0.359346 0.149794 -0.958924 -0.240888 + 2.36392 1.98662 0.325503 -0.436626 -0.898441 -0.046489 + 2.35463 1.97552 0.240132 -0.267618 -0.963065 0.0297682 + 2.46725 1.92879 0.287876 -0.0923059 -0.988734 -0.117834 + 2.55743 1.93752 0.279154 0.451304 -0.889987 0.0651723 + 2.11899 1.92745 0.436183 -0.150894 -0.777408 -0.610628 + 2.25096 1.97584 0.273974 0.0223312 -0.988689 -0.14831 + 1.97939 1.91008 0.527278 -0.464129 -0.153791 -0.872314 + 2.10042 1.94287 0.395095 -0.460241 -0.664172 -0.589113 + 2.23238 1.99125 0.232885 -0.0799532 -0.996497 -0.0245063 + 2.35579 1.96937 0.155186 -0.271557 -0.943545 0.18968 + 2.46841 1.92264 0.20293 -0.146599 -0.981954 0.119476 + 1.98681 1.983 0.502177 -0.561287 -0.301657 -0.770688 + 2.10785 2.01579 0.369994 -0.645005 -0.583986 -0.492878 + 2.21447 1.97213 0.146212 -0.348375 -0.936876 -0.029968 + 2.33788 1.95024 0.068513 -0.31059 -0.935433 0.168814 + 1.86395 1.92119 0.601043 -0.367421 -0.116224 -0.922764 + 1.86303 1.97649 0.569659 -0.0802777 -0.65664 -0.74992 + 1.98589 2.03839 0.470843 -0.368885 -0.695125 -0.617029 + 2.09749 2.04099 0.300132 -0.607779 -0.747658 -0.267605 + 2.20412 1.99725 0.076298 -0.464977 -0.88396 -0.0491106 + 1.72344 1.78891 0.607946 -0.0683575 0.205625 -0.97624 + 1.73866 1.86406 0.624396 0.0576267 -0.0879699 -0.994455 + 1.75061 1.91433 0.605914 0.221224 -0.551671 -0.804189 + 1.84856 2.01994 0.506199 0.275472 -0.903026 -0.329635 + 1.97685 2.07276 0.415306 -0.133399 -0.933509 -0.332815 + 1.55876 1.75007 0.57343 0.275332 0.00285728 -0.961345 + 1.62279 1.80396 0.596478 0.299484 -0.0830465 -0.95048 + 1.63474 1.85424 0.577997 0.507909 -0.636863 -0.58003 + 1.62911 1.86904 0.529369 0.574287 -0.705876 -0.41465 + 1.73614 1.95778 0.542454 0.4003 -0.775248 -0.488621 + 1.4907 1.74 0.544658 0.499719 -0.517574 -0.694549 + 1.55473 1.7939 0.567707 0.574051 -0.467155 -0.672482 + 1.5491 1.8087 0.519079 0.558113 -0.675436 -0.481971 + 1.6096 1.89578 0.469647 0.534305 -0.669692 -0.515782 + 1.42107 1.71157 0.51291 0.445146 -0.643983 -0.622198 + 1.32788 1.68917 0.501908 0.451926 -0.790947 -0.412512 + 1.3416 1.70969 0.431165 0.204113 -0.701643 -0.682668 + 1.47947 1.78026 0.487332 0.52898 -0.565696 -0.632589 + 1.48119 1.81453 0.465381 0.403264 -0.407623 -0.819281 + 1.51874 1.84632 0.463109 0.371934 -0.682713 -0.628942 + 1.33145 1.63145 0.543685 0.00577073 -0.586066 -0.810243 + 1.24213 1.58922 0.591819 0.405878 -0.653216 -0.639196 + 1.25585 1.60974 0.521077 0.733069 -0.677968 -0.054492 + 0.202299 1.02452 0.721508 0.907211 -0.410738 -0.0908981 + 0.15157 1.06403 0.643287 -0.979472 -0.0908809 0.179929 + 0.234082 0.897133 0.710156 -0.837062 -0.441437 0.323203 + 0.244229 0.870941 0.669123 -0.690048 -0.721132 -0.0616642 + 0.309676 0.843906 0.623748 -0.233073 -0.871502 -0.431464 + 0.152736 0.978969 0.620009 -0.937993 -0.318667 0.136454 + 0.189415 0.940339 0.661921 -0.794578 -0.0695574 0.603164 + 0.219009 0.907591 0.61584 -0.646218 -0.744772 -0.166487 + 0.284455 0.880559 0.570464 -0.312537 -0.845145 -0.433648 + 0.162528 1.00458 0.544659 -0.823551 -0.121026 -0.55418 + 0.182329 0.946137 0.57388 -0.708726 -0.630776 -0.315958 + 0.268357 0.921192 0.510286 -0.309738 -0.667453 -0.677177 + 0.360002 0.911817 0.510322 0.1237 -0.734881 -0.66682 + 0.3761 0.87127 0.570549 0.125586 -0.844819 -0.520105 + 0.336879 0.960448 0.457692 0.042657 -0.633968 -0.772182 + 0.50752 0.852181 0.689413 0.332563 -0.852478 -0.403341 + 0.796318 1.05165 0.751717 0.461918 -0.535962 -0.706666 + 0.836418 1.08358 0.728015 0.175088 -0.526333 -0.832057 + 0.864226 1.02491 0.785242 0.0570301 -0.699887 -0.711974 + 0.819133 1.15034 0.699185 0.171875 -0.0589575 -0.983353 + 0.925343 1.0704 0.750837 0.388301 -0.512821 -0.765661 + 0.912503 1.00653 0.803681 0.233334 -0.666625 -0.707931 + 0.928794 0.949375 0.867469 0.170093 -0.679648 -0.713545 + 0.908058 1.13717 0.722007 0.270862 -0.250709 -0.929397 + 1.01464 1.15234 0.772115 0.64582 -0.423266 -0.635423 + 1.0018 1.08846 0.824958 0.486827 -0.327264 -0.809875 + 1.02022 1.0493 0.8338 0.226322 -0.394117 -0.890758 + 1.05187 0.99702 0.888545 -0.297698 -0.357201 -0.885315 + 0.998934 1.2881 0.724183 0.333965 -0.129558 -0.933639 + 1.00783 1.21606 0.740162 0.499355 -0.244388 -0.831215 + 1.10713 1.32608 0.795797 0.538744 -0.38091 -0.75144 + 1.13606 1.2957 0.832614 0.218669 -0.351567 -0.910266 + 1.15449 1.25662 0.841506 -0.553634 0.133807 -0.82194 + 0.970805 1.34472 0.708509 0.0412451 0.0257167 -0.998818 + 1.09286 1.46508 0.74365 -0.00318308 -0.228903 -0.973444 + 1.10032 1.38979 0.763845 0.283601 -0.326596 -0.901613 + 1.18554 1.48162 0.722401 0.110353 -0.648594 -0.753092 + 1.06473 1.5217 0.727976 0.180033 -0.508141 -0.842248 + 1.18281 1.61753 0.660593 -0.386171 -0.553711 -0.73775 + 1.19027 1.54224 0.680788 -0.646054 -0.296844 -0.703205 + 1.25585 1.60974 0.521077 -0.855804 -0.245678 -0.455239 + 1.26058 1.67037 0.479465 -0.707525 -0.12166 -0.696137 + 1.11069 1.64925 0.566047 0.182669 -0.850071 -0.493975 + 1.17119 1.6447 0.623934 0.239739 -0.799342 -0.550979 + 1.27974 1.74305 0.504183 0.116358 -0.779946 -0.614935 + 1.26813 1.77022 0.467524 0.53658 -0.827109 -0.167254 + 1.40002 1.84843 0.43166 0.318277 -0.808561 -0.494902 + 1.08987 1.68747 0.501654 -0.334451 -0.709302 -0.620511 + 1.27714 1.73384 0.36654 0.362731 -0.922568 -0.131513 + 1.0847 1.76643 0.448892 -0.646018 -0.37113 -0.667026 + 1.25633 1.77205 0.302146 -0.280083 -0.705534 -0.65098 + 1.39581 1.80816 0.253611 0.464538 -0.795514 -0.389053 + 1.3723 1.80029 0.286041 0.62763 -0.711542 0.315894 + 1.36329 1.83676 0.387075 0.505454 -0.851617 0.138795 + 0.963748 1.67169 0.607379 -0.755497 -0.22715 -0.614513 + 1.02368 1.78898 0.51143 -0.892864 0.190919 -0.407853 + 1.07689 1.85796 0.419351 -0.887376 0.140668 -0.439063 + 1.20666 1.87117 0.272668 -0.581059 -0.371834 -0.723955 + 0.939812 1.7023 0.659358 -0.88657 0.0803309 -0.455567 + 1.27974 1.74305 0.504183 -0.8219 0.38494 -0.419883 + 1.36248 1.81655 0.433883 -0.427988 0.603869 -0.672435 + 1.34332 1.74387 0.409165 -0.172196 -0.0570466 -0.98341 + 1.25585 1.60974 0.521077 -0.220231 -0.536248 -0.814823 + 1.40002 1.84843 0.43166 -0.645561 0.762778 0.0376797 + 1.49371 1.87369 0.4009 0.34234 -0.911475 -0.228071 + 1.58458 1.92315 0.407439 0.557262 -0.750147 -0.356003 + 1.71664 1.98444 0.482681 0.278229 -0.831885 -0.480163 + 1.45697 1.86202 0.356314 0.354918 -0.929497 0.10034 + 1.48049 1.86989 0.323885 0.53095 -0.844942 -0.0645404 + 1.56568 1.92661 0.343843 0.60291 -0.771357 -0.203735 + 1.70041 2.01636 0.421399 0.301257 -0.875416 -0.378009 + 1.45717 1.86774 0.25622 0.503959 -0.747068 -0.433491 + 1.54235 1.92454 0.276228 0.504036 -0.863544 -0.0154657 + 1.68151 2.01991 0.357853 0.49261 -0.870166 -0.0121202 + 1.80615 2.05582 0.310851 -0.247213 -0.930943 -0.268756 + 1.35107 1.82046 0.2205 0.0308679 -0.583249 -0.811707 + 1.41242 1.88004 0.223108 0.296819 -0.475157 -0.828326 + 1.42618 1.90793 0.206004 0.0559549 -0.788487 -0.6125 + 1.52271 1.90991 0.211981 0.331174 -0.897673 -0.2907 + 1.66635 1.9747 0.290952 0.460207 -0.837403 0.294899 + 1.3014 1.91958 0.191021 -0.260683 -0.473029 -0.841599 + 1.31516 1.94747 0.173917 0.0440153 -0.697839 -0.7149 + 1.40595 1.93105 0.152164 -0.156965 -0.870254 -0.466927 + 1.50248 1.93302 0.15814 0.0554339 -0.941576 -0.332208 + 1.64671 1.96006 0.226704 0.431689 -0.899067 0.0729549 + 1.19886 1.96262 0.243077 -0.732002 -0.213603 -0.646952 + 1.26321 2.0167 0.155612 -0.652699 -0.227075 -0.722787 + 1.30196 1.97625 0.143271 -0.467895 -0.51246 -0.720041 + 1.39275 1.95991 0.121567 -0.25105 -0.663083 -0.705191 + 1.47766 1.95416 0.101329 -0.0823218 -0.749088 -0.657335 + 1.12415 1.9304 0.389289 -0.904072 0.337209 -0.26257 + 1.17438 2.06327 0.257947 -0.908346 0.140968 -0.393745 + 1.23873 2.11735 0.170481 -0.741687 -0.0562635 -0.668382 + 1.33453 2.06406 0.095774 -0.60626 -0.214866 -0.76569 + 1.37329 2.02361 0.083435 -0.334344 -0.352648 -0.873987 + 1.07094 1.86142 0.481368 -0.784607 0.114513 -0.609327 + 1.13327 1.96877 0.413429 -0.869528 0.493876 0.00283459 + 0.972324 1.71963 0.595543 -0.851201 0.516356 -0.0939909 + 1.02369 1.81801 0.518748 -0.38825 -0.321218 -0.86376 + 1.4582 2.01786 0.063199 -0.312538 -0.605407 -0.731986 + 1.59463 1.94725 0.1013 0.0663678 -0.876901 -0.476067 + 1.61945 1.92603 0.15806 0.243899 -0.969305 0.0310103 + 1.43484 2.0693 0.0235 -0.451963 -0.743282 -0.493215 + 1.57347 1.98018 0.03807 -0.0562376 -0.816198 -0.575029 + 1.66293 2.07241 -0.037486 0.258456 -0.663051 -0.702541 + 1.68409 2.03939 0.025701 0.27263 -0.727827 -0.629238 + 1.70857 1.99641 0.074348 0.490401 -0.804537 -0.335002 + 1.38042 2.10717 0.002718 -0.424909 -0.664467 -0.614765 + 1.55011 2.03162 -0.001628 -0.214168 -0.595484 -0.774294 + 1.63216 2.12829 -0.077678 -0.0197043 -0.489115 -0.871997 + 1.71628 2.29053 -0.143889 -0.350455 -0.527353 -0.774003 + 1.74988 2.21936 -0.135015 -0.0760398 -0.581662 -0.809869 + 1.33928 2.16376 -0.010112 -0.422975 -0.278949 -0.862137 + 1.53196 2.1008 -0.030862 -0.256697 -0.418164 -0.871347 + 1.61401 2.19748 -0.106921 -0.108177 -0.517776 -0.848649 + 1.68551 2.34651 -0.184032 0.0644446 -0.625817 -0.777303 + 1.70192 2.42975 -0.265816 -0.571784 -0.719947 -0.393369 + 1.31168 2.22762 -0.000509 -0.476709 -0.374344 -0.795371 + 1.49081 2.1574 -0.043692 -0.286219 -0.444091 -0.849036 + 1.56252 2.23009 -0.131389 -0.180634 -0.605685 -0.774931 + 1.62659 2.36279 -0.226046 0.192369 -0.61118 -0.767759 + 1.27698 2.27543 -0.022522 -0.270669 -0.862189 -0.428214 + 1.44143 2.21733 -0.061887 -0.372907 -0.561533 -0.738661 + 1.51313 2.29001 -0.149574 -0.289754 -0.611365 -0.736394 + 1.5751 2.3954 -0.250513 -0.0542794 -0.696207 -0.715786 + 1.58421 2.4825 -0.34479 0.0710746 -0.822369 -0.564498 + 1.40673 2.26514 -0.0839 -0.311667 -0.645853 -0.696949 + 1.45249 2.32849 -0.170436 -0.270604 -0.687699 -0.673679 + 1.50702 2.42195 -0.279312 -0.110617 -0.738128 -0.665531 + 1.44772 2.53598 -0.412815 0.0751554 -0.845197 -0.529144 + 1.5158 2.50943 -0.384024 -0.0406863 -0.823733 -0.565516 + 1.39437 2.37983 -0.191359 -0.171735 -0.742652 -0.647283 + 1.44638 2.46044 -0.300165 -0.189766 -0.796118 -0.574618 + 1.38229 2.53653 -0.460558 0.176715 -0.802337 -0.570111 + 1.32563 2.61155 -0.555713 0.316298 -0.76934 -0.555042 + 1.40544 2.59553 -0.522956 0.0654508 -0.851329 -0.520533 + 1.33181 2.40193 -0.223025 -0.00531729 -0.786412 -0.617679 + 1.38039 2.48423 -0.321586 -0.0946595 -0.858646 -0.503752 + 1.3163 2.56033 -0.481979 0.0610148 -0.944679 -0.322272 + 1.2602 2.61211 -0.603465 0.784775 -0.617647 -0.051381 + 1.39026 2.63554 -0.586252 -0.133654 -0.97668 0.168024 + 1.26661 2.4303 -0.253176 0.137693 -0.836198 -0.530861 + 1.31783 2.50633 -0.353252 0.185982 -0.873261 -0.450361 + 1.27251 2.55329 -0.502787 0.338238 -0.92525 -0.171777 + 1.25085 2.53548 -0.642347 0.440322 -0.876021 0.196731 + 1.20572 2.43121 -0.29614 0.252556 -0.874902 -0.413233 + 1.25834 2.48932 -0.404594 0.408645 -0.831082 -0.377243 + 1.21302 2.53637 -0.554078 0.0101246 -0.981543 -0.190975 + 1.20705 2.52844 -0.663154 -0.32234 -0.924094 -0.205299 + 1.29075 2.53949 -0.6781 0.234468 -0.96012 0.152295 + 1.19745 2.49031 -0.447509 0.294009 -0.88254 -0.366991 + 1.13696 2.56225 -0.572121 0.24055 -0.816552 -0.524765 + 1.13498 2.58815 -0.664973 -0.34989 -0.869559 -0.348488 + 1.1783 2.60535 -0.717757 -0.228783 -0.445422 -0.865596 + 1.25037 2.54564 -0.715938 0.00630611 -0.546052 -0.837727 + 1.14564 2.48276 -0.502637 0.414545 -0.783728 -0.462518 + 1.08515 2.55479 -0.6272 0.321934 -0.602177 -0.730576 + 1.05893 2.61404 -0.683015 -0.248084 -0.66334 -0.705999 + 1.09197 2.49324 -0.547582 0.0228098 -0.863729 -0.50344 + 1.00774 2.56423 -0.626535 -0.213493 -0.706061 -0.675202 + 0.952736 2.65753 -0.671346 -0.133289 -0.534675 -0.83448 + 0.995094 2.70139 -0.709304 -0.182556 -0.0647531 -0.981061 + 1.10128 2.65798 -0.720924 -0.190865 -0.241193 -0.951523 + 0.935983 2.58446 -0.605581 -0.0900865 -0.66383 -0.742438 + 0.875326 2.66696 -0.670681 -0.0999409 -0.421074 -0.901503 + 0.923069 2.74734 -0.688105 -0.11676 0.0871691 -0.989327 + 1.18747 2.72598 -0.714907 -0.121215 0.263575 -0.956993 + 1.26096 2.67633 -0.738505 -0.0684365 0.00595046 -0.997638 + 0.870966 2.57111 -0.610862 0.295643 -0.26993 -0.916369 + 0.778787 2.66576 -0.665798 0.0984849 -0.344216 -0.933711 + 0.826531 2.74605 -0.683273 -0.0455286 0.0476413 -0.997826 + 1.11545 2.77194 -0.693708 -0.167445 0.248483 -0.954054 + 1.33308 2.79385 -0.727258 -0.0948411 -0.200281 -0.975137 + 0.798624 2.54457 -0.643083 0.509149 0.133604 -0.850246 + 0.713771 2.65233 -0.67113 0.477435 -0.197945 -0.85608 + 0.779571 2.78279 -0.673504 0.0612776 0.0646197 -0.996027 + 1.04311 2.83942 -0.656181 -0.165697 0.189405 -0.967817 + 0.887914 2.47712 -0.585663 0.573875 -0.0462899 -0.817633 + 0.765683 2.50322 -0.683475 0.594998 0.295082 -0.747599 + 0.673895 2.61527 -0.694348 0.748482 -0.092454 -0.656678 + 0.640955 2.57392 -0.734732 0.967448 0.156922 -0.198544 + 0.650081 2.67466 -0.739609 0.874451 -0.485098 -0.00393705 + 0.9257 2.91973 -0.647078 0.419638 -0.628224 -0.655164 + 0.996149 2.87607 -0.646464 -0.083087 0.000552148 -0.996542 + 0.673952 2.50458 -0.790829 0.967494 0.252412 0.0155832 + 0.683078 2.60532 -0.795705 0.769421 -0.286839 0.570714 + 0.836086 2.84874 -0.689923 0.671471 -0.611283 -0.418879 + 1.04073 2.97995 -0.685998 -0.0815139 -0.694347 -0.715009 + 0.734671 2.39274 -0.790508 0.82232 0.427947 -0.375036 + 1.23082 2.97775 -0.795581 -0.366035 -0.589373 -0.720179 + 1.11118 2.9363 -0.685384 -0.323937 -0.417107 -0.849168 + 1.1885 2.88821 -0.697087 -0.404972 -0.207456 -0.890483 + 1.19572 3.04732 -0.839083 -0.0829407 -0.901272 -0.42524 + 1.31198 3.01028 -0.86213 -0.148386 -0.670049 -0.727335 + 1.3905 3.00163 -0.85515 -0.03438 -0.334962 -0.941604 + 1.30814 2.92966 -0.807285 -0.340962 -0.474834 -0.811343 + 1.36325 3.06702 -0.907792 0.155057 -0.833908 -0.529674 + 1.43413 3.09074 -0.915481 0.502967 -0.851769 -0.146675 + 1.38286 3.03391 -0.869861 0.260468 -0.545147 -0.796851 + 1.47907 3.14352 -0.870306 0.666408 -0.700049 -0.256579 + 1.48671 3.11124 -0.855587 0.593306 -0.175406 -0.785634 + 1.46456 2.96133 -0.856744 0.433671 -0.509201 -0.7434 + 1.3822 2.88936 -0.80888 -0.125509 -0.464528 -0.876619 + 1.59496 3.20381 -0.955135 0.63392 -0.726842 0.264284 + 1.54549 3.15754 -0.791375 0.887634 -0.370916 -0.272996 + 1.52334 3.00771 -0.792474 0.837472 -0.281624 -0.468326 + 1.45443 2.86248 -0.801524 0.44711 -0.59702 -0.666078 + 1.26084 2.82082 -0.734563 -0.277489 -0.275354 -0.920424 + 1.77508 3.28657 -1.06087 0.487567 -0.717152 0.497967 + 1.86176 3.43631 -0.971036 0.518958 -0.61624 0.592394 + 1.68164 3.35355 -0.865289 0.67825 -0.554468 0.482227 + 1.91688 3.30485 -1.13414 0.239255 -0.697744 0.675212 + 1.97363 3.439 -1.04168 0.29723 -0.583833 0.755509 + 2.00552 3.64988 -0.887349 0.457435 -0.53112 0.713208 + 2.03489 3.31849 -1.14235 -0.0182706 -0.615519 0.78791 + 2.09165 3.45262 -1.04988 0.054304 -0.457319 0.887643 + 2.11739 3.65256 -0.957993 0.2582 -0.660345 0.705179 + 2.09605 3.15024 -1.26755 -0.263228 -0.305557 0.915066 + 2.13632 3.2951 -1.13945 -0.266846 -0.550978 0.790706 + 2.1816 3.33755 -1.09758 -0.132174 -0.416136 0.899645 + 2.18006 3.48536 -1.04378 0.0413162 -0.370108 0.92807 + 2.20581 3.68529 -0.95188 0.271468 -0.417502 0.867178 + 2.14282 3.05528 -1.26346 -0.49629 -0.218851 0.840119 + 2.21833 3.15421 -1.17961 -0.500217 -0.336075 0.798021 + 2.2636 3.19658 -1.1378 -0.107978 -0.319223 0.941508 + 2.27696 3.31872 -1.10056 0.050101 -0.323185 0.945009 + 2.27543 3.46653 -1.04677 0.264821 -0.305753 0.914541 + 2.11149 2.90972 -1.33014 -0.521176 -0.281282 0.805764 + 2.32373 2.91548 -1.12313 -0.587964 0.0175507 0.808697 + 2.2651 3.05915 -1.17558 -0.537321 -0.084115 0.839173 + 2.32326 3.04155 -1.14509 0.0336512 0.195202 0.980186 + 2.30229 3.14979 -1.15956 0.552687 0.0674438 0.830656 + 2.25441 2.49434 -1.34129 -0.694787 -0.245086 0.676169 + 2.29241 2.76992 -1.18981 -0.719133 -0.212029 0.661733 + 2.43192 2.81345 -1.02221 -0.700339 0.244804 0.670519 + 2.3819 2.89788 -1.09264 -0.184813 0.50216 0.844795 + 2.19343 2.3614 -1.44902 -0.673294 -0.429962 0.601505 + 2.38166 2.37619 -1.23645 -0.780582 -0.2705 0.56349 + 2.41966 2.65186 -1.08493 -0.812118 -0.190649 0.551468 + 2.19141 2.26339 -1.55927 -0.590204 -0.681517 0.432659 + 2.28861 2.25875 -1.43763 -0.594287 -0.646519 0.478368 + 2.40446 2.27752 -1.25614 -0.677232 -0.554043 0.484142 + 2.50558 2.41975 -1.0117 -0.859194 -0.219936 0.461967 + 2.1959 2.24044 -1.60352 -0.266858 -0.960607 0.0775979 + 2.31731 2.23023 -1.45523 -0.203759 -0.963926 0.171253 + 2.43316 2.24899 -1.27374 -0.221677 -0.938223 0.265702 + 2.56039 2.29426 -1.03674 -0.232768 -0.930696 0.282175 + 2.52838 2.32108 -1.03139 -0.717522 -0.532754 0.448704 + 2.22027 2.24431 -1.62202 0.307573 -0.839233 -0.448427 + 2.34167 2.2341 -1.47373 0.354542 -0.901958 -0.24652 + 2.45861 2.2487 -1.29362 0.378665 -0.919644 -0.104251 + 2.58585 2.29395 -1.05661 0.389559 -0.920836 -0.0174791 + 2.62979 2.32533 -0.864149 -0.241571 -0.944778 0.221443 + 2.11269 2.29132 -1.74085 0.260504 -0.675861 -0.689456 + 2.2528 2.27635 -1.62132 0.618366 -0.417079 -0.666084 + 2.37143 2.26879 -1.49442 0.671909 -0.529926 -0.517413 + 2.48837 2.28339 -1.31431 0.763623 -0.522942 -0.378697 + 2.6107 2.3166 -1.06664 0.791842 -0.547112 -0.271395 + 2.14522 2.32336 -1.74014 0.576688 -0.341687 -0.742079 + 2.20604 2.39694 -1.69919 0.702302 -0.108798 -0.703517 + 2.28302 2.33097 -1.61352 0.694617 -0.170725 -0.698827 + 2.40166 2.32341 -1.48662 0.790406 -0.196616 -0.580172 + 2.50482 2.35078 -1.32843 0.867374 -0.151911 -0.473904 + 2.05358 2.41322 -1.84278 0.495528 -0.304985 -0.813287 + 2.1144 2.48689 -1.80179 0.669009 -0.0503813 -0.741545 + 2.31438 2.50519 -1.59007 0.763922 0.0745473 -0.640988 + 2.39136 2.43913 -1.50445 0.790307 0.0546089 -0.610273 + 2.49453 2.4665 -1.34626 0.847806 0.0654729 -0.526249 + 1.94479 2.45263 -1.90705 0.336243 -0.33616 -0.879737 + 1.98576 2.53833 -1.90668 0.460474 0.023228 -0.887369 + 2.16603 2.59459 -1.75254 0.709055 0.137512 -0.691615 + 1.86195 2.54064 -1.95268 0.310542 -0.0748399 -0.947609 + 2.03739 2.64603 -1.85742 0.618068 0.076534 -0.78239 + 2.24194 2.72805 -1.6143 0.780376 0.208978 -0.589357 + 2.39029 2.63865 -1.45183 0.804111 0.212302 -0.555278 + 2.49329 2.5927 -1.31286 0.82348 0.213687 -0.525565 + 1.90627 2.66503 -1.94613 0.418474 -0.00425106 -0.908219 + 1.93489 2.81924 -1.90904 0.528604 0.120894 -0.840216 + 2.066 2.80025 -1.82034 0.693987 0.113716 -0.71095 + 2.17485 2.85109 -1.6634 0.795705 0.201428 -0.57121 + 2.38575 2.89521 -1.32322 0.838269 0.262333 -0.478002 + 1.80062 2.79505 -1.96253 0.1338 0.15225 -0.979243 + 1.8713 2.86373 -1.93829 0.294788 0.185389 -0.937406 + 1.98323 3.03521 -1.84151 0.634615 0.231175 -0.737443 + 2.03559 3.02965 -1.78487 0.734394 0.272104 -0.621792 + 2.14444 3.08049 -1.62792 0.778636 0.287473 -0.55775 + 1.7707 2.97684 -1.9164 0.133419 0.200884 -0.970487 + 1.84137 3.0456 -1.89209 0.156999 0.206819 -0.9657 + 1.91965 3.07969 -1.87075 0.373964 0.193041 -0.90713 + 1.55622 2.89886 -1.96933 0.187376 0.102362 -0.97694 + 1.68973 3.06889 -1.91844 0.229269 0.0715042 -0.970733 + 1.82756 3.12337 -1.8818 0.236797 -0.000513714 -0.971559 + 1.90584 3.15746 -1.86045 0.444827 0.201356 -0.872688 + 1.46366 2.88377 -1.98619 0.0932554 0.0330778 -0.995093 + 1.4767 3.16306 -1.97075 0.206175 0.0169078 -0.978369 + 1.48786 3.25512 -1.9694 0.107757 -0.245094 -0.963492 + 1.70089 3.16095 -1.91709 0.218922 -0.121734 -0.968119 + 1.81596 3.17598 -1.89651 0.319283 0.0327563 -0.947093 + 1.31949 3.00873 -1.98584 0.016312 -0.0207455 -0.999652 + 1.38414 3.14797 -1.98761 0.127312 -0.00612026 -0.991844 + 1.28456 2.89173 -1.99019 0.0221008 0.0463043 -0.998683 + 1.20375 2.92299 -1.98954 -0.0205017 0.0750963 -0.996966 + 1.17834 3.00699 -1.98062 -0.0720716 -0.0652024 -0.995266 + 1.17824 3.0538 -1.99369 -0.0675442 -0.27984 -0.957668 + 1.23855 3.08685 -1.99834 0.091776 -0.143728 -0.985352 + 1.16363 2.71074 -2.0043 0.108166 0.175013 -0.978607 + 1.10555 2.89233 -1.98803 0.0906666 0.125668 -0.987921 + 1.08014 2.97632 -1.97911 0.0794665 0.149379 -0.985581 + 1.06208 3.04749 -1.96857 0.144114 -0.112001 -0.983202 + 1.06198 3.0943 -1.98165 0.214222 -0.482034 -0.84956 + 1.05478 2.85312 -2.00632 0.362667 0.201661 -0.909838 + 1.02944 2.93831 -1.99707 0.352468 0.213754 -0.911085 + 1.01138 3.00948 -1.98653 0.654139 0.00684707 -0.756344 + 1.01116 3.05512 -1.99999 0.827631 -0.310653 -0.467462 + 1.07961 3.16294 -2.03154 0.414632 -0.837115 -0.356818 + 0.975299 2.85138 -2.0535 0.95144 0.238123 -0.195086 + 1.02879 3.12367 -2.04993 0.56819 -0.356565 -0.741634 + 1.13992 3.19591 -2.03624 0.229932 -0.177704 -0.956845 + 1.3032 3.226 -2.00016 0.179543 -0.063667 -0.981688 + 1.50006 2.89604 -0.702459 0.755571 -0.327893 -0.567096 + 1.40656 2.74411 -0.750897 0.231851 -0.214789 -0.948742 + 1.46196 2.7255 -0.700868 0.551622 -0.228435 -0.802204 + 1.33797 2.62378 -0.735288 0.155368 -0.278657 -0.94774 + 1.56896 3.04128 -0.69341 0.88533 -0.232284 -0.402783 + 1.61028 3.04066 -0.617947 0.802329 -0.119395 -0.584819 + 1.55546 2.87743 -0.65243 0.715171 -0.17481 -0.676736 + 1.61437 3.23854 -0.641875 0.890541 -0.182957 -0.41649 + 1.65569 3.23792 -0.566404 0.78743 -0.254906 -0.561229 + 1.67628 3.06941 -0.545148 0.726877 -0.0537266 -0.684663 + 1.62146 2.9061 -0.57968 0.718332 -0.110391 -0.686886 + 1.58849 3.30425 -0.777901 0.914292 -0.357275 0.190853 + 1.65737 3.38525 -0.628392 0.881303 -0.268859 -0.388612 + 1.72476 3.28224 -0.500178 0.733933 -0.0961806 -0.672378 + 1.74536 3.11365 -0.478972 0.67637 -0.0304491 -0.735933 + 1.70671 3.54272 -0.695131 0.871358 -0.468821 0.144717 + 1.77531 3.6815 -0.637106 0.884812 -0.462439 0.0570738 + 1.72597 3.52404 -0.570377 0.876903 -0.288922 -0.384143 + 1.79986 3.5921 -0.782469 0.615243 -0.491472 0.616386 + 1.86474 3.76767 -0.713957 0.663508 -0.494972 0.561035 + 1.84051 3.81505 -0.596833 0.861095 -0.504246 0.0652007 + 2.07039 3.82544 -0.818829 0.525064 -0.324806 0.786644 + 1.92994 3.90122 -0.673683 0.759256 -0.400809 0.512721 + 1.94943 4.01599 -0.560873 0.89014 -0.44434 -0.101061 + 1.95262 3.9314 -0.490156 0.811097 -0.424423 -0.402477 + 1.82365 3.76664 -0.537178 0.873063 -0.379806 -0.305792 + 2.14037 3.9084 -0.844915 0.519966 -0.226324 0.823658 + 1.97612 3.9831 -0.709897 0.775538 -0.28472 0.56345 + 1.99561 4.09788 -0.597096 0.902196 -0.430551 0.0258403 + 2.03259 4.06293 -0.415175 0.893177 -0.297131 -0.337561 + 2.03579 3.97842 -0.344398 0.861593 -0.0883979 -0.499843 + 2.20153 3.88538 -0.885041 0.352607 -0.269278 0.896191 + 2.13402 4.1046 -0.790138 0.520963 -0.339746 0.783052 + 2.0461 4.06606 -0.735983 0.618441 -0.330479 0.712962 + 2.02928 4.14695 -0.667097 0.75968 -0.528621 0.378743 + 2.03936 4.18336 -0.499351 0.917623 -0.374214 -0.133908 + 2.28373 3.89467 -0.903336 0.592753 -0.181143 0.784749 + 2.19518 4.08157 -0.830255 0.523382 -0.221904 0.822697 + 2.15099 4.25654 -0.721906 0.758773 -0.310386 0.572647 + 2.11721 4.18549 -0.721252 0.711338 -0.450945 0.539116 + 2.07304 4.23252 -0.569301 0.850339 -0.482751 0.209463 + 2.28801 3.69459 -0.970183 0.413654 -0.298851 0.859987 + 2.30531 3.92699 -0.930517 0.976263 0.101939 0.191098 + 2.22707 4.10422 -0.851082 0.721056 -0.093298 0.686567 + 2.18288 4.27918 -0.742733 0.833906 -0.111718 0.540482 + 2.31574 3.47529 -1.07374 0.87692 -0.128845 0.463045 + 2.32832 3.70336 -0.997166 0.960268 -0.0664704 0.271048 + 2.28632 3.94674 -0.972512 0.843449 0.245586 -0.477788 + 2.24854 4.17171 -0.91737 0.929195 0.261675 -0.261004 + 2.24864 4.13654 -0.878263 0.923726 0.0909507 0.3721 + 2.31565 3.27194 -1.12232 0.66785 -0.205359 0.715404 + 2.31988 3.32521 -1.13379 0.989768 -0.00581824 0.142569 + 2.31998 3.49107 -1.12188 0.888669 0.189445 -0.417587 + 2.30934 3.72318 -1.0391 0.77699 0.215255 -0.591568 + 2.2552 3.95093 -1.00678 0.405141 0.219637 -0.88748 + 2.32881 3.19885 -1.17333 0.823816 -0.0686056 0.562691 + 2.33304 3.25212 -1.1848 0.984546 0.104988 0.140167 + 2.33018 3.26569 -1.2177 0.91787 0.250287 -0.308011 + 2.32412 3.3409 -1.18198 0.943948 0.200673 -0.262091 + 2.26781 3.48799 -1.15554 0.408597 0.431151 -0.804461 + 2.3275 3.13582 -1.17017 0.671931 0.116824 0.731342 + 2.34791 3.10642 -1.19964 0.680376 0.194051 0.706705 + 2.34921 3.16953 -1.20275 0.921368 0.170262 0.349415 + 2.34636 3.18301 -1.2357 0.915542 0.285872 -0.28295 + 2.25961 3.25755 -1.32101 0.679149 0.4543 -0.576513 + 2.34847 3.02759 -1.15571 0.476697 0.44267 0.759476 + 2.37953 3.0253 -1.16654 0.465635 0.494731 0.733774 + 2.38695 3.07967 -1.21551 0.913632 0.392814 0.104758 + 2.31866 3.01833 -1.37227 0.830747 0.239178 -0.502646 + 2.27807 3.12168 -1.39247 0.814822 0.293371 -0.499998 + 2.39088 2.92679 -1.11191 0.284346 0.538619 0.793118 + 2.42194 2.92441 -1.12279 0.114789 0.646593 0.754149 + 2.41857 2.99846 -1.18245 0.866542 0.48193 0.129802 + 2.44091 2.84227 -1.04153 -0.237021 0.666068 0.70723 + 2.46684 2.86717 -1.05965 -0.190559 0.726383 0.660345 + 2.46885 2.93672 -1.12491 -0.138387 0.655284 0.742598 + 2.48508 2.80086 -0.963391 -0.378377 0.74819 0.545016 + 2.51101 2.82575 -0.98151 -0.340047 0.770053 0.539803 + 2.51375 2.87948 -1.06177 0.492291 0.844218 0.212004 + 2.48379 2.76838 -0.917348 -0.710214 0.417356 0.566931 + 2.52439 2.73342 -0.844986 -0.644861 0.43255 0.630123 + 2.52569 2.76589 -0.891029 -0.370329 0.735316 0.567598 + 2.552 2.7856 -0.893959 -0.394705 0.725965 0.56319 + 2.55657 2.85204 -0.988248 0.322281 0.935296 0.146135 + 2.44962 2.72882 -0.999425 -0.903528 -0.118642 0.411778 + 2.50149 2.68375 -0.894552 -0.912315 -0.144965 0.382971 + 2.538 2.62912 -0.825736 -0.850754 -0.123915 0.510747 + 2.57436 2.70811 -0.786946 -0.640341 0.399221 0.65619 + 2.60068 2.72773 -0.789934 -0.530689 0.609118 0.58936 + 2.53554 2.49671 -0.9262 -0.904868 -0.172496 0.389177 + 2.57205 2.442 -0.857433 -0.944306 -0.192886 0.266609 + 2.58797 2.60381 -0.767704 -0.882255 -0.0338123 0.469556 + 2.63265 2.58495 -0.671634 -0.796042 0.209686 0.567758 + 2.64759 2.66422 -0.691526 -0.617391 0.408196 0.672461 + 2.62735 2.77706 -0.803569 -0.610821 0.50002 0.613904 + 2.59777 2.35215 -0.858812 -0.794912 -0.551824 0.2522 + 2.5772 2.45282 -0.751176 -0.967617 -0.0713522 0.242127 + 2.62188 2.43396 -0.655106 -0.954579 0.0582228 0.292214 + 2.60292 2.36289 -0.752614 -0.753798 -0.632932 0.176596 + 2.61197 2.36466 -0.665269 -0.859328 -0.500528 0.105009 + 2.64071 2.41751 -0.577825 -0.865074 0.291459 0.408286 + 2.72643 2.48661 -0.533697 -0.677356 0.38995 0.623801 + 2.74137 2.56587 -0.553589 -0.678793 0.311168 0.665142 + 2.64821 2.34852 -0.75112 -0.12657 -0.984292 0.123079 + 2.65726 2.35028 -0.663776 -0.0882357 -0.994597 -0.0546845 + 2.6308 2.34821 -0.587988 -0.886231 -0.452376 -0.099749 + 2.62461 2.29891 -0.474391 -0.966054 0.234751 0.107849 + 2.6713 2.33883 -0.461941 -0.641501 0.594047 0.48537 + 2.66423 2.32665 -0.868442 0.40228 -0.913666 0.0581781 + 2.68265 2.34984 -0.755413 0.321865 -0.945319 0.052682 + 2.69973 2.35576 -0.656064 0.361262 -0.92819 -0.0891837 + 2.65478 2.33721 -0.59174 -0.145298 -0.935081 -0.323284 + 2.68909 2.3493 -0.878472 0.770395 -0.624307 -0.129355 + 2.71754 2.37223 -0.759195 0.746177 -0.661869 -0.0717628 + 2.73462 2.37815 -0.659845 0.711008 -0.684692 -0.1602 + 2.69726 2.3427 -0.584036 0.333435 -0.889399 -0.312715 + 2.65599 2.29595 -0.515472 -0.0595492 -0.822488 -0.565656 + 2.62716 2.384 -1.08077 0.877351 -0.262665 -0.401576 + 2.7039 2.38727 -0.910439 0.880404 -0.385332 -0.27642 + 2.73235 2.41021 -0.791162 0.93514 -0.318611 -0.154919 + 2.75386 2.42636 -0.691736 0.946918 -0.272978 -0.169795 + 2.75602 2.37044 -0.572693 0.674232 -0.674298 -0.301221 + 2.64252 2.47677 -1.10226 0.888004 -0.0482117 -0.4573 + 2.71926 2.48005 -0.931931 0.882656 0.335253 -0.329429 + 2.74077 2.4962 -0.832505 0.980408 0.0271144 -0.195102 + 2.77823 2.47099 -0.568038 0.987616 0.135624 -0.0788729 + 2.77526 2.41856 -0.604634 0.954101 -0.198244 -0.224478 + 2.64128 2.60297 -1.06884 0.875854 0.217192 -0.430937 + 2.53903 2.78753 -1.1267 0.832415 0.367805 -0.414493 + 2.58184 2.76009 -1.05317 0.83692 0.406029 -0.367021 + 2.63086 2.78461 -0.927457 0.806485 0.566707 -0.168599 + 2.6903 2.62741 -0.943175 0.92401 0.242122 -0.295944 + 2.72259 2.56669 -0.860208 0.956179 0.231644 -0.179059 + 2.43603 2.83347 -1.26568 0.831561 0.299208 -0.467954 + 2.46885 2.93672 -1.12491 0.844887 0.357665 -0.397795 + 2.79322 2.409 -0.417882 -0.730368 0.292555 0.617231 + 2.79322 2.409 -0.417882 0.995577 0.00890332 -0.0935304 + 2.79025 2.35658 -0.454487 0.935687 -0.281566 -0.212626 + 2.75511 2.32544 -0.485146 0.633574 -0.668455 -0.389553 + 2.69635 2.29778 -0.49643 0.372962 -0.776324 -0.508153 + 2.80482 2.30012 -0.301482 0.896726 -0.40283 -0.183331 + 2.7775 2.26562 -0.336527 0.814235 -0.518397 -0.261314 + 2.74236 2.23447 -0.367186 0.645912 -0.65418 -0.393504 + 2.68513 2.23031 -0.417569 0.41328 -0.727264 -0.547983 + 2.64477 2.22857 -0.436561 0.126321 -0.737578 -0.663342 + 2.77295 2.19257 -0.167609 0.892697 -0.445818 -0.0658623 + 2.74564 2.15807 -0.202654 0.781382 -0.588638 -0.207236 + 2.70354 2.14469 -0.271672 0.601803 -0.695448 -0.392665 + 2.64631 2.14052 -0.322056 0.462091 -0.736858 -0.49347 + 2.62055 2.15769 -0.36899 0.20344 -0.722506 -0.660755 + 2.77928 2.20864 -0.082238 0.984586 0.110243 0.135782 + 2.70267 2.07318 0.003376 0.836514 -0.547754 0.014477 + 2.6949 2.06228 -0.099938 0.767693 -0.627281 -0.131019 + 2.6528 2.0488 -0.168998 0.569824 -0.742112 -0.352945 + 2.57747 2.04533 -0.243775 0.226749 -0.82943 -0.51052 + 2.55172 2.0625 -0.290718 -0.351892 -0.666295 -0.657436 + 2.709 2.08926 0.088737 0.856384 -0.510245 0.0790959 + 2.63892 1.99185 0.107248 0.755261 -0.652355 0.0633558 + 2.63115 1.98094 0.00394 0.684966 -0.724785 -0.0742184 + 2.59691 1.97242 -0.081094 0.529917 -0.802109 -0.275335 + 2.76211 2.1813 0.071503 0.905551 0.287613 0.311858 + 2.7167 2.13753 0.17632 0.898473 0.237665 0.369136 + 2.6847 2.09356 0.268876 0.909643 -0.405524 0.0900051 + 2.677 2.04529 0.181292 0.818587 -0.573067 0.0388578 + 2.63136 1.99719 0.2026 0.722923 -0.685561 0.0859597 + 2.7715 2.24308 -0.168698 -0.275405 0.906716 0.319404 + 2.75433 2.21575 -0.014957 0.21925 0.951198 0.217145 + 2.72403 2.18316 0.102286 0.0398625 0.92883 0.368355 + 2.76861 2.29912 -0.301354 -0.223355 0.8396 0.495161 + 2.68124 2.21888 -0.191575 -0.231281 0.92765 0.293213 + 2.68391 2.19877 -0.072337 -0.266334 0.949399 0.166457 + 2.65361 2.16627 0.044948 -0.285331 0.934935 0.210909 + 2.67862 2.13939 0.207102 -0.00424041 0.996266 0.0862374 + 2.80482 2.30012 -0.301482 -0.0213744 0.837882 0.545433 + 2.75702 2.40792 -0.417813 -0.356776 0.698251 0.62061 + 2.67835 2.27482 -0.324272 -0.464578 0.825742 0.319871 + 2.57225 2.19177 -0.160632 -0.156026 0.980244 0.121564 + 2.57493 2.17175 -0.041352 -0.13483 0.96413 0.228636 + 2.79322 2.409 -0.417882 -0.0217758 0.77056 0.636995 + 2.63166 2.23499 -0.336672 -0.772075 0.630387 0.0807016 + 2.58701 2.17446 -0.264832 -0.78381 0.566506 -0.254388 + 2.54034 2.19516 -0.206485 -0.179878 0.933812 -0.309254 + 2.39313 2.16016 -0.026063 0.0860057 0.994129 0.0656515 + 2.62087 2.22263 -0.399276 -0.921776 0.387633 0.00839225 + 2.57622 2.1621 -0.327435 -0.910889 0.318364 -0.262537 + 2.52389 2.06481 -0.24912 -0.574172 -0.34192 -0.74392 + 2.47436 2.13853 -0.208818 -0.558872 0.310508 -0.768925 + 2.42769 2.15923 -0.150462 -0.448132 0.726509 -0.520925 + 2.63201 2.30695 -0.511721 -0.66717 -0.619317 -0.413922 + 2.62827 2.23067 -0.436606 -0.635642 -0.504043 -0.584722 + 2.60405 2.15979 -0.369034 -0.495276 -0.455891 -0.739503 + 2.52158 1.96885 -0.155921 0.213752 -0.812116 -0.542934 + 2.46026 1.99781 -0.192677 -0.286723 -0.4782 -0.83013 + 2.41073 2.07162 -0.152324 -0.429304 -0.0775828 -0.899822 + 2.35036 2.11422 -0.142509 -0.317898 0.250277 -0.914495 + 2.4752 1.90394 -0.065482 0.153994 -0.935207 -0.318862 + 2.41388 1.93289 -0.102239 -0.101387 -0.787323 -0.608147 + 2.34741 1.98765 -0.137876 -0.211049 -0.356109 -0.910299 + 2.28704 2.03016 -0.128111 -0.0725027 0.0370631 -0.996679 + 2.52785 1.90878 0.011527 0.323965 -0.942463 -0.082528 + 2.43748 1.90232 0.037117 -0.144141 -0.982497 0.118 + 2.38482 1.89739 -0.039944 -0.283936 -0.958485 -0.0262235 + 2.32532 1.93473 -0.091815 -0.28481 -0.833993 -0.472587 + 2.25885 1.98948 -0.127453 -0.366669 -0.608295 -0.70394 + 2.56209 1.91731 0.096564 0.424164 -0.904233 0.0494767 + 2.46552 1.90768 0.115641 -0.105461 -0.984845 0.137689 + 2.30984 1.9448 -0.010065 -0.341642 -0.939437 0.027197 + 2.26235 1.96594 -0.076878 -0.458021 -0.888087 -0.0389571 + 2.20285 2.00328 -0.128748 -0.300277 -0.684294 -0.664511 + 2.56499 1.93226 0.183852 0.436985 -0.892297 0.113354 + 2.62208 2.00313 0.305904 0.710348 -0.69746 0.0946306 + 2.66772 2.05132 0.284646 0.852719 -0.514268 0.0916429 + 2.68075 2.1021 0.367288 0.991928 0.067784 0.107161 + 2.66952 2.10925 0.515707 0.963936 0.238587 0.11791 + 2.65377 2.14534 0.36779 0.613387 0.789717 0.0101416 + 2.64254 2.15241 0.516157 0.765157 0.642382 -0.0433546 + 2.64936 2.17764 0.618455 0.835803 0.443509 -0.323624 + 2.69067 2.14011 0.697648 0.958104 0.0577956 -0.280527 + 2.67358 2.07899 0.647313 0.958496 -0.0365627 -0.282751 + 2.63114 2.14084 0.289597 0.123464 0.983379 -0.133126 + 2.54722 2.20302 0.444687 0.443546 0.878704 -0.176481 + 2.55403 2.22825 0.546984 0.691815 0.636579 -0.340822 + 2.68134 2.24606 0.776546 0.811488 0.410337 -0.416066 + 2.72266 2.20854 0.855739 0.941793 0.107823 -0.318435 + 2.55226 2.13436 0.203219 0.173224 0.975412 -0.136256 + 2.52459 2.19852 0.366494 0.329327 0.920197 -0.211615 + 2.4744 2.21408 0.359742 0.617685 0.68527 -0.385837 + 2.54716 2.2602 0.573062 0.858658 0.267007 -0.437508 + 2.59974 2.13291 0.120721 -0.124145 0.986088 0.110534 + 2.52106 2.13839 0.03443 -0.0365716 0.979023 0.200441 + 2.50208 2.14992 0.196468 0.292599 0.929108 -0.226149 + 2.34077 2.15746 0.061211 0.640804 0.767535 0.016146 + 2.46869 2.13569 0.121704 0.0926142 0.985538 -0.141904 + 2.43045 2.20281 0.262053 0.612645 0.694194 -0.377837 + 2.29868 2.23092 0.067564 0.712179 0.505665 -0.486932 + 2.39707 2.18859 0.187288 0.578834 0.703298 -0.412702 + 2.40148 2.26853 0.27863 0.855918 0.261603 -0.446058 + 2.23721 2.19597 -0.019299 0.475875 0.54311 -0.691791 + 2.26939 2.33052 0.091463 0.700012 0.215634 -0.680798 + 2.33965 2.40641 0.178006 0.821898 0.0280302 -0.568945 + 2.35498 2.26205 0.193641 0.849162 0.254372 -0.462839 + 2.28297 2.14801 -0.042428 0.0463855 0.823618 -0.565245 + 2.18137 2.18104 -0.066045 0.605212 0.452975 -0.654623 + 2.15423 2.26975 -0.072682 0.723278 0.152528 -0.673501 + 2.20792 2.29565 0.00465 0.76011 0.214829 -0.613255 + 2.36122 2.16345 -0.071967 -0.206332 0.976315 -0.0650779 + 2.34944 2.14371 -0.120982 -0.304404 0.780206 -0.546458 + 2.22713 2.133 -0.089233 0.105905 0.700789 -0.705464 + 2.22806 2.10343 -0.11081 0.108157 0.451318 -0.885784 + 2.11644 2.21114 -0.126378 0.731918 0.290401 -0.616411 + 2.21245 2.05762 -0.140074 0.293347 0.193593 -0.936199 + 2.15347 2.13089 -0.122772 0.617527 0.444233 -0.64909 + 2.04131 2.30483 -0.180655 0.322644 -0.040949 -0.945634 + 2.00494 2.38241 -0.200613 0.402568 -0.110055 -0.90875 + 2.0893 2.29985 -0.133016 0.705511 0.139444 -0.694845 + 2.11 2.13872 -0.166128 -0.223537 -0.273811 -0.935446 + 2.07835 2.22458 -0.177049 0.222904 -0.0150988 -0.974723 + 1.99528 2.25385 -0.159746 -0.159199 -0.427504 -0.889885 + 2.1564 2.07049 -0.153557 -0.269975 -0.424126 -0.864425 + 2.05462 2.14025 -0.122982 -0.620185 -0.543127 -0.566024 + 2.02297 2.22611 -0.133903 -0.311538 -0.629409 -0.71189 + 2.13094 2.03961 -0.057868 -0.623805 -0.751981 -0.213052 + 2.08449 2.10682 -0.082678 -0.60021 -0.740754 -0.301714 + 2.01921 2.08801 0.063897 0.192739 -0.952173 -0.237105 + 2.00431 2.06925 -0.007613 0.27448 -0.884077 -0.378244 + 1.97662 2.09698 -0.033448 0.181554 -0.809946 -0.557697 + 2.15662 2.01839 0.009485 -0.53482 -0.844965 -0.00153331 + 2.06277 2.09659 0.177241 0.0345612 -0.98921 0.142371 + 2.04908 2.05457 0.10421 0.114904 -0.992838 -0.0327054 + 1.96677 2.02569 0.223428 0.477653 -0.864619 0.155825 + 1.95187 2.00685 0.151867 0.291033 -0.949605 -0.116403 + 2.08845 2.07537 0.244596 -0.561086 -0.802972 -0.201041 + 1.98985 2.08774 0.344357 0.133315 -0.991069 -0.00316876 + 1.97616 2.04573 0.271322 0.57649 -0.770898 0.270878 + 1.85216 2.01488 0.387357 0.22185 -0.975078 -0.00215842 + 1.86155 2.03492 0.43525 0.595665 -0.802821 0.0257183 + 1.82237 2.0239 0.372133 -0.209197 -0.925756 -0.314981 + 1.92207 2.01587 0.136644 -0.285996 -0.923519 -0.255575 + 1.96388 2.12008 -0.102051 0.383241 -0.669611 -0.636198 + 1.9589 2.33142 -0.179704 0.157719 -0.352588 -0.922392 + 1.90933 2.03897 0.06804 -0.0732252 -0.965012 -0.251771 + 1.88992 2.05432 0.003641 -0.0878354 -0.908832 -0.407811 + 1.92201 2.1794 -0.143392 0.0832893 -0.543582 -0.835214 + 1.91703 2.39073 -0.221035 0.219575 -0.241535 -0.945224 + 1.98115 2.45802 -0.212777 0.327904 -0.0646981 -0.942493 + 1.78673 2.07109 0.246399 0.191047 -0.979735 0.0601637 + 1.77158 2.02597 0.179548 0.487079 -0.873037 0.0236991 + 1.84277 2.10366 -0.031417 -0.0444197 -0.853981 -0.518405 + 1.87486 2.22874 -0.178448 0.13811 -0.510781 -0.848545 + 1.73583 2.03045 0.142995 0.460923 -0.870142 -0.174365 + 1.80703 2.10814 -0.067965 -0.0507253 -0.767378 -0.639185 + 1.81538 2.28023 -0.219246 -0.14234 -0.458795 -0.877067 + 1.84323 2.43208 -0.244655 0.335595 -0.220068 -0.91594 + 1.90735 2.49937 -0.236397 0.319533 -0.295997 -0.900158 + 1.77436 2.17638 -0.086369 -0.272964 -0.631253 -0.725955 + 1.78271 2.34839 -0.23769 -0.00108266 -0.490935 -0.871196 + 1.78375 2.48358 -0.285453 0.530831 -0.422237 -0.734802 + 1.85647 2.54302 -0.277405 0.425011 -0.439625 -0.791262 + 2.06646 2.47435 -0.164459 0.558592 -0.0959796 -0.823871 + 2.06551 2.37554 -0.14513 0.632379 -0.019087 -0.774424 + 1.73552 2.35858 -0.256944 -0.345065 -0.632219 -0.693707 + 1.71636 2.46933 -0.339962 0.366166 -0.430568 -0.824944 + 1.78909 2.52885 -0.331856 0.473067 -0.45834 -0.752418 + 1.66918 2.47952 -0.359216 0.248827 -0.632041 -0.7339 + 1.72547 2.55667 -0.373052 0.397253 -0.410256 -0.820902 + 1.96138 2.55454 -0.257564 0.492616 -0.264569 -0.829055 + 2.01559 2.518 -0.205467 0.463192 -0.337747 -0.819378 + 1.59493 2.48724 -0.400794 -0.120042 -0.851474 -0.510472 + 1.65122 2.5644 -0.41463 0.436506 -0.305601 -0.84621 + 1.89776 2.58237 -0.29876 0.443604 -0.112468 -0.889138 + 2.07411 2.58682 -0.186068 0.619794 -0.161113 -0.768048 + 1.64313 2.46621 -0.302767 -0.150048 -0.900168 -0.40888 + 1.53613 2.52362 -0.437803 -0.149909 -0.833341 -0.532042 + 1.56169 2.57668 -0.468498 0.378568 -0.409723 -0.829948 + 1.83671 2.6434 -0.321467 0.464005 -0.00484815 -0.885819 + 1.47384 2.56861 -0.483722 0.0647009 -0.740861 -0.668535 + 1.49939 2.62158 -0.514475 0.196966 -0.887411 -0.416781 + 1.74718 2.65567 -0.375326 0.59154 -0.453897 -0.666376 + 1.97576 2.71731 -0.247687 0.489134 -0.00884625 -0.872164 + 2.03681 2.65629 -0.224989 0.544192 0.00825355 -0.83892 + 1.47007 2.61951 -0.553496 0.329449 -0.634657 -0.699052 + 1.68026 2.62964 -0.442434 0.293168 -0.955949 0.0146108 + 1.85564 2.74393 -0.352592 0.676137 -0.38411 -0.628728 + 1.92255 2.76996 -0.285484 0.622414 -0.341049 -0.704476 + 1.65093 2.62757 -0.481455 0.438934 -0.873153 -0.21199 + 1.78511 2.74542 -0.40958 0.648768 -0.141008 -0.747808 + 1.98228 2.94105 -0.25362 0.557283 0.0576714 -0.828317 + 2.06155 2.88886 -0.219218 0.533516 0.0293455 -0.845281 + 2.11476 2.83612 -0.18147 0.61413 -0.0603336 -0.786895 + 1.58602 2.58657 -0.536845 -0.330109 -0.535194 0.777557 + 1.3001 2.61612 -0.639218 0.158389 -0.744872 0.648134 + 1.49586 2.56716 -0.58981 0.251919 -0.959865 0.123272 + 1.42854 2.55889 -0.649095 0.411288 -0.808744 -0.420446 + 1.57837 2.67193 -0.59068 0.656824 -0.297302 -0.69296 + 1.6457 2.68019 -0.531396 0.674596 -0.346656 -0.651728 + 1.72019 2.70443 -0.464969 0.718341 -0.33754 -0.608319 + 1.58602 2.58657 -0.536845 0.545597 -0.114853 -0.83014 + 1.38816 2.56512 -0.686883 0.338592 -0.644105 -0.685918 + 1.51214 2.66684 -0.652472 0.611047 -0.308178 -0.729142 + 1.68768 2.91127 -0.51784 0.673445 -0.0674876 -0.73615 + 1.76571 2.93102 -0.450034 0.669853 -0.0675107 -0.739419 + 1.84021 2.95533 -0.383549 0.689191 -0.0886898 -0.719132 + 2.1422 2.46302 -0.099236 0.729548 -0.141788 -0.669071 + 2.14124 2.36422 -0.079906 0.742069 -0.0321544 -0.669552 + 2.12832 2.55027 -0.13397 0.709349 -0.0465191 -0.70332 + 2.19766 2.49044 -0.027537 0.816983 -0.128346 -0.562197 + 2.19493 2.39012 -0.002574 0.819446 -0.0415006 -0.571652 + 2.18378 2.5777 -0.062271 0.78814 -0.140912 -0.599149 + 2.2479 2.5128 0.042531 0.820571 -0.153507 -0.550544 + 2.24517 2.41248 0.067503 0.806741 -0.0430421 -0.589335 + 2.17394 2.66979 -0.105973 0.744964 -0.0918837 -0.660746 + 2.25661 2.70147 -0.002845 0.79699 -0.149316 -0.585245 + 2.26645 2.60929 0.040805 0.811439 -0.174013 -0.55793 + 2.31542 2.48829 0.153996 0.689504 -0.100045 -0.717339 + 2.13664 2.73934 -0.144843 0.663402 -0.0794197 -0.744037 + 2.24246 2.81351 -0.048503 0.765735 -0.118426 -0.63216 + 2.35465 2.74652 0.130519 0.834302 -0.146591 -0.531461 + 2.33397 2.58486 0.15232 0.826652 -0.140575 -0.544872 + 2.22058 2.91029 -0.08513 0.727762 -0.036209 -0.684873 + 2.30051 2.97377 0.008911 0.791971 -0.0317916 -0.609731 + 2.3405 2.85856 0.084861 0.82764 -0.101053 -0.552087 + 2.41569 2.92662 0.189185 0.853095 -0.0861966 -0.514587 + 2.43035 2.76938 0.249128 0.86287 -0.144026 -0.48447 + 2.16776 3.0049 -0.139603 0.62296 0.0553234 -0.780295 + 2.24769 3.06839 -0.04557 0.731941 0.0314938 -0.68064 + 2.31727 3.15669 0.028492 0.77088 0.0143478 -0.636819 + 2.3757 3.04183 0.113235 0.829544 -0.0391125 -0.55707 + 2.08849 3.05709 -0.174005 0.543878 0.0537137 -0.837443 + 2.18174 3.16605 -0.10933 0.658782 0.0528224 -0.750477 + 2.25132 3.25444 -0.035226 0.704798 0.0233697 -0.709023 + 2.00248 3.10754 -0.242777 0.658333 -0.0938043 -0.746859 + 2.09573 3.2165 -0.178102 0.636156 -0.0218363 -0.771251 + 2.14051 3.33694 -0.144314 0.67452 -0.012615 -0.738148 + 2.28491 3.35096 0.002008 0.762419 0.0577815 -0.644499 + 1.91175 2.94255 -0.310608 0.664754 -0.0562678 -0.744941 + 1.93094 3.12032 -0.315726 0.676071 -0.0459393 -0.735403 + 1.9646 3.24855 -0.283013 0.649527 -0.0104225 -0.760267 + 2.00939 3.36899 -0.249225 0.65077 -0.0521406 -0.757483 + 1.82339 3.13348 -0.411117 0.664302 -0.0175406 -0.747258 + 1.85705 3.26162 -0.378462 0.667157 -0.0338128 -0.744149 + 1.89281 3.42958 -0.364967 0.671593 -0.0810416 -0.736475 + 2.05219 3.5238 -0.228167 0.699825 -0.0415494 -0.713105 + 2.1741 3.43345 -0.107079 0.718241 0.0416658 -0.694546 + 1.76052 3.45011 -0.486733 0.770802 -0.147746 -0.619705 + 1.93562 3.58438 -0.343901 0.698702 -0.124206 -0.704549 + 2.05642 3.6944 -0.238661 0.733739 -0.11795 -0.669114 + 2.13928 3.60563 -0.129109 0.747983 -0.0367563 -0.6627 + 2.26119 3.51529 -0.008028 0.775921 0.162528 -0.609534 + 1.8582 3.6928 -0.453484 0.761915 -0.218033 -0.609874 + 1.979 3.80282 -0.348244 0.728048 -0.218968 -0.649614 + 2.2237 3.73838 -0.061223 0.756632 -0.109457 -0.644614 + 2.30656 3.64969 0.04838 0.775991 -0.159366 -0.610279 + 2.36045 3.55681 0.151055 0.820168 0.00568968 -0.572095 + 1.93576 3.88298 -0.430492 0.718831 -0.507093 -0.47554 + 2.15021 3.81314 -0.163911 0.75771 -0.171942 -0.629532 + 2.29439 3.94375 -0.001943 0.799453 -0.0889737 -0.594104 + 2.36788 3.86899 0.100744 0.81727 -0.0560707 -0.57352 + 2.42075 3.77541 0.197428 0.842863 -0.0853154 -0.531322 + 2.10696 3.8933 -0.246158 0.769274 -0.176576 -0.614034 + 2.24075 4.03992 -0.09271 0.793767 -0.0897396 -0.601565 + 2.42688 4.18807 0.142888 0.851078 -0.090122 -0.517246 + 2.46344 4.08564 0.234104 0.859779 -0.0734938 -0.50535 + 2.51631 3.99197 0.330737 0.860001 -0.0464279 -0.508175 + 2.16957 4.12504 -0.190949 0.799653 -0.109481 -0.590397 + 2.37324 4.28423 0.052122 0.827923 -0.0756678 -0.555713 + 2.47784 4.52184 0.207375 0.883496 -0.0131345 -0.468256 + 2.5216 4.41592 0.286831 0.884281 -0.0259611 -0.466233 + 2.55816 4.3135 0.378037 0.885542 -0.0526453 -0.461567 + 2.13786 4.23703 -0.268518 0.866291 -0.227695 -0.44463 + 2.34308 4.40835 -0.01565 0.844415 -0.0961144 -0.526997 + 2.44768 4.64596 0.139603 0.884656 0.0187437 -0.465867 + 2.54224 4.74606 0.357013 0.906903 0.105023 -0.408041 + 2.586 4.64014 0.436469 0.892505 0.0860047 -0.442762 + 2.14463 4.35754 -0.352645 0.926542 -0.216957 -0.307328 + 2.31137 4.52042 -0.093169 0.866354 -0.073893 -0.493933 + 2.40095 4.75493 0.063448 0.890888 0.0414994 -0.452323 + 2.48569 4.84565 0.275923 0.898858 0.143565 -0.414057 + 2.10681 4.30357 -0.569965 0.944924 -0.28984 0.152024 + 2.13134 4.47389 -0.427379 0.973045 -0.158952 -0.167088 + 2.27085 4.63874 -0.164498 0.894784 -0.0543149 -0.443184 + 2.36043 4.87316 -0.00793 0.887318 0.0862932 -0.453013 + 2.43896 4.95463 0.199769 0.912753 0.166223 -0.373164 + 2.13782 4.43884 -0.629461 0.980683 -0.0642449 0.184751 + 2.16234 4.60916 -0.486875 0.973389 -0.0749846 -0.216544 + 2.25756 4.75509 -0.239223 0.93838 -0.0194372 -0.345058 + 2.30296 4.96977 -0.093867 0.90418 0.115896 -0.411128 + 2.19346 4.36427 -0.7931 0.965098 0.126119 0.229522 + 2.1484 4.52392 -0.679827 0.984557 0.0944007 0.147428 + 2.13064 4.7121 -0.564763 0.977112 0.0765348 -0.19848 + 2.2028 4.84339 -0.336761 0.922989 0.0950288 -0.372909 + 2.2482 5.05807 -0.191405 0.875215 0.205219 -0.438045 + 2.19335 4.39952 -0.832166 0.969171 0.244961 -0.0264674 + 2.12695 4.65774 -0.736409 0.961873 0.244117 -0.123321 + 2.10918 4.84592 -0.621343 0.903046 0.253359 -0.346866 + 2.17109 4.94632 -0.414649 0.912672 0.201131 -0.355776 + 2.17387 5.1368 -0.282967 0.840234 0.298315 -0.452786 + 2.15185 4.49786 -0.87628 0.939317 0.299347 -0.167557 + 2.08545 4.75607 -0.780523 0.871822 0.415455 -0.259467 + 2.03206 4.93082 -0.7006 0.790891 0.414522 -0.450181 + 2.08717 5.00564 -0.514393 0.815822 0.368693 -0.445533 + 2.08995 5.19612 -0.382712 0.789791 0.359419 -0.49704 + 2.21742 4.1759 -0.951634 0.835344 0.251404 -0.488872 + 2.17726 4.38166 -0.952832 0.952819 0.23426 -0.193026 + 2.09335 4.67413 -0.890592 0.854799 0.421801 -0.30233 + 1.98499 4.84801 -0.845362 0.756128 0.517099 -0.401099 + 1.9316 5.02276 -0.765438 0.703633 0.471571 -0.531528 + 2.19199 4.18336 -1.01116 0.713774 0.109885 -0.691702 + 2.15183 4.38913 -1.01236 0.833741 0.260787 -0.486689 + 2.08058 4.50017 -1.05329 0.740992 0.287426 -0.606892 + 2.11876 4.55803 -0.967101 0.86123 0.338772 -0.378835 + 1.9959 4.7827 -0.94005 0.72393 0.539124 -0.43043 + 2.1757 3.92894 -1.00148 0.188805 0.122559 -0.974337 + 2.12779 3.92912 -1.0268 0.48462 0.06873 -0.872021 + 2.14408 4.18354 -1.03648 0.496091 -0.0212207 -0.868011 + 2.12014 4.34516 -1.06081 0.662663 0.046567 -0.747468 + 2.25716 3.7201 -1.07276 0.190899 0.30479 -0.933092 + 2.17766 3.69811 -1.06748 0.0745438 0.343137 -0.936323 + 2.10814 3.70056 -1.08372 0.352806 0.321139 -0.878861 + 2.09368 3.92411 -1.04812 0.215585 0.0446019 -0.975466 + 2.15277 3.49152 -1.19185 0.237933 0.547742 -0.802101 + 2.08324 3.49396 -1.20809 0.390461 0.567218 -0.725123 + 2.03674 3.52417 -1.2188 0.205763 0.679839 -0.703904 + 2.07403 3.69546 -1.10509 0.131744 0.40823 -0.903323 + 2.25356 3.33286 -1.28525 0.520445 0.462624 -0.717716 + 2.13852 3.33639 -1.32156 0.474176 0.653367 -0.590143 + 2.04657 3.34112 -1.43756 0.650325 0.64725 -0.397673 + 2.02722 3.40521 -1.36935 0.549537 0.694587 -0.464282 + 2.12598 3.21637 -1.55647 0.672972 0.560008 -0.483218 + 2.03403 3.22111 -1.67248 0.638922 0.568877 -0.517838 + 1.98168 3.22667 -1.72912 0.725695 0.44367 -0.525855 + 1.94243 3.33731 -1.68535 0.7295 0.535439 -0.425599 + 1.92308 3.40147 -1.61709 0.654967 0.659739 -0.36846 + 1.90506 3.21602 -1.84167 0.595112 0.370107 -0.713346 + 1.81518 3.23462 -1.87768 0.404401 0.31082 -0.860146 + 1.79251 3.29908 -1.86053 0.435239 0.485815 -0.757991 + 1.86581 3.32674 -1.79784 0.557168 0.540749 -0.630202 + 1.83363 3.39129 -1.76046 0.436406 0.713703 -0.547884 + 1.9152 3.43695 -1.56133 0.389217 0.897077 -0.209196 + 1.68929 3.21364 -1.93175 0.26303 -0.129465 -0.956062 + 1.68544 3.26274 -1.93739 0.387176 0.119901 -0.914177 + 1.66277 3.3272 -1.92024 0.478758 0.511757 -0.713369 + 1.76033 3.36363 -1.82314 0.360017 0.675397 -0.643604 + 1.49576 3.28867 -1.9863 0.125192 -0.279595 -0.951921 + 1.49191 3.33776 -1.99193 0.203632 -0.172483 -0.963734 + 1.49567 3.38455 -2.00338 0.376293 0.248437 -0.892571 + 1.4769 3.4259 -1.974 0.340544 0.874706 -0.344848 + 1.644 3.36855 -1.89087 0.402154 0.723094 -0.561611 + 1.33921 3.31982 -2.00306 0.0694265 -0.282559 -0.956734 + 1.34711 3.35336 -2.01996 -0.0106783 -0.386564 -0.922201 + 1.35098 3.38003 -2.02934 0.0591444 -0.279377 -0.958358 + 1.35474 3.42673 -2.04084 0.132508 0.383839 -0.913843 + 1.28209 3.29816 -2.00954 0.182039 -0.0719823 -0.980653 + 1.21141 3.39852 -2.02938 0.113984 -0.260802 -0.95864 + 1.21528 3.4251 -2.03882 0.132837 0.343165 -0.929834 + 1.21849 3.44081 -2.01302 0.103066 0.899404 -0.424794 + 1.35795 3.44244 -2.01504 0.114224 0.947508 -0.298632 + 1.1188 3.26806 -2.04562 0.341523 -0.0242842 -0.93956 + 1.15429 3.37695 -2.03582 0.298403 -0.215147 -0.929875 + 1.04122 3.27733 -2.08167 0.430542 -0.205054 -0.878969 + 1.07671 3.38622 -2.07188 0.431787 -0.0470074 -0.90075 + 0.983008 3.23697 -2.08837 0.254391 -0.358082 -0.898367 + 0.97195 3.33475 -2.15373 0.454453 -0.14448 -0.878975 + 0.945587 3.3738 -2.16275 0.139275 0.337838 -0.930843 + 1.05035 3.42518 -2.08095 0.347749 0.418256 -0.839126 + 0.98818 3.1422 -2.07001 0.230539 -0.116354 -0.966082 + 0.843467 3.22363 -2.09885 0.167231 -0.254299 -0.952557 + 0.913735 3.29439 -2.16042 0.0756546 -0.445483 -0.892088 + 0.887221 3.33249 -2.16981 -0.362102 0.0797176 -0.928723 + 0.935487 3.43206 -2.11846 0.0676357 0.560195 -0.825595 + 0.934466 2.91554 -2.08703 0.430653 0.110974 -0.895669 + 0.848639 3.12885 -2.08049 0.353131 -0.0254059 -0.935229 + 0.816953 3.26172 -2.10824 -0.367019 -0.0012002 -0.930213 + 0.877121 3.39075 -2.12552 -0.415379 0.373403 -0.829476 + 0.85133 2.46952 -2.4015 0.862951 0.265682 -0.429801 + 0.849243 2.29637 -2.54819 0.807398 0.432155 -0.401686 + 0.818076 2.32609 -2.59188 0.808228 0.418766 -0.414007 + 0.877783 2.22032 -2.58847 0.801398 0.474667 -0.363941 + 0.851235 2.13087 -2.76174 0.766622 0.493752 -0.410486 + 0.816371 2.15362 -2.79594 0.756566 0.50377 -0.416923 + 0.807259 2.10921 -2.87383 0.829617 0.434969 -0.350053 + 0.932255 2.02172 -2.75308 0.791971 0.450252 -0.412377 + 0.879776 2.05483 -2.80203 0.745879 0.47917 -0.462666 + 0.83271 2.03751 -2.89384 0.796911 0.429877 -0.424428 + 0.746748 2.17122 -2.93763 0.726052 0.505953 -0.465681 + 0.957339 2.00159 -2.71642 0.882347 0.379622 -0.278119 + 0.943743 1.95252 -2.79183 0.813502 0.37476 -0.444713 + 0.891264 1.98563 -2.84077 0.589267 -0.307134 -0.747284 + 0.976666 1.92511 -2.73795 0.908901 0.308609 -0.280464 + 0.772199 2.09951 -2.95763 0.794364 0.407588 -0.450398 + 0.745388 2.12484 -2.9707 0.652646 0.418271 -0.631746 + 0.711933 2.12546 -3.00077 0.519362 -0.323774 -0.790844 + 0.640049 2.12566 -3.02751 0.400574 -0.144019 -0.904875 + 0.61934 2.10536 -3.02356 0.555988 -0.321682 -0.766419 + 0.61008 2.09215 -3.03068 0.631621 -0.181779 -0.753665 + 0.598376 2.08982 -3.03804 0.0815207 -0.310188 -0.947174 + 0.588527 2.10963 -3.04155 0.728356 0.248811 -0.638429 + 0.679143 2.09519 -2.95214 0.56536 -0.725893 -0.391724 + 0.658435 2.0749 -2.94819 0.71944 -0.477175 -0.504688 + 0.643091 2.04482 -2.95809 0.822419 -0.282537 -0.493761 + 0.633831 2.03161 -2.96522 0.786452 -0.33594 -0.518302 + 0.70134 2.1124 -2.93695 0.482688 -0.831769 -0.274175 + 0.706703 2.08199 -2.88367 0.556804 -0.624279 -0.547947 + 0.684506 2.06486 -2.89881 0.73812 -0.499445 -0.453579 + 0.671639 2.04904 -2.90701 0.824072 -0.361371 -0.436252 + 0.656295 2.01888 -2.91696 0.848419 -0.344976 -0.401468 + 0.745388 2.12484 -2.9707 -0.105507 -0.985152 -0.135438 + 0.734795 2.11178 -2.90688 0.184212 -0.897888 -0.39983 + 0.723426 2.08469 -2.87455 0.318083 -0.661349 -0.679295 + 0.683922 2.01546 -2.85125 0.636825 -0.589376 -0.497082 + 0.671055 1.99973 -2.8594 0.814312 -0.545859 -0.197317 + 0.766295 2.10833 -2.8953 -0.326633 -0.876409 -0.353862 + 0.754926 2.08123 -2.86297 0.0371263 -0.679432 -0.732798 + 0.700645 2.01817 -2.84213 0.322544 -0.57093 -0.754986 + 0.772199 2.09951 -2.95763 -0.706113 -0.706894 0.0413043 + 0.793106 2.08309 -2.88218 -0.608152 -0.721755 -0.330486 + 0.771606 2.06407 -2.84745 -0.0984308 -0.641747 -0.760574 + 0.717325 2.00101 -2.82661 0.193981 -0.528656 -0.826374 + 0.83271 2.03751 -2.89384 -0.748264 -0.618737 -0.239301 + 0.811958 2.03572 -2.84774 -0.589538 -0.643534 -0.488168 + 0.790458 2.01671 -2.81301 -0.0403747 -0.617337 -0.785662 + 0.794947 1.99192 -2.79688 0.00616252 -0.487049 -0.873353 + 0.721814 1.97613 -2.81053 0.173875 -0.479318 -0.860245 + 0.846357 1.99908 -2.85287 -0.995004 -0.0687249 0.0724176 + 0.825605 1.99729 -2.80678 -0.633736 -0.413234 -0.653924 + 0.78705 1.9583 -2.78003 0.00757615 -0.409941 -0.91208 + 0.780231 1.9333 -2.76934 -0.00211998 -0.356229 -0.934396 + 0.714996 1.95114 -2.79984 0.0717885 -0.542636 -0.836895 + 0.683296 1.9433 -2.78645 -0.079781 -0.848488 -0.523167 + 0.817707 1.96366 -2.78993 -0.654148 -0.163456 -0.738494 + 0.811185 1.93751 -2.78023 -0.690024 -0.0724013 -0.720156 + 0.768366 1.89371 -2.75537 -0.0197988 -0.739615 -0.672739 + 0.736666 1.88587 -2.74199 -0.165716 -0.850028 -0.499991 + 0.839834 1.97284 -2.84323 -0.957504 0.152359 -0.244894 + 0.799319 1.89792 -2.76627 -0.0716306 -0.696446 -0.714025 + 0.808198 1.87303 -2.70255 0.247209 -0.952377 -0.17851 + 0.756233 1.86791 -2.70109 -0.0602847 -0.982099 -0.17846 + 0.654392 1.90403 -2.71624 -0.150379 -0.886649 -0.43731 + 0.83271 2.03751 -2.89384 -0.69545 0.393795 0.601062 + 0.642788 1.97122 -2.85022 0.53712 -0.840362 -0.0727665 + 0.66024 1.98387 -2.86694 0.707074 -0.697049 -0.119032 + 0.64548 2.00311 -2.92446 0.795927 -0.435207 -0.420828 + 0.573469 1.94957 -2.85811 0.303614 -0.910307 -0.281355 + 0.614905 1.97986 -2.91918 0.284136 -0.891277 -0.3534 + 0.632357 1.99251 -2.93589 0.500886 -0.719912 -0.480458 + 0.620708 2.02101 -2.97665 0.638933 -0.480235 -0.600949 + 0.52042 1.93869 -2.87167 0.261246 -0.750124 -0.607507 + 0.54074 1.94898 -2.8761 0.208281 -0.856071 -0.473034 + 0.582176 1.97927 -2.93717 0.146442 -0.866962 -0.476373 + 0.609004 2.01859 -2.98406 0.334369 -0.65819 -0.674525 + 0.504744 1.95583 -2.89736 0.0657213 -0.784127 -0.617111 + 0.561231 1.9846 -2.94719 0.00479849 -0.827016 -0.562158 + 0.588059 2.02391 -2.99407 -0.0529281 -0.592872 -0.803555 + 0.57821 2.04381 -2.99755 -0.511442 -0.268182 -0.816398 + 0.588527 2.10963 -3.04155 -0.799168 -0.326007 -0.505025 + 0.484424 1.94553 -2.89293 0.0698482 -0.507247 -0.858966 + 0.44583 1.96623 -2.90117 -0.0076664 -0.382206 -0.924045 + 2.67151 2.02914 0.71846 0.99686 0.0589322 -0.0528951 + 2.6886 2.09035 0.768845 0.943737 -0.200669 -0.262855 + 2.73773 2.11713 0.891059 0.950885 -0.00242421 -0.309534 + 2.76974 2.25956 1.00996 0.948322 0.0343029 -0.31545 + 2.84566 2.22835 1.24362 0.940422 -0.003093 -0.339996 + 2.91431 2.40647 1.3995 0.948849 -0.0790274 -0.305681 + 2.93623 2.33865 1.51157 0.964898 -0.0674303 -0.253821 + 2.73842 2.35373 0.931246 0.894006 0.174965 -0.412481 + 2.81256 2.32573 1.13535 0.938734 -0.0297848 -0.343353 + 2.88121 2.50385 1.29123 0.936162 -0.0799716 -0.342353 + 2.99463 2.69059 1.5504 0.959938 -0.0896236 -0.265495 + 3.01655 2.62285 1.66252 0.979102 -0.125827 -0.159772 + 2.67447 2.278 0.802623 0.720593 0.411058 -0.558369 + 2.68578 2.38143 0.851482 0.888723 0.0336841 -0.457206 + 2.78124 2.41982 1.05658 0.92132 -0.0243742 -0.38804 + 2.85952 2.61477 1.20352 0.925873 -0.0842115 -0.36833 + 2.98441 2.8109 1.47462 0.955422 -0.0749462 -0.285574 + 2.62183 2.30578 0.72291 0.877114 0.0831774 -0.473025 + 2.64802 2.47483 0.752111 0.900968 -0.0820684 -0.426053 + 2.75872 2.54239 0.975685 0.911529 -0.0870234 -0.401923 + 2.837 2.73734 1.12262 0.92231 -0.092091 -0.375318 + 2.96272 2.92172 1.38686 0.945961 -0.0635739 -0.317986 + 2.51401 2.31489 0.503919 0.910713 0.03266 -0.411745 + 2.58868 2.36048 0.653766 0.895251 -0.056553 -0.441959 + 2.60116 2.6108 0.624196 0.898823 -0.110475 -0.424161 + 2.72096 2.63579 0.876314 0.906586 -0.104319 -0.408925 + 2.81207 2.84551 1.03226 0.921419 -0.109802 -0.372733 + 2.46937 2.34416 0.416232 0.86826 0.038163 -0.49464 + 2.54182 2.49645 0.525852 0.888207 -0.0924309 -0.45005 + 2.58091 2.74515 0.544287 0.887911 -0.121179 -0.443767 + 2.7072 2.76244 0.798548 0.906629 -0.127132 -0.40232 + 2.79831 2.97216 0.954499 0.920891 -0.101816 -0.376288 + 2.44543 2.27979 0.37632 0.718057 0.275031 -0.639337 + 2.41009 2.47716 0.302859 0.871211 -0.0786243 -0.484571 + 2.49718 2.52572 0.438165 0.86603 -0.0963212 -0.490626 + 2.38615 2.4128 0.262939 0.879806 -0.00167563 -0.475331 + 2.40968 2.60772 0.270929 0.857919 -0.13133 -0.496717 + 2.49677 2.65618 0.406191 0.867706 -0.125355 -0.481013 + 2.49429 2.81905 0.355288 0.875115 -0.120078 -0.468781 + 2.57843 2.90803 0.493386 0.884851 -0.103434 -0.454246 + 2.68696 2.89679 0.71864 0.901603 -0.106367 -0.419283 + 2.76845 3.07492 0.860518 0.915697 -0.0827831 -0.39325 + 2.47963 2.97629 0.295346 0.874121 -0.0784305 -0.479333 + 2.54816 3.04584 0.411292 0.879667 -0.068648 -0.47061 + 2.66019 3.0171 0.63406 0.896749 -0.0848377 -0.434332 + 2.74168 3.19523 0.775939 0.909137 -0.063492 -0.411628 + 2.43931 3.14098 0.203898 0.850076 -0.0200171 -0.526279 + 2.50785 3.21052 0.319844 0.872276 0.00426763 -0.488996 + 2.62992 3.15491 0.551967 0.886977 -0.047584 -0.459356 + 2.70095 3.29493 0.677653 0.893638 -0.0326435 -0.447599 + 2.38088 3.25584 0.119155 0.815884 0.0478805 -0.57623 + 2.44382 3.3279 0.219741 0.842162 0.110341 -0.527815 + 2.58204 3.26134 0.460024 0.874376 0.00588322 -0.485214 + 2.65307 3.40136 0.58571 0.876219 -0.0151807 -0.481674 + 2.34785 3.42302 0.102595 0.821075 0.111012 -0.559921 + 2.51801 3.37872 0.359921 0.849225 0.0558676 -0.525068 + 2.59962 3.50006 0.490758 0.846312 0.012624 -0.532538 + 2.71706 3.58728 0.688875 0.893513 -0.0167451 -0.448725 + 2.76013 3.49468 0.787875 0.911009 -0.0178989 -0.411998 + 2.44711 3.46454 0.261678 0.828567 0.0508519 -0.557576 + 2.52873 3.58587 0.392516 0.83814 -0.000561049 -0.545455 + 2.66362 3.68599 0.593915 0.860778 -0.00734568 -0.508927 + 2.73856 3.90859 0.73135 0.907451 0.013409 -0.419944 + 2.77582 3.81861 0.830804 0.933799 0.00766403 -0.357717 + 2.47465 3.68253 0.300103 0.840074 -0.0545014 -0.539727 + 2.61642 3.79249 0.510856 0.857008 -0.0257027 -0.514662 + 2.69136 4.01509 0.648292 0.897292 -0.00604435 -0.441395 + 2.80241 4.17046 0.902182 0.942138 0.000324917 -0.335226 + 2.83967 4.08039 1.00158 0.957128 -0.00431602 -0.289633 + 2.56233 3.88914 0.418443 0.854671 -0.0401501 -0.517616 + 2.64914 4.11155 0.555025 0.884611 -0.0234189 -0.465741 + 2.77019 4.2544 0.796595 0.932967 -0.0158803 -0.359612 + 2.80234 4.48734 0.914338 0.955139 0.0781334 -0.285666 + 2.83456 4.40331 1.01987 0.964872 0.0541266 -0.257084 + 2.60312 4.21438 0.46731 0.877797 -0.0286857 -0.478173 + 2.72797 4.35094 0.703387 0.912857 0.00904089 -0.40818 + 2.76089 4.56788 0.813234 0.94214 0.0981501 -0.32053 + 2.79077 4.6899 0.98689 0.949499 0.214131 -0.229346 + 2.83173 4.63089 1.0977 0.960287 0.194486 -0.200061 + 2.68542 4.4429 0.6089 0.906319 0.0123005 -0.422416 + 2.71834 4.65985 0.718739 0.927165 0.125943 -0.352849 + 2.74932 4.77044 0.885785 0.943216 0.229901 -0.23977 + 2.7084 4.97785 0.998734 0.929402 0.336078 -0.152522 + 2.74616 4.90857 1.09554 0.931632 0.33578 -0.138975 + 2.64047 4.54202 0.519628 0.897385 0.0513165 -0.438255 + 2.66822 4.75083 0.630958 0.912169 0.15659 -0.378718 + 2.70037 4.857 0.796664 0.929584 0.255633 -0.265565 + 2.65944 5.06441 0.909622 0.923181 0.341067 -0.177232 + 2.61376 4.84895 0.547808 0.899669 0.176061 -0.399498 + 2.65025 4.94798 0.708883 0.921177 0.268123 -0.282034 + 2.61138 5.14084 0.817034 0.913574 0.348811 -0.209076 + 2.60005 5.27246 1.05447 0.916325 0.391651 -0.0834139 + 2.63199 5.20228 1.15381 0.91877 0.390824 -0.0558353 + 2.55713 4.93932 0.463279 0.90167 0.189749 -0.388569 + 2.59492 5.03463 0.622196 0.908901 0.283452 -0.305867 + 2.55605 5.22749 0.730347 0.893946 0.380737 -0.236431 + 2.55198 5.34889 0.961884 0.87828 0.452994 -0.153039 + 2.50784 5.47996 1.22667 0.872213 0.488792 -0.0180771 + 2.50059 5.03891 0.382189 0.891358 0.21689 -0.398044 + 2.5383 5.125 0.537667 0.901303 0.304185 -0.308422 + 2.49893 5.29793 0.637158 0.883413 0.399328 -0.245192 + 2.49541 5.41053 0.865721 0.857535 0.482417 -0.178629 + 2.43881 5.12605 0.296857 0.896079 0.237447 -0.375049 + 2.47683 5.20264 0.447795 0.888298 0.323433 -0.326065 + 2.43747 5.37556 0.547294 0.870629 0.417207 -0.260659 + 2.4383 5.48096 0.772532 0.857675 0.482028 -0.179004 + 2.39598 5.61798 1.0342 0.827613 0.54967 -0.113666 + 2.37936 5.22093 0.213316 0.876929 0.283483 -0.388114 + 2.41505 5.28978 0.362463 0.879786 0.351102 -0.320475 + 2.37552 5.44264 0.454495 0.857017 0.435614 -0.275249 + 2.38285 5.53666 0.67206 0.846725 0.492349 -0.201616 + 2.37951 5.0495 0.116236 0.89498 0.212028 -0.392497 + 2.31038 5.30304 0.127906 0.863872 0.325878 -0.384094 + 2.34577 5.36623 0.277045 0.857304 0.38771 -0.338689 + 2.30624 5.5191 0.369077 0.841989 0.45216 -0.29429 + 2.3209 5.60374 0.579269 0.829908 0.51656 -0.210756 + 2.32204 5.14603 0.030249 0.889735 0.257918 -0.376631 + 2.23783 5.38581 0.041944 0.841278 0.357507 -0.405512 + 2.2768 5.44834 0.191635 0.850292 0.404467 -0.336764 + 2.23743 5.58643 0.280245 0.83262 0.465317 -0.300374 + 2.25917 5.66193 0.483885 0.820038 0.527487 -0.222024 + 2.24948 5.2288 -0.055713 0.850589 0.325182 -0.413225 + 2.1625 5.46109 -0.042254 0.823091 0.380725 -0.421391 + 2.20301 5.52251 0.10737 0.830445 0.42511 -0.360061 + 2.16364 5.6606 0.195989 0.817953 0.482846 -0.31275 + 2.19036 5.72927 0.395052 0.799878 0.55289 -0.233471 + 2.17516 5.30753 -0.147275 0.830827 0.351023 -0.431867 + 2.07975 5.54245 -0.121966 0.801233 0.389729 -0.454023 + 2.12768 5.59788 0.023222 0.823283 0.430212 -0.370301 + 2.08997 5.72607 0.107994 0.811367 0.491573 -0.316291 + 2.1204 5.78911 0.305796 0.788776 0.566282 -0.239077 + 2.09241 5.38889 -0.226996 0.791544 0.381486 -0.477417 + 1.99624 5.61466 -0.200255 0.774812 0.394399 -0.494081 + 2.0527 5.66198 -0.067605 0.803315 0.43225 -0.40969 + 2.015 5.79017 0.017166 0.786792 0.512218 -0.34437 + 2.04673 5.85449 0.217752 0.784342 0.569674 -0.245519 + 1.9999 5.26727 -0.465553 0.74328 0.410284 -0.528395 + 2.00236 5.46013 -0.309787 0.761803 0.391158 -0.516383 + 1.90669 5.70324 -0.265662 0.726674 0.433134 -0.533235 + 1.96919 5.7342 -0.145894 0.763189 0.464014 -0.449704 + 1.93368 5.85036 -0.06688 0.742615 0.543902 -0.390761 + 2.01005 5.09055 -0.593649 0.773849 0.415489 -0.478044 + 1.897 5.32413 -0.550839 0.699807 0.433177 -0.568003 + 1.91281 5.54861 -0.375237 0.726 0.404402 -0.556223 + 1.80394 5.77041 -0.338008 0.667209 0.460198 -0.585704 + 1.87717 5.79114 -0.227716 0.70867 0.499751 -0.498032 + 1.90715 5.14741 -0.678936 0.69296 0.474293 -0.543003 + 1.79588 5.39142 -0.619783 0.661577 0.447364 -0.601815 + 1.81169 5.61589 -0.444181 0.662366 0.439637 -0.606622 + 1.69468 5.82508 -0.409707 0.590969 0.489442 -0.641251 + 1.77442 5.8584 -0.300021 0.658857 0.520112 -0.543499 + 1.82293 5.09917 -0.833386 0.665469 0.512977 -0.542222 + 1.79847 5.22373 -0.746933 0.660948 0.48498 -0.572663 + 1.68559 5.46478 -0.67924 0.60448 0.475804 -0.638917 + 1.70243 5.67048 -0.51592 0.602893 0.471022 -0.64394 + 1.88753 4.95658 -0.89482 0.706913 0.536145 -0.461326 + 1.70753 5.17999 -0.889376 0.614641 0.525357 -0.588401 + 1.68819 5.29708 -0.806381 0.614619 0.503426 -0.607294 + 1.56957 5.52995 -0.731322 0.555854 0.502461 -0.662238 + 1.87891 4.87863 -0.985402 0.618341 0.538791 -0.572152 + 1.77214 5.03741 -0.950809 0.608016 0.529219 -0.591815 + 1.58714 5.25355 -0.942585 0.559589 0.528346 -0.638523 + 1.5678 5.37064 -0.85959 0.564117 0.52434 -0.637839 + 2.03337 4.6711 -1.00275 0.729694 0.463329 -0.502865 + 1.91638 4.76694 -1.04815 0.615698 0.543182 -0.57085 + 1.74087 4.96192 -1.04267 0.544296 0.511057 -0.665254 + 1.63409 5.12079 -1.00802 0.545805 0.50741 -0.666807 + 1.45903 5.31512 -0.996827 0.505928 0.531538 -0.679341 + 1.99519 4.61324 -1.08894 0.667133 0.366672 -0.648448 + 1.88748 4.71569 -1.13058 0.584667 0.472478 -0.659491 + 1.73303 4.82137 -1.17302 0.464421 0.502104 -0.729524 + 1.76194 4.87261 -1.09058 0.539443 0.5513 -0.636451 + 1.53142 5.08193 -1.11033 0.472589 0.491175 -0.731715 + 2.04889 4.45611 -1.10178 0.625652 0.162118 -0.763071 + 1.96621 4.56012 -1.13792 0.569859 0.226626 -0.789875 + 1.8585 4.66265 -1.17951 0.394964 0.202347 -0.896136 + 2.06534 4.30683 -1.08842 0.165726 -0.190595 -0.967579 + 2.02337 4.39865 -1.12526 0.270114 -0.208268 -0.940033 + 1.94069 4.50266 -1.1614 -0.106776 -0.315449 -0.942916 + 2.08928 4.14522 -1.06409 0.248168 -0.0934227 -0.964202 + 2.0466 4.10856 -1.0584 -0.489524 -0.0754847 -0.868717 + 2.03364 4.27968 -1.06779 -0.542495 -0.301152 -0.784224 + 1.99167 4.3715 -1.10462 -0.611108 -0.504348 -0.610065 + 2.05101 3.88745 -1.04242 -0.392203 0.118485 -0.912216 + 1.99583 3.86673 -1.01114 -0.544096 0.127998 -0.829202 + 2.02304 4.08642 -1.02005 -0.737529 0.0149861 -0.675149 + 2.01007 4.25745 -1.02949 -0.762162 -0.132344 -0.633715 + 2.03007 3.69726 -1.092 -0.411265 0.414258 -0.811943 + 1.9749 3.67645 -1.06076 -0.572579 0.400494 -0.715373 + 1.74742 3.72033 -0.871373 -0.549309 0.216261 -0.80715 + 1.77462 3.94002 -0.880283 -0.570766 0.166296 -0.804097 + 1.76261 4.05962 -0.821833 -0.647748 0.152918 -0.74635 + 1.99278 3.52588 -1.20576 -0.469362 0.695106 -0.544543 + 1.94981 3.49535 -1.17289 -0.628683 0.627639 -0.459158 + 1.74752 3.40461 -1.07452 -0.5071 0.712606 -0.484811 + 1.77261 3.58579 -0.962341 -0.555242 0.442445 -0.704236 + 1.98072 3.43541 -1.38007 0.286957 0.915062 -0.283402 + 1.94716 3.43808 -1.3497 -0.401772 0.90496 -0.140092 + 1.90418 3.40747 -1.31688 -0.490817 0.868704 -0.0667227 + 1.88163 3.43962 -1.53096 -0.195883 0.977953 0.0723714 + 1.84709 3.41146 -1.48519 -0.378316 0.913064 0.152285 + 1.68608 3.35453 -1.39578 -0.240246 0.963322 0.119554 + 1.74316 3.35054 -1.22748 -0.354105 0.930087 -0.0977177 + 1.82574 3.42676 -1.70469 0.218895 0.934977 -0.27911 + 1.79723 3.42649 -1.65382 -0.237571 0.96765 0.0849265 + 1.76269 3.39842 -1.608 -0.368893 0.914219 0.167695 + 1.72522 3.41054 -1.78059 0.148565 0.934332 -0.323964 + 1.69671 3.41036 -1.72967 -0.213004 0.957225 0.195832 + 1.66266 3.36006 -1.66077 -0.329502 0.916902 0.22521 + 1.54073 3.32302 -1.56781 -0.147083 0.986648 0.0699382 + 1.64076 3.36138 -1.51505 -0.263014 0.964016 0.0386954 + 1.6089 3.41555 -1.84827 0.161352 0.946806 -0.278429 + 1.59004 3.40451 -1.78076 -0.118379 0.935399 0.333189 + 1.556 3.35431 -1.7118 -0.112573 0.919986 0.375438 + 1.48277 3.42564 -1.88495 0.155326 0.986915 0.0432823 + 1.46391 3.41461 -1.81744 0.0333653 0.924266 0.380288 + 1.43494 3.37481 -1.76431 0.0337742 0.88904 0.456583 + 1.35307 3.35536 -1.67502 0.160271 0.958432 0.236055 + 1.47412 3.33477 -1.62255 0.0504947 0.979649 0.194263 + 1.36382 3.44218 -1.92599 0.179912 0.982135 -0.0551638 + 1.29996 3.46466 -1.90454 0.265219 0.959441 -0.095561 + 1.30519 3.45113 -1.84669 0.181437 0.884 0.430841 + 1.27622 3.41134 -1.79357 0.16241 0.852996 0.496004 + 1.15463 3.4633 -1.99157 0.297673 0.841896 -0.450113 + 1.1022 3.53356 -1.92768 0.301205 0.938207 -0.17042 + 1.10742 3.52012 -1.86978 0.31716 0.864002 0.391036 + 1.07183 3.48275 -2.01627 0.307296 0.760528 -0.571984 + 1.01939 3.55311 -1.95233 0.426555 0.803947 -0.414391 + 0.96066 3.60365 -1.92487 0.494927 0.84908 -0.18469 + 0.958648 3.58478 -1.85979 0.482183 0.77035 0.417205 + 1.11874 3.44461 -1.78761 0.278898 0.832016 0.479547 + 1.05115 3.46115 -2.05065 0.260583 0.671837 -0.693348 + 0.969432 3.54005 -2.00651 0.349835 0.726283 -0.591716 + 0.9107 3.59059 -1.97905 0.431828 0.726953 -0.533913 + 0.836274 3.68742 -1.90357 0.502162 0.861491 -0.0752784 + 0.834262 3.66848 -1.83855 0.564977 0.733019 0.378793 + 0.936296 3.46802 -2.08816 0.271225 0.618756 -0.737278 + 0.948757 3.51835 -2.04093 0.304695 0.657611 -0.688991 + 0.846731 3.62203 -1.9957 0.435322 0.661427 -0.610745 + 0.772305 3.71886 -1.92022 0.594254 0.758296 -0.268047 + 0.831081 3.52536 -2.07787 -0.00852729 0.39327 -0.919383 + 0.843542 3.57578 -2.0306 0.32367 0.578306 -0.748865 + 0.705238 3.728 -1.99306 0.44169 0.630157 -0.638602 + 0.638711 3.79866 -1.96524 0.570894 0.687529 -0.448759 + 0.705777 3.78952 -1.8924 0.674525 0.721203 -0.157738 + 0.830249 3.43662 -2.09197 -0.337322 0.152765 -0.928912 + 0.700534 3.60249 -2.02207 -0.15147 0.0801534 -0.985207 + 0.702049 3.68176 -2.02795 0.0647169 0.304795 -0.950217 + 0.620649 3.7338 -2.01269 0.0114687 0.101269 -0.994793 + 0.770081 3.3076 -2.0747 -0.188333 0.182023 -0.96509 + 0.699702 3.51375 -2.03617 -0.0713914 0.171692 -0.98256 + 0.647085 3.52642 -2.0411 0.496314 0.278766 -0.822169 + 0.591852 3.63862 -2.04383 0.618985 0.449348 -0.644162 + 0.619134 3.65462 -2.00675 0.208815 0.341377 -0.916438 + 0.717464 3.32035 -2.07958 0.430172 0.271348 -0.861001 + 0.576766 3.71804 -2.007 0.31714 0.222589 -0.921887 + 2.67427 2.71354 -0.70516 -0.585552 0.494316 0.64248 + 1.02369 1.81801 0.518748 -0.770135 0.629929 0.100407 + 0.925079 1.67623 0.632923 -0.31584 -0.363456 -0.876439 + 0.972324 1.71963 0.595543 -0.756445 0.3446 -0.555915 + 0.848978 1.62264 0.668738 0.232188 -0.827003 -0.51201 + 1.02369 1.81801 0.518748 0.487929 -0.727629 -0.482164 + 0.948408 2.01676 -0.468093 -0.0645931 -0.965585 0.251938 + 0.915514 2.00015 -0.555323 -0.344388 -0.914973 0.210287 + 1.23701 1.53076 0.60848 -0.714382 -0.153768 -0.682652 + 1.33145 1.63145 0.543685 -0.378735 -0.222833 -0.898279 + 1.21447 1.45124 0.759218 -0.521178 -0.444237 -0.728716 + 1.25585 1.60974 0.521077 0.910925 -0.408448 0.0581845 + 1.20934 1.39286 0.775928 -0.847225 0.0204599 -0.530839 + 1.1853 1.29834 0.696237 -0.449277 -0.288303 -0.845595 + 1.13045 1.1621 0.761815 -0.819103 0.172255 -0.547174 + 1.26299 1.58624 0.584984 -0.17437 -0.313641 -0.933394 + 1.13996 1.08149 0.754245 -0.871564 0.0509284 -0.48763 + 1.29257 1.60304 0.697493 -0.42515 -0.12688 -0.896186 + 1.37295 1.58577 0.661806 -0.426385 -0.136886 -0.894124 + 0.307145 1.88639 -1.30329 0.0661222 0.806585 0.587409 + 0.186089 1.88576 -1.28879 0.121439 0.805982 0.579349 + 0.099451 1.85062 -1.21534 -0.0995206 0.808565 0.579929 + 0.064756 1.84625 -1.22456 -0.24945 0.786141 0.565471 + 0.874389 1.49643 -1.23266 0.166063 -0.680019 -0.714141 + 0.792052 1.49776 -1.24696 0.1188 -0.656521 -0.744894 + 0.922122 1.44708 -1.17038 0.192259 -0.692053 -0.695772 + 0.508552 1.94894 -2.92703 -0.780217 -0.553978 0.290465 + 0.52297 1.93907 -2.90713 -0.837095 -0.524939 0.153982 + 0.531743 1.92998 -2.84378 -0.892581 -0.423164 0.155665 + 0.562042 1.91149 -2.78196 -0.880935 -0.314045 0.354018 + 0.540993 1.91304 -2.85124 -0.857508 -0.506917 0.0878356 + 0.596303 1.90966 -2.7044 -0.70092 -0.627276 0.339465 + 0.594687 1.91353 -2.65769 -0.614061 -0.784243 0.088835 + 0.596791 1.8903 -2.71226 -0.732456 -0.271992 0.624122 + 0.673959 1.88607 -2.67534 -0.224245 -0.970769 -0.0855689 + 0.645977 1.89343 -2.65109 -0.28634 -0.957263 0.0407023 + 0.644361 1.8973 -2.60438 -0.290762 -0.953806 0.0755789 + 0.733378 1.87888 -2.59848 -0.11827 -0.986878 0.109923 + 0.813326 1.87664 -2.6242 0.196596 -0.971981 0.128851 + 0.844209 1.88512 -2.61269 0.0873606 -0.961378 -0.260999 + 0.76136 1.87152 -2.62273 -0.00669117 -0.982034 0.188584 + 0.881192 1.90619 -2.68198 0.379819 -0.90383 -0.197052 + 0.912075 1.91468 -2.67049 0.113981 -0.929046 -0.351968 + 0.932709 1.90732 -2.65595 -0.061355 -0.901762 -0.427857 + 0.617677 1.90266 -2.70986 0.370197 -0.770326 -0.519184 + 0.596791 1.8903 -2.71226 0.206586 -0.511364 0.834164 + 0.568883 1.86808 -2.71898 0.20596 -0.511065 0.834501 + 0.596791 1.8903 -2.71226 0.363491 -0.456742 -0.811949 + 1.1428 1.64929 -1.72542 -0.401092 0.915994 -0.00893161 + 1.13874 1.64637 -1.84257 -0.2741 0.961098 -0.0340594 + 1.15155 1.65076 -1.79137 -0.0272506 0.996538 -0.0785461 + 0.393486 2.18026 -3.16149 0.377926 -0.716 -0.586954 + 0.372261 2.1636 -3.15483 0.464096 -0.775365 -0.42828 + 0.350348 2.16381 -3.16919 0.321523 -0.800553 -0.505705 + 0.349223 2.13195 -3.11381 0.490387 -0.595144 -0.636651 + 0.334431 2.13339 -3.12531 -0.199286 -0.454074 -0.86839 + 0.371136 2.13183 -3.0994 0.592057 -0.661129 -0.460844 + 0.38294 2.11217 -3.06315 0.804983 -0.204868 -0.556805 + 0.370895 2.08434 -3.07694 0.818381 0.00123083 -0.574674 + 0.354297 2.09602 -3.09818 0.705106 -0.0623241 -0.706357 + 0.339505 2.09737 -3.10972 0.28838 -0.190533 -0.938368 + 0.404042 2.16929 -3.06808 0.679273 -0.628524 -0.378875 + 0.415846 2.14963 -3.03183 0.675007 -0.39771 -0.621444 + 0.393486 2.18026 -3.16149 0.500982 -0.856028 -0.12741 + 0.425268 2.18595 -3.07474 0.394101 -0.887399 -0.239183 + 0.440601 2.15824 -3.01655 0.399007 -0.517363 -0.757052 + 0.443019 2.08989 -2.99497 0.353871 -0.397841 -0.846462 + 0.455932 2.1985 -3.12628 0.241862 -0.966002 -0.091344 + 0.480623 2.19749 -3.09233 -0.0588648 -0.976604 -0.206832 + 0.449959 2.18494 -3.04079 0.257136 -0.853261 -0.453682 + 0.483061 2.14963 -3.00123 0.0814883 -0.519822 -0.850379 + 0.50524 2.13919 -2.99355 0.0266964 -0.487804 -0.872545 + 0.465198 2.07954 -2.98724 0.0433964 -0.24891 -0.967554 + 0.492418 2.17623 -3.02551 -0.176385 -0.80804 -0.562102 + 0.52121 2.16814 -3.0325 -0.343357 -0.861212 -0.374726 + 0.53286 2.15391 -3.00765 -0.2372 -0.777605 -0.582295 + 0.529393 2.117 -2.98592 -0.107761 -0.266479 -0.957797 + 0.509415 2.1894 -3.09931 -0.368745 -0.90262 -0.222047 + 0.565038 2.15256 -3.06872 -0.484107 -0.846432 -0.221797 + 0.557013 2.13173 -3.00002 -0.537375 -0.499236 -0.6797 + 0.540525 2.08937 -2.98326 -0.193184 -0.0956334 -0.976491 + 0.476331 2.05182 -2.98463 -0.10682 -0.242327 -0.964296 + 0.460611 2.02282 -2.96798 -0.171443 -0.57887 -0.797193 + 0.568852 2.10302 -2.9977 -0.676759 -0.220353 -0.702454 + 0.549883 2.03016 -2.9831 -0.239556 -0.25282 -0.937387 + 0.534164 2.00115 -2.96646 -0.121044 -0.661562 -0.740057 + 0.477676 1.9723 -2.91668 -0.140817 -0.783527 -0.605191 + 0.352052 2.05087 -3.10877 0.393683 -0.245151 -0.885954 + 0.323018 2.03798 -3.10345 -0.140404 -0.466361 -0.87338 + 0.310471 2.08448 -3.1044 -0.277882 -0.115503 -0.953646 + 0.237864 2.05686 -3.07595 -0.324359 -0.349116 -0.879153 + 0.229401 2.08615 -3.07449 -0.277474 -0.133379 -0.951429 + 0.302008 2.1137 -3.10299 -0.45046 -0.048573 -0.891475 + 0.322121 2.17092 -3.11931 -0.589253 -0.493426 -0.639774 + 0.350348 2.16381 -3.16919 -0.863471 -0.209912 -0.458643 + 0.289698 2.15122 -3.09699 -0.37193 -0.235035 -0.898013 + 0.289793 2.2002 -3.13563 -0.394012 -0.817502 -0.420054 + 0.350348 2.16381 -3.16919 -0.590066 -0.775858 -0.22331 + 0.31802 2.1931 -3.18552 -0.525173 -0.822986 -0.216533 + 0.248177 2.23837 -3.20173 -0.289099 -0.909547 -0.298572 + 0.19127 2.24886 -3.2109 0.0385587 -0.964608 -0.260852 + 0.129042 2.23586 -3.21559 0.215521 -0.949493 -0.228067 + -0.924635 2.00506 -0.519026 0.958068 -0.105458 0.266429 + -0.920037 1.95183 -0.55663 0.95512 -0.151033 0.254824 + -0.914713 1.86018 -0.745692 0.313962 -0.941078 -0.125697 + -1.37295 1.58577 0.661806 0.426351 -0.136895 -0.894139 + -0.678992 1.83517 -2.44137 -0.769858 0.630129 -0.101274 + -0.661911 1.8537 -2.45587 -0.545686 0.791819 0.274315 + -0.625186 1.8998 -2.49551 -0.346166 0.754879 0.557069 + -0.693494 1.82274 -2.41123 -0.760057 0.643401 -0.0913747 + -0.639392 1.87276 -2.42967 -0.65124 0.758831 0.00788446 + -0.621012 1.88748 -2.46078 -0.656241 0.753659 -0.0366962 + -0.643531 1.86852 -2.48694 -0.614522 0.787777 -0.042064 + -0.618742 1.88277 -2.53462 -0.757163 0.650004 -0.0647919 + -0.710576 1.80419 -2.39672 -0.774003 0.622518 -0.115717 + -0.608264 1.9006 -2.4921 -0.807943 0.585964 -0.0622418 + -0.605994 1.89588 -2.56593 -0.923488 0.373686 -0.0867705 + -0.592266 1.91999 -2.61288 -0.936872 0.3344 -0.102214 + -0.221581 1.99605 -3.06703 -0.0743072 0.98154 0.176233 + -0.267675 2.00019 -3.07539 0.000131986 0.89665 0.44274 + -0.161271 1.99295 -2.99625 -0.215221 0.976479 0.0129731 + -0.136983 2.00247 -2.98235 -0.170746 0.951133 -0.257277 + -0.128457 1.99899 -2.99252 -8.67722e-005 0.998062 -0.062219 + -0.108668 1.98654 -2.98615 0.319866 0.781959 0.535001 + -0.199855 1.98061 -2.98869 -0.204715 0.977897 -0.0425444 + -0.175566 1.99014 -2.97479 -0.287902 0.946501 -0.145769 + -0.268179 1.99335 -3.07676 -0.237126 0.87706 0.417777 + -0.293134 1.98927 -3.07549 0.0324754 0.819348 0.572376 + -0.319848 1.99731 -3.11521 0.0382435 0.990886 0.12916 + -0.31628 1.99369 -3.07773 0.175231 0.978838 0.105689 + -0.325906 1.99664 -3.08165 0.2675 0.96119 0.067504 + -0.320655 1.99868 -2.96098 0.220556 0.965805 0.136293 + -0.295713 1.99981 -2.96814 -0.243513 0.969871 -0.00724026 + -0.284575 2.00426 -2.96885 -0.371288 0.928509 -0.00411823 + -0.328944 1.99242 -2.93294 0.701206 0.624414 0.344119 + -1.15152 1.65076 -1.79137 0.293997 0.955644 -0.0176318 + -1.1428 1.64929 -1.72542 0.397442 0.917063 -0.0321691 + -1.13874 1.64637 -1.84257 0.271888 0.962219 -0.0145619 + 0.012141 2.04154 -3.09621 -6.94118e-005 -0.784969 -0.619535 + -0.012102 2.04153 -3.0962 0.0120096 -0.766179 -0.642514 + -0.021961 2.02879 -3.08313 -0.371428 -0.74644 -0.552149 + 1.02369 1.81801 0.518748 -0.11541 -0.573078 -0.811334 + 0.972324 1.71963 0.595543 -0.115414 -0.573076 -0.811334 + 0.080404 2.00707 -3.02371 -0.117919 0.832655 0.541092 + 0.082735 1.99305 -3.00163 -0.117919 0.832655 0.541093 + 0.108633 1.98662 -2.9861 -0.117919 0.832655 0.541092 + 0.00729 3.0019 -1.86921 0.575951 0.709312 -0.406396 + -0.00729 3.0019 -1.86921 -0.575837 0.709395 -0.406412 + -0.00861 2.95866 -1.66912 -0.653304 0.698657 0.291672 + 0.016514 2.25648 -0.879903 0 0.48573 0.874109 + -1.02369 1.81801 0.51875 0.115235 -0.573168 -0.811295 + -0.972324 1.71963 0.59555 0.115273 -0.573153 -0.8113 + -1.07094 1.86141 0.481375 0.115234 -0.573169 -0.811294 + -0.082769 1.99305 -3.00163 0.117371 0.831776 0.542561 + -0.080403 2.00708 -3.02372 0.118004 0.832569 0.541206 + -0.108668 1.98654 -2.98615 0.116522 0.83071 0.544374 + 2.62735 2.77706 -0.803569 0.799797 0.60024 0.0060576 + 2.67427 2.71354 -0.70516 0.83897 0.541101 0.0577904 + 2.69296 2.68907 -0.747364 0.88912 0.457413 -0.015448 + 2.76006 2.54148 -0.595733 0.936886 0.349556 0.00744066 + 2.66066 2.74987 -0.83028 0.827452 0.561381 0.0132091 + 2.62735 2.77706 -0.803569 0.686197 0.716294 0.126717 + 2.59755 2.8118 -0.900746 0.17471 0.918879 0.353748 + 2.74137 2.56587 -0.553589 0.880466 0.4571 0.125856 + 2.79322 2.409 -0.417882 0.938195 0.337548 0.0764976 + 2.62735 2.77706 -0.803569 -0.747519 0.518851 0.41474 + -0.534839 1.92882 -2.85178 -0.519846 0.852994 0.0464883 + -0.52042 1.93869 -2.87167 -0.428662 0.900362 0.0748143 + -0.508552 1.94894 -2.92703 -0.0961616 0.987912 0.121582 + -0.484424 1.94554 -2.89294 -0.105183 0.980917 0.16352 + -0.517922 1.95242 -2.95826 -0.130694 0.978753 0.157993 + -0.49606 1.95866 -2.97745 -0.0723008 0.993601 0.0867757 + -0.517137 1.95856 -3.00009 -0.092774 0.992281 0.0822934 + -0.483244 1.9587 -2.99094 -0.004039 0.999992 -0.000346849 + 0.9621 1.92007 -2.69142 -0.233448 -0.918965 -0.317814 + 0.941467 1.92742 -2.70595 -0.11974 -0.936938 -0.328343 + 0.961467 1.93616 -2.75449 -0.36455 -0.904699 -0.220507 + 0.923743 1.94387 -2.74325 -0.0220769 -0.935402 -0.352896 + 0.943743 1.95252 -2.79183 -0.300675 -0.911713 -0.279954 + 0.892877 1.92997 -2.73397 0.370485 -0.850968 -0.372282 + 0.819883 1.89681 -2.75453 0.339735 -0.837637 -0.42772 + 0.860398 1.97181 -2.83144 0.276514 -0.74731 -0.604208 + 0.83271 2.03751 -2.89384 0.202295 -0.628225 -0.751272 + 0.839834 1.97284 -2.84323 0.357996 -0.639183 -0.680649 + 0.581134 3.8813 -1.91798 0.593829 0.653635 -0.469179 + 0.637317 3.86293 -1.87275 0.717414 0.661076 -0.219764 + 0.664806 3.81544 -1.79851 0.736779 0.566971 0.368375 + 0.733266 3.74195 -1.81821 0.662141 0.655561 0.363056 + 0.518448 3.97269 -1.86747 0.677603 0.623281 -0.390351 + 0.574631 3.9544 -1.82219 0.776251 0.625737 -0.0767332 + 0.595367 3.88153 -1.76637 0.757146 0.462753 0.461075 + 0.657801 3.71537 -1.71277 0.642688 0.640464 0.420427 + 0.732856 3.66747 -1.731 0.590283 0.699904 0.40212 + 0.513553 4.02222 -1.77126 0.883755 0.445905 0.141934 + 0.534289 3.94934 -1.71543 0.903596 0.288934 0.316279 + 0.588362 3.78145 -1.68063 0.752881 0.555775 0.35254 + 0.7262 3.6026 -1.49185 0.604674 0.781074 0.155863 + 0.434 4.21608 -1.68223 0.744553 0.515752 -0.423841 + 0.484016 4.13257 -1.67439 0.893866 0.367382 -0.25697 + 0.508511 4.08163 -1.62556 0.994108 0.10708 0.01682 + 0.509841 3.86933 -1.64343 0.904911 0.340212 0.25572 + 0.417436 4.27618 -1.63193 0.692139 0.535711 -0.483692 + 0.476256 4.31372 -1.51495 0.859956 0.393163 -0.325421 + 0.500752 4.26279 -1.46613 0.915907 0.192544 -0.352194 + 0.484063 4.0017 -1.55352 0.998355 0.0513136 -0.0255802 + 0.599219 3.72037 -1.38404 0.856827 0.512155 -0.0595347 + 0.388452 4.3741 -1.57972 0.742546 0.461111 -0.4858 + 0.447272 4.41163 -1.46274 0.705612 0.344537 -0.619197 + 0.477044 4.4763 -1.41355 0.689446 0.136094 -0.711437 + 0.528419 4.40693 -1.35799 0.816176 0.0886979 -0.570954 + 0.534365 4.21435 -1.42024 0.910352 0.0809521 -0.40584 + 0.391724 4.57063 -1.45214 0.545024 0.101825 -0.832214 + 0.447602 4.6426 -1.43079 0.483485 -0.0728453 -0.872316 + 0.518036 4.55291 -1.36864 0.644902 -0.0761025 -0.760467 + 0.56941 4.48354 -1.31309 0.840042 -0.116021 -0.529971 + 0.562032 4.35841 -1.31215 0.926941 0.0424404 -0.372798 + 0.497061 4.70962 -1.41126 0.424653 -0.195474 -0.884002 + 0.567495 4.62002 -1.34907 0.599758 -0.258698 -0.757209 + 0.605012 4.56017 -1.27502 0.797508 -0.319706 -0.511634 + 0.583846 4.43159 -1.2419 0.933751 -0.130155 -0.333419 + 0.552582 4.76321 -1.40448 0.392602 -0.260636 -0.882005 + 0.61529 4.69129 -1.34532 0.53872 -0.360494 -0.761462 + 0.652807 4.63153 -1.27122 0.769746 -0.459985 -0.442611 + 0.619448 4.5083 -1.20378 0.909816 -0.246648 -0.333765 + 0.649418 4.2149 -1.00639 0.974289 0.00778448 -0.225168 + 0.620436 4.83545 -1.39461 0.394019 -0.216182 -0.893317 + 0.683144 4.76353 -1.33545 0.572904 -0.397392 -0.716841 + 0.707743 4.71343 -1.26267 0.770551 -0.515583 -0.374733 + 0.650159 4.59414 -1.17185 0.869613 -0.39027 -0.302428 + 0.575173 4.91974 -1.4214 0.33075 -0.0745998 -0.940765 + 0.739039 4.91135 -1.36187 0.383517 -0.242294 -0.891183 + 0.753893 4.85831 -1.3304 0.533711 -0.444865 -0.719199 + 0.778492 4.80821 -1.25762 0.637733 -0.6082 -0.47264 + 0.705095 4.67604 -1.1633 0.749525 -0.551004 -0.366888 + 0.693776 4.99564 -1.38866 0.308646 0.0244211 -0.950863 + 0.834013 4.97092 -1.34045 0.382718 -0.164344 -0.90913 + 0.848867 4.91788 -1.30899 0.410099 -0.50902 -0.756781 + 0.858119 4.86914 -1.24797 0.445101 -0.725131 -0.525425 + 0.778795 4.75395 -1.16045 0.616234 -0.640368 -0.458459 + 0.643568 5.10455 -1.3843 0.265049 0.210269 -0.941029 + 0.758672 5.15924 -1.34083 0.279265 0.219755 -0.934729 + 0.808881 5.05033 -1.34519 0.318184 0.116385 -0.940858 + 0.922553 4.99578 -1.30592 0.245997 -0.0351257 -0.968634 + 0.648566 5.23973 -1.34764 0.185371 0.335003 -0.923802 + 0.790913 5.27267 -1.2991 0.268804 0.295902 -0.916617 + 0.874567 5.17472 -1.29805 0.283764 0.225064 -0.932107 + 0.897421 5.07519 -1.31066 0.288618 0.118343 -0.950102 + 0.729833 5.37574 -1.27601 0.174806 0.45826 -0.871459 + 0.87218 5.40876 -1.22741 0.248098 0.450374 -0.857678 + 1.019 5.38393 -1.18621 0.313164 0.421292 -0.851141 + 0.906808 5.28823 -1.25626 0.288041 0.299199 -0.909677 + 1.04436 5.15892 -1.25768 0.253852 0.263659 -0.930615 + 0.62515 5.50066 -1.20399 0.0408389 0.668229 -0.742834 + 0.76991 5.52379 -1.16626 0.124177 0.654321 -0.745952 + 0.916426 5.52384 -1.13374 0.232846 0.62923 -0.74152 + 1.06325 5.49902 -1.09254 0.328853 0.582912 -0.743014 + 1.17762 5.33694 -1.14963 0.366026 0.39186 -0.84408 + 0.61708 5.6261 -1.06225 0.000841583 0.718679 -0.695341 + 0.763906 5.64422 -1.03944 0.0901012 0.712984 -0.695367 + 0.910422 5.64417 -1.00696 0.181054 0.696969 -0.693869 + 1.05435 5.62891 -0.977733 0.293578 0.657106 -0.69428 + 0.48032 5.7741 -0.923194 0.0257597 0.677039 -0.735496 + 0.621965 5.79243 -0.899559 0.032651 0.684147 -0.728613 + 0.768791 5.81047 -0.876793 0.0821737 0.681606 -0.72709 + 0.912049 5.80252 -0.858229 0.174186 0.667657 -0.723805 + 0.498004 5.99299 -0.726127 0.0341043 0.667242 -0.74406 + 0.639649 6.01133 -0.70249 0.0485558 0.668402 -0.742213 + 0.784456 6.01127 -0.691392 0.0933853 0.669114 -0.737269 + 0.927715 6.00332 -0.672828 0.178047 0.656553 -0.732965 + 0.354184 6.1405 -0.599632 0.0420383 0.663685 -0.74683 + 0.498102 6.14672 -0.588201 0.037142 0.678084 -0.734045 + 0.641316 6.14611 -0.579735 0.0490339 0.678255 -0.733189 + 0.786124 6.14596 -0.568686 0.0892531 0.67008 -0.736903 + 0.347783 6.21394 -0.536426 0.0534637 0.700327 -0.711817 + 0.486205 6.20677 -0.532 0.0466256 0.712976 -0.699636 + 0.62942 6.20606 -0.523584 0.0430745 0.720728 -0.691878 + 0.768288 6.20634 -0.515467 0.0787484 0.717985 -0.69159 + 0.207617 6.2185 -0.54092 0.0496514 0.694268 -0.718002 + 0.205578 6.29899 -0.452748 0.0606583 0.765246 -0.640874 + 0.338572 6.28741 -0.454885 0.0592936 0.768014 -0.637682 + 0.476994 6.28015 -0.4505 0.055858 0.771129 -0.634224 + 0.613773 6.2732 -0.447271 0.0478942 0.776335 -0.628499 + 0.069681 6.23174 -0.539659 0.0300049 0.689998 -0.723189 + 0.067642 6.31215 -0.451527 0.0295687 0.773894 -0.632624 + 0.199352 6.38522 -0.341687 0.0541961 0.80811 -0.586533 + 0.332346 6.37373 -0.343783 0.0659207 0.806264 -0.587871 + 0.4634 6.355 -0.353554 0.0675952 0.809977 -0.582553 + -0.069687 6.1512 -0.605952 -0.0184895 0.648016 -0.761403 + -0.069687 6.23174 -0.539659 -0.0275494 0.691679 -0.721679 + -0.067641 6.31215 -0.451527 -0.0340309 0.776502 -0.629195 + 0.067642 6.39267 -0.339994 0.0191721 0.815805 -0.578009 + -0.207623 6.21858 -0.540869 -0.0528744 0.696325 -0.715776 + -0.205577 6.29899 -0.452748 -0.0572296 0.767845 -0.638074 + -0.067641 6.39267 -0.339994 -0.0230563 0.813379 -0.581277 + 0.072926 6.49919 -0.186687 0.0189729 0.826812 -0.562158 + -0.354189 6.14059 -0.599582 -0.0381478 0.660755 -0.749631 + -0.347788 6.21403 -0.536376 -0.04948 0.702982 -0.709484 + -0.33857 6.28741 -0.454885 -0.0583796 0.767573 -0.638297 + -0.199351 6.38522 -0.341687 -0.0496631 0.80558 -0.590403 + -0.498107 6.14672 -0.588201 -0.042035 0.675381 -0.73627 + -0.48621 6.20677 -0.532 -0.0520818 0.716616 -0.695521 + -0.476992 6.28015 -0.450509 -0.056634 0.770558 -0.634849 + -0.332344 6.37373 -0.343783 -0.0651617 0.806701 -0.587356 + -0.639652 6.01141 -0.702441 -0.046504 0.670334 -0.740601 + -0.641313 6.14602 -0.579793 -0.051567 0.680083 -0.731319 + -0.629416 6.20606 -0.523584 -0.0455203 0.719419 -0.693083 + -0.613771 6.2732 -0.447271 -0.0449501 0.774256 -0.631274 + -0.463398 6.35501 -0.353563 -0.0688198 0.810648 -0.581475 + -0.78446 6.01127 -0.691392 -0.0951146 0.67047 -0.735815 + -0.78612 6.14596 -0.568686 -0.0869705 0.671351 -0.736019 + -0.768285 6.20634 -0.515467 -0.0760132 0.715995 -0.693954 + -0.75264 6.27348 -0.439153 -0.0660012 0.77985 -0.622477 + -0.600177 6.34797 -0.350374 -0.0520031 0.820044 -0.569933 + -0.91205 5.80252 -0.858229 -0.173436 0.667096 -0.724502 + -0.927716 6.00332 -0.672828 -0.177348 0.657377 -0.732395 + -0.927557 6.13356 -0.558203 -0.175299 0.666431 -0.724665 + -0.909722 6.19394 -0.504984 -0.12974 0.699057 -0.703197 + -0.910415 5.64417 -1.00696 -0.192555 0.687661 -0.700032 + -1.05597 5.78718 -0.829051 -0.264599 0.648568 -0.713686 + -1.06648 5.96789 -0.661263 -0.265122 0.642501 -0.718959 + -1.06632 6.09813 -0.546639 -0.230281 0.603317 -0.763531 + -1.06324 5.49902 -1.09254 -0.318562 0.59338 -0.739201 + -1.05434 5.62891 -0.977733 -0.283958 0.650584 -0.704349 + -1.19187 5.58415 -0.948404 -0.379817 0.614733 -0.691262 + -1.1931 5.74158 -0.811476 -0.353448 0.619006 -0.70136 + -1.2036 5.92221 -0.643737 -0.327815 0.615515 -0.716714 + -1.019 5.38393 -1.18621 -0.31372 0.421492 -0.850837 + -1.17762 5.33694 -1.14963 -0.351813 0.42896 -0.831998 + -1.20078 5.45425 -1.0632 -0.406586 0.560646 -0.721363 + -1.06543 5.24125 -1.21968 -0.290697 0.328609 -0.898617 + -1.33486 5.16618 -1.16585 -0.353213 0.408556 -0.841619 + -1.30942 5.2666 -1.11779 -0.431476 0.477366 -0.765474 + -1.33258 5.38391 -1.03137 -0.454259 0.526779 -0.718438 + -1.31379 5.08385 -1.20386 -0.276849 0.362378 -0.889964 + -1.55248 4.99254 -1.1583 -0.431303 0.422065 -0.797395 + -1.53142 5.08193 -1.11033 -0.467322 0.488004 -0.737199 + -1.50598 5.18236 -1.06228 -0.480373 0.496365 -0.723092 + -1.28999 5.02564 -1.23883 -0.217344 0.322205 -0.921382 + -1.52868 4.93441 -1.19322 -0.356476 0.416323 -0.836421 + -1.76193 4.87261 -1.09058 -0.51979 0.552509 -0.651577 + -1.74087 4.96192 -1.04267 -0.544982 0.510329 -0.665251 + -1.07212 4.99461 -1.28169 -0.156104 0.0606465 -0.985877 + -1.29489 4.96095 -1.25018 -0.151152 0.128605 -0.980109 + -1.49436 4.89367 -1.22724 -0.235819 0.258652 -0.936743 + -1.73302 4.82137 -1.17302 -0.448347 0.531427 -0.718728 + -1.08456 4.94607 -1.27621 -0.0841637 -0.491281 -0.866925 + -1.27583 4.91587 -1.2563 -0.0111876 -0.419872 -0.907514 + -1.4753 4.84858 -1.23336 0.102244 -0.476335 -0.873299 + -1.6987 4.78061 -1.20703 -0.266966 0.219296 -0.938423 + -1.07847 4.90973 -1.22087 -0.035921 -0.896767 -0.441043 + -1.26974 4.87952 -1.20094 0.160129 -0.92125 -0.354482 + -1.46561 4.82287 -1.16843 0.321027 -0.910417 -0.260928 + -1.66633 4.75043 -1.21235 0.169585 -0.465591 -0.8686 + -1.08079 4.87115 -1.11625 -0.115012 -0.866484 -0.485775 + -1.24336 4.86956 -1.07869 0.0752373 -0.903988 -0.420886 + -1.43923 4.81291 -1.04616 0.225906 -0.878774 -0.420384 + -1.68114 4.71987 -1.00823 0.432985 -0.831728 -0.347496 + -1.65664 4.72463 -1.14746 0.500267 -0.849623 -0.166955 + -0.928875 4.63847 -0.852437 -0.252961 -0.76193 -0.596215 + -1.02178 4.6337 -0.842966 -0.0532569 -0.737417 -0.673335 + -1.18436 4.63201 -0.805442 -0.0176271 -0.674623 -0.737952 + -1.34289 4.64202 -0.837188 0.109292 -0.694404 -0.711237 + -0.867609 4.24338 -0.363923 -0.527234 -0.622152 -0.578749 + -0.960515 4.23869 -0.354402 0.480363 -0.588512 -0.650312 + -1.03739 4.11413 -0.419655 0.520031 -0.441357 -0.731281 + -1.19592 4.12414 -0.451392 -0.471933 -0.63234 -0.61435 + -0.8402 3.9418 -0.182369 -0.774752 0.224842 -0.590936 + -0.880818 4.00672 -0.136817 -0.0899295 -0.220847 -0.971153 + -0.95769 3.88224 -0.202011 0.572473 0.197903 -0.795682 + -0.966468 3.81265 -0.233661 0.193319 -0.0127319 -0.981053 + -1.12487 3.77236 -0.232082 0.474255 0.543726 -0.692419 + -1.05757 3.82089 -0.220541 -0.354538 -0.0250528 -0.934706 + -1.2339 4.17485 -0.409218 -0.329913 -0.650624 -0.683992 + -1.5848 4.54907 -0.799193 0.281534 -0.620336 -0.732067 + -1.83478 4.60951 -0.994476 0.677948 -0.639851 -0.361908 + -1.34224 3.96063 -0.422972 0.718154 0.155635 -0.678257 + -1.09555 3.87159 -0.178358 -0.221569 -0.200593 -0.95429 + -1.31292 4.05995 -0.369198 0.585482 -0.196147 -0.786598 + -1.66383 4.43409 -0.759232 0.500828 -0.395888 -0.769704 + -1.74769 4.29554 -0.775666 0.660362 -0.0850492 -0.746115 + -1.98545 4.35792 -1.0053 0.807632 -0.302662 -0.50609 + -1.91865 4.47089 -1.01097 0.784101 -0.45186 -0.42545 + -1.92485 4.48456 -1.11024 0.792089 -0.559264 -0.24458 + -1.81028 4.61427 -1.13372 0.638432 -0.748334 -0.180001 + -2.01006 4.25745 -1.02949 0.748011 -0.0552651 -0.661381 + -2.03362 4.27968 -1.06779 0.670132 -0.217338 -0.709709 + -1.99166 4.3715 -1.10463 0.608921 -0.535458 -0.585236 + -2.0653 4.30684 -1.08844 -0.160825 -0.214082 -0.963485 + -2.02333 4.39866 -1.12527 -0.225768 -0.199495 -0.953536 + -1.94069 4.50266 -1.1614 0.113139 -0.296302 -0.948369 + -1.82612 4.63246 -1.18482 0.181481 -0.432468 -0.883196 + -2.1201 4.34508 -1.06087 -0.677014 0.0410826 -0.734823 + -2.04885 4.45612 -1.10179 -0.623093 0.177164 -0.761819 + -1.96621 4.56012 -1.13792 -0.54574 0.227644 -0.80644 + -1.8585 4.66265 -1.17951 -0.402514 0.16736 -0.899985 + -2.15183 4.38913 -1.01236 -0.830673 0.204592 -0.517807 + -2.08058 4.50017 -1.05329 -0.725911 0.294137 -0.621721 + -1.99519 4.61324 -1.08894 -0.664518 0.37643 -0.645536 + -1.88748 4.71569 -1.13058 -0.591656 0.471745 -0.653759 + -2.17726 4.38166 -0.952832 -0.959257 0.218638 -0.178948 + -2.11876 4.55803 -0.967101 -0.858982 0.350757 -0.372987 + -2.03337 4.6711 -1.00275 -0.724799 0.464615 -0.508723 + -1.91638 4.76694 -1.04815 -0.620175 0.533531 -0.57509 + -2.15185 4.49786 -0.87628 -0.93645 0.308829 -0.166392 + -2.09336 4.67413 -0.890592 -0.892186 0.442235 0.091826 + -1.9959 4.7827 -0.94005 -0.723627 0.539447 -0.430537 + -1.87892 4.87863 -0.985402 -0.620665 0.541783 -0.566786 + -1.63409 5.12079 -1.00802 -0.551177 0.5135 -0.657664 + -2.24854 4.17171 -0.91737 -0.934021 0.246431 -0.258603 + -2.19335 4.39952 -0.832166 -0.968594 0.247948 -0.018657 + -2.08545 4.75607 -0.780523 -0.853189 0.384398 -0.352571 + -1.98499 4.84801 -0.845362 -0.766497 0.502366 -0.40014 + -1.88754 4.95658 -0.89482 -0.705758 0.534175 -0.465363 + -2.24864 4.13654 -0.878263 -0.932806 0.0776146 0.351922 + -2.19346 4.36427 -0.7931 -0.967214 0.137153 0.213744 + -2.12695 4.65774 -0.736409 -0.962108 0.243155 -0.123387 + -2.03206 4.93082 -0.7006 -0.788516 0.419337 -0.449888 + -2.28372 3.89467 -0.903336 -0.582355 -0.169603 0.795045 + -2.22706 4.10422 -0.851082 -0.694429 -0.0964978 0.713061 + -2.19937 4.274 -0.786762 -0.831122 -0.0775592 0.550654 + -2.1484 4.52392 -0.679827 -0.971796 0.0667655 0.226176 + -2.19517 4.08157 -0.830255 -0.56557 -0.223907 0.793723 + -2.16748 4.25127 -0.765985 -0.722121 -0.198765 0.662596 + -2.15431 4.43366 -0.67349 -0.871363 -0.0148259 0.490415 + -2.11382 4.41735 -0.623251 -0.951791 -0.149522 0.267838 + -2.13064 4.7121 -0.564763 -0.976898 0.085832 -0.19571 + -2.13402 4.10459 -0.790129 -0.498001 -0.337411 0.798842 + -2.12698 4.23505 -0.715696 -0.743746 -0.32304 0.585223 + -2.08281 4.28208 -0.563746 -0.936643 -0.345893 0.0553052 + -2.13134 4.47389 -0.427379 -0.965133 -0.160885 -0.206481 + -2.16234 4.60916 -0.486875 -0.982702 -0.0955547 -0.158638 + -2.14463 4.35754 -0.352645 -0.933539 -0.21049 -0.29017 + -2.25756 4.75509 -0.239223 -0.922096 -0.0294762 -0.385837 + -2.2028 4.84339 -0.336761 -0.92642 0.0518802 -0.372901 + -2.17109 4.94632 -0.414649 -0.899402 0.188308 -0.394481 + -2.13786 4.23703 -0.268518 -0.871772 -0.208045 -0.443545 + -2.27085 4.63874 -0.164498 -0.892174 -0.0767991 -0.445116 + -2.30296 4.96977 -0.093867 -0.901205 0.134963 -0.411844 + -2.2482 5.05807 -0.191405 -0.883957 0.209873 -0.417819 + -2.17387 5.1368 -0.282967 -0.840107 0.298649 -0.452801 + -2.31137 4.52042 -0.093169 -0.845276 -0.0774828 -0.528682 + -2.40095 4.75493 0.063448 -0.890638 0.0510447 -0.451839 + -2.36043 4.87316 -0.00793 -0.897243 0.0883171 -0.432614 + -2.32204 5.14603 0.030249 -0.881622 0.2533 -0.398223 + -2.24948 5.2288 -0.055713 -0.856936 0.306751 -0.414204 + -2.44768 4.64596 0.139603 -0.897404 0.0206002 -0.440729 + -2.43896 4.95463 0.199769 -0.906639 0.163528 -0.388926 + -2.37951 5.0495 0.116236 -0.897482 0.199988 -0.393103 + -2.31038 5.30304 0.127906 -0.862403 0.329154 -0.384602 + -2.43881 5.12605 0.296857 -0.893345 0.245788 -0.376195 + -2.37936 5.22093 0.213316 -0.885344 0.291531 -0.362181 + -2.2768 5.44834 0.191635 -0.848176 0.401769 -0.345224 + -2.20301 5.52251 0.10737 -0.83241 0.421618 -0.359628 + -2.23783 5.38581 0.041944 -0.844093 0.360321 -0.397084 + -2.50059 5.03891 0.382189 -0.895872 0.22087 -0.385524 + -2.41505 5.28978 0.362463 -0.874239 0.343795 -0.342798 + -2.34577 5.36623 0.277045 -0.861993 0.378289 -0.33744 + -2.23743 5.58643 0.280245 -0.83144 0.467443 -0.300339 + -2.47683 5.20264 0.447795 -0.89023 0.318772 -0.325383 + -2.37552 5.44264 0.454495 -0.857053 0.435546 -0.275244 + -2.30624 5.5191 0.369077 -0.841963 0.452132 -0.294407 + -2.5383 5.125 0.537667 -0.898986 0.300788 -0.318358 + -2.49893 5.29793 0.637158 -0.882619 0.401049 -0.245242 + -2.43747 5.37556 0.547294 -0.871118 0.417913 -0.257881 + -2.3209 5.60374 0.579269 -0.829943 0.516537 -0.210675 + -2.25917 5.66193 0.483885 -0.819998 0.52753 -0.222068 + -2.55605 5.22749 0.730347 -0.895686 0.383347 -0.22537 + -2.4383 5.48096 0.772532 -0.857551 0.481392 -0.181298 + -2.38285 5.53666 0.67206 -0.84802 0.490176 -0.201469 + -2.3171 5.68751 0.806972 -0.804549 0.570822 -0.163898 + -2.24643 5.76781 0.768289 -0.786241 0.59681 -0.160135 + -2.49541 5.41053 0.865721 -0.861749 0.475012 -0.178189 + -2.39597 5.61798 1.0342 -0.827314 0.551849 -0.104947 + -2.37255 5.63181 0.907443 -0.837499 0.532455 -0.122826 + -2.23624 5.85057 1.06814 -0.775175 0.626179 -0.0836794 + -2.16557 5.93087 1.02946 -0.734695 0.674446 -0.073111 + -2.55198 5.3488 0.961835 -0.877918 0.450501 -0.1622 + -2.45255 5.55625 1.13032 -0.830441 0.549581 -0.0912589 + -2.32895 5.74736 1.34111 -0.797503 0.603314 0.00140142 + -2.25966 5.83682 1.19496 -0.775072 0.630476 -0.0419944 + -2.38425 5.67106 1.43747 -0.790769 0.612015 -0.0110311 + -2.19092 5.90505 1.48339 -0.732698 0.676184 0.0769977 + -2.12164 5.99442 1.33719 -0.699589 0.714367 0.0159671 + -2.02499 6.07968 1.26831 -0.65105 0.759028 -0.00317655 + -2.22627 5.84969 1.68367 -0.717874 0.694061 0.0541761 + -2.18728 5.894 1.60172 -0.71018 0.701462 0.0599579 + -1.92557 6.13361 1.57631 -0.622916 0.775782 0.10069 + -1.82892 6.21878 1.50738 -0.580117 0.808073 0.10238 + -2.30466 5.76602 1.73179 -0.76823 0.633415 0.0927775 + -1.98527 6.0613 1.81496 -0.628439 0.761048 0.160846 + -1.92192 6.12256 1.69465 -0.601566 0.793809 0.0893619 + -1.58307 6.34482 1.72328 -0.495569 0.857439 0.1386 + -2.06366 5.97762 1.86309 -0.680883 0.711328 0.174388 + -1.72021 6.22202 1.95958 -0.531449 0.825284 0.190967 + -1.65687 6.28328 1.83927 -0.509354 0.848531 0.143367 + -2.28482 5.73189 1.88371 -0.745343 0.646386 0.163246 + -2.03019 5.98832 1.94595 -0.647969 0.733979 0.203495 + -1.76867 6.15769 2.07459 -0.559481 0.786474 0.26161 + -1.42144 6.34167 2.14354 -0.438062 0.866121 0.2407 + -2.06972 5.91293 2.05774 -0.665501 0.707765 0.237017 + -1.8082 6.0823 2.18638 -0.569094 0.765983 0.299002 + -1.50251 6.21269 2.36954 -0.489143 0.801031 0.345092 + -1.4699 6.27735 2.25855 -0.475747 0.826127 0.301957 + -2.104 5.84604 2.1598 -0.670562 0.698682 0.24938 + -1.87858 6.009 2.24893 -0.590643 0.761647 0.266524 + -2.11294 5.7944 2.27003 -0.666562 0.689565 0.283187 + -1.88752 5.95737 2.35916 -0.585268 0.739929 0.331613 + -1.57288 6.13948 2.43215 -0.520451 0.781261 0.34462 + -2.1445 5.69545 2.42503 -0.660573 0.689119 0.297924 + -1.84999 5.92615 2.48143 -0.564882 0.743964 0.356968 + -1.53535 6.10826 2.55442 -0.489147 0.785305 0.379514 + -1.23443 6.24429 2.6212 -0.395735 0.819675 0.414158 + -1.25699 6.29017 2.51054 -0.416464 0.818024 0.396729 + -2.18262 5.59851 2.57112 -0.670684 0.672163 0.313656 + -1.88811 5.8293 2.62758 -0.573635 0.734894 0.361765 + -1.53756 6.03442 2.69831 -0.487196 0.774542 0.403391 + -1.23664 6.17045 2.76509 -0.391 0.814482 0.428648 + -2.17244 5.50219 2.78196 -0.661462 0.658477 0.358993 + -1.8998 5.71355 2.82708 -0.565085 0.722115 0.399034 + -1.54926 5.91866 2.89781 -0.48609 0.763833 0.424589 + -1.25477 6.06039 2.95013 -0.39671 0.800892 0.448546 + -0.979822 6.24763 2.81382 -0.315632 0.83308 0.454263 + -2.158 5.36113 3.04749 -0.647779 0.655795 0.387705 + -1.88536 5.57239 3.09256 -0.56264 0.714356 0.416092 + -1.57754 5.7544 3.15491 -0.487216 0.755791 0.437492 + -1.28304 5.89613 3.20723 -0.407056 0.786678 0.464158 + -2.38671 5.03469 3.1669 -0.701412 0.601414 0.382522 + -2.14678 5.24937 3.24905 -0.643943 0.63825 0.42187 + -1.88054 5.45252 3.30259 -0.56554 0.700051 0.435996 + -1.57272 5.63453 3.36494 -0.484241 0.75215 0.446968 + -1.28068 5.78732 3.39111 -0.396231 0.786872 0.473111 + -2.10228 5.16854 3.42585 -0.629775 0.641628 0.437833 + -1.83605 5.37169 3.47939 -0.553281 0.684531 0.474655 + -1.55979 5.56028 3.50194 -0.48047 0.73433 0.479487 + -1.26774 5.71298 3.52805 -0.377546 0.780172 0.498788 + -2.32378 4.85822 3.53916 -0.677951 0.600146 0.424509 + -2.06904 5.08721 3.59373 -0.612011 0.641167 0.462977 + -1.7827 5.29043 3.64674 -0.538486 0.68082 0.496504 + -1.50643 5.47902 3.66929 -0.45509 0.713418 0.532849 + -1.24504 5.61941 3.67913 -0.370039 0.752409 0.544933 + -2.30518 4.77869 3.6845 -0.666593 0.588671 0.457296 + -2.04024 5.00608 3.73765 -0.592851 0.634558 0.495846 + -1.7539 5.20939 3.79071 -0.517473 0.668737 0.533866 + -1.43854 5.35952 3.86526 -0.430359 0.696739 0.573887 + -1.17714 5.49992 3.8751 -0.369731 0.731528 0.572857 + -2.48365 4.46478 3.7772 -0.721899 0.478827 0.499586 + -2.26262 4.69396 3.83745 -0.647759 0.559229 0.517369 + -1.99768 4.92135 3.8906 -0.570842 0.618521 0.539973 + -1.71986 5.09801 3.95142 -0.496235 0.654934 0.569923 + -1.4045 5.24815 4.02597 -0.430143 0.683824 0.589374 + -2.41989 4.38871 3.93257 -0.703169 0.451393 0.549361 + -2.19885 4.61797 3.99287 -0.627162 0.539792 0.561509 + -1.94895 4.80519 4.0614 -0.555678 0.590378 0.585386 + -1.67113 4.98185 4.12221 -0.477449 0.632657 0.609744 + -1.36275 5.14531 4.16988 -0.418264 0.65903 0.625087 + -2.62707 4.1322 3.83826 -0.788709 0.331007 0.518047 + -2.57458 4.05159 3.96267 -0.773564 0.310175 0.552621 + -2.3674 4.3081 4.05697 -0.689013 0.416436 0.593163 + -2.14437 4.5084 4.14646 -0.613684 0.496887 0.613593 + -1.89447 4.69571 4.21503 -0.532072 0.557875 0.636926 + -2.77752 3.86569 3.72906 -0.872701 0.18169 0.453191 + -2.73728 3.79021 3.8274 -0.861302 0.154815 0.483932 + -2.53309 3.97831 4.05781 -0.761107 0.296734 0.576771 + -2.29879 4.2055 4.1993 -0.661744 0.378805 0.646994 + -2.07576 4.40579 4.28877 -0.598627 0.463738 0.653141 + -2.82858 3.53202 3.684 -0.914763 0.00252382 0.403983 + -2.78421 3.44796 3.7778 -0.893841 -0.0361337 0.446926 + -2.69578 3.71692 3.92254 -0.84096 0.116687 0.528366 + -2.64521 3.64027 4.0067 -0.825531 0.0542281 0.561746 + -2.53323 3.86313 4.1181 -0.786901 0.226733 0.573915 + -2.81782 3.17507 3.64045 -0.912748 -0.166902 0.372873 + -2.76579 3.06917 3.70128 -0.872649 -0.217023 0.437475 + -2.73363 3.37131 3.86196 -0.839471 -0.0999628 0.534131 + -2.78998 2.87553 3.49106 -0.903807 -0.252249 0.345691 + -2.73795 2.76963 3.5519 -0.907166 -0.258982 0.331629 + -2.68565 2.64337 3.59557 -0.885289 -0.272216 0.377043 + -2.71231 2.98091 3.75194 -0.841354 -0.23272 0.487816 + -2.68015 3.28305 3.91262 -0.813042 -0.150788 0.56234 + -2.7715 2.56331 3.31005 -0.890009 -0.276129 0.362818 + -2.71027 2.44319 3.36151 -0.895795 -0.28226 0.343338 + -2.65797 2.31693 3.40519 -0.890658 -0.303943 0.338153 + -2.59067 2.20433 3.46002 -0.871856 -0.328038 0.363673 + -2.62818 2.5354 3.64319 -0.868149 -0.287172 0.404783 + -2.69228 2.10032 3.12978 -0.866146 -0.332279 0.373338 + -2.61717 1.99095 3.18921 -0.858295 -0.354371 0.371147 + -2.54987 1.87835 3.24403 -0.848873 -0.373395 0.374153 + -2.58932 1.72227 2.99017 -0.846744 -0.385045 0.367103 + -2.5124 1.62377 3.06318 -0.838015 -0.396239 0.375133 + -2.46886 1.78873 3.32206 -0.832631 -0.399723 0.383337 + -2.53005 2.083 3.50337 -0.864435 -0.352253 0.358707 + -2.56756 2.41407 3.68654 -0.840207 -0.302682 0.449929 + -2.48791 1.4137 2.88484 -0.840462 -0.45627 0.292304 + -2.40648 1.33423 2.98427 -0.815559 -0.466775 0.34203 + -2.43139 1.53425 3.14124 -0.8157 -0.4135 0.404538 + -2.34569 1.46559 3.23756 -0.80594 -0.439092 0.397063 + -2.39338 1.69648 3.39225 -0.830078 -0.413424 0.374234 + -2.31754 1.1515 2.90997 -0.771437 -0.600781 0.209635 + -2.2371 1.09047 2.99829 -0.73199 -0.598334 0.325862 + -2.32078 1.26567 3.08063 -0.761775 -0.497766 0.414642 + -2.093 0.932672 2.9956 -0.727344 -0.645048 0.234272 + -2.01009 0.871012 3.0782 -0.706425 -0.601006 0.373839 + -2.1368 1.04701 3.10196 -0.692456 -0.55539 0.460485 + -2.22049 1.22221 3.1843 -0.720047 -0.535747 0.441031 + -1.86134 0.698281 3.07398 -0.655973 -0.645351 0.391435 + -1.92477 0.837049 3.16022 -0.611667 -0.544957 0.573485 + -2.05149 1.01305 3.18398 -0.659113 -0.566861 0.494205 + -2.12533 1.1769 3.28579 -0.671819 -0.578709 0.462337 + -2.26637 1.40325 3.33934 -0.772778 -0.487055 0.406929 + -1.7962 0.650262 3.09175 -0.63669 -0.606658 0.476016 + -1.85963 0.789029 3.178 -0.612233 -0.581127 0.536155 + -1.94244 0.986556 3.28547 -0.629705 -0.577808 0.519239 + -2.01628 1.1504 3.38728 -0.646243 -0.612695 0.454944 + -2.17121 1.35793 3.44083 -0.723357 -0.534965 0.43654 + -1.73412 0.564605 3.06711 -0.515192 -0.640653 0.569333 + -1.73363 0.618536 3.1267 -0.458439 -0.6538 0.601979 + -1.77198 0.749834 3.24148 -0.46805 -0.60495 0.644177 + -1.85479 0.947356 3.34897 -0.666573 -0.594576 0.449621 + -1.66348 0.541346 3.0962 -0.560467 -0.593837 0.577265 + -1.65978 0.59553 3.13895 -0.551915 -0.567521 0.610991 + -1.69813 0.726735 3.25369 -0.538474 -0.657094 0.527517 + -1.66356 0.494942 3.03757 -0.522959 -0.698496 0.488485 + -1.5765 0.47587 3.1152 -0.582342 -0.680957 0.444043 + -1.57356 0.529691 3.20318 -0.690582 -0.549312 0.470481 + -1.56985 0.583876 3.24593 -0.796085 -0.439406 0.416138 + -1.57678 0.433581 3.05125 -0.527025 -0.741342 0.415519 + -1.48361 0.423983 3.15228 -0.54046 -0.751175 0.378997 + -1.46315 0.457696 3.25048 -0.580016 -0.712209 0.395399 + -1.46021 0.511524 3.33845 -0.622179 -0.674229 0.39788 + -1.49536 0.600462 3.45061 -0.665155 -0.655132 0.358289 + -1.58563 0.400431 2.97007 -0.453371 -0.809549 0.372942 + -1.49245 0.390835 3.07109 -0.424568 -0.845336 0.324267 + -1.39311 0.423956 3.28332 -0.466359 -0.811614 0.35184 + -1.37265 0.457671 3.38152 -0.587014 -0.716386 0.377102 + -1.37396 0.50998 3.47732 -0.608254 -0.697137 0.379509 + -1.58803 0.369629 2.90282 -0.382283 -0.861703 0.333658 + -1.50742 0.365528 2.97092 -0.357958 -0.88623 0.294047 + -1.41527 0.367643 3.09466 -0.407665 -0.864922 0.29278 + -1.40031 0.392948 3.19483 -0.34258 -0.889776 0.301559 + -1.59505 0.345333 2.8163 -0.297495 -0.915784 0.269881 + -1.51444 0.341323 2.88444 -0.288884 -0.92649 0.241167 + -1.42643 0.338359 2.99638 -0.361807 -0.897124 0.253505 + -1.31135 0.370899 3.26322 -0.455682 -0.823591 0.337717 + -1.31732 0.41586 3.35094 -0.41413 -0.839218 0.352432 + -1.5995 0.32692 2.74539 -0.241215 -0.940917 0.237678 + -1.52447 0.322081 2.78258 -0.254475 -0.941457 0.221137 + -1.43646 0.319034 2.89445 -0.400886 -0.886323 0.231778 + -1.3225 0.341615 3.16494 -0.433311 -0.844193 0.315563 + -1.60492 0.308399 2.65827 -0.240552 -0.949548 0.201229 + -1.5299 0.303479 2.69539 -0.258209 -0.937699 0.232481 + -1.45863 0.292208 2.75412 -0.398208 -0.886978 0.233882 + -1.43366 0.302875 2.84704 -0.498565 -0.835232 0.231994 + -1.3337 0.312427 3.07849 -0.500614 -0.809059 0.30791 + -1.6041 0.296972 2.58606 -0.26783 -0.951418 0.15189 + -1.53775 0.278788 2.59336 -0.276041 -0.943865 0.181437 + -1.46648 0.267522 2.65207 -0.344302 -0.91691 0.201824 + -1.38725 0.279569 2.84861 -0.413782 -0.884556 0.215276 + -1.36228 0.290151 2.94148 -0.369347 -0.907823 0.198597 + -1.61688 0.289009 2.51586 -0.28857 -0.952577 0.096562 + -1.55053 0.27074 2.5231 -0.251109 -0.961151 0.114601 + -1.6108 0.282559 2.44383 -0.307914 -0.949251 0.064123 + -1.53395 0.261698 2.47116 -0.32043 -0.939161 0.123696 + -1.459 0.23882 2.50859 -0.318432 -0.933297 0.166009 + -1.44907 0.249449 2.58998 -0.316583 -0.935513 0.156813 + -1.38554 0.257779 2.75535 -0.382951 -0.903815 0.190962 + -1.35813 0.192676 2.42711 -0.366869 -0.91929 0.142524 + -1.36248 0.214593 2.51975 -0.360373 -0.915035 0.181227 + -1.35254 0.225228 2.60113 -0.355305 -0.92384 0.142402 + -1.36812 0.239711 2.69324 -0.353859 -0.926213 0.13005 + -1.35254 0.178855 2.33105 -0.375137 -0.915107 0.147824 + -1.22502 0.1292 2.42025 -0.503715 -0.855159 0.122368 + -1.24753 0.147325 2.49866 -0.491099 -0.863072 0.118023 + -1.25187 0.169242 2.5913 -0.529094 -0.8298 0.177456 + -1.26171 0.195051 2.6764 -0.478505 -0.865507 0.148093 + -1.22639 0.11164 2.32647 -0.382186 -0.920909 0.0765589 + -1.09364 0.061061 2.56068 -0.335105 -0.942169 -0.00473835 + -1.11615 0.079097 2.63903 -0.456969 -0.87659 0.150894 + -1.13842 0.10992 2.71005 -0.500592 -0.841312 0.203964 + -1.14825 0.135812 2.7952 -0.542457 -0.7889 0.28875 + -0.896145 0.022032 2.55048 -0.214804 -0.963145 -0.161897 + -0.952262 0.022123 2.61172 -0.203659 -0.978692 -0.0261792 + -0.983929 0.03359 2.68686 -0.249332 -0.949588 0.190041 + -1.00619 0.064412 2.75787 -0.283769 -0.918875 0.274125 + -0.803247 0.008962 2.48331 -0.158851 -0.978311 -0.132942 + -0.814194 0.000593 2.56841 -0.12055 -0.992694 -0.00509737 + -0.845861 0.012058 2.64355 -0.107171 -0.984322 0.14009 + -0.866441 0.031135 2.72791 -0.112306 -0.960205 0.255722 + -0.657184 0.01911 2.37374 -0.0147508 -0.976254 -0.216126 + -0.675869 -0.000111 2.45303 -0.0695588 -0.977366 -0.199795 + -0.686816 -0.008481 2.53812 -0.0908094 -0.994179 -0.0579866 + -0.703071 -0.008483 2.62033 -0.107308 -0.991085 0.078968 + -0.499512 0.022608 2.37428 0.0102038 -0.961159 -0.275806 + -0.518198 0.003392 2.45356 -0.0204655 -0.96135 -0.274569 + -0.539283 -0.019714 2.52918 -0.0416273 -0.990242 -0.132996 + -0.555538 -0.019623 2.61142 -0.0525226 -0.996237 0.0689479 + -0.331538 0.051209 2.27994 -0.100796 -0.937161 -0.334021 + -0.352717 0.023041 2.35593 -0.103715 -0.934538 -0.340415 + -0.367796 -0.000722 2.43029 -0.0973485 -0.946152 -0.308738 + -0.388881 -0.023827 2.5059 -0.056209 -0.982144 -0.179537 + -0.198736 0.042713 2.24145 -0.078837 -0.938607 -0.33586 + -0.21426 0.01562 2.31178 -0.0900101 -0.932855 -0.348827 + -0.229339 -0.00815 2.38615 -0.0575547 -0.96312 -0.262843 + -0.23537 -0.024098 2.46137 -0.00773696 -0.989474 -0.144503 + -0.091123 0.070783 2.16104 0.184411 -0.934218 -0.305335 + -0.102384 0.045062 2.23058 0.130922 -0.939753 -0.31579 + -0.117908 0.017966 2.30092 0.16783 -0.944094 -0.283758 + -0.127574 -0.000582 2.37404 0.191788 -0.961106 -0.198729 + -0.037665 0.080134 2.17804 0.337094 -0.864903 -0.371902 + -0.048927 0.054415 2.24759 0.230597 -0.932495 -0.277991 + -0.059922 0.03462 2.32127 0.240626 -0.944363 -0.224226 + -0.069588 0.016073 2.3944 0.216533 -0.959851 -0.178325 + -0.003058 0.11597 2.14477 0.163545 -0.956035 -0.243415 + -0.010834 0.082213 2.20244 0.3746 -0.851261 -0.367462 + -0.014994 0.056002 2.26444 0.256505 -0.919409 -0.298146 + -0.025989 0.036207 2.33812 -0.15586 -0.944153 -0.290313 + 0.003058 0.11597 2.14477 -0.158852 -0.935086 -0.31683 + -0.003058 0.082127 2.21059 0.187122 -0.896754 -0.401021 + -0.007218 0.056001 2.27264 0.106277 -0.93326 -0.343121 + 0.029889 0.113896 2.12036 -0.433885 -0.852333 -0.292014 + 0.010834 0.082213 2.20244 -0.374604 -0.851261 -0.367459 + 0.003058 0.082127 2.21059 -0.18711 -0.89676 -0.401013 + 0.007227 0.056001 2.27264 -0.106401 -0.933287 -0.343009 + -0.007218 0.024066 2.34035 -0.243394 -0.909678 -0.33652 + 0.079232 0.091678 2.08985 -0.289449 -0.927352 -0.237145 + 0.037665 0.080134 2.17804 -0.359894 -0.871334 -0.333545 + 0.048925 0.054415 2.24759 -0.24533 -0.92584 -0.287459 + 0.015003 0.055997 2.26445 -0.256553 -0.919418 -0.298081 + 0.072394 0.110565 2.02133 -0.329107 -0.930207 -0.162492 + 0.161487 0.095491 2.01744 -0.0685538 -0.985789 -0.153364 + 0.171288 0.084975 2.09565 -0.0115078 -0.98139 -0.191679 + 0.091123 0.070783 2.16104 -0.143059 -0.94941 -0.279562 + 0.102382 0.045057 2.23059 -0.122777 -0.936224 -0.329257 + 0.154552 0.107445 1.94174 -0.120366 -0.984145 -0.130269 + 0.291431 0.091702 2.046 -0.0565842 -0.99577 -0.0723881 + 0.301232 0.081181 2.12422 -0.0199479 -0.992998 -0.116439 + 0.315981 0.072491 2.20528 0.0470769 -0.976937 -0.208274 + 0.183179 0.063995 2.16679 0.0456908 -0.957181 -0.285862 + 0.285543 0.092543 1.96235 -0.101498 -0.992377 -0.0699049 + 0.41841 0.078475 1.97131 -0.11929 -0.989789 -0.0780191 + 0.424298 0.077633 2.05497 -0.114148 -0.99342 -0.00929113 + 0.4416 0.074308 2.13813 -0.0853809 -0.994554 -0.0597712 + 0.42024 0.092654 1.88995 -0.115153 -0.979433 -0.165681 + 0.54972 0.058582 1.96297 -0.101911 -0.991811 -0.0769779 + 0.566166 0.059859 2.04836 -0.0992237 -0.995054 0.00470803 + 0.583467 0.056539 2.13151 -0.0993196 -0.994846 -0.0204205 + 0.688824 0.049855 1.99168 0.0382392 -0.992 -0.120303 + 0.70527 0.051219 2.07712 -0.0494202 -0.998704 -0.0121398 + 0.724318 0.045762 2.15937 -0.0411527 -0.99794 -0.0492164 + 0.615817 0.051409 2.21279 -0.0742989 -0.99312 -0.0905151 + 0.456349 0.065616 2.21918 -0.0626254 -0.989205 -0.132482 + 0.848105 0.045259 2.14045 0.0543518 -0.992657 -0.108063 + 0.867153 0.039802 2.2227 0.0499618 -0.996664 -0.0645339 + 0.867964 0.035107 2.30703 0.0568548 -0.996004 -0.0688691 + 0.756667 0.040633 2.24066 -0.0369891 -0.997551 -0.0593598 + 1.0238 0.072501 2.07606 0.103605 -0.982744 -0.153235 + 1.02656 0.061384 2.16131 0.136539 -0.986719 -0.0879906 + 1.02737 0.056695 2.24564 0.163765 -0.9859 -0.0343876 + 1.02727 0.055147 2.33272 0.203149 -0.979126 -0.00658434 + 0.879902 0.028684 2.38955 0.0652774 -0.997577 -0.0240407 + 1.22545 0.112729 1.96998 0.211976 -0.970946 -0.111036 + 1.22032 0.103022 2.0614 0.259999 -0.964237 -0.0514541 + 1.22022 0.101478 2.14847 0.320432 -0.946994 0.022916 + 1.34103 0.156335 1.88086 0.523063 -0.840983 -0.138394 + 1.33591 0.146628 1.97227 0.521473 -0.851636 -0.0527465 + 1.34864 0.1531 2.04626 0.589787 -0.807353 0.0182312 + 1.21712 0.106865 2.24234 0.333338 -0.942089 0.036791 + 1.39166 0.208942 1.93914 0.703827 -0.70643 -0.0747307 + 1.40439 0.215415 2.01313 0.62135 -0.776022 -0.108235 + 1.34554 0.158488 2.14013 0.474663 -0.880166 0.00172384 + 1.39962 0.228884 1.8724 0.705242 -0.690147 -0.162267 + 1.45855 0.269326 1.90935 0.522432 -0.840345 -0.144514 + 1.46891 0.259892 1.99509 0.49533 -0.852168 -0.168693 + 1.42509 0.205372 2.11312 0.511678 -0.852605 -0.106067 + 1.53293 0.308826 1.84893 0.330094 -0.938016 -0.105662 + 1.53307 0.306576 1.92143 0.391088 -0.916012 -0.0892856 + 1.54342 0.297145 2.00716 0.398761 -0.903806 -0.155318 + 1.48961 0.249849 2.09508 0.496919 -0.854654 -0.150455 + 1.43347 0.208092 2.21021 0.448849 -0.892884 -0.035966 + 1.53008 0.323491 1.76373 0.275938 -0.94598 -0.170235 + 1.64358 0.352114 1.74876 0.253682 -0.959063 -0.125876 + 1.64093 0.345863 1.82318 0.293477 -0.954442 -0.0539524 + 1.64107 0.343527 1.89563 0.281179 -0.957819 -0.0593381 + 1.64148 0.337272 1.96966 0.285172 -0.951481 -0.115591 + 1.65108 0.366223 1.68132 0.184431 -0.967957 -0.170423 + 1.77082 0.395977 1.66818 0.164362 -0.985771 -0.0352348 + 1.76818 0.389645 1.74255 0.185971 -0.978734 -0.0865751 + 1.771 0.382386 1.81952 0.209389 -0.975226 -0.071343 + 1.77141 0.376132 1.89355 0.225647 -0.971576 -0.0715816 + 1.65583 0.378339 1.60973 0.0257995 -0.945029 -0.325967 + 1.77005 0.395597 1.59024 0.0816358 -0.993585 -0.0782656 + 1.85044 0.398633 1.52138 -0.320957 -0.947091 0.00234549 + 1.85122 0.398931 1.59927 -0.151561 -0.987259 0.0484734 + 1.85945 0.403984 1.67471 -0.0536916 -0.998166 0.0279686 + 1.7748 0.407712 1.51866 -0.0619945 -0.989651 -0.129412 + 1.84236 0.406737 1.45075 -0.405369 -0.913879 -0.0223828 + 1.88427 0.36495 1.46772 -0.48708 -0.867401 0.101831 + 1.90111 0.374766 1.54132 -0.396612 -0.911067 0.112498 + 1.90934 0.379825 1.61676 -0.239748 -0.954517 0.177249 + 1.76511 0.411152 1.4421 -0.141135 -0.983091 -0.116677 + 1.83267 0.410092 1.37414 -0.29654 -0.925223 -0.236701 + 1.87618 0.373049 1.39709 -0.648237 -0.751997 -0.119544 + 1.93117 0.334755 1.36422 -0.483302 -0.875141 0.0234159 + 1.81919 0.433354 1.30084 0.00983121 -0.989932 -0.141205 + 1.87003 0.41583 1.3378 -0.51384 -0.795843 -0.320315 + 1.92036 0.393833 1.2301 -0.736894 -0.642779 -0.209338 + 1.92652 0.351051 1.2894 -0.703942 -0.676847 -0.215276 + 1.79441 0.430865 1.22576 0.27621 -0.931744 -0.235715 + 1.85655 0.439092 1.2645 -0.283468 -0.922398 -0.26235 + 1.90726 0.422203 1.15736 -0.792068 -0.57329 -0.209684 + 1.98696 0.346454 1.04956 -0.587609 -0.799014 -0.127645 + 1.9973 0.330459 1.13187 -0.484672 -0.864336 -0.134225 + 1.77727 0.448527 1.15856 0.422272 -0.8665 -0.266203 + 1.8535 0.482551 1.20203 -0.18739 -0.883592 -0.429126 + 1.90421 0.465661 1.09488 -0.756166 -0.637205 -0.148939 + 1.97386 0.374826 0.976819 -0.621314 -0.782562 -0.0395699 + 2.04494 0.342123 0.90966 -0.0715123 -0.991567 -0.108076 + 1.83637 0.500213 1.13484 0.0306055 -0.952491 -0.303024 + 1.88128 0.493808 1.02394 -0.756631 -0.648825 -0.0808453 + 1.93569 0.390765 0.900612 -0.651428 -0.757784 0.0374919 + 1.98702 0.367937 0.75095 -0.327691 -0.940371 -0.0912207 + 2.02519 0.351912 0.827106 -0.189255 -0.979172 -0.0735147 + 1.82411 0.52969 1.06819 -0.0578216 -0.907299 -0.416492 + 1.95867 0.386642 0.672753 -0.371384 -0.92159 -0.112893 + 2.05472 0.382269 0.629927 0.065554 -0.977113 -0.202366 + 2.07224 0.36711 0.717184 0.116856 -0.977633 -0.174868 + 2.092 0.357321 0.799737 0.323412 -0.944409 -0.0591275 + 2.0973 0.364427 0.890429 0.464803 -0.884773 -0.0336758 + 2.05528 0.326128 0.991967 0.128093 -0.985761 -0.108941 + 2.08196 0.418871 0.48953 0.407847 -0.873923 -0.264424 + 2.11199 0.414984 0.555663 0.452122 -0.842762 -0.292126 + 2.12951 0.399825 0.642919 0.387981 -0.897008 -0.211774 + 2.13558 0.38581 0.72019 0.454304 -0.884833 -0.10334 + 2.14615 0.466202 0.52235 0.629181 -0.65078 -0.424989 + 2.19668 0.44916 0.604469 0.572982 -0.750098 -0.330219 + 2.20274 0.43506 0.68169 0.580376 -0.805838 -0.117426 + 2.14088 0.392917 0.810883 0.573695 -0.819015 0.0093976 + 2.10104 0.361741 0.977082 0.600432 -0.799358 -0.0225296 + 2.19285 0.51342 0.515567 0.613053 -0.568272 -0.548847 + 2.24338 0.496376 0.597685 0.680611 -0.579277 -0.44856 + 2.28997 0.514976 0.652872 0.707388 -0.625578 -0.32902 + 2.23818 0.459144 0.727577 0.592941 -0.80241 -0.0675213 + 2.17632 0.417 0.85677 0.561185 -0.827685 -0.00306734 + 2.28732 0.572307 0.59577 0.741811 -0.45929 -0.488639 + 2.33391 0.590818 0.650907 0.779893 -0.436275 -0.448811 + 2.35739 0.555668 0.72119 0.782201 -0.553962 -0.285109 + 2.3056 0.499835 0.795894 0.616967 -0.78481 -0.0585181 + 2.3564 0.636682 0.641869 0.759233 -0.503021 -0.412959 + 2.36268 0.60947 0.695201 0.851453 -0.376784 -0.364775 + 2.40264 0.642146 0.761807 0.836375 -0.468896 -0.283925 + 2.39735 0.588344 0.787796 0.87413 -0.460995 -0.152907 + 2.38517 0.655248 0.686114 0.781124 -0.571727 -0.250944 + 2.41327 0.679275 0.713097 0.753124 -0.608838 -0.24924 + 2.4371 0.665621 0.797747 0.789215 -0.59173 -0.164303 + 2.41924 0.62912 0.887168 0.835089 -0.550095 0.0046775 + 2.42472 0.70048 0.684769 0.799056 -0.522985 -0.296641 + 2.44773 0.702749 0.749038 0.814101 -0.523923 -0.250488 + 2.4608 0.703778 0.825056 0.890907 -0.450235 -0.0597797 + 2.47306 0.737895 0.783762 0.903579 -0.409227 -0.126798 + 2.48104 0.747248 0.863964 0.914526 -0.403579 -0.0276885 + 2.44294 0.667191 0.914427 0.869972 -0.49307 -0.00555513 + 2.45262 0.684514 0.975823 0.861075 -0.507469 0.03202 + 2.3602 0.564961 1.02569 0.768668 -0.635541 0.0723629 + 2.39861 0.638763 1.21626 0.805622 -0.5874 0.0770369 + 2.38231 0.600476 1.11978 0.789314 -0.609268 0.0759963 + 2.25227 0.468723 1.25478 0.698229 -0.713451 0.0588555 + 2.22755 0.443112 1.16914 0.65457 -0.755285 0.0329122 + 2.33831 0.524184 0.926321 0.719688 -0.693494 0.0334011 + 2.42046 0.677095 1.30547 0.828536 -0.554345 0.0789334 + 2.30903 0.550103 1.42763 0.750774 -0.655896 0.0783519 + 2.27437 0.504326 1.34892 0.731443 -0.67743 0.0779699 + 2.16102 0.400339 1.41963 0.648016 -0.757781 0.0764341 + 2.33088 0.588434 1.51684 0.757616 -0.648607 0.0729866 + 2.22441 0.481562 1.57934 0.694352 -0.708428 0.12651 + 2.18975 0.4357 1.50058 0.67295 -0.732255 0.104599 + 2.36209 0.629195 1.59564 0.781334 -0.619837 0.072931 + 2.28026 0.562414 1.73771 0.692251 -0.701816 0.168054 + 2.24905 0.521653 1.65891 0.687522 -0.71591 0.121601 + 2.14602 0.429243 1.66256 0.598414 -0.77815 0.190744 + 2.12043 0.391848 1.58513 0.5609 -0.810215 0.170125 + 2.44107 0.741639 1.49588 0.858054 -0.509507 0.0643884 + 2.37651 0.663807 1.68489 0.810918 -0.571291 0.126642 + 2.28961 0.596452 1.82015 0.691577 -0.69423 0.199415 + 2.17756 0.505198 1.82421 0.626008 -0.737496 0.253404 + 2.17066 0.469328 1.74214 0.614265 -0.75993 0.212565 + 2.45187 0.773462 1.59656 0.874339 -0.47292 0.108989 + 2.37738 0.689146 1.775 0.824266 -0.540742 0.167879 + 2.29048 0.621709 1.9102 0.687285 -0.679971 0.255495 + 2.18691 0.539241 1.90664 0.616385 -0.74181 0.264171 + 2.10576 0.47921 1.92562 0.564836 -0.78536 0.253315 + 2.5209 0.910411 1.57756 0.90282 -0.421401 0.0856562 + 2.45124 0.806408 1.69129 0.875849 -0.46505 0.128908 + 2.37676 0.722098 1.86973 0.839628 -0.462381 0.285005 + 2.28774 0.657035 1.99442 0.726418 -0.57156 0.381623 + 2.19008 0.578291 1.98821 0.623762 -0.714053 0.317883 + 2.52867 0.942755 1.67753 0.912805 -0.396344 0.0984824 + 2.45901 0.838753 1.79127 0.858049 -0.484414 0.17057 + 2.35716 0.768187 1.95149 0.819581 -0.469273 0.32874 + 2.26814 0.703124 2.07619 0.753854 -0.559826 0.343947 + 2.18734 0.613617 2.07242 0.667351 -0.684937 0.292412 + 2.57475 1.08248 1.66552 0.950545 -0.295178 0.0966118 + 2.57155 1.11526 1.79054 0.944891 -0.30605 0.116247 + 2.52548 0.975537 1.80256 0.914342 -0.372792 0.158128 + 2.45238 0.870138 1.88291 0.830781 -0.50723 0.229174 + 2.35053 0.799572 2.04313 0.770175 -0.596041 0.227081 + 2.59824 1.09167 1.44121 0.950668 -0.246942 0.187751 + 2.60356 1.16593 1.62819 0.958696 -0.274437 0.0747358 + 2.62389 1.22028 1.49886 0.951311 -0.279535 0.129874 + 2.64445 1.30412 1.55343 0.939656 -0.326798 0.101239 + 2.62411 1.24978 1.68276 0.954808 -0.291124 0.0599066 + 2.64442 1.24894 1.44861 0.814674 -0.398533 0.421281 + 2.66485 1.33239 1.50287 0.812294 -0.468549 0.347333 + 2.68044 1.42697 1.65945 0.904838 -0.42075 0.0651016 + 2.67129 1.41559 1.73735 0.915336 -0.397523 0.0643014 + 2.61496 1.2384 1.76067 0.948755 -0.301931 0.093284 + 2.70609 1.36395 1.48141 0.791247 -0.472594 0.388049 + 2.70084 1.45524 1.60889 0.870726 -0.459734 0.174591 + 2.78395 1.59133 1.59757 0.787807 -0.605392 0.113405 + 2.67396 1.43038 1.80435 0.919037 -0.390839 0.0511513 + 2.60791 1.25902 1.86534 0.939973 -0.329719 0.0879526 + 2.74541 1.52447 1.57417 0.864816 -0.467209 0.183871 + 2.90461 1.70028 1.54007 0.866201 -0.499645 0.00711979 + 2.87939 1.69471 1.66272 0.793177 -0.58475 0.170111 + 2.75873 1.58567 1.72017 0.831363 -0.534576 0.151868 + 2.69898 1.49683 1.84245 0.910648 -0.407222 0.069928 + 2.96054 1.88031 1.66985 0.99253 -0.119298 -0.0255294 + 2.92564 1.84141 1.81123 0.891443 -0.40446 0.204307 + 2.78036 1.65231 1.87676 0.844401 -0.508476 0.168641 + 2.72062 1.56338 1.99899 0.922727 -0.380864 0.0593083 + 2.97736 2.1481 2.00502 0.959823 -0.24875 0.129861 + 2.94247 2.1092 2.14639 0.951548 -0.269409 0.148241 + 2.90194 2.0281 2.26247 0.92428 -0.348229 0.156342 + 2.82662 1.79901 2.02526 0.855891 -0.478772 0.195521 + 3.01987 2.36333 2.07983 0.987932 -0.144265 0.0563761 + 3.00149 2.35754 2.22905 0.965788 -0.230895 0.118072 + 2.97441 2.31554 2.36321 0.958536 -0.251 0.134936 + 2.93387 2.23443 2.47928 0.944679 -0.282818 0.166119 + 2.83818 1.92807 2.39191 0.920875 -0.365786 0.134867 + 3.02077 2.3673 1.93415 0.993387 0.0078276 -0.114545 + 3.02802 2.51664 2.20689 0.994751 -0.0950307 0.037931 + 3.01751 2.4999 2.34988 0.982252 -0.157549 0.101779 + 2.99042 2.45789 2.48404 0.965403 -0.206231 0.159581 + 2.9537 2.39974 2.60716 0.950701 -0.233574 0.203986 + 2.99255 2.32319 1.78795 0.987705 -0.0415422 -0.15071 + 3.02892 2.52052 2.06117 0.996525 -0.0829995 -0.00695802 + 3.05121 2.75296 2.22377 0.995407 -0.0916072 0.0277883 + 3.03966 2.71913 2.35896 0.992703 -0.102171 0.0640396 + 3.02916 2.70248 2.502 0.987232 -0.116406 0.108735 + 2.97632 2.33456 1.65087 0.977253 -0.0384652 -0.208559 + 3.03153 2.54161 1.91944 0.992019 -0.11236 -0.0572146 + 3.05381 2.77414 2.08209 0.996481 -0.0836835 -0.00470311 + 3.06812 3.01108 2.40629 0.99495 -0.0870433 0.0499732 + 3.05657 2.97725 2.54149 0.987999 -0.114326 0.103863 + 3.01529 2.55297 1.78236 0.986964 -0.113999 -0.113608 + 3.0561 2.83204 1.959 0.996103 -0.0805939 -0.0358342 + 3.0788 3.08234 2.28906 0.997438 -0.0693568 0.017529 + 3.08929 3.3725 2.4613 0.998344 -0.0408288 0.0405364 + 3.07861 3.30131 2.57859 0.995042 -0.0575339 0.0811209 + 3.05736 2.90192 1.83917 0.995429 -0.0615048 -0.07306 + 3.08109 3.14025 2.16597 0.99878 -0.0406927 -0.0279831 + 3.09356 3.44468 2.33028 0.999765 -0.0170492 -0.0134014 + 3.09161 3.65564 2.60148 0.995939 0.0306326 0.0846603 + 3.07773 3.62876 2.73184 0.992443 0.0296511 0.119072 + 3.05017 2.98744 1.73523 0.989288 -0.0302723 -0.142806 + 3.07647 3.21742 2.04991 0.997946 -0.0121458 -0.0629032 + 3.08895 3.52185 2.21422 0.998469 0.000277825 -0.0553154 + 3.09588 3.72791 2.47051 0.997352 0.0638767 0.0347733 + 3.03994 3.10766 1.65941 0.985201 -0.00453093 -0.171341 + 3.06928 3.30294 1.94597 0.995333 0.0101293 -0.0959642 + 3.0787 3.58771 2.08074 0.995121 0.0150615 -0.0975044 + 3.09204 3.80515 2.29671 0.996835 0.0784467 -0.0128625 + 3.02043 3.20382 1.55945 0.976201 0.0156533 -0.2163 + 3.0531 3.37906 1.83273 0.990054 0.0351806 -0.136217 + 3.06252 3.66391 1.96755 0.990079 0.0307592 -0.137101 + 3.0818 3.8711 2.16328 0.993671 0.095148 -0.0597099 + 2.99258 3.29926 1.45715 0.970068 0.0238696 -0.241657 + 3.03359 3.47522 1.73278 0.984992 0.0476094 -0.165905 + 3.04323 3.74227 1.86023 0.98532 0.0411864 -0.165676 + 3.06565 3.93467 2.04759 0.990221 0.104877 -0.0919981 + 2.93487 3.01725 1.2846 0.941673 -0.0671375 -0.329764 + 2.96473 3.39302 1.35695 0.962349 0.0396591 -0.26891 + 3.01117 3.57084 1.63576 0.979717 0.056274 -0.192322 + 3.0208 3.83789 1.76322 0.981362 0.047918 -0.186099 + 3.04636 4.01302 1.94028 0.986886 0.115689 -0.112569 + 2.90994 3.12542 1.19425 0.939049 -0.0476501 -0.340464 + 2.92822 3.48207 1.25391 0.95939 0.0344006 -0.279978 + 2.98331 3.6646 1.53557 0.975552 0.055204 -0.212723 + 2.99674 3.92558 1.66294 0.97917 0.047794 -0.197338 + 3.02354 4.08959 1.83506 0.984495 0.117468 -0.130275 + 2.87343 3.21447 1.09121 0.935428 -0.0378803 -0.351482 + 2.89598 3.56679 1.14817 0.952969 0.0394309 -0.300492 + 2.95881 3.75803 1.43673 0.97358 0.0470454 -0.223447 + 2.97224 4.01901 1.5641 0.978491 0.0493955 -0.200288 + 2.99948 4.17727 1.73478 0.98259 0.121483 -0.140567 + 2.84357 3.31723 0.997228 0.93432 -0.0300914 -0.355161 + 2.85327 3.64454 1.03711 0.95085 0.0234604 -0.308761 + 2.92656 3.84275 1.33099 0.969922 0.0374312 -0.240523 + 2.9469 4.10375 1.46152 0.978436 0.0449607 -0.201595 + 2.9735 4.26459 1.63814 0.98167 0.126259 -0.142764 + 2.80086 3.39498 0.886163 0.924 -0.0217662 -0.381773 + 2.81888 3.72601 0.929804 0.939823 0.0219247 -0.340958 + 2.90137 3.92205 1.22085 0.969124 0.0179812 -0.245919 + 2.92172 4.18305 1.35138 0.978142 0.0438218 -0.203266 + 2.94816 4.34934 1.53556 0.98211 0.125763 -0.140157 + 2.86699 4.00351 1.11354 0.961796 0.0128639 -0.273463 + 2.89466 4.25686 1.24234 0.975437 0.0416533 -0.216304 + 2.92278 4.42895 1.43246 0.979885 0.13416 -0.147738 + 2.88307 4.67932 1.54261 0.961676 0.264774 -0.0712351 + 2.90846 4.59979 1.64576 0.967398 0.248919 -0.0467011 + 2.86733 4.33374 1.13038 0.971432 0.0498883 -0.232014 + 2.89572 4.50276 1.32343 0.975306 0.151458 -0.160747 + 2.85403 4.73817 1.43067 0.953931 0.281099 -0.104879 + 2.8077 4.92047 1.67653 0.931559 0.363585 0.0020652 + 2.82123 4.86942 1.79256 0.933956 0.355987 0.031622 + 2.8645 4.56131 1.20821 0.968644 0.165196 -0.185577 + 2.8228 4.79673 1.31545 0.937833 0.320255 -0.133815 + 2.77865 4.97932 1.56459 0.900078 0.42536 -0.0944897 + 2.66938 5.20707 1.70372 0.861152 0.50567 -0.0521084 + 2.68816 5.16972 1.81502 0.881064 0.469688 0.0558559 + 2.78712 4.84956 1.20634 0.927483 0.345742 -0.142255 + 2.73246 5.02505 1.45579 0.880609 0.457721 -0.122556 + 2.62319 5.25279 1.59493 0.8607 0.503054 -0.0783006 + 2.69677 5.07788 1.34668 0.906637 0.417358 -0.0618144 + 2.59562 5.29916 1.50761 0.888302 0.459158 -0.00966126 + 2.49325 5.47997 1.76125 0.828482 0.5588 0.0368802 + 2.50869 5.45074 1.83768 0.816103 0.575279 0.0550381 + 2.52747 5.41347 1.94903 0.818354 0.566771 0.0952226 + 2.66976 5.13291 1.25057 0.916567 0.396717 -0.0501943 + 2.5686 5.35419 1.4115 0.895084 0.445878 -0.00409296 + 2.45205 5.57126 1.60493 0.855363 0.510268 0.0893337 + 2.46568 5.52634 1.67394 0.855636 0.511427 0.0795583 + 2.53978 5.40978 1.32602 0.891634 0.452755 0.00138334 + 2.42323 5.62676 1.5194 0.820668 0.571308 0.0105456 + 2.22626 5.84969 1.68367 0.715355 0.696712 0.0534761 + 2.30465 5.76602 1.73179 0.768168 0.633483 0.0928311 + 2.31828 5.7211 1.80079 0.784566 0.580301 0.21842 + 2.38425 5.67106 1.43747 0.80256 0.596463 -0.0113856 + 2.18727 5.894 1.60173 0.707731 0.703387 0.0660502 + 1.92192 6.12256 1.69465 0.603293 0.792438 0.0898832 + 1.98527 6.0613 1.81496 0.630317 0.760334 0.156816 + 2.06366 5.97762 1.86309 0.680932 0.711282 0.174382 + 2.45255 5.55625 1.13032 0.834792 0.542952 -0.0912464 + 2.32895 5.74736 1.34111 0.796858 0.604132 0.0064982 + 2.19092 5.90505 1.48339 0.73271 0.676171 0.0769918 + 2.25966 5.83674 1.19491 0.771762 0.634502 -0.0423199 + 2.12164 5.99442 1.33719 0.699671 0.714289 0.0158527 + 1.92557 6.13361 1.57631 0.622918 0.775771 0.100762 + 1.58307 6.34482 1.72328 0.494798 0.857881 0.138622 + 1.65687 6.28328 1.83928 0.508842 0.848622 0.144637 + 2.37255 5.63181 0.907443 0.837481 0.532479 -0.12285 + 2.23624 5.85057 1.06815 0.775208 0.626154 -0.0835615 + 2.02499 6.07968 1.26831 0.651464 0.758672 -0.0033258 + 1.82892 6.21878 1.50738 0.580012 0.80809 0.102846 + 2.3171 5.68751 0.806972 0.804445 0.57095 -0.163963 + 2.24643 5.76772 0.768239 0.7804 0.604823 -0.158636 + 2.16557 5.93087 1.02946 0.734497 0.674131 -0.0778547 + 1.93897 6.14683 1.14961 0.635689 0.771607 -0.0228731 + 1.74926 6.28213 1.38726 0.565457 0.822407 0.0624813 + 2.18471 5.82591 0.672854 0.771632 0.615361 -0.160982 + 2.07956 5.99811 0.910802 0.711352 0.694328 -0.10903 + 1.84073 6.22417 1.02166 0.635503 0.771967 -0.0142103 + 2.09022 5.90723 0.568006 0.747037 0.642696 -0.169937 + 1.98507 6.07943 0.805954 0.701737 0.704546 -0.10574 + 1.70047 6.33976 0.889051 0.602793 0.797458 -0.026489 + 1.54913 6.43287 1.13137 0.529964 0.84682 0.0450993 + 1.65102 6.35946 1.25932 0.558933 0.827692 0.0501974 + 2.02026 5.96716 0.478801 0.746139 0.647236 -0.156082 + 1.84481 6.19502 0.673343 0.672512 0.731975 -0.109273 + 1.56641 6.42612 0.776263 0.551043 0.833121 -0.0475507 + 1.97917 5.98423 0.353645 0.753089 0.635215 -0.171343 + 1.80372 6.21208 0.548196 0.67623 0.724477 -0.133586 + 1.90528 6.04599 0.268878 0.707469 0.675386 -0.208185 + 1.8027 6.13603 0.252724 0.664243 0.717764 -0.208796 + 1.70115 6.30212 0.532041 0.628295 0.7681 -0.123566 + 1.97283 5.91634 0.133034 0.760599 0.589064 -0.272934 + 1.89152 5.97653 0.048988 0.722804 0.620963 -0.303247 + 1.71826 6.19427 0.17425 0.637824 0.737143 -0.223161 + 1.55972 6.38729 0.440731 0.576227 0.800299 -0.165785 + 1.42498 6.51129 0.684952 0.502546 0.863928 -0.0327935 + 1.84166 5.9073 -0.148702 0.700996 0.559618 -0.442078 + 1.80708 6.03477 -0.029486 0.691803 0.63848 -0.337271 + 1.71078 6.09582 -0.096035 0.640532 0.668867 -0.377274 + 1.61436 6.25035 0.099903 0.591625 0.767005 -0.248361 + 1.74535 5.96835 -0.215251 0.652593 0.582886 -0.484114 + 1.63947 6.03127 -0.271635 0.58603 0.608977 -0.534524 + 1.60914 6.16113 -0.145152 0.588265 0.696561 -0.410788 + 1.51273 6.31567 0.050778 0.556136 0.795907 -0.23926 + 1.66853 5.92133 -0.356413 0.58496 0.548362 -0.597596 + 1.53006 6.08995 -0.313864 0.51805 0.632289 -0.576052 + 1.49973 6.2198 -0.187381 0.504857 0.729962 -0.460733 + 1.44807 6.32948 -0.029744 0.486299 0.810333 -0.326916 + 1.34707 6.48501 0.323472 0.434776 0.870944 -0.228966 + 1.5802 5.88425 -0.457982 0.508504 0.520305 -0.68608 + 1.55406 5.9805 -0.404688 0.507557 0.564844 -0.650643 + 1.41123 6.15387 -0.342177 0.429292 0.666181 -0.609845 + 1.38259 6.26348 -0.226426 0.412512 0.760641 -0.501257 + 1.33093 6.37315 -0.068788 0.368896 0.852819 -0.369614 + 1.5864 5.73574 -0.567952 0.526086 0.518095 -0.674397 + 1.4557 5.94005 -0.496631 0.427738 0.539782 -0.725035 + 1.43523 6.04441 -0.432993 0.433227 0.584038 -0.68645 + 1.28798 6.19373 -0.374023 0.358962 0.692118 -0.626194 + 1.25934 6.30343 -0.25822 0.30526 0.801726 -0.513861 + 1.44985 5.60658 -0.768845 0.48268 0.545301 -0.685323 + 1.4619 5.79162 -0.606549 0.449183 0.561326 -0.695088 + 1.33366 5.99449 -0.521319 0.373692 0.559552 -0.739768 + 1.31319 6.09876 -0.457732 0.368104 0.608093 -0.703365 + 1.15742 6.23121 -0.400348 0.255656 0.726888 -0.637395 + 1.44808 5.44719 -0.897173 0.510311 0.543693 -0.666319 + 1.32284 5.6734 -0.794788 0.426016 0.582979 -0.691842 + 1.33489 5.85845 -0.632493 0.40463 0.588736 -0.69976 + 1.20237 6.05825 -0.532572 0.295362 0.578077 -0.76065 + 1.18264 6.13625 -0.484056 0.282958 0.621704 -0.730355 + 1.33258 5.38391 -1.03137 0.458855 0.520082 -0.720393 + 1.32162 5.51597 -0.931708 0.454826 0.579427 -0.676312 + 1.19309 5.74158 -0.811476 0.347673 0.616529 -0.70641 + 1.2036 5.92221 -0.643737 0.325352 0.619168 -0.714687 + 1.06634 6.09804 -0.546688 0.240416 0.595091 -0.766855 + 1.50598 5.18236 -1.06228 0.482678 0.493962 -0.723204 + 1.30942 5.2666 -1.11779 0.390946 0.457269 -0.798791 + 1.20078 5.45425 -1.0632 0.395662 0.555692 -0.731203 + 1.19188 5.58415 -0.948395 0.375159 0.62079 -0.688386 + 1.05597 5.78718 -0.829051 0.263708 0.649597 -0.713079 + 1.33486 5.16617 -1.16584 0.341677 0.42085 -0.840323 + 1.06543 5.24125 -1.21968 0.299315 0.33008 -0.895242 + 1.55249 4.99254 -1.1583 0.409704 0.457924 -0.788954 + 1.31379 5.08385 -1.20386 0.294403 0.368036 -0.881973 + 1.52869 4.93441 -1.19322 0.316268 0.411183 -0.854929 + 1.28999 5.02564 -1.23883 0.238531 0.295858 -0.924971 + 1.06721 5.0593 -1.27034 0.184419 0.161831 -0.969433 + 1.69867 4.78061 -1.20703 0.265382 0.21928 -0.938876 + 1.49433 4.89358 -1.22729 0.236548 0.256727 -0.937089 + 1.29489 4.96095 -1.25018 0.15758 0.131234 -0.978747 + 1.07212 4.99461 -1.28169 0.150994 0.0642519 -0.986444 + 0.934992 4.94724 -1.30044 0.196123 -0.414098 -0.888852 + 1.6663 4.75043 -1.21235 -0.170863 -0.462853 -0.869812 + 1.47527 4.84858 -1.23336 -0.100133 -0.47664 -0.873377 + 1.27583 4.91587 -1.2563 0.0200935 -0.42907 -0.903048 + 1.08456 4.94607 -1.27621 0.0707411 -0.499102 -0.863651 + 1.82612 4.63246 -1.18482 -0.216228 -0.421606 -0.880621 + 1.81028 4.61436 -1.13367 -0.650008 -0.734426 -0.195213 + 1.65664 4.72463 -1.14746 -0.476344 -0.858849 -0.188348 + 1.46561 4.82287 -1.16843 -0.336567 -0.898871 -0.280631 + 1.26974 4.87952 -1.20094 -0.13413 -0.919311 -0.369967 + 1.92484 4.48456 -1.11024 -0.763068 -0.584121 -0.276639 + 1.91864 4.47097 -1.01092 -0.775277 -0.486853 -0.402392 + 1.83478 4.60951 -0.994476 -0.702383 -0.626311 -0.33822 + 1.68114 4.71987 -1.00823 -0.422589 -0.841157 -0.337451 + 1.43923 4.81291 -1.04616 -0.247781 -0.878049 -0.409433 + 1.98546 4.35791 -1.00529 -0.839535 -0.27239 -0.47009 + 1.74769 4.29554 -0.775666 -0.677963 -0.0829774 -0.730397 + 1.66383 4.43409 -0.759232 -0.502433 -0.411924 -0.760183 + 1.5848 4.54907 -0.799193 -0.260257 -0.614766 -0.744533 + 1.73801 4.16008 -0.797641 -0.689331 0.0912442 -0.718677 + 1.34224 3.96063 -0.422972 -0.709361 0.178332 -0.681912 + 1.31292 4.05995 -0.369198 -0.558391 -0.196083 -0.806071 + 1.2339 4.17485 -0.409218 0.3591 -0.757839 -0.544726 + 1.33256 3.82517 -0.444947 -0.67465 0.424733 -0.603696 + 1.06559 3.68669 -0.279894 -0.326294 0.597408 -0.732555 + 1.12487 3.77227 -0.232133 -0.468155 0.519229 -0.715005 + 1.09555 3.87159 -0.178358 0.221535 -0.200561 -0.954305 + 1.19592 4.12414 -0.451392 0.413237 -0.697956 -0.584887 + 1.25245 3.70489 -0.517631 -0.625407 0.508854 -0.591552 + 0.985481 3.56642 -0.352577 -0.308117 0.7636 -0.567432 + 0.871163 3.69651 -0.286106 0.0719273 0.458941 -0.88555 + 0.839349 3.77385 -0.251464 0.581297 0.242737 -0.776642 + 1.03377 3.76403 -0.245252 0.077416 0.391376 -0.916969 + 1.26446 3.5853 -0.576089 -0.561306 0.338549 -0.755195 + 0.928646 3.53155 -0.376982 -0.109366 0.598536 -0.793595 + 0.814329 3.66164 -0.310509 0.671868 0.357362 -0.648758 + 1.32136 3.47721 -0.677476 -0.535059 0.421699 -0.732039 + 1.043 3.33197 -0.54971 -0.121252 0.782648 -0.610541 + 0.986104 3.43997 -0.448364 -0.223074 0.575776 -0.786587 + 0.852539 3.53944 -0.380047 0.588592 0.61112 -0.529237 + 0.821278 3.60439 -0.345361 0.684352 0.512137 -0.519016 + 1.34655 3.34276 -0.768394 -0.471292 0.649683 -0.596487 + 1.09483 3.2719 -0.671261 -0.0538216 0.923937 -0.378739 + 0.955696 3.37117 -0.540198 0.572719 0.758127 -0.311829 + 0.909997 3.44794 -0.45138 0.516243 0.725989 -0.454348 + 1.41999 3.30677 -0.932065 -0.388224 0.859462 -0.332575 + 1.16827 3.23591 -0.834932 0.0315517 0.992507 -0.118042 + 1.03005 3.29611 -0.776992 0.506809 0.861345 0.0350618 + 1.00753 3.3111 -0.661758 0.56267 0.817539 -0.122609 + 0.806855 3.56984 -0.807711 0.884405 0.447961 -0.130988 + 1.41563 3.25271 -1.08502 -0.202463 0.977719 -0.0554406 + 1.21245 3.24989 -1.03014 0.280125 0.94657 0.159798 + 1.1716 3.24768 -0.926706 0.409472 0.893231 0.185664 + 1.43534 3.28172 -1.26487 -0.116243 0.985672 0.122221 + 1.23216 3.2789 -1.20999 0.297731 0.940707 0.162561 + 1.12365 3.35118 -1.21599 0.509116 0.847316 0.151184 + 1.09283 3.34785 -1.08122 0.513307 0.839191 0.179651 + 1.05197 3.34555 -0.977836 0.392107 0.86885 0.302245 + 1.39002 3.28857 -1.38413 0.00897914 0.980383 0.196899 + 1.23927 3.29413 -1.31657 0.313813 0.929036 0.195992 + 1.13075 3.36642 -1.32257 0.512054 0.844147 0.158798 + 1.11887 3.39705 -1.45464 0.421399 0.900394 0.108227 + 1.01918 3.43216 -1.38745 0.430606 0.896281 0.106105 + 1.34359 3.3214 -1.449 0.135 0.962923 0.23357 + 1.19284 3.32696 -1.38142 0.532203 0.813873 0.233175 + 1.15402 3.36187 -1.3727 0.528251 0.826333 0.195258 + 1.14214 3.39251 -1.50476 0.273871 0.956796 0.0976515 + 1.27698 3.33323 -1.50369 0.379779 0.881281 0.281268 + 1.23816 3.36814 -1.49496 0.46431 0.833696 0.298943 + 1.25705 3.37972 -1.68482 0.218195 0.955603 0.198023 + 1.09957 3.413 -1.67886 0.317427 0.929034 0.190097 + 0.999874 3.44811 -1.61167 0.465706 0.87811 0.109729 + 0.969968 3.5092 -1.77767 0.467253 0.778559 0.418951 + 0.863759 3.53291 -1.58534 0.517353 0.841872 0.153613 + 0.988359 3.42883 -1.25268 0.455706 0.881631 0.122713 + 0.925856 3.45071 -1.17737 0.318525 0.916563 0.241773 + 0.833852 3.59399 -1.75135 0.563096 0.732523 0.382535 + 0.801256 3.55478 -1.51003 0.523123 0.840922 0.138537 + 0.907259 3.41294 -1.06835 0.42178 0.880007 0.218378 + 1.03338 3.30779 -0.868825 0.457277 0.866899 0.198452 + 0.858799 3.44275 -0.997782 0.646696 0.760813 0.0542887 + 0.836276 3.45774 -0.882547 0.788437 0.598745 -0.140963 + 0.67774 3.63249 -1.42123 0.699861 0.710048 0.0776311 + 0.569798 3.83247 -1.3092 0.943311 0.192645 -0.270283 + 0.6201 4.04521 -1.17587 0.959146 0.0731005 -0.273306 + 0.761156 3.64662 -0.718893 0.934319 0.346447 -0.0838027 + 0.76866 3.74322 -0.619611 0.962712 0.260601 -0.0726095 + 0.7374 3.80817 -0.584916 0.970592 0.234355 -0.0550305 + 0.74215 3.87974 -0.541678 0.983727 0.1076 -0.14389 + 0.627604 4.1418 -1.07658 0.97003 0.0535131 -0.237019 + 0.654169 4.28647 -0.963151 0.96326 -0.0876276 -0.253871 + 0.68488 4.37231 -0.931225 0.921715 -0.217365 -0.321239 + 0.735201 3.93699 -0.506827 0.969757 -0.00188808 -0.244065 + 0.713711 4.4393 -0.891461 0.794623 -0.407201 -0.450291 + 0.764032 4.00398 -0.467072 0.945572 -0.0942645 -0.311459 + 0.848985 3.8722 -0.214011 0.62404 0.269643 -0.733394 + 0.966475 3.81264 -0.233652 -0.0997424 0.132629 -0.986134 + 0.787411 4.51721 -0.888613 0.721344 -0.515995 -0.461965 + 0.773668 4.10225 -0.429669 0.910142 -0.222538 -0.349453 + 0.826991 4.17847 -0.409485 0.842975 -0.380263 -0.380516 + 0.840212 3.94172 -0.18242 0.774758 0.225008 -0.590865 + 0.858422 4.81498 -1.15075 0.5173 -0.722629 -0.458485 + 0.840733 4.59343 -0.868419 0.647954 -0.597957 -0.471808 + 0.928875 4.63847 -0.852437 0.262761 -0.750193 -0.606768 + 0.867609 4.24338 -0.363923 0.541322 -0.633498 -0.552856 + 0.88083 4.00672 -0.136817 0.0900021 -0.220771 -0.971164 + 0.944245 4.89859 -1.23938 0.249841 -0.820847 -0.513605 + 0.946564 4.86002 -1.13477 0.301342 -0.837809 -0.455269 + 1.07847 4.90973 -1.22087 0.0153075 -0.887378 -0.460789 + 1.08079 4.87115 -1.11625 0.0744267 -0.883695 -0.462108 + 1.02178 4.6337 -0.842966 0.0797526 -0.770377 -0.632581 + 0.960515 4.23869 -0.354402 -0.424609 -0.562054 -0.70979 + 0.957702 3.88216 -0.202061 -0.572487 0.197845 -0.795686 + 1.24336 4.86956 -1.07869 -0.0533823 -0.917012 -0.39527 + 1.18436 4.63201 -0.805442 -0.0252765 -0.704625 -0.709129 + 1.03739 4.11413 -0.419655 -0.530826 -0.3916 -0.751581 + 1.34289 4.64202 -0.837188 -0.117168 -0.675489 -0.728002 + 1.05757 3.82089 -0.220541 0.354544 -0.0249305 -0.934707 + 1.06648 5.96789 -0.661263 0.264126 0.64191 -0.719853 + 0.927575 6.13356 -0.558203 0.151563 0.652038 -0.742883 + 1.04661 6.17613 -0.498132 0.213248 0.662049 -0.718482 + 0.90974 6.19394 -0.504984 0.116691 0.707369 -0.697146 + 0.888864 6.26743 -0.428478 0.102982 0.770998 -0.628456 + 1.02573 6.2497 -0.421567 0.176562 0.757605 -0.628379 + 1.1318 6.31711 -0.291521 0.210692 0.832102 -0.513045 + 0.752642 6.27348 -0.439145 0.0631153 0.78146 -0.620755 + 0.868635 6.33987 -0.329947 0.0882681 0.840034 -0.535306 + 1.0001 6.33551 -0.31279 0.155417 0.835658 -0.526803 + 1.09517 6.43098 -0.085945 0.210194 0.883545 -0.418528 + 1.22271 6.41721 -0.052703 0.262854 0.886367 -0.38113 + 0.732413 6.34592 -0.340615 0.0707171 0.829502 -0.554008 + 0.837548 6.44609 -0.14733 0.113305 0.866333 -0.486445 + 0.969017 6.44173 -0.130172 0.16837 0.877295 -0.44945 + 1.05477 6.5639 0.200029 0.253569 0.915079 -0.313582 + 0.600179 6.34797 -0.350374 0.0550388 0.81839 -0.572021 + 0.579928 6.44836 -0.194862 0.0769101 0.841008 -0.535528 + 0.712162 6.44622 -0.185152 0.109193 0.852182 -0.511725 + 0.798436 6.5756 0.080752 0.172963 0.899828 -0.400491 + 0.928617 6.57474 0.155851 0.206806 0.911084 -0.356591 + 0.464092 6.45655 -0.206243 0.100041 0.828402 -0.551127 + 0.567921 6.58042 0.016008 0.118704 0.882083 -0.455894 + 0.67305 6.57573 0.04293 0.142592 0.887274 -0.438649 + 0.631543 6.67633 0.252485 0.164598 0.929064 -0.331281 + 0.707501 6.68331 0.327598 0.187633 0.937397 -0.293395 + 0.333038 6.47527 -0.196465 0.0718994 0.823045 -0.563407 + 0.359552 6.60168 -0.006219 0.124456 0.874143 -0.469451 + 0.452085 6.58861 0.004627 0.140861 0.880194 -0.453229 + 0.401713 6.71159 0.279412 0.123813 0.93763 -0.324839 + 0.526414 6.68102 0.225571 0.0944628 0.924418 -0.369496 + 0.204636 6.49173 -0.188379 0.0542598 0.823742 -0.564363 + 0.23115 6.61823 0.001916 0.0653113 0.872478 -0.484269 + 0.309179 6.72467 0.268558 0.13867 0.941593 -0.306878 + 0.072926 6.62302 0.00042 0.0159541 0.86912 -0.494343 + 0.052708 6.71495 0.189992 0.0152879 0.93025 -0.366607 + 0.210932 6.71016 0.191489 0.0954653 0.924458 -0.36914 + 0.150956 6.82104 0.562248 0.0391639 0.980834 -0.190868 + -0.072927 6.49919 -0.186687 -0.0199643 0.827386 -0.561278 + -0.072927 6.62302 0.00042 -0.0167477 0.868659 -0.495128 + -0.052709 6.71495 0.190001 -0.0153295 0.930253 -0.366599 + 0.052708 6.80653 0.485178 0.0184563 0.973096 -0.22966 + -0.204636 6.49173 -0.188379 -0.0533229 0.824431 -0.563445 + -0.23115 6.61823 0.001916 -0.0645307 0.872168 -0.484933 + -0.210932 6.71016 0.191489 -0.0954467 0.924459 -0.369142 + -0.052709 6.80653 0.485178 -0.0178497 0.972492 -0.232251 + 0.100983 6.86309 0.880213 0.0293859 0.99735 -0.0665491 + -0.333038 6.47527 -0.196465 -0.0791032 0.826543 -0.557288 + -0.359552 6.60168 -0.006219 -0.133421 0.867632 -0.478971 + -0.309181 6.72467 0.268558 -0.130659 0.937209 -0.323369 + -0.150957 6.82104 0.562248 -0.0420738 0.980531 -0.191803 + -0.464092 6.45655 -0.206243 -0.0954008 0.832238 -0.546148 + -0.452085 6.58861 0.004627 -0.133058 0.876516 -0.462617 + -0.401714 6.71159 0.279412 -0.13257 0.933801 -0.332326 + -0.371308 6.80834 0.581647 -0.118317 0.974849 -0.188863 + -0.579927 6.44836 -0.194862 -0.0836925 0.845523 -0.52734 + -0.56792 6.58042 0.016008 -0.130094 0.875833 -0.464749 + -0.526414 6.68102 0.225571 -0.0944586 0.924423 -0.369486 + -0.71216 6.44622 -0.185152 -0.101872 0.856561 -0.505891 + -0.673048 6.57573 0.04293 -0.136295 0.883186 -0.448782 + -0.631543 6.67633 0.252485 -0.164593 0.929057 -0.331303 + -0.496008 6.77776 0.527814 -0.133023 0.963023 -0.234291 + -0.732411 6.34592 -0.340623 -0.073803 0.831437 -0.550696 + -0.837548 6.44609 -0.14733 -0.123621 0.873256 -0.471318 + -0.798436 6.5756 0.080752 -0.192901 0.890874 -0.411257 + -0.707503 6.68331 0.327598 -0.190056 0.940027 -0.283246 + -0.888862 6.26743 -0.428478 -0.107564 0.77391 -0.624094 + -0.868633 6.33987 -0.329947 -0.0923583 0.838026 -0.537756 + -0.969017 6.44173 -0.130172 -0.155915 0.884453 -0.439811 + -0.928617 6.57474 0.155851 -0.202306 0.908179 -0.366448 + -0.837684 6.68236 0.402646 -0.217927 0.946081 -0.239662 + -1.02573 6.2497 -0.421567 -0.173619 0.759717 -0.626647 + -1.0001 6.33551 -0.31279 -0.151888 0.833586 -0.531097 + -1.09517 6.43098 -0.085945 -0.216241 0.88683 -0.408377 + -1.05477 6.5639 0.200029 -0.266321 0.908536 -0.321926 + -1.04659 6.17613 -0.498132 -0.193025 0.649367 -0.73557 + -1.18263 6.13625 -0.484056 -0.284942 0.620036 -0.731002 + -1.15742 6.23121 -0.400348 -0.268276 0.734648 -0.623153 + -1.13179 6.31711 -0.291521 -0.223336 0.824761 -0.51951 + -1.20237 6.05825 -0.532572 -0.30057 0.580825 -0.756505 + -1.33366 5.99449 -0.521319 -0.372503 0.560866 -0.739372 + -1.31319 6.09876 -0.457732 -0.365083 0.606388 -0.706405 + -1.28798 6.19373 -0.374023 -0.35047 0.69982 -0.622433 + -1.3349 5.85845 -0.632493 -0.398867 0.586366 -0.705039 + -1.4619 5.79162 -0.606549 -0.454494 0.552984 -0.698315 + -1.4557 5.94013 -0.49658 -0.428492 0.540229 -0.724257 + -1.43523 6.04441 -0.432993 -0.433556 0.583714 -0.686518 + -1.32284 5.6734 -0.794788 -0.423715 0.586801 -0.690022 + -1.44985 5.60658 -0.768845 -0.491605 0.549145 -0.675844 + -1.56957 5.53004 -0.731271 -0.551994 0.509857 -0.65981 + -1.5864 5.73574 -0.567952 -0.518539 0.514297 -0.683093 + -1.5802 5.88425 -0.457982 -0.508224 0.520687 -0.685998 + -1.32162 5.51598 -0.931716 -0.442257 0.574315 -0.688891 + -1.44808 5.44719 -0.897173 -0.509501 0.544854 -0.66599 + -1.5678 5.37064 -0.85959 -0.566267 0.52526 -0.635172 + -1.68818 5.29708 -0.806381 -0.613928 0.504444 -0.607148 + -1.68559 5.46478 -0.67924 -0.604512 0.47579 -0.638897 + -1.45903 5.31513 -0.996836 -0.504378 0.530727 -0.681125 + -1.58714 5.25355 -0.942585 -0.560605 0.527016 -0.63873 + -1.70753 5.17999 -0.889376 -0.613308 0.524746 -0.590335 + -1.77214 5.03741 -0.950809 -0.608362 0.528894 -0.591748 + -1.82292 5.09917 -0.833386 -0.666087 0.512101 -0.542293 + -1.79847 5.22373 -0.746933 -0.662188 0.48557 -0.570727 + -1.79588 5.39142 -0.619783 -0.661573 0.447363 -0.60182 + -1.70243 5.67048 -0.51592 -0.602907 0.471024 -0.643925 + -1.9316 5.02276 -0.765438 -0.71001 0.474878 -0.519977 + -1.90715 5.14732 -0.678985 -0.697412 0.46766 -0.543057 + -1.897 5.32413 -0.550839 -0.695725 0.430373 -0.575105 + -1.81169 5.61589 -0.444181 -0.66235 0.439633 -0.606642 + -2.01005 5.09055 -0.593649 -0.77042 0.412825 -0.485828 + -1.9999 5.26727 -0.465553 -0.74792 0.400571 -0.5293 + -1.91281 5.54861 -0.375237 -0.722968 0.411762 -0.55477 + -1.80395 5.77041 -0.338008 -0.665327 0.462519 -0.586017 + -1.69468 5.825 -0.409757 -0.593959 0.491624 -0.636804 + -2.10918 4.84592 -0.621343 -0.935996 0.261187 -0.235995 + -2.08717 5.00564 -0.514393 -0.83689 0.320051 -0.444053 + -2.08995 5.19612 -0.382712 -0.789898 0.359498 -0.496813 + -2.00236 5.46004 -0.309838 -0.767669 0.393788 -0.505585 + -2.09241 5.38889 -0.226996 -0.791638 0.381233 -0.477464 + -1.99624 5.61467 -0.200263 -0.772364 0.398713 -0.494451 + -1.90669 5.70315 -0.265712 -0.73627 0.439559 -0.514484 + -1.77442 5.8584 -0.300021 -0.655078 0.517386 -0.550623 + -1.66854 5.92133 -0.356405 -0.586813 0.546258 -0.597705 + -2.17516 5.30753 -0.147275 -0.830692 0.350951 -0.432186 + -2.1625 5.46109 -0.042254 -0.824536 0.377936 -0.421075 + -2.07975 5.54245 -0.121966 -0.798066 0.386985 -0.46188 + -1.96919 5.7342 -0.145894 -0.758833 0.460048 -0.461008 + -1.87717 5.79115 -0.227725 -0.713284 0.493917 -0.497263 + -2.12768 5.59788 0.023222 -0.824996 0.432441 -0.363835 + -2.0527 5.66198 -0.067605 -0.801166 0.435727 -0.410213 + -1.93369 5.85036 -0.06688 -0.745557 0.539725 -0.390949 + -1.84166 5.9073 -0.148702 -0.698959 0.558146 -0.447135 + -1.74535 5.96835 -0.215251 -0.652918 0.58248 -0.484164 + -2.08997 5.72607 0.107994 -0.810185 0.493532 -0.316268 + -2.01499 5.79017 0.017166 -0.787434 0.512829 -0.341986 + -1.89153 5.97644 0.048937 -0.724223 0.622166 -0.297339 + -1.80708 6.03468 -0.029536 -0.688262 0.642608 -0.336677 + -1.71078 6.09573 -0.096085 -0.641011 0.668949 -0.376313 + -2.16364 5.6606 0.195989 -0.818788 0.483639 -0.309321 + -2.04672 5.85449 0.217752 -0.783916 0.569111 -0.248171 + -1.97283 5.91634 0.133034 -0.761952 0.587214 -0.273145 + -1.90528 6.04599 0.268878 -0.707426 0.675412 -0.208248 + -1.8027 6.13603 0.252724 -0.67177 0.709909 -0.211552 + -2.1204 5.78911 0.305796 -0.790494 0.56386 -0.239125 + -2.02026 5.96716 0.478801 -0.746 0.645657 -0.163129 + -1.97917 5.98423 0.353645 -0.753105 0.635206 -0.171304 + -1.80372 6.21208 0.548196 -0.676236 0.724473 -0.133579 + -1.70115 6.30212 0.532041 -0.629631 0.768257 -0.115527 + -2.19036 5.72927 0.395052 -0.79939 0.552234 -0.236671 + -2.09022 5.90723 0.568006 -0.751131 0.63769 -0.170745 + -1.98507 6.07943 0.805954 -0.702069 0.704841 -0.101476 + -1.84481 6.19502 0.673343 -0.670561 0.733792 -0.109075 + -2.1847 5.826 0.672904 -0.771011 0.614444 -0.16733 + -2.07955 5.99811 0.910802 -0.706213 0.699721 -0.107953 + -1.84073 6.22417 1.02166 -0.639991 0.768235 -0.0150445 + -1.70047 6.33976 0.889043 -0.602231 0.797612 -0.033674 + -1.56641 6.42612 0.776263 -0.561146 0.826161 -0.0507359 + -1.93897 6.14683 1.14961 -0.635619 0.771678 -0.0224062 + -1.65102 6.35946 1.25932 -0.558442 0.827507 0.0581008 + -1.54913 6.43287 1.13137 -0.521506 0.851986 0.046378 + -1.41507 6.51924 1.01858 -0.460664 0.886927 0.0338941 + -1.74926 6.28213 1.38726 -0.565921 0.822091 0.0624477 + -1.47639 6.44575 1.47206 -0.491568 0.861513 0.127104 + -1.3745 6.51916 1.34411 -0.444877 0.89258 0.0733865 + -1.242 6.58068 1.29897 -0.383659 0.9206 0.0728071 + -1.50341 6.40817 1.60316 -0.481719 0.864848 0.141369 + -1.17018 6.56106 1.67595 -0.397218 0.90393 0.158521 + -1.03768 6.62266 1.63085 -0.354024 0.923295 0.148973 + -1.10299 6.64171 1.17946 -0.347552 0.936491 0.0468164 + -1.27606 6.58026 0.899078 -0.393067 0.919313 0.0190205 + -1.29037 6.45835 1.91044 -0.412719 0.888633 0.199984 + -1.19721 6.52356 1.8071 -0.395055 0.898605 0.190893 + -1.36416 6.39673 2.02638 -0.416889 0.884742 0.208411 + -1.08876 6.45985 2.22505 -0.335848 0.902488 0.269669 + -1.02113 6.51363 2.13009 -0.33801 0.902417 0.267195 + -0.92797 6.57875 2.02669 -0.320919 0.915024 0.244421 + -1.14603 6.40479 2.34221 -0.327107 0.898789 0.291853 + -0.883885 6.41497 2.54317 -0.28579 0.882641 0.373188 + -0.827271 6.46639 2.46352 -0.283355 0.895909 0.342136 + -0.759644 6.52008 2.36851 -0.26753 0.911118 0.313516 + -1.22438 6.35483 2.39954 -0.382324 0.863093 0.329997 + -0.962239 6.36502 2.60049 -0.303404 0.866472 0.39645 + -0.674401 6.34161 2.83165 -0.241724 0.854591 0.459613 + -0.644018 6.42086 2.69499 -0.238509 0.871949 0.427572 + -0.587404 6.47226 2.61534 -0.212713 0.888983 0.405539 + -0.93967 6.31905 2.71111 -0.301833 0.847859 0.435926 + -0.714553 6.27018 2.93436 -0.255892 0.844764 0.469992 + -0.488797 6.21125 3.14743 -0.201175 0.856603 0.475143 + -0.45681 6.34753 2.91038 -0.181123 0.86623 0.465661 + -0.426427 6.4267 2.77367 -0.152582 0.884218 0.441449 + -0.78341 6.18987 3.04706 -0.264561 0.846344 0.462287 + -0.557654 6.13094 3.26013 -0.212371 0.845696 0.489589 + -0.327175 6.15706 3.3087 -0.176016 0.856413 0.48536 + -0.295187 6.29334 3.07165 -0.148549 0.870543 0.469135 + -0.271816 6.35498 2.96229 -0.108517 0.88473 0.453296 + -0.997952 6.13756 2.99886 -0.32085 0.828644 0.458699 + -0.788677 6.06704 3.26661 -0.267711 0.830227 0.488931 + -0.756484 5.99632 3.3973 -0.253489 0.812226 0.525387 + -0.525461 6.06022 3.39082 -0.211965 0.830137 0.515696 + -1.00322 6.01473 3.21841 -0.328164 0.816944 0.474247 + -1.00086 5.90592 3.40228 -0.320699 0.794349 0.515908 + -0.741024 5.91316 3.52434 -0.254345 0.801365 0.541408 + -0.549237 5.97989 3.50496 -0.219053 0.815843 0.535179 + -0.985395 5.82275 3.52933 -0.304387 0.788377 0.534612 + -0.729783 5.82241 3.66751 -0.259229 0.808148 0.528863 + -0.537996 5.88923 3.64818 -0.224039 0.816147 0.532644 + -0.369525 6.00461 3.53995 -0.213401 0.819164 0.532381 + -0.345749 6.08485 3.42576 -0.197699 0.837667 0.509146 + -0.962693 5.72918 3.6804 -0.300143 0.794599 0.527756 + -0.706855 5.73509 3.81456 -0.254 0.803469 0.538443 + -0.530927 5.7715 3.8319 -0.219422 0.80903 0.545275 + -0.368029 5.82088 3.82297 -0.202632 0.809693 0.55076 + -0.375098 5.93861 3.63925 -0.214364 0.818796 0.532561 + -0.939765 5.64185 3.82745 -0.309069 0.776639 0.548916 + -0.693585 5.62984 3.97047 -0.250957 0.781071 0.571794 + -0.517658 5.66625 3.9878 -0.202269 0.780697 0.591269 + -0.355791 5.75569 3.91968 -0.174539 0.789348 0.588614 + -0.148623 5.95613 3.70132 -0.0584016 0.8319 0.551844 + -1.12536 5.39736 4.04032 -0.370535 0.719613 0.587249 + -0.887986 5.53922 3.99263 -0.311417 0.757896 0.573248 + -0.661059 5.50964 4.14565 -0.229294 0.759663 0.608553 + -0.488028 5.58849 4.09428 -0.174387 0.769752 0.614061 + -0.326162 5.67794 4.02615 -0.137856 0.770393 0.622487 + -1.08361 5.29444 4.18419 -0.366161 0.688324 0.626208 + -0.85546 5.41902 4.1678 -0.306028 0.728614 0.612754 + -0.593196 5.41042 4.28431 -0.20229 0.732127 0.650438 + -0.420165 5.48927 4.23294 -0.137508 0.754184 0.642104 + -1.02628 5.18841 4.32803 -0.349541 0.649715 0.675049 + -0.798127 5.31308 4.3117 -0.287399 0.691733 0.662501 + -0.503428 5.31304 4.41678 -0.177091 0.717075 0.674124 + -0.331182 5.372 4.38366 -0.103171 0.737736 0.66716 + -1.31486 5.02819 4.31615 -0.401351 0.614235 0.679435 + -0.960334 5.09124 4.44514 -0.334607 0.611648 0.716886 + -0.708359 5.21562 4.44412 -0.272532 0.659536 0.700527 + -0.460431 5.21435 4.5285 -0.165665 0.669186 0.724392 + -1.62324 4.86473 4.26848 -0.454643 0.594602 0.663135 + -1.24892 4.93102 4.43325 -0.382474 0.594292 0.707482 + -0.884017 5.00403 4.55201 -0.317914 0.619029 0.718146 + -0.632041 5.1284 4.55099 -0.254888 0.612736 0.748055 + -1.58155 4.72317 4.41606 -0.445776 0.563813 0.695269 + -1.52887 4.62331 4.52863 -0.448044 0.536642 0.715033 + -1.19624 4.83116 4.54582 -0.379405 0.602297 0.702346 + -0.8515 4.94003 4.62545 -0.291084 0.617352 0.730853 + -0.547303 5.02682 4.65352 -0.217263 0.593083 0.775274 + -1.85277 4.55415 4.36261 -0.511905 0.519943 0.683821 + -1.83964 4.42295 4.46545 -0.501523 0.469936 0.726385 + -1.74296 4.39244 4.5459 -0.48589 0.463178 0.7412 + -1.42798 4.54238 4.6458 -0.410508 0.495965 0.765181 + -1.16372 4.76716 4.61927 -0.363869 0.564561 0.740857 + -2.06263 4.2746 4.3916 -0.617155 0.406621 0.673631 + -1.98966 4.14767 4.51646 -0.567099 0.345091 0.747871 + -1.89297 4.11716 4.5969 -0.521703 0.329784 0.786809 + -1.64207 4.31151 4.66307 -0.458005 0.413415 0.786969 + -2.20914 4.07508 4.35018 -0.653686 0.320396 0.685596 + -2.13616 3.94806 4.47499 -0.638437 0.253364 0.726777 + -2.06758 3.85189 4.55996 -0.605943 0.209711 0.767368 + -1.82588 4.03272 4.66956 -0.51226 0.286029 0.8098 + -2.29894 4.09032 4.25959 -0.663449 0.320368 0.676166 + -2.38769 3.77091 4.29422 -0.691036 0.143444 0.708444 + -2.31605 3.69854 4.37297 -0.697383 0.0957499 0.710273 + -2.24747 3.60237 4.45794 -0.691897 0.0453037 0.720574 + -2.00049 3.76746 4.63261 -0.57921 0.171054 0.79703 + -2.47749 3.78615 4.20362 -0.721096 0.139234 0.678701 + -2.52876 3.47356 4.15646 -0.763446 -0.0618433 0.642904 + -2.45712 3.40119 4.2352 -0.735795 -0.0829159 0.672109 + -2.38262 3.31487 4.29711 -0.716712 -0.133858 0.684402 + -2.16285 3.53564 4.53012 -0.654839 0.000774119 0.755768 + -2.58947 3.5633 4.09222 -0.794708 -0.0122773 0.606867 + -2.61945 3.19332 3.97685 -0.796538 -0.174258 0.578931 + -2.55453 3.08603 4.02568 -0.7719 -0.206428 0.601298 + -2.48002 2.99971 4.08758 -0.742247 -0.229747 0.629512 + -2.65484 2.87294 3.79956 -0.831109 -0.243685 0.499875 + -2.58992 2.76565 3.84838 -0.799379 -0.259682 0.54181 + -2.51848 2.65663 3.89642 -0.768489 -0.278629 0.576013 + -2.40224 2.90154 4.13742 -0.725062 -0.247261 0.642765 + -2.298 3.24814 4.36929 -0.698267 -0.155859 0.698664 + -2.49612 2.30505 3.73457 -0.793725 -0.327676 0.512474 + -2.41321 2.20392 3.79012 -0.761936 -0.340561 0.550883 + -2.4407 2.55846 3.94625 -0.741223 -0.292733 0.604065 + -2.35401 2.47291 4.00843 -0.724726 -0.300728 0.619947 + -2.32092 2.82189 4.19837 -0.715456 -0.255906 0.650104 + -2.45458 1.99083 3.57362 -0.813558 -0.380307 0.439875 + -2.37167 1.88962 3.62912 -0.787821 -0.392009 0.475043 + -2.28419 1.81926 3.71338 -0.75858 -0.395006 0.518196 + -2.32652 2.11846 3.85235 -0.737533 -0.344721 0.580699 + -2.31407 1.63413 3.49404 -0.797395 -0.432701 0.420632 + -2.22659 1.56377 3.5783 -0.765635 -0.459395 0.450287 + -2.13417 1.51403 3.67706 -0.726652 -0.468889 0.502115 + -2.18866 1.74569 3.78762 -0.723026 -0.402654 0.561341 + -2.23098 2.04488 3.9266 -0.712166 -0.351209 0.607842 + -2.07879 1.30819 3.53959 -0.703278 -0.571865 0.422339 + -1.97879 1.26809 3.64004 -0.671623 -0.573026 0.469642 + -2.03389 1.46269 3.76477 -0.683843 -0.48238 0.54742 + -2.08837 1.69435 3.87533 -0.687656 -0.407438 0.600935 + -1.91628 1.1104 3.48777 -0.691861 -0.613134 0.381307 + -1.82446 1.06329 3.59595 -0.703252 -0.586234 0.402201 + -1.87287 1.23073 3.73175 -0.678957 -0.547529 0.489111 + -1.92797 1.42525 3.85644 -0.65843 -0.475953 0.583042 + -1.76298 0.90034 3.4572 -0.703044 -0.61733 0.353033 + -1.6807 0.861303 3.54682 -0.718566 -0.607542 0.33846 + -1.72597 1.01679 3.69349 -0.738108 -0.552772 0.386834 + -1.77437 1.18415 3.82923 -0.685666 -0.506026 0.523258 + -1.61585 0.687698 3.34331 -0.700927 -0.632266 0.330063 + -1.54136 0.704368 3.54803 -0.681439 -0.65312 0.330265 + -1.59424 0.805556 3.65557 -0.707943 -0.62312 0.332472 + -1.63951 0.960962 3.8022 -0.71875 -0.519554 0.46202 + -1.40911 0.598918 3.58948 -0.595074 -0.701076 0.392911 + -1.44189 0.682476 3.68675 -0.598353 -0.702993 0.384416 + -1.49477 0.783663 3.79429 -0.62331 -0.642359 0.445938 + -1.53374 0.918068 3.89229 -0.645928 -0.5159 0.562694 + -1.66388 1.13845 3.91159 -0.661103 -0.46324 0.590213 + -1.2922 0.579149 3.71252 -0.568148 -0.694064 0.442134 + -1.32498 0.662709 3.80979 -0.537153 -0.714817 0.447776 + -1.38252 0.755475 3.88891 -0.558105 -0.650717 0.514864 + -1.42149 0.88988 3.98692 -0.592683 -0.518961 0.61596 + -1.55811 1.09555 4.00168 -0.634315 -0.445343 0.631913 + -1.29235 0.517844 3.6271 -0.609013 -0.672287 0.420873 + -1.15834 0.476777 3.72603 -0.51464 -0.737264 0.437708 + -1.15819 0.538088 3.81144 -0.517753 -0.695951 0.497577 + -1.18742 0.628462 3.90511 -0.504468 -0.708502 0.493494 + -1.24496 0.721228 3.98423 -0.504889 -0.653722 0.56368 + -1.29105 0.465531 3.53131 -0.502943 -0.796814 0.334867 + -1.16866 0.443531 3.64062 -0.475527 -0.815731 0.329327 + -0.999028 0.407612 3.78343 -0.46603 -0.769689 0.436343 + -0.990719 0.457313 3.86275 -0.469713 -0.713855 0.519405 + -1.01995 0.547601 3.95636 -0.454461 -0.691665 0.561306 + -1.31012 0.446865 3.43944 -0.288667 -0.91798 0.272 + -1.18774 0.424785 3.54869 -0.392568 -0.886534 0.244841 + -1.00935 0.374284 3.69795 -0.425504 -0.872298 0.24092 + -0.889601 0.326565 3.73001 -0.410753 -0.885395 0.217618 + -0.878866 0.352189 3.81043 -0.412184 -0.803745 0.429067 + -1.19881 0.406289 3.46332 -0.399887 -0.860391 0.315939 + -1.02128 0.372296 3.6162 -0.358309 -0.922693 0.142307 + -0.901532 0.324581 3.64824 -0.404619 -0.908649 0.103156 + -0.818256 0.295757 3.73317 -0.382532 -0.897228 0.220572 + -0.807521 0.32129 3.81354 -0.356564 -0.827608 0.433505 + -1.19284 0.361408 3.37566 -0.358705 -0.867184 0.345431 + -1.03236 0.353714 3.53078 -0.33854 -0.914424 0.221855 + -0.911372 0.317569 3.56339 -0.388958 -0.907546 0.158343 + -0.829495 0.290214 3.64637 -0.401557 -0.908886 0.112597 + -1.19868 0.33381 3.29126 -0.323772 -0.888675 0.324697 + -1.04472 0.343259 3.44889 -0.260551 -0.940243 0.219219 + -0.923729 0.307112 3.4815 -0.351057 -0.920093 0.173745 + -0.839335 0.283289 3.56156 -0.386883 -0.913465 0.12611 + -1.20987 0.304616 3.20482 -0.319033 -0.889879 0.326088 + -1.05055 0.315746 3.36455 -0.261537 -0.915099 0.306906 + -0.931271 0.292165 3.39719 -0.321118 -0.912818 0.252285 + -0.842599 0.273449 3.47381 -0.355943 -0.922549 0.149022 + -1.22724 0.281244 3.12211 -0.259298 -0.93868 0.227253 + -1.0655 0.294472 3.2842 -0.251211 -0.918822 0.304399 + -0.94622 0.270982 3.31688 -0.269348 -0.913575 0.304684 + -0.850141 0.258502 3.3895 -0.318009 -0.925426 0.20605 + -1.3309 0.296182 3.03103 -0.39134 -0.893669 0.219565 + -1.25861 0.275212 3.03255 -0.336561 -0.911648 0.235848 + -1.08286 0.271099 3.20148 -0.292172 -0.881512 0.370906 + -0.955817 0.242177 3.23497 -0.25585 -0.882947 0.39363 + -0.848922 0.240285 3.30245 -0.263867 -0.928569 0.261024 + -1.27815 0.254457 2.9473 -0.411056 -0.87378 0.259888 + -1.10375 0.236451 3.12569 -0.390361 -0.827473 0.403615 + -0.976704 0.207529 3.15919 -0.257219 -0.864092 0.432647 + -0.858519 0.211475 3.22055 -0.204674 -0.896785 0.392282 + -1.27644 0.232753 2.85409 -0.415409 -0.880744 0.22743 + -1.12329 0.215782 3.04049 -0.389423 -0.865725 0.314438 + -0.987582 0.174583 3.08025 -0.274462 -0.889022 0.366483 + -0.862611 0.172535 3.13899 -0.18557 -0.893917 0.408014 + -1.27729 0.20953 2.76852 -0.396229 -0.90494 0.155195 + -1.1375 0.190275 2.96227 -0.437359 -0.844223 0.309846 + -1.00179 0.149073 3.00203 -0.304167 -0.889565 0.340817 + -0.87349 0.139587 3.06006 -0.178451 -0.904682 0.386918 + -1.13835 0.167054 2.87669 -0.448971 -0.848297 0.280744 + -1.00819 0.121292 2.91955 -0.320266 -0.884921 0.33815 + -0.87924 0.105543 2.97703 -0.192909 -0.916111 0.351464 + -0.740831 0.076886 2.95827 -0.108706 -0.939587 0.32459 + -0.735081 0.110928 3.0413 -0.136091 -0.924316 0.356538 + -1.0181 0.09005 2.83806 -0.310583 -0.899854 0.306268 + -0.885642 0.077761 2.89455 -0.181811 -0.940328 0.287626 + -0.740988 0.051478 2.87467 -0.0965122 -0.960605 0.26062 + -0.579673 0.064888 2.94204 -0.0474531 -0.964764 0.2588 + -0.574499 0.084859 3.02466 -0.0729616 -0.954356 0.289621 + -0.878345 0.056773 2.8081 -0.151753 -0.957061 0.246994 + -0.733691 0.030489 2.78823 -0.110125 -0.967569 0.227339 + -0.579831 0.039477 2.85846 -0.0353697 -0.956076 0.290978 + -0.41875 0.027249 2.82584 -0.0136209 -0.963887 0.265964 + -0.419744 0.045337 2.90591 -0.0571255 -0.974156 0.218534 + -0.723651 0.010684 2.70473 -0.10459 -0.971748 0.211581 + -0.578916 0.01297 2.77557 -0.0522859 -0.963274 0.263381 + -0.417835 0.000743 2.74295 -0.000300291 -0.968764 0.247986 + -0.252623 0.013328 2.77215 0.00742963 -0.973262 0.229576 + -0.253617 0.031415 2.85222 -0.0556276 -0.987708 0.146079 + -0.568876 -0.006835 2.69207 -0.0506149 -0.979906 0.192931 + -0.412647 -0.015497 2.66368 -0.00305939 -0.983551 0.180604 + -0.251053 -0.004567 2.69474 0.0250989 -0.978808 0.203234 + -0.139327 -0.007745 2.68045 0.0573897 -0.991061 0.120432 + -0.140897 0.010143 2.75787 -0.0912459 -0.979674 0.178644 + -0.399308 -0.028286 2.58303 -0.0233685 -0.998705 0.0451859 + -0.245864 -0.020802 2.61547 0.0529546 -0.986704 0.153659 + -0.137669 -0.014182 2.6022 0.111937 -0.988315 0.103456 + -0.086319 0.003583 2.70243 0.0140312 -0.999222 0.0368526 + -0.084593 0.005254 2.78074 -0.139591 -0.98695 0.0802788 + -0.245797 -0.028469 2.53855 0.0323361 -0.999338 0.0166495 + -0.137601 -0.021854 2.52529 0.189968 -0.981789 -0.0016456 + -0.084661 -0.002766 2.62423 0.0693223 -0.996505 0.0466067 + -0.043617 -0.005494 2.63555 -0.372329 -0.928101 0.000368724 + -0.045034 -0.004085 2.71171 -0.40235 -0.914846 0.0342334 + -0.133605 -0.016529 2.44927 0.21348 -0.968449 -0.128582 + -0.080051 -0.001158 2.54624 0.161011 -0.985857 -0.0464948 + -0.039007 -0.003886 2.55757 -0.344754 -0.934951 -0.0837376 + -0.01377 -0.02925 2.6329 -0.323546 -0.945656 -0.0324408 + -0.015187 -0.027839 2.70906 -0.325786 -0.943135 0.0660271 + -0.076054 0.004253 2.47027 0.215494 -0.971138 -0.102244 + -0.036398 0.005475 2.48295 -0.285958 -0.948344 -0.137374 + -0.01377 -0.022748 2.55703 -0.316563 -0.942784 -0.104624 + 0.013768 -0.022748 2.55703 0.31904 -0.942303 -0.101382 + 0.013768 -0.02925 2.6329 0.32558 -0.94486 -0.0351615 + -0.029931 0.017297 2.40708 -0.227768 -0.947469 -0.224554 + -0.01116 -0.013386 2.48242 -0.302209 -0.936814 -0.176206 + 0.011169 -0.013386 2.48242 0.305559 -0.934796 -0.181082 + 0.039005 -0.003886 2.55757 0.342515 -0.936062 -0.0804491 + 0.043615 -0.005498 2.63556 0.370629 -0.928779 -0.00204399 + -0.01116 0.005243 2.40935 -0.265884 -0.930501 -0.251939 + 0.011169 0.005243 2.40935 0.273892 -0.930536 -0.243077 + 0.036407 0.005475 2.48295 0.281456 -0.948855 -0.143028 + 0.080059 -0.001158 2.54624 -0.140097 -0.989657 -0.0308614 + 0.007227 0.024152 2.3404 0.247769 -0.908647 -0.336111 + 0.02994 0.017302 2.40707 0.223806 -0.950036 -0.217585 + 0.069587 0.016073 2.3944 -0.226598 -0.956161 -0.185498 + 0.076054 0.004253 2.47027 -0.219523 -0.97096 -0.0951173 + 0.025998 0.036207 2.33812 0.154177 -0.944426 -0.290325 + 0.05992 0.03462 2.32127 -0.247528 -0.94531 -0.212413 + 0.127574 -0.000582 2.37404 -0.187255 -0.96054 -0.205666 + 0.133604 -0.016529 2.44927 -0.203643 -0.971492 -0.121378 + 0.13761 -0.021854 2.52529 -0.197223 -0.980318 0.00891414 + 0.117906 0.017966 2.30092 -0.154899 -0.948701 -0.275631 + 0.229339 -0.00815 2.38615 0.0517479 -0.961788 -0.268862 + 0.23537 -0.024098 2.46137 -0.00772249 -0.990875 -0.134565 + 0.245797 -0.028469 2.53855 -0.0291239 -0.999364 0.0205959 + 0.137677 -0.014182 2.6022 -0.138502 -0.986774 0.0842314 + 0.198737 0.042713 2.24145 0.0790131 -0.938649 -0.3357 + 0.214261 0.01562 2.31178 0.0905312 -0.93267 -0.349187 + 0.367796 -0.000722 2.43029 0.115602 -0.939701 -0.321868 + 0.388881 -0.023827 2.5059 0.0613183 -0.982643 -0.17508 + 0.399308 -0.028286 2.58303 0.0142192 -0.998566 0.0516119 + 0.331539 0.051209 2.27994 0.100364 -0.937363 -0.333584 + 0.352718 0.023041 2.35593 0.10372 -0.93444 -0.340682 + 0.518198 0.003392 2.45356 0.035725 -0.963758 -0.264377 + 0.539283 -0.019714 2.52918 0.0662853 -0.985258 -0.15771 + 0.555538 -0.019623 2.61142 0.056973 -0.995726 0.072684 + 0.478334 0.050861 2.29834 -0.0256344 -0.965309 -0.259848 + 0.499512 0.022608 2.37428 0.00516555 -0.956491 -0.291716 + 0.675869 -0.000111 2.45303 0.0499337 -0.982121 -0.181507 + 0.686816 -0.008481 2.53812 0.0755558 -0.994653 -0.0704025 + 0.703071 -0.008483 2.62033 0.100154 -0.991217 0.0863581 + 0.637802 0.036659 2.29194 -0.0313835 -0.981711 -0.187772 + 0.657184 0.019105 2.37374 0.00435097 -0.974719 -0.223391 + 0.803247 0.008962 2.48331 0.156777 -0.978263 -0.135727 + 0.814194 0.000593 2.56841 0.11018 -0.99391 0.00170079 + 0.845861 0.012058 2.64355 0.115008 -0.982319 0.147725 + 0.768605 0.034296 2.32323 0.0225806 -0.990275 -0.137281 + 0.787987 0.016661 2.40498 0.162167 -0.96757 -0.193675 + 0.896145 0.022032 2.55048 0.285048 -0.928757 -0.236977 + 0.952262 0.022123 2.61172 0.20575 -0.978294 -0.0246542 + 0.983929 0.03359 2.68686 0.212968 -0.951543 0.221832 + 0.880885 0.02973 2.47214 0.194398 -0.976968 -0.0879949 + 1.03752 0.060968 2.49944 0.23423 -0.967839 -0.0917835 + 1.09364 0.061061 2.56068 0.341591 -0.938987 -0.0402388 + 1.11615 0.079097 2.63903 0.456861 -0.876657 0.150834 + 1.00619 0.064412 2.75787 0.275065 -0.923622 0.26695 + 1.02825 0.056105 2.41526 0.228605 -0.973314 0.0199946 + 1.22639 0.111645 2.32646 0.374927 -0.922438 0.0923994 + 1.22502 0.129205 2.42024 0.429713 -0.896987 0.103732 + 1.24753 0.147325 2.49866 0.491019 -0.863128 0.11794 + 1.35392 0.161294 2.23726 0.465482 -0.882209 0.0709454 + 1.35255 0.178855 2.33105 0.397579 -0.909946 0.118018 + 1.35813 0.192681 2.4271 0.373681 -0.915699 0.147845 + 1.25187 0.169242 2.5913 0.529284 -0.829683 0.177437 + 1.13842 0.10992 2.71005 0.500446 -0.841388 0.204009 + 1.4512 0.206969 2.31095 0.366363 -0.930147 0.0245943 + 1.45678 0.220883 2.40706 0.328811 -0.935288 0.13084 + 1.36247 0.214598 2.51974 0.365674 -0.914245 0.174468 + 1.35254 0.225228 2.60113 0.355286 -0.923857 0.142338 + 1.26171 0.195051 2.6764 0.486274 -0.864128 0.129692 + 1.50397 0.242657 2.18154 0.451819 -0.884025 -0.119834 + 1.5217 0.24162 2.28234 0.434757 -0.899392 -0.0456044 + 1.53175 0.243749 2.36965 0.435367 -0.897784 0.0666279 + 1.459 0.23882 2.50859 0.312116 -0.936378 0.160564 + 1.44907 0.249449 2.58998 0.316463 -0.935557 0.156793 + 1.56516 0.281298 2.16401 0.414802 -0.897318 -0.150865 + 1.57529 0.272073 2.23359 0.384713 -0.91638 -0.110652 + 1.58533 0.274293 2.32094 0.407199 -0.913049 -0.0230182 + 1.53396 0.261693 2.47117 0.32399 -0.939241 0.113384 + 1.4665 0.267522 2.65207 0.343452 -0.91679 0.203806 + 1.5508 0.28849 2.07756 0.423082 -0.894568 -0.144047 + 1.64876 0.321749 2.11335 0.337081 -0.933681 -0.120896 + 1.65888 0.312527 2.18292 0.369771 -0.920408 -0.126962 + 1.66021 0.306524 2.25632 0.379235 -0.922868 -0.0670414 + 1.59423 0.273512 2.3919 0.263957 -0.964513 -0.00646079 + 1.64886 0.328708 2.0401 0.303443 -0.945717 -0.116365 + 1.76637 0.36327 2.04343 0.317971 -0.947264 -0.0398122 + 1.75482 0.359828 2.1202 0.360645 -0.931714 -0.0429499 + 1.75615 0.353735 2.19355 0.373931 -0.922008 -0.100382 + 1.76647 0.370235 1.97017 0.265854 -0.961691 -0.0668771 + 1.86793 0.400675 1.98045 0.314336 -0.948909 0.0276645 + 1.85638 0.397236 2.0572 0.350977 -0.936184 0.0193697 + 1.85669 0.399638 2.13244 0.376879 -0.925698 -0.0323272 + 1.75317 0.342798 2.27029 0.383221 -0.920114 -0.0808235 + 1.86879 0.401352 1.82807 0.171887 -0.98507 0.00964778 + 1.86385 0.395455 1.90469 0.247719 -0.968823 -0.00403978 + 1.94478 0.420302 1.91885 0.238577 -0.966283 0.0968396 + 1.96191 0.434751 1.99342 0.30569 -0.948553 0.0824715 + 1.96222 0.437152 2.06866 0.364602 -0.927875 0.0781899 + 1.86227 0.396727 1.75169 0.0685158 -0.997487 -0.0180336 + 1.9283 0.401439 1.76872 0.0159164 -0.99211 0.124359 + 1.9407 0.415079 1.8431 0.141149 -0.984943 0.099819 + 2.01429 0.419449 1.81933 0.130007 -0.969133 0.209472 + 1.92178 0.396725 1.69229 -0.136905 -0.984372 0.110761 + 1.98152 0.381463 1.66792 -0.17876 -0.959764 0.216558 + 1.99393 0.39519 1.74235 0.00196946 -0.970289 0.241942 + 1.95386 0.34866 1.51534 -0.40336 -0.899508 0.167887 + 1.9663 0.36556 1.59087 -0.268356 -0.930241 0.250272 + 2.01282 0.326943 1.53155 0.00321771 -0.968741 0.248053 + 2.03896 0.355975 1.61187 0.193475 -0.944943 0.263913 + 2.05932 0.380315 1.68891 0.288418 -0.920179 0.264736 + 1.948 0.344573 1.43782 -0.419415 -0.897815 0.134237 + 1.9927 0.303234 1.36722 -0.216156 -0.972486 0.0868707 + 1.9976 0.311036 1.45451 -0.149816 -0.977921 0.145691 + 2.06555 0.327452 1.42387 0.453865 -0.885257 0.101614 + 1.98685 0.299233 1.28975 -0.357079 -0.929721 -0.0900791 + 2.04357 0.304913 1.25091 0.359107 -0.93321 -0.0126455 + 2.04846 0.312631 1.33814 0.398184 -0.915475 0.0579219 + 2.00194 0.314248 1.20674 -0.465474 -0.863371 -0.19474 + 2.05901 0.323441 1.07862 0.301738 -0.952336 -0.0448411 + 2.04391 0.308428 1.16162 0.165733 -0.976004 -0.141239 + 2.10624 0.362893 1.15849 0.574491 -0.815857 -0.0658557 + 2.11922 0.35999 1.24832 0.584053 -0.811367 -0.0237886 + 2.10658 0.366494 1.06925 0.61662 -0.787077 -0.0170255 + 2.18187 0.421666 0.948888 0.549531 -0.835362 -0.0136267 + 2.17853 0.415693 1.04723 0.503162 -0.861917 -0.062667 + 2.30227 0.493861 0.894243 0.593009 -0.804802 -0.025169 + 2.19151 0.412788 1.13706 0.558891 -0.828712 -0.0296052 + 2.1363 0.374728 1.33399 0.612072 -0.789991 0.0358038 + 2.09169 0.356484 1.50419 0.520052 -0.840202 0.153645 + 2.08491 0.41771 1.76634 0.400895 -0.880288 0.253725 + 2.09887 0.44334 1.84355 0.485498 -0.837264 0.251558 + 2.03142 0.433901 1.89389 0.252587 -0.946323 0.201673 + 2.04537 0.459445 1.97105 0.371276 -0.912266 0.172987 + 2.04911 0.470755 2.04646 0.497279 -0.847802 0.184243 + 1.96596 0.448469 2.14407 0.449456 -0.891475 0.0571081 + 1.85372 0.388614 2.20914 0.411948 -0.90918 -0.0607486 + 2.10762 0.50394 2.00259 0.639358 -0.723494 0.26034 + 2.05096 0.495578 2.12347 0.612678 -0.766037 0.194455 + 1.96174 0.44608 2.2196 0.536178 -0.839903 0.0841268 + 1.84949 0.386313 2.28472 0.464605 -0.88401 -0.0516566 + 2.11079 0.542994 2.08414 0.688071 -0.678793 0.256511 + 2.03672 0.499833 2.1991 0.661382 -0.725714 0.189508 + 1.9475 0.45034 2.29522 0.604801 -0.790978 0.0925665 + 2.10428 0.561698 2.16435 0.700684 -0.679434 0.217744 + 2.03022 0.518539 2.2793 0.688775 -0.703435 0.175409 + 1.93746 0.448136 2.37084 0.662402 -0.742008 0.103185 + 1.8517 0.375213 2.36135 0.520052 -0.853017 -0.0436667 + 2.10679 0.59144 2.24863 0.723006 -0.650297 0.233189 + 2.0094 0.513188 2.35317 0.71909 -0.667688 0.192616 + 1.91665 0.442783 2.44471 0.69935 -0.694684 0.168297 + 1.84167 0.373009 2.43697 0.575044 -0.814544 0.0764418 + 1.75909 0.327635 2.42095 0.367097 -0.929696 -0.0300774 + 2.18985 0.64336 2.1567 0.722375 -0.640196 0.261387 + 2.17752 0.67142 2.2417 0.724353 -0.620771 0.299926 + 2.09014 0.602258 2.3281 0.761244 -0.579975 0.290061 + 1.99275 0.524004 2.43263 0.759045 -0.606003 0.237931 + 2.25581 0.731185 2.16119 0.739712 -0.627614 0.242746 + 2.24337 0.743196 2.25178 0.728047 -0.608041 0.316597 + 2.1581 0.695131 2.32363 0.726893 -0.572109 0.379892 + 2.07072 0.626055 2.41008 0.788761 -0.498229 0.360033 + 2.33809 0.811585 2.13373 0.775889 -0.581839 0.243843 + 2.31965 0.836749 2.22674 0.785558 -0.465103 0.408139 + 2.21491 0.766721 2.33263 0.736101 -0.481272 0.475954 + 2.12964 0.71866 2.40448 0.740635 -0.456768 0.492771 + 2.44299 0.898732 1.98359 0.825074 -0.510951 0.241211 + 2.42456 0.923891 2.07661 0.824582 -0.495084 0.273783 + 2.41365 0.955533 2.1768 0.805677 -0.516127 0.290684 + 2.27852 0.865364 2.30618 0.753947 -0.502688 0.422929 + 2.17378 0.795248 2.41202 0.716012 -0.544692 0.43662 + 2.51609 1.00412 1.90324 0.906434 -0.382993 0.178026 + 2.50013 1.00485 1.98979 0.88627 -0.414877 0.205918 + 2.48922 1.03649 2.08999 0.867051 -0.450986 0.211742 + 2.3982 0.9821 2.26839 0.759202 -0.590496 0.273727 + 2.26307 0.891843 2.39772 0.707539 -0.670395 0.223515 + 2.5645 1.13589 1.89522 0.937552 -0.312947 0.151858 + 2.54855 1.13661 1.98176 0.923831 -0.35244 0.149408 + 2.55736 1.17874 2.0464 0.888205 -0.453412 0.0742183 + 2.49803 1.0787 2.15467 0.868311 -0.45539 0.196612 + 2.39503 1.02079 2.36737 0.766934 -0.592084 0.247486 + 2.61058 1.27381 1.93234 0.913306 -0.407036 0.0139468 + 2.57253 1.20236 2.14269 0.847912 -0.525126 0.0727171 + 2.49487 1.11738 2.25367 0.816979 -0.545548 0.186875 + 2.37461 1.04129 2.47787 0.745694 -0.636125 0.198206 + 2.24738 0.891026 2.48613 0.697465 -0.693427 0.180836 + 2.62575 1.29734 2.02858 0.905788 -0.423439 0.01569 + 2.65077 1.36379 2.06668 0.931364 -0.360836 0.0485618 + 2.57453 1.23392 2.24142 0.870335 -0.471684 0.14153 + 2.49688 1.14894 2.35241 0.790432 -0.588937 0.168432 + 2.66678 1.41571 2.12635 0.930563 -0.361042 0.0608322 + 2.59055 1.28584 2.3011 0.884862 -0.436871 0.161748 + 2.47789 1.15753 2.47854 0.800817 -0.552076 0.232175 + 2.35563 1.04979 2.60395 0.721874 -0.618021 0.311366 + 2.22697 0.911444 2.59657 0.710296 -0.635696 0.302276 + 2.76286 1.69898 2.15471 0.924898 -0.372068 0.0782903 + 2.70903 1.55131 2.28208 0.931146 -0.353674 0.0887814 + 2.63475 1.40743 2.3743 0.893463 -0.414586 0.172748 + 2.52209 1.27912 2.55174 0.842105 -0.457189 0.286071 + 2.78184 1.79753 2.44243 0.925221 -0.357334 0.127585 + 2.70756 1.65364 2.53465 0.906463 -0.376509 0.19122 + 2.64147 1.51538 2.56272 0.867698 -0.419687 0.266389 + 2.53871 1.40196 2.66698 0.855162 -0.444665 0.266404 + 2.41932 1.16569 2.65599 0.761665 -0.539585 0.358768 + 2.88684 2.14071 2.57242 0.932067 -0.309508 0.188296 + 2.83049 2.01008 2.62288 0.919731 -0.333562 0.206956 + 2.77132 1.88583 2.67448 0.904144 -0.356213 0.235873 + 2.70523 1.74766 2.70259 0.884542 -0.38671 0.260845 + 2.90666 2.30602 2.7003 0.934483 -0.262375 0.240625 + 2.85299 2.1988 2.7792 0.91438 -0.292627 0.279783 + 2.79381 2.07464 2.83085 0.901854 -0.315692 0.294954 + 2.73262 1.95246 2.88208 0.882984 -0.342887 0.320574 + 2.96667 2.61474 2.76017 0.954485 -0.196217 0.224625 + 2.92343 2.55214 2.87299 0.936017 -0.227377 0.268649 + 2.86976 2.44501 2.95194 0.918081 -0.257978 0.300955 + 2.81471 2.34254 3.02704 0.902224 -0.282631 0.325749 + 3.00339 2.67289 2.63705 0.970403 -0.162995 0.178185 + 2.97642 2.9104 2.94847 0.956962 -0.1669 0.237419 + 2.93318 2.84781 3.06129 0.942228 -0.193862 0.273172 + 2.88402 2.77684 3.17041 0.921825 -0.224337 0.316088 + 2.82897 2.67436 3.24551 0.906141 -0.25235 0.339453 + 3.00934 2.93258 2.81406 0.972651 -0.138453 0.186499 + 3.01648 3.21906 2.97146 0.975071 -0.11567 0.18936 + 2.98356 3.19688 3.10587 0.962453 -0.143341 0.230518 + 2.94526 3.14078 3.22244 0.948179 -0.170598 0.268054 + 2.8961 3.06982 3.33155 0.932595 -0.197519 0.30208 + 3.03511 2.96217 2.67901 0.982085 -0.118509 0.14651 + 3.04144 3.2511 2.84297 0.983367 -0.0948271 0.154909 + 3.01927 3.52656 3.11545 0.978498 -0.0149116 0.205719 + 2.99093 3.47223 3.23235 0.966157 -0.0494565 0.253171 + 2.95263 3.41614 3.34891 0.95105 -0.0763788 0.299451 + 3.0629 3.26618 2.70544 0.989341 -0.0763806 0.123976 + 3.04423 3.55852 2.9869 0.986128 0.00244653 0.165971 + 2.99013 3.85874 3.14489 0.964082 0.163447 0.209359 + 2.9702 3.80311 3.25965 0.957335 0.127249 0.259456 + 2.94185 3.7487 3.3765 0.945998 0.100162 0.308311 + 3.06202 3.59362 2.8587 0.990462 0.0215801 0.136082 + 3.00792 3.89376 3.01664 0.969245 0.167505 0.180294 + 2.88357 4.12758 3.30345 0.921376 0.274884 0.274781 + 2.86363 4.07195 3.41821 0.903764 0.26524 0.335944 + 2.84151 4.00321 3.52207 0.890837 0.242976 0.38389 + 3.02245 3.93634 2.89569 0.970236 0.182804 0.158821 + 2.89556 4.19064 3.19443 0.922974 0.300742 0.240153 + 2.77869 4.4125 3.29715 0.850838 0.436739 0.29212 + 2.76669 4.34953 3.40622 0.835236 0.40272 0.374429 + 2.71836 4.34324 3.50512 0.79382 0.42622 0.433804 + 3.03632 3.96331 2.76538 0.973727 0.180416 0.138948 + 2.91008 4.23313 3.07343 0.924412 0.308683 0.224003 + 2.75332 4.51485 3.20068 0.832435 0.468175 0.296418 + 2.58702 4.62271 3.40426 0.753415 0.53316 0.384844 + 2.53868 4.61643 3.50315 0.740639 0.539317 0.400737 + 3.04793 4.00287 2.62426 0.975742 0.194576 0.100334 + 2.92507 4.27844 2.95516 0.931997 0.296361 0.208689 + 2.76831 4.56016 3.08241 0.838401 0.451904 0.304739 + 2.59133 4.8202 3.1034 0.759681 0.554875 0.339113 + 2.56165 4.72498 3.30773 0.743484 0.551602 0.378109 + 3.04409 4.0802 2.45051 0.976736 0.204721 0.0638477 + 2.93668 4.31809 2.81409 0.943916 0.285296 0.166219 + 2.82002 4.55769 2.95729 0.865283 0.411798 0.285845 + 3.0344 4.15634 2.33024 0.973152 0.228878 0.0242978 + 2.944 4.36891 2.69926 0.945532 0.289744 0.148386 + 2.82734 4.60859 2.84251 0.87868 0.435125 0.196435 + 2.64304 4.81781 2.97834 0.785292 0.538568 0.305387 + 3.01826 4.2199 2.21454 0.972814 0.231584 -0.000810247 + 2.93431 4.44513 2.57904 0.939594 0.320855 0.119229 + 2.7918 4.70423 2.76488 0.857076 0.466827 0.217929 + 2.6075 4.91344 2.9007 0.769773 0.556263 0.313083 + 2.39792 5.14652 2.96539 0.719119 0.603699 0.344114 + 2.99596 4.31437 2.09793 0.970352 0.241258 -0.0145129 + 2.92178 4.51901 2.47688 0.942928 0.316274 0.104198 + 2.77926 4.7781 2.66272 0.853473 0.463221 0.238767 + 2.61275 4.99135 2.73675 0.778012 0.562199 0.280409 + 2.40318 5.22443 2.80145 0.733661 0.604146 0.311045 + 2.97314 4.39094 1.99271 0.970512 0.240119 -0.0212097 + 2.89948 4.61338 2.36022 0.945029 0.318085 0.0757767 + 2.80347 4.81152 2.51723 0.876333 0.438116 0.200233 + 2.63696 5.02486 2.59132 0.788889 0.563776 0.244562 + 2.41336 5.32076 2.59061 0.743277 0.601154 0.293517 + 2.95514 4.4525 1.85547 0.972238 0.230399 -0.0408542 + 2.87809 4.72406 2.17391 0.941433 0.333482 0.0499389 + 2.78208 4.9222 2.33093 0.869906 0.475416 0.131313 + 2.73025 5.03293 2.22795 0.851495 0.517468 0.0847543 + 2.58513 5.13559 2.48833 0.78646 0.567862 0.242929 + 2.92916 4.53973 1.75878 0.966881 0.251215 -0.0450822 + 2.86009 4.78554 2.03663 0.922881 0.385037 -0.00606439 + 2.84193 4.80944 1.90563 0.925108 0.379538 -0.0112586 + 2.71208 5.05683 2.09695 0.874878 0.482649 0.04049 + 2.56369 5.28679 2.23664 0.812925 0.549223 0.19367 + 2.39192 5.47197 2.33891 0.737031 0.616664 0.276605 + 2.70169 5.11875 1.9311 0.889085 0.44734 0.0970254 + 2.55329 5.34863 2.07074 0.828516 0.543798 0.133585 + 2.36036 5.57092 2.18392 0.741282 0.635063 0.217245 + 2.1445 5.69545 2.42503 0.665438 0.6831 0.300943 + 2.33453 5.63576 2.06221 0.747108 0.641041 0.175771 + 2.104 5.84604 2.1598 0.66803 0.701579 0.248037 + 2.11294 5.7944 2.27003 0.663853 0.690611 0.286975 + 2.30026 5.70265 1.96015 0.74683 0.650257 0.139322 + 2.06973 5.91293 2.05774 0.661925 0.709017 0.243206 + 1.8082 6.0823 2.18638 0.566887 0.767757 0.298645 + 1.87858 6.009 2.24893 0.590669 0.761627 0.266522 + 1.88752 5.95737 2.35916 0.585268 0.739929 0.331611 + 2.28482 5.73189 1.88371 0.749847 0.643049 0.155617 + 2.0302 5.98832 1.94595 0.645917 0.736043 0.202563 + 1.76867 6.15769 2.07459 0.558241 0.786444 0.264335 + 1.72022 6.22202 1.95958 0.530466 0.825945 0.190844 + 1.4699 6.27735 2.25855 0.478487 0.824361 0.302455 + 1.50251 6.21269 2.36954 0.49058 0.801251 0.342531 + 1.57288 6.13948 2.43215 0.520422 0.781245 0.344699 + 1.36416 6.39673 2.02638 0.418071 0.884161 0.208509 + 1.42144 6.34167 2.14354 0.438627 0.866187 0.23943 + 1.22438 6.35483 2.39954 0.382326 0.863093 0.329997 + 1.29037 6.45835 1.91044 0.413127 0.888746 0.198635 + 1.08876 6.45985 2.22505 0.337227 0.903197 0.265542 + 1.14603 6.40479 2.34221 0.333728 0.896316 0.291963 + 0.962238 6.36502 2.60049 0.303487 0.866417 0.396505 + 1.25699 6.29017 2.51054 0.416426 0.818026 0.396766 + 1.19721 6.52356 1.8071 0.395743 0.898278 0.191008 + 0.92797 6.57875 2.02669 0.320666 0.914523 0.246619 + 1.02113 6.51363 2.13009 0.335588 0.903247 0.267443 + 0.827272 6.46639 2.46352 0.2759 0.89805 0.342615 + 0.883886 6.41497 2.54317 0.283659 0.880641 0.379486 + 1.50341 6.40817 1.60316 0.481439 0.864822 0.142477 + 1.47639 6.44575 1.47206 0.491586 0.861509 0.127067 + 1.17018 6.56106 1.67595 0.397142 0.903978 0.158438 + 1.03768 6.62266 1.63085 0.354249 0.922635 0.152485 + 1.3745 6.51916 1.34411 0.444843 0.892595 0.0734048 + 1.242 6.58068 1.29897 0.38719 0.919204 0.0717442 + 1.41507 6.51924 1.01858 0.459762 0.887813 0.020166 + 1.10298 6.64171 1.17946 0.347351 0.936704 0.0439558 + 0.911761 6.6831 1.53417 0.316562 0.941743 0.113614 + 1.27606 6.58026 0.899078 0.406722 0.913409 0.016194 + 0.960672 6.69594 1.07172 0.310669 0.950148 0.0265456 + 0.769448 6.73725 1.42637 0.273924 0.95876 0.0757916 + 0.698665 6.70618 1.81299 0.269257 0.941558 0.20241 + 1.34251 6.55074 0.580817 0.451397 0.886043 -0.105678 + 1.19359 6.61972 0.794943 0.361378 0.932412 -0.00367437 + 1.05861 6.66359 0.798562 0.306181 0.951637 -0.025301 + 0.734752 6.76539 0.984238 0.275986 0.961056 0.0142514 + 0.664641 6.76811 1.36752 0.252908 0.965384 0.0638015 + 1.45582 6.44337 0.366384 0.500004 0.834441 -0.231745 + 1.23376 6.59237 0.537905 0.342467 0.923487 -0.172881 + 1.09878 6.63633 0.541574 0.296987 0.943048 -0.149862 + 0.832688 6.73303 0.711083 0.266769 0.960664 -0.0771992 + 0.593452 6.80476 0.946639 0.241569 0.970304 -0.0124353 + 1.28241 6.49882 0.24295 0.391359 0.886621 -0.246457 + 1.17419 6.54288 0.259035 0.314415 0.913465 -0.25831 + 0.979355 6.65734 0.482576 0.267833 0.943903 -0.193167 + 0.837682 6.68236 0.402646 0.22827 0.942763 -0.243087 + 0.691015 6.75805 0.631154 0.240113 0.96354 -0.118057 + 0.571966 6.78465 0.602867 0.157263 0.975067 -0.156566 + 0.474402 6.83137 0.918353 0.173058 0.983976 -0.0429265 + 0.435957 6.83259 1.30843 0.190581 0.979422 0.0664219 + 0.523341 6.80757 1.32997 0.246637 0.965911 0.0786573 + 0.533797 6.77079 1.67088 0.175863 0.975253 0.133994 + 0.496008 6.77776 0.527806 0.133089 0.963008 -0.234315 + 0.371306 6.80834 0.581647 0.114747 0.974147 -0.194603 + 0.321333 6.85039 0.899611 0.0956722 0.993856 -0.0556407 + 0.100983 6.86306 1.27106 0.0305822 0.999006 0.0324287 + 0.282888 6.85153 1.28964 0.0888201 0.995273 0.0392824 + 0.242537 6.83233 1.5989 0.0966845 0.986142 0.134818 + 0.325972 6.80725 1.68334 0.171629 0.965591 0.195392 + 0.413356 6.78223 1.70487 0.172374 0.969258 0.175573 + -0.100983 6.86309 0.880213 -0.0301542 0.997468 -0.0644153 + -0.100983 6.86306 1.27106 -0.0311355 0.999008 0.031849 + -0.060632 6.84387 1.58031 -0.0238566 0.991803 0.125525 + 0.060632 6.84387 1.58031 0.023854 0.991803 0.125527 + -0.321333 6.85039 0.899611 -0.0952661 0.993922 -0.0551612 + -0.282888 6.85153 1.28964 -0.0884482 0.99533 0.0386617 + -0.242537 6.83233 1.5989 -0.0966814 0.986149 0.134768 + -0.060632 6.77963 1.91316 -0.0333648 0.975356 0.218101 + 0.060632 6.77963 1.91316 0.0331918 0.975788 0.216185 + -0.474402 6.83137 0.918353 -0.174478 0.983844 -0.0400988 + -0.435957 6.83259 1.30843 -0.19441 0.978914 0.0626998 + -0.325972 6.80725 1.68334 -0.166641 0.969998 0.177017 + -0.144067 6.75447 1.99756 -0.0560148 0.970728 0.23356 + 0.050108 6.70567 2.20727 0.0191598 0.94888 0.315055 + -0.571968 6.78465 0.602867 -0.165925 0.972859 -0.16129 + -0.593452 6.80476 0.946639 -0.238817 0.971014 -0.00991598 + -0.523341 6.80757 1.32997 -0.2448 0.966687 0.0747638 + -0.413356 6.78223 1.70487 -0.184286 0.968488 0.16754 + -0.294177 6.73724 2.02838 -0.116182 0.964747 0.236148 + -0.691017 6.75805 0.631154 -0.234265 0.962265 -0.138439 + -0.832686 6.73303 0.711083 -0.274443 0.958242 -0.0803349 + -0.734753 6.76539 0.984238 -0.275625 0.961175 0.0131982 + -0.664642 6.76811 1.36752 -0.2502 0.965978 0.0654683 + -0.533797 6.77079 1.67088 -0.175863 0.975253 0.133995 + -0.979353 6.65735 0.482567 -0.273644 0.946061 -0.17346 + -1.05861 6.66359 0.798562 -0.302155 0.952641 -0.0343206 + -0.960673 6.69594 1.07172 -0.311622 0.949848 0.0260678 + -0.769449 6.73725 1.42637 -0.274441 0.958434 0.0780185 + -0.638605 6.73993 1.72974 -0.250156 0.954856 0.160226 + -1.09878 6.63633 0.541574 -0.276758 0.950898 -0.138558 + -1.23376 6.59237 0.537905 -0.342433 0.923507 -0.172844 + -1.19359 6.61972 0.794943 -0.361331 0.93243 -0.00374486 + -1.17419 6.54288 0.259035 -0.310508 0.912125 -0.267606 + -1.28241 6.49882 0.24295 -0.39136 0.886621 -0.246455 + -1.34707 6.48501 0.323472 -0.424825 0.876972 -0.224598 + -1.34251 6.55074 0.580817 -0.451397 0.886043 -0.10568 + -1.42498 6.51129 0.684952 -0.49995 0.864578 -0.050538 + -1.22271 6.41721 -0.052703 -0.252991 0.892369 -0.373729 + -1.33093 6.37315 -0.068788 -0.368897 0.852815 -0.369623 + -1.44807 6.32948 -0.029744 -0.486297 0.810333 -0.326919 + -1.51273 6.31567 0.050778 -0.551009 0.792421 -0.261646 + -1.45582 6.44337 0.366384 -0.504725 0.837727 -0.208485 + -1.25933 6.30343 -0.25822 -0.296176 0.796449 -0.527209 + -1.38258 6.26348 -0.226426 -0.417446 0.756406 -0.503576 + -1.49973 6.2198 -0.187381 -0.500136 0.727892 -0.469082 + -1.60914 6.16113 -0.145152 -0.587997 0.696925 -0.410556 + -1.61436 6.25035 0.099903 -0.599716 0.759521 -0.251929 + -1.41123 6.15387 -0.342177 -0.436526 0.669571 -0.600932 + -1.53005 6.08995 -0.313864 -0.514859 0.636253 -0.574545 + -1.63947 6.03127 -0.271635 -0.585603 0.608756 -0.535242 + -1.55406 5.9805 -0.404688 -0.506626 0.564371 -0.651778 + -1.55972 6.38729 0.440731 -0.571692 0.803866 -0.164217 + -1.71826 6.19427 0.17425 -0.636188 0.735213 -0.233939 + -0.911762 6.6831 1.53417 -0.320456 0.940593 0.112216 + -0.824584 6.64574 1.90967 -0.340674 0.910563 0.234127 + -0.698665 6.70618 1.81299 -0.269471 0.942128 0.199449 + -0.414618 6.72581 1.99439 -0.172457 0.958678 0.226262 + -0.822126 6.61587 2.016 -0.296806 0.916931 0.266727 + -0.531952 6.66896 2.12045 -0.216813 0.939927 0.263683 + -0.474679 6.69206 2.07765 -0.18791 0.948779 0.253983 + -0.269292 6.67497 2.26263 -0.0982188 0.937131 0.334871 + -0.200218 6.68836 2.23805 -0.0539781 0.943883 0.325838 + -0.581012 6.59979 2.28966 -0.258779 0.903052 0.342826 + -0.529493 6.63918 2.22683 -0.206439 0.928025 0.310086 + -0.349068 6.61759 2.37783 -0.140586 0.909918 0.390237 + -0.326565 6.65188 2.30544 -0.147469 0.921502 0.359285 + -0.686856 6.56267 2.30035 -0.269102 0.911541 0.31093 + -0.499961 6.55393 2.46969 -0.173136 0.921233 0.348358 + -0.400587 6.57829 2.44071 -0.159405 0.911399 0.379396 + -0.572748 6.51135 2.53785 -0.227197 0.897176 0.378757 + -0.373621 6.51423 2.60505 -0.120892 0.903409 0.411385 + -0.274247 6.53868 2.5761 -0.0639589 0.911777 0.405674 + -0.141685 6.57025 2.50863 -0.0249631 0.911647 0.410215 + -0.119182 6.60453 2.43624 -0.0373573 0.909668 0.413653 + -0.388277 6.47524 2.68259 -0.121005 0.897519 0.42405 + -0.176785 6.43005 2.81825 -0.0228194 0.905372 0.424005 + -0.044223 6.46171 2.75082 -0.000832044 0.906535 0.42213 + 0.044223 6.46171 2.75082 0.000973426 0.905695 0.423929 + -0.050108 6.61792 2.41166 -0.0153402 0.913002 0.407666 + -0.233666 6.40344 2.87116 -0.0584052 0.901238 0.429371 + -0.044223 6.18267 3.32274 -0.00301525 0.895771 0.444507 + 0.044223 6.18267 3.32274 -0.000375389 0.883408 0.468604 + -0.101104 6.15596 3.37559 -0.0433475 0.880086 0.472831 + -0.124475 6.09432 3.48496 -0.0505963 0.858728 0.509928 + -0.14305 6.0222 3.60207 -0.0458803 0.838137 0.543526 + -0.136385 5.89102 3.79808 -0.0231056 0.815036 0.578949 + -0.096861 5.82595 3.88378 -0.00610063 0.798814 0.601546 + -0.033595 5.77673 3.94804 -0.0139803 0.7893 0.613849 + 0.033595 5.77673 3.94804 0.0141317 0.790106 0.612808 + 0.096861 5.82595 3.88378 -0.000654557 0.802035 0.597277 + 0.136385 5.89102 3.79808 0.00216317 0.818883 0.573956 + 0.148623 5.95613 3.70132 0.0301867 0.834556 0.550095 + 0.143051 6.0222 3.60207 -0.0164265 0.836582 0.547595 + 0.124475 6.09432 3.48496 -0.00245258 0.855128 0.518411 + 0.101105 6.15596 3.37559 0.0263383 0.877671 0.478539 + 0.176785 6.43005 2.81825 0.0228409 0.905335 0.424085 + -0.286638 5.61296 4.1119 -0.106085 0.761138 0.639855 + -0.197655 5.49568 4.26263 -0.0848229 0.748889 0.657245 + -0.134389 5.44638 4.32683 -0.0988236 0.7263 0.680237 + -0.033595 5.41581 4.36878 -0.0330103 0.725782 0.687132 + 0.033595 5.41581 4.36878 0.0330103 0.725782 0.687132 + -0.288186 5.27331 4.49538 -0.0325709 0.704378 0.709077 + -0.237468 5.2187 4.54617 -0.0183962 0.672358 0.739997 + -0.158013 5.22322 4.54455 -0.0644347 0.680698 0.729725 + -0.057219 5.19265 4.58649 -0.0441369 0.651127 0.757684 + -0.375693 5.11286 4.63109 -0.125624 0.626574 0.769171 + -0.324975 5.05817 4.68183 -0.0774454 0.606328 0.791435 + -0.257627 4.99574 4.73155 -0.0446107 0.574868 0.817029 + -0.178172 5.00026 4.72992 -0.00741539 0.578774 0.815455 + -0.551165 4.9418 4.71679 -0.210525 0.561817 0.800025 + -0.449579 4.90913 4.76317 -0.164434 0.535735 0.82822 + -0.38223 4.84671 4.81289 -0.136734 0.522014 0.841905 + -0.332603 4.78451 4.85881 -0.0824376 0.486759 0.869638 + -0.203725 4.79747 4.85657 -0.00671893 0.478783 0.877908 + -0.855362 4.85492 4.68866 -0.282521 0.544077 0.790039 + -0.770678 4.77739 4.76376 -0.247181 0.491926 0.834812 + -0.669092 4.74481 4.81019 -0.23065 0.485812 0.843082 + -0.572613 4.68144 4.87434 -0.217462 0.483731 0.84777 + -0.522986 4.61924 4.92026 -0.175539 0.407963 0.895964 + -1.07525 4.67905 4.71547 -0.319774 0.496196 0.807176 + -0.990563 4.60152 4.79056 -0.277527 0.448864 0.849411 + -0.88492 4.49976 4.87041 -0.266447 0.430218 0.862507 + -0.788441 4.43648 4.93462 -0.225488 0.36933 0.901527 + -1.33951 4.45427 4.74201 -0.37003 0.442199 0.81703 + -1.22576 4.32411 4.85146 -0.321498 0.388917 0.863355 + -1.12011 4.22243 4.93136 -0.275099 0.33054 0.902809 + -1.55192 4.20397 4.75893 -0.425889 0.36072 0.829759 + -1.43817 4.07381 4.86839 -0.37616 0.307449 0.874059 + -1.33197 3.94823 4.94689 -0.323093 0.246229 0.913774 + -1.0017 4.09007 5.00022 -0.214451 0.252546 0.943521 + -1.73573 3.92518 4.76543 -0.498636 0.260969 0.826594 + -1.65182 3.80226 4.84653 -0.456603 0.201046 0.866657 + -1.54562 3.67677 4.92508 -0.406468 0.136203 0.903456 + -1.21356 3.81596 5.0158 -0.253457 0.185034 0.949485 + -1.91851 3.68226 4.70637 -0.571773 0.150984 0.806399 + -1.8346 3.55934 4.78748 -0.524896 0.090492 0.846342 + -1.80006 3.43825 4.8144 -0.519398 0.0106398 0.854466 + -1.70185 3.41556 4.86911 -0.46405 0.011331 0.885737 + -1.42499 3.56737 4.98257 -0.348271 0.0874058 0.93331 + -2.08087 3.45036 4.60384 -0.656406 -0.0199555 0.754144 + -2.00319 3.36563 4.66239 -0.645437 -0.0447652 0.7625 + -1.96864 3.24454 4.68932 -0.671268 -0.0820945 0.736654 + -1.89171 3.14942 4.73467 -0.571543 -0.156056 0.805596 + -1.79349 3.12682 4.78942 -0.495968 -0.163429 0.852823 + -2.21668 3.16849 4.43025 -0.69954 -0.16886 0.694356 + -2.13899 3.08376 4.4888 -0.69583 -0.186715 0.693512 + -2.05366 3.01292 4.5517 -0.686012 -0.20679 0.697585 + -1.97672 2.9178 4.59705 -0.65711 -0.255404 0.709207 + -1.87899 2.85807 4.65711 -0.571738 -0.287899 0.768265 + -2.23071 2.75267 4.26706 -0.705719 -0.266491 0.656463 + -2.14538 2.68183 4.32996 -0.688711 -0.285678 0.666382 + -2.04499 2.64384 4.41137 -0.652489 -0.309448 0.691737 + -1.94726 2.5841 4.47144 -0.605363 -0.340779 0.719309 + -2.2638 2.40369 4.07712 -0.703425 -0.309465 0.639863 + -2.16569 2.34754 4.15417 -0.680711 -0.320905 0.658523 + -2.06529 2.30954 4.23558 -0.647659 -0.3342 0.684725 + -1.95764 2.27166 4.3132 -0.60289 -0.347635 0.718104 + -1.83623 2.54914 4.541 -0.554325 -0.360572 0.750141 + -2.13287 1.98865 4.00359 -0.679998 -0.357046 0.640407 + -2.02705 1.9426 4.08575 -0.647034 -0.363228 0.670383 + -1.9194 1.90472 4.16336 -0.609956 -0.367102 0.702275 + -1.80501 1.87262 4.24177 -0.577531 -0.366554 0.729449 + -1.8466 2.2367 4.38276 -0.566467 -0.355253 0.743579 + -1.98256 1.64831 3.95749 -0.654883 -0.411626 0.633792 + -1.87276 1.60828 4.04202 -0.622294 -0.40827 0.667882 + -1.75837 1.57617 4.12042 -0.594053 -0.396851 0.699722 + -1.64331 1.53754 4.19673 -0.571927 -0.388873 0.722272 + -1.69093 1.83115 4.30698 -0.550829 -0.362976 0.751555 + -1.81817 1.38522 3.94096 -0.643166 -0.457579 0.613969 + -1.70767 1.33952 4.02331 -0.623372 -0.439719 0.646571 + -1.59261 1.30081 4.09957 -0.596504 -0.417843 0.685266 + -1.47608 1.25865 4.17559 -0.577431 -0.406186 0.708228 + -1.52366 1.5029 4.26593 -0.552043 -0.375918 0.744267 + -1.57128 1.79651 4.37618 -0.520854 -0.35673 0.775535 + -1.73252 2.19524 4.44797 -0.536168 -0.356916 0.764941 + -1.44158 1.0534 4.07769 -0.590086 -0.436629 0.679083 + -1.32338 1.02894 4.16285 -0.563054 -0.437388 0.701186 + -1.35746 1.22365 4.248 -0.558534 -0.397408 0.728084 + -1.40504 1.46782 4.33829 -0.549269 -0.363803 0.752297 + -1.3033 0.865423 4.07208 -0.540708 -0.525265 0.657063 + -1.17891 0.862822 4.16378 -0.500702 -0.532997 0.682064 + -1.2026 1.0051 4.24194 -0.530501 -0.446044 0.720842 + -1.23668 1.19981 4.3271 -0.529513 -0.393947 0.75128 + -1.12057 0.718627 4.07593 -0.452997 -0.630202 0.630587 + -1.00324 0.698969 4.13638 -0.417269 -0.645693 0.639506 + -1.05235 0.848683 4.24327 -0.460874 -0.549519 0.696867 + -1.07604 0.990964 4.32143 -0.496606 -0.450763 0.741751 + -0.902619 0.527941 4.01681 -0.342193 -0.679927 0.648539 + -0.823602 0.487744 4.00924 -0.312669 -0.706346 0.63507 + -0.870688 0.690466 4.21011 -0.346131 -0.651755 0.67484 + -0.919796 0.840262 4.31706 -0.395413 -0.570516 0.719833 + -0.870557 0.401885 3.88975 -0.376331 -0.732886 0.566792 + -0.79154 0.361685 3.88218 -0.308815 -0.748816 0.586436 + -0.684415 0.310778 3.87075 -0.315437 -0.755333 0.574432 + -0.698136 0.433094 4.01169 -0.310837 -0.717754 0.623064 + -0.745222 0.635818 4.21257 -0.29312 -0.676987 0.675107 + -0.700396 0.270386 3.80211 -0.346508 -0.848789 0.399361 + -0.546162 0.240623 3.85626 -0.231824 -0.813878 0.532785 + -0.559883 0.362934 3.99721 -0.236413 -0.730003 0.641253 + -0.713744 0.250686 3.72123 -0.369742 -0.907429 0.199658 + -0.567089 0.212172 3.77694 -0.293639 -0.897084 0.330176 + -0.405594 0.146043 3.72688 -0.245452 -0.920474 0.304107 + -0.384667 0.174489 3.80621 -0.151287 -0.855381 0.495415 + -0.724983 0.245138 3.63444 -0.376323 -0.921602 0.0950334 + -0.580437 0.192389 3.69601 -0.330343 -0.9276 0.174448 + -0.419806 0.130899 3.64511 -0.305112 -0.940942 0.14675 + -0.222854 0.076814 3.64279 -0.260964 -0.916226 0.304019 + -0.727814 0.237982 3.54944 -0.362894 -0.925756 0.106225 + -0.579758 0.186964 3.61221 -0.346074 -0.9356 0.0698891 + -0.419127 0.125386 3.56126 -0.333597 -0.94194 0.0382462 + -0.237066 0.061669 3.56102 -0.337644 -0.936637 0.0933161 + -0.731078 0.228144 3.46168 -0.353132 -0.928178 0.117401 + -0.582589 0.17972 3.52715 -0.328464 -0.940223 0.0899577 + -0.41847 0.122742 3.48064 -0.307707 -0.949606 0.0597099 + -0.235534 0.064179 3.48367 -0.346292 -0.937974 -0.0169581 + -0.729601 0.216277 3.37663 -0.325913 -0.931132 0.163626 + -0.579692 0.171394 3.44337 -0.316242 -0.943453 0.099434 + -0.415573 0.114329 3.39681 -0.291532 -0.954205 0.0670897 + -0.234877 0.061445 3.40301 -0.287831 -0.95746 0.0206024 + -0.728382 0.197971 3.28954 -0.300918 -0.931631 0.203743 + -0.578215 0.159527 3.35832 -0.290687 -0.948393 0.126698 + -0.416776 0.109762 3.31652 -0.265352 -0.959941 0.0900068 + -0.240011 0.062836 3.3258 -0.268919 -0.962853 0.0244205 + -0.727645 0.176995 3.20547 -0.240519 -0.908464 0.341826 + -0.572743 0.148067 3.27457 -0.261168 -0.951636 0.161806 + -0.411303 0.098302 3.23277 -0.246099 -0.964385 0.096937 + -0.241214 0.058268 3.24551 -0.232564 -0.971402 0.0478737 + -0.731737 0.138056 3.12391 -0.183317 -0.917877 0.351989 + -0.572005 0.127007 3.19045 -0.192548 -0.954332 0.228419 + -0.413808 0.091427 3.15228 -0.197864 -0.970177 0.14002 + -0.251182 0.05854 3.16844 -0.213808 -0.975344 0.0546902 + -0.571155 0.111987 3.10727 -0.135003 -0.963711 0.230294 + -0.412958 0.07632 3.06904 -0.164885 -0.97552 0.145512 + -0.253687 0.051659 3.08796 -0.17859 -0.981442 0.0698416 + -0.136247 0.029047 3.06873 -0.177746 -0.983472 0.0344942 + -0.128314 0.029368 3.14517 -0.192969 -0.980971 0.0213986 + -0.41457 0.065308 2.98852 -0.0994723 -0.975113 0.198139 + -0.257193 0.049803 3.01057 -0.147046 -0.985872 0.0802129 + -0.139753 0.0271 2.9913 -0.176826 -0.983373 0.0413576 + -0.057365 0.016899 3.09136 -0.189413 -0.981345 0.0329282 + -0.049432 0.017313 3.16785 -0.220177 -0.975448 0.00477787 + -0.258805 0.038703 2.93 -0.094602 -0.987831 0.123453 + -0.144791 0.024377 2.91461 -0.154305 -0.985154 0.075238 + -0.067193 0.015366 3.01382 -0.194394 -0.979884 0.0451481 + -0.022521 0.005565 3.0174 -0.234458 -0.971898 0.0210687 + -0.012693 0.007103 3.09493 -0.545909 -0.836837 0.0410699 + -0.139603 0.017087 2.83684 -0.121366 -0.989332 0.0805702 + -0.072231 0.012645 2.93713 -0.189703 -0.980776 0.0457299 + -0.028391 0.003156 2.93997 -0.208115 -0.977209 0.0418421 + -0.005468 0.001829 3.01207 -0.105693 -0.994375 -0.0068918 + -0.005468 -0.002888 3.08724 -0.415117 -0.909698 0.011265 + -0.083299 0.012198 2.85971 -0.15622 -0.986313 0.0527342 + -0.03946 0.002704 2.86255 -0.327407 -0.941418 0.0808473 + -0.011338 -0.000585 2.93465 -0.122615 -0.989707 0.0738005 + 0.005478 0.001819 3.01208 0.104796 -0.99447 -0.00693339 + -0.043309 -0.002418 2.79002 -0.336811 -0.939596 0.0609669 + -0.011338 -0.012557 2.85838 -0.232525 -0.965861 0.114213 + 0.011342 -0.012567 2.8584 0.224626 -0.969097 0.101952 + 0.011342 -0.000595 2.93466 0.0928812 -0.990405 0.102329 + -0.015187 -0.017678 2.78586 -0.259508 -0.961864 0.0864487 + 0.015202 -0.017673 2.78585 0.243163 -0.964262 0.105216 + 0.039464 0.002694 2.86257 0.339633 -0.938111 0.0678075 + 0.028396 0.003146 2.93999 0.219049 -0.973626 0.063803 + 0.022531 0.005555 3.01741 0.234615 -0.971859 0.0211035 + 0.015202 -0.027834 2.70905 0.317365 -0.946797 0.0534323 + 0.043324 -0.002408 2.79001 0.346204 -0.935126 0.0753743 + 0.083303 0.012198 2.85971 0.172472 -0.982808 0.0658886 + 0.072235 0.012645 2.93713 0.193501 -0.980241 0.0410494 + 0.067193 0.015366 3.01382 0.192719 -0.980283 0.0436479 + 0.045049 -0.00408 2.7117 0.413914 -0.910105 0.0195777 + 0.086319 0.003583 2.70243 0.0410699 -0.996078 0.0783683 + 0.084593 0.005254 2.78074 0.153332 -0.986439 0.0585433 + 0.139607 0.017087 2.83684 0.117096 -0.98928 0.0872591 + 0.144795 0.024377 2.91461 0.144259 -0.987215 0.0677871 + 0.084669 -0.002766 2.62423 -0.0617981 -0.997488 0.0346231 + 0.139327 -0.007745 2.68045 -0.0714778 -0.987192 0.142629 + 0.140897 0.010143 2.75787 0.0428646 -0.988731 0.143434 + 0.253621 0.03142 2.85222 0.0631227 -0.985984 0.15444 + 0.251053 -0.004552 2.69472 -0.0205557 -0.977852 0.208287 + 0.252623 0.013338 2.77213 0.00454647 -0.974858 0.222781 + 0.419748 0.045343 2.9059 0.0382705 -0.972933 0.227898 + 0.414573 0.065225 2.98846 0.0925768 -0.977508 0.189494 + 0.258808 0.038709 2.92999 0.119044 -0.986881 0.109061 + 0.245864 -0.020802 2.61547 -0.0450001 -0.987796 0.149111 + 0.417835 0.000753 2.74293 -0.0102218 -0.967138 0.254046 + 0.41875 0.027259 2.82582 0.009627 -0.965158 0.26149 + 0.579673 0.064888 2.94204 0.0597813 -0.960795 0.270737 + 0.412647 -0.015497 2.66368 0.000161769 -0.984052 0.177879 + 0.578916 0.01297 2.77557 0.0462489 -0.96505 0.257953 + 0.579831 0.039477 2.85846 0.0267341 -0.954405 0.297314 + 0.568876 -0.006835 2.69207 0.058004 -0.980775 0.186324 + 0.733691 0.030489 2.78823 0.118975 -0.968217 0.220002 + 0.740988 0.051478 2.87467 0.10199 -0.958757 0.265297 + 0.740831 0.076886 2.95827 0.0930372 -0.937445 0.335471 + 0.723651 0.010684 2.70473 0.100899 -0.972782 0.2086 + 0.878345 0.056773 2.8081 0.161779 -0.952639 0.257502 + 0.885642 0.077761 2.89455 0.209306 -0.940553 0.26749 + 0.879242 0.105538 2.97704 0.190034 -0.918028 0.348011 + 0.735081 0.110928 3.0413 0.12501 -0.929839 0.346081 + 0.866441 0.031135 2.72791 0.14127 -0.962327 0.232314 + 1.0181 0.09005 2.83806 0.288674 -0.901849 0.321459 + 1.00819 0.121292 2.91955 0.309697 -0.893407 0.325442 + 1.00179 0.149068 3.00204 0.31055 -0.888948 0.336645 + 1.14825 0.135812 2.7952 0.477761 -0.836376 0.268737 + 1.13835 0.167054 2.87669 0.43871 -0.847828 0.29786 + 1.1375 0.190275 2.96227 0.404007 -0.865537 0.296013 + 0.987585 0.174579 3.08026 0.277919 -0.88612 0.370879 + 0.873492 0.139581 3.06007 0.171449 -0.904088 0.391445 + 1.27729 0.20953 2.76852 0.447254 -0.87839 0.168505 + 1.27644 0.232753 2.85409 0.419725 -0.880691 0.219577 + 1.27815 0.254457 2.9473 0.433511 -0.860289 0.268275 + 1.12329 0.215782 3.04049 0.383657 -0.865379 0.322376 + 1.36812 0.239706 2.69325 0.35387 -0.92621 0.130043 + 1.38555 0.257779 2.75535 0.401543 -0.894754 0.195395 + 1.38726 0.279569 2.84861 0.415337 -0.884371 0.213033 + 1.25862 0.275212 3.03255 0.34458 -0.911028 0.226479 + 1.10376 0.236451 3.12569 0.337351 -0.862155 0.377999 + 1.45865 0.292208 2.75412 0.377058 -0.897711 0.227907 + 1.43366 0.302875 2.84704 0.498047 -0.835579 0.231855 + 1.36228 0.290151 2.94148 0.369389 -0.907805 0.198601 + 1.22725 0.281244 3.12211 0.336045 -0.900284 0.2767 + 1.53776 0.278788 2.59336 0.289635 -0.937107 0.194788 + 1.52991 0.303479 2.69539 0.263006 -0.938207 0.224936 + 1.52448 0.322081 2.78258 0.239668 -0.947407 0.212085 + 1.43646 0.319034 2.89445 0.402411 -0.886375 0.228921 + 1.3309 0.296182 3.03103 0.391174 -0.893738 0.219579 + 1.55052 0.27074 2.5231 0.251055 -0.961182 0.114455 + 1.60411 0.296972 2.58606 0.255773 -0.952171 0.167186 + 1.60493 0.308399 2.65827 0.215367 -0.958995 0.184244 + 1.5995 0.32692 2.74539 0.244897 -0.9413 0.232335 + 1.61079 0.282559 2.44383 0.307897 -0.949251 0.0641983 + 1.61687 0.289009 2.51586 0.288656 -0.95256 0.0964765 + 1.68044 0.311601 2.54813 0.280225 -0.954062 0.106022 + 1.68126 0.323028 2.62033 0.290887 -0.93879 0.184549 + 1.67697 0.338785 2.69304 0.347961 -0.902702 0.253084 + 1.67283 0.301677 2.40131 0.326744 -0.944974 -0.0162184 + 1.67891 0.30813 2.47334 0.294815 -0.954304 0.0488664 + 1.76063 0.331107 2.49574 0.393415 -0.916542 0.0719432 + 1.75666 0.338295 2.57209 0.421724 -0.892274 0.161231 + 1.75237 0.35405 2.6448 0.473063 -0.833312 0.286012 + 1.66911 0.305741 2.32728 0.358539 -0.931453 -0.0620026 + 1.75689 0.338735 2.34433 0.370444 -0.922719 -0.106588 + 1.8377 0.380109 2.51327 0.619263 -0.770963 0.14876 + 1.90183 0.448913 2.5195 0.720918 -0.663364 0.200564 + 1.82288 0.386233 2.58806 0.629101 -0.736658 0.248124 + 1.74226 0.381653 2.72039 0.523959 -0.785853 0.328483 + 1.67252 0.357199 2.76395 0.407948 -0.861818 0.301411 + 1.59506 0.345333 2.8163 0.318901 -0.905614 0.27958 + 1.88033 0.447599 2.59177 0.735914 -0.618859 0.274672 + 1.81277 0.413835 2.66365 0.638111 -0.697144 0.326811 + 1.80017 0.435389 2.73712 0.64469 -0.686637 0.336012 + 1.73703 0.409576 2.79283 0.551789 -0.754433 0.355471 + 1.66729 0.385121 2.83638 0.460618 -0.814041 0.353791 + 1.97125 0.522689 2.50491 0.783444 -0.544054 0.300367 + 1.94391 0.538627 2.57991 0.824773 -0.422136 0.376233 + 1.86774 0.469151 2.66524 0.74995 -0.572201 0.331906 + 2.04338 0.641992 2.48507 0.8003 -0.356393 0.482186 + 2.00156 0.671104 2.55665 0.815761 -0.367652 0.446504 + 1.9252 0.559805 2.65102 0.853673 -0.381397 0.354654 + 1.84902 0.490325 2.73637 0.765963 -0.540033 0.348804 + 2.08783 0.747855 2.47611 0.728122 -0.512401 0.455283 + 2.05961 0.759091 2.55805 0.676199 -0.714293 0.180389 + 1.97589 0.68658 2.63224 0.807879 -0.554937 0.198437 + 1.89952 0.575276 2.72663 0.835641 -0.416735 0.35782 + 2.14557 0.806572 2.49401 0.636439 -0.741605 0.212056 + 2.12988 0.805667 2.58238 0.633329 -0.758526 0.153404 + 2.04427 0.746279 2.64364 0.668605 -0.734754 0.114475 + 1.96054 0.673768 2.71784 0.776055 -0.602021 0.187908 + 2.12532 0.8343 2.67978 0.703705 -0.635687 0.317335 + 2.03971 0.774912 2.74105 0.727287 -0.637899 0.253256 + 1.97095 0.723982 2.81546 0.73085 -0.638748 0.240539 + 1.88301 0.61507 2.7967 0.801144 -0.499889 0.329058 + 2.1098 0.896364 2.79808 0.781095 -0.582923 0.22381 + 2.07563 0.857085 2.85552 0.770821 -0.608836 0.187495 + 2.00687 0.806154 2.92993 0.730264 -0.637064 0.246706 + 1.89342 0.665197 2.89428 0.740708 -0.622613 0.252396 + 1.82403 0.563674 2.87752 0.818069 -0.479014 0.318289 + 2.21145 0.973508 2.71487 0.709761 -0.578447 0.402042 + 2.27515 1.08941 2.76691 0.716988 -0.627549 0.303496 + 2.20761 1.03299 2.84985 0.757698 -0.64678 0.087003 + 2.17343 0.993706 2.90729 0.755539 -0.640832 0.135995 + 2.4665 1.2873 2.72756 0.824175 -0.499171 0.267515 + 2.39896 1.23088 2.81049 0.780419 -0.592657 0.19926 + 2.31753 1.15141 2.90992 0.768974 -0.608232 0.196809 + 2.2371 1.09047 2.99829 0.727608 -0.602398 0.328182 + 2.093 0.932672 2.9956 0.73203 -0.621668 0.278677 + 2.63704 1.62676 2.7512 0.879415 -0.415083 0.233099 + 2.56483 1.51211 2.81178 0.861252 -0.429022 0.272368 + 2.48791 1.4137 2.88484 0.839807 -0.455684 0.295089 + 2.40648 1.33423 2.98427 0.816887 -0.464329 0.342191 + 2.66443 1.83164 2.93074 0.862754 -0.373821 0.34046 + 2.58932 1.72218 2.99012 0.848903 -0.385681 0.361406 + 2.5124 1.62377 3.06318 0.837052 -0.398514 0.374873 + 2.43139 1.53416 3.14119 0.817052 -0.414312 0.400963 + 2.75351 2.22044 3.07832 0.887369 -0.304368 0.34632 + 2.69228 2.10032 3.12978 0.872048 -0.335766 0.356081 + 2.61717 1.99095 3.18921 0.856066 -0.360912 0.369992 + 2.54987 1.87835 3.24403 0.852742 -0.377318 0.361196 + 2.7715 2.56331 3.31005 0.888469 -0.275229 0.367249 + 2.71027 2.44319 3.36151 0.897166 -0.27624 0.344651 + 2.65797 2.31693 3.40519 0.882 -0.30097 0.362619 + 2.59067 2.20433 3.46002 0.873434 -0.322625 0.364728 + 2.84745 2.98667 3.42657 0.919023 -0.228203 0.321433 + 2.78998 2.87553 3.49106 0.902217 -0.25822 0.345438 + 2.73795 2.76963 3.5519 0.903081 -0.256803 0.344235 + 2.68565 2.64337 3.59557 0.885822 -0.270075 0.377331 + 2.86219 3.25922 3.54671 0.931082 -0.125918 0.342391 + 2.81782 3.17507 3.64045 0.908045 -0.161303 0.386569 + 2.76579 3.06917 3.70128 0.871917 -0.220282 0.437307 + 2.71231 2.98091 3.75194 0.846006 -0.23613 0.478034 + 2.91085 3.34236 3.45169 0.932995 -0.109232 0.342912 + 2.86882 3.6075 3.58566 0.918821 0.0191131 0.394212 + 2.82858 3.53202 3.684 0.915992 0.00166416 0.401192 + 2.78421 3.44796 3.7778 0.893693 -0.0386005 0.447016 + 2.73363 3.37131 3.86196 0.849296 -0.103629 0.517646 + 2.91061 3.68128 3.48288 0.932271 0.0574913 0.357162 + 2.77752 3.86569 3.72906 0.869644 0.183478 0.458317 + 2.73728 3.79021 3.8274 0.860969 0.157561 0.48364 + 2.69578 3.71683 3.92249 0.839304 0.117564 0.530798 + 2.64521 3.64027 4.0067 0.825363 0.0655243 0.560787 + 2.81027 3.93579 3.62845 0.881263 0.221044 0.417749 + 2.65981 4.2023 3.73764 0.800813 0.365353 0.474568 + 2.62706 4.1322 3.83826 0.788217 0.33311 0.517447 + 2.57458 4.05159 3.96266 0.774472 0.309838 0.551538 + 2.53309 3.97831 4.05781 0.761553 0.295189 0.576975 + 2.69624 4.2745 3.60898 0.811777 0.390578 0.434128 + 2.48365 4.46478 3.7772 0.722277 0.477387 0.500417 + 2.41988 4.38871 3.93257 0.70421 0.451007 0.548344 + 2.3674 4.3081 4.05697 0.688713 0.417396 0.592836 + 2.52007 4.5369 3.64849 0.744217 0.509115 0.432369 + 2.30518 4.77869 3.6845 0.668764 0.58469 0.459231 + 2.26262 4.69396 3.83745 0.650303 0.558412 0.515056 + 2.19885 4.61797 3.99287 0.629096 0.535358 0.563587 + 2.32379 4.85822 3.53916 0.681875 0.598803 0.420096 + 2.06904 5.08721 3.59373 0.609577 0.645066 0.460767 + 2.04024 5.00608 3.73765 0.588631 0.635531 0.499614 + 1.99768 4.92135 3.8906 0.569334 0.621192 0.538497 + 2.35703 4.93946 3.37123 0.691627 0.597259 0.40612 + 2.10228 5.16854 3.42585 0.624334 0.643193 0.443294 + 1.83605 5.37169 3.47939 0.5523 0.686016 0.473653 + 1.7827 5.29043 3.64674 0.528337 0.682205 0.505427 + 2.38671 5.03469 3.1669 0.705799 0.599771 0.376992 + 2.14678 5.24937 3.24905 0.639582 0.645464 0.417506 + 1.88054 5.45252 3.30259 0.564334 0.700318 0.437129 + 2.15799 5.36113 3.04749 0.644118 0.656742 0.392176 + 1.88536 5.57239 3.09256 0.562162 0.71492 0.415768 + 1.57272 5.63453 3.36494 0.485663 0.750627 0.447985 + 1.55978 5.56028 3.50194 0.482617 0.734066 0.477731 + 1.50643 5.47902 3.66929 0.459996 0.706389 0.537976 + 2.17244 5.50219 2.78196 0.660012 0.660936 0.357137 + 1.8998 5.71355 2.82708 0.564536 0.722204 0.399651 + 1.54926 5.91866 2.89781 0.486488 0.76343 0.424859 + 1.57754 5.7544 3.15491 0.487899 0.755819 0.436683 + 1.28068 5.78732 3.39111 0.404312 0.786735 0.466454 + 2.18262 5.59851 2.57112 0.684506 0.666897 0.294448 + 1.8881 5.8293 2.62758 0.574272 0.734283 0.361994 + 1.53756 6.03442 2.69831 0.486178 0.774635 0.40444 + 1.25476 6.06039 2.95013 0.393231 0.80018 0.452858 + 1.28304 5.89613 3.20723 0.40484 0.788817 0.462464 + 1.84999 5.92615 2.48144 0.565953 0.743822 0.355564 + 1.53535 6.10826 2.55442 0.488287 0.786093 0.378989 + 1.23443 6.24429 2.6212 0.396847 0.819859 0.412728 + 1.23664 6.17045 2.76509 0.392648 0.813214 0.429547 + 0.997951 6.13756 2.99886 0.324617 0.825652 0.461434 + 0.939671 6.31905 2.71111 0.300156 0.848784 0.435285 + 0.979823 6.24763 2.81382 0.313377 0.83241 0.457044 + 0.783409 6.18987 3.04706 0.264558 0.846345 0.462287 + 1.00322 6.01473 3.21841 0.332757 0.8177 0.469723 + 1.00086 5.90592 3.40229 0.315086 0.799533 0.511339 + 0.674401 6.34161 2.83165 0.238381 0.852093 0.465954 + 0.714553 6.27018 2.93436 0.245672 0.848341 0.469002 + 0.557653 6.13094 3.26013 0.212372 0.845695 0.489589 + 0.788676 6.06704 3.26661 0.267708 0.830228 0.488932 + 0.756484 5.99632 3.3973 0.250507 0.811743 0.52756 + 0.644018 6.42086 2.69499 0.235396 0.873096 0.426957 + 0.45681 6.34753 2.91038 0.186247 0.864038 0.467707 + 0.488798 6.21125 3.14743 0.201918 0.857328 0.473516 + 0.327174 6.15706 3.3087 0.176032 0.85643 0.485325 + 0.525461 6.06022 3.39082 0.213677 0.828862 0.517039 + 0.587404 6.47226 2.61534 0.210112 0.887176 0.410819 + 0.388277 6.47524 2.68259 0.124825 0.896385 0.425339 + 0.426427 6.4267 2.77367 0.154748 0.885724 0.437659 + 0.271817 6.35498 2.96229 0.108529 0.884751 0.453252 + 0.295187 6.29334 3.07165 0.148546 0.870544 0.469135 + 0.759644 6.52008 2.36851 0.268079 0.912171 0.309962 + 0.572748 6.51135 2.53785 0.227254 0.897194 0.37868 + 0.373621 6.51423 2.60505 0.120753 0.903521 0.411179 + 0.233667 6.40344 2.87116 0.0585024 0.901215 0.429406 + 0.686856 6.56267 2.30035 0.272553 0.910747 0.310249 + 0.49996 6.55393 2.46969 0.173065 0.921237 0.348384 + 0.400587 6.57829 2.44071 0.13517 0.914495 0.381351 + 0.274247 6.53868 2.5761 0.0635051 0.919083 0.388912 + 0.822127 6.61587 2.016 0.296922 0.916884 0.266759 + 0.581013 6.59979 2.28966 0.258678 0.903077 0.342836 + 0.349068 6.61759 2.37783 0.136546 0.902966 0.407439 + 0.141685 6.57025 2.50863 0.037565 0.911875 0.408745 + 0.824584 6.64574 1.90967 0.338734 0.911209 0.23443 + 0.529494 6.63918 2.22683 0.206397 0.927995 0.310203 + 0.531951 6.66896 2.12045 0.217955 0.941752 0.256122 + 0.326565 6.65188 2.30544 0.147469 0.921502 0.359287 + 0.119182 6.60453 2.43624 0.0389747 0.91035 0.412 + 0.474678 6.69206 2.07765 0.193211 0.948023 0.252828 + 0.638605 6.73993 1.72974 0.250156 0.954855 0.160228 + 0.414618 6.72581 1.99439 0.172462 0.958677 0.226265 + 0.269292 6.67497 2.26263 0.0982191 0.937131 0.334871 + 0.200218 6.68836 2.23805 0.0540197 0.94385 0.325928 + 0.050108 6.61792 2.41166 0.0148797 0.913553 0.406449 + 0.294177 6.73724 2.02838 0.112282 0.967813 0.225233 + -0.050108 6.70567 2.20727 -0.0185939 0.950177 0.311156 + 0.144067 6.75447 1.99756 0.0674644 0.97135 0.227878 + 0.345751 6.08485 3.42576 0.197929 0.837581 0.509198 + 0.549237 5.97989 3.50496 0.223845 0.817178 0.531144 + 0.741024 5.91316 3.52434 0.2526 0.803107 0.53964 + 0.369527 6.00461 3.53995 0.21342 0.819175 0.532357 + 0.537997 5.88923 3.64818 0.223215 0.816817 0.531963 + 0.729784 5.82241 3.66751 0.26094 0.808392 0.527648 + 0.985396 5.82275 3.52933 0.295445 0.787513 0.540865 + 0.375098 5.93861 3.63925 0.214275 0.818843 0.532525 + 0.530928 5.7715 3.8319 0.218166 0.808617 0.546391 + 0.706856 5.73509 3.81456 0.255343 0.802228 0.539657 + 0.939765 5.64185 3.82746 0.32104 0.776834 0.541722 + 0.962693 5.72918 3.6804 0.305318 0.789086 0.533033 + 0.368029 5.82088 3.82297 0.202782 0.809691 0.550709 + 0.517657 5.66625 3.9878 0.196518 0.786404 0.585619 + 0.693585 5.62984 3.97047 0.255292 0.782145 0.568397 + 0.887986 5.53922 3.99263 0.313606 0.754968 0.575912 + 1.17714 5.49992 3.8751 0.366756 0.73621 0.568757 + 0.355791 5.75569 3.91968 0.174558 0.789322 0.588643 + 0.488028 5.58849 4.09428 0.165202 0.768102 0.61865 + 0.661059 5.50964 4.14565 0.231286 0.756949 0.611175 + 0.85546 5.41902 4.1678 0.312914 0.72923 0.608529 + 0.326162 5.67794 4.02615 0.137714 0.770415 0.622492 + 0.420165 5.48927 4.23294 0.136756 0.7557 0.640481 + 0.593196 5.41042 4.28431 0.204667 0.732211 0.649598 + 0.798127 5.31308 4.3117 0.28831 0.689753 0.664167 + 1.08361 5.29444 4.18419 0.363359 0.692846 0.622843 + 0.286638 5.61296 4.1119 0.106079 0.761158 0.639833 + 0.331182 5.372 4.38366 0.101051 0.737328 0.667934 + 0.503427 5.31304 4.41678 0.178207 0.714874 0.676164 + 0.708359 5.21562 4.44412 0.274202 0.659676 0.699743 + 0.197655 5.49568 4.26263 0.0849289 0.748852 0.657273 + 0.288186 5.27331 4.49538 0.0325703 0.704415 0.709041 + 0.460431 5.21435 4.5285 0.165698 0.669112 0.724453 + 0.632041 5.1284 4.55099 0.249119 0.622421 0.741979 + 0.960334 5.09124 4.44514 0.333484 0.613815 0.715555 + 0.13439 5.44638 4.32683 0.0988213 0.726283 0.680255 + 0.158013 5.22322 4.54455 0.0596786 0.673818 0.736483 + 0.237468 5.2187 4.54617 0.0182112 0.672397 0.739966 + 0.375694 5.11286 4.63109 0.125884 0.626533 0.769162 + 0.547303 5.02682 4.65352 0.211203 0.592295 0.777547 + 0.057219 5.19265 4.58649 0.0661675 0.636753 0.768224 + 0.057219 4.99359 4.73147 -0.000951834 0.568615 0.822603 + 0.178172 5.00026 4.72992 -0.00246085 0.587644 0.809116 + 0.257627 4.99574 4.73155 0.0446175 0.574868 0.817029 + 0.324975 5.05817 4.68183 0.0774402 0.606287 0.791466 + -0.057219 4.99359 4.73147 0.009684 0.55878 0.82926 + -0.082772 4.79088 4.85818 0.00792762 0.471989 0.881569 + 0.082772 4.79088 4.85818 -0.00729618 0.471345 0.881918 + 0.203725 4.79746 4.85658 0.00614009 0.477745 0.878477 + -0.285444 4.61442 4.94182 -0.00909633 0.34753 0.937625 + -0.082772 4.60556 4.94236 0.00584276 0.338859 0.940819 + 0.082772 4.60556 4.94237 -0.00550107 0.339355 0.940642 + -0.414322 4.60138 4.944 -0.0730218 0.350262 0.933801 + -0.543759 4.3414 5.00711 -0.096371 0.255155 0.962085 + -0.32929 4.34471 5.01577 -0.0174748 0.231047 0.972786 + -0.126618 4.33594 5.01637 0.00453156 0.223685 0.974651 + 0.126618 4.33593 5.01637 -0.0036363 0.222666 0.974888 + -0.652423 4.35926 4.98337 -0.163386 0.293037 0.942037 + -0.865682 4.01294 5.04901 -0.158428 0.20174 0.966541 + -0.630538 3.96772 5.07934 -0.0683377 0.159628 0.984809 + -0.416069 3.97103 5.08801 -0.0130168 0.152022 0.988291 + -0.993086 3.68812 5.07863 -0.145179 0.109087 0.983373 + -0.757941 3.64289 5.10896 -0.0829358 0.0858739 0.992848 + -0.68639 3.5435 5.12112 -0.0908882 0.0567809 0.994241 + -0.617987 3.54915 5.12692 -0.0555106 0.0607834 0.996606 + -0.458076 3.63911 5.12571 -0.00482345 0.0729424 0.997324 + -1.14611 3.67064 5.05489 -0.209345 0.114193 0.971151 + -1.07239 3.31675 5.08426 -0.149515 -0.0227936 0.988497 + -0.958763 3.27031 5.09969 -0.155883 -0.0308165 0.987295 + -0.887212 3.17091 5.11186 -0.186098 -0.111764 0.976154 + -1.35755 3.42205 5.02166 -0.347305 0.0322172 0.937199 + -1.22541 3.29936 5.06057 -0.221265 -0.0421611 0.974302 + -1.21843 3.01113 5.0242 -0.237574 -0.211563 0.94805 + -1.46484 3.21364 4.96944 -0.391974 -0.0899445 0.915569 + -1.33271 3.09095 5.00835 -0.319776 -0.162291 0.933491 + -1.35202 2.81481 4.92064 -0.243946 -0.370148 0.896371 + -1.10481 2.96469 5.03964 -0.147728 -0.250786 0.956704 + -1.58122 3.30616 4.9266 -0.418372 -0.049682 0.906916 + -1.57552 2.96247 4.87328 -0.445247 -0.222031 0.867443 + -1.46629 2.89463 4.90478 -0.373747 -0.274154 0.886088 + -1.44593 2.60017 4.80041 -0.265986 -0.404283 0.875104 + -1.24339 2.76206 4.9082 -0.186225 -0.427257 0.884744 + -1.6919 3.05489 4.8304 -0.476125 -0.19396 0.857721 + -1.66799 2.72722 4.74575 -0.486702 -0.323524 0.811451 + -1.55875 2.65939 4.77724 -0.411929 -0.357509 0.838154 + -1.7774 2.78615 4.69809 -0.525407 -0.309852 0.792426 + -1.72681 2.49021 4.58866 -0.523177 -0.367512 0.768909 + -1.61373 2.43179 4.63605 -0.456024 -0.379509 0.804994 + -1.50091 2.37249 4.65916 -0.365956 -0.379789 0.84961 + -1.61944 2.1369 4.49541 -0.503119 -0.355866 0.787548 + -1.50006 2.09219 4.54966 -0.42656 -0.33998 0.838129 + -1.37672 2.32352 4.68958 -0.306188 -0.35425 0.883604 + -1.33731 2.54742 4.78797 -0.181192 -0.390987 0.902385 + -1.4519 1.7518 4.43043 -0.517268 -0.343495 0.783865 + -1.33155 1.71384 4.49857 -0.466253 -0.310613 0.828329 + -1.37586 2.04314 4.58001 -0.364773 -0.302321 0.880649 + -1.24894 2.0079 4.62565 -0.342694 -0.280648 0.896547 + -1.25794 2.27592 4.70703 -0.27795 -0.313926 0.907851 + -1.28469 1.42995 4.40648 -0.523484 -0.356986 0.773645 + -1.16026 1.40077 4.47283 -0.448639 -0.329041 0.830936 + -1.20462 1.67869 4.54425 -0.388639 -0.278691 0.878232 + -1.11225 1.17063 4.39344 -0.502591 -0.390755 0.771176 + -0.985985 1.14855 4.46448 -0.417304 -0.361795 0.833644 + -1.0296 1.369 4.51986 -0.364949 -0.290132 0.884667 + -1.07396 1.64692 4.59128 -0.327578 -0.257932 0.908935 + -0.949773 0.968969 4.39253 -0.42568 -0.467572 0.774708 + -0.811769 0.938248 4.43574 -0.304831 -0.47348 0.826374 + -0.851214 1.11841 4.50649 -0.295048 -0.344777 0.891109 + -0.89483 1.33894 4.56192 -0.278806 -0.270597 0.921436 + -0.781792 0.809541 4.36027 -0.291312 -0.588875 0.753899 + -0.640455 0.753492 4.35995 -0.218559 -0.616575 0.756351 + -0.671365 0.901889 4.45952 -0.187984 -0.477371 0.858358 + -0.71081 1.08213 4.53032 -0.203492 -0.340799 0.917849 + -0.603886 0.57968 4.2122 -0.204478 -0.682206 0.701985 + -0.457249 0.502509 4.16846 -0.181902 -0.706786 0.683641 + -0.505232 0.693511 4.34644 -0.146638 -0.628048 0.764234 + -0.536142 0.841995 4.44606 -0.114587 -0.508646 0.853316 + -0.413246 0.285763 3.95348 -0.112729 -0.759461 0.640712 + -0.227673 0.222295 3.88321 -0.114031 -0.794323 0.596697 + -0.336282 0.412749 4.11293 -0.221337 -0.757548 0.614109 + -0.384266 0.603749 4.29091 -0.126542 -0.650435 0.748947 + -0.199094 0.111016 3.73595 -0.16742 -0.856193 0.488779 + -0.081146 0.054032 3.68825 -0.160018 -0.818297 0.552073 + -0.118188 0.172667 3.84657 -0.0611245 -0.789582 0.610593 + -0.226797 0.363122 4.07629 -0.155787 -0.757273 0.634246 + -0.104906 0.019918 3.59514 -0.49197 -0.81746 0.299542 + -0.032368 -0.044339 3.60443 -0.279536 -0.828981 0.484407 + -0.032368 0.030536 3.65695 0.0757885 -0.682439 0.727003 + -0.069411 0.149083 3.81521 -0.162708 -0.821924 0.545864 + -0.109104 0.005884 3.52904 -0.53606 -0.840783 0.0756582 + -0.036567 -0.058374 3.53834 -0.300194 -0.948498 -0.10117 + 0.036568 -0.058369 3.53833 0.331794 -0.933619 -0.135158 + 0.032373 -0.044339 3.60443 0.307896 -0.79988 0.515162 + -0.107572 0.008307 3.45165 -0.399618 -0.902064 -0.163052 + -0.036567 -0.018551 3.47337 -0.110209 -0.917471 -0.382232 + 0.036568 -0.018547 3.47336 0.21938 -0.926087 -0.306977 + 0.109105 0.005889 3.52904 0.485817 -0.873742 0.0235984 + 0.10491 0.019918 3.59514 0.438857 -0.827357 0.350549 + -0.107747 0.02312 3.37639 -0.334062 -0.940766 -0.0579841 + -0.036742 -0.00374 3.39811 -0.13722 -0.974925 -0.175192 + 0.036742 -0.00374 3.39811 0.150444 -0.969559 -0.193188 + 0.107573 0.008312 3.45164 0.368661 -0.921873 -0.119331 + -0.112881 0.02451 3.29918 -0.238683 -0.970165 -0.0425471 + -0.036742 0.011515 3.32289 -0.0877069 -0.990913 -0.101977 + 0.036742 0.011515 3.32289 0.127384 -0.989278 -0.0714273 + 0.107747 0.02312 3.37639 0.295661 -0.951092 -0.089489 + 0.235538 0.064179 3.48367 0.349687 -0.936789 -0.0120809 + -0.118346 0.029102 3.22223 -0.206854 -0.978367 0.00299602 + -0.042206 0.01602 3.24589 -0.224925 -0.974235 -0.0165609 + 0.001808 0.003301 3.25612 -0.152057 -0.987796 0.0337263 + -0.00902 0.004506 3.17803 -0.6074 -0.794312 -0.0115841 + -0.001795 -0.013757 3.24666 -0.565669 -0.725684 0.391666 + 0.001808 0.003301 3.25612 -0.000334 -0.484823 0.874612 + 0.001808 -0.013762 3.24667 -0.0023907 -0.887409 0.460977 + -0.001795 -0.005478 3.17033 -0.457664 -0.888022 -0.0442719 + 0.005478 -0.002898 3.08726 0.414386 -0.91003 0.0113895 + 0.009033 0.004594 3.17808 0.571837 -0.819982 0.0251326 + 0.001808 0.003301 3.25612 0.327917 -0.944672 -0.00810761 + 0.012703 0.007093 3.09495 0.545859 -0.836854 0.041393 + 0.049429 0.017318 3.16784 0.223219 -0.974734 0.00823755 + 0.042204 0.016025 3.24588 0.230259 -0.972959 -0.0181781 + 0.112881 0.02451 3.29918 0.225763 -0.973854 -0.025298 + 0.057365 0.016899 3.09136 0.188742 -0.981457 0.0334541 + 0.128312 0.029374 3.14516 0.191887 -0.981143 0.0231842 + 0.118344 0.029107 3.22222 0.202844 -0.979211 -0.000587482 + 0.240013 0.062841 3.32579 0.27246 -0.961723 0.0292462 + 0.234878 0.06145 3.403 0.297965 -0.954448 0.0156532 + 0.136247 0.029047 3.06873 0.179538 -0.983107 0.0355803 + 0.251182 0.05854 3.16844 0.217895 -0.97409 0.0605827 + 0.241214 0.058268 3.24551 0.243353 -0.968986 0.0429475 + 0.415574 0.114334 3.3968 0.28046 -0.957062 0.0733089 + 0.418471 0.122747 3.48063 0.305017 -0.95071 0.0558167 + 0.139753 0.0271 2.9913 0.177521 -0.983276 0.0406776 + 0.257193 0.049803 3.01057 0.153721 -0.984058 0.0894388 + 0.253687 0.051659 3.08796 0.199049 -0.978195 0.0592768 + 0.411303 0.098302 3.23277 0.232739 -0.966894 0.104638 + 0.416776 0.109762 3.31652 0.262048 -0.961217 0.0859871 + 0.412958 0.07632 3.06904 0.143879 -0.976982 0.157498 + 0.413808 0.091427 3.15228 0.192239 -0.972347 0.132612 + 0.572745 0.148072 3.27457 0.266854 -0.949124 0.167191 + 0.578218 0.159532 3.35832 0.300646 -0.946352 0.118451 + 0.579692 0.171394 3.44337 0.318611 -0.942383 0.101989 + 0.57116 0.111997 3.10725 0.1552 -0.955842 0.249555 + 0.57201 0.127017 3.19044 0.22425 -0.952895 0.204211 + 0.728385 0.197976 3.28953 0.291852 -0.93287 0.211131 + 0.729604 0.216282 3.37662 0.320706 -0.933856 0.158303 + 0.731078 0.228144 3.46168 0.349335 -0.929241 0.120313 + 0.574499 0.084859 3.02466 0.0898395 -0.956272 0.278338 + 0.731742 0.138062 3.12391 0.153541 -0.915014 0.37306 + 0.727649 0.177005 3.20545 0.222837 -0.919064 0.325061 + 0.848913 0.240285 3.30245 0.271862 -0.923503 0.270617 + 0.862604 0.172535 3.13899 0.187145 -0.892695 0.409966 + 0.858511 0.211475 3.22055 0.208629 -0.897126 0.389408 + 0.946212 0.270982 3.31688 0.254217 -0.914281 0.315379 + 0.931263 0.292165 3.39719 0.310634 -0.92007 0.238699 + 0.850132 0.258502 3.3895 0.334571 -0.922842 0.190852 + 0.976696 0.207529 3.15919 0.253914 -0.86402 0.434737 + 0.95581 0.242177 3.23497 0.253761 -0.884774 0.390871 + 1.0655 0.294472 3.2842 0.262135 -0.913895 0.309971 + 1.08288 0.271099 3.20148 0.28156 -0.879744 0.383112 + 1.20987 0.304616 3.20482 0.31726 -0.88963 0.328486 + 1.19868 0.33381 3.29126 0.315343 -0.893151 0.320686 + 1.05055 0.315746 3.36455 0.263823 -0.915205 0.304627 + 1.3337 0.312427 3.07849 0.447854 -0.841028 0.303477 + 1.3225 0.341615 3.16494 0.431964 -0.843568 0.319061 + 1.31136 0.370904 3.26321 0.426614 -0.83856 0.338849 + 1.19284 0.361408 3.37566 0.347059 -0.865253 0.361784 + 1.04472 0.343259 3.44889 0.312963 -0.916589 0.248833 + 1.42643 0.338359 2.99638 0.419544 -0.869238 0.261549 + 1.41528 0.367649 3.09465 0.408669 -0.865376 0.290023 + 1.40032 0.392958 3.19481 0.422256 -0.851119 0.311923 + 1.31733 0.415865 3.35093 0.41307 -0.838289 0.35587 + 1.19881 0.406289 3.46332 0.374615 -0.875478 0.305289 + 1.51444 0.341323 2.88444 0.287252 -0.926237 0.244072 + 1.50741 0.365523 2.97093 0.31599 -0.907338 0.277286 + 1.49244 0.390831 3.07109 0.422317 -0.844767 0.328659 + 1.39312 0.42388 3.28325 0.465354 -0.811461 0.35352 + 1.31013 0.446875 3.43942 0.395502 -0.870851 0.291885 + 1.58802 0.369624 2.90283 0.386405 -0.863202 0.324921 + 1.58562 0.400512 2.97013 0.491139 -0.783373 0.380931 + 1.57678 0.433576 3.05126 0.529764 -0.742832 0.409329 + 1.4836 0.423983 3.15228 0.509998 -0.775846 0.371437 + 1.37266 0.457595 3.38146 0.528131 -0.762577 0.373569 + 1.66489 0.416009 2.90369 0.501145 -0.772422 0.390151 + 1.66384 0.452729 2.97368 0.511262 -0.749391 0.420742 + 1.57649 0.475865 3.11521 0.602225 -0.663438 0.444044 + 1.46315 0.457696 3.25048 0.578553 -0.711724 0.398404 + 1.73252 0.44351 2.86665 0.570408 -0.727361 0.381551 + 1.73147 0.480144 2.9366 0.576297 -0.726158 0.374935 + 1.73419 0.51828 3.00855 0.551899 -0.700002 0.453216 + 1.66355 0.495025 3.03763 0.513986 -0.696268 0.501028 + 1.79567 0.469321 2.81095 0.671908 -0.645368 0.363372 + 1.78719 0.502876 2.88203 0.714444 -0.602467 0.355814 + 1.78991 0.540926 2.95392 0.749658 -0.58429 0.310834 + 1.7967 0.596245 3.03211 0.704553 -0.589816 0.394615 + 1.73411 0.56452 3.06706 0.530344 -0.646039 0.54897 + 1.84054 0.52388 2.80745 0.79937 -0.467143 0.37787 + 1.83081 0.618993 2.95571 0.790551 -0.555546 0.257676 + 1.86135 0.698286 3.07397 0.673053 -0.620744 0.402091 + 1.7962 0.650267 3.09174 0.595544 -0.597516 0.536937 + 1.73362 0.618536 3.1267 0.474475 -0.634289 0.61037 + 1.66347 0.54126 3.09615 0.540523 -0.618665 0.570166 + 1.57356 0.529691 3.20318 0.67781 -0.536753 0.502463 + 1.92395 0.74449 3.01254 0.72532 -0.639365 0.255192 + 2.01009 0.871012 3.0782 0.711283 -0.596358 0.372067 + 1.92477 0.837049 3.16022 0.629837 -0.572718 0.524689 + 1.85963 0.789033 3.17799 0.608632 -0.585414 0.535591 + 2.1368 1.04701 3.10196 0.693286 -0.573013 0.437049 + 2.05149 1.01305 3.18398 0.661839 -0.564429 0.493345 + 1.94244 0.986556 3.28547 0.628497 -0.573755 0.525164 + 1.85479 0.947356 3.34897 0.687797 -0.570221 0.449203 + 1.77198 0.749834 3.24148 0.515624 -0.656931 0.550066 + 2.32079 1.26567 3.08063 0.766598 -0.503798 0.39814 + 2.22049 1.22221 3.1843 0.705785 -0.554902 0.440399 + 2.12533 1.1769 3.28579 0.676659 -0.585434 0.446541 + 2.01628 1.1504 3.38728 0.628891 -0.63108 0.454129 + 2.34569 1.46559 3.23756 0.816545 -0.418963 0.397144 + 2.26637 1.40325 3.33934 0.766578 -0.480165 0.426379 + 2.17121 1.35793 3.44083 0.73695 -0.515792 0.43688 + 2.07879 1.30819 3.53959 0.697343 -0.564514 0.441629 + 2.46886 1.78873 3.32206 0.82969 -0.406358 0.382736 + 2.39338 1.69648 3.39225 0.8291 -0.411664 0.37832 + 2.31407 1.63413 3.49404 0.799174 -0.42957 0.420465 + 2.22659 1.56377 3.5783 0.764632 -0.457583 0.453824 + 2.53005 2.083 3.50337 0.855668 -0.34827 0.382805 + 2.45458 1.99083 3.57362 0.812611 -0.382608 0.439629 + 2.37167 1.88962 3.62912 0.791261 -0.394638 0.467083 + 2.28419 1.81926 3.71338 0.757369 -0.397263 0.518242 + 2.62818 2.5354 3.64319 0.865408 -0.285657 0.411666 + 2.56756 2.41416 3.68659 0.840556 -0.301375 0.450154 + 2.49612 2.30505 3.73457 0.793605 -0.327569 0.512728 + 2.41321 2.20392 3.79012 0.761967 -0.340472 0.550895 + 2.65484 2.87294 3.79956 0.830736 -0.245185 0.499761 + 2.58992 2.76565 3.84838 0.802469 -0.261549 0.536317 + 2.51848 2.65663 3.89642 0.768456 -0.278719 0.576013 + 2.4407 2.55846 3.94625 0.741408 -0.292855 0.60378 + 2.68016 3.28305 3.91262 0.812082 -0.160733 0.56097 + 2.61945 3.19332 3.97685 0.800725 -0.175365 0.572788 + 2.55453 3.08603 4.02567 0.771505 -0.209914 0.600596 + 2.48002 2.99971 4.08758 0.743641 -0.230198 0.6277 + 2.58947 3.5633 4.09222 0.787395 -0.00880562 0.616386 + 2.52876 3.47356 4.15646 0.763872 -0.0565466 0.642886 + 2.45712 3.40119 4.2352 0.732608 -0.0814041 0.675765 + 2.38262 3.31487 4.29711 0.716988 -0.13199 0.684476 + 2.53323 3.86313 4.1181 0.786897 0.226721 0.573925 + 2.47749 3.78616 4.20362 0.721098 0.139239 0.678698 + 2.38769 3.77091 4.29422 0.678831 0.148692 0.719083 + 2.31605 3.69854 4.37297 0.697025 0.112261 0.708204 + 2.29894 4.09032 4.25959 0.663444 0.320361 0.676173 + 2.20914 4.07508 4.35018 0.655043 0.312588 0.6879 + 2.13616 3.94806 4.47499 0.648276 0.251111 0.718805 + 2.06758 3.85189 4.55996 0.606905 0.203086 0.768389 + 2.24747 3.60237 4.45794 0.687574 0.0469488 0.724595 + 2.29879 4.2055 4.1993 0.661144 0.378913 0.647544 + 2.07576 4.40579 4.28877 0.599153 0.462425 0.653589 + 2.06263 4.2746 4.3916 0.61716 0.406574 0.673655 + 1.98965 4.14767 4.51646 0.567154 0.345086 0.747831 + 2.14437 4.5084 4.14646 0.614424 0.496759 0.612955 + 1.89447 4.69571 4.21503 0.531597 0.558655 0.636639 + 1.85277 4.55415 4.36261 0.511037 0.519867 0.684528 + 1.83964 4.42295 4.46545 0.501522 0.469933 0.726387 + 1.94895 4.80519 4.0614 0.552897 0.590676 0.587713 + 1.67113 4.98185 4.12221 0.478723 0.630739 0.610731 + 1.62324 4.86473 4.26848 0.457166 0.594734 0.66128 + 1.58155 4.72317 4.41606 0.446919 0.561858 0.696117 + 1.74296 4.39244 4.5459 0.486243 0.455029 0.746001 + 1.71986 5.09801 3.95141 0.497743 0.654933 0.568608 + 1.4045 5.24815 4.02597 0.428489 0.685969 0.588084 + 1.36275 5.14532 4.16988 0.416279 0.658873 0.626577 + 1.31486 5.02819 4.31615 0.399374 0.617523 0.677617 + 1.7539 5.20939 3.79071 0.509878 0.6792 0.527932 + 1.43854 5.35952 3.86526 0.43637 0.696795 0.569261 + 1.12536 5.39737 4.04032 0.362671 0.719854 0.591845 + 1.24504 5.61941 3.67913 0.364099 0.752389 0.548947 + 1.26774 5.71298 3.52805 0.38281 0.774771 0.503175 + 1.02628 5.18841 4.32803 0.347347 0.649667 0.676227 + 1.24892 4.93102 4.43325 0.379631 0.594307 0.708999 + 1.19624 4.83116 4.54582 0.381561 0.598503 0.704419 + 1.52887 4.62331 4.52863 0.445921 0.537041 0.716059 + 0.884016 5.00403 4.55201 0.330896 0.619984 0.711426 + 1.16372 4.76716 4.61927 0.369696 0.564099 0.738321 + 1.42798 4.54238 4.6458 0.409611 0.499168 0.763577 + 1.64207 4.31151 4.66307 0.46973 0.408967 0.782368 + 0.8515 4.94003 4.62545 0.301013 0.60428 0.737724 + 0.85536 4.85492 4.68867 0.282565 0.544035 0.790053 + 1.07525 4.67906 4.71546 0.320392 0.493399 0.808645 + 1.33951 4.45427 4.74201 0.367867 0.442547 0.817818 + 1.55192 4.20397 4.75893 0.426267 0.356838 0.831242 + 0.551163 4.94179 4.7168 0.210461 0.561688 0.800133 + 0.770676 4.77739 4.76376 0.247134 0.491921 0.834828 + 0.990565 4.60152 4.79056 0.280788 0.44819 0.848696 + 1.22576 4.32411 4.85146 0.3211 0.390445 0.862813 + 1.43817 4.07381 4.86839 0.381876 0.306349 0.871964 + 0.449577 4.90912 4.76318 0.16314 0.541058 0.82501 + 0.66909 4.74481 4.81019 0.234444 0.485341 0.842307 + 0.884919 4.49976 4.87041 0.267078 0.41303 0.870675 + 1.12011 4.22235 4.93131 0.258373 0.334263 0.906373 + 1.33197 3.94823 4.94689 0.323482 0.242215 0.914708 + 0.382229 4.84671 4.81289 0.130663 0.522575 0.842521 + 0.572612 4.68144 4.87435 0.21802 0.478742 0.850455 + 0.788441 4.43648 4.93462 0.244569 0.362726 0.899231 + 1.0017 4.09007 5.00022 0.214301 0.261916 0.940997 + 1.21356 3.81596 5.0158 0.258702 0.184379 0.948197 + 0.332602 4.78452 4.8588 0.0823826 0.48666 0.869699 + 0.522985 4.61924 4.92026 0.175513 0.407951 0.895975 + 0.652423 4.35927 4.98336 0.15821 0.277783 0.947526 + 0.414322 4.60138 4.944 0.0730142 0.350317 0.933781 + 0.54376 4.3414 5.00711 0.105858 0.24824 0.962897 + 0.630538 3.96772 5.07934 0.0711827 0.165669 0.983609 + 0.865683 4.01294 5.04901 0.154586 0.204109 0.966666 + 0.285445 4.61442 4.94183 0.00888124 0.347949 0.937471 + 0.32929 4.34471 5.01578 0.0166305 0.229806 0.973094 + 0.126618 4.00777 5.07718 -0.00899253 0.145264 0.989352 + 0.416069 3.97102 5.08802 0.0125617 0.152476 0.988227 + -0.126618 4.00777 5.07718 0.00857274 0.148449 0.988883 + -0.168625 3.67585 5.11488 0.0335816 0.0700883 0.996975 + -0.036021 3.60958 5.11106 0.0340239 0.0444754 0.998431 + 0.036019 3.60958 5.11106 -0.0312578 0.0527594 0.998118 + 0.168625 3.67585 5.11488 -0.0475263 0.0797874 0.995678 + -0.453675 3.28342 5.13379 0.0184732 -0.0443496 0.998845 + -0.276569 3.30822 5.13443 0.00945991 -0.0334062 0.999397 + -0.143965 3.24195 5.13062 0.0491112 -0.0919628 0.994551 + -0.036021 3.22358 5.11523 0.0606462 -0.0963806 0.993495 + 0.036019 3.22358 5.11523 -0.0606653 -0.0963602 0.993496 + -0.613586 3.19338 5.13494 -0.01899 -0.0926544 0.995517 + -0.481604 2.89141 5.07997 -0.00407933 -0.246547 0.969122 + -0.304498 2.9162 5.08063 0.048865 -0.210134 0.976451 + -0.169009 2.89863 5.06505 0.0828932 -0.225449 0.970722 + -0.061064 2.88035 5.04972 0.0588927 -0.255182 0.965098 + -0.739636 3.19127 5.1252 -0.0767826 -0.0885667 0.993106 + -0.748806 2.8824 5.05998 -0.0827097 -0.275901 0.957621 + -0.622755 2.88451 5.06972 -0.0657268 -0.26867 0.960987 + -0.460761 2.49748 4.94567 -0.0748446 -0.294213 0.952805 + -0.808039 3.18561 5.11939 -0.0806067 -0.0878201 0.99287 + -0.861885 2.89341 5.05169 -0.0737692 -0.280627 0.956978 + -0.731464 2.51883 4.92969 -0.104952 -0.332579 0.937217 + -0.601912 2.49058 4.93542 -0.0903038 -0.320347 0.942986 + -0.941057 2.87871 5.04416 -0.131866 -0.28773 0.94859 + -0.966131 2.6097 4.9291 -0.187203 -0.355123 0.915884 + -0.844543 2.52985 4.92141 -0.141239 -0.34552 0.927722 + -0.729918 2.25879 4.83789 -0.145149 -0.336756 0.930337 + -1.0351 2.88445 5.02402 -0.208229 -0.303092 0.929933 + -1.06018 2.61545 4.90895 -0.274133 -0.352606 0.894718 + -0.98127 2.37989 4.83674 -0.220625 -0.358481 0.907092 + -0.859682 2.30012 4.82911 -0.172967 -0.350769 0.920349 + -1.17369 2.68191 4.89262 -0.279532 -0.365124 0.888001 + -1.21853 2.49981 4.80543 -0.296156 -0.35098 0.888316 + -1.10502 2.43343 4.8218 -0.29743 -0.352398 0.887328 + -1.00337 2.1928 4.755 -0.230279 -0.314649 0.920852 + -0.872669 2.14869 4.76999 -0.186075 -0.305523 0.933826 + -1.12712 2.24625 4.74002 -0.280957 -0.318961 0.905167 + -0.985657 1.94226 4.68794 -0.232328 -0.247505 0.940619 + -0.854955 1.89815 4.70294 -0.193071 -0.235839 0.95242 + -0.719277 1.86649 4.72337 -0.184152 -0.223843 0.95707 + -0.742904 2.10736 4.77878 -0.164809 -0.286427 0.943821 + -1.11812 1.97832 4.65868 -0.283296 -0.257614 0.923785 + -0.941492 1.61095 4.6206 -0.243542 -0.23446 0.941125 + -0.802828 1.5775 4.64393 -0.20175 -0.228845 0.952327 + -0.66715 1.54584 4.66436 -0.204871 -0.234155 0.950368 + -0.756166 1.30549 4.58525 -0.187959 -0.253758 0.94883 + -0.618234 1.26053 4.59593 -0.182971 -0.276477 0.943441 + -0.533475 1.49319 4.68135 -0.175303 -0.239478 0.954945 + -0.585319 1.85745 4.74583 -0.163337 -0.216363 0.962553 + -0.608946 2.09832 4.80124 -0.157941 -0.272977 0.948967 + -0.572878 1.03708 4.54095 -0.083161 -0.345928 0.934568 + -0.436992 0.976107 4.51797 -0.0559284 -0.412472 0.909252 + -0.484559 1.20779 4.61287 -0.127697 -0.322557 0.937897 + -0.356444 1.14556 4.59446 -0.0443588 -0.350538 0.935497 + -0.399265 1.46708 4.69638 -0.0729508 -0.240995 0.967781 + -0.400256 0.781019 4.42307 -0.0106649 -0.510206 0.859986 + -0.284118 0.698607 4.36901 0.000932436 -0.554439 0.832224 + -0.308877 0.91388 4.49955 0.0485728 -0.432285 0.900428 + -0.268127 0.521252 4.2368 -0.0753403 -0.663891 0.744025 + -0.16076 0.430421 4.16132 -0.0072755 -0.674685 0.73807 + -0.175686 0.614286 4.31086 0.137063 -0.556624 0.81938 + -0.200446 0.82956 4.44139 0.0596473 -0.491286 0.868953 + -0.11943 0.272204 4.00076 -0.208514 -0.783694 0.585103 + -0.06733 0.225955 3.95507 0.0178055 -0.790443 0.612277 + -0.078383 0.34054 4.076 0.30374 -0.635554 0.709798 + -0.093309 0.524492 4.22559 0.189826 -0.594423 0.781427 + -0.017312 0.102744 3.76948 -0.124459 -0.883564 0.451469 + -0.017312 0.136658 3.83734 -0.204271 -0.829768 0.519383 + -0.028364 0.251335 3.95831 0.19298 -0.696101 0.691521 + -0.028364 0.420627 4.12849 -0.0175842 -0.674384 0.738171 + -0.037326 0.63723 4.28972 0.128472 -0.58124 0.803527 + -0.102271 0.741095 4.38682 0.239922 -0.504773 0.829241 + 0.017312 0.102744 3.76948 0.0866434 -0.844051 0.529216 + 0.017312 0.136658 3.83734 0.20427 -0.82977 0.51938 + 0.028357 0.251335 3.95831 -0.193868 -0.698862 0.688482 + 0.028357 0.420627 4.12849 -0.108218 -0.639865 0.76083 + 0.037325 0.63723 4.28972 -0.129928 -0.586594 0.799391 + 0.06733 0.225955 3.95507 -0.0173498 -0.790553 0.612148 + 0.078376 0.340545 4.07599 -0.14255 -0.696546 0.703209 + 0.093302 0.524492 4.22559 -0.18882 -0.591303 0.784033 + 0.10227 0.741095 4.38682 -0.0782281 -0.572254 0.816337 + 0.069407 0.149078 3.81522 0.168529 -0.826828 0.536613 + 0.119425 0.272204 4.00076 0.170351 -0.771974 0.612403 + 0.16076 0.430421 4.16132 0.00605378 -0.676566 0.736357 + 0.175687 0.614286 4.31086 -0.158377 -0.544376 0.823754 + 0.200447 0.82956 4.44139 -0.0635871 -0.498487 0.864562 + 0.032373 0.030536 3.65695 0.145489 -0.757769 0.636096 + 0.118184 0.172667 3.84657 0.121926 -0.819007 0.56068 + 0.226793 0.363122 4.07629 0.15692 -0.755885 0.63562 + 0.268128 0.521252 4.2368 0.100941 -0.672467 0.733212 + 0.08115 0.054032 3.68825 0.137498 -0.854595 0.500761 + 0.227669 0.22229 3.88322 0.108977 -0.798666 0.591825 + 0.336278 0.412744 4.11294 0.136049 -0.721329 0.679099 + 0.413241 0.285763 3.95348 0.147936 -0.77677 0.612163 + 0.457244 0.502509 4.16846 0.187171 -0.699479 0.689707 + 0.505232 0.693511 4.34644 0.168456 -0.636767 0.752429 + 0.384265 0.603749 4.29091 0.125167 -0.652449 0.747424 + 0.284118 0.698607 4.36901 0.000405746 -0.551966 0.833866 + 0.199095 0.111021 3.73594 0.168197 -0.856183 0.488529 + 0.384668 0.174494 3.8062 0.151031 -0.855663 0.495005 + 0.559882 0.362934 3.99721 0.236794 -0.729579 0.641594 + 0.603885 0.57968 4.2122 0.205733 -0.683039 0.700807 + 0.640456 0.753492 4.35995 0.215102 -0.619996 0.754543 + 0.222855 0.076819 3.64278 0.261264 -0.916036 0.304334 + 0.405595 0.146048 3.72687 0.244611 -0.920584 0.30445 + 0.5671 0.212172 3.77694 0.303262 -0.889085 0.342871 + 0.546173 0.240623 3.85626 0.249228 -0.814257 0.524281 + 0.698136 0.433094 4.01169 0.309269 -0.71703 0.624677 + 0.23707 0.061669 3.56102 0.350144 -0.932646 0.0870095 + 0.41981 0.130899 3.64511 0.302144 -0.942544 0.142547 + 0.580437 0.192389 3.69601 0.336802 -0.926155 0.169712 + 0.700407 0.270469 3.80217 0.325902 -0.850786 0.412252 + 0.684426 0.310778 3.87075 0.306681 -0.766432 0.564384 + 0.419131 0.125386 3.56126 0.322002 -0.945693 0.0444952 + 0.579758 0.186964 3.61221 0.349233 -0.934132 0.0737142 + 0.713744 0.250686 3.72123 0.366499 -0.909607 0.195686 + 0.807504 0.32129 3.81354 0.355221 -0.82918 0.4316 + 0.582589 0.17972 3.52715 0.332727 -0.939061 0.0863546 + 0.724983 0.245138 3.63444 0.371342 -0.92324 0.0986587 + 0.829485 0.290214 3.64637 0.398504 -0.910746 0.108332 + 0.818245 0.295757 3.73317 0.379328 -0.89781 0.223714 + 0.727814 0.237982 3.54944 0.360635 -0.926939 0.103568 + 0.839325 0.283289 3.56156 0.39462 -0.911153 0.118643 + 0.901522 0.324581 3.64824 0.407885 -0.907555 0.0998716 + 0.889591 0.326565 3.73001 0.414165 -0.882604 0.222434 + 0.87885 0.352189 3.81043 0.413976 -0.803967 0.426921 + 0.842589 0.273449 3.47381 0.36121 -0.919414 0.155581 + 0.911362 0.317569 3.56339 0.382289 -0.911803 0.149903 + 1.02128 0.372296 3.6162 0.38698 -0.907799 0.1617 + 1.00935 0.374284 3.69795 0.434578 -0.870421 0.231321 + 0.999038 0.407612 3.78343 0.467217 -0.768616 0.436963 + 0.92372 0.307112 3.4815 0.343319 -0.92175 0.180303 + 1.03236 0.353714 3.53078 0.350733 -0.913232 0.207349 + 1.18774 0.424785 3.54869 0.385461 -0.887364 0.252992 + 1.16866 0.443531 3.64062 0.455006 -0.833079 0.314562 + 1.29106 0.465541 3.5313 0.503585 -0.797351 0.332616 + 1.29236 0.517844 3.6271 0.567315 -0.70587 0.424149 + 1.15835 0.476777 3.72603 0.513923 -0.737074 0.438867 + 1.37396 0.509985 3.47731 0.609641 -0.699364 0.373132 + 1.40912 0.598923 3.58947 0.611471 -0.687514 0.391699 + 1.29221 0.579154 3.71251 0.56437 -0.691397 0.451061 + 1.1582 0.538174 3.81149 0.51694 -0.69684 0.497179 + 1.46022 0.511524 3.33845 0.661922 -0.640609 0.389204 + 1.49537 0.600548 3.45065 0.666996 -0.659474 0.346715 + 1.54136 0.704368 3.54803 0.666631 -0.666083 0.33457 + 1.44189 0.682476 3.68675 0.597719 -0.702049 0.387115 + 1.32498 0.662709 3.80979 0.54056 -0.712473 0.447413 + 1.56986 0.583876 3.24593 0.712371 -0.530732 0.459186 + 1.61585 0.687698 3.34331 0.701167 -0.6334 0.327367 + 1.59424 0.805556 3.65557 0.705947 -0.620175 0.342085 + 1.49477 0.783668 3.79428 0.620268 -0.645179 0.446106 + 1.38252 0.755475 3.88891 0.559501 -0.652639 0.510903 + 1.65977 0.595445 3.1389 0.530351 -0.559547 0.636895 + 1.69813 0.726735 3.25369 0.508273 -0.691615 0.513155 + 1.6807 0.861303 3.54682 0.725403 -0.599312 0.338549 + 1.72597 1.01679 3.69349 0.729961 -0.54229 0.416028 + 1.63951 0.960962 3.8022 0.738618 -0.491797 0.461064 + 1.76298 0.90034 3.4572 0.697311 -0.607765 0.379972 + 1.82446 1.06329 3.59596 0.717629 -0.568598 0.402125 + 1.77437 1.18415 3.82923 0.666476 -0.531775 0.522519 + 1.66388 1.13845 3.91158 0.676316 -0.478514 0.560019 + 1.91628 1.1104 3.48777 0.687528 -0.607123 0.39838 + 1.87287 1.23073 3.73175 0.685338 -0.555294 0.471126 + 1.92797 1.42525 3.85644 0.65931 -0.474878 0.582925 + 1.81817 1.38522 3.94096 0.638687 -0.451324 0.623206 + 1.97879 1.26809 3.64004 0.657222 -0.589996 0.469002 + 2.03389 1.46269 3.76477 0.683295 -0.481485 0.548889 + 1.98256 1.64831 3.95749 0.655709 -0.412744 0.632209 + 1.87276 1.60828 4.04202 0.617402 -0.414599 0.668522 + 2.13417 1.51403 3.67706 0.728469 -0.466285 0.501908 + 2.08837 1.69435 3.87533 0.686929 -0.408522 0.601032 + 2.13287 1.98865 4.00359 0.680107 -0.357191 0.640209 + 2.02705 1.9426 4.08575 0.64693 -0.363393 0.670393 + 2.18866 1.74569 3.78762 0.725366 -0.405236 0.556442 + 2.23098 2.04488 3.9266 0.71235 -0.350831 0.607845 + 2.16569 2.34754 4.15417 0.680814 -0.32071 0.658512 + 2.06529 2.30954 4.23558 0.647547 -0.334039 0.684909 + 2.32652 2.11846 3.85235 0.737179 -0.34434 0.581375 + 2.2638 2.40369 4.07712 0.703857 -0.309903 0.639176 + 2.23071 2.75267 4.26706 0.704848 -0.269927 0.655994 + 2.14538 2.68183 4.32996 0.690635 -0.287135 0.66376 + 2.35401 2.47291 4.00843 0.724547 -0.301144 0.619955 + 2.32092 2.82189 4.19837 0.717417 -0.256977 0.647515 + 2.13899 3.08376 4.4888 0.693077 -0.185557 0.696573 + 2.05366 3.01292 4.5517 0.686493 -0.203207 0.698165 + 2.40224 2.90154 4.13742 0.724859 -0.248558 0.642493 + 2.21668 3.16849 4.43025 0.69993 -0.165775 0.694706 + 2.08087 3.45036 4.60384 0.648443 -0.0183955 0.761041 + 2.00318 3.36563 4.6624 0.645155 -0.0330288 0.763338 + 2.298 3.24814 4.36929 0.6972 -0.155298 0.699853 + 2.16285 3.53564 4.53012 0.655194 0.00920751 0.755404 + 1.91851 3.68226 4.70637 0.572735 0.143768 0.807035 + 2.00049 3.76746 4.63261 0.585234 0.169721 0.792903 + 1.82588 4.03272 4.66956 0.511661 0.297051 0.806203 + 1.73573 3.92518 4.76543 0.490588 0.26284 0.830806 + 1.8346 3.55934 4.78748 0.532126 0.0899927 0.841869 + 1.89297 4.11716 4.5969 0.500414 0.338098 0.797042 + 1.65182 3.80226 4.84653 0.456126 0.205762 0.865801 + 1.54562 3.67677 4.92508 0.401523 0.13732 0.905496 + 1.70185 3.41556 4.86911 0.463396 0.00673877 0.886126 + 1.80006 3.43825 4.8144 0.519388 0.0106047 0.854472 + 1.96864 3.24454 4.68932 0.671263 -0.0821063 0.736658 + 1.42499 3.56737 4.98257 0.348177 0.0926658 0.932837 + 1.58122 3.30616 4.9266 0.425314 -0.0520848 0.903546 + 1.6919 3.0549 4.83039 0.477747 -0.186797 0.858408 + 1.7935 3.12682 4.78942 0.488323 -0.159843 0.857899 + 1.8917 3.14942 4.73467 0.571543 -0.156039 0.8056 + 1.14611 3.67064 5.05489 0.209351 0.114225 0.971146 + 1.35754 3.42205 5.02166 0.347281 0.0322239 0.937207 + 1.46485 3.21364 4.96944 0.39152 -0.0939165 0.915364 + 0.993089 3.68812 5.07862 0.145085 0.108972 0.9834 + 1.22541 3.29936 5.06057 0.221278 -0.0421704 0.974298 + 1.33272 3.09095 5.00835 0.325064 -0.163369 0.931474 + 1.4663 2.89464 4.90477 0.37536 -0.26665 0.887695 + 1.57553 2.96239 4.87323 0.439571 -0.220094 0.870825 + 0.757944 3.6429 5.10895 0.0830556 0.0858306 0.992842 + 0.958766 3.27031 5.09969 0.155946 -0.0305617 0.987293 + 1.07239 3.31675 5.08426 0.149254 -0.0226684 0.988539 + 1.21843 3.01113 5.0242 0.23259 -0.235513 0.943629 + 0.68639 3.5435 5.12112 0.0909173 0.0567912 0.994238 + 0.887212 3.17091 5.11186 0.186094 -0.111762 0.976155 + 0.941054 2.87871 5.04416 0.144061 -0.272918 0.95119 + 1.0351 2.88445 5.02402 0.208241 -0.303094 0.92993 + 1.10481 2.96469 5.03964 0.160819 -0.255759 0.95327 + 0.617988 3.54915 5.12692 0.0554546 0.060742 0.996612 + 0.808039 3.18561 5.11939 0.0806072 -0.0878199 0.99287 + 0.861881 2.89341 5.05169 0.0674412 -0.271256 0.960142 + 0.458076 3.63911 5.12571 0.00855743 0.0767953 0.99701 + 0.613587 3.19338 5.13494 0.0189589 -0.092632 0.99552 + 0.739637 3.19127 5.1252 0.0767833 -0.0885661 0.993106 + 0.748809 2.8824 5.05998 0.0851551 -0.272994 0.958239 + 0.84454 2.52985 4.92141 0.139294 -0.349418 0.926555 + 0.276569 3.30822 5.13443 -0.015804 -0.041527 0.999012 + 0.453675 3.28342 5.13378 -0.0148087 -0.0487054 0.998703 + 0.481604 2.89141 5.07997 0.0128763 -0.237057 0.97141 + 0.622758 2.88451 5.06972 0.0635068 -0.265686 0.961966 + 0.143964 3.24195 5.13062 -0.0490992 -0.091944 0.994553 + 0.169004 2.89863 5.06505 -0.0896965 -0.236381 0.967512 + 0.304498 2.91621 5.08062 -0.0544776 -0.202464 0.977773 + 0.06106 2.88035 5.04972 -0.0461286 -0.269083 0.962012 + 0.06106 2.47763 4.90566 -0.129033 -0.277718 0.951958 + 0.194119 2.46558 4.94153 -0.165542 -0.268496 0.94895 + 0.329613 2.48315 4.9571 0.0125246 -0.292442 0.956201 + -0.061064 2.47763 4.90566 0.136515 -0.287229 0.948084 + -0.066662 2.22117 4.84245 0.130976 -0.0255291 0.991057 + 0.06666 2.22117 4.84245 -0.093112 -0.0629048 0.993667 + 0.199719 2.20912 4.87832 -0.124011 -0.21396 0.968939 + 0.338014 2.20633 4.87336 0.0798532 -0.237676 0.968056 + -0.194123 2.46558 4.94153 0.158418 -0.277759 0.947499 + -0.199721 2.20904 4.87827 0.0723522 -0.165933 0.983479 + -0.066662 2.10356 4.86675 0.0153311 -0.0531574 0.998469 + 0.06666 2.10357 4.86674 0.0296002 -0.0118345 0.999492 + 0.205331 2.10297 4.85859 -0.000590693 -0.163757 0.986501 + -0.329613 2.48315 4.9571 -0.0209634 -0.280896 0.959509 + -0.338025 2.20633 4.87336 -0.0623166 -0.223014 0.972821 + -0.205333 2.10297 4.85859 -0.0433549 -0.203224 0.978172 + -0.193778 1.81952 4.79314 -0.0359448 -0.251317 0.967237 + -0.055108 1.82012 4.80129 -0.0273549 -0.264827 0.963908 + -0.469173 2.22066 4.86194 -0.13962 -0.283734 0.948684 + -0.343636 2.10026 4.85368 -0.113288 -0.220933 0.968687 + -0.316992 1.84324 4.79504 -0.124844 -0.24625 0.961132 + -0.143478 1.37916 4.67886 0.111431 -0.284868 0.952068 + -0.055108 1.27413 4.62718 0.0615891 -0.339909 0.938439 + -0.600366 2.23063 4.84367 -0.132611 -0.311944 0.9408 + -0.477753 2.08844 4.81955 -0.182925 -0.261751 0.947642 + -0.451109 1.83142 4.76091 -0.172841 -0.228024 0.958192 + -0.266692 1.40288 4.68077 -0.0301442 -0.285015 0.958049 + -0.125696 0.992824 4.52421 0.0830763 -0.419569 0.903914 + -0.223871 1.08129 4.57879 0.0707025 -0.372905 0.925172 + -0.037326 0.887793 4.47253 -0.0786295 -0.513223 0.854646 + 0.055106 1.27413 4.62717 -0.0633069 -0.345381 0.936325 + 0.037325 0.887793 4.47253 -0.0045344 -0.478726 0.877952 + 0.143476 1.37917 4.67885 -0.0549522 -0.317859 0.946544 + 0.055106 1.82012 4.80129 0.0198876 -0.254714 0.966812 + 0.125695 0.992824 4.52421 -0.080558 -0.412653 0.907319 + 0.266694 1.40288 4.68077 0.0250415 -0.293139 0.955742 + 0.193777 1.8196 4.79319 0.0436417 -0.241895 0.969321 + 0.343625 2.10025 4.85369 0.13296 -0.202518 0.97021 + 0.223872 1.08129 4.57879 -0.102943 -0.345231 0.932855 + 0.399267 1.46708 4.69638 0.0996345 -0.266208 0.958753 + 0.316994 1.84324 4.79504 0.116424 -0.232371 0.965634 + 0.477742 2.08844 4.81956 0.172771 -0.25193 0.952198 + 0.308878 0.91388 4.49955 0.0230627 -0.476866 0.878673 + 0.356445 1.14556 4.59446 0.0504753 -0.341489 0.938529 + 0.533477 1.49319 4.68135 0.176178 -0.238344 0.955067 + 0.451111 1.83142 4.76091 0.185346 -0.21502 0.95886 + 0.437002 0.976107 4.51797 0.0473672 -0.423403 0.904702 + 0.484569 1.20779 4.61287 0.0907409 -0.286699 0.953714 + 0.667151 1.54584 4.66436 0.201888 -0.231096 0.951754 + 0.585321 1.85745 4.74583 0.164995 -0.21864 0.961755 + 0.608959 2.09832 4.80123 0.165594 -0.264029 0.950193 + 0.400256 0.781019 4.42307 -0.000185284 -0.503147 0.864201 + 0.572888 1.03708 4.54095 0.132448 -0.387693 0.912223 + 0.618244 1.26053 4.59593 0.19345 -0.262811 0.945255 + 0.802826 1.57758 4.64398 0.202981 -0.227326 0.952429 + 0.719279 1.86649 4.72337 0.182769 -0.225335 0.956984 + 0.536141 0.841995 4.44606 0.116833 -0.505686 0.85477 + 0.71081 1.08213 4.53032 0.203883 -0.340475 0.917883 + 0.756166 1.30549 4.58525 0.188774 -0.254654 0.948428 + 0.941491 1.61095 4.6206 0.241126 -0.231558 0.942465 + 0.854954 1.89815 4.70294 0.196229 -0.239324 0.950904 + 0.671365 0.901889 4.45952 0.179325 -0.470172 0.864165 + 0.851214 1.11841 4.50649 0.294277 -0.34399 0.891668 + 0.89483 1.33894 4.56192 0.278438 -0.270967 0.921439 + 1.07396 1.64692 4.59128 0.331799 -0.252466 0.908939 + 0.985656 1.94234 4.68799 0.231211 -0.249054 0.940486 + 0.781792 0.809541 4.36027 0.303734 -0.596549 0.742882 + 0.811769 0.938248 4.43574 0.309418 -0.468492 0.827512 + 0.985987 1.14855 4.46448 0.426726 -0.351933 0.833095 + 1.0296 1.369 4.51986 0.378869 -0.306808 0.873113 + 0.745222 0.635818 4.21257 0.292696 -0.677525 0.674751 + 0.919797 0.840262 4.31706 0.388128 -0.576277 0.719209 + 0.949774 0.968969 4.39253 0.420456 -0.461927 0.780923 + 1.11225 1.17063 4.39344 0.493681 -0.378198 0.7831 + 0.823599 0.487744 4.00924 0.308141 -0.711242 0.631811 + 0.870685 0.690466 4.21011 0.34351 -0.64817 0.679615 + 1.05235 0.848769 4.24332 0.464676 -0.553747 0.69097 + 1.07604 0.990964 4.32143 0.502603 -0.444474 0.741507 + 0.791524 0.361599 3.88213 0.306478 -0.748676 0.58784 + 0.902616 0.527941 4.01681 0.364105 -0.695754 0.619156 + 1.00323 0.698969 4.13638 0.422654 -0.641398 0.640291 + 1.17891 0.862822 4.16378 0.497765 -0.53561 0.682167 + 0.87054 0.401797 3.8897 0.377166 -0.731788 0.567655 + 1.01995 0.547596 3.95637 0.458437 -0.688446 0.562031 + 1.12057 0.718627 4.07593 0.456855 -0.63689 0.62101 + 1.3033 0.865423 4.07208 0.541695 -0.526554 0.655215 + 1.2026 1.0051 4.24194 0.528858 -0.444225 0.723169 + 0.990729 0.457313 3.86275 0.47081 -0.713856 0.518409 + 1.18742 0.628457 3.90512 0.493701 -0.700614 0.515169 + 1.24496 0.721223 3.98424 0.493019 -0.662374 0.564086 + 1.42149 0.889875 3.98692 0.598697 -0.512145 0.615848 + 1.32338 1.02894 4.16285 0.565193 -0.434894 0.701017 + 1.53374 0.918068 3.89229 0.64322 -0.512676 0.568711 + 1.44158 1.0534 4.07769 0.594718 -0.441061 0.672142 + 1.47608 1.25865 4.17559 0.581269 -0.401202 0.707929 + 1.35746 1.22365 4.248 0.557483 -0.395859 0.729731 + 1.23668 1.19981 4.3271 0.530777 -0.392507 0.751142 + 1.55811 1.09555 4.00168 0.629852 -0.451547 0.631974 + 1.59261 1.30081 4.09957 0.591983 -0.411903 0.692743 + 1.52366 1.5029 4.26593 0.556874 -0.382205 0.737435 + 1.40504 1.46782 4.33829 0.54822 -0.365178 0.752396 + 1.28469 1.42995 4.40648 0.524964 -0.358875 0.771765 + 1.70767 1.33952 4.02331 0.627781 -0.433967 0.646192 + 1.64331 1.53754 4.19673 0.567878 -0.394118 0.722624 + 1.69093 1.83115 4.30698 0.549143 -0.360751 0.753857 + 1.57128 1.79651 4.37618 0.522358 -0.354602 0.775499 + 1.4519 1.7518 4.43043 0.505121 -0.327733 0.798401 + 1.75837 1.57626 4.12047 0.598716 -0.403378 0.691973 + 1.80501 1.87262 4.24177 0.578622 -0.364946 0.729391 + 1.73252 2.19524 4.44797 0.535026 -0.35886 0.764831 + 1.61944 2.1369 4.49541 0.506039 -0.35889 0.784298 + 1.50006 2.09219 4.54966 0.418901 -0.351467 0.837253 + 1.9194 1.90472 4.16336 0.608974 -0.365701 0.703856 + 1.8466 2.2367 4.38276 0.567671 -0.356841 0.741899 + 1.83623 2.54914 4.541 0.55545 -0.358178 0.750456 + 1.72681 2.49021 4.58866 0.519334 -0.365533 0.772449 + 1.61373 2.43179 4.63605 0.458219 -0.3744 0.806139 + 1.95764 2.27166 4.3132 0.601845 -0.349297 0.718174 + 1.94726 2.5841 4.47144 0.604456 -0.340142 0.720373 + 1.7774 2.78615 4.69809 0.527126 -0.310637 0.790976 + 1.66799 2.72722 4.74575 0.48511 -0.3282 0.810526 + 1.55876 2.65939 4.77724 0.417146 -0.359934 0.834528 + 2.04499 2.64384 4.41137 0.650129 -0.31547 0.691238 + 1.87899 2.85807 4.65711 0.571262 -0.2896 0.767979 + 1.97672 2.9178 4.59705 0.65247 -0.253819 0.714044 + 1.44593 2.60017 4.80041 0.257662 -0.42463 0.867929 + 1.50091 2.37257 4.65921 0.345915 -0.36824 0.862985 + 1.37587 2.04314 4.58001 0.385219 -0.323978 0.864086 + 1.35201 2.81481 4.92064 0.228274 -0.365585 0.902352 + 1.33731 2.54742 4.78797 0.215805 -0.409421 0.886455 + 1.37672 2.32352 4.68958 0.31693 -0.332352 0.888312 + 1.24894 2.0079 4.62565 0.338407 -0.286289 0.896393 + 1.33155 1.71384 4.49857 0.475129 -0.298176 0.827855 + 1.24339 2.76206 4.9082 0.18998 -0.40872 0.892667 + 1.21853 2.49981 4.80543 0.297067 -0.348958 0.888808 + 1.25794 2.27592 4.70703 0.280022 -0.315419 0.906697 + 1.11812 1.97832 4.65868 0.290981 -0.266915 0.918742 + 1.20462 1.67869 4.54425 0.381834 -0.270176 0.88386 + 1.17369 2.68191 4.89262 0.279532 -0.365117 0.888004 + 1.10502 2.43335 4.82176 0.293681 -0.350358 0.889382 + 1.12712 2.24625 4.74002 0.279282 -0.321578 0.904759 + 1.06018 2.61545 4.90895 0.274134 -0.352617 0.894713 + 0.981271 2.37989 4.83674 0.219137 -0.361744 0.906157 + 1.00337 2.1928 4.755 0.22438 -0.310985 0.923549 + 0.87267 2.14869 4.76999 0.188975 -0.300815 0.934772 + 0.966128 2.6097 4.9291 0.199935 -0.363202 0.910006 + 0.859683 2.30012 4.82911 0.183215 -0.355693 0.916468 + 0.72993 2.25879 4.83789 0.139526 -0.344087 0.928513 + 0.742917 2.10736 4.77878 0.1578 -0.280602 0.946764 + 0.731467 2.51883 4.92969 0.108072 -0.3359 0.935677 + 0.600378 2.23063 4.84367 0.14269 -0.319469 0.936792 + 0.469162 2.22066 4.86194 0.126716 -0.297719 0.946206 + 0.601915 2.49058 4.93542 0.088653 -0.322623 0.942367 + 0.460761 2.49748 4.94567 0.0856858 -0.306807 0.947907 + 1.16027 1.40077 4.47282 0.44072 -0.338532 0.831362 + -0.251458 2.05987 -3.28899 -0.218359 0.538832 -0.813621 + -0.23245 2.17267 -3.20717 -0.21192 0.731562 -0.648002 + -0.152461 2.19752 -3.16676 0.172897 0.865061 -0.470931 + -0.267721 1.89853 -3.37668 -0.307719 0.373517 -0.875097 + -0.310818 1.90591 -3.35837 -0.343209 0.388145 -0.855308 + -0.294555 2.06726 -3.27068 -0.396886 0.55638 -0.730016 + -0.248572 1.81892 -3.40553 -0.299508 -0.421526 -0.855927 + -0.284143 1.82119 -3.39091 -0.352686 -0.476198 -0.805511 + -0.31065 1.83131 -3.38534 -0.541482 -0.328912 -0.773702 + -0.327769 1.9222 -3.34395 -0.545759 0.401431 -0.735527 + -0.329604 2.02374 -3.2783 -0.64101 0.442267 -0.6273 + -0.206741 1.81786 -3.41565 -0.168602 -0.426708 -0.888535 + -0.235338 1.79851 -3.3656 -0.0778444 -0.991165 -0.107389 + -0.281294 1.8027 -3.34962 -0.238713 -0.968073 -0.0764938 + -0.307801 1.81282 -3.34405 -0.507137 -0.84637 -0.162696 + -0.327601 1.8476 -3.37092 -0.780887 -0.129977 -0.611001 + -0.145802 1.79423 -3.3803 -0.00251803 -0.980512 -0.196443 + -0.193506 1.79745 -3.37572 -0.0631678 -0.991158 -0.116684 + -0.090409 1.79758 -3.38053 0.105152 -0.957042 -0.270212 + -0.083178 1.80368 -3.33461 0.0607932 -0.928123 0.367277 + -0.127022 1.80633 -3.32918 -0.00742429 -0.894547 0.446911 + -0.174726 1.80955 -3.3246 0.00547908 -0.909947 0.414689 + -0.033943 1.80588 -3.37903 0.540004 -0.804734 -0.246575 + -0.026712 1.81199 -3.33312 0.564218 -0.798804 0.208735 + -0.026712 1.83793 -3.28811 0.440511 -0.756404 0.483531 + -0.077097 1.85489 -3.27132 -0.0232801 -0.805646 0.59194 + -0.120941 1.85754 -3.26589 0.0676383 -0.836412 0.543911 + 0 1.88767 -3.35525 0.922265 -0.319494 -0.217603 + -0.016252 1.87696 -3.22971 0.521247 -0.694291 0.496248 + -0.066636 1.89392 -3.21292 0.0744862 -0.873026 0.481952 + -0.101804 1.89658 -3.19232 0.119764 -0.914255 0.387032 + -0.141762 1.85626 -3.26403 0.09413 -0.846341 0.524259 + -0.016252 1.92627 -3.17244 0.72321 -0.621892 0.300361 + -0.030875 1.92357 -3.14486 0.480746 -0.803582 0.350913 + -0.066043 1.92622 -3.12427 0.19493 -0.912793 0.358903 + -0.122625 1.89529 -3.19047 0.141095 -0.924313 0.354596 + -0.160705 1.86355 -3.24917 0.177591 -0.870128 0.459716 + -0.011183 1.96532 -3.12314 0.906192 -0.313133 0.284191 + -0.025806 1.96262 -3.09556 0.74708 -0.470955 0.46912 + -0.057187 1.95648 -3.06427 0.495356 -0.693643 0.522954 + -0.120883 1.92386 -3.08813 0.217273 -0.90909 0.355454 + -0.011183 2.00908 -3.09637 0.962129 -0.0397052 0.269686 + -0.041291 1.9961 -3.05045 0.760701 -0.354126 0.543994 + -0.072672 1.98996 -3.01916 0.589456 -0.527498 0.611791 + -0.112028 1.95411 -3.02813 0.351856 -0.794393 0.495113 + -0.147395 1.9172 -3.09252 0.147189 -0.929507 0.338159 + -0.025536 2.06202 -3.04565 0.912294 -0.121763 0.391015 + -0.055645 2.04904 -2.99974 0.795514 -0.294027 0.529816 + -0.080386 2.03729 -2.9747 0.64465 -0.446693 0.620396 + -0.098622 1.98346 -3.00363 0.479707 -0.62103 0.619841 + -0.011587 2.07808 -3.08639 0.98191 0.0245926 0.187744 + -0.051364 2.13434 -2.97331 0.918314 -0.121087 0.376879 + -0.071744 2.11124 -2.94107 0.821001 -0.273425 0.501194 + -0.096485 2.0995 -2.91603 0.555575 -0.471126 0.685111 + -0.106336 2.03079 -2.95916 0.427257 -0.537206 0.727228 + -0.032105 2.15701 -3.05363 0.961641 0.273533 0.0206299 + -0.037415 2.1504 -3.01405 0.970944 0.0436742 0.235287 + -0.061569 2.19045 -2.92543 0.925257 -0.188719 0.329067 + -0.081949 2.16734 -2.89318 0.82727 -0.292898 0.479411 + -0.102944 2.15383 -2.872 0.557112 -0.467825 0.686125 + -0.043906 2.17882 -3.07158 0.808843 0.533337 -0.247638 + -0.044375 2.21465 -3.00057 0.984043 0.173808 -0.0380833 + -0.049685 2.20804 -2.96099 0.980836 -0.0527312 0.187566 + -0.060198 2.2336 -2.89595 0.925279 -0.217824 0.310503 + -0.081358 2.25834 -3.01682 0.422646 0.610891 -0.669464 + -0.054531 2.22951 -3.02005 0.782685 0.464533 -0.414263 + -0.048481 2.27233 -2.96812 0.972569 0.205606 -0.108789 + -0.048313 2.25119 -2.93151 0.991396 -0.0412564 0.124226 + -0.097358 2.23148 -3.06218 0.303969 0.759977 -0.574489 + -0.104256 2.26771 -3.01851 0.221836 0.665219 -0.712932 + -0.077574 2.29006 -2.99257 0.315715 0.665445 -0.676392 + -0.058636 2.28719 -2.9876 0.638596 0.557015 -0.530969 + -0.120311 2.23474 -3.06283 0.230218 0.833097 -0.50294 + -0.127209 2.27097 -3.01915 0.0880916 0.680018 -0.727884 + -0.123349 2.30196 -2.99864 0.11593 0.713936 -0.690547 + -0.100472 2.29943 -2.99426 0.26694 0.718151 -0.642653 + -0.089494 2.35141 -2.90314 0.23161 0.853124 -0.467479 + -0.106736 2.2085 -3.12135 0.490261 0.809485 -0.323075 + -0.138848 2.22171 -3.11437 0.227633 0.891642 -0.391353 + -0.152423 2.24796 -3.05585 0.0904188 0.866021 -0.491764 + -0.154284 2.27313 -3.01843 -0.0152724 0.704336 -0.709703 + -0.184307 2.23498 -3.10511 0.019555 0.937109 -0.348489 + -0.181421 2.25134 -3.04883 -0.0847387 0.893436 -0.441125 + -0.183282 2.27651 -3.01141 -0.194604 0.648238 -0.73615 + -0.183897 2.30362 -2.99704 -0.165107 0.675695 -0.718454 + -0.150424 2.30412 -2.99792 0.00673593 0.721367 -0.692521 + -0.197921 2.21078 -3.1575 -0.0182108 0.862449 -0.505817 + -0.227363 2.23092 -3.09344 -0.287568 0.907389 -0.306512 + -0.224477 2.24728 -3.03716 -0.282637 0.876315 -0.390113 + -0.219971 2.27262 -3.00065 -0.350766 0.62678 -0.69578 + -0.267374 2.17265 -3.19234 -0.427205 0.717835 -0.549735 + -0.232845 2.21076 -3.14267 -0.291392 0.876131 -0.384037 + -0.278273 2.20844 -3.08421 -0.537864 0.794916 -0.280733 + -0.271332 2.2369 -3.01597 -0.513607 0.774855 -0.368521 + -0.266826 2.26223 -2.97946 -0.503052 0.544678 -0.671017 + -0.293459 2.14228 -3.20248 -0.553463 0.636752 -0.536867 + -0.283755 2.18828 -3.13344 -0.581465 0.760323 -0.289495 + -0.30984 2.1579 -3.14358 -0.811951 0.536674 -0.229599 + -0.308809 2.18477 -3.07768 -0.812183 0.552145 -0.188402 + -0.301868 2.21323 -3.00943 -0.781573 0.576371 -0.238622 + -0.328509 2.09876 -3.2101 -0.794375 0.496494 -0.349946 + -0.348331 2.00741 -3.25833 -0.909443 0.262462 -0.322533 + -0.346668 2.05602 -3.20424 -0.944 0.301425 -0.134194 + -0.322175 2.12033 -3.14958 -0.934475 0.348612 -0.0722897 + -0.321143 2.14719 -3.08367 -0.944076 0.31689 -0.0911142 + -0.313911 2.189 -3.00771 -0.931044 0.352826 -0.0931184 + -0.346496 1.90587 -3.32399 -0.884811 0.193 -0.4241 + -0.361012 1.96411 -3.22222 -0.997379 0.035581 -0.0630031 + -0.35935 2.01272 -3.16812 -0.991915 0.0996217 0.0786141 + -0.352907 2.03101 -3.14275 -0.983721 0.110054 0.142062 + -0.340334 2.07758 -3.14371 -0.948807 0.313783 -0.0361418 + -0.33517 1.84774 -3.34792 -0.843722 -0.409428 -0.347134 + -0.345178 1.86107 -3.34457 -0.564471 0.0283059 -0.824968 + -0.35672 1.91106 -3.28705 -0.983636 0.0990789 -0.15048 + -0.353513 1.88831 -3.25743 -0.991042 -0.118767 0.0610789 + -0.357805 1.94136 -3.1926 -0.942532 -0.234948 0.237558 + -0.31537 1.81296 -3.32104 -0.457844 -0.885437 -0.0798684 + -0.340923 1.83189 -3.29333 -0.699523 -0.713746 0.0351388 + -0.350931 1.84522 -3.28997 -0.891516 -0.449983 0.0520898 + -0.355402 1.86627 -3.30763 -0.982489 -0.123404 -0.139592 + -0.349042 1.86726 -3.23978 -0.851427 -0.423322 0.309629 + -0.305358 1.81202 -3.29945 -0.127702 -0.941155 0.31292 + -0.330911 1.83094 -3.27173 -0.348666 -0.83127 0.432923 + -0.277517 1.8115 -3.30338 0.000438635 -0.920624 0.390449 + -0.295121 1.84395 -3.26153 0.092684 -0.82821 0.552701 + -0.296138 1.86434 -3.22731 0.0621897 -0.875939 0.478397 + -0.331928 1.85133 -3.23751 -0.294864 -0.809359 0.50793 + -0.326539 1.90949 -3.16483 -0.716455 -0.513282 0.472476 + -0.231561 1.80731 -3.31936 0.10679 -0.942221 0.317513 + -0.242772 1.84949 -3.25356 0.0126169 -0.859353 0.511228 + -0.267281 1.84343 -3.26547 -0.0228817 -0.812728 0.582194 + -0.272701 1.87554 -3.20482 0.00579415 -0.903613 0.42831 + -0.309425 1.89356 -3.16257 -0.310998 -0.809053 0.498712 + -0.208394 1.81534 -3.30799 0.106514 -0.908215 0.404721 + -0.219605 1.85752 -3.24219 0.0331016 -0.885616 0.463237 + -0.215573 1.88599 -3.1778 -0.015708 -0.930334 0.366377 + -0.248192 1.8816 -3.19291 -0.0110217 -0.919205 0.393625 + -0.193669 1.81684 -3.30973 0.0946689 -0.889434 0.447152 + -0.197347 1.8591 -3.23793 0.0616154 -0.887548 0.456577 + -0.193315 1.88757 -3.17354 0.0470639 -0.93674 0.346847 + -0.182622 1.86061 -3.23967 0.217704 -0.877168 0.427998 + -0.171053 1.8857 -3.18537 0.182903 -0.925894 0.330556 + -0.169656 1.91908 -3.08069 0.07424 -0.933414 0.351037 + -0.222994 1.91107 -3.10367 -0.0173308 -0.941348 0.336991 + -0.255613 1.90667 -3.11878 -0.124156 -0.921583 0.367792 + -0.149137 1.88864 -3.19486 0.215088 -0.92054 0.326103 + -0.165125 1.94022 -3.02443 0.108313 -0.907134 0.406666 + -0.218463 1.93221 -3.04741 -0.111582 -0.898779 0.423964 + -0.253433 1.93131 -3.06382 -0.264142 -0.837594 0.47819 + -0.225351 1.9563 -3.00877 -0.219118 -0.830583 0.511977 + -0.282463 1.94866 -3.05916 -0.49023 -0.724139 0.485075 + -0.283809 1.9294 -3.08511 -0.437836 -0.758427 0.482792 + -0.285988 1.90476 -3.14008 -0.0758485 -0.913571 0.399544 + -0.19038 1.9572 -2.99237 -0.145514 -0.763983 0.628614 + -0.17514 2.01276 -2.94363 0.135703 -0.5745 0.807177 + -0.221486 1.96884 -2.98288 0.121068 -0.834987 0.536786 + -0.142878 1.95267 -3.0086 0.273699 -0.812213 0.515169 + -0.168133 1.96965 -2.97654 0.0953047 -0.689024 0.718445 + -0.129472 1.98201 -2.9841 0.381677 -0.614563 0.690388 + -0.136479 2.02512 -2.9512 0.316344 -0.540863 0.779355 + -0.149155 2.08945 -2.9016 0.195232 -0.562646 0.803314 + -0.182592 2.09 -2.89932 0.0299881 -0.556464 0.83033 + -0.215792 2.08846 -2.89973 -0.117927 -0.545613 0.829698 + -0.20834 2.01122 -2.94405 -0.0712762 -0.585065 0.807848 + -0.119012 2.09512 -2.90956 0.317708 -0.556568 0.767655 + -0.12547 2.14946 -2.86554 0.334991 -0.576663 0.745144 + -0.151331 2.14541 -2.85801 0.174117 -0.61988 0.765135 + -0.184768 2.14596 -2.85572 0.0400575 -0.669956 0.741319 + -0.212844 2.14683 -2.85505 -0.135856 -0.668473 0.731223 + -0.103209 2.20056 -2.84094 0.673171 -0.477386 0.564751 + -0.122263 2.19353 -2.82877 0.460513 -0.614541 0.640521 + -0.148124 2.18949 -2.82124 0.293896 -0.690206 0.661242 + -0.176551 2.18416 -2.81201 0.176259 -0.748459 0.63933 + -0.204628 2.18504 -2.81134 -0.107222 -0.750932 0.651616 + -0.082215 2.21407 -2.86212 0.826353 -0.337796 0.450593 + -0.11137 2.27078 -2.76348 0.680305 -0.514465 0.522025 + -0.130423 2.26376 -2.75131 0.504414 -0.626712 0.593968 + -0.15082 2.25873 -2.74261 0.377074 -0.68718 0.620966 + -0.071664 2.30111 -2.81601 0.924252 -0.212027 0.317494 + -0.093681 2.28158 -2.78219 0.819853 -0.380389 0.427955 + -0.131873 2.36449 -2.64017 0.649771 -0.551772 0.522823 + -0.145505 2.36013 -2.63263 0.471492 -0.659434 0.585528 + -0.165902 2.35511 -2.62392 0.362104 -0.703069 0.612025 + -0.062194 2.31767 -2.84469 0.986158 0.0186609 0.164755 + -0.098132 2.38756 -2.68012 0.90883 -0.248176 0.335314 + -0.114185 2.37528 -2.65887 0.798363 -0.414673 0.436649 + -0.145322 2.44721 -2.53414 0.631681 -0.575774 0.519099 + -0.062361 2.3388 -2.8813 0.945746 0.322243 -0.0415247 + -0.088682 2.4174 -2.73182 0.943167 0.331759 -0.0193032 + -0.088662 2.40411 -2.7088 0.98495 0.021417 0.171507 + -0.117082 2.4663 -2.56721 0.903317 -0.268488 0.334564 + -0.133134 2.45403 -2.54596 0.781937 -0.444957 0.436564 + -0.070556 2.34854 -2.89817 0.610668 0.713171 -0.344199 + -0.096877 2.42714 -2.74869 0.575422 0.75827 -0.306456 + -0.110511 2.49009 -2.60842 0.939899 0.339659 -0.0349542 + -0.110491 2.47681 -2.5854 0.98469 -0.00573657 0.174221 + -0.134346 2.53153 -2.4672 0.892657 -0.0892953 0.441802 + -0.110532 2.42881 -2.75158 0.198245 0.879829 -0.431972 + -0.129787 2.4979 -2.62194 0.189268 0.874336 -0.446894 + -0.116132 2.49623 -2.61905 0.571454 0.754259 -0.323316 + -0.127775 2.55059 -2.50022 0.879144 0.47098 0.0726899 + -0.127755 2.54203 -2.48539 0.94369 0.184184 0.274819 + -0.107449 2.35357 -2.90688 0.192312 0.863848 -0.465599 + -0.128487 2.43097 -2.75532 0.175695 0.883329 -0.434582 + -0.142106 2.49922 -2.62423 0.167668 0.877041 -0.450207 + -0.142187 2.55777 -2.51265 0.171822 0.922607 -0.345359 + -0.133396 2.55673 -2.51085 0.53549 0.814638 -0.222746 + -0.130326 2.3561 -2.91125 0.121261 0.870736 -0.476565 + -0.14484 2.43253 -2.75802 0.107021 0.889835 -0.443555 + -0.158459 2.50078 -2.62693 0.104357 0.882685 -0.458233 + -0.16498 2.56009 -2.51667 0.100141 0.926764 -0.362049 + -0.154506 2.55909 -2.51493 0.155437 0.923946 -0.349517 + -0.154514 2.35691 -2.91266 0.0160742 0.873493 -0.486572 + -0.169028 2.43334 -2.75942 0.0153302 0.892056 -0.451664 + -0.175038 2.50128 -2.6278 0.013682 0.884916 -0.46555 + -0.187987 2.3564 -2.91177 -0.113945 0.863086 -0.492036 + -0.193077 2.43299 -2.75882 -0.106923 0.884529 -0.454067 + -0.199087 2.50094 -2.6272 -0.103096 0.878995 -0.465553 + -0.196999 2.56038 -2.51717 -0.0930509 0.922979 -0.373433 + -0.181559 2.5606 -2.51754 0.0126849 0.92831 -0.37159 + -0.220585 2.29972 -2.98628 -0.327904 0.640685 -0.694263 + -0.218494 2.35289 -2.90569 -0.271071 0.832024 -0.484 + -0.223585 2.42948 -2.75274 -0.248741 0.85982 -0.445911 + -0.220089 2.49869 -2.62331 -0.242939 0.857078 -0.45431 + -0.258012 2.29166 -2.97232 -0.464643 0.583242 -0.666285 + -0.255921 2.34483 -2.89174 -0.400385 0.788459 -0.466931 + -0.250666 2.42435 -2.74386 -0.36815 0.824968 -0.428827 + -0.247171 2.49356 -2.61442 -0.35535 0.82708 -0.435506 + -0.284352 2.27957 -2.96062 -0.637382 0.507025 -0.580232 + -0.275893 2.33922 -2.88201 -0.592933 0.69556 -0.405743 + -0.270638 2.41874 -2.73413 -0.561015 0.737811 -0.375363 + -0.260889 2.49002 -2.60827 -0.54621 0.748479 -0.376076 + -0.235442 2.55483 -2.50754 -0.327434 0.884796 -0.331547 + -0.293166 2.25013 -2.96776 -0.714989 0.465898 -0.521278 + -0.29339 2.27383 -2.95069 -0.849928 0.409895 -0.331072 + -0.28493 2.33348 -2.87208 -0.821451 0.503148 -0.26844 + -0.276981 2.41524 -2.72802 -0.795645 0.548389 -0.257327 + -0.267232 2.48651 -2.60215 -0.780405 0.571807 -0.252992 + -0.305209 2.2259 -2.96604 -0.913315 0.355514 -0.198661 + -0.312744 2.21232 -2.94996 -0.969967 0.232273 -0.0722071 + -0.300925 2.26025 -2.93461 -0.940963 0.29954 -0.157686 + -0.292781 2.32328 -2.85759 -0.922847 0.348015 -0.165039 + -0.284832 2.40503 -2.71352 -0.908802 0.386021 -0.158323 + -0.323131 2.16066 -3.00182 -0.977091 0.21184 -0.0204442 + -0.312674 2.20736 -2.92309 -0.973595 -0.0340987 0.22572 + -0.310056 2.24086 -2.9088 -0.992727 0.0721936 0.0963434 + -0.301912 2.30389 -2.83178 -0.997784 0.0452835 0.0487576 + -0.291723 2.39286 -2.69742 -0.996212 0.0758862 0.0424683 + -0.330363 2.11885 -3.07778 -0.960276 0.276503 -0.0376346 + -0.32306 2.1557 -2.97495 -0.97942 -0.018849 0.200951 + -0.306553 2.13106 -2.94589 -0.797598 -0.354726 0.48786 + -0.298173 2.1898 -2.89418 -0.822847 -0.285061 0.491592 + -0.295555 2.2233 -2.87989 -0.888521 -0.221718 0.401711 + -0.342936 2.07228 -3.07681 -0.986382 0.00243778 0.16445 + -0.326429 2.04764 -3.04775 -0.886975 -0.235309 0.397371 + -0.272273 2.10669 -2.92795 -0.665415 -0.415155 0.620379 + -0.263892 2.16543 -2.87623 -0.632123 -0.513739 0.58008 + -0.262774 2.2018 -2.83487 -0.705051 -0.508618 0.494177 + -0.344862 1.99285 -3.11945 -0.914913 -0.197597 0.351979 + -0.332527 1.99984 -3.08785 -0.866712 -0.279936 0.412851 + -0.282181 2.02501 -2.97729 -0.750679 -0.319663 0.578184 + -0.247373 2.01184 -2.95231 -0.410357 -0.502208 0.761179 + -0.237464 2.09352 -2.90297 -0.44558 -0.482307 0.754214 + -0.351305 1.97457 -3.14482 -0.908708 -0.239193 0.342106 + -0.320039 1.9427 -3.11706 -0.736999 -0.506047 0.448049 + -0.318694 1.96196 -3.09111 -0.768869 -0.482946 0.419052 + -0.306359 1.96895 -3.05951 -0.738873 -0.52726 0.419598 + -0.28828 1.97721 -3.01739 -0.721224 -0.506276 0.472781 + -0.278599 1.9612 -3.03327 -0.437857 -0.798916 0.412329 + -0.260519 1.96946 -2.99115 -0.385691 -0.750131 0.537165 + -0.234516 2.1519 -2.85829 -0.440538 -0.601958 0.666013 + -0.233398 2.18826 -2.81693 -0.414741 -0.68348 0.600703 + -0.259031 2.26576 -2.75796 -0.722329 -0.524375 0.450856 + -0.203814 2.25251 -2.73182 -0.070152 -0.75801 0.64846 + -0.232584 2.25573 -2.73741 -0.424254 -0.69214 0.58391 + -0.257984 2.36276 -2.64031 -0.702431 -0.546811 0.45562 + -0.291812 2.28726 -2.80297 -0.896974 -0.322994 0.301847 + -0.179248 2.2534 -2.73338 0.203954 -0.735972 0.64556 + -0.210942 2.35081 -2.61647 -0.054758 -0.766176 0.640293 + -0.231537 2.35273 -2.61976 -0.406037 -0.703988 0.582696 + -0.249046 2.4439 -2.53038 -0.688999 -0.542046 0.48111 + -0.281624 2.37623 -2.66861 -0.87677 -0.360605 0.318179 + -0.186376 2.35171 -2.61803 0.185515 -0.747591 0.637724 + -0.210276 2.43566 -2.51411 -0.051602 -0.769134 0.637001 + -0.230871 2.43758 -2.5174 -0.395312 -0.700434 0.59424 + -0.240977 2.5156 -2.44155 -0.720253 -0.307776 0.621698 + -0.272686 2.45737 -2.55869 -0.880328 -0.327252 0.343407 + -0.172947 2.43967 -2.52109 0.34674 -0.718014 0.603513 + -0.193421 2.43627 -2.5152 0.182407 -0.756081 0.628545 + -0.2096 2.50807 -2.42651 -0.0610164 -0.596689 0.80015 + -0.222802 2.50928 -2.42857 -0.410159 -0.503335 0.760542 + -0.158954 2.44285 -2.52659 0.455179 -0.677123 0.5782 + -0.179594 2.51086 -2.4314 0.360863 -0.562574 0.743834 + -0.192744 2.50868 -2.4276 0.194926 -0.59648 0.778598 + -0.196838 2.55676 -2.40464 0.0615659 0.247304 0.96698 + -0.21004 2.55797 -2.4067 -0.329769 0.34857 0.877355 + -0.156885 2.51682 -2.44171 0.645516 -0.408913 0.645058 + -0.165601 2.51404 -2.43691 0.476431 -0.514593 0.712887 + -0.183688 2.55895 -2.40844 0.282714 0.313734 0.906446 + -0.225304 2.56665 -2.42497 -0.602512 0.56139 0.567293 + -0.256241 2.52427 -2.45982 -0.873282 -0.109365 0.474782 + -0.144697 2.52364 -2.45353 0.793967 -0.260513 0.549318 + -0.174971 2.56172 -2.41324 0.449796 0.386425 0.805208 + -0.199345 2.58 -2.44491 -0.082826 0.991591 0.0994351 + -0.216786 2.57669 -2.43918 -0.242803 0.959411 0.143451 + -0.220791 2.57447 -2.43529 -0.411202 0.861011 0.299286 + -0.16462 2.56961 -2.42691 0.561152 0.569587 0.600566 + -0.16464 2.57817 -2.44174 0.418249 0.882048 0.216932 + -0.173431 2.57921 -2.44353 0.0786092 0.986949 0.140543 + -0.183906 2.58021 -2.44528 0.0294615 0.993422 0.110656 + -0.218001 2.55814 -2.51328 -0.228921 0.905474 -0.357368 + -0.24916 2.55128 -2.50139 -0.509127 0.82027 -0.260665 + -0.253165 2.54906 -2.4975 -0.717118 0.686214 -0.121872 + -0.258603 2.54263 -2.4884 -0.828347 0.560103 -0.011234 + -0.263116 2.53481 -2.47807 -0.942069 0.269214 0.200073 + -0.27267 2.48008 -2.59304 -0.895014 0.419745 -0.150879 + -0.279561 2.46791 -2.57694 -0.993344 0.0904817 0.0712806 + 1.70947 2.207 -1.0732 -0.932897 0.0215028 0.359501 + 1.68994 2.06329 -1.11309 -0.928746 0.0378035 0.368784 + 1.70339 1.9893 -1.07574 -0.891568 0.0270818 0.452076 + 1.7066 2.25074 -1.08775 -0.946906 0.0705403 0.313677 + 1.68707 2.10694 -1.1277 -0.975667 0.0565817 0.211832 + 1.6801 1.96246 -1.12805 -0.952446 0.0480972 0.300888 + 1.69354 1.88847 -1.0907 -0.887855 0.0584277 0.456399 + 1.72999 1.82017 -1.02458 -0.824997 0.0814265 0.559241 + 1.67403 1.97548 -1.1624 -0.980483 0.0776943 0.180599 + 1.66549 1.89627 -1.1742 -0.963869 0.0805697 0.253901 + 1.67156 1.88333 -1.13979 -0.949116 0.0939896 0.300574 + 1.67721 1.82691 -1.10747 -0.904603 0.0904892 0.416541 + 1.71157 1.78383 -1.04185 -0.835431 0.120999 0.536111 + 1.67457 2.027 -1.19043 -0.994833 0.0992431 0.0214194 + 1.65095 1.83516 -1.20736 -0.986529 0.144783 0.0761403 + 1.65795 1.81516 -1.16071 -0.960089 0.102713 0.260151 + 1.6636 1.75882 -1.12833 -0.91532 0.161804 0.368793 + 1.69524 1.72227 -1.05862 -0.837344 0.205978 0.506387 + 1.67051 1.94782 -1.27149 -0.967205 0.167548 -0.1909 + 1.66079 1.88651 -1.2351 -0.988105 0.13857 -0.0666898 + 1.63079 1.69475 -1.26975 -0.969797 0.24063 -0.0398943 + 1.61944 1.69088 -1.21046 -0.963271 0.262642 0.0559363 + 1.64341 1.75406 -1.19388 -0.903505 0.190167 0.384077 + 1.64871 1.78512 -1.32169 -0.959819 0.202309 -0.194467 + 1.64063 1.74601 -1.29754 -0.981592 0.188498 -0.030748 + 1.61323 1.63098 -1.2815 -0.945025 0.326675 0.0145108 + 1.60187 1.62711 -1.22221 -0.943088 0.33252 -0.00401347 + 1.61773 1.64263 -1.16089 -0.909241 0.305563 0.282688 + 1.65962 1.79027 -1.34981 -0.800425 0.27522 -0.532517 + 1.6578 1.70994 -1.38728 -0.685265 0.39361 -0.612767 + 1.61771 1.62371 -1.39571 -0.925311 0.300882 -0.230802 + 1.60964 1.58459 -1.37157 -0.942423 0.300413 -0.146939 + 1.60154 1.60372 -1.30009 -0.91387 0.387585 -0.120914 + 1.6865 1.80988 -1.36317 -0.0330141 0.40307 -0.914574 + 1.68468 1.72955 -1.40063 0.00451311 0.429125 -0.903234 + 1.67945 1.64718 -1.44516 0.139863 0.500127 -0.854582 + 1.66448 1.57375 -1.48918 0.22822 0.537852 -0.811561 + 1.64283 1.63651 -1.43129 -0.642365 0.485275 -0.593191 + 1.73367 1.82544 -1.32353 0.632844 0.274154 -0.724119 + 1.73005 1.73866 -1.36081 0.654193 0.279369 -0.70284 + 1.73301 1.64749 -1.3925 0.696074 0.278801 -0.661627 + 1.72777 1.56512 -1.43703 0.722036 0.287675 -0.629212 + 1.72826 1.47856 -1.47591 0.749976 0.311276 -0.583646 + 1.8073 1.59501 -1.329 0.790291 0.234705 -0.565998 + 1.81026 1.50393 -1.36065 0.761352 0.208606 -0.613862 + 1.81855 1.40599 -1.38161 0.809609 0.219224 -0.544494 + 1.81903 1.31935 -1.42054 0.824329 0.232015 -0.516383 + 1.88805 1.42946 -1.26487 0.862473 0.198283 -0.465644 + 1.88883 1.33396 -1.29624 0.848639 0.16815 -0.501535 + 1.89712 1.23602 -1.31722 0.89229 0.157549 -0.423081 + 1.89403 1.14413 -1.35127 0.900486 0.162554 -0.403361 + 1.82824 1.22532 -1.44989 0.857478 0.240547 -0.454827 + 1.9662 1.25106 -1.18427 0.897749 0.174042 -0.404667 + 1.96698 1.15547 -1.2157 0.851342 0.0861279 -0.517492 + 1.95399 1.05227 -1.23915 0.88509 0.0718771 -0.459836 + 1.95089 0.960473 -1.27315 0.922425 0.103655 -0.372004 + 2.02124 1.12376 -1.10058 0.943906 0.107475 -0.312234 + 2.01002 1.03308 -1.14751 0.912561 0.0248311 -0.408186 + 1.99703 0.929877 -1.17096 0.921965 0.013977 -0.387022 + 1.97952 0.841297 -1.22353 0.943093 0.0450062 -0.32947 + 1.93121 0.894901 -1.34518 0.937188 0.0959741 -0.335362 + 2.04402 1.04975 -1.03439 0.970161 0.0366551 -0.239675 + 2.0328 0.959071 -1.08132 0.962936 -0.042258 -0.266397 + 2.01409 0.862541 -1.12133 0.963861 -0.0557323 -0.260511 + 1.99658 0.774051 -1.17386 0.972629 -0.0280371 -0.230665 + 2.06051 1.00499 -0.955058 0.988196 -0.0555689 -0.142761 + 2.04378 0.902897 -0.995826 0.982864 -0.124274 -0.136139 + 2.02508 0.806365 -1.03583 0.983887 -0.123265 -0.129508 + 2.00857 0.707927 -1.07553 0.987845 -0.100335 -0.118719 + 1.98022 0.694353 -1.24222 0.968275 -0.0336522 -0.247611 + 2.0661 0.987656 -0.861234 0.991255 -0.121944 -0.0504304 + 2.04937 0.885481 -0.902062 0.986152 -0.155723 -0.0570551 + 2.02757 0.760312 -0.902864 0.986576 -0.157178 -0.0443059 + 2.01107 0.661873 -0.942562 0.992309 -0.118422 -0.0360296 + 2.0847 1.11063 -0.690828 0.99095 -0.134231 -0.00102659 + 2.07118 1.00891 -0.747247 0.989535 -0.14429 0.000143634 + 2.05499 0.905722 -0.797122 0.985056 -0.171725 0.0132001 + 2.03319 0.780641 -0.797873 0.983153 -0.175636 0.0506217 + 2.08462 1.14167 -0.528789 0.972804 -0.21493 0.0863571 + 2.07631 1.0583 -0.619392 0.981467 -0.177007 0.0734189 + 2.06012 0.955113 -0.669267 0.965319 -0.235701 0.112269 + 2.03629 0.845114 -0.720743 0.968054 -0.21256 0.133004 + 2.09548 1.25584 -0.32634 0.905461 -0.382988 0.18292 + 2.07182 1.16429 -0.403371 0.899717 -0.378018 0.2182 + 2.06351 1.08092 -0.493969 0.928445 -0.306689 0.209597 + 2.04628 0.984262 -0.563157 0.914629 -0.324169 0.241595 + 2.11872 1.34714 -0.246282 0.894526 -0.425495 0.137028 + 2.07553 1.27638 -0.230928 0.803187 -0.506288 0.313947 + 2.05188 1.18475 -0.308008 0.827498 -0.457483 0.325509 + 2.03179 1.08707 -0.384218 0.850049 -0.40973 0.330965 + 2.01455 0.990413 -0.453411 0.843974 -0.395673 0.362146 + 2.12035 1.37266 -0.167875 0.830063 -0.497557 0.251857 + 2.09296 1.37722 -0.106179 0.691283 -0.550943 0.467536 + 2.04814 1.28086 -0.169283 0.714323 -0.569529 0.406669 + 2.0211 1.18058 -0.248183 0.73405 -0.526722 0.428642 + 2.001 1.0829 -0.324393 0.698443 -0.519557 0.492177 + 2.15469 1.46887 -0.097327 0.813106 -0.497315 0.302551 + 2.11209 1.46856 -0.032783 0.645814 -0.555379 0.523907 + 2.02482 1.34524 -0.069792 0.392895 -0.628094 0.671663 + 2.01546 1.25513 -0.152315 0.470969 -0.639135 0.608025 + 1.98841 1.15476 -0.231266 0.369836 -0.638807 0.674646 + 2.18873 1.57082 -0.033902 0.766863 -0.523109 0.371858 + 2.14613 1.57059 0.030692 0.668491 -0.511082 0.540291 + 2.04396 1.43658 0.003602 0.426998 -0.634943 0.643832 + 1.97634 1.39651 -0.013797 -0.191043 -0.67037 0.717012 + 1.97747 1.30843 -0.088838 -0.161013 -0.65685 0.736629 + 2.2366 1.67118 0.022866 0.711958 -0.602968 0.359923 + 2.15405 1.65995 0.099917 0.588529 -0.620177 0.518666 + 2.03495 1.51832 0.092235 0.386357 -0.612656 0.689478 + 1.96733 1.47825 0.074836 -0.183369 -0.713998 0.675709 + 2.30028 1.76094 0.076794 0.743493 -0.577635 0.336981 + 2.21773 1.74971 0.153845 0.511923 -0.621409 0.593116 + 2.04287 1.60776 0.161511 0.364529 -0.561598 0.742782 + 1.93928 1.55924 0.143957 -0.180167 -0.693776 0.697291 + 1.92104 1.44646 -0.019105 -0.739905 -0.527243 0.417799 + 2.32127 1.79285 -0.010067 0.840246 -0.535624 -0.0842239 + 2.33657 1.81891 0.081796 0.830153 -0.507981 0.229784 + 2.3157 1.79518 -0.041913 0.8125 -0.373584 -0.447526 + 2.35674 1.84633 -0.008909 0.96658 -0.193091 -0.168636 + 2.36546 1.88611 0.038201 0.987746 -0.155841 0.00845147 + 2.34528 1.85868 0.128906 0.848888 -0.431477 0.305315 + 2.28027 1.75988 -0.080374 0.887248 -0.211176 -0.410117 + 2.32537 1.91211 -0.01503 0.274366 0.425895 -0.862169 + 2.34897 1.93992 0.013602 0.631987 0.451472 -0.629893 + 2.36724 1.92857 0.042453 0.962657 0.182794 -0.199693 + 2.35617 1.95194 0.178382 0.93798 -0.170716 0.301743 + 2.26153 2.01042 0.037081 0.0306458 0.537382 -0.842782 + 2.28513 2.03823 0.065712 0.32017 0.729768 -0.604094 + 2.33417 2.04014 0.1172 0.623085 0.714893 -0.317321 + 2.35243 2.02888 0.146103 0.850756 0.52553 -0.00571994 + 2.35795 1.99449 0.182684 0.938337 0.177979 0.296391 + 2.21586 2.04588 0.063268 -0.0889614 0.6397 -0.763459 + 2.23229 2.08064 0.109466 0.135533 0.889422 -0.436531 + 2.28133 2.08255 0.160956 0.396365 0.911942 -0.1061 + 2.30384 2.06634 0.207823 0.58321 0.754691 0.300513 + 2.15972 2.09474 0.138633 -0.0465934 0.918884 -0.391766 + 2.19296 2.10671 0.200114 0.138424 0.990254 0.0153814 + 2.21547 2.09059 0.247031 0.308259 0.840799 0.44501 + 2.22548 2.04512 0.287584 0.386278 0.573091 0.722742 + 2.30936 2.03194 0.244404 0.667677 0.466693 0.580004 + 2.06722 2.07637 0.125264 -0.213807 0.715928 -0.66463 + 2.06868 2.09668 0.172282 -0.154962 0.955069 -0.252647 + 2.10191 2.10864 0.233762 -0.0297638 0.996132 0.082677 + 2.11664 2.09202 0.285745 0.126242 0.846815 0.516689 + 1.99034 2.06431 0.145555 -0.349591 0.712653 -0.608204 + 1.99179 2.08462 0.192572 -0.281934 0.926048 -0.250896 + 1.97828 2.09008 0.273113 -0.201683 0.971979 0.120754 + 1.99301 2.07346 0.325096 -0.0465262 0.841273 0.538605 + 2.12665 2.04664 0.326349 0.246298 0.530786 0.810927 + 1.97494 1.98465 0.109118 -0.33246 0.566044 -0.754364 + 1.92688 2.02509 0.144879 -0.284269 0.599323 -0.748333 + 1.86678 2.02229 0.164923 -0.340007 0.709316 -0.617467 + 1.88359 2.04991 0.211892 -0.35373 0.90158 -0.249056 + 1.81352 1.9195 0.12256 -0.322076 0.547825 -0.77211 + 1.75341 1.9167 0.142605 -0.438961 0.414584 -0.79714 + 1.73438 1.97249 0.188775 -0.572091 0.647194 -0.503838 + 1.7512 2.00011 0.235745 -0.534351 0.839487 -0.0986473 + 1.87008 2.05545 0.292484 -0.360957 0.922306 0.138063 + 1.77848 1.88161 0.104993 -0.479598 0.76479 -0.430211 + 1.72363 1.8572 0.131276 -0.922634 0.0408691 -0.383505 + 1.71488 1.87816 0.156571 -0.917652 0.0475583 -0.394528 + 1.69585 1.93395 0.202742 -0.924586 0.208421 -0.318907 + 1.78656 1.8729 0.074278 -0.450833 0.632716 -0.629618 + 1.73172 1.84849 0.100561 -0.859066 0.215164 -0.464445 + 1.72141 1.84774 0.19585 -0.919133 -0.393719 -0.0133936 + 1.71266 1.8687 0.221145 -0.920921 -0.383631 0.0687863 + 1.80597 1.83923 0.042994 -0.4178 0.411838 -0.809835 + 1.75682 1.79571 0.071374 -0.862163 -0.117462 -0.492825 + 1.74652 1.79497 0.166664 -0.90685 -0.420786 0.0237309 + 1.71044 1.88591 0.258945 -0.894354 -0.39077 0.217782 + 1.69363 1.95115 0.240542 -0.930314 0.366292 -0.0185871 + 1.80707 1.70358 0.008356 -0.884428 -0.0258417 -0.465961 + 1.84763 1.61518 -0.058342 -0.939199 -0.0838011 -0.33299 + 1.79353 1.68774 0.086183 -0.915349 -0.400036 -0.0459052 + 1.86913 1.54697 -0.119202 -0.968741 -0.071143 -0.237656 + 1.83409 1.59935 0.019485 -0.904695 -0.425944 0.00991559 + 1.85245 1.60663 0.108876 -0.728893 -0.609277 0.312243 + 1.80713 1.67712 0.149785 -0.770186 -0.583953 0.256538 + 1.88609 1.47278 -0.186297 -0.998635 0.0506971 -0.0125523 + 1.87462 1.52017 -0.039378 -0.898153 -0.427624 0.102274 + 1.89298 1.52745 0.050015 -0.705448 -0.608514 0.363392 + 1.8862 1.64258 0.21421 -0.27612 -0.720871 0.635691 + 1.84087 1.71298 0.255069 -0.651491 -0.635158 0.414891 + 1.87618 1.42189 -0.268346 -0.996064 0.016844 0.0870237 + 1.89158 1.44598 -0.106472 -0.942362 -0.289633 0.16753 + 1.86885 1.35294 -0.337923 -0.979877 0.00763949 0.199458 + 1.90639 1.358 -0.168095 -0.9417 -0.229522 0.246012 + 1.93585 1.35848 -0.080729 -0.733469 -0.461113 0.499398 + 1.93698 1.27049 -0.155721 -0.741454 -0.401711 0.53747 + 1.85871 1.43788 -0.420448 -0.961644 0.205777 0.181372 + 1.85085 1.29307 -0.412823 -0.968556 0.0391518 0.245698 + 1.89905 1.28905 -0.237671 -0.943827 -0.129409 0.304046 + 1.92234 1.18614 -0.219015 -0.69095 -0.372551 0.619511 + 1.96811 1.21832 -0.17136 -0.0948823 -0.646467 0.757019 + 1.84298 1.48933 -0.552965 -0.912855 0.300427 0.276476 + 1.84071 1.37809 -0.49529 -0.966285 0.11132 0.232166 + 1.82658 1.23187 -0.486835 -0.962105 0.0355134 0.270355 + 1.88441 1.2047 -0.300965 -0.937289 -0.0666557 0.342119 + 1.89832 1.10095 -0.296262 -0.726026 -0.295838 0.620779 + 1.82859 1.54464 -0.664366 -0.853786 0.424573 0.30131 + 1.81373 1.44579 -0.625345 -0.91646 0.219698 0.334416 + 1.81147 1.33455 -0.567678 -0.951584 0.096741 0.29177 + 1.80398 1.18699 -0.568694 -0.958656 0.0965626 0.267685 + 1.86015 1.14351 -0.374978 -0.929323 0.0243971 0.368461 + 1.78188 1.54323 -0.805916 -0.828759 0.447392 0.336152 + 1.74035 1.49789 -0.858394 -0.864628 0.355173 0.355346 + 1.78706 1.49931 -0.716844 -0.873598 0.343412 0.344811 + 1.77308 1.39422 -0.689219 -0.920959 0.123895 0.369439 + 1.78887 1.28967 -0.649536 -0.948651 0.0275966 0.315117 + 1.79768 1.63054 -0.869151 -0.8072 0.338824 0.48335 + 1.74955 1.58263 -0.912958 -0.810723 0.334747 0.480283 + 1.70359 1.5243 -0.951933 -0.83526 0.265906 0.481285 + 1.70034 1.44373 -0.903383 -0.877824 0.306469 0.368106 + 1.74642 1.44774 -0.780717 -0.897925 0.23803 0.370234 + 1.75647 1.70315 -0.956914 -0.80009 0.198643 0.566036 + 1.73805 1.66673 -0.974234 -0.817519 0.214121 0.534617 + 1.70923 1.65183 -1.00802 -0.766276 0.265323 0.58517 + 1.72073 1.56773 -0.946754 -0.785855 0.263163 0.559623 + 1.68522 1.62034 -1.02008 -0.76353 0.279533 0.582137 + 1.66809 1.577 -1.02521 -0.795263 0.243144 0.555372 + 1.66357 1.47014 -0.99693 -0.835576 0.210523 0.507437 + 1.66068 1.38386 -0.951877 -0.886614 0.265384 0.378797 + 1.67123 1.69079 -1.07069 -0.805884 0.286591 0.51809 + 1.64934 1.63786 -1.08662 -0.85063 0.271332 0.450341 + 1.63962 1.53542 -1.04439 -0.793347 0.215067 0.569514 + 1.60744 1.48643 -1.07733 -0.816076 0.175225 0.550742 + 1.63139 1.42106 -1.02992 -0.848007 0.169924 0.502006 + 1.64171 1.7058 -1.1443 -0.906867 0.266878 0.326141 + 1.62087 1.59636 -1.10574 -0.845629 0.314286 0.431435 + 1.59827 1.55151 -1.12345 -0.866794 0.292173 0.404108 + 1.98978 1.6911 0.231766 0.262485 -0.587353 0.765584 + 1.98945 1.75703 0.288962 0.357307 -0.655906 0.66492 + 1.8863 1.73845 0.328145 0.0159542 -0.745426 0.666398 + 1.8458 1.74 0.305064 -0.526804 -0.688234 0.49881 + 2.2174 1.81556 0.210993 0.426864 -0.604969 0.672161 + 2.14869 1.86319 0.301296 0.402667 -0.549092 0.732365 + 2.03042 1.82386 0.333414 0.38261 -0.563965 0.731815 + 1.92727 1.80528 0.372597 0.278413 -0.51425 0.811192 + 2.31566 1.8655 0.18929 0.664612 -0.516192 0.540219 + 2.24695 1.91313 0.279592 0.500297 -0.44567 0.742348 + 2.22239 1.94999 0.310547 0.441435 -0.206128 0.873296 + 2.13676 1.92875 0.342738 0.35553 -0.227517 0.906551 + 2.32655 1.95876 0.238765 0.766278 -0.176219 0.617871 + 2.30199 1.99562 0.269721 0.649086 0.102996 0.75371 + 2.21811 2.00879 0.3129 0.395035 0.248026 0.884551 + 2.13248 1.98755 0.345091 0.308353 0.136688 0.9414 + 2.01849 1.88934 0.374807 0.327816 -0.276444 0.903391 + 2.02889 1.97432 0.382406 0.234953 0.116625 0.964985 + 1.95482 1.94111 0.397731 0.212943 0.0215192 0.976828 + 1.94442 1.85613 0.390132 0.216446 -0.262399 0.940371 + 1.86725 1.78376 0.373066 -0.111711 -0.563103 0.818801 + 2.02307 2.03341 0.363662 0.135103 0.530452 0.83688 + 1.91758 1.99965 0.388944 -0.0136993 0.499708 0.866085 + 1.92943 1.95493 0.405201 0.24524 0.181315 0.952356 + 1.8844 1.83461 0.3906 0.0565497 -0.312228 0.948323 + 1.88753 2.03961 0.350326 -0.248674 0.779322 0.575169 + 1.78108 1.97992 0.360723 -0.478586 0.63171 0.609835 + 1.83084 1.95588 0.403754 -0.270964 0.449504 0.85119 + 1.84269 1.91125 0.420061 -0.107942 -0.0450639 0.993135 + 1.85901 1.84842 0.398071 -0.0344053 -0.398678 0.916445 + 1.76363 1.99576 0.302879 -0.534506 0.803617 0.26173 + 1.70607 1.9468 0.307678 -0.897708 0.252123 0.361323 + 1.72681 1.93728 0.344367 -0.776633 0.065298 0.62656 + 1.77658 1.91316 0.387347 -0.630922 -0.0637786 0.77322 + 1.79859 1.88451 0.394568 -0.53452 -0.331479 0.777438 + 1.73118 1.87639 0.295635 -0.789293 -0.469433 0.39579 + 1.75319 1.84774 0.302855 -0.776952 -0.480615 0.406638 + 1.81491 1.82177 0.372629 -0.527449 -0.4648 0.711168 + 1.82675 1.78531 0.349985 -0.555107 -0.631421 0.541446 + 1.76504 1.81136 0.280262 -0.792617 -0.509043 0.335608 + 1.76011 1.78434 0.230267 -0.864917 -0.42226 0.27132 + 1.58453 1.45584 -1.09935 -0.802301 0.163224 0.57417 + 1.59609 1.36052 -1.07345 -0.839104 0.14781 0.523504 + 1.62538 1.32332 -0.99542 -0.890444 0.265153 0.369868 + 1.57536 1.52092 -1.14547 -0.878333 0.317695 0.357213 + 1.55389 1.48278 -1.17341 -0.895957 0.331959 0.295066 + 1.55777 1.43811 -1.13185 -0.825413 0.220356 0.519746 + 1.58134 1.56168 -1.19528 -0.921888 0.3531 0.159505 + 1.55987 1.52346 -1.22328 -0.918088 0.380083 0.11248 + 1.53859 1.4778 -1.26239 -0.907779 0.412614 0.0754066 + 1.5267 1.44186 -1.20255 -0.901004 0.362714 0.237974 + 1.53059 1.39729 -1.16094 -0.86159 0.171245 0.477847 + 1.59512 1.59787 -1.17855 -0.924556 0.325277 0.198473 + 1.58809 1.59093 -1.23894 -0.9231 0.384251 -0.0154084 + 1.5764 1.56368 -1.25754 -0.903209 0.4291 -0.00931362 + 1.55512 1.51801 -1.29664 -0.89359 0.437548 -0.100239 + 1.5168 1.43611 -1.29238 -0.914226 0.403938 -0.0320071 + 1.50491 1.40026 -1.23249 -0.910542 0.356512 0.209312 + 1.51426 1.3487 -1.17618 -0.839164 0.154629 0.521435 + 1.56933 1.34288 -1.10591 -0.785845 0.0716688 0.614257 + 1.58824 1.56145 -1.33468 -0.864739 0.441311 -0.239729 + 1.54182 1.47566 -1.33128 -0.863572 0.438451 -0.249004 + 1.49947 1.38977 -1.32112 -0.887005 0.458013 -0.0587064 + 1.482 1.36422 -1.25526 -0.895911 0.40474 0.183106 + 1.49135 1.31266 -1.19896 -0.831164 0.159119 0.532773 + 1.5376 1.42074 -1.39016 -0.804266 0.480961 -0.349045 + 1.52449 1.42932 -1.36002 -0.806215 0.502831 -0.311736 + 1.47664 1.34482 -1.35347 -0.873371 0.474939 -0.107961 + 1.45918 1.31928 -1.28762 -0.910555 0.393848 0.125594 + 1.45892 1.26563 -1.2397 -0.86702 0.148839 0.475524 + 1.55899 1.44397 -1.42699 -0.867956 0.423709 -0.259082 + 1.53418 1.34028 -1.51799 -0.775167 0.564166 -0.284311 + 1.50517 1.32765 -1.47451 -0.693466 0.6526 -0.305315 + 1.51048 1.35755 -1.41971 -0.742662 0.584706 -0.326452 + 1.49738 1.36613 -1.38956 -0.781909 0.537167 -0.316338 + 1.59651 1.47515 -1.4948 -0.838945 0.433246 -0.329347 + 1.5717 1.37146 -1.5858 -0.780036 0.504412 -0.370287 + 1.56679 1.29244 -1.68873 -0.615639 0.681116 -0.39632 + 1.50726 1.26305 -1.64863 -0.619662 0.728836 -0.291233 + 1.47825 1.25041 -1.60514 -0.622239 0.734984 -0.269477 + 1.62162 1.48795 -1.53037 -0.6741 0.515948 -0.52857 + 1.61249 1.3985 -1.60824 -0.597468 0.605622 -0.525599 + 1.60758 1.31948 -1.71117 -0.331996 0.708153 -0.623136 + 1.60007 1.21433 -1.83044 0.171037 0.802544 -0.571549 + 1.54917 1.22917 -1.80395 -0.316075 0.83959 -0.441797 + 1.65498 1.50123 -1.54717 0.118303 0.602727 -0.789129 + 1.64584 1.41169 -1.62508 0.180601 0.667739 -0.722155 + 1.63913 1.34099 -1.68663 0.485408 0.577644 -0.656283 + 1.64138 1.28281 -1.74627 0.499445 0.59676 -0.628038 + 1.60984 1.26131 -1.77081 0.354721 0.662943 -0.659302 + 1.71876 1.40596 -1.53395 0.759519 0.328406 -0.561499 + 1.71504 1.32517 -1.58463 0.800481 0.321174 -0.506041 + 1.70833 1.25447 -1.64618 0.834385 0.320584 -0.44836 + 1.69567 1.18769 -1.7125 0.856598 0.299539 -0.420138 + 1.6395 1.21314 -1.80858 0.639438 0.540823 -0.546471 + 1.82453 1.14454 -1.50056 0.854569 0.227015 -0.467093 + 1.80562 1.07001 -1.56648 0.868029 0.226457 -0.441863 + 1.79295 1.00322 -1.6328 0.882549 0.22458 -0.413123 + 1.7691 0.950287 -1.71131 0.899067 0.22975 -0.372685 + 1.69378 1.11793 -1.77487 0.876339 0.305138 -0.372721 + 1.90324 1.05011 -1.38061 0.940898 0.159919 -0.298558 + 1.88766 0.978483 -1.44294 0.908477 0.130693 -0.396974 + 1.86874 0.903956 -1.50886 0.919014 0.113824 -0.377436 + 1.84544 0.846043 -1.58295 0.923027 0.116013 -0.366827 + 1.91563 0.823272 -1.40751 0.925274 0.0637843 -0.373899 + 1.88919 0.755559 -1.47603 0.93202 0.0461949 -0.35945 + 1.86589 0.69756 -1.55017 0.946661 0.0574913 -0.317061 + 1.84155 0.660377 -1.63517 0.95274 0.0719376 -0.295147 + 1.82158 0.793109 -1.66147 0.933142 0.131926 -0.334428 + 1.95983 0.77573 -1.29557 0.943286 0.050874 -0.32806 + 1.9371 0.70295 -1.36411 0.933537 0.016757 -0.35809 + 1.91065 0.635231 -1.43262 0.940694 0.0153696 -0.338908 + 1.8863 0.579432 -1.50997 0.952915 0.0469511 -0.299582 + 1.95748 0.621574 -1.31076 0.951806 -0.0396771 -0.304122 + 1.92874 0.541985 -1.37811 0.953258 -0.0440531 -0.298928 + 1.90438 0.486181 -1.45545 0.964023 0.0614641 -0.258617 + 1.88613 0.445995 -1.54445 0.960478 0.103117 -0.258551 + 1.86197 0.542251 -1.59497 0.95571 0.0853998 -0.281646 + 1.99221 0.628315 -1.14384 0.987686 -0.0739775 -0.137858 + 1.97947 0.54448 -1.21083 0.978644 -0.0415123 -0.201329 + 1.95073 0.464891 -1.27818 0.963453 0.014457 -0.267487 + 1.94019 0.396175 -1.36396 0.957087 0.164188 -0.238802 + 2.00034 0.561665 -0.990198 0.993099 -0.108892 -0.0435471 + 1.9876 0.477829 -1.05719 0.998822 -9.28516e-005 -0.0485147 + 1.99081 0.394963 -1.14666 0.993859 0.013095 -0.109873 + 1.98028 0.326333 -1.23239 0.980332 0.132749 -0.146041 + 2.01226 0.657475 -0.819343 0.987232 -0.15183 0.0481693 + 2.00153 0.557266 -0.866979 0.993478 -0.108648 0.0346047 + 1.99419 0.452858 -0.919338 0.998614 -0.0452626 0.0268432 + 1.99741 0.369992 -1.00881 0.999767 -0.00279491 0.0214261 + 2.01535 0.722029 -0.742154 0.972088 -0.178786 0.151921 + 1.99507 0.593357 -0.747888 0.976081 -0.155522 0.151918 + 1.98773 0.488861 -0.800298 0.986084 -0.113757 0.121233 + 1.98427 0.380212 -0.861711 0.986503 -0.106008 0.124799 + 2.02245 0.874262 -0.614633 0.929315 -0.276767 0.244488 + 2.00529 0.764217 -0.656829 0.944617 -0.210281 0.251951 + 1.98501 0.635545 -0.662561 0.948275 -0.171097 0.267396 + 1.97703 0.517647 -0.708554 0.954295 -0.165996 0.24853 + 1.9935 0.882653 -0.514565 0.862711 -0.332253 0.381233 + 1.97634 0.772609 -0.556762 0.851082 -0.287047 0.439617 + 1.96969 0.657329 -0.607493 0.855888 -0.236219 0.460061 + 1.96171 0.539344 -0.653536 0.791871 -0.31462 0.523406 + 1.97703 0.986076 -0.393898 0.663247 -0.524674 0.533686 + 1.95598 0.878317 -0.455052 0.538996 -0.472276 0.697452 + 1.94212 0.77194 -0.513802 0.503137 -0.428994 0.750212 + 1.93547 0.65666 -0.564533 0.487376 -0.39072 0.780899 + 1.93571 0.964666 -0.374015 0.129455 -0.613249 0.779209 + 1.90827 0.87039 -0.446126 -0.0730224 -0.535608 0.841304 + 1.89441 0.764101 -0.504826 -0.209419 -0.432517 0.876968 + 1.89444 0.652219 -0.557439 -0.221493 -0.452192 0.863981 + 1.95968 1.0614 -0.30456 0.291985 -0.632291 0.717601 + 1.88088 0.964924 -0.39846 -0.495392 -0.451569 0.742073 + 1.85344 0.870648 -0.470571 -0.542136 -0.458412 0.704235 + 1.83094 0.790462 -0.543286 -0.660761 -0.340721 0.668807 + 1.94409 1.13304 -0.248657 -0.191081 -0.597667 0.778641 + 1.91535 1.03977 -0.321901 -0.27071 -0.614998 0.740604 + 1.822 0.968071 -0.452114 -0.813169 -0.191859 0.549496 + 1.78124 0.914346 -0.53626 -0.861443 -0.148911 0.485531 + 1.75873 0.834162 -0.608975 -0.86638 -0.201307 0.457013 + 1.85647 1.04292 -0.375554 -0.799086 -0.19388 0.569098 + 1.81829 1.08548 -0.45427 -0.929991 0.0950057 0.355091 + 1.78834 1.03441 -0.536214 -0.943985 0.106347 0.312381 + 1.74758 0.980684 -0.62036 -0.948823 0.151941 0.276855 + 1.77403 1.13592 -0.650637 -0.973769 0.0566799 0.220368 + 1.76018 1.08757 -0.733287 -0.975327 0.108805 0.192092 + 1.73504 1.03363 -0.812257 -0.964946 0.12261 0.232047 + 1.72244 0.926738 -0.699321 -0.969064 0.0966896 0.227081 + 1.75903 1.23639 -0.718449 -0.933234 -0.0317795 0.357862 + 1.74518 1.18803 -0.801099 -0.879111 -0.198859 0.433151 + 1.71522 1.12579 -0.863086 -0.791667 -0.201756 0.576678 + 1.71302 0.976869 -0.880152 -0.966437 0.102223 0.235689 + 1.74325 1.34093 -0.758132 -0.880187 0.0909851 0.465824 + 1.69942 1.27075 -0.806761 -0.836947 -0.0703456 0.542745 + 1.66946 1.2085 -0.86874 -0.732137 -0.145528 0.66543 + 1.63217 1.13485 -0.91298 -0.624685 -0.244123 0.741737 + 1.69319 1.06903 -0.930981 -0.682886 -0.308829 0.662036 + 1.70676 1.38777 -0.829262 -0.8727 0.240032 0.425181 + 1.66294 1.31767 -0.877841 -0.88034 0.206199 0.427181 + 1.62401 1.25131 -0.923105 -0.857357 0.165391 0.487427 + 1.58673 1.17767 -0.967345 -0.864335 0.0943314 0.493991 + 1.60233 1.06256 -0.96058 -0.593298 -0.332617 0.733051 + 1.58645 1.25696 -1.04068 -0.881474 0.28495 0.376574 + 1.54824 1.19931 -1.08523 -0.894809 0.200963 0.398661 + 1.51747 1.13409 -1.13427 -0.898731 0.153436 0.410781 + 1.55596 1.11245 -1.01639 -0.888552 -0.0141568 0.458557 + 1.55301 1.29429 -1.12115 -0.82964 0.142834 0.539718 + 1.51479 1.23664 -1.16569 -0.83315 0.124071 0.53895 + 1.48237 1.18961 -1.20643 -0.843278 0.0572872 0.534416 + 1.48367 1.07867 -1.18368 -0.878202 0.0399063 0.476623 + 1.44856 1.13419 -1.25584 -0.812248 0.0665417 0.579505 + 1.46009 1.01299 -1.23031 -0.835144 0.044783 0.548205 + 1.54043 1.03896 -1.07509 -0.863095 -0.131112 0.487726 + 1.58681 0.989069 -1.01928 -0.710331 -0.192575 0.677012 + 1.42778 1.21479 -1.28065 -0.85326 0.157485 0.497137 + 1.46073 1.30484 -1.39622 -0.813722 0.57069 -0.110313 + 1.44974 1.26479 -1.51845 -0.594693 0.768678 -0.23553 + 1.48146 1.32614 -1.4323 -0.725099 0.641886 -0.249429 + 1.47615 1.29624 -1.48712 -0.566957 0.752009 -0.336217 + 1.45184 1.21897 -1.63648 -0.559207 0.780175 -0.280383 + 1.48964 1.19978 -1.76384 -0.47794 0.83265 -0.279763 + 1.43979 1.18462 -1.73799 -0.447951 0.873471 -0.190759 + 1.41602 1.19716 -1.6283 -0.620747 0.728048 -0.290895 + 1.38771 1.1672 -1.63161 -0.743786 0.559587 -0.365574 + 1.38119 1.19504 -1.56743 -0.775228 0.596055 -0.209141 + 1.5387 1.17114 -1.89964 -0.106165 0.916496 -0.385699 + 1.41362 1.14503 -1.86862 -0.319305 0.934196 -0.15913 + 1.37663 1.14592 -1.80136 -0.41811 0.903719 -0.09207 + 1.40397 1.16281 -1.72981 -0.539043 0.838513 -0.0795562 + 1.58961 1.1563 -1.92613 0.371172 0.790447 -0.487262 + 1.62973 1.16616 -1.86822 0.701789 0.539025 -0.465773 + 1.62799 1.10638 -1.93907 0.76729 0.497841 -0.404252 + 1.63031 1.05287 -2.00698 0.798148 0.485847 -0.356248 + 1.6801 1.06513 -1.84902 0.884092 0.315177 -0.345029 + 1.67836 1.00543 -1.91982 0.907555 0.3063 -0.287269 + 1.75542 0.897488 -1.78546 0.909556 0.230262 -0.34596 + 1.7298 0.86485 -1.87113 0.922923 0.230535 -0.308328 + 1.71425 0.833595 -1.95099 0.936017 0.2267 -0.269218 + 1.74214 0.723213 -1.93861 0.938724 0.19566 -0.28375 + 1.79718 0.760102 -1.7523 0.938004 0.156933 -0.309064 + 1.77156 0.727377 -1.83802 0.925709 0.203147 -0.319051 + 1.76037 0.623595 -1.94926 0.937715 0.153794 -0.311508 + 1.72877 0.620289 -2.03794 0.944454 0.133595 -0.300264 + 1.81715 0.627372 -1.726 0.963781 0.101073 -0.2468 + 1.78979 0.627846 -1.84862 0.953463 0.141691 -0.266142 + 1.81014 0.522261 -1.81735 0.965712 0.0847973 -0.245377 + 1.78193 0.519971 -1.91998 0.952571 0.0837122 -0.292575 + 1.75033 0.516578 -2.0087 0.942768 0.0952932 -0.319544 + 1.83749 0.521787 -1.69473 0.964391 0.103509 -0.243383 + 1.83638 0.413125 -1.73832 0.959552 0.108642 -0.259726 + 1.80817 0.410835 -1.84095 0.961632 0.0819259 -0.261825 + 1.77306 0.429219 -1.96599 0.951472 0.069319 -0.299828 + 1.7397 0.435529 -2.06672 0.9414 0.0153384 -0.336944 + 1.86166 0.425444 -1.64426 0.956767 0.120679 -0.264637 + 1.90282 0.328456 -1.54907 0.946218 0.190039 -0.261833 + 1.87754 0.316044 -1.64317 0.945123 0.163967 -0.282591 + 1.8437 0.321936 -1.74858 0.952746 0.0741091 -0.29459 + 1.80858 0.340319 -1.87362 0.946973 -0.0228189 -0.320502 + 1.92194 0.355984 -1.45294 0.948587 0.183001 -0.258252 + 1.96 0.235763 -1.42632 0.963929 0.0755163 -0.255224 + 1.93246 0.229713 -1.52304 0.954348 0.00484252 -0.298657 + 1.89862 0.235606 -1.62845 0.920979 -0.0812703 -0.381042 + 1.85498 0.253233 -1.72317 0.916886 -0.102173 -0.385852 + 1.97913 0.263295 -1.33021 0.980224 0.0763599 -0.182566 + 1.9978 0.223203 -1.19056 0.999099 0.00454468 -0.042206 + 1.99354 0.170387 -1.28388 0.987074 -0.0353957 -0.156306 + 1.966 0.164338 -1.38061 0.966422 -0.0921063 -0.239884 + 1.94276 0.159406 -1.48706 0.938742 -0.107998 -0.32726 + 1.99895 0.286242 -1.09275 0.999457 0.0299574 -0.0137188 + 1.99281 0.211628 -1.03391 0.978934 -0.174571 0.10589 + 1.98855 0.158812 -1.12723 0.994071 -0.0975026 0.0481312 + 1.99174 0.109062 -1.23506 0.875254 -0.479624 -0.0623798 + 1.9685 0.104039 -1.34156 0.932262 -0.290786 -0.215244 + 1.98581 0.296467 -0.94566 0.991516 -0.0642481 0.112993 + 1.97373 0.305143 -0.850089 0.93049 -0.243527 0.273649 + 1.98072 0.220307 -0.938347 0.877151 -0.355734 0.322583 + 1.98151 0.146584 -1.03386 0.863007 -0.413602 0.290091 + 1.9847 0.096749 -1.14174 0.857099 -0.495846 0.139706 + 1.97356 0.409 -0.769973 0.951985 -0.185096 0.243854 + 1.96402 0.330958 -0.8036 0.719105 -0.455412 0.524869 + 1.96047 0.238716 -0.887436 0.544927 -0.623345 0.560799 + 1.96125 0.164999 -0.98295 0.480761 -0.701365 0.526266 + 1.95846 0.09336 -1.08147 0.398876 -0.843646 0.359388 + 1.96385 0.434814 -0.723485 0.783438 -0.36088 0.505956 + 1.9379 0.44258 -0.694537 0.445 -0.519247 0.729628 + 1.93977 0.349149 -0.769906 0.383093 -0.609971 0.693668 + 1.93622 0.256907 -0.853742 0.176949 -0.707156 0.684558 + 1.93193 0.175897 -0.951427 0.113965 -0.791755 0.600113 + 1.93576 0.547198 -0.624538 0.428931 -0.455461 0.780111 + 1.9005 0.439095 -0.683499 -0.228906 -0.580071 0.781741 + 1.90237 0.345576 -0.758919 -0.242611 -0.669729 0.701857 + 1.9044 0.264829 -0.84866 -0.385373 -0.672833 0.631493 + 1.90011 0.183817 -0.946346 -0.403227 -0.72259 0.561491 + 1.89473 0.542755 -0.617445 -0.270596 -0.498903 0.823331 + 1.82821 0.591857 -0.65849 -0.743771 -0.37207 0.55531 + 1.83398 0.488284 -0.724495 -0.756749 -0.40291 0.514775 + 1.83552 0.40161 -0.795575 -0.767168 -0.449772 0.457338 + 1.83097 0.678666 -0.59585 -0.696655 -0.366538 0.616703 + 1.73189 0.688842 -0.755276 -0.88312 -0.268487 0.384726 + 1.73691 0.605799 -0.81344 -0.881337 -0.306718 0.359401 + 1.73845 0.519127 -0.884519 -0.848222 -0.325539 0.417785 + 1.83755 0.320778 -0.885367 -0.750635 -0.477231 0.456943 + 1.73465 0.775569 -0.692687 -0.905329 -0.20541 0.371734 + 1.69835 0.868144 -0.783033 -0.971914 0.0823167 0.22047 + 1.67673 0.798432 -0.840487 -0.95697 -0.0222398 0.289333 + 1.68175 0.715383 -0.898643 -0.920956 -0.192014 0.339072 + 1.69139 0.907156 -0.937606 -0.86201 0.1953 0.467757 + 1.64391 0.823498 -0.957905 -0.897776 0.0385864 0.438759 + 1.62864 0.74213 -1.01337 -0.908609 -0.141116 0.393086 + 1.66647 0.634013 -0.954109 -0.887547 -0.197212 0.416374 + 1.73373 0.435792 -0.954179 -0.823002 -0.366495 0.433992 + 1.66335 0.996747 -0.978581 -0.595002 -0.162131 0.787202 + 1.61587 0.913088 -0.998879 -0.716985 -0.0043455 0.697075 + 1.59302 0.838534 -1.04755 -0.841369 -0.174901 0.511379 + 1.61581 0.67097 -1.08032 -0.919365 -0.196055 0.341073 + 1.66176 0.550679 -1.02377 -0.893757 -0.258638 0.366475 + 1.56395 0.914514 -1.06795 -0.817058 -0.159239 0.55413 + 1.54895 0.846936 -1.1179 -0.832362 -0.242245 0.498488 + 1.58019 0.76737 -1.11449 -0.856175 -0.252863 0.450583 + 1.60549 0.600545 -1.15254 -0.907584 -0.23119 0.350488 + 1.51686 0.973193 -1.12178 -0.846371 -0.0954106 0.523978 + 1.50185 0.905609 -1.17173 -0.794253 -0.206077 0.571572 + 1.53037 0.782376 -1.18348 -0.767121 -0.279822 0.577257 + 1.56162 0.702814 -1.18007 -0.816341 -0.303426 0.491447 + 1.47412 0.841002 -1.21862 -0.731233 -0.211109 0.648638 + 1.49902 0.723297 -1.24875 -0.717535 -0.378423 0.584756 + 1.44277 0.781924 -1.2839 -0.700884 -0.320116 0.637407 + 1.46561 0.683379 -1.31781 -0.657722 -0.428735 0.619344 + 1.55015 0.641811 -1.25441 -0.787389 -0.377322 0.48749 + 1.59402 0.539542 -1.22688 -0.908403 -0.238131 0.343653 + 1.65143 0.480345 -1.09594 -0.885784 -0.269028 0.378167 + 1.39914 0.743891 -1.34262 -0.661716 -0.339201 0.668636 + 1.41728 0.657188 -1.38505 -0.633818 -0.499654 0.590441 + 1.51673 0.601888 -1.32347 -0.718708 -0.40455 0.565507 + 1.57501 0.491937 -1.30862 -0.85682 -0.216954 0.46775 + 1.63884 0.413147 -1.17516 -0.883952 -0.289295 0.367339 + 1.35082 0.717703 -1.40986 -0.659248 -0.463665 0.591952 + 1.36445 0.647105 -1.45278 -0.645063 -0.510812 0.568299 + 1.47172 0.58636 -1.39737 -0.693542 -0.477079 0.53981 + 1.52999 0.476495 -1.38248 -0.822814 -0.331198 0.461827 + 1.61983 0.365541 -1.2569 -0.869424 -0.356363 0.34221 + 1.21154 0.769462 -1.53291 -0.730088 -0.589616 0.345433 + 1.29789 0.714715 -1.48249 -0.688886 -0.481824 0.541555 + 1.41889 0.576279 -1.46511 -0.645059 -0.497596 0.579911 + 1.49544 0.45761 -1.46457 -0.751038 -0.351266 0.559065 + 1.16249 0.822434 -1.57186 -0.836205 -0.343661 0.427386 + 1.17212 0.792308 -1.63148 -0.828446 -0.447297 0.337049 + 1.12307 0.845368 -1.67038 -0.836426 -0.447318 0.316699 + 1.09485 0.870919 -1.70684 -0.80139 -0.493808 0.337534 + 1.43477 0.463087 -1.52806 -0.727208 -0.445268 0.522402 + 1.57685 0.307882 -1.43463 -0.788277 -0.459401 0.409352 + 1.6114 0.326762 -1.35253 -0.831172 -0.443992 0.334699 + 1.69386 0.205535 -1.30996 -0.792732 -0.537131 0.288213 + 1.70229 0.244309 -1.21432 -0.797824 -0.506063 0.327684 + 1.55043 0.284485 -1.52791 -0.764261 -0.500115 0.407174 + 1.64693 0.15814 -1.50387 -0.716971 -0.606196 0.344208 + 1.67335 0.181537 -1.41059 -0.762058 -0.56271 0.32035 + 1.79129 0.099711 -1.27507 -0.711496 -0.635652 0.299535 + 1.74022 0.073938 -1.48243 -0.65837 -0.709218 0.252109 + 1.77078 0.075799 -1.37565 -0.693189 -0.677378 0.246269 + 1.86011 0.040048 -1.25573 -0.455616 -0.847977 0.27083 + 1.80779 0.132344 -1.16719 -0.712253 -0.610894 0.345694 + 1.70267 0.06714 -1.57905 -0.601434 -0.748713 0.278758 + 1.76223 0.029679 -1.57477 -0.345 -0.931193 0.117703 + 1.80415 0.023321 -1.47176 -0.389471 -0.915324 0.102441 + 1.83471 0.025187 -1.36499 -0.440512 -0.879021 0.182404 + 1.79512 0.025571 -1.58045 0.106565 -0.985244 -0.133933 + 1.83704 0.019212 -1.47744 0.12631 -0.988382 -0.0845405 + 1.86908 0.015865 -1.36964 0.126595 -0.990912 0.0454667 + 1.89448 0.030728 -1.26038 0.0266796 -0.98352 0.178819 + 1.77127 0.05782 -1.70511 0.358809 -0.895134 -0.264559 + 1.8215 0.041109 -1.60877 0.441333 -0.846886 -0.296662 + 1.8638 0.034655 -1.50779 0.509336 -0.82995 -0.227507 + 1.89584 0.03122 -1.40004 0.543211 -0.827716 -0.140745 + 1.72048 0.064447 -1.80299 0.355504 -0.906246 -0.22877 + 1.78786 0.081215 -1.75983 0.604423 -0.718133 -0.344902 + 1.83784 0.07849 -1.66291 0.696546 -0.612632 -0.373504 + 1.88013 0.072038 -1.56194 0.766398 -0.552423 -0.327815 + 1.91872 0.068677 -1.45832 0.838603 -0.4831 -0.251711 + 1.73707 0.087843 -1.85771 0.551596 -0.767886 -0.325718 + 1.72202 0.125014 -1.9457 0.802322 -0.412461 -0.431457 + 1.76963 0.12724 -1.84895 0.854101 -0.297045 -0.426937 + 1.81961 0.124515 -1.75203 0.856929 -0.288681 -0.427008 + 1.86571 0.123374 -1.65405 0.882445 -0.269715 -0.385415 + 1.66667 0.12824 -2.04308 0.835569 -0.388266 -0.388681 + 1.6716 0.181256 -2.06591 0.873684 -0.292629 -0.388645 + 1.71921 0.18357 -1.96911 0.881119 -0.203479 -0.42688 + 1.76707 0.188831 -1.87443 0.880938 -0.198953 -0.429379 + 1.81318 0.18769 -1.77645 0.882777 -0.183771 -0.432358 + 1.73059 0.259704 -1.99498 0.863772 -0.295049 -0.408466 + 1.76911 0.263281 -1.91358 0.870296 -0.266004 -0.414521 + 1.86033 0.185653 -1.68272 0.908296 -0.134305 -0.396183 + 1.90429 0.120099 -1.55038 0.905735 -0.239975 -0.349366 + 1.94675 0.0711 -1.35412 0.780844 -0.586923 -0.214018 + 1.73522 0.35624 -2.06279 0.90498 -0.19652 -0.377347 + 1.76987 0.348244 -1.97034 0.911582 -0.16943 -0.374581 + 1.81627 0.261243 -1.81985 0.883376 -0.231303 -0.407609 + 1.89912 0.177033 -1.58179 0.882229 -0.23454 -0.408245 + 1.94308 0.111478 -1.44945 0.843749 -0.440494 -0.306679 + 1.97217 0.063662 -1.24623 0.807091 -0.590304 -0.012087 + 1.92387 0.033643 -1.29584 0.411073 -0.910514 -0.0445405 + 1.91655 0.057357 -1.15051 0.0733815 -0.934442 0.348472 + 1.94593 0.060274 -1.18596 0.422043 -0.884609 0.198362 + 1.92914 0.104259 -1.04994 -0.00254531 -0.856029 0.516921 + 1.87661 0.072687 -1.14786 -0.494284 -0.785778 0.3718 + 1.8892 0.11967 -1.04724 -0.482991 -0.733323 0.478495 + 1.8204 0.18254 -1.07113 -0.722261 -0.552088 0.416578 + 1.71489 0.294507 -1.11826 -0.79533 -0.443032 0.413731 + 1.83131 0.24669 -0.970242 -0.734923 -0.511781 0.444935 + 1.72749 0.361699 -1.03904 -0.810573 -0.397433 0.430138 + 1.38447 1.12618 -1.96176 -0.114715 0.985001 -0.128893 + 1.38749 1.12929 -1.92676 -0.278228 0.957846 -0.0715501 + 1.35051 1.13018 -1.8595 -0.258671 0.963354 -0.070976 + 1.35498 1.13465 -1.76183 -0.680226 0.730672 0.0583947 + 1.33 1.12081 -1.96346 -0.159644 0.984173 -0.0769253 + 1.33303 1.12393 -1.92846 -0.213748 0.975039 -0.0600933 + 1.32053 1.12089 -1.905 -0.453605 0.888262 0.0723449 + 1.33802 1.12715 -1.83604 -0.750727 0.65288 0.100786 + 1.28648 1.11256 -1.96577 -0.249703 0.968222 0.0139225 + 1.30604 1.11478 -1.92621 -0.346332 0.93557 0.0690164 + 1.26087 1.10138 -1.96022 -0.254065 0.942033 0.219144 + 1.28043 1.1036 -1.92066 -0.277523 0.956721 0.0875538 + 1.32299 1.11005 -1.85383 -0.422881 0.901229 0.0946451 + 1.33748 1.11624 -1.83255 -0.784888 0.605502 0.131596 + 1.3456 1.12534 -1.78452 -0.939363 0.316012 0.133168 + 1.18596 1.09 -1.9349 -0.0767119 0.994353 0.0733291 + 1.22858 1.09393 -1.9143 -0.137347 0.989618 0.0423287 + 1.25696 1.09743 -1.88518 -0.170066 0.985021 0.0284881 + 1.29951 1.1038 -1.8184 -0.213624 0.97669 0.0209931 + 1.34507 1.11445 -1.78104 -0.769977 0.632049 0.0874601 + 1.18366 1.08628 -1.81346 -0.0815065 0.996623 -0.00999 + 1.21204 1.08971 -1.78439 -0.116009 0.993231 -0.00582218 + 1.22826 1.0919 -1.7346 -0.115033 0.993305 -0.0106372 + 1.31574 1.10599 -1.7686 -0.215214 0.97637 0.019584 + 1.35105 1.11454 -1.69881 -0.579294 0.815113 -0.00308249 + 1.22871 1.09286 -1.69385 -0.305127 0.94344 0.129688 + 1.32172 1.1061 -1.68638 -0.24173 0.970171 -0.0182939 + 1.36043 1.12385 -1.67613 -0.643485 0.764167 0.0444444 + 1.38231 1.15154 -1.69029 -0.711543 0.702625 -0.00493221 + 1.20826 1.07264 -1.66304 -0.415146 0.859061 0.299444 + 1.31783 1.10964 -1.60512 -0.369736 0.927105 0.0614085 + 1.32217 1.10705 -1.64564 -0.22033 0.973962 -0.053412 + 1.36011 1.12005 -1.63475 -0.590569 0.805355 -0.0513001 + 1.24022 1.02623 -1.52285 -0.478502 0.862266 0.165929 + 1.29738 1.08942 -1.5743 -0.56295 0.792059 0.236071 + 1.33367 1.11267 -1.54156 -0.77242 0.604664 -0.194292 + 1.35577 1.12264 -1.59423 -0.659742 0.738045 -0.14153 + 1.38199 1.14774 -1.6489 -0.816197 0.573819 -0.0674902 + 1.18976 1.00904 -1.53268 -0.0624446 0.995592 0.0699848 + 1.27652 1.04939 -1.49016 -0.700979 0.70817 -0.0844012 + 1.1173 1.02629 -1.55774 0.294382 0.932429 -0.209558 + 1.36149 1.14219 -1.57689 -0.863237 0.418501 -0.282274 + -1.70337 1.98922 -1.07579 0.891611 0.0298264 0.451819 + -1.6801 1.96255 -1.12801 0.952713 0.0524449 0.299312 + -1.68994 2.0633 -1.1131 0.938931 0.0320593 0.34261 + -1.72145 2.09212 -1.04902 0.901242 0.00129184 0.433315 + -1.72998 1.82017 -1.02458 0.804155 0.0712945 0.590129 + -1.67403 1.97548 -1.1624 0.979369 0.0811721 0.185062 + -1.68707 2.10694 -1.1277 0.975783 0.0546045 0.211815 + -1.7066 2.25074 -1.08775 0.96142 0.0621275 0.267977 + -1.70947 2.207 -1.0732 0.933052 0.0165296 0.359362 + -1.66549 1.89627 -1.1742 0.963879 0.0805039 0.253882 + -1.68761 2.15846 -1.15573 0.98872 0.0635271 0.135634 + -1.70018 2.27683 -1.12034 0.973309 0.0739352 0.217262 + -1.73003 2.38788 -1.0561 0.974417 0.106487 0.19792 + -1.73501 2.3795 -1.01098 0.961666 0.0476262 0.270056 + -1.74699 2.26462 -0.986805 0.885762 -0.0339763 0.462894 + -1.74805 1.92307 -0.997825 0.783753 0.0445339 0.619474 + -1.7916 1.75351 -0.929734 0.771075 0.182649 0.609985 + -1.72361 2.41406 -1.08864 0.944074 0.0660568 0.323049 + -1.73941 2.52038 -1.0578 0.950436 0.0423528 0.308022 + -1.74771 2.50862 -1.02162 0.979238 0.0813547 0.185672 + -1.71219 2.43192 -1.11818 0.98004 0.110151 0.165491 + -1.728 2.53833 -1.08728 0.985819 0.104593 0.131228 + -1.74105 2.63265 -1.05765 0.984489 0.129136 0.118763 + -1.75246 2.61995 -1.02745 0.950897 0.0438008 0.306393 + -1.76075 2.60818 -0.991272 0.972825 0.0989987 0.20931 + -1.69968 2.35382 -1.15051 0.993282 0.10702 0.0440168 + -1.70418 2.37334 -1.1703 0.985378 0.154616 -0.0715803 + -1.7167 2.45151 -1.13791 0.853954 0.272302 -0.443412 + -1.7312 2.54263 -1.10692 0.847461 0.271339 -0.456272 + -1.68711 2.23536 -1.18593 0.992992 0.0891708 -0.0775557 + -1.69619 2.27211 -1.20117 0.564763 0.283507 -0.775027 + -1.69337 2.12496 -1.24211 0.64998 0.232885 -0.723388 + -1.7067 2.15597 -1.23462 -0.279038 0.259524 -0.924546 + -1.71276 2.24476 -1.2068 -0.407443 0.252831 -0.877535 + -1.72075 2.34607 -1.17588 -0.389299 0.227154 -0.892663 + -1.70418 2.37334 -1.1703 -0.226178 0.325351 -0.918145 + -1.69304 2.04842 -1.26673 0.635359 0.313566 -0.705688 + -1.70637 2.07934 -1.25929 -0.253434 0.304553 -0.91816 + -1.75185 2.08692 -1.21682 -0.667682 0.212853 -0.713369 + -1.75791 2.17579 -1.18895 -0.668498 0.198866 -0.716632 + -1.76262 2.26646 -1.1568 -0.705615 0.16858 -0.68825 + -1.70174 1.99203 -1.29306 -0.152096 0.337167 -0.929078 + -1.73589 1.91402 -1.28954 -0.633696 0.238057 -0.736042 + -1.74052 2.00132 -1.25576 -0.665436 0.235665 -0.708278 + -1.8141 1.95582 -1.19674 -0.771143 0.175993 -0.611854 + -1.83533 2.04016 -1.14442 -0.805799 0.167127 -0.568117 + -1.69013 1.89667 -1.32589 -0.182584 0.357967 -0.915709 + -1.73367 1.82544 -1.32353 -0.632928 0.274196 -0.724029 + -1.7962 1.78133 -1.27253 -0.774322 0.200739 -0.600107 + -1.80276 1.87013 -1.23573 -0.774089 0.18849 -0.604365 + -1.88335 1.79572 -1.12164 -0.880744 0.124553 -0.456921 + -1.73005 1.73866 -1.36081 -0.654207 0.279361 -0.70283 + -1.79399 1.69277 -1.30653 -0.783721 0.223039 -0.579685 + -1.87107 1.61838 -1.20367 -0.874201 0.181608 -0.450324 + -1.87763 1.70717 -1.16687 -0.875535 0.149056 -0.459588 + -1.73301 1.64749 -1.3925 -0.6948 0.283038 -0.661168 + -1.8073 1.59501 -1.329 -0.790297 0.234706 -0.565988 + -1.88805 1.42946 -1.26487 -0.863437 0.198477 -0.46377 + -1.87474 1.52722 -1.2424 -0.870276 0.218614 -0.441393 + -1.81026 1.50393 -1.36065 -0.785988 0.211472 -0.58095 + -1.88883 1.33387 -1.29629 -0.84692 0.174672 -0.502211 + -1.9662 1.25106 -1.18427 -0.897676 0.174362 -0.404693 + -1.96847 1.33642 -1.13131 -0.9132 0.196119 -0.357215 + -1.96479 1.42748 -1.09262 -0.917288 0.211393 -0.337485 + -1.81855 1.40599 -1.38161 -0.810558 0.216017 -0.544364 + -1.89712 1.23594 -1.31727 -0.861848 0.154234 -0.483145 + -1.96698 1.15547 -1.2157 -0.874299 0.0864331 -0.477629 + -2.02124 1.12376 -1.10058 -0.940833 0.106489 -0.321703 + -1.81903 1.31935 -1.42054 -0.833639 0.232664 -0.500913 + -1.89403 1.14413 -1.35127 -0.899525 0.167263 -0.403581 + -1.95399 1.05227 -1.23915 -0.886003 0.0653478 -0.459051 + -1.99703 0.929877 -1.17096 -0.922634 0.0143854 -0.385408 + -2.01002 1.03308 -1.14751 -0.91261 0.0244684 -0.408099 + -1.82824 1.22532 -1.44989 -0.858232 0.238178 -0.454653 + -1.90324 1.05011 -1.38061 -0.920302 0.164658 -0.35487 + -1.95089 0.960473 -1.27315 -0.928163 0.0991291 -0.35873 + -1.82453 1.14454 -1.50056 -0.860847 0.22471 -0.45656 + -1.88766 0.978483 -1.44294 -0.908312 0.134507 -0.396077 + -1.93121 0.894901 -1.34518 -0.937381 0.0888712 -0.336777 + -1.95983 0.77573 -1.29557 -0.944314 0.050614 -0.32513 + -1.97952 0.841297 -1.22353 -0.9431 0.0422474 -0.329815 + -1.80562 1.07001 -1.56648 -0.869394 0.219808 -0.442537 + -1.86874 0.903956 -1.50886 -0.912923 0.118603 -0.39052 + -1.91563 0.823277 -1.40752 -0.929996 0.0592713 -0.362761 + -1.69567 1.18769 -1.7125 -0.854825 0.305633 -0.419359 + -1.79295 1.00322 -1.6328 -0.886963 0.221574 -0.405219 + -1.84544 0.846043 -1.58295 -0.922975 0.113518 -0.367737 + -1.88919 0.755559 -1.47603 -0.931817 0.0420228 -0.360486 + -1.69378 1.11793 -1.77487 -0.869063 0.308485 -0.386737 + -1.7691 0.950287 -1.71131 -0.900283 0.221805 -0.374558 + -1.82158 0.793109 -1.66147 -0.935243 0.129371 -0.32952 + -1.86589 0.69756 -1.55017 -0.945273 0.0597576 -0.320763 + -1.91065 0.635231 -1.43262 -0.939002 0.0160366 -0.343539 + -1.6801 1.06513 -1.84902 -0.881764 0.323823 -0.342974 + -1.75542 0.897488 -1.78546 -0.914065 0.225605 -0.337028 + -1.79718 0.760102 -1.7523 -0.93734 0.141684 -0.318307 + -1.84155 0.660377 -1.63517 -0.952917 0.0749478 -0.293824 + -1.67836 1.00534 -1.91987 -0.899867 0.312027 -0.304759 + -1.7298 0.86485 -1.87113 -0.924424 0.217459 -0.313292 + -1.77156 0.727377 -1.83802 -0.938751 0.181689 -0.292807 + -1.81715 0.627372 -1.726 -0.960318 0.10939 -0.25656 + -1.86197 0.542246 -1.59496 -0.958595 0.0820601 -0.272693 + -1.6628 0.974096 -1.99975 -0.911455 0.30585 -0.275147 + -1.71425 0.833595 -1.95099 -0.936695 0.225613 -0.267771 + -1.74214 0.723213 -1.93861 -0.939716 0.203829 -0.274566 + -1.78979 0.627846 -1.84862 -0.954913 0.155289 -0.253033 + -1.63031 1.05278 -2.00703 -0.79804 0.48585 -0.356486 + -1.65644 0.92519 -2.07784 -0.917015 0.295446 -0.267945 + -1.68686 0.842111 -2.04174 -0.941348 0.222886 -0.253348 + -1.71475 0.731724 -2.02935 -0.943961 0.179191 -0.277177 + -1.76037 0.623595 -1.94926 -0.9418 0.144527 -0.303522 + -1.62395 1.00388 -2.08513 -0.802861 0.474627 -0.360754 + -1.60888 0.957783 -2.17709 -0.788335 0.493322 -0.367644 + -1.63942 0.904651 -2.16327 -0.898923 0.326404 -0.292229 + -1.66984 0.821567 -2.12716 -0.946163 0.21842 -0.238889 + -1.6034 1.00377 -2.11935 -0.690982 0.596727 -0.407997 + -1.55387 1.00544 -2.20244 -0.617303 0.669101 -0.413813 + -1.59304 0.919411 -2.25863 -0.775756 0.500543 -0.384263 + -1.62358 0.866281 -2.2448 -0.878785 0.366838 -0.305233 + -1.46671 1.04008 -2.25685 -0.389992 0.848392 -0.357962 + -1.52471 0.991998 -2.27056 -0.612036 0.677482 -0.407958 + -1.56387 0.906056 -2.3267 -0.721933 0.548584 -0.421745 + -1.60236 0.841891 -2.33416 -0.83178 0.403929 -0.380766 + -1.65077 0.820142 -2.21909 -0.926539 0.292141 -0.237023 + -1.37522 1.05239 -2.28095 -0.277282 0.920443 -0.2755 + -1.35936 1.03642 -2.36629 -0.38834 0.884189 -0.259619 + -1.43014 0.994897 -2.38438 -0.483021 0.803818 -0.347228 + -1.48814 0.946809 -2.39809 -0.644772 0.656604 -0.391332 + -1.53679 0.879425 -2.40737 -0.736605 0.535769 -0.412752 + -1.30013 1.0588 -2.37107 -0.413034 0.903358 -0.115531 + -1.27743 1.06971 -2.41596 -0.596696 0.798163 -0.0830052 + -1.32284 1.02151 -2.47507 -0.523589 0.830042 -0.192055 + -1.39362 0.979989 -2.49315 -0.564237 0.774675 -0.285509 + -1.45177 0.922027 -2.49836 -0.688375 0.625886 -0.366615 + -1.27948 1.08729 -2.31361 -0.477194 0.853377 -0.209844 + -1.26248 1.08908 -2.34071 -0.50428 0.835202 -0.219407 + -1.24392 1.09539 -2.36524 -0.612632 0.790124 -0.0196539 + -1.28157 1.06511 -2.39559 -0.386614 0.920236 0.0607796 + -1.31626 1.08384 -2.24124 -0.539697 0.832647 -0.1242 + -1.27975 1.09644 -2.26906 -0.373528 0.917056 -0.139588 + -1.25706 1.10469 -2.26695 -0.51825 0.850804 -0.0868846 + -1.2456 1.11119 -2.3016 -0.55435 0.813754 -0.174641 + -1.22861 1.11298 -2.32871 -0.526312 0.826119 -0.201303 + -1.28398 1.0983 -2.21747 -0.327419 0.944631 -0.0216478 + -1.22424 1.13141 -2.28583 -0.415646 0.902694 -0.111275 + -1.20242 1.13319 -2.31351 -0.397821 0.913572 -0.0844049 + -1.21181 1.12119 -2.34793 -0.623263 0.78189 0.0138067 + -1.24071 1.1016 -2.37999 -0.671903 0.734678 0.0937815 + -1.23658 1.10612 -2.40041 -0.662028 0.74935 0.0139587 + -1.18562 1.14149 -2.33268 -0.565484 0.814708 0.128369 + -1.2086 1.12749 -2.36263 -0.658181 0.741127 0.132398 + -1.19759 1.13864 -2.37475 -0.645347 0.760108 0.0759098 + -1.20962 1.1297 -2.39806 -0.654382 0.755825 0.0226384 + -1.22658 1.11436 -2.44609 -0.68521 0.725387 -0.0655798 + -1.17383 1.1383 -2.28255 -0.194727 0.971349 0.136242 + -1.1585 1.1462 -2.29345 -0.472865 0.828992 0.298616 + -1.16163 1.16328 -2.33763 -0.504202 0.826222 0.251274 + -1.15063 1.17453 -2.34971 -0.36474 0.873196 0.323253 + -1.19565 1.13651 -2.25487 -0.109197 0.982267 0.152406 + -1.13323 1.12325 -2.19868 -0.202951 0.936813 0.284941 + -1.08239 1.17791 -2.33317 0.0467369 0.985681 0.162016 + -1.12323 1.18488 -2.35804 -0.121405 0.97306 0.195995 + -1.15926 1.17136 -2.38481 -0.514572 0.856113 0.0478178 + -1.1713 1.16232 -2.40817 -0.65713 0.753116 0.0315561 + -1.19962 1.13795 -2.44375 -0.663176 0.748434 0.00659296 + -0.968399 1.15384 -2.29328 0.202304 0.95554 0.214516 + -1.04735 1.17306 -2.38357 0.140036 0.988195 0.0621329 + -1.08819 1.18004 -2.40845 0.127357 0.990857 -0.044536 + -1.13186 1.18171 -2.39315 -0.167956 0.985579 -0.0206364 + -1.15944 1.1735 -2.41832 -0.511552 0.856371 0.0703066 + -0.936631 1.15101 -2.30577 0.419649 0.881265 0.217411 + -0.955186 1.16676 -2.38306 0.358932 0.930285 0.0757467 + -1.01558 1.17032 -2.39601 0.0984417 0.990638 0.0945756 + -0.932578 1.14581 -2.36357 0.836361 0.547373 -0.029708 + -0.931757 1.14517 -2.41466 0.816887 0.576744 0.00785208 + -0.959034 1.1691 -2.41991 0.352482 0.933536 -0.0653192 + -1.01943 1.17257 -2.43292 0.1906 0.981061 0.03452 + -1.04987 1.18209 -2.46681 0.143806 0.979138 0.143559 + -0.920012 1.10707 -2.34487 0.991735 0.123413 0.0350695 + -0.919192 1.10644 -2.39597 0.958062 0.285307 0.0267738 + -0.925154 1.13651 -2.44707 0.83272 0.530471 0.158676 + -0.952431 1.16044 -2.45231 0.437461 0.897856 -0.0498172 + -0.98287 1.16997 -2.4862 0.271842 0.94942 0.157177 + -0.929802 1.09338 -2.29976 0.987913 -0.148206 0.0454186 + -0.923815 1.03796 -2.30816 0.980927 0.0807736 0.176798 + -0.914026 1.05165 -2.35327 0.97129 0.111056 0.210386 + -0.909485 1.07044 -2.39242 0.975036 0.202639 0.0907886 + -0.914214 1.0936 -2.44394 0.951115 0.251325 0.179487 + -0.913802 0.9689 -2.31155 0.976617 0.0560245 0.207558 + -0.898638 0.993068 -2.38241 0.972779 0.0847546 0.215679 + -0.894097 1.01186 -2.42156 0.947415 0.250139 0.199586 + -0.904507 1.05752 -2.44045 0.951095 0.272874 0.144766 + -0.915551 0.821097 -2.30175 0.967868 -0.0135223 0.251094 + -0.900387 0.845177 -2.37266 0.968886 0.00923174 0.247334 + -0.882188 1.00437 -2.45918 0.947986 0.167926 0.270412 + -0.892598 1.05003 -2.47807 0.902205 0.273671 0.333364 + -0.900778 1.09393 -2.4795 0.903358 0.217654 0.369556 + -0.914433 0.563609 -2.32156 0.899078 -0.127257 0.418884 + -0.876889 1.05242 -2.5152 0.889144 0.246558 0.385527 + -0.967405 0.395445 -2.30669 0.570663 -0.556743 0.60364 + -1.04052 0.334882 -2.34079 0.619429 -0.682168 0.388528 + -1.11079 0.244901 -2.36655 0.703855 -0.607116 0.368781 + -1.17036 0.148551 -2.40006 0.66486 -0.649604 0.368748 + -1.12487 0.148312 -2.48305 0.663812 -0.645286 0.3781 + -1.1865 0.076404 -2.5217 0.517336 -0.79615 0.313861 + -1.21585 0.15262 -2.31431 0.638596 -0.65645 0.401583 + -1.27615 0.086092 -2.34228 0.554654 -0.766439 0.323928 + -1.23066 0.082109 -2.42798 0.534141 -0.789679 0.301829 + -1.31981 0.091549 -2.24473 0.59906 -0.735708 0.316007 + -1.33237 0.04906 -2.35634 0.443284 -0.863344 0.241114 + -1.29002 0.043919 -2.45923 0.419095 -0.877292 0.23392 + -1.24587 0.0383 -2.5529 0.392885 -0.888393 0.237485 + -1.37603 0.054431 -2.25884 0.463887 -0.856336 0.226932 + -1.4169 0.033245 -2.26275 0.208912 -0.972733 0.100728 + -1.36682 0.030486 -2.36717 0.198967 -0.971232 0.130842 + -1.32447 0.025344 -2.47006 0.277403 -0.945532 0.170342 + -1.27791 0.019255 -2.57732 0.259595 -0.951121 0.167271 + -1.46302 0.031072 -2.16318 0.15235 -0.983932 0.0930932 + -1.42859 0.03363 -2.26721 -0.223407 -0.967988 -0.114405 + -1.37851 0.030783 -2.37168 -0.268104 -0.959969 -0.0811185 + -1.33261 0.023419 -2.47613 -0.196511 -0.980076 -0.0288872 + -1.28605 0.01733 -2.58338 -0.195131 -0.980299 -0.0306362 + -1.51392 0.035698 -2.0638 0.120761 -0.986976 0.106278 + -1.4868 0.035107 -2.16957 -0.297794 -0.946035 -0.127816 + -1.50602 0.052899 -2.20699 -0.437889 -0.86945 -0.228715 + -1.44781 0.051335 -2.30468 -0.456397 -0.858905 -0.232344 + -1.4009 0.050985 -2.40587 -0.516667 -0.83205 -0.201862 + -1.5377 0.03982 -2.07013 -0.282159 -0.955628 -0.0846247 + -1.55839 0.054865 -2.10739 -0.4377 -0.878496 -0.191476 + -1.52924 0.081407 -2.26176 -0.515163 -0.808473 -0.284568 + -1.48243 0.090151 -2.36191 -0.534614 -0.795466 -0.285344 + -1.43552 0.089799 -2.4631 -0.611384 -0.749514 -0.253845 + -1.59725 0.050773 -1.9709 -0.287284 -0.9526 -0.100105 + -1.61793 0.06573 -2.00821 -0.471077 -0.85864 -0.202049 + -1.5816 0.083373 -2.16217 -0.614495 -0.742501 -0.266625 + -1.53613 0.121343 -2.34574 -0.66917 -0.663885 -0.333867 + -1.67245 0.068455 -1.90453 -0.430918 -0.87444 -0.222854 + -1.62721 0.088345 -2.05878 -0.626175 -0.728733 -0.277223 + -1.62369 0.123851 -2.14248 -0.809031 -0.485348 -0.331521 + -1.57809 0.118879 -2.24587 -0.749995 -0.579813 -0.318315 + -1.68172 0.091068 -1.9551 -0.595255 -0.735456 -0.32369 + -1.66666 0.12824 -2.04308 -0.755778 -0.53652 -0.375428 + -1.59088 0.16895 -2.26439 -0.908197 -0.257935 -0.329617 + -1.55774 0.164852 -2.3651 -0.857896 -0.397119 -0.326055 + -1.51578 0.167229 -2.46501 -0.778409 -0.505108 -0.372754 + -1.73708 0.087843 -1.85771 -0.537741 -0.776549 -0.328338 + -1.72202 0.125014 -1.9457 -0.804256 -0.413509 -0.426828 + -1.63385 0.173256 -2.16505 -0.892198 -0.284677 -0.35063 + -1.57455 0.233216 -2.3713 -0.897305 -0.314701 -0.309528 + -1.78785 0.081215 -1.75983 -0.602447 -0.714889 -0.354953 + -1.76961 0.12724 -1.84895 -0.848033 -0.313932 -0.42695 + -1.6716 0.181256 -2.06591 -0.907151 -0.163127 -0.3879 + -1.64677 0.245073 -2.17824 -0.906566 -0.262149 -0.330782 + -1.60902 0.237071 -2.27738 -0.899618 -0.300264 -0.317062 + -1.83783 0.078495 -1.66292 -0.731957 -0.578616 -0.359781 + -1.81959 0.124515 -1.75203 -0.857016 -0.289019 -0.426605 + -1.71919 0.183482 -1.96917 -0.880981 -0.203089 -0.427348 + -1.88014 0.072038 -1.56194 -0.767076 -0.55394 -0.323643 + -1.8657 0.123287 -1.6541 -0.906288 -0.185652 -0.379704 + -1.76705 0.188831 -1.87443 -0.883857 -0.186407 -0.42901 + -1.73059 0.259704 -1.99498 -0.864404 -0.295783 -0.406593 + -1.68272 0.254356 -2.08972 -0.885282 -0.269026 -0.379342 + -1.91872 0.068677 -1.45832 -0.824943 -0.501848 -0.260033 + -1.90428 0.120012 -1.55043 -0.904734 -0.239795 -0.352072 + -1.81316 0.187605 -1.7765 -0.883902 -0.18487 -0.429582 + -1.94676 0.071188 -1.35406 -0.78137 -0.592719 -0.195308 + -1.94308 0.111483 -1.44946 -0.918032 -0.263003 -0.296726 + -1.86032 0.185567 -1.68277 -0.889791 -0.216255 -0.401877 + -1.8163 0.261243 -1.81985 -0.884339 -0.231715 -0.40528 + -1.76915 0.263281 -1.91358 -0.857215 -0.303184 -0.416248 + -1.97218 0.063662 -1.24623 -0.657513 -0.749939 -0.0725779 + -1.9685 0.104044 -1.34157 -0.931463 -0.290266 -0.219367 + -1.89912 0.177033 -1.58179 -0.88379 -0.23562 -0.404226 + -1.98469 0.096754 -1.14175 -0.856678 -0.494602 0.146529 + -1.99175 0.109062 -1.23506 -0.921411 -0.378697 -0.0871208 + -1.94276 0.159406 -1.48706 -0.867182 -0.354308 -0.349945 + -1.89862 0.235611 -1.62845 -0.922587 -0.0831037 -0.376731 + -1.85498 0.253237 -1.72318 -0.875598 -0.250563 -0.412973 + -1.9815 0.146589 -1.03387 -0.756034 -0.578494 0.306198 + -1.98856 0.158812 -1.12723 -0.994374 -0.0986883 0.0384729 + -1.96601 0.164424 -1.38056 -0.968948 -0.093475 -0.228914 + -1.98072 0.220307 -0.938348 -0.877316 -0.356528 0.321254 + -1.99281 0.211628 -1.03391 -0.984552 -0.147455 0.0944188 + -1.99355 0.170473 -1.28383 -0.875953 -0.46704 -0.120749 + -1.96 0.235677 -1.42637 -0.96396 0.0753148 -0.255163 + -1.93247 0.229627 -1.52309 -0.954284 0.00366101 -0.29888 + -1.97373 0.305144 -0.85009 -0.949834 -0.192936 0.246152 + -1.98581 0.296467 -0.94566 -0.99183 -0.0657703 0.109308 + -1.9978 0.223203 -1.19056 -0.999247 0.00558986 -0.0383945 + -1.96385 0.434813 -0.723484 -0.791408 -0.351018 0.500459 + -1.97356 0.409 -0.769972 -0.951961 -0.184389 0.244482 + -1.98427 0.380217 -0.861719 -0.98546 -0.111371 0.128314 + -1.99895 0.286242 -1.09275 -0.999664 -0.024943 0.00706155 + -1.96171 0.539431 -0.653485 -0.792064 -0.315157 0.522792 + -1.97703 0.517646 -0.708553 -0.952197 -0.172335 0.252232 + -1.98773 0.488861 -0.800298 -0.986037 -0.11302 0.122301 + -1.9974 0.369992 -1.00881 -0.999786 -0.00325218 0.0204195 + -1.98028 0.326333 -1.23239 -0.978903 0.132828 -0.155258 + -1.96969 0.65733 -0.607494 -0.848082 -0.247574 0.468469 + -1.98501 0.635545 -0.662562 -0.948366 -0.174676 0.264745 + -1.99507 0.593357 -0.747888 -0.975685 -0.156634 0.153314 + -1.99419 0.452858 -0.919338 -0.999438 -0.0288507 0.0170785 + -1.97634 0.772609 -0.556763 -0.850695 -0.285233 0.441543 + -2.00529 0.764217 -0.656829 -0.94617 -0.206749 0.249032 + -2.01535 0.722029 -0.742154 -0.972116 -0.178315 0.152296 + -2.00153 0.557266 -0.866979 -0.993446 -0.109064 0.034209 + -1.9876 0.477829 -1.05719 -0.99718 -0.0037107 -0.0749563 + -1.95598 0.878317 -0.455052 -0.559245 -0.496608 0.663796 + -1.99349 0.882653 -0.514565 -0.861348 -0.334405 0.38243 + -2.02245 0.874262 -0.614633 -0.929341 -0.277309 0.243772 + -2.03629 0.845109 -0.720735 -0.947825 -0.255022 0.19129 + -2.01226 0.657475 -0.819343 -0.988316 -0.146658 0.0415088 + -1.93571 0.964666 -0.374015 -0.10366 -0.579508 0.808347 + -1.97703 0.986076 -0.393898 -0.676771 -0.503894 0.536723 + -2.01455 0.990413 -0.453411 -0.843885 -0.395258 0.362808 + -2.04627 0.984262 -0.563157 -0.915534 -0.322419 0.240508 + -2.06012 0.955113 -0.669267 -0.965758 -0.232337 0.115463 + -1.95968 1.0614 -0.304562 -0.286001 -0.63837 0.714623 + -2.001 1.0829 -0.324395 -0.703933 -0.524519 0.478913 + -2.0318 1.08707 -0.384218 -0.848563 -0.412 0.331958 + -2.06352 1.08092 -0.493969 -0.928484 -0.306902 0.209113 + -1.91534 1.03977 -0.321901 0.298187 -0.584626 0.754518 + -1.98842 1.15476 -0.231268 -0.359145 -0.62848 0.689947 + -2.0211 1.18058 -0.248185 -0.738508 -0.518872 0.430555 + -2.05189 1.18475 -0.308008 -0.827528 -0.457102 0.325968 + -1.85646 1.04292 -0.375555 0.795385 -0.19138 0.575096 + -1.94408 1.13313 -0.248607 0.194199 -0.601948 0.774562 + -2.01546 1.25513 -0.152315 -0.480432 -0.627259 0.612969 + -2.04814 1.28086 -0.169283 -0.702556 -0.559663 0.439536 + -1.89832 1.10095 -0.296262 0.585955 -0.505802 0.633104 + -1.92234 1.18614 -0.219013 0.693387 -0.377439 0.613804 + -1.96811 1.21832 -0.171359 0.0206645 -0.679714 0.733186 + -2.02483 1.34524 -0.069792 -0.399811 -0.633933 0.662027 + -1.86015 1.14351 -0.374978 0.923293 0.0230016 0.383408 + -1.88441 1.2047 -0.300965 0.937177 -0.0676176 0.34224 + -1.93698 1.27049 -0.155719 0.801202 -0.320647 0.505233 + -1.97748 1.30843 -0.088837 0.159109 -0.653027 0.740433 + -1.82658 1.23187 -0.486835 0.959575 0.0779347 0.270447 + -1.85085 1.29307 -0.412823 0.968752 0.0391377 0.244924 + -1.86885 1.35294 -0.337923 0.9799 0.00934479 0.199271 + -1.89905 1.28905 -0.237671 0.943557 -0.129305 0.304926 + -1.93585 1.35848 -0.080727 0.734889 -0.467839 0.490983 + -1.81146 1.33455 -0.567678 0.959934 0.109406 0.257987 + -1.84072 1.37809 -0.49529 0.959493 0.148617 0.239345 + -1.85872 1.43788 -0.420448 0.968057 0.219129 0.121856 + -1.88469 1.48434 -0.340922 0.960459 0.271951 0.0596735 + -1.87618 1.42189 -0.268346 0.99453 0.0176527 0.102947 + -1.84299 1.48933 -0.552965 0.905606 0.28427 0.314752 + -1.88307 1.51248 -0.474651 0.920278 0.342515 0.189135 + -1.90903 1.55894 -0.395126 0.913094 0.387587 0.126632 + -1.86867 1.56779 -0.586052 0.844163 0.453842 0.285335 + -1.91179 1.60975 -0.524332 0.884484 0.421175 0.200747 + -1.94178 1.60443 -0.321116 0.915049 0.402104 -0.0315978 + -1.89459 1.53524 -0.258873 0.950323 0.30069 -0.0804451 + -1.88608 1.47278 -0.186297 0.999663 -0.025758 -0.00321867 + -1.87313 1.63301 -0.700431 0.824208 0.475242 0.307937 + -1.92189 1.68619 -0.662742 0.874562 0.387361 0.291708 + -1.94454 1.65515 -0.450362 0.891517 0.426598 0.152355 + -1.97724 1.697 -0.383658 0.924263 0.375769 0.0673527 + -1.95085 1.65504 -0.247183 0.89539 0.435085 -0.0947499 + -1.83282 1.6809 -0.841971 0.806269 0.33302 0.488906 + -1.88157 1.734 -0.804341 0.79783 0.347586 0.492596 + -1.95459 1.72805 -0.596037 0.880661 0.420793 0.217645 + -1.8156 1.80599 -0.914837 0.738931 0.133514 0.66042 + -1.85829 1.83954 -0.872349 0.712938 0.172409 0.679702 + -1.92426 1.76755 -0.761844 0.804968 0.445729 0.391602 + -1.98855 1.76204 -0.532305 0.835529 0.513459 0.195577 + -1.77205 1.97564 -0.98287 0.710944 -0.0156977 0.703073 + -1.78843 2.05003 -0.946326 0.823193 -0.0835351 0.561582 + -1.82242 1.95205 -0.922019 0.597077 0.00829871 0.802141 + -1.93524 1.83504 -0.803141 0.833598 0.211904 0.510108 + -1.95822 1.80145 -0.698161 0.913507 0.240093 0.32842 + -1.76337 2.3391 -0.950211 0.922975 -0.0429746 0.382453 + -1.78249 2.30397 -0.901962 0.855773 -0.0775873 0.511501 + -1.81647 2.2059 -0.877697 0.814325 -0.118375 0.56821 + -1.89937 1.94763 -0.852761 0.777452 -0.0752609 0.624423 + -1.93269 1.9349 -0.794719 0.938156 -0.168714 0.302323 + -1.75957 2.46879 -0.943036 0.945399 0.0245559 0.324987 + -1.77868 2.43366 -0.894787 0.862175 -0.0345068 0.505434 + -1.83865 2.42426 -0.82771 0.70206 -0.0359695 0.711209 + -1.84979 2.19327 -0.819613 0.869369 -0.115066 0.480581 + -1.95567 1.90131 -0.689739 0.912627 -0.0905058 0.398649 + -1.75268 2.50016 -0.976565 0.9771 0.0824444 0.196159 + -1.77315 2.56887 -0.917576 0.924301 0.071436 0.374919 + -1.78795 2.61693 -0.89583 0.881218 0.0900881 0.464047 + -1.79348 2.48173 -0.873041 0.788265 0.0169569 0.615102 + -1.76627 2.60023 -0.951096 0.966019 0.119021 0.229435 + -1.78613 2.67697 -0.915407 0.927593 0.161559 0.336852 + -1.81909 2.66232 -0.855642 0.752669 0.107855 0.649505 + -1.86426 2.60485 -0.810302 0.721259 0.0397575 0.691524 + -1.78062 2.68492 -0.955583 0.956455 0.129544 0.261555 + -1.80134 2.74089 -0.909921 0.885734 0.219629 0.408947 + -1.81727 2.72244 -0.875169 0.830836 0.180625 0.52639 + -1.84106 2.75625 -0.851922 0.677954 0.368343 0.636162 + -1.76931 2.69654 -0.989714 0.936114 0.0566238 0.347108 + -1.79004 2.7526 -0.944002 0.908019 0.158139 0.387935 + -1.82513 2.77478 -0.886624 0.729699 0.436906 0.525979 + -1.7579 2.70925 -1.01992 0.963718 0.258817 0.0652807 + -1.77862 2.76509 -0.974238 0.90547 0.407531 0.118499 + -1.8052 2.79816 -0.938525 0.646307 0.729636 0.223426 + -1.81661 2.78567 -0.908291 0.743381 0.454403 0.490819 + -1.86775 2.79455 -0.86387 0.537195 0.581952 0.610535 + -1.74425 2.63695 -1.0773 0.626532 0.427098 -0.651955 + -1.76305 2.71127 -1.03682 0.463925 0.596348 -0.655089 + -1.78378 2.76702 -0.991191 0.395354 0.742639 -0.540539 + -1.80795 2.79902 -0.949217 0.187592 0.917222 -0.351445 + -1.74268 2.5277 -1.12287 -0.0488763 0.305199 -0.951034 + -1.76503 2.61621 -1.08778 -0.368311 0.31913 -0.873214 + -1.78383 2.69045 -1.04735 -0.444662 0.382017 -0.810147 + -1.80458 2.75174 -1.00111 -0.460354 0.477401 -0.74844 + -1.82875 2.78366 -0.959199 -0.561231 0.5448 -0.623067 + -1.72818 2.43651 -1.15392 0.0153373 0.273364 -0.961788 + -1.7724 2.45598 -1.10924 -0.734968 0.123263 -0.666804 + -1.79475 2.54449 -1.07414 -0.772937 0.107699 -0.625276 + -1.81161 2.64031 -1.02712 -0.822024 0.133012 -0.5537 + -1.83236 2.70152 -0.98093 -0.843192 0.116224 -0.524898 + -1.77005 2.3569 -1.13484 -0.715717 0.134452 -0.685326 + -1.83396 2.32389 -1.05426 -0.836003 0.121886 -0.535017 + -1.82428 2.46176 -1.03646 -0.845391 0.0969951 -0.525267 + -1.84113 2.55759 -0.989435 -0.879065 0.0968489 -0.46676 + -1.8688 2.64369 -0.913372 -0.89814 0.0772281 -0.432874 + -1.8316 2.22491 -1.07981 -0.843554 0.163224 -0.511638 + -1.89966 2.06103 -0.988568 -0.933401 0.14116 -0.329902 + -1.87904 2.2611 -0.990313 -0.876503 0.089622 -0.472981 + -1.86937 2.39898 -0.972513 -0.873943 0.123206 -0.470153 + -1.87537 2.47364 -0.941231 -0.880607 0.111525 -0.460536 + -1.84003 2.13082 -1.11226 -0.839926 0.195803 -0.506148 + -1.90809 1.96695 -1.02102 -0.932285 0.169191 -0.319717 + -1.9045 2.14994 -0.949971 -0.92276 0.0636023 -0.38009 + -1.90458 1.88014 -1.06926 -0.900005 0.118722 -0.419399 + -1.97308 1.77805 -0.900439 -0.955821 0.156521 -0.248812 + -1.96957 1.69115 -0.948727 -0.937747 0.132989 -0.32085 + -2.02579 1.55705 -0.839262 -0.947964 0.15376 -0.278787 + -1.96564 1.60198 -0.996678 -0.925672 0.134525 -0.353601 + -2.02186 1.46779 -0.887253 -0.943343 0.137763 -0.301869 + -2.06228 1.48826 -0.746906 -0.959362 0.133604 -0.248546 + -2.09122 1.45139 -0.640447 -0.974431 0.0962247 -0.20304 + -1.95992 1.51335 -1.04196 -0.923642 0.178625 -0.339085 + -2.02129 1.37888 -0.937849 -0.94504 0.182911 -0.271004 + -2.06073 1.38864 -0.790966 -0.960796 0.118039 -0.250875 + -2.08967 1.35177 -0.684508 -0.980061 0.065485 -0.187594 + -2.11859 1.4276 -0.499441 -0.983277 0.0389271 -0.177909 + -2.02617 1.29301 -0.988521 -0.947385 0.177116 -0.266628 + -2.06017 1.29964 -0.841612 -0.964425 0.136427 -0.226433 + -2.08309 1.26324 -0.753163 -0.979789 0.0907949 -0.17824 + -2.10357 1.35566 -0.589833 -0.988026 0.0150411 -0.153556 + -2.02351 1.20911 -1.04761 -0.944788 0.160515 -0.285676 + -2.05816 1.21379 -0.905509 -0.96694 0.130825 -0.21889 + -2.08108 1.17739 -0.817061 -0.987623 0.0473868 -0.149515 + -2.09699 1.26712 -0.658488 -0.993989 0.00114169 -0.109477 + -2.12631 1.36968 -0.449128 -0.98963 -0.0982745 -0.104761 + -2.05549 1.1299 -0.964603 -0.972881 0.0812402 -0.216569 + -2.07198 1.08522 -0.885216 -0.990384 -0.0118836 -0.137833 + -2.08871 1.18155 -0.736669 -0.996322 -0.0308005 -0.0799573 + -2.09774 1.19902 -0.611331 -0.993967 -0.107858 -0.0199089 + -2.10602 1.28468 -0.5331 -0.992525 -0.103797 -0.0641862 + -2.04402 1.04975 -1.03439 -0.970439 0.030296 -0.239437 + -2.06051 1.00508 -0.955007 -0.987998 -0.0560364 -0.143945 + -2.07962 1.08938 -0.804825 -0.995261 -0.0763985 -0.0601538 + -2.0328 0.959071 -1.08132 -0.962637 -0.0424637 -0.267444 + -2.04378 0.902897 -0.995826 -0.983016 -0.121232 -0.13778 + -2.0661 0.987661 -0.861243 -0.990934 -0.125045 -0.0491213 + -2.07118 1.00899 -0.747187 -0.989622 -0.143696 0.000826782 + -2.08471 1.11063 -0.690828 -0.990304 -0.138888 0.0027783 + -2.01409 0.862541 -1.12133 -0.963874 -0.0552808 -0.260559 + -2.02508 0.806365 -1.03583 -0.983527 -0.124181 -0.131357 + -2.04937 0.885476 -0.902053 -0.98657 -0.153917 -0.0546657 + -1.99658 0.774051 -1.17386 -0.971801 -0.0279902 -0.234136 + -2.00857 0.707927 -1.07553 -0.986996 -0.112858 -0.114464 + -2.02757 0.760312 -0.902864 -0.986431 -0.158308 -0.0435122 + -2.03319 0.780641 -0.797873 -0.982325 -0.181062 0.0474664 + -2.05499 0.905722 -0.797122 -0.986957 -0.16097 -0.00194736 + -1.98022 0.694353 -1.24222 -0.968386 -0.0316358 -0.247441 + -1.99221 0.628315 -1.14384 -0.988532 -0.0728051 -0.132303 + -2.01107 0.661873 -0.942562 -0.991753 -0.120767 -0.042911 + -1.9371 0.70295 -1.36411 -0.933596 0.0203236 -0.357751 + -1.95748 0.621574 -1.31076 -0.953344 -0.0400655 -0.299216 + -1.97947 0.54448 -1.21083 -0.977391 -0.104149 -0.184012 + -2.00034 0.561665 -0.990198 -0.993735 -0.101515 -0.0467479 + -1.92874 0.541985 -1.37811 -0.953065 -0.0468341 -0.299122 + -1.95073 0.464891 -1.27818 -0.97211 0.0194808 -0.233714 + -1.8863 0.579432 -1.50997 -0.952219 0.0337673 -0.303544 + -1.90438 0.486181 -1.45545 -0.961391 0.064499 -0.267521 + -1.94019 0.396175 -1.36396 -0.963416 0.121826 -0.23872 + -1.99081 0.395049 -1.14661 -0.989561 0.0761923 -0.122326 + -1.88613 0.445995 -1.54445 -0.960159 0.115062 -0.254667 + -1.92194 0.355984 -1.45294 -0.951354 0.181882 -0.248686 + -1.83749 0.521787 -1.69473 -0.964718 0.118015 -0.235353 + -1.86166 0.425444 -1.64426 -0.958609 0.117814 -0.259208 + -1.90282 0.328364 -1.54911 -0.94618 0.190271 -0.261801 + -1.97912 0.263295 -1.33021 -0.977919 0.100252 -0.183366 + -1.81013 0.522261 -1.81735 -0.964761 0.0864903 -0.248507 + -1.83638 0.413125 -1.73832 -0.959356 0.0927667 -0.266516 + -1.87754 0.315958 -1.64322 -0.945104 0.164066 -0.282596 + -1.78193 0.519976 -1.91999 -0.950571 0.057625 -0.305113 + -1.80817 0.410835 -1.84095 -0.960484 0.0840346 -0.265345 + -1.8437 0.321936 -1.74858 -0.948369 0.178105 -0.26244 + -1.75033 0.516583 -2.00871 -0.945673 0.0907224 -0.312206 + -1.77306 0.429219 -1.96599 -0.95427 0.0938365 -0.283836 + -1.80858 0.340319 -1.87362 -0.945998 -0.0213889 -0.323466 + -1.72877 0.620289 -2.03794 -0.943108 0.126186 -0.30761 + -1.70205 0.619774 -2.12764 -0.950979 0.10299 -0.291603 + -1.71697 0.522889 -2.10943 -0.94546 0.0895083 -0.313198 + -1.7397 0.435529 -2.06672 -0.942173 0.0140033 -0.334835 + -1.68803 0.731209 -2.11905 -0.956964 0.154947 -0.245381 + -1.66896 0.729781 -2.21098 -0.961123 0.122954 -0.247236 + -1.67234 0.614464 -2.21745 -0.954832 0.0675853 -0.289359 + -1.68726 0.517582 -2.19924 -0.942297 0.055448 -0.330155 + -1.62954 0.79567 -2.3085 -0.916133 0.262274 -0.303172 + -1.64705 0.719534 -2.29283 -0.958629 0.105311 -0.264463 + -1.65044 0.604129 -2.29935 -0.958592 0.0284245 -0.283361 + -1.66056 0.507282 -2.271 -0.944086 0.0219805 -0.328965 + -1.70504 0.443523 -2.15917 -0.937578 -0.00732861 -0.347698 + -1.57527 0.815265 -2.41484 -0.786469 0.463635 -0.408055 + -1.60796 0.770587 -2.39906 -0.883805 0.304206 -0.355453 + -1.62548 0.694363 -2.38344 -0.944528 0.0736135 -0.320073 + -1.63512 0.575657 -2.34903 -0.945393 -0.00628874 -0.325871 + -1.64524 0.478729 -2.32075 -0.939555 -0.0369874 -0.340395 + -1.54246 0.793947 -2.49812 -0.778423 0.444319 -0.443439 + -1.57515 0.749187 -2.48239 -0.854523 0.262989 -0.447915 + -1.59698 0.67167 -2.45753 -0.908288 0.0341742 -0.416948 + -1.60662 0.552963 -2.42312 -0.920288 -0.0260881 -0.390371 + -1.50042 0.854638 -2.50764 -0.755032 0.504357 -0.418987 + -1.50328 0.780374 -2.57541 -0.772967 0.380888 -0.507392 + -1.53243 0.730259 -2.56481 -0.822976 0.207752 -0.528725 + -1.55426 0.652742 -2.53995 -0.869186 0.0190255 -0.494118 + -1.40873 0.913059 -2.60623 -0.707436 0.582214 -0.400701 + -1.46124 0.841065 -2.58493 -0.773094 0.446835 -0.450182 + -1.43613 0.819446 -2.65289 -0.798962 0.360914 -0.481042 + -1.45803 0.764403 -2.64455 -0.795105 0.293892 -0.530504 + -1.48719 0.714293 -2.63396 -0.751387 0.0945052 -0.653059 + -1.35057 0.970934 -2.60107 -0.634369 0.702594 -0.322394 + -1.38363 0.891352 -2.67423 -0.716114 0.510931 -0.475532 + -1.39239 0.812546 -2.72934 -0.74291 0.323901 -0.585809 + -1.41428 0.75751 -2.72101 -0.7928 0.0651492 -0.60599 + -1.28516 1.0287 -2.58513 -0.594154 0.769993 -0.232576 + -1.23603 1.03277 -2.68117 -0.654781 0.69439 -0.298471 + -1.30145 0.975091 -2.69707 -0.664642 0.642797 -0.380873 + -1.33585 0.903728 -2.71987 -0.681349 0.452028 -0.575703 + -1.27319 1.0645 -2.46373 -0.662391 0.733103 -0.154267 + -1.23551 1.07169 -2.57379 -0.714719 0.672558 -0.191943 + -1.20058 1.08523 -2.66683 -0.793243 0.509164 -0.333941 + -1.18471 1.04321 -2.75686 -0.666151 0.649363 -0.366838 + -1.22233 1.10923 -2.49381 -0.729059 0.666569 -0.155428 + -1.21201 1.11193 -2.53548 -0.773572 0.619555 -0.133186 + -1.19013 1.12891 -2.58389 -0.826646 0.554456 -0.0960993 + -1.21363 1.08867 -2.62219 -0.867134 0.446604 -0.220507 + -1.19159 1.14556 -2.48434 -0.731957 0.678813 -0.0587482 + -1.18126 1.14826 -2.52601 -0.815828 0.569804 -0.098732 + -1.17209 1.15831 -2.57441 -0.84457 0.531328 -0.0662785 + -1.18088 1.1429 -2.63392 -0.839225 0.5182 -0.164836 + -1.16783 1.13946 -2.67856 -0.872127 0.381376 -0.306507 + -1.18777 1.14912 -2.45389 -0.690687 0.722938 0.0176511 + -1.16542 1.17131 -2.46853 -0.560574 0.828096 0.00376736 + -1.17085 1.16932 -2.51908 -0.694251 0.719653 -0.0107273 + -1.16168 1.17937 -2.56748 -0.763728 0.645469 -0.00946441 + -1.1616 1.17478 -2.43814 -0.537117 0.841758 0.0543007 + -1.1403 1.18208 -2.45458 -0.148686 0.988614 -0.0231118 + -1.14573 1.18009 -2.50514 -0.300884 0.948428 0.0997637 + -1.14055 1.18732 -2.53386 -0.431706 0.876175 0.214351 + -1.14094 1.20304 -2.60229 -0.572271 0.817286 0.0674576 + -1.13768 1.18233 -2.43142 -0.129509 0.990662 0.0426188 + -1.09447 1.17921 -2.45001 -0.0558176 0.993542 0.0987885 + -1.08928 1.18644 -2.47874 -0.0957059 0.969905 0.223885 + -1.11981 1.21108 -2.56861 -0.168447 0.98564 0.0118046 + -1.13552 1.18105 -2.41161 -0.145418 0.988941 0.0291549 + -1.09184 1.17938 -2.4269 0.109258 0.99367 -0.0261175 + -1.0804 1.20673 -2.55668 0.0681394 0.981004 0.181625 + -0.967913 1.176 -2.52145 0.158523 0.9292 0.333852 + -1.06545 1.21285 -2.59188 0.0449928 0.973577 0.223881 + -1.09838 1.22453 -2.63391 -0.134256 0.981751 0.134686 + -1.13079 1.21216 -2.64528 -0.583304 0.812253 0.00105262 + -1.16283 1.17229 -2.62444 -0.833004 0.548775 -0.0703607 + -0.911718 1.13693 -2.48258 0.675808 0.505001 0.536896 + -0.926335 1.16779 -2.50524 -0.011886 0.735221 0.677723 + -0.990116 1.20637 -2.60766 0.0790973 0.956466 0.28092 + -1.02305 1.21805 -2.64968 0.0225568 0.986295 0.163444 + -0.885069 1.09631 -2.51663 0.889157 0.0688556 0.452392 + -0.884528 1.14908 -2.50443 0.676666 0.2882 0.677542 + -0.899145 1.17995 -2.5271 0.253383 0.832005 0.493522 + -0.948538 1.19817 -2.59145 0.0255572 0.950254 0.310427 + -0.94738 1.22467 -2.66936 0.0601982 0.925018 0.375122 + -0.856004 1.06934 -2.57092 0.861692 0.116377 0.493905 + -0.867959 1.10431 -2.55008 0.87148 -0.0567673 0.487134 + -0.867418 1.15699 -2.53792 0.856337 0.330428 0.396868 + -0.88845 1.18671 -2.54941 0.422347 0.85005 0.314702 + -0.937843 1.20493 -2.61377 0.078891 0.955981 0.282623 + -0.84669 1.11707 -2.58139 0.896595 0.100933 0.431195 + -0.862438 1.16515 -2.58307 0.834094 0.470844 0.287389 + -0.88347 1.19496 -2.5945 0.413193 0.867419 0.277229 + -0.834108 1.13159 -2.62274 0.899935 0.258385 0.351218 + -0.849857 1.17975 -2.62436 0.765879 0.512534 0.38825 + -0.876853 1.2022 -2.62483 0.345542 0.878935 0.328747 + -0.931226 1.21225 -2.64405 0.157951 0.938008 0.308532 + -0.941463 1.25178 -2.72611 0.0463528 0.911807 0.407994 + -0.980939 1.25611 -2.73802 -0.124525 0.955234 0.268369 + -0.986855 1.22901 -2.68127 -0.0860182 0.929966 0.357442 + -0.855869 1.243 -2.7345 0.149777 0.897169 0.415517 + -0.91914 1.26648 -2.76477 0.0567207 0.916672 0.395594 + -1.0015 1.25512 -2.76769 -0.274863 0.961474 -0.00433306 + -1.03613 1.2458 -2.74336 -0.199231 0.950363 0.23899 + -0.880748 1.29581 -2.84857 -0.00167506 0.960918 0.276828 + -0.941826 1.27882 -2.78935 -0.105791 0.914751 0.38992 + -0.882594 1.29958 -2.8801 -0.162982 0.983306 0.0809091 + -0.94672 1.29238 -2.83283 -0.160976 0.960792 0.225757 + -0.988215 1.27832 -2.83389 -0.466197 0.873957 0.137331 + -0.983321 1.26477 -2.79041 -0.400141 0.892953 0.20621 + -0.850377 1.31449 -2.91732 -0.282936 0.919806 0.271854 + -0.877135 1.30123 -2.90596 -0.300999 0.948933 0.0944764 + -0.949167 1.29401 -2.91546 -0.275316 0.96128 -0.0118887 + -0.948567 1.29623 -2.86431 -0.221607 0.974469 0.0360735 + -0.899956 1.31617 -2.97904 -0.428834 0.890801 0.150248 + -0.926715 1.30291 -2.96768 -0.404979 0.914011 0.0239883 + -0.943709 1.29575 -2.94127 -0.333011 0.942891 -0.0077541 + -0.981064 1.27856 -2.9257 -0.675549 0.704626 -0.217107 + -0.980463 1.28078 -2.87453 -0.512733 0.857576 -0.0408408 + -0.909608 1.31262 -3.01408 -0.524969 0.825447 -0.207473 + -0.949326 1.28635 -2.99379 -0.704705 0.666207 -0.244047 + -0.96632 1.27919 -2.96738 -0.744648 0.609156 -0.272815 + -0.986988 1.24749 -2.93948 -0.835253 0.356501 -0.41864 + -1.01219 1.25533 -2.89466 -0.787824 0.568261 -0.237514 + -0.889411 1.29932 -3.05886 -0.526052 0.749129 -0.402584 + -0.913215 1.27735 -3.065 -0.633356 0.477886 -0.608675 + -0.933412 1.29065 -3.02023 -0.669073 0.636878 -0.383051 + -0.956513 1.25574 -3.01736 -0.84996 0.354623 -0.389629 + -0.972244 1.24811 -2.98116 -0.89113 0.307196 -0.333943 + -0.836077 1.34062 -3.04639 -0.736355 0.622526 -0.265035 + -0.879112 1.29481 -3.08344 -0.670374 0.630444 -0.39133 + -0.906593 1.25503 -3.07875 -0.689439 0.168004 -0.704592 + -0.940599 1.25994 -3.04386 -0.77263 0.321629 -0.547355 + -0.9681 1.2197 -3.01414 -0.860102 0.0940931 -0.50137 + -0.828288 1.35158 -3.05058 -0.624178 0.777037 -0.0813382 + -0.867142 1.29652 -3.11001 -0.834016 0.520162 -0.18398 + -0.880425 1.25738 -3.12241 -0.895863 0.120374 -0.427714 + -0.892395 1.25566 -3.09584 -0.837736 0.200515 -0.507929 + -0.848405 1.33885 -3.10093 -0.805847 0.585174 0.0904521 + -0.859353 1.30749 -3.11421 -0.88592 0.463174 -0.0248135 + -0.861481 1.29584 -3.15123 -0.909019 0.257874 -0.327393 + -0.860701 1.25353 -3.15314 -0.847179 -0.0782314 -0.525516 + -0.891311 1.19161 -3.0945 -0.764881 0.317403 -0.560547 + -0.822393 1.35025 -3.13007 -0.335236 0.940074 -0.062271 + -0.842034 1.33802 -3.14948 -0.73097 0.654264 -0.193963 + -0.850533 1.32721 -3.13796 -0.88922 0.425233 -0.168716 + -0.837007 1.30443 -3.1987 -0.866915 0.155506 -0.473578 + -0.836227 1.26211 -3.20061 -0.794169 -0.140755 -0.591172 + -0.807774 1.35332 -3.17719 -0.343641 0.937186 -0.0599436 + -0.827415 1.34108 -3.19659 -0.710348 0.603132 -0.362819 + -0.828508 1.31515 -3.21027 -0.780578 0.211785 -0.588086 + -0.788135 1.35976 -3.19374 -0.344028 0.933357 -0.102414 + -0.803897 1.3462 -3.21505 -0.433188 0.670717 -0.602069 + -0.80499 1.32035 -3.22868 -0.383956 0.26671 -0.883993 + -0.810492 1.2834 -3.23168 -0.423018 -0.0677639 -0.903583 + -0.824198 1.20238 -3.18974 -0.746425 -0.103299 -0.657404 + -0.759647 1.36245 -3.21781 -0.352857 0.757129 -0.549771 + -0.775426 1.33123 -3.23053 -0.314824 0.336035 -0.887675 + -0.780928 1.29429 -3.23354 -0.308369 0.0410189 -0.950382 + -0.798463 1.22376 -3.22077 -0.571091 -0.225615 -0.789274 + -0.734881 1.36517 -3.22991 -0.510718 0.679211 -0.527105 + -0.75066 1.33395 -3.24263 -0.56923 0.372221 -0.733095 + -0.758515 1.28489 -3.24766 -0.628664 0.0801214 -0.773538 + -0.77605 1.21436 -3.23489 -0.650392 -0.0290112 -0.759044 + -0.724005 1.3358 -3.27084 -0.611347 0.357093 -0.706215 + -0.731861 1.28674 -3.27586 -0.746686 0.145284 -0.649116 + -0.740077 1.21133 -3.26985 -0.758034 0.0150473 -0.652041 + -0.703222 1.28398 -3.31608 -0.871041 0.128482 -0.474111 + -0.711438 1.20857 -3.31007 -0.827377 0.0219875 -0.561216 + -0.729951 1.09364 -3.2816 -0.799537 0.024507 -0.600116 + -0.756525 1.13848 -3.25267 -0.71915 -0.0116248 -0.694757 + -0.692139 1.32737 -3.32723 -0.863614 0.367076 -0.345582 + -0.679091 1.27673 -3.37073 -0.768159 -0.0132553 -0.640122 + -0.685683 1.19519 -3.35049 -0.753651 -0.0625606 -0.654291 + -0.704195 1.08025 -3.32202 -0.713854 -0.0462183 -0.698768 + -0.631037 1.25434 -3.39814 -0.489264 -0.235466 -0.839747 + -0.657607 1.23794 -3.38175 -0.477437 -0.192609 -0.857296 + -0.664199 1.15631 -3.36156 -0.161871 -0.204568 -0.965375 + -0.667673 1.07883 -3.34755 -0.0804065 -0.16128 -0.983628 + -0.583594 1.12337 -3.3677 -0.413194 -0.305865 -0.85774 + -0.606508 1.1171 -3.35144 -0.448663 -0.257233 -0.855881 + -0.633078 1.1007 -3.33504 -0.023857 -0.220987 -0.974985 + -0.636552 1.02322 -3.32103 0.0327785 -0.128015 -0.99123 + -0.541689 1.23037 -3.43524 -0.317245 -0.420334 -0.850103 + -0.554759 1.09699 -3.36781 -0.191171 -0.237253 -0.952452 + -0.590393 0.98949 -3.34181 -0.485612 0.0171394 -0.874006 + -0.613308 0.983305 -3.3255 -0.376048 0.0441672 -0.925547 + -0.525923 1.10772 -3.37419 -0.351974 -0.259034 -0.899453 + -0.523938 1.00931 -3.36355 -0.410158 0.0258807 -0.911647 + -0.552774 0.998588 -3.35717 -0.312055 0.0387584 -0.949273 + -0.59256 0.886387 -3.36023 -0.447357 0.20609 -0.870286 + -0.516806 0.905132 -3.3851 -0.440406 0.167995 -0.881941 + -0.554941 0.895571 -3.37554 -0.353946 0.217305 -0.909671 + -0.549588 0.807847 -3.4032 -0.434649 0.27002 -0.859168 + -0.613945 0.801257 -3.36938 -0.465565 0.196425 -0.86294 + -0.648242 0.887851 -3.33037 -0.238582 0.156511 -0.958427 + -0.483313 0.9457 -3.40716 -0.352928 0.129484 -0.926647 + -0.478446 0.842036 -3.41942 -0.343401 0.347352 -0.872595 + -0.511454 0.817408 -3.41276 -0.373646 0.39511 -0.839212 + -0.449075 0.857102 -3.41871 -0.181931 0.337697 -0.923505 + -1.15269 1.18141 -2.66743 -0.871896 0.470712 -0.135007 + -1.153 1.14253 -2.72549 -0.915223 0.211874 -0.342748 + -1.14926 1.09558 -2.74257 -0.82447 0.379249 -0.420022 + -1.13193 1.21032 -2.7013 -0.71007 0.693272 -0.123184 + -1.13785 1.1844 -2.71441 -0.891173 0.360217 -0.275779 + -1.12906 1.16266 -2.76575 -0.89021 0.221673 -0.397979 + -1.12532 1.1158 -2.78279 -0.82497 -0.0490651 -0.563043 + -1.09691 1.11595 -2.82104 -0.805106 0.309681 -0.505868 + -1.09952 1.22269 -2.68993 -0.188756 0.981753 0.0230639 + -1.09078 1.2261 -2.71603 -0.236185 0.96295 0.130168 + -1.1157 1.21894 -2.74322 -0.668408 0.703396 -0.241793 + -1.12163 1.19302 -2.75634 -0.864647 0.383575 -0.324431 + -1.10832 1.18096 -2.80125 -0.784085 0.256464 -0.565187 + -1.01432 1.22146 -2.67579 -0.154738 0.968056 0.197288 + -1.06359 1.23826 -2.73789 -0.251442 0.943282 0.216784 + -1.08851 1.23109 -2.76508 -0.509744 0.844013 -0.166745 + -1.10089 1.21141 -2.79179 -0.643317 0.553659 -0.528777 + -1.05669 1.24472 -2.77308 -0.264462 0.935019 -0.236217 + -1.06907 1.22495 -2.79984 -0.463944 0.800522 -0.379369 + -1.09432 1.18106 -2.81722 -0.684007 0.204102 -0.700341 + -1.11132 1.1158 -2.79879 -0.539026 0.721 -0.435442 + -1.00108 1.25237 -2.77993 -0.484721 0.873235 -0.050064 + -1.06865 1.22229 -2.81203 -0.698494 0.68337 -0.212396 + -1.08073 1.19248 -2.8274 -0.779709 0.356109 -0.515014 + -1.06632 1.19253 -2.8497 -0.78751 0.313911 -0.530365 + -1.05505 1.23363 -2.82227 -0.65206 0.745344 -0.138853 + -1.0373 1.24602 -2.83274 -0.637136 0.760528 -0.12512 + -1.04896 1.19939 -2.87096 -0.808506 0.321565 -0.492864 + -1.04076 1.13677 -2.8959 -0.802866 0.287136 -0.522454 + -1.01994 1.25288 -2.85401 -0.690285 0.692207 -0.21061 + -1.02282 1.22287 -2.90504 -0.844319 0.311836 -0.435756 + -1.01462 1.16025 -2.92998 -0.847699 0.0952491 -0.521856 + -0.98606 1.14559 -2.97619 -0.807124 0.140914 -0.573318 + -1.06735 1.08183 -2.90755 -0.71221 0.557681 -0.426321 + -0.997624 1.21503 -2.94985 -0.843424 0.255487 -0.472612 + -0.983832 1.21207 -2.97794 -0.900273 0.212269 -0.380067 + -1.00083 1.1573 -2.95806 -0.874113 -0.195654 -0.444575 + -0.953329 1.20799 -3.03226 -0.761881 -0.082279 -0.64247 + -0.924861 1.16125 -3.05211 -0.759065 0.0913809 -0.64457 + -0.94158 1.11554 -3.05993 -0.671967 0.478682 -0.565087 + -1.00278 1.09979 -2.98406 -0.715202 0.509992 -0.477906 + -0.933976 1.23772 -3.05755 -0.724362 0.0473782 -0.68779 + -0.905509 1.19098 -3.0774 -0.756984 -0.0196027 -0.653139 + -0.871586 1.18768 -3.12528 -0.819592 -0.0165358 -0.572709 + -0.878753 1.11692 -3.12013 -0.743617 0.354148 -0.56711 + -0.831364 1.13163 -3.1846 -0.693751 0.0361876 -0.719306 + -0.906013 1.05988 -3.15032 -0.511791 0.295604 -0.806652 + -0.96884 1.05849 -3.09012 -0.670227 0.442286 -0.595968 + -1.03934 1.04783 -3.00726 -0.70953 0.480407 -0.515534 + -1.10391 1.02987 -2.93075 -0.700279 0.522208 -0.486732 + -0.792498 1.14151 -3.21772 -0.668955 -0.0403599 -0.742206 + -0.844477 1.01909 -3.16388 -0.435912 0.0641955 -0.897697 + -0.862737 0.911411 -3.17597 -0.314487 0.204616 -0.926947 + -0.924274 0.952194 -3.16241 -0.401295 0.14305 -0.904709 + -0.981885 0.970853 -3.11573 -0.692672 0.171191 -0.700642 + -0.805611 1.02897 -3.19699 -0.673897 0.0307071 -0.738187 + -0.779037 0.984124 -3.22592 -0.685824 0.0585476 -0.725408 + -0.807312 0.8757 -3.21712 -0.561078 0.201036 -0.802979 + -0.888474 0.773687 -3.21123 -0.563203 0.163526 -0.809976 + -0.708009 0.929185 -3.30036 -0.640215 0.0185042 -0.767973 + -0.736285 0.820761 -3.29156 -0.579149 0.206094 -0.788741 + -0.770918 0.732946 -3.30046 -0.565777 0.276 -0.776994 + -0.833049 0.737981 -3.25239 -0.538052 0.232206 -0.810297 + -0.671487 0.927766 -3.3259 -0.305046 0.0231465 -0.952056 + -0.669628 0.802808 -3.33947 -0.467802 0.19936 -0.861055 + -0.704261 0.714906 -3.34842 -0.437763 0.323929 -0.838709 + -0.729677 0.650131 -3.36422 -0.429278 0.544317 -0.720722 + -0.784197 0.647313 -3.32094 -0.656441 0.549434 -0.516922 + -0.791553 0.658465 -3.30266 -0.763638 0.201061 -0.61354 + -0.853684 0.663413 -3.25463 -0.650272 -0.0904644 -0.754296 + -0.824094 0.620744 -3.32732 -0.689668 0.667002 -0.281899 + -0.835219 0.606485 -3.26263 -0.793486 0.461746 -0.396448 + -0.842575 0.617554 -3.2444 -0.680987 0.225742 -0.696633 + -0.881885 0.624614 -3.20543 -0.71574 0.01508 -0.698204 + -0.892993 0.670473 -3.21566 -0.728335 -0.127559 -0.673244 + -0.839508 0.585837 -3.34066 -0.767933 0.434601 -0.470532 + -0.850633 0.571579 -3.27597 -0.699861 0.656442 -0.281565 + -0.891828 0.577886 -3.21909 -0.516642 0.648426 -0.559128 + -0.917453 0.547777 -3.26174 -0.481756 0.711617 -0.511383 + -0.970307 0.566982 -3.19821 -0.398424 0.769379 -0.499313 + -0.930771 0.581369 -3.17973 -0.457876 0.689703 -0.560945 + -0.920827 0.628098 -3.16606 -0.668567 0.0729528 -0.740065 + -0.943938 0.49023 -3.28707 -0.644385 0.410786 -0.644998 + -0.996791 0.50944 -3.22354 -0.632229 0.445744 -0.633719 + -1.05221 0.499862 -3.17235 -0.648677 0.374187 -0.662723 + -1.03412 0.568928 -3.14917 -0.543396 0.784954 -0.297604 + -0.994583 0.583223 -3.13074 -0.406932 0.601124 -0.68779 + -1.01994 0.404621 -3.25099 -0.682462 0.276672 -0.676534 + -1.07535 0.395043 -3.1998 -0.685545 0.259637 -0.68016 + -1.13457 0.383945 -3.14298 -0.694294 0.232501 -0.681101 + -1.11179 0.457364 -3.13654 -0.655355 0.3179 -0.685164 + -1.0937 0.52643 -3.11337 -0.59319 0.365523 -0.717299 + -1.04263 0.322675 -3.25645 -0.703613 0.169594 -0.690049 + -1.10444 0.320445 -3.19199 -0.710552 0.154784 -0.686409 + -1.16366 0.309347 -3.13517 -0.729849 0.084507 -0.678365 + -1.22401 0.308672 -3.0596 -0.772003 0.0621487 -0.632574 + -1.19471 0.371712 -3.08779 -0.707413 0.13203 -0.69436 + -1.13614 0.255278 -3.16932 -0.736031 -0.048465 -0.675211 + -1.19799 0.257929 -3.09751 -0.771599 -0.0537367 -0.633836 + -1.25835 0.25717 -3.02199 -0.825489 -0.0769077 -0.559154 + -1.17071 0.195581 -3.11292 -0.775988 -0.151882 -0.612188 + -1.23257 0.198234 -3.04111 -0.796209 -0.240811 -0.555032 + -1.28577 0.197006 -2.94879 -0.82635 -0.272375 -0.492907 + -1.31288 0.247537 -2.92751 -0.837482 -0.174951 -0.517703 + -1.3159 0.131596 -2.85429 -0.813168 -0.425584 -0.397033 + -1.3605 0.135637 -2.75069 -0.785636 -0.511692 -0.347776 + -1.34029 0.187375 -2.85431 -0.811358 -0.375442 -0.448042 + -1.30803 0.080062 -2.77604 -0.657718 -0.697751 -0.283814 + -1.35263 0.084103 -2.67244 -0.676531 -0.689855 -0.257693 + -1.39589 0.088496 -2.56864 -0.650732 -0.720374 -0.24002 + -1.40652 0.13393 -2.65054 -0.787216 -0.523908 -0.325286 + -1.38632 0.185582 -2.7542 -0.835594 -0.376829 -0.399728 + -1.26687 0.033708 -2.71875 -0.527483 -0.821637 -0.216043 + -1.31176 0.039233 -2.61412 -0.542936 -0.817674 -0.191389 + -1.35501 0.043626 -2.51033 -0.541844 -0.819614 -0.186114 + -1.44616 0.135233 -2.545 -0.71925 -0.622187 -0.309132 + -1.48932 0.129995 -2.44592 -0.627934 -0.70319 -0.3335 + -1.43091 0.182214 -2.65897 -0.802916 -0.458224 -0.381257 + -1.41122 0.246872 -2.74796 -0.851353 -0.282496 -0.442033 + -1.36663 0.250236 -2.84319 -0.859513 -0.20662 -0.467489 + -1.47407 0.177061 -2.55984 -0.774972 -0.505297 -0.379597 + -1.46101 0.248108 -2.6577 -0.842072 -0.32881 -0.42755 + -1.39707 0.331328 -2.82164 -0.842121 -0.163062 -0.514045 + -1.33472 0.319051 -2.90858 -0.829021 -0.0990452 -0.550377 + -1.28097 0.316267 -2.99295 -0.803522 -0.0413684 -0.593836 + -1.50272 0.238276 -2.56287 -0.84679 -0.344521 -0.405281 + -1.44686 0.33257 -2.73139 -0.851905 -0.201614 -0.483332 + -1.37354 0.397148 -2.86464 -0.818817 0.0195779 -0.573721 + -1.31119 0.384784 -2.95163 -0.779952 0.0353195 -0.624842 + -1.25167 0.379392 -3.02109 -0.750007 0.127781 -0.64897 + -1.54141 0.229118 -2.47201 -0.878911 -0.321167 -0.352658 + -1.49748 0.340717 -2.6479 -0.876334 -0.194716 -0.440596 + -1.47845 0.415515 -2.70086 -0.872163 0.0408533 -0.487507 + -1.42783 0.407368 -2.78435 -0.842552 -0.00890266 -0.538541 + -1.53617 0.331558 -2.55704 -0.880085 -0.235715 -0.412175 + -1.52509 0.411422 -2.61477 -0.910456 0.0523829 -0.410276 + -1.45261 0.472207 -2.72205 -0.847584 0.222339 -0.481837 + -1.40063 0.465663 -2.81112 -0.820573 0.182764 -0.541532 + -1.34634 0.455443 -2.89141 -0.772425 0.145223 -0.618279 + -1.57128 0.306542 -2.47251 -0.835394 -0.370571 -0.405948 + -1.5602 0.386404 -2.53023 -0.910678 -0.0614836 -0.408516 + -1.49925 0.468028 -2.63601 -0.869102 0.155199 -0.469655 + -1.43292 0.53521 -2.72537 -0.822372 0.245145 -0.513427 + -1.60575 0.310399 -2.37859 -0.920906 -0.250653 -0.298506 + -1.59543 0.38301 -2.44856 -0.932298 -0.0776528 -0.353257 + -1.54397 0.462983 -2.55687 -0.894162 0.0689012 -0.442411 + -1.52708 0.537637 -2.57338 -0.856026 0.0321084 -0.515935 + -1.48236 0.542768 -2.65247 -0.830761 0.187923 -0.523947 + -1.63363 0.327312 -2.28708 -0.933057 -0.197409 -0.300721 + -1.62331 0.400011 -2.357 -0.941493 -0.10647 -0.319773 + -1.5792 0.459672 -2.47514 -0.914495 0.0123474 -0.404409 + -1.66959 0.336595 -2.19856 -0.898147 -0.253989 -0.358917 + -1.65123 0.417072 -2.28535 -0.920044 -0.146869 -0.363247 + -1.61732 0.461668 -2.39239 -0.919441 -0.0799871 -0.385007 + -1.5685 0.550967 -2.50587 -0.883756 -0.0422909 -0.466032 + -1.6967 0.352746 -2.14414 -0.887069 -0.25059 -0.387702 + -1.67834 0.433221 -2.23093 -0.924063 -0.0900735 -0.371476 + -1.73525 0.356326 -2.06274 -0.904216 -0.195466 -0.379718 + -1.76991 0.348332 -1.97029 -0.923692 -0.111495 -0.366554 + -1.51283 0.639411 -2.60746 -0.747482 -0.0418051 -0.662965 + -1.46558 0.611434 -2.6398 -0.735773 0.0833317 -0.672082 + -1.41613 0.603874 -2.71271 -0.812837 0.249557 -0.526324 + -1.43993 0.686228 -2.66635 -0.701385 -0.130788 -0.700681 + -1.39955 0.667331 -2.71382 -0.806797 0.0380626 -0.589602 + -1.37089 0.599904 -2.79263 -0.806693 0.251944 -0.534576 + -1.38094 0.528752 -2.81439 -0.805135 0.251071 -0.537327 + -1.37391 0.738612 -2.76848 -0.636777 -0.0527125 -0.769244 + -1.32933 0.706247 -2.79182 -0.676599 0.20304 -0.707805 + -1.35431 0.66336 -2.79374 -0.767904 0.325738 -0.55156 + -1.30118 0.653066 -2.85931 -0.724483 0.340029 -0.599587 + -1.31941 0.593228 -2.86727 -0.749196 0.296524 -0.592266 + -1.34461 0.824924 -2.77497 -0.411356 0.40117 -0.818443 + -1.30003 0.792471 -2.79836 -0.618966 0.188194 -0.762538 + -1.2762 0.695953 -2.85739 -0.741885 0.343054 -0.576125 + -1.26662 0.915059 -2.81249 -0.753054 0.313349 -0.578552 + -1.21134 0.912351 -2.875 -0.729015 0.258014 -0.634008 + -1.24475 0.789848 -2.86082 -0.767324 0.187833 -0.613133 + -1.22635 0.705679 -2.92404 -0.747082 0.262215 -0.610828 + -1.23221 0.986335 -2.78975 -0.674975 0.608715 -0.416983 + -1.17101 1.00413 -2.86558 -0.688502 0.55266 -0.469608 + -1.14424 0.938086 -2.94017 -0.725606 0.288729 -0.624605 + -1.1949 0.799579 -2.92748 -0.754747 0.20571 -0.622929 + -1.12351 1.06101 -2.83269 -0.701325 0.593726 -0.394505 + -1.05238 0.960199 -3.03288 -0.726634 0.219754 -0.65093 + -1.10361 0.92803 -2.98836 -0.712459 0.205663 -0.670898 + -1.15427 0.789519 -2.97565 -0.701545 0.205512 -0.682349 + -1.17045 0.712744 -2.98307 -0.696069 0.236238 -0.677997 + -1.24529 0.638654 -2.93015 -0.718489 0.283709 -0.635045 + -0.981962 0.837958 -3.12715 -0.648643 0.086705 -0.756138 + -1.04096 0.835841 -3.07488 -0.676754 0.135161 -0.723696 + -1.09219 0.803672 -3.03036 -0.669838 0.166998 -0.723484 + -1.10836 0.726897 -3.03779 -0.624304 0.219397 -0.749739 + -1.18938 0.64572 -2.98918 -0.69001 0.263171 -0.674261 + -0.92435 0.819293 -3.17382 -0.649633 0.0631261 -0.757623 + -0.928869 0.716082 -3.17825 -0.668462 -0.0290365 -0.74318 + -0.980501 0.730595 -3.13999 -0.596225 0.010625 -0.802747 + -1.03949 0.728479 -3.08773 -0.63342 0.171974 -0.754456 + -1.12758 0.661112 -3.04244 -0.623165 0.247104 -0.742028 + -0.972459 0.64252 -3.12784 -0.49703 0.0221792 -0.86745 + -1.05871 0.662694 -3.09238 -0.507377 0.168821 -0.845025 + -1.14228 0.592368 -3.05418 -0.6203 0.267425 -0.737368 + -1.20409 0.576976 -3.00092 -0.681562 0.267929 -0.680946 + -1.26352 0.578902 -2.93805 -0.708927 0.284702 -0.645265 + -1.08084 0.603397 -3.09528 -0.462074 0.24442 -0.852494 + -1.15515 0.515401 -3.07226 -0.618284 0.259328 -0.741939 + -1.21596 0.512611 -3.01483 -0.687406 0.257678 -0.679026 + -1.2754 0.514542 -2.95198 -0.711823 0.238095 -0.660771 + -1.32947 0.522163 -2.88898 -0.753782 0.249189 -0.608044 + -1.17193 0.445132 -3.08136 -0.670714 0.267724 -0.691712 + -1.23275 0.442429 -3.02388 -0.703146 0.21641 -0.677312 + -1.29227 0.447909 -2.95436 -0.739324 0.196686 -0.643984 + -2.07631 1.05829 -0.619383 -0.984776 -0.161989 0.0630468 + -2.08462 1.14167 -0.528789 -0.972802 -0.215204 0.0856987 + -2.09766 1.23015 -0.449251 -0.96778 -0.24505 0.0579026 + -2.07183 1.16429 -0.40337 -0.90215 -0.373365 0.216157 + -2.09548 1.25584 -0.32634 -0.904996 -0.386754 0.17721 + -2.1209 1.32137 -0.369243 -0.96768 -0.251537 0.0180005 + -2.1412 1.40637 -0.285263 -0.964817 -0.26175 -0.0248056 + -2.07553 1.27638 -0.230928 -0.778319 -0.533494 0.331065 + -2.12035 1.37266 -0.167875 -0.831185 -0.492366 0.258278 + -2.11872 1.34714 -0.246282 -0.930117 -0.355499 0.0922128 + -2.15307 1.44336 -0.175734 -0.923882 -0.376226 0.0699626 + -2.17486 1.4999 -0.209276 -0.957722 -0.281004 -0.0616842 + -2.09296 1.37722 -0.106179 -0.686569 -0.557314 0.46693 + -2.11209 1.46856 -0.032785 -0.646813 -0.556234 0.521764 + -2.1547 1.46887 -0.097327 -0.826761 -0.481316 0.291204 + -2.18874 1.57082 -0.033902 -0.766564 -0.524893 0.369955 + -2.18673 1.53689 -0.099744 -0.870768 -0.469572 0.145828 + -2.04395 1.43658 0.003601 -0.425691 -0.636428 0.643232 + -2.03494 1.51832 0.092234 -0.385641 -0.612214 0.690272 + -2.14612 1.57059 0.03069 -0.668946 -0.510348 0.540422 + -1.97635 1.39651 -0.013794 0.0907708 -0.70271 0.705663 + -1.96734 1.47825 0.074839 0.181619 -0.708776 0.681652 + -2.04287 1.60776 0.161511 -0.408368 -0.500057 0.763662 + -2.15405 1.65995 0.099917 -0.546278 -0.586471 0.598024 + -2.2366 1.67118 0.022866 -0.638983 -0.645383 0.418547 + -1.92104 1.44646 -0.019103 0.780813 -0.482862 0.396455 + -1.89298 1.52745 0.050015 0.705753 -0.604032 0.370214 + -1.93928 1.55924 0.143957 0.207741 -0.688047 0.695295 + -1.98979 1.6911 0.231766 -0.283109 -0.594299 0.752767 + -1.90639 1.358 -0.168095 0.948273 -0.205625 0.24186 + -1.89158 1.44598 -0.106472 0.943949 -0.296139 0.145811 + -1.87462 1.52017 -0.039377 0.914213 -0.394759 0.0915382 + -1.85245 1.60663 0.108876 0.704914 -0.629211 0.327399 + -1.8862 1.64258 0.21421 0.276049 -0.725521 0.63041 + -1.86913 1.54697 -0.119201 0.973441 -0.0658189 -0.21927 + -1.84762 1.61518 -0.058341 0.937781 -0.141336 -0.317161 + -1.83409 1.59935 0.019485 0.901535 -0.432666 -0.00585471 + -1.79353 1.68774 0.086182 0.903663 -0.426788 -0.0352704 + -1.80712 1.67712 0.149782 0.770121 -0.584024 0.256575 + -1.90366 1.58585 -0.184941 0.900212 0.304796 -0.310995 + -1.88215 1.65406 -0.124082 0.734553 0.357577 -0.576689 + -1.80707 1.70358 0.008356 0.879021 -0.0303957 -0.475814 + -1.96656 1.69425 -0.164886 0.815085 0.494977 -0.301056 + -1.98548 1.76989 -0.0955 0.587809 0.688393 -0.424966 + -1.90107 1.7297 -0.054687 0.416509 0.642809 -0.642897 + -1.85621 1.7471 -0.020024 0.479751 0.468105 -0.742103 + -1.75682 1.79571 0.071374 0.860873 -0.0825552 -0.502078 + -2.04625 1.81044 -0.084535 0.29823 0.796599 -0.525822 + -2.00417 1.89569 0.025604 0.345333 0.624215 -0.700786 + -1.95931 1.91309 0.060267 0.320098 0.539902 -0.778488 + -1.80597 1.83923 0.042994 0.417825 0.411959 -0.809761 + -2.01202 1.78593 -0.505692 0.647339 0.745688 0.157802 + -2.02144 1.80659 -0.573062 0.685061 0.658367 0.311841 + -2.05701 1.81152 -0.487006 0.605798 0.768393 0.206351 + -2.05367 1.84205 -0.544286 0.817012 0.443929 0.367991 + -2.01739 1.83902 -0.609851 0.801432 0.276919 0.530116 + -2.04962 1.87449 -0.581074 0.807571 0.346906 0.476953 + -2.04145 1.94214 -0.633849 0.508707 0.297805 0.807793 + -1.97133 1.92451 -0.662711 0.664323 0.110262 0.739268 + -1.99539 2.02754 -0.686759 0.450854 0.240487 0.859591 + -1.86546 2.21637 -0.792627 0.671205 0.0809145 0.736842 + -1.86537 2.28969 -0.80982 0.100236 0.135708 0.985665 + -1.97007 2.21519 -0.731793 0.441884 0.0308854 0.89654 + -2.00125 2.13916 -0.723096 -0.909366 0.200364 0.364564 + -1.94335 2.34968 -0.749733 0.602343 -0.0633986 0.795716 + -1.9866 2.29243 -0.724362 0.495295 -0.00991002 0.868668 + -1.92042 2.52582 -0.743409 0.632544 -0.0129348 0.774417 + -1.96367 2.46847 -0.718087 -0.522958 0.087648 0.84784 + -1.87463 2.72542 -0.804338 0.70776 0.274569 0.650913 + -1.93079 2.6463 -0.737493 0.108039 0.0688432 0.99176 + -1.93692 2.63864 -0.741815 -0.967517 0.129701 0.217 + -1.94728 2.53942 -0.740764 -0.942284 0.120314 -0.312449 + -1.98055 2.3106 -0.758235 -0.964562 0.107045 -0.241166 + -1.9866 2.29243 -0.724362 -0.987131 0.106807 -0.119016 + -1.90132 2.76373 -0.816285 0.528351 0.56562 0.633181 + -1.9324 2.7268 -0.741515 -0.133289 0.598016 0.790323 + -1.93854 2.71913 -0.745837 -0.955142 0.192124 0.225371 + -2.14399 1.89124 -0.011488 0.426955 0.672227 -0.604831 + -2.06494 1.93633 0.036612 0.195836 0.646167 -0.737643 + -1.93989 1.94675 0.091568 0.284015 0.614345 -0.73615 + -2.15986 1.95106 0.0341 0.269388 0.585078 -0.764927 + -2.0808 1.99615 0.082202 0.248486 0.50442 -0.826931 + -2.19351 1.9624 0.028866 0.198285 0.533191 -0.822429 + -2.10963 2.04865 0.097671 0.238839 0.542194 -0.805594 + -2.06721 2.07636 0.125269 0.213802 0.715921 -0.664639 + -2.03838 2.02386 0.109799 0.271657 0.449616 -0.85091 + -2.23917 1.92694 0.002679 -0.000378154 0.505122 -0.863048 + -2.21586 2.04588 0.063268 0.0890033 0.639748 -0.763414 + -2.14329 2.05998 0.092438 0.250808 0.672469 -0.696334 + -2.15972 2.09474 0.138641 0.0354119 0.920513 -0.389104 + -2.24964 1.89447 -0.013284 -0.0940971 0.614787 -0.78306 + -2.32536 1.91211 -0.01503 -0.274091 0.4257 -0.862354 + -2.26152 2.01042 0.037081 -0.0305131 0.537276 -0.842854 + -2.28514 2.03824 0.065703 -0.320131 0.729777 -0.604103 + -2.23229 2.08063 0.109474 -0.131286 0.898211 -0.419501 + -2.30144 1.86929 -0.036272 -0.147104 0.603321 -0.783814 + -2.33583 1.87963 -0.030984 -0.497391 0.502262 -0.707344 + -2.35673 1.84625 -0.008958 -0.96642 -0.193908 -0.168619 + -2.34898 1.93992 0.013602 -0.632048 0.451421 -0.629869 + -2.25277 1.80374 -0.126729 -0.744028 0.255098 -0.617533 + -2.31679 1.83824 -0.046093 -0.406846 0.181152 -0.895355 + -2.35118 1.84867 -0.040755 -0.740287 0.0530725 -0.670193 + -2.20712 1.69775 -0.19395 -0.83829 -0.0221298 -0.544775 + -2.28134 1.80294 -0.084555 -0.80772 -0.123241 -0.576541 + -2.3157 1.79518 -0.041913 -0.812506 -0.373635 -0.447471 + -2.32125 1.79285 -0.010065 -0.840183 -0.535749 -0.0840558 + -2.28025 1.75988 -0.080374 -0.887256 -0.211078 -0.41015 + -2.28498 1.73488 -0.015069 -0.882903 -0.461293 -0.0876999 + -2.33655 1.81891 0.081797 -0.830046 -0.508139 0.229823 + -2.25308 1.68695 -0.118641 -0.922409 -0.241731 -0.301209 + -2.23459 1.63726 -0.042976 -0.866257 -0.491669 0.0886564 + -2.30028 1.76094 0.076794 -0.746337 -0.569201 0.344952 + -2.21773 1.74971 0.153845 -0.494162 -0.635582 0.59316 + -2.34528 1.85868 0.128905 -0.84888 -0.431524 0.305269 + -2.20269 1.58923 -0.146599 -0.944752 -0.300742 -0.130379 + -2.14133 1.44162 -0.358728 -0.979075 -0.0336256 -0.200702 + -1.98942 1.75695 0.288917 -0.356772 -0.656255 0.664864 + -2.21737 1.81556 0.210996 -0.427094 -0.604982 0.672003 + -2.31566 1.8655 0.189291 -0.664597 -0.516207 0.540222 + -2.35617 1.95194 0.178382 -0.937982 -0.170715 0.301738 + -2.36546 1.88611 0.038201 -0.987757 -0.155769 0.00846897 + -1.8863 1.73845 0.328145 -0.0158764 -0.745407 0.666421 + -2.03039 1.82377 0.333367 -0.381333 -0.563144 0.733113 + -2.14866 1.86319 0.301299 -0.403642 -0.547401 0.733093 + -2.24695 1.91313 0.279594 -0.500256 -0.445701 0.742358 + -2.32655 1.95876 0.238766 -0.76628 -0.176209 0.617872 + -1.8458 1.74 0.305064 0.52681 -0.688237 0.498799 + -1.86725 1.78376 0.373066 0.111726 -0.563128 0.818782 + -1.92727 1.80528 0.372597 -0.278403 -0.514301 0.811163 + -1.94441 1.85603 0.390103 -0.216515 -0.262564 0.940309 + -2.0185 1.88934 0.374807 -0.322445 -0.281857 0.903651 + -1.84087 1.71298 0.255067 0.651502 -0.63517 0.414853 + -1.76504 1.81136 0.280262 0.792631 -0.509071 0.335533 + -1.82675 1.78531 0.349985 0.555052 -0.631462 0.541454 + -1.81491 1.82177 0.372629 0.527454 -0.464782 0.711175 + -1.88439 1.83451 0.390573 -0.0563916 -0.312353 0.948291 + -1.76011 1.78434 0.230264 0.864915 -0.42226 0.271326 + -1.74652 1.79497 0.166664 0.908399 -0.416978 0.0306689 + -1.75319 1.84774 0.302856 0.777004 -0.480524 0.406646 + -1.73164 1.84857 0.10061 0.858913 0.21563 -0.464513 + -1.72133 1.84783 0.1959 0.911492 -0.410839 0.0198552 + -1.71044 1.88591 0.258945 0.894286 -0.39135 0.217018 + -1.73118 1.87639 0.295633 0.789309 -0.46938 0.395821 + -1.79859 1.8846 0.394619 0.534401 -0.330996 0.777726 + -1.78655 1.87289 0.074295 0.450527 0.632341 -0.630214 + -1.72356 1.85728 0.131326 0.922665 0.0418918 -0.383321 + -1.71488 1.87816 0.156571 0.917837 0.0483912 -0.393997 + -1.71266 1.8687 0.221145 0.901692 -0.422774 0.0906235 + -1.77846 1.88169 0.105061 0.479172 0.764593 -0.431034 + -1.81352 1.9195 0.12256 0.322027 0.547946 -0.772045 + -1.75341 1.9167 0.142605 0.43893 0.414666 -0.797115 + -1.69585 1.93395 0.202742 0.924585 0.208427 -0.318907 + -1.69363 1.95115 0.240542 0.930307 0.366312 -0.0185843 + -1.97494 1.98465 0.109118 0.33233 0.565857 -0.754561 + -1.92688 2.02509 0.144879 0.284258 0.599303 -0.748353 + -1.86677 2.02229 0.164923 0.340009 0.709329 -0.617451 + -1.73438 1.97249 0.188775 0.5721 0.6472 -0.503819 + -1.7512 2.00011 0.235748 0.509114 0.857031 -0.0793692 + -1.99032 2.0643 0.14556 0.34963 0.712652 -0.608183 + -1.99179 2.08462 0.19257 0.282208 0.925875 -0.251225 + -1.88359 2.0499 0.211896 0.37028 0.89876 -0.234783 + -1.76364 1.99576 0.302883 0.515872 0.823652 0.235529 + -1.70607 1.9468 0.307678 0.897687 0.252079 0.361406 + -2.06867 2.09668 0.17228 0.154743 0.954999 -0.253045 + -1.97827 2.09008 0.273111 0.201643 0.971959 0.120974 + -1.87008 2.05545 0.292487 0.39163 0.913235 0.112371 + -1.88752 2.03961 0.350326 0.241186 0.790539 0.562918 + -1.78108 1.97992 0.360723 0.487772 0.628816 0.605532 + -2.10191 2.10864 0.233761 0.0295365 0.996133 0.0827478 + -2.11664 2.09202 0.285748 -0.130634 0.849911 0.510476 + -1.99301 2.07346 0.325098 0.0538973 0.842256 0.536377 + -2.19296 2.1067 0.200123 -0.143025 0.98971 0.00429181 + -2.21547 2.09059 0.247028 -0.303141 0.843637 0.44315 + -2.12665 2.04664 0.326351 -0.25651 0.524742 0.811695 + -2.02307 2.03341 0.363666 -0.129289 0.522003 0.843088 + -1.91758 1.99965 0.388943 -0.00327734 0.49643 0.86807 + -2.28133 2.08254 0.160965 -0.38893 0.914944 -0.107751 + -2.30384 2.06635 0.20782 -0.586204 0.755072 0.293651 + -2.30936 2.03195 0.244401 -0.672984 0.459557 0.579569 + -2.22548 2.04512 0.287581 -0.382665 0.570306 0.726855 + -2.33417 2.04015 0.1172 -0.62313 0.714879 -0.317265 + -2.35243 2.02888 0.146103 -0.850768 0.52551 -0.00573434 + -2.35795 1.99449 0.182684 -0.938336 0.177983 0.296392 + -2.30199 1.99562 0.269721 -0.649089 0.103014 0.753705 + -2.36724 1.92857 0.042453 -0.96268 0.182775 -0.1996 + -1.85923 2.80544 -0.885537 -0.0566575 0.92097 0.385491 + -1.86198 2.8063 -0.896229 -0.517549 0.834665 -0.188356 + -1.88113 2.77837 -0.880441 -0.887676 0.347976 -0.301568 + -1.86775 2.79455 -0.86387 -0.756149 0.653669 -0.0309293 + -1.90746 2.75606 -0.820608 -0.904711 0.358815 -0.229673 + -1.90132 2.76373 -0.816285 -0.760978 0.645608 -0.0640537 + -1.84789 2.75571 -0.943404 -0.840199 0.151155 -0.520786 + -1.88434 2.69789 -0.875845 -0.907581 0.0217136 -0.419316 + -1.91067 2.6755 -0.816061 -0.931754 0.0461627 -0.360143 + -1.92103 2.57619 -0.81506 -0.933255 0.123665 -0.337255 + -1.96416 2.38154 -0.780912 -0.945125 0.137365 -0.29643 + -1.90304 2.55966 -0.865218 -0.903307 0.130846 -0.408553 + -1.94617 2.36492 -0.83112 -0.907722 0.112067 -0.404328 + -1.94017 2.29025 -0.862401 -0.903977 0.083575 -0.419334 + -1.96563 2.17909 -0.822059 -0.910114 0.0404193 -0.412383 + -1.9952 2.15733 -0.756969 -0.959982 0.0516612 -0.275255 + -2.21811 2.00879 0.3129 -0.395003 0.247979 0.884579 + -2.22239 1.94999 0.310547 -0.441301 -0.206085 0.873374 + -2.13677 1.92867 0.342689 -0.371068 -0.23758 0.897699 + -2.13249 1.98755 0.345092 -0.317924 0.147624 0.936553 + -2.0289 1.97432 0.382406 -0.221898 0.126425 0.966839 + -1.95482 1.94101 0.397702 -0.213087 0.0210479 0.976806 + -1.92943 1.95493 0.405201 -0.24607 0.181724 0.952064 + -1.83084 1.95588 0.403753 0.275392 0.424646 0.862459 + -1.85901 1.84842 0.398071 0.0344284 -0.398228 0.91664 + -1.84269 1.91125 0.420061 0.107803 -0.0448686 0.993159 + -1.77658 1.91316 0.387345 0.631121 -0.0633982 0.773089 + -1.72682 1.93728 0.344364 0.776531 0.065288 0.626688 + 0.265668 1.59394 -3.44147 -0.667019 0.166743 -0.726142 + 0.284447 1.53902 -3.46994 -0.563875 0.0938647 -0.820508 + 0.26512 1.48501 -3.45027 -0.794046 -0.0651636 -0.604355 + 0.252745 1.5134 -3.43101 -0.970392 -0.0302874 -0.239628 + 0.304657 1.58899 -3.46638 -0.221908 0.303297 -0.926697 + 0.314833 1.51845 -3.48435 -0.220254 0.0978511 -0.970522 + 0.293155 1.47025 -3.46951 -0.519442 -0.0479388 -0.85316 + 0.346372 1.58946 -3.46489 0.107909 0.325204 -0.939467 + 0.356547 1.51892 -3.48286 0.107521 0.208874 -0.972014 + 0.356556 1.43658 -3.49537 -0.064939 0.0445557 -0.996894 + 0.323541 1.44968 -3.48392 -0.390399 -0.0312012 -0.920117 + 0.373982 1.66906 -3.42415 0.264824 0.45265 -0.851456 + 0.387188 1.59292 -3.45548 0.297383 0.343534 -0.890813 + 0.392478 1.51526 -3.47722 0.283267 0.214176 -0.93482 + 0.36635 1.72855 -3.39056 0.291239 0.554463 -0.779584 + 0.413459 1.67197 -3.40473 0.501149 0.410395 -0.761856 + 0.421977 1.58169 -3.44311 0.534741 0.319278 -0.782377 + 0.427267 1.50404 -3.46484 0.518054 0.172092 -0.837857 + 0.392487 1.43292 -3.48973 0.328875 0.0593423 -0.942507 + 0.342152 1.73389 -3.39425 0.0705888 0.584627 -0.808226 + 0.369377 1.76876 -3.3558 0.299537 0.925098 -0.233389 + 0.393999 1.76282 -3.34131 0.171309 0.970884 -0.167442 + 0.405828 1.73146 -3.37114 0.367337 0.605201 -0.706255 + 0.319147 1.76774 -3.36248 -0.363273 0.88824 -0.281182 + 0.345179 1.7741 -3.35949 0.0515844 0.981405 -0.184885 + 0.337551 1.76806 -3.34796 -0.201914 0.661603 0.722158 + 0.363175 1.76019 -3.33739 -0.215014 0.620562 0.754103 + 0.337265 1.70187 -3.33755 -0.347902 0.210406 0.913615 + 0.387798 1.75425 -3.32289 -0.319804 0.552437 0.769765 + 0.418806 1.75845 -3.31183 -0.164774 0.642272 0.748557 + 0.419446 1.76383 -3.32485 0.134831 0.987542 -0.0811213 + 0.431275 1.73247 -3.35469 0.486535 0.577384 -0.655677 + 0.332826 1.64955 -3.32398 -0.425334 0.293407 0.856156 + 0.397704 1.70673 -3.31366 -0.351565 0.176201 0.919432 + 0.428712 1.71092 -3.3026 -0.311634 0.164589 0.935839 + 0.452985 1.74807 -3.30283 0.393021 0.548492 0.738032 + 0.453626 1.75346 -3.31585 0.603686 0.793128 -0.0806897 + 0.298838 1.64784 -3.34424 -0.609866 0.173755 0.773222 + 0.346895 1.59923 -3.29364 -0.383659 0.251729 0.888503 + 0.377439 1.60125 -3.28521 -0.306163 0.253198 0.91769 + 0.393265 1.6544 -3.30009 -0.326688 0.302077 0.895558 + 0.437086 1.67696 -3.29285 -0.316021 0.238812 0.918205 + 0.312908 1.59752 -3.31389 -0.642238 0.142921 0.753063 + 0.352689 1.52951 -3.28365 -0.419835 0.000676443 0.9076 + 0.383233 1.53154 -3.27522 -0.225939 -0.0242077 0.973841 + 0.407894 1.59371 -3.27293 -0.236023 0.191441 0.952703 + 0.423719 1.64686 -3.28781 -0.264426 0.294095 0.91847 + 0.316661 1.5396 -3.31073 -0.707172 -0.0350756 0.706171 + 0.362191 1.44278 -3.28154 -0.298055 -0.0522237 0.953119 + 0.398662 1.44285 -3.2826 -0.069011 -0.0751676 0.99478 + 0.423191 1.45776 -3.27781 0.289214 -0.189953 0.938229 + 0.407762 1.54644 -3.27043 -0.177209 -0.0131404 0.984086 + 0.326163 1.45287 -3.30861 -0.719861 -0.0786141 0.689652 + 0.333676 1.38795 -3.30941 -0.705045 -0.130222 0.697103 + 0.367138 1.38005 -3.28699 -0.276767 -0.156631 0.948086 + 0.403609 1.38012 -3.28805 0.349415 -0.208838 0.913398 + 0.289828 1.47013 -3.35786 -0.834231 -0.104086 0.541502 + 0.29734 1.40521 -3.35865 -0.844975 -0.130331 0.518681 + 0.303945 1.36472 -3.36017 -0.845094 -0.0826799 0.528186 + 0.333694 1.3502 -3.31774 -0.718814 -0.0813498 0.690426 + 0.367156 1.34229 -3.29532 -0.275882 -0.129906 0.952373 + 0.254886 1.56206 -3.39721 -0.930224 -0.05773 0.362424 + 0.268812 1.46739 -3.39265 -0.892278 -0.125632 0.433656 + 0.275158 1.41654 -3.39595 -0.901246 -0.144495 0.408505 + 0.256625 1.47467 -3.42362 -0.991866 -0.126913 0.00975066 + 0.26297 1.42381 -3.42693 -0.988636 -0.141041 0.052024 + 0.271304 1.38229 -3.42404 -0.987434 -0.136579 0.0794979 + 0.281762 1.37604 -3.39747 -0.904888 -0.0941318 0.41511 + 0.267812 1.42086 -3.44995 -0.841517 -0.112645 -0.528355 + 0.276146 1.37933 -3.44706 -0.878157 -0.125465 -0.461627 + 0.281624 1.29572 -3.43696 -0.912371 -0.112645 -0.393562 + 0.278449 1.29525 -3.41344 -0.991527 -0.0594747 0.115489 + 0.288907 1.28901 -3.38686 -0.895488 -0.00221955 0.44508 + 0.295847 1.40611 -3.46918 -0.546644 -0.06583 -0.834773 + 0.290122 1.36875 -3.46237 -0.644234 -0.0933342 -0.759112 + 0.295601 1.28513 -3.45226 -0.645878 -0.131112 -0.752098 + 0.323849 1.39324 -3.48339 -0.4014 -0.0628578 -0.913743 + 0.318124 1.35588 -3.47658 -0.413183 -0.123718 -0.902205 + 0.320655 1.28102 -3.46597 -0.406774 -0.140159 -0.902713 + 0.305931 1.16446 -3.44053 -0.660656 -0.161543 -0.733102 + 0.356864 1.38014 -3.49484 -0.126362 -0.104413 -0.986474 + 0.355104 1.34286 -3.48744 -0.124435 -0.162046 -0.978906 + 0.357635 1.26799 -3.47682 -0.100965 -0.154143 -0.982876 + 0.364915 1.16385 -3.46031 -0.0166002 -0.170351 -0.985244 + 0.330986 1.16034 -3.45424 -0.328372 -0.167938 -0.929499 + 0.390251 1.37789 -3.49104 0.323731 -0.107509 -0.940021 + 0.388491 1.34061 -3.48364 0.322521 -0.169001 -0.931353 + 0.388798 1.26766 -3.47239 0.336895 -0.133383 -0.932046 + 0.424454 1.38712 -3.47086 0.637503 -0.106994 -0.762982 + 0.41784 1.34853 -3.46632 0.644539 -0.161419 -0.747338 + 0.418147 1.27557 -3.45507 0.674683 -0.102163 -0.731003 + 0.420471 1.16378 -3.43851 0.69635 -0.123519 -0.706994 + 0.396078 1.16351 -3.45588 0.369856 -0.156008 -0.915897 + 0.42669 1.44214 -3.46954 0.57362 0.0147284 -0.818989 + 0.450724 1.40273 -3.44467 0.809558 -0.13664 -0.570917 + 0.44411 1.36414 -3.44013 0.819897 -0.167748 -0.547384 + 0.437236 1.28207 -3.43037 0.847101 -0.10886 -0.520163 + 0.451868 1.50135 -3.44542 0.75674 0.145404 -0.63734 + 0.451292 1.43946 -3.45012 0.746997 -0.0444644 -0.663338 + 0.473075 1.42713 -3.40846 0.977177 -0.124535 -0.172094 + 0.463289 1.38508 -3.40906 0.967762 -0.176429 -0.179751 + 0.456415 1.303 -3.3993 0.982106 -0.107288 -0.154783 + 0.452003 1.56124 -3.42383 0.773725 0.237624 -0.587269 + 0.473642 1.46386 -3.41391 0.960039 0.0136139 -0.279535 + 0.473777 1.52375 -3.39233 0.955927 0.0753839 -0.283763 + 0.468309 1.42442 -3.36681 0.957288 -0.169204 0.234457 + 0.443485 1.65151 -3.38545 0.708183 0.304848 -0.636824 + 0.467549 1.61552 -3.37163 0.90485 0.194828 -0.378534 + 0.443239 1.71002 -3.36003 0.648642 0.379142 -0.659935 + 0.467302 1.67403 -3.34621 0.90668 0.181422 -0.380812 + 0.471733 1.65052 -3.32651 0.999425 0.0229898 0.024907 + 0.47438 1.60094 -3.34175 0.998348 0.0525115 0.0233387 + 0.46559 1.73101 -3.32119 0.900692 0.383895 -0.203416 + 0.470021 1.70751 -3.30149 0.930142 0.184118 0.317704 + 0.460963 1.61601 -3.28124 0.860879 -0.0208798 0.508381 + 0.463609 1.56642 -3.29648 0.915187 -0.0595862 0.398601 + 0.480608 1.50917 -3.36245 0.992185 -0.121239 -0.0295068 + 0.461359 1.71412 -3.29308 0.361682 0.314186 0.877766 + 0.452301 1.62262 -3.27282 0.280367 0.15948 0.946552 + 0.438802 1.54524 -3.26529 0.335463 -0.0716281 0.939326 + 0.454815 1.52576 -3.28556 0.818003 -0.145224 0.55658 + 0.471814 1.4685 -3.35154 0.966979 -0.154681 0.202545 + 0.438935 1.59252 -3.26779 0.0108353 0.129298 0.991547 + 0.439204 1.43827 -3.29809 0.751344 -0.257961 0.607403 + 0.435699 1.3942 -3.31337 0.788243 -0.238693 0.567185 + 0.43054 1.35643 -3.32155 0.782094 -0.155106 0.603549 + 0.458523 1.38237 -3.36741 0.946408 -0.164189 0.278126 + 0.450909 1.30012 -3.36699 0.942797 -0.0712561 0.325664 + 0.398451 1.34236 -3.29623 0.354706 -0.16248 0.920752 + 0.397157 1.26612 -3.30336 0.329467 -0.0687138 0.941663 + 0.422927 1.27418 -3.32113 0.735323 -0.0603398 0.675025 + 0.365862 1.26606 -3.30244 -0.204552 -0.0618665 0.976899 + 0.367918 1.14997 -3.30638 -0.119159 -0.00973971 0.992827 + 0.395067 1.15279 -3.31141 0.388679 -0.030788 0.920859 + 0.420837 1.16085 -3.32918 0.681105 -0.0179885 0.731965 + 0.33703 1.26882 -3.31568 -0.632024 -0.0120533 0.774855 + 0.339085 1.15273 -3.31962 -0.469592 0.00475506 0.882871 + 0.344819 1.04559 -3.31039 -0.377088 0.0431288 0.925173 + 0.367929 1.04705 -3.30553 -0.0184225 0.0426845 0.998919 + 0.395078 1.04987 -3.31056 0.340251 0.0451459 0.93925 + 0.307281 1.28333 -3.3581 -0.828768 0.0211548 0.559192 + 0.311948 1.15213 -3.33605 -0.710893 0.0245632 0.702872 + 0.317682 1.04499 -3.32682 -0.682288 0.014202 0.730945 + 0.293574 1.15781 -3.36481 -0.925671 0.00561856 0.378289 + 0.303511 1.04582 -3.34643 -0.916007 -0.047497 0.39834 + 0.329822 0.954448 -3.31498 -0.676156 -0.00282454 0.736753 + 0.348894 0.95487 -3.30343 -0.371924 0.0454988 0.927148 + 0.372004 0.956326 -3.29858 -0.0154366 0.0687572 0.997514 + 0.287422 1.16036 -3.39442 -0.997203 -0.065219 0.0364992 + 0.297359 1.04837 -3.37604 -0.992668 -0.120871 0.000150586 + 0.311327 0.95707 -3.3554 -0.987401 -0.158198 0.00336663 + 0.31565 0.955279 -3.33459 -0.915218 -0.0813393 0.394663 + 0.290597 1.16082 -3.41794 -0.921012 -0.134551 -0.365558 + 0.301268 1.051 -3.39826 -0.90197 -0.188114 -0.388668 + 0.315236 0.959704 -3.37762 -0.890033 -0.23234 -0.39225 + 0.328431 0.873081 -3.3548 -0.886415 -0.254119 -0.386901 + 0.325983 0.871432 -3.34088 -0.981615 -0.190785 -0.00569755 + 0.316602 1.05464 -3.42085 -0.638082 -0.236829 -0.732641 + 0.326013 0.962261 -3.3935 -0.63212 -0.281234 -0.722033 + 0.339208 0.875641 -3.37068 -0.62173 -0.300516 -0.723285 + 0.337573 1.05768 -3.43306 -0.308942 -0.251902 -0.917115 + 0.346984 0.965303 -3.4057 -0.295352 -0.300099 -0.907032 + 0.352342 0.877546 -3.37832 -0.298787 -0.310867 -0.902268 + 0.351308 0.793622 -3.34521 -0.585632 -0.423575 -0.6911 + 0.371502 1.06119 -3.43913 0.0309075 -0.247693 -0.968346 + 0.37083 0.967765 -3.40997 0.0277507 -0.296955 -0.954488 + 0.376188 0.880008 -3.38259 0.0347298 -0.304417 -0.951905 + 0.376782 0.796802 -3.35506 0.035141 -0.412539 -0.910262 + 0.364442 0.795528 -3.35285 -0.263673 -0.424739 -0.866068 + 0.39633 1.06279 -3.43432 0.387835 -0.228971 -0.892836 + 0.395658 0.969371 -3.40516 0.391539 -0.274302 -0.878326 + 0.391738 0.881014 -3.37958 0.38545 -0.279704 -0.879314 + 0.392332 0.79781 -3.35205 0.384028 -0.387575 -0.838039 + 0.382539 0.754393 -3.32904 0.181054 -0.791563 -0.58365 + 0.420724 1.06306 -3.41696 0.734404 -0.181368 -0.654031 + 0.412802 0.969561 -3.39296 0.723538 -0.225647 -0.652362 + 0.408883 0.881203 -3.36738 0.727975 -0.226399 -0.647144 + 0.401204 0.797906 -3.34574 0.695371 -0.345796 -0.629988 + 0.432571 1.06185 -3.3955 0.940653 -0.13046 -0.313293 + 0.424649 0.968343 -3.3715 0.941315 -0.152493 -0.301117 + 0.416303 0.880442 -3.35394 0.938142 -0.159108 -0.30753 + 0.408624 0.797144 -3.3323 0.912442 -0.283093 -0.295479 + 0.391411 0.754491 -3.32273 0.561809 -0.759451 -0.328031 + 0.439561 1.17028 -3.41382 0.930157 -0.0724923 -0.359933 + 0.436006 1.05872 -3.36246 0.995432 -0.0690331 0.0659534 + 0.427063 0.966141 -3.34828 0.994488 -0.0852665 0.0610133 + 0.418717 0.87824 -3.33072 0.993833 -0.0883535 0.0669986 + 0.409874 0.796004 -3.32028 0.971425 -0.23337 0.0432731 + 0.442996 1.16715 -3.38078 0.997977 -0.0625481 0.011358 + 0.430379 1.05593 -3.34019 0.892014 -0.0178645 0.451655 + 0.421436 0.963358 -3.32601 0.88581 -0.0133015 0.463858 + 0.415192 0.876496 -3.31677 0.889175 -0.0271198 0.456762 + 0.43749 1.16426 -3.34847 0.902508 -0.0270727 0.429822 + 0.413725 1.05252 -3.32091 0.627153 0.0315384 0.778257 + 0.409732 0.960962 -3.31246 0.627747 0.0405266 0.777361 + 0.403488 0.8741 -3.30322 0.625487 0.0261601 0.779796 + 0.406349 0.794262 -3.30633 0.87843 -0.178117 0.443436 + 0.391084 0.958309 -3.30211 0.327523 0.0676271 0.94242 + 0.391809 0.872439 -3.29673 0.334886 0.0463619 0.941117 + 0.400293 0.793021 -3.29932 0.642422 -0.139952 0.753464 + 0.392661 0.753352 -3.31071 0.647935 -0.74603 0.153683 + 0.372728 0.870455 -3.2932 -0.019793 0.0439646 0.998837 + 0.388614 0.791359 -3.29284 0.343248 -0.117086 0.931918 + 0.386604 0.752111 -3.3037 0.377316 -0.761029 0.5277 + 0.3702 0.753119 -3.32683 -0.235483 -0.821502 -0.519309 + 0.358254 0.869543 -3.29624 -0.36548 0.0180216 0.930645 + 0.378739 0.790332 -3.29101 0.00538248 -0.12188 0.99253 + 0.37673 0.751086 -3.30187 -0.0604947 -0.782837 0.61928 + 0.339181 0.869123 -3.3078 -0.681102 -0.036879 0.731259 + 0.354396 0.789204 -3.30003 -0.659567 -0.201385 0.724165 + 0.364265 0.78942 -3.29405 -0.36391 -0.150492 0.919196 + 0.36686 0.750868 -3.30785 -0.464317 -0.814603 0.347609 + 0.330306 0.869642 -3.32007 -0.910449 -0.11033 0.398635 + 0.34552 0.789724 -3.31231 -0.886416 -0.281632 0.367356 + 0.343283 0.79065 -3.32308 -0.938966 -0.343858 -0.010273 + 0.364623 0.751795 -3.31862 -0.525326 -0.836273 -0.157102 + 0.345731 0.792301 -3.33699 -0.829666 -0.399699 -0.389737 + -0.47438 1.60094 -3.34175 -0.998548 0.0478403 0.0247741 + -0.471733 1.65052 -3.32651 -0.998958 0.0267621 0.0369747 + -0.470021 1.70751 -3.30149 -0.930142 0.184117 0.317705 + -0.460963 1.61601 -3.28124 -0.840998 -0.0602027 0.537679 + -0.452301 1.62262 -3.27282 -0.285647 0.127585 0.949804 + -0.450724 1.40273 -3.44467 -0.822092 -0.154132 -0.548096 + -0.44411 1.36414 -3.44013 -0.822268 -0.162143 -0.545514 + -0.463289 1.38508 -3.40906 -0.967857 -0.173152 -0.182406 + -0.424454 1.38712 -3.47086 -0.63199 -0.11611 -0.766229 + -0.41784 1.34853 -3.46632 -0.637304 -0.152999 -0.755271 + -0.418147 1.27557 -3.45507 -0.67149 -0.107858 -0.733122 + -0.437236 1.28207 -3.43037 -0.836829 -0.094783 -0.539196 + -0.456415 1.303 -3.3993 -0.983046 -0.0984923 -0.154663 + -0.390251 1.37789 -3.49104 -0.320413 -0.102923 -0.94167 + -0.388491 1.34061 -3.48364 -0.325017 -0.165811 -0.931059 + -0.388798 1.26766 -3.47239 -0.335987 -0.132759 -0.932463 + -0.355104 1.34286 -3.48744 0.122498 -0.165151 -0.978631 + -0.357635 1.26799 -3.47682 0.0907829 -0.143128 -0.985532 + -0.396078 1.16351 -3.45588 -0.368948 -0.157235 -0.916054 + -0.420471 1.16378 -3.43851 -0.694889 -0.121614 -0.708759 + -0.439561 1.17028 -3.41382 -0.920821 -0.0992477 -0.377145 + -0.320655 1.28102 -3.46597 0.410875 -0.133275 -0.901898 + -0.330986 1.16034 -3.45424 0.334008 -0.177682 -0.925671 + -0.364915 1.16385 -3.46031 0.00839878 -0.178721 -0.983864 + -0.371502 1.06119 -3.43913 -0.0279949 -0.251818 -0.96737 + -0.39633 1.06279 -3.43432 -0.390612 -0.232627 -0.890678 + -0.305931 1.16446 -3.44053 0.663043 -0.157854 -0.731749 + -0.316602 1.05464 -3.42085 0.638639 -0.238218 -0.731705 + -0.337573 1.05768 -3.43306 0.307337 -0.253666 -0.917168 + -0.301268 1.051 -3.39826 0.900542 -0.191215 -0.390462 + -0.315236 0.959704 -3.37762 0.890032 -0.232343 -0.392249 + -0.326013 0.962261 -3.3935 0.632114 -0.281237 -0.722037 + -0.346984 0.965303 -3.4057 0.295358 -0.30009 -0.907034 + -0.297359 1.04837 -3.37604 0.992453 -0.122614 0.00156549 + -0.311327 0.95707 -3.3554 0.987401 -0.158204 0.00336517 + -0.325983 0.871432 -3.34088 0.981615 -0.190784 -0.00569855 + -0.328431 0.873081 -3.3548 0.886413 -0.254123 -0.386902 + -0.339208 0.875641 -3.37068 0.621727 -0.300518 -0.723287 + -0.31565 0.955279 -3.33459 0.91522 -0.0813439 0.394659 + -0.330306 0.869642 -3.32007 0.910452 -0.110335 0.398628 + -0.34552 0.789724 -3.31231 0.886415 -0.281638 0.367354 + -0.343283 0.79065 -3.32308 0.938965 -0.34386 -0.0102755 + -0.345731 0.792301 -3.33699 0.829667 -0.399694 -0.38974 + -0.329822 0.954448 -3.31498 0.676153 -0.0028278 0.736756 + -0.339181 0.869123 -3.3078 0.681096 -0.0368787 0.731265 + -0.354396 0.789204 -3.30003 0.659564 -0.201387 0.724167 + -0.36686 0.750868 -3.30785 0.464297 -0.814623 0.347587 + -0.364623 0.751795 -3.31862 0.525295 -0.836294 -0.15709 + -0.358254 0.869543 -3.29624 0.365474 0.0180213 0.930647 + -0.364265 0.78942 -3.29405 0.363908 -0.150485 0.919198 + -0.37673 0.751086 -3.30187 0.0604816 -0.782851 0.619263 + -0.3702 0.753119 -3.32683 0.23548 -0.821508 -0.519301 + -0.351308 0.793622 -3.34521 0.585636 -0.423567 -0.691101 + -0.372728 0.870455 -3.2932 0.0198033 0.0439575 0.998837 + -0.378739 0.790332 -3.29101 -0.00537795 -0.121875 0.992531 + -0.386604 0.752111 -3.3037 -0.377289 -0.761048 0.527693 + -0.391411 0.754491 -3.32273 -0.561795 -0.759461 -0.328034 + -0.372004 0.956326 -3.29858 0.0154422 0.0687606 0.997514 + -0.391809 0.872439 -3.29673 -0.334895 0.0463577 0.941115 + -0.388614 0.791359 -3.29284 -0.343249 -0.117084 0.931918 + -0.400293 0.793021 -3.29932 -0.642421 -0.139949 0.753465 + -0.392661 0.753352 -3.31071 -0.647973 -0.745994 0.153699 + -0.391084 0.958309 -3.30211 -0.327529 0.0676302 0.942418 + -0.403488 0.8741 -3.30322 -0.625483 0.0261647 0.779799 + -0.406349 0.794262 -3.30633 -0.87843 -0.178117 0.443436 + -0.409874 0.796004 -3.32028 -0.971425 -0.23337 0.0432729 + -0.413725 1.05252 -3.32091 -0.63141 0.0243428 0.775067 + -0.409732 0.960962 -3.31246 -0.627746 0.0405256 0.777363 + -0.415192 0.876496 -3.31677 -0.889174 -0.027121 0.456764 + -0.418717 0.87824 -3.33072 -0.993833 -0.0883571 0.066996 + -0.408624 0.797144 -3.3323 -0.912442 -0.283092 -0.29548 + -0.420837 1.16085 -3.32918 -0.675561 -0.0286615 0.736747 + -0.430379 1.05593 -3.34019 -0.890612 -0.0217687 0.454244 + -0.421436 0.963358 -3.32601 -0.885809 -0.0132984 0.46386 + -0.427063 0.966141 -3.34828 -0.994488 -0.0852656 0.0610127 + -0.416303 0.880442 -3.35394 -0.938142 -0.159109 -0.30753 + -0.43749 1.16426 -3.34847 -0.906926 -0.0422804 0.419162 + -0.436006 1.05872 -3.36246 -0.995242 -0.0756892 0.0613517 + -0.424649 0.968343 -3.3715 -0.941315 -0.152494 -0.301117 + -0.408883 0.881203 -3.36738 -0.727975 -0.226398 -0.647145 + -0.401204 0.797906 -3.34574 -0.695371 -0.345795 -0.629987 + -0.442996 1.16715 -3.38078 -0.996657 -0.0780272 0.0242265 + -0.432571 1.06185 -3.3955 -0.9415 -0.136262 -0.308238 + -0.420724 1.06306 -3.41696 -0.728733 -0.19097 -0.657631 + -0.412802 0.969561 -3.39296 -0.723536 -0.22565 -0.652363 + -0.395658 0.969371 -3.40516 -0.391539 -0.274303 -0.878325 + -0.391738 0.881014 -3.37958 -0.385449 -0.279706 -0.879314 + -0.392332 0.79781 -3.35205 -0.384025 -0.387571 -0.838041 + -0.382539 0.754393 -3.32904 -0.181055 -0.791577 -0.583631 + -0.37083 0.967765 -3.40997 -0.0277503 -0.296946 -0.954491 + -0.376188 0.880008 -3.38259 -0.0347356 -0.304427 -0.951902 + -0.376782 0.796802 -3.35506 -0.0351403 -0.412532 -0.910265 + -0.364442 0.795528 -3.35285 0.263674 -0.424733 -0.86607 + -0.352342 0.877546 -3.37832 0.298794 -0.310871 -0.902265 + 1.05998 1.28532 -1.98015 -0.500479 0.759671 0.415235 + 1.06342 1.2998 -2.01482 -0.517699 0.831014 0.203478 + 1.03233 1.27353 -2.02089 -0.633506 0.767002 0.101876 + 1.0713 1.23734 -1.91791 -0.0643823 0.603396 0.794839 + 1.08209 1.28719 -1.9671 -0.214468 0.799704 0.560782 + 1.09271 1.31195 -2.01471 -0.13582 0.96152 0.238813 + 1.06884 1.30877 -2.05737 -0.537622 0.838544 0.088352 + 1.0919 1.23816 -1.92563 0.420318 0.490951 0.763086 + 1.09677 1.28702 -1.96546 0.298827 0.738398 0.604542 + 1.10739 1.31177 -2.01308 0.352868 0.901107 0.251974 + 1.12879 1.30312 -2.07197 0.626266 0.763814 0.156139 + 1.09813 1.32091 -2.05726 0.111312 0.977553 0.178884 + 1.12 1.21675 -1.93469 0.599104 0.437506 0.670569 + 1.12487 1.26561 -1.97452 0.690203 0.521998 0.501135 + 1.13795 1.28203 -2.02425 0.75444 0.588814 0.290031 + 1.1713 1.20323 -1.99566 0.833927 0.388517 0.391945 + 1.18439 1.21965 -2.04539 0.870532 0.398339 0.288964 + 1.18982 1.23474 -2.09363 0.871282 0.439525 0.218367 + 1.15935 1.27338 -2.08314 0.762269 0.6116 0.211874 + 1.19506 1.154 -2.01062 0.920235 0.20978 0.330394 + 1.2081 1.16085 -2.06177 0.955203 0.204545 0.21389 + 1.21353 1.17594 -2.11001 0.970073 0.197506 0.141242 + 1.21609 1.18911 -2.15515 0.976443 0.180113 0.118824 + 1.19843 1.24064 -2.13741 0.885469 0.425197 0.187491 + 1.20655 1.08999 -2.02667 0.937487 -0.0336583 0.346388 + 1.21959 1.09684 -2.07782 0.988019 0.0576245 0.14317 + 1.22 1.10578 -2.12788 0.996792 0.0579571 0.0552058 + 1.22256 1.11894 -2.17302 0.998966 0.0334086 0.0308387 + 1.18376 1.04641 -1.99763 0.722806 -0.372566 0.582019 + 1.20943 1.0394 -2.05198 0.908588 -0.233349 0.346433 + 1.22159 1.03917 -2.09959 0.983991 -0.117904 0.133641 + 1.222 1.04811 -2.14965 0.999124 -0.0418097 0.00180435 + 1.18223 0.997715 -2.03899 0.729089 -0.380592 0.56884 + 1.20455 0.99636 -2.08217 0.900865 -0.276688 0.334495 + 1.21671 0.996135 -2.12977 0.977165 -0.187159 0.100602 + 1.14002 0.999492 -2.00372 0.425208 -0.488246 0.762112 + 1.14063 0.93424 -2.03183 0.470183 -0.250193 0.846364 + 1.17278 0.933552 -2.05711 0.754682 -0.220611 0.617889 + 1.19509 0.932198 -2.10029 0.923103 -0.217563 0.317091 + 1.08136 0.999866 -1.98372 0.0634823 -0.564175 0.823211 + 1.08197 0.934614 -2.01182 0.0409518 -0.313055 0.948852 + 1.09487 0.851658 -2.03071 0.0281718 -0.123912 0.991893 + 1.12967 0.851577 -2.03907 0.426521 -0.090523 0.899936 + 1.16182 0.850889 -2.06436 0.784998 -0.118003 0.608156 + 1.03277 1.04274 -1.95099 -0.33406 -0.624074 0.706354 + 1.03478 0.996049 -1.99593 -0.512928 -0.514025 0.687519 + 1.04575 0.934113 -2.02012 -0.533249 -0.314454 0.785344 + 0.99361 1.0303 -2.00338 -0.592228 -0.645924 0.481715 + 1.0085 0.994477 -2.03599 -0.718557 -0.48874 0.494781 + 1.01947 0.932542 -2.06017 -0.809346 -0.243989 0.534254 + 1.03355 0.850267 -2.06046 -0.757823 -0.144672 0.636219 + 1.05866 0.851156 -2.039 -0.441995 -0.170734 0.880619 + 0.965412 1.07295 -1.98369 -0.613215 -0.625939 0.481837 + 0.933796 1.08842 -2.01277 -0.716398 -0.644078 0.268213 + 0.941223 1.0742 -2.03529 -0.766172 -0.600485 0.228906 + 0.963119 1.03383 -2.04639 -0.737233 -0.550657 0.391489 + 0.881459 1.1607 -1.98568 -0.818843 -0.322511 0.47485 + 0.878107 1.14727 -2.04762 -0.86756 -0.488698 0.0922717 + 0.885534 1.13305 -2.07014 -0.824237 -0.565784 0.0228514 + 0.911168 1.10379 -2.07578 -0.810394 -0.580309 0.0806388 + 0.933064 1.06342 -2.08687 -0.864379 -0.449233 0.225916 + 0.866728 1.19559 -2.00045 -0.965484 -0.0195621 0.259728 + 0.863375 1.18217 -2.06239 -0.991553 -0.127445 0.0240845 + 0.860076 1.20167 -2.10609 -0.973416 0.0488518 0.223772 + 0.855496 1.19582 -2.12385 -0.981997 -0.165933 0.090262 + 0.869982 1.15731 -2.1148 -0.873213 -0.484643 -0.051195 + 0.874871 1.22801 -2.07185 -0.94291 0.313074 0.113599 + 0.871571 1.24751 -2.11555 -0.81898 0.455663 0.348774 + 0.85353 1.2736 -2.17525 -0.857345 0.418926 0.299099 + 0.84895 1.26775 -2.19301 -0.98093 0.134181 -0.140613 + 0.88557 1.27604 -2.1347 -0.380004 0.772985 0.508026 + 0.867528 1.30213 -2.1944 -0.653736 0.737199 0.170783 + 0.877653 1.31105 -2.22518 -0.54257 0.787879 -0.291314 + 0.862907 1.29195 -2.22695 -0.826247 0.292857 -0.481197 + 0.853252 1.22412 -2.18659 -0.924319 -0.253923 -0.284881 + 0.893679 1.25709 -2.07569 0.0220694 0.998675 0.0464986 + 0.898511 1.25175 -2.09719 0.449089 0.871824 0.195555 + 0.91314 1.26874 -2.12118 0.021591 0.790447 0.61215 + 0.91607 1.31578 -2.18266 -0.17146 0.904902 0.389556 + 0.926195 1.32469 -2.21344 -0.121501 0.992012 0.0339035 + 0.917472 1.25296 -2.06952 0.14029 0.958992 -0.246279 + 0.922304 1.24762 -2.09102 0.146563 0.989199 0.00198903 + 0.926001 1.24885 -2.0985 0.0781883 0.90069 0.42737 + 0.940629 1.26583 -2.12249 0.121554 0.768717 0.627933 + 0.94364 1.30847 -2.16914 0.135608 0.817423 0.559849 + 0.932343 1.24639 -2.08904 0.0239433 0.997775 -0.0622208 + 0.93604 1.24762 -2.09652 0.012227 0.936827 0.349578 + 0.938666 1.24684 -2.08927 -0.0369945 0.996177 -0.0791387 + 0.950931 1.24801 -2.0982 0.0329205 0.94512 0.325061 + 0.952937 1.25444 -2.11069 0.144166 0.841326 0.520947 + 0.975395 1.27283 -2.13765 0.00538565 0.796846 0.604158 + 0.963088 1.28421 -2.14945 0.158221 0.74151 0.65202 + 0.953558 1.24724 -2.09095 -0.0209443 0.998688 -0.0467285 + 0.978095 1.2481 -2.099 -0.0331501 0.962586 0.268941 + 0.980101 1.25453 -2.11149 -0.0531189 0.850111 0.523917 + 0.979279 1.24761 -2.09173 -0.0563735 0.996304 -0.0648139 + 0.994803 1.24965 -2.09998 -0.224654 0.906298 0.357987 + 0.991501 1.26042 -2.1175 -0.270358 0.780272 0.563988 + 0.986795 1.27872 -2.14366 -0.254009 0.772631 0.581825 + 0.98358 1.289 -2.15871 -0.126906 0.760235 0.637133 + 0.995988 1.24916 -2.09271 -0.0851331 0.996341 -0.0075334 + 1.00349 1.2501 -2.09354 -0.434017 0.87176 0.227296 + 1.00125 1.25445 -2.10147 -0.511975 0.684279 0.519272 + 0.997946 1.26522 -2.11898 -0.516598 0.662751 0.542114 + 0.992867 1.28516 -2.14769 -0.517531 0.654433 0.551252 + 1.00656 1.2514 -2.06805 -0.397021 0.917475 -0.0247556 + 1.02759 1.27069 -2.09037 -0.659037 0.69473 0.288132 + 1.02535 1.27504 -2.0983 -0.603356 0.608743 0.515163 + 1.01366 1.28604 -2.12274 -0.622116 0.563451 0.543594 + 1.02814 1.26851 -2.06481 -0.663078 0.74807 0.0268115 + 1.06829 1.31095 -2.08292 -0.552074 0.827128 0.105229 + 1.0671 1.31137 -2.09074 -0.55557 0.745859 0.367472 + 1.02682 1.28381 -2.10704 -0.585811 0.600035 0.544778 + 1.09933 1.3241 -2.08277 0.103469 0.990292 0.092818 + 1.09813 1.32451 -2.09058 0.0774698 0.989796 0.119592 + 1.06857 1.32014 -2.09948 -0.357598 0.793443 0.492516 + 1.0547 1.32472 -2.11767 -0.399745 0.758346 0.514892 + 1.04153 1.32695 -2.13338 -0.438641 0.683399 0.583575 + 1.12999 1.30631 -2.09748 0.402923 0.905217 0.135041 + 1.10025 1.32588 -2.1048 0.21047 0.959276 0.188393 + 1.08638 1.33047 -2.12299 0.081562 0.927425 0.365007 + 1.07524 1.34267 -2.14156 0.0262889 0.851369 0.523909 + 1.13211 1.30768 -2.11169 0.598068 0.748019 0.287719 + 1.13483 1.32016 -2.13533 0.542154 0.780571 0.31109 + 1.12368 1.33237 -2.1539 0.493946 0.820482 0.287796 + 1.10077 1.35398 -2.1694 0.27772 0.95455 0.108191 + 1.06475 1.35282 -2.1585 -0.171872 0.961852 0.21284 + 1.16797 1.27928 -2.12693 0.761453 0.586076 0.276956 + 1.17068 1.29177 -2.15056 0.77724 0.586511 0.227824 + 1.1614 1.30587 -2.17791 0.729902 0.683551 -0.000959145 + 1.20333 1.24534 -2.18178 0.904887 0.423654 0.0411874 + 1.19404 1.25944 -2.20913 0.843087 0.504866 -0.185241 + 1.17222 1.27705 -2.23502 0.701489 0.584242 -0.408135 + 1.13848 1.32748 -2.19342 0.605265 0.780558 -0.156151 + 1.22099 1.1938 -2.19952 0.984256 0.171117 -0.0442632 + 1.21118 1.20584 -2.23352 0.897353 0.248278 -0.364851 + 1.18935 1.22346 -2.2594 0.716623 0.315702 -0.62192 + 1.16151 1.23532 -2.27643 0.445482 0.349786 -0.824133 + 1.15208 1.28048 -2.25538 0.457027 0.584309 -0.670604 + 1.22206 1.14287 -2.21088 0.992774 0.0491199 -0.10949 + 1.21225 1.15491 -2.24488 0.892032 0.106052 -0.439353 + 1.19043 1.15683 -2.27277 0.686954 0.15626 -0.709702 + 1.16259 1.1687 -2.28979 0.479238 0.194392 -0.855887 + 1.22178 1.05825 -2.19106 0.998525 -0.0463214 -0.0283155 + 1.22129 1.08217 -2.22892 0.985702 0.00100377 -0.168497 + 1.21091 1.09261 -2.25966 0.883572 0.077633 -0.461816 + 1.18908 1.09453 -2.28755 0.709144 0.147439 -0.689475 + 1.21672 1.00479 -2.21402 0.981893 -0.179261 -0.0612473 + 1.21572 1.01392 -2.24892 0.972811 -0.11192 -0.202762 + 1.20533 1.02435 -2.27965 0.874005 -0.00766102 -0.485856 + 1.21694 0.994661 -2.17261 0.987063 -0.159318 -0.0180065 + 1.20229 0.929581 -2.1775 0.897026 -0.340019 -0.282367 + 1.18536 0.92208 -2.19428 0.684215 -0.566058 -0.459814 + 1.18263 0.925247 -2.21716 0.800222 -0.577455 0.161837 + 1.19733 0.936526 -2.23764 0.914921 -0.381313 0.132361 + 1.20206 0.931056 -2.13466 0.96795 -0.229049 0.102999 + 1.18161 0.848802 -2.12835 0.9718 -0.232379 -0.0400575 + 1.17411 0.848005 -2.15023 0.831795 -0.331734 -0.445049 + 1.15718 0.840503 -2.16701 0.636737 -0.24471 -0.731221 + 1.17464 0.849946 -2.09397 0.941004 -0.149959 0.303355 + 1.16603 0.768546 -2.09129 0.964699 -0.0548629 0.257579 + 1.16863 0.769838 -2.11595 0.988116 -0.109205 -0.108175 + 1.16113 0.769041 -2.13784 0.881889 -0.134174 -0.451961 + 1.15321 0.769489 -2.06168 0.791262 -0.0205788 0.611131 + 1.15215 0.686861 -2.05711 0.785551 -0.0148813 0.618618 + 1.16406 0.690491 -2.08423 0.964006 -0.00472616 0.265839 + 1.16666 0.691784 -2.10889 0.99467 -0.00626989 -0.102915 + 1.13029 0.768856 -2.04348 0.441823 -0.000572975 0.897102 + 1.12924 0.686226 -2.03891 0.428056 -0.0320119 0.903185 + 1.13621 0.587613 -2.05397 0.432606 -0.165015 0.886353 + 1.15403 0.589054 -2.06807 0.78537 -0.0896097 0.612506 + 1.16595 0.592685 -2.09518 0.965714 -0.0177749 0.258999 + 1.0955 0.768938 -2.03512 0.0102689 -0.00240859 0.999944 + 1.09711 0.686301 -2.0312 0.0065365 -0.0522498 0.998613 + 1.10408 0.587688 -2.04625 -0.0021076 -0.225797 0.974172 + 1.06671 0.769714 -2.04136 -0.441448 -0.018945 0.897087 + 1.06833 0.687077 -2.03744 -0.448153 -0.0774159 0.890598 + 1.08172 0.589274 -2.05105 -0.44449 -0.257877 0.857862 + 1.12386 0.47308 -2.08207 0.00682784 -0.426215 0.904596 + 1.0416 0.768826 -2.06282 -0.764613 -0.039805 0.64326 + 1.04521 0.690924 -2.05702 -0.760811 -0.0866785 0.643159 + 1.05861 0.59312 -2.07063 -0.757637 -0.257227 0.59985 + 1.08718 0.477048 -2.099 -0.716519 -0.446145 0.536242 + 1.1015 0.474666 -2.08687 -0.434988 -0.45779 0.775379 + 1.02846 0.770206 -2.08467 -0.944289 -0.0839063 0.318242 + 1.03207 0.692305 -2.07887 -0.945825 -0.103693 0.307675 + 1.04842 0.596061 -2.08753 -0.931336 -0.235435 0.277819 + 1.077 0.479988 -2.11589 -0.885545 -0.409333 0.219671 + 1.11186 0.421268 -2.1308 -0.520964 -0.842644 0.136188 + 1.01351 0.849065 -2.09167 -0.934 -0.155291 0.32176 + 1.02616 0.76936 -2.10888 -0.992172 -0.121291 -0.0297297 + 1.03002 0.695723 -2.10101 -0.99381 -0.106443 -0.0317969 + 1.04637 0.599478 -2.10967 -0.978798 -0.197055 -0.0558987 + 1.07573 0.482105 -2.12961 -0.929249 -0.360717 -0.0798702 + 0.999435 0.931338 -2.09138 -0.808717 -0.275684 0.519591 + 1.01121 0.848216 -2.11588 -0.963468 -0.266946 0.0216602 + 1.02911 0.770366 -2.12836 -0.940629 -0.146486 -0.306199 + 1.03297 0.696732 -2.12049 -0.945599 -0.11165 -0.305575 + 1.04869 0.601661 -2.12474 -0.934774 -0.158737 -0.317805 + 0.978011 0.997999 -2.079 -0.709799 -0.511257 0.484564 + 0.972961 0.929833 -2.1305 -0.920958 -0.348939 0.173427 + 0.979065 0.922293 -2.15239 -0.848147 -0.495076 -0.188536 + 1.01732 0.840676 -2.13777 -0.901475 -0.317098 -0.294604 + 0.951538 0.996494 -2.11812 -0.860916 -0.408472 0.303272 + 0.978927 0.926189 -2.17924 -0.747799 -0.64023 0.175791 + 1.02388 0.894998 -2.16015 -0.401774 -0.577137 -0.710979 + 1.02568 0.840159 -2.15425 -0.599736 -0.22659 -0.767446 + 1.03748 0.769849 -2.14484 -0.695031 -0.167143 -0.699282 + 0.917717 1.07644 -2.13672 -0.924901 -0.373323 0.0720254 + 0.936191 1.00951 -2.16796 -0.938098 -0.339544 0.0684168 + 0.963497 0.938828 -2.19881 -0.879676 -0.463391 0.106956 + 0.895616 1.12806 -2.12044 -0.850682 -0.522942 -0.0535753 + 0.914917 1.08625 -2.20238 -0.939312 -0.26993 -0.211734 + 0.934132 1.02369 -2.22206 -0.948817 -0.241037 -0.204075 + 0.961437 0.953005 -2.25291 -0.931587 -0.308391 -0.192461 + 0.867738 1.18561 -2.17754 -0.865158 -0.410179 -0.288539 + 0.892817 1.13787 -2.1861 -0.898418 -0.36582 -0.242943 + 0.912048 1.16244 -2.2362 -0.741425 -0.199704 -0.640631 + 0.931123 1.09699 -2.24512 -0.793727 -0.121234 -0.59607 + 0.886969 1.21019 -2.22764 -0.697033 -0.253338 -0.670794 + 0.931082 1.25449 -2.2667 -0.496383 -0.0603342 -0.866004 + 0.949901 1.17835 -2.26912 -0.549463 -0.0739628 -0.832238 + 0.968976 1.1129 -2.27805 -0.502827 -0.04349 -0.863292 + 0.867208 1.24832 -2.22053 -0.739263 -0.192247 -0.645393 + 0.911322 1.29262 -2.25959 -0.458741 0.154976 -0.874951 + 0.95385 1.31284 -2.26747 -0.175347 0.690413 -0.701843 + 0.96008 1.28314 -2.28307 -0.261777 0.222177 -0.939207 + 0.978899 1.20701 -2.2855 -0.239876 0.0117626 -0.970732 + 0.926069 1.31171 -2.25781 -0.30531 0.70978 -0.634821 + 0.953976 1.32582 -2.2231 0.0342874 0.996947 -0.0701552 + 0.988777 1.31557 -2.2638 0.260973 0.793595 -0.549637 + 0.995008 1.28587 -2.2794 0.155317 0.385048 -0.909733 + 0.960743 1.32387 -2.20375 0.234705 0.934046 0.269205 + 0.995544 1.31361 -2.24446 0.0722315 0.958511 0.275753 + 1.01332 1.3184 -2.2382 -0.41811 0.862893 -0.283899 + 1.03281 1.27082 -2.2821 0.0358828 0.357108 -0.933374 + 0.980918 1.30501 -2.19008 0.402933 0.839999 0.363383 + 1.00405 1.30768 -2.23924 -0.281354 0.823435 0.492743 + 0.963815 1.28962 -2.15547 0.192433 0.761993 0.618333 + 0.984307 1.29441 -2.16473 -0.11699 0.889984 0.440729 + 0.989425 1.29907 -2.18486 0.103819 0.970214 0.218876 + 0.994769 1.30012 -2.18287 -0.530824 0.846309 0.0445665 + 1.00404 1.31084 -2.18183 -0.762132 0.645132 0.0543976 + 0.989652 1.29545 -2.16274 -0.485407 0.791507 0.371345 + 1.00858 1.30598 -2.15145 -0.702517 0.597802 0.386137 + 1.03105 1.3371 -2.15031 -0.520343 0.761098 0.387264 + 1.02651 1.34196 -2.1807 -0.463705 0.885612 0.0258765 + 1.05061 1.34378 -2.1937 -0.156115 0.946896 -0.281098 + 1.03742 1.32022 -2.25119 -0.0504328 0.766035 -0.640818 + 1.08663 1.34494 -2.2046 0.0211869 0.883564 -0.46783 + 1.07665 1.30058 -2.25546 0.135038 0.654696 -0.743732 + 1.07203 1.25118 -2.28636 0.0414754 0.317842 -0.947236 + 1.0167 1.19196 -2.28819 -0.0603842 0.114855 -0.991545 + 1.11835 1.3309 -2.21378 0.341041 0.797469 -0.497729 + 1.10837 1.28654 -2.26464 0.105259 0.564383 -0.818775 + 1.1178 1.24139 -2.28569 0.144738 0.343141 -0.928065 + 1.09284 1.20037 -2.29555 -0.0275252 0.162899 -0.986259 + 1.13861 1.19058 -2.29487 0.21427 0.212422 -0.953396 + 1.14382 1.12486 -2.30849 0.180341 0.202571 -0.962519 + 1.09754 1.1286 -2.30501 -0.0863768 0.163649 -0.98273 + 1.0214 1.12019 -2.29765 -0.234945 0.0613805 -0.970069 + 1.1678 1.10298 -2.30341 0.513874 0.193492 -0.83576 + 1.16584 1.03957 -2.31782 0.508209 0.128806 -0.851547 + 1.14473 1.04282 -2.32601 0.171387 0.175421 -0.969461 + 1.09845 1.04656 -2.32253 -0.16029 0.156543 -0.974578 + 1.18713 1.03112 -2.30196 0.706941 0.0671098 -0.704082 + 1.17165 0.958611 -2.31734 0.715925 -0.0592651 -0.695658 + 1.15719 0.962818 -2.33057 0.533968 0.0190873 -0.845289 + 1.13607 0.966066 -2.33875 0.147679 0.105123 -0.983433 + 1.18985 0.951844 -2.29503 0.857141 -0.159269 -0.48984 + 1.1573 0.873995 -2.31263 0.89054 -0.175441 -0.419713 + 1.14982 0.878091 -2.32685 0.775457 -0.0886108 -0.625152 + 1.13536 0.882297 -2.34008 0.628111 -0.00830906 -0.778079 + 1.19632 0.945651 -2.27253 0.939227 -0.262051 -0.22177 + 1.16377 0.867801 -2.29013 0.945305 -0.270189 -0.182747 + 1.14423 0.789423 -2.31181 0.985597 -0.125514 -0.113334 + 1.1409 0.791504 -2.32781 0.936473 -0.0553848 -0.34634 + 1.13343 0.795599 -2.34203 0.828379 0.00282698 -0.560161 + 1.16295 0.863015 -2.27155 0.914036 -0.377747 0.147802 + 1.14342 0.784636 -2.29323 0.965048 -0.194038 0.176158 + 1.13797 0.70623 -2.31128 0.981378 -0.0362149 0.188641 + 1.13845 0.705678 -2.32895 0.995329 -0.00336656 -0.0964816 + 1.13513 0.707759 -2.34495 0.936861 0.0132466 -0.349451 + 1.14825 0.851736 -2.25108 0.793352 -0.418347 0.442242 + 1.13618 0.782888 -2.27523 0.851006 -0.250532 0.461543 + 1.13074 0.704483 -2.29328 0.871564 -0.0617221 0.486381 + 1.1363 0.615698 -2.29634 0.876214 0.10804 0.469655 + 1.14159 0.612412 -2.30958 0.978392 0.100237 0.180833 + 1.13375 0.847744 -2.23277 0.535838 -0.43715 0.722341 + 1.12168 0.778896 -2.25693 0.567932 -0.297964 0.767248 + 1.11761 0.705719 -2.27586 0.585761 -0.117022 0.801991 + 1.12317 0.616935 -2.27891 0.585473 0.0943926 0.805178 + 1.13814 0.898036 -2.20703 0.438425 -0.799892 0.409824 + 1.10266 0.89077 -2.19775 0.171176 -0.891553 0.419323 + 1.09827 0.840477 -2.22349 0.139698 -0.415647 0.898733 + 1.09638 0.779218 -2.24812 0.147142 -0.315785 0.937352 + 1.14087 0.89487 -2.18415 0.181535 -0.651745 -0.736392 + 1.10379 0.887968 -2.17995 -0.056183 -0.669864 -0.740355 + 1.05801 0.890812 -2.18881 -0.0683178 -0.921668 0.381917 + 1.06003 0.842575 -2.22376 -0.0370483 -0.466899 0.883534 + 1.05814 0.781314 -2.24839 -0.118949 -0.308103 0.943888 + 1.14119 0.839975 -2.17954 0.290378 -0.135224 -0.947309 + 1.10412 0.833077 -2.17534 -0.147752 -0.117206 -0.982055 + 1.05913 0.888012 -2.17101 -0.257002 -0.666987 -0.699342 + 1.02374 0.898894 -2.187 -0.312877 -0.853588 0.416529 + 1.14987 0.770103 -2.1543 0.720032 -0.147736 -0.678033 + 1.13389 0.769575 -2.16683 0.322624 -0.153736 -0.933959 + 1.10545 0.770067 -2.16789 -0.096934 -0.1288 -0.986922 + 1.06094 0.833172 -2.1651 -0.271326 -0.115415 -0.955543 + 1.14854 0.696128 -2.14536 0.728905 -0.0266264 -0.684096 + 1.13383 0.698417 -2.15678 0.339681 -0.0545352 -0.938958 + 1.10539 0.69891 -2.15785 -0.103199 -0.0689841 -0.992266 + 1.06227 0.770162 -2.15765 -0.332669 -0.141325 -0.932394 + 1.1598 0.695065 -2.1289 0.895542 -0.0176321 -0.444628 + 1.16114 0.598766 -2.13427 0.896834 0.0679929 -0.437111 + 1.1524 0.601022 -2.147 0.735166 0.0813882 -0.672984 + 1.13769 0.60331 -2.15842 0.343561 0.0724325 -0.936333 + 1.16799 0.595484 -2.11426 0.994751 0.0322279 -0.0971157 + 1.17101 0.479522 -2.13682 0.984385 -0.113959 -0.134164 + 1.16676 0.481555 -2.14921 0.888762 -0.0654523 -0.453672 + 1.15803 0.483812 -2.16194 0.720971 -0.0421243 -0.691684 + 1.16896 0.476723 -2.11774 0.954935 -0.182944 0.23373 + 1.15345 0.42109 -2.14024 0.643304 -0.760109 -0.0916182 + 1.1492 0.423124 -2.15263 0.513027 -0.709054 -0.483783 + 1.14009 0.424542 -2.15971 0.129355 -0.650965 -0.748006 + 1.14892 0.485228 -2.16902 0.351338 -0.0311114 -0.935731 + 1.16158 0.474473 -2.10095 0.783568 -0.266171 0.561404 + 1.14607 0.418842 -2.12345 0.415155 -0.834931 0.361299 + 1.12617 0.418888 -2.11867 -0.143097 -0.873927 0.464516 + 1.14375 0.473033 -2.08685 0.413466 -0.365003 0.834158 + 1.02577 0.850658 -2.22195 -0.383354 -0.55021 0.741828 + 1.03522 0.783103 -2.25302 -0.470771 -0.306281 0.827385 + 1.05701 0.707977 -2.2673 -0.116851 -0.16208 0.979835 + 1.01641 0.853552 -2.23117 -0.754539 -0.485275 0.44179 + 1.02586 0.785997 -2.26224 -0.820055 -0.239906 0.519572 + 1.03409 0.709764 -2.27193 -0.494739 -0.174611 0.851319 + 1.00098 0.866192 -2.25074 -0.871518 -0.440288 0.215877 + 1.01861 0.788239 -2.27782 -0.938213 -0.176467 0.297683 + 1.02532 0.709987 -2.2807 -0.823235 -0.152377 0.546869 + 1.04215 0.62187 -2.28487 -0.789832 -0.192263 0.582409 + 1.05092 0.621647 -2.2761 -0.479042 -0.111171 0.870724 + 0.995492 0.872387 -2.27345 -0.951575 -0.292723 -0.0939096 + 1.01313 0.794434 -2.30052 -0.986528 -0.13705 0.0893289 + 1.01268 0.711888 -2.31788 -0.987929 -0.106946 0.11207 + 1.01807 0.712229 -2.29628 -0.940514 -0.124627 0.316073 + 1.03636 0.619611 -2.29634 -0.907596 -0.225532 0.354126 + 0.968884 0.959752 -2.28037 -0.780075 -0.105775 -0.61668 + 1.00294 0.879134 -2.30091 -0.925343 -0.168031 -0.339861 + 1.013 0.796612 -2.3188 -0.980697 -0.0319422 -0.192904 + 0.950337 1.03443 -2.26481 -0.743805 -0.0289728 -0.667769 + 1.00071 0.962823 -2.29867 -0.456441 0.10721 -0.883271 + 1.00844 0.882676 -2.31566 -0.698545 0.0236632 -0.715174 + 1.0185 0.800157 -2.33354 -0.750151 0.0916483 -0.654885 + 0.982165 1.0375 -2.28311 -0.452766 0.0518603 -0.89012 + 1.03711 0.965133 -2.31498 -0.349584 0.138326 -0.926637 + 1.04484 0.884987 -2.33197 -0.337747 0.168016 -0.92612 + 1.0424 0.800438 -2.34678 -0.371493 0.168365 -0.913042 + 1.01742 0.713383 -2.35019 -0.762061 -0.0197523 -0.647204 + 1.03459 1.04479 -2.30271 -0.326657 0.0684687 -0.94266 + 1.10097 0.9669 -2.3348 -0.197787 0.142765 -0.969793 + 1.08924 0.885849 -2.34433 -0.192659 0.160198 -0.968101 + 1.0868 0.801298 -2.35914 -0.167292 0.177914 -0.969722 + 1.12434 0.885013 -2.34828 0.264996 0.092495 -0.959803 + 1.11343 0.800102 -2.36117 0.279094 0.135057 -0.950719 + 1.08213 0.711068 -2.3752 -0.179845 0.0387804 -0.98293 + 1.04131 0.713664 -2.36342 -0.382405 0.0322836 -0.923431 + 1.12445 0.797383 -2.35297 0.695644 0.0563259 -0.716175 + 1.11905 0.709535 -2.36943 0.687185 0.0367277 -0.725553 + 1.10876 0.709872 -2.37723 0.264532 0.041797 -0.963471 + 1.11486 0.60827 -2.36842 0.258883 -0.159847 -0.95259 + 1.09444 0.609757 -2.36693 -0.185086 -0.210049 -0.960012 + 1.12802 0.707751 -2.35849 0.829758 0.0260422 -0.557515 + 1.13219 0.609351 -2.35256 0.821458 -0.024545 -0.56974 + 1.12515 0.607935 -2.36061 0.677186 -0.0720334 -0.732277 + 1.1393 0.60936 -2.33903 0.932486 0.020612 -0.360618 + 1.15191 0.500329 -2.31369 0.929786 -0.122929 -0.346967 + 1.14743 0.496383 -2.32059 0.815537 -0.217254 -0.536376 + 1.14039 0.494966 -2.32864 0.669375 -0.25898 -0.696323 + 1.14208 0.61186 -2.32725 0.991352 0.0600068 -0.116704 + 1.15469 0.502829 -2.30192 0.993291 -0.0827761 -0.0807485 + 1.14351 0.450377 -2.29177 0.659772 -0.727186 0.189476 + 1.13903 0.446433 -2.29866 0.516083 -0.853316 -0.0742224 + 1.15469 0.508324 -2.29292 0.982488 0.00623827 0.186223 + 1.14352 0.455873 -2.28276 0.614539 -0.584816 0.529463 + 1.13594 0.461731 -2.2739 0.284404 -0.474977 0.832773 + 1.13274 0.444378 -2.30264 0.110688 -0.94111 -0.319467 + 1.13409 0.49291 -2.33262 0.268242 -0.385113 -0.883025 + 1.1494 0.511608 -2.27968 0.856033 0.0202964 0.516522 + 1.14182 0.517466 -2.27081 0.587188 0.053829 0.807659 + 1.12253 0.520015 -2.26434 0.155237 -0.00723777 0.987851 + 1.11479 0.462892 -2.27405 -0.179241 -0.531526 0.82786 + 1.10388 0.619483 -2.27244 0.160199 0.0342834 0.986489 + 1.10138 0.521175 -2.26449 -0.096181 -0.0634202 0.993341 + 1.08372 0.521401 -2.2679 -0.386055 -0.157544 0.908923 + 1.07832 0.518992 -2.27237 -0.694707 -0.302119 0.652768 + 1.10939 0.460482 -2.27852 -0.423215 -0.645372 0.635911 + 1.09232 0.706041 -2.26706 0.148063 -0.150144 0.977514 + 1.06858 0.62142 -2.27269 -0.104782 -0.0165703 0.994357 + 1.07254 0.516733 -2.28383 -0.815608 -0.336935 0.470382 + 1.06895 0.510228 -2.29484 -0.867531 -0.398146 0.298111 + 1.10581 0.453976 -2.28953 -0.541841 -0.740233 0.398074 + 1.03097 0.61927 -2.31794 -0.958479 -0.239242 0.155182 + 1.03061 0.616257 -2.33139 -0.95443 -0.272163 -0.122433 + 1.0686 0.507215 -2.30829 -0.904745 -0.425569 0.0181301 + 1.07128 0.502696 -2.31543 -0.753701 -0.5066 -0.418677 + 1.10849 0.449455 -2.29667 -0.435324 -0.89232 -0.119407 + 1.01255 0.714067 -2.33616 -0.981893 -0.065473 -0.177761 + 1.03548 0.615573 -2.34542 -0.7422 -0.269034 -0.613807 + 1.05363 0.612355 -2.35515 -0.393364 -0.240066 -0.887487 + 1.08943 0.499476 -2.32516 -0.389011 -0.453864 -0.801672 + 1.11368 0.494398 -2.33113 -0.203735 -0.437988 -0.87559 + 1.04073 0.698706 -2.13558 -0.713148 -0.104059 -0.693247 + 1.05645 0.603637 -2.13983 -0.704541 -0.0801143 -0.705127 + 1.06553 0.699021 -2.1484 -0.349855 -0.0813898 -0.933261 + 1.07573 0.604393 -2.14977 -0.35183 0.0035847 -0.936057 + 1.08285 0.485512 -2.15402 -0.681325 -0.204194 -0.702923 + 1.07804 0.484288 -2.14468 -0.889979 -0.307988 -0.336274 + 1.1156 0.604282 -2.15922 -0.0967296 0.0416103 -0.99444 + 1.12682 0.4862 -2.16981 -0.102032 -0.050279 -0.99351 + 1.10213 0.486269 -2.16396 -0.339421 -0.0902369 -0.936296 + 1.1154 0.424609 -2.15386 -0.371155 -0.692349 -0.618786 + 1.11059 0.423385 -2.14451 -0.561708 -0.79476 -0.229869 + -0.997946 1.26522 -2.11898 0.513961 0.664279 0.54275 + -1.00125 1.25445 -2.10147 0.49388 0.722412 0.483947 + -0.995988 1.24916 -2.09271 0.137383 0.988455 0.0638961 + -0.992867 1.28516 -2.14769 0.517531 0.654433 0.551252 + -1.01366 1.28604 -2.12274 0.618266 0.564757 0.546623 + -1.02682 1.28381 -2.10704 0.605076 0.584117 0.541008 + -1.02535 1.27504 -2.0983 0.618559 0.607946 0.497781 + -0.98358 1.289 -2.15871 0.12037 0.770654 0.625782 + -0.989652 1.29545 -2.16274 0.485407 0.791507 0.371345 + -1.00858 1.30598 -2.15145 0.679477 0.608474 0.409963 + -1.04153 1.32695 -2.13338 0.471476 0.673538 0.569261 + -1.0547 1.32472 -2.11767 0.399746 0.758346 0.514892 + -0.963815 1.28962 -2.15547 -0.183418 0.76356 0.61914 + -0.984307 1.29441 -2.16473 0.184608 0.909914 0.371453 + -0.994769 1.30012 -2.18287 0.530824 0.846309 0.0445665 + -1.00404 1.31084 -2.18183 0.762133 0.645131 0.0543958 + -1.03105 1.3371 -2.15031 0.545055 0.711874 0.442889 + -0.94364 1.30847 -2.16914 -0.129731 0.826017 0.548513 + -0.960743 1.32387 -2.20375 -0.24203 0.92725 0.285708 + -0.980918 1.30501 -2.19008 -0.409937 0.822185 0.394923 + -0.989425 1.29907 -2.18486 -0.0279772 0.965028 0.26065 + -1.00405 1.30768 -2.23924 0.00391974 0.973144 -0.230163 + -0.91607 1.31578 -2.18266 0.146177 0.911733 0.383894 + -0.926195 1.32469 -2.21344 0.147343 0.988701 0.0275828 + -0.953976 1.32582 -2.2231 -0.0476521 0.994555 -0.0926787 + -0.995544 1.31361 -2.24446 -0.480832 0.87652 0.0226444 + -0.867528 1.30213 -2.1944 0.64391 0.737506 0.203627 + -0.877653 1.31105 -2.22518 0.52307 0.79705 -0.301842 + -0.926069 1.31171 -2.25781 0.30531 0.70978 -0.634821 + -0.95385 1.31284 -2.26747 0.142053 0.726263 -0.672579 + -0.988777 1.31557 -2.2638 -0.284012 0.824853 -0.48883 + -0.85353 1.2736 -2.17525 0.858587 0.42444 0.28754 + -0.862907 1.29195 -2.22695 0.811404 0.257808 -0.524556 + -0.911322 1.29262 -2.25959 0.503629 0.168112 -0.847406 + -0.96008 1.28314 -2.28307 0.17252 0.194486 -0.965615 + -0.860076 1.20167 -2.10609 0.977829 0.0527667 0.202649 + -0.855496 1.19582 -2.12385 0.978324 -0.177524 0.106618 + -0.84895 1.26775 -2.19301 0.979329 0.151404 -0.134134 + -0.867208 1.24832 -2.22053 0.739929 -0.204522 -0.640839 + -0.863375 1.18217 -2.06239 0.993131 -0.0925709 0.0715634 + -0.869982 1.15731 -2.1148 0.884538 -0.464575 -0.0419891 + -0.853252 1.22412 -2.18659 0.910534 -0.270865 -0.312346 + -0.867738 1.18561 -2.17754 0.87106 -0.384364 -0.30581 + -0.886969 1.21019 -2.22764 0.715305 -0.245911 -0.654115 + -0.881459 1.1607 -1.98568 0.836032 -0.418033 0.355386 + -0.878107 1.14727 -2.04762 0.861581 -0.493556 0.11866 + -0.895625 1.19651 -1.94679 0.679581 0.0758583 0.729668 + -0.919078 1.1614 -1.93562 0.592096 -0.306943 0.745123 + -0.913074 1.14522 -1.9566 0.648751 -0.560217 0.515052 + -0.933796 1.08842 -2.01277 0.695637 -0.667017 0.26679 + -0.965973 1.17276 -1.91092 0.227956 0.232167 0.945587 + -0.989426 1.13764 -1.89975 0.246311 -0.112053 0.962692 + -1.01057 1.10156 -1.91032 0.289681 -0.495879 0.81865 + -1.00457 1.08538 -1.93131 0.531615 -0.606849 0.590863 + -0.965412 1.07295 -1.98369 0.62144 -0.626088 0.470984 + -0.980129 1.18837 -1.91784 -0.155311 0.546138 0.823172 + -1.05117 1.12715 -1.90057 -0.0720222 -0.172502 0.982373 + -1.07232 1.09107 -1.91115 -0.167933 -0.338119 0.925999 + -1.07934 1.04655 -1.93878 -0.0952247 -0.598105 0.79574 + -1.03277 1.04274 -1.95099 0.337861 -0.646305 0.684207 + -0.968084 1.25517 -1.97953 -0.387692 0.803678 0.451438 + -0.995964 1.18457 -1.9229 -0.352308 0.648609 0.674675 + -0.994254 1.24243 -1.98218 -0.313337 0.772476 0.552359 + -1.00474 1.23713 -1.98197 -0.164995 0.700408 0.69441 + -1.00645 1.17926 -1.92269 0.17016 0.608507 0.77509 + -1.00371 1.25545 -2.02439 0.0514151 0.998662 0.00544936 + -1.00651 1.25674 -2.00165 0.345471 0.887877 0.303849 + -1.01179 1.25355 -1.99836 0.302508 0.6774 0.670536 + -1.01002 1.23395 -1.97869 0.313765 0.690069 0.652194 + -0.999056 1.25046 -2.06722 -0.00821282 0.996386 -0.0845421 + -1.00656 1.2514 -2.06805 0.397023 0.917475 -0.0247581 + -1.01075 1.25642 -2.02412 0.39108 0.91962 -0.0368103 + -1.01355 1.2577 -2.00138 0.396477 0.847567 0.352755 + -1.00349 1.2501 -2.09354 0.379706 0.883014 0.275881 + -1.02759 1.27069 -2.09037 0.666809 0.684758 0.294061 + -1.02814 1.26851 -2.06481 0.657845 0.752402 0.0336234 + -1.03233 1.27353 -2.02089 0.621997 0.778144 0.0872426 + -1.02889 1.25904 -1.98622 0.587514 0.689515 0.423552 + -1.06829 1.31095 -2.08292 0.542167 0.832557 0.113592 + -1.06884 1.30877 -2.05737 0.545276 0.832817 0.0953446 + -1.06342 1.2998 -2.01482 0.52789 0.827737 0.190221 + -1.05998 1.28532 -1.98015 0.500475 0.759674 0.415236 + -1.02713 1.2549 -1.9832 0.604321 0.609386 0.513268 + -1.0671 1.31137 -2.09074 0.543852 0.75975 0.356376 + -1.09813 1.32451 -2.09058 -0.0774698 0.989796 0.119592 + -1.09933 1.3241 -2.08277 -0.103469 0.990292 0.0928181 + -1.09813 1.32091 -2.05726 -0.0662083 0.990246 0.122598 + -1.09271 1.31195 -2.01471 0.192334 0.93755 0.289841 + -1.06857 1.32014 -2.09948 0.357598 0.793443 0.492516 + -1.10025 1.32588 -2.1048 -0.21047 0.959276 0.188393 + -1.12999 1.30631 -2.09748 -0.583818 0.800172 0.137405 + -1.12879 1.30312 -2.07197 -0.634952 0.759198 0.143021 + -1.10739 1.31177 -2.01308 -0.37813 0.865314 0.329014 + -1.08638 1.33047 -2.12299 -0.0815611 0.927425 0.365008 + -1.13483 1.32016 -2.13533 -0.546919 0.78092 0.301735 + -1.13211 1.30768 -2.11169 -0.602332 0.741187 0.296374 + -1.16797 1.27928 -2.12693 -0.741695 0.596655 0.306418 + -1.15935 1.27338 -2.08314 -0.766914 0.602076 0.222145 + -1.07524 1.34267 -2.14156 -0.0555998 0.875751 0.479551 + -1.12368 1.33237 -2.1539 -0.487332 0.824377 0.287941 + -1.17068 1.29177 -2.15056 -0.756138 0.618157 0.214795 + -1.19843 1.24064 -2.13741 -0.8893 0.4146 0.193011 + -1.18982 1.23474 -2.09363 -0.863451 0.44763 0.232551 + -1.06475 1.35282 -2.1585 0.101397 0.965176 0.241151 + -1.10077 1.35398 -2.1694 -0.265897 0.951102 0.157173 + -1.13848 1.32748 -2.19342 -0.592972 0.789267 -0.159502 + -1.1614 1.30587 -2.17791 -0.728637 0.684893 0.00321937 + -1.20333 1.24534 -2.18178 -0.907637 0.418511 0.0323098 + -1.02651 1.34196 -2.1807 0.542868 0.839361 -0.0277047 + -1.05061 1.34378 -2.1937 0.165444 0.948647 -0.269625 + -1.08663 1.34494 -2.2046 -0.102595 0.902739 -0.417776 + -1.01332 1.3184 -2.2382 0.547404 0.720786 -0.425225 + -1.03742 1.32022 -2.25119 0.117719 0.732925 -0.670047 + -1.07665 1.30058 -2.25546 -0.14845 0.629303 -0.762851 + -1.10837 1.28654 -2.26464 -0.148225 0.589922 -0.793739 + -1.11835 1.3309 -2.21378 -0.335664 0.820271 -0.463125 + -1.03281 1.27082 -2.2821 -0.0395279 0.360896 -0.931768 + -1.07203 1.25118 -2.28636 -0.0492017 0.326226 -0.94401 + -1.1178 1.24139 -2.28569 -0.153469 0.33296 -0.930368 + -1.15208 1.28048 -2.25538 -0.445637 0.593702 -0.670019 + -1.17222 1.27705 -2.23502 -0.703084 0.590601 -0.396059 + -0.995008 1.28587 -2.2794 -0.0708546 0.313121 -0.947066 + -1.0167 1.19196 -2.28819 0.145802 0.063277 -0.987288 + -1.09284 1.20037 -2.29555 0.0156244 0.15068 -0.988459 + -1.13861 1.19058 -2.29487 -0.199552 0.197976 -0.959679 + -1.16151 1.23532 -2.27643 -0.4365 0.339639 -0.833135 + -0.978899 1.20701 -2.2855 0.214445 -0.105507 -0.971021 + -0.949901 1.17835 -2.26912 0.487822 -0.0853515 -0.86876 + -1.0214 1.12019 -2.29765 0.226025 0.0597328 -0.972288 + -1.09754 1.1286 -2.30501 0.0923096 0.155919 -0.983447 + -0.931082 1.25449 -2.2667 0.502481 -0.101082 -0.858659 + -0.912048 1.16244 -2.2362 0.742272 -0.204591 -0.638103 + -0.931123 1.09699 -2.24512 0.800447 -0.114848 -0.588298 + -0.968976 1.1129 -2.27805 0.489197 -0.0102413 -0.872113 + -0.892817 1.13787 -2.1861 0.889539 -0.374692 -0.261394 + -0.914917 1.08625 -2.20238 0.938747 -0.273717 -0.209362 + -0.950337 1.03443 -2.26481 0.756223 -0.0757755 -0.649911 + -0.982165 1.0375 -2.28311 0.431807 0.0327135 -0.901373 + -1.03459 1.04479 -2.30271 0.305288 0.0956658 -0.947442 + -0.895616 1.12806 -2.12044 0.830532 -0.556333 -0.0266369 + -0.917717 1.07644 -2.13672 0.926829 -0.364878 0.0886172 + -0.936191 1.00951 -2.16796 0.938149 -0.340312 0.0637488 + -0.934132 1.02369 -2.22206 0.945119 -0.246923 -0.213961 + -0.961437 0.953005 -2.25291 0.932227 -0.305135 -0.194536 + -0.963497 0.938828 -2.19881 0.880176 -0.456005 0.131715 + -1.00098 0.866192 -2.25074 0.886738 -0.412694 0.208279 + -0.995492 0.872387 -2.27345 0.953943 -0.288193 -0.0832949 + -1.00294 0.879134 -2.30091 0.925387 -0.111381 -0.36229 + -0.968884 0.959752 -2.28037 0.77473 -0.113828 -0.621962 + -0.978927 0.926189 -2.17924 0.752956 -0.639752 0.154192 + -1.01641 0.853552 -2.23117 0.753174 -0.482156 0.447498 + -1.02586 0.785997 -2.26224 0.815901 -0.248553 0.522042 + -1.01861 0.788239 -2.27782 0.939258 -0.18201 0.290975 + -1.01313 0.794434 -2.30052 0.99075 -0.111301 0.0776356 + -0.979065 0.922293 -2.15239 0.807931 -0.559457 -0.185083 + -1.02374 0.898894 -2.187 0.312873 -0.85359 0.416526 + -1.02577 0.850658 -2.22195 0.388857 -0.542864 0.744371 + -1.03522 0.783103 -2.25302 0.481767 -0.320266 0.815678 + -0.972961 0.929833 -2.1305 0.900174 -0.380436 0.212027 + -1.01732 0.840676 -2.13777 0.899668 -0.248521 -0.358937 + -1.02388 0.894998 -2.16015 0.462293 -0.62034 -0.633611 + -1.05913 0.888012 -2.17101 0.251894 -0.67017 -0.698155 + -1.05801 0.890812 -2.18881 0.0859891 -0.913209 0.398315 + -0.951538 0.996494 -2.11812 0.859201 -0.369314 0.354092 + -0.999435 0.931338 -2.09138 0.804647 -0.246179 0.540315 + -1.01351 0.849065 -2.09167 0.913003 -0.197079 0.35719 + -1.01121 0.848216 -2.11588 0.945877 -0.324019 -0.0181096 + -0.933064 1.06342 -2.08687 0.858895 -0.460662 0.223808 + -0.978011 0.997999 -2.079 0.758528 -0.453955 0.467504 + -1.01947 0.932542 -2.06017 0.795258 -0.263178 0.54617 + -0.911168 1.10379 -2.07578 0.80663 -0.588071 0.0593278 + -0.963119 1.03383 -2.04639 0.748008 -0.578389 0.3255 + -0.99361 1.0303 -2.00338 0.615135 -0.625954 0.479364 + -1.0085 0.994477 -2.03599 0.722616 -0.497106 0.480324 + -0.885534 1.13305 -2.07014 0.797171 -0.603043 0.0292839 + -0.941223 1.0742 -2.03529 0.771318 -0.587966 0.243647 + -1.03478 0.996049 -1.99593 0.468903 -0.551507 0.689906 + -1.08136 0.999866 -1.98372 -0.0548452 -0.570719 0.819312 + -1.08197 0.934614 -2.01182 -0.0357968 -0.30742 0.9509 + -1.04575 0.934113 -2.02012 0.540151 -0.332626 0.773044 + -1.05866 0.851156 -2.039 0.465684 -0.1441 0.87314 + -1.03355 0.850267 -2.06046 0.744675 -0.111229 0.658094 + -1.14002 0.999492 -2.00372 -0.428208 -0.490105 0.759233 + -1.14063 0.93424 -2.03183 -0.472585 -0.247653 0.845773 + -1.12967 0.851577 -2.03907 -0.435333 -0.102752 0.894387 + -1.09487 0.851658 -2.03071 -0.0171549 -0.138014 0.990282 + -1.14155 1.04819 -1.96235 -0.444964 -0.499886 0.743049 + -1.18376 1.04641 -1.99763 -0.72388 -0.373934 0.579802 + -1.18223 0.997715 -2.03899 -0.731642 -0.377332 0.567733 + -1.17278 0.933552 -2.05711 -0.757249 -0.227732 0.612137 + -1.13452 1.09271 -1.93472 -0.473356 -0.29061 0.831553 + -1.18087 1.097 -1.97232 -0.786382 -0.145549 0.600349 + -1.20943 1.0394 -2.05198 -0.907324 -0.236158 0.347839 + -1.20455 0.99636 -2.08217 -0.90108 -0.279217 0.331802 + -1.19509 0.932198 -2.10029 -0.924229 -0.21468 0.315773 + -1.12806 1.13932 -1.92108 -0.47885 -0.113127 0.870577 + -1.17441 1.14361 -1.95867 -0.801984 0.0666919 0.593611 + -1.19506 1.154 -2.01062 -0.920036 0.189181 0.343139 + -1.20655 1.08999 -2.02667 -0.935891 -0.0299462 0.351015 + -1.22159 1.03917 -2.09959 -0.98391 -0.117636 0.134473 + -1.04301 1.16262 -1.8932 0.133149 -0.0513431 0.989765 + -1.1199 1.17478 -1.91371 -0.493117 0.0888113 0.865418 + -1.15065 1.19284 -1.94371 -0.71697 0.309258 0.624751 + -1.01556 1.17173 -1.90419 0.760199 -0.0698092 0.645929 + -1.06864 1.19787 -1.89697 -0.0668883 0.269033 0.960805 + -1.08924 1.19869 -1.90469 -0.396321 0.285385 0.872631 + -1.12 1.21675 -1.93469 -0.551201 0.431076 0.714388 + -1.01913 1.22641 -1.96018 0.627543 0.583386 0.515606 + -1.04118 1.20698 -1.90796 0.402937 0.535494 0.742218 + -1.04919 1.23547 -1.93097 0.51686 0.609857 0.600775 + -1.0713 1.23734 -1.91791 0.102608 0.579982 0.808142 + -1.0919 1.23816 -1.92563 -0.405117 0.512916 0.756834 + -1.08209 1.28719 -1.9671 0.201602 0.787771 0.582042 + -1.09677 1.28702 -1.96546 -0.269858 0.725272 0.63337 + -1.12487 1.26561 -1.97452 -0.688063 0.521079 0.505022 + -1.1713 1.20323 -1.99566 -0.841512 0.383715 0.38029 + -1.13795 1.28203 -2.02425 -0.762557 0.584175 0.277931 + -1.18439 1.21965 -2.04539 -0.866383 0.413741 0.279642 + -1.2081 1.16085 -2.06177 -0.952283 0.209359 0.222093 + -1.21353 1.17594 -2.11001 -0.969684 0.200845 0.139194 + -1.21959 1.09684 -2.07782 -0.987542 0.0428089 0.151421 + -1.21609 1.18911 -2.15515 -0.976556 0.180552 0.117213 + -1.22 1.10578 -2.12788 -0.998328 0.0453873 0.0357814 + -1.222 1.04811 -2.14965 -0.999567 -0.0291064 -0.0042963 + -1.21694 0.994661 -2.17261 -0.985818 -0.165691 -0.0266178 + -1.21671 0.996135 -2.12977 -0.974455 -0.197491 0.106937 + -1.22099 1.1938 -2.19952 -0.981535 0.183936 -0.052501 + -1.22256 1.11894 -2.17302 -0.999135 0.0174052 0.037759 + -1.22178 1.05825 -2.19106 -0.99895 -0.0413191 -0.0198028 + -1.19404 1.25944 -2.20913 -0.842281 0.506105 -0.185525 + -1.21118 1.20584 -2.23352 -0.898297 0.250219 -0.361183 + -1.22206 1.14287 -2.21088 -0.990419 0.0363191 -0.13323 + -1.22129 1.08217 -2.22892 -0.98527 0.00674648 -0.170875 + -1.18935 1.22346 -2.2594 -0.719424 0.310921 -0.621094 + -1.21225 1.15491 -2.24488 -0.894669 0.0980596 -0.435835 + -1.21091 1.09261 -2.25966 -0.885664 0.0811615 -0.457179 + -1.21572 1.01392 -2.24892 -0.973416 -0.110442 -0.200661 + -1.21672 1.00479 -2.21402 -0.984798 -0.163603 -0.0583763 + -1.19043 1.15683 -2.27277 -0.690651 0.159853 -0.7053 + -1.18908 1.09453 -2.28755 -0.712265 0.140421 -0.687722 + -1.18713 1.03112 -2.30196 -0.710449 0.0709391 -0.700164 + -1.20533 1.02435 -2.27965 -0.87336 -0.00392701 -0.487059 + -1.16259 1.1687 -2.28979 -0.476371 0.199149 -0.856394 + -1.1678 1.10298 -2.30341 -0.508134 0.186461 -0.840852 + -1.16584 1.03957 -2.31782 -0.506369 0.133145 -0.851976 + -1.15719 0.962818 -2.33057 -0.535158 0.0205648 -0.844501 + -1.17165 0.958611 -2.31734 -0.715913 -0.0580579 -0.695771 + -1.14382 1.12486 -2.30849 -0.171817 0.212831 -0.961864 + -1.14473 1.04282 -2.32601 -0.167486 0.17144 -0.970854 + -1.13607 0.966066 -2.33875 -0.138194 0.121932 -0.982871 + -1.09845 1.04656 -2.32253 0.179509 0.174572 -0.968143 + -1.10097 0.9669 -2.3348 0.191406 0.149956 -0.969988 + -1.12434 0.885013 -2.34828 -0.253533 0.0805339 -0.963969 + -1.13536 0.882297 -2.34008 -0.632201 -0.0214727 -0.774507 + -1.14982 0.878091 -2.32685 -0.769442 -0.0947641 -0.631647 + -1.03711 0.965133 -2.31498 0.356648 0.1458 -0.922792 + -1.04484 0.884987 -2.33197 0.344746 0.158787 -0.925169 + -1.08924 0.885849 -2.34433 0.191035 0.15841 -0.968717 + -1.0868 0.801298 -2.35914 0.169472 0.175315 -0.969816 + -1.11343 0.800102 -2.36117 -0.281418 0.130983 -0.950604 + -1.00071 0.962823 -2.29867 0.46774 0.0829306 -0.879967 + -1.00844 0.882676 -2.31566 0.731944 0.0655467 -0.678204 + -1.0185 0.800157 -2.33354 0.746164 0.10086 -0.658078 + -1.0424 0.800438 -2.34678 0.376242 0.174763 -0.90989 + -1.013 0.796612 -2.3188 0.984096 -0.0173709 -0.176788 + -1.01255 0.714067 -2.33616 0.981993 -0.0676485 -0.176391 + -1.01742 0.713383 -2.35019 0.761943 -0.0199871 -0.647335 + -1.04131 0.713664 -2.36342 0.383081 0.0313276 -0.923183 + -1.01268 0.711888 -2.31788 0.987855 -0.108988 0.110743 + -1.03097 0.61927 -2.31794 0.958563 -0.239018 0.155006 + -1.03061 0.616257 -2.33139 0.955511 -0.269124 -0.120714 + -1.03548 0.615573 -2.34542 0.742011 -0.268425 -0.614302 + -1.01807 0.712229 -2.29628 0.940291 -0.125168 0.316522 + -1.03636 0.619611 -2.29634 0.907352 -0.22889 0.352592 + -1.07254 0.516733 -2.28383 0.823433 -0.33009 0.461518 + -1.06895 0.510228 -2.29484 0.869973 -0.390427 0.301186 + -1.0686 0.507215 -2.30829 0.904745 -0.425569 0.0181301 + -1.02532 0.709987 -2.2807 0.824082 -0.15566 0.544664 + -1.04215 0.62187 -2.28487 0.791337 -0.190151 0.581058 + -1.07832 0.518992 -2.27237 0.694781 -0.297948 0.654604 + -1.10939 0.460482 -2.27852 0.423204 -0.645375 0.635916 + -1.10581 0.453976 -2.28953 0.541849 -0.740229 0.398071 + -1.03409 0.709764 -2.27193 0.494388 -0.175086 0.851425 + -1.05092 0.621647 -2.2761 0.479625 -0.113771 0.870067 + -1.08372 0.521401 -2.2679 0.389703 -0.154769 0.907843 + -1.11479 0.462892 -2.27405 0.179231 -0.531548 0.827848 + -1.14352 0.455873 -2.28276 -0.614396 -0.584942 0.529491 + -1.05814 0.781314 -2.24839 0.106915 -0.323176 0.94028 + -1.05701 0.707977 -2.2673 0.117343 -0.162842 0.979649 + -1.06858 0.62142 -2.27269 0.105327 -0.0159405 0.99431 + -1.10138 0.521175 -2.26449 0.0961818 -0.0634178 0.993341 + -1.13594 0.461731 -2.2739 -0.284397 -0.475026 0.832748 + -1.06003 0.842575 -2.22376 0.0480452 -0.477106 0.877531 + -1.09638 0.779218 -2.24812 -0.146904 -0.316047 0.937301 + -1.09232 0.706041 -2.26706 -0.147655 -0.149629 0.977655 + -1.10388 0.619483 -2.27244 -0.159453 0.0332052 0.986647 + -1.12253 0.520015 -2.26434 -0.155235 -0.00723967 0.987851 + -1.09827 0.840477 -2.22349 -0.160293 -0.437186 0.884972 + -1.12168 0.778896 -2.25693 -0.567481 -0.297125 0.767908 + -1.11761 0.705719 -2.27586 -0.585134 -0.117937 0.802315 + -1.12317 0.616935 -2.27891 -0.586304 0.0930942 0.804724 + -1.14182 0.517466 -2.27081 -0.588514 0.0556494 0.806569 + -1.10266 0.89077 -2.19775 -0.197894 -0.879598 0.432603 + -1.13814 0.898036 -2.20703 -0.464844 -0.809113 0.359521 + -1.13375 0.847744 -2.23277 -0.574906 -0.38876 0.719965 + -1.13618 0.782888 -2.27523 -0.856429 -0.239476 0.457362 + -1.13074 0.704483 -2.29328 -0.87211 -0.063217 0.485208 + -1.10379 0.887968 -2.17995 0.060497 -0.673013 -0.737153 + -1.14087 0.89487 -2.18415 -0.0875418 -0.608867 -0.788427 + -1.18263 0.925247 -2.21716 -0.622278 -0.778185 0.0848483 + -1.14825 0.851736 -2.25108 -0.786011 -0.394068 0.476337 + -1.14342 0.784636 -2.29323 -0.964957 -0.187838 0.183233 + -1.06094 0.833172 -2.1651 0.279115 -0.124189 -0.952193 + -1.10412 0.833077 -2.17534 0.161889 -0.102368 -0.981485 + -1.14119 0.839975 -2.17954 -0.229248 -0.208736 -0.950723 + -1.18536 0.92208 -2.19428 -0.57468 -0.717364 -0.393868 + -1.02568 0.840159 -2.15425 0.655604 -0.151227 -0.739806 + -1.03748 0.769849 -2.14484 0.687521 -0.151285 -0.710231 + -1.06227 0.770162 -2.15765 0.34487 -0.126877 -0.930036 + -1.10545 0.770067 -2.16789 0.106903 -0.140537 -0.984287 + -1.02911 0.770366 -2.12836 0.942205 -0.142091 -0.303413 + -1.03297 0.696732 -2.12049 0.945662 -0.111886 -0.305296 + -1.04073 0.698706 -2.13558 0.712414 -0.10528 -0.693817 + -1.06553 0.699021 -2.1484 0.349788 -0.081262 -0.933298 + -1.02616 0.76936 -2.10888 0.992449 -0.118358 -0.032174 + -1.03002 0.695723 -2.10101 0.993768 -0.106764 -0.0320364 + -1.04637 0.599478 -2.10967 0.978674 -0.197789 -0.0554709 + -1.04869 0.601661 -2.12474 0.934463 -0.159424 -0.318376 + -1.05645 0.603637 -2.13983 0.704596 -0.080267 -0.705054 + -1.02846 0.770206 -2.08467 0.944851 -0.0875422 0.315585 + -1.03207 0.692305 -2.07887 0.945868 -0.103481 0.307612 + -1.04842 0.596061 -2.08753 0.931367 -0.236396 0.276896 + -1.0416 0.768826 -2.06282 0.762627 -0.0432898 0.645388 + -1.04521 0.690924 -2.05702 0.760141 -0.0851726 0.644152 + -1.05861 0.59312 -2.07063 0.757117 -0.258057 0.60015 + -1.077 0.479988 -2.11589 0.885547 -0.409332 0.219669 + -1.06671 0.769714 -2.04136 0.441229 -0.018642 0.897201 + -1.06833 0.687077 -2.03744 0.44869 -0.0766497 0.890394 + -1.08172 0.589274 -2.05105 0.444696 -0.258233 0.857648 + -1.1015 0.474666 -2.08687 0.434987 -0.457791 0.77538 + -1.08718 0.477048 -2.099 0.716515 -0.446151 0.536242 + -1.0955 0.768938 -2.03512 -0.0096505 -0.00163475 0.999952 + -1.09711 0.686301 -2.0312 -0.00672013 -0.0519661 0.998626 + -1.10408 0.587688 -2.04625 0.00189308 -0.226072 0.974109 + -1.12386 0.47308 -2.08207 -0.00682588 -0.426211 0.904598 + -1.12617 0.418888 -2.11867 0.143104 -0.873915 0.464536 + -1.13029 0.768856 -2.04348 -0.442236 6.37393e-006 0.896899 + -1.12924 0.686226 -2.03891 -0.428091 -0.032047 0.903167 + -1.13621 0.587613 -2.05397 -0.432652 -0.164941 0.886344 + -1.14375 0.473033 -2.08685 -0.413464 -0.365003 0.834158 + -1.14607 0.418842 -2.12345 -0.415151 -0.834933 0.361298 + -1.15321 0.769489 -2.06168 -0.790741 -0.0193701 0.611845 + -1.15215 0.686861 -2.05711 -0.785308 -0.0153978 0.618914 + -1.15403 0.589054 -2.06807 -0.785343 -0.0895455 0.612551 + -1.16158 0.474473 -2.10095 -0.783567 -0.26617 0.561405 + -1.16182 0.850889 -2.06436 -0.789171 -0.111564 0.603956 + -1.16603 0.768546 -2.09129 -0.966794 -0.0468868 0.25122 + -1.16406 0.690491 -2.08423 -0.964123 -0.0053059 0.265404 + -1.16595 0.592685 -2.09518 -0.965689 -0.0179263 0.259082 + -1.16896 0.476723 -2.11774 -0.954937 -0.18294 0.233728 + -1.17464 0.849946 -2.09397 -0.940809 -0.148815 0.304521 + -1.16863 0.769838 -2.11595 -0.989999 -0.098763 -0.100731 + -1.16666 0.691784 -2.10889 -0.994627 -0.00561677 -0.103375 + -1.16799 0.595484 -2.11426 -0.994743 0.032077 -0.0972466 + -1.20206 0.931056 -2.13466 -0.965125 -0.24409 0.0946233 + -1.18161 0.848802 -2.12835 -0.975642 -0.210354 -0.0622393 + -1.16113 0.769041 -2.13784 -0.883528 -0.140874 -0.446691 + -1.1598 0.695065 -2.1289 -0.895884 -0.0166744 -0.443975 + -1.16114 0.598766 -2.13427 -0.896871 0.0678782 -0.437052 + -1.20229 0.929581 -2.1775 -0.910707 -0.382372 -0.156217 + -1.17411 0.848005 -2.15023 -0.855011 -0.2943 -0.427018 + -1.14987 0.770103 -2.1543 -0.714222 -0.15701 -0.682081 + -1.14854 0.696128 -2.14536 -0.728383 -0.0255434 -0.684694 + -1.1524 0.601022 -2.147 -0.7351 0.0812548 -0.673072 + -1.19733 0.936526 -2.23764 -0.910781 -0.412197 -0.0239214 + -1.15718 0.840503 -2.16701 -0.664751 -0.3096 -0.679893 + -1.19632 0.945651 -2.27253 -0.938886 -0.264204 -0.220656 + -1.16377 0.867801 -2.29013 -0.944612 -0.271212 -0.184802 + -1.16295 0.863015 -2.27155 -0.908683 -0.389057 0.151425 + -1.18985 0.951844 -2.29503 -0.858413 -0.157394 -0.488215 + -1.1573 0.873995 -2.31263 -0.890423 -0.18813 -0.414433 + -1.1409 0.791504 -2.32781 -0.934481 -0.0598672 -0.350944 + -1.14423 0.789423 -2.31181 -0.985035 -0.132769 -0.109896 + -1.13343 0.795599 -2.34203 -0.830751 -0.00657771 -0.556605 + -1.12802 0.707751 -2.35849 -0.829548 0.0253955 -0.557858 + -1.13513 0.707759 -2.34495 -0.936996 0.0127874 -0.349106 + -1.13845 0.705678 -2.32895 -0.995218 -0.00478094 -0.0975668 + -1.13797 0.70623 -2.31128 -0.981244 -0.0370933 0.189168 + -1.12445 0.797383 -2.35297 -0.69148 0.0503562 -0.720639 + -1.11905 0.709535 -2.36943 -0.687322 0.0365727 -0.725432 + -1.12515 0.607935 -2.36061 -0.677289 -0.0719191 -0.732193 + -1.13219 0.609351 -2.35256 -0.821535 -0.024576 -0.569628 + -1.1393 0.60936 -2.33903 -0.932397 0.0198639 -0.36089 + -1.10876 0.709872 -2.37723 -0.264773 0.0421609 -0.963389 + -1.11486 0.60827 -2.36842 -0.25921 -0.160316 -0.952423 + -1.13409 0.49291 -2.33262 -0.268775 -0.384067 -0.883319 + -1.14039 0.494966 -2.32864 -0.668861 -0.258289 -0.697073 + -1.14743 0.496383 -2.32059 -0.816314 -0.21488 -0.536151 + -1.08213 0.711068 -2.3752 0.1795 0.038333 -0.983011 + -1.09444 0.609757 -2.36693 0.18542 -0.210577 -0.959832 + -1.11368 0.494398 -2.33113 0.20415 -0.437528 -0.875724 + -1.13274 0.444378 -2.30264 -0.110693 -0.941104 -0.319485 + -1.13903 0.446433 -2.29866 -0.516098 -0.853304 -0.0742616 + -1.05363 0.612355 -2.35515 0.393394 -0.239989 -0.887494 + -1.08943 0.499476 -2.32516 0.388475 -0.452992 -0.802425 + -1.10849 0.449455 -2.29667 0.435325 -0.89232 -0.119399 + -1.14351 0.450377 -2.29177 -0.659804 -0.72715 0.189505 + -1.07128 0.502696 -2.31543 0.753702 -0.506603 -0.418673 + -1.15469 0.502829 -2.30192 -0.993581 -0.0799511 -0.0800288 + -1.15191 0.500329 -2.31369 -0.929023 -0.120917 -0.349708 + -1.14208 0.61186 -2.32725 -0.991341 0.0601525 -0.116724 + -1.15469 0.508324 -2.29292 -0.983315 0.00974674 0.181647 + -1.14159 0.612412 -2.30958 -0.978726 0.0985513 0.179955 + -1.1363 0.615698 -2.29634 -0.876296 0.108311 0.469441 + -1.1494 0.511608 -2.27968 -0.85582 0.0211998 0.516839 + -1.13389 0.769575 -2.16683 -0.332162 -0.167181 -0.928288 + -1.13383 0.698417 -2.15678 -0.340758 -0.0530967 -0.93865 + -1.13769 0.60331 -2.15842 -0.343528 0.0724807 -0.936341 + -1.10539 0.69891 -2.15785 0.103182 -0.0690151 -0.992265 + -1.1156 0.604282 -2.15922 0.09669 0.0416671 -0.994442 + -1.14892 0.485228 -2.16902 -0.351338 -0.0311122 -0.935732 + -1.15803 0.483812 -2.16194 -0.72097 -0.0421274 -0.691685 + -1.16676 0.481555 -2.14921 -0.888763 -0.0654538 -0.45367 + -1.07573 0.604393 -2.14977 0.35174 0.0034731 -0.936091 + -1.10213 0.486269 -2.16396 0.339424 -0.0902265 -0.936296 + -1.12682 0.4862 -2.16981 0.102029 -0.0502667 -0.993511 + -1.14009 0.424542 -2.15971 -0.129369 -0.650949 -0.748016 + -1.1492 0.423124 -2.15263 -0.51305 -0.709021 -0.483806 + -1.08285 0.485512 -2.15402 0.681322 -0.204196 -0.702925 + -1.1154 0.424609 -2.15386 0.371179 -0.692332 -0.61879 + -1.15345 0.42109 -2.14024 -0.643329 -0.760089 -0.0916043 + -1.17101 0.479522 -2.13682 -0.984385 -0.113959 -0.134165 + -1.07804 0.484288 -2.14468 0.889978 -0.307993 -0.336272 + -1.11059 0.423385 -2.14451 0.561725 -0.794749 -0.229867 + -1.07573 0.482105 -2.12961 0.92925 -0.360716 -0.0798683 + -1.11186 0.421268 -2.1308 0.520977 -0.842635 0.136198 + -0.82689 1.29929 -2.95643 0.617033 0.112407 -0.778867 + -0.803656 1.18343 -2.94072 0.894638 0.0821922 -0.439167 + -0.830034 1.19612 -2.97807 0.575668 0.130191 -0.807252 + -0.863031 1.19676 -2.98754 0.0166199 0.127931 -0.991644 + -0.807811 1.06184 -2.97689 0.813349 0.110984 -0.571092 + -0.829019 1.06609 -2.99239 0.448895 0.146127 -0.881556 + -0.862015 1.06673 -3.00185 0.0786585 0.166031 -0.982978 + -0.849719 0.941343 -3.02531 0.0819267 0.201683 -0.976018 + -0.794835 1.04874 -2.94176 0.979301 0.0348408 -0.199389 + -0.798052 0.929471 -2.98389 0.970016 0.0461573 -0.238617 + -0.807629 0.936939 -3.00444 0.786653 0.140009 -0.601311 + -0.828837 0.941197 -3.01994 0.43165 0.200252 -0.879533 + -0.843533 0.816506 -3.05207 0.0783337 0.171048 -0.982144 + -0.795305 0.91505 -2.94799 0.995247 -0.057503 0.0785865 + -0.798724 0.797702 -2.99535 0.996104 -0.0539096 0.0697939 + -0.800369 0.806341 -3.01686 0.969461 0.0372879 -0.242393 + -0.809946 0.813808 -3.03741 0.778168 0.12367 -0.61576 + -0.822651 0.81636 -3.04669 0.433601 0.172667 -0.884407 + -0.804682 0.788575 -2.97448 0.872766 -0.186689 0.451029 + -0.805048 0.714447 -3.00096 0.881252 -0.124899 0.455846 + -0.801237 0.720285 -3.01431 0.99601 -0.0639239 0.0622769 + -0.802882 0.728925 -3.03582 0.957643 -0.0363168 -0.285659 + -0.809008 0.733702 -3.04896 0.761482 -0.0171783 -0.647958 + -0.815622 0.709411 -2.99118 0.654729 -0.166238 0.737356 + -0.807446 0.681117 -3.00185 0.834553 -0.416012 0.361185 + -0.803635 0.686956 -3.0152 0.92744 -0.370181 -0.0531234 + -0.804799 0.693068 -3.03042 0.872678 -0.351701 -0.338731 + -0.810925 0.697845 -3.04357 0.669432 -0.359414 -0.650141 + -0.823056 0.706647 -2.98622 0.458703 -0.203063 0.865076 + -0.814927 0.677555 -2.99494 0.659907 -0.466328 0.589118 + -0.819794 0.667873 -3.01333 0.486103 -0.860276 -0.15372 + -0.820959 0.673984 -3.02855 0.422828 -0.775228 -0.469296 + -0.829896 0.705212 -2.98435 0.077535 -0.248857 0.965432 + -0.822361 0.674792 -2.98997 0.462891 -0.501642 0.730813 + -0.827276 0.664309 -3.00642 0.317967 -0.947171 0.0420035 + -0.829948 0.675789 -3.03512 0.171503 -0.756659 -0.630915 + -0.819914 0.699651 -3.05013 0.37952 -0.37678 -0.844986 + -0.838616 0.673413 -2.9905 -0.194177 -0.541105 0.818231 + -0.827201 0.673775 -2.98865 0.11899 -0.537847 0.834603 + -0.832115 0.663293 -3.0051 0.0671628 -0.987654 0.141525 + -0.848286 0.671955 -3.03015 -0.208749 -0.833694 -0.511251 + -0.852695 0.673826 -2.99489 -0.408041 -0.55183 0.727314 + -0.846194 0.663707 -3.00949 -0.21056 -0.976556 0.0447526 + -0.864359 0.676199 -3.00349 -0.69588 -0.578278 0.425847 + -0.851447 0.667225 -3.01935 -0.318841 -0.903232 -0.287251 + -0.869612 0.679716 -3.01335 -0.820938 -0.567324 0.0648371 + -0.870874 0.684691 -3.02581 -0.789372 -0.543081 -0.286279 + -0.867713 0.689422 -3.03662 -0.685388 -0.5203 -0.509442 + -0.862675 0.693595 -3.0456 -0.533849 -0.493039 -0.686963 + -0.843098 0.674141 -3.03424 -0.0384283 -0.784368 -0.619105 + -0.857487 0.695782 -3.0497 -0.296759 -0.452413 -0.840985 + -0.846422 0.698094 -3.0527 -0.0778333 -0.423467 -0.902562 + -0.833272 0.699745 -3.05357 0.107 -0.398343 -0.910974 + -0.864723 0.731701 -3.05745 -0.413359 -0.105227 -0.904468 + -0.853658 0.734015 -3.06045 -0.154796 -0.063681 -0.985892 + -0.835072 0.736347 -3.06168 0.096749 -0.0343065 -0.994717 + -0.821714 0.736253 -3.05825 0.4175 -0.0164649 -0.908528 + -0.86212 0.814174 -3.05083 -0.183754 0.14366 -0.972418 + -0.070894 2.02181 -3.02604 -0.351185 -0.486508 -0.799987 + -0.040846 2.03476 -3.07187 -0.372013 -0.802254 -0.4669 + -0.080403 2.00708 -3.02372 -0.558122 0.235277 -0.795704 + -0.030826 2.04626 -3.10218 -0.309191 -0.850815 -0.424871 + -1.1518 1.21652 -1.61535 0.813943 0.53967 0.215065 + -1.16328 1.23237 -1.62663 0.616382 0.766541 0.180245 + -1.17721 1.24002 -1.59409 0.691274 0.67049 0.269413 + -1.14452 1.22624 -1.65987 0.710171 0.627744 0.318738 + -1.17429 1.24694 -1.67216 0.188218 0.975681 0.11234 + -1.19304 1.25307 -1.63892 0.083585 0.996385 0.015198 + -1.19615 1.24703 -1.59924 0.0373945 0.968421 0.246499 + -1.18233 1.23731 -1.58105 0.412191 0.831347 0.372773 + -1.16573 1.22416 -1.58282 0.700347 0.634798 0.326414 + -1.14814 1.19983 -1.59413 0.864129 0.455547 0.213911 + -1.12654 1.17353 -1.6363 0.875409 0.430507 0.219824 + -1.14016 1.21833 -1.66015 0.831478 0.448836 0.327399 + -1.16642 1.2016 -1.54698 0.717277 0.584391 0.379476 + -1.15433 1.20203 -1.57527 0.828044 0.486586 0.278527 + -1.13279 1.16309 -1.58257 0.864448 0.461387 0.199629 + -1.12289 1.15684 -1.61507 0.867814 0.459347 0.18947 + -1.17154 1.19889 -1.53394 0.721351 0.623456 0.301588 + -1.15501 1.17947 -1.53944 0.797235 0.557655 0.231165 + -1.1396 1.16384 -1.55976 0.828252 0.508773 0.234838 + -1.13898 1.16529 -1.56371 0.841758 0.469011 0.267341 + -1.18622 1.21333 -1.53064 0.144157 0.779501 0.609587 + -1.17515 1.19341 -1.50857 0.166792 0.669407 0.72393 + -1.16047 1.17898 -1.51187 0.726234 0.6837 0.0716787 + -1.14895 1.16741 -1.52325 0.744014 0.665116 0.0637527 + -1.13354 1.15178 -1.54357 0.741743 0.66919 0.0447282 + -1.20004 1.22305 -1.54884 -0.245882 0.825386 0.508213 + -1.22353 1.20559 -1.54599 -0.492435 0.631944 0.59846 + -1.1988 1.18236 -1.51373 -0.413272 0.316245 0.853929 + -1.17096 1.17815 -1.50282 -0.236947 0.209962 0.948563 + -1.13805 1.15763 -1.49276 0.478373 0.620586 0.621315 + -1.2268 1.23779 -1.60672 -0.462326 0.854276 0.237628 + -1.2503 1.22033 -1.60387 -0.595991 0.753614 0.277239 + -1.26994 1.18244 -1.56291 -0.607054 0.584953 0.53788 + -1.24521 1.15922 -1.53065 -0.467365 0.262882 0.844075 + -1.2237 1.24384 -1.6464 -0.351053 0.935219 0.0461254 + -1.25515 1.22844 -1.65651 -0.595962 0.800467 0.0638908 + -1.27484 1.19579 -1.60417 -0.685577 0.687122 0.240517 + -1.21478 1.24832 -1.69966 -0.218898 0.975726 -0.0064918 + -1.24624 1.23292 -1.70978 -0.563604 0.821039 -0.0908034 + -1.27969 1.20389 -1.65681 -0.731631 0.680197 0.045267 + -1.30767 1.16744 -1.61603 -0.748444 0.646171 0.149315 + -1.15936 1.24648 -1.6915 0.0740504 0.994067 0.0796742 + -1.19986 1.24786 -1.719 0.135244 0.981135 0.13814 + -1.19101 1.25262 -1.75145 -0.245512 0.969061 -0.0253769 + -1.22682 1.23532 -1.76812 -0.520721 0.822891 -0.227374 + -1.27636 1.20376 -1.71496 -0.724124 0.678678 -0.122643 + -1.14441 1.24339 -1.68242 0.475142 0.795742 0.375546 + -1.14064 1.24395 -1.68931 0.632451 0.766567 -0.111269 + -1.15559 1.24705 -1.69839 0.233247 0.968775 0.0840832 + -1.14674 1.25181 -1.73084 0.124247 0.938051 0.323456 + -1.14005 1.23548 -1.6827 0.773546 0.460447 0.435449 + -1.1216 1.21657 -1.69108 0.683372 0.55418 0.475276 + -1.11538 1.23673 -1.7187 0.460284 0.699311 0.546903 + -1.12011 1.26981 -1.78105 0.0104717 0.993792 0.110756 + -1.12101 1.20809 -1.68446 0.735095 0.457936 0.49993 + -1.08343 1.1595 -1.69198 0.731326 0.491405 0.472951 + -1.0772 1.17965 -1.71961 0.780871 0.436186 0.447193 + -1.08338 1.23484 -1.76714 0.861807 0.388328 0.326329 + -1.08874 1.25473 -1.76892 0.693427 0.627103 0.354825 + -1.12257 1.19901 -1.67431 0.765491 0.439672 0.4698 + -1.08845 1.16054 -1.68583 0.702295 0.491362 0.515116 + -1.10764 1.15354 -1.6541 0.743204 0.493837 0.451412 + -1.09001 1.15145 -1.67567 0.666241 0.516837 0.53759 + -1.07935 1.13428 -1.67115 0.558308 0.73313 0.388346 + -1.06831 1.13347 -1.6858 0.559514 0.731183 0.390275 + -1.12523 1.17286 -1.63994 0.843722 0.440262 0.307087 + -1.10786 1.13774 -1.63375 0.676676 0.692175 0.251005 + -1.09697 1.13638 -1.64958 0.572945 0.733106 0.366456 + -1.09287 1.13322 -1.6451 0.234372 0.967523 0.0947054 + -1.07244 1.1308 -1.6701 0.214581 0.972135 0.0943862 + -1.10917 1.13841 -1.6301 0.744588 0.64682 0.164962 + -1.10375 1.13459 -1.62927 0.313406 0.946367 0.0785241 + -1.11518 1.14157 -1.61069 0.795907 0.588065 0.143917 + -1.10792 1.13486 -1.61614 0.396428 0.916976 0.0447292 + -1.09318 1.13501 -1.59889 -0.0225756 0.998791 -0.0436686 + -1.06772 1.13385 -1.63014 -0.0166203 0.996653 -0.0800437 + -1.12508 1.14782 -1.57819 0.802741 0.578767 0.143649 + -1.11393 1.13803 -1.59673 0.516961 0.854926 0.0430419 + -1.09734 1.13528 -1.58575 0.00605762 0.999704 -0.0235447 + -1.05145 1.14076 -1.55772 0.0269644 0.997118 0.0709071 + -1.026 1.1396 -1.58897 0.0133328 0.998487 -0.0533424 + -1.13034 1.15099 -1.56329 0.768774 0.601694 0.216682 + -1.12257 1.14348 -1.56836 0.685363 0.723943 0.0786301 + -1.11314 1.13602 -1.57487 0.342866 0.939144 0.0212346 + -1.10211 1.13791 -1.52383 0.0537726 0.994806 0.0864288 + -1.13097 1.14954 -1.55934 0.581345 0.772665 0.255004 + -1.12783 1.14665 -1.55347 0.646818 0.76134 0.0445799 + -1.12178 1.14147 -1.54651 0.60311 0.797592 0.0102085 + -1.11791 1.13865 -1.51295 0.427715 0.898547 0.0983524 + -1.1046 1.13139 -1.49304 0.434298 0.415728 0.799096 + -1.1304 1.14888 -1.5377 0.672577 0.739937 -0.01153 + -1.12653 1.14606 -1.50415 0.775354 0.591616 0.220947 + -1.13386 1.14237 -1.48701 0.221928 0.293768 0.929757 + -1.11446 1.10698 -1.49489 0.29937 -0.314541 0.9008 + -1.05394 1.13424 -1.52692 0.428142 0.558098 0.710789 + -1.14372 1.11795 -1.48887 -0.186679 -0.223078 0.956759 + -1.12869 1.08069 -1.50374 0.232113 -0.536397 0.81142 + -1.09287 1.10325 -1.50889 0.492498 -0.3841 0.780969 + -1.03235 1.13051 -1.54092 0.552382 0.337196 0.762347 + -0.999891 1.13813 -1.5774 0.481411 0.796235 0.366406 + -1.17155 1.12216 -1.49978 -0.30745 -0.0241445 0.951258 + -1.17813 1.08863 -1.50066 -0.136299 -0.130837 0.98199 + -1.17566 1.04028 -1.52032 0.171254 -0.555759 0.813513 + -1.05405 1.09393 -1.54388 0.439416 -0.581948 0.684288 + -1.01822 1.11649 -1.54903 0.625466 -0.141629 0.76729 + -1.25178 1.12568 -1.53153 -0.390272 0.0428611 0.919701 + -1.2251 1.04822 -1.51723 -0.21691 -0.174327 0.9605 + -1.26669 0.996962 -1.53783 -0.257195 -0.133228 0.957132 + -1.15987 1.02611 -1.5406 0.331425 -0.504712 0.797134 + -1.28649 1.12987 -1.54719 -0.534693 0.204524 0.819922 + -1.2598 1.05241 -1.5329 -0.440201 -0.00444185 0.897888 + -1.30278 1.15409 -1.57476 -0.672972 0.52839 0.517602 + -1.31696 1.10538 -1.56332 -0.643491 0.133371 0.753745 + -1.32384 1.04994 -1.56825 -0.636775 -0.00811588 0.771007 + -1.33324 1.12961 -1.59089 -0.837511 0.404491 0.367372 + -1.35127 1.06406 -1.60065 -0.9218 0.108571 0.372151 + -1.3307 0.948515 -1.57777 -0.655872 -0.0559886 0.752793 + -1.33758 1.12621 -1.6301 -0.909445 0.414581 0.032126 + -1.35561 1.06066 -1.63986 -0.987661 0.155767 0.0161997 + -1.36051 0.965594 -1.63921 -0.999318 0.0347534 0.0124411 + -1.35813 0.962637 -1.61017 -0.92529 0.0114431 0.379088 + -1.30765 1.16858 -1.66663 -0.79448 0.607075 -0.0161678 + -1.33756 1.12735 -1.6807 -0.909474 0.413124 -0.0467562 + -1.353 1.05999 -1.68694 -0.986757 0.139214 -0.083241 + -1.30432 1.16844 -1.72478 -0.784255 0.599512 -0.159781 + -1.33158 1.12212 -1.74451 -0.892684 0.393691 -0.219369 + -1.34702 1.05476 -1.75074 -0.965512 0.104425 -0.2385 + -1.3467 0.967896 -1.74254 -0.955544 -0.0526543 -0.290109 + -1.35789 0.964919 -1.68628 -0.991809 0.0181614 -0.126428 + -1.25695 1.20615 -1.7733 -0.691642 0.673097 -0.261861 + -1.28331 1.16656 -1.78776 -0.753806 0.587742 -0.29383 + -1.31057 1.12024 -1.80749 -0.837042 0.364792 -0.407784 + -1.32535 1.05232 -1.80703 -0.887057 0.0773299 -0.455137 + -1.19359 1.23505 -1.82475 -0.419456 0.854243 -0.307125 + -1.22478 1.21164 -1.8386 -0.582233 0.722302 -0.373208 + -1.25114 1.17205 -1.85306 -0.701379 0.518325 -0.489292 + -1.26801 1.1126 -1.87214 -0.745186 0.26811 -0.610586 + -1.28279 1.04467 -1.87168 -0.763994 0.0206289 -0.644893 + -1.15778 1.25235 -1.80808 -0.310736 0.925767 -0.215405 + -1.13853 1.24819 -1.84913 -0.215625 0.874465 -0.434531 + -1.16126 1.22772 -1.86882 -0.294339 0.773852 -0.560819 + -1.19245 1.20432 -1.88267 -0.40641 0.656733 -0.635242 + -1.21375 1.16608 -1.89675 -0.521956 0.457768 -0.719729 + -1.10086 1.26565 -1.8221 0.078099 0.936389 -0.342164 + -1.10685 1.23112 -1.87862 0.137703 0.772327 -0.62012 + -1.12959 1.21066 -1.89831 -0.109243 0.611496 -0.78367 + -1.16024 1.18686 -1.90753 -0.181874 0.482633 -0.856731 + -1.18154 1.14862 -1.92161 -0.221684 0.362805 -0.905112 + -1.08652 1.26484 -1.8125 0.662975 0.739671 -0.115547 + -1.09251 1.23031 -1.86901 0.523146 0.726083 -0.446231 + -1.08924 1.199 -1.90521 0.226763 0.361181 -0.904504 + -1.1199 1.1752 -1.91443 0.0693779 0.255317 -0.964365 + -1.12806 1.14005 -1.92234 0.143658 0.236854 -0.960865 + -1.08115 1.24495 -1.81071 0.913911 0.403845 -0.0409388 + -1.07628 1.23323 -1.82709 0.716987 0.673658 -0.179208 + -1.08764 1.2186 -1.8854 -0.0570125 0.793379 -0.606052 + -1.06864 1.19837 -1.89783 0.479789 0.439876 -0.759152 + -1.07014 1.21301 -1.77236 0.885817 0.393767 0.24551 + -1.06911 1.22632 -1.80518 0.872861 0.475095 0.111347 + -1.05986 1.21106 -1.85611 0.805129 0.593015 -0.0100665 + -1.06703 1.21797 -1.87802 0.62398 0.680078 -0.384894 + -1.06396 1.15782 -1.72483 0.827478 0.429376 0.361824 + -1.05999 1.17763 -1.76494 0.910434 0.353712 0.21447 + -1.05896 1.19094 -1.79776 0.929684 0.342674 0.135138 + -1.05943 1.14206 -1.71456 0.366442 0.819707 0.440228 + -1.05545 1.16187 -1.75467 0.590011 0.717794 0.369674 + -1.05414 1.17831 -1.79423 0.653776 0.706785 0.270245 + -1.05504 1.19843 -1.85259 0.541744 0.647105 0.53644 + -1.06328 1.13243 -1.69196 0.321215 0.903325 0.284297 + -1.05648 1.14191 -1.71326 -0.373283 0.869794 0.322675 + -1.05115 1.15936 -1.75153 -0.231955 0.894033 0.383278 + -1.04984 1.1758 -1.7911 0.138394 0.940918 0.309065 + -1.06034 1.13228 -1.69065 -0.0676292 0.936335 0.344534 + -1.04408 1.15099 -1.71148 -0.525715 0.74924 0.40282 + -1.03874 1.16844 -1.74975 -0.590614 0.781073 0.202731 + -1.03559 1.17519 -1.79432 -0.106554 0.992456 0.0606458 + -1.04079 1.19782 -1.85581 0.622197 0.782675 -0.0170445 + -1.0614 1.12998 -1.68476 0.128998 0.96563 0.225652 + -1.03405 1.1332 -1.68362 -0.214049 0.838197 0.501606 + -1.03005 1.14648 -1.69451 -0.391976 0.650539 0.650502 + -1.00964 1.18895 -1.7286 -0.388124 0.874277 0.291546 + -1.00648 1.1957 -1.77317 -0.1889 0.97201 -0.139694 + -1.04729 1.13142 -1.65514 -0.0217426 0.996611 -0.0793298 + -1.03512 1.1309 -1.67772 -0.09636 0.98406 0.149465 + -0.986618 1.13712 -1.671 -0.200551 0.802443 0.562019 + -0.982616 1.1504 -1.68189 -0.144633 0.674377 0.724084 + -0.995607 1.18444 -1.71163 -0.203481 0.773205 0.600623 + -0.999435 1.13483 -1.64199 0.0095085 0.998627 -0.051512 + -0.98726 1.13431 -1.66458 -0.0946696 0.976705 0.192575 + -0.961984 1.1384 -1.66464 0.176129 0.824478 0.537786 + -0.960015 1.15492 -1.68632 0.244961 0.722833 0.646147 + -0.973007 1.18895 -1.71607 0.162 0.881003 0.44451 + -0.973326 1.13336 -1.63041 0.460189 0.8677 0.187942 + -0.962626 1.13559 -1.65822 0.419187 0.849423 0.320568 + -1.04301 1.16369 -1.89506 0.641505 0.209774 -0.737879 + -1.05117 1.12854 -1.90297 0.46863 0.0867594 -0.879124 + -1.01517 1.16314 -1.85303 0.560835 0.672519 -0.482889 + -0.988936 1.16213 -1.8385 0.40744 0.716395 -0.566366 + -0.977838 1.14693 -1.8422 0.723758 0.222992 -0.65303 + -0.998882 1.12702 -1.86773 0.690737 0.0460577 -0.721638 + -1.07232 1.0927 -1.91396 0.428812 -0.130145 -0.89397 + -0.980251 1.19469 -1.75863 0.12658 0.989644 -0.0676923 + -0.94695 1.18602 -1.7729 0.48833 0.832204 -0.262622 + -0.935851 1.17081 -1.7766 0.878816 0.325905 -0.348523 + -0.935857 1.13387 -1.77346 0.92725 -0.19477 -0.319799 + -0.956901 1.11396 -1.79899 0.821214 -0.339429 -0.45869 + -0.939705 1.18028 -1.73033 0.675076 0.686576 0.269973 + -0.931083 1.16012 -1.73146 0.960105 0.197341 0.198129 + -0.931089 1.12317 -1.72831 0.980433 -0.174479 0.091144 + -0.961336 1.05217 -1.72489 0.895242 -0.440978 -0.0638771 + -0.957499 1.15374 -1.6868 0.63839 0.543671 0.544868 + -0.948877 1.13357 -1.68792 0.894693 0.164174 0.415416 + -0.9502 1.09972 -1.68082 0.931964 -0.189302 0.309205 + -0.980447 1.02872 -1.6774 0.856722 -0.427014 0.289285 + -0.959468 1.13722 -1.66512 0.757239 0.449467 0.473888 + -0.958693 1.12583 -1.66401 0.923881 0.0713782 0.375965 + -0.960016 1.09198 -1.65691 0.935204 -0.231583 0.267885 + -1.00444 1.01455 -1.64558 0.757798 -0.465029 0.4577 + -1.03712 0.93285 -1.67943 0.807823 -0.506017 0.302273 + -0.961898 1.13456 -1.65811 0.8641 0.342155 0.369136 + -0.961123 1.12317 -1.657 0.93835 0.0745864 0.337544 + -0.966322 1.11954 -1.63973 0.943453 0.125872 0.30668 + -0.965214 1.08835 -1.63965 0.922635 -0.248744 0.294739 + -0.972599 1.13233 -1.6303 0.852504 0.403099 0.332789 + -0.979487 1.11131 -1.59494 0.883959 -0.0678965 0.462608 + -0.992963 1.08999 -1.58691 0.679336 -0.410759 0.608095 + -0.97869 1.06703 -1.63161 0.808976 -0.460306 0.365617 + -0.985764 1.1241 -1.58551 0.819341 0.247266 0.517242 + -1.03826 1.07976 -1.56416 0.446988 -0.513588 0.732413 + -1.02023 1.03424 -1.60761 0.592786 -0.493577 0.636385 + -1.06552 1.02402 -1.58486 0.431567 -0.465307 0.772812 + -1.1043 0.977292 -1.58919 0.430605 -0.403009 0.807566 + -1.04598 0.98177 -1.62157 0.593446 -0.47395 0.650533 + -1.08365 0.92021 -1.6318 0.484688 -0.463338 0.741886 + -1.06112 0.918685 -1.64761 0.650244 -0.484492 0.585192 + -1.19864 0.979392 -1.54493 0.212781 -0.24088 0.946943 + -1.21682 0.926985 -1.55393 0.249666 -0.307984 0.918048 + -1.14197 0.915734 -1.59942 0.445605 -0.417303 0.792019 + -1.28486 0.944555 -1.54683 -0.292539 -0.120495 0.948632 + -1.29003 0.878772 -1.56184 -0.235722 -0.31146 0.920558 + -1.24364 0.873129 -1.56804 0.22376 -0.41958 0.879707 + -1.1688 0.861879 -1.61352 0.511217 -0.572815 0.640734 + -1.33586 0.882732 -1.59277 -0.6367 -0.158724 0.754599 + -1.3311 0.828058 -1.60292 -0.506381 -0.235732 0.829463 + -1.29043 0.824147 -1.59318 -0.0849646 -0.394886 0.914793 + -1.24404 0.818505 -1.59938 0.313648 -0.456375 0.832674 + -1.36025 0.886229 -1.61648 -0.900588 -0.0728978 0.428518 + -1.35549 0.831554 -1.62663 -0.843479 -0.0971261 0.528308 + -1.36057 0.765387 -1.63744 -0.802727 -0.0312921 0.595525 + -1.33929 0.763181 -1.62236 -0.42135 -0.169906 0.89084 + -1.29862 0.759271 -1.61262 -0.0593078 -0.262465 0.963117 + -1.36263 0.889184 -1.64552 -0.999225 0.0302591 -0.0251901 + -1.36415 0.834711 -1.65179 -0.996871 0.0135084 0.0778825 + -1.36923 0.768544 -1.66259 -0.992765 0.0931242 0.0758048 + -1.35755 0.891501 -1.68179 -0.981983 -0.00598264 -0.188876 + -1.35907 0.837027 -1.68806 -0.940961 0.0707402 -0.331041 + -1.36453 0.767713 -1.6887 -0.933128 0.12783 -0.336053 + -1.37998 0.688661 -1.67276 -0.986713 0.147294 0.0685649 + -1.34636 0.894477 -1.73805 -0.846224 -0.129515 -0.516847 + -1.3389 0.837203 -1.72269 -0.792548 -0.0575711 -0.607086 + -1.34436 0.767888 -1.72333 -0.747919 0.110828 -0.654473 + -1.36143 0.682262 -1.7248 -0.748795 0.126558 -0.650607 + -1.37528 0.68783 -1.69886 -0.922368 0.161823 -0.350787 + -1.32271 0.888801 -1.75658 -0.475248 -0.267235 -0.838287 + -1.31525 0.831528 -1.74122 -0.391519 -0.128805 -0.91111 + -1.32367 0.764451 -1.74011 -0.380362 0.0609298 -0.922828 + -1.31465 0.889273 -1.76194 -0.76204 -0.580068 -0.287778 + -1.28797 0.866962 -1.73616 0.258117 -0.439166 -0.860528 + -1.28675 0.827511 -1.74491 0.248239 0.0274827 -0.968309 + -1.29517 0.760435 -1.74379 0.126475 -0.0316701 -0.991464 + -1.31543 0.895608 -1.78808 -0.883307 -0.348088 -0.314012 + -1.27992 0.832313 -1.76981 -0.964941 -0.20549 0.163289 + -1.27991 0.867435 -1.74151 -0.589249 -0.786826 0.183549 + -1.25538 0.857214 -1.71958 0.433939 -0.370166 -0.821385 + -1.32503 0.965453 -1.79882 -0.882958 -0.118448 -0.454264 + -1.2885 0.895743 -1.82849 -0.752232 -0.272463 -0.599926 + -1.26984 0.839253 -1.81832 -0.793728 -0.203505 -0.57322 + -1.2807 0.838646 -1.79595 -0.925832 -0.275072 -0.259172 + -1.2981 0.965589 -1.83923 -0.774983 -0.144185 -0.615314 + -1.26695 0.894931 -1.8507 -0.594654 -0.273573 -0.756006 + -1.24829 0.838441 -1.84053 -0.616306 -0.186162 -0.765187 + -1.25826 0.763103 -1.82955 -0.652943 0.0485137 -0.755852 + -1.26993 0.764796 -1.81515 -0.835315 0.0870977 -0.542828 + -1.24683 1.04103 -1.90683 -0.579888 -0.078901 -0.810866 + -1.26214 0.961948 -1.87438 -0.582076 -0.219862 -0.782847 + -1.23521 0.892172 -1.86625 -0.265912 -0.28973 -0.919428 + -1.23163 0.837205 -1.85103 -0.283736 -0.199385 -0.937944 + -1.24161 0.761868 -1.84005 -0.304829 -0.0524921 -0.950959 + -1.23062 1.10662 -1.91583 -0.562408 0.209926 -0.799768 + -1.20421 1.03673 -1.9268 -0.219289 -0.219022 -0.950759 + -1.23039 0.959189 -1.88993 -0.254691 -0.320733 -0.912284 + -1.20377 0.888107 -1.86701 0.0862194 -0.299128 -0.95031 + -1.188 1.10233 -1.93581 -0.199873 0.123153 -0.972051 + -1.15876 1.03287 -1.92612 0.13594 -0.327879 -0.934888 + -1.18494 0.955324 -1.88926 0.107907 -0.402031 -0.909245 + -1.13452 1.09375 -1.93653 0.180881 0.00568228 -0.983489 + -1.09656 1.03181 -1.90356 0.446193 -0.406472 -0.797303 + -1.13972 0.947954 -1.87361 0.402614 -0.437176 -0.804226 + -1.15854 0.880738 -1.85136 0.417151 -0.295916 -0.859313 + -1.04309 1.03272 -1.86026 0.649039 -0.459616 -0.606219 + -1.08625 0.948863 -1.83031 0.612569 -0.45869 -0.64371 + -1.12481 0.87388 -1.82472 0.645294 -0.321917 -0.692795 + -1.16808 0.828247 -1.84439 0.405757 -0.224436 -0.885996 + -1.20019 0.833142 -1.85179 0.0821968 -0.211977 -0.973812 + -1.02003 1.09118 -1.87873 0.652416 -0.306213 -0.693244 + -0.979965 1.0555 -1.78051 0.807229 -0.44619 -0.386389 + -1.04295 0.938143 -1.77506 0.769567 -0.458511 -0.444449 + -1.0815 0.863159 -1.76947 0.779966 -0.454658 -0.430046 + -1.02432 0.934806 -1.71944 0.867248 -0.497598 -0.0166589 + -1.07187 0.858508 -1.73225 0.820758 -0.570805 -0.0231943 + -1.12004 0.816937 -1.78948 0.818467 -0.401411 -0.411072 + -1.13435 0.821389 -1.81775 0.729012 -0.276011 -0.626386 + -1.08468 0.856552 -1.69225 0.725396 -0.61261 0.313864 + -1.11669 0.810805 -1.72692 0.740051 -0.617224 0.267132 + -1.11041 0.812285 -1.75226 0.821316 -0.566217 -0.0695551 + -1.15065 0.7456 -1.76694 0.878009 -0.478635 -0.00302057 + -1.15429 0.746264 -1.79033 0.849647 -0.425348 -0.311735 + -1.09781 0.856221 -1.66961 0.564729 -0.625645 0.538191 + -1.12983 0.810472 -1.70429 0.596127 -0.63071 0.496827 + -1.16417 0.74514 -1.72641 0.688353 -0.475692 0.547619 + -1.15693 0.74412 -1.7416 0.817737 -0.497499 0.289486 + -1.12035 0.857744 -1.65381 0.210287 -0.553266 0.806025 + -1.14075 0.811055 -1.6949 0.286026 -0.604535 0.743456 + -1.17509 0.745721 -1.71702 0.425244 -0.389938 0.816771 + -1.14508 0.857131 -1.65365 0.185317 -0.774849 0.604373 + -1.16548 0.81044 -1.69474 0.0133857 -0.469183 0.883 + -1.1907 0.748059 -1.71192 0.149476 -0.258656 0.954334 + -1.21592 0.662056 -1.72454 0.442536 -0.276745 0.85298 + -1.15275 0.856415 -1.64339 0.518608 -0.821939 0.235503 + -1.18493 0.849387 -1.68039 -0.296294 -0.760227 0.578156 + -1.19112 0.813612 -1.69258 -0.260851 -0.283671 0.922761 + -1.21634 0.751233 -1.70976 -0.130893 -0.128592 0.983021 + -1.2038 0.80959 -1.64923 0.816235 -0.526653 0.23748 + -1.19259 0.848672 -1.67012 0.533736 -0.749676 -0.391296 + -1.21685 0.851241 -1.69701 -0.205818 -0.924368 0.32122 + -1.22304 0.815468 -1.70921 -0.534893 -0.078298 0.841284 + -1.23805 0.754552 -1.71673 -0.456727 0.0331711 0.888988 + -1.21985 0.815055 -1.61937 0.579261 -0.552402 0.599423 + -1.24668 0.751744 -1.6372 0.65626 -0.420439 0.626541 + -1.23437 0.748589 -1.65778 0.83242 -0.434956 0.343353 + -1.1988 0.810177 -1.67648 0.923295 -0.245162 -0.295673 + -1.27087 0.755194 -1.61721 0.33568 -0.362953 0.869244 + -1.29516 0.680623 -1.63684 0.356918 -0.302108 0.883934 + -1.27825 0.67452 -1.65169 0.664624 -0.3768 0.64521 + -1.26595 0.671366 -1.67227 0.838794 -0.410489 0.357664 + -1.22937 0.749173 -1.68503 0.917546 -0.35948 -0.169954 + -1.32291 0.684698 -1.63226 -0.0565957 -0.176729 0.982631 + -1.34395 0.612136 -1.64165 -0.0384887 -0.0723164 0.996639 + -1.3278 0.606846 -1.64451 0.361937 -0.225801 0.904442 + -1.31089 0.600744 -1.65936 0.662737 -0.347735 0.66322 + -1.35212 0.687546 -1.639 -0.411111 -0.0666491 0.909145 + -1.37316 0.614981 -1.64839 -0.411776 0.0551519 0.909614 + -1.38826 0.545838 -1.64715 -0.41253 -0.000709895 0.910944 + -1.37589 0.541235 -1.64422 -0.0791485 -0.11612 0.990077 + -1.35974 0.535943 -1.64708 0.303378 -0.251926 0.918964 + -1.3734 0.68975 -1.65408 -0.805994 0.0598112 0.588894 + -1.38608 0.61591 -1.65754 -0.79111 0.145988 0.593997 + -1.40118 0.546766 -1.6563 -0.791716 0.0694493 0.606929 + -1.39819 0.503755 -1.65766 -0.618787 -0.395946 0.678476 + -1.38582 0.499151 -1.65473 -0.133645 -0.54085 0.830434 + -1.39266 0.61482 -1.67623 -0.983018 0.173513 0.0597387 + -1.4047 0.544119 -1.66455 -0.98952 0.0496573 0.135587 + -1.40171 0.501108 -1.66591 -0.874062 -0.442184 0.201219 + -1.39721 0.492211 -1.67724 -0.732737 -0.647838 -0.208333 + -1.39059 0.610268 -1.69228 -0.933316 0.131539 -0.334094 + -1.40264 0.539568 -1.6806 -0.965288 0.018016 -0.260567 + -1.39814 0.53067 -1.69193 -0.843184 -0.101343 -0.527987 + -1.37674 0.604702 -1.71822 -0.76852 0.0508278 -0.637804 + -1.36507 0.59865 -1.72853 -0.434249 -0.103099 -0.894873 + -1.38647 0.524618 -1.70224 -0.526548 -0.260895 -0.809124 + -1.37838 0.519222 -1.70333 -0.083132 -0.473219 -0.877013 + -1.38912 0.486813 -1.67833 -0.229277 -0.925448 -0.301625 + -1.34073 0.678825 -1.74158 -0.384824 0.0306201 -0.922482 + -1.3448 0.594307 -1.7314 0.0631948 -0.274048 -0.959638 + -1.32047 0.67448 -1.74446 0.0937599 -0.105011 -0.990041 + -1.32986 0.59129 -1.72547 0.436207 -0.387375 -0.812197 + -1.36343 0.516208 -1.69739 0.366982 -0.587052 -0.721591 + -1.37942 0.486098 -1.66976 0.209021 -0.969626 0.127025 + -1.27009 0.75642 -1.73415 0.505485 -0.107906 -0.856061 + -1.29539 0.670466 -1.73482 0.488378 -0.22358 -0.843504 + -1.30815 0.589689 -1.70631 0.711051 -0.461767 -0.530263 + -1.35373 0.515493 -1.68883 0.616047 -0.636111 -0.464596 + -1.25415 0.817762 -1.72833 0.574157 0.0596323 -0.816571 + -1.24023 0.75033 -1.70818 0.772867 -0.203311 -0.601116 + -1.27368 0.668865 -1.71566 0.742142 -0.314891 -0.591667 + -1.30116 0.591384 -1.69213 0.870314 -0.485337 -0.0836741 + -1.34673 0.517187 -1.67464 0.777869 -0.626086 0.0541774 + -1.22429 0.811672 -1.70237 0.682156 -0.0598078 -0.728756 + -1.26282 0.667708 -1.69251 0.906823 -0.40609 -0.112972 + -1.30428 0.59504 -1.67189 0.815265 -0.427575 0.390541 + -1.34704 0.522626 -1.66585 0.734782 -0.502853 0.455229 + -1.21809 0.850167 -1.696 0.526666 -0.446044 -0.723649 + -1.25413 0.858289 -1.72059 0.208099 -0.786046 -0.582088 + -1.35365 0.528329 -1.65332 0.556322 -0.412501 0.721352 + -1.37972 0.491535 -1.66098 0.124974 -0.762276 0.635072 + -1.24979 0.66784 -1.71765 -0.112638 -0.0326382 0.9931 + -1.23153 0.664393 -1.71944 0.176531 -0.155192 0.971984 + -1.2715 0.671159 -1.72463 -0.450643 0.109135 0.886008 + -1.29816 0.588448 -1.72706 -0.443615 0.119314 0.88824 + -1.28508 0.586268 -1.72283 -0.113897 -0.00515318 0.993479 + -1.26683 0.582821 -1.72462 0.184181 -0.129991 0.974258 + -1.25756 0.580225 -1.72786 0.446164 -0.251055 0.859017 + -1.28955 0.672873 -1.73814 -0.674392 0.189741 0.713578 + -1.31621 0.590162 -1.74058 -0.685128 0.197335 0.701184 + -1.33453 0.50927 -1.73622 -0.693294 0.0812979 0.716054 + -1.32646 0.508505 -1.73018 -0.464583 0.0186473 0.885333 + -1.31338 0.506325 -1.72595 -0.129231 -0.101578 0.986398 + -1.26296 0.759495 -1.73507 -0.68021 0.13025 0.721353 + -1.27643 0.761618 -1.75234 -0.86222 0.148656 0.48423 + -1.30303 0.674996 -1.75542 -0.862277 0.245344 0.44304 + -1.32451 0.590198 -1.75123 -0.867476 0.231661 0.440248 + -1.24795 0.820411 -1.72754 -0.624756 -0.0924609 0.775327 + -1.27373 0.829557 -1.74847 -0.8414 -0.121963 0.52647 + -1.28262 0.764374 -1.77369 -0.983958 0.150091 0.0964282 + -1.30777 0.674078 -1.7713 -0.961895 0.259908 0.0848916 + -1.32925 0.58928 -1.76711 -0.971299 0.226082 0.0739249 + -1.25413 0.858289 -1.72059 -0.61572 -0.238468 0.751013 + -1.28079 0.764191 -1.79278 -0.955152 0.134387 -0.263863 + -1.30594 0.673894 -1.79039 -0.934884 0.230209 -0.270178 + -1.32841 0.587097 -1.77896 -0.947175 0.175993 -0.268117 + -1.34511 0.507897 -1.75403 -0.990582 0.0831378 0.108793 + -1.34282 0.509307 -1.74687 -0.886829 0.110661 0.448652 + -1.29853 0.670716 -1.80716 -0.827046 0.17455 -0.534348 + -1.321 0.583919 -1.79573 -0.84331 0.108462 -0.526368 + -1.34128 0.502486 -1.77348 -0.879601 -0.0519997 -0.472861 + -1.34427 0.505713 -1.76588 -0.972061 0.0335479 -0.23232 + -1.28687 0.669023 -1.82156 -0.660963 0.100971 -0.743594 + -1.31422 0.580905 -1.80472 -0.683627 0.0211274 -0.729525 + -1.3345 0.499472 -1.78246 -0.727215 -0.133726 -0.673257 + -1.34018 0.460173 -1.75922 -0.721267 -0.662777 -0.201248 + -1.34317 0.463401 -1.75163 -0.83499 -0.535898 0.124922 + -1.27515 0.666054 -1.82951 -0.330546 -0.033392 -0.943199 + -1.3025 0.577936 -1.81267 -0.353727 -0.124803 -0.926985 + -1.3295 0.496792 -1.78609 -0.421067 -0.291774 -0.858819 + -1.33518 0.457491 -1.76285 -0.387157 -0.813576 -0.433825 + -1.32506 0.454956 -1.76054 0.126224 -0.945408 -0.300452 + -1.22073 0.758715 -1.84149 0.0617394 -0.146667 -0.987257 + -1.25427 0.662903 -1.83094 0.0529423 -0.17021 -0.983985 + -1.29003 0.575013 -1.81366 0.0185095 -0.259151 -0.965659 + -1.31703 0.493869 -1.78709 -0.0330283 -0.419408 -0.907197 + -1.18862 0.753823 -1.83409 0.393387 -0.24493 -0.886147 + -1.23124 0.659392 -1.82564 0.368974 -0.283606 -0.885113 + -1.26701 0.571504 -1.80835 0.362422 -0.371118 -0.85494 + -1.30691 0.491333 -1.78477 0.284784 -0.517688 -0.806782 + -1.1686 0.750717 -1.8186 0.687829 -0.348035 -0.636995 + -1.21123 0.656288 -1.81015 0.693421 -0.398107 -0.600565 + -1.25483 0.570414 -1.79884 0.672462 -0.457695 -0.581644 + -1.29473 0.490244 -1.77525 0.630615 -0.591165 -0.50284 + -1.20059 0.656724 -1.78915 0.84698 -0.449841 -0.283315 + -1.24419 0.570849 -1.77784 0.839321 -0.487404 -0.240787 + -1.28979 0.491493 -1.7658 0.781526 -0.592364 -0.19576 + -1.32012 0.456206 -1.75109 0.339759 -0.928743 0.148326 + -1.19694 0.656058 -1.76576 0.883955 -0.464723 0.0515346 + -1.2417 0.572741 -1.76335 0.876001 -0.476175 0.0766831 + -1.2873 0.493385 -1.75131 0.809403 -0.570089 0.140946 + -1.32163 0.459255 -1.74252 0.246058 -0.835561 0.491216 + -1.33281 0.464045 -1.73842 -0.364345 -0.550672 0.751008 + -1.20104 0.658888 -1.74681 0.834271 -0.442455 0.328976 + -1.24579 0.575573 -1.74439 0.826078 -0.437528 0.355195 + -1.28881 0.496432 -1.74274 0.763788 -0.516423 0.387214 + -1.29293 0.498939 -1.73328 0.632428 -0.4608 0.622655 + -1.32487 0.461252 -1.73929 0.00788462 -0.705532 0.708634 + -1.20827 0.65991 -1.73162 0.709103 -0.393732 0.584934 + -1.24991 0.578077 -1.73494 0.704896 -0.375251 0.60192 + -1.29617 0.500936 -1.73006 0.393521 -0.330076 0.858016 + -1.30544 0.503532 -1.72682 0.146181 -0.223438 0.963694 + -1.34088 0.46481 -1.74447 -0.701639 -0.490977 0.516377 + 1.21809 0.850167 -1.696 -0.548293 -0.43388 -0.714929 + 1.21685 0.851241 -1.69701 0.197383 -0.922357 0.332112 + 1.25413 0.858289 -1.72059 -0.208099 -0.786046 -0.582088 + 1.19259 0.848672 -1.67012 -0.511167 -0.623797 -0.591258 + 1.18493 0.849387 -1.68039 0.190407 -0.815477 0.546573 + 1.22304 0.815468 -1.70921 0.518788 -0.107786 0.848081 + 1.25413 0.858289 -1.72059 0.625772 -0.225621 0.746662 + 1.25538 0.857214 -1.71958 -0.421665 -0.35137 -0.835905 + 1.25415 0.817762 -1.72833 -0.549194 0.0365944 -0.834893 + 1.22429 0.811672 -1.70237 -0.681171 -0.0501868 -0.730402 + 1.1988 0.810177 -1.67648 -0.857195 -0.332449 -0.393312 + 1.15275 0.856415 -1.64339 -0.626169 -0.72323 0.291291 + 1.27991 0.867435 -1.74151 0.569222 -0.764404 0.302774 + 1.28797 0.866962 -1.73616 -0.109099 -0.49856 -0.859962 + 1.28675 0.827511 -1.74491 -0.196893 0.0947836 -0.975833 + 1.29517 0.760435 -1.74379 -0.135655 -0.0233792 -0.99048 + 1.27009 0.75642 -1.73415 -0.499556 -0.0934479 -0.861226 + 1.24023 0.75033 -1.70818 -0.753126 -0.224603 -0.618348 + 1.31465 0.889273 -1.76194 0.710133 -0.618406 -0.336579 + 1.32271 0.888801 -1.75658 0.443989 -0.469326 -0.763287 + 1.31525 0.831528 -1.74122 0.311686 -0.0395906 -0.94936 + 1.32367 0.764451 -1.74011 0.381067 0.0621822 -0.922454 + 1.27373 0.829557 -1.74847 0.810154 -0.176227 0.559102 + 1.27992 0.832313 -1.76981 0.961408 -0.254101 0.105481 + 1.2807 0.838646 -1.79595 0.927453 -0.249346 -0.278671 + 1.31543 0.895608 -1.78808 0.913532 -0.304259 -0.269972 + 1.32503 0.965453 -1.79882 0.87695 -0.113739 -0.466928 + 1.24795 0.820411 -1.72754 0.62223 -0.0906251 0.777571 + 1.26296 0.759495 -1.73507 0.671479 0.10361 0.733744 + 1.27643 0.761618 -1.75234 0.873216 0.130011 0.469672 + 1.28262 0.764374 -1.77369 0.984603 0.141256 0.102976 + 1.23805 0.754552 -1.71673 0.443221 0.0446638 0.895299 + 1.2715 0.671159 -1.72463 0.449938 0.10697 0.886631 + 1.28955 0.672873 -1.73814 0.674795 0.189325 0.713308 + 1.30303 0.674996 -1.75542 0.862185 0.243559 0.444204 + 1.21634 0.751233 -1.70976 0.141813 -0.104214 0.984392 + 1.24979 0.66784 -1.71765 0.112364 -0.0324403 0.993137 + 1.28508 0.586268 -1.72283 0.113872 -0.00523079 0.993482 + 1.29816 0.588448 -1.72706 0.443642 0.119288 0.88823 + 1.31621 0.590162 -1.74058 0.684747 0.195752 0.701999 + 1.19112 0.813612 -1.69258 0.202745 -0.241276 0.949042 + 1.1907 0.748059 -1.71192 -0.16271 -0.248935 0.954755 + 1.23153 0.664393 -1.71944 -0.17639 -0.154736 0.972082 + 1.26683 0.582821 -1.72462 -0.184172 -0.129999 0.974259 + 1.16548 0.81044 -1.69474 0.0226165 -0.417339 0.908469 + 1.17509 0.745721 -1.71702 -0.419574 -0.369373 0.829169 + 1.21592 0.662056 -1.72454 -0.441814 -0.277283 0.853179 + 1.25756 0.580225 -1.72786 -0.446223 -0.251636 0.858816 + 1.14508 0.857131 -1.65365 -0.124138 -0.77728 0.616786 + 1.12035 0.857744 -1.65381 -0.267113 -0.640483 0.720022 + 1.14075 0.811055 -1.6949 -0.279355 -0.609574 0.741876 + 1.16417 0.74514 -1.72641 -0.690738 -0.473472 0.54654 + 1.20827 0.65991 -1.73162 -0.709149 -0.393261 0.585195 + 1.14197 0.915734 -1.59942 -0.448773 -0.443226 0.775986 + 1.08365 0.92021 -1.6318 -0.469013 -0.469758 0.7479 + 1.09781 0.856221 -1.66961 -0.556509 -0.631063 0.540424 + 1.12983 0.810472 -1.70429 -0.595984 -0.631843 0.495557 + 1.15693 0.74412 -1.7416 -0.818988 -0.492915 0.293757 + 1.1688 0.861879 -1.61352 -0.560633 -0.545675 0.622839 + 1.21682 0.926985 -1.55393 -0.255195 -0.305567 0.917335 + 1.19864 0.979392 -1.54493 -0.218822 -0.246223 0.944188 + 1.1043 0.977292 -1.58919 -0.422671 -0.407423 0.809541 + 1.04598 0.98177 -1.62157 -0.573951 -0.437501 0.692223 + 1.21985 0.815055 -1.61937 -0.576147 -0.51818 0.632095 + 1.24364 0.873129 -1.56804 -0.221803 -0.41454 0.882587 + 1.28486 0.944555 -1.54683 0.276366 -0.148209 0.949556 + 1.2038 0.80959 -1.64923 -0.736277 -0.600769 0.311404 + 1.23437 0.748589 -1.65778 -0.832457 -0.434978 0.343233 + 1.24668 0.751744 -1.6372 -0.655125 -0.421254 0.627181 + 1.24404 0.818505 -1.59938 -0.348707 -0.430911 0.832297 + 1.22937 0.749173 -1.68503 -0.906507 -0.398512 -0.139406 + 1.26282 0.667708 -1.69251 -0.9062 -0.407158 -0.114123 + 1.26595 0.671366 -1.67227 -0.836919 -0.412759 0.359439 + 1.27825 0.67452 -1.65169 -0.664823 -0.376757 0.645031 + 1.27087 0.755194 -1.61721 -0.333621 -0.357892 0.87213 + 1.27368 0.668865 -1.71566 -0.742318 -0.316019 -0.590843 + 1.30815 0.589689 -1.70631 -0.709063 -0.463714 -0.531224 + 1.30116 0.591384 -1.69213 -0.868888 -0.488436 -0.080394 + 1.30428 0.59504 -1.67189 -0.814595 -0.430454 0.388774 + 1.29539 0.670466 -1.73482 -0.48673 -0.224985 -0.844083 + 1.32986 0.59129 -1.72547 -0.436227 -0.387501 -0.812126 + 1.36343 0.516208 -1.69739 -0.366981 -0.587045 -0.721598 + 1.35373 0.515493 -1.68883 -0.616046 -0.636111 -0.464597 + 1.34673 0.517187 -1.67464 -0.777869 -0.626087 0.054178 + 1.32047 0.67448 -1.74446 -0.0934206 -0.10416 -0.990163 + 1.3448 0.594307 -1.7314 -0.0611467 -0.27569 -0.9593 + 1.37838 0.519222 -1.70333 0.0842907 -0.468101 -0.879646 + 1.38912 0.486813 -1.67833 0.225362 -0.925361 -0.304828 + 1.37942 0.486098 -1.66976 -0.211728 -0.969301 0.125008 + 1.34073 0.678825 -1.74158 0.385073 0.0304306 -0.922384 + 1.36507 0.59865 -1.72853 0.433895 -0.10473 -0.894855 + 1.38647 0.524618 -1.70224 0.520707 -0.25766 -0.813926 + 1.39721 0.492211 -1.67724 0.735598 -0.640528 -0.220498 + 1.34436 0.767888 -1.72333 0.746827 0.112378 -0.655455 + 1.36143 0.682262 -1.7248 0.74854 0.125395 -0.651125 + 1.37674 0.604702 -1.71822 0.768535 0.0509314 -0.637777 + 1.39814 0.53067 -1.69193 0.843978 -0.0967356 -0.527583 + 1.40171 0.501108 -1.66591 0.87014 -0.446797 0.207916 + 1.3389 0.837203 -1.72269 0.759674 -0.111511 -0.640673 + 1.36453 0.767713 -1.6887 0.932446 0.123349 -0.3396 + 1.37528 0.68783 -1.69886 0.922372 0.161819 -0.350778 + 1.39059 0.610268 -1.69228 0.933247 0.128924 -0.335304 + 1.40264 0.539568 -1.6806 0.963166 0.0223621 -0.267975 + 1.34636 0.894477 -1.73805 0.86535 -0.165577 -0.473027 + 1.35907 0.837027 -1.68806 0.955833 0.0249475 -0.292851 + 1.36923 0.768544 -1.66259 0.992958 0.0878036 0.0795294 + 1.37998 0.688661 -1.67276 0.986852 0.146617 0.0680247 + 1.39266 0.61482 -1.67623 0.982998 0.173677 0.0595979 + 1.3467 0.967896 -1.74254 0.960473 -0.0256225 -0.277191 + 1.35755 0.891501 -1.68179 0.986235 0.0156398 -0.164607 + 1.36263 0.889184 -1.64552 0.999993 -0.00243655 -0.00293139 + 1.36415 0.834711 -1.65179 0.994039 0.037213 0.102476 + 1.34702 1.05476 -1.75074 0.964219 0.107724 -0.242232 + 1.35789 0.964919 -1.68628 0.992226 0.0148382 -0.123562 + 1.36051 0.965594 -1.63921 0.99908 0.0394581 0.0167727 + 1.36025 0.886229 -1.61648 0.903254 -0.0813383 0.421327 + 1.35549 0.831554 -1.62663 0.849166 -0.0854645 0.521165 + 1.32535 1.05232 -1.80703 0.885253 0.0719435 -0.459513 + 1.31057 1.12024 -1.80749 0.807813 0.398079 -0.434709 + 1.33158 1.12212 -1.74451 0.89117 0.403837 -0.206715 + 1.353 1.05999 -1.68694 0.986423 0.142722 -0.0812388 + 1.35561 1.06066 -1.63986 0.988684 0.148389 0.0220381 + 1.28279 1.04467 -1.87168 0.769698 0.0132059 -0.638272 + 1.26801 1.1126 -1.87214 0.756012 0.297679 -0.582952 + 1.28331 1.16656 -1.78776 0.753863 0.573264 -0.321029 + 1.30432 1.16844 -1.72478 0.79082 0.592522 -0.153365 + 1.2981 0.965589 -1.83923 0.772878 -0.148182 -0.61701 + 1.26214 0.961948 -1.87438 0.582068 -0.220083 -0.78279 + 1.24683 1.04103 -1.90683 0.570824 -0.0947412 -0.815588 + 1.23062 1.10662 -1.91583 0.562232 0.208256 -0.800328 + 1.25114 1.17205 -1.85306 0.724346 0.49767 -0.477125 + 1.2885 0.895743 -1.82849 0.753784 -0.280068 -0.59445 + 1.26695 0.894931 -1.8507 0.592787 -0.275484 -0.756778 + 1.23039 0.959189 -1.88993 0.253063 -0.323021 -0.91193 + 1.20421 1.03673 -1.9268 0.223994 -0.222487 -0.948855 + 1.188 1.10233 -1.93581 0.196024 0.118531 -0.973409 + 1.26984 0.839253 -1.81832 0.801169 -0.1953 -0.565673 + 1.24829 0.838441 -1.84053 0.611811 -0.176999 -0.770946 + 1.23521 0.892172 -1.86625 0.265435 -0.291855 -0.918893 + 1.18494 0.955324 -1.88926 -0.114054 -0.398877 -0.909884 + 1.28079 0.764191 -1.79278 0.954485 0.125052 -0.270779 + 1.26993 0.764796 -1.81515 0.831109 0.0944805 -0.548024 + 1.25826 0.763103 -1.82955 0.656106 0.0562471 -0.75257 + 1.23163 0.837205 -1.85103 0.291033 -0.192085 -0.937232 + 1.30594 0.673894 -1.79039 0.934947 0.230086 -0.270064 + 1.29853 0.670716 -1.80716 0.826929 0.173397 -0.534903 + 1.28687 0.669023 -1.82156 0.660613 0.101342 -0.743855 + 1.24161 0.761868 -1.84005 0.301939 -0.0496857 -0.952031 + 1.20019 0.833142 -1.85179 -0.0964308 -0.198477 -0.97535 + 1.30777 0.674078 -1.7713 0.962334 0.258563 0.0840204 + 1.32925 0.58928 -1.76711 0.971405 0.225445 0.074475 + 1.32841 0.587097 -1.77896 0.947238 0.174707 -0.268732 + 1.321 0.583919 -1.79573 0.843154 0.108687 -0.526573 + 1.32451 0.590198 -1.75123 0.867958 0.230823 0.439739 + 1.34282 0.509307 -1.74687 0.886698 0.110139 0.449039 + 1.34511 0.507897 -1.75403 0.990643 0.0826856 0.108576 + 1.34427 0.505713 -1.76588 0.971849 0.0342016 -0.23311 + 1.33453 0.50927 -1.73622 0.693299 0.081291 0.71605 + 1.34088 0.46481 -1.74447 0.701632 -0.490993 0.51637 + 1.34317 0.463401 -1.75163 0.834988 -0.535899 0.124931 + 1.34128 0.502486 -1.77348 0.879749 -0.0511724 -0.472677 + 1.32646 0.508505 -1.73018 0.464579 0.0186363 0.885336 + 1.33281 0.464045 -1.73842 0.36434 -0.550687 0.750999 + 1.32487 0.461252 -1.73929 -0.00786567 -0.705549 0.708618 + 1.34018 0.460173 -1.75922 0.721272 -0.662768 -0.201258 + 1.3345 0.499472 -1.78246 0.726094 -0.132574 -0.674694 + 1.31338 0.506325 -1.72595 0.129204 -0.101559 0.986404 + 1.30544 0.503532 -1.72682 -0.146174 -0.223403 0.963703 + 1.29617 0.500936 -1.73006 -0.394578 -0.329484 0.857758 + 1.29293 0.498939 -1.73328 -0.632603 -0.459841 0.623185 + 1.32163 0.459255 -1.74252 -0.24603 -0.835576 0.491205 + 1.24991 0.578077 -1.73494 -0.702934 -0.376909 0.603178 + 1.24579 0.575573 -1.74439 -0.825597 -0.439372 0.354038 + 1.28881 0.496432 -1.74274 -0.763788 -0.516423 0.387214 + 1.2873 0.493385 -1.75131 -0.809403 -0.570089 0.140946 + 1.32012 0.456206 -1.75109 -0.339764 -0.928738 0.14834 + 1.20104 0.658888 -1.74681 -0.83228 -0.444679 0.331014 + 1.2417 0.572741 -1.76335 -0.874146 -0.479077 0.0797117 + 1.24419 0.570849 -1.77784 -0.837363 -0.48997 -0.242391 + 1.28979 0.491493 -1.7658 -0.781526 -0.592364 -0.19576 + 1.19694 0.656058 -1.76576 -0.883318 -0.466063 0.0503526 + 1.20059 0.656724 -1.78915 -0.846339 -0.45279 -0.280518 + 1.25483 0.570414 -1.79884 -0.672513 -0.459272 -0.580341 + 1.29473 0.490244 -1.77525 -0.630615 -0.591166 -0.50284 + 1.32506 0.454956 -1.76054 -0.126233 -0.945401 -0.300469 + 1.15065 0.7456 -1.76694 -0.871576 -0.49022 0.00625768 + 1.15429 0.746264 -1.79033 -0.844154 -0.43147 -0.31818 + 1.21123 0.656288 -1.81015 -0.690879 -0.400442 -0.601941 + 1.26701 0.571504 -1.80835 -0.361255 -0.372013 -0.855045 + 1.30691 0.491333 -1.78477 -0.284784 -0.517688 -0.806782 + 1.11669 0.810805 -1.72692 -0.746864 -0.610341 0.263964 + 1.11041 0.812285 -1.75226 -0.827491 -0.558442 -0.0583179 + 1.12004 0.816937 -1.78948 -0.810732 -0.443788 -0.381794 + 1.1686 0.750717 -1.8186 -0.687723 -0.344695 -0.638923 + 1.08468 0.856552 -1.69225 -0.722899 -0.621558 0.301797 + 1.07187 0.858508 -1.73225 -0.81501 -0.579183 -0.0174824 + 1.0815 0.863159 -1.76947 -0.784326 -0.452098 -0.424783 + 1.13435 0.821389 -1.81775 -0.698072 -0.302654 -0.648919 + 1.18862 0.753823 -1.83409 -0.393365 -0.244961 -0.886148 + 1.06112 0.918685 -1.64761 -0.648941 -0.505591 0.568554 + 1.03712 0.93285 -1.67943 -0.803525 -0.510116 0.306804 + 1.02432 0.934806 -1.71944 -0.861644 -0.50683 -0.0263222 + 1.04295 0.938143 -1.77506 -0.77018 -0.432909 -0.468414 + 1.12481 0.87388 -1.82472 -0.637052 -0.293299 -0.712839 + 1.00444 1.01455 -1.64558 -0.746856 -0.47727 0.463054 + 0.980447 1.02872 -1.6774 -0.856365 -0.450425 0.252501 + 0.961336 1.05217 -1.72489 -0.901465 -0.426153 -0.07586 + 0.979965 1.0555 -1.78051 -0.80676 -0.44746 -0.385897 + 1.08625 0.948863 -1.83031 -0.6332 -0.44364 -0.634224 + 1.02023 1.03424 -1.60761 -0.594641 -0.491949 0.635916 + 0.97869 1.06703 -1.63161 -0.791135 -0.441865 0.422918 + 0.965214 1.08835 -1.63965 -0.922307 -0.214208 0.321658 + 0.960016 1.09198 -1.65691 -0.943323 -0.173494 0.282914 + 0.9502 1.09972 -1.68082 -0.93635 -0.178899 0.302067 + 1.06552 1.02402 -1.58486 -0.428089 -0.457374 0.779454 + 0.992963 1.08999 -1.58691 -0.626555 -0.264091 0.73327 + 0.979487 1.11131 -1.59494 -0.843646 -0.079108 0.531039 + 0.966322 1.11954 -1.63973 -0.942605 0.107551 0.316115 + 1.15987 1.02611 -1.5406 -0.27684 -0.50029 0.820408 + 1.03826 1.07976 -1.56416 -0.472331 -0.504813 0.722542 + 0.985764 1.1241 -1.58551 -0.808884 0.152459 0.567858 + 0.972599 1.13233 -1.6303 -0.850327 0.404567 0.336556 + 1.2598 1.05241 -1.5329 0.346077 -0.101342 0.932717 + 1.2251 1.04822 -1.51723 0.302238 -0.561291 0.770458 + 1.17566 1.04028 -1.52032 -0.074169 -0.659413 0.748113 + 1.05405 1.09393 -1.54388 -0.435095 -0.581989 0.687009 + 1.01822 1.11649 -1.54903 -0.668494 -0.18548 0.720217 + 1.26669 0.996962 -1.53783 0.191982 -0.0791861 0.978199 + 1.31696 1.10538 -1.56332 0.666769 0.11968 0.735592 + 1.28649 1.12987 -1.54719 0.435305 0.353619 0.827927 + 1.25178 1.12568 -1.53153 0.431625 0.0910794 0.897443 + 1.32384 1.04994 -1.56825 0.642907 0.00888994 0.765893 + 1.33324 1.12961 -1.59089 0.818431 0.471312 0.328689 + 1.30278 1.15409 -1.57476 0.682287 0.52096 0.512919 + 1.24521 1.15922 -1.53065 0.498784 0.239579 0.832956 + 1.17813 1.08863 -1.50066 0.1363 -0.130833 0.98199 + 1.3307 0.948515 -1.57777 0.67135 -0.0722876 0.737607 + 1.35813 0.962637 -1.61017 0.923359 0.00169523 0.383934 + 1.35127 1.06406 -1.60065 0.915402 0.118461 0.384716 + 1.33758 1.12621 -1.6301 0.898998 0.43401 0.0586277 + 1.29003 0.878772 -1.56184 0.250202 -0.330333 0.910098 + 1.33586 0.882732 -1.59277 0.61858 -0.181907 0.764375 + 1.29043 0.824147 -1.59318 0.12362 -0.355734 0.926375 + 1.3311 0.828058 -1.60292 0.473589 -0.19945 0.857866 + 1.29862 0.759271 -1.61262 0.0570947 -0.26075 0.963717 + 1.33929 0.763181 -1.62236 0.432294 -0.151859 0.888853 + 1.36057 0.765387 -1.63744 0.795157 -0.0192338 0.606098 + 1.32291 0.684698 -1.63226 0.0576233 -0.174582 0.982955 + 1.35212 0.687546 -1.639 0.410493 -0.066075 0.909467 + 1.3734 0.68975 -1.65408 0.805779 0.0590131 0.589269 + 1.38608 0.61591 -1.65754 0.791353 0.145577 0.593775 + 1.29516 0.680623 -1.63684 -0.354644 -0.30368 0.884311 + 1.3278 0.606846 -1.64451 -0.362319 -0.227353 0.9039 + 1.34395 0.612136 -1.64165 0.0398257 -0.0732493 0.996518 + 1.37316 0.614981 -1.64839 0.411718 0.0550103 0.90965 + 1.40118 0.546766 -1.6563 0.792155 0.0704706 0.606238 + 1.31089 0.600744 -1.65936 -0.659093 -0.350419 0.665434 + 1.35974 0.535943 -1.64708 -0.303379 -0.251928 0.918963 + 1.37589 0.541235 -1.64422 0.0791505 -0.116121 0.990076 + 1.38826 0.545838 -1.64715 0.41253 -0.000709368 0.910944 + 1.35365 0.528329 -1.65332 -0.556322 -0.412501 0.721352 + 1.38582 0.499151 -1.65473 0.134339 -0.539775 0.831021 + 1.39819 0.503755 -1.65766 0.617782 -0.403418 0.674981 + 1.4047 0.544119 -1.66455 0.989441 0.0503563 0.135904 + 1.34704 0.522626 -1.66585 -0.734782 -0.502853 0.45523 + 1.37972 0.491535 -1.66098 -0.130943 -0.7598 0.636834 + 1.33756 1.12735 -1.6807 0.899008 0.433057 -0.0651639 + 1.30767 1.16744 -1.61603 0.751556 0.642952 0.14757 + 1.27484 1.19579 -1.60417 0.676003 0.692793 0.251113 + 1.26994 1.18244 -1.56291 0.594763 0.609173 0.524562 + 1.30765 1.16858 -1.66663 0.789852 0.613264 -0.00639229 + 1.27969 1.20389 -1.65681 0.750076 0.657762 0.06881 + 1.2503 1.22033 -1.60387 0.614372 0.724107 0.313396 + 1.22353 1.20559 -1.54599 0.490416 0.63407 0.597869 + 1.1988 1.18236 -1.51373 0.414068 0.322931 0.851037 + 1.27636 1.20376 -1.71496 0.727289 0.673415 -0.132524 + 1.25515 1.22844 -1.65651 0.599518 0.798301 0.0573963 + 1.2268 1.23779 -1.60672 0.443813 0.858264 0.257707 + 1.20004 1.22305 -1.54884 0.250062 0.813578 0.524937 + 1.25695 1.20615 -1.7733 0.709569 0.659615 -0.247832 + 1.24624 1.23292 -1.70978 0.563551 0.82102 -0.0913027 + 1.21478 1.24832 -1.69966 0.221589 0.973985 -0.0474401 + 1.2237 1.24384 -1.6464 0.380929 0.922439 0.0632341 + 1.19615 1.24703 -1.59924 0.00214134 0.971592 0.236654 + 1.22478 1.21164 -1.8386 0.583801 0.705317 -0.402125 + 1.22682 1.23532 -1.76812 0.509135 0.83909 -0.191594 + 1.19986 1.24786 -1.719 0.117689 0.993019 -0.00784904 + 1.17429 1.24694 -1.67216 -0.287387 0.954447 0.0802453 + 1.19304 1.25307 -1.63892 -0.113058 0.989083 0.0945102 + 1.21375 1.16608 -1.89675 0.525675 0.470143 -0.708965 + 1.19245 1.20432 -1.88267 0.427158 0.649849 -0.628675 + 1.19359 1.23505 -1.82475 0.382408 0.865841 -0.32262 + 1.15778 1.25235 -1.80808 0.309068 0.932818 -0.185276 + 1.19101 1.25262 -1.75145 0.222814 0.974623 -0.0215485 + 1.18154 1.14862 -1.92161 0.211974 0.368095 -0.905303 + 1.16024 1.18686 -1.90753 0.191426 0.484875 -0.853377 + 1.12959 1.21066 -1.89831 0.0964721 0.611775 -0.785127 + 1.16126 1.22772 -1.86882 0.293262 0.79612 -0.52933 + 1.13452 1.09375 -1.93653 -0.173957 0.000954272 -0.984753 + 1.12806 1.14005 -1.92234 -0.145607 0.229769 -0.962291 + 1.1199 1.1752 -1.91443 -0.0879885 0.265306 -0.960141 + 1.08924 1.199 -1.90521 -0.195084 0.408978 -0.891448 + 1.10685 1.23112 -1.87862 -0.10731 0.783951 -0.611479 + 1.15876 1.03287 -1.92612 -0.1449 -0.34348 -0.927914 + 1.07232 1.0927 -1.91396 -0.433302 -0.141605 -0.890055 + 1.05117 1.12854 -1.90297 -0.439325 0.0584886 -0.896422 + 1.04301 1.16369 -1.89506 -0.564069 0.298349 -0.769944 + 1.09656 1.03181 -1.90356 -0.430267 -0.417745 -0.800224 + 1.02003 1.09118 -1.87873 -0.662863 -0.295883 -0.687798 + 0.998882 1.12702 -1.86773 -0.717754 0.0474396 -0.694678 + 1.01517 1.16314 -1.85303 -0.622892 0.599402 -0.502715 + 1.06864 1.19837 -1.89783 -0.480862 0.453194 -0.750591 + 1.13972 0.947954 -1.87361 -0.401986 -0.434215 -0.806142 + 1.04309 1.03272 -1.86026 -0.659759 -0.491604 -0.568369 + 0.956901 1.11396 -1.79899 -0.830602 -0.345704 -0.436564 + 1.20377 0.888107 -1.86701 -0.0877738 -0.299745 -0.949973 + 1.15854 0.880738 -1.85136 -0.418316 -0.296385 -0.858584 + 1.16808 0.828247 -1.84439 -0.397459 -0.211075 -0.893014 + 1.22073 0.758715 -1.84149 -0.0593844 -0.141982 -0.988086 + 1.25427 0.662903 -1.83094 -0.052426 -0.170628 -0.98394 + 1.23124 0.659392 -1.82564 -0.368729 -0.282576 -0.885544 + 1.27515 0.666054 -1.82951 0.330582 -0.0332534 -0.943191 + 1.3025 0.577936 -1.81267 0.353378 -0.124558 -0.927151 + 1.29003 0.575013 -1.81366 -0.0180117 -0.257694 -0.966059 + 1.31703 0.493869 -1.78709 0.0330283 -0.419408 -0.907197 + 1.31422 0.580905 -1.80472 0.683558 0.0207569 -0.729601 + 1.3295 0.496792 -1.78609 0.421723 -0.289783 -0.859172 + 0.931089 1.12317 -1.72831 -0.978758 -0.194938 0.0634939 + 0.935857 1.13387 -1.77346 -0.919801 -0.247786 -0.304249 + 0.977838 1.14693 -1.8422 -0.713433 0.226004 -0.663276 + 0.931083 1.16012 -1.73146 -0.960069 0.198083 0.197561 + 0.935851 1.17081 -1.7766 -0.878816 0.325906 -0.348523 + 0.94695 1.18602 -1.7729 -0.48833 0.832204 -0.262623 + 0.988936 1.16213 -1.8385 -0.402617 0.708069 -0.580119 + 0.948877 1.13357 -1.68792 -0.892675 0.166538 0.418804 + 0.957499 1.15374 -1.6868 -0.638327 0.543842 0.54477 + 0.939705 1.18028 -1.73033 -0.675073 0.686574 0.269985 + 0.980251 1.19469 -1.75863 -0.12658 0.989644 -0.067691 + 1.00648 1.1957 -1.77317 0.157047 0.984631 -0.0764015 + 0.958693 1.12583 -1.66401 -0.923881 0.0713783 0.375965 + 0.959468 1.13722 -1.66512 -0.763965 0.448867 0.463547 + 0.961984 1.1384 -1.66464 -0.150821 0.847836 0.508357 + 0.960015 1.15492 -1.68632 -0.231263 0.714546 0.660259 + 0.973007 1.18895 -1.71607 -0.146352 0.885847 0.44029 + 0.961123 1.12317 -1.657 -0.944149 0.0637159 0.3233 + 0.961898 1.13456 -1.65811 -0.86494 0.328445 0.379478 + 0.962626 1.13559 -1.65822 -0.384087 0.851115 0.357884 + 0.98726 1.13431 -1.66458 0.0946759 0.976704 0.192577 + 0.986618 1.13712 -1.671 0.171918 0.817894 0.549084 + 0.973326 1.13336 -1.63041 -0.460195 0.867698 0.187938 + 0.999435 1.13483 -1.64199 -0.00800085 0.998667 -0.0509874 + 1.03512 1.1309 -1.67772 0.0963545 0.98406 0.149475 + 0.999891 1.13813 -1.5774 -0.449345 0.806446 0.384361 + 1.026 1.1396 -1.58897 -0.0212212 0.999774 0.00117188 + 1.04729 1.13142 -1.65514 0.0204046 0.996962 -0.0751674 + 1.0614 1.12998 -1.68476 -0.107709 0.976572 0.186297 + 1.03405 1.1332 -1.68362 0.191697 0.818682 0.541306 + 1.03235 1.13051 -1.54092 -0.497561 0.542741 0.676657 + 1.05145 1.14076 -1.55772 -0.105228 0.99035 0.0901874 + 1.06772 1.13385 -1.63014 0.00884612 0.99668 -0.0809341 + 1.07244 1.1308 -1.6701 -0.214586 0.972134 0.0943835 + 1.09287 1.10325 -1.50889 -0.492499 -0.384104 0.780967 + 1.05394 1.13424 -1.52692 -0.446676 0.563416 0.695013 + 1.10211 1.13791 -1.52383 -0.0537607 0.994807 0.0864238 + 1.09734 1.13528 -1.58575 -0.00605762 0.999704 -0.0235447 + 1.09318 1.13501 -1.59889 0.022918 0.998904 -0.0407987 + 1.12869 1.08069 -1.50374 -0.232114 -0.536396 0.81142 + 1.11446 1.10698 -1.49489 -0.29937 -0.314541 0.9008 + 1.1046 1.13139 -1.49304 -0.458934 0.390508 0.798049 + 1.11791 1.13865 -1.51295 -0.446601 0.894469 0.0217219 + 1.11314 1.13602 -1.57487 -0.342866 0.939144 0.0212346 + 1.17155 1.12216 -1.49978 0.307449 -0.0241423 0.951258 + 1.14372 1.11795 -1.48887 0.186679 -0.223078 0.956759 + 1.13386 1.14237 -1.48701 -0.186214 0.291295 0.938334 + 1.12653 1.14606 -1.50415 -0.647431 0.753133 0.116726 + 1.17096 1.17815 -1.50282 0.236949 0.209959 0.948563 + 1.13805 1.15763 -1.49276 -0.478373 0.620586 0.621315 + 1.14895 1.16741 -1.52325 -0.744014 0.665116 0.0637527 + 1.1304 1.14888 -1.5377 -0.672577 0.739937 -0.01153 + 1.12178 1.14147 -1.54651 -0.60311 0.797593 0.0102085 + 1.17515 1.19341 -1.50857 -0.165826 0.67002 0.723585 + 1.16047 1.17898 -1.51187 -0.726234 0.6837 0.0716787 + 1.15501 1.17947 -1.53944 -0.797237 0.557654 0.231161 + 1.13354 1.15178 -1.54357 -0.741743 0.66919 0.0447282 + 1.12783 1.14665 -1.55347 -0.646818 0.76134 0.0445799 + 1.18622 1.21333 -1.53064 -0.11433 0.781566 0.613256 + 1.17154 1.19889 -1.53394 -0.721351 0.623456 0.301588 + 1.18233 1.23731 -1.58105 -0.372176 0.833383 0.408606 + 1.16642 1.2016 -1.54698 -0.717277 0.584391 0.379476 + 1.15433 1.20203 -1.57527 -0.828045 0.486584 0.278528 + 1.13898 1.16529 -1.56371 -0.841731 0.46904 0.267378 + 1.1396 1.16384 -1.55976 -0.828227 0.508822 0.234821 + 1.17721 1.24002 -1.59409 -0.507342 0.841389 0.186192 + 1.16573 1.22416 -1.58282 -0.700347 0.634798 0.326414 + 1.14814 1.19983 -1.59413 -0.864127 0.455548 0.213915 + 1.13279 1.16309 -1.58257 -0.864448 0.461387 0.199629 + 1.13034 1.15099 -1.56329 -0.768774 0.601694 0.216682 + 1.16328 1.23237 -1.62663 -0.61144 0.773041 0.168965 + 1.1518 1.21652 -1.61535 -0.814916 0.539121 0.212746 + 1.12289 1.15684 -1.61507 -0.859806 0.468007 0.204214 + 1.12508 1.14782 -1.57819 -0.802741 0.578767 0.143649 + 1.14452 1.22624 -1.65987 -0.706122 0.636983 0.309264 + 1.12523 1.17286 -1.63994 -0.843051 0.441654 0.306933 + 1.12654 1.17353 -1.6363 -0.875013 0.431726 0.219009 + 1.11518 1.14157 -1.61069 -0.797432 0.584675 0.149189 + 1.15936 1.24648 -1.6915 -0.0984614 0.978831 0.179428 + 1.14441 1.24339 -1.68242 -0.331272 0.812617 0.479492 + 1.14005 1.23548 -1.6827 -0.773546 0.460447 0.435449 + 1.14016 1.21833 -1.66015 -0.806717 0.448639 0.384619 + 1.15559 1.24705 -1.69839 -0.0439641 0.990115 0.13319 + 1.14064 1.24395 -1.68931 -0.571651 0.786284 0.234463 + 1.1216 1.21657 -1.69108 -0.697917 0.530416 0.481218 + 1.12101 1.20809 -1.68446 -0.733733 0.458449 0.501458 + 1.12257 1.19901 -1.67431 -0.765486 0.439666 0.469813 + 1.14674 1.25181 -1.73084 -0.102324 0.967737 0.230249 + 1.11538 1.23673 -1.7187 -0.460284 0.699311 0.546903 + 1.08343 1.1595 -1.69198 -0.731771 0.490975 0.47271 + 1.08845 1.16054 -1.68583 -0.704059 0.484914 0.518805 + 1.12011 1.26981 -1.78105 0.0548266 0.989651 0.132607 + 1.08874 1.25473 -1.76892 -0.693427 0.627103 0.354825 + 1.08338 1.23484 -1.76714 -0.855613 0.392694 0.337221 + 1.0772 1.17965 -1.71961 -0.78087 0.436185 0.447197 + 1.13853 1.24819 -1.84913 0.252862 0.868842 -0.425647 + 1.10086 1.26565 -1.8221 -0.0780995 0.936389 -0.342164 + 1.08652 1.26484 -1.8125 -0.662975 0.739671 -0.115547 + 1.08115 1.24495 -1.81071 -0.910834 0.409938 -0.0483 + 1.09251 1.23031 -1.86901 -0.530404 0.739301 -0.414857 + 1.07628 1.23323 -1.82709 -0.716986 0.673658 -0.179208 + 1.06911 1.22632 -1.80518 -0.884144 0.459173 0.0863142 + 1.07014 1.21301 -1.77236 -0.888492 0.383056 0.252684 + 1.06396 1.15782 -1.72483 -0.827479 0.429374 0.361824 + 1.08764 1.2186 -1.8854 -0.276174 0.767923 -0.577946 + 1.06703 1.21797 -1.87802 -0.512825 0.767519 -0.38461 + 1.05986 1.21106 -1.85611 -0.890276 0.450345 -0.0678118 + 1.05896 1.19094 -1.79776 -0.929683 0.342675 0.13514 + 1.05999 1.17763 -1.76494 -0.910434 0.353713 0.214469 + 1.04079 1.19782 -1.85581 -0.544305 0.834781 -0.0829051 + 1.05504 1.19843 -1.85259 -0.564073 0.763002 0.315673 + 1.05414 1.17831 -1.79423 -0.653776 0.706785 0.270245 + 1.05545 1.16187 -1.75467 -0.590011 0.717794 0.369674 + 1.05943 1.14206 -1.71456 -0.366442 0.819707 0.440228 + 1.03559 1.17519 -1.79432 0.317053 0.912267 0.259317 + 1.04984 1.1758 -1.7911 -0.138394 0.940918 0.309064 + 1.05115 1.15936 -1.75153 0.231955 0.894033 0.383278 + 1.05648 1.14191 -1.71326 0.321558 0.868807 0.37653 + 1.06328 1.13243 -1.69196 -0.337153 0.854265 0.395677 + 1.00964 1.18895 -1.7286 0.318432 0.90407 0.285059 + 1.03874 1.16844 -1.74975 0.590607 0.78108 0.202727 + 1.04408 1.15099 -1.71148 0.560772 0.694133 0.451347 + 1.03005 1.14648 -1.69451 0.338196 0.687524 0.642599 + 1.06034 1.13228 -1.69065 0.173358 0.90809 0.381208 + 0.995607 1.18444 -1.71163 0.195642 0.805308 0.559646 + 0.982616 1.1504 -1.68189 0.092698 0.640677 0.762195 + 1.06831 1.13347 -1.6858 -0.575276 0.724091 0.38046 + 1.09001 1.15145 -1.67567 -0.685546 0.508367 0.521142 + 1.10764 1.15354 -1.6541 -0.743202 0.49384 0.451412 + 1.07935 1.13428 -1.67115 -0.556622 0.739256 0.37904 + 1.09697 1.13638 -1.64958 -0.572935 0.733111 0.36646 + 1.10786 1.13774 -1.63375 -0.676676 0.692175 0.251005 + 1.10917 1.13841 -1.6301 -0.747052 0.644488 0.162936 + 1.09287 1.13322 -1.6451 -0.233288 0.968642 0.0854976 + 1.10375 1.13459 -1.62927 -0.296519 0.951917 0.0770099 + 1.10792 1.13486 -1.61614 -0.396428 0.916976 0.0447292 + 1.11393 1.13803 -1.59673 -0.516961 0.854926 0.043042 + 1.12257 1.14348 -1.56836 -0.685363 0.723943 0.07863 + 1.13097 1.14954 -1.55934 -0.581345 0.772665 0.255004 + 1.33518 0.457491 -1.76285 0.387157 -0.813576 -0.433825 + -0.700788 1.60693 -3.09201 0.87201 0.456421 0.176857 + -0.700286 1.60496 -3.09226 0.792166 0.124176 0.597539 + -0.696261 1.60389 -3.09632 0.75288 0.497834 -0.430503 + -0.713785 1.62766 -3.06485 0.678695 0.713623 -0.173537 + -0.702351 1.60795 -3.09721 0.764365 0.640976 -0.0699637 + -0.721527 1.63887 -3.08342 0.817512 0.56768 -0.0970227 + -0.719965 1.63784 -3.07821 0.830319 0.549856 -0.0907127 + -0.714287 1.62963 -3.06459 0.919042 0.367061 0.143628 + -0.698218 1.60237 -3.10074 0.882124 0.319834 -0.345778 + -0.710325 1.62074 -3.11096 0.879372 0.475631 -0.0219134 + -0.714458 1.62632 -3.10743 0.825694 0.563981 0.012463 + -0.762133 1.69675 -3.08184 0.679542 0.710222 -0.183868 + -0.697173 1.59291 -3.09688 0.817646 0.0776346 -0.570463 + -0.695999 1.5703 -3.11698 0.986147 0.1404 -0.0883226 + -0.713731 1.62839 -3.14112 0.839795 0.437362 -0.32165 + -0.755063 1.6842 -3.10586 0.730315 0.675564 -0.10126 + -0.688751 1.58509 -3.09346 0.483798 0.0783854 -0.871662 + -0.689663 1.57411 -3.09402 0.741627 0.0952044 -0.664023 + -0.694954 1.56084 -3.11312 0.978316 0.0897861 -0.186645 + -0.699405 1.57794 -3.14714 0.891748 0.207378 -0.402218 + -0.697311 1.61823 -3.08077 -0.197968 0.57859 -0.791229 + -0.674551 1.60644 -3.08384 0.623596 0.245119 -0.742324 + -0.683668 1.49664 -3.08943 0.938475 -0.0149984 -0.345021 + -0.68896 1.48336 -3.10853 0.984847 0.0140192 -0.172859 + -0.694389 1.50268 -3.15615 0.900856 0.0805795 -0.426573 + -0.700286 1.60496 -3.09226 -0.421139 0.65229 -0.630206 + -0.701336 1.61931 -3.07671 -0.328939 0.679388 -0.655921 + -0.683112 1.63959 -3.07115 0.224761 0.653228 -0.723032 + -0.666173 1.60744 -3.06324 0.955854 0.117313 -0.269409 + -0.67529 1.49763 -3.06883 0.964503 -0.0654329 -0.255836 + -0.686728 1.39615 -3.08333 0.977257 -0.0740926 -0.198693 + -0.723359 1.65031 -3.03058 -0.138716 0.81918 -0.556508 + -0.726764 1.6649 -3.00715 0.0886504 0.983024 -0.160638 + -0.686517 1.65418 -3.04772 0.11062 0.929914 -0.350747 + -0.671291 1.64734 -3.04513 0.759615 0.620625 -0.194446 + -0.660742 1.59762 -3.01491 0.998512 0.0457029 -0.0297487 + -0.735808 1.65866 -3.01872 0.666743 0.734097 -0.128668 + -0.762929 1.68282 -2.988 0.661077 0.346894 0.665314 + -0.76146 1.66694 -2.97721 0.502776 0.643523 0.577144 + -0.744332 1.65545 -2.97188 0.149607 0.885156 0.440587 + -0.710988 1.66406 -2.99897 0.186712 0.974499 0.124456 + -0.740829 1.67833 -3.01615 0.863698 0.403629 0.301843 + -0.76795 1.70249 -2.98543 0.604639 0.564535 0.561882 + -0.810379 1.70534 -2.96548 0.234079 0.696843 0.677951 + -0.80891 1.68947 -2.95469 0.316091 0.624754 0.713981 + -0.746507 1.68655 -3.02977 0.764846 0.644089 -0.0126078 + -0.784145 1.71184 -2.99598 0.309967 0.926418 0.213707 + -0.826574 1.71469 -2.97603 -0.0946936 0.911122 0.40111 + -0.848521 1.68754 -2.95309 -0.531113 0.545634 0.64823 + -0.790836 1.72448 -3.07206 0.277811 0.945056 -0.172307 + -0.77521 1.71429 -3.01999 0.481611 0.861845 0.158979 + -0.827708 1.72022 -3.03019 -0.140146 0.986951 0.0792854 + -0.8513 1.71244 -3.03504 -0.559275 0.828597 -0.0252733 + -0.850166 1.70692 -2.98088 -0.588849 0.746378 0.310125 + -0.80354 1.71436 -3.10247 0.0154224 0.882826 -0.469447 + -0.818774 1.72266 -3.0542 -0.165976 0.985525 -0.0345319 + -0.854737 1.70418 -3.06709 -0.635124 0.741478 -0.216395 + -0.878514 1.68074 -3.01539 -0.885677 0.449688 0.115577 + -0.876869 1.66136 -2.98761 -0.881197 0.294044 0.370176 + -0.773682 1.70236 -3.1145 0.415285 0.887866 -0.198074 + -0.805723 1.6918 -3.12458 -0.0900347 0.638744 -0.764134 + -0.840653 1.68224 -3.12658 -0.394434 0.629292 -0.669637 + -0.831478 1.71254 -3.0846 -0.398061 0.861189 -0.31607 + -0.73235 1.64655 -3.14976 0.513004 0.593254 -0.620384 + -0.775865 1.6798 -3.13661 0.0795118 0.603871 -0.793106 + -0.811574 1.65329 -3.14786 -0.102929 0.430473 -0.896716 + -0.733622 1.62154 -3.16383 0.350697 0.329787 -0.8765 + -0.777137 1.65479 -3.15069 -0.00986803 0.439864 -0.89801 + -0.813206 1.60082 -3.16797 -0.161349 0.265461 -0.950525 + -0.85692 1.595 -3.15879 -0.477052 0.227239 -0.848989 + -0.846504 1.64373 -3.14987 -0.360266 0.361162 -0.860099 + -0.724048 1.56911 -3.1729 0.411711 0.179164 -0.893529 + -0.778768 1.60233 -3.1708 -0.0260258 0.256338 -0.966236 + -0.813673 1.53427 -3.17938 -0.128089 0.119226 -0.98457 + -0.719033 1.49384 -3.18192 0.404354 0.0846973 -0.910673 + -0.769195 1.54989 -3.17987 0.0139145 0.128051 -0.99167 + -0.808316 1.45694 -3.18447 -0.0547645 0.046343 -0.997423 + -0.852566 1.44075 -3.18167 -0.393856 0.030329 -0.918672 + -0.857387 1.52845 -3.17019 -0.4561 0.122059 -0.881518 + -0.693939 1.4298 -3.16189 0.897554 -0.0132109 -0.440707 + -0.716485 1.43006 -3.18433 0.416663 0.00902267 -0.909016 + -0.763838 1.47256 -3.18497 0.00751894 0.0515189 -0.998644 + -0.76129 1.40878 -3.18738 0.0179453 -0.015389 -0.999721 + -0.801582 1.39762 -3.18654 -0.0330196 -0.0281901 -0.999057 + -0.68851 1.41049 -3.11426 0.993445 -0.0466734 -0.104351 + -0.694726 1.36325 -3.12214 0.991643 -0.0796369 -0.1015 + -0.69819 1.36955 -3.16113 0.901623 -0.0574822 -0.428686 + -0.720736 1.36981 -3.18358 0.383088 -0.057623 -0.921913 + -0.692944 1.34892 -3.0912 0.988056 -0.150464 -0.0332515 + -0.698909 1.27668 -3.09442 0.995134 -0.0496643 0.0850939 + -0.698506 1.28133 -3.1216 0.998452 -0.0355661 -0.0427657 + -0.70197 1.28763 -3.1606 0.89746 -0.0489395 -0.438373 + -0.684572 1.36835 -3.06714 0.953507 -0.295606 0.0586556 + -0.696866 1.34501 -3.07027 0.914862 -0.299159 0.271168 + -0.70283 1.27277 -3.07349 0.941181 -0.0619246 0.332179 + -0.679223 1.43047 -3.06729 0.92128 0.018115 -0.388478 + -0.677067 1.40267 -3.05111 0.970728 -0.214989 0.107085 + -0.703187 1.35996 -3.03439 0.790129 -0.399228 0.465095 + -0.715481 1.33661 -3.03751 0.823762 -0.289854 0.487238 + -0.717646 1.267 -3.04741 0.83722 -0.0679653 0.542626 + -0.675092 1.47307 -3.05471 0.984177 -0.0643738 -0.165081 + -0.669514 1.46659 -3.01935 0.966297 -0.190461 0.173189 + -0.688425 1.47104 -2.98324 0.753977 -0.323037 0.571984 + -0.695978 1.40712 -3.015 0.770471 -0.342081 0.537916 + -0.660545 1.57306 -3.00079 0.990586 -0.0330301 0.132844 + -0.665383 1.50919 -3.00677 0.984457 -0.120521 0.127743 + -0.675449 1.52296 -2.97583 0.830708 -0.177822 0.527544 + -0.728331 1.47624 -2.93836 0.664829 -0.308652 0.680247 + -0.665861 1.63752 -2.9968 0.852699 0.476346 0.214474 + -0.678778 1.63089 -2.96438 0.74837 0.433046 0.502407 + -0.683725 1.60477 -2.95156 0.800462 0.0485411 0.597414 + -0.670611 1.58683 -2.96985 0.909758 0.226955 0.347608 + -0.715355 1.52815 -2.93095 0.699701 -0.20971 0.682965 + -0.695763 1.65722 -2.99638 0.454934 0.8663 0.206297 + -0.70868 1.65059 -2.96396 0.341868 0.822353 0.45482 + -0.722961 1.62083 -2.91547 0.463381 0.545157 0.698629 + -0.727908 1.5947 -2.90265 0.633652 0.0798204 0.769489 + -0.728557 1.65461 -2.9637 0.0113152 0.90852 0.417688 + -0.742838 1.62485 -2.91521 -0.037868 0.83699 0.545906 + -0.752843 1.61059 -2.89508 0.0477925 0.635702 0.770454 + -0.750816 1.58804 -2.88577 0.300055 0.114677 0.947004 + -0.72847 1.54609 -2.91265 0.672044 -0.190225 0.715661 + -0.750278 1.63944 -2.94596 -0.0419403 0.82293 0.566594 + -0.750129 1.63638 -2.94029 -0.196128 0.856373 0.47766 + -0.760134 1.62211 -2.92016 -0.272601 0.828617 0.488961 + -0.777383 1.60064 -2.89336 -0.0725441 0.524825 0.848113 + -0.767406 1.65093 -2.95128 0.464054 0.686469 0.559834 + -0.759055 1.63552 -2.94107 0.235389 0.788655 0.567992 + -0.758906 1.63246 -2.93541 -0.0561691 0.788152 0.612912 + -0.76136 1.63146 -2.93523 0.0293959 0.697708 0.715779 + -0.762588 1.62112 -2.91999 -0.0550318 0.817711 0.572993 + -0.772151 1.65318 -2.94903 0.50303 0.628038 0.593741 + -0.7638 1.63777 -2.93882 0.437651 0.643943 0.627535 + -0.780306 1.6323 -2.92608 0.362909 0.634026 0.682868 + -0.795101 1.61183 -2.89945 0.0527002 0.497856 0.865657 + -0.819506 1.67489 -2.93533 0.0561581 0.616276 0.785525 + -0.782747 1.63861 -2.92967 0.424833 0.578091 0.696655 + -0.815706 1.62228 -2.90612 -0.178331 0.424784 0.887556 + -0.812919 1.58737 -2.89387 -0.329742 -0.00853355 0.944033 + -0.775356 1.57809 -2.88406 -0.0982588 0.0244805 0.99486 + -0.844721 1.63493 -2.92389 -0.610742 0.334372 0.717767 + -0.833524 1.59783 -2.90054 -0.501494 0.00354065 0.865154 + -0.856485 1.57603 -2.93009 -0.739695 -0.15111 0.655757 + -0.853575 1.52989 -2.94193 -0.728686 -0.230587 0.644861 + -0.810009 1.54124 -2.90571 -0.505813 -0.202465 0.838547 + -0.883256 1.63656 -2.98772 -0.932027 0.164436 0.322934 + -0.851108 1.61012 -2.92401 -0.798286 0.13481 0.586997 + -0.874069 1.58832 -2.95356 -0.88325 0.00170727 0.4689 + -0.883002 1.55814 -2.981 -0.944823 -0.13053 0.30045 + -0.844819 1.45278 -2.96066 -0.762443 -0.236235 0.602389 + -0.892188 1.60638 -3.01517 -0.979897 0.0684396 0.187397 + -0.88195 1.67248 -3.04744 -0.903471 0.421792 -0.0763669 + -0.892555 1.63829 -3.06061 -0.96299 0.264708 -0.0507928 + -0.899933 1.55969 -3.04404 -0.977814 -0.00851941 0.209302 + -0.874246 1.48103 -2.99973 -0.895229 -0.163218 0.414637 + -0.863912 1.67388 -3.10907 -0.735786 0.533196 -0.417517 + -0.874516 1.63969 -3.12224 -0.805323 0.351388 -0.477473 + -0.9003 1.5916 -3.08948 -0.976471 0.154134 -0.15082 + -0.902105 1.51138 -3.06534 -0.985345 -0.0566175 0.1609 + -0.884932 1.59097 -3.13117 -0.833899 0.194448 -0.51653 + -0.886875 1.52234 -3.145 -0.828293 0.0661672 -0.556374 + -0.902243 1.52298 -3.10331 -0.983168 0.0133235 -0.182215 + -0.896536 1.41999 -3.07138 -0.969009 -0.152395 0.194414 + -0.876418 1.43272 -3.02103 -0.872716 -0.171951 0.456947 + -0.882054 1.43465 -3.15648 -0.834092 -0.0343469 -0.550555 + -0.896673 1.43159 -3.10936 -0.981895 -0.088221 -0.167628 + -0.886844 1.37081 -3.11415 -0.946378 -0.294861 -0.13201 + -0.883944 1.37025 -3.07144 -0.901172 -0.352952 0.251623 + -0.863826 1.38298 -3.02108 -0.797005 -0.327477 0.507485 + -0.845832 1.38144 -3.18374 -0.365779 -0.13663 -0.920618 + -0.872225 1.37387 -3.16127 -0.788234 -0.246012 -0.564062 + -0.859534 1.34392 -3.15667 -0.77261 -0.284055 -0.567791 + -0.870607 1.33676 -3.1204 -0.942007 -0.299468 -0.151464 + -0.867707 1.3362 -3.07768 -0.91754 -0.325362 0.228605 + -0.797511 1.35535 -3.18285 -0.0383612 -0.0950201 -0.994736 + -0.833141 1.35149 -3.17915 -0.33025 -0.201621 -0.922108 + -0.757219 1.36651 -3.18369 0.00559388 -0.0770702 -0.99701 + -0.756405 1.28568 -3.17829 -0.0128796 -0.0767177 -0.99697 + -0.788812 1.28247 -3.17667 -0.0668274 -0.0866222 -0.993997 + -0.824442 1.2786 -3.17296 -0.375244 -0.117156 -0.919492 + -0.845429 1.27364 -3.155 -0.806172 -0.15623 -0.570682 + -0.719922 1.28898 -3.17817 0.382609 -0.0673176 -0.921455 + -0.721898 1.17826 -3.1696 0.381692 -0.0653494 -0.921976 + -0.750995 1.17563 -3.16969 -0.0169892 -0.0626134 -0.997893 + -0.783401 1.17241 -3.16807 -0.0691604 -0.0628298 -0.995625 + -0.703946 1.17691 -3.15202 0.903222 -0.0484222 -0.426432 + -0.707888 1.07356 -3.14842 0.923046 -0.0505435 -0.381355 + -0.72109 1.07123 -3.16464 0.441413 -0.0515657 -0.895821 + -0.750186 1.0686 -3.16473 1.25246e-005 -0.0283135 -0.999599 + -0.701184 1.17188 -3.12093 0.998569 -0.0326852 -0.0423313 + -0.705125 1.06853 -3.11732 0.998025 -0.049581 -0.0385655 + -0.710884 0.972315 -3.11638 0.997622 -0.0573218 -0.038262 + -0.713241 0.976547 -3.1442 0.924653 -0.0672904 -0.374817 + -0.726443 0.974225 -3.16042 0.551747 -0.042467 -0.832929 + -0.701586 1.16723 -3.09375 0.993363 -0.0320286 0.110476 + -0.705752 1.06448 -3.09411 0.992459 -0.0490947 0.112318 + -0.711511 0.968265 -3.09316 0.991759 -0.0566243 0.114921 + -0.716751 0.87302 -3.09366 0.990209 -0.0530098 0.12914 + -0.715786 0.876178 -3.11125 0.998434 -0.0512606 -0.0224004 + -0.705499 1.16387 -3.07604 0.936145 -0.0328721 0.350075 + -0.709665 1.06112 -3.07641 0.941353 -0.0471569 0.334113 + -0.715225 0.964675 -3.07691 0.941111 -0.053516 0.333834 + -0.720464 0.869428 -3.07741 0.948357 -0.0567908 0.312079 + -0.720315 1.1581 -3.04997 0.833103 -0.0337943 0.552084 + -0.720112 1.05203 -3.05692 0.845269 -0.04334 0.532581 + -0.725672 0.955581 -3.05743 0.859626 -0.0495315 0.508517 + -0.726842 0.85972 -3.0645 0.874302 -0.0569026 0.482035 + -0.72532 0.775814 -3.08118 0.935201 -0.0985868 0.340116 + -0.742695 1.15122 -3.02139 0.553754 -0.0650853 0.830133 + -0.742493 1.04514 -3.02834 0.494536 -0.0672188 0.866554 + -0.737453 0.933047 -3.04199 0.534197 -0.0828218 0.841293 + -0.738623 0.837186 -3.04907 0.48591 -0.0853355 0.869833 + -0.746692 1.25807 -3.01032 0.552602 -0.09964 0.827467 + -0.775955 1.25415 -3.0029 -0.1075 -0.151712 0.982561 + -0.771958 1.1473 -3.01397 -0.122854 -0.111231 0.986172 + -0.764642 1.03836 -3.02585 -0.175392 -0.124385 0.976609 + -0.744527 1.32767 -3.00042 0.569215 -0.276986 0.774127 + -0.783702 1.33029 -2.9878 -0.108099 -0.376409 0.920126 + -0.812463 1.25423 -3.02293 -0.611576 -0.165372 0.77371 + -0.801073 1.14736 -3.02995 -0.607806 -0.119498 0.785043 + -0.793758 1.03842 -3.04183 -0.597205 -0.143892 0.789076 + -0.746833 1.36701 -2.97759 0.50708 -0.430176 0.746872 + -0.786007 1.36963 -2.96497 -0.146804 -0.558744 0.816243 + -0.82021 1.33037 -3.00783 -0.591072 -0.326004 0.737804 + -0.836586 1.25639 -3.04862 -0.825053 -0.166857 0.539857 + -0.739624 1.41418 -2.9582 0.61681 -0.390308 0.683524 + -0.784733 1.39524 -2.94443 0.0154982 -0.666832 0.745047 + -0.833503 1.38189 -2.98836 -0.592472 -0.454608 0.665062 + -0.850533 1.33146 -3.04056 -0.808966 -0.298991 0.506141 + -0.75727 1.49267 -2.90546 0.478589 -0.229456 0.847527 + -0.768564 1.43061 -2.9253 0.547875 -0.475624 0.688197 + -0.792961 1.41006 -2.92624 -0.171974 -0.606727 0.776085 + -0.832229 1.40751 -2.96782 -0.642983 -0.420387 0.640194 + -0.751378 1.53942 -2.89578 0.401628 -0.223447 0.888125 + -0.781249 1.53134 -2.89374 -0.161111 -0.182067 0.969997 + -0.776791 1.44544 -2.90711 0.1735 -0.356821 0.91792 + -0.805551 1.45534 -2.91908 -0.583928 -0.211372 0.783805 + -0.85376 1.26113 -3.08574 -0.960066 -0.167307 0.224236 + -0.838893 1.1533 -3.08524 -0.962806 -0.122283 0.240939 + -0.825197 1.14953 -3.05563 -0.828872 -0.120879 0.546223 + -0.856502 1.26648 -3.11872 -0.977335 -0.16589 -0.131519 + -0.841635 1.15865 -3.11822 -0.98418 -0.122884 -0.127629 + -0.829853 1.05014 -3.11636 -0.987791 -0.100641 -0.118913 + -0.82755 1.04513 -3.0913 -0.964916 -0.105535 0.240416 + -0.813854 1.04135 -3.06169 -0.814651 -0.125386 0.566235 + -0.832804 1.16437 -3.14715 -0.822315 -0.115083 -0.557273 + -0.821023 1.05585 -3.14529 -0.833394 -0.0887406 -0.545508 + -0.81167 0.946961 -3.14421 -0.831525 -0.101834 -0.546074 + -0.819573 0.942088 -3.11833 -0.985849 -0.111316 -0.125341 + -0.81727 0.937079 -3.09327 -0.936686 -0.125531 0.326895 + -0.811817 1.16932 -3.16512 -0.379046 -0.0868437 -0.921294 + -0.803682 1.05969 -3.16112 -0.406789 -0.0495096 -0.912179 + -0.794329 0.950801 -3.16004 -0.452282 -0.0774234 -0.888508 + -0.786447 0.851142 -3.15179 -0.440704 -0.160811 -0.883131 + -0.79914 0.848498 -3.14022 -0.814523 -0.168243 -0.5552 + -0.775266 1.06278 -3.16408 -0.0622994 -0.0139068 -0.997961 + -0.770114 0.952483 -3.16563 -0.113135 -0.0522288 -0.992206 + -0.762232 0.852825 -3.15737 -0.0708876 -0.156051 -0.985202 + -0.745035 0.958311 -3.16628 0.165553 -0.042963 -0.985265 + -0.745119 0.859859 -3.15731 0.220004 -0.131641 -0.966576 + -0.758657 0.762938 -3.13818 0.0550191 -0.328372 -0.942945 + -0.772999 0.76158 -3.13749 -0.313277 -0.317313 -0.895081 + -0.785692 0.758936 -3.12592 -0.779879 -0.303734 -0.547297 + -0.726527 0.875771 -3.15145 0.637624 -0.0976846 -0.764129 + -0.73024 0.779145 -3.13746 0.579893 -0.229939 -0.78157 + -0.741544 0.769971 -3.13812 0.226529 -0.320206 -0.919866 + -0.740176 0.721669 -3.11429 0.417408 -0.711078 -0.565807 + -0.755709 0.715314 -3.11404 0.172148 -0.797448 -0.578309 + -0.718143 0.880408 -3.13907 0.939885 -0.0677119 -0.33471 + -0.721855 0.783783 -3.12507 0.940257 -0.12797 -0.315498 + -0.728872 0.730843 -3.11363 0.755628 -0.465799 -0.460497 + -0.727586 0.728534 -3.09845 0.8942 -0.447648 0.00409192 + -0.737605 0.715827 -3.07849 0.597383 -0.684818 0.417323 + -0.720568 0.781473 -3.10989 0.994763 -0.0961954 -0.0345439 + -0.721533 0.778315 -3.0923 0.979906 -0.0915413 0.177214 + -0.731373 0.726032 -3.08733 0.918867 -0.247338 0.307421 + -0.73793 0.755901 -3.05943 0.541771 -0.217753 0.81183 + -0.752399 0.748231 -3.05953 -0.118103 -0.297788 0.947298 + -0.753137 0.709472 -3.07824 0.0544323 -0.869105 0.491624 + -0.774364 0.711295 -3.09923 -0.605963 -0.794246 -0.044521 + -0.770051 0.713956 -3.11335 -0.357824 -0.752905 -0.552355 + -0.731699 0.766105 -3.06827 0.893625 -0.114176 0.434048 + -0.753092 0.829517 -3.04917 -0.267056 -0.108626 0.957539 + -0.76694 0.74808 -3.06611 -0.541848 -0.236166 0.806614 + -0.759602 0.926263 -3.03951 -0.241779 -0.119321 0.962967 + -0.778414 0.831733 -3.06725 -0.639391 -0.0982445 0.76258 + -0.793113 0.83416 -3.08097 -0.755826 -0.117781 0.644092 + -0.78164 0.750508 -3.07983 -0.804877 -0.215327 0.552999 + -0.767678 0.70932 -3.08482 -0.432226 -0.826862 0.359834 + -0.784924 0.928477 -3.05759 -0.64256 -0.129857 0.755151 + -0.80502 0.931409 -3.07746 -0.760192 -0.133541 0.635827 + -0.805363 0.839829 -3.09679 -0.933723 -0.150671 0.324746 + -0.788325 0.752482 -3.09424 -0.942382 -0.245713 0.227026 + -0.807043 0.843624 -3.11434 -0.978575 -0.16081 -0.128571 + -0.790005 0.756277 -3.1118 -0.946458 -0.280709 -0.159433 + -0.106343 0.878927 -3.34614 0.362612 -0.0130587 0.931849 + -0.118475 0.842721 -3.34595 0.166227 -0.123161 0.978366 + -0.110367 0.844247 -3.35106 0.516151 -0.813737 0.267245 + -0.124122 0.879198 -3.34372 -0.0237039 0.0262078 0.999375 + -0.133302 0.844537 -3.34848 -0.418236 -0.77872 0.467625 + -0.098235 0.880453 -3.35125 0.620088 -0.0692167 0.781473 + -0.082945 0.960539 -3.37009 0.599546 0.0773708 0.796591 + -0.105239 0.956342 -3.35604 0.327362 0.126304 0.936419 + -0.123019 0.956611 -3.35362 -0.0428739 0.14651 0.98828 + -0.138949 0.881012 -3.34624 -0.349957 -0.0045157 0.936755 + -0.088223 0.883575 -3.36059 0.861612 -0.23212 0.451381 + -0.072933 0.963663 -3.37943 0.773581 0.011667 0.63359 + -0.057545 1.05444 -3.40151 0.769322 0.0293213 0.638188 + -0.074516 1.04927 -3.38601 0.590202 0.0879483 0.802451 + -0.09681 1.04507 -3.37197 0.331846 0.132761 0.933945 + -0.108929 0.846051 -3.35592 0.531956 -0.796498 -0.287425 + -0.086785 0.885379 -3.36544 0.924554 -0.376917 -0.0559803 + -0.064728 0.968621 -3.39278 0.974747 -0.17852 0.134159 + -0.04934 1.0594 -3.41486 0.978964 -0.1059 0.174397 + -0.133971 0.849398 -3.36091 -0.374838 -0.728683 -0.573164 + -0.124687 0.850417 -3.36488 -0.0825503 -0.726829 -0.681839 + -0.113113 0.848798 -3.36239 0.224854 -0.747704 -0.624804 + -0.088296 0.889645 -3.37606 0.76816 -0.449907 -0.455536 + -0.066239 0.972886 -3.4034 0.847901 -0.310072 -0.430021 + -0.118475 0.842721 -3.34595 -0.0524469 -0.93101 -0.361206 + -0.136798 0.847063 -3.35448 -0.644376 -0.753483 -0.13055 + -0.15653 0.892167 -3.37189 -0.890448 -0.359363 -0.279214 + -0.153703 0.894503 -3.37832 -0.674709 -0.410682 -0.613277 + -0.14235 0.897646 -3.38808 -0.417194 -0.439866 -0.795278 + -0.152406 0.885082 -3.35423 -0.741875 -0.129474 0.65792 + -0.155902 0.88761 -3.36023 -0.946909 -0.249627 0.202609 + -0.17198 0.972621 -3.38504 -0.9643 -0.0919351 0.248343 + -0.172608 0.977179 -3.3967 -0.945945 -0.215313 -0.242544 + -0.162365 0.965675 -3.36855 -0.699381 0.0543021 0.712683 + -0.173576 1.05657 -3.38854 -0.70759 0.0642443 0.703697 + -0.18319 1.06351 -3.40504 -0.966261 -0.0545806 0.251715 + -0.183701 1.07108 -3.42438 -0.954115 -0.168561 -0.247492 + -0.164834 0.983602 -3.4144 -0.715077 -0.306015 -0.628507 + -0.148908 0.961604 -3.36056 -0.363474 0.127128 0.92289 + -0.151989 1.05016 -3.37509 -0.362219 0.1422 0.921182 + -0.182779 1.15464 -3.4068 -0.744595 0.0048785 0.667499 + -0.192791 1.16341 -3.42762 -0.977179 -0.0950015 0.18999 + -0.193301 1.17098 -3.44696 -0.954633 -0.154396 -0.254632 + -0.126099 1.04517 -3.36815 -0.0556157 0.15951 0.985628 + -0.120362 1.14332 -3.38379 -0.0355452 0.101679 0.994182 + -0.161192 1.14824 -3.39335 -0.374325 0.0748327 0.924273 + -0.166337 1.23463 -3.39624 -0.36861 -0.0912887 0.925091 + -0.196173 1.24694 -3.41281 -0.763863 -0.176581 0.620752 + -0.091073 1.14322 -3.38761 0.332416 0.0869823 0.939113 + -0.082343 1.22998 -3.39421 0.376697 -0.0499367 0.92499 + -0.125506 1.22972 -3.38668 -0.0387002 -0.0562603 0.997666 + -0.062932 1.14852 -3.40534 0.602212 0.0456936 0.797028 + -0.054202 1.23528 -3.41194 0.635332 -0.0503034 0.770599 + -0.039483 1.31898 -3.41339 0.690144 -0.142272 0.709549 + -0.079466 1.29589 -3.38419 0.412329 -0.155274 0.897705 + -0.122629 1.29563 -3.37666 0.00508542 -0.179858 0.98368 + -0.045961 1.1537 -3.42083 0.788275 0.00197918 0.615321 + -0.03486 1.24243 -3.43173 0.820211 -0.0729481 0.56739 + -0.020141 1.32613 -3.43318 0.907723 -0.15571 0.389608 + -0.011027 1.37809 -3.43342 0.904738 -0.252158 0.343314 + -0.033067 1.36756 -3.40765 0.720628 -0.225701 0.655556 + -0.03672 1.15996 -3.43768 0.984746 -0.101403 0.141399 + -0.025619 1.24869 -3.44858 0.992954 -0.0971488 0.0678533 + -0.020138 1.3201 -3.44856 0.984085 -0.132565 -0.118338 + -0.011025 1.37206 -3.4488 0.954851 -0.235054 -0.181681 + -0.051485 1.06648 -3.43248 0.880501 -0.236271 -0.410967 + -0.038864 1.16704 -3.4553 0.901422 -0.170848 -0.397805 + -0.030731 1.24856 -3.46418 0.885025 -0.089912 -0.456778 + -0.02525 1.31997 -3.46416 0.752804 -0.052248 -0.656168 + -0.019385 1.36442 -3.4612 0.71315 -0.158792 -0.68279 + -0.062989 1.07403 -3.45028 0.62977 -0.285083 -0.722576 + -0.053384 1.17657 -3.47777 0.658552 -0.200392 -0.725363 + -0.045251 1.2581 -3.48665 0.687995 0.0143905 -0.725573 + -0.040422 1.30972 -3.47184 0.527488 0.0333045 -0.84891 + -0.034557 1.35416 -3.46888 0.504975 -0.0713019 -0.860184 + -0.077743 0.980436 -3.4212 0.585176 -0.365 -0.724116 + -0.083243 1.08047 -3.46442 0.358027 -0.305043 -0.882477 + -0.073639 1.18301 -3.49191 0.382668 -0.207642 -0.90025 + -0.070166 1.25611 -3.50245 0.424421 -0.0109552 -0.905399 + -0.09248 0.89239 -3.38254 0.533952 -0.469653 -0.70308 + -0.104595 0.89648 -3.39094 0.260587 -0.476158 -0.839862 + -0.089859 0.984527 -3.4296 0.330789 -0.380542 -0.863578 + -0.104442 1.08492 -3.47127 0.0839557 -0.308391 -0.947548 + -0.107434 1.18723 -3.50136 0.0833086 -0.217474 -0.972504 + -0.116169 0.898099 -3.39343 0.0201028 -0.469621 -0.882639 + -0.111057 0.988976 -3.43646 0.0608176 -0.382686 -0.921874 + -0.132096 1.08551 -3.46917 -0.216844 -0.304605 -0.927467 + -0.133066 0.898663 -3.39205 -0.207426 -0.453354 -0.866859 + -0.127953 0.989541 -3.43507 -0.20885 -0.370352 -0.905108 + -0.157624 1.08271 -3.45826 -0.473128 -0.286403 -0.833141 + -0.165186 1.18429 -3.48549 -0.504392 -0.21294 -0.836806 + -0.135089 1.18782 -3.49926 -0.232552 -0.226026 -0.945955 + -0.153481 0.986745 -3.42415 -0.453962 -0.345674 -0.821236 + -0.175927 1.0775 -3.44208 -0.745893 -0.244613 -0.619523 + -0.183489 1.17908 -3.4693 -0.758234 -0.190554 -0.623514 + -0.192842 1.26553 -3.47934 -0.762133 -0.0916269 -0.640904 + -0.168579 1.25838 -3.49837 -0.517788 -0.0802621 -0.851736 + -0.202654 1.25742 -3.457 -0.940079 -0.141508 -0.310204 + -0.217438 1.34522 -3.45249 -0.913601 -0.1639 -0.372116 + -0.198307 1.32203 -3.4742 -0.704839 -0.0588379 -0.706923 + -0.174044 1.31488 -3.49323 -0.536643 -0.0347598 -0.843093 + -0.138482 1.26191 -3.51215 -0.215974 -0.0617531 -0.974444 + -0.206185 1.25572 -3.43363 -0.981405 -0.174053 0.0809284 + -0.220969 1.34351 -3.42911 -0.97659 -0.20886 -0.0514645 + -0.235157 1.39875 -3.42348 -0.938221 -0.330245 -0.103346 + -0.227261 1.39459 -3.45194 -0.896375 -0.298373 -0.32785 + -0.208129 1.3714 -3.47365 -0.75561 -0.241405 -0.608915 + -0.216163 1.33037 -3.4005 -0.834021 -0.251043 0.491311 + -0.23035 1.38562 -3.39487 -0.846167 -0.397572 0.354878 + -0.240846 1.40782 -3.38741 -0.853154 -0.306734 0.421951 + -0.246637 1.42629 -3.42525 -0.972225 -0.215448 -0.0914337 + -0.238741 1.42212 -3.45371 -0.88983 -0.204054 -0.408122 + -0.186326 1.31806 -3.38394 -0.380923 -0.241721 0.892451 + -0.193244 1.36576 -3.37333 -0.420574 -0.359847 0.832843 + -0.203739 1.38796 -3.36587 -0.440712 -0.314686 0.840682 + -0.233773 1.47268 -3.36828 -0.568142 -0.0261557 0.822515 + -0.247411 1.47396 -3.38664 -0.925928 -0.0468269 0.374787 + -0.129546 1.34333 -3.36606 -0.0229383 -0.380094 0.924663 + -0.129607 1.36256 -3.35343 -0.018699 -0.351372 0.936049 + -0.122787 1.41055 -3.34648 0.0740658 -0.0906146 0.993128 + -0.196918 1.43595 -3.35892 -0.247167 -0.0614541 0.967022 + -0.07305 1.34448 -3.37845 0.479049 -0.312017 0.820462 + -0.073112 1.36371 -3.36582 0.453341 -0.297844 0.840101 + -0.069783 1.41068 -3.36405 0.4847 -0.0663472 0.87216 + -0.117553 1.48198 -3.34654 0.0960616 -0.0144337 0.995271 + -0.164313 1.51504 -3.35114 -0.151542 0.0317332 0.987941 + -0.024941 1.39305 -3.40588 0.734603 -0.180485 0.654052 + -0.021612 1.44002 -3.40411 0.722868 -0.0173732 0.690768 + -0.064549 1.48211 -3.36411 0.542368 -0.0188203 0.83993 + -0.094516 1.52942 -3.34775 0.219293 0.0386151 0.974894 + -0.002901 1.40358 -3.43164 0.92223 -0.184969 0.339527 + 0.001168 1.44139 -3.43087 0.933247 -0.0297194 0.358005 + -0.021597 1.51175 -3.41137 0.748304 0.0181527 0.663108 + -0.013123 1.57046 -3.41925 0.914963 -0.040804 0.401468 + -0.056075 1.54083 -3.37199 0.71383 -0.0931773 0.694093 + -0.002896 1.3993 -3.45006 0.955614 -0.188155 -0.226717 + 0.001172 1.43711 -3.44928 0.955307 -0.0328413 -0.293784 + 0.001183 1.51311 -3.43813 0.989659 0.138968 0.0355261 + -0.011257 1.39166 -3.46246 0.703873 -0.169762 -0.689742 + -0.011073 1.44453 -3.46711 0.620548 0.046224 -0.782804 + -0.011063 1.52054 -3.45595 0.863862 0.088788 -0.495841 + -0.029536 1.38166 -3.47059 0.522139 -0.138507 -0.841538 + -0.029353 1.43453 -3.47524 0.575167 -0.06648 -0.81533 + -0.041779 1.51527 -3.50199 0.720635 -0.0311367 -0.692616 + -0.039756 1.59678 -3.49803 0.671506 0.042351 -0.739788 + -0.009039 1.60204 -3.45199 0.934666 -0.0735715 -0.347833 + -0.057839 1.37151 -3.48744 0.550857 -0.158949 -0.819324 + -0.054059 1.41429 -3.49364 0.595397 -0.144842 -0.790268 + -0.066486 1.49502 -3.5204 0.455704 -0.0515371 -0.888638 + -0.046079 1.64023 -3.49797 0.366265 0.195073 -0.909833 + -0.009016 1.72638 -3.45139 0.791461 0.0559912 -0.60865 + -0.06286 1.34401 -3.48573 0.544074 -0.0714078 -0.835993 + -0.101424 1.36259 -3.51539 0.317609 -0.165723 -0.933628 + -0.097644 1.40537 -3.52159 0.312029 -0.151729 -0.937879 + -0.065337 1.30773 -3.48765 0.526927 0.0953753 -0.844542 + -0.099036 1.33258 -3.50934 0.348894 -0.0589408 -0.935307 + -0.139275 1.33491 -3.513 -0.210491 -0.127275 -0.969275 + -0.141663 1.36492 -3.51906 -0.186031 -0.171324 -0.967492 + -0.101513 1.29631 -3.51126 0.253415 0.0453247 -0.966295 + -0.136033 1.29788 -3.51151 -0.209251 -0.0067073 -0.977839 + -0.177285 1.35191 -3.49472 -0.567322 -0.207713 -0.796869 + -0.184847 1.37756 -3.50042 -0.561368 -0.242097 -0.791363 + -0.103962 1.26034 -3.5119 0.131742 -0.0675522 -0.98898 + -0.215691 1.39704 -3.47935 -0.761032 -0.232816 -0.605497 + -0.241301 1.48495 -3.45658 -0.863912 -0.018531 -0.503302 + -0.218252 1.45987 -3.48222 -0.722114 -0.0439708 -0.690375 + -0.191368 1.42331 -3.50452 -0.556715 -0.0956094 -0.825183 + -0.148184 1.41067 -3.52316 -0.23442 -0.113724 -0.96546 + -0.123403 1.43634 -3.52897 -0.00501192 -0.0748548 -0.997182 + -0.253202 1.49243 -3.42449 -0.993295 -0.0314111 -0.111258 + -0.241996 1.59388 -3.44778 -0.857664 0.0824427 -0.507558 + -0.208758 1.54906 -3.49504 -0.634685 0.103079 -0.765865 + -0.181874 1.51251 -3.51734 -0.455282 0.0289566 -0.889876 + -0.157093 1.53818 -3.52316 -0.221255 0.149735 -0.963652 + -0.251002 1.57982 -3.39807 -0.922518 0.0173927 0.385562 + -0.253897 1.60135 -3.41568 -0.993631 0.0333873 -0.107627 + -0.238164 1.68532 -3.43339 -0.814071 0.214718 -0.539616 + -0.237364 1.57854 -3.37971 -0.615142 0.0878097 0.783511 + -0.234255 1.66947 -3.3863 -0.26206 -0.0333192 0.964476 + -0.249449 1.65451 -3.39346 -0.782252 -0.0145871 0.622791 + -0.252343 1.67604 -3.41108 -0.976304 0.130603 -0.17255 + -0.201168 1.55176 -3.3605 -0.296178 0.079298 0.951835 + -0.191027 1.58842 -3.36185 -0.195249 0.225642 0.954444 + -0.227224 1.6152 -3.38105 -0.197949 0.162864 0.966587 + -0.141276 1.56247 -3.35235 -0.0350407 0.18479 0.982153 + -0.143849 1.5932 -3.36212 0.00507204 0.329282 0.944218 + -0.193209 1.61933 -3.37365 -0.13668 0.296282 0.94527 + -0.225862 1.63376 -3.38559 0.167431 0.158994 0.972979 + -0.077163 1.57536 -3.35946 0.187325 0.222172 0.956843 + -0.079736 1.60609 -3.36923 0.102458 0.32863 0.938885 + -0.146032 1.62411 -3.37392 0.0161638 0.312995 0.949617 + -0.154579 1.64638 -3.37962 0.0426798 0.158979 0.986359 + -0.191848 1.63789 -3.37818 -0.123865 0.178654 0.976084 + -0.064608 1.54626 -3.36014 0.563743 -0.176207 0.806936 + -0.047256 1.5922 -3.37184 0.597639 0.0307288 0.801176 + -0.03764 1.62064 -3.38122 0.521036 0.141413 0.841739 + -0.068242 1.64546 -3.38563 0.114253 0.32247 0.939659 + -0.076789 1.66772 -3.39133 0.126788 0.181867 0.975115 + -0.021648 1.62986 -3.40189 0.798985 -0.086193 0.595142 + -0.012032 1.65829 -3.41127 0.769181 -0.0241418 0.638574 + -0.026146 1.66 -3.39762 0.465442 0.150505 0.872188 + -0.046152 1.69277 -3.39845 0.189343 0.128388 0.973481 + -0.148311 1.67115 -3.38142 0.0817894 0.0698268 0.994201 + -0.013115 1.62442 -3.41374 0.799651 -0.0706683 0.596291 + -0.003494 1.68935 -3.41994 0.782296 -0.0420202 0.621488 + -0.017607 1.69106 -3.4063 0.502039 0.0614457 0.862659 + -0.03203 1.74658 -3.40808 0.241514 0.0497681 0.96912 + -0.117674 1.6962 -3.38854 0.186673 0.0520213 0.981044 + 0.001204 1.6343 -3.43293 0.99647 -0.0624539 0.0560929 + 0.001212 1.68825 -3.42743 0.957973 -0.0297576 0.285309 + 0.00122 1.74377 -3.42341 0.952214 0.0484955 0.301557 + -0.003485 1.74487 -3.41593 0.633891 0.0715405 0.770106 + -0.041176 1.76728 -3.40588 0.299384 -0.0336773 0.953538 + 0.001227 1.75864 -3.43234 0.967184 0.197943 -0.159293 + -0.012625 1.78903 -3.41537 0.642229 0.234497 0.729762 + -0.082733 1.7756 -3.38966 0.234333 0.0185598 0.971979 + -0.126819 1.71691 -3.38634 0.1818 -0.0311398 0.982842 + -0.185579 1.66266 -3.37999 -0.0478121 0.0405391 0.998033 + -0.015339 1.76984 -3.45134 0.516497 0.33758 -0.786938 + -0.018947 1.81086 -3.42742 0.528296 0.839127 -0.129493 + -0.012619 1.80389 -3.4243 0.810861 0.573147 0.118353 + -0.054183 1.79735 -3.39915 0.312284 0.311382 0.897508 + -0.034331 1.77586 -3.45177 0.0653851 0.434678 -0.898209 + -0.037939 1.81688 -3.42785 0.170847 0.959794 -0.222725 + -0.060512 1.80431 -3.40227 0.146369 0.7268 0.671072 + -0.090427 1.62068 -3.50581 0.0462415 0.238949 -0.96993 + -0.078679 1.75631 -3.45961 0.00857797 0.384404 -0.923125 + -0.092595 1.81509 -3.42965 -0.0471287 0.921497 -0.385516 + -0.073656 1.81358 -3.41959 -0.0212948 0.938497 0.344631 + -0.096229 1.801 -3.39401 0.0430479 0.644191 0.763652 + -0.092244 1.526 -3.52778 0.200049 0.1253 -0.971741 + -0.155275 1.63286 -3.50119 -0.185561 0.254511 -0.9491 + -0.158067 1.74829 -3.46422 -0.144246 0.355974 -0.923296 + -0.171983 1.80707 -3.43425 -0.201026 0.862613 -0.464207 + -0.204926 1.6405 -3.48065 -0.546569 0.196231 -0.814098 + -0.207717 1.75593 -3.44368 -0.625529 0.318462 -0.712247 + -0.205488 1.79827 -3.42416 -0.563403 0.744809 -0.357542 + -0.180756 1.79915 -3.40445 -0.14267 0.948382 0.283227 + -0.228842 1.73752 -3.40879 -0.894368 0.327622 -0.304582 + -0.226613 1.77986 -3.38927 -0.699862 0.483846 0.52544 + -0.21426 1.79034 -3.39435 -0.354112 0.752381 0.555453 + -0.161817 1.79763 -3.39439 -0.0671082 0.738359 0.67106 + -0.243022 1.72825 -3.38648 -0.86226 0.338485 0.376743 + -0.227827 1.7432 -3.37932 -0.465084 0.283924 0.838501 + -0.215475 1.75369 -3.38439 0.0842919 0.184764 0.979161 + -0.184037 1.77387 -3.38475 -0.0551369 0.242618 0.968554 + -0.118449 1.77725 -3.38438 0.0616458 0.176749 0.982323 + -0.193972 1.69836 -3.3807 -0.037276 0.00223762 0.999302 + -0.162534 1.71855 -3.38106 0.0579043 0.00773888 0.998292 + 0.136798 0.847063 -3.35448 0.644273 -0.753569 -0.130558 + 0.133302 0.844537 -3.34848 0.418209 -0.778785 0.467541 + 0.118475 0.842721 -3.34595 0.0524625 -0.930993 -0.361248 + 0.152406 0.885082 -3.35423 0.741876 -0.129478 0.657917 + 0.138949 0.881012 -3.34624 0.345055 0.00308332 0.938577 + 0.124122 0.879198 -3.34372 0.0272044 0.0313708 0.999137 + 0.118475 0.842721 -3.34595 -0.166227 -0.123161 0.978366 + 0.133971 0.849398 -3.36091 0.374832 -0.728703 -0.573143 + 0.15653 0.892167 -3.37189 0.890448 -0.359363 -0.279214 + 0.155902 0.88761 -3.36023 0.946909 -0.249627 0.202609 + 0.162365 0.965675 -3.36855 0.698251 0.0564672 0.713622 + 0.148908 0.961604 -3.36056 0.362444 0.125742 0.923485 + 0.124687 0.850417 -3.36488 0.0825573 -0.726833 -0.681835 + 0.14235 0.897646 -3.38808 0.417194 -0.439866 -0.795278 + 0.153703 0.894503 -3.37832 0.674709 -0.410682 -0.613277 + 0.172608 0.977179 -3.3967 0.945946 -0.215314 -0.242543 + 0.17198 0.972621 -3.38504 0.964299 -0.0919315 0.248345 + 0.113113 0.848798 -3.36239 -0.224884 -0.747657 -0.624849 + 0.104595 0.89648 -3.39094 -0.259116 -0.473458 -0.841841 + 0.116169 0.898099 -3.39343 -0.0231674 -0.466681 -0.884122 + 0.133066 0.898663 -3.39205 0.207424 -0.453352 -0.866861 + 0.110367 0.844247 -3.35106 -0.51614 -0.813736 0.267271 + 0.108929 0.846051 -3.35592 -0.532043 -0.796446 -0.287409 + 0.088296 0.889645 -3.37606 -0.76816 -0.449908 -0.455535 + 0.09248 0.89239 -3.38254 -0.533949 -0.469652 -0.703082 + 0.089859 0.984527 -3.4296 -0.329647 -0.38184 -0.863441 + 0.088223 0.883575 -3.36059 -0.864952 -0.22641 0.447881 + 0.086785 0.885379 -3.36544 -0.933112 -0.357289 -0.0405903 + 0.064728 0.968621 -3.39278 -0.974249 -0.180286 0.135409 + 0.066239 0.972886 -3.4034 -0.847902 -0.310072 -0.430021 + 0.077743 0.980436 -3.4212 -0.585075 -0.364686 -0.724355 + 0.098235 0.880453 -3.35125 -0.620086 -0.0692159 0.781475 + 0.072933 0.963663 -3.37943 -0.776025 0.00563757 0.630677 + 0.057545 1.05444 -3.40151 -0.768709 0.0279504 0.638987 + 0.04934 1.0594 -3.41486 -0.979012 -0.109645 0.171793 + 0.051485 1.06648 -3.43248 -0.880498 -0.236275 -0.410971 + 0.106343 0.878927 -3.34614 -0.362615 -0.0130616 0.931847 + 0.105239 0.956342 -3.35604 -0.326999 0.126899 0.936466 + 0.082945 0.960539 -3.37009 -0.599746 0.0777342 0.796406 + 0.074516 1.04927 -3.38601 -0.59053 0.0874151 0.802267 + 0.045961 1.1537 -3.42083 -0.789501 -0.000536091 0.613749 + 0.123019 0.956611 -3.35362 0.0459985 0.143033 0.988648 + 0.126099 1.04517 -3.36815 0.054473 0.157725 0.985979 + 0.09681 1.04507 -3.37197 -0.331635 0.132492 0.934058 + 0.091073 1.14322 -3.38761 -0.335557 0.0824387 0.938406 + 0.062932 1.14852 -3.40534 -0.600801 0.0431508 0.798233 + 0.151989 1.05016 -3.37509 0.364926 0.138766 0.920637 + 0.161192 1.14824 -3.39335 0.373293 0.0729476 0.924841 + 0.120362 1.14332 -3.38379 0.0377029 0.0986842 0.994404 + 0.173576 1.05657 -3.38854 0.708296 0.0659715 0.702826 + 0.182779 1.15464 -3.4068 0.750561 -0.0066001 0.660768 + 0.196173 1.24694 -3.41281 0.77225 -0.159824 0.614887 + 0.166337 1.23463 -3.39624 0.375199 -0.0994423 0.921595 + 0.125506 1.22972 -3.38668 0.0332146 -0.0631781 0.997449 + 0.18319 1.06351 -3.40504 0.965254 -0.0474452 0.25697 + 0.192791 1.16341 -3.42762 0.977809 -0.0918353 0.188295 + 0.206185 1.25572 -3.43363 0.982062 -0.157466 0.103726 + 0.183701 1.07108 -3.42438 0.954114 -0.168562 -0.247493 + 0.193301 1.17098 -3.44696 0.958867 -0.143556 -0.244877 + 0.202654 1.25742 -3.457 0.940065 -0.13318 -0.313912 + 0.220969 1.34351 -3.42911 0.975769 -0.21253 -0.0520201 + 0.175927 1.0775 -3.44208 0.746257 -0.244036 -0.619312 + 0.183489 1.17908 -3.4693 0.75846 -0.191307 -0.623009 + 0.192842 1.26553 -3.47934 0.776011 -0.074095 -0.626352 + 0.198307 1.32203 -3.4742 0.726964 -0.0842817 -0.681484 + 0.217438 1.34522 -3.45249 0.915272 -0.162842 -0.368456 + 0.164834 0.983602 -3.4144 0.715204 -0.30648 -0.628135 + 0.157624 1.08271 -3.45826 0.473671 -0.287328 -0.832513 + 0.165186 1.18429 -3.48549 0.50443 -0.212649 -0.836858 + 0.168579 1.25838 -3.49837 0.516899 -0.079055 -0.852388 + 0.153481 0.986745 -3.42415 0.45316 -0.346539 -0.821314 + 0.132096 1.08551 -3.46917 0.215124 -0.306558 -0.927224 + 0.135089 1.18782 -3.49926 0.226565 -0.218286 -0.949221 + 0.138482 1.26191 -3.51215 0.212535 -0.0665339 -0.974886 + 0.127953 0.989541 -3.43507 0.208443 -0.369834 -0.905414 + 0.104442 1.08492 -3.47127 -0.082372 -0.310089 -0.947132 + 0.107434 1.18723 -3.50136 -0.0774923 -0.209999 -0.974626 + 0.103962 1.26034 -3.5119 -0.165686 -0.0385802 -0.985424 + 0.136033 1.29788 -3.51151 0.197503 0.00587325 -0.980285 + 0.111057 0.988976 -3.43646 -0.0611133 -0.383501 -0.921516 + 0.083243 1.08047 -3.46442 -0.358615 -0.306165 -0.88185 + 0.073639 1.18301 -3.49191 -0.38366 -0.20649 -0.900093 + 0.070166 1.25611 -3.50245 -0.40029 0.0243961 -0.916064 + 0.062989 1.07403 -3.45028 -0.629491 -0.285434 -0.722681 + 0.053384 1.17657 -3.47777 -0.658474 -0.200181 -0.725493 + 0.045251 1.2581 -3.48665 -0.663545 -0.01177 -0.748044 + 0.065337 1.30773 -3.48765 -0.513251 0.0778075 -0.854705 + 0.101513 1.29631 -3.51126 -0.289925 0.0125623 -0.956967 + 0.038864 1.16704 -3.4553 -0.896698 -0.179268 -0.404716 + 0.030731 1.24856 -3.46418 -0.886965 -0.107098 -0.449247 + 0.02525 1.31997 -3.46416 -0.762912 -0.0254145 -0.646002 + 0.040422 1.30972 -3.47184 -0.441165 0.123454 -0.888894 + 0.03672 1.15996 -3.43768 -0.984215 -0.10424 0.143019 + 0.025619 1.24869 -3.44858 -0.992268 -0.113612 0.0499617 + 0.020138 1.3201 -3.44856 -0.983841 -0.105445 -0.1447 + 0.019385 1.36442 -3.4612 -0.71315 -0.158792 -0.68279 + 0.034557 1.35416 -3.46888 -0.506327 -0.069517 -0.859535 + 0.03486 1.24243 -3.43173 -0.81622 -0.0825906 0.571808 + 0.020141 1.32613 -3.43318 -0.91029 -0.149717 0.38595 + 0.011025 1.37206 -3.4488 -0.954851 -0.235054 -0.181681 + 0.011257 1.39166 -3.46246 -0.705798 -0.165854 -0.688725 + 0.029536 1.38166 -3.47059 -0.50628 -0.123329 -0.853505 + 0.054202 1.23528 -3.41194 -0.642404 -0.0605293 0.763972 + 0.039483 1.31898 -3.41339 -0.688684 -0.144229 0.710571 + 0.033067 1.36756 -3.40765 -0.729707 -0.229854 0.643968 + 0.011027 1.37809 -3.43342 -0.906878 -0.247609 0.340972 + 0.002896 1.3993 -3.45006 -0.954732 -0.179947 -0.236867 + 0.082343 1.22998 -3.39421 -0.371166 -0.0581707 0.926743 + 0.079466 1.29589 -3.38419 -0.406767 -0.150988 0.900968 + 0.07305 1.34448 -3.37845 -0.476082 -0.317518 0.820078 + 0.073112 1.36371 -3.36582 -0.455116 -0.307591 0.835618 + 0.024941 1.39305 -3.40588 -0.73676 -0.177454 0.652453 + 0.122629 1.29563 -3.37666 -0.00834578 -0.178819 0.983847 + 0.129546 1.34333 -3.36606 0.0326732 -0.370994 0.92806 + 0.129607 1.36256 -3.35343 0.0419869 -0.366039 0.929652 + 0.122787 1.41055 -3.34648 -0.0563654 -0.068589 0.996051 + 0.069783 1.41068 -3.36405 -0.503245 -0.0429086 0.863078 + 0.186326 1.31806 -3.38394 0.386595 -0.234423 0.891959 + 0.193244 1.36576 -3.37333 0.411674 -0.355328 0.839206 + 0.203739 1.38796 -3.36587 0.449204 -0.297792 0.842339 + 0.196918 1.43595 -3.35892 0.323566 -0.0701775 0.9436 + 0.216163 1.33037 -3.4005 0.835803 -0.264212 0.481274 + 0.23035 1.38562 -3.39487 0.844753 -0.400001 0.355516 + 0.240846 1.40782 -3.38741 0.842707 -0.272854 0.464108 + 0.235157 1.39875 -3.42348 0.936443 -0.33423 -0.106606 + 0.246637 1.42629 -3.42525 0.973179 -0.207393 -0.0995559 + 0.253202 1.49243 -3.42449 0.992725 -0.0366179 -0.114701 + 0.247411 1.47396 -3.38664 0.901998 -0.0992285 0.420182 + 0.227261 1.39459 -3.45194 0.896336 -0.305675 -0.321162 + 0.238741 1.42212 -3.45371 0.893249 -0.19723 -0.403988 + 0.241301 1.48495 -3.45658 0.85445 -0.00846099 -0.519464 + 0.253897 1.60135 -3.41568 0.995215 0.0188373 -0.0958803 + 0.208129 1.3714 -3.47365 0.75453 -0.243187 -0.609545 + 0.215691 1.39704 -3.47935 0.745912 -0.216412 -0.629905 + 0.218252 1.45987 -3.48222 0.722687 -0.0414908 -0.689929 + 0.241996 1.59388 -3.44778 0.854788 0.0715361 -0.514023 + 0.177285 1.35191 -3.49472 0.554495 -0.198112 -0.808261 + 0.184847 1.37756 -3.50042 0.560997 -0.240097 -0.792234 + 0.191368 1.42331 -3.50452 0.598302 -0.122097 -0.791914 + 0.208758 1.54906 -3.49504 0.673867 0.0754104 -0.734994 + 0.174044 1.31488 -3.49323 0.538996 -0.0313707 -0.841724 + 0.139275 1.33491 -3.513 0.208385 -0.128411 -0.96958 + 0.141663 1.36492 -3.51906 0.204341 -0.191438 -0.959998 + 0.148184 1.41067 -3.52316 0.281806 -0.0985886 -0.954393 + 0.181874 1.51251 -3.51734 0.453933 0.0225164 -0.890751 + 0.099036 1.33258 -3.50934 -0.33649 -0.0718157 -0.938945 + 0.101424 1.36259 -3.51539 -0.315509 -0.164939 -0.934478 + 0.123403 1.43634 -3.52897 0.00318025 -0.053921 -0.99854 + 0.06286 1.34401 -3.48573 -0.544687 -0.0711034 -0.835619 + 0.057839 1.37151 -3.48744 -0.560434 -0.144803 -0.815442 + 0.054059 1.41429 -3.49364 -0.619498 -0.16478 -0.767509 + 0.097644 1.40537 -3.52159 -0.335099 -0.150186 -0.930136 + 0.029353 1.43453 -3.47524 -0.549058 -0.133942 -0.824982 + 0.066486 1.49502 -3.5204 -0.464117 -0.0279521 -0.885333 + 0.092244 1.526 -3.52778 -0.201548 0.125674 -0.971383 + 0.157093 1.53818 -3.52316 0.219024 0.148888 -0.964293 + 0.011073 1.44453 -3.46711 -0.701663 -0.0462202 -0.711008 + 0.041779 1.51527 -3.50199 -0.659504 0.0362806 -0.750825 + 0.090427 1.62068 -3.50581 -0.0789496 0.214656 -0.973494 + 0.155275 1.63286 -3.50119 0.181658 0.25687 -0.94922 + 0.204926 1.6405 -3.48065 0.553611 0.213123 -0.805042 + -0.001172 1.43711 -3.44928 -0.953563 -0.0380412 -0.298782 + 0.011063 1.52054 -3.45595 -0.832286 0.0430625 -0.552671 + 0.009039 1.60204 -3.45199 -0.857011 0.00284538 -0.515291 + 0.039756 1.59678 -3.49803 -0.547017 0.0302118 -0.836576 + 0.002901 1.40358 -3.43164 -0.923075 -0.188257 0.335399 + -0.001168 1.44139 -3.43087 -0.934062 -0.0272306 0.35607 + -0.001183 1.51311 -3.43813 -0.997473 0.0436565 0.0560497 + -0.001204 1.6343 -3.43293 -0.997772 -0.0301779 0.0594994 + 0.009016 1.72638 -3.45139 -0.792856 0.0694456 -0.605439 + 0.021612 1.44002 -3.40411 -0.697793 0.00819096 0.716253 + 0.021597 1.51175 -3.41137 -0.743377 0.00729435 0.668832 + 0.064549 1.48211 -3.36411 -0.54446 -0.0033888 0.83878 + 0.056075 1.54083 -3.37199 -0.71319 -0.108131 0.692581 + 0.013123 1.57046 -3.41925 -0.736621 -0.0302573 0.675628 + 0.117553 1.48198 -3.34654 -0.0977576 -0.0105094 0.995155 + 0.064608 1.54626 -3.36014 -0.575365 -0.11508 0.80976 + 0.013115 1.62442 -3.41374 -0.798984 -0.0661801 0.597699 + -0.001212 1.68825 -3.42743 -0.957608 -0.0312965 0.28637 + 0.164313 1.51504 -3.35114 0.149745 0.0264483 0.988371 + 0.141276 1.56247 -3.35235 0.0652717 0.203226 0.976954 + 0.094516 1.52942 -3.34775 -0.230284 -0.00764833 0.973093 + 0.047256 1.5922 -3.37184 -0.618391 0.00652165 0.785844 + 0.021648 1.62986 -3.40189 -0.801785 -0.0833689 0.591769 + 0.233773 1.47268 -3.36828 0.605837 -0.21071 0.767178 + 0.201168 1.55176 -3.3605 0.277501 0.0926896 0.956244 + 0.143849 1.5932 -3.36212 0.0172028 0.307579 0.951367 + 0.077163 1.57536 -3.35946 -0.184267 0.217304 0.958553 + 0.03764 1.62064 -3.38122 -0.523824 0.144665 0.839452 + 0.237364 1.57854 -3.37971 0.60568 0.0752778 0.79214 + 0.227224 1.6152 -3.38105 0.490765 0.229968 0.840395 + 0.191027 1.58842 -3.36185 0.15985 0.189648 0.968753 + 0.251002 1.57982 -3.39807 0.928625 -0.00304574 0.371007 + 0.249449 1.65451 -3.39346 0.781966 0.00512945 0.6233 + 0.225862 1.63376 -3.38559 0.23243 0.123383 0.964755 + 0.193209 1.61933 -3.37365 0.1369 0.296086 0.9453 + 0.146032 1.62411 -3.37392 -0.0189266 0.311497 0.950059 + 0.252343 1.67604 -3.41108 0.977085 0.145859 -0.155013 + 0.243022 1.72825 -3.38648 0.862257 0.338479 0.376756 + 0.227827 1.7432 -3.37932 0.465086 0.283922 0.838501 + 0.234255 1.66947 -3.3863 0.262314 -0.0480649 0.963785 + 0.238164 1.68532 -3.43339 0.721099 0.315619 -0.616767 + 0.228842 1.73752 -3.40879 0.884248 0.298036 -0.359554 + 0.226613 1.77986 -3.38927 0.699862 0.483846 0.52544 + 0.215475 1.75369 -3.38439 -0.101678 0.212118 0.97194 + 0.193972 1.69836 -3.3807 0.0147462 -0.000807294 0.999891 + 0.207717 1.75593 -3.44368 0.639032 0.293813 -0.710853 + 0.205488 1.79827 -3.42416 0.557475 0.742844 -0.37068 + 0.21426 1.79034 -3.39435 0.240132 0.743464 0.624178 + 0.158067 1.74829 -3.46422 0.149806 0.361443 -0.920281 + 0.171983 1.80707 -3.43425 0.210681 0.857248 -0.469829 + 0.180756 1.79915 -3.40445 0.186924 0.858491 0.477549 + 0.184037 1.77387 -3.38475 0.185257 0.36676 0.911683 + 0.078679 1.75631 -3.45961 -0.0180836 0.408411 -0.912619 + 0.092595 1.81509 -3.42965 -0.0998686 0.905177 -0.413135 + 0.073656 1.81358 -3.41959 -0.0489731 0.989422 -0.136549 + 0.161817 1.79763 -3.39439 0.117239 0.72963 0.673717 + 0.046079 1.64023 -3.49797 -0.35891 0.17425 -0.916963 + 0.034331 1.77586 -3.45177 -0.0388783 0.452067 -0.891136 + 0.015339 1.76984 -3.45134 -0.622701 0.309822 -0.718508 + 0.018947 1.81086 -3.42742 -0.516286 0.847025 -0.126479 + 0.037939 1.81688 -3.42785 -0.0844579 0.962918 -0.256235 + 0.060512 1.80431 -3.40227 -0.119611 0.685296 0.718375 + 0.096229 1.801 -3.39401 -0.0685941 0.624635 0.777898 + 0.012619 1.80389 -3.4243 -0.808603 0.564728 0.165056 + 0.054183 1.79735 -3.39915 -0.274466 0.318251 0.907405 + -0.001227 1.75864 -3.43234 -0.923257 0.257088 -0.285486 + 0.012625 1.78903 -3.41537 -0.64193 0.232742 0.730587 + 0.041176 1.76728 -3.40588 -0.304434 -0.0354456 0.951874 + 0.082733 1.7756 -3.38966 -0.232686 0.0457158 0.971477 + 0.118449 1.77725 -3.38438 -0.064762 0.178125 0.981874 + -0.00122 1.74377 -3.42341 -0.952216 0.0484923 0.30155 + 0.003485 1.74487 -3.41593 -0.632229 0.0733501 0.771302 + 0.03203 1.74658 -3.40808 -0.245848 0.0569166 0.967636 + 0.126819 1.71691 -3.38634 -0.177767 -0.045177 0.983035 + 0.162534 1.71855 -3.38106 -0.0562797 -0.0297123 0.997973 + 0.003494 1.68935 -3.41994 -0.78273 -0.0442299 0.620788 + 0.017607 1.69106 -3.4063 -0.488889 0.0536665 0.870694 + 0.046152 1.69277 -3.39845 -0.216602 0.0555768 0.974677 + 0.117674 1.6962 -3.38854 -0.154953 0.0559571 0.986336 + 0.012032 1.65829 -3.41127 -0.811477 -0.0666819 0.580567 + 0.026146 1.66 -3.39762 -0.4667 0.160985 0.869641 + 0.068242 1.64546 -3.38563 -0.108861 0.314174 0.943103 + 0.076789 1.66772 -3.39133 -0.125249 0.187527 0.974241 + 0.148311 1.67115 -3.38142 -0.0959864 0.0838564 0.991844 + 0.079736 1.60609 -3.36923 -0.0877122 0.33747 0.937241 + 0.154579 1.64638 -3.37962 -0.0428927 0.159269 0.986303 + 0.185579 1.66266 -3.37999 0.0509642 0.0400256 0.997898 + 0.191848 1.63789 -3.37818 0.124288 0.178936 0.975979 + -0.599647 0.53971 -3.10657 -0.395676 -0.882245 0.255117 + -0.586175 0.537351 -3.1025 0.0382405 -0.36898 0.92865 + -0.595384 0.580943 -3.08802 -0.141179 -0.173689 0.974629 + -0.576324 0.581513 -3.08902 0.232008 -0.168986 0.957923 + -0.59542 0.685736 -3.08962 -0.121704 0.0199639 0.992366 + -0.608855 0.583301 -3.0921 -0.40878 -0.186391 0.893396 + -0.621625 0.587169 -3.09879 -0.660344 -0.229308 0.715097 + -0.604914 0.543026 -3.11231 -0.598562 -0.793658 -0.108764 + -0.586175 0.537351 -3.1025 -0.000228404 -0.865987 -0.500066 + -0.571676 0.540546 -3.10803 0.494248 -0.846384 0.198376 + -0.561824 0.584708 -3.09456 0.558671 -0.186206 0.808216 + -0.551338 0.69182 -3.10017 0.52954 -0.0151439 0.84815 + -0.57636 0.686306 -3.09062 0.203849 0.0121425 0.978927 + -0.548117 0.591963 -3.10712 0.851263 -0.231359 0.470982 + -0.53763 0.699075 -3.11274 0.829607 -0.0636566 0.554708 + -0.523051 0.832381 -3.11654 0.778822 -0.0757542 0.622653 + -0.546327 0.812116 -3.10224 0.450073 -0.0204718 0.892757 + -0.571349 0.806601 -3.09268 0.137602 0.00995666 0.990437 + -0.566059 0.547996 -3.12093 0.607158 -0.724393 -0.326519 + -0.542499 0.599414 -3.12001 0.964921 -0.256918 0.0540361 + -0.527938 0.711931 -3.13499 0.986514 -0.114807 0.11666 + -0.513358 0.845238 -3.1388 0.981421 -0.121584 0.148425 + -0.605372 0.551679 -3.12737 -0.504871 -0.67326 -0.540209 + -0.591256 0.557566 -3.13757 -0.130253 -0.617476 -0.775731 + -0.577719 0.556843 -3.13631 0.13361 -0.639392 -0.757183 + -0.572659 0.555143 -3.13333 0.351091 -0.658123 -0.66604 + -0.54317 0.60936 -3.13725 0.876287 -0.286262 -0.387524 + -0.528608 0.721878 -3.15223 0.930118 -0.147194 -0.336475 + -0.511998 0.863474 -3.1584 0.945316 -0.118789 -0.303755 + -0.489735 1.01464 -3.13553 0.901997 -0.0358544 0.43025 + -0.513404 0.976579 -3.11442 0.590583 0.0166264 0.806806 + -0.536681 0.956314 -3.10013 0.301924 0.0503119 0.952004 + -0.539998 0.734214 -3.17363 0.788439 -0.157609 -0.594578 + -0.523388 0.875809 -3.1798 0.838502 -0.0856873 -0.538119 + -0.504907 1.04257 -3.16877 0.705771 -0.141211 -0.694224 + -0.488374 1.03288 -3.15513 0.894771 -0.120026 -0.430093 + -0.54977 0.616509 -3.14965 0.721342 -0.297364 -0.625492 + -0.557715 0.622536 -3.16013 0.549172 -0.304284 -0.778345 + -0.547943 0.740242 -3.18411 0.605163 -0.172563 -0.777174 + -0.53772 0.8772 -3.20066 0.671627 -0.123976 -0.730443 + -0.562775 0.624236 -3.16311 0.296171 -0.306305 -0.904688 + -0.556674 0.743174 -3.18924 0.337225 -0.194882 -0.921032 + -0.546451 0.880131 -3.2058 0.532273 -0.163371 -0.83066 + -0.539913 1.02456 -3.23291 0.784993 -0.168188 -0.596237 + -0.519239 1.04396 -3.18963 0.864432 -0.133117 -0.484806 + -0.575448 0.625885 -3.166 0.122911 -0.305821 -0.944122 + -0.569347 0.744823 -3.19213 0.135442 -0.219633 -0.966135 + -0.568121 0.873315 -3.22124 0.357146 -0.20475 -0.911331 + -0.588986 0.626609 -3.16726 -0.0837429 -0.299688 -0.950355 + -0.59271 0.746072 -3.19432 -0.0911789 -0.225703 -0.96992 + -0.591484 0.874562 -3.22342 -0.0441116 -0.246588 -0.968116 + -0.595496 1.0057 -3.25953 0.0893871 -0.245153 -0.965355 + -0.561584 1.01774 -3.24835 0.499579 -0.220708 -0.837681 + -0.60783 0.623089 -3.16117 -0.369648 -0.296901 -0.88046 + -0.611554 0.742554 -3.18823 -0.387965 -0.223543 -0.894154 + -0.620733 0.865637 -3.21597 -0.347217 -0.240953 -0.906301 + -0.621945 0.617204 -3.15097 -0.634042 -0.296573 -0.714167 + -0.635913 0.732394 -3.17062 -0.682062 -0.203838 -0.702311 + -0.645092 0.855476 -3.19836 -0.667173 -0.225454 -0.709966 + -0.660103 0.982023 -3.22652 -0.700863 -0.177584 -0.690837 + -0.624745 0.996771 -3.25208 -0.349333 -0.23417 -0.907266 + -0.631252 0.607295 -3.13376 -0.89556 -0.282222 -0.343979 + -0.64522 0.722485 -3.15341 -0.93676 -0.164801 -0.308741 + -0.659537 0.840098 -3.17165 -0.938084 -0.166875 -0.303565 + -0.630794 0.598641 -3.1187 -0.961021 -0.276293 -0.0100051 + -0.644429 0.707551 -3.12743 -0.989904 -0.109532 0.089957 + -0.658747 0.825165 -3.14567 -0.990262 -0.108617 0.0870886 + -0.673401 0.944969 -3.16209 -0.992213 -0.0530139 0.112706 + -0.674548 0.966645 -3.1998 -0.954531 -0.106706 -0.278361 + -0.626892 0.590484 -3.10453 -0.894568 -0.257589 0.365233 + -0.640528 0.699396 -3.11326 -0.88819 -0.0642961 0.454956 + -0.652691 0.812505 -3.12367 -0.883752 -0.0458961 0.4657 + -0.631437 0.693674 -3.10335 -0.61341 -0.0107478 0.789691 + -0.643601 0.806782 -3.11376 -0.630678 0.012058 0.775951 + -0.654151 0.924001 -3.12571 -0.622811 0.0443697 0.781113 + -0.667346 0.932309 -3.14009 -0.882415 -0.0134584 0.470278 + -0.618668 0.689806 -3.09666 -0.377197 0.0148861 0.926013 + -0.623781 0.803205 -3.10198 -0.402424 0.0313399 0.914917 + -0.634331 0.920423 -3.11392 -0.467161 0.0675622 0.881587 + -0.633643 1.04941 -3.12692 -0.40268 0.106096 0.909171 + -0.656342 1.0555 -3.13793 -0.585255 0.0550094 0.808981 + -0.600533 0.799135 -3.09494 -0.187967 0.0320471 0.981652 + -0.600585 0.924214 -3.09811 -0.254847 0.0736175 0.964175 + -0.599897 1.0532 -3.11111 -0.197205 0.168661 0.965745 + -0.571401 0.931682 -3.09585 -0.011632 0.0780312 0.996883 + -0.565238 1.05913 -3.11408 0.028076 0.184629 0.982407 + -0.590086 1.18348 -3.14239 0.138166 0.106386 0.984679 + -0.6301 1.19278 -3.13251 -0.0959655 0.0186021 0.995211 + -0.652799 1.19887 -3.14352 -0.784218 0.0287844 0.619817 + -0.530518 1.08377 -3.11835 0.165178 0.233346 0.958262 + -0.525271 1.19402 -3.15892 0.345001 0.213429 0.914014 + -0.555427 1.18942 -3.14536 0.225628 0.164157 0.960284 + -0.550287 1.27386 -3.15673 0.358751 -0.0906592 0.92902 + -0.59209 1.27668 -3.14199 0.268557 -0.134915 0.953769 + -0.504713 1.10571 -3.13411 0.439081 0.202716 0.875279 + -0.499466 1.21596 -3.17468 0.597109 0.190043 0.779323 + -0.492573 1.29355 -3.19233 0.78127 -0.0963477 0.616713 + -0.520131 1.27847 -3.17029 0.539567 -0.0830959 0.837832 + -0.481043 1.14377 -3.15522 0.72075 0.231674 0.653335 + -0.484796 1.23645 -3.19877 0.908286 0.105071 0.404941 + -0.477903 1.31404 -3.21642 0.962426 -0.177176 0.205777 + -0.4776 1.16244 -3.18029 0.947886 -0.0993064 -0.302738 + -0.481353 1.25512 -3.22384 0.99649 -0.0675314 -0.0494694 + -0.473405 1.33018 -3.25521 0.967246 -0.224523 -0.118427 + -0.460659 1.3721 -3.21381 0.947386 -0.201999 0.248306 + -0.494132 1.17213 -3.19393 0.621326 -0.407455 -0.669279 + -0.489383 1.26154 -3.26528 0.904318 -0.265871 -0.333947 + -0.481436 1.3366 -3.29665 0.919086 -0.253146 -0.30199 + -0.467885 1.3967 -3.30982 0.926739 -0.178114 -0.330802 + -0.456161 1.38825 -3.2526 0.973562 -0.205812 -0.0990929 + -0.51007 1.16584 -3.22143 0.878434 -0.250658 -0.406847 + -0.505321 1.25524 -3.29279 0.807945 -0.354259 -0.470878 + -0.497544 1.32711 -3.32836 0.81523 -0.298071 -0.496543 + -0.530744 1.14643 -3.26471 0.800967 -0.259368 -0.539611 + -0.523834 1.23336 -3.30446 0.711637 -0.361869 -0.602182 + -0.516057 1.30523 -3.34003 0.574913 -0.369233 -0.730166 + -0.510161 1.35627 -3.35803 0.521897 -0.224078 -0.823051 + -0.483994 1.38721 -3.34153 0.779375 -0.155347 -0.606994 + -0.554839 1.13258 -3.27977 0.492474 -0.292327 -0.819765 + -0.547929 1.21951 -3.31952 0.234365 -0.381114 -0.894329 + -0.54183 1.29023 -3.34464 0.127748 -0.388829 -0.91241 + -0.588752 1.12054 -3.29094 0.060928 -0.246485 -0.96723 + -0.571211 1.21744 -3.31362 -0.193696 -0.296705 -0.935119 + -0.565112 1.28817 -3.33874 -0.250429 -0.354414 -0.900931 + -0.571065 1.33621 -3.3588 -0.207175 -0.273593 -0.939268 + -0.535934 1.34128 -3.36264 0.136599 -0.265788 -0.954305 + -0.620091 1.11109 -3.28075 -0.396794 -0.180007 -0.900084 + -0.60255 1.20799 -3.30343 -0.364755 -0.194845 -0.910488 + -0.599507 1.281 -3.32394 -0.365231 -0.331205 -0.870005 + -0.655449 1.09635 -3.25519 -0.736141 -0.084263 -0.671562 + -0.635353 1.19906 -3.28293 -0.711862 -0.0973557 -0.695538 + -0.63231 1.27207 -3.30345 -0.668897 -0.302297 -0.679112 + -0.651824 1.31642 -3.31503 -0.68029 -0.350574 -0.643664 + -0.60546 1.32904 -3.344 -0.384072 -0.2997 -0.873309 + -0.673716 1.09031 -3.22162 -0.974606 0.0245032 -0.222582 + -0.65362 1.19303 -3.24936 -0.944054 0.0317371 -0.328261 + -0.655198 1.28001 -3.25948 -0.945845 -0.236045 -0.222844 + -0.672569 1.06863 -3.1839 -0.99552 0.0529502 0.0783397 + -0.659673 1.21423 -3.19885 -0.999563 0.0254922 -0.0149709 + -0.661251 1.30121 -3.20897 -0.979716 -0.200277 -0.00677262 + -0.681044 1.35648 -3.19517 -0.957619 -0.286415 0.030529 + -0.674712 1.32436 -3.27106 -0.92112 -0.353839 -0.162284 + -0.669537 1.06381 -3.15232 -0.911409 0.0557262 0.407711 + -0.65664 1.2094 -3.16726 -0.991558 0.015298 0.128755 + -0.661988 1.30826 -3.16319 -0.97416 -0.221999 0.0415746 + -0.681781 1.36353 -3.1494 -0.965138 -0.258043 0.0438349 + -0.69142 1.39961 -3.20542 -0.989456 -0.144563 -0.00880469 + -0.658146 1.29773 -3.13945 -0.805085 -0.301235 0.510975 + -0.676183 1.34892 -3.11645 -0.770492 -0.343897 0.536728 + -0.688456 1.41574 -3.10452 -0.792945 -0.183318 0.581062 + -0.694053 1.43035 -3.13747 -0.990135 -0.120375 0.0717083 + -0.632104 1.28597 -3.13211 -0.056002 -0.210062 0.976083 + -0.650141 1.33717 -3.10911 -0.123922 -0.362223 0.923817 + -0.663083 1.43514 -3.08933 -0.162551 -0.104915 0.981106 + -0.694699 1.50129 -3.10261 -0.830008 0.0232654 0.557266 + -0.595426 1.3246 -3.12652 0.274753 -0.25648 0.926676 + -0.592426 1.37152 -3.1152 0.34967 -0.208938 0.913278 + -0.647141 1.3841 -3.09778 0.0446279 -0.20144 0.978483 + -0.610696 1.49529 -3.0929 0.257429 -0.0587408 0.96451 + -0.669327 1.52069 -3.08742 -0.321728 0.0169348 0.946681 + -0.553622 1.32178 -3.14126 0.359052 -0.207137 0.910042 + -0.553749 1.3855 -3.13142 0.409103 -0.159627 0.898418 + -0.594754 1.44425 -3.10136 0.321298 -0.1072 0.940891 + -0.559255 1.52791 -3.11476 0.525865 -0.00144729 0.850567 + -0.630192 1.55703 -3.08185 0.100977 0.00421621 0.99488 + -0.511293 1.3278 -3.15936 0.556579 -0.206374 0.804754 + -0.511419 1.39152 -3.14952 0.546418 -0.0832728 0.833362 + -0.556076 1.45823 -3.11757 0.498239 -0.0479288 0.865714 + -0.518278 1.5461 -3.14755 0.615737 0.0208376 0.787676 + -0.578752 1.58965 -3.10371 0.481484 0.0939817 0.871402 + -0.483735 1.34288 -3.1814 0.78377 -0.196626 0.589103 + -0.476746 1.40784 -3.17703 0.747944 -0.0508529 0.661811 + -0.515098 1.47642 -3.15036 0.618598 0.015804 0.785548 + -0.45367 1.43706 -3.20944 0.918614 -0.0757433 0.387829 + -0.480425 1.49274 -3.17787 0.649703 -0.0134271 0.76007 + -0.48108 1.54865 -3.17669 0.625375 0.0117252 0.780236 + -0.505491 1.60545 -3.16036 0.59917 0.120357 0.791524 + -0.445592 1.45761 -3.24887 0.994259 -0.0965756 -0.0460731 + -0.448117 1.50459 -3.20464 0.867023 -0.0560747 0.495103 + -0.448771 1.5605 -3.20346 0.825698 -0.0102778 0.564019 + -0.468293 1.608 -3.18951 0.651428 0.105774 0.751301 + -0.511716 1.65707 -3.16855 0.560681 0.227697 0.79611 + -0.457315 1.46607 -3.30609 0.927942 -0.0428979 -0.370247 + -0.451384 1.55784 -3.28539 0.917649 0.0563454 -0.393377 + -0.440038 1.52514 -3.24407 0.997817 -0.0386578 -0.0535343 + -0.44228 1.59049 -3.2147 0.911159 0.0678879 0.406424 + -0.461802 1.63799 -3.20075 0.718727 0.172063 0.673665 + -0.479175 1.46326 -3.34309 0.709444 0.0159014 -0.704582 + -0.473244 1.55503 -3.32238 0.735131 0.147445 -0.661697 + -0.478094 1.62457 -3.30764 0.610939 0.257808 -0.748524 + -0.451207 1.62985 -3.27541 0.89141 0.0858259 -0.444996 + -0.439861 1.59715 -3.23409 0.997209 0.0732936 -0.0142172 + -0.505342 1.43232 -3.35958 0.470989 0.00252229 -0.882135 + -0.511446 1.53358 -3.35532 0.429737 0.164057 -0.887925 + -0.516295 1.60312 -3.34057 0.416979 0.309491 -0.854602 + -0.537834 1.40705 -3.37375 0.182857 -0.0822492 -0.979693 + -0.543937 1.50831 -3.36949 0.303683 0.0899715 -0.948516 + -0.537023 1.60222 -3.34832 0.184123 0.368034 -0.9114 + -0.511614 1.6777 -3.29858 0.28937 0.526455 -0.799444 + -0.572964 1.40198 -3.36991 -0.202334 -0.168695 -0.964678 + -0.574402 1.46469 -3.38058 -0.0760759 -0.0126248 -0.997022 + -0.579204 1.5192 -3.3771 -0.193519 0.176511 -0.965088 + -0.548739 1.56282 -3.36601 0.316272 0.24226 -0.917214 + -0.613389 1.3855 -3.35319 -0.410076 -0.176219 -0.894866 + -0.614827 1.44822 -3.36385 -0.511316 -0.027955 -0.858938 + -0.61217 1.51388 -3.35691 -0.602245 0.206249 -0.771208 + -0.57272 1.58157 -3.35632 -0.320473 0.419932 -0.84909 + -0.561004 1.62097 -3.33863 -0.333849 0.508427 -0.793755 + -0.659754 1.37288 -3.32422 -0.703646 -0.128658 -0.698806 + -0.664568 1.44361 -3.31868 -0.778445 0.0472612 -0.625931 + -0.66191 1.50927 -3.31174 -0.759013 0.167191 -0.629243 + -0.605686 1.57624 -3.33613 -0.557732 0.40186 -0.726253 + -0.685088 1.36749 -3.28131 -0.94787 -0.157782 -0.276854 + -0.689902 1.43823 -3.27578 -0.953167 -0.00851331 -0.302326 + -0.689713 1.50917 -3.26688 -0.934219 0.121313 -0.335437 + -0.651512 1.5761 -3.29962 -0.691041 0.356942 -0.628533 + -0.695203 1.43541 -3.17712 -0.996594 -0.0814507 -0.0129031 + -0.693685 1.47402 -3.24747 -0.994809 -0.00486001 -0.101647 + -0.696247 1.54582 -3.18751 -0.98585 0.153649 -0.0670154 + -0.679315 1.57599 -3.25476 -0.892513 0.288802 -0.346431 + -0.64218 1.63361 -3.26286 -0.620717 0.576953 -0.530882 + -0.700219 1.51068 -3.1681 -0.999331 0.0341685 -0.0130322 + -0.699069 1.50562 -3.12845 -0.992633 0.0457791 0.112181 + -0.68932 1.58412 -3.16583 -0.966944 0.254928 0.0055216 + -0.672388 1.61429 -3.23308 -0.864085 0.404913 -0.299003 + -0.681454 1.58115 -3.10895 -0.855246 0.300638 0.422103 + -0.685824 1.58547 -3.1348 -0.93901 0.297114 0.173158 + -0.662005 1.66235 -3.18016 -0.789805 0.607915 -0.0815297 + -0.631797 1.68167 -3.20994 -0.577602 0.725212 -0.374758 + -0.596354 1.63375 -3.29937 -0.509814 0.600107 -0.61641 + -0.669976 1.57825 -3.09243 -0.573563 0.209215 0.791994 + -0.644528 1.66153 -3.13093 -0.566316 0.625387 0.536821 + -0.658509 1.6637 -3.14912 -0.761311 0.573747 0.302028 + -0.616199 1.70786 -3.17339 -0.466202 0.884441 0.0204983 + -0.586291 1.68653 -3.23816 -0.442823 0.760081 -0.47559 + -0.630841 1.61459 -3.08686 -0.0659155 0.32616 0.943014 + -0.63305 1.65863 -3.1144 -0.293166 0.660131 0.691578 + -0.587185 1.68532 -3.13944 0.142529 0.609273 0.780046 + -0.602219 1.70569 -3.1552 -0.13366 0.816413 0.561787 + -0.584976 1.64128 -3.1119 0.369978 0.364401 0.854592 + -0.527694 1.69846 -3.172 0.405885 0.534781 0.741125 + -0.542727 1.71883 -3.18776 0.0864944 0.93909 0.332609 + -0.570693 1.71273 -3.20162 -0.280839 0.926943 -0.248809 + -0.55558 1.6976 -3.25378 -0.517705 0.769314 -0.37435 + -0.473636 1.66762 -3.19725 0.65203 0.228858 0.722828 + -0.489614 1.70901 -3.2007 0.430944 0.54735 0.717423 + -0.505275 1.72271 -3.2178 0.0235698 0.984215 0.1754 + -0.53324 1.7166 -3.23165 -0.302276 0.938104 -0.169085 + -0.455115 1.66861 -3.22165 0.891253 0.240903 0.384231 + -0.466949 1.69824 -3.21814 0.778274 0.294762 0.554442 + -0.486203 1.72094 -3.212 0.293686 0.834376 0.466439 + -0.479063 1.71713 -3.24826 0.180208 0.931448 -0.316118 + -0.514641 1.71965 -3.26057 -0.104614 0.921259 -0.374616 + -0.452697 1.67527 -3.24104 0.934911 0.205384 0.28941 + -0.463538 1.71018 -3.22945 0.79587 0.39513 0.458763 + -0.459991 1.71537 -3.24245 0.685288 0.726361 -0.0527265 + -0.462616 1.69921 -3.26817 0.580206 0.523166 -0.624226 + -0.44915 1.68046 -3.25404 0.968713 0.217705 -0.119158 + -0.464674 1.6486 -3.28953 0.645647 0.253095 -0.720474 + -0.498194 1.70173 -3.28048 0.14585 0.642187 -0.752545 + -0.536981 1.70065 -3.28269 -0.317241 0.762649 -0.56367 + -0.565644 1.64481 -3.31499 -0.496902 0.601337 -0.625685 + -0.532342 1.6768 -3.30633 -0.0263397 0.614403 -0.788553 + 0.586175 0.537351 -3.1025 0.000243815 -0.866319 -0.499491 + 0.571676 0.540546 -3.10803 -0.494402 -0.846208 0.19874 + 0.577719 0.556843 -3.13631 -0.133621 -0.639282 -0.757274 + 0.566059 0.547996 -3.12093 -0.607597 -0.724037 -0.326491 + 0.572659 0.555143 -3.13333 -0.351091 -0.658123 -0.66604 + 0.557715 0.622536 -3.16013 -0.549172 -0.304283 -0.778345 + 0.562775 0.624236 -3.16311 -0.296171 -0.306302 -0.904689 + 0.575448 0.625885 -3.166 -0.122914 -0.30581 -0.944125 + 0.591256 0.557566 -3.13757 0.130257 -0.617514 -0.775699 + 0.599647 0.53971 -3.10657 0.39564 -0.88214 0.255535 + 0.548117 0.591963 -3.10712 -0.851261 -0.231359 0.470985 + 0.542499 0.599414 -3.12001 -0.96492 -0.256926 0.0540289 + 0.54317 0.60936 -3.13725 -0.876285 -0.286263 -0.387527 + 0.54977 0.616509 -3.14965 -0.721344 -0.297361 -0.625491 + 0.547943 0.740242 -3.18411 -0.610035 -0.1674 -0.77449 + 0.561824 0.584708 -3.09456 -0.55867 -0.186201 0.808219 + 0.53763 0.699075 -3.11274 -0.823995 -0.0514958 0.564251 + 0.527938 0.711931 -3.13499 -0.986741 -0.113444 0.116068 + 0.528608 0.721878 -3.15223 -0.931691 -0.144223 -0.333394 + 0.539998 0.734214 -3.17363 -0.788 -0.154734 -0.595913 + 0.576324 0.581513 -3.08902 -0.232011 -0.168985 0.957922 + 0.57636 0.686306 -3.09062 -0.19836 0.0200232 0.979925 + 0.551338 0.69182 -3.10017 -0.53232 -0.00919047 0.846493 + 0.546327 0.812116 -3.10224 -0.448823 -0.0142062 0.893508 + 0.523051 0.832381 -3.11654 -0.781541 -0.0682296 0.620112 + 0.586175 0.537351 -3.1025 -0.0382405 -0.36898 0.92865 + 0.595384 0.580943 -3.08802 0.14118 -0.173692 0.974628 + 0.59542 0.685736 -3.08962 0.116646 0.0276129 0.99279 + 0.600533 0.799135 -3.09494 0.188462 0.0350788 0.981454 + 0.571349 0.806601 -3.09268 -0.142137 0.0174456 0.989693 + 0.608855 0.583301 -3.0921 0.408782 -0.186392 0.893395 + 0.618668 0.689806 -3.09666 0.378271 0.0167921 0.925543 + 0.623781 0.803205 -3.10198 0.394585 0.0423474 0.917883 + 0.621625 0.587169 -3.09879 0.660343 -0.229307 0.715098 + 0.631437 0.693674 -3.10335 0.61122 -0.00708814 0.791429 + 0.643601 0.806782 -3.11376 0.630021 0.0108439 0.776503 + 0.634331 0.920423 -3.11392 0.460695 0.0582786 0.885643 + 0.604914 0.543026 -3.11231 0.599491 -0.793042 -0.10814 + 0.626892 0.590484 -3.10453 0.894568 -0.257591 0.365234 + 0.640528 0.699396 -3.11326 0.888186 -0.0642877 0.454964 + 0.652691 0.812505 -3.12367 0.883749 -0.0458952 0.465705 + 0.605372 0.551679 -3.12737 0.504876 -0.673182 -0.540301 + 0.630794 0.598641 -3.1187 0.96102 -0.276298 -0.0100097 + 0.644429 0.707551 -3.12743 0.989905 -0.109532 0.0899532 + 0.658747 0.825165 -3.14567 0.990262 -0.108622 0.0870825 + 0.667346 0.932309 -3.14009 0.883841 -0.00785025 0.467721 + 0.60783 0.623089 -3.16117 0.369652 -0.296886 -0.880464 + 0.621945 0.617204 -3.15097 0.634053 -0.296556 -0.714165 + 0.631252 0.607295 -3.13376 0.895559 -0.282223 -0.343981 + 0.64522 0.722485 -3.15341 0.936761 -0.164802 -0.30874 + 0.659537 0.840098 -3.17165 0.938084 -0.166874 -0.303564 + 0.588986 0.626609 -3.16726 0.0837446 -0.299678 -0.950358 + 0.611554 0.742554 -3.18823 0.385992 -0.219779 -0.89594 + 0.635913 0.732394 -3.17062 0.682056 -0.203846 -0.702315 + 0.569347 0.744823 -3.19213 -0.153065 -0.198109 -0.968155 + 0.59271 0.746072 -3.19432 0.095782 -0.220521 -0.970668 + 0.591484 0.874562 -3.22342 0.0317438 -0.231361 -0.97235 + 0.620733 0.865637 -3.21597 0.343933 -0.244555 -0.906589 + 0.645092 0.855476 -3.19836 0.667174 -0.225451 -0.709966 + 0.556674 0.743174 -3.18924 -0.327316 -0.176342 -0.928314 + 0.546451 0.880131 -3.2058 -0.569295 -0.120708 -0.813224 + 0.568121 0.873315 -3.22124 -0.354692 -0.199356 -0.913483 + 0.53772 0.8772 -3.20066 -0.66086 -0.0869969 -0.74545 + 0.519239 1.04396 -3.18963 -0.865697 -0.130476 -0.483265 + 0.539913 1.02456 -3.23291 -0.790094 -0.178882 -0.586305 + 0.561584 1.01774 -3.24835 -0.494967 -0.229583 -0.838033 + 0.523388 0.875809 -3.1798 -0.828502 -0.099929 -0.550999 + 0.504907 1.04257 -3.16877 -0.701565 -0.125339 -0.701496 + 0.494132 1.17213 -3.19393 -0.702786 -0.297564 -0.646179 + 0.51007 1.16584 -3.22143 -0.883429 -0.260642 -0.389383 + 0.530744 1.14643 -3.26471 -0.793758 -0.276857 -0.541571 + 0.511998 0.863474 -3.1584 -0.945307 -0.128199 -0.299932 + 0.488374 1.03288 -3.15513 -0.907395 -0.0970555 -0.408919 + 0.4776 1.16244 -3.18029 -0.942434 -0.0736707 -0.326177 + 0.513358 0.845238 -3.1388 -0.980347 -0.103779 0.167779 + 0.489735 1.01464 -3.13553 -0.901546 -0.0392282 0.430902 + 0.481043 1.14377 -3.15522 -0.784117 0.158754 0.599965 + 0.481353 1.25512 -3.22384 -0.987784 -0.134563 -0.0785871 + 0.513404 0.976579 -3.11442 -0.620808 -0.00632017 0.783937 + 0.504713 1.10571 -3.13411 -0.43755 0.197514 0.877233 + 0.499466 1.21596 -3.17468 -0.560644 0.224104 0.797155 + 0.484796 1.23645 -3.19877 -0.909717 0.11299 0.39956 + 0.536681 0.956314 -3.10013 -0.299688 0.0448607 0.952982 + 0.530518 1.08377 -3.11835 -0.212246 0.192842 0.958 + 0.525271 1.19402 -3.15892 -0.354516 0.225312 0.907498 + 0.520131 1.27847 -3.17029 -0.522122 -0.06221 0.850599 + 0.492573 1.29355 -3.19233 -0.785878 -0.0859075 0.612386 + 0.571401 0.931682 -3.09585 -0.0186609 0.0506652 0.998541 + 0.565238 1.05913 -3.11408 -0.0270512 0.17978 0.983335 + 0.555427 1.18942 -3.14536 -0.22573 0.16772 0.959643 + 0.550287 1.27386 -3.15673 -0.377021 -0.0697977 0.923571 + 0.600585 0.924214 -3.09811 0.26355 0.0591017 0.962834 + 0.599897 1.0532 -3.11111 0.172546 0.132078 0.976106 + 0.590086 1.18348 -3.14239 -0.159698 0.122843 0.979493 + 0.59209 1.27668 -3.14199 -0.260878 -0.122862 0.957522 + 0.553622 1.32178 -3.14126 -0.370477 -0.22021 0.90236 + 0.633643 1.04941 -3.12692 0.424491 0.0719949 0.902565 + 0.6301 1.19278 -3.13251 0.110953 0.0452532 0.992795 + 0.632104 1.28597 -3.13211 0.0597121 -0.214011 0.975004 + 0.650141 1.33717 -3.10911 0.130295 -0.352698 0.926621 + 0.595426 1.3246 -3.12652 -0.269633 -0.261987 0.92664 + 0.656342 1.0555 -3.13793 0.591563 0.0726874 0.802976 + 0.652799 1.19887 -3.14352 0.805247 -0.0103013 0.59285 + 0.658146 1.29773 -3.13945 0.807861 -0.295182 0.510125 + 0.676183 1.34892 -3.11645 0.76637 -0.33731 0.546716 + 0.647141 1.3841 -3.09778 0.0196004 -0.208752 0.977772 + 0.654151 0.924001 -3.12571 0.625688 0.0396191 0.779066 + 0.669537 1.06381 -3.15232 0.902329 0.0752977 0.42442 + 0.65664 1.2094 -3.16726 0.9916 0.0126026 0.128726 + 0.661988 1.30826 -3.16319 0.972988 -0.22795 0.0365212 + 0.681781 1.36353 -3.1494 0.967543 -0.250185 0.0355947 + 0.672569 1.06863 -3.1839 0.995392 0.0595037 0.0751907 + 0.659673 1.21423 -3.19885 0.999634 0.0247544 -0.0109318 + 0.661251 1.30121 -3.20897 0.976592 -0.214797 0.011416 + 0.673401 0.944969 -3.16209 0.990919 -0.0358034 0.129608 + 0.673716 1.09031 -3.22162 0.981413 0.0772892 -0.175653 + 0.65362 1.19303 -3.24936 0.951391 0.015203 -0.307611 + 0.655198 1.28001 -3.25948 0.945373 -0.237076 -0.223751 + 0.674548 0.966645 -3.1998 0.954604 -0.107671 -0.277738 + 0.655449 1.09635 -3.25519 0.734716 -0.0814427 -0.673469 + 0.635353 1.19906 -3.28293 0.702803 -0.113193 -0.702321 + 0.63231 1.27207 -3.30345 0.667225 -0.299354 -0.682054 + 0.674712 1.32436 -3.27106 0.922116 -0.337831 -0.188608 + 0.660103 0.982023 -3.22652 0.698063 -0.181005 -0.69278 + 0.620091 1.11109 -3.28075 0.407212 -0.167293 -0.897881 + 0.60255 1.20799 -3.30343 0.37079 -0.203717 -0.906098 + 0.599507 1.281 -3.32394 0.37684 -0.318738 -0.869711 + 0.624745 0.996771 -3.25208 0.350796 -0.236701 -0.906044 + 0.588752 1.12054 -3.29094 -0.0477699 -0.263829 -0.963386 + 0.571211 1.21744 -3.31362 0.221806 -0.250833 -0.942276 + 0.565112 1.28817 -3.33874 0.235505 -0.334477 -0.912503 + 0.60546 1.32904 -3.344 0.381397 -0.294914 -0.876106 + 0.595496 1.0057 -3.25953 -0.105458 -0.262441 -0.959168 + 0.554839 1.13258 -3.27977 -0.518927 -0.321927 -0.791883 + 0.547929 1.21951 -3.31952 -0.249059 -0.359619 -0.899246 + 0.54183 1.29023 -3.34464 -0.0740494 -0.338382 -0.938091 + 0.523834 1.23336 -3.30446 -0.697298 -0.358713 -0.620564 + 0.516057 1.30523 -3.34003 -0.582081 -0.354316 -0.731876 + 0.535934 1.34128 -3.36264 -0.137462 -0.260306 -0.955691 + 0.571065 1.33621 -3.3588 0.201581 -0.280311 -0.938505 + 0.505321 1.25524 -3.29279 -0.818346 -0.327323 -0.472408 + 0.497544 1.32711 -3.32836 -0.816902 -0.301401 -0.49176 + 0.483994 1.38721 -3.34153 -0.775746 -0.161629 -0.609995 + 0.510161 1.35627 -3.35803 -0.488695 -0.194202 -0.850566 + 0.489383 1.26154 -3.26528 -0.904968 -0.270941 -0.328062 + 0.481436 1.3366 -3.29665 -0.915867 -0.261005 -0.305063 + 0.467885 1.3967 -3.30982 -0.928441 -0.188584 -0.320053 + 0.457315 1.46607 -3.30609 -0.927096 -0.0425561 -0.372401 + 0.479175 1.46326 -3.34309 -0.658218 0.0666085 -0.749875 + 0.473405 1.33018 -3.25521 -0.967109 -0.225588 -0.117519 + 0.456161 1.38825 -3.2526 -0.976451 -0.197322 -0.087216 + 0.445592 1.45761 -3.24887 -0.993196 -0.110171 -0.0377359 + 0.477903 1.31404 -3.21642 -0.960145 -0.167453 0.223787 + 0.460659 1.3721 -3.21381 -0.94851 -0.199063 0.246379 + 0.45367 1.43706 -3.20944 -0.939605 -0.120269 0.320434 + 0.440038 1.52514 -3.24407 -0.998748 -0.0292534 -0.0405875 + 0.483735 1.34288 -3.1814 -0.7891 -0.202178 0.580039 + 0.476746 1.40784 -3.17703 -0.74284 -0.0650878 0.666298 + 0.448117 1.50459 -3.20464 -0.872914 -0.0389951 0.486313 + 0.439861 1.59715 -3.23409 -0.998251 0.0590164 -0.00333648 + 0.451384 1.55784 -3.28539 -0.923745 0.0418626 -0.380713 + 0.511293 1.3278 -3.15936 -0.555793 -0.207193 0.805087 + 0.511419 1.39152 -3.14952 -0.521974 -0.0549894 0.851187 + 0.480425 1.49274 -3.17787 -0.626794 0.0123308 0.779088 + 0.48108 1.54865 -3.17669 -0.625956 0.0126517 0.779755 + 0.448771 1.5605 -3.20346 -0.827301 0.0108676 0.561654 + 0.553749 1.3855 -3.13142 -0.438725 -0.116221 0.891074 + 0.515098 1.47642 -3.15036 -0.60825 -0.00548743 0.793726 + 0.518278 1.5461 -3.14755 -0.617348 0.0191448 0.786457 + 0.468293 1.608 -3.18951 -0.655544 0.0993218 0.748597 + 0.592426 1.37152 -3.1152 -0.329543 -0.19098 0.924623 + 0.556076 1.45823 -3.11757 -0.529834 -0.0763028 0.844662 + 0.559255 1.52791 -3.11476 -0.52542 -0.0022562 0.85084 + 0.505491 1.60545 -3.16036 -0.596333 0.115572 0.794374 + 0.461802 1.63799 -3.20075 -0.728222 0.170082 0.663902 + 0.594754 1.44425 -3.10136 -0.320473 -0.108846 0.940983 + 0.610696 1.49529 -3.0929 -0.300197 -0.069006 0.951378 + 0.578752 1.58965 -3.10371 -0.455998 0.109159 0.883261 + 0.663083 1.43514 -3.08933 0.1661 -0.119303 0.978865 + 0.630192 1.55703 -3.08185 -0.10993 0.030537 0.99347 + 0.584976 1.64128 -3.1119 -0.376148 0.36761 0.850515 + 0.511716 1.65707 -3.16855 -0.528292 0.248882 0.811767 + 0.473636 1.66762 -3.19725 -0.654973 0.238546 0.717012 + 0.688456 1.41574 -3.10452 0.785701 -0.191776 0.588129 + 0.669327 1.52069 -3.08742 0.343381 0.0137743 0.939095 + 0.669976 1.57825 -3.09243 0.545064 0.242442 0.802575 + 0.630841 1.61459 -3.08686 0.0365782 0.313114 0.949011 + 0.587185 1.68532 -3.13944 -0.243375 0.578913 0.778221 + 0.694053 1.43035 -3.13747 0.98998 -0.126578 0.062592 + 0.699069 1.50562 -3.12845 0.992826 0.0512256 0.108035 + 0.694699 1.50129 -3.10261 0.831711 0.0149211 0.555008 + 0.681454 1.58115 -3.10895 0.85654 0.306446 0.415247 + 0.63305 1.65863 -3.1144 0.303509 0.605713 0.735523 + 0.695203 1.43541 -3.17712 0.994445 -0.105055 -0.00647968 + 0.700219 1.51068 -3.1681 0.999117 0.0413441 -0.00750497 + 0.685824 1.58547 -3.1348 0.953066 0.263568 0.148983 + 0.658509 1.6637 -3.14912 0.758979 0.576913 0.301865 + 0.644528 1.66153 -3.13093 0.593316 0.610819 0.524287 + 0.681044 1.35648 -3.19517 0.96115 -0.273334 0.0384635 + 0.69142 1.39961 -3.20542 0.988231 -0.150775 0.025803 + 0.693685 1.47402 -3.24747 0.984788 -0.00702456 -0.173617 + 0.685088 1.36749 -3.28131 0.939304 -0.178376 -0.293071 + 0.689902 1.43823 -3.27578 0.945442 0.0647043 -0.3193 + 0.664568 1.44361 -3.31868 0.772747 0.0315309 -0.633931 + 0.689713 1.50917 -3.26688 0.936623 0.0982223 -0.336288 + 0.659754 1.37288 -3.32422 0.700141 -0.11796 -0.704193 + 0.613389 1.3855 -3.35319 0.438298 -0.151212 -0.886019 + 0.614827 1.44822 -3.36385 0.520671 -0.036705 -0.852968 + 0.61217 1.51388 -3.35691 0.583947 0.183285 -0.79083 + 0.66191 1.50927 -3.31174 0.762714 0.1616 -0.626221 + 0.651824 1.31642 -3.31503 0.692214 -0.337772 -0.637769 + 0.572964 1.40198 -3.36991 0.180221 -0.134421 -0.974398 + 0.574402 1.46469 -3.38058 -0.0310583 -0.0582377 -0.997819 + 0.537834 1.40705 -3.37375 -0.178854 -0.0681361 -0.981514 + 0.543937 1.50831 -3.36949 -0.294815 0.0607852 -0.953619 + 0.548739 1.56282 -3.36601 -0.170037 0.270589 -0.947559 + 0.579204 1.5192 -3.3771 0.20674 0.158669 -0.965444 + 0.505342 1.43232 -3.35958 -0.470406 0.00257515 -0.882446 + 0.511446 1.53358 -3.35532 -0.48973 0.124315 -0.862966 + 0.537023 1.60222 -3.34832 -0.177116 0.384811 -0.905842 + 0.57272 1.58157 -3.35632 0.313933 0.408095 -0.857266 + 0.605686 1.57624 -3.33613 0.552667 0.405386 -0.728163 + 0.473244 1.55503 -3.32238 -0.72584 0.125452 -0.676327 + 0.478094 1.62457 -3.30764 -0.543061 0.294721 -0.786272 + 0.516295 1.60312 -3.34057 -0.420779 0.315638 -0.850481 + 0.532342 1.6768 -3.30633 0.048752 0.589195 -0.806519 + 0.561004 1.62097 -3.33863 0.273532 0.518614 -0.810074 + 0.451207 1.62985 -3.27541 -0.90451 0.100457 -0.414452 + 0.464674 1.6486 -3.28953 -0.642418 0.275969 -0.71494 + 0.511614 1.6777 -3.29858 -0.347331 0.436341 -0.830041 + 0.498194 1.70173 -3.28048 -0.230112 0.644323 -0.729312 + 0.536981 1.70065 -3.28269 0.370334 0.757388 -0.537788 + 0.44915 1.68046 -3.25404 -0.968714 0.217707 -0.119152 + 0.462616 1.69921 -3.26817 -0.580206 0.523167 -0.624225 + 0.452697 1.67527 -3.24104 -0.934911 0.205382 0.289412 + 0.459991 1.71537 -3.24245 -0.685288 0.726361 -0.0527265 + 0.479063 1.71713 -3.24826 -0.15561 0.937762 -0.310464 + 0.514641 1.71965 -3.26057 0.0862263 0.949963 -0.300226 + 0.44228 1.59049 -3.2147 -0.92994 0.0129552 0.367484 + 0.455115 1.66861 -3.22165 -0.891256 0.240899 0.384227 + 0.466949 1.69824 -3.21814 -0.778274 0.294762 0.554442 + 0.463538 1.71018 -3.22945 -0.79587 0.39513 0.458763 + 0.486203 1.72094 -3.212 -0.361332 0.839313 0.406194 + 0.489614 1.70901 -3.2007 -0.53588 0.426681 0.728544 + 0.527694 1.69846 -3.172 -0.387392 0.504702 0.771494 + 0.505275 1.72271 -3.2178 0.0152854 0.997239 0.0726618 + 0.53324 1.7166 -3.23165 0.277026 0.943507 -0.1818 + 0.55558 1.6976 -3.25378 0.525324 0.776818 -0.347259 + 0.565644 1.64481 -3.31499 0.489238 0.61329 -0.620099 + 0.602219 1.70569 -3.1552 0.117109 0.851477 0.511149 + 0.542727 1.71883 -3.18776 -0.0753783 0.939426 0.334361 + 0.570693 1.71273 -3.20162 0.284602 0.933741 -0.217093 + 0.586291 1.68653 -3.23816 0.434657 0.765782 -0.473975 + 0.596354 1.63375 -3.29937 0.515409 0.604416 -0.607483 + 0.616199 1.70786 -3.17339 0.424719 0.90491 0.0274165 + 0.662005 1.66235 -3.18016 0.83368 0.541835 -0.106734 + 0.631797 1.68167 -3.20994 0.564281 0.719699 -0.4045 + 0.64218 1.63361 -3.26286 0.61592 0.582273 -0.530661 + 0.651512 1.5761 -3.29962 0.694891 0.364893 -0.619661 + 0.68932 1.58412 -3.16583 0.968412 0.249146 0.0102062 + 0.672388 1.61429 -3.23308 0.864893 0.406283 -0.294778 + 0.696247 1.54582 -3.18751 0.986079 0.153325 -0.0643388 + 0.679315 1.57599 -3.25476 0.894676 0.284279 -0.344587 + -0.791942 1.67972 -2.78532 0.57781 0.0178925 -0.815975 + -0.814274 1.75317 -2.76932 0.5203 0.360047 -0.774374 + -0.806332 1.74827 -2.76421 0.525217 0.247992 -0.814031 + -0.798455 1.68053 -2.78978 0.573549 0.0465163 -0.817849 + -0.821988 1.74942 -2.77501 0.392105 0.393541 -0.831492 + -0.839872 1.7517 -2.78167 0.324098 0.346841 -0.880149 + -0.783999 1.67483 -2.78021 0.520899 0.00297169 -0.853613 + -0.790093 1.63509 -2.76291 0.0406251 -0.657813 -0.752085 + -0.796606 1.6359 -2.76737 0.556685 -0.551575 -0.621182 + -0.806169 1.67678 -2.79547 0.58398 0.0337181 -0.811068 + -0.766685 1.66096 -2.76934 0.516122 0.0149379 -0.856385 + -0.771053 1.63108 -2.76692 0.0382173 -0.475519 -0.878875 + -0.798681 1.59594 -2.70875 -0.0721774 -0.809432 -0.582761 + -0.806055 1.59391 -2.7076 0.346035 -0.808587 -0.475865 + -0.785028 1.76407 -2.74993 0.397479 0.181623 -0.899457 + -0.745381 1.67676 -2.75506 0.406251 0.141869 -0.902681 + -0.753738 1.61722 -2.75605 0.0231711 -0.459699 -0.887772 + -0.779641 1.59193 -2.71276 -0.331518 -0.754291 -0.566692 + -0.801867 1.57579 -2.67967 -0.0110228 -0.910444 -0.413485 + -0.790993 1.80279 -2.74591 0.275007 0.172826 -0.945782 + -0.698784 1.73801 -2.7231 0.50199 0.185631 -0.844717 + -0.679217 1.69936 -2.72044 0.629685 0.134055 -0.765197 + -0.725814 1.6381 -2.75241 0.355598 -0.0303209 -0.934147 + -0.734684 1.58857 -2.74297 0.0327962 -0.619907 -0.78399 + -0.853578 1.78375 -2.77168 0.220067 0.407499 -0.886293 + -0.844884 1.82745 -2.74932 0.163304 0.275887 -0.947216 + -0.769243 1.83163 -2.73897 0.27562 0.220377 -0.935664 + -0.70475 1.77673 -2.71907 0.421994 0.128815 -0.8974 + -0.658122 1.69592 -2.69818 0.752723 0.0196255 -0.658044 + -0.891408 1.71798 -2.81212 -0.0288314 0.365883 -0.930214 + -0.895508 1.7952 -2.77479 -0.0844793 0.454784 -0.886586 + -0.886814 1.83889 -2.75243 -0.0429062 0.443317 -0.895338 + -0.823133 1.85629 -2.74238 0.0960795 0.302845 -0.948184 + -0.747032 1.84454 -2.72582 0.413157 0.274891 -0.86818 + -0.877702 1.68593 -2.82211 0.0811858 0.173054 -0.981561 + -0.92314 1.70255 -2.80862 -0.434134 0.205941 -0.876993 + -0.92724 1.77977 -2.77129 -0.408501 0.381335 -0.829283 + -0.930033 1.84529 -2.73959 -0.358719 0.425365 -0.830895 + -0.896273 1.88951 -2.72178 -0.13649 0.4492 -0.882944 + -0.840681 1.667 -2.81473 0.317423 0.0409339 -0.9474 + -0.862381 1.6295 -2.81421 0.133586 -0.421408 -0.896978 + -0.899401 1.64843 -2.82158 -0.219311 -0.271845 -0.937018 + -0.959759 1.68877 -2.78486 -0.66129 0.110325 -0.741973 + -0.822798 1.66471 -2.80807 0.497409 -0.0407565 -0.866558 + -0.828764 1.61901 -2.79522 0.533216 -0.552134 -0.640959 + -0.886801 1.59359 -2.78687 -0.0550033 -0.675752 -0.735074 + -0.93602 1.63465 -2.79782 -0.445682 -0.311752 -0.839153 + -0.812135 1.63108 -2.78261 0.700325 -0.474183 -0.533568 + -0.853184 1.5831 -2.76788 0.363031 -0.782004 -0.506634 + -0.912271 1.57791 -2.76563 -0.193856 -0.75236 -0.629582 + -0.96149 1.61897 -2.77657 -0.630373 -0.365855 -0.684675 + -0.821584 1.58909 -2.72284 0.582354 -0.740776 -0.334836 + -0.835961 1.56237 -2.67765 0.502603 -0.853749 -0.136023 + -0.867561 1.55638 -2.72269 0.331162 -0.864951 -0.377081 + -0.907131 1.55762 -2.73451 -0.126398 -0.87775 -0.462145 + -0.967511 1.58868 -2.74568 -0.695097 -0.574968 -0.431569 + -0.80924 1.57376 -2.67852 0.270974 -0.922729 -0.274124 + -0.815939 1.57227 -2.6585 0.29356 -0.955485 0.0294999 + -0.846625 1.56037 -2.63923 0.499598 -0.859789 0.105657 + -0.880536 1.52939 -2.66746 0.362825 -0.921217 -0.140417 + -0.920106 1.53063 -2.67928 -0.314388 -0.874317 -0.369771 + -0.801583 1.5752 -2.67731 -0.0205262 -0.985793 -0.166709 + -0.808282 1.57371 -2.65728 -0.0105827 -0.997689 -0.0671084 + -0.826604 1.57027 -2.62008 0.279188 -0.959767 0.0300253 + -0.858967 1.55925 -2.59536 0.443394 -0.850433 0.283133 + -0.772061 1.57169 -2.68612 -0.196182 -0.958584 -0.206469 + -0.773179 1.56623 -2.65844 -0.205305 -0.967011 -0.150798 + -0.819686 1.57149 -2.61797 -0.0290257 -0.996849 -0.0738163 + -0.831381 1.56927 -2.59942 0.216451 -0.966743 0.136227 + -0.772345 1.57227 -2.68849 -0.261866 -0.892961 -0.366123 + -0.708951 1.55867 -2.69122 0.297745 -0.893899 -0.335102 + -0.710069 1.55321 -2.66353 0.179969 -0.963283 -0.199239 + -0.784583 1.564 -2.61912 -0.247033 -0.951614 -0.182772 + -0.727387 1.56891 -2.7187 0.0782802 -0.839601 -0.537534 + -0.685665 1.60601 -2.71707 0.685552 -0.337869 -0.644875 + -0.667228 1.59578 -2.68959 0.745192 -0.437352 -0.5034 + -0.659861 1.57763 -2.65526 0.747017 -0.635531 -0.195105 + -0.721856 1.54442 -2.62195 0.0933065 -0.989797 -0.107679 + -0.706759 1.60945 -2.73933 0.543491 -0.296007 -0.785492 + -0.635948 1.67068 -2.66666 0.875226 -0.1293 -0.466112 + -0.628581 1.65253 -2.63233 0.938848 -0.25293 -0.233646 + -0.671648 1.56884 -2.61368 0.655234 -0.754728 0.0324623 + -0.73635 1.54179 -2.59341 0.0294985 -0.999311 -0.0225176 + -0.799076 1.56137 -2.59059 -0.27454 -0.929179 -0.247497 + -0.824463 1.57049 -2.59732 -0.065448 -0.989332 -0.130146 + -0.825704 1.57004 -2.59471 -0.15939 -0.987205 0.00451154 + -0.837516 1.57337 -2.58611 0.1607 -0.924362 0.346021 + -0.691584 1.55657 -2.57761 0.495977 -0.831434 0.250447 + -0.769892 1.54273 -2.56278 -0.114509 -0.986836 0.114198 + -0.800317 1.56093 -2.58798 -0.336817 -0.92085 -0.196442 + -0.819805 1.56833 -2.57142 -0.461571 -0.886975 0.0151249 + -0.831839 1.57414 -2.58139 -0.293109 -0.940601 0.171338 + -0.647869 1.61192 -2.55956 0.751836 -0.537037 0.382536 + -0.725127 1.55751 -2.54698 0.322835 -0.844862 0.426597 + -0.78938 1.55013 -2.54623 -0.279208 -0.925488 0.255957 + -0.836968 1.58108 -2.53408 -0.531703 -0.77134 0.349752 + -0.849002 1.58689 -2.54405 -0.198611 -0.853073 0.482514 + -0.627933 1.62419 -2.59563 0.895932 -0.443789 -0.0188942 + -0.607579 1.71319 -2.55455 0.961848 -0.209037 0.176497 + -0.632771 1.68983 -2.52035 0.796637 -0.332407 0.504851 + -0.682931 1.59906 -2.52419 0.595678 -0.623201 0.506742 + -0.608227 1.74153 -2.59125 0.988661 -0.093604 -0.117422 + -0.598621 1.84131 -2.53434 0.995656 -0.0682184 0.0633647 + -0.610765 1.83919 -2.48811 0.915465 -0.179423 0.360182 + -0.635957 1.81583 -2.45391 0.735505 -0.293353 0.610718 + -0.667834 1.67697 -2.48499 0.608988 -0.369415 0.701901 + -0.612124 1.75432 -2.62735 0.93876 -0.0190606 -0.344043 + -0.602519 1.85409 -2.57044 0.990159 -0.0120693 -0.139424 + -0.59704 1.91508 -2.53562 0.991416 0.110059 -0.070574 + -0.599069 1.91403 -2.49513 0.986942 0.0314197 0.157982 + -0.611212 1.91192 -2.4489 0.926831 -0.158407 0.340429 + -0.634298 1.77956 -2.65887 0.81776 0.0940477 -0.567824 + -0.60743 1.84952 -2.60037 0.919925 0.10691 -0.377237 + -0.601951 1.91051 -2.56554 0.916953 0.183154 -0.354474 + -0.652085 1.79466 -2.67979 0.700277 0.195223 -0.686659 + -0.625217 1.86462 -2.62128 0.745472 0.264673 -0.611734 + -0.62568 1.9042 -2.60259 0.726355 0.303311 -0.616774 + -0.609082 1.94796 -2.55421 0.843702 0.381512 -0.377644 + -0.682539 1.78964 -2.70592 0.54287 0.185755 -0.819016 + -0.671696 1.85946 -2.66719 0.610272 0.334825 -0.717955 + -0.672159 1.89904 -2.64849 0.61009 0.351035 -0.710327 + -0.671718 1.93004 -2.63245 0.56861 0.44856 -0.689548 + -0.63281 1.94165 -2.59125 0.661195 0.429934 -0.6148 + -0.70215 1.85444 -2.69333 0.547532 0.325593 -0.770842 + -0.717728 1.89175 -2.68815 0.546454 0.346397 -0.762494 + -0.717287 1.92276 -2.6721 0.533751 0.454755 -0.712958 + -0.681147 1.97629 -2.60161 0.508432 0.569605 -0.645791 + -0.76261 1.88185 -2.72064 0.346042 0.291973 -0.891632 + -0.769293 1.92029 -2.7111 0.336904 0.418033 -0.843649 + -0.774611 1.97526 -2.67192 0.326314 0.606909 -0.724693 + -0.722605 1.97773 -2.63292 0.49186 0.57027 -0.657925 + -0.821635 1.89349 -2.72653 0.0229753 0.337679 -0.940981 + -0.828318 1.93192 -2.71699 -0.0504029 0.400772 -0.91479 + -0.827004 1.98142 -2.67858 0.0468778 0.647493 -0.760628 + -0.775786 2.05593 -2.59694 0.316922 0.644763 -0.695587 + -0.894775 1.92671 -2.70593 -0.163856 0.429055 -0.888292 + -0.894387 1.95759 -2.68967 -0.166821 0.526362 -0.833734 + -0.893074 2.0071 -2.65126 -0.132478 0.695714 -0.705997 + -0.88035 2.0551 -2.5984 -0.182775 0.717491 -0.672161 + -0.828179 2.06209 -2.6036 -0.00471381 0.692041 -0.721843 + -0.939981 1.93761 -2.6864 -0.445685 0.415391 -0.792979 + -0.939594 1.96849 -2.67014 -0.444465 0.534299 -0.71901 + -0.932038 2.00774 -2.6362 -0.434742 0.68001 -0.590412 + -0.919314 2.05575 -2.58333 -0.452493 0.701658 -0.550387 + -0.865733 2.12251 -2.53207 -0.223287 0.710371 -0.66747 + -0.939493 1.89591 -2.70895 -0.425375 0.416242 -0.803616 + -0.960655 1.93025 -2.67183 -0.775159 0.30184 -0.554996 + -0.960536 1.96055 -2.6545 -0.772933 0.411177 -0.483228 + -0.952981 1.9998 -2.62055 -0.747207 0.551452 -0.370921 + -0.93599 2.04759 -2.57125 -0.748226 0.579306 -0.323362 + -0.960167 1.88856 -2.69438 -0.715761 0.349496 -0.604598 + -0.975678 1.9163 -2.64574 -0.933873 0.210408 -0.289154 + -0.975559 1.9466 -2.6284 -0.934795 0.261847 -0.23999 + -0.966714 1.98608 -2.59648 -0.907364 0.393622 -0.147483 + -0.967167 1.83358 -2.72033 -0.678341 0.340172 -0.651258 + -0.98876 1.82 -2.69461 -0.843179 0.265588 -0.467453 + -0.98176 1.87498 -2.66866 -0.889918 0.319809 -0.32522 + -0.984638 1.89665 -2.60977 -0.995455 0.0869279 -0.0388972 + -0.985072 1.92573 -2.59022 -0.992825 0.118331 -0.0172081 + -0.964374 1.76805 -2.75202 -0.660491 0.281924 -0.695895 + -0.989218 1.75021 -2.72527 -0.8451 0.167064 -0.507835 + -1.00836 1.80441 -2.66154 -0.972147 0.198398 -0.124776 + -0.99072 1.85533 -2.63269 -0.973704 0.224957 0.0359918 + -0.982019 1.86931 -2.57694 -0.977464 -0.0539966 0.204077 + -0.984603 1.67093 -2.75811 -0.882443 -0.0137757 -0.470218 + -0.990624 1.64064 -2.72722 -0.946781 -0.20896 -0.244827 + -1.00882 1.73461 -2.6922 -0.964303 0.0181394 -0.264178 + -1.00914 1.71738 -2.65557 -0.981669 -0.122694 0.145849 + -1.00693 1.78301 -2.62707 -0.9627 0.040933 0.267458 + -0.96237 1.56839 -2.71456 -0.62331 -0.755816 -0.200568 + -0.990947 1.6234 -2.69058 -0.945689 -0.321992 -0.0446497 + -0.986209 1.61679 -2.64923 -0.930161 -0.305232 0.204042 + -0.989555 1.70095 -2.61435 -0.901705 -0.174052 0.39577 + -0.987338 1.76658 -2.58585 -0.864124 -0.0264926 0.502581 + -0.957632 1.56178 -2.6732 -0.748753 -0.643059 -0.160759 + -0.920658 1.52071 -2.64289 -0.235248 -0.971297 -0.0352134 + -0.958184 1.55185 -2.63682 -0.828443 -0.556163 0.0660652 + -0.960761 1.58365 -2.61395 -0.861433 -0.259178 0.43676 + -0.969637 1.61842 -2.61355 -0.837963 -0.221706 0.498663 + -0.972983 1.70257 -2.57868 -0.802892 -0.206512 0.559212 + -0.892878 1.52828 -2.6236 0.341683 -0.91388 0.219261 + -0.9349 1.53172 -2.60313 -0.485599 -0.779924 0.394858 + -0.937477 1.56351 -2.58027 -0.713627 -0.37592 0.591118 + -0.930964 1.6479 -2.55143 -0.742944 -0.186842 0.642748 + -0.93984 1.68266 -2.55103 -0.690224 -0.213433 0.691402 + -0.907121 1.53929 -2.58384 0.0272401 -0.829286 0.55816 + -0.917493 1.56796 -2.55886 -0.414358 -0.493459 0.764726 + -0.91098 1.65235 -2.53002 -0.598383 -0.165821 0.783863 + -0.870453 1.57278 -2.5533 0.204894 -0.767801 0.607042 + -0.880826 1.60145 -2.52833 -0.260776 -0.499113 0.826367 + -0.853085 1.62012 -2.50619 -0.442946 -0.440621 0.780802 + -0.883239 1.67101 -2.50788 -0.538309 -0.215685 0.81468 + -0.82717 1.59283 -2.50967 -0.414279 -0.631358 0.65556 + -0.806529 1.64262 -2.4703 -0.390172 -0.333282 0.858306 + -0.808238 1.67943 -2.46158 -0.41718 -0.25338 0.872788 + -0.884948 1.70783 -2.49917 -0.578255 -0.137293 0.804221 + -0.932378 1.72366 -2.53138 -0.623133 -0.107127 0.774745 + -0.779582 1.56188 -2.52182 -0.112349 -0.809437 0.576358 + -0.780614 1.61533 -2.47378 -0.184575 -0.537896 0.822557 + -0.753714 1.67357 -2.44263 0.0275537 -0.358409 0.933158 + -0.825457 1.74618 -2.44792 -0.484789 -0.329762 0.810085 + -0.749654 1.56542 -2.51827 0.163701 -0.804854 0.570449 + -0.750687 1.61887 -2.47023 0.154318 -0.531271 0.833029 + -0.710487 1.66167 -2.46787 0.421 -0.37668 0.825149 + -0.732821 1.75039 -2.41834 0.189249 -0.403489 0.895199 + -0.770933 1.74032 -2.42897 -0.255983 -0.367724 0.894009 + -0.707459 1.60697 -2.49548 0.435904 -0.558892 0.705427 + -0.690167 1.76568 -2.43545 0.509453 -0.355384 0.783684 + -0.697106 1.83315 -2.39531 0.528657 -0.461935 0.712136 + -0.743447 1.80265 -2.39067 0.156302 -0.545101 0.823671 + -0.642895 1.8833 -2.41377 0.723963 -0.353518 0.592371 + -0.643676 1.91163 -2.39283 0.72154 -0.326284 0.610671 + -0.698558 1.86001 -2.37167 0.521743 -0.457078 0.720322 + -0.744899 1.82951 -2.36703 0.169652 -0.550515 0.817405 + -0.78156 1.79259 -2.4013 -0.232799 -0.568733 0.78889 + -0.611993 1.94024 -2.42795 0.940178 -0.0642109 0.334577 + -0.64878 1.9439 -2.37416 0.691696 -0.153799 0.705622 + -0.703661 1.89229 -2.35301 0.442762 -0.317334 0.838606 + -0.747448 1.87221 -2.34499 0.0964543 -0.380229 0.919849 + -0.783061 1.81933 -2.37746 -0.238089 -0.558351 0.794706 + -0.606495 1.95083 -2.4826 0.97823 0.177073 0.108223 + -0.615318 1.98028 -2.46401 0.952364 0.286998 0.10313 + -0.620815 1.96969 -2.40936 0.904435 0.131668 0.405784 + -0.660547 1.96443 -2.36165 0.677487 -0.244718 0.693631 + -0.604467 1.95189 -2.52309 0.956868 0.281856 -0.0704339 + -0.616228 1.99017 -2.50007 0.922045 0.382861 -0.0570147 + -0.63063 2.01243 -2.43561 0.977425 0.195109 0.0810696 + -0.632582 1.99022 -2.39685 0.927693 0.0367494 0.371531 + -0.620843 1.98625 -2.53119 0.794554 0.503069 -0.340008 + -0.638015 2.03301 -2.49136 0.816237 0.485109 -0.31373 + -0.631541 2.02232 -2.47167 0.948275 0.315435 -0.0357073 + -0.633538 2.0472 -2.40539 0.999548 -0.0195783 -0.0228 + -0.64224 1.9879 -2.56041 0.611052 0.567786 -0.551574 + -0.659411 2.03466 -2.52058 0.626613 0.591763 -0.507122 + -0.642004 2.07463 -2.4519 0.874311 0.319315 -0.365538 + -0.63553 2.06394 -2.43221 0.984795 0.0972452 -0.143952 + -0.695002 2.04605 -2.54545 0.526019 0.600353 -0.602396 + -0.697051 2.09976 -2.49575 0.568416 0.54089 -0.619953 + -0.66146 2.08837 -2.47088 0.684603 0.4793 -0.549173 + -0.633207 2.11924 -2.40512 0.886307 0.235552 -0.398717 + -0.73646 2.04749 -2.57676 0.482143 0.597229 -0.64098 + -0.731765 2.11448 -2.51369 0.514485 0.554786 -0.653848 + -0.683014 2.15348 -2.43972 0.593593 0.509452 -0.622981 + -0.652663 2.13298 -2.42409 0.706599 0.4343 -0.55866 + -0.771091 2.12291 -2.53387 0.311195 0.636454 -0.705751 + -0.751319 2.1867 -2.46873 0.34495 0.628141 -0.697459 + -0.717728 2.16819 -2.45766 0.538277 0.537825 -0.648847 + -0.665825 2.23238 -2.35891 0.606256 0.498854 -0.619354 + -0.813562 2.1295 -2.53728 0.00273403 0.701855 -0.712315 + -0.79379 2.19329 -2.47214 0.0409115 0.709869 -0.703144 + -0.729772 2.26941 -2.38266 0.364625 0.625057 -0.690183 + -0.696182 2.2509 -2.37159 0.549229 0.532916 -0.643699 + -0.838586 2.19968 -2.45973 -0.189411 0.723393 -0.663947 + -0.811783 2.28762 -2.36961 -0.164354 0.733101 -0.659963 + -0.766986 2.28123 -2.38203 0.0618663 0.711739 -0.699714 + -0.701887 2.37513 -2.27055 0.373886 0.648147 -0.663412 + -0.897743 2.11935 -2.52144 -0.467667 0.688372 -0.554465 + -0.870596 2.19652 -2.4491 -0.442411 0.697236 -0.564034 + -0.839885 2.28881 -2.35764 -0.421895 0.710917 -0.562673 + -0.779373 2.3927 -2.25875 -0.148816 0.764298 -0.627456 + -0.739101 2.38695 -2.26991 0.0684736 0.739947 -0.669171 + -0.914418 2.11119 -2.50936 -0.754422 0.569669 -0.326073 + -0.884993 2.19264 -2.4363 -0.735518 0.583563 -0.34419 + -0.854282 2.28493 -2.34484 -0.731699 0.588301 -0.344265 + -0.820418 2.3904 -2.23527 -0.713451 0.628584 -0.309628 + -0.807475 2.39389 -2.24678 -0.409072 0.746312 -0.525051 + -0.949723 2.03387 -2.54718 -0.896401 0.428703 -0.112598 + -0.925867 2.09974 -2.48881 -0.896788 0.42718 -0.115278 + -0.896442 2.1812 -2.41575 -0.897487 0.424849 -0.118412 + -0.864403 2.27556 -2.32598 -0.897659 0.422328 -0.125891 + -0.957524 2.01599 -2.51681 -0.955873 0.283779 0.0760023 + -0.933667 2.08186 -2.45844 -0.955482 0.288736 0.0607038 + -0.903362 2.16533 -2.38881 -0.955779 0.289147 0.0536657 + -0.871323 2.25969 -2.29903 -0.961071 0.272168 0.0476102 + -0.976227 1.96522 -2.5583 -0.969524 0.239674 0.0507815 + -0.97488 1.94291 -2.52665 -0.965659 0.054861 0.253954 + -0.956177 1.99368 -2.48517 -0.958448 0.136292 0.250603 + -0.933468 2.06511 -2.43129 -0.962056 0.14511 0.231065 + -0.982453 1.8984 -2.55738 -0.978913 -0.0512429 0.197746 + -0.960645 1.90798 -2.49709 -0.903533 -0.108241 0.414622 + -0.947709 1.97814 -2.45671 -0.913408 -0.0244175 0.406312 + -0.925 2.04957 -2.40284 -0.92221 0.0065995 0.386634 + -0.968217 1.86347 -2.52782 -0.913737 -0.190978 0.358624 + -0.951119 1.83526 -2.50792 -0.817247 -0.303458 0.489919 + -0.946745 1.88814 -2.47632 -0.80619 -0.218147 0.549972 + -0.933809 1.95831 -2.43594 -0.816448 -0.163882 0.553674 + -0.967303 1.83543 -2.5493 -0.906375 -0.180192 0.382119 + -0.950205 1.80722 -2.5294 -0.804771 -0.291616 0.517014 + -0.931499 1.81302 -2.49631 -0.68208 -0.41811 0.59996 + -0.927125 1.86591 -2.46471 -0.675243 -0.315787 0.666578 + -0.920535 1.95166 -2.42247 -0.696359 -0.265959 0.666596 + -0.989285 1.83393 -2.59822 -0.949426 0.0785087 0.304017 + -0.974569 1.80005 -2.57059 -0.854614 -0.0328341 0.518224 + -0.952752 1.77705 -2.54377 -0.725919 -0.154795 0.670135 + -0.930384 1.78543 -2.5186 -0.669148 -0.361581 0.64923 + -0.96552 1.74357 -2.55903 -0.734927 -0.0970597 0.671164 + -0.932931 1.75525 -2.53296 -0.622377 -0.13721 0.770598 + -0.890599 1.77759 -2.4862 -0.592495 -0.434254 0.678508 + -0.891714 1.80518 -2.46391 -0.591678 -0.458083 0.663383 + -0.890927 1.85616 -2.43603 -0.624096 -0.337144 0.704867 + -0.885501 1.73942 -2.50075 -0.614311 -0.143049 0.775989 + -0.830554 1.78436 -2.43336 -0.486673 -0.493024 0.721164 + -0.832056 1.8111 -2.40953 -0.479915 -0.510504 0.713489 + -0.831269 1.86208 -2.38165 -0.54148 -0.345909 0.766255 + -0.78561 1.86204 -2.35542 -0.303951 -0.391738 0.868421 + -0.832096 1.92589 -2.35851 -0.543115 -0.325954 0.773809 + -0.884337 1.94192 -2.39379 -0.618329 -0.312631 0.721063 + -0.901706 2.03045 -2.37084 -0.693712 -0.270323 0.667599 + -0.753861 1.92561 -2.32744 0.0779647 -0.387109 0.918732 + -0.786437 1.92585 -2.33228 -0.313226 -0.378699 0.870906 + -0.819125 1.9989 -2.31556 -0.528493 -0.371839 0.763172 + -0.871366 2.01493 -2.35083 -0.613353 -0.325804 0.719479 + -0.710074 1.94569 -2.33546 0.434301 -0.365764 0.823164 + -0.747227 1.9851 -2.29544 0.0956462 -0.547987 0.831001 + -0.779803 1.98534 -2.30028 -0.303947 -0.458488 0.835108 + -0.799907 2.06345 -2.26903 -0.528842 -0.417472 0.738947 + -0.659523 2.00784 -2.33464 0.700719 -0.468635 0.537935 + -0.70905 1.98909 -2.30845 0.427835 -0.54444 0.721486 + -0.732671 2.0413 -2.25464 0.0843659 -0.616527 0.782801 + -0.760585 2.04989 -2.25375 -0.305038 -0.525347 0.794331 + -0.635489 2.025 -2.36662 0.94458 -0.239428 0.224594 + -0.651803 2.05132 -2.29745 0.677115 -0.546148 0.493192 + -0.694494 2.04529 -2.26765 0.413323 -0.619917 0.666983 + -0.711221 2.12707 -2.18568 0.0531025 -0.645284 0.762095 + -0.625806 2.09016 -2.36259 0.991254 -0.107836 -0.0760717 + -0.62777 2.06848 -2.32943 0.934487 -0.315185 0.165504 + -0.634814 2.13241 -2.22826 0.664094 -0.56651 0.487899 + -0.677505 2.12639 -2.19846 0.37949 -0.648561 0.659815 + -0.627798 2.10689 -2.38942 0.981496 0.00857287 -0.191293 + -0.611454 2.16777 -2.28951 0.990879 -0.109259 -0.0788736 + -0.613417 2.14609 -2.25635 0.927569 -0.332111 0.171223 + -0.613735 2.24551 -2.12377 0.646305 -0.527545 0.551349 + -0.618498 2.19627 -2.32841 0.888655 0.225263 -0.399435 + -0.613089 2.18393 -2.31271 0.980988 0.00482185 -0.194007 + -0.590573 2.27868 -2.18168 0.996485 -0.0678742 -0.0490926 + -0.592338 2.25919 -2.15187 0.936746 -0.283858 0.20477 + -0.635474 2.21187 -2.34328 0.711877 0.421106 -0.562051 + -0.597071 2.30593 -2.21899 0.893656 0.252396 -0.371047 + -0.592208 2.29483 -2.20487 0.985199 0.0430999 -0.165908 + -0.587719 2.34945 -2.12243 0.977946 0.174291 0.115079 + -0.641333 2.33997 -2.24791 0.611847 0.519943 -0.596073 + -0.614047 2.32153 -2.23386 0.715105 0.444631 -0.539377 + -0.593858 2.37316 -2.15465 0.882743 0.422712 -0.205132 + -0.588996 2.36206 -2.14054 0.966483 0.256705 0.00364073 + -0.671689 2.35849 -2.26059 0.553377 0.556708 -0.619557 + -0.634396 2.40377 -2.18031 0.621311 0.639082 -0.453372 + -0.60711 2.38534 -2.16626 0.723068 0.575599 -0.381914 + -0.607734 2.39539 -2.13214 0.694396 0.703007 0.153606 + -0.688289 2.43487 -2.20017 0.392066 0.765047 -0.510869 + -0.658091 2.41823 -2.19021 0.56824 0.670697 -0.476727 + -0.63869 2.41953 -2.15286 0.547702 0.836432 -0.020122 + -0.620986 2.40756 -2.14374 0.601163 0.798868 0.0203085 + -0.717338 2.4441 -2.19967 0.122588 0.855893 -0.502413 + -0.68198 2.44478 -2.16922 0.410428 0.909111 -0.0711744 + -0.662386 2.43398 -2.16276 0.510841 0.858766 -0.0395177 + -0.672795 2.42573 -2.1222 0.342374 0.84465 0.411516 + -0.655091 2.41377 -2.11308 0.376578 0.818919 0.433082 + -0.75761 2.44985 -2.18851 -0.0810503 0.891235 -0.44624 + -0.737161 2.45774 -2.16148 0.100596 0.99492 0.00386728 + -0.711029 2.45401 -2.16872 0.212976 0.97597 -0.0460878 + -0.69239 2.43653 -2.12866 0.290984 0.865544 0.40763 + -0.651936 2.40657 -2.10392 0.381553 0.775628 0.502811 + -0.779546 2.45078 -2.17917 -0.30742 0.891579 -0.332536 + -0.759097 2.45867 -2.15214 -0.0370713 0.995453 0.0877433 + -0.718521 2.44026 -2.12142 0.219071 0.868666 0.444328 + -0.792489 2.44729 -2.16766 -0.577158 0.808936 -0.111851 + -0.767495 2.4564 -2.14467 -0.187437 0.952816 0.238767 + -0.72692 2.43799 -2.11395 0.16542 0.847576 0.504233 + -0.694778 2.39405 -2.07133 0.223661 0.664216 0.713297 + -0.830539 2.38103 -2.21641 -0.881533 0.462726 -0.0937226 + -0.800389 2.43997 -2.15293 -0.723763 0.684222 0.0894853 + -0.775395 2.44909 -2.12994 -0.27419 0.883387 0.380063 + -0.779433 2.43983 -2.11423 -0.312894 0.82097 0.477604 + -0.730957 2.42874 -2.09823 0.159078 0.813555 0.559305 + -0.836761 2.36676 -2.19219 -0.946661 0.313167 0.0758939 + -0.806611 2.42571 -2.12871 -0.791968 0.554141 0.256348 + -0.871261 2.24376 -2.27541 -0.969185 0.108523 0.221141 + -0.836699 2.35083 -2.16856 -0.957604 0.144603 0.24917 + -0.806563 2.41327 -2.11027 -0.808616 0.411995 0.420001 + -0.779384 2.4274 -2.09579 -0.330332 0.736373 0.590454 + -0.903163 2.14858 -2.36166 -0.963085 0.132569 0.23429 + -0.86421 2.22607 -2.25259 -0.929285 -0.0416828 0.367004 + -0.83036 2.33492 -2.14804 -0.919975 -0.00651979 0.391924 + -0.800224 2.39736 -2.08975 -0.779297 0.271983 0.564554 + -0.775271 2.41707 -2.08247 -0.313604 0.665206 0.677608 + -0.896112 2.13089 -2.33884 -0.923206 -0.00632996 0.384253 + -0.886092 2.11841 -2.32031 -0.829607 -0.163921 0.533744 + -0.855504 2.2129 -2.23729 -0.836295 -0.202665 0.509448 + -0.821654 2.32176 -2.13275 -0.82778 -0.171744 0.53412 + -0.793428 2.38709 -2.07782 -0.701245 0.119225 0.702881 + -0.91498 2.03709 -2.3843 -0.831333 -0.140003 0.537851 + -0.874805 2.10837 -2.31093 -0.69172 -0.305455 0.654385 + -0.844218 2.20286 -2.22791 -0.693835 -0.354028 0.627102 + -0.811507 2.31273 -2.12431 -0.686514 -0.326457 0.649711 + -0.783282 2.37806 -2.06938 -0.551401 -0.0454096 0.833003 + -0.844465 2.09285 -2.29092 -0.615169 -0.367549 0.697477 + -0.817902 2.18362 -2.21486 -0.614205 -0.411344 0.67346 + -0.785192 2.29349 -2.11126 -0.579815 -0.40725 0.705664 + -0.773344 2.15422 -2.19296 -0.529769 -0.458467 0.713549 + -0.745921 2.26495 -2.09875 -0.494194 -0.451275 0.74305 + -0.72364 2.33405 -2.04824 -0.34988 -0.199049 0.915403 + -0.762911 2.36258 -2.06075 -0.438923 -0.143965 0.886916 + -0.739134 2.13566 -2.18479 -0.308667 -0.559451 0.769245 + -0.711712 2.24639 -2.09058 -0.294868 -0.527391 0.796813 + -0.697108 2.3191 -2.04342 -0.181196 -0.257626 0.949103 + -0.689506 2.352 -2.04349 0.0490756 0.28227 0.958079 + -0.716039 2.36695 -2.04832 -0.0397312 0.315207 0.948191 + -0.686618 2.23868 -2.09138 0.0611307 -0.603543 0.794984 + -0.672013 2.31139 -2.04422 0.122587 -0.307639 0.943574 + -0.673224 2.347 -2.04401 0.195474 0.259964 0.945626 + -0.678495 2.38904 -2.07185 0.225076 0.653767 0.722447 + -0.652901 2.23799 -2.10415 0.360663 -0.604149 0.710582 + -0.645524 2.31131 -2.05263 0.378136 -0.301161 0.875394 + -0.646734 2.34692 -2.05243 0.341751 0.27979 0.897175 + -0.653081 2.39392 -2.08458 0.320756 0.702836 0.634931 + -0.606357 2.31883 -2.07225 0.656619 -0.213063 0.723502 + -0.62132 2.3518 -2.06515 0.49193 0.326543 0.807077 + -0.604448 2.36293 -2.08553 0.692662 0.468086 0.54874 + -0.589485 2.32996 -2.09262 0.916922 -0.0124601 0.398871 + -0.603302 2.37558 -2.10487 0.725618 0.571427 0.383339 + -0.604579 2.38819 -2.12298 0.728045 0.614623 0.303626 + -0.741521 2.38546 -2.05643 -0.0821952 0.34911 0.93347 + -0.761891 2.40094 -2.06506 -0.175504 0.445567 0.877877 + -0.768476 2.4068 -2.07054 -0.274707 0.563677 0.778976 + -0.72026 2.41256 -2.07945 0.308817 0.760275 0.571501 + -0.726844 2.41842 -2.08492 0.191441 0.782105 0.59301 + 0.866811 1.38322 -1.52127 -0.509732 -0.270871 0.81658 + 0.888762 1.33938 -1.5282 -0.391881 -0.471329 0.790113 + 0.921874 1.33846 -1.52023 -0.116059 -0.65072 0.750396 + 0.828588 1.32435 -1.58429 -0.60527 -0.562075 0.563667 + 0.898161 1.30431 -1.5557 -0.316667 -0.763451 0.562908 + 0.924805 1.30314 -1.54361 0.135117 -0.744381 0.653942 + 0.915406 1.33821 -1.5161 0.00953819 -0.626113 0.779674 + 0.89667 1.41305 -1.49754 -0.495776 -0.133595 0.858113 + 0.814774 1.46235 -1.54842 -0.737016 -0.0651564 0.672727 + 0.806637 1.36818 -1.57736 -0.752968 -0.298712 0.586353 + 0.824142 1.30322 -1.61679 -0.629169 -0.6642 0.403714 + 0.898225 1.28984 -1.57942 -0.208773 -0.833488 0.511578 + 0.926761 1.34633 -1.50425 -0.600554 -0.62624 0.49715 + 0.936756 1.35346 -1.48437 -0.504794 -0.492368 0.709053 + 0.9392 1.36879 -1.48052 -0.402691 -0.122078 0.907158 + 0.929411 1.3979 -1.48212 -0.410404 -0.0659627 0.909515 + 0.926071 1.48754 -1.48244 -0.401241 -0.0239835 0.915658 + 0.844632 1.49219 -1.52469 -0.510054 -0.104623 0.853756 + 0.95556 1.31203 -1.54408 -0.379859 -0.790566 0.480325 + 0.965624 1.33399 -1.49664 -0.395119 -0.790783 0.467486 + 0.975619 1.34114 -1.47677 -0.380523 -0.763947 0.52114 + 0.995526 1.34064 -1.46447 -0.293498 -0.438771 0.849316 + 0.99797 1.35597 -1.46064 -0.150647 -0.106925 0.982788 + 0.950673 1.30417 -1.56006 -0.114048 -0.778626 0.617036 + 0.977756 1.2971 -1.54699 -0.506473 -0.73627 0.448767 + 0.987821 1.31907 -1.49956 -0.48958 -0.730349 0.476342 + 0.99798 1.32681 -1.47853 -0.436769 -0.698436 0.566939 + 1.01789 1.32631 -1.46624 0.0174018 -0.50152 0.864971 + 0.946034 1.30264 -1.56046 0.192164 -0.772265 0.605541 + 0.957355 1.29046 -1.57453 -0.0499628 -0.979301 0.196147 + 0.961993 1.29199 -1.57414 -0.198049 -0.657096 0.727325 + 0.939566 1.30239 -1.55634 0.407837 -0.71324 0.57005 + 0.946222 1.29217 -1.58454 0.394508 -0.91883 -0.0107361 + 0.959124 1.30255 -1.59204 0.133294 -0.838926 -0.52767 + 0.965185 1.29072 -1.57667 0.0689261 -0.849407 -0.523218 + 0.964165 1.28973 -1.57497 -0.181322 -0.982719 -0.0372109 + 0.931461 1.29292 -1.57181 0.134422 -0.885844 0.444084 + 0.931525 1.27846 -1.59554 0.384723 -0.896589 0.219353 + 0.95154 1.31375 -1.61899 0.641728 -0.736824 -0.212781 + 0.964442 1.32413 -1.62648 0.567989 -0.741769 -0.356607 + 0.966954 1.3028 -1.59418 0.0595751 -0.82353 -0.564136 + 0.924869 1.27115 -1.61975 0.540982 -0.82872 0.143394 + 0.944885 1.30645 -1.6432 0.803033 -0.582996 -0.123504 + 0.967505 1.3371 -1.64616 0.658293 -0.689032 -0.303126 + 0.972093 1.32925 -1.62651 0.337234 -0.790846 -0.510721 + 0.893779 1.26871 -1.61192 -0.098346 -0.873571 0.476656 + 0.906429 1.25446 -1.66273 0.462154 -0.886723 0.0116895 + 0.946496 1.31028 -1.64912 0.802415 -0.579369 -0.143043 + 0.969116 1.34092 -1.65209 0.561264 -0.812192 -0.159142 + 0.975156 1.34222 -1.6462 0.251508 -0.916943 -0.309773 + 0.875339 1.25203 -1.6549 -0.228851 -0.95378 0.194758 + 0.903505 1.25667 -1.6932 0.446769 -0.886119 -0.123247 + 0.943571 1.31249 -1.6796 0.809917 -0.571829 -0.130559 + 0.964555 1.33979 -1.67305 0.586218 -0.807387 -0.0668959 + 0.975047 1.343 -1.65421 0.138191 -0.990111 -0.0241573 + 0.80321 1.31023 -1.65291 -0.783326 -0.588685 0.199623 + 0.854407 1.25904 -1.69102 -0.440659 -0.897492 -0.0181088 + 0.902844 1.26036 -1.73079 0.40965 -0.878652 -0.24527 + 0.933747 1.30773 -1.71638 0.824156 -0.551179 -0.130266 + 0.95473 1.33503 -1.70984 0.621941 -0.775626 -0.107677 + 0.777832 1.37883 -1.62356 -0.930319 -0.211131 0.299885 + 0.792378 1.31083 -1.73172 -0.84136 -0.534063 -0.0830089 + 0.853746 1.26272 -1.72861 -0.369615 -0.928217 -0.0424014 + 0.906507 1.2704 -1.74915 0.423343 -0.821167 -0.382708 + 0.785969 1.473 -1.59462 -0.846604 -0.16432 0.506223 + 0.767001 1.37943 -1.70236 -0.957579 -0.275349 0.0849986 + 0.805334 1.30464 -1.76866 -0.703685 -0.638823 -0.311018 + 0.836232 1.54024 -1.52202 -0.559196 -0.213109 0.801177 + 0.786667 1.5553 -1.557 -0.72738 -0.247653 0.63999 + 0.757383 1.48395 -1.636 -0.930436 -0.203747 0.304592 + 0.917671 1.53559 -1.47976 -0.330372 -0.162615 0.929737 + 0.909642 1.57166 -1.47418 -0.333655 -0.250322 0.908853 + 0.837401 1.59422 -1.50277 -0.534312 -0.213828 0.817795 + 0.787836 1.60928 -1.53775 -0.701103 -0.178686 0.690308 + 0.758081 1.56626 -1.59838 -0.905764 -0.162278 0.391481 + 0.975695 1.53644 -1.46807 0.0978063 -0.0286618 0.994793 + 0.967667 1.5725 -1.4625 0.142435 -0.198551 0.969685 + 0.96191 1.62178 -1.44692 0.143792 -0.300523 0.942873 + 0.921571 1.62542 -1.45391 -0.301745 -0.277767 0.912028 + 0.958812 1.47239 -1.46701 -0.220395 0.0473985 0.974258 + 0.992002 1.49626 -1.47072 0.224827 0.0821256 0.970932 + 1.01241 1.55797 -1.48345 0.517338 0.113537 0.848216 + 0.99954 1.58436 -1.4781 0.580086 -0.0410519 0.81352 + 0.993784 1.63365 -1.46253 0.654745 -0.211883 0.725544 + 0.975596 1.43157 -1.46301 -0.125646 0.0106064 0.992018 + 1.00879 1.45545 -1.46672 0.252986 0.135154 0.957983 + 1.04955 1.45545 -1.48666 0.541948 0.172206 0.82258 + 1.02872 1.5178 -1.48609 0.503214 0.153758 0.850373 + 0.985385 1.40246 -1.46142 -0.126807 0.023592 0.991647 + 1.02388 1.41698 -1.46886 0.34373 0.106926 0.932961 + 1.06464 1.41698 -1.4888 0.587574 0.0937868 0.803717 + 1.10336 1.42596 -1.53069 0.769865 0.0661277 0.634772 + 1.0881 1.47372 -1.5253 0.705216 0.195286 0.681567 + 1.02708 1.35498 -1.46118 0.346921 -0.0640374 0.935706 + 1.01449 1.40147 -1.46196 0.216544 0.182118 0.959136 + 1.06501 1.38033 -1.48959 0.608449 -0.018807 0.79337 + 1.08948 1.37162 -1.51283 0.772983 -0.116767 0.623588 + 1.08911 1.40826 -1.51204 0.750265 0.0419963 0.659803 + 1.03833 1.32715 -1.47631 0.529763 -0.351632 0.77182 + 1.05562 1.36483 -1.48268 0.615018 -0.0358755 0.787697 + 1.06688 1.337 -1.49782 0.708889 -0.282648 0.64621 + 1.09143 1.34996 -1.52572 0.810164 -0.310612 0.497146 + 1.12177 1.38211 -1.56183 0.8468 -0.146448 0.511353 + 1.02621 1.29607 -1.4915 -0.0305767 -0.765769 0.642388 + 1.04665 1.2969 -1.50157 0.535785 -0.689587 0.487242 + 1.01605 1.28833 -1.51252 -0.334495 -0.876337 0.346622 + 1.03297 1.28272 -1.52354 0.194203 -0.97962 0.0512818 + 1.05531 1.2967 -1.54347 0.455162 -0.868409 -0.196707 + 1.06899 1.31088 -1.52149 0.709269 -0.612839 0.348377 + 1.09355 1.32383 -1.54939 0.748358 -0.648722 0.138276 + 0.979928 1.29485 -1.54782 -0.413328 -0.844 0.341795 + 0.996851 1.28924 -1.55885 0.0130213 -0.987396 -0.157735 + 0.99787 1.29022 -1.56055 0.21101 -0.874689 -0.436342 + 1.00113 1.30466 -1.58525 0.193832 -0.827729 -0.526587 + 1.05856 1.31114 -1.56816 0.337129 -0.861516 -0.379649 + 1.00627 1.33112 -1.61759 0.15531 -0.831116 -0.53397 + 1.0743 1.32636 -1.59466 0.262229 -0.894482 -0.36213 + 1.10928 1.33905 -1.57589 0.653786 -0.737074 0.171127 + 1.12372 1.36045 -1.57473 0.840681 -0.361592 0.403122 + 1.01313 1.34151 -1.63528 0.0540003 -0.955113 -0.291278 + 1.08116 1.33676 -1.61236 0.105224 -0.962444 -0.25026 + 1.12029 1.3413 -1.59924 0.546743 -0.824729 0.14455 + 1.13473 1.36269 -1.59807 0.869037 -0.356882 0.342651 + 1.01302 1.3423 -1.6433 -0.0787759 -0.994839 0.0639435 + 1.08388 1.33706 -1.61943 -0.0128107 -0.993122 0.116384 + 1.123 1.3416 -1.60631 0.496762 -0.83345 0.242051 + 1.14358 1.35647 -1.62877 0.844084 -0.425937 0.32573 + 1.13601 1.3998 -1.58048 0.861222 -0.160689 0.482158 + 0.970486 1.34187 -1.67517 0.0973232 -0.99146 0.0868046 + 1.01772 1.33528 -1.66846 -0.181854 -0.956707 0.227246 + 1.08858 1.33004 -1.64459 -0.0611224 -0.950204 0.305576 + 1.13185 1.33538 -1.63701 0.458953 -0.809627 0.365878 + 0.960991 1.33745 -1.70855 0.106363 -0.993829 0.0314786 + 1.00822 1.33085 -1.70182 -0.205089 -0.964112 0.168598 + 1.09911 1.30895 -1.69599 0.000168908 -0.993586 0.11308 + 1.14238 1.31428 -1.68841 0.53171 -0.829166 0.172534 + 0.957626 1.33829 -1.72863 0.22033 -0.861657 -0.457167 + 0.990595 1.33114 -1.72509 -0.136992 -0.88613 -0.442726 + 1.08148 1.30923 -1.71925 0.0157102 -0.955463 -0.294693 + 1.08335 1.31185 -1.72254 -0.0535052 -0.954854 -0.292217 + 0.951365 1.33587 -1.72993 0.680666 -0.684464 -0.261157 + 0.954266 1.34206 -1.73489 0.641603 -0.690388 -0.334229 + 0.960751 1.3446 -1.73259 0.203137 -0.7347 -0.647264 + 0.99372 1.33744 -1.72904 -0.0845932 -0.640538 -0.763253 + 0.995594 1.34006 -1.73234 -0.173426 -0.844825 -0.506155 + 0.93741 1.31778 -1.73474 0.828706 -0.538748 -0.151651 + 0.940311 1.32397 -1.7397 0.825138 -0.555887 -0.100681 + 0.942035 1.32651 -1.74363 0.811014 -0.581756 0.0617797 + 0.95694 1.34591 -1.74022 0.612021 -0.784068 -0.103283 + 0.963425 1.34844 -1.73791 0.140448 -0.919039 -0.368295 + 0.908231 1.27295 -1.75308 0.68021 -0.723059 0.120418 + 0.944279 1.32802 -1.75012 0.77189 -0.60442 0.197136 + 0.959184 1.34741 -1.74669 0.5284 -0.828906 0.183597 + 0.965886 1.35 -1.74384 0.0307256 -0.999527 -0.00144085 + 0.998055 1.34162 -1.73825 -0.217014 -0.957713 -0.188921 + 0.905776 1.26502 -1.76626 0.486282 -0.873507 0.0227194 + 0.941823 1.32009 -1.7633 0.754334 -0.588451 0.291044 + 0.962841 1.34356 -1.76123 0.45567 -0.809372 0.370515 + 0.969543 1.34615 -1.75837 -0.0101898 -0.956427 0.291793 + 1.01234 1.33979 -1.75085 -0.198914 -0.978947 0.0457937 + 0.866702 1.25654 -1.76555 -0.179958 -0.967861 -0.175672 + 0.873374 1.26773 -1.7878 -0.171095 -0.797875 -0.578033 + 0.912448 1.27623 -1.78851 0.481969 -0.849188 -0.215839 + 0.94631 1.31106 -1.78594 0.741521 -0.652515 0.156112 + 0.967328 1.33454 -1.78386 0.495941 -0.83553 0.2365 + 0.79685 1.32324 -1.78111 -0.790395 -0.426187 -0.440045 + 0.86489 1.28634 -1.80025 -0.354786 -0.651905 -0.670184 + 0.918915 1.28339 -1.80822 0.379433 -0.805714 -0.454814 + 0.952777 1.31823 -1.80566 0.666774 -0.741382 -0.0759342 + 0.76183 1.39164 -1.74576 -0.947077 -0.179023 -0.266452 + 0.814222 1.33839 -1.80653 -0.64372 -0.302701 -0.702848 + 0.864718 1.29753 -1.81167 -0.346094 -0.613928 -0.709444 + 0.918743 1.29457 -1.81965 0.224238 -0.692603 -0.685579 + 0.752212 1.49618 -1.6794 -0.995593 -0.0876368 0.033378 + 0.753606 1.5029 -1.71989 -0.961439 0.0233884 -0.27402 + 0.779201 1.40679 -1.77117 -0.832177 -0.0421317 -0.552907 + 0.829046 1.35425 -1.82431 -0.571572 -0.223133 -0.789631 + 0.879542 1.31338 -1.82945 -0.258196 -0.505559 -0.823253 + 0.74596 1.57993 -1.63403 -0.990521 -0.0607009 0.123224 + 0.747354 1.58665 -1.67453 -0.978295 0.0855167 -0.188749 + 0.770913 1.51923 -1.75069 -0.859402 0.0941858 -0.502551 + 0.796508 1.42312 -1.80198 -0.742 0.0132376 -0.670269 + 0.851056 1.36611 -1.83951 -0.444579 -0.16388 -0.880621 + 0.750401 1.64607 -1.60312 -0.990187 -0.00110638 0.139745 + 0.752199 1.66051 -1.6355 -0.975527 0.141205 -0.168546 + 0.76879 1.67356 -1.67546 -0.878867 0.253999 -0.403828 + 0.763945 1.5997 -1.71449 -0.884763 0.196587 -0.422549 + 0.762522 1.6324 -1.56747 -0.887756 -0.122147 0.443812 + 0.754476 1.71575 -1.57263 -0.984377 -0.0015908 0.176066 + 0.756274 1.73021 -1.60501 -0.980692 0.114585 -0.158469 + 0.791203 1.67569 -1.51711 -0.541301 -0.153592 0.826682 + 0.765889 1.69882 -1.54682 -0.859758 -0.0853924 0.503511 + 0.758561 1.78796 -1.55009 -0.982815 0.0079859 0.184422 + 0.818692 1.67483 -1.51004 -0.258377 0.0298413 0.965583 + 0.79282 1.75793 -1.50947 -0.467429 -0.178363 0.86585 + 0.769974 1.77104 -1.52429 -0.796549 -0.132821 0.589804 + 0.849331 1.64797 -1.4825 -0.590317 -0.0861354 0.802562 + 0.832232 1.66576 -1.50159 -0.23267 0.674029 0.701106 + 0.856572 1.70761 -1.52333 0.21422 0.202849 0.955491 + 0.84636 1.76001 -1.5058 0.351995 -0.201517 0.914051 + 0.820309 1.75707 -1.50241 -0.0505897 -0.183514 0.981714 + 0.924839 1.70033 -1.42998 -0.396303 -0.26986 0.877564 + 0.89595 1.71482 -1.44879 -0.662965 -0.0660972 0.745727 + 0.878852 1.73262 -1.46788 -0.912664 0.153712 0.378705 + 0.870112 1.69854 -1.51488 -0.575398 0.769583 0.276873 + 0.884407 1.72657 -1.53545 0.16572 0.351825 0.921279 + 0.965178 1.6967 -1.42299 0.0971641 -0.366115 0.925483 + 0.962515 1.76197 -1.39159 0.0494668 -0.456948 0.888117 + 0.940631 1.76602 -1.39685 -0.45406 -0.382372 0.804749 + 0.911742 1.78053 -1.41565 -0.702718 -0.271822 0.657495 + 0.986358 1.70191 -1.42978 0.60395 -0.293491 0.741018 + 0.983694 1.76718 -1.39836 0.632074 -0.331551 0.700397 + 0.977586 1.82251 -1.36353 0.632742 -0.390931 0.668439 + 0.962017 1.81868 -1.35854 0.0486928 -0.536832 0.842283 + 0.940133 1.82274 -1.3638 -0.475986 -0.476836 0.738962 + 1.01744 1.65185 -1.48818 0.82055 -0.083874 0.565388 + 1.01002 1.72012 -1.45543 0.90937 -0.0896113 0.406221 + 0.995673 1.77835 -1.41304 0.915394 -0.101612 0.389524 + 1.03451 1.61165 -1.51412 0.752299 0.0800696 0.653938 + 1.04836 1.68864 -1.53604 0.907406 0.138091 0.396919 + 1.01623 1.74048 -1.4822 0.956033 0.113264 0.270504 + 1.00188 1.79872 -1.4398 0.984819 0.0772673 0.155437 + 1.04738 1.58525 -1.51946 0.706893 0.198983 0.678754 + 1.06543 1.64843 -1.56198 0.834485 0.137703 0.533547 + 1.04813 1.70852 -1.55514 0.845394 0.424976 0.323581 + 1.01599 1.76034 -1.50129 0.901143 0.432403 -0.031131 + 1.00151 1.80988 -1.45507 0.932042 0.33166 -0.145943 + 1.06727 1.53607 -1.52473 0.708083 0.225767 0.669065 + 1.08274 1.6196 -1.57935 0.802613 0.210258 0.558215 + 1.10264 1.57041 -1.58462 0.770191 0.26683 0.579316 + 1.1061 1.64277 -1.62382 0.850943 0.239853 0.467297 + 1.08878 1.67161 -1.60646 0.851207 0.17636 0.494311 + 1.06948 1.72195 -1.58796 0.804773 0.154899 0.573015 + 1.05153 1.72021 -1.57018 0.653806 0.253555 0.712915 + 1.1312 1.49015 -1.58202 0.766807 0.236065 0.596892 + 1.15929 1.49629 -1.62432 0.888797 0.159086 0.429804 + 1.13073 1.57656 -1.62691 0.822449 0.302319 0.481851 + 1.14646 1.44239 -1.58743 0.863653 0.0225176 0.503583 + 1.16822 1.44519 -1.65465 0.974154 -0.0688945 0.215121 + 1.17284 1.51873 -1.66879 0.944891 0.177707 0.274956 + 1.16836 1.5483 -1.68293 0.926131 0.321747 0.196877 + 1.12625 1.60613 -1.64105 0.867512 0.311741 0.387608 + 1.15087 1.38488 -1.61849 0.892281 -0.270739 0.361296 + 1.16132 1.42747 -1.62544 0.953786 -0.0460698 0.296934 + 1.16281 1.36629 -1.68276 0.955738 -0.252189 0.151544 + 1.16971 1.38401 -1.71198 0.985208 -0.168634 -0.030454 + 1.16897 1.41515 -1.74191 0.97297 -0.133001 -0.188784 + 1.18177 1.46764 -1.69911 0.995487 -0.083494 0.0451023 + 1.17501 1.53132 -1.71119 0.956087 0.246035 -0.15926 + 1.15551 1.33786 -1.69304 0.921014 -0.380675 0.0825778 + 1.15435 1.34214 -1.73898 0.867569 -0.408862 -0.283118 + 1.1536 1.37329 -1.7689 0.806537 -0.338132 -0.484938 + 1.14166 1.3961 -1.79896 0.716646 -0.309902 -0.624803 + 1.16209 1.43471 -1.77781 0.894252 -0.0437264 -0.445423 + 1.14122 1.31857 -1.73434 0.537613 -0.77381 -0.33495 + 1.12081 1.34121 -1.76961 0.351543 -0.678879 -0.644625 + 1.10887 1.36402 -1.79966 0.451306 -0.65054 -0.610836 + 1.12082 1.41464 -1.82495 0.716457 -0.19234 -0.670593 + 1.14125 1.45325 -1.8038 0.776066 0.0901003 -0.624182 + 1.09764 1.31002 -1.73515 -0.00304124 -0.960758 -0.277372 + 1.07722 1.33266 -1.77041 0.0673833 -0.886457 -0.457879 + 1.06411 1.34048 -1.79374 0.184022 -0.869776 -0.457848 + 1.06981 1.35429 -1.81241 0.260993 -0.787811 -0.557886 + 1.09939 1.39036 -1.83797 0.587326 -0.491057 -0.643359 + 1.01752 1.33057 -1.77356 -0.0327945 -0.998722 0.0384657 + 1.00441 1.33839 -1.79689 0.0841538 -0.910443 -0.404983 + 1.01555 1.35052 -1.81807 0.106838 -0.847384 -0.520121 + 1.02125 1.36435 -1.83674 0.116995 -0.785207 -0.60808 + 1.06033 1.38065 -1.85071 0.264508 -0.734201 -0.625288 + 0.974722 1.33694 -1.78108 0.0378411 -0.981341 0.188514 + 0.98251 1.3384 -1.80245 0.194066 -0.954064 -0.228256 + 0.993649 1.35055 -1.82362 0.225469 -0.841464 -0.491021 + 0.99208 1.36275 -1.84143 0.224675 -0.731475 -0.64379 + 0.996414 1.38162 -1.86005 0.114721 -0.768803 -0.629111 + 0.975116 1.33601 -1.80524 0.504604 -0.860644 -0.0683099 + 0.985499 1.34774 -1.8249 0.414596 -0.790654 -0.450529 + 0.98393 1.35994 -1.8427 0.31843 -0.674411 -0.666162 + 0.967246 1.38002 -1.86474 0.122181 -0.64373 -0.755436 + 0.988765 1.39406 -1.87874 -0.00797693 -0.589412 -0.807793 + 0.963161 1.32996 -1.82532 0.533264 -0.708512 -0.462212 + 0.960586 1.34898 -1.84185 0.343788 -0.601851 -0.720822 + 0.943902 1.36906 -1.86388 0.0775461 -0.468257 -0.880183 + 0.935798 1.39002 -1.87222 -0.179161 0.289045 -0.940401 + 0.916168 1.3136 -1.83618 0.0631166 -0.548984 -0.833447 + 0.91712 1.35833 -1.85396 -0.174175 -0.385521 -0.906111 + 0.909016 1.37928 -1.86229 -0.235678 -0.29067 -0.927344 + 0.879577 1.38728 -1.85458 -0.356619 0.0186646 -0.934063 + 0.977897 1.39575 -1.87826 -0.162868 -0.130107 -0.978032 + 0.880494 1.35811 -1.84722 -0.260736 -0.32044 -0.910678 + 0.818518 1.43499 -1.81718 -0.53672 0.102321 -0.837533 + 0.905572 1.40079 -1.86012 -0.28874 0.137098 -0.947541 + 0.803685 1.53284 -1.79816 -0.635609 0.163136 -0.754578 + 0.86351 1.54431 -1.82219 -0.276032 0.278569 -0.919894 + 0.878343 1.44646 -1.8412 -0.332643 0.155606 -0.930126 + 0.905215 1.41419 -1.85732 -0.321859 0.203044 -0.924759 + 0.796717 1.61331 -1.76195 -0.639976 0.338044 -0.690042 + 0.860608 1.62202 -1.78844 -0.25166 0.441123 -0.861439 + 0.964636 1.5442 -1.83363 -0.0582802 0.404076 -0.912867 + 0.9756 1.49514 -1.85648 -0.131803 0.335862 -0.932644 + 1.00247 1.46289 -1.8726 -0.190298 0.414101 -0.890116 + 0.798428 1.69134 -1.71503 -0.636144 0.392341 -0.664371 + 0.862319 1.70005 -1.74151 -0.24999 0.501494 -0.828257 + 0.961734 1.6219 -1.79988 -0.00855115 0.473337 -0.88084 + 1.03632 1.56513 -1.82489 0.26045 0.469349 -0.843728 + 1.04729 1.51607 -1.84774 0.24433 0.475268 -0.845235 + 0.766351 1.73233 -1.63718 -0.897547 0.206641 -0.389499 + 0.795989 1.7501 -1.67675 -0.765693 0.326224 -0.55434 + 0.805752 1.77556 -1.67281 -0.333036 0.580864 -0.742754 + 0.769426 1.80185 -1.60854 -0.85964 0.279734 -0.427514 + 0.779188 1.82732 -1.60459 -0.698909 0.455559 -0.551355 + 0.805421 1.83416 -1.62143 -0.203184 0.643701 -0.737811 + 0.827982 1.82389 -1.62545 0.262275 0.564566 -0.782609 + 0.828313 1.76528 -1.67683 0.209881 0.771557 -0.600541 + 0.759348 1.79972 -1.57636 -0.980372 0.136129 -0.142617 + 0.765688 1.86275 -1.54751 -0.95088 0.246581 -0.187147 + 0.777499 1.87088 -1.56637 -0.730178 0.446996 -0.516753 + 0.803731 1.87773 -1.5832 -0.368998 0.576876 -0.728735 + 0.764901 1.85098 -1.52125 -0.973073 0.0188829 0.229721 + 0.774462 1.90805 -1.49188 -0.973258 0.0249355 0.228355 + 0.77504 1.9167 -1.51119 -0.947347 0.270956 -0.170635 + 0.786851 1.92484 -1.53005 -0.711056 0.476532 -0.517027 + 0.774543 1.8401 -1.50329 -0.790856 -0.158585 0.591098 + 0.784104 1.89718 -1.47393 -0.785578 -0.20298 0.584522 + 0.789559 1.94929 -1.44557 -0.797212 -0.245721 0.55143 + 0.782274 1.95751 -1.45914 -0.975601 -0.00475762 0.219498 + 0.782852 1.96615 -1.47846 -0.944843 0.275386 -0.177298 + 0.797389 1.827 -1.48848 -0.458213 -0.274597 0.845362 + 0.800897 1.88754 -1.46304 -0.472918 -0.349431 0.808855 + 0.806352 1.93965 -1.43468 -0.475561 -0.412114 0.777177 + 0.818764 1.82256 -1.48349 -0.0645829 -0.326339 0.943044 + 0.822272 1.88311 -1.45804 -0.0592591 -0.417456 0.906763 + 0.8225 1.93631 -1.43091 -0.0673611 -0.486741 0.870945 + 0.824935 1.98148 -1.40299 -0.0595168 -0.479643 0.875443 + 0.808788 1.98483 -1.40677 -0.478088 -0.401238 0.781306 + 0.844815 1.82551 -1.48689 0.368747 -0.302957 0.878774 + 0.841422 1.88527 -1.46055 0.369227 -0.39024 0.843436 + 0.84165 1.93848 -1.43341 0.378912 -0.454753 0.805993 + 0.840044 1.98319 -1.40497 0.370029 -0.44517 0.815415 + 0.82469 2.01045 -1.38907 -0.0618344 -0.16525 0.984311 + 0.8628 1.83228 -1.49721 0.69882 -0.193724 0.688565 + 0.859408 1.89205 -1.47086 0.719024 -0.273931 0.638722 + 0.855242 1.94359 -1.44121 0.718737 -0.328703 0.612676 + 0.853636 1.98831 -1.41276 0.719534 -0.311942 0.620453 + 0.874195 1.77897 -1.51791 0.676469 -0.125144 0.725761 + 0.877897 1.84482 -1.5174 0.939806 0.00209016 0.341701 + 0.870505 1.90126 -1.4857 0.947571 -0.0761223 0.310346 + 0.86634 1.95281 -1.45605 0.952866 -0.103574 0.285165 + 0.862391 1.99558 -1.42447 0.946617 -0.0891164 0.309796 + 0.889292 1.79151 -1.53811 0.884927 0.139111 0.444469 + 0.879305 1.85613 -1.5382 0.975399 0.206905 -0.0760704 + 0.871914 1.91258 -1.5065 0.980783 0.170718 -0.0944488 + 0.867404 1.96136 -1.47176 0.982856 0.158859 -0.0935781 + 0.863455 2.00413 -1.44018 0.978324 0.192191 -0.0771038 + 0.913283 1.74562 -1.54745 0.224599 0.679926 0.698037 + 0.91404 1.75833 -1.57116 0.444114 0.870108 0.213715 + 0.890048 1.80422 -1.56183 0.936161 0.350899 -0.0217378 + 0.867427 1.86948 -1.56556 0.823437 0.37336 -0.427263 + 0.863182 1.92239 -1.52662 0.831641 0.370929 -0.413261 + 0.894918 1.72132 -1.52531 -0.588939 0.801163 0.106246 + 0.923794 1.74036 -1.53732 -0.38094 0.924197 -0.0272937 + 0.952938 1.74542 -1.54417 -0.00632487 0.993386 -0.114652 + 0.903651 1.76204 -1.48842 -0.702699 0.533287 -0.470976 + 0.925882 1.77462 -1.50761 -0.514275 0.588201 -0.624133 + 0.955026 1.77968 -1.51447 -0.0257015 0.676512 -0.735984 + 0.878845 1.73927 -1.47799 -0.907971 0.386447 -0.162008 + 0.899087 1.79644 -1.43839 -0.935934 0.318857 -0.149525 + 0.908816 1.80483 -1.45121 -0.777495 0.459167 -0.42973 + 0.931047 1.81741 -1.4704 -0.516242 0.596004 -0.61504 + 0.899094 1.78978 -1.42827 -0.925104 -0.0390471 0.3777 + 0.906243 1.84754 -1.39768 -0.951968 0.259491 -0.162547 + 0.915972 1.85595 -1.4105 -0.7745 0.461961 -0.432136 + 0.906249 1.84265 -1.39025 -0.942177 -0.120717 0.312617 + 0.911958 1.89358 -1.35878 -0.950611 0.262794 -0.165158 + 0.919284 1.89993 -1.36844 -0.773901 0.477597 -0.415907 + 0.932314 1.86519 -1.42462 -0.525027 0.602043 -0.601574 + 0.918897 1.8334 -1.37762 -0.707853 -0.371746 0.600623 + 0.911964 1.88869 -1.35134 -0.943951 -0.153564 0.292189 + 0.915968 1.93204 -1.31999 -0.95007 0.28164 -0.134336 + 0.923294 1.9384 -1.32966 -0.767422 0.509113 -0.389702 + 0.935626 1.90917 -1.38255 -0.51493 0.630635 -0.580643 + 0.942731 1.87105 -1.32796 -0.470611 -0.536769 0.700289 + 0.921495 1.8817 -1.34177 -0.713131 -0.417184 0.563385 + 0.915973 1.92818 -1.31413 -0.9417 -0.13543 0.307993 + 0.921242 1.95604 -1.29783 -0.888689 0.45838 0.0109117 + 0.926466 1.96057 -1.30472 -0.729134 0.636521 -0.251405 + 0.959263 1.86798 -1.32398 0.0407104 -0.60349 0.79633 + 0.942258 1.91278 -1.29366 -0.474826 -0.529396 0.703051 + 0.925505 1.92119 -1.30457 -0.708821 -0.410939 0.573326 + 0.921247 1.95218 -1.29197 -0.87881 0.0971644 0.467175 + 0.974832 1.87181 -1.32896 0.641662 -0.441204 0.627383 + 0.971073 1.91275 -1.29362 0.629866 -0.437903 0.641489 + 0.95879 1.90972 -1.28968 0.0502157 -0.596327 0.801169 + 0.983883 1.88026 -1.34004 0.927611 -0.177112 0.32889 + 0.980124 1.92119 -1.3047 0.926811 -0.161075 0.339229 + 0.975262 1.94566 -1.28323 0.861922 0.0563042 0.503905 + 0.968843 1.93965 -1.27537 0.593637 -0.156446 0.78938 + 0.956559 1.93662 -1.27144 0.0317551 -0.296395 0.954537 + 0.989565 1.83369 -1.3782 0.927127 -0.141926 0.346831 + 0.988447 1.89522 -1.35972 0.993572 0.019941 0.111432 + 0.983726 1.933 -1.32021 0.990768 0.035094 0.130949 + 0.978864 1.95746 -1.29875 0.932867 0.239561 0.269015 + 0.994129 1.84866 -1.39787 0.991489 0.0328007 0.12599 + 0.988169 1.90367 -1.37124 0.9366 0.300031 -0.181001 + 0.983448 1.94144 -1.33175 0.932314 0.326099 -0.156365 + 0.978738 1.9634 -1.30719 0.874662 0.484722 -0.00345886 + 0.993755 1.85983 -1.41314 0.936184 0.299037 -0.184759 + 0.982981 1.90748 -1.37727 0.62084 0.594711 -0.510761 + 0.979354 1.94445 -1.3365 0.620038 0.623844 -0.475785 + 0.974644 1.9664 -1.31195 0.572848 0.746418 -0.338683 + 0.988567 1.86364 -1.41917 0.628031 0.57067 -0.529069 + 0.971735 1.91015 -1.38211 0.330232 0.696066 -0.637526 + 0.968108 1.94712 -1.34135 0.322806 0.729585 -0.602911 + 0.966579 1.96839 -1.31515 0.302928 0.828847 -0.470369 + 0.969805 1.9715 -1.30236 0.434397 0.899283 -0.0508902 + 0.994451 1.81507 -1.46328 0.618416 0.597983 -0.50988 + 0.979564 1.81863 -1.46965 0.323729 0.665091 -0.672943 + 0.97368 1.8672 -1.42555 0.331487 0.667147 -0.667107 + 0.95189 1.91233 -1.3868 -0.0400755 0.730379 -0.681865 + 0.952452 1.94884 -1.34504 -0.0328945 0.763208 -0.645315 + 1.00893 1.76552 -1.50949 0.509336 0.67916 -0.528506 + 0.982022 1.77671 -1.5081 0.240849 0.671748 -0.700533 + 0.952568 1.8216 -1.47601 -0.040789 0.682803 -0.729463 + 0.953835 1.86938 -1.43022 -0.031336 0.700593 -0.712873 + 1.01475 1.72657 -1.54594 0.392391 0.91356 -0.106943 + 0.987834 1.73775 -1.54454 0.313461 0.941122 -0.126613 + 1.01815 1.73827 -1.56097 0.333278 0.293653 0.895932 + 0.988572 1.74562 -1.55695 0.176454 0.371544 0.911492 + 1.0327 1.79865 -1.56084 0.604262 -0.0691682 0.793778 + 1.01567 1.7933 -1.55082 0.325016 -0.171933 0.929948 + 0.986097 1.80064 -1.54679 -0.0383162 -0.199551 0.979138 + 0.953676 1.75329 -1.55657 -0.141179 0.479831 0.865928 + 1.05065 1.80039 -1.57863 0.823027 0.076056 0.562887 + 1.02393 1.86315 -1.54429 0.670406 -0.146151 0.727458 + 1.0069 1.85779 -1.53428 0.33041 -0.252079 0.909552 + 0.98619 1.85613 -1.53234 -0.0360483 -0.296041 0.954495 + 0.955781 1.8022 -1.55238 -0.367072 -0.147251 0.918464 + 1.05823 1.80894 -1.59774 0.943709 0.18023 0.277363 + 1.04226 1.87778 -1.57615 0.957066 0.075958 0.279741 + 1.03468 1.86924 -1.55703 0.863438 -0.0279794 0.503678 + 1.01649 1.92288 -1.51957 0.68078 -0.233348 0.694325 + 1.08344 1.73643 -1.6203 0.922525 0.23309 0.307599 + 1.08388 1.74579 -1.64166 0.9155 0.365741 -0.167607 + 1.05867 1.81829 -1.61909 0.962981 0.269164 0.0147819 + 1.0442 1.88418 -1.5904 0.982566 0.183879 0.0274396 + 1.03281 1.93526 -1.54636 0.966128 0.0083907 0.257928 + 1.10274 1.68609 -1.6388 0.928477 0.285324 0.237742 + 1.10032 1.68885 -1.67007 0.844187 0.489356 -0.218812 + 1.06756 1.75407 -1.66038 0.735995 0.409781 -0.53888 + 1.05554 1.82437 -1.63257 0.854704 0.351647 -0.381871 + 1.04108 1.89025 -1.60387 0.87975 0.337209 -0.335155 + 1.12121 1.65122 -1.66364 0.905436 0.387623 0.173016 + 1.11879 1.65398 -1.69492 0.765653 0.540044 -0.349468 + 1.084 1.69714 -1.68879 0.660941 0.508547 -0.551849 + 1.04663 1.76377 -1.67854 0.640029 0.411969 -0.648571 + 1.14137 1.61459 -1.68087 0.896607 0.422757 0.131803 + 1.14801 1.59761 -1.70914 0.845088 0.449594 -0.289295 + 1.12827 1.60294 -1.7296 0.628582 0.502555 -0.593568 + 1.09857 1.6381 -1.72614 0.558262 0.535911 -0.633358 + 1.15283 1.53819 -1.75413 0.793974 0.346618 -0.499462 + 1.13309 1.54353 -1.7746 0.585097 0.46513 -0.664316 + 1.10532 1.53438 -1.79755 0.488058 0.479183 -0.729509 + 1.10805 1.58706 -1.76083 0.578885 0.469159 -0.66692 + 1.0696 1.63577 -1.75368 0.52483 0.515647 -0.677246 + 1.17489 1.48719 -1.73501 0.946845 0.0903226 -0.30875 + 1.15272 1.49406 -1.77795 0.81882 0.196125 -0.539507 + 1.12311 1.49763 -1.80977 0.610504 0.350364 -0.710303 + 1.11164 1.45681 -1.83562 0.647869 0.179895 -0.740205 + 1.09534 1.48847 -1.83271 0.513726 0.392367 -0.762977 + 1.07225 1.49111 -1.84717 0.507356 0.398034 -0.764303 + 1.0753 1.52508 -1.82485 0.489936 0.46432 -0.737814 + 1.07804 1.57775 -1.78813 0.494471 0.485232 -0.721144 + 1.09737 1.43149 -1.85176 0.629567 0.0139265 -0.776821 + 1.06557 1.4637 -1.86328 0.52843 0.279584 -0.80162 + 1.04247 1.46635 -1.87773 0.193359 0.303913 -0.932871 + 1.04423 1.48211 -1.87005 0.177522 0.470682 -0.86426 + 1.07593 1.40723 -1.86478 0.535037 -0.298819 -0.790217 + 1.05129 1.43838 -1.87943 0.321225 0.11378 -0.940143 + 1.00071 1.44711 -1.88027 -0.182705 0.30798 -0.933685 + 1.05268 1.39308 -1.8694 0.307762 -0.665634 -0.679863 + 1.05412 1.41394 -1.88015 0.38233 -0.112089 -0.917202 + 1.00389 1.40927 -1.88379 -0.0913485 -0.0431159 -0.994885 + 1.00107 1.43371 -1.88308 -0.108481 0.116047 -0.987302 + 1.03086 1.39979 -1.88477 0.114306 -0.409271 -0.905225 + 1.02788 1.62315 -1.79044 0.301681 0.519481 -0.799455 + 1.01937 1.70534 -1.74027 0.356645 0.504052 -0.786597 + 1.05503 1.69481 -1.71634 0.578423 0.494647 -0.648654 + 0.95322 1.70409 -1.74971 -0.00172616 0.500178 -0.865921 + 0.965472 1.76805 -1.71504 0.0389043 0.468356 -0.882683 + 1.01097 1.77429 -1.70247 0.388503 0.449961 -0.804115 + 0.874571 1.76401 -1.70684 -0.215765 0.50595 -0.835141 + 0.96322 1.83567 -1.68111 -0.0164933 0.516224 -0.856295 + 1.00872 1.84191 -1.66855 0.387605 0.458023 -0.799986 + 1.03461 1.83407 -1.65072 0.649079 0.390356 -0.652931 + 0.861683 1.78372 -1.68945 -0.597936 0.623598 -0.503586 + 0.950332 1.85538 -1.66374 -0.317726 0.610017 -0.725899 + 0.975267 1.90391 -1.6352 -0.208535 0.561856 -0.800519 + 1.0025 1.90419 -1.63537 0.298996 0.514333 -0.803781 + 1.02839 1.89634 -1.61754 0.674428 0.430963 -0.599515 + 0.844417 1.76425 -1.68043 -0.452432 0.794534 -0.404995 + 0.913921 1.84691 -1.6455 -0.614085 0.644286 -0.455846 + 0.938856 1.89544 -1.61696 -0.542202 0.550342 -0.634933 + 0.859869 1.76859 -1.6341 0.445026 0.793956 -0.41423 + 0.875973 1.76755 -1.63771 -0.527664 0.752669 0.393777 + 0.893836 1.82196 -1.6254 -0.896356 0.299268 0.327085 + 0.896655 1.82743 -1.63648 -0.824761 0.562959 -0.0533535 + 0.921707 1.88933 -1.60415 -0.823308 0.447233 -0.349494 + 0.853077 1.821 -1.61849 0.512321 0.398105 -0.760947 + 0.87817 1.81756 -1.5892 0.818018 0.351029 -0.455659 + 0.884962 1.76516 -1.6048 0.466176 0.828904 -0.309189 + 0.896729 1.76634 -1.60699 -0.550414 0.680166 0.484168 + 0.82617 1.87946 -1.58753 0.0376388 0.588746 -0.807441 + 0.851265 1.87658 -1.58058 0.511033 0.515434 -0.687876 + 0.828572 1.93161 -1.54674 0.0456439 0.622702 -0.781127 + 0.84702 1.92949 -1.54163 0.501914 0.544805 -0.671766 + 0.806134 1.92987 -1.54242 -0.381639 0.587692 -0.713421 + 0.811053 1.97734 -1.50506 -0.37163 0.616737 -0.693921 + 0.828013 1.97864 -1.50834 0.0387334 0.652557 -0.756749 + 0.84646 1.97652 -1.50322 0.504421 0.566935 -0.651264 + 0.858672 1.97117 -1.49188 0.825376 0.387123 -0.410963 + 0.79177 1.97231 -1.49268 -0.712301 0.491453 -0.501101 + 0.797628 2.01363 -1.45839 -0.700366 0.532269 -0.475582 + 0.812841 2.01759 -1.46816 -0.372757 0.654729 -0.657558 + 0.829801 2.0189 -1.47144 0.045444 0.692976 -0.719527 + 0.844355 2.01723 -1.4674 0.493983 0.609319 -0.620251 + 0.78871 2.00747 -1.44416 -0.942371 0.300011 -0.148091 + 0.801572 2.03748 -1.43537 -0.64767 0.688258 -0.32684 + 0.816785 2.04146 -1.44513 -0.326553 0.793927 -0.512877 + 0.828873 2.04234 -1.44754 0.0308448 0.823181 -0.566941 + 0.788254 2.00064 -1.42894 -0.972322 0.0246197 0.232345 + 0.795223 2.03311 -1.42523 -0.855234 0.517342 -0.0305192 + 0.809004 2.04415 -1.42744 -0.459798 0.881304 -0.109035 + 0.817901 2.04647 -1.43316 -0.259383 0.937276 -0.232882 + 0.829989 2.04737 -1.43556 0.0498086 0.96876 -0.242947 + 0.795539 1.99244 -1.41536 -0.787446 -0.233218 0.570559 + 0.794767 2.02627 -1.40999 -0.883441 0.280727 0.375132 + 0.802389 2.03578 -1.4084 -0.586227 0.657626 0.473145 + 0.802656 2.03978 -1.4173 -0.609266 0.770668 0.186721 + 0.813198 2.01283 -1.39175 -0.406642 -0.104597 0.90758 + 0.799949 2.02044 -1.40034 -0.713163 0.0680816 0.697684 + 0.807571 2.02994 -1.39874 -0.452224 0.47853 0.752663 + 0.813367 2.04193 -1.40993 -0.224276 0.858176 0.461773 + 0.813634 2.04593 -1.41883 -0.252492 0.939872 0.229973 + 0.826811 2.02311 -1.39104 -0.0227871 0.272833 0.961792 + 0.815319 2.0255 -1.39372 -0.278669 0.332357 0.901045 + 0.817687 2.0367 -1.40026 -0.17387 0.738249 0.651734 + 0.819485 2.04025 -1.40646 0.00673967 0.884454 0.466579 + 0.831042 2.04727 -1.42219 0.0951323 0.973182 0.209445 + 0.835646 2.02411 -1.39219 0.227234 0.297828 0.92718 + 0.825435 2.03225 -1.39523 -0.0522344 0.571525 0.818921 + 0.83427 2.03325 -1.39638 0.170607 0.635874 0.7527 + 0.83939 2.03751 -1.40323 0.261961 0.77336 0.577314 + 0.839799 2.01216 -1.39104 0.346306 -0.12512 0.929741 + 0.849475 2.0158 -1.3966 0.653227 -0.0182164 0.756943 + 0.845322 2.02775 -1.39775 0.484766 0.411856 0.771606 + 0.85823 2.02307 -1.40831 0.880558 0.187929 0.435087 + 0.850442 2.032 -1.4046 0.6102 0.563452 0.556936 + 0.858992 2.02914 -1.41954 0.910346 0.407234 0.0736904 + 0.851204 2.03807 -1.41583 0.640972 0.726727 0.247025 + 0.841188 2.04106 -1.40945 0.311558 0.836697 0.45041 + 0.837159 2.04559 -1.41873 0.214142 0.939507 0.26734 + 0.852103 2.03688 -1.43541 0.7541 0.607915 -0.24854 + 0.847176 2.0426 -1.42511 0.551476 0.833615 0.0309872 + 0.856566 2.01188 -1.45606 0.825309 0.417335 -0.38039 + 0.843427 2.04067 -1.44351 0.465508 0.753491 -0.464277 + 0.8385 2.04639 -1.43321 0.312172 0.937369 -0.154554 + 0.822531 2.04825 -1.42455 -0.0694684 0.992306 0.102483 + 0.925807 1.75951 -1.57334 -0.411299 0.597867 0.688032 + 0.927912 1.80841 -1.56914 -0.726434 -0.0335528 0.686417 + 0.914592 1.82073 -1.59468 -0.849276 0.0526088 0.525322 + 0.955874 1.85768 -1.53792 -0.411358 -0.254141 0.875327 + 0.936802 1.86374 -1.55152 -0.772608 -0.123482 0.622759 + 0.923481 1.87607 -1.57706 -0.918817 0.0106625 0.394539 + 0.918888 1.88385 -1.59307 -0.970753 0.209136 0.117899 + 0.983264 1.91729 -1.51026 -0.0385597 -0.374533 0.926412 + 0.96098 1.91842 -1.51437 -0.409665 -0.333792 0.848975 + 0.941907 1.9245 -1.52797 -0.783661 -0.194019 0.590112 + 0.932115 1.93356 -1.54674 -0.936473 -0.062891 0.345054 + 0.927522 1.94134 -1.56276 -0.992672 0.104155 0.0612658 + 1.00397 1.91895 -1.51221 0.346889 -0.336199 0.875579 + 0.999619 1.97261 -1.48749 0.344914 -0.403702 0.847384 + 0.984005 1.97135 -1.48604 -0.0315257 -0.444023 0.895461 + 0.96172 1.97249 -1.49016 -0.416772 -0.39788 0.817308 + 0.947307 1.97706 -1.50044 -0.781325 -0.248361 0.57258 + 1.01214 1.97655 -1.49485 0.686758 -0.286408 0.668082 + 1.00749 2.02171 -1.46826 0.680776 -0.273483 0.679523 + 0.997615 2.0186 -1.46245 0.347852 -0.391195 0.852036 + 0.982001 2.01733 -1.46101 -0.0372974 -0.434504 0.899897 + 1.0203 1.98114 -1.50452 0.877327 -0.151467 0.455362 + 1.01565 2.02629 -1.47792 0.875941 -0.130227 0.464509 + 1.00985 2.05379 -1.4624 0.810516 0.146105 0.567201 + 1.00404 2.05053 -1.45548 0.635856 0.0333121 0.771089 + 0.994161 2.04743 -1.44967 0.306196 -0.0730943 0.949158 + 1.02724 1.92897 -1.53232 0.875826 -0.108865 0.470189 + 1.02586 1.98743 -1.51856 0.969797 -0.0168192 0.243333 + 1.02004 2.03125 -1.48901 0.965931 0.00602489 0.258728 + 1.01424 2.05876 -1.47348 0.896998 0.265072 0.353739 + 1.02733 1.99224 -1.52935 0.991211 0.1318 0.0113461 + 1.02151 2.03608 -1.49979 0.98602 0.164408 0.0271031 + 1.01517 2.06224 -1.48085 0.908245 0.392535 0.144937 + 1.0074 2.07084 -1.47634 0.60545 0.731745 0.313018 + 1.00647 2.06735 -1.46898 0.589432 0.661352 0.463879 + 1.03476 1.94165 -1.56062 0.989212 0.145646 0.015722 + 1.02503 1.99671 -1.53925 0.881103 0.341627 -0.32703 + 1.01969 2.03959 -1.5076 0.87834 0.3744 -0.297227 + 1.01336 2.06577 -1.48866 0.805969 0.568291 -0.165708 + 1.00634 2.0729 -1.48091 0.568049 0.818645 0.0845042 + 1.03246 1.94612 -1.57052 0.884622 0.332104 -0.327339 + 1.01545 2.00132 -1.54956 0.671293 0.478968 -0.565645 + 1.01011 2.04419 -1.51791 0.662039 0.520592 -0.539155 + 1.00661 2.06898 -1.49627 0.617417 0.681319 -0.393193 + 1.01978 1.9522 -1.58419 0.672125 0.459333 -0.580742 + 0.99642 2.00708 -1.56267 0.296671 0.590118 -0.750831 + 0.995099 2.04874 -1.52825 0.305392 0.630297 -0.713766 + 0.991595 2.07352 -1.50661 0.261216 0.78147 -0.566631 + 1.00074 1.95798 -1.5973 0.309374 0.560855 -0.767938 + 0.975847 2.00687 -1.56253 -0.244207 0.588952 -0.770389 + 0.974527 2.04854 -1.52813 -0.253411 0.629372 -0.734625 + 0.976944 2.0734 -1.50646 -0.216389 0.782104 -0.58437 + 0.990813 2.07877 -1.49456 0.23579 0.934527 -0.266576 + 0.973509 1.9577 -1.59711 -0.25647 0.558232 -0.78905 + 0.949082 2.00065 -1.54913 -0.554 0.512349 -0.656187 + 0.95341 2.04363 -1.51755 -0.546134 0.555732 -0.626817 + 0.946743 1.95147 -1.58371 -0.553467 0.488961 -0.674233 + 0.936118 1.99604 -1.53943 -0.83747 0.369265 -0.402848 + 0.940447 2.03902 -1.50785 -0.838137 0.404328 -0.366122 + 0.946611 2.0652 -1.48899 -0.766267 0.605144 -0.215955 + 0.955827 2.06849 -1.4959 -0.513041 0.716547 -0.472599 + 0.929595 1.94537 -1.5709 -0.841353 0.358811 -0.404203 + 0.934046 1.99201 -1.53129 -0.995019 0.0836439 0.0542248 + 0.938812 2.03584 -1.50142 -0.990397 0.117413 0.0729926 + 0.937515 1.98613 -1.51921 -0.940343 -0.096062 0.326385 + 0.942281 2.02995 -1.48935 -0.936737 -0.0728499 0.342369 + 0.944975 2.06202 -1.48256 -0.90688 0.366934 0.20719 + 0.953641 2.07063 -1.47757 -0.585212 0.724342 0.364494 + 0.954597 2.07248 -1.48133 -0.51175 0.85593 0.0741257 + 0.950006 2.02281 -1.47453 -0.783276 -0.227617 0.578506 + 0.947446 2.05783 -1.47398 -0.867967 0.213803 0.448244 + 0.956111 2.06645 -1.46899 -0.591633 0.615421 0.520794 + 0.969766 2.07362 -1.47095 -0.17785 0.90143 0.394705 + 0.970723 2.07549 -1.47471 -0.160577 0.906602 0.390241 + 0.964419 2.01823 -1.46426 -0.407496 -0.389513 0.82597 + 0.955171 2.05069 -1.45916 -0.720075 0.0676277 0.690593 + 0.960629 2.06227 -1.46033 -0.546737 0.492337 0.677261 + 0.967214 2.07131 -1.46621 -0.300105 0.858053 0.416751 + 0.965424 2.04743 -1.45186 -0.402195 -0.0619763 0.913454 + 0.970882 2.059 -1.45302 -0.286665 0.355037 0.889816 + 0.971731 2.06713 -1.45755 -0.223775 0.703876 0.674154 + 0.982013 2.06661 -1.45565 0.00366276 0.709287 0.704911 + 0.987789 2.06842 -1.45905 0.154454 0.806582 0.570587 + 0.983006 2.04653 -1.44862 -0.033658 -0.108566 0.993519 + 0.981163 2.05847 -1.45113 -0.0549915 0.337246 0.939809 + 0.992319 2.05937 -1.45218 0.229077 0.414214 0.880881 + 0.998095 2.06118 -1.45558 0.42272 0.510028 0.749119 + 0.990342 2.07074 -1.46379 0.162296 0.858346 0.486725 + 0.992911 2.07364 -1.47028 0.173208 0.87531 0.451476 + 0.972252 2.07813 -1.48049 -0.178992 0.958553 0.221672 + 1.00391 2.06445 -1.46249 0.541523 0.599848 0.589012 + 0.99444 2.07629 -1.47606 0.207902 0.891464 0.402577 + 0.993381 2.07834 -1.48062 0.216081 0.949075 0.229271 + 0.984601 2.08101 -1.48667 0.0231545 0.998041 0.0581277 + 0.976162 2.07864 -1.49442 -0.209449 0.939131 -0.27233 + 0.963814 2.07577 -1.48824 -0.367743 0.913219 -0.175487 + 0.999594 2.0761 -1.48852 0.450022 0.882156 -0.138853 + 0.936187 1.94568 -1.34079 -0.520259 0.657385 -0.545139 + 0.939359 1.96785 -1.31586 -0.480165 0.770993 -0.418343 + 0.950922 1.97011 -1.31884 -0.0508115 0.857391 -0.512151 + 0.93348 1.96797 -1.29823 -0.545887 0.837769 0.0122377 + 0.94102 1.97224 -1.30474 -0.384694 0.918542 -0.0910491 + 0.952584 1.9745 -1.30772 -0.0324882 0.983424 -0.178388 + 0.96174 1.9735 -1.30556 0.206319 0.96462 -0.164136 + 0.928256 1.96346 -1.29133 -0.661678 0.710269 0.240211 + 0.937365 1.96768 -1.28845 -0.283502 0.862474 0.419243 + 0.944905 1.97195 -1.29496 -0.157603 0.927137 0.339969 + 0.954131 1.97383 -1.29744 -0.0301258 0.953895 0.298624 + 0.963287 1.97281 -1.29528 0.142587 0.936476 0.320439 + 0.928259 1.9612 -1.2879 -0.651478 0.469036 0.596306 + 0.937368 1.96542 -1.28502 -0.27234 0.691559 0.669011 + 0.947165 1.96051 -1.27864 -0.139935 0.633509 0.760976 + 0.951054 1.97051 -1.29305 -0.00989646 0.810656 0.585439 + 0.963575 1.96415 -1.28342 0.266397 0.715895 0.645389 + 0.928037 1.94721 -1.28517 -0.678027 -0.143787 0.720837 + 0.935049 1.95622 -1.2811 -0.489486 0.261186 0.831977 + 0.944847 1.95131 -1.27473 -0.337323 0.215754 0.916332 + 0.953314 1.95908 -1.27673 -0.0168759 0.606118 0.795196 + 0.960497 1.96084 -1.27902 0.193969 0.65272 0.732347 + 0.94479 1.9388 -1.27427 -0.429763 -0.253205 0.866713 + 0.956616 1.94912 -1.2719 0.0406909 0.213526 0.976089 + 0.963799 1.9509 -1.2742 0.405407 0.292528 0.866067 + 0.970218 1.95691 -1.28205 0.654834 0.419877 0.628407 + 0.972324 1.96381 -1.29113 0.718078 0.511066 0.472414 + 0.965681 1.97106 -1.2925 0.297962 0.813113 0.500065 + 0.972199 1.96974 -1.29958 0.659057 0.721784 0.211354 + -0.899092 1.49376 -2.24544 0.347716 0.20168 -0.915652 + -0.886486 1.45631 -2.24676 0.411627 -0.152926 -0.89843 + -0.927139 1.43888 -2.25177 0.296551 -0.376099 -0.877842 + -0.848608 1.46705 -2.22149 0.566933 0.0178786 -0.82357 + -0.871592 1.43878 -2.22644 0.360939 -0.50584 -0.783485 + -0.887581 1.43198 -2.23119 0.350441 -0.71197 -0.608514 + -0.902475 1.44951 -2.25152 0.336819 -0.586789 -0.736363 + -0.95769 1.49484 -2.26045 0.215931 0.188097 -0.95812 + -0.924909 1.56648 -2.22949 0.338979 0.369488 -0.865201 + -0.861214 1.50451 -2.22016 0.485139 0.278077 -0.829043 + -0.954314 1.44138 -2.26401 0.319065 -0.257022 -0.912216 + -1.03233 1.48352 -2.27793 0.0674862 0.214674 -0.974351 + -1.04491 1.57445 -2.23899 0.000782238 0.376687 -0.92634 + -0.983508 1.56755 -2.24452 0.0830266 0.318008 -0.944446 + -1.0136 1.39205 -2.2446 0.0963116 -0.826824 -0.554154 + -1.02895 1.43006 -2.28148 0.0655307 -0.332016 -0.940995 + -1.0787 1.49585 -2.27286 -0.224748 0.226038 -0.947837 + -1.09129 1.58679 -2.23392 -0.109045 0.414363 -0.903555 + -1.0558 1.63596 -2.21233 -0.0471832 0.478576 -0.876777 + -0.986422 1.38955 -2.23237 0.208585 -0.792402 -0.573229 + -1.05482 1.38207 -2.20798 -0.410894 -0.870223 -0.271806 + -1.04752 1.38995 -2.23971 -0.286681 -0.846133 -0.449303 + -1.06288 1.42796 -2.27657 -0.383985 -0.436768 -0.813504 + -0.920256 1.42007 -2.23255 0.326465 -0.727625 -0.60331 + -0.920522 1.4091 -2.21389 0.375115 -0.848851 -0.372479 + -0.986688 1.37858 -2.21372 0.192482 -0.924479 -0.329073 + -0.895592 1.4307 -2.23229 0.263162 -0.746972 -0.610555 + -0.895922 1.41692 -2.20714 0.2813 -0.882887 -0.376006 + -0.928203 1.39501 -2.17716 0.324915 -0.938226 -0.119002 + -0.958305 1.38611 -2.16114 0.239838 -0.965313 0.103189 + -1.01679 1.36969 -2.19769 -0.0104022 -0.97555 -0.219531 + -0.887911 1.4182 -2.20603 0.0154502 -0.854308 -0.519537 + -0.903603 1.40282 -2.17041 0.118208 -0.958889 -0.257991 + -0.915701 1.39729 -2.13927 -0.029742 -0.999541 -0.00581299 + -0.940077 1.39375 -2.14157 0.176815 -0.968049 0.177812 + -0.87123 1.41119 -2.20415 -0.0824662 -0.779439 -0.621027 + -0.896651 1.40107 -2.16767 -0.226856 -0.910269 -0.346333 + -0.908748 1.39554 -2.13654 -0.427898 -0.867193 -0.254716 + -0.930671 1.40194 -2.11612 -0.0845671 -0.988612 0.12448 + -0.848054 1.43546 -2.2199 0.426623 -0.310922 -0.849306 + -0.847692 1.40788 -2.19762 0.19371 -0.655241 -0.730162 + -0.87997 1.39407 -2.16579 -0.432775 -0.744314 -0.508628 + -0.828642 1.45837 -2.20087 0.71805 -0.0727985 -0.692174 + -0.828088 1.42677 -2.19929 0.716303 -0.313041 -0.623631 + -0.830224 1.39283 -2.17614 0.624853 -0.447201 -0.639976 + -0.849827 1.37393 -2.17447 -0.0464246 -0.709832 -0.70284 + -0.824036 1.48986 -2.20217 0.636989 0.0877634 -0.765861 + -0.809707 1.45721 -2.1801 0.8428 -0.128338 -0.522701 + -0.799637 1.43961 -2.15706 0.777028 -0.169717 -0.606155 + -0.820154 1.37524 -2.1531 0.688939 -0.52652 -0.498136 + -0.85573 1.3557 -2.14582 -0.207085 -0.775424 -0.596518 + -0.813156 1.51146 -2.18697 0.688529 0.276065 -0.670609 + -0.805101 1.4887 -2.1814 0.89159 -0.0452952 -0.450573 + -0.791442 1.54012 -2.13914 0.866171 0.159485 -0.473616 + -0.850334 1.5261 -2.20495 0.504239 0.355548 -0.786974 + -0.799498 1.56287 -2.14471 0.744863 0.249575 -0.618782 + -0.916339 1.61308 -2.20198 0.354047 0.483464 -0.800571 + -0.841764 1.57271 -2.17745 0.550908 0.341102 -0.761676 + -0.789347 1.64319 -2.10231 0.809707 0.176438 -0.559683 + -0.994392 1.62906 -2.21786 0.11842 0.507327 -0.853578 + -0.92079 1.6404 -2.18212 0.305759 0.493066 -0.814492 + -0.831614 1.65302 -2.13505 0.528621 0.326104 -0.783719 + -0.998842 1.65637 -2.198 0.120238 0.517731 -0.847053 + -0.980605 1.70774 -2.17046 0.111612 0.414575 -0.903145 + -0.917688 1.70239 -2.15691 0.312348 0.331844 -0.890123 + -0.828512 1.71502 -2.10984 0.505614 0.222222 -0.83365 + -1.05076 1.68208 -2.18405 -0.0544873 0.516237 -0.854711 + -1.03252 1.73344 -2.15652 -0.112033 0.492671 -0.862974 + -0.999865 1.7905 -2.12876 -0.118145 0.530815 -0.839212 + -0.953246 1.792 -2.13158 0.0717505 0.465315 -0.882232 + -0.890328 1.78665 -2.11804 0.304835 0.362288 -0.880808 + -1.10063 1.64679 -2.2006 -0.163567 0.499036 -0.851004 + -1.09559 1.6929 -2.17231 -0.146371 0.547252 -0.82407 + -1.07481 1.74248 -2.14068 -0.193684 0.595922 -0.779335 + -1.04216 1.79953 -2.11292 -0.403665 0.681592 -0.610317 + -0.972288 1.8385 -2.09677 -0.170103 0.76314 -0.623443 + -1.13472 1.63559 -2.19829 -0.528753 0.406951 -0.744857 + -1.13202 1.7126 -2.15023 -0.518974 0.539562 -0.662977 + -1.11124 1.76217 -2.11859 -0.383798 0.765009 -0.517166 + -1.07684 1.78557 -2.08856 -0.500082 0.800928 -0.329291 + -1.12538 1.57558 -2.23162 -0.478761 0.307786 -0.822226 + -1.14556 1.56771 -2.21169 -0.924732 0.0127687 -0.380405 + -1.15054 1.62825 -2.18043 -0.94355 0.149282 -0.295684 + -1.14784 1.70525 -2.13236 -0.93001 0.311295 -0.19539 + -1.12989 1.75606 -2.09305 -0.802141 0.597122 -0.00389197 + -1.08355 1.46722 -2.27512 -0.436262 -0.104335 -0.89375 + -1.13023 1.54695 -2.23386 -0.734542 0.00769043 -0.67852 + -1.12601 1.49299 -2.22076 -0.922489 -0.292095 -0.252379 + -1.14477 1.55028 -2.18632 -0.983483 -0.176684 -0.0393022 + -1.14975 1.61081 -2.15505 -0.999238 -0.0371698 0.0119378 + -1.11068 1.47223 -2.24293 -0.844428 -0.314825 -0.433389 + -1.09001 1.43298 -2.24439 -0.757829 -0.511739 -0.404745 + -1.12245 1.47471 -2.19044 -0.928743 -0.347266 -0.129775 + -1.1412 1.532 -2.156 -0.978863 -0.204467 -0.00462601 + -1.0973 1.42511 -2.21268 -0.809678 -0.528579 -0.255001 + -1.1238 1.4619 -2.14593 -0.955007 -0.280978 -0.0949409 + -1.1384 1.52996 -2.09554 -0.984644 -0.174196 0.0114794 + -1.14607 1.58662 -2.06973 -0.992666 -0.0603977 0.104715 + -1.14887 1.58865 -2.13019 -0.996988 -0.0766038 0.0120895 + -1.09865 1.4123 -2.16816 -0.817352 -0.52306 -0.241544 + -1.1117 1.39962 -2.10918 -0.880765 -0.418878 -0.220893 + -1.12189 1.4465 -2.09138 -0.982189 -0.169339 -0.0814219 + -1.13649 1.51456 -2.04099 -0.990881 -0.0860551 0.103681 + -1.078 1.38547 -2.16349 -0.560756 -0.776008 -0.288729 + -1.10301 1.40494 -2.14053 -0.674597 -0.676213 -0.296066 + -1.09355 1.37119 -2.09712 -0.555811 -0.775705 -0.298924 + -1.12052 1.38342 -2.03799 -0.925874 -0.376859 0.0270859 + -1.13071 1.43029 -2.0202 -0.981496 -0.15405 0.113725 + -1.03997 1.37308 -2.15319 -0.00310849 -0.999983 0.0049718 + -1.072 1.36994 -2.13355 -0.182406 -0.949212 -0.256367 + -1.08236 1.37812 -2.13585 -0.63064 -0.703357 -0.327997 + -1.08487 1.3765 -2.12848 -0.639089 -0.69553 -0.328335 + -1.02978 1.37531 -2.15087 0.183394 -0.96671 0.178434 + -1.06181 1.37216 -2.13123 0.22663 -0.973001 0.0436826 + -1.07451 1.36833 -2.12618 -0.192974 -0.95056 -0.243304 + -1.01155 1.38294 -2.1313 0.197974 -0.957821 0.208292 + -1.03001 1.38062 -2.12265 0.242302 -0.967651 0.0702951 + -1.04271 1.37679 -2.1176 0.30303 -0.928481 -0.214701 + -1.04961 1.36119 -2.08699 0.152833 -0.914261 -0.375193 + -0.955048 1.39841 -2.11842 0.172716 -0.955008 0.241098 + -0.973508 1.39608 -2.10977 0.238834 -0.96828 0.0734327 + -0.976448 1.39491 -2.1025 0.292233 -0.931926 -0.214739 + -0.983343 1.37932 -2.07189 0.297877 -0.864302 -0.405279 + -0.940627 1.40425 -2.10236 0.0119251 -0.999809 0.0154635 + -0.943567 1.40308 -2.09509 0.0806325 -0.946819 -0.3115 + -0.949257 1.38472 -2.06144 0.0515516 -0.875933 -0.47967 + -0.995344 1.34393 -2.00981 0.267433 -0.876904 -0.399398 + -1.05697 1.33738 -2.04067 0.00316493 -0.938374 -0.345607 + -0.925917 1.4005 -2.11096 -0.465319 -0.868053 -0.173098 + -0.935873 1.40281 -2.09718 -0.372385 -0.871111 -0.320149 + -0.941563 1.38446 -2.06353 -0.386165 -0.779534 -0.493156 + -0.95376 1.34832 -1.99973 -0.369016 -0.776274 -0.511102 + -0.961258 1.34933 -1.99936 0.0632665 -0.877436 -0.475503 + -0.903042 1.38081 -2.11155 -0.642412 -0.674715 -0.363411 + -0.914566 1.36855 -2.07365 -0.624128 -0.648387 -0.435957 + -0.926763 1.33242 -2.00984 -0.490945 -0.811288 -0.317466 + -0.961228 1.33076 -1.96753 -0.169257 -0.984944 -0.035164 + -0.968726 1.33177 -1.96715 -0.0120355 -0.992256 -0.123627 + -0.885873 1.37584 -2.13714 -0.591827 -0.709596 -0.382381 + -0.855708 1.33141 -2.11817 -0.109685 -0.882587 -0.457176 + -0.867232 1.31915 -2.08026 -0.244785 -0.896655 -0.368904 + -0.820131 1.35095 -2.12545 0.509325 -0.684733 -0.521276 + -0.805212 1.33538 -2.08529 0.580008 -0.755738 -0.304057 + -0.869015 1.31044 -2.04502 -0.125359 -0.972412 -0.196723 + -0.864873 1.304 -1.99944 -0.0532372 -0.997076 0.0548167 + -0.922622 1.32598 -1.96426 -0.182374 -0.961751 0.20439 + -0.77699 1.42361 -2.13262 0.758175 -0.255066 -0.600093 + -0.762071 1.40805 -2.09246 0.839452 -0.341345 -0.422852 + -0.806994 1.32668 -2.05006 0.49444 -0.842977 -0.211944 + -0.782071 1.50568 -2.13663 0.721418 0.143125 -0.677548 + -0.759425 1.48967 -2.11219 0.853145 0.0876704 -0.514253 + -0.737945 1.48817 -2.06393 0.922728 0.0628149 -0.380298 + -0.734565 1.38336 -2.02192 0.84881 -0.469183 -0.243698 + -0.762784 1.59643 -2.05332 0.881025 0.21473 -0.421529 + -0.741304 1.59492 -2.00506 0.900503 0.170746 -0.399924 + -0.710439 1.46348 -1.99338 0.975812 -0.0635473 -0.209172 + -0.739676 1.37208 -1.97537 0.778311 -0.611871 0.140875 + -0.812106 1.3154 -2.0035 0.401367 -0.915608 0.0237888 + -0.772155 1.63086 -2.05582 0.914181 0.10517 -0.391424 + -0.739236 1.6697 -1.97481 0.893909 0.0177221 -0.447898 + -0.710255 1.56845 -1.95041 0.971957 0.0764396 -0.222389 + -0.710269 1.54832 -1.89964 0.951423 -0.12042 0.28336 + -0.710452 1.44335 -1.94262 0.931513 -0.282433 0.22916 + -0.776665 1.70487 -2.06958 0.810363 0.0258287 -0.585358 + -0.759473 1.69255 -2.0231 0.922959 -0.0681686 -0.378814 + -0.729217 1.71242 -1.96378 0.913225 -0.00884209 -0.407359 + -0.708187 1.64323 -1.92017 0.97974 0.0129378 -0.199856 + -0.758738 1.75839 -2.05214 0.823093 0.0326935 -0.566965 + -0.749453 1.73526 -2.01205 0.935118 -0.0904782 -0.342591 + -0.739652 1.76789 -1.98901 0.962083 0.022823 -0.271801 + -0.727109 1.75134 -1.95088 0.944277 0.104782 -0.312027 + -0.705916 1.68333 -1.91339 0.979498 -0.00719142 -0.201327 + -0.810585 1.76854 -2.09241 0.488766 0.221227 -0.8439 + -0.791228 1.81115 -2.06378 0.557852 0.537038 -0.632764 + -0.748937 1.79101 -2.02909 0.851041 0.319981 -0.416343 + -0.870971 1.82926 -2.08941 0.308356 0.544939 -0.779717 + -0.848521 1.85072 -2.05959 0.381558 0.567316 -0.729771 + -0.786292 1.81982 -2.03777 0.606728 0.612492 -0.50669 + -0.744001 1.79968 -2.00307 0.896375 0.304134 -0.322514 + -0.925669 1.84 -2.09959 0.0886677 0.660748 -0.745352 + -0.903219 1.86146 -2.06977 0.117257 0.633783 -0.764572 + -0.889381 1.90294 -2.04387 0.134329 0.422129 -0.896528 + -0.85084 1.88291 -2.04043 0.394515 0.426646 -0.813837 + -0.939863 1.861 -2.06729 -0.174519 0.730715 -0.659999 + -0.926026 1.90248 -2.04141 -0.198054 0.430141 -0.880769 + -0.924929 1.9648 -2.02233 -0.145931 0.346733 -0.926542 + -0.892353 1.96327 -2.02012 0.220558 0.385362 -0.896019 + -0.853812 1.94323 -2.01666 0.443739 0.460189 -0.768975 + -1.01063 1.83274 -2.08394 -0.39026 0.82766 -0.403332 + -0.978204 1.85524 -2.05445 -0.368115 0.76447 -0.529223 + -0.957905 1.89687 -2.03116 -0.438548 0.465725 -0.768619 + -1.04531 1.81879 -2.05957 -0.59268 0.777709 -0.209522 + -1.01618 1.84657 -2.03436 -0.595286 0.722832 -0.350924 + -0.995883 1.8882 -2.01106 -0.646086 0.509964 -0.5679 + -0.975807 1.94944 -1.98993 -0.766071 0.32879 -0.552297 + -0.956808 1.9592 -2.01208 -0.589911 0.296411 -0.751096 + -1.06679 1.80356 -2.03872 -0.714434 0.694392 0.0860424 + -1.03766 1.83134 -2.0135 -0.796864 0.603949 -0.0159384 + -1.01403 1.8742 -1.9934 -0.8602 0.465125 -0.209081 + -1.09549 1.77946 -2.06302 -0.643207 0.761377 0.0811836 + -1.06837 1.78834 -2.0124 -0.757219 0.570832 0.317442 + -1.0501 1.80483 -1.99789 -0.817893 0.509632 0.267071 + -1.02647 1.84769 -1.9778 -0.882684 0.309897 0.353317 + -1.09708 1.76425 -2.0367 -0.761274 0.548182 0.34635 + -1.06596 1.7651 -1.96907 -0.789962 0.506357 0.345777 + -1.12907 1.73891 -2.06777 -0.889246 0.352855 0.291091 + -1.12418 1.7134 -2.0251 -0.869672 0.365851 0.331397 + -1.09218 1.73874 -1.99404 -0.791561 0.482669 0.374782 + -1.14702 1.68809 -2.10709 -0.988099 0.110558 0.106949 + -1.14066 1.67979 -2.04604 -0.959844 0.190917 0.205548 + -1.11048 1.67767 -1.96451 -0.871971 0.241375 0.425916 + -1.08523 1.7041 -1.93404 -0.82439 0.345556 0.448299 + -1.05901 1.73045 -1.90908 -0.79467 0.37722 0.475611 + -1.14614 1.66593 -2.08223 -0.994723 0.0386123 0.0950579 + -1.14059 1.60047 -2.03354 -0.974829 -0.0492873 0.21744 + -1.12697 1.64406 -1.98544 -0.932018 0.0984178 0.348792 + -1.08672 1.64681 -1.9115 -0.826502 0.118699 0.550277 + -1.06147 1.67324 -1.88104 -0.765794 0.13863 0.627965 + -1.12764 1.56808 -1.99769 -0.964985 -0.0361345 0.259805 + -1.11401 1.61167 -1.94958 -0.894939 0.0504442 0.443328 + -1.05772 1.62163 -1.86933 -0.753993 0.0847421 0.651393 + -1.01885 1.64567 -1.83592 -0.630773 0.126082 0.765655 + -1.11346 1.54151 -1.94398 -0.897603 -0.0242042 0.44014 + -1.08501 1.58649 -1.90741 -0.801013 0.00445237 0.59863 + -1.03918 1.60236 -1.84948 -0.646277 -0.109597 0.755192 + -1.12231 1.48799 -1.98729 -0.958534 -0.0410942 0.281998 + -1.106 1.4838 -1.94016 -0.787083 -0.19816 0.584152 + -1.08758 1.52264 -1.91138 -0.696611 -0.1574 0.699971 + -1.05913 1.56764 -1.87481 -0.670339 -0.144468 0.727856 + -1.11441 1.4261 -1.97307 -0.832293 -0.237944 0.50067 + -1.06537 1.47382 -1.91368 -0.604304 -0.279018 0.746301 + -1.04694 1.51267 -1.8849 -0.486776 -0.296557 0.821646 + -1.03598 1.56173 -1.86204 -0.448857 -0.302856 0.840718 + -1.01603 1.59645 -1.83673 -0.364481 -0.398658 0.841561 + -1.10104 1.3795 -1.98664 -0.736316 -0.47224 0.48459 + -1.09989 1.41162 -1.9656 -0.648861 -0.346348 0.677512 + -1.05085 1.45934 -1.90621 -0.591681 -0.206393 0.779305 + -1.00846 1.50637 -1.86986 -0.363339 -0.247272 0.898244 + -1.08144 1.34347 -1.99944 -0.612244 -0.705318 0.357328 + -1.04294 1.35016 -1.9651 -0.455384 -0.62214 0.636841 + -1.04907 1.39376 -1.9313 -0.532662 -0.50549 0.678786 + -1.04792 1.42587 -1.91027 -0.575188 -0.282947 0.767528 + -1.00553 1.4729 -1.87392 -0.386326 -0.206374 0.898978 + -1.10092 1.34738 -2.0508 -0.597087 -0.781405 -0.181368 + -1.05999 1.32342 -2.00723 -0.314764 -0.949148 -0.00648119 + -1.02149 1.3301 -1.97289 -0.187316 -0.880038 0.436401 + -1.00874 1.35683 -1.93603 -0.363404 -0.642582 0.674556 + -1.01487 1.40043 -1.90222 -0.40065 -0.450113 0.798046 + -0.976767 1.38693 -1.89556 -0.212181 -0.516547 0.829553 + -0.955031 1.42883 -1.87211 -0.134559 -0.352529 0.926076 + -0.993137 1.44233 -1.87877 -0.309951 -0.286288 0.906625 + -0.992956 1.34349 -1.94269 -0.126707 -0.816649 0.563054 + -0.960983 1.37358 -1.90222 -0.183924 -0.580943 0.792892 + -0.897501 1.43092 -1.87013 0.0120944 -0.367199 0.930064 + -0.921796 1.52442 -1.84221 -0.128176 -0.282323 0.950718 + -0.998746 1.33032 -1.97424 0.0103125 -0.961874 0.273297 + -0.970212 1.3437 -1.94403 -0.122453 -0.856635 0.501181 + -0.948804 1.35617 -1.91136 -0.25078 -0.702371 0.666172 + -0.893374 1.36083 -1.90056 -0.0224523 -0.58474 0.81091 + -0.905553 1.37825 -1.89143 -0.0392813 -0.425965 0.903886 + -0.998363 1.32996 -1.97637 0.113476 -0.989752 -0.0866871 + -0.969109 1.33213 -1.96502 -0.0793471 -0.941174 0.328475 + -0.962097 1.33641 -1.9534 -0.13941 -0.895945 0.421719 + -0.940689 1.34888 -1.92073 -0.143787 -0.858118 0.492908 + -0.954216 1.33504 -1.9559 -0.0982329 -0.912804 0.396409 + -0.909096 1.33982 -1.92908 -0.13624 -0.850832 0.507467 + -0.848994 1.34274 -1.91206 0.121809 -0.651268 0.749007 + -0.805417 1.37274 -1.90596 0.342821 -0.493843 0.79912 + -0.864716 1.32173 -1.94058 -0.0353278 -0.903518 0.427092 + -0.811948 1.33311 -1.94464 0.377319 -0.826003 0.418747 + -0.768371 1.36311 -1.93854 0.560555 -0.661809 0.497782 + -0.797364 1.42541 -1.88466 0.265085 -0.440463 0.857743 + -0.739147 1.43438 -1.90578 0.614423 -0.424512 0.665036 + -0.800958 1.50662 -1.84181 0.164989 -0.388572 0.906527 + -0.864266 1.5265 -1.84023 -0.0492242 -0.327377 0.943611 + -0.742741 1.5156 -1.86294 0.614545 -0.321978 0.720184 + -0.743671 1.58188 -1.83554 0.641008 -0.270021 0.718468 + -0.787413 1.572 -1.81563 0.205742 -0.347698 0.914755 + -0.85072 1.59187 -1.81405 -0.0574968 -0.37744 0.924247 + -0.711199 1.61461 -1.87225 0.935213 -0.109471 0.336739 + -0.708928 1.65471 -1.86548 0.942386 -0.0692211 0.327286 + -0.741793 1.62937 -1.82166 0.655061 -0.159911 0.73846 + -0.785535 1.61948 -1.80175 0.232587 -0.247171 0.940643 + -0.703809 1.72224 -1.90049 0.992577 0.103451 -0.0639395 + -0.711709 1.70214 -1.8583 0.904742 0.0544195 0.422468 + -0.744575 1.67681 -1.81449 0.660655 -0.0312616 0.750038 + -0.780673 1.66025 -1.79405 0.296559 -0.121798 0.947216 + -0.842039 1.62036 -1.79979 -0.0169634 -0.318493 0.947774 + -0.724012 1.78422 -1.92417 0.948119 0.167234 -0.270374 + -0.713326 1.77037 -1.89423 0.98975 0.140091 -0.0277306 + -0.721226 1.75027 -1.85204 0.903527 0.0572023 0.424697 + -0.751963 1.73191 -1.81056 0.672115 -0.0263851 0.739977 + -0.788062 1.71535 -1.79012 0.199623 -0.0654664 0.977683 + -0.736555 1.80077 -1.96229 0.967159 0.133638 -0.216206 + -0.736368 1.83852 -1.93163 0.961441 0.140857 -0.236199 + -0.726314 1.83497 -1.90204 0.945646 0.155665 -0.285521 + -0.715627 1.82111 -1.87211 0.999403 0.0345378 -0.000400484 + -0.725543 1.80598 -1.84147 0.912115 -0.0939597 0.399021 + -0.743814 1.83743 -1.97241 0.723326 0.456486 -0.518093 + -0.736551 1.89566 -1.90307 0.794033 0.364331 -0.486594 + -0.726497 1.89212 -1.87348 0.944126 0.154961 -0.290884 + -0.717133 1.8795 -1.84616 0.999894 0.0117124 -0.00861892 + -0.727049 1.86436 -1.81551 0.857643 -0.161196 0.488327 + -0.761862 1.84348 -1.975 0.351154 0.757904 -0.549792 + -0.749461 1.89927 -1.91012 0.410827 0.60628 -0.680915 + -0.748343 1.96032 -1.86717 0.346225 0.506933 -0.789397 + -0.735433 1.95672 -1.86013 0.72398 0.339969 -0.600228 + -0.725891 1.95057 -1.84504 0.913436 0.168941 -0.370261 + -0.778005 1.84923 -1.98921 0.738713 0.659058 0.141227 + -0.791416 1.85339 -1.94798 -0.189425 0.894161 -0.405703 + -0.792228 1.90588 -1.91082 -0.309004 0.590827 -0.745279 + -0.76751 1.90531 -1.91271 0.131846 0.653479 -0.745374 + -0.76429 1.96284 -1.86876 0.0632462 0.563842 -0.823457 + -0.784655 1.86838 -2.00259 0.829928 0.510829 -0.224218 + -0.828373 1.92925 -1.96297 0.899974 0.332641 0.281773 + -0.807559 1.85914 -1.96219 0.577452 0.640379 0.506423 + -0.818141 1.85194 -1.92974 -0.297812 0.919837 -0.255359 + -0.788611 1.85201 -2.0186 0.615083 0.429164 -0.661431 + -0.849856 1.95961 -2.00064 0.66663 0.488395 -0.563093 + -0.835023 1.94841 -1.97634 0.888805 0.447232 -0.100042 + -0.892646 2.02482 -1.99562 0.302756 0.388906 -0.87011 + -0.87111 2.01902 -1.98352 0.705783 0.361712 -0.609126 + -0.856278 2.00783 -1.95922 0.922003 0.285453 -0.261586 + -0.851627 1.99948 -1.94063 0.980289 0.17805 0.0856201 + -0.832983 1.92248 -1.94618 0.828313 0.154885 0.538431 + -0.925222 2.02636 -1.99782 -0.162053 0.389442 -0.906683 + -0.921799 2.08898 -1.96949 -0.153016 0.451938 -0.878828 + -0.895326 2.08771 -1.96769 0.308953 0.432891 -0.846849 + -0.873791 2.08192 -1.9556 0.725954 0.333154 -0.601663 + -0.948669 2.02264 -1.98866 -0.597721 0.346066 -0.723165 + -0.945246 2.08526 -1.96032 -0.608751 0.38613 -0.693056 + -0.939173 2.14027 -1.93175 -0.59624 0.47166 -0.649642 + -0.921589 2.14313 -1.93873 -0.160704 0.54685 -0.821663 + -0.895116 2.14186 -1.93694 0.317027 0.525182 -0.789733 + -0.967668 2.01288 -1.9665 -0.843969 0.273105 -0.46166 + -0.960694 2.07717 -1.94198 -0.843239 0.292986 -0.450674 + -0.954621 2.13217 -1.91341 -0.835798 0.359526 -0.414949 + -0.976243 2.00544 -1.95092 -0.963318 0.211039 -0.165772 + -0.969269 2.06972 -1.92641 -0.970206 0.185074 -0.156359 + -0.961027 2.12683 -1.90189 -0.961423 0.236467 -0.140529 + -0.944656 2.18136 -1.88442 -0.823786 0.424218 -0.376054 + -0.993954 1.93544 -1.97227 -0.923256 0.334014 -0.189825 + -0.975963 1.99982 -1.93825 -0.953652 0.074504 0.291542 + -0.969034 2.06551 -1.91693 -0.965248 0.022212 0.26039 + -0.960792 2.12263 -1.8924 -0.961549 0.0362511 0.272229 + -0.951062 2.17602 -1.8729 -0.952511 0.289073 -0.0957111 + -0.993675 1.92983 -1.9596 -0.914322 0.188608 0.35839 + -0.981995 1.92345 -1.94256 -0.76866 0.0297373 0.638966 + -0.967909 1.99389 -1.92317 -0.833792 -0.0381279 0.55076 + -0.96098 2.05958 -1.90185 -0.842948 -0.0899276 0.530426 + -0.954734 2.11813 -1.88125 -0.844093 -0.0971345 0.527325 + -1.01479 1.84131 -1.96075 -0.733716 0.382931 0.56127 + -0.972792 1.85284 -1.93957 -0.47498 0.395604 0.786061 + -0.964709 1.91481 -1.92212 -0.601728 -0.124145 0.788994 + -0.950622 1.98525 -1.90273 -0.611008 -0.132087 0.780527 + -0.946914 2.05248 -1.88496 -0.630339 -0.180557 0.755031 + -1.01408 1.83106 -1.94101 -0.402072 0.911785 -0.0835868 + -0.972088 1.84258 -1.91983 -0.0493733 0.97005 -0.237836 + -0.937711 1.85232 -1.92473 -0.310743 0.412287 0.856422 + -0.929628 1.91428 -1.90729 -0.228028 -0.178993 0.95706 + -0.929162 1.98119 -1.89321 -0.226462 -0.213016 0.950441 + -1.02479 1.83536 -1.92346 -0.7718 0.626895 -0.106433 + -0.980764 1.88526 -1.86563 -0.438602 0.762872 -0.475032 + -0.960507 1.89046 -1.87556 -0.113201 0.727348 -0.676868 + -0.925232 1.8928 -1.86607 0.252741 0.618774 -0.743802 + -0.936812 1.84492 -1.91034 0.058177 0.982972 -0.174304 + -1.04769 1.78159 -1.95457 -0.846836 0.445254 0.29089 + -1.03028 1.81533 -1.93018 -0.908675 0.135185 0.395011 + -0.998351 1.88183 -1.83149 -0.95513 0.235038 0.180233 + -0.991474 1.88956 -1.84808 -0.703425 0.640085 -0.309006 + -1.03082 1.77568 -1.89927 -0.852478 0.290877 0.434363 + -1.01341 1.80942 -1.87489 -0.906329 0.0132432 0.422365 + -1.00384 1.8618 -1.83821 -0.92452 0.0180254 0.380707 + -1.03131 1.70976 -1.86119 -0.699678 0.256514 0.666822 + -1.00313 1.75498 -1.85138 -0.737897 0.156586 0.656497 + -0.987221 1.80629 -1.83345 -0.786645 -0.128956 0.603788 + -0.977649 1.85867 -1.79678 -0.790764 -0.239965 0.563125 + -0.988692 1.68218 -1.81608 -0.534021 0.0845056 0.841237 + -0.959144 1.73527 -1.80948 -0.546456 0.0397479 0.836544 + -0.94324 1.78657 -1.79155 -0.577563 -0.223854 0.785055 + -0.94535 1.84504 -1.7678 -0.595817 -0.341886 0.726716 + -0.943913 1.66603 -1.7953 -0.239564 -0.0683772 0.96847 + -0.914365 1.71912 -1.78871 -0.168197 -0.112645 0.979296 + -0.906958 1.77198 -1.77752 -0.190975 -0.25599 0.947627 + -0.960783 1.62859 -1.80535 -0.227515 -0.27877 0.933019 + -0.887647 1.66415 -1.79206 -0.0331019 -0.0842228 0.995897 + -0.870092 1.70105 -1.79431 0.0448651 -0.0469819 0.997888 + -0.862685 1.75391 -1.78312 0.400713 -0.187489 0.896815 + -1.00031 1.62638 -1.81606 -0.378879 0.0463277 0.924286 + -0.976505 1.59867 -1.82601 -0.180738 -0.434372 0.882414 + -0.904516 1.62672 -1.80212 -0.0723308 -0.33345 0.939989 + -0.837177 1.66114 -1.7921 0.00625998 -0.0740852 0.997232 + -0.997493 1.55542 -1.847 -0.275753 -0.329017 0.903166 + -0.913198 1.59822 -1.81636 -0.118441 -0.379362 0.917636 + -0.934186 1.55499 -1.83735 -0.232062 -0.309494 0.92215 + -0.819622 1.69804 -1.79435 -0.0387735 -0.0124649 0.99917 + -0.847077 1.76163 -1.79512 0.402029 0.219578 0.888908 + -0.890218 1.83336 -1.76077 0.479761 -0.214307 0.850824 + -0.909069 1.83044 -1.75378 -0.0338413 -0.37442 0.926642 + -0.783995 1.77461 -1.7851 0.238725 -0.120581 0.963572 + -0.815555 1.75729 -1.78932 -0.208152 -0.0193717 0.977905 + -0.833175 1.76433 -1.79935 -0.247763 0.510755 0.823251 + -0.855159 1.79369 -1.81726 0.695281 0.54204 0.471992 + -0.87461 1.84108 -1.77277 0.786497 -0.0558778 0.615061 + -0.75628 1.78762 -1.79999 0.66541 -0.112653 0.737929 + -0.783561 1.84073 -1.77594 0.200331 -0.173153 0.964306 + -0.800585 1.84202 -1.77801 -0.327447 -0.106802 0.938814 + -0.818206 1.84905 -1.78803 -0.57954 -0.0510728 0.813342 + -0.755847 1.85374 -1.79084 0.611386 -0.19037 0.768092 + -0.753817 1.91743 -1.77039 0.584204 -0.278586 0.762296 + -0.773635 1.91234 -1.76087 0.180416 -0.265426 0.9471 + -0.790659 1.91362 -1.76293 -0.309668 -0.191506 0.93136 + -0.725019 1.92805 -1.79507 0.842438 -0.206819 0.497519 + -0.723834 1.99148 -1.76811 0.833647 -0.213473 0.509374 + -0.745486 1.98371 -1.75005 0.581502 -0.294912 0.75821 + -0.765304 1.97862 -1.74053 0.162009 -0.305813 0.938207 + -0.775719 1.9795 -1.74215 -0.316414 -0.230686 0.920145 + -0.716527 1.93795 -1.81772 0.999876 -0.0118021 0.0103936 + -0.715341 2.00138 -1.79076 0.999976 0.00545464 -0.00425521 + -0.716837 2.05794 -1.76226 0.99738 0.0615047 0.0380841 + -0.722807 2.05105 -1.74667 0.837025 -0.159141 0.523511 + -0.744459 2.04328 -1.72861 0.580613 -0.259033 0.771875 + -0.722661 2.01034 -1.81018 0.910634 0.185386 -0.369294 + -0.724157 2.0669 -1.78166 0.905955 0.242654 -0.346937 + -0.728679 2.11732 -1.75165 0.898159 0.300915 -0.320562 + -0.723833 2.11158 -1.73951 0.990132 0.132257 0.046338 + -0.729803 2.1047 -1.72392 0.82113 -0.108661 0.560301 + -0.732204 2.0165 -1.82526 0.708452 0.339918 -0.618508 + -0.730445 2.07118 -1.79156 0.711197 0.378445 -0.592434 + -0.734966 2.1216 -1.76153 0.694493 0.435892 -0.572431 + -0.734305 2.14794 -1.73562 0.82005 0.543113 -0.180403 + -0.72946 2.1422 -1.72349 0.909871 0.37377 0.180084 + -0.740157 2.01864 -1.82947 0.348781 0.478228 -0.806008 + -0.738398 2.07332 -1.79576 0.336615 0.500332 -0.797721 + -0.739627 2.12288 -1.76388 0.331996 0.53867 -0.774347 + -0.73814 2.15072 -1.74126 0.641562 0.656093 -0.397416 + -0.756103 2.02117 -1.83105 0.063508 0.533867 -0.84318 + -0.749025 2.07478 -1.79672 0.0591768 0.53596 -0.842167 + -0.750255 2.12433 -1.76486 0.0568512 0.563051 -0.824464 + -0.742801 2.152 -1.74362 0.307206 0.74766 -0.588752 + -0.773934 2.02176 -1.82983 -0.232359 0.554955 -0.798771 + -0.766856 2.07537 -1.79551 -0.234625 0.542753 -0.806455 + -0.761515 2.12477 -1.7641 -0.227951 0.558949 -0.797254 + -0.749178 2.1527 -1.74422 0.0699498 0.767372 -0.637375 + -0.745359 2.15596 -1.73553 0.212772 0.96367 -0.161454 + -0.789008 1.96341 -1.86688 -0.258714 0.57469 -0.776401 + -0.807276 1.96045 -1.8583 -0.58624 0.522215 -0.619366 + -0.792203 2.0188 -1.82125 -0.58549 0.521059 -0.621047 + -0.779339 2.07346 -1.78972 -0.581931 0.493149 -0.646653 + -0.818952 1.90443 -1.89258 -0.611658 0.497217 -0.615345 + -0.824707 1.95308 -1.84008 -0.839777 0.421408 -0.342331 + -0.804526 2.01368 -1.80835 -0.832331 0.429817 -0.349976 + -0.791662 2.06835 -1.77682 -0.846286 0.38395 -0.3693 + -0.849933 1.84528 -1.90432 -0.442666 0.896629 0.0102066 + -0.836383 1.89708 -1.87436 -0.836863 0.412073 -0.360355 + -0.831377 1.94503 -1.82226 -0.959859 0.28037 -0.00798095 + -0.811196 2.00563 -1.79054 -0.95888 0.283788 0.00376616 + -0.796166 2.06289 -1.76471 -0.971396 0.235862 -0.0275504 + -0.828463 1.85617 -1.9411 0.457776 0.63637 0.620866 + -0.860255 1.8495 -1.91568 0.25669 0.654807 0.710871 + -0.891764 1.84878 -1.90985 -0.0265467 0.540643 0.840833 + -0.890865 1.84138 -1.89545 0.264813 0.962688 -0.0557235 + -0.868025 1.83181 -1.87504 0.480848 0.868278 0.12198 + -0.859635 1.83394 -1.87879 -0.572641 0.751897 0.326701 + -0.853887 1.91951 -1.92509 0.681865 0.0276575 0.730955 + -0.868325 1.91479 -1.91271 0.436889 -0.0447324 0.898403 + -0.899833 1.91406 -1.90688 0.0856429 -0.115061 0.98966 + -0.856237 1.99271 -1.92384 0.898733 0.0264964 0.437696 + -0.864832 1.98759 -1.91067 0.763181 -0.0754142 0.641769 + -0.879269 1.98287 -1.89829 0.472665 -0.168787 0.864927 + -0.899367 1.98098 -1.89281 0.133559 -0.226189 0.964884 + -0.857158 2.06436 -1.91706 0.995708 0.0793665 0.0476076 + -0.860908 2.05907 -1.90378 0.918178 -0.0545638 0.392392 + -0.869502 2.05395 -1.89061 0.772328 -0.142413 0.619055 + -0.880929 2.05021 -1.88067 0.495327 -0.225271 0.83899 + -0.901027 2.04832 -1.87518 0.132524 -0.270489 0.953558 + -0.861808 2.0727 -1.93566 0.931351 0.210518 -0.2971 + -0.867014 2.12826 -1.90784 0.927464 0.263012 -0.265772 + -0.863574 2.12212 -1.8939 0.991933 0.113423 0.0566146 + -0.867324 2.11682 -1.88062 0.916317 -0.0513061 0.397153 + -0.87367 2.11305 -1.87094 0.77529 -0.154392 0.612444 + -0.878996 2.13748 -1.92777 0.715735 0.41222 -0.563736 + -0.883524 2.18432 -1.89326 0.719656 0.474219 -0.50716 + -0.875746 2.17829 -1.88002 0.917037 0.323776 -0.232834 + -0.872306 2.17216 -1.86609 0.983122 0.156257 0.0951539 + -0.874821 2.1688 -1.85752 0.909935 -0.0128292 0.414553 + -0.899644 2.1887 -1.90242 0.303733 0.602417 -0.738133 + -0.899835 2.21595 -1.87905 0.29912 0.768633 -0.565447 + -0.889857 2.21324 -1.87334 0.648607 0.66545 -0.369439 + -0.882079 2.20722 -1.8601 0.845047 0.525506 -0.0986827 + -0.879976 2.2035 -1.85141 0.900993 0.392586 0.184629 + -0.916994 2.18952 -1.9036 -0.145667 0.624458 -0.767355 + -0.917186 2.21677 -1.88024 -0.148733 0.79045 -0.594195 + -0.913686 2.22178 -1.86936 -0.0757237 0.959204 -0.272385 + -0.904212 2.22133 -1.86872 0.199324 0.946208 -0.254874 + -0.894234 2.21862 -1.86301 0.491371 0.869143 -0.0560893 + -0.934578 2.18666 -1.89663 -0.60088 0.537352 -0.591773 + -0.92809 2.21496 -1.87591 -0.531203 0.721473 -0.444186 + -0.92459 2.21998 -1.86504 -0.401493 0.908865 -0.11299 + -0.91427 2.22287 -1.85953 -0.0943551 0.987527 0.126045 + -0.904796 2.22242 -1.85888 0.167034 0.975496 0.143206 + -0.938168 2.20966 -1.86371 -0.751742 0.617742 -0.23082 + -0.930047 2.21705 -1.85831 -0.508322 0.860752 0.0267324 + -0.919726 2.21994 -1.85279 -0.199258 0.93073 0.306655 + -0.900609 2.2191 -1.8516 0.24828 0.911126 0.328947 + -0.890047 2.21531 -1.85573 0.581041 0.804545 0.122876 + -0.942085 2.20654 -1.85644 -0.861492 0.507481 0.0171726 + -0.933964 2.21393 -1.85105 -0.563602 0.794978 0.224414 + -0.919546 2.21771 -1.84761 -0.154374 0.905053 0.396292 + -0.900429 2.21687 -1.84642 0.225836 0.89461 0.385579 + -0.887945 2.21159 -1.84705 0.606595 0.726205 0.323526 + -0.950847 2.17345 -1.86696 -0.952334 0.078585 0.294762 + -0.941871 2.20398 -1.85051 -0.864557 0.320035 0.387451 + -0.933822 2.2126 -1.84796 -0.559385 0.693128 0.454601 + -0.919404 2.21638 -1.84453 -0.161879 0.912198 0.376417 + -0.944789 2.16896 -1.85581 -0.837255 -0.0691901 0.542417 + -0.938143 2.20116 -1.84379 -0.771091 0.19883 0.604885 + -0.930094 2.20979 -1.84125 -0.532186 0.60023 0.597078 + -0.940668 2.11102 -1.86436 -0.628058 -0.206575 0.750247 + -0.935579 2.16434 -1.84469 -0.631606 -0.184478 0.753021 + -0.928933 2.19654 -1.83267 -0.57054 0.0866882 0.816682 + -0.925103 2.20724 -1.83516 -0.44788 0.487353 0.749593 + -0.920719 2.2149 -1.84083 -0.294218 0.865521 0.405351 + -0.924527 2.10799 -1.85717 -0.233295 -0.298719 0.925387 + -0.919437 2.16131 -1.8375 -0.219988 -0.290115 0.931364 + -0.918901 2.19468 -1.82816 -0.221872 0.0014846 0.975074 + -0.915071 2.20537 -1.83064 -0.141283 0.377201 0.915292 + -0.915728 2.21235 -1.83474 -0.144588 0.722509 0.676073 + -0.925454 2.04843 -1.87543 -0.224325 -0.259764 0.939256 + -0.9001 2.10789 -1.85691 0.138099 -0.312533 0.939815 + -0.903484 2.16126 -1.83738 0.131391 -0.302029 0.944201 + -0.902948 2.19464 -1.82803 0.135924 -0.00864692 0.990682 + -0.906382 2.20538 -1.83059 0.089429 0.38116 0.920173 + -0.885096 2.10931 -1.861 0.492325 -0.257347 0.831498 + -0.888481 2.16268 -1.84146 0.494971 -0.237133 0.835926 + -0.893706 2.19554 -1.83051 0.451474 0.0490219 0.890937 + -0.89714 2.20628 -1.83307 0.352343 0.484708 0.80057 + -0.881167 2.16503 -1.84784 0.768296 -0.127721 0.627223 + -0.886392 2.19788 -1.83688 0.715913 0.154928 0.680784 + -0.893239 2.20754 -1.8365 0.49748 0.577045 0.647713 + -0.903138 2.21362 -1.83813 0.220427 0.843785 0.489325 + -0.907039 2.21236 -1.8347 0.096214 0.748224 0.656433 + -0.882491 2.20014 -1.84284 0.835106 0.247086 0.491473 + -0.889338 2.20981 -1.84245 0.563963 0.650341 0.508924 + -0.901823 2.2151 -1.84183 0.202977 0.883083 0.423042 + -0.898077 1.8886 -1.8564 0.518111 0.556197 -0.649774 + -0.875236 1.87903 -1.83599 0.846299 0.387714 -0.365316 + -0.92575 1.94566 -1.82462 0.171458 0.593205 -0.786581 + -0.898595 1.94146 -1.81495 0.542702 0.516385 -0.662435 + -0.883017 1.93465 -1.80089 0.847656 0.360433 -0.389317 + -0.868018 1.8683 -1.81446 0.971283 0.213673 -0.104658 + -0.947222 1.9451 -1.82456 -0.227698 0.618468 -0.752098 + -0.926855 2.00147 -1.78457 0.173959 0.564206 -0.8071 + -0.904837 1.99813 -1.77673 0.537006 0.499941 -0.679473 + -0.889259 1.99131 -1.76266 0.854599 0.344783 -0.38831 + -0.875799 1.92392 -1.77936 0.98336 0.176696 -0.0422115 + -0.967479 1.93991 -1.81463 -0.59938 0.549396 -0.582158 + -0.964441 1.99668 -1.77653 -0.612914 0.458499 -0.643518 + -0.948327 2.00093 -1.78451 -0.264128 0.550108 -0.792223 + -0.929849 2.05409 -1.74962 0.168641 0.545752 -0.820801 + -0.907831 2.05075 -1.74177 0.544322 0.479941 -0.688019 + -0.979742 1.93388 -1.803 -0.82864 0.422735 -0.366948 + -0.976704 1.99065 -1.76489 -0.840179 0.333522 -0.427624 + -0.971109 2.04514 -1.73312 -0.833151 0.349815 -0.428356 + -0.961994 2.04944 -1.74159 -0.611665 0.45846 -0.644733 + -0.94588 2.05369 -1.74957 -0.258507 0.539275 -0.801471 + -0.986619 1.92615 -1.78642 -0.990239 0.0496371 0.130245 + -0.982223 1.9849 -1.75249 -0.996053 0.0474061 0.0750426 + -0.976628 2.03938 -1.72072 -0.991546 0.0751098 0.105804 + -0.967821 2.09275 -1.6951 -0.984165 0.139841 0.108922 + -0.964161 2.09645 -1.70299 -0.825811 0.386307 -0.410856 + -0.974871 1.91696 -1.76556 -0.80809 -0.248648 0.534008 + -0.970475 1.97571 -1.73163 -0.803979 -0.234041 0.546665 + -0.967581 2.03238 -1.70531 -0.80249 -0.182964 0.567921 + -0.942573 1.90333 -1.73659 -0.575579 -0.362017 0.733247 + -0.943649 1.96439 -1.70755 -0.581096 -0.3389 0.739915 + -0.940755 2.02107 -1.68121 -0.577969 -0.280643 0.766284 + -0.94082 2.07818 -1.66356 -0.583374 -0.22183 0.781324 + -0.958773 2.08575 -1.67969 -0.792195 -0.133038 0.59559 + -0.919433 1.89794 -1.72668 -0.0542489 -0.408274 0.911246 + -0.92051 1.959 -1.69764 -0.0193238 -0.407389 0.91305 + -0.923508 2.01709 -1.67346 -0.0343958 -0.340261 0.939702 + -0.900583 1.90086 -1.73367 0.534187 -0.289061 0.79441 + -0.906322 1.96132 -1.70327 0.542863 -0.31848 0.777091 + -0.90932 2.01941 -1.6791 0.551249 -0.263009 0.791802 + -0.914512 2.0758 -1.65953 0.549208 -0.200559 0.811262 + -0.923574 2.07421 -1.65581 -0.0139618 -0.270927 0.962499 + -0.887602 1.90638 -1.74452 0.78684 -0.161921 0.595537 + -0.893341 1.96685 -1.71412 0.78975 -0.200115 0.57987 + -0.899932 2.02347 -1.68723 0.788215 -0.162624 0.593524 + -0.877244 1.91512 -1.76182 0.952226 0.00601591 0.305335 + -0.885018 1.97388 -1.72792 0.953755 -0.0384077 0.298121 + -0.891609 2.03049 -1.70102 0.951921 -0.0154722 0.305951 + -0.899657 2.08452 -1.67669 0.944719 0.0220269 0.327141 + -0.905124 2.07985 -1.66766 0.786176 -0.108657 0.608376 + -0.864252 1.84981 -1.79008 0.966876 0.0489869 0.250502 + -0.883573 1.98269 -1.74545 0.987444 0.152307 -0.0419132 + -0.890487 2.03708 -1.71403 0.987584 0.1536 -0.0329262 + -0.858926 1.81218 -1.84164 0.664845 0.675499 0.318875 + -0.841258 1.79639 -1.82149 -0.61065 0.425129 0.66811 + -0.850536 1.81431 -1.84539 -0.607895 0.5645 0.558393 + -0.834888 1.8565 -1.80171 -0.826924 -0.00906901 0.562241 + -0.844166 1.87442 -1.82561 -0.962704 0.0740148 0.260237 + -0.846085 1.88573 -1.84883 -0.973236 0.229664 -0.00818601 + -0.804706 1.91816 -1.76949 -0.561861 -0.120121 0.818464 + -0.821388 1.92561 -1.78316 -0.789027 -0.0112169 0.614255 + -0.829458 1.93372 -1.79905 -0.936361 0.121828 0.32922 + -0.789766 1.98404 -1.74871 -0.561475 -0.147216 0.814293 + -0.801708 1.9894 -1.75827 -0.777055 -0.03013 0.628711 + -0.809777 1.99751 -1.77415 -0.934908 0.128643 0.330754 + -0.794748 2.05477 -1.74833 -0.945186 0.0750444 0.317791 + -0.777267 2.04384 -1.72806 -0.571272 -0.174297 0.80204 + -0.789209 2.04921 -1.73761 -0.787247 -0.069725 0.612683 + -0.779755 2.10356 -1.71724 -0.783138 -0.0685071 0.618063 + -0.785294 2.10913 -1.72796 -0.948193 0.0738797 0.308985 + -0.78617 2.11424 -1.73815 -0.973798 0.226272 -0.0227727 + -0.768143 2.0409 -1.72353 -0.332436 -0.23951 0.912207 + -0.763122 2.09719 -1.70674 -0.340436 -0.212928 0.915841 + -0.772245 2.10013 -1.71128 -0.573704 -0.159394 0.803404 + -0.766734 2.1336 -1.70203 -0.508138 0.111972 0.853966 + -0.774245 2.13703 -1.70799 -0.708054 0.190319 0.680028 + -0.757729 2.04002 -1.72191 0.178542 -0.291066 0.939895 + -0.757071 2.09656 -1.70567 0.150243 -0.246523 0.95742 + -0.75523 2.13133 -1.69808 0.152532 0.0355986 0.987657 + -0.761281 2.13195 -1.69915 -0.310536 0.0692003 0.948039 + -0.743801 2.09981 -1.71239 0.579289 -0.207903 0.788163 + -0.74713 2.13302 -1.70226 0.527554 0.0640502 0.847103 + -0.755835 2.14043 -1.70129 0.0990452 0.516459 0.850565 + -0.759235 2.14083 -1.70197 -0.171923 0.532972 0.828482 + -0.764689 2.14247 -1.70485 -0.328024 0.515329 0.79173 + -0.733132 2.13791 -1.7138 0.77269 0.169625 0.6117 + -0.739654 2.14489 -1.71206 0.539825 0.511604 0.668469 + -0.747735 2.14211 -1.70547 0.367001 0.499715 0.784598 + -0.754787 2.14898 -1.7107 0.0287611 0.813766 0.58048 + -0.735982 2.14919 -1.72174 0.660969 0.69888 0.273288 + -0.741885 2.15134 -1.71689 0.366379 0.80411 0.468159 + -0.749965 2.14857 -1.71031 0.121882 0.75127 0.648644 + -0.738873 2.15246 -1.72863 0.591972 0.802438 0.0752545 + -0.744775 2.15462 -1.72378 0.250857 0.930569 0.26667 + -0.747427 2.15531 -1.72503 0.102425 0.964875 0.241921 + -0.752249 2.15573 -1.72543 0.0567275 0.966348 0.250906 + -0.742707 2.15526 -1.73428 0.426068 0.902384 -0.0645667 + -0.751736 2.15664 -1.73613 0.064452 0.980341 -0.186489 + -0.758081 2.15687 -1.73569 -0.0867116 0.979051 -0.184228 + -0.758594 2.15595 -1.72499 0.0179766 0.970601 0.240022 + -0.760438 2.15313 -1.74346 -0.200144 0.761241 -0.616809 + -0.768046 2.15199 -1.74006 -0.515642 0.704922 -0.487029 + -0.765689 2.15572 -1.73229 -0.331076 0.93559 -0.122717 + -0.762939 2.15581 -1.72408 -0.0825165 0.974132 0.210374 + -0.758188 2.14939 -1.71139 0.0361829 0.838524 0.543662 + -0.773998 2.12286 -1.75831 -0.590362 0.494304 -0.638073 + -0.781665 2.11969 -1.75026 -0.844155 0.382533 -0.375594 + -0.775713 2.14882 -1.73203 -0.773952 0.592416 -0.2237 + -0.769972 2.15396 -1.7278 -0.517527 0.85566 0.00334636 + -0.778422 2.14553 -1.72462 -0.884606 0.458474 0.0852825 + -0.772681 2.15067 -1.72039 -0.6473 0.715473 0.262872 + -0.767222 2.15404 -1.71959 -0.264127 0.903473 0.337598 + -0.766757 2.15118 -1.71388 -0.249765 0.81174 0.527917 + -0.762532 2.14923 -1.71048 -0.0513883 0.783867 0.618798 + -0.777547 2.14042 -1.71443 -0.85531 0.30921 0.415733 + -0.772216 2.14781 -1.71469 -0.625173 0.616445 0.478701 + -0.768914 2.14442 -1.70824 -0.461629 0.545008 0.699903 + -0.896173 2.04571 -1.73124 0.852378 0.33821 -0.39883 + -0.902247 2.09678 -1.70099 0.853588 0.353568 -0.382593 + -0.898535 2.0911 -1.6897 0.982411 0.18483 -0.0265714 + -0.913905 2.10183 -1.71152 0.534685 0.493855 -0.685725 + -0.915885 2.1311 -1.69088 0.512512 0.679784 -0.524619 + -0.908567 2.12793 -1.68416 0.789026 0.558116 -0.256796 + -0.904856 2.12225 -1.67287 0.914534 0.39122 0.102834 + -0.928436 2.10401 -1.71672 0.17659 0.556279 -0.812016 + -0.930417 2.13328 -1.69608 0.143695 0.746448 -0.649743 + -0.928869 2.13787 -1.6866 0.130476 0.937204 -0.323457 + -0.920691 2.13664 -1.68365 0.369071 0.896298 -0.245837 + -0.913373 2.13348 -1.67694 0.594563 0.803065 0.0397582 + -0.944467 2.1036 -1.71668 -0.265249 0.55625 -0.787546 + -0.940495 2.13301 -1.69609 -0.238828 0.748553 -0.61857 + -0.938947 2.1376 -1.68661 -0.203807 0.950276 -0.235453 + -0.930782 2.13926 -1.67936 -0.00554265 0.994069 0.108607 + -0.922603 2.13803 -1.67642 0.21954 0.957616 0.18648 + -0.955045 2.10075 -1.71145 -0.603677 0.485447 -0.632388 + -0.951073 2.13016 -1.69085 -0.558143 0.689945 -0.460926 + -0.944925 2.13601 -1.68367 -0.388554 0.915155 -0.107322 + -0.93676 2.13768 -1.67643 -0.167905 0.95056 0.261235 + -0.920523 2.13485 -1.67008 0.222289 0.894467 0.387965 + -0.956856 2.1275 -1.68586 -0.747685 0.606096 -0.271319 + -0.950708 2.13335 -1.67869 -0.505349 0.861755 0.0447305 + -0.941192 2.13458 -1.67025 -0.18028 0.922367 0.34167 + -0.935932 2.13522 -1.67151 -0.00962236 0.895916 0.44412 + -0.960516 2.1238 -1.67797 -0.903379 0.365592 0.224163 + -0.952845 2.13125 -1.67428 -0.622023 0.705203 0.340259 + -0.943329 2.13249 -1.66584 -0.33745 0.772634 0.53774 + -0.933078 2.12816 -1.65663 -0.149264 0.699564 0.698806 + -0.928012 2.12912 -1.65881 0.066609 0.816345 0.573711 + -0.954746 2.11933 -1.66807 -0.752944 0.118138 0.647394 + -0.947075 2.12678 -1.66438 -0.588024 0.406755 0.699127 + -0.936824 2.12246 -1.65517 -0.45541 0.349474 0.818822 + -0.92593 2.12005 -1.65015 0.0135759 0.440806 0.897499 + -0.936793 2.11176 -1.65195 -0.528903 0.0184661 0.848481 + -0.925899 2.10935 -1.64693 -0.0298801 -0.00698216 0.999529 + -0.916837 2.11094 -1.65066 0.515214 0.0619137 0.854822 + -0.920864 2.121 -1.65233 0.34043 0.495817 0.79892 + -0.922753 2.12975 -1.66006 0.159706 0.786187 0.596996 + -0.919695 2.13239 -1.66517 0.249706 0.844514 0.473754 + -0.911034 2.11345 -1.65579 0.719545 0.133633 0.681467 + -0.915061 2.12352 -1.65745 0.509886 0.52847 0.678775 + -0.912004 2.12616 -1.66256 0.611037 0.59839 0.518231 + -0.911292 2.13029 -1.6706 0.652367 0.709064 0.267667 + -0.905567 2.11812 -1.66483 0.875649 0.252918 0.411426 + 1.04961 1.36119 -2.08699 -0.131768 -0.902901 -0.409154 + 1.04271 1.37679 -2.1176 -0.250658 -0.939358 -0.234046 + 1.08487 1.3765 -2.12848 0.533065 -0.771504 -0.347309 + 0.976448 1.39491 -2.1025 -0.287715 -0.931588 -0.222181 + 1.03001 1.38062 -2.12265 -0.242302 -0.967651 0.0702951 + 1.06181 1.37216 -2.13123 -0.22663 -0.973001 0.0436826 + 1.07451 1.36833 -2.12618 0.16456 -0.954374 -0.249179 + 1.09355 1.37119 -2.09712 0.46366 -0.80056 -0.379636 + 1.05697 1.33738 -2.04067 -0.0863122 -0.907604 -0.410859 + 0.995344 1.34393 -2.00981 -0.275708 -0.879949 -0.386879 + 0.983343 1.37932 -2.07189 -0.295348 -0.865756 -0.404025 + 1.1117 1.39962 -2.10918 0.894676 -0.351076 -0.276225 + 1.10092 1.34738 -2.0508 0.601411 -0.777036 -0.185796 + 1.05999 1.32342 -2.00723 0.20829 -0.974853 0.0792307 + 0.998363 1.32996 -1.97637 -0.128317 -0.9871 -0.0957466 + 0.961258 1.34933 -1.99936 -0.052712 -0.881542 -0.469153 + 1.10301 1.40494 -2.14053 0.848584 -0.463426 -0.255227 + 1.12189 1.4465 -2.09138 0.981421 -0.174417 -0.0799454 + 1.12052 1.38342 -2.03799 0.931466 -0.358136 0.0641006 + 1.10104 1.3795 -1.98664 0.776029 -0.415731 0.474285 + 1.08144 1.34347 -1.99944 0.627897 -0.648194 0.430801 + 1.08236 1.37812 -2.13585 0.564459 -0.731405 -0.382665 + 1.078 1.38547 -2.16349 0.54335 -0.80397 -0.241668 + 1.09865 1.4123 -2.16816 0.835809 -0.506503 -0.211843 + 1.1238 1.4619 -2.14593 0.95782 -0.27263 -0.0908475 + 1.072 1.36994 -2.13355 0.190886 -0.904042 -0.382455 + 1.03997 1.37308 -2.15319 0.0163271 -0.999835 0.00795208 + 1.05482 1.38207 -2.20798 0.451542 -0.858432 -0.243319 + 1.0973 1.42511 -2.21268 0.803472 -0.541293 -0.24786 + 1.12245 1.47471 -2.19044 0.935144 -0.336898 -0.10957 + 1.02978 1.37531 -2.15087 -0.183818 -0.967505 0.173624 + 1.01679 1.36969 -2.19769 -0.00580261 -0.991659 -0.128757 + 1.04752 1.38995 -2.23971 0.323173 -0.811759 -0.486421 + 1.09001 1.43298 -2.24439 0.74219 -0.521644 -0.420764 + 1.11068 1.47223 -2.24293 0.844709 -0.298068 -0.444548 + 1.01155 1.38294 -2.1313 -0.197945 -0.957816 0.208344 + 0.958305 1.38611 -2.16114 -0.236594 -0.966147 0.102877 + 0.928203 1.39501 -2.17716 -0.334852 -0.935599 -0.111925 + 0.986688 1.37858 -2.21372 -0.246594 -0.923243 -0.294642 + 1.0136 1.39205 -2.2446 -0.0996887 -0.773555 -0.62584 + 0.973508 1.39608 -2.10977 -0.238834 -0.96828 0.0734327 + 0.955048 1.39841 -2.11842 -0.172716 -0.955008 0.241098 + 0.940077 1.39375 -2.14157 -0.191601 -0.966244 0.172228 + 0.903603 1.40282 -2.17041 -0.0885365 -0.967359 -0.237438 + 0.920522 1.4091 -2.21389 -0.378917 -0.845978 -0.375157 + 0.943567 1.40308 -2.09509 -0.0862686 -0.945055 -0.315323 + 0.940627 1.40425 -2.10236 -0.0119251 -0.999809 0.0154635 + 0.930671 1.40194 -2.11612 0.0881901 -0.988164 0.125516 + 0.915701 1.39729 -2.13927 0.0471119 -0.998054 -0.0408384 + 0.949257 1.38472 -2.06144 -0.055475 -0.878471 -0.474565 + 0.941563 1.38446 -2.06353 0.387593 -0.780663 -0.490242 + 0.935873 1.40281 -2.09718 0.418348 -0.846774 -0.32857 + 0.925917 1.4005 -2.11096 0.473359 -0.856025 -0.207731 + 0.95376 1.34832 -1.99973 0.326307 -0.834517 -0.443965 + 0.926763 1.33242 -2.00984 0.502812 -0.809181 -0.303985 + 0.914566 1.36855 -2.07365 0.611121 -0.669775 -0.421821 + 0.903042 1.38081 -2.11155 0.647879 -0.671728 -0.359214 + 0.961228 1.33076 -1.96753 -0.231518 -0.965319 -0.120657 + 0.954216 1.33504 -1.9559 0.0567867 -0.973061 0.223446 + 0.922622 1.32598 -1.96426 0.265338 -0.949518 0.167367 + 0.869015 1.31044 -2.04502 0.203827 -0.946168 -0.251438 + 0.968726 1.33177 -1.96715 0.0193318 -0.990625 -0.135232 + 0.969109 1.33213 -1.96502 0.0525341 -0.955666 0.289728 + 0.962097 1.33641 -1.9534 0.105094 -0.897294 0.428742 + 0.940689 1.34888 -1.92073 0.130125 -0.851872 0.507328 + 0.909096 1.33982 -1.92908 0.149481 -0.834531 0.530296 + 0.998746 1.33032 -1.97424 -0.00829376 -0.962241 0.272072 + 0.970212 1.3437 -1.94403 0.089345 -0.898757 0.429248 + 0.948804 1.35617 -1.91136 0.175166 -0.708052 0.68409 + 0.893374 1.36083 -1.90056 0.0448855 -0.599964 0.798767 + 0.864716 1.32173 -1.94058 0.0047596 -0.896294 0.443434 + 1.02149 1.3301 -1.97289 0.187403 -0.875971 0.444471 + 0.992956 1.34349 -1.94269 0.16134 -0.821775 0.546494 + 0.960983 1.37358 -1.90222 0.191438 -0.565118 0.802492 + 0.905553 1.37825 -1.89143 0.0205218 -0.444223 0.895681 + 0.848994 1.34274 -1.91206 -0.123856 -0.657224 0.743449 + 1.04294 1.35016 -1.9651 0.438506 -0.631287 0.639679 + 1.00874 1.35683 -1.93603 0.364965 -0.651724 0.664873 + 0.976767 1.38693 -1.89556 0.215561 -0.517039 0.828374 + 0.955031 1.42883 -1.87211 0.152066 -0.332594 0.93073 + 1.04907 1.39376 -1.9313 0.520519 -0.487289 0.701148 + 1.01487 1.40043 -1.90222 0.450038 -0.412157 0.792208 + 0.993137 1.44233 -1.87877 0.29903 -0.286766 0.910135 + 1.09989 1.41162 -1.9656 0.717945 -0.359919 0.595829 + 1.04792 1.42587 -1.91027 0.446156 -0.373659 0.813218 + 1.00553 1.4729 -1.87392 0.392448 -0.225212 0.891776 + 0.921796 1.52442 -1.84221 0.0999696 -0.232572 0.967428 + 1.13071 1.43029 -2.0202 0.989073 -0.102223 0.106236 + 1.11441 1.4261 -1.97307 0.825519 -0.358387 0.435977 + 1.05085 1.45934 -1.90621 0.593301 -0.167812 0.787295 + 1.00846 1.50637 -1.86986 0.580374 -0.226143 0.782321 + 1.12231 1.48799 -1.98729 0.967294 -0.0513573 0.248405 + 1.106 1.4838 -1.94016 0.818237 -0.0995733 0.566192 + 1.06537 1.47382 -1.91368 0.574682 -0.272768 0.771582 + 1.04694 1.51267 -1.8849 0.47682 -0.326702 0.816032 + 0.997493 1.55542 -1.847 0.271337 -0.334732 0.902403 + 1.13649 1.51456 -2.04099 0.983587 -0.142519 0.110659 + 1.12764 1.56808 -1.99769 0.952457 -0.0314376 0.303048 + 1.11346 1.54151 -1.94398 0.897598 -0.00508183 0.440786 + 1.08758 1.52264 -1.91138 0.716932 -0.166609 0.676941 + 1.03598 1.56173 -1.86204 0.467024 -0.312896 0.827034 + 1.1384 1.52996 -2.09554 0.985516 -0.168419 0.0198111 + 1.14059 1.60047 -2.03354 0.976671 -0.0318639 0.212362 + 1.11401 1.61167 -1.94958 0.891091 -0.0355853 0.452428 + 1.08501 1.58649 -1.90741 0.824324 -0.00211003 0.566115 + 1.05913 1.56764 -1.87481 0.663177 -0.174442 0.727851 + 1.1412 1.532 -2.156 0.970231 -0.241954 0.0105141 + 1.14887 1.58865 -2.13019 0.997047 -0.071887 0.0270195 + 1.14607 1.58662 -2.06973 0.984424 -0.110699 0.136586 + 1.14066 1.67979 -2.04604 0.965172 0.162581 0.204963 + 1.12697 1.64406 -1.98544 0.933678 0.097892 0.344475 + 1.12601 1.49299 -2.22076 0.922224 -0.292944 -0.252363 + 1.14477 1.55028 -2.18632 0.982319 -0.180492 -0.0497236 + 1.14975 1.61081 -2.15505 0.999523 -0.0288958 0.0108836 + 1.14614 1.66593 -2.08223 0.991982 0.0749081 0.101791 + 1.14556 1.56771 -2.21169 0.899218 0.0634379 -0.432878 + 1.15054 1.62825 -2.18043 0.941677 0.144045 -0.30413 + 1.14702 1.68809 -2.10709 0.987258 0.107658 0.117178 + 1.12907 1.73891 -2.06777 0.877959 0.386478 0.282528 + 1.12418 1.7134 -2.0251 0.855721 0.369959 0.361762 + 1.13023 1.54695 -2.23386 0.737889 0.0181865 -0.674677 + 1.13472 1.63559 -2.19829 0.534063 0.397288 -0.746284 + 1.14784 1.70525 -2.13236 0.930519 0.309847 -0.195269 + 1.12989 1.75606 -2.09305 0.79998 0.599973 0.00799541 + 1.08355 1.46722 -2.27512 0.49076 -0.106603 -0.864749 + 1.0787 1.49585 -2.27286 0.228593 0.23567 -0.944566 + 1.12538 1.57558 -2.23162 0.527381 0.300771 -0.794611 + 1.06288 1.42796 -2.27657 0.387442 -0.455687 -0.801398 + 1.02895 1.43006 -2.28148 -0.0718649 -0.335529 -0.939285 + 1.03233 1.48352 -2.27793 -0.0574481 0.196585 -0.978802 + 1.09129 1.58679 -2.23392 0.0858916 0.436199 -0.895742 + 1.10063 1.64679 -2.2006 0.157825 0.492696 -0.85577 + 0.954314 1.44138 -2.26401 -0.264294 -0.290317 -0.919709 + 0.95769 1.49484 -2.26045 -0.220935 0.189697 -0.956662 + 0.983508 1.56755 -2.24452 -0.125779 0.370253 -0.920376 + 1.04491 1.57445 -2.23899 0.0250319 0.401769 -0.915399 + 0.986422 1.38955 -2.23237 -0.266731 -0.759487 -0.593324 + 0.927139 1.43888 -2.25177 -0.278707 -0.624851 -0.729304 + 0.902475 1.44951 -2.25152 -0.307582 -0.287589 -0.90702 + 0.886486 1.45631 -2.24676 -0.451423 -0.138814 -0.881446 + 0.899092 1.49376 -2.24544 -0.364987 0.230434 -0.902045 + 0.920256 1.42007 -2.23255 -0.331344 -0.728773 -0.599251 + 0.895592 1.4307 -2.23229 -0.261028 -0.749166 -0.608781 + 0.887581 1.43198 -2.23119 -0.350441 -0.71197 -0.608514 + 0.895922 1.41692 -2.20714 -0.271922 -0.878812 -0.392106 + 0.887911 1.4182 -2.20603 -0.0235074 -0.849692 -0.526755 + 0.871592 1.43878 -2.22644 -0.360939 -0.50584 -0.783485 + 0.848608 1.46705 -2.22149 -0.631461 0.0930117 -0.769809 + 0.861214 1.50451 -2.22016 -0.501608 0.260556 -0.824924 + 0.896651 1.40107 -2.16767 0.250692 -0.885279 -0.391707 + 0.87123 1.41119 -2.20415 0.132127 -0.714936 -0.686592 + 0.848054 1.43546 -2.2199 -0.426623 -0.310922 -0.849306 + 0.828642 1.45837 -2.20087 -0.697863 -0.0299321 -0.715606 + 0.908748 1.39554 -2.13654 0.451296 -0.861089 -0.234217 + 0.885873 1.37584 -2.13714 0.60735 -0.672591 -0.422785 + 0.87997 1.39407 -2.16579 0.433408 -0.748956 -0.50122 + 0.849827 1.37393 -2.17447 0.00936951 -0.75254 -0.65848 + 0.847692 1.40788 -2.19762 -0.303254 -0.567248 -0.765681 + 0.855708 1.33141 -2.11817 0.165908 -0.852228 -0.496168 + 0.85573 1.3557 -2.14582 0.178927 -0.766808 -0.616433 + 0.867232 1.31915 -2.08026 0.304715 -0.901031 -0.308695 + 0.805212 1.33538 -2.08529 -0.534241 -0.772149 -0.344053 + 0.820131 1.35095 -2.12545 -0.514085 -0.672283 -0.532684 + 0.820154 1.37524 -2.1531 -0.597739 -0.559523 -0.574145 + 0.830224 1.39283 -2.17614 -0.624861 -0.447197 -0.639971 + 0.806994 1.32668 -2.05006 -0.452102 -0.873865 -0.178784 + 0.734565 1.38336 -2.02192 -0.851573 -0.466162 -0.239826 + 0.762071 1.40805 -2.09246 -0.841218 -0.317852 -0.437405 + 0.77699 1.42361 -2.13262 -0.786059 -0.231106 -0.573325 + 0.812106 1.3154 -2.0035 -0.407687 -0.912606 0.0306993 + 0.739676 1.37208 -1.97537 -0.764618 -0.62717 0.148381 + 0.710452 1.44335 -1.94262 -0.930888 -0.275506 0.239881 + 0.710439 1.46348 -1.99338 -0.975935 -0.0621682 -0.209013 + 0.737945 1.48817 -2.06393 -0.919145 0.0581182 -0.389608 + 0.864873 1.304 -1.99944 0.0540454 -0.997151 0.0526146 + 0.811948 1.33311 -1.94464 -0.373796 -0.826429 0.42106 + 0.768371 1.36311 -1.93854 -0.56393 -0.669294 0.483765 + 0.739147 1.43438 -1.90578 -0.620506 -0.418801 0.663007 + 0.805417 1.37274 -1.90596 -0.306034 -0.517645 0.798991 + 0.797364 1.42541 -1.88466 -0.231579 -0.402922 0.885452 + 0.742741 1.5156 -1.86294 -0.617854 -0.326273 0.715403 + 0.710269 1.54832 -1.89964 -0.953683 -0.108947 0.280392 + 0.710255 1.56845 -1.95041 -0.975956 0.087641 -0.199573 + 0.897501 1.43092 -1.87013 -0.0429599 -0.343876 0.938032 + 0.864266 1.5265 -1.84023 0.0512776 -0.341215 0.938586 + 0.800958 1.50662 -1.84181 -0.11434 -0.430144 0.89549 + 0.787413 1.572 -1.81563 -0.202424 -0.344449 0.916722 + 0.743671 1.58188 -1.83554 -0.64638 -0.260911 0.71702 + 0.934186 1.55499 -1.83735 0.12861 -0.315775 0.940077 + 0.85072 1.59187 -1.81405 0.0914737 -0.395346 0.913966 + 0.842039 1.62036 -1.79979 0.0335323 -0.298541 0.953808 + 0.785535 1.61948 -1.80175 -0.237605 -0.245062 0.939941 + 0.741793 1.62937 -1.82166 -0.661079 -0.167372 0.73141 + 0.976505 1.59867 -1.82601 0.176379 -0.430619 0.885131 + 0.913198 1.59822 -1.81636 0.0915963 -0.421893 0.902007 + 0.904516 1.62672 -1.80212 0.0674758 -0.330093 0.941534 + 0.887647 1.66415 -1.79206 0.0163266 -0.114962 0.993236 + 0.837177 1.66114 -1.7921 -0.0135795 -0.0687643 0.99754 + 1.01603 1.59645 -1.83673 0.396192 -0.345262 0.85078 + 0.960783 1.62859 -1.80535 0.20275 -0.281948 0.937762 + 0.943913 1.66603 -1.7953 0.244554 -0.072172 0.966946 + 1.03918 1.60236 -1.84948 0.639783 -0.108202 0.760901 + 1.00031 1.62638 -1.81606 0.432675 -0.148971 0.889157 + 0.988692 1.68218 -1.81608 0.529352 0.130746 0.838267 + 0.914365 1.71912 -1.78871 0.175173 -0.0901935 0.980398 + 1.05772 1.62163 -1.86933 0.754501 0.0404257 0.655053 + 1.01885 1.64567 -1.83592 0.672378 0.124962 0.729584 + 1.03131 1.70976 -1.86119 0.706374 0.254549 0.660485 + 1.00313 1.75498 -1.85138 0.738261 0.158549 0.655617 + 0.959144 1.73527 -1.80948 0.549438 0.0376273 0.834686 + 1.08672 1.64681 -1.9115 0.833922 0.118009 0.539118 + 1.06147 1.67324 -1.88104 0.762678 0.199765 0.615156 + 1.08523 1.7041 -1.93404 0.82692 0.346528 0.442856 + 1.05901 1.73045 -1.90908 0.797211 0.368281 0.478356 + 1.11048 1.67767 -1.96451 0.866277 0.271214 0.419533 + 1.09218 1.73874 -1.99404 0.794826 0.475509 0.377017 + 1.06596 1.7651 -1.96907 0.7875 0.507225 0.350095 + 1.04769 1.78159 -1.95457 0.851349 0.423118 0.310122 + 1.03082 1.77568 -1.89927 0.858434 0.286772 0.425268 + 1.09708 1.76425 -2.0367 0.761803 0.548151 0.345234 + 1.06837 1.78834 -2.0124 0.769436 0.550463 0.323972 + 1.0501 1.80483 -1.99789 0.825668 0.496217 0.268407 + 1.03028 1.81533 -1.93018 0.91773 0.353515 0.181102 + 1.01341 1.80942 -1.87489 0.90755 0.0206805 0.419434 + 1.09549 1.77946 -2.06302 0.672094 0.735425 0.0862512 + 1.06679 1.80356 -2.03872 0.710694 0.694644 0.111284 + 1.03766 1.83134 -2.0135 0.796052 0.605024 -0.0157297 + 1.01403 1.8742 -1.9934 0.858363 0.456876 -0.233403 + 1.02647 1.84769 -1.9778 0.86251 0.431032 0.265119 + 1.11124 1.76217 -2.11859 0.467288 0.724432 -0.506793 + 1.07684 1.78557 -2.08856 0.512797 0.833744 -0.204717 + 1.04531 1.81879 -2.05957 0.567436 0.796265 -0.209709 + 1.01618 1.84657 -2.03436 0.58554 0.706496 -0.397501 + 0.995883 1.8882 -2.01106 0.664036 0.489033 -0.5656 + 1.13202 1.7126 -2.15023 0.51832 0.538245 -0.664558 + 1.07481 1.74248 -2.14068 0.188278 0.55397 -0.810968 + 1.04216 1.79953 -2.11292 0.33298 0.722024 -0.606469 + 1.01063 1.83274 -2.08394 0.384714 0.821899 -0.420092 + 0.978204 1.85524 -2.05445 0.38405 0.755937 -0.530155 + 1.09559 1.6929 -2.17231 0.161811 0.538864 -0.826706 + 1.03252 1.73344 -2.15652 0.10317 0.497943 -0.861051 + 0.999865 1.7905 -2.12876 0.133453 0.56295 -0.815646 + 0.972288 1.8385 -2.09677 0.188299 0.754744 -0.628415 + 1.0558 1.63596 -2.21233 0.0817682 0.450228 -0.889162 + 1.05076 1.68208 -2.18405 0.0516619 0.509271 -0.859054 + 0.980605 1.70774 -2.17046 -0.107032 0.418275 -0.901992 + 0.953246 1.792 -2.13158 -0.0773757 0.468702 -0.879961 + 0.925669 1.84 -2.09959 -0.0907293 0.658803 -0.746825 + 0.994392 1.62906 -2.21786 -0.128752 0.49772 -0.857728 + 0.998842 1.65637 -2.198 -0.141639 0.527294 -0.837794 + 0.917688 1.70239 -2.15691 -0.311428 0.330996 -0.89076 + 0.890328 1.78665 -2.11804 -0.289286 0.384223 -0.876748 + 0.870971 1.82926 -2.08941 -0.321082 0.546554 -0.773424 + 0.916339 1.61308 -2.20198 -0.392093 0.504401 -0.769313 + 0.92079 1.6404 -2.18212 -0.35224 0.456584 -0.816981 + 0.828512 1.71502 -2.10984 -0.526938 0.193591 -0.827562 + 0.810585 1.76854 -2.09241 -0.507016 0.231429 -0.830286 + 0.791228 1.81115 -2.06378 -0.527558 0.582797 -0.618086 + 0.924909 1.56648 -2.22949 -0.332458 0.377131 -0.864433 + 0.841764 1.57271 -2.17745 -0.527686 0.378091 -0.760654 + 0.831614 1.65302 -2.13505 -0.520594 0.319383 -0.791818 + 0.776665 1.70487 -2.06958 -0.815377 0.0302016 -0.578142 + 0.850334 1.5261 -2.20495 -0.490665 0.347792 -0.79893 + 0.813156 1.51146 -2.18697 -0.696756 0.253608 -0.670979 + 0.799498 1.56287 -2.14471 -0.777025 0.258523 -0.573933 + 0.789347 1.64319 -2.10231 -0.814045 0.161517 -0.557891 + 0.824036 1.48986 -2.20217 -0.588341 0.0462795 -0.807288 + 0.805101 1.4887 -2.1814 -0.831474 -0.0140934 -0.555385 + 0.791442 1.54012 -2.13914 -0.864894 0.196373 -0.461948 + 0.772155 1.63086 -2.05582 -0.87607 0.108306 -0.469863 + 0.759473 1.69255 -2.0231 -0.920174 -0.0291921 -0.39042 + 0.809707 1.45721 -2.1801 -0.819657 -0.154198 -0.551712 + 0.782071 1.50568 -2.13663 -0.831698 0.136923 -0.538081 + 0.762784 1.59643 -2.05332 -0.880222 0.198039 -0.431266 + 0.828088 1.42677 -2.19929 -0.716303 -0.313041 -0.623631 + 0.799637 1.43961 -2.15706 -0.77218 -0.162138 -0.614368 + 0.759425 1.48967 -2.11219 -0.851914 0.0911327 -0.515691 + 0.741304 1.59492 -2.00506 -0.900082 0.175812 -0.398675 + 0.739236 1.6697 -1.97481 -0.907583 0.0297168 -0.41882 + 0.749453 1.73526 -2.01205 -0.93301 -0.0940985 -0.34733 + 0.758738 1.75839 -2.05214 -0.818666 0.0477827 -0.572279 + 0.708187 1.64323 -1.92017 -0.978804 0.0175715 -0.204042 + 0.705916 1.68333 -1.91339 -0.980359 -0.00673064 -0.197104 + 0.729217 1.71242 -1.96378 -0.913426 -0.00944856 -0.406895 + 0.727109 1.75134 -1.95088 -0.94254 0.10088 -0.318499 + 0.739652 1.76789 -1.98901 -0.963745 0.00697495 -0.266732 + 0.711199 1.61461 -1.87225 -0.941705 -0.118846 0.314748 + 0.708928 1.65471 -1.86548 -0.946007 -0.052359 0.319889 + 0.711709 1.70214 -1.8583 -0.917127 0.0404303 0.396538 + 0.703809 1.72224 -1.90049 -0.994198 0.0904608 -0.0582032 + 0.744575 1.67681 -1.81449 -0.666117 -0.0195497 0.745591 + 0.751963 1.73191 -1.81056 -0.668395 -0.0232224 0.743444 + 0.721226 1.75027 -1.85204 -0.902406 0.0478873 0.428218 + 0.713326 1.77037 -1.89423 -0.990421 0.124422 -0.0598802 + 0.780673 1.66025 -1.79405 -0.271075 -0.10147 0.957195 + 0.788062 1.71535 -1.79012 -0.200506 -0.0641711 0.977588 + 0.783995 1.77461 -1.7851 -0.236756 -0.118803 0.964278 + 0.75628 1.78762 -1.79999 -0.674165 -0.0951991 0.73242 + 0.819622 1.69804 -1.79435 0.0485028 0.00473611 0.998812 + 0.815555 1.75729 -1.78932 0.309013 -0.0623261 0.949013 + 0.800585 1.84202 -1.77801 0.32229 -0.117136 0.939366 + 0.783561 1.84073 -1.77594 -0.198504 -0.174913 0.964366 + 0.755847 1.85374 -1.79084 -0.630083 -0.210916 0.747335 + 0.870092 1.70105 -1.79431 -0.0810427 -0.0310603 0.996226 + 0.833175 1.76433 -1.79935 0.249001 0.177868 0.95203 + 0.818206 1.84905 -1.78803 0.614126 -0.0835115 0.784777 + 0.804706 1.91816 -1.76949 0.563755 -0.114943 0.817905 + 0.790659 1.91362 -1.76293 0.305111 -0.187189 0.933739 + 0.906958 1.77198 -1.77752 0.215707 -0.280146 0.935408 + 0.862685 1.75391 -1.78312 -0.354468 -0.168924 0.919683 + 0.847077 1.76163 -1.79512 -0.356989 0.598706 0.717015 + 0.855159 1.79369 -1.81726 -0.736962 0.546199 0.398187 + 0.841258 1.79639 -1.82149 0.550371 0.433013 0.713856 + 0.94324 1.78657 -1.79155 0.579369 -0.218619 0.785198 + 0.909069 1.83044 -1.75378 0.0654777 -0.338629 0.938639 + 0.890218 1.83336 -1.76077 -0.505792 -0.156398 0.84836 + 0.87461 1.84108 -1.77277 -0.753847 -0.0273371 0.656481 + 0.864252 1.84981 -1.79008 -0.96432 0.122361 0.234765 + 0.987221 1.80629 -1.83345 0.787426 -0.129193 0.602719 + 0.977649 1.85867 -1.79678 0.77756 -0.252236 0.576001 + 0.94535 1.84504 -1.7678 0.594435 -0.340595 0.728452 + 0.942573 1.90333 -1.73659 0.577675 -0.358421 0.733366 + 0.919433 1.89794 -1.72668 0.0523185 -0.405825 0.912452 + 1.00384 1.8618 -1.83821 0.936587 -0.00700767 0.350366 + 0.986619 1.92615 -1.78642 0.989079 0.060796 0.134264 + 0.974871 1.91696 -1.76556 0.807561 -0.248096 0.535064 + 1.02479 1.83536 -1.92346 0.800739 0.551633 -0.233494 + 0.998351 1.88183 -1.83149 0.930695 0.362723 -0.0473265 + 1.01408 1.83106 -1.94101 0.502432 0.86199 0.0673412 + 0.991474 1.88956 -1.84808 0.718025 0.624288 -0.307741 + 0.979742 1.93388 -1.803 0.830766 0.42629 -0.357918 + 1.01479 1.84131 -1.96075 0.549778 0.561393 0.618532 + 0.972088 1.84258 -1.91983 0.128016 0.976777 -0.171811 + 0.980764 1.88526 -1.86563 0.414956 0.735274 -0.535895 + 0.967479 1.93991 -1.81463 0.59376 0.557094 -0.580599 + 0.976704 1.99065 -1.76489 0.840678 0.332292 -0.427601 + 0.981995 1.92345 -1.94256 0.777505 0.0759679 0.624272 + 0.964709 1.91481 -1.92212 0.564554 -0.0897525 0.820502 + 0.972792 1.85284 -1.93957 0.443915 0.344486 0.827205 + 0.993675 1.92983 -1.9596 0.906861 0.197278 0.372404 + 0.967909 1.99389 -1.92317 0.830085 -0.0334193 0.556634 + 0.950622 1.98525 -1.90273 0.608777 -0.137099 0.781405 + 0.929628 1.91428 -1.90729 0.198376 -0.21833 0.955499 + 0.937711 1.85232 -1.92473 0.283853 0.429933 0.857079 + 0.993954 1.93544 -1.97227 0.919246 0.34275 -0.193675 + 0.976243 2.00544 -1.95092 0.96373 0.224933 -0.143631 + 0.975963 1.99982 -1.93825 0.953762 0.0821907 0.289106 + 0.96098 2.05958 -1.90185 0.84267 -0.0909533 0.530693 + 0.975807 1.94944 -1.98993 0.778914 0.357394 -0.515327 + 0.967668 2.01288 -1.9665 0.837103 0.28847 -0.464805 + 0.969269 2.06972 -1.92641 0.970206 0.185074 -0.156359 + 0.969034 2.06551 -1.91693 0.965329 0.022023 0.260104 + 0.956808 1.9592 -2.01208 0.564425 0.333935 -0.754925 + 0.948669 2.02264 -1.98866 0.600319 0.349677 -0.719266 + 0.945246 2.08526 -1.96032 0.608493 0.386501 -0.693075 + 0.960694 2.07717 -1.94198 0.843505 0.293524 -0.449826 + 0.957905 1.89687 -2.03116 0.416051 0.439163 -0.796265 + 0.926026 1.90248 -2.04141 0.186541 0.442705 -0.877049 + 0.924929 1.9648 -2.02233 0.131254 0.330282 -0.934712 + 0.925222 2.02636 -1.99782 0.158286 0.393945 -0.905402 + 0.939863 1.861 -2.06729 0.172178 0.727475 -0.66418 + 0.889381 1.90294 -2.04387 -0.129103 0.42459 -0.896134 + 0.892353 1.96327 -2.02012 -0.187615 0.373806 -0.908333 + 0.892646 2.02482 -1.99562 -0.314878 0.374548 -0.872104 + 0.903219 1.86146 -2.06977 -0.122963 0.636648 -0.761288 + 0.85084 1.88291 -2.04043 -0.376885 0.418507 -0.826323 + 0.853812 1.94323 -2.01666 -0.459155 0.420616 -0.78247 + 0.87111 2.01902 -1.98352 -0.695745 0.350758 -0.626823 + 0.895326 2.08771 -1.96769 -0.30918 0.433095 -0.846662 + 0.848521 1.85072 -2.05959 -0.405127 0.522966 -0.749919 + 0.788611 1.85201 -2.0186 -0.64903 0.450425 -0.613088 + 0.784655 1.86838 -2.00259 -0.876543 0.418205 -0.23828 + 0.849856 1.95961 -2.00064 -0.754811 0.451659 -0.475673 + 0.786292 1.81982 -2.03777 -0.580243 0.61506 -0.533873 + 0.744001 1.79968 -2.00307 -0.912313 0.24411 -0.328778 + 0.743814 1.83743 -1.97241 -0.794396 0.460891 -0.395619 + 0.761862 1.84348 -1.975 -0.25849 0.922216 -0.287577 + 0.778005 1.84923 -1.98921 -0.610409 0.790295 0.0532384 + 0.748937 1.79101 -2.02909 -0.846565 0.317533 -0.427201 + 0.736555 1.80077 -1.96229 -0.965925 0.131235 -0.223082 + 0.736368 1.83852 -1.93163 -0.9573 0.158464 -0.241797 + 0.724012 1.78422 -1.92417 -0.953863 0.142895 -0.264056 + 0.726314 1.83497 -1.90204 -0.947127 0.159876 -0.27819 + 0.736551 1.89566 -1.90307 -0.792095 0.360144 -0.492831 + 0.749461 1.89927 -1.91012 -0.414055 0.60128 -0.683389 + 0.76751 1.90531 -1.91271 -0.0971631 0.622788 -0.776334 + 0.715627 1.82111 -1.87211 -0.998546 0.0534961 -0.00655442 + 0.717133 1.8795 -1.84616 -0.999897 0.0132344 -0.00559226 + 0.726497 1.89212 -1.87348 -0.948664 0.136484 -0.285321 + 0.725891 1.95057 -1.84504 -0.917238 0.176364 -0.35717 + 0.735433 1.95672 -1.86013 -0.714273 0.360113 -0.600111 + 0.725543 1.80598 -1.84147 -0.894003 -0.068371 0.442813 + 0.727049 1.86436 -1.81551 -0.846168 -0.192158 0.497066 + 0.725019 1.92805 -1.79507 -0.844133 -0.209695 0.493424 + 0.716527 1.93795 -1.81772 -0.999717 -0.0202522 0.0124381 + 0.753817 1.91743 -1.77039 -0.580353 -0.285006 0.762864 + 0.745486 1.98371 -1.75005 -0.58294 -0.296831 0.756355 + 0.723834 1.99148 -1.76811 -0.833189 -0.214658 0.509626 + 0.715341 2.00138 -1.79076 -0.999973 0.00719864 -0.00103465 + 0.773635 1.91234 -1.76087 -0.187794 -0.274986 0.94293 + 0.765304 1.97862 -1.74053 -0.161586 -0.306435 0.938076 + 0.757729 2.04002 -1.72191 -0.177307 -0.289303 0.940673 + 0.744459 2.04328 -1.72861 -0.581416 -0.257542 0.771769 + 0.722807 2.05105 -1.74667 -0.837077 -0.159195 0.523411 + 0.775719 1.9795 -1.74215 0.316008 -0.231557 0.920065 + 0.768143 2.0409 -1.72353 0.331014 -0.238025 0.913112 + 0.763122 2.09719 -1.70674 0.339834 -0.214049 0.915804 + 0.757071 2.09656 -1.70567 -0.149467 -0.247627 0.957257 + 0.743801 2.09981 -1.71239 -0.579808 -0.208486 0.787627 + 0.789766 1.98404 -1.74871 0.561519 -0.147349 0.814238 + 0.777267 2.04384 -1.72806 0.571743 -0.172917 0.802004 + 0.772245 2.10013 -1.71128 0.573608 -0.159297 0.803491 + 0.761281 2.13195 -1.69915 0.309632 0.0701278 0.948267 + 0.75523 2.13133 -1.69808 -0.151824 0.0365892 0.98773 + 0.801708 1.9894 -1.75827 0.777185 -0.029527 0.628579 + 0.789209 2.04921 -1.73761 0.787039 -0.0694886 0.612977 + 0.779755 2.10356 -1.71724 0.783201 -0.0682216 0.618015 + 0.766734 2.1336 -1.70203 0.508286 0.112287 0.853837 + 0.759235 2.14083 -1.70197 0.177648 0.542294 0.821193 + 0.821388 1.92561 -1.78316 0.78452 -0.00693025 0.620065 + 0.829458 1.93372 -1.79905 0.936034 0.129826 0.327087 + 0.809777 1.99751 -1.77415 0.934855 0.128683 0.330889 + 0.794748 2.05477 -1.74833 0.945182 0.075546 0.317685 + 0.834888 1.8565 -1.80171 0.816972 -0.0563333 0.573919 + 0.844166 1.87442 -1.82561 0.957298 0.0828217 0.276984 + 0.831377 1.94503 -1.82226 0.959814 0.280534 -0.0075723 + 0.811196 2.00563 -1.79054 0.958774 0.284147 0.0036961 + 0.796166 2.06289 -1.76471 0.971383 0.235931 -0.027415 + 0.850536 1.81431 -1.84539 0.611634 0.551724 0.567013 + 0.859635 1.83394 -1.87879 0.567337 0.754982 0.328832 + 0.846085 1.88573 -1.84883 0.967324 0.253153 -0.01407 + 0.824707 1.95308 -1.84008 0.83936 0.422156 -0.34243 + 0.858926 1.81218 -1.84164 -0.660746 0.680623 0.316491 + 0.868025 1.83181 -1.87504 -0.478892 0.86608 0.143415 + 0.890865 1.84138 -1.89545 -0.279342 0.95786 -0.0668777 + 0.860255 1.8495 -1.91568 -0.240463 0.636096 0.733185 + 0.849933 1.84528 -1.90432 0.446095 0.89494 0.00901771 + 0.868018 1.8683 -1.81446 -0.971487 0.2145 -0.10101 + 0.875236 1.87903 -1.83599 -0.851069 0.377747 -0.364676 + 0.898077 1.8886 -1.8564 -0.523654 0.560859 -0.641267 + 0.877244 1.91512 -1.76182 -0.957147 -0.00180678 0.289598 + 0.875799 1.92392 -1.77936 -0.98671 0.157721 -0.0390768 + 0.883017 1.93465 -1.80089 -0.847461 0.360132 -0.390018 + 0.898595 1.94146 -1.81495 -0.543497 0.515266 -0.662655 + 0.925232 1.8928 -1.86607 -0.25583 0.616446 -0.744678 + 0.887602 1.90638 -1.74452 -0.786311 -0.163794 0.595724 + 0.893341 1.96685 -1.71412 -0.790203 -0.200638 0.579071 + 0.885018 1.97388 -1.72792 -0.953747 -0.0384268 0.298145 + 0.883573 1.98269 -1.74545 -0.987445 0.152247 -0.0421075 + 0.900583 1.90086 -1.73367 -0.53599 -0.290869 0.792534 + 0.906322 1.96132 -1.70327 -0.543394 -0.31746 0.777137 + 0.90932 2.01941 -1.6791 -0.550898 -0.262686 0.792153 + 0.899932 2.02347 -1.68723 -0.788573 -0.16142 0.593377 + 0.891609 2.03049 -1.70102 -0.951993 -0.0156148 0.305721 + 0.92051 1.959 -1.69764 0.0210432 -0.40515 0.914008 + 0.923508 2.01709 -1.67346 0.0357212 -0.342055 0.939001 + 0.923574 2.07421 -1.65581 0.0142829 -0.270472 0.962622 + 0.914512 2.0758 -1.65953 -0.549411 -0.200134 0.81123 + 0.905124 2.07985 -1.66766 -0.786453 -0.108989 0.607959 + 0.943649 1.96439 -1.70755 0.580547 -0.338264 0.740637 + 0.940755 2.02107 -1.68121 0.577304 -0.281991 0.76629 + 0.94082 2.07818 -1.66356 0.583681 -0.222137 0.781007 + 0.925899 2.10935 -1.64693 0.029823 -0.00713463 0.99953 + 0.916837 2.11094 -1.65066 -0.515326 0.0618104 0.854763 + 0.970475 1.97571 -1.73163 0.803525 -0.235237 0.546819 + 0.967581 2.03238 -1.70531 0.801857 -0.182254 0.569042 + 0.958773 2.08575 -1.67969 0.792263 -0.132821 0.595549 + 0.954746 2.11933 -1.66807 0.753159 0.117968 0.647174 + 0.936793 2.11176 -1.65195 0.529231 0.0192267 0.84826 + 0.982223 1.9849 -1.75249 0.996304 0.0460889 0.0724849 + 0.976628 2.03938 -1.72072 0.9914 0.0774988 0.105446 + 0.967821 2.09275 -1.6951 0.984288 0.139482 0.108269 + 0.960516 2.1238 -1.67797 0.903246 0.36591 0.224178 + 0.971109 2.04514 -1.73312 0.833021 0.349648 -0.428745 + 0.964161 2.09645 -1.70299 0.825535 0.386871 -0.41088 + 0.956856 2.1275 -1.68586 0.747496 0.605392 -0.273407 + 0.950708 2.13335 -1.67869 0.498957 0.865425 0.045627 + 0.952845 2.13125 -1.67428 0.622953 0.705195 0.33857 + 0.961994 2.04944 -1.74159 0.612238 0.457524 -0.644854 + 0.955045 2.10075 -1.71145 0.604372 0.486384 -0.631003 + 0.951073 2.13016 -1.69085 0.559774 0.688294 -0.461416 + 0.944925 2.13601 -1.68367 0.388572 0.916539 -0.094704 + 0.941192 2.13458 -1.67025 0.182079 0.925098 0.333228 + 0.964441 1.99668 -1.77653 0.613458 0.459099 -0.642572 + 0.94588 2.05369 -1.74957 0.258464 0.539225 -0.801519 + 0.944467 2.1036 -1.71668 0.265112 0.556414 -0.787476 + 0.940495 2.13301 -1.69609 0.238927 0.748629 -0.61844 + 0.938947 2.1376 -1.68661 0.204473 0.950056 -0.235765 + 0.948327 2.00093 -1.78451 0.263794 0.550583 -0.792004 + 0.926855 2.00147 -1.78457 -0.173881 0.56434 -0.807022 + 0.929849 2.05409 -1.74962 -0.168649 0.54576 -0.820795 + 0.928436 2.10401 -1.71672 -0.176536 0.556341 -0.811985 + 0.930417 2.13328 -1.69608 -0.143699 0.746423 -0.649771 + 0.947222 1.9451 -1.82456 0.241432 0.632124 -0.736295 + 0.92575 1.94566 -1.82462 -0.184273 0.60462 -0.774905 + 0.904837 1.99813 -1.77673 -0.537046 0.499979 -0.679414 + 0.907831 2.05075 -1.74177 -0.544256 0.480037 -0.688004 + 0.913905 2.10183 -1.71152 -0.534856 0.494059 -0.685445 + 0.960507 1.89046 -1.87556 0.165345 0.686349 -0.708227 + 0.936812 1.84492 -1.91034 -0.0543891 0.98242 -0.178588 + 0.891764 1.84878 -1.90985 0.0324371 0.55205 0.83318 + 0.899833 1.91406 -1.90688 -0.0479227 -0.162398 0.985561 + 0.868325 1.91479 -1.91271 -0.443809 -0.0519622 0.894614 + 0.853887 1.91951 -1.92509 -0.676503 0.0106423 0.736363 + 0.828463 1.85617 -1.9411 -0.456195 0.637005 0.621378 + 0.929162 1.98119 -1.89321 0.230535 -0.217435 0.94846 + 0.899367 1.98098 -1.89281 -0.126952 -0.218565 0.967529 + 0.879269 1.98287 -1.89829 -0.478062 -0.15888 0.863837 + 0.864832 1.98759 -1.91067 -0.75344 -0.0640075 0.654394 + 0.832983 1.92248 -1.94618 -0.810904 0.1688 0.560304 + 0.925454 2.04843 -1.87543 0.224618 -0.259326 0.939306 + 0.901027 2.04832 -1.87518 -0.132784 -0.270145 0.953619 + 0.880929 2.05021 -1.88067 -0.495057 -0.224936 0.839239 + 0.946914 2.05248 -1.88496 0.630728 -0.180969 0.754608 + 0.940668 2.11102 -1.86436 0.628021 -0.206684 0.750247 + 0.924527 2.10799 -1.85717 0.233477 -0.298934 0.925271 + 0.9001 2.10789 -1.85691 -0.138219 -0.312687 0.939746 + 0.954734 2.11813 -1.88125 0.843894 -0.0968828 0.527689 + 0.944789 2.16896 -1.85581 0.837255 -0.0691901 0.542417 + 0.935579 2.16434 -1.84469 0.631484 -0.184358 0.753153 + 0.919437 2.16131 -1.8375 0.220317 -0.289643 0.931433 + 0.960792 2.12263 -1.8924 0.961567 0.0367741 0.272098 + 0.950847 2.17345 -1.86696 0.952334 0.078585 0.294762 + 0.941871 2.20398 -1.85051 0.864669 0.319585 0.387574 + 0.938143 2.20116 -1.84379 0.770907 0.198926 0.605087 + 0.928933 2.19654 -1.83267 0.570529 0.0865833 0.816701 + 0.961027 2.12683 -1.90189 0.961423 0.236467 -0.140529 + 0.951062 2.17602 -1.8729 0.952518 0.289049 -0.0957081 + 0.942085 2.20654 -1.85644 0.861593 0.507321 0.0168428 + 0.933964 2.21393 -1.85105 0.553784 0.802768 0.221106 + 0.933822 2.2126 -1.84796 0.568285 0.691198 0.446428 + 0.954621 2.13217 -1.91341 0.83602 0.359056 -0.414908 + 0.944656 2.18136 -1.88442 0.823919 0.424527 -0.375412 + 0.938168 2.20966 -1.86371 0.752221 0.617217 -0.230665 + 0.930047 2.21705 -1.85831 0.501655 0.863752 0.0476899 + 0.919546 2.21771 -1.84761 0.17016 0.908978 0.380533 + 0.939173 2.14027 -1.93175 0.596336 0.471743 -0.649493 + 0.934578 2.18666 -1.89663 0.600289 0.538164 -0.591635 + 0.92809 2.21496 -1.87591 0.530881 0.721187 -0.445033 + 0.92459 2.21998 -1.86504 0.399588 0.909732 -0.112772 + 0.919726 2.21994 -1.85279 0.230901 0.918102 0.322139 + 0.921589 2.14313 -1.93873 0.160283 0.547275 -0.821462 + 0.916994 2.18952 -1.9036 0.145744 0.624578 -0.767242 + 0.917186 2.21677 -1.88024 0.148921 0.790319 -0.594321 + 0.913686 2.22178 -1.86936 0.0757486 0.95921 -0.272357 + 0.91427 2.22287 -1.85953 0.0940792 0.987495 0.1265 + 0.921799 2.08898 -1.96949 0.152714 0.451574 -0.879067 + 0.895116 2.14186 -1.93694 -0.317397 0.524734 -0.789881 + 0.899644 2.1887 -1.90242 -0.303831 0.602517 -0.73801 + 0.899835 2.21595 -1.87905 -0.299331 0.768468 -0.56556 + 0.904212 2.22133 -1.86872 -0.199345 0.946212 -0.254843 + 0.878996 2.13748 -1.92777 -0.715695 0.412176 -0.563818 + 0.883524 2.18432 -1.89326 -0.720061 0.473578 -0.507184 + 0.889857 2.21324 -1.87334 -0.648738 0.665584 -0.368968 + 0.894234 2.21862 -1.86301 -0.493346 0.868025 -0.0560627 + 0.904796 2.22242 -1.85888 -0.166693 0.975492 0.143627 + 0.873791 2.08192 -1.9556 -0.726092 0.332862 -0.601659 + 0.867014 2.12826 -1.90784 -0.927344 0.263403 -0.265803 + 0.875746 2.17829 -1.88002 -0.916976 0.323491 -0.233472 + 0.882079 2.20722 -1.8601 -0.844685 0.526049 -0.098896 + 0.890047 2.21531 -1.85573 -0.58156 0.804469 0.120906 + 0.861808 2.0727 -1.93566 -0.931239 0.210147 -0.29771 + 0.863574 2.12212 -1.8939 -0.991948 0.11335 0.056486 + 0.872306 2.17216 -1.86609 -0.983111 0.156341 0.0951378 + 0.879976 2.2035 -1.85141 -0.900921 0.392675 0.184789 + 0.887945 2.21159 -1.84705 -0.607071 0.725596 0.323999 + 0.856278 2.00783 -1.95922 -0.92024 0.289877 -0.262926 + 0.851627 1.99948 -1.94063 -0.979133 0.181526 0.0913567 + 0.857158 2.06436 -1.91706 -0.995731 0.0790079 0.0477189 + 0.860908 2.05907 -1.90378 -0.918356 -0.0549317 0.391925 + 0.867324 2.11682 -1.88062 -0.916341 -0.0511572 0.397118 + 0.835023 1.94841 -1.97634 -0.889433 0.443063 -0.112271 + 0.828373 1.92925 -1.96297 -0.891338 0.365361 0.268382 + 0.856237 1.99271 -1.92384 -0.900809 0.0466987 0.431696 + 0.869502 2.05395 -1.89061 -0.772457 -0.142099 0.618966 + 0.87367 2.11305 -1.87094 -0.775228 -0.154306 0.612545 + 0.874821 2.1688 -1.85752 -0.909935 -0.0128292 0.414553 + 0.807559 1.85914 -1.96219 -0.577743 0.604271 0.548698 + 0.818141 1.85194 -1.92974 0.302951 0.921965 -0.241248 + 0.836383 1.89708 -1.87436 0.831891 0.401223 -0.383376 + 0.791416 1.85339 -1.94798 0.123175 0.915019 -0.384146 + 0.818952 1.90443 -1.89258 0.632706 0.468125 -0.61688 + 0.807276 1.96045 -1.8583 0.58967 0.526938 -0.612067 + 0.792228 1.90588 -1.91082 0.284287 0.566471 -0.773493 + 0.789008 1.96341 -1.86688 0.25191 0.581649 -0.773451 + 0.792203 2.0188 -1.82125 0.585316 0.521297 -0.62101 + 0.804526 2.01368 -1.80835 0.832291 0.42969 -0.350226 + 0.76429 1.96284 -1.86876 -0.0581199 0.570618 -0.819156 + 0.756103 2.02117 -1.83105 -0.0623032 0.532735 -0.843986 + 0.773934 2.02176 -1.82983 0.232007 0.554454 -0.799221 + 0.766856 2.07537 -1.79551 0.234987 0.542396 -0.80659 + 0.779339 2.07346 -1.78972 0.581655 0.492699 -0.647245 + 0.748343 1.96032 -1.86717 -0.351489 0.51174 -0.783949 + 0.740157 2.01864 -1.82947 -0.34869 0.478313 -0.805998 + 0.738398 2.07332 -1.79576 -0.3372 0.500836 -0.797157 + 0.749025 2.07478 -1.79672 -0.0584302 0.537012 -0.841548 + 0.732204 2.0165 -1.82526 -0.708769 0.340289 -0.61794 + 0.730445 2.07118 -1.79156 -0.711328 0.378164 -0.592456 + 0.734966 2.1216 -1.76153 -0.69487 0.436483 -0.571522 + 0.739627 2.12288 -1.76388 -0.33169 0.539084 -0.774189 + 0.750255 2.12433 -1.76486 -0.0566549 0.562851 -0.824615 + 0.722661 2.01034 -1.81018 -0.909772 0.188637 -0.369772 + 0.724157 2.0669 -1.78166 -0.905764 0.242222 -0.347735 + 0.728679 2.11732 -1.75165 -0.897377 0.302976 -0.320811 + 0.73814 2.15072 -1.74126 -0.643105 0.654374 -0.397757 + 0.742801 2.152 -1.74362 -0.30661 0.74703 -0.589861 + 0.716837 2.05794 -1.76226 -0.997465 0.0599044 0.0384125 + 0.723833 2.11158 -1.73951 -0.989987 0.132896 0.0475782 + 0.72946 2.1422 -1.72349 -0.910106 0.37306 0.18037 + 0.734305 2.14794 -1.73562 -0.819941 0.542475 -0.182804 + 0.742707 2.15526 -1.73428 -0.426477 0.902393 -0.0616823 + 0.729803 2.1047 -1.72392 -0.820825 -0.109767 0.560533 + 0.733132 2.13791 -1.7138 -0.772121 0.169991 0.612318 + 0.735982 2.14919 -1.72174 -0.659354 0.699094 0.276622 + 0.738873 2.15246 -1.72863 -0.589454 0.80434 0.0747119 + 0.74713 2.13302 -1.70226 -0.527838 0.0644643 0.846895 + 0.747735 2.14211 -1.70547 -0.393081 0.478583 0.78514 + 0.739654 2.14489 -1.71206 -0.539771 0.510412 0.669423 + 0.741885 2.15134 -1.71689 -0.36697 0.80375 0.468315 + 0.744775 2.15462 -1.72378 -0.252655 0.930683 0.264564 + 0.755835 2.14043 -1.70129 -0.0906096 0.506884 0.857238 + 0.749965 2.14857 -1.71031 -0.15674 0.777761 0.608704 + 0.747427 2.15531 -1.72503 -0.100544 0.965803 0.238989 + 0.745359 2.15596 -1.73553 -0.209376 0.964792 -0.159177 + 0.749178 2.1527 -1.74422 -0.0701187 0.767268 -0.637482 + 0.754787 2.14898 -1.7107 -0.00569586 0.830362 0.557195 + 0.752249 2.15573 -1.72543 -0.0574738 0.966419 0.250462 + 0.751736 2.15664 -1.73613 -0.0661334 0.980626 -0.184387 + 0.760438 2.15313 -1.74346 0.20133 0.760372 -0.617495 + 0.761515 2.12477 -1.7641 0.228157 0.559199 -0.79702 + 0.758188 2.14939 -1.71139 -0.0235534 0.830253 0.556888 + 0.758594 2.15595 -1.72499 -0.0195186 0.970111 0.241873 + 0.758081 2.15687 -1.73569 0.0870593 0.979106 -0.183771 + 0.768046 2.15199 -1.74006 0.515266 0.704438 -0.488126 + 0.773998 2.12286 -1.75831 0.589916 0.494925 -0.638003 + 0.764689 2.14247 -1.70485 0.298738 0.537768 0.788392 + 0.762532 2.14923 -1.71048 0.0175476 0.755446 0.654976 + 0.762939 2.15581 -1.72408 0.0822876 0.974278 0.209788 + 0.765689 2.15572 -1.73229 0.331157 0.93556 -0.12273 + 0.768914 2.14442 -1.70824 0.461596 0.544316 0.700464 + 0.766757 2.15118 -1.71388 0.255066 0.808469 0.530396 + 0.767222 2.15404 -1.71959 0.269103 0.903174 0.334457 + 0.769972 2.15396 -1.7278 0.517533 0.855657 0.00326413 + 0.775713 2.14882 -1.73203 0.773721 0.592705 -0.223731 + 0.774245 2.13703 -1.70799 0.707927 0.19039 0.68014 + 0.777547 2.14042 -1.71443 0.855317 0.309276 0.415669 + 0.772216 2.14781 -1.71469 0.625895 0.616268 0.477985 + 0.772681 2.15067 -1.72039 0.647825 0.714857 0.263253 + 0.785294 2.10913 -1.72796 0.948142 0.0739607 0.309122 + 0.78617 2.11424 -1.73815 0.973838 0.226102 -0.0227383 + 0.778422 2.14553 -1.72462 0.884421 0.458702 0.0859739 + 0.791662 2.06835 -1.77682 0.846224 0.384069 -0.369317 + 0.781665 2.11969 -1.75026 0.844128 0.382453 -0.375736 + 0.885096 2.10931 -1.861 -0.492323 -0.25735 0.831498 + 0.881167 2.16503 -1.84784 -0.768296 -0.127721 0.627223 + 0.882491 2.20014 -1.84284 -0.83509 0.247449 0.491319 + 0.888481 2.16268 -1.84146 -0.49489 -0.237045 0.835998 + 0.886392 2.19788 -1.83688 -0.716074 0.154806 0.680641 + 0.889338 2.20981 -1.84245 -0.564553 0.650166 0.508492 + 0.900429 2.21687 -1.84642 -0.227003 0.894601 0.384914 + 0.903484 2.16126 -1.83738 -0.131675 -0.301653 0.944281 + 0.902948 2.19464 -1.82803 -0.136214 -0.00892645 0.990639 + 0.893706 2.19554 -1.83051 -0.451247 0.0485204 0.891079 + 0.89714 2.20628 -1.83307 -0.35182 0.48497 0.800642 + 0.893239 2.20754 -1.8365 -0.497469 0.577537 0.647283 + 0.918901 2.19468 -1.82816 0.222272 0.00112368 0.974984 + 0.915071 2.20537 -1.83064 0.14154 0.377498 0.915129 + 0.906382 2.20538 -1.83059 -0.0896858 0.381444 0.920031 + 0.925103 2.20724 -1.83516 0.448575 0.487065 0.749366 + 0.915728 2.21235 -1.83474 0.140901 0.72642 0.672653 + 0.907039 2.21236 -1.8347 -0.0912971 0.754418 0.650014 + 0.903138 2.21362 -1.83813 -0.218948 0.843849 0.489879 + 0.901823 2.2151 -1.84183 -0.204192 0.882249 0.424197 + 0.930094 2.20979 -1.84125 0.546616 0.568964 0.614403 + 0.920719 2.2149 -1.84083 0.242641 0.857192 0.454254 + 0.919404 2.21638 -1.84453 0.135654 0.921799 0.363159 + 0.900609 2.2191 -1.8516 -0.248187 0.91117 0.328896 + 0.889259 1.99131 -1.76266 -0.85481 0.344293 -0.388281 + 0.896173 2.04571 -1.73124 -0.852418 0.338285 -0.39868 + 0.902247 2.09678 -1.70099 -0.85347 0.353831 -0.382613 + 0.890487 2.03708 -1.71403 -0.98762 0.153378 -0.0328996 + 0.898535 2.0911 -1.6897 -0.982408 0.184851 -0.0265324 + 0.904856 2.12225 -1.67287 -0.914644 0.390943 0.102908 + 0.908567 2.12793 -1.68416 -0.78897 0.557867 -0.25751 + 0.915885 2.1311 -1.69088 -0.512878 0.679409 -0.524748 + 0.899657 2.08452 -1.67669 -0.944725 0.0221626 0.327113 + 0.905567 2.11812 -1.66483 -0.875972 0.252655 0.410899 + 0.912004 2.12616 -1.66256 -0.610862 0.59892 0.517825 + 0.911292 2.13029 -1.6706 -0.652341 0.709068 0.267719 + 0.913373 2.13348 -1.67694 -0.594521 0.803097 0.0397485 + 0.911034 2.11345 -1.65579 -0.71961 0.134254 0.681276 + 0.915061 2.12352 -1.65745 -0.509172 0.528733 0.679106 + 0.922753 2.12975 -1.66006 -0.159706 0.786187 0.596996 + 0.919695 2.13239 -1.66517 -0.249706 0.844514 0.473754 + 0.920523 2.13485 -1.67008 -0.222632 0.89424 0.38829 + 0.920864 2.121 -1.65233 -0.341149 0.497431 0.797609 + 0.928012 2.12912 -1.65881 -0.0659301 0.816484 0.573592 + 0.935932 2.13522 -1.67151 0.00962237 0.895916 0.44412 + 0.93676 2.13768 -1.67643 0.179858 0.948193 0.261878 + 0.922603 2.13803 -1.67642 -0.222073 0.957394 0.184606 + 0.92593 2.12005 -1.65015 -0.0114474 0.442266 0.896811 + 0.933078 2.12816 -1.65663 0.149333 0.700705 0.697648 + 0.943329 2.13249 -1.66584 0.335832 0.77314 0.538026 + 0.936824 2.12246 -1.65517 0.455469 0.349439 0.818804 + 0.947075 2.12678 -1.66438 0.588022 0.406693 0.699164 + 0.930782 2.13926 -1.67936 0.00629828 0.994425 0.105257 + 0.920691 2.13664 -1.68365 -0.368899 0.896251 -0.246268 + 0.928869 2.13787 -1.6866 -0.13089 0.93705 -0.323736 + 0 1.98306 -3.19152 -0.99528 -0.010888 0.0964296 + 0 1.9393 -3.21829 -0.940716 -0.259577 0.218341 + 0.011183 1.96532 -3.12314 -0.905221 -0.310724 0.289873 + 0.016252 1.92627 -3.17244 -0.857915 -0.416422 0.300957 + 0.025806 1.96262 -3.09556 -0.724444 -0.507575 0.466421 + 0.041291 1.9961 -3.05045 -0.764239 -0.356634 0.537355 + 0.011183 2.00908 -3.09637 -0.939303 -0.144079 0.311371 + 0.011587 2.07808 -3.08639 -0.980061 0.0792124 0.182224 + 0 2.00459 -3.23674 -0.973679 0.196861 -0.11487 + 0.016252 1.87696 -3.22971 -0.535559 -0.712149 0.453895 + 0.030875 1.92357 -3.14486 -0.461445 -0.77026 0.440191 + 0.066043 1.92622 -3.12427 -0.260557 -0.883968 0.388215 + 0.057187 1.95648 -3.06427 -0.507634 -0.703139 0.497899 + 0 1.88998 -3.27556 -0.875856 -0.426886 0.225044 + 0.026712 1.83793 -3.28811 -0.400048 -0.7914 0.46222 + 0.066636 1.89392 -3.21292 -0.0503872 -0.878531 0.475021 + 0.101804 1.89658 -3.19232 -0.126564 -0.917524 0.377002 + 0.120883 1.92386 -3.08813 -0.231901 -0.911108 0.340741 + 0.112028 1.95411 -3.02813 -0.359108 -0.787007 0.501659 + 0.026712 1.81199 -3.33312 -0.545924 -0.802074 0.242167 + 0.077097 1.85489 -3.27132 0.00157891 -0.826563 0.562842 + 0.120941 1.85754 -3.26589 -0.0603898 -0.839102 0.540611 + 0.122625 1.89529 -3.19047 -0.131006 -0.929045 0.345995 + 0 1.86404 -3.32057 -0.894591 -0.441082 0.0717885 + 0.033943 1.80588 -3.37903 -0.547599 -0.802874 -0.235647 + 0.083178 1.80368 -3.33461 -0.0615579 -0.92657 0.37105 + 0.127022 1.80633 -3.32918 -0.0079336 -0.904958 0.425426 + 0.141762 1.85626 -3.26403 -0.0875726 -0.841725 0.532757 + 0.149137 1.88864 -3.19486 -0.20373 -0.917412 0.341832 + 0.033943 1.8295 -3.41372 -0.500882 -0.310218 -0.808011 + 0.090409 1.79758 -3.38053 -0.08195 -0.966312 -0.243976 + 0.145802 1.79423 -3.3803 0.0072954 -0.980094 -0.198399 + 0.174726 1.80955 -3.3246 0.0311282 -0.915235 0.401715 + 0 1.88767 -3.35525 -0.96781 -0.142006 -0.207794 + 0.00609 1.89928 -3.38721 -0.721413 0.195641 -0.664295 + 0.049274 1.91604 -3.38694 -0.12575 0.450442 -0.883906 + 0.113252 1.82668 -3.4212 -0.0559755 -0.293479 -0.954325 + 0.168645 1.82333 -3.42097 0.0508069 -0.332007 -0.941908 + 0.193506 1.79745 -3.37572 0.0426891 -0.989388 -0.138884 + 0.00609 1.92264 -3.37029 -0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 -0.982417 0.118768 -0.144051 + 0.00609 1.93619 -3.35816 -0.981516 0.131151 -0.139377 + 0 1.92457 -3.32621 -0.981236 0.134574 -0.13808 + 0.00609 1.98847 -3.30463 -0.872749 0.354069 -0.336073 + 0 1.97685 -3.27268 -0.971776 0.195948 -0.13136 + 0.014034 2.05323 -3.24402 -0.843647 0.422991 -0.330663 + 0.036542 2.02576 -3.30766 -0.464882 0.588192 -0.661752 + 0.079725 2.04251 -3.30739 -0.194271 0.591029 -0.782907 + 0.128582 1.91321 -3.39442 -0.0139732 0.422247 -0.906373 + 0.014034 2.08098 -3.20808 -0.828285 0.472356 -0.301369 + 0.03972 2.11125 -3.19831 -0.630499 0.681409 -0.371689 + 0.044486 2.09052 -3.24705 -0.586181 0.630257 -0.509086 + 0.0805 2.12506 -3.23831 -0.419995 0.695904 -0.582513 + 0.136609 2.08013 -3.29146 -0.0614619 0.587716 -0.806729 + 0.011587 2.09962 -3.13161 -0.965461 0.260081 -0.0155791 + 0.023387 2.12143 -3.14955 -0.804061 0.549432 -0.227179 + 0.049073 2.1517 -3.13979 -0.614227 0.698253 -0.367652 + 0.075698 2.17553 -3.13363 -0.579977 0.716229 -0.388127 + 0.075734 2.14578 -3.18957 -0.59953 0.710085 -0.369247 + 0.037415 2.1504 -3.01405 -0.971596 0.0427349 0.232755 + 0.032105 2.15701 -3.05363 -0.966259 0.256482 0.0236783 + 0.043906 2.17882 -3.07158 -0.808726 0.533994 -0.246602 + 0.070733 2.20765 -3.06834 -0.58317 0.68184 -0.441595 + 0.097358 2.23148 -3.06218 -0.366643 0.790961 -0.489851 + 0.025536 2.06202 -3.04565 -0.906932 -0.11691 0.40473 + 0.051364 2.13434 -2.97331 -0.920072 -0.106101 0.377108 + 0.049685 2.20804 -2.96099 -0.976256 -0.0867732 0.198479 + 0.044375 2.21465 -3.00057 -0.9845 0.167476 -0.0520691 + 0.054531 2.22951 -3.02005 -0.785559 0.457976 -0.416119 + 0.055645 2.04904 -2.99974 -0.795289 -0.293652 0.530361 + 0.071744 2.11124 -2.94107 -0.816098 -0.270674 0.510607 + 0.081949 2.16734 -2.89318 -0.827892 -0.292275 0.478716 + 0.061569 2.19045 -2.92543 -0.923689 -0.18738 0.334195 + 0.048313 2.25119 -2.93151 -0.989208 -0.0356674 0.142113 + 0.080386 2.03729 -2.9747 -0.634606 -0.439718 0.63555 + 0.096485 2.0995 -2.91603 -0.5474 -0.489529 0.67876 + 0.102944 2.15383 -2.872 -0.574535 -0.483042 0.660742 + 0.082215 2.21407 -2.86212 -0.828354 -0.339528 0.44559 + 0.060198 2.2336 -2.89595 -0.923701 -0.222862 0.311625 + 0.072672 1.98996 -3.01916 -0.595095 -0.51768 0.614711 + 0.106336 2.03079 -2.95916 -0.425211 -0.539635 0.726629 + 0.119012 2.09512 -2.90956 -0.328898 -0.564679 0.756944 + 0.12547 2.14946 -2.86554 -0.317259 -0.597508 0.736431 + 0.098622 1.98346 -3.00363 -0.463877 -0.607233 0.645047 + 0.136479 2.02512 -2.9512 -0.311761 -0.53891 0.782547 + 0.149155 2.08945 -2.9016 -0.17283 -0.59087 0.788036 + 0.151331 2.14541 -2.85801 -0.195786 -0.639847 0.743144 + 0.122263 2.19353 -2.82877 -0.443179 -0.599339 0.666622 + 0.142878 1.95267 -3.0086 -0.270855 -0.804568 0.528496 + 0.129472 1.98201 -2.9841 -0.404392 -0.59007 0.698773 + 0.17514 2.01276 -2.94363 -0.165022 -0.532694 0.830063 + 0.182592 2.09 -2.89932 -0.0485238 -0.573594 0.817701 + 0.184768 2.14596 -2.85572 -0.0173365 -0.686329 0.727084 + 0.165125 1.94022 -3.02443 -0.0854405 -0.901983 0.423234 + 0.168133 1.96965 -2.97654 -0.132315 -0.700096 0.701682 + 0.20834 2.01122 -2.94405 0.088305 -0.57761 0.811523 + 0.215792 2.08846 -2.89973 0.123167 -0.550777 0.825515 + 0.147395 1.9172 -3.09252 -0.145158 -0.940262 0.307955 + 0.169656 1.91908 -3.08069 -0.0464452 -0.941227 0.334567 + 0.218463 1.93221 -3.04741 0.11532 -0.900849 0.418535 + 0.19038 1.9572 -2.99237 0.108938 -0.801353 0.588189 + 0.171053 1.8857 -3.18537 -0.182418 -0.926094 0.330263 + 0.193315 1.88757 -3.17354 -0.0469233 -0.936726 0.346904 + 0.222994 1.91107 -3.10367 0.0353866 -0.935889 0.350513 + 0.253433 1.93131 -3.06382 0.228484 -0.860089 0.456117 + 0.225351 1.9563 -3.00877 0.225062 -0.829787 0.510686 + 0.160705 1.86355 -3.24917 -0.156846 -0.878514 0.451235 + 0.182622 1.86061 -3.23967 -0.217331 -0.876959 0.428614 + 0.197347 1.8591 -3.23793 -0.0620503 -0.887299 0.457001 + 0.215573 1.88599 -3.1778 0.0195867 -0.932825 0.359796 + 0.193669 1.81684 -3.30973 -0.105814 -0.892904 0.437637 + 0.208394 1.81534 -3.30799 -0.10561 -0.894851 0.433692 + 0.219605 1.85752 -3.24219 -0.00433524 -0.875537 0.483132 + 0.248192 1.8816 -3.19291 0.0234285 -0.916136 0.400183 + 0.255613 1.90667 -3.11878 0.124299 -0.923002 0.364167 + 0.231561 1.80731 -3.31936 -0.058717 -0.932487 0.3564 + 0.242772 1.84949 -3.25356 -0.00824802 -0.863014 0.505113 + 0.272701 1.87554 -3.20482 -0.0106207 -0.898285 0.439285 + 0.285988 1.90476 -3.14008 0.233641 -0.858608 0.456294 + 0.283809 1.9294 -3.08511 0.452937 -0.767087 0.45434 + 0.235338 1.79851 -3.3656 0.090422 -0.988383 -0.122159 + 0.277517 1.8115 -3.30338 -0.0569388 -0.899895 0.432374 + 0.267281 1.84343 -3.26547 -0.0257778 -0.836133 0.547921 + 0.296138 1.86434 -3.22731 -0.0895534 -0.88083 0.464886 + 0.248572 1.81892 -3.40553 0.299515 -0.421536 -0.855919 + 0.281294 1.8027 -3.34962 0.216724 -0.970377 -0.106766 + 0.305358 1.81202 -3.29945 0.152238 -0.925993 0.345486 + 0.295121 1.84395 -3.26153 -0.101654 -0.821508 0.561062 + 0.206741 1.81786 -3.41565 0.143199 -0.441032 -0.885994 + 0.232151 1.89626 -3.39129 0.243695 0.511986 -0.823701 + 0.284143 1.82119 -3.39091 0.371882 -0.455109 -0.809061 + 0.31065 1.83131 -3.38534 0.511998 -0.299473 -0.805093 + 0.307801 1.81282 -3.34405 0.537248 -0.82021 -0.196521 + 0.194055 1.90173 -3.39661 0.12717 0.394011 -0.910266 + 0.267721 1.89853 -3.37668 0.307938 0.369786 -0.876603 + 0.310818 1.90591 -3.35837 0.334714 0.372684 -0.86549 + 0.327601 1.8476 -3.37092 0.758231 -0.144147 -0.635851 + 0.202082 2.06864 -3.29366 0.125529 0.556933 -0.821016 + 0.251458 2.05987 -3.28899 0.221157 0.542595 -0.810358 + 0.294555 2.06726 -3.27068 0.390434 0.56245 -0.728843 + 0.327769 1.9222 -3.34395 0.571264 0.376209 -0.729468 + 0.183074 2.18144 -3.21184 0.00165362 0.778244 -0.627959 + 0.23245 2.17267 -3.20717 0.232169 0.716735 -0.657562 + 0.267374 2.17265 -3.19234 0.426883 0.733695 -0.528642 + 0.293459 2.14228 -3.20248 0.625964 0.613739 -0.481138 + 0.329604 2.02374 -3.2783 0.659824 0.450233 -0.6016 + 0.137384 2.16267 -3.22238 -0.219062 0.743651 -0.63166 + 0.152461 2.19752 -3.16676 -0.210607 0.866301 -0.452954 + 0.197921 2.21078 -3.1575 0.0375035 0.889359 -0.455669 + 0.232845 2.21076 -3.14267 0.296118 0.873431 -0.386566 + 0.106772 2.17875 -3.1773 -0.427461 0.790057 -0.439417 + 0.106736 2.2085 -3.12135 -0.426032 0.811318 -0.400325 + 0.138848 2.22171 -3.11437 -0.234384 0.886546 -0.398873 + 0.184307 2.23498 -3.10511 -0.00357815 0.932072 -0.362256 + 0.120311 2.23474 -3.06283 -0.193911 0.860723 -0.470697 + 0.152423 2.24796 -3.05585 -0.14364 0.885115 -0.44265 + 0.181421 2.25134 -3.04883 0.0985539 0.90078 -0.422945 + 0.224477 2.24728 -3.03716 0.298593 0.866268 -0.400528 + 0.227363 2.23092 -3.09344 0.299926 0.908853 -0.28988 + 0.104256 2.26771 -3.01851 -0.22022 0.666688 -0.71206 + 0.127209 2.27097 -3.01915 -0.0826443 0.674335 -0.733786 + 0.154284 2.27313 -3.01843 0.01283 0.70368 -0.710401 + 0.183282 2.27651 -3.01141 0.176401 0.660773 -0.729563 + 0.219971 2.27262 -3.00065 0.356232 0.630064 -0.690013 + 0.081358 2.25834 -3.01682 -0.384387 0.596691 -0.704419 + 0.077574 2.29006 -2.99257 -0.298043 0.685559 -0.664213 + 0.100472 2.29943 -2.99426 -0.264599 0.717063 -0.644832 + 0.123349 2.30196 -2.99864 -0.127208 0.703607 -0.69911 + 0.150424 2.30412 -2.99792 0.00570241 0.713725 -0.700403 + 0.058636 2.28719 -2.9876 -0.646188 0.564057 -0.514082 + 0.070556 2.34854 -2.89817 -0.609092 0.714759 -0.343694 + 0.089494 2.35141 -2.90314 -0.22653 0.849564 -0.476367 + 0.107449 2.35357 -2.90688 -0.199395 0.858703 -0.472091 + 0.048481 2.27233 -2.96812 -0.968842 0.220467 -0.112871 + 0.062361 2.3388 -2.8813 -0.945728 0.322515 -0.0397923 + 0.096877 2.42714 -2.74869 -0.576003 0.758634 -0.304459 + 0.110532 2.42881 -2.75158 -0.19695 0.880716 -0.430755 + 0.128487 2.43097 -2.75532 -0.176351 0.883779 -0.433398 + 0.062194 2.31767 -2.84469 -0.986202 0.0171115 0.164661 + 0.088662 2.40411 -2.7088 -0.985079 0.0213175 0.170777 + 0.088682 2.4174 -2.73182 -0.942924 0.33246 -0.0190805 + 0.116132 2.49623 -2.61905 -0.572733 0.752949 -0.324105 + 0.071664 2.30111 -2.81601 -0.923915 -0.211881 0.318571 + 0.098132 2.38756 -2.68012 -0.907022 -0.257442 0.333218 + 0.110491 2.47681 -2.5854 -0.984614 -0.00297979 0.17472 + 0.110511 2.49009 -2.60842 -0.939902 0.339566 -0.0357608 + 0.093681 2.28158 -2.78219 -0.821189 -0.376285 0.429021 + 0.114185 2.37528 -2.65887 -0.79993 -0.415573 0.432911 + 0.133134 2.45403 -2.54596 -0.783163 -0.441784 0.437586 + 0.117082 2.4663 -2.56721 -0.903004 -0.268295 0.335562 + 0.127755 2.54203 -2.48539 -0.943685 0.184185 0.274834 + 0.103209 2.20056 -2.84094 -0.688975 -0.449882 0.56826 + 0.11137 2.27078 -2.76348 -0.679841 -0.514178 0.522912 + 0.131873 2.36449 -2.64017 -0.647215 -0.556778 0.520683 + 0.145322 2.44721 -2.53414 -0.630956 -0.575294 0.520511 + 0.144697 2.52364 -2.45353 -0.793994 -0.260526 0.549272 + 0.130423 2.26376 -2.75131 -0.499731 -0.633473 0.590746 + 0.145505 2.36013 -2.63263 -0.472907 -0.660406 0.583287 + 0.158954 2.44285 -2.52659 -0.456109 -0.67579 0.579027 + 0.165601 2.51404 -2.43691 -0.47646 -0.51462 0.712848 + 0.156885 2.51682 -2.44171 -0.645485 -0.408996 0.645036 + 0.148124 2.18949 -2.82124 -0.326076 -0.658011 0.678746 + 0.15082 2.25873 -2.74261 -0.380528 -0.689831 0.615899 + 0.165902 2.35511 -2.62392 -0.360201 -0.705527 0.610317 + 0.172947 2.43967 -2.52109 -0.346157 -0.717571 0.604373 + 0.176551 2.18416 -2.81201 -0.151618 -0.726648 0.670071 + 0.179248 2.2534 -2.73338 -0.201631 -0.738453 0.643454 + 0.186376 2.35171 -2.61803 -0.186437 -0.748343 0.636572 + 0.193421 2.43627 -2.5152 -0.182371 -0.756111 0.62852 + 0.212844 2.14683 -2.85505 0.133067 -0.672037 0.728463 + 0.204628 2.18504 -2.81134 0.101424 -0.746688 0.657396 + 0.203814 2.25251 -2.73182 0.0662125 -0.761723 0.64451 + 0.210942 2.35081 -2.61647 0.0537737 -0.765219 0.64152 + 0.234516 2.1519 -2.85829 0.446414 -0.60538 0.658961 + 0.233398 2.18826 -2.81693 0.416562 -0.681186 0.602048 + 0.232584 2.25573 -2.73741 0.42393 -0.691837 0.584503 + 0.231537 2.35273 -2.61976 0.408628 -0.700848 0.584667 + 0.237464 2.09352 -2.90297 0.444641 -0.484327 0.753473 + 0.272273 2.10669 -2.92795 0.629365 -0.397285 0.667881 + 0.263892 2.16543 -2.87623 0.65527 -0.474676 0.587625 + 0.262774 2.2018 -2.83487 0.719145 -0.515406 0.466033 + 0.259031 2.26576 -2.75796 0.721058 -0.526535 0.450373 + 0.247373 2.01184 -2.95231 0.403912 -0.497653 0.767591 + 0.282181 2.02501 -2.97729 0.736136 -0.348947 0.579949 + 0.306553 2.13106 -2.94589 0.810757 -0.307662 0.498014 + 0.298173 2.1898 -2.89418 0.778725 -0.264114 0.569061 + 0.295555 2.2233 -2.87989 0.864391 -0.287674 0.412397 + 0.221486 1.96884 -2.98288 -0.484795 -0.751198 0.447968 + 0.260519 1.96946 -2.99115 0.370745 -0.762606 0.530075 + 0.28828 1.97721 -3.01739 0.724165 -0.508492 0.465854 + 0.326429 2.04764 -3.04775 0.88662 -0.239082 0.395909 + 0.278599 1.9612 -3.03327 0.439232 -0.799267 0.410181 + 0.306359 1.96895 -3.05951 0.729328 -0.544323 0.414479 + 0.332527 1.99984 -3.08785 0.891649 -0.243803 0.381474 + 0.342936 2.07228 -3.07681 0.985922 0.0249179 0.165339 + 0.32306 2.1557 -2.97495 0.978776 -0.0177249 0.204163 + 0.282463 1.94866 -3.05916 0.509809 -0.707417 0.489547 + 0.318694 1.96196 -3.09111 0.760424 -0.483414 0.433666 + 0.344862 1.99285 -3.11945 0.916704 -0.145094 0.372292 + 0.352907 2.03101 -3.14275 0.982521 0.0985971 0.157897 + 0.320039 1.9427 -3.11706 0.694908 -0.56921 0.439435 + 0.351305 1.97457 -3.14482 0.919293 -0.236531 0.314569 + 0.35935 2.01272 -3.16812 0.993852 0.081452 0.0749959 + 0.340334 2.07758 -3.14371 0.946487 0.321179 -0.0317194 + 0.330363 2.11885 -3.07778 0.956347 0.284882 -0.0651359 + 0.309425 1.89356 -3.16257 0.302947 -0.791075 0.531436 + 0.326539 1.90949 -3.16483 0.727698 -0.514849 0.453195 + 0.357805 1.94136 -3.1926 0.940288 -0.249177 0.23188 + 0.361012 1.96411 -3.22222 0.998481 0.0372942 -0.040564 + 0.346668 2.05602 -3.20424 0.937829 0.30651 -0.162877 + 0.331928 1.85133 -3.23751 0.306091 -0.812713 0.495788 + 0.349042 1.86726 -3.23978 0.870889 -0.358238 0.336477 + 0.353513 1.88831 -3.25743 0.985139 -0.119263 0.123603 + 0.35672 1.91106 -3.28705 0.989724 0.0466327 -0.135173 + 0.348331 2.00741 -3.25833 0.903131 0.287127 -0.319236 + 0.330911 1.83094 -3.27173 0.358215 -0.823468 0.43998 + 0.350931 1.84522 -3.28997 0.890751 -0.450789 0.0578904 + 0.355402 1.86627 -3.30763 0.98249 -0.123401 -0.139594 + 0.346496 1.90587 -3.32399 0.883539 0.195579 -0.425567 + 0.340923 1.83189 -3.29333 0.699523 -0.713746 0.0351388 + 0.345178 1.86107 -3.34457 0.892365 -0.124907 -0.433685 + 0.31537 1.81296 -3.32104 0.457845 -0.885437 -0.0798701 + 0.33517 1.84774 -3.34792 0.779244 -0.574442 -0.25059 + 0.328509 2.09876 -3.2101 0.790439 0.512685 -0.335203 + 0.322175 2.12033 -3.14958 0.90517 0.399851 -0.144176 + 0.30984 2.1579 -3.14358 0.821859 0.504243 -0.265115 + 0.308809 2.18477 -3.07768 0.825271 0.541897 -0.158983 + 0.321143 2.14719 -3.08367 0.94544 0.31208 -0.0935356 + 0.283755 2.18828 -3.13344 0.564403 0.765534 -0.308881 + 0.278273 2.20844 -3.08421 0.523013 0.809301 -0.267374 + 0.301868 2.21323 -3.00943 0.788454 0.563203 -0.247271 + 0.313911 2.189 -3.00771 0.924042 0.360955 -0.125928 + 0.323131 2.16066 -3.00182 0.971173 0.237335 -0.0222277 + 0.271332 2.2369 -3.01597 0.497154 0.772586 -0.394903 + 0.293166 2.25013 -2.96776 0.722421 0.469087 -0.508001 + 0.305209 2.2259 -2.96604 0.910251 0.363985 -0.197375 + 0.312744 2.21232 -2.94996 0.968041 0.247167 -0.0424808 + 0.266826 2.26223 -2.97946 0.488189 0.561875 -0.667808 + 0.284352 2.27957 -2.96062 0.639842 0.501999 -0.581893 + 0.29339 2.27383 -2.95069 0.848913 0.409085 -0.334657 + 0.300925 2.26025 -2.93461 0.947726 0.279217 -0.154444 + 0.312674 2.20736 -2.92309 0.977756 0.00806135 0.209591 + 0.220585 2.29972 -2.98628 0.340832 0.629452 -0.6983 + 0.258012 2.29166 -2.97232 0.450733 0.571723 -0.685546 + 0.275893 2.33922 -2.88201 0.595605 0.697231 -0.398904 + 0.28493 2.33348 -2.87208 0.817844 0.51008 -0.266364 + 0.292781 2.32328 -2.85759 0.923464 0.348876 -0.159686 + 0.183897 2.30362 -2.99704 0.150005 0.66498 -0.731642 + 0.218494 2.35289 -2.90569 0.273723 0.833447 -0.480043 + 0.255921 2.34483 -2.89174 0.393057 0.795372 -0.4614 + 0.270638 2.41874 -2.73413 0.562921 0.735598 -0.376851 + 0.154514 2.35691 -2.91266 -0.0158405 0.873646 -0.486305 + 0.187987 2.3564 -2.91177 0.111028 0.86511 -0.48914 + 0.223585 2.42948 -2.75274 0.250266 0.858612 -0.447385 + 0.250666 2.42435 -2.74386 0.366872 0.824302 -0.431198 + 0.130326 2.3561 -2.91125 -0.121138 0.870615 -0.476818 + 0.169028 2.43334 -2.75942 -0.0153648 0.892081 -0.451615 + 0.193077 2.43299 -2.75882 0.107115 0.884647 -0.45379 + 0.199087 2.50094 -2.6272 0.103591 0.878641 -0.466111 + 0.220089 2.49869 -2.62331 0.242581 0.856881 -0.454872 + 0.14484 2.43253 -2.75802 -0.106327 0.890275 -0.442837 + 0.175038 2.50128 -2.6278 -0.0138048 0.884837 -0.465695 + 0.181559 2.5606 -2.51754 -0.0126555 0.928296 -0.371626 + 0.196999 2.56038 -2.51717 0.0930237 0.922967 -0.373468 + 0.218001 2.55814 -2.51328 0.228898 0.905491 -0.35734 + 0.142106 2.49922 -2.62423 -0.168129 0.876718 -0.450663 + 0.158459 2.50078 -2.62693 -0.104242 0.882604 -0.458414 + 0.16498 2.56009 -2.51667 -0.100165 0.926753 -0.362072 + 0.183906 2.58021 -2.44528 -0.0294621 0.993425 0.110624 + 0.199345 2.58 -2.44491 0.0828306 0.991592 0.0994189 + 0.129787 2.4979 -2.62194 -0.188868 0.874047 -0.447627 + 0.154506 2.55909 -2.51493 -0.155421 0.923938 -0.349547 + 0.173431 2.57921 -2.44353 -0.0786497 0.987 0.140158 + 0.16462 2.56961 -2.42691 -0.558005 0.570445 0.60268 + 0.133396 2.55673 -2.51085 -0.535557 0.814656 -0.222517 + 0.142187 2.55777 -2.51265 -0.171673 0.92269 -0.345211 + 0.16464 2.57817 -2.44174 -0.418282 0.882038 0.216908 + 0.127775 2.55059 -2.50022 -0.879124 0.471016 0.0726969 + 0.134346 2.53153 -2.4672 -0.892653 -0.089424 0.441785 + 0.174971 2.56172 -2.41324 -0.449944 0.386282 0.805194 + 0.196838 2.55676 -2.40464 -0.0523309 0.265583 0.962667 + 0.225304 2.56665 -2.42497 0.590286 0.572147 0.569395 + 0.220791 2.57447 -2.43529 0.403568 0.859036 0.314943 + 0.216786 2.57669 -2.43918 0.243009 0.959452 0.142824 + 0.183688 2.55895 -2.40844 -0.287777 0.310995 0.905796 + 0.192744 2.50868 -2.4276 -0.194902 -0.596464 0.778617 + 0.2096 2.50807 -2.42651 0.0609267 -0.5966 0.800222 + 0.21004 2.55797 -2.4067 0.321175 0.359835 0.875994 + 0.179594 2.51086 -2.4314 -0.360888 -0.562538 0.743849 + 0.210276 2.43566 -2.51411 0.0515216 -0.769203 0.636925 + 0.222802 2.50928 -2.42857 0.410237 -0.503183 0.7606 + 0.230871 2.43758 -2.5174 0.396325 -0.701317 0.592521 + 0.249046 2.4439 -2.53038 0.68725 -0.545273 0.479963 + 0.240977 2.5156 -2.44155 0.720232 -0.307771 0.621725 + 0.256241 2.52427 -2.45982 0.873291 -0.109277 0.474786 + 0.263116 2.53481 -2.47807 0.942119 0.269204 0.199852 + 0.257984 2.36276 -2.64031 0.700476 -0.545316 0.460395 + 0.272686 2.45737 -2.55869 0.88059 -0.32745 0.342545 + 0.281624 2.37623 -2.66861 0.880159 -0.35035 0.320274 + 0.291723 2.39286 -2.69742 0.996291 0.0757537 0.0407992 + 0.279561 2.46791 -2.57694 0.993548 0.0884857 0.0709342 + 0.258603 2.54263 -2.4884 0.828547 0.559805 -0.0113391 + 0.291812 2.28726 -2.80297 0.895909 -0.322015 0.306028 + 0.301912 2.30389 -2.83178 0.996739 0.0627705 0.0506977 + 0.284832 2.40503 -2.71352 0.910551 0.381245 -0.159843 + 0.27267 2.48008 -2.59304 0.895134 0.419879 -0.14979 + 0.310056 2.24086 -2.9088 0.997111 0.056401 0.0508826 + 0.276981 2.41524 -2.72802 0.795297 0.548125 -0.258963 + 0.267232 2.48651 -2.60215 0.779501 0.573323 -0.252347 + 0.260889 2.49002 -2.60827 0.546615 0.748691 -0.375064 + 0.24916 2.55128 -2.50139 0.509127 0.820271 -0.260664 + 0.253165 2.54906 -2.4975 0.717119 0.686213 -0.121872 + 0.247171 2.49356 -2.61442 0.354357 0.827964 -0.434635 + 0.235442 2.55483 -2.50754 0.327443 0.884803 -0.331518 + 0.851447 0.667225 -3.01935 0.318816 -0.903238 -0.287258 + 0.869612 0.679716 -3.01335 0.820938 -0.567324 0.0648372 + 0.864359 0.676199 -3.00349 0.69588 -0.578278 0.425847 + 0.870874 0.684691 -3.02581 0.789372 -0.543081 -0.286279 + 0.8803 0.712776 -3.01494 0.944125 -0.288983 0.158482 + 0.872875 0.707806 -3.00101 0.774018 -0.30433 0.555229 + 0.846194 0.663707 -3.00949 0.210564 -0.976555 0.0447499 + 0.820959 0.673984 -3.02855 -0.422815 -0.775235 -0.469295 + 0.829948 0.675789 -3.03512 -0.171502 -0.756667 -0.630905 + 0.843098 0.674141 -3.03424 0.0384074 -0.784413 -0.619048 + 0.848286 0.671955 -3.03015 0.20868 -0.833725 -0.511229 + 0.852695 0.673826 -2.99489 0.408041 -0.55183 0.727314 + 0.838616 0.673413 -2.9905 0.194177 -0.541105 0.818231 + 0.832115 0.663293 -3.0051 -0.0671604 -0.987652 0.141536 + 0.861211 0.705433 -2.99241 0.469274 -0.289306 0.834317 + 0.841311 0.704848 -2.9862 0.220978 -0.267279 0.937939 + 0.829896 0.705212 -2.98435 -0.077535 -0.248857 0.965432 + 0.827201 0.673775 -2.98865 -0.11899 -0.537847 0.834603 + 0.827276 0.664309 -3.00642 -0.317975 -0.947168 0.0420103 + 0.889696 0.781507 -2.97762 0.762165 -0.364953 0.53471 + 0.871462 0.777799 -2.96418 0.445755 -0.408123 0.796704 + 0.851562 0.777212 -2.95797 0.210513 -0.411461 0.886783 + 0.897121 0.78648 -2.99155 0.94341 -0.276691 0.182812 + 0.923644 0.903215 -2.94988 0.945482 -0.26884 0.183818 + 0.91125 0.894913 -2.92662 0.754541 -0.378117 0.536372 + 0.893016 0.891206 -2.91318 0.448379 -0.439797 0.778161 + 0.899094 0.794259 -3.01104 0.97018 -0.174067 -0.168677 + 0.925618 0.910994 -2.96936 0.976833 -0.151923 -0.150722 + 0.948089 1.0292 -2.93081 0.982228 -0.13104 -0.134372 + 0.945272 1.01735 -2.90117 0.951211 -0.234074 0.201014 + 0.932878 1.00905 -2.87791 0.790174 -0.366975 0.490871 + 0.881562 0.717753 -3.02741 0.947249 -0.24901 -0.201777 + 0.894626 0.800945 -3.02631 0.902356 -0.0911452 -0.421244 + 0.918159 0.922154 -2.99485 0.911002 -0.0636841 -0.407455 + 0.94063 1.04036 -2.9563 0.938728 -0.0819218 -0.334782 + 0.867713 0.689422 -3.03662 0.685388 -0.5203 -0.509442 + 0.877095 0.72444 -3.04267 0.859736 -0.209409 -0.465835 + 0.886751 0.807467 -3.04036 0.75314 -0.0109769 -0.657768 + 0.910284 0.928679 -3.0089 0.764004 0.0181506 -0.644956 + 0.932832 1.0504 -2.97894 0.812524 -0.0100643 -0.58284 + 0.862675 0.693595 -3.0456 0.533849 -0.493039 -0.686963 + 0.872057 0.728612 -3.05166 0.701856 -0.167027 -0.692459 + 0.864723 0.731701 -3.05745 0.413359 -0.105228 -0.904467 + 0.879417 0.810558 -3.04614 0.465475 0.0842015 -0.881047 + 0.898042 0.933835 -3.01856 0.474358 0.118234 -0.872356 + 0.857487 0.695782 -3.0497 0.296759 -0.452413 -0.840985 + 0.846422 0.698094 -3.0527 0.077843 -0.423482 -0.902554 + 0.853658 0.734015 -3.06045 0.154806 -0.063675 -0.985891 + 0.86212 0.814174 -3.05083 0.183754 0.143665 -0.972417 + 0.833272 0.699745 -3.05357 -0.107014 -0.398356 -0.910967 + 0.835072 0.736347 -3.06168 -0.0967604 -0.0342941 -0.994717 + 0.843533 0.816506 -3.05207 -0.0783359 0.171052 -0.982143 + 0.849719 0.941343 -3.02531 -0.0830815 0.203479 -0.975548 + 0.880745 0.937452 -3.02325 0.191597 0.174301 -0.965873 + 0.819914 0.699651 -3.05013 -0.37952 -0.37678 -0.844986 + 0.821714 0.736253 -3.05825 -0.4175 -0.0164593 -0.908528 + 0.822651 0.81636 -3.04669 -0.4336 0.172664 -0.884408 + 0.810925 0.697845 -3.04357 -0.669432 -0.359414 -0.650141 + 0.809008 0.733702 -3.04896 -0.761481 -0.0171776 -0.64796 + 0.809946 0.813808 -3.03741 -0.778167 0.123668 -0.615762 + 0.807629 0.936939 -3.00444 -0.789425 0.144693 -0.59655 + 0.828837 0.941197 -3.01994 -0.43045 0.202061 -0.879707 + 0.804799 0.693068 -3.03042 -0.872678 -0.351701 -0.338731 + 0.802882 0.728925 -3.03582 -0.957643 -0.0363178 -0.285658 + 0.800369 0.806341 -3.01686 -0.969461 0.0372871 -0.242394 + 0.803635 0.686956 -3.0152 -0.92744 -0.370181 -0.0531234 + 0.801237 0.720285 -3.01431 -0.99601 -0.0639219 0.0622794 + 0.798724 0.797702 -2.99535 -0.996103 -0.0539146 0.069792 + 0.795305 0.91505 -2.94799 -0.995219 -0.0570797 0.0792543 + 0.798052 0.929471 -2.98389 -0.969257 0.0522117 -0.240448 + 0.819794 0.667873 -3.01333 -0.486103 -0.860276 -0.15372 + 0.807446 0.681117 -3.00185 -0.834553 -0.416012 0.361185 + 0.805048 0.714447 -3.00096 -0.881252 -0.124895 0.455846 + 0.804682 0.788575 -2.97448 -0.872765 -0.186694 0.451028 + 0.814927 0.677555 -2.99494 -0.659907 -0.466328 0.589118 + 0.815622 0.709411 -2.99118 -0.65473 -0.166237 0.737356 + 0.815256 0.783538 -2.96471 -0.665398 -0.278073 0.692763 + 0.818915 0.897514 -2.9108 -0.665063 -0.307959 0.680333 + 0.801264 0.905924 -2.92711 -0.874384 -0.202992 0.440735 + 0.822361 0.674792 -2.98997 -0.462891 -0.501642 0.730813 + 0.823056 0.706647 -2.98622 -0.458703 -0.203063 0.865076 + 0.826877 0.779219 -2.95694 -0.466963 -0.338022 0.817121 + 0.833718 0.777782 -2.95507 -0.0954386 -0.399931 0.911563 + 0.841954 0.890798 -2.89992 -0.0969014 -0.441116 0.892203 + 0.830536 0.893194 -2.90304 -0.470514 -0.373588 0.799405 + 0.836878 1.00552 -2.84532 -0.477814 -0.391402 0.786446 + 0.8192 1.01195 -2.85771 -0.672451 -0.319296 0.667728 + 0.859798 0.890231 -2.90282 0.202751 -0.452229 0.868551 + 0.875466 1.00218 -2.84643 0.200141 -0.477651 0.855449 + 0.848297 1.00313 -2.84221 -0.105753 -0.466369 0.878246 + 0.908684 1.00316 -2.85679 0.470976 -0.464217 0.750123 + 0.931966 1.11365 -2.80007 0.488923 -0.465928 0.737472 + 0.885064 1.11308 -2.78374 0.204333 -0.488674 0.848201 + 0.857895 1.11402 -2.77952 -0.139748 -0.468734 0.872215 + 0.95616 1.11954 -2.82119 0.869869 -0.337797 0.359473 + 0.971665 1.21119 -2.77979 0.891112 -0.313301 0.328271 + 0.944055 1.19838 -2.75499 0.5148 -0.458275 0.724545 + 0.897154 1.19781 -2.73866 0.200184 -0.475786 0.856478 + 0.960425 1.13325 -2.85572 0.981694 -0.184667 0.0466304 + 0.975929 1.22491 -2.81432 0.982269 -0.183722 0.0373476 + 0.988035 1.29495 -2.78707 0.984449 -0.169569 0.0458892 + 0.983141 1.28138 -2.74361 0.887274 -0.273865 0.371138 + 0.955531 1.26856 -2.7188 0.500711 -0.389928 0.772816 + 0.963241 1.14511 -2.88537 0.987696 -0.155803 0.0135023 + 0.978886 1.23475 -2.85543 0.983966 -0.178071 0.0100942 + 0.990991 1.30479 -2.82818 0.985617 -0.167205 0.0245254 + 1.0024 1.37945 -2.80967 0.985122 -0.168223 0.035168 + 0.998719 1.37202 -2.76552 0.985564 -0.147887 0.0824256 + 0.965306 1.15935 -2.92069 0.974438 -0.121203 -0.189156 + 0.98095 1.249 -2.89075 0.981216 -0.151818 -0.119026 + 0.991593 1.30264 -2.87929 0.983173 -0.146881 -0.108614 + 1.003 1.3773 -2.86079 0.988694 -0.0982873 -0.113239 + 0.957508 1.16939 -2.94333 0.884532 -0.0546885 -0.463262 + 0.973979 1.25621 -2.92398 0.908274 -0.0804567 -0.410566 + 0.984621 1.30985 -2.91253 0.9153 -0.069382 -0.396751 + 0.994655 1.36584 -2.89536 0.92607 -0.01737 -0.376951 + 0.94395 1.17894 -2.96344 0.635193 0.0479606 -0.770863 + 0.960421 1.26577 -2.94409 0.657157 0.014158 -0.753621 + 0.967627 1.31704 -2.93891 0.655652 0.0455098 -0.753691 + 0.977661 1.37303 -2.92174 0.726886 0.066789 -0.683503 + 0.920591 1.05555 -2.98861 0.523067 0.092324 -0.847276 + 0.893041 1.06284 -2.99979 0.250513 0.13904 -0.958077 + 0.916401 1.18623 -2.97462 0.331534 0.119403 -0.935857 + 0.923632 1.28072 -2.96087 0.333564 0.0919017 -0.938237 + 0.930838 1.33198 -2.95569 0.32228 0.100601 -0.941284 + 0.862015 1.06673 -3.00185 -0.0930138 0.149708 -0.984345 + 0.863031 1.19676 -2.98754 -0.0262476 0.142536 -0.989442 + 0.870262 1.29124 -2.97378 -0.0348798 0.14459 -0.988877 + 0.867606 1.36449 -2.96342 -0.0869442 0.168138 -0.981922 + 0.829019 1.06609 -2.99239 -0.466055 0.1694 -0.868387 + 0.830034 1.19612 -2.97807 -0.578483 0.123211 -0.806335 + 0.82689 1.29929 -2.95643 -0.622048 0.116936 -0.774198 + 0.824235 1.37254 -2.94607 -0.619418 0.136247 -0.773148 + 0.878915 1.42316 -2.95133 -0.0380619 0.219382 -0.974896 + 0.807811 1.06184 -2.97689 -0.804075 0.136537 -0.578637 + 0.803656 1.18343 -2.94072 -0.892393 0.0765409 -0.444721 + 0.800511 1.2866 -2.91908 -0.905135 0.056257 -0.421386 + 0.79373 1.37437 -2.89337 -0.91074 -0.00292007 -0.412971 + 0.794835 1.04874 -2.94176 -0.979457 0.0351137 -0.198571 + 0.79068 1.17034 -2.9056 -0.98229 0.0251107 -0.185674 + 0.787186 1.25993 -2.87321 -0.988512 -0.00607771 -0.151021 + 0.792088 1.03432 -2.90586 -0.995417 -0.0572252 0.0766229 + 0.789111 1.14932 -2.85386 -0.992042 -0.0730683 0.102535 + 0.785618 1.23892 -2.82147 -0.991297 -0.0667583 0.113465 + 0.785555 1.27293 -2.80579 -0.987158 -0.13056 0.0920463 + 0.780405 1.34771 -2.8475 -0.977326 -0.0775253 -0.197035 + 0.801549 1.02036 -2.87402 -0.869399 -0.215553 0.444615 + 0.798572 1.13536 -2.82202 -0.875234 -0.210778 0.43536 + 0.799455 1.2115 -2.78489 -0.864011 -0.211666 0.456818 + 0.823078 1.12337 -2.79861 -0.676623 -0.321179 0.66259 + 0.823961 1.19951 -2.76147 -0.680204 -0.303292 0.667336 + 0.826657 1.2436 -2.73972 -0.655104 -0.327709 0.680768 + 0.799393 1.24551 -2.7692 -0.852055 -0.262258 0.453015 + 0.840756 1.11695 -2.78622 -0.510907 -0.384712 0.768746 + 0.8458 1.19538 -2.74415 -0.512158 -0.366866 0.776598 + 0.848495 1.23947 -2.7224 -0.525255 -0.346325 0.777281 + 0.848341 1.31858 -2.68862 -0.427432 -0.373272 0.823389 + 0.814154 1.31359 -2.71211 -0.596345 -0.401894 0.694877 + 0.862939 1.19246 -2.73746 -0.151772 -0.451115 0.879466 + 0.86694 1.2398 -2.71272 -0.156535 -0.411 0.898096 + 0.866786 1.3189 -2.67895 -0.147481 -0.343734 0.927414 + 0.901155 1.24515 -2.71393 0.176547 -0.412627 0.893627 + 0.910615 1.32677 -2.68468 0.203045 -0.35524 0.912457 + 0.88467 1.4419 -2.63615 0.0975733 -0.29901 0.949248 + 0.823145 1.42055 -2.64281 -0.254054 -0.36839 0.894285 + 0.788958 1.41557 -2.6663 -0.658524 -0.357761 0.662083 + 0.964992 1.35018 -2.68955 0.541089 -0.285627 0.790974 + 0.928499 1.44977 -2.64188 0.372655 -0.23721 0.89714 + 0.993825 1.35845 -2.72205 0.911373 -0.171806 0.374007 + 0.969471 1.43614 -2.67626 0.68521 -0.154782 0.711709 + 0.971492 1.50371 -2.66235 0.686943 -0.0475973 0.725151 + 0.93052 1.51733 -2.62797 0.380104 0.0317999 0.924397 + 0.998304 1.44441 -2.70876 0.883783 -0.132819 0.44865 + 0.983836 1.51751 -2.67543 0.757126 0.0418961 0.651924 + 0.940298 1.55651 -2.64549 0.447017 0.349456 0.823442 + 0.912714 1.52633 -2.6262 -0.240188 0.318376 0.917031 + 1.01339 1.45412 -2.75603 0.978367 -0.121227 0.167636 + 1.01435 1.51286 -2.74407 0.982578 0.0926606 0.161106 + 0.999264 1.50315 -2.6968 0.879387 -0.0311814 0.475086 + 0.979896 1.57252 -2.68028 0.716569 0.396413 0.573922 + 0.952642 1.57031 -2.65857 0.464902 0.418634 0.780135 + 1.01708 1.46156 -2.80018 0.998404 -0.0315648 -0.0468365 + 1.0123 1.53068 -2.77243 0.967634 0.250998 -0.0261525 + 0.995324 1.55816 -2.70165 0.900846 0.277037 0.334255 + 0.993265 1.57599 -2.73001 0.866177 0.485478 0.118526 + 0.965057 1.60113 -2.69687 0.535909 0.752794 0.382234 + 1.01122 1.47018 -2.83495 0.973282 0.0795468 -0.215392 + 1.00644 1.53931 -2.8072 0.930777 0.311429 -0.191484 + 1.00287 1.45872 -2.86952 0.917485 0.0800331 -0.389635 + 0.990762 1.54811 -2.84422 0.841094 0.39288 -0.371762 + 0.983454 1.59551 -2.77394 0.794316 0.604476 -0.0605886 + 0.955245 1.62066 -2.7408 0.484304 0.859181 0.165101 + 0.937803 1.59891 -2.67516 0.247132 0.744325 0.620408 + 0.971629 1.40838 -2.92362 0.655861 0.129806 -0.743637 + 0.996841 1.49407 -2.87139 0.903119 0.203476 -0.378119 + 0.964448 1.56129 -2.87568 0.546169 0.541281 -0.639308 + 0.967775 1.60432 -2.81096 0.657387 0.695881 -0.289123 + 0.942147 1.39065 -2.9436 0.374446 0.141876 -0.91633 + 0.970527 1.50724 -2.90286 0.590546 0.324545 -0.738868 + 0.941046 1.48951 -2.92284 0.286459 0.288637 -0.913581 + 0.934877 1.53478 -2.90699 0.18499 0.476648 -0.85941 + 0.947043 1.59822 -2.84888 0.316259 0.758959 -0.569175 + 0.872747 1.46842 -2.93547 0.154293 0.365492 -0.917938 + 0.917472 1.57171 -2.88019 0.184943 0.609851 -0.770634 + 0.925879 1.62295 -2.81582 0.0718792 0.909705 -0.408988 + 0.946612 1.62905 -2.77789 0.371293 0.925037 -0.0802927 + 0.911681 1.62195 -2.7056 0.117381 0.907897 0.402425 + 0.854955 1.47201 -2.93872 0.0327013 0.263722 -0.964044 + 0.89968 1.5753 -2.88344 0.280801 0.555829 -0.782435 + 0.905845 1.6127 -2.8457 0.327695 0.84772 -0.417117 + 0.910225 1.62389 -2.80914 -0.0735407 0.960341 -0.268956 + 0.903047 1.63034 -2.7427 0.0882651 0.99462 0.054223 + 0.827063 1.478 -2.93291 -0.480537 0.0809781 -0.873228 + 0.863711 1.54912 -2.92 0.268319 0.380992 -0.884788 + 0.869875 1.58653 -2.88225 0.057822 0.809352 -0.584471 + 0.879614 1.62164 -2.78774 -0.187019 0.951832 -0.242983 + 0.883994 1.63283 -2.75118 -0.0812795 0.994301 -0.0689816 + 0.805951 1.4555 -2.91233 -0.744406 0.0263358 -0.667208 + 0.792252 1.56646 -2.87796 -0.642678 0.398049 -0.654616 + 0.812857 1.57691 -2.88462 -0.389562 0.605829 -0.693695 + 0.835818 1.55511 -2.91418 -0.324844 0.469796 -0.820834 + 0.850232 1.58508 -2.88458 -0.0153157 0.804865 -0.59326 + 0.775446 1.45734 -2.85964 -0.898482 -0.0583242 -0.435118 + 0.77114 1.54396 -2.85738 -0.81786 0.134304 -0.559524 + 0.775063 1.59265 -2.82945 -0.513242 0.749024 -0.418982 + 0.795668 1.6031 -2.83612 -0.345461 0.910066 -0.22899 + 0.827271 1.60687 -2.85503 -0.0618566 0.900525 -0.430381 + 0.768206 1.41808 -2.82947 -0.948919 -0.135946 -0.284729 + 0.746557 1.53971 -2.81573 -0.906071 0.00205724 -0.42312 + 0.73274 1.58453 -2.77975 -0.825055 0.557522 -0.0919416 + 0.757324 1.58878 -2.8214 -0.614104 0.647941 -0.450609 + 0.769096 1.59685 -2.77483 -0.114859 0.990661 0.0734657 + 0.773356 1.3433 -2.78776 -0.966627 -0.238336 -0.0939651 + 0.739316 1.50045 -2.78555 -0.944983 -0.133906 -0.298457 + 0.726742 1.56403 -2.75754 -0.931549 0.260433 0.253754 + 0.751357 1.59298 -2.76679 -0.240599 0.890541 0.386068 + 0.78689 1.3155 -2.7416 -0.840496 -0.346318 0.416689 + 0.765923 1.35168 -2.76479 -0.936364 -0.35089 0.00990299 + 0.731883 1.50883 -2.76259 -0.984198 -0.114301 -0.135238 + 0.733332 1.50676 -2.73257 -0.943657 -0.00553194 0.33088 + 0.745359 1.57248 -2.74458 -0.697359 0.536889 0.474806 + 0.75944 1.41539 -2.71442 -0.852801 -0.309414 0.420705 + 0.738473 1.45156 -2.73762 -0.96379 -0.19406 0.18289 + 0.741668 1.50855 -2.71809 -0.909563 0.0675171 0.410045 + 0.753695 1.57426 -2.7301 -0.816777 0.482081 0.316975 + 0.772282 1.59501 -2.73269 -0.30776 0.942392 0.131077 + 0.777016 1.48688 -2.64992 -0.745128 -0.120863 0.655879 + 0.747498 1.4867 -2.69804 -0.93 -0.0932768 0.355526 + 0.760085 1.57115 -2.69963 -0.771774 0.448889 0.450404 + 0.778672 1.5919 -2.70222 -0.355355 0.879471 0.316628 + 0.793833 1.59155 -2.73908 0.0471479 0.99863 0.0226985 + 0.79043 1.50192 -2.63522 -0.601224 0.0167222 0.798906 + 0.765915 1.5493 -2.67958 -0.838299 0.223582 0.497258 + 0.779329 1.56435 -2.66489 -0.6216 0.494891 0.607204 + 0.796501 1.58053 -2.67512 -0.124875 0.83979 0.528354 + 0.811174 1.5928 -2.7105 0.00448316 0.984772 0.17379 + 0.814638 1.48823 -2.62312 -0.301328 -0.130506 0.944547 + 0.801154 1.54689 -2.63927 -0.382496 0.43066 0.817453 + 0.876163 1.50957 -2.61646 0.122089 0.0101106 0.992468 + 0.825363 1.5332 -2.62717 -0.192875 0.325132 0.925791 + 0.818326 1.56307 -2.64951 0.0231986 0.761024 0.648309 + 0.829003 1.58143 -2.6834 0.139615 0.876151 0.461375 + 0.891883 1.52196 -2.6212 0.294532 0.437669 0.849528 + 0.841083 1.54559 -2.63191 0.0869169 0.673175 0.734357 + 0.854762 1.55527 -2.65968 0.246094 0.802935 0.542894 + 0.849585 1.5812 -2.68906 0.028948 0.799637 0.599785 + 0.828368 1.59373 -2.71497 -0.146724 0.943731 0.296383 + 0.906756 1.51837 -2.62531 0.241505 0.178512 0.953839 + 0.892392 1.53419 -2.64619 0.365591 0.808455 0.461241 + 0.877519 1.53779 -2.64208 0.3016 0.825909 0.476352 + 0.875344 1.55504 -2.66534 0.0528466 0.701093 0.711109 + 0.900577 1.5312 -2.64834 -0.139518 0.805828 0.575479 + 0.898192 1.53722 -2.65553 -0.107253 0.322486 0.940478 + 0.890007 1.54021 -2.65338 0.225765 0.663121 0.713653 + 0.882551 1.55726 -2.66602 -0.230452 0.497604 0.836231 + 0.855766 1.58495 -2.69256 -0.287616 0.642058 0.710661 + 0.906535 1.53917 -2.64923 -0.819228 0.0445195 0.571737 + 0.897214 1.54243 -2.65405 -0.345225 0.0770661 0.93535 + 0.894531 1.56815 -2.66602 -0.482399 0.359026 0.798994 + 0.867746 1.59585 -2.69256 -0.452473 0.486781 0.747203 + 0.905557 1.54438 -2.64776 -0.730401 0.130773 0.670383 + 0.922492 1.56551 -2.64372 -0.0548526 0.535001 0.843069 + 0.911465 1.58928 -2.66198 -0.213208 0.576573 0.788737 + 0.885343 1.61232 -2.69242 -0.270854 0.684834 0.676492 + 0.867521 1.62475 -2.71665 -0.380702 0.828308 0.411063 + 0.849924 1.60828 -2.71679 -0.566754 0.663429 0.488521 + 0.834549 1.59748 -2.71847 -0.444904 0.799796 0.402973 + 0.887393 1.63128 -2.73602 -0.00295766 0.9891 0.147214 + 0.864122 1.6263 -2.73181 -0.418768 0.898419 0.132196 + 0.834941 1.60577 -2.74159 -0.591739 0.774122 0.224898 + 0.819566 1.59496 -2.74326 -0.424025 0.889941 0.16795 + 0.811027 1.59247 -2.74355 -0.158013 0.985071 0.0683118 + 0.859971 1.62019 -2.79007 -0.00638076 0.975498 -0.219917 + 0.85349 1.62504 -2.76183 -0.225497 0.974133 0.0147131 + 0.824309 1.60451 -2.7716 -0.574778 0.802247 0.161339 + 0.811736 1.59684 -2.77495 -0.409385 0.900436 0.147034 + 0.82079 1.61174 -2.82678 -0.344921 0.935104 -0.0813087 + 0.808217 1.60406 -2.83014 -0.287445 0.956637 0.0471191 + 0.803196 1.59435 -2.77524 -0.197297 0.972608 0.122916 + 0.790647 1.59339 -2.78122 0.0407557 0.991065 0.127002 + -0.987946 0.54202 -2.82794 -0.314751 -0.758104 -0.571148 + -0.992571 0.541618 -2.82296 -0.569927 -0.754823 -0.324693 + -1.00242 0.583273 -2.8373 -0.815654 -0.202245 -0.542039 + -0.976634 0.541924 -2.83037 0.100624 -0.766488 -0.634327 + -0.994128 0.540551 -2.81285 -0.642338 -0.764717 0.0510794 + -1.00847 0.581138 -2.81623 -0.983805 -0.178851 -0.0118184 + -1.00691 0.582204 -2.82634 -0.943677 -0.181814 -0.276437 + -0.997797 0.583674 -2.84229 -0.571961 -0.227226 -0.788181 + -0.986215 0.583895 -2.84767 -0.304596 -0.252698 -0.918349 + -1.00283 0.663444 -2.84326 -0.835847 -0.00616028 -0.548928 + -0.994011 0.664209 -2.85276 -0.576813 0.0030646 -0.816871 + -0.98243 0.664431 -2.85815 -0.313747 0.00128624 -0.949506 + -0.974903 0.583799 -2.8501 0.0217153 -0.287315 -0.95759 + -1.00732 0.662375 -2.83229 -0.959787 -0.0229856 -0.279786 + -1.01479 0.756517 -2.81332 -0.95891 -0.0201159 -0.282998 + -1.00774 0.761453 -2.82961 -0.833612 0.0594109 -0.549146 + -0.998922 0.76222 -2.83911 -0.577752 0.132626 -0.805366 + -1.01029 0.66034 -2.81301 -0.998687 -0.0512168 -0.00136146 + -1.01776 0.754481 -2.79404 -0.994497 -0.10342 -0.0167141 + -1.03214 0.858538 -2.75211 -0.985839 -0.16284 -0.0400509 + -1.02803 0.86965 -2.77662 -0.948941 -0.0583881 -0.310003 + -1.02098 0.874586 -2.79292 -0.830327 0.0456073 -0.555407 + -1.0061 0.579608 -2.80309 -0.923809 -0.190563 0.332058 + -1.00792 0.65881 -2.79987 -0.938901 -0.0955369 0.330663 + -1.01401 0.748649 -2.77438 -0.929067 -0.20081 0.310661 + -1.00127 0.578569 -2.79511 -0.709695 -0.217832 0.669986 + -0.998712 0.656831 -2.78467 -0.70851 -0.156058 0.688229 + -1.0048 0.746669 -2.75918 -0.699229 -0.308102 0.645098 + -1.01553 0.844499 -2.71281 -0.693573 -0.408079 0.593657 + -1.02839 0.852705 -2.73245 -0.922258 -0.280452 0.266057 + -0.989302 0.539512 -2.80488 -0.405061 -0.796087 0.449633 + -0.987738 0.577242 -2.78706 -0.369587 -0.249088 0.895187 + -0.985181 0.655504 -2.77662 -0.378359 -0.202362 0.903269 + -0.983544 0.743223 -2.74693 -0.368515 -0.363068 0.855791 + -0.964997 0.54048 -2.8207 0.474206 -0.819737 -0.321187 + -0.965146 0.539398 -2.81088 0.491292 -0.86562 0.0966106 + -0.969837 0.538851 -2.80456 0.327982 -0.876319 0.352835 + -0.975509 0.538725 -2.80177 0.0185124 -0.842729 0.53802 + -0.958226 0.58268 -2.84484 0.432045 -0.335508 -0.837121 + -0.946589 0.581236 -2.83517 0.676192 -0.372969 -0.635342 + -0.93824 0.5794 -2.82101 0.867774 -0.417927 -0.268896 + -0.93839 0.578319 -2.81119 0.895972 -0.43483 0.0903149 + -0.944182 0.663127 -2.85751 0.467419 -0.0700287 -0.881258 + -0.921991 0.660374 -2.83908 0.74617 -0.123118 -0.654273 + -0.913643 0.658539 -2.82492 0.937074 -0.192651 -0.291167 + -0.96086 0.664247 -2.86277 0.0563659 -0.0250413 -0.998096 + -0.959166 0.764559 -2.85158 0.0537748 0.187621 -0.980768 + -0.932966 0.762391 -2.84343 0.485805 0.152339 -0.860689 + -0.910775 0.759637 -2.825 0.756753 0.0901468 -0.647456 + -0.980736 0.764743 -2.84695 -0.304099 0.179204 -0.935633 + -0.990514 0.882944 -2.81263 -0.30217 0.236289 -0.923505 + -0.960445 0.886619 -2.81796 0.0612607 0.275325 -0.959397 + -0.934244 0.884451 -2.80981 0.476268 0.247302 -0.843807 + -1.0087 0.88042 -2.8048 -0.569491 0.158833 -0.806506 + -1.02948 0.984916 -2.773 -0.513901 0.119045 -0.849549 + -0.999928 0.98995 -2.78141 -0.246516 0.216802 -0.944577 + -0.969859 0.993627 -2.78674 0.0678551 0.286352 -0.955719 + -1.04177 0.979082 -2.76111 -0.809357 -0.0504991 -0.585142 + -1.07819 1.07044 -2.72921 -0.786941 -0.0644471 -0.613653 + -1.05317 1.08021 -2.74869 -0.467517 0.108565 -0.877292 + -1.02362 1.08524 -2.75711 -0.136557 0.231771 -0.963138 + -1.05198 0.967463 -2.73606 -0.93176 -0.161194 -0.32533 + -1.0884 1.05881 -2.70415 -0.934144 -0.221527 -0.279822 + -1.1102 1.13024 -2.67529 -0.962788 -0.170737 -0.209495 + -1.09758 1.13993 -2.71023 -0.803817 -0.0485517 -0.592892 + -1.07256 1.1497 -2.72971 -0.451082 0.111016 -0.885551 + -1.05609 0.956349 -2.71154 -0.959942 -0.271394 -0.0696948 + -1.08784 1.03906 -2.65981 -0.927381 -0.334875 -0.1668 + -1.10964 1.11049 -2.63095 -0.973536 -0.159467 -0.1637 + -1.04433 0.934346 -2.68809 -0.884365 -0.395589 0.247806 + -1.07608 1.01706 -2.63636 -0.757746 -0.613392 -0.222645 + -1.10668 1.01755 -2.59929 -0.828392 -0.202933 -0.522097 + -1.11904 1.09943 -2.58885 -0.927921 -0.0735344 -0.365452 + -1.11888 1.17747 -2.60983 -0.982429 -0.141328 -0.121902 + -1.03147 0.926142 -2.66845 -0.694617 -0.511805 0.505532 + -1.03839 0.968117 -2.63106 -0.684226 -0.727598 0.0493492 + -1.0459 0.957702 -2.60835 -0.184515 -0.37947 -0.906618 + -1.0836 1.00664 -2.61366 -0.592849 -0.434478 -0.678056 + -0.999984 0.910055 -2.65635 -0.372424 -0.582502 0.72249 + -1.00689 0.95203 -2.61896 -0.331301 -0.938719 0.0951107 + -1.01399 0.943052 -2.6019 0.129016 -0.445886 -0.885743 + -1.04918 0.898729 -2.61392 -0.0529593 0.0569046 -0.996974 + -1.07173 0.899269 -2.60639 -0.405539 -0.00624258 -0.914056 + -0.994271 0.841053 -2.70056 -0.365717 -0.47914 0.797919 + -0.963302 0.907958 -2.64809 -0.151555 -0.634684 0.757764 + -0.968171 0.946924 -2.60376 0.0340642 -0.987818 0.151841 + -0.97527 0.937947 -2.5867 0.418812 -0.50291 -0.756094 + -1.01727 0.884079 -2.60747 0.307674 0.0320804 -0.950951 + -0.957588 0.838956 -2.6923 -0.118971 -0.495253 0.860564 + -0.935371 0.839004 -2.69171 0.208339 -0.498087 0.841727 + -0.930745 0.916726 -2.63758 0.198954 -0.67443 0.711028 + -0.935615 0.955693 -2.59324 0.395482 -0.858067 0.32759 + -0.957243 0.741721 -2.74101 -0.124383 -0.381788 0.915842 + -0.935026 0.741769 -2.74041 0.211622 -0.38868 0.896741 + -0.920299 0.842552 -2.6982 0.549024 -0.438814 0.711347 + -0.915673 0.920278 -2.64408 0.57365 -0.56935 0.588868 + -0.895865 0.994424 -2.56815 0.752412 -0.588411 0.296054 + -0.958881 0.654004 -2.7707 -0.120793 -0.232502 0.965066 + -0.944736 0.653521 -2.77047 0.216364 -0.27377 0.937143 + -0.924211 0.742007 -2.74573 0.54312 -0.34933 0.763537 + -0.973945 0.576454 -2.78396 -0.130357 -0.2819 0.950547 + -0.9598 0.575973 -2.78373 0.206821 -0.349201 0.913938 + -0.954129 0.576099 -2.78652 0.518299 -0.395967 0.758008 + -0.933921 0.65376 -2.77579 0.54817 -0.289151 0.784793 + -0.91239 0.745039 -2.75548 0.723318 -0.306289 0.618869 + -0.946598 0.576588 -2.79314 0.686164 -0.416993 0.596068 + -0.92639 0.654249 -2.78241 0.720128 -0.286822 0.631783 + -0.903445 0.746082 -2.76754 0.884646 -0.241201 0.399029 + -0.896025 0.852877 -2.72309 0.891074 -0.267069 0.366963 + -0.908478 0.845585 -2.70795 0.727199 -0.366495 0.580398 + -0.941907 0.577135 -2.79946 0.819992 -0.429957 0.377822 + -0.917445 0.655293 -2.79446 0.875863 -0.274623 0.396796 + -0.897932 0.751349 -2.78499 0.98174 -0.150554 0.116279 + -0.913927 0.656476 -2.8062 0.962182 -0.246831 0.11524 + -0.897648 0.753411 -2.80372 0.961171 -0.0370835 -0.273451 + -0.890144 0.868814 -2.76442 0.960253 0.0147177 -0.278741 + -0.890512 0.858144 -2.74054 0.983523 -0.144417 0.108748 + -0.903272 0.875039 -2.78571 0.760855 0.163609 -0.627959 + -0.896103 0.980307 -2.74972 0.735065 0.154117 -0.660248 + -0.877059 0.968103 -2.72052 0.9489 -0.0632538 -0.309173 + -0.877426 0.957433 -2.69664 0.977035 -0.203195 0.0641377 + -0.885224 0.944204 -2.66774 0.895272 -0.314113 0.315945 + -0.927075 0.98972 -2.77383 0.483844 0.279546 -0.829306 + -0.929983 1.08219 -2.74118 0.396745 0.276298 -0.875359 + -0.870745 1.07144 -2.71135 0.692486 0.143328 -0.707051 + -0.8517 1.05924 -2.68214 0.973654 -0.115735 -0.196477 + -0.972767 1.0861 -2.75409 0.18173 0.303736 -0.935264 + -0.982147 1.15875 -2.73476 0.176171 0.238138 -0.95512 + -0.92431 1.14823 -2.71871 0.39196 0.236135 -0.889161 + -0.865072 1.13749 -2.68888 0.675691 0.15232 -0.721276 + -1.033 1.1579 -2.73778 -0.0890978 0.208882 -0.973874 + -1.04063 1.20456 -2.72877 -0.0802344 0.17825 -0.980709 + -0.985439 1.21494 -2.72337 0.171817 0.205438 -0.96347 + -0.927602 1.20442 -2.70733 0.379789 0.193926 -0.904518 + -1.08019 1.19637 -2.72071 -0.446707 0.1081 -0.888125 + -1.05709 1.25883 -2.71753 -0.13398 0.195056 -0.971598 + -1.0019 1.26921 -2.71213 0.0225795 0.210716 -0.977286 + -0.984992 1.30116 -2.70562 0.140018 0.185003 -0.972712 + -1.10738 1.18459 -2.69952 -0.805599 -0.0198727 -0.592128 + -1.11733 1.24921 -2.68462 -0.794659 0.0311664 -0.606255 + -1.09014 1.26099 -2.7058 -0.485336 0.12697 -0.865059 + -1.07067 1.34969 -2.69638 -0.180003 0.238498 -0.954315 + -1.05377 1.38164 -2.68987 -0.106737 0.242077 -0.964368 + -1.12001 1.17491 -2.66458 -0.972212 -0.163175 -0.167862 + -1.13216 1.23954 -2.65219 -0.974899 -0.0986769 -0.199586 + -1.12611 1.3255 -2.66586 -0.836427 0.12502 -0.533629 + -1.10373 1.35185 -2.68466 -0.564978 0.229499 -0.792546 + -1.13103 1.2421 -2.59744 -0.966651 -0.194082 -0.167089 + -1.14094 1.31582 -2.63344 -0.948642 0.019755 -0.315733 + -1.12174 1.38945 -2.64227 -0.842108 0.353837 -0.407005 + -1.09936 1.4158 -2.66107 -0.672427 0.52691 -0.519815 + -1.07108 1.41769 -2.67773 -0.276262 0.482141 -0.831396 + -1.14208 1.23005 -2.55351 -0.871477 -0.182165 -0.45535 + -1.15182 1.31268 -2.59848 -0.95788 -0.0562028 -0.281614 + -1.14786 1.37391 -2.57907 -0.920862 0.340431 -0.190051 + -1.13698 1.37706 -2.61403 -0.904803 0.30131 -0.300904 + -1.12827 1.16642 -2.56773 -0.916539 -0.061185 -0.395238 + -1.16281 1.20696 -2.51987 -0.92866 -0.141896 -0.342717 + -1.16287 1.30063 -2.55454 -0.953061 -0.0623715 -0.296284 + -1.14901 1.14333 -2.53409 -0.931537 -0.0856704 -0.353411 + -1.16746 1.19466 -2.47423 -0.981166 -0.192589 -0.0149439 + -1.17659 1.27611 -2.50215 -0.980289 -0.0477509 -0.191711 + -1.17577 1.33363 -2.48915 -0.97345 0.196955 -0.116637 + -1.16205 1.35816 -2.54154 -0.934091 0.318295 -0.16175 + -1.13759 1.0955 -2.55319 -0.933664 -0.0882777 -0.347099 + -1.14487 1.08771 -2.51268 -0.982363 -0.17545 -0.0646565 + -1.15628 1.13553 -2.49358 -0.979493 -0.197892 -0.0378522 + -1.16203 1.19729 -2.42483 -0.96313 -0.212242 0.165327 + -1.18124 1.2638 -2.45652 -0.995258 -0.0882707 0.0408512 + -1.12524 1.01362 -2.56363 -0.932185 -0.114105 -0.343527 + -1.13119 1.0094 -2.5323 -0.985767 -0.153511 -0.0685375 + -1.14009 1.08092 -2.46934 -0.968452 -0.216815 0.122851 + -1.15085 1.13817 -2.44417 -0.960275 -0.239364 0.143447 + -1.09481 0.910179 -2.59202 -0.704523 -0.0747894 -0.705729 + -1.10833 0.908268 -2.57246 -0.913468 -0.0840931 -0.398127 + -1.11428 0.904054 -2.54113 -0.991308 -0.12334 -0.0457847 + -1.12641 1.00262 -2.48896 -0.966953 -0.200898 0.156975 + -1.13367 1.07878 -2.43703 -0.929554 -0.265516 0.255794 + -1.08755 0.812336 -2.59548 -0.716041 0.0111244 -0.697969 + -1.10107 0.810427 -2.57592 -0.918004 -0.0165467 -0.396226 + -1.10538 0.80779 -2.55604 -0.997308 -0.0511498 -0.052539 + -1.11079 0.899823 -2.51437 -0.972073 -0.15423 0.176883 + -1.07207 0.812925 -2.60711 -0.464603 0.0257185 -0.885145 + -1.08934 0.722745 -2.59886 -0.72634 0.0638837 -0.68436 + -1.09904 0.721375 -2.58483 -0.919626 0.0253502 -0.391975 + -1.10334 0.71874 -2.56495 -0.998755 -0.0314128 -0.0387619 + -1.10189 0.803559 -2.52927 -0.964486 -0.0998696 0.244527 + -1.04952 0.812386 -2.61464 -0.0957679 0.0246049 -0.9951 + -1.05769 0.722945 -2.61589 -0.11051 0.0712287 -0.991319 + -1.07386 0.723332 -2.61049 -0.464771 0.0795255 -0.881852 + -1.07647 0.635409 -2.62083 -0.465279 0.146974 -0.872877 + -1.08626 0.635036 -2.61347 -0.722362 0.10618 -0.683315 + -1.02754 0.810431 -2.61238 0.256405 0.00952811 -0.966522 + -1.03571 0.720992 -2.61362 0.265148 0.0393083 -0.963406 + -1.0464 0.633785 -2.62479 0.26744 0.132617 -0.954405 + -1.0603 0.635021 -2.62623 -0.0989332 0.158532 -0.982385 + -0.998872 0.806418 -2.59956 0.546377 -0.037292 -0.836709 + -1.01516 0.718116 -2.60443 0.548501 -0.00795568 -0.836112 + -1.02585 0.630909 -2.6156 0.561694 0.0751344 -0.823927 + -0.988605 0.880068 -2.59465 0.48462 -0.0115258 -0.874649 + -0.982965 0.80307 -2.58489 0.797365 -0.1232 -0.590789 + -0.999249 0.714768 -2.58976 0.818729 -0.0850094 -0.567853 + -1.01579 0.628792 -2.60633 0.824133 -0.0222502 -0.565959 + -1.04 0.546065 -2.63712 0.544353 -0.00889895 -0.838809 + -0.946387 0.944402 -2.56808 0.641839 -0.436344 -0.630593 + -0.959722 0.886523 -2.57604 0.732243 -0.142287 -0.666014 + -0.974575 0.799283 -2.56353 0.934766 -0.196028 -0.296286 + -0.993234 0.71205 -2.57445 0.945974 -0.146481 -0.289268 + -1.00978 0.626076 -2.59102 0.952396 -0.113574 -0.282919 + -0.906638 0.983132 -2.54299 0.872801 -0.483719 -0.0650645 + -0.951332 0.882736 -2.55468 0.919928 -0.28694 -0.267203 + -0.971928 0.796861 -2.54853 0.971119 -0.235169 -0.0403012 + -0.990587 0.70963 -2.55944 0.97929 -0.200358 -0.0291048 + -1.0081 0.624545 -2.58153 0.980802 -0.192545 -0.0308896 + -0.868778 1.06759 -2.53626 0.949754 -0.235756 0.20588 + -0.901376 0.991044 -2.52247 0.858472 -0.389563 0.333567 + -0.94607 0.890647 -2.53416 0.936379 -0.35099 0.00107427 + -0.974151 0.795004 -2.53492 0.901483 -0.272687 0.33611 + -0.992181 0.708298 -2.54969 0.903423 -0.259877 0.341015 + -0.87787 1.01106 -2.57668 0.878134 -0.395548 0.269114 + -0.86407 1.08456 -2.57384 0.979385 -0.173585 0.103312 + -0.861687 1.11392 -2.56091 0.978598 -0.167926 0.11894 + -0.866668 1.10639 -2.51694 0.947761 -0.203811 0.245379 + -0.882104 1.09696 -2.48575 0.784606 -0.298018 0.543672 + -0.884215 1.05816 -2.50507 0.791205 -0.320051 0.521116 + -0.897678 0.936912 -2.6526 0.773609 -0.457386 0.438552 + -0.873162 1.02803 -2.61425 0.965281 -0.241889 0.098597 + -0.854529 1.09843 -2.61509 0.956135 -0.22225 0.190814 + -0.865363 1.04126 -2.64315 0.950426 -0.257208 0.174742 + -0.840866 1.11642 -2.65408 0.982724 -0.0997397 -0.155904 + -0.837332 1.14079 -2.6466 0.979192 -0.0863826 -0.183631 + -0.852146 1.12779 -2.60216 0.956995 -0.206165 0.204099 + -0.861538 1.16186 -2.68141 0.692888 0.152478 -0.704738 + -0.868219 1.24203 -2.66812 0.574125 0.158542 -0.803271 + -0.833628 1.23334 -2.64018 0.855648 0.0787174 -0.511537 + -0.831071 1.17745 -2.63209 0.988874 -0.12975 -0.0727619 + -0.845885 1.16446 -2.58764 0.947227 -0.255703 0.193329 + -0.934282 1.28459 -2.69404 0.364794 0.175382 -0.914422 + -0.938761 1.37007 -2.67991 0.370436 0.210525 -0.904686 + -0.890704 1.39669 -2.64796 0.555286 0.257318 -0.790851 + -0.856113 1.388 -2.62003 0.800786 0.230611 -0.552776 + -0.989471 1.38663 -2.69149 0.118226 0.249029 -0.961253 + -0.94975 1.43807 -2.66388 0.28463 0.384371 -0.878205 + -0.901693 1.4647 -2.63194 0.39648 0.78005 -0.484072 + -0.880149 1.47123 -2.59456 0.309016 0.882258 -0.355148 + -0.860366 1.44322 -2.59861 0.765271 0.403725 -0.501364 + -1.00678 1.42268 -2.67934 -0.00878301 0.438802 -0.898541 + -0.984619 1.43677 -2.67203 0.091524 0.393432 -0.914787 + -0.947564 1.47536 -2.64032 0.317784 0.868931 -0.379435 + -0.920867 1.45928 -2.62568 0.00754016 0.935387 0.353545 + -0.899324 1.46581 -2.5883 -0.338502 0.940963 0.00201027 + -1.05423 1.44533 -2.65705 -0.257718 0.683011 -0.68343 + -1.03207 1.45942 -2.64973 -0.172442 0.66318 -0.728324 + -0.982433 1.47406 -2.64846 0.0170604 0.710272 -0.70372 + -0.968794 1.48219 -2.62952 0.131853 0.980579 0.145185 + -0.942097 1.46611 -2.61488 0.339007 0.806508 0.484375 + -1.08251 1.44345 -2.64039 -0.528518 0.689857 -0.494738 + -1.06681 1.46496 -2.62013 -0.320482 0.885042 -0.337626 + -1.04387 1.46803 -2.63609 -0.297217 0.870988 -0.391206 + -0.994238 1.48267 -2.63483 -0.113418 0.983473 -0.141127 + -1.00639 1.47073 -2.61217 0.0165182 0.857013 0.51503 + -1.09875 1.45047 -2.60848 -0.700871 0.635293 -0.324317 + -1.08305 1.47199 -2.58823 -0.251531 0.967592 -0.0223144 + -1.05477 1.46814 -2.60152 0.0747224 0.986398 0.146409 + -1.03184 1.47121 -2.61748 -0.137016 0.985399 0.101065 + -1.11399 1.43808 -2.58024 -0.851421 0.515949 -0.0942342 + -1.09815 1.46439 -2.55821 -0.427883 0.864768 0.262854 + -1.07211 1.46623 -2.58029 0.266523 0.90494 0.331737 + -1.12543 1.41096 -2.55294 -0.858748 0.512325 0.00866501 + -1.10958 1.43727 -2.53091 -0.809966 0.586366 -0.0113725 + -1.0872 1.45862 -2.55028 0.092161 0.902814 0.420039 + -1.05158 1.44868 -2.55174 0.311533 0.870532 0.380948 + -1.13962 1.39521 -2.51541 -0.823225 0.544266 -0.161477 + -1.12271 1.42414 -2.49449 -0.77304 0.612434 -0.165331 + -1.10257 1.4502 -2.51064 -0.299789 0.941673 0.152899 + -1.08047 1.43007 -2.47989 0.376654 0.853787 0.359415 + -1.0651 1.43849 -2.51953 0.365384 0.852791 0.373151 + -1.16035 1.38697 -2.47996 -0.880904 0.437562 -0.180407 + -1.14345 1.41591 -2.45904 -0.746913 0.66481 -0.0122075 + -1.1157 1.43707 -2.47422 -0.296097 0.947993 0.11677 + -1.17934 1.31858 -2.44536 -0.986818 0.127857 0.0992117 + -1.16392 1.37191 -2.43618 -0.923474 0.334044 0.188704 + -1.14797 1.4016 -2.42365 -0.817402 0.519555 0.248833 + -1.12068 1.42832 -2.43095 -0.202895 0.94604 0.252669 + -1.16889 1.31433 -2.39827 -0.94343 0.166749 0.286592 + -1.1542 1.34868 -2.39596 -0.866943 0.32898 0.374409 + -1.13825 1.37837 -2.38343 -0.881053 0.316462 0.351563 + -1.12732 1.39703 -2.37291 -0.529964 0.647941 0.547092 + -1.12521 1.41402 -2.39556 -0.350048 0.839598 0.415381 + -1.17078 1.25956 -2.40942 -0.969906 -0.093237 0.22492 + -1.16267 1.24834 -2.38147 -0.931278 -0.153555 0.330367 + -1.16159 1.27016 -2.37019 -0.912586 -0.0845404 0.400049 + -1.16229 1.3028 -2.37069 -0.907364 0.131461 0.39926 + -1.1476 1.33715 -2.36837 -0.883226 0.307158 0.354352 + -1.15392 1.18608 -2.39687 -0.932328 -0.232701 0.276793 + -1.14588 1.18477 -2.37766 -0.793191 -0.286797 0.537211 + -1.1448 1.20659 -2.36638 -0.662665 -0.263007 0.701215 + -1.14957 1.27336 -2.35176 -0.668089 -0.106751 0.736383 + -1.15027 1.30599 -2.35226 -0.788477 0.0708074 0.610974 + -1.14443 1.13603 -2.41186 -0.924183 -0.273419 0.266698 + -1.1364 1.13472 -2.39265 -0.623701 -0.392 0.676264 + -1.11827 1.21179 -2.35083 -0.32055 -0.321119 0.89114 + -1.12305 1.27855 -2.33621 -0.444598 -0.212916 0.870057 + -1.12625 1.07567 -2.41973 -0.638675 -0.380241 0.668963 + -1.0902 1.07266 -2.41137 -0.121017 -0.383263 0.915677 + -1.10035 1.13172 -2.38429 -0.129938 -0.43067 0.893107 + -1.09442 1.18844 -2.3562 -0.116724 -0.426738 0.896811 + -1.05547 1.29095 -2.308 -0.219863 -0.323458 0.920345 + -1.11906 0.99834 -2.46379 -0.926896 -0.238494 0.289801 + -1.11163 0.995224 -2.44649 -0.649722 -0.320546 0.689283 + -1.08301 0.991956 -2.43864 -0.147539 -0.316111 0.93718 + -1.02824 1.06834 -2.41296 0.11534 -0.358159 0.926509 + -1.03359 1.12844 -2.38576 0.0974313 -0.429509 0.897791 + -1.10344 0.895543 -2.48919 -0.855178 -0.230617 0.464205 + -1.08971 0.892558 -2.47588 -0.501698 -0.292002 0.814269 + -1.06108 0.889287 -2.46803 -0.176379 -0.264115 0.948227 + -1.02105 0.987635 -2.44024 0.144667 -0.28957 0.946161 + -0.976925 1.05923 -2.42945 0.406835 -0.341488 0.847273 + -1.0945 0.800461 -2.51207 -0.82724 -0.159649 0.538689 + -1.08077 0.797475 -2.49876 -0.528353 -0.206582 0.823509 + -1.0614 0.795053 -2.49203 -0.219275 -0.227354 0.948804 + -1.0297 0.886628 -2.46568 0.0942056 -0.248579 0.96402 + -1.09345 0.712609 -2.52855 -0.824138 -0.154251 0.54498 + -1.08361 0.710468 -2.51901 -0.537036 -0.224478 0.813143 + -1.06424 0.708045 -2.51229 -0.220167 -0.267298 0.938125 + -1.03002 0.792394 -2.48968 0.124432 -0.250754 0.96002 + -0.991862 0.88563 -2.47769 0.498035 -0.264229 0.82592 + -1.10084 0.715706 -2.54576 -0.963889 -0.0867551 0.251777 + -1.09617 0.628966 -2.56769 -0.958431 -0.1488 0.24345 + -1.0915 0.627008 -2.55681 -0.820519 -0.238549 0.519464 + -1.08166 0.624867 -2.54726 -0.530318 -0.328996 0.78136 + -1.09868 0.632 -2.58687 -0.99689 -0.0619289 -0.0487431 + -1.09027 0.546235 -2.61337 -0.976583 -0.203776 -0.069003 + -1.08899 0.544675 -2.60351 -0.934365 -0.294292 0.200884 + -1.08432 0.542717 -2.59263 -0.791189 -0.393918 0.467813 + -1.09595 0.633667 -2.59945 -0.921519 0.0295332 -0.38721 + -1.08755 0.547902 -2.62594 -0.906116 -0.0936438 -0.412535 + -1.0736 0.503052 -2.63077 -0.657908 -0.698812 -0.280747 + -1.07232 0.501492 -2.6209 -0.5838 -0.803005 0.119837 + -1.08257 0.548607 -2.63315 -0.722697 -0.00993852 -0.691093 + -1.06862 0.503757 -2.63797 -0.43344 -0.630561 -0.643834 + -1.04974 0.502079 -2.63603 0.422817 -0.686014 -0.592124 + -1.06726 0.500393 -2.61599 -0.293236 -0.877788 0.378816 + -1.07925 0.541618 -2.58772 -0.521292 -0.480551 0.705213 + -1.07278 0.548979 -2.6405 -0.460169 0.0463358 -0.886622 + -1.06447 0.54878 -2.64328 -0.112793 0.0671714 -0.991345 + -1.06031 0.503558 -2.64075 -0.00466644 -0.612756 -0.790258 + -1.05057 0.547545 -2.64185 0.268025 0.0477428 -0.962228 + -1.02995 0.543948 -2.62785 0.809955 -0.125096 -0.572995 + -1.04665 0.500682 -2.62816 0.554375 -0.805866 -0.207959 + -1.02685 0.542552 -2.61998 0.926257 -0.225626 -0.301896 + -1.02518 0.541021 -2.61049 0.947032 -0.316871 -0.0521857 + -1.04747 0.499998 -2.62314 0.470175 -0.872482 0.133079 + -1.026 0.540337 -2.60548 0.860336 -0.419876 0.28901 + -1.03266 0.539402 -2.59588 0.688047 -0.48246 0.542055 + -1.05569 0.499412 -2.61513 0.147088 -0.899721 0.410934 + -1.05544 0.539107 -2.5826 0.0808372 -0.541862 0.836571 + -1.06701 0.540086 -2.58347 -0.222008 -0.524589 0.8219 + -1.0097 0.623214 -2.57178 0.895208 -0.292463 0.336255 + -1.01635 0.62228 -2.56218 0.730253 -0.346055 0.589048 + -1.04087 0.538816 -2.58787 0.468018 -0.521577 0.713384 + -1.04691 0.621429 -2.54133 0.105559 -0.398375 0.911128 + -1.06941 0.623335 -2.54301 -0.227649 -0.374916 0.898674 + -1.00271 0.706819 -2.53452 0.740571 -0.287232 0.607497 + -1.03234 0.621138 -2.54659 0.488824 -0.386642 0.782023 + -1.01869 0.705681 -2.51892 0.508876 -0.303807 0.805448 + -1.04174 0.706138 -2.5106 0.108581 -0.296112 0.948961 + -0.984676 0.793525 -2.51975 0.742323 -0.268092 0.61407 + -0.948293 0.888791 -2.52055 0.845078 -0.322484 0.426435 + -0.969564 0.887221 -2.49944 0.684999 -0.270924 0.676296 + -1.00697 0.791935 -2.498 0.51377 -0.263712 0.816392 + -0.926244 0.989602 -2.50043 0.660527 -0.31281 0.682535 + -0.947515 0.988032 -2.47932 0.635129 -0.288974 0.716313 + -0.909084 1.05672 -2.48303 0.614267 -0.367071 0.698524 + -0.94123 1.06063 -2.45651 0.56421 -0.377053 0.734506 + -0.983211 0.986638 -2.45225 0.443925 -0.279269 0.851434 + -0.909294 1.08518 -2.46457 0.606607 -0.376106 0.700409 + -0.941441 1.08909 -2.43805 0.532076 -0.394407 0.749226 + -0.871687 1.15593 -2.47057 0.810704 -0.268079 0.520473 + -0.898877 1.14416 -2.44938 0.669766 -0.327231 0.666583 + -0.929246 1.15389 -2.41 0.563535 -0.376751 0.735178 + -0.982273 1.11932 -2.40225 0.312706 -0.407609 0.857945 + -0.856009 1.16132 -2.50709 0.945087 -0.228352 0.233808 + -0.855299 1.23129 -2.46941 0.894735 -0.194911 0.401819 + -0.875496 1.23743 -2.42759 0.796799 -0.267322 0.541895 + -0.905865 1.24716 -2.38821 0.690921 -0.389738 0.608878 + -0.970078 1.18412 -2.3742 0.384688 -0.480377 0.788196 + -0.851029 1.16885 -2.55106 0.961848 -0.248345 0.114771 + -0.829275 1.24505 -2.54502 0.97641 -0.118939 0.180213 + -0.839621 1.23668 -2.50593 0.950809 -0.132504 0.280009 + -0.85271 1.29318 -2.44602 0.953834 -0.0165858 0.299875 + -0.824131 1.24066 -2.58161 0.994979 -0.0936058 0.0354266 + -0.831513 1.32636 -2.53217 0.980253 0.0789056 0.181322 + -0.841858 1.31798 -2.49307 0.951932 0.0791292 0.295911 + -0.85511 1.31488 -2.44981 0.952903 0.156852 0.259565 + -0.826689 1.29654 -2.58971 0.982066 0.109822 -0.153249 + -0.830941 1.35176 -2.56829 0.982874 0.16182 -0.0881616 + -0.851209 1.42879 -2.51838 0.929606 0.220327 0.295445 + -0.869253 1.38921 -2.46263 0.833821 0.316261 0.452463 + -0.882504 1.38611 -2.41937 0.905215 0.348195 0.24361 + -0.850637 1.45419 -2.5545 0.914089 0.399522 -0.0694501 + -0.869045 1.47487 -2.50963 0.450371 0.815023 0.36456 + -0.870421 1.4822 -2.55045 0.265064 0.96055 -0.0841732 + -0.896257 1.46308 -2.48865 -0.22154 0.858129 0.463178 + -0.887089 1.43529 -2.45388 0.299955 0.446597 0.842958 + -0.897632 1.47042 -2.52947 -0.390441 0.91849 0.0627135 + -0.920107 1.45833 -2.51853 -0.542513 0.832476 0.112527 + -0.925061 1.44439 -2.48453 -0.512913 0.744366 0.427597 + -0.915893 1.4166 -2.44975 -0.0692827 0.607753 0.791098 + -0.921798 1.45373 -2.57736 -0.519678 0.852963 -0.0488796 + -0.953587 1.43266 -2.53555 -0.581827 0.808137 0.0916093 + -0.958541 1.41872 -2.50155 -0.567659 0.787052 0.241481 + -0.967459 1.40174 -2.46741 -0.469628 0.78452 0.404941 + -0.934989 1.44534 -2.58484 -0.3171 0.864272 0.390489 + -0.966778 1.42428 -2.54303 -0.389897 0.896888 0.208741 + -0.983379 1.4083 -2.51108 -0.357696 0.877568 0.319262 + -0.992297 1.39131 -2.47694 -0.270847 0.886126 0.376061 + -0.976856 1.38687 -2.4505 -0.376359 0.853842 0.359594 + -0.945825 1.4539 -2.59787 0.00862971 0.854386 0.519567 + -0.97287 1.42479 -2.54844 -0.0404514 0.90323 0.427246 + -0.989471 1.40881 -2.51649 -0.00380139 0.904273 0.426938 + -1.00051 1.38963 -2.47497 0.0981652 0.898424 0.428016 + -0.996782 1.38135 -2.45573 -0.215565 0.906702 0.362523 + -1.01012 1.45852 -2.59516 0.111829 0.831013 0.544896 + -0.983706 1.43335 -2.56148 0.110045 0.853486 0.509364 + -1.00783 1.42542 -2.53927 0.226335 0.85279 0.470661 + -1.03424 1.45059 -2.57296 0.242654 0.877825 0.412967 + -1.01887 1.40624 -2.49774 0.29741 0.849331 0.436101 + -1.03239 1.39605 -2.46553 0.355674 0.821062 0.44649 + -1.00499 1.37967 -2.45376 0.0919162 0.894453 0.437612 + -0.999376 1.37777 -2.44788 -0.206506 0.923662 0.322806 + -0.979449 1.38329 -2.44266 -0.34661 0.918114 0.192165 + -0.925289 1.40173 -2.43285 -0.0513829 0.945575 0.321322 + -1.04273 1.38481 -2.43909 0.429836 0.801685 0.415382 + -1.01192 1.37339 -2.43923 0.121277 0.893529 0.432317 + -1.0063 1.37149 -2.43335 -0.233676 0.931842 0.277609 + -0.980221 1.38175 -2.42299 -0.371224 0.917588 0.142217 + -1.08827 1.42286 -2.45185 0.426117 0.859083 0.283552 + -1.05053 1.3776 -2.41105 0.568071 0.769255 0.292475 + -1.02226 1.36215 -2.41278 0.155148 0.896973 0.413967 + -1.01648 1.3611 -2.40822 -0.265174 0.926222 0.267946 + -0.990394 1.37137 -2.39786 -0.464011 0.87689 0.125531 + -1.09325 1.41411 -2.40858 0.415229 0.863528 0.286189 + -1.05104 1.3772 -2.40825 0.622306 0.746965 0.23405 + -1.02852 1.35678 -2.39971 0.28 0.90287 0.32623 + -1.02274 1.35574 -2.39516 -0.194354 0.944319 0.265495 + -1.00467 1.35807 -2.36786 -0.560909 0.798007 0.220376 + -1.09274 1.4032 -2.37737 0.320379 0.825035 0.465483 + -1.05053 1.3663 -2.37704 0.560245 0.79439 0.234669 + -1.02904 1.35638 -2.39692 0.355279 0.908303 0.220823 + -1.026 1.35042 -2.37727 0.289123 0.927375 0.237451 + -1.0197 1.34977 -2.37551 -0.30177 0.900714 0.312488 + -1.09486 1.38622 -2.35472 0.171952 0.832809 0.526176 + -1.04089 1.3488 -2.32091 0.425237 0.813488 0.39675 + -1.01635 1.33292 -2.32115 -0.0999424 0.994492 0.03158 + -1.12788 1.37252 -2.34763 -0.633704 0.60949 0.476384 + -1.10435 1.37495 -2.33329 -0.135443 0.802191 0.581503 + -1.05038 1.33753 -2.29949 0.06645 0.512045 0.856385 + -1.00133 1.34122 -2.31349 -0.338204 0.889775 0.306462 + -1.1388 1.35386 -2.35816 -0.912977 0.308797 0.266679 + -1.13502 1.34588 -2.32554 -0.785912 0.247448 0.566667 + -1.11149 1.3483 -2.31119 -0.291618 0.4455 0.846457 + -1.14148 1.32271 -2.34204 -0.858726 0.0330041 0.511372 + -1.12248 1.30853 -2.32584 -0.532563 -0.299047 0.7918 + -1.11603 1.3317 -2.30933 -0.439293 -0.140627 0.887269 + -1.05491 1.32093 -2.29762 -0.134271 -0.0906387 0.986791 + -0.999054 1.29229 -2.29894 -0.0651794 -0.270499 0.960511 + -0.98857 1.33391 -2.29523 -0.0910672 0.402129 0.911043 + -0.965906 1.38361 -2.34665 -0.464614 0.819483 0.335532 + -1.03163 1.2676 -2.31336 -0.0915104 -0.415923 0.904784 + -0.995083 1.20985 -2.34325 0.151109 -0.564242 0.811663 + -0.964126 1.2872 -2.29852 0.219764 -0.340606 0.914162 + -0.953642 1.32882 -2.2948 0.231449 0.138884 0.962882 + -0.953148 1.3763 -2.32838 -0.177089 0.709115 0.682492 + -1.02766 1.18516 -2.35767 0.0769188 -0.490747 0.8679 + -0.939121 1.26148 -2.32947 0.581246 -0.483077 0.65482 + -0.923982 1.32046 -2.31195 0.674161 -0.168656 0.71907 + -0.934902 1.34106 -2.30356 0.369274 0.260791 0.891978 + -0.890725 1.30614 -2.37069 0.828578 -0.213496 0.517569 + -0.902689 1.36227 -2.33865 0.836963 0.104198 0.537249 + -0.913609 1.38287 -2.33026 0.432614 0.508049 0.744803 + -0.934407 1.38854 -2.33714 -0.142712 0.75657 0.638149 + -0.925721 1.40547 -2.36051 -0.125967 0.953721 0.273036 + -0.872908 1.29932 -2.4042 0.872746 -0.143765 0.466525 + -0.884871 1.35545 -2.37217 0.908713 0.0655302 0.412246 + -0.88727 1.37715 -2.37596 0.902866 0.301393 0.306588 + -0.904923 1.3998 -2.35364 0.546583 0.695006 0.467133 + -0.900157 1.40875 -2.39705 0.37271 0.927874 0.0116933 + -0.926061 1.40019 -2.41319 -0.211593 0.973755 -0.0838376 + -0.951625 1.39691 -2.37665 -0.432442 0.901477 -0.0182436 + 0.987946 0.54202 -2.82794 0.314747 -0.758113 -0.571138 + 0.997797 0.583674 -2.84229 0.57196 -0.227225 -0.788182 + 1.00242 0.583273 -2.8373 0.815654 -0.202245 -0.542038 + 0.986215 0.583895 -2.84767 0.304597 -0.252697 -0.918349 + 0.994011 0.664209 -2.85276 0.576401 0.00390892 -0.817158 + 1.00283 0.663444 -2.84326 0.836168 -0.00551554 -0.548446 + 0.992571 0.541618 -2.82296 0.569947 -0.754798 -0.324716 + 0.969837 0.538851 -2.80456 -0.327952 -0.876351 0.352783 + 0.965146 0.539398 -2.81088 -0.49127 -0.865631 0.0966238 + 0.964997 0.54048 -2.8207 -0.47421 -0.819732 -0.321191 + 0.976634 0.541924 -2.83037 -0.100627 -0.76649 -0.634324 + 1.00691 0.582204 -2.82634 0.943677 -0.181814 -0.276437 + 1.00847 0.581138 -2.81623 0.983805 -0.178851 -0.0118181 + 0.994128 0.540551 -2.81285 0.64231 -0.764739 0.0511094 + 1.00732 0.662375 -2.83229 0.959681 -0.0220629 -0.280224 + 1.01029 0.66034 -2.81301 0.998707 -0.0508264 -0.000970925 + 1.00792 0.65881 -2.79987 0.939053 -0.0949233 0.330406 + 1.0061 0.579608 -2.80309 0.923809 -0.190563 0.332058 + 1.00774 0.761453 -2.82961 0.833553 0.059638 -0.549211 + 1.01479 0.756517 -2.81332 0.959144 -0.0194904 -0.282245 + 1.01776 0.754481 -2.79404 0.994713 -0.101179 -0.0175988 + 0.998922 0.76222 -2.83911 0.577709 0.132539 -0.80541 + 1.0087 0.88042 -2.8048 0.56572 0.167668 -0.807371 + 1.02098 0.874586 -2.79292 0.829802 0.0448848 -0.55625 + 1.02803 0.86965 -2.77662 0.948995 -0.0606477 -0.309405 + 0.980736 0.764743 -2.84695 0.304326 0.178861 -0.935625 + 0.990514 0.882944 -2.81263 0.307028 0.241703 -0.920496 + 0.999928 0.98995 -2.78141 0.232054 0.24215 -0.94208 + 1.02948 0.984916 -2.773 0.516343 0.120489 -0.847863 + 1.04177 0.979082 -2.76111 0.808312 -0.0403719 -0.587369 + 0.98243 0.664431 -2.85815 0.314251 0.00198932 -0.949338 + 0.959166 0.764559 -2.85158 -0.0536553 0.187806 -0.980739 + 0.960445 0.886619 -2.81796 -0.060877 0.274796 -0.959573 + 0.969859 0.993627 -2.78674 -0.0467908 0.309176 -0.949853 + 0.974903 0.583799 -2.8501 -0.0217184 -0.287312 -0.957591 + 0.96086 0.664247 -2.86277 -0.0562559 -0.0251938 -0.998098 + 0.932966 0.762391 -2.84343 -0.485838 0.152383 -0.860663 + 0.934244 0.884451 -2.80981 -0.476559 0.246822 -0.843783 + 0.927075 0.98972 -2.77383 -0.465841 0.261126 -0.845461 + 0.958226 0.58268 -2.84484 -0.432043 -0.335505 -0.837123 + 0.944182 0.663127 -2.85751 -0.467496 -0.0702007 -0.881203 + 0.910775 0.759637 -2.825 -0.75646 0.0909882 -0.64768 + 0.903272 0.875039 -2.78571 -0.760424 0.163012 -0.628636 + 0.896103 0.980307 -2.74972 -0.746515 0.121203 -0.654237 + 0.946589 0.581236 -2.83517 -0.67619 -0.372972 -0.635342 + 0.921991 0.660374 -2.83908 -0.745374 -0.12414 -0.654986 + 0.897648 0.753411 -2.80372 -0.961171 -0.0370587 -0.273452 + 0.890144 0.868814 -2.76442 -0.960313 0.0142307 -0.27856 + 0.877059 0.968103 -2.72052 -0.958223 -0.0487882 -0.28183 + 0.93824 0.5794 -2.82101 -0.867769 -0.417936 -0.268899 + 0.913643 0.658539 -2.82492 -0.937 -0.194307 -0.290302 + 0.897932 0.751349 -2.78499 -0.981591 -0.151304 0.116561 + 0.890512 0.858144 -2.74054 -0.983584 -0.146602 0.105215 + 0.877426 0.957433 -2.69664 -0.984458 -0.166027 0.0572543 + 0.93839 0.578319 -2.81119 -0.895967 -0.43484 0.0903148 + 0.913927 0.656476 -2.8062 -0.962066 -0.247728 0.114276 + 0.903445 0.746082 -2.76754 -0.884753 -0.241502 0.39861 + 0.896025 0.852877 -2.72309 -0.889135 -0.272227 0.367874 + 0.885224 0.944204 -2.66774 -0.902343 -0.331362 0.275638 + 0.941907 0.577135 -2.79946 -0.819989 -0.429965 0.377819 + 0.917445 0.655293 -2.79446 -0.875195 -0.276001 0.397313 + 0.91239 0.745039 -2.75548 -0.722376 -0.307996 0.619121 + 0.908478 0.845585 -2.70795 -0.728064 -0.367845 0.578457 + 0.897678 0.936912 -2.6526 -0.746277 -0.50435 0.434397 + 0.946598 0.576588 -2.79314 -0.68616 -0.416997 0.596069 + 0.92639 0.654249 -2.78241 -0.720316 -0.287327 0.631338 + 0.924211 0.742007 -2.74573 -0.543434 -0.349792 0.763102 + 0.920299 0.842552 -2.6982 -0.546813 -0.44217 0.710972 + 0.915673 0.920278 -2.64408 -0.571542 -0.567879 0.592328 + 0.954129 0.576099 -2.78652 -0.518299 -0.395967 0.758008 + 0.933921 0.65376 -2.77579 -0.547721 -0.289795 0.78487 + 0.935026 0.741769 -2.74041 -0.210655 -0.389935 0.896423 + 0.935371 0.839004 -2.69171 -0.213408 -0.503343 0.837319 + 0.930745 0.916726 -2.63758 -0.200866 -0.671679 0.713091 + 0.9598 0.575973 -2.78373 -0.206821 -0.349201 0.913938 + 0.944736 0.653521 -2.77047 -0.216427 -0.27386 0.937102 + 0.957243 0.741721 -2.74101 0.124426 -0.381724 0.915863 + 0.957588 0.838956 -2.6923 0.124447 -0.501602 0.856101 + 0.975509 0.538725 -2.80177 -0.0185124 -0.842729 0.53802 + 0.973945 0.576454 -2.78396 0.13036 -0.281896 0.950548 + 0.958881 0.654004 -2.7707 0.12086 -0.232587 0.965037 + 0.983544 0.743223 -2.74693 0.368552 -0.363115 0.855755 + 0.994271 0.841053 -2.70056 0.367816 -0.476657 0.798442 + 0.989302 0.539512 -2.80488 0.40503 -0.796139 0.44957 + 0.987738 0.577242 -2.78706 0.369585 -0.249085 0.895189 + 0.985181 0.655504 -2.77662 0.378428 -0.202257 0.903263 + 1.0048 0.746669 -2.75918 0.700584 -0.305787 0.64473 + 1.00127 0.578569 -2.79511 0.709695 -0.217832 0.669987 + 0.998712 0.656831 -2.78467 0.708462 -0.155975 0.688297 + 1.01401 0.748649 -2.77438 0.928875 -0.199865 0.31184 + 1.02839 0.852705 -2.73245 0.918584 -0.290291 0.268205 + 1.01553 0.844499 -2.71281 0.693033 -0.407387 0.594761 + 1.03214 0.858538 -2.75211 0.984747 -0.167407 -0.0474118 + 1.05609 0.956349 -2.71154 0.955449 -0.287842 -0.0653049 + 1.04433 0.934346 -2.68809 0.882035 -0.387309 0.268338 + 1.03147 0.926142 -2.66845 0.705381 -0.496106 0.506277 + 0.999984 0.910055 -2.65635 0.387036 -0.59509 0.704323 + 1.05198 0.967463 -2.73606 0.925331 -0.168578 -0.339625 + 1.0884 1.05881 -2.70415 0.93478 -0.2186 -0.280001 + 1.08784 1.03906 -2.65981 0.946229 -0.323299 0.011355 + 1.07608 1.01706 -2.63636 0.88807 -0.437073 -0.142472 + 1.03839 0.968117 -2.63106 0.690054 -0.723252 0.0270575 + 1.07819 1.07044 -2.72921 0.780503 -0.0701201 -0.621207 + 1.09758 1.13993 -2.71023 0.802931 -0.0429362 -0.594524 + 1.1102 1.13024 -2.67529 0.958558 -0.177376 -0.222946 + 1.10964 1.11049 -2.63095 0.969999 -0.177352 -0.166275 + 1.0836 1.00664 -2.61366 0.639169 -0.303516 -0.706641 + 1.05317 1.08021 -2.74869 0.465188 0.112529 -0.87803 + 1.07256 1.1497 -2.72971 0.446705 0.107534 -0.888195 + 1.08019 1.19637 -2.72071 0.441207 0.118918 -0.889491 + 1.10738 1.18459 -2.69952 0.810642 -0.014027 -0.585374 + 1.12001 1.17491 -2.66458 0.973171 -0.137212 -0.184691 + 1.02362 1.08524 -2.75711 0.130927 0.226315 -0.965215 + 1.033 1.1579 -2.73778 0.0918917 0.203959 -0.974657 + 1.04063 1.20456 -2.72877 0.0883932 0.184283 -0.97889 + 1.09014 1.26099 -2.7058 0.484544 0.125036 -0.865785 + 1.11733 1.24921 -2.68462 0.795821 0.0283972 -0.604866 + 0.972767 1.0861 -2.75409 -0.170756 0.289218 -0.941911 + 0.982147 1.15875 -2.73476 -0.175982 0.238265 -0.955123 + 0.985439 1.21494 -2.72337 -0.188342 0.232976 -0.95407 + 1.0019 1.26921 -2.71213 -0.119223 0.198162 -0.972891 + 1.05709 1.25883 -2.71753 0.146855 0.176704 -0.973247 + 0.929983 1.08219 -2.74118 -0.385176 0.292744 -0.87518 + 0.92431 1.14823 -2.71871 -0.391233 0.235568 -0.889631 + 0.927602 1.20442 -2.70733 -0.372542 0.201684 -0.905834 + 0.870745 1.07144 -2.71135 -0.699818 0.150315 -0.698327 + 0.865072 1.13749 -2.68888 -0.675653 0.152855 -0.721199 + 0.861538 1.16186 -2.68141 -0.682124 0.143505 -0.717017 + 0.868219 1.24203 -2.66812 -0.580575 0.15414 -0.799483 + 0.934282 1.28459 -2.69404 -0.353678 0.168968 -0.919979 + 0.8517 1.05924 -2.68214 -0.971742 -0.136094 -0.192859 + 0.840866 1.11642 -2.65408 -0.983871 -0.0973136 -0.150093 + 0.837332 1.14079 -2.6466 -0.979924 -0.0931913 -0.176251 + 0.831071 1.17745 -2.63209 -0.978199 -0.0947031 -0.18482 + 0.865363 1.04126 -2.64315 -0.951262 -0.264788 0.158077 + 0.854529 1.09843 -2.61509 -0.957178 -0.218926 0.189424 + 0.852146 1.12779 -2.60216 -0.957166 -0.20616 0.203302 + 0.845885 1.16446 -2.58764 -0.945983 -0.25868 0.195448 + 0.873162 1.02803 -2.61425 -0.972441 -0.212683 0.0955218 + 0.86407 1.08456 -2.57384 -0.979238 -0.172113 0.107099 + 0.861687 1.11392 -2.56091 -0.977969 -0.170595 0.120308 + 0.851029 1.16885 -2.55106 -0.963132 -0.237416 0.126533 + 0.824131 1.24066 -2.58161 -0.995574 -0.083762 0.0426153 + 0.87787 1.01106 -2.57668 -0.90883 -0.377834 0.17683 + 0.868778 1.06759 -2.53626 -0.949647 -0.230657 0.212056 + 0.866668 1.10639 -2.51694 -0.948296 -0.206688 0.240863 + 0.856009 1.16132 -2.50709 -0.949884 -0.216402 0.225587 + 0.895865 0.994424 -2.56815 -0.695386 -0.694595 0.184325 + 0.901376 0.991044 -2.52247 -0.8106 -0.424983 0.402886 + 0.884215 1.05816 -2.50507 -0.796943 -0.331244 0.505133 + 0.882104 1.09696 -2.48575 -0.787024 -0.292682 0.543076 + 0.871687 1.15593 -2.47057 -0.792053 -0.221006 0.569042 + 0.935615 0.955693 -2.59324 -0.389208 -0.860238 0.329405 + 0.946387 0.944402 -2.56808 -0.679977 -0.499001 -0.537242 + 0.906638 0.983132 -2.54299 -0.8216 -0.565443 -0.0724466 + 0.963302 0.907958 -2.64809 0.140922 -0.643664 0.752222 + 0.968171 0.946924 -2.60376 -0.0518793 -0.982319 0.179883 + 0.97527 0.937947 -2.5867 -0.423606 -0.498285 -0.756485 + 0.959722 0.886523 -2.57604 -0.762568 -0.106516 -0.638079 + 0.951332 0.882736 -2.55468 -0.924249 -0.24845 -0.289889 + 1.00689 0.95203 -2.61896 0.35333 -0.92978 0.10328 + 1.01399 0.943052 -2.6019 -0.132118 -0.450158 -0.883121 + 0.988605 0.880068 -2.59465 -0.472837 0.00799295 -0.881114 + 0.998872 0.806418 -2.59956 -0.536595 -0.0478441 -0.842483 + 0.982965 0.80307 -2.58489 -0.800322 -0.138274 -0.583408 + 1.0459 0.957702 -2.60835 0.0874554 -0.346659 -0.933905 + 1.01727 0.884079 -2.60747 -0.320112 0.0429812 -0.946404 + 1.02754 0.810431 -2.61238 -0.262063 -0.00013178 -0.965051 + 1.04918 0.898729 -2.61392 0.0245274 0.017327 -0.999549 + 1.04952 0.812386 -2.61464 0.103179 0.0159324 -0.994535 + 1.03571 0.720992 -2.61362 -0.265146 0.0393099 -0.963407 + 1.01516 0.718116 -2.60443 -0.548501 -0.00795235 -0.836112 + 0.999249 0.714768 -2.58976 -0.81873 -0.085002 -0.567852 + 1.07173 0.899269 -2.60639 0.429908 -0.0426861 -0.901863 + 1.07207 0.812925 -2.60711 0.461009 0.0202921 -0.887164 + 1.07386 0.723332 -2.61049 0.46477 0.0795256 -0.881853 + 1.05769 0.722945 -2.61589 0.11051 0.0712288 -0.991319 + 1.10668 1.01755 -2.59929 0.772028 -0.15355 -0.616761 + 1.09481 0.910179 -2.59202 0.699479 -0.0814139 -0.710001 + 1.08755 0.812336 -2.59548 0.718718 0.00540434 -0.695281 + 1.11904 1.09943 -2.58885 0.935383 -0.0609495 -0.348344 + 1.12524 1.01362 -2.56363 0.934191 -0.109256 -0.339634 + 1.10833 0.908268 -2.57246 0.915023 -0.0934332 -0.392433 + 1.10107 0.810427 -2.57592 0.917366 -0.0182307 -0.397626 + 1.12827 1.16642 -2.56773 0.916495 -0.0637501 -0.394933 + 1.13759 1.0955 -2.55319 0.932415 -0.075096 -0.353501 + 1.13119 1.0094 -2.5323 0.985605 -0.154897 -0.0677514 + 1.11428 0.904054 -2.54113 0.991718 -0.120902 -0.0433471 + 1.10538 0.80779 -2.55604 0.997264 -0.053058 -0.0514714 + 1.11888 1.17747 -2.60983 0.984639 -0.134004 -0.111936 + 1.13103 1.2421 -2.59744 0.963626 -0.22808 -0.139301 + 1.14208 1.23005 -2.55351 0.900858 -0.150553 -0.407171 + 1.14901 1.14333 -2.53409 0.924846 -0.0943328 -0.368457 + 1.13216 1.23954 -2.65219 0.965927 -0.123771 -0.227299 + 1.15182 1.31268 -2.59848 0.966166 -0.0273945 -0.256462 + 1.16287 1.30063 -2.55454 0.955692 -0.096258 -0.278186 + 1.17659 1.27611 -2.50215 0.971841 -0.0666209 -0.226025 + 1.16281 1.20696 -2.51987 0.927666 -0.101556 -0.359335 + 1.14094 1.31582 -2.63344 0.936773 0.0667136 -0.34352 + 1.13698 1.37706 -2.61403 0.907712 0.317374 -0.274468 + 1.14786 1.37391 -2.57907 0.892462 0.397913 -0.212549 + 1.16205 1.35816 -2.54154 0.931142 0.308527 -0.194385 + 1.12611 1.3255 -2.66586 0.828528 0.117144 -0.547557 + 1.12174 1.38945 -2.64227 0.847024 0.342069 -0.406866 + 1.11399 1.43808 -2.58024 0.869691 0.485386 -0.0896594 + 1.12543 1.41096 -2.55294 0.863571 0.502391 -0.0429885 + 1.13962 1.39521 -2.51541 0.783226 0.594915 -0.180646 + 1.10373 1.35185 -2.68466 0.558573 0.241557 -0.793503 + 1.09936 1.4158 -2.66107 0.63565 0.483752 -0.601609 + 1.09875 1.45047 -2.60848 0.698105 0.641172 -0.318666 + 1.09815 1.46439 -2.55821 0.424709 0.862599 0.274855 + 1.07067 1.34969 -2.69638 0.181525 0.227355 -0.956744 + 1.07108 1.41769 -2.67773 0.295818 0.468546 -0.83244 + 1.08251 1.44345 -2.64039 0.47912 0.716705 -0.506732 + 1.06681 1.46496 -2.62013 0.324433 0.889911 -0.320627 + 1.08305 1.47199 -2.58823 0.233902 0.971903 -0.0263657 + 0.984992 1.30116 -2.70562 -0.15007 0.150493 -0.977155 + 1.05377 1.38164 -2.68987 0.0639528 0.246367 -0.967064 + 1.00678 1.42268 -2.67934 0.0303983 0.440531 -0.897223 + 1.05423 1.44533 -2.65705 0.25189 0.674749 -0.693733 + 1.04387 1.46803 -2.63609 0.281663 0.877357 -0.388472 + 0.989471 1.38663 -2.69149 -0.129266 0.252697 -0.958872 + 0.984619 1.43677 -2.67203 -0.0806959 0.452751 -0.887978 + 1.03207 1.45942 -2.64973 0.172443 0.663187 -0.728318 + 0.994238 1.48267 -2.63483 0.113418 0.983473 -0.141127 + 1.03184 1.47121 -2.61748 0.122801 0.972111 0.199798 + 0.938761 1.37007 -2.67991 -0.370233 0.213149 -0.904154 + 0.94975 1.43807 -2.66388 -0.299035 0.398689 -0.866963 + 0.982433 1.47406 -2.64846 -0.0170661 0.710269 -0.703724 + 0.968794 1.48219 -2.62952 -0.131853 0.980579 0.145185 + 1.00639 1.47073 -2.61217 -0.00772869 0.860127 0.510021 + 0.890704 1.39669 -2.64796 -0.546375 0.237799 -0.803073 + 0.901693 1.4647 -2.63194 -0.248292 0.809819 -0.531549 + 0.920867 1.45928 -2.62568 -0.0361548 0.971886 -0.232661 + 0.947564 1.47536 -2.64032 -0.427905 0.810497 -0.399991 + 0.942097 1.46611 -2.61488 -0.136237 0.922781 0.360437 + 0.833628 1.23334 -2.64018 -0.844625 0.0435963 -0.53358 + 0.856113 1.388 -2.62003 -0.803156 0.231255 -0.549055 + 0.880149 1.47123 -2.59456 -0.322878 0.874982 -0.360773 + 0.899324 1.46581 -2.5883 0.313253 0.949669 0.0014485 + 0.826689 1.29654 -2.58971 -0.985476 0.105748 -0.132868 + 0.830941 1.35176 -2.56829 -0.983881 0.156422 -0.0866655 + 0.860366 1.44322 -2.59861 -0.707207 0.393229 -0.587562 + 0.870421 1.4822 -2.55045 -0.321848 0.946217 -0.0329823 + 0.829275 1.24505 -2.54502 -0.977149 -0.117161 0.177352 + 0.831513 1.32636 -2.53217 -0.979601 0.0821127 0.183413 + 0.850637 1.45419 -2.5545 -0.901783 0.432183 -0.00239404 + 0.839621 1.23668 -2.50593 -0.949246 -0.134066 0.284532 + 0.841858 1.31798 -2.49307 -0.954846 0.101224 0.279325 + 0.869253 1.38921 -2.46263 -0.909505 0.226027 0.348873 + 0.851209 1.42879 -2.51838 -0.927781 0.236296 0.288768 + 0.855299 1.23129 -2.46941 -0.894114 -0.187062 0.4069 + 0.85271 1.29318 -2.44602 -0.943243 -0.05159 0.328073 + 0.85511 1.31488 -2.44981 -0.939949 0.187947 0.284906 + 0.882504 1.38611 -2.41937 -0.796883 0.548155 0.253977 + 0.887089 1.43529 -2.45388 -0.315207 0.615308 0.722524 + 0.898877 1.14416 -2.44938 -0.704967 -0.285147 0.649395 + 0.875496 1.23743 -2.42759 -0.797324 -0.276447 0.536518 + 0.872908 1.29932 -2.4042 -0.854907 -0.177021 0.487645 + 0.884871 1.35545 -2.37217 -0.912129 0.0578571 0.4058 + 0.88727 1.37715 -2.37596 -0.904135 0.306716 0.297431 + 0.909294 1.08518 -2.46457 -0.608674 -0.388468 0.691815 + 0.929246 1.15389 -2.41 -0.565243 -0.396482 0.723396 + 0.905865 1.24716 -2.38821 -0.75964 -0.321651 0.565233 + 0.890725 1.30614 -2.37069 -0.832401 -0.226854 0.505615 + 0.902689 1.36227 -2.33865 -0.828869 0.0837425 0.55314 + 0.909084 1.05672 -2.48303 -0.595346 -0.388792 0.703138 + 0.94123 1.06063 -2.45651 -0.555259 -0.370464 0.744609 + 0.941441 1.08909 -2.43805 -0.436782 -0.466273 0.769293 + 0.970078 1.18412 -2.3742 -0.38829 -0.493812 0.778062 + 0.939121 1.26148 -2.32947 -0.574656 -0.442021 0.688758 + 0.926244 0.989602 -2.50043 -0.660747 -0.319605 0.679166 + 0.947515 0.988032 -2.47932 -0.640773 -0.281272 0.71435 + 0.976925 1.05923 -2.42945 -0.427862 -0.319987 0.845306 + 0.982273 1.11932 -2.40225 -0.323441 -0.428492 0.843671 + 0.995083 1.20985 -2.34325 -0.157687 -0.516432 0.841684 + 0.94607 0.890647 -2.53416 -0.94841 -0.314742 0.0381689 + 0.948293 0.888791 -2.52055 -0.866167 -0.286237 0.409663 + 0.969564 0.887221 -2.49944 -0.68352 -0.268036 0.678939 + 0.983211 0.986638 -2.45225 -0.445047 -0.282407 0.849811 + 1.02824 1.06834 -2.41296 -0.117636 -0.360854 0.925174 + 0.974575 0.799283 -2.56353 -0.935873 -0.193842 -0.294221 + 0.971928 0.796861 -2.54853 -0.971737 -0.232327 -0.0418498 + 0.974151 0.795004 -2.53492 -0.90073 -0.261043 0.347191 + 0.984676 0.793525 -2.51975 -0.749839 -0.256518 0.609869 + 0.991862 0.88563 -2.47769 -0.505107 -0.255457 0.824383 + 0.993234 0.71205 -2.57445 -0.945975 -0.146477 -0.289266 + 0.990587 0.70963 -2.55944 -0.97929 -0.200358 -0.0291079 + 0.992181 0.708298 -2.54969 -0.903422 -0.259878 0.341015 + 1.00271 0.706819 -2.53452 -0.740571 -0.287228 0.607499 + 1.00697 0.791935 -2.498 -0.512016 -0.260521 0.818516 + 1.01579 0.628792 -2.60633 -0.824134 -0.0222522 -0.565958 + 1.00978 0.626076 -2.59102 -0.952397 -0.113574 -0.282916 + 1.0081 0.624545 -2.58153 -0.980802 -0.192541 -0.0308912 + 1.0097 0.623214 -2.57178 -0.895208 -0.292463 0.336256 + 1.02585 0.630909 -2.6156 -0.561691 0.0751339 -0.823928 + 1.02995 0.543948 -2.62785 -0.809956 -0.125098 -0.572994 + 1.02685 0.542552 -2.61998 -0.926257 -0.225626 -0.301896 + 1.02518 0.541021 -2.61049 -0.947032 -0.316871 -0.0521857 + 1.026 0.540337 -2.60548 -0.860336 -0.419876 0.28901 + 1.0464 0.633785 -2.62479 -0.267439 0.132618 -0.954405 + 1.05057 0.547545 -2.64185 -0.268027 0.0477455 -0.962227 + 1.04 0.546065 -2.63712 -0.544351 -0.00889653 -0.83881 + 1.04974 0.502079 -2.63603 -0.422816 -0.686006 -0.592134 + 1.04665 0.500682 -2.62816 -0.554379 -0.805867 -0.207947 + 1.0603 0.635021 -2.62623 0.0989327 0.158535 -0.982384 + 1.06447 0.54878 -2.64328 0.112793 0.0671725 -0.991345 + 1.06031 0.503558 -2.64075 0.00466642 -0.612756 -0.790258 + 1.07647 0.635409 -2.62083 0.465277 0.146974 -0.872878 + 1.07278 0.548979 -2.6405 0.460168 0.0463376 -0.886622 + 1.06862 0.503757 -2.63797 0.433434 -0.630586 -0.643814 + 1.04747 0.499998 -2.62314 -0.470179 -0.872482 0.133066 + 1.03266 0.539402 -2.59588 -0.688048 -0.482461 0.542053 + 1.08626 0.635036 -2.61347 0.722361 0.106177 -0.683317 + 1.08257 0.548607 -2.63315 0.722697 -0.00993789 -0.691094 + 1.0736 0.503052 -2.63077 0.65789 -0.698827 -0.280752 + 1.05569 0.499412 -2.61513 -0.147125 -0.899693 0.410983 + 1.08934 0.722745 -2.59886 0.72634 0.0638904 -0.68436 + 1.09595 0.633667 -2.59945 0.92152 0.0295302 -0.387206 + 1.08755 0.547902 -2.62594 0.906116 -0.0936436 -0.412535 + 1.09027 0.546235 -2.61337 0.976583 -0.203776 -0.0690043 + 1.07232 0.501492 -2.6209 0.583831 -0.802985 0.11982 + 1.09904 0.721375 -2.58483 0.919627 0.0253546 -0.391973 + 1.09868 0.632 -2.58687 0.99689 -0.0619245 -0.0487428 + 1.08899 0.544675 -2.60351 0.934364 -0.294293 0.200884 + 1.08432 0.542717 -2.59263 0.791187 -0.393912 0.467821 + 1.06726 0.500393 -2.61599 0.293305 -0.877701 0.378963 + 1.10334 0.71874 -2.56495 0.998754 -0.031418 -0.0387635 + 1.09617 0.628966 -2.56769 0.958432 -0.148798 0.243447 + 1.0915 0.627008 -2.55681 0.820517 -0.23856 0.519462 + 1.07925 0.541618 -2.58772 0.521297 -0.480539 0.705217 + 1.10084 0.715706 -2.54576 0.963889 -0.0867574 0.251776 + 1.09345 0.712609 -2.52855 0.824137 -0.154241 0.544984 + 1.08166 0.624867 -2.54726 0.530313 -0.329002 0.781362 + 1.06941 0.623335 -2.54301 0.227654 -0.374912 0.898674 + 1.06701 0.540086 -2.58347 0.22201 -0.524586 0.821901 + 1.10189 0.803559 -2.52927 0.963508 -0.0936371 0.250766 + 1.0945 0.800461 -2.51207 0.830416 -0.152188 0.535956 + 1.08361 0.710468 -2.51901 0.537032 -0.224469 0.813148 + 1.11079 0.899823 -2.51437 0.971224 -0.157704 0.178472 + 1.10344 0.895543 -2.48919 0.852377 -0.221128 0.473873 + 1.08077 0.797475 -2.49876 0.531209 -0.210876 0.820578 + 1.0614 0.795053 -2.49203 0.216387 -0.231473 0.948471 + 1.06424 0.708045 -2.51229 0.220171 -0.267296 0.938124 + 1.12641 1.00262 -2.48896 0.966955 -0.19798 0.160628 + 1.11906 0.99834 -2.46379 0.923091 -0.248697 0.293349 + 1.08971 0.892558 -2.47588 0.513149 -0.276033 0.812701 + 1.14487 1.08771 -2.51268 0.981384 -0.178742 -0.0702674 + 1.14009 1.08092 -2.46934 0.964278 -0.230723 0.13013 + 1.13367 1.07878 -2.43703 0.929718 -0.269078 0.251437 + 1.11163 0.995224 -2.44649 0.656345 -0.339259 0.67388 + 1.15628 1.13553 -2.49358 0.97966 -0.196767 -0.039355 + 1.15085 1.13817 -2.44417 0.960349 -0.237198 0.146514 + 1.14443 1.13603 -2.41186 0.924564 -0.272338 0.266483 + 1.12625 1.07567 -2.41973 0.63928 -0.37914 0.66901 + 1.08301 0.991956 -2.43864 0.148433 -0.315211 0.937342 + 1.16746 1.19466 -2.47423 0.983086 -0.183135 -0.00209252 + 1.16203 1.19729 -2.42483 0.967483 -0.199114 0.155979 + 1.15392 1.18608 -2.39687 0.932199 -0.23209 0.277739 + 1.1364 1.13472 -2.39265 0.612832 -0.36903 0.698751 + 1.18124 1.2638 -2.45652 0.994293 -0.0962252 0.0460668 + 1.17078 1.25956 -2.40942 0.97265 -0.104292 0.207548 + 1.16267 1.24834 -2.38147 0.927814 -0.166154 0.333996 + 1.14588 1.18477 -2.37766 0.679575 -0.334967 0.652667 + 1.10035 1.13172 -2.38429 0.143664 -0.416404 0.897758 + 1.17934 1.31858 -2.44536 0.984294 0.13707 0.111249 + 1.16889 1.31433 -2.39827 0.9439 0.193923 0.267294 + 1.16229 1.3028 -2.37069 0.906753 0.132379 0.400344 + 1.16159 1.27016 -2.37019 0.904673 -0.0830735 0.41793 + 1.1448 1.20659 -2.36638 0.634223 -0.301725 0.711845 + 1.17577 1.33363 -2.48915 0.981536 0.163274 -0.0996451 + 1.16392 1.37191 -2.43618 0.927317 0.317474 0.198224 + 1.1542 1.34868 -2.39596 0.889209 0.310727 0.335792 + 1.1476 1.33715 -2.36837 0.885633 0.29452 0.359044 + 1.16035 1.38697 -2.47996 0.874099 0.472542 -0.112492 + 1.14797 1.4016 -2.42365 0.816306 0.520095 0.251286 + 1.13825 1.37837 -2.38343 0.879846 0.321204 0.350283 + 1.1388 1.35386 -2.35816 0.908964 0.309905 0.278824 + 1.12271 1.42414 -2.49449 0.77297 0.613209 -0.162766 + 1.14345 1.41591 -2.45904 0.745012 0.666919 -0.0132562 + 1.12521 1.41402 -2.39556 0.350047 0.839597 0.415385 + 1.12732 1.39703 -2.37291 0.529964 0.647941 0.547092 + 1.12788 1.37252 -2.34763 0.633704 0.60949 0.476384 + 1.10958 1.43727 -2.53091 0.807849 0.589261 -0.0123 + 1.10257 1.4502 -2.51064 0.299789 0.941673 0.152899 + 1.1157 1.43707 -2.47422 0.296098 0.947993 0.116767 + 1.12068 1.42832 -2.43095 0.202895 0.94604 0.252669 + 1.0872 1.45862 -2.55028 -0.101398 0.902043 0.419567 + 1.0651 1.43849 -2.51953 -0.365941 0.850762 0.377215 + 1.08047 1.43007 -2.47989 -0.400776 0.844491 0.355264 + 1.08827 1.42286 -2.45185 -0.426107 0.859088 0.283549 + 1.09325 1.41411 -2.40858 -0.415227 0.863527 0.286196 + 1.07211 1.46623 -2.58029 -0.266725 0.903942 0.334284 + 1.05158 1.44868 -2.55174 -0.321343 0.865676 0.383853 + 1.03239 1.39605 -2.46553 -0.310864 0.836032 0.452122 + 1.04273 1.38481 -2.43909 -0.428083 0.807162 0.406491 + 1.05053 1.3776 -2.41105 -0.56815 0.769207 0.292449 + 1.05477 1.46814 -2.60152 -0.0989378 0.98452 0.144679 + 1.03424 1.45059 -2.57296 -0.239177 0.872383 0.426313 + 1.01887 1.40624 -2.49774 -0.296905 0.851189 0.43281 + 1.01012 1.45852 -2.59516 -0.193792 0.797486 0.571367 + 1.00783 1.42542 -2.53927 -0.193781 0.858121 0.475477 + 0.989471 1.40881 -2.51649 0.00476487 0.906329 0.422545 + 1.00051 1.38963 -2.47497 -0.0955533 0.897131 0.431307 + 0.945825 1.4539 -2.59787 -0.0250903 0.822875 0.567669 + 0.983706 1.43335 -2.56148 -0.110033 0.853487 0.509366 + 0.97287 1.42479 -2.54844 0.0404528 0.903227 0.427253 + 0.966778 1.42428 -2.54303 0.380226 0.893452 0.239106 + 0.983379 1.4083 -2.51108 0.336158 0.889576 0.309279 + 0.934989 1.44534 -2.58484 0.390867 0.828509 0.400994 + 0.953587 1.43266 -2.53555 0.603205 0.790734 0.104323 + 0.958541 1.41872 -2.50155 0.537446 0.790063 0.294878 + 0.992297 1.39131 -2.47694 0.263415 0.883641 0.387029 + 0.921798 1.45373 -2.57736 0.507489 0.845633 0.165406 + 0.920107 1.45833 -2.51853 0.542512 0.832478 0.112524 + 0.925061 1.44439 -2.48453 0.558694 0.691864 0.457368 + 0.915893 1.4166 -2.44975 0.316288 0.703462 0.636477 + 0.967459 1.40174 -2.46741 0.423473 0.820583 0.383816 + 0.897632 1.47042 -2.52947 0.392928 0.916927 0.0696626 + 0.896257 1.46308 -2.48865 0.221543 0.858125 0.463184 + 0.925289 1.40173 -2.43285 0.137979 0.919375 0.36839 + 0.869045 1.47487 -2.50963 -0.481698 0.812999 0.327109 + 0.976856 1.38687 -2.4505 0.376357 0.853843 0.359594 + 0.979449 1.38329 -2.44266 0.323786 0.929389 0.177196 + 0.996782 1.38135 -2.45573 0.215565 0.906702 0.362523 + 0.926061 1.40019 -2.41319 0.10809 0.988204 -0.108484 + 0.980221 1.38175 -2.42299 0.400273 0.912347 0.0860484 + 0.999376 1.37777 -2.44788 0.224358 0.929167 0.293788 + 1.00499 1.37967 -2.45376 -0.0919162 0.894453 0.437612 + 0.900157 1.40875 -2.39705 -0.392869 0.91051 -0.128943 + 0.951625 1.39691 -2.37665 0.405354 0.911567 0.0687989 + 0.990394 1.37137 -2.39786 0.505034 0.851674 0.139969 + 1.0063 1.37149 -2.43335 0.249941 0.925642 0.284107 + 1.01192 1.37339 -2.43923 -0.121277 0.893529 0.432317 + 0.904923 1.3998 -2.35364 -0.546584 0.695006 0.467132 + 0.925721 1.40547 -2.36051 0.166479 0.943247 0.287351 + 0.934407 1.38854 -2.33714 0.154179 0.776337 0.611171 + 0.965906 1.38361 -2.34665 0.442761 0.835566 0.325258 + 0.913609 1.38287 -2.33026 -0.427888 0.509488 0.746548 + 0.934902 1.34106 -2.30356 -0.36947 0.224604 0.90169 + 0.953642 1.32882 -2.2948 -0.261363 0.113784 0.95851 + 0.953148 1.3763 -2.32838 0.178339 0.705545 0.685858 + 1.00133 1.34122 -2.31349 0.581175 0.611366 0.537091 + 1.00467 1.35807 -2.36786 0.560645 0.797741 0.222008 + 0.923982 1.32046 -2.31195 -0.564815 -0.21977 0.795415 + 0.964126 1.2872 -2.29852 -0.272026 -0.322621 0.906596 + 0.98857 1.33391 -2.29523 0.3075 0.366199 0.878261 + 0.999054 1.29229 -2.29894 0.202249 -0.194391 0.959848 + 1.03163 1.2676 -2.31336 0.0884451 -0.287302 0.953748 + 1.01635 1.33292 -2.32115 0.246751 0.578691 0.777323 + 1.0197 1.34977 -2.37551 0.301769 0.900714 0.312488 + 1.02274 1.35574 -2.39516 0.202451 0.942425 0.266175 + 1.02766 1.18516 -2.35767 0.0305372 -0.452893 0.891042 + 1.09442 1.18844 -2.3562 0.157629 -0.433256 0.88738 + 1.11827 1.21179 -2.35083 0.331964 -0.368864 0.868182 + 1.05547 1.29095 -2.308 -0.0301127 -0.185052 0.982267 + 1.04089 1.3488 -2.32091 -0.507567 0.665734 0.546968 + 1.03359 1.12844 -2.38576 -0.0801297 -0.444578 0.892149 + 1.12305 1.27855 -2.33621 0.393966 -0.259332 0.881781 + 1.0902 1.07266 -2.41137 0.119314 -0.380754 0.916946 + 1.02105 0.987635 -2.44024 -0.154308 -0.278709 0.947898 + 1.0297 0.886628 -2.46568 -0.103472 -0.260766 0.959841 + 1.06108 0.889287 -2.46803 0.183974 -0.274038 0.943958 + 1.03002 0.792394 -2.48968 -0.12729 -0.247442 0.960505 + 1.04174 0.706138 -2.5106 -0.108579 -0.29611 0.948962 + 1.04691 0.621429 -2.54133 -0.105556 -0.398376 0.911128 + 1.01869 0.705681 -2.51892 -0.508879 -0.303801 0.805449 + 1.03234 0.621138 -2.54659 -0.488823 -0.386644 0.782022 + 1.05544 0.539107 -2.5826 -0.0808367 -0.541862 0.836571 + 1.01635 0.62228 -2.56218 -0.730254 -0.346054 0.589046 + 1.04087 0.538816 -2.58787 -0.468016 -0.521579 0.713384 + 1.02226 1.36215 -2.41278 -0.155148 0.896973 0.413967 + 1.02852 1.35678 -2.39971 -0.28 0.90287 0.32623 + 1.05104 1.3772 -2.40825 -0.622327 0.746934 0.23409 + 1.01648 1.3611 -2.40822 0.267526 0.927142 0.26237 + 1.02904 1.35638 -2.39692 -0.355279 0.908303 0.220823 + 1.05053 1.3663 -2.37704 -0.604503 0.774731 0.185385 + 1.09274 1.4032 -2.37737 -0.291054 0.854274 0.430702 + 1.09486 1.38622 -2.35472 -0.0296707 0.815359 0.578194 + 1.10435 1.37495 -2.33329 0.135446 0.80219 0.581503 + 1.13502 1.34588 -2.32554 0.785912 0.247448 0.566667 + 1.05038 1.33753 -2.29949 -0.531035 0.271629 0.802633 + 1.11149 1.3483 -2.31119 0.291618 0.4455 0.846457 + 1.026 1.35042 -2.37727 -0.289128 0.927375 0.237444 + 1.11603 1.3317 -2.30933 0.439293 -0.140627 0.887269 + 1.05491 1.32093 -2.29762 -0.377026 -0.174552 0.909606 + 1.12248 1.30853 -2.32584 0.517317 -0.279085 0.809008 + 1.14148 1.32271 -2.34204 0.858726 0.0330041 0.511372 + 1.15027 1.30599 -2.35226 0.805698 0.0997527 0.583866 + 1.14957 1.27336 -2.35176 0.685183 -0.13648 0.71547 + -0.872043 1.89298 -1.22862 0.906308 0.309655 -0.287609 + -0.870466 1.89166 -1.22009 0.991227 0.124971 0.0430212 + -0.875993 1.86509 -1.23433 0.963138 -0.268909 -0.00727253 + -0.878416 1.90396 -1.21984 0.682344 0.718651 -0.133966 + -0.876839 1.90264 -1.21131 0.798859 0.588623 0.123882 + -0.873278 1.89039 -1.20845 0.877273 -0.0865625 0.472121 + -0.878806 1.86382 -1.22269 0.80529 -0.438182 0.39938 + -0.878324 1.8668 -1.24714 0.923999 -0.0316581 -0.381081 + -0.878844 1.8951 -1.23876 0.630611 0.522384 -0.573974 + -0.881941 1.90506 -1.22509 0.505147 0.792278 -0.342232 + -0.890991 1.82377 -1.25843 0.98238 -0.186885 0.00167389 + -0.893321 1.82549 -1.27123 0.92697 0.0239723 -0.374368 + -0.885126 1.86893 -1.25728 0.665671 0.256176 -0.700896 + -0.887826 1.89661 -1.24271 0.263853 0.670355 -0.693546 + -0.890922 1.90658 -1.22905 0.207468 0.850413 -0.483482 + -0.89469 1.82278 -1.24289 0.816384 -0.373652 0.440341 + -0.896376 1.771 -1.26494 0.873595 -0.112767 0.473409 + -0.892676 1.772 -1.28048 0.997121 0.0667434 0.035995 + -0.895936 1.77431 -1.29849 0.912621 0.230447 -0.337665 + -0.902286 1.82802 -1.2849 0.63934 0.29314 -0.710854 + -0.904845 1.82269 -1.23241 0.494555 -0.435937 0.751914 + -0.910577 1.77123 -1.25016 0.535428 -0.248437 0.807215 + -0.886475 1.71007 -1.2832 0.871928 -0.0515183 0.486916 + -0.88112 1.71182 -1.3056 0.990685 0.130028 0.0404335 + -0.88438 1.71413 -1.3236 0.912671 0.289861 -0.288119 + -0.88896 1.86373 -1.21221 0.483747 -0.495917 0.721148 + -0.903325 1.86447 -1.20606 0.132739 -0.436019 0.890094 + -0.924168 1.82424 -1.22396 0.108913 -0.391933 0.913524 + -0.9299 1.77278 -1.24171 0.142829 -0.285525 0.947668 + -0.880026 1.89016 -1.20144 0.579182 -0.214051 0.786594 + -0.89439 1.89091 -1.19529 0.162861 -0.23394 0.958514 + -0.90428 1.89206 -1.19567 -0.285973 -0.110498 0.951845 + -0.918214 1.86636 -1.2066 -0.333127 -0.221324 0.916538 + -0.878296 1.90197 -1.20528 0.783152 0.41717 0.461132 + -0.885044 1.90176 -1.19827 0.539733 0.162079 0.826086 + -0.89249 1.90214 -1.19508 0.214635 0.115231 0.969873 + -0.902379 1.90329 -1.19545 -0.289263 0.279122 0.915651 + -0.915198 1.89422 -1.20284 -0.647449 0.106059 0.754693 + -0.885643 1.90921 -1.20591 0.42256 0.901865 0.0898981 + -0.8871 1.90855 -1.19987 0.43175 0.7354 0.522282 + -0.894546 1.90894 -1.19668 0.0793515 0.716269 0.693298 + -0.900206 1.91005 -1.20039 -0.135364 0.87971 0.455837 + -0.908039 1.90442 -1.19917 -0.53612 0.404426 0.740955 + -0.889304 1.90999 -1.20868 0.215372 0.972149 0.0924182 + -0.887159 1.91034 -1.21301 0.493206 0.851323 0.178879 + -0.902818 1.91189 -1.21188 -0.138249 0.990397 -0.000590168 + -0.904962 1.91155 -1.20754 -0.246723 0.962109 0.116081 + -0.903867 1.91083 -1.20316 -0.236963 0.89282 0.383042 + -0.913211 1.9058 -1.20534 -0.67462 0.574165 0.463921 + -0.890685 1.91144 -1.21827 0.242829 0.956785 -0.159989 + -0.899021 1.91234 -1.21824 -0.0579772 0.985062 -0.162145 + -0.912241 1.90737 -1.21786 -0.545397 0.824269 -0.152059 + -0.914307 1.90651 -1.20973 -0.679593 0.722295 0.128231 + -0.899259 1.90748 -1.22901 -0.0452893 0.874012 -0.48379 + -0.908445 1.90781 -1.22421 -0.382049 0.863201 -0.330035 + -0.920418 1.89784 -1.2256 -0.698801 0.678636 -0.226122 + -0.922484 1.89698 -1.21745 -0.821951 0.564428 0.0762759 + -0.920371 1.8956 -1.209 -0.811236 0.318425 0.490409 + -0.903908 1.89837 -1.24266 -0.0996361 0.746249 -0.658168 + -0.913094 1.8987 -1.23785 -0.449539 0.75322 -0.480181 + -0.935862 1.8728 -1.2436 -0.734935 0.627395 -0.257385 + -0.938796 1.87199 -1.23129 -0.856756 0.510932 0.070134 + -0.936683 1.87061 -1.22284 -0.833461 0.274293 0.479694 + -0.898674 1.87111 -1.26329 0.247186 0.504264 -0.827416 + -0.914757 1.87286 -1.26323 -0.126644 0.629636 -0.766498 + -0.928538 1.87366 -1.25585 -0.512226 0.675654 -0.530204 + -0.961024 1.83316 -1.2666 -0.810346 0.510056 -0.288413 + -0.963958 1.83235 -1.2543 -0.919178 0.391394 0.0438425 + -0.915835 1.83019 -1.29091 0.233277 0.472791 -0.849736 + -0.937617 1.83285 -1.29074 -0.171827 0.568522 -0.804524 + -0.951398 1.83367 -1.28336 -0.572521 0.576395 -0.583084 + -0.904902 1.77684 -1.31216 0.636783 0.383808 -0.668729 + -0.923847 1.78005 -1.32045 0.226508 0.47211 -0.851943 + -0.94563 1.78271 -1.32028 -0.181963 0.492792 -0.850909 + -0.964985 1.78391 -1.3099 -0.639266 0.428759 -0.638361 + -0.897349 1.7179 -1.34324 0.626536 0.441472 -0.642305 + -0.916294 1.72112 -1.35154 0.237272 0.482735 -0.843012 + -0.947541 1.72482 -1.35133 -0.21631 0.420502 -0.881129 + -0.966896 1.726 -1.34095 -0.635336 0.344638 -0.691067 + -0.974611 1.7834 -1.29314 -0.883852 0.322957 -0.338385 + -0.869117 1.64944 -1.35508 0.96164 0.229512 -0.150244 + -0.882085 1.65322 -1.37472 0.737273 0.457839 -0.496801 + -0.898097 1.66592 -1.38022 0.34574 0.527152 -0.776257 + -0.929344 1.6696 -1.38002 -0.174811 0.420133 -0.890466 + -0.875055 1.65277 -1.32577 0.976768 0.0268427 0.212611 + -0.861878 1.58725 -1.38164 0.810577 0.58253 0.0601896 + -0.847109 1.57183 -1.41682 0.606951 0.544404 -0.578994 + -0.863122 1.58453 -1.42233 0.2779 0.460555 -0.843007 + -0.88041 1.65102 -1.30338 0.863869 -0.111854 0.491141 + -0.884443 1.60108 -1.31182 0.726892 0.579662 0.368266 + -0.867816 1.59058 -1.35233 0.791151 0.604791 0.0911428 + -0.838959 1.57718 -1.37458 -0.0929606 0.915269 -0.39197 + -0.904427 1.65354 -1.28173 0.504421 -0.221484 0.834568 + -0.90846 1.6036 -1.29017 0.351924 0.557286 0.752052 + -0.880133 1.59288 -1.26871 0.437136 0.885603 -0.156908 + -0.86893 1.59311 -1.27569 -0.345372 0.881904 0.320881 + -0.870447 1.59662 -1.30624 -0.182747 0.976742 -0.112155 + -0.900676 1.7103 -1.26843 0.566795 -0.183282 0.803213 + -0.932203 1.65554 -1.26966 0.248465 -0.263881 0.932004 + -0.950853 1.59833 -1.28282 0.0634073 0.500791 0.863243 + -0.908318 1.60006 -1.27887 0.0903891 0.971264 -0.220174 + -0.928452 1.71229 -1.25636 0.179959 -0.215087 0.959871 + -0.966784 1.65206 -1.26669 -0.179798 -0.0784023 0.980574 + -0.985434 1.59485 -1.27985 0.0396224 0.37881 0.924626 + -0.95071 1.59479 -1.27152 -0.189605 0.935081 -0.299456 + -0.950772 1.77543 -1.24251 -0.353209 -0.232864 0.9061 + -0.949324 1.71495 -1.25716 -0.30387 -0.149123 0.94097 + -0.987782 1.65617 -1.28064 -0.572072 0.200185 0.795399 + -1.02909 1.58369 -1.27341 -0.486597 0.588652 0.645532 + -0.986353 1.58749 -1.26568 -0.283168 0.945129 -0.162931 + -0.939057 1.82614 -1.2245 -0.353492 -0.224564 0.908083 + -0.95363 1.82897 -1.23424 -0.681336 -0.0257633 0.731517 + -0.965345 1.77828 -1.25224 -0.682496 -0.133003 0.718686 + -0.970322 1.71906 -1.2711 -0.666648 -0.0469242 0.743895 + -1.00127 1.65438 -1.2915 -0.823559 0.305949 0.477646 + -0.929133 1.86853 -1.21377 -0.659105 0.0268868 0.75157 + -0.96118 1.83107 -1.24331 -0.869195 0.177609 0.46147 + -0.976077 1.78081 -1.26509 -0.896511 0.00725937 0.442961 + -0.981054 1.7216 -1.28396 -0.886765 0.072845 0.456445 + -0.978855 1.78209 -1.27609 -0.982353 0.185872 0.0208488 + -0.985075 1.72368 -1.29993 -0.97906 0.203571 0.00074545 + -1.00529 1.65647 -1.30746 -0.954991 0.288837 -0.0675579 + -1.02939 1.58151 -1.30581 -0.802917 0.410275 -0.432433 + -1.04258 1.58189 -1.28426 -0.819923 0.552277 0.150722 + -0.980832 1.72499 -1.31697 -0.891432 0.267849 -0.36552 + -0.993663 1.65649 -1.33417 -0.860176 0.273327 -0.430569 + -0.979727 1.6575 -1.35814 -0.677031 0.312093 -0.666503 + -0.99587 1.58131 -1.37529 -0.700148 0.312471 -0.641993 + -1.01775 1.58153 -1.33251 -0.862554 0.302415 -0.405643 + -0.945141 1.64544 -1.38566 -0.364868 0.352261 -0.861849 + -0.961283 1.56924 -1.40281 -0.412822 0.280314 -0.866603 + -0.959292 1.50938 -1.42342 -0.340609 0.325865 -0.881928 + -1.01072 1.52239 -1.39266 -0.605649 0.402589 -0.686376 + -1.03261 1.52261 -1.34987 -0.674224 0.515633 -0.528719 + -0.878919 1.56037 -1.42798 -0.195071 0.310706 -0.930274 + -0.876928 1.5005 -1.44858 -0.144409 0.311681 -0.939149 + -0.91434 1.41689 -1.47011 -0.156472 0.311528 -0.937266 + -0.963096 1.45929 -1.44114 -0.315615 0.356528 -0.87936 + -1.01453 1.4723 -1.41038 -0.425182 0.364873 -0.828304 + -0.846034 1.46578 -1.46154 0.233616 0.241625 -0.941828 + -0.883447 1.38217 -1.48305 0.124474 0.13202 -0.983401 + -0.898388 1.34766 -1.48767 0.123335 -0.0950757 -0.9878 + -0.917624 1.35307 -1.48944 -0.00480222 -0.000494099 -0.999988 + -0.931404 1.37385 -1.48235 -0.146305 0.292848 -0.944899 + -0.825578 1.46091 -1.45214 0.562182 0.189546 -0.804999 + -0.858552 1.35956 -1.47319 0.409302 -0.0362143 -0.91168 + -0.873494 1.32504 -1.47781 0.291707 -0.289544 -0.911631 + -0.905805 1.32772 -1.47999 0.00711285 -0.419096 -0.907914 + -0.800462 1.47952 -1.42216 0.661257 0.205826 -0.72137 + -0.801622 1.36272 -1.44547 0.660726 -0.0894884 -0.745274 + -0.838096 1.3547 -1.4638 0.431881 -0.0956025 -0.896849 + -0.847121 1.30088 -1.4556 0.404243 -0.428369 -0.808139 + -0.878787 1.29238 -1.45967 0.135536 -0.536607 -0.832876 + -0.82419 1.56177 -1.40977 0.337066 0.553259 -0.761768 + -0.797539 1.54957 -1.40402 0.52542 0.33391 -0.782584 + -0.747944 1.46971 -1.36831 0.844839 0.0521338 -0.532475 + -0.776506 1.38133 -1.41549 0.844492 -0.077987 -0.52986 + -0.81319 1.62786 -1.33727 -0.337585 0.68048 -0.650372 + -0.796629 1.62009 -1.34554 0.206189 0.637418 -0.742418 + -0.769978 1.60789 -1.33978 0.543432 0.457793 -0.703638 + -0.745021 1.53976 -1.35016 0.834634 0.182101 -0.519833 + -0.853821 1.58612 -1.34676 -0.128819 0.933463 -0.334743 + -0.828052 1.63679 -1.30945 -0.693575 0.576219 -0.432348 + -0.810805 1.6878 -1.27831 -0.72497 0.464106 -0.508944 + -0.799337 1.68411 -1.29216 -0.350305 0.581457 -0.734298 + -0.782775 1.67633 -1.30044 0.167974 0.577252 -0.799103 + -0.838414 1.63727 -1.28553 -0.833488 0.531842 -0.149804 + -0.821167 1.68827 -1.25439 -0.948822 0.280937 -0.144264 + -0.815791 1.74438 -1.22561 -0.951264 0.268122 -0.152338 + -0.808645 1.74381 -1.24229 -0.747752 0.428121 -0.507523 + -0.797176 1.7401 -1.25615 -0.399648 0.532433 -0.746188 + -0.836896 1.63376 -1.25498 -0.888111 0.302075 0.346423 + -0.820232 1.68161 -1.23398 -0.957166 0.0693887 0.281101 + -0.824419 1.61758 -1.23136 -0.776615 0.159603 0.609423 + -0.807755 1.66545 -1.21036 -0.814483 -0.0830342 0.574216 + -0.806145 1.72636 -1.18875 -0.832721 -0.106153 0.543422 + -0.814856 1.73774 -1.2052 -0.961599 0.0447122 0.270793 + -0.850108 1.57875 -1.2451 -0.318682 0.693232 0.64643 + -0.835122 1.56096 -1.22364 -0.173449 0.690433 0.702295 + -0.809434 1.59979 -1.20989 -0.461089 -0.0244787 0.887016 + -0.796131 1.65424 -1.19988 -0.500294 -0.183112 0.846272 + -0.861311 1.57852 -1.23812 0.733863 0.679289 -0.00336986 + -0.849239 1.56173 -1.2133 0.777123 0.629332 0.0044704 + -0.8172 1.54075 -1.19538 0.0108935 0.571457 0.82056 + -0.794672 1.59027 -1.20888 -0.164164 0.049896 0.98517 + -0.781369 1.64472 -1.19888 0.0255952 -0.226581 0.973656 + -0.87211 1.63319 -1.23201 0.695116 0.40654 -0.592907 + -0.857655 1.61714 -1.21114 0.903617 0.223761 -0.365251 + -0.845582 1.60035 -1.18631 0.984695 0.170564 -0.0358382 + -0.831316 1.54152 -1.18504 0.775414 0.236603 0.58545 + -0.900294 1.64037 -1.24217 0.225142 0.590236 -0.775198 + -0.895755 1.68979 -1.20754 0.258425 0.552647 -0.792336 + -0.873755 1.68132 -1.19933 0.706402 0.434756 -0.558555 + -0.8593 1.66527 -1.17846 0.935592 0.270435 -0.227009 + -0.937101 1.64394 -1.24057 -0.1319 0.592101 -0.794996 + -0.932562 1.69336 -1.20595 -0.127838 0.56311 -0.816434 + -0.929618 1.74917 -1.16933 -0.134395 0.560104 -0.817448 + -0.903856 1.7466 -1.17053 0.228236 0.535647 -0.813013 + -0.881855 1.73813 -1.16231 0.695428 0.406208 -0.592768 + -0.972744 1.63665 -1.23472 -0.516066 0.56559 -0.64326 + -0.95376 1.69237 -1.19926 -0.514852 0.532319 -0.671985 + -0.950816 1.74817 -1.16265 -0.54821 0.518082 -0.656549 + -0.921356 1.79703 -1.13685 -0.137817 0.605058 -0.784163 + -0.895594 1.79447 -1.13804 0.230032 0.510906 -0.828288 + -0.985381 1.63085 -1.22063 -0.705974 0.603704 -0.370328 + -0.966397 1.68657 -1.18517 -0.872173 0.383358 -0.303894 + -0.95951 1.7442 -1.1529 -0.878662 0.362855 -0.310305 + -0.945054 1.79252 -1.1222 -0.826534 0.520191 -0.215043 + -0.93636 1.7965 -1.13195 -0.517403 0.627547 -0.581789 + -1.03001 1.57633 -1.25923 -0.575224 0.816809 -0.044055 + -1.0336 1.58068 -1.23618 -0.825629 0.542276 0.155799 + -0.988965 1.63519 -1.19758 -0.863934 0.503604 -0.0010976 + -0.970598 1.67943 -1.1668 -0.972993 0.229908 0.0206435 + -1.0855 1.52355 -1.28503 -0.72666 0.68691 0.0109257 + -1.07278 1.5156 -1.24957 -0.700988 0.495403 0.513022 + -1.03741 1.56026 -1.23476 -0.691879 0.213944 0.689588 + -0.986193 1.62416 -1.16889 -0.877818 0.208357 0.431304 + -0.967825 1.6684 -1.13811 -0.926718 0.0253183 0.374902 + -1.07231 1.52317 -1.30657 -0.63163 0.658588 -0.409031 + -1.1273 1.48199 -1.31873 -0.739385 0.631231 -0.234218 + -1.13437 1.47422 -1.2827 -0.842878 0.500701 0.19712 + -1.12165 1.46626 -1.24724 -0.689001 0.49929 0.525345 + -1.06195 1.51683 -1.33241 -0.530995 0.650958 -0.542492 + -1.11694 1.47565 -1.34457 -0.570321 0.593929 -0.567435 + -1.14774 1.43202 -1.33843 -0.881684 0.283683 -0.377038 + -1.15481 1.42424 -1.30241 -0.959185 0.275677 -0.0629799 + -1.07912 1.46677 -1.37376 -0.469743 0.541887 -0.696921 + -1.08654 1.42099 -1.39583 -0.492779 0.340748 -0.800662 + -1.12435 1.42987 -1.36663 -0.631998 0.330444 -0.700989 + -1.13619 1.36352 -1.37206 -0.836011 0.0723177 -0.543926 + -1.15203 1.37176 -1.33905 -0.949427 0.00150368 -0.313985 + -1.04978 1.47254 -1.39122 -0.510367 0.488991 -0.707399 + -1.05458 1.42328 -1.4134 -0.461849 0.324665 -0.825402 + -1.07643 1.36615 -1.41705 -0.456017 0.238863 -0.857317 + -1.11281 1.36137 -1.40025 -0.631286 0.163749 -0.758066 + -1.01932 1.42304 -1.43253 -0.428746 0.335059 -0.838995 + -1.04447 1.36845 -1.43462 -0.44154 0.212789 -0.871644 + -1.06289 1.32996 -1.4339 -0.433489 0.0534646 -0.899572 + -1.09927 1.32518 -1.4171 -0.566949 -0.13472 -0.812662 + -1.124 1.32265 -1.39441 -0.748603 -0.231306 -0.621362 + -0.999749 1.41196 -1.44675 -0.424941 0.315738 -0.848372 + -1.02934 1.36782 -1.44163 -0.450422 0.213904 -0.866813 + -1.04776 1.32933 -1.44091 -0.303422 -0.169625 -0.937637 + -1.0756 1.31095 -1.42544 -0.359296 -0.502092 -0.786645 + -1.10033 1.30842 -1.40275 -0.512621 -0.65194 -0.558743 + -0.98016 1.41624 -1.45338 -0.313735 0.356921 -0.879874 + -0.983801 1.36316 -1.47119 -0.44886 0.0466153 -0.892385 + -1.00976 1.35673 -1.45584 -0.476266 0.0428696 -0.878255 + -1.0232 1.32438 -1.44257 -0.164124 -0.561058 -0.811343 + -1.05104 1.306 -1.4271 -0.0461919 -0.735399 -0.676058 + -0.964212 1.36744 -1.47782 -0.278073 0.249054 -0.927711 + -0.950432 1.34667 -1.48492 -0.232695 -0.107729 -0.966565 + -0.959516 1.32626 -1.47543 -0.356838 -0.346624 -0.867478 + -0.975488 1.31856 -1.45992 -0.631631 -0.347653 -0.69295 + -0.986845 1.32558 -1.45128 -0.397712 -0.560167 -0.726662 + -0.997242 1.33079 -1.45792 -0.129543 -0.505558 -0.853012 + -0.92504 1.33313 -1.48176 -0.0503172 -0.374275 -0.925951 + -0.934125 1.31272 -1.47229 -0.0393786 -0.431432 -0.901286 + -0.953963 1.27147 -1.45152 -0.264284 -0.525873 -0.808462 + -0.969935 1.26377 -1.436 -0.5675 -0.62204 -0.539453 + -0.998013 1.28192 -1.41023 -0.681843 -0.57079 -0.457481 + -0.911098 1.29504 -1.46185 0.0410974 -0.496129 -0.867276 + -0.930936 1.2538 -1.44108 -0.0590664 -0.697573 -0.714075 + -0.956661 1.2448 -1.41453 -0.432946 -0.8877 -0.15667 + -0.893346 1.23712 -1.42343 0.13856 -0.841047 -0.522915 + -0.919071 1.22812 -1.39687 -0.226062 -0.973651 -0.030003 + -0.964953 1.26802 -1.36961 -0.365829 -0.845304 0.389398 + -0.984739 1.26295 -1.38875 -0.470922 -0.870186 0.144946 + -0.86168 1.24562 -1.41937 0.371123 -0.764703 -0.52678 + -0.89989 1.22817 -1.37247 -0.159891 -0.981796 0.102529 + -0.945771 1.26806 -1.34521 -0.4441 -0.803746 0.39594 + -0.988898 1.28436 -1.35462 -0.193064 -0.899432 0.392108 + -1.00868 1.27929 -1.37378 -0.205944 -0.946629 0.247952 + -0.810647 1.30891 -1.43728 0.663836 -0.38671 -0.640139 + -0.797745 1.30144 -1.40886 0.786186 -0.463423 -0.408841 + -0.848779 1.23816 -1.39094 0.408277 -0.865968 -0.288807 + -0.884292 1.22887 -1.33956 -0.202803 -0.96004 0.192857 + -0.940004 1.27931 -1.31705 -0.474272 -0.783072 0.402324 + -0.781434 1.29574 -1.36206 0.810838 -0.512512 -0.282618 + -0.833181 1.23887 -1.35803 0.484309 -0.865139 -0.130303 + -0.868618 1.23326 -1.31297 -0.10185 -0.938913 0.328737 + -0.92433 1.28369 -1.29046 -0.48995 -0.794124 0.359606 + -0.969913 1.30349 -1.30289 -0.26035 -0.878781 0.399952 + -0.760195 1.37562 -1.3687 0.893713 -0.185094 -0.408676 + -0.744214 1.35836 -1.33319 0.945043 -0.275886 -0.175448 + -0.769769 1.30105 -1.3271 0.854378 -0.519446 -0.014623 + -0.821516 1.24417 -1.32307 0.499518 -0.864519 0.0555766 + -0.731964 1.45244 -1.3328 0.992013 -0.0319239 -0.122028 + -0.742543 1.37551 -1.30253 0.966831 -0.210614 0.144497 + -0.768097 1.31819 -1.29644 0.892271 -0.438289 0.108423 + -0.804387 1.25859 -1.2947 0.630796 -0.774476 0.0477846 + -0.851488 1.24768 -1.28461 -0.067139 -0.931338 0.357913 + -0.731258 1.53341 -1.31358 0.998527 -0.0148241 0.0521915 + -0.741959 1.47673 -1.30362 0.901197 -0.00626066 0.433365 + -0.737625 1.4509 -1.30698 0.948698 0.0533647 0.311649 + -0.748204 1.37398 -1.2767 0.956536 -0.145545 0.252698 + -0.73042 1.58921 -1.28664 0.996852 -0.0416892 -0.0674328 + -0.754843 1.53399 -1.27322 0.864178 -0.240312 0.442093 + -0.765543 1.47731 -1.26327 0.86311 0.0311546 0.504054 + -0.771192 1.37805 -1.22652 0.854608 0.073574 0.514034 + -0.766858 1.35223 -1.22987 0.887648 -0.0364215 0.459079 + -0.744183 1.59556 -1.32321 0.797809 0.277038 -0.535491 + -0.73886 1.65542 -1.28029 0.804516 0.334796 -0.490577 + -0.729767 1.64655 -1.26158 0.988651 0.118691 -0.0920931 + -0.735051 1.58088 -1.25955 0.924088 -0.288213 0.250988 + -0.764655 1.66775 -1.29685 0.51872 0.478771 -0.708313 + -0.767748 1.72589 -1.25841 0.507052 0.46029 -0.728719 + -0.749705 1.71721 -1.2469 0.781544 0.341015 -0.522396 + -0.740612 1.70835 -1.2282 0.98953 0.115902 -0.0860029 + -0.734398 1.63822 -1.23451 0.936057 -0.0757107 0.343605 + -0.785869 1.73448 -1.26199 0.104175 0.541907 -0.833957 + -0.775806 1.7833 -1.22897 0.112083 0.538153 -0.835361 + -0.762937 1.77707 -1.22652 0.484678 0.387595 -0.784129 + -0.744894 1.76839 -1.21501 0.779226 0.193029 -0.596278 + -0.787113 1.78893 -1.22313 -0.34934 0.613948 -0.707834 + -0.755451 1.82303 -1.20038 0.1374 0.551877 -0.822528 + -0.742583 1.81679 -1.19792 0.497042 0.347328 -0.795181 + -0.729409 1.81058 -1.18933 0.77529 0.121646 -0.619781 + -0.73841 1.76216 -1.20164 0.97978 -0.0917826 -0.177783 + -0.795407 1.79133 -1.21336 -0.658041 0.586085 -0.472744 + -0.764379 1.82667 -1.19626 -0.277715 0.681506 -0.677069 + -0.741745 1.84601 -1.18167 0.204181 0.659839 -0.723134 + -0.733057 1.84215 -1.17988 0.514365 0.496153 -0.699472 + -0.802553 1.79192 -1.19667 -0.882195 0.461421 -0.0939292 + -0.772673 1.82908 -1.18649 -0.579913 0.69253 -0.429073 + -0.750673 1.84965 -1.17755 -0.188094 0.794018 -0.578062 + -0.743052 1.85483 -1.16918 0.00447195 0.913352 -0.407147 + -0.738424 1.85294 -1.17131 0.27292 0.812698 -0.514817 + -0.801975 1.78702 -1.18221 -0.911946 0.234796 0.336491 + -0.778137 1.82888 -1.1742 -0.800014 0.597594 -0.0534719 + -0.756334 1.85098 -1.17113 -0.449576 0.819039 -0.35645 + -0.793264 1.77565 -1.16576 -0.782719 0.0284441 0.621725 + -0.777559 1.82398 -1.15972 -0.844614 0.357656 0.398383 + -0.761798 1.85078 -1.15885 -0.657911 0.752358 0.0333343 + -0.751545 1.85605 -1.1564 -0.326852 0.940235 0.0955249 + -0.748713 1.85615 -1.16277 -0.217755 0.957264 -0.190338 + -0.784826 1.76798 -1.15815 -0.511949 -0.171132 0.841797 + -0.771158 1.81581 -1.14754 -0.725054 0.144512 0.673359 + -0.761438 1.84749 -1.14925 -0.684288 0.573735 0.450087 + -0.794522 1.71516 -1.17827 -0.534363 -0.246129 0.808626 + -0.774765 1.76119 -1.15758 -0.0640767 -0.360595 0.930519 + -0.754731 1.8035 -1.13919 -0.0356894 -0.330692 0.943064 + -0.76272 1.80815 -1.13993 -0.445973 -0.098756 0.889581 + -0.78446 1.70838 -1.1777 -0.0523457 -0.337575 0.939842 + -0.763914 1.75726 -1.16133 0.283687 -0.432456 0.855864 + -0.74388 1.79956 -1.14295 0.298472 -0.448309 0.842576 + -0.734015 1.8273 -1.13362 0.388158 -0.136265 0.911463 + -0.741401 1.82964 -1.13126 0.107301 -0.0399785 0.993422 + -0.766167 1.63927 -1.20409 0.390237 -0.20961 0.896537 + -0.769258 1.70293 -1.18292 0.332011 -0.329471 0.883865 + -0.74944 1.75483 -1.17051 0.626237 -0.428749 0.651154 + -0.733049 1.79826 -1.14971 0.615789 -0.479637 0.625101 + -0.774195 1.59321 -1.20828 0.302909 -0.051395 0.951633 + -0.745318 1.63607 -1.21726 0.715067 -0.168922 0.67834 + -0.754784 1.7005 -1.1921 0.668835 -0.257342 0.697448 + -0.796723 1.54369 -1.19477 0.41874 0.0558634 0.906386 + -0.753347 1.59002 -1.22145 0.722071 -0.200015 0.662275 + -0.743863 1.70264 -1.20935 0.934175 -0.0959354 0.343675 + -0.865981 1.48471 -1.16314 0.40967 -0.0576064 0.910413 + -0.823026 1.46197 -1.17892 0.487505 0.0327931 0.872504 + -0.804852 1.47827 -1.19603 0.789687 -0.00834706 0.613453 + -0.796371 1.52699 -1.20372 0.878679 -0.194765 0.435878 + -0.850865 1.53594 -1.16128 0.655846 -0.118078 0.745603 + -0.926244 1.49054 -1.13347 0.22992 -0.104114 0.967624 + -0.957644 1.41559 -1.13398 0.174036 -0.0592022 0.982958 + -0.896919 1.43523 -1.15219 0.300657 -0.0208961 0.953503 + -0.853963 1.41249 -1.16796 0.30365 -0.0227408 0.952512 + -0.871136 1.58554 -1.14314 0.621126 -0.119351 0.774569 + -0.911128 1.54176 -1.13161 0.227288 -0.127485 0.965447 + -0.959461 1.50028 -1.13282 -0.360415 0.0938556 0.928058 + -0.990861 1.42533 -1.13332 -0.302588 0.130339 0.944168 + -0.976872 1.35841 -1.13414 0.101286 -0.115824 0.988092 + -0.851587 1.59112 -1.1669 0.861823 0.0620139 0.503404 + -0.876677 1.64231 -1.1261 0.62087 -0.184222 0.76196 + -0.900081 1.58792 -1.12604 0.266269 -0.213279 0.940007 + -0.937216 1.59524 -1.12558 -0.298504 -0.193999 0.934484 + -0.948263 1.54908 -1.13115 -0.399725 0.0225855 0.916357 + -0.855673 1.6544 -1.1612 0.983547 0.13168 0.123674 + -0.861678 1.64516 -1.14179 0.859872 -0.0649668 0.506359 + -0.887343 1.7067 -1.10138 0.59639 -0.26688 0.75703 + -0.905622 1.64469 -1.10901 0.241066 -0.27587 0.930474 + -0.868179 1.71596 -1.13054 0.994723 0.0547532 0.0867635 + -0.872343 1.70956 -1.11707 0.867025 -0.132453 0.480337 + -0.871456 1.76321 -1.09177 0.847421 -0.340439 0.407405 + -0.882147 1.76099 -1.0807 0.567752 -0.422483 0.706517 + -0.90756 1.70853 -1.08935 0.233078 -0.324331 0.916779 + -0.871806 1.72683 -1.1478 0.93999 0.223535 -0.25778 + -0.869894 1.77725 -1.11761 0.927553 0.0460175 -0.370847 + -0.867292 1.76962 -1.10525 0.988085 -0.150058 -0.0342125 + -0.879943 1.78854 -1.13211 0.668 0.295993 -0.682762 + -0.863138 1.82711 -1.10443 0.686355 0.24909 -0.68328 + -0.855652 1.81903 -1.09362 0.914461 -0.0115536 -0.404508 + -0.85305 1.8114 -1.08127 0.973057 -0.221965 -0.0623749 + -0.856177 1.80659 -1.07119 0.842332 -0.399671 0.361579 + -0.878788 1.83304 -1.11036 0.244258 0.523043 -0.816556 + -0.867431 1.85564 -1.09128 0.298002 0.713316 -0.634331 + -0.857132 1.85179 -1.0873 0.700486 0.527575 -0.480608 + -0.849646 1.84372 -1.07649 0.937572 0.293633 -0.186383 + -0.897558 1.83475 -1.10967 -0.1086 0.648312 -0.75359 + -0.886201 1.85735 -1.09059 -0.0874498 0.798326 -0.595842 + -0.880174 1.86256 -1.08044 -0.0212004 0.947889 -0.317893 + -0.870445 1.86166 -1.0808 0.230179 0.915618 -0.329637 + -0.860146 1.85782 -1.07682 0.607765 0.788699 -0.0925984 + -0.912562 1.83421 -1.10477 -0.476359 0.708658 -0.520467 + -0.896175 1.85682 -1.08738 -0.408271 0.816717 -0.407784 + -0.890148 1.86201 -1.07722 -0.294137 0.949637 -0.108037 + -0.878847 1.864 -1.07216 0.00391151 0.988105 0.153731 + -0.869117 1.86311 -1.07252 0.275387 0.948594 0.155986 + -0.91926 1.83109 -1.09737 -0.760482 0.631842 -0.149811 + -0.902873 1.85371 -1.07998 -0.686894 0.723839 -0.0650683 + -0.89362 1.8604 -1.07339 -0.46137 0.879973 0.113075 + -0.882319 1.86238 -1.06833 -0.109051 0.905853 0.409314 + -0.865237 1.85893 -1.06692 0.370934 0.853788 0.365314 + -0.948172 1.78724 -1.10924 -0.919925 0.3827 0.0853091 + -0.922378 1.82582 -1.0844 -0.85215 0.502488 0.146106 + -0.904925 1.85022 -1.07134 -0.767874 0.612468 0.187758 + -0.895672 1.85692 -1.06475 -0.510303 0.809169 0.291266 + -0.8803 1.85971 -1.0642 0.0638386 0.904216 0.422277 + -0.963711 1.73707 -1.13453 -0.979912 0.198758 0.0163388 + -0.946256 1.77957 -1.08917 -0.888549 0.20346 0.4112 + -0.920922 1.82009 -1.06974 -0.830829 0.32796 0.449628 + -0.903469 1.84451 -1.05668 -0.736943 0.455267 0.499646 + -0.894917 1.85396 -1.05715 -0.514719 0.71296 0.476184 + -0.961795 1.7294 -1.11447 -0.937814 0.0362235 0.345242 + -0.937389 1.77329 -1.07643 -0.674792 -0.0327488 0.737281 + -0.912055 1.81381 -1.057 -0.626707 0.0496546 0.777671 + -0.897618 1.84035 -1.04833 -0.547161 0.254233 0.797484 + -0.955425 1.65951 -1.12022 -0.686783 -0.168119 0.707153 + -0.949395 1.72051 -1.09659 -0.69239 -0.15808 0.703993 + -0.919181 1.76651 -1.0674 -0.272467 -0.264192 0.925183 + -0.898515 1.80898 -1.05025 -0.247126 -0.216284 0.944537 + -0.963392 1.60487 -1.13858 -0.64414 -0.148649 0.750325 + -0.929249 1.64988 -1.10723 -0.243327 -0.282701 0.927832 + -0.931187 1.71372 -1.08756 -0.279694 -0.290582 0.915059 + -0.902365 1.76281 -1.06867 0.194324 -0.405529 0.893188 + -0.990011 1.60374 -1.16747 -0.790188 0.0614481 0.609776 + -0.97759 1.55466 -1.16298 -0.70395 0.0336149 0.709453 + -1.00421 1.55353 -1.19186 -0.753481 0.145523 0.641163 + -1.03957 1.50887 -1.20666 -0.644419 0.380784 0.66312 + -0.988788 1.50586 -1.16464 -0.645305 0.220088 0.731534 + -1.09297 1.44319 -1.20978 -0.589007 0.397904 0.70338 + -1.06975 1.42015 -1.1794 -0.539634 0.343438 0.768665 + -1.01636 1.48583 -1.17629 -0.548849 0.35996 0.754449 + -1.15167 1.42218 -1.25256 -0.857123 0.312085 0.409808 + -1.12299 1.39912 -1.2151 -0.700725 0.1988 0.685173 + -1.11115 1.37852 -1.19769 -0.719032 0.175663 0.67241 + -1.08528 1.38534 -1.17552 -0.595048 0.27492 0.755207 + -1.01843 1.40529 -1.14496 -0.434601 0.216568 0.874197 + -1.1603 1.41239 -1.27724 -0.971525 0.219627 0.0889032 + -1.14928 1.36379 -1.24717 -0.884151 -0.0473791 0.464792 + -1.13744 1.34319 -1.22976 -0.844491 -0.0214769 0.535139 + -1.10434 1.33974 -1.18294 -0.69842 -0.0383065 0.714662 + -1.07848 1.34656 -1.16078 -0.535038 -0.0589606 0.842768 + -1.15752 1.35991 -1.31387 -0.987781 -0.0721246 -0.138155 + -1.15791 1.354 -1.27186 -0.979507 -0.109869 0.168806 + -1.14028 1.32026 -1.23683 -0.87522 -0.17426 0.451247 + -1.10719 1.31682 -1.19002 -0.672604 -0.271434 0.688424 + -1.05663 1.3173 -1.15837 -0.303517 -0.441757 0.844232 + -1.13984 1.33089 -1.36139 -0.919016 -0.152475 -0.36354 + -1.14995 1.32335 -1.3271 -0.951244 -0.250584 -0.179842 + -1.15034 1.31745 -1.28508 -0.966005 -0.258375 -0.00879001 + -1.14609 1.30588 -1.26206 -0.932197 -0.295606 0.208866 + -1.12251 1.28682 -1.22596 -0.711889 -0.462359 0.528619 + -1.12878 1.30845 -1.37287 -0.717244 -0.572547 -0.397179 + -1.1389 1.30092 -1.33857 -0.809437 -0.473829 -0.346839 + -1.13466 1.27087 -1.31396 -0.76777 -0.560942 -0.309632 + -1.13041 1.25932 -1.29094 -0.547328 -0.832256 0.0882171 + -1.12832 1.27245 -1.2512 -0.556755 -0.761701 0.331414 + -1.10613 1.29619 -1.37587 -0.386289 -0.848846 -0.360889 + -1.10453 1.28748 -1.35446 -0.379836 -0.767747 -0.516032 + -1.1003 1.25744 -1.32985 -0.13971 -0.905314 -0.401109 + -1.09158 1.25722 -1.30268 0.184173 -0.976334 0.11337 + -1.07767 1.29616 -1.40574 -0.256972 -0.864061 -0.432855 + -1.0541 1.28699 -1.38359 -0.20425 -0.941605 -0.267698 + -1.0525 1.27827 -1.36219 0.00662837 -0.964312 -0.264685 + -1.03138 1.2821 -1.34221 0.195588 -0.979978 -0.0372543 + -1.02267 1.2819 -1.31504 0.312634 -0.939515 0.139894 + -1.05239 1.28725 -1.38674 -0.144581 -0.938619 -0.313194 + -1.02715 1.28029 -1.38065 -0.147197 -0.986975 -0.0649175 + -1.01639 1.28195 -1.37049 -0.0297525 -0.977967 0.206628 + -0.995269 1.28579 -1.35051 0.0726601 -0.976132 0.20466 + -1.02576 1.29708 -1.4081 -0.0238752 -0.836328 -0.54771 + -1.02544 1.28055 -1.3838 -0.290863 -0.850832 -0.437588 + -1.01945 1.27762 -1.38393 -0.213561 -0.962452 -0.167564 + -1.01536 1.29187 -1.40145 -0.20208 -0.76181 -0.615475 + -1.00937 1.28894 -1.4016 -0.543251 -0.532229 -0.649315 + -0.975681 1.29224 -1.33105 -0.237009 -0.882469 0.406295 + -0.982052 1.29366 -1.32695 0.158455 -0.94054 0.30046 + -1.01727 1.29321 -1.28847 0.357158 -0.914166 0.191672 + -1.08949 1.27036 -1.26294 0.175018 -0.96174 0.21077 + -0.976651 1.30498 -1.30037 0.143032 -0.925213 0.351458 + -0.97443 1.31079 -1.28553 0.111352 -0.989558 0.0915218 + -1.00854 1.29778 -1.2616 0.267142 -0.95562 -0.124199 + -1.08077 1.27493 -1.23607 0.117449 -0.991031 0.0637386 + -1.10087 1.27697 -1.21521 -0.289717 -0.842208 0.454697 + -0.967692 1.30929 -1.28807 -0.283755 -0.931474 0.227685 + -0.972711 1.31055 -1.28343 -0.0629002 -0.98014 -0.188068 + -1.00682 1.29754 -1.2595 0.13348 -0.93992 -0.314219 + -1.03364 1.27882 -1.21467 0.0470027 -0.991369 -0.122387 + -1.05374 1.28086 -1.19382 -0.11955 -0.891196 0.437582 + -0.951437 1.30384 -1.27738 -0.391854 -0.912337 0.118712 + -0.956456 1.30509 -1.27275 -0.171368 -0.957468 -0.23214 + -0.973217 1.29523 -1.24871 0.00416175 -0.919687 -0.392631 + -1.00003 1.27652 -1.20389 -0.15396 -0.971044 -0.182677 + -0.921645 1.2939 -1.25628 -0.349703 -0.934104 0.0718102 + -0.928007 1.29472 -1.25153 -0.148986 -0.943339 -0.296506 + -0.944768 1.28487 -1.2275 -0.075795 -0.884943 -0.459491 + -0.894538 1.27375 -1.26936 -0.424659 -0.805226 0.413854 + -0.873612 1.2749 -1.24928 -0.359625 -0.856121 0.371114 + -0.890082 1.28386 -1.24262 -0.316667 -0.947785 0.0377581 + -0.896444 1.28468 -1.23787 -0.183211 -0.919789 -0.347019 + -0.907848 1.27721 -1.22204 -0.128606 -0.849989 -0.510862 + -0.830563 1.24882 -1.26453 0.0500492 -0.973579 0.222797 + -0.824941 1.26014 -1.23715 0.134504 -0.954576 0.265882 + -0.841411 1.2691 -1.23049 -0.440981 -0.86615 -0.235201 + -0.852815 1.26164 -1.21466 -0.0481074 -0.976155 -0.211675 + -0.804118 1.26001 -1.27021 0.639207 -0.761723 0.105795 + -0.798497 1.27132 -1.24282 0.657952 -0.709903 0.25127 + -0.792617 1.28394 -1.22778 0.722049 -0.624145 0.298476 + -0.830468 1.26529 -1.20629 0.368574 -0.830541 0.417558 + -0.767829 1.31962 -1.27193 0.87545 -0.481816 0.0379594 + -0.761949 1.33225 -1.25689 0.934551 -0.326203 0.142147 + -0.780603 1.31049 -1.21006 0.790034 -0.326356 0.518978 + -0.818454 1.29184 -1.18857 0.474744 -0.42833 0.768864 + -0.80509 1.36213 -1.18251 0.528553 -0.0371004 0.848089 + -0.830741 1.31746 -1.17781 0.312874 -0.149178 0.938006 + -0.913342 1.25765 -1.1709 0.157883 -0.755623 0.635694 + -0.935689 1.254 -1.17927 -0.149671 -0.978562 0.141473 + -0.97261 1.26164 -1.18472 -0.194946 -0.980533 0.0234855 + -0.786916 1.37844 -1.19961 0.795651 -0.0962921 0.598053 + -0.879614 1.36781 -1.16327 0.252023 -0.0747617 0.964829 + -0.925629 1.28328 -1.16015 0.232275 -0.209838 0.949745 + -0.781268 1.4777 -1.23637 0.862814 0.0326103 0.504469 + -0.772786 1.52642 -1.24407 0.842236 -0.253051 0.47603 + -0.752994 1.57331 -1.2304 0.795897 -0.349974 0.49403 + -0.916147 1.37805 -1.15235 0.2884 -0.10794 0.951407 + -0.962162 1.29351 -1.14923 0.11506 -0.380154 0.917738 + -0.997406 1.27631 -1.15377 -0.28009 -0.711521 0.644428 + -1.01212 1.34121 -1.13867 -0.187961 -0.197365 0.962142 + -1.02483 1.29119 -1.17293 -0.333986 -0.746365 0.575667 + -1.08555 1.30697 -1.17926 -0.430371 -0.486571 0.760283 + -1.03396 1.37048 -1.14108 -0.276228 0.0983286 0.956049 + -0.881699 1.8053 -1.05151 0.224009 -0.41161 0.883401 + -0.884078 1.83552 -1.04158 -0.147377 0.043993 0.988101 + -0.866868 1.80436 -1.06011 0.560762 -0.461412 0.687492 + -0.872943 1.83326 -1.04231 0.280845 -0.0786284 0.956527 + -0.870912 1.84504 -1.04603 0.346052 0.388959 0.853791 + -0.882047 1.8473 -1.0453 -0.0799213 0.439578 0.894642 + -0.889066 1.8498 -1.0488 -0.354846 0.543174 0.760951 + -0.851051 1.83385 -1.05827 0.861569 -0.0510504 0.505067 + -0.858111 1.83233 -1.05092 0.628433 -0.114909 0.76933 + -0.863225 1.84456 -1.05049 0.539952 0.391118 0.745304 + -0.869399 1.85334 -1.05423 0.335924 0.772242 0.539256 + -0.877086 1.85383 -1.04977 0.164155 0.747204 0.644002 + -0.847924 1.83866 -1.06835 0.985729 0.12353 0.114364 + -0.854544 1.84856 -1.06307 0.763419 0.544449 0.347515 + -0.856165 1.84608 -1.05784 0.693148 0.44524 0.56684 + -0.86484 1.85376 -1.05757 0.395155 0.744711 0.537827 + -0.856266 1.85362 -1.07121 0.738622 0.66465 0.112596 + -0.863219 1.85625 -1.06279 0.427837 0.802477 0.415915 + -0.884859 1.8593 -1.06086 -0.100546 0.974081 0.202626 + -0.884105 1.85633 -1.05326 -0.120769 0.838497 0.531355 + -0.741661 1.75646 -1.18278 0.901418 -0.322646 0.288696 + -0.72527 1.79989 -1.16198 0.882191 -0.401839 0.245487 + -0.722925 1.80436 -1.17595 0.960255 -0.19539 -0.199333 + -0.715678 1.83173 -1.16247 0.992216 0.0606605 -0.108756 + -0.718023 1.82726 -1.14849 0.927909 -0.120958 0.352639 + -0.723183 1.82601 -1.14039 0.699441 -0.170049 0.694166 + -0.719883 1.83594 -1.17128 0.812393 0.29715 -0.501716 + -0.722907 1.84586 -1.16508 0.738021 0.601064 -0.306672 + -0.718702 1.84165 -1.15626 0.904508 0.422866 0.0552204 + -0.719918 1.83933 -1.14902 0.884694 0.276454 0.375354 + -0.725078 1.83808 -1.14091 0.670735 0.225041 0.706733 + -0.729735 1.84908 -1.16954 0.540625 0.683133 -0.490973 + -0.727286 1.85203 -1.15864 0.668437 0.742372 0.0455698 + -0.727866 1.85081 -1.15354 0.505989 0.833739 0.221031 + -0.72402 1.8482 -1.15171 0.65874 0.729355 0.184669 + -0.725235 1.84589 -1.14446 0.627696 0.584031 0.514689 + -0.734115 1.85525 -1.16309 0.404735 0.885162 -0.229518 + -0.738743 1.85714 -1.16096 0.175885 0.981258 -0.0787225 + -0.741575 1.85703 -1.15459 0.111935 0.981126 0.157681 + -0.742155 1.85581 -1.14948 0.0830682 0.919877 0.383309 + -0.738837 1.85158 -1.14317 0.165112 0.81137 0.560729 + -0.734991 1.84898 -1.14134 0.28898 0.734137 0.614438 + -0.73085 1.84656 -1.14096 0.41381 0.578669 0.702783 + -0.730692 1.83876 -1.1374 0.461874 0.259079 0.848263 + -0.751185 1.85277 -1.14682 -0.338569 0.797565 0.49926 + -0.747867 1.84854 -1.14049 -0.240256 0.671139 0.70132 + -0.742219 1.8435 -1.13543 -0.00154157 0.516416 0.856336 + -0.738078 1.84109 -1.13504 0.251153 0.363366 0.897155 + -0.755037 1.83934 -1.13707 -0.550152 0.370944 0.748153 + -0.749389 1.83431 -1.13199 -0.282888 0.174373 0.943169 + 0.872043 1.89298 -1.22862 -0.906308 0.309655 -0.287609 + 0.878324 1.8668 -1.24714 -0.923999 -0.0316581 -0.381081 + 0.875993 1.86509 -1.23433 -0.963138 -0.268909 -0.00727253 + 0.878844 1.8951 -1.23876 -0.630611 0.522384 -0.573974 + 0.885126 1.86893 -1.25728 -0.665671 0.256176 -0.700896 + 0.893321 1.82549 -1.27123 -0.92697 0.0239723 -0.374368 + 0.890991 1.82377 -1.25843 -0.98238 -0.186885 0.00167389 + 0.870466 1.89166 -1.22009 -0.991227 0.124971 0.0430212 + 0.878416 1.90396 -1.21984 -0.68511 0.715364 -0.137398 + 0.881941 1.90506 -1.22509 -0.505147 0.792278 -0.342232 + 0.890922 1.90658 -1.22905 -0.207644 0.850486 -0.483278 + 0.887826 1.89661 -1.24271 -0.263922 0.670285 -0.693587 + 0.878806 1.86382 -1.22269 -0.805291 -0.438182 0.39938 + 0.873278 1.89039 -1.20845 -0.877273 -0.0865625 0.472121 + 0.876839 1.90264 -1.21131 -0.797739 0.590288 0.123178 + 0.887159 1.91034 -1.21301 -0.368141 0.929522 0.0214756 + 0.890685 1.91144 -1.21827 -0.242699 0.956851 -0.159792 + 0.89469 1.82278 -1.24289 -0.816301 -0.373796 0.440374 + 0.904845 1.82269 -1.23241 -0.494589 -0.436018 0.751845 + 0.88896 1.86373 -1.21221 -0.483747 -0.495917 0.721148 + 0.880026 1.89016 -1.20144 -0.579202 -0.214069 0.786574 + 0.878296 1.90197 -1.20528 -0.783152 0.41717 0.461132 + 0.896376 1.771 -1.26494 -0.873527 -0.112645 0.473562 + 0.910577 1.77123 -1.25016 -0.535568 -0.248242 0.807182 + 0.924168 1.82424 -1.22396 -0.108986 -0.391865 0.913545 + 0.903325 1.86447 -1.20606 -0.132739 -0.436019 0.890094 + 0.89439 1.89091 -1.19529 -0.162816 -0.233976 0.958512 + 0.892676 1.772 -1.28048 -0.997109 0.066978 0.0358879 + 0.88112 1.71182 -1.3056 -0.987083 0.147237 0.0631539 + 0.886475 1.71007 -1.2832 -0.875618 -0.0391503 0.481415 + 0.900676 1.7103 -1.26843 -0.562681 -0.176691 0.807571 + 0.9299 1.77278 -1.24171 -0.142804 -0.28556 0.947661 + 0.895936 1.77431 -1.29849 -0.912612 0.230391 -0.337727 + 0.88438 1.71413 -1.3236 -0.894988 0.328628 -0.301662 + 0.869117 1.64944 -1.35508 -0.960438 0.257667 -0.105674 + 0.875055 1.65277 -1.32577 -0.976358 0.0243469 0.214784 + 0.88041 1.65102 -1.30338 -0.857546 -0.096681 0.505241 + 0.902286 1.82802 -1.2849 -0.63934 0.29314 -0.710854 + 0.904902 1.77684 -1.31216 -0.63683 0.383698 -0.668748 + 0.897349 1.7179 -1.34324 -0.632185 0.451788 -0.629468 + 0.882085 1.65322 -1.37472 -0.699378 0.503023 -0.507778 + 0.898674 1.87111 -1.26329 -0.247416 0.504394 -0.827268 + 0.915835 1.83019 -1.29091 -0.233422 0.47246 -0.84988 + 0.923847 1.78005 -1.32045 -0.22648 0.472037 -0.851991 + 0.916294 1.72112 -1.35154 -0.228769 0.490876 -0.840658 + 0.898097 1.66592 -1.38022 -0.32626 0.507299 -0.797623 + 0.903908 1.89837 -1.24266 0.100322 0.745915 -0.658442 + 0.914757 1.87286 -1.26323 0.126985 0.630355 -0.765851 + 0.937617 1.83285 -1.29074 0.171946 0.568439 -0.804557 + 0.94563 1.78271 -1.32028 0.181882 0.492761 -0.850944 + 0.947541 1.72482 -1.35133 0.216111 0.426551 -0.878265 + 0.899259 1.90748 -1.22901 0.0454413 0.874112 -0.483594 + 0.913094 1.8987 -1.23785 0.449427 0.75285 -0.480867 + 0.928538 1.87366 -1.25585 0.511887 0.675928 -0.530182 + 0.951398 1.83367 -1.28336 0.572537 0.57642 -0.583045 + 0.964985 1.78391 -1.3099 0.639097 0.429007 -0.638363 + 0.899021 1.91234 -1.21824 0.057848 0.985096 -0.161983 + 0.908445 1.90781 -1.22421 0.382049 0.863201 -0.330035 + 0.920418 1.89784 -1.2256 0.698801 0.678636 -0.226122 + 0.935862 1.8728 -1.2436 0.734935 0.627395 -0.257385 + 0.961024 1.83316 -1.2666 0.810346 0.510054 -0.288416 + 0.902818 1.91189 -1.21188 0.156502 0.987667 0.00451603 + 0.912241 1.90737 -1.21786 0.542561 0.827549 -0.14419 + 0.922484 1.89698 -1.21745 0.821951 0.564428 0.0762759 + 0.938796 1.87199 -1.23129 0.856756 0.510932 0.070134 + 0.963958 1.83235 -1.2543 0.919178 0.391394 0.0438425 + 0.889304 1.90999 -1.20868 -0.107866 0.985112 0.133863 + 0.904962 1.91155 -1.20754 0.258502 0.961302 0.0952659 + 0.914307 1.90651 -1.20973 0.672262 0.729944 0.12347 + 0.920371 1.8956 -1.209 0.811236 0.318425 0.490409 + 0.936683 1.87061 -1.22284 0.833461 0.274293 0.479694 + 0.885643 1.90921 -1.20591 -0.431256 0.890088 0.147522 + 0.900206 1.91005 -1.20039 0.13545 0.879705 0.455821 + 0.903867 1.91083 -1.20316 0.236963 0.89282 0.383042 + 0.913211 1.9058 -1.20534 0.67462 0.574165 0.463921 + 0.8871 1.90855 -1.19987 -0.432099 0.735092 0.522427 + 0.894546 1.90894 -1.19668 -0.0791984 0.71599 0.693603 + 0.902379 1.90329 -1.19545 0.28921 0.279154 0.915659 + 0.908039 1.90442 -1.19917 0.53613 0.404511 0.740902 + 0.915198 1.89422 -1.20284 0.647464 0.10605 0.754681 + 0.885044 1.90176 -1.19827 -0.539796 0.162203 0.826021 + 0.89249 1.90214 -1.19508 -0.214567 0.115304 0.969879 + 0.90428 1.89206 -1.19567 0.285952 -0.110533 0.951848 + 0.918214 1.86636 -1.2066 0.333127 -0.221324 0.916538 + 0.929133 1.86853 -1.21377 0.659105 0.0268868 0.75157 + 0.95363 1.82897 -1.23424 0.681336 -0.0257633 0.731517 + 0.96118 1.83107 -1.24331 0.869195 0.177609 0.46147 + 0.939057 1.82614 -1.2245 0.35354 -0.224459 0.90809 + 0.950772 1.77543 -1.24251 0.353381 -0.233111 0.90597 + 0.965345 1.77828 -1.25224 0.682393 -0.133226 0.718742 + 0.976077 1.78081 -1.26509 0.896513 0.00726872 0.442958 + 0.978855 1.78209 -1.27609 0.982352 0.185873 0.0208511 + 0.949324 1.71495 -1.25716 0.292957 -0.170495 0.940802 + 0.970322 1.71906 -1.2711 0.671748 -0.0529879 0.738882 + 0.981054 1.7216 -1.28396 0.885054 0.0616257 0.46139 + 0.928452 1.71229 -1.25636 -0.164525 -0.231082 0.958923 + 0.932203 1.65554 -1.26966 -0.223342 -0.225336 0.948336 + 0.966784 1.65206 -1.26669 0.232722 -0.11764 0.965402 + 0.987782 1.65617 -1.28064 0.55103 0.113918 0.826673 + 0.904427 1.65354 -1.28173 -0.519262 -0.205645 0.829504 + 0.90846 1.6036 -1.29017 -0.405016 0.511616 0.757767 + 0.950853 1.59833 -1.28282 -0.0497196 0.491563 0.869421 + 0.985434 1.59485 -1.27985 0.0444115 0.467994 0.882615 + 0.884443 1.60108 -1.31182 -0.727831 0.557227 0.399701 + 0.870447 1.59662 -1.30624 0.221189 0.971373 -0.0866567 + 0.908318 1.60006 -1.27887 -0.0959085 0.971723 -0.215768 + 0.95071 1.59479 -1.27152 0.165589 0.943181 -0.288081 + 0.867816 1.59058 -1.35233 -0.78464 0.61236 0.0967258 + 0.861878 1.58725 -1.38164 -0.861407 0.481143 0.162726 + 0.853821 1.58612 -1.34676 0.123938 0.937864 -0.324115 + 0.847109 1.57183 -1.41682 -0.55664 0.415593 -0.719329 + 0.82419 1.56177 -1.40977 -0.312548 0.545862 -0.777398 + 0.838959 1.57718 -1.37458 0.0167008 0.918155 -0.395869 + 0.828052 1.63679 -1.30945 0.661584 0.604942 -0.443116 + 0.863122 1.58453 -1.42233 -0.300306 0.376533 -0.876378 + 0.878919 1.56037 -1.42798 0.000490382 0.28073 -0.959786 + 0.797539 1.54957 -1.40402 -0.521969 0.331794 -0.785787 + 0.796629 1.62009 -1.34554 -0.152186 0.621972 -0.768108 + 0.81319 1.62786 -1.33727 0.332519 0.657284 -0.676319 + 0.929344 1.6696 -1.38002 0.104402 0.416431 -0.903153 + 0.945141 1.64544 -1.38566 0.358129 0.318716 -0.87759 + 0.979727 1.6575 -1.35814 0.695454 0.298398 -0.653683 + 0.961283 1.56924 -1.40281 0.387895 0.301147 -0.871119 + 0.966896 1.726 -1.34095 0.635205 0.344313 -0.691349 + 0.993663 1.65649 -1.33417 0.860705 0.275485 -0.428129 + 1.01775 1.58153 -1.33251 0.825631 0.358422 -0.435738 + 0.99587 1.58131 -1.37529 0.704373 0.325369 -0.630867 + 0.980832 1.72499 -1.31697 0.899691 0.251182 -0.35702 + 0.985075 1.72368 -1.29993 0.981643 0.190319 -0.012446 + 1.00529 1.65647 -1.30746 0.933858 0.341612 -0.10588 + 0.974611 1.7834 -1.29314 0.883863 0.323067 -0.338252 + 1.00127 1.65438 -1.2915 0.783175 0.352818 0.512013 + 1.04258 1.58189 -1.28426 0.803695 0.593714 0.0397228 + 1.02939 1.58151 -1.30581 0.807925 0.41078 -0.422513 + 1.07231 1.52317 -1.30657 0.666608 0.636141 -0.388534 + 1.06195 1.51683 -1.33241 0.557698 0.624062 -0.547284 + 1.03261 1.52261 -1.34987 0.649056 0.453575 -0.610734 + 1.02909 1.58369 -1.27341 0.37508 0.682689 0.627097 + 1.03741 1.56026 -1.23476 0.828056 0.359635 0.4301 + 1.0855 1.52355 -1.28503 0.760083 0.648752 -0.0373316 + 0.986353 1.58749 -1.26568 0.255703 0.940471 -0.223896 + 1.03001 1.57633 -1.25923 0.556939 0.822223 0.11734 + 0.972744 1.63665 -1.23472 0.4639 0.61487 -0.637755 + 0.985381 1.63085 -1.22063 0.711481 0.636714 -0.297304 + 0.988965 1.63519 -1.19758 0.87874 0.477179 0.0107998 + 1.0336 1.58068 -1.23618 0.902987 0.425588 0.0590622 + 0.937101 1.64394 -1.24057 0.108348 0.564176 -0.818514 + 0.932562 1.69336 -1.20595 0.125424 0.565252 -0.815328 + 0.95376 1.69237 -1.19926 0.516272 0.534465 -0.669186 + 0.966397 1.68657 -1.18517 0.864679 0.398109 -0.306332 + 0.900294 1.64037 -1.24217 -0.203537 0.578861 -0.789616 + 0.895755 1.68979 -1.20754 -0.262848 0.546604 -0.795069 + 0.903856 1.7466 -1.17053 -0.228396 0.53578 -0.812881 + 0.929618 1.74917 -1.16933 0.134549 0.560237 -0.817332 + 0.950816 1.74817 -1.16265 0.548122 0.518158 -0.656562 + 0.880133 1.59288 -1.26871 -0.440186 0.888957 -0.126459 + 0.87211 1.63319 -1.23201 -0.692026 0.412763 -0.592222 + 0.873755 1.68132 -1.19933 -0.702369 0.431544 -0.566081 + 0.86893 1.59311 -1.27569 0.333308 0.88666 0.320531 + 0.850108 1.57875 -1.2451 0.31737 0.70288 0.636581 + 0.861311 1.57852 -1.23812 -0.724329 0.689417 -0.00716767 + 0.857655 1.61714 -1.21114 -0.908471 0.230149 -0.348871 + 0.8593 1.66527 -1.17846 -0.942939 0.245602 -0.224824 + 0.836896 1.63376 -1.25498 0.887013 0.30805 0.343966 + 0.824419 1.61758 -1.23136 0.7879 0.153334 0.596408 + 0.809434 1.59979 -1.20989 0.468844 0.0923743 0.878437 + 0.835122 1.56096 -1.22364 0.2324 0.689456 0.686033 + 0.849239 1.56173 -1.2133 -0.76983 0.631154 0.0949045 + 0.838414 1.63727 -1.28553 0.829743 0.542126 -0.132761 + 0.820232 1.68161 -1.23398 0.958758 0.0668034 0.276261 + 0.807755 1.66545 -1.21036 0.817494 -0.06223 0.572566 + 0.810805 1.6878 -1.27831 0.723873 0.458609 -0.515447 + 0.821167 1.68827 -1.25439 0.951288 0.273571 -0.142159 + 0.814856 1.73774 -1.2052 0.961599 0.044988 0.270747 + 0.799337 1.68411 -1.29216 0.368262 0.568784 -0.735436 + 0.808645 1.74381 -1.24229 0.747747 0.428131 -0.507521 + 0.815791 1.74438 -1.22561 0.951262 0.268211 -0.152195 + 0.782775 1.67633 -1.30044 -0.167767 0.577624 -0.798877 + 0.785869 1.73448 -1.26199 -0.104131 0.541873 -0.833985 + 0.797176 1.7401 -1.25615 0.399636 0.532444 -0.746187 + 0.787113 1.78893 -1.22313 0.34934 0.613948 -0.707834 + 0.795407 1.79133 -1.21336 0.658041 0.586085 -0.472744 + 0.764655 1.66775 -1.29685 -0.519034 0.478927 -0.707978 + 0.767748 1.72589 -1.25841 -0.506997 0.460352 -0.728718 + 0.762937 1.77707 -1.22652 -0.485036 0.387786 -0.783812 + 0.775806 1.7833 -1.22897 -0.112055 0.538206 -0.835331 + 0.769978 1.60789 -1.33978 -0.530959 0.481728 -0.697151 + 0.73886 1.65542 -1.28029 -0.801528 0.341671 -0.490728 + 0.749705 1.71721 -1.2469 -0.781608 0.341088 -0.522253 + 0.744894 1.76839 -1.21501 -0.779076 0.193733 -0.596245 + 0.744183 1.59556 -1.32321 -0.806924 0.284152 -0.517813 + 0.729767 1.64655 -1.26158 -0.988843 0.121566 -0.0860849 + 0.740612 1.70835 -1.2282 -0.989546 0.115787 -0.085973 + 0.73841 1.76216 -1.20164 -0.979651 -0.0920684 -0.178347 + 0.729409 1.81058 -1.18933 -0.774944 0.121421 -0.620257 + 0.745021 1.53976 -1.35016 -0.857666 0.140928 -0.494518 + 0.731258 1.53341 -1.31358 -0.992166 -0.120595 -0.032611 + 0.73042 1.58921 -1.28664 -0.99532 0.0286265 -0.0922976 + 0.734398 1.63822 -1.23451 -0.93395 -0.0838859 0.347418 + 0.743863 1.70264 -1.20935 -0.93418 -0.0959446 0.343659 + 0.800462 1.47952 -1.42216 -0.654995 0.201962 -0.728143 + 0.747944 1.46971 -1.36831 -0.821622 0.0109213 -0.569928 + 0.731964 1.45244 -1.3328 -0.994701 0.0114356 -0.102175 + 0.737625 1.4509 -1.30698 -0.950366 0.0642186 0.304435 + 0.741959 1.47673 -1.30362 -0.951476 0.0479465 0.303965 + 0.825578 1.46091 -1.45214 -0.554062 0.229852 -0.800114 + 0.776506 1.38133 -1.41549 -0.878261 -0.00475248 -0.478157 + 0.760195 1.37562 -1.3687 -0.886336 -0.153831 -0.436743 + 0.744214 1.35836 -1.33319 -0.927914 -0.30871 -0.208981 + 0.846034 1.46578 -1.46154 -0.251322 0.276228 -0.92765 + 0.838096 1.3547 -1.4638 -0.415187 -0.111923 -0.902825 + 0.801622 1.36272 -1.44547 -0.651956 -0.0785874 -0.754173 + 0.810647 1.30891 -1.43728 -0.651862 -0.39695 -0.646148 + 0.797745 1.30144 -1.40886 -0.78557 -0.469365 -0.403207 + 0.876928 1.5005 -1.44858 0.132816 0.318797 -0.938471 + 0.883447 1.38217 -1.48305 -0.172928 0.145219 -0.97417 + 0.858552 1.35956 -1.47319 -0.415022 -0.074743 -0.906736 + 0.878787 1.29238 -1.45967 -0.187484 -0.482284 -0.855717 + 0.847121 1.30088 -1.4556 -0.344237 -0.382087 -0.857619 + 0.959292 1.50938 -1.42342 0.335554 0.318392 -0.886583 + 0.963096 1.45929 -1.44114 0.316869 0.355454 -0.879344 + 0.91434 1.41689 -1.47011 0.15869 0.319272 -0.934282 + 1.01072 1.52239 -1.39266 0.689735 0.308729 -0.654944 + 1.01453 1.4723 -1.41038 0.461231 0.414974 -0.784259 + 0.98016 1.41624 -1.45338 0.317951 0.362398 -0.876114 + 0.931404 1.37385 -1.48235 0.150924 0.292162 -0.944385 + 1.04978 1.47254 -1.39122 0.453557 0.540576 -0.708564 + 1.05458 1.42328 -1.4134 0.465144 0.328523 -0.822018 + 1.01932 1.42304 -1.43253 0.431923 0.331593 -0.838742 + 0.999749 1.41196 -1.44675 0.422067 0.320541 -0.848005 + 0.964212 1.36744 -1.47782 0.2982 0.188931 -0.935618 + 1.07912 1.46677 -1.37376 0.46458 0.535617 -0.705181 + 1.08654 1.42099 -1.39583 0.507833 0.322928 -0.798638 + 1.04447 1.36845 -1.43462 0.433339 0.224583 -0.8728 + 1.02934 1.36782 -1.44163 0.443659 0.159694 -0.881853 + 1.00976 1.35673 -1.45584 0.530498 0.0172642 -0.84751 + 1.11694 1.47565 -1.34457 0.615662 0.561044 -0.553345 + 1.12435 1.42987 -1.36663 0.633974 0.337756 -0.695699 + 1.07643 1.36615 -1.41705 0.46611 0.247746 -0.849331 + 1.06289 1.32996 -1.4339 0.433489 0.0534647 -0.899572 + 1.04776 1.32933 -1.44091 0.254579 -0.142309 -0.956524 + 1.1273 1.48199 -1.31873 0.730982 0.646021 -0.219823 + 1.14774 1.43202 -1.33843 0.886451 0.265743 -0.378927 + 1.11281 1.36137 -1.40025 0.602261 0.218063 -0.767939 + 1.09927 1.32518 -1.4171 0.557531 -0.140522 -0.818176 + 1.0756 1.31095 -1.42544 0.359296 -0.502092 -0.786645 + 1.13437 1.47422 -1.2827 0.801884 0.580395 0.141858 + 1.15481 1.42424 -1.30241 0.961423 0.240654 -0.133238 + 1.13619 1.36352 -1.37206 0.845504 0.0866211 -0.526896 + 1.124 1.32265 -1.39441 0.752232 -0.259531 -0.605633 + 1.10033 1.30842 -1.40275 0.512621 -0.65194 -0.558743 + 1.07278 1.5156 -1.24957 0.686427 0.548963 0.476925 + 1.12165 1.46626 -1.24724 0.671236 0.507542 0.540226 + 1.15167 1.42218 -1.25256 0.851174 0.254951 0.458806 + 1.1603 1.41239 -1.27724 0.983932 0.155433 0.0878491 + 1.15203 1.37176 -1.33905 0.929861 0.0917609 -0.356285 + 1.03957 1.50887 -1.20666 0.635208 0.390244 0.666498 + 1.09297 1.44319 -1.20978 0.589965 0.380588 0.712105 + 1.12299 1.39912 -1.2151 0.714026 0.198628 0.671352 + 1.14928 1.36379 -1.24717 0.888024 -0.0493068 0.457146 + 1.15791 1.354 -1.27186 0.960906 -0.173744 0.215576 + 1.00421 1.55353 -1.19186 0.737266 0.0997922 0.668191 + 1.01636 1.48583 -1.17629 0.554872 0.331603 0.762992 + 1.06975 1.42015 -1.1794 0.531778 0.347786 0.772177 + 1.08528 1.38534 -1.17552 0.582804 0.25968 0.770004 + 1.11115 1.37852 -1.19769 0.731748 0.138143 0.667429 + 0.990011 1.60374 -1.16747 0.810996 0.0240756 0.584556 + 0.963392 1.60487 -1.13858 0.646056 -0.107365 0.755701 + 0.97759 1.55466 -1.16298 0.733845 0.00551385 0.679294 + 0.988788 1.50586 -1.16464 0.63886 0.238227 0.73151 + 1.01843 1.40529 -1.14496 0.379943 0.231609 0.895545 + 0.986193 1.62416 -1.16889 0.920829 0.262327 0.288544 + 0.967825 1.6684 -1.13811 0.925109 0.026811 0.378754 + 0.955425 1.65951 -1.12022 0.689505 -0.170272 0.703982 + 0.937216 1.59524 -1.12558 0.255904 -0.164941 0.952527 + 0.948263 1.54908 -1.13115 0.376309 -0.0268754 0.926104 + 0.970598 1.67943 -1.1668 0.971454 0.235007 0.0323743 + 0.963711 1.73707 -1.13453 0.979887 0.198885 0.0163293 + 0.961795 1.7294 -1.11447 0.937887 0.0361091 0.345057 + 0.949395 1.72051 -1.09659 0.69234 -0.15825 0.704004 + 0.929249 1.64988 -1.10723 0.246628 -0.276896 0.928711 + 0.95951 1.7442 -1.1529 0.878679 0.362987 -0.310103 + 0.945054 1.79252 -1.1222 0.826759 0.519852 -0.214996 + 0.948172 1.78724 -1.10924 0.920011 0.382565 0.0849929 + 0.946256 1.77957 -1.08917 0.888531 0.203626 0.411155 + 0.93636 1.7965 -1.13195 0.517344 0.627447 -0.581949 + 0.91926 1.83109 -1.09737 0.760489 0.631822 -0.149855 + 0.922378 1.82582 -1.0844 0.852175 0.502442 0.146117 + 0.920922 1.82009 -1.06974 0.830829 0.32796 0.449628 + 0.937389 1.77329 -1.07643 0.674702 -0.0326782 0.737367 + 0.921356 1.79703 -1.13685 0.137795 0.605047 -0.784175 + 0.912562 1.83421 -1.10477 0.476359 0.708658 -0.520467 + 0.902873 1.85371 -1.07998 0.686777 0.723948 -0.0650869 + 0.904925 1.85022 -1.07134 0.76785 0.612483 0.187805 + 0.895594 1.79447 -1.13804 -0.229959 0.511102 -0.828187 + 0.878788 1.83304 -1.11036 -0.244041 0.52293 -0.816693 + 0.897558 1.83475 -1.10967 0.108401 0.647948 -0.753932 + 0.896175 1.85682 -1.08738 0.408285 0.81675 -0.407705 + 0.879943 1.78854 -1.13211 -0.667891 0.295933 -0.682894 + 0.863138 1.82711 -1.10443 -0.686341 0.249155 -0.683271 + 0.867431 1.85564 -1.09128 -0.297956 0.713357 -0.634306 + 0.886201 1.85735 -1.09059 0.0874 0.798347 -0.595821 + 0.890148 1.86201 -1.07722 0.294309 0.949582 -0.10806 + 0.881855 1.73813 -1.16231 -0.695486 0.406079 -0.59279 + 0.869894 1.77725 -1.11761 -0.927555 0.0460724 -0.370837 + 0.855652 1.81903 -1.09362 -0.91446 -0.0115547 -0.404512 + 0.857132 1.85179 -1.0873 -0.700516 0.527592 -0.480545 + 0.871806 1.72683 -1.1478 -0.939929 0.223364 -0.258151 + 0.867292 1.76962 -1.10525 -0.988095 -0.150014 -0.0341174 + 0.85305 1.8114 -1.08127 -0.973045 -0.222022 -0.0623643 + 0.847924 1.83866 -1.06835 -0.985721 0.123547 0.114415 + 0.849646 1.84372 -1.07649 -0.937522 0.293781 -0.186399 + 0.855673 1.6544 -1.1612 -0.987949 0.121134 0.0963535 + 0.868179 1.71596 -1.13054 -0.994725 0.054719 0.0867662 + 0.871456 1.76321 -1.09177 -0.847421 -0.340439 0.407405 + 0.856177 1.80659 -1.07119 -0.842373 -0.399871 0.361263 + 0.851051 1.83385 -1.05827 -0.861721 -0.0505548 0.504858 + 0.845582 1.60035 -1.18631 -0.998571 0.0519338 -0.0125878 + 0.861678 1.64516 -1.14179 -0.862892 -0.0525943 0.502644 + 0.872343 1.70956 -1.11707 -0.867016 -0.132437 0.480358 + 0.851587 1.59112 -1.1669 -0.910225 0.0169641 0.413766 + 0.871136 1.58554 -1.14314 -0.632264 -0.102075 0.767999 + 0.876677 1.64231 -1.1261 -0.616535 -0.179227 0.766657 + 0.887343 1.7067 -1.10138 -0.596558 -0.266608 0.756993 + 0.831316 1.54152 -1.18504 -0.668939 0.574605 0.47154 + 0.850865 1.53594 -1.16128 -0.598038 -0.059599 0.799249 + 0.900081 1.58792 -1.12604 -0.25884 -0.202557 0.944443 + 0.905622 1.64469 -1.10901 -0.247844 -0.268388 0.930882 + 0.90756 1.70853 -1.08935 -0.232993 -0.324206 0.916845 + 0.8172 1.54075 -1.19538 -0.222111 0.448176 0.865913 + 0.796371 1.52699 -1.20372 -0.6791 -0.17792 0.712157 + 0.865981 1.48471 -1.16314 -0.429084 -0.0594261 0.901308 + 0.911128 1.54176 -1.13161 -0.218763 -0.134349 0.966485 + 0.794672 1.59027 -1.20888 0.0241634 0.111627 0.993456 + 0.796723 1.54369 -1.19477 -0.298448 -0.136837 0.944566 + 0.781369 1.64472 -1.19888 -0.0332926 -0.246044 0.968687 + 0.766167 1.63927 -1.20409 -0.3666 -0.229803 0.901552 + 0.774195 1.59321 -1.20828 -0.284964 -0.0249724 0.958213 + 0.753347 1.59002 -1.22145 -0.748606 -0.191462 0.634768 + 0.752994 1.57331 -1.2304 -0.799915 -0.341954 0.493158 + 0.796131 1.65424 -1.19988 0.475111 -0.168223 0.863696 + 0.78446 1.70838 -1.1777 0.0523447 -0.337577 0.939841 + 0.769258 1.70293 -1.18292 -0.332044 -0.329531 0.88383 + 0.745318 1.63607 -1.21726 -0.718234 -0.176283 0.6731 + 0.794522 1.71516 -1.17827 0.534357 -0.246125 0.808632 + 0.774765 1.76119 -1.15758 0.0640766 -0.360595 0.930519 + 0.763914 1.75726 -1.16133 -0.282903 -0.432999 0.855849 + 0.74944 1.75483 -1.17051 -0.626443 -0.429482 0.650473 + 0.754784 1.7005 -1.1921 -0.668803 -0.257403 0.697457 + 0.806145 1.72636 -1.18875 0.8327 -0.106115 0.543462 + 0.784826 1.76798 -1.15815 0.511949 -0.171132 0.841797 + 0.754731 1.8035 -1.13919 0.0353615 -0.330528 0.943134 + 0.74388 1.79956 -1.14295 -0.298056 -0.446937 0.843451 + 0.801975 1.78702 -1.18221 0.912047 0.23468 0.336295 + 0.793264 1.77565 -1.16576 0.782726 0.0284399 0.621717 + 0.771158 1.81581 -1.14754 0.72509 0.144497 0.673324 + 0.76272 1.80815 -1.13993 0.445967 -0.0988095 0.889579 + 0.741401 1.82964 -1.13126 -0.10746 -0.0404948 0.993384 + 0.802553 1.79192 -1.19667 0.882359 0.461122 -0.0938562 + 0.778137 1.82888 -1.1742 0.800014 0.597594 -0.0534719 + 0.777559 1.82398 -1.15972 0.844614 0.357656 0.398383 + 0.761438 1.84749 -1.14925 0.684258 0.573743 0.450123 + 0.755037 1.83934 -1.13707 0.550136 0.371064 0.748106 + 0.772673 1.82908 -1.18649 0.579913 0.69253 -0.429073 + 0.756334 1.85098 -1.17113 0.449574 0.819048 -0.356432 + 0.761798 1.85078 -1.15885 0.657893 0.752374 0.0333235 + 0.751545 1.85605 -1.1564 0.318978 0.941965 0.104663 + 0.751185 1.85277 -1.14682 0.333104 0.803652 0.493138 + 0.764379 1.82667 -1.19626 0.277715 0.681506 -0.677069 + 0.750673 1.84965 -1.17755 0.187976 0.794057 -0.578047 + 0.743052 1.85483 -1.16918 -0.00451143 0.913251 -0.407371 + 0.748713 1.85615 -1.16277 0.217819 0.957252 -0.190325 + 0.741575 1.85703 -1.15459 -0.0977939 0.980734 0.169109 + 0.755451 1.82303 -1.20038 -0.1374 0.551877 -0.822528 + 0.741745 1.84601 -1.18167 -0.204156 0.659915 -0.723072 + 0.738424 1.85294 -1.17131 -0.272659 0.812695 -0.51496 + 0.734115 1.85525 -1.16309 -0.401512 0.893973 -0.199001 + 0.738743 1.85714 -1.16096 -0.208965 0.976508 -0.0525801 + 0.742583 1.81679 -1.19792 -0.497364 0.34637 -0.795397 + 0.733057 1.84215 -1.17988 -0.514376 0.496156 -0.699462 + 0.729735 1.84908 -1.16954 -0.540659 0.683093 -0.49099 + 0.727286 1.85203 -1.15864 -0.57471 0.818156 -0.0181353 + 0.719883 1.83594 -1.17128 -0.812385 0.297167 -0.501719 + 0.722907 1.84586 -1.16508 -0.73852 0.592507 -0.321752 + 0.718702 1.84165 -1.15626 -0.907116 0.417053 0.056634 + 0.72402 1.8482 -1.15171 -0.667438 0.706083 0.236586 + 0.727866 1.85081 -1.15354 -0.412949 0.86115 0.296467 + 0.722925 1.80436 -1.17595 -0.960445 -0.19422 -0.199558 + 0.715678 1.83173 -1.16247 -0.992218 0.0606729 -0.108729 + 0.719918 1.83933 -1.14902 -0.884731 0.276412 0.375296 + 0.72527 1.79989 -1.16198 -0.882196 -0.401556 0.245931 + 0.718023 1.82726 -1.14849 -0.928105 -0.120268 0.352358 + 0.725078 1.83808 -1.14091 -0.670801 0.225145 0.706637 + 0.725235 1.84589 -1.14446 -0.608543 0.606769 0.511378 + 0.741661 1.75646 -1.18278 -0.901015 -0.323545 0.288946 + 0.733049 1.79826 -1.14971 -0.616365 -0.47901 0.625015 + 0.723183 1.82601 -1.14039 -0.699206 -0.169596 0.694513 + 0.735051 1.58088 -1.25955 -0.916573 -0.241584 0.318641 + 0.754843 1.53399 -1.27322 -0.837855 -0.282676 0.467004 + 0.772786 1.52642 -1.24407 -0.842439 -0.254015 0.475156 + 0.765543 1.47731 -1.26327 -0.862801 0.0320055 0.504529 + 0.781268 1.4777 -1.23637 -0.863051 0.0330505 0.504035 + 0.804852 1.47827 -1.19603 -0.765667 0.0301711 0.64253 + 0.823026 1.46197 -1.17892 -0.485722 0.0725922 0.871094 + 0.771192 1.37805 -1.22652 -0.864946 0.0852553 0.494571 + 0.786916 1.37844 -1.19961 -0.763687 0.0299913 0.64489 + 0.80509 1.36213 -1.18251 -0.602154 -0.177118 0.778486 + 0.853963 1.41249 -1.16796 -0.298656 -0.0246048 0.954044 + 0.896919 1.43523 -1.15219 -0.342073 -0.0846641 0.935852 + 0.766858 1.35223 -1.22987 -0.884744 -0.0354246 0.464729 + 0.780603 1.31049 -1.21006 -0.777689 -0.318832 0.541799 + 0.818454 1.29184 -1.18857 -0.485622 -0.407024 0.77363 + 0.830741 1.31746 -1.17781 -0.362327 -0.138754 0.921665 + 0.748204 1.37398 -1.2767 -0.955035 -0.0941958 0.281133 + 0.761949 1.33225 -1.25689 -0.928583 -0.335763 0.158102 + 0.792617 1.28394 -1.22778 -0.682674 -0.668313 0.295491 + 0.830468 1.26529 -1.20629 -0.392183 -0.886371 0.246048 + 0.742543 1.37551 -1.30253 -0.972277 -0.195585 0.128157 + 0.767829 1.31962 -1.27193 -0.881021 -0.471925 0.0329901 + 0.798497 1.27132 -1.24282 -0.614543 -0.717929 0.326979 + 0.841411 1.2691 -1.23049 0.0483444 -0.99745 0.0524926 + 0.769769 1.30105 -1.3271 -0.84912 -0.528196 0.00219716 + 0.768097 1.31819 -1.29644 -0.877566 -0.470584 0.0918125 + 0.804118 1.26001 -1.27021 -0.609436 -0.788784 0.0800402 + 0.824941 1.26014 -1.23715 -0.140329 -0.717787 0.681974 + 0.781434 1.29574 -1.36206 -0.828096 -0.492192 -0.268334 + 0.821516 1.24417 -1.32307 -0.513552 -0.855765 0.0626942 + 0.804387 1.25859 -1.2947 -0.655639 -0.754998 -0.0107978 + 0.851488 1.24768 -1.28461 0.0906039 -0.930692 0.354406 + 0.830563 1.24882 -1.26453 -0.0780739 -0.985026 0.153713 + 0.848779 1.23816 -1.39094 -0.425209 -0.860416 -0.280859 + 0.833181 1.23887 -1.35803 -0.482021 -0.867208 -0.12492 + 0.884292 1.22887 -1.33956 0.185294 -0.962391 0.198668 + 0.868618 1.23326 -1.31297 0.106269 -0.931696 0.347347 + 0.86168 1.24562 -1.41937 -0.373122 -0.754965 -0.539267 + 0.919071 1.22812 -1.39687 0.211984 -0.976651 -0.0348715 + 0.89989 1.22817 -1.37247 0.165118 -0.979979 0.111251 + 0.893346 1.23712 -1.42343 -0.150887 -0.857482 -0.491892 + 0.956661 1.2448 -1.41453 0.428213 -0.870625 -0.242168 + 0.984739 1.26295 -1.38875 0.484595 -0.863757 0.138175 + 0.964953 1.26802 -1.36961 0.371698 -0.807456 0.4581 + 0.945771 1.26806 -1.34521 0.484522 -0.788113 0.379627 + 0.930936 1.2538 -1.44108 0.0917345 -0.701302 -0.706937 + 0.953963 1.27147 -1.45152 0.265328 -0.542998 -0.796714 + 0.969935 1.26377 -1.436 0.54423 -0.636801 -0.546166 + 0.911098 1.29504 -1.46185 -0.027406 -0.472332 -0.880994 + 0.934125 1.31272 -1.47229 0.0393782 -0.431434 -0.901285 + 0.959516 1.32626 -1.47543 0.333047 -0.34087 -0.87914 + 0.975488 1.31856 -1.45992 0.641872 -0.290741 -0.709556 + 0.998013 1.28192 -1.41023 0.705395 -0.566574 -0.425925 + 0.873494 1.32504 -1.47781 -0.515247 -0.358328 -0.778538 + 0.905805 1.32772 -1.47999 -0.00710404 -0.419085 -0.907919 + 0.92504 1.33313 -1.48176 0.0503172 -0.374276 -0.925951 + 0.898388 1.34766 -1.48767 -0.142098 -0.143099 -0.979454 + 0.917624 1.35307 -1.48944 0.0449983 -0.0314999 -0.99849 + 0.950432 1.34667 -1.48492 0.288354 -0.105204 -0.951727 + 0.983801 1.36316 -1.47119 0.427236 0.0722023 -0.901253 + 0.997242 1.33079 -1.45792 0.338374 -0.520203 -0.78415 + 0.986845 1.32558 -1.45128 0.402605 -0.714741 -0.571887 + 1.00937 1.28894 -1.4016 0.472226 -0.650258 -0.595119 + 1.0232 1.32438 -1.44257 0.404531 -0.0596138 -0.91258 + 1.05104 1.306 -1.4271 0.0790811 -0.738515 -0.669584 + 1.02576 1.29708 -1.4081 0.0205149 -0.849385 -0.527375 + 1.01536 1.29187 -1.40145 0.20208 -0.76181 -0.615475 + 1.01945 1.27762 -1.38393 0.346569 -0.921783 -0.173801 + 1.07767 1.29616 -1.40574 0.25697 -0.864048 -0.432882 + 1.05239 1.28725 -1.38674 0.144398 -0.938631 -0.313242 + 1.02544 1.28055 -1.3838 0.290863 -0.850832 -0.437588 + 1.10613 1.29619 -1.37587 0.386258 -0.84887 -0.360866 + 1.0541 1.28699 -1.38359 0.204119 -0.941706 -0.267443 + 1.02715 1.28029 -1.38065 0.147197 -0.986975 -0.0649175 + 1.01639 1.28195 -1.37049 0.0297525 -0.977967 0.206628 + 1.00868 1.27929 -1.37378 0.220717 -0.885921 0.407955 + 1.12878 1.30845 -1.37287 0.717244 -0.572547 -0.397179 + 1.10453 1.28748 -1.35446 0.319302 -0.807367 -0.496191 + 1.0525 1.27827 -1.36219 0.10893 -0.99363 -0.0288568 + 1.03138 1.2821 -1.34221 -0.175038 -0.98392 -0.0355458 + 0.995269 1.28579 -1.35051 -0.0469675 -0.966821 0.2511 + 1.13984 1.33089 -1.36139 0.917546 -0.153986 -0.366603 + 1.1389 1.30092 -1.33857 0.809431 -0.473841 -0.346838 + 1.1003 1.25744 -1.32985 0.136053 -0.906038 -0.40073 + 1.14995 1.32335 -1.3271 0.95016 -0.256995 -0.176491 + 1.15034 1.31745 -1.28508 0.970828 -0.237921 0.0297829 + 1.13466 1.27087 -1.31396 0.726152 -0.622382 -0.292138 + 1.09158 1.25722 -1.30268 -0.128954 -0.987603 0.0895049 + 1.15752 1.35991 -1.31387 0.988885 -0.0691208 -0.131642 + 1.14609 1.30588 -1.26206 0.942912 -0.258518 0.209964 + 1.13041 1.25932 -1.29094 0.521823 -0.852761 0.0223515 + 0.734015 1.8273 -1.13362 -0.38767 -0.136647 0.911613 + 0.730692 1.83876 -1.1374 -0.461778 0.259218 0.848273 + 0.73085 1.84656 -1.14096 -0.42357 0.611243 0.668559 + 0.738078 1.84109 -1.13504 -0.251027 0.36332 0.897209 + 0.734991 1.84898 -1.14134 -0.27851 0.735778 0.617303 + 0.742219 1.8435 -1.13543 0.000378643 0.525177 0.850993 + 0.747867 1.84854 -1.14049 0.230892 0.671632 0.703988 + 0.738837 1.85158 -1.14317 -0.160839 0.793045 0.587547 + 0.749389 1.83431 -1.13199 0.282749 0.17442 0.943202 + 0.742155 1.85581 -1.14948 -0.0534366 0.930321 0.362833 + 1.08949 1.27036 -1.26294 -0.156516 -0.960898 0.228423 + 1.01727 1.29321 -1.28847 -0.336425 -0.923691 0.18334 + 1.02267 1.2819 -1.31504 -0.329628 -0.937452 0.11193 + 0.982052 1.29366 -1.32695 -0.134854 -0.947086 0.291276 + 1.12832 1.27245 -1.2512 0.488962 -0.768771 0.412198 + 1.12251 1.28682 -1.22596 0.646731 -0.599199 0.47191 + 1.10087 1.27697 -1.21521 0.338222 -0.85436 0.394557 + 1.08077 1.27493 -1.23607 -0.133126 -0.988798 0.0675028 + 1.14028 1.32026 -1.23683 0.914638 -0.114474 0.387727 + 1.10719 1.31682 -1.19002 0.682683 -0.280201 0.674857 + 1.08555 1.30697 -1.17926 0.426656 -0.506852 0.749043 + 1.05374 1.28086 -1.19382 0.0737402 -0.896939 0.435963 + 1.03364 1.27882 -1.21467 -0.0694869 -0.996927 -0.0361688 + 1.13744 1.34319 -1.22976 0.852005 -0.0366785 0.522247 + 1.10434 1.33974 -1.18294 0.720211 -0.0105243 0.693675 + 1.07848 1.34656 -1.16078 0.52262 -0.0298057 0.852044 + 1.05663 1.3173 -1.15837 0.359655 -0.420748 0.832838 + 1.02483 1.29119 -1.17293 0.375889 -0.877397 0.298131 + 1.03396 1.37048 -1.14108 0.326725 0.0856427 0.941231 + 1.01212 1.34121 -1.13867 0.1634 -0.155607 0.974211 + 0.997406 1.27631 -1.15377 0.25638 -0.731277 0.632063 + 0.97261 1.26164 -1.18472 0.163784 -0.986261 0.0215399 + 1.00003 1.27652 -1.20389 0.204927 -0.964084 -0.168955 + 0.957644 1.41559 -1.13398 -0.129767 -0.0796128 0.988343 + 0.976872 1.35841 -1.13414 -0.0756399 -0.0869513 0.993337 + 0.962162 1.29351 -1.14923 -0.140313 -0.292265 0.945988 + 0.925629 1.28328 -1.16015 -0.131081 -0.334809 0.933124 + 0.990861 1.42533 -1.13332 0.295741 -0.0188302 0.955082 + 0.926244 1.49054 -1.13347 -0.217439 -0.081181 0.972692 + 0.916147 1.37805 -1.15235 -0.293647 -0.10503 0.950127 + 0.879614 1.36781 -1.16327 -0.248977 -0.0661522 0.966247 + 0.959461 1.50028 -1.13282 0.359934 0.0942121 0.928209 + 0.931187 1.71372 -1.08756 0.279745 -0.290635 0.915027 + 0.902365 1.76281 -1.06867 -0.194326 -0.405531 0.893186 + 0.882147 1.76099 -1.0807 -0.567749 -0.422487 0.706517 + 0.919181 1.76651 -1.0674 0.272466 -0.264192 0.925184 + 0.898515 1.80898 -1.05025 0.247126 -0.216284 0.944537 + 0.881699 1.8053 -1.05151 -0.224009 -0.41161 0.883401 + 0.866868 1.80436 -1.06011 -0.560519 -0.461661 0.687523 + 0.912055 1.81381 -1.057 0.626707 0.0496546 0.777671 + 0.897618 1.84035 -1.04833 0.547167 0.254229 0.797481 + 0.884078 1.83552 -1.04158 0.147373 0.0439851 0.988102 + 0.872943 1.83326 -1.04231 -0.280863 -0.0786144 0.956523 + 0.858111 1.83233 -1.05092 -0.628119 -0.114445 0.769655 + 0.903469 1.84451 -1.05668 0.736949 0.455244 0.499659 + 0.894917 1.85396 -1.05715 0.514668 0.712968 0.476228 + 0.889066 1.8498 -1.0488 0.354849 0.543194 0.760936 + 0.882047 1.8473 -1.0453 0.0798997 0.439588 0.894639 + 0.870912 1.84504 -1.04603 -0.346091 0.388921 0.853792 + 0.895672 1.85692 -1.06475 0.520328 0.803319 0.289719 + 0.884859 1.8593 -1.06086 0.0866897 0.92823 0.361766 + 0.884105 1.85633 -1.05326 0.102357 0.844771 0.525247 + 0.877086 1.85383 -1.04977 -0.163248 0.759263 0.629976 + 0.89362 1.8604 -1.07339 0.46141 0.879977 0.112877 + 0.882319 1.86238 -1.06833 0.0863302 0.933093 0.349118 + 0.8803 1.85971 -1.0642 -0.183544 0.880091 0.437895 + 0.869399 1.85334 -1.05423 -0.332736 0.773294 0.539725 + 0.863225 1.84456 -1.05049 -0.539929 0.391074 0.745344 + 0.878847 1.864 -1.07216 0.0074882 0.990518 0.13718 + 0.869117 1.86311 -1.07252 -0.28309 0.948041 0.145182 + 0.865237 1.85893 -1.06692 -0.372999 0.852487 0.366248 + 0.863219 1.85625 -1.06279 -0.427837 0.802477 0.415915 + 0.86484 1.85376 -1.05757 -0.395155 0.744711 0.537827 + 0.880174 1.86256 -1.08044 0.0210911 0.947838 -0.318054 + 0.870445 1.86166 -1.0808 -0.230059 0.9156 -0.329773 + 0.860146 1.85782 -1.07682 -0.607892 0.7886 -0.092616 + 0.856266 1.85362 -1.07121 -0.738656 0.664643 0.112411 + 0.854544 1.84856 -1.06307 -0.763381 0.544531 0.347471 + 0.856165 1.84608 -1.05784 -0.69307 0.445276 0.566906 + 0.913342 1.25765 -1.1709 -0.108216 -0.744451 0.658849 + 0.935689 1.254 -1.17927 0.187011 -0.952847 0.238977 + 0.944768 1.28487 -1.2275 0.0501451 -0.883317 -0.466086 + 0.973217 1.29523 -1.24871 -0.00638026 -0.920206 -0.391384 + 0.852815 1.26164 -1.21466 -0.0344646 -0.967893 -0.248989 + 0.907848 1.27721 -1.22204 0.132768 -0.844577 -0.518712 + 0.896444 1.28468 -1.23787 0.189388 -0.919245 -0.345138 + 0.928007 1.29472 -1.25153 0.146829 -0.945375 -0.291044 + 0.890082 1.28386 -1.24262 0.315179 -0.944327 0.0943839 + 0.921645 1.2939 -1.25628 0.355093 -0.932088 0.0715549 + 0.951437 1.30384 -1.27738 0.392175 -0.908203 0.14617 + 0.956456 1.30509 -1.27275 0.153834 -0.959353 -0.236595 + 1.00682 1.29754 -1.2595 -0.128268 -0.940916 -0.313409 + 0.873612 1.2749 -1.24928 0.34608 -0.860455 0.37396 + 0.894538 1.27375 -1.26936 0.418576 -0.850683 0.318014 + 0.92433 1.28369 -1.29046 0.46639 -0.806028 0.364415 + 0.940004 1.27931 -1.31705 0.476945 -0.780841 0.403498 + 0.969913 1.30349 -1.30289 0.272122 -0.87837 0.392958 + 0.967692 1.30929 -1.28807 0.302757 -0.923166 0.236858 + 0.972711 1.31055 -1.28343 0.0634832 -0.975958 -0.208507 + 0.975681 1.29224 -1.33105 0.232301 -0.89181 0.388214 + 0.976651 1.30498 -1.30037 -0.163974 -0.931391 0.324997 + 0.97443 1.31079 -1.28553 -0.158101 -0.98158 0.107263 + 1.00854 1.29778 -1.2616 -0.260384 -0.959425 -0.108187 + 0.988898 1.28436 -1.35462 0.162558 -0.90241 0.399038 + 0.662234 2.30119 -1.93689 -0.700089 0.712293 -0.0501403 + 0.671906 2.30149 -1.91584 -0.479282 0.787934 0.386586 + 0.691178 2.31766 -1.92781 -0.413431 0.84002 0.351343 + 0.647785 2.28544 -1.92234 -0.783983 0.614324 0.0893147 + 0.668617 2.29306 -1.90509 -0.481967 0.723909 0.493623 + 0.703591 2.30482 -1.89977 -0.188053 0.735071 0.651388 + 0.681506 2.31737 -1.94886 -0.622821 0.77692 -0.0921334 + 0.686797 2.31231 -1.96761 -0.63471 0.57292 -0.518561 + 0.656699 2.28706 -1.94892 -0.783715 0.435917 -0.442455 + 0.64225 2.2713 -1.93437 -0.917245 0.287327 -0.27587 + 0.644497 2.27701 -1.91159 -0.813221 0.500292 0.297287 + 0.701295 2.32979 -1.95471 -0.407999 0.909046 -0.0846932 + 0.706586 2.32474 -1.97346 -0.349319 0.770202 -0.533635 + 0.707219 2.26081 -2.02254 -0.612769 0.434793 -0.659901 + 0.67712 2.23555 -2.00384 -0.75054 0.302052 -0.587754 + 0.655268 2.21173 -1.98184 -0.897819 0.111924 -0.425904 + 0.702805 2.32088 -1.92498 -0.270463 0.870784 0.410591 + 0.712922 2.33301 -1.95189 -0.152197 0.988241 0.0147135 + 0.724745 2.32977 -1.96905 0.0727982 0.913513 -0.400243 + 0.755307 2.28464 -2.02698 0.157231 0.801729 -0.576636 + 0.737148 2.2796 -2.03139 -0.292383 0.657319 -0.694581 + 0.70993 2.31707 -1.91436 -0.201646 0.844682 0.495834 + 0.732056 2.32883 -1.93265 0.165328 0.941452 0.293827 + 0.724931 2.33264 -1.94327 0.0686308 0.982874 0.171022 + 0.736754 2.3294 -1.96044 0.394043 0.900366 -0.184581 + 0.710472 2.31279 -1.90741 -0.164522 0.784902 0.597379 + 0.737508 2.31936 -1.91445 0.294043 0.749937 0.592564 + 0.736966 2.32364 -1.92139 0.244051 0.874902 0.418313 + 0.752792 2.31826 -1.93259 0.680277 0.703568 0.205465 + 0.747882 2.32345 -1.94384 0.580389 0.814059 0.0213778 + 0.726568 2.30354 -1.89746 0.241862 0.496269 0.833798 + 0.733448 2.31151 -1.9051 0.284337 0.59437 0.752248 + 0.749578 2.30373 -1.9124 0.689121 0.259375 0.676637 + 0.753638 2.31157 -1.92174 0.735604 0.484882 0.47305 + 0.709599 2.28836 -1.88548 0.183861 0.433306 0.882293 + 0.721864 2.27609 -1.88848 0.530826 0.00852059 0.847438 + 0.738832 2.29127 -1.90046 0.603796 0.0915974 0.791859 + 0.775984 2.23927 -1.94341 0.714757 -0.0973038 0.692571 + 0.78673 2.25172 -1.95535 0.811373 0.0620712 0.581223 + 0.683977 2.28909 -1.88871 -0.261317 0.69527 0.669562 + 0.689985 2.27263 -1.87442 0.111999 0.404332 0.907729 + 0.691231 2.25153 -1.8712 0.399406 -0.0528014 0.915252 + 0.719688 2.19174 -1.90802 0.53058 -0.273297 0.802368 + 0.75032 2.21631 -1.92529 0.63366 -0.191532 0.749527 + 0.677903 2.28876 -1.89228 -0.417846 0.701722 0.577054 + 0.673534 2.26235 -1.86962 -0.222932 0.348037 0.910589 + 0.67478 2.24124 -1.86641 -0.0906435 -0.201483 0.975289 + 0.694806 2.17619 -1.90076 0.0208483 -0.4975 0.867213 + 0.762482 2.08295 -1.97761 0.537573 -0.292529 0.790849 + 0.648337 2.26887 -1.89649 -0.7402 0.401833 0.539106 + 0.657623 2.26457 -1.88368 -0.659817 0.377533 0.6497 + 0.66746 2.26203 -1.87319 -0.563192 0.358048 0.744725 + 0.665293 2.24074 -1.87198 -0.61694 -0.22991 0.75268 + 0.637114 2.25814 -1.91758 -0.996338 0.0638111 0.056914 + 0.640954 2.24999 -1.90248 -0.914357 -0.116577 0.387766 + 0.655456 2.24329 -1.88247 -0.779515 -0.194685 0.59536 + 0.685319 2.17569 -1.90633 -0.545464 -0.553322 0.629527 + 0.650131 2.19857 -1.96504 -0.980034 -0.161747 -0.115636 + 0.65594 2.18625 -1.94222 -0.879701 -0.405931 0.247681 + 0.670442 2.17954 -1.9222 -0.731532 -0.506676 0.456224 + 0.723551 2.06666 -1.9786 -0.546446 -0.554346 0.627772 + 0.737599 2.0674 -1.97035 0.0459017 -0.505137 0.861818 + 0.688997 2.11225 -2.0718 -0.894282 0.123659 -0.430078 + 0.681391 2.09276 -2.04693 -0.981672 -0.15543 -0.110278 + 0.687199 2.08044 -2.0241 -0.88522 -0.395371 0.245087 + 0.708674 2.0705 -1.99447 -0.730846 -0.50479 0.459403 + 0.751927 1.96167 -2.03831 -0.570912 -0.469382 0.673602 + 0.710849 2.13608 -2.09381 -0.750137 0.29866 -0.589997 + 0.708769 2.01287 -2.1491 -0.899456 0.175576 -0.400191 + 0.701163 1.99338 -2.12423 -0.995136 -0.0689562 -0.070356 + 0.708922 1.97778 -2.09036 -0.903962 -0.306828 0.29784 + 0.730396 1.96785 -2.06072 -0.757159 -0.414667 0.504739 + 0.75542 2.17348 -2.12149 -0.603776 0.431726 -0.670125 + 0.78673 2.07714 -2.21228 -0.596372 0.440829 -0.670828 + 0.742159 2.03974 -2.18461 -0.741328 0.338106 -0.579756 + 0.718511 1.91654 -2.22502 -0.891145 0.244126 -0.382443 + 0.785349 2.19226 -2.13034 -0.281568 0.635452 -0.718972 + 0.831632 2.09707 -2.22876 -0.251725 0.627628 -0.736694 + 0.820298 1.97496 -2.31063 -0.571162 0.460803 -0.679289 + 0.751901 1.94341 -2.26053 -0.726163 0.374811 -0.576371 + 0.812239 2.19972 -2.1238 0.188133 0.768188 -0.611958 + 0.858522 2.10453 -2.22223 0.211752 0.733062 -0.64636 + 0.904952 1.99817 -2.32179 0.262376 0.678786 -0.685864 + 0.8652 1.99489 -2.32711 -0.219965 0.608386 -0.76255 + 0.830036 1.89047 -2.37428 -0.546517 0.425606 -0.721234 + 0.773471 2.28407 -2.01394 0.529883 0.778731 -0.33586 + 0.830403 2.19916 -2.11077 0.558014 0.738237 -0.378981 + 0.885057 2.10202 -2.20443 0.597761 0.687941 -0.411606 + 0.931487 1.99567 -2.304 0.613714 0.639803 -0.46261 + 0.930646 1.90147 -2.39814 0.226818 0.609783 -0.75942 + 0.784599 2.27812 -1.99735 0.723945 0.679322 -0.120109 + 0.846882 2.19034 -2.0862 0.758185 0.633255 -0.15538 + 0.901535 2.09321 -2.17986 0.786074 0.585602 -0.197883 + 0.954505 1.98373 -2.26926 0.809839 0.540711 -0.227581 + 0.792025 2.27028 -1.98033 0.831936 0.548373 0.0846659 + 0.854308 2.1825 -2.06918 0.861191 0.505947 0.0486537 + 0.911928 2.08291 -2.15493 0.887771 0.460059 0.0144161 + 0.964897 1.97343 -2.24433 0.902781 0.429595 -0.0208545 + 0.99123 1.89345 -2.33937 0.815671 0.516376 -0.260839 + 0.79287 2.26359 -1.96948 0.877851 0.312938 0.362557 + 0.855559 2.1726 -2.05312 0.901852 0.271475 0.336101 + 0.91318 2.07301 -2.13887 0.92096 0.240574 0.306524 + 0.965719 1.96289 -2.21997 0.93116 0.223686 0.287935 + 0.849419 2.16073 -2.03899 0.829023 0.0346302 0.558142 + 0.903487 2.05914 -2.11689 0.839363 0.0165293 0.543321 + 0.956027 1.94903 -2.19799 0.844699 0.0120483 0.535106 + 1.0056 1.87237 -2.28108 0.934882 0.198655 0.294163 + 1.00478 1.88291 -2.30544 0.913272 0.405469 -0.0391094 + 0.833506 2.14229 -2.0213 0.725894 -0.122797 0.676757 + 0.887574 2.04071 -2.0992 0.730839 -0.12894 0.67026 + 0.931095 1.93246 -2.16816 0.731589 -0.1219 0.670759 + 0.965064 1.835 -2.2212 0.736589 -0.0954219 0.669576 + 0.989996 1.85156 -2.25103 0.82632 -0.00260556 0.563195 + 0.807843 2.11933 -2.00318 0.64524 -0.210103 0.734521 + 0.848662 2.01527 -2.06917 0.6443 -0.211368 0.734984 + 0.892183 1.90702 -2.13813 0.643306 -0.187598 0.74227 + 0.911749 1.82007 -2.17394 0.650473 -0.131969 0.747977 + 0.978848 1.7391 -2.24915 0.708725 -0.114661 0.696105 + 0.803301 1.97889 -2.0436 0.538112 -0.279418 0.795212 + 0.822741 1.87667 -2.09111 0.525186 -0.248529 0.813888 + 0.842307 1.78971 -2.12691 0.526758 -0.0699772 0.84713 + 0.843826 1.74823 -2.12572 0.53618 -0.104514 0.837609 + 0.925533 1.72417 -2.20189 0.663526 -0.150284 0.732904 + 0.765975 1.96241 -2.03005 0.0228253 -0.454682 0.890361 + 0.785415 1.86019 -2.07757 0.0106474 -0.372981 0.927778 + 0.793324 1.79183 -2.10113 0.0268625 -0.142978 0.989361 + 0.764965 1.86176 -2.08775 -0.591649 -0.372034 0.715221 + 0.772874 1.7934 -2.11132 -0.599304 -0.107782 0.793232 + 0.770512 1.76357 -2.10983 -0.574246 -0.0769935 0.815054 + 0.794844 1.75036 -2.09994 0.00249596 -0.151938 0.988387 + 0.743434 1.86794 -2.11017 -0.773143 -0.32292 0.545868 + 0.745097 1.80715 -2.13932 -0.7821 -0.101872 0.614769 + 0.742735 1.77732 -2.13783 -0.768007 -0.0310783 0.639687 + 0.757929 1.69175 -2.14181 -0.646067 -0.254363 0.719651 + 0.713282 1.88189 -2.15177 -0.919171 -0.21556 0.329633 + 0.714945 1.8211 -2.18093 -0.908906 0.0141856 0.41676 + 0.706562 1.80358 -2.18817 -0.905076 0.0886619 0.415905 + 0.696911 1.73294 -2.22085 -0.941771 -0.0615691 0.33057 + 0.733084 1.70668 -2.17051 -0.811331 -0.152904 0.564236 + 0.705524 1.89749 -2.18565 -0.999159 0.00731655 -0.0403444 + 0.705046 1.83516 -2.22793 -0.973747 0.227527 -0.0069306 + 0.696663 1.81764 -2.23517 -0.962601 0.27088 0.00478115 + 0.690782 1.74648 -2.26215 -0.99685 0.0690316 -0.0390361 + 0.718033 1.85421 -2.2673 -0.868714 0.318007 -0.379747 + 0.710402 1.81461 -2.29184 -0.863541 0.328343 -0.382737 + 0.704521 1.74345 -2.31883 -0.930635 0.170969 -0.323555 + 0.761639 1.85892 -2.32418 -0.678895 0.418539 -0.603264 + 0.754009 1.81933 -2.34872 -0.642565 0.443453 -0.624868 + 0.719399 1.73808 -2.35506 -0.80952 0.246333 -0.532914 + 0.696827 1.64032 -2.34079 -0.950187 0.090559 -0.298235 + 0.833309 1.79061 -2.43007 -0.516089 0.41206 -0.750905 + 0.827699 1.73417 -2.4562 -0.547419 0.351054 -0.759667 + 0.748398 1.76289 -2.37486 -0.658395 0.341972 -0.670501 + 0.745485 1.659 -2.4139 -0.717426 0.197369 -0.668091 + 0.711705 1.63495 -2.37702 -0.860826 0.114814 -0.495779 + 0.890894 1.89819 -2.40346 -0.188617 0.537879 -0.821651 + 0.894168 1.79832 -2.45924 -0.254788 0.460794 -0.850148 + 0.862776 1.70508 -2.49231 -0.430393 0.308177 -0.848404 + 0.774483 1.6838 -2.4337 -0.63756 0.246803 -0.729798 + 0.95015 1.82306 -2.44983 0.176843 0.539151 -0.823433 + 0.962286 1.76365 -2.48349 0.209413 0.433209 -0.876628 + 0.906304 1.73891 -2.4929 -0.209751 0.427739 -0.879229 + 0.968212 1.90539 -2.37411 0.592635 0.59902 -0.538478 + 0.987716 1.82698 -2.4258 0.57409 0.53914 -0.616237 + 1.00159 1.77161 -2.46045 0.608269 0.398638 -0.686365 + 0.964559 1.72626 -2.49555 0.329537 0.341156 -0.880351 + 0.929799 1.71694 -2.50798 -0.0314069 0.389298 -0.920576 + 1.01923 1.82657 -2.37916 0.807799 0.478478 -0.344266 + 1.0331 1.77121 -2.41381 0.783063 0.450379 -0.428918 + 1.00386 1.73423 -2.47251 0.52275 0.357287 -0.774002 + 0.972498 1.66507 -2.51892 0.338263 0.347848 -0.874403 + 1.03278 1.81604 -2.34523 0.933579 0.358352 -0.00378537 + 1.05161 1.76093 -2.37974 0.955417 0.284174 -0.0801475 + 1.0388 1.73244 -2.44884 0.706026 0.416678 -0.572631 + 1.03766 1.66368 -2.47911 0.743369 0.220584 -0.631463 + 1.00271 1.66546 -2.50279 0.492539 0.322597 -0.808292 + 1.03164 1.79677 -2.31524 0.92868 0.139109 0.343806 + 1.05047 1.74166 -2.34976 0.946588 0.106863 0.304224 + 1.05732 1.72216 -2.41478 0.935485 0.249442 -0.250294 + 1.01603 1.77596 -2.28519 0.814951 -0.0213268 0.579137 + 1.02877 1.71446 -2.30948 0.817695 -0.0764495 0.570552 + 1.06608 1.70247 -2.37884 0.98671 0.0764947 0.143359 + 1.06358 1.62938 -2.41404 0.99761 -0.0690584 -0.00230886 + 1.05483 1.64907 -2.44998 0.935142 0.0744831 -0.346356 + 0.991591 1.6776 -2.27344 0.722945 -0.170166 0.669622 + 0.987141 1.64227 -2.27943 0.721815 -0.203222 0.661577 + 1.04438 1.67527 -2.33857 0.849455 -0.135481 0.509972 + 0.928917 1.65604 -2.22124 0.654501 -0.1902 0.731746 + 0.84721 1.6801 -2.14508 0.527051 -0.253871 0.811028 + 0.924466 1.62071 -2.22722 0.622346 -0.244183 0.74368 + 0.800543 1.65759 -2.12917 -0.0247224 -0.361444 0.932066 + 0.849891 1.58028 -2.18976 0.479407 -0.337192 0.810229 + 0.847353 1.52504 -2.20593 0.252695 -0.351903 0.901282 + 0.921928 1.56547 -2.2434 0.564408 -0.195119 0.802105 + 0.78226 1.67854 -2.13192 -0.493658 -0.315895 0.810254 + 0.779096 1.55243 -2.18899 -0.485447 -0.488332 0.725171 + 0.803225 1.55777 -2.17385 0.0303811 -0.497011 0.867212 + 0.809967 1.50612 -2.21306 -0.113894 -0.627807 0.769991 + 0.858232 1.50344 -2.22114 0.321648 -0.523018 0.7893 + 0.729885 1.58097 -2.2126 -0.703871 -0.362518 0.610857 + 0.760813 1.57338 -2.19175 -0.567238 -0.393033 0.723717 + 0.763128 1.50201 -2.24492 -0.484207 -0.696389 0.529703 + 0.785838 1.50078 -2.2282 -0.339161 -0.732162 0.590685 + 0.705041 1.5959 -2.2413 -0.896007 -0.260487 0.359607 + 0.727552 1.50758 -2.29468 -0.815277 -0.566922 0.117993 + 0.732201 1.5096 -2.26577 -0.768822 -0.534011 0.351773 + 0.79173 1.45366 -2.31689 -0.400011 -0.886361 0.233142 + 0.81444 1.45243 -2.30017 -0.179193 -0.917239 0.355757 + 0.697095 1.60853 -2.27505 -0.975359 -0.177916 0.13046 + 0.719606 1.52022 -2.32843 -0.85424 -0.509483 0.103445 + 0.77798 1.45808 -2.36581 -0.542994 -0.839117 0.0322331 + 0.787081 1.45164 -2.3458 -0.471582 -0.880553 0.0472935 + 0.690965 1.62207 -2.31635 -0.997444 -0.0628849 -0.033923 + 0.714012 1.52048 -2.35343 -0.793156 -0.580599 0.18387 + 0.772387 1.45834 -2.39081 -0.459482 -0.888067 0.0146262 + 0.821425 1.44275 -2.39031 0.148141 -0.908183 -0.391481 + 0.830525 1.43631 -2.3703 0.170821 -0.965349 -0.197284 + 0.70237 1.56553 -2.37354 -0.919136 0.0165323 -0.393594 + 0.696508 1.54728 -2.34911 -0.888356 -0.330987 0.318233 + 0.739204 1.4759 -2.4068 -0.691215 -0.710952 -0.129493 + 0.768963 1.46795 -2.4262 -0.166699 -0.821156 -0.545815 + 0.802146 1.45039 -2.41021 -0.00244717 -0.858773 -0.51235 + 0.719395 1.57264 -2.40035 -0.822621 0.0772144 -0.563324 + 0.721699 1.50269 -2.40248 -0.885696 -0.348539 -0.306698 + 0.738725 1.5098 -2.42928 -0.774139 -0.165761 -0.610927 + 0.756482 1.47811 -2.43653 -0.416224 -0.613345 -0.671242 + 0.753175 1.59668 -2.43723 -0.76287 0.129119 -0.633528 + 0.752344 1.53175 -2.44773 -0.755237 -0.0412167 -0.654154 + 0.767666 1.59787 -2.45405 -0.587676 0.212831 -0.780602 + 0.766835 1.53293 -2.46456 -0.568832 -0.0943899 -0.817019 + 0.770101 1.50006 -2.45498 -0.286893 -0.491131 -0.822485 + 0.802688 1.48985 -2.43791 0.105407 -0.689741 -0.716343 + 0.787825 1.60187 -2.46326 -0.533387 0.17952 -0.826602 + 0.775175 1.53447 -2.46828 -0.407422 -0.0929335 -0.908499 + 0.783568 1.50665 -2.4605 -0.132566 -0.583799 -0.801002 + 0.816156 1.49644 -2.44343 0.0263318 -0.810131 -0.585658 + 0.815169 1.47968 -2.42758 0.105876 -0.607886 -0.786934 + 0.80956 1.65472 -2.4698 -0.585929 0.192644 -0.787131 + 0.834381 1.57937 -2.49915 -0.527979 -0.00901256 -0.849209 + 0.795335 1.53847 -2.47749 -0.379415 -0.0965355 -0.920177 + 0.799746 1.50878 -2.47087 -0.314491 -0.660004 -0.682268 + 0.791909 1.50818 -2.46422 -0.287499 -0.728917 -0.621308 + 0.856116 1.63222 -2.50569 -0.508646 0.182654 -0.841378 + 0.881593 1.58963 -2.53022 -0.500878 0.0741193 -0.862338 + 0.873375 1.55246 -2.51634 -0.599841 -0.147045 -0.786491 + 0.823302 1.53265 -2.48298 -0.344404 -0.261738 -0.901598 + 0.886271 1.68311 -2.50739 -0.339354 0.282606 -0.897202 + 0.911747 1.64053 -2.53192 -0.305904 0.280891 -0.909683 + 0.906936 1.54814 -2.54853 -0.663379 -0.0685556 -0.745136 + 0.898718 1.51097 -2.53465 -0.606455 -0.350795 -0.713552 + 0.862296 1.50574 -2.50017 -0.575435 -0.420625 -0.701391 + 0.937738 1.65575 -2.53135 0.0331199 0.344394 -0.938241 + 0.91826 1.55614 -2.56075 -0.45608 0.0795948 -0.886372 + 0.938077 1.51208 -2.56524 -0.208019 -0.339887 -0.917172 + 0.926752 1.50408 -2.55302 -0.463644 -0.477295 -0.746474 + 0.918406 1.46792 -2.50923 -0.527312 -0.596774 -0.604817 + 0.971973 1.56406 -2.55641 0.32753 0.173357 -0.928801 + 0.944251 1.57137 -2.56018 0.0427712 0.23108 -0.971994 + 0.965799 1.50478 -2.56146 0.17225 -0.313621 -0.933794 + 0.94644 1.46103 -2.5276 -0.194366 -0.720725 -0.665416 + 0.908384 1.45247 -2.48527 -0.463667 -0.826135 -0.320178 + 1.00219 1.56445 -2.54027 0.590486 0.130656 -0.796401 + 1.02563 1.56577 -2.51562 0.794473 0.0464434 -0.605522 + 1.01213 1.50124 -2.52694 0.72676 -0.313253 -0.611304 + 0.988691 1.49992 -2.55159 0.497268 -0.350932 -0.793455 + 1.04279 1.55116 -2.48648 0.926479 -0.07608 -0.368575 + 1.02045 1.48892 -2.50796 0.760931 -0.387235 -0.520608 + 0.969331 1.45617 -2.51773 0.300105 -0.695323 -0.653041 + 0.967231 1.42517 -2.48034 -0.0577114 -0.910767 -0.408869 + 0.934111 1.43808 -2.46427 -0.466483 -0.875083 -0.128933 + 1.04434 1.51289 -2.45419 0.968865 -0.236268 -0.0740094 + 1.02199 1.45065 -2.47566 0.765352 -0.543841 -0.344198 + 0.977657 1.44386 -2.49875 0.381989 -0.697831 -0.605901 + 1.05303 1.60998 -2.37494 0.900478 -0.194567 0.388951 + 1.03378 1.49348 -2.41509 0.992777 -0.119957 -0.00224613 + 1.01157 1.43196 -2.45725 0.598278 -0.744309 -0.296761 + 0.978751 1.41416 -2.43431 0.00739088 -0.999733 -0.0218946 + 0.945631 1.42706 -2.41825 -0.512825 -0.852041 0.105055 + 0.995792 1.57698 -2.3158 0.814002 -0.169589 0.555555 + 1.03849 1.50683 -2.38608 0.951259 0.306815 0.0311561 + 1.03263 1.45201 -2.41087 0.884312 -0.430984 0.17957 + 1.02792 1.43867 -2.43989 0.847379 -0.409527 -0.337988 + 0.978323 1.56018 -2.29297 0.769817 -0.174749 0.613877 + 1.02102 1.49003 -2.36325 0.778311 -0.263564 0.569882 + 1.02274 1.45627 -2.3887 0.703907 -0.528014 0.475096 + 0.9951 1.42087 -2.41695 0.402973 -0.893083 0.200042 + 0.985216 1.42513 -2.39478 0.233794 -0.893681 0.382981 + 0.957668 1.56216 -2.26916 0.654388 -0.16491 0.737958 + 0.986659 1.48947 -2.32574 0.698985 -0.326803 0.636097 + 0.988383 1.4557 -2.35119 0.448933 -0.670597 0.590558 + 0.938402 1.49795 -2.268 0.552054 -0.445063 0.705092 + 0.966005 1.49145 -2.30192 0.652621 -0.41273 0.635405 + 0.957587 1.46986 -2.31696 0.157069 -0.863637 0.479019 + 0.965733 1.4575 -2.3428 -0.0787737 -0.871895 0.483315 + 0.962566 1.42692 -2.38639 -0.203534 -0.909628 0.362148 + 0.902662 1.50126 -2.24224 0.42143 -0.450761 0.786899 + 0.895943 1.47159 -2.27488 0.229536 -0.931329 0.282736 + 0.916757 1.47828 -2.28659 0.143584 -0.964206 0.222912 + 0.929985 1.47636 -2.28303 0.0357375 -0.826778 0.561391 + 0.851514 1.47378 -2.25377 0.17846 -0.865555 0.467938 + 0.883863 1.47083 -2.31947 0.387042 -0.922057 -0.0029441 + 0.904677 1.47752 -2.33118 0.127075 -0.988903 -0.0769601 + 0.91077 1.47773 -2.33286 -0.147609 -0.984598 0.093687 + 0.923997 1.47581 -2.32931 -0.21377 -0.956465 0.198686 + 0.820847 1.48452 -2.22826 -0.251544 -0.757459 0.602479 + 0.845107 1.44169 -2.32568 0.270701 -0.949947 0.155957 + 0.869282 1.46545 -2.36408 0.594121 -0.753967 -0.280275 + 0.886052 1.48002 -2.36785 0.268451 -0.941958 -0.201619 + 0.892145 1.48023 -2.36953 -0.253546 -0.965472 0.0598149 + 0.860427 1.48621 -2.41366 -0.200694 -0.979229 -0.0288473 + 0.88349 1.46958 -2.43114 -0.485173 -0.865108 0.127257 + 0.915207 1.4636 -2.38701 -0.519909 -0.826232 0.216876 + 0.855315 1.48492 -2.40979 0.312712 -0.879647 -0.358375 + 0.837786 1.48875 -2.43245 0.0879896 -0.845276 -0.527035 + 0.842899 1.49004 -2.43632 -0.260622 -0.942107 -0.210977 + 0.857762 1.48397 -2.45214 -0.511883 -0.85835 -0.0347977 + 0.838544 1.47036 -2.40602 0.475879 -0.690743 -0.544438 + 0.819265 1.478 -2.42592 0.202534 -0.646646 -0.735411 + 0.833691 1.49043 -2.4341 0.00796357 -0.763876 -0.645313 + 0.839337 1.49281 -2.43923 -0.298526 -0.896703 -0.326812 + 0.8542 1.48674 -2.45505 -0.515067 -0.849626 -0.113324 + 0.821802 1.49881 -2.44856 -0.105673 -0.922353 -0.371616 + 0.829639 1.49942 -2.45521 -0.302403 -0.935282 -0.183849 + 0.852274 1.49029 -2.4762 -0.537337 -0.739943 -0.404663 + 0.827713 1.50296 -2.47636 -0.289065 -0.662239 -0.69129 + 0.932143 1.46345 -2.35515 -0.39054 -0.855965 0.338825 + -0.477956 2.44876 -2.42829 -0.713782 -0.394723 0.578541 + -0.467398 2.44058 -2.42085 -0.524332 -0.503582 0.686644 + -0.455121 2.49752 -2.38613 -0.168457 0.0900533 0.981587 + -0.48166 2.36212 -2.53005 -0.723287 -0.5024 0.473762 + -0.464037 2.34847 -2.51762 -0.53005 -0.616581 0.58213 + -0.447121 2.34366 -2.51467 -0.0655915 -0.719394 0.691498 + -0.450482 2.43577 -2.4179 -0.046679 -0.601423 0.797566 + -0.465679 2.5057 -2.39357 -0.383277 0.30033 0.873442 + -0.492046 2.45967 -2.43823 -0.713777 -0.394727 0.578544 + -0.495751 2.37304 -2.53998 -0.723126 -0.502265 0.474151 + -0.484332 2.25592 -2.64186 -0.720373 -0.483533 0.497251 + -0.440329 2.49849 -2.38915 0.316756 0.157133 0.935401 + -0.476236 2.51388 -2.40102 -0.566382 0.416233 0.71131 + -0.502604 2.46785 -2.44568 -0.829634 -0.25995 0.494099 + -0.513374 2.38669 -2.55241 -0.843808 -0.375323 0.383565 + -0.43569 2.43673 -2.42093 0.302498 -0.558936 0.772065 + -0.418756 2.44069 -2.42749 0.521749 -0.469847 0.712054 + -0.429745 2.50345 -2.39596 0.461368 0.283595 0.840662 + -0.424327 2.51521 -2.40944 0.601343 0.599238 0.528489 + -0.467152 2.52407 -2.41326 -0.203465 0.952545 0.226404 + -0.474164 2.52076 -2.40874 -0.44632 0.824317 0.348282 + -0.422429 2.34527 -2.51972 0.298635 -0.675887 0.673791 + -0.405496 2.34923 -2.52628 0.515755 -0.591514 0.619764 + -0.408173 2.44566 -2.43429 0.639148 -0.39315 0.661001 + -0.398907 2.45053 -2.44081 0.703453 -0.336243 0.626175 + -0.426444 2.50578 -2.39893 0.585456 0.381841 0.715149 + -0.440365 2.23543 -2.62505 -0.048931 -0.705347 0.707172 + -0.415673 2.23704 -2.6301 0.297261 -0.667154 0.683039 + -0.389712 2.24311 -2.64016 0.518166 -0.584773 0.624134 + -0.387829 2.35752 -2.53764 0.639941 -0.516832 0.568648 + -0.378564 2.36239 -2.54416 0.707258 -0.463213 0.53406 + -0.466709 2.24227 -2.62943 -0.523434 -0.600563 0.604434 + -0.44074 2.1104 -2.74687 -0.0493188 -0.687421 0.724583 + -0.404898 2.11274 -2.75421 0.302735 -0.655908 0.691474 + -0.378937 2.1188 -2.76427 0.517269 -0.583588 0.625986 + -0.372046 2.2514 -2.65151 0.639663 -0.514842 0.570761 + -0.4943 2.13491 -2.76878 -0.696929 -0.476595 0.535861 + -0.467083 2.11724 -2.75126 -0.489428 -0.592811 0.639558 + -0.442331 2.02299 -2.82772 -0.0314512 -0.640199 0.767565 + -0.40649 2.02533 -2.83506 0.318501 -0.62997 0.708305 + -0.374365 2.03609 -2.84565 0.530869 -0.575813 0.621786 + -0.505944 2.2722 -2.65711 -0.721319 -0.48383 0.495588 + -0.515912 2.15119 -2.78403 -0.733482 -0.445994 0.512926 + -0.502179 2.0455 -2.85321 -0.690503 -0.424785 0.58546 + -0.474962 2.02784 -2.83569 -0.487818 -0.526032 0.696652 + -0.452376 1.96882 -2.8685 -0.00947196 -0.619013 0.785324 + -0.523567 2.28586 -2.66954 -0.840828 -0.363677 0.400933 + -0.539896 2.17133 -2.80264 -0.852082 -0.322402 0.412326 + -0.553113 2.08232 -2.89334 -0.841536 -0.268257 0.468887 + -0.529129 2.06217 -2.87472 -0.725858 -0.391548 0.565526 + -0.513307 1.9881 -2.90143 -0.704606 -0.30485 0.640778 + -0.519036 2.39674 -2.56253 -0.993684 -0.0101956 0.111752 + -0.532252 2.30126 -2.68505 -0.993001 -0.000787938 0.118101 + -0.548581 2.18674 -2.81815 -0.988103 -0.0106538 0.153427 + -0.564027 2.1075 -2.90947 -0.977349 0.0339309 0.208896 + -0.568557 2.0192 -2.94789 -0.822824 -0.216137 0.52559 + -0.508266 2.4779 -2.45579 -0.964535 0.124737 0.23262 + -0.515576 2.40822 -2.57542 -0.924263 0.345164 -0.163094 + -0.528792 2.31274 -2.69794 -0.932179 0.328645 -0.15177 + -0.545174 2.20307 -2.83628 -0.939959 0.316103 -0.128668 + -0.56062 2.12383 -2.92759 -0.948636 0.316125 0.0124357 + -0.506193 2.48478 -2.46351 -0.887713 0.459375 -0.0306548 + -0.500131 2.49158 -2.47168 -0.702651 0.676886 -0.219333 + -0.509514 2.41502 -2.58358 -0.737999 0.578881 -0.346776 + -0.520503 2.32296 -2.7101 -0.751494 0.56082 -0.347473 + -0.536884 2.21329 -2.84844 -0.767794 0.551236 -0.326545 + -0.493119 2.4949 -2.47621 -0.490723 0.802906 -0.338427 + -0.49781 2.42055 -2.59114 -0.516982 0.720761 -0.461771 + -0.508799 2.32849 -2.71765 -0.52511 0.704602 -0.477279 + -0.522297 2.22082 -2.85854 -0.538309 0.705294 -0.461285 + -0.477694 2.49933 -2.48308 -0.36364 0.848718 -0.383984 + -0.482385 2.42499 -2.59801 -0.391614 0.770759 -0.502562 + -0.486967 2.33492 -2.72754 -0.398568 0.753249 -0.523219 + -0.500465 2.22725 -2.86843 -0.400833 0.761233 -0.509762 + -0.535618 2.15706 -2.94556 -0.526022 0.814297 -0.245401 + -0.461591 2.50266 -2.48885 -0.290495 0.869366 -0.399768 + -0.455504 2.43055 -2.60765 -0.313959 0.794689 -0.519518 + -0.460086 2.34048 -2.73717 -0.31707 0.776471 -0.544572 + -0.466308 2.23432 -2.88067 -0.314123 0.788051 -0.529435 + -0.451048 2.52741 -2.41903 -0.0854002 0.974261 0.208619 + -0.443246 2.50551 -2.4944 -0.210098 0.889037 -0.406783 + -0.437159 2.43339 -2.6132 -0.234496 0.814507 -0.53065 + -0.433981 2.34442 -2.74496 -0.236167 0.794165 -0.559934 + -0.439661 2.52833 -2.42158 0.06001 0.981835 0.179995 + -0.431859 2.50643 -2.49695 -0.0612857 0.912063 -0.405445 + -0.418151 2.43494 -2.61744 -0.075994 0.839986 -0.53726 + -0.414973 2.34596 -2.7492 -0.0696229 0.814534 -0.575923 + -0.4286 2.5258 -2.42033 0.448094 0.854593 0.262455 + -0.416879 2.50535 -2.49781 0.149029 0.915236 -0.374345 + -0.403171 2.43386 -2.61831 0.140231 0.841267 -0.522117 + -0.393462 2.34401 -2.75001 0.15221 0.807642 -0.56969 + -0.415832 2.23983 -2.89347 -0.0594768 0.811874 -0.580796 + -0.391312 2.48349 -2.47758 0.926959 0.357546 0.11361 + -0.395585 2.49407 -2.48847 0.823627 0.565352 -0.0449028 + -0.405817 2.50282 -2.49657 0.495461 0.826532 -0.26714 + -0.384707 2.42964 -2.61623 0.522457 0.743262 -0.417852 + -0.374997 2.33978 -2.74793 0.532501 0.698704 -0.47776 + -0.389873 2.47013 -2.4633 0.952587 0.195579 0.233082 + -0.367343 2.40322 -2.58996 0.972079 0.234349 -0.0119956 + -0.374474 2.42088 -2.60813 0.864561 0.465673 -0.188901 + -0.39199 2.4607 -2.45278 0.939376 0.0621409 0.33721 + -0.369437 2.37412 -2.55811 0.970087 -0.0648975 0.233922 + -0.365904 2.38986 -2.57567 0.989964 0.0803018 0.116288 + -0.352711 2.30859 -2.71715 0.96659 0.236506 -0.0988375 + -0.395605 2.45286 -2.44378 0.853254 -0.153288 0.498458 + -0.373052 2.36627 -2.54911 0.87559 -0.272512 0.398848 + -0.350354 2.27359 -2.679 0.985335 -0.0106209 0.170298 + -0.346821 2.28933 -2.69655 0.993311 0.107274 0.0427142 + -0.357841 2.25887 -2.66151 0.707496 -0.462844 0.534064 + -0.35233 2.26275 -2.66646 0.91187 -0.217126 0.348351 + -0.329112 2.15478 -2.81047 0.991712 0.127836 -0.0128568 + -0.338253 2.17287 -2.83091 0.962373 0.234008 -0.138124 + -0.344143 2.19213 -2.8515 0.967022 0.220721 -0.127082 + -0.339088 2.13831 -2.79074 0.707338 -0.467927 0.529828 + -0.331088 2.14395 -2.79793 0.914263 -0.230053 0.333465 + -0.319993 2.06227 -2.90625 0.997595 0.0415473 -0.0554786 + -0.329134 2.08035 -2.92669 0.967249 0.207806 -0.145763 + -0.353293 2.13085 -2.78075 0.639947 -0.51686 0.568615 + -0.331183 2.05649 -2.87513 0.703264 -0.491482 0.513678 + -0.323182 2.06213 -2.88232 0.911156 -0.269459 0.311748 + -0.323851 2.01424 -2.94759 0.992628 -0.0747521 0.0954014 + -0.348721 2.04813 -2.86213 0.640271 -0.53231 0.553804 + -0.335699 2.01663 -2.91063 0.649697 -0.540085 0.534979 + -0.327041 2.0141 -2.92366 0.857244 -0.379026 0.348528 + -0.381088 1.98997 -2.88234 0.532462 -0.585967 0.610842 + -0.353237 2.00827 -2.89763 0.65041 -0.539372 0.534831 + -0.338162 1.98742 -2.93632 0.65371 -0.528527 0.541592 + -0.329504 1.9849 -2.94935 0.831056 -0.389802 0.396738 + -0.413213 1.9792 -2.87175 0.331722 -0.638423 0.694534 + -0.422761 1.94126 -2.90427 0.297743 -0.670594 0.67945 + -0.383209 1.9579 -2.91144 0.523002 -0.591302 0.613865 + -0.355358 1.9762 -2.92673 0.648929 -0.531535 0.544392 + -0.461924 1.93088 -2.90102 0.0978693 -0.695188 0.712134 + -0.482886 1.89872 -2.93538 0.194687 -0.808608 0.555202 + -0.423224 1.92193 -2.92251 0.283896 -0.751676 0.595303 + -0.383672 1.93857 -2.92968 0.521782 -0.682096 0.512337 + -0.352138 1.95325 -2.95268 0.634726 -0.640366 0.432497 + -0.499306 1.93196 -2.90716 -0.480046 -0.286154 0.82926 + -0.49686 1.91642 -2.91029 -0.178898 -0.514258 0.838769 + -0.517822 1.88427 -2.94465 0.0771349 -0.809935 0.581426 + -0.520296 1.84983 -3.0054 0.147517 -0.871697 0.467315 + -0.489461 1.86738 -2.9882 0.240102 -0.863495 0.44354 + -0.485006 1.97367 -2.87647 -0.504201 -0.427606 0.75029 + -0.527606 1.94638 -2.93211 -0.713167 -0.134316 0.688006 + -0.540477 1.89771 -2.94495 -0.668362 -0.157002 0.727078 + -0.538031 1.88218 -2.94808 -0.457874 -0.632475 0.624762 + -0.540505 1.84774 -3.00883 0.044525 -0.793317 0.607178 + -0.540257 2.00477 -2.92293 -0.712884 -0.319851 0.624093 + -0.550425 1.95592 -2.95582 -0.717065 -0.137263 0.683357 + -0.563295 1.90724 -2.96866 -0.778807 -0.187871 0.598468 + -0.567529 1.8399 -3.00697 -0.104567 -0.651089 0.751764 + -0.535155 1.79806 -3.09115 0.340148 -0.840625 0.421483 + -0.578725 1.97035 -2.98078 -0.856759 -0.160377 0.490146 + -0.579954 1.94416 -2.99674 -0.905186 -0.104193 0.412046 + -0.599692 1.88911 -3.03888 -0.925468 0.00617519 0.378775 + -0.583033 1.85218 -3.0108 -0.714014 -0.257658 0.650996 + -0.589618 1.99987 -2.99685 -0.958446 -0.0246769 0.284204 + -0.590847 1.97369 -3.01281 -0.93631 -0.0896753 0.339532 + -0.579471 2.04438 -2.96402 -0.95826 -0.00316714 0.285881 + -0.584399 2.04968 -2.99969 -0.9862 0.146474 0.077163 + -0.59468 1.9906 -3.02123 -0.984201 0.0671927 0.163807 + -0.609711 1.92795 -3.07071 -0.97534 0.0723991 0.208497 + -0.605878 1.91104 -3.06229 -0.954416 -0.00805304 0.298371 + -0.574252 2.09419 -2.96686 -0.964908 0.251883 0.0742159 + -0.578828 2.08162 -3.00726 -0.931109 0.357932 -0.070149 + -0.58911 2.02254 -3.02881 -0.985573 0.159402 0.0568875 + -0.608203 1.94353 -3.09701 -0.979045 0.179536 0.0961097 + -0.637013 1.84059 -3.16702 -0.989931 0.0571008 0.129519 + -0.550205 2.14953 -2.93546 -0.813702 0.558485 -0.161193 + -0.563837 2.11988 -2.97473 -0.882279 0.460366 -0.0982188 + -0.560378 2.11072 -3.00768 -0.785948 0.55163 -0.279265 + -0.586662 2.05445 -3.04743 -0.913065 0.377179 -0.155077 + -0.605755 1.97545 -3.11563 -0.912638 0.369376 -0.17508 + -0.545387 2.14899 -2.97514 -0.661954 0.723716 -0.195068 + -0.533728 2.13537 -3.02469 -0.558143 0.735336 -0.384393 + -0.560011 2.0791 -3.06445 -0.729394 0.562423 -0.389442 + -0.576123 1.99168 -3.14484 -0.719048 0.536651 -0.44156 + -0.508183 2.17016 -2.95508 -0.398298 0.861567 -0.31474 + -0.517952 2.16209 -2.98466 -0.386136 0.884778 -0.260897 + -0.491183 2.14407 -3.04 -0.266413 0.856064 -0.44292 + -0.516853 2.10795 -3.09817 -0.470965 0.730318 -0.494801 + -0.532964 2.02054 -3.17856 -0.54834 0.591358 -0.591286 + -0.474026 2.17723 -2.96733 -0.19824 0.90362 -0.3797 + -0.475407 2.1708 -2.99997 -0.150471 0.936653 -0.316291 + -0.452411 2.14003 -3.06474 0.13632 0.845895 -0.515633 + -0.478081 2.10392 -3.12291 -0.0964758 0.803228 -0.587807 + -0.440204 2.23825 -2.88846 -0.218931 0.800731 -0.557583 + -0.441222 2.17234 -2.98279 -0.0221138 0.893085 -0.449343 + -0.442603 2.16591 -3.01543 0.329022 0.885641 -0.327695 + -0.422268 2.10312 -3.09402 0.426462 0.765735 -0.481436 + -0.41685 2.17391 -2.9878 0.0676328 0.792689 -0.605863 + -0.41246 2.12899 -3.04471 0.39343 0.758927 -0.518886 + -0.386349 2.06833 -3.10966 0.584743 0.673021 -0.4529 + -0.438839 2.08711 -3.14356 0.237809 0.786797 -0.569558 + -0.39432 2.23788 -2.89427 0.187654 0.788698 -0.585441 + -0.389817 2.15261 -2.99969 0.337419 0.731922 -0.591979 + -0.385427 2.10769 -3.0566 0.506834 0.693966 -0.511401 + -0.356933 2.02515 -3.1269 0.744423 0.553287 -0.373775 + -0.40292 2.05232 -3.15919 0.498005 0.678042 -0.540601 + -0.370119 2.2312 -2.89033 0.55757 0.66381 -0.498469 + -0.365615 2.14594 -2.99574 0.580164 0.6196 -0.528683 + -0.356011 2.06451 -3.07384 0.730735 0.537446 -0.420926 + -0.359842 2.32626 -2.73533 0.881773 0.405898 -0.240257 + -0.354964 2.21767 -2.87772 0.879801 0.390288 -0.271342 + -0.346571 2.11936 -2.98543 0.898082 0.354904 -0.259793 + -0.336966 2.03794 -3.06353 0.903413 0.351656 -0.245321 + -0.33575 2.09382 -2.95921 0.964039 0.230572 -0.132159 + -0.325227 2.00706 -3.03519 0.97344 0.195244 -0.119562 + -0.318612 1.99359 -3.00267 0.999024 0.0441667 0.000984841 + -0.321743 1.93023 -3.0794 0.923229 -0.337234 0.184178 + -0.319477 1.95721 -3.08768 0.993013 0.115719 0.0230935 + -0.331216 1.98809 -3.11602 0.909569 0.348049 -0.227037 + -0.358045 2.01003 -3.15456 0.726752 0.554167 -0.40587 + -0.324871 1.97717 -2.97205 0.932115 -0.277305 0.232944 + -0.319632 1.95652 -3.02713 0.961816 -0.252597 0.105375 + -0.334942 1.96447 -2.96227 0.726288 -0.560023 0.398598 + -0.33031 1.95675 -2.98498 0.753021 -0.580483 0.309837 + -0.332421 1.93045 -3.03725 0.716742 -0.641948 0.272365 + -0.362896 1.9105 -3.02897 0.579969 -0.751693 0.313997 + -0.34472 1.86875 -3.17277 0.67375 -0.714126 0.189961 + -0.317757 1.91413 -3.10763 0.770193 -0.558397 0.308213 + -0.31549 1.94111 -3.11592 0.989176 0.135782 -0.0556295 + -0.332328 1.97298 -3.14368 0.882671 0.379849 -0.27678 + -0.39443 1.89582 -3.00597 0.504745 -0.794646 0.337297 + -0.375195 1.84879 -3.16449 0.555768 -0.786484 0.269377 + -0.351296 1.8498 -3.23371 0.795118 -0.606203 -0.0174379 + -0.324332 1.89519 -3.16858 0.943972 -0.319452 -0.0828742 + -0.320957 1.92094 -3.15613 0.975908 0.0775858 -0.203921 + -0.4298 1.89059 -2.97533 0.340549 -0.843884 0.414593 + -0.427918 1.82882 -3.13141 0.439417 -0.839304 0.320127 + -0.441853 1.79071 -3.20774 0.415366 -0.848534 0.327813 + -0.38913 1.81069 -3.24081 0.605902 -0.736656 0.300367 + -0.361202 1.8383 -3.26571 0.940777 -0.274952 0.198343 + -0.463288 1.82359 -3.10077 0.344215 -0.874378 0.342021 + -0.494123 1.80604 -3.11798 0.365028 -0.861032 0.354088 + -0.489767 1.77749 -3.19558 0.294228 -0.919954 0.259065 + -0.460883 1.78007 -3.21531 0.294097 -0.914398 0.278177 + -0.422959 1.78291 -3.25752 0.447344 -0.881616 0.150454 + -0.530799 1.76951 -3.16875 0.324337 -0.918588 0.225834 + -0.540533 1.76076 -3.22843 0.11771 -0.991447 -0.0563651 + -0.494135 1.76554 -3.25139 0.10449 -0.994485 0.0090278 + -0.465251 1.76812 -3.27113 0.118759 -0.99217 -0.0386631 + -0.441989 1.77227 -3.2651 0.359206 -0.933256 0.00197985 + -0.558435 1.76325 -3.1555 0.293737 -0.920608 0.257293 + -0.568169 1.7545 -3.21518 0.0503074 -0.985755 -0.160488 + -0.587769 1.76593 -3.24254 -0.312762 -0.882471 -0.351318 + -0.554822 1.76938 -3.27247 -0.175481 -0.8986 -0.402149 + -0.508423 1.77416 -3.29543 -0.113135 -0.912836 -0.392339 + -0.573037 1.77082 -3.12331 0.180184 -0.906545 0.381721 + -0.580638 1.74965 -3.18292 0.0527998 -0.998467 0.0166229 + -0.600238 1.76109 -3.21029 -0.421898 -0.876679 -0.231162 + -0.562179 1.79022 -3.08929 0.225778 -0.856873 0.463457 + -0.610853 1.77971 -3.09411 -0.470898 -0.791309 0.389981 + -0.614004 1.77602 -3.11247 -0.397612 -0.832013 0.386857 + -0.595239 1.75722 -3.15073 -0.0711713 -0.950787 0.301559 + -0.599995 1.7991 -3.06009 -0.234115 -0.753129 0.614806 + -0.615499 1.81139 -3.06392 -0.866322 -0.235792 0.440327 + -0.618651 1.8077 -3.08228 -0.976566 -0.0945631 0.19333 + -0.624255 1.77598 -3.12444 -0.803737 -0.542337 0.244699 + -0.605489 1.75718 -3.16271 -0.458868 -0.884725 0.0818619 + -0.621003 1.81115 -3.103 -0.983966 0.0241603 0.176711 + -0.626607 1.77943 -3.14516 -0.914191 -0.396809 0.0824398 + -0.630666 1.78308 -3.1656 -0.897546 -0.423464 0.122836 + -0.609548 1.76084 -3.18315 -0.552403 -0.829464 -0.0827085 + -0.631179 1.79085 -3.23334 -0.847462 -0.372282 -0.378436 + -0.627189 1.83308 -3.12642 -0.971678 -0.00707808 0.236202 + -0.640489 1.7906 -3.20621 -0.926867 -0.352008 -0.130414 + -0.635505 1.85617 -3.19331 -0.953631 0.243531 -0.176862 + -0.613937 1.79682 -3.27088 -0.740642 -0.283997 -0.608929 + -0.618263 1.86215 -3.23085 -0.821367 0.35397 -0.447281 + -0.58863 1.87838 -3.26006 -0.580097 0.468114 -0.666601 + -0.58099 1.80027 -3.30081 -0.514348 -0.234756 -0.824825 + -0.532948 1.87658 -3.28699 -0.37928 0.454166 -0.806152 + -0.525308 1.79846 -3.32774 -0.282127 -0.243749 -0.927896 + -0.48922 1.79653 -3.33282 -0.0552429 -0.355778 -0.932936 + -0.472335 1.77223 -3.30051 0.10049 -0.896944 -0.430574 + -0.48838 2.02688 -3.19909 -0.257283 0.649077 -0.715894 + -0.488365 1.88292 -3.30753 -0.317856 0.41292 -0.853501 + -0.468522 1.81279 -3.33568 0.0380865 -0.158595 -0.986609 + -0.449139 2.01008 -3.21974 -0.0256102 0.686103 -0.727054 + -0.448111 1.89804 -3.30834 -0.169706 0.506088 -0.845621 + -0.428268 1.82792 -3.3365 0.158438 -0.403155 -0.901312 + -0.420566 1.99496 -3.23476 0.177246 0.670731 -0.720211 + -0.419538 1.88293 -3.32336 -0.0389268 0.42072 -0.906355 + -0.406468 1.84413 -3.33754 0.288276 -0.158864 -0.944277 + -0.390086 1.82357 -3.29044 0.532366 -0.645625 -0.547499 + -0.403222 2.00625 -3.21301 0.470228 0.653122 -0.593564 + -0.393954 1.89485 -3.30799 0.404817 0.51302 -0.756924 + -0.380884 1.85606 -3.32217 0.653747 -0.0107281 -0.756637 + -0.368286 1.83979 -3.29148 0.654441 -0.599344 -0.460971 + -0.358347 1.96397 -3.20837 0.70129 0.516857 -0.490969 + -0.368483 1.91092 -3.27321 0.7171 0.437002 -0.542952 + -0.376611 1.90614 -3.28625 0.597778 0.485397 -0.638005 + -0.36934 1.85773 -3.30622 0.807147 0.00516889 -0.590328 + -0.356741 1.84146 -3.27553 0.997983 -0.061069 0.0173252 + -0.337794 1.95281 -3.18389 0.850943 0.383801 -0.358599 + -0.347931 1.89976 -3.24873 0.881533 0.202841 -0.426328 + -0.351306 1.87401 -3.26118 0.94511 -0.0207821 -0.326092 + -0.361212 1.86251 -3.29318 0.892142 0.0802041 -0.444579 + -0.365609 1.82155 -3.26492 0.83111 -0.546298 -0.103993 + -0.428375 1.79264 -3.29734 0.48171 -0.587432 -0.650292 + -0.449073 1.77638 -3.29447 0.352737 -0.821275 -0.448424 + -0.370069 1.81839 -3.25511 0.747716 -0.381009 0.543831 + -0.403898 1.79062 -3.27181 0.558526 -0.807993 -0.187608 + 0.465679 2.5057 -2.39357 0.383464 0.300067 0.87345 + 0.455121 2.49752 -2.38613 0.168342 0.0901796 0.981595 + 0.467398 2.44058 -2.42085 0.524332 -0.503585 0.686643 + 0.474164 2.52076 -2.40874 0.446181 0.824383 0.348303 + 0.424327 2.51521 -2.40944 -0.601315 0.599213 0.528549 + 0.426444 2.50578 -2.39893 -0.585541 0.381774 0.715116 + 0.429745 2.50345 -2.39596 -0.461452 0.283428 0.840673 + 0.440329 2.49849 -2.38915 -0.316583 0.157404 0.935414 + 0.43569 2.43673 -2.42093 -0.302496 -0.558937 0.772066 + 0.450482 2.43577 -2.4179 0.0466769 -0.601423 0.797566 + 0.477956 2.44876 -2.42829 0.713783 -0.394725 0.578538 + 0.492046 2.45967 -2.43823 0.713778 -0.394725 0.578543 + 0.476236 2.51388 -2.40102 0.56647 0.416188 0.711265 + 0.464037 2.34847 -2.51762 0.530505 -0.615793 0.582549 + 0.48166 2.36212 -2.53005 0.723126 -0.502302 0.474111 + 0.495751 2.37304 -2.53998 0.723281 -0.501903 0.474297 + 0.502604 2.46785 -2.44568 0.829633 -0.259951 0.4941 + 0.508266 2.4779 -2.45579 0.964536 0.124737 0.232619 + 0.447121 2.34366 -2.51467 0.0649277 -0.718758 0.692222 + 0.466709 2.24227 -2.62943 0.525797 -0.602265 0.600678 + 0.484332 2.25592 -2.64186 0.718824 -0.487143 0.495967 + 0.505944 2.2722 -2.65711 0.720384 -0.483322 0.49744 + 0.513374 2.38669 -2.55241 0.843805 -0.375318 0.383574 + 0.422429 2.34527 -2.51972 -0.298634 -0.675886 0.673792 + 0.415673 2.23704 -2.6301 -0.297262 -0.667155 0.683037 + 0.440365 2.23543 -2.62505 0.0485824 -0.705731 0.706812 + 0.467083 2.11724 -2.75126 0.491269 -0.589695 0.641026 + 0.418756 2.44069 -2.42749 -0.521748 -0.469846 0.712056 + 0.405496 2.34923 -2.52628 -0.515754 -0.591516 0.619763 + 0.389712 2.24311 -2.64016 -0.518166 -0.584775 0.624133 + 0.404898 2.11274 -2.75421 -0.301854 -0.655118 0.692607 + 0.44074 2.1104 -2.74687 0.0485278 -0.686716 0.725304 + 0.408173 2.44566 -2.43429 -0.639148 -0.393146 0.661004 + 0.387829 2.35752 -2.53764 -0.639941 -0.516836 0.568644 + 0.372046 2.2514 -2.65151 -0.639663 -0.51484 0.570763 + 0.353293 2.13085 -2.78075 -0.640012 -0.516908 0.568498 + 0.378937 2.1188 -2.76427 -0.518318 -0.581978 0.626616 + 0.398907 2.45053 -2.44081 -0.703453 -0.33624 0.626176 + 0.378564 2.36239 -2.54416 -0.707258 -0.463217 0.534056 + 0.357841 2.25887 -2.66151 -0.707496 -0.462841 0.534066 + 0.339088 2.13831 -2.79074 -0.707264 -0.468092 0.529781 + 0.348721 2.04813 -2.86213 -0.637327 -0.536612 0.553048 + 0.395605 2.45286 -2.44378 -0.853254 -0.153287 0.498458 + 0.373052 2.36627 -2.54911 -0.874014 -0.271512 0.402965 + 0.35233 2.26275 -2.66646 -0.911269 -0.221579 0.347118 + 0.331088 2.14395 -2.79793 -0.914335 -0.230114 0.333224 + 0.39199 2.4607 -2.45278 -0.939377 0.0621389 0.337209 + 0.369437 2.37412 -2.55811 -0.970159 -0.0588267 0.235225 + 0.350354 2.27359 -2.679 -0.988654 -0.0142267 0.149537 + 0.329112 2.15478 -2.81047 -0.989325 0.145438 -0.00917028 + 0.323182 2.06213 -2.88232 -0.909419 -0.276355 0.310781 + 0.389873 2.47013 -2.4633 -0.952587 0.195578 0.233081 + 0.365904 2.38986 -2.57567 -0.989218 0.0809957 0.122012 + 0.346821 2.28933 -2.69655 -0.996135 0.0796166 0.0371043 + 0.338253 2.17287 -2.83091 -0.96365 0.236449 -0.12438 + 0.391312 2.48349 -2.47758 -0.926958 0.357549 0.113613 + 0.367343 2.40322 -2.58996 -0.970324 0.241592 -0.0101971 + 0.352711 2.30859 -2.71715 -0.966257 0.23593 -0.103361 + 0.395585 2.49407 -2.48847 -0.823625 0.565355 -0.0449006 + 0.374474 2.42088 -2.60813 -0.864413 0.465584 -0.189794 + 0.359842 2.32626 -2.73533 -0.881861 0.405688 -0.240289 + 0.354964 2.21767 -2.87772 -0.87871 0.389522 -0.275936 + 0.344143 2.19213 -2.8515 -0.967179 0.219972 -0.127186 + 0.4286 2.5258 -2.42033 -0.448167 0.85458 0.262371 + 0.405817 2.50282 -2.49657 -0.495462 0.826531 -0.26714 + 0.384707 2.42964 -2.61623 -0.523026 0.74259 -0.418334 + 0.374997 2.33978 -2.74793 -0.533984 0.69952 -0.474903 + 0.439661 2.52833 -2.42158 -0.060127 0.98191 0.179549 + 0.416879 2.50535 -2.49781 -0.149029 0.915236 -0.374344 + 0.403171 2.43386 -2.61831 -0.139572 0.840839 -0.522982 + 0.393462 2.34401 -2.75001 -0.150557 0.809282 -0.567799 + 0.451048 2.52741 -2.41903 0.0862815 0.974705 0.20617 + 0.443246 2.50551 -2.4944 0.2101 0.889036 -0.406784 + 0.431859 2.50643 -2.49695 0.0612857 0.912063 -0.405445 + 0.418151 2.43494 -2.61744 0.0754965 0.839603 -0.537929 + 0.467152 2.52407 -2.41326 0.203434 0.952476 0.226723 + 0.477694 2.49933 -2.48308 0.363639 0.848718 -0.383985 + 0.461591 2.50266 -2.48885 0.290495 0.869365 -0.399772 + 0.437159 2.43339 -2.6132 0.234317 0.814669 -0.53048 + 0.500131 2.49158 -2.47168 0.702651 0.676885 -0.219334 + 0.493119 2.4949 -2.47621 0.490724 0.802906 -0.338426 + 0.482385 2.42499 -2.59801 0.391382 0.770999 -0.502375 + 0.455504 2.43055 -2.60765 0.314064 0.794766 -0.519337 + 0.506193 2.48478 -2.46351 0.887714 0.459374 -0.0306559 + 0.509514 2.41502 -2.58358 0.737313 0.580051 -0.346281 + 0.49781 2.42055 -2.59114 0.517101 0.720842 -0.461512 + 0.486967 2.33492 -2.72754 0.398478 0.75318 -0.523389 + 0.460086 2.34048 -2.73717 0.317193 0.776348 -0.544676 + 0.519036 2.39674 -2.56253 0.993684 -0.0101844 0.111755 + 0.515576 2.40822 -2.57542 0.924382 0.345337 -0.16205 + 0.520503 2.32296 -2.7101 0.751029 0.560399 -0.349153 + 0.508799 2.32849 -2.71765 0.526003 0.703496 -0.477927 + 0.500465 2.22725 -2.86843 0.396569 0.765459 -0.50676 + 0.532252 2.30126 -2.68505 0.993247 -0.00113793 0.116011 + 0.528792 2.31274 -2.69794 0.933213 0.325278 -0.152669 + 0.536884 2.21329 -2.84844 0.761954 0.561361 -0.322955 + 0.522297 2.22082 -2.85854 0.540792 0.707033 -0.455685 + 0.523567 2.28586 -2.66954 0.841516 -0.361218 0.401712 + 0.548581 2.18674 -2.81815 0.988053 -0.00889096 0.153856 + 0.545174 2.20307 -2.83628 0.940753 0.317705 -0.118523 + 0.550205 2.14953 -2.93546 0.797245 0.555925 -0.235262 + 0.515912 2.15119 -2.78403 0.733084 -0.447089 0.512542 + 0.539896 2.17133 -2.80264 0.852708 -0.322727 0.410776 + 0.564027 2.1075 -2.90947 0.982603 0.031333 0.183055 + 0.56062 2.12383 -2.92759 0.95932 0.282243 0.00663171 + 0.4943 2.13491 -2.76878 0.695511 -0.475713 0.538481 + 0.529129 2.06217 -2.87472 0.728156 -0.392582 0.561843 + 0.553113 2.08232 -2.89334 0.840567 -0.272223 0.46834 + 0.579471 2.04438 -2.96402 0.957588 0.00358822 0.28812 + 0.474962 2.02784 -2.83569 0.482724 -0.523383 0.702173 + 0.502179 2.0455 -2.85321 0.693874 -0.417087 0.587007 + 0.540257 2.00477 -2.92293 0.710967 -0.324395 0.623934 + 0.568557 2.0192 -2.94789 0.820231 -0.21499 0.530094 + 0.442331 2.02299 -2.82772 0.0282829 -0.643783 0.764685 + 0.485006 1.97367 -2.87647 0.486894 -0.450797 0.748142 + 0.513307 1.9881 -2.90143 0.712533 -0.309086 0.629891 + 0.550425 1.95592 -2.95582 0.743826 -0.15307 0.65061 + 0.578725 1.97035 -2.98078 0.83414 -0.22848 0.502003 + 0.40649 2.02533 -2.83506 -0.314874 -0.633726 0.706573 + 0.413213 1.9792 -2.87175 -0.323645 -0.632704 0.703519 + 0.452376 1.96882 -2.8685 0.0186772 -0.625472 0.780023 + 0.374365 2.03609 -2.84565 -0.534402 -0.578503 0.616237 + 0.381088 1.98997 -2.88234 -0.538388 -0.578161 0.613082 + 0.383209 1.9579 -2.91144 -0.527345 -0.593125 0.608367 + 0.422761 1.94126 -2.90427 -0.30955 -0.658637 0.685839 + 0.461924 1.93088 -2.90102 -0.0944718 -0.667806 0.738316 + 0.353237 2.00827 -2.89763 -0.647689 -0.53793 0.539565 + 0.355358 1.9762 -2.92673 -0.649371 -0.530818 0.544563 + 0.352138 1.95325 -2.95268 -0.631407 -0.639341 0.438826 + 0.383672 1.93857 -2.92968 -0.518595 -0.686122 0.510193 + 0.423224 1.92193 -2.92251 -0.317513 -0.759529 0.567715 + 0.331183 2.05649 -2.87513 -0.706079 -0.494343 0.507028 + 0.335699 2.01663 -2.91063 -0.659364 -0.528935 0.534291 + 0.338162 1.98742 -2.93632 -0.653415 -0.528365 0.542106 + 0.327041 2.0141 -2.92366 -0.856837 -0.37716 0.35154 + 0.329504 1.9849 -2.94935 -0.831056 -0.389802 0.396738 + 0.334942 1.96447 -2.96227 -0.730143 -0.552643 0.401842 + 0.332421 1.93045 -3.03725 -0.718248 -0.64155 0.269319 + 0.362896 1.9105 -3.02897 -0.571065 -0.761074 0.307656 + 0.319993 2.06227 -2.90625 -0.998576 0.0508423 -0.0161631 + 0.323851 2.01424 -2.94759 -0.966206 -0.201075 0.161291 + 0.324871 1.97717 -2.97205 -0.932115 -0.277305 0.232944 + 0.33031 1.95675 -2.98498 -0.735857 -0.599684 0.314473 + 0.329134 2.08035 -2.92669 -0.959403 0.242602 -0.143843 + 0.318612 1.99359 -3.00267 -0.999245 0.0363079 -0.0137993 + 0.319632 1.95652 -3.02713 -0.968928 -0.224482 0.103861 + 0.321743 1.93023 -3.0794 -0.917648 -0.357241 0.174069 + 0.33575 2.09382 -2.95921 -0.96425 0.231084 -0.129701 + 0.325227 2.00706 -3.03519 -0.974958 0.191433 -0.113185 + 0.319477 1.95721 -3.08768 -0.992596 0.121279 -0.00670317 + 0.346571 2.11936 -2.98543 -0.896873 0.358838 -0.258561 + 0.336966 2.03794 -3.06353 -0.903769 0.351223 -0.244631 + 0.331216 1.98809 -3.11602 -0.900398 0.373777 -0.222653 + 0.31549 1.94111 -3.11592 -0.991997 0.111723 -0.0588171 + 0.370119 2.2312 -2.89033 -0.561163 0.658409 -0.501592 + 0.365615 2.14594 -2.99574 -0.599545 0.630378 -0.493122 + 0.356011 2.06451 -3.07384 -0.731845 0.533857 -0.423555 + 0.356933 2.02515 -3.1269 -0.755486 0.545516 -0.362839 + 0.332328 1.97298 -3.14368 -0.881472 0.379587 -0.280928 + 0.39432 2.23788 -2.89427 -0.174521 0.77983 -0.601172 + 0.389817 2.15261 -2.99969 -0.318464 0.754588 -0.57374 + 0.385427 2.10769 -3.0566 -0.480978 0.6926 -0.537555 + 0.386349 2.06833 -3.10966 -0.585664 0.671772 -0.453564 + 0.358045 2.01003 -3.15456 -0.72638 0.554229 -0.406451 + 0.414973 2.34596 -2.7492 0.0685461 0.815429 -0.574785 + 0.415832 2.23983 -2.89347 0.0498165 0.803606 -0.593073 + 0.41685 2.17391 -2.9878 -0.174051 0.838852 -0.515785 + 0.41246 2.12899 -3.04471 -0.394787 0.756238 -0.521774 + 0.422268 2.10312 -3.09402 -0.485888 0.743637 -0.459256 + 0.433981 2.34442 -2.74496 0.236487 0.794435 -0.559416 + 0.440204 2.23825 -2.88846 0.227816 0.793079 -0.564912 + 0.441222 2.17234 -2.98279 0.0827411 0.927144 -0.365455 + 0.442603 2.16591 -3.01543 -0.122953 0.890915 -0.43721 + 0.452411 2.14003 -3.06474 -0.129889 0.862102 -0.489805 + 0.466308 2.23432 -2.88067 0.308979 0.784427 -0.53778 + 0.474026 2.17723 -2.96733 0.186901 0.909097 -0.372305 + 0.475407 2.1708 -2.99997 0.145123 0.932714 -0.330127 + 0.491183 2.14407 -3.04 0.2971 0.83821 -0.457314 + 0.508183 2.17016 -2.95508 0.396365 0.860939 -0.31887 + 0.517952 2.16209 -2.98466 0.415619 0.867041 -0.274773 + 0.533728 2.13537 -3.02469 0.551186 0.717458 -0.425968 + 0.535618 2.15706 -2.94556 0.588208 0.759652 -0.277381 + 0.545387 2.14899 -2.97514 0.68128 0.705538 -0.195127 + 0.560378 2.11072 -3.00768 0.780776 0.558476 -0.280166 + 0.560011 2.0791 -3.06445 0.704083 0.595278 -0.387184 + 0.563837 2.11988 -2.97473 0.880972 0.46392 -0.0930985 + 0.578828 2.08162 -3.00726 0.888715 0.348437 -0.297956 + 0.58911 2.02254 -3.02881 0.981821 0.180999 0.0571482 + 0.586662 2.05445 -3.04743 0.916753 0.393011 -0.0714607 + 0.574252 2.09419 -2.96686 0.967748 0.246266 0.0530802 + 0.584399 2.04968 -2.99969 0.984454 0.156511 0.0797096 + 0.59468 1.9906 -3.02123 0.984021 0.0671062 0.16492 + 0.609711 1.92795 -3.07071 0.9743 0.0797177 0.210678 + 0.608203 1.94353 -3.09701 0.982589 0.178461 0.0516783 + 0.589618 1.99987 -2.99685 0.959156 -0.0248068 0.281788 + 0.590847 1.97369 -3.01281 0.935666 -0.10425 0.337136 + 0.605878 1.91104 -3.06229 0.94264 -0.00330866 0.333796 + 0.579954 1.94416 -2.99674 0.878459 -0.0938714 0.468506 + 0.599692 1.88911 -3.03888 0.926364 -0.0041942 0.376605 + 0.627189 1.83308 -3.12642 0.971195 -0.0175188 0.237643 + 0.637013 1.84059 -3.16702 0.993609 0.0480325 0.102144 + 0.635505 1.85617 -3.19331 0.945681 0.271976 -0.178088 + 0.563295 1.90724 -2.96866 0.79862 -0.0668863 0.598108 + 0.583033 1.85218 -3.0108 0.697145 -0.29103 0.655202 + 0.621003 1.81115 -3.103 0.979705 0.033747 0.197582 + 0.626607 1.77943 -3.14516 0.914192 -0.396809 0.0824398 + 0.630666 1.78308 -3.1656 0.897543 -0.42347 0.122837 + 0.527606 1.94638 -2.93211 0.717319 -0.119366 0.686443 + 0.540477 1.89771 -2.94495 0.664981 -0.153377 0.730941 + 0.499306 1.93196 -2.90716 0.678483 -0.214103 0.702724 + 0.49686 1.91642 -2.91029 0.20049 -0.56045 0.803554 + 0.538031 1.88218 -2.94808 0.386241 -0.607282 0.694281 + 0.517822 1.88427 -2.94465 -0.076252 -0.809571 0.582048 + 0.520296 1.84983 -3.0054 -0.128805 -0.891481 0.434363 + 0.540505 1.84774 -3.00883 -0.0731721 -0.843703 0.5318 + 0.567529 1.8399 -3.00697 0.059863 -0.39891 0.915034 + 0.615499 1.81139 -3.06392 0.900657 -0.0611883 0.430202 + 0.482886 1.89872 -2.93538 -0.190985 -0.81101 0.55298 + 0.489461 1.86738 -2.9882 -0.241588 -0.863665 0.442401 + 0.494123 1.80604 -3.11798 -0.344642 -0.862688 0.370123 + 0.535155 1.79806 -3.09115 -0.357319 -0.827483 0.433123 + 0.562179 1.79022 -3.08929 -0.236796 -0.861985 0.44823 + 0.4298 1.89059 -2.97533 -0.349195 -0.83856 0.418186 + 0.463288 1.82359 -3.10077 -0.342999 -0.86568 0.364622 + 0.441853 1.79071 -3.20774 -0.421799 -0.8487 0.319051 + 0.460883 1.78007 -3.21531 -0.294596 -0.916755 0.269766 + 0.489767 1.77749 -3.19558 -0.305673 -0.914792 0.264043 + 0.39443 1.89582 -3.00597 -0.50588 -0.795311 0.334016 + 0.427918 1.82882 -3.13141 -0.46362 -0.823519 0.326915 + 0.38913 1.81069 -3.24081 -0.522032 -0.800828 0.293527 + 0.422959 1.78291 -3.25752 -0.456297 -0.884217 0.0997665 + 0.441989 1.77227 -3.2651 -0.359205 -0.933256 0.00197763 + 0.375195 1.84879 -3.16449 -0.540362 -0.784873 0.303287 + 0.370069 1.81839 -3.25511 -0.711498 -0.68577 0.153266 + 0.403898 1.79062 -3.27181 -0.513455 -0.833937 -0.20227 + 0.428375 1.79264 -3.29734 -0.471256 -0.709989 -0.523292 + 0.449073 1.77638 -3.29447 -0.381119 -0.814187 -0.438004 + 0.34472 1.86875 -3.17277 -0.687105 -0.696643 0.206338 + 0.351296 1.8498 -3.23371 -0.90718 -0.414301 -0.073333 + 0.361202 1.8383 -3.26571 -0.969213 -0.231546 0.0837408 + 0.365609 1.82155 -3.26492 -0.826156 -0.558216 -0.0765548 + 0.390086 1.82357 -3.29044 -0.540085 -0.644964 -0.540675 + 0.317757 1.91413 -3.10763 -0.770193 -0.558397 0.308213 + 0.324332 1.89519 -3.16858 -0.943974 -0.319444 -0.0828771 + 0.351306 1.87401 -3.26118 -0.94511 -0.0207816 -0.326092 + 0.361212 1.86251 -3.29318 -0.892142 0.0802041 -0.444579 + 0.356741 1.84146 -3.27553 -0.99919 -0.0183303 0.0358235 + 0.320957 1.92094 -3.15613 -0.975908 0.0775768 -0.203923 + 0.347931 1.89976 -3.24873 -0.881531 0.20285 -0.426328 + 0.368483 1.91092 -3.27321 -0.711821 0.444313 -0.543964 + 0.376611 1.90614 -3.28625 -0.598068 0.486209 -0.637114 + 0.36934 1.85773 -3.30622 -0.807147 0.00516891 -0.590328 + 0.337794 1.95281 -3.18389 -0.860206 0.35781 -0.363342 + 0.358347 1.96397 -3.20837 -0.697123 0.514911 -0.498885 + 0.403222 2.00625 -3.21301 -0.48681 0.639599 -0.59492 + 0.420566 1.99496 -3.23476 -0.182199 0.653628 -0.734558 + 0.393954 1.89485 -3.30799 -0.404817 0.51302 -0.756924 + 0.40292 2.05232 -3.15919 -0.535239 0.676635 -0.505652 + 0.438839 2.08711 -3.14356 -0.24278 0.770125 -0.589886 + 0.449139 2.01008 -3.21974 0.0836736 0.6568 -0.749408 + 0.419538 1.88293 -3.32336 0.0169297 0.440701 -0.897494 + 0.478081 2.10392 -3.12291 0.145707 0.789356 -0.596395 + 0.48838 2.02688 -3.19909 0.254254 0.645091 -0.720564 + 0.488365 1.88292 -3.30753 0.289611 0.449635 -0.844958 + 0.448111 1.89804 -3.30834 0.176563 0.512221 -0.840509 + 0.516853 2.10795 -3.09817 0.495025 0.750287 -0.4382 + 0.532964 2.02054 -3.17856 0.572164 0.556786 -0.602178 + 0.576123 1.99168 -3.14484 0.703388 0.52433 -0.47992 + 0.532948 1.87658 -3.28699 0.413036 0.489111 -0.768226 + 0.525308 1.79846 -3.32774 0.30126 -0.271825 -0.913977 + 0.48922 1.79653 -3.33282 0.0262133 -0.390716 -0.920138 + 0.468522 1.81279 -3.33568 -0.0195938 -0.163252 -0.98639 + 0.605755 1.97545 -3.11563 0.922118 0.340633 -0.183487 + 0.58863 1.87838 -3.26006 0.557067 0.501212 -0.662165 + 0.58099 1.80027 -3.30081 0.535555 -0.220468 -0.815215 + 0.618263 1.86215 -3.23085 0.821617 0.357311 -0.444155 + 0.613937 1.79682 -3.27088 0.738998 -0.26562 -0.619134 + 0.554822 1.76938 -3.27247 0.177147 -0.900383 -0.397404 + 0.508423 1.77416 -3.29543 0.099608 -0.91513 -0.390661 + 0.472335 1.77223 -3.30051 -0.106219 -0.892306 -0.438757 + 0.631179 1.79085 -3.23334 0.853445 -0.369386 -0.367675 + 0.600238 1.76109 -3.21029 0.423074 -0.874949 -0.235527 + 0.587769 1.76593 -3.24254 0.35698 -0.865769 -0.350725 + 0.568169 1.7545 -3.21518 -0.03959 -0.991969 -0.120124 + 0.540533 1.76076 -3.22843 -0.135904 -0.989401 -0.0511395 + 0.640489 1.7906 -3.20621 0.94394 -0.289701 -0.158275 + 0.609548 1.76084 -3.18315 0.552403 -0.829464 -0.0827067 + 0.580638 1.74965 -3.18292 -0.0528003 -0.998467 0.0166281 + 0.558435 1.76325 -3.1555 -0.301912 -0.9153 0.2666 + 0.530799 1.76951 -3.16875 -0.317559 -0.917524 0.239387 + 0.605489 1.75718 -3.16271 0.458868 -0.884725 0.0818619 + 0.595239 1.75722 -3.15073 0.0709899 -0.954808 0.288621 + 0.573037 1.77082 -3.12331 -0.225378 -0.896046 0.382501 + 0.624255 1.77598 -3.12444 0.803737 -0.542336 0.244699 + 0.614004 1.77602 -3.11247 0.525441 -0.773302 0.354846 + 0.610853 1.77971 -3.09411 0.476413 -0.775423 0.414428 + 0.599995 1.7991 -3.06009 0.234117 -0.753126 0.614809 + 0.618651 1.8077 -3.08228 0.976578 -0.0944165 0.19334 + 0.494135 1.76554 -3.25139 -0.107306 -0.994213 0.00500804 + 0.465251 1.76812 -3.27113 -0.132568 -0.990637 -0.0326267 + 0.428268 1.82792 -3.3365 -0.176466 -0.290291 -0.940527 + 0.406468 1.84413 -3.33754 -0.302134 -0.164667 -0.938936 + 0.368286 1.83979 -3.29148 -0.655701 -0.550843 -0.516361 + 0.380884 1.85606 -3.32217 -0.653746 -0.0107272 -0.756638 + -0.557574 1.95467 -2.75219 0.90941 -0.0278976 0.414965 + -0.591195 1.94736 -2.68493 0.685719 -0.153302 0.711539 + -0.582635 1.9028 -2.69995 0.672119 -0.0751704 0.736618 + -0.576773 2.03351 -2.69323 0.87722 -0.209859 0.431792 + -0.603725 2.00268 -2.66108 0.651073 -0.313118 0.691419 + -0.65083 1.99416 -2.64194 0.100098 -0.505881 0.856776 + -0.6383 1.93884 -2.66579 0.086709 -0.348989 0.933107 + -0.6215 1.87741 -2.6876 0.125868 -0.266063 0.955703 + -0.549014 1.91012 -2.7672 0.94613 -0.00324097 0.323771 + -0.540029 1.95215 -2.79381 0.986923 0.106444 0.121046 + -0.559228 2.03099 -2.73484 0.984424 0.10089 0.14398 + -0.582231 2.12162 -2.61887 0.942312 -0.202078 0.266856 + -0.563942 1.87344 -2.71651 0.785614 -0.0785967 0.613705 + -0.560132 1.84076 -2.74265 0.891084 -0.336763 0.304238 + -0.545204 1.87744 -2.79335 0.959721 -0.112755 0.257337 + -0.536207 1.89321 -2.82428 0.998619 0.00428827 0.0523511 + -0.542424 1.9554 -2.81462 0.959283 0.232865 -0.159846 + -0.602807 1.84804 -2.70416 0.37489 -0.240105 0.895437 + -0.593886 1.81248 -2.71632 0.563545 -0.436019 0.701644 + -0.584623 1.81375 -2.72933 0.732246 -0.52654 0.431938 + -0.578252 1.79374 -2.78086 0.756421 -0.565337 0.328971 + -0.648715 1.7972 -2.70334 -0.0223477 -0.185469 0.982396 + -0.639794 1.76164 -2.7155 0.426045 -0.565836 0.705915 + -0.641574 1.74647 -2.75072 0.591306 -0.75103 0.293787 + -0.632311 1.74775 -2.76373 0.544872 -0.76406 0.345435 + -0.602743 1.76674 -2.76753 0.651479 -0.677267 0.341884 + -0.698685 1.85599 -2.71767 -0.362385 -0.180903 0.914304 + -0.731885 1.82353 -2.72971 -0.430119 -0.0689101 0.900138 + -0.681915 1.76474 -2.71539 -0.276162 -0.262936 0.924446 + -0.665852 1.74009 -2.72235 0.138845 -0.690283 0.710093 + -0.715485 1.91742 -2.69586 -0.347155 -0.423126 0.836927 + -0.777419 1.86789 -2.75917 -0.645701 -0.160296 0.746576 + -0.753448 1.83334 -2.74042 -0.543407 -0.0223325 0.839172 + -0.71418 1.75095 -2.73674 -0.490167 -0.397708 0.775606 + -0.698117 1.7263 -2.7437 -0.140991 -0.713704 0.686111 + -0.701491 2.01968 -2.63472 -0.302852 -0.519986 0.798683 + -0.745543 2.03331 -2.65112 -0.626794 -0.376569 0.682148 + -0.759537 1.93105 -2.71226 -0.604477 -0.351736 0.714765 + -0.644579 2.08591 -2.57095 0.0991367 -0.646994 0.756023 + -0.69524 2.11143 -2.56373 -0.36146 -0.588378 0.723296 + -0.727539 2.12957 -2.57257 -0.646524 -0.442853 0.621198 + -0.767489 2.04796 -2.67431 -0.822872 -0.221839 0.523134 + -0.785949 1.96684 -2.73182 -0.822726 -0.198455 0.53267 + -0.609183 2.09079 -2.58673 0.652594 -0.501539 0.567962 + -0.637776 2.19722 -2.46583 0.0609133 -0.678577 0.731999 + -0.678501 2.20954 -2.46987 -0.381566 -0.599171 0.703847 + -0.7108 2.22767 -2.47871 -0.678731 -0.43337 0.592887 + -0.749485 2.14421 -2.59576 -0.834976 -0.264766 0.482405 + -0.579138 2.22859 -2.5094 0.945477 -0.24025 0.219893 + -0.60238 2.20209 -2.48161 0.654067 -0.534983 0.53478 + -0.625194 2.30896 -2.36457 0.0832905 -0.657513 0.748825 + -0.66592 2.32128 -2.36861 -0.40161 -0.578409 0.710037 + -0.688934 2.3344 -2.37654 -0.691224 -0.413747 0.592472 + -0.576987 2.15463 -2.65067 0.994317 0.0949441 -0.0481533 + -0.573893 2.2616 -2.54119 0.996191 0.0534127 -0.0689259 + -0.572847 2.36653 -2.42594 0.996661 0.0662524 -0.0477294 + -0.576804 2.3416 -2.40205 0.947136 -0.219572 0.233928 + -0.600047 2.3151 -2.37426 0.659253 -0.51116 0.551454 + -0.570883 2.07068 -2.72723 0.939214 0.290662 -0.182735 + -0.592754 2.19486 -2.6868 0.910156 0.29793 -0.287845 + -0.587346 2.29606 -2.5723 0.914533 0.287886 -0.284168 + -0.5863 2.40099 -2.45705 0.913618 0.30641 -0.267237 + -0.55408 1.99509 -2.80701 0.929924 0.321134 -0.179204 + -0.58665 2.11092 -2.76336 0.89976 0.35383 -0.255412 + -0.616992 2.12624 -2.81177 0.640275 0.582698 -0.500511 + -0.612134 2.21989 -2.70614 0.683011 0.530756 -0.50179 + -0.606726 2.32109 -2.59164 0.683378 0.538591 -0.492863 + -0.554558 1.92862 -2.88943 0.907005 0.299255 -0.29629 + -0.562318 1.98001 -2.854 0.879112 0.354949 -0.318079 + -0.594889 2.09583 -2.81035 0.814339 0.455069 -0.360227 + -0.538602 1.89646 -2.8451 0.984215 0.0743721 -0.160589 + -0.545167 1.89124 -2.8865 0.976989 0.0944499 -0.191237 + -0.563849 1.89026 -2.95209 0.880184 0.282394 -0.381485 + -0.596077 1.95895 -2.95063 0.791354 0.433904 -0.430681 + -0.603837 2.01035 -2.9152 0.772773 0.443957 -0.453568 + -0.537723 1.8242 -2.8348 0.979183 -0.201119 -0.0274185 + -0.545798 1.83268 -2.864 0.965192 -0.126982 -0.228648 + -0.552363 1.82746 -2.9054 0.962773 -0.238395 -0.127421 + -0.554457 1.85289 -2.94916 0.960343 0.0362309 -0.276455 + -0.579126 1.88838 -2.98191 0.799307 0.300351 -0.520478 + -0.54672 1.80842 -2.80386 0.821386 -0.380042 0.425316 + -0.573284 1.75936 -2.86084 0.702268 -0.700419 0.127406 + -0.563727 1.77151 -2.88367 0.86613 -0.47246 -0.163098 + -0.571803 1.77999 -2.91288 0.890954 -0.373242 -0.258636 + -0.604816 1.74469 -2.83784 0.602023 -0.760474 0.243409 + -0.634648 1.70481 -2.92819 0.710141 -0.703781 -0.0198286 + -0.630071 1.71904 -2.9497 0.762702 -0.632085 -0.136945 + -0.620515 1.73118 -2.97252 0.726169 -0.685072 -0.0579214 + -0.626104 1.73156 -2.82037 0.59418 -0.774158 0.218241 + -0.655936 1.69168 -2.91072 0.531648 -0.826498 0.185071 + -0.67741 1.66562 -2.96674 0.566761 -0.812379 0.137197 + -0.667234 1.67281 -2.98919 0.737882 -0.66847 -0.093157 + -0.662657 1.68703 -3.01069 0.783699 -0.620388 -0.0305707 + -0.655672 1.71257 -2.81656 0.470155 -0.84746 0.246507 + -0.675411 1.68708 -2.88916 0.442259 -0.864809 0.237724 + -0.696884 1.66102 -2.94518 0.535717 -0.821316 0.196078 + -0.71439 1.63416 -3.0018 0.491678 -0.868581 -0.0618075 + -0.704214 1.64134 -3.02425 0.455574 -0.85629 -0.243353 + -0.691288 1.70242 -2.79813 0.336486 -0.896316 0.288783 + -0.711027 1.67694 -2.87073 0.396841 -0.86886 0.295971 + -0.720272 1.65889 -2.90357 0.518363 -0.781804 0.34653 + -0.712321 1.65017 -2.94006 0.613486 -0.759573 0.216065 + -0.667632 1.72493 -2.75756 0.432372 -0.860979 0.267899 + -0.68558 1.71445 -2.77081 0.232079 -0.886915 0.399401 + -0.743351 1.68614 -2.80264 0.0837186 -0.904358 0.418483 + -0.752385 1.67622 -2.81787 0.157499 -0.854919 0.494275 + -0.761631 1.65818 -2.8507 0.301615 -0.858643 0.414439 + -0.716065 1.71582 -2.75695 -0.0793514 -0.659711 0.747318 + -0.737643 1.69816 -2.77531 -0.0770784 -0.786541 0.612709 + -0.774219 1.69796 -2.79495 -0.531175 -0.531719 0.659642 + -0.783253 1.68804 -2.81018 -0.542748 -0.546194 0.638041 + -0.781818 1.65907 -2.84148 -0.312299 -0.809132 0.497771 + -0.735743 1.76076 -2.74744 -0.500528 -0.249321 0.829042 + -0.737034 1.73069 -2.75591 -0.343014 -0.309937 0.886724 + -0.758612 1.71303 -2.77428 -0.513006 -0.381767 0.768817 + -0.785062 1.75884 -2.78734 -0.785536 -0.170354 0.594906 + -0.768164 1.80399 -2.7582 -0.650416 -0.165031 0.741433 + -0.769455 1.77391 -2.76666 -0.644992 -0.187123 0.740926 + -0.792135 1.83855 -2.77695 -0.776888 -0.126564 0.616787 + -0.805177 1.78506 -2.81554 -0.85547 -0.142984 0.497721 + -0.802457 1.69142 -2.83538 -0.822484 -0.344203 0.452818 + -0.803831 1.90368 -2.77872 -0.843747 -0.114244 0.524443 + -0.82819 1.86377 -2.8299 -0.897452 -0.0935231 0.431085 + -0.841232 1.81029 -2.8685 -0.94383 -0.0815744 0.320205 + -0.822571 1.71764 -2.86359 -0.906432 -0.243485 0.345104 + -0.819798 1.9372 -2.81047 -0.911377 -0.0355782 0.410032 + -0.844157 1.89729 -2.86166 -0.978818 0.0351742 0.201689 + -0.849986 1.82833 -2.91261 -0.999344 -0.00411076 0.0359906 + -0.836928 1.73303 -2.90586 -0.958848 -0.221468 0.177658 + -0.801696 1.99261 -2.7507 -0.90194 -0.118134 0.415389 + -0.827717 1.9709 -2.82736 -0.974883 0.101854 0.198061 + -0.837639 1.93666 -2.89927 -0.983112 0.166995 -0.0748587 + -0.843468 1.8677 -2.95023 -0.957006 0.163848 -0.23936 + -0.845683 1.75107 -2.94998 -0.990866 -0.124945 -0.0507323 + -0.783236 2.07373 -2.69319 -0.907264 -0.114002 0.404816 + -0.809615 2.02631 -2.76759 -0.969992 0.0729852 0.231922 + -0.820122 2.0107 -2.8405 -0.963493 0.266953 0.0204414 + -0.830043 1.97645 -2.91241 -0.939583 0.28446 -0.190437 + -0.82513 1.87171 -2.99403 -0.880289 0.188788 -0.43526 + -0.762063 2.1617 -2.61279 -0.916748 -0.142246 0.373283 + -0.789946 2.09269 -2.7091 -0.973877 0.0676066 0.216778 + -0.786084 2.12532 -2.73327 -0.969274 0.245629 0.0131943 + -0.805753 2.05895 -2.79176 -0.964472 0.262928 0.0257243 + -0.801246 2.05817 -2.875 -0.883436 0.4276 -0.191569 + -0.73924 2.26522 -2.5111 -0.919386 -0.153615 0.362121 + -0.768773 2.18065 -2.6287 -0.980017 0.0452351 0.193705 + -0.766666 2.2036 -2.64979 -0.973657 0.227875 0.00802571 + -0.774881 2.15574 -2.76266 -0.888346 0.424037 -0.176162 + -0.786876 2.10642 -2.82626 -0.87499 0.449723 -0.179282 + -0.726663 2.24773 -2.49406 -0.854989 -0.255992 0.451067 + -0.714466 2.36952 -2.40378 -0.917555 -0.155807 0.36581 + -0.745029 2.28153 -2.5248 -0.981192 0.0368969 0.189472 + -0.742922 2.30448 -2.54589 -0.973479 0.22872 0.00503501 + -0.755463 2.23402 -2.67918 -0.889083 0.417508 -0.187666 + -0.704796 2.35446 -2.39188 -0.851793 -0.2565 0.456789 + -0.689272 2.47895 -2.29452 -0.88547 -0.0613379 0.460631 + -0.720255 2.38584 -2.41748 -0.98056 0.0410558 0.191874 + -0.718676 2.4032 -2.43332 -0.972384 0.232999 0.0134098 + -0.733201 2.33058 -2.57124 -0.889196 0.418412 -0.185099 + -0.666223 2.45027 -2.27264 -0.622171 -0.331825 0.709081 + -0.679602 2.46388 -2.28262 -0.78906 -0.196564 0.58202 + -0.654271 2.5352 -2.24488 -0.455756 0.357844 0.815006 + -0.692919 2.48925 -2.30308 -0.947203 0.126682 0.294547 + -0.69134 2.50661 -2.31892 -0.939614 0.322157 0.115499 + -0.643209 2.43715 -2.26472 -0.356077 -0.448493 0.819795 + -0.640891 2.52159 -2.2349 -0.260414 0.183163 0.947964 + -0.618804 2.5151 -2.23258 0.297855 0.0935705 0.950014 + -0.657918 2.5455 -2.25344 -0.535416 0.559567 0.632625 + -0.621121 2.43066 -2.2624 0.0927458 -0.506198 0.857416 + -0.595973 2.4368 -2.27209 0.659874 -0.359071 0.660026 + -0.60427 2.53197 -2.24989 0.686074 0.447887 0.573324 + -0.581439 2.45367 -2.28939 0.926129 -0.10229 0.363074 + -0.577483 2.4786 -2.31328 0.982456 0.175701 0.0625236 + -0.612769 2.55385 -2.26927 0.579746 0.771434 0.262266 + -0.585982 2.50048 -2.33267 0.907511 0.394451 -0.144336 + -0.600589 2.51935 -2.34722 0.685012 0.64206 -0.344264 + -0.626817 2.56116 -2.27229 0.302716 0.924591 0.231287 + -0.600907 2.41987 -2.4716 0.688193 0.554461 -0.467935 + -0.614638 2.52666 -2.35024 0.424 0.789962 -0.442926 + -0.632574 2.5333 -2.35231 0.268719 0.841433 -0.468808 + -0.640409 2.56396 -2.27254 0.0596477 0.97778 0.200968 + -0.623337 2.43172 -2.47629 0.407308 0.705702 -0.579729 + -0.641273 2.43835 -2.47837 0.25651 0.753121 -0.605815 + -0.646166 2.5361 -2.35256 0.0847524 0.876576 -0.473741 + -0.662438 2.53685 -2.3505 -0.14152 0.88569 -0.442181 + -0.651889 2.56221 -2.26917 -0.387354 0.864684 0.319811 + -0.629155 2.33295 -2.59633 0.403918 0.687019 -0.604033 + -0.652948 2.34175 -2.59907 0.251386 0.733471 -0.631526 + -0.662951 2.44292 -2.47871 0.0652099 0.787272 -0.613149 + -0.679223 2.44367 -2.47664 -0.159763 0.792598 -0.588442 + -0.673919 2.5351 -2.34713 -0.543304 0.784142 -0.299902 + -0.638004 2.23347 -2.71156 0.40011 0.677521 -0.617153 + -0.661796 2.24227 -2.7143 0.249581 0.721971 -0.645343 + -0.686989 2.24749 -2.71481 0.054629 0.756829 -0.651326 + -0.674625 2.34631 -2.59941 0.0535402 0.765986 -0.640624 + -0.642862 2.13981 -2.8172 0.385694 0.674261 -0.629772 + -0.66832 2.15902 -2.80953 0.242971 0.707254 -0.663895 + -0.693513 2.16424 -2.81003 0.132661 0.751706 -0.646017 + -0.72417 2.17647 -2.79772 -0.114863 0.784211 -0.60977 + -0.71035 2.24921 -2.71041 -0.172622 0.764017 -0.621675 + -0.62594 2.04075 -2.91662 0.397854 0.662912 -0.63424 + -0.639089 2.05134 -2.90518 0.132592 0.706807 -0.694869 + -0.664548 2.07055 -2.8975 0.317957 0.664696 -0.676079 + -0.70217 2.11799 -2.87233 0.243338 0.723504 -0.646009 + -0.732827 2.13022 -2.86002 -0.129863 0.763007 -0.633211 + -0.633091 1.98217 -2.98009 0.398518 0.645396 -0.65165 + -0.64624 1.99277 -2.96864 0.10887 0.734336 -0.669999 + -0.680429 2.01413 -2.95621 0.179709 0.67802 -0.712736 + -0.718051 2.06157 -2.93104 0.0714772 0.661859 -0.746213 + -0.611355 1.95708 -2.98045 0.686247 0.487926 -0.539438 + -0.637404 1.9462 -3.00835 0.390239 0.518796 -0.760634 + -0.665356 1.96838 -3.00144 0.167982 0.623371 -0.763669 + -0.699545 1.98975 -2.98901 0.0575373 0.688263 -0.723176 + -0.757578 1.995 -2.9828 -0.113592 0.618749 -0.777333 + -0.615668 1.92111 -3.00871 0.640755 0.393981 -0.658947 + -0.628382 1.87494 -3.04685 0.629016 0.354429 -0.691895 + -0.646766 1.88913 -3.04918 0.31548 0.484313 -0.816035 + -0.674717 1.9113 -3.04227 0.106511 0.542112 -0.833529 + -0.713644 1.91231 -3.04069 -0.0536119 0.528878 -0.847003 + -0.574841 1.84957 -2.99428 0.824434 0.14509 -0.547044 + -0.611383 1.8823 -3.02108 0.746249 0.255239 -0.614789 + -0.62545 1.80917 -3.06735 0.936792 0.0537605 -0.345732 + -0.628602 1.80548 -3.08571 0.778873 0.208287 -0.591586 + -0.646986 1.81966 -3.08803 0.348425 0.41703 -0.839456 + -0.55886 1.83319 -2.95833 0.945288 -0.186222 -0.267866 + -0.579244 1.82987 -3.00346 0.830313 0.0130896 -0.557144 + -0.608451 1.81652 -3.04159 0.812581 0.0343134 -0.581838 + -0.607899 1.78621 -3.03232 0.857571 -0.192391 -0.477029 + -0.626676 1.77042 -3.0709 0.961313 -0.107693 -0.253534 + -0.572194 1.79384 -2.94126 0.894994 -0.406265 -0.184213 + -0.578691 1.79957 -2.99419 0.878506 -0.321653 -0.353223 + -0.610714 1.75622 -3.01849 0.876862 -0.376808 -0.298544 + -0.629491 1.74042 -3.05707 0.936372 -0.288158 -0.200432 + -0.610323 1.74237 -2.99011 0.809745 -0.573259 -0.125249 + -0.636893 1.71667 -3.04421 0.852395 -0.520264 -0.0524109 + -0.641123 1.70815 -3.06481 0.771026 -0.547568 -0.325098 + -0.633721 1.73191 -3.07768 0.839998 -0.379005 -0.388276 + -0.629827 1.76674 -3.08925 0.889746 -0.119215 -0.440614 + -0.647085 1.70548 -3.02662 0.774087 -0.632234 0.0327205 + -0.653828 1.68914 -3.05635 0.674865 -0.680502 -0.285437 + -0.679261 1.69753 -3.08295 0.288505 -0.608058 -0.739615 + -0.666556 1.71654 -3.09141 0.342584 -0.569633 -0.747097 + -0.648761 1.73238 -3.09523 0.525446 -0.498374 -0.689587 + -0.6694 1.6707 -3.04041 0.632742 -0.757309 -0.16162 + -0.701236 1.67604 -3.07083 0.246896 -0.672 -0.698182 + -0.732385 1.72797 -3.10979 -0.219813 -0.267371 -0.938187 + -0.70419 1.74452 -3.12064 -0.0828964 -0.259953 -0.962057 + -0.686395 1.76035 -3.12446 0.0478373 -0.00262665 -0.998852 + -0.73605 1.64668 -3.05466 0.0382262 -0.790154 -0.611715 + -0.766549 1.68541 -3.08471 -0.385052 -0.464277 -0.79761 + -0.75436 1.70648 -3.09767 -0.287688 -0.315132 -0.904393 + -0.755636 1.79727 -3.09326 -0.47889 0.233674 -0.846204 + -0.754643 1.63341 -3.02767 -0.260362 -0.905142 -0.33605 + -0.785142 1.67213 -3.05771 -0.629832 -0.526763 -0.570818 + -0.80043 1.74889 -3.06583 -0.778712 -0.051527 -0.625262 + -0.788241 1.76996 -3.0788 -0.651549 0.0998846 -0.752002 + -0.729827 1.62331 -2.99668 0.236524 -0.960203 -0.148551 + -0.763973 1.63233 -2.97724 -0.466552 -0.881515 -0.0725268 + -0.803181 1.67052 -3.02929 -0.767807 -0.537371 -0.348862 + -0.818469 1.74728 -3.03741 -0.880974 -0.0545623 -0.470009 + -0.739157 1.62223 -2.94625 0.183848 -0.972274 0.144513 + -0.781466 1.64126 -2.93816 -0.550098 -0.835065 -0.0076684 + -0.820674 1.67945 -2.99021 -0.837698 -0.513628 -0.185605 + -0.836807 1.74327 -2.9936 -0.949727 -0.10786 -0.293914 + -0.747108 1.63095 -2.90975 0.264774 -0.925529 0.270724 + -0.767295 1.63184 -2.90053 -0.227959 -0.959113 0.167738 + -0.815193 1.67187 -2.90431 -0.815049 -0.566475 0.121658 + -0.82955 1.68726 -2.94658 -0.883619 -0.468202 0.0022076 + -0.801022 1.66245 -2.86669 -0.738001 -0.621782 0.262185 + -0.804283 1.89025 -3.02002 -0.731289 0.281872 -0.6211 + -0.815445 1.98414 -2.93955 -0.832256 0.392559 -0.391469 + -0.794598 2.00269 -2.96554 -0.595379 0.579553 -0.556455 + -0.771678 1.91756 -3.03448 -0.339907 0.451845 -0.824802 + -0.786647 2.06586 -2.90214 -0.595149 0.568378 -0.568105 + -0.755071 2.06926 -2.91379 -0.285953 0.661055 -0.693713 + -0.764403 2.12682 -2.84837 -0.553939 0.681562 -0.478148 + -0.752407 2.17614 -2.78478 -0.557694 0.691893 -0.458542 + -0.738588 2.24888 -2.69747 -0.570708 0.670019 -0.474729 + -0.716326 2.34544 -2.58953 -0.562853 0.677362 -0.473685 + -0.697987 2.34803 -2.59502 -0.175162 0.768317 -0.615635 + -0.697562 2.44109 -2.47116 -0.580256 0.688482 -0.43508 + -0.708955 2.4293 -2.45867 -0.894523 0.417737 -0.159138 + -0.685311 2.52331 -2.33464 -0.863245 0.503124 -0.0409141 + -0.727441 1.81382 -3.10411 -0.29665 0.377363 -0.877266 + -0.688514 1.81281 -3.10569 0.112141 0.401656 -0.908899 + -0.644867 1.76721 -3.1068 0.547638 -0.0186949 -0.836507 + 0.549014 1.91012 -2.7672 -0.984284 0.12032 0.12926 + 0.582635 1.9028 -2.69995 -0.669006 -0.0734864 0.739615 + 0.591195 1.94736 -2.68493 -0.698662 -0.123012 0.704797 + 0.563942 1.87344 -2.71651 -0.776688 -0.12469 0.617421 + 0.602807 1.84804 -2.70416 -0.311947 -0.272558 0.910165 + 0.6215 1.87741 -2.6876 -0.0889264 -0.375767 0.922438 + 0.6383 1.93884 -2.66579 -0.103685 -0.360115 0.927128 + 0.557574 1.95467 -2.75219 -0.913303 -0.0406652 0.405246 + 0.545204 1.87744 -2.79335 -0.96965 -0.0373939 0.241621 + 0.560132 1.84076 -2.74265 -0.841935 -0.30809 0.442974 + 0.603725 2.00268 -2.66108 -0.672136 -0.324644 0.665462 + 0.576773 2.03351 -2.69323 -0.918948 -0.116325 0.376832 + 0.559228 2.03099 -2.73484 -0.970389 0.146713 0.191889 + 0.540029 1.95215 -2.79381 -0.986709 0.0598402 0.151075 + 0.536207 1.89321 -2.82428 -0.998262 0.00129864 0.0589168 + 0.65083 1.99416 -2.64194 -0.131342 -0.47987 0.867453 + 0.609183 2.09079 -2.58673 -0.652399 -0.501865 0.567897 + 0.582231 2.12162 -2.61887 -0.947589 -0.207469 0.242964 + 0.576987 2.15463 -2.65067 -0.995985 0.0730764 -0.0517066 + 0.570883 2.07068 -2.72723 -0.983129 0.181351 0.0238725 + 0.701491 2.01968 -2.63472 0.305489 -0.515511 0.800578 + 0.69524 2.11143 -2.56373 0.354199 -0.584732 0.729816 + 0.644579 2.08591 -2.57095 -0.098464 -0.645845 0.757093 + 0.60238 2.20209 -2.48161 -0.653687 -0.534556 0.53567 + 0.715485 1.91742 -2.69586 0.341287 -0.418115 0.841845 + 0.759537 1.93105 -2.71226 0.616324 -0.306288 0.725488 + 0.745543 2.03331 -2.65112 0.6294 -0.378401 0.678726 + 0.727539 2.12957 -2.57257 0.650472 -0.43314 0.623921 + 0.678501 2.20954 -2.46987 0.379118 -0.603495 0.701472 + 0.698685 1.85599 -2.71767 0.237737 -0.204068 0.949651 + 0.648715 1.7972 -2.70334 0.0146635 -0.118088 0.992895 + 0.681915 1.76474 -2.71539 0.284735 -0.261406 0.922276 + 0.731885 1.82353 -2.72971 0.407925 -0.172844 0.896505 + 0.593886 1.81248 -2.71632 -0.636707 -0.339494 0.69235 + 0.639794 1.76164 -2.7155 -0.437006 -0.565265 0.699643 + 0.665852 1.74009 -2.72235 -0.13692 -0.695432 0.705427 + 0.71418 1.75095 -2.73674 0.426291 -0.320638 0.845853 + 0.584623 1.81375 -2.72933 -0.737073 -0.444665 0.508918 + 0.641574 1.74647 -2.75072 -0.598462 -0.737459 0.313046 + 0.667632 1.72493 -2.75756 -0.378946 -0.860555 0.34036 + 0.698117 1.7263 -2.7437 0.100129 -0.720514 0.686173 + 0.602743 1.76674 -2.76753 -0.641636 -0.673453 0.367103 + 0.632311 1.74775 -2.76373 -0.561822 -0.751114 0.346674 + 0.655672 1.71257 -2.81656 -0.47005 -0.85029 0.236769 + 0.68558 1.71445 -2.77081 -0.266447 -0.888021 0.374733 + 0.578252 1.79374 -2.78086 -0.701199 -0.630529 0.332796 + 0.604816 1.74469 -2.83784 -0.611485 -0.767432 0.192702 + 0.626104 1.73156 -2.82037 -0.58202 -0.783918 0.216158 + 0.54672 1.80842 -2.80386 -0.851015 -0.441567 0.284241 + 0.573284 1.75936 -2.86084 -0.673664 -0.729542 0.118091 + 0.630071 1.71904 -2.9497 -0.768607 -0.631468 -0.102424 + 0.634648 1.70481 -2.92819 -0.762872 -0.646528 -0.00526637 + 0.655936 1.69168 -2.91072 -0.534027 -0.828216 0.169922 + 0.537723 1.8242 -2.8348 -0.982672 -0.182463 -0.0325847 + 0.563727 1.77151 -2.88367 -0.866779 -0.471762 -0.161659 + 0.620515 1.73118 -2.97252 -0.703479 -0.70778 -0.0645406 + 0.647085 1.70548 -3.02662 -0.77346 -0.632644 0.0389986 + 0.662657 1.68703 -3.01069 -0.783826 -0.620231 -0.0305102 + 0.545798 1.83268 -2.864 -0.9674 -0.121431 -0.222243 + 0.571803 1.77999 -2.91288 -0.920957 -0.288673 -0.261737 + 0.610323 1.74237 -2.99011 -0.805913 -0.573224 -0.148047 + 0.636893 1.71667 -3.04421 -0.863633 -0.50186 -0.0476784 + 0.538602 1.89646 -2.8451 -0.989077 0.042865 -0.141026 + 0.545167 1.89124 -2.8865 -0.976249 0.0934415 -0.195463 + 0.552363 1.82746 -2.9054 -0.955981 -0.270213 -0.114393 + 0.572194 1.79384 -2.94126 -0.894126 -0.406437 -0.188011 + 0.542424 1.9554 -2.81462 -0.952158 0.243726 -0.18437 + 0.55408 1.99509 -2.80701 -0.930638 0.316891 -0.18301 + 0.562318 1.98001 -2.854 -0.88973 0.335911 -0.309103 + 0.554558 1.92862 -2.88943 -0.917363 0.300563 -0.260974 + 0.554457 1.85289 -2.94916 -0.961892 0.0318981 -0.271561 + 0.58665 2.11092 -2.76336 -0.934307 0.28971 -0.207698 + 0.594889 2.09583 -2.81035 -0.819504 0.428236 -0.380825 + 0.603837 2.01035 -2.9152 -0.781359 0.446163 -0.436367 + 0.596077 1.95895 -2.95063 -0.817915 0.401187 -0.412389 + 0.563849 1.89026 -2.95209 -0.880828 0.289969 -0.374245 + 0.592754 2.19486 -2.6868 -0.913407 0.300285 -0.274802 + 0.612134 2.21989 -2.70614 -0.678529 0.540584 -0.497361 + 0.616992 2.12624 -2.81177 -0.597247 0.583082 -0.550738 + 0.62594 2.04075 -2.91662 -0.393634 0.675562 -0.623432 + 0.611355 1.95708 -2.98045 -0.686796 0.451121 -0.569913 + 0.573893 2.2616 -2.54119 -0.996181 0.0533981 -0.0690851 + 0.587346 2.29606 -2.5723 -0.914569 0.287738 -0.284201 + 0.606726 2.32109 -2.59164 -0.683334 0.538572 -0.492945 + 0.638004 2.23347 -2.71156 -0.400008 0.677465 -0.61728 + 0.642862 2.13981 -2.8172 -0.390747 0.666457 -0.634943 + 0.579138 2.22859 -2.5094 -0.945474 -0.240265 0.219892 + 0.576804 2.3416 -2.40205 -0.947163 -0.219598 0.233795 + 0.572847 2.36653 -2.42594 -0.996664 0.066203 -0.0477373 + 0.5863 2.40099 -2.45705 -0.913605 0.306404 -0.267288 + 0.600907 2.41987 -2.4716 -0.688218 0.554409 -0.46796 + 0.600047 2.3151 -2.37426 -0.658353 -0.512858 0.550951 + 0.595973 2.4368 -2.27209 -0.659755 -0.35898 0.660195 + 0.581439 2.45367 -2.28939 -0.926143 -0.102081 0.363096 + 0.577483 2.4786 -2.31328 -0.98245 0.175707 0.0625927 + 0.637776 2.19722 -2.46583 -0.0590804 -0.68011 0.730725 + 0.625194 2.30896 -2.36457 -0.0842026 -0.658642 0.74773 + 0.621121 2.43066 -2.2624 -0.0928065 -0.506128 0.857451 + 0.618804 2.5151 -2.23258 -0.297719 0.0939191 0.950022 + 0.60427 2.53197 -2.24989 -0.682101 0.452262 0.574628 + 0.66592 2.32128 -2.36861 0.399618 -0.577219 0.712126 + 0.643209 2.43715 -2.26472 0.356109 -0.44842 0.819821 + 0.640891 2.52159 -2.2349 0.258997 0.189058 0.947195 + 0.612769 2.55385 -2.26927 -0.575663 0.772802 0.267189 + 0.585982 2.50048 -2.33267 -0.907487 0.394512 -0.144316 + 0.7108 2.22767 -2.47871 0.683211 -0.435451 0.586178 + 0.688934 2.3344 -2.37654 0.690992 -0.414727 0.592057 + 0.666223 2.45027 -2.27264 0.618234 -0.329916 0.713402 + 0.654271 2.5352 -2.24488 0.44901 0.363471 0.816259 + 0.726663 2.24773 -2.49406 0.85417 -0.260787 0.449872 + 0.704796 2.35446 -2.39188 0.853745 -0.257361 0.452642 + 0.679602 2.46388 -2.28262 0.78958 -0.191073 0.583142 + 0.689272 2.47895 -2.29452 0.885445 -0.0613291 0.46068 + 0.657918 2.5455 -2.25344 0.530299 0.561257 0.635432 + 0.749485 2.14421 -2.59576 0.833167 -0.263514 0.486202 + 0.762063 2.1617 -2.61279 0.916813 -0.141575 0.373377 + 0.73924 2.26522 -2.5111 0.919297 -0.153564 0.362369 + 0.714466 2.36952 -2.40378 0.91753 -0.156153 0.365726 + 0.692919 2.48925 -2.30308 0.947193 0.126733 0.294556 + 0.767489 2.04796 -2.67431 0.822472 -0.223583 0.523021 + 0.783236 2.07373 -2.69319 0.907812 -0.114247 0.403515 + 0.768773 2.18065 -2.6287 0.980203 0.0451205 0.192783 + 0.745029 2.28153 -2.5248 0.981188 0.0369572 0.189486 + 0.720255 2.38584 -2.41748 0.980578 0.0410447 0.191788 + 0.785949 1.96684 -2.73182 0.809728 -0.195122 0.553414 + 0.801696 1.99261 -2.7507 0.902906 -0.0985288 0.418394 + 0.789946 2.09269 -2.7091 0.973876 0.0675064 0.216816 + 0.786084 2.12532 -2.73327 0.969087 0.245989 0.0189807 + 0.766666 2.2036 -2.64979 0.973806 0.227241 0.00792497 + 0.777419 1.86789 -2.75917 0.7657 -0.163234 0.62214 + 0.803831 1.90368 -2.77872 0.839231 -0.163904 0.518485 + 0.819798 1.9372 -2.81047 0.941424 -0.0259053 0.33623 + 0.809615 2.02631 -2.76759 0.968965 0.072907 0.2362 + 0.805753 2.05895 -2.79176 0.964401 0.263179 0.0258432 + 0.753448 1.83334 -2.74042 0.612595 -0.195606 0.765811 + 0.792135 1.83855 -2.77695 0.787746 -0.0899971 0.609391 + 0.82819 1.86377 -2.8299 0.877799 -0.0868702 0.471087 + 0.844157 1.89729 -2.86166 0.971741 0.107343 0.21023 + 0.735743 1.76076 -2.74744 0.525423 -0.207513 0.825148 + 0.768164 1.80399 -2.7582 0.676137 -0.174936 0.715706 + 0.805177 1.78506 -2.81554 0.850898 -0.147504 0.504197 + 0.841232 1.81029 -2.8685 0.931471 -0.147372 0.33263 + 0.737034 1.73069 -2.75591 0.424886 -0.34653 0.836295 + 0.769455 1.77391 -2.76666 0.680699 -0.161788 0.714474 + 0.785062 1.75884 -2.78734 0.789779 -0.118538 0.601829 + 0.822571 1.71764 -2.86359 0.923573 -0.185293 0.335677 + 0.836928 1.73303 -2.90586 0.955423 -0.207571 0.209954 + 0.716065 1.71582 -2.75695 0.0695719 -0.699572 0.711167 + 0.737643 1.69816 -2.77531 0.140438 -0.800231 0.583016 + 0.758612 1.71303 -2.77428 0.504171 -0.442634 0.741543 + 0.774219 1.69796 -2.79495 0.499399 -0.534125 0.682137 + 0.802457 1.69142 -2.83538 0.819097 -0.342598 0.460116 + 0.691288 1.70242 -2.79813 -0.32445 -0.901512 0.28637 + 0.743351 1.68614 -2.80264 -0.0654722 -0.888995 0.453211 + 0.752385 1.67622 -2.81787 -0.157498 -0.854917 0.494279 + 0.783253 1.68804 -2.81018 0.550407 -0.533286 0.642385 + 0.711027 1.67694 -2.87073 -0.403975 -0.871298 0.278647 + 0.720272 1.65889 -2.90357 -0.547251 -0.764205 0.341331 + 0.761631 1.65818 -2.8507 -0.301597 -0.85865 0.414438 + 0.781818 1.65907 -2.84148 0.312298 -0.809132 0.49777 + 0.801022 1.66245 -2.86669 0.728979 -0.632091 0.262775 + 0.675411 1.68708 -2.88916 -0.408762 -0.884918 0.223233 + 0.696884 1.66102 -2.94518 -0.519993 -0.821012 0.235681 + 0.712321 1.65017 -2.94006 -0.632162 -0.737903 0.236368 + 0.747108 1.63095 -2.90975 -0.305723 -0.909531 0.28158 + 0.767295 1.63184 -2.90053 0.239336 -0.946983 0.214342 + 0.67741 1.66562 -2.96674 -0.582521 -0.80071 0.139761 + 0.71439 1.63416 -3.0018 -0.520992 -0.851917 -0.0529496 + 0.729827 1.62331 -2.99668 -0.225954 -0.969403 -0.0959314 + 0.739157 1.62223 -2.94625 -0.150652 -0.976093 0.156674 + 0.763973 1.63233 -2.97724 0.468076 -0.879589 -0.0850188 + 0.667234 1.67281 -2.98919 -0.738943 -0.668196 -0.0864664 + 0.704214 1.64134 -3.02425 -0.434164 -0.867534 -0.242663 + 0.73605 1.64668 -3.05466 -0.0408443 -0.788118 -0.614167 + 0.754643 1.63341 -3.02767 0.346965 -0.87892 -0.327283 + 0.6694 1.6707 -3.04041 -0.633511 -0.754661 -0.170739 + 0.701236 1.67604 -3.07083 -0.254173 -0.670281 -0.697223 + 0.75436 1.70648 -3.09767 0.287692 -0.323204 -0.901539 + 0.766549 1.68541 -3.08471 0.384265 -0.464444 -0.797893 + 0.785142 1.67213 -3.05771 0.634145 -0.548943 -0.544538 + 0.653828 1.68914 -3.05635 -0.659393 -0.693103 -0.291219 + 0.679261 1.69753 -3.08295 -0.293756 -0.630656 -0.718318 + 0.732385 1.72797 -3.10979 0.219546 -0.268859 -0.937824 + 0.788241 1.76996 -3.0788 0.658577 0.10265 -0.745479 + 0.80043 1.74889 -3.06583 0.779611 -0.0495978 -0.624297 + 0.641123 1.70815 -3.06481 -0.770568 -0.551637 -0.319251 + 0.666556 1.71654 -3.09141 -0.350205 -0.56881 -0.744185 + 0.70419 1.74452 -3.12064 0.0900232 -0.266866 -0.95952 + 0.727441 1.81382 -3.10411 0.255883 0.342015 -0.904184 + 0.755636 1.79727 -3.09326 0.492668 0.197896 -0.847417 + 0.629491 1.74042 -3.05707 -0.936978 -0.289343 -0.195839 + 0.633721 1.73191 -3.07768 -0.86158 -0.346916 -0.37058 + 0.648761 1.73238 -3.09523 -0.517603 -0.456057 -0.723946 + 0.686395 1.76035 -3.12446 -0.126139 -0.0451415 -0.990985 + 0.610714 1.75622 -3.01849 -0.892413 -0.349026 -0.285971 + 0.626676 1.77042 -3.0709 -0.958337 -0.117576 -0.260318 + 0.629827 1.76674 -3.08925 -0.878585 -0.0664066 -0.472946 + 0.644867 1.76721 -3.1068 -0.57333 0.0117399 -0.81924 + 0.607899 1.78621 -3.03232 -0.885647 -0.220565 -0.408632 + 0.608451 1.81652 -3.04159 -0.820529 0.0580835 -0.568646 + 0.62545 1.80917 -3.06735 -0.925097 0.0770647 -0.371829 + 0.628602 1.80548 -3.08571 -0.71194 0.141799 -0.687775 + 0.646986 1.81966 -3.08803 -0.368301 0.385008 -0.84624 + 0.578691 1.79957 -2.99419 -0.810243 -0.480429 -0.3357 + 0.579244 1.82987 -3.00346 -0.830311 0.0130861 -0.557146 + 0.611383 1.8823 -3.02108 -0.746254 0.255242 -0.614782 + 0.628382 1.87494 -3.04685 -0.628016 0.358793 -0.690553 + 0.646766 1.88913 -3.04918 -0.337487 0.493804 -0.801411 + 0.55886 1.83319 -2.95833 -0.945288 -0.186223 -0.267866 + 0.574841 1.84957 -2.99428 -0.822734 0.141529 -0.550526 + 0.579126 1.88838 -2.98191 -0.792407 0.308772 -0.526072 + 0.615668 1.92111 -3.00871 -0.635237 0.39336 -0.664637 + 0.633091 1.98217 -2.98009 -0.362506 0.645152 -0.672584 + 0.637404 1.9462 -3.00835 -0.390901 0.516721 -0.761706 + 0.674717 1.9113 -3.04227 -0.100272 0.552101 -0.827726 + 0.688514 1.81281 -3.10569 -0.129446 0.42285 -0.896907 + 0.64624 1.99277 -2.96864 -0.106922 0.737932 -0.666351 + 0.665356 1.96838 -3.00144 -0.156582 0.619203 -0.76946 + 0.713644 1.91231 -3.04069 0.0249015 0.554894 -0.831549 + 0.771678 1.91756 -3.03448 0.394279 0.500449 -0.770776 + 0.639089 2.05134 -2.90518 -0.176378 0.719694 -0.671514 + 0.680429 2.01413 -2.95621 -0.274626 0.678414 -0.681421 + 0.699545 1.98975 -2.98901 -0.0893502 0.632676 -0.769244 + 0.757578 1.995 -2.9828 0.176583 0.578985 -0.795986 + 0.804283 1.89025 -3.02002 0.724997 0.299677 -0.620139 + 0.66832 2.15902 -2.80953 -0.265073 0.720217 -0.641111 + 0.664548 2.07055 -2.8975 -0.321556 0.655354 -0.683456 + 0.718051 2.06157 -2.93104 -0.0644764 0.685328 -0.725374 + 0.755071 2.06926 -2.91379 0.232986 0.696261 -0.678925 + 0.794598 2.00269 -2.96554 0.567044 0.521304 -0.637733 + 0.661796 2.24227 -2.7143 -0.249679 0.721832 -0.64546 + 0.693513 2.16424 -2.81003 -0.115482 0.772102 -0.624918 + 0.70217 2.11799 -2.87233 -0.180041 0.710531 -0.680244 + 0.732827 2.13022 -2.86002 0.126589 0.755794 -0.642457 + 0.786647 2.06586 -2.90214 0.613934 0.613305 -0.496933 + 0.652948 2.34175 -2.59907 -0.251377 0.733465 -0.631537 + 0.674625 2.34631 -2.59941 -0.0533376 0.766246 -0.640329 + 0.686989 2.24749 -2.71481 -0.0489092 0.75303 -0.656166 + 0.71035 2.24921 -2.71041 0.169442 0.760574 -0.626751 + 0.72417 2.17647 -2.79772 0.11058 0.786538 -0.607561 + 0.629155 2.33295 -2.59633 -0.403955 0.686956 -0.604079 + 0.641273 2.43835 -2.47837 -0.256526 0.753098 -0.605836 + 0.662951 2.44292 -2.47871 -0.0646949 0.786927 -0.613645 + 0.697987 2.34803 -2.59502 0.174809 0.768606 -0.615374 + 0.623337 2.43172 -2.47629 -0.407274 0.705687 -0.57977 + 0.632574 2.5333 -2.35231 -0.268762 0.84145 -0.468751 + 0.646166 2.5361 -2.35256 -0.0847157 0.876607 -0.473691 + 0.662438 2.53685 -2.3505 0.141376 0.885775 -0.442058 + 0.679223 2.44367 -2.47664 0.159384 0.792206 -0.589072 + 0.600589 2.51935 -2.34722 -0.685051 0.642073 -0.344162 + 0.614638 2.52666 -2.35024 -0.42396 0.790017 -0.442867 + 0.626817 2.56116 -2.27229 -0.287078 0.912462 0.291545 + 0.640409 2.56396 -2.27254 -0.0666836 0.972072 0.225009 + 0.651889 2.56221 -2.26917 0.380173 0.865309 0.326663 + 0.673919 2.5351 -2.34713 0.543364 0.784178 -0.299702 + 0.697562 2.44109 -2.47116 0.581835 0.686478 -0.436137 + 0.716326 2.34544 -2.58953 0.56339 0.677932 -0.472228 + 0.738588 2.24888 -2.69747 0.571243 0.669361 -0.475013 + 0.69134 2.50661 -2.31892 0.93955 0.322188 0.11593 + 0.685311 2.52331 -2.33464 0.863028 0.503507 -0.040793 + 0.708955 2.4293 -2.45867 0.894238 0.417316 -0.16182 + 0.733201 2.33058 -2.57124 0.888569 0.419915 -0.184707 + 0.718676 2.4032 -2.43332 0.97246 0.232687 0.0133409 + 0.742922 2.30448 -2.54589 0.973484 0.228702 0.00487676 + 0.755463 2.23402 -2.67918 0.889004 0.417398 -0.188284 + 0.752407 2.17614 -2.78478 0.557229 0.691422 -0.459816 + 0.774881 2.15574 -2.76266 0.886149 0.428971 -0.17528 + 0.764403 2.12682 -2.84837 0.553754 0.681939 -0.477824 + 0.786876 2.10642 -2.82626 0.873886 0.449182 -0.185898 + 0.801246 2.05817 -2.875 0.881539 0.431406 -0.191777 + 0.815445 1.98414 -2.93955 0.865807 0.333068 -0.373422 + 0.82513 1.87171 -2.99403 0.87668 0.18386 -0.444553 + 0.820122 2.0107 -2.8405 0.963403 0.267659 0.0146105 + 0.830043 1.97645 -2.91241 0.942145 0.221111 -0.251937 + 0.837639 1.93666 -2.89927 0.981306 0.183179 -0.0590205 + 0.843468 1.8677 -2.95023 0.963375 0.135425 -0.231447 + 0.818469 1.74728 -3.03741 0.879163 -0.0480265 -0.474094 + 0.827717 1.9709 -2.82736 0.983188 0.0436214 0.177307 + 0.849986 1.82833 -2.91261 0.999864 -0.0122529 0.0110046 + 0.836807 1.74327 -2.9936 0.952236 -0.101471 -0.28801 + 0.845683 1.75107 -2.94998 0.99173 -0.115351 -0.0562623 + 0.82955 1.68726 -2.94658 0.888007 -0.45982 0.00279802 + 0.820674 1.67945 -2.99021 0.836294 -0.517847 -0.180129 + 0.803181 1.67052 -3.02929 0.726909 -0.581746 -0.364932 + 0.815193 1.67187 -2.90431 0.815013 -0.566879 0.120007 + 0.781466 1.64126 -2.93816 0.600422 -0.799324 -0.0239625 +} +TriangleList +{ + 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 88 + 92 93 94 + 95 96 94 + 97 98 99 + 100 101 102 + 103 104 105 + 3 106 107 + 108 109 110 + 111 112 113 + 114 115 116 + 117 118 119 + 120 21 121 + 122 123 124 + 125 126 127 + 128 129 130 + 131 132 133 + 134 135 136 + 137 138 139 + 140 97 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 30 + 246 247 248 + 249 250 251 + 252 253 254 + 255 256 257 + 258 259 260 + 259 258 261 + 261 262 259 + 262 261 263 + 262 263 264 + 264 265 262 + 265 264 266 + 267 268 269 + 269 268 270 + 270 271 269 + 269 271 272 + 273 269 272 + 274 269 273 + 270 268 275 + 275 276 270 + 277 270 276 + 270 277 271 + 271 277 278 + 278 279 271 + 271 279 272 + 280 275 268 + 225 275 280 + 268 281 280 + 282 278 277 + 283 278 282 + 278 283 279 + 279 283 284 + 279 284 272 + 282 285 283 + 286 283 285 + 283 286 284 + 285 282 287 + 287 288 285 + 285 288 289 + 289 290 285 + 285 290 286 + 287 282 291 + 291 292 287 + 293 291 282 + 294 289 288 + 288 295 294 + 296 294 295 + 295 297 296 + 298 296 297 + 299 296 298 + 296 299 300 + 301 295 288 + 295 301 302 + 302 297 295 + 297 302 303 + 303 304 297 + 297 304 298 + 288 287 301 + 305 301 287 + 302 301 305 + 305 306 302 + 302 306 307 + 307 303 302 + 308 303 307 + 304 303 308 + 309 305 287 + 310 305 309 + 305 310 306 + 306 310 311 + 311 307 306 + 307 311 312 + 312 313 307 + 307 313 308 + 314 309 287 + 315 309 314 + 309 315 316 + 309 316 310 + 311 310 316 + 317 311 316 + 312 311 317 + 287 318 314 + 319 314 318 + 320 314 319 + 314 320 315 + 315 320 321 + 321 322 315 + 316 315 322 + 322 323 316 + 316 323 317 + 318 324 319 + 325 319 324 + 326 319 325 + 319 326 320 + 320 326 327 + 327 321 320 + 328 321 327 + 321 328 329 + 329 322 321 + 324 330 325 + 331 325 330 + 332 325 331 + 325 332 326 + 327 326 332 + 332 333 327 + 334 327 333 + 327 334 328 + 330 335 331 + 336 331 335 + 337 331 336 + 331 337 332 + 332 337 338 + 338 333 332 + 339 333 338 + 336 340 337 + 338 337 340 + 340 336 226 + 333 341 334 + 342 334 341 + 328 334 342 + 342 343 328 + 328 343 344 + 344 329 328 + 345 329 344 + 322 329 345 + 345 323 322 + 346 343 342 + 343 346 347 + 347 344 343 + 344 347 348 + 348 349 344 + 344 349 345 + 342 350 346 + 346 350 351 + 351 352 346 + 346 352 353 + 353 347 346 + 348 347 353 + 350 342 354 + 354 355 350 + 350 355 356 + 356 351 350 + 357 351 356 + 352 351 357 + 358 354 342 + 359 354 358 + 355 354 359 + 359 360 355 + 355 360 361 + 361 356 355 + 356 361 362 + 356 362 357 + 358 363 359 + 359 363 364 + 364 365 359 + 360 359 365 + 365 366 360 + 361 360 366 + 366 367 361 + 362 361 367 + 367 368 362 + 362 368 369 + 370 364 363 + 363 371 370 + 340 370 371 + 371 363 372 + 373 374 375 + 374 373 376 + 376 377 374 + 374 377 378 + 373 379 376 + 376 379 380 + 381 376 380 + 379 373 382 + 383 379 382 + 380 379 384 + 385 377 376 + 386 387 388 + 388 387 389 + 389 390 388 + 388 390 391 + 389 387 392 + 392 393 389 + 393 394 389 + 389 394 390 + 390 394 395 + 395 396 390 + 390 396 397 + 387 398 392 + 399 392 398 + 399 393 392 + 393 399 400 + 400 401 393 + 394 393 401 + 402 394 401 + 398 387 403 + 404 398 403 + 405 398 404 + 398 405 399 + 399 405 406 + 406 400 399 + 400 406 407 + 408 400 407 + 400 408 401 + 408 409 401 + 401 409 402 + 409 410 402 + 404 411 405 + 405 411 412 + 412 406 405 + 411 404 413 + 404 414 413 + 414 415 413 + 413 415 416 + 416 417 413 + 413 417 418 + 419 414 404 + 415 414 419 + 419 420 415 + 421 419 404 + 422 421 404 + 423 417 416 + 416 424 423 + 423 424 425 + 425 426 423 + 425 427 426 + 427 425 428 + 428 429 427 + 424 416 430 + 430 431 424 + 425 424 431 + 431 432 425 + 432 428 425 + 433 430 416 + 433 434 430 + 434 435 430 + 431 430 435 + 431 435 436 + 436 437 431 + 438 437 436 + 433 439 434 + 434 439 440 + 440 441 434 + 434 441 442 + 435 434 442 + 439 433 443 + 443 444 439 + 439 444 445 + 440 439 445 + 445 446 440 + 447 440 446 + 440 447 441 + 441 447 448 + 448 449 441 + 441 449 442 + 444 419 445 + 419 450 445 + 445 450 451 + 445 451 452 + 452 446 445 + 453 446 452 + 446 453 447 + 448 447 453 + 454 419 444 + 452 451 455 + 451 450 456 + 456 388 451 + 451 388 457 + 428 432 458 + 459 428 458 + 428 459 460 + 460 429 428 + 429 460 461 + 460 462 461 + 462 460 463 + 460 459 464 + 464 463 460 + 465 463 464 + 464 466 465 + 464 459 467 + 416 415 468 + 416 468 469 + 408 407 470 + 471 470 407 + 470 471 472 + 472 473 470 + 474 470 473 + 475 474 473 + 474 475 476 + 407 477 471 + 471 477 478 + 471 478 479 + 472 471 479 + 477 407 480 + 478 481 479 + 395 482 396 + 396 482 380 + 380 483 396 + 484 485 486 + 485 484 487 + 487 488 485 + 489 488 487 + 489 487 490 + 490 224 489 + 276 224 490 + 224 276 275 + 275 491 224 + 490 487 492 + 277 490 492 + 276 490 277 + 493 494 495 + 496 493 495 + 497 496 495 + 498 496 497 + 496 498 499 + 499 500 496 + 501 496 500 + 502 497 495 + 497 502 503 + 498 497 503 + 499 498 503 + 503 504 499 + 505 499 504 + 500 499 505 + 500 505 506 + 506 507 500 + 500 507 508 + 509 503 502 + 503 509 510 + 510 504 503 + 504 510 511 + 504 511 505 + 502 512 509 + 509 512 466 + 512 513 466 + 514 515 364 + 364 515 516 + 516 365 364 + 366 365 516 + 516 517 366 + 366 517 518 + 518 367 366 + 516 515 519 + 519 520 516 + 517 516 520 + 520 521 517 + 518 517 521 + 521 522 518 + 523 518 522 + 367 518 523 + 523 368 367 + 524 519 515 + 519 524 525 + 525 526 519 + 519 526 527 + 527 520 519 + 521 520 527 + 515 528 524 + 529 524 528 + 525 524 529 + 529 530 525 + 531 525 530 + 526 525 531 + 531 532 526 + 526 532 533 + 527 526 533 + 528 534 529 + 535 529 534 + 529 535 536 + 536 530 529 + 530 536 537 + 537 538 530 + 530 538 531 + 539 531 538 + 532 531 539 + 534 540 535 + 540 534 340 + 340 534 541 + 541 179 340 + 542 543 544 + 544 545 542 + 542 545 546 + 546 547 542 + 548 542 547 + 549 542 548 + 548 308 549 + 545 544 550 + 550 551 545 + 546 545 551 + 551 552 546 + 553 546 552 + 553 547 546 + 550 544 554 + 554 555 550 + 556 550 555 + 550 556 557 + 557 551 550 + 551 557 558 + 558 552 551 + 559 554 544 + 559 560 554 + 554 560 561 + 561 555 554 + 555 561 562 + 562 563 555 + 555 563 556 + 544 564 559 + 308 548 304 + 304 548 565 + 565 298 304 + 566 298 565 + 298 566 299 + 567 299 566 + 568 299 567 + 547 565 548 + 569 565 547 + 565 569 566 + 566 569 570 + 570 571 566 + 566 571 567 + 572 567 571 + 573 567 572 + 567 573 568 + 568 573 574 + 547 553 569 + 570 569 553 + 575 570 553 + 576 570 575 + 570 576 577 + 577 571 570 + 571 577 572 + 553 578 575 + 579 575 578 + 575 579 580 + 575 580 576 + 581 576 580 + 577 576 581 + 581 582 577 + 572 577 582 + 552 578 553 + 558 578 552 + 578 558 579 + 579 558 583 + 584 579 583 + 585 579 584 + 579 585 580 + 580 585 586 + 586 587 580 + 580 587 581 + 558 557 583 + 588 583 557 + 583 588 589 + 583 589 590 + 590 591 583 + 583 591 584 + 557 556 588 + 592 588 556 + 589 588 592 + 592 593 589 + 589 593 594 + 590 589 594 + 594 595 590 + 596 590 595 + 591 590 596 + 556 563 592 + 597 592 563 + 592 597 593 + 593 597 598 + 598 594 593 + 594 598 599 + 594 599 600 + 600 595 594 + 563 562 597 + 598 597 562 + 562 601 598 + 595 600 96 + 96 602 595 + 595 602 596 + 603 596 602 + 591 596 603 + 603 584 591 + 604 584 603 + 584 604 585 + 602 96 140 + 140 605 602 + 602 605 603 + 606 603 605 + 603 606 604 + 604 606 607 + 607 608 604 + 585 604 608 + 608 586 585 + 605 140 609 + 609 610 605 + 605 610 606 + 607 606 610 + 610 611 607 + 612 607 611 + 607 612 613 + 613 608 607 + 609 140 614 + 614 615 609 + 616 609 615 + 610 609 616 + 616 611 610 + 611 616 617 + 617 618 611 + 611 618 612 + 614 140 619 + 620 621 622 + 621 620 623 + 623 228 621 + 228 623 624 + 625 623 620 + 626 627 228 + 228 627 536 + 536 535 228 + 228 535 628 + 536 627 629 + 629 537 536 + 630 537 629 + 538 537 630 + 630 631 538 + 538 631 539 + 632 629 627 + 629 632 633 + 627 624 632 + 632 624 634 + 634 635 632 + 633 632 635 + 636 634 624 + 637 634 636 + 634 637 638 + 638 635 634 + 635 638 639 + 639 640 635 + 635 640 633 + 624 623 636 + 641 636 623 + 642 636 641 + 636 642 637 + 637 642 643 + 643 644 637 + 637 644 645 + 645 638 637 + 639 638 645 + 646 641 623 + 647 641 646 + 647 648 641 + 641 648 642 + 643 642 648 + 649 643 648 + 650 643 649 + 644 643 650 + 274 646 623 + 273 646 274 + 651 646 273 + 646 651 647 + 651 652 647 + 652 653 647 + 648 647 653 + 653 654 648 + 648 654 655 + 655 649 648 + 651 273 656 + 656 652 651 + 657 652 656 + 652 657 658 + 658 659 652 + 656 273 272 + 660 656 272 + 657 656 660 + 660 661 657 + 657 661 658 + 661 662 658 + 654 658 662 + 658 654 653 + 663 660 272 + 664 660 663 + 664 661 660 + 662 661 664 + 665 662 664 + 662 665 666 + 662 666 654 + 667 663 272 + 668 663 667 + 668 669 663 + 663 669 664 + 664 669 665 + 669 670 665 + 671 665 670 + 272 672 667 + 673 667 672 + 673 674 667 + 667 674 668 + 668 674 675 + 675 676 668 + 676 677 668 + 678 672 272 + 678 679 672 + 672 679 673 + 272 680 678 + 681 678 680 + 678 681 682 + 679 678 682 + 673 679 682 + 574 680 272 + 680 574 573 + 573 683 680 + 680 683 684 + 684 681 680 + 685 681 684 + 682 681 685 + 574 272 284 + 284 686 574 + 574 686 687 + 687 688 574 + 665 689 666 + 572 683 573 + 683 572 690 + 690 684 683 + 684 690 691 + 691 692 684 + 684 692 685 + 693 685 692 + 682 685 693 + 693 694 682 + 682 694 673 + 582 690 572 + 691 690 582 + 582 695 691 + 691 695 696 + 696 697 691 + 692 691 697 + 697 698 692 + 692 698 693 + 695 582 581 + 581 699 695 + 695 699 700 + 700 696 695 + 701 696 700 + 696 701 702 + 702 697 696 + 698 697 702 + 699 581 587 + 587 703 699 + 700 699 703 + 703 704 700 + 705 700 704 + 700 705 701 + 701 705 706 + 706 707 701 + 702 701 707 + 708 703 587 + 703 708 709 + 709 704 703 + 704 709 710 + 710 711 704 + 704 711 705 + 706 705 711 + 587 586 708 + 708 586 608 + 608 613 708 + 708 613 712 + 712 709 708 + 710 709 712 + 712 713 710 + 710 713 714 + 714 715 710 + 711 710 715 + 716 712 613 + 713 712 716 + 716 717 713 + 713 717 718 + 718 714 713 + 719 714 718 + 714 719 720 + 720 715 714 + 613 612 716 + 716 612 618 + 618 721 716 + 717 716 721 + 721 722 717 + 717 722 723 + 723 718 717 + 719 718 723 + 723 724 719 + 720 719 724 + 725 721 618 + 721 725 726 + 726 722 721 + 722 726 727 + 727 728 722 + 722 728 723 + 618 617 725 + 725 617 729 + 729 730 725 + 726 725 730 + 730 731 726 + 727 726 731 + 731 732 727 + 733 727 732 + 728 727 733 + 734 729 617 + 735 729 734 + 729 735 736 + 736 730 729 + 730 736 737 + 737 731 730 + 731 737 738 + 738 732 731 + 617 616 734 + 615 734 616 + 739 734 615 + 734 739 735 + 735 739 740 + 740 741 735 + 735 741 742 + 742 736 735 + 737 736 742 + 615 743 739 + 740 739 743 + 743 744 740 + 745 740 744 + 741 740 745 + 745 746 741 + 741 746 747 + 747 742 741 + 743 615 614 + 614 748 743 + 743 748 749 + 749 744 743 + 744 749 750 + 750 751 744 + 744 751 745 + 748 614 752 + 752 753 748 + 749 748 753 + 753 754 749 + 750 749 754 + 95 752 614 + 755 752 95 + 753 752 755 + 755 756 753 + 753 756 757 + 757 754 753 + 754 757 758 + 754 758 750 + 95 759 755 + 755 759 760 + 761 755 760 + 756 755 761 + 761 762 756 + 757 756 762 + 763 757 762 + 758 757 763 + 764 759 95 + 761 765 762 + 762 765 766 + 766 767 762 + 762 767 763 + 768 763 767 + 763 768 769 + 763 769 758 + 750 758 769 + 770 750 769 + 751 750 770 + 771 766 765 + 772 766 771 + 767 766 772 + 767 772 768 + 773 768 772 + 769 768 773 + 773 774 769 + 769 774 775 + 775 770 769 + 776 771 765 + 777 677 676 + 676 778 777 + 779 777 778 + 778 676 780 + 778 780 781 + 781 782 778 + 778 782 783 + 783 784 778 + 784 779 778 + 780 676 675 + 675 785 780 + 780 785 786 + 781 780 786 + 787 781 786 + 788 781 787 + 788 782 781 + 782 788 789 + 789 783 782 + 675 790 785 + 785 790 791 + 791 792 785 + 785 792 786 + 790 675 674 + 674 673 790 + 791 790 673 + 694 791 673 + 793 791 694 + 791 793 792 + 792 793 794 + 794 795 792 + 792 795 786 + 694 796 793 + 794 793 796 + 796 797 794 + 798 794 797 + 794 798 795 + 795 798 799 + 799 800 795 + 795 800 786 + 796 694 693 + 693 801 796 + 796 801 802 + 802 797 796 + 803 797 802 + 797 803 798 + 799 798 803 + 803 804 799 + 805 799 804 + 799 805 800 + 801 693 698 + 698 806 801 + 802 801 806 + 807 802 806 + 802 807 804 + 803 802 804 + 702 806 698 + 806 702 808 + 808 809 806 + 806 809 807 + 810 807 809 + 807 810 811 + 811 804 807 + 804 811 805 + 812 805 811 + 800 805 812 + 812 786 800 + 707 808 702 + 813 808 707 + 809 808 813 + 813 814 809 + 809 814 810 + 815 810 814 + 811 810 815 + 815 816 811 + 811 816 812 + 817 812 816 + 812 817 786 + 707 818 813 + 813 818 819 + 819 820 813 + 814 813 820 + 820 821 814 + 814 821 815 + 818 707 706 + 818 706 822 + 822 819 818 + 823 819 822 + 819 823 824 + 824 820 819 + 821 820 824 + 824 825 821 + 821 825 826 + 826 815 821 + 822 706 711 + 711 827 822 + 828 822 827 + 822 828 823 + 823 828 829 + 829 830 823 + 824 823 830 + 830 831 824 + 825 824 831 + 715 827 711 + 827 715 720 + 720 832 827 + 827 832 828 + 829 828 832 + 832 833 829 + 834 829 833 + 829 834 835 + 835 830 829 + 830 835 836 + 836 831 830 + 832 720 837 + 837 833 832 + 833 837 838 + 838 839 833 + 833 839 834 + 840 834 839 + 835 834 840 + 840 841 835 + 836 835 841 + 724 837 720 + 838 837 724 + 724 842 838 + 838 842 843 + 843 844 838 + 839 838 844 + 844 845 839 + 839 845 840 + 842 724 723 + 723 846 842 + 842 846 847 + 847 843 842 + 848 843 847 + 843 848 849 + 849 844 843 + 845 844 849 + 846 723 728 + 728 850 846 + 846 850 851 + 851 847 846 + 848 847 851 + 851 852 848 + 849 848 852 + 852 853 849 + 854 849 853 + 849 854 845 + 733 850 728 + 850 733 855 + 855 856 850 + 850 856 851 + 857 851 856 + 851 857 858 + 858 852 851 + 852 858 859 + 859 853 852 + 855 733 860 + 860 861 855 + 862 855 861 + 856 855 862 + 862 863 856 + 856 863 857 + 732 860 733 + 864 860 732 + 860 864 865 + 865 861 860 + 861 865 866 + 866 867 861 + 861 867 862 + 868 862 867 + 863 862 868 + 732 738 864 + 864 738 869 + 869 870 864 + 864 870 871 + 871 865 864 + 866 865 871 + 869 738 737 + 737 872 869 + 872 873 869 + 874 869 873 + 870 869 874 + 742 872 737 + 872 742 747 + 747 875 872 + 872 875 876 + 876 873 872 + 873 876 877 + 873 877 874 + 875 747 878 + 878 879 875 + 876 875 879 + 879 880 876 + 877 876 880 + 880 881 877 + 874 877 881 + 882 878 747 + 883 878 882 + 878 883 884 + 884 879 878 + 879 884 885 + 885 880 879 + 880 885 886 + 886 881 880 + 747 746 882 + 887 882 746 + 888 882 887 + 882 888 883 + 889 883 888 + 884 883 889 + 889 890 884 + 884 890 891 + 891 885 884 + 886 885 891 + 746 745 887 + 892 887 745 + 893 887 892 + 887 893 888 + 888 893 894 + 894 895 888 + 888 895 889 + 896 889 895 + 890 889 896 + 745 751 892 + 770 892 751 + 897 892 770 + 892 897 893 + 894 893 897 + 897 898 894 + 899 894 898 + 895 894 899 + 899 900 895 + 895 900 896 + 770 901 897 + 897 901 902 + 902 898 897 + 898 902 903 + 903 904 898 + 898 904 899 + 901 770 775 + 775 905 901 + 901 905 906 + 902 901 906 + 906 907 902 + 903 902 907 + 907 908 903 + 909 903 908 + 904 903 909 + 910 905 775 + 905 910 911 + 911 906 905 + 911 912 906 + 906 912 913 + 913 907 906 + 907 913 914 + 914 908 907 + 910 775 774 + 774 915 910 + 911 910 915 + 915 916 911 + 912 911 916 + 916 917 912 + 912 917 918 + 918 913 912 + 914 913 918 + 915 774 773 + 773 919 915 + 915 919 920 + 920 916 915 + 916 920 921 + 921 917 916 + 917 921 922 + 922 918 917 + 919 773 923 + 923 924 919 + 919 924 925 + 925 920 919 + 921 920 925 + 925 926 921 + 921 926 927 + 922 921 927 + 772 923 773 + 771 923 772 + 923 771 928 + 928 924 923 + 924 928 929 + 929 925 924 + 925 929 926 + 926 929 930 + 930 927 926 + 928 771 931 + 931 932 928 + 928 932 930 + 930 929 928 + 933 932 931 + 932 933 934 + 934 935 932 + 934 933 936 + 936 937 934 + 938 934 937 + 939 934 938 + 940 936 933 + 941 936 940 + 936 941 942 + 942 937 936 + 937 942 943 + 943 944 937 + 937 944 938 + 933 945 940 + 946 940 945 + 947 940 946 + 940 947 941 + 941 947 948 + 948 949 941 + 942 941 949 + 950 945 933 + 932 951 930 + 952 930 951 + 930 952 927 + 927 952 953 + 953 954 927 + 927 954 922 + 951 955 952 + 952 955 956 + 956 953 952 + 957 953 956 + 954 953 957 + 957 958 954 + 954 958 959 + 959 922 954 + 918 922 959 + 960 956 955 + 956 960 961 + 961 962 956 + 956 962 957 + 957 962 963 + 963 964 957 + 958 957 964 + 955 938 960 + 960 938 944 + 944 965 960 + 961 960 965 + 965 966 961 + 967 961 966 + 962 961 967 + 938 955 968 + 629 969 630 + 970 630 969 + 631 630 970 + 970 971 631 + 539 631 971 + 972 539 971 + 532 539 972 + 969 973 970 + 974 970 973 + 971 970 974 + 974 975 971 + 971 975 976 + 976 977 971 + 971 977 972 + 978 972 977 + 979 973 969 + 973 979 980 + 980 981 973 + 973 981 974 + 974 981 982 + 982 983 974 + 975 974 983 + 969 633 979 + 984 979 633 + 980 979 984 + 984 985 980 + 980 985 986 + 986 987 980 + 981 980 987 + 987 982 981 + 633 969 988 + 633 640 984 + 989 984 640 + 984 989 990 + 990 985 984 + 985 990 991 + 991 986 985 + 640 639 989 + 989 639 992 + 992 993 989 + 990 989 993 + 993 994 990 + 991 990 994 + 994 995 991 + 996 991 995 + 986 991 996 + 645 992 639 + 992 645 997 + 997 998 992 + 992 998 999 + 999 993 992 + 994 993 999 + 999 1000 994 + 994 1000 1001 + 1001 995 994 + 997 645 644 + 644 1002 997 + 997 1002 1003 + 1003 1004 997 + 998 997 1004 + 1004 1005 998 + 998 1005 1006 + 1006 999 998 + 1000 999 1006 + 650 1002 644 + 1002 650 1007 + 1007 1003 1002 + 1003 1007 1008 + 1003 1008 1009 + 1009 1004 1003 + 1005 1004 1009 + 1009 1010 1005 + 1005 1010 1011 + 1011 1006 1005 + 1007 650 1012 + 1012 1013 1007 + 1008 1007 1013 + 1013 234 1008 + 649 1012 650 + 1012 649 1014 + 1012 1014 1015 + 1015 1013 1012 + 234 1013 1015 + 1015 779 234 + 234 779 784 + 784 1016 234 + 234 1016 1009 + 1014 649 655 + 655 671 1014 + 1015 1014 1017 + 977 1018 978 + 1018 977 976 + 976 1019 1018 + 1018 1019 1020 + 1020 1021 1018 + 1022 1018 1021 + 1019 976 1023 + 1023 1024 1019 + 1019 1024 1025 + 1026 1025 1024 + 1027 1025 1026 + 1023 976 975 + 975 1028 1023 + 1028 1029 1023 + 1030 1023 1029 + 1023 1030 1024 + 1024 1030 1026 + 983 1028 975 + 1028 983 1031 + 1031 1032 1028 + 1028 1032 1033 + 1033 1029 1028 + 1029 1033 1034 + 1029 1034 1030 + 1026 1030 1034 + 1031 983 982 + 982 1035 1031 + 1031 1035 1036 + 1036 1037 1031 + 1032 1031 1037 + 1037 1038 1032 + 1033 1032 1038 + 1038 1039 1033 + 1034 1033 1039 + 1040 1035 982 + 1035 1040 1041 + 1041 1036 1035 + 1036 1041 1042 + 1042 1043 1036 + 1036 1043 1044 + 1044 1037 1036 + 1038 1037 1044 + 982 987 1040 + 1040 987 986 + 986 1045 1040 + 1040 1045 1046 + 1046 1041 1040 + 1042 1041 1046 + 1046 1047 1042 + 1042 1047 1048 + 1048 1049 1042 + 1043 1042 1049 + 996 1045 986 + 1045 996 1050 + 1050 1046 1045 + 1046 1050 1051 + 1051 1047 1046 + 1047 1051 1052 + 1052 1048 1047 + 1053 1050 996 + 1051 1050 1053 + 1053 1054 1051 + 1051 1054 1055 + 1055 1052 1051 + 1056 1052 1055 + 1048 1052 1056 + 996 1057 1053 + 1058 1053 1057 + 1058 1054 1053 + 1054 1058 1059 + 1059 1055 1054 + 1060 1055 1059 + 1055 1060 1056 + 995 1057 996 + 1057 995 1001 + 1001 1061 1057 + 1057 1061 1058 + 1059 1058 1061 + 1061 1062 1059 + 1062 1063 1059 + 1064 1059 1063 + 1059 1064 1060 + 1061 1001 1065 + 1065 1062 1061 + 1066 1062 1065 + 1062 1066 1067 + 1067 1063 1062 + 1063 1067 1068 + 1063 1068 1064 + 1069 1064 1068 + 1060 1064 1069 + 1065 1001 1000 + 1000 1070 1065 + 1071 1065 1070 + 1065 1071 1066 + 1066 1071 1072 + 1072 1073 1066 + 1067 1066 1073 + 1073 1074 1067 + 1068 1067 1074 + 1006 1070 1000 + 1070 1006 1011 + 1011 1075 1070 + 1070 1075 1071 + 1071 1075 1076 + 1076 1072 1071 + 1077 1072 1076 + 1073 1072 1077 + 1077 1078 1073 + 1073 1078 1079 + 1079 1074 1073 + 1075 1011 1080 + 1080 1081 1075 + 1075 1081 1076 + 1081 1082 1076 + 1083 1076 1082 + 1083 1084 1076 + 1076 1084 1077 + 1085 1080 1011 + 1086 1080 1085 + 1081 1080 1086 + 1081 1086 1087 + 1087 1082 1081 + 1088 1082 1087 + 1082 1088 1083 + 1011 1010 1085 + 1089 1085 1010 + 1085 1089 1090 + 1090 1091 1085 + 1085 1091 1086 + 1086 1091 1092 + 1092 1093 1086 + 1093 1087 1086 + 1088 1087 1093 + 1010 1009 1089 + 1094 1089 1009 + 1090 1089 1094 + 1094 1095 1090 + 1090 1095 1096 + 1096 1097 1090 + 1097 1098 1090 + 1091 1090 1098 + 1098 1092 1091 + 1099 1094 1009 + 1100 1094 1099 + 1100 1095 1094 + 1095 1100 1101 + 1101 1096 1095 + 1101 1102 1096 + 1096 1102 1103 + 1103 1097 1096 + 1016 1099 1009 + 1104 1099 1016 + 1099 1104 1105 + 1099 1105 1100 + 1100 1105 1106 + 1016 1107 1104 + 1108 1104 1107 + 1105 1104 1108 + 1108 103 1105 + 1105 103 1109 + 784 1107 1016 + 1107 784 783 + 783 1110 1107 + 1107 1110 1108 + 783 789 1110 + 1110 789 1111 + 1111 1112 1110 + 1111 789 788 + 788 1113 1111 + 1114 1111 1113 + 1113 1115 1114 + 1116 1114 1115 + 1112 1114 1116 + 1116 1117 1112 + 787 1113 788 + 1115 1113 787 + 1115 787 1118 + 1118 1119 1115 + 1115 1119 1116 + 1120 1116 1119 + 1117 1116 1120 + 1117 1120 1121 + 1121 1108 1117 + 1108 1121 1122 + 1122 103 1108 + 1118 787 786 + 1123 1118 786 + 1124 1118 1123 + 1124 1119 1118 + 1119 1124 1120 + 1121 1120 1124 + 1124 1125 1121 + 1122 1121 1125 + 1125 1126 1122 + 1127 1122 1126 + 103 1122 1127 + 786 1128 1123 + 1128 1129 1123 + 1126 1123 1129 + 1126 1125 1123 + 1123 1125 1124 + 1130 1128 786 + 1130 1131 1128 + 1128 1131 1132 + 1132 1129 1128 + 1132 1133 1129 + 1129 1133 1126 + 786 817 1130 + 1134 1130 817 + 1131 1130 1134 + 1134 1135 1131 + 1132 1131 1135 + 1135 1136 1132 + 1136 1137 1132 + 1137 1138 1132 + 1133 1132 1138 + 817 1139 1134 + 1140 1134 1139 + 1135 1134 1140 + 1135 1140 1141 + 1141 1136 1135 + 816 1139 817 + 1139 816 815 + 815 826 1139 + 1139 826 1140 + 1140 826 825 + 825 1142 1140 + 1142 1143 1140 + 831 1142 825 + 1142 831 836 + 836 1144 1142 + 1142 1144 1145 + 1145 1146 1142 + 1144 836 1147 + 1147 1148 1144 + 1144 1148 1149 + 1149 1145 1144 + 841 1147 836 + 1150 1147 841 + 1148 1147 1150 + 1150 1151 1148 + 1148 1151 1152 + 1152 1149 1148 + 841 1153 1150 + 1150 1153 1154 + 1154 1155 1150 + 1151 1150 1155 + 1155 1156 1151 + 1151 1156 1157 + 1157 1152 1151 + 1153 841 840 + 840 1158 1153 + 1153 1158 1159 + 1159 1154 1153 + 1160 1154 1159 + 1154 1160 1161 + 1161 1155 1154 + 1156 1155 1161 + 1158 840 845 + 845 854 1158 + 1159 1158 854 + 854 1162 1159 + 1163 1159 1162 + 1159 1163 1160 + 1160 1163 1164 + 1164 1165 1160 + 1161 1160 1165 + 853 1162 854 + 1162 853 859 + 859 1166 1162 + 1162 1166 1163 + 1164 1163 1166 + 1166 1167 1164 + 1168 1164 1167 + 1164 1168 1169 + 1169 1165 1164 + 1166 859 1170 + 1170 1167 1166 + 1167 1170 1171 + 1171 1172 1167 + 1167 1172 1168 + 1168 1172 1173 + 1173 1174 1168 + 1169 1168 1174 + 1175 1170 859 + 1171 1170 1175 + 1175 1176 1171 + 1171 1176 1177 + 1177 1178 1171 + 1172 1171 1178 + 1178 1179 1172 + 1172 1179 1173 + 859 858 1175 + 1180 1175 858 + 1176 1175 1180 + 1176 1180 1181 + 1181 1177 1176 + 1182 1177 1181 + 1177 1182 1183 + 1183 1178 1177 + 1179 1178 1183 + 858 857 1180 + 1181 1180 857 + 1184 1181 857 + 1182 1181 1184 + 1184 1185 1182 + 1183 1182 1185 + 1185 1186 1183 + 1187 1183 1186 + 1183 1187 1179 + 1179 1187 1188 + 1188 1173 1179 + 1189 1184 857 + 1190 1184 1189 + 1190 1185 1184 + 1185 1190 1191 + 1191 1186 1185 + 1192 1186 1191 + 1186 1192 1187 + 1187 1192 1193 + 1188 1187 1193 + 857 863 1189 + 863 1194 1189 + 1195 1189 1194 + 1189 1195 1196 + 1196 1197 1189 + 1189 1197 1190 + 1191 1190 1197 + 868 1194 863 + 1194 868 1198 + 1198 1199 1194 + 1194 1199 1195 + 1200 1195 1199 + 1196 1195 1200 + 1200 1201 1196 + 1202 1196 1201 + 1197 1196 1202 + 1198 868 1203 + 1203 1204 1198 + 1205 1198 1204 + 1199 1198 1205 + 1205 1206 1199 + 1199 1206 1200 + 867 1203 868 + 1207 1203 867 + 1203 1207 1208 + 1208 1204 1203 + 1204 1208 1209 + 1209 1210 1204 + 1204 1210 1205 + 1211 1205 1210 + 1206 1205 1211 + 867 866 1207 + 1212 1207 866 + 1208 1207 1212 + 1212 1213 1208 + 1208 1213 1214 + 1214 1209 1208 + 1215 1209 1214 + 1210 1209 1215 + 1215 1216 1210 + 1210 1216 1211 + 866 1217 1212 + 1217 1218 1212 + 1218 1219 1212 + 1219 1220 1212 + 1221 1212 1220 + 1213 1212 1221 + 871 1217 866 + 1217 871 1222 + 1222 1223 1217 + 1217 1223 1224 + 1224 1218 1217 + 1218 1224 1225 + 1218 1225 1226 + 1226 1219 1218 + 1222 871 1227 + 1227 1228 1222 + 1222 1228 1229 + 1229 1230 1222 + 1223 1222 1230 + 1230 1231 1223 + 1224 1223 1231 + 870 1227 871 + 1232 1227 870 + 1227 1232 1228 + 1228 1232 1233 + 1233 1229 1228 + 1234 1229 1233 + 1229 1234 1235 + 1235 1230 1229 + 1230 1235 1236 + 1236 1231 1230 + 870 1237 1232 + 1232 1237 1238 + 1238 1233 1232 + 1239 1233 1238 + 1233 1239 1234 + 874 1237 870 + 1237 874 1240 + 1240 1238 1237 + 1241 1238 1240 + 1238 1241 1239 + 1242 1239 1241 + 1234 1239 1242 + 1242 1243 1234 + 1234 1243 1244 + 1244 1235 1234 + 1236 1235 1244 + 881 1240 874 + 1245 1240 881 + 1240 1245 1241 + 1241 1245 1246 + 1246 1247 1241 + 1241 1247 1242 + 1248 1242 1247 + 1243 1242 1248 + 881 886 1245 + 1246 1245 886 + 886 1249 1246 + 1250 1246 1249 + 1247 1246 1250 + 1250 1251 1247 + 1247 1251 1248 + 891 1249 886 + 1249 891 1252 + 1252 1253 1249 + 1249 1253 1250 + 1250 1253 1254 + 1254 1255 1250 + 1251 1250 1255 + 1255 1256 1251 + 1248 1251 1256 + 1252 891 1257 + 1257 1258 1252 + 1252 1258 1259 + 1259 1260 1252 + 1253 1252 1260 + 1260 1254 1253 + 890 1257 891 + 1261 1257 890 + 1257 1261 1258 + 1258 1261 1262 + 1262 1259 1258 + 1263 1259 1262 + 1259 1263 1264 + 1264 1260 1259 + 1260 1264 1265 + 1265 1254 1260 + 890 1266 1261 + 1261 1266 1267 + 1267 1262 1261 + 1268 1262 1267 + 1262 1268 1263 + 896 1266 890 + 1266 896 1269 + 1269 1267 1266 + 1270 1267 1269 + 1267 1270 1268 + 1271 1268 1270 + 1263 1268 1271 + 1271 1272 1263 + 1263 1272 1273 + 1273 1264 1263 + 1265 1264 1273 + 1274 1269 896 + 1275 1269 1274 + 1269 1275 1270 + 1270 1275 1276 + 1276 1277 1270 + 1270 1277 1271 + 896 900 1274 + 1278 1274 900 + 1279 1274 1278 + 1274 1279 1275 + 1276 1275 1279 + 1279 1280 1276 + 1281 1276 1280 + 1277 1276 1281 + 900 899 1278 + 1282 1278 899 + 1283 1278 1282 + 1278 1283 1279 + 1279 1283 1284 + 1284 1280 1279 + 1280 1284 1285 + 1280 1285 1281 + 899 904 1282 + 909 1282 904 + 1286 1282 909 + 1282 1286 1283 + 1283 1286 1287 + 1284 1283 1287 + 1287 1288 1284 + 1285 1284 1288 + 1288 1289 1285 + 1285 1289 1290 + 1281 1285 1290 + 909 1291 1286 + 1286 1291 1292 + 1292 1287 1286 + 1293 1287 1292 + 1287 1293 1294 + 1294 1288 1287 + 1294 1289 1288 + 1289 1294 1295 + 1295 1290 1289 + 1291 909 1296 + 1296 1297 1291 + 1292 1291 1297 + 1297 1298 1292 + 1298 1299 1292 + 1293 1292 1299 + 908 1296 909 + 1300 1296 908 + 1296 1300 1301 + 908 914 1300 + 1302 1300 914 + 1303 1300 1302 + 1302 132 1303 + 1304 132 1302 + 132 1304 1305 + 1305 1306 132 + 914 1307 1302 + 1308 1302 1307 + 1302 1308 1304 + 1304 1308 1309 + 1309 1310 1304 + 1304 1310 1311 + 918 1307 914 + 959 1307 918 + 1307 959 1308 + 1308 959 958 + 958 1309 1308 + 964 1309 958 + 1309 964 1310 + 1310 964 963 + 963 1312 1310 + 1310 1312 1313 + 963 1314 1312 + 1312 1314 1315 + 1315 1316 1312 + 1312 1316 1311 + 1317 1311 1316 + 1314 963 1318 + 1318 1319 1314 + 1314 1319 1320 + 1320 1315 1314 + 1321 1315 1320 + 1316 1315 1321 + 1321 1322 1316 + 1316 1322 1317 + 962 1318 963 + 967 1318 962 + 1318 967 1323 + 1323 1319 1318 + 1319 1323 1324 + 1324 1320 1319 + 1320 1324 1325 + 1325 1326 1320 + 1320 1326 1321 + 1327 1321 1326 + 1322 1321 1327 + 1323 967 1328 + 1328 1329 1323 + 1324 1323 1329 + 1329 1330 1324 + 1325 1324 1330 + 1330 1331 1325 + 1332 1325 1331 + 1326 1325 1332 + 966 1328 967 + 1333 1328 966 + 1328 1333 1334 + 1334 1329 1328 + 1329 1334 1335 + 1335 1330 1329 + 1330 1335 1336 + 1336 1331 1330 + 966 1337 1333 + 1333 1337 1338 + 1338 1339 1333 + 1334 1333 1339 + 1339 1340 1334 + 1335 1334 1340 + 1340 1341 1335 + 1336 1335 1341 + 1337 966 965 + 965 1342 1337 + 1337 1342 1343 + 1343 1338 1337 + 1343 1344 1338 + 1338 1344 1345 + 1345 1339 1338 + 1340 1339 1345 + 1342 965 944 + 944 943 1342 + 1342 943 1346 + 1346 1343 1342 + 1344 1343 1346 + 1346 1347 1344 + 1345 1344 1347 + 1348 1345 1347 + 1349 1345 1348 + 1345 1349 1340 + 1340 1349 1350 + 1350 1341 1340 + 1351 1346 943 + 1347 1346 1351 + 1351 1352 1347 + 1347 1352 1353 + 1353 1354 1347 + 1347 1354 1348 + 943 942 1351 + 949 1351 942 + 1352 1351 949 + 949 1355 1352 + 1355 1353 1352 + 1356 1353 1355 + 1353 1356 1357 + 1357 1354 1353 + 1354 1357 1358 + 1358 1348 1354 + 1359 1355 949 + 1355 1359 1356 + 1356 1359 1360 + 1360 1361 1356 + 1357 1356 1361 + 1361 1362 1357 + 1358 1357 1362 + 949 948 1359 + 1359 948 1363 + 1363 1364 1359 + 1359 1364 1360 + 1363 948 947 + 947 1365 1363 + 1366 1363 1365 + 1364 1363 1366 + 1366 1367 1364 + 1364 1367 1368 + 1368 1360 1364 + 946 1365 947 + 1369 1365 946 + 1365 1369 1366 + 1366 1369 1370 + 1370 1371 1366 + 1367 1366 1371 + 1371 1372 1367 + 1368 1367 1372 + 946 1373 1369 + 1369 1373 1374 + 1374 1370 1369 + 1374 1375 1370 + 1370 1375 1376 + 1376 1371 1370 + 1372 1371 1376 + 1373 946 1377 + 1377 1378 1373 + 1373 1378 1379 + 1379 1380 1373 + 1380 1374 1373 + 945 1377 946 + 1381 1377 945 + 1378 1377 1381 + 1381 1382 1378 + 1378 1382 1383 + 1383 1379 1378 + 945 1384 1381 + 1381 1384 1385 + 1385 1386 1381 + 1382 1381 1386 + 1386 1387 1382 + 1382 1387 1388 + 1388 1389 1382 + 1389 1390 1382 + 1391 1386 1385 + 1386 1391 1392 + 1392 1387 1386 + 1387 1392 1393 + 1393 1388 1387 + 1388 1393 1394 + 1388 1394 1395 + 1395 1389 1388 + 1385 1396 1391 + 1391 1396 760 + 760 1397 1391 + 1392 1391 1397 + 1397 1398 1392 + 1392 1398 1399 + 1393 1392 1399 + 1399 1400 1393 + 1394 1393 1400 + 1400 1401 1394 + 1395 1394 1401 + 1402 1397 760 + 1398 1397 1402 + 1402 1403 1398 + 1398 1403 1404 + 1404 1405 1398 + 1398 1405 1399 + 760 1406 1402 + 1406 1407 1402 + 1403 1402 1407 + 1407 1408 1403 + 1403 1408 1409 + 1406 760 1410 + 1410 1411 1406 + 1406 1411 1412 + 1412 1407 1406 + 1407 1412 1408 + 1408 1412 1413 + 1413 1414 1408 + 1408 1414 1415 + 1410 760 1416 + 1416 1417 1410 + 1410 1417 1418 + 1418 1419 1410 + 1411 1410 1419 + 1419 1413 1411 + 1411 1413 1412 + 759 1416 760 + 111 1416 759 + 1417 1416 111 + 111 1420 1417 + 1417 1420 1421 + 1421 1418 1417 + 759 1422 111 + 1404 1403 1423 + 1424 1383 1382 + 1127 1425 103 + 1426 1101 1100 + 20 1421 1420 + 1420 111 20 + 20 111 1427 + 1375 1374 1428 + 1428 1429 1375 + 1375 1429 1430 + 1430 1376 1375 + 1431 1376 1430 + 1376 1431 1372 + 1432 1429 1428 + 1429 1432 1433 + 1433 1434 1429 + 1429 1434 1430 + 1432 1428 1435 + 1435 1436 1432 + 1432 1436 1437 + 1433 1432 1437 + 1438 1433 1437 + 1439 1433 1438 + 1433 1439 1434 + 1434 1439 1440 + 1440 1430 1434 + 1436 1435 1441 + 1436 1441 1390 + 1390 1442 1436 + 1436 1442 1437 + 1442 1390 1443 + 1442 1443 1444 + 1444 1445 1442 + 1442 1445 1437 + 1443 1390 1389 + 1389 1446 1443 + 1444 1443 1446 + 1447 1444 1446 + 1448 1444 1447 + 1445 1444 1448 + 1445 1448 1449 + 1449 1450 1445 + 1445 1450 1437 + 1446 1389 1395 + 1446 1395 1451 + 1451 1452 1446 + 1446 1452 1453 + 1453 1447 1446 + 1454 1447 1453 + 1455 1447 1454 + 1447 1455 1448 + 1448 1455 1456 + 1451 1395 1401 + 1457 1451 1401 + 1458 1451 1457 + 1458 1452 1451 + 1452 1458 1459 + 1459 1453 1452 + 1460 1453 1459 + 1453 1460 1454 + 1461 1457 1401 + 1462 1457 1461 + 1463 1457 1462 + 1457 1463 1458 + 1458 1463 1464 + 1464 1465 1458 + 1465 1459 1458 + 1466 1461 1401 + 1467 1461 1466 + 1468 1461 1467 + 1461 1468 1462 + 1469 1462 1468 + 1463 1462 1469 + 1469 1464 1463 + 1401 1470 1466 + 1471 1466 1470 + 1466 1471 1472 + 1466 1472 1467 + 1473 1467 1472 + 1468 1467 1473 + 1473 1474 1468 + 1468 1474 1469 + 1475 1470 1401 + 1470 1475 1476 + 1470 1476 1471 + 1477 1471 1476 + 1472 1471 1477 + 1477 1478 1472 + 1472 1478 1479 + 1479 1473 1472 + 1401 1480 1475 + 1475 1480 1481 + 1482 1475 1481 + 1476 1475 1482 + 1401 1400 1480 + 1480 1400 1399 + 1399 1483 1480 + 1480 1483 1481 + 1483 1399 1484 + 1484 1485 1483 + 1483 1485 1486 + 1486 1481 1483 + 1484 1399 1405 + 1405 1487 1484 + 1484 1487 1488 + 1487 1405 1404 + 1404 1489 1487 + 1487 1489 1490 + 1490 1491 1487 + 1487 1491 1492 + 1489 1404 1493 + 1493 1494 1489 + 1490 1489 1494 + 1494 1495 1490 + 155 1490 1495 + 1491 1490 155 + 155 1427 1491 + 1496 1493 1404 + 1449 1448 1497 + 1495 1498 155 + 1498 1495 1499 + 1499 1500 1498 + 1498 1500 1501 + 1501 156 1498 + 1499 1495 1494 + 1494 1502 1499 + 1503 1499 1502 + 1500 1499 1503 + 1503 1504 1500 + 1504 1501 1500 + 1505 1501 1504 + 156 1501 1505 + 1505 1506 156 + 156 1506 1427 + 1493 1502 1494 + 1502 1493 1507 + 1507 1503 1502 + 1504 1503 1508 + 1455 1509 1456 + 1510 1509 1455 + 1455 1454 1510 + 1511 1510 1454 + 1454 1460 1511 + 1512 1511 1460 + 1460 1513 1512 + 1512 1513 1514 + 1459 1513 1460 + 1513 1459 1465 + 1465 1514 1513 + 1514 1465 1515 + 1514 1515 1516 + 1516 1517 1514 + 1514 1517 1518 + 1515 1465 1464 + 1464 1519 1515 + 1515 1519 1520 + 1520 1521 1515 + 1521 1516 1515 + 1522 1516 1521 + 1516 1522 1523 + 1523 1517 1516 + 1519 1464 1469 + 1519 1469 1474 + 1474 1524 1519 + 1519 1524 1520 + 1474 1473 1524 + 1524 1473 1479 + 1479 1525 1524 + 1524 1525 1520 + 1525 1526 1520 + 1527 1520 1526 + 1520 1527 1528 + 1520 1528 1529 + 1529 1521 1520 + 1525 1479 1530 + 1525 1530 1531 + 1531 1526 1525 + 1532 1526 1531 + 1526 1532 1527 + 1527 1532 1533 + 1533 1534 1527 + 1528 1527 1534 + 1530 1479 1478 + 1478 1535 1530 + 1530 1535 1536 + 1537 1536 1535 + 1535 1538 1537 + 1537 1538 1539 + 1539 1540 1537 + 1535 1478 1477 + 1477 1538 1535 + 1538 1477 1541 + 1541 1539 1538 + 1539 1541 1542 + 1539 1542 1543 + 1543 1540 1539 + 1541 1477 1476 + 1544 1541 1476 + 1542 1541 1544 + 1544 1545 1542 + 1542 1545 1546 + 1546 1543 1542 + 1476 1547 1544 + 1548 1544 1547 + 1545 1544 1548 + 1545 1548 1549 + 1549 1550 1545 + 1545 1550 1551 + 1550 1552 1551 + 1482 1547 1476 + 1547 1482 1553 + 1547 1553 1548 + 1548 1553 1554 + 1554 1549 1548 + 1555 1549 1554 + 1555 1550 1549 + 1550 1555 1556 + 1556 1557 1550 + 1553 1482 1558 + 1558 1559 1553 + 1553 1559 1554 + 1558 1560 1559 + 1559 1560 1561 + 1561 1562 1559 + 1559 1562 1554 + 1561 1563 1562 + 1562 1563 1564 + 1564 1565 1562 + 1562 1565 1554 + 1563 1561 1566 + 1566 1567 1563 + 1563 1567 1568 + 1568 1564 1563 + 1569 1564 1568 + 1564 1569 1565 + 1565 1569 1570 + 1570 1571 1565 + 1565 1571 1554 + 1572 1567 1566 + 1567 1572 1573 + 1573 1574 1567 + 1567 1574 1568 + 1575 1568 1574 + 1576 1568 1575 + 1568 1576 1569 + 1572 1566 1577 + 1577 1578 1572 + 1572 1578 1579 + 1579 1573 1572 + 1580 1573 1579 + 1573 1580 1581 + 1581 1574 1573 + 1574 1581 1575 + 1577 1566 1582 + 1582 1583 1577 + 1583 1584 1577 + 1585 1577 1584 + 1577 1585 1586 + 1586 1578 1577 + 1578 1586 1587 + 1587 1579 1578 + 1588 1579 1587 + 1579 1588 1580 + 1481 1584 1583 + 1589 1584 1481 + 1584 1589 1585 + 1585 1589 1590 + 1590 1591 1585 + 1586 1585 1591 + 1591 1592 1586 + 1587 1586 1592 + 1583 1593 1481 + 1481 1593 1594 + 1595 1531 1530 + 1596 1590 1589 + 1589 1486 1596 + 1481 1486 1589 + 1597 1556 1555 + 1555 1598 1597 + 1598 1599 1597 + 1600 1599 1598 + 1598 1601 1600 + 1602 1600 1601 + 1554 1598 1555 + 1601 1598 1554 + 1601 1554 1603 + 1603 1604 1601 + 1601 1604 1602 + 1571 1603 1554 + 1605 1603 1571 + 1605 1604 1603 + 1604 1605 1606 + 1606 1607 1604 + 1604 1607 1602 + 1571 1608 1605 + 1605 1608 1609 + 1606 1605 1609 + 1610 1606 1609 + 1611 1606 1610 + 1607 1606 1611 + 1570 1608 1571 + 1608 1570 1612 + 1612 1609 1608 + 1609 1612 1613 + 1613 1614 1609 + 1609 1614 1615 + 1615 1616 1609 + 1609 1616 1610 + 1617 1612 1570 + 1613 1612 1617 + 1617 1618 1613 + 1619 1613 1618 + 1614 1613 1619 + 1619 1620 1614 + 1615 1614 1620 + 1570 1569 1617 + 1569 1576 1617 + 1621 1617 1576 + 1617 1621 1618 + 1618 1621 1622 + 1622 1623 1618 + 1618 1623 1619 + 1624 1619 1623 + 1620 1619 1624 + 1576 1625 1621 + 1621 1625 1626 + 1626 1627 1621 + 1627 1622 1621 + 1628 1622 1627 + 1623 1622 1628 + 1628 1629 1623 + 1623 1629 1624 + 1575 1625 1576 + 1625 1575 1630 + 1630 1626 1625 + 1626 1630 1631 + 1631 1632 1626 + 1626 1632 1633 + 1633 1627 1626 + 1633 1634 1627 + 1627 1634 1628 + 1630 1575 1581 + 1581 1635 1630 + 1631 1630 1635 + 1635 1636 1631 + 1637 1631 1636 + 1632 1631 1637 + 1637 1638 1632 + 1632 1638 1639 + 1639 1633 1632 + 1634 1633 1639 + 1640 1635 1581 + 1635 1640 1641 + 1641 1636 1635 + 1636 1641 1642 + 1642 1643 1636 + 1636 1643 1637 + 1644 1637 1643 + 1638 1637 1644 + 1581 1580 1640 + 1645 1640 1580 + 1641 1640 1645 + 1645 1646 1641 + 1641 1646 1647 + 1647 1642 1641 + 1648 1642 1647 + 1580 1588 1645 + 1649 1645 1588 + 1645 1649 1650 + 1650 1646 1645 + 1646 1650 1651 + 1651 1647 1646 + 1647 1651 1652 + 1652 1653 1647 + 1647 1653 1648 + 1588 1654 1649 + 1649 1654 1655 + 1655 1656 1649 + 1656 1657 1649 + 1650 1649 1657 + 1657 1658 1650 + 1651 1650 1658 + 1587 1654 1588 + 1654 1587 1659 + 1659 1655 1654 + 1660 1655 1659 + 1655 1660 1661 + 1661 1656 1655 + 1592 1659 1587 + 1662 1659 1592 + 1659 1662 1660 + 1660 1662 1663 + 1663 1664 1660 + 1660 1664 1661 + 1665 1661 1664 + 1656 1661 1665 + 1592 1666 1662 + 1662 1666 1667 + 1667 1663 1662 + 1668 1663 1667 + 1664 1663 1668 + 1668 1669 1664 + 1664 1669 1665 + 1670 1666 1592 + 1666 1670 1671 + 1671 1667 1666 + 1667 1671 1672 + 1672 1673 1667 + 1667 1673 1668 + 1592 1591 1670 + 1670 1591 1590 + 1590 1674 1670 + 1670 1674 1675 + 1675 1671 1670 + 1672 1671 1675 + 1675 1676 1672 + 1672 1676 1677 + 1677 1678 1672 + 1673 1672 1678 + 1679 1674 1590 + 1674 1679 1680 + 1680 1675 1674 + 1675 1680 1681 + 1681 1676 1675 + 1676 1681 1682 + 1682 1677 1676 + 1590 1683 1679 + 1332 1684 1326 + 1326 1684 1327 + 1685 1327 1684 + 1686 1327 1685 + 1327 1686 1322 + 1317 1322 1686 + 1686 1687 1317 + 1688 1687 1686 + 1684 1689 1685 + 1690 1685 1689 + 1691 1685 1690 + 1685 1691 1686 + 1686 1691 1688 + 1688 1691 1692 + 1693 1689 1684 + 1691 1694 1692 + 1694 1695 1692 + 1696 1692 1695 + 1697 1692 1696 + 1692 1697 1698 + 1698 1699 1692 + 1698 1700 1699 + 1695 1701 1696 + 1702 1696 1701 + 1697 1696 1702 + 1702 1703 1697 + 1697 1703 1704 + 1704 1698 1697 + 1700 1698 1704 + 1704 1705 1700 + 1706 1705 1704 + 1701 1695 1707 + 1707 1695 1708 + 1708 1709 1707 + 1690 1710 1691 + 1710 1690 1711 + 1711 1690 1712 + 1712 1713 1711 + 1714 1711 1713 + 1715 1711 1714 + 1711 1715 1716 + 1717 1712 1690 + 1718 1712 1717 + 1712 1718 1719 + 1719 1713 1712 + 1713 1719 1720 + 1720 1721 1713 + 1713 1721 1714 + 1717 1722 1718 + 1718 1722 1723 + 1723 1724 1718 + 1719 1718 1724 + 1724 1725 1719 + 1720 1719 1725 + 1725 1726 1720 + 1727 1720 1726 + 1721 1720 1727 + 1728 1723 1722 + 1729 1723 1728 + 1723 1729 1730 + 1730 1724 1723 + 1724 1730 1731 + 1731 1725 1724 + 1725 1731 1732 + 1732 1726 1725 + 1722 1332 1728 + 1331 1728 1332 + 1733 1728 1331 + 1728 1733 1729 + 1729 1733 1734 + 1734 1735 1729 + 1730 1729 1735 + 1736 1332 1722 + 1331 1336 1733 + 1734 1733 1336 + 1336 1737 1734 + 1738 1734 1737 + 1738 1735 1734 + 1735 1738 1739 + 1739 1740 1735 + 1735 1740 1730 + 1731 1730 1740 + 1740 1741 1731 + 1732 1731 1741 + 1341 1737 1336 + 1737 1341 1350 + 1350 1742 1737 + 1737 1742 1738 + 1738 1742 1743 + 1743 1744 1738 + 1745 1744 1743 + 1744 1745 1746 + 1742 1350 1747 + 1747 1743 1742 + 1748 1743 1747 + 1743 1748 1745 + 1745 1748 1749 + 1749 1750 1745 + 1746 1745 1750 + 1750 1751 1746 + 1747 1350 1349 + 1349 1752 1747 + 1753 1747 1752 + 1747 1753 1748 + 1748 1753 1754 + 1754 1749 1748 + 1755 1749 1754 + 1749 1755 1756 + 1756 1750 1749 + 1348 1752 1349 + 1757 1752 1348 + 1752 1757 1753 + 1753 1757 1758 + 1758 1754 1753 + 1759 1754 1758 + 1754 1759 1755 + 1755 1759 1760 + 1760 1761 1755 + 1756 1755 1761 + 1348 1358 1757 + 1757 1358 1762 + 1762 1758 1757 + 1763 1758 1762 + 1758 1763 1759 + 1759 1763 1764 + 1764 1760 1759 + 1765 1760 1764 + 1760 1765 1766 + 1766 1761 1760 + 1362 1762 1358 + 1767 1762 1362 + 1762 1767 1763 + 1763 1767 1768 + 1768 1764 1763 + 1769 1764 1768 + 1764 1769 1765 + 1765 1769 1770 + 1770 1771 1765 + 1766 1765 1771 + 1362 1772 1767 + 1767 1772 1773 + 1773 1768 1767 + 1774 1768 1773 + 1768 1774 1769 + 1769 1774 1775 + 1775 1770 1769 + 1772 1362 1361 + 1361 1776 1772 + 1772 1776 1777 + 1777 1773 1772 + 1778 1773 1777 + 1773 1778 1774 + 1774 1778 1779 + 1779 1775 1774 + 1776 1361 1360 + 1360 1780 1776 + 1776 1780 1781 + 1781 1777 1776 + 1782 1777 1781 + 1777 1782 1778 + 1778 1782 1783 + 1783 1779 1778 + 1784 1780 1360 + 1780 1784 1785 + 1785 1781 1780 + 1781 1785 1786 + 1786 1787 1781 + 1781 1787 1782 + 1782 1787 1788 + 1788 1783 1782 + 1360 1368 1784 + 1784 1368 1789 + 1789 1790 1784 + 1785 1784 1790 + 1790 1791 1785 + 1786 1785 1791 + 1372 1789 1368 + 1792 1789 1372 + 1789 1792 1793 + 1793 1790 1789 + 1790 1793 1794 + 1794 1791 1790 + 1795 1791 1794 + 1791 1795 1786 + 1372 1431 1792 + 1796 1792 1431 + 1793 1792 1796 + 1796 1797 1793 + 1793 1797 1798 + 1798 1794 1793 + 1799 1794 1798 + 1794 1799 1795 + 1795 1799 1800 + 1800 1801 1795 + 1431 1802 1796 + 1803 1796 1802 + 1796 1803 1804 + 1804 1797 1796 + 1797 1804 1805 + 1805 1798 1797 + 1430 1802 1431 + 1806 1802 1430 + 1802 1806 1803 + 1803 1806 1807 + 1808 1803 1807 + 1804 1803 1808 + 1808 1809 1804 + 1804 1809 1810 + 1805 1804 1810 + 1430 1440 1806 + 1806 1440 1811 + 1811 1807 1806 + 1812 1807 1811 + 1807 1812 1813 + 1813 1814 1807 + 1807 1814 1808 + 1815 1808 1814 + 1808 1815 1809 + 1811 1440 1439 + 1439 1816 1811 + 1816 1817 1811 + 1812 1811 1817 + 1817 1818 1812 + 1812 1818 1819 + 1819 1813 1812 + 1820 1813 1819 + 1814 1813 1820 + 1438 1816 1439 + 1438 1821 1816 + 1816 1821 1822 + 1822 1817 1816 + 1817 1822 1823 + 1823 1818 1817 + 1818 1823 1824 + 1824 1819 1818 + 1821 1438 1825 + 1825 1826 1821 + 1822 1821 1826 + 1826 1827 1822 + 1827 1828 1822 + 1828 1829 1822 + 1823 1822 1829 + 1437 1825 1438 + 1830 1825 1437 + 1825 1830 1826 + 1826 1830 1831 + 1831 1827 1826 + 1832 1827 1831 + 1827 1832 1833 + 1833 1828 1827 + 1437 1834 1830 + 1830 1834 1835 + 1831 1830 1835 + 1836 1831 1835 + 1832 1831 1836 + 1836 1837 1832 + 1832 1837 1838 + 1833 1832 1838 + 1437 1839 1834 + 1834 1839 1840 + 1840 1841 1834 + 1834 1841 1835 + 1839 1437 1450 + 1450 1842 1839 + 1839 1842 1843 + 1843 1840 1839 + 1450 1449 1842 + 1842 1449 1844 + 1844 1845 1842 + 1842 1845 1843 + 1846 1844 1449 + 1456 1846 1449 + 1838 1847 1833 + 1848 1833 1847 + 1848 1828 1833 + 1828 1848 1849 + 1849 1829 1828 + 1849 1850 1829 + 1829 1850 1823 + 1847 1851 1848 + 1849 1848 1851 + 1852 1849 1851 + 1850 1849 1852 + 1852 1853 1850 + 1850 1853 1824 + 1824 1823 1850 + 1854 1852 1851 + 1855 1852 1854 + 1852 1855 1853 + 1853 1855 1856 + 1856 1824 1853 + 1819 1824 1856 + 1856 1857 1819 + 1819 1857 1820 + 1858 1854 1851 + 1859 1854 1858 + 1859 1860 1854 + 1854 1860 1855 + 1855 1860 1861 + 1861 1856 1855 + 1857 1856 1861 + 1861 1862 1857 + 1857 1862 1863 + 1820 1857 1863 + 1858 1864 1859 + 1865 1859 1864 + 1860 1859 1865 + 1865 1866 1860 + 1860 1866 1861 + 1866 1867 1861 + 1868 1861 1867 + 1868 1862 1861 + 1864 1869 1865 + 1869 1870 1865 + 1871 1865 1870 + 1871 1866 1865 + 1866 1871 1872 + 1872 1867 1866 + 1872 1873 1867 + 1867 1873 1868 + 1868 1873 1874 + 1875 1868 1874 + 1862 1868 1875 + 1870 1876 1871 + 1872 1871 1876 + 1877 1872 1876 + 1873 1872 1877 + 1877 1878 1873 + 1873 1878 1874 + 1879 1877 1876 + 1880 1877 1879 + 1880 1878 1877 + 1878 1880 1881 + 1881 1882 1878 + 1878 1882 1874 + 1876 1883 1879 + 1883 1884 1879 + 1884 1885 1879 + 1885 1886 1879 + 1887 1879 1886 + 1879 1887 1888 + 1879 1888 1880 + 1883 1876 1889 + 1890 1883 1889 + 1890 1891 1883 + 1892 1883 1891 + 1893 1892 1891 + 1893 1894 1892 + 1895 1889 1876 + 1889 1895 1896 + 1896 1897 1889 + 1889 1897 1898 + 1898 1890 1889 + 1891 1890 1898 + 1898 1899 1891 + 1893 1891 1899 + 1900 1895 1876 + 1895 1900 1901 + 1901 1902 1895 + 1896 1895 1902 + 1902 1903 1896 + 1904 1896 1903 + 1904 1897 1896 + 1897 1904 1905 + 1905 1898 1897 + 1905 1899 1898 + 1906 1902 1901 + 1902 1906 1907 + 1907 1903 1902 + 1908 1903 1907 + 1903 1908 1904 + 1904 1908 1909 + 1905 1904 1909 + 1910 1905 1909 + 1899 1905 1910 + 1906 1901 1911 + 1911 1912 1906 + 1907 1906 1912 + 1912 1913 1907 + 1913 1914 1907 + 1908 1907 1914 + 1914 1915 1908 + 1908 1915 1909 + 1858 1912 1911 + 1912 1858 1916 + 1916 1913 1912 + 1917 1913 1916 + 1913 1917 1918 + 1918 1914 1913 + 1915 1914 1918 + 1915 1918 1919 + 1919 1920 1915 + 1915 1920 1909 + 1921 1916 1858 + 1917 1916 1921 + 1921 1922 1917 + 1918 1917 1922 + 1922 1923 1918 + 1923 1924 1918 + 1924 1919 1918 + 1925 1919 1924 + 1920 1919 1925 + 1926 1921 1858 + 1927 1921 1926 + 1927 1922 1921 + 1922 1927 1928 + 1928 1923 1922 + 1929 1923 1928 + 1923 1929 1930 + 1930 1924 1923 + 1931 1926 1858 + 1932 1926 1931 + 1932 1933 1926 + 1926 1933 1927 + 1927 1933 1934 + 1928 1927 1934 + 1929 1928 1934 + 1931 1935 1932 + 1936 1932 1935 + 1933 1932 1936 + 1936 1934 1933 + 1937 1934 1936 + 1934 1937 1929 + 1929 1937 1938 + 1938 1939 1929 + 1939 1930 1929 + 1935 1931 1940 + 1940 1941 1935 + 1935 1941 1942 + 1942 1943 1935 + 1935 1943 1936 + 1937 1936 1943 + 1943 1944 1937 + 1937 1944 1938 + 1941 1940 1945 + 1945 1946 1941 + 1942 1941 1946 + 1946 1947 1942 + 1944 1942 1947 + 1944 1943 1942 + 1948 1946 1945 + 1946 1948 1949 + 1949 1947 1946 + 1950 1947 1949 + 1947 1950 1944 + 1944 1950 1938 + 1948 1945 1951 + 1951 1952 1948 + 1949 1948 1952 + 1952 1953 1949 + 1950 1949 1953 + 1953 1954 1950 + 1950 1954 1938 + 1952 1951 1836 + 1836 1955 1952 + 1952 1955 1956 + 1956 1953 1952 + 1954 1953 1956 + 1954 1956 1957 + 1957 1958 1954 + 1954 1958 1938 + 1955 1836 1959 + 1959 1960 1955 + 1956 1955 1960 + 1960 1957 1956 + 1961 1957 1960 + 1958 1957 1961 + 1958 1961 1962 + 1962 1963 1958 + 1958 1963 1938 + 1964 1959 1836 + 1965 1959 1964 + 1959 1965 1960 + 1960 1965 1961 + 1961 1965 1962 + 1965 1966 1962 + 1967 1962 1966 + 1963 1962 1967 + 1968 1964 1836 + 1969 1964 1968 + 1964 1969 1966 + 1964 1966 1965 + 1970 1968 1836 + 1971 1968 1970 + 1968 1971 1972 + 1968 1972 1969 + 1969 1972 1973 + 1967 1969 1973 + 1966 1969 1967 + 1835 1970 1836 + 1974 1970 1835 + 1970 1974 1975 + 1970 1975 1971 + 1971 1975 1976 + 1976 1977 1971 + 1972 1971 1977 + 1977 1973 1972 + 1835 1978 1974 + 1979 1974 1978 + 1975 1974 1979 + 1979 1980 1975 + 1975 1980 1976 + 1981 1978 1835 + 1978 1981 1982 + 1982 1983 1978 + 1978 1983 1979 + 1984 1979 1983 + 1984 1980 1979 + 1980 1984 1985 + 1985 1976 1980 + 1981 1835 1986 + 1986 1987 1981 + 1982 1981 1987 + 1987 1988 1982 + 1988 1989 1982 + 1990 1982 1989 + 1990 1983 1982 + 1983 1990 1984 + 1991 1987 1986 + 1987 1991 1992 + 1992 1988 1987 + 1992 1993 1988 + 1988 1993 1994 + 1994 1989 1988 + 1995 1989 1994 + 1989 1995 1990 + 1990 1995 1996 + 1984 1990 1996 + 1996 1997 1984 + 1997 1985 1984 + 1993 1992 1998 + 1998 1999 1993 + 1994 1993 1999 + 1999 2000 1994 + 2000 2001 1994 + 1995 1994 2001 + 2001 2002 1995 + 1995 2002 1996 + 1998 2003 1999 + 1999 2003 1846 + 1846 2000 1999 + 1846 2004 2000 + 2000 2004 2005 + 2005 2001 2000 + 2002 2001 2005 + 2002 2005 2006 + 2006 2007 2002 + 2002 2007 1996 + 2004 1846 2008 + 2008 2009 2004 + 2004 2009 2010 + 2005 2004 2010 + 2010 2006 2005 + 2011 2006 2010 + 2007 2006 2011 + 2007 2011 2012 + 2012 2013 2007 + 2007 2013 1996 + 2014 2009 2008 + 2009 2014 2015 + 2015 2010 2009 + 2015 2016 2010 + 2010 2016 2011 + 2011 2016 2017 + 2017 2012 2011 + 2018 2012 2017 + 2013 2012 2018 + 2019 2015 2014 + 2016 2015 2019 + 2019 2020 2016 + 2016 2020 2017 + 2021 2017 2020 + 2021 2022 2017 + 2017 2022 2018 + 2014 2023 2019 + 2024 2019 2023 + 2024 2020 2019 + 2020 2024 2021 + 2025 2023 2014 + 2026 2023 2025 + 2023 2026 2024 + 2024 2026 2027 + 2021 2024 2027 + 2014 2028 2025 + 2025 2028 2029 + 2029 2030 2025 + 2026 2025 2030 + 2030 2027 2026 + 2028 2014 2031 + 1881 1880 1888 + 2032 1881 1888 + 2033 1881 2032 + 2033 1882 1881 + 1882 2033 2034 + 2034 1874 1882 + 1888 2035 2032 + 2035 2036 2032 + 2036 2037 2032 + 2038 2032 2037 + 2032 2038 2039 + 2039 2040 2032 + 2032 2040 2033 + 2041 2035 1888 + 2041 2042 2035 + 2043 2035 2042 + 2044 2043 2042 + 2044 2045 2043 + 1888 1887 2041 + 2046 2041 1887 + 2042 2041 2046 + 2046 2047 2042 + 2042 2047 2048 + 2048 2044 2042 + 2045 2044 2048 + 2048 2049 2045 + 2050 2045 2049 + 2036 2045 2050 + 2050 2037 2036 + 1887 2051 2046 + 2051 2052 2046 + 2053 2046 2052 + 2053 2047 2046 + 2047 2053 2054 + 2054 2048 2047 + 2054 2049 2048 + 1886 2051 1887 + 2055 2051 1886 + 2051 2055 2056 + 2056 2052 2051 + 2057 2052 2056 + 2052 2057 2053 + 2053 2057 2058 + 2054 2053 2058 + 2059 2054 2058 + 2049 2054 2059 + 2055 1886 1885 + 1885 2060 2055 + 2056 2055 2060 + 2060 2061 2056 + 2057 2056 2061 + 2061 2062 2057 + 2057 2062 2058 + 2063 2060 1885 + 2060 2063 2064 + 2064 2061 2060 + 2062 2061 2064 + 2062 2064 2065 + 2065 2066 2062 + 2062 2066 2058 + 2063 1885 1884 + 1884 2067 2063 + 2063 2067 2068 + 2064 2063 2068 + 2068 2069 2064 + 2069 2065 2064 + 2070 2065 2069 + 2066 2065 2070 + 2066 2070 2071 + 2071 2072 2066 + 2066 2072 2058 + 2073 2068 2067 + 1910 2068 2073 + 2068 1910 2074 + 2074 2069 2068 + 2074 2075 2069 + 2069 2075 2070 + 2067 1893 2073 + 2073 1893 1899 + 1910 2073 1899 + 2074 1910 1909 + 1909 2076 2074 + 2076 2077 2074 + 2075 2074 2077 + 2077 2078 2075 + 2070 2075 2078 + 2078 2079 2070 + 2079 2080 2070 + 2080 2071 2070 + 2081 2076 1909 + 2076 2081 2082 + 2076 2082 2083 + 2083 2077 2076 + 2077 2083 2078 + 2078 2083 2084 + 2084 2079 2078 + 1909 2085 2081 + 2086 2081 2085 + 2082 2081 2086 + 2086 2087 2082 + 2082 2087 2088 + 2088 2084 2082 + 2084 2083 2082 + 1909 2089 2085 + 2085 2089 2090 + 2090 2091 2085 + 2085 2091 2086 + 2092 2086 2091 + 2091 2093 2092 + 2089 1909 2094 + 2094 2095 2089 + 2089 2095 2096 + 2096 2090 2089 + 2097 2090 2096 + 1920 2094 1909 + 2098 2094 1920 + 2094 2098 2095 + 2095 2098 2099 + 2099 2096 2095 + 2096 2099 2100 + 2100 2101 2096 + 2096 2101 2097 + 1920 1925 2098 + 2099 2098 1925 + 2102 2099 1925 + 2100 2099 2102 + 2102 2103 2100 + 2103 2104 2100 + 2091 2090 144 + 2034 2033 2040 + 2105 2034 2040 + 2106 2034 2105 + 1874 2034 2106 + 1874 2106 2107 + 2107 2108 1874 + 1874 2108 1875 + 2109 2105 2040 + 2110 2105 2109 + 2105 2110 2111 + 2105 2111 2106 + 2107 2106 2111 + 2111 2112 2107 + 2113 2107 2112 + 2108 2107 2113 + 2114 2109 2040 + 2115 2109 2114 + 2109 2115 2116 + 2109 2116 2110 + 2110 2116 2117 + 2118 2110 2117 + 2111 2110 2118 + 2118 2112 2111 + 2119 2114 2040 + 2120 2114 2119 + 2121 2114 2120 + 2114 2121 2115 + 2115 2121 2122 + 2122 2123 2115 + 2116 2115 2123 + 2123 2117 2116 + 2119 2124 2120 + 2125 2120 2124 + 2121 2120 2125 + 2125 2126 2121 + 2121 2126 2122 + 2127 2122 2126 + 2128 2122 2127 + 2122 2128 2129 + 2129 2123 2122 + 2130 2125 2124 + 2131 2125 2130 + 2131 2126 2125 + 2126 2131 2127 + 2132 2127 2131 + 2133 2127 2132 + 2127 2133 2128 + 2124 2134 2130 + 2134 2135 2130 + 2135 2136 2130 + 2137 2130 2136 + 2130 2137 2138 + 2130 2138 2131 + 2131 2138 2132 + 2139 2134 2124 + 2139 2140 2134 + 2141 2134 2140 + 33 2141 2140 + 2142 33 2140 + 2143 33 2142 + 2124 2144 2139 + 2145 2139 2144 + 2139 2145 2146 + 2140 2139 2146 + 2140 2146 2142 + 2147 2142 2146 + 2147 2148 2142 + 2142 2148 2143 + 2144 2124 2149 + 1741 1740 1739 + 1739 2150 1741 + 1741 2150 2151 + 2151 2152 1741 + 1741 2152 1732 + 2153 1732 2152 + 1726 1732 2153 + 2150 1739 2154 + 2154 2155 2150 + 2150 2155 2156 + 2156 2151 2150 + 2157 2151 2156 + 2151 2157 2158 + 2158 2152 2151 + 2152 2158 2153 + 2154 1739 1738 + 2159 2155 2154 + 2155 2159 2160 + 2160 2156 2155 + 2156 2160 2161 + 2161 2162 2156 + 2156 2162 2157 + 2163 2157 2162 + 2158 2157 2163 + 2163 2164 2158 + 2153 2158 2164 + 2160 2159 1751 + 1751 2165 2160 + 2161 2160 2165 + 2165 2166 2161 + 2167 2161 2166 + 2162 2161 2167 + 2167 2168 2162 + 2162 2168 2163 + 2169 2163 2168 + 2164 2163 2169 + 2170 2165 1751 + 2165 2170 2171 + 1751 2172 2170 + 2170 2172 2173 + 2173 2174 2170 + 2175 2170 2174 + 2174 2176 2175 + 2172 1751 1750 + 1750 1756 2172 + 2172 1756 2177 + 2177 2173 2172 + 2178 2173 2177 + 2173 2178 2179 + 2179 2174 2173 + 2174 2179 2180 + 2180 2176 2174 + 1761 2177 1756 + 2181 2177 1761 + 2177 2181 2178 + 2178 2181 2182 + 2182 2183 2178 + 2179 2178 2183 + 2183 2184 2179 + 2180 2179 2184 + 1761 1766 2181 + 2181 1766 2185 + 2185 2182 2181 + 2186 2182 2185 + 2182 2186 2187 + 2187 2183 2182 + 2183 2187 2188 + 2188 2184 2183 + 1771 2185 1766 + 2189 2185 1771 + 2185 2189 2186 + 2186 2189 2190 + 2190 2191 2186 + 2187 2186 2191 + 2191 2192 2187 + 2188 2187 2192 + 1771 2193 2189 + 2189 2193 2194 + 2194 2190 2189 + 2195 2190 2194 + 2190 2195 2196 + 2196 2191 2190 + 2191 2196 2197 + 2197 2192 2191 + 2193 1771 1770 + 1770 2198 2193 + 2193 2198 2199 + 2199 2194 2193 + 2200 2194 2199 + 2194 2200 2195 + 2195 2200 2201 + 2201 2202 2195 + 2196 2195 2202 + 2198 1770 1775 + 1775 2203 2198 + 2198 2203 2204 + 2204 2199 2198 + 2205 2199 2204 + 2199 2205 2200 + 2200 2205 2206 + 2206 2201 2200 + 2203 1775 1779 + 1779 2207 2203 + 2203 2207 2208 + 2208 2204 2203 + 2209 2204 2208 + 2204 2209 2205 + 2205 2209 2210 + 2210 2206 2205 + 2207 1779 1783 + 1783 2211 2207 + 2207 2211 2212 + 2212 2208 2207 + 2213 2208 2212 + 2208 2213 2209 + 2209 2213 2214 + 2214 2210 2209 + 2211 1783 1788 + 1788 2215 2211 + 2211 2215 2216 + 2216 2212 2211 + 2217 2212 2216 + 2212 2217 2213 + 2213 2217 2218 + 2218 2214 2213 + 2219 2215 1788 + 2215 2219 2220 + 2220 2216 2215 + 2216 2220 2221 + 2221 2222 2216 + 2216 2222 2217 + 2217 2222 2223 + 2218 2217 2223 + 2219 1788 1787 + 1787 1786 2219 + 2220 2219 1786 + 1786 1795 2220 + 1795 2224 2220 + 2221 2220 2225 + 2225 2226 2221 + 2227 2221 2226 + 2222 2221 2227 + 2227 2223 2222 + 2226 2228 2227 + 2229 2227 2228 + 2223 2227 2229 + 2230 2228 2226 + 2228 2230 2231 + 2231 2232 2228 + 2228 2232 2229 + 2229 2232 2233 + 2234 2229 2233 + 2229 2234 2223 + 2226 2235 2230 + 2236 2230 2235 + 2231 2230 2236 + 2236 2237 2231 + 2231 2237 2238 + 2238 2239 2231 + 2232 2231 2239 + 2239 2233 2232 + 1800 2235 2226 + 2235 1800 2240 + 2240 2241 2235 + 2235 2241 2236 + 2242 2236 2241 + 2236 2242 2243 + 2243 2237 2236 + 2226 2244 1800 + 2240 1800 1799 + 1799 2245 2240 + 2246 2240 2245 + 2240 2246 2247 + 2247 2241 2240 + 2241 2247 2242 + 2242 2247 2248 + 2248 2249 2242 + 2243 2242 2249 + 1798 2245 1799 + 2250 2245 1798 + 2245 2250 2246 + 2246 2250 2251 + 2252 2246 2251 + 2247 2246 2252 + 2252 2248 2247 + 2252 2253 2248 + 2248 2253 2254 + 2254 2249 2248 + 1798 1805 2250 + 2250 1805 2255 + 2255 2251 2250 + 2251 2255 2256 + 2256 2257 2251 + 2251 2257 2258 + 2258 2259 2251 + 2251 2259 2252 + 2253 2252 2259 + 1810 2255 1805 + 2256 2255 1810 + 1810 2260 2256 + 2256 2260 2261 + 2261 2262 2256 + 2257 2256 2262 + 2262 2263 2257 + 2257 2263 2264 + 2264 2258 2257 + 2265 2258 2264 + 2266 2260 1810 + 2260 2266 2267 + 2267 2268 2260 + 2260 2268 2261 + 2266 1810 1809 + 1809 1815 2266 + 2266 1815 2269 + 2267 2266 2269 + 2270 2267 2269 + 2271 2267 2270 + 2271 2268 2267 + 2268 2271 2272 + 2272 2261 2268 + 1814 2269 1815 + 1820 2269 1814 + 2269 1820 2273 + 2273 2274 2269 + 2269 2274 2275 + 2275 2270 2269 + 2276 2270 2275 + 2276 2277 2270 + 2270 2277 2271 + 1863 2273 1820 + 2278 2273 1863 + 2273 2278 2274 + 2274 2278 2279 + 2279 2275 2274 + 2279 2280 2275 + 2275 2280 2276 + 2276 2280 2281 + 2281 2282 2276 + 2277 2276 2282 + 1863 2283 2278 + 2278 2283 2284 + 2279 2278 2284 + 2285 2279 2284 + 2280 2279 2285 + 2285 2281 2280 + 2281 2285 2286 + 2281 2286 2287 + 2287 2282 2281 + 2283 1863 2288 + 2283 2288 2289 + 2289 2290 2283 + 2283 2290 2284 + 2288 1863 2291 + 2291 2292 2288 + 2288 2292 2293 + 2293 2289 2288 + 2294 2289 2293 + 2294 2290 2289 + 2290 2294 2295 + 2295 2284 2290 + 2296 2291 1863 + 2297 2291 2296 + 2291 2297 2292 + 2292 2297 2298 + 2298 2293 2292 + 2298 2299 2293 + 2293 2299 2294 + 2294 2299 2300 + 2300 2295 2294 + 2301 2296 1863 + 2302 2296 2301 + 2302 2303 2296 + 2296 2303 2297 + 2298 2297 2303 + 2303 2304 2298 + 2299 2298 2304 + 2304 2305 2299 + 2299 2305 2300 + 1862 2301 1863 + 1875 2301 1862 + 2301 1875 2306 + 2301 2306 2302 + 2302 2306 2307 + 2307 2308 2302 + 2303 2302 2308 + 2308 2304 2303 + 2308 2305 2304 + 2305 2308 2307 + 2307 2309 2305 + 2305 2309 2300 + 2306 1875 2108 + 2108 2310 2306 + 2306 2310 2307 + 2310 2311 2307 + 2312 2307 2311 + 2312 2309 2307 + 2309 2312 2313 + 2313 2300 2309 + 2113 2310 2108 + 2310 2113 2314 + 2314 2311 2310 + 2311 2314 2315 + 2315 2316 2311 + 2311 2316 2312 + 2312 2316 2317 + 2313 2312 2317 + 2318 2314 2113 + 2315 2314 2318 + 2318 2319 2315 + 2320 2315 2319 + 2316 2315 2320 + 2320 2321 2316 + 2316 2321 2317 + 2113 2322 2318 + 2323 2318 2322 + 2318 2323 2324 + 2324 2319 2318 + 2319 2324 2325 + 2325 2326 2319 + 2319 2326 2320 + 2112 2322 2113 + 2112 2118 2322 + 2322 2118 2323 + 2117 2323 2118 + 2324 2323 2117 + 2117 2327 2324 + 2324 2327 2328 + 2328 2325 2324 + 2329 2325 2328 + 2325 2329 2330 + 2330 2326 2325 + 2326 2330 2331 + 2331 2320 2326 + 2327 2117 2123 + 2123 2129 2327 + 2327 2129 2332 + 2332 2328 2327 + 2328 2332 2333 + 2333 2334 2328 + 2328 2334 2329 + 2329 2334 2335 + 2335 2336 2329 + 2330 2329 2336 + 2332 2129 2337 + 2337 2338 2332 + 2333 2332 2338 + 2338 2339 2333 + 2340 2333 2339 + 2334 2333 2340 + 2340 2335 2334 + 2129 2128 2337 + 2341 2337 2128 + 2337 2341 2342 + 2337 2342 2343 + 2343 2338 2337 + 2338 2343 2339 + 2339 2343 2344 + 2344 2345 2339 + 2339 2345 2340 + 2128 2133 2341 + 2346 2341 2133 + 2342 2341 2346 + 2346 2347 2342 + 2342 2347 2344 + 2344 2343 2342 + 2133 2348 2346 + 2349 2346 2348 + 2347 2346 2349 + 2349 2350 2347 + 2347 2350 2351 + 2351 2352 2347 + 2347 2352 2344 + 2132 2348 2133 + 2348 2132 2353 + 2353 2354 2348 + 2348 2354 2349 + 2349 2354 2355 + 2355 2356 2349 + 2350 2349 2356 + 2356 2357 2350 + 2351 2350 2357 + 2353 2132 2358 + 2358 2359 2353 + 2360 2353 2359 + 2354 2353 2360 + 2360 2355 2354 + 2355 2360 2361 + 2361 2362 2355 + 2355 2362 2363 + 2363 2356 2355 + 2357 2356 2363 + 2358 2364 2359 + 2359 2364 2365 + 2365 2366 2359 + 2359 2366 2360 + 2361 2360 2366 + 2364 2358 145 + 145 2367 2364 + 2364 2367 2368 + 2368 2365 2364 + 2369 2365 2368 + 2366 2365 2369 + 2369 2370 2366 + 2366 2370 2361 + 2367 145 2371 + 2371 2372 2367 + 2367 2372 2373 + 2373 2368 2367 + 2373 2374 2368 + 2368 2374 2369 + 2371 145 2375 + 2375 2376 2371 + 2371 2376 2377 + 2377 2378 2371 + 2379 2378 2377 + 2377 2380 2379 + 2375 145 2132 + 2138 2375 2132 + 2381 2375 2138 + 2375 2381 2376 + 2376 2381 2382 + 2382 2383 2376 + 2376 2383 2377 + 2383 2384 2377 + 2385 2377 2384 + 2385 2380 2377 + 2138 2137 2381 + 2381 2137 2386 + 2382 2381 2386 + 2136 2386 2137 + 2387 2386 2136 + 2386 2387 2388 + 2388 2389 2386 + 2388 2390 2389 + 2391 2389 2390 + 2392 2391 2390 + 2136 2393 2387 + 2387 2393 2394 + 2394 2395 2387 + 2387 2395 2396 + 2396 2388 2387 + 2390 2388 2396 + 2396 2397 2390 + 2392 2390 2397 + 2393 2136 2398 + 2398 2399 2393 + 2394 2393 2399 + 2372 2371 2400 + 2400 2401 2372 + 2372 2401 2402 + 2373 2372 2402 + 2402 2403 2373 + 2374 2373 2403 + 2400 2404 2401 + 2403 2405 2374 + 2374 2405 2406 + 2369 2374 2406 + 2406 2407 2369 + 2370 2369 2407 + 2407 2408 2370 + 2361 2370 2408 + 2405 2409 2406 + 2410 2406 2409 + 2411 2406 2410 + 2406 2411 2412 + 2412 2407 2406 + 2407 2412 2413 + 2413 2408 2407 + 2409 2414 2410 + 2410 2414 2415 + 2416 2410 2415 + 2411 2410 2416 + 2416 2417 2411 + 2414 2409 2418 + 2419 2418 2409 + 2420 2418 2419 + 2421 2418 2420 + 2420 2415 2421 + 2422 2415 2420 + 2415 2422 2423 + 2423 2416 2415 + 2423 2424 2416 + 2425 2419 2409 + 2426 2419 2425 + 2419 2426 2427 + 2427 2428 2419 + 2419 2428 2420 + 2422 2420 2428 + 2428 2429 2422 + 2422 2429 1293 + 2423 2422 1293 + 2425 2430 2426 + 2412 2411 2431 + 2429 2428 2427 + 2429 2427 2432 + 2432 2433 2429 + 2429 2433 1293 + 2433 1295 1293 + 1295 1294 1293 + 2427 2426 2432 + 2426 2434 2432 + 2435 2432 2434 + 2433 2432 2435 + 2433 2435 2436 + 2436 1295 2433 + 1295 2436 1290 + 2426 2403 2434 + 2403 2402 2434 + 2437 2434 2402 + 2434 2437 2435 + 2435 2437 2438 + 2438 2436 2435 + 1290 2436 2438 + 2438 2439 1290 + 1290 2439 2440 + 2440 1281 1290 + 2441 2437 2402 + 2401 2441 2402 + 2437 2442 2438 + 2442 2380 2438 + 2443 2438 2380 + 2443 2439 2438 + 2439 2443 2444 + 2444 2440 2439 + 2444 2445 2440 + 2440 2445 2446 + 2446 1281 2440 + 1281 2446 1277 + 2380 2385 2443 + 2443 2385 2447 + 2447 2448 2443 + 2448 2449 2443 + 2449 2444 2443 + 2445 2444 2449 + 2449 2450 2445 + 2446 2445 2450 + 2450 2451 2446 + 1277 2446 2451 + 2385 2452 2447 + 2452 2453 2447 + 2453 2454 2447 + 2454 2455 2447 + 2455 2456 2447 + 2456 2457 2447 + 2458 2447 2457 + 2447 2458 2459 + 2447 2459 2460 + 2460 2448 2447 + 2384 2452 2385 + 2452 2384 2461 + 2452 2461 2462 + 2462 2453 2452 + 2453 2462 2463 + 2453 2463 2397 + 2397 2454 2453 + 2461 2384 2383 + 2383 2464 2461 + 2461 2464 2465 + 2465 2462 2461 + 2463 2462 2465 + 2465 2392 2463 + 2463 2392 2397 + 2382 2464 2383 + 2464 2382 2465 + 2382 2391 2465 + 2454 2397 2396 + 2454 2396 2395 + 2395 2455 2454 + 2455 2395 2394 + 2455 2394 2466 + 2466 2456 2455 + 2456 2466 2467 + 2456 2467 2468 + 2468 2457 2456 + 2457 2468 2469 + 2457 2469 2458 + 2470 2466 2394 + 2467 2466 2470 + 2470 2471 2467 + 2467 2471 2472 + 2472 2473 2467 + 2473 2474 2467 + 2474 2468 2467 + 2469 2468 2474 + 2475 2470 2394 + 2476 2470 2475 + 2476 2471 2470 + 2471 2476 2477 + 2477 2472 2471 + 2477 2478 2472 + 2472 2478 206 + 206 2473 2472 + 2479 2475 2394 + 2480 2475 2479 + 2481 2475 2480 + 2475 2481 2476 + 2476 2481 2482 + 2482 2477 2476 + 2478 2477 2482 + 2482 2483 2478 + 206 2478 2483 + 2483 2484 206 + 2485 206 2484 + 2479 2143 2480 + 2480 2143 2148 + 2481 2480 2148 + 2148 2147 2481 + 2481 2147 2482 + 2147 2486 2482 + 2486 2487 2482 + 2487 2488 2482 + 2488 2489 2482 + 2489 2490 2482 + 2490 2491 2482 + 2491 2492 2482 + 2493 2482 2492 + 2482 2493 2483 + 2146 2486 2147 + 2486 2146 2145 + 2486 2145 2494 + 2494 2487 2486 + 2487 2494 2495 + 2487 2495 2496 + 2496 2488 2487 + 2488 2496 2497 + 2488 2497 2498 + 2498 2489 2488 + 2144 2494 2145 + 2495 2494 2144 + 2144 31 2495 + 2495 31 2499 + 2499 2496 2495 + 2497 2496 2499 + 2499 2500 2497 + 2497 2500 2039 + 2039 2498 2497 + 2501 2498 2039 + 2489 2498 2501 + 2489 2501 2502 + 2502 2490 2489 + 31 2503 2499 + 2503 245 2499 + 2500 2499 245 + 2039 2038 2501 + 2501 2038 2504 + 2504 2502 2501 + 2505 2502 2504 + 2490 2502 2505 + 2490 2505 2506 + 2506 2491 2490 + 2491 2506 2507 + 2491 2507 2508 + 2508 2492 2491 + 2037 2504 2038 + 2050 2504 2037 + 2504 2050 2505 + 2505 2050 2049 + 2049 2509 2505 + 2509 2506 2505 + 2507 2506 2509 + 2509 2510 2507 + 2507 2510 2511 + 2511 2512 2507 + 2512 2513 2507 + 2513 2508 2507 + 2059 2509 2049 + 2059 2510 2509 + 2510 2059 2514 + 2514 2511 2510 + 2514 2515 2511 + 2511 2515 2516 + 2516 2512 2511 + 2517 2514 2059 + 2515 2514 2517 + 2517 2518 2515 + 2515 2518 2519 + 2516 2515 2519 + 2520 2516 2519 + 2521 2516 2520 + 2522 2516 2521 + 2058 2517 2059 + 2523 2517 2058 + 2517 2523 2518 + 2518 2523 2524 + 2524 2519 2518 + 2519 2524 2525 + 2519 2525 2526 + 2526 2520 2519 + 2527 2520 2526 + 2526 2528 2527 + 2058 2529 2523 + 2529 2524 2523 + 2525 2524 2529 + 2529 2530 2525 + 2531 2525 2530 + 2525 2531 2526 + 2528 2526 2531 + 2058 2530 2529 + 2532 2530 2058 + 2530 2532 2533 + 2531 2530 2533 + 2534 2531 2533 + 2531 2534 2528 + 2072 2532 2058 + 2072 2071 2532 + 2532 2071 2533 + 2071 2080 2533 + 2533 2080 2535 + 2533 2535 2534 + 2534 2535 2536 + 2536 2537 2534 + 2528 2534 2537 + 2537 2538 2528 + 2528 2538 2539 + 2539 2540 2528 + 2541 2537 2536 + 2537 2541 2542 + 2542 2538 2537 + 2538 2542 2543 + 2543 2539 2538 + 2536 2544 2541 + 2541 2544 2545 + 2545 2546 2541 + 2542 2541 2546 + 2546 2547 2542 + 2543 2542 2547 + 2544 2536 2548 + 2548 2549 2544 + 2544 2549 2550 + 2550 2545 2544 + 2551 2545 2550 + 2545 2551 2552 + 2552 2546 2545 + 2547 2546 2552 + 2548 2536 2553 + 2553 2554 2548 + 2548 2554 2555 + 2555 2556 2548 + 2549 2548 2556 + 2557 2553 2536 + 2520 2558 2521 + 2520 2559 2558 + 2040 2039 2500 + 2500 2560 2040 + 2484 2561 2485 + 2562 2561 2484 + 2484 2563 2562 + 2562 2563 2564 + 2564 2565 2562 + 2566 2562 2565 + 2567 2562 2566 + 2563 2484 2483 + 2483 2493 2563 + 2564 2563 2493 + 2493 2568 2564 + 2513 2564 2568 + 2564 2513 2565 + 2513 2569 2565 + 2565 2569 2570 + 2570 2571 2565 + 2565 2571 2566 + 2492 2568 2493 + 2492 2508 2568 + 2568 2508 2513 + 2569 2513 2512 + 2512 2572 2569 + 2569 2572 2573 + 2573 2570 2569 + 2574 2570 2573 + 2570 2574 2575 + 2575 2571 2570 + 2571 2575 2576 + 2576 2566 2571 + 2577 2572 2512 + 2572 2577 2578 + 2578 2573 2572 + 2579 2573 2578 + 2573 2579 2574 + 2574 2579 2580 + 2580 2581 2574 + 2575 2574 2581 + 2581 2582 2575 + 2576 2575 2582 + 2583 2578 2577 + 2584 2578 2583 + 2578 2584 2579 + 2579 2584 2585 + 2585 2580 2579 + 2577 2586 2583 + 2539 2583 2586 + 2587 2583 2539 + 2583 2587 2584 + 2584 2587 2588 + 2588 2585 2584 + 2589 2585 2588 + 2580 2585 2589 + 2586 2590 2539 + 2539 2543 2587 + 2587 2543 2591 + 2591 2588 2587 + 2592 2588 2591 + 2588 2592 2589 + 2589 2592 2593 + 2594 2589 2593 + 2595 2589 2594 + 2589 2595 2580 + 2547 2591 2543 + 2592 2591 2547 + 2547 2593 2592 + 2552 2593 2547 + 2593 2552 2596 + 2596 2597 2593 + 2593 2597 2594 + 2598 2594 2597 + 2594 2598 2599 + 2599 2600 2594 + 2594 2600 2595 + 2596 2552 2601 + 2601 2602 2596 + 2603 2596 2602 + 2596 2603 2604 + 2604 2597 2596 + 2597 2604 2598 + 2552 2551 2601 + 2605 2601 2551 + 2606 2601 2605 + 2601 2606 2607 + 2607 2602 2601 + 2608 2602 2607 + 2602 2608 2603 + 2551 2550 2605 + 2605 2550 2549 + 2549 2609 2605 + 2610 2605 2609 + 2605 2610 2606 + 2606 2610 2611 + 2611 2612 2606 + 2606 2612 2613 + 2607 2606 2613 + 2556 2609 2549 + 2609 2556 142 + 142 2614 2609 + 2609 2614 2610 + 2611 2610 2614 + 2614 2615 2611 + 2616 2611 2615 + 2612 2611 2616 + 2612 2616 2617 + 2617 2613 2612 + 142 2556 2555 + 2555 2618 142 + 2619 2259 2258 + 2259 2619 2253 + 2254 2253 2619 + 2620 2254 2619 + 2621 2254 2620 + 2254 2621 2622 + 2622 2249 2254 + 2249 2622 2243 + 2619 2623 2620 + 2624 2620 2623 + 2620 2624 2625 + 2620 2625 2621 + 2626 2621 2625 + 2622 2621 2626 + 2627 2623 2619 + 2623 2627 2628 + 2628 2629 2623 + 2623 2629 2624 + 2630 2624 2629 + 2625 2624 2630 + 2630 2631 2625 + 2625 2631 2626 + 2619 2265 2627 + 2632 2627 2265 + 2628 2627 2632 + 2632 2633 2628 + 2628 2633 2634 + 2634 2635 2628 + 2629 2628 2635 + 2636 2265 2619 + 2637 2166 2165 + 2166 2637 2638 + 2638 2639 2166 + 2166 2639 2167 + 2640 2167 2639 + 2168 2167 2640 + 2640 2641 2168 + 2168 2641 2169 + 2639 2642 2640 + 2643 2640 2642 + 2641 2640 2643 + 2643 2644 2641 + 2641 2644 2645 + 2645 2169 2641 + 2646 2169 2645 + 2169 2646 2164 + 2647 2642 2639 + 2642 2647 2648 + 2648 2649 2642 + 2642 2649 2643 + 2650 2643 2649 + 2644 2643 2650 + 2650 2651 2644 + 2644 2651 2652 + 2652 2645 2644 + 2653 2648 2647 + 2654 2648 2653 + 2648 2654 2649 + 2649 2654 2650 + 2650 2654 2655 + 2656 2650 2655 + 2651 2650 2656 + 2647 2657 2653 + 2657 2658 2653 + 2659 2653 2658 + 2659 2660 2653 + 2653 2660 2654 + 2661 2657 2647 + 2662 2657 2661 + 2657 2662 2663 + 2663 2658 2657 + 2663 2664 2658 + 2658 2664 2659 + 2659 2664 16 + 2647 2638 2661 + 2176 2661 2638 + 2665 2661 2176 + 2661 2665 2662 + 2666 2638 2647 + 2638 2667 2176 + 2176 2180 2665 + 2665 2180 2668 + 2668 2669 2665 + 2662 2665 2669 + 2669 2670 2662 + 2662 2670 2671 + 2663 2662 2671 + 2672 2663 2671 + 2671 2673 2672 + 2184 2668 2180 + 2674 2668 2184 + 2668 2674 2675 + 2675 2669 2668 + 2669 2675 2676 + 2676 2670 2669 + 2670 2676 2677 + 2677 2671 2670 + 2184 2188 2674 + 2674 2188 2678 + 2678 2679 2674 + 2675 2674 2679 + 2679 2680 2675 + 2676 2675 2680 + 2680 2681 2676 + 2677 2676 2681 + 2192 2678 2188 + 2682 2678 2192 + 2678 2682 2683 + 2683 2679 2678 + 2679 2683 2684 + 2684 2680 2679 + 2680 2684 2685 + 2685 2681 2680 + 2192 2197 2682 + 2682 2197 2686 + 2686 2687 2682 + 2683 2682 2687 + 2687 2688 2683 + 2683 2688 2689 + 2684 2683 2689 + 2689 2690 2684 + 2685 2684 2690 + 2691 2686 2197 + 2692 2686 2691 + 2686 2692 2693 + 2693 2687 2686 + 2693 2688 2687 + 2688 2693 2694 + 2694 2689 2688 + 2197 2196 2691 + 2202 2691 2196 + 2695 2691 2202 + 2691 2695 2692 + 2692 2695 2696 + 2696 2697 2692 + 2692 2697 2694 + 2694 2693 2692 + 2202 2698 2695 + 2695 2698 2699 + 2699 2696 2695 + 2700 2696 2699 + 2696 2700 2701 + 2698 2202 2201 + 2201 2702 2698 + 2698 2702 2703 + 2703 2699 2698 + 2704 2699 2703 + 2699 2704 2700 + 2700 2704 2705 + 2705 2706 2700 + 2701 2700 2706 + 2702 2201 2206 + 2206 2707 2702 + 2702 2707 2708 + 2708 2703 2702 + 2709 2703 2708 + 2703 2709 2704 + 2704 2709 2710 + 2710 2705 2704 + 2707 2206 2210 + 2210 2711 2707 + 2707 2711 2712 + 2712 2708 2707 + 2713 2708 2712 + 2708 2713 2709 + 2709 2713 2714 + 2714 2710 2709 + 2711 2210 2214 + 2214 2715 2711 + 2711 2715 2716 + 2716 2712 2711 + 2717 2712 2716 + 2712 2717 2713 + 2713 2717 2718 + 2718 2714 2713 + 2715 2214 2218 + 2218 2719 2715 + 2715 2719 2720 + 2720 2716 2715 + 2721 2716 2720 + 2716 2721 2717 + 2717 2721 2722 + 2722 2718 2717 + 2719 2218 2723 + 2723 2724 2719 + 2719 2724 2725 + 2725 2720 2719 + 2726 2720 2725 + 2720 2726 2721 + 2721 2726 2727 + 2727 2722 2721 + 2723 2218 2223 + 2728 2723 2223 + 2729 2723 2728 + 2729 2724 2723 + 2724 2729 2730 + 2730 2725 2724 + 2730 2731 2725 + 2725 2731 2726 + 2726 2731 2732 + 2223 2733 2728 + 2734 2728 2733 + 2734 2735 2728 + 2728 2735 2729 + 2729 2735 2736 + 2736 2730 2729 + 2737 2730 2736 + 2738 2733 2223 + 2738 2739 2733 + 2733 2739 2734 + 2740 2734 2739 + 2735 2734 2740 + 2740 2741 2735 + 2735 2741 2736 + 2223 2234 2738 + 2742 2738 2234 + 2739 2738 2742 + 2742 2743 2739 + 2739 2743 2740 + 2743 2744 2740 + 2744 2745 2740 + 2746 2740 2745 + 2746 2741 2740 + 2234 2747 2742 + 2748 2742 2747 + 2742 2748 2749 + 2749 2743 2742 + 2743 2749 2750 + 2750 2744 2743 + 2233 2747 2234 + 2751 2747 2233 + 2747 2751 2748 + 2752 2748 2751 + 2749 2748 2752 + 2752 2753 2749 + 2749 2753 2754 + 2754 2750 2749 + 2755 2750 2754 + 2744 2750 2755 + 2233 2239 2751 + 2751 2239 2238 + 2238 2756 2751 + 2751 2756 2752 + 2757 2752 2756 + 2752 2757 2758 + 2758 2753 2752 + 2753 2758 2759 + 2759 2754 2753 + 2760 2756 2238 + 2756 2760 2757 + 2757 2760 2761 + 2761 2762 2757 + 2758 2757 2762 + 2762 2763 2758 + 2758 2763 2764 + 2764 2759 2758 + 2238 2765 2760 + 2760 2765 2766 + 2766 2761 2760 + 2761 2766 2626 + 2626 2767 2761 + 2761 2767 2768 + 2768 2762 2761 + 2763 2762 2768 + 2765 2238 2237 + 2237 2243 2765 + 2765 2243 2622 + 2622 2766 2765 + 2626 2766 2622 + 2727 2726 2769 + 2767 2626 2631 + 2631 2770 2767 + 2767 2770 2771 + 2771 2768 2767 + 2772 2768 2771 + 2768 2772 2763 + 2763 2772 2773 + 2773 2764 2763 + 2770 2631 2630 + 2630 2774 2770 + 2770 2774 2775 + 2775 2771 2770 + 2776 2771 2775 + 2771 2776 2772 + 2772 2776 2777 + 2777 2773 2772 + 2774 2630 2778 + 2778 2779 2774 + 2774 2779 2780 + 2780 2775 2774 + 2781 2775 2780 + 2775 2781 2776 + 2776 2781 2782 + 2782 2777 2776 + 2778 2630 2629 + 2629 2783 2778 + 2784 2778 2783 + 2784 2779 2778 + 2779 2784 2785 + 2785 2780 2779 + 2786 2780 2785 + 2780 2786 2781 + 2781 2786 2787 + 2787 2782 2781 + 2635 2783 2629 + 2788 2783 2635 + 2783 2788 2784 + 2784 2788 2789 + 2789 2790 2784 + 2790 2791 2784 + 2791 2785 2784 + 2792 2785 2791 + 2785 2792 2786 + 2635 2793 2788 + 2788 2793 2794 + 2794 2789 2788 + 2795 2789 2794 + 2789 2795 2796 + 2796 2790 2789 + 2793 2635 2634 + 2634 2797 2793 + 2794 2793 2797 + 2797 2798 2794 + 2799 2794 2798 + 2794 2799 2795 + 2800 2797 2634 + 2797 2800 2801 + 2801 2798 2797 + 2801 2802 2798 + 2798 2802 2799 + 2799 2802 2803 + 2803 2804 2799 + 2795 2799 2804 + 2634 2805 2800 + 2800 2805 2806 + 2806 2807 2800 + 2801 2800 2807 + 2808 2801 2807 + 2802 2801 2808 + 2808 2809 2802 + 2802 2809 2803 + 2805 2634 2810 + 2810 2811 2805 + 2805 2811 2812 + 2812 2806 2805 + 2813 2806 2812 + 2813 2807 2806 + 2633 2810 2634 + 2814 2810 2633 + 2814 2811 2810 + 2811 2814 2815 + 2815 2812 2811 + 2812 2815 2816 + 2816 2817 2812 + 2812 2817 2813 + 2633 2818 2814 + 2814 2818 2819 + 2819 2815 2814 + 2816 2815 2819 + 2819 2820 2816 + 2816 2820 2821 + 2821 2822 2816 + 2817 2816 2822 + 2818 2633 2632 + 2632 2823 2818 + 2818 2823 2824 + 2824 2819 2818 + 2820 2819 2824 + 2824 2825 2820 + 2820 2825 2826 + 2826 2821 2820 + 2823 2632 2827 + 2827 2828 2823 + 2823 2828 2829 + 2829 2824 2823 + 2825 2824 2829 + 2829 2830 2825 + 2825 2830 2831 + 2831 2826 2825 + 2265 2827 2632 + 2264 2827 2265 + 2828 2827 2264 + 2264 2832 2828 + 2828 2832 2833 + 2833 2829 2828 + 2829 2833 2834 + 2834 2830 2829 + 2830 2834 2835 + 2835 2831 2830 + 2832 2264 2263 + 2263 2836 2832 + 2832 2836 2837 + 2837 2833 2832 + 2834 2833 2837 + 2837 2838 2834 + 2834 2838 2839 + 2839 2835 2834 + 2262 2836 2263 + 2836 2262 2261 + 2261 2840 2836 + 2836 2840 2837 + 2841 2837 2840 + 2841 2838 2837 + 2838 2841 2842 + 2842 2843 2838 + 2838 2843 2839 + 2844 2840 2261 + 2840 2844 2841 + 2841 2844 2845 + 2842 2841 2845 + 2845 2846 2842 + 2847 2842 2846 + 2847 2843 2842 + 2843 2847 2848 + 2848 2839 2843 + 2261 2272 2844 + 2844 2272 2849 + 2849 2845 2844 + 2845 2849 2850 + 2845 2850 2851 + 2851 2846 2845 + 2852 2846 2851 + 2846 2852 2847 + 2847 2852 2853 + 2853 2848 2847 + 2854 2849 2272 + 2850 2849 2854 + 2854 2287 2850 + 2850 2287 2855 + 2851 2850 2855 + 2856 2851 2855 + 2852 2851 2856 + 2856 2857 2852 + 2852 2857 2853 + 2272 2271 2854 + 2271 2277 2854 + 2282 2854 2277 + 2854 2282 2287 + 2287 2286 2855 + 2286 2858 2855 + 2858 2859 2855 + 2860 2855 2859 + 2860 2861 2855 + 2855 2861 2862 + 2862 2863 2855 + 2855 2863 2856 + 2864 2858 2286 + 2864 2865 2858 + 2858 2865 2866 + 2866 2859 2858 + 2866 2867 2859 + 2859 2867 2860 + 2286 2285 2864 + 2284 2864 2285 + 2865 2864 2284 + 2284 2868 2865 + 2865 2868 2869 + 2869 2866 2865 + 2867 2866 2869 + 2869 2870 2867 + 2860 2867 2870 + 2870 2871 2860 + 2861 2860 2871 + 2295 2868 2284 + 2868 2295 2300 + 2300 2872 2868 + 2868 2872 2869 + 2872 2873 2869 + 2874 2869 2873 + 2869 2874 2875 + 2875 2870 2869 + 2870 2875 2876 + 2876 2871 2870 + 2313 2872 2300 + 2872 2313 2877 + 2877 2873 2872 + 2877 2878 2873 + 2873 2878 2874 + 2879 2874 2878 + 2875 2874 2879 + 2879 2880 2875 + 2875 2880 2881 + 2881 2876 2875 + 2317 2877 2313 + 2878 2877 2317 + 2317 2882 2878 + 2878 2882 2879 + 2882 2883 2879 + 2884 2879 2883 + 2884 2880 2879 + 2880 2884 2885 + 2885 2881 2880 + 2886 2882 2317 + 2882 2886 2887 + 2887 2883 2882 + 2887 2888 2883 + 2883 2888 2884 + 2884 2888 2889 + 2885 2884 2889 + 2886 2317 2321 + 2321 2890 2886 + 2886 2890 2891 + 2887 2886 2891 + 2891 2892 2887 + 2888 2887 2892 + 2892 2889 2888 + 2890 2321 2320 + 2320 2331 2890 + 2890 2331 2893 + 2893 2891 2890 + 2891 2893 2894 + 2894 2895 2891 + 2891 2895 2896 + 2896 2892 2891 + 2892 2896 2897 + 2897 2889 2892 + 2898 2893 2331 + 2894 2893 2898 + 2898 2899 2894 + 2894 2899 2900 + 2900 2901 2894 + 2895 2894 2901 + 2331 2330 2898 + 2336 2898 2330 + 2898 2336 2902 + 2902 2899 2898 + 2899 2902 2903 + 2903 2900 2899 + 2900 2903 2904 + 2904 2905 2900 + 2900 2905 2906 + 2906 2901 2900 + 2902 2336 2335 + 2335 2907 2902 + 2902 2907 2908 + 2908 2903 2902 + 2904 2903 2908 + 2908 2909 2904 + 2910 2904 2909 + 2905 2904 2910 + 2910 2911 2905 + 2906 2905 2911 + 2907 2335 2340 + 2340 2912 2907 + 2907 2912 2913 + 2913 2908 2907 + 2908 2913 2914 + 2914 2909 2908 + 2909 2914 2915 + 2915 2916 2909 + 2909 2916 2910 + 2912 2340 2917 + 2917 2918 2912 + 2913 2912 2918 + 2918 2919 2913 + 2914 2913 2919 + 2919 2920 2914 + 2914 2920 2921 + 2921 2915 2914 + 2345 2917 2340 + 2922 2917 2345 + 2917 2922 2923 + 2923 2918 2917 + 2918 2923 2924 + 2924 2919 2918 + 2924 2920 2919 + 2920 2924 2925 + 2925 2921 2920 + 2345 2926 2922 + 2927 2922 2926 + 2923 2922 2927 + 2927 2928 2923 + 2924 2923 2928 + 2928 2925 2924 + 2929 2925 2928 + 2925 2929 2930 + 2930 2921 2925 + 2344 2926 2345 + 2926 2344 2931 + 2931 2932 2926 + 2926 2932 2927 + 2933 2927 2932 + 2927 2933 2934 + 2934 2928 2927 + 2928 2934 2929 + 2352 2931 2344 + 2935 2931 2352 + 2931 2935 2936 + 2936 2932 2931 + 2932 2936 2933 + 2933 2936 2937 + 2938 2933 2937 + 2934 2933 2938 + 2938 2939 2934 + 2929 2934 2939 + 2352 2940 2935 + 2935 2940 2941 + 2941 2942 2935 + 2936 2935 2942 + 2942 2937 2936 + 2943 2940 2352 + 2940 2943 2944 + 2944 2941 2940 + 2945 2941 2944 + 2941 2945 2946 + 2946 2942 2941 + 2942 2946 2947 + 2947 2937 2942 + 2352 2351 2943 + 2943 2351 2948 + 2948 2949 2943 + 2943 2949 2950 + 2950 2944 2943 + 2945 2944 2950 + 2950 2951 2945 + 2945 2951 2952 + 2952 2946 2945 + 2947 2946 2952 + 2357 2948 2351 + 2953 2948 2357 + 2949 2948 2953 + 2953 2954 2949 + 2949 2954 2955 + 2955 2956 2949 + 2949 2956 2950 + 2957 2950 2956 + 2951 2950 2957 + 2357 2958 2953 + 2959 2953 2958 + 2954 2953 2959 + 2959 2960 2954 + 2955 2954 2960 + 2960 2961 2955 + 2962 2955 2961 + 2955 2962 2956 + 2956 2962 2957 + 2363 2958 2357 + 2958 2363 2963 + 2963 2964 2958 + 2958 2964 2959 + 2965 2959 2964 + 2959 2965 2966 + 2966 2960 2959 + 2960 2966 2967 + 2967 2961 2960 + 2963 2363 2362 + 2362 2968 2963 + 2969 2963 2968 + 2963 2969 2970 + 2970 2964 2963 + 2964 2970 2965 + 2965 2970 2971 + 2971 2972 2965 + 2966 2965 2972 + 2973 2968 2362 + 2974 2968 2973 + 2968 2974 2969 + 2969 2974 2975 + 2975 2976 2969 + 2970 2969 2976 + 2976 2971 2970 + 2362 2361 2973 + 2408 2973 2361 + 2977 2973 2408 + 2973 2977 2974 + 2974 2977 2978 + 2978 2975 2974 + 2979 2975 2978 + 2975 2979 2980 + 2980 2976 2975 + 2976 2980 2981 + 2981 2971 2976 + 2408 2413 2977 + 2978 2977 2413 + 2413 2982 2978 + 2983 2978 2982 + 2978 2983 2979 + 2979 2983 2984 + 2984 2985 2979 + 2979 2985 2986 + 2986 2980 2979 + 2981 2980 2986 + 2987 2982 2413 + 2988 2982 2987 + 2982 2988 2983 + 2983 2988 2989 + 2989 2984 2983 + 2990 2984 2989 + 2984 2990 2991 + 2991 2985 2984 + 2413 2412 2987 + 2987 2412 2992 + 2993 2987 2992 + 2664 2663 2994 + 2663 2995 2994 + 1714 2996 1715 + 2996 1714 2997 + 2997 2989 2996 + 2996 2989 2988 + 2988 134 2996 + 2998 2996 134 + 2997 1714 1721 + 1721 2999 2997 + 2997 2999 3000 + 3000 2990 2997 + 2989 2997 2990 + 1727 2999 1721 + 2999 1727 3001 + 3001 3000 2999 + 3002 3000 3001 + 3000 3002 2991 + 2991 2990 3000 + 13 3001 1727 + 3002 3001 13 + 13 3003 3002 + 1727 3004 13 + 3004 3005 13 + 3006 13 3005 + 3005 3007 3006 + 1726 3004 1727 + 2153 3004 1726 + 3004 2153 3008 + 3008 3005 3004 + 3005 3008 3009 + 3009 3007 3005 + 3007 3009 3010 + 3010 3011 3007 + 3012 3007 3011 + 2164 3008 2153 + 3009 3008 2164 + 2164 2646 3009 + 3009 2646 3013 + 3013 3010 3009 + 3014 3010 3013 + 3011 3010 3014 + 3014 3015 3011 + 3011 3015 3016 + 3016 3017 3011 + 3011 3017 3018 + 2645 3013 2646 + 3013 2645 2652 + 2652 3019 3013 + 3013 3019 3014 + 3014 3019 3020 + 3020 3021 3014 + 3015 3014 3021 + 3021 3022 3015 + 3015 3022 3023 + 3016 3015 3023 + 3019 2652 3024 + 3024 3020 3019 + 3025 3020 3024 + 3020 3025 3026 + 3026 3021 3020 + 3021 3026 3027 + 3027 3022 3021 + 3022 3027 3028 + 3028 3023 3022 + 3024 2652 2651 + 2651 3029 3024 + 3030 3024 3029 + 3029 3031 3030 + 3030 3031 3032 + 2656 3029 2651 + 3029 2656 3033 + 3033 3031 3029 + 3031 3033 3034 + 3034 3032 3031 + 3033 2656 3035 + 3035 3036 3033 + 3034 3033 3036 + 3036 3037 3034 + 3038 3034 3037 + 3032 3034 3038 + 3039 3036 3035 + 3036 3039 3040 + 3040 3037 3036 + 3040 3041 3037 + 3037 3041 3038 + 3042 3040 3039 + 3041 3040 3042 + 3042 3043 3041 + 3038 3041 3043 + 3043 3044 3038 + 3044 3045 3038 + 3046 3038 3045 + 3038 3046 3032 + 3039 3047 3042 + 3047 3048 3042 + 3049 3042 3048 + 3049 3043 3042 + 3043 3049 3050 + 3050 3044 3043 + 3050 3051 3044 + 3044 3051 3052 + 3052 3045 3044 + 3053 3048 3047 + 3048 3053 3054 + 3054 3053 3055 + 3055 3056 3054 + 3047 3057 3053 + 3053 3057 3058 + 3055 3053 3058 + 3058 3059 3055 + 3060 3055 3059 + 3055 3060 3061 + 3061 3056 3055 + 3057 3047 3062 + 3057 3062 3063 + 3063 3058 3057 + 3064 3058 3063 + 3058 3064 3065 + 3065 3059 3058 + 3066 3059 3065 + 3059 3066 3060 + 3062 3047 3067 + 3067 3068 3062 + 3062 3068 2659 + 3063 3062 2659 + 3069 3063 2659 + 3070 3068 3067 + 3068 3070 2660 + 2660 2659 3068 + 2660 3070 3071 + 3052 3051 3072 + 3028 3027 3073 + 3024 3074 3025 + 3064 3063 3075 + 3075 3076 3064 + 3064 3076 3077 + 3077 3065 3064 + 3078 3065 3077 + 3065 3078 3066 + 3066 3078 3079 + 3079 3080 3066 + 3060 3066 3080 + 3080 3081 3060 + 3061 3060 3081 + 3077 3082 3078 + 3078 3082 3083 + 3079 3078 3083 + 3083 3084 3079 + 3085 3079 3084 + 3079 3085 3086 + 3086 3080 3079 + 3082 3077 2673 + 3082 2673 2671 + 2671 3083 3082 + 2677 3083 2671 + 3083 2677 3087 + 3087 3084 3083 + 3088 3084 3087 + 3084 3088 3085 + 2673 3077 15 + 15 3089 2673 + 2681 3087 2677 + 3090 3087 2681 + 3087 3090 3088 + 3088 3090 3091 + 3091 3092 3088 + 3085 3088 3092 + 3092 3093 3085 + 3086 3085 3093 + 2681 2685 3090 + 3090 2685 3094 + 3094 3091 3090 + 3095 3091 3094 + 3091 3095 3096 + 3096 3092 3091 + 3092 3096 3097 + 3097 3093 3092 + 2690 3094 2685 + 3098 3094 2690 + 3094 3098 3095 + 3095 3098 3099 + 3099 3100 3095 + 3096 3095 3100 + 3100 3101 3096 + 3097 3096 3101 + 2690 3102 3098 + 3098 3102 3103 + 3103 3099 3098 + 3104 3099 3103 + 3099 3104 3105 + 3105 3100 3099 + 3100 3105 3106 + 3106 3101 3100 + 3102 2690 2689 + 2689 3107 3102 + 3103 3102 3107 + 3107 3108 3103 + 3109 3103 3108 + 3103 3109 3104 + 3104 3109 3110 + 3110 3111 3104 + 3105 3104 3111 + 3107 2689 2694 + 3107 2694 3112 + 3112 3108 3107 + 3113 3108 3112 + 3108 3113 3109 + 3109 3113 3114 + 3114 3110 3109 + 3115 3110 3114 + 3110 3115 3116 + 3116 3111 3110 + 2697 3112 2694 + 3112 2697 2701 + 3117 3112 2701 + 3112 3117 3118 + 3117 2701 3119 + 3119 3120 3117 + 3113 3117 3120 + 3120 3114 3113 + 3121 3114 3120 + 3114 3121 3115 + 3115 3121 3122 + 3122 3123 3115 + 3116 3115 3123 + 2706 3119 2701 + 3124 3119 2706 + 3119 3124 3125 + 3125 3120 3119 + 3120 3125 3121 + 3121 3125 3126 + 3126 3122 3121 + 3126 3127 3122 + 3122 3127 3128 + 3128 3123 3122 + 2706 3129 3124 + 3124 3129 3130 + 3130 3131 3124 + 3124 3131 3126 + 3126 3125 3124 + 3129 2706 2705 + 2705 3132 3129 + 3130 3129 3132 + 3132 3133 3130 + 3134 3130 3133 + 3130 3134 3135 + 3135 3131 3130 + 3132 2705 2710 + 2710 3136 3132 + 3132 3136 3137 + 3137 3133 3132 + 3138 3133 3137 + 3133 3138 3134 + 3139 3134 3138 + 3135 3134 3139 + 3136 2710 2714 + 2714 3140 3136 + 3137 3136 3140 + 3140 3141 3137 + 3142 3137 3141 + 3137 3142 3138 + 3138 3142 3143 + 3143 3144 3138 + 3138 3144 3139 + 3140 2714 2718 + 2718 3145 3140 + 3140 3145 3146 + 3146 3141 3140 + 3147 3141 3146 + 3141 3147 3142 + 3143 3142 3147 + 3145 2718 2722 + 2722 3148 3145 + 3146 3145 3148 + 3148 3149 3146 + 3150 3146 3149 + 3146 3150 3147 + 3147 3150 3151 + 3151 3152 3147 + 3147 3152 3143 + 3148 2722 2727 + 2727 3153 3148 + 3148 3153 3154 + 3154 3149 3148 + 3155 3149 3154 + 3149 3155 3150 + 3151 3150 3155 + 3153 2727 115 + 115 3156 3153 + 3154 3153 3156 + 3156 3157 3154 + 3158 3154 3157 + 3154 3158 3155 + 115 2727 3159 + 3160 3026 3025 + 3027 3026 3160 + 3160 3161 3027 + 2987 134 2988 + 134 2987 3162 + 3162 1707 134 + 3163 1305 1304 + 3164 1305 3163 + 3164 3165 1305 + 3166 3165 3164 + 3167 3166 3164 + 3163 3168 3164 + 3169 3164 3168 + 3170 3169 3168 + 3168 3171 3170 + 3172 3170 3171 + 3171 3173 3172 + 3174 3168 3163 + 3168 3174 3175 + 3175 3171 3168 + 3173 3171 3175 + 3173 3175 1703 + 1703 150 3173 + 1703 3175 3174 + 150 1703 1702 + 150 1702 3176 + 3176 3177 150 + 150 3177 1293 + 1293 3172 150 + 1299 3172 1293 + 1701 3176 1702 + 138 3176 1701 + 1701 3178 138 + 3179 3178 1701 + 3177 2423 1293 + 2423 3177 3180 + 3181 2423 3180 + 3177 3176 3180 + 1272 1271 3182 + 3182 1271 3183 + 3183 3184 3182 + 3185 3182 3184 + 3182 3185 2460 + 3186 3182 2460 + 3182 3186 3187 + 1277 3183 1271 + 2451 3183 1277 + 3183 2451 3184 + 3184 2451 2450 + 2450 3188 3184 + 3184 3188 3185 + 2448 3185 3188 + 2448 2460 3185 + 2449 3188 2450 + 3188 2449 2448 + 3186 2460 2459 + 2459 3189 3186 + 1272 3186 3189 + 3189 1273 1272 + 3190 1273 3189 + 1273 3190 1265 + 3191 3189 2459 + 3189 3191 3190 + 3190 3191 3192 + 3192 3193 3190 + 1265 3190 3193 + 3194 1265 3193 + 1254 1265 3194 + 3194 1255 1254 + 2459 2458 3191 + 3192 3191 2458 + 2458 2469 3192 + 2474 3192 2469 + 3193 3192 2474 + 3193 2474 2473 + 2473 3195 3193 + 3193 3195 3194 + 3196 3194 3195 + 1255 3194 3196 + 3196 1256 1255 + 1256 3196 3197 + 3197 3198 1256 + 1256 3198 1248 + 3199 3195 2473 + 3195 3200 3196 + 3196 3200 2567 + 2567 3197 3196 + 2566 3197 2567 + 3198 3197 2566 + 2566 2576 3198 + 3198 2576 3201 + 3201 1248 3198 + 1248 3201 1243 + 1243 3201 2582 + 2582 1244 1243 + 3202 1244 2582 + 1244 3202 1236 + 2582 3201 2576 + 2582 2581 3202 + 3202 2581 2580 + 2580 2595 3202 + 1236 3202 2595 + 2595 2600 1236 + 1231 1236 2600 + 2600 2599 1231 + 1231 2599 1224 + 1225 1224 2599 + 2599 2598 1225 + 1226 1225 2598 + 2598 2604 1226 + 3203 1226 2604 + 1219 1226 3203 + 1219 3203 3204 + 3204 1220 1219 + 1220 3204 3205 + 1220 3205 1221 + 2604 2603 3203 + 3204 3203 2603 + 2603 2608 3204 + 3205 3204 2608 + 2608 3206 3205 + 1221 3205 3206 + 3206 3207 1221 + 3208 1221 3207 + 1221 3208 1213 + 1213 3208 3209 + 3209 1214 1213 + 2607 3206 2608 + 3206 2607 3210 + 3210 3207 3206 + 3207 3210 3211 + 3211 3212 3207 + 3207 3212 3208 + 3209 3208 3212 + 2613 3210 2607 + 3211 3210 2613 + 2613 3213 3211 + 3211 3213 3214 + 3214 3215 3211 + 3212 3211 3215 + 3215 3216 3212 + 3212 3216 3209 + 3213 2613 2617 + 2617 3217 3213 + 3213 3217 3218 + 3218 3214 3213 + 3219 3214 3218 + 3214 3219 3220 + 3220 3215 3214 + 3216 3215 3220 + 3217 2617 3221 + 3221 3222 3217 + 3218 3217 3222 + 3222 3223 3218 + 3224 3218 3223 + 3218 3224 3219 + 3225 3221 2617 + 3226 3221 3225 + 3221 3226 3227 + 3227 3222 3221 + 3222 3227 3228 + 3228 3223 3222 + 2617 2616 3225 + 2615 3225 2616 + 3229 3225 2615 + 3225 3229 3226 + 3226 3229 2097 + 3230 3226 2097 + 3227 3226 3230 + 3230 3231 3227 + 3228 3227 3231 + 2615 3232 3229 + 3229 3232 3233 + 3233 2097 3229 + 3232 2615 2614 + 2614 142 3232 + 3233 3232 142 + 2097 2101 3230 + 3234 3230 2101 + 3231 3230 3234 + 3234 3235 3231 + 3231 3235 3236 + 3236 3237 3231 + 3231 3237 3228 + 3238 3228 3237 + 3223 3228 3238 + 2101 2100 3234 + 3239 3234 2100 + 3235 3234 3239 + 3239 3240 3235 + 3235 3240 3241 + 3235 3241 3236 + 3241 3242 3236 + 3243 3236 3242 + 3236 3243 3244 + 3244 3237 3236 + 3237 3244 3238 + 3245 3238 3244 + 3246 3238 3245 + 3238 3246 3223 + 3241 3247 3242 + 3247 3248 3242 + 3242 3248 3249 + 3242 3249 3243 + 3243 3249 3250 + 3250 3251 3243 + 3251 3252 3243 + 3244 3243 3252 + 3252 3253 3244 + 3244 3253 3245 + 3254 3245 3253 + 3255 3245 3254 + 3245 3255 3246 + 3251 3256 3252 + 3256 3257 3252 + 3252 3257 3258 + 3258 3253 3252 + 3253 3258 3254 + 3259 3254 3258 + 3260 3254 3259 + 3254 3260 3255 + 3257 3256 3261 + 3223 3246 3224 + 3262 3224 3246 + 3219 3224 3262 + 3262 3263 3219 + 3219 3263 3264 + 3220 3219 3264 + 3246 3255 3262 + 3265 3262 3255 + 3263 3262 3265 + 3263 3265 3266 + 3266 3264 3263 + 3255 3260 3265 + 3266 3265 3260 + 3260 3267 3266 + 3268 3266 3267 + 3264 3266 3268 + 3268 3269 3264 + 3264 3269 3270 + 3270 3271 3264 + 3264 3271 3220 + 3259 3267 3260 + 3267 3259 3272 + 3272 3273 3267 + 3267 3273 3268 + 3268 3273 3274 + 3274 3275 3268 + 3269 3268 3275 + 3272 3259 3276 + 3276 3277 3272 + 3272 3277 3278 + 3279 3272 3278 + 3273 3272 3279 + 3279 3274 3273 + 3258 3276 3259 + 3280 3276 3258 + 3277 3276 3280 + 3280 3281 3277 + 3277 3281 3282 + 3282 3278 3277 + 3258 3257 3280 + 3283 3280 3257 + 1102 1101 1109 + 1109 3284 1102 + 1102 3284 3285 + 1103 1102 3285 + 3286 1103 3285 + 3287 1103 3286 + 3287 1097 1103 + 1097 3287 3288 + 3288 1098 1097 + 1092 1098 3288 + 3289 3286 3285 + 3290 3286 3289 + 3290 3291 3286 + 3286 3291 3287 + 3288 3287 3291 + 3285 3292 3289 + 3293 3289 3292 + 3294 3289 3293 + 3289 3294 3290 + 3290 3294 3295 + 3295 3296 3290 + 3291 3290 3296 + 3297 3292 3285 + 3297 3298 3292 + 3292 3298 3293 + 3285 3299 3297 + 3297 3299 3300 + 3300 3301 3297 + 3298 3297 3301 + 3301 3302 3298 + 3293 3298 3302 + 3303 3299 3285 + 3299 3303 3304 + 3304 3305 3299 + 3299 3305 3306 + 3305 3307 3306 + 3308 3307 3305 + 3285 3309 3303 + 3303 3309 3310 + 3310 3311 3303 + 3304 3303 3311 + 3311 3312 3304 + 3313 3304 3312 + 3305 3304 3313 + 3305 3313 3308 + 3309 3285 3314 + 3314 3315 3309 + 3309 3315 3316 + 3316 3310 3309 + 3317 3310 3316 + 3311 3310 3317 + 3311 3317 3318 + 3318 3312 3311 + 3319 3312 3318 + 3312 3319 3313 + 3308 3313 3319 + 3315 3320 3316 + 3320 3321 3316 + 3316 3321 3322 + 3316 3322 3317 + 3317 3322 3323 + 3318 3317 3323 + 3324 3318 3323 + 3319 3318 3324 + 3325 3320 3315 + 3320 3325 3326 + 3326 3327 3320 + 3321 3320 3327 + 3328 3321 3327 + 3322 3321 3328 + 3328 3329 3322 + 3322 3329 3323 + 3326 3325 3330 + 3327 3326 3331 + 1020 1019 3332 + 3332 3333 1020 + 3334 1020 3333 + 1020 3334 3335 + 3335 1021 1020 + 3336 3333 3332 + 3333 3336 3337 + 3337 3338 3333 + 3333 3338 3334 + 3334 3338 3339 + 3339 3340 3334 + 3335 3334 3340 + 3332 1027 3336 + 1027 3341 3336 + 3337 3336 3342 + 3342 3343 3337 + 3344 3337 3343 + 3338 3337 3344 + 3344 3339 3338 + 3339 3344 3345 + 3345 3346 3339 + 3339 3346 3347 + 3347 3340 3339 + 3340 3347 3348 + 3348 3349 3340 + 3340 3349 3335 + 3350 3335 3349 + 1021 3335 3350 + 3346 3345 3351 + 3351 3352 3346 + 3347 3346 3352 + 3353 3347 3352 + 3348 3347 3353 + 3353 3354 3348 + 3348 3354 3355 + 3355 3356 3348 + 3349 3348 3356 + 3357 3352 3351 + 3352 3357 3358 + 3358 3359 3352 + 3352 3359 3353 + 3360 3353 3359 + 3353 3360 3361 + 3361 3354 3353 + 3354 3361 3362 + 3362 3355 3354 + 3363 3358 3357 + 3364 3358 3363 + 3358 3364 3365 + 3365 3359 3358 + 3359 3365 3360 + 3360 3365 3366 + 3366 3367 3360 + 3361 3360 3367 + 3363 3368 3364 + 3369 3364 3368 + 3365 3364 3369 + 3369 3370 3365 + 3371 3370 3369 + 3368 3363 3372 + 3372 3373 3368 + 3368 3373 3374 + 3374 3375 3368 + 3368 3375 3369 + 3376 3369 3375 + 3372 3363 3377 + 3377 3378 3372 + 3379 3372 3378 + 3373 3372 3379 + 3379 3380 3373 + 3373 3380 3381 + 3381 3374 3373 + 3382 3374 3381 + 3375 3374 3382 + 3375 3382 3376 + 3376 3382 3383 + 3384 3376 3383 + 3378 3385 3379 + 3386 3379 3385 + 3380 3379 3386 + 3386 3387 3380 + 3380 3387 3388 + 3388 3389 3380 + 3380 3389 3381 + 3390 3385 3378 + 3391 3385 3390 + 3385 3391 3386 + 3386 3391 3392 + 3392 3393 3386 + 3387 3386 3393 + 3393 3394 3387 + 3387 3394 3395 + 3378 3396 3390 + 3397 3390 3396 + 3398 3390 3397 + 3390 3398 3391 + 3391 3398 3399 + 3399 3392 3391 + 3396 3378 3400 + 3401 3388 3387 + 3381 3383 3382 + 3383 3381 3402 + 3383 3402 3403 + 3403 3404 3383 + 3383 3404 3384 + 3402 3381 3389 + 3389 3405 3402 + 3402 3405 3406 + 3403 3402 3406 + 3406 3407 3403 + 3408 3403 3407 + 3403 3408 3409 + 3409 3404 3403 + 3389 3388 3405 + 3405 3388 3410 + 3410 3406 3405 + 972 533 532 + 3411 533 972 + 3412 3413 3414 + 3414 3415 3412 + 3412 3415 3416 + 3416 3417 3412 + 3418 3417 3416 + 3418 3416 3419 + 3419 3420 3418 + 3418 3420 3421 + 3420 3419 3422 + 3420 3422 3423 + 3422 3424 3423 + 3425 3426 181 + 181 3426 3427 + 3427 3428 181 + 3427 3429 3428 + 3430 3431 3432 + 3430 3432 3433 + 3433 3434 3430 + 3430 3434 3435 + 3436 3430 3435 + 3437 3430 3436 + 3436 3438 3437 + 3437 3438 3439 + 3440 3434 3433 + 3434 3440 3441 + 3441 3435 3434 + 3433 3442 3440 + 3440 3442 3443 + 3443 3444 3440 + 3445 3440 3444 + 3445 3441 3440 + 3443 3442 3446 + 3443 3446 410 + 410 409 3443 + 3447 3443 409 + 409 408 3447 + 3448 3447 408 + 3442 3449 3446 + 3450 3444 3443 + 3444 3450 3451 + 3444 3451 3445 + 3452 3445 3451 + 3452 3453 3445 + 3445 3453 3454 + 3454 3455 3445 + 3456 3455 3454 + 3450 3457 3451 + 3458 3451 3457 + 3451 3458 3452 + 3452 3458 472 + 3459 3452 472 + 3453 3452 3459 + 473 3457 3450 + 3458 3457 473 + 473 472 3458 + 3460 3461 3462 + 3460 3462 3463 + 3463 3464 3460 + 3460 3464 3465 + 3466 3463 3462 + 3467 3463 3466 + 3464 3463 3467 + 3464 3467 3468 + 3468 3469 3464 + 3469 3468 3470 + 3470 3471 3469 + 3472 3466 3462 + 3473 3466 3472 + 3474 3466 3473 + 3466 3474 3467 + 3474 3475 3467 + 3475 3468 3467 + 3470 3468 3475 + 3462 3476 3472 + 3476 3477 3472 + 3472 3477 3478 + 3472 3478 3473 + 3473 3478 3479 + 3480 3473 3479 + 3474 3473 3480 + 3480 3475 3474 + 3481 3475 3480 + 3475 3481 3470 + 3477 3476 3482 + 3483 3477 3482 + 3478 3477 3483 + 3483 3484 3478 + 3478 3484 3479 + 3476 3485 3482 + 3486 3482 3485 + 3482 3486 3487 + 3482 3487 3488 + 3488 3489 3482 + 3482 3489 3483 + 3490 3485 3476 + 3490 3491 3485 + 3485 3491 3486 + 3492 3486 3491 + 3487 3486 3492 + 3492 3493 3487 + 3488 3487 3493 + 3476 3494 3490 + 3490 3494 3495 + 3496 3490 3495 + 3491 3490 3496 + 3496 3497 3491 + 3491 3497 3492 + 3498 3492 3497 + 3492 3498 3493 + 3499 3496 3495 + 3500 3496 3499 + 3496 3500 3497 + 3497 3500 3498 + 3501 3498 3500 + 3493 3498 3501 + 3501 3502 3493 + 3493 3502 3503 + 3503 3504 3493 + 3504 3488 3493 + 3499 3505 3500 + 3500 3505 3501 + 3505 3506 3501 + 3507 3501 3506 + 3501 3507 3502 + 3502 3507 3508 + 3508 3509 3502 + 3502 3509 3503 + 3510 3505 3499 + 3505 3510 3511 + 3511 3506 3505 + 3511 3512 3506 + 3506 3512 3507 + 3508 3507 3512 + 3512 3513 3508 + 3514 3508 3513 + 3508 3514 3509 + 3509 3514 3515 + 3515 3516 3509 + 3509 3516 3503 + 3512 3511 3517 + 3517 3513 3512 + 3517 3308 3513 + 3513 3308 3514 + 3514 3308 3319 + 3515 3514 3319 + 3319 3518 3515 + 3519 3515 3518 + 3515 3519 3516 + 3517 3511 3520 + 3324 3518 3319 + 3521 3518 3324 + 3518 3521 3519 + 3522 3519 3521 + 3516 3519 3522 + 3522 3523 3516 + 3516 3523 3503 + 3521 3324 3524 + 3524 3525 3521 + 3521 3525 3526 + 3526 182 3521 + 182 3522 3521 + 3527 3522 182 + 3522 3527 3523 + 3323 3524 3324 + 3528 3524 3323 + 3528 3525 3524 + 3525 3528 3529 + 3529 3526 3525 + 3526 3529 1157 + 1157 3530 3526 + 182 3526 3530 + 3531 182 3530 + 3323 3532 3528 + 3529 3528 3532 + 3532 3533 3529 + 1157 3529 3533 + 3533 1152 1157 + 1149 1152 3533 + 3534 3532 3323 + 3532 3534 3535 + 3535 3533 3532 + 3533 3535 1149 + 1149 3535 3536 + 3536 3537 1149 + 3538 3537 3536 + 3536 1136 3538 + 3534 3323 3539 + 3539 3540 3534 + 3534 3540 3536 + 3536 3535 3534 + 3541 3539 3323 + 1137 3539 3541 + 1137 3540 3539 + 3540 1137 1136 + 1136 3536 3540 + 3542 3541 3323 + 3543 3541 3542 + 3543 1138 3541 + 3541 1138 1137 + 3544 3542 3323 + 3545 3542 3544 + 3545 3546 3542 + 3542 3546 3543 + 3543 3546 1126 + 1126 1133 3543 + 1138 3543 1133 + 3547 3544 3323 + 3548 3544 3547 + 3548 3549 3544 + 3544 3549 3545 + 3545 3549 3550 + 3550 1127 3545 + 1127 3546 3545 + 3546 1127 1126 + 3329 3547 3323 + 3551 3547 3329 + 3551 3552 3547 + 3547 3552 3548 + 3548 3552 3553 + 3548 3553 3554 + 3549 3548 3554 + 3554 3550 3549 + 3550 3554 3555 + 3329 3556 3551 + 3551 3556 3557 + 3552 3551 3557 + 3557 3553 3552 + 3558 3553 3557 + 3553 3558 1425 + 1425 3554 3553 + 3328 3556 3329 + 3556 3328 3327 + 3327 3559 3556 + 3556 3559 3557 + 3558 3557 3559 + 3559 3560 3558 + 3561 3559 3327 + 3530 1157 1156 + 1156 3562 3530 + 3530 3562 3563 + 3563 3564 3530 + 3565 3564 3563 + 1161 3562 1156 + 3562 1161 3566 + 3566 3563 3562 + 3563 3566 3567 + 3567 3568 3563 + 3563 3568 3565 + 3565 3568 3569 + 3569 3570 3565 + 3571 3570 3569 + 1165 3566 1161 + 3567 3566 1165 + 1165 1169 3567 + 3567 1169 3572 + 3572 3573 3567 + 3568 3567 3573 + 3573 3569 3568 + 3569 3573 3574 + 3574 3575 3569 + 3569 3575 3571 + 1174 3572 1169 + 3576 3572 1174 + 3572 3576 3574 + 3574 3573 3572 + 3576 1174 1173 + 1173 3577 3576 + 3574 3576 3577 + 3577 3578 3574 + 3575 3574 3578 + 3578 3579 3575 + 3575 3579 3580 + 3580 3571 3575 + 3571 3580 3581 + 3582 3571 3581 + 3583 3577 1173 + 3577 3583 3584 + 3584 3578 3577 + 3579 3578 3584 + 3584 3585 3579 + 3579 3585 3586 + 3586 3587 3579 + 3579 3587 3580 + 1173 1188 3583 + 3583 1188 3588 + 3588 3589 3583 + 3584 3583 3589 + 3589 3590 3584 + 3585 3584 3590 + 3590 3591 3585 + 3586 3585 3591 + 3591 3592 3586 + 3593 3592 3591 + 1193 3588 1188 + 3594 3588 1193 + 3594 3589 3588 + 3589 3594 3595 + 3595 3590 3589 + 3591 3590 3595 + 3595 3596 3591 + 3591 3596 3593 + 3597 3593 3596 + 3596 3598 3597 + 3599 3597 3598 + 1193 3600 3594 + 3595 3594 3600 + 3600 3601 3595 + 3596 3595 3601 + 3601 3598 3596 + 3598 3601 3602 + 3602 231 3598 + 3598 231 3599 + 3603 3600 1193 + 3600 3603 3602 + 3602 3601 3600 + 1193 3604 3603 + 3603 3604 3605 + 3605 3606 3603 + 3602 3603 3606 + 3606 3607 3602 + 231 3602 3607 + 3607 3608 231 + 231 3608 3609 + 3604 1193 1192 + 1192 3610 3604 + 3604 3610 3611 + 3611 3605 3604 + 3612 3605 3611 + 3612 3606 3605 + 3606 3612 3613 + 3613 3607 3606 + 3608 3607 3613 + 1191 3610 1192 + 3610 1191 3614 + 3614 3615 3610 + 3610 3615 3611 + 3616 3611 3615 + 3611 3616 3617 + 3617 3618 3611 + 3611 3618 3612 + 3613 3612 3618 + 1197 3614 1191 + 1202 3614 1197 + 3615 3614 1202 + 1202 3619 3615 + 3615 3619 3616 + 3620 3616 3619 + 3617 3616 3620 + 3620 3621 3617 + 3622 3617 3621 + 3618 3617 3622 + 3622 3623 3618 + 3618 3623 3613 + 3619 1202 3624 + 3624 3625 3619 + 3619 3625 3620 + 3626 3620 3625 + 3620 3626 3627 + 3627 3621 3620 + 1201 3624 1202 + 3628 3624 1201 + 3625 3624 3628 + 3628 3629 3625 + 3625 3629 3626 + 3626 3629 3630 + 3630 3631 3626 + 3627 3626 3631 + 1201 3632 3628 + 3628 3632 3633 + 3633 3634 3628 + 3629 3628 3634 + 3634 3635 3629 + 3629 3635 3630 + 3632 1201 1200 + 1200 3636 3632 + 3632 3636 3637 + 3637 3633 3632 + 3638 3633 3637 + 3633 3638 3639 + 3639 3634 3633 + 3635 3634 3639 + 3636 1200 1206 + 1206 3640 3636 + 3637 3636 3640 + 3640 3641 3637 + 3641 3642 3637 + 3638 3637 3642 + 3642 3643 3638 + 3638 3643 3644 + 3644 3639 3638 + 1211 3640 1206 + 3640 1211 3645 + 3645 3641 3640 + 3641 3645 3646 + 3646 3647 3641 + 3641 3647 3648 + 3648 3642 3641 + 3642 3648 3649 + 3649 3643 3642 + 3645 1211 1216 + 1216 3650 3645 + 3646 3645 3650 + 3650 3651 3646 + 3651 3652 3646 + 3652 3647 3646 + 3647 3652 3653 + 3648 3647 3653 + 3649 3648 3653 + 3654 3650 1216 + 3650 3654 3652 + 3652 3655 3650 + 1216 1215 3654 + 3654 1215 3656 + 3656 3657 3654 + 3652 3654 3657 + 3657 3653 3652 + 3653 3657 3658 + 3658 3659 3653 + 3653 3659 3649 + 1215 3660 3656 + 3661 3656 3660 + 3656 3661 3662 + 3656 3662 3658 + 3658 3657 3656 + 1214 3660 1215 + 3660 1214 3209 + 3209 3663 3660 + 3660 3663 3661 + 3661 3663 3664 + 3664 3665 3661 + 3662 3661 3665 + 3665 3666 3662 + 3662 3666 3667 + 3667 3658 3662 + 3659 3658 3667 + 3663 3209 3216 + 3216 3664 3663 + 3220 3664 3216 + 3664 3220 3271 + 3271 3665 3664 + 3665 3271 3270 + 3270 3666 3665 + 3666 3270 3668 + 3668 3667 3666 + 3667 3668 3669 + 3669 3670 3667 + 3667 3670 3659 + 3649 3659 3670 + 3670 3671 3649 + 3643 3649 3671 + 3668 3270 3269 + 3672 3668 3269 + 3669 3668 3672 + 3672 3673 3669 + 3669 3673 3674 + 3674 3675 3669 + 3670 3669 3675 + 3675 3671 3670 + 3269 3676 3672 + 3677 3672 3676 + 3672 3677 3678 + 3678 3673 3672 + 3673 3678 3679 + 3679 3674 3673 + 3275 3676 3269 + 3676 3275 3680 + 3676 3680 3677 + 3681 3677 3680 + 3678 3677 3681 + 3681 3682 3678 + 3679 3678 3682 + 3682 3683 3679 + 3684 3679 3683 + 3674 3679 3684 + 3680 3275 3274 + 3274 3685 3680 + 3680 3685 3681 + 3686 3681 3685 + 3681 3686 3687 + 3687 3682 3681 + 3682 3687 3688 + 3688 3683 3682 + 3689 3685 3274 + 3685 3689 3686 + 3686 3689 3690 + 3690 3691 3686 + 3687 3686 3691 + 3691 3692 3687 + 3687 3692 3693 + 3688 3687 3693 + 3274 3279 3689 + 3689 3279 3694 + 3694 3690 3689 + 3695 3690 3694 + 3690 3695 3696 + 3696 3691 3690 + 3692 3691 3696 + 3697 3694 3279 + 3695 3694 3697 + 3697 3698 3695 + 3698 3699 3695 + 3699 3700 3695 + 3700 3701 3695 + 3278 3697 3279 + 3702 3697 3278 + 3702 3698 3697 + 3698 3702 3703 + 3703 3699 3698 + 3704 3699 3703 + 3699 3704 3705 + 3705 3700 3699 + 3706 3700 3705 + 3700 3706 3701 + 3706 3707 3701 + 3278 3708 3702 + 3708 3703 3702 + 3708 3278 3282 + 3282 3709 3708 + 3708 3709 3710 + 3710 3711 3708 + 3711 3710 3712 + 3709 3282 3713 + 3713 3714 3709 + 3709 3714 3715 + 3716 3713 3282 + 3282 3281 3716 + 3281 3717 3716 + 3717 3281 3280 + 3718 3717 3280 + 3719 3714 3713 + 3705 3720 3706 + 3706 3720 3721 + 3721 3722 3706 + 3707 3706 3722 + 3723 3707 3722 + 3721 3724 3722 + 3722 3724 3723 + 3724 3725 3723 + 3723 3725 3726 + 3723 3726 3692 + 3692 3727 3723 + 3696 3727 3692 + 3726 3725 3438 + 3438 3693 3726 + 3692 3726 3693 + 3693 3438 3436 + 3693 3436 3456 + 3456 3728 3693 + 3693 3728 3688 + 3729 3688 3728 + 3683 3688 3729 + 3729 3730 3683 + 3683 3730 3684 + 3454 3728 3456 + 3728 3454 3729 + 3729 3454 3453 + 3453 3731 3729 + 3730 3729 3731 + 3731 3732 3730 + 3730 3732 3733 + 3733 3684 3730 + 3734 3684 3733 + 3684 3734 3674 + 3459 3731 3453 + 3732 3731 3459 + 3459 3735 3732 + 3732 3735 3736 + 3736 3733 3732 + 3733 3736 3737 + 3733 3737 3734 + 3734 3737 3738 + 3739 3734 3738 + 3674 3734 3739 + 3739 3675 3674 + 3735 3459 3740 + 3740 3741 3735 + 3735 3741 3742 + 3742 3736 3735 + 3737 3736 3742 + 3742 3738 3737 + 3740 3459 472 + 472 3743 3740 + 3744 3740 3743 + 3741 3740 3744 + 3744 3745 3741 + 3741 3745 3746 + 3746 3742 3741 + 3738 3742 3746 + 479 3743 472 + 3747 3743 479 + 3743 3747 3744 + 3744 3747 3748 + 3748 3749 3744 + 3745 3744 3749 + 3749 3750 3745 + 3746 3745 3750 + 479 3751 3747 + 3747 3751 3752 + 3752 3748 3747 + 3753 3748 3752 + 3748 3753 3754 + 3754 3749 3748 + 3750 3749 3754 + 3751 479 3755 + 3755 3756 3751 + 3752 3751 3757 + 3671 3675 3739 + 3739 3644 3671 + 3671 3644 3643 + 3644 3739 3758 + 3758 3639 3644 + 3639 3758 3635 + 3635 3758 3738 + 3738 3630 3635 + 3738 3758 3739 + 3746 3630 3738 + 3630 3746 3759 + 3759 3631 3630 + 3759 3760 3631 + 3631 3760 3627 + 3761 3627 3760 + 3621 3627 3761 + 3750 3759 3746 + 3760 3759 3750 + 3750 3762 3760 + 3760 3762 3761 + 3763 3761 3762 + 3761 3763 3764 + 3764 3765 3761 + 3761 3765 3621 + 3621 3765 3622 + 3754 3762 3750 + 3762 3754 3763 + 3766 3763 3754 + 3764 3763 3766 + 3766 3767 3764 + 3764 3767 3768 + 3768 3769 3764 + 3765 3764 3769 + 3769 3622 3765 + 3622 3769 3770 + 3770 3623 3622 + 3754 3753 3766 + 3771 3766 3753 + 3767 3766 3771 + 3771 3772 3767 + 3767 3772 3773 + 3773 3768 3767 + 3774 3768 3773 + 3768 3774 3770 + 3770 3769 3768 + 3753 3775 3771 + 3771 3775 3776 + 3776 3777 3771 + 3777 3778 3771 + 3772 3771 3778 + 3778 3779 3772 + 3773 3772 3779 + 3779 3780 3773 + 3752 3775 3753 + 3775 3752 3781 + 3781 3776 3775 + 3782 3781 3752 + 3778 3783 3779 + 3779 3783 3784 + 3784 3785 3779 + 3786 3609 3608 + 3608 3787 3786 + 3786 3787 3770 + 3770 3774 3786 + 3774 3788 3786 + 3789 3786 3788 + 3613 3787 3608 + 3787 3613 3623 + 3623 3770 3787 + 3790 3582 3581 + 3527 3790 3581 + 182 3790 3527 + 3581 3791 3527 + 3523 3527 3791 + 3791 3792 3523 + 3523 3792 3503 + 3793 3791 3581 + 3791 3793 3792 + 3792 3793 3794 + 3794 3503 3792 + 3794 3795 3503 + 3503 3795 3796 + 3796 3504 3503 + 3581 3797 3793 + 3797 3794 3793 + 3794 3797 3798 + 3795 3794 3798 + 3796 3795 3798 + 3799 3796 3798 + 3800 3796 3799 + 3796 3800 3504 + 3504 3800 3801 + 3801 3488 3504 + 3798 3797 3581 + 3581 3580 3798 + 3802 3798 3580 + 3798 3802 3799 + 3803 3799 3802 + 3803 3804 3799 + 3799 3804 3800 + 3801 3800 3804 + 3587 3802 3580 + 3587 3586 3802 + 3802 3586 3803 + 3805 3803 3586 + 3804 3806 3801 + 3806 3807 3801 + 3807 3808 3801 + 3489 3801 3808 + 3801 3489 3488 + 3809 3807 3806 + 3807 3809 3810 + 3807 3810 3484 + 3484 3808 3807 + 3483 3808 3484 + 3808 3483 3489 + 3806 3811 3809 + 3812 3809 3811 + 3810 3809 3812 + 3812 3813 3810 + 3810 3813 3479 + 3484 3810 3479 + 3811 3814 3812 + 3814 3815 3812 + 3816 3812 3815 + 3812 3816 3813 + 3813 3816 3817 + 3817 3479 3813 + 3815 3414 3816 + 3817 3816 3414 + 3414 3818 3817 + 3819 3817 3818 + 3817 3819 3479 + 3414 3820 3818 + 3820 3821 3818 + 3822 3823 3824 + 3822 3824 779 + 779 1015 3822 + 3825 3822 1015 + 3826 3822 3825 + 3825 3827 3826 + 3825 1015 671 + 670 3825 671 + 3825 670 3827 + 3827 670 669 + 669 668 3827 + 3828 3827 668 + 3829 3830 3831 + 3831 3830 3832 + 3832 3833 3831 + 3831 3833 3834 + 3834 3835 3831 + 3836 3831 3835 + 3832 3837 3833 + 3833 3837 3838 + 3838 3834 3833 + 3839 3834 3838 + 3834 3839 3840 + 3840 3835 3834 + 3837 3832 3841 + 3841 3842 3837 + 3837 3842 3843 + 3843 3838 3837 + 3844 3838 3843 + 3838 3844 3839 + 3841 3832 3845 + 3846 3847 3848 + 3847 3846 3849 + 3849 3850 3847 + 3847 3850 3851 + 3852 3849 3846 + 3853 3849 3852 + 3850 3849 3853 + 3853 3854 3850 + 3850 3854 3855 + 3855 3856 3850 + 3857 3852 3846 + 3858 3852 3857 + 3859 3852 3858 + 3852 3859 3853 + 3860 3853 3859 + 3854 3853 3860 + 3860 3861 3854 + 196 3854 3861 + 3862 3857 3846 + 3863 3857 3862 + 3857 3863 3864 + 3864 3865 3857 + 3857 3865 3858 + 3858 3865 3866 + 3859 3858 3866 + 3846 3867 3862 + 3868 3862 3867 + 3862 3868 3869 + 3862 3869 3863 + 3870 3863 3869 + 3864 3863 3870 + 3871 3867 3846 + 11 3867 3871 + 3867 11 3868 + 3872 3868 11 + 3869 3868 3872 + 3872 3873 3869 + 3869 3873 3870 + 3846 3874 3871 + 3871 3874 3875 + 3876 3871 3875 + 3877 3871 3876 + 3878 3874 3846 + 3874 3878 3879 + 3879 3875 3874 + 3880 3875 3879 + 3875 3880 3881 + 3881 3882 3875 + 3875 3882 3883 + 3883 3884 3875 + 3884 3876 3875 + 3880 3879 3885 + 3885 3886 3880 + 3880 3886 3887 + 3887 3881 3880 + 3888 3881 3887 + 3881 3888 3882 + 3882 3888 235 + 235 3883 3882 + 3889 3886 3885 + 3886 3889 27 + 27 3887 3886 + 237 3887 27 + 3885 3890 3889 + 3889 3890 3891 + 3891 3892 3889 + 27 3889 3892 + 3893 27 3892 + 3894 27 3893 + 3893 3895 3894 + 3890 3885 125 + 125 3896 3890 + 3891 3890 3896 + 3896 3897 3891 + 3898 3891 3897 + 3898 3892 3891 + 3892 3898 3899 + 3899 3900 3892 + 3892 3900 3893 + 3901 3896 125 + 3896 3901 3902 + 3902 3897 3896 + 3897 3902 3903 + 3903 3904 3897 + 3897 3904 3898 + 3898 3904 3899 + 125 3905 3901 + 3901 3905 3906 + 3906 3907 3901 + 3902 3901 3907 + 3907 3908 3902 + 3903 3902 3908 + 3905 125 3909 + 3909 3910 3905 + 3906 3905 3910 + 3910 3911 3906 + 3912 3906 3911 + 3906 3912 3913 + 3913 3907 3906 + 3909 125 3914 + 3887 3915 3888 + 3861 3916 196 + 3917 3916 3861 + 3918 3916 3917 + 3916 3918 197 + 197 3919 3916 + 3861 3920 3917 + 3917 3920 3921 + 3861 3860 3920 + 3920 3860 3922 + 3922 3923 3920 + 3922 3860 3859 + 3924 3922 3859 + 3925 3922 3924 + 3922 3925 3923 + 3923 3925 3926 + 3926 3927 3923 + 3923 3927 3928 + 3928 3917 3923 + 3859 3929 3924 + 3930 3924 3929 + 3924 3930 3931 + 3931 3932 3924 + 3924 3932 3925 + 3925 3932 3933 + 3933 3926 3925 + 3866 3929 3859 + 3934 3929 3866 + 3929 3934 3930 + 3930 3934 3935 + 3935 3936 3930 + 3931 3930 3936 + 3936 3937 3931 + 3938 3931 3937 + 3932 3931 3938 + 3866 3939 3934 + 3934 3939 3940 + 3940 3941 3934 + 3934 3941 3935 + 3939 3866 3865 + 3865 3864 3939 + 3940 3939 3864 + 3864 3942 3940 + 3943 3940 3942 + 3941 3940 3943 + 3943 3944 3941 + 3941 3944 3945 + 3945 3946 3941 + 3941 3946 3935 + 3870 3942 3864 + 3942 3870 3947 + 3947 3948 3942 + 3942 3948 3943 + 3943 3948 3949 + 3949 3950 3943 + 3944 3943 3950 + 3950 3951 3944 + 3945 3944 3951 + 3947 3870 3873 + 3873 3952 3947 + 3947 3952 3953 + 3953 3954 3947 + 3948 3947 3954 + 3954 3949 3948 + 3955 3949 3954 + 3949 3955 3956 + 3956 3950 3949 + 3952 3873 3872 + 3872 3957 3952 + 3952 3957 3958 + 3958 3953 3952 + 3959 3953 3958 + 3953 3959 3960 + 3960 3954 3953 + 3954 3960 3955 + 3957 3872 3961 + 3961 3962 3957 + 3957 3962 3963 + 3963 3964 3957 + 3964 3965 3957 + 3965 3958 3957 + 11 3961 3872 + 3966 3961 11 + 3966 3962 3961 + 3962 3966 3967 + 3967 3963 3962 + 3876 3963 3967 + 3963 3876 3884 + 3884 3964 3963 + 11 3877 3966 + 3877 3967 3966 + 3876 3967 3877 + 3968 3969 3970 + 3969 3968 3971 + 3971 3972 3969 + 3969 3972 3973 + 3973 3974 3969 + 3974 3975 3969 + 3976 3969 3975 + 3977 3971 3968 + 3978 3971 3977 + 3972 3971 3978 + 3978 3979 3972 + 3972 3979 3980 + 3980 3973 3972 + 3968 3981 3977 + 3982 3977 3981 + 3983 3977 3982 + 3977 3983 3978 + 3984 3978 3983 + 3979 3978 3984 + 3984 3985 3979 + 3980 3979 3985 + 3986 3981 3968 + 3987 3981 3986 + 3981 3987 3982 + 3982 3987 3988 + 3988 3989 3982 + 3983 3982 3989 + 3968 3976 3986 + 3990 3991 3992 + 3990 3992 3993 + 3993 3994 3990 + 3990 3994 3995 + 3995 3996 3990 + 3997 3990 3996 + 3998 3993 3992 + 3999 3993 3998 + 3993 3999 4000 + 4000 3994 3993 + 3994 4000 4001 + 4001 3995 3994 + 3049 3998 3992 + 3048 3998 3049 + 4002 3998 3048 + 3998 4002 3999 + 3999 4002 3056 + 3056 4003 3999 + 4000 3999 4003 + 3992 3050 3049 + 3051 3050 3992 + 3992 3997 3051 + 4004 4005 4006 + 4005 4004 4007 + 4007 4008 4005 + 4009 4005 4008 + 4010 4005 4009 + 4009 3028 4010 + 4009 4011 3028 + 4007 4004 4012 + 4013 4007 4012 + 4014 4007 4013 + 4014 4008 4007 + 4008 4014 4015 + 4015 4016 4008 + 4008 4016 4009 + 4016 4017 4009 + 4017 4018 4009 + 4011 4009 4018 + 4013 4019 4014 + 4015 4014 4019 + 4019 4020 4015 + 4021 4015 4020 + 4015 4021 4022 + 4022 4016 4015 + 4016 4022 4023 + 4023 4017 4016 + 4024 4019 4013 + 4019 4024 4025 + 4025 4020 4019 + 4026 4020 4025 + 4020 4026 4021 + 4021 4026 4027 + 4027 4028 4021 + 4022 4021 4028 + 4013 4029 4024 + 4024 4029 4030 + 4030 4031 4024 + 4024 4031 4032 + 4032 4025 4024 + 4033 4025 4032 + 4025 4033 4026 + 4029 4013 3829 + 3829 3836 4029 + 3836 4030 4029 + 3835 4030 3836 + 4031 4030 3835 + 3835 3840 4031 + 4031 3840 4034 + 4034 4032 4031 + 4035 4032 4034 + 4032 4035 4033 + 4033 4035 4036 + 4036 4037 4033 + 4026 4033 4037 + 4037 4027 4026 + 4038 4034 3840 + 4039 4034 4038 + 4034 4039 4035 + 4035 4039 4040 + 4040 4036 4035 + 4041 4036 4040 + 4036 4041 4042 + 4042 4037 4036 + 3840 3839 4038 + 4043 4038 3839 + 4044 4038 4043 + 4038 4044 4039 + 4039 4044 4045 + 4045 4040 4039 + 4046 4040 4045 + 4040 4046 4041 + 3839 3844 4043 + 4047 4043 3844 + 4048 4043 4047 + 4043 4048 4044 + 4044 4048 4049 + 4049 4045 4044 + 4050 4045 4049 + 4045 4050 4046 + 3844 4051 4047 + 4052 4047 4051 + 4053 4047 4052 + 4047 4053 4048 + 4048 4053 4054 + 4054 4049 4048 + 4055 4049 4054 + 4049 4055 4050 + 3843 4051 3844 + 4051 3843 4056 + 4056 4057 4051 + 4051 4057 4052 + 4052 4057 4058 + 4059 4052 4058 + 4060 4052 4059 + 4052 4060 4053 + 4056 3843 3842 + 3842 4061 4056 + 4062 4056 4061 + 4057 4056 4062 + 4062 4058 4057 + 4062 4063 4058 + 4058 4063 4064 + 4064 4065 4058 + 4058 4065 4059 + 4066 4061 3842 + 4061 4066 4067 + 4067 4068 4061 + 4061 4068 4062 + 4063 4062 4068 + 3842 3841 4066 + 4066 3841 3032 + 3032 3046 4066 + 4066 3046 4069 + 4069 4067 4066 + 4070 4067 4069 + 4067 4070 4071 + 4071 4068 4067 + 4068 4071 4063 + 3032 3841 4072 + 3045 4069 3046 + 4069 3045 3052 + 3052 4073 4069 + 4069 4073 4070 + 4074 4070 4073 + 4071 4070 4074 + 4074 4075 4071 + 4063 4071 4075 + 4075 4076 4063 + 4076 4064 4063 + 4077 4064 4076 + 4064 4077 4065 + 4073 3052 4078 + 4078 4079 4073 + 4073 4079 4074 + 4080 4074 4079 + 4074 4080 4081 + 4081 4075 4074 + 4075 4081 4082 + 4082 4076 4075 + 4078 3052 4083 + 4084 4085 4086 + 4086 4085 4087 + 4087 4088 4086 + 4089 4088 4087 + 4088 4089 4090 + 4090 4091 4088 + 4092 4088 4091 + 4093 4087 4085 + 4094 4087 4093 + 4087 4094 4089 + 4089 4094 4095 + 4095 4096 4089 + 4090 4089 4096 + 4085 4097 4093 + 4098 4093 4097 + 4099 4093 4098 + 4093 4099 4094 + 4094 4099 4100 + 4095 4094 4100 + 4101 4097 4085 + 4097 4101 4102 + 4102 4103 4097 + 4097 4103 4098 + 4104 4098 4103 + 4105 4098 4104 + 4098 4105 4099 + 4085 4106 4101 + 4091 4107 4092 + 4108 4109 4110 + 4110 4109 4111 + 4111 4112 4110 + 4113 4110 4112 + 4114 4110 4113 + 4110 4114 4115 + 4116 4111 4109 + 4117 4111 4116 + 4111 4117 4118 + 4118 4112 4111 + 4112 4118 4119 + 4119 4120 4112 + 4112 4120 4113 + 4109 4121 4116 + 4122 4116 4121 + 4123 4116 4122 + 4116 4123 4117 + 4124 4117 4123 + 4118 4117 4124 + 4124 4125 4118 + 4119 4118 4125 + 4126 4121 4109 + 4109 4127 4126 + 4126 4127 4128 + 4128 4129 4126 + 4130 4126 4129 + 4131 4126 4130 + 3946 4129 4128 + 4129 3946 3945 + 4129 3945 4130 + 3951 4130 3945 + 4132 4130 3951 + 4130 4132 4121 + 4121 4132 4122 + 4128 3935 3946 + 3935 4128 4133 + 3935 4133 4134 + 4134 3936 3935 + 3936 4134 4135 + 4135 3937 3936 + 4133 4128 4136 + 4136 4114 4133 + 4133 4114 4137 + 4137 4134 4133 + 4135 4134 4137 + 4137 4138 4135 + 4139 4135 4138 + 3937 4135 4139 + 4139 4140 3937 + 3937 4140 3938 + 4113 4137 4114 + 4137 4113 4141 + 4141 4138 4137 + 4138 4141 4142 + 4142 4143 4138 + 4138 4143 4139 + 4144 4139 4143 + 4140 4139 4144 + 4141 4113 4120 + 4120 4145 4141 + 4142 4141 4145 + 4145 4146 4142 + 4147 4142 4146 + 4143 4142 4147 + 4147 4148 4143 + 4143 4148 4144 + 4149 4145 4120 + 4145 4149 4150 + 4150 4146 4145 + 4146 4150 4151 + 4151 4152 4146 + 4146 4152 4147 + 4153 4147 4152 + 4148 4147 4153 + 4120 4119 4149 + 4149 4119 4154 + 4154 4155 4149 + 4150 4149 4155 + 4155 4156 4150 + 4151 4150 4156 + 4156 4157 4151 + 4158 4151 4157 + 4152 4151 4158 + 4154 4119 4125 + 4125 4159 4154 + 4160 4154 4159 + 4154 4160 4161 + 4161 4155 4154 + 4155 4161 4162 + 4162 4156 4155 + 4156 4162 4163 + 4163 4157 4156 + 4164 4159 4125 + 4159 4164 4165 + 4159 4165 4160 + 4160 4165 4166 + 4167 4160 4166 + 4161 4160 4167 + 4167 4168 4161 + 4162 4161 4168 + 4125 4169 4164 + 4170 4164 4169 + 4165 4164 4170 + 4170 4166 4165 + 4124 4169 4125 + 4169 4124 4171 + 4171 4172 4169 + 4169 4172 4170 + 4172 4173 4170 + 4174 4170 4173 + 4166 4170 4174 + 4123 4171 4124 + 4175 4171 4123 + 4172 4171 4175 + 4175 4176 4172 + 4172 4176 4177 + 4177 4173 4172 + 4173 4177 4178 + 4178 4179 4173 + 4173 4179 4174 + 4123 4180 4175 + 4181 4175 4180 + 4176 4175 4181 + 4181 4182 4176 + 4177 4176 4182 + 4182 4183 4177 + 4183 4184 4177 + 4178 4177 4184 + 4122 4180 4123 + 4180 4122 4185 + 4185 4186 4180 + 4180 4186 4181 + 4187 4181 4186 + 4182 4181 4187 + 4187 4188 4182 + 4182 4188 4189 + 4189 4183 4182 + 4185 4122 4132 + 4132 4190 4185 + 4191 4185 4190 + 4186 4185 4191 + 4191 4192 4186 + 4186 4192 4187 + 4193 4187 4192 + 4188 4187 4193 + 3951 4190 4132 + 4190 3951 3950 + 3950 3956 4190 + 4190 3956 4191 + 4194 4191 3956 + 4192 4191 4194 + 4194 4195 4192 + 4192 4195 4193 + 4196 4193 4195 + 4197 4193 4196 + 4193 4197 4188 + 4188 4197 4198 + 4198 4189 4188 + 3956 3955 4194 + 4199 4194 3955 + 4195 4194 4199 + 4199 4200 4195 + 4195 4200 4196 + 4201 4196 4200 + 4202 4196 4201 + 4196 4202 4197 + 4197 4202 4203 + 4203 4198 4197 + 3955 3960 4199 + 4204 4199 3960 + 4200 4199 4204 + 4204 4205 4200 + 4200 4205 4201 + 4206 4201 4205 + 4207 4201 4206 + 4201 4207 4202 + 4202 4207 4208 + 4203 4202 4208 + 3960 3959 4204 + 4209 4204 3959 + 4205 4204 4209 + 4209 4210 4205 + 4205 4210 4206 + 4211 4206 4210 + 4212 4206 4211 + 4206 4212 4207 + 4207 4212 4213 + 4213 4208 4207 + 3959 4214 4209 + 4215 4209 4214 + 4210 4209 4215 + 4215 4216 4210 + 4210 4216 4211 + 4217 4211 4216 + 4218 4211 4217 + 4211 4218 4212 + 4213 4212 4218 + 3958 4214 3959 + 4214 3958 3965 + 3965 4219 4214 + 4214 4219 4215 + 4220 4215 4219 + 4216 4215 4220 + 4220 4221 4216 + 4216 4221 4217 + 4219 3965 4222 + 4222 4223 4219 + 4219 4223 4220 + 4224 4220 4223 + 4221 4220 4224 + 4224 4225 4221 + 4221 4225 4226 + 4217 4221 4226 + 4222 3965 3964 + 3964 4227 4222 + 4222 4227 4228 + 4229 4222 4228 + 4223 4222 4229 + 4229 4230 4223 + 4223 4230 4224 + 4231 4224 4230 + 4225 4224 4231 + 3884 4227 3964 + 4227 3884 3883 + 3883 4228 4227 + 235 4228 3883 + 4228 235 4232 + 4232 4233 4228 + 4228 4233 4229 + 4234 4229 4233 + 4230 4229 4234 + 4234 4235 4230 + 4230 4235 4231 + 4231 4235 4236 + 4237 4232 235 + 4238 4239 4240 + 4240 4241 4238 + 4238 4241 4242 + 4242 4243 4238 + 4244 4238 4243 + 4245 4238 4244 + 4244 4246 4245 + 4241 4240 4247 + 4247 4248 4241 + 4241 4248 4249 + 4249 4242 4241 + 4250 4242 4249 + 4242 4250 4251 + 4251 4243 4242 + 4247 4240 4252 + 4252 4253 4247 + 4254 4247 4253 + 4248 4247 4254 + 4254 4255 4248 + 4248 4255 4256 + 4256 4249 4248 + 4257 4252 4240 + 4258 4252 4257 + 4252 4258 4259 + 4259 4253 4252 + 4253 4259 4260 + 4260 4261 4253 + 4253 4261 4254 + 4240 238 4257 + 4262 4263 4246 + 4263 4262 4264 + 4264 4265 4263 + 4263 4265 4266 + 4266 4267 4263 + 4268 4263 4267 + 4267 240 4268 + 4264 4262 4269 + 4269 4270 4264 + 4271 4264 4270 + 4265 4264 4271 + 4271 4272 4265 + 4265 4272 4273 + 4273 4266 4265 + 4274 4269 4262 + 4275 4269 4274 + 4269 4275 4276 + 4276 4270 4269 + 4270 4276 4277 + 4277 4278 4270 + 4270 4278 4271 + 4262 4244 4274 + 4243 4274 4244 + 4279 4274 4243 + 4274 4279 4275 + 4275 4279 4280 + 4280 4281 4275 + 4276 4275 4281 + 4282 4244 4262 + 4243 4251 4279 + 4279 4251 4283 + 4283 4280 4279 + 4284 4280 4283 + 4280 4284 4285 + 4285 4281 4280 + 4281 4285 4286 + 4286 4287 4281 + 4281 4287 4276 + 4277 4276 4287 + 4288 4283 4251 + 4289 4283 4288 + 4283 4289 4284 + 4284 4289 4290 + 4290 4291 4284 + 4285 4284 4291 + 4291 4292 4285 + 4286 4285 4292 + 4251 4250 4288 + 4293 4288 4250 + 4294 4288 4293 + 4288 4294 4289 + 4289 4294 4295 + 4295 4290 4289 + 4296 4290 4295 + 4290 4296 4297 + 4297 4291 4290 + 4250 4298 4293 + 4299 4293 4298 + 4300 4293 4299 + 4293 4300 4294 + 4294 4300 4301 + 4301 4295 4294 + 4302 4295 4301 + 4295 4302 4296 + 4249 4298 4250 + 4298 4249 4256 + 4256 4303 4298 + 4298 4303 4299 + 4304 4299 4303 + 4305 4299 4304 + 4299 4305 4300 + 4300 4305 4306 + 4306 4301 4300 + 4307 4301 4306 + 4301 4307 4302 + 4303 4256 4308 + 4308 4309 4303 + 4303 4309 4304 + 4310 4304 4309 + 4311 4304 4310 + 4304 4311 4305 + 4305 4311 4312 + 4312 4306 4305 + 4308 4256 4255 + 4255 4313 4308 + 4314 4308 4313 + 4309 4308 4314 + 4314 4315 4309 + 4309 4315 4310 + 4316 4310 4315 + 4317 4310 4316 + 4310 4317 4311 + 4318 4313 4255 + 4313 4318 4319 + 4319 4320 4313 + 4313 4320 4314 + 4321 4314 4320 + 4315 4314 4321 + 4321 4322 4315 + 4315 4322 4316 + 4255 4254 4318 + 4318 4254 4261 + 4261 4323 4318 + 4319 4318 4323 + 4323 4324 4319 + 4325 4319 4324 + 4320 4319 4325 + 4325 4326 4320 + 4320 4326 4321 + 4327 4321 4326 + 4322 4321 4327 + 4328 4323 4261 + 4323 4328 4329 + 4329 4324 4323 + 4324 4329 4330 + 4330 4331 4324 + 4324 4331 4325 + 4332 4325 4331 + 4326 4325 4332 + 4261 4260 4328 + 4328 4260 4333 + 4333 4334 4328 + 4329 4328 4334 + 4334 4335 4329 + 4330 4329 4335 + 4335 4336 4330 + 4337 4330 4336 + 4331 4330 4337 + 4338 4333 4260 + 4333 4338 4339 + 4333 4339 4340 + 4340 4334 4333 + 4335 4334 4340 + 4340 4341 4335 + 4335 4341 4342 + 4342 4336 4335 + 4260 4259 4338 + 4343 4338 4259 + 4339 4338 4343 + 4343 4344 4339 + 4340 4339 4344 + 4345 4340 4344 + 4341 4340 4345 + 4259 4258 4343 + 4346 4343 4258 + 4343 4346 4347 + 4347 4344 4343 + 4344 4347 4348 + 4348 4349 4344 + 4344 4349 4350 + 4350 4345 4344 + 4258 4351 4346 + 4352 4346 4351 + 4347 4346 4352 + 4352 4353 4347 + 4348 4347 4353 + 4257 4351 4258 + 4351 4257 240 + 240 4354 4351 + 4351 4354 4352 + 4355 4352 4354 + 4353 4352 4355 + 240 4257 4356 + 4354 240 4267 + 4267 4357 4354 + 4354 4357 4355 + 4355 4357 4358 + 4358 4359 4355 + 4360 4355 4359 + 4355 4360 4353 + 4357 4267 4266 + 4266 4358 4357 + 4358 4266 4273 + 4273 4361 4358 + 4358 4361 4362 + 4362 4359 4358 + 4359 4362 4363 + 4363 4364 4359 + 4359 4364 4360 + 4361 4273 4365 + 4365 4366 4361 + 4361 4366 4367 + 4367 4362 4361 + 4363 4362 4367 + 4367 4368 4363 + 4369 4363 4368 + 4364 4363 4369 + 4365 4273 4272 + 4272 4370 4365 + 4371 4365 4370 + 4366 4365 4371 + 4371 4372 4366 + 4366 4372 4373 + 4373 4367 4366 + 4367 4373 4374 + 4374 4368 4367 + 4375 4370 4272 + 4370 4375 4376 + 4376 4377 4370 + 4370 4377 4371 + 4378 4371 4377 + 4372 4371 4378 + 4272 4271 4375 + 4375 4271 4278 + 4278 4379 4375 + 4376 4375 4379 + 4379 4380 4376 + 4381 4376 4380 + 4377 4376 4381 + 4381 4382 4377 + 4377 4382 4378 + 4383 4379 4278 + 4379 4383 4384 + 4384 4380 4379 + 4380 4384 4385 + 4385 4386 4380 + 4380 4386 4381 + 4387 4381 4386 + 4382 4381 4387 + 4278 4277 4383 + 4383 4277 4388 + 4388 4389 4383 + 4384 4383 4389 + 4389 4390 4384 + 4385 4384 4390 + 4390 4391 4385 + 4392 4385 4391 + 4393 4385 4392 + 4287 4388 4277 + 4394 4388 4287 + 4388 4394 4395 + 4395 4389 4388 + 4389 4395 4396 + 4396 4390 4389 + 4390 4396 4397 + 4397 4391 4390 + 4287 4286 4394 + 4394 4286 4398 + 4398 4399 4394 + 4395 4394 4399 + 4399 4400 4395 + 4396 4395 4400 + 4400 4401 4396 + 4397 4396 4401 + 4292 4398 4286 + 4402 4398 4292 + 4398 4402 4403 + 4403 4399 4398 + 4399 4403 4404 + 4404 4400 4399 + 4400 4404 4405 + 4405 4401 4400 + 4292 4406 4402 + 4407 4402 4406 + 4403 4402 4407 + 4407 4408 4403 + 4404 4403 4408 + 4409 4404 4408 + 4405 4404 4409 + 4406 4292 4291 + 4291 4297 4406 + 4406 4297 4410 + 4410 4411 4406 + 4406 4411 4407 + 4412 4407 4411 + 4407 4412 4408 + 4410 4297 4296 + 4296 4413 4410 + 4414 4410 4413 + 4411 4410 4414 + 4414 4415 4411 + 4411 4415 4412 + 4412 4415 4416 + 4416 4417 4412 + 4417 4418 4412 + 4419 4413 4296 + 4413 4419 4420 + 4420 4421 4413 + 4413 4421 4414 + 4414 4421 4422 + 4422 4423 4414 + 4415 4414 4423 + 4423 4416 4415 + 4296 4302 4419 + 4419 4302 4307 + 4307 4424 4419 + 4420 4419 4424 + 4424 4425 4420 + 4420 4425 4080 + 4080 4426 4420 + 4426 4427 4420 + 4421 4420 4427 + 4428 4424 4307 + 4428 4425 4424 + 4425 4428 4081 + 4081 4080 4425 + 4307 4429 4428 + 4428 4429 4082 + 4082 4081 4428 + 4306 4429 4307 + 4429 4306 4312 + 4312 4082 4429 + 4082 4312 4430 + 4430 4076 4082 + 4076 4430 4077 + 4077 4430 4317 + 4317 4431 4077 + 4065 4077 4431 + 4430 4312 4311 + 4311 4317 4430 + 4431 4059 4065 + 4432 4059 4431 + 4059 4432 4060 + 4060 4432 4433 + 4433 4434 4060 + 4053 4060 4434 + 4434 4054 4053 + 4431 4316 4432 + 4432 4316 4322 + 4322 4433 4432 + 4327 4433 4322 + 4433 4327 4435 + 4435 4434 4433 + 4434 4435 4436 + 4436 4054 4434 + 4054 4436 4055 + 4316 4431 4317 + 4079 4426 4080 + 4437 4426 4079 + 4426 4437 4438 + 4438 4427 4426 + 4438 4439 4427 + 4427 4439 4421 + 4421 4439 4422 + 4079 4078 4437 + 4437 4078 4440 + 4440 4441 4437 + 4437 4441 4442 + 4442 4438 4437 + 4439 4438 4442 + 4442 4422 4439 + 4443 4422 4442 + 4422 4443 4444 + 4444 4423 4422 + 3997 4440 4078 + 3996 4440 3997 + 4440 3996 4445 + 4445 4441 4440 + 4441 4445 4446 + 4446 4447 4441 + 4441 4447 4442 + 4443 4442 4447 + 4447 4448 4443 + 4443 4448 4449 + 4449 4444 4443 + 4445 3996 3995 + 3995 4450 4445 + 4446 4445 4450 + 4450 4451 4446 + 4452 4446 4451 + 4447 4446 4452 + 4452 4448 4447 + 4448 4452 4453 + 4453 4449 4448 + 4454 4450 3995 + 4450 4454 4455 + 4455 4451 4450 + 4451 4455 4456 + 4456 4457 4451 + 4451 4457 4452 + 4453 4452 4457 + 3995 4001 4454 + 4454 4001 4458 + 4458 4459 4454 + 4455 4454 4459 + 4459 4460 4455 + 4456 4455 4460 + 4460 4461 4456 + 4462 4456 4461 + 4457 4456 4462 + 4463 4458 4001 + 4464 4458 4463 + 4458 4464 4465 + 4465 4459 4458 + 4459 4465 4466 + 4466 4460 4459 + 4460 4466 4467 + 4467 4461 4460 + 4001 4000 4463 + 4003 4463 4000 + 4468 4463 4003 + 4463 4468 4464 + 4464 4468 4469 + 4469 4470 4464 + 4465 4464 4470 + 4470 4471 4465 + 4466 4465 4471 + 4471 4472 4466 + 4467 4466 4472 + 4003 4473 4468 + 4468 4473 4474 + 4474 4469 4468 + 4475 4469 4474 + 4469 4475 4476 + 4476 4470 4469 + 4470 4476 4477 + 4477 4471 4470 + 4473 4003 3056 + 3056 3061 4473 + 4473 3061 4478 + 4478 4474 4473 + 4479 4474 4478 + 4474 4479 4475 + 4475 4479 4480 + 4480 4481 4475 + 4476 4475 4481 + 4481 4482 4476 + 4477 4476 4482 + 3081 4478 3061 + 4483 4478 3081 + 4478 4483 4479 + 4479 4483 4484 + 4484 4480 4479 + 4485 4480 4484 + 4480 4485 4486 + 4486 4481 4480 + 4481 4486 4487 + 4487 4482 4481 + 3081 4488 4483 + 4483 4488 4489 + 4489 4484 4483 + 4490 4484 4489 + 4484 4490 4485 + 4485 4490 4491 + 4491 4492 4485 + 4486 4485 4492 + 4488 3081 3080 + 3080 3086 4488 + 4488 3086 4493 + 4493 4489 4488 + 4494 4489 4493 + 4489 4494 4490 + 4490 4494 4495 + 4495 4491 4490 + 4496 4491 4495 + 4491 4496 4497 + 4497 4492 4491 + 3093 4493 3086 + 4498 4493 3093 + 4493 4498 4494 + 4494 4498 4499 + 4499 4495 4494 + 4500 4495 4499 + 4495 4500 4496 + 4496 4500 4501 + 4501 4502 4496 + 4497 4496 4502 + 3093 3097 4498 + 4498 3097 4503 + 4503 4499 4498 + 4504 4499 4503 + 4499 4504 4500 + 4500 4504 4505 + 4505 4501 4500 + 4506 4501 4505 + 4501 4506 4507 + 4507 4502 4501 + 3101 4503 3097 + 4508 4503 3101 + 4503 4508 4504 + 4504 4508 4509 + 4509 4505 4504 + 4510 4505 4509 + 4505 4510 4506 + 4511 4506 4510 + 4507 4506 4511 + 3101 3106 4508 + 4508 3106 4512 + 4512 4509 4508 + 4513 4509 4512 + 4509 4513 4510 + 4510 4513 4514 + 4514 4515 4510 + 4510 4515 4511 + 4516 4512 3106 + 4517 4512 4516 + 4512 4517 4513 + 4514 4513 4517 + 4517 4518 4514 + 4519 4514 4518 + 4514 4519 4520 + 4520 4515 4514 + 3106 3105 4516 + 3111 4516 3105 + 4521 4516 3111 + 4516 4521 4517 + 4517 4521 4522 + 4522 4518 4517 + 4523 4518 4522 + 4518 4523 4519 + 4524 4519 4523 + 4520 4519 4524 + 3111 3116 4521 + 4522 4521 3116 + 3116 4525 4522 + 4526 4522 4525 + 4522 4526 4523 + 4523 4526 4527 + 4527 4528 4523 + 4523 4528 4524 + 3123 4525 3116 + 4529 4525 3123 + 4525 4529 4526 + 4527 4526 4529 + 4529 4530 4527 + 4531 4527 4530 + 4527 4531 4532 + 4532 4528 4527 + 4528 4532 4533 + 4533 4524 4528 + 3123 3128 4529 + 4529 3128 4534 + 4534 4530 4529 + 4535 4530 4534 + 4530 4535 4531 + 4536 4531 4535 + 4532 4531 4536 + 4536 4537 4532 + 4533 4532 4537 + 4534 3128 3127 + 4538 4534 3127 + 4539 4534 4538 + 4534 4539 4535 + 4535 4539 4540 + 4540 4541 4535 + 4535 4541 4536 + 4542 4536 4541 + 4542 4537 4536 + 3127 4543 4538 + 4544 4538 4543 + 4545 4538 4544 + 4538 4545 4539 + 4540 4539 4545 + 4546 4543 3127 + 4547 4543 4546 + 4543 4547 4544 + 4544 4547 3135 + 3135 4548 4544 + 4549 4544 4548 + 4544 4549 4545 + 3127 3126 4546 + 3131 4546 3126 + 4547 4546 3131 + 3131 3135 4547 + 3139 4548 3135 + 4550 4548 3139 + 4548 4550 4549 + 4551 4549 4550 + 4545 4549 4551 + 4551 4552 4545 + 4545 4552 4540 + 4553 4540 4552 + 4540 4553 4554 + 4554 4541 4540 + 4541 4554 4542 + 3139 4555 4550 + 4550 4555 4556 + 4556 4557 4550 + 4550 4557 4551 + 4558 4551 4557 + 4551 4558 4559 + 4559 4552 4551 + 4552 4559 4553 + 4555 3139 3144 + 3144 4560 4555 + 4556 4555 4560 + 4560 4561 4556 + 4562 4556 4561 + 4556 4562 4563 + 4563 4557 4556 + 4557 4563 4558 + 4564 4558 4563 + 4559 4558 4564 + 4560 3144 3143 + 3143 4565 4560 + 4560 4565 4566 + 4566 4561 4560 + 4567 4561 4566 + 4561 4567 4562 + 4568 4562 4567 + 4563 4562 4568 + 4568 4569 4563 + 4563 4569 4564 + 4565 3143 3152 + 3152 4570 4565 + 4566 4565 4570 + 4570 4571 4566 + 4572 4566 4571 + 4566 4572 4567 + 4567 4572 4573 + 4573 4574 4567 + 4567 4574 4568 + 4570 3152 3151 + 3151 4575 4570 + 4570 4575 4576 + 4576 4571 4570 + 4577 4571 4576 + 4571 4577 4572 + 4573 4572 4577 + 4575 3151 4578 + 4578 4579 4575 + 4576 4575 4579 + 4579 4580 4576 + 4581 4576 4580 + 4576 4581 4577 + 3155 4578 3151 + 4582 4578 3155 + 4579 4578 4582 + 4582 4583 4579 + 4579 4583 4584 + 4584 4580 4579 + 4585 4580 4584 + 4580 4585 4581 + 4586 4581 4585 + 4577 4581 4586 + 3155 3158 4582 + 4582 3158 4587 + 4587 4588 4582 + 4583 4582 4588 + 4588 4589 4583 + 4584 4583 4589 + 4589 4590 4584 + 4591 4584 4590 + 4584 4591 4585 + 3158 4592 4587 + 4592 2746 4587 + 2746 4593 4587 + 4594 4587 4593 + 4595 4587 4594 + 4587 4595 4596 + 4596 4588 4587 + 3157 4592 3158 + 4592 3157 4597 + 4592 4597 2741 + 2741 2746 4592 + 4597 3157 3156 + 3156 2736 4597 + 2741 4597 2736 + 3156 115 2736 + 2736 115 2737 + 2737 115 4598 + 2745 4593 2746 + 4593 2745 4599 + 4593 4599 4594 + 4594 4599 4600 + 4600 4601 4594 + 4602 4594 4601 + 4594 4602 4595 + 4599 2745 2744 + 2744 4600 4599 + 2755 4600 2744 + 4600 2755 4603 + 4603 4601 4600 + 4601 4603 4604 + 4604 4605 4601 + 4601 4605 4602 + 4602 4605 4606 + 4595 4602 4606 + 4603 2755 4607 + 4607 4608 4603 + 4604 4603 4608 + 4608 4609 4604 + 4610 4604 4609 + 4605 4604 4610 + 4610 4606 4605 + 2754 4607 2755 + 4611 4607 2754 + 4607 4611 4612 + 4612 4608 4607 + 4608 4612 4613 + 4613 4609 4608 + 4609 4613 4614 + 4614 4615 4609 + 4609 4615 4610 + 2754 2759 4611 + 4611 2759 2764 + 2764 4616 4611 + 4611 4616 4617 + 4617 4612 4611 + 4613 4612 4617 + 4617 4618 4613 + 4613 4618 4619 + 4619 4614 4613 + 4620 4614 4619 + 4615 4614 4620 + 4616 2764 2773 + 2773 4621 4616 + 4616 4621 4622 + 4622 4617 4616 + 4618 4617 4622 + 4622 4623 4618 + 4618 4623 4624 + 4624 4619 4618 + 4625 4619 4624 + 4619 4625 4620 + 4621 2773 2777 + 2777 4626 4621 + 4622 4621 4626 + 4626 4627 4622 + 4623 4622 4627 + 4627 4628 4623 + 4623 4628 4629 + 4629 4624 4623 + 4630 4624 4629 + 4624 4630 4625 + 4626 2777 2782 + 2782 4631 4626 + 4626 4631 4632 + 4632 4627 4626 + 4628 4627 4632 + 4632 4633 4628 + 4628 4633 4634 + 4634 4629 4628 + 4629 4634 4635 + 4629 4635 4630 + 4631 2782 2787 + 2787 4636 4631 + 4632 4631 4636 + 4636 4637 4632 + 4633 4632 4637 + 4637 4638 4633 + 4633 4638 4639 + 4639 4634 4633 + 4635 4634 4639 + 4636 2787 4640 + 4640 4641 4636 + 4636 4641 4642 + 4642 4637 4636 + 4638 4637 4642 + 4638 4642 4643 + 4643 4644 4638 + 4638 4644 4639 + 4640 2787 2786 + 2786 2792 4640 + 4645 4640 2792 + 4641 4640 4645 + 4645 4646 4641 + 4642 4641 4646 + 4646 4647 4642 + 4647 4648 4642 + 4648 4643 4642 + 4649 4643 4648 + 4644 4643 4649 + 2792 4650 4645 + 4651 4645 4650 + 4645 4651 4646 + 4646 4651 4652 + 4652 4647 4646 + 4653 4647 4652 + 4647 4653 4654 + 4654 4648 4647 + 2791 4650 2792 + 2791 4655 4650 + 4650 4655 4651 + 4652 4651 4655 + 4655 4656 4652 + 4657 4652 4656 + 4652 4657 4653 + 4653 4657 4658 + 4658 4659 4653 + 4654 4653 4659 + 4655 2791 2790 + 2790 4656 4655 + 4660 4656 2790 + 4656 4660 4657 + 4658 4657 4660 + 4660 4661 4658 + 4662 4658 4661 + 4658 4662 4663 + 4663 4659 4658 + 2790 2796 4660 + 4660 2796 4664 + 4664 4661 4660 + 4665 4661 4664 + 4661 4665 4662 + 4666 4662 4665 + 4663 4662 4666 + 4666 4667 4663 + 4668 4663 4667 + 4659 4663 4668 + 4664 2796 2795 + 2795 4669 4664 + 4670 4664 4669 + 4664 4670 4665 + 4665 4670 4671 + 4671 4672 4665 + 4665 4672 4666 + 2804 4669 2795 + 4669 2804 4673 + 4673 4674 4669 + 4669 4674 4670 + 4671 4670 4674 + 4674 4675 4671 + 4676 4671 4675 + 4671 4676 4677 + 4677 4672 4671 + 4673 2804 2803 + 2803 4678 4673 + 4679 4673 4678 + 4674 4673 4679 + 4679 4675 4674 + 4680 4675 4679 + 4675 4680 4676 + 4681 4676 4680 + 4677 4676 4681 + 4682 4678 2803 + 4678 4682 4683 + 4683 4684 4678 + 4678 4684 4679 + 4684 4685 4679 + 4686 4679 4685 + 4679 4686 4680 + 2803 4687 4682 + 4682 4687 4688 + 4688 4689 4682 + 4682 4689 4690 + 4690 4683 4682 + 4687 2803 2809 + 2809 4691 4687 + 4688 4687 4691 + 4691 4692 4688 + 4693 4688 4692 + 4688 4693 4694 + 4694 4689 4688 + 4689 4694 4695 + 4695 4690 4689 + 4691 2809 2808 + 4691 2808 4696 + 4696 4692 4691 + 4697 4692 4696 + 4692 4697 4693 + 4693 4697 4698 + 4698 4699 4693 + 4694 4693 4699 + 4699 4700 4694 + 4695 4694 4700 + 2807 4696 2808 + 4701 4696 2807 + 4696 4701 4697 + 4697 4701 4702 + 4702 4698 4697 + 4703 4698 4702 + 4698 4703 4704 + 4704 4699 4698 + 4699 4704 4705 + 4705 4700 4699 + 2807 2813 4701 + 4701 2813 4706 + 4706 4702 4701 + 4707 4702 4706 + 4702 4707 4703 + 4703 4707 4708 + 4708 4709 4703 + 4704 4703 4709 + 4709 4710 4704 + 4705 4704 4710 + 2813 2817 4706 + 2822 4706 2817 + 4711 4706 2822 + 4706 4711 4707 + 4707 4711 4712 + 4712 4708 4707 + 4713 4708 4712 + 4708 4713 4714 + 4714 4709 4708 + 4709 4714 4715 + 4715 4710 4709 + 2822 4716 4711 + 4711 4716 4717 + 4717 4712 4711 + 4718 4712 4717 + 4712 4718 4713 + 4713 4718 4719 + 4719 4720 4713 + 4714 4713 4720 + 4716 2822 2821 + 2821 4721 4716 + 4716 4721 4722 + 4722 4717 4716 + 4723 4717 4722 + 4717 4723 4718 + 4718 4723 4724 + 4724 4719 4718 + 4721 2821 2826 + 2826 4725 4721 + 4721 4725 4726 + 4726 4722 4721 + 4727 4722 4726 + 4722 4727 4723 + 4723 4727 4728 + 4728 4724 4723 + 4729 4724 4728 + 4719 4724 4729 + 4725 2826 2831 + 2831 4730 4725 + 4725 4730 4731 + 4731 4726 4725 + 4732 4726 4731 + 4726 4732 4727 + 4727 4732 4733 + 4733 4728 4727 + 4730 2831 2835 + 2835 4734 4730 + 4730 4734 4735 + 4735 4731 4730 + 4736 4731 4735 + 4731 4736 4732 + 4733 4732 4736 + 4736 4737 4733 + 4738 4733 4737 + 4728 4733 4738 + 4734 2835 2839 + 2839 4739 4734 + 4735 4734 4739 + 4739 4740 4735 + 4741 4735 4740 + 4735 4741 4736 + 4736 4741 4742 + 4742 4737 4736 + 4743 4737 4742 + 4737 4743 4738 + 4739 2839 2848 + 2848 4744 4739 + 4739 4744 4745 + 4745 4740 4739 + 4746 4740 4745 + 4740 4746 4741 + 4741 4746 4747 + 4747 4742 4741 + 4743 4742 4747 + 4747 4748 4743 + 4738 4743 4748 + 4744 2848 2853 + 2853 4749 4744 + 4744 4749 4750 + 4750 4745 4744 + 4751 4745 4750 + 4745 4751 4746 + 4746 4751 4752 + 4752 4747 4746 + 4747 4752 4753 + 4753 4748 4747 + 4749 2853 4754 + 4754 4755 4749 + 4749 4755 4756 + 4756 4750 4749 + 4757 4750 4756 + 4750 4757 4751 + 4752 4751 4757 + 4757 4758 4752 + 4753 4752 4758 + 4754 2853 2857 + 2857 4759 4754 + 4760 4754 4759 + 4755 4754 4760 + 4760 4761 4755 + 4755 4761 4762 + 4762 4756 4755 + 4763 4756 4762 + 4759 2857 2856 + 4759 2856 2863 + 2863 4764 4759 + 4759 4764 4760 + 4764 4765 4760 + 4766 4760 4765 + 4761 4760 4766 + 4766 4767 4761 + 4761 4767 4768 + 4768 4762 4761 + 2862 4764 2863 + 4764 2862 4769 + 4769 4765 4764 + 4770 4765 4769 + 4765 4770 4766 + 4771 4766 4770 + 4767 4766 4771 + 4771 4772 4767 + 4767 4772 4773 + 4773 4768 4767 + 4769 2862 2861 + 2861 4774 4769 + 4775 4769 4774 + 4769 4775 4770 + 4770 4775 4776 + 4776 4777 4770 + 4770 4777 4771 + 4778 4771 4777 + 4772 4771 4778 + 2871 4774 2861 + 4779 4774 2871 + 4774 4779 4775 + 4776 4775 4779 + 4779 4780 4776 + 4781 4776 4780 + 4776 4781 4782 + 4782 4777 4776 + 4777 4782 4778 + 2871 2876 4779 + 4779 2876 2881 + 2881 4780 4779 + 4783 4780 2881 + 4780 4783 4781 + 4781 4783 4784 + 4784 4785 4781 + 4782 4781 4785 + 4785 4786 4782 + 4782 4786 4787 + 4787 4778 4782 + 2881 2885 4783 + 4783 2885 4788 + 4788 4784 4783 + 4784 4788 4789 + 4789 4790 4784 + 4784 4790 4791 + 4791 4785 4784 + 4785 4791 4792 + 4792 4786 4785 + 2889 4788 2885 + 4789 4788 2889 + 2889 2897 4789 + 4789 2897 4793 + 4793 4794 4789 + 4790 4789 4794 + 4794 4795 4790 + 4790 4795 4796 + 4796 4791 4790 + 4792 4791 4796 + 4797 4793 2897 + 4793 4797 4798 + 4798 4799 4793 + 4793 4799 4800 + 4800 4794 4793 + 4794 4800 4801 + 4801 4795 4794 + 2897 2896 4797 + 4802 4797 2896 + 4798 4797 4802 + 4802 4803 4798 + 4804 4798 4803 + 4799 4798 4804 + 4804 4805 4799 + 4800 4799 4805 + 4805 4806 4800 + 4801 4800 4806 + 2896 2895 4802 + 2895 4807 4802 + 4808 4802 4807 + 4802 4808 4809 + 4809 4803 4802 + 4803 4809 4810 + 4810 4811 4803 + 4803 4811 4804 + 2901 4807 2895 + 4807 2901 2906 + 2906 4812 4807 + 4807 4812 4808 + 4813 4808 4812 + 4809 4808 4813 + 4813 4814 4809 + 4810 4809 4814 + 4812 2906 4815 + 4815 4816 4812 + 4812 4816 4813 + 4816 4817 4813 + 4818 4813 4817 + 4813 4818 4819 + 4819 4814 4813 + 2911 4815 2906 + 4820 4815 2911 + 4816 4815 4820 + 4816 4820 4821 + 4821 4817 4816 + 4822 4817 4821 + 4817 4822 4818 + 4818 4822 4823 + 4824 4818 4823 + 4819 4818 4824 + 2911 4825 4820 + 4821 4820 4825 + 4825 4826 4821 + 4827 4821 4826 + 4821 4827 4822 + 4822 4827 4828 + 4828 4829 4822 + 4822 4829 4823 + 4830 4825 2911 + 4825 4830 4831 + 4831 4826 4825 + 4826 4831 4832 + 4832 4833 4826 + 4826 4833 4827 + 4827 4833 4834 + 4834 4828 4827 + 2911 2910 4830 + 4830 2910 2916 + 2916 4835 4830 + 4830 4835 4836 + 4836 4831 4830 + 4832 4831 4836 + 4836 4837 4832 + 4832 4837 4838 + 4838 4839 4832 + 4833 4832 4839 + 4839 4834 4833 + 4840 4835 2916 + 4835 4840 4841 + 4841 4836 4835 + 4836 4841 4842 + 4842 4837 4836 + 4837 4842 4843 + 4843 4838 4837 + 2916 2915 4840 + 4840 2915 2921 + 2921 2930 4840 + 4840 2930 4844 + 4844 4841 4840 + 4842 4841 4844 + 4844 4845 4842 + 4842 4845 4846 + 4846 4843 4842 + 4847 4843 4846 + 4843 4847 4848 + 4848 4838 4843 + 2930 4849 4844 + 4850 4844 4849 + 4845 4844 4850 + 4845 4850 4851 + 4851 4852 4845 + 4845 4852 4846 + 4853 4849 2930 + 4854 4849 4853 + 4849 4854 4850 + 4850 4854 4855 + 4855 4851 4850 + 4856 4851 4855 + 4851 4856 4852 + 4852 4856 4857 + 4857 4846 4852 + 2930 2929 4853 + 2939 4853 2929 + 4858 4853 2939 + 4853 4858 4854 + 4854 4858 4859 + 4859 4860 4854 + 4854 4860 4855 + 2939 4861 4858 + 4859 4858 4861 + 4861 4862 4859 + 4862 4863 4859 + 4864 4859 4863 + 4859 4864 4860 + 4861 2939 2938 + 2938 4865 4861 + 4861 4865 4866 + 4866 4862 4861 + 4867 4862 4866 + 4862 4867 4868 + 4868 4863 4862 + 4868 4869 4863 + 4863 4869 4864 + 4865 2938 4870 + 4870 4871 4865 + 4865 4871 4872 + 4872 4866 4865 + 4873 4866 4872 + 4866 4873 4867 + 2937 4870 2938 + 4874 4870 2937 + 4870 4874 4875 + 4875 4871 4870 + 4871 4875 4876 + 4876 4872 4871 + 4872 4876 4877 + 4877 4878 4872 + 4872 4878 4873 + 2937 2947 4874 + 4874 2947 4879 + 4879 4880 4874 + 4875 4874 4880 + 4880 4881 4875 + 4876 4875 4881 + 4882 4876 4881 + 4877 4876 4882 + 2952 4879 2947 + 4879 2952 4883 + 4883 4884 4879 + 4879 4884 4885 + 4885 4880 4879 + 4881 4880 4885 + 4883 2952 2951 + 2951 4886 4883 + 4883 4886 4887 + 4887 4888 4883 + 4884 4883 4888 + 4888 4889 4884 + 4884 4889 4890 + 4890 4885 4884 + 2957 4886 2951 + 4886 2957 4891 + 4891 4887 4886 + 4892 4887 4891 + 4887 4892 4893 + 4893 4888 4887 + 4888 4893 4894 + 4894 4889 4888 + 4889 4894 4895 + 4895 4890 4889 + 4896 4891 2957 + 4897 4891 4896 + 4891 4897 4892 + 4892 4897 4898 + 4898 4899 4892 + 4893 4892 4899 + 4899 4900 4893 + 4894 4893 4900 + 2957 2962 4896 + 2961 4896 2962 + 4901 4896 2961 + 4896 4901 4897 + 4897 4901 4902 + 4902 4898 4897 + 4903 4898 4902 + 4898 4903 4904 + 4904 4899 4898 + 4899 4904 4905 + 4905 4900 4899 + 2961 2967 4901 + 4901 2967 4906 + 4906 4902 4901 + 4907 4902 4906 + 4902 4907 4903 + 4903 4907 4908 + 4908 4909 4903 + 4904 4903 4909 + 4909 4042 4904 + 4905 4904 4042 + 4910 4906 2967 + 4911 4906 4910 + 4906 4911 4907 + 4907 4911 4912 + 4912 4908 4907 + 4028 4908 4912 + 4908 4028 4027 + 4027 4909 4908 + 2967 2966 4910 + 2972 4910 2966 + 4913 4910 2972 + 4910 4913 4911 + 4911 4913 4914 + 4914 4912 4911 + 4915 4912 4914 + 4912 4915 4028 + 4028 4915 4022 + 4023 4022 4915 + 2972 4916 4913 + 4913 4916 4917 + 4917 4914 4913 + 4918 4914 4917 + 4914 4918 4915 + 4915 4918 4023 + 4919 4023 4918 + 4017 4023 4919 + 4916 2972 2971 + 2971 2981 4916 + 4916 2981 4920 + 4920 4917 4916 + 4921 4917 4920 + 4917 4921 4918 + 4918 4921 4919 + 4922 4919 4921 + 4017 4919 4922 + 4922 4018 4017 + 4923 4018 4922 + 4018 4923 4011 + 2986 4920 2981 + 4924 4920 2986 + 4920 4924 4921 + 4921 4924 4922 + 4924 4925 4922 + 4923 4922 4925 + 4925 3016 4923 + 4011 4923 3016 + 2986 4926 4924 + 4924 4926 4927 + 4927 4925 4924 + 3016 4925 4927 + 4927 3017 3016 + 3017 4927 3003 + 3003 4928 3017 + 4926 2986 2985 + 2985 2991 4926 + 4926 2991 4929 + 3003 4927 4926 + 4909 4027 4037 + 4037 4042 4909 + 4042 4041 4905 + 4930 4905 4041 + 4900 4905 4930 + 4930 4931 4900 + 4900 4931 4894 + 4895 4894 4931 + 4041 4046 4930 + 4932 4930 4046 + 4931 4930 4932 + 4932 4933 4931 + 4931 4933 4895 + 4934 4895 4933 + 4890 4895 4934 + 4046 4050 4932 + 4935 4932 4050 + 4933 4932 4935 + 4935 4936 4933 + 4933 4936 4934 + 4937 4934 4936 + 4938 4934 4937 + 4934 4938 4890 + 4890 4938 4939 + 4939 4885 4890 + 4050 4055 4935 + 4940 4935 4055 + 4936 4935 4940 + 4940 4941 4936 + 4936 4941 4937 + 4942 4937 4941 + 4943 4937 4942 + 4937 4943 4938 + 4939 4938 4943 + 4055 4436 4940 + 4944 4940 4436 + 4941 4940 4944 + 4944 4945 4941 + 4941 4945 4942 + 4946 4942 4945 + 4947 4942 4946 + 4942 4947 4943 + 4436 4435 4944 + 4948 4944 4435 + 4945 4944 4948 + 4948 4332 4945 + 4945 4332 4946 + 4331 4946 4332 + 4337 4946 4331 + 4946 4337 4947 + 4435 4327 4948 + 4326 4948 4327 + 4332 4948 4326 + 4885 4939 4881 + 4881 4939 4949 + 4949 4950 4881 + 4881 4950 4882 + 4951 4882 4950 + 4882 4951 4952 + 4882 4952 4877 + 4943 4949 4939 + 4953 4949 4943 + 4949 4953 4950 + 4950 4953 4951 + 4954 4951 4953 + 4952 4951 4954 + 4954 4342 4952 + 4952 4342 4341 + 4877 4952 4341 + 4955 4877 4341 + 4878 4877 4955 + 4943 4947 4953 + 4953 4947 4954 + 4947 4337 4954 + 4336 4954 4337 + 4954 4336 4342 + 4956 4417 4416 + 4416 4957 4956 + 4958 4956 4957 + 4957 4959 4958 + 4959 4960 4958 + 4961 4960 4959 + 4960 4961 4962 + 4957 4416 4423 + 4423 4444 4957 + 4957 4444 4449 + 4449 4959 4957 + 4963 4959 4449 + 4959 4963 4961 + 4961 4963 4964 + 4964 4965 4961 + 4962 4961 4965 + 4965 4966 4962 + 4449 4453 4963 + 4963 4453 4967 + 4967 4968 4963 + 4963 4968 4964 + 4969 4964 4968 + 4969 4970 4964 + 4964 4970 4971 + 4971 4965 4964 + 4971 4966 4965 + 4457 4967 4453 + 4462 4967 4457 + 4967 4462 4972 + 4972 4968 4967 + 4968 4972 4969 + 4969 4972 4973 + 4973 4974 4969 + 4970 4969 4974 + 4974 4975 4970 + 4970 4975 4976 + 4971 4970 4976 + 4972 4462 4977 + 4977 4973 4972 + 4978 4973 4977 + 4973 4978 4979 + 4979 4974 4973 + 4974 4979 4980 + 4980 4975 4974 + 4975 4980 4981 + 4981 4976 4975 + 4461 4977 4462 + 4982 4977 4461 + 4977 4982 4978 + 4978 4982 4983 + 4983 4984 4978 + 4979 4978 4984 + 4984 4985 4979 + 4980 4979 4985 + 4985 4986 4980 + 4981 4980 4986 + 4461 4467 4982 + 4982 4467 4987 + 4987 4983 4982 + 4988 4983 4987 + 4983 4988 4989 + 4989 4984 4983 + 4984 4989 4990 + 4990 4985 4984 + 4985 4990 4991 + 4991 4986 4985 + 4472 4987 4467 + 4992 4987 4472 + 4987 4992 4988 + 4988 4992 4993 + 4993 4994 4988 + 4989 4988 4994 + 4994 4995 4989 + 4990 4989 4995 + 4995 4996 4990 + 4991 4990 4996 + 4472 4997 4992 + 4992 4997 4998 + 4998 4999 4992 + 4992 4999 4993 + 4997 4472 4471 + 4471 4477 4997 + 4997 4477 5000 + 5000 4998 4997 + 5001 4998 5000 + 4998 5001 5002 + 5002 4999 4998 + 4999 5002 5003 + 5003 4993 4999 + 4482 5000 4477 + 5004 5000 4482 + 5000 5004 5001 + 5001 5004 5005 + 5005 5006 5001 + 5002 5001 5006 + 5006 5007 5002 + 5003 5002 5007 + 4482 4487 5004 + 5004 4487 5008 + 5008 5005 5004 + 5009 5005 5008 + 5005 5009 5010 + 5010 5006 5005 + 5006 5010 5011 + 5011 5007 5006 + 5012 5008 4487 + 5013 5008 5012 + 5008 5013 5009 + 5009 5013 5014 + 5014 5015 5009 + 5010 5009 5015 + 5015 5016 5010 + 5011 5010 5016 + 4487 4486 5012 + 4492 5012 4486 + 5017 5012 4492 + 5012 5017 5013 + 5013 5017 5018 + 5018 5014 5013 + 5019 5014 5018 + 5014 5019 5020 + 5020 5015 5014 + 5015 5020 5021 + 5021 5016 5015 + 4492 4497 5017 + 5017 4497 5022 + 5022 5018 5017 + 5023 5018 5022 + 5018 5023 5019 + 5024 5019 5023 + 5020 5019 5024 + 5024 5025 5020 + 5020 5025 5026 + 5026 5021 5020 + 4502 5022 4497 + 5027 5022 4502 + 5022 5027 5023 + 5023 5027 5028 + 5028 5029 5023 + 5023 5029 5024 + 5030 5024 5029 + 5024 5030 5031 + 5031 5025 5024 + 4502 4507 5027 + 5028 5027 4507 + 4507 5032 5028 + 5033 5028 5032 + 5028 5033 5034 + 5034 5029 5028 + 5029 5034 5030 + 5035 5030 5034 + 5031 5030 5035 + 4511 5032 4507 + 5036 5032 4511 + 5032 5036 5033 + 5037 5033 5036 + 5034 5033 5037 + 5037 5038 5034 + 5034 5038 5035 + 4511 5039 5036 + 5036 5039 5040 + 5040 5041 5036 + 5036 5041 5037 + 5042 5037 5041 + 5037 5042 5043 + 5043 5038 5037 + 5039 4511 4515 + 4515 4520 5039 + 5040 5039 4520 + 4520 5044 5040 + 5045 5040 5044 + 5040 5045 5046 + 5046 5041 5040 + 5041 5046 5042 + 5047 5042 5046 + 5043 5042 5047 + 4524 5044 4520 + 5048 5044 4524 + 5044 5048 5045 + 5049 5045 5048 + 5046 5045 5049 + 5049 5050 5046 + 5046 5050 5047 + 4524 4533 5048 + 5048 4533 5051 + 5051 5052 5048 + 5048 5052 5049 + 5053 5049 5052 + 5049 5053 5054 + 5054 5050 5049 + 5050 5054 5055 + 5055 5047 5050 + 5051 4533 4537 + 4537 5056 5051 + 5057 5051 5056 + 5051 5057 5058 + 5058 5052 5051 + 5052 5058 5053 + 5053 5058 5059 + 3409 5053 5059 + 5054 5053 3409 + 5060 5056 4537 + 5060 5061 5056 + 5056 5061 5057 + 5062 5057 5061 + 5058 5057 5062 + 5062 5059 5058 + 4537 4542 5060 + 5063 5060 4542 + 5064 5063 4542 + 5065 5064 4542 + 5066 5064 5065 + 5066 5067 5064 + 5064 5067 5068 + 5068 5069 5064 + 4542 4554 5065 + 5070 5065 4554 + 5071 5065 5070 + 5065 5071 5066 + 5072 5066 5071 + 5067 5066 5072 + 5072 5073 5067 + 5074 5067 5073 + 5075 5074 5073 + 4554 4553 5070 + 5070 4553 4559 + 4559 5076 5070 + 5077 5070 5076 + 5070 5077 5071 + 5071 5077 5078 + 5078 5079 5071 + 5071 5079 5072 + 4564 5076 4559 + 5080 5076 4564 + 5076 5080 5077 + 5078 5077 5080 + 5080 5081 5078 + 5082 5078 5081 + 5078 5082 5083 + 5083 5079 5078 + 4564 5084 5080 + 5080 5084 5085 + 5085 5081 5080 + 5086 5081 5085 + 5081 5086 5082 + 5087 5082 5086 + 5083 5082 5087 + 5084 4564 4569 + 4569 5088 5084 + 5085 5084 5088 + 5088 5089 5085 + 5090 5085 5089 + 5085 5090 5086 + 5086 5090 5091 + 5091 5092 5086 + 5086 5092 5087 + 5088 4569 4568 + 4568 5093 5088 + 5088 5093 5094 + 5094 5089 5088 + 5095 5089 5094 + 5089 5095 5090 + 5091 5090 5095 + 5095 5096 5091 + 5093 4568 4574 + 4574 5097 5093 + 5094 5093 5097 + 5097 5098 5094 + 5099 5094 5098 + 5094 5099 5095 + 5095 5099 168 + 168 5100 5095 + 5097 4574 4573 + 4573 5101 5097 + 5097 5101 5102 + 5102 5098 5097 + 5103 5098 5102 + 5098 5103 5099 + 168 5099 5103 + 5103 5104 168 + 5105 168 5104 + 5101 4573 5106 + 5106 5107 5101 + 5102 5101 5107 + 5107 5108 5102 + 5109 5102 5108 + 5102 5109 5103 + 5103 5109 5110 + 5110 5104 5103 + 4577 5106 4573 + 4586 5106 4577 + 5107 5106 4586 + 4586 5111 5107 + 5107 5111 5112 + 5112 5108 5107 + 5113 5108 5112 + 5108 5113 5109 + 5110 5109 5113 + 5111 4586 5114 + 5114 5115 5111 + 5112 5111 5115 + 5115 5116 5112 + 5117 5112 5116 + 5112 5117 5113 + 4585 5114 4586 + 5118 5114 4585 + 5115 5114 5118 + 5118 5119 5115 + 5115 5119 1658 + 1658 5116 5115 + 5120 5116 1658 + 5116 5120 5117 + 5121 5117 5120 + 5113 5117 5121 + 4585 4591 5118 + 5118 4591 5122 + 5122 1652 5118 + 5119 5118 1652 + 1652 1651 5119 + 1658 5119 1651 + 4590 5122 4591 + 5122 4590 5123 + 5122 5123 1653 + 1653 1652 5122 + 5123 4590 4589 + 4589 5124 5123 + 1653 5123 5124 + 1648 1653 5124 + 5124 5125 1648 + 5124 4589 4588 + 4588 4596 5124 + 5124 4596 5126 + 5126 5125 5124 + 5125 5126 5127 + 5127 5128 5125 + 5125 5128 5129 + 5129 5130 5125 + 1642 5130 5129 + 5126 4596 4595 + 4595 5131 5126 + 5127 5126 5131 + 5131 5132 5127 + 5127 5132 5133 + 5133 5134 5127 + 5128 5127 5134 + 5134 5135 5128 + 5129 5128 5135 + 4606 5131 4595 + 5132 5131 4606 + 4606 4610 5132 + 5132 4610 4615 + 4615 5133 5132 + 4620 5133 4615 + 5133 4620 5136 + 5136 5134 5133 + 5134 5136 5137 + 5137 5135 5134 + 5135 5137 5138 + 5138 1644 5135 + 5135 1644 5129 + 1643 5129 1644 + 5129 1643 1642 + 5139 5136 4620 + 5137 5136 5139 + 5139 5140 5137 + 5137 5140 5141 + 5141 5138 5137 + 1638 5138 5141 + 1644 5138 1638 + 4620 4625 5139 + 5142 5139 4625 + 5139 5142 5140 + 5140 5142 5143 + 5143 5144 5140 + 5140 5144 5141 + 5145 5141 5144 + 5146 5141 5145 + 5141 5146 1638 + 1638 5146 1639 + 4625 4630 5142 + 5143 5142 4630 + 4630 4635 5143 + 4635 5147 5143 + 5148 5143 5147 + 5144 5143 5148 + 5148 5149 5144 + 5144 5149 5145 + 4639 5147 4635 + 5150 5147 4639 + 5147 5150 5148 + 5148 5150 5151 + 5151 5152 5148 + 5149 5148 5152 + 5152 5153 5149 + 5145 5149 5153 + 4639 5154 5150 + 5150 5154 5155 + 5155 5151 5150 + 5156 5151 5155 + 5151 5156 5157 + 5157 5152 5151 + 5152 5157 5158 + 5158 5153 5152 + 5154 4639 4644 + 4644 5159 5154 + 5154 5159 5160 + 5155 5154 5160 + 5160 5161 5155 + 5162 5155 5161 + 5155 5162 5156 + 4649 5159 4644 + 5159 4649 5163 + 5163 5160 5159 + 5164 5160 5163 + 5160 5164 5165 + 5165 5161 5160 + 5161 5165 5166 + 5161 5166 5162 + 5167 5162 5166 + 5156 5162 5167 + 5163 4649 5168 + 5168 5169 5163 + 5170 5163 5169 + 5163 5170 5164 + 4648 5168 4649 + 5171 5168 4648 + 5168 5171 5172 + 5172 5169 5168 + 5169 5172 5173 + 5169 5173 5170 + 5174 5170 5173 + 5164 5170 5174 + 4648 4654 5171 + 5171 4654 5175 + 5175 5176 5171 + 5171 5176 5177 + 5172 5171 5177 + 5177 5178 5172 + 5173 5172 5178 + 5178 5179 5173 + 5173 5179 5174 + 4659 5175 4654 + 4668 5175 4659 + 5176 5175 4668 + 4668 5180 5176 + 5176 5180 5181 + 5181 5177 5176 + 5182 5177 5181 + 5177 5182 5183 + 5183 5178 5177 + 5179 5178 5183 + 5180 4668 5184 + 5184 5185 5180 + 5181 5180 5185 + 5186 5181 5185 + 5187 5181 5186 + 5181 5187 5182 + 4667 5184 4668 + 5188 5184 4667 + 5184 5188 5189 + 5189 5185 5184 + 5185 5189 5190 + 5190 5191 5185 + 5185 5191 5186 + 4667 5192 5188 + 5188 5192 5193 + 5193 5194 5188 + 5189 5188 5194 + 5194 5195 5189 + 5190 5189 5195 + 5192 4667 4666 + 4666 5196 5192 + 5192 5196 5197 + 5197 5193 5192 + 5198 5193 5197 + 5193 5198 5199 + 5199 5194 5193 + 5194 5199 5200 + 5200 5195 5194 + 5196 4666 4672 + 4672 4677 5196 + 5197 5196 4677 + 4677 5201 5197 + 5202 5197 5201 + 5197 5202 5198 + 5198 5202 5203 + 5203 5204 5198 + 5199 5198 5204 + 5204 5205 5199 + 5200 5199 5205 + 4681 5201 4677 + 5206 5201 4681 + 5201 5206 5202 + 5203 5202 5206 + 5206 5207 5203 + 5208 5203 5207 + 5203 5208 5209 + 5209 5204 5203 + 5204 5209 5210 + 5210 5205 5204 + 4681 5211 5206 + 5206 5211 5212 + 5212 5207 5206 + 5213 5207 5212 + 5207 5213 5208 + 5214 5208 5213 + 5209 5208 5214 + 5214 5215 5209 + 5210 5209 5215 + 5211 4681 5216 + 5216 5217 5211 + 5212 5211 5217 + 5217 5218 5212 + 5219 5212 5218 + 5212 5219 5213 + 4680 5216 4681 + 5220 5216 4680 + 5217 5216 5220 + 5220 5221 5217 + 5217 5221 5222 + 5222 5218 5217 + 5223 5218 5222 + 5218 5223 5219 + 5224 5219 5223 + 5213 5219 5224 + 4680 4686 5220 + 5220 4686 5225 + 5225 5226 5220 + 5221 5220 5226 + 5226 5227 5221 + 5222 5221 5227 + 5227 5228 5222 + 5229 5222 5228 + 5222 5229 5223 + 4685 5225 4686 + 5225 4685 5230 + 5230 5231 5225 + 5225 5231 5232 + 5232 5226 5225 + 5227 5226 5232 + 5232 5233 5227 + 5227 5233 5234 + 5234 5228 5227 + 5230 4685 4684 + 4684 5235 5230 + 5230 5235 5236 + 5236 5237 5230 + 5231 5230 5237 + 5237 5238 5231 + 5232 5231 5238 + 5238 5239 5232 + 5233 5232 5239 + 5235 4684 4683 + 4683 5240 5235 + 5235 5240 5241 + 5241 5236 5235 + 5242 5236 5241 + 5236 5242 5243 + 5243 5237 5236 + 5238 5237 5243 + 5240 4683 4690 + 4690 5244 5240 + 5240 5244 5245 + 5245 5241 5240 + 5246 5241 5245 + 5241 5246 5242 + 5242 5246 5247 + 5247 5248 5242 + 5243 5242 5248 + 5249 5244 4690 + 5244 5249 5250 + 5250 5245 5244 + 5245 5250 5251 + 5251 5252 5245 + 5245 5252 5246 + 5247 5246 5252 + 4690 4695 5249 + 5249 4695 5253 + 5253 5254 5249 + 5250 5249 5254 + 5254 5255 5250 + 5251 5250 5255 + 4700 5253 4695 + 5256 5253 4700 + 5253 5256 5257 + 5257 5254 5253 + 5254 5257 5258 + 5258 5255 5254 + 5255 5258 5259 + 5259 5260 5255 + 5255 5260 5251 + 4700 4705 5256 + 5256 4705 5261 + 5261 5262 5256 + 5257 5256 5262 + 5262 5263 5257 + 5258 5257 5263 + 5263 5264 5258 + 5259 5258 5264 + 4710 5261 4705 + 5265 5261 4710 + 5261 5265 5266 + 5266 5262 5261 + 5262 5266 5267 + 5267 5263 5262 + 5263 5267 5268 + 5268 5264 5263 + 4710 4715 5265 + 5265 4715 5269 + 5269 5270 5265 + 5266 5265 5270 + 5270 5271 5266 + 5267 5266 5271 + 5271 5272 5267 + 5268 5267 5272 + 5269 4715 4714 + 4714 5273 5269 + 5274 5269 5273 + 5270 5269 5274 + 5274 5275 5270 + 5270 5275 5276 + 5276 5271 5270 + 5272 5271 5276 + 4720 5273 4714 + 5273 4720 5277 + 5273 5277 5274 + 5274 5277 5278 + 5278 5279 5274 + 5279 5280 5274 + 5275 5274 5280 + 5277 4720 4719 + 4719 5278 5277 + 4729 5278 4719 + 5278 4729 5281 + 5281 5279 5278 + 5282 5279 5281 + 5279 5282 5283 + 5283 5280 5279 + 5280 5283 5284 + 5284 5285 5280 + 5280 5285 5275 + 5281 4729 5286 + 5286 5287 5281 + 5288 5281 5287 + 5281 5288 5282 + 5282 5288 5289 + 5289 5290 5282 + 5283 5282 5290 + 4728 5286 4729 + 4738 5286 4728 + 5286 4738 5291 + 5291 5287 5286 + 5292 5287 5291 + 5287 5292 5288 + 5288 5292 5293 + 5293 5289 5288 + 5294 5289 5293 + 5290 5289 5294 + 5295 5291 4738 + 5296 5291 5295 + 5291 5296 5292 + 5292 5296 5297 + 5297 5293 5292 + 5298 5293 5297 + 5293 5298 5294 + 4748 5295 4738 + 5299 5295 4748 + 5300 5295 5299 + 5295 5300 5296 + 5296 5300 5301 + 5301 5297 5296 + 5302 5297 5301 + 5297 5302 5298 + 4748 4753 5299 + 5303 5299 4753 + 5304 5299 5303 + 5299 5304 5300 + 5300 5304 5305 + 5305 5301 5300 + 5306 5301 5305 + 5301 5306 5302 + 4753 5307 5303 + 5308 5303 5307 + 5309 5303 5308 + 5303 5309 5304 + 5304 5309 5310 + 5310 5305 5304 + 4787 5305 5310 + 5305 4787 5306 + 4758 5307 4753 + 5311 5307 4758 + 5307 5311 5308 + 5311 5312 5308 + 4773 5308 5312 + 5308 4773 5309 + 5309 4773 4772 + 4772 5310 5309 + 4778 5310 4772 + 5310 4778 4787 + 4758 5313 5311 + 5311 5313 5314 + 5314 5312 5311 + 4768 5312 5314 + 5312 4768 4773 + 5313 4758 4757 + 4757 4763 5313 + 5313 4763 5314 + 4762 5314 4763 + 5314 4762 4768 + 5306 4787 4786 + 4786 4792 5306 + 5302 5306 4792 + 4792 5315 5302 + 5298 5302 5315 + 5315 5316 5298 + 5294 5298 5316 + 4796 5315 4792 + 5316 5315 4796 + 4796 5317 5316 + 5316 5317 5318 + 5318 5319 5316 + 5316 5319 5294 + 5320 5294 5319 + 5294 5320 5290 + 5317 4796 5321 + 5321 5322 5317 + 5318 5317 5322 + 5322 5323 5318 + 5324 5318 5323 + 5318 5324 5325 + 5325 5319 5318 + 5319 5325 5320 + 4795 5321 4796 + 5326 5321 4795 + 5321 5326 5327 + 5327 5322 5321 + 5322 5327 5328 + 5328 5323 5322 + 5323 5328 5329 + 5329 5330 5323 + 5323 5330 5324 + 4795 4801 5326 + 5326 4801 5331 + 5331 5332 5326 + 5327 5326 5332 + 5332 5333 5327 + 5328 5327 5333 + 5333 5334 5328 + 5329 5328 5334 + 4806 5331 4801 + 5331 4806 5335 + 5335 5336 5331 + 5331 5336 5337 + 5337 5332 5331 + 5332 5337 5338 + 5338 5333 5332 + 5333 5338 5339 + 5339 5334 5333 + 5335 4806 4805 + 4805 5340 5335 + 5341 5335 5340 + 5336 5335 5341 + 5341 5342 5336 + 5337 5336 5342 + 5343 5337 5342 + 5338 5337 5343 + 5343 5344 5338 + 5339 5338 5344 + 5345 5340 4805 + 5340 5345 5346 + 5346 5341 5340 + 5342 5341 5346 + 5346 5347 5342 + 5342 5347 5348 + 5348 5349 5342 + 5342 5349 5343 + 4805 4804 5345 + 5345 4804 4811 + 4811 5350 5345 + 5345 5350 5351 + 5351 5346 5345 + 5347 5346 5351 + 5351 5352 5347 + 5348 5347 5352 + 4869 5348 5352 + 5353 5348 4869 + 5349 5348 5353 + 5350 4811 4810 + 4810 5354 5350 + 5350 5354 5355 + 5355 5351 5350 + 5351 5355 5356 + 5356 5352 5351 + 5352 5356 4860 + 4860 4864 5352 + 5352 4864 4869 + 5354 4810 5357 + 5357 5358 5354 + 5354 5358 5359 + 5359 5355 5354 + 5356 5355 5359 + 5359 4855 5356 + 4860 5356 4855 + 4814 5357 4810 + 5360 5357 4814 + 5358 5357 5360 + 5360 5361 5358 + 5358 5361 5362 + 5362 5359 5358 + 5359 5362 5363 + 5363 4855 5359 + 4855 5363 4856 + 4857 4856 5363 + 4814 4819 5360 + 5360 4819 5364 + 5364 5365 5360 + 5361 5360 5365 + 5365 5366 5361 + 5362 5361 5366 + 5366 5367 5362 + 5363 5362 5367 + 5367 5368 5363 + 5363 5368 4857 + 4824 5364 4819 + 5369 5364 4824 + 5364 5369 5370 + 5370 5365 5364 + 5366 5365 5370 + 5370 5371 5366 + 5366 5371 5372 + 5372 5367 5366 + 5372 5368 5367 + 5368 5372 5373 + 5373 4857 5368 + 5369 4824 5374 + 5374 5375 5369 + 5370 5369 5375 + 5375 5376 5370 + 5377 5376 5375 + 5375 5378 5377 + 5377 5378 5379 + 4823 5374 4824 + 5378 5374 4823 + 5378 5375 5374 + 4823 5380 5378 + 5378 5380 5379 + 5381 5380 4823 + 5380 5381 5382 + 5382 5383 5380 + 5383 5382 5384 + 5384 5385 5383 + 4823 5386 5381 + 5381 5386 5387 + 5387 5388 5381 + 5382 5381 5388 + 5388 5389 5382 + 5384 5382 5389 + 5386 4823 4829 + 4829 5390 5386 + 5387 5386 5390 + 5390 5391 5387 + 5392 5387 5391 + 5388 5387 5392 + 5392 5393 5388 + 5388 5393 5394 + 5394 5389 5388 + 4828 5390 4829 + 5390 4828 4834 + 4834 5391 5390 + 5391 4834 4839 + 4839 5395 5391 + 5391 5395 5392 + 5396 5392 5395 + 5393 5392 5396 + 5396 5397 5393 + 5393 5397 5398 + 5398 5394 5393 + 5395 4839 4838 + 4838 4848 5395 + 5395 4848 5396 + 5399 5396 4848 + 5397 5396 5399 + 5399 5400 5397 + 5397 5400 5401 + 5401 5398 5397 + 5402 5398 5401 + 5398 5402 5403 + 5403 5394 5398 + 4848 4847 5399 + 5404 5399 4847 + 5400 5399 5404 + 5404 5405 5400 + 5400 5405 5406 + 5406 5401 5400 + 5407 5401 5406 + 5401 5407 5402 + 4847 5408 5404 + 5409 5404 5408 + 5404 5409 5410 + 5410 5405 5404 + 5405 5410 5411 + 5411 5412 5405 + 5405 5412 5406 + 4846 5408 4847 + 5408 4846 4857 + 4857 5373 5408 + 5408 5373 5409 + 5409 5373 5372 + 5413 5409 5372 + 5410 5409 5413 + 5413 5414 5410 + 5410 5414 5415 + 5372 5371 5413 + 5416 5413 5371 + 5413 5416 5414 + 5371 5370 5416 + 5417 5411 5410 + 5418 5411 5417 + 5411 5418 5419 + 5419 5412 5411 + 5412 5419 5420 + 5420 5406 5412 + 5421 5406 5420 + 5406 5421 5407 + 5417 5422 5418 + 5423 5418 5422 + 5419 5418 5423 + 5423 5424 5419 + 5419 5424 4174 + 5420 5419 4174 + 4174 4179 5420 + 5421 5420 4179 + 4179 4178 5421 + 5407 5421 4178 + 5425 5423 5422 + 5426 5423 5425 + 5424 5423 5426 + 5426 5427 5424 + 5424 5427 5428 + 5428 4174 5424 + 4174 5428 4166 + 5425 5429 5426 + 5426 5429 5430 + 5430 5431 5426 + 5427 5426 5431 + 5431 5432 5427 + 5428 5427 5432 + 5432 5433 5428 + 4166 5428 5433 + 5429 5425 5434 + 5429 5434 4208 + 4208 5430 5429 + 5435 5430 4208 + 5430 5435 5436 + 5436 5431 5430 + 5431 5436 5437 + 5437 5432 5431 + 5434 5425 5438 + 5438 4203 5434 + 4208 5434 4203 + 5385 5438 5425 + 5439 5438 5385 + 5438 5439 4198 + 4198 4203 5438 + 5385 5384 5439 + 5440 5439 5384 + 4198 5439 5440 + 5440 4189 4198 + 4183 4189 5440 + 5440 5441 4183 + 4183 5441 5442 + 5442 4184 4183 + 5384 5443 5440 + 5441 5440 5443 + 5443 5403 5441 + 5442 5441 5403 + 5403 5402 5442 + 5444 5442 5402 + 5444 4184 5442 + 4184 5444 4178 + 4178 5444 5407 + 5389 5443 5384 + 5443 5389 5394 + 5394 5403 5443 + 5402 5407 5444 + 4208 4213 5435 + 5435 4213 5445 + 5445 5446 5435 + 5435 5446 5447 + 5447 5448 5435 + 5448 5436 5435 + 4218 5445 4213 + 5449 5445 4218 + 5445 5449 5450 + 5450 5446 5445 + 5446 5450 5451 + 5451 5447 5446 + 5447 5451 5452 + 5447 5452 5453 + 5453 5448 5447 + 4218 5454 5449 + 5455 5449 5454 + 5450 5449 5455 + 5455 5456 5450 + 5451 5450 5456 + 5457 5451 5456 + 5452 5451 5457 + 4217 5454 4218 + 5454 4217 5458 + 5458 5459 5454 + 5454 5459 5455 + 5459 5460 5455 + 5461 5455 5460 + 5456 5455 5461 + 5458 4217 4226 + 4226 5462 5458 + 5463 5458 5462 + 5458 5463 5459 + 5459 5463 5464 + 5464 5460 5459 + 5460 5464 5465 + 5460 5465 5461 + 5466 5462 4226 + 5466 5467 5462 + 5462 5467 5463 + 5463 5467 5468 + 5468 5464 5463 + 5465 5464 5468 + 5468 5469 5465 + 5461 5465 5469 + 4226 5470 5466 + 5471 5466 5470 + 5467 5466 5471 + 5471 5468 5467 + 5468 5471 5472 + 5472 5469 5468 + 5469 5472 5473 + 5473 5474 5469 + 5469 5474 5461 + 5470 4226 5475 + 5475 5476 5470 + 5470 5476 5477 + 5477 5478 5470 + 5470 5478 5471 + 5472 5471 5478 + 5475 4226 4225 + 4225 5479 5475 + 5480 5475 5479 + 5476 5475 5480 + 5480 5481 5476 + 5476 5481 5482 + 5482 5477 5476 + 4231 5479 4225 + 5479 4231 5483 + 5483 5484 5479 + 5479 5484 5480 + 5484 5485 5480 + 5486 5480 5485 + 5480 5486 5481 + 5481 5486 5487 + 5487 5482 5481 + 3976 5483 4231 + 3975 5483 3976 + 5483 3975 5484 + 5484 3975 3974 + 3974 5485 5484 + 5485 3974 5488 + 5488 5489 5485 + 5485 5489 5486 + 5486 5489 5490 + 5490 5487 5486 + 5491 5487 5490 + 5487 5491 5482 + 5482 5491 5492 + 5492 5477 5482 + 5488 3974 3973 + 3973 5493 5488 + 5488 5493 5494 + 5494 5495 5488 + 5489 5488 5495 + 5495 5490 5489 + 5495 5496 5490 + 5490 5496 5491 + 5491 5496 5497 + 5492 5491 5497 + 3980 5493 3973 + 5493 3980 5498 + 5498 5499 5493 + 5493 5499 5494 + 5500 5494 5499 + 5500 5497 5494 + 5494 5497 5496 + 5496 5495 5494 + 3985 5498 3980 + 5501 5498 3985 + 5499 5498 5501 + 5501 5502 5499 + 5499 5502 5500 + 5500 5502 5503 + 5503 5504 5500 + 5497 5500 5504 + 3985 5505 5501 + 5501 5505 5506 + 5506 5507 5501 + 5502 5501 5507 + 5507 5503 5502 + 5503 5507 5508 + 5503 5508 5509 + 5509 5504 5503 + 5510 5505 3985 + 5505 5510 5511 + 5511 5512 5505 + 5505 5512 5506 + 3985 3984 5510 + 5510 3984 5513 + 5513 5514 5510 + 5511 5510 5514 + 5514 5515 5511 + 5516 5511 5515 + 5512 5511 5516 + 5513 3984 3983 + 5517 5513 3983 + 5518 5513 5517 + 5518 5514 5513 + 5514 5518 5519 + 5519 5515 5514 + 5515 5519 5520 + 5520 5521 5515 + 5515 5521 5516 + 5522 5517 3983 + 5523 5517 5522 + 5523 5524 5517 + 5517 5524 5518 + 5519 5518 5524 + 5525 5519 5524 + 5520 5519 5525 + 3983 5526 5522 + 5527 5522 5526 + 5528 5522 5527 + 5522 5528 5523 + 5523 5528 5529 + 5530 5523 5529 + 5524 5523 5530 + 3989 5526 3983 + 5526 3989 5531 + 5526 5531 5527 + 5532 5527 5531 + 5528 5527 5532 + 5532 5529 5528 + 5531 3989 3988 + 3988 5532 5531 + 5532 3988 5529 + 5529 3988 5533 + 5533 5534 5529 + 5529 5534 5535 + 5535 5530 5529 + 5536 5530 5535 + 5537 5530 5536 + 5530 5537 5524 + 5538 5533 3988 + 5539 5533 5538 + 5534 5533 5539 + 5534 5539 5540 + 5540 5535 5534 + 5541 5535 5540 + 5535 5541 5536 + 5542 5538 3988 + 5543 5538 5542 + 5538 5543 5544 + 5538 5544 5539 + 5539 5544 5545 + 5546 5542 3988 + 5547 5542 5546 + 5547 5548 5542 + 5542 5548 5543 + 5543 5548 5549 + 5549 5550 5543 + 5544 5543 5550 + 4234 5546 3988 + 4233 5546 4234 + 5551 5546 4233 + 5546 5551 5547 + 5547 5551 5552 + 3987 4234 3988 + 4235 4234 3987 + 3987 3986 4235 + 4235 3986 5553 + 5554 5540 5539 + 4233 4232 5551 + 5551 4232 237 + 237 5555 5551 + 5541 5540 5545 + 5545 5556 5541 + 5541 5556 5557 + 5557 5536 5541 + 5558 5536 5557 + 5536 5558 5537 + 5556 5545 5559 + 5559 5560 5556 + 5556 5560 5561 + 5561 5557 5556 + 5562 5557 5561 + 5557 5562 5558 + 5559 5545 5563 + 5563 5564 5559 + 5565 5559 5564 + 5560 5559 5565 + 5565 5566 5560 + 5566 5561 5560 + 5567 5561 5566 + 5561 5567 5562 + 5568 5563 5545 + 5569 5563 5568 + 5569 5564 5563 + 5564 5569 5570 + 5570 5565 5564 + 5565 5570 5571 + 5571 5566 5565 + 5566 5571 5567 + 5572 5567 5571 + 5562 5567 5572 + 5544 5568 5545 + 5550 5568 5544 + 5568 5550 5573 + 5573 5574 5568 + 5568 5574 5569 + 5570 5569 5574 + 5574 5575 5570 + 5575 5576 5570 + 5576 5571 5570 + 5571 5576 5572 + 5573 5550 5549 + 5549 5577 5573 + 5577 5578 5573 + 5574 5573 5578 + 5578 5575 5574 + 5575 5578 5579 + 5576 5575 5579 + 5576 5579 5580 + 5580 5572 5576 + 5581 5577 5549 + 5577 5581 5579 + 5579 5578 5577 + 5549 5582 5581 + 5581 5582 5583 + 5583 5584 5581 + 5581 5584 5580 + 5580 5579 5581 + 5582 5549 5585 + 5585 5586 5582 + 5583 5582 5586 + 5586 5587 5583 + 5587 5588 5583 + 5589 5583 5588 + 5583 5589 5584 + 5548 5585 5549 + 5590 5585 5548 + 5586 5585 5590 + 5590 5591 5586 + 5586 5591 5592 + 5592 5587 5586 + 5593 5587 5592 + 5587 5593 5594 + 5594 5588 5587 + 5548 5547 5590 + 3895 5590 5547 + 5591 5590 3895 + 3895 5595 5591 + 5592 5591 5595 + 5595 5596 5592 + 5593 5592 5596 + 5596 5597 5593 + 5593 5597 5598 + 5598 5594 5593 + 5599 3895 5547 + 5508 5507 5506 + 5506 5600 5508 + 5508 5600 5601 + 5601 5509 5508 + 5602 5509 5601 + 5504 5509 5602 + 5600 5506 5603 + 5603 5604 5600 + 5600 5604 5605 + 5605 5601 5600 + 5601 5605 5606 + 5606 5607 5601 + 5601 5607 5602 + 5603 5506 5512 + 5512 5608 5603 + 5603 5608 5609 + 5609 5610 5603 + 5604 5603 5610 + 5610 5611 5604 + 5605 5604 5611 + 5611 5612 5605 + 5606 5605 5612 + 5516 5608 5512 + 5608 5516 5613 + 5613 5609 5608 + 5609 5613 5614 + 5614 5615 5609 + 5609 5615 5616 + 5616 5610 5609 + 5611 5610 5616 + 5613 5516 5521 + 5521 5617 5613 + 5614 5613 5617 + 5617 5618 5614 + 5619 5614 5618 + 5615 5614 5619 + 5619 5620 5615 + 5616 5615 5620 + 5621 5617 5521 + 5617 5621 5622 + 5622 5618 5617 + 5618 5622 5623 + 5623 5624 5618 + 5618 5624 5619 + 5625 5619 5624 + 5620 5619 5625 + 5521 5520 5621 + 5621 5520 5626 + 5626 5627 5621 + 5622 5621 5627 + 5627 5628 5622 + 5623 5622 5628 + 5628 5629 5623 + 5630 5623 5629 + 5624 5623 5630 + 5525 5626 5520 + 5631 5626 5525 + 5626 5631 5632 + 5632 5627 5626 + 5627 5632 5633 + 5633 5628 5627 + 5628 5633 5634 + 5634 5629 5628 + 5525 5635 5631 + 5631 5635 5636 + 5636 5637 5631 + 5632 5631 5637 + 5637 5638 5632 + 5633 5632 5638 + 5638 5639 5633 + 5634 5633 5639 + 5635 5525 5640 + 5640 5641 5635 + 5636 5635 5641 + 5642 5636 5641 + 5643 5636 5642 + 5636 5643 5644 + 5644 5637 5636 + 5640 5525 5524 + 5524 5537 5640 + 5645 5640 5537 + 5641 5640 5645 + 5645 5646 5641 + 5641 5646 5647 + 5647 5648 5641 + 5641 5648 5642 + 5537 5558 5645 + 5649 5645 5558 + 5646 5645 5649 + 5649 5650 5646 + 5647 5646 5650 + 5650 5589 5647 + 5588 5647 5589 + 5647 5588 5594 + 5594 5648 5647 + 5558 5562 5649 + 5572 5649 5562 + 5650 5649 5572 + 5572 5580 5650 + 5650 5580 5584 + 5584 5589 5650 + 5648 5594 5598 + 5598 5642 5648 + 5651 5642 5598 + 5642 5651 5643 + 5643 5651 5652 + 5652 5653 5643 + 5644 5643 5653 + 5653 5654 5644 + 5655 5644 5654 + 5637 5644 5655 + 5598 5656 5651 + 5651 5656 5657 + 5657 5652 5651 + 5652 5657 5658 + 5652 5658 5659 + 5659 5653 5652 + 5654 5653 5659 + 5656 5598 5597 + 5597 5660 5656 + 5656 5660 5661 + 5661 5657 5656 + 5658 5657 5661 + 5661 5662 5658 + 5659 5658 5662 + 5663 5659 5662 + 5654 5659 5663 + 5663 5664 5654 + 5654 5664 5655 + 5660 5597 5596 + 5596 5665 5660 + 5660 5665 5666 + 5666 5661 5660 + 5661 5666 5667 + 5667 5662 5661 + 5665 5596 5595 + 5595 5668 5665 + 5665 5668 5669 + 5669 5666 5665 + 5667 5666 5669 + 5669 5670 5667 + 5671 5667 5670 + 5662 5667 5671 + 5668 5595 3895 + 3895 3893 5668 + 5668 3893 3900 + 3900 5669 5668 + 5669 3900 3899 + 3899 5670 5669 + 5670 3899 3904 + 3904 3903 5670 + 5670 3903 5671 + 3908 5671 3903 + 5672 5671 3908 + 5671 5672 5662 + 5662 5672 5673 + 5673 5663 5662 + 5674 5663 5673 + 5663 5674 5675 + 5675 5664 5663 + 5664 5675 5676 + 5676 5655 5664 + 3908 5677 5672 + 5672 5677 5678 + 5678 5673 5672 + 5679 5673 5678 + 5673 5679 5674 + 5680 5674 5679 + 5675 5674 5680 + 5677 3908 3907 + 3907 3913 5677 + 5677 3913 5681 + 5681 5678 5677 + 5682 5678 5681 + 5678 5682 5679 + 5679 5682 5683 + 5683 5684 5679 + 5679 5684 5685 + 5685 5680 5679 + 5686 5681 3913 + 5687 5681 5686 + 5681 5687 5682 + 5683 5682 5687 + 5688 5683 5687 + 5689 5683 5688 + 5684 5683 5689 + 3913 3912 5686 + 5686 3912 5690 + 5690 5691 5686 + 5691 5692 5686 + 5693 5686 5692 + 5686 5693 5687 + 3911 5690 3912 + 5690 3911 5694 + 5694 5695 5690 + 5690 5695 5696 + 5696 5691 5690 + 5697 5691 5696 + 5691 5697 5698 + 5698 5692 5691 + 5694 3911 3910 + 3910 5699 5694 + 3909 5699 3910 + 5699 3909 5700 + 5700 5701 5699 + 5655 5638 5637 + 5638 5655 5676 + 5676 5639 5638 + 5639 5676 5702 + 5702 5703 5639 + 5639 5703 5634 + 5704 5634 5703 + 5629 5634 5704 + 5702 5676 5675 + 5675 5705 5702 + 5706 5702 5705 + 5703 5702 5706 + 5706 5707 5703 + 5703 5707 5704 + 5708 5704 5707 + 5709 5704 5708 + 5704 5709 5629 + 5629 5709 5630 + 5680 5705 5675 + 5705 5680 5710 + 5705 5710 5706 + 5706 5710 5711 + 5711 5712 5706 + 5707 5706 5712 + 5712 5713 5707 + 5707 5713 5708 + 5710 5680 5685 + 5685 5711 5710 + 5711 5685 5714 + 5711 5714 5715 + 5715 5712 5711 + 5713 5712 5715 + 5715 5716 5713 + 5713 5716 5717 + 5717 5708 5713 + 5718 5708 5717 + 5708 5718 5709 + 5714 5685 5719 + 5719 5720 5714 + 5714 5720 5721 + 5721 5722 5714 + 5722 5715 5714 + 5716 5715 5722 + 5684 5719 5685 + 5723 5719 5684 + 5720 5719 5723 + 5720 5723 5724 + 5724 5721 5720 + 5725 5721 5724 + 5721 5725 5726 + 5726 5722 5721 + 5727 5722 5726 + 5722 5727 5716 + 5684 5689 5723 + 5723 5689 5728 + 5728 5724 5723 + 5729 5724 5728 + 5724 5729 5725 + 5725 5729 5730 + 5730 5731 5725 + 5725 5731 5732 + 5732 5726 5725 + 5688 5728 5689 + 5733 5728 5688 + 5728 5733 5729 + 5729 5733 5734 + 5734 5735 5729 + 5735 5730 5729 + 5736 5730 5735 + 5736 5731 5730 + 5731 5736 5737 + 5737 5732 5731 + 5688 5738 5733 + 5733 5738 5739 + 5739 5734 5733 + 5740 5734 5739 + 5734 5740 5741 + 5741 5735 5734 + 5738 5688 5742 + 5742 5743 5738 + 5738 5743 5744 + 5739 5738 5744 + 5745 5739 5744 + 5746 5739 5745 + 5739 5746 5740 + 5687 5742 5688 + 5747 5742 5687 + 5742 5747 5748 + 5748 5743 5742 + 5743 5748 5749 + 5749 5744 5743 + 5687 5693 5747 + 5750 5747 5693 + 5748 5747 5750 + 5750 5751 5748 + 5749 5748 5751 + 5751 5752 5749 + 5753 5749 5752 + 5753 5744 5749 + 5693 5754 5750 + 5755 5750 5754 + 5750 5755 5756 + 5756 5751 5750 + 5751 5756 5757 + 5757 5752 5751 + 5692 5754 5693 + 5758 5754 5692 + 5754 5758 5755 + 5755 5758 5759 + 5759 5760 5755 + 5756 5755 5760 + 5760 5761 5756 + 5757 5756 5761 + 5692 5698 5758 + 5758 5698 5762 + 5762 5763 5758 + 5758 5763 5759 + 5764 5759 5763 + 5765 5759 5764 + 5759 5765 5766 + 5766 5760 5759 + 5767 5762 5698 + 5768 5762 5767 + 5768 5763 5762 + 5763 5768 5764 + 5764 5768 5769 + 5770 5764 5769 + 5765 5764 5770 + 5698 5697 5767 + 5697 5771 5767 + 5772 5767 5771 + 5769 5767 5772 + 5767 5769 5768 + 5773 5771 5697 + 5774 5771 5773 + 5771 5774 5772 + 5772 5774 5775 + 5775 5776 5772 + 5776 5777 5772 + 5769 5772 5777 + 5777 5778 5769 + 5697 5779 5773 + 5780 5773 5779 + 5774 5773 5780 + 5780 5775 5774 + 5775 5780 5781 + 5696 5779 5697 + 5779 5696 5782 + 5782 5783 5779 + 5779 5783 5780 + 5781 5780 5783 + 5783 5784 5781 + 5785 5781 5784 + 5786 5781 5785 + 5782 5696 5695 + 5695 5787 5782 + 5788 5782 5787 + 5783 5782 5788 + 5788 5784 5783 + 5784 5788 5789 + 5789 5790 5784 + 5784 5790 5785 + 5791 5787 5695 + 5787 5791 5792 + 5792 5793 5787 + 5787 5793 5788 + 5789 5788 5793 + 5793 5794 5789 + 5795 5789 5794 + 5790 5789 5795 + 5695 5694 5791 + 5701 5791 5694 + 5792 5791 5701 + 5701 5796 5792 + 5796 5797 5792 + 5797 5798 5792 + 5793 5792 5798 + 5798 5794 5793 + 5694 5799 5701 + 5796 5701 5800 + 5437 5436 5448 + 5448 5801 5437 + 5437 5801 5802 + 5802 5803 5437 + 5432 5437 5803 + 5803 5433 5432 + 5801 5448 5453 + 5801 5453 5804 + 5804 5805 5801 + 5801 5805 5802 + 5806 5802 5805 + 5807 5802 5806 + 5802 5807 5808 + 5808 5803 5802 + 5433 5803 5808 + 5433 5808 4166 + 5804 5453 5452 + 5452 5809 5804 + 5809 5810 5804 + 5810 5811 5804 + 5811 5812 5804 + 5812 5813 5804 + 5814 5804 5813 + 5814 5805 5804 + 5457 5809 5452 + 5457 5815 5809 + 5809 5815 5816 + 5816 5810 5809 + 5816 5817 5810 + 5810 5817 5818 + 5818 5811 5810 + 5815 5457 5819 + 5819 5820 5815 + 5815 5820 5821 + 5821 5816 5815 + 5817 5816 5821 + 5821 5822 5817 + 5817 5822 5823 + 5823 5818 5817 + 5456 5819 5457 + 5824 5819 5456 + 5820 5819 5824 + 5824 5825 5820 + 5820 5825 5826 + 5826 5827 5820 + 5820 5827 5821 + 5456 5828 5824 + 5828 5829 5824 + 5825 5824 5829 + 5829 5830 5825 + 5826 5825 5830 + 5461 5828 5456 + 5828 5461 5831 + 5831 5829 5828 + 5829 5831 5832 + 5832 5830 5829 + 5830 5832 5833 + 5833 5834 5830 + 5830 5834 5826 + 5835 5831 5461 + 5832 5831 5835 + 5835 5836 5832 + 5833 5832 5836 + 5474 5835 5461 + 5837 5835 5474 + 5835 5837 5836 + 5836 5837 5838 + 5838 5839 5836 + 5836 5839 5833 + 5474 5840 5837 + 5838 5837 5840 + 5840 5841 5838 + 5841 5842 5838 + 5843 5838 5842 + 5839 5838 5843 + 5840 5474 5473 + 5840 5473 5844 + 5844 5841 5840 + 5841 5844 5845 + 5841 5845 5846 + 5846 5842 5841 + 5842 5846 5847 + 5842 5847 5843 + 5844 5473 5472 + 5472 5848 5844 + 5845 5844 5848 + 5848 5492 5845 + 5845 5492 5497 + 5846 5845 5497 + 5497 5849 5846 + 5847 5846 5849 + 5478 5848 5472 + 5848 5478 5477 + 5477 5492 5848 + 5504 5849 5497 + 5602 5849 5504 + 5849 5602 5847 + 5847 5602 5607 + 5843 5847 5607 + 5607 5850 5843 + 5839 5843 5850 + 5850 5851 5839 + 5839 5851 5833 + 5852 5850 5607 + 5850 5852 5853 + 5853 5851 5850 + 5851 5853 5854 + 5854 5855 5851 + 5851 5855 5833 + 5607 5606 5852 + 5856 5852 5606 + 5853 5852 5856 + 5856 5857 5853 + 5853 5857 5858 + 5854 5853 5858 + 5859 5856 5606 + 5860 5856 5859 + 5857 5856 5860 + 5857 5860 5861 + 5861 5862 5857 + 5857 5862 5858 + 5863 5859 5606 + 5864 5859 5863 + 5865 5859 5864 + 5859 5865 5860 + 5860 5865 5866 + 5861 5860 5866 + 5606 5867 5863 + 5868 5863 5867 + 5869 5863 5868 + 5863 5869 5864 + 5870 5864 5869 + 5865 5864 5870 + 5870 5866 5865 + 5612 5867 5606 + 5871 5867 5612 + 5867 5871 5868 + 5872 5868 5871 + 5873 5868 5872 + 5868 5873 5869 + 5869 5873 5874 + 5874 5875 5869 + 5869 5875 5870 + 5612 5876 5871 + 5871 5876 5877 + 5877 5878 5871 + 5871 5878 5872 + 5879 5872 5878 + 5880 5872 5879 + 5872 5880 5873 + 5874 5873 5880 + 5876 5612 5611 + 5611 5881 5876 + 5876 5881 5882 + 5882 5877 5876 + 5883 5877 5882 + 5877 5883 5884 + 5884 5878 5877 + 5878 5884 5879 + 5616 5881 5611 + 5881 5616 5885 + 5885 5882 5881 + 5882 5885 5886 + 5886 5887 5882 + 5882 5887 5883 + 5620 5885 5616 + 5886 5885 5620 + 5620 5888 5886 + 5889 5886 5888 + 5887 5886 5889 + 5889 5890 5887 + 5883 5887 5890 + 5890 5891 5883 + 5891 5892 5883 + 5884 5883 5892 + 5625 5888 5620 + 5888 5625 5893 + 5893 5894 5888 + 5888 5894 5889 + 5895 5889 5894 + 5889 5895 5896 + 5896 5890 5889 + 5890 5896 5897 + 5897 5891 5890 + 5893 5625 5898 + 5898 5899 5893 + 5900 5893 5899 + 5894 5893 5900 + 5900 5901 5894 + 5894 5901 5895 + 5624 5898 5625 + 5630 5898 5624 + 5898 5630 5902 + 5902 5899 5898 + 5899 5902 5903 + 5903 5904 5899 + 5899 5904 5900 + 5900 5904 5905 + 5906 5900 5905 + 5901 5900 5906 + 5902 5630 5709 + 5709 5718 5902 + 5903 5902 5718 + 5718 5907 5903 + 5908 5903 5907 + 5904 5903 5908 + 5908 5909 5904 + 5904 5909 5905 + 5717 5907 5718 + 5907 5717 5910 + 5910 5911 5907 + 5907 5911 5908 + 5912 5908 5911 + 5909 5908 5912 + 5912 5913 5909 + 5909 5913 5914 + 5914 5905 5909 + 5910 5717 5716 + 5716 5727 5910 + 5915 5910 5727 + 5911 5910 5915 + 5915 5916 5911 + 5911 5916 5912 + 5917 5912 5916 + 5913 5912 5917 + 5917 5918 5913 + 5914 5913 5918 + 5727 5919 5915 + 5920 5915 5919 + 5916 5915 5920 + 5920 5921 5916 + 5916 5921 5917 + 5922 5917 5921 + 5918 5917 5922 + 5726 5919 5727 + 5919 5726 5732 + 5732 5923 5919 + 5919 5923 5920 + 5924 5920 5923 + 5921 5920 5924 + 5924 5925 5921 + 5921 5925 5922 + 5926 5922 5925 + 5927 5922 5926 + 5922 5927 5918 + 5923 5732 5737 + 5737 5928 5923 + 5923 5928 5924 + 5929 5924 5928 + 5925 5924 5929 + 5929 5930 5925 + 5925 5930 5926 + 5931 5926 5930 + 5932 5926 5931 + 5926 5932 5927 + 5928 5737 5933 + 5933 5934 5928 + 5928 5934 5929 + 5935 5929 5934 + 5930 5929 5935 + 5935 5936 5930 + 5930 5936 5931 + 5933 5737 5736 + 5736 5937 5933 + 5938 5933 5937 + 5937 5939 5938 + 5940 5938 5939 + 5941 5938 5940 + 5938 5941 5934 + 5934 5941 5935 + 5735 5937 5736 + 5939 5937 5735 + 5735 5741 5939 + 5939 5741 5942 + 5942 5943 5939 + 5939 5943 5940 + 5944 5940 5943 + 5945 5940 5944 + 5940 5945 5941 + 5941 5945 5946 + 5946 5935 5941 + 5936 5935 5946 + 5947 5942 5741 + 5948 5942 5947 + 5942 5948 5949 + 5949 5943 5942 + 5943 5949 5944 + 5950 5944 5949 + 5951 5944 5950 + 5944 5951 5945 + 5741 5740 5947 + 5952 5947 5740 + 5953 5947 5952 + 5947 5953 5948 + 5948 5953 5954 + 5954 5955 5948 + 5955 5956 5948 + 5949 5948 5956 + 5740 5746 5952 + 5957 5952 5746 + 5958 5952 5957 + 5952 5958 5953 + 5953 5958 5959 + 5959 5954 5953 + 5960 5954 5959 + 5954 5960 5961 + 5961 5955 5954 + 5746 5962 5957 + 5963 5957 5962 + 5957 5963 5964 + 5964 5965 5957 + 5957 5965 5958 + 5958 5965 5966 + 5966 5959 5958 + 5745 5962 5746 + 5967 5962 5745 + 5962 5967 5963 + 5963 5967 5968 + 5968 5969 5963 + 5964 5963 5969 + 5969 5970 5964 + 5971 5964 5970 + 5965 5964 5971 + 5971 5966 5965 + 5745 5972 5967 + 5967 5972 5973 + 5973 5968 5967 + 5974 5968 5973 + 5968 5974 5975 + 5975 5969 5968 + 5969 5975 5976 + 5976 5970 5969 + 5972 5745 5977 + 5977 5978 5972 + 5972 5978 5979 + 5979 5973 5972 + 5980 5973 5979 + 5973 5980 5974 + 5744 5977 5745 + 5981 5977 5744 + 5978 5977 5981 + 5978 5981 5982 + 5982 5979 5978 + 5983 5979 5982 + 5979 5983 5980 + 5980 5983 5984 + 5984 5985 5980 + 5974 5980 5985 + 5744 5753 5981 + 5982 5981 5753 + 5753 5986 5982 + 5987 5982 5986 + 5982 5987 5983 + 5983 5987 5988 + 5988 5984 5983 + 5989 5984 5988 + 5984 5989 5990 + 5990 5985 5984 + 5752 5986 5753 + 5991 5986 5752 + 5986 5991 5987 + 5987 5991 5992 + 5992 5988 5987 + 5993 5988 5992 + 5988 5993 5989 + 5989 5993 5994 + 5994 5995 5989 + 5990 5989 5995 + 5752 5757 5991 + 5991 5757 5996 + 5996 5992 5991 + 5997 5992 5996 + 5992 5997 5993 + 5993 5997 5998 + 5998 5994 5993 + 5999 5994 5998 + 5994 5999 6000 + 6000 5995 5994 + 5761 5996 5757 + 6001 5996 5761 + 5996 6001 5997 + 5997 6001 6002 + 6002 5998 5997 + 6003 5998 6002 + 5998 6003 5999 + 5999 6003 6004 + 6004 6005 5999 + 6000 5999 6005 + 5761 6006 6001 + 6001 6006 6007 + 6007 6002 6001 + 6008 6002 6007 + 6002 6008 6003 + 6003 6008 6009 + 6009 6004 6003 + 6006 5761 5760 + 5760 5766 6006 + 6006 5766 6010 + 6010 6007 6006 + 6011 6007 6010 + 6007 6011 6008 + 6008 6011 6012 + 6012 6009 6008 + 6013 6009 6012 + 6009 6013 6014 + 6014 6004 6009 + 6015 6010 5766 + 6016 6010 6015 + 6010 6016 6011 + 6011 6016 6017 + 6017 6012 6011 + 6018 6012 6017 + 6012 6018 6013 + 5766 5765 6015 + 5765 6019 6015 + 6020 6015 6019 + 6021 6015 6020 + 6015 6021 6016 + 6017 6016 6021 + 6021 6022 6017 + 6023 6017 6022 + 6017 6023 6018 + 5770 6019 5765 + 6024 6019 5770 + 6019 6024 6020 + 6020 6024 6025 + 6025 6026 6020 + 6026 6027 6020 + 6021 6020 6027 + 6027 6022 6021 + 6028 6022 6027 + 6022 6028 6023 + 6024 5770 6029 + 6029 6025 6024 + 6025 6029 6030 + 6025 6030 6031 + 6031 6026 6025 + 6032 6026 6031 + 6026 6032 6033 + 6033 6027 6026 + 6027 6033 6028 + 6029 5770 5769 + 5769 6034 6029 + 6030 6029 5778 + 5778 6035 6030 + 6030 6035 6036 + 6036 6037 6030 + 6037 6031 6030 + 6038 6031 6037 + 6031 6038 6032 + 6035 5778 5777 + 6035 5777 5776 + 5776 6036 6035 + 6036 5776 6039 + 6039 6040 6036 + 6036 6040 6041 + 6041 6037 6036 + 6042 6037 6041 + 6037 6042 6038 + 6039 5776 5775 + 5775 5786 6039 + 6043 6039 5786 + 6040 6039 6043 + 6043 6044 6040 + 6040 6044 6045 + 6045 6041 6040 + 6046 6041 6045 + 6041 6046 6042 + 6047 5786 5775 + 5805 5814 5806 + 5806 5814 6048 + 6048 6049 5806 + 5807 5806 6049 + 6049 4167 5807 + 5807 4167 4166 + 4166 5808 5807 + 5813 6048 5814 + 6050 6048 5813 + 6048 6050 6051 + 6051 6049 6048 + 6049 6051 4168 + 4168 4167 6049 + 6050 5813 5812 + 5812 6052 6050 + 6051 6050 6052 + 6052 6053 6051 + 6053 6054 6051 + 6054 6055 6051 + 4168 6051 6055 + 6055 6056 4168 + 4168 6056 4162 + 6057 6052 5812 + 6052 6057 6058 + 6058 6053 6052 + 6059 6053 6058 + 6053 6059 6060 + 6060 6054 6053 + 6057 5812 5811 + 5811 6061 6057 + 6057 6061 6062 + 6062 6058 6057 + 6063 6058 6062 + 6058 6063 6059 + 6059 6063 6064 + 6064 6065 6059 + 6060 6059 6065 + 5818 6061 5811 + 6061 5818 5823 + 5823 6066 6061 + 6061 6066 6062 + 6067 6062 6066 + 6062 6067 6068 + 6068 6069 6062 + 6062 6069 6063 + 6063 6069 6070 + 6070 6064 6063 + 6071 6066 5823 + 6066 6071 6067 + 6072 6067 6071 + 6068 6067 6072 + 6072 6073 6068 + 6068 6073 6074 + 6074 6075 6068 + 6069 6068 6075 + 6075 6070 6069 + 5823 6076 6071 + 6071 6076 6077 + 6077 6078 6071 + 6071 6078 6072 + 6079 6072 6078 + 6072 6079 6080 + 6080 6073 6072 + 6076 5823 5822 + 5822 6081 6076 + 6077 6076 6081 + 6081 6082 6077 + 6083 6077 6082 + 6077 6083 6084 + 6084 6078 6077 + 6078 6084 6079 + 6085 6079 6084 + 6080 6079 6085 + 6081 5822 5821 + 5821 6086 6081 + 6081 6086 6087 + 6087 6082 6081 + 6088 6082 6087 + 6082 6088 6083 + 6089 6083 6088 + 6084 6083 6089 + 6089 6090 6084 + 6084 6090 6085 + 6086 5821 5827 + 5827 6091 6086 + 6087 6086 6091 + 6091 6092 6087 + 6093 6087 6092 + 6087 6093 6088 + 6088 6093 6094 + 6094 6095 6088 + 6088 6095 6089 + 6091 5827 5826 + 5826 6096 6091 + 6091 6096 6097 + 6097 6092 6091 + 6098 6092 6097 + 6092 6098 6093 + 6094 6093 6098 + 6096 5826 5834 + 5834 6099 6096 + 6097 6096 6099 + 6099 6100 6097 + 6101 6097 6100 + 6097 6101 6098 + 6098 6101 6102 + 6102 6103 6098 + 6098 6103 6094 + 6099 5834 5833 + 5833 6104 6099 + 6099 6104 6105 + 6105 6100 6099 + 6106 6100 6105 + 6100 6106 6101 + 6102 6101 6106 + 6104 5833 5855 + 5855 6107 6104 + 6105 6104 6107 + 6107 6108 6105 + 6109 6105 6108 + 6105 6109 6106 + 6106 6109 6110 + 6110 6111 6106 + 6106 6111 6102 + 6107 5855 5854 + 5854 6112 6107 + 6107 6112 6113 + 6113 6108 6107 + 6114 6108 6113 + 6108 6114 6109 + 6110 6109 6114 + 6112 5854 6115 + 6115 6116 6112 + 6113 6112 6116 + 6116 6117 6113 + 6118 6113 6117 + 6113 6118 6114 + 5858 6115 5854 + 6119 6115 5858 + 6116 6115 6119 + 6119 6120 6116 + 6116 6120 6121 + 6121 6117 6116 + 6122 6117 6121 + 6117 6122 6118 + 6123 6118 6122 + 6114 6118 6123 + 5858 6124 6119 + 6125 6119 6124 + 6120 6119 6125 + 6125 6126 6120 + 6121 6120 6126 + 6126 6127 6121 + 6128 6121 6127 + 6121 6128 6122 + 6124 5858 6129 + 6124 6129 6130 + 6130 6131 6124 + 6124 6131 6125 + 6132 6125 6131 + 6126 6125 6132 + 6129 5858 5862 + 5862 6133 6129 + 6129 6133 6134 + 6134 6135 6129 + 6135 6136 6129 + 6136 6137 6129 + 6137 6138 6129 + 6138 6130 6129 + 6133 5862 5861 + 6133 5861 6139 + 6139 6134 6133 + 6134 6139 6140 + 6134 6140 6141 + 6141 6135 6134 + 6135 6141 6142 + 6135 6142 6143 + 6143 6136 6135 + 5866 6139 5861 + 6140 6139 5866 + 5866 6144 6140 + 6141 6140 6144 + 6144 6145 6141 + 6142 6141 6145 + 6145 6146 6142 + 6142 6146 6147 + 6147 6143 6142 + 6148 6143 6147 + 6136 6143 6148 + 6144 5866 5870 + 6144 5870 6149 + 6149 6145 6144 + 6145 6149 6146 + 6146 6149 6150 + 6150 6151 6146 + 6146 6151 6147 + 6152 6147 6151 + 6153 6147 6152 + 6147 6153 6148 + 6150 6149 5870 + 5875 6150 5870 + 6154 6150 5875 + 6151 6150 6154 + 6154 6155 6151 + 6151 6155 6152 + 6152 6155 6156 + 6156 6157 6152 + 6158 6152 6157 + 6152 6158 6153 + 5875 6159 6154 + 6154 6159 6160 + 6160 6161 6154 + 6155 6154 6161 + 6161 6156 6155 + 6162 6156 6161 + 6156 6162 6163 + 6163 6157 6156 + 6164 6159 5875 + 6159 6164 6165 + 6165 6160 6159 + 6166 6160 6165 + 6160 6166 6167 + 6167 6161 6160 + 6161 6167 6162 + 5875 5874 6164 + 6164 5874 6168 + 6168 6169 6164 + 6164 6169 6170 + 6170 6165 6164 + 6171 6165 6170 + 6165 6171 6166 + 5880 6168 5874 + 6172 6168 5880 + 6168 6172 6173 + 6173 6169 6168 + 6169 6173 6174 + 6174 6170 6169 + 6175 6170 6174 + 6170 6175 6171 + 5880 6176 6172 + 6172 6176 6177 + 6177 6178 6172 + 6173 6172 6178 + 6178 6179 6173 + 6173 6179 6180 + 6180 6174 6173 + 5879 6176 5880 + 6176 5879 6181 + 6181 6177 6176 + 6182 6177 6181 + 6177 6182 6183 + 6183 6178 6177 + 6178 6183 6184 + 6184 6179 6178 + 6179 6184 6185 + 6185 6180 6179 + 6181 5879 5884 + 5884 6186 6181 + 6187 6181 6186 + 6181 6187 6182 + 6182 6187 6188 + 6188 6189 6182 + 6183 6182 6189 + 6189 6190 6183 + 6184 6183 6190 + 5892 6186 5884 + 6191 6186 5892 + 6186 6191 6187 + 6188 6187 6191 + 6191 6192 6188 + 6193 6188 6192 + 6188 6193 6194 + 6194 6189 6188 + 6189 6194 6195 + 6195 6190 6189 + 6191 5892 5891 + 5891 6192 6191 + 6196 6192 5891 + 6192 6196 6193 + 6197 6193 6196 + 6194 6193 6197 + 6197 6198 6194 + 6195 6194 6198 + 6198 6199 6195 + 6200 6195 6199 + 6195 6200 6190 + 6190 6200 6184 + 5891 5897 6196 + 6196 5897 6201 + 6201 6202 6196 + 6196 6202 6197 + 6203 6197 6202 + 6198 6197 6203 + 6203 6204 6198 + 6198 6204 6205 + 6205 6199 6198 + 6206 6201 5897 + 6207 6201 6206 + 6207 6202 6201 + 6202 6207 6203 + 6208 6203 6207 + 6204 6203 6208 + 6208 6209 6204 + 6205 6204 6209 + 6210 6206 5897 + 6211 6206 6210 + 6206 6211 6212 + 6212 6213 6206 + 6206 6213 6207 + 6207 6213 6208 + 6214 6208 6213 + 6208 6214 6209 + 5897 5896 6210 + 6215 6210 5896 + 6210 6215 6216 + 6216 6217 6210 + 6210 6217 6211 + 6211 6217 6218 + 6218 6219 6211 + 6212 6211 6219 + 5896 5895 6215 + 6220 6215 5895 + 6216 6215 6220 + 6220 6221 6216 + 6216 6221 6222 + 6222 6223 6216 + 6217 6216 6223 + 6223 6218 6217 + 5895 5901 6220 + 5906 6220 5901 + 5906 6221 6220 + 6221 5906 6224 + 6224 6222 6221 + 6222 6224 6225 + 6222 6225 6226 + 6226 6223 6222 + 6218 6223 6226 + 6226 6227 6218 + 6218 6227 6228 + 6228 6219 6218 + 5905 6224 5906 + 6225 6224 5905 + 5905 6229 6225 + 6226 6225 6229 + 6230 6226 6229 + 6227 6226 6230 + 6230 6231 6227 + 6228 6227 6231 + 6229 5905 5914 + 5914 6232 6229 + 6229 6232 6233 + 6233 6234 6229 + 6229 6234 6230 + 6235 6230 6234 + 6235 6231 6230 + 6232 5914 5918 + 5918 5927 6232 + 6232 5927 5932 + 5932 6233 6232 + 6236 6233 5932 + 6234 6233 6236 + 6236 6237 6234 + 6234 6237 6235 + 6235 6237 6238 + 6238 6239 6235 + 6231 6235 6239 + 6239 6240 6231 + 6231 6240 6228 + 5932 6241 6236 + 6242 6236 6241 + 6237 6236 6242 + 6242 6238 6237 + 6238 6242 6243 + 6243 6244 6238 + 6238 6244 6245 + 6245 6239 6238 + 6240 6239 6245 + 5931 6241 5932 + 6241 5931 6246 + 6246 6247 6241 + 6241 6247 6242 + 6243 6242 6247 + 6247 6248 6243 + 6249 6243 6248 + 6244 6243 6249 + 6249 6250 6244 + 6245 6244 6250 + 6246 5931 5936 + 5936 6251 6246 + 6252 6246 6251 + 6247 6246 6252 + 6252 6248 6247 + 6248 6252 6253 + 6253 6254 6248 + 6248 6254 6249 + 6255 6249 6254 + 6250 6249 6255 + 5946 6251 5936 + 6251 5946 6256 + 6256 6257 6251 + 6251 6257 6252 + 6253 6252 6257 + 6257 6258 6253 + 6259 6253 6258 + 6254 6253 6259 + 6259 6260 6254 + 6254 6260 6255 + 6256 5946 5945 + 5945 5951 6256 + 6261 6256 5951 + 6257 6256 6261 + 6261 6258 6257 + 6258 6261 6262 + 6262 6263 6258 + 6258 6263 6259 + 6264 6259 6263 + 6260 6259 6264 + 5951 6265 6261 + 6262 6261 6265 + 6265 6266 6262 + 6267 6262 6266 + 6263 6262 6267 + 6267 6268 6263 + 6263 6268 6264 + 5950 6265 5951 + 6265 5950 6269 + 6269 6266 6265 + 6266 6269 6270 + 6270 6271 6266 + 6266 6271 6267 + 6272 6267 6271 + 6268 6267 6272 + 6269 5950 6273 + 6273 6274 6269 + 6270 6269 6274 + 6274 6275 6270 + 6276 6270 6275 + 6271 6270 6276 + 6276 6277 6271 + 6271 6277 6272 + 5949 6273 5950 + 5956 6273 5949 + 6274 6273 5956 + 6274 5956 5955 + 5955 6275 6274 + 6278 6275 5955 + 6275 6278 6276 + 6276 6278 6279 + 6279 6280 6276 + 6277 6276 6280 + 6280 6281 6277 + 6277 6281 6282 + 6282 6272 6277 + 5955 5961 6278 + 6278 5961 6283 + 6283 6279 6278 + 6284 6279 6283 + 6279 6284 6285 + 6285 6280 6279 + 6281 6280 6285 + 6285 6286 6281 + 6281 6286 6287 + 6287 6282 6281 + 6283 5961 5960 + 5960 6288 6283 + 6289 6283 6288 + 6283 6289 6284 + 6284 6289 6290 + 6290 6291 6284 + 6284 6291 6292 + 6292 6285 6284 + 6286 6285 6292 + 6293 6288 5960 + 6294 6288 6293 + 6288 6294 6289 + 6289 6294 6295 + 6295 6296 6289 + 6296 6290 6289 + 5960 6297 6293 + 6293 6297 6298 + 6298 6299 6293 + 6300 6293 6299 + 6293 6300 6294 + 6294 6300 6301 + 6301 6295 6294 + 5959 6297 5960 + 6297 5959 5966 + 5966 6298 6297 + 6302 6298 5966 + 6298 6302 6303 + 6303 6299 6298 + 6299 6303 6304 + 6304 6305 6299 + 6299 6305 6300 + 6301 6300 6305 + 5966 5971 6302 + 6302 5971 6306 + 6306 6307 6302 + 6303 6302 6307 + 6307 6308 6303 + 6304 6303 6308 + 6308 6309 6304 + 6310 6304 6309 + 6305 6304 6310 + 5970 6306 5971 + 6311 6306 5970 + 6306 6311 6312 + 6312 6307 6306 + 6307 6312 6313 + 6313 6308 6307 + 6308 6313 6314 + 6314 6309 6308 + 5970 5976 6311 + 6311 5976 6315 + 6315 6316 6311 + 6312 6311 6316 + 6316 6317 6312 + 6313 6312 6317 + 6317 6318 6313 + 6314 6313 6318 + 6319 6315 5976 + 6320 6315 6319 + 6315 6320 6321 + 6321 6316 6315 + 6316 6321 6322 + 6322 6317 6316 + 6317 6322 6323 + 6323 6318 6317 + 5976 5975 6319 + 6324 6319 5975 + 6325 6319 6324 + 6319 6325 6320 + 6320 6325 6326 + 6326 6327 6320 + 6321 6320 6327 + 6327 6328 6321 + 6322 6321 6328 + 5975 5974 6324 + 5985 6324 5974 + 6329 6324 5985 + 6324 6329 6325 + 6325 6329 6330 + 6330 6326 6325 + 6331 6326 6330 + 6326 6331 6332 + 6332 6327 6326 + 6327 6332 6333 + 6333 6328 6327 + 5985 5990 6329 + 6329 5990 6334 + 6334 6330 6329 + 6335 6330 6334 + 6330 6335 6331 + 6336 6331 6335 + 6332 6331 6336 + 6336 6337 6332 + 6333 6332 6337 + 5995 6334 5990 + 6338 6334 5995 + 6334 6338 6335 + 6335 6338 6339 + 6339 6340 6335 + 6335 6340 6336 + 6341 6336 6340 + 6341 6337 6336 + 5995 6000 6338 + 6338 6000 6342 + 6342 6339 6338 + 6343 6339 6342 + 6339 6343 6344 + 6344 6340 6339 + 6340 6344 6341 + 6345 6341 6344 + 6346 6341 6345 + 6341 6346 6337 + 6005 6342 6000 + 6347 6342 6005 + 6342 6347 6343 + 6343 6347 6348 + 6348 6349 6343 + 6344 6343 6349 + 6349 6350 6344 + 6344 6350 6345 + 6005 6351 6347 + 6347 6351 6352 + 6352 6348 6347 + 6353 6348 6352 + 6348 6353 6354 + 6354 6349 6348 + 6349 6354 6350 + 6351 6005 6004 + 6004 6014 6351 + 6351 6014 6355 + 6355 6352 6351 + 6356 6352 6355 + 6352 6356 6353 + 6353 6356 6357 + 6357 6358 6353 + 6354 6353 6358 + 6358 6359 6354 + 6350 6354 6359 + 6360 6355 6014 + 6361 6355 6360 + 6355 6361 6356 + 6356 6361 6362 + 6357 6356 6362 + 6014 6013 6360 + 6363 6360 6013 + 6364 6360 6363 + 6360 6364 6361 + 6361 6364 6365 + 6365 6366 6361 + 6361 6366 6362 + 6013 6018 6363 + 6367 6363 6018 + 6368 6363 6367 + 6363 6368 6364 + 6365 6364 6368 + 6369 6365 6368 + 6366 6365 6369 + 6369 6370 6366 + 6366 6370 6371 + 6371 6362 6366 + 6018 6023 6367 + 6372 6367 6023 + 6373 6367 6372 + 6367 6373 6368 + 6368 6373 6369 + 6374 6369 6373 + 6370 6369 6374 + 6374 6375 6370 + 6371 6370 6375 + 6023 6028 6372 + 6376 6372 6028 + 6377 6372 6376 + 6372 6377 6373 + 6373 6377 6374 + 6378 6374 6377 + 6377 6379 6378 + 6378 6379 6380 + 6381 6378 6380 + 6028 6033 6376 + 6382 6376 6033 + 6379 6376 6382 + 6376 6379 6377 + 6033 6032 6382 + 6383 6382 6032 + 6380 6382 6383 + 6382 6380 6379 + 6032 6038 6383 + 6384 6383 6038 + 6385 6383 6384 + 6383 6385 6380 + 6380 6385 6381 + 6381 6385 6386 + 6386 6387 6381 + 6375 6381 6387 + 6381 6375 6374 + 6038 6042 6384 + 6388 6384 6042 + 6386 6384 6388 + 6384 6386 6385 + 6042 6046 6388 + 6389 6388 6046 + 6390 6388 6389 + 6388 6390 6386 + 6386 6390 6391 + 6391 6387 6386 + 6387 6391 6392 + 6392 6393 6387 + 6387 6393 6375 + 6046 6394 6389 + 6395 6389 6394 + 6396 6389 6395 + 6389 6396 6390 + 6391 6390 6396 + 6392 6391 6396 + 6045 6394 6046 + 6394 6045 6397 + 6397 6398 6394 + 6394 6398 6395 + 6399 6395 6398 + 6400 6395 6399 + 6395 6400 6396 + 6396 6400 6392 + 6397 6045 6044 + 6044 6401 6397 + 6402 6397 6401 + 6398 6397 6402 + 6402 6403 6398 + 6398 6403 6399 + 6404 6399 6403 + 6405 6399 6404 + 6399 6405 6400 + 6392 6400 6405 + 6406 6401 6044 + 6401 6406 6407 + 6407 6408 6401 + 6401 6408 6402 + 6409 6402 6408 + 6403 6402 6409 + 6409 6410 6403 + 6403 6410 6404 + 6044 6043 6406 + 6406 6043 6411 + 6411 6412 6406 + 6407 6406 6412 + 6412 6413 6407 + 6414 6407 6413 + 6408 6407 6414 + 6414 6415 6408 + 6408 6415 6409 + 5786 6411 6043 + 5785 6411 5786 + 6411 5785 6416 + 6416 6412 6411 + 6412 6416 6417 + 6417 6413 6412 + 6413 6417 6418 + 6418 6419 6413 + 6413 6419 6414 + 6420 6414 6419 + 6415 6414 6420 + 6416 5785 5790 + 5790 6421 6416 + 6417 6416 6421 + 6421 6422 6417 + 6418 6417 6422 + 6422 6423 6418 + 6424 6418 6423 + 6419 6418 6424 + 6424 6425 6419 + 6419 6425 6420 + 5795 6421 5790 + 6421 5795 6426 + 6426 6422 6421 + 6422 6426 6427 + 6427 6423 6422 + 6423 6427 6428 + 6428 6429 6423 + 6423 6429 6424 + 6430 6424 6429 + 6425 6424 6430 + 6426 5795 6431 + 6431 6432 6426 + 6427 6426 6432 + 6432 6433 6427 + 6428 6427 6433 + 6433 6434 6428 + 6435 6428 6434 + 6429 6428 6435 + 5794 6431 5795 + 6436 6431 5794 + 6431 6436 6437 + 6437 6432 6431 + 6432 6437 6438 + 6438 6433 6432 + 6433 6438 6439 + 6439 6434 6433 + 5794 5798 6436 + 6436 5798 5797 + 5797 6440 6436 + 6437 6436 6440 + 6440 198 6437 + 6440 5797 6441 + 6440 6441 6442 + 6442 6443 6440 + 6441 5797 5796 + 5796 123 6441 + 5700 123 5796 + 123 5700 3848 + 3848 6444 123 + 6442 6441 6445 + 6438 6437 6446 + 6446 197 6438 + 6439 6438 197 + 197 3918 6439 + 6447 6439 3918 + 6434 6439 6447 + 6447 6448 6434 + 6434 6448 6435 + 3918 6449 6447 + 6450 6447 6449 + 6448 6447 6450 + 6450 6451 6448 + 6448 6451 6452 + 6452 6435 6448 + 6453 6435 6452 + 6435 6453 6429 + 3917 6449 3918 + 6449 3917 3928 + 3928 6454 6449 + 6449 6454 6450 + 6455 6450 6454 + 6451 6450 6455 + 6455 6456 6451 + 6451 6456 6457 + 6457 6452 6451 + 6458 6452 6457 + 6452 6458 6453 + 6454 3928 6459 + 6459 4104 6454 + 6454 4104 6455 + 4103 6455 4104 + 6456 6455 4103 + 4103 4102 6456 + 6456 4102 6460 + 6460 6457 6456 + 6458 6457 6460 + 6459 3928 3927 + 3927 6461 6459 + 6459 6461 6462 + 4105 6459 6462 + 4104 6459 4105 + 3926 6461 3927 + 6461 3926 3933 + 3933 6462 6461 + 3933 6463 6462 + 6462 6463 6464 + 6464 6465 6462 + 6462 6465 4105 + 4099 4105 6465 + 6465 4100 4099 + 6463 3933 6466 + 6466 6467 6463 + 6463 6467 6468 + 6468 6469 6463 + 6469 6464 6463 + 4100 6464 6469 + 4100 6465 6464 + 3932 6466 3933 + 3938 6466 3932 + 6466 3938 6470 + 6470 6467 6466 + 6467 6470 6471 + 6471 6468 6467 + 6468 6471 6472 + 6472 6473 6468 + 6468 6473 6474 + 6474 6469 6468 + 6470 3938 4140 + 4140 6475 6470 + 6471 6470 6475 + 6475 6476 6471 + 6472 6471 6476 + 6476 4397 6472 + 4401 6472 4397 + 6473 6472 4401 + 4401 4405 6473 + 6474 6473 4405 + 4144 6475 4140 + 6475 4144 6477 + 6477 6476 6475 + 6476 6477 4391 + 4391 4397 6476 + 6477 4144 4148 + 4148 4392 6477 + 4391 6477 4392 + 4153 4392 4148 + 4392 4153 4386 + 4386 4153 4387 + 4152 4387 4153 + 4158 4387 4152 + 4387 4158 4382 + 4382 4158 6478 + 6478 4378 4382 + 6479 4378 6478 + 4378 6479 4372 + 4372 6479 6480 + 6480 4373 4372 + 4157 6478 4158 + 6481 6478 4157 + 6478 6481 6479 + 6479 6481 6482 + 6482 6480 6479 + 6480 6482 6054 + 6054 6060 6480 + 6480 6060 4374 + 4374 4373 6480 + 4157 4163 6481 + 6481 4163 6483 + 6483 6482 6481 + 6054 6482 6483 + 6483 6055 6054 + 6483 6056 6055 + 6056 6483 4163 + 4163 4162 6056 + 6065 4374 6060 + 4368 4374 6065 + 6065 6484 4368 + 4368 6484 4369 + 6485 4369 6484 + 6486 4369 6485 + 4369 6486 4364 + 4360 4364 6486 + 6484 6065 6064 + 6064 6487 6484 + 6484 6487 6485 + 6488 6485 6487 + 6489 6485 6488 + 6485 6489 6486 + 6486 6489 6490 + 6490 6491 6486 + 6486 6491 4360 + 4353 4360 6491 + 6487 6064 6070 + 6070 6492 6487 + 6487 6492 6488 + 6493 6488 6492 + 6488 6493 6494 + 6494 6495 6488 + 6488 6495 6489 + 6489 6495 6496 + 6496 6490 6489 + 6497 6492 6070 + 6492 6497 6493 + 6498 6493 6497 + 6494 6493 6498 + 6498 6499 6494 + 6494 6499 6500 + 6500 6501 6494 + 6495 6494 6501 + 6501 6496 6495 + 6070 6075 6497 + 6497 6075 6074 + 6074 6502 6497 + 6497 6502 6498 + 6503 6498 6502 + 6498 6503 6504 + 6504 6499 6498 + 6499 6504 6505 + 6505 6500 6499 + 6506 6502 6074 + 6502 6506 6503 + 6507 6503 6506 + 6504 6503 6507 + 6507 6508 6504 + 6504 6508 6509 + 6509 6505 6504 + 6510 6505 6509 + 6500 6505 6510 + 6074 6511 6506 + 6506 6511 6512 + 6512 6513 6506 + 6506 6513 6507 + 6514 6507 6513 + 6507 6514 6515 + 6515 6508 6507 + 6511 6074 6073 + 6073 6080 6511 + 6512 6511 6080 + 6080 6516 6512 + 6517 6512 6516 + 6512 6517 6518 + 6518 6513 6512 + 6513 6518 6514 + 6519 6514 6518 + 6515 6514 6519 + 6085 6516 6080 + 6520 6516 6085 + 6516 6520 6517 + 6521 6517 6520 + 6518 6517 6521 + 6521 6522 6518 + 6518 6522 6519 + 6085 6523 6520 + 6520 6523 6524 + 6524 6525 6520 + 6520 6525 6521 + 6526 6521 6525 + 6521 6526 6527 + 6527 6522 6521 + 6523 6085 6090 + 6090 6528 6523 + 6524 6523 6528 + 6528 6529 6524 + 6530 6524 6529 + 6524 6530 6531 + 6531 6525 6524 + 6525 6531 6526 + 6532 6526 6531 + 6527 6526 6532 + 6528 6090 6089 + 6089 6533 6528 + 6528 6533 6534 + 6534 6529 6528 + 6535 6529 6534 + 6529 6535 6530 + 6536 6530 6535 + 6531 6530 6536 + 6536 6537 6531 + 6531 6537 6532 + 6533 6089 6095 + 6095 6538 6533 + 6534 6533 6538 + 6538 6539 6534 + 6540 6534 6539 + 6534 6540 6535 + 6535 6540 6541 + 6541 6542 6535 + 6535 6542 6536 + 6538 6095 6094 + 6094 6543 6538 + 6538 6543 6544 + 6544 6539 6538 + 6545 6539 6544 + 6539 6545 6540 + 6541 6540 6545 + 6543 6094 6103 + 6103 6546 6543 + 6544 6543 6546 + 6546 6547 6544 + 6548 6544 6547 + 6544 6548 6545 + 6545 6548 6549 + 6549 6550 6545 + 6545 6550 6541 + 6546 6103 6102 + 6102 6551 6546 + 6546 6551 6552 + 6552 6547 6546 + 6553 6547 6552 + 6547 6553 6548 + 6549 6548 6553 + 6551 6102 6111 + 6111 6554 6551 + 6552 6551 6554 + 6554 6555 6552 + 6556 6552 6555 + 6552 6556 6553 + 6553 6556 6557 + 6557 6558 6553 + 6553 6558 6549 + 6554 6111 6110 + 6110 6559 6554 + 6554 6559 6560 + 6560 6555 6554 + 6561 6555 6560 + 6555 6561 6556 + 6557 6556 6561 + 6559 6110 6562 + 6562 6563 6559 + 6560 6559 6563 + 6563 6564 6560 + 6565 6560 6564 + 6560 6565 6561 + 6114 6562 6110 + 6123 6562 6114 + 6563 6562 6123 + 6123 6566 6563 + 6563 6566 6567 + 6567 6564 6563 + 6568 6564 6567 + 6564 6568 6565 + 6569 6565 6568 + 6561 6565 6569 + 6569 6570 6561 + 6561 6570 6557 + 6566 6123 6571 + 6571 6572 6566 + 6567 6566 6572 + 6572 6573 6567 + 6574 6567 6573 + 6567 6574 6568 + 6122 6571 6123 + 6575 6571 6122 + 6572 6571 6575 + 6575 6576 6572 + 6572 6576 6577 + 6577 6573 6572 + 6578 6573 6577 + 6573 6578 6574 + 6579 6574 6578 + 6568 6574 6579 + 6122 6128 6575 + 6575 6128 6580 + 6580 6581 6575 + 6576 6575 6581 + 6581 6582 6576 + 6577 6576 6582 + 6582 6583 6577 + 6584 6577 6583 + 6577 6584 6578 + 6127 6580 6128 + 6580 6127 6585 + 6585 6586 6580 + 6580 6586 6587 + 6587 6581 6580 + 6582 6581 6587 + 6587 6588 6582 + 6582 6588 6589 + 6589 6583 6582 + 6585 6127 6126 + 6126 6590 6585 + 6585 6590 6591 + 6591 6592 6585 + 6586 6585 6592 + 6592 6593 6586 + 6587 6586 6593 + 6593 6594 6587 + 6588 6587 6594 + 6132 6590 6126 + 6590 6132 6595 + 6595 6591 6590 + 6591 6595 6596 + 6596 6597 6591 + 6591 6597 6598 + 6598 6592 6591 + 6593 6592 6598 + 6599 6595 6132 + 6596 6595 6599 + 6599 6600 6596 + 6596 6600 6601 + 6601 6602 6596 + 6597 6596 6602 + 6602 6603 6597 + 6598 6597 6603 + 6132 6604 6599 + 6138 6599 6604 + 6599 6138 6605 + 6605 6600 6599 + 6600 6605 6606 + 6606 6601 6600 + 6131 6604 6132 + 6130 6604 6131 + 6604 6130 6138 + 6605 6138 6137 + 6137 6607 6605 + 6605 6607 6608 + 6608 6606 6605 + 6609 6606 6608 + 6601 6606 6609 + 6609 6610 6601 + 6601 6610 6611 + 6611 6602 6601 + 6603 6602 6611 + 6607 6137 6612 + 6607 6612 6613 + 6613 6608 6607 + 6608 6613 6614 + 6614 6615 6608 + 6608 6615 6609 + 6616 6609 6615 + 6610 6609 6616 + 6612 6137 6136 + 6136 6148 6612 + 6612 6148 6617 + 6617 6613 6612 + 6614 6613 6617 + 6617 6618 6614 + 6619 6614 6618 + 6615 6614 6619 + 6619 6620 6615 + 6615 6620 6616 + 6148 6153 6617 + 6621 6617 6153 + 6621 6618 6617 + 6618 6621 6622 + 6622 6623 6618 + 6618 6623 6619 + 6624 6619 6623 + 6619 6624 6625 + 6625 6620 6619 + 6153 6158 6621 + 6621 6158 6626 + 6626 6622 6621 + 6627 6622 6626 + 6622 6627 6628 + 6628 6623 6622 + 6623 6628 6624 + 6624 6628 6629 + 6629 6630 6624 + 6625 6624 6630 + 6157 6626 6158 + 6631 6626 6157 + 6626 6631 6627 + 6627 6631 6632 + 6632 6633 6627 + 6628 6627 6633 + 6633 6629 6628 + 6634 6629 6633 + 6629 6634 6635 + 6635 6630 6629 + 6157 6163 6631 + 6631 6163 6636 + 6636 6632 6631 + 6637 6632 6636 + 6632 6637 6638 + 6638 6633 6632 + 6633 6638 6634 + 6634 6638 6639 + 6639 6640 6634 + 6635 6634 6640 + 6641 6636 6163 + 6642 6636 6641 + 6636 6642 6637 + 6637 6642 6643 + 6643 6644 6637 + 6638 6637 6644 + 6644 6639 6638 + 6163 6162 6641 + 6645 6641 6162 + 6646 6641 6645 + 6641 6646 6642 + 6642 6646 6647 + 6647 6643 6642 + 6648 6643 6647 + 6643 6648 6649 + 6649 6644 6643 + 6162 6167 6645 + 6650 6645 6167 + 6651 6645 6650 + 6645 6651 6646 + 6646 6651 6652 + 6652 6647 6646 + 6653 6647 6652 + 6647 6653 6648 + 6167 6166 6650 + 6654 6650 6166 + 6655 6650 6654 + 6650 6655 6651 + 6651 6655 6656 + 6656 6652 6651 + 6657 6652 6656 + 6652 6657 6653 + 6166 6171 6654 + 6658 6654 6171 + 6659 6654 6658 + 6654 6659 6655 + 6655 6659 6660 + 6660 6656 6655 + 6661 6656 6660 + 6656 6661 6657 + 6171 6175 6658 + 6662 6658 6175 + 6663 6658 6662 + 6658 6663 6659 + 6659 6663 6664 + 6664 6660 6659 + 6665 6660 6664 + 6660 6665 6661 + 6175 6666 6662 + 6667 6662 6666 + 6668 6662 6667 + 6662 6668 6663 + 6663 6668 6669 + 6669 6664 6663 + 6670 6664 6669 + 6664 6670 6665 + 6174 6666 6175 + 6666 6174 6180 + 6180 6671 6666 + 6666 6671 6667 + 6672 6667 6671 + 6673 6667 6672 + 6667 6673 6668 + 6668 6673 6674 + 6674 6669 6668 + 6675 6669 6674 + 6669 6675 6670 + 6671 6180 6185 + 6185 6676 6671 + 6671 6676 6672 + 6677 6672 6676 + 6678 6672 6677 + 6672 6678 6673 + 6673 6678 6679 + 6679 6674 6673 + 6680 6674 6679 + 6674 6680 6675 + 6676 6185 6681 + 6681 6682 6676 + 6676 6682 6677 + 6683 6677 6682 + 6684 6677 6683 + 6677 6684 6678 + 6678 6684 6685 + 6685 6679 6678 + 6681 6185 6184 + 6686 6681 6184 + 6687 6681 6686 + 6682 6681 6687 + 6687 6688 6682 + 6682 6688 6683 + 6689 6683 6688 + 6690 6683 6689 + 6683 6690 6684 + 6184 6200 6686 + 6199 6686 6200 + 6691 6686 6199 + 6686 6691 6687 + 6692 6687 6691 + 6688 6687 6692 + 6692 6693 6688 + 6688 6693 6689 + 6694 6689 6693 + 6695 6689 6694 + 6689 6695 6690 + 6199 6205 6691 + 6691 6205 6696 + 6696 6697 6691 + 6691 6697 6698 + 6698 6692 6691 + 6699 6692 6698 + 6693 6692 6699 + 6693 6699 6694 + 6209 6696 6205 + 6700 6696 6209 + 6696 6700 6701 + 6701 6697 6696 + 6697 6701 6702 + 6702 6698 6697 + 6703 6698 6702 + 6698 6703 6699 + 6694 6699 6703 + 6209 6214 6700 + 6700 6214 6212 + 6704 6700 6212 + 6701 6700 6704 + 6704 6705 6701 + 6701 6705 6706 + 6706 6707 6701 + 6707 6702 6701 + 6213 6212 6214 + 6429 6453 6430 + 6708 6430 6453 + 6709 6430 6708 + 6430 6709 6425 + 6425 6709 6710 + 6710 6420 6425 + 6453 6458 6708 + 6458 6711 6708 + 6711 6712 6708 + 6713 6708 6712 + 6714 6708 6713 + 6708 6714 6709 + 6710 6709 6714 + 6460 6711 6458 + 6715 6711 6460 + 6711 6715 6716 + 6716 6712 6711 + 6717 6712 6716 + 6712 6717 6713 + 6715 6460 6718 + 6718 6719 6715 + 6715 6719 6720 + 6720 6716 6715 + 6717 6716 6720 + 6720 6721 6717 + 6717 6721 6722 + 6713 6717 6722 + 6723 6718 6460 + 6724 6718 6723 + 6719 6718 6724 + 6719 6724 6725 + 6725 6720 6719 + 6721 6720 6725 + 6721 6725 6726 + 6726 6722 6721 + 4102 6723 6460 + 6727 6723 4102 + 6728 6723 6727 + 6723 6728 6724 + 6724 6728 6726 + 6726 6725 6724 + 4102 4101 6727 + 6729 6727 4101 + 6728 6727 6729 + 6729 6730 6728 + 6728 6730 6726 + 6730 6731 6726 + 6732 6726 6731 + 6732 6722 6726 + 4101 6733 6729 + 6375 6393 6371 + 6393 6734 6371 + 6734 6735 6371 + 6735 6736 6371 + 6736 6737 6371 + 6737 6738 6371 + 6738 6739 6371 + 6740 6371 6739 + 6371 6740 6741 + 6741 6362 6371 + 6742 6734 6393 + 6743 6734 6742 + 6734 6743 6744 + 6744 6735 6734 + 6393 6392 6742 + 6405 6742 6392 + 6745 6742 6405 + 6742 6745 6743 + 6743 6745 6746 + 6746 6747 6743 + 6743 6747 6748 + 6748 6744 6743 + 6749 6744 6748 + 6744 6749 6750 + 6405 6751 6745 + 6745 6751 6746 + 6752 6746 6751 + 6746 6752 6753 + 6753 6747 6746 + 6747 6753 6754 + 6754 6748 6747 + 6404 6751 6405 + 6751 6404 6752 + 6752 6404 6410 + 6410 6755 6752 + 6753 6752 6755 + 6755 6756 6753 + 6754 6753 6756 + 6756 6757 6754 + 6758 6754 6757 + 6748 6754 6758 + 6758 6759 6748 + 6748 6759 6749 + 6760 6755 6410 + 6755 6760 6761 + 6761 6756 6755 + 6756 6761 6762 + 6762 6757 6756 + 6757 6762 6763 + 6763 6764 6757 + 6757 6764 6758 + 6410 6409 6760 + 6760 6409 6415 + 6415 6765 6760 + 6761 6760 6765 + 6765 6766 6761 + 6762 6761 6766 + 6766 6767 6762 + 6763 6762 6767 + 6767 6768 6763 + 6769 6763 6768 + 6764 6763 6769 + 6420 6765 6415 + 6765 6420 6710 + 6710 6766 6765 + 6766 6710 6770 + 6770 6767 6766 + 6767 6770 6771 + 6771 6768 6767 + 6768 6771 6772 + 6772 6773 6768 + 6768 6773 6769 + 6714 6770 6710 + 6771 6770 6714 + 6714 6713 6771 + 6772 6771 6713 + 6722 6772 6713 + 6774 6772 6722 + 6773 6772 6774 + 6774 6775 6773 + 6773 6775 6776 + 6776 6769 6773 + 6777 6769 6776 + 6769 6777 6764 + 6764 6777 6778 + 6778 6758 6764 + 6722 6732 6774 + 6774 6732 6779 + 6779 6780 6774 + 6775 6774 6780 + 6780 6781 6775 + 6775 6781 6782 + 6782 6776 6775 + 6783 6776 6782 + 6776 6783 6777 + 6732 6784 6779 + 4976 6779 6784 + 4981 6779 4976 + 6779 4981 6785 + 6785 6780 6779 + 6781 6780 6785 + 6731 6784 6732 + 6784 6731 6786 + 6784 6786 4976 + 4976 6786 6787 + 6787 4971 4976 + 4966 4971 6787 + 6787 6788 4966 + 4966 6788 6789 + 6786 6731 6730 + 6730 6787 6786 + 6788 6787 6730 + 6730 6729 6788 + 6788 6729 6790 + 6790 6789 6788 + 4986 6785 4981 + 6791 6785 4986 + 6785 6791 6781 + 6781 6791 6792 + 6792 6782 6781 + 6793 6782 6792 + 6782 6793 6783 + 6783 6793 6794 + 6794 6795 6783 + 6777 6783 6795 + 4986 4991 6791 + 6791 4991 6796 + 6796 6792 6791 + 6797 6792 6796 + 6792 6797 6793 + 6793 6797 6798 + 6798 6794 6793 + 6799 6794 6798 + 6794 6799 6800 + 6800 6795 6794 + 4996 6796 4991 + 6801 6796 4996 + 6796 6801 6797 + 6797 6801 6802 + 6802 6798 6797 + 6736 6798 6802 + 6798 6736 6799 + 6799 6736 6735 + 6735 6750 6799 + 6750 6800 6799 + 4996 6803 6801 + 6801 6803 6804 + 6804 6802 6801 + 6737 6802 6804 + 6802 6737 6736 + 6803 4996 4995 + 4995 6805 6803 + 6803 6805 6806 + 6804 6803 6806 + 6806 6807 6804 + 6808 6804 6807 + 6804 6808 6737 + 6737 6808 6809 + 6809 6738 6737 + 6805 4995 4994 + 6805 4994 4993 + 4993 6806 6805 + 5003 6806 4993 + 6806 5003 6810 + 6810 6807 6806 + 6811 6807 6810 + 6807 6811 6808 + 6808 6811 6812 + 6812 6809 6808 + 6813 6809 6812 + 6809 6813 6814 + 6814 6738 6809 + 5007 6810 5003 + 6815 6810 5007 + 6810 6815 6811 + 6811 6815 6816 + 6816 6812 6811 + 6817 6812 6816 + 6812 6817 6813 + 6813 6817 6818 + 6819 6813 6818 + 6814 6813 6819 + 5007 5011 6815 + 6815 5011 6820 + 6820 6816 6815 + 6821 6816 6820 + 6816 6821 6817 + 6817 6821 6822 + 6822 6818 6817 + 5016 6820 5011 + 6823 6820 5016 + 6820 6823 6821 + 6822 6821 6823 + 6823 6824 6822 + 6825 6822 6824 + 6825 6818 6822 + 6818 6825 6826 + 6826 6827 6818 + 6818 6827 6819 + 5016 5021 6823 + 6823 5021 5026 + 5026 6824 6823 + 6828 6824 5026 + 6824 6828 6825 + 6825 6828 6829 + 6829 6830 6825 + 6830 6826 6825 + 6831 6826 6830 + 6826 6831 6827 + 6827 6831 6832 + 6832 6819 6827 + 5026 6833 6828 + 6828 6833 6834 + 6834 6829 6828 + 6835 6829 6834 + 6829 6835 6836 + 6836 6830 6829 + 6833 5026 5025 + 5025 5031 6833 + 6834 6833 5031 + 5031 6837 6834 + 6838 6834 6837 + 6834 6838 6835 + 6835 6838 6839 + 6839 6840 6835 + 6835 6840 6841 + 6841 6836 6835 + 5035 6837 5031 + 6842 6837 5035 + 6837 6842 6838 + 6839 6838 6842 + 6842 6843 6839 + 6844 6839 6843 + 6839 6844 6845 + 6845 6840 6839 + 6840 6845 6846 + 6846 6841 6840 + 5035 6847 6842 + 6842 6847 6848 + 6848 6843 6842 + 6849 6843 6848 + 6843 6849 6844 + 6850 6844 6849 + 6845 6844 6850 + 6847 5035 5038 + 5038 5043 6847 + 6848 6847 5043 + 5043 6851 6848 + 6852 6848 6851 + 6848 6852 6849 + 6849 6852 6853 + 6853 6854 6849 + 6849 6854 6850 + 5047 6851 5043 + 6855 6851 5047 + 6851 6855 6852 + 6853 6852 6855 + 6855 6856 6853 + 6857 6853 6856 + 6853 6857 6858 + 6858 6854 6853 + 6854 6858 6859 + 6859 6850 6854 + 5047 5055 6855 + 6855 5055 6860 + 6860 6856 6855 + 6861 6856 6860 + 6856 6861 6857 + 6857 6861 6862 + 6862 6863 6857 + 6858 6857 6863 + 6860 5055 5054 + 5054 3408 6860 + 3407 6860 3408 + 6860 3407 6861 + 6861 3407 3406 + 3406 6862 6861 + 3406 6864 6862 + 3409 3408 5054 + 6750 6735 6865 + 6795 6778 6777 + 6866 6778 6795 + 6778 6866 6759 + 6759 6758 6778 + 6795 6800 6866 + 6866 6800 6750 + 6750 6749 6866 + 6749 6759 6866 + 4869 4868 5353 + 5353 4868 4867 + 4867 6867 5353 + 6867 6868 5353 + 5349 5353 6868 + 6868 5343 5349 + 5343 6868 6869 + 6869 5344 5343 + 6870 6867 4867 + 6871 6867 6870 + 6867 6871 6869 + 6869 6868 6867 + 4867 4873 6870 + 6870 4873 4878 + 4878 6872 6870 + 6871 6870 6872 + 6872 6873 6871 + 6869 6871 6873 + 6873 6874 6869 + 6874 6875 6869 + 6875 6876 6869 + 5344 6869 6876 + 4955 6872 4878 + 6872 4955 6877 + 6877 6873 6872 + 6873 6877 6878 + 6878 6874 6873 + 6879 6874 6878 + 6874 6879 6880 + 6880 6875 6874 + 6877 4955 6881 + 6881 6882 6877 + 6878 6877 6882 + 6882 6883 6878 + 6884 6878 6883 + 6878 6884 6879 + 4341 6881 4955 + 4345 6881 4341 + 4345 6882 6881 + 6882 4345 4350 + 4350 6883 6882 + 6883 4350 6885 + 6885 6886 6883 + 6883 6886 6884 + 6887 6884 6886 + 6879 6884 6887 + 6887 6888 6879 + 6879 6888 6889 + 6889 6880 6879 + 6885 4350 4349 + 4349 6890 6885 + 6891 6885 6890 + 6886 6885 6891 + 6891 6892 6886 + 6886 6892 6887 + 6893 6887 6892 + 6887 6893 6894 + 6894 6888 6887 + 6890 4349 4348 + 4348 6895 6890 + 6890 6895 6896 + 6896 6897 6890 + 6890 6897 6891 + 6898 6891 6897 + 6891 6898 6899 + 6899 6892 6891 + 6892 6899 6893 + 6895 4348 6900 + 6900 6901 6895 + 6896 6895 6901 + 6901 6902 6896 + 6903 6896 6902 + 6896 6903 6904 + 6904 6897 6896 + 6897 6904 6898 + 4353 6900 4348 + 6491 6900 4353 + 6900 6491 6490 + 6490 6901 6900 + 6901 6490 6496 + 6496 6902 6901 + 6905 6902 6496 + 6902 6905 6903 + 6906 6903 6905 + 6904 6903 6906 + 6906 6907 6904 + 6904 6907 6908 + 6908 6898 6904 + 6899 6898 6908 + 6496 6501 6905 + 6905 6501 6500 + 6500 6909 6905 + 6905 6909 6906 + 6910 6906 6909 + 6906 6910 6911 + 6911 6907 6906 + 6907 6911 6912 + 6912 6908 6907 + 6510 6909 6500 + 6909 6510 6910 + 6913 6910 6510 + 6911 6910 6913 + 6913 6914 6911 + 6911 6914 6915 + 6915 6912 6911 + 6916 6912 6915 + 6908 6912 6916 + 6916 6917 6908 + 6908 6917 6899 + 6510 6918 6913 + 6919 6913 6918 + 6913 6919 6920 + 6920 6914 6913 + 6914 6920 6921 + 6921 6915 6914 + 6509 6918 6510 + 6922 6918 6509 + 6918 6922 6919 + 6923 6919 6922 + 6920 6919 6923 + 6923 6924 6920 + 6920 6924 6925 + 6925 6921 6920 + 6926 6921 6925 + 6915 6921 6926 + 6509 6927 6922 + 6922 6927 6928 + 6928 6929 6922 + 6922 6929 6923 + 6930 6923 6929 + 6923 6930 6931 + 6931 6924 6923 + 6927 6509 6508 + 6508 6515 6927 + 6928 6927 6515 + 6515 6932 6928 + 6933 6928 6932 + 6928 6933 6934 + 6934 6929 6928 + 6929 6934 6930 + 6935 6930 6934 + 6931 6930 6935 + 6519 6932 6515 + 6936 6932 6519 + 6932 6936 6933 + 6937 6933 6936 + 6934 6933 6937 + 6937 6938 6934 + 6934 6938 6935 + 6519 6939 6936 + 6936 6939 6940 + 6940 6941 6936 + 6936 6941 6937 + 6942 6937 6941 + 6937 6942 6943 + 6943 6938 6937 + 6939 6519 6522 + 6522 6527 6939 + 6940 6939 6527 + 6527 6944 6940 + 6945 6940 6944 + 6940 6945 6946 + 6946 6941 6940 + 6941 6946 6942 + 6947 6942 6946 + 6943 6942 6947 + 6532 6944 6527 + 6948 6944 6532 + 6944 6948 6945 + 6949 6945 6948 + 6946 6945 6949 + 6949 6950 6946 + 6946 6950 6947 + 6951 6947 6950 + 6952 6947 6951 + 6947 6952 6943 + 6532 6953 6948 + 6948 6953 6954 + 6954 6955 6948 + 6948 6955 6949 + 6956 6949 6955 + 6950 6949 6956 + 6956 6957 6950 + 6950 6957 6951 + 6953 6532 6537 + 6537 6958 6953 + 6954 6953 6958 + 6958 6959 6954 + 6960 6954 6959 + 6955 6954 6960 + 6960 6961 6955 + 6955 6961 6956 + 6962 6956 6961 + 6957 6956 6962 + 6958 6537 6536 + 6536 6963 6958 + 6958 6963 6964 + 6964 6959 6958 + 6959 6964 6965 + 6965 6966 6959 + 6959 6966 6960 + 6967 6960 6966 + 6961 6960 6967 + 6963 6536 6542 + 6542 6968 6963 + 6964 6963 6968 + 6968 6969 6964 + 6965 6964 6969 + 6969 6970 6965 + 6971 6965 6970 + 6966 6965 6971 + 6971 6972 6966 + 6966 6972 6967 + 6968 6542 6541 + 6541 6973 6968 + 6968 6973 6974 + 6974 6969 6968 + 6969 6974 6975 + 6975 6970 6969 + 6970 6975 6976 + 6976 6977 6970 + 6970 6977 6971 + 6973 6541 6550 + 6550 6978 6973 + 6974 6973 6978 + 6978 6979 6974 + 6975 6974 6979 + 6979 6980 6975 + 6976 6975 6980 + 6978 6550 6549 + 6549 6981 6978 + 6978 6981 6982 + 6982 6979 6978 + 6982 6980 6979 + 6980 6982 6983 + 6983 6984 6980 + 6980 6984 6976 + 6981 6549 6558 + 6558 6985 6981 + 6982 6981 6985 + 6985 6983 6982 + 6986 6983 6985 + 6983 6986 6987 + 6987 6984 6983 + 6984 6987 6988 + 6988 6989 6984 + 6984 6989 6976 + 6985 6558 6557 + 6557 6990 6985 + 6985 6990 6986 + 6986 6990 6991 + 6991 6992 6986 + 6987 6986 6992 + 6992 6993 6987 + 6988 6987 6993 + 6990 6557 6570 + 6570 6991 6990 + 6991 6570 6569 + 6569 6994 6991 + 6991 6994 6995 + 6995 6992 6991 + 6995 6993 6992 + 6993 6995 6996 + 6996 6997 6993 + 6993 6997 6988 + 6994 6569 6998 + 6998 6999 6994 + 6995 6994 6999 + 6999 6996 6995 + 7000 6996 6999 + 6996 7000 7001 + 7001 6997 6996 + 6568 6998 6569 + 6579 6998 6568 + 6999 6998 6579 + 6579 7002 6999 + 6999 7002 7000 + 7000 7002 7003 + 7003 7004 7000 + 7001 7000 7004 + 7004 7005 7001 + 7006 7001 7005 + 6997 7001 7006 + 7002 6579 7007 + 7007 7003 7002 + 7003 7007 7008 + 7008 7009 7003 + 7003 7009 7010 + 7010 7004 7003 + 7010 7005 7004 + 6578 7007 6579 + 7008 7007 6578 + 6578 6584 7008 + 7008 6584 7011 + 7011 7012 7008 + 7009 7008 7012 + 7012 7013 7009 + 7010 7009 7013 + 7013 7014 7010 + 7005 7010 7014 + 7014 7015 7005 + 7005 7015 7006 + 6583 7011 6584 + 7011 6583 6589 + 6589 7016 7011 + 7011 7016 7017 + 7017 7012 7011 + 7013 7012 7017 + 7017 7018 7013 + 7013 7018 7019 + 7019 7014 7013 + 7014 7019 7020 + 7020 7015 7014 + 7016 6589 7021 + 7021 7022 7016 + 7017 7016 7022 + 7022 7023 7017 + 7018 7017 7023 + 7023 7024 7018 + 7019 7018 7024 + 7024 7025 7019 + 7020 7019 7025 + 7026 7021 6589 + 7027 7021 7026 + 7022 7021 7027 + 7027 7028 7022 + 7022 7028 7029 + 7029 7023 7022 + 7024 7023 7029 + 6589 6588 7026 + 6594 7026 6588 + 7026 6594 7030 + 7030 7031 7026 + 7026 7031 7027 + 7027 7031 7032 + 7032 7033 7027 + 7028 7027 7033 + 7033 7034 7028 + 7029 7028 7034 + 7030 6594 6593 + 6593 7035 7030 + 7030 7035 7036 + 7036 7037 7030 + 7031 7030 7037 + 7037 7032 7031 + 6598 7035 6593 + 7035 6598 7038 + 7038 7036 7035 + 7036 7038 7039 + 7039 7040 7036 + 7036 7040 7041 + 7041 7037 7036 + 7032 7037 7041 + 6603 7038 6598 + 7039 7038 6603 + 6603 7042 7039 + 7039 7042 7043 + 7043 7044 7039 + 7040 7039 7044 + 7044 7045 7040 + 7041 7040 7045 + 6611 7042 6603 + 7042 6611 7046 + 7046 7043 7042 + 7043 7046 7047 + 7047 7048 7043 + 7043 7048 7049 + 7049 7044 7043 + 7045 7044 7049 + 7050 7046 6611 + 7047 7046 7050 + 7050 7051 7047 + 7047 7051 7052 + 7052 7053 7047 + 7048 7047 7053 + 7053 7054 7048 + 7049 7048 7054 + 6611 6610 7050 + 6616 7050 6610 + 7051 7050 6616 + 6616 7055 7051 + 7051 7055 7056 + 7056 7052 7051 + 7057 7052 7056 + 7052 7057 7058 + 7058 7053 7052 + 7054 7053 7058 + 7055 6616 6620 + 6620 6625 7055 + 7055 6625 7059 + 7059 7056 7055 + 7060 7056 7059 + 7056 7060 7057 + 7057 7060 7061 + 7061 7062 7057 + 7058 7057 7062 + 6630 7059 6625 + 7063 7059 6630 + 7059 7063 7060 + 7060 7063 7064 + 7064 7061 7060 + 7065 7061 7064 + 7061 7065 7066 + 7066 7062 7061 + 6630 6635 7063 + 7063 6635 7067 + 7067 7064 7063 + 7068 7064 7067 + 7064 7068 7065 + 7065 7068 7069 + 7069 7070 7065 + 7066 7065 7070 + 6640 7067 6635 + 7071 7067 6640 + 7067 7071 7068 + 7068 7071 7072 + 7072 7069 7068 + 7073 7069 7072 + 7069 7073 7074 + 7074 7070 7069 + 6640 7075 7071 + 7071 7075 7076 + 7076 7072 7071 + 7077 7072 7076 + 7072 7077 7073 + 7073 7077 7078 + 7078 7079 7073 + 7074 7073 7079 + 7075 6640 6639 + 6639 7080 7075 + 7075 7080 7081 + 7081 7076 7075 + 7082 7076 7081 + 7076 7082 7077 + 7077 7082 7083 + 7083 7078 7077 + 7080 6639 6644 + 6644 6649 7080 + 7080 6649 7084 + 7084 7081 7080 + 7085 7081 7084 + 7081 7085 7082 + 7082 7085 7086 + 7086 7083 7082 + 7087 7083 7086 + 7083 7087 7088 + 7088 7078 7083 + 7089 7084 6649 + 7090 7084 7089 + 7084 7090 7085 + 7085 7090 7091 + 7091 7086 7085 + 7092 7086 7091 + 7086 7092 7087 + 6649 6648 7089 + 7093 7089 6648 + 7094 7089 7093 + 7089 7094 7090 + 7090 7094 7095 + 7095 7091 7090 + 7096 7091 7095 + 7091 7096 7092 + 6648 6653 7093 + 7097 7093 6653 + 7098 7093 7097 + 7093 7098 7094 + 7094 7098 7099 + 7099 7095 7094 + 7100 7095 7099 + 7095 7100 7096 + 6653 6657 7097 + 7101 7097 6657 + 7102 7097 7101 + 7097 7102 7098 + 7098 7102 7103 + 7103 7099 7098 + 7104 7099 7103 + 7099 7104 7100 + 6657 6661 7101 + 7105 7101 6661 + 7106 7101 7105 + 7101 7106 7102 + 7102 7106 7107 + 7107 7103 7102 + 7108 7103 7107 + 7103 7108 7104 + 6661 6665 7105 + 7109 7105 6665 + 7110 7105 7109 + 7105 7110 7106 + 7106 7110 7111 + 7111 7107 7106 + 7112 7107 7111 + 7107 7112 7108 + 6665 6670 7109 + 7113 7109 6670 + 7114 7109 7113 + 7109 7114 7110 + 7110 7114 7115 + 7115 7111 7110 + 7116 7111 7115 + 7111 7116 7112 + 6670 6675 7113 + 7117 7113 6675 + 7118 7113 7117 + 7113 7118 7114 + 7114 7118 7119 + 7119 7115 7114 + 7120 7115 7119 + 7115 7120 7116 + 6675 6680 7117 + 7121 7117 6680 + 7122 7117 7121 + 7117 7122 7118 + 7118 7122 7123 + 7123 7119 7118 + 7124 7119 7123 + 7119 7124 7120 + 6680 7125 7121 + 7126 7121 7125 + 7127 7121 7126 + 7121 7127 7122 + 7122 7127 7128 + 7128 7123 7122 + 7129 7123 7128 + 7123 7129 7124 + 6679 7125 6680 + 7125 6679 6685 + 6685 7130 7125 + 7125 7130 7126 + 7131 7126 7130 + 7132 7126 7131 + 7126 7132 7127 + 7127 7132 7133 + 7133 7128 7127 + 7134 7128 7133 + 7128 7134 7129 + 7130 6685 7135 + 7135 7136 7130 + 7130 7136 7131 + 7137 7131 7136 + 7138 7131 7137 + 7131 7138 7132 + 7132 7138 7139 + 7139 7133 7132 + 7135 6685 6684 + 6684 6690 7135 + 7140 7135 6690 + 7136 7135 7140 + 7140 7141 7136 + 7136 7141 7137 + 7142 7137 7141 + 6287 7137 7142 + 7137 6287 7138 + 7138 6287 6286 + 6286 7139 7138 + 6690 6695 7140 + 7143 7140 6695 + 7141 7140 7143 + 7143 7144 7141 + 7141 7144 7142 + 7145 7142 7144 + 6282 7142 7145 + 7142 6282 6287 + 6695 7146 7143 + 7147 7143 7146 + 7144 7143 7147 + 7147 7148 7144 + 7144 7148 7145 + 6268 7145 7148 + 6272 7145 6268 + 7145 6272 6282 + 6694 7146 6695 + 7146 6694 7149 + 7149 7150 7146 + 7146 7150 7147 + 7151 7147 7150 + 7148 7147 7151 + 7151 6264 7148 + 7148 6264 6268 + 6703 7149 6694 + 7152 7149 6703 + 7150 7149 7152 + 7152 7153 7150 + 7150 7153 7151 + 6260 7151 7153 + 6264 7151 6260 + 6703 7154 7152 + 7152 7154 7155 + 7155 7156 7152 + 7153 7152 7156 + 7156 6255 7153 + 7153 6255 6260 + 6702 7154 6703 + 7154 6702 6707 + 6707 7155 7154 + 7155 6707 7157 + 7155 7157 6250 + 6250 7156 7155 + 6255 7156 6250 + 7157 6707 6706 + 6706 6245 7157 + 6250 7157 6245 + 6245 6706 6240 + 6240 6706 6705 + 6705 7158 6240 + 6240 7158 6228 + 7159 6228 7158 + 6228 7159 6219 + 6219 7159 6212 + 6212 7159 6704 + 7158 6705 6704 + 7158 6704 7159 + 6292 7139 6286 + 7139 6292 7160 + 7160 7133 7139 + 7133 7160 7134 + 7134 7160 7161 + 7161 7162 7134 + 7129 7134 7162 + 7160 6292 6291 + 6291 7161 7160 + 7161 6291 6290 + 6290 7163 7161 + 7161 7163 7164 + 7164 7162 7161 + 7165 7162 7164 + 7162 7165 7129 + 7124 7129 7165 + 7165 7166 7124 + 7120 7124 7166 + 7163 6290 6296 + 6296 7167 7163 + 7163 7167 7168 + 7168 7164 7163 + 7169 7164 7168 + 7164 7169 7165 + 7165 7169 7170 + 7170 7166 7165 + 7171 7166 7170 + 7166 7171 7120 + 7116 7120 7171 + 7167 6296 7172 + 7172 7173 7167 + 7167 7173 7174 + 7174 7168 7167 + 7175 7168 7174 + 7168 7175 7169 + 7169 7175 7176 + 7176 7170 7169 + 7172 6296 6295 + 6295 7177 7172 + 7172 7177 7178 + 7178 7179 7172 + 7173 7172 7179 + 7179 7180 7173 + 7174 7173 7180 + 6301 7177 6295 + 7177 6301 7181 + 7181 7178 7177 + 7182 7178 7181 + 7178 7182 7183 + 7183 7179 7178 + 7179 7183 7184 + 7184 7180 7179 + 6305 7181 6301 + 6310 7181 6305 + 7181 6310 7182 + 7182 6310 7185 + 7185 7186 7182 + 7183 7182 7186 + 7186 7187 7183 + 7184 7183 7187 + 7187 7188 7184 + 7189 7184 7188 + 7180 7184 7189 + 6309 7185 6310 + 7190 7185 6309 + 7185 7190 7191 + 7191 7186 7185 + 7186 7191 7192 + 7192 7187 7186 + 7187 7192 7193 + 7193 7188 7187 + 6309 6314 7190 + 7190 6314 7194 + 7194 7195 7190 + 7191 7190 7195 + 7195 7196 7191 + 7192 7191 7196 + 7196 7197 7192 + 7193 7192 7197 + 6318 7194 6314 + 7198 7194 6318 + 7194 7198 7199 + 7199 7195 7194 + 7195 7199 7200 + 7200 7196 7195 + 7196 7200 7201 + 7201 7197 7196 + 6318 6323 7198 + 7198 6323 7202 + 7202 7203 7198 + 7199 7198 7203 + 7203 7204 7199 + 7200 7199 7204 + 7204 7205 7200 + 7201 7200 7205 + 7206 7202 6323 + 7207 7202 7206 + 7202 7207 7208 + 7208 7203 7202 + 7203 7208 7209 + 7209 7204 7203 + 7204 7209 7210 + 7210 7205 7204 + 6323 6322 7206 + 6328 7206 6322 + 7211 7206 6328 + 7206 7211 7207 + 7212 7207 7211 + 7208 7207 7212 + 7212 7213 7208 + 7208 7213 7214 + 7214 7209 7208 + 7210 7209 7214 + 6328 6333 7211 + 7211 6333 7215 + 7215 7216 7211 + 7211 7216 7212 + 7217 7212 7216 + 7213 7212 7217 + 7217 7218 7213 + 7213 7218 7219 + 7219 7214 7213 + 7215 6333 6337 + 6337 7220 7215 + 7221 7215 7220 + 7216 7215 7221 + 7221 7222 7216 + 7216 7222 7217 + 7223 7217 7222 + 7218 7217 7223 + 7223 7224 7218 + 7219 7218 7224 + 7225 7220 6337 + 7220 7225 7226 + 7220 7226 7221 + 7221 7226 7227 + 7227 7228 7221 + 7222 7221 7228 + 7228 7229 7222 + 7222 7229 7223 + 6337 6346 7225 + 7230 7225 6346 + 7226 7225 7230 + 7230 7227 7226 + 7227 7230 7231 + 7227 7231 7232 + 7232 7228 7227 + 7229 7228 7232 + 7232 7233 7229 + 7229 7233 7234 + 7234 7223 7229 + 7224 7223 7234 + 7235 7230 6346 + 7231 7230 7235 + 7235 7236 7231 + 7232 7231 7236 + 7237 7232 7236 + 7233 7232 7237 + 7237 7238 7233 + 7234 7233 7238 + 6345 7235 6346 + 7235 6345 7239 + 7239 7236 7235 + 7236 7239 7240 + 7240 7241 7236 + 7236 7241 7237 + 7242 7237 7241 + 7237 7242 7243 + 7243 7238 7237 + 7239 6345 7244 + 7244 7245 7239 + 7239 7245 7246 + 7246 7240 7239 + 7247 7240 7246 + 7240 7247 7248 + 7248 7241 7240 + 7241 7248 7242 + 7249 7244 6345 + 7250 7244 7249 + 7245 7244 7250 + 7250 7251 7245 + 7245 7251 7252 + 7252 7246 7245 + 7253 7246 7252 + 7246 7253 7247 + 6350 7249 6345 + 6359 7249 6350 + 7249 6359 7254 + 7249 7254 7250 + 7250 7254 7255 + 7255 7256 7250 + 7251 7250 7256 + 7256 7257 7251 + 7252 7251 7257 + 7254 6359 6358 + 6358 7255 7254 + 7255 6358 6357 + 6357 7258 7255 + 7255 7258 7259 + 7259 7256 7255 + 7257 7256 7259 + 7259 7260 7257 + 7257 7260 7261 + 7261 7262 7257 + 7257 7262 7252 + 7258 6357 7263 + 7263 7264 7258 + 7259 7258 7264 + 7264 7265 7259 + 7260 7259 7265 + 7265 7266 7260 + 7261 7260 7266 + 6362 7263 6357 + 7267 7263 6362 + 7264 7263 7267 + 7267 7268 7264 + 7264 7268 7269 + 7269 7265 7264 + 7266 7265 7269 + 6362 6741 7267 + 7267 6741 7270 + 7270 7271 7267 + 7268 7267 7271 + 7271 7272 7268 + 7269 7268 7272 + 7272 7273 7269 + 7274 7269 7273 + 7269 7274 7266 + 7275 7270 6741 + 7270 7275 7276 + 7276 7277 7270 + 7270 7277 7278 + 7278 7271 7270 + 7272 7271 7278 + 6741 6740 7275 + 7275 6740 7279 + 6740 7280 7279 + 6739 7280 6740 + 7281 7280 6739 + 7280 7281 7282 + 7282 7283 7280 + 7280 7283 7284 + 6739 7285 7281 + 7281 7285 7286 + 7286 7287 7281 + 7281 7287 7288 + 7288 7282 7281 + 7289 7282 7288 + 7283 7282 7289 + 7285 6739 6738 + 6738 6814 7285 + 7286 7285 6814 + 6814 7290 7286 + 7291 7286 7290 + 7286 7291 7292 + 7292 7287 7286 + 7287 7292 7293 + 7293 7288 7287 + 6819 7290 6814 + 7294 7290 6819 + 7290 7294 7291 + 7295 7291 7294 + 7292 7291 7295 + 7295 7296 7292 + 7292 7296 7297 + 7297 7293 7292 + 7298 7293 7297 + 7288 7293 7298 + 6819 6832 7294 + 7294 6832 7299 + 7299 7300 7294 + 7294 7300 7295 + 7301 7295 7300 + 7295 7301 7302 + 7302 7296 7295 + 7296 7302 7303 + 7303 7297 7296 + 7299 6832 6831 + 6831 7304 7299 + 7305 7299 7304 + 7299 7305 7306 + 7306 7300 7299 + 7300 7306 7301 + 7307 7301 7306 + 7302 7301 7307 + 7307 7308 7302 + 7303 7302 7308 + 6830 7304 6831 + 7309 7304 6830 + 7304 7309 7305 + 7310 7305 7309 + 7306 7305 7310 + 7310 7311 7306 + 7306 7311 7307 + 7312 7307 7311 + 7312 7308 7307 + 6830 6836 7309 + 7309 6836 6841 + 6841 7313 7309 + 7309 7313 7310 + 7314 7310 7313 + 7310 7314 7315 + 7315 7311 7310 + 7311 7315 7312 + 7316 7313 6841 + 7313 7316 7314 + 7317 7314 7316 + 7315 7314 7317 + 7317 7318 7315 + 7312 7315 7318 + 6841 6846 7316 + 7316 6846 7319 + 7319 7320 7316 + 7316 7320 7317 + 7321 7317 7320 + 7321 7318 7317 + 7318 7321 7322 + 7322 7323 7318 + 7318 7323 7312 + 7319 6846 6845 + 6845 7324 7319 + 7325 7319 7324 + 7319 7325 7326 + 7326 7320 7319 + 7320 7326 7321 + 7321 7326 7327 + 7327 7328 7321 + 7328 7322 7321 + 6850 7324 6845 + 7329 7324 6850 + 7324 7329 7325 + 7330 7325 7329 + 7326 7325 7330 + 7330 7327 7326 + 7331 7327 7330 + 7327 7331 247 + 247 7328 7327 + 7328 247 7332 + 6850 6859 7329 + 7329 6859 7333 + 7333 7334 7329 + 7329 7334 7330 + 7335 7330 7334 + 7330 7335 7331 + 7333 6859 6858 + 6858 7336 7333 + 7337 7333 7336 + 7333 7337 7338 + 7338 7334 7333 + 7334 7338 7335 + 7335 7338 7339 + 7339 7340 7335 + 7331 7335 7340 + 6863 7336 6858 + 7341 7336 6863 + 7336 7341 7337 + 7342 7337 7341 + 7338 7337 7342 + 7342 7339 7338 + 7342 7343 7339 + 7339 7343 7344 + 7344 7340 7339 + 6863 7345 7341 + 7341 7345 3394 + 3394 7346 7341 + 7341 7346 7342 + 7346 7347 7342 + 7343 7342 7347 + 7345 6863 6862 + 6862 3410 7345 + 3394 7345 3410 + 7348 247 7331 + 7331 7349 7348 + 7349 7350 7348 + 7351 7350 7349 + 7340 7349 7331 + 7352 7349 7340 + 7349 7352 7351 + 7353 7351 7352 + 7354 7351 7353 + 7351 7354 7355 + 7355 7354 7356 + 7356 248 7355 + 7340 7344 7352 + 7352 7344 7357 + 7357 7358 7352 + 7352 7358 7359 + 7359 7353 7352 + 7360 7353 7359 + 7360 7361 7353 + 7353 7361 7354 + 7356 7354 7361 + 7357 7344 7343 + 7362 7357 7343 + 7363 7357 7362 + 7358 7357 7363 + 7363 7364 7358 + 7358 7364 7365 + 7365 7359 7358 + 7366 7359 7365 + 7359 7366 7360 + 7343 7367 7362 + 7368 7362 7367 + 7362 7368 7369 + 7369 7370 7362 + 7362 7370 7363 + 7347 7367 7343 + 7371 7367 7347 + 7367 7371 7368 + 7368 7371 7372 + 7372 7373 7368 + 7373 7374 7368 + 7369 7368 7374 + 7371 7347 7346 + 7346 7372 7371 + 7372 7346 3394 + 3394 3393 7372 + 7372 3393 3392 + 3392 7373 7372 + 7373 3392 3399 + 3399 7375 7373 + 7373 7375 7376 + 7376 7374 7373 + 7377 7374 7376 + 7374 7377 7369 + 7369 7377 7378 + 7378 7379 7369 + 7370 7369 7379 + 7375 3399 7380 + 7380 7381 7375 + 7376 7375 7381 + 7381 7382 7376 + 7377 7376 7382 + 7382 7378 7377 + 7383 7378 7382 + 7378 7383 7384 + 7384 7379 7378 + 7380 3399 7385 + 7385 7386 7380 + 7387 7380 7386 + 7380 7387 7388 + 7388 7381 7380 + 7381 7388 7389 + 7389 7382 7381 + 7382 7389 7383 + 3399 3398 7385 + 3397 7385 3398 + 7390 7385 3397 + 7385 7390 7391 + 7391 7386 7385 + 7391 7392 7386 + 7386 7392 7387 + 7393 7387 7392 + 7388 7387 7393 + 7390 3397 7394 + 7394 7395 7390 + 7390 7395 7396 + 7396 7397 7390 + 7397 7391 7390 + 7392 7391 7397 + 7397 7398 7392 + 7392 7398 7393 + 3396 7394 3397 + 7399 7394 3396 + 7395 7394 7399 + 7399 7400 7395 + 7395 7400 7401 + 7401 7396 7395 + 7402 7396 7401 + 7396 7402 7403 + 7403 7397 7396 + 3396 7404 7399 + 7399 7404 7405 + 7405 7406 7399 + 7400 7399 7406 + 7406 7407 7400 + 7401 7400 7407 + 7408 7404 3396 + 7404 7408 7409 + 7409 7405 7404 + 7410 7405 7409 + 7405 7410 7411 + 7411 7406 7405 + 7407 7406 7411 + 7411 7412 7407 + 7407 7412 7413 + 7413 7414 7407 + 7407 7414 7401 + 7410 7409 7415 + 7415 7416 7410 + 7411 7410 7416 + 7416 7417 7411 + 7412 7411 7417 + 7417 7418 7412 + 7413 7412 7418 + 7418 7419 7413 + 7420 7413 7419 + 7413 7420 7421 + 7421 7414 7413 + 7422 7417 7416 + 7418 7417 7422 + 7422 7423 7418 + 7418 7423 7424 + 7424 7419 7418 + 7425 7419 7424 + 7419 7425 7420 + 7426 7420 7425 + 7421 7420 7426 + 7416 7427 7422 + 7428 7422 7427 + 7423 7422 7428 + 7428 7429 7423 + 7424 7423 7429 + 7429 7430 7424 + 7431 7424 7430 + 7424 7431 7425 + 7427 7416 7432 + 7427 7433 7428 + 7434 7428 7433 + 7428 7434 7435 + 7435 7429 7428 + 7429 7435 7436 + 7436 7430 7429 + 7437 7430 7436 + 7430 7437 7431 + 7438 7431 7437 + 7425 7431 7438 + 7433 7439 7434 + 7440 7434 7439 + 7435 7434 7440 + 7440 7441 7435 + 7435 7441 7442 + 7442 7436 7435 + 7443 7436 7442 + 7436 7443 7437 + 7444 7440 7439 + 7445 7440 7444 + 7440 7445 7441 + 7441 7445 7446 + 7446 7442 7441 + 7447 7442 7446 + 7442 7447 7443 + 7448 7443 7447 + 7437 7443 7448 + 7448 7449 7437 + 7437 7449 7438 + 7444 7450 7445 + 7445 7450 1026 + 7446 7445 1026 + 1034 7446 1026 + 1039 7446 1034 + 7446 1039 7447 + 7451 7450 7444 + 7447 1039 1038 + 1038 7452 7447 + 7447 7452 7448 + 7453 7448 7452 + 7448 7453 7454 + 7454 7449 7448 + 7449 7454 7455 + 7455 7438 7449 + 1044 7452 1038 + 7452 1044 7453 + 7456 7453 1044 + 7454 7453 7456 + 7456 7457 7454 + 7454 7457 7458 + 7458 7455 7454 + 7459 7455 7458 + 7438 7455 7459 + 1044 1043 7456 + 1049 7456 1043 + 7456 1049 7460 + 7460 7457 7456 + 7457 7460 7461 + 7461 7458 7457 + 7458 7461 7462 + 7462 7463 7458 + 7458 7463 7459 + 7460 1049 1048 + 1048 7464 7460 + 7460 7464 7465 + 7465 7461 7460 + 7462 7461 7465 + 7465 7466 7462 + 7462 7466 7467 + 7467 7468 7462 + 7463 7462 7468 + 1056 7464 1048 + 7464 1056 7469 + 7469 7465 7464 + 7465 7469 7470 + 7470 7466 7465 + 7466 7470 7471 + 7471 7467 7466 + 7472 7469 1056 + 7470 7469 7472 + 7472 7473 7470 + 7471 7470 7473 + 7473 7474 7471 + 7475 7471 7474 + 7467 7471 7475 + 1056 1060 7472 + 1069 7472 1060 + 7473 7472 1069 + 1069 7476 7473 + 7473 7476 7477 + 7477 7474 7473 + 7478 7474 7477 + 7474 7478 7475 + 7479 7475 7478 + 7480 7475 7479 + 7475 7480 7467 + 7476 1069 7481 + 7481 7482 7476 + 7476 7482 7483 + 7483 7477 7476 + 7484 7477 7483 + 7477 7484 7478 + 1068 7481 1069 + 1074 7481 1068 + 7481 1074 1079 + 1079 7482 7481 + 7482 1079 7485 + 7485 7483 7482 + 7483 7485 7486 + 7486 7487 7483 + 7483 7487 7484 + 7488 7485 1079 + 7486 7485 7488 + 7488 7489 7486 + 7490 7486 7489 + 7487 7486 7490 + 7490 7491 7487 + 7484 7487 7491 + 7492 7488 1079 + 7493 7488 7492 + 7489 7488 7493 + 7493 7494 7489 + 7489 7494 7495 + 7495 7496 7489 + 7489 7496 7490 + 1079 1078 7492 + 7497 7492 1078 + 7492 7497 7498 + 7498 7499 7492 + 7492 7499 7493 + 7493 7499 7500 + 7500 7501 7493 + 7494 7493 7501 + 1078 1077 7497 + 7497 1077 1084 + 1084 7502 7497 + 7498 7497 7502 + 7502 7503 7498 + 7498 7503 7504 + 7504 7505 7498 + 7499 7498 7505 + 7505 7500 7499 + 7506 7502 1084 + 7502 7506 7507 + 7507 7503 7502 + 7503 7507 7508 + 7508 7504 7503 + 7508 7509 7504 + 7504 7509 7510 + 7510 7505 7504 + 7500 7505 7510 + 1084 1083 7506 + 7511 7506 1083 + 7507 7506 7511 + 7511 7512 7507 + 7507 7512 7513 + 7513 7508 7507 + 7509 7508 7513 + 7513 7514 7509 + 7510 7509 7514 + 1083 1088 7511 + 1088 7515 7511 + 7516 7511 7515 + 7512 7511 7516 + 7516 7517 7512 + 7512 7517 7518 + 7518 7513 7512 + 7513 7518 7519 + 7519 7514 7513 + 1093 7515 1088 + 7520 7515 1093 + 7515 7520 7516 + 7516 7520 7521 + 7521 7522 7516 + 7517 7516 7522 + 7522 7523 7517 + 7518 7517 7523 + 7523 7524 7518 + 7519 7518 7524 + 1093 7525 7520 + 7520 7525 7526 + 7526 7521 7520 + 7521 7526 7527 + 7527 7528 7521 + 7521 7528 7529 + 7529 7522 7521 + 7525 1093 1092 + 1092 7530 7525 + 7525 7530 7531 + 7531 7526 7525 + 7527 7526 7531 + 7531 7532 7527 + 7533 7527 7532 + 7528 7527 7533 + 7533 7534 7528 + 7529 7528 7534 + 3288 7530 1092 + 7530 3288 7535 + 7535 7531 7530 + 7532 7531 7535 + 7535 7536 7532 + 7532 7536 7537 + 7537 7538 7532 + 7532 7538 7533 + 7539 7533 7538 + 7534 7533 7539 + 7540 7535 3288 + 7536 7535 7540 + 7540 7541 7536 + 7536 7541 7542 + 7542 7537 7536 + 7543 7537 7542 + 7537 7543 7544 + 7544 7538 7537 + 7538 7544 7539 + 3291 7540 3288 + 3296 7540 3291 + 7541 7540 3296 + 7541 3296 3295 + 3295 7542 7541 + 7545 7542 3295 + 7542 7545 7543 + 7546 7543 7545 + 7544 7543 7546 + 7546 7547 7544 + 7544 7547 7548 + 7548 7539 7544 + 7549 7539 7548 + 7539 7549 7534 + 3295 7550 7545 + 7545 7550 7551 + 7551 7552 7545 + 7545 7552 7546 + 7550 3295 3294 + 3294 3293 7550 + 7551 7550 3293 + 7553 7551 3293 + 7554 7551 7553 + 7552 7551 7554 + 7552 7554 7555 + 7555 7556 7552 + 7552 7556 7546 + 7557 7553 3293 + 7558 7553 7557 + 7558 7559 7553 + 7553 7559 7554 + 7554 7559 7560 + 7555 7554 7560 + 3302 7557 3293 + 7561 7557 3302 + 7562 7557 7561 + 7557 7562 7558 + 3302 7563 7561 + 7561 7563 7564 + 7564 7565 7561 + 7562 7561 7565 + 7565 7566 7562 + 7558 7562 7566 + 7563 3302 3301 + 7563 3301 3300 + 3300 3499 7563 + 7563 3499 7564 + 1027 1026 7450 + 7450 7567 1027 + 1658 1657 5120 + 5120 1657 1656 + 1656 7568 5120 + 5120 7568 5121 + 7569 5121 7568 + 5121 7569 7570 + 7570 7571 5121 + 5121 7571 5113 + 1665 7568 1656 + 7568 1665 7569 + 7569 1665 1669 + 7572 7569 1669 + 7570 7569 7572 + 7572 7573 7570 + 7574 7570 7573 + 7571 7570 7574 + 7574 5110 7571 + 5113 7571 5110 + 1669 7575 7572 + 7576 7572 7575 + 7573 7572 7576 + 7576 353 7573 + 7573 353 352 + 352 7577 7573 + 7573 7577 7574 + 7578 7575 1669 + 7579 7575 7578 + 7575 7579 7576 + 348 7576 7579 + 353 7576 348 + 1669 1668 7578 + 7580 7578 1668 + 7579 7578 7580 + 7580 7581 7579 + 7579 7581 348 + 349 348 7581 + 7581 7582 349 + 345 349 7582 + 1668 1673 7580 + 1678 7580 1673 + 7580 1678 7582 + 7582 7581 7580 + 7582 1678 1677 + 1677 7583 7582 + 7582 7583 345 + 323 345 7583 + 7583 317 323 + 317 7583 1677 + 1677 1682 317 + 317 1682 312 + 7584 312 1682 + 313 312 7584 + 7584 7585 313 + 308 313 7585 + 7586 308 7585 + 7585 559 7586 + 1682 1681 7584 + 7587 7584 1681 + 7585 7584 7587 + 7585 7587 560 + 560 559 7585 + 1681 7588 7587 + 7587 7588 1679 + 1679 561 7587 + 561 560 7587 + 562 561 1679 + 1679 7589 562 + 357 7577 352 + 7577 357 7590 + 7590 7574 7577 + 5110 7574 7590 + 7590 5104 5110 + 5104 7590 5105 + 5105 7590 362 + 7590 357 362 + 5061 7591 5062 + 5075 5062 7591 + 5075 5059 5062 + 5059 5075 7592 + 7592 7593 5059 + 5059 7593 3409 + 3404 3409 7593 + 7591 7594 5075 + 7593 3384 3404 + 7592 3384 7593 + 3384 7592 7595 + 7595 7596 3384 + 7597 7596 7595 + 5073 7595 7592 + 7598 7595 5073 + 5073 7599 7598 + 7600 7598 7599 + 7592 5075 5073 + 5072 7599 5073 + 7599 5072 7601 + 7601 3367 7599 + 7602 3367 7601 + 3367 7602 3361 + 3361 7602 5083 + 5083 3362 3361 + 5079 7601 5072 + 7602 7601 5079 + 5079 5083 7602 + 5087 3362 5083 + 3355 3362 5087 + 5087 7603 3355 + 3355 7603 7604 + 7604 3356 3355 + 7605 3356 7604 + 3356 7605 3349 + 3349 7605 3350 + 7603 5087 5092 + 5092 7606 7603 + 7604 7603 7606 + 7606 7607 7604 + 7608 7604 7607 + 7604 7608 7605 + 7605 7608 7609 + 7609 3350 7605 + 7610 3350 7609 + 3350 7610 1021 + 7606 5092 5091 + 5091 7611 7606 + 7606 7611 7612 + 7612 7607 7606 + 7607 7612 522 + 522 7613 7607 + 7607 7613 7608 + 7608 7613 7614 + 7614 7609 7608 + 7611 5091 7615 + 7615 166 7611 + 7611 166 523 + 523 7612 7611 + 522 7612 523 + 368 523 166 + 166 369 368 + 7616 369 166 + 1021 7610 7617 + 7613 522 521 + 521 7614 7613 + 527 7614 521 + 7614 527 7618 + 7618 7609 7614 + 7609 7618 7610 + 7610 7618 533 + 533 7619 7610 + 533 7618 527 + 5061 5060 7620 + 7620 254 5061 + 4408 4412 7621 + 7621 7622 4408 + 4408 7622 7623 + 7623 4409 4408 + 7624 4409 7623 + 4409 7624 7625 + 4409 7625 4405 + 7621 7626 7622 + 7622 7626 4096 + 4096 7623 7622 + 4096 4095 7623 + 7623 4095 7624 + 7624 4095 4100 + 4100 7627 7624 + 7625 7624 7627 + 7626 7621 4417 + 4417 7628 7626 + 7626 7628 4090 + 4096 7626 4090 + 7629 7628 4417 + 7628 7629 7630 + 7630 4090 7628 + 4091 4090 7630 + 4091 7630 23 + 23 7631 4091 + 6469 7627 4100 + 6474 7627 6469 + 7627 6474 7625 + 4405 7625 6474 + 148 7632 7633 + 7633 7632 7634 + 7634 7635 7633 + 7636 7635 7634 + 7636 7634 7637 + 7637 7638 7636 + 7639 7636 7638 + 7638 7637 7640 + 7641 7642 7643 + 7642 7641 7644 + 7644 7645 7642 + 7645 7646 7642 + 7646 7647 7642 + 7648 7642 7647 + 7647 7649 7648 + 7644 7641 2021 + 7650 7644 2021 + 7651 7644 7650 + 7644 7651 7645 + 7645 7651 7652 + 7652 7646 7645 + 7641 7653 2021 + 2022 2021 7653 + 7653 7654 2022 + 2018 2022 7654 + 7653 7641 7655 + 7656 7653 7655 + 7653 7656 7654 + 7654 7656 7657 + 7657 7658 7654 + 7654 7658 2018 + 7658 7659 2018 + 2013 2018 7659 + 7659 7660 2013 + 2013 7660 1996 + 7658 7657 7661 + 7659 7658 7662 + 7663 7659 7662 + 7660 7659 7663 + 7660 7663 7664 + 7664 1996 7660 + 1996 7664 7665 + 1996 7665 7666 + 7666 1997 1996 + 7664 7663 7667 + 7667 7668 7664 + 7668 7665 7664 + 7665 7668 7669 + 7665 7669 7670 + 7669 7671 7670 + 7672 7670 7671 + 7673 7668 7667 + 7668 7673 7674 + 7674 7669 7668 + 7674 7675 7669 + 7669 7675 7676 + 7676 7671 7669 + 7677 7671 7676 + 7671 7677 7672 + 7678 7673 7667 + 7678 7667 7679 + 7679 7680 7678 + 7678 7680 7681 + 7682 7679 7667 + 7683 7682 7667 + 1997 7666 7672 + 1997 7672 7684 + 7684 1985 1997 + 1985 7684 1976 + 1976 7684 7685 + 7685 1977 1976 + 1973 1977 7685 + 7672 7677 7684 + 7677 7686 7684 + 7686 7685 7684 + 7685 7686 7687 + 7688 7685 7687 + 7685 7688 1973 + 1973 7688 7689 + 7689 7690 1973 + 1973 7690 1967 + 1963 1967 7690 + 7688 7687 7691 + 7689 7688 7691 + 7691 7692 7689 + 7693 7689 7692 + 7693 7690 7689 + 7690 7693 1963 + 1963 7693 1938 + 7692 7691 7694 + 7695 7692 7694 + 7696 7692 7695 + 7692 7696 7693 + 7693 7696 1938 + 7694 7691 3240 + 7650 7697 7651 + 7650 7698 7697 + 7698 7650 7699 + 7650 7700 7699 + 7700 7701 7699 + 7699 7701 7702 + 7702 7703 7699 + 7700 7650 2021 + 7704 7700 2021 + 7701 7700 7704 + 7704 7705 7701 + 7705 7702 7701 + 7706 7702 7705 + 7702 7706 7707 + 7704 2021 2027 + 2027 7708 7704 + 7708 7709 7704 + 7709 7710 7704 + 7710 7711 7704 + 7711 7712 7704 + 7713 7704 7712 + 7704 7713 7705 + 7714 7708 2027 + 7708 7714 7715 + 7708 7715 7716 + 7716 7709 7708 + 7709 7716 7717 + 7709 7717 7718 + 7718 7710 7709 + 2027 7719 7714 + 7720 7714 7719 + 7715 7714 7720 + 7720 7721 7715 + 7715 7721 1523 + 1523 7716 7715 + 7717 7716 1523 + 2027 2030 7719 + 7719 2030 2029 + 2029 7722 7719 + 7719 7722 7720 + 7723 7720 7722 + 7721 7720 7723 + 7723 7724 7721 + 7725 7722 2029 + 7722 7725 7723 + 2029 7726 7725 + 7726 2029 2028 + 2028 7727 7726 + 1523 1522 7717 + 7717 1522 7728 + 7728 7718 7717 + 7729 7718 7728 + 7710 7718 7729 + 7710 7729 7730 + 7730 7711 7710 + 7711 7730 7731 + 1521 7728 1522 + 1529 7728 1521 + 7728 1529 7729 + 7729 1529 7732 + 7730 7729 7732 + 7732 7733 7730 + 7731 7730 7733 + 7733 7734 7731 + 7734 151 7731 + 1529 1528 7732 + 1534 7732 1528 + 7732 1534 7735 + 7732 7735 7736 + 7736 7733 7732 + 7734 7733 7736 + 7734 7736 7737 + 7737 151 7734 + 7738 151 7737 + 151 7738 3432 + 3432 7739 151 + 7735 1534 1533 + 1533 7740 7735 + 7735 7740 382 + 7740 7741 382 + 7741 7742 382 + 1533 7743 7740 + 7740 7743 7744 + 7744 7741 7740 + 7744 7745 7741 + 7741 7745 7746 + 7746 7742 7741 + 7743 1533 1532 + 1532 7747 7743 + 7744 7743 7747 + 7747 7748 7744 + 7745 7744 7748 + 7748 7749 7745 + 7746 7745 7749 + 7749 7750 7746 + 7751 7746 7750 + 7746 7751 7742 + 1531 7747 1532 + 7747 1531 7752 + 7752 7748 7747 + 7749 7748 7752 + 7753 3432 7738 + 374 7753 7738 + 391 374 7738 + 7738 7737 391 + 391 7737 7735 + 7737 7736 7735 + 1517 1523 7721 + 7721 7754 1517 + 7705 7713 7706 + 7755 7706 7713 + 2103 7756 7757 + 2103 7757 7758 + 7758 7759 2103 + 2103 7759 7760 + 7759 7758 7761 + 7759 7761 7694 + 7694 7762 7759 + 7763 7762 7694 + 7761 7758 7764 + 7764 7765 7761 + 7765 7694 7761 + 7765 7695 7694 + 7696 7695 7765 + 7765 1938 7696 + 7764 7758 7766 + 7766 7767 7764 + 1938 7764 7767 + 1938 7765 7764 + 7766 7768 7767 + 7768 7769 7767 + 1939 7767 7769 + 7767 1939 1938 + 1939 7769 7770 + 7770 1930 1939 + 1930 7770 1924 + 1924 7770 1925 + 1925 7770 7769 + 7769 7771 1925 + 7772 7773 7774 + 7774 7775 7772 + 7776 7772 7775 + 7776 7777 7772 + 7777 7778 7772 + 7779 7772 7778 + 7779 7778 7780 + 7775 7774 7781 + 7781 7782 7775 + 7775 7782 7783 + 7783 7776 7775 + 7777 7776 7783 + 7784 7781 7774 + 7781 7784 7785 + 7786 7781 7785 + 7782 7781 7786 + 7786 7787 7782 + 7783 7782 7787 + 7788 7784 7774 + 7789 7784 7788 + 7784 7789 7790 + 7790 7785 7784 + 7790 7791 7785 + 7792 7785 7791 + 7792 7786 7785 + 7788 7774 7793 + 7780 7794 7773 + 7794 7780 7795 + 7795 7796 7794 + 7797 7794 7796 + 7797 7798 7794 + 7798 7799 7794 + 7794 7799 7800 + 7795 7780 7801 + 7802 7795 7801 + 7795 7802 7803 + 7803 7804 7795 + 7804 7796 7795 + 7796 7804 7805 + 7805 7797 7796 + 7798 7797 7805 + 7801 7780 7778 + 7806 7801 7778 + 7801 7806 7807 + 7807 7808 7801 + 7801 7808 7802 + 7809 7802 7808 + 7803 7802 7809 + 7777 7806 7778 + 7807 7806 7777 + 7777 7810 7807 + 7811 7807 7810 + 7808 7807 7811 + 7811 7812 7808 + 7808 7812 7809 + 7783 7810 7777 + 7810 7783 7813 + 7813 7814 7810 + 7810 7814 7811 + 7814 7815 7811 + 7815 7816 7811 + 7816 7817 7811 + 7812 7811 7817 + 7813 7783 7787 + 7787 7818 7813 + 7819 7813 7818 + 7819 7814 7813 + 7814 7819 7820 + 7820 7815 7814 + 7816 7815 7820 + 7818 7787 7821 + 7822 7818 7821 + 7822 7823 7818 + 7818 7823 7819 + 7819 7823 7824 + 7820 7819 7824 + 7787 7786 7821 + 7821 7786 7825 + 7825 7826 7821 + 7821 7826 7827 + 7822 7821 7827 + 7828 7822 7827 + 7823 7822 7828 + 7828 7824 7823 + 7792 7825 7786 + 7829 7825 7792 + 7829 7826 7825 + 7829 7830 7826 + 7826 7830 7831 + 7831 7827 7826 + 7792 7832 7829 + 7833 7829 7832 + 7829 7833 7834 + 7830 7829 7834 + 7831 7830 7834 + 7835 7831 7834 + 7831 7835 7836 + 7836 7827 7831 + 7832 7792 7837 + 7838 7832 7837 + 7832 7838 7833 + 7838 7839 7833 + 7834 7833 7839 + 7839 7840 7834 + 7834 7840 7835 + 7837 7792 7791 + 7841 7837 7791 + 7842 7837 7841 + 7838 7837 7842 + 7843 7838 7842 + 7843 7839 7838 + 7840 7839 7843 + 7843 7844 7840 + 7844 7835 7840 + 7845 7835 7844 + 7835 7845 7836 + 7791 7846 7841 + 7847 7841 7846 + 7841 7847 7848 + 7841 7848 7842 + 7842 7848 7849 + 7850 7842 7849 + 7850 7843 7842 + 7844 7843 7850 + 7846 7791 7790 + 7851 7846 7790 + 7851 7852 7846 + 7846 7852 7847 + 7853 7847 7852 + 7848 7847 7853 + 7853 7849 7848 + 7851 7790 7789 + 7854 7851 7789 + 7852 7851 7854 + 7854 7855 7852 + 7852 7855 7856 + 7856 7853 7852 + 7857 7853 7856 + 7853 7857 7849 + 7789 7858 7854 + 7859 7854 7858 + 7859 7855 7854 + 7855 7859 7860 + 7860 7861 7855 + 7855 7861 7856 + 7789 7862 7858 + 7862 7798 7858 + 7805 7858 7798 + 7858 7805 7859 + 7860 7859 7805 + 7863 7860 7805 + 7864 7860 7863 + 7860 7864 7861 + 7788 7862 7789 + 7862 7788 7800 + 7800 7799 7862 + 7862 7799 7798 + 7805 7804 7863 + 7804 7865 7863 + 7865 7866 7863 + 7867 7863 7866 + 7863 7867 7868 + 7863 7868 7864 + 7869 7865 7804 + 7865 7869 7870 + 7870 7871 7865 + 7865 7871 7872 + 7872 7866 7865 + 7873 7866 7872 + 7866 7873 7867 + 7804 7803 7869 + 7874 7869 7803 + 7870 7869 7874 + 7874 7875 7870 + 7870 7875 7876 + 7876 7877 7870 + 7871 7870 7877 + 7877 7878 7871 + 7872 7871 7878 + 7803 7879 7874 + 7880 7874 7879 + 7874 7880 7881 + 7881 7875 7874 + 7875 7881 7882 + 7882 7876 7875 + 7809 7879 7803 + 7883 7879 7809 + 7879 7883 7880 + 7884 7880 7883 + 7881 7880 7884 + 7884 7885 7881 + 7881 7885 7886 + 7886 7882 7881 + 7887 7882 7886 + 7876 7882 7887 + 7809 7888 7883 + 7883 7888 7889 + 7889 7890 7883 + 7883 7890 7884 + 7891 7884 7890 + 7884 7891 7892 + 7892 7885 7884 + 7888 7809 7893 + 7893 7894 7888 + 7888 7894 7895 + 7895 7889 7888 + 7896 7889 7895 + 7890 7889 7896 + 7896 7897 7890 + 7890 7897 7891 + 7812 7893 7809 + 7898 7893 7812 + 7898 7894 7893 + 7894 7898 7899 + 7899 7895 7894 + 7895 7899 7900 + 7900 7901 7895 + 7895 7901 7896 + 7812 7817 7898 + 7898 7817 7816 + 7898 7816 7899 + 7900 7899 7816 + 7816 7902 7900 + 7900 7902 7903 + 7903 7904 7900 + 7901 7900 7904 + 7904 7905 7901 + 7896 7901 7905 + 7905 7906 7896 + 7897 7896 7906 + 7820 7902 7816 + 7902 7820 7907 + 7907 7903 7902 + 7908 7903 7907 + 7903 7908 7909 + 7909 7904 7903 + 7905 7904 7909 + 7909 7910 7905 + 7905 7910 7911 + 7911 7906 7905 + 7824 7907 7820 + 7908 7907 7824 + 7824 7912 7908 + 7909 7908 7912 + 7912 7913 7909 + 7913 7914 7909 + 7914 7915 7909 + 7910 7909 7915 + 7915 7916 7910 + 7911 7910 7916 + 7912 7824 7828 + 7912 7828 7917 + 7917 7913 7912 + 7918 7913 7917 + 7913 7918 7919 + 7919 7914 7913 + 7920 7914 7919 + 7914 7920 7921 + 7921 7915 7914 + 7916 7915 7921 + 7827 7917 7828 + 7918 7917 7827 + 7827 7836 7918 + 7919 7918 7836 + 7836 7922 7919 + 7920 7919 7922 + 7922 7923 7920 + 7921 7920 7923 + 7923 7924 7921 + 7925 7921 7924 + 7921 7925 7916 + 7926 7922 7836 + 7926 7923 7922 + 7923 7926 7927 + 7927 7924 7923 + 7924 7927 7928 + 7928 7929 7924 + 7924 7929 7925 + 7930 7925 7929 + 7916 7925 7930 + 7836 7845 7926 + 7926 7845 7931 + 7931 7927 7926 + 7928 7927 7931 + 7931 7932 7928 + 7933 7928 7932 + 7929 7928 7933 + 7933 7934 7929 + 7929 7934 7930 + 7845 7935 7931 + 7935 7936 7931 + 7937 7931 7936 + 7931 7937 7938 + 7938 7932 7931 + 7932 7938 7933 + 7938 7939 7933 + 7934 7933 7939 + 7844 7935 7845 + 7850 7935 7844 + 7935 7850 7940 + 7940 7936 7935 + 7940 7941 7936 + 7936 7941 7937 + 7937 7941 7857 + 7857 7942 7937 + 7942 7943 7937 + 7938 7937 7943 + 7940 7850 7849 + 7941 7940 7849 + 7849 7857 7941 + 7856 7942 7857 + 7856 7944 7942 + 7942 7944 7945 + 7945 7943 7942 + 7946 7943 7945 + 7943 7946 7938 + 7938 7946 7947 + 7947 7948 7938 + 7948 7939 7938 + 7934 7939 7948 + 7944 7856 7861 + 7861 7864 7944 + 7945 7944 7864 + 7864 7868 7945 + 7949 7945 7868 + 7945 7949 7946 + 7946 7949 7950 + 7950 7947 7946 + 7947 7950 7951 + 7951 7952 7947 + 7947 7952 7953 + 7953 7948 7947 + 7868 7867 7949 + 7949 7867 7873 + 7873 7950 7949 + 7950 7873 7954 + 7951 7950 7954 + 7951 7954 7955 + 7955 7956 7951 + 7952 7951 7956 + 7956 7957 7952 + 7953 7952 7957 + 7872 7954 7873 + 7954 7872 7958 + 7958 7955 7954 + 7955 7958 7959 + 7959 7960 7955 + 7955 7960 7961 + 7961 7956 7955 + 7957 7956 7961 + 7878 7958 7872 + 7959 7958 7878 + 7878 7962 7959 + 7959 7962 7963 + 7963 7964 7959 + 7960 7959 7964 + 7964 7965 7960 + 7961 7960 7965 + 7966 7962 7878 + 7962 7966 7967 + 7967 7963 7962 + 7963 7967 7968 + 7968 7969 7963 + 7963 7969 7970 + 7970 7964 7963 + 7965 7964 7970 + 7878 7877 7966 + 7966 7877 7876 + 7876 7971 7966 + 7966 7971 7972 + 7972 7967 7966 + 7968 7967 7972 + 7972 7973 7968 + 7968 7973 7974 + 7974 7975 7968 + 7969 7968 7975 + 7887 7971 7876 + 7971 7887 7976 + 7976 7972 7971 + 7972 7976 7977 + 7977 7973 7972 + 7973 7977 7978 + 7978 7974 7973 + 7979 7976 7887 + 7977 7976 7979 + 7979 7980 7977 + 7977 7980 7981 + 7981 7978 7977 + 7982 7978 7981 + 7974 7978 7982 + 7887 7983 7979 + 7984 7979 7983 + 7979 7984 7985 + 7985 7980 7979 + 7980 7985 7986 + 7986 7981 7980 + 7886 7983 7887 + 7987 7983 7886 + 7983 7987 7984 + 7988 7984 7987 + 7985 7984 7988 + 7988 7989 7985 + 7985 7989 7990 + 7990 7986 7985 + 7991 7986 7990 + 7981 7986 7991 + 7886 7992 7987 + 7987 7992 7993 + 7993 7994 7987 + 7987 7994 7988 + 7995 7988 7994 + 7988 7995 7996 + 7996 7989 7988 + 7992 7886 7885 + 7885 7892 7992 + 7993 7992 7892 + 7892 7997 7993 + 7998 7993 7997 + 7993 7998 7999 + 7999 7994 7993 + 7994 7999 7995 + 8000 7995 7999 + 7996 7995 8000 + 8001 7997 7892 + 8002 7997 8001 + 7997 8002 7998 + 8003 7998 8002 + 7999 7998 8003 + 8003 8004 7999 + 7999 8004 8000 + 7892 7891 8001 + 8001 7891 7897 + 7897 8005 8001 + 8006 8001 8005 + 8001 8006 8002 + 8002 8006 8007 + 8007 8008 8002 + 8002 8008 8003 + 7906 8005 7897 + 8005 7906 7911 + 7911 8009 8005 + 8005 8009 8006 + 8007 8006 8009 + 8009 8010 8007 + 8011 8007 8010 + 8007 8011 8012 + 8012 8008 8007 + 8008 8012 8013 + 8013 8003 8008 + 8009 7911 8014 + 8014 8010 8009 + 7930 8010 8014 + 8010 7930 8011 + 8015 8011 7930 + 8012 8011 8015 + 8015 8016 8012 + 8012 8016 8017 + 8017 8013 8012 + 7916 8014 7911 + 7930 8014 7916 + 7934 8015 7930 + 7948 8015 7934 + 8015 7948 7953 + 7953 8016 8015 + 8016 7953 8018 + 8018 8017 8016 + 8017 8018 8019 + 8019 8020 8017 + 8017 8020 8021 + 8021 8013 8017 + 8003 8013 8021 + 8021 8004 8003 + 7957 8018 7953 + 8019 8018 7957 + 7957 8022 8019 + 8019 8022 8023 + 8023 8024 8019 + 8020 8019 8024 + 8024 8025 8020 + 8021 8020 8025 + 8025 8026 8021 + 8004 8021 8026 + 8026 8000 8004 + 7961 8022 7957 + 8022 7961 8027 + 8027 8023 8022 + 8023 8027 8028 + 8028 8029 8023 + 8023 8029 8030 + 8030 8024 8023 + 8025 8024 8030 + 7965 8027 7961 + 8028 8027 7965 + 7965 8031 8028 + 8028 8031 8032 + 8032 8033 8028 + 8029 8028 8033 + 8033 8034 8029 + 8030 8029 8034 + 7970 8031 7965 + 8031 7970 8035 + 8035 8032 8031 + 8032 8035 8036 + 8036 8037 8032 + 8032 8037 8038 + 8038 8033 8032 + 8034 8033 8038 + 8039 8035 7970 + 8036 8035 8039 + 8039 8040 8036 + 8041 8036 8040 + 8037 8036 8041 + 8041 8042 8037 + 8042 8038 8037 + 8043 8038 8042 + 8038 8043 8034 + 7970 7969 8039 + 7975 8039 7969 + 8039 7975 8044 + 8044 8040 8039 + 8040 8044 8045 + 8045 8041 8040 + 8042 8041 8045 + 8045 8046 8042 + 8046 8047 8042 + 8042 8047 8043 + 8048 8043 8047 + 8034 8043 8048 + 8044 7975 7974 + 7974 8049 8044 + 8045 8044 8049 + 8045 8049 7982 + 8046 8045 7982 + 8046 7982 8050 + 8051 8046 8050 + 8047 8046 8051 + 8051 8052 8047 + 8047 8052 8048 + 7982 8049 7974 + 7981 8050 7982 + 7991 8050 7981 + 8051 8050 7991 + 8053 8051 7991 + 8051 8053 8054 + 8054 8052 8051 + 8052 8054 8055 + 8055 8048 8052 + 8048 8055 8056 + 8056 8057 8048 + 8048 8057 8034 + 8053 7991 8058 + 8053 8058 8059 + 8060 8053 8059 + 8053 8060 8054 + 8054 8060 8061 + 8054 8061 8055 + 8056 8055 8061 + 7990 8058 7991 + 8059 8058 7990 + 7990 8062 8059 + 8059 8062 8063 + 8063 8064 8059 + 8060 8059 8064 + 8060 8064 8061 + 8061 8064 8063 + 8063 8065 8061 + 8061 8065 8056 + 8062 7990 7989 + 7989 7996 8062 + 8063 8062 7996 + 7996 8066 8063 + 8065 8063 8066 + 8066 8067 8065 + 8056 8065 8067 + 8067 8068 8056 + 8057 8056 8068 + 8068 8030 8057 + 8034 8057 8030 + 8000 8066 7996 + 8067 8066 8000 + 8000 8026 8067 + 8067 8026 8025 + 8025 8068 8067 + 8030 8068 8025 + 8069 8070 8071 + 8072 8070 8069 + 8070 8072 8073 + 8074 8070 8073 + 8070 8074 8075 + 8069 8076 8072 + 8077 8072 8076 + 8072 8077 8078 + 8073 8072 8078 + 8078 8079 8073 + 8079 8074 8073 + 8069 8080 8076 + 8076 8080 8081 + 8081 8082 8076 + 8082 8083 8076 + 8083 8077 8076 + 8080 8069 8084 + 8084 8085 8080 + 8080 8085 8086 + 8086 8081 8080 + 8081 8086 8087 + 8088 8081 8087 + 8082 8081 8088 + 8084 8069 8075 + 8084 8075 8089 + 8089 8090 8084 + 8091 8084 8090 + 8084 8091 8085 + 8085 8091 8092 + 8092 8086 8085 + 8086 8092 8087 + 8093 8089 8075 + 8094 8089 8093 + 8089 8094 8095 + 8095 8090 8089 + 8096 8090 8095 + 8090 8096 8091 + 8091 8096 8097 + 8092 8091 8097 + 8075 8098 8093 + 8093 8098 8099 + 8099 8100 8093 + 8100 8101 8093 + 8102 8093 8101 + 8093 8102 8094 + 8098 8075 8103 + 8098 8103 8104 + 8104 8099 8098 + 8099 8104 8105 + 8099 8105 8106 + 8106 8100 8099 + 8103 8075 8074 + 8074 8107 8103 + 8103 8107 8108 + 8104 8103 8108 + 8108 8109 8104 + 8105 8104 8109 + 8109 8110 8105 + 8106 8105 8110 + 8107 8074 8079 + 8079 8111 8107 + 8107 8111 8112 + 8112 8108 8107 + 8108 8112 8113 + 8113 8114 8108 + 8108 8114 8115 + 8115 8109 8108 + 8110 8109 8115 + 8111 8079 8116 + 8111 8116 8112 + 8116 8117 8112 + 8113 8112 8117 + 8117 8118 8113 + 8113 8118 8119 + 8113 8119 8120 + 8114 8113 8120 + 8115 8114 8120 + 8079 8078 8116 + 8116 8078 8077 + 8117 8116 8077 + 8083 8117 8077 + 8118 8117 8083 + 8083 8121 8118 + 8118 8121 8122 + 8122 8123 8118 + 8118 8123 8119 + 8124 8119 8123 + 8119 8124 8125 + 8120 8119 8125 + 8121 8083 8082 + 8082 8126 8121 + 8122 8121 8126 + 8127 8122 8126 + 8128 8122 8127 + 8122 8128 8129 + 8129 8123 8122 + 8123 8129 8124 + 8088 8126 8082 + 8126 8088 8130 + 8130 8127 8126 + 8131 8127 8130 + 8131 8132 8127 + 8127 8132 8128 + 8133 8128 8132 + 8133 8134 8128 + 8134 8129 8128 + 8130 8088 8087 + 8135 8130 8087 + 8130 8135 8136 + 8131 8130 8136 + 8131 8136 8137 + 8137 8138 8131 + 8132 8131 8138 + 8138 8139 8132 + 8139 8133 8132 + 8087 8140 8135 + 8141 8135 8140 + 8135 8141 8136 + 8136 8141 8142 + 8142 8143 8136 + 8136 8143 8137 + 8144 8140 8087 + 8140 8144 8145 + 8140 8145 8141 + 8142 8141 8145 + 8146 8142 8145 + 8147 8142 8146 + 8143 8142 8147 + 8137 8143 8147 + 8087 8092 8144 + 8097 8144 8092 + 8145 8144 8097 + 8097 8148 8145 + 8145 8148 8146 + 8149 8146 8148 + 8146 8149 8150 + 8146 8150 8147 + 8147 8150 8151 + 8151 8152 8147 + 8152 8137 8147 + 8153 8148 8097 + 8148 8153 8149 + 8149 8153 8154 + 8155 8149 8154 + 8150 8149 8155 + 8155 8156 8150 + 8150 8156 8151 + 8097 8157 8153 + 8153 8157 8158 + 8158 8154 8153 + 8157 8097 8096 + 8096 8159 8157 + 8157 8159 8160 + 8160 8158 8157 + 8161 8158 8160 + 8154 8158 8161 + 8095 8159 8096 + 8159 8095 8162 + 8162 8160 8159 + 8160 8162 8163 + 8163 8164 8160 + 8160 8164 8161 + 8165 8162 8095 + 8163 8162 8165 + 8165 8166 8163 + 8163 8166 8167 + 8167 8168 8163 + 8164 8163 8168 + 8168 8169 8164 + 8161 8164 8169 + 8095 8094 8165 + 8170 8165 8094 + 8165 8170 8171 + 8171 8166 8165 + 8166 8171 8172 + 8172 8167 8166 + 8094 8102 8170 + 8173 8170 8102 + 8171 8170 8173 + 8173 8174 8171 + 8171 8174 8175 + 8175 8172 8171 + 8176 8172 8175 + 8167 8172 8176 + 8102 8177 8173 + 8178 8173 8177 + 8173 8178 8179 + 8179 8174 8173 + 8174 8179 8180 + 8180 8175 8174 + 8101 8177 8102 + 8177 8101 8181 + 8181 8182 8177 + 8177 8182 8178 + 8183 8178 8182 + 8179 8178 8183 + 8183 8184 8179 + 8179 8184 8185 + 8185 8180 8179 + 8181 8101 8100 + 8100 8186 8181 + 8181 8186 8187 + 8187 8188 8181 + 8182 8181 8188 + 8188 8189 8182 + 8182 8189 8183 + 8106 8186 8100 + 8186 8106 8190 + 8190 8187 8186 + 8187 8190 8191 + 8191 8192 8187 + 8187 8192 8193 + 8193 8188 8187 + 8189 8188 8193 + 8110 8190 8106 + 8191 8190 8110 + 8110 8194 8191 + 8191 8194 8195 + 8195 8196 8191 + 8192 8191 8196 + 8196 8197 8192 + 8193 8192 8197 + 8115 8194 8110 + 8194 8115 8198 + 8198 8195 8194 + 8198 8199 8195 + 8195 8199 8200 + 8200 8196 8195 + 8197 8196 8200 + 8201 8198 8115 + 8201 8202 8198 + 8202 8199 8198 + 8199 8202 8203 + 8200 8199 8203 + 8120 8201 8115 + 8201 8120 8125 + 8204 8201 8125 + 8202 8201 8204 + 8202 8204 8205 + 8205 8203 8202 + 8205 8206 8203 + 8203 8206 8207 + 8207 8208 8203 + 8203 8208 8200 + 8204 8125 8209 + 8204 8209 8205 + 8209 8210 8205 + 8206 8205 8210 + 8210 8211 8206 + 8206 8211 8207 + 8211 8212 8207 + 8213 8207 8212 + 8207 8213 8208 + 8125 8124 8209 + 8124 8214 8209 + 8215 8209 8214 + 8209 8215 8216 + 8216 8210 8209 + 8216 8211 8210 + 8211 8216 8217 + 8217 8212 8211 + 8124 8129 8214 + 8129 8134 8214 + 8215 8214 8134 + 8134 8218 8215 + 8216 8215 8218 + 8218 8217 8216 + 8218 8219 8217 + 8220 8217 8219 + 8212 8217 8220 + 8220 8221 8212 + 8212 8221 8213 + 8218 8134 8133 + 8218 8133 8139 + 8139 8219 8218 + 8222 8219 8139 + 8219 8222 8220 + 8223 8220 8222 + 8221 8220 8223 + 8223 8224 8221 + 8221 8224 8225 + 8213 8221 8225 + 8226 8213 8225 + 8208 8213 8226 + 8139 8138 8222 + 8222 8138 8227 + 8222 8227 8223 + 8151 8223 8227 + 8224 8223 8151 + 8151 8228 8224 + 8224 8228 8229 + 8229 8225 8224 + 8138 8137 8227 + 8137 8152 8227 + 8227 8152 8151 + 8228 8151 8156 + 8156 8230 8228 + 8228 8230 8231 + 8231 8229 8228 + 8232 8229 8231 + 8225 8229 8232 + 8156 8155 8230 + 8230 8155 8233 + 8233 8231 8230 + 8231 8233 8234 + 8234 8235 8231 + 8231 8235 8232 + 8154 8233 8155 + 8234 8233 8154 + 8154 8236 8234 + 8234 8236 8237 + 8237 8238 8234 + 8235 8234 8238 + 8238 8239 8235 + 8232 8235 8239 + 8161 8236 8154 + 8236 8161 8240 + 8240 8237 8236 + 8237 8240 8241 + 8241 8242 8237 + 8237 8242 8243 + 8243 8238 8237 + 8239 8238 8243 + 8169 8240 8161 + 8241 8240 8169 + 8169 8244 8241 + 8241 8244 8245 + 8245 8246 8241 + 8242 8241 8246 + 8246 8247 8242 + 8243 8242 8247 + 8248 8244 8169 + 8244 8248 8249 + 8249 8245 8244 + 8245 8249 8250 + 8250 8251 8245 + 8245 8251 8252 + 8252 8246 8245 + 8247 8246 8252 + 8169 8168 8248 + 8248 8168 8167 + 8167 8253 8248 + 8248 8253 8254 + 8254 8249 8248 + 8250 8249 8254 + 8176 8253 8167 + 8253 8176 8255 + 8255 8254 8253 + 8254 8255 8256 + 8256 8257 8254 + 8254 8257 8250 + 8258 8255 8176 + 8256 8255 8258 + 8258 8259 8256 + 8256 8259 8260 + 8260 8261 8256 + 8257 8256 8261 + 8261 8262 8257 + 8262 8250 8257 + 8176 8263 8258 + 8264 8258 8263 + 8258 8264 8265 + 8265 8259 8258 + 8259 8265 8266 + 8266 8260 8259 + 8175 8263 8176 + 8267 8263 8175 + 8263 8267 8264 + 8268 8264 8267 + 8265 8264 8268 + 8268 8269 8265 + 8265 8269 8270 + 8270 8266 8265 + 8175 8180 8267 + 8267 8180 8185 + 8185 8271 8267 + 8267 8271 8268 + 8272 8268 8271 + 8268 8272 8273 + 8273 8269 8268 + 8269 8273 8274 + 8274 8270 8269 + 8275 8271 8185 + 8271 8275 8272 + 8276 8272 8275 + 8273 8272 8276 + 8276 8277 8273 + 8273 8277 8278 + 8278 8274 8273 + 8185 8279 8275 + 8275 8279 8280 + 8280 8281 8275 + 8275 8281 8276 + 8282 8276 8281 + 8276 8282 8283 + 8283 8277 8276 + 8279 8185 8184 + 8184 8284 8279 + 8280 8279 8284 + 8284 8285 8280 + 8286 8280 8285 + 8280 8286 8287 + 8287 8281 8280 + 8281 8287 8282 + 8288 8282 8287 + 8283 8282 8288 + 8284 8184 8183 + 8183 8289 8284 + 8284 8289 8290 + 8290 8285 8284 + 8291 8285 8290 + 8285 8291 8286 + 8292 8286 8291 + 8287 8286 8292 + 8292 8293 8287 + 8287 8293 8288 + 8289 8183 8189 + 8189 8294 8289 + 8290 8289 8294 + 8294 8295 8290 + 8296 8290 8295 + 8290 8296 8291 + 8291 8296 8297 + 8297 8298 8291 + 8291 8298 8292 + 8193 8294 8189 + 8294 8193 8299 + 8299 8295 8294 + 8299 8300 8295 + 8295 8300 8296 + 8296 8300 8301 + 8301 8297 8296 + 8302 8297 8301 + 8297 8302 8303 + 8303 8298 8297 + 8304 8299 8193 + 8300 8299 8304 + 8304 8305 8300 + 8300 8305 8301 + 8306 8301 8305 + 8307 8301 8306 + 8301 8307 8302 + 8197 8304 8193 + 8308 8304 8197 + 8308 8305 8304 + 8305 8308 8306 + 8309 8306 8308 + 8307 8306 8309 + 8309 8226 8307 + 8302 8307 8226 + 8225 8302 8226 + 8303 8302 8225 + 8197 8310 8308 + 8308 8310 8309 + 8311 8309 8310 + 8226 8309 8311 + 8226 8311 8208 + 8208 8311 8200 + 8310 8200 8311 + 8200 8310 8197 + 8312 8313 8314 + 8315 8314 8313 + 8315 8316 8314 + 8314 8316 8317 + 8317 8318 8314 + 8314 8318 8319 + 8319 8320 8314 + 8320 42 8314 + 8313 8321 8315 + 8315 8321 8322 + 8322 8323 8315 + 8323 8324 8315 + 8316 8315 8324 + 8325 8321 8313 + 8321 8325 8326 + 8326 8322 8321 + 8322 8326 8327 + 8327 8328 8322 + 8322 8328 8329 + 8329 8323 8322 + 8325 8313 8330 + 8330 8331 8325 + 8325 8331 8332 + 8332 8326 8325 + 8327 8326 8332 + 8332 8333 8327 + 8333 8334 8327 + 8334 8335 8327 + 8335 8328 8327 + 8328 8335 8329 + 8330 8336 8331 + 8331 8336 8332 + 8336 8337 8332 + 8333 8332 8337 + 8333 8337 8338 + 8338 8339 8333 + 8333 8339 8334 + 8338 8337 8336 + 8340 8338 8336 + 8341 8338 8340 + 8339 8338 8341 + 8342 8339 8341 + 8339 8342 8334 + 8342 8343 8334 + 8334 8343 8344 + 8344 8335 8334 + 8340 8336 8345 + 8346 8340 8345 + 8347 8340 8346 + 8340 8347 8341 + 8341 8347 8348 + 8348 8349 8341 + 8342 8341 8349 + 42 8345 8336 + 8350 8345 42 + 8345 8350 8346 + 8351 8346 8350 + 8351 8348 8346 + 8348 8347 8346 + 8336 8352 42 + 8353 8354 8355 + 8356 8354 8353 + 8357 8354 8356 + 8357 8358 8354 + 8354 8358 8359 + 8359 46 8354 + 8353 8360 8356 + 8356 8360 8361 + 8361 8362 8356 + 8357 8356 8362 + 8360 8353 8363 + 8363 8364 8360 + 8360 8364 8365 + 8365 8361 8360 + 8363 8353 8366 + 8366 8367 8363 + 8363 8367 8368 + 8369 8363 8368 + 8364 8363 8369 + 8369 8370 8364 + 8365 8364 8370 + 8366 8353 8371 + 8371 8372 8366 + 8373 8366 8372 + 8373 8367 8366 + 8367 8373 8374 + 8374 8368 8367 + 8375 8372 8371 + 8375 8376 8372 + 8372 8376 8373 + 8374 8373 8376 + 8371 8377 8375 + 8375 8377 8378 + 8376 8375 8378 + 8378 8379 8376 + 8376 8379 8374 + 8380 8377 8371 + 8377 8380 8381 + 8381 8382 8377 + 8377 8382 8378 + 8382 8383 8378 + 8384 8378 8383 + 8384 8379 8378 + 8380 8371 8385 + 8385 8386 8380 + 8380 8386 8387 + 8380 8387 8381 + 8388 8381 8387 + 8381 8388 8389 + 8389 8382 8381 + 8383 8382 8389 + 8390 8385 8371 + 8385 8390 8391 + 8392 8385 8391 + 8392 8386 8385 + 8386 8392 8393 + 8393 8387 8386 + 8387 8393 8394 + 8394 8395 8387 + 8387 8395 8388 + 8396 8391 8390 + 8391 8396 8397 + 8397 8398 8391 + 8392 8391 8398 + 8392 8398 8393 + 8398 8399 8393 + 8393 8399 8400 + 8394 8393 8400 + 8401 8396 8390 + 8396 8401 8402 + 8402 8397 8396 + 8402 8403 8397 + 8403 8404 8397 + 8398 8397 8404 + 8398 8404 8405 + 8405 8399 8398 + 46 8401 8390 + 46 8359 8401 + 8401 8359 8406 + 8406 8402 8401 + 8403 8402 8406 + 46 8390 8407 + 8408 8409 8410 + 8411 8408 8410 + 8408 8411 8412 + 8412 8413 8408 + 8408 8413 8414 + 8414 8415 8408 + 8408 8415 8416 + 8417 8411 8410 + 8412 8411 8417 + 8417 8418 8412 + 8419 8412 8418 + 8413 8412 8419 + 8420 8417 8410 + 8421 8417 8420 + 8418 8417 8421 + 8418 8421 8422 + 8422 8423 8418 + 8418 8423 8419 + 8410 8424 8420 + 8425 8420 8424 + 8425 8426 8420 + 8420 8426 8421 + 8422 8421 8426 + 8427 8424 8410 + 8424 8427 8428 + 8424 8428 8425 + 8425 8428 8429 + 8429 8430 8425 + 8426 8425 8430 + 8430 8431 8426 + 8426 8431 8422 + 8410 8432 8427 + 8427 8432 8433 + 8433 8434 8427 + 8428 8427 8434 + 8434 8435 8428 + 8428 8435 8429 + 8432 8410 8436 + 8432 8437 8415 + 8415 8438 8432 + 8432 8438 8433 + 8415 8414 8438 + 8438 8414 8439 + 8439 8440 8438 + 8438 8440 8433 + 8439 8414 8413 + 8441 8439 8413 + 8442 8439 8441 + 8442 8440 8439 + 8440 8442 8443 + 8443 8433 8440 + 8413 8444 8441 + 8444 8445 8441 + 8446 8441 8445 + 8446 8447 8441 + 8441 8447 8442 + 8442 8447 8448 + 8448 8443 8442 + 8419 8444 8413 + 8449 8444 8419 + 8444 8449 8450 + 8450 8445 8444 + 8451 8445 8450 + 8445 8451 8446 + 8446 8451 8452 + 8452 8453 8446 + 8447 8446 8453 + 8449 8419 8454 + 8454 8455 8449 + 8450 8449 8455 + 8455 8456 8450 + 8457 8450 8456 + 8450 8457 8451 + 8451 8457 8458 + 8458 8452 8451 + 8423 8454 8419 + 8459 8454 8423 + 8455 8454 8459 + 8459 8460 8455 + 8455 8460 8461 + 8461 8456 8455 + 8462 8456 8461 + 8456 8462 8457 + 8457 8462 8463 + 8463 8458 8457 + 8423 8464 8459 + 8465 8459 8464 + 8460 8459 8465 + 8465 8466 8460 + 8460 8466 8467 + 8467 8461 8460 + 8468 8461 8467 + 8461 8468 8462 + 8464 8423 8422 + 8422 8469 8464 + 8464 8469 8470 + 8470 8471 8464 + 8464 8471 8465 + 8471 8472 8465 + 8473 8465 8472 + 8466 8465 8473 + 8469 8422 8474 + 8469 8474 8475 + 8475 8470 8469 + 8470 8475 8476 + 8477 8470 8476 + 8471 8470 8477 + 8471 8477 8478 + 8478 8472 8471 + 8422 8431 8474 + 8479 8474 8431 + 8474 8479 8480 + 8480 8475 8474 + 8480 8476 8475 + 8476 8480 8481 + 8481 8482 8476 + 8477 8476 8482 + 8478 8477 8482 + 8431 8430 8479 + 8479 8430 8429 + 8429 8483 8479 + 8479 8483 8484 + 8484 8481 8479 + 8481 8480 8479 + 8485 8483 8429 + 8483 8485 8486 + 8486 8484 8483 + 8484 8486 8487 + 8487 8488 8484 + 8484 8488 8489 + 8489 8481 8484 + 8481 8489 8482 + 8429 8490 8485 + 8485 8490 8491 + 8491 8492 8485 + 8485 8492 8493 + 8493 8486 8485 + 8487 8486 8493 + 8490 8429 8435 + 8435 8494 8490 + 8491 8490 8494 + 8494 8495 8491 + 8496 8491 8495 + 8491 8496 8497 + 8497 8492 8491 + 8492 8497 8498 + 8498 8493 8492 + 8494 8435 8434 + 8434 8499 8494 + 8494 8499 8500 + 8500 8495 8494 + 8495 8500 8501 + 8501 8502 8495 + 8495 8502 8496 + 8499 8434 8433 + 8433 8503 8499 + 8500 8499 8503 + 8501 8500 8503 + 8503 8504 8501 + 8501 8504 8505 + 8505 8506 8501 + 8502 8501 8506 + 8506 8507 8502 + 8496 8502 8507 + 8504 8503 8433 + 8433 8443 8504 + 8504 8443 8448 + 8448 8505 8504 + 8505 8448 8508 + 8508 8509 8505 + 8505 8509 8510 + 8510 8506 8505 + 8507 8506 8510 + 8508 8448 8511 + 8511 8512 8508 + 8508 8512 8513 + 8513 8514 8508 + 8509 8508 8514 + 8514 8515 8509 + 8510 8509 8515 + 8447 8511 8448 + 8453 8511 8447 + 8511 8453 8516 + 8516 8512 8511 + 8512 8516 8517 + 8517 8513 8512 + 8513 8517 8518 + 8518 8519 8513 + 8513 8519 8520 + 8520 8514 8513 + 8515 8514 8520 + 8516 8453 8452 + 8452 8521 8516 + 8516 8521 8522 + 8522 8517 8516 + 8518 8517 8522 + 8522 8523 8518 + 8518 8523 8524 + 8524 8525 8518 + 8519 8518 8525 + 8526 8521 8452 + 8521 8526 8527 + 8527 8522 8521 + 8522 8527 8528 + 8528 8523 8522 + 8523 8528 8529 + 8529 8524 8523 + 8452 8458 8526 + 8526 8458 8463 + 8463 8530 8526 + 8526 8530 8531 + 8531 8527 8526 + 8528 8527 8531 + 8531 8532 8528 + 8528 8532 8533 + 8533 8529 8528 + 8534 8529 8533 + 8524 8529 8534 + 8535 8530 8463 + 8530 8535 8536 + 8536 8531 8530 + 8531 8536 8537 + 8537 8532 8531 + 8532 8537 8538 + 8538 8533 8532 + 8463 8539 8535 + 8535 8539 8540 + 8540 8541 8535 + 8535 8541 8542 + 8542 8536 8535 + 8537 8536 8542 + 8539 8463 8462 + 8462 8468 8539 + 8539 8468 8543 + 8543 8540 8539 + 8544 8540 8543 + 8540 8544 8545 + 8545 8541 8540 + 8541 8545 8546 + 8546 8542 8541 + 8468 8547 8543 + 8548 8543 8547 + 8543 8548 8549 + 8543 8549 8544 + 8544 8549 8550 + 8550 8551 8544 + 8545 8544 8551 + 8467 8547 8468 + 8547 8467 8552 + 8547 8552 8548 + 8548 8552 8473 + 8553 8548 8473 + 8549 8548 8553 + 8553 8554 8549 + 8549 8554 8550 + 8552 8467 8466 + 8466 8473 8552 + 8555 8556 8557 + 8558 8557 8556 + 8557 8558 8559 + 8559 8560 8557 + 8557 8560 8561 + 8561 8562 8557 + 8557 8562 8563 + 8556 8564 8558 + 8565 8566 8567 + 8566 8568 8567 + 8568 8569 8567 + 8567 8569 8559 + 8559 8558 8567 + 8570 8567 8558 + 8568 8566 8571 + 8572 8568 8571 + 8569 8568 8572 + 8572 8573 8569 + 8569 8573 8574 + 8574 8575 8569 + 8575 8559 8569 + 8560 8559 8575 + 8563 8571 8566 + 8576 8571 8563 + 8571 8576 8577 + 8577 8578 8571 + 8571 8578 8572 + 8566 8579 8563 + 8580 8579 8566 + 8581 8582 8583 + 8584 8582 8581 + 8584 8585 8582 + 8582 8585 8586 + 8586 8587 8582 + 8582 8587 8588 + 8581 8589 8584 + 8584 8589 8590 + 8591 8584 8590 + 8585 8584 8591 + 8591 8592 8585 + 8585 8592 8593 + 8593 8586 8585 + 8581 8594 8589 + 8589 8594 8595 + 8595 8590 8589 + 8594 8581 8596 + 8596 8597 8594 + 8594 8597 8598 + 8598 8595 8594 + 8599 8595 8598 + 8590 8595 8599 + 8597 8596 8600 + 8597 8600 8601 + 8601 8602 8597 + 8597 8602 8598 + 8602 8601 8603 + 8602 8603 8604 + 8604 8605 8602 + 8602 8605 8598 + 8606 8604 8603 + 8607 8604 8606 + 8607 8605 8604 + 8605 8607 8608 + 8608 8609 8605 + 8605 8609 8598 + 8606 8610 8607 + 8607 8610 8611 + 8608 8607 8611 + 8612 8608 8611 + 8613 8608 8612 + 8608 8613 8609 + 8609 8613 8614 + 8614 8598 8609 + 8610 8606 8615 + 8610 8615 8616 + 8616 8611 8610 + 8615 8606 8617 + 8617 8618 8615 + 8615 8618 8619 + 8619 8616 8615 + 8620 8616 8619 + 8616 8620 8621 + 8621 8611 8616 + 8622 8617 8606 + 8623 8617 8622 + 8617 8623 8624 + 8624 8618 8617 + 8618 8624 8625 + 8625 8626 8618 + 8626 8625 8627 + 8628 8622 8606 + 8629 8622 8628 + 8622 8629 8630 + 8622 8630 8623 + 8631 8623 8630 + 8624 8623 8631 + 8631 8632 8624 + 8625 8624 8632 + 8628 8633 8629 + 8629 8633 8634 + 8630 8629 8634 + 8634 8635 8630 + 8630 8635 8636 + 8636 8637 8630 + 8637 8631 8630 + 8638 8631 8637 + 8632 8631 8638 + 8633 8639 8634 + 8640 8634 8639 + 8639 58 8640 + 8619 8641 8620 + 8641 8642 8620 + 8642 8643 8620 + 8643 8644 8620 + 8621 8620 8644 + 8644 8645 8621 + 8621 8645 8646 + 8647 8621 8646 + 8611 8621 8647 + 8643 8648 8644 + 8648 8649 8644 + 8648 8650 8649 + 8650 8651 8649 + 8648 8643 8652 + 8652 8650 8648 + 8650 8652 8653 + 8653 8654 8650 + 8651 8650 8654 + 8652 8643 8655 + 8655 8656 8652 + 8652 8656 8657 + 8657 8653 8652 + 8658 8653 8657 + 8653 8658 8654 + 8659 8656 8655 + 8656 8659 8660 + 8660 8661 8656 + 8656 8661 8657 + 8662 8657 8661 + 8663 8657 8662 + 8657 8663 8658 + 8659 8655 8627 + 8627 8625 8659 + 8660 8659 8625 + 8664 8660 8625 + 8665 8660 8664 + 8660 8665 8661 + 8661 8665 8662 + 8666 8662 8665 + 8667 8662 8666 + 8662 8667 8663 + 8632 8664 8625 + 8668 8664 8632 + 8664 8668 8669 + 8664 8669 8665 + 8665 8669 8666 + 8670 8666 8669 + 8671 8666 8670 + 8666 8671 8667 + 8632 8638 8668 + 8668 8638 8672 + 8670 8668 8672 + 8669 8668 8670 + 8637 8672 8638 + 8672 8637 8673 + 8673 8674 8672 + 8672 8674 8675 + 8675 8676 8672 + 8672 8676 8670 + 8677 8670 8676 + 8670 8677 8671 + 8673 8637 8636 + 8636 8678 8673 + 8679 8673 8678 + 8674 8673 8679 + 8679 8680 8674 + 8674 8680 8681 + 8681 8675 8674 + 8682 8678 8636 + 8678 8682 8683 + 8683 8684 8678 + 8678 8684 8679 + 8685 8679 8684 + 8680 8679 8685 + 8636 8686 8682 + 8682 8686 8687 + 8687 8688 8682 + 8683 8682 8688 + 8688 8689 8683 + 8690 8683 8689 + 8684 8683 8690 + 8686 8636 8635 + 8635 8691 8686 + 8687 8686 8691 + 8691 8692 8687 + 8693 8687 8692 + 8687 8693 8694 + 8694 8688 8687 + 8688 8694 8695 + 8695 8689 8688 + 8691 8635 8634 + 8634 57 8691 + 8696 8697 8698 + 8699 8696 8698 + 8700 8696 8699 + 8700 8701 8696 + 8696 8701 61 + 61 8702 8696 + 8703 8699 8698 + 8704 8699 8703 + 8705 8699 8704 + 8699 8705 8700 + 8700 8705 8706 + 8707 8700 8706 + 8701 8700 8707 + 8698 8708 8703 + 8709 8703 8708 + 8710 8703 8709 + 8703 8710 8704 + 8711 8704 8710 + 8712 8704 8711 + 8704 8712 8705 + 8713 8708 8698 + 8708 8713 8714 + 8708 8714 8709 + 8715 8709 8714 + 8716 8709 8715 + 8709 8716 8710 + 8698 8717 8713 + 8718 8713 8717 + 8714 8713 8718 + 8718 8719 8714 + 8714 8719 8715 + 8717 8698 8720 + 8720 8721 8717 + 8717 8721 8722 + 8722 8723 8717 + 8717 8723 8718 + 8720 8698 8724 + 8724 8725 8720 + 8720 8725 8726 + 8726 8727 8720 + 8727 8728 8720 + 8728 8729 8720 + 8721 8720 8729 + 8730 8724 8698 + 8724 8731 8725 + 8725 8731 8732 + 8732 8726 8725 + 8726 8732 8733 + 8726 8733 8734 + 8734 8727 8726 + 8727 8734 8735 + 8727 8735 8736 + 8736 8728 8727 + 8733 8732 8737 + 8737 8738 8733 + 8734 8733 8738 + 8739 8734 8738 + 8735 8734 8739 + 8739 8740 8735 + 8735 8740 8741 + 8741 8736 8735 + 8737 8732 8742 + 8743 8744 8745 + 8744 8746 8745 + 8747 8745 8746 + 8747 8748 8745 + 8745 8748 8749 + 8749 8750 8745 + 8745 8750 8751 + 8751 48 8745 + 8752 8746 8744 + 8752 8753 8746 + 8746 8753 8747 + 8747 8753 8754 + 8754 8755 8747 + 8748 8747 8755 + 8755 8756 8748 + 8749 8748 8756 + 8744 8757 8752 + 8752 8757 8758 + 8758 8759 8752 + 8753 8752 8759 + 8759 8754 8753 + 8760 8754 8759 + 8754 8760 8761 + 8761 8755 8754 + 8762 8757 8744 + 8757 8762 8763 + 8763 8758 8757 + 8764 8758 8763 + 8759 8758 8764 + 8765 8759 8764 + 8759 8765 8760 + 8762 8744 8766 + 8766 8767 8762 + 8762 8767 8768 + 8768 8769 8762 + 8769 8763 8762 + 8764 8763 8769 + 8769 8770 8764 + 8764 8770 8771 + 8765 8764 8771 + 8771 8772 8765 + 8760 8765 8772 + 8767 8773 8768 + 8773 8774 8768 + 8775 8768 8774 + 8768 8775 8776 + 8776 8769 8768 + 8770 8769 8776 + 8770 8776 8777 + 8777 8771 8770 + 8773 8767 8778 + 8773 8778 48 + 48 8779 8773 + 8774 8773 8779 + 8779 8780 8774 + 8775 8774 8780 + 8780 8781 8775 + 8775 8781 8782 + 8776 8775 8782 + 8782 8777 8776 + 8783 8777 8782 + 8771 8777 8783 + 8784 8779 48 + 8779 8784 8780 + 8784 8785 8780 + 8781 8780 8785 + 8785 8786 8781 + 8781 8786 8787 + 8787 8782 8781 + 8788 8782 8787 + 8782 8788 8783 + 8784 48 8751 + 8751 8789 8784 + 8784 8789 8790 + 8790 8791 8784 + 8791 8785 8784 + 8786 8785 8791 + 8791 8792 8786 + 8787 8786 8792 + 8793 8787 8792 + 8787 8793 8788 + 8794 8789 8751 + 8789 8794 8795 + 8795 8796 8789 + 8789 8796 8790 + 8794 8751 8797 + 8797 8798 8794 + 8794 8798 8799 + 8795 8794 8799 + 8800 8797 8751 + 8801 8797 8800 + 8801 8798 8797 + 8798 8801 8802 + 8802 8799 8798 + 8803 8800 8751 + 8804 8800 8803 + 8804 8805 8800 + 8800 8805 8801 + 8801 8805 8806 + 8806 8807 8801 + 8807 8802 8801 + 8808 8803 8751 + 8809 8803 8808 + 8809 8810 8803 + 8803 8810 8804 + 8804 8810 8811 + 8811 8812 8804 + 8805 8804 8812 + 8812 8806 8805 + 8750 8808 8751 + 8813 8808 8750 + 8813 8814 8808 + 8808 8814 8809 + 8809 8814 8815 + 8815 8816 8809 + 8810 8809 8816 + 8816 8811 8810 + 8750 8817 8813 + 8818 8813 8817 + 8814 8813 8818 + 8818 8815 8814 + 8819 8815 8818 + 8815 8819 8820 + 8820 8816 8815 + 8816 8820 8821 + 8821 8811 8816 + 8749 8817 8750 + 8817 8749 8822 + 8822 8823 8817 + 8817 8823 8824 + 8824 8825 8817 + 8825 8818 8817 + 8826 8818 8825 + 8818 8826 8819 + 8822 8749 8756 + 8827 8822 8756 + 8828 8822 8827 + 8823 8822 8828 + 8823 8828 8829 + 8829 8830 8823 + 8823 8830 8824 + 8756 8831 8827 + 8832 8827 8831 + 8827 8832 8833 + 8827 8833 8828 + 8834 8831 8756 + 8831 8834 8835 + 8835 8836 8831 + 8831 8836 8832 + 8837 8832 8836 + 8833 8832 8837 + 8756 8838 8834 + 8834 8838 8839 + 8839 8840 8834 + 8835 8834 8840 + 8840 8841 8835 + 8842 8835 8841 + 8836 8835 8842 + 8838 8756 8755 + 8755 8761 8838 + 8838 8761 8843 + 8843 8839 8838 + 8839 8843 8844 + 8844 8845 8839 + 8839 8845 8846 + 8846 8840 8839 + 8840 8846 8841 + 8847 8843 8761 + 8844 8843 8847 + 8847 8848 8844 + 8844 8848 8849 + 8850 8844 8849 + 8845 8844 8850 + 8761 8760 8847 + 8772 8847 8760 + 8772 8848 8847 + 8848 8772 8771 + 8771 8849 8848 + 8783 8849 8771 + 8849 8783 8851 + 8851 8852 8849 + 8849 8852 8850 + 8853 8850 8852 + 8850 8853 8854 + 8854 8855 8850 + 8850 8855 8845 + 8851 8783 8856 + 8856 8857 8851 + 8858 8851 8857 + 8851 8858 8859 + 8859 8852 8851 + 8852 8859 8853 + 8783 8788 8856 + 8860 8856 8788 + 8861 8856 8860 + 8856 8861 8862 + 8862 8857 8856 + 8863 8857 8862 + 8857 8863 8858 + 8788 8793 8860 + 8860 8793 8864 + 8864 8865 8860 + 8866 8860 8865 + 8860 8866 8861 + 8792 8864 8793 + 8864 8792 8791 + 8864 8791 8790 + 8790 8865 8864 + 8865 8790 8867 + 8867 8868 8865 + 8865 8868 8866 + 8869 8866 8868 + 8861 8866 8869 + 8869 8870 8861 + 8861 8870 8871 + 8862 8861 8871 + 8867 8790 8872 + 8872 8873 8867 + 8874 8867 8873 + 8868 8867 8874 + 8874 8875 8868 + 8868 8875 8869 + 8796 8872 8790 + 8876 8872 8796 + 8873 8872 8876 + 8873 8876 8877 + 8877 8878 8873 + 8873 8878 8879 + 8879 8874 8873 + 8796 8880 8876 + 8876 8880 8881 + 8877 8876 8881 + 8882 8877 8881 + 8883 8877 8882 + 8883 8878 8877 + 8878 8883 8884 + 8884 8879 8878 + 8796 8795 8880 + 8880 8795 8885 + 8885 8881 8880 + 8885 8886 8881 + 8881 8886 8887 + 8887 8888 8881 + 8881 8888 8889 + 8889 8882 8881 + 8890 8885 8795 + 8886 8885 8890 + 8890 8891 8886 + 8887 8886 8891 + 8891 8892 8887 + 8892 8893 8887 + 8894 8887 8893 + 8887 8894 8888 + 8895 8890 8795 + 8896 8890 8895 + 8896 8891 8890 + 8891 8896 8897 + 8897 8892 8891 + 8898 8892 8897 + 8892 8898 8899 + 8899 8893 8892 + 8799 8895 8795 + 8900 8895 8799 + 8901 8895 8900 + 8895 8901 8896 + 8896 8901 8902 + 8902 8897 8896 + 8898 8897 8902 + 8902 8903 8898 + 8899 8898 8903 + 8799 8904 8900 + 8905 8900 8904 + 8901 8900 8905 + 8905 8906 8901 + 8901 8906 8902 + 8907 8902 8906 + 8903 8902 8907 + 8904 8799 8802 + 8904 8802 8807 + 8807 8908 8904 + 8904 8908 8909 + 8909 8905 8904 + 8910 8905 8909 + 8910 8906 8905 + 8906 8910 8907 + 8911 8908 8807 + 8908 8911 8912 + 8912 8909 8908 + 8912 8913 8909 + 8909 8913 8910 + 8910 8913 8914 + 8907 8910 8914 + 8911 8807 8806 + 8806 8915 8911 + 8911 8915 8916 + 8916 8912 8911 + 8913 8912 8916 + 8916 8914 8913 + 8915 8806 8812 + 8812 8917 8915 + 8915 8917 8918 + 8918 8919 8915 + 8915 8919 8916 + 8920 8916 8919 + 8920 8914 8916 + 8917 8812 8811 + 8811 8821 8917 + 8918 8917 8821 + 8821 8921 8918 + 8922 8918 8921 + 8922 8919 8918 + 8919 8922 8920 + 8920 8922 8923 + 8923 8924 8920 + 8924 8925 8920 + 8914 8920 8925 + 8926 8921 8821 + 8927 8921 8926 + 8921 8927 8922 + 8922 8927 8923 + 8928 8923 8927 + 8929 8923 8928 + 8923 8929 8930 + 8930 8924 8923 + 8821 8820 8926 + 8926 8820 8819 + 8819 8928 8926 + 8927 8926 8928 + 8931 8928 8819 + 8928 8931 8929 + 8929 8931 8932 + 8932 8933 8929 + 8929 8933 8934 + 8934 8930 8929 + 8819 8826 8931 + 8931 8826 8935 + 8935 8932 8931 + 8935 8936 8932 + 8936 8937 8932 + 8933 8932 8937 + 8933 8937 8938 + 8938 8939 8933 + 8933 8939 8934 + 8825 8935 8826 + 8935 8825 8936 + 8936 8825 8940 + 8936 8940 8941 + 8937 8936 8941 + 8941 8938 8937 + 8942 8938 8941 + 8939 8938 8942 + 8939 8942 8943 + 8943 8944 8939 + 8939 8944 8934 + 8825 8824 8940 + 8940 8824 8945 + 8940 8945 8946 + 8946 8941 8940 + 8941 8946 8947 + 8947 8948 8941 + 8941 8948 8942 + 8942 8948 8949 + 8949 8943 8942 + 8945 8824 8830 + 8830 8950 8945 + 8946 8945 8950 + 8950 8951 8946 + 8947 8946 8951 + 8951 8952 8947 + 8953 8947 8952 + 8948 8947 8953 + 8953 8949 8948 + 8950 8830 8829 + 8950 8829 8954 + 8954 8951 8950 + 8952 8951 8954 + 8952 8954 8955 + 8955 8956 8952 + 8952 8956 8953 + 8957 8953 8956 + 8949 8953 8957 + 8954 8829 8828 + 8955 8954 8828 + 8958 8955 8828 + 8959 8955 8958 + 8959 8956 8955 + 8956 8959 8957 + 8960 8957 8959 + 8961 8957 8960 + 8957 8961 8949 + 8949 8961 8962 + 8962 8943 8949 + 8828 8833 8958 + 8833 8963 8958 + 8963 8964 8958 + 8965 8958 8964 + 8965 8966 8958 + 8958 8966 8959 + 8959 8966 8960 + 8837 8963 8833 + 8837 8967 8963 + 8963 8967 8968 + 8968 8964 8963 + 8968 8969 8964 + 8964 8969 8965 + 8965 8969 8970 + 8971 8965 8970 + 8966 8965 8971 + 8967 8837 8972 + 8972 8973 8967 + 8968 8967 8973 + 8973 8974 8968 + 8969 8968 8974 + 8974 8970 8969 + 8836 8972 8837 + 8842 8972 8836 + 8972 8842 8975 + 8975 8973 8972 + 8973 8975 8976 + 8976 8974 8973 + 8974 8976 8977 + 8977 8970 8974 + 8975 8842 8978 + 8978 8979 8975 + 8976 8975 8979 + 8979 8980 8976 + 8977 8976 8980 + 8980 8981 8977 + 8982 8977 8981 + 8970 8977 8982 + 8841 8978 8842 + 8983 8978 8841 + 8979 8978 8983 + 8983 8984 8979 + 8979 8984 8985 + 8985 8980 8979 + 8981 8980 8985 + 8841 8846 8983 + 8983 8846 8845 + 8986 8983 8845 + 8984 8983 8986 + 8986 8987 8984 + 8984 8987 8988 + 8988 8985 8984 + 8989 8985 8988 + 8985 8989 8981 + 8845 8855 8986 + 8990 8986 8855 + 8986 8990 8991 + 8991 8987 8986 + 8987 8991 8992 + 8992 8988 8987 + 8988 8992 8993 + 8993 8994 8988 + 8988 8994 8989 + 8855 8854 8990 + 8990 8854 8995 + 8995 8996 8990 + 8991 8990 8996 + 8996 8997 8991 + 8992 8991 8997 + 8997 8998 8992 + 8993 8992 8998 + 8999 8995 8854 + 9000 8995 8999 + 8995 9000 9001 + 9001 8996 8995 + 8996 9001 9002 + 9002 8997 8996 + 8997 9002 9003 + 9003 8998 8997 + 8854 8853 8999 + 9004 8999 8853 + 9005 8999 9004 + 8999 9005 9000 + 9000 9005 9006 + 9006 9007 9000 + 9001 9000 9007 + 9007 9008 9001 + 9002 9001 9008 + 8853 8859 9004 + 9009 9004 8859 + 9010 9004 9009 + 9004 9010 9005 + 9005 9010 9011 + 9011 9006 9005 + 9012 9006 9011 + 9006 9012 9013 + 9013 9007 9006 + 8859 8858 9009 + 9014 9009 8858 + 9015 9009 9014 + 9009 9015 9010 + 9010 9015 9016 + 9016 9011 9010 + 9017 9011 9016 + 9011 9017 9012 + 8858 8863 9014 + 9018 9014 8863 + 9019 9014 9018 + 9014 9019 9015 + 9015 9019 9020 + 9020 9016 9015 + 9021 9016 9020 + 9016 9021 9017 + 8863 9022 9018 + 9023 9018 9022 + 9024 9018 9023 + 9018 9024 9019 + 9019 9024 9025 + 9025 9020 9019 + 9026 9020 9025 + 9020 9026 9021 + 8862 9022 8863 + 9022 8862 9027 + 9027 9028 9022 + 9022 9028 9023 + 9029 9023 9028 + 9030 9023 9029 + 9023 9030 9024 + 9024 9030 9031 + 9031 9025 9024 + 8871 9027 8862 + 9032 9027 8871 + 9028 9027 9032 + 9032 9033 9028 + 9028 9033 9029 + 9034 9029 9033 + 9035 9029 9034 + 9029 9035 9030 + 9030 9035 9036 + 9036 9031 9030 + 8871 9037 9032 + 9032 9037 9038 + 9038 9039 9032 + 9033 9032 9039 + 9039 9040 9033 + 9033 9040 9034 + 9037 8871 9041 + 9041 9042 9037 + 9037 9042 9043 + 9043 9044 9037 + 9037 9044 9038 + 9041 8871 8870 + 8870 9045 9041 + 9041 9045 9046 + 9042 9041 9046 + 9046 9047 9042 + 9043 9042 9047 + 9047 9048 9043 + 9049 9043 9048 + 9049 9044 9043 + 9045 8870 8869 + 9050 9045 8869 + 9045 9050 9046 + 9050 9051 9046 + 9052 9046 9051 + 9046 9052 9053 + 9053 9047 9046 + 9047 9053 9054 + 9054 9048 9047 + 8875 9050 8869 + 8875 8874 9050 + 9050 8874 9051 + 8874 8879 9051 + 8879 8884 9051 + 9051 8884 9052 + 9052 8884 9055 + 9053 9052 9055 + 9055 9056 9053 + 9054 9053 9056 + 8884 8883 9055 + 8882 9055 8883 + 9056 9055 8882 + 9056 8882 8889 + 8889 9057 9056 + 9056 9057 9054 + 9057 9058 9054 + 9058 9059 9054 + 9060 9054 9059 + 9048 9054 9060 + 9060 9061 9048 + 9048 9061 9049 + 9062 9057 8889 + 9057 9062 9063 + 9063 9058 9057 + 9058 9063 9064 + 9058 9064 9065 + 9065 9059 9058 + 9066 9059 9065 + 9059 9066 9060 + 9062 8889 9067 + 9067 9068 9062 + 9062 9068 9069 + 9063 9062 9069 + 9069 9070 9063 + 9064 9063 9070 + 9071 9067 8889 + 9072 9067 9071 + 9072 9068 9067 + 9068 9072 9073 + 9073 9069 9068 + 9074 9069 9073 + 9069 9074 9075 + 9075 9070 9069 + 8888 9071 8889 + 9076 9071 8888 + 9076 9077 9071 + 9071 9077 9072 + 9073 9072 9077 + 9077 9078 9073 + 9078 9079 9073 + 9080 9073 9079 + 9073 9080 9074 + 8888 8894 9076 + 9081 9076 8894 + 9077 9076 9081 + 9081 9078 9077 + 9082 9078 9081 + 9078 9082 9083 + 9083 9079 9078 + 9083 9084 9079 + 9079 9084 9080 + 9085 9081 8894 + 9081 9085 8899 + 9086 9081 8899 + 9081 9086 9082 + 8893 9085 8894 + 8899 9085 8893 + 9086 8899 8903 + 9087 9086 8903 + 9082 9086 9087 + 9087 9088 9082 + 9082 9088 9089 + 9089 9083 9082 + 9084 9083 9089 + 9089 9090 9084 + 9080 9084 9090 + 9091 9087 8903 + 9091 9088 9087 + 9088 9091 9092 + 9092 9089 9088 + 9090 9089 9092 + 9092 9093 9090 + 9090 9093 9094 + 9094 9095 9090 + 9090 9095 9080 + 8903 9096 9091 + 9091 9096 9097 + 9092 9091 9097 + 9097 9098 9092 + 9093 9092 9098 + 9098 9099 9093 + 9093 9099 9100 + 9100 9094 9093 + 8907 9096 8903 + 9096 8907 9101 + 9101 9097 9096 + 9102 9097 9101 + 9097 9102 9103 + 9103 9098 9097 + 9099 9098 9103 + 9099 9103 9104 + 9104 9100 9099 + 9101 8907 8914 + 8914 9105 9101 + 9106 9101 9105 + 9101 9106 9102 + 9102 9106 9107 + 9107 9108 9102 + 9103 9102 9108 + 9104 9103 9108 + 8925 9105 8914 + 9109 9105 8925 + 9105 9109 9106 + 9106 9109 9110 + 9110 9107 9106 + 9111 9107 9110 + 9108 9107 9111 + 8925 9112 9109 + 9109 9112 9113 + 9113 9110 9109 + 9110 9113 9114 + 9114 9115 9110 + 9110 9115 9111 + 9112 8925 8924 + 8924 9116 9112 + 9112 9116 9117 + 9113 9112 9117 + 9117 9118 9113 + 9114 9113 9118 + 9118 9119 9114 + 9120 9114 9119 + 9115 9114 9120 + 9116 8924 8930 + 8930 9121 9116 + 9116 9121 9122 + 9122 9117 9116 + 9117 9122 9123 + 9123 9124 9117 + 9117 9124 9125 + 9125 9118 9117 + 9118 9125 9119 + 9121 8930 8934 + 8934 9126 9121 + 9121 9126 9127 + 9127 9122 9121 + 9123 9122 9127 + 9127 9128 9123 + 9129 9123 9128 + 9124 9123 9129 + 9126 8934 9130 + 9130 9131 9126 + 9126 9131 9132 + 9132 9127 9126 + 9127 9132 9133 + 9133 9128 9127 + 9130 8934 8944 + 8944 9134 9130 + 9130 9134 9135 + 9135 9136 9130 + 9131 9130 9136 + 9136 9137 9131 + 9131 9137 9138 + 9138 9132 9131 + 9133 9132 9138 + 9134 8944 8943 + 8943 8962 9134 + 9134 8962 9139 + 9139 9140 9134 + 9134 9140 9135 + 9141 9135 9140 + 9142 9135 9141 + 9135 9142 9143 + 9143 9136 9135 + 9137 9136 9143 + 9144 9139 8962 + 9145 9139 9144 + 9140 9139 9145 + 9140 9145 9141 + 9141 9145 9146 + 9146 9147 9141 + 9148 9141 9147 + 9141 9148 9142 + 8962 8961 9144 + 8960 9144 8961 + 9144 8960 9149 + 9149 9146 9144 + 9144 9146 9145 + 9149 8960 9150 + 9150 9151 9149 + 9152 9149 9151 + 9146 9149 9152 + 9152 9147 9146 + 9147 9152 9153 + 9153 9154 9147 + 9147 9154 9148 + 9155 9150 8960 + 9156 9150 9155 + 9151 9150 9156 + 9151 9156 9157 + 9157 9158 9151 + 9151 9158 9152 + 9153 9152 9158 + 8966 9155 8960 + 8971 9155 8966 + 9155 8971 9159 + 9155 9159 9156 + 9157 9156 9159 + 9160 9157 9159 + 9161 9157 9160 + 9161 9158 9157 + 9158 9161 9153 + 9162 9153 9161 + 9154 9153 9162 + 9159 8971 9163 + 9163 9164 9159 + 9159 9164 9165 + 9165 9166 9159 + 9166 9167 9159 + 9167 9160 9159 + 9163 8971 8970 + 8970 9168 9163 + 9169 9163 9168 + 9163 9169 9164 + 9164 9169 9170 + 9170 9165 9164 + 9170 9171 9165 + 9165 9171 9172 + 9172 9166 9165 + 8982 9168 8970 + 9173 9168 8982 + 9168 9173 9169 + 9170 9169 9173 + 9173 9174 9170 + 9171 9170 9174 + 9174 9175 9171 + 9172 9171 9175 + 9176 9172 9175 + 9177 9172 9176 + 9172 9177 9166 + 8982 9178 9173 + 9173 9178 9179 + 9179 9174 9173 + 9174 9179 9180 + 9180 9175 9174 + 9178 8982 9181 + 9181 9182 9178 + 9179 9178 9182 + 9182 9183 9179 + 9180 9179 9183 + 9183 9184 9180 + 9185 9180 9184 + 9175 9180 9185 + 8981 9181 8982 + 9186 9181 8981 + 9181 9186 9182 + 9182 9186 9187 + 9187 9183 9182 + 9184 9183 9187 + 9187 9188 9184 + 9184 9188 9189 + 9189 9190 9184 + 9184 9190 9185 + 8981 8989 9186 + 9187 9186 8989 + 9191 9187 8989 + 9188 9187 9191 + 9191 9192 9188 + 9188 9192 9193 + 9193 9189 9188 + 9194 9189 9193 + 9189 9194 9195 + 9195 9190 9189 + 8989 8994 9191 + 9196 9191 8994 + 9191 9196 9197 + 9197 9192 9191 + 9192 9197 9198 + 9198 9193 9192 + 9193 9198 9199 + 9199 9200 9193 + 9193 9200 9194 + 8994 8993 9196 + 9196 8993 9201 + 9201 9202 9196 + 9197 9196 9202 + 9202 9203 9197 + 9198 9197 9203 + 9203 9204 9198 + 9199 9198 9204 + 8998 9201 8993 + 9205 9201 8998 + 9201 9205 9206 + 9206 9202 9201 + 9202 9206 9207 + 9207 9203 9202 + 9203 9207 9208 + 9208 9204 9203 + 8998 9003 9205 + 9205 9003 9209 + 9209 9210 9205 + 9206 9205 9210 + 9210 9211 9206 + 9207 9206 9211 + 9211 9212 9207 + 9208 9207 9212 + 9213 9209 9003 + 9214 9209 9213 + 9209 9214 9215 + 9215 9210 9209 + 9210 9215 9216 + 9216 9211 9210 + 9211 9216 9217 + 9217 9212 9211 + 9003 9002 9213 + 9008 9213 9002 + 9218 9213 9008 + 9213 9218 9214 + 9214 9218 9219 + 9219 9220 9214 + 9215 9214 9220 + 9220 9221 9215 + 9216 9215 9221 + 9221 9222 9216 + 9217 9216 9222 + 9008 9223 9218 + 9218 9223 9224 + 9224 9219 9218 + 9219 9224 9225 + 9225 9226 9219 + 9219 9226 9227 + 9227 9220 9219 + 9221 9220 9227 + 9223 9008 9007 + 9007 9013 9223 + 9223 9013 9228 + 9228 9224 9223 + 9225 9224 9228 + 9228 9229 9225 + 9230 9225 9229 + 9226 9225 9230 + 9230 9231 9226 + 9226 9231 9232 + 9232 9227 9226 + 9233 9228 9013 + 9228 9233 9234 + 9234 9229 9228 + 9229 9234 9235 + 9235 9236 9229 + 9229 9236 9230 + 9013 9012 9233 + 9237 9233 9012 + 9234 9233 9237 + 9237 9238 9234 + 9235 9234 9238 + 9238 9239 9235 + 9240 9235 9239 + 9235 9240 9241 + 9241 9236 9235 + 9012 9017 9237 + 9242 9237 9017 + 9237 9242 9243 + 9243 9238 9237 + 9238 9243 9244 + 9244 9239 9238 + 9245 9239 9244 + 9239 9245 9240 + 9017 9021 9242 + 9246 9242 9021 + 9243 9242 9246 + 9246 9247 9243 + 9244 9243 9247 + 9247 9248 9244 + 9249 9244 9248 + 9244 9249 9245 + 9021 9026 9246 + 9250 9246 9026 + 9246 9250 9251 + 9251 9247 9246 + 9247 9251 9252 + 9252 9248 9247 + 9253 9248 9252 + 9248 9253 9249 + 9026 9254 9250 + 9255 9250 9254 + 9251 9250 9255 + 9255 9256 9251 + 9252 9251 9256 + 9256 9257 9252 + 9258 9252 9257 + 9252 9258 9253 + 9025 9254 9026 + 9254 9025 9031 + 9031 9259 9254 + 9254 9259 9255 + 9260 9255 9259 + 9255 9260 9261 + 9261 9256 9255 + 9256 9261 9262 + 9262 9257 9256 + 9263 9257 9262 + 9257 9263 9258 + 9259 9031 9036 + 9036 9264 9259 + 9259 9264 9260 + 9265 9260 9264 + 9261 9260 9265 + 9265 9266 9261 + 9262 9261 9266 + 9266 9267 9262 + 9268 9262 9267 + 9262 9268 9263 + 9264 9036 9269 + 9269 9270 9264 + 9264 9270 9265 + 9271 9265 9270 + 9265 9271 9272 + 9272 9266 9265 + 9266 9272 9273 + 9273 9267 9266 + 9269 9036 9035 + 9035 9274 9269 + 9275 9269 9274 + 9270 9269 9275 + 9275 9276 9270 + 9270 9276 9271 + 9277 9271 9276 + 9272 9271 9277 + 9277 9278 9272 + 9273 9272 9278 + 9034 9274 9035 + 9274 9034 9279 + 9279 9280 9274 + 9274 9280 9275 + 9281 9275 9280 + 9276 9275 9281 + 9281 9282 9276 + 9276 9282 9277 + 9279 9034 9040 + 9040 9283 9279 + 9284 9279 9283 + 9280 9279 9284 + 9284 9285 9280 + 9280 9285 9281 + 9286 9281 9285 + 9282 9281 9286 + 9287 9283 9040 + 9283 9287 9288 + 9288 9289 9283 + 9283 9289 9284 + 9290 9284 9289 + 9285 9284 9290 + 9290 9291 9285 + 9285 9291 9286 + 9040 9039 9287 + 9287 9039 9038 + 9038 9292 9287 + 9287 9292 9293 + 9293 9288 9287 + 9294 9288 9293 + 9289 9288 9294 + 9294 9295 9289 + 9289 9295 9290 + 9296 9290 9295 + 9291 9290 9296 + 9292 9038 9297 + 9297 9298 9292 + 9292 9298 9299 + 9299 9300 9292 + 9292 9300 9293 + 9297 9038 9044 + 9044 9049 9297 + 9297 9049 9061 + 9061 9301 9297 + 9298 9297 9301 + 9301 9302 9298 + 9299 9298 9302 + 9302 9303 9299 + 9304 9299 9303 + 9304 9300 9299 + 9305 9301 9061 + 9301 9305 9306 + 9306 9302 9301 + 9302 9306 9307 + 9307 9303 9302 + 9303 9307 9308 + 9308 9309 9303 + 9303 9309 9304 + 9061 9060 9305 + 9305 9060 9066 + 9066 9310 9305 + 9306 9305 9310 + 9310 9311 9306 + 9306 9311 9312 + 9307 9306 9312 + 9312 9313 9307 + 9313 9308 9307 + 9314 9310 9066 + 9311 9310 9314 + 9311 9314 9315 + 9315 9312 9311 + 9066 9065 9314 + 9314 9065 9064 + 9315 9314 9064 + 9316 9315 9064 + 9313 9315 9316 + 9313 9317 9315 + 9064 9318 9316 + 9318 9319 9316 + 9319 9320 9316 + 9320 9321 9316 + 9322 9316 9321 + 9322 9323 9316 + 9316 9323 9313 + 9070 9318 9064 + 9070 9075 9318 + 9318 9075 9324 + 9324 9319 9318 + 9324 9325 9319 + 9319 9325 9326 + 9326 9320 9319 + 9326 9327 9320 + 9320 9327 9328 + 9328 9321 9320 + 9324 9075 9074 + 9329 9324 9074 + 9325 9324 9329 + 9329 9330 9325 + 9326 9325 9330 + 9330 9331 9326 + 9327 9326 9331 + 9331 9332 9327 + 9328 9327 9332 + 9074 9333 9329 + 9334 9329 9333 + 9329 9334 9335 + 9335 9330 9329 + 9330 9335 9336 + 9336 9331 9330 + 9331 9336 9337 + 9337 9332 9331 + 9338 9333 9074 + 9339 9333 9338 + 9333 9339 9334 + 9340 9334 9339 + 9335 9334 9340 + 9340 9341 9335 + 9335 9341 9342 + 9342 9336 9335 + 9337 9336 9342 + 9074 9080 9338 + 9095 9338 9080 + 9339 9338 9095 + 9095 9343 9339 + 9339 9343 9340 + 9343 9344 9340 + 9345 9340 9344 + 9341 9340 9345 + 9343 9095 9094 + 9094 9346 9343 + 9343 9346 9347 + 9347 9344 9343 + 9348 9344 9347 + 9344 9348 9345 + 9346 9094 9100 + 9100 9349 9346 + 9346 9349 9350 + 9350 9347 9346 + 9348 9347 9350 + 9350 9351 9348 + 9345 9348 9351 + 9351 9352 9345 + 9353 9345 9352 + 9345 9353 9341 + 9354 9349 9100 + 9349 9354 9355 + 9355 9350 9349 + 9350 9355 9351 + 9351 9355 9356 + 9356 9352 9351 + 9357 9352 9356 + 9352 9357 9353 + 9358 9353 9357 + 9341 9353 9358 + 9100 9104 9354 + 9354 9104 9359 + 9359 9360 9354 + 9355 9354 9360 + 9360 9361 9355 + 9361 9356 9355 + 9362 9356 9361 + 9356 9362 9357 + 9108 9359 9104 + 9363 9359 9108 + 9360 9359 9363 + 9363 9364 9360 + 9360 9364 9365 + 9365 9361 9360 + 9366 9361 9365 + 9361 9366 9362 + 9108 9367 9363 + 9368 9363 9367 + 9364 9363 9368 + 9368 9369 9364 + 9364 9369 9370 + 9370 9371 9364 + 9371 9365 9364 + 9111 9367 9108 + 9367 9111 9372 + 9372 9373 9367 + 9367 9373 9368 + 9374 9368 9373 + 9369 9368 9374 + 9369 9374 9375 + 9375 9370 9369 + 9372 9111 9115 + 9115 9376 9372 + 9377 9372 9376 + 9372 9377 9378 + 9378 9373 9372 + 9373 9378 9374 + 9374 9378 9379 + 9375 9374 9379 + 9120 9376 9115 + 9380 9376 9120 + 9376 9380 9377 + 9377 9380 9381 + 9381 9382 9377 + 9378 9377 9382 + 9382 9379 9378 + 9120 9383 9380 + 9380 9383 9384 + 9384 9381 9380 + 9385 9381 9384 + 9381 9385 9386 + 9386 9382 9381 + 9382 9386 9387 + 9387 9379 9382 + 9383 9120 9388 + 9388 9389 9383 + 9383 9389 9390 + 9390 9384 9383 + 9391 9384 9390 + 9384 9391 9385 + 9119 9388 9120 + 9392 9388 9119 + 9389 9388 9392 + 9392 9393 9389 + 9389 9393 9394 + 9394 9390 9389 + 9395 9390 9394 + 9390 9395 9391 + 9119 9125 9392 + 9392 9125 9124 + 9124 9396 9392 + 9393 9392 9396 + 9396 9397 9393 + 9393 9397 9398 + 9398 9394 9393 + 9399 9394 9398 + 9394 9399 9395 + 9129 9396 9124 + 9397 9396 9129 + 9129 9400 9397 + 9397 9400 9401 + 9401 9398 9397 + 9402 9398 9401 + 9398 9402 9399 + 9399 9402 9403 + 9403 9404 9399 + 9395 9399 9404 + 9400 9129 9405 + 9405 9406 9400 + 9400 9406 9407 + 9407 9401 9400 + 9408 9401 9407 + 9401 9408 9402 + 9402 9408 9409 + 9409 9403 9402 + 9128 9405 9129 + 9410 9405 9128 + 9406 9405 9410 + 9410 9411 9406 + 9406 9411 9412 + 9412 9407 9406 + 9413 9407 9412 + 9407 9413 9408 + 9408 9413 9414 + 9414 9409 9408 + 9128 9133 9410 + 9410 9133 9415 + 9415 9416 9410 + 9411 9410 9416 + 9416 9417 9411 + 9411 9417 9418 + 9418 9412 9411 + 9419 9412 9418 + 9412 9419 9413 + 9138 9415 9133 + 9138 9420 9415 + 9415 9420 9421 + 9421 9416 9415 + 9417 9416 9421 + 9421 9422 9417 + 9417 9422 9423 + 9423 9418 9417 + 9424 9418 9423 + 9418 9424 9419 + 9420 9138 9425 + 9425 9426 9420 + 9420 9426 9427 + 9427 9421 9420 + 9422 9421 9427 + 9427 9428 9422 + 9422 9428 9429 + 9429 9423 9422 + 9137 9425 9138 + 9430 9425 9137 + 9426 9425 9430 + 9430 9431 9426 + 9426 9431 9432 + 9432 9427 9426 + 9428 9427 9432 + 9432 9433 9428 + 9428 9433 9434 + 9434 9429 9428 + 9137 9435 9430 + 9436 9430 9435 + 9431 9430 9436 + 9436 9437 9431 + 9432 9431 9437 + 9437 9438 9432 + 9433 9432 9438 + 9143 9435 9137 + 9435 9143 9439 + 9439 9440 9435 + 9435 9440 9436 + 9441 9436 9440 + 9436 9441 9442 + 9442 9437 9436 + 9437 9442 9443 + 9443 9438 9437 + 9439 9143 9444 + 9444 9445 9439 + 9445 9446 9439 + 9447 9439 9446 + 9440 9439 9447 + 9447 9448 9440 + 9440 9448 9441 + 9143 9142 9444 + 9449 9444 9142 + 9444 9449 9450 + 9444 9450 9451 + 9451 9445 9444 + 9445 9451 9452 + 9445 9452 9453 + 9453 9446 9445 + 9142 9148 9449 + 9449 9148 9154 + 9154 9454 9449 + 9454 9455 9449 + 9450 9449 9455 + 9455 9456 9450 + 9450 9456 9457 + 9457 9451 9450 + 9457 9458 9451 + 9458 9452 9451 + 9162 9454 9154 + 9454 9162 9459 + 9454 9459 9460 + 9460 9455 9454 + 9455 9460 9456 + 9456 9460 9461 + 9461 9462 9456 + 9456 9462 9457 + 9463 9457 9462 + 9458 9457 9463 + 9459 9162 9464 + 9464 9465 9459 + 9459 9465 9461 + 9461 9460 9459 + 9161 9464 9162 + 9160 9464 9161 + 9465 9464 9160 + 9465 9160 9167 + 9167 9466 9465 + 9465 9466 9461 + 9467 9461 9466 + 9462 9461 9467 + 9462 9467 9463 + 9468 9466 9167 + 9466 9468 9467 + 9467 9468 9177 + 9463 9467 9177 + 9177 9469 9463 + 9469 9470 9463 + 9471 9463 9470 + 9463 9471 9458 + 9468 9167 9166 + 9166 9177 9468 + 9176 9469 9177 + 9469 9176 9472 + 9469 9472 9473 + 9473 9470 9469 + 9474 9470 9473 + 9470 9474 9471 + 9475 9471 9474 + 9458 9471 9475 + 9472 9176 9476 + 9476 9477 9472 + 9472 9477 9478 + 9478 9479 9472 + 9479 9480 9472 + 9480 9481 9472 + 9481 9482 9472 + 9482 9483 9472 + 9483 9484 9472 + 9484 9473 9472 + 9476 9176 9175 + 9175 9485 9476 + 9486 9476 9485 + 9476 9486 9477 + 9477 9486 9487 + 9487 9478 9477 + 9487 9488 9478 + 9478 9488 9489 + 9489 9479 9478 + 9185 9485 9175 + 9485 9185 9490 + 9490 9491 9485 + 9485 9491 9486 + 9487 9486 9491 + 9491 9492 9487 + 9488 9487 9492 + 9492 9493 9488 + 9489 9488 9493 + 9490 9185 9190 + 9190 9195 9490 + 9494 9490 9195 + 9491 9490 9494 + 9494 9492 9491 + 9492 9494 9495 + 9495 9493 9492 + 9493 9495 9496 + 9496 9497 9493 + 9493 9497 9498 + 9498 9489 9493 + 9195 9499 9494 + 9495 9494 9499 + 9499 9500 9495 + 9496 9495 9500 + 9500 9501 9496 + 9502 9496 9501 + 9496 9502 9497 + 9497 9502 9503 + 9503 9498 9497 + 9504 9499 9195 + 9499 9504 9500 + 9500 9504 9505 + 9505 9501 9500 + 9506 9501 9505 + 9501 9506 9502 + 9502 9506 9507 + 9503 9502 9507 + 9195 9194 9504 + 9505 9504 9194 + 9508 9505 9194 + 9509 9505 9508 + 9505 9509 9506 + 9506 9509 9510 + 9510 9511 9506 + 9506 9511 9507 + 9194 9200 9508 + 9512 9508 9200 + 9508 9512 9513 + 9513 9514 9508 + 9508 9514 9509 + 9509 9514 9515 + 9515 9510 9509 + 9516 9510 9515 + 9511 9510 9516 + 9200 9199 9512 + 9512 9199 9517 + 9517 9518 9512 + 9513 9512 9518 + 9518 9519 9513 + 9520 9513 9519 + 9514 9513 9520 + 9520 9515 9514 + 9204 9517 9199 + 9521 9517 9204 + 9517 9521 9522 + 9522 9518 9517 + 9518 9522 9523 + 9523 9519 9518 + 9519 9523 9524 + 9524 9525 9519 + 9519 9525 9520 + 9204 9208 9521 + 9521 9208 9526 + 9526 9527 9521 + 9522 9521 9527 + 9527 9528 9522 + 9523 9522 9528 + 9528 9529 9523 + 9524 9523 9529 + 9212 9526 9208 + 9530 9526 9212 + 9526 9530 9531 + 9531 9527 9526 + 9527 9531 9532 + 9532 9528 9527 + 9528 9532 9533 + 9533 9529 9528 + 9212 9217 9530 + 9530 9217 9534 + 9534 9535 9530 + 9531 9530 9535 + 9535 9536 9531 + 9532 9531 9536 + 9536 9537 9532 + 9533 9532 9537 + 9222 9534 9217 + 9534 9222 9538 + 9538 9539 9534 + 9534 9539 9540 + 9540 9535 9534 + 9536 9535 9540 + 9540 9541 9536 + 9536 9541 9542 + 9542 9537 9536 + 9538 9222 9221 + 9221 9543 9538 + 9544 9538 9543 + 9539 9538 9544 + 9544 9545 9539 + 9539 9545 9546 + 9546 9540 9539 + 9541 9540 9546 + 9227 9543 9221 + 9543 9227 9232 + 9232 9547 9543 + 9543 9547 9544 + 9548 9544 9547 + 9544 9548 9549 + 9549 9545 9544 + 9545 9549 9550 + 9550 9546 9545 + 9551 9547 9232 + 9547 9551 9548 + 9548 9551 9552 + 9552 9553 9548 + 9549 9548 9553 + 9553 9554 9549 + 9550 9549 9554 + 9232 9555 9551 + 9551 9555 9556 + 9556 9552 9551 + 9557 9552 9556 + 9552 9557 9558 + 9558 9553 9552 + 9553 9558 9559 + 9559 9554 9553 + 9555 9232 9231 + 9231 9560 9555 + 9555 9560 9561 + 9561 9556 9555 + 9562 9556 9561 + 9556 9562 9557 + 9557 9562 9563 + 9563 9564 9557 + 9558 9557 9564 + 9560 9231 9230 + 9230 9565 9560 + 9560 9565 9566 + 9566 9561 9560 + 9567 9561 9566 + 9561 9567 9562 + 9562 9567 9568 + 9568 9563 9562 + 9565 9230 9236 + 9236 9241 9565 + 9565 9241 9569 + 9569 9566 9565 + 9570 9566 9569 + 9566 9570 9567 + 9567 9570 9571 + 9571 9568 9567 + 9572 9568 9571 + 9568 9572 9573 + 9573 9563 9568 + 9574 9569 9241 + 9575 9569 9574 + 9569 9575 9570 + 9570 9575 9576 + 9576 9571 9570 + 9577 9571 9576 + 9571 9577 9572 + 9241 9240 9574 + 9578 9574 9240 + 9579 9574 9578 + 9574 9579 9575 + 9575 9579 9580 + 9580 9576 9575 + 9581 9576 9580 + 9576 9581 9577 + 9240 9245 9578 + 9582 9578 9245 + 9583 9578 9582 + 9578 9583 9579 + 9579 9583 9584 + 9584 9580 9579 + 9585 9580 9584 + 9580 9585 9581 + 9245 9249 9582 + 9586 9582 9249 + 9587 9582 9586 + 9582 9587 9583 + 9583 9587 9588 + 9588 9584 9583 + 9589 9584 9588 + 9584 9589 9585 + 9249 9253 9586 + 9590 9586 9253 + 9591 9586 9590 + 9586 9591 9587 + 9587 9591 9592 + 9592 9588 9587 + 9593 9588 9592 + 9588 9593 9589 + 9253 9258 9590 + 9594 9590 9258 + 9595 9590 9594 + 9590 9595 9591 + 9591 9595 9596 + 9596 9592 9591 + 9597 9592 9596 + 9592 9597 9593 + 9258 9263 9594 + 9598 9594 9263 + 9599 9594 9598 + 9594 9599 9595 + 9595 9599 9600 + 9600 9596 9595 + 9601 9596 9600 + 9596 9601 9597 + 9263 9268 9598 + 9602 9598 9268 + 9603 9598 9602 + 9598 9603 9599 + 9599 9603 9604 + 9604 9600 9599 + 9605 9600 9604 + 9600 9605 9601 + 9268 9606 9602 + 9607 9602 9606 + 9608 9602 9607 + 9602 9608 9603 + 9603 9608 9609 + 9609 9604 9603 + 9610 9604 9609 + 9604 9610 9605 + 9267 9606 9268 + 9606 9267 9273 + 9273 9611 9606 + 9606 9611 9607 + 9612 9607 9611 + 9613 9607 9612 + 9607 9613 9608 + 9608 9613 9614 + 9614 9609 9608 + 9615 9609 9614 + 9609 9615 9610 + 9611 9273 9616 + 9616 9617 9611 + 9611 9617 9612 + 9618 9612 9617 + 9619 9612 9618 + 9612 9619 9613 + 9613 9619 9620 + 9620 9614 9613 + 9278 9616 9273 + 9621 9616 9278 + 9617 9616 9621 + 9621 9622 9617 + 9617 9622 9618 + 9623 9618 9622 + 9624 9618 9623 + 9618 9624 9619 + 9619 9624 9625 + 9625 9620 9619 + 9278 9626 9621 + 9627 9621 9626 + 9622 9621 9627 + 9627 9628 9622 + 9622 9628 9623 + 9629 9623 9628 + 9630 9623 9629 + 9623 9630 9624 + 9626 9278 9277 + 9277 9631 9626 + 9626 9631 9632 + 9632 9633 9626 + 9626 9633 9627 + 9634 9627 9633 + 9628 9627 9634 + 9634 9635 9628 + 9628 9635 9629 + 9631 9277 9282 + 9282 9636 9631 + 9631 9636 9637 + 9637 9632 9631 + 9638 9632 9637 + 9632 9638 9639 + 9639 9633 9632 + 9633 9639 9634 + 9640 9634 9639 + 9635 9634 9640 + 9286 9636 9282 + 9636 9286 9641 + 9641 9637 9636 + 9637 9641 9642 + 9642 9643 9637 + 9637 9643 9638 + 9638 9643 9644 + 9644 9645 9638 + 9639 9638 9645 + 9641 9286 9291 + 9291 9646 9641 + 9642 9641 9646 + 9646 9647 9642 + 9648 9642 9647 + 9643 9642 9648 + 9648 9644 9643 + 9296 9646 9291 + 9646 9296 9649 + 9649 9647 9646 + 9647 9649 9650 + 9650 9651 9647 + 9647 9651 9648 + 9652 9648 9651 + 9644 9648 9652 + 9649 9296 9653 + 9653 9654 9649 + 9650 9649 9654 + 9654 9655 9650 + 9656 9650 9655 + 9651 9650 9656 + 9656 9657 9651 + 9651 9657 9652 + 9295 9653 9296 + 9658 9653 9295 + 9653 9658 9659 + 9659 9654 9653 + 9654 9659 9660 + 9660 9655 9654 + 9655 9660 9661 + 9661 9662 9655 + 9655 9662 9656 + 9295 9294 9658 + 9658 9294 9663 + 9663 9664 9658 + 9659 9658 9664 + 9664 9665 9659 + 9660 9659 9665 + 9665 9666 9660 + 9661 9660 9666 + 9294 9667 9663 + 9668 9663 9667 + 9669 9663 9668 + 9663 9669 9670 + 9670 9664 9663 + 9665 9664 9670 + 9293 9667 9294 + 9671 9667 9293 + 9667 9671 9668 + 9668 9671 9672 + 9672 9673 9668 + 9669 9668 9673 + 9673 9674 9669 + 9669 9674 9675 + 9675 9670 9669 + 9676 9671 9293 + 9672 9671 9676 + 9677 9672 9676 + 9672 9677 9678 + 9672 9678 9679 + 9679 9673 9672 + 9673 9679 9680 + 9680 9674 9673 + 9676 9293 9681 + 9681 9682 9676 + 9676 9682 9683 + 9683 9684 9676 + 9684 9677 9676 + 9678 9677 9684 + 9685 9681 9293 + 9686 9681 9685 + 9682 9681 9686 + 9682 9686 9687 + 9687 9683 9682 + 9688 9683 9687 + 9683 9688 9689 + 9689 9684 9683 + 9300 9685 9293 + 9690 9685 9300 + 9691 9685 9690 + 9685 9691 9686 + 9686 9691 9692 + 9692 9687 9686 + 9693 9687 9692 + 9687 9693 9688 + 9300 9304 9690 + 9690 9304 9309 + 9309 9694 9690 + 9691 9690 9694 + 9694 9692 9691 + 9695 9692 9694 + 9692 9695 9693 + 9693 9695 9696 + 9696 9697 9693 + 9688 9693 9697 + 9697 9698 9688 + 9689 9688 9698 + 9699 9694 9309 + 9694 9699 9695 + 9695 9699 9700 + 9700 9696 9695 + 9696 9700 9701 + 9696 9701 9702 + 9702 9697 9696 + 9698 9697 9702 + 9309 9308 9699 + 9699 9308 9323 + 9323 9703 9699 + 9703 9700 9699 + 9701 9700 9703 + 9703 9704 9701 + 9701 9704 9705 + 9702 9701 9705 + 9308 9313 9323 + 9474 9473 9484 + 9484 9706 9474 + 9474 9706 9475 + 9707 9475 9706 + 9708 9475 9707 + 9475 9708 9458 + 9452 9458 9708 + 9709 9706 9484 + 9706 9709 9707 + 9710 9707 9709 + 9711 9707 9710 + 9707 9711 9708 + 9708 9711 9712 + 9712 9453 9708 + 9708 9453 9452 + 9709 9484 9483 + 9483 9713 9709 + 9709 9713 9710 + 9714 9710 9713 + 9715 9710 9714 + 9710 9715 9711 + 9712 9711 9715 + 9715 9716 9712 + 9717 9712 9716 + 9453 9712 9717 + 9717 9446 9453 + 9718 9713 9483 + 9713 9718 9714 + 9719 9714 9718 + 9720 9714 9719 + 9714 9720 9715 + 9715 9720 9721 + 9721 9716 9715 + 9722 9716 9721 + 9716 9722 9717 + 9718 9483 9482 + 9482 9723 9718 + 9718 9723 9719 + 9724 9719 9723 + 9725 9719 9724 + 9719 9725 9720 + 9721 9720 9725 + 9725 9726 9721 + 9722 9721 9726 + 9727 9723 9482 + 9723 9727 9724 + 9728 9724 9727 + 9729 9724 9728 + 9724 9729 9725 + 9725 9729 9730 + 9730 9726 9725 + 9731 9726 9730 + 9726 9731 9722 + 9727 9482 9481 + 9481 9732 9727 + 9727 9732 9728 + 9733 9728 9732 + 9734 9728 9733 + 9728 9734 9729 + 9729 9734 9735 + 9730 9729 9735 + 9735 9736 9730 + 9731 9730 9736 + 9737 9732 9481 + 9732 9737 9733 + 9738 9733 9737 + 9734 9733 9738 + 9738 9735 9734 + 9735 9738 9739 + 9735 9739 9740 + 9740 9736 9735 + 9737 9481 9480 + 9480 9741 9737 + 9737 9741 9742 + 9742 9738 9737 + 9739 9738 9742 + 9742 9743 9739 + 9740 9739 9743 + 9743 9744 9740 + 9745 9740 9744 + 9736 9740 9745 + 9746 9741 9480 + 9741 9746 9747 + 9747 9748 9741 + 9741 9748 9742 + 9746 9480 9479 + 9479 9749 9746 + 9746 9749 9750 + 9747 9746 9750 + 9751 9747 9750 + 9752 9747 9751 + 9748 9747 9752 + 9489 9749 9479 + 9749 9489 9498 + 9498 9750 9749 + 9503 9750 9498 + 9750 9503 9753 + 9753 9754 9750 + 9750 9754 9755 + 9755 9751 9750 + 9756 9751 9755 + 9751 9756 9757 + 9751 9757 9752 + 9758 9753 9503 + 9759 9753 9758 + 9759 9754 9753 + 9754 9759 9760 + 9760 9755 9754 + 9760 9761 9755 + 9755 9761 9756 + 9762 9756 9761 + 9757 9756 9762 + 9507 9758 9503 + 9763 9758 9507 + 9763 9764 9758 + 9758 9764 9759 + 9760 9759 9764 + 9764 9765 9760 + 9765 9766 9760 + 9761 9760 9766 + 9766 9767 9761 + 9761 9767 9762 + 9507 9768 9763 + 9769 9763 9768 + 9769 9765 9763 + 9765 9764 9763 + 9768 9507 9770 + 9768 9770 9771 + 9771 9772 9768 + 9768 9772 9769 + 9773 9769 9772 + 9769 9773 9765 + 9765 9773 8740 + 8740 9766 9765 + 9767 9766 8740 + 9770 9507 9511 + 9511 9516 9770 + 9770 9516 9774 + 9774 9775 9770 + 9775 9771 9770 + 9776 9771 9775 + 9771 9776 8741 + 8741 9772 9771 + 9772 8741 9773 + 8740 9773 8741 + 9515 9774 9516 + 9777 9774 9515 + 9774 9777 9778 + 9778 9775 9774 + 9775 9778 9779 + 9779 9780 9775 + 9775 9780 9776 + 9515 9520 9777 + 9777 9520 9525 + 9525 9781 9777 + 9778 9777 9781 + 9781 9782 9778 + 9779 9778 9782 + 9782 9783 9779 + 9784 9779 9783 + 9780 9779 9784 + 9785 9781 9525 + 9781 9785 9786 + 9786 9782 9781 + 9782 9786 9787 + 9787 9783 9782 + 9783 9787 9788 + 9788 9789 9783 + 9783 9789 9784 + 9525 9524 9785 + 9785 9524 9790 + 9790 9791 9785 + 9786 9785 9791 + 9791 9792 9786 + 9787 9786 9792 + 9792 9793 9787 + 9788 9787 9793 + 9529 9790 9524 + 9794 9790 9529 + 9790 9794 9795 + 9795 9791 9790 + 9791 9795 9796 + 9796 9792 9791 + 9792 9796 9797 + 9797 9793 9792 + 9529 9533 9794 + 9798 9794 9533 + 9795 9794 9798 + 9798 9799 9795 + 9796 9795 9799 + 9799 9800 9796 + 9797 9796 9800 + 9533 9801 9798 + 9802 9798 9801 + 9798 9802 9803 + 9803 9799 9798 + 9799 9803 9804 + 9804 9800 9799 + 9805 9800 9804 + 9800 9805 9797 + 9537 9801 9533 + 9801 9537 9542 + 9542 9806 9801 + 9801 9806 9802 + 9802 9806 9807 + 9807 9808 9802 + 9803 9802 9808 + 9808 9809 9803 + 9803 9809 9810 + 9810 9804 9803 + 9806 9542 9811 + 9811 9807 9806 + 9812 9807 9811 + 9807 9812 9813 + 9813 9808 9807 + 9808 9813 9814 + 9814 9809 9808 + 9809 9814 9815 + 9815 9810 9809 + 9811 9542 9541 + 9541 9816 9811 + 9817 9811 9816 + 9811 9817 9812 + 9812 9817 9818 + 9818 9819 9812 + 9813 9812 9819 + 9819 9820 9813 + 9814 9813 9820 + 9546 9816 9541 + 9821 9816 9546 + 9816 9821 9817 + 9817 9821 9822 + 9822 9818 9817 + 9823 9818 9822 + 9818 9823 9824 + 9824 9819 9818 + 9819 9824 9825 + 9825 9820 9819 + 9546 9550 9821 + 9821 9550 9826 + 9826 9822 9821 + 9827 9822 9826 + 9822 9827 9823 + 9823 9827 9828 + 9828 9829 9823 + 9824 9823 9829 + 9829 9830 9824 + 9825 9824 9830 + 9554 9826 9550 + 9831 9826 9554 + 9826 9831 9827 + 9827 9831 9832 + 9832 9828 9827 + 9833 9828 9832 + 9828 9833 9834 + 9834 9829 9828 + 9829 9834 9835 + 9835 9830 9829 + 9554 9559 9831 + 9831 9559 9836 + 9836 9832 9831 + 9837 9832 9836 + 9832 9837 9833 + 9833 9837 9838 + 9838 9839 9833 + 9834 9833 9839 + 9839 9840 9834 + 9835 9834 9840 + 9841 9836 9559 + 9842 9836 9841 + 9836 9842 9837 + 9837 9842 9843 + 9843 9838 9837 + 9844 9838 9843 + 9838 9844 9845 + 9845 9839 9838 + 9559 9558 9841 + 9564 9841 9558 + 9846 9841 9564 + 9841 9846 9842 + 9842 9846 9847 + 9847 9843 9842 + 9848 9843 9847 + 9843 9848 9844 + 9844 9848 9849 + 9849 9850 9844 + 9845 9844 9850 + 9564 9851 9846 + 9846 9851 9852 + 9852 9847 9846 + 9853 9847 9852 + 9847 9853 9848 + 9848 9853 9854 + 9854 9849 9848 + 9851 9564 9563 + 9563 9573 9851 + 9851 9573 9855 + 9855 9852 9851 + 9856 9852 9855 + 9852 9856 9853 + 9853 9856 9857 + 9857 9854 9853 + 9403 9854 9857 + 9854 9403 9409 + 9409 9849 9854 + 9858 9855 9573 + 9859 9855 9858 + 9855 9859 9856 + 9856 9859 9860 + 9860 9857 9856 + 9404 9857 9860 + 9857 9404 9403 + 9573 9572 9858 + 9861 9858 9572 + 9862 9858 9861 + 9858 9862 9859 + 9859 9862 9863 + 9863 9860 9859 + 9864 9860 9863 + 9860 9864 9404 + 9404 9864 9395 + 9391 9395 9864 + 9572 9577 9861 + 9865 9861 9577 + 9866 9861 9865 + 9861 9866 9862 + 9862 9866 9867 + 9867 9863 9862 + 9868 9863 9867 + 9863 9868 9864 + 9864 9868 9391 + 9385 9391 9868 + 9577 9581 9865 + 9869 9865 9581 + 9870 9865 9869 + 9865 9870 9866 + 9866 9870 9871 + 9871 9867 9866 + 9872 9867 9871 + 9867 9872 9868 + 9868 9872 9385 + 9386 9385 9872 + 9581 9585 9869 + 9873 9869 9585 + 9874 9869 9873 + 9869 9874 9870 + 9870 9874 9875 + 9875 9871 9870 + 9876 9871 9875 + 9871 9876 9872 + 9872 9876 9386 + 9387 9386 9876 + 9585 9589 9873 + 9877 9873 9589 + 9878 9873 9877 + 9873 9878 9874 + 9874 9878 9879 + 9879 9875 9874 + 9880 9875 9879 + 9875 9880 9876 + 9876 9880 9387 + 9881 9387 9880 + 9379 9387 9881 + 9589 9593 9877 + 9882 9877 9593 + 9883 9877 9882 + 9877 9883 9878 + 9878 9883 9884 + 9884 9879 9878 + 9885 9879 9884 + 9879 9885 9880 + 9880 9885 9881 + 9593 9597 9882 + 9886 9882 9597 + 9887 9882 9886 + 9882 9887 9883 + 9883 9887 9888 + 9888 9884 9883 + 9889 9884 9888 + 9884 9889 9885 + 9885 9889 9890 + 9890 9881 9885 + 9597 9601 9886 + 9891 9886 9601 + 9892 9886 9891 + 9886 9892 9887 + 9887 9892 9893 + 9893 9888 9887 + 9894 9888 9893 + 9888 9894 9889 + 9889 9894 9895 + 9895 9890 9889 + 9601 9605 9891 + 9896 9891 9605 + 9897 9891 9896 + 9891 9897 9892 + 9892 9897 9898 + 9898 9893 9892 + 9899 9893 9898 + 9893 9899 9894 + 9894 9899 9900 + 9900 9895 9894 + 9605 9610 9896 + 9901 9896 9610 + 9902 9896 9901 + 9896 9902 9897 + 9897 9902 9903 + 9903 9898 9897 + 9904 9898 9903 + 9898 9904 9899 + 9899 9904 9905 + 9905 9900 9899 + 9610 9615 9901 + 9906 9901 9615 + 9907 9901 9906 + 9901 9907 9902 + 9902 9907 9908 + 9908 9903 9902 + 9909 9903 9908 + 9903 9909 9904 + 9904 9909 9910 + 9910 9905 9904 + 9615 9911 9906 + 9912 9906 9911 + 9913 9906 9912 + 9906 9913 9907 + 9907 9913 9914 + 9914 9908 9907 + 9915 9908 9914 + 9908 9915 9909 + 9614 9911 9615 + 9911 9614 9620 + 9620 9916 9911 + 9911 9916 9912 + 9917 9912 9916 + 9918 9912 9917 + 9912 9918 9913 + 9913 9918 9919 + 9919 9914 9913 + 9920 9914 9919 + 9914 9920 9915 + 9916 9620 9625 + 9625 9921 9916 + 9916 9921 9917 + 9922 9917 9921 + 9923 9917 9922 + 9917 9923 9918 + 9918 9923 9924 + 9924 9919 9918 + 9925 9919 9924 + 9919 9925 9920 + 9921 9625 9926 + 9926 9927 9921 + 9921 9927 9922 + 9928 9922 9927 + 9929 9922 9928 + 9922 9929 9923 + 9923 9929 9930 + 9930 9924 9923 + 9926 9625 9624 + 9624 9630 9926 + 9931 9926 9630 + 9927 9926 9931 + 9931 9932 9927 + 9927 9932 9928 + 9933 9928 9932 + 9934 9928 9933 + 9928 9934 9929 + 9929 9934 9935 + 9935 9930 9929 + 9630 9936 9931 + 9937 9931 9936 + 9932 9931 9937 + 9937 9938 9932 + 9932 9938 9933 + 9939 9933 9938 + 9940 9933 9939 + 9933 9940 9934 + 9629 9936 9630 + 9936 9629 9941 + 9941 9942 9936 + 9936 9942 9937 + 9943 9937 9942 + 9938 9937 9943 + 9943 9944 9938 + 9938 9944 9939 + 9941 9629 9635 + 9635 9945 9941 + 9946 9941 9945 + 9942 9941 9946 + 9946 9947 9942 + 9942 9947 9943 + 9943 9947 9948 + 9948 9949 9943 + 9944 9943 9949 + 9640 9945 9635 + 9945 9640 9950 + 9950 9951 9945 + 9945 9951 9946 + 9946 9951 9952 + 9952 9953 9946 + 9947 9946 9953 + 9953 9948 9947 + 9950 9640 9954 + 9954 9955 9950 + 9950 9955 9956 + 9956 9957 9950 + 9951 9950 9957 + 9957 9952 9951 + 9639 9954 9640 + 9645 9954 9639 + 9955 9954 9645 + 9645 9958 9955 + 9955 9958 9959 + 9959 9956 9955 + 9960 9956 9959 + 9956 9960 9961 + 9961 9957 9956 + 9952 9957 9961 + 9958 9645 9644 + 9644 9962 9958 + 9959 9958 9962 + 9962 9963 9959 + 9964 9959 9963 + 9959 9964 9960 + 9652 9962 9644 + 9962 9652 9965 + 9965 9963 9962 + 9963 9965 9966 + 9966 9967 9963 + 9963 9967 9964 + 9964 9967 9968 + 9968 9969 9964 + 9960 9964 9969 + 9970 9965 9652 + 9966 9965 9970 + 9970 9971 9966 + 9966 9971 9972 + 9972 9973 9966 + 9967 9966 9973 + 9973 9968 9967 + 9652 9657 9970 + 9974 9970 9657 + 9970 9974 9975 + 9975 9971 9970 + 9971 9975 9976 + 9976 9972 9971 + 9657 9656 9974 + 9977 9974 9656 + 9975 9974 9977 + 9977 9978 9975 + 9975 9978 9979 + 9979 9976 9975 + 9980 9976 9979 + 9972 9976 9980 + 9656 9662 9977 + 9981 9977 9662 + 9977 9981 9982 + 9982 9978 9977 + 9978 9982 9983 + 9983 9979 9978 + 9979 9983 9984 + 9984 9985 9979 + 9979 9985 9980 + 9662 9661 9981 + 9981 9661 9986 + 9986 9987 9981 + 9982 9981 9987 + 9987 9988 9982 + 9983 9982 9988 + 9989 9983 9988 + 9984 9983 9989 + 9661 9990 9986 + 9991 9986 9990 + 9992 9986 9991 + 9986 9992 9993 + 9993 9987 9986 + 9988 9987 9993 + 9666 9990 9661 + 9990 9666 9994 + 9994 9995 9990 + 9990 9995 9991 + 9991 9995 9996 + 9996 9997 9991 + 9992 9991 9997 + 9994 9666 9665 + 9665 9998 9994 + 9999 9994 9998 + 9995 9994 9999 + 9999 9996 9995 + 10000 9996 9999 + 9996 10000 10001 + 10001 9997 9996 + 9670 9998 9665 + 9998 9670 9675 + 9675 10002 9998 + 9998 10002 9999 + 10003 9999 10002 + 9999 10003 10000 + 10000 10003 10004 + 10004 10005 10000 + 10000 10005 10006 + 10006 10001 10000 + 10007 10002 9675 + 10002 10007 10003 + 10004 10003 10007 + 10008 10004 10007 + 10004 10008 10009 + 10010 10004 10009 + 10010 10005 10004 + 10005 10010 10011 + 10011 10006 10005 + 9675 10012 10007 + 10007 10012 10013 + 10013 10014 10007 + 10007 10014 10008 + 10012 9675 9674 + 9674 9680 10012 + 10012 9680 10015 + 10015 10013 10012 + 10016 10013 10015 + 10014 10013 10016 + 10014 10016 10017 + 10017 10018 10014 + 10014 10018 10008 + 10019 10015 9680 + 10015 10019 10020 + 10015 10020 10016 + 10016 10020 10021 + 10017 10016 10021 + 9680 9679 10019 + 10022 10019 9679 + 10020 10019 10022 + 10022 10021 10020 + 10022 10023 10021 + 10021 10023 10024 + 10024 10025 10021 + 10021 10025 10017 + 9679 9678 10022 + 9678 10026 10022 + 10026 10027 10022 + 10027 10028 10022 + 10023 10022 10028 + 10028 10029 10023 + 10024 10023 10029 + 9684 10026 9678 + 9684 9689 10026 + 10027 10026 9689 + 10030 10027 9689 + 9698 10030 9689 + 10031 10030 9698 + 9698 9702 10031 + 10032 10031 9702 + 10027 10031 10032 + 10027 10033 10031 + 10032 9702 9705 + 9705 10034 10032 + 10034 10035 10032 + 10029 10032 10035 + 10029 10028 10032 + 10032 10028 10027 + 10036 10034 9705 + 10036 10037 10034 + 10034 10037 10038 + 10038 10035 10034 + 10038 10039 10035 + 10035 10039 10029 + 10029 10039 10040 + 10040 10024 10029 + 9705 10041 10036 + 10036 10041 10042 + 10042 10043 10036 + 10037 10036 10043 + 10043 10044 10037 + 10044 10045 10037 + 10045 10038 10037 + 10046 10041 9705 + 10041 10046 10047 + 10047 10042 10041 + 10048 10042 10047 + 10042 10048 10049 + 10049 10043 10042 + 10043 10049 10050 + 10050 10044 10043 + 10046 9705 10051 + 10051 10052 10046 + 10046 10052 10053 + 10053 10047 10046 + 10054 10047 10053 + 10048 10047 10054 + 9704 10051 9705 + 10055 10051 9704 + 10055 10052 10051 + 10052 10055 10056 + 10056 10053 10052 + 10057 10053 10056 + 10053 10057 10054 + 10058 10054 10057 + 10048 10054 10058 + 9704 10059 10055 + 10056 10055 10059 + 10060 10056 10059 + 10061 10056 10060 + 10056 10061 10057 + 10057 10061 10062 + 10062 10063 10057 + 10057 10063 10058 + 9703 10059 9704 + 10059 9703 9323 + 9323 9322 10059 + 10059 9322 10060 + 9322 10064 10060 + 10065 10060 10064 + 10066 10060 10065 + 10060 10066 10061 + 10062 10061 10066 + 10066 10067 10062 + 10068 10062 10067 + 10068 10063 10062 + 9321 10064 9322 + 9328 10064 9321 + 10064 9328 10065 + 9332 10065 9328 + 10069 10065 9332 + 10065 10069 10066 + 10066 10069 10070 + 10070 10067 10066 + 10071 10067 10070 + 10067 10071 10068 + 10068 10071 10072 + 10073 10068 10072 + 10063 10068 10073 + 10073 10058 10063 + 9332 9337 10069 + 10070 10069 9337 + 9337 10074 10070 + 10071 10070 10074 + 10074 10075 10071 + 10071 10075 10072 + 9342 10074 9337 + 10074 9342 10076 + 10076 10075 10074 + 10075 10076 10077 + 10077 10072 10075 + 10076 9342 10078 + 10078 10079 10076 + 10076 10079 10080 + 10080 10077 10076 + 10081 10077 10080 + 10072 10077 10081 + 9341 10078 9342 + 9358 10078 9341 + 10079 10078 9358 + 10079 9358 10082 + 10082 10080 10079 + 10080 10082 10083 + 10083 10084 10080 + 10080 10084 10081 + 10085 10081 10084 + 10086 10081 10085 + 10081 10086 10072 + 9357 10082 9358 + 10083 10082 9357 + 9357 9362 10083 + 10087 10083 9362 + 10084 10083 10087 + 10087 10088 10084 + 10084 10088 10085 + 10089 10085 10088 + 10085 10089 10090 + 10085 10090 10086 + 9362 9366 10087 + 10091 10087 9366 + 10088 10087 10091 + 10091 10092 10088 + 10088 10092 10089 + 10093 10089 10092 + 10090 10089 10093 + 10093 10094 10090 + 10086 10090 10094 + 10094 10095 10086 + 10072 10086 10095 + 9366 10096 10091 + 10097 10091 10096 + 10092 10091 10097 + 10097 10098 10092 + 10092 10098 10099 + 10099 10100 10092 + 10100 10093 10092 + 9365 10096 9366 + 10096 9365 9371 + 9371 10101 10096 + 10096 10101 10097 + 10102 10097 10101 + 10097 10102 10103 + 10103 10098 10097 + 10098 10103 10104 + 10104 10099 10098 + 10105 10101 9371 + 10101 10105 10102 + 10102 10105 10106 + 10106 10107 10102 + 10103 10102 10107 + 10107 10108 10103 + 10104 10103 10108 + 9371 10109 10105 + 10105 10109 10110 + 10110 10106 10105 + 9900 10106 10110 + 10106 9900 9905 + 9905 10107 10106 + 10107 9905 9910 + 9910 10108 10107 + 10109 9371 9370 + 9370 10111 10109 + 10110 10109 10111 + 10111 10112 10110 + 9895 10110 10112 + 10110 9895 9900 + 9370 9375 10111 + 10111 9375 10113 + 10113 10112 10111 + 9890 10112 10113 + 10112 9890 9895 + 9379 10113 9375 + 9881 10113 9379 + 10113 9881 9890 + 10039 10038 10040 + 10038 10045 10040 + 10114 10040 10045 + 10040 10114 10115 + 10115 10116 10040 + 10040 10116 10024 + 10117 10024 10116 + 10024 10117 10025 + 10045 10118 10114 + 10114 10118 10119 + 10119 10120 10114 + 10121 10114 10120 + 10121 10115 10114 + 10118 10045 10044 + 10044 10050 10118 + 10119 10118 10050 + 10050 10122 10119 + 10123 10119 10122 + 10120 10119 10123 + 10123 10124 10120 + 10120 10124 10125 + 10125 10121 10120 + 10126 10122 10050 + 10122 10126 10127 + 10127 10128 10122 + 10122 10128 10123 + 10050 10049 10126 + 10126 10049 10048 + 10048 10129 10126 + 10127 10126 10129 + 10129 10130 10127 + 10131 10127 10130 + 10128 10127 10131 + 10131 10132 10128 + 10128 10132 10133 + 10123 10128 10133 + 10058 10129 10048 + 10129 10058 10073 + 10073 10130 10129 + 10130 10073 10134 + 10134 10135 10130 + 10130 10135 10131 + 10136 10131 10135 + 10131 10136 10137 + 10137 10132 10131 + 10132 10137 10138 + 10138 10133 10132 + 10072 10134 10073 + 10095 10134 10072 + 10135 10134 10095 + 10095 10139 10135 + 10135 10139 10136 + 10136 10139 10140 + 10140 10141 10136 + 10137 10136 10141 + 10141 10142 10137 + 10138 10137 10142 + 10139 10095 10094 + 10094 10140 10139 + 10094 10093 10140 + 10140 10093 10100 + 10100 10141 10140 + 10142 10141 10100 + 10100 10143 10142 + 10142 10143 10144 + 10144 10145 10142 + 10142 10145 10138 + 10146 10138 10145 + 10133 10138 10146 + 10143 10100 10099 + 10099 10147 10143 + 10144 10143 10147 + 10148 10144 10147 + 10149 10144 10148 + 10145 10144 10149 + 10145 10149 10146 + 10146 10149 10150 + 10150 10151 10146 + 10133 10146 10151 + 10152 10147 10099 + 10147 10152 10153 + 10153 10154 10147 + 10147 10154 10148 + 10099 10104 10152 + 10152 10104 10155 + 10155 10156 10152 + 10153 10152 10156 + 10156 10157 10153 + 10158 10153 10157 + 10154 10153 10158 + 10108 10155 10104 + 10159 10155 10108 + 10155 10159 10160 + 10160 10156 10155 + 10156 10160 10161 + 10161 10157 10156 + 10157 10161 10162 + 10162 10163 10157 + 10157 10163 10158 + 10108 9910 10159 + 10159 9910 9909 + 9909 9915 10159 + 10160 10159 9915 + 9915 9920 10160 + 10161 10160 9920 + 9920 9925 10161 + 10162 10161 9925 + 9925 10164 10162 + 10165 10162 10164 + 10163 10162 10165 + 10165 10166 10163 + 10163 10166 10167 + 10167 10158 10163 + 10168 10158 10167 + 10158 10168 10154 + 9924 10164 9925 + 10164 9924 9930 + 9930 10169 10164 + 10164 10169 10165 + 10170 10165 10169 + 10166 10165 10170 + 10170 10171 10166 + 10166 10171 10172 + 10172 10167 10166 + 10173 10167 10172 + 10167 10173 10168 + 10169 9930 9935 + 9935 10174 10169 + 10169 10174 10170 + 10175 10170 10174 + 10171 10170 10175 + 10175 10176 10171 + 10171 10176 10177 + 10177 10172 10171 + 10178 10172 10177 + 10172 10178 10173 + 10174 9935 10179 + 10179 10180 10174 + 10174 10180 10175 + 10181 10175 10180 + 10176 10175 10181 + 10181 10182 10176 + 10176 10182 10183 + 10183 10177 10176 + 10179 9935 9934 + 9934 9940 10179 + 10184 10179 9940 + 10180 10179 10184 + 10184 10185 10180 + 10180 10185 10181 + 10181 10185 10186 + 10186 10187 10181 + 10182 10181 10187 + 10187 10188 10182 + 10183 10182 10188 + 9940 10189 10184 + 10184 10189 10190 + 10190 10191 10184 + 10185 10184 10191 + 10191 10186 10185 + 9939 10189 9940 + 10189 9939 10192 + 10192 10190 10189 + 10190 10192 10193 + 10193 10194 10190 + 10190 10194 10195 + 10195 10191 10190 + 10186 10191 10195 + 10196 10192 9939 + 10193 10192 10196 + 10196 10197 10193 + 10193 10197 10198 + 10198 10199 10193 + 10194 10193 10199 + 10199 10200 10194 + 10195 10194 10200 + 9939 9944 10196 + 9949 10196 9944 + 10196 9949 10201 + 10201 10197 10196 + 10197 10201 10202 + 10202 10198 10197 + 10198 10202 10203 + 10203 10204 10198 + 10198 10204 10205 + 10205 10199 10198 + 10200 10199 10205 + 10201 9949 9948 + 9948 10206 10201 + 10201 10206 10207 + 10207 10202 10201 + 10203 10202 10207 + 10207 10208 10203 + 10203 10208 10209 + 10209 10210 10203 + 10204 10203 10210 + 10211 10206 9948 + 10206 10211 10212 + 10212 10207 10206 + 10207 10212 10213 + 10213 10208 10207 + 10208 10213 10214 + 10214 10209 10208 + 9948 9953 10211 + 10211 9953 9952 + 9952 10215 10211 + 10211 10215 10216 + 10216 10212 10211 + 10213 10212 10216 + 10216 10217 10213 + 10213 10217 10218 + 10218 10214 10213 + 10219 10214 10218 + 10209 10214 10219 + 9961 10215 9952 + 10215 9961 10220 + 10220 10216 10215 + 10216 10220 10221 + 10221 10217 10216 + 10217 10221 10222 + 10222 10218 10217 + 10218 10222 10223 + 10223 10224 10218 + 10218 10224 10219 + 10220 9961 9960 + 9960 10225 10220 + 10221 10220 10225 + 10225 10226 10221 + 10222 10221 10226 + 10226 10227 10222 + 10223 10222 10227 + 10227 10228 10223 + 10229 10223 10228 + 10224 10223 10229 + 9969 10225 9960 + 10226 10225 9969 + 9969 10230 10226 + 10226 10230 10231 + 10231 10227 10226 + 10228 10227 10231 + 10231 10232 10228 + 10228 10232 10233 + 10233 10234 10228 + 10228 10234 10229 + 10230 9969 9968 + 9968 10235 10230 + 10230 10235 10236 + 10236 10231 10230 + 10232 10231 10236 + 10236 10237 10232 + 10232 10237 10238 + 10238 10233 10232 + 10239 10235 9968 + 10235 10239 10240 + 10240 10236 10235 + 10236 10240 10241 + 10241 10237 10236 + 10237 10241 10242 + 10242 10238 10237 + 9968 9973 10239 + 10239 9973 9972 + 9972 10243 10239 + 10239 10243 10244 + 10244 10240 10239 + 10241 10240 10244 + 10244 10245 10241 + 10241 10245 10246 + 10246 10242 10241 + 10247 10242 10246 + 10238 10242 10247 + 9980 10243 9972 + 10243 9980 10248 + 10248 10244 10243 + 10244 10248 10249 + 10249 10245 10244 + 10245 10249 10250 + 10250 10246 10245 + 10246 10250 10251 + 10251 10252 10246 + 10246 10252 10247 + 10253 10248 9980 + 10249 10248 10253 + 10253 10254 10249 + 10249 10254 10255 + 10255 10250 10249 + 10251 10250 10255 + 9980 9985 10253 + 10256 10253 9985 + 10253 10256 10257 + 10257 10254 10253 + 10254 10257 10258 + 10258 10255 10254 + 10255 10258 10259 + 10259 10260 10255 + 10255 10260 10251 + 9985 9984 10256 + 10256 9984 10261 + 10262 10256 10261 + 10257 10256 10262 + 10262 10263 10257 + 10258 10257 10263 + 10263 10264 10258 + 10264 10265 10258 + 10259 10258 10265 + 9989 10261 9984 + 10261 9989 10266 + 10266 10267 10261 + 10261 10267 10268 + 10268 10269 10261 + 10261 10269 10262 + 10270 10262 10269 + 10263 10262 10270 + 10266 9989 10271 + 10271 10272 10266 + 10273 10266 10272 + 10267 10266 10273 + 10273 10274 10267 + 10267 10274 10275 + 10275 10268 10267 + 10276 10271 9989 + 10277 10271 10276 + 10272 10271 10277 + 10278 10272 10277 + 10272 10278 10273 + 10279 10273 10278 + 10273 10279 10280 + 10280 10274 10273 + 10281 10276 9989 + 10282 10276 10281 + 10283 10276 10282 + 10276 10283 10277 + 10284 10277 10283 + 10284 10278 10277 + 10285 10278 10284 + 10278 10285 10279 + 9988 10281 9989 + 10286 10281 9988 + 10287 10281 10286 + 10281 10287 10282 + 10288 10282 10287 + 10283 10282 10288 + 10288 10289 10283 + 10283 10289 10284 + 10290 10284 10289 + 10284 10290 10285 + 9988 10291 10286 + 10292 10286 10291 + 10287 10286 10292 + 10292 10293 10287 + 10287 10293 10288 + 10294 10288 10293 + 10288 10294 10295 + 10295 10289 10288 + 10289 10295 10290 + 9993 10291 9988 + 10291 9993 10296 + 10296 10297 10291 + 10291 10297 10292 + 10297 10298 10292 + 10299 10292 10298 + 10292 10299 10300 + 10300 10293 10292 + 10293 10300 10294 + 10296 9993 9992 + 9992 10301 10296 + 10302 10296 10301 + 10302 10297 10296 + 10297 10302 10298 + 10302 10303 10298 + 10303 10304 10298 + 10298 10304 10299 + 10305 10299 10304 + 10300 10299 10305 + 9997 10301 9992 + 10306 10301 9997 + 10301 10306 10302 + 10303 10302 10306 + 10307 10303 10306 + 10304 10303 10307 + 10307 10308 10304 + 10304 10308 10305 + 9997 10001 10306 + 10306 10001 10006 + 10006 10309 10306 + 10306 10309 10310 + 10310 10307 10306 + 10307 10310 10311 + 10312 10307 10311 + 10312 10313 10307 + 10011 10309 10006 + 10309 10011 10314 + 10314 10315 10309 + 10309 10315 10310 + 10316 10310 10315 + 10311 10310 10316 + 10314 10011 10009 + 10009 10317 10314 + 10317 10318 10314 + 10318 10319 10314 + 10319 10320 10314 + 10320 10321 10314 + 10321 10322 10314 + 10314 10322 10315 + 10011 10010 10009 + 10315 10322 10316 + 10323 10316 10322 + 10311 10316 10323 + 10324 10323 10322 + 10325 10323 10324 + 10326 10323 10325 + 10323 10326 10311 + 10322 10321 10324 + 10321 10327 10324 + 10328 10324 10327 + 10324 10328 10329 + 10329 10330 10324 + 10324 10330 10325 + 10331 10325 10330 + 10326 10325 10331 + 10321 10332 10327 + 10332 10333 10327 + 10334 10327 10333 + 10327 10334 10328 + 10328 10334 10335 + 10335 10336 10328 + 10329 10328 10336 + 10320 10332 10321 + 10332 10320 10319 + 10319 10337 10332 + 10332 10337 10338 + 10333 10332 10338 + 10339 10333 10338 + 10333 10339 10334 + 10334 10339 10340 + 10340 10335 10334 + 10319 10341 10337 + 10337 10341 10342 + 10337 10342 10338 + 10343 10338 10342 + 10344 10338 10343 + 10338 10344 10339 + 10339 10344 10345 + 10345 10340 10339 + 10346 10341 10319 + 10347 10341 10346 + 10341 10347 10342 + 10342 10347 10348 + 10342 10348 10343 + 10343 10348 10349 + 10350 10343 10349 + 10344 10343 10350 + 10350 10345 10344 + 10318 10346 10319 + 10318 10351 10346 + 10346 10351 10352 + 10352 10353 10346 + 10346 10353 10347 + 10348 10347 10353 + 10353 10349 10348 + 10351 10318 10317 + 10317 10354 10351 + 10351 10354 10355 + 10352 10351 10355 + 10355 10356 10352 + 10356 10357 10352 + 10352 10357 10349 + 10349 10353 10352 + 10317 10358 10354 + 10354 10358 10359 + 10359 10355 10354 + 10355 10359 10360 + 10356 10355 10360 + 10358 10317 10009 + 10009 10361 10358 + 10358 10361 10362 + 10363 10358 10362 + 10363 10359 10358 + 10360 10359 10363 + 10009 10008 10361 + 10361 10008 10362 + 10008 10018 10362 + 10362 10018 10017 + 10364 10362 10017 + 10362 10364 10363 + 10364 10365 10363 + 10365 10366 10363 + 10367 10363 10366 + 10363 10367 10360 + 10368 10364 10017 + 10365 10364 10368 + 10365 10368 10369 + 10366 10365 10369 + 10370 10366 10369 + 10371 10366 10370 + 10366 10371 10367 + 10367 10371 10372 + 10372 10360 10367 + 10373 10368 10017 + 10368 10373 10369 + 10374 10369 10373 + 10369 10374 10370 + 10374 10375 10370 + 10376 10370 10375 + 10370 10376 10371 + 10377 10373 10017 + 10374 10373 10377 + 10377 10378 10374 + 10374 10378 10379 + 10379 10375 10374 + 10375 10379 10380 + 10381 10375 10380 + 10375 10381 10376 + 10025 10377 10017 + 10377 10025 10117 + 10382 10377 10117 + 10382 10378 10377 + 10378 10382 10383 + 10383 10379 10378 + 10380 10379 10383 + 10384 10380 10383 + 10380 10384 10385 + 10385 10386 10380 + 10386 10381 10380 + 10382 10117 10387 + 10387 10388 10382 + 10388 10383 10382 + 10388 10384 10383 + 10384 10388 10389 + 10384 10389 10390 + 10390 10391 10384 + 10384 10391 10385 + 10116 10387 10117 + 10387 10116 10115 + 10392 10387 10115 + 10388 10387 10392 + 10389 10388 10392 + 10390 10389 10392 + 10392 10393 10390 + 10394 10390 10393 + 10391 10390 10394 + 10394 10395 10391 + 10391 10395 10396 + 10396 10385 10391 + 10392 10115 10121 + 10121 10393 10392 + 10125 10393 10121 + 10393 10125 10394 + 10394 10125 10124 + 10124 10397 10394 + 10397 10398 10394 + 10395 10394 10398 + 10398 10399 10395 + 10396 10395 10399 + 10399 10400 10396 + 10401 10396 10400 + 10401 10385 10396 + 10402 10397 10124 + 10403 10397 10402 + 10397 10403 10404 + 10404 10398 10397 + 10398 10404 10405 + 10405 10399 10398 + 10399 10405 10406 + 10406 10400 10399 + 10124 10123 10402 + 10407 10402 10123 + 10408 10402 10407 + 10402 10408 10403 + 10403 10408 10409 + 10409 10410 10403 + 10404 10403 10410 + 10410 10411 10404 + 10405 10404 10411 + 10133 10407 10123 + 10151 10407 10133 + 10407 10151 10412 + 10407 10412 10408 + 10408 10412 10413 + 10413 10409 10408 + 10414 10409 10413 + 10409 10414 10410 + 10410 10414 10415 + 10415 10411 10410 + 10416 10411 10415 + 10411 10416 10405 + 10406 10405 10416 + 10412 10151 10150 + 10150 10413 10412 + 10413 10150 10148 + 10413 10148 10414 + 10415 10414 10148 + 10154 10415 10148 + 10417 10415 10154 + 10415 10417 10416 + 10416 10417 10418 + 10418 10419 10416 + 10416 10419 10406 + 10148 10150 10149 + 10154 10168 10417 + 10417 10168 10173 + 10173 10420 10417 + 10420 10418 10417 + 10421 10418 10420 + 10419 10418 10421 + 10419 10421 10422 + 10422 10406 10419 + 10400 10406 10422 + 10423 10420 10173 + 10420 10423 10424 + 10424 10425 10420 + 10420 10425 10421 + 10421 10425 10426 + 10426 10422 10421 + 10427 10422 10426 + 10422 10427 10400 + 10400 10427 10401 + 10173 10178 10423 + 10423 10178 10428 + 10428 10429 10423 + 10424 10423 10429 + 10429 10430 10424 + 10424 10430 10431 + 10431 10432 10424 + 10425 10424 10432 + 10432 10426 10425 + 10177 10428 10178 + 10428 10177 10183 + 10183 10433 10428 + 10428 10433 10434 + 10434 10429 10428 + 10429 10434 10435 + 10435 10430 10429 + 10430 10435 10436 + 10436 10431 10430 + 10433 10183 10437 + 10437 10438 10433 + 10433 10438 10439 + 10434 10433 10439 + 10439 10440 10434 + 10435 10434 10440 + 10440 10441 10435 + 10436 10435 10441 + 10188 10437 10183 + 10442 10437 10188 + 10438 10437 10442 + 10442 10443 10438 + 10438 10443 10444 + 10444 10439 10438 + 10188 10445 10442 + 10442 10445 10446 + 10446 10447 10442 + 10443 10442 10447 + 10448 10445 10188 + 10445 10448 10449 + 10449 10446 10445 + 10446 10449 10450 + 10450 10451 10446 + 10446 10451 10452 + 10452 10447 10446 + 10188 10187 10448 + 10448 10187 10186 + 10186 10453 10448 + 10448 10453 10454 + 10454 10449 10448 + 10450 10449 10454 + 10454 10455 10450 + 10450 10455 10456 + 10456 10457 10450 + 10451 10450 10457 + 10195 10453 10186 + 10453 10195 10458 + 10458 10454 10453 + 10454 10458 10459 + 10459 10455 10454 + 10455 10459 10460 + 10460 10456 10455 + 10200 10458 10195 + 10459 10458 10200 + 10200 10461 10459 + 10459 10461 10462 + 10462 10460 10459 + 10463 10460 10462 + 10456 10460 10463 + 10463 10464 10456 + 10456 10464 10465 + 10465 10457 10456 + 10205 10461 10200 + 10461 10205 10466 + 10466 10462 10461 + 10462 10466 10467 + 10467 10468 10462 + 10462 10468 10463 + 10463 10468 10469 + 10469 10470 10463 + 10464 10463 10470 + 10471 10466 10205 + 10467 10466 10471 + 10471 10472 10467 + 10467 10472 10473 + 10473 10474 10467 + 10468 10467 10474 + 10474 10469 10468 + 10205 10204 10471 + 10210 10471 10204 + 10471 10210 10475 + 10475 10472 10471 + 10472 10475 10476 + 10476 10473 10472 + 10473 10476 10477 + 10477 10478 10473 + 10473 10478 10479 + 10479 10474 10473 + 10469 10474 10479 + 10475 10210 10209 + 10209 10480 10475 + 10475 10480 10481 + 10481 10476 10475 + 10477 10476 10481 + 10481 10482 10477 + 10477 10482 10483 + 10483 10484 10477 + 10478 10477 10484 + 10219 10480 10209 + 10480 10219 10485 + 10485 10481 10480 + 10481 10485 10486 + 10486 10482 10481 + 10482 10486 10487 + 10487 10483 10482 + 10488 10485 10219 + 10486 10485 10488 + 10488 10489 10486 + 10486 10489 10490 + 10490 10487 10486 + 10491 10487 10490 + 10483 10487 10491 + 10219 10224 10488 + 10229 10488 10224 + 10488 10229 10492 + 10492 10489 10488 + 10489 10492 10493 + 10493 10490 10489 + 10490 10493 10494 + 10494 10495 10490 + 10490 10495 10491 + 10492 10229 10234 + 10234 10496 10492 + 10493 10492 10496 + 10496 10497 10493 + 10494 10493 10497 + 10497 10498 10494 + 10499 10494 10498 + 10495 10494 10499 + 10499 10500 10495 + 10491 10495 10500 + 10496 10234 10233 + 10233 10501 10496 + 10496 10501 10502 + 10502 10497 10496 + 10498 10497 10502 + 10502 10503 10498 + 10498 10503 10504 + 10504 10505 10498 + 10498 10505 10499 + 10501 10233 10238 + 10238 10506 10501 + 10501 10506 10507 + 10507 10502 10501 + 10503 10502 10507 + 10507 10508 10503 + 10503 10508 10509 + 10509 10504 10503 + 10247 10506 10238 + 10506 10247 10510 + 10510 10507 10506 + 10507 10510 10511 + 10511 10508 10507 + 10508 10511 10512 + 10512 10509 10508 + 10513 10510 10247 + 10511 10510 10513 + 10513 10514 10511 + 10511 10514 10515 + 10515 10512 10511 + 10516 10512 10515 + 10509 10512 10516 + 10247 10252 10513 + 10517 10513 10252 + 10513 10517 10518 + 10518 10514 10513 + 10514 10518 10519 + 10519 10515 10514 + 10515 10519 10520 + 10520 10521 10515 + 10515 10521 10516 + 10252 10251 10517 + 10522 10517 10251 + 10518 10517 10522 + 10522 10523 10518 + 10518 10523 10524 + 10524 10519 10518 + 10520 10519 10524 + 10251 10260 10522 + 10525 10522 10260 + 10522 10525 10526 + 10526 10523 10522 + 10523 10526 10527 + 10527 10524 10523 + 10524 10527 10528 + 10528 10529 10524 + 10524 10529 10520 + 10260 10259 10525 + 10525 10259 10530 + 10531 10525 10530 + 10526 10525 10531 + 10531 10532 10526 + 10527 10526 10532 + 10532 10533 10527 + 10533 10534 10527 + 10528 10527 10534 + 10265 10530 10259 + 10530 10265 10535 + 10535 10536 10530 + 10530 10536 10537 + 10537 10538 10530 + 10530 10538 10531 + 10539 10531 10538 + 10532 10531 10539 + 10535 10265 10264 + 10264 10540 10535 + 10541 10535 10540 + 10536 10535 10541 + 10541 10542 10536 + 10536 10542 10543 + 10543 10537 10536 + 10543 10544 10537 + 10544 10545 10537 + 10540 10264 10546 + 10540 10546 10547 + 10547 10548 10540 + 10540 10548 10541 + 10549 10541 10548 + 10541 10549 10550 + 10550 10542 10541 + 10546 10264 10263 + 10263 10551 10546 + 10547 10546 10551 + 10552 10547 10551 + 10553 10547 10552 + 10547 10553 10548 + 10548 10553 10549 + 10270 10551 10263 + 10551 10270 10554 + 10554 10555 10551 + 10551 10555 10552 + 10556 10552 10555 + 10552 10556 10557 + 10552 10557 10553 + 10549 10553 10557 + 10554 10270 10558 + 10558 10559 10554 + 10560 10554 10559 + 10554 10560 10561 + 10561 10555 10554 + 10555 10561 10556 + 10269 10558 10270 + 10558 10269 10268 + 10558 10268 10275 + 10275 10559 10558 + 10562 10559 10275 + 10559 10562 10560 + 10563 10560 10562 + 10561 10560 10563 + 10563 10564 10561 + 10561 10564 10556 + 10564 10565 10556 + 10565 10566 10556 + 10566 10557 10556 + 10557 10566 10549 + 10275 10567 10562 + 10562 10567 10568 + 10568 10569 10562 + 10562 10569 10570 + 10570 10571 10562 + 10571 10563 10562 + 10567 10275 10274 + 10274 10280 10567 + 10568 10567 10280 + 10280 10572 10568 + 10573 10568 10572 + 10573 10569 10568 + 10569 10573 10574 + 10574 10570 10569 + 10574 10575 10570 + 10570 10575 10576 + 10576 10571 10570 + 10577 10572 10280 + 10578 10572 10577 + 10572 10578 10573 + 10573 10578 10579 + 10574 10573 10579 + 10580 10574 10579 + 10575 10574 10580 + 10280 10279 10577 + 10577 10279 10285 + 10285 10581 10577 + 10577 10581 10582 + 10578 10577 10582 + 10578 10582 10579 + 10583 10581 10285 + 10285 10290 10583 + 10583 10290 10295 + 10584 10583 10295 + 10582 10583 10584 + 10582 10585 10583 + 10295 10586 10584 + 10586 10587 10584 + 10588 10584 10587 + 10579 10584 10588 + 10584 10579 10582 + 10589 10586 10295 + 10590 10586 10589 + 10586 10590 10591 + 10591 10587 10586 + 10591 10592 10587 + 10587 10592 10588 + 10593 10588 10592 + 10579 10588 10593 + 10295 10294 10589 + 10589 10294 10300 + 10300 10594 10589 + 10590 10589 10594 + 10594 10595 10590 + 10590 10595 10311 + 10591 10590 10311 + 10596 10591 10311 + 10592 10591 10596 + 10305 10594 10300 + 10595 10594 10305 + 10595 10305 10312 + 10595 10312 10311 + 10305 10308 10312 + 10311 10326 10596 + 10326 10597 10596 + 10597 10598 10596 + 10599 10596 10598 + 10596 10599 10600 + 10596 10600 10592 + 10592 10600 10601 + 10601 10593 10592 + 10331 10597 10326 + 10597 10331 10602 + 10597 10602 10603 + 10603 10598 10597 + 10598 10603 10604 + 10598 10604 10599 + 10605 10599 10604 + 10600 10599 10605 + 10605 10606 10600 + 10600 10606 10601 + 10602 10331 10607 + 10607 10608 10602 + 10603 10602 10608 + 10609 10603 10608 + 10604 10603 10609 + 10609 10610 10604 + 10604 10610 10605 + 10607 10331 10330 + 10611 10607 10330 + 10608 10607 10611 + 10612 10608 10611 + 10608 10612 10613 + 10613 10609 10608 + 10609 10613 10614 + 10614 10610 10609 + 10610 10614 10615 + 10615 10605 10610 + 10330 10329 10611 + 10611 10329 10616 + 10616 10617 10611 + 10612 10611 10617 + 10617 10618 10612 + 10613 10612 10618 + 10618 10619 10613 + 10614 10613 10619 + 10619 10620 10614 + 10615 10614 10620 + 10336 10616 10329 + 10616 10336 10621 + 10621 10622 10616 + 10616 10622 10623 + 10623 10617 10616 + 10618 10617 10623 + 10623 10624 10618 + 10618 10624 10625 + 10625 10619 10618 + 10620 10619 10625 + 10621 10336 10335 + 10335 10626 10621 + 10621 10626 10627 + 10628 10621 10627 + 10622 10621 10628 + 10628 10629 10622 + 10622 10629 10630 + 10623 10622 10630 + 10335 10340 10626 + 10626 10340 10345 + 10345 10627 10626 + 10631 10627 10345 + 10627 10631 10632 + 10632 10633 10627 + 10627 10633 10628 + 10634 10628 10633 + 10628 10634 10635 + 10635 10629 10628 + 10345 10350 10631 + 10631 10350 10636 + 10636 10637 10631 + 10632 10631 10637 + 10637 10638 10632 + 10639 10632 10638 + 10632 10639 10640 + 10640 10633 10632 + 10633 10640 10634 + 10636 10350 10349 + 10349 10641 10636 + 10642 10636 10641 + 10637 10636 10642 + 10637 10642 10643 + 10643 10638 10637 + 10644 10638 10643 + 10638 10644 10639 + 10645 10639 10644 + 10640 10639 10645 + 10646 10641 10349 + 10641 10646 10647 + 10641 10647 10642 + 10642 10647 10648 + 10648 10643 10642 + 10649 10643 10648 + 10643 10649 10644 + 10349 10357 10646 + 10646 10357 10356 + 10646 10356 10650 + 10647 10646 10650 + 10650 10651 10647 + 10647 10651 10648 + 10652 10648 10651 + 10436 10648 10652 + 10648 10436 10649 + 10441 10649 10436 + 10644 10649 10441 + 10653 10650 10356 + 10650 10653 10654 + 10654 10651 10650 + 10651 10654 10652 + 10652 10654 10655 + 10655 10656 10652 + 10431 10652 10656 + 10652 10431 10436 + 10356 10360 10653 + 10372 10653 10360 + 10654 10653 10372 + 10372 10655 10654 + 10657 10655 10372 + 10655 10657 10658 + 10658 10656 10655 + 10432 10656 10658 + 10656 10432 10431 + 10372 10659 10657 + 10657 10659 10660 + 10657 10660 10401 + 10658 10657 10401 + 10401 10427 10658 + 10426 10658 10427 + 10658 10426 10432 + 10371 10659 10372 + 10661 10659 10371 + 10659 10661 10660 + 10660 10661 10386 + 10660 10386 10385 + 10385 10401 10660 + 10371 10376 10661 + 10376 10381 10661 + 10381 10386 10661 + 10662 10538 10537 + 10538 10662 10539 + 10663 10539 10662 + 10664 10539 10663 + 10539 10664 10532 + 10532 10664 10665 + 10665 10533 10532 + 10662 10666 10663 + 10666 10667 10663 + 10668 10663 10667 + 10663 10668 10669 + 10663 10669 10664 + 10664 10669 10670 + 10670 10665 10664 + 10671 10666 10662 + 10672 10666 10671 + 10666 10672 10673 + 10673 10667 10666 + 10673 10674 10667 + 10667 10674 10668 + 10662 10545 10671 + 10545 10544 10671 + 10671 10544 10675 + 10676 10671 10675 + 10671 10676 10672 + 10672 10676 10677 + 10677 10678 10672 + 10673 10672 10678 + 10678 10679 10673 + 10674 10673 10679 + 10675 10544 10543 + 10675 10543 10542 + 10542 10550 10675 + 10676 10675 10550 + 10677 10676 10550 + 10680 10677 10550 + 10681 10677 10680 + 10681 10678 10677 + 10679 10678 10681 + 10682 10679 10681 + 10682 10683 10679 + 10679 10683 10674 + 10674 10683 10668 + 10684 10680 10550 + 10685 10680 10684 + 10686 10680 10685 + 10680 10686 10681 + 10682 10681 10686 + 10687 10682 10686 + 10683 10682 10687 + 10687 10688 10683 + 10683 10688 10668 + 10550 10689 10684 + 10690 10684 10689 + 10690 10691 10684 + 10684 10691 10685 + 10685 10691 10692 + 10692 10693 10685 + 10686 10685 10693 + 10694 10689 10550 + 10695 10689 10694 + 10689 10695 10690 + 10690 10695 10696 + 10697 10690 10696 + 10691 10690 10697 + 10697 10698 10691 + 10691 10698 10692 + 10550 10549 10694 + 10566 10694 10549 + 10695 10694 10566 + 10566 10699 10695 + 10695 10699 10696 + 10699 10566 10565 + 10699 10565 10700 + 10699 10700 10696 + 10565 10564 10700 + 10700 10564 10563 + 10700 10563 10571 + 10571 10696 10700 + 10696 10571 10576 + 10696 10576 10701 + 10701 10702 10696 + 10696 10702 10703 + 10703 10697 10696 + 10704 10697 10703 + 10697 10704 10698 + 10705 10701 10576 + 10706 10701 10705 + 10702 10701 10706 + 10702 10706 10707 + 10707 10708 10702 + 10702 10708 10703 + 10576 10575 10705 + 10575 10709 10705 + 10710 10705 10709 + 10705 10710 10711 + 10711 10712 10705 + 10705 10712 10706 + 10707 10706 10712 + 10580 10709 10575 + 10580 10713 10709 + 10709 10713 10710 + 10710 10713 10714 + 10714 10715 10710 + 10715 10716 10710 + 10711 10710 10716 + 10713 10580 10717 + 10717 10714 10713 + 10717 10718 10714 + 10714 10718 10719 + 10719 10715 10714 + 10720 10715 10719 + 10715 10720 10721 + 10721 10716 10715 + 10717 10580 10579 + 10579 10722 10717 + 10722 10723 10717 + 10718 10717 10723 + 10723 10724 10718 + 10719 10718 10724 + 10724 10725 10719 + 10726 10719 10725 + 10719 10726 10720 + 10593 10722 10579 + 10722 10593 10727 + 10722 10727 10728 + 10728 10723 10722 + 10723 10728 10724 + 10724 10728 10729 + 10729 10725 10724 + 10730 10725 10729 + 10725 10730 10726 + 10727 10593 10601 + 10601 10731 10727 + 10728 10727 10731 + 10729 10728 10731 + 10732 10729 10731 + 10729 10732 10730 + 10730 10732 10733 + 10733 10734 10730 + 10726 10730 10734 + 10735 10726 10734 + 10720 10726 10735 + 10736 10731 10601 + 10731 10736 10732 + 10732 10736 10737 + 10737 10733 10732 + 10738 10733 10737 + 10734 10733 10738 + 10601 10739 10736 + 10736 10739 10740 + 10740 10737 10736 + 10737 10740 10741 + 10737 10741 10738 + 10742 10738 10741 + 10743 10738 10742 + 10738 10743 10734 + 10739 10601 10606 + 10606 10744 10739 + 10739 10744 10745 + 10745 10740 10739 + 10740 10745 10746 + 10741 10740 10746 + 10741 10746 10742 + 10744 10606 10605 + 10605 10615 10744 + 10744 10615 10747 + 10747 10745 10744 + 10745 10747 10746 + 10746 10747 10620 + 10620 10748 10746 + 10746 10748 10742 + 10620 10747 10615 + 10625 10748 10620 + 10748 10625 10749 + 10749 10750 10748 + 10748 10750 10742 + 10751 10742 10750 + 10752 10742 10751 + 10742 10752 10743 + 10753 10749 10625 + 10754 10749 10753 + 10750 10749 10754 + 10754 10755 10750 + 10750 10755 10751 + 10625 10624 10753 + 10756 10753 10624 + 10757 10753 10756 + 10753 10757 10754 + 10758 10754 10757 + 10755 10754 10758 + 10758 10759 10755 + 10751 10755 10759 + 10624 10623 10756 + 10630 10756 10623 + 10760 10756 10630 + 10756 10760 10757 + 10757 10760 10761 + 10761 10762 10757 + 10757 10762 10758 + 10763 10758 10762 + 10758 10763 10759 + 10630 10764 10760 + 10761 10760 10764 + 10764 10765 10761 + 10766 10761 10765 + 10762 10761 10766 + 10766 10767 10762 + 10762 10767 10763 + 10768 10763 10767 + 10759 10763 10768 + 10769 10764 10630 + 10764 10769 10770 + 10770 10765 10764 + 10770 10771 10765 + 10765 10771 10766 + 10766 10771 10772 + 10773 10766 10772 + 10767 10766 10773 + 10769 10630 10774 + 10774 10775 10769 + 10769 10775 10776 + 10776 10770 10769 + 10771 10770 10776 + 10776 10772 10771 + 10629 10774 10630 + 10777 10774 10629 + 10777 10775 10774 + 10775 10777 10778 + 10778 10776 10775 + 10772 10776 10778 + 10772 10778 10779 + 10779 10780 10772 + 10772 10780 10443 + 10443 10773 10772 + 10629 10635 10777 + 10778 10777 10635 + 10635 10779 10778 + 10781 10779 10635 + 10781 10780 10779 + 10780 10781 10782 + 10782 10444 10780 + 10780 10444 10443 + 10635 10634 10781 + 10781 10634 10640 + 10640 10782 10781 + 10645 10782 10640 + 10782 10645 10439 + 10439 10444 10782 + 10439 10645 10783 + 10783 10440 10439 + 10441 10440 10783 + 10441 10783 10644 + 10644 10783 10645 + 10447 10773 10443 + 10773 10447 10452 + 10452 10784 10773 + 10773 10784 10767 + 10767 10784 10785 + 10785 10768 10767 + 10784 10452 10786 + 10786 10787 10784 + 10784 10787 10785 + 10788 10786 10452 + 10789 10786 10788 + 10787 10786 10789 + 10789 10790 10787 + 10787 10790 10791 + 10791 10785 10787 + 10452 10451 10788 + 10457 10788 10451 + 10788 10457 10465 + 10465 10792 10788 + 10788 10792 10789 + 10789 10792 10793 + 10793 10794 10789 + 10790 10789 10794 + 10794 10795 10790 + 10790 10795 10796 + 10796 10791 10790 + 10792 10465 10797 + 10797 10793 10792 + 10793 10797 10798 + 10798 10799 10793 + 10793 10799 10800 + 10800 10794 10793 + 10795 10794 10800 + 10801 10797 10465 + 10798 10797 10801 + 10801 10802 10798 + 10798 10802 10803 + 10803 10804 10798 + 10799 10798 10804 + 10465 10464 10801 + 10470 10801 10464 + 10801 10470 10805 + 10805 10802 10801 + 10802 10805 10806 + 10806 10803 10802 + 10803 10806 10807 + 10807 10808 10803 + 10803 10808 10809 + 10809 10804 10803 + 10805 10470 10469 + 10469 10810 10805 + 10805 10810 10811 + 10811 10806 10805 + 10807 10806 10811 + 10811 10812 10807 + 10807 10812 10813 + 10813 10814 10807 + 10808 10807 10814 + 10479 10810 10469 + 10810 10479 10815 + 10815 10811 10810 + 10811 10815 10816 + 10816 10812 10811 + 10812 10816 10817 + 10817 10813 10812 + 10818 10815 10479 + 10816 10815 10818 + 10818 10819 10816 + 10816 10819 10820 + 10820 10817 10816 + 10821 10817 10820 + 10813 10817 10821 + 10479 10478 10818 + 10484 10818 10478 + 10818 10484 10822 + 10822 10819 10818 + 10819 10822 10823 + 10823 10820 10819 + 10820 10823 10824 + 10824 10825 10820 + 10820 10825 10821 + 10822 10484 10483 + 10483 10826 10822 + 10822 10826 10827 + 10827 10823 10822 + 10824 10823 10827 + 10827 10828 10824 + 10824 10828 10829 + 10829 10830 10824 + 10825 10824 10830 + 10491 10826 10483 + 10826 10491 10831 + 10831 10827 10826 + 10827 10831 10832 + 10832 10828 10827 + 10828 10832 10833 + 10833 10829 10828 + 10500 10831 10491 + 10832 10831 10500 + 10500 10834 10832 + 10832 10834 10835 + 10835 10833 10832 + 10836 10833 10835 + 10829 10833 10836 + 10836 10837 10829 + 10829 10837 10838 + 10838 10830 10829 + 10839 10834 10500 + 10834 10839 10840 + 10840 10835 10834 + 10835 10840 10841 + 10841 10842 10835 + 10835 10842 10836 + 10500 10499 10839 + 10839 10499 10505 + 10505 10843 10839 + 10840 10839 10843 + 10843 10844 10840 + 10841 10840 10844 + 10844 10845 10841 + 10846 10841 10845 + 10842 10841 10846 + 10846 10847 10842 + 10836 10842 10847 + 10843 10505 10504 + 10504 10848 10843 + 10843 10848 10849 + 10849 10844 10843 + 10845 10844 10849 + 10849 10850 10845 + 10845 10850 10851 + 10851 10852 10845 + 10845 10852 10846 + 10848 10504 10509 + 10509 10853 10848 + 10848 10853 10854 + 10854 10849 10848 + 10850 10849 10854 + 10854 10855 10850 + 10850 10855 10856 + 10856 10851 10850 + 10516 10853 10509 + 10853 10516 10857 + 10857 10854 10853 + 10854 10857 10858 + 10858 10855 10854 + 10855 10858 10859 + 10859 10856 10855 + 10860 10857 10516 + 10858 10857 10860 + 10860 10861 10858 + 10858 10861 10862 + 10862 10859 10858 + 10863 10859 10862 + 10856 10859 10863 + 10516 10521 10860 + 10864 10860 10521 + 10860 10864 10865 + 10865 10861 10860 + 10861 10865 10866 + 10866 10862 10861 + 10862 10866 10867 + 10867 10868 10862 + 10862 10868 10863 + 10521 10520 10864 + 10869 10864 10520 + 10865 10864 10869 + 10869 10870 10865 + 10865 10870 10871 + 10871 10866 10865 + 10867 10866 10871 + 10520 10529 10869 + 10872 10869 10529 + 10869 10872 10873 + 10873 10870 10869 + 10870 10873 10874 + 10874 10871 10870 + 10871 10874 10875 + 10875 10876 10871 + 10871 10876 10867 + 10529 10528 10872 + 10872 10528 10877 + 10877 10878 10872 + 10878 10879 10872 + 10873 10872 10879 + 10879 10880 10873 + 10874 10873 10880 + 10880 10881 10874 + 10875 10874 10881 + 10534 10877 10528 + 10877 10534 10882 + 10882 10883 10877 + 10877 10883 10884 + 10884 10878 10877 + 10885 10878 10884 + 10878 10885 10886 + 10886 10879 10878 + 10880 10879 10886 + 10882 10534 10533 + 10533 10887 10882 + 10888 10882 10887 + 10883 10882 10888 + 10888 10889 10883 + 10883 10889 10890 + 10890 10884 10883 + 10885 10884 10890 + 10887 10533 10665 + 10887 10665 10670 + 10670 10891 10887 + 10887 10891 10888 + 10892 10888 10891 + 10888 10892 10893 + 10893 10889 10888 + 10889 10893 10894 + 10894 10890 10889 + 10895 10891 10670 + 10891 10895 10892 + 10896 10892 10895 + 10893 10892 10896 + 10896 10897 10893 + 10893 10897 10898 + 10898 10899 10893 + 10899 10894 10893 + 10670 10900 10895 + 10895 10900 10901 + 10901 10902 10895 + 10895 10902 10896 + 10903 10896 10902 + 10903 10897 10896 + 10900 10670 10904 + 10904 10905 10900 + 10901 10900 10905 + 10905 10906 10901 + 10907 10901 10906 + 10907 10902 10901 + 10902 10907 10903 + 10669 10904 10670 + 10908 10904 10669 + 10908 10905 10904 + 10905 10908 10688 + 10688 10906 10905 + 10687 10906 10688 + 10906 10687 10907 + 10907 10687 10686 + 10903 10907 10686 + 10909 10903 10686 + 10897 10903 10909 + 10669 10668 10908 + 10688 10908 10668 + 9849 9409 9414 + 9414 9850 9849 + 9850 9414 10910 + 10910 10911 9850 + 9850 10911 9845 + 10912 9845 10911 + 9839 9845 10912 + 10912 9840 9839 + 10910 9414 9413 + 9413 9419 10910 + 10913 10910 9419 + 10911 10910 10913 + 10913 10914 10911 + 10911 10914 10912 + 10915 10912 10914 + 9840 10912 10915 + 10915 10916 9840 + 9840 10916 9835 + 9419 9424 10913 + 10917 10913 9424 + 10914 10913 10917 + 10917 10918 10914 + 10914 10918 10915 + 10919 10915 10918 + 10916 10915 10919 + 10919 10920 10916 + 10916 10920 10921 + 10921 9835 10916 + 9830 9835 10921 + 9424 10922 10917 + 10923 10917 10922 + 10918 10917 10923 + 10923 10924 10918 + 10918 10924 10919 + 10925 10919 10924 + 10920 10919 10925 + 9423 10922 9424 + 10922 9423 9429 + 9429 10926 10922 + 10922 10926 10923 + 10927 10923 10926 + 10924 10923 10927 + 10927 10928 10924 + 10924 10928 10925 + 10929 10925 10928 + 10930 10925 10929 + 10925 10930 10920 + 10926 9429 9434 + 9434 10931 10926 + 10926 10931 10927 + 10932 10927 10931 + 10928 10927 10932 + 10932 10933 10928 + 10928 10933 10929 + 10934 10929 10933 + 10935 10929 10934 + 10929 10935 10930 + 10931 9434 10936 + 10936 10937 10931 + 10931 10937 10932 + 10938 10932 10937 + 10933 10932 10938 + 10938 10939 10933 + 10933 10939 10934 + 10936 9434 9433 + 9433 10940 10936 + 10941 10936 10940 + 10937 10936 10941 + 10941 10942 10937 + 10937 10942 10938 + 10943 10938 10942 + 10939 10938 10943 + 9438 10940 9433 + 10940 9438 9443 + 9443 10944 10940 + 10940 10944 10941 + 10945 10941 10944 + 10942 10941 10945 + 10945 10946 10942 + 10942 10946 10943 + 10947 10943 10946 + 10948 10943 10947 + 10943 10948 10939 + 10944 9443 10949 + 10949 10950 10944 + 10944 10950 10945 + 10951 10945 10950 + 10946 10945 10951 + 10951 10952 10946 + 10946 10952 10947 + 10953 10949 9443 + 10954 10949 10953 + 10950 10949 10954 + 10954 10955 10950 + 10950 10955 10951 + 10956 10951 10955 + 10952 10951 10956 + 9443 9442 10953 + 10957 10953 9442 + 10953 10957 10958 + 10953 10958 10954 + 10959 10954 10958 + 10955 10954 10959 + 10959 10960 10955 + 10955 10960 10956 + 9442 9441 10957 + 10957 9441 9448 + 9448 10961 10957 + 10961 10962 10957 + 10958 10957 10962 + 10962 10963 10958 + 10958 10963 10964 + 10964 10959 10958 + 10965 10959 10964 + 10960 10959 10965 + 10966 10961 9448 + 10961 10966 10967 + 10967 10968 10961 + 10961 10968 10969 + 10969 10962 10961 + 10963 10962 10969 + 10963 10969 10970 + 10970 10964 10963 + 9448 9447 10966 + 10966 9447 9717 + 10971 10966 9717 + 10967 10966 10971 + 10971 9745 10967 + 10972 10967 9745 + 10968 10967 10972 + 9446 9717 9447 + 9745 10971 9736 + 9736 10971 9731 + 9722 9731 10971 + 9717 9722 10971 + 8740 8739 9767 + 9767 8739 10973 + 10973 9762 9767 + 9762 10973 10974 + 9762 10974 9757 + 9752 9757 10974 + 8738 10973 8739 + 10974 10973 8738 + 8738 10975 10974 + 10974 10975 9752 + 8738 8737 10975 + 10975 8737 10976 + 10976 10977 10975 + 10975 10977 9752 + 10976 8737 10978 + 10978 10979 10976 + 10980 10981 10982 + 10983 10981 10980 + 10981 10983 10984 + 10981 10984 10985 + 10985 10986 10981 + 10981 10986 10987 + 10980 10988 10983 + 10983 10988 10989 + 10989 10990 10983 + 10984 10983 10990 + 10990 10991 10984 + 10984 10991 10992 + 10992 10985 10984 + 10980 10993 10988 + 10988 10993 10994 + 10994 10989 10988 + 10989 10994 10995 + 10989 10995 10996 + 10996 10990 10989 + 10991 10990 10996 + 10993 10980 10997 + 10997 10998 10993 + 10994 10993 10998 + 10999 10994 10998 + 10995 10994 10999 + 10999 11000 10995 + 10996 10995 11000 + 11001 10997 10980 + 11002 10997 11001 + 10998 10997 11002 + 11002 11003 10998 + 10998 11003 11004 + 11004 11005 10998 + 10998 11005 10999 + 11006 10999 11005 + 10999 11006 11000 + 11001 11007 11002 + 11008 11002 11007 + 11003 11002 11008 + 11008 11009 11003 + 11003 11009 11010 + 11004 11003 11010 + 11011 11007 11001 + 11007 11011 11012 + 11012 11013 11007 + 11007 11013 11008 + 11014 11008 11013 + 11009 11008 11014 + 11014 11015 11009 + 11009 11015 11016 + 11016 11010 11009 + 11012 11011 11017 + 11018 11012 11017 + 11019 11012 11018 + 11013 11012 11019 + 11019 11020 11013 + 11013 11020 11014 + 11021 11017 11011 + 11017 11021 11022 + 11017 11022 11023 + 11023 11024 11017 + 11017 11024 11025 + 11025 11018 11017 + 11011 11026 11021 + 11021 11026 11027 + 11027 11028 11021 + 11022 11021 11028 + 11028 11029 11022 + 11022 11029 11030 + 11030 11023 11022 + 53 11026 11011 + 52 11027 11026 + 11026 11001 52 + 11031 11032 11033 + 11032 11034 11033 + 11034 11035 11033 + 11035 11036 11033 + 11037 11033 11036 + 11033 11037 11038 + 11038 11039 11033 + 11033 11039 11040 + 11040 11041 11033 + 11033 11041 11042 + 11043 11034 11032 + 11034 11043 11044 + 11044 11045 11034 + 11034 11045 11046 + 11046 11035 11034 + 11032 11047 11043 + 11048 11043 11047 + 11044 11043 11048 + 11048 11049 11044 + 11050 11044 11049 + 11045 11044 11050 + 11050 11051 11045 + 11046 11045 11051 + 11032 11052 11047 + 11047 11052 11053 + 11053 11054 11047 + 11047 11054 11048 + 11052 11032 11055 + 11055 64 11052 + 11053 11052 64 + 11056 11053 64 + 11057 11053 11056 + 11053 11057 11054 + 11054 11057 11058 + 11058 11059 11054 + 11054 11059 11048 + 64 11060 11056 + 11061 11056 11060 + 11061 11062 11056 + 11056 11062 11057 + 11057 11062 11063 + 11063 11064 11057 + 11064 11058 11057 + 11065 11060 64 + 11066 11060 11065 + 11060 11066 11061 + 11061 11066 11067 + 11068 11061 11067 + 11062 11061 11068 + 11068 11063 11062 + 64 11069 11065 + 11040 11070 11041 + 11070 11040 11071 + 11071 11072 11070 + 11073 11072 11071 + 11072 11073 11074 + 11074 11075 11072 + 11076 11072 11075 + 11071 11040 11039 + 11077 11071 11039 + 11073 11071 11077 + 11077 11078 11073 + 11073 11078 11079 + 11074 11073 11079 + 11079 11080 11074 + 11081 11074 11080 + 11081 11075 11074 + 11082 11077 11039 + 11083 11077 11082 + 11083 11078 11077 + 11078 11083 11084 + 11084 11079 11078 + 11039 11085 11082 + 11086 11082 11085 + 11082 11086 11087 + 11082 11087 11083 + 11083 11087 11088 + 11088 11089 11083 + 11089 11084 11083 + 11090 11085 11039 + 11091 11085 11090 + 11085 11091 11086 + 11092 11086 11091 + 11087 11086 11092 + 11092 11088 11087 + 11093 11088 11092 + 11088 11093 11094 + 11094 11089 11088 + 11039 11038 11090 + 11095 11090 11038 + 11091 11090 11095 + 11095 11096 11091 + 11091 11096 11097 + 11097 11092 11091 + 11098 11092 11097 + 11092 11098 11093 + 11038 11099 11095 + 11100 11095 11099 + 11095 11100 11101 + 11101 11096 11095 + 11096 11101 11102 + 11102 11097 11096 + 11103 11099 11038 + 11104 11099 11103 + 11099 11104 11100 + 11105 11100 11104 + 11101 11100 11105 + 11105 11106 11101 + 11101 11106 11107 + 11107 11102 11101 + 11038 11037 11103 + 11108 11103 11037 + 11109 11103 11108 + 11103 11109 11104 + 11104 11109 11110 + 11110 11111 11104 + 11104 11111 11105 + 11037 11112 11108 + 11113 11108 11112 + 11114 11108 11113 + 11108 11114 11109 + 11110 11109 11114 + 11036 11112 11037 + 11115 11112 11036 + 11112 11115 11113 + 11116 11113 11115 + 11117 11113 11116 + 11113 11117 11114 + 11114 11117 11118 + 11118 11119 11114 + 11114 11119 11110 + 11115 11036 11035 + 11035 11120 11115 + 11115 11120 11116 + 11121 11116 11120 + 11122 11116 11121 + 11116 11122 11117 + 11118 11117 11122 + 11123 11120 11035 + 11120 11123 11121 + 11124 11121 11123 + 11125 11121 11124 + 11121 11125 11122 + 11122 11125 11126 + 11126 11127 11122 + 11122 11127 11118 + 11035 11046 11123 + 11123 11046 11128 + 11128 11129 11123 + 11123 11129 11124 + 11130 11124 11129 + 11131 11124 11130 + 11124 11131 11125 + 11126 11125 11131 + 11051 11128 11046 + 11132 11128 11051 + 11128 11132 11133 + 11133 11129 11128 + 11129 11133 11130 + 11134 11130 11133 + 11135 11130 11134 + 11130 11135 11131 + 11051 11136 11132 + 11132 11136 11137 + 11137 11138 11132 + 11133 11132 11138 + 11138 11139 11133 + 11133 11139 11134 + 11140 11136 11051 + 11136 11140 11141 + 11141 11137 11136 + 11137 11141 11142 + 11142 11143 11137 + 11137 11143 11144 + 11144 11138 11137 + 11051 11050 11140 + 11140 11050 11145 + 11145 11146 11140 + 11140 11146 11147 + 11147 11141 11140 + 11142 11141 11147 + 11049 11145 11050 + 11148 11145 11049 + 11146 11145 11148 + 11146 11148 11149 + 11149 11147 11146 + 11147 11149 11150 + 11150 11151 11147 + 11147 11151 11142 + 11049 11152 11148 + 11149 11148 11152 + 11153 11149 11152 + 11150 11149 11153 + 11153 11154 11150 + 11155 11150 11154 + 11151 11150 11155 + 11155 11156 11151 + 11142 11151 11156 + 11157 11152 11049 + 11152 11157 11158 + 11158 11159 11152 + 11152 11159 11153 + 11160 11153 11159 + 11153 11160 11161 + 11161 11154 11153 + 11049 11048 11157 + 11157 11048 11162 + 11162 11163 11157 + 11157 11163 11164 + 11164 11165 11157 + 11165 11158 11157 + 11059 11162 11048 + 11166 11162 11059 + 11162 11166 11163 + 11163 11166 11167 + 11167 11164 11163 + 11168 11164 11167 + 11164 11168 11169 + 11169 11165 11164 + 11059 11170 11166 + 11167 11166 11170 + 11170 11171 11167 + 11171 11172 11167 + 11173 11167 11172 + 11167 11173 11168 + 11059 11058 11170 + 11170 11058 11064 + 11064 11171 11170 + 11064 11174 11171 + 11171 11174 11175 + 11175 11172 11171 + 11172 11175 11176 + 11172 11176 11173 + 11177 11173 11176 + 11168 11173 11177 + 11174 11064 11063 + 11063 11178 11174 + 11174 11178 11179 + 11179 11180 11174 + 11180 11175 11174 + 11176 11175 11180 + 11180 11181 11176 + 11176 11181 11177 + 11068 11178 11063 + 11178 11068 11182 + 11182 11179 11178 + 11182 11183 11179 + 11179 11183 11184 + 11184 11180 11179 + 11180 11184 11181 + 11181 11184 11185 + 11185 11186 11181 + 11181 11186 11177 + 11182 11068 11067 + 11187 11182 11067 + 11183 11182 11187 + 11187 11188 11183 + 11184 11183 11188 + 11188 11189 11184 + 11189 11185 11184 + 11190 11185 11189 + 11186 11185 11190 + 11186 11190 11191 + 11191 11177 11186 + 11067 11192 11187 + 11193 11187 11192 + 11187 11193 11188 + 11188 11193 11194 + 11194 11189 11188 + 11189 11194 11195 + 11189 11195 11190 + 11191 11190 11195 + 11196 11192 11067 + 11192 11196 11197 + 11192 11197 11193 + 11194 11193 11197 + 11197 11198 11194 + 11195 11194 11198 + 11198 11199 11195 + 11195 11199 11200 + 11200 11191 11195 + 11067 11201 11196 + 11202 11196 11201 + 11197 11196 11202 + 11202 11198 11197 + 11198 11202 11203 + 11203 11199 11198 + 11199 11203 11204 + 11204 11200 11199 + 11067 11205 11201 + 11201 11205 11206 + 11206 11207 11201 + 11201 11207 11202 + 11205 11067 11208 + 11208 11209 11205 + 11205 11209 11210 + 11206 11205 11210 + 11210 11211 11206 + 11212 11206 11211 + 11212 11207 11206 + 11213 11208 11067 + 11214 11208 11213 + 11208 11214 11209 + 11209 11214 11215 + 11215 11216 11209 + 11209 11216 11210 + 11081 11213 11067 + 11080 11213 11081 + 11213 11080 11217 + 11213 11217 11214 + 11215 11214 11217 + 11217 11218 11215 + 11219 11215 11218 + 11216 11215 11219 + 11066 11081 11067 + 11075 11081 11066 + 11066 11065 11075 + 11075 11065 11220 + 11065 11221 11220 + 11217 11080 11079 + 11079 11218 11217 + 11222 11218 11079 + 11218 11222 11219 + 11219 11222 11223 + 11223 11224 11219 + 11224 11225 11219 + 11216 11219 11225 + 11225 11226 11216 + 11216 11226 11210 + 11079 11084 11222 + 11222 11084 11089 + 11089 11223 11222 + 11223 11089 11094 + 11223 11094 11227 + 11227 11224 11223 + 11228 11224 11227 + 11224 11228 11229 + 11229 11225 11224 + 11229 11226 11225 + 11226 11229 11230 + 11230 11210 11226 + 11227 11094 11093 + 11231 11227 11093 + 11228 11227 11231 + 11231 11232 11228 + 11229 11228 11232 + 11230 11229 11232 + 11233 11230 11232 + 11234 11230 11233 + 11234 11210 11230 + 11210 11234 11235 + 11235 11211 11210 + 11236 11231 11093 + 11236 11232 11231 + 11232 11236 11237 + 11237 11238 11232 + 11232 11238 11239 + 11239 11233 11232 + 11093 11098 11236 + 11236 11098 11240 + 11240 11241 11236 + 11241 11237 11236 + 11242 11237 11241 + 11237 11242 11238 + 11238 11242 11243 + 11243 11239 11238 + 11097 11240 11098 + 11244 11240 11097 + 11240 11244 11245 + 11245 11241 11240 + 11241 11245 11246 + 11246 11247 11241 + 11241 11247 11242 + 11243 11242 11247 + 11097 11102 11244 + 11244 11102 11107 + 11107 11248 11244 + 11244 11248 11249 + 11249 11245 11244 + 11246 11245 11249 + 11249 11250 11246 + 11246 11250 11251 + 11251 11252 11246 + 11247 11246 11252 + 11253 11248 11107 + 11248 11253 11254 + 11254 11249 11248 + 11249 11254 11255 + 11255 11250 11249 + 11250 11255 11256 + 11256 11251 11250 + 11107 11257 11253 + 11253 11257 11258 + 11258 11259 11253 + 11253 11259 11260 + 11260 11254 11253 + 11255 11254 11260 + 11257 11107 11106 + 11106 11261 11257 + 11258 11257 11261 + 11261 11262 11258 + 11263 11258 11262 + 11258 11263 11264 + 11264 11259 11258 + 11259 11264 11265 + 11265 11260 11259 + 11261 11106 11105 + 11105 11266 11261 + 11261 11266 11267 + 11267 11262 11261 + 11268 11262 11267 + 11262 11268 11263 + 11263 11268 11269 + 11269 11270 11263 + 11264 11263 11270 + 11266 11105 11111 + 11111 11271 11266 + 11267 11266 11271 + 11271 11272 11267 + 11273 11267 11272 + 11267 11273 11268 + 11268 11273 11274 + 11274 11269 11268 + 11271 11111 11110 + 11110 11275 11271 + 11271 11275 11276 + 11276 11272 11271 + 11277 11272 11276 + 11272 11277 11273 + 11274 11273 11277 + 11277 11278 11274 + 11279 11274 11278 + 11269 11274 11279 + 11275 11110 11119 + 11119 11280 11275 + 11276 11275 11280 + 11280 11281 11276 + 11282 11276 11281 + 11276 11282 11277 + 11277 11282 11283 + 11283 11278 11277 + 11280 11119 11118 + 11118 11284 11280 + 11280 11284 11285 + 11285 11281 11280 + 11286 11281 11285 + 11281 11286 11282 + 11283 11282 11286 + 11286 11287 11283 + 11288 11283 11287 + 11278 11283 11288 + 11284 11118 11127 + 11127 11289 11284 + 11285 11284 11289 + 11289 11290 11285 + 11291 11285 11290 + 11285 11291 11286 + 11286 11291 11292 + 11292 11287 11286 + 11289 11127 11126 + 11126 11293 11289 + 11289 11293 11294 + 11294 11290 11289 + 11295 11290 11294 + 11290 11295 11291 + 11292 11291 11295 + 11295 11296 11292 + 11297 11292 11296 + 11287 11292 11297 + 11293 11126 11298 + 11298 11299 11293 + 11294 11293 11299 + 11299 11300 11294 + 11301 11294 11300 + 11294 11301 11295 + 11295 11301 11302 + 11302 11296 11295 + 11131 11298 11126 + 11303 11298 11131 + 11299 11298 11303 + 11303 11304 11299 + 11299 11304 11305 + 11305 11300 11299 + 11306 11300 11305 + 11300 11306 11301 + 11302 11301 11306 + 11131 11135 11303 + 11303 11135 11307 + 11307 11308 11303 + 11304 11303 11308 + 11308 11309 11304 + 11305 11304 11309 + 11309 11310 11305 + 11311 11305 11310 + 11305 11311 11306 + 11134 11307 11135 + 11307 11134 11312 + 11312 11313 11307 + 11307 11313 11314 + 11314 11308 11307 + 11309 11308 11314 + 11314 11315 11309 + 11309 11315 11316 + 11316 11310 11309 + 11312 11134 11139 + 11139 11317 11312 + 11312 11317 11318 + 11318 11319 11312 + 11313 11312 11319 + 11319 11320 11313 + 11314 11313 11320 + 11320 11321 11314 + 11315 11314 11321 + 11317 11139 11138 + 11138 11144 11317 + 11317 11144 11322 + 11322 11323 11317 + 11317 11323 11318 + 11324 11318 11323 + 11325 11318 11324 + 11318 11325 11326 + 11326 11319 11318 + 11320 11319 11326 + 11327 11322 11144 + 11328 11322 11327 + 11328 11323 11322 + 11323 11328 11324 + 11324 11328 11329 + 11329 11330 11324 + 11331 11324 11330 + 11324 11331 11325 + 11144 11143 11327 + 11332 11327 11143 + 11327 11332 11333 + 11333 11329 11327 + 11327 11329 11328 + 11143 11142 11332 + 11156 11332 11142 + 11333 11332 11156 + 11156 11334 11333 + 11335 11333 11334 + 11329 11333 11335 + 11335 11330 11329 + 11330 11335 11336 + 11336 11337 11330 + 11330 11337 11331 + 11338 11331 11337 + 11325 11331 11338 + 11334 11156 11155 + 11334 11155 11339 + 11339 11340 11334 + 11334 11340 11335 + 11336 11335 11340 + 11340 11341 11336 + 11342 11336 11341 + 11337 11336 11342 + 11342 11343 11337 + 11337 11343 11338 + 11344 11339 11155 + 11341 11339 11344 + 11341 11340 11339 + 11345 11344 11155 + 11346 11344 11345 + 11344 11346 11347 + 11347 11348 11344 + 11344 11348 11341 + 11341 11348 11342 + 11349 11342 11348 + 11343 11342 11349 + 11154 11345 11155 + 11350 11345 11154 + 11345 11350 11351 + 11351 11352 11345 + 11345 11352 11346 + 11154 11161 11350 + 11350 11161 11353 + 11353 11354 11350 + 11351 11350 11354 + 11354 11355 11351 + 11356 11351 11355 + 11352 11351 11356 + 11356 11357 11352 + 11346 11352 11357 + 11161 11358 11353 + 11359 11353 11358 + 11360 11353 11359 + 11353 11360 11361 + 11361 11354 11353 + 11355 11354 11361 + 11362 11358 11161 + 11363 11358 11362 + 11358 11363 11359 + 11359 11363 11364 + 11364 11365 11359 + 11360 11359 11365 + 11161 11160 11362 + 11362 11160 11366 + 11366 11367 11362 + 11368 11362 11367 + 11362 11368 11363 + 11363 11368 11369 + 11369 11364 11363 + 11159 11366 11160 + 11366 11159 11158 + 11158 11370 11366 + 11366 11370 11371 + 11371 11367 11366 + 11367 11371 11372 + 11372 11373 11367 + 11367 11373 11368 + 11368 11373 11374 + 11374 11369 11368 + 11370 11158 11165 + 11165 11375 11370 + 11370 11375 11376 + 11371 11370 11376 + 11376 11377 11371 + 11372 11371 11377 + 11377 11378 11372 + 11379 11372 11378 + 11373 11372 11379 + 11379 11374 11373 + 11375 11165 11169 + 11169 11380 11375 + 11375 11380 11381 + 11381 11376 11375 + 11376 11381 11382 + 11382 11383 11376 + 11376 11383 11384 + 11384 11377 11376 + 11378 11377 11384 + 11380 11169 11385 + 11385 11386 11380 + 11381 11380 11386 + 11386 11387 11381 + 11387 11388 11381 + 11382 11381 11388 + 11389 11385 11169 + 11390 11385 11389 + 11386 11385 11390 + 11390 11391 11386 + 11386 11391 11392 + 11392 11387 11386 + 11169 11168 11389 + 11168 11393 11389 + 11393 11394 11389 + 11395 11389 11394 + 11396 11389 11395 + 11389 11396 11390 + 11177 11393 11168 + 11177 11191 11393 + 11393 11191 11200 + 11200 11394 11393 + 11200 11204 11394 + 11394 11204 11395 + 11395 11204 11203 + 11203 11397 11395 + 11398 11395 11397 + 11395 11398 11396 + 11396 11398 11399 + 11399 11400 11396 + 11396 11400 11401 + 11390 11396 11401 + 11402 11397 11203 + 11397 11402 11403 + 11397 11403 11398 + 11399 11398 11403 + 11403 11404 11399 + 11404 11405 11399 + 11406 11399 11405 + 11399 11406 11400 + 11203 11202 11402 + 11407 11402 11202 + 11403 11402 11407 + 11407 11404 11403 + 11407 11408 11404 + 11404 11408 11409 + 11409 11405 11404 + 11405 11409 11410 + 11410 11411 11405 + 11405 11411 11406 + 11412 11407 11202 + 11408 11407 11412 + 11412 11413 11408 + 11408 11413 11414 + 11414 11409 11408 + 11410 11409 11414 + 11207 11412 11202 + 11415 11412 11207 + 11415 11413 11412 + 11413 11415 11416 + 11416 11414 11413 + 11416 11417 11414 + 11414 11417 11410 + 11410 11417 11418 + 11418 11419 11410 + 11411 11410 11419 + 11207 11212 11415 + 11415 11212 11420 + 11416 11415 11420 + 11421 11416 11420 + 11417 11416 11421 + 11421 11418 11417 + 11421 11422 11418 + 11418 11422 11423 + 11423 11419 11418 + 11424 11419 11423 + 11419 11424 11411 + 11212 11425 11420 + 11425 11426 11420 + 11426 11427 11420 + 11428 11420 11427 + 11420 11428 11429 + 11420 11429 11430 + 11430 11431 11420 + 11420 11431 11421 + 11211 11425 11212 + 11425 11211 11235 + 11425 11235 11432 + 11432 11426 11425 + 11426 11432 11433 + 11426 11433 11434 + 11434 11427 11426 + 11427 11434 11435 + 11427 11435 11428 + 11436 11432 11235 + 11433 11432 11436 + 11436 11437 11433 + 11433 11437 11438 + 11438 11434 11433 + 11435 11434 11438 + 11438 11439 11435 + 11435 11439 11440 + 11428 11435 11440 + 11235 11234 11436 + 11234 11441 11436 + 11442 11436 11441 + 11436 11442 11443 + 11443 11437 11436 + 11437 11443 11444 + 11444 11438 11437 + 11438 11444 11445 + 11445 11439 11438 + 11233 11441 11234 + 11441 11233 11446 + 11441 11446 11442 + 11447 11442 11446 + 11443 11442 11447 + 11447 11448 11443 + 11443 11448 11449 + 11449 11444 11443 + 11445 11444 11449 + 11446 11233 11239 + 11239 11450 11446 + 11446 11450 11447 + 11451 11447 11450 + 11447 11451 11448 + 11448 11451 11452 + 11452 11449 11448 + 11453 11449 11452 + 11449 11453 11445 + 11450 11239 11243 + 11243 11454 11450 + 11450 11454 11451 + 11451 11454 11455 + 11452 11451 11455 + 11455 11456 11452 + 11457 11452 11456 + 11452 11457 11453 + 11454 11243 11458 + 11458 11455 11454 + 11459 11455 11458 + 11455 11459 11460 + 11460 11456 11455 + 11456 11460 11461 + 11461 11462 11456 + 11456 11462 11457 + 11247 11458 11243 + 11252 11458 11247 + 11458 11252 11459 + 11459 11252 11251 + 11251 11463 11459 + 11459 11463 11464 + 11464 11460 11459 + 11461 11460 11464 + 11464 11465 11461 + 11461 11465 11466 + 11466 11467 11461 + 11462 11461 11467 + 11468 11463 11251 + 11463 11468 11469 + 11469 11464 11463 + 11464 11469 11470 + 11470 11465 11464 + 11465 11470 11471 + 11471 11466 11465 + 11251 11256 11468 + 11468 11256 11472 + 11472 11473 11468 + 11468 11473 11474 + 11474 11469 11468 + 11470 11469 11474 + 11474 11475 11470 + 11470 11475 11476 + 11476 11471 11470 + 11472 11256 11255 + 11255 11477 11472 + 11478 11472 11477 + 11472 11478 11479 + 11479 11473 11472 + 11473 11479 11480 + 11480 11474 11473 + 11474 11480 11481 + 11481 11475 11474 + 11260 11477 11255 + 11482 11477 11260 + 11477 11482 11478 + 11478 11482 11483 + 11483 11484 11478 + 11479 11478 11484 + 11484 11485 11479 + 11479 11485 11486 + 11486 11480 11479 + 11481 11480 11486 + 11260 11265 11482 + 11482 11265 11487 + 11487 11483 11482 + 11488 11483 11487 + 11483 11488 11489 + 11489 11484 11483 + 11485 11484 11489 + 11489 11490 11485 + 11485 11490 11491 + 11491 11486 11485 + 11487 11265 11264 + 11264 11492 11487 + 11493 11487 11492 + 11487 11493 11488 + 11488 11493 11494 + 11494 11495 11488 + 11488 11495 11496 + 11496 11489 11488 + 11490 11489 11496 + 11270 11492 11264 + 11492 11270 11497 + 11497 11498 11492 + 11492 11498 11493 + 11493 11498 11499 + 11499 11494 11493 + 11500 11494 11499 + 11494 11500 11501 + 11501 11495 11494 + 11497 11270 11269 + 11269 11502 11497 + 11503 11497 11502 + 11498 11497 11503 + 11503 11499 11498 + 11504 11499 11503 + 11499 11504 11500 + 11505 11500 11504 + 11501 11500 11505 + 11279 11502 11269 + 11502 11279 11506 + 11506 11507 11502 + 11502 11507 11503 + 11508 11503 11507 + 11503 11508 11504 + 11504 11508 11509 + 11509 11510 11504 + 11504 11510 11505 + 11511 11506 11279 + 11512 11506 11511 + 11506 11512 11513 + 11513 11507 11506 + 11507 11513 11508 + 11509 11508 11513 + 11279 11514 11511 + 11515 11511 11514 + 11516 11511 11515 + 11511 11516 11512 + 11517 11512 11516 + 11513 11512 11517 + 11517 11518 11513 + 11513 11518 11509 + 11278 11514 11279 + 11288 11514 11278 + 11514 11288 11515 + 11519 11515 11288 + 11520 11515 11519 + 11515 11520 11516 + 11516 11520 11521 + 11521 11522 11516 + 11516 11522 11517 + 11288 11523 11519 + 11524 11519 11523 + 11525 11519 11524 + 11519 11525 11520 + 11521 11520 11525 + 11287 11523 11288 + 11297 11523 11287 + 11523 11297 11524 + 11526 11524 11297 + 11527 11524 11526 + 11524 11527 11525 + 11525 11527 11528 + 11528 11529 11525 + 11525 11529 11521 + 11297 11530 11526 + 11531 11526 11530 + 11532 11526 11531 + 11526 11532 11527 + 11528 11527 11532 + 11296 11530 11297 + 11533 11530 11296 + 11530 11533 11531 + 11534 11531 11533 + 11535 11531 11534 + 11531 11535 11532 + 11532 11535 11536 + 11536 11537 11532 + 11532 11537 11528 + 11296 11302 11533 + 11533 11302 11538 + 11538 11539 11533 + 11533 11539 11534 + 11540 11534 11539 + 11541 11534 11540 + 11534 11541 11535 + 11536 11535 11541 + 11306 11538 11302 + 11542 11538 11306 + 11538 11542 11543 + 11543 11539 11538 + 11539 11543 11540 + 11544 11540 11543 + 11545 11540 11544 + 11540 11545 11541 + 11306 11311 11542 + 11542 11311 11546 + 11546 11547 11542 + 11543 11542 11547 + 11547 11548 11543 + 11543 11548 11544 + 11549 11544 11548 + 11550 11544 11549 + 11544 11550 11545 + 11310 11546 11311 + 11546 11310 11316 + 11316 11551 11546 + 11546 11551 11552 + 11552 11547 11546 + 11547 11552 11553 + 11553 11548 11547 + 11548 11553 11549 + 11554 11549 11553 + 11555 11549 11554 + 11549 11555 11550 + 11551 11316 11556 + 11556 11557 11551 + 11552 11551 11557 + 11557 11558 11552 + 11553 11552 11558 + 11558 11559 11553 + 11553 11559 11554 + 11560 11556 11316 + 11561 11556 11560 + 11557 11556 11561 + 11561 11562 11557 + 11557 11562 11563 + 11563 11558 11557 + 11558 11563 11564 + 11564 11559 11558 + 11316 11315 11560 + 11321 11560 11315 + 11560 11321 11565 + 11565 11566 11560 + 11560 11566 11561 + 11561 11566 11567 + 11567 11568 11561 + 11562 11561 11568 + 11568 11569 11562 + 11563 11562 11569 + 11565 11321 11320 + 11320 11570 11565 + 11565 11570 11571 + 11571 11572 11565 + 11566 11565 11572 + 11572 11567 11566 + 11326 11570 11320 + 11570 11326 11573 + 11573 11571 11570 + 11571 11573 11574 + 11574 11575 11571 + 11571 11575 11576 + 11576 11572 11571 + 11567 11572 11576 + 11577 11573 11326 + 11574 11573 11577 + 11577 11578 11574 + 11579 11574 11578 + 11575 11574 11579 + 11579 11580 11575 + 11576 11575 11580 + 11326 11325 11577 + 11338 11577 11325 + 11578 11577 11338 + 11338 11581 11578 + 11578 11581 11582 + 11582 11583 11578 + 11578 11583 11584 + 11584 11579 11578 + 11585 11579 11584 + 11580 11579 11585 + 11581 11338 11343 + 11343 11586 11581 + 11581 11586 11587 + 11587 11582 11581 + 11588 11582 11587 + 11588 11583 11582 + 11583 11588 11589 + 11589 11584 11583 + 11590 11584 11589 + 11584 11590 11585 + 11349 11586 11343 + 11586 11349 11591 + 11591 11587 11586 + 11587 11591 11592 + 11592 11593 11587 + 11587 11593 11588 + 11588 11593 11594 + 11594 11589 11588 + 11595 11589 11594 + 11589 11595 11590 + 11591 11349 11347 + 11347 11596 11591 + 11592 11591 11596 + 11596 11597 11592 + 11598 11592 11597 + 11593 11592 11598 + 11598 11594 11593 + 11348 11347 11349 + 11599 8724 11600 + 11600 11601 11599 + 11041 11602 11603 + 11603 11604 11041 + 8644 11605 8651 + 8651 8645 8644 + 8645 8651 11606 + 11606 8646 8645 + 8646 11606 11607 + 8646 11607 11608 + 11608 11609 8646 + 8646 11609 8647 + 11606 8651 8654 + 8654 11610 11606 + 11610 11611 11606 + 11607 11606 11611 + 11611 11612 11607 + 11607 11612 11613 + 11613 11608 11607 + 11614 11608 11613 + 11609 11608 11614 + 11615 11610 8654 + 11616 11610 11615 + 11610 11616 11617 + 11617 11611 11610 + 11617 11612 11611 + 11612 11617 11618 + 11618 11613 11612 + 8654 8658 11615 + 11615 8658 8663 + 8663 11619 11615 + 11616 11615 11619 + 11619 11620 11616 + 11616 11620 11618 + 11617 11616 11618 + 11621 11619 8663 + 11619 11621 11622 + 11622 11620 11619 + 11620 11622 11623 + 11623 11618 11620 + 11613 11618 11623 + 11623 11624 11613 + 11613 11624 11614 + 8663 8667 11621 + 11625 11621 8667 + 11622 11621 11625 + 11625 11626 11622 + 11623 11622 11626 + 11626 11627 11623 + 11624 11623 11627 + 11627 11628 11624 + 11624 11628 11629 + 11629 11614 11624 + 8667 8671 11625 + 11630 11625 8671 + 11625 11630 11631 + 11631 11626 11625 + 11626 11631 11632 + 11632 11627 11626 + 11628 11627 11632 + 11632 11633 11628 + 11628 11633 11634 + 11634 11629 11628 + 8671 8677 11630 + 11635 11630 8677 + 11631 11630 11635 + 11635 11636 11631 + 11632 11631 11636 + 11636 11637 11632 + 11633 11632 11637 + 11637 11638 11633 + 11633 11638 11639 + 11639 11634 11633 + 8677 11640 11635 + 11641 11635 11640 + 11635 11641 11642 + 11642 11636 11635 + 11636 11642 11643 + 11643 11637 11636 + 11638 11637 11643 + 8676 11640 8677 + 11640 8676 8675 + 8675 11644 11640 + 11640 11644 11641 + 11645 11641 11644 + 11642 11641 11645 + 11645 11646 11642 + 11643 11642 11646 + 11646 11647 11643 + 11648 11643 11647 + 11643 11648 11638 + 11644 8675 8681 + 8681 11649 11644 + 11644 11649 11645 + 11650 11645 11649 + 11645 11650 11651 + 11651 11646 11645 + 11646 11651 11652 + 11652 11647 11646 + 11653 11647 11652 + 11647 11653 11648 + 11649 8681 11654 + 11654 11655 11649 + 11649 11655 11650 + 11656 11650 11655 + 11651 11650 11656 + 11656 11657 11651 + 11651 11657 11658 + 11652 11651 11658 + 11654 8681 8680 + 8680 11659 11654 + 11660 11654 11659 + 11655 11654 11660 + 11660 11661 11655 + 11655 11661 11656 + 11662 11656 11661 + 11662 11657 11656 + 11657 11662 11663 + 11663 11658 11657 + 8685 11659 8680 + 11659 8685 11664 + 11664 11665 11659 + 11659 11665 11660 + 11666 11660 11665 + 11661 11660 11666 + 11666 11667 11661 + 11661 11667 11662 + 11663 11662 11667 + 11664 8685 11668 + 11668 11669 11664 + 11670 11664 11669 + 11665 11664 11670 + 11670 11671 11665 + 11665 11671 11666 + 11672 11666 11671 + 11667 11666 11672 + 8684 11668 8685 + 8690 11668 8684 + 11668 8690 11673 + 11673 11669 11668 + 11669 11673 11674 + 11674 11675 11669 + 11669 11675 11670 + 11676 11670 11675 + 11671 11670 11676 + 11676 11677 11671 + 11671 11677 11672 + 11673 8690 11678 + 11678 11679 11673 + 11674 11673 11679 + 11679 11680 11674 + 11681 11674 11680 + 11675 11674 11681 + 11681 11682 11675 + 11675 11682 11676 + 8689 11678 8690 + 11683 11678 8689 + 11678 11683 11684 + 11684 11679 11678 + 11679 11684 11685 + 11685 11680 11679 + 11680 11685 11686 + 11686 11687 11680 + 11680 11687 11681 + 8689 8695 11683 + 11683 8695 11688 + 11688 11689 11683 + 11684 11683 11689 + 11689 11690 11684 + 11685 11684 11690 + 11690 11691 11685 + 11686 11685 11691 + 11692 11688 8695 + 11693 11688 11692 + 11688 11693 11694 + 11694 11689 11688 + 11689 11694 11695 + 11695 11690 11689 + 11690 11695 11696 + 11696 11691 11690 + 8695 8694 11692 + 11697 11692 8694 + 11698 11692 11697 + 11692 11698 11693 + 11693 11698 11699 + 11699 11700 11693 + 11694 11693 11700 + 11700 11701 11694 + 11695 11694 11701 + 8694 8693 11697 + 11697 8693 11702 + 11702 11703 11697 + 11703 11704 11697 + 11705 11697 11704 + 11697 11705 11698 + 11698 11705 11706 + 11706 11699 11698 + 8692 11702 8693 + 11702 8692 11707 + 11707 11708 11702 + 11702 11708 11709 + 11709 11703 11702 + 11703 11709 11710 + 11703 11710 11711 + 11711 11704 11703 + 11707 8692 8691 + 8691 8640 11707 + 8587 11707 8640 + 11708 11707 8587 + 8587 11712 11708 + 11708 11712 11713 + 11713 11714 11708 + 11714 11709 11708 + 11710 11709 11714 + 8586 11712 8587 + 11712 8586 8593 + 8593 11713 11712 + 11715 11713 8593 + 11713 11715 11716 + 11716 11714 11713 + 11716 11717 11714 + 11714 11717 11710 + 11710 11717 11718 + 11718 11719 11710 + 11719 11711 11710 + 11715 8593 8592 + 8592 11720 11715 + 11716 11715 11720 + 11721 11716 11720 + 11717 11716 11721 + 11721 11718 11717 + 11721 11722 11718 + 11718 11722 11723 + 11723 11719 11718 + 11720 8592 8591 + 11720 8591 11724 + 11724 11725 11720 + 11720 11725 11726 + 11726 11727 11720 + 11727 11728 11720 + 11728 11721 11720 + 11722 11721 11728 + 11724 8591 8590 + 11729 11724 8590 + 11730 11724 11729 + 11725 11724 11730 + 11725 11730 11731 + 11731 11726 11725 + 11726 11731 11732 + 11726 11732 11733 + 11733 11727 11726 + 8590 11734 11729 + 11735 11729 11734 + 11729 11735 11736 + 11729 11736 11730 + 11730 11736 11737 + 11731 11730 11737 + 11738 11731 11737 + 11732 11731 11738 + 11739 11734 8590 + 11740 11734 11739 + 11734 11740 11735 + 11741 11735 11740 + 11736 11735 11741 + 11741 11742 11736 + 11736 11742 11737 + 8590 11743 11739 + 11744 11739 11743 + 11745 11739 11744 + 11739 11745 11740 + 8599 11743 8590 + 11743 8599 11746 + 11746 11747 11743 + 11743 11747 11744 + 11748 11744 11747 + 11749 11744 11748 + 11744 11749 11745 + 11750 11746 8599 + 11751 11746 11750 + 11747 11746 11751 + 11751 11752 11747 + 11747 11752 11748 + 11753 11748 11752 + 11754 11748 11753 + 11748 11754 11749 + 8599 11755 11750 + 11756 11750 11755 + 11757 11750 11756 + 11750 11757 11751 + 11758 11751 11757 + 11752 11751 11758 + 11758 11759 11752 + 11752 11759 11753 + 8598 11755 8599 + 11760 11755 8598 + 11755 11760 11756 + 11756 11760 11761 + 11761 11762 11756 + 11762 11763 11756 + 11764 11756 11763 + 11756 11764 11757 + 8598 8614 11760 + 11760 8614 11765 + 11765 11761 11760 + 8612 11761 11765 + 11761 8612 11766 + 11766 11762 11761 + 11766 11767 11762 + 11762 11767 11768 + 11768 11763 11762 + 8614 8613 11765 + 8612 11765 8613 + 11766 8612 8611 + 11769 11766 8611 + 11767 11766 11769 + 11769 11770 11767 + 11767 11770 11771 + 11771 11768 11767 + 11772 11768 11771 + 11763 11768 11772 + 11772 11773 11763 + 11763 11773 11764 + 8611 11774 11769 + 11775 11769 11774 + 11769 11775 11770 + 11770 11775 11776 + 11776 11777 11770 + 11770 11777 11771 + 8647 11774 8611 + 11774 8647 11778 + 11774 11778 11775 + 11776 11775 11778 + 11778 11779 11776 + 11629 11776 11779 + 11776 11629 11634 + 11634 11777 11776 + 11777 11634 11639 + 11639 11771 11777 + 11778 8647 11609 + 11609 11779 11778 + 11614 11779 11609 + 11779 11614 11629 + 11780 11781 11782 + 11783 11780 11782 + 11784 11780 11783 + 11780 11784 11785 + 11780 11785 11786 + 11786 11787 11780 + 11782 11788 11783 + 11788 11789 11783 + 11790 11783 11789 + 11791 11783 11790 + 11783 11791 11784 + 11792 11784 11791 + 11785 11784 11792 + 11793 11788 11782 + 11794 11788 11793 + 11788 11794 11795 + 11795 11789 11788 + 11796 11789 11795 + 11789 11796 11790 + 11782 11797 11793 + 11798 11793 11797 + 11799 11793 11798 + 11793 11799 11794 + 11794 11799 11800 + 11800 11801 11794 + 11795 11794 11801 + 11797 11782 11802 + 11802 11803 11797 + 11797 11803 11804 + 11804 11805 11797 + 11797 11805 11798 + 11802 11782 11787 + 11787 11806 11802 + 11807 11802 11806 + 11807 11808 11802 + 11808 11809 11802 + 11803 11802 11809 + 11809 11810 11803 + 11810 11804 11803 + 11806 11787 11786 + 11806 11786 11811 + 11811 11807 11806 + 11807 11811 11812 + 11807 11812 11808 + 11812 11813 11808 + 11813 11814 11808 + 11808 11814 11815 + 11815 11809 11808 + 11811 11786 11785 + 11816 11811 11785 + 11812 11811 11816 + 11816 11817 11812 + 11813 11812 11817 + 11818 11813 11817 + 11814 11813 11818 + 11818 11819 11814 + 11814 11819 11815 + 11785 11820 11816 + 11821 11816 11820 + 11821 11817 11816 + 11817 11821 11822 + 11822 11823 11817 + 11817 11823 11818 + 11792 11820 11785 + 11792 11824 11820 + 11820 11824 11821 + 11821 11824 11825 + 11822 11821 11825 + 11825 11826 11822 + 11827 11822 11826 + 11822 11827 11828 + 11828 11823 11822 + 11824 11792 11829 + 11829 11825 11824 + 11829 11830 11825 + 11825 11830 11831 + 11831 11826 11825 + 11831 11832 11826 + 11826 11832 11827 + 11833 11827 11832 + 11828 11827 11833 + 11791 11829 11792 + 11830 11829 11791 + 11791 11834 11830 + 11830 11834 11835 + 11831 11830 11835 + 11835 11836 11831 + 11832 11831 11836 + 11836 11837 11832 + 11832 11837 11838 + 11838 11833 11832 + 11790 11834 11791 + 11834 11790 11839 + 11839 11835 11834 + 11835 11839 11840 + 11840 11841 11835 + 11835 11841 11842 + 11842 11836 11835 + 11836 11842 11837 + 11843 11839 11790 + 11840 11839 11843 + 11843 11844 11840 + 11840 11844 11845 + 11845 11846 11840 + 11841 11840 11846 + 11846 11847 11841 + 11842 11841 11847 + 11790 11796 11843 + 11848 11843 11796 + 11843 11848 11849 + 11849 11844 11843 + 11844 11849 11850 + 11850 11845 11844 + 11796 11851 11848 + 11848 11851 11852 + 11852 11853 11848 + 11849 11848 11853 + 11853 11854 11849 + 11850 11849 11854 + 11795 11851 11796 + 11851 11795 11855 + 11855 11852 11851 + 11852 11855 11856 + 11856 11857 11852 + 11852 11857 11858 + 11858 11853 11852 + 11854 11853 11858 + 11801 11855 11795 + 11856 11855 11801 + 11801 11859 11856 + 11860 11856 11859 + 11857 11856 11860 + 11860 11861 11857 + 11857 11861 11862 + 11862 11858 11857 + 11863 11858 11862 + 11858 11863 11854 + 11864 11859 11801 + 11859 11864 11865 + 11865 11866 11859 + 11859 11866 11860 + 11867 11860 11866 + 11861 11860 11867 + 11801 11800 11864 + 11864 11800 11868 + 11868 11869 11864 + 11865 11864 11869 + 11869 11870 11865 + 11871 11865 11870 + 11866 11865 11871 + 11871 11872 11866 + 11866 11872 11867 + 11873 11868 11800 + 11874 11868 11873 + 11869 11868 11874 + 11875 11869 11874 + 11869 11875 11876 + 11876 11870 11869 + 11800 11799 11873 + 11799 11877 11873 + 11878 11873 11877 + 11879 11873 11878 + 11873 11879 11874 + 11874 11879 11880 + 11880 11881 11874 + 11875 11874 11881 + 11798 11877 11799 + 11798 11882 11877 + 11877 11882 11878 + 11878 11882 11883 + 11883 11884 11878 + 11885 11878 11884 + 11878 11885 11879 + 11879 11885 11886 + 11886 11880 11879 + 11882 11798 11805 + 11805 11883 11882 + 11883 11805 11804 + 11804 11887 11883 + 11883 11887 11888 + 11888 11884 11883 + 11888 11889 11884 + 11884 11889 11885 + 11886 11885 11889 + 11889 11890 11886 + 11891 11886 11890 + 11880 11886 11891 + 11887 11804 11810 + 11810 11892 11887 + 11888 11887 11892 + 11893 11888 11892 + 11889 11888 11893 + 11893 11890 11889 + 11894 11890 11893 + 11890 11894 11891 + 11892 11810 11809 + 11809 11815 11892 + 11892 11815 11895 + 11895 11896 11892 + 11892 11896 11893 + 11897 11893 11896 + 11893 11897 11894 + 11819 11895 11815 + 11898 11895 11819 + 11895 11898 11899 + 11899 11896 11895 + 11896 11899 11897 + 11900 11897 11899 + 11894 11897 11900 + 11900 11901 11894 + 11894 11901 11902 + 11891 11894 11902 + 11819 11903 11898 + 11903 11904 11898 + 11904 11905 11898 + 11899 11898 11905 + 11905 11906 11899 + 11899 11906 11900 + 11907 11900 11906 + 11900 11907 11901 + 11903 11819 11818 + 11903 11818 11908 + 11904 11903 11908 + 11909 11904 11908 + 11904 11909 11910 + 11910 11911 11904 + 11905 11904 11911 + 11912 11905 11911 + 11906 11905 11912 + 11908 11818 11823 + 11823 11828 11908 + 11913 11908 11828 + 11913 11909 11908 + 11913 11914 11909 + 11914 11910 11909 + 11910 11914 11915 + 11915 11916 11910 + 11911 11910 11916 + 11916 11917 11911 + 11912 11911 11917 + 11833 11913 11828 + 11913 11833 11918 + 11918 11914 11913 + 11914 11918 11915 + 11918 11919 11915 + 11915 11919 11920 + 11915 11920 11916 + 11920 11921 11916 + 11916 11921 11917 + 11918 11833 11838 + 11838 11922 11918 + 11919 11918 11922 + 11923 11919 11922 + 11920 11919 11923 + 11923 11924 11920 + 11921 11920 11924 + 11925 11921 11924 + 11926 11921 11925 + 11921 11926 11917 + 11927 11922 11838 + 11922 11927 11928 + 11928 11923 11922 + 11923 11928 11929 + 11929 11924 11923 + 11924 11929 11930 + 11930 11925 11924 + 11931 11925 11930 + 11925 11931 11926 + 11838 11932 11927 + 11927 11932 11933 + 11933 11934 11927 + 11927 11934 11935 + 11935 11928 11927 + 11929 11928 11935 + 11935 11936 11929 + 11930 11929 11936 + 11932 11838 11937 + 11937 11938 11932 + 11938 11933 11932 + 11938 11939 11933 + 11939 11940 11933 + 11934 11933 11940 + 11941 11937 11838 + 11942 11937 11941 + 11942 11939 11937 + 11939 11938 11937 + 11837 11941 11838 + 11943 11941 11837 + 11943 11944 11941 + 11941 11944 11942 + 11945 11942 11944 + 11939 11942 11945 + 11945 11946 11939 + 11939 11946 11940 + 11947 11940 11946 + 11940 11947 11934 + 11837 11842 11943 + 11847 11943 11842 + 11944 11943 11847 + 11847 11948 11944 + 11944 11948 11945 + 11949 11945 11948 + 11946 11945 11949 + 11949 11950 11946 + 11946 11950 11947 + 11951 11947 11950 + 11934 11947 11951 + 11951 11935 11934 + 11936 11935 11951 + 11952 11948 11847 + 11948 11952 11949 + 11953 11949 11952 + 11950 11949 11953 + 11953 11954 11950 + 11950 11954 11951 + 11955 11951 11954 + 11951 11955 11936 + 11847 11846 11952 + 11952 11846 11845 + 11845 11956 11952 + 11952 11956 11953 + 11957 11953 11956 + 11953 11957 11958 + 11958 11954 11953 + 11954 11958 11955 + 11959 11955 11958 + 11936 11955 11959 + 11960 11956 11845 + 11956 11960 11957 + 11957 11960 11961 + 11961 11962 11957 + 11958 11957 11962 + 11962 11963 11958 + 11958 11963 11964 + 11964 11959 11958 + 11845 11850 11960 + 11960 11850 11965 + 11965 11961 11960 + 11961 11965 11966 + 11966 11967 11961 + 11961 11967 11968 + 11968 11962 11961 + 11963 11962 11968 + 11854 11965 11850 + 11966 11965 11854 + 11854 11863 11966 + 11969 11966 11863 + 11967 11966 11969 + 11969 11970 11967 + 11967 11970 11971 + 11971 11968 11967 + 11972 11968 11971 + 11968 11972 11963 + 11963 11972 11973 + 11973 11964 11963 + 11863 11974 11969 + 11975 11969 11974 + 11970 11969 11975 + 11975 11976 11970 + 11970 11976 11977 + 11977 11971 11970 + 11978 11971 11977 + 11971 11978 11972 + 11862 11974 11863 + 11974 11862 11979 + 11979 11980 11974 + 11974 11980 11975 + 11981 11975 11980 + 11976 11975 11981 + 11981 11982 11976 + 11977 11976 11982 + 11979 11862 11861 + 11861 11983 11979 + 11984 11979 11983 + 11980 11979 11984 + 11984 11985 11980 + 11980 11985 11981 + 11986 11981 11985 + 11982 11981 11986 + 11867 11983 11861 + 11983 11867 11987 + 11987 11988 11983 + 11983 11988 11984 + 11989 11984 11988 + 11985 11984 11989 + 11989 11990 11985 + 11985 11990 11986 + 11987 11867 11872 + 11872 11991 11987 + 11992 11987 11991 + 11988 11987 11992 + 11992 11993 11988 + 11988 11993 11989 + 11994 11989 11993 + 11989 11994 11995 + 11990 11989 11995 + 11996 11991 11872 + 11991 11996 11997 + 11997 11998 11991 + 11991 11998 11992 + 11992 11998 11999 + 11999 12000 11992 + 11993 11992 12000 + 11872 11871 11996 + 11996 11871 12001 + 12001 12002 11996 + 11997 11996 12002 + 12002 12003 11997 + 12004 11997 12003 + 11998 11997 12004 + 12004 11999 11998 + 11870 12001 11871 + 12005 12001 11870 + 12001 12005 12006 + 12006 12002 12001 + 12002 12006 12007 + 12007 12003 12002 + 12003 12007 12008 + 12008 12009 12003 + 12003 12009 12004 + 11870 11876 12005 + 12005 11876 12010 + 12010 12011 12005 + 12006 12005 12011 + 12011 12012 12006 + 12007 12006 12012 + 12012 12013 12007 + 12008 12007 12013 + 12014 12010 11876 + 12015 12010 12014 + 12010 12015 12016 + 12016 12011 12010 + 12011 12016 12017 + 12017 12012 12011 + 12012 12017 12018 + 12018 12013 12012 + 11876 11875 12014 + 11881 12014 11875 + 12019 12014 11881 + 12014 12019 12015 + 12020 12015 12019 + 12016 12015 12020 + 12020 12021 12016 + 12017 12016 12021 + 12021 12022 12017 + 12018 12017 12022 + 11881 12023 12019 + 12019 12023 12024 + 12024 12025 12019 + 12019 12025 12020 + 12026 12020 12025 + 12020 12026 12027 + 12027 12021 12020 + 12023 11881 11880 + 11880 12028 12023 + 12024 12023 12028 + 12028 12029 12024 + 12030 12024 12029 + 12025 12024 12030 + 12031 12025 12030 + 12025 12031 12026 + 11891 12028 11880 + 12028 11891 12032 + 12032 12029 12028 + 12033 12029 12032 + 12029 12033 12030 + 12030 12033 12034 + 12034 12035 12030 + 12031 12030 12035 + 12035 12036 12031 + 12026 12031 12036 + 11902 12032 11891 + 12037 12032 11902 + 12032 12037 12033 + 12033 12037 12038 + 12038 12039 12033 + 12033 12039 12034 + 11902 12040 12037 + 12038 12037 12040 + 12040 12041 12038 + 12042 12038 12041 + 12038 12042 12039 + 12039 12042 12043 + 12043 12034 12039 + 12040 11902 12044 + 12040 12044 12045 + 12045 12041 12040 + 12046 12041 12045 + 12041 12046 12042 + 12043 12042 12046 + 11936 12043 12046 + 11959 12043 11936 + 11959 12034 12043 + 12044 11902 11901 + 11901 11907 12044 + 12045 12044 11907 + 12047 12045 11907 + 12048 12045 12047 + 12045 12048 12046 + 12046 12048 11931 + 11931 11930 12046 + 12046 11930 11936 + 12049 12047 11907 + 12050 12047 12049 + 12051 12047 12050 + 12047 12051 12048 + 11931 12048 12051 + 12051 11926 11931 + 12051 12050 11926 + 12050 11917 11926 + 11917 12050 11912 + 11906 12049 11907 + 11912 12049 11906 + 12049 11912 12050 + 12034 11959 11964 + 11964 12035 12034 + 12035 11964 11973 + 11973 12036 12035 + 12036 11973 12052 + 12052 12053 12036 + 12036 12053 12026 + 12027 12026 12053 + 12052 11973 11972 + 11972 11978 12052 + 12054 12052 11978 + 12053 12052 12054 + 12054 12055 12053 + 12053 12055 12027 + 12056 12027 12055 + 12021 12027 12056 + 12056 12022 12021 + 11978 12057 12054 + 12058 12054 12057 + 12055 12054 12058 + 12058 12059 12055 + 12055 12059 12056 + 12060 12056 12059 + 12022 12056 12060 + 12060 12061 12022 + 12022 12061 12018 + 11977 12057 11978 + 12057 11977 12062 + 12062 12063 12057 + 12057 12063 12058 + 12064 12058 12063 + 12059 12058 12064 + 12064 12065 12059 + 12059 12065 12060 + 12066 12060 12065 + 12061 12060 12066 + 11982 12062 11977 + 12067 12062 11982 + 12063 12062 12067 + 12067 12068 12063 + 12063 12068 12064 + 12069 12064 12068 + 12065 12064 12069 + 12069 12070 12065 + 12065 12070 12066 + 11982 12071 12067 + 12072 12067 12071 + 12068 12067 12072 + 12072 12073 12068 + 12068 12073 12069 + 12073 12074 12069 + 12074 12075 12069 + 12075 12070 12069 + 11986 12071 11982 + 12071 11986 12076 + 12076 12077 12071 + 12071 12077 12072 + 12078 12072 12077 + 12078 12073 12072 + 12078 12074 12073 + 12074 12078 12079 + 12079 12080 12074 + 12075 12074 12080 + 12076 11986 11990 + 11990 11995 12076 + 12081 12076 11995 + 12081 12077 12076 + 12081 12082 12077 + 12077 12082 12078 + 12079 12078 12082 + 11995 12083 12081 + 12084 12081 12083 + 12084 12079 12081 + 12079 12082 12081 + 12083 11995 11994 + 12085 12083 11994 + 12084 12083 12085 + 12086 12084 12085 + 12084 12086 12087 + 12079 12084 12087 + 12087 12088 12079 + 12088 12080 12079 + 12080 12088 12089 + 12089 12075 12080 + 12075 12089 12070 + 12085 11994 12090 + 12090 12091 12085 + 12086 12085 12091 + 12086 12091 12092 + 12093 12086 12092 + 12086 12093 12087 + 11993 12090 11994 + 12000 12090 11993 + 12091 12090 12000 + 12092 12091 12000 + 12092 12000 11999 + 11999 12094 12092 + 12093 12092 12094 + 12095 12093 12094 + 12093 12095 12087 + 12096 12094 11999 + 12094 12096 12095 + 12095 12096 12097 + 12098 12095 12097 + 12095 12098 12087 + 12096 11999 12004 + 12097 12096 12004 + 12009 12097 12004 + 12099 12097 12009 + 12097 12099 12098 + 12098 12099 12100 + 12098 12100 12101 + 12087 12098 12101 + 12087 12101 12102 + 12087 12102 12103 + 12088 12087 12103 + 12088 12103 12089 + 12070 12089 12103 + 12099 12009 12008 + 12099 12008 12104 + 12104 12100 12099 + 12101 12100 12104 + 12101 12104 12105 + 12101 12105 12106 + 12106 12102 12101 + 12102 12106 12066 + 12103 12102 12066 + 12103 12066 12070 + 12013 12104 12008 + 12105 12104 12013 + 12013 12018 12105 + 12105 12018 12061 + 12061 12106 12105 + 12066 12106 12061 + 12107 12108 12109 + 12110 12109 12108 + 12109 12110 12111 + 12111 12112 12109 + 12109 12112 12113 + 12113 12114 12109 + 12109 12114 12115 + 12115 12116 12109 + 12116 12117 12109 + 12108 12118 12110 + 12119 12110 12118 + 12111 12110 12119 + 12119 12120 12111 + 12111 12120 12121 + 12121 12122 12111 + 12112 12111 12122 + 12108 12123 12118 + 12118 12123 12124 + 12124 12125 12118 + 12118 12125 12119 + 12123 12108 12126 + 12124 12123 12126 + 12126 12127 12124 + 12128 12124 12127 + 12128 12125 12124 + 12125 12128 12129 + 12129 12130 12125 + 12125 12130 12119 + 12108 12117 12126 + 12126 12117 12131 + 12126 12131 12132 + 12132 12127 12126 + 12127 12132 12133 + 12133 12134 12127 + 12127 12134 12128 + 12129 12128 12134 + 12131 12117 12116 + 12116 12135 12131 + 12131 12135 12136 + 12132 12131 12136 + 12136 12137 12132 + 12133 12132 12137 + 12137 12138 12133 + 12139 12133 12138 + 12134 12133 12139 + 12140 12135 12116 + 12135 12140 12141 + 12141 12136 12135 + 12141 12142 12136 + 12136 12142 12143 + 12143 12137 12136 + 12138 12137 12143 + 12140 12116 12115 + 12115 12144 12140 + 12140 12144 12145 + 12141 12140 12145 + 12145 12146 12141 + 12142 12141 12146 + 12146 12147 12142 + 12143 12142 12147 + 12148 12144 12115 + 12144 12148 12149 + 12149 12145 12144 + 12145 12149 12150 + 12150 12151 12145 + 12145 12151 12152 + 12152 12146 12145 + 12147 12146 12152 + 12148 12115 12114 + 12114 12153 12148 + 12148 12153 12154 + 12154 12149 12148 + 12150 12149 12154 + 12154 12155 12150 + 12150 12155 12156 + 12156 12157 12150 + 12151 12150 12157 + 12113 12153 12114 + 12153 12113 12158 + 12158 12159 12153 + 12153 12159 12154 + 12159 12160 12154 + 12161 12154 12160 + 12154 12161 12162 + 12162 12155 12154 + 12156 12155 12162 + 12163 12158 12113 + 12164 12158 12163 + 12158 12164 12159 + 12159 12164 12165 + 12165 12160 12159 + 12165 12166 12160 + 12160 12166 12161 + 12113 12112 12163 + 12122 12163 12112 + 12163 12122 12167 + 12163 12167 12164 + 12164 12167 12168 + 12165 12164 12168 + 12168 12169 12165 + 12166 12165 12169 + 12169 12170 12166 + 12161 12166 12170 + 12170 12171 12161 + 12162 12161 12171 + 12167 12122 12121 + 12121 12168 12167 + 12172 12168 12121 + 12168 12172 12173 + 12173 12169 12168 + 12170 12169 12173 + 12173 12174 12170 + 12170 12174 12175 + 12175 12171 12170 + 12121 12176 12172 + 12172 12176 12177 + 12177 12178 12172 + 12173 12172 12178 + 12178 12179 12173 + 12174 12173 12179 + 12179 12180 12174 + 12175 12174 12180 + 12176 12121 12120 + 12120 12181 12176 + 12176 12181 12182 + 12182 12177 12176 + 12183 12177 12182 + 12177 12183 12178 + 12178 12183 12184 + 12184 12179 12178 + 12180 12179 12184 + 12181 12120 12119 + 12119 12185 12181 + 12181 12185 12186 + 12186 12187 12181 + 12181 12187 12182 + 12185 12119 12130 + 12130 12188 12185 + 12188 12186 12185 + 12188 12189 12186 + 12189 12190 12186 + 12191 12186 12190 + 12186 12191 12192 + 12192 12187 12186 + 12188 12130 12129 + 12188 12129 12193 + 12188 12193 12189 + 12193 12194 12189 + 12189 12194 12195 + 12190 12189 12195 + 12196 12190 12195 + 12197 12190 12196 + 12190 12197 12191 + 12193 12129 12198 + 12198 12199 12193 + 12194 12193 12199 + 12200 12194 12199 + 12195 12194 12200 + 12200 12201 12195 + 12196 12195 12201 + 12198 12129 12134 + 12139 12198 12134 + 12199 12198 12139 + 12139 12202 12199 + 12199 12202 12203 + 12203 12200 12199 + 12200 12203 12204 + 12204 12201 12200 + 12201 12204 12205 + 12205 12206 12201 + 12201 12206 12196 + 12202 12139 12207 + 12207 12208 12202 + 12203 12202 12208 + 12208 12209 12203 + 12204 12203 12209 + 12209 12210 12204 + 12204 12210 12211 + 12211 12205 12204 + 12138 12207 12139 + 12212 12207 12138 + 12208 12207 12212 + 12212 12213 12208 + 12208 12213 12214 + 12214 12209 12208 + 12210 12209 12214 + 12214 12215 12210 + 12210 12215 12216 + 12216 12211 12210 + 12138 12217 12212 + 12212 12217 12218 + 12218 12219 12212 + 12213 12212 12219 + 12219 12220 12213 + 12214 12213 12220 + 12220 12221 12214 + 12215 12214 12221 + 12143 12217 12138 + 12217 12143 12222 + 12222 12218 12217 + 12218 12222 12223 + 12223 12224 12218 + 12218 12224 12225 + 12225 12219 12218 + 12220 12219 12225 + 12147 12222 12143 + 12223 12222 12147 + 12147 12226 12223 + 12223 12226 12227 + 12227 12228 12223 + 12224 12223 12228 + 12228 12229 12224 + 12225 12224 12229 + 12152 12226 12147 + 12226 12152 12230 + 12230 12227 12226 + 12227 12230 12231 + 12231 12232 12227 + 12227 12232 12233 + 12233 12228 12227 + 12229 12228 12233 + 12234 12230 12152 + 12231 12230 12234 + 12234 12235 12231 + 12236 12231 12235 + 12232 12231 12236 + 12236 12237 12232 + 12232 12237 12238 + 12238 12233 12232 + 12152 12151 12234 + 12157 12234 12151 + 12234 12157 12239 + 12239 12235 12234 + 12235 12239 12240 + 12240 12241 12235 + 12235 12241 12236 + 12242 12236 12241 + 12237 12236 12242 + 12239 12157 12156 + 12156 12243 12239 + 12240 12239 12243 + 12243 12244 12240 + 12245 12240 12244 + 12241 12240 12245 + 12245 12246 12241 + 12241 12246 12242 + 12247 12243 12156 + 12243 12247 12248 + 12248 12244 12243 + 12244 12248 12249 + 12249 12250 12244 + 12244 12250 12245 + 12251 12245 12250 + 12246 12245 12251 + 12156 12252 12247 + 12247 12252 12253 + 12253 12254 12247 + 12248 12247 12254 + 12254 12255 12248 + 12249 12248 12255 + 12252 12156 12162 + 12253 12252 12162 + 12162 12256 12253 + 12257 12253 12256 + 12253 12257 12258 + 12258 12254 12253 + 12254 12258 12259 + 12259 12255 12254 + 12171 12256 12162 + 12260 12256 12171 + 12256 12260 12257 + 12261 12257 12260 + 12258 12257 12261 + 12261 12262 12258 + 12259 12258 12262 + 12262 12263 12259 + 12264 12259 12263 + 12255 12259 12264 + 12171 12175 12260 + 12260 12175 12265 + 12265 12266 12260 + 12260 12266 12261 + 12267 12261 12266 + 12261 12267 12268 + 12268 12262 12261 + 12262 12268 12269 + 12269 12263 12262 + 12180 12265 12175 + 12270 12265 12180 + 12266 12265 12270 + 12270 12271 12266 + 12266 12271 12267 + 12272 12267 12271 + 12268 12267 12272 + 12272 12273 12268 + 12269 12268 12273 + 12180 12274 12270 + 12275 12270 12274 + 12271 12270 12275 + 12275 12276 12271 + 12271 12276 12272 + 12277 12272 12276 + 12272 12277 12278 + 12278 12273 12272 + 12184 12274 12180 + 12274 12184 12279 + 12279 12280 12274 + 12274 12280 12275 + 12281 12275 12280 + 12275 12281 12282 + 12282 12276 12275 + 12276 12282 12277 + 12283 12277 12282 + 12278 12277 12283 + 12284 12279 12184 + 12285 12279 12284 + 12280 12279 12285 + 12285 12286 12280 + 12280 12286 12281 + 12281 12286 12287 + 12287 12288 12281 + 12282 12281 12288 + 12184 12183 12284 + 12182 12284 12183 + 12289 12284 12182 + 12284 12289 12285 + 12290 12285 12289 + 12286 12285 12290 + 12290 12287 12286 + 12290 12291 12287 + 12287 12291 12292 + 12292 12288 12287 + 12293 12288 12292 + 12288 12293 12282 + 12282 12293 12283 + 12182 12294 12289 + 12289 12294 12295 + 12295 12296 12289 + 12289 12296 12290 + 12291 12290 12296 + 12296 12297 12291 + 12291 12297 12298 + 12292 12291 12298 + 12294 12182 12187 + 12187 12192 12294 + 12192 12299 12294 + 12299 12295 12294 + 12297 12295 12299 + 12295 12297 12296 + 12300 12299 12192 + 12299 12300 12301 + 12299 12301 12297 + 12297 12301 12298 + 12192 12191 12300 + 12300 12191 12197 + 12197 12302 12300 + 12301 12300 12302 + 12302 12303 12301 + 12303 12302 12304 + 12303 12304 12305 + 12303 12305 12298 + 12304 12302 12197 + 12197 12306 12304 + 12307 12304 12306 + 12304 12307 12305 + 12305 12307 12308 + 12305 12308 12309 + 12309 12298 12305 + 12196 12306 12197 + 12306 12196 12206 + 12206 12310 12306 + 12310 12307 12306 + 12308 12307 12310 + 12310 12311 12308 + 12308 12311 12312 + 12312 12309 12308 + 12313 12309 12312 + 12298 12309 12313 + 12310 12206 12205 + 12205 12311 12310 + 12311 12205 12211 + 12211 12312 12311 + 12216 12312 12211 + 12312 12216 12313 + 12313 12216 12314 + 12315 12313 12314 + 12298 12313 12315 + 12315 12316 12298 + 12298 12316 12292 + 12216 12215 12314 + 12221 12314 12215 + 12314 12221 12317 + 12317 12318 12314 + 12314 12318 12319 + 12319 12320 12314 + 12314 12320 12315 + 12317 12221 12220 + 12220 12321 12317 + 12317 12321 12322 + 12322 12323 12317 + 12318 12317 12323 + 12323 12324 12318 + 12319 12318 12324 + 12225 12321 12220 + 12321 12225 12325 + 12325 12322 12321 + 12322 12325 12326 + 12326 12327 12322 + 12322 12327 12328 + 12328 12323 12322 + 12324 12323 12328 + 12229 12325 12225 + 12326 12325 12229 + 12229 12329 12326 + 12330 12326 12329 + 12327 12326 12330 + 12330 12331 12327 + 12328 12327 12331 + 12331 12332 12328 + 12333 12328 12332 + 12328 12333 12324 + 12233 12329 12229 + 12329 12233 12238 + 12238 12334 12329 + 12329 12334 12330 + 12335 12330 12334 + 12331 12330 12335 + 12335 12336 12331 + 12331 12336 12337 + 12337 12332 12331 + 12338 12332 12337 + 12332 12338 12333 + 12334 12238 12339 + 12339 12340 12334 + 12334 12340 12335 + 12341 12335 12340 + 12336 12335 12341 + 12341 12342 12336 + 12336 12342 12343 + 12343 12337 12336 + 12339 12238 12237 + 12237 12344 12339 + 12345 12339 12344 + 12340 12339 12345 + 12345 12346 12340 + 12340 12346 12341 + 12347 12341 12346 + 12342 12341 12347 + 12242 12344 12237 + 12344 12242 12348 + 12348 12349 12344 + 12344 12349 12345 + 12350 12345 12349 + 12346 12345 12350 + 12350 12351 12346 + 12346 12351 12347 + 12348 12242 12246 + 12246 12352 12348 + 12353 12348 12352 + 12349 12348 12353 + 12353 12354 12349 + 12349 12354 12350 + 12355 12350 12354 + 12351 12350 12355 + 12251 12352 12246 + 12352 12251 12356 + 12356 12357 12352 + 12352 12357 12353 + 12358 12353 12357 + 12354 12353 12358 + 12358 12359 12354 + 12354 12359 12355 + 12356 12251 12360 + 12360 12361 12356 + 12362 12356 12361 + 12357 12356 12362 + 12362 12363 12357 + 12357 12363 12358 + 12364 12358 12363 + 12359 12358 12364 + 12250 12360 12251 + 12365 12360 12250 + 12360 12365 12366 + 12366 12361 12360 + 12361 12366 12367 + 12367 12368 12361 + 12361 12368 12362 + 12369 12362 12368 + 12363 12362 12369 + 12250 12249 12365 + 12365 12249 12370 + 12370 12371 12365 + 12366 12365 12371 + 12371 12372 12366 + 12367 12366 12372 + 12372 12373 12367 + 12374 12367 12373 + 12368 12367 12374 + 12255 12370 12249 + 12264 12370 12255 + 12370 12264 12375 + 12375 12371 12370 + 12371 12375 12376 + 12376 12372 12371 + 12372 12376 12377 + 12377 12373 12372 + 12373 12377 12378 + 12378 12379 12373 + 12373 12379 12374 + 12375 12264 12380 + 12380 12381 12375 + 12376 12375 12381 + 12381 12382 12376 + 12376 12382 12383 + 12383 12377 12376 + 12378 12377 12383 + 12263 12380 12264 + 12384 12380 12263 + 12380 12384 12385 + 12385 12381 12380 + 12381 12385 12386 + 12386 12382 12381 + 12382 12386 12387 + 12387 12383 12382 + 12263 12269 12384 + 12384 12269 12388 + 12388 12389 12384 + 12385 12384 12389 + 12389 12390 12385 + 12386 12385 12390 + 12390 12391 12386 + 12387 12386 12391 + 12273 12388 12269 + 12392 12388 12273 + 12388 12392 12393 + 12393 12389 12388 + 12389 12393 12394 + 12394 12390 12389 + 12390 12394 12395 + 12395 12391 12390 + 12273 12278 12392 + 12392 12278 12396 + 12396 12397 12392 + 12393 12392 12397 + 12397 12398 12393 + 12394 12393 12398 + 12398 12399 12394 + 12395 12394 12399 + 12283 12396 12278 + 12400 12396 12283 + 12396 12400 12401 + 12401 12397 12396 + 12397 12401 12402 + 12402 12398 12397 + 12398 12402 12403 + 12403 12399 12398 + 12283 12404 12400 + 12400 12404 12405 + 12405 12406 12400 + 12401 12400 12406 + 12406 12407 12401 + 12402 12401 12407 + 12404 12283 12293 + 12293 12408 12404 + 12404 12408 12409 + 12405 12404 12409 + 12409 12410 12405 + 12411 12405 12410 + 12405 12411 12412 + 12412 12406 12405 + 12292 12408 12293 + 12408 12292 12316 + 12316 12409 12408 + 12316 12315 12409 + 12409 12315 12413 + 12413 12410 12409 + 12413 12414 12410 + 12410 12414 12411 + 12415 12411 12414 + 12412 12411 12415 + 12415 12416 12412 + 12417 12412 12416 + 12406 12412 12417 + 12417 12407 12406 + 12320 12413 12315 + 12414 12413 12320 + 12320 12418 12414 + 12414 12418 12415 + 12419 12415 12418 + 12415 12419 12420 + 12420 12416 12415 + 12416 12420 12421 + 12421 12422 12416 + 12416 12422 12417 + 12319 12418 12320 + 12418 12319 12419 + 12324 12419 12319 + 12420 12419 12324 + 12324 12333 12420 + 12421 12420 12333 + 12333 12338 12421 + 12423 12421 12338 + 12422 12421 12423 + 12423 12424 12422 + 12422 12424 12425 + 12425 12417 12422 + 12407 12417 12425 + 12425 12426 12407 + 12407 12426 12402 + 12338 12427 12423 + 12428 12423 12427 + 12424 12423 12428 + 12428 12429 12424 + 12424 12429 12430 + 12430 12425 12424 + 12426 12425 12430 + 12430 12431 12426 + 12402 12426 12431 + 12431 12403 12402 + 12337 12427 12338 + 12427 12337 12343 + 12343 12432 12427 + 12427 12432 12428 + 12433 12428 12432 + 12429 12428 12433 + 12433 12434 12429 + 12429 12434 12435 + 12435 12430 12429 + 12431 12430 12435 + 12432 12343 12436 + 12436 12437 12432 + 12432 12437 12433 + 12438 12433 12437 + 12434 12433 12438 + 12438 12439 12434 + 12434 12439 12440 + 12440 12435 12434 + 12436 12343 12342 + 12342 12441 12436 + 12442 12436 12441 + 12437 12436 12442 + 12442 12443 12437 + 12437 12443 12438 + 12444 12438 12443 + 12439 12438 12444 + 12347 12441 12342 + 12441 12347 12445 + 12445 12446 12441 + 12441 12446 12442 + 12447 12442 12446 + 12443 12442 12447 + 12447 12448 12443 + 12443 12448 12444 + 12445 12347 12351 + 12351 12449 12445 + 12450 12445 12449 + 12446 12445 12450 + 12450 12451 12446 + 12446 12451 12447 + 12452 12447 12451 + 12448 12447 12452 + 12355 12449 12351 + 12449 12355 12453 + 12453 12454 12449 + 12449 12454 12450 + 12455 12450 12454 + 12451 12450 12455 + 12455 12456 12451 + 12451 12456 12452 + 12453 12355 12359 + 12359 12457 12453 + 12458 12453 12457 + 12454 12453 12458 + 12458 12459 12454 + 12454 12459 12455 + 12460 12455 12459 + 12456 12455 12460 + 12460 12461 12456 + 12452 12456 12461 + 12364 12457 12359 + 12457 12364 12462 + 12462 12463 12457 + 12457 12463 12458 + 12464 12458 12463 + 12459 12458 12464 + 12464 12465 12459 + 12459 12465 12460 + 12460 12465 12466 + 12461 12460 12466 + 12467 12462 12364 + 12468 12462 12467 + 12462 12468 12469 + 12463 12462 12469 + 12463 12469 12464 + 12464 12469 12470 + 12465 12464 12470 + 12470 12466 12465 + 12364 12471 12467 + 12472 12467 12471 + 12467 12472 12473 + 12473 12474 12467 + 12467 12474 12468 + 12363 12471 12364 + 12369 12471 12363 + 12471 12369 12472 + 12472 12369 12475 + 12475 12476 12472 + 12476 12477 12472 + 12477 12473 12472 + 12473 12477 12478 + 12474 12473 12478 + 12478 12479 12474 + 12468 12474 12479 + 12368 12475 12369 + 12374 12475 12368 + 12475 12374 12480 + 12480 12476 12475 + 12476 12480 12481 + 12481 12477 12476 + 12477 12481 12482 + 12482 12478 12477 + 12478 12482 12483 + 12479 12478 12483 + 12470 12479 12483 + 12468 12479 12470 + 12469 12468 12470 + 12480 12374 12379 + 12379 12484 12480 + 12484 12485 12480 + 12485 12481 12480 + 12481 12485 12482 + 12483 12482 12485 + 12486 12484 12379 + 12484 12486 12487 + 12487 12485 12484 + 12485 12487 12483 + 12379 12378 12486 + 12486 12378 12488 + 12488 12489 12486 + 12489 12490 12486 + 12490 12487 12486 + 12487 12490 12483 + 12383 12488 12378 + 12491 12488 12383 + 12488 12491 12492 + 12492 12489 12488 + 12489 12492 12493 + 12493 12490 12489 + 12490 12493 12494 + 12494 12483 12490 + 12383 12387 12491 + 12491 12387 12495 + 12495 12496 12491 + 12492 12491 12496 + 12496 12497 12492 + 12497 12498 12492 + 12498 12493 12492 + 12493 12498 12494 + 12391 12495 12387 + 12499 12495 12391 + 12495 12499 12500 + 12500 12496 12495 + 12496 12500 12501 + 12501 12497 12496 + 12497 12501 12502 + 12502 12498 12497 + 12498 12502 12494 + 12391 12395 12499 + 12499 12395 12503 + 12503 12504 12499 + 12500 12499 12504 + 12504 12505 12500 + 12501 12500 12505 + 12505 12506 12501 + 12502 12501 12506 + 12399 12503 12395 + 12507 12503 12399 + 12503 12507 12508 + 12508 12504 12503 + 12504 12508 12509 + 12509 12505 12504 + 12505 12509 12510 + 12510 12506 12505 + 12399 12403 12507 + 12507 12403 12431 + 12431 12511 12507 + 12508 12507 12511 + 12511 12512 12508 + 12509 12508 12512 + 12512 12513 12509 + 12510 12509 12513 + 12513 12514 12510 + 12515 12510 12514 + 12506 12510 12515 + 12435 12511 12431 + 12511 12435 12440 + 12440 12512 12511 + 12512 12440 12516 + 12516 12513 12512 + 12513 12516 12517 + 12517 12514 12513 + 12514 12517 12518 + 12518 12519 12514 + 12514 12519 12515 + 12516 12440 12439 + 12439 12520 12516 + 12517 12516 12520 + 12520 12521 12517 + 12521 12522 12517 + 12522 12518 12517 + 12523 12518 12522 + 12518 12523 12524 + 12519 12518 12524 + 12515 12519 12524 + 12444 12520 12439 + 12520 12444 12525 + 12525 12521 12520 + 12521 12525 12526 + 12526 12522 12521 + 12522 12526 12527 + 12527 12523 12522 + 12525 12444 12448 + 12448 12528 12525 + 12528 12529 12525 + 12529 12526 12525 + 12526 12529 12527 + 12530 12527 12529 + 12527 12530 12466 + 12523 12527 12466 + 12452 12528 12448 + 12528 12452 12531 + 12531 12529 12528 + 12529 12531 12530 + 12531 12461 12530 + 12466 12530 12461 + 12531 12452 12461 + 12466 12470 12483 + 12523 12466 12483 + 12483 12494 12523 + 12494 12532 12523 + 12532 12524 12523 + 12524 12532 12533 + 12533 12515 12524 + 12515 12533 12506 + 12506 12533 12502 + 12502 12532 12494 + 12502 12533 12532 + 12534 12535 12536 + 12537 12535 12534 + 12537 12538 12535 + 12538 12539 12535 + 12535 12539 12540 + 12540 12541 12535 + 12535 12541 12542 + 12534 12543 12537 + 12537 12543 12544 + 12544 12545 12537 + 12545 12546 12537 + 12546 12538 12537 + 12547 12538 12546 + 12539 12538 12547 + 12543 12534 12548 + 12543 12548 12549 + 12549 12544 12543 + 12544 12549 12550 + 12550 12551 12544 + 12544 12551 12552 + 12552 12545 12544 + 12552 12546 12545 + 12548 12534 12553 + 12553 12554 12548 + 12548 12554 12555 + 12555 12556 12548 + 12556 12549 12548 + 12550 12549 12556 + 12553 12534 12542 + 12557 12553 12542 + 12558 12553 12557 + 12558 12554 12553 + 12554 12558 12559 + 12559 12555 12554 + 12560 12555 12559 + 12555 12560 12561 + 12561 12556 12555 + 12542 12562 12557 + 12563 12557 12562 + 12564 12557 12563 + 12557 12564 12558 + 12559 12558 12564 + 12564 12565 12559 + 12566 12559 12565 + 12559 12566 12560 + 12567 12562 12542 + 12562 12567 12568 + 12568 12569 12562 + 12562 12569 12563 + 12542 12570 12567 + 12571 12567 12570 + 12568 12567 12571 + 12571 12572 12568 + 12568 12572 12573 + 12573 12574 12568 + 12569 12568 12574 + 12575 12570 12542 + 12570 12575 12576 + 12576 12577 12570 + 12570 12577 12571 + 12578 12571 12577 + 12571 12578 12579 + 12579 12572 12571 + 12575 12542 12580 + 12580 12581 12575 + 12575 12581 12582 + 12576 12575 12582 + 12541 12580 12542 + 12583 12580 12541 + 12583 12581 12580 + 12581 12583 12584 + 12584 12582 12581 + 12541 12585 12583 + 12583 12585 12586 + 12586 12584 12583 + 12587 12584 12586 + 12582 12584 12587 + 12588 12585 12541 + 12585 12588 12589 + 12589 12586 12585 + 12586 12589 12590 + 12590 12591 12586 + 12586 12591 12587 + 12541 12540 12588 + 12588 12540 12592 + 12592 12593 12588 + 12589 12588 12593 + 12593 12594 12589 + 12590 12589 12594 + 12592 12540 12539 + 12539 12595 12592 + 12596 12592 12595 + 12592 12596 12597 + 12597 12593 12592 + 12593 12597 12598 + 12598 12594 12593 + 12547 12595 12539 + 12599 12595 12547 + 12595 12599 12596 + 12600 12596 12599 + 12597 12596 12600 + 12600 12601 12597 + 12597 12601 12602 + 12602 12598 12597 + 12603 12598 12602 + 12594 12598 12603 + 12547 12604 12599 + 12599 12604 12605 + 12605 12606 12599 + 12599 12606 12607 + 12607 12600 12599 + 12604 12547 12608 + 12608 12609 12604 + 12605 12604 12609 + 12609 12610 12605 + 12611 12605 12610 + 12605 12611 12612 + 12612 12606 12605 + 12546 12608 12547 + 12613 12608 12546 + 12609 12608 12613 + 12613 12614 12609 + 12609 12614 12615 + 12615 12610 12609 + 12616 12610 12615 + 12610 12616 12611 + 12617 12611 12616 + 12612 12611 12617 + 12546 12618 12613 + 12619 12613 12618 + 12614 12613 12619 + 12619 12620 12614 + 12615 12614 12620 + 12620 12621 12615 + 12622 12615 12621 + 12615 12622 12616 + 12552 12618 12546 + 12618 12552 12623 + 12623 12624 12618 + 12618 12624 12619 + 12624 12625 12619 + 12625 12626 12619 + 12620 12619 12626 + 12626 12627 12620 + 12621 12620 12627 + 12628 12623 12552 + 12623 12628 12629 + 12630 12623 12629 + 12624 12623 12630 + 12630 12625 12624 + 12625 12630 12631 + 12631 12632 12625 + 12626 12625 12632 + 12552 12551 12628 + 12633 12628 12551 + 12628 12633 12634 + 12634 12629 12628 + 12629 12634 12635 + 12635 12636 12629 + 12630 12629 12636 + 12636 12631 12630 + 12637 12631 12636 + 12637 12632 12631 + 12551 12550 12633 + 12638 12633 12550 + 12634 12633 12638 + 12638 12639 12634 + 12634 12639 12640 + 12640 12635 12634 + 12635 12640 12641 + 12642 12635 12641 + 12642 12636 12635 + 12550 12643 12638 + 12644 12638 12643 + 12638 12644 12645 + 12645 12639 12638 + 12640 12639 12645 + 12646 12640 12645 + 12647 12640 12646 + 12647 12641 12640 + 12556 12643 12550 + 12648 12643 12556 + 12643 12648 12644 + 12649 12644 12648 + 12645 12644 12649 + 12649 12650 12645 + 12646 12645 12650 + 12650 12651 12646 + 12651 12652 12646 + 12652 12647 12646 + 12556 12561 12648 + 12648 12561 12653 + 12653 12654 12648 + 12648 12654 12649 + 12649 12654 12655 + 12656 12649 12655 + 12650 12649 12656 + 12657 12650 12656 + 12651 12650 12657 + 12653 12561 12560 + 12560 12658 12653 + 12659 12653 12658 + 12654 12653 12659 + 12655 12654 12659 + 12655 12659 12660 + 12660 12661 12655 + 12655 12661 12656 + 12661 12662 12656 + 12657 12656 12662 + 12663 12658 12560 + 12664 12658 12663 + 12658 12664 12659 + 12660 12659 12664 + 12664 12665 12660 + 12666 12660 12665 + 12660 12666 12667 + 12667 12661 12660 + 12662 12661 12667 + 12560 12566 12663 + 12663 12566 12668 + 12668 12669 12663 + 12670 12663 12669 + 12663 12670 12664 + 12664 12670 12671 + 12671 12665 12664 + 12672 12665 12671 + 12665 12672 12666 + 12565 12668 12566 + 12668 12565 12673 + 12673 12674 12668 + 12668 12674 12675 + 12675 12669 12668 + 12676 12669 12675 + 12669 12676 12670 + 12671 12670 12676 + 12673 12565 12564 + 12564 12677 12673 + 12673 12677 12678 + 12678 12679 12673 + 12674 12673 12679 + 12679 12680 12674 + 12675 12674 12680 + 12563 12677 12564 + 12677 12563 12681 + 12681 12678 12677 + 12678 12681 12682 + 12682 12683 12678 + 12678 12683 12684 + 12684 12679 12678 + 12679 12684 12685 + 12685 12680 12679 + 12686 12681 12563 + 12682 12681 12686 + 12563 12569 12686 + 12574 12686 12569 + 12686 12574 12687 + 12687 12688 12686 + 12686 12688 12682 + 12687 12574 12573 + 12573 12689 12687 + 12687 12689 12690 + 12690 12691 12687 + 12688 12687 12691 + 12691 12692 12688 + 12682 12688 12692 + 12689 12573 12693 + 12693 12694 12689 + 12689 12694 12695 + 12695 12690 12689 + 12696 12690 12695 + 12690 12696 12697 + 12697 12691 12690 + 12692 12691 12697 + 12693 12573 12572 + 12572 12579 12693 + 12698 12693 12579 + 12694 12693 12698 + 12698 12699 12694 + 12694 12699 12700 + 12700 12701 12694 + 12701 12695 12694 + 12702 12695 12701 + 12702 12696 12695 + 12579 12703 12698 + 12704 12698 12703 + 12698 12704 12705 + 12705 12699 12698 + 12699 12705 12706 + 12706 12700 12699 + 12707 12703 12579 + 12708 12703 12707 + 12703 12708 12704 + 12704 12708 12709 + 12709 12710 12704 + 12705 12704 12710 + 12579 12578 12707 + 12711 12707 12578 + 12712 12707 12711 + 12707 12712 12708 + 12708 12712 12713 + 12713 12714 12708 + 12708 12714 12709 + 12578 12715 12711 + 12716 12711 12715 + 12717 12711 12716 + 12711 12717 12712 + 12712 12717 12718 + 12713 12712 12718 + 12577 12715 12578 + 12715 12577 12576 + 12576 12719 12715 + 12715 12719 12716 + 12716 12719 12720 + 12720 12721 12716 + 12722 12716 12721 + 12716 12722 12717 + 12719 12576 12723 + 12723 12720 12719 + 12720 12723 12724 + 12724 12725 12720 + 12720 12725 12726 + 12726 12721 12720 + 12727 12721 12726 + 12721 12727 12722 + 12582 12723 12576 + 12724 12723 12582 + 12582 12728 12724 + 12724 12728 12729 + 12729 12730 12724 + 12725 12724 12730 + 12730 12731 12725 + 12726 12725 12731 + 12587 12728 12582 + 12728 12587 12732 + 12732 12729 12728 + 12729 12732 12733 + 12733 12734 12729 + 12730 12729 12734 + 12735 12730 12734 + 12731 12730 12735 + 12736 12732 12587 + 12732 12736 12737 + 12733 12732 12737 + 12738 12733 12737 + 12734 12733 12738 + 12738 12739 12734 + 12735 12734 12739 + 12587 12591 12736 + 12740 12736 12591 + 12737 12736 12740 + 12741 12737 12740 + 12742 12737 12741 + 12737 12742 12738 + 12742 12743 12738 + 12743 12744 12738 + 12744 12739 12738 + 12591 12590 12740 + 12745 12740 12590 + 12741 12740 12745 + 12745 12746 12741 + 12741 12746 12747 + 12747 12742 12741 + 12748 12742 12747 + 12748 12743 12742 + 12590 12749 12745 + 12750 12745 12749 + 12745 12750 12751 + 12751 12746 12745 + 12752 12746 12751 + 12746 12752 12747 + 12748 12747 12752 + 12594 12749 12590 + 12603 12749 12594 + 12749 12603 12750 + 12753 12750 12603 + 12751 12750 12753 + 12753 12754 12751 + 12751 12754 12755 + 12755 12752 12751 + 12756 12752 12755 + 12756 12757 12752 + 12752 12757 12748 + 12603 12758 12753 + 12759 12753 12758 + 12754 12753 12759 + 12760 12754 12759 + 12761 12754 12760 + 12754 12761 12755 + 12755 12761 12762 + 12756 12755 12762 + 12602 12758 12603 + 12763 12758 12602 + 12758 12763 12759 + 12764 12759 12763 + 12760 12759 12764 + 12764 12765 12760 + 12760 12765 12766 + 12766 12767 12760 + 12767 12761 12760 + 12602 12768 12763 + 12763 12768 12769 + 12769 12770 12763 + 12763 12770 12764 + 12771 12764 12770 + 12772 12764 12771 + 12772 12765 12764 + 12768 12602 12601 + 12601 12773 12768 + 12769 12768 12773 + 12773 12774 12769 + 12775 12769 12774 + 12769 12775 12776 + 12776 12770 12769 + 12770 12776 12771 + 12773 12601 12600 + 12600 12777 12773 + 12773 12777 12778 + 12778 12774 12773 + 12779 12774 12778 + 12774 12779 12775 + 12727 12775 12779 + 12776 12775 12727 + 12727 12780 12776 + 12771 12776 12780 + 12777 12600 12781 + 12781 12782 12777 + 12782 12778 12777 + 12778 12782 12718 + 12783 12778 12718 + 12778 12783 12779 + 12600 12607 12781 + 12781 12607 12784 + 12784 12785 12781 + 12781 12785 12786 + 12786 12782 12781 + 12718 12782 12786 + 12784 12607 12787 + 12787 12788 12784 + 12784 12788 12789 + 12789 12790 12784 + 12785 12784 12790 + 12790 12791 12785 + 12786 12785 12791 + 12606 12787 12607 + 12606 12612 12787 + 12612 12792 12787 + 12787 12792 12793 + 12793 12788 12787 + 12788 12793 12794 + 12794 12789 12788 + 12792 12612 12795 + 12796 12792 12795 + 12793 12792 12796 + 12796 12797 12793 + 12793 12797 12798 + 12798 12794 12793 + 12799 12794 12798 + 12789 12794 12799 + 12617 12795 12612 + 12800 12795 12617 + 12795 12800 12801 + 12801 12796 12795 + 12802 12796 12801 + 12802 12797 12796 + 12798 12797 12802 + 12803 12798 12802 + 12804 12798 12803 + 12798 12804 12799 + 12617 12805 12800 + 12800 12805 12672 + 12672 12806 12800 + 12800 12806 12807 + 12801 12800 12807 + 12808 12801 12807 + 12802 12801 12808 + 12805 12617 12809 + 12809 12810 12805 + 12805 12810 12666 + 12666 12672 12805 + 12616 12809 12617 + 12811 12809 12616 + 12811 12810 12809 + 12811 12812 12810 + 12810 12812 12667 + 12667 12666 12810 + 12616 12622 12811 + 12811 12622 12813 + 12813 12814 12811 + 12814 12815 12811 + 12815 12812 12811 + 12667 12812 12815 + 12815 12816 12667 + 12816 12662 12667 + 12621 12813 12622 + 12813 12621 12817 + 12817 12818 12813 + 12813 12818 12819 + 12819 12814 12813 + 12819 12820 12814 + 12820 12815 12814 + 12815 12820 12821 + 12821 12816 12815 + 12817 12621 12627 + 12817 12627 12822 + 12822 12823 12817 + 12818 12817 12823 + 12823 12824 12818 + 12819 12818 12824 + 12824 12825 12819 + 12825 12826 12819 + 12826 12820 12819 + 12827 12822 12627 + 12828 12822 12827 + 12828 12829 12822 + 12823 12822 12829 + 12830 12823 12829 + 12830 12824 12823 + 12627 12626 12827 + 12632 12827 12626 + 12827 12632 12831 + 12828 12827 12831 + 12832 12828 12831 + 12829 12828 12832 + 12832 12833 12829 + 12830 12829 12833 + 12833 12834 12830 + 12834 12835 12830 + 12830 12835 12824 + 12637 12831 12632 + 12831 12637 12836 + 12836 12837 12831 + 12832 12831 12837 + 12838 12832 12837 + 12833 12832 12838 + 12838 12834 12833 + 12834 12838 12839 + 12839 12835 12834 + 12824 12835 12839 + 12839 12825 12824 + 12839 12826 12825 + 12637 12840 12836 + 12840 12841 12836 + 12842 12836 12841 + 12836 12842 12843 + 12843 12837 12836 + 12837 12843 12838 + 12844 12838 12843 + 12838 12844 12839 + 12839 12844 12826 + 12636 12840 12637 + 12642 12840 12636 + 12840 12642 12841 + 12642 12845 12841 + 12841 12845 12846 + 12846 12847 12841 + 12841 12847 12842 + 12641 12845 12642 + 12846 12845 12641 + 12641 12647 12846 + 12846 12647 12652 + 12847 12846 12652 + 12652 12848 12847 + 12842 12847 12848 + 12848 12849 12842 + 12842 12849 12850 + 12843 12842 12850 + 12850 12844 12843 + 12850 12851 12844 + 12851 12826 12844 + 12820 12826 12851 + 12848 12652 12651 + 12848 12651 12852 + 12848 12852 12853 + 12853 12849 12848 + 12850 12849 12853 + 12850 12853 12851 + 12851 12853 12821 + 12821 12820 12851 + 12852 12651 12657 + 12657 12854 12852 + 12854 12853 12852 + 12853 12854 12821 + 12821 12854 12816 + 12854 12662 12816 + 12662 12854 12657 + 12671 12806 12672 + 12806 12671 12855 + 12855 12807 12806 + 12676 12855 12671 + 12856 12855 12676 + 12807 12855 12856 + 12856 12857 12807 + 12807 12857 12858 + 12858 12859 12807 + 12807 12859 12808 + 12676 12860 12856 + 12861 12856 12860 + 12857 12856 12861 + 12861 12862 12857 + 12858 12857 12862 + 12675 12860 12676 + 12860 12675 12863 + 12863 12864 12860 + 12860 12864 12861 + 12864 12865 12861 + 12866 12861 12865 + 12862 12861 12866 + 12680 12863 12675 + 12867 12863 12680 + 12863 12867 12868 + 12868 12864 12863 + 12864 12868 12869 + 12869 12865 12864 + 12869 12870 12865 + 12865 12870 12866 + 12680 12685 12867 + 12871 12867 12685 + 12868 12867 12871 + 12871 12872 12868 + 12868 12872 12873 + 12873 12869 12868 + 12870 12869 12873 + 12873 12874 12870 + 12866 12870 12874 + 12875 12866 12874 + 12862 12866 12875 + 12685 12876 12871 + 12877 12871 12876 + 12871 12877 12878 + 12878 12872 12871 + 12872 12878 12879 + 12879 12873 12872 + 12873 12879 12880 + 12880 12874 12873 + 12881 12876 12685 + 12881 12882 12876 + 12876 12882 12877 + 12877 12882 12883 + 12883 12884 12877 + 12878 12877 12884 + 12884 12885 12878 + 12879 12878 12885 + 12685 12684 12881 + 12881 12684 12683 + 12683 12886 12881 + 12882 12881 12886 + 12886 12887 12882 + 12882 12887 12883 + 12888 12883 12887 + 12889 12883 12888 + 12883 12889 12890 + 12890 12884 12883 + 12885 12884 12890 + 12891 12886 12683 + 12887 12886 12891 + 12887 12891 12888 + 12888 12891 12682 + 12892 12888 12682 + 12889 12888 12892 + 12892 12893 12889 + 12893 12894 12889 + 12894 12890 12889 + 12683 12682 12891 + 12892 12895 12893 + 12895 12892 12896 + 12896 12897 12895 + 12895 12897 12898 + 12899 12895 12898 + 12892 12692 12896 + 12697 12896 12692 + 12896 12697 12900 + 12900 12897 12896 + 12897 12900 12901 + 12901 12898 12897 + 12902 12898 12901 + 12692 12892 12682 + 12899 12898 12903 + 12903 12904 12899 + 12893 12899 12904 + 12904 12894 12893 + 12894 12904 12905 + 12894 12905 12890 + 12905 12906 12890 + 12890 12906 12885 + 12905 12904 12903 + 12903 12907 12905 + 12906 12905 12907 + 12907 12908 12906 + 12885 12906 12908 + 12908 12909 12885 + 12885 12909 12879 + 12880 12879 12909 + 12910 12907 12903 + 12907 12910 12911 + 12911 12908 12907 + 12908 12911 12912 + 12912 12909 12908 + 12909 12912 12880 + 12880 12912 12913 + 12913 12914 12880 + 12874 12880 12914 + 12903 12915 12910 + 12910 12915 12916 + 12916 12917 12910 + 12910 12917 12918 + 12918 12911 12910 + 12912 12911 12918 + 12918 12913 12912 + 12919 12915 12903 + 12920 12915 12919 + 12920 12916 12915 + 12921 12916 12920 + 12917 12916 12921 + 12917 12921 12922 + 12922 12923 12917 + 12917 12923 12918 + 12902 12919 12903 + 12924 12919 12902 + 12919 12924 12925 + 12925 12920 12919 + 12926 12920 12925 + 12920 12926 12921 + 12921 12926 12927 + 12927 12922 12921 + 12924 12902 12901 + 12925 12924 12901 + 12901 12928 12925 + 12929 12925 12928 + 12925 12929 12926 + 12926 12929 12927 + 12930 12928 12901 + 12931 12928 12930 + 12928 12931 12929 + 12932 12929 12931 + 12929 12932 12927 + 12901 12900 12930 + 12930 12900 12697 + 12697 12696 12930 + 12933 12930 12696 + 12930 12933 12931 + 12931 12933 12934 + 12931 12934 12932 + 12932 12934 12935 + 12936 12932 12935 + 12932 12936 12927 + 12696 12702 12933 + 12937 12933 12702 + 12933 12937 12934 + 12935 12934 12937 + 12937 12938 12935 + 12935 12938 12939 + 12939 12940 12935 + 12936 12935 12940 + 12702 12941 12937 + 12938 12937 12941 + 12941 12942 12938 + 12938 12942 12943 + 12943 12944 12938 + 12944 12945 12938 + 12945 12939 12938 + 12701 12941 12702 + 12942 12941 12701 + 12942 12701 12700 + 12700 12943 12942 + 12946 12943 12700 + 12943 12946 12947 + 12947 12944 12943 + 12944 12947 12948 + 12948 12949 12944 + 12944 12949 12950 + 12950 12945 12944 + 12700 12706 12946 + 12946 12706 12951 + 12951 12952 12946 + 12946 12952 12953 + 12953 12947 12946 + 12948 12947 12953 + 12954 12951 12706 + 12955 12951 12954 + 12955 12952 12951 + 12952 12955 12956 + 12956 12953 12952 + 12957 12953 12956 + 12953 12957 12948 + 12706 12705 12954 + 12705 12958 12954 + 12959 12954 12958 + 12960 12954 12959 + 12954 12960 12955 + 12960 12961 12955 + 12961 12956 12955 + 12962 12956 12961 + 12956 12962 12957 + 12710 12958 12705 + 12958 12710 12963 + 12958 12963 12959 + 12964 12959 12963 + 12965 12959 12964 + 12959 12965 12960 + 12960 12965 12966 + 12966 12961 12960 + 12963 12710 12709 + 12709 12967 12963 + 12963 12967 12964 + 12967 12709 12968 + 12967 12968 12969 + 12969 12970 12967 + 12967 12970 12964 + 12968 12709 12714 + 12714 12971 12968 + 12968 12971 12972 + 12972 12969 12968 + 12973 12969 12972 + 12973 12970 12969 + 12970 12973 12974 + 12974 12975 12970 + 12970 12975 12964 + 12971 12714 12713 + 12713 12976 12971 + 12971 12976 12977 + 12977 12978 12971 + 12971 12978 12972 + 12979 12972 12978 + 12980 12972 12979 + 12972 12980 12973 + 12974 12973 12980 + 12976 12713 12981 + 12981 12982 12976 + 12977 12976 12982 + 12982 12983 12977 + 12984 12977 12983 + 12977 12984 12985 + 12985 12978 12977 + 12978 12985 12979 + 12718 12981 12713 + 12986 12981 12718 + 12982 12981 12986 + 12986 12987 12982 + 12982 12987 12988 + 12988 12983 12982 + 12989 12983 12988 + 12983 12989 12984 + 12990 12984 12989 + 12985 12984 12990 + 12718 12991 12986 + 12986 12991 12992 + 12992 12993 12986 + 12987 12986 12993 + 12993 12994 12987 + 12988 12987 12994 + 12786 12991 12718 + 12991 12786 12995 + 12995 12992 12991 + 12992 12995 12996 + 12996 12997 12992 + 12992 12997 12998 + 12998 12993 12992 + 12994 12993 12998 + 12791 12995 12786 + 12996 12995 12791 + 12791 12999 12996 + 13000 12996 12999 + 12997 12996 13000 + 13000 13001 12997 + 12998 12997 13001 + 13001 13002 12998 + 13003 12998 13002 + 12998 13003 12994 + 13004 12999 12791 + 12999 13004 13005 + 13005 13006 12999 + 12999 13006 13000 + 13006 13007 13000 + 13007 13008 13000 + 13001 13000 13008 + 12791 12790 13004 + 13004 12790 12789 + 12789 13009 13004 + 13004 13009 13010 + 13010 13005 13004 + 13005 13010 13011 + 13012 13005 13011 + 13006 13005 13012 + 13012 13007 13006 + 12799 13009 12789 + 13009 12799 13013 + 13013 13010 13009 + 13011 13010 13013 + 13014 13011 13013 + 13015 13011 13014 + 13012 13011 13015 + 13015 13016 13012 + 13007 13012 13016 + 13016 13017 13007 + 13008 13007 13017 + 13018 13013 12799 + 13014 13013 13018 + 13018 13019 13014 + 13014 13019 13020 + 13020 13015 13014 + 13021 13015 13020 + 13021 13022 13015 + 13016 13015 13022 + 12799 12804 13018 + 13018 12804 13023 + 13024 13018 13023 + 13019 13018 13024 + 13025 13019 13024 + 13026 13019 13025 + 13019 13026 13020 + 13020 13026 13027 + 13021 13020 13027 + 13023 12804 12803 + 13023 12803 13028 + 13028 13029 13023 + 13023 13029 13030 + 13030 13024 13023 + 13025 13024 13030 + 13030 13031 13025 + 13032 13025 13031 + 13032 13026 13025 + 13028 12803 12802 + 12802 13033 13028 + 13034 13028 13033 + 13028 13034 13035 + 13035 13029 13028 + 13029 13035 13036 + 13036 13030 13029 + 13030 13036 13037 + 13037 13031 13030 + 12808 13033 12802 + 13038 13033 12808 + 13033 13038 13034 + 13034 13038 13039 + 13039 13040 13034 + 13035 13034 13040 + 13040 13041 13035 + 13035 13041 13042 + 13042 13036 13035 + 13037 13036 13042 + 12808 13043 13038 + 13038 13043 12989 + 12989 13039 13038 + 12988 13039 12989 + 13039 12988 13044 + 13044 13040 13039 + 13040 13044 13045 + 13045 13041 13040 + 13043 12808 12859 + 12859 12990 13043 + 12989 13043 12990 + 12990 12859 12858 + 12858 13046 12990 + 12990 13046 12985 + 12979 12985 13046 + 13046 13047 12979 + 13048 12979 13047 + 12979 13048 12980 + 13046 12858 13049 + 13049 13047 13046 + 13047 13049 13050 + 13050 13051 13047 + 13047 13051 13048 + 13048 13051 13052 + 13052 13053 13048 + 12980 13048 13053 + 13049 12858 12862 + 12862 13054 13049 + 13050 13049 13054 + 13054 13055 13050 + 13050 13055 13056 + 13056 13057 13050 + 13057 13058 13050 + 13051 13050 13058 + 12875 13054 12862 + 12875 13055 13054 + 13055 12875 13059 + 13059 13056 13055 + 13060 13056 13059 + 13056 13060 13061 + 13061 13057 13056 + 13062 13057 13061 + 13057 13062 13063 + 13063 13058 13057 + 12874 13059 12875 + 12914 13059 12874 + 13059 12914 13060 + 13060 12914 12913 + 12913 13064 13060 + 13060 13064 13065 + 13065 13061 13060 + 13062 13061 13065 + 13065 13066 13062 + 13062 13066 13067 + 13067 13063 13062 + 13068 13063 13067 + 13068 13058 13063 + 13058 13068 13051 + 13051 13068 13052 + 13064 12913 12918 + 12918 13069 13064 + 13064 13069 13070 + 13070 13065 13064 + 13065 13070 13071 + 13071 13066 13065 + 13066 13071 13072 + 13072 13073 13066 + 13066 13073 13067 + 13069 12918 12923 + 12923 13074 13069 + 13069 13074 13075 + 13075 13076 13069 + 13076 13070 13069 + 13071 13070 13076 + 13076 13077 13071 + 13071 13077 13078 + 13078 13072 13071 + 13074 12923 12922 + 12922 13079 13074 + 13074 13079 13080 + 13080 13081 13074 + 13074 13081 13075 + 13079 12922 12927 + 12927 13082 13079 + 13079 13082 13080 + 13082 13083 13080 + 13084 13080 13083 + 13080 13084 13081 + 13081 13084 13075 + 12936 13082 12927 + 13082 12936 13085 + 13085 13083 13082 + 13083 13085 13086 + 13083 13086 13084 + 13087 13084 13086 + 13084 13087 13075 + 13075 13087 13088 + 13075 13088 13089 + 13089 13076 13075 + 13077 13076 13089 + 13085 12936 12940 + 13090 13085 12940 + 13085 13090 13086 + 13086 13090 13091 + 13086 13091 13087 + 13088 13087 13091 + 13091 13092 13088 + 13088 13092 13093 + 13093 13089 13088 + 13094 13089 13093 + 13089 13094 13077 + 12940 13095 13090 + 13096 13090 13095 + 13090 13096 13091 + 13092 13091 13096 + 13096 13097 13092 + 13092 13097 13098 + 13098 13093 13092 + 13099 13093 13098 + 13093 13099 13094 + 13095 12940 12939 + 13095 12939 13100 + 13100 13096 13095 + 13097 13096 13100 + 13100 12950 13097 + 13098 13097 12950 + 12950 12949 13098 + 13101 13098 12949 + 13098 13101 13099 + 13099 13101 13102 + 13094 13099 13102 + 12939 12945 13100 + 12945 12950 13100 + 12949 12948 13101 + 13103 13101 12948 + 13101 13103 13102 + 13102 13103 13104 + 13105 13102 13104 + 13102 13105 13094 + 13077 13094 13105 + 13105 13078 13077 + 12948 12957 13103 + 13106 13103 12957 + 13103 13106 13104 + 13107 13104 13106 + 13104 13107 13108 + 13108 13109 13104 + 13109 13105 13104 + 13109 13078 13105 + 12957 12962 13106 + 13106 12962 13110 + 13110 13111 13106 + 13111 13107 13106 + 13112 13107 13111 + 13107 13112 13113 + 13113 13108 13107 + 12961 13110 12962 + 13114 13110 12961 + 13110 13114 13115 + 13115 13111 13110 + 13111 13115 13112 + 13112 13115 13116 + 13113 13112 13116 + 13116 13117 13113 + 13118 13113 13117 + 13108 13113 13118 + 12961 12966 13114 + 13114 12966 13119 + 13114 13119 13120 + 13120 13115 13114 + 13115 13120 13116 + 13121 13116 13120 + 13121 13122 13116 + 13116 13122 13123 + 13123 13117 13116 + 12966 13124 13119 + 13124 12964 13119 + 13119 12964 13125 + 13125 13126 13119 + 13119 13126 13120 + 13126 13127 13120 + 13127 13121 13120 + 13124 12966 12965 + 12964 13124 12965 + 13127 13126 13125 + 13127 13125 13128 + 13121 13127 13128 + 13128 13129 13121 + 13122 13121 13129 + 13129 13130 13122 + 13130 13123 13122 + 13131 13123 13130 + 13117 13123 13131 + 13132 13117 13131 + 13117 13132 13118 + 13125 13133 13128 + 13134 13128 13133 + 13128 13134 13135 + 13135 13129 13128 + 13130 13129 13135 + 13136 13130 13135 + 13130 13136 13131 + 13136 13137 13131 + 13132 13131 13137 + 13133 13125 12964 + 13138 13133 12964 + 13134 13133 13138 + 13138 13139 13134 + 13135 13134 13139 + 13139 13140 13135 + 13136 13135 13140 + 13140 13141 13136 + 13136 13141 13137 + 12975 13138 12964 + 13142 13138 12975 + 13139 13138 13142 + 13139 13142 13140 + 13142 13143 13140 + 13140 13143 13141 + 13141 13143 13144 + 13144 13137 13141 + 13145 13137 13144 + 13137 13145 13132 + 13118 13132 13145 + 12975 13146 13142 + 13142 13146 13147 + 13143 13142 13147 + 13147 13144 13143 + 13148 13144 13147 + 13144 13148 13145 + 13145 13148 13149 + 13149 13150 13145 + 13145 13150 13118 + 12975 12974 13146 + 13146 12974 13151 + 13151 13147 13146 + 13147 13151 13152 + 13147 13152 13148 + 13149 13148 13152 + 13153 13151 12974 + 13152 13151 13153 + 13153 13154 13152 + 13152 13154 13149 + 13154 13155 13149 + 13156 13149 13155 + 13149 13156 13157 + 13157 13150 13149 + 12980 13153 12974 + 13053 13153 12980 + 13153 13053 13154 + 13154 13053 13052 + 13052 13155 13154 + 13067 13155 13052 + 13155 13067 13156 + 13073 13156 13067 + 13073 13158 13156 + 13158 13157 13156 + 13157 13158 13159 + 13159 13160 13157 + 13150 13157 13160 + 13160 13118 13150 + 13118 13160 13108 + 13067 13052 13068 + 13108 13160 13159 + 13159 13109 13108 + 13109 13159 13078 + 13078 13159 13158 + 13158 13072 13078 + 13072 13158 13073 + 12994 13044 12988 + 13045 13044 12994 + 12994 13003 13045 + 13045 13003 13161 + 13161 13162 13045 + 13041 13045 13162 + 13162 13042 13041 + 13163 13042 13162 + 13042 13163 13037 + 13002 13161 13003 + 13161 13002 13164 + 13164 13165 13161 + 13162 13161 13165 + 13166 13162 13165 + 13166 13163 13162 + 13167 13163 13166 + 13037 13163 13167 + 13164 13002 13168 + 13164 13168 13169 + 13169 13170 13164 + 13165 13164 13170 + 13170 13171 13165 + 13166 13165 13171 + 13171 13172 13166 + 13172 13167 13166 + 13002 13001 13168 + 13008 13168 13001 + 13168 13008 13173 + 13173 13169 13168 + 13174 13169 13173 + 13174 13175 13169 + 13170 13169 13175 + 13176 13170 13175 + 13176 13171 13170 + 13017 13173 13008 + 13174 13173 13017 + 13017 13177 13174 + 13174 13177 13178 + 13175 13174 13178 + 13178 13179 13175 + 13176 13175 13179 + 13179 13180 13176 + 13180 13181 13176 + 13176 13181 13171 + 13182 13177 13017 + 13177 13182 13183 + 13183 13178 13177 + 13178 13183 13180 + 13180 13179 13178 + 13182 13017 13016 + 13182 13016 13022 + 13183 13182 13022 + 13184 13183 13022 + 13180 13183 13184 + 13184 13185 13180 + 13181 13180 13185 + 13185 13186 13181 + 13171 13181 13186 + 13186 13172 13171 + 13186 13167 13172 + 13022 13187 13184 + 13187 13188 13184 + 13188 13189 13184 + 13184 13189 13185 + 13185 13189 13190 + 13190 13186 13185 + 13186 13190 13167 + 13191 13167 13190 + 13167 13191 13037 + 13187 13022 13021 + 13192 13187 13021 + 13187 13192 13193 + 13193 13188 13187 + 13188 13193 13194 + 13194 13195 13188 + 13189 13188 13195 + 13195 13190 13189 + 13195 13191 13190 + 13195 13196 13191 + 13191 13196 13037 + 13196 13031 13037 + 13021 13027 13192 + 13192 13027 13197 + 13193 13192 13197 + 13197 13194 13193 + 13196 13194 13197 + 13195 13194 13196 + 13197 13027 13026 + 13197 13026 13032 + 13197 13032 13196 + 13031 13196 13032 + 12717 12783 12718 + 12779 12783 12717 + 12717 12722 12779 + 12779 12722 12727 + 12726 12780 12727 + 12780 12726 13198 + 13198 13199 12780 + 12780 13199 12771 + 12772 12771 13199 + 12731 13198 12726 + 13198 12731 13200 + 13201 13198 13200 + 13201 13199 13198 + 13201 13202 13199 + 13199 13202 12772 + 12772 13202 13203 + 13203 13204 12772 + 12765 12772 13204 + 12735 13200 12731 + 13200 12735 13205 + 13205 13206 13200 + 13201 13200 13206 + 13206 13207 13201 + 13207 13203 13201 + 13203 13202 13201 + 12739 13205 12735 + 13205 12739 13208 + 13209 13205 13208 + 13209 13206 13205 + 13209 13210 13206 + 13206 13210 13211 + 13211 13207 13206 + 13211 13203 13207 + 12744 13208 12739 + 13208 12744 13212 + 13212 13213 13208 + 13209 13208 13213 + 13213 13214 13209 + 13214 13210 13209 + 13210 13214 13215 + 13215 13216 13210 + 13216 13211 13210 + 12744 12743 13212 + 13217 13212 12743 + 13212 13217 13214 + 13214 13213 13212 + 12743 12748 13217 + 13218 13217 12748 + 13217 13218 13215 + 13214 13217 13215 + 12748 12757 13218 + 12757 12756 13218 + 12756 13219 13218 + 13215 13218 13219 + 13215 13219 13220 + 13220 13216 13215 + 13221 13216 13220 + 13216 13221 13222 + 13222 13211 13216 + 13211 13222 13203 + 13219 12756 12762 + 12762 13220 13219 + 13220 12762 13223 + 13224 13220 13223 + 13220 13224 13221 + 13221 13224 13225 + 13225 13226 13221 + 13226 13222 13221 + 13203 13222 13226 + 13226 13204 13203 + 13223 12762 12761 + 13223 12761 12767 + 13223 12767 13225 + 13223 13225 13224 + 12767 12766 13225 + 13226 13225 12766 + 13226 12766 13204 + 13204 12766 12765 + 13227 13228 13229 + 13230 13227 13229 + 13230 13229 13231 + 13232 13230 13231 + 13233 13232 13231 + 13231 13234 13233 + 13233 13234 13235 + 13236 13233 13235 + 13237 13234 13231 + 13234 13237 13238 + 13238 13235 13234 + 13239 13235 13238 + 13235 13239 13236 + 13236 13239 13240 + 13240 13241 13236 + 13242 13236 13241 + 13231 13228 13237 + 13237 13228 13243 + 13243 13244 13237 + 13237 13244 13245 + 13245 13238 13237 + 13246 13238 13245 + 13238 13246 13239 + 13239 13246 13247 + 13247 13240 13239 + 13248 13244 13243 + 13244 13248 13249 + 13249 13245 13244 + 13250 13245 13249 + 13245 13250 13246 + 13247 13246 13250 + 13250 13251 13247 + 13252 13247 13251 + 13240 13247 13252 + 13243 13253 13248 + 13248 13253 13254 + 13254 13255 13248 + 13249 13248 13255 + 13255 13256 13249 + 13257 13249 13256 + 13249 13257 13250 + 13253 13243 13258 + 13258 13259 13253 + 13254 13253 13259 + 13259 13260 13254 + 13261 13254 13260 + 13255 13254 13261 + 13227 13258 13243 + 13242 13262 13263 + 13236 13242 13263 + 13233 13236 13263 + 13232 13233 13263 + 13230 13232 13263 + 13227 13230 13263 + 13263 13264 13227 + 13265 13266 13267 + 13266 13268 13267 + 98 13269 2731 + 13269 13270 2731 + 13271 13272 13273 + 13274 13272 13271 + 13272 13274 13275 + 13272 13275 13276 + 13276 13277 13272 + 13271 13278 13274 + 13274 13278 13279 + 13280 13274 13279 + 13275 13274 13280 + 13280 13281 13275 + 13275 13281 13282 + 13282 13276 13275 + 13271 13283 13278 + 13278 13283 13284 + 13284 13279 13278 + 13283 13271 13285 + 13285 13286 13283 + 13284 13283 13286 + 13285 13271 13277 + 13287 13285 13277 + 13288 13285 13287 + 13285 13288 13286 + 13286 13288 13289 + 13289 13290 13286 + 13286 13290 13284 + 13277 13291 13287 + 13292 13287 13291 + 13293 13287 13292 + 13287 13293 13288 + 13288 13293 13294 + 13289 13288 13294 + 13295 13291 13277 + 13291 13295 13296 + 13291 13296 13292 + 13297 13292 13296 + 13298 13292 13297 + 13292 13298 13293 + 13293 13298 13299 + 13299 13294 13293 + 13277 13300 13295 + 13301 13295 13300 + 13296 13295 13301 + 13301 13297 13296 + 13297 13301 13302 + 13302 13303 13297 + 13297 13303 13298 + 13303 13299 13298 + 13304 13300 13277 + 13300 13304 13305 + 13305 13306 13300 + 13277 13276 13304 + 13304 13276 13282 + 13282 13307 13304 + 13307 13305 13304 + 13308 13305 13307 + 13305 13308 13309 + 13309 13310 13305 + 13311 13307 13282 + 13307 13311 13308 + 13312 13308 13311 + 13309 13308 13312 + 13312 13313 13309 + 13302 13309 13313 + 13309 13302 13301 + 13314 13309 13301 + 13282 13315 13311 + 13311 13315 13316 + 13316 13312 13311 + 13313 13312 13316 + 13316 13317 13313 + 13313 13317 13318 + 13318 13319 13313 + 13313 13319 13302 + 13315 13282 13281 + 13281 13320 13315 + 13316 13315 13320 + 13320 13321 13316 + 13317 13316 13321 + 13321 13322 13317 + 13317 13322 13323 + 13323 13318 13317 + 13324 13318 13323 + 13319 13318 13324 + 13320 13281 13280 + 13280 13325 13320 + 13320 13325 13326 + 13326 13321 13320 + 13322 13321 13326 + 13326 13327 13322 + 13322 13327 13328 + 13328 13323 13322 + 13329 13323 13328 + 13323 13329 13324 + 13325 13280 13330 + 13330 13331 13325 + 13326 13325 13331 + 13332 13326 13331 + 13327 13326 13332 + 13330 13280 13279 + 13279 13333 13330 + 13334 13330 13333 + 13334 13331 13330 + 13331 13334 13335 + 13335 13336 13331 + 13331 13336 13337 + 13337 13332 13331 + 13338 13333 13279 + 13338 13339 13333 + 13333 13339 13334 + 13334 13339 13340 + 13335 13334 13340 + 13341 13335 13340 + 13342 13335 13341 + 13335 13342 13336 + 13279 13343 13338 + 13343 13344 13338 + 13339 13338 13344 + 13344 13345 13339 + 13339 13345 13340 + 13279 13284 13343 + 13343 13284 13346 + 13346 13344 13343 + 13344 13346 13345 + 13345 13346 13347 + 13347 13340 13345 + 13347 13348 13340 + 13340 13348 13349 + 13349 13350 13340 + 13340 13350 13341 + 13347 13346 13284 + 13351 13347 13284 + 13348 13347 13351 + 13351 13352 13348 + 13348 13352 13349 + 13352 13353 13349 + 13354 13349 13353 + 13349 13354 13355 + 13355 13350 13349 + 13356 13351 13284 + 13357 13351 13356 + 13357 13352 13351 + 13352 13357 13358 + 13358 13353 13352 + 13359 13356 13284 + 13360 13356 13359 + 13361 13356 13360 + 13356 13361 13357 + 13362 13357 13361 + 13290 13359 13284 + 13363 13359 13290 + 13359 13363 13364 + 13364 13365 13359 + 13359 13365 13360 + 13290 13366 13363 + 13367 13363 13366 + 13290 13289 13366 + 13366 13289 13368 + 13368 13369 13366 + 13366 13369 13370 + 13370 13371 13366 + 13294 13368 13289 + 13372 13368 13294 + 13368 13372 13373 + 13373 13369 13368 + 13369 13373 13374 + 13374 13370 13369 + 13375 13370 13374 + 13370 13375 13376 + 13376 13377 13370 + 13294 13378 13372 + 13372 13378 13324 + 13379 13372 13324 + 13373 13372 13379 + 13379 13380 13373 + 13374 13373 13380 + 13378 13294 13299 + 13299 13381 13378 + 13378 13381 13319 + 13319 13324 13378 + 13381 13299 13303 + 13303 13302 13381 + 13319 13381 13302 + 13300 13382 13301 + 13324 13329 13379 + 13383 13379 13329 + 13380 13379 13383 + 13380 13383 13384 + 13384 13385 13380 + 13380 13385 13374 + 13386 13374 13385 + 13374 13386 13375 + 13329 13387 13383 + 13383 13387 13388 + 13388 13384 13383 + 13389 13384 13388 + 13384 13389 13390 + 13390 13385 13384 + 13385 13390 13386 + 13391 13386 13390 + 13375 13386 13391 + 13328 13387 13329 + 13387 13328 13392 + 13392 13388 13387 + 13393 13388 13392 + 13388 13393 13389 + 13394 13389 13393 + 13390 13389 13394 + 13394 13395 13390 + 13390 13395 13391 + 13392 13328 13327 + 13396 13392 13327 + 13397 13392 13396 + 13392 13397 13393 + 13393 13397 13398 + 13398 13399 13393 + 13393 13399 13394 + 13400 13394 13399 + 13395 13394 13400 + 13327 13401 13396 + 13402 13396 13401 + 13403 13396 13402 + 13396 13403 13397 + 13398 13397 13403 + 13403 13404 13398 + 13405 13398 13404 + 13405 13399 13398 + 13399 13405 13400 + 13332 13401 13327 + 13401 13332 13406 + 13406 13407 13401 + 13401 13407 13402 + 13402 13407 13408 + 13408 13409 13402 + 13410 13402 13409 + 13402 13410 13403 + 13406 13332 13337 + 13337 13411 13406 + 13406 13411 13412 + 13412 13413 13406 + 13407 13406 13413 + 13413 13408 13407 + 13414 13411 13337 + 13411 13414 13415 + 13415 13412 13411 + 13412 13415 13416 + 13416 13417 13412 + 13412 13417 13418 + 13418 13413 13412 + 13408 13413 13418 + 13337 13419 13414 + 13414 13419 13420 + 13420 13421 13414 + 13414 13421 13422 + 13422 13415 13414 + 13416 13415 13422 + 13419 13337 13336 + 13336 13342 13419 + 13420 13419 13342 + 13342 13423 13420 + 13424 13420 13423 + 13420 13424 13425 + 13425 13421 13420 + 13421 13425 13426 + 13426 13422 13421 + 13341 13423 13342 + 13427 13423 13341 + 13423 13427 13424 + 13428 13424 13427 + 13425 13424 13428 + 13428 13429 13425 + 13426 13425 13429 + 13429 13430 13426 + 13431 13426 13430 + 13422 13426 13431 + 13341 13432 13427 + 13427 13432 13433 + 13433 13434 13427 + 13427 13434 13428 + 13432 13341 13350 + 13350 13355 13432 + 13432 13355 13435 + 13435 13433 13432 + 13436 13433 13435 + 13433 13436 13437 + 13437 13434 13433 + 13434 13437 13438 + 13438 13439 13434 + 13434 13439 13428 + 13440 13435 13355 + 13440 13441 13435 + 13435 13441 13436 + 13442 13436 13441 + 13437 13436 13442 + 13442 13443 13437 + 13438 13437 13443 + 13355 13354 13440 + 13440 13354 13444 + 13445 13440 13444 + 13441 13440 13445 + 13445 13446 13441 + 13441 13446 13442 + 13446 13447 13442 + 13448 13442 13447 + 13442 13448 13443 + 13353 13444 13354 + 13449 13444 13353 + 13364 13363 13450 + 13450 13451 13364 + 13452 13364 13451 + 13365 13364 13452 + 13452 13453 13365 + 13360 13365 13453 + 13451 13454 13452 + 13455 13456 13457 + 13458 13455 13457 + 13459 13455 13458 + 13459 13460 13455 + 13455 13460 13461 + 13461 13462 13455 + 13463 13458 13457 + 13464 13458 13463 + 13465 13458 13464 + 13458 13465 13459 + 13466 13459 13465 + 13460 13459 13466 + 13457 13467 13463 + 13468 13463 13467 + 13463 13468 7297 + 7297 7303 13463 + 13463 7303 13464 + 13469 13467 13457 + 13470 13467 13469 + 13467 13470 13468 + 7298 13468 13470 + 7297 13468 7298 + 13457 13471 13469 + 13472 13469 13471 + 13473 13469 13472 + 13469 13473 13470 + 13470 13473 13474 + 13474 13475 13470 + 13470 13475 7298 + 13457 13476 13471 + 13471 13476 13477 + 13477 13478 13471 + 13471 13478 13472 + 13479 13472 13478 + 13480 13472 13479 + 13472 13480 13473 + 13474 13473 13480 + 13476 13457 13481 + 13481 13482 13476 + 13476 13482 13483 + 13483 13484 13476 + 13484 13485 13476 + 13485 13477 13476 + 13486 13477 13485 + 13478 13477 13486 + 13486 13487 13478 + 13478 13487 13479 + 13488 13483 13482 + 13489 13483 13488 + 13483 13489 13490 + 13490 13484 13483 + 13490 13491 13484 + 13484 13491 13492 + 13492 13485 13484 + 13482 13461 13488 + 13488 13461 13460 + 13460 13493 13488 + 13489 13488 13493 + 13461 13482 13494 + 13466 13493 13460 + 13466 13495 13493 + 13493 13495 13489 + 13489 13495 13496 + 13496 13497 13489 + 13497 13498 13489 + 13498 13490 13489 + 13491 13490 13498 + 13495 13466 13499 + 13499 13496 13495 + 13500 13496 13499 + 13496 13500 13501 + 13501 13497 13496 + 13502 13497 13501 + 13497 13502 13503 + 13503 13498 13497 + 13499 13466 13465 + 13504 13499 13465 + 13500 13499 13504 + 13504 13505 13500 + 13501 13500 13505 + 13505 13506 13501 + 13465 13507 13504 + 13508 13504 13507 + 13505 13504 13508 + 13508 13509 13505 + 13505 13509 13510 + 13510 13511 13505 + 13512 13507 13465 + 13513 13507 13512 + 13507 13513 13508 + 13508 13513 7312 + 7323 13508 7312 + 13509 13508 7323 + 13465 13464 13512 + 7308 13512 13464 + 13513 13512 7308 + 7308 7312 13513 + 13464 7303 7308 + 13514 13515 13516 + 13517 13514 13516 + 13518 13514 13517 + 13519 13514 13518 + 13514 13519 13520 + 13520 13521 13514 + 13516 13522 13517 + 13522 13523 13517 + 13524 13517 13523 + 13517 13524 13525 + 13517 13525 13518 + 13526 13522 13516 + 13526 13527 13522 + 13522 13527 13528 + 13528 13523 13522 + 13523 13528 13529 + 13523 13529 13524 + 13530 13524 13529 + 13525 13524 13530 + 13516 13531 13526 + 13532 13526 13531 + 13527 13526 13532 + 13532 13533 13527 + 13528 13527 13533 + 13533 13534 13528 + 13534 13535 13528 + 13529 13528 13535 + 13536 13531 13516 + 13531 13536 13537 + 13537 13538 13531 + 13531 13538 13539 + 13539 13532 13531 + 13536 13516 13521 + 13521 13540 13536 + 13536 13540 13541 + 13541 13542 13536 + 13542 13537 13536 + 13543 13537 13542 + 13543 13538 13537 + 13538 13543 13544 + 13544 13539 13538 + 13540 13521 13520 + 13540 13520 13545 + 13545 13541 13540 + 13541 13545 13546 + 13546 13547 13541 + 13541 13547 13548 + 13548 13542 13541 + 13549 13542 13548 + 13542 13549 13543 + 13544 13543 13549 + 13545 13520 13519 + 13550 13545 13519 + 13546 13545 13550 + 13550 13551 13546 + 13546 13551 13552 + 13552 13553 13546 + 13547 13546 13553 + 13553 13554 13547 + 13548 13547 13554 + 13519 13555 13550 + 13556 13550 13555 + 13550 13556 13557 + 13557 13551 13550 + 13551 13557 13558 + 13558 13552 13551 + 13559 13555 13519 + 13560 13555 13559 + 13555 13560 13556 + 13561 13556 13560 + 13557 13556 13561 + 13561 13562 13557 + 13557 13562 13563 + 13563 13558 13557 + 13519 13518 13559 + 13559 13518 13564 + 13564 13565 13559 + 13566 13559 13565 + 13559 13566 13560 + 13560 13566 13567 + 13567 13568 13560 + 13560 13568 13561 + 13518 13525 13564 + 13530 13564 13525 + 13564 13530 13569 + 13564 13569 13570 + 13570 13565 13564 + 13571 13565 13570 + 13565 13571 13566 + 13567 13566 13571 + 13569 13530 13572 + 13572 13573 13569 + 13569 13573 13574 + 13574 13570 13569 + 13575 13570 13574 + 13570 13575 13571 + 13576 13572 13530 + 13577 13572 13576 + 13573 13572 13577 + 13577 13578 13573 + 13573 13578 13579 + 13579 13574 13573 + 13580 13574 13579 + 13574 13580 13575 + 13529 13576 13530 + 13535 13576 13529 + 13576 13535 13581 + 13581 13582 13576 + 13576 13582 13577 + 13577 13582 13583 + 13583 13584 13577 + 13578 13577 13584 + 13584 13585 13578 + 13579 13578 13585 + 13581 13535 13534 + 13534 13586 13581 + 13581 13586 13587 + 13587 13588 13581 + 13582 13581 13588 + 13588 13583 13582 + 13589 13586 13534 + 13586 13589 13590 + 13590 13587 13586 + 13587 13590 13591 + 13591 13592 13587 + 13587 13592 13593 + 13593 13588 13587 + 13583 13588 13593 + 13534 13594 13589 + 13589 13594 13595 + 13595 13596 13589 + 13589 13596 13597 + 13597 13590 13589 + 13591 13590 13597 + 13594 13534 13533 + 13533 13598 13594 + 13594 13598 13599 + 13599 13595 13594 + 13600 13595 13599 + 13595 13600 13601 + 13601 13596 13595 + 13596 13601 13602 + 13602 13597 13596 + 13598 13533 13532 + 13532 13603 13598 + 13598 13603 13604 + 13604 13599 13598 + 13599 13604 13605 + 13605 13606 13599 + 13599 13606 13600 + 13607 13600 13606 + 13601 13600 13607 + 13603 13532 13539 + 13539 13608 13603 + 13604 13603 13608 + 13608 13609 13604 + 13609 13610 13604 + 13605 13604 13610 + 13608 13539 13544 + 13544 13611 13608 + 13608 13611 13612 + 13612 13609 13608 + 13613 13609 13612 + 13609 13613 13614 + 13614 13610 13609 + 13611 13544 13615 + 13615 13616 13611 + 13612 13611 13616 + 13616 13617 13612 + 216 13612 13617 + 13612 216 13613 + 13549 13615 13544 + 13618 13615 13549 + 13616 13615 13618 + 13618 13619 13616 + 13616 13619 13620 + 13620 13617 13616 + 13621 13617 13620 + 13617 13621 216 + 216 13621 13622 + 13549 13623 13618 + 13618 13623 13624 + 13624 13625 13618 + 13619 13618 13625 + 13625 13626 13619 + 13620 13619 13626 + 13548 13623 13549 + 13623 13548 13627 + 13627 13624 13623 + 13624 13627 13628 + 13628 13629 13624 + 13624 13629 13630 + 13630 13625 13624 + 13626 13625 13630 + 13554 13627 13548 + 13628 13627 13554 + 13554 13631 13628 + 13628 13631 13632 + 13632 13633 13628 + 13629 13628 13633 + 13633 13634 13629 + 13630 13629 13634 + 13635 13631 13554 + 13631 13635 13636 + 13636 13632 13631 + 13632 13636 13637 + 13637 13638 13632 + 13632 13638 13639 + 13639 13633 13632 + 13634 13633 13639 + 13554 13553 13635 + 13635 13553 13552 + 13552 13640 13635 + 13635 13640 13641 + 13641 13636 13635 + 13637 13636 13641 + 13641 13642 13637 + 13637 13642 13643 + 13643 13644 13637 + 13638 13637 13644 + 13645 13640 13552 + 13640 13645 13646 + 13646 13641 13640 + 13641 13646 13647 + 13647 13642 13641 + 13642 13647 13648 + 13648 13643 13642 + 13552 13558 13645 + 13645 13558 13563 + 13563 13649 13645 + 13645 13649 13650 + 13650 13646 13645 + 13647 13646 13650 + 13650 13651 13647 + 13647 13651 13652 + 13652 13648 13647 + 13653 13648 13652 + 13643 13648 13653 + 13654 13649 13563 + 13649 13654 13655 + 13655 13650 13649 + 13650 13655 13656 + 13656 13651 13650 + 13651 13656 13657 + 13657 13652 13651 + 13563 13658 13654 + 13654 13658 13659 + 13659 13660 13654 + 13660 13655 13654 + 13656 13655 13660 + 13660 13661 13656 + 13657 13656 13661 + 13658 13563 13562 + 13562 13662 13658 + 13659 13658 13662 + 13662 13663 13659 + 7284 13659 13663 + 13659 7284 13661 + 13661 13660 13659 + 13662 13562 13561 + 13561 13664 13662 + 13662 13664 13665 + 13665 13663 13662 + 13664 13561 13568 + 13568 13666 13664 + 13665 13664 13666 + 13667 13665 13666 + 13666 13568 13567 + 13567 13668 13666 + 13666 13668 13667 + 13667 13668 13669 + 13669 7276 13667 + 13670 13667 7276 + 13667 13670 13663 + 13663 13670 7284 + 13668 13567 13671 + 13671 13669 13668 + 13669 13671 13672 + 13672 13673 13669 + 13669 13673 7277 + 7277 7276 13669 + 13571 13671 13567 + 13672 13671 13571 + 13571 13575 13672 + 13672 13575 13580 + 13580 13674 13672 + 13673 13672 13674 + 13674 7278 13673 + 7277 13673 7278 + 7272 13674 13580 + 7278 13674 7272 + 13580 7273 7272 + 13579 7273 13580 + 7273 13579 7274 + 13585 7274 13579 + 7266 7274 13585 + 13585 13675 7266 + 7266 13675 7261 + 13676 7261 13675 + 7261 13676 13677 + 13677 7262 7261 + 13678 13675 13585 + 13675 13678 13676 + 13679 13676 13678 + 13677 13676 13679 + 13679 13680 13677 + 13677 13680 13681 + 13681 13682 13677 + 7262 13677 13682 + 13682 7252 7262 + 13585 13584 13678 + 13678 13584 13583 + 13583 13683 13678 + 13678 13683 13679 + 13684 13679 13683 + 13679 13684 13685 + 13685 13680 13679 + 13680 13685 13686 + 13686 13681 13680 + 13593 13683 13583 + 13683 13593 13684 + 13687 13684 13593 + 13685 13684 13687 + 13687 13688 13685 + 13685 13688 13689 + 13689 13686 13685 + 13690 13686 13689 + 13681 13686 13690 + 13593 13592 13687 + 13691 13687 13592 + 13687 13691 13692 + 13692 13688 13687 + 13688 13692 13693 + 13693 13689 13688 + 13689 13693 13694 + 13694 13695 13689 + 13689 13695 13690 + 13592 13591 13691 + 13691 13591 13696 + 13696 13697 13691 + 13692 13691 13697 + 13697 13698 13692 + 13692 13698 13699 + 13699 13693 13692 + 13694 13693 13699 + 13597 13696 13591 + 13597 13602 13696 + 13696 13602 13700 + 13700 13697 13696 + 13697 13700 13698 + 13698 13700 13701 + 13701 13699 13698 + 13699 13701 13702 + 13702 13703 13699 + 13699 13703 13694 + 13701 13700 13602 + 13704 13701 13602 + 13702 13701 13704 + 13704 13705 13702 + 13706 13702 13705 + 13703 13702 13706 + 13706 13707 13703 + 13694 13703 13707 + 13707 13708 13694 + 13695 13694 13708 + 13709 13704 13602 + 13710 13704 13709 + 13705 13704 13710 + 13710 13711 13705 + 13705 13711 13712 + 13712 13713 13705 + 13705 13713 13706 + 13602 13601 13709 + 13607 13709 13601 + 13709 13607 13714 + 13714 13715 13709 + 13709 13715 13710 + 13710 13715 13716 + 13717 13710 13716 + 13711 13710 13717 + 13717 13718 13711 + 13712 13711 13718 + 13714 13607 13719 + 13719 13720 13714 + 13714 13720 13721 + 13721 13722 13714 + 13715 13714 13722 + 13722 13716 13715 + 13719 13607 13606 + 13606 13723 13719 + 13724 13719 13723 + 13720 13719 13724 + 13720 13724 13725 + 13725 13721 13720 + 13721 13725 13726 + 13721 13726 13727 + 13727 13722 13721 + 13716 13722 13727 + 13728 13723 13606 + 13723 13728 13729 + 13729 13730 13723 + 13723 13730 13724 + 13724 13730 13731 + 13731 13725 13724 + 13726 13725 13731 + 13731 13732 13726 + 13727 13726 13732 + 13606 13605 13728 + 13733 13728 13605 + 13729 13728 13733 + 13733 13734 13729 + 13729 13734 13400 + 13735 13729 13400 + 13730 13729 13735 + 13735 13736 13730 + 13730 13736 13731 + 13605 13737 13733 + 13738 13733 13737 + 13733 13738 13739 + 13739 13734 13733 + 13734 13739 13740 + 13740 13400 13734 + 13400 13740 13395 + 13610 13737 13605 + 13741 13737 13610 + 13737 13741 13738 + 13742 13738 13741 + 13739 13738 13742 + 13742 13743 13739 + 13739 13743 13744 + 13744 13740 13739 + 13395 13740 13744 + 13744 13391 13395 + 13610 13614 13741 + 13741 13614 13745 + 13745 13746 13741 + 13741 13746 13742 + 13747 13742 13746 + 13742 13747 13748 + 13748 13743 13742 + 13743 13748 13749 + 13749 13744 13743 + 13750 13745 13614 + 222 13745 13750 + 13745 222 13751 + 13751 13746 13745 + 13746 13751 13747 + 13752 13747 13751 + 13748 13747 13752 + 13752 13753 13748 + 13753 13749 13748 + 13614 13613 13750 + 13754 13750 13613 + 13750 13754 13755 + 13750 13755 222 + 222 13755 13756 + 13613 216 13754 + 13755 13754 13757 + 13757 13758 13755 + 13759 13758 13757 + 13758 13759 13760 + 13760 13761 13758 + 13751 222 13762 + 13762 13763 13751 + 13751 13763 13752 + 13764 13752 13763 + 13752 13764 13753 + 13753 13764 13765 + 13765 13749 13753 + 13744 13749 13765 + 13765 13391 13744 + 13391 13765 13375 + 13763 13762 13766 + 13766 13767 13763 + 13763 13767 13764 + 13764 13767 13376 + 13376 13375 13764 + 13375 13765 13764 + 13766 13762 13768 + 13768 13769 13766 + 13770 13766 13769 + 13767 13766 13770 + 13770 13376 13767 + 13771 13376 13770 + 13768 13772 13769 + 13769 13772 13773 + 13773 13774 13769 + 13769 13774 13770 + 13451 13770 13774 + 13770 13451 13775 + 13772 13768 13761 + 13761 13776 13772 + 13772 13776 13777 + 13777 13778 13772 + 13778 13779 13772 + 13779 13780 13772 + 13780 13773 13772 + 13776 13761 13781 + 13774 13782 13451 + 13773 13782 13774 + 13782 13773 13780 + 13780 13452 13782 + 13780 13453 13452 + 13453 13780 13779 + 13779 13783 13453 + 13453 13783 13784 + 13784 13360 13453 + 13785 13360 13784 + 13360 13785 13361 + 13786 13783 13779 + 13783 13786 13787 + 13787 13784 13783 + 13788 13784 13787 + 13784 13788 13785 + 13789 13785 13788 + 13361 13785 13789 + 13789 13790 13361 + 13361 13790 13791 + 13786 13779 13778 + 13778 13792 13786 + 13786 13792 13793 + 13787 13786 13793 + 13793 13794 13787 + 13795 13787 13794 + 13787 13795 13788 + 13796 13792 13778 + 13792 13796 13797 + 13797 13798 13792 + 13792 13798 13793 + 13796 13778 13777 + 13777 13799 13796 + 13799 13797 13796 + 13800 13797 13799 + 13800 13798 13797 + 13798 13800 13801 + 13801 13793 13798 + 13799 13777 13802 + 13802 13803 13799 + 13799 13803 13800 + 13801 13800 13803 + 13803 13804 13801 + 13805 13801 13804 + 13793 13801 13805 + 13802 13777 13776 + 13776 13806 13802 + 13807 13802 13806 + 13803 13802 13807 + 13807 13804 13803 + 13808 13804 13807 + 13804 13808 13805 + 13809 13805 13808 + 13810 13805 13809 + 13805 13810 13793 + 13811 13806 13776 + 7252 13682 7253 + 7253 13682 13681 + 13681 13812 7253 + 7253 13812 13813 + 13813 7247 7253 + 7248 7247 13813 + 13690 13812 13681 + 13812 13690 13814 + 13814 13813 13812 + 13813 13814 13815 + 13815 13816 13813 + 13813 13816 7248 + 7248 13816 13817 + 13817 7242 7248 + 7243 7242 13817 + 13818 13814 13690 + 13815 13814 13818 + 13818 13819 13815 + 13815 13819 13820 + 13820 13821 13815 + 13816 13815 13821 + 13821 13817 13816 + 13690 13695 13818 + 13708 13818 13695 + 13818 13708 13822 + 13822 13819 13818 + 13819 13822 13823 + 13823 13820 13819 + 13820 13823 13824 + 13824 13825 13820 + 13820 13825 13826 + 13826 13821 13820 + 13817 13821 13826 + 13822 13708 13707 + 13707 13827 13822 + 13822 13827 13828 + 13828 13823 13822 + 13824 13823 13828 + 13828 13829 13824 + 13824 13829 13830 + 13830 13831 13824 + 13825 13824 13831 + 13832 13827 13707 + 13827 13832 13833 + 13833 13828 13827 + 13828 13833 13834 + 13834 13829 13828 + 13829 13834 13835 + 13835 13830 13829 + 13707 13706 13832 + 13832 13706 13713 + 13713 13836 13832 + 13833 13832 13836 + 13836 13837 13833 + 13834 13833 13837 + 13837 13838 13834 + 13834 13838 13839 + 13839 13835 13834 + 13840 13835 13839 + 13830 13835 13840 + 13836 13713 13712 + 13712 13841 13836 + 13836 13841 13842 + 13842 13837 13836 + 13838 13837 13842 + 13842 13843 13838 + 13838 13843 13844 + 13844 13839 13838 + 13845 13839 13844 + 13839 13845 13840 + 13841 13712 13846 + 13846 13847 13841 + 13842 13841 13847 + 13848 13842 13847 + 13843 13842 13848 + 13848 13849 13843 + 13843 13849 13850 + 13850 13844 13843 + 13718 13846 13712 + 13851 13846 13718 + 13847 13846 13851 + 13851 13852 13847 + 13847 13852 13853 + 13853 13854 13847 + 13847 13854 13848 + 13855 13848 13854 + 13849 13848 13855 + 13718 13856 13851 + 13857 13851 13856 + 13852 13851 13857 + 13857 13858 13852 + 13852 13858 13859 + 13859 13853 13852 + 13860 13853 13859 + 13854 13853 13860 + 13854 13860 13855 + 13861 13856 13718 + 13856 13861 13862 + 13862 13863 13856 + 13856 13863 13857 + 13864 13857 13863 + 13857 13864 13865 + 13865 13858 13857 + 13718 13717 13861 + 13861 13717 13866 + 13866 13867 13861 + 13862 13861 13867 + 13867 13868 13862 + 13869 13862 13868 + 13862 13869 13870 + 13870 13863 13862 + 13863 13870 13864 + 13716 13866 13717 + 13871 13866 13716 + 13866 13871 13867 + 13867 13871 13872 + 13872 13868 13867 + 13873 13868 13872 + 13868 13873 13869 + 13874 13869 13873 + 13870 13869 13874 + 13716 13875 13871 + 13872 13871 13875 + 13875 13876 13872 + 13877 13872 13876 + 13872 13877 13873 + 13873 13877 13878 + 13878 13879 13873 + 13873 13879 13874 + 13727 13875 13716 + 13875 13727 13880 + 13880 13876 13875 + 13881 13876 13880 + 13876 13881 13877 + 13878 13877 13881 + 13881 13882 13878 + 13883 13878 13882 + 13878 13883 13884 + 13884 13879 13878 + 13880 13727 13732 + 13732 13885 13880 + 13886 13880 13885 + 13880 13886 13881 + 13881 13886 13887 + 13887 13882 13881 + 13888 13882 13887 + 13882 13888 13883 + 13889 13883 13888 + 13884 13883 13889 + 13890 13885 13732 + 13891 13885 13890 + 13885 13891 13886 + 13887 13886 13891 + 13891 13892 13887 + 13893 13887 13892 + 13887 13893 13888 + 13732 13894 13890 + 13895 13890 13894 + 13896 13890 13895 + 13890 13896 13891 + 13891 13896 13897 + 13897 13892 13891 + 13898 13892 13897 + 13892 13898 13893 + 13732 13731 13894 + 13894 13731 13899 + 13899 13900 13894 + 13894 13900 13895 + 13901 13895 13900 + 13902 13895 13901 + 13895 13902 13896 + 13897 13896 13902 + 13736 13899 13731 + 13903 13899 13736 + 13900 13899 13903 + 13900 13903 13901 + 13901 13903 13904 + 13904 13905 13901 + 13906 13901 13905 + 13901 13906 13902 + 13736 13904 13903 + 13907 13904 13736 + 13904 13907 13908 + 13908 13905 13904 + 13909 13905 13908 + 13905 13909 13906 + 13910 13906 13909 + 13902 13906 13910 + 13910 13911 13902 + 13902 13911 13897 + 13736 13735 13907 + 13907 13735 13912 + 13912 13913 13907 + 13908 13907 13913 + 13913 13410 13908 + 13409 13908 13410 + 13908 13409 13909 + 13912 13735 13400 + 13400 13405 13912 + 13404 13912 13405 + 13912 13404 13913 + 13913 13404 13403 + 13403 13410 13913 + 13909 13409 13408 + 13408 13914 13909 + 13909 13914 13910 + 13915 13910 13914 + 13910 13915 13916 + 13916 13911 13910 + 13911 13916 13917 + 13917 13897 13911 + 13897 13917 13898 + 13418 13914 13408 + 13914 13418 13915 + 13918 13915 13418 + 13916 13915 13918 + 13918 13919 13916 + 13916 13919 13920 + 13920 13917 13916 + 13898 13917 13920 + 13920 13921 13898 + 13898 13921 13922 + 13922 13893 13898 + 13418 13417 13918 + 13923 13918 13417 + 13918 13923 13924 + 13924 13919 13918 + 13919 13924 13925 + 13925 13920 13919 + 13920 13925 13926 + 13926 13921 13920 + 13921 13926 13927 + 13927 13922 13921 + 13417 13416 13923 + 13928 13923 13416 + 13924 13923 13928 + 13928 13929 13924 + 13924 13929 13930 + 13930 13925 13924 + 13926 13925 13930 + 13930 13931 13926 + 13926 13931 13932 + 13932 13927 13926 + 13416 13933 13928 + 13934 13928 13933 + 13928 13934 13935 + 13935 13929 13928 + 13929 13935 13936 + 13936 13930 13929 + 13930 13936 13937 + 13937 13931 13930 + 13422 13933 13416 + 13431 13933 13422 + 13933 13431 13934 + 13934 13431 13938 + 13938 13939 13934 + 13935 13934 13939 + 13939 13940 13935 + 13935 13940 13941 + 13941 13936 13935 + 13937 13936 13941 + 13430 13938 13431 + 13942 13938 13430 + 13938 13942 13943 + 13943 13939 13938 + 13939 13943 13944 + 13944 13940 13939 + 13940 13944 13945 + 13945 13941 13940 + 13946 13941 13945 + 13941 13946 13937 + 13430 13947 13942 + 13942 13947 13948 + 13948 13949 13942 + 13943 13942 13949 + 13949 13950 13943 + 13944 13943 13950 + 13950 13951 13944 + 13945 13944 13951 + 13947 13430 13429 + 13429 13952 13947 + 13947 13952 13953 + 13953 13948 13947 + 13954 13948 13953 + 13949 13948 13954 + 13954 13955 13949 + 13949 13955 13956 + 13956 13950 13949 + 13951 13950 13956 + 13952 13429 13428 + 13428 13957 13952 + 13952 13957 13958 + 13958 13953 13952 + 13953 13958 13959 + 13959 13960 13953 + 13953 13960 13954 + 13961 13954 13960 + 13955 13954 13961 + 13957 13428 13439 + 13439 13962 13957 + 13958 13957 13962 + 13962 13963 13958 + 13959 13958 13963 + 13962 13439 13438 + 13962 13438 13964 + 13964 13963 13962 + 13963 13964 13965 + 13965 13966 13963 + 13963 13966 13959 + 13443 13964 13438 + 13965 13964 13443 + 13443 13448 13965 + 13967 13965 13448 + 13966 13965 13967 + 13967 13968 13966 + 13959 13966 13968 + 13968 13969 13959 + 13969 13970 13959 + 13960 13959 13970 + 13971 13967 13448 + 13972 13967 13971 + 13968 13967 13972 + 13968 13972 13973 + 13973 13969 13968 + 13969 13973 13974 + 13969 13974 13975 + 13975 13970 13969 + 13976 13971 13448 + 13977 13971 13976 + 13971 13977 13978 + 13971 13978 13972 + 13973 13972 13978 + 13978 13979 13973 + 13979 13980 13973 + 13974 13973 13980 + 13981 13976 13448 + 13982 13976 13981 + 13976 13982 13983 + 13983 13984 13976 + 13976 13984 13977 + 13448 13985 13981 + 13986 13981 13985 + 13987 13981 13986 + 13981 13987 13982 + 13988 13982 13987 + 13983 13982 13988 + 13447 13985 13448 + 13989 13985 13447 + 13985 13989 13986 + 13990 13986 13989 + 13987 13986 13990 + 13990 13991 13987 + 13987 13991 13988 + 13989 13447 13446 + 13446 13992 13989 + 13989 13992 13990 + 13993 13990 13992 + 13991 13990 13993 + 13991 13993 13994 + 13994 13988 13991 + 13988 13994 13995 + 13995 13996 13988 + 13988 13996 13983 + 13992 13446 13445 + 13445 13997 13992 + 13992 13997 13993 + 13993 13997 13998 + 13998 13999 13993 + 13999 13994 13993 + 13995 13994 13999 + 13997 13445 14000 + 14000 13998 13997 + 13998 14000 14001 + 13998 14001 13790 + 13790 13999 13998 + 13999 13790 13789 + 13789 14002 13999 + 13999 14002 13995 + 13444 14000 13445 + 14001 14000 13444 + 13444 13358 14001 + 13790 14001 13358 + 13888 13893 13922 + 13922 14003 13888 + 13888 14003 13889 + 14004 13889 14003 + 13889 14004 14005 + 14005 14006 13889 + 13889 14006 13884 + 14007 14003 13922 + 14003 14007 14004 + 14008 14004 14007 + 14005 14004 14008 + 14008 14009 14005 + 14010 14005 14009 + 14006 14005 14010 + 14010 14011 14006 + 13884 14006 14011 + 13922 13927 14007 + 14007 13927 13932 + 13932 14008 14007 + 14008 13932 14012 + 14009 14008 14012 + 14009 14012 14013 + 14013 14014 14009 + 14009 14014 14010 + 14015 14010 14014 + 14011 14010 14015 + 14012 13932 14016 + 14016 14017 14012 + 14012 14017 14018 + 14018 14019 14012 + 14019 14013 14012 + 14020 14013 14019 + 14014 14013 14020 + 14021 14016 13932 + 14022 14016 14021 + 14017 14016 14022 + 14017 14022 14023 + 14023 14018 14017 + 14024 14018 14023 + 14018 14024 14025 + 14025 14019 14018 + 13931 14021 13932 + 14026 14021 13931 + 14026 14027 14021 + 14021 14027 14022 + 14022 14027 14028 + 14028 14023 14022 + 14029 14023 14028 + 14023 14029 14024 + 13931 13937 14026 + 14026 13937 13946 + 13946 14030 14026 + 14027 14026 14030 + 14030 14028 14027 + 14031 14028 14030 + 14028 14031 14029 + 14029 14031 14032 + 14032 14033 14029 + 14024 14029 14033 + 14033 14034 14024 + 14025 14024 14034 + 14035 14030 13946 + 14030 14035 14031 + 14031 14035 14036 + 14036 14032 14031 + 14032 14036 14037 + 14037 14038 14032 + 14032 14038 14039 + 14039 14033 14032 + 14033 14039 14034 + 13946 14040 14035 + 14035 14040 14041 + 14036 14035 14041 + 14041 14042 14036 + 14037 14036 14042 + 14042 14043 14037 + 14044 14037 14043 + 14038 14037 14044 + 13945 14040 13946 + 14040 13945 14045 + 14045 14041 14040 + 14041 14045 14046 + 14046 14047 14041 + 14041 14047 14048 + 14048 14042 14041 + 14042 14048 14043 + 14045 13945 13951 + 13951 14049 14045 + 14046 14045 14049 + 14049 14050 14046 + 14051 14046 14050 + 14047 14046 14051 + 14051 14052 14047 + 14047 14052 14053 + 14053 14048 14047 + 14043 14048 14053 + 14054 14049 13951 + 14049 14054 14050 + 14050 14054 14055 + 14055 14056 14050 + 14050 14056 14051 + 14057 14051 14056 + 14052 14051 14057 + 13951 14058 14054 + 14055 14054 14058 + 14058 14059 14055 + 14060 14055 14059 + 14056 14055 14060 + 14060 14061 14056 + 14056 14061 14057 + 13956 14058 13951 + 14058 13956 14062 + 14062 14059 14058 + 14063 14059 14062 + 14059 14063 14060 + 14060 14063 14064 + 14064 14065 14060 + 14061 14060 14065 + 14065 14066 14061 + 14057 14061 14066 + 14062 13956 13955 + 13955 14067 14062 + 14068 14062 14067 + 14062 14068 14063 + 14063 14068 14069 + 14069 14064 14063 + 13961 14067 13955 + 14070 14067 13961 + 14067 14070 14068 + 14068 14070 14071 + 14071 14069 14068 + 14072 14069 14071 + 14064 14069 14072 + 14072 14073 14064 + 14064 14073 14074 + 14074 14065 14064 + 14066 14065 14074 + 13961 14075 14070 + 14070 14075 14076 + 14076 14071 14070 + 14071 14076 14077 + 14077 14078 14071 + 14071 14078 14072 + 14079 14072 14078 + 14073 14072 14079 + 14075 13961 14080 + 14080 14081 14075 + 14075 14081 14082 + 14076 14075 14082 + 14083 14076 14082 + 14077 14076 14083 + 14080 13961 13960 + 14084 14080 13960 + 14085 14080 14084 + 14081 14080 14085 + 14081 14085 14086 + 14086 14082 14081 + 13960 14087 14084 + 14088 14084 14087 + 14089 14084 14088 + 14084 14089 14085 + 14086 14085 14089 + 13970 14087 13960 + 14087 13970 13975 + 13975 14090 14087 + 14087 14090 14088 + 14088 14090 14091 + 14091 14092 14088 + 14089 14088 14092 + 14092 14093 14089 + 14089 14093 14086 + 14090 13975 14094 + 14094 14095 14090 + 14090 14095 14091 + 14096 14094 13975 + 14097 14094 14096 + 14094 14097 14098 + 14098 14095 14094 + 14095 14098 14099 + 14099 14100 14095 + 14095 14100 14091 + 13975 13974 14096 + 13974 14101 14096 + 14101 14102 14096 + 14103 14096 14102 + 14104 14096 14103 + 14096 14104 14097 + 13980 14101 13974 + 14101 13980 14105 + 14101 14105 14106 + 14106 14102 14101 + 14107 14102 14106 + 14102 14107 14103 + 14108 14103 14107 + 14109 14103 14108 + 14103 14109 14104 + 14105 13980 13979 + 13979 14110 14105 + 14105 14110 14111 + 14106 14105 14111 + 14111 14112 14106 + 14113 14106 14112 + 14106 14113 14107 + 14114 14110 13979 + 14110 14114 14115 + 14115 14116 14110 + 14110 14116 14111 + 14114 13979 13978 + 13978 13977 14114 + 14115 14114 13977 + 13977 13984 14115 + 14117 14115 13984 + 14116 14115 14117 + 14117 14118 14116 + 14116 14118 14119 + 14119 14111 14116 + 13984 13983 14117 + 14117 13983 13996 + 13996 14120 14117 + 14118 14117 14120 + 14120 14121 14118 + 14119 14118 14121 + 14121 14122 14119 + 14123 14119 14122 + 14111 14119 14123 + 14124 14120 13996 + 14124 14121 14120 + 14121 14124 14125 + 14125 14122 14121 + 14126 14122 14125 + 14122 14126 14123 + 13996 13995 14124 + 14125 14124 13995 + 14127 14125 13995 + 14126 14125 14127 + 14127 14128 14126 + 14123 14126 14128 + 14128 14129 14123 + 14130 14123 14129 + 14123 14130 14111 + 14131 14127 13995 + 14132 14127 14131 + 14128 14127 14132 + 14132 14133 14128 + 14128 14133 14134 + 14134 14129 14128 + 13995 14002 14131 + 14135 14131 14002 + 14131 14135 14136 + 14136 14137 14131 + 14131 14137 14132 + 14132 14137 14138 + 14138 14139 14132 + 14133 14132 14139 + 14002 13789 14135 + 13788 14135 13789 + 14136 14135 13788 + 13788 13795 14136 + 14136 13795 14140 + 14140 14141 14136 + 14137 14136 14141 + 14141 14138 14137 + 14138 14141 14142 + 14142 14143 14138 + 14138 14143 14144 + 14144 14139 14138 + 13794 14140 13795 + 14140 13794 14145 + 14145 14146 14140 + 14140 14146 14142 + 14142 14141 14140 + 14145 13794 13793 + 13793 13810 14145 + 14145 13810 14147 + 14147 14148 14145 + 14146 14145 14148 + 14148 14149 14146 + 14142 14146 14149 + 14149 14150 14142 + 14143 14142 14150 + 14150 14151 14143 + 14144 14143 14151 + 13809 14147 13810 + 14152 14147 13809 + 14147 14152 14153 + 14153 14148 14147 + 14149 14148 14153 + 14153 14154 14149 + 14149 14154 14155 + 14155 14150 14149 + 14151 14150 14155 + 13809 14156 14152 + 14152 14156 14157 + 14157 14158 14152 + 14153 14152 14158 + 14158 14159 14153 + 14154 14153 14159 + 14159 14160 14154 + 14155 14154 14160 + 14156 13809 14161 + 14161 14162 14156 + 14157 14156 14162 + 14162 14163 14157 + 14164 14157 14163 + 14157 14164 14165 + 14165 14158 14157 + 13808 14161 13809 + 14166 14161 13808 + 14161 14166 14167 + 14167 14162 14161 + 14162 14167 14168 + 14168 14163 14162 + 14163 14168 14169 + 14169 14170 14163 + 14163 14170 14164 + 13808 13807 14166 + 14166 13807 13806 + 14171 14166 13806 + 14167 14166 14171 + 14171 14172 14167 + 14172 14168 14167 + 14169 14168 14172 + 14172 14173 14169 + 14174 14169 14173 + 14170 14169 14174 + 13806 14175 14171 + 14173 14171 14175 + 14172 14171 14173 + 14176 14175 13806 + 14175 14176 14177 + 14177 14178 14175 + 14175 14178 14173 + 14173 14178 14179 + 14179 14180 14173 + 14180 14174 14173 + 13806 14181 14176 + 14182 14176 14181 + 14177 14176 14182 + 14182 14183 14177 + 7276 7275 13670 + 14184 13670 7275 + 13661 7284 14185 + 14185 14186 13661 + 13661 14186 13657 + 14187 13657 14186 + 13652 13657 14187 + 14187 14188 13652 + 13652 14188 13653 + 14186 14185 14189 + 14189 14190 14186 + 14186 14190 14187 + 14190 14191 14187 + 14188 14187 14191 + 14191 14192 14188 + 13653 14188 14192 + 14189 14185 7283 + 7283 14193 14189 + 14189 14193 14194 + 14190 14189 14194 + 14194 14191 14190 + 14192 14191 14194 + 14194 14195 14192 + 14192 14195 14196 + 14196 14197 14192 + 14192 14197 13653 + 7289 14193 7283 + 14193 7289 14195 + 14195 14194 14193 + 14196 14195 7289 + 7289 14198 14196 + 13475 14196 14198 + 14196 13475 13474 + 13474 14197 14196 + 14197 13474 14199 + 14199 13653 14197 + 13653 14199 13643 + 7288 14198 7289 + 7298 14198 7288 + 14198 7298 13475 + 13480 14199 13474 + 13643 14199 13480 + 13480 13644 13643 + 13479 13644 13480 + 13644 13479 13638 + 13639 13638 13479 + 13479 13487 13639 + 14200 13639 13487 + 13639 14200 13634 + 13634 14200 14201 + 14201 14202 13634 + 13634 14202 13630 + 13487 13486 14200 + 14201 14200 13486 + 13486 14203 14201 + 14204 14201 14203 + 14201 14204 14205 + 14205 14202 14201 + 14202 14205 14206 + 14206 13630 14202 + 13630 14206 13626 + 13485 14203 13486 + 14207 14203 13485 + 14203 14207 14204 + 14208 14204 14207 + 14205 14204 14208 + 14208 14209 14205 + 14205 14209 14210 + 14210 14206 14205 + 13626 14206 14210 + 14210 14211 13626 + 13626 14211 13620 + 13485 13492 14207 + 14207 13492 14212 + 14212 14213 14207 + 14207 14213 14208 + 14214 14208 14213 + 14208 14214 14215 + 14215 14209 14208 + 14209 14215 14216 + 14216 14210 14209 + 14212 13492 13491 + 13491 14217 14212 + 14218 14212 14217 + 14212 14218 14219 + 14219 14213 14212 + 14213 14219 14214 + 14220 14214 14219 + 14215 14214 14220 + 13498 14217 13491 + 14221 14217 13498 + 14217 14221 14218 + 14222 14218 14221 + 14219 14218 14222 + 14222 14223 14219 + 14219 14223 14220 + 14224 14220 14223 + 14223 14225 14224 + 13498 13503 14221 + 14221 13503 14226 + 14226 14227 14221 + 14221 14227 14222 + 14228 14222 14227 + 14227 14229 14228 + 14228 14229 14230 + 14226 13503 13502 + 13502 14231 14226 + 14232 14226 14231 + 14226 14232 14229 + 14229 14227 14226 + 14233 14231 13502 + 14234 14231 14233 + 14231 14234 14232 + 14232 14234 14235 + 14235 14236 14232 + 14229 14232 14236 + 14236 14237 14229 + 14229 14237 14230 + 13502 14238 14233 + 14233 14238 14239 + 14239 14240 14233 + 14241 14233 14240 + 14233 14241 14234 + 13501 14238 13502 + 14238 13501 14242 + 14242 14239 14238 + 14225 14223 14222 + 14222 14243 14225 + 14225 14243 14244 + 14244 14245 14225 + 14246 14225 14245 + 14245 14177 14246 + 14178 14177 14245 + 14247 14244 14243 + 14245 14179 14178 + 14244 14179 14245 + 14179 14244 14230 + 14230 14180 14179 + 14230 14248 14180 + 14180 14248 14249 + 14249 14174 14180 + 14250 14174 14249 + 14174 14250 14170 + 14248 14230 14237 + 14237 14251 14248 + 14248 14251 14252 + 14249 14248 14252 + 14252 14253 14249 + 14254 14249 14253 + 14249 14254 14250 + 14237 14236 14251 + 14251 14236 14235 + 14235 14252 14251 + 14235 14255 14252 + 14252 14255 14256 + 14256 14253 14252 + 14257 14253 14256 + 14253 14257 14254 + 14258 14254 14257 + 14250 14254 14258 + 14255 14235 14259 + 14259 14260 14255 + 14255 14260 14261 + 14261 14262 14255 + 14262 14256 14255 + 14263 14256 14262 + 14256 14263 14257 + 14234 14259 14235 + 14264 14259 14234 + 14260 14259 14264 + 14260 14264 14265 + 14265 14261 14260 + 14261 14265 14266 + 14261 14266 14267 + 14267 14262 14261 + 14268 14262 14267 + 14262 14268 14263 + 14234 14241 14264 + 14264 14241 14269 + 14269 14270 14264 + 14270 14271 14264 + 14271 14265 14264 + 14266 14265 14271 + 14271 14272 14266 + 14266 14272 14273 + 14273 14267 14266 + 14240 14269 14241 + 14269 14240 14274 + 14274 14275 14269 + 14269 14275 14276 + 14276 14270 14269 + 14277 14270 14276 + 14270 14277 14278 + 14278 14271 14270 + 14272 14271 14278 + 14274 14240 14239 + 14239 14279 14274 + 14280 14274 14279 + 14275 14274 14280 + 14280 7356 14275 + 14276 14275 7356 + 7361 14276 7356 + 14277 14276 7361 + 14281 14279 14239 + 14279 14282 14280 + 7361 7360 14277 + 14277 7360 7366 + 14278 14277 7366 + 14283 14278 7366 + 14272 14278 14283 + 14283 14273 14272 + 14284 14273 14283 + 14273 14284 14285 + 14285 14267 14273 + 14267 14285 14268 + 7366 14286 14283 + 14287 14283 14286 + 14283 14287 14284 + 14284 14287 14288 + 14288 14289 14284 + 14284 14289 14290 + 14290 14285 14284 + 14268 14285 14290 + 14291 14286 7366 + 14292 14286 14291 + 14286 14292 14287 + 14288 14287 14292 + 14292 14293 14288 + 14294 14288 14293 + 14288 14294 14295 + 14295 14289 14288 + 7366 7365 14291 + 14296 14291 7365 + 14297 14291 14296 + 14291 14297 14292 + 14292 14297 14298 + 14298 14293 14292 + 14299 14293 14298 + 14293 14299 14294 + 14300 14294 14299 + 14295 14294 14300 + 7365 7364 14296 + 14301 14296 7364 + 14302 14296 14301 + 14296 14302 14297 + 14298 14297 14302 + 14302 14303 14298 + 14304 14298 14303 + 14298 14304 14299 + 7364 7363 14301 + 14305 14301 7363 + 14306 14301 14305 + 14301 14306 14302 + 14302 14306 14307 + 14307 14303 14302 + 14308 14303 14307 + 14303 14308 14304 + 14309 14304 14308 + 14299 14304 14309 + 7363 7370 14305 + 7379 14305 7370 + 14310 14305 7379 + 14305 14310 14306 + 14307 14306 14310 + 14310 14311 14307 + 14312 14307 14311 + 14307 14312 14308 + 14308 14312 14313 + 14313 14314 14308 + 14308 14314 14309 + 7379 7384 14310 + 14310 7384 14315 + 14315 14311 14310 + 14316 14311 14315 + 14311 14316 14312 + 14313 14312 14316 + 14316 14317 14313 + 14318 14313 14317 + 14313 14318 14319 + 14319 14314 14313 + 14315 7384 7383 + 7383 14320 14315 + 14321 14315 14320 + 14315 14321 14316 + 14316 14321 14322 + 14322 14317 14316 + 14323 14317 14322 + 14317 14323 14318 + 14324 14318 14323 + 14319 14318 14324 + 14325 14320 7383 + 14326 14320 14325 + 14320 14326 14321 + 14322 14321 14326 + 14326 14327 14322 + 14328 14322 14327 + 14322 14328 14323 + 7383 7389 14325 + 14325 7389 7388 + 7388 14329 14325 + 14330 14325 14329 + 14325 14330 14326 + 14326 14330 14331 + 14331 14327 14326 + 14332 14327 14331 + 14327 14332 14328 + 14333 14328 14332 + 14323 14328 14333 + 7393 14329 7388 + 14334 14329 7393 + 14329 14334 14330 + 14331 14330 14334 + 14334 14335 14331 + 14336 14331 14335 + 14331 14336 14332 + 14332 14336 14337 + 14337 14338 14332 + 14332 14338 14333 + 7393 14339 14334 + 14334 14339 14340 + 14340 14335 14334 + 14341 14335 14340 + 14335 14341 14336 + 14337 14336 14341 + 14339 7393 7398 + 7398 14342 14339 + 14340 14339 14342 + 14342 14343 14340 + 14344 14340 14343 + 14340 14344 14341 + 14341 14344 14345 + 14345 14346 14341 + 14341 14346 14337 + 14342 7398 7397 + 7397 7403 14342 + 14342 7403 14347 + 14347 14343 14342 + 14348 14343 14347 + 14343 14348 14344 + 14345 14344 14348 + 14348 14349 14345 + 14350 14345 14349 + 14345 14350 14351 + 14351 14346 14345 + 14347 7403 7402 + 7402 14352 14347 + 14353 14347 14352 + 14347 14353 14348 + 14348 14353 14354 + 14354 14349 14348 + 14355 14349 14354 + 14349 14355 14350 + 14356 14350 14355 + 14351 14350 14356 + 14357 14352 7402 + 14358 14352 14357 + 14352 14358 14353 + 14354 14353 14358 + 14358 14359 14354 + 14360 14354 14359 + 14354 14360 14355 + 7402 14361 14357 + 14357 14361 7421 + 7421 14362 14357 + 14363 14357 14362 + 14357 14363 14358 + 14358 14363 171 + 171 14359 14358 + 7401 14361 7402 + 14361 7401 7414 + 7414 7421 14361 + 7426 14362 7421 + 14364 14362 7426 + 14362 14364 14363 + 171 14363 14364 + 14364 14365 171 + 14366 171 14365 + 171 14366 14367 + 7426 14368 14364 + 14364 14368 14369 + 14369 14365 14364 + 14370 14365 14369 + 14365 14370 14366 + 14371 14366 14370 + 14367 14366 14371 + 14368 7426 14372 + 14372 7459 14368 + 14369 14368 7459 + 7459 7463 14369 + 7468 14369 7463 + 14369 7468 14370 + 7425 14372 7426 + 7438 14372 7425 + 7459 14372 7438 + 14370 7468 7467 + 7467 7480 14370 + 14370 7480 14371 + 7479 14371 7480 + 14371 7479 14373 + 14373 14374 14371 + 14371 14374 14367 + 14367 14374 14375 + 14375 14360 14367 + 14359 14367 14360 + 14373 7479 14376 + 14376 14377 14373 + 14373 14377 14378 + 14378 14379 14373 + 14374 14373 14379 + 14379 14375 14374 + 7478 14376 7479 + 14380 14376 7478 + 14380 14377 14376 + 14377 14380 14381 + 14381 14382 14377 + 14377 14382 14378 + 7478 7484 14380 + 14381 14380 7484 + 7491 14381 7484 + 14383 14381 7491 + 14383 14382 14381 + 14382 14383 14384 + 14384 14378 14382 + 14384 14385 14378 + 14378 14385 14386 + 14386 14379 14378 + 14375 14379 14386 + 7491 14387 14383 + 14383 14387 14388 + 14388 14384 14383 + 14385 14384 14388 + 14388 14389 14385 + 14386 14385 14389 + 14389 14390 14386 + 14391 14386 14390 + 14386 14391 14375 + 14392 14387 7491 + 14387 14392 14393 + 14393 14394 14387 + 14387 14394 14388 + 7491 7490 14392 + 14392 7490 7496 + 7496 14395 14392 + 14392 14395 14396 + 14396 14393 14392 + 14397 14393 14396 + 14394 14393 14397 + 14395 7496 7495 + 7495 14398 14395 + 14395 14398 14399 + 14399 14396 14395 + 14396 14399 14400 + 14396 14400 14397 + 14398 7495 14401 + 14401 14402 14398 + 14398 14402 14403 + 14399 14398 14403 + 14403 14404 14399 + 14400 14399 14404 + 14404 14405 14400 + 14397 14400 14405 + 14406 14401 7495 + 14407 14401 14406 + 14401 14407 14402 + 14402 14407 14408 + 14408 14403 14402 + 14403 14408 14409 + 14403 14409 14410 + 14410 14404 14403 + 7495 7494 14406 + 7494 14411 14406 + 14412 14406 14411 + 14412 14413 14406 + 14406 14413 14407 + 14407 14413 14414 + 14408 14407 14414 + 14414 14415 14408 + 14409 14408 14415 + 7501 14411 7494 + 14411 7501 14416 + 14416 14417 14411 + 14411 14417 14412 + 14412 14417 14418 + 14418 14419 14412 + 14413 14412 14419 + 14419 14414 14413 + 14416 7501 7500 + 7500 14420 14416 + 14421 14416 14420 + 14417 14416 14421 + 14421 14422 14417 + 14417 14422 14418 + 7510 14420 7500 + 14420 7510 14423 + 14423 14424 14420 + 14420 14424 14421 + 14424 14425 14421 + 14426 14421 14425 + 14422 14421 14426 + 7514 14423 7510 + 14427 14423 7514 + 14423 14427 14428 + 14428 14424 14423 + 14424 14428 14429 + 14429 14425 14424 + 14425 14429 14430 + 14430 14431 14425 + 14425 14431 14426 + 7514 7519 14427 + 14432 14427 7519 + 14428 14427 14432 + 14432 14433 14428 + 14429 14428 14433 + 14433 14434 14429 + 14430 14429 14434 + 14434 14435 14430 + 14436 14430 14435 + 14431 14430 14436 + 7519 14437 14432 + 14438 14432 14437 + 14432 14438 14439 + 14439 14433 14432 + 14433 14439 14440 + 14440 14434 14433 + 14434 14440 14441 + 14441 14435 14434 + 7524 14437 7519 + 14442 14437 7524 + 14437 14442 14438 + 14438 14442 14443 + 14443 14444 14438 + 14439 14438 14444 + 14444 14445 14439 + 14439 14445 14446 + 14446 14440 14439 + 14441 14440 14446 + 7524 14447 14442 + 14442 14447 14448 + 14448 14443 14442 + 14449 14443 14448 + 14443 14449 14450 + 14450 14444 14443 + 14445 14444 14450 + 14445 14450 14451 + 14451 14446 14445 + 14447 7524 7523 + 7523 14452 14447 + 14447 14452 14453 + 14453 14448 14447 + 14454 14448 14453 + 14448 14454 14449 + 14452 7523 7522 + 7522 7529 14452 + 14452 7529 14455 + 14455 14453 14452 + 14456 14453 14455 + 14453 14456 14454 + 14457 14454 14456 + 14449 14454 14457 + 14457 14458 14449 + 14449 14458 14459 + 14450 14449 14459 + 14459 14451 14450 + 7534 14455 7529 + 14460 14455 7534 + 14455 14460 14456 + 14456 14460 14461 + 14461 14462 14456 + 14456 14462 14457 + 14462 14463 14457 + 14464 14457 14463 + 14458 14457 14464 + 7534 7549 14460 + 14460 7549 14465 + 14465 14466 14460 + 14466 14461 14460 + 14467 14461 14466 + 14462 14461 14467 + 14467 14468 14462 + 14462 14468 14469 + 14469 14463 14462 + 7548 14465 7549 + 7548 14470 14465 + 14465 14470 14471 + 14471 14466 14465 + 14471 14472 14466 + 14466 14472 14467 + 14470 7548 14473 + 14473 14474 14470 + 14470 14474 14475 + 14475 14471 14470 + 14472 14471 14475 + 14475 14476 14472 + 14467 14472 14476 + 14477 14473 7548 + 14478 14473 14477 + 14478 14474 14473 + 14474 14478 14479 + 14479 14480 14474 + 14474 14480 14475 + 14481 14475 14480 + 14475 14481 14476 + 7547 14477 7548 + 14482 14477 7547 + 14482 14483 14477 + 14477 14483 14478 + 14479 14478 14483 + 7547 14484 14482 + 14482 14484 14485 + 14485 14486 14482 + 14486 14487 14482 + 14487 14488 14482 + 14483 14482 14488 + 7546 14484 7547 + 14484 7546 14489 + 14489 14485 14484 + 14490 14485 14489 + 14485 14490 14491 + 14491 14486 14485 + 14492 14486 14491 + 14486 14492 14493 + 14493 14487 14486 + 7556 14489 7546 + 14490 14489 7556 + 7556 14494 14490 + 14491 14490 14494 + 14494 14495 14491 + 14492 14491 14495 + 14495 14496 14492 + 14492 14496 14497 + 14497 14493 14492 + 14498 14493 14497 + 14493 14498 14487 + 7555 14494 7556 + 14494 7555 14499 + 14499 14495 14494 + 14496 14495 14499 + 14496 14499 7560 + 7560 14497 14496 + 14497 7560 14500 + 14497 14500 14498 + 14501 14498 14500 + 14487 14498 14501 + 14501 14488 14487 + 14501 14502 14488 + 14488 14502 14483 + 14483 14502 14479 + 7560 14499 7555 + 14355 14360 14375 + 14375 14391 14355 + 14355 14391 14356 + 14390 14356 14391 + 14356 14390 14503 + 14503 14504 14356 + 14356 14504 14351 + 14351 14504 14505 + 14505 14506 14351 + 14346 14351 14506 + 14503 14390 14389 + 14389 14507 14503 + 14503 14507 14508 + 14508 14509 14503 + 14504 14503 14509 + 14509 14505 14504 + 14507 14389 14388 + 14388 14510 14507 + 14507 14510 14511 + 14511 14508 14507 + 14511 14512 14508 + 14508 14512 14513 + 14513 14509 14508 + 14505 14509 14513 + 14510 14388 14514 + 14514 14515 14510 + 14510 14515 14516 + 14516 14511 14510 + 14512 14511 14516 + 14516 14517 14512 + 14513 14512 14517 + 14394 14514 14388 + 14518 14514 14394 + 14514 14518 14515 + 14515 14518 14519 + 14519 14520 14515 + 14515 14520 14516 + 14394 14521 14518 + 14518 14521 14522 + 14522 14519 14518 + 14523 14519 14522 + 14520 14519 14523 + 14397 14521 14394 + 14521 14397 14524 + 14524 14522 14521 + 14525 14522 14524 + 14522 14525 14523 + 14523 14525 14526 + 14526 14527 14523 + 14528 14523 14527 + 14523 14528 14520 + 14524 14397 14405 + 14529 14524 14405 + 14530 14524 14529 + 14524 14530 14525 + 14525 14530 14531 + 14531 14526 14525 + 14532 14526 14531 + 14526 14532 14533 + 14533 14527 14526 + 14405 14534 14529 + 14535 14529 14534 + 14529 14535 14536 + 14529 14536 14530 + 14530 14536 14537 + 14537 14531 14530 + 14538 14531 14537 + 14531 14538 14532 + 14539 14534 14405 + 14540 14534 14539 + 14534 14540 14535 + 14535 14540 14541 + 14541 14542 14535 + 14536 14535 14542 + 14542 14537 14536 + 14543 14537 14542 + 14537 14543 14538 + 14405 14544 14539 + 14545 14539 14544 + 14546 14539 14545 + 14539 14546 14540 + 14540 14546 14547 + 14547 14541 14540 + 14544 14405 14404 + 14404 14410 14544 + 14544 14410 14548 + 14548 14549 14544 + 14544 14549 14545 + 14550 14545 14549 + 14545 14550 14551 + 14551 14552 14545 + 14545 14552 14546 + 14547 14546 14552 + 14548 14410 14553 + 14553 14554 14548 + 14555 14548 14554 + 14548 14555 14556 + 14556 14549 14548 + 14549 14556 14550 + 14557 14550 14556 + 14551 14550 14557 + 14410 14409 14553 + 14415 14553 14409 + 14558 14553 14415 + 14553 14558 14559 + 14559 14554 14553 + 14554 14559 14560 + 14560 14561 14554 + 14554 14561 14555 + 14562 14555 14561 + 14556 14555 14562 + 14415 14563 14558 + 14558 14563 14564 + 14564 14565 14558 + 14558 14565 14559 + 14560 14559 14565 + 14565 14566 14560 + 14567 14560 14566 + 14561 14560 14567 + 14563 14415 14414 + 14414 14568 14563 + 14564 14563 14568 + 14568 14569 14564 + 14570 14564 14569 + 14565 14564 14570 + 14570 14566 14565 + 14566 14570 14571 + 14571 14572 14566 + 14566 14572 14567 + 14573 14568 14414 + 14568 14573 14574 + 14574 14569 14568 + 14575 14569 14574 + 14569 14575 14570 + 14570 14575 14464 + 14464 14571 14570 + 14463 14571 14464 + 14572 14571 14463 + 14414 14419 14573 + 14573 14419 14418 + 14418 14576 14573 + 14574 14573 14576 + 14576 14577 14574 + 14578 14574 14577 + 14574 14578 14575 + 14579 14576 14418 + 14576 14579 14580 + 14580 14577 14576 + 14581 14577 14580 + 14577 14581 14578 + 14418 14582 14579 + 14579 14582 14583 + 14583 14584 14579 + 14579 14584 14585 + 14585 14580 14579 + 14586 14580 14585 + 14580 14586 14581 + 14582 14418 14587 + 14587 14588 14582 + 14582 14588 14589 + 14589 14583 14582 + 14590 14583 14589 + 14584 14583 14590 + 14584 14590 14591 + 14591 14585 14584 + 14422 14587 14418 + 14592 14587 14422 + 14592 14588 14587 + 14588 14592 14593 + 14593 14589 14588 + 14594 14589 14593 + 14589 14594 14590 + 14590 14594 14595 + 14595 14596 14590 + 14596 14591 14590 + 14597 14591 14596 + 14422 14426 14592 + 14593 14592 14426 + 14426 14431 14593 + 14431 14598 14593 + 14599 14593 14598 + 14593 14599 14594 + 14594 14599 14600 + 14600 14595 14594 + 14436 14598 14431 + 14601 14598 14436 + 14598 14601 14599 + 14600 14599 14601 + 14601 14602 14600 + 14603 14600 14602 + 14595 14600 14603 + 14603 14604 14595 + 14595 14604 14605 + 14605 14596 14595 + 14436 14606 14601 + 14601 14606 14607 + 14607 14602 14601 + 14608 14602 14607 + 14602 14608 14603 + 14603 14608 14609 + 14609 14610 14603 + 14604 14603 14610 + 14606 14436 14611 + 14611 14612 14606 + 14607 14606 14612 + 14612 14613 14607 + 14614 14607 14613 + 14607 14614 14608 + 14435 14611 14436 + 14615 14611 14435 + 14612 14611 14615 + 14615 14616 14612 + 14612 14616 14617 + 14617 14613 14612 + 14618 14613 14617 + 14613 14618 14614 + 14619 14614 14618 + 14608 14614 14619 + 14435 14441 14615 + 14615 14441 14620 + 14620 14621 14615 + 14616 14615 14621 + 14621 14622 14616 + 14617 14616 14622 + 14622 14623 14617 + 14624 14617 14623 + 14617 14624 14618 + 14446 14620 14441 + 14620 14446 14451 + 14451 14625 14620 + 14620 14625 14626 + 14626 14621 14620 + 14626 14622 14621 + 14622 14626 14627 + 14627 14623 14622 + 14623 14627 14628 + 14628 14629 14623 + 14623 14629 14624 + 14625 14451 14459 + 14459 14630 14625 + 14625 14630 14627 + 14627 14626 14625 + 14630 14459 14631 + 14631 14632 14630 + 14630 14632 14633 + 14633 14634 14630 + 14630 14634 14627 + 14634 14635 14627 + 14628 14627 14635 + 14631 14459 14458 + 14458 14636 14631 + 14631 14636 14637 + 14637 14581 14631 + 14632 14631 14581 + 14581 14586 14632 + 14633 14632 14586 + 14464 14636 14458 + 14636 14464 14575 + 14575 14637 14636 + 14605 14604 14638 + 14629 14628 14639 + 14639 14640 14629 + 14624 14629 14640 + 14640 14641 14624 + 14618 14624 14641 + 14641 14642 14618 + 14618 14642 14619 + 14640 14639 14643 + 14643 14644 14640 + 14640 14644 14645 + 14645 14641 14640 + 14641 14645 14646 + 14646 14642 14641 + 14642 14646 14647 + 14647 14619 14642 + 14644 14643 14648 + 14648 14649 14644 + 14644 14649 14650 + 14650 14645 14644 + 14646 14645 14650 + 14650 14651 14646 + 14646 14651 14652 + 14652 14647 14646 + 14653 14648 14643 + 14654 14648 14653 + 14649 14648 14654 + 14654 14655 14649 + 14649 14655 14656 + 14656 14650 14649 + 14651 14650 14656 + 14656 14657 14651 + 14651 14657 14658 + 14658 14652 14651 + 14653 14659 14654 + 14660 14654 14659 + 14655 14654 14660 + 14660 14661 14655 + 14655 14661 14662 + 14662 14656 14655 + 14657 14656 14662 + 14659 14653 14663 + 14663 14664 14659 + 14659 14664 14665 + 14665 14666 14659 + 14659 14666 14667 + 14667 14660 14659 + 14663 14653 14668 + 14668 14669 14663 + 14663 14669 14670 + 14664 14663 14670 + 14671 14668 14653 + 14672 14668 14671 + 14668 14672 14673 + 14673 14669 14668 + 14669 14673 14674 + 14674 14670 14669 + 14675 14670 14674 + 14670 14675 14664 + 14676 14671 14653 + 14677 14671 14676 + 14671 14677 14610 + 14610 14678 14671 + 14671 14678 14672 + 14679 14672 14678 + 14673 14672 14679 + 14679 14680 14673 + 14680 14674 14673 + 14676 14681 14677 + 14604 14677 14681 + 14610 14677 14604 + 14678 14610 14609 + 14609 14682 14678 + 14678 14682 14679 + 14682 14683 14679 + 14683 14684 14679 + 14685 14679 14684 + 14680 14679 14685 + 14682 14609 14686 + 14682 14686 14687 + 14687 14683 14682 + 14683 14687 14688 + 14688 14689 14683 + 14683 14689 14690 + 14690 14684 14683 + 14686 14609 14691 + 14691 14692 14686 + 14687 14686 14692 + 14692 14693 14687 + 14688 14687 14693 + 14608 14691 14609 + 14619 14691 14608 + 14692 14691 14619 + 14619 14647 14692 + 14692 14647 14652 + 14652 14693 14692 + 14652 14658 14693 + 14693 14658 14688 + 14688 14658 14657 + 14657 14694 14688 + 14694 14695 14688 + 14689 14688 14695 + 14695 14696 14689 + 14689 14696 14697 + 14690 14689 14697 + 14662 14694 14657 + 14698 14694 14662 + 14694 14698 14699 + 14699 14695 14694 + 14695 14699 14700 + 14700 14696 14695 + 14696 14700 14701 + 14701 14697 14696 + 14662 14702 14698 + 14698 14702 14703 + 14703 14704 14698 + 14698 14704 14705 + 14705 14699 14698 + 14700 14699 14705 + 14705 14706 14700 + 14701 14700 14706 + 14702 14662 14661 + 14661 14707 14702 + 14703 14702 14707 + 14707 14708 14703 + 14709 14703 14708 + 14703 14709 14710 + 14710 14704 14703 + 14704 14710 14711 + 14711 14705 14704 + 14707 14661 14660 + 14660 14712 14707 + 14707 14712 14151 + 14151 14708 14707 + 14155 14708 14151 + 14708 14155 14709 + 14160 14709 14155 + 14710 14709 14160 + 14712 14660 14667 + 14667 14144 14712 + 14151 14712 14144 + 14144 14667 14713 + 14713 14139 14144 + 14139 14713 14133 + 14133 14713 14714 + 14714 14134 14133 + 14713 14667 14666 + 14666 14714 14713 + 14665 14714 14666 + 14714 14665 14715 + 14715 14134 14714 + 14129 14134 14715 + 14715 14716 14129 + 14129 14716 14130 + 14715 14665 14664 + 14717 14715 14664 + 14716 14715 14717 + 14717 14718 14716 + 14130 14716 14718 + 14718 14719 14130 + 14719 14720 14130 + 14720 14721 14130 + 14111 14130 14721 + 14722 14717 14664 + 14723 14717 14722 + 14723 14718 14717 + 14718 14723 14724 + 14724 14719 14718 + 14724 14725 14719 + 14719 14725 14726 + 14726 14720 14719 + 14664 14675 14722 + 14727 14722 14675 + 14728 14722 14727 + 14722 14728 14723 + 14723 14728 14729 + 14724 14723 14729 + 14730 14724 14729 + 14725 14724 14730 + 14675 14731 14727 + 14727 14731 14732 + 14733 14727 14732 + 14728 14727 14733 + 14733 14729 14728 + 14674 14731 14675 + 14731 14674 14680 + 14680 14732 14731 + 14685 14732 14680 + 14732 14685 14734 + 14734 14735 14732 + 14732 14735 14733 + 14736 14733 14735 + 14729 14733 14736 + 14737 14734 14685 + 14738 14734 14737 + 14738 14735 14734 + 14735 14738 14736 + 14739 14736 14738 + 14729 14736 14739 + 14740 14737 14685 + 14741 14737 14740 + 14737 14741 14742 + 14742 14743 14737 + 14737 14743 14738 + 14738 14743 14739 + 14744 14740 14685 + 14745 14740 14744 + 14740 14745 14746 + 14746 14747 14740 + 14740 14747 14741 + 14685 14748 14744 + 14749 14744 14748 + 14744 14749 14750 + 14744 14750 14745 + 14745 14750 14751 + 14752 14745 14751 + 14746 14745 14752 + 14684 14748 14685 + 14684 14690 14748 + 14748 14690 14749 + 14697 14749 14690 + 14750 14749 14697 + 14697 14751 14750 + 14751 14697 14701 + 14751 14701 14753 + 14753 14754 14751 + 14751 14754 14752 + 14755 14752 14754 + 14752 14755 14756 + 14756 14757 14752 + 14752 14757 14746 + 14706 14753 14701 + 14758 14753 14706 + 14753 14758 14759 + 14759 14754 14753 + 14754 14759 14755 + 14760 14755 14759 + 14756 14755 14760 + 14706 14761 14758 + 14762 14758 14761 + 14759 14758 14762 + 14762 14763 14759 + 14759 14763 14760 + 14761 14706 14705 + 14705 14711 14761 + 14761 14711 14764 + 14764 14765 14761 + 14761 14765 14762 + 14766 14762 14765 + 14762 14766 14767 + 14767 14763 14762 + 14763 14767 14768 + 14768 14760 14763 + 14764 14711 14710 + 14710 14769 14764 + 14770 14764 14769 + 14764 14770 14771 + 14771 14765 14764 + 14765 14771 14766 + 14772 14766 14771 + 14767 14766 14772 + 14772 14773 14767 + 14768 14767 14773 + 14160 14769 14710 + 14774 14769 14160 + 14769 14774 14770 + 14775 14770 14774 + 14771 14770 14775 + 14775 14776 14771 + 14771 14776 14772 + 14777 14772 14776 + 14773 14772 14777 + 14160 14159 14774 + 14774 14159 14158 + 14158 14165 14774 + 14774 14165 14775 + 14778 14775 14165 + 14775 14778 14776 + 14776 14778 14777 + 14777 14778 14164 + 14164 14170 14777 + 14170 14250 14777 + 14250 14779 14777 + 14773 14777 14779 + 14165 14164 14778 + 14258 14779 14250 + 14780 14779 14258 + 14779 14780 14773 + 14773 14780 14768 + 14781 14768 14780 + 14760 14768 14781 + 14781 14782 14760 + 14760 14782 14756 + 14258 14783 14780 + 14780 14783 14781 + 14781 14783 14784 + 14784 14785 14781 + 14782 14781 14785 + 14785 14786 14782 + 14756 14782 14786 + 14786 14787 14756 + 14757 14756 14787 + 14783 14258 14788 + 14788 14784 14783 + 14784 14788 14789 + 14789 14790 14784 + 14784 14790 14791 + 14791 14785 14784 + 14786 14785 14791 + 14257 14788 14258 + 14789 14788 14257 + 14257 14263 14789 + 14789 14263 14268 + 14268 14792 14789 + 14790 14789 14792 + 14792 14793 14790 + 14791 14790 14793 + 14793 14794 14791 + 14795 14791 14794 + 14791 14795 14786 + 14786 14795 14796 + 14796 14787 14786 + 14290 14792 14268 + 14793 14792 14290 + 14290 14797 14793 + 14793 14797 14798 + 14798 14794 14793 + 14799 14794 14798 + 14794 14799 14795 + 14796 14795 14799 + 14799 14800 14796 + 14801 14796 14800 + 14796 14801 14802 + 14797 14290 14289 + 14289 14295 14797 + 14798 14797 14295 + 14295 14803 14798 + 14804 14798 14803 + 14798 14804 14799 + 14799 14804 14805 + 14805 14800 14799 + 14300 14803 14295 + 14806 14803 14300 + 14803 14806 14804 + 14805 14804 14806 + 14806 14807 14805 + 14808 14805 14807 + 14805 14808 14809 + 14300 14810 14806 + 14806 14810 14811 + 14811 14807 14806 + 14812 14807 14811 + 14807 14812 14808 + 14813 14808 14812 + 14809 14808 14813 + 14810 14300 14814 + 14814 14815 14810 + 14811 14810 14815 + 14815 14816 14811 + 14817 14811 14816 + 14811 14817 14812 + 14299 14814 14300 + 14309 14814 14299 + 14815 14814 14309 + 14309 14818 14815 + 14815 14818 14819 + 14819 14816 14815 + 14820 14816 14819 + 14816 14820 14817 + 14821 14817 14820 + 14812 14817 14821 + 14821 14822 14812 + 14812 14822 14813 + 14818 14309 14314 + 14314 14319 14818 + 14819 14818 14319 + 14319 14823 14819 + 14824 14819 14823 + 14819 14824 14820 + 14820 14824 14825 + 14825 14826 14820 + 14820 14826 14821 + 14324 14823 14319 + 14827 14823 14324 + 14823 14827 14824 + 14825 14824 14827 + 14827 14828 14825 + 14829 14825 14828 + 14825 14829 14830 + 14830 14826 14825 + 14826 14830 14831 + 14831 14821 14826 + 14324 14832 14827 + 14832 14324 14833 + 14833 14834 14832 + 14323 14833 14324 + 14333 14833 14323 + 14834 14833 14333 + 14333 14835 14834 + 14834 14835 14836 + 14836 14837 14834 + 14834 14837 14838 + 14838 14839 14834 + 14827 14839 14838 + 14838 14828 14827 + 14835 14333 14338 + 14338 14840 14835 + 14836 14835 14840 + 14840 14841 14836 + 14842 14836 14841 + 14836 14842 14843 + 14843 14837 14836 + 14837 14843 14844 + 14844 14838 14837 + 14840 14338 14337 + 14337 14506 14840 + 14840 14506 14505 + 14505 14841 14840 + 14513 14841 14505 + 14841 14513 14842 + 14517 14842 14513 + 14843 14842 14517 + 14506 14337 14346 + 14800 14809 14801 + 14845 14801 14809 + 14802 14801 14845 + 14845 14846 14802 + 14802 14846 14746 + 14746 14757 14802 + 14787 14802 14757 + 14809 14847 14845 + 14848 14845 14847 + 14845 14848 14849 + 14849 14846 14845 + 14846 14849 14747 + 14747 14746 14846 + 14813 14847 14809 + 14850 14847 14813 + 14847 14850 14848 + 14851 14848 14850 + 14849 14848 14851 + 14851 14852 14849 + 14849 14852 14741 + 14741 14747 14849 + 14813 14853 14850 + 14850 14853 14854 + 14854 14855 14850 + 14850 14855 14851 + 14856 14851 14855 + 14856 14852 14851 + 14852 14856 14742 + 14742 14741 14852 + 14853 14813 14822 + 14822 14857 14853 + 14854 14853 14857 + 14857 14858 14854 + 14859 14854 14858 + 14855 14854 14859 + 14859 14860 14855 + 14855 14860 14856 + 14742 14856 14860 + 14857 14822 14821 + 14821 14831 14857 + 14857 14831 14861 + 14861 14858 14857 + 14858 14861 14862 + 14862 14863 14858 + 14858 14863 14859 + 14859 14863 14864 + 14864 14865 14859 + 14860 14859 14865 + 14861 14831 14830 + 14830 14866 14861 + 14862 14861 14866 + 14866 14867 14862 + 14862 14867 14868 + 14868 14869 14862 + 14863 14862 14869 + 14869 14864 14863 + 14870 14866 14830 + 14866 14870 14871 + 14871 14867 14866 + 14867 14871 14872 + 14872 14868 14867 + 14830 14829 14870 + 14873 14870 14829 + 14871 14870 14873 + 14873 14874 14871 + 14872 14871 14874 + 14874 14875 14872 + 14876 14872 14875 + 14868 14872 14876 + 14829 14877 14873 + 14878 14873 14877 + 14874 14873 14878 + 14878 14879 14874 + 14874 14879 14880 + 14880 14875 14874 + 14828 14877 14829 + 14877 14828 14838 + 14838 14844 14877 + 14877 14844 14878 + 14878 14844 14843 + 14843 14881 14878 + 14879 14878 14881 + 14881 14882 14879 + 14879 14882 14883 + 14883 14880 14879 + 14884 14880 14883 + 14875 14880 14884 + 14884 14885 14875 + 14875 14885 14876 + 14517 14881 14843 + 14881 14517 14516 + 14516 14882 14881 + 14882 14516 14886 + 14886 14883 14882 + 14887 14883 14886 + 14883 14887 14884 + 14884 14887 14888 + 14888 14889 14884 + 14885 14884 14889 + 14889 14890 14885 + 14876 14885 14890 + 14520 14886 14516 + 14891 14886 14520 + 14886 14891 14887 + 14887 14891 14892 + 14892 14888 14887 + 14893 14888 14892 + 14888 14893 14894 + 14894 14889 14888 + 14889 14894 14895 + 14895 14890 14889 + 14520 14528 14891 + 14891 14528 14896 + 14896 14892 14891 + 14897 14892 14896 + 14892 14897 14893 + 14893 14897 14898 + 14898 14899 14893 + 14894 14893 14899 + 14899 14900 14894 + 14895 14894 14900 + 14527 14896 14528 + 14901 14896 14527 + 14896 14901 14897 + 14897 14901 14902 + 14902 14898 14897 + 14903 14898 14902 + 14898 14903 14904 + 14904 14899 14898 + 14899 14904 14905 + 14905 14900 14899 + 14527 14533 14901 + 14901 14533 14906 + 14906 14902 14901 + 14907 14902 14906 + 14902 14907 14903 + 14903 14907 14908 + 14908 14909 14903 + 14904 14903 14909 + 14909 14910 14904 + 14905 14904 14910 + 14911 14906 14533 + 14912 14906 14911 + 14906 14912 14907 + 14907 14912 14913 + 14913 14908 14907 + 14914 14908 14913 + 14908 14914 14915 + 14915 14909 14908 + 14533 14532 14911 + 14916 14911 14532 + 14917 14911 14916 + 14911 14917 14912 + 14912 14917 14918 + 14918 14913 14912 + 14919 14913 14918 + 14913 14919 14914 + 14532 14538 14916 + 14916 14538 14920 + 14920 14921 14916 + 14922 14916 14921 + 14916 14922 14917 + 14917 14922 14923 + 14923 14918 14917 + 14924 14918 14923 + 14918 14924 14919 + 14538 14543 14920 + 14541 14920 14543 + 14925 14920 14541 + 14920 14925 14926 + 14926 14921 14920 + 14927 14921 14926 + 14921 14927 14922 + 14922 14927 14928 + 14928 14923 14922 + 14543 14542 14541 + 14541 14547 14925 + 14925 14547 14929 + 14929 14930 14925 + 14925 14930 14931 + 14931 14926 14925 + 14932 14926 14931 + 14926 14932 14927 + 14927 14932 14933 + 14933 14928 14927 + 14552 14929 14547 + 14934 14929 14552 + 14930 14929 14934 + 14934 14935 14930 + 14930 14935 14936 + 14936 14931 14930 + 14937 14931 14936 + 14931 14937 14932 + 14932 14937 14938 + 14938 14933 14932 + 14552 14551 14934 + 14939 14934 14551 + 14935 14934 14939 + 14939 14940 14935 + 14935 14940 14941 + 14941 14936 14935 + 14942 14936 14941 + 14936 14942 14937 + 14937 14942 14943 + 14943 14938 14937 + 14551 14944 14939 + 14944 14945 14939 + 14946 14939 14945 + 14940 14939 14946 + 14946 14947 14940 + 14940 14947 14948 + 14948 14941 14940 + 14557 14944 14551 + 14949 14944 14557 + 14944 14949 14950 + 14950 14945 14944 + 14945 14950 14951 + 14951 14952 14945 + 14945 14952 14946 + 14953 14946 14952 + 14947 14946 14953 + 14557 14954 14949 + 14949 14954 14955 + 14955 14956 14949 + 14950 14949 14956 + 14956 14957 14950 + 14951 14950 14957 + 14954 14557 14958 + 14958 14959 14954 + 14955 14954 14959 + 14959 14960 14955 + 14961 14955 14960 + 14956 14955 14961 + 14556 14958 14557 + 14562 14958 14556 + 14959 14958 14562 + 14562 14962 14959 + 14959 14962 14963 + 14963 14960 14959 + 14960 14963 14964 + 14964 14965 14960 + 14960 14965 14961 + 14962 14562 14966 + 14966 14967 14962 + 14963 14962 14967 + 14967 14968 14963 + 14968 14969 14963 + 14964 14963 14969 + 14561 14966 14562 + 14567 14966 14561 + 14967 14966 14567 + 14567 14970 14967 + 14967 14970 14971 + 14971 14968 14967 + 14968 14971 14972 + 14972 14973 14968 + 14968 14973 14974 + 14974 14969 14968 + 14970 14567 14572 + 14572 14469 14970 + 14971 14970 14469 + 14469 14468 14971 + 14972 14971 14468 + 14468 14467 14972 + 14975 14972 14467 + 14973 14972 14975 + 14463 14469 14572 + 14476 14975 14467 + 14976 14975 14476 + 14975 14976 14977 + 14977 14978 14975 + 14975 14978 14973 + 14973 14978 14979 + 14979 14974 14973 + 14980 14974 14979 + 14969 14974 14980 + 14476 14481 14976 + 14976 14481 14981 + 14981 14982 14976 + 14977 14976 14982 + 14982 14983 14977 + 14984 14977 14983 + 14978 14977 14984 + 14984 14979 14978 + 14480 14981 14481 + 14985 14981 14480 + 14981 14985 14986 + 14986 14982 14981 + 14982 14986 14987 + 14987 14983 14982 + 14983 14987 14988 + 14988 14989 14983 + 14983 14989 14984 + 14480 14479 14985 + 14985 14479 14990 + 14990 14991 14985 + 14985 14991 14992 + 14992 14986 14985 + 14987 14986 14992 + 14992 14993 14987 + 14988 14987 14993 + 14994 14990 14479 + 14995 14990 14994 + 14995 14991 14990 + 14991 14995 14996 + 14996 14992 14991 + 14996 14993 14992 + 14993 14996 14997 + 14997 14998 14993 + 14993 14998 14988 + 14502 14994 14479 + 14999 14994 14502 + 15000 14994 14999 + 14994 15000 14995 + 14996 14995 15000 + 14502 14501 14999 + 15001 14999 14501 + 15000 14999 15001 + 15001 15002 15000 + 15000 15002 14996 + 15003 15001 14501 + 15004 15001 15003 + 15002 15001 15004 + 15002 15004 15005 + 15005 15006 15002 + 15002 15006 14996 + 15007 15003 14501 + 15008 15003 15007 + 15008 15009 15003 + 15003 15009 15004 + 15004 15009 15010 + 15010 15005 15004 + 15011 15005 15010 + 15006 15005 15011 + 14500 15007 14501 + 15012 15007 14500 + 15013 15007 15012 + 15007 15013 15008 + 15008 15013 1628 + 15014 15008 1628 + 15009 15008 15014 + 15014 15010 15009 + 15014 15015 15010 + 15010 15015 15011 + 14500 7560 15012 + 1629 15012 7560 + 15013 15012 1629 + 1629 1628 15013 + 1624 1629 7560 + 7559 1624 7560 + 15016 1624 7559 + 1624 15016 1620 + 1620 15016 15017 + 15017 15018 1620 + 1620 15018 1615 + 7559 7558 15016 + 15017 15016 7558 + 15019 15017 7558 + 15020 15017 15019 + 15018 15017 15020 + 15018 15020 15021 + 15021 1615 15018 + 1616 1615 15021 + 1616 15021 15022 + 15022 1610 1616 + 7566 15019 7558 + 15023 15019 7566 + 15024 15019 15023 + 15019 15024 15020 + 15020 15024 15025 + 15021 15020 15025 + 15025 15022 15021 + 15026 15022 15025 + 15026 1610 15022 + 1610 15026 1611 + 7566 15027 15023 + 15028 15023 15027 + 15024 15023 15028 + 15028 15029 15024 + 15024 15029 15025 + 15027 7566 7565 + 15027 7565 7564 + 7564 15030 15027 + 15027 15030 15028 + 15025 15031 15026 + 15026 15031 15032 + 1611 15026 15032 + 15032 15033 1611 + 1607 1611 15033 + 15033 15034 1607 + 1607 15034 1602 + 15034 15035 1602 + 15035 15036 1602 + 15036 15037 1602 + 15037 15038 1602 + 15039 15034 15033 + 15034 15039 15040 + 15040 15035 15034 + 15040 15041 15035 + 15035 15041 15042 + 15042 15036 15035 + 15033 15043 15039 + 15039 15043 15044 + 15044 15045 15039 + 15040 15039 15045 + 15045 15046 15040 + 15041 15040 15046 + 15046 15047 15041 + 15042 15041 15047 + 15043 15033 15048 + 15048 15049 15043 + 15043 15049 15050 + 15050 15044 15043 + 15051 15044 15050 + 15045 15044 15051 + 15045 15051 15052 + 15052 15046 15045 + 15047 15046 15052 + 15048 15053 15049 + 15049 15053 15054 + 15054 15050 15049 + 15050 15054 15055 + 15050 15055 15051 + 15051 15055 505 + 15052 15051 505 + 15053 15048 15056 + 15056 15057 15053 + 15054 15053 15057 + 15058 15054 15057 + 15055 15054 15058 + 15058 15059 15055 + 15055 15059 505 + 15057 15056 15060 + 15060 15061 15057 + 15057 15061 15062 + 15062 15058 15057 + 15058 15062 15059 + 15059 15062 15063 + 15063 15064 15059 + 15059 15064 505 + 15061 15060 15065 + 15065 15066 15061 + 15062 15061 15066 + 15063 15062 15066 + 15067 15063 15066 + 15063 15067 15064 + 15064 15067 15068 + 15068 15069 15064 + 15064 15069 505 + 15069 15070 505 + 15070 506 505 + 15065 15071 15066 + 15066 15071 15067 + 15067 15071 15072 + 15068 15067 15072 + 15073 15068 15072 + 15068 15073 15069 + 15069 15073 15074 + 15074 15070 15069 + 15071 15065 15075 + 15075 15072 15071 + 15075 15076 15072 + 15072 15076 15073 + 15073 15076 15077 + 15074 15073 15077 + 15077 15078 15074 + 15079 15074 15078 + 15074 15079 15070 + 15075 15065 15080 + 505 511 15052 + 511 15081 15052 + 15081 15082 15052 + 15047 15052 15082 + 15082 15083 15047 + 15047 15083 15042 + 15084 15081 511 + 15084 15085 15081 + 15081 15085 15086 + 15086 15082 15081 + 15086 15083 15082 + 15042 15083 15086 + 15087 15042 15086 + 15042 15087 15036 + 511 510 15084 + 15084 510 509 + 509 15088 15084 + 15088 15089 15084 + 15085 15084 15089 + 15089 15090 15085 + 15085 15090 15091 + 15086 15085 15091 + 15091 15087 15086 + 15036 15087 15091 + 15091 15037 15036 + 15092 15089 15088 + 15089 15092 15093 + 15093 15090 15089 + 15090 15093 15094 + 15094 15091 15090 + 15091 15094 15037 + 15037 15094 15095 + 15095 15096 15037 + 15088 15097 15092 + 15092 15097 15098 + 14721 14112 14111 + 14721 15099 14112 + 14112 15099 14113 + 15099 15100 14113 + 14107 14113 15100 + 15100 15101 14107 + 14107 15101 14108 + 15099 14721 14720 + 14720 15100 15099 + 15101 15100 14720 + 14720 14726 15101 + 15101 14726 15102 + 15102 14108 15101 + 15103 14108 15102 + 14108 15103 14109 + 14109 15103 15104 + 15104 15105 14109 + 14104 14109 15105 + 15106 15102 14726 + 15107 15102 15106 + 15102 15107 15103 + 15103 15107 15108 + 15108 15104 15103 + 15109 15104 15108 + 15104 15109 15110 + 15110 15105 15104 + 14726 14725 15106 + 14725 15111 15106 + 15112 15106 15111 + 15113 15106 15112 + 15106 15113 15107 + 15107 15113 15114 + 15114 15108 15107 + 15115 15108 15114 + 15108 15115 15109 + 14730 15111 14725 + 14730 15116 15111 + 15111 15116 15112 + 15117 15112 15116 + 15118 15112 15117 + 15112 15118 15113 + 15113 15118 15119 + 15119 15114 15113 + 15120 15114 15119 + 15114 15120 15115 + 15116 14730 15121 + 15121 15122 15116 + 15116 15122 15117 + 15123 15117 15122 + 15124 15117 15123 + 15117 15124 15118 + 15118 15124 15125 + 15125 15119 15118 + 15121 14730 14729 + 15126 15121 14729 + 15127 15121 15126 + 15121 15127 15122 + 15122 15127 15123 + 15128 15123 15127 + 15129 15123 15128 + 15123 15129 15124 + 15124 15129 15130 + 15130 15125 15124 + 14729 15131 15126 + 15132 15126 15131 + 15126 15132 15133 + 15126 15133 15127 + 15127 15133 15128 + 14739 15131 14729 + 15131 14739 15134 + 15131 15134 15132 + 15132 15134 14742 + 15135 15132 14742 + 15133 15132 15135 + 15135 15136 15133 + 15133 15136 15128 + 15134 14739 14743 + 14743 14742 15134 + 14860 15135 14742 + 14865 15135 14860 + 15135 14865 15137 + 15137 15136 15135 + 15136 15137 15138 + 15138 15128 15136 + 15139 15128 15138 + 15128 15139 15129 + 15129 15139 15140 + 15140 15130 15129 + 15137 14865 14864 + 14864 15141 15137 + 15137 15141 15142 + 15142 15138 15137 + 15143 15138 15142 + 15138 15143 15139 + 15139 15143 15144 + 15144 15140 15139 + 15145 15141 14864 + 15141 15145 15146 + 15146 15142 15141 + 15147 15142 15146 + 15142 15147 15143 + 15143 15147 15148 + 15148 15144 15143 + 14864 14869 15145 + 15145 14869 14868 + 14868 15149 15145 + 15145 15149 15150 + 15150 15146 15145 + 15151 15146 15150 + 15146 15151 15147 + 15147 15151 15152 + 15152 15148 15147 + 14876 15149 14868 + 15149 14876 15153 + 15153 15150 15149 + 15154 15150 15153 + 15150 15154 15151 + 15151 15154 15155 + 15155 15152 15151 + 15156 15152 15155 + 15152 15156 15157 + 15157 15148 15152 + 14890 15153 14876 + 15158 15153 14890 + 15153 15158 15154 + 15154 15158 15159 + 15159 15155 15154 + 15160 15155 15159 + 15155 15160 15156 + 15156 15160 15161 + 15161 15162 15156 + 15157 15156 15162 + 14890 14895 15158 + 15158 14895 15163 + 15163 15159 15158 + 15164 15159 15163 + 15159 15164 15160 + 15160 15164 15165 + 15165 15161 15160 + 15166 15161 15165 + 15161 15166 15167 + 15167 15162 15161 + 14900 15163 14895 + 15168 15163 14900 + 15163 15168 15164 + 15164 15168 15169 + 15169 15165 15164 + 15170 15165 15169 + 15165 15170 15166 + 15166 15170 15171 + 15171 15172 15166 + 15167 15166 15172 + 14900 14905 15168 + 15168 14905 15173 + 15173 15169 15168 + 15174 15169 15173 + 15169 15174 15170 + 15170 15174 15175 + 15175 15171 15170 + 15176 15171 15175 + 15171 15176 15177 + 15177 15172 15171 + 14910 15173 14905 + 15178 15173 14910 + 15173 15178 15174 + 15174 15178 15179 + 15179 15175 15174 + 15180 15175 15179 + 15175 15180 15176 + 15176 15180 15181 + 15181 15182 15176 + 15177 15176 15182 + 14910 15183 15178 + 15178 15183 15184 + 15184 15179 15178 + 15185 15179 15184 + 15179 15185 15180 + 15180 15185 15186 + 15186 15181 15180 + 15183 14910 14909 + 14909 14915 15183 + 15183 14915 15187 + 15187 15184 15183 + 15188 15184 15187 + 15184 15188 15185 + 15185 15188 15189 + 15189 15186 15185 + 15190 15186 15189 + 15186 15190 15191 + 15191 15181 15186 + 15192 15187 14915 + 15193 15187 15192 + 15187 15193 15188 + 15188 15193 15194 + 15194 15189 15188 + 15195 15189 15194 + 15189 15195 15190 + 15196 15190 15195 + 15191 15190 15196 + 14915 14914 15192 + 15197 15192 14914 + 15198 15192 15197 + 15192 15198 15193 + 15193 15198 15199 + 15199 15194 15193 + 15200 15194 15199 + 15194 15200 15195 + 14914 14919 15197 + 15201 15197 14919 + 15202 15197 15201 + 15197 15202 15198 + 15198 15202 15203 + 15203 15199 15198 + 15204 15199 15203 + 15199 15204 15200 + 15205 15200 15204 + 15195 15200 15205 + 14919 14924 15201 + 15206 15201 14924 + 15207 15201 15206 + 15201 15207 15202 + 15202 15207 15208 + 15208 15203 15202 + 15209 15203 15208 + 15203 15209 15204 + 14924 15210 15206 + 15211 15206 15210 + 15212 15206 15211 + 15206 15212 15207 + 15207 15212 15213 + 15213 15208 15207 + 15214 15208 15213 + 15208 15214 15209 + 14923 15210 14924 + 15210 14923 14928 + 14928 15215 15210 + 15210 15215 15211 + 15216 15211 15215 + 15217 15211 15216 + 15211 15217 15212 + 15212 15217 15218 + 15218 15213 15212 + 15219 15213 15218 + 15213 15219 15214 + 15215 14928 14933 + 14933 15220 15215 + 15215 15220 15216 + 15221 15216 15220 + 15222 15216 15221 + 15216 15222 15217 + 15217 15222 15223 + 15223 15218 15217 + 15224 15218 15223 + 15218 15224 15219 + 15220 14933 14938 + 14938 15225 15220 + 15220 15225 15221 + 15226 15221 15225 + 15227 15221 15226 + 15221 15227 15222 + 15222 15227 15228 + 15228 15223 15222 + 15229 15223 15228 + 15223 15229 15224 + 15225 14938 14943 + 14943 15230 15225 + 15225 15230 15226 + 15231 15226 15230 + 15232 15226 15231 + 15226 15232 15227 + 15227 15232 15233 + 15233 15228 15227 + 15234 15228 15233 + 15228 15234 15229 + 15230 14943 15235 + 15235 15236 15230 + 15230 15236 15231 + 15237 15231 15236 + 15238 15231 15237 + 15231 15238 15232 + 15232 15238 15239 + 15239 15233 15232 + 15235 14943 14942 + 14942 15240 15235 + 15241 15235 15240 + 15236 15235 15241 + 15241 15242 15236 + 15236 15242 15237 + 15243 15237 15242 + 15244 15237 15243 + 15237 15244 15238 + 14941 15240 14942 + 15240 14941 14948 + 14948 15245 15240 + 15240 15245 15241 + 15246 15241 15245 + 15242 15241 15246 + 15246 15247 15242 + 15242 15247 15243 + 15248 15243 15247 + 15249 15243 15248 + 15243 15249 15244 + 15245 14948 15250 + 15250 15251 15245 + 15245 15251 15246 + 15252 15246 15251 + 15247 15246 15252 + 15252 15253 15247 + 15247 15253 15248 + 15250 14948 14947 + 14947 15254 15250 + 15255 15250 15254 + 15251 15250 15255 + 15255 15256 15251 + 15251 15256 15252 + 15257 15252 15256 + 15253 15252 15257 + 14953 15254 14947 + 15254 14953 15258 + 15258 15259 15254 + 15254 15259 15255 + 15260 15255 15259 + 15256 15255 15260 + 15260 15261 15256 + 15256 15261 15257 + 15258 14953 15262 + 15262 15263 15258 + 15264 15258 15263 + 15259 15258 15264 + 15264 15265 15259 + 15259 15265 15260 + 15266 15260 15265 + 15261 15260 15266 + 14952 15262 14953 + 15267 15262 14952 + 15262 15267 15268 + 15268 15263 15262 + 15263 15268 15269 + 15269 15270 15263 + 15263 15270 15264 + 15271 15264 15270 + 15265 15264 15271 + 14952 14951 15267 + 15267 14951 15272 + 15272 15273 15267 + 15268 15267 15273 + 15273 15274 15268 + 15269 15268 15274 + 14957 15272 14951 + 15272 14957 15275 + 15275 15276 15272 + 15272 15276 15277 + 15277 15273 15272 + 15274 15273 15277 + 15275 14957 14956 + 14956 15278 15275 + 15275 15278 15279 + 15279 15280 15275 + 15276 15275 15280 + 15280 15281 15276 + 15277 15276 15281 + 14961 15278 14956 + 15278 14961 15282 + 15282 15279 15278 + 15279 15282 15283 + 15283 15284 15279 + 15279 15284 15285 + 15285 15280 15279 + 15281 15280 15285 + 15282 14961 14965 + 14965 15286 15282 + 15283 15282 15286 + 15286 15287 15283 + 15288 15283 15287 + 15284 15283 15288 + 15288 15289 15284 + 15284 15289 15290 + 15290 15285 15284 + 15291 15286 14965 + 15287 15286 15291 + 15291 15292 15287 + 15287 15292 15293 + 15293 15294 15287 + 15287 15294 15288 + 14965 14964 15291 + 15291 14964 15295 + 15295 15296 15291 + 15292 15291 15296 + 15296 15297 15292 + 15293 15292 15297 + 14969 15295 14964 + 14980 15295 14969 + 15295 14980 15298 + 15298 15296 15295 + 15297 15296 15298 + 15298 15299 15297 + 15297 15299 15300 + 15300 15301 15297 + 15297 15301 15293 + 15298 14980 15302 + 15302 15303 15298 + 15299 15298 15303 + 15303 15304 15299 + 15300 15299 15304 + 14979 15302 14980 + 15305 15302 14979 + 15302 15305 15306 + 15306 15303 15302 + 15304 15303 15306 + 15306 15307 15304 + 15304 15307 15308 + 15308 15309 15304 + 15304 15309 15300 + 14979 14984 15305 + 15305 14984 14989 + 14989 15310 15305 + 15306 15305 15310 + 15310 15311 15306 + 15307 15306 15311 + 15311 15312 15307 + 15308 15307 15312 + 15313 15310 14989 + 15310 15313 15314 + 15314 15311 15310 + 15312 15311 15314 + 15314 15315 15312 + 15312 15315 15316 + 15316 15317 15312 + 15312 15317 15308 + 14989 14988 15313 + 15313 14988 14998 + 14998 15318 15313 + 15314 15313 15318 + 15318 15319 15314 + 15319 15320 15314 + 15315 15314 15320 + 15320 15321 15315 + 15316 15315 15321 + 14997 15318 14998 + 15318 14997 15322 + 15322 15319 15318 + 15322 15323 15319 + 15319 15323 15324 + 15324 15320 15319 + 15321 15320 15324 + 15322 14997 14996 + 15325 15322 14996 + 15323 15322 15325 + 15325 15326 15323 + 15324 15323 15326 + 15326 15327 15324 + 15327 15328 15324 + 15329 15324 15328 + 15324 15329 15321 + 15330 15325 14996 + 15331 15325 15330 + 15325 15331 15326 + 15326 15331 15332 + 15332 15327 15326 + 15332 15333 15327 + 15327 15333 15334 + 15334 15328 15327 + 15006 15330 14996 + 15335 15330 15006 + 15330 15335 15336 + 15330 15336 15331 + 15332 15331 15336 + 15337 15332 15336 + 15333 15332 15337 + 15337 15338 15333 + 15334 15333 15338 + 15006 15011 15335 + 15339 15335 15011 + 15336 15335 15339 + 15339 15340 15336 + 15336 15340 15337 + 15341 15337 15340 + 15341 15338 15337 + 15338 15341 15342 + 15342 15343 15338 + 15338 15343 15334 + 15344 15339 15011 + 15345 15339 15344 + 15339 15345 15346 + 15346 15340 15339 + 15340 15346 15341 + 15341 15346 15347 + 15347 5158 15341 + 5158 15342 15341 + 15011 15015 15344 + 15348 15344 15015 + 15348 15349 15344 + 15344 15349 15345 + 15345 15349 15350 + 15350 15351 15345 + 15351 15352 15345 + 15346 15345 15352 + 15352 15347 15346 + 15015 15014 15348 + 15348 15014 1628 + 15353 15348 1628 + 15349 15348 15353 + 15353 15350 15349 + 1639 15350 15353 + 15350 1639 5146 + 5146 15351 15350 + 5145 15351 5146 + 15351 5145 15354 + 15354 15352 15351 + 15354 15347 15352 + 1628 1634 15353 + 1639 15353 1634 + 5153 15354 5145 + 15347 15354 5153 + 5153 5158 15347 + 14605 15355 14596 + 14596 15355 14597 + 248 7356 14280 + 248 14280 15356 + 15357 15358 13509 + 15359 15357 13509 + 7328 15357 15359 + 15360 15357 7328 + 7323 15359 13509 + 7322 15359 7323 + 15359 7322 7328 + 7409 15361 3363 + 15362 7409 3363 + 15363 14182 15364 + 15365 14182 15363 + 14182 15365 14220 + 14220 15366 14182 + 15363 15367 15365 + 14215 15365 15367 + 14220 15365 14215 + 15363 15368 15367 + 15367 15368 15369 + 15369 14216 15367 + 15367 14216 14215 + 15368 15363 15370 + 15370 250 15368 + 15369 15368 250 + 250 15371 15369 + 14211 15369 15371 + 15369 14211 14210 + 14210 14216 15369 + 13621 15371 250 + 13620 15371 13621 + 15371 13620 14211 + 250 214 13621 + 13755 15372 15373 + 15372 13761 15373 + 15374 1486 15375 + 1486 1485 15375 + 15376 15375 1485 + 1485 1484 15376 + 15377 15376 1484 + 15378 336 15379 + 15380 336 15378 + 15378 621 15380 + 15381 15382 3773 + 15383 3773 15382 + 3773 15383 3774 + 3774 15383 15384 + 15384 3788 3774 + 15382 15385 15383 + 15383 15385 495 + 495 15384 15383 + 15386 15384 495 + 3788 15384 15386 + 15386 15387 3788 + 3788 15387 3789 + 3819 3789 15387 + 3818 3789 3819 + 3789 3818 229 + 495 15388 15386 + 15386 15388 15389 + 15389 15390 15386 + 15387 15386 15390 + 15390 15391 15387 + 15387 15391 3819 + 3479 3819 15391 + 15392 15390 15389 + 15391 15390 15392 + 15391 15392 3479 + 3479 15392 15393 + 15393 15394 3479 + 15394 3480 3479 + 3481 3480 15394 + 15389 15395 15392 + 15392 15395 15393 + 15077 15393 15395 + 15077 15396 15393 + 15393 15396 15397 + 15397 15394 15393 + 15397 15398 15394 + 15394 15398 3481 + 3481 15398 3470 + 15389 15078 15395 + 15395 15078 15077 + 15078 15389 15079 + 15399 15079 15389 + 15070 15079 15399 + 15399 506 15070 + 15399 507 506 + 507 15399 15400 + 15400 15401 507 + 15402 15399 15389 + 15403 6 15404 + 6 15405 15404 + 15406 15407 15408 + 15409 15408 15407 + 15408 15409 15410 + 15407 15411 15409 + 15409 15411 15412 + 15412 15413 15409 + 15413 15414 15409 + 15414 15415 15409 + 15415 15410 15409 + 15416 15411 15407 + 15411 15416 15417 + 15417 15412 15411 + 15412 15417 442 + 15412 442 449 + 449 15413 15412 + 15416 15407 15418 + 15418 15419 15416 + 15416 15419 15420 + 15420 15417 15416 + 442 15417 15420 + 15420 15421 442 + 442 15421 435 + 15419 15418 15422 + 15419 15422 15423 + 15423 15424 15419 + 15419 15424 15420 + 15425 15420 15424 + 15420 15425 15421 + 15421 15425 15426 + 15426 15427 15421 + 15421 15427 435 + 15428 15424 15423 + 15424 15428 15425 + 15425 15428 15429 + 15426 15425 15429 + 15429 15430 15426 + 15431 15426 15430 + 15426 15431 15427 + 15428 15423 15432 + 15432 15429 15428 + 15433 15429 15432 + 15429 15433 1602 + 1602 15430 15429 + 1602 15434 15430 + 15430 15434 15431 + 15435 15431 15434 + 15427 15431 15435 + 15435 15436 15427 + 15427 15436 435 + 15436 15437 435 + 15437 436 435 + 438 436 15437 + 15434 1602 15096 + 15096 15438 15434 + 15434 15438 15435 + 15439 15435 15438 + 15435 15439 15436 + 15436 15439 15440 + 15440 15437 15436 + 15440 15441 15437 + 15437 15441 438 + 438 15441 15092 + 15093 15092 15441 + 15095 15438 15096 + 15438 15095 15439 + 15439 15095 15094 + 15440 15439 15094 + 15094 15093 15440 + 15441 15440 15093 + 448 15413 449 + 15413 448 15442 + 15442 15414 15413 + 15414 15442 15415 + 15415 15442 15443 + 15443 15444 15415 + 15410 15415 15444 + 15442 448 453 + 453 15443 15442 + 15445 15443 453 + 15444 15443 15445 + 15444 15445 15446 + 15446 15447 15444 + 15444 15447 15410 + 15448 15410 15447 + 15410 15448 15449 + 453 452 15445 + 15445 452 391 + 15446 15445 375 + 7742 15446 375 + 15450 15446 7742 + 15450 15447 15446 + 15447 15450 15448 + 15451 15448 15450 + 15452 15448 15451 + 15451 15453 15452 + 15453 15451 7750 + 7750 15454 15453 + 7742 7751 15450 + 15450 7751 15451 + 7750 15451 7751 + 15454 7750 7749 + 7749 15455 15454 + 15456 15455 7749 + 15457 15458 3030 + 3025 3030 15458 + 15458 186 3025 + 3025 186 15459 + 5800 3909 15460 + 15460 3878 5800 + 15461 15462 15463 + 15464 15462 15461 + 15464 15465 15462 + 15462 15465 15466 + 15466 15467 15462 + 15466 15468 15467 + 15461 15469 15464 + 15468 15466 15470 + 15470 15471 15468 + 15470 2086 15471 + 2086 15472 15471 + 3715 15473 15474 + 3704 15473 3715 + 3715 15475 3704 + 3704 15475 15476 + 15476 15477 3704 + 15477 3705 3704 + 15477 15478 3705 + 15479 15475 3715 + 15475 15479 15480 + 15480 15476 15475 + 3715 15481 15479 + 15479 15481 15482 + 15482 7652 15479 + 15479 7652 7651 + 15480 15479 7651 + 15481 3715 3714 + 3714 15483 15481 + 15483 15484 15481 + 15484 15482 15481 + 7646 15482 15484 + 7646 7652 15482 + 15484 15483 15485 + 7681 15484 15485 + 7647 15484 7681 + 15484 7647 7646 + 7681 7649 7647 + 7649 7681 7680 + 7680 15486 7649 + 7649 15486 15487 + 15488 7649 15487 + 7680 7679 15486 + 7657 15486 7679 + 15486 7657 15487 + 15489 7657 7679 + 15490 38 15491 + 15492 15490 15491 + 15493 15494 7731 + 15494 15495 7731 + 15357 15496 14279 + 14279 15497 15357 + 3442 15498 15499 + 15499 15500 3442 + 15501 1423 1414 + 1414 15502 15501 + 15501 15502 15503 + 15503 1505 15501 + 1504 15501 1505 + 1507 15501 1504 + 15502 1414 1413 + 1413 1419 15502 + 15502 1419 1418 + 1418 15503 15502 + 20 15503 1418 + 15503 20 1506 + 1506 1505 15503 + 15504 1506 20 + 15505 4962 15506 + 15506 15507 15505 + 15508 15509 3705 + 15510 15508 3705 + 15511 15512 15513 + 15514 15513 15512 + 14635 15513 15514 + 15513 14635 14634 + 14634 15515 15513 + 15513 15515 15516 + 15517 15516 15515 + 15512 15518 15514 + 15514 15518 15519 + 15519 14628 15514 + 14635 15514 14628 + 14634 14633 15515 + 15515 14633 15517 + 14586 15517 14633 + 14585 15517 14586 + 15517 14585 14591 + 14591 15520 15517 + 7763 15521 15522 + 15522 15523 7763 + 15523 15522 15524 + 15525 15523 15524 + 15525 15524 7677 + 7677 15526 15525 + 15527 15525 15526 + 15528 15527 15526 + 15526 7676 15528 + 7676 15526 7677 + 15398 15529 3470 + 15530 15529 15398 + 15531 15529 15530 + 15529 15531 3471 + 3471 3470 15529 + 15398 15397 15530 + 15532 15530 15397 + 15531 15530 15532 + 15532 15533 15531 + 3471 15531 15533 + 15534 15532 15397 + 15029 15532 15534 + 15533 15532 15029 + 15397 15396 15534 + 15535 15534 15396 + 15536 15534 15535 + 15534 15536 15029 + 15029 15536 15537 + 15536 15538 15537 + 15076 15538 15536 + 15396 15077 15535 + 15076 15535 15077 + 15536 15535 15076 + 15539 15342 5158 + 15342 15539 15540 + 15540 15343 15342 + 15343 15540 15541 + 15541 15542 15343 + 15343 15542 15334 + 5158 5157 15539 + 15539 5157 5156 + 5156 15543 15539 + 15540 15539 15543 + 15543 15544 15540 + 15541 15540 15544 + 15544 15545 15541 + 15546 15541 15545 + 15541 15546 15547 + 15547 15542 15541 + 5167 15543 5156 + 15544 15543 5167 + 5167 15548 15544 + 15544 15548 15549 + 15549 15545 15544 + 15550 15545 15549 + 15545 15550 15546 + 15551 15546 15550 + 15547 15546 15551 + 15548 5167 15552 + 15552 15553 15548 + 15549 15548 15553 + 15553 15554 15549 + 15555 15549 15554 + 15549 15555 15550 + 5166 15552 5167 + 15556 15552 5166 + 15552 15556 15557 + 15557 15553 15552 + 15553 15557 15558 + 15558 15554 15553 + 15559 15554 15558 + 15554 15559 15555 + 15560 15555 15559 + 15550 15555 15560 + 5166 5165 15556 + 15556 5165 5164 + 5164 15561 15556 + 15557 15556 15561 + 15561 15562 15557 + 15558 15557 15562 + 15562 15563 15558 + 15563 15564 15558 + 15565 15558 15564 + 15558 15565 15559 + 5174 15561 5164 + 15561 5174 15562 + 15562 5174 15566 + 15566 15563 15562 + 15563 15566 15567 + 15567 15568 15563 + 15563 15568 15569 + 15569 15564 15563 + 15570 15564 15569 + 15564 15570 15565 + 5179 15566 5174 + 15567 15566 5179 + 5179 5183 15567 + 15571 15567 5183 + 15568 15567 15571 + 15571 15572 15568 + 15569 15568 15572 + 15572 15573 15569 + 15574 15569 15573 + 15569 15574 15570 + 5183 5182 15571 + 15575 15571 5182 + 15572 15571 15575 + 15575 15576 15572 + 15572 15576 15577 + 15577 15573 15572 + 15578 15573 15577 + 15573 15578 15574 + 15579 15574 15578 + 15570 15574 15579 + 5182 5187 15575 + 15580 15575 5187 + 15576 15575 15580 + 15580 15581 15576 + 15577 15576 15581 + 15581 15582 15577 + 15583 15577 15582 + 15577 15583 15578 + 5187 15584 15580 + 15585 15580 15584 + 15581 15580 15585 + 15585 15586 15581 + 15581 15586 15587 + 15587 15582 15581 + 15588 15582 15587 + 15582 15588 15583 + 5186 15584 5187 + 15589 15584 5186 + 15584 15589 15585 + 15590 15585 15589 + 15586 15585 15590 + 15590 15591 15586 + 15587 15586 15591 + 15591 15592 15587 + 15593 15587 15592 + 15587 15593 15588 + 5186 15594 15589 + 15589 15594 15595 + 15595 15596 15589 + 15589 15596 15590 + 15597 15590 15596 + 15591 15590 15597 + 15594 5186 5191 + 5191 15598 15594 + 15595 15594 15598 + 15598 15599 15595 + 15600 15595 15599 + 15595 15600 15601 + 15601 15596 15595 + 15596 15601 15597 + 15602 15598 5191 + 15598 15602 15603 + 15603 15599 15598 + 15599 15603 15604 + 15604 15605 15599 + 15599 15605 15600 + 15606 15600 15605 + 15601 15600 15606 + 5191 5190 15602 + 15602 5190 15607 + 15607 15608 15602 + 15603 15602 15608 + 15608 15609 15603 + 15604 15603 15609 + 15609 15610 15604 + 15611 15604 15610 + 15605 15604 15611 + 5195 15607 5190 + 15612 15607 5195 + 15607 15612 15613 + 15613 15608 15607 + 15608 15613 15614 + 15614 15609 15608 + 15609 15614 15615 + 15615 15610 15609 + 5195 5200 15612 + 15612 5200 15616 + 15616 15617 15612 + 15613 15612 15617 + 15617 15618 15613 + 15614 15613 15618 + 15618 15619 15614 + 15615 15614 15619 + 5205 15616 5200 + 15620 15616 5205 + 15616 15620 15621 + 15621 15617 15616 + 15617 15621 15622 + 15622 15618 15617 + 15618 15622 15623 + 15623 15619 15618 + 5205 5210 15620 + 15620 5210 15624 + 15624 15625 15620 + 15621 15620 15625 + 15625 15626 15621 + 15622 15621 15626 + 15626 15627 15622 + 15623 15622 15627 + 5215 15624 5210 + 15628 15624 5215 + 15624 15628 15629 + 15629 15625 15624 + 15625 15629 15630 + 15630 15626 15625 + 15626 15630 15631 + 15631 15627 15626 + 5215 15632 15628 + 15628 15632 15633 + 15633 15634 15628 + 15629 15628 15634 + 15634 15635 15629 + 15630 15629 15635 + 15635 15636 15630 + 15631 15630 15636 + 15632 5215 5214 + 5214 15637 15632 + 15632 15637 15638 + 15638 15633 15632 + 15639 15633 15638 + 15633 15639 15640 + 15640 15634 15633 + 15634 15640 15641 + 15641 15635 15634 + 15637 5214 15642 + 15642 15643 15637 + 15638 15637 15643 + 15643 15644 15638 + 15645 15638 15644 + 15638 15645 15639 + 5213 15642 5214 + 5224 15642 5213 + 15643 15642 5224 + 5224 15646 15643 + 15643 15646 15647 + 15647 15644 15643 + 15648 15644 15647 + 15644 15648 15645 + 15649 15645 15648 + 15639 15645 15649 + 15646 5224 15650 + 15650 15651 15646 + 15647 15646 15651 + 15651 15652 15647 + 15653 15647 15652 + 15647 15653 15648 + 5223 15650 5224 + 15654 15650 5223 + 15651 15650 15654 + 15654 15655 15651 + 15651 15655 15656 + 15656 15652 15651 + 15657 15652 15656 + 15652 15657 15653 + 5223 5229 15654 + 15654 5229 15658 + 15658 15659 15654 + 15655 15654 15659 + 15659 15660 15655 + 15656 15655 15660 + 15660 15661 15656 + 15662 15656 15661 + 15656 15662 15657 + 5228 15658 5229 + 15658 5228 5234 + 5234 15663 15658 + 15658 15663 15664 + 15664 15659 15658 + 15660 15659 15664 + 15664 15665 15660 + 15660 15665 15666 + 15666 15661 15660 + 15667 15661 15666 + 15661 15667 15662 + 15663 5234 15668 + 15668 15669 15663 + 15664 15663 15669 + 15669 15670 15664 + 15665 15664 15670 + 15670 15671 15665 + 15666 15665 15671 + 15672 15668 5234 + 15673 15668 15672 + 15669 15668 15673 + 15673 15674 15669 + 15669 15674 15675 + 15675 15670 15669 + 15671 15670 15675 + 5234 5233 15672 + 5239 15672 5233 + 15672 5239 15676 + 15676 15677 15672 + 15672 15677 15673 + 15673 15677 15678 + 15678 15679 15673 + 15674 15673 15679 + 15679 15680 15674 + 15675 15674 15680 + 15676 5239 5238 + 5238 15681 15676 + 15676 15681 15682 + 15682 15683 15676 + 15677 15676 15683 + 15683 15678 15677 + 5243 15681 5238 + 15681 5243 15684 + 15684 15682 15681 + 15682 15684 15685 + 15685 15686 15682 + 15682 15686 15687 + 15687 15683 15682 + 15678 15683 15687 + 5248 15684 5243 + 15685 15684 5248 + 5248 15688 15685 + 15685 15688 15689 + 15689 15690 15685 + 15686 15685 15690 + 15690 15691 15686 + 15687 15686 15691 + 15688 5248 5247 + 5247 15692 15688 + 15688 15692 15693 + 15693 15689 15688 + 15694 15689 15693 + 15689 15694 15695 + 15695 15690 15689 + 15691 15690 15695 + 15692 5247 15696 + 15696 15697 15692 + 15692 15697 15698 + 15698 15693 15692 + 15699 15693 15698 + 15693 15699 15694 + 5252 15696 5247 + 15700 15696 5252 + 15697 15696 15700 + 15700 15701 15697 + 15697 15701 15702 + 15702 15698 15697 + 15703 15698 15702 + 15698 15703 15699 + 5252 5251 15700 + 15704 15700 5251 + 15701 15700 15704 + 15704 15705 15701 + 15701 15705 15706 + 15706 15702 15701 + 15707 15702 15706 + 15702 15707 15703 + 5251 5260 15704 + 15708 15704 5260 + 15704 15708 15709 + 15709 15705 15704 + 15705 15709 15710 + 15710 15706 15705 + 15706 15710 15711 + 15711 15712 15706 + 15706 15712 15707 + 5260 5259 15708 + 15708 5259 15713 + 15713 15714 15708 + 15709 15708 15714 + 15714 15715 15709 + 15710 15709 15715 + 15715 15716 15710 + 15711 15710 15716 + 5264 15713 5259 + 15717 15713 5264 + 15713 15717 15718 + 15718 15714 15713 + 15714 15718 15719 + 15719 15715 15714 + 15715 15719 15720 + 15720 15716 15715 + 5264 5268 15717 + 15717 5268 15721 + 15721 15722 15717 + 15722 15718 15717 + 15719 15718 15722 + 15722 15723 15719 + 15719 15723 15724 + 15720 15719 15724 + 5272 15721 5268 + 15723 15721 5272 + 15722 15721 15723 + 5272 15724 15723 + 5276 15724 5272 + 15724 5276 15725 + 15725 15726 15724 + 15724 15726 15720 + 15727 15720 15726 + 15716 15720 15727 + 15727 15728 15716 + 15716 15728 15711 + 15729 15711 15728 + 15712 15711 15729 + 15725 5276 5275 + 15730 15725 5275 + 15731 15725 15730 + 15731 15726 15725 + 15726 15731 15727 + 15731 15732 15727 + 15728 15727 15732 + 15732 15733 15728 + 15728 15733 15729 + 5275 5285 15730 + 15734 15730 5285 + 15730 15734 15733 + 15733 15732 15730 + 15730 15732 15731 + 5285 5284 15734 + 15734 5284 15735 + 15735 15736 15734 + 15733 15734 15736 + 15736 15729 15733 + 15729 15736 15737 + 15737 15738 15729 + 15729 15738 15712 + 15707 15712 15738 + 15739 15735 5284 + 15735 15739 15740 + 15740 15741 15735 + 15735 15741 15737 + 15737 15736 15735 + 5284 5283 15739 + 5290 15739 5283 + 15740 15739 5290 + 5290 5320 15740 + 15742 15740 5320 + 15741 15740 15742 + 15742 15743 15741 + 15741 15743 15744 + 15744 15737 15741 + 15738 15737 15744 + 15744 15745 15738 + 15738 15745 15707 + 15703 15707 15745 + 5320 5325 15742 + 15746 15742 5325 + 15743 15742 15746 + 15746 15747 15743 + 15743 15747 15748 + 15748 15744 15743 + 15745 15744 15748 + 15748 15749 15745 + 15745 15749 15703 + 15699 15703 15749 + 5325 5324 15746 + 15750 15746 5324 + 15747 15746 15750 + 15750 15751 15747 + 15747 15751 15752 + 15752 15748 15747 + 15749 15748 15752 + 15752 15753 15749 + 15749 15753 15699 + 15694 15699 15753 + 5324 5330 15750 + 15754 15750 5330 + 15750 15754 15755 + 15755 15751 15750 + 15751 15755 15756 + 15756 15752 15751 + 15752 15756 15757 + 15757 15753 15752 + 15753 15757 15694 + 15695 15694 15757 + 5330 5329 15754 + 15758 15754 5329 + 15755 15754 15758 + 15758 15759 15755 + 15755 15759 15760 + 15760 15756 15755 + 15757 15756 15760 + 15760 15761 15757 + 15757 15761 15695 + 15762 15695 15761 + 15695 15762 15691 + 5329 15763 15758 + 15763 15764 15758 + 15765 15758 15764 + 15758 15765 15766 + 15766 15759 15758 + 15759 15766 15767 + 15767 15760 15759 + 5334 15763 5329 + 15768 15763 5334 + 15763 15768 15769 + 15769 15764 15763 + 15770 15764 15769 + 15764 15770 15765 + 15771 15765 15770 + 15766 15765 15771 + 5334 5339 15768 + 15768 5339 15772 + 15772 15773 15768 + 15768 15773 15774 + 15774 15769 15768 + 15775 15769 15774 + 15769 15775 15770 + 5344 15772 5339 + 6876 15772 5344 + 15773 15772 6876 + 6876 15776 15773 + 15773 15776 15777 + 15777 15774 15773 + 15778 15774 15777 + 15774 15778 15775 + 15775 15778 15779 + 15780 15775 15779 + 15770 15775 15780 + 15776 6876 6875 + 6875 15781 15776 + 15776 15781 15782 + 15782 15777 15776 + 15778 15777 15782 + 15782 15779 15778 + 15783 15779 15782 + 15779 15783 15784 + 15784 15785 15779 + 15779 15785 15780 + 6880 15781 6875 + 15781 6880 6889 + 6889 15782 15781 + 15782 6889 15783 + 15783 6889 6888 + 6888 6894 15783 + 15783 6894 15786 + 15786 15784 15783 + 15787 15784 15786 + 15784 15787 15788 + 15788 15785 15784 + 15785 15788 15789 + 15789 15780 15785 + 15790 15786 6894 + 15791 15786 15790 + 15786 15791 15787 + 15792 15787 15791 + 15788 15787 15792 + 15792 15793 15788 + 15788 15793 15794 + 15794 15789 15788 + 6894 6893 15790 + 15790 6893 6899 + 6899 6917 15790 + 15795 15790 6917 + 15790 15795 15791 + 15791 15795 15796 + 15796 15797 15791 + 15791 15797 15792 + 15798 15792 15797 + 15792 15798 15799 + 15799 15793 15792 + 6917 6916 15795 + 15796 15795 6916 + 6916 15800 15796 + 15801 15796 15800 + 15796 15801 15802 + 15802 15797 15796 + 15797 15802 15798 + 15803 15798 15802 + 15799 15798 15803 + 6915 15800 6916 + 6926 15800 6915 + 15800 6926 15801 + 15804 15801 6926 + 15802 15801 15804 + 15804 15805 15802 + 15802 15805 15803 + 15806 15803 15805 + 15803 15806 15807 + 15807 15808 15803 + 15803 15808 15799 + 6926 15809 15804 + 15810 15804 15809 + 15804 15810 15811 + 15811 15805 15804 + 15805 15811 15806 + 15812 15806 15811 + 15807 15806 15812 + 6925 15809 6926 + 15813 15809 6925 + 15809 15813 15810 + 15814 15810 15813 + 15811 15810 15814 + 15814 15815 15811 + 15811 15815 15812 + 6925 15816 15813 + 15813 15816 15817 + 15817 15818 15813 + 15813 15818 15814 + 15819 15814 15818 + 15814 15819 15820 + 15820 15815 15814 + 15816 6925 6924 + 6924 6931 15816 + 15817 15816 6931 + 6931 15821 15817 + 15822 15817 15821 + 15817 15822 15823 + 15823 15818 15817 + 15818 15823 15819 + 15819 15823 15824 + 15824 15825 15819 + 15820 15819 15825 + 6935 15821 6931 + 15826 15821 6935 + 15821 15826 15822 + 15822 15826 15827 + 15827 15828 15822 + 15823 15822 15828 + 15828 15824 15823 + 15824 15828 15829 + 15824 15829 15830 + 15830 15825 15824 + 6935 15831 15826 + 15826 15831 15832 + 15832 15827 15826 + 15827 15832 15833 + 15833 15834 15827 + 15827 15834 15829 + 15829 15828 15827 + 15831 6935 6938 + 6938 6943 15831 + 15831 6943 6952 + 6952 15832 15831 + 15833 15832 6952 + 6952 15835 15833 + 15836 15833 15835 + 15834 15833 15836 + 15836 15837 15834 + 15834 15837 15838 + 15829 15834 15838 + 15838 15830 15829 + 6951 15835 6952 + 15835 6951 15839 + 15839 15840 15835 + 15835 15840 15836 + 15841 15836 15840 + 15836 15841 15837 + 15837 15841 15842 + 15842 15838 15837 + 15839 6951 6957 + 6957 15843 15839 + 15844 15839 15843 + 15840 15839 15844 + 15844 15845 15840 + 15840 15845 15841 + 15841 15845 15846 + 15846 15842 15841 + 6962 15843 6957 + 6962 15847 15843 + 15843 15847 15844 + 15848 15844 15847 + 15845 15844 15848 + 15848 15849 15845 + 15845 15849 15846 + 15847 6962 15850 + 15850 15851 15847 + 15847 15851 15848 + 15851 15852 15848 + 15853 15848 15852 + 15849 15848 15853 + 6961 15850 6962 + 6967 15850 6961 + 15850 6967 15854 + 15854 15851 15850 + 15851 15854 15855 + 15855 15852 15851 + 15852 15855 15856 + 15856 15857 15852 + 15852 15857 15853 + 15854 6967 6972 + 6972 15858 15854 + 15855 15854 15858 + 15858 15859 15855 + 15856 15855 15859 + 15860 15858 6972 + 15858 15860 15861 + 15861 15859 15858 + 15861 15862 15859 + 15859 15862 15856 + 6972 6971 15860 + 15860 6971 6977 + 6977 15863 15860 + 15861 15860 15863 + 15863 15864 15861 + 15862 15861 15864 + 15864 15865 15862 + 15856 15862 15865 + 15865 15866 15856 + 15866 15867 15856 + 15857 15856 15867 + 15868 15863 6977 + 15863 15868 15869 + 15869 15864 15863 + 15864 15869 15870 + 15870 15865 15864 + 15865 15870 15871 + 15871 15866 15865 + 6977 6976 15868 + 15868 6976 6989 + 6989 15872 15868 + 15869 15868 15872 + 15872 15873 15869 + 15870 15869 15873 + 15873 15874 15870 + 15870 15874 15875 + 15875 15871 15870 + 15876 15871 15875 + 15866 15871 15876 + 15877 15872 6989 + 15872 15877 15878 + 15878 15873 15872 + 15873 15878 15879 + 15879 15874 15873 + 15874 15879 15880 + 15880 15875 15874 + 6989 6988 15877 + 15877 6988 15881 + 15881 15882 15877 + 15878 15877 15882 + 15882 15883 15878 + 15879 15878 15883 + 15883 15884 15879 + 15879 15884 15885 + 15885 15880 15879 + 6997 15881 6988 + 7006 15881 6997 + 15881 7006 15886 + 15886 15882 15881 + 15882 15886 15887 + 15887 15883 15882 + 15883 15887 15888 + 15888 15884 15883 + 15884 15888 15889 + 15889 15885 15884 + 15886 7006 15890 + 15890 15891 15886 + 15887 15886 15891 + 15891 15892 15887 + 15888 15887 15892 + 15892 15893 15888 + 15888 15893 15894 + 15894 15889 15888 + 7015 15890 7006 + 15895 15890 7015 + 15890 15895 15896 + 15896 15891 15890 + 15891 15896 15897 + 15897 15892 15891 + 15893 15892 15897 + 15897 15898 15893 + 15893 15898 15899 + 15899 15894 15893 + 7015 7020 15895 + 15895 7020 15900 + 15900 15901 15895 + 15896 15895 15901 + 15901 15902 15896 + 15896 15902 15903 + 15903 15897 15896 + 15898 15897 15903 + 15903 15904 15898 + 15899 15898 15904 + 7025 15900 7020 + 15905 15900 7025 + 15900 15905 15906 + 15906 15901 15900 + 15901 15906 15907 + 15907 15902 15901 + 15902 15907 15908 + 15908 15903 15902 + 15903 15908 15909 + 15909 15904 15903 + 7025 15910 15905 + 15905 15910 15911 + 15911 15912 15905 + 15906 15905 15912 + 15912 15913 15906 + 15907 15906 15913 + 15913 15914 15907 + 15908 15907 15914 + 15910 7025 7024 + 7024 15915 15910 + 15910 15915 15916 + 15916 15911 15910 + 15917 15911 15916 + 15911 15917 15918 + 15918 15912 15911 + 15912 15918 15919 + 15919 15913 15912 + 7029 15915 7024 + 15915 7029 15920 + 15920 15916 15915 + 15916 15920 15921 + 15921 15922 15916 + 15916 15922 15917 + 15917 15922 15923 + 15923 15924 15917 + 15918 15917 15924 + 7034 15920 7029 + 15921 15920 7034 + 7034 15925 15921 + 15921 15925 15926 + 15926 15927 15921 + 15922 15921 15927 + 15927 15923 15922 + 15928 15925 7034 + 15925 15928 15929 + 15929 15926 15925 + 15926 15929 15930 + 15930 15931 15926 + 15926 15931 15932 + 15932 15927 15926 + 15923 15927 15932 + 7034 7033 15928 + 15928 7033 7032 + 7032 15933 15928 + 15928 15933 15934 + 15934 15929 15928 + 15930 15929 15934 + 15934 15935 15930 + 15930 15935 15936 + 15936 15937 15930 + 15931 15930 15937 + 7041 15933 7032 + 15933 7041 15938 + 15938 15934 15933 + 15934 15938 15939 + 15939 15935 15934 + 15935 15939 15940 + 15940 15936 15935 + 7045 15938 7041 + 15939 15938 7045 + 7045 15941 15939 + 15939 15941 15942 + 15942 15940 15939 + 15943 15940 15942 + 15936 15940 15943 + 15943 15944 15936 + 15936 15944 15945 + 15945 15937 15936 + 7049 15941 7045 + 15941 7049 15946 + 15946 15942 15941 + 15942 15946 15947 + 15947 15948 15942 + 15942 15948 15943 + 15943 15948 15949 + 15949 15950 15943 + 15944 15943 15950 + 7054 15946 7049 + 15947 15946 7054 + 7054 15951 15947 + 15947 15951 15952 + 15952 15953 15947 + 15948 15947 15953 + 15953 15949 15948 + 7058 15951 7054 + 15951 7058 15954 + 15954 15952 15951 + 15952 15954 15955 + 15955 15956 15952 + 15952 15956 15957 + 15957 15953 15952 + 15949 15953 15957 + 7062 15954 7058 + 15955 15954 7062 + 7062 7066 15955 + 15955 7066 15958 + 15958 15959 15955 + 15956 15955 15959 + 15959 15960 15956 + 15957 15956 15960 + 15960 15961 15957 + 15962 15957 15961 + 15957 15962 15949 + 7070 15958 7066 + 15963 15958 7070 + 15958 15963 15964 + 15964 15959 15958 + 15960 15959 15964 + 15964 15965 15960 + 15960 15965 15966 + 15966 15961 15960 + 15967 15961 15966 + 15961 15967 15962 + 7070 7074 15963 + 15963 7074 15968 + 15968 15969 15963 + 15964 15963 15969 + 15969 15970 15964 + 15965 15964 15970 + 15970 15971 15965 + 15966 15965 15971 + 7079 15968 7074 + 15972 15968 7079 + 15968 15972 15973 + 15973 15969 15968 + 15969 15973 15974 + 15974 15970 15969 + 15971 15970 15974 + 7079 15975 15972 + 15972 15975 15976 + 15976 15977 15972 + 15973 15972 15977 + 15977 15978 15973 + 15974 15973 15978 + 15975 7079 7078 + 7078 7088 15975 + 15975 7088 15979 + 15979 15976 15975 + 15976 15979 15980 + 15980 15981 15976 + 15976 15981 15982 + 15982 15977 15976 + 15977 15982 15983 + 15983 15978 15977 + 15984 15979 7088 + 15980 15979 15984 + 15984 15985 15980 + 15986 15980 15985 + 15981 15980 15986 + 15986 15987 15981 + 15981 15987 15988 + 15988 15982 15981 + 15983 15982 15988 + 7088 7087 15984 + 15989 15984 7087 + 15984 15989 15990 + 15990 15985 15984 + 15985 15990 15991 + 15991 15992 15985 + 15985 15992 15986 + 7087 7092 15989 + 15993 15989 7092 + 15990 15989 15993 + 15993 15994 15990 + 15991 15990 15994 + 15994 15995 15991 + 15996 15991 15995 + 15991 15996 15997 + 15997 15992 15991 + 7092 7096 15993 + 15998 15993 7096 + 15993 15998 15999 + 15999 15994 15993 + 15994 15999 16000 + 16000 15995 15994 + 16001 15995 16000 + 15995 16001 15996 + 7096 7100 15998 + 16002 15998 7100 + 15999 15998 16002 + 16002 16003 15999 + 15999 16003 16004 + 16000 15999 16004 + 16004 16005 16000 + 16006 16000 16005 + 16000 16006 16001 + 7100 7104 16002 + 16007 16002 7104 + 16002 16007 16008 + 16008 16003 16002 + 16003 16008 16009 + 16009 16004 16003 + 16010 16004 16009 + 16004 16010 16011 + 16011 16005 16004 + 7104 7108 16007 + 16012 16007 7108 + 16008 16007 16012 + 16012 16013 16008 + 16009 16008 16013 + 7108 7112 16012 + 16014 16012 7112 + 16012 16014 16013 + 16013 16014 7171 + 7171 16015 16013 + 16013 16015 16009 + 7112 7116 16014 + 7171 16014 7116 + 7170 16015 7171 + 16015 7170 7176 + 7176 16016 16015 + 16015 16016 16009 + 16016 16017 16009 + 16018 16009 16017 + 16009 16018 16010 + 16016 7176 16019 + 16019 16020 16016 + 16016 16020 16021 + 16021 16017 16016 + 16021 16022 16017 + 16017 16022 16018 + 16019 7176 7175 + 7175 16023 16019 + 16019 16023 16024 + 16024 16025 16019 + 16020 16019 16025 + 16025 16026 16020 + 16021 16020 16026 + 16026 16027 16021 + 16022 16021 16027 + 7174 16023 7175 + 16023 7174 16028 + 16028 16024 16023 + 16029 16024 16028 + 16024 16029 16030 + 16030 16025 16024 + 16025 16030 16031 + 16031 16026 16025 + 16026 16031 16032 + 16032 16027 16026 + 7180 16028 7174 + 7189 16028 7180 + 16028 7189 16029 + 16029 7189 16033 + 16033 16034 16029 + 16030 16029 16034 + 16034 16035 16030 + 16031 16030 16035 + 16035 16036 16031 + 16032 16031 16036 + 7188 16033 7189 + 16037 16033 7188 + 16033 16037 16038 + 16038 16034 16033 + 16034 16038 16039 + 16039 16035 16034 + 16035 16039 16040 + 16040 16036 16035 + 7188 7193 16037 + 16037 7193 16041 + 16041 16042 16037 + 16038 16037 16042 + 16042 16043 16038 + 16039 16038 16043 + 16043 16044 16039 + 16040 16039 16044 + 7197 16041 7193 + 16045 16041 7197 + 16041 16045 16046 + 16046 16042 16041 + 16042 16046 16047 + 16047 16043 16042 + 16043 16047 16048 + 16048 16044 16043 + 7197 7201 16045 + 16045 7201 16049 + 16049 16050 16045 + 16046 16045 16050 + 16050 16051 16046 + 16047 16046 16051 + 16051 16052 16047 + 16048 16047 16052 + 7205 16049 7201 + 16053 16049 7205 + 16049 16053 16054 + 16054 16050 16049 + 16050 16054 16055 + 16055 16051 16050 + 16051 16055 16056 + 16056 16052 16051 + 7205 7210 16053 + 16053 7210 16057 + 16057 16058 16053 + 16054 16053 16058 + 16058 16059 16054 + 16055 16054 16059 + 16059 16060 16055 + 16056 16055 16060 + 7214 16057 7210 + 16057 7214 7219 + 7219 16061 16057 + 16057 16061 16062 + 16062 16058 16057 + 16058 16062 16063 + 16063 16059 16058 + 16059 16063 16064 + 16064 16060 16059 + 16061 7219 16065 + 16065 16066 16061 + 16062 16061 16066 + 16066 16067 16062 + 16063 16062 16067 + 16067 16068 16063 + 16064 16063 16068 + 16069 16065 7219 + 16070 16065 16069 + 16066 16065 16070 + 16067 16066 16070 + 16071 16067 16070 + 16067 16071 16068 + 16069 7219 7224 + 7224 16072 16069 + 16073 16069 16072 + 16074 16069 16073 + 16069 16074 16070 + 16071 16070 16074 + 16074 16075 16071 + 16076 16071 16075 + 16071 16076 16068 + 16077 16072 7224 + 16078 16072 16077 + 16072 16078 16073 + 16073 16078 16079 + 16079 16080 16073 + 16074 16073 16080 + 16080 16075 16074 + 7224 16081 16077 + 16077 16081 16082 + 16082 16083 16077 + 16084 16077 16083 + 16077 16084 16078 + 16078 16084 16085 + 16085 16079 16078 + 7234 16081 7224 + 16081 7234 16086 + 16086 16082 16081 + 16087 16082 16086 + 16082 16087 16088 + 16088 16083 16082 + 16083 16088 16089 + 16089 16090 16083 + 16083 16090 16084 + 7238 16086 7234 + 16091 16086 7238 + 16086 16091 16087 + 16087 16091 16092 + 16092 16093 16087 + 16087 16093 16094 + 16094 16088 16087 + 16089 16088 16094 + 7238 7243 16091 + 16092 16091 7243 + 7243 16095 16092 + 16096 16092 16095 + 16092 16096 16097 + 16097 16093 16092 + 16093 16097 16098 + 16098 16094 16093 + 13817 16095 7243 + 13826 16095 13817 + 16095 13826 16096 + 16099 16096 13826 + 16097 16096 16099 + 16099 16100 16097 + 16097 16100 16101 + 16101 16098 16097 + 16102 16098 16101 + 16094 16098 16102 + 16102 16103 16094 + 16094 16103 16089 + 13826 13825 16099 + 13831 16099 13825 + 16099 13831 16104 + 16104 16100 16099 + 16100 16104 16105 + 16105 16101 16100 + 16101 16105 16106 + 16106 16107 16101 + 16101 16107 16102 + 16104 13831 13830 + 13830 16108 16104 + 16104 16108 16109 + 16109 16105 16104 + 16106 16105 16109 + 16109 16110 16106 + 16106 16110 16111 + 16111 16112 16106 + 16107 16106 16112 + 13840 16108 13830 + 16108 13840 16113 + 16113 16109 16108 + 16109 16113 16114 + 16114 16110 16109 + 16110 16114 16115 + 16115 16111 16110 + 16116 16113 13840 + 16114 16113 16116 + 16116 16117 16114 + 16114 16117 16118 + 16118 16115 16114 + 16119 16115 16118 + 16111 16115 16119 + 13840 13845 16116 + 16120 16116 13845 + 16120 16117 16116 + 16117 16120 16121 + 16121 16118 16117 + 16122 16118 16121 + 16118 16122 16119 + 13845 16123 16120 + 16120 16123 16124 + 16121 16120 16124 + 16124 16125 16121 + 16126 16121 16125 + 16121 16126 16122 + 13844 16123 13845 + 16123 13844 13850 + 13850 16124 16123 + 16124 13850 16127 + 16127 16128 16124 + 16124 16128 16129 + 16129 16125 16124 + 16130 16125 16129 + 16125 16130 16126 + 16131 16126 16130 + 16122 16126 16131 + 16127 13850 13849 + 13849 16132 16127 + 16127 16132 16133 + 16133 16134 16127 + 16128 16127 16134 + 16134 16135 16128 + 16128 16135 16136 + 16136 16129 16128 + 13855 16132 13849 + 16132 13855 16137 + 16137 16133 16132 + 16138 16133 16137 + 16133 16138 16139 + 16139 16134 16133 + 16134 16139 16140 + 16140 16135 16134 + 16135 16140 16141 + 16141 16136 16135 + 16137 13855 13860 + 13860 16142 16137 + 16143 16137 16142 + 16137 16143 16138 + 16138 16143 16144 + 16144 16145 16138 + 16138 16145 16146 + 16146 16139 16138 + 16140 16139 16146 + 13859 16142 13860 + 16147 16142 13859 + 16142 16147 16143 + 16144 16143 16147 + 16147 16148 16144 + 16149 16144 16148 + 16144 16149 16150 + 16150 16145 16144 + 16145 16150 16151 + 16151 16146 16145 + 13859 16152 16147 + 16147 16152 16153 + 16153 16148 16147 + 16154 16148 16153 + 16148 16154 16149 + 16155 16149 16154 + 16150 16149 16155 + 16152 13859 13858 + 13858 13865 16152 + 16153 16152 13865 + 13865 16156 16153 + 16157 16153 16156 + 16153 16157 16154 + 16154 16157 16158 + 16158 16159 16154 + 16154 16159 16155 + 16160 16156 13865 + 16161 16156 16160 + 16156 16161 16157 + 16158 16157 16161 + 16161 16162 16158 + 16163 16158 16162 + 16158 16163 16164 + 16164 16159 16158 + 13865 13864 16160 + 16160 13864 13870 + 13870 16165 16160 + 16166 16160 16165 + 16160 16166 16161 + 16161 16166 16167 + 16167 16162 16161 + 16168 16162 16167 + 16162 16168 16163 + 16169 16163 16168 + 16164 16163 16169 + 13874 16165 13870 + 16170 16165 13874 + 16165 16170 16166 + 16167 16166 16170 + 16170 16171 16167 + 16172 16167 16171 + 16167 16172 16168 + 16168 16172 16173 + 16173 16174 16168 + 16168 16174 16169 + 13874 16175 16170 + 16170 16175 14011 + 14011 16171 16170 + 14015 16171 14011 + 16171 14015 16172 + 16173 16172 14015 + 16175 13874 13879 + 13879 13884 16175 + 14011 16175 13884 + 14015 16176 16173 + 14014 16176 14015 + 14020 16176 14014 + 16176 14020 16177 + 16177 16173 16176 + 16173 16177 16178 + 16178 16174 16173 + 16174 16178 16179 + 16179 16169 16174 + 16169 16179 16180 + 16180 16181 16169 + 16169 16181 16164 + 16177 14020 16182 + 16182 16183 16177 + 16178 16177 16183 + 16183 16184 16178 + 16179 16178 16184 + 16184 16185 16179 + 16180 16179 16185 + 14019 16182 14020 + 14019 14025 16182 + 16182 14025 16186 + 16186 16183 16182 + 16183 16186 16187 + 16187 16184 16183 + 16184 16187 16188 + 16188 16185 16184 + 16185 16188 16189 + 16185 16189 16180 + 16190 16180 16189 + 16181 16180 16190 + 16186 14025 14034 + 14034 16191 16186 + 16187 16186 16191 + 16191 16192 16187 + 16187 16192 16193 + 16188 16187 16193 + 16193 16194 16188 + 16189 16188 16194 + 16194 16195 16189 + 16189 16195 16190 + 16196 16191 14034 + 16196 16192 16191 + 16192 16196 16197 + 16197 16193 16192 + 16198 16193 16197 + 16193 16198 16199 + 16199 16194 16193 + 16195 16194 16199 + 14034 14039 16196 + 16196 14039 14038 + 16197 16196 14038 + 14038 16200 16197 + 16201 16197 16200 + 16197 16201 16198 + 16198 16201 16202 + 16202 16203 16198 + 16199 16198 16203 + 14044 16200 14038 + 16204 16200 14044 + 16200 16204 16201 + 16202 16201 16204 + 16204 16205 16202 + 16206 16202 16205 + 16202 16206 16207 + 16207 16203 16202 + 16204 14044 16208 + 16208 16205 16204 + 16205 16208 14053 + 14053 16209 16205 + 16205 16209 16206 + 16210 16206 16209 + 16207 16206 16210 + 14043 16208 14044 + 14053 16208 14043 + 16209 14053 14052 + 14052 16211 16209 + 16209 16211 16210 + 16212 16210 16211 + 16212 16213 16210 + 16210 16213 16207 + 16207 16213 16214 + 16215 16207 16214 + 16203 16207 16215 + 14057 16211 14052 + 16211 14057 16212 + 14066 16212 14057 + 16213 16212 14066 + 14066 16214 16213 + 14074 16214 14066 + 16214 14074 16216 + 16216 16217 16214 + 16214 16217 16215 + 16218 16215 16217 + 16215 16218 16219 + 16219 16220 16215 + 16215 16220 16203 + 16216 14074 14073 + 14073 16221 16216 + 16222 16216 16221 + 16216 16222 16223 + 16223 16217 16216 + 16217 16223 16218 + 16224 16218 16223 + 16219 16218 16224 + 14079 16221 14073 + 16225 16221 14079 + 16221 16225 16222 + 16226 16222 16225 + 16223 16222 16226 + 16226 16227 16223 + 16223 16227 16224 + 14079 16228 16225 + 16225 16228 16229 + 16229 16230 16225 + 16225 16230 16226 + 16231 16226 16230 + 16226 16231 16232 + 16232 16227 16226 + 16228 14079 16233 + 16233 16234 16228 + 16229 16228 16234 + 16234 16235 16229 + 16236 16229 16235 + 16229 16236 16237 + 16237 16230 16229 + 16230 16237 16231 + 14078 16233 14079 + 16238 16233 14078 + 16234 16233 16238 + 16238 16239 16234 + 16234 16239 16240 + 16240 16235 16234 + 16241 16235 16240 + 16235 16241 16236 + 16242 16236 16241 + 16237 16236 16242 + 14078 14077 16238 + 16238 14077 16243 + 16243 16244 16238 + 16239 16238 16244 + 16244 16245 16239 + 16240 16239 16245 + 16245 16246 16240 + 16247 16240 16246 + 16240 16247 16241 + 14083 16243 14077 + 16248 16243 14083 + 16243 16248 16249 + 16249 16244 16243 + 16245 16244 16249 + 16249 16250 16245 + 16245 16250 16251 + 16251 16246 16245 + 16252 16246 16251 + 16246 16252 16247 + 14083 16253 16248 + 16248 16253 16254 + 16254 16255 16248 + 16249 16248 16255 + 16255 16256 16249 + 16250 16249 16256 + 16256 16257 16250 + 16251 16250 16257 + 16253 14083 16258 + 16258 16259 16253 + 16254 16253 16259 + 14082 16258 14083 + 16260 16258 14082 + 16259 16258 16260 + 16259 16260 16261 + 16261 16262 16259 + 16259 16262 16254 + 14082 16263 16260 + 16261 16260 16263 + 16263 16264 16261 + 16265 16261 16264 + 16262 16261 16265 + 16262 16265 16266 + 16266 16267 16262 + 16262 16267 16254 + 14082 14086 16263 + 16263 14086 16268 + 16268 16264 16263 + 16264 16268 16269 + 16264 16269 16265 + 16265 16269 16270 + 16266 16265 16270 + 16271 16266 16270 + 16272 16266 16271 + 16272 16267 16266 + 14093 16268 14086 + 16269 16268 14093 + 14093 16273 16269 + 16269 16273 16270 + 14093 14092 16273 + 16273 14092 14091 + 14091 16270 16273 + 16270 14091 16274 + 16270 16274 16275 + 16275 16276 16270 + 16270 16276 16277 + 16277 16271 16270 + 16274 14091 14100 + 14100 16278 16274 + 16274 16278 16279 + 16279 16275 16274 + 16280 16275 16279 + 16275 16280 16276 + 16276 16280 16281 + 16281 16277 16276 + 16282 16278 14100 + 16278 16282 16283 + 16283 16279 16278 + 16279 16283 16284 + 16284 16285 16279 + 16279 16285 16280 + 16281 16280 16285 + 14100 14099 16282 + 16282 14099 16286 + 16286 16287 16282 + 16283 16282 16287 + 16287 16288 16283 + 16284 16283 16288 + 16288 16289 16284 + 16290 16284 16289 + 16285 16284 16290 + 16291 16286 14099 + 16292 16286 16291 + 16286 16292 16293 + 16293 16287 16286 + 16287 16293 16294 + 16294 16288 16287 + 16288 16294 16295 + 16295 16289 16288 + 14099 14098 16291 + 16296 16291 14098 + 16297 16291 16296 + 16291 16297 16292 + 16292 16297 16298 + 16298 16299 16292 + 16293 16292 16299 + 16299 16300 16293 + 16294 16293 16300 + 14098 14097 16296 + 16301 16296 14097 + 16302 16296 16301 + 16296 16302 16297 + 16297 16302 16303 + 16303 16298 16297 + 16304 16298 16303 + 16298 16304 16305 + 16305 16299 16298 + 14097 14104 16301 + 15105 16301 14104 + 16306 16301 15105 + 16301 16306 16302 + 16302 16306 16307 + 16307 16303 16302 + 16308 16303 16307 + 16303 16308 16304 + 16304 16308 16309 + 16309 16310 16304 + 16305 16304 16310 + 15105 15110 16306 + 16306 15110 16311 + 16311 16307 16306 + 16312 16307 16311 + 16307 16312 16308 + 16308 16312 16313 + 16313 16309 16308 + 16314 16309 16313 + 16309 16314 16315 + 16315 16310 16309 + 16316 16311 15110 + 16317 16311 16316 + 16311 16317 16312 + 16312 16317 16318 + 16318 16313 16312 + 16319 16313 16318 + 16313 16319 16314 + 15110 15109 16316 + 16320 16316 15109 + 16321 16316 16320 + 16316 16321 16317 + 16317 16321 16322 + 16322 16318 16317 + 16323 16318 16322 + 16318 16323 16319 + 15109 15115 16320 + 16324 16320 15115 + 16325 16320 16324 + 16320 16325 16321 + 16321 16325 16326 + 16326 16322 16321 + 16327 16322 16326 + 16322 16327 16323 + 15115 15120 16324 + 16328 16324 15120 + 16329 16324 16328 + 16324 16329 16325 + 16325 16329 16330 + 16330 16326 16325 + 16331 16326 16330 + 16326 16331 16327 + 15120 16332 16328 + 16333 16328 16332 + 16334 16328 16333 + 16328 16334 16329 + 16329 16334 16335 + 16335 16330 16329 + 16336 16330 16335 + 16330 16336 16331 + 15119 16332 15120 + 16332 15119 15125 + 15125 16337 16332 + 16332 16337 16333 + 16338 16333 16337 + 16339 16333 16338 + 16333 16339 16334 + 16334 16339 16340 + 16340 16335 16334 + 16341 16335 16340 + 16335 16341 16336 + 16337 15125 15130 + 15130 16342 16337 + 16337 16342 16338 + 16343 16338 16342 + 16344 16338 16343 + 16338 16344 16339 + 16339 16344 16345 + 16345 16340 16339 + 16346 16340 16345 + 16340 16346 16341 + 16342 15130 15140 + 15140 16347 16342 + 16342 16347 16343 + 16348 16343 16347 + 16349 16343 16348 + 16343 16349 16344 + 16344 16349 16350 + 16350 16345 16344 + 16351 16345 16350 + 16345 16351 16346 + 16347 15140 15144 + 15144 16352 16347 + 16347 16352 16348 + 16353 16348 16352 + 16354 16348 16353 + 16348 16354 16349 + 16349 16354 16355 + 16355 16350 16349 + 16356 16350 16355 + 16350 16356 16351 + 16352 15144 15148 + 15148 15157 16352 + 16352 15157 16353 + 15162 16353 15157 + 16357 16353 15162 + 16353 16357 16354 + 16354 16357 16358 + 16358 16355 16354 + 16359 16355 16358 + 16355 16359 16356 + 16356 16359 16360 + 16360 16361 16356 + 16351 16356 16361 + 15162 15167 16357 + 16357 15167 16362 + 16362 16358 16357 + 16363 16358 16362 + 16358 16363 16359 + 16359 16363 16364 + 16364 16360 16359 + 16365 16360 16364 + 16360 16365 16366 + 16366 16361 16360 + 15172 16362 15167 + 16367 16362 15172 + 16362 16367 16363 + 16363 16367 16368 + 16368 16364 16363 + 16369 16364 16368 + 16364 16369 16365 + 16365 16369 16370 + 16370 16371 16365 + 16366 16365 16371 + 15172 15177 16367 + 16367 15177 16372 + 16372 16368 16367 + 16373 16368 16372 + 16368 16373 16369 + 16369 16373 16374 + 16374 16370 16369 + 15182 16372 15177 + 16375 16372 15182 + 16372 16375 16373 + 16373 16375 16376 + 16376 16374 16373 + 16377 16374 16376 + 16370 16374 16377 + 16377 16378 16370 + 16370 16378 16379 + 16379 16371 16370 + 15182 16380 16375 + 16375 16380 16381 + 16381 16376 16375 + 16376 16381 16382 + 16382 16383 16376 + 16376 16383 16377 + 16380 15182 15181 + 15181 15191 16380 + 16380 15191 16384 + 16384 16381 16380 + 16382 16381 16384 + 16384 16385 16382 + 16382 16385 16386 + 16386 16387 16382 + 16383 16382 16387 + 16387 16388 16383 + 16377 16383 16388 + 15196 16384 15191 + 16384 15196 16389 + 16389 16385 16384 + 16385 16389 16390 + 16390 16386 16385 + 16386 16390 16391 + 16391 16392 16386 + 16386 16392 16393 + 16393 16387 16386 + 16387 16393 16388 + 16389 15196 16394 + 16394 16395 16389 + 16389 16395 16396 + 16396 16390 16389 + 16391 16390 16396 + 15195 16394 15196 + 15205 16394 15195 + 16394 15205 16397 + 16397 16395 16394 + 16395 16397 16398 + 16398 16396 16395 + 16398 16399 16396 + 16396 16399 16391 + 16391 16399 16400 + 16400 16401 16391 + 16392 16391 16401 + 16397 15205 16402 + 16402 16403 16397 + 16397 16403 16404 + 16404 16398 16397 + 16399 16398 16404 + 16404 16405 16399 + 16399 16405 16400 + 15204 16402 15205 + 16406 16402 15204 + 16403 16402 16406 + 16403 16406 16407 + 16407 16408 16403 + 16403 16408 16404 + 16409 16404 16408 + 16404 16409 16410 + 16410 16405 16404 + 15204 15209 16406 + 16406 15209 15214 + 15214 16407 16406 + 16411 16407 15214 + 16407 16411 16412 + 16412 16408 16407 + 16408 16412 16409 + 16413 16409 16412 + 16410 16409 16413 + 15214 15219 16411 + 16411 15219 15224 + 15224 16414 16411 + 16412 16411 16414 + 16414 16415 16412 + 16412 16415 16413 + 16416 16413 16415 + 16413 16416 16417 + 16417 16418 16413 + 16413 16418 16410 + 16419 16414 15224 + 16414 16419 16420 + 16420 16415 16414 + 16415 16420 16416 + 16421 16416 16420 + 16417 16416 16421 + 15224 15229 16419 + 16419 15229 15234 + 15234 16422 16419 + 16420 16419 16422 + 16422 16423 16420 + 16420 16423 16421 + 16424 16422 15234 + 16423 16422 16424 + 16423 16424 16425 + 16425 16426 16423 + 16423 16426 16421 + 15234 16427 16424 + 16424 16427 16428 + 16428 16425 16424 + 16429 16425 16428 + 16425 16429 16430 + 16430 16426 16425 + 16426 16430 16431 + 16431 16421 16426 + 15233 16427 15234 + 16427 15233 15239 + 15239 16428 16427 + 16428 15239 16432 + 16432 16433 16428 + 16428 16433 16429 + 16429 16433 16434 + 16434 16435 16429 + 16430 16429 16435 + 16432 15239 15238 + 15238 15244 16432 + 16436 16432 15244 + 16433 16432 16436 + 16436 16434 16433 + 16434 16436 16437 + 16437 16438 16434 + 16434 16438 16439 + 16439 16435 16434 + 15244 15249 16436 + 16437 16436 15249 + 15249 16440 16437 + 16441 16437 16440 + 16438 16437 16441 + 16441 16442 16438 + 16439 16438 16442 + 16442 16443 16439 + 16444 16439 16443 + 16435 16439 16444 + 15248 16440 15249 + 16440 15248 16445 + 16445 16446 16440 + 16440 16446 16441 + 16447 16441 16446 + 16442 16441 16447 + 16447 16448 16442 + 16442 16448 16449 + 16449 16443 16442 + 16445 15248 15253 + 15253 16450 16445 + 16451 16445 16450 + 16446 16445 16451 + 16451 16452 16446 + 16446 16452 16447 + 16453 16447 16452 + 16448 16447 16453 + 16453 16454 16448 + 16449 16448 16454 + 15257 16450 15253 + 16450 15257 16455 + 16455 16456 16450 + 16450 16456 16451 + 16457 16451 16456 + 16452 16451 16457 + 16457 16458 16452 + 16452 16458 16453 + 16459 16453 16458 + 16454 16453 16459 + 16455 15257 15261 + 15261 16460 16455 + 16461 16455 16460 + 16456 16455 16461 + 16461 16462 16456 + 16456 16462 16457 + 16463 16457 16462 + 16458 16457 16463 + 16463 16464 16458 + 16458 16464 16459 + 15266 16460 15261 + 16460 15266 16465 + 16465 16466 16460 + 16460 16466 16461 + 16467 16461 16466 + 16462 16461 16467 + 16467 16468 16462 + 16462 16468 16463 + 16469 16463 16468 + 16464 16463 16469 + 16465 15266 16470 + 16470 16471 16465 + 16472 16465 16471 + 16466 16465 16472 + 16472 16473 16466 + 16466 16473 16467 + 16474 16467 16473 + 16468 16467 16474 + 15265 16470 15266 + 15271 16470 15265 + 16470 15271 16475 + 16475 16471 16470 + 16471 16475 16476 + 16476 15611 16471 + 16471 15611 16472 + 15610 16472 15611 + 16473 16472 15610 + 15610 15615 16473 + 16473 15615 16474 + 16475 15271 16477 + 16477 16478 16475 + 16476 16475 16478 + 16478 15606 16476 + 15605 16476 15606 + 15611 16476 15605 + 15270 16477 15271 + 16477 15270 15269 + 15269 16479 16477 + 16477 16479 16480 + 16480 16478 16477 + 15606 16478 16480 + 16480 16481 15606 + 15606 16481 15601 + 15597 15601 16481 + 16479 15269 16482 + 16482 16483 16479 + 16480 16479 16483 + 16483 16484 16480 + 16481 16480 16484 + 16484 16485 16481 + 16481 16485 15597 + 16486 15597 16485 + 15597 16486 15591 + 15274 16482 15269 + 16487 16482 15274 + 16483 16482 16487 + 16487 16488 16483 + 16483 16488 16489 + 16489 16484 16483 + 16485 16484 16489 + 16489 16490 16485 + 16485 16490 16486 + 15274 16491 16487 + 16487 16491 16492 + 16492 16493 16487 + 16488 16487 16493 + 16493 16494 16488 + 16489 16488 16494 + 16494 16495 16489 + 16490 16489 16495 + 15277 16491 15274 + 16491 15277 16496 + 16496 16492 16491 + 16492 16496 16497 + 16497 16498 16492 + 16492 16498 16499 + 16499 16493 16492 + 16493 16499 16500 + 16500 16494 16493 + 15281 16496 15277 + 16497 16496 15281 + 15281 16501 16497 + 16502 16497 16501 + 16498 16497 16502 + 16502 16503 16498 + 16498 16503 16504 + 16504 16499 16498 + 16500 16499 16504 + 15285 16501 15281 + 16501 15285 15290 + 15290 16505 16501 + 16501 16505 16502 + 16506 16502 16505 + 16502 16506 16507 + 16507 16503 16502 + 16503 16507 16508 + 16508 16504 16503 + 16509 16505 15290 + 16505 16509 16506 + 16506 16509 16510 + 16511 16506 16510 + 16507 16506 16511 + 16511 16512 16507 + 16512 16508 16507 + 16513 16508 16512 + 16504 16508 16513 + 15290 16514 16509 + 16509 16514 16515 + 16515 16510 16509 + 16516 16510 16515 + 16510 16516 16517 + 16517 16518 16510 + 16510 16518 16511 + 16514 15290 15289 + 15289 16519 16514 + 16514 16519 16520 + 16520 16515 16514 + 16516 16515 16520 + 16520 16521 16516 + 16517 16516 16521 + 16519 15289 15288 + 15288 16522 16519 + 16519 16522 16523 + 16523 16524 16519 + 16519 16524 16520 + 16525 16520 16524 + 16520 16525 16526 + 16526 16521 16520 + 16522 15288 15294 + 15294 16527 16522 + 16522 16527 16528 + 16528 16523 16522 + 16529 16523 16528 + 16524 16523 16529 + 16529 16530 16524 + 16524 16530 16525 + 16527 15294 15293 + 15293 16531 16527 + 16527 16531 16532 + 16532 16528 16527 + 16528 16532 16533 + 16533 16534 16528 + 16528 16534 16529 + 16535 16529 16534 + 16530 16529 16535 + 16531 15293 15301 + 15301 16536 16531 + 16532 16531 16536 + 16536 16537 16532 + 16537 16538 16532 + 16533 16532 16538 + 16536 15301 15300 + 15300 16539 16536 + 16536 16539 16540 + 16540 16537 16536 + 16537 16540 16541 + 16541 16542 16537 + 16537 16542 16543 + 16543 16538 16537 + 16539 15300 15309 + 15309 16544 16539 + 16540 16539 16544 + 16544 16545 16540 + 16541 16540 16545 + 16545 16546 16541 + 16541 16546 16547 + 16547 16548 16541 + 16542 16541 16548 + 16544 15309 15308 + 15308 16549 16544 + 16544 16549 16550 + 16550 16545 16544 + 16545 16550 16551 + 16551 16546 16545 + 16546 16551 16552 + 16552 16547 16546 + 16549 15308 15317 + 15317 16553 16549 + 16550 16549 16553 + 16551 16550 16553 + 16553 16554 16551 + 16551 16554 16552 + 16555 16552 16554 + 16552 16555 16556 + 16556 16547 16552 + 16547 16556 16557 + 16557 16548 16547 + 16553 15317 15316 + 15316 16554 16553 + 16554 15316 16555 + 15321 16555 15316 + 16556 16555 15321 + 15321 15329 16556 + 16556 15329 16558 + 16558 16557 16556 + 16559 16557 16558 + 16548 16557 16559 + 16559 16560 16548 + 16548 16560 16542 + 16542 16560 16561 + 16561 16543 16542 + 15328 16558 15329 + 16558 15328 15334 + 15334 16562 16558 + 16558 16562 16559 + 16563 16559 16562 + 16560 16559 16563 + 16563 16561 16560 + 16561 16563 15551 + 15551 16564 16561 + 16561 16564 16565 + 16565 16543 16561 + 16543 16565 16538 + 16562 15334 15542 + 15542 15547 16562 + 16562 15547 16563 + 15551 16563 15547 + 16538 16565 16533 + 16533 16565 16564 + 16564 16566 16533 + 16534 16533 16566 + 16566 16567 16534 + 16534 16567 16535 + 16568 16566 16564 + 16566 16568 15560 + 15560 16567 16566 + 16567 15560 16569 + 16569 16535 16567 + 16535 16569 16570 + 16570 16571 16535 + 16535 16571 16530 + 16564 15551 16568 + 15550 16568 15551 + 15560 16568 15550 + 16525 16530 16571 + 16571 16572 16525 + 16526 16525 16572 + 16572 16573 16526 + 16526 16573 16574 + 16521 16526 16574 + 16575 16572 16571 + 16572 16575 15579 + 15579 16573 16572 + 16573 15579 16576 + 16576 16574 16573 + 16574 16576 16577 + 16577 16578 16574 + 16574 16578 16521 + 16571 16570 16575 + 15570 16575 16570 + 15579 16575 15570 + 16570 15565 15570 + 15559 15565 16570 + 16570 16569 15559 + 15559 16569 15560 + 15578 16576 15579 + 16577 16576 15578 + 15578 15583 16577 + 16577 15583 15588 + 15588 16579 16577 + 16578 16577 16579 + 16579 16580 16578 + 16521 16578 16580 + 16580 16517 16521 + 16581 16517 16580 + 16517 16581 16582 + 16582 16518 16517 + 16583 16579 15588 + 16580 16579 16583 + 16583 16584 16580 + 16580 16584 16581 + 16581 16584 16585 + 16585 16586 16581 + 16582 16581 16586 + 15588 15593 16583 + 16583 15593 16587 + 16587 16588 16583 + 16584 16583 16588 + 16588 16585 16584 + 16585 16588 16589 + 16589 16590 16585 + 16585 16590 16591 + 16591 16586 16585 + 15592 16587 15593 + 16587 15592 16592 + 16592 16593 16587 + 16587 16593 16589 + 16589 16588 16587 + 16592 15592 15591 + 15591 16486 16592 + 16594 16592 16486 + 16593 16592 16594 + 16594 16595 16593 + 16589 16593 16595 + 16595 16596 16589 + 16590 16589 16596 + 16596 16597 16590 + 16591 16590 16597 + 16598 16591 16597 + 16598 16586 16591 + 16586 16598 16582 + 16486 16490 16594 + 16495 16594 16490 + 16595 16594 16495 + 16495 16599 16595 + 16595 16599 16600 + 16600 16596 16595 + 16597 16596 16600 + 16600 16601 16597 + 16597 16601 16598 + 16582 16598 16601 + 16599 16495 16494 + 16494 16500 16599 + 16600 16599 16500 + 16500 16602 16600 + 16601 16600 16602 + 16602 16513 16601 + 16601 16513 16582 + 16513 16603 16582 + 16518 16582 16603 + 16603 16511 16518 + 16511 16603 16512 + 16504 16602 16500 + 16513 16602 16504 + 16512 16603 16513 + 15619 16474 15615 + 16604 16474 15619 + 16474 16604 16468 + 16468 16604 16469 + 16605 16469 16604 + 16606 16469 16605 + 16469 16606 16464 + 15619 15623 16604 + 16604 15623 16605 + 15627 16605 15623 + 16607 16605 15627 + 16605 16607 16606 + 16606 16607 16608 + 16608 16609 16606 + 16464 16606 16609 + 16609 16459 16464 + 16610 16459 16609 + 16459 16610 16454 + 15627 15631 16607 + 16607 15631 16611 + 16611 16608 16607 + 16612 16608 16611 + 16608 16612 16613 + 16613 16609 16608 + 16609 16613 16610 + 16614 16610 16613 + 16454 16610 16614 + 16614 16615 16454 + 16454 16615 16449 + 15636 16611 15631 + 16616 16611 15636 + 16611 16616 16612 + 16617 16612 16616 + 16613 16612 16617 + 16617 16618 16613 + 16613 16618 16614 + 16619 16614 16618 + 16615 16614 16619 + 15636 16620 16616 + 16616 16620 16621 + 16621 16622 16616 + 16616 16622 16617 + 16623 16617 16622 + 16618 16617 16623 + 16623 16624 16618 + 16618 16624 16619 + 16620 15636 15635 + 15635 15641 16620 + 16621 16620 15641 + 15641 16625 16621 + 16626 16621 16625 + 16622 16621 16626 + 16626 16627 16622 + 16622 16627 16623 + 16623 16627 16628 + 16628 16629 16623 + 16624 16623 16629 + 16630 16625 15641 + 16625 16630 16631 + 16631 16632 16625 + 16625 16632 16626 + 16626 16632 16633 + 16633 16634 16626 + 16627 16626 16634 + 16634 16628 16627 + 15641 15640 16630 + 16630 15640 15639 + 15639 16635 16630 + 16631 16630 16635 + 16635 16636 16631 + 16637 16631 16636 + 16632 16631 16637 + 16637 16633 16632 + 15649 16635 15639 + 16636 16635 15649 + 15649 16638 16636 + 16636 16638 16639 + 16639 16640 16636 + 16636 16640 16637 + 16641 16637 16640 + 16633 16637 16641 + 16638 15649 16642 + 16642 16643 16638 + 16639 16638 16643 + 16643 16644 16639 + 16645 16639 16644 + 16639 16645 16640 + 16640 16645 16641 + 15648 16642 15649 + 16646 16642 15648 + 16643 16642 16646 + 16646 16647 16643 + 16643 16647 16648 + 16648 16644 16643 + 16648 16649 16644 + 16644 16649 16645 + 16645 16649 16650 + 16650 16641 16645 + 15648 15653 16646 + 16651 16646 15653 + 16647 16646 16651 + 16651 16652 16647 + 16647 16652 16653 + 16653 16648 16647 + 16649 16648 16653 + 16653 16654 16649 + 16649 16654 16650 + 15653 15657 16651 + 16655 16651 15657 + 16651 16655 16656 + 16656 16652 16651 + 16652 16656 16657 + 16657 16653 16652 + 16653 16657 16658 + 16658 16654 16653 + 15657 15662 16655 + 16659 16655 15662 + 16656 16655 16659 + 16659 16660 16656 + 16657 16656 16660 + 16660 16661 16657 + 16658 16657 16661 + 15662 15667 16659 + 16662 16659 15667 + 16659 16662 16663 + 16663 16660 16659 + 16660 16663 16664 + 16664 16661 16660 + 16664 16665 16661 + 16661 16665 16658 + 15667 16666 16662 + 16667 16662 16666 + 16663 16662 16667 + 16667 16668 16663 + 16664 16663 16668 + 16668 16669 16664 + 16665 16664 16669 + 15666 16666 15667 + 16666 15666 16670 + 16670 16671 16666 + 16666 16671 16667 + 16672 16667 16671 + 16667 16672 16673 + 16673 16668 16667 + 16668 16673 16674 + 16674 16669 16668 + 15671 16670 15666 + 16675 16670 15671 + 16671 16670 16675 + 16675 16676 16671 + 16671 16676 16672 + 16677 16672 16676 + 16673 16672 16677 + 16677 16678 16673 + 16674 16673 16678 + 15671 16679 16675 + 16675 16679 16680 + 16680 16681 16675 + 16676 16675 16681 + 16681 16682 16676 + 16676 16682 16677 + 15675 16679 15671 + 16679 15675 16683 + 16683 16680 16679 + 16680 16683 16684 + 16684 16685 16680 + 16680 16685 16686 + 16686 16681 16680 + 16682 16681 16686 + 15680 16683 15675 + 16684 16683 15680 + 15680 16687 16684 + 16684 16687 16688 + 16688 16689 16684 + 16685 16684 16689 + 16689 16690 16685 + 16686 16685 16690 + 16691 16687 15680 + 16687 16691 16692 + 16692 16688 16687 + 16688 16692 16693 + 16693 16694 16688 + 16688 16694 16695 + 16695 16689 16688 + 16690 16689 16695 + 15680 15679 16691 + 16691 15679 15678 + 15678 16696 16691 + 16691 16696 16697 + 16697 16692 16691 + 16693 16692 16697 + 16697 16698 16693 + 16693 16698 16699 + 16699 16700 16693 + 16694 16693 16700 + 15687 16696 15678 + 16696 15687 16701 + 16701 16697 16696 + 16697 16701 16702 + 16702 16698 16697 + 16698 16702 16703 + 16703 16699 16698 + 15691 16701 15687 + 16702 16701 15691 + 15691 15762 16702 + 16702 15762 16704 + 16704 16703 16702 + 16705 16703 16704 + 16699 16703 16705 + 16705 16706 16699 + 16699 16706 16707 + 16707 16700 16699 + 16708 16700 16707 + 16700 16708 16694 + 16695 16694 16708 + 15761 16704 15762 + 16704 15761 15760 + 15760 15767 16704 + 16704 15767 16705 + 16705 15767 15766 + 15766 16709 16705 + 16706 16705 16709 + 16709 16710 16706 + 16707 16706 16710 + 16710 16711 16707 + 16712 16707 16711 + 16707 16712 16708 + 15771 16709 15766 + 16710 16709 15771 + 15771 16713 16710 + 16710 16713 16714 + 16714 16711 16710 + 16715 16711 16714 + 16711 16715 16712 + 16716 16712 16715 + 16708 16712 16716 + 16716 16717 16708 + 16708 16717 16695 + 16713 15771 16718 + 16718 16719 16713 + 16714 16713 16719 + 16719 16720 16714 + 16721 16714 16720 + 16714 16721 16715 + 15770 16718 15771 + 15780 16718 15770 + 16719 16718 15780 + 15780 15789 16719 + 16719 15789 15794 + 15794 16720 16719 + 16722 16720 15794 + 16720 16722 16721 + 16723 16721 16722 + 16715 16721 16723 + 16723 16724 16715 + 16715 16724 16716 + 16725 16716 16724 + 16716 16725 16726 + 16726 16717 16716 + 15794 16727 16722 + 16722 16727 16728 + 16728 16729 16722 + 16722 16729 16723 + 16730 16723 16729 + 16723 16730 16731 + 16731 16724 16723 + 16724 16731 16725 + 16727 15794 15793 + 15793 15799 16727 + 16728 16727 15799 + 15799 15808 16728 + 16732 16728 15808 + 16728 16732 16733 + 16733 16729 16728 + 16729 16733 16730 + 16734 16730 16733 + 16731 16730 16734 + 16734 16735 16731 + 16731 16735 16736 + 16736 16725 16731 + 16726 16725 16736 + 15808 15807 16732 + 16737 16732 15807 + 16733 16732 16737 + 16737 16738 16733 + 16733 16738 16734 + 16739 16734 16738 + 16734 16739 16740 + 16740 16735 16734 + 16735 16740 16741 + 16741 16736 16735 + 15807 16742 16737 + 16743 16737 16742 + 16737 16743 16744 + 16744 16738 16737 + 16738 16744 16739 + 16739 16744 16745 + 16745 16746 16739 + 16740 16739 16746 + 15812 16742 15807 + 16747 16742 15812 + 16742 16747 16743 + 16743 16747 16748 + 16748 16749 16743 + 16744 16743 16749 + 16749 16745 16744 + 16745 16749 16750 + 16745 16750 16751 + 16751 16746 16745 + 15812 16752 16747 + 16747 16752 16753 + 16753 16748 16747 + 16748 16753 16754 + 16754 16755 16748 + 16748 16755 16750 + 16750 16749 16748 + 16752 15812 15815 + 15815 15820 16752 + 16752 15820 16756 + 16756 16753 16752 + 16754 16753 16756 + 16756 16757 16754 + 16758 16754 16757 + 16755 16754 16758 + 16758 16759 16755 + 16755 16759 16760 + 16750 16755 16760 + 16760 16751 16750 + 15825 16756 15820 + 16756 15825 15830 + 15830 16757 16756 + 16757 15830 15838 + 15838 16761 16757 + 16757 16761 16758 + 16762 16758 16761 + 16759 16758 16762 + 16762 16763 16759 + 16759 16763 16764 + 16764 16760 16759 + 16761 15838 15842 + 15842 16765 16761 + 16761 16765 16762 + 16766 16762 16765 + 16763 16762 16766 + 16766 16767 16763 + 16763 16767 16768 + 16768 16764 16763 + 16765 15842 15846 + 15846 16769 16765 + 16765 16769 16766 + 16770 16766 16769 + 16766 16770 16767 + 16767 16770 16771 + 16771 16768 16767 + 16772 16768 16771 + 16768 16772 16773 + 16773 16764 16768 + 16769 15846 16774 + 16774 16775 16769 + 16769 16775 16770 + 16771 16770 16775 + 16774 15846 15849 + 15849 16776 16774 + 16774 16776 16777 + 16777 16778 16774 + 16775 16774 16778 + 16778 16779 16775 + 16775 16779 16771 + 15853 16776 15849 + 16776 15853 16780 + 16780 16777 16776 + 16777 16780 16781 + 16781 16782 16777 + 16777 16782 16783 + 16783 16778 16777 + 16779 16778 16783 + 16784 16780 15853 + 16781 16780 16784 + 16784 16785 16781 + 16781 16785 16786 + 16786 16787 16781 + 16782 16781 16787 + 16787 16788 16782 + 16783 16782 16788 + 15853 15857 16784 + 15867 16784 15857 + 15867 16785 16784 + 16785 15867 15866 + 15866 16789 16785 + 16785 16789 16786 + 16790 16786 16789 + 16786 16790 16791 + 16791 16792 16786 + 16786 16792 16793 + 16793 16787 16786 + 16788 16787 16793 + 15876 16789 15866 + 16789 15876 16790 + 16794 16790 15876 + 16791 16790 16794 + 16794 16795 16791 + 16796 16791 16795 + 16792 16791 16796 + 16796 16797 16792 + 16792 16797 16798 + 16798 16793 16792 + 15876 16799 16794 + 16800 16794 16799 + 16794 16800 16795 + 16795 16800 16801 + 16801 16802 16795 + 16795 16802 16796 + 15875 16799 15876 + 16803 16799 15875 + 16799 16803 16800 + 16801 16800 16803 + 16803 16804 16801 + 16805 16801 16804 + 16801 16805 16806 + 16806 16802 16801 + 15875 15880 16803 + 16803 15880 15885 + 15885 16804 16803 + 16807 16804 15885 + 16804 16807 16805 + 16808 16805 16807 + 16806 16805 16808 + 16808 16809 16806 + 16810 16806 16809 + 16802 16806 16810 + 16810 16811 16802 + 16802 16811 16796 + 15885 15889 16807 + 16807 15889 15894 + 15894 16812 16807 + 16807 16812 16808 + 16813 16808 16812 + 16808 16813 16814 + 16814 16809 16808 + 16809 16814 16815 + 16815 16816 16809 + 16809 16816 16810 + 16817 16812 15894 + 16812 16817 16813 + 16818 16813 16817 + 16814 16813 16818 + 16818 16819 16814 + 16815 16814 16819 + 16819 16820 16815 + 16821 16815 16820 + 16815 16821 16816 + 15894 15899 16817 + 16817 15899 16822 + 16822 16823 16817 + 16817 16823 16818 + 16824 16818 16823 + 16818 16824 16825 + 16825 16819 16818 + 16819 16825 16826 + 16826 16820 16819 + 15904 16822 15899 + 16827 16822 15904 + 16822 16827 16828 + 16828 16823 16822 + 16823 16828 16824 + 16829 16824 16828 + 16825 16824 16829 + 16829 16830 16825 + 16826 16825 16830 + 15904 15909 16827 + 16831 16827 15909 + 16828 16827 16831 + 16831 16832 16828 + 16828 16832 16829 + 16833 16829 16832 + 16829 16833 16834 + 16834 16830 16829 + 15909 16835 16831 + 16836 16831 16835 + 16831 16836 16837 + 16837 16832 16831 + 16832 16837 16833 + 16838 16833 16837 + 16834 16833 16838 + 16839 16835 15909 + 16840 16835 16839 + 16835 16840 16836 + 16841 16836 16840 + 16837 16836 16841 + 16841 16842 16837 + 16837 16842 16838 + 15909 15908 16839 + 15914 16839 15908 + 16843 16839 15914 + 16839 16843 16840 + 16840 16843 16844 + 16844 16845 16840 + 16840 16845 16841 + 16846 16841 16845 + 16841 16846 16847 + 16847 16842 16841 + 15914 16848 16843 + 16843 16848 16849 + 16849 16850 16843 + 16850 16844 16843 + 16851 16844 16850 + 16844 16851 16852 + 16852 16845 16844 + 16845 16852 16846 + 16848 15914 15913 + 15913 15919 16848 + 16848 15919 16853 + 16853 16849 16848 + 16854 16849 16853 + 16849 16854 16855 + 16855 16850 16849 + 16856 16850 16855 + 16850 16856 16851 + 16857 16853 15919 + 16854 16853 16857 + 16857 16858 16854 + 16854 16858 16859 + 16859 16855 16854 + 16860 16855 16859 + 16855 16860 16856 + 16861 16857 15919 + 16862 16857 16861 + 16858 16857 16862 + 16862 16863 16858 + 16858 16863 16864 + 16864 16859 16858 + 16865 16859 16864 + 16859 16865 16860 + 15919 15918 16861 + 15924 16861 15918 + 16866 16861 15924 + 16861 16866 16862 + 16867 16862 16866 + 16863 16862 16867 + 16867 16868 16863 + 16863 16868 16869 + 16869 16864 16863 + 16870 16864 16869 + 16864 16870 16865 + 16866 15924 15923 + 15923 16871 16866 + 16866 16871 16867 + 16872 16867 16871 + 16867 16872 16873 + 16873 16868 16867 + 16868 16873 16874 + 16874 16869 16868 + 15932 16871 15923 + 16871 15932 16872 + 16875 16872 15932 + 16873 16872 16875 + 16875 16876 16873 + 16873 16876 16877 + 16877 16874 16873 + 16878 16874 16877 + 16869 16874 16878 + 16878 16879 16869 + 16869 16879 16870 + 15932 15931 16875 + 15937 16875 15931 + 16875 15937 15945 + 15945 16876 16875 + 16876 15945 16880 + 16880 16877 16876 + 16877 16880 16881 + 16881 16882 16877 + 16877 16882 16878 + 16878 16882 16883 + 16883 16884 16878 + 16879 16878 16884 + 16885 16880 15945 + 16881 16880 16885 + 16885 16886 16881 + 16881 16886 16887 + 16887 16888 16881 + 16882 16881 16888 + 16888 16883 16882 + 15945 15944 16885 + 15950 16885 15944 + 16885 15950 16889 + 16889 16886 16885 + 16886 16889 16890 + 16890 16887 16886 + 16887 16890 16891 + 16891 16892 16887 + 16887 16892 16893 + 16893 16888 16887 + 16883 16888 16893 + 16889 15950 15949 + 15949 15962 16889 + 16889 15962 15967 + 15967 16890 16889 + 16891 16890 15967 + 15967 16894 16891 + 16891 16894 16895 + 16895 16896 16891 + 16892 16891 16896 + 16896 16897 16892 + 16893 16892 16897 + 15966 16894 15967 + 16894 15966 16898 + 16898 16895 16894 + 16895 16898 16899 + 16899 16900 16895 + 16895 16900 16901 + 16901 16896 16895 + 16897 16896 16901 + 15971 16898 15966 + 16899 16898 15971 + 15971 16902 16899 + 16899 16902 16903 + 16903 16904 16899 + 16900 16899 16904 + 16904 16905 16900 + 16901 16900 16905 + 15974 16902 15971 + 16902 15974 16906 + 16906 16903 16902 + 16903 16906 16907 + 16907 16908 16903 + 16903 16908 16909 + 16909 16904 16903 + 16905 16904 16909 + 15978 16906 15974 + 16907 16906 15978 + 15978 15983 16907 + 16907 15983 16910 + 16910 16911 16907 + 16908 16907 16911 + 16911 16912 16908 + 16909 16908 16912 + 16912 16913 16909 + 16914 16909 16913 + 16909 16914 16905 + 15988 16910 15983 + 16915 16910 15988 + 16910 16915 16916 + 16916 16911 16910 + 16912 16911 16916 + 16916 16917 16912 + 16912 16917 16918 + 16918 16913 16912 + 16919 16913 16918 + 16913 16919 16914 + 15988 16920 16915 + 16915 16920 16921 + 16921 16922 16915 + 16916 16915 16922 + 16922 16923 16916 + 16917 16916 16923 + 16923 16924 16917 + 16918 16917 16924 + 16920 15988 15987 + 15987 16925 16920 + 16920 16925 16926 + 16926 16921 16920 + 16927 16921 16926 + 16921 16927 16928 + 16928 16922 16921 + 16922 16928 16929 + 16929 16923 16922 + 16924 16923 16929 + 16925 15987 15986 + 15986 16930 16925 + 16925 16930 16931 + 16931 16926 16925 + 16932 16926 16931 + 16926 16932 16927 + 16927 16932 16933 + 16933 16934 16927 + 16928 16927 16934 + 16930 15986 15992 + 15992 15997 16930 + 16930 15997 16935 + 16935 16931 16930 + 16936 16931 16935 + 16931 16936 16932 + 16932 16936 16937 + 16937 16933 16932 + 16938 16933 16937 + 16933 16938 16939 + 16939 16934 16933 + 16940 16935 15997 + 16941 16935 16940 + 16935 16941 16936 + 16936 16941 16942 + 16942 16937 16936 + 16943 16937 16942 + 16937 16943 16938 + 15997 15996 16940 + 16944 16940 15996 + 16945 16940 16944 + 16940 16945 16941 + 16941 16945 16946 + 16946 16942 16941 + 16947 16942 16946 + 16942 16947 16943 + 15996 16001 16944 + 16948 16944 16001 + 16949 16944 16948 + 16944 16949 16945 + 16945 16949 16950 + 16950 16946 16945 + 16951 16946 16950 + 16946 16951 16947 + 16001 16006 16948 + 16952 16948 16006 + 16953 16948 16952 + 16948 16953 16949 + 16949 16953 16954 + 16954 16950 16949 + 16955 16950 16954 + 16950 16955 16951 + 16006 16956 16952 + 16957 16952 16956 + 16958 16952 16957 + 16952 16958 16953 + 16953 16958 16959 + 16959 16954 16953 + 16960 16954 16959 + 16954 16960 16955 + 16005 16956 16006 + 16956 16005 16011 + 16956 16011 16957 + 16957 16011 16010 + 16010 16961 16957 + 16962 16957 16961 + 16957 16962 16958 + 16958 16962 16963 + 16963 16959 16958 + 16964 16959 16963 + 16959 16964 16960 + 16965 16961 16010 + 16966 16961 16965 + 16961 16966 16962 + 16962 16966 16967 + 16967 16963 16962 + 16968 16963 16967 + 16963 16968 16964 + 16010 16018 16965 + 16969 16965 16018 + 16970 16965 16969 + 16965 16970 16966 + 16966 16970 16971 + 16971 16967 16966 + 16972 16967 16971 + 16967 16972 16968 + 16018 16022 16969 + 16027 16969 16022 + 16973 16969 16027 + 16969 16973 16970 + 16970 16973 16974 + 16974 16971 16970 + 16975 16971 16974 + 16971 16975 16972 + 16972 16975 16976 + 16976 16977 16972 + 16968 16972 16977 + 16027 16032 16973 + 16973 16032 16978 + 16978 16974 16973 + 16979 16974 16978 + 16974 16979 16975 + 16975 16979 16980 + 16980 16976 16975 + 16981 16976 16980 + 16976 16981 16982 + 16982 16977 16976 + 16036 16978 16032 + 16983 16978 16036 + 16978 16983 16979 + 16979 16983 16984 + 16984 16980 16979 + 16985 16980 16984 + 16980 16985 16981 + 16981 16985 16986 + 16986 16987 16981 + 16982 16981 16987 + 16036 16040 16983 + 16983 16040 16988 + 16988 16984 16983 + 16989 16984 16988 + 16984 16989 16985 + 16985 16989 16990 + 16990 16986 16985 + 16991 16986 16990 + 16986 16991 16992 + 16992 16987 16986 + 16044 16988 16040 + 16993 16988 16044 + 16988 16993 16989 + 16989 16993 16994 + 16994 16990 16989 + 16995 16990 16994 + 16990 16995 16991 + 16991 16995 16996 + 16996 16997 16991 + 16992 16991 16997 + 16044 16048 16993 + 16993 16048 16998 + 16998 16994 16993 + 16999 16994 16998 + 16994 16999 16995 + 16995 16999 17000 + 17000 16996 16995 + 17001 16996 17000 + 16996 17001 17002 + 17002 16997 16996 + 16052 16998 16048 + 17003 16998 16052 + 16998 17003 16999 + 16999 17003 17004 + 17004 17000 16999 + 17005 17000 17004 + 17000 17005 17001 + 17001 17005 17006 + 17006 17007 17001 + 17002 17001 17007 + 16052 16056 17003 + 17003 16056 17008 + 17008 17004 17003 + 17009 17004 17008 + 17004 17009 17005 + 17005 17009 17010 + 17010 17006 17005 + 17011 17006 17010 + 17006 17011 17012 + 17012 17007 17006 + 16060 17008 16056 + 17013 17008 16060 + 17008 17013 17009 + 17009 17013 17014 + 17014 17010 17009 + 17015 17010 17014 + 17010 17015 17011 + 17011 17015 17016 + 17016 17017 17011 + 17012 17011 17017 + 16060 16064 17013 + 17013 16064 17018 + 17018 17014 17013 + 17019 17014 17018 + 17014 17019 17015 + 17015 17019 17020 + 17020 17016 17015 + 17021 17016 17020 + 17016 17021 17022 + 17022 17017 17016 + 16068 17018 16064 + 17023 17018 16068 + 17018 17023 17019 + 17019 17023 17024 + 17024 17020 17019 + 17025 17020 17024 + 17020 17025 17021 + 17026 17021 17025 + 17022 17021 17026 + 16068 16076 17023 + 17023 16076 17027 + 17027 17024 17023 + 17028 17024 17027 + 17024 17028 17025 + 17025 17028 17029 + 17029 17030 17025 + 17025 17030 17026 + 16075 17027 16076 + 17031 17027 16075 + 17027 17031 17028 + 17029 17028 17031 + 17031 17032 17029 + 17033 17029 17032 + 17029 17033 17034 + 17034 17030 17029 + 17030 17034 17035 + 17035 17026 17030 + 16075 16080 17031 + 17031 16080 16079 + 16079 17032 17031 + 17036 17032 16079 + 17032 17036 17033 + 17037 17033 17036 + 17034 17033 17037 + 17037 17038 17034 + 17034 17038 17039 + 17039 17035 17034 + 17040 17035 17039 + 17026 17035 17040 + 16079 16085 17036 + 17036 16085 17041 + 17041 17042 17036 + 17036 17042 17037 + 17043 17037 17042 + 17037 17043 17044 + 17044 17038 17037 + 17038 17044 17045 + 17045 17039 17038 + 17041 16085 16084 + 16084 16090 17041 + 17046 17041 16090 + 17041 17046 17047 + 17047 17042 17041 + 17042 17047 17043 + 17048 17043 17047 + 17044 17043 17048 + 17048 17049 17044 + 17044 17049 17050 + 17050 17045 17044 + 16090 16089 17046 + 17051 17046 16089 + 17047 17046 17051 + 17051 17052 17047 + 17047 17052 17048 + 17053 17048 17052 + 17048 17053 17054 + 17054 17049 17048 + 17049 17054 17055 + 17055 17050 17049 + 16089 16103 17051 + 17056 17051 16103 + 17051 17056 17057 + 17057 17052 17051 + 17052 17057 17053 + 17058 17053 17057 + 17054 17053 17058 + 17058 17059 17054 + 17054 17059 17060 + 17060 17055 17054 + 16103 16102 17056 + 17061 17056 16102 + 17057 17056 17061 + 17061 17062 17057 + 17057 17062 17058 + 17063 17058 17062 + 17058 17063 17064 + 17064 17059 17058 + 17059 17064 17065 + 17065 17060 17059 + 16102 16107 17061 + 16112 17061 16107 + 17061 16112 17066 + 17066 17062 17061 + 17062 17066 17063 + 17067 17063 17066 + 17064 17063 17067 + 17067 17068 17064 + 17064 17068 17069 + 17069 17065 17064 + 17070 17065 17069 + 17060 17065 17070 + 17066 16112 16111 + 16111 17071 17066 + 17066 17071 17067 + 17072 17067 17071 + 17067 17072 17073 + 17073 17068 17067 + 17068 17073 17074 + 17074 17069 17068 + 16119 17071 16111 + 17071 16119 17072 + 17075 17072 16119 + 17073 17072 17075 + 17075 17076 17073 + 17073 17076 17077 + 17077 17074 17073 + 17078 17074 17077 + 17069 17074 17078 + 17078 17079 17069 + 17069 17079 17070 + 16119 16122 17075 + 16131 17075 16122 + 17076 17075 16131 + 16131 17080 17076 + 17076 17080 17081 + 17081 17077 17076 + 17082 17077 17081 + 17077 17082 17078 + 17078 17082 17083 + 17083 17084 17078 + 17079 17078 17084 + 17080 16131 17085 + 17085 17086 17080 + 17081 17080 17086 + 17086 17087 17081 + 17088 17081 17087 + 17081 17088 17082 + 17082 17088 17089 + 17089 17083 17082 + 16130 17085 16131 + 17090 17085 16130 + 17086 17085 17090 + 17090 17091 17086 + 17086 17091 17092 + 17092 17087 17086 + 17093 17087 17092 + 17087 17093 17088 + 17088 17093 17094 + 17094 17089 17088 + 16130 17095 17090 + 17096 17090 17095 + 17091 17090 17096 + 17096 17097 17091 + 17091 17097 17098 + 17098 17092 17091 + 17099 17092 17098 + 17092 17099 17093 + 16129 17095 16130 + 17095 16129 16136 + 16136 17100 17095 + 17095 17100 17096 + 17101 17096 17100 + 17096 17101 17102 + 17102 17097 17096 + 17097 17102 17103 + 17103 17098 17097 + 17104 17100 16136 + 17100 17104 17101 + 17105 17101 17104 + 17102 17101 17105 + 17105 17106 17102 + 17102 17106 17107 + 17107 17103 17102 + 17108 17103 17107 + 17098 17103 17108 + 16136 16141 17104 + 17104 16141 17109 + 17109 17110 17104 + 17104 17110 17105 + 17111 17105 17110 + 17105 17111 17112 + 17112 17106 17105 + 17106 17112 17113 + 17113 17107 17106 + 17109 16141 16140 + 16140 17114 17109 + 17115 17109 17114 + 17109 17115 17116 + 17116 17110 17109 + 17110 17116 17111 + 17117 17111 17116 + 17112 17111 17117 + 16146 17114 16140 + 17118 17114 16146 + 17114 17118 17115 + 17119 17115 17118 + 17116 17115 17119 + 17119 17120 17116 + 17116 17120 17117 + 16146 16151 17118 + 17118 16151 17121 + 17121 17122 17118 + 17118 17122 17119 + 17123 17119 17122 + 17119 17123 17124 + 17124 17120 17119 + 17120 17124 17125 + 17125 17117 17120 + 17121 16151 16150 + 16150 17126 17121 + 17127 17121 17126 + 17121 17127 17128 + 17128 17122 17121 + 17122 17128 17123 + 17129 17123 17128 + 17124 17123 17129 + 16155 17126 16150 + 17130 17126 16155 + 17126 17130 17127 + 17131 17127 17130 + 17128 17127 17131 + 17131 17132 17128 + 17128 17132 17129 + 16155 17133 17130 + 17130 17133 17134 + 17134 17135 17130 + 17130 17135 17131 + 17136 17131 17135 + 17131 17136 17137 + 17137 17132 17131 + 17133 16155 16159 + 16159 16164 17133 + 17134 17133 16164 + 16164 16181 17134 + 16190 17134 16181 + 17134 16190 17138 + 17138 17135 17134 + 17135 17138 17136 + 17136 17138 17139 + 17139 17140 17136 + 17137 17136 17140 + 17138 16190 16195 + 16195 17139 17138 + 16199 17139 16195 + 17139 16199 17141 + 17141 17140 17139 + 17140 17141 17142 + 17140 17142 17137 + 17137 17142 16219 + 16219 17143 17137 + 17132 17137 17143 + 17143 17129 17132 + 17141 16199 16203 + 16203 16220 17141 + 17142 17141 16220 + 16220 16219 17142 + 16224 17143 16219 + 17129 17143 16224 + 16224 17144 17129 + 17129 17144 17124 + 17124 17144 16232 + 16232 17125 17124 + 17145 17125 16232 + 17117 17125 17145 + 17144 16224 16227 + 16227 16232 17144 + 16232 16231 17145 + 17145 16231 16237 + 16237 17146 17145 + 17147 17145 17146 + 17145 17147 17117 + 17117 17147 17112 + 17112 17147 17148 + 17148 17113 17112 + 16242 17146 16237 + 17148 17146 16242 + 17146 17148 17147 + 16242 17149 17148 + 17148 17149 17150 + 17150 17113 17148 + 17107 17113 17150 + 17150 17151 17107 + 17107 17151 17108 + 17149 16242 17152 + 17152 17153 17149 + 17150 17149 17153 + 17153 17154 17150 + 17151 17150 17154 + 17154 17155 17151 + 17108 17151 17155 + 16241 17152 16242 + 17156 17152 16241 + 17153 17152 17156 + 17156 17157 17153 + 17153 17157 17158 + 17158 17154 17153 + 17155 17154 17158 + 16241 16247 17156 + 17156 16247 16252 + 16252 17159 17156 + 17157 17156 17159 + 17159 17160 17157 + 17158 17157 17160 + 17160 17161 17158 + 17162 17158 17161 + 17158 17162 17155 + 17163 17159 16252 + 17160 17159 17163 + 17163 17164 17160 + 17160 17164 17165 + 17165 17161 17160 + 17166 17161 17165 + 17161 17166 17162 + 17167 17162 17166 + 17155 17162 17167 + 16252 17168 17163 + 17163 17168 17169 + 17169 17170 17163 + 17164 17163 17170 + 17170 17171 17164 + 17165 17164 17171 + 16251 17168 16252 + 17168 16251 17172 + 17172 17169 17168 + 17169 17172 17173 + 17173 17174 17169 + 17169 17174 17175 + 17175 17170 17169 + 17171 17170 17175 + 16257 17172 16251 + 17173 17172 16257 + 16257 17176 17173 + 17173 17176 17177 + 17177 17178 17173 + 17174 17173 17178 + 17178 17179 17174 + 17175 17174 17179 + 17180 17176 16257 + 17176 17180 17181 + 17181 17177 17176 + 17177 17181 17182 + 17182 17183 17177 + 17177 17183 17184 + 17184 17178 17177 + 17179 17178 17184 + 16257 16256 17180 + 17180 16256 16255 + 16255 17185 17180 + 17180 17185 17186 + 17186 17181 17180 + 17182 17181 17186 + 17186 17187 17182 + 17188 17182 17187 + 17183 17182 17188 + 17188 17189 17183 + 17184 17183 17189 + 17185 16255 16254 + 16254 17190 17185 + 17185 17190 17191 + 17191 17186 17185 + 17191 17187 17186 + 17187 17191 17192 + 17192 17193 17187 + 17187 17193 17188 + 17194 17188 17193 + 17189 17188 17194 + 17190 16254 16267 + 16267 16272 17190 + 17191 17190 16272 + 16272 17195 17191 + 17195 17192 17191 + 17196 17192 17195 + 17192 17196 17197 + 17197 17193 17192 + 17193 17197 17194 + 17198 17194 17197 + 17199 17194 17198 + 17194 17199 17189 + 16271 17195 16272 + 17195 16271 17200 + 17195 17200 17196 + 17196 17200 17201 + 17201 17202 17196 + 17197 17196 17202 + 17202 17203 17197 + 17197 17203 17198 + 17200 16271 16277 + 16277 17201 17200 + 17204 17201 16277 + 17201 17204 17205 + 17205 17202 17201 + 17202 17205 17206 + 17206 17203 17202 + 17203 17206 17207 + 17207 17198 17203 + 17208 17198 17207 + 17198 17208 17199 + 16277 16281 17204 + 17204 16281 17209 + 17209 17210 17204 + 17205 17204 17210 + 17210 17211 17205 + 17206 17205 17211 + 17211 17212 17206 + 17207 17206 17212 + 16285 17209 16281 + 16290 17209 16285 + 17209 16290 17213 + 17213 17210 17209 + 17210 17213 17214 + 17214 17211 17210 + 17211 17214 17215 + 17215 17212 17211 + 17212 17215 17216 + 17216 17217 17212 + 17212 17217 17207 + 17213 16290 17218 + 17218 17219 17213 + 17214 17213 17219 + 17219 17220 17214 + 17215 17214 17220 + 17220 17221 17215 + 17216 17215 17221 + 16289 17218 16290 + 17222 17218 16289 + 17218 17222 17223 + 17223 17219 17218 + 17219 17223 17224 + 17224 17220 17219 + 17220 17224 17225 + 17225 17221 17220 + 16289 16295 17222 + 17222 16295 17226 + 17226 17227 17222 + 17223 17222 17227 + 17227 17228 17223 + 17224 17223 17228 + 17228 17229 17224 + 17225 17224 17229 + 17230 17226 16295 + 17231 17226 17230 + 17226 17231 17232 + 17232 17227 17226 + 17227 17232 17233 + 17233 17228 17227 + 17228 17233 17234 + 17234 17229 17228 + 16295 16294 17230 + 16300 17230 16294 + 17235 17230 16300 + 17230 17235 17231 + 17231 17235 17236 + 17236 17237 17231 + 17232 17231 17237 + 17237 17238 17232 + 17233 17232 17238 + 17238 17239 17233 + 17234 17233 17239 + 16300 17240 17235 + 17235 17240 17241 + 17241 17236 17235 + 17242 17236 17241 + 17236 17242 17243 + 17243 17237 17236 + 17237 17243 17244 + 17244 17238 17237 + 17240 16300 16299 + 16299 16305 17240 + 17240 16305 17245 + 17245 17241 17240 + 17246 17241 17245 + 17241 17246 17242 + 17242 17246 17247 + 17247 17248 17242 + 17243 17242 17248 + 17248 17249 17243 + 17244 17243 17249 + 16310 17245 16305 + 17250 17245 16310 + 17245 17250 17246 + 17246 17250 17251 + 17251 17247 17246 + 17252 17247 17251 + 17247 17252 17253 + 17253 17248 17247 + 17248 17253 17254 + 17254 17249 17248 + 16310 16315 17250 + 17250 16315 17255 + 17255 17251 17250 + 17256 17251 17255 + 17251 17256 17252 + 17252 17256 17257 + 17257 17258 17252 + 17253 17252 17258 + 17258 17259 17253 + 17254 17253 17259 + 17260 17255 16315 + 17261 17255 17260 + 17255 17261 17256 + 17256 17261 17262 + 17262 17257 17256 + 17263 17257 17262 + 17257 17263 17258 + 17258 17263 17264 + 17264 17259 17258 + 16315 16314 17260 + 17265 17260 16314 + 17266 17260 17265 + 17260 17266 17261 + 17261 17266 17267 + 17267 17262 17261 + 17262 17267 17268 + 17268 17269 17262 + 17262 17269 17263 + 16314 16319 17265 + 17270 17265 16319 + 17271 17265 17270 + 17265 17271 17266 + 17266 17271 17272 + 17272 17267 17266 + 17268 17267 17272 + 16319 16323 17270 + 17273 17270 16323 + 17274 17270 17273 + 17270 17274 17271 + 17271 17274 17275 + 17275 17272 17271 + 17275 17276 17272 + 17272 17276 17268 + 16323 16327 17273 + 17277 17273 16327 + 17278 17273 17277 + 17273 17278 17274 + 17274 17278 17279 + 17279 17275 17274 + 17276 17275 17279 + 17279 17280 17276 + 17276 17280 17281 + 17268 17276 17281 + 16327 16331 17277 + 17282 17277 16331 + 17283 17277 17282 + 17277 17283 17278 + 17278 17283 17284 + 17284 17279 17278 + 17279 17284 17285 + 17285 17280 17279 + 17280 17285 17286 + 17286 17281 17280 + 16331 16336 17282 + 17287 17282 16336 + 17288 17282 17287 + 17282 17288 17283 + 17283 17288 17289 + 17289 17284 17283 + 17285 17284 17289 + 17289 17290 17285 + 17285 17290 17291 + 17291 17286 17285 + 16336 16341 17287 + 17292 17287 16341 + 17293 17287 17292 + 17287 17293 17288 + 17288 17293 17294 + 17294 17289 17288 + 17294 17290 17289 + 17290 17294 17295 + 17295 17296 17290 + 17290 17296 17291 + 16341 16346 17292 + 17297 17292 16346 + 17298 17292 17297 + 17292 17298 17293 + 17293 17298 17295 + 17295 17294 17293 + 16346 16351 17297 + 16361 17297 16351 + 17299 17297 16361 + 17297 17299 17298 + 17298 17299 17300 + 17300 17295 17298 + 17295 17300 17301 + 17301 17296 17295 + 17296 17301 17302 + 17302 17291 17296 + 16361 16366 17299 + 17299 16366 17303 + 17303 17300 17299 + 17301 17300 17303 + 17303 17304 17301 + 17301 17304 17305 + 17305 17302 17301 + 17306 17302 17305 + 17291 17302 17306 + 16371 17303 16366 + 17303 16371 16379 + 16379 17304 17303 + 17304 16379 17307 + 17307 17305 17304 + 17305 17307 17308 + 17308 17309 17305 + 17305 17309 17306 + 17310 17307 16379 + 17308 17307 17310 + 17310 17311 17308 + 17308 17311 17312 + 17312 17313 17308 + 17309 17308 17313 + 17313 17314 17309 + 17306 17309 17314 + 16379 16378 17310 + 17315 17310 16378 + 17310 17315 17316 + 17316 17311 17310 + 17311 17316 17317 + 17317 17312 17311 + 16378 16377 17315 + 16388 17315 16377 + 17316 17315 16388 + 16388 16393 17316 + 17316 16393 17318 + 17318 17317 17316 + 17319 17317 17318 + 17312 17317 17319 + 17319 17320 17312 + 17312 17320 17321 + 17321 17313 17312 + 17313 17321 17314 + 16393 16392 17318 + 16401 17318 16392 + 17318 16401 17322 + 17322 17323 17318 + 17318 17323 17319 + 17324 17319 17323 + 17320 17319 17324 + 17322 16401 16400 + 16400 17325 17322 + 17326 17322 17325 + 17323 17322 17326 + 17326 17327 17323 + 17323 17327 17324 + 17328 17324 17327 + 17324 17328 17329 + 17324 17329 17320 + 17330 17325 16400 + 17325 17330 17331 + 17331 17332 17325 + 17325 17332 17326 + 17333 17326 17332 + 17327 17326 17333 + 17333 17334 17327 + 17327 17334 17328 + 16400 17335 17330 + 17330 17335 17336 + 17336 17337 17330 + 17330 17337 17338 + 17331 17330 17338 + 17335 16400 16405 + 16405 16410 17335 + 17336 17335 16410 + 16410 16418 17336 + 17339 17336 16418 + 17339 17337 17336 + 17337 17339 17340 + 17340 17338 17337 + 16418 16417 17339 + 17340 17339 16417 + 16417 17341 17340 + 17342 17340 17341 + 17340 17342 17343 + 17343 17338 17340 + 16421 17341 16417 + 17344 17341 16421 + 17341 17344 17342 + 17345 17342 17344 + 17343 17342 17345 + 17345 17346 17343 + 17347 17343 17346 + 17338 17343 17347 + 16421 16431 17344 + 17344 16431 17348 + 17348 17349 17344 + 17344 17349 17345 + 17349 17350 17345 + 17351 17345 17350 + 17345 17351 17352 + 17352 17346 17345 + 17348 16431 16430 + 16430 17353 17348 + 17354 17348 17353 + 17354 17349 17348 + 17349 17354 17355 + 17355 17350 17349 + 17356 17350 17355 + 17350 17356 17351 + 17357 17351 17356 + 17352 17351 17357 + 16435 17353 16430 + 16444 17353 16435 + 17353 16444 17354 + 17355 17354 16444 + 16444 17358 17355 + 17358 17359 17355 + 17360 17355 17359 + 17355 17360 17356 + 17356 17360 17361 + 17361 17362 17356 + 17356 17362 17357 + 16443 17358 16444 + 16443 16449 17358 + 17358 16449 16615 + 16615 17359 17358 + 16619 17359 16615 + 17359 16619 17360 + 17361 17360 16619 + 16619 16624 17361 + 16629 17361 16624 + 17361 16629 17363 + 17363 17362 17361 + 17362 17363 17364 + 17364 17357 17362 + 17357 17364 17365 + 17365 17366 17357 + 17357 17366 17352 + 17367 17352 17366 + 17346 17352 17367 + 17363 16629 16628 + 16628 17368 17363 + 17364 17363 17368 + 17368 17369 17364 + 17369 17370 17364 + 17365 17364 17370 + 16634 17368 16628 + 17368 16634 16633 + 16633 17369 17368 + 16641 17369 16633 + 17369 16641 16650 + 16650 17370 17369 + 17370 16650 17371 + 17371 17372 17370 + 17370 17372 17365 + 17365 17372 17373 + 17373 17374 17365 + 17366 17365 17374 + 17374 17375 17366 + 17366 17375 17367 + 17371 16650 17376 + 17376 17377 17371 + 17371 17377 17378 + 17378 17379 17371 + 17372 17371 17379 + 17379 17373 17372 + 16654 17376 16650 + 17380 17376 16654 + 17376 17380 17381 + 17381 17377 17376 + 17377 17381 17382 + 17382 17378 17377 + 17382 17383 17378 + 17378 17383 17384 + 17384 17379 17378 + 17379 17384 17373 + 16654 16658 17380 + 17385 17380 16658 + 17381 17380 17385 + 17385 17386 17381 + 17382 17381 17386 + 17386 17387 17382 + 17383 17382 17387 + 17387 17388 17383 + 17383 17388 17389 + 17384 17383 17389 + 16658 16665 17385 + 16665 17390 17385 + 17391 17385 17390 + 17385 17391 17392 + 17392 17386 17385 + 17386 17392 17393 + 17393 17387 17386 + 17387 17393 17394 + 17394 17388 17387 + 16669 17390 16665 + 17395 17390 16669 + 17390 17395 17391 + 17391 17395 17396 + 17396 17397 17391 + 17392 17391 17397 + 17397 17398 17392 + 17392 17398 17399 + 17399 17393 17392 + 17394 17393 17399 + 16669 16674 17395 + 17395 16674 17400 + 17400 17396 17395 + 17401 17396 17400 + 17396 17401 17402 + 17402 17397 17396 + 17397 17402 17403 + 17403 17398 17397 + 17398 17403 17404 + 17404 17399 17398 + 16678 17400 16674 + 17405 17400 16678 + 17400 17405 17401 + 17401 17405 17406 + 17406 17407 17401 + 17402 17401 17407 + 17407 16773 17402 + 16773 16772 17402 + 17403 17402 16772 + 16678 17408 17405 + 17405 17408 17409 + 17409 17410 17405 + 17410 17406 17405 + 17411 17406 17410 + 17411 17407 17406 + 17407 17411 17412 + 17412 16773 17407 + 16764 16773 17412 + 17408 16678 16677 + 16677 17413 17408 + 17408 17413 17414 + 17414 17409 17408 + 17409 17414 17415 + 17409 17415 17416 + 17416 17410 17409 + 17417 17410 17416 + 17410 17417 17411 + 17413 16677 16682 + 16682 17418 17413 + 17414 17413 17418 + 17418 17419 17414 + 17415 17414 17419 + 17419 17420 17415 + 17416 17415 17420 + 17420 17421 17416 + 17422 17416 17421 + 17416 17422 17417 + 16686 17418 16682 + 17418 16686 17423 + 17423 17419 17418 + 17419 17423 17424 + 17424 17420 17419 + 17420 17424 17425 + 17425 17421 17420 + 17421 17425 16736 + 16736 16741 17421 + 17421 16741 17422 + 16690 17423 16686 + 17424 17423 16690 + 16690 17426 17424 + 17424 17426 16726 + 16726 17425 17424 + 16736 17425 16726 + 16695 17426 16690 + 17426 16695 16717 + 16717 16726 17426 + 17412 16760 16764 + 16760 17412 17427 + 17427 16751 16760 + 16751 17427 17428 + 17428 16746 16751 + 16746 17428 16740 + 16741 16740 17428 + 17428 17422 16741 + 17417 17422 17428 + 17427 17412 17411 + 17411 17417 17427 + 17428 17427 17417 + 16772 17429 17403 + 16771 17429 16772 + 17429 16771 17430 + 17430 17431 17429 + 17403 17429 17431 + 17431 17404 17403 + 17432 17404 17431 + 17404 17432 17399 + 17399 17432 17394 + 17433 17430 16771 + 17434 17430 17433 + 17431 17430 17434 + 17434 17435 17431 + 17431 17435 17432 + 17432 17435 17436 + 17394 17432 17436 + 17436 17437 17394 + 17388 17394 17437 + 16779 17433 16771 + 17438 17433 16779 + 17438 17439 17433 + 17433 17439 17434 + 17434 17439 17440 + 17440 17441 17434 + 17435 17434 17441 + 17441 17436 17435 + 16779 17442 17438 + 17438 17442 17443 + 17443 17444 17438 + 17439 17438 17444 + 17444 17440 17439 + 16783 17442 16779 + 17442 16783 17445 + 17445 17443 17442 + 17443 17445 17446 + 17443 17446 17447 + 17447 17444 17443 + 17440 17444 17447 + 17447 17448 17440 + 17440 17448 17449 + 17449 17441 17440 + 17436 17441 17449 + 16788 17445 16783 + 17446 17445 16788 + 16788 17450 17446 + 17446 17450 17451 + 17451 17447 17446 + 17448 17447 17451 + 17451 17452 17448 + 17448 17452 17453 + 17449 17448 17453 + 17454 17449 17453 + 17436 17449 17454 + 17454 17437 17436 + 16793 17450 16788 + 17450 16793 16798 + 16798 17455 17450 + 17450 17455 17451 + 17456 17451 17455 + 17451 17456 17452 + 17452 17456 17457 + 17457 17453 17452 + 16798 17458 17455 + 17455 17458 17456 + 17457 17456 17458 + 17458 16798 16797 + 16797 17459 17458 + 17458 17459 17457 + 16796 17459 16797 + 17459 16796 16811 + 16811 17460 17459 + 17459 17460 17457 + 16810 17460 16811 + 17460 16810 16816 + 16816 16821 17460 + 17460 16821 17457 + 16821 17461 17457 + 17461 17462 17457 + 17462 17463 17457 + 17463 17464 17457 + 17464 17465 17457 + 17465 17466 17457 + 17466 17467 17457 + 17467 17468 17457 + 17468 17469 17457 + 17469 17470 17457 + 17471 17457 17470 + 17453 17457 17471 + 16820 17461 16821 + 16826 17461 16820 + 17461 16826 17472 + 17472 17462 17461 + 17473 17462 17472 + 17462 17473 17474 + 17474 17463 17462 + 17475 17463 17474 + 17463 17475 17476 + 17476 17464 17463 + 16830 17472 16826 + 17473 17472 16830 + 16830 16834 17473 + 17473 16834 17477 + 17477 17478 17473 + 17478 17479 17473 + 17479 17474 17473 + 17475 17474 17479 + 17479 17480 17475 + 17476 17475 17480 + 16838 17477 16834 + 16838 17481 17477 + 17477 17481 17482 + 17482 17478 17477 + 17482 17483 17478 + 17478 17483 17484 + 17484 17479 17478 + 17480 17479 17484 + 17481 16838 16842 + 16842 16847 17481 + 17482 17481 16847 + 16847 17485 17482 + 17485 17486 17482 + 17483 17482 17486 + 17486 17487 17483 + 17483 17487 17488 + 17488 17489 17483 + 17489 17484 17483 + 17490 17485 16847 + 17491 17485 17490 + 17485 17491 17492 + 17492 17486 17485 + 17487 17486 17492 + 17492 17493 17487 + 17487 17493 17494 + 17494 17488 17487 + 16847 16846 17490 + 17490 16846 16852 + 16852 17495 17490 + 17491 17490 17495 + 17495 17496 17491 + 17492 17491 17496 + 17496 17497 17492 + 17493 17492 17497 + 17497 17498 17493 + 17494 17493 17498 + 17499 17495 16852 + 17496 17495 17499 + 17499 17500 17496 + 17496 17500 17501 + 17501 17497 17496 + 17498 17497 17501 + 16852 16851 17499 + 17502 17499 16851 + 17500 17499 17502 + 17502 17503 17500 + 17500 17503 17504 + 17504 17501 17500 + 17505 17501 17504 + 17501 17505 17498 + 16851 16856 17502 + 17506 17502 16856 + 17503 17502 17506 + 17506 17507 17503 + 17503 17507 17508 + 17508 17504 17503 + 17509 17504 17508 + 17504 17509 17505 + 16856 16860 17506 + 17510 17506 16860 + 17507 17506 17510 + 17510 17511 17507 + 17507 17511 17512 + 17512 17513 17507 + 17513 17508 17507 + 17514 17508 17513 + 17508 17514 17509 + 16860 16865 17510 + 17515 17510 16865 + 17511 17510 17515 + 17515 17516 17511 + 17511 17516 17517 + 17517 17512 17511 + 17518 17512 17517 + 17512 17518 17519 + 17519 17513 17512 + 16865 16870 17515 + 17520 17515 16870 + 17516 17515 17520 + 17520 17521 17516 + 17516 17521 17522 + 17522 17517 17516 + 17518 17517 17522 + 17522 17523 17518 + 17518 17523 17524 + 17524 17519 17518 + 16870 16879 17520 + 16884 17520 16879 + 17520 16884 17525 + 17525 17521 17520 + 17521 17525 17526 + 17526 17522 17521 + 17522 17526 17527 + 17527 17523 17522 + 17523 17527 17528 + 17528 17524 17523 + 17525 16884 16883 + 16883 17529 17525 + 17525 17529 17530 + 17530 17526 17525 + 17527 17526 17530 + 17530 17531 17527 + 17527 17531 17532 + 17532 17528 17527 + 17533 17528 17532 + 17524 17528 17533 + 16893 17529 16883 + 17529 16893 17534 + 17534 17530 17529 + 17530 17534 17535 + 17535 17531 17530 + 17531 17535 17536 + 17536 17532 17531 + 17532 17536 17537 + 17537 17538 17532 + 17532 17538 17533 + 16897 17534 16893 + 17535 17534 16897 + 16897 17539 17535 + 17535 17539 17540 + 17540 17536 17535 + 17537 17536 17540 + 17540 17541 17537 + 17537 17541 17542 + 17542 17543 17537 + 17538 17537 17543 + 16901 17539 16897 + 17539 16901 17544 + 17544 17540 17539 + 17540 17544 17545 + 17545 17541 17540 + 17541 17545 17546 + 17546 17542 17541 + 16905 17544 16901 + 17545 17544 16905 + 16905 16914 17545 + 17545 16914 16919 + 16919 17546 17545 + 17547 17546 16919 + 17542 17546 17547 + 17547 17548 17542 + 17542 17548 17549 + 17549 17543 17542 + 17550 17543 17549 + 17543 17550 17538 + 17533 17538 17550 + 16919 17551 17547 + 17547 17551 17552 + 17552 17553 17547 + 17548 17547 17553 + 17553 17554 17548 + 17549 17548 17554 + 16918 17551 16919 + 17551 16918 17555 + 17555 17552 17551 + 17552 17555 17556 + 17556 17557 17552 + 17552 17557 17558 + 17558 17553 17552 + 17554 17553 17558 + 16924 17555 16918 + 17556 17555 16924 + 16924 17559 17556 + 17556 17559 17560 + 17560 17561 17556 + 17557 17556 17561 + 17561 17562 17557 + 17558 17557 17562 + 16929 17559 16924 + 17559 16929 17563 + 17563 17560 17559 + 17560 17563 17564 + 17564 17565 17560 + 17560 17565 17566 + 17566 17561 17560 + 17562 17561 17566 + 17567 17563 16929 + 17564 17563 17567 + 17567 17568 17564 + 17564 17568 17569 + 17569 17570 17564 + 17565 17564 17570 + 17570 17571 17565 + 17566 17565 17571 + 16929 16928 17567 + 16934 17567 16928 + 17568 17567 16934 + 16934 16939 17568 + 17568 16939 17572 + 17572 17569 17568 + 17573 17569 17572 + 17569 17573 17574 + 17574 17570 17569 + 17571 17570 17574 + 17575 17572 16939 + 17576 17572 17575 + 17572 17576 17573 + 17573 17576 17577 + 17577 17578 17573 + 17574 17573 17578 + 16939 16938 17575 + 17579 17575 16938 + 17580 17575 17579 + 17575 17580 17576 + 17576 17580 17581 + 17581 17577 17576 + 17582 17577 17581 + 17578 17577 17582 + 16938 16943 17579 + 17583 17579 16943 + 17584 17579 17583 + 17579 17584 17580 + 17580 17584 17585 + 17585 17581 17580 + 17586 17581 17585 + 17581 17586 17582 + 16943 16947 17583 + 17587 17583 16947 + 17588 17583 17587 + 17583 17588 17584 + 17584 17588 17589 + 17589 17585 17584 + 17590 17585 17589 + 17585 17590 17586 + 16947 16951 17587 + 17591 17587 16951 + 17592 17587 17591 + 17587 17592 17588 + 17588 17592 17593 + 17593 17589 17588 + 17594 17589 17593 + 17589 17594 17590 + 16951 16955 17591 + 17595 17591 16955 + 17596 17591 17595 + 17591 17596 17592 + 17592 17596 17597 + 17597 17593 17592 + 17598 17593 17597 + 17593 17598 17594 + 16955 16960 17595 + 17599 17595 16960 + 17600 17595 17599 + 17595 17600 17596 + 17596 17600 17601 + 17601 17597 17596 + 17602 17597 17601 + 17597 17602 17598 + 16960 16964 17599 + 17603 17599 16964 + 17604 17599 17603 + 17599 17604 17600 + 17600 17604 17605 + 17605 17601 17600 + 17606 17601 17605 + 17601 17606 17602 + 16964 16968 17603 + 16977 17603 16968 + 17607 17603 16977 + 17603 17607 17604 + 17604 17607 17608 + 17608 17605 17604 + 17609 17605 17608 + 17605 17609 17606 + 17606 17609 17610 + 17610 17611 17606 + 17602 17606 17611 + 16977 16982 17607 + 17607 16982 17612 + 17612 17608 17607 + 17613 17608 17612 + 17608 17613 17609 + 17609 17613 17614 + 17614 17610 17609 + 17615 17610 17614 + 17610 17615 17616 + 17616 17611 17610 + 16987 17612 16982 + 17617 17612 16987 + 17612 17617 17613 + 17613 17617 17618 + 17618 17614 17613 + 17619 17614 17618 + 17614 17619 17615 + 17615 17619 17620 + 17620 17621 17615 + 17616 17615 17621 + 16987 16992 17617 + 17617 16992 17622 + 17622 17618 17617 + 17623 17618 17622 + 17618 17623 17619 + 17619 17623 17624 + 17624 17620 17619 + 17625 17620 17624 + 17620 17625 17626 + 17626 17621 17620 + 16997 17622 16992 + 17627 17622 16997 + 17622 17627 17623 + 17623 17627 17628 + 17628 17624 17623 + 17629 17624 17628 + 17624 17629 17625 + 17630 17625 17629 + 17626 17625 17630 + 16997 17002 17627 + 17627 17002 17631 + 17631 17628 17627 + 17632 17628 17631 + 17628 17632 17629 + 17629 17632 17633 + 17633 17634 17629 + 17634 17630 17629 + 17007 17631 17002 + 17635 17631 17007 + 17631 17635 17632 + 17632 17635 17636 + 17636 17633 17632 + 17637 17633 17636 + 17633 17637 17638 + 17638 17634 17633 + 17634 17638 17639 + 17639 17630 17634 + 17007 17012 17635 + 17635 17012 17640 + 17640 17636 17635 + 17641 17636 17640 + 17636 17641 17637 + 17642 17637 17641 + 17638 17637 17642 + 17642 17643 17638 + 17638 17643 17644 + 17644 17639 17638 + 17017 17640 17012 + 17645 17640 17017 + 17640 17645 17641 + 17641 17645 17646 + 17646 17647 17641 + 17641 17647 17642 + 17648 17642 17647 + 17642 17648 17649 + 17649 17643 17642 + 17017 17022 17645 + 17646 17645 17022 + 17022 17650 17646 + 17651 17646 17650 + 17646 17651 17652 + 17652 17647 17646 + 17647 17652 17648 + 17653 17648 17652 + 17649 17648 17653 + 17026 17650 17022 + 17040 17650 17026 + 17650 17040 17651 + 17654 17651 17040 + 17652 17651 17654 + 17654 17655 17652 + 17652 17655 17653 + 17656 17653 17655 + 17653 17656 17657 + 17657 17658 17653 + 17653 17658 17649 + 17040 17659 17654 + 17660 17654 17659 + 17654 17660 17661 + 17661 17655 17654 + 17655 17661 17656 + 17662 17656 17661 + 17657 17656 17662 + 17039 17659 17040 + 17663 17659 17039 + 17659 17663 17660 + 17664 17660 17663 + 17661 17660 17664 + 17664 17665 17661 + 17661 17665 17662 + 17039 17045 17663 + 17663 17045 17050 + 17050 17666 17663 + 17663 17666 17664 + 17667 17664 17666 + 17664 17667 17668 + 17668 17665 17664 + 17665 17668 17669 + 17669 17662 17665 + 17670 17666 17050 + 17666 17670 17667 + 17671 17667 17670 + 17668 17667 17671 + 17671 17672 17668 + 17668 17672 17673 + 17673 17669 17668 + 17674 17669 17673 + 17662 17669 17674 + 17050 17055 17670 + 17670 17055 17060 + 17060 17675 17670 + 17670 17675 17671 + 17676 17671 17675 + 17671 17676 17677 + 17677 17672 17671 + 17672 17677 17678 + 17678 17673 17672 + 17070 17675 17060 + 17675 17070 17676 + 17679 17676 17070 + 17677 17676 17679 + 17679 17680 17677 + 17677 17680 17681 + 17681 17678 17677 + 17682 17678 17681 + 17673 17678 17682 + 17682 17683 17673 + 17673 17683 17674 + 17070 17079 17679 + 17084 17679 17079 + 17679 17084 17684 + 17684 17680 17679 + 17680 17684 17685 + 17685 17681 17680 + 17681 17685 17686 + 17686 17687 17681 + 17681 17687 17682 + 17684 17084 17083 + 17083 17688 17684 + 17684 17688 17689 + 17689 17685 17684 + 17686 17685 17689 + 17689 17690 17686 + 17691 17686 17690 + 17687 17686 17691 + 17691 17692 17687 + 17682 17687 17692 + 17089 17688 17083 + 17688 17089 17094 + 17094 17689 17688 + 17689 17094 17693 + 17693 17690 17689 + 17690 17693 17694 + 17694 17695 17690 + 17690 17695 17691 + 17696 17691 17695 + 17692 17691 17696 + 17693 17094 17697 + 17697 17698 17693 + 17693 17698 17699 + 17699 17700 17693 + 17700 17694 17693 + 17701 17694 17700 + 17695 17694 17701 + 17695 17701 17696 + 17702 17697 17094 + 17703 17697 17702 + 17698 17697 17703 + 17703 17704 17698 + 17698 17704 17705 + 17705 17699 17698 + 17093 17702 17094 + 17706 17702 17093 + 17702 17706 17707 + 17702 17707 17703 + 17708 17703 17707 + 17704 17703 17708 + 17708 17709 17704 + 17704 17709 17710 + 17710 17705 17704 + 17093 17099 17706 + 17711 17706 17099 + 17707 17706 17711 + 17711 17712 17707 + 17707 17712 17708 + 17713 17708 17712 + 17708 17713 17714 + 17714 17709 17708 + 17709 17714 17715 + 17715 17710 17709 + 17099 17716 17711 + 17717 17711 17716 + 17711 17717 17167 + 17167 17712 17711 + 17712 17167 17713 + 17166 17713 17167 + 17714 17713 17166 + 17098 17716 17099 + 17108 17716 17098 + 17716 17108 17717 + 17155 17717 17108 + 17167 17717 17155 + 17166 17718 17714 + 17165 17718 17166 + 17718 17165 17719 + 17719 17720 17718 + 17714 17718 17720 + 17720 17715 17714 + 17721 17715 17720 + 17710 17715 17721 + 17721 17722 17710 + 17710 17722 17723 + 17723 17705 17710 + 17171 17719 17165 + 17724 17719 17171 + 17720 17719 17724 + 17724 17725 17720 + 17720 17725 17721 + 17721 17725 17726 + 17726 17727 17721 + 17722 17721 17727 + 17727 17728 17722 + 17723 17722 17728 + 17171 17729 17724 + 17724 17729 17730 + 17730 17731 17724 + 17725 17724 17731 + 17731 17726 17725 + 17175 17729 17171 + 17729 17175 17732 + 17732 17730 17729 + 17730 17732 17733 + 17733 17734 17730 + 17730 17734 17735 + 17735 17731 17730 + 17726 17731 17735 + 17179 17732 17175 + 17733 17732 17179 + 17179 17736 17733 + 17733 17736 17737 + 17737 17738 17733 + 17734 17733 17738 + 17738 17739 17734 + 17735 17734 17739 + 17184 17736 17179 + 17736 17184 17740 + 17740 17737 17736 + 17737 17740 17741 + 17741 17742 17737 + 17737 17742 17743 + 17743 17738 17737 + 17739 17738 17743 + 17189 17740 17184 + 17741 17740 17189 + 17189 17199 17741 + 17741 17199 17208 + 17208 17744 17741 + 17742 17741 17744 + 17744 17745 17742 + 17743 17742 17745 + 17745 17746 17743 + 17747 17743 17746 + 17743 17747 17739 + 17748 17744 17208 + 17745 17744 17748 + 17748 17749 17745 + 17745 17749 17750 + 17750 17746 17745 + 17751 17746 17750 + 17746 17751 17747 + 17752 17747 17751 + 17739 17747 17752 + 17208 17753 17748 + 17748 17753 17754 + 17754 17755 17748 + 17749 17748 17755 + 17755 17756 17749 + 17750 17749 17756 + 17207 17753 17208 + 17753 17207 17217 + 17217 17754 17753 + 17757 17754 17217 + 17754 17757 17758 + 17758 17755 17754 + 17755 17758 17759 + 17759 17756 17755 + 17756 17759 17760 + 17760 17761 17756 + 17756 17761 17750 + 17217 17216 17757 + 17757 17216 17762 + 17762 17763 17757 + 17758 17757 17763 + 17763 17764 17758 + 17759 17758 17764 + 17764 17765 17759 + 17760 17759 17765 + 17221 17762 17216 + 17766 17762 17221 + 17762 17766 17767 + 17767 17763 17762 + 17763 17767 17768 + 17768 17764 17763 + 17764 17768 17769 + 17769 17765 17764 + 17221 17225 17766 + 17766 17225 17770 + 17770 17771 17766 + 17767 17766 17771 + 17771 17772 17767 + 17768 17767 17772 + 17772 17773 17768 + 17769 17768 17773 + 17229 17770 17225 + 17774 17770 17229 + 17770 17774 17775 + 17775 17771 17770 + 17771 17775 17776 + 17776 17772 17771 + 17772 17776 17777 + 17777 17773 17772 + 17229 17234 17774 + 17774 17234 17778 + 17778 17779 17774 + 17775 17774 17779 + 17779 17780 17775 + 17776 17775 17780 + 17780 17781 17776 + 17777 17776 17781 + 17239 17778 17234 + 17782 17778 17239 + 17778 17782 17783 + 17783 17779 17778 + 17779 17783 17784 + 17784 17780 17779 + 17780 17784 17785 + 17785 17781 17780 + 17239 17786 17782 + 17782 17786 17787 + 17787 17788 17782 + 17783 17782 17788 + 17788 17789 17783 + 17784 17783 17789 + 17789 17790 17784 + 17785 17784 17790 + 17786 17239 17238 + 17238 17244 17786 + 17786 17244 17791 + 17791 17787 17786 + 17792 17787 17791 + 17787 17792 17793 + 17793 17788 17787 + 17788 17793 17794 + 17794 17789 17788 + 17789 17794 17795 + 17795 17790 17789 + 17249 17791 17244 + 17796 17791 17249 + 17791 17796 17792 + 17792 17796 17797 + 17797 17798 17792 + 17793 17792 17798 + 17798 17799 17793 + 17794 17793 17799 + 17799 17800 17794 + 17795 17794 17800 + 17249 17254 17796 + 17796 17254 17801 + 17801 17797 17796 + 17802 17797 17801 + 17798 17797 17802 + 17802 17803 17798 + 17798 17803 17804 + 17804 17799 17798 + 17800 17799 17804 + 17259 17801 17254 + 17801 17259 17264 + 17264 17805 17801 + 17801 17805 17802 + 17802 17805 17806 + 17806 17807 17802 + 17803 17802 17807 + 17807 17808 17803 + 17804 17803 17808 + 17805 17264 17809 + 17809 17806 17805 + 17806 17809 17810 + 17810 17811 17806 + 17806 17811 17812 + 17812 17807 17806 + 17808 17807 17812 + 17813 17809 17264 + 17810 17809 17813 + 17813 17814 17810 + 17810 17814 17815 + 17815 17816 17810 + 17811 17810 17816 + 17264 17263 17813 + 17263 17269 17813 + 17817 17813 17269 + 17813 17817 17818 + 17818 17814 17813 + 17814 17818 17819 + 17819 17815 17814 + 17269 17268 17817 + 17281 17817 17268 + 17818 17817 17281 + 17281 17820 17818 + 17818 17820 17821 + 17821 17819 17818 + 17822 17819 17821 + 17815 17819 17822 + 17822 17823 17815 + 17815 17823 17824 + 17824 17816 17815 + 17825 17820 17281 + 17820 17825 17826 + 17826 17821 17820 + 17821 17826 17827 + 17827 17828 17821 + 17821 17828 17822 + 17829 17822 17828 + 17823 17822 17829 + 17281 17286 17825 + 17825 17286 17291 + 17291 17830 17825 + 17825 17830 17831 + 17831 17826 17825 + 17827 17826 17831 + 17831 17832 17827 + 17833 17827 17832 + 17828 17827 17833 + 17833 17834 17828 + 17828 17834 17829 + 17306 17830 17291 + 17830 17306 17835 + 17835 17831 17830 + 17831 17835 17836 + 17836 17832 17831 + 17832 17836 17837 + 17837 17838 17832 + 17832 17838 17833 + 17839 17833 17838 + 17834 17833 17839 + 17314 17835 17306 + 17836 17835 17314 + 17314 17321 17836 + 17836 17321 17320 + 17837 17836 17320 + 17320 17329 17837 + 17840 17837 17329 + 17838 17837 17840 + 17840 17841 17838 + 17838 17841 17839 + 17842 17839 17841 + 17843 17839 17842 + 17839 17843 17834 + 17834 17843 17844 + 17844 17829 17834 + 17329 17328 17840 + 17845 17840 17328 + 17841 17840 17845 + 17845 17846 17841 + 17841 17846 17842 + 17847 17842 17846 + 17847 17848 17842 + 17842 17848 17843 + 17843 17848 17849 + 17849 17844 17843 + 17328 17334 17845 + 17334 17850 17845 + 17851 17845 17850 + 17846 17845 17851 + 17851 17852 17846 + 17846 17852 17847 + 17847 17852 17853 + 17854 17847 17853 + 17848 17847 17854 + 17854 17849 17848 + 17855 17850 17334 + 17850 17855 17856 + 17856 17857 17850 + 17850 17857 17851 + 17851 17857 17858 + 17858 17859 17851 + 17852 17851 17859 + 17859 17853 17852 + 17334 17333 17855 + 17855 17333 17860 + 17860 17861 17855 + 17856 17855 17861 + 17861 17862 17856 + 17856 17862 17471 + 17471 17863 17856 + 17857 17856 17863 + 17863 17858 17857 + 17332 17860 17333 + 17864 17860 17332 + 17860 17864 17865 + 17865 17861 17860 + 17862 17861 17865 + 17862 17865 17866 + 17866 17867 17862 + 17862 17867 17471 + 17453 17471 17867 + 17332 17331 17864 + 17864 17331 17868 + 17868 17869 17864 + 17865 17864 17869 + 17869 17866 17865 + 17870 17866 17869 + 17866 17870 17871 + 17871 17867 17866 + 17867 17871 17453 + 17868 17331 17338 + 17338 17872 17868 + 17873 17868 17872 + 17868 17873 17869 + 17869 17873 17870 + 17870 17873 17874 + 17874 17875 17870 + 17871 17870 17875 + 17875 17876 17871 + 17453 17871 17876 + 17347 17872 17338 + 17872 17347 17877 + 17877 17874 17872 + 17872 17874 17873 + 17877 17347 17878 + 17878 17879 17877 + 17880 17877 17879 + 17874 17877 17880 + 17880 17875 17874 + 17876 17875 17880 + 17876 17880 17881 + 17881 17882 17876 + 17876 17882 17453 + 17882 17454 17453 + 17346 17878 17347 + 17367 17878 17346 + 17367 17879 17878 + 17879 17367 17375 + 17375 17883 17879 + 17879 17883 17880 + 17883 17881 17880 + 17389 17881 17883 + 17882 17881 17389 + 17882 17389 17884 + 17884 17454 17882 + 17884 17437 17454 + 17437 17884 17388 + 17388 17884 17389 + 17885 17883 17375 + 17883 17885 17389 + 17389 17885 17384 + 17373 17384 17885 + 17885 17374 17373 + 17375 17374 17885 + 17470 17863 17471 + 17863 17470 17858 + 17858 17470 17469 + 17469 17859 17858 + 17859 17469 17853 + 17853 17469 17468 + 17468 17886 17853 + 17853 17886 17854 + 17887 17854 17886 + 17854 17887 17888 + 17888 17849 17854 + 17886 17468 17889 + 17886 17889 17887 + 17890 17887 17889 + 17888 17887 17890 + 17890 17891 17888 + 17892 17888 17891 + 17849 17888 17892 + 17892 17844 17849 + 17889 17468 17467 + 17467 17893 17889 + 17889 17893 17890 + 17894 17890 17893 + 17890 17894 17895 + 17895 17891 17890 + 17891 17895 17896 + 17896 17897 17891 + 17891 17897 17892 + 17893 17467 17898 + 17893 17898 17894 + 17899 17894 17898 + 17895 17894 17899 + 17899 17900 17895 + 17896 17895 17900 + 17900 17901 17896 + 17902 17896 17901 + 17897 17896 17902 + 17898 17467 17466 + 17466 17903 17898 + 17898 17903 17899 + 17904 17899 17903 + 17899 17904 17905 + 17905 17900 17899 + 17900 17905 17906 + 17906 17901 17900 + 17903 17466 17907 + 17903 17907 17904 + 17908 17904 17907 + 17905 17904 17908 + 17908 17909 17905 + 17906 17905 17909 + 17909 17910 17906 + 17911 17906 17910 + 17901 17906 17911 + 17907 17466 17465 + 17465 17912 17907 + 17907 17912 17908 + 17913 17908 17912 + 17908 17913 17914 + 17914 17909 17908 + 17909 17914 17915 + 17915 17910 17909 + 17912 17465 17916 + 17912 17916 17913 + 17917 17913 17916 + 17914 17913 17917 + 17917 17918 17914 + 17915 17914 17918 + 17918 17919 17915 + 17920 17915 17919 + 17910 17915 17920 + 17916 17465 17464 + 17464 17921 17916 + 17916 17921 17922 + 17922 17923 17916 + 17923 17917 17916 + 17924 17917 17923 + 17917 17924 17918 + 17918 17924 17925 + 17925 17919 17918 + 17921 17464 17476 + 17921 17476 17926 + 17926 17922 17921 + 17922 17926 17927 + 17927 17928 17922 + 17922 17928 17929 + 17929 17923 17922 + 17923 17929 17930 + 17923 17930 17924 + 17925 17924 17930 + 17480 17926 17476 + 17927 17926 17480 + 17480 17931 17927 + 17927 17931 17932 + 17932 17933 17927 + 17928 17927 17933 + 17933 17934 17928 + 17929 17928 17934 + 17484 17931 17480 + 17931 17484 17489 + 17489 17932 17931 + 17932 17489 17935 + 17935 17936 17932 + 17932 17936 17937 + 17937 17933 17932 + 17934 17933 17937 + 17935 17489 17488 + 17488 17938 17935 + 17935 17938 17939 + 17939 17940 17935 + 17936 17935 17940 + 17940 17941 17936 + 17936 17941 17942 + 17942 17937 17936 + 17938 17488 17494 + 17938 17494 17943 + 17943 17939 17938 + 17939 17943 17944 + 17944 17945 17939 + 17939 17945 17946 + 17946 17940 17939 + 17941 17940 17946 + 17498 17943 17494 + 17944 17943 17498 + 17498 17505 17944 + 17947 17944 17505 + 17945 17944 17947 + 17947 17948 17945 + 17945 17948 17949 + 17949 17950 17945 + 17950 17951 17945 + 17951 17946 17945 + 17952 17947 17505 + 17953 17947 17952 + 17948 17947 17953 + 17953 17954 17948 + 17948 17954 17955 + 17955 17949 17948 + 17505 17509 17952 + 17956 17952 17509 + 17957 17952 17956 + 17952 17957 17953 + 17958 17953 17957 + 17954 17953 17958 + 17509 17514 17956 + 17959 17956 17514 + 17957 17956 17959 + 17959 17960 17957 + 17957 17960 17958 + 17961 17958 17960 + 17962 17958 17961 + 17958 17962 17954 + 17514 17963 17959 + 17964 17959 17963 + 17960 17959 17964 + 17964 17965 17960 + 17960 17965 17961 + 17966 17961 17965 + 17967 17961 17966 + 17961 17967 17962 + 17513 17963 17514 + 17963 17513 17519 + 17519 17968 17963 + 17963 17968 17964 + 17969 17964 17968 + 17965 17964 17969 + 17969 17970 17965 + 17965 17970 17966 + 17968 17519 17524 + 17524 17971 17968 + 17968 17971 17969 + 17972 17969 17971 + 17969 17972 17973 + 17973 17970 17969 + 17970 17973 17974 + 17974 17966 17970 + 17533 17971 17524 + 17971 17533 17972 + 17550 17972 17533 + 17973 17972 17550 + 17550 17975 17973 + 17973 17975 17976 + 17976 17974 17973 + 17977 17974 17976 + 17966 17974 17977 + 17977 17978 17966 + 17966 17978 17967 + 17549 17975 17550 + 17975 17549 17979 + 17979 17976 17975 + 17976 17979 17980 + 17980 17981 17976 + 17976 17981 17977 + 17977 17981 17982 + 17982 17983 17977 + 17978 17977 17983 + 17554 17979 17549 + 17980 17979 17554 + 17554 17984 17980 + 17980 17984 17985 + 17985 17986 17980 + 17981 17980 17986 + 17986 17982 17981 + 17558 17984 17554 + 17984 17558 17987 + 17987 17985 17984 + 17985 17987 17988 + 17988 17989 17985 + 17985 17989 17990 + 17990 17986 17985 + 17982 17986 17990 + 17562 17987 17558 + 17988 17987 17562 + 17562 17991 17988 + 17988 17991 17992 + 17992 17993 17988 + 17989 17988 17993 + 17993 17994 17989 + 17990 17989 17994 + 17566 17991 17562 + 17991 17566 17995 + 17995 17992 17991 + 17992 17995 17996 + 17996 17997 17992 + 17992 17997 17998 + 17998 17993 17992 + 17994 17993 17998 + 17571 17995 17566 + 17996 17995 17571 + 17571 17999 17996 + 17996 17999 18000 + 18000 18001 17996 + 17997 17996 18001 + 18001 18002 17997 + 17998 17997 18002 + 17574 17999 17571 + 17999 17574 18003 + 18003 18000 17999 + 18000 18003 18004 + 18004 18005 18000 + 18000 18005 18006 + 18006 18001 18000 + 18002 18001 18006 + 17578 18003 17574 + 18004 18003 17578 + 17578 18007 18004 + 18004 18007 18008 + 18008 18009 18004 + 18005 18004 18009 + 18009 18010 18005 + 18006 18005 18010 + 17582 18007 17578 + 18007 17582 18011 + 18011 18008 18007 + 18008 18011 18012 + 18012 18013 18008 + 18008 18013 18014 + 18014 18009 18008 + 18010 18009 18014 + 18015 18011 17582 + 18012 18011 18015 + 18015 18016 18012 + 18012 18016 18017 + 18017 18018 18012 + 18013 18012 18018 + 17582 17586 18015 + 18019 18015 17586 + 18016 18015 18019 + 18019 18020 18016 + 18016 18020 18021 + 18021 18017 18016 + 18022 18017 18021 + 18017 18022 18023 + 18023 18018 18017 + 17586 17590 18019 + 18024 18019 17590 + 18020 18019 18024 + 18024 18025 18020 + 18020 18025 18026 + 18026 18021 18020 + 18027 18021 18026 + 18021 18027 18022 + 17590 17594 18024 + 18028 18024 17594 + 18025 18024 18028 + 18028 18029 18025 + 18025 18029 18030 + 18030 18026 18025 + 18031 18026 18030 + 18026 18031 18027 + 18032 18027 18031 + 18022 18027 18032 + 17594 17598 18028 + 18033 18028 17598 + 18029 18028 18033 + 18033 18034 18029 + 18029 18034 18035 + 18030 18029 18035 + 17598 17602 18033 + 17611 18033 17602 + 18034 18033 17611 + 17611 17616 18034 + 18034 17616 18036 + 18036 118 18034 + 18037 118 18036 + 118 18037 18038 + 18037 18039 18038 + 257 18039 18037 + 17621 18036 17616 + 18040 18036 17621 + 18036 18040 18037 + 18037 18040 257 + 257 18040 17626 + 18041 257 17626 + 18042 257 18041 + 257 18042 18043 + 17621 17626 18040 + 17630 18041 17626 + 18041 17630 17639 + 18044 18041 17639 + 18041 18044 18042 + 18045 18042 18044 + 18043 18042 18045 + 18045 18046 18043 + 18043 18046 18030 + 18047 18030 18046 + 18030 18047 18031 + 18044 17639 17644 + 17644 18048 18044 + 18044 18048 18045 + 18049 18045 18048 + 18045 18049 18050 + 18050 18046 18045 + 18046 18050 18047 + 18051 18047 18050 + 18031 18047 18051 + 18051 18052 18031 + 18031 18052 18032 + 18053 18048 17644 + 18048 18053 18049 + 18054 18049 18053 + 18050 18049 18054 + 18054 18055 18050 + 18050 18055 18051 + 18056 18051 18055 + 18051 18056 18057 + 18057 18052 18051 + 17644 18058 18053 + 18053 18058 18059 + 18059 18060 18053 + 18053 18060 18054 + 18061 18054 18060 + 18054 18061 18062 + 18062 18055 18054 + 18055 18062 18056 + 18058 17644 17643 + 17643 17649 18058 + 18059 18058 17649 + 17649 17658 18059 + 18063 18059 17658 + 18059 18063 18064 + 18064 18060 18059 + 18060 18064 18061 + 18065 18061 18064 + 18062 18061 18065 + 18065 18066 18062 + 18062 18066 18067 + 18067 18056 18062 + 18057 18056 18067 + 17658 17657 18063 + 18068 18063 17657 + 18064 18063 18068 + 18068 18069 18064 + 18064 18069 18065 + 18070 18065 18069 + 18065 18070 18071 + 18071 18066 18065 + 18066 18071 18072 + 18072 18067 18066 + 17657 18073 18068 + 18074 18068 18073 + 18068 18074 18075 + 18075 18069 18068 + 18069 18075 18070 + 18076 18070 18075 + 18071 18070 18076 + 17662 18073 17657 + 17674 18073 17662 + 18073 17674 18074 + 18077 18074 17674 + 18075 18074 18077 + 18077 18078 18075 + 18075 18078 18076 + 18079 18076 18078 + 18076 18079 18080 + 18080 18081 18076 + 18076 18081 18071 + 17674 17683 18077 + 18082 18077 17683 + 18077 18082 18083 + 18083 18078 18077 + 18078 18083 18079 + 18084 18079 18083 + 18080 18079 18084 + 17683 17682 18082 + 17692 18082 17682 + 18083 18082 17692 + 17692 18085 18083 + 18083 18085 18084 + 18086 18084 18085 + 18084 18086 18087 + 18087 18088 18084 + 18084 18088 18080 + 17696 18085 17692 + 18085 17696 18086 + 18089 18086 17696 + 18087 18086 18089 + 18089 18090 18087 + 18087 18090 18091 + 18091 18092 18087 + 18088 18087 18092 + 18092 18093 18088 + 18080 18088 18093 + 17696 17701 18089 + 17700 18089 17701 + 18089 17700 18094 + 18094 18090 18089 + 18090 18094 18095 + 18095 18091 18090 + 18091 18095 18096 + 18096 18097 18091 + 18091 18097 18098 + 18098 18092 18091 + 18093 18092 18098 + 18094 17700 17699 + 17699 18099 18094 + 18095 18094 18099 + 18099 18100 18095 + 18096 18095 18100 + 18100 18101 18096 + 18102 18096 18101 + 18097 18096 18102 + 18102 18103 18097 + 18098 18097 18103 + 18099 17699 17705 + 17705 17723 18099 + 18099 17723 18104 + 18104 18100 18099 + 18101 18100 18104 + 18104 18105 18101 + 18101 18105 18106 + 18106 18107 18101 + 18101 18107 18102 + 18108 18102 18107 + 18103 18102 18108 + 17728 18104 17723 + 18105 18104 17728 + 17728 18109 18105 + 18105 18109 18110 + 18110 18106 18105 + 18111 18106 18110 + 18106 18111 18112 + 18112 18107 18106 + 18107 18112 18108 + 18113 18109 17728 + 18109 18113 18114 + 18114 18110 18109 + 18110 18114 18115 + 18115 18116 18110 + 18110 18116 18111 + 17728 17727 18113 + 18113 17727 17726 + 17726 18117 18113 + 18113 18117 18118 + 18118 18114 18113 + 18115 18114 18118 + 18118 18119 18115 + 18115 18119 18120 + 18120 18121 18115 + 18116 18115 18121 + 17735 18117 17726 + 18117 17735 18122 + 18122 18118 18117 + 18118 18122 17752 + 17752 18119 18118 + 18119 17752 18123 + 18123 18120 18119 + 17739 18122 17735 + 17752 18122 17739 + 17751 18123 17752 + 18124 18123 17751 + 18120 18123 18124 + 18124 18125 18120 + 18120 18125 18126 + 18126 18121 18120 + 18127 18121 18126 + 18121 18127 18116 + 18111 18116 18127 + 18127 18128 18111 + 18112 18111 18128 + 17751 18129 18124 + 18124 18129 18130 + 18130 18131 18124 + 18125 18124 18131 + 18131 18132 18125 + 18126 18125 18132 + 17750 18129 17751 + 18129 17750 17761 + 17761 18130 18129 + 18133 18130 17761 + 18130 18133 18134 + 18134 18131 18130 + 18131 18134 18135 + 18135 18132 18131 + 18132 18135 18136 + 18136 18137 18132 + 18132 18137 18126 + 17761 17760 18133 + 18133 17760 18138 + 18138 18139 18133 + 18134 18133 18139 + 18139 18140 18134 + 18135 18134 18140 + 18140 18141 18135 + 18136 18135 18141 + 17765 18138 17760 + 18142 18138 17765 + 18138 18142 18143 + 18143 18139 18138 + 18139 18143 18144 + 18144 18140 18139 + 18140 18144 18145 + 18145 18141 18140 + 17765 17769 18142 + 18142 17769 18146 + 18146 18147 18142 + 18143 18142 18147 + 18147 18148 18143 + 18144 18143 18148 + 18148 18149 18144 + 18145 18144 18149 + 17773 18146 17769 + 18150 18146 17773 + 18146 18150 18151 + 18151 18147 18146 + 18147 18151 18152 + 18152 18148 18147 + 18148 18152 18153 + 18153 18149 18148 + 17773 17777 18150 + 18150 17777 18154 + 18154 18155 18150 + 18151 18150 18155 + 18155 18156 18151 + 18152 18151 18156 + 18156 18157 18152 + 18153 18152 18157 + 17781 18154 17777 + 18158 18154 17781 + 18154 18158 18159 + 18159 18155 18154 + 18155 18159 18160 + 18160 18156 18155 + 18156 18160 18161 + 18161 18157 18156 + 17781 17785 18158 + 18158 17785 18162 + 18162 18163 18158 + 18159 18158 18163 + 18163 18164 18159 + 18160 18159 18164 + 18164 18165 18160 + 18161 18160 18165 + 17790 18162 17785 + 18166 18162 17790 + 18162 18166 18167 + 18167 18163 18162 + 18163 18167 18168 + 18168 18164 18163 + 18164 18168 18169 + 18169 18165 18164 + 17790 17795 18166 + 18166 17795 18170 + 18170 18171 18166 + 18167 18166 18171 + 18171 18172 18167 + 18168 18167 18172 + 18172 18173 18168 + 18169 18168 18173 + 17800 18170 17795 + 18174 18170 17800 + 18170 18174 18171 + 18171 18174 18175 + 18175 18172 18171 + 18173 18172 18175 + 18175 18176 18173 + 18173 18176 18177 + 18177 18178 18173 + 18173 18178 18169 + 17800 18179 18174 + 18174 18179 18180 + 18175 18174 18180 + 18180 18181 18175 + 18176 18175 18181 + 18181 18182 18176 + 18177 18176 18182 + 17804 18179 17800 + 18179 17804 18183 + 18183 18180 18179 + 18180 18183 18184 + 18184 18185 18180 + 18180 18185 18186 + 18186 18181 18180 + 18181 18186 18182 + 17808 18183 17804 + 18184 18183 17808 + 17808 18187 18184 + 18184 18187 18188 + 18188 18189 18184 + 18185 18184 18189 + 18189 18190 18185 + 18186 18185 18190 + 18191 18186 18190 + 18182 18186 18191 + 17812 18187 17808 + 18187 17812 18192 + 18192 18188 18187 + 18188 18192 18193 + 18193 18194 18188 + 18188 18194 18195 + 18195 18189 18188 + 18190 18189 18195 + 18192 17812 17811 + 17811 18196 18192 + 18193 18192 18196 + 18196 18197 18193 + 18193 18197 17902 + 17902 18198 18193 + 18194 18193 18198 + 17816 18196 17811 + 18197 18196 17816 + 17816 17824 18197 + 18197 17824 18199 + 18199 17902 18197 + 17902 18199 17897 + 17897 18199 18200 + 18200 17892 17897 + 17844 17892 18200 + 18200 17829 17844 + 18199 17824 17823 + 17823 18200 18199 + 17829 18200 17823 + 17901 18198 17902 + 17911 18198 17901 + 18198 17911 18194 + 18194 17911 18201 + 18201 18195 18194 + 18202 18195 18201 + 18195 18202 18190 + 18190 18202 18203 + 18203 18204 18190 + 18190 18204 18191 + 17910 18201 17911 + 17920 18201 17910 + 18201 17920 18202 + 18202 17920 18205 + 18205 18203 18202 + 18206 18203 18205 + 18203 18206 18207 + 18207 18204 18203 + 18204 18207 18208 + 18208 18191 18204 + 17919 18205 17920 + 18209 18205 17919 + 18205 18209 18206 + 18206 18209 18210 + 18210 18211 18206 + 18207 18206 18211 + 18211 18212 18207 + 18207 18212 18213 + 18213 18208 18207 + 17919 17925 18209 + 18209 17925 18214 + 18214 18210 18209 + 18210 18214 18215 + 18210 18215 18216 + 18216 18211 18210 + 18211 18216 18217 + 18217 18212 18211 + 18212 18217 18218 + 18218 18213 18212 + 18214 17925 17930 + 17930 18219 18214 + 18215 18214 18219 + 18219 18220 18215 + 18216 18215 18220 + 18220 18221 18216 + 18217 18216 18221 + 18221 18222 18217 + 18217 18222 18223 + 18223 18218 18217 + 18224 18219 17930 + 18219 18224 18225 + 18225 18220 18219 + 18220 18225 18226 + 18226 18221 18220 + 18221 18226 18227 + 18227 18222 18221 + 18222 18227 18228 + 18228 18223 18222 + 17930 17929 18224 + 18229 18224 17929 + 18225 18224 18229 + 18229 18230 18225 + 18226 18225 18230 + 18230 18231 18226 + 18227 18226 18231 + 17934 18229 17929 + 18232 18229 17934 + 18230 18229 18232 + 18230 18232 18233 + 18233 18231 18230 + 18231 18233 18234 + 18234 18235 18231 + 18231 18235 18227 + 17934 18236 18232 + 18233 18232 18236 + 18236 18237 18233 + 18234 18233 18237 + 17937 18236 17934 + 18236 17937 17942 + 17942 18237 18236 + 18237 17942 18238 + 18238 18239 18237 + 18237 18239 18234 + 18238 17942 17941 + 17941 18240 18238 + 18238 18240 18241 + 18241 18242 18238 + 18242 18243 18238 + 18243 18244 18238 + 18239 18238 18244 + 17946 18240 17941 + 18240 17946 17951 + 17951 18241 18240 + 18241 17951 18245 + 18245 18246 18241 + 18241 18246 18247 + 18247 18242 18241 + 18248 18242 18247 + 18242 18248 18249 + 18249 18243 18242 + 18245 17951 17950 + 17950 18250 18245 + 18251 18245 18250 + 18246 18245 18251 + 18251 18252 18246 + 18246 18252 18253 + 18253 18247 18246 + 18248 18247 18253 + 18253 18254 18248 + 18249 18248 18254 + 18250 17950 18255 + 18250 18255 18256 + 18256 18257 18250 + 18250 18257 18251 + 18258 18251 18257 + 18252 18251 18258 + 18255 17950 17949 + 17949 18259 18255 + 18256 18255 18259 + 18259 18260 18256 + 18261 18256 18260 + 18257 18256 18261 + 18261 18262 18257 + 18257 18262 18258 + 18259 17949 17955 + 18259 17955 18263 + 18263 18260 18259 + 18260 18263 18264 + 18264 18265 18260 + 18260 18265 18261 + 18266 18261 18265 + 18262 18261 18266 + 18263 17955 17954 + 18267 18263 17954 + 18264 18263 18267 + 18267 18268 18264 + 18269 18264 18268 + 18265 18264 18269 + 18269 18270 18265 + 18265 18270 18266 + 17954 17962 18267 + 18271 18267 17962 + 18268 18267 18271 + 18268 18271 18272 + 18272 18273 18268 + 18268 18273 18269 + 18274 18269 18273 + 18269 18274 18275 + 18275 18270 18269 + 17962 17967 18271 + 18272 18271 17967 + 17967 17978 18272 + 17983 18272 17978 + 18272 17983 18276 + 18276 18273 18272 + 18273 18276 18274 + 18277 18274 18276 + 18275 18274 18277 + 18277 18278 18275 + 18275 18278 18279 + 18279 18280 18275 + 18270 18275 18280 + 18280 18266 18270 + 18276 17983 17982 + 17982 18281 18276 + 18276 18281 18277 + 18282 18277 18281 + 18277 18282 18283 + 18283 18278 18277 + 18278 18283 18284 + 18284 18279 18278 + 17990 18281 17982 + 18281 17990 18282 + 17994 18282 17990 + 18283 18282 17994 + 17994 18285 18283 + 18283 18285 18286 + 18286 18284 18283 + 18287 18284 18286 + 18279 18284 18287 + 18287 18288 18279 + 18279 18288 18289 + 18289 18280 18279 + 18266 18280 18289 + 17998 18285 17994 + 18285 17998 18290 + 18290 18286 18285 + 18286 18290 18291 + 18291 18292 18286 + 18286 18292 18287 + 18287 18292 18293 + 18293 18294 18287 + 18288 18287 18294 + 18002 18290 17998 + 18291 18290 18002 + 18002 18295 18291 + 18291 18295 18296 + 18296 18297 18291 + 18292 18291 18297 + 18297 18293 18292 + 18006 18295 18002 + 18295 18006 18298 + 18298 18296 18295 + 18296 18298 18299 + 18299 18300 18296 + 18296 18300 18301 + 18301 18297 18296 + 18293 18297 18301 + 18010 18298 18006 + 18299 18298 18010 + 18010 18302 18299 + 18299 18302 18303 + 18303 18304 18299 + 18300 18299 18304 + 18304 18305 18300 + 18301 18300 18305 + 18014 18302 18010 + 18302 18014 18306 + 18306 18303 18302 + 18303 18306 18307 + 18303 18307 18308 + 18308 18304 18303 + 18305 18304 18308 + 18308 18309 18305 + 18305 18309 18310 + 18310 18311 18305 + 18305 18311 18301 + 18307 18306 18312 + 18312 18313 18307 + 18308 18307 18313 + 18313 18314 18308 + 18309 18308 18314 + 18314 18315 18309 + 18309 18315 18316 + 18316 18310 18309 + 18313 18312 18317 + 18313 18317 18318 + 18318 18314 18313 + 18315 18314 18318 + 18318 18319 18315 + 18315 18319 18320 + 18320 18316 18315 + 18317 18312 18321 + 18321 18322 18317 + 18317 18322 18323 + 18323 18318 18317 + 18319 18318 18323 + 18323 18324 18319 + 18319 18324 18325 + 18325 18320 18319 + 18326 18321 18312 + 18327 18321 18326 + 18322 18321 18327 + 18327 18328 18322 + 18322 18328 18329 + 18329 18323 18322 + 18324 18323 18329 + 18013 18326 18312 + 18018 18326 18013 + 18326 18018 18023 + 18023 18330 18326 + 18326 18330 18327 + 18331 18327 18330 + 18328 18327 18331 + 18014 18013 18312 + 18331 18332 18328 + 18332 18331 18333 + 18333 18334 18332 + 18332 18334 18335 + 18335 18336 18332 + 18328 18332 18336 + 18336 18329 18328 + 18337 18329 18336 + 18329 18337 18324 + 18333 18331 18338 + 18338 18339 18333 + 18340 18333 18339 + 18334 18333 18340 + 18340 18341 18334 + 18334 18341 18342 + 18342 18335 18334 + 18330 18338 18331 + 18343 18338 18330 + 18338 18343 18344 + 18344 18339 18338 + 18339 18344 18345 + 18345 18346 18339 + 18339 18346 18340 + 18347 18340 18346 + 18341 18340 18347 + 18330 18023 18343 + 18343 18023 18022 + 18022 18348 18343 + 18344 18343 18348 + 18348 18349 18344 + 18345 18344 18349 + 18349 18350 18345 + 18351 18345 18350 + 18345 18351 18352 + 18352 18346 18345 + 18346 18352 18347 + 18032 18348 18022 + 18349 18348 18032 + 18032 18353 18349 + 18349 18353 18354 + 18354 18350 18349 + 18355 18350 18354 + 18350 18355 18351 + 18356 18351 18355 + 18352 18351 18356 + 18353 18032 18052 + 18052 18057 18353 + 18354 18353 18057 + 18057 18357 18354 + 18358 18354 18357 + 18354 18358 18355 + 18355 18358 18359 + 18359 18360 18355 + 18355 18360 18356 + 18067 18357 18057 + 18361 18357 18067 + 18357 18361 18358 + 18359 18358 18361 + 18361 18362 18359 + 18363 18359 18362 + 18359 18363 18364 + 18364 18360 18359 + 18360 18364 18365 + 18365 18356 18360 + 18067 18072 18361 + 18361 18072 18366 + 18366 18362 18361 + 18367 18362 18366 + 18362 18367 18363 + 18368 18363 18367 + 18364 18363 18368 + 18368 18369 18364 + 18364 18369 18370 + 18370 18365 18364 + 18366 18072 18071 + 18071 18081 18366 + 18371 18366 18081 + 18366 18371 18367 + 18367 18371 18093 + 18093 18372 18367 + 18367 18372 18368 + 18373 18368 18372 + 18368 18373 18374 + 18374 18369 18368 + 18081 18080 18371 + 18093 18371 18080 + 18098 18372 18093 + 18372 18098 18373 + 18103 18373 18098 + 18374 18373 18103 + 18103 18375 18374 + 18374 18375 18376 + 18376 18377 18374 + 18369 18374 18377 + 18377 18370 18369 + 18108 18375 18103 + 18375 18108 18378 + 18378 18376 18375 + 18376 18378 18379 + 18379 18380 18376 + 18376 18380 18381 + 18381 18377 18376 + 18370 18377 18381 + 18378 18108 18112 + 18112 18382 18378 + 18379 18378 18382 + 18382 18383 18379 + 18379 18383 18384 + 18384 18385 18379 + 18380 18379 18385 + 18385 18386 18380 + 18381 18380 18386 + 18128 18382 18112 + 18382 18128 18387 + 18387 18383 18382 + 18383 18387 18388 + 18388 18384 18383 + 18389 18384 18388 + 18384 18389 18390 + 18390 18385 18384 + 18385 18390 18391 + 18391 18386 18385 + 18387 18128 18127 + 18127 18392 18387 + 18387 18392 18393 + 18393 18388 18387 + 18394 18388 18393 + 18388 18394 18389 + 18389 18394 18395 + 18395 18396 18389 + 18390 18389 18396 + 18126 18392 18127 + 18392 18126 18137 + 18137 18393 18392 + 18397 18393 18137 + 18393 18397 18394 + 18394 18397 18398 + 18398 18395 18394 + 18399 18395 18398 + 18395 18399 18400 + 18400 18396 18395 + 18137 18136 18397 + 18397 18136 18401 + 18401 18398 18397 + 18402 18398 18401 + 18398 18402 18399 + 18399 18402 18403 + 18403 18404 18399 + 18400 18399 18404 + 18141 18401 18136 + 18405 18401 18141 + 18401 18405 18402 + 18402 18405 18406 + 18406 18403 18402 + 18407 18403 18406 + 18403 18407 18408 + 18408 18404 18403 + 18141 18145 18405 + 18405 18145 18409 + 18409 18406 18405 + 18410 18406 18409 + 18406 18410 18407 + 18407 18410 18411 + 18411 18412 18407 + 18408 18407 18412 + 18149 18409 18145 + 18413 18409 18149 + 18409 18413 18410 + 18410 18413 18414 + 18414 18411 18410 + 18415 18411 18414 + 18411 18415 18416 + 18416 18412 18411 + 18149 18153 18413 + 18413 18153 18417 + 18417 18414 18413 + 18418 18414 18417 + 18414 18418 18415 + 18415 18418 18419 + 18419 18420 18415 + 18416 18415 18420 + 18157 18417 18153 + 18421 18417 18157 + 18417 18421 18418 + 18418 18421 18422 + 18422 18419 18418 + 18423 18419 18422 + 18419 18423 18424 + 18424 18420 18419 + 18157 18161 18421 + 18421 18161 18425 + 18425 18422 18421 + 18426 18422 18425 + 18422 18426 18423 + 18423 18426 18427 + 18427 18428 18423 + 18424 18423 18428 + 18165 18425 18161 + 18429 18425 18165 + 18425 18429 18426 + 18426 18429 18430 + 18430 18427 18426 + 18431 18427 18430 + 18428 18427 18431 + 18165 18169 18429 + 18429 18169 18178 + 18178 18430 18429 + 18430 18178 18177 + 18177 18432 18430 + 18430 18432 18431 + 18431 18432 18433 + 18433 18434 18431 + 18435 18431 18434 + 18431 18435 18428 + 18432 18177 18436 + 18436 18433 18432 + 18433 18436 18191 + 18191 18208 18433 + 18433 18208 18213 + 18213 18434 18433 + 18437 18434 18213 + 18434 18437 18435 + 18182 18436 18177 + 18191 18436 18182 + 18213 18218 18437 + 18437 18218 18223 + 18223 18438 18437 + 18437 18438 18439 + 18439 18440 18437 + 18440 18435 18437 + 18428 18435 18440 + 18440 18441 18428 + 18428 18441 18424 + 18442 18438 18223 + 18438 18442 18443 + 18443 18439 18438 + 18439 18443 18444 + 18444 18445 18439 + 18439 18445 18446 + 18446 18440 18439 + 18441 18440 18446 + 18223 18228 18442 + 18442 18228 18447 + 18447 18448 18442 + 18442 18448 18449 + 18449 18443 18442 + 18444 18443 18449 + 18447 18228 18227 + 18450 18447 18227 + 18451 18447 18450 + 18448 18447 18451 + 18448 18451 18452 + 18452 18449 18448 + 18449 18452 18453 + 18453 18454 18449 + 18449 18454 18444 + 18227 18235 18450 + 18455 18450 18235 + 18450 18455 18456 + 18456 18457 18450 + 18450 18457 18451 + 18451 18457 18458 + 18458 18452 18451 + 18453 18452 18458 + 18235 18234 18455 + 18459 18455 18234 + 18456 18455 18459 + 18459 18460 18456 + 18456 18460 18461 + 18461 18462 18456 + 18462 18463 18456 + 18457 18456 18463 + 18463 18458 18457 + 18464 18459 18234 + 18465 18459 18464 + 18460 18459 18465 + 18460 18465 18466 + 18466 18461 18460 + 18467 18464 18234 + 18468 18464 18467 + 18469 18464 18468 + 18464 18469 18465 + 18465 18469 18470 + 18470 18466 18465 + 18471 18466 18470 + 18461 18466 18471 + 18234 18239 18467 + 18244 18467 18239 + 18467 18244 18472 + 18472 18473 18467 + 18467 18473 18468 + 18468 18473 18474 + 18474 18475 18468 + 18469 18468 18475 + 18475 18470 18469 + 18472 18244 18243 + 18243 18476 18472 + 18472 18476 18477 + 18477 18478 18472 + 18473 18472 18478 + 18478 18474 18473 + 18476 18243 18249 + 18476 18249 18479 + 18479 18477 18476 + 18477 18479 18480 + 18480 18481 18477 + 18477 18481 18482 + 18482 18478 18477 + 18474 18478 18482 + 18254 18479 18249 + 18480 18479 18254 + 18254 18483 18480 + 18480 18483 18484 + 18484 18485 18480 + 18481 18480 18485 + 18485 18486 18481 + 18481 18486 18487 + 18487 18482 18481 + 18488 18483 18254 + 18483 18488 18489 + 18489 18484 18483 + 18490 18484 18489 + 18484 18490 18491 + 18491 18485 18484 + 18485 18491 18492 + 18492 18486 18485 + 18254 18253 18488 + 18488 18253 18252 + 18252 18493 18488 + 18488 18493 18494 + 18494 18489 18488 + 18495 18489 18494 + 18489 18495 18490 + 18490 18495 18496 + 18496 18497 18490 + 18491 18490 18497 + 18258 18493 18252 + 18493 18258 18498 + 18498 18494 18493 + 18499 18494 18498 + 18494 18499 18495 + 18496 18495 18499 + 18499 18500 18496 + 18501 18496 18500 + 18496 18501 18502 + 18502 18497 18496 + 18498 18258 18262 + 18262 18503 18498 + 18504 18498 18503 + 18498 18504 18499 + 18499 18504 18505 + 18505 18500 18499 + 18506 18500 18505 + 18500 18506 18501 + 18507 18501 18506 + 18502 18501 18507 + 18266 18503 18262 + 18289 18503 18266 + 18503 18289 18504 + 18505 18504 18289 + 18289 18288 18505 + 18294 18505 18288 + 18505 18294 18506 + 18506 18294 18293 + 18293 18508 18506 + 18506 18508 18507 + 18311 18507 18508 + 18507 18311 18310 + 18310 18509 18507 + 18507 18509 18502 + 18510 18502 18509 + 18497 18502 18510 + 18301 18508 18293 + 18508 18301 18311 + 18509 18310 18316 + 18316 18511 18509 + 18509 18511 18510 + 18512 18510 18511 + 18513 18510 18512 + 18510 18513 18497 + 18497 18513 18491 + 18492 18491 18513 + 18511 18316 18320 + 18320 18514 18511 + 18511 18514 18512 + 18515 18512 18514 + 18516 18512 18515 + 18512 18516 18513 + 18513 18516 18492 + 18517 18492 18516 + 18486 18492 18517 + 18517 18487 18486 + 18514 18320 18325 + 18325 18518 18514 + 18514 18518 18515 + 18519 18515 18518 + 18520 18515 18519 + 18515 18520 18516 + 18516 18520 18517 + 18521 18517 18520 + 18487 18517 18521 + 18518 18325 18522 + 18522 18523 18518 + 18518 18523 18519 + 18524 18519 18523 + 18525 18519 18524 + 18519 18525 18520 + 18520 18525 18521 + 18522 18325 18324 + 18324 18337 18522 + 18526 18522 18337 + 18523 18522 18526 + 18526 18527 18523 + 18523 18527 18524 + 18528 18524 18527 + 18529 18524 18528 + 18524 18529 18525 + 18525 18529 18530 + 18530 18521 18525 + 18337 18531 18526 + 18532 18526 18531 + 18527 18526 18532 + 18532 18533 18527 + 18527 18533 18528 + 18534 18528 18533 + 18535 18528 18534 + 18528 18535 18529 + 18336 18531 18337 + 18531 18336 18335 + 18335 18536 18531 + 18531 18536 18532 + 18537 18532 18536 + 18533 18532 18537 + 18537 18538 18533 + 18533 18538 18534 + 18539 18534 18538 + 18540 18534 18539 + 18534 18540 18535 + 18536 18335 18342 + 18342 18541 18536 + 18536 18541 18537 + 18542 18537 18541 + 18538 18537 18542 + 18542 18543 18538 + 18538 18543 18539 + 18544 18539 18543 + 18545 18539 18544 + 18539 18545 18540 + 18541 18342 18546 + 18546 18547 18541 + 18541 18547 18542 + 18548 18542 18547 + 18543 18542 18548 + 18548 18549 18543 + 18543 18549 18544 + 18546 18342 18341 + 18341 18550 18546 + 18551 18546 18550 + 18547 18546 18551 + 18551 18552 18547 + 18547 18552 18548 + 18553 18548 18552 + 18549 18548 18553 + 18347 18550 18341 + 18550 18347 18554 + 18554 18555 18550 + 18550 18555 18551 + 18556 18551 18555 + 18552 18551 18556 + 18556 18557 18552 + 18552 18557 18553 + 18554 18347 18352 + 18352 18558 18554 + 18559 18554 18558 + 18555 18554 18559 + 18559 18560 18555 + 18555 18560 18556 + 18561 18556 18560 + 18557 18556 18561 + 18356 18558 18352 + 18562 18558 18356 + 18558 18562 18559 + 18563 18559 18562 + 18560 18559 18563 + 18563 18564 18560 + 18560 18564 18561 + 18565 18561 18564 + 18566 18561 18565 + 18561 18566 18557 + 18356 18365 18562 + 18562 18365 18370 + 18370 18567 18562 + 18562 18567 18563 + 18568 18563 18567 + 18564 18563 18568 + 18568 18569 18564 + 18564 18569 18565 + 18570 18565 18569 + 18571 18565 18570 + 18565 18571 18566 + 18381 18567 18370 + 18567 18381 18568 + 18386 18568 18381 + 18569 18568 18386 + 18386 18391 18569 + 18569 18391 18570 + 18572 18570 18391 + 18573 18570 18572 + 18570 18573 18571 + 18571 18573 18574 + 18574 18575 18571 + 18566 18571 18575 + 18575 18576 18566 + 18557 18566 18576 + 18391 18390 18572 + 18396 18572 18390 + 18577 18572 18396 + 18572 18577 18573 + 18573 18577 18578 + 18578 18574 18573 + 18579 18574 18578 + 18574 18579 18580 + 18580 18575 18574 + 18575 18580 18581 + 18581 18576 18575 + 18396 18400 18577 + 18577 18400 18582 + 18582 18578 18577 + 18583 18578 18582 + 18578 18583 18579 + 18579 18583 18584 + 18584 18585 18579 + 18580 18579 18585 + 18585 18586 18580 + 18581 18580 18586 + 18404 18582 18400 + 18587 18582 18404 + 18582 18587 18583 + 18583 18587 18588 + 18588 18584 18583 + 18589 18584 18588 + 18584 18589 18590 + 18590 18585 18584 + 18585 18590 18591 + 18591 18586 18585 + 18404 18408 18587 + 18587 18408 18592 + 18592 18588 18587 + 18593 18588 18592 + 18588 18593 18589 + 18589 18593 18594 + 18594 18595 18589 + 18590 18589 18595 + 18595 18596 18590 + 18591 18590 18596 + 18412 18592 18408 + 18597 18592 18412 + 18592 18597 18593 + 18593 18597 18598 + 18598 18594 18593 + 18599 18594 18598 + 18594 18599 18600 + 18600 18595 18594 + 18595 18600 18601 + 18601 18596 18595 + 18412 18416 18597 + 18597 18416 18602 + 18602 18598 18597 + 18603 18598 18602 + 18598 18603 18599 + 18599 18603 18445 + 18445 18444 18599 + 18600 18599 18444 + 18444 18454 18600 + 18601 18600 18454 + 18420 18602 18416 + 18604 18602 18420 + 18602 18604 18603 + 18603 18604 18446 + 18446 18445 18603 + 18420 18424 18604 + 18604 18424 18441 + 18441 18446 18604 + 18454 18453 18601 + 18605 18601 18453 + 18596 18601 18605 + 18605 18606 18596 + 18596 18606 18591 + 18607 18591 18606 + 18586 18591 18607 + 18453 18608 18605 + 18609 18605 18608 + 18606 18605 18609 + 18609 18610 18606 + 18606 18610 18607 + 18611 18607 18610 + 18612 18607 18611 + 18607 18612 18586 + 18586 18612 18581 + 18458 18608 18453 + 18613 18608 18458 + 18608 18613 18609 + 18614 18609 18613 + 18610 18609 18614 + 18614 18615 18610 + 18610 18615 18611 + 18616 18611 18615 + 18617 18611 18616 + 18611 18617 18612 + 18458 18463 18613 + 18613 18463 18462 + 18462 18618 18613 + 18613 18618 18614 + 18619 18614 18618 + 18615 18614 18619 + 18619 18620 18615 + 18615 18620 18616 + 18545 18616 18620 + 18544 18616 18545 + 18616 18544 18617 + 18618 18462 18621 + 18618 18621 18619 + 18622 18619 18621 + 18620 18619 18622 + 18622 18623 18620 + 18620 18623 18545 + 18540 18545 18623 + 18623 18624 18540 + 18535 18540 18624 + 18621 18462 18461 + 18461 18625 18621 + 18621 18625 18622 + 18626 18622 18625 + 18623 18622 18626 + 18626 18624 18623 + 18624 18626 18627 + 18627 18628 18624 + 18624 18628 18535 + 18529 18535 18628 + 18628 18530 18529 + 18471 18625 18461 + 18625 18471 18626 + 18627 18626 18471 + 18471 18629 18627 + 18630 18627 18629 + 18628 18627 18630 + 18630 18530 18628 + 18530 18630 18631 + 18631 18521 18530 + 18521 18631 18487 + 18470 18629 18471 + 18632 18629 18470 + 18629 18632 18630 + 18631 18630 18632 + 18632 18633 18631 + 18487 18631 18633 + 18633 18482 18487 + 18482 18633 18474 + 18474 18633 18632 + 18632 18475 18474 + 18470 18475 18632 + 18617 18544 18549 + 18549 18634 18617 + 18612 18617 18634 + 18634 18581 18612 + 18576 18581 18634 + 18634 18553 18576 + 18576 18553 18557 + 18553 18634 18549 + 18635 13255 13261 + 13255 18635 18636 + 18636 13256 13255 + 18637 13256 18636 + 13256 18637 13257 + 13261 18638 18635 + 18635 18638 18639 + 18639 18640 18635 + 18636 18635 18640 + 18638 13261 18641 + 18641 18642 18638 + 18638 18642 18643 + 18643 18639 18638 + 18644 18639 18643 + 18639 18644 18645 + 18645 18640 18639 + 13261 18646 18641 + 18647 18641 18646 + 18642 18641 18647 + 18647 18648 18642 + 18642 18648 18649 + 18649 18643 18642 + 18650 18643 18649 + 18643 18650 18644 + 13260 18646 13261 + 18646 13260 18651 + 18651 18652 18646 + 18646 18652 18647 + 18651 13260 13259 + 13259 18653 18651 + 18651 18653 18654 + 18654 18655 18651 + 18652 18651 18655 + 18655 18656 18652 + 18647 18652 18656 + 18657 18653 13259 + 18653 18657 18658 + 18658 18654 18653 + 18654 18658 18659 + 18659 18660 18654 + 18654 18660 18661 + 18661 18655 18654 + 18656 18655 18661 + 13259 13258 18657 + 18657 13258 18662 + 18662 13264 18657 + 13264 18658 18657 + 18659 18658 13264 + 13264 13263 18659 + 13263 18663 18659 + 18660 18659 18663 + 18663 18664 18660 + 18661 18660 18664 + 18664 18665 18661 + 18666 18661 18665 + 18661 18666 18656 + 18667 18663 13263 + 18664 18663 18667 + 18667 18668 18664 + 18664 18668 18669 + 18669 18665 18664 + 18670 18665 18669 + 18665 18670 18666 + 18671 18666 18670 + 18656 18666 18671 + 13263 13262 18667 + 18672 18667 13262 + 18668 18667 18672 + 18672 18673 18668 + 18668 18673 18674 + 18674 18669 18668 + 18675 18669 18674 + 18669 18675 18670 + 18676 18672 13262 + 18673 18672 18676 + 18676 18677 18673 + 18673 18677 18678 + 18678 18674 18673 + 18679 18674 18678 + 18674 18679 18675 + 18680 18675 18679 + 18670 18675 18680 + 13262 13242 18676 + 18681 18676 13242 + 18677 18676 18681 + 18681 18682 18677 + 18678 18677 18682 + 18682 18683 18678 + 18684 18678 18683 + 18678 18684 18679 + 13242 18685 18681 + 18686 18681 18685 + 18682 18681 18686 + 18686 18687 18682 + 18682 18687 18688 + 18688 18683 18682 + 18689 18683 18688 + 18683 18689 18684 + 13241 18685 13242 + 18685 13241 18690 + 18690 18691 18685 + 18685 18691 18686 + 18692 18686 18691 + 18687 18686 18692 + 18692 18693 18687 + 18687 18693 18694 + 18694 18688 18687 + 18690 13241 13240 + 13240 18695 18690 + 18696 18690 18695 + 18691 18690 18696 + 18696 18697 18691 + 18691 18697 18692 + 18698 18692 18697 + 18693 18692 18698 + 13252 18695 13240 + 18695 13252 18699 + 18699 18700 18695 + 18695 18700 18696 + 18701 18696 18700 + 18697 18696 18701 + 18701 18702 18697 + 18697 18702 18698 + 18699 13252 18703 + 18703 18704 18699 + 18705 18699 18704 + 18700 18699 18705 + 18705 18706 18700 + 18700 18706 18701 + 13251 18703 13252 + 18707 18703 13251 + 18703 18707 18708 + 18708 18704 18703 + 18704 18708 18709 + 18709 18710 18704 + 18704 18710 18705 + 18711 18705 18710 + 18706 18705 18711 + 13251 18712 18707 + 18707 18712 18713 + 18713 18714 18707 + 18708 18707 18714 + 18714 18715 18708 + 18709 18708 18715 + 18712 13251 13250 + 13250 13257 18712 + 18713 18712 13257 + 13257 18637 18713 + 18716 18713 18637 + 18713 18716 18717 + 18717 18714 18713 + 18714 18717 18718 + 18718 18715 18714 + 18715 18718 18719 + 18719 18720 18715 + 18715 18720 18709 + 18637 18721 18716 + 18722 18716 18721 + 18717 18716 18722 + 18722 18723 18717 + 18718 18717 18723 + 18723 18724 18718 + 18719 18718 18724 + 18636 18721 18637 + 18721 18636 18725 + 18725 18726 18721 + 18721 18726 18722 + 18727 18722 18726 + 18722 18727 18728 + 18728 18723 18722 + 18723 18728 18729 + 18729 18724 18723 + 18730 18725 18636 + 18731 18725 18730 + 18731 18726 18725 + 18726 18731 18727 + 18727 18731 18732 + 18732 18733 18727 + 18728 18727 18733 + 18733 18734 18728 + 18729 18728 18734 + 18640 18730 18636 + 18735 18730 18640 + 18732 18730 18735 + 18730 18732 18731 + 18640 18645 18735 + 18735 18645 18736 + 18736 18737 18735 + 18738 18735 18737 + 18735 18738 18732 + 18732 18738 18739 + 18739 18733 18732 + 18733 18739 18740 + 18740 18734 18733 + 18741 18736 18645 + 18742 18736 18741 + 18736 18742 18743 + 18743 18737 18736 + 18737 18743 18744 + 18744 18745 18737 + 18737 18745 18738 + 18739 18738 18745 + 18645 18644 18741 + 18741 18644 18650 + 18650 18746 18741 + 18746 18747 18741 + 18748 18741 18747 + 18741 18748 18742 + 18742 18748 18749 + 18749 18750 18742 + 18743 18742 18750 + 18751 18746 18650 + 18746 18751 18752 + 18746 18752 18747 + 18752 18753 18747 + 18753 18754 18747 + 18747 18754 18748 + 18748 18754 18749 + 18755 18749 18754 + 18750 18749 18755 + 18650 18649 18751 + 18756 18751 18649 + 18752 18751 18756 + 18756 18757 18752 + 18753 18752 18757 + 18755 18753 18757 + 18754 18753 18755 + 18758 18756 18649 + 18759 18756 18758 + 18756 18759 18757 + 18757 18759 18760 + 18760 18761 18757 + 18757 18761 18755 + 18762 18755 18761 + 18755 18762 18750 + 18649 18648 18758 + 18763 18758 18648 + 18758 18763 18764 + 18764 18765 18758 + 18758 18765 18759 + 18759 18765 18766 + 18766 18760 18759 + 18767 18760 18766 + 18767 18761 18760 + 18761 18767 18762 + 18648 18647 18763 + 18768 18763 18647 + 18764 18763 18768 + 18768 18769 18764 + 18764 18769 18770 + 18770 18771 18764 + 18765 18764 18771 + 18771 18766 18765 + 18772 18768 18647 + 18773 18768 18772 + 18768 18773 18769 + 18769 18773 18774 + 18774 18770 18769 + 18656 18772 18647 + 18671 18772 18656 + 18772 18671 18775 + 18772 18775 18773 + 18773 18775 18776 + 18776 18774 18773 + 18777 18774 18776 + 18770 18774 18777 + 18777 18778 18770 + 18770 18778 18779 + 18779 18771 18770 + 18766 18771 18779 + 18775 18671 18780 + 18780 18776 18775 + 18776 18780 18680 + 18776 18680 18777 + 18777 18680 18679 + 18781 18777 18679 + 18778 18777 18781 + 18781 18782 18778 + 18779 18778 18782 + 18670 18780 18671 + 18680 18780 18670 + 18782 18783 18779 + 18784 18783 18782 + 18783 18784 18785 + 18785 18786 18783 + 18783 18786 18787 + 18787 18779 18783 + 18779 18787 18766 + 18766 18787 18767 + 18782 18788 18784 + 18784 18788 18789 + 18790 18784 18789 + 18785 18784 18790 + 18782 18781 18788 + 18788 18781 18791 + 18791 18792 18788 + 18788 18792 18789 + 18679 18791 18781 + 18793 18791 18679 + 18791 18793 18792 + 18792 18793 18794 + 18794 18789 18792 + 18679 18684 18793 + 18793 18684 18689 + 18689 18794 18793 + 18795 18794 18689 + 18789 18794 18795 + 18795 18796 18789 + 18789 18796 18797 + 18797 18798 18789 + 18789 18798 18790 + 18689 18799 18795 + 18795 18799 18800 + 18800 18801 18795 + 18796 18795 18801 + 18801 18802 18796 + 18796 18802 18803 + 18803 18797 18796 + 18688 18799 18689 + 18799 18688 18694 + 18694 18800 18799 + 18800 18694 18804 + 18804 18805 18800 + 18800 18805 18806 + 18806 18801 18800 + 18802 18801 18806 + 18806 18807 18802 + 18802 18807 18808 + 18808 18803 18802 + 18804 18694 18693 + 18693 18809 18804 + 18810 18804 18809 + 18805 18804 18810 + 18810 18811 18805 + 18805 18811 18812 + 18812 18806 18805 + 18807 18806 18812 + 18698 18809 18693 + 18809 18698 18813 + 18813 18814 18809 + 18809 18814 18810 + 18815 18810 18814 + 18811 18810 18815 + 18815 18816 18811 + 18811 18816 18817 + 18817 18812 18811 + 18813 18698 18702 + 18702 18818 18813 + 18819 18813 18818 + 18814 18813 18819 + 18819 18820 18814 + 18814 18820 18815 + 18821 18815 18820 + 18816 18815 18821 + 18822 18818 18702 + 18818 18822 18823 + 18823 18824 18818 + 18818 18824 18819 + 18825 18819 18824 + 18820 18819 18825 + 18825 18826 18820 + 18820 18826 18821 + 18702 18701 18822 + 18827 18822 18701 + 18823 18822 18827 + 18827 18828 18823 + 18829 18823 18828 + 18824 18823 18829 + 18829 18830 18824 + 18824 18830 18825 + 18831 18825 18830 + 18826 18825 18831 + 18701 18706 18827 + 18711 18827 18706 + 18827 18711 18832 + 18832 18828 18827 + 18828 18832 18833 + 18833 18834 18828 + 18828 18834 18829 + 18835 18829 18834 + 18830 18829 18835 + 18835 18836 18830 + 18830 18836 18831 + 18832 18711 18837 + 18837 18838 18832 + 18833 18832 18838 + 18838 18839 18833 + 18840 18833 18839 + 18834 18833 18840 + 18840 18841 18834 + 18834 18841 18835 + 18710 18837 18711 + 18842 18837 18710 + 18837 18842 18843 + 18843 18838 18837 + 18838 18843 18844 + 18844 18839 18838 + 18839 18844 18845 + 18845 18846 18839 + 18839 18846 18840 + 18710 18709 18842 + 18842 18709 18720 + 18720 18847 18842 + 18843 18842 18847 + 18847 18848 18843 + 18844 18843 18848 + 18848 18849 18844 + 18845 18844 18849 + 18850 18847 18720 + 18847 18850 18851 + 18851 18848 18847 + 18848 18851 18852 + 18852 18849 18848 + 18849 18852 18853 + 18853 18854 18849 + 18849 18854 18845 + 18720 18719 18850 + 18850 18719 18855 + 18855 18856 18850 + 18851 18850 18856 + 18856 18857 18851 + 18851 18857 18858 + 18858 18852 18851 + 18853 18852 18858 + 18724 18855 18719 + 18859 18855 18724 + 18855 18859 18860 + 18860 18856 18855 + 18856 18860 18861 + 18861 18857 18856 + 18857 18861 18862 + 18862 18858 18857 + 18724 18729 18859 + 18863 18859 18729 + 18860 18859 18863 + 18863 18864 18860 + 18861 18860 18864 + 18864 18865 18861 + 18862 18861 18865 + 18865 18866 18862 + 18867 18862 18866 + 18858 18862 18867 + 18868 18863 18729 + 18869 18863 18868 + 18863 18869 18870 + 18870 18864 18863 + 18864 18870 18871 + 18871 18865 18864 + 18865 18871 18872 + 18872 18866 18865 + 18734 18868 18729 + 18873 18868 18734 + 18868 18873 18869 + 18869 18873 18874 + 18874 18875 18869 + 18870 18869 18875 + 18875 18876 18870 + 18871 18870 18876 + 18876 18877 18871 + 18872 18871 18877 + 18734 18740 18873 + 18873 18740 18878 + 18878 18874 18873 + 18879 18874 18878 + 18874 18879 18880 + 18880 18875 18874 + 18875 18880 18881 + 18881 18876 18875 + 18876 18881 18882 + 18882 18877 18876 + 18883 18878 18740 + 18884 18878 18883 + 18878 18884 18879 + 18879 18884 18885 + 18885 18886 18879 + 18880 18879 18886 + 18886 18887 18880 + 18881 18880 18887 + 18740 18739 18883 + 18745 18883 18739 + 18888 18883 18745 + 18883 18888 18884 + 18884 18888 18889 + 18889 18885 18884 + 18890 18885 18889 + 18885 18890 18891 + 18891 18886 18885 + 18886 18891 18892 + 18892 18887 18886 + 18745 18744 18888 + 18889 18888 18744 + 18744 18893 18889 + 18893 18894 18889 + 18895 18889 18894 + 18889 18895 18890 + 18890 18895 18896 + 18896 18897 18890 + 18891 18890 18897 + 18898 18893 18744 + 18893 18898 18899 + 18899 18900 18893 + 18893 18900 18901 + 18901 18894 18893 + 18901 18902 18894 + 18894 18902 18895 + 18896 18895 18902 + 18744 18743 18898 + 18750 18898 18743 + 18899 18898 18750 + 18750 18762 18899 + 18786 18899 18762 + 18900 18899 18786 + 18786 18785 18900 + 18901 18900 18785 + 18785 18903 18901 + 18902 18901 18903 + 18903 18904 18902 + 18902 18904 18896 + 18762 18767 18786 + 18767 18787 18786 + 18790 18903 18785 + 18903 18790 18904 + 18904 18790 18798 + 18798 18896 18904 + 18896 18798 18797 + 18797 18897 18896 + 18897 18797 18803 + 18803 18905 18897 + 18897 18905 18891 + 18892 18891 18905 + 18905 18906 18892 + 18907 18892 18906 + 18887 18892 18907 + 18905 18803 18808 + 18808 18906 18905 + 18906 18808 18908 + 18908 18909 18906 + 18906 18909 18907 + 18910 18907 18909 + 18911 18907 18910 + 18907 18911 18887 + 18887 18911 18881 + 18882 18881 18911 + 18908 18808 18807 + 18807 18912 18908 + 18913 18908 18912 + 18909 18908 18913 + 18913 18914 18909 + 18909 18914 18910 + 18915 18910 18914 + 18916 18910 18915 + 18910 18916 18911 + 18911 18916 18882 + 18812 18912 18807 + 18912 18812 18817 + 18817 18917 18912 + 18912 18917 18913 + 18918 18913 18917 + 18914 18913 18918 + 18918 18919 18914 + 18914 18919 18915 + 18920 18915 18919 + 18921 18915 18920 + 18915 18921 18916 + 18917 18817 18922 + 18922 18923 18917 + 18917 18923 18918 + 18924 18918 18923 + 18919 18918 18924 + 18924 18925 18919 + 18919 18925 18920 + 18922 18817 18816 + 18816 18926 18922 + 18927 18922 18926 + 18923 18922 18927 + 18927 18928 18923 + 18923 18928 18924 + 18924 18928 18929 + 18929 18930 18924 + 18930 18925 18924 + 18930 18920 18925 + 18821 18926 18816 + 18926 18821 18931 + 18931 18932 18926 + 18926 18932 18927 + 18933 18927 18932 + 18928 18927 18933 + 18933 18929 18928 + 18930 18929 18933 + 18934 18930 18933 + 18930 18934 18935 + 18935 18920 18930 + 18920 18935 18921 + 18931 18821 18826 + 18826 18936 18931 + 18937 18931 18936 + 18932 18931 18937 + 18937 18933 18932 + 18933 18937 18938 + 18938 18939 18933 + 18939 18940 18933 + 18940 18934 18933 + 18831 18936 18826 + 18936 18831 18941 + 18941 18937 18936 + 18937 18941 18938 + 18941 18831 18836 + 18942 18941 18836 + 18941 18942 18938 + 18836 18835 18942 + 18942 18835 18841 + 18942 18841 18840 + 18943 18942 18840 + 18942 18943 18938 + 18943 18944 18938 + 18938 18944 18854 + 18854 18853 18938 + 18938 18853 18945 + 18939 18938 18945 + 18943 18840 18846 + 18943 18846 18845 + 18944 18943 18845 + 18944 18845 18854 + 18858 18945 18853 + 18867 18945 18858 + 18945 18867 18939 + 18939 18867 18946 + 18939 18946 18947 + 18940 18939 18947 + 18940 18947 18948 + 18940 18948 18949 + 18934 18940 18949 + 18934 18949 18935 + 18866 18946 18867 + 18946 18866 18872 + 18947 18946 18872 + 18947 18872 18950 + 18950 18948 18947 + 18949 18948 18950 + 18950 18951 18949 + 18949 18951 18921 + 18921 18935 18949 + 18877 18950 18872 + 18951 18950 18877 + 18877 18882 18951 + 18951 18882 18916 + 18916 18921 18951 + 18952 11771 11639 + 11771 18952 11772 + 11772 18952 18953 + 18953 18954 11772 + 11773 11772 18954 + 11639 18955 18952 + 18952 18955 18956 + 18956 18953 18952 + 18957 18953 18956 + 18953 18957 18958 + 18958 18954 18953 + 18959 18954 18958 + 18954 18959 11773 + 11764 11773 18959 + 18955 11639 11638 + 11638 11648 18955 + 18956 18955 11648 + 11648 11653 18956 + 18960 18956 11653 + 18956 18960 18957 + 18957 18960 18961 + 18961 18962 18957 + 18958 18957 18962 + 18962 18963 18958 + 18964 18958 18963 + 18958 18964 18959 + 11653 18965 18960 + 18960 18965 18966 + 18966 18961 18960 + 18967 18961 18966 + 18961 18967 18962 + 18962 18967 18968 + 18968 18963 18962 + 18969 18963 18968 + 18963 18969 18964 + 11652 18965 11653 + 18965 11652 18970 + 18970 18971 18965 + 18965 18971 18966 + 18972 18966 18971 + 18966 18972 18973 + 18973 18974 18966 + 18966 18974 18967 + 18968 18967 18974 + 11658 18970 11652 + 18975 18970 11658 + 18971 18970 18975 + 18975 18976 18971 + 18971 18976 18972 + 18977 18972 18976 + 18973 18972 18977 + 18977 18978 18973 + 18979 18973 18978 + 18974 18973 18979 + 11658 18980 18975 + 18975 18980 18981 + 18982 18975 18981 + 18976 18975 18982 + 18982 18983 18976 + 18976 18983 18984 + 18984 18977 18976 + 18980 11658 11663 + 11663 18985 18980 + 18980 18985 18986 + 18986 18981 18980 + 18987 18981 18986 + 18981 18987 18988 + 18988 18989 18981 + 18981 18989 18982 + 18985 11663 18990 + 18990 18991 18985 + 18986 18985 18991 + 18991 18992 18986 + 18987 18986 18992 + 18992 18993 18987 + 18987 18993 18994 + 18994 18988 18987 + 11667 18990 11663 + 11672 18990 11667 + 18990 11672 18995 + 18995 18991 18990 + 18991 18995 18996 + 18996 18992 18991 + 18992 18996 18997 + 18997 18993 18992 + 18993 18997 18998 + 18998 18994 18993 + 18995 11672 11677 + 11677 18999 18995 + 18996 18995 18999 + 18999 19000 18996 + 18997 18996 19000 + 19000 19001 18997 + 18998 18997 19001 + 19001 19002 18998 + 19003 18998 19002 + 18994 18998 19003 + 19004 18999 11677 + 18999 19004 19005 + 19005 19000 18999 + 19000 19005 19006 + 19006 19001 19000 + 19001 19006 19007 + 19007 19002 19001 + 11677 11676 19004 + 19004 11676 11682 + 11682 19008 19004 + 19005 19004 19008 + 19008 19009 19005 + 19006 19005 19009 + 19009 19010 19006 + 19007 19006 19010 + 19010 19011 19007 + 19012 19007 19011 + 19002 19007 19012 + 19013 19008 11682 + 19008 19013 19014 + 19014 19009 19008 + 19009 19014 19015 + 19015 19010 19009 + 19010 19015 19016 + 19016 19011 19010 + 11682 11681 19013 + 19013 11681 11687 + 11687 19017 19013 + 19014 19013 19017 + 19017 19018 19014 + 19015 19014 19018 + 19018 19019 19015 + 19016 19015 19019 + 19019 19020 19016 + 19021 19016 19020 + 19011 19016 19021 + 19022 19017 11687 + 19017 19022 19023 + 19023 19018 19017 + 19018 19023 19024 + 19024 19019 19018 + 19019 19024 19025 + 19025 19020 19019 + 11687 11686 19022 + 19022 11686 19026 + 19026 19027 19022 + 19023 19022 19027 + 19027 19028 19023 + 19024 19023 19028 + 19028 19029 19024 + 19025 19024 19029 + 11691 19026 11686 + 19030 19026 11691 + 19026 19030 19031 + 19031 19027 19026 + 19027 19031 19032 + 19032 19028 19027 + 19028 19032 19033 + 19033 19029 19028 + 11691 11696 19030 + 19030 11696 19034 + 19034 19035 19030 + 19031 19030 19035 + 19035 19036 19031 + 19032 19031 19036 + 19036 19037 19032 + 19033 19032 19037 + 19038 19034 11696 + 19039 19034 19038 + 19034 19039 19040 + 19040 19035 19034 + 19035 19040 19041 + 19041 19036 19035 + 19036 19041 19042 + 19042 19037 19036 + 11696 11695 19038 + 11701 19038 11695 + 19043 19038 11701 + 19038 19043 19039 + 19039 19043 19044 + 19044 19045 19039 + 19040 19039 19045 + 19045 19046 19040 + 19041 19040 19046 + 19046 19047 19041 + 19042 19041 19047 + 11701 19048 19043 + 19043 19048 19049 + 19049 19044 19043 + 19050 19044 19049 + 19044 19050 19051 + 19051 19045 19044 + 19045 19051 19052 + 19052 19046 19045 + 19048 11701 11700 + 11700 19053 19048 + 19048 19053 19054 + 19054 19049 19048 + 19055 19049 19054 + 19049 19055 19050 + 19050 19055 19056 + 19056 19057 19050 + 19051 19050 19057 + 19053 11700 11699 + 11699 19058 19053 + 19053 19058 19059 + 19059 19054 19053 + 19060 19054 19059 + 19054 19060 19055 + 19055 19060 19061 + 19061 19056 19055 + 19058 11699 11706 + 11706 19062 19058 + 19058 19062 19063 + 19063 19059 19058 + 19064 19059 19063 + 19059 19064 19060 + 19061 19060 19064 + 19064 19065 19061 + 19066 19061 19065 + 19056 19061 19066 + 19062 11706 19067 + 19067 19068 19062 + 19063 19062 19068 + 19069 19067 11706 + 19070 19067 19069 + 19068 19067 19070 + 19068 19070 19071 + 19071 19072 19068 + 19068 19072 19063 + 19073 19069 11706 + 11719 19069 19073 + 11723 19069 11719 + 19069 11723 19070 + 11706 11705 19073 + 11704 19073 11705 + 11711 19073 11704 + 19073 11711 11719 + 19070 11723 11722 + 11722 19074 19070 + 19074 19075 19070 + 19075 19076 19070 + 19076 19071 19070 + 19077 19071 19076 + 19071 19077 19072 + 11728 19074 11722 + 11728 19078 19074 + 19074 19078 19079 + 19079 19075 19074 + 19080 19075 19079 + 19075 19080 19081 + 19081 19076 19075 + 19082 19076 19081 + 19076 19082 19077 + 19078 11728 11727 + 11727 19083 19078 + 19079 19078 19083 + 19083 19084 19079 + 19080 19079 19084 + 19084 19085 19080 + 19080 19085 19086 + 19086 19081 19080 + 19082 19081 19086 + 11727 11733 19083 + 19083 11733 19087 + 19087 19084 19083 + 19084 19087 19088 + 19088 19085 19084 + 19085 19088 19089 + 19089 19086 19085 + 19086 19089 19090 + 19090 19091 19086 + 19086 19091 19082 + 19087 11733 11732 + 11732 19092 19087 + 19092 19093 19087 + 19088 19087 19093 + 19093 19094 19088 + 19088 19094 19095 + 19095 19089 19088 + 19090 19089 19095 + 11738 19092 11732 + 11738 19096 19092 + 19092 19096 19097 + 19097 19093 19092 + 19094 19093 19097 + 19097 19098 19094 + 19094 19098 19099 + 19099 19095 19094 + 19100 19095 19099 + 19095 19100 19090 + 19096 11738 19101 + 19101 19102 19096 + 19097 19096 19102 + 19102 19103 19097 + 19103 19104 19097 + 19098 19097 19104 + 11737 19101 11738 + 19105 19101 11737 + 19101 19105 19102 + 19102 19105 19106 + 19106 19103 19102 + 19103 19106 19107 + 19103 19107 19108 + 19108 19104 19103 + 19109 19104 19108 + 19104 19109 19098 + 11737 19110 19105 + 19105 19110 19111 + 19106 19105 19111 + 19111 19112 19106 + 19107 19106 19112 + 19112 19113 19107 + 19108 19107 19113 + 11737 19114 19110 + 19110 19114 19115 + 19115 19111 19110 + 19111 19115 19116 + 19111 19116 19117 + 19117 19112 19111 + 19112 19117 19113 + 19114 11737 11742 + 11742 19118 19114 + 19114 19118 19119 + 19119 19115 19114 + 19116 19115 19119 + 19119 19120 19116 + 19117 19116 19120 + 19121 19117 19120 + 19113 19117 19121 + 19121 19122 19113 + 19113 19122 19108 + 11741 19118 11742 + 19118 11741 19123 + 19123 19119 19118 + 19120 19119 19123 + 19123 11741 11740 + 11740 19124 19123 + 19125 19123 19124 + 19123 19125 19120 + 19126 19124 11740 + 19127 19124 19126 + 19124 19127 19125 + 19125 19127 19128 + 19128 19129 19125 + 19120 19125 19129 + 11740 11745 19126 + 19130 19126 11745 + 19131 19126 19130 + 19126 19131 19127 + 19127 19131 19132 + 19132 19128 19127 + 19133 19128 19132 + 19128 19133 19134 + 19134 19129 19128 + 11745 11749 19130 + 19135 19130 11749 + 19136 19130 19135 + 19130 19136 19131 + 19131 19136 19066 + 19066 19132 19131 + 19065 19132 19066 + 19132 19065 19133 + 11749 11754 19135 + 19137 19135 11754 + 19138 19135 19137 + 19135 19138 19136 + 19136 19138 19139 + 19139 19066 19136 + 19066 19139 19056 + 19056 19139 19140 + 19140 19057 19056 + 11754 19141 19137 + 19142 19137 19141 + 19143 19137 19142 + 19137 19143 19138 + 19139 19138 19143 + 19143 19140 19139 + 19144 19140 19143 + 19140 19144 19145 + 19145 19057 19140 + 19057 19145 19051 + 11753 19141 11754 + 19141 11753 19146 + 19146 19147 19141 + 19141 19147 19142 + 19148 19142 19147 + 19149 19142 19148 + 19142 19149 19143 + 19143 19149 19144 + 19150 19144 19149 + 19145 19144 19150 + 19146 11753 11759 + 11759 19151 19146 + 19152 19146 19151 + 19147 19146 19152 + 19152 19153 19147 + 19147 19153 19148 + 19154 19148 19153 + 19155 19148 19154 + 19148 19155 19149 + 19149 19155 19150 + 19156 19151 11759 + 19151 19156 19157 + 19157 19158 19151 + 19151 19158 19152 + 19159 19152 19158 + 19153 19152 19159 + 19159 19160 19153 + 19153 19160 19154 + 11759 11758 19156 + 19156 11758 19161 + 19161 19162 19156 + 19156 19162 19163 + 19163 19157 19156 + 19164 19157 19163 + 19158 19157 19164 + 19164 19165 19158 + 19158 19165 19159 + 11757 19161 11758 + 19166 19161 11757 + 19162 19161 19166 + 19166 19167 19162 + 19162 19167 19168 + 19168 19169 19162 + 19162 19169 19163 + 11757 11764 19166 + 18959 19166 11764 + 19167 19166 18959 + 18959 18964 19167 + 19168 19167 18964 + 18964 18969 19168 + 19170 19168 18969 + 19170 19169 19168 + 19169 19170 19171 + 19171 19163 19169 + 19172 19163 19171 + 19163 19172 19164 + 19173 19164 19172 + 19165 19164 19173 + 18969 19174 19170 + 19171 19170 19174 + 19174 19175 19171 + 19176 19171 19175 + 19171 19176 19172 + 19172 19176 19177 + 19177 19178 19172 + 19172 19178 19173 + 18968 19174 18969 + 19174 18968 19179 + 19179 19175 19174 + 19175 19179 18979 + 18979 19180 19175 + 19175 19180 19176 + 19176 19180 19181 + 19181 19177 19176 + 18974 19179 18968 + 18979 19179 18974 + 19133 19065 19064 + 19064 19182 19133 + 19133 19182 19183 + 19183 19184 19133 + 19184 19185 19133 + 19185 19134 19133 + 19063 19182 19064 + 19182 19063 19186 + 19186 19183 19182 + 19183 19186 19187 + 19187 19188 19183 + 19183 19188 19189 + 19189 19184 19183 + 19190 19186 19063 + 19187 19186 19190 + 19190 19191 19187 + 19187 19191 19192 + 19192 19193 19187 + 19188 19187 19193 + 19072 19190 19063 + 19194 19190 19072 + 19191 19190 19194 + 19191 19194 19195 + 19195 19192 19191 + 19192 19195 19196 + 19192 19196 19197 + 19197 19193 19192 + 19198 19193 19197 + 19193 19198 19188 + 19072 19077 19194 + 19194 19077 19082 + 19082 19091 19194 + 19091 19195 19194 + 19196 19195 19091 + 19091 19090 19196 + 19196 19090 19100 + 19100 19197 19196 + 19199 19197 19100 + 19197 19199 19198 + 19198 19199 19200 + 19200 19201 19198 + 19188 19198 19201 + 19201 19189 19188 + 19202 19189 19201 + 19202 19184 19189 + 19100 19203 19199 + 19200 19199 19203 + 19203 19204 19200 + 19204 19205 19200 + 19206 19200 19205 + 19206 19201 19200 + 19201 19206 19202 + 19099 19203 19100 + 19203 19099 19207 + 19207 19204 19203 + 19204 19207 19208 + 19208 19209 19204 + 19204 19209 19210 + 19210 19205 19204 + 19211 19205 19210 + 19205 19211 19206 + 19207 19099 19098 + 19098 19109 19207 + 19208 19207 19109 + 19109 19212 19208 + 19208 19212 19213 + 19213 19214 19208 + 19209 19208 19214 + 19214 19215 19209 + 19210 19209 19215 + 19215 19216 19210 + 19211 19210 19216 + 19108 19212 19109 + 19212 19108 19122 + 19122 19213 19212 + 19121 19213 19122 + 19213 19121 19217 + 19217 19214 19213 + 19214 19217 19215 + 19215 19217 19218 + 19218 19216 19215 + 19219 19216 19218 + 19216 19219 19211 + 19206 19211 19219 + 19202 19206 19219 + 19219 19220 19202 + 19184 19202 19220 + 19217 19121 19120 + 19218 19217 19120 + 19221 19218 19120 + 19219 19218 19221 + 19221 19220 19219 + 19220 19221 19185 + 19220 19185 19184 + 19120 19222 19221 + 19185 19221 19222 + 19222 19134 19185 + 19222 19129 19134 + 19129 19222 19120 + 19223 19177 19181 + 19177 19223 19224 + 19224 19178 19177 + 19178 19224 19225 + 19225 19173 19178 + 19181 19226 19223 + 19223 19226 19227 + 19227 19228 19223 + 19224 19223 19228 + 19229 19226 19181 + 19226 19229 19230 + 19230 19227 19226 + 19227 19230 19231 + 19231 19232 19227 + 19227 19232 19233 + 19233 19228 19227 + 19181 19234 19229 + 19229 19234 18978 + 18978 19235 19229 + 19229 19235 19236 + 19236 19230 19229 + 19231 19230 19236 + 19234 19181 19180 + 19180 18979 19234 + 18978 19234 18979 + 18977 19235 18978 + 19235 18977 18984 + 18984 19236 19235 + 18984 19237 19236 + 19236 19237 19231 + 19238 19231 19237 + 19232 19231 19238 + 19238 19239 19232 + 19232 19239 19240 + 19240 19233 19232 + 19241 19233 19240 + 19233 19241 19228 + 19228 19241 19224 + 19237 18984 19242 + 19242 19243 19237 + 19237 19243 19238 + 19244 19238 19243 + 19239 19238 19244 + 19244 19245 19239 + 19239 19245 19246 + 19246 19240 19239 + 18983 19242 18984 + 19247 19242 18983 + 19243 19242 19247 + 19247 19248 19243 + 19243 19248 19244 + 19249 19244 19248 + 19245 19244 19249 + 19249 19250 19245 + 19245 19250 19251 + 19251 19246 19245 + 18983 19252 19247 + 19247 19252 19253 + 19253 19254 19247 + 19254 19255 19247 + 19248 19247 19255 + 19255 19256 19248 + 19248 19256 19249 + 19257 19252 18983 + 19252 19257 19258 + 19258 19253 19252 + 19253 19258 19259 + 19259 19260 19253 + 19253 19260 19261 + 19261 19254 19253 + 18983 18982 19257 + 19257 18982 18989 + 18989 19262 19257 + 19258 19257 19262 + 19262 19263 19258 + 19259 19258 19263 + 19263 19264 19259 + 19259 19264 19265 + 19265 19266 19259 + 19260 19259 19266 + 19267 19262 18989 + 19262 19267 19268 + 19268 19263 19262 + 19264 19263 19268 + 19268 19269 19264 + 19264 19269 19270 + 19270 19271 19264 + 19264 19271 19265 + 18989 18988 19267 + 19267 18988 18994 + 18994 19272 19267 + 19267 19272 19273 + 19273 19268 19267 + 19269 19268 19273 + 19273 19274 19269 + 19270 19269 19274 + 19274 19275 19270 + 19276 19270 19275 + 19276 19271 19270 + 19003 19272 18994 + 19272 19003 19277 + 19277 19273 19272 + 19273 19277 19278 + 19278 19274 19273 + 19274 19278 19279 + 19279 19275 19274 + 19275 19279 19280 + 19280 19281 19275 + 19275 19281 19276 + 19277 19003 19282 + 19282 19283 19277 + 19278 19277 19283 + 19283 19284 19278 + 19279 19278 19284 + 19284 19285 19279 + 19280 19279 19285 + 19002 19282 19003 + 19012 19282 19002 + 19282 19012 19286 + 19286 19283 19282 + 19283 19286 19287 + 19287 19284 19283 + 19284 19287 19288 + 19288 19285 19284 + 19285 19288 19289 + 19289 19290 19285 + 19285 19290 19280 + 19286 19012 19291 + 19291 19292 19286 + 19287 19286 19292 + 19292 19293 19287 + 19288 19287 19293 + 19293 19294 19288 + 19289 19288 19294 + 19011 19291 19012 + 19021 19291 19011 + 19291 19021 19295 + 19295 19292 19291 + 19292 19295 19296 + 19296 19293 19292 + 19293 19296 19297 + 19297 19294 19293 + 19294 19297 19298 + 19298 19299 19294 + 19294 19299 19289 + 19295 19021 19300 + 19300 19301 19295 + 19296 19295 19301 + 19301 19302 19296 + 19297 19296 19302 + 19302 19303 19297 + 19298 19297 19303 + 19020 19300 19021 + 19304 19300 19020 + 19300 19304 19305 + 19305 19301 19300 + 19301 19305 19306 + 19306 19302 19301 + 19302 19306 19307 + 19307 19303 19302 + 19020 19025 19304 + 19304 19025 19308 + 19308 19309 19304 + 19305 19304 19309 + 19309 19310 19305 + 19306 19305 19310 + 19310 19311 19306 + 19307 19306 19311 + 19029 19308 19025 + 19312 19308 19029 + 19308 19312 19313 + 19313 19309 19308 + 19309 19313 19314 + 19314 19310 19309 + 19310 19314 19315 + 19315 19311 19310 + 19029 19033 19312 + 19312 19033 19316 + 19316 19317 19312 + 19313 19312 19317 + 19317 19318 19313 + 19314 19313 19318 + 19318 19319 19314 + 19315 19314 19319 + 19037 19316 19033 + 19320 19316 19037 + 19316 19320 19321 + 19321 19317 19316 + 19317 19321 19322 + 19322 19318 19317 + 19318 19322 19323 + 19323 19319 19318 + 19037 19042 19320 + 19320 19042 19324 + 19324 19325 19320 + 19321 19320 19325 + 19325 19326 19321 + 19322 19321 19326 + 19326 19327 19322 + 19323 19322 19327 + 19047 19324 19042 + 19328 19324 19047 + 19324 19328 19329 + 19329 19325 19324 + 19325 19329 19330 + 19330 19326 19325 + 19326 19330 19331 + 19331 19327 19326 + 19047 19332 19328 + 19333 19328 19332 + 19329 19328 19333 + 19333 19334 19329 + 19329 19334 19335 + 19335 19330 19329 + 19331 19330 19335 + 19332 19047 19046 + 19046 19052 19332 + 19332 19052 19336 + 19336 19337 19332 + 19332 19337 19333 + 19338 19333 19337 + 19334 19333 19338 + 19338 19339 19334 + 19334 19339 19340 + 19340 19335 19334 + 19336 19052 19051 + 19051 19145 19336 + 19150 19336 19145 + 19337 19336 19150 + 19150 19341 19337 + 19337 19341 19338 + 19338 19341 19342 + 19342 19343 19338 + 19339 19338 19343 + 19343 19344 19339 + 19340 19339 19344 + 19341 19150 19155 + 19155 19342 19341 + 19154 19342 19155 + 19342 19154 19345 + 19345 19343 19342 + 19343 19345 19346 + 19346 19344 19343 + 19344 19346 19347 + 19347 19348 19344 + 19344 19348 19340 + 19345 19154 19160 + 19160 19349 19345 + 19346 19345 19349 + 19349 19350 19346 + 19347 19346 19350 + 19350 19351 19347 + 19352 19347 19351 + 19348 19347 19352 + 19353 19349 19160 + 19349 19353 19354 + 19354 19350 19349 + 19350 19354 19355 + 19355 19351 19350 + 19351 19355 19356 + 19356 19357 19351 + 19351 19357 19352 + 19160 19159 19353 + 19353 19159 19165 + 19165 19358 19353 + 19354 19353 19358 + 19358 19359 19354 + 19355 19354 19359 + 19359 19360 19355 + 19356 19355 19360 + 19360 19361 19356 + 19362 19356 19361 + 19357 19356 19362 + 19173 19358 19165 + 19358 19173 19225 + 19225 19359 19358 + 19359 19225 19363 + 19363 19360 19359 + 19360 19363 19364 + 19364 19361 19360 + 19361 19364 19365 + 19365 19366 19361 + 19361 19366 19362 + 19363 19225 19224 + 19367 19363 19224 + 19364 19363 19367 + 19367 19368 19364 + 19364 19368 19369 + 19369 19365 19364 + 19370 19365 19369 + 19366 19365 19370 + 19224 19241 19367 + 19240 19367 19241 + 19368 19367 19240 + 19240 19246 19368 + 19368 19246 19251 + 19251 19369 19368 + 19371 19369 19251 + 19369 19371 19370 + 19370 19371 8716 + 8716 19372 19370 + 19373 19370 19372 + 19370 19373 19366 + 19366 19373 19374 + 19374 19362 19366 + 19251 19375 19371 + 19371 19375 8710 + 8710 8716 19371 + 19375 19251 19250 + 19250 8711 19375 + 8710 19375 8711 + 19376 8711 19250 + 8711 19376 8712 + 19377 8712 19376 + 8705 8712 19377 + 19377 8706 8705 + 19250 19249 19376 + 19376 19249 19256 + 19256 19378 19376 + 19376 19378 19377 + 19378 19379 19377 + 19380 19377 19379 + 8706 19377 19380 + 19255 19378 19256 + 19378 19255 19254 + 19254 19379 19378 + 19379 19254 19261 + 19379 19261 19380 + 19380 19261 19260 + 19260 19381 19380 + 19381 19382 19380 + 19383 19380 19382 + 19380 19383 8706 + 8706 19383 19384 + 19384 19385 8706 + 8706 19385 8707 + 19266 19381 19260 + 19381 19266 19386 + 19386 10972 19381 + 19381 10972 19387 + 19387 19382 19381 + 19382 19387 19388 + 19388 19389 19382 + 19382 19389 19383 + 19386 19266 19265 + 19265 19390 19386 + 10968 19386 19390 + 10972 19386 10968 + 19390 19265 19391 + 19391 19392 19390 + 19390 19392 19393 + 19393 10970 19390 + 19390 10970 10969 + 10969 10968 19390 + 19391 19265 19271 + 19271 19276 19391 + 19391 19276 19281 + 19281 19394 19391 + 19392 19391 19394 + 19394 19395 19392 + 19392 19395 10965 + 10965 19393 19392 + 10964 19393 10965 + 10964 10970 19393 + 19396 19394 19281 + 19394 19396 19397 + 19397 19395 19394 + 19395 19397 19398 + 19398 10965 19395 + 10965 19398 10960 + 10960 19398 19399 + 19399 10956 10960 + 19281 19280 19396 + 19396 19280 19290 + 19290 19400 19396 + 19397 19396 19400 + 19400 19401 19397 + 19398 19397 19401 + 19401 19399 19398 + 19402 19399 19401 + 19399 19402 19403 + 19403 10956 19399 + 10956 19403 10952 + 19404 19400 19290 + 19400 19404 19405 + 19405 19401 19400 + 19401 19405 19402 + 19402 19405 19406 + 19406 19407 19402 + 19403 19402 19407 + 19407 19408 19403 + 10952 19403 19408 + 19408 10947 10952 + 19290 19289 19404 + 19404 19289 19299 + 19299 19409 19404 + 19405 19404 19409 + 19409 19406 19405 + 19410 19406 19409 + 19406 19410 19411 + 19411 19407 19406 + 19407 19411 19412 + 19412 19408 19407 + 19408 19412 19413 + 19413 10947 19408 + 10947 19413 10948 + 19414 19409 19299 + 19409 19414 19410 + 19410 19414 19415 + 19415 19416 19410 + 19411 19410 19416 + 19416 19417 19411 + 19412 19411 19417 + 19417 19418 19412 + 19413 19412 19418 + 19299 19298 19414 + 19414 19298 19419 + 19419 19415 19414 + 19420 19415 19419 + 19415 19420 19421 + 19421 19416 19415 + 19416 19421 19422 + 19422 19417 19416 + 19417 19422 19423 + 19423 19418 19417 + 19303 19419 19298 + 19424 19419 19303 + 19419 19424 19420 + 19420 19424 19425 + 19425 19426 19420 + 19421 19420 19426 + 19426 19427 19421 + 19422 19421 19427 + 19427 19428 19422 + 19423 19422 19428 + 19303 19307 19424 + 19424 19307 19429 + 19429 19425 19424 + 19430 19425 19429 + 19425 19430 19431 + 19431 19426 19425 + 19426 19431 19432 + 19432 19427 19426 + 19427 19432 19433 + 19433 19428 19427 + 19311 19429 19307 + 19434 19429 19311 + 19429 19434 19430 + 19430 19434 19435 + 19435 19436 19430 + 19431 19430 19436 + 19436 19437 19431 + 19432 19431 19437 + 19437 19438 19432 + 19433 19432 19438 + 19311 19315 19434 + 19434 19315 19439 + 19439 19435 19434 + 19440 19435 19439 + 19435 19440 19441 + 19441 19436 19435 + 19436 19441 19442 + 19442 19437 19436 + 19437 19442 19443 + 19443 19438 19437 + 19319 19439 19315 + 19444 19439 19319 + 19439 19444 19440 + 19440 19444 19445 + 19445 19446 19440 + 19441 19440 19446 + 19446 19447 19441 + 19442 19441 19447 + 19447 19448 19442 + 19443 19442 19448 + 19319 19323 19444 + 19444 19323 19449 + 19449 19445 19444 + 19450 19445 19449 + 19445 19450 19451 + 19451 19446 19445 + 19446 19451 19452 + 19452 19447 19446 + 19447 19452 19453 + 19453 19448 19447 + 19327 19449 19323 + 19454 19449 19327 + 19449 19454 19450 + 19450 19454 19455 + 19455 19456 19450 + 19450 19456 19457 + 19457 19451 19450 + 19452 19451 19457 + 19327 19331 19454 + 19455 19454 19331 + 19331 19458 19455 + 19459 19455 19458 + 19456 19455 19459 + 19459 19460 19456 + 19456 19460 19461 + 19461 19457 19456 + 19462 19457 19461 + 19457 19462 19452 + 19335 19458 19331 + 19458 19335 19340 + 19340 19463 19458 + 19458 19463 19459 + 19459 19463 19464 + 19464 19465 19459 + 19460 19459 19465 + 19465 19466 19460 + 19461 19460 19466 + 19463 19340 19348 + 19348 19464 19463 + 19352 19464 19348 + 19464 19352 19467 + 19467 19465 19464 + 19465 19467 19468 + 19468 19466 19465 + 19466 19468 19469 + 19469 19470 19466 + 19466 19470 19461 + 19471 19461 19470 + 19461 19471 19462 + 19467 19352 19357 + 19357 19472 19467 + 19468 19467 19472 + 19472 19473 19468 + 19469 19468 19473 + 19473 19474 19469 + 19475 19469 19474 + 19470 19469 19475 + 19475 19476 19470 + 19470 19476 19471 + 19362 19472 19357 + 19472 19362 19374 + 19374 19473 19472 + 19473 19374 19477 + 19477 19474 19473 + 19474 19477 19478 + 19478 19479 19474 + 19474 19479 19475 + 19480 19475 19479 + 19476 19475 19480 + 19477 19374 19373 + 19373 19481 19477 + 19478 19477 19481 + 19481 19482 19478 + 19483 19478 19482 + 19479 19478 19483 + 19483 19484 19479 + 19479 19484 19480 + 19372 19481 19373 + 19481 19372 8715 + 8715 19482 19481 + 19482 8715 8719 + 8719 19485 19482 + 19482 19485 19483 + 19486 19483 19485 + 19484 19483 19486 + 8715 19372 8716 + 19485 8719 8718 + 8718 19487 19485 + 19485 19487 19486 + 19488 19486 19487 + 19489 19486 19488 + 19486 19489 19484 + 19484 19489 19490 + 19490 19480 19484 + 19491 19480 19490 + 19480 19491 19476 + 19487 8718 8723 + 8723 19492 19487 + 19487 19492 19488 + 19493 19488 19492 + 19494 19488 19493 + 19488 19494 19489 + 19489 19494 19495 + 19495 19490 19489 + 19496 19490 19495 + 19490 19496 19491 + 19492 8723 8722 + 8722 19497 19492 + 19492 19497 19493 + 19498 19493 19497 + 19499 19493 19498 + 19493 19499 19494 + 19494 19499 19500 + 19500 19495 19494 + 19501 19495 19500 + 19495 19501 19496 + 19497 8722 19502 + 19502 19503 19497 + 19497 19503 19498 + 9789 19498 19503 + 19504 19498 9789 + 19498 19504 19499 + 19499 19504 19505 + 19505 19500 19499 + 19502 8722 8721 + 8721 19506 19502 + 19507 19502 19506 + 19503 19502 19507 + 19507 9784 19503 + 19503 9784 9789 + 8729 19506 8721 + 19506 8729 19508 + 19506 19508 19507 + 9780 19507 19508 + 9784 19507 9780 + 19508 8729 8728 + 8728 19509 19508 + 19508 19509 9776 + 9776 9780 19508 + 8736 19509 8728 + 19509 8736 8741 + 8741 9776 19509 + 9789 9788 19504 + 19504 9788 19510 + 19510 19505 19504 + 19511 19505 19510 + 19505 19511 19512 + 19512 19500 19505 + 19500 19512 19501 + 19501 19512 19513 + 19513 19514 19501 + 19496 19501 19514 + 9793 19510 9788 + 19515 19510 9793 + 19510 19515 19511 + 19511 19515 19516 + 19516 19517 19511 + 19512 19511 19517 + 19517 19513 19512 + 19518 19513 19517 + 19514 19513 19518 + 9793 9797 19515 + 19516 19515 9797 + 9797 9805 19516 + 19519 19516 9805 + 19517 19516 19519 + 19519 19520 19517 + 19517 19520 19518 + 19521 19518 19520 + 19522 19518 19521 + 19518 19522 19514 + 9805 19523 19519 + 19519 19523 19524 + 19524 19525 19519 + 19520 19519 19525 + 19525 19526 19520 + 19520 19526 19521 + 9804 19523 9805 + 19523 9804 9810 + 9810 19524 19523 + 19527 19524 9810 + 19524 19527 19528 + 19528 19525 19524 + 19525 19528 19529 + 19529 19526 19525 + 19526 19529 19530 + 19530 19521 19526 + 9810 9815 19527 + 19527 9815 19531 + 19531 19532 19527 + 19528 19527 19532 + 19532 19533 19528 + 19529 19528 19533 + 19533 19534 19529 + 19530 19529 19534 + 19535 19531 9815 + 19536 19531 19535 + 19531 19536 19537 + 19537 19532 19531 + 19532 19537 19538 + 19538 19533 19532 + 19533 19538 19539 + 19539 19534 19533 + 9815 9814 19535 + 9820 19535 9814 + 19540 19535 9820 + 19535 19540 19536 + 19536 19540 19541 + 19541 19542 19536 + 19537 19536 19542 + 19542 19543 19537 + 19538 19537 19543 + 19543 19544 19538 + 19539 19538 19544 + 9820 9825 19540 + 19540 9825 19545 + 19545 19541 19540 + 19546 19541 19545 + 19541 19546 19547 + 19547 19542 19541 + 19542 19547 19548 + 19548 19543 19542 + 19543 19548 19549 + 19549 19544 19543 + 9830 19545 9825 + 10921 19545 9830 + 19545 10921 19546 + 19546 10921 10920 + 10920 10930 19546 + 19547 19546 10930 + 10930 10935 19547 + 19548 19547 10935 + 10935 19550 19548 + 19549 19548 19550 + 19550 19551 19549 + 19552 19549 19551 + 19544 19549 19552 + 19552 19553 19544 + 19544 19553 19539 + 19554 19539 19553 + 19534 19539 19554 + 10934 19550 10935 + 19550 10934 19555 + 19555 19551 19550 + 19551 19555 19556 + 19556 19557 19551 + 19551 19557 19552 + 19558 19552 19557 + 19553 19552 19558 + 19558 19559 19553 + 19553 19559 19554 + 19555 10934 10939 + 10939 10948 19555 + 19556 19555 10948 + 10948 19413 19556 + 19418 19556 19413 + 19557 19556 19418 + 19418 19423 19557 + 19557 19423 19558 + 19428 19558 19423 + 19559 19558 19428 + 19428 19433 19559 + 19559 19433 19560 + 19560 19554 19559 + 19561 19554 19560 + 19554 19561 19534 + 19534 19561 19530 + 19562 19530 19561 + 19521 19530 19562 + 19438 19560 19433 + 19563 19560 19438 + 19560 19563 19561 + 19561 19563 19562 + 19564 19562 19563 + 19565 19562 19564 + 19562 19565 19521 + 19521 19565 19522 + 19438 19443 19563 + 19563 19443 19564 + 19448 19564 19443 + 19566 19564 19448 + 19564 19566 19565 + 19522 19565 19566 + 19566 19567 19522 + 19514 19522 19567 + 19567 19568 19514 + 19514 19568 19496 + 19491 19496 19568 + 19448 19453 19566 + 19566 19453 19569 + 19569 19567 19566 + 19567 19569 19570 + 19570 19568 19567 + 19568 19570 19491 + 19476 19491 19570 + 19570 19471 19476 + 19462 19471 19570 + 19569 19453 19452 + 19452 19462 19569 + 19570 19569 19462 + 19387 10972 9745 + 9745 19571 19387 + 19571 19572 19387 + 19388 19387 19572 + 19572 19573 19388 + 19574 19388 19573 + 19389 19388 19574 + 9744 19571 9745 + 19571 9744 19575 + 19571 19575 19576 + 19576 19572 19571 + 19572 19576 19573 + 19573 19576 19577 + 19577 19578 19573 + 19573 19578 19574 + 19575 9744 9743 + 9743 19579 19575 + 19575 19579 19580 + 19580 19577 19575 + 19577 19576 19575 + 19579 9743 9742 + 9742 19581 19579 + 19579 19581 19582 + 19582 19580 19579 + 19580 19582 19583 + 19577 19580 19583 + 19584 19577 19583 + 19577 19584 19578 + 19578 19584 19585 + 19578 19585 19574 + 19581 9742 19586 + 19586 19587 19581 + 19582 19581 19587 + 19587 19588 19582 + 19583 19582 19588 + 19588 19589 19583 + 19584 19583 19589 + 19590 19584 19589 + 19584 19590 19585 + 9748 19586 9742 + 19591 19586 9748 + 19587 19586 19591 + 19587 19591 19592 + 19592 19588 19587 + 19589 19588 19592 + 19589 19592 19593 + 19593 19594 19589 + 19589 19594 19590 + 19595 19590 19594 + 19585 19590 19595 + 9748 9752 19591 + 19592 19591 9752 + 19593 19592 9752 + 19596 19593 9752 + 19597 19593 19596 + 19597 19594 19593 + 19594 19597 19595 + 19598 19595 19597 + 19585 19595 19598 + 19598 19574 19585 + 19574 19598 19599 + 19574 19599 19389 + 19600 19596 9752 + 19601 19596 19600 + 19601 19602 19596 + 19596 19602 19597 + 19597 19602 19603 + 19603 19598 19597 + 19599 19598 19603 + 10977 19600 9752 + 19604 19600 10977 + 19604 19605 19600 + 19600 19605 19601 + 19601 19605 19606 + 19607 19601 19606 + 19602 19601 19607 + 19607 19603 19602 + 19608 19603 19607 + 19603 19608 19599 + 10977 19609 19604 + 19604 19609 61 + 19610 19604 61 + 19605 19604 19610 + 19610 19606 19605 + 10976 19609 10977 + 19609 10976 19611 + 19611 61 19609 + 61 8701 19610 + 8707 19610 8701 + 8707 19606 19610 + 19606 8707 19385 + 19385 19612 19606 + 19606 19612 19607 + 19608 19607 19612 + 19612 19384 19608 + 19608 19384 19383 + 19599 19608 19383 + 19383 19389 19599 + 19384 19612 19385 + 11594 11598 19613 + 19613 11598 19614 + 19614 19615 19613 + 19616 19613 19615 + 19617 19613 19616 + 19613 19617 11594 + 11594 19617 11595 + 11597 19614 11598 + 19618 19614 11597 + 19615 19614 19618 + 19618 19619 19615 + 19615 19619 19620 + 19620 19621 19615 + 19615 19621 19616 + 11597 19622 19618 + 19618 19622 11346 + 11357 19618 11346 + 19619 19618 11357 + 11357 19623 19619 + 19619 19623 19624 + 19624 19620 19619 + 11597 11596 19622 + 19622 11596 11347 + 11347 11346 19622 + 19625 19620 19624 + 19620 19625 19626 + 19626 19621 19620 + 19621 19626 19627 + 19627 19616 19621 + 19628 19616 19627 + 19616 19628 19617 + 19617 19628 19629 + 19629 11595 19617 + 11590 11595 19629 + 19624 19630 19625 + 19625 19630 19631 + 19631 19632 19625 + 19626 19625 19632 + 19633 19630 19624 + 19630 19633 19634 + 19634 19631 19630 + 19631 19634 19635 + 19635 19636 19631 + 19631 19636 19637 + 19637 19632 19631 + 19624 19638 19633 + 19633 19638 19639 + 19639 19640 19633 + 19634 19633 19640 + 19640 19641 19634 + 19635 19634 19641 + 19638 19624 19623 + 19623 19642 19638 + 19638 19642 19643 + 19643 19639 19638 + 19642 19623 11357 + 11357 11356 19642 + 19642 11356 19644 + 19644 19643 19642 + 19643 19644 19645 + 19645 19646 19643 + 19643 19646 19647 + 19647 19648 19643 + 19640 19648 19647 + 19649 19644 11356 + 19645 19644 19649 + 19649 19650 19645 + 19651 19645 19650 + 19646 19645 19651 + 19651 19652 19646 + 19646 19652 19653 + 19653 19647 19646 + 11355 19649 11356 + 19654 19649 11355 + 19650 19649 19654 + 19650 19654 19655 + 19655 19656 19650 + 19650 19656 19651 + 19657 19651 19656 + 19651 19657 19658 + 19658 19652 19651 + 11355 19659 19654 + 19655 19654 19659 + 19659 19660 19655 + 19661 19655 19660 + 19655 19661 19662 + 19662 19656 19655 + 19656 19662 19657 + 19663 19657 19662 + 19658 19657 19663 + 11361 19659 11355 + 19659 11361 19664 + 19664 19660 19659 + 19665 19660 19664 + 19660 19665 19661 + 19666 19661 19665 + 19662 19661 19666 + 19666 19667 19662 + 19662 19667 19663 + 19664 11361 11360 + 11360 19668 19664 + 19669 19664 19668 + 19664 19669 19665 + 19665 19669 19670 + 19670 19671 19665 + 19665 19671 19666 + 11365 19668 11360 + 19672 19668 11365 + 19668 19672 19669 + 19670 19669 19672 + 19672 19673 19670 + 19674 19670 19673 + 19670 19674 19675 + 19675 19671 19670 + 19671 19675 19676 + 19676 19666 19671 + 11365 19677 19672 + 19672 19677 19678 + 19678 19673 19672 + 19679 19673 19678 + 19673 19679 19674 + 19680 19674 19679 + 19675 19674 19680 + 19677 11365 11364 + 11364 19681 19677 + 19678 19677 19681 + 19681 19682 19678 + 19683 19678 19682 + 19678 19683 19679 + 19679 19683 19684 + 19684 19685 19679 + 19679 19685 19680 + 19681 11364 11369 + 11369 19686 19681 + 19681 19686 19687 + 19687 19682 19681 + 19688 19682 19687 + 19682 19688 19683 + 19684 19683 19688 + 19686 11369 11374 + 11374 19689 19686 + 19687 19686 19689 + 19689 19690 19687 + 19691 19687 19690 + 19687 19691 19688 + 19688 19691 19692 + 19692 19693 19688 + 19688 19693 19684 + 19689 11374 11379 + 11379 19694 19689 + 19689 19694 19695 + 19695 19690 19689 + 19696 19690 19695 + 19690 19696 19691 + 19692 19691 19696 + 19694 11379 19697 + 19697 19698 19694 + 19695 19694 19698 + 19698 19699 19695 + 19700 19695 19699 + 19695 19700 19696 + 11378 19697 11379 + 19701 19697 11378 + 19698 19697 19701 + 19701 19702 19698 + 19698 19702 19703 + 19703 19699 19698 + 19704 19699 19703 + 19699 19704 19700 + 19705 19700 19704 + 19696 19700 19705 + 11378 11384 19701 + 19701 11384 11383 + 11383 19706 19701 + 19702 19701 19706 + 19706 19707 19702 + 19703 19702 19707 + 19707 19708 19703 + 19709 19703 19708 + 19703 19709 19704 + 19710 19706 11383 + 19707 19706 19710 + 19710 19711 19707 + 19707 19711 19712 + 19712 19708 19707 + 19713 19708 19712 + 19708 19713 19709 + 19714 19709 19713 + 19704 19709 19714 + 11383 11382 19710 + 19715 19710 11382 + 19711 19710 19715 + 19715 19716 19711 + 19712 19711 19716 + 19716 19717 19712 + 19718 19712 19717 + 19712 19718 19713 + 11382 19719 19715 + 19720 19715 19719 + 19716 19715 19720 + 19720 19721 19716 + 19716 19721 19722 + 19722 19717 19716 + 19723 19717 19722 + 19717 19723 19718 + 11388 19719 11382 + 19719 11388 19724 + 19719 19724 19720 + 19720 19724 19725 + 19725 19726 19720 + 19721 19720 19726 + 19726 19727 19721 + 19722 19721 19727 + 19724 11388 11387 + 11387 19728 19724 + 19724 19728 19725 + 19729 19725 19728 + 19725 19729 19730 + 19725 19730 19731 + 19731 19726 19725 + 19727 19726 19731 + 11387 11392 19728 + 19728 11392 19729 + 19729 11392 11391 + 11391 19732 19729 + 19732 19733 19729 + 19730 19729 19733 + 19733 19734 19730 + 19730 19734 19735 + 19735 19731 19730 + 19736 19731 19735 + 19731 19736 19727 + 19737 19732 11391 + 19732 19737 19738 + 19738 19739 19732 + 19732 19739 19740 + 19740 19733 19732 + 19733 19740 19741 + 19741 19734 19733 + 11391 11390 19737 + 11401 19737 11390 + 19738 19737 11401 + 11401 19742 19738 + 19738 19742 19743 + 19744 19738 19743 + 19739 19738 19744 + 19744 19745 19739 + 19740 19739 19745 + 19745 19746 19740 + 19741 19740 19746 + 19742 11401 19747 + 19747 19748 19742 + 19742 19748 19749 + 19749 19750 19742 + 19742 19750 19743 + 19747 11401 19751 + 19751 19752 19747 + 19747 19752 19753 + 19753 19754 19747 + 19748 19747 19754 + 19754 19755 19748 + 19749 19748 19755 + 11400 19751 11401 + 19756 19751 11400 + 19756 19752 19751 + 19752 19756 11424 + 11424 19753 19752 + 11423 19753 11424 + 19753 11423 19757 + 19757 19754 19753 + 19754 19757 19758 + 19758 19755 19754 + 11400 11406 19756 + 19756 11406 11411 + 19756 11411 11424 + 19759 19755 19758 + 19755 19759 19749 + 19760 19749 19759 + 19749 19760 19750 + 19750 19760 19761 + 19761 19743 19750 + 19762 19759 19758 + 19763 19759 19762 + 19759 19763 19760 + 19760 19763 19764 + 19761 19760 19764 + 19764 19765 19761 + 19766 19761 19765 + 19761 19766 19743 + 19758 19767 19762 + 19767 19768 19762 + 19769 19762 19768 + 19762 19769 19763 + 19763 19769 19770 + 19770 19764 19763 + 19771 19767 19758 + 19772 19767 19771 + 19767 19772 11431 + 11431 19768 19767 + 11431 11430 19768 + 19768 11430 19769 + 19758 19757 19771 + 19771 19757 11423 + 11423 11422 19771 + 19772 19771 11422 + 11422 11421 19772 + 11431 19772 11421 + 19769 11430 11429 + 11429 19773 19769 + 19773 19774 19769 + 19774 19770 19769 + 19775 19770 19774 + 19770 19775 19764 + 19764 19775 19776 + 19776 19765 19764 + 19765 19776 19777 + 19765 19777 19766 + 19778 19773 11429 + 19779 19773 19778 + 19773 19779 19780 + 19780 19774 19773 + 19780 19781 19774 + 19774 19781 19775 + 19775 19781 19782 + 19782 19776 19775 + 11429 11428 19778 + 19778 11428 11440 + 11440 19783 19778 + 19779 19778 19783 + 19784 19783 11440 + 19785 19783 19784 + 19783 19785 19779 + 11440 19786 19784 + 19784 19786 19787 + 19787 19788 19784 + 19785 19784 19788 + 19788 19789 19785 + 19785 19789 19790 + 19779 19785 19790 + 19791 19786 11440 + 19786 19791 19792 + 19792 19787 19786 + 19793 19787 19792 + 19787 19793 19794 + 19794 19788 19787 + 19789 19788 19794 + 19789 19794 19795 + 19795 19790 19789 + 11440 19796 19791 + 19791 19796 19797 + 19797 19798 19791 + 19791 19798 19799 + 19799 19792 19791 + 19800 19792 19799 + 19792 19800 19793 + 19796 11440 11439 + 11439 11445 19796 + 19797 19796 11445 + 11445 11453 19797 + 19801 19797 11453 + 19798 19797 19801 + 19801 19802 19798 + 19798 19802 19803 + 19803 19799 19798 + 19799 19803 19804 + 19799 19804 19800 + 11453 11457 19801 + 19801 11457 11462 + 11462 19805 19801 + 19802 19801 19805 + 19805 19806 19802 + 19802 19806 19807 + 19807 19803 19802 + 19804 19803 19807 + 19807 19808 19804 + 19800 19804 19808 + 19808 19809 19800 + 19793 19800 19809 + 11467 19805 11462 + 19805 11467 19810 + 19810 19806 19805 + 19806 19810 10876 + 10876 10875 19806 + 19806 10875 19807 + 10881 19807 10875 + 19807 10881 19811 + 19811 19808 19807 + 19810 11467 11466 + 11466 19812 19810 + 19810 19812 10867 + 10867 10876 19810 + 19813 19812 11466 + 19812 19813 10868 + 10868 10867 19812 + 11466 11471 19813 + 19813 11471 11476 + 11476 19814 19813 + 19813 19814 10863 + 10863 10868 19813 + 19815 19814 11476 + 19814 19815 19816 + 19816 10863 19814 + 10863 19816 10856 + 10856 19816 19817 + 19817 10851 10856 + 11476 19818 19815 + 19815 19818 19819 + 19819 19820 19815 + 19815 19820 19817 + 19817 19816 19815 + 19818 11476 11475 + 11475 11481 19818 + 19819 19818 11481 + 11481 19821 19819 + 19822 19819 19821 + 19820 19819 19822 + 19822 19823 19820 + 19820 19823 19824 + 19824 19817 19820 + 10851 19817 19824 + 19824 10852 10851 + 11486 19821 11481 + 19821 11486 11491 + 11491 19825 19821 + 19821 19825 19822 + 19822 19825 19826 + 19826 19827 19822 + 19823 19822 19827 + 19827 19828 19823 + 19824 19823 19828 + 19828 19829 19824 + 10852 19824 19829 + 19829 10846 10852 + 19825 11491 19830 + 19830 19826 19825 + 19831 19826 19830 + 19826 19831 19832 + 19832 19827 19826 + 19827 19832 19833 + 19833 19828 19827 + 19828 19833 19834 + 19834 19829 19828 + 19835 19830 11491 + 19836 19830 19835 + 19830 19836 19831 + 19831 19836 19837 + 19837 19838 19831 + 19831 19838 19839 + 19839 19832 19831 + 19833 19832 19839 + 11491 11490 19835 + 11496 19835 11490 + 19840 19835 11496 + 19835 19840 19836 + 19837 19836 19840 + 19840 19841 19837 + 19842 19837 19841 + 19837 19842 19843 + 19843 19838 19837 + 19838 19843 19844 + 19844 19839 19838 + 11496 19845 19840 + 19840 19845 19846 + 19846 19841 19840 + 19847 19841 19846 + 19841 19847 19842 + 19848 19842 19847 + 19843 19842 19848 + 19845 11496 11495 + 11495 11501 19845 + 19846 19845 11501 + 11501 19849 19846 + 19850 19846 19849 + 19846 19850 19847 + 19847 19850 19851 + 19851 19852 19847 + 19847 19852 19848 + 11505 19849 11501 + 19853 19849 11505 + 19849 19853 19850 + 19851 19850 19853 + 19853 19854 19851 + 19855 19851 19854 + 19851 19855 19856 + 19856 19852 19851 + 19852 19856 19857 + 19857 19848 19852 + 11505 19858 19853 + 19853 19858 19859 + 19859 19854 19853 + 19860 19854 19859 + 19854 19860 19855 + 19861 19855 19860 + 19856 19855 19861 + 19858 11505 11510 + 11510 19862 19858 + 19859 19858 19862 + 19862 19863 19859 + 19864 19859 19863 + 19859 19864 19860 + 19860 19864 19865 + 19865 19866 19860 + 19860 19866 19861 + 19862 11510 11509 + 11509 19867 19862 + 19862 19867 19868 + 19868 19863 19862 + 19869 19863 19868 + 19863 19869 19864 + 19865 19864 19869 + 19867 11509 11518 + 11518 19870 19867 + 19868 19867 19870 + 19870 19871 19868 + 19872 19868 19871 + 19868 19872 19869 + 19869 19872 19873 + 19873 19874 19869 + 19869 19874 19865 + 19870 11518 11517 + 11517 19875 19870 + 19870 19875 19876 + 19876 19871 19870 + 19877 19871 19876 + 19871 19877 19872 + 19873 19872 19877 + 19875 11517 11522 + 11522 19878 19875 + 19876 19875 19878 + 19878 19879 19876 + 19880 19876 19879 + 19876 19880 19877 + 19877 19880 19881 + 19881 19882 19877 + 19877 19882 19873 + 19878 11522 11521 + 11521 19883 19878 + 19878 19883 19884 + 19884 19879 19878 + 19885 19879 19884 + 19879 19885 19880 + 19881 19880 19885 + 19883 11521 11529 + 11529 19886 19883 + 19884 19883 19886 + 19886 19887 19884 + 19888 19884 19887 + 19884 19888 19885 + 19885 19888 19889 + 19889 19890 19885 + 19885 19890 19881 + 19886 11529 11528 + 11528 19891 19886 + 19886 19891 19892 + 19892 19887 19886 + 19893 19887 19892 + 19887 19893 19888 + 19889 19888 19893 + 19891 11528 11537 + 11537 19894 19891 + 19892 19891 19894 + 19894 19895 19892 + 19896 19892 19895 + 19892 19896 19893 + 19893 19896 19897 + 19897 19898 19893 + 19893 19898 19889 + 19894 11537 11536 + 11536 19899 19894 + 19894 19899 19900 + 19900 19895 19894 + 19901 19895 19900 + 19895 19901 19896 + 19897 19896 19901 + 19899 11536 19902 + 19902 19903 19899 + 19900 19899 19903 + 19903 19904 19900 + 19905 19900 19904 + 19900 19905 19901 + 11541 19902 11536 + 19906 19902 11541 + 19903 19902 19906 + 19906 19907 19903 + 19903 19907 19908 + 19908 19904 19903 + 19909 19904 19908 + 19904 19909 19905 + 19910 19905 19909 + 19901 19905 19910 + 11541 11545 19906 + 19906 11545 11550 + 11550 19911 19906 + 19907 19906 19911 + 19911 19912 19907 + 19908 19907 19912 + 19912 19913 19908 + 19914 19908 19913 + 19908 19914 19909 + 19915 19911 11550 + 19912 19911 19915 + 19915 19916 19912 + 19912 19916 19917 + 19917 19913 19912 + 19918 19913 19917 + 19913 19918 19914 + 19919 19914 19918 + 19909 19914 19919 + 11550 11555 19915 + 19915 11555 19920 + 19920 19921 19915 + 19916 19915 19921 + 19921 19922 19916 + 19917 19916 19922 + 19922 19923 19917 + 19924 19917 19923 + 19917 19924 19918 + 11554 19920 11555 + 19920 11554 19925 + 19925 19926 19920 + 19920 19926 19927 + 19927 19921 19920 + 19922 19921 19927 + 19927 19928 19922 + 19922 19928 19929 + 19929 19923 19922 + 19925 11554 11559 + 11559 11564 19925 + 19930 19925 11564 + 19926 19925 19930 + 19930 19931 19926 + 19927 19926 19931 + 19931 19932 19927 + 19928 19927 19932 + 19932 19933 19928 + 19929 19928 19933 + 11564 19934 19930 + 19935 19930 19934 + 19931 19930 19935 + 19935 19936 19931 + 19931 19936 19937 + 19937 19932 19931 + 19933 19932 19937 + 19938 19934 11564 + 19939 19934 19938 + 19934 19939 19935 + 19940 19935 19939 + 19936 19935 19940 + 19940 19941 19936 + 19937 19936 19941 + 11564 11563 19938 + 11569 19938 11563 + 19942 19938 11569 + 19938 19942 19939 + 19939 19942 19943 + 19943 19944 19939 + 19939 19944 19940 + 19945 19940 19944 + 19941 19940 19945 + 11569 19946 19942 + 19942 19946 19947 + 19947 19943 19942 + 19948 19943 19947 + 19943 19948 19949 + 19949 19944 19943 + 19944 19949 19945 + 19950 19946 11569 + 19946 19950 19951 + 19951 19947 19946 + 19947 19951 19952 + 19952 19953 19947 + 19947 19953 19948 + 19954 19948 19953 + 19949 19948 19954 + 11569 11568 19950 + 19950 11568 11567 + 11567 19955 19950 + 19950 19955 19956 + 19956 19951 19950 + 19952 19951 19956 + 19956 19957 19952 + 19952 19957 19958 + 19958 19959 19952 + 19953 19952 19959 + 11576 19955 11567 + 19955 11576 19960 + 19960 19956 19955 + 19956 19960 19961 + 19961 19957 19956 + 19957 19961 19962 + 19962 19958 19957 + 11580 19960 11576 + 19961 19960 11580 + 11580 19963 19961 + 19961 19963 19964 + 19964 19962 19961 + 19965 19962 19964 + 19958 19962 19965 + 19965 19966 19958 + 19958 19966 19967 + 19967 19959 19958 + 11585 19963 11580 + 19963 11585 19968 + 19968 19964 19963 + 19964 19968 19969 + 19969 19970 19964 + 19964 19970 19965 + 19965 19970 19971 + 19971 19972 19965 + 19966 19965 19972 + 19973 19968 11585 + 19969 19968 19973 + 19973 19974 19969 + 19975 19969 19974 + 19970 19969 19975 + 19975 19971 19970 + 11585 11590 19973 + 19629 19973 11590 + 19974 19973 19629 + 19629 19976 19974 + 19974 19976 19977 + 19977 19978 19974 + 19974 19978 19975 + 19979 19975 19978 + 19971 19975 19979 + 19976 19629 19628 + 19628 19980 19976 + 19976 19980 19981 + 19981 19982 19976 + 19982 19977 19976 + 19983 19977 19982 + 19978 19977 19983 + 19983 19984 19978 + 19978 19984 19979 + 19627 19980 19628 + 19980 19627 19985 + 19985 19981 19980 + 19981 19985 19986 + 19981 19986 19987 + 19987 19982 19981 + 19988 19982 19987 + 19982 19988 19983 + 19983 19988 19989 + 19984 19983 19989 + 19985 19627 19626 + 19990 19985 19626 + 19986 19985 19990 + 19990 19991 19986 + 19986 19991 19992 + 19987 19986 19992 + 19993 19987 19992 + 19988 19987 19993 + 19993 19989 19988 + 19994 19989 19993 + 19989 19994 19984 + 19626 19995 19990 + 19996 19990 19995 + 19990 19996 19991 + 19991 19996 19997 + 19997 19998 19991 + 19991 19998 19992 + 19632 19995 19626 + 19995 19632 19637 + 19637 19999 19995 + 19995 19999 19996 + 19997 19996 19999 + 19999 20000 19997 + 20001 19997 20000 + 19997 20001 19998 + 19998 20001 20002 + 20002 19992 19998 + 19999 19637 20003 + 20003 20000 19999 + 20000 20003 20004 + 20004 20005 20000 + 20000 20005 20001 + 20001 20005 20006 + 20002 20001 20006 + 20007 20003 19637 + 20004 20003 20007 + 20007 20008 20004 + 20009 20004 20008 + 20005 20004 20009 + 20009 20006 20005 + 19637 19636 20007 + 20010 20007 19636 + 20007 20010 20011 + 20011 20008 20007 + 20008 20011 20012 + 20012 20013 20008 + 20008 20013 20009 + 20014 20009 20013 + 20009 20014 20006 + 19636 19635 20010 + 20010 19635 20015 + 20015 20016 20010 + 20011 20010 20016 + 20016 20017 20011 + 20011 20017 20018 + 20012 20011 20018 + 19641 20015 19635 + 20015 19641 20019 + 20019 20020 20015 + 20015 20020 20021 + 20021 20016 20015 + 20017 20016 20021 + 20021 20022 20017 + 20017 20022 20023 + 20023 20018 20017 + 20019 19641 19640 + 19640 20024 20019 + 20025 20019 20024 + 20020 20019 20025 + 20025 20026 20020 + 20020 20026 20027 + 20027 20021 20020 + 20022 20021 20027 + 20027 20028 20022 + 20023 20022 20028 + 19647 20024 19640 + 20024 19647 19653 + 19653 20029 20024 + 20024 20029 20025 + 20030 20025 20029 + 20025 20030 20031 + 20031 20026 20025 + 20026 20031 20032 + 20032 20027 20026 + 20027 20032 20033 + 20033 20028 20027 + 20034 20029 19653 + 20029 20034 20030 + 20030 20034 20035 + 20036 20030 20035 + 20031 20030 20036 + 20036 20037 20031 + 20031 20037 20038 + 20038 20032 20031 + 20033 20032 20038 + 19653 20039 20034 + 20034 20039 20040 + 20040 20035 20034 + 11018 20035 20040 + 20035 11018 11025 + 11025 20041 20035 + 20035 20041 20036 + 20039 19653 19652 + 19652 19658 20039 + 20040 20039 19658 + 19658 20042 20040 + 20043 20040 20042 + 20040 20043 11018 + 11018 20043 11019 + 11019 20043 20044 + 20044 20045 11019 + 11020 11019 20045 + 19663 20042 19658 + 20044 20042 19663 + 20042 20044 20043 + 19663 20046 20044 + 20044 20046 20047 + 20047 20045 20044 + 20048 20045 20047 + 20045 20048 11020 + 11014 11020 20048 + 20048 20049 11014 + 11015 11014 20049 + 20046 19663 19667 + 19667 20050 20046 + 20047 20046 20050 + 20050 20051 20047 + 20052 20047 20051 + 20047 20052 20048 + 20048 20052 20053 + 20053 20049 20048 + 20054 20049 20053 + 20049 20054 11015 + 11016 11015 20054 + 20050 19667 19666 + 19666 19676 20050 + 20050 19676 20055 + 20055 20051 20050 + 20056 20051 20055 + 20051 20056 20052 + 20053 20052 20056 + 20056 20057 20053 + 20058 20053 20057 + 20053 20058 20054 + 20055 19676 19675 + 19675 20059 20055 + 20060 20055 20059 + 20055 20060 20056 + 20056 20060 20061 + 20061 20057 20056 + 20062 20057 20061 + 20057 20062 20058 + 20063 20058 20062 + 20054 20058 20063 + 19680 20059 19675 + 20064 20059 19680 + 20059 20064 20060 + 20061 20060 20064 + 20064 20065 20061 + 20066 20061 20065 + 20061 20066 20062 + 20062 20066 20067 + 20067 20068 20062 + 20062 20068 20063 + 19680 20069 20064 + 20064 20069 20070 + 20070 20065 20064 + 20071 20065 20070 + 20065 20071 20066 + 20067 20066 20071 + 20069 19680 19685 + 19685 20072 20069 + 20070 20069 20072 + 20072 20073 20070 + 20074 20070 20073 + 20070 20074 20071 + 20071 20074 20075 + 20075 20076 20071 + 20071 20076 20067 + 20072 19685 19684 + 19684 20077 20072 + 20072 20077 20078 + 20078 20073 20072 + 20079 20073 20078 + 20073 20079 20074 + 20075 20074 20079 + 20077 19684 19693 + 19693 20080 20077 + 20078 20077 20080 + 20080 20081 20078 + 20082 20078 20081 + 20078 20082 20079 + 20079 20082 20083 + 20083 20084 20079 + 20079 20084 20075 + 20080 19693 19692 + 19692 20085 20080 + 20080 20085 20086 + 20086 20081 20080 + 20087 20081 20086 + 20081 20087 20082 + 20083 20082 20087 + 20085 19692 20088 + 20088 20089 20085 + 20086 20085 20089 + 20089 20090 20086 + 20091 20086 20090 + 20086 20091 20087 + 19696 20088 19692 + 19705 20088 19696 + 20089 20088 19705 + 19705 20092 20089 + 20089 20092 20093 + 20093 20090 20089 + 19919 20090 20093 + 20090 19919 20091 + 19918 20091 19919 + 20087 20091 19918 + 19918 19924 20087 + 20087 19924 20083 + 20092 19705 20094 + 20094 20095 20092 + 20093 20092 20095 + 20095 20096 20093 + 20097 20093 20096 + 20093 20097 19919 + 19919 20097 19909 + 19909 20097 19910 + 19704 20094 19705 + 19714 20094 19704 + 20095 20094 19714 + 19714 20098 20095 + 20095 20098 20099 + 20099 20096 20095 + 19910 20096 20099 + 20096 19910 20097 + 20098 19714 20100 + 20100 20101 20098 + 20099 20098 20101 + 20101 20102 20099 + 20103 20099 20102 + 20099 20103 19910 + 19910 20103 19901 + 19901 20103 19897 + 19713 20100 19714 + 20104 20100 19713 + 20101 20100 20104 + 20104 20105 20101 + 20101 20105 20106 + 20106 20102 20101 + 19897 20102 20106 + 20102 19897 20103 + 19713 19718 20104 + 20104 19718 19723 + 19723 20107 20104 + 20105 20104 20107 + 20107 20108 20105 + 20106 20105 20108 + 20108 20109 20106 + 19898 20106 20109 + 20106 19898 19897 + 20110 20107 19723 + 20108 20107 20110 + 20110 20111 20108 + 20108 20111 20112 + 20112 20109 20108 + 19889 20109 20112 + 20109 19889 19898 + 19723 20113 20110 + 20110 20113 20114 + 20114 20115 20110 + 20111 20110 20115 + 20115 20116 20111 + 20112 20111 20116 + 19722 20113 19723 + 20113 19722 20117 + 20117 20114 20113 + 20114 20117 20118 + 20118 20119 20114 + 20114 20119 20120 + 20120 20115 20114 + 20116 20115 20120 + 19727 20117 19722 + 20118 20117 19727 + 19727 19736 20118 + 20118 19736 20121 + 20121 20122 20118 + 20119 20118 20122 + 20122 20123 20119 + 20120 20119 20123 + 20123 20124 20120 + 20125 20120 20124 + 20120 20125 20116 + 19735 20121 19736 + 20121 19735 20126 + 20126 20127 20121 + 20121 20127 20128 + 20128 20122 20121 + 20123 20122 20128 + 20128 20129 20123 + 20123 20129 20130 + 20130 20124 20123 + 20126 19735 19734 + 19734 19741 20126 + 20131 20126 19741 + 20127 20126 20131 + 20131 20132 20127 + 20128 20127 20132 + 20132 20133 20128 + 20129 20128 20133 + 20133 20134 20129 + 20130 20129 20134 + 19741 20135 20131 + 20136 20131 20135 + 20132 20131 20136 + 20136 20137 20132 + 20132 20137 20138 + 20138 20133 20132 + 20134 20133 20138 + 19746 20135 19741 + 20135 19746 20139 + 20139 20140 20135 + 20135 20140 20136 + 20136 20140 20141 + 20141 20142 20136 + 20137 20136 20142 + 20142 20143 20137 + 20138 20137 20143 + 20139 19746 19745 + 19745 20144 20139 + 20145 20139 20144 + 20140 20139 20145 + 20145 20141 20140 + 20146 20141 20145 + 20141 20146 20147 + 20147 20142 20141 + 20143 20142 20147 + 20148 20144 19745 + 20144 20148 20149 + 20149 20150 20144 + 20144 20150 20145 + 20150 20151 20145 + 20146 20145 20151 + 19745 19744 20148 + 20148 19744 20152 + 20152 20153 20148 + 20149 20148 20153 + 20154 20149 20153 + 20155 20149 20154 + 20150 20149 20155 + 19743 20152 19744 + 20156 20152 19743 + 20153 20152 20156 + 20156 20157 20153 + 20153 20157 20158 + 20158 20159 20153 + 20153 20159 20154 + 19743 19766 20156 + 20160 20156 19766 + 20157 20156 20160 + 20160 20161 20157 + 20157 20161 20162 + 20162 20158 20157 + 20163 20158 20162 + 20158 20163 20159 + 20159 20163 20164 + 20164 20154 20159 + 19766 19777 20160 + 19777 20165 20160 + 20166 20160 20165 + 20160 20166 20167 + 20167 20161 20160 + 20161 20167 20168 + 20168 20162 20161 + 19777 19776 20165 + 19776 19782 20165 + 19782 20169 20165 + 20165 20169 20166 + 20170 20166 20169 + 20167 20166 20170 + 20170 20171 20167 + 20167 20171 20172 + 20172 20168 20167 + 20173 20168 20172 + 20162 20168 20173 + 20174 20169 19782 + 20169 20174 20170 + 20175 20170 20174 + 20175 20171 20170 + 20171 20175 20176 + 20176 20172 20171 + 20176 20177 20172 + 20172 20177 20173 + 20178 20174 19782 + 20179 20174 20178 + 20174 20179 20175 + 20175 20179 19779 + 20176 20175 19779 + 19790 20176 19779 + 20177 20176 19790 + 19790 20180 20177 + 20173 20177 20180 + 19781 20178 19782 + 20178 19781 19780 + 20179 20178 19780 + 20179 19780 19779 + 19790 19795 20180 + 20180 19795 20181 + 20181 20182 20180 + 20180 20182 20173 + 20182 20183 20173 + 20183 20184 20173 + 20185 20173 20184 + 20173 20185 20162 + 20181 19795 20186 + 20186 20187 20181 + 20188 20181 20187 + 20188 20182 20181 + 20182 20188 20189 + 20189 20183 20182 + 19795 19794 20186 + 19794 19793 20186 + 19809 20186 19793 + 20186 19809 20190 + 20190 20191 20186 + 20186 20191 20192 + 20192 20187 20186 + 20193 20187 20192 + 20187 20193 20188 + 20188 20193 20194 + 20189 20188 20194 + 20190 19809 19808 + 19808 19811 20190 + 20190 19811 20195 + 20195 20196 20190 + 20191 20190 20196 + 20196 20197 20191 + 20192 20191 20197 + 20197 20198 20192 + 20193 20192 20198 + 20198 20199 20193 + 20193 20199 20194 + 10880 20195 19811 + 10886 20195 10880 + 20195 10886 20200 + 20200 20196 20195 + 20197 20196 20200 + 20200 20201 20197 + 20197 20201 20202 + 20202 20198 20197 + 20199 20198 20202 + 19811 10881 10880 + 20200 10886 10885 + 10885 20203 20200 + 20201 20200 20203 + 20203 20204 20201 + 20202 20201 20204 + 20204 20205 20202 + 20199 20202 20205 + 20205 20206 20199 + 20199 20206 20194 + 10890 20203 10885 + 20204 20203 10890 + 10890 10894 20204 + 20204 10894 10899 + 10899 20205 20204 + 20206 20205 10899 + 20206 10899 10898 + 10898 20194 20206 + 20194 10898 20207 + 20194 20207 20208 + 20208 20209 20194 + 20194 20209 20189 + 20207 10898 20210 + 20210 20211 20207 + 20208 20207 20211 + 20212 20208 20211 + 20213 20208 20212 + 20209 20208 20213 + 10897 20210 10898 + 10909 20210 10897 + 10909 20211 20210 + 20211 10909 20214 + 20214 20215 20211 + 20211 20215 20212 + 20214 10909 10686 + 20216 20214 10686 + 20217 20214 20216 + 20214 20217 20215 + 20215 20217 20218 + 20218 20219 20215 + 20215 20219 20212 + 10686 20220 20216 + 20220 20221 20216 + 20222 20216 20221 + 20216 20222 20223 + 20216 20223 20217 + 20218 20217 20223 + 10693 20220 10686 + 20220 10693 20224 + 20220 20224 20225 + 20225 20221 20220 + 20221 20225 20226 + 20221 20226 20222 + 20227 20222 20226 + 20223 20222 20227 + 20227 20228 20223 + 20223 20228 20218 + 20224 10693 10692 + 10692 20229 20224 + 20224 20229 20230 + 20230 20225 20224 + 20226 20225 20230 + 20230 20231 20226 + 20226 20231 20227 + 20232 20227 20231 + 20227 20232 20233 + 20233 20228 20227 + 20229 10692 20234 + 20229 20234 20235 + 20235 20236 20229 + 20229 20236 20230 + 20237 20230 20236 + 20230 20237 20238 + 20238 20231 20230 + 20231 20238 20232 + 20234 10692 20239 + 20239 20240 20234 + 20235 20234 20240 + 20241 20235 20240 + 20242 20235 20241 + 20236 20235 20242 + 20236 20242 20237 + 20243 20237 20242 + 20238 20237 20243 + 20244 20239 10692 + 20245 20239 20244 + 20240 20239 20245 + 20240 20245 20246 + 20246 20247 20240 + 20240 20247 20241 + 10698 20244 10692 + 20248 20244 10698 + 20244 20248 20249 + 20244 20249 20245 + 20245 20249 20250 + 20246 20245 20250 + 20251 20246 20250 + 20252 20246 20251 + 20247 20246 20252 + 10698 10704 20248 + 20248 10704 20253 + 20253 20254 20248 + 20254 20255 20248 + 20249 20248 20255 + 20255 20250 20249 + 20250 20255 20256 + 20250 20256 20257 + 20257 20251 20250 + 10703 20253 10704 + 10703 20258 20253 + 20253 20258 20259 + 20259 20254 20253 + 20254 20259 20260 + 20254 20260 20256 + 20256 20255 20254 + 20258 10703 10708 + 10708 20261 20258 + 20258 20261 20262 + 20259 20258 20262 + 20260 20259 20262 + 20262 20263 20260 + 20260 20263 20264 + 20256 20260 20264 + 20264 20257 20256 + 20265 20257 20264 + 20251 20257 20265 + 10708 10707 20261 + 20261 10707 20266 + 20266 20262 20261 + 20263 20262 20266 + 20266 20267 20263 + 20263 20267 20268 + 20268 20264 20263 + 20264 20268 20269 + 20264 20269 20265 + 20270 20266 10707 + 20270 20271 20266 + 20271 20267 20266 + 20267 20271 20272 + 20272 20268 20267 + 20269 20268 20272 + 20272 20273 20269 + 20265 20269 20273 + 10712 20270 10707 + 20274 20270 10712 + 20270 20274 20271 + 20271 20274 20275 + 20275 20272 20271 + 20272 20275 20276 + 20276 20273 20272 + 10712 10711 20274 + 20275 20274 10711 + 20277 20275 10711 + 20276 20275 20277 + 20277 20278 20276 + 20276 20278 20279 + 20279 20280 20276 + 20273 20276 20280 + 10711 20281 20277 + 20282 20277 20281 + 20277 20282 20283 + 20283 20278 20277 + 20278 20283 20284 + 20284 20279 20278 + 10716 20281 10711 + 20281 10716 10721 + 20281 10721 20282 + 20282 10721 20285 + 20285 20286 20282 + 20283 20282 20286 + 20286 20287 20283 + 20283 20287 20288 + 20288 20284 20283 + 10721 10720 20285 + 10735 20285 10720 + 20285 10735 20289 + 20289 20290 20285 + 20285 20290 20291 + 20291 20286 20285 + 20287 20286 20291 + 20287 20291 20292 + 20292 20288 20287 + 20289 10735 20293 + 20293 20294 20289 + 20295 20289 20294 + 20290 20289 20295 + 20295 20296 20290 + 20290 20296 20292 + 20292 20291 20290 + 10734 20293 10735 + 20297 20293 10734 + 20294 20293 20297 + 20294 20297 20298 + 20298 20299 20294 + 20294 20299 20295 + 20300 20295 20299 + 20296 20295 20300 + 10734 10743 20297 + 20298 20297 10743 + 10743 10752 20298 + 20301 20298 10752 + 20299 20298 20301 + 20301 20302 20299 + 20299 20302 20300 + 20300 20302 20303 + 20303 20304 20300 + 20305 20300 20304 + 20300 20305 20296 + 10752 20306 20301 + 20301 20306 20307 + 20307 20308 20301 + 20302 20301 20308 + 20308 20303 20302 + 10751 20306 10752 + 20306 10751 20309 + 20309 20307 20306 + 20309 10768 20307 + 20307 10768 10785 + 10785 20308 20307 + 20303 20308 10785 + 10785 10791 20303 + 20303 10791 10796 + 10796 20304 20303 + 10759 20309 10751 + 10768 20309 10759 + 20162 20185 20163 + 20164 20163 20185 + 20185 20310 20164 + 20311 20164 20310 + 20164 20311 20312 + 20312 20154 20164 + 20154 20312 20155 + 20184 20310 20185 + 20310 20184 20313 + 20313 20314 20310 + 20310 20314 20311 + 20315 20311 20314 + 20312 20311 20315 + 20315 20316 20312 + 20312 20316 20317 + 20155 20312 20317 + 20313 20184 20183 + 20183 20318 20313 + 20313 20318 20319 + 20319 20320 20313 + 20314 20313 20320 + 20320 20321 20314 + 20314 20321 20315 + 20322 20315 20321 + 20315 20322 20316 + 20189 20318 20183 + 20318 20189 20323 + 20323 20319 20318 + 20323 20324 20319 + 20319 20324 20325 + 20325 20320 20319 + 20321 20320 20325 + 20325 20326 20321 + 20321 20326 20322 + 20209 20323 20189 + 20324 20323 20209 + 20209 20213 20324 + 20324 20213 20327 + 20325 20324 20327 + 20326 20325 20327 + 20327 20328 20326 + 20322 20326 20328 + 20329 20322 20328 + 20316 20322 20329 + 20329 20330 20316 + 20316 20330 20317 + 20212 20327 20213 + 20327 20212 20328 + 20328 20212 20331 + 20331 20332 20328 + 20328 20332 20329 + 20333 20329 20332 + 20329 20333 20330 + 20330 20333 20334 + 20334 20317 20330 + 20219 20331 20212 + 20335 20331 20219 + 20332 20331 20335 + 20332 20335 20333 + 20334 20333 20335 + 20335 20336 20334 + 20337 20334 20336 + 20334 20337 20338 + 20338 20317 20334 + 20219 20336 20335 + 20336 20219 20218 + 20218 20339 20336 + 20336 20339 20337 + 20340 20337 20339 + 20338 20337 20340 + 20340 20341 20338 + 20338 20341 20342 + 20343 20338 20342 + 20317 20338 20343 + 20339 20218 20228 + 20228 20233 20339 + 20339 20233 20340 + 20344 20340 20233 + 20340 20344 20341 + 20341 20344 20345 + 20345 20346 20341 + 20341 20346 20342 + 20233 20232 20344 + 20345 20344 20232 + 20232 20238 20345 + 20243 20345 20238 + 20345 20243 20346 + 20346 20243 20347 + 20347 20342 20346 + 20347 20348 20342 + 20342 20348 20349 + 20349 20350 20342 + 20342 20350 20343 + 20347 20243 20242 + 20242 20351 20347 + 20348 20347 20351 + 20351 20352 20348 + 20348 20352 20353 + 20353 20354 20348 + 20354 20349 20348 + 20241 20351 20242 + 20241 20352 20351 + 20352 20241 20247 + 20247 20252 20352 + 20352 20252 20353 + 20251 20353 20252 + 20265 20353 20251 + 20353 20265 20355 + 20355 20354 20353 + 20356 20354 20355 + 20354 20356 20357 + 20357 20349 20354 + 20349 20357 20358 + 20358 20350 20349 + 20350 20358 20359 + 20359 20343 20350 + 20355 20265 20273 + 20273 20360 20355 + 20361 20355 20360 + 20355 20361 20356 + 20356 20361 20362 + 20362 20363 20356 + 20356 20363 20364 + 20364 20357 20356 + 20358 20357 20364 + 20280 20360 20273 + 20365 20360 20280 + 20360 20365 20361 + 20362 20361 20365 + 20365 20366 20362 + 20366 20367 20362 + 20368 20362 20367 + 20363 20362 20368 + 20365 20280 20279 + 20279 20366 20365 + 20366 20279 20284 + 20284 20369 20366 + 20366 20369 20370 + 20370 20367 20366 + 20367 20370 20371 + 20371 20372 20367 + 20367 20372 20368 + 20369 20284 20288 + 20288 20373 20369 + 20370 20369 20373 + 20374 20370 20373 + 20371 20370 20374 + 20292 20373 20288 + 20373 20292 20296 + 20296 20305 20373 + 20373 20305 20374 + 20304 20374 20305 + 20374 20304 10796 + 10796 20375 20374 + 20374 20375 20371 + 20371 20375 20376 + 20376 20377 20371 + 20377 20378 20371 + 20372 20371 20378 + 20378 20379 20372 + 20368 20372 20379 + 20375 10796 10795 + 10795 20376 20375 + 10800 20376 10795 + 20376 10800 20380 + 20380 20377 20376 + 20380 20381 20377 + 20377 20381 20382 + 20382 20378 20377 + 20382 20379 20378 + 20379 20382 20383 + 20383 20384 20379 + 20379 20384 20368 + 20380 10800 10799 + 10799 20385 20380 + 20381 20380 20385 + 20385 20386 20381 + 20381 20386 20387 + 20387 20383 20381 + 20383 20382 20381 + 10804 20385 10799 + 20385 10804 10809 + 10809 20386 20385 + 20386 10809 20388 + 20388 20387 20386 + 20387 20388 20389 + 20389 20390 20387 + 20387 20390 20391 + 20391 20383 20387 + 20384 20383 20391 + 20392 20388 10809 + 20389 20388 20392 + 20392 20393 20389 + 20389 20393 20394 + 20394 20395 20389 + 20390 20389 20395 + 20395 20396 20390 + 20391 20390 20396 + 10809 10808 20392 + 10814 20392 10808 + 20392 10814 20397 + 20397 20393 20392 + 20393 20397 20398 + 20398 20394 20393 + 20394 20398 20399 + 20399 20400 20394 + 20394 20400 20401 + 20401 20395 20394 + 20396 20395 20401 + 20397 10814 10813 + 10813 20402 20397 + 20397 20402 20403 + 20403 20398 20397 + 20399 20398 20403 + 20403 20404 20399 + 20399 20404 20405 + 20405 20406 20399 + 20400 20399 20406 + 10821 20402 10813 + 20402 10821 20407 + 20407 20403 20402 + 20403 20407 20408 + 20408 20404 20403 + 20404 20408 20409 + 20409 20405 20404 + 20410 20407 10821 + 20408 20407 20410 + 20410 20411 20408 + 20408 20411 20412 + 20412 20409 20408 + 20413 20409 20412 + 20405 20409 20413 + 10821 10825 20410 + 10830 20410 10825 + 20410 10830 10838 + 10838 20411 20410 + 20411 10838 20414 + 20414 20412 20411 + 20412 20414 20415 + 20415 20416 20412 + 20412 20416 20413 + 20417 20414 10838 + 20415 20414 20417 + 20417 20418 20415 + 20415 20418 20419 + 20419 20420 20415 + 20416 20415 20420 + 20420 20421 20416 + 20413 20416 20421 + 10838 10837 20417 + 20422 20417 10837 + 20417 20422 20423 + 20423 20418 20417 + 20418 20423 20424 + 20424 20419 20418 + 10837 10836 20422 + 10847 20422 10836 + 20423 20422 10847 + 10847 19834 20423 + 20423 19834 19833 + 19833 20424 20423 + 19839 20424 19833 + 20419 20424 19839 + 19839 19844 20419 + 20419 19844 20425 + 20425 20420 20419 + 20421 20420 20425 + 19829 19834 10847 + 10847 10846 19829 + 20425 19844 19843 + 19843 20426 20425 + 20427 20425 20426 + 20425 20427 20421 + 20421 20427 20428 + 20428 20429 20421 + 20421 20429 20413 + 19848 20426 19843 + 20430 20426 19848 + 20426 20430 20427 + 20428 20427 20430 + 20430 20431 20428 + 20432 20428 20431 + 20428 20432 20433 + 20433 20429 20428 + 20429 20433 20434 + 20434 20413 20429 + 20413 20434 20405 + 19848 19857 20430 + 20430 19857 20435 + 20435 20431 20430 + 20436 20431 20435 + 20431 20436 20432 + 20437 20432 20436 + 20433 20432 20437 + 20437 20438 20433 + 20433 20438 20439 + 20439 20434 20433 + 20405 20434 20439 + 20439 20406 20405 + 20435 19857 19856 + 19856 20440 20435 + 20441 20435 20440 + 20435 20441 20436 + 20436 20441 20442 + 20442 20443 20436 + 20436 20443 20437 + 19861 20440 19856 + 20444 20440 19861 + 20440 20444 20441 + 20442 20441 20444 + 20444 20445 20442 + 20446 20442 20445 + 20442 20446 20447 + 20447 20443 20442 + 20443 20447 20448 + 20448 20437 20443 + 19861 20449 20444 + 20444 20449 20450 + 20450 20445 20444 + 20451 20445 20450 + 20445 20451 20446 + 20452 20446 20451 + 20447 20446 20452 + 20449 19861 19866 + 19866 20453 20449 + 20450 20449 20453 + 20453 20454 20450 + 20455 20450 20454 + 20450 20455 20451 + 20451 20455 20456 + 20456 20457 20451 + 20451 20457 20452 + 20453 19866 19865 + 19865 20458 20453 + 20453 20458 20459 + 20459 20454 20453 + 20460 20454 20459 + 20454 20460 20455 + 20456 20455 20460 + 20458 19865 19874 + 19874 20461 20458 + 20459 20458 20461 + 20461 20462 20459 + 20463 20459 20462 + 20459 20463 20460 + 20460 20463 20134 + 20134 20464 20460 + 20460 20464 20456 + 20461 19874 19873 + 19873 20465 20461 + 20461 20465 20466 + 20466 20462 20461 + 20130 20462 20466 + 20462 20130 20463 + 20134 20463 20130 + 20465 19873 19882 + 19882 20467 20465 + 20466 20465 20467 + 20467 20125 20466 + 20124 20466 20125 + 20466 20124 20130 + 20467 19882 19881 + 19881 20468 20467 + 20467 20468 20116 + 20116 20125 20467 + 20468 19881 19890 + 19890 20112 20468 + 20116 20468 20112 + 20112 19890 19889 + 20138 20464 20134 + 20464 20138 20469 + 20469 20456 20464 + 20456 20469 20470 + 20470 20457 20456 + 20457 20470 20471 + 20471 20452 20457 + 20143 20469 20138 + 20470 20469 20143 + 20143 20472 20470 + 20470 20472 20473 + 20473 20471 20470 + 20474 20471 20473 + 20452 20471 20474 + 20474 20475 20452 + 20452 20475 20447 + 20147 20472 20143 + 20472 20147 20476 + 20476 20473 20472 + 20473 20476 20477 + 20477 20478 20473 + 20473 20478 20474 + 20474 20478 20479 + 20479 20480 20474 + 20475 20474 20480 + 20476 20147 20146 + 20146 20481 20476 + 20477 20476 20481 + 20481 20482 20477 + 20483 20477 20482 + 20478 20477 20483 + 20483 20479 20478 + 20151 20481 20146 + 20482 20481 20151 + 20151 20484 20482 + 20482 20484 20485 + 20485 20486 20482 + 20482 20486 20483 + 20487 20483 20486 + 20479 20483 20487 + 20484 20151 20150 + 20150 20488 20484 + 20484 20488 20489 + 20489 20485 20484 + 20490 20485 20489 + 20485 20490 20491 + 20491 20486 20485 + 20486 20491 20487 + 20155 20488 20150 + 20488 20155 20492 + 20492 20489 20488 + 20489 20492 20343 + 20343 20359 20489 + 20489 20359 20490 + 20317 20492 20155 + 20343 20492 20317 + 20490 20359 20358 + 20358 20493 20490 + 20493 20494 20490 + 20491 20490 20494 + 20494 20495 20491 + 20491 20495 20496 + 20496 20487 20491 + 20497 20487 20496 + 20487 20497 20479 + 20364 20493 20358 + 20493 20364 20498 + 20498 20499 20493 + 20493 20499 20500 + 20500 20494 20493 + 20500 20495 20494 + 20495 20500 20501 + 20501 20496 20495 + 20502 20496 20501 + 20496 20502 20497 + 20498 20364 20363 + 20363 20503 20498 + 20498 20503 20504 + 20504 20505 20498 + 20499 20498 20505 + 20505 20506 20499 + 20500 20499 20506 + 20506 20501 20500 + 20507 20501 20506 + 20501 20507 20502 + 20368 20503 20363 + 20503 20368 20384 + 20384 20504 20503 + 20391 20504 20384 + 20504 20391 20508 + 20508 20505 20504 + 20505 20508 20509 + 20509 20506 20505 + 20506 20509 20507 + 20510 20507 20509 + 20502 20507 20510 + 20510 20511 20502 + 20502 20511 20512 + 20512 20497 20502 + 20479 20497 20512 + 20512 20480 20479 + 20396 20508 20391 + 20509 20508 20396 + 20396 20513 20509 + 20509 20513 20510 + 20514 20510 20513 + 20510 20514 20515 + 20515 20511 20510 + 20511 20515 20516 + 20516 20512 20511 + 20512 20516 20517 + 20517 20480 20512 + 20480 20517 20475 + 20401 20513 20396 + 20513 20401 20514 + 20518 20514 20401 + 20515 20514 20518 + 20518 20519 20515 + 20515 20519 20520 + 20520 20516 20515 + 20517 20516 20520 + 20520 20448 20517 + 20517 20448 20447 + 20447 20475 20517 + 20401 20400 20518 + 20406 20518 20400 + 20518 20406 20439 + 20439 20519 20518 + 20519 20439 20438 + 20438 20520 20519 + 20520 20438 20437 + 20437 20448 20520 + 19923 20083 19924 + 20083 19923 19929 + 19929 20084 20083 + 20084 19929 20521 + 20521 20075 20084 + 20075 20521 20522 + 20522 20076 20075 + 20076 20522 20523 + 20523 20067 20076 + 19933 20521 19929 + 20522 20521 19933 + 19933 20524 20522 + 20522 20524 20525 + 20525 20523 20522 + 20526 20523 20525 + 20067 20523 20526 + 20526 20068 20067 + 20068 20526 20527 + 20527 20063 20068 + 19937 20524 19933 + 20524 19937 20528 + 20528 20525 20524 + 20525 20528 20529 + 20529 20530 20525 + 20525 20530 20526 + 20526 20530 20531 + 20531 20527 20526 + 20532 20527 20531 + 20063 20527 20532 + 19941 20528 19937 + 20529 20528 19941 + 19941 20533 20529 + 20529 20533 20534 + 20534 20535 20529 + 20530 20529 20535 + 20535 20531 20530 + 20531 20535 20536 + 20536 20537 20531 + 20531 20537 20532 + 19945 20533 19941 + 20533 19945 20538 + 20538 20534 20533 + 20534 20538 20539 + 20539 20540 20534 + 20534 20540 20536 + 20536 20535 20534 + 20541 20538 19945 + 20539 20538 20541 + 20541 20542 20539 + 20543 20539 20542 + 20540 20539 20543 + 20543 20544 20540 + 20536 20540 20544 + 20544 20545 20536 + 20537 20536 20545 + 19945 19949 20541 + 19954 20541 19949 + 20542 20541 19954 + 19954 20546 20542 + 20542 20546 20547 + 20547 20548 20542 + 20542 20548 20543 + 20549 20543 20548 + 20544 20543 20549 + 20546 19954 20550 + 20550 20551 20546 + 20546 20551 20552 + 20552 20547 20546 + 20553 20547 20552 + 20548 20547 20553 + 20553 20554 20548 + 20548 20554 20549 + 19953 20550 19954 + 19959 20550 19953 + 20550 19959 19967 + 19967 20551 20550 + 20551 19967 20555 + 20555 20552 20551 + 20552 20555 20556 + 20556 20557 20552 + 20552 20557 20553 + 20553 20557 20558 + 20558 20559 20553 + 20554 20553 20559 + 20560 20555 19967 + 20556 20555 20560 + 20560 20561 20556 + 20562 20556 20561 + 20557 20556 20562 + 20562 20558 20557 + 19967 19966 20560 + 19972 20560 19966 + 20560 19972 20563 + 20563 20561 20560 + 20561 20563 20564 + 20564 20565 20561 + 20561 20565 20566 + 20566 20562 20561 + 20567 20562 20566 + 20558 20562 20567 + 20563 19972 19971 + 19971 10992 20563 + 20564 20563 10992 + 20568 20564 10992 + 20569 20564 20568 + 20569 20565 20564 + 20565 20569 20570 + 20570 20566 20565 + 20570 20571 20566 + 20566 20571 20567 + 19979 10992 19971 + 10992 19979 20572 + 20572 10985 10992 + 10985 20572 10986 + 10986 20572 20573 + 20573 20574 10986 + 20575 20574 20573 + 20572 19979 19984 + 20573 20572 19984 + 20576 20573 19984 + 20575 20573 20576 + 20576 20577 20575 + 20578 20577 20576 + 20578 20576 20579 + 20579 20580 20578 + 20578 20580 11030 + 20579 20576 19984 + 19984 19994 20579 + 20581 20579 19994 + 20580 20579 20581 + 20580 20581 20582 + 20582 11030 20580 + 20583 11030 20582 + 11030 20583 20584 + 20584 11023 11030 + 11024 11023 20584 + 19994 19993 20581 + 20581 19993 19992 + 19992 20582 20581 + 20583 20582 19992 + 19992 20585 20583 + 20583 20585 20586 + 20586 20584 20583 + 20587 20585 19992 + 20585 20587 20588 + 20588 20586 20585 + 19992 20002 20587 + 20587 20002 20589 + 20589 20590 20587 + 20588 20587 20590 + 20590 20591 20588 + 20591 20592 20588 + 20593 20588 20592 + 20588 20593 20594 + 20006 20589 20002 + 20595 20589 20006 + 20589 20595 20596 + 20596 20590 20589 + 20590 20596 20597 + 20597 20591 20590 + 20006 20014 20595 + 10991 20568 10992 + 20598 20568 10991 + 20599 20568 20598 + 20568 20599 20569 + 20569 20599 20600 + 20600 20570 20569 + 20571 20570 20600 + 10991 10996 20598 + 20601 20598 10996 + 20599 20598 20601 + 20601 20602 20599 + 20599 20602 20600 + 20603 20601 10996 + 20604 20601 20603 + 20604 20602 20601 + 20602 20604 20605 + 20605 20606 20602 + 20602 20606 20600 + 20607 20603 10996 + 20608 20603 20607 + 20608 20609 20603 + 20603 20609 20604 + 20604 20609 20610 + 20605 20604 20610 + 20611 20607 10996 + 20612 20607 20611 + 20612 20613 20607 + 20607 20613 20608 + 20608 20613 20614 + 20614 20615 20608 + 20609 20608 20615 + 20615 20610 20609 + 11000 20611 10996 + 20616 20611 11000 + 20616 20617 20611 + 20611 20617 20612 + 20612 20617 20618 + 20619 20612 20618 + 20613 20612 20619 + 20619 20614 20613 + 11000 11006 20616 + 20616 11006 20620 + 20621 20616 20620 + 20617 20616 20621 + 20621 20622 20617 + 20617 20622 20618 + 11005 20620 11006 + 20620 11005 11004 + 20620 11004 20623 + 20623 20624 20620 + 20620 20624 20621 + 20625 20621 20624 + 20621 20625 20622 + 20622 20625 20626 + 20626 20618 20622 + 11010 20623 11004 + 20627 20623 11010 + 20623 20627 20624 + 20624 20627 20625 + 20625 20627 20628 + 20628 20626 20625 + 20629 20626 20628 + 20618 20626 20629 + 11010 20630 20627 + 20627 20630 20628 + 20631 20628 20630 + 20632 20628 20631 + 20628 20632 20629 + 20629 20632 20633 + 20634 20629 20633 + 20618 20629 20634 + 20630 11010 11016 + 11016 20635 20630 + 20630 20635 20631 + 20631 20635 20532 + 20532 20537 20631 + 20545 20631 20537 + 20631 20545 20632 + 20632 20545 20544 + 20544 20633 20632 + 20635 11016 20636 + 20636 20532 20635 + 20532 20636 20063 + 20063 20636 20054 + 20054 20636 11016 + 20549 20633 20544 + 20633 20549 20637 + 20637 20638 20633 + 20633 20638 20639 + 20639 20634 20633 + 20640 20634 20639 + 20634 20640 20641 + 20634 20641 20618 + 20637 20549 20554 + 20642 20637 20554 + 20643 20637 20642 + 20638 20637 20643 + 20643 20644 20638 + 20638 20644 20645 + 20645 20639 20638 + 20646 20639 20645 + 20639 20646 20640 + 20647 20642 20554 + 20648 20642 20647 + 20649 20642 20648 + 20642 20649 20643 + 20643 20649 20650 + 20650 20651 20643 + 20644 20643 20651 + 20554 20652 20647 + 20653 20647 20652 + 20647 20653 20654 + 20647 20654 20648 + 20648 20654 20655 + 20656 20648 20655 + 20649 20648 20656 + 20656 20650 20649 + 20559 20652 20554 + 20652 20559 20657 + 20652 20657 20653 + 20653 20657 20658 + 20659 20653 20658 + 20654 20653 20659 + 20659 20655 20654 + 20657 20559 20558 + 20558 20658 20657 + 20567 20658 20558 + 20658 20567 20660 + 20660 20661 20658 + 20658 20661 20662 + 20662 20663 20658 + 20663 20659 20658 + 20664 20659 20663 + 20659 20664 20655 + 20665 20660 20567 + 20666 20660 20665 + 20661 20660 20666 + 20661 20666 20667 + 20667 20668 20661 + 20661 20668 20662 + 20567 20571 20665 + 20600 20665 20571 + 20669 20665 20600 + 20665 20669 20666 + 20666 20669 20670 + 20670 20671 20666 + 20671 20667 20666 + 20672 20667 20671 + 20672 20668 20667 + 20668 20672 20673 + 20673 20662 20668 + 20669 20600 20674 + 20674 20670 20669 + 20675 20670 20674 + 20670 20675 20676 + 20676 20671 20670 + 20677 20671 20676 + 20671 20677 20672 + 20672 20677 20678 + 20678 20673 20672 + 20606 20674 20600 + 20675 20674 20606 + 20606 20679 20675 + 20675 20679 20680 + 20676 20675 20680 + 20680 20681 20676 + 20677 20676 20681 + 20681 20678 20677 + 20682 20678 20681 + 20678 20682 20683 + 20683 20673 20678 + 20673 20683 20662 + 20605 20679 20606 + 20679 20605 20684 + 20684 20680 20679 + 20685 20680 20684 + 20680 20685 20686 + 20686 20681 20680 + 20681 20686 20682 + 20682 20686 20687 + 20687 20688 20682 + 20683 20682 20688 + 20610 20684 20605 + 20689 20684 20610 + 20684 20689 20685 + 20685 20689 20690 + 20690 20691 20685 + 20685 20691 20687 + 20687 20686 20685 + 20610 20692 20689 + 20690 20689 20692 + 20692 20693 20690 + 20694 20690 20693 + 20690 20694 20695 + 20695 20691 20690 + 20691 20695 20696 + 20696 20687 20691 + 20697 20692 20610 + 20692 20697 20698 + 20698 20693 20692 + 20693 20698 20699 + 20699 20700 20693 + 20693 20700 20694 + 20610 20615 20697 + 20697 20615 20614 + 20614 20701 20697 + 20698 20697 20701 + 20701 20702 20698 + 20699 20698 20702 + 20702 20703 20699 + 20699 20703 20646 + 20646 20704 20699 + 20700 20699 20704 + 20614 20619 20701 + 20701 20619 20705 + 20705 20702 20701 + 20702 20705 20703 + 20703 20705 20641 + 20641 20640 20703 + 20703 20640 20646 + 20705 20619 20618 + 20618 20641 20705 + 20013 20706 20014 + 20706 20013 20012 + 20707 20706 20012 + 20706 20707 20708 + 20709 20706 20708 + 20708 20710 20709 + 20710 20711 20709 + 20596 20711 20710 + 20018 20707 20012 + 20023 20707 20018 + 20707 20023 20712 + 20712 20708 20707 + 20708 20712 20713 + 20708 20713 20714 + 20714 20710 20708 + 20710 20714 20591 + 20591 20597 20710 + 20710 20597 20596 + 20028 20712 20023 + 20713 20712 20028 + 20028 20033 20713 + 20714 20713 20033 + 20715 20714 20033 + 20591 20714 20715 + 20715 20592 20591 + 20592 20715 20716 + 20592 20716 20593 + 20033 20717 20715 + 20716 20715 20717 + 20717 20718 20716 + 20593 20716 20718 + 20718 20719 20593 + 20719 20720 20593 + 20720 20721 20593 + 20594 20593 20721 + 20038 20717 20033 + 20717 20038 20718 + 20718 20038 20037 + 20037 20719 20718 + 20037 20036 20719 + 20719 20036 20041 + 20041 20720 20719 + 20041 11025 20720 + 20720 11025 11024 + 11024 20721 20720 + 20584 20721 11024 + 20721 20584 20594 + 20704 20722 20700 + 20722 20704 20723 + 20722 20723 20724 + 20724 20725 20722 + 20722 20725 20694 + 20694 20700 20722 + 20723 20704 20646 + 20646 20645 20723 + 20723 20645 20644 + 20644 20724 20723 + 20651 20724 20644 + 20724 20651 20726 + 20726 20725 20724 + 20725 20726 20695 + 20695 20694 20725 + 20726 20651 20650 + 20650 20727 20726 + 20695 20726 20727 + 20696 20695 20727 + 20727 20728 20696 + 20729 20696 20728 + 20687 20696 20729 + 20729 20688 20687 + 20727 20650 20656 + 20727 20656 20730 + 20730 20728 20727 + 20731 20728 20730 + 20728 20731 20729 + 20732 20729 20731 + 20688 20729 20732 + 20732 20733 20688 + 20688 20733 20683 + 20662 20683 20733 + 20655 20730 20656 + 20731 20730 20655 + 20655 20664 20731 + 20731 20664 20732 + 20663 20732 20664 + 20732 20663 20733 + 20733 20663 20662 + 8578 20734 8572 + 20735 20734 8578 + 20736 20734 20735 + 20734 20736 20737 + 20737 8572 20734 + 8573 8572 20737 + 8578 20738 20735 + 20735 20738 20739 + 20740 20735 20739 + 20735 20740 20736 + 20738 8578 8577 + 8577 20741 20738 + 20738 20741 20742 + 20742 20739 20738 + 20739 20742 20743 + 20743 20744 20739 + 20739 20744 20740 + 20741 8577 20745 + 20745 20746 20741 + 20742 20741 20746 + 20746 20747 20742 + 20743 20742 20747 + 20748 20745 8577 + 20749 20745 20748 + 20746 20745 20749 + 20749 20750 20746 + 20746 20750 20751 + 20751 20747 20746 + 20752 20747 20751 + 20747 20752 20743 + 20753 20748 8577 + 20754 20748 20753 + 20748 20754 20755 + 20755 20756 20748 + 20748 20756 20749 + 8577 8576 20753 + 20757 20753 8576 + 20757 20758 20753 + 20753 20758 20754 + 20754 20758 20759 + 20759 20760 20754 + 20755 20754 20760 + 8576 8563 20757 + 8562 20757 8563 + 20757 8562 20759 + 20758 20757 20759 + 20759 8562 8561 + 20759 8561 20761 + 20761 20760 20759 + 20762 20760 20761 + 20760 20762 20755 + 20755 20762 20763 + 20763 20764 20755 + 20756 20755 20764 + 20764 20765 20756 + 20749 20756 20765 + 20766 20761 8561 + 20767 20761 20766 + 20761 20767 20762 + 20762 20767 20768 + 20768 20763 20762 + 20769 20763 20768 + 20763 20769 20770 + 20770 20764 20763 + 20764 20770 20765 + 8561 8560 20766 + 8560 20771 20766 + 20772 20766 20771 + 20766 20772 20773 + 20773 20774 20766 + 20766 20774 20767 + 20767 20774 20775 + 20775 20768 20767 + 20769 20768 20775 + 8575 20771 8560 + 20771 8575 20776 + 20771 20776 20772 + 20777 20772 20776 + 20773 20772 20777 + 20777 20778 20773 + 20779 20773 20778 + 20774 20773 20779 + 20779 20780 20774 + 20774 20780 20775 + 20776 8575 8574 + 8574 20781 20776 + 20776 20781 20777 + 20782 20777 20781 + 20777 20782 20783 + 20783 20778 20777 + 20778 20783 20784 + 20784 20785 20778 + 20778 20785 20779 + 20786 20781 8574 + 20781 20786 20782 + 20782 20786 20787 + 20787 20788 20782 + 20783 20782 20788 + 20788 20789 20783 + 20784 20783 20789 + 8574 20790 20786 + 20786 20790 20791 + 20791 20787 20786 + 20787 20791 20792 + 20792 20793 20787 + 20787 20793 20794 + 20794 20788 20787 + 20789 20788 20794 + 20790 8574 20795 + 20795 20796 20790 + 20790 20796 20797 + 20797 20791 20790 + 20792 20791 20797 + 8573 20795 8574 + 20798 20795 8573 + 20795 20798 20796 + 20796 20798 20799 + 20799 20797 20796 + 20797 20799 20800 + 20800 20801 20797 + 20797 20801 20792 + 8573 20737 20798 + 20798 20737 20736 + 20799 20798 20736 + 20736 20802 20799 + 20800 20799 20802 + 20802 20803 20800 + 20800 20803 20804 + 20804 20805 20800 + 20801 20800 20805 + 20805 20806 20801 + 20792 20801 20806 + 20807 20802 20736 + 20803 20802 20807 + 20808 20803 20807 + 20803 20808 20809 + 20809 20804 20803 + 20736 20740 20807 + 20810 20807 20740 + 20808 20807 20810 + 20810 20811 20808 + 20808 20811 20812 + 20812 20809 20808 + 20813 20809 20812 + 20804 20809 20813 + 20740 20744 20810 + 20814 20810 20744 + 20810 20814 20815 + 20815 20811 20810 + 20811 20815 20816 + 20816 20812 20811 + 20812 20816 20817 + 20817 20818 20812 + 20812 20818 20813 + 20744 20743 20814 + 20819 20814 20743 + 20815 20814 20819 + 20819 20820 20815 + 20815 20820 20821 + 20821 20816 20815 + 20817 20816 20821 + 20743 20752 20819 + 20822 20819 20752 + 20819 20822 20823 + 20823 20820 20819 + 20820 20823 20824 + 20824 20821 20820 + 20821 20824 20825 + 20825 20826 20821 + 20821 20826 20817 + 20752 20827 20822 + 20828 20822 20827 + 20823 20822 20828 + 20828 20829 20823 + 20823 20829 20830 + 20830 20824 20823 + 20825 20824 20830 + 20751 20827 20752 + 20827 20751 20831 + 20831 20832 20827 + 20827 20832 20828 + 20833 20828 20832 + 20828 20833 20834 + 20834 20829 20828 + 20829 20834 20835 + 20835 20830 20829 + 20836 20831 20751 + 20837 20831 20836 + 20831 20837 20832 + 20832 20837 20833 + 20833 20837 20838 + 20839 20833 20838 + 20834 20833 20839 + 20751 20750 20836 + 20840 20836 20750 + 20836 20840 20841 + 20841 20838 20836 + 20836 20838 20837 + 20750 20749 20840 + 20842 20840 20749 + 20841 20840 20842 + 20842 20843 20841 + 20841 20843 20844 + 20844 20845 20841 + 20838 20841 20845 + 20765 20842 20749 + 20846 20842 20765 + 20846 20843 20842 + 20843 20846 20847 + 20847 20844 20843 + 20848 20844 20847 + 20844 20848 20849 + 20849 20845 20844 + 20845 20849 20850 + 20845 20850 20838 + 20765 20770 20846 + 20846 20770 20769 + 20769 20851 20846 + 20851 20847 20846 + 20848 20847 20851 + 20851 20852 20848 + 20848 20852 20853 + 20849 20848 20853 + 20853 20854 20849 + 20850 20849 20854 + 20854 20855 20850 + 20838 20850 20855 + 20855 20839 20838 + 20775 20851 20769 + 20851 20775 20852 + 20852 20775 20780 + 20780 20856 20852 + 20852 20856 20853 + 20785 20853 20856 + 20853 20785 20784 + 20853 20784 20857 + 20857 20854 20853 + 20855 20854 20857 + 20855 20857 20858 + 20858 20839 20855 + 20856 20780 20779 + 20856 20779 20785 + 20858 20857 20784 + 20789 20858 20784 + 20859 20858 20789 + 20839 20858 20859 + 20859 20860 20839 + 20839 20860 20834 + 20834 20860 20861 + 20861 20835 20834 + 20789 20862 20859 + 20859 20862 20863 + 20863 20864 20859 + 20860 20859 20864 + 20864 20861 20860 + 20794 20862 20789 + 20862 20794 20865 + 20865 20863 20862 + 20863 20865 20866 + 20866 20867 20863 + 20863 20867 20868 + 20868 20864 20863 + 20861 20864 20868 + 20869 20865 20794 + 20866 20865 20869 + 20869 20870 20866 + 20866 20870 20871 + 20871 20872 20866 + 20867 20866 20872 + 20872 20873 20867 + 20868 20867 20873 + 20794 20793 20869 + 20874 20869 20793 + 20869 20874 20875 + 20875 20870 20869 + 20870 20875 20876 + 20876 20871 20870 + 20793 20792 20874 + 20806 20874 20792 + 20875 20874 20806 + 20806 20877 20875 + 20875 20877 20878 + 20878 20876 20875 + 20879 20876 20878 + 20871 20876 20879 + 20879 20880 20871 + 20871 20880 20881 + 20881 20872 20871 + 20873 20872 20881 + 20882 20877 20806 + 20877 20882 20883 + 20883 20878 20877 + 20878 20883 20884 + 20884 20885 20878 + 20878 20885 20879 + 20806 20805 20882 + 20882 20805 20804 + 20804 20886 20882 + 20882 20886 20887 + 20887 20883 20882 + 20884 20883 20887 + 20887 20888 20884 + 20884 20888 20889 + 20889 20890 20884 + 20885 20884 20890 + 20813 20886 20804 + 20886 20813 20891 + 20891 20887 20886 + 20887 20891 20892 + 20892 20888 20887 + 20888 20892 20893 + 20893 20889 20888 + 20894 20891 20813 + 20892 20891 20894 + 20894 20895 20892 + 20892 20895 20896 + 20896 20893 20892 + 20897 20893 20896 + 20889 20893 20897 + 20813 20818 20894 + 20898 20894 20818 + 20894 20898 20899 + 20899 20895 20894 + 20895 20899 20900 + 20900 20896 20895 + 20896 20900 20901 + 20901 20902 20896 + 20896 20902 20897 + 20818 20817 20898 + 20903 20898 20817 + 20899 20898 20903 + 20903 20904 20899 + 20899 20904 20905 + 20905 20900 20899 + 20901 20900 20905 + 20905 20906 20901 + 20907 20901 20906 + 20902 20901 20907 + 20817 20826 20903 + 20908 20903 20826 + 20903 20908 20909 + 20909 20904 20903 + 20904 20909 20910 + 20910 20905 20904 + 20906 20905 20910 + 20911 20906 20910 + 20907 20906 20911 + 20826 20825 20908 + 20912 20908 20825 + 20909 20908 20912 + 20912 20913 20909 + 20909 20913 20914 + 20914 20910 20909 + 20911 20910 20914 + 20914 20915 20911 + 20916 20911 20915 + 20916 20907 20911 + 20825 20917 20912 + 20918 20912 20917 + 20912 20918 20919 + 20919 20913 20912 + 20913 20919 20920 + 20920 20914 20913 + 20915 20914 20920 + 20921 20915 20920 + 20916 20915 20921 + 20830 20917 20825 + 20922 20917 20830 + 20917 20922 20918 + 20923 20918 20922 + 20919 20918 20923 + 20923 20924 20919 + 20919 20924 20925 + 20925 20920 20919 + 20921 20920 20925 + 20830 20835 20922 + 20922 20835 20861 + 20861 20926 20922 + 20922 20926 20923 + 20927 20923 20926 + 20923 20927 20928 + 20928 20924 20923 + 20924 20928 20929 + 20929 20925 20924 + 20930 20925 20929 + 20925 20930 20921 + 20868 20926 20861 + 20926 20868 20927 + 20873 20927 20868 + 20928 20927 20873 + 20873 20931 20928 + 20928 20931 20932 + 20932 20929 20928 + 20933 20929 20932 + 20933 20930 20929 + 20934 20930 20933 + 20934 20921 20930 + 20934 20916 20921 + 20907 20916 20934 + 20881 20931 20873 + 20931 20881 20935 + 20935 20932 20931 + 20936 20932 20935 + 20932 20936 20933 + 20933 20936 20937 + 20937 20934 20933 + 20934 20937 20938 + 20938 20907 20934 + 20907 20938 20902 + 20938 20897 20902 + 20939 20935 20881 + 20940 20935 20939 + 20940 20936 20935 + 20937 20936 20940 + 20941 20937 20940 + 20937 20941 20938 + 20881 20880 20939 + 20942 20939 20880 + 20939 20942 20943 + 20943 20944 20939 + 20939 20944 20940 + 20941 20940 20944 + 20945 20941 20944 + 20941 20945 20938 + 20880 20879 20942 + 20946 20942 20879 + 20943 20942 20946 + 20946 20947 20943 + 20945 20943 20947 + 20944 20943 20945 + 20879 20885 20946 + 20890 20946 20885 + 20946 20890 20948 + 20948 20947 20946 + 20947 20948 20949 + 20949 20945 20947 + 20945 20949 20938 + 20938 20949 20950 + 20950 20897 20938 + 20897 20950 20889 + 20889 20950 20948 + 20948 20890 20889 + 20949 20948 20950 + 8554 8487 8550 + 8488 8487 8554 + 8554 20951 8488 + 8489 8488 20951 + 20951 20952 8489 + 8482 8489 20952 + 20952 20953 8482 + 20953 8478 8482 + 8554 8553 20951 + 20951 8553 20954 + 20954 20952 20951 + 20953 20952 20954 + 20953 20954 20955 + 20955 8478 20953 + 20955 8472 8478 + 8472 20955 8473 + 8473 20955 20954 + 20954 8553 8473 + 8493 8550 8487 + 8498 8550 8493 + 8550 8498 20956 + 20956 8551 8550 + 8551 20956 20957 + 20957 20958 8551 + 8551 20958 8545 + 20959 20956 8498 + 20957 20956 20959 + 20959 20960 20957 + 20957 20960 20961 + 20961 20962 20957 + 20958 20957 20962 + 20962 20963 20958 + 8545 20958 20963 + 20963 8546 8545 + 8498 8497 20959 + 20964 20959 8497 + 20959 20964 20965 + 20965 20960 20959 + 20960 20965 20966 + 20966 20961 20960 + 8497 8496 20964 + 8507 20964 8496 + 20965 20964 8507 + 8507 20967 20965 + 20965 20967 20968 + 20968 20966 20965 + 20969 20966 20968 + 20961 20966 20969 + 20969 20970 20961 + 20961 20970 20971 + 20971 20962 20961 + 20963 20962 20971 + 8510 20967 8507 + 20967 8510 20972 + 20972 20968 20967 + 20968 20972 20973 + 20973 20974 20968 + 20968 20974 20969 + 20969 20974 20975 + 20975 20976 20969 + 20970 20969 20976 + 8515 20972 8510 + 20973 20972 8515 + 8515 20977 20973 + 20973 20977 20978 + 20978 20979 20973 + 20974 20973 20979 + 20979 20975 20974 + 8520 20977 8515 + 20977 8520 20980 + 20980 20978 20977 + 20978 20980 20981 + 20981 20982 20978 + 20978 20982 20983 + 20983 20979 20978 + 20975 20979 20983 + 20984 20980 8520 + 20981 20980 20984 + 20984 20985 20981 + 20981 20985 20986 + 20986 20987 20981 + 20982 20981 20987 + 20987 20988 20982 + 20983 20982 20988 + 8520 8519 20984 + 8525 20984 8519 + 20984 8525 20989 + 20989 20985 20984 + 20985 20989 20990 + 20990 20986 20985 + 20986 20990 20991 + 20991 20992 20986 + 20986 20992 20993 + 20993 20987 20986 + 20988 20987 20993 + 20989 8525 8524 + 8524 20994 20989 + 20989 20994 20995 + 20995 20990 20989 + 20991 20990 20995 + 20995 20996 20991 + 20991 20996 20997 + 20991 20997 20998 + 20992 20991 20998 + 20993 20992 20998 + 8534 20994 8524 + 20994 8534 20999 + 20999 20995 20994 + 20995 20999 21000 + 21000 20996 20995 + 20996 21000 20997 + 21000 21001 20997 + 20998 20997 21001 + 21002 20998 21001 + 20993 20998 21002 + 21003 20993 21002 + 20993 21003 20988 + 21004 20999 8534 + 21000 20999 21004 + 21004 21005 21000 + 21000 21005 21001 + 21006 21001 21005 + 21001 21006 21007 + 21007 21002 21001 + 8534 21008 21004 + 21009 21004 21008 + 21004 21009 21010 + 21010 21005 21004 + 21005 21010 21006 + 21006 21010 21011 + 21012 21006 21011 + 21006 21012 21007 + 8533 21008 8534 + 21013 21008 8533 + 21008 21013 21009 + 21014 21009 21013 + 21010 21009 21014 + 21014 21011 21010 + 21015 21011 21014 + 21011 21015 21012 + 21015 21016 21012 + 21007 21012 21016 + 8533 8538 21013 + 21013 8538 21017 + 21017 21018 21013 + 21013 21018 21014 + 21019 21014 21018 + 21014 21019 21015 + 21015 21019 21020 + 21020 21016 21015 + 21021 21016 21020 + 21016 21021 21007 + 21017 8538 8537 + 8537 21022 21017 + 21023 21017 21022 + 21017 21023 21024 + 21024 21018 21017 + 21018 21024 21019 + 21020 21019 21024 + 21024 21025 21020 + 21026 21020 21025 + 21020 21026 21021 + 8542 21022 8537 + 21027 21022 8542 + 21022 21027 21023 + 21028 21023 21027 + 21024 21023 21028 + 21028 21025 21024 + 21029 21025 21028 + 21025 21029 21026 + 21030 21026 21029 + 21021 21026 21030 + 21030 21031 21021 + 21021 21031 21007 + 8542 8546 21027 + 21027 8546 20963 + 20963 21032 21027 + 21027 21032 21028 + 21033 21028 21032 + 21028 21033 21029 + 21029 21033 21034 + 21034 21035 21029 + 21029 21035 21030 + 20971 21032 20963 + 21032 20971 21033 + 21034 21033 20971 + 20971 20970 21034 + 20976 21034 20970 + 21034 20976 21036 + 21036 21035 21034 + 21035 21036 21037 + 21037 21030 21035 + 21030 21037 21038 + 21038 21031 21030 + 21031 21038 21039 + 21039 21007 21031 + 21007 21039 21002 + 21036 20976 20975 + 20975 21040 21036 + 21036 21040 21041 + 21041 21037 21036 + 21038 21037 21041 + 21041 21042 21038 + 21038 21042 21039 + 21042 21043 21039 + 21043 21002 21039 + 21043 21003 21002 + 20988 21003 21043 + 20983 21040 20975 + 21040 20983 21044 + 21044 21041 21040 + 21041 21044 21043 + 21043 21042 21041 + 20988 21044 20983 + 21043 21044 20988 + 21045 8403 8406 + 8403 21045 21046 + 21046 21047 8403 + 8404 8403 21047 + 21047 8405 8404 + 21045 8406 21048 + 21048 21049 21045 + 21045 21049 21050 + 21050 21046 21045 + 21051 21046 21050 + 21047 21046 21051 + 21048 8406 8359 + 8359 8358 21048 + 21048 8358 8357 + 21052 21048 8357 + 21048 21052 21053 + 21053 21049 21048 + 21050 21049 21053 + 21054 21050 21053 + 21050 21054 21055 + 21055 21056 21050 + 21050 21056 21051 + 21057 21052 8357 + 21053 21052 21057 + 21057 21058 21053 + 21053 21058 21059 + 21059 21054 21053 + 21055 21054 21059 + 8362 21057 8357 + 21057 8362 21060 + 21060 21058 21057 + 21058 21060 21061 + 21061 21059 21058 + 21059 21061 21062 + 21062 21063 21059 + 21059 21063 21055 + 21060 8362 8361 + 8361 21064 21060 + 21060 21064 21065 + 21065 21061 21060 + 21062 21061 21065 + 21065 21066 21062 + 21062 21066 21067 + 21067 21068 21062 + 21063 21062 21068 + 21069 21064 8361 + 21064 21069 21070 + 21070 21065 21064 + 21065 21070 21071 + 21071 21066 21065 + 21066 21071 21072 + 21072 21067 21066 + 8361 8365 21069 + 21069 8365 21073 + 21073 21074 21069 + 21070 21069 21074 + 21074 21075 21070 + 21071 21070 21075 + 21075 21076 21071 + 21072 21071 21076 + 8370 21073 8365 + 21077 21073 8370 + 21074 21073 21077 + 21077 21078 21074 + 21074 21078 21079 + 21079 21075 21074 + 21076 21075 21079 + 8370 21080 21077 + 21077 21080 21081 + 21081 21082 21077 + 21078 21077 21082 + 21082 21083 21078 + 21079 21078 21083 + 21084 21080 8370 + 21080 21084 21085 + 21085 21081 21080 + 21081 21085 21086 + 21086 21087 21081 + 21081 21087 21088 + 21088 21082 21081 + 21083 21082 21088 + 8370 8369 21084 + 21084 8369 21089 + 21089 21090 21084 + 21084 21090 21091 + 21091 21085 21084 + 21086 21085 21091 + 8368 21089 8369 + 21092 21089 8368 + 21089 21092 21093 + 21093 21090 21089 + 21090 21093 21094 + 21094 21091 21090 + 21091 21094 21095 + 21095 21096 21091 + 21091 21096 21086 + 8368 21097 21092 + 21092 21097 21098 + 21098 21099 21092 + 21099 21100 21092 + 21093 21092 21100 + 8374 21097 8368 + 21097 8374 21101 + 21101 21098 21097 + 21102 21098 21101 + 21098 21102 21103 + 21103 21099 21098 + 21104 21099 21103 + 21099 21104 21105 + 21105 21100 21099 + 21106 21101 8374 + 21102 21101 21106 + 21106 21107 21102 + 21103 21102 21107 + 21107 21108 21103 + 21108 21109 21103 + 21109 21110 21103 + 21104 21103 21110 + 8379 21106 8374 + 21111 21106 8379 + 21107 21106 21111 + 21107 21111 21112 + 21112 21108 21107 + 21113 21108 21112 + 21108 21113 21114 + 21114 21109 21108 + 8379 8384 21111 + 21111 8384 21115 + 21115 21112 21111 + 21113 21112 21115 + 21115 21116 21113 + 21114 21113 21116 + 21116 21117 21114 + 21117 21118 21114 + 21119 21114 21118 + 21119 21109 21114 + 8384 21120 21115 + 21120 21121 21115 + 21121 21122 21115 + 21123 21115 21122 + 21116 21115 21123 + 21116 21123 21124 + 21124 21117 21116 + 8383 21120 8384 + 21120 8383 21125 + 21120 21125 21121 + 21125 21126 21121 + 21126 21127 21121 + 21122 21121 21127 + 21128 21122 21127 + 21129 21122 21128 + 21122 21129 21123 + 21125 8383 8389 + 21125 8389 21130 + 21130 21126 21125 + 21127 21126 21130 + 21130 21131 21127 + 21128 21127 21131 + 8389 8388 21130 + 8388 21132 21130 + 21131 21130 21132 + 21131 21132 21133 + 21131 21133 21128 + 21133 21134 21128 + 21128 21134 21135 + 21136 21128 21135 + 21128 21136 21129 + 8388 8395 21132 + 8395 21137 21132 + 21132 21137 21133 + 21138 21133 21137 + 21134 21133 21138 + 21139 21134 21138 + 21135 21134 21139 + 21140 21137 8395 + 21137 21140 21138 + 21141 21138 21140 + 21139 21138 21141 + 21141 21142 21139 + 21135 21139 21142 + 21142 21143 21135 + 21135 21143 21144 + 21135 21144 21136 + 8395 8394 21140 + 21145 21140 8394 + 21145 21141 21140 + 21141 21145 21146 + 21147 21141 21146 + 21141 21147 21142 + 21147 21148 21142 + 21143 21142 21148 + 21148 21149 21143 + 21144 21143 21149 + 8394 8400 21145 + 21146 21145 8400 + 8400 21150 21146 + 21151 21146 21150 + 21147 21146 21151 + 21151 21152 21147 + 21148 21147 21152 + 21153 21148 21152 + 21149 21148 21153 + 8400 8399 21150 + 8399 8405 21150 + 21150 8405 21047 + 21047 21154 21150 + 21150 21154 21151 + 21155 21151 21154 + 21151 21155 21156 + 21156 21152 21151 + 21157 21152 21156 + 21152 21157 21153 + 21051 21154 21047 + 21154 21051 21155 + 21155 21051 21056 + 21158 21155 21056 + 21155 21158 21159 + 21156 21155 21159 + 21160 21156 21159 + 21160 21157 21156 + 21160 21161 21157 + 21157 21161 21162 + 21162 21153 21157 + 21056 21055 21158 + 21055 21163 21158 + 21159 21158 21163 + 21164 21159 21163 + 21164 21160 21159 + 21164 21165 21160 + 21165 21161 21160 + 21161 21165 21166 + 21166 21162 21161 + 21167 21163 21055 + 21167 21164 21163 + 21164 21167 21168 + 21168 21165 21164 + 21165 21168 21169 + 21169 21166 21165 + 21166 21169 21170 + 21170 21171 21166 + 21166 21171 21162 + 21172 21167 21055 + 21168 21167 21172 + 21172 21173 21168 + 21168 21173 21174 + 21174 21169 21168 + 21170 21169 21174 + 21055 21063 21172 + 21068 21172 21063 + 21172 21068 21175 + 21175 21173 21172 + 21173 21175 21176 + 21176 21174 21173 + 21174 21176 21177 + 21177 21178 21174 + 21174 21178 21170 + 21175 21068 21067 + 21067 21179 21175 + 21175 21179 21180 + 21180 21176 21175 + 21177 21176 21180 + 21180 21181 21177 + 21177 21181 21182 + 21182 21183 21177 + 21178 21177 21183 + 21184 21179 21067 + 21179 21184 21185 + 21185 21180 21179 + 21180 21185 21186 + 21186 21181 21180 + 21181 21186 21187 + 21187 21182 21181 + 21067 21072 21184 + 21184 21072 21188 + 21188 21189 21184 + 21185 21184 21189 + 21189 21190 21185 + 21186 21185 21190 + 21190 21191 21186 + 21187 21186 21191 + 21076 21188 21072 + 21192 21188 21076 + 21189 21188 21192 + 21192 21193 21189 + 21189 21193 21194 + 21194 21190 21189 + 21191 21190 21194 + 21076 21195 21192 + 21192 21195 21196 + 21196 21197 21192 + 21197 21198 21192 + 21198 21199 21192 + 21193 21192 21199 + 21079 21195 21076 + 21195 21079 21200 + 21200 21196 21195 + 21196 21200 21201 + 21201 21202 21196 + 21196 21202 21203 + 21203 21197 21196 + 21083 21200 21079 + 21201 21200 21083 + 21083 21204 21201 + 21201 21204 21205 + 21205 21206 21201 + 21202 21201 21206 + 21206 21207 21202 + 21203 21202 21207 + 21088 21204 21083 + 21204 21088 21208 + 21208 21205 21204 + 21205 21208 21209 + 21209 21210 21205 + 21205 21210 21211 + 21211 21206 21205 + 21207 21206 21211 + 21212 21208 21088 + 21209 21208 21212 + 21212 21213 21209 + 21209 21213 21214 + 21214 21215 21209 + 21210 21209 21215 + 21215 21216 21210 + 21211 21210 21216 + 21088 21087 21212 + 21217 21212 21087 + 21212 21217 21218 + 21218 21213 21212 + 21213 21218 21219 + 21219 21214 21213 + 21087 21086 21217 + 21220 21217 21086 + 21218 21217 21220 + 21220 21221 21218 + 21218 21221 21222 + 21222 21219 21218 + 21223 21219 21222 + 21214 21219 21223 + 21086 21096 21220 + 21224 21220 21096 + 21220 21224 21225 + 21225 21221 21220 + 21221 21225 21226 + 21226 21222 21221 + 21222 21226 21227 + 21227 21228 21222 + 21222 21228 21223 + 21096 21095 21224 + 21229 21224 21095 + 21225 21224 21229 + 21229 21230 21225 + 21225 21230 21231 + 21231 21226 21225 + 21227 21226 21231 + 21231 21232 21227 + 21227 21232 21233 + 21228 21227 21233 + 21095 21234 21229 + 21235 21229 21234 + 21229 21235 21236 + 21236 21230 21229 + 21230 21236 21237 + 21237 21231 21230 + 21231 21237 21238 + 21238 21232 21231 + 21233 21232 21238 + 21239 21234 21095 + 21240 21234 21239 + 21234 21240 21235 + 21241 21235 21240 + 21236 21235 21241 + 21241 21242 21236 + 21236 21242 21243 + 21243 21237 21236 + 21238 21237 21243 + 21095 21094 21239 + 21239 21094 21093 + 21093 21244 21239 + 21245 21239 21244 + 21239 21245 21240 + 21240 21245 21246 + 21246 21247 21240 + 21240 21247 21241 + 21100 21244 21093 + 21248 21244 21100 + 21244 21248 21245 + 21246 21245 21248 + 21249 21246 21248 + 21250 21246 21249 + 21246 21250 21251 + 21251 21247 21246 + 21247 21251 21252 + 21252 21241 21247 + 21100 21105 21248 + 21248 21105 21253 + 21253 21254 21248 + 21248 21254 21255 + 21255 21249 21248 + 21253 21105 21104 + 21104 21256 21253 + 21257 21253 21256 + 21253 21257 21258 + 21258 21254 21253 + 21254 21258 21259 + 21259 21255 21254 + 21110 21256 21104 + 21256 21110 21260 + 21260 21261 21256 + 21256 21261 21257 + 21257 21261 21262 + 21262 21263 21257 + 21258 21257 21263 + 21260 21110 21109 + 21109 21119 21260 + 21264 21260 21119 + 21261 21260 21264 + 21264 21262 21261 + 21262 21264 21265 + 21265 21266 21262 + 21262 21266 21267 + 21267 21263 21262 + 21119 21268 21264 + 21265 21264 21268 + 21268 21269 21265 + 21265 21269 21270 + 21270 21271 21265 + 21266 21265 21271 + 21271 21272 21266 + 21267 21266 21272 + 21118 21268 21119 + 21269 21268 21118 + 21269 21118 21117 + 21117 21273 21269 + 21269 21273 21270 + 21274 21270 21273 + 21270 21274 21275 + 21270 21275 21276 + 21276 21271 21270 + 21276 21272 21271 + 21273 21117 21124 + 21273 21124 21274 + 21274 21124 21123 + 21277 21274 21123 + 21274 21277 21278 + 21275 21274 21278 + 21275 21278 21279 + 21276 21275 21279 + 21280 21276 21279 + 21272 21276 21280 + 21123 21129 21277 + 21281 21277 21129 + 21278 21277 21281 + 21278 21281 21282 + 21278 21282 21279 + 21129 21283 21281 + 21283 21284 21281 + 21284 21285 21281 + 21281 21285 21282 + 21285 21286 21282 + 21282 21286 21287 + 21287 21279 21282 + 21136 21283 21129 + 21283 21136 21144 + 21144 21284 21283 + 21288 21284 21144 + 21284 21288 21286 + 21286 21285 21284 + 21288 21144 21149 + 21288 21149 21289 + 21287 21288 21289 + 21287 21286 21288 + 21153 21289 21149 + 21290 21289 21153 + 21289 21290 21291 + 21291 21287 21289 + 21287 21291 21279 + 21279 21291 21292 + 21292 21293 21279 + 21279 21293 21280 + 21153 21162 21290 + 21171 21290 21162 + 21290 21171 21292 + 21292 21291 21290 + 21294 21292 21171 + 21292 21294 21295 + 21295 21293 21292 + 21293 21295 21296 + 21296 21280 21293 + 21297 21280 21296 + 21280 21297 21272 + 21171 21170 21294 + 21298 21294 21170 + 21295 21294 21298 + 21298 21299 21295 + 21295 21299 21300 + 21300 21296 21295 + 21301 21296 21300 + 21296 21301 21297 + 21170 21178 21298 + 21183 21298 21178 + 21298 21183 21299 + 21299 21183 21182 + 21182 21300 21299 + 21302 21300 21182 + 21300 21302 21301 + 21301 21302 21303 + 21303 21304 21301 + 21297 21301 21304 + 21304 21305 21297 + 21272 21297 21305 + 21305 21267 21272 + 21187 21302 21182 + 21302 21187 21306 + 21306 21303 21302 + 21303 21306 21307 + 21307 21308 21303 + 21303 21308 21309 + 21309 21304 21303 + 21305 21304 21309 + 21191 21306 21187 + 21307 21306 21191 + 21191 21310 21307 + 21307 21310 21311 + 21311 21312 21307 + 21308 21307 21312 + 21312 21313 21308 + 21309 21308 21313 + 21194 21310 21191 + 21310 21194 21314 + 21314 21311 21310 + 21311 21314 21315 + 21315 21316 21311 + 21311 21316 21317 + 21317 21312 21311 + 21313 21312 21317 + 21318 21314 21194 + 21315 21314 21318 + 21318 21319 21315 + 21315 21319 21320 + 21320 21321 21315 + 21316 21315 21321 + 21321 21322 21316 + 21317 21316 21322 + 21194 21193 21318 + 21199 21318 21193 + 21318 21199 21323 + 21323 21319 21318 + 21319 21323 21324 + 21324 21320 21319 + 21320 21324 21325 + 21325 21326 21320 + 21320 21326 21327 + 21327 21321 21320 + 21322 21321 21327 + 21323 21199 21198 + 21198 21328 21323 + 21323 21328 21329 + 21329 21324 21323 + 21325 21324 21329 + 21329 21330 21325 + 21325 21330 21331 + 21331 21332 21325 + 21326 21325 21332 + 21333 21328 21198 + 21328 21333 21334 + 21334 21329 21328 + 21329 21334 21335 + 21335 21330 21329 + 21330 21335 21336 + 21336 21331 21330 + 21198 21337 21333 + 21333 21337 21338 + 21338 21339 21333 + 21333 21339 21340 + 21340 21334 21333 + 21335 21334 21340 + 21337 21198 21197 + 21197 21341 21337 + 21337 21341 21338 + 21341 21342 21338 + 21343 21338 21342 + 21338 21343 21344 + 21344 21339 21338 + 21339 21344 21345 + 21345 21340 21339 + 21341 21197 21203 + 21203 21346 21341 + 21341 21346 21347 + 21347 21342 21341 + 21348 21342 21347 + 21342 21348 21343 + 21349 21343 21348 + 21344 21343 21349 + 21346 21203 21350 + 21350 21351 21346 + 21347 21346 21351 + 21351 21352 21347 + 21353 21347 21352 + 21347 21353 21348 + 21207 21350 21203 + 21354 21350 21207 + 21351 21350 21354 + 21354 21355 21351 + 21351 21355 21356 + 21356 21352 21351 + 21357 21352 21356 + 21352 21357 21353 + 21251 21353 21357 + 21348 21353 21251 + 21207 21358 21354 + 21354 21358 21359 + 21359 21360 21354 + 21355 21354 21360 + 21360 21361 21355 + 21356 21355 21361 + 21211 21358 21207 + 21358 21211 21362 + 21362 21359 21358 + 21359 21362 21363 + 21363 21364 21359 + 21359 21364 21365 + 21365 21360 21359 + 21361 21360 21365 + 21216 21362 21211 + 21363 21362 21216 + 21216 21366 21363 + 21367 21363 21366 + 21367 21368 21363 + 21368 21364 21363 + 21368 21365 21364 + 21368 21369 21365 + 21369 21370 21365 + 21365 21370 21361 + 21371 21366 21216 + 21366 21371 21372 + 21372 21367 21366 + 21367 21372 21373 + 21368 21367 21373 + 21369 21368 21373 + 21216 21215 21371 + 21371 21215 21214 + 21214 21374 21371 + 21372 21371 21374 + 21373 21372 21374 + 21374 21223 21373 + 21373 21223 21228 + 21233 21373 21228 + 21373 21233 21369 + 21223 21374 21214 + 21251 21250 21348 + 21349 21348 21250 + 21249 21349 21250 + 21375 21349 21249 + 21349 21375 21344 + 21344 21375 21376 + 21376 21345 21344 + 21377 21345 21376 + 21340 21345 21377 + 21378 21375 21249 + 21375 21378 21379 + 21379 21376 21375 + 21380 21376 21379 + 21376 21380 21377 + 21378 21249 21255 + 21255 21381 21378 + 21378 21381 21382 + 21382 21379 21378 + 21383 21379 21382 + 21383 21380 21379 + 21380 21383 21384 + 21384 21385 21380 + 21377 21380 21385 + 21386 21381 21255 + 21381 21386 21387 + 21387 21382 21381 + 21382 21387 21388 + 21388 21389 21382 + 21382 21389 21383 + 21383 21389 21390 + 21390 21384 21383 + 21255 21259 21386 + 21386 21259 21391 + 21391 21392 21386 + 21386 21392 21393 + 21393 21387 21386 + 21388 21387 21393 + 21391 21259 21258 + 21258 21394 21391 + 21395 21391 21394 + 21391 21395 21396 + 21396 21392 21391 + 21392 21396 21397 + 21397 21393 21392 + 21263 21394 21258 + 21398 21394 21263 + 21394 21398 21395 + 21399 21395 21398 + 21396 21395 21399 + 21399 21400 21396 + 21396 21400 21401 + 21401 21397 21396 + 21402 21397 21401 + 21393 21397 21402 + 21263 21267 21398 + 21398 21267 21305 + 21305 21403 21398 + 21398 21403 21399 + 21404 21399 21403 + 21399 21404 21405 + 21405 21400 21399 + 21400 21405 21406 + 21406 21401 21400 + 21309 21403 21305 + 21403 21309 21404 + 21313 21404 21309 + 21405 21404 21313 + 21313 21407 21405 + 21405 21407 21408 + 21408 21406 21405 + 21409 21406 21408 + 21401 21406 21409 + 21409 21410 21401 + 21401 21410 21402 + 21317 21407 21313 + 21407 21317 21411 + 21411 21408 21407 + 21408 21411 21412 + 21412 21413 21408 + 21408 21413 21409 + 21409 21413 21414 + 21414 21415 21409 + 21410 21409 21415 + 21322 21411 21317 + 21412 21411 21322 + 21322 21416 21412 + 21412 21416 21417 + 21417 21418 21412 + 21413 21412 21418 + 21418 21414 21413 + 21327 21416 21322 + 21416 21327 21419 + 21419 21417 21416 + 21417 21419 21420 + 21420 21421 21417 + 21417 21421 21422 + 21422 21418 21417 + 21422 21414 21418 + 21423 21419 21327 + 21420 21419 21423 + 21423 21424 21420 + 21425 21420 21424 + 21421 21420 21425 + 21425 21426 21421 + 21426 21422 21421 + 21327 21326 21423 + 21332 21423 21326 + 21423 21332 21427 + 21427 21424 21423 + 21424 21427 21428 + 21428 21425 21424 + 21425 21428 21429 + 21426 21425 21429 + 21430 21426 21429 + 21426 21430 21422 + 21430 21431 21422 + 21422 21431 21414 + 21427 21332 21331 + 21331 21432 21427 + 21428 21427 21432 + 21429 21428 21432 + 21432 21433 21429 + 21429 21433 21434 + 21435 21429 21434 + 21429 21435 21430 + 21433 21432 21331 + 21331 21336 21433 + 21433 21336 21436 + 21436 21434 21433 + 21437 21434 21436 + 21434 21437 21435 + 21437 21438 21435 + 21435 21438 21439 + 21440 21435 21439 + 21435 21440 21430 + 21436 21336 21335 + 21335 21441 21436 + 21442 21436 21441 + 21436 21442 21437 + 21437 21442 21385 + 21385 21438 21437 + 21439 21438 21385 + 21340 21441 21335 + 21377 21441 21340 + 21441 21377 21442 + 21385 21442 21377 + 21439 21385 21384 + 21439 21384 21390 + 21390 21443 21439 + 21440 21439 21443 + 21440 21443 21444 + 21445 21440 21444 + 21440 21445 21430 + 21444 21443 21390 + 21390 21446 21444 + 21444 21446 21447 + 21447 21448 21444 + 21445 21444 21448 + 21445 21448 21449 + 21450 21445 21449 + 21445 21450 21430 + 21446 21390 21389 + 21389 21388 21446 + 21447 21446 21388 + 21388 21451 21447 + 21452 21447 21451 + 21448 21447 21452 + 21449 21448 21452 + 21449 21452 21453 + 21453 21454 21449 + 21450 21449 21454 + 21430 21450 21454 + 21454 21455 21430 + 21430 21455 21431 + 21393 21451 21388 + 21402 21451 21393 + 21451 21402 21452 + 21453 21452 21402 + 21402 21410 21453 + 21415 21453 21410 + 21453 21415 21455 + 21455 21454 21453 + 21455 21415 21414 + 21414 21431 21455 + 21357 21252 21251 + 21456 21252 21357 + 21241 21252 21456 + 21456 21242 21241 + 21242 21456 21457 + 21457 21243 21242 + 21357 21458 21456 + 21456 21458 21459 + 21459 21457 21456 + 21460 21457 21459 + 21243 21457 21460 + 21460 21461 21243 + 21243 21461 21238 + 21356 21458 21357 + 21458 21356 21462 + 21462 21459 21458 + 21459 21462 21463 + 21463 21464 21459 + 21459 21464 21460 + 21465 21460 21464 + 21465 21466 21460 + 21466 21461 21460 + 21466 21238 21461 + 21466 21233 21238 + 21361 21462 21356 + 21463 21462 21361 + 21361 21370 21463 + 21369 21463 21370 + 21464 21463 21369 + 21369 21465 21464 + 21466 21465 21369 + 21233 21466 21369 + 21467 8348 8351 + 8348 21467 21468 + 21468 8349 8348 + 21469 8349 21468 + 8349 21469 8342 + 8342 21469 8343 + 21470 21467 8351 + 21467 21470 21471 + 21467 21471 21472 + 21472 21473 21467 + 21473 21468 21467 + 21470 8351 21474 + 21474 21475 21470 + 21476 21470 21475 + 21470 21476 21471 + 21477 21471 21476 + 21471 21477 21478 + 21478 21472 21471 + 8350 21474 8351 + 21474 8350 21479 + 21480 21474 21479 + 21474 21480 21475 + 21481 21475 21480 + 21475 21481 21482 + 21476 21475 21482 + 21483 21476 21482 + 21476 21483 21477 + 21479 8350 42 + 42 21484 21479 + 21479 21484 21485 + 21485 21486 21479 + 21486 21487 21479 + 21487 21480 21479 + 21487 21481 21480 + 21488 21481 21487 + 21481 21488 21482 + 21484 42 8320 + 8320 21489 21484 + 21484 21489 21490 + 21485 21484 21490 + 21490 21491 21485 + 21492 21485 21491 + 21486 21485 21492 + 21486 21492 21488 + 21488 21487 21486 + 21489 8320 21493 + 21489 21493 21494 + 21494 21490 21489 + 21490 21494 21495 + 21490 21495 21496 + 21496 21491 21490 + 21497 21491 21496 + 21491 21497 21492 + 21488 21492 21497 + 21493 8320 8319 + 8319 21498 21493 + 21493 21498 21499 + 21499 21494 21493 + 21495 21494 21499 + 21499 21500 21495 + 21496 21495 21500 + 21501 21496 21500 + 21497 21496 21501 + 8319 21502 21498 + 21498 21502 21503 + 21503 21504 21498 + 21498 21504 21499 + 21505 21499 21504 + 21499 21505 21500 + 21502 8319 8318 + 8318 21506 21502 + 21502 21506 21507 + 21507 21503 21502 + 21508 21503 21507 + 21504 21503 21508 + 21504 21508 21505 + 21505 21508 21509 + 21509 21510 21505 + 21500 21505 21510 + 8318 8317 21506 + 21506 8317 21511 + 21511 21512 21506 + 21506 21512 21507 + 21511 8317 8316 + 8316 21513 21511 + 21513 21514 21511 + 21514 21515 21511 + 21516 21511 21515 + 21511 21516 21512 + 8324 21513 8316 + 21517 21513 8324 + 21513 21517 21518 + 21518 21514 21513 + 21518 21519 21514 + 21514 21519 21520 + 21520 21515 21514 + 21520 21521 21515 + 21515 21521 21516 + 21517 8324 8323 + 8323 21522 21517 + 21517 21522 21523 + 21523 21518 21517 + 21519 21518 21523 + 21523 21524 21519 + 21519 21524 21525 + 21525 21526 21519 + 21526 21520 21519 + 21521 21520 21526 + 21522 8323 8329 + 21522 8329 21527 + 21527 21528 21522 + 21522 21528 21523 + 8335 21527 8329 + 21529 21527 8335 + 21528 21527 21529 + 21528 21529 21530 + 21530 21531 21528 + 21528 21531 21523 + 8335 8344 21529 + 8344 21532 21529 + 21532 21533 21529 + 21533 21530 21529 + 21530 21533 21534 + 21535 21530 21534 + 21531 21530 21535 + 21536 21532 8344 + 21532 21536 21537 + 21537 21538 21532 + 21532 21538 21533 + 21538 21539 21533 + 21539 21534 21533 + 8344 8343 21536 + 21469 21536 8343 + 21536 21469 21540 + 21537 21536 21540 + 21537 21540 21541 + 21542 21537 21541 + 21538 21537 21542 + 21542 21543 21538 + 21539 21538 21543 + 21544 21539 21543 + 21534 21539 21544 + 21540 21469 21468 + 21541 21540 21468 + 21473 21541 21468 + 21473 21545 21541 + 21541 21545 21546 + 21546 21542 21541 + 21542 21546 21547 + 21547 21543 21542 + 21543 21547 21548 + 21548 21544 21543 + 21549 21544 21548 + 21544 21549 21534 + 21535 21534 21549 + 21473 21550 21545 + 21545 21550 21551 + 21551 21552 21545 + 21545 21552 21553 + 21553 21546 21545 + 21547 21546 21553 + 21553 21554 21547 + 21548 21547 21554 + 21550 21473 21472 + 21472 21555 21550 + 21551 21550 21555 + 21555 21556 21551 + 21557 21551 21556 + 21557 21552 21551 + 21552 21557 21558 + 21558 21553 21552 + 21553 21558 21559 + 21559 21554 21553 + 21472 21478 21555 + 21555 21478 21560 + 21560 21556 21555 + 21556 21560 21561 + 21562 21556 21561 + 21556 21562 21557 + 21557 21562 21563 + 21558 21557 21563 + 21564 21558 21563 + 21559 21558 21564 + 21560 21478 21565 + 21561 21560 21565 + 21565 21566 21561 + 21567 21561 21566 + 21562 21561 21567 + 21567 21563 21562 + 21568 21563 21567 + 21563 21568 21569 + 21569 21564 21563 + 21478 21477 21565 + 21570 21565 21477 + 21566 21565 21570 + 21570 21571 21566 + 21566 21571 21572 + 21572 21573 21566 + 21566 21573 21567 + 21574 21567 21573 + 21567 21574 21568 + 21477 21483 21570 + 21570 21483 21575 + 21575 21576 21570 + 21571 21570 21576 + 21576 21577 21571 + 21572 21571 21577 + 21482 21575 21483 + 21578 21575 21482 + 21575 21578 21579 + 21579 21576 21575 + 21577 21576 21579 + 21579 21580 21577 + 21577 21580 21581 + 21581 21582 21577 + 21577 21582 21572 + 21488 21578 21482 + 21579 21578 21488 + 21583 21579 21488 + 21580 21579 21583 + 21583 21584 21580 + 21581 21580 21584 + 21584 21585 21581 + 21586 21581 21585 + 21581 21586 21582 + 21582 21586 21587 + 21587 21572 21582 + 21488 21497 21583 + 21497 21588 21583 + 21589 21583 21588 + 21583 21589 21590 + 21590 21584 21583 + 21584 21590 21591 + 21591 21585 21584 + 21592 21585 21591 + 21585 21592 21586 + 21501 21588 21497 + 21501 21593 21588 + 21588 21593 21589 + 21589 21593 21594 + 21595 21589 21594 + 21590 21589 21595 + 21595 21596 21590 + 21591 21590 21596 + 21593 21501 21597 + 21597 21594 21593 + 21594 21597 21510 + 21510 21598 21594 + 21594 21598 21599 + 21599 21600 21594 + 21594 21600 21595 + 21500 21597 21501 + 21510 21597 21500 + 21598 21510 21509 + 21509 21601 21598 + 21599 21598 21601 + 21601 21602 21599 + 21603 21599 21602 + 21600 21599 21603 + 21603 21604 21600 + 21600 21604 21605 + 21605 21595 21600 + 21596 21595 21605 + 21601 21509 21507 + 21507 21606 21601 + 21601 21606 21607 + 21607 21602 21601 + 21602 21607 21608 + 21608 21609 21602 + 21602 21609 21603 + 21507 21509 21508 + 21603 21609 21610 + 21611 21610 21609 + 21610 21611 21612 + 21612 21613 21610 + 21610 21613 21614 + 21614 21615 21610 + 21610 21615 21603 + 21604 21603 21615 + 21609 21608 21611 + 21616 21611 21608 + 21612 21611 21616 + 21616 21617 21612 + 21612 21617 21618 + 21618 21619 21612 + 21613 21612 21619 + 21619 21620 21613 + 21614 21613 21620 + 21621 21616 21608 + 21622 21616 21621 + 21616 21622 21623 + 21623 21617 21616 + 21617 21623 21624 + 21624 21618 21617 + 21625 21621 21608 + 21626 21621 21625 + 21627 21621 21626 + 21621 21627 21622 + 21627 21628 21622 + 21628 21629 21622 + 21623 21622 21629 + 21608 21630 21625 + 21631 21625 21630 + 21625 21631 21632 + 21632 21633 21625 + 21625 21633 21626 + 21634 21630 21608 + 21635 21630 21634 + 21630 21635 21631 + 21636 21631 21635 + 21632 21631 21636 + 21608 21607 21634 + 21634 21607 21606 + 21606 21637 21634 + 21638 21634 21637 + 21634 21638 21635 + 21635 21638 21639 + 21639 21640 21635 + 21635 21640 21636 + 21641 21637 21606 + 21641 21642 21637 + 21637 21642 21638 + 21638 21642 21521 + 21521 21639 21638 + 21526 21639 21521 + 21639 21526 21643 + 21643 21640 21639 + 21606 21507 21641 + 21512 21641 21507 + 21642 21641 21512 + 21512 21516 21642 + 21642 21516 21521 + 21643 21526 21525 + 21525 21644 21643 + 21643 21644 21645 + 21645 21646 21643 + 21640 21643 21646 + 21646 21636 21640 + 21636 21646 21647 + 21647 21648 21636 + 21636 21648 21632 + 21649 21644 21525 + 21644 21649 21650 + 21650 21645 21644 + 21645 21650 21651 + 21651 21652 21645 + 21645 21652 21647 + 21647 21646 21645 + 21525 21653 21649 + 21649 21653 21654 + 21654 21655 21649 + 21649 21655 21656 + 21656 21650 21649 + 21651 21650 21656 + 21653 21525 21524 + 21524 21657 21653 + 21654 21653 21657 + 21657 21658 21654 + 21659 21654 21658 + 21654 21659 21660 + 21660 21655 21654 + 21655 21660 21661 + 21661 21656 21655 + 21657 21524 21523 + 21523 21662 21657 + 21657 21662 21663 + 21663 21658 21657 + 21658 21663 21664 + 21664 21665 21658 + 21658 21665 21659 + 21666 21659 21665 + 21660 21659 21666 + 21662 21523 21667 + 21667 21668 21662 + 21662 21668 21669 + 21669 21663 21662 + 21664 21663 21669 + 21670 21667 21523 + 21671 21667 21670 + 21668 21667 21671 + 21671 21672 21668 + 21668 21672 21673 + 21673 21669 21668 + 21531 21670 21523 + 21674 21670 21531 + 21674 21675 21670 + 21670 21675 21671 + 21671 21675 21676 + 21676 21677 21671 + 21672 21671 21677 + 21677 21678 21672 + 21672 21678 21673 + 21531 21535 21674 + 21674 21535 21549 + 21675 21674 21549 + 21549 21676 21675 + 21676 21549 21548 + 21676 21548 21679 + 21679 21677 21676 + 21678 21677 21679 + 21679 21680 21678 + 21678 21680 21681 + 21681 21673 21678 + 21669 21673 21681 + 21681 21682 21669 + 21669 21682 21664 + 21679 21548 21554 + 21680 21679 21554 + 21554 21559 21680 + 21681 21680 21559 + 21559 21683 21681 + 21682 21681 21683 + 21683 21684 21682 + 21664 21682 21684 + 21684 21685 21664 + 21665 21664 21685 + 21564 21683 21559 + 21684 21683 21564 + 21564 21569 21684 + 21684 21569 21686 + 21686 21685 21684 + 21687 21685 21686 + 21685 21687 21665 + 21665 21687 21666 + 21686 21569 21568 + 21568 21688 21686 + 21689 21686 21688 + 21686 21689 21687 + 21687 21689 21690 + 21690 21666 21687 + 21666 21690 21691 + 21691 21692 21666 + 21666 21692 21660 + 21693 21688 21568 + 21694 21688 21693 + 21688 21694 21689 + 21689 21694 21695 + 21695 21690 21689 + 21691 21690 21695 + 21568 21574 21693 + 21693 21574 21696 + 21696 21697 21693 + 21698 21693 21697 + 21693 21698 21694 + 21694 21698 21699 + 21699 21695 21694 + 21573 21696 21574 + 21696 21573 21572 + 21572 21587 21696 + 21696 21587 21700 + 21700 21697 21696 + 21701 21697 21700 + 21697 21701 21698 + 21698 21701 21702 + 21702 21699 21698 + 21703 21699 21702 + 21695 21699 21703 + 21703 21704 21695 + 21695 21704 21691 + 21700 21587 21586 + 21586 21592 21700 + 21705 21700 21592 + 21700 21705 21701 + 21701 21705 21706 + 21706 21702 21701 + 21702 21706 21707 + 21707 21708 21702 + 21702 21708 21703 + 21592 21709 21705 + 21705 21709 21710 + 21710 21706 21705 + 21707 21706 21710 + 21710 21711 21707 + 21707 21711 21712 + 21712 21713 21707 + 21708 21707 21713 + 21591 21709 21592 + 21709 21591 21714 + 21714 21710 21709 + 21710 21714 21715 + 21715 21711 21710 + 21711 21715 21716 + 21716 21712 21711 + 21596 21714 21591 + 21715 21714 21596 + 21596 21717 21715 + 21715 21717 21718 + 21718 21716 21715 + 21719 21716 21718 + 21712 21716 21719 + 21719 21720 21712 + 21712 21720 21721 + 21721 21713 21712 + 21605 21717 21596 + 21717 21605 21722 + 21722 21718 21717 + 21718 21722 21723 + 21723 21724 21718 + 21718 21724 21719 + 21719 21724 21725 + 21725 21726 21719 + 21720 21719 21726 + 21727 21722 21605 + 21723 21722 21727 + 21727 21728 21723 + 21723 21728 21729 + 21729 21730 21723 + 21724 21723 21730 + 21730 21725 21724 + 21605 21604 21727 + 21615 21727 21604 + 21727 21615 21614 + 21614 21728 21727 + 21728 21614 21731 + 21731 21729 21728 + 21729 21731 21732 + 21732 21733 21729 + 21729 21733 21734 + 21734 21730 21729 + 21725 21730 21734 + 21620 21731 21614 + 21732 21731 21620 + 21620 21735 21732 + 21732 21735 21736 + 21736 21737 21732 + 21733 21732 21737 + 21737 21738 21733 + 21734 21733 21738 + 21739 21735 21620 + 21735 21739 21740 + 21740 21736 21735 + 21736 21740 21741 + 21741 21742 21736 + 21736 21742 21743 + 21743 21737 21736 + 21738 21737 21743 + 21620 21619 21739 + 21739 21619 21618 + 21618 21744 21739 + 21739 21744 21745 + 21745 21740 21739 + 21741 21740 21745 + 21745 21746 21741 + 21741 21746 21747 + 21742 21741 21747 + 21747 21748 21742 + 21743 21742 21748 + 21749 21744 21618 + 21744 21749 21750 + 21750 21745 21744 + 21745 21750 21751 + 21751 21746 21745 + 21746 21751 21752 + 21752 21747 21746 + 21747 21752 21753 + 21748 21747 21753 + 21618 21624 21749 + 21749 21624 21754 + 21754 21755 21749 + 21749 21755 21756 + 21756 21750 21749 + 21751 21750 21756 + 21756 21757 21751 + 21752 21751 21757 + 21758 21752 21757 + 21752 21758 21753 + 21754 21624 21623 + 21623 21759 21754 + 21760 21754 21759 + 21754 21760 21761 + 21761 21755 21754 + 21755 21761 21762 + 21762 21756 21755 + 21756 21762 21763 + 21763 21757 21756 + 21757 21763 21758 + 21629 21759 21623 + 21764 21759 21629 + 21759 21764 21760 + 21765 21760 21764 + 21761 21760 21765 + 21765 21766 21761 + 21761 21766 21767 + 21767 21762 21761 + 21763 21762 21767 + 21767 21768 21763 + 21763 21768 21758 + 21629 21769 21764 + 21764 21769 21770 + 21770 21771 21764 + 21764 21771 21765 + 21772 21765 21771 + 21765 21772 21773 + 21773 21766 21765 + 21774 21769 21629 + 21769 21774 21775 + 21775 21770 21769 + 21776 21770 21775 + 21770 21776 21777 + 21777 21771 21770 + 21771 21777 21772 + 21778 21772 21777 + 21773 21772 21778 + 21628 21774 21629 + 21774 21628 21779 + 21779 21780 21774 + 21774 21780 21781 + 21781 21775 21774 + 21782 21775 21781 + 21775 21782 21776 + 21779 21628 21627 + 21627 21783 21779 + 21779 21783 21784 + 21784 21785 21779 + 21780 21779 21785 + 21785 21786 21780 + 21781 21780 21786 + 21626 21783 21627 + 21783 21626 21787 + 21787 21784 21783 + 21784 21787 21788 + 21788 21789 21784 + 21784 21789 21790 + 21790 21785 21784 + 21786 21785 21790 + 21791 21787 21626 + 21788 21787 21791 + 21791 21792 21788 + 21788 21792 21793 + 21793 21794 21788 + 21789 21788 21794 + 21794 21795 21789 + 21790 21789 21795 + 21626 21633 21791 + 21796 21791 21633 + 21791 21796 21797 + 21797 21792 21791 + 21792 21797 21798 + 21798 21793 21792 + 21633 21632 21796 + 21799 21796 21632 + 21797 21796 21799 + 21799 21800 21797 + 21797 21800 21801 + 21801 21798 21797 + 21802 21798 21801 + 21793 21798 21802 + 21632 21648 21799 + 21803 21799 21648 + 21799 21803 21804 + 21804 21800 21799 + 21800 21804 21805 + 21805 21801 21800 + 21801 21805 21806 + 21806 21807 21801 + 21801 21807 21802 + 21648 21647 21803 + 21808 21803 21647 + 21804 21803 21808 + 21808 21809 21804 + 21804 21809 21810 + 21810 21805 21804 + 21806 21805 21810 + 21810 21811 21806 + 21806 21811 21812 + 21807 21806 21812 + 21647 21652 21808 + 21813 21808 21652 + 21808 21813 21814 + 21814 21809 21808 + 21809 21814 21815 + 21815 21810 21809 + 21810 21815 21816 + 21816 21811 21810 + 21811 21816 21817 + 21817 21812 21811 + 21652 21651 21813 + 21818 21813 21651 + 21814 21813 21818 + 21818 21819 21814 + 21814 21819 21820 + 21820 21815 21814 + 21816 21815 21820 + 21820 21821 21816 + 21816 21821 21817 + 21651 21822 21818 + 21823 21818 21822 + 21818 21823 21824 + 21824 21819 21818 + 21819 21824 21825 + 21825 21820 21819 + 21820 21825 21826 + 21826 21821 21820 + 21656 21822 21651 + 21827 21822 21656 + 21822 21827 21823 + 21828 21823 21827 + 21824 21823 21828 + 21828 21829 21824 + 21824 21829 21830 + 21830 21825 21824 + 21826 21825 21830 + 21656 21661 21827 + 21827 21661 21831 + 21831 21832 21827 + 21827 21832 21828 + 21833 21828 21832 + 21828 21833 21834 + 21834 21829 21828 + 21829 21834 21835 + 21835 21830 21829 + 21831 21661 21660 + 21660 21692 21831 + 21836 21831 21692 + 21831 21836 21837 + 21837 21832 21831 + 21832 21837 21833 + 21838 21833 21837 + 21834 21833 21838 + 21838 21839 21834 + 21834 21839 21840 + 21840 21835 21834 + 21692 21691 21836 + 21836 21691 21841 + 21841 21776 21836 + 21776 21782 21836 + 21837 21836 21782 + 21782 21842 21837 + 21837 21842 21838 + 21691 21704 21841 + 21843 21841 21704 + 21841 21843 21844 + 21844 21845 21841 + 21841 21845 21777 + 21777 21776 21841 + 21704 21703 21843 + 21846 21843 21703 + 21844 21843 21846 + 21846 21847 21844 + 21844 21847 21848 + 21848 21849 21844 + 21845 21844 21849 + 21849 21778 21845 + 21777 21845 21778 + 21703 21708 21846 + 21713 21846 21708 + 21846 21713 21721 + 21721 21847 21846 + 21847 21721 21850 + 21850 21848 21847 + 21848 21850 21851 + 21851 21852 21848 + 21848 21852 21853 + 21853 21849 21848 + 21778 21849 21853 + 21853 21854 21778 + 21778 21854 21773 + 21855 21850 21721 + 21851 21850 21855 + 21855 21856 21851 + 21851 21856 21857 + 21857 21858 21851 + 21852 21851 21858 + 21858 21859 21852 + 21853 21852 21859 + 21721 21720 21855 + 21726 21855 21720 + 21855 21726 21860 + 21860 21856 21855 + 21856 21860 21861 + 21861 21857 21856 + 21857 21861 21862 + 21862 21863 21857 + 21857 21863 21864 + 21864 21858 21857 + 21859 21858 21864 + 21860 21726 21725 + 21725 21865 21860 + 21860 21865 21866 + 21866 21861 21860 + 21862 21861 21866 + 21866 21867 21862 + 21862 21867 21868 + 21863 21862 21868 + 21868 21869 21863 + 21864 21863 21869 + 21734 21865 21725 + 21865 21734 21870 + 21870 21866 21865 + 21866 21870 21871 + 21871 21867 21866 + 21867 21871 21872 + 21872 21868 21867 + 21868 21872 21748 + 21869 21868 21748 + 21873 21869 21748 + 21864 21869 21873 + 21738 21870 21734 + 21871 21870 21738 + 21738 21874 21871 + 21871 21874 21872 + 21748 21872 21874 + 21874 21743 21748 + 21743 21874 21738 + 21753 21873 21748 + 21875 21873 21753 + 21875 21876 21873 + 21876 21864 21873 + 21864 21876 21859 + 21859 21876 21875 + 21875 21877 21859 + 21859 21877 21853 + 21854 21853 21877 + 21878 21875 21753 + 21875 21878 21879 + 21879 21877 21875 + 21877 21879 21854 + 21773 21854 21879 + 21879 21880 21773 + 21766 21773 21880 + 21880 21767 21766 + 21881 21878 21753 + 21879 21878 21881 + 21881 21880 21879 + 21767 21880 21881 + 21881 21768 21767 + 21768 21881 21758 + 21881 21753 21758 + 21781 21842 21782 + 21842 21781 21882 + 21882 21838 21842 + 21838 21882 21883 + 21883 21839 21838 + 21839 21883 21884 + 21884 21840 21839 + 21786 21882 21781 + 21883 21882 21786 + 21786 21885 21883 + 21883 21885 21886 + 21886 21884 21883 + 21887 21884 21886 + 21840 21884 21887 + 21887 21888 21840 + 21840 21888 21889 + 21889 21835 21840 + 21790 21885 21786 + 21885 21790 21890 + 21890 21886 21885 + 21886 21890 21891 + 21891 21892 21886 + 21886 21892 21887 + 21887 21892 21893 + 21888 21887 21893 + 21893 21894 21888 + 21889 21888 21894 + 21795 21890 21790 + 21891 21890 21795 + 21795 21895 21891 + 21891 21895 21896 + 21892 21891 21896 + 21896 21893 21892 + 21894 21893 21896 + 21897 21894 21896 + 21894 21897 21898 + 21898 21889 21894 + 21889 21898 21830 + 21830 21835 21889 + 21899 21895 21795 + 21895 21899 21900 + 21900 21896 21895 + 21896 21900 21817 + 21817 21897 21896 + 21897 21817 21821 + 21821 21826 21897 + 21826 21898 21897 + 21830 21898 21826 + 21795 21794 21899 + 21899 21794 21793 + 21793 21901 21899 + 21899 21901 21900 + 21902 21900 21901 + 21900 21902 21817 + 21902 21812 21817 + 21812 21902 21807 + 21902 21802 21807 + 21802 21901 21793 + 21901 21802 21902 + 8225 21903 8303 + 8232 21903 8225 + 21903 8232 21904 + 21904 21905 21903 + 8303 21903 21905 + 21905 21906 8303 + 8298 8303 21906 + 21906 8292 8298 + 8239 21904 8232 + 21907 21904 8239 + 21905 21904 21907 + 21907 21908 21905 + 21905 21908 21909 + 21909 21906 21905 + 8292 21906 21909 + 21909 8293 8292 + 8293 21909 21910 + 21910 8288 8293 + 8239 21911 21907 + 21907 21911 21912 + 21912 21913 21907 + 21908 21907 21913 + 21913 21914 21908 + 21909 21908 21914 + 21914 21910 21909 + 21915 21910 21914 + 8288 21910 21915 + 8243 21911 8239 + 21911 8243 21916 + 21916 21912 21911 + 21912 21916 21917 + 21917 21918 21912 + 21912 21918 21919 + 21919 21913 21912 + 21914 21913 21919 + 21919 21920 21914 + 21914 21920 21915 + 8247 21916 8243 + 21917 21916 8247 + 8247 21921 21917 + 21917 21921 21922 + 21922 21923 21917 + 21918 21917 21923 + 21923 21924 21918 + 21919 21918 21924 + 21924 21925 21919 + 21920 21919 21925 + 8252 21921 8247 + 21921 8252 21926 + 21926 21922 21921 + 21922 21926 21927 + 21922 21927 21928 + 21928 21923 21922 + 21923 21928 21929 + 21924 21923 21929 + 21924 21929 21930 + 21930 21925 21924 + 21926 8252 8251 + 21931 21926 8251 + 21932 21926 21931 + 21926 21932 21927 + 21927 21932 21933 + 21928 21927 21933 + 21928 21933 21934 + 21929 21928 21934 + 21930 21929 21934 + 21931 8251 8250 + 21935 21931 8250 + 21931 21935 21936 + 21931 21936 21932 + 21932 21936 21937 + 21932 21937 21933 + 21934 21933 21937 + 21938 21934 21937 + 21930 21934 21938 + 21939 21930 21938 + 21925 21930 21939 + 8262 21935 8250 + 21935 8262 21940 + 21941 21935 21940 + 21935 21941 21936 + 21936 21941 21937 + 21941 21942 21937 + 21937 21942 21943 + 21943 21938 21937 + 21944 21940 8262 + 21940 21944 21945 + 21945 21942 21940 + 21941 21940 21942 + 8262 8261 21944 + 21944 8261 21946 + 21945 21944 21946 + 21947 21945 21946 + 21945 21947 21943 + 21942 21945 21943 + 8261 8260 21946 + 21948 21946 8260 + 21946 21948 21947 + 21948 21949 21947 + 21943 21947 21949 + 21949 21950 21943 + 21950 21951 21943 + 21952 21943 21951 + 21943 21952 21938 + 8260 8266 21948 + 21948 8266 21949 + 8266 8270 21949 + 21950 21949 8270 + 8270 8274 21950 + 21950 8274 21951 + 8274 8278 21951 + 21953 21951 8278 + 21951 21953 21952 + 21953 21954 21952 + 21938 21952 21954 + 21954 21955 21938 + 21955 21939 21938 + 8278 21956 21953 + 21953 21956 21954 + 21956 21957 21954 + 21955 21954 21957 + 21957 21958 21955 + 21955 21958 21959 + 21959 21939 21955 + 21959 21925 21939 + 21925 21959 21920 + 21956 8278 8277 + 8277 8283 21956 + 21957 21956 8283 + 8283 21960 21957 + 21958 21957 21960 + 21960 21915 21958 + 21959 21958 21915 + 21915 21920 21959 + 8288 21960 8283 + 21915 21960 8288 + 7712 21961 7713 + 7712 21962 21961 + 21961 21962 3721 + 21961 3721 21963 + 7713 21961 21963 + 21962 7712 7711 + 7711 21964 21962 + 15495 21962 21964 + 21962 15495 3721 + 21965 21966 21967 + 21968 21966 21965 + 21966 21968 21969 + 21969 21970 21966 + 21971 21966 21970 + 21971 21972 21966 + 21967 21973 21965 + 21974 21965 21973 + 21975 21965 21974 + 21965 21975 21976 + 21976 21968 21965 + 21973 21967 21977 + 21978 21973 21977 + 21973 21978 21974 + 21979 21974 21978 + 21980 21974 21979 + 21974 21980 21975 + 21977 21967 21972 + 21972 21981 21977 + 21982 21977 21981 + 21982 21978 21977 + 21982 21983 21978 + 21983 21984 21978 + 21978 21984 21979 + 21981 21972 21985 + 21981 21985 21986 + 21986 21987 21981 + 21987 21982 21981 + 21987 21988 21982 + 21982 21988 21989 + 21983 21982 21989 + 21985 21972 21990 + 21985 21990 21991 + 21986 21985 21991 + 21992 21986 21991 + 21992 21993 21986 + 21994 21986 21993 + 21987 21986 21994 + 21988 21987 21994 + 21972 21971 21990 + 21971 21995 21990 + 21990 21995 21996 + 21996 21991 21990 + 21997 21991 21996 + 21991 21997 21998 + 21998 21992 21991 + 21995 21971 21970 + 21970 21999 21995 + 21996 21995 21999 + 21999 22000 21996 + 22001 21996 22000 + 21996 22001 21997 + 21999 21970 21969 + 21969 22002 21999 + 21999 22002 22003 + 22003 22000 21999 + 22004 22000 22003 + 22000 22004 22001 + 22005 22001 22004 + 21997 22001 22005 + 22002 21969 22006 + 22006 22007 22002 + 22002 22007 22008 + 22003 22002 22008 + 22008 22009 22003 + 22010 22003 22009 + 22003 22010 22004 + 22011 22006 21969 + 22006 22011 22012 + 22013 22006 22012 + 22007 22006 22013 + 22007 22013 22014 + 22014 22008 22007 + 21969 21968 22011 + 22015 22011 21968 + 22012 22011 22015 + 22016 22012 22015 + 22013 22012 22016 + 22013 22016 22014 + 22016 22017 22014 + 22018 22014 22017 + 22008 22014 22018 + 21968 21976 22015 + 22019 22015 21976 + 22019 22016 22015 + 22020 22016 22019 + 22016 22020 22021 + 22021 22017 22016 + 22017 22021 22022 + 22022 22023 22017 + 22017 22023 22018 + 22024 22019 21976 + 22025 22019 22024 + 22019 22025 22020 + 22026 22024 21976 + 22027 22024 22026 + 22024 22027 22025 + 22025 22027 22028 + 22028 22029 22025 + 22020 22025 22029 + 21976 22030 22026 + 22026 22030 22031 + 22031 22032 22026 + 22027 22026 22032 + 22032 22028 22027 + 22028 22032 22033 + 22028 22033 22034 + 22028 22034 22029 + 21975 22030 21976 + 22030 21975 22035 + 22035 22031 22030 + 22036 22031 22035 + 22031 22036 22033 + 22033 22032 22031 + 21975 21980 22035 + 21980 22037 22035 + 22038 22035 22037 + 22035 22038 22036 + 22036 22038 22039 + 22033 22036 22039 + 22040 22033 22039 + 22034 22033 22040 + 22041 22037 21980 + 22037 22041 22042 + 22037 22042 22038 + 22043 22038 22042 + 22038 22043 22039 + 22044 22039 22043 + 22039 22044 22045 + 22045 22040 22039 + 21980 21979 22041 + 22046 22041 21979 + 22047 22041 22046 + 22041 22047 22042 + 22042 22047 22048 + 22042 22048 22043 + 22049 22043 22048 + 22043 22049 22044 + 21984 22046 21979 + 22046 21984 21983 + 22050 22046 21983 + 22046 22050 22051 + 22046 22051 22047 + 22052 22047 22051 + 22047 22052 22048 + 22052 22053 22048 + 22048 22053 22049 + 22054 22049 22053 + 22044 22049 22054 + 21989 22050 21983 + 22051 22050 21989 + 21989 22055 22051 + 22051 22055 22052 + 22053 22052 22055 + 22055 22056 22053 + 22053 22056 22057 + 22054 22053 22057 + 22058 22054 22057 + 22054 22058 22059 + 22054 22059 22044 + 22055 21989 21988 + 22056 22055 21988 + 22056 21988 21994 + 22056 21994 22057 + 21993 22057 21994 + 22057 21993 22060 + 22057 22060 22058 + 22058 22060 22061 + 22061 22062 22058 + 22059 22058 22062 + 22062 22063 22059 + 22059 22063 22064 + 22044 22059 22064 + 22060 21993 21992 + 21992 22065 22060 + 22060 22065 22061 + 22065 22066 22061 + 22067 22061 22066 + 22061 22067 22068 + 22061 22068 22069 + 22069 22062 22061 + 22063 22062 22069 + 22064 22063 22069 + 21992 21998 22065 + 22065 21998 22070 + 22070 22066 22065 + 22066 22070 22071 + 22066 22071 22067 + 22067 22071 22072 + 22073 22067 22072 + 22068 22067 22073 + 22074 22070 21998 + 22071 22070 22074 + 22074 22075 22071 + 22071 22075 22072 + 21998 21997 22074 + 21997 22076 22074 + 22077 22074 22076 + 22074 22077 22075 + 22075 22077 22078 + 22078 22072 22075 + 22005 22076 21997 + 22079 22076 22005 + 22076 22079 22077 + 22077 22079 22080 + 22080 22078 22077 + 22081 22078 22080 + 22072 22078 22081 + 22005 22082 22079 + 22079 22082 22083 + 22083 22080 22079 + 22080 22083 22084 + 22084 22085 22080 + 22080 22085 22081 + 22082 22005 22086 + 22086 22087 22082 + 22082 22087 22088 + 22088 22083 22082 + 22084 22083 22088 + 22004 22086 22005 + 22089 22086 22004 + 22087 22086 22089 + 22089 22090 22087 + 22087 22090 22091 + 22091 22088 22087 + 22088 22091 22092 + 22092 22093 22088 + 22088 22093 22084 + 22004 22010 22089 + 22089 22010 22094 + 22094 22095 22089 + 22090 22089 22095 + 22095 22096 22090 + 22090 22096 22097 + 22097 22091 22090 + 22092 22091 22097 + 22009 22094 22010 + 22094 22009 22098 + 22098 22099 22094 + 22094 22099 22100 + 22100 22095 22094 + 22096 22095 22100 + 22100 22101 22096 + 22096 22101 22102 + 22102 22097 22096 + 22098 22009 22008 + 22008 22103 22098 + 22098 22103 22104 + 22104 22105 22098 + 22099 22098 22105 + 22105 22106 22099 + 22100 22099 22106 + 22106 22107 22100 + 22101 22100 22107 + 22018 22103 22008 + 22103 22018 22108 + 22108 22104 22103 + 22109 22104 22108 + 22104 22109 22110 + 22110 22105 22104 + 22105 22110 22111 + 22111 22106 22105 + 22106 22111 22112 + 22112 22107 22106 + 22113 22108 22018 + 22113 22114 22108 + 22114 22109 22108 + 22109 22114 22115 + 22109 22115 22110 + 22111 22110 22115 + 22115 22116 22111 + 22111 22116 22117 + 22117 22112 22111 + 22018 22023 22113 + 22118 22113 22023 + 22114 22113 22118 + 22114 22118 22119 + 22119 22120 22114 + 22114 22120 22115 + 22121 22115 22120 + 22116 22115 22121 + 22023 22022 22118 + 22022 22122 22118 + 22122 22123 22118 + 22123 22119 22118 + 22123 22124 22119 + 22124 22125 22119 + 22125 22120 22119 + 22120 22125 22121 + 22126 22122 22022 + 22127 22122 22126 + 22122 22127 22128 + 22128 22123 22122 + 22124 22123 22128 + 22022 22021 22126 + 22126 22021 22020 + 22129 22126 22020 + 22129 22130 22126 + 22130 22127 22126 + 22127 22130 22131 + 22131 22128 22127 + 22131 22132 22128 + 22132 22124 22128 + 22020 22133 22129 + 22134 22129 22133 + 22129 22134 22135 + 22130 22129 22135 + 22130 22135 22136 + 22136 22131 22130 + 22132 22131 22136 + 22029 22133 22020 + 22137 22133 22029 + 22133 22137 22134 + 22138 22134 22137 + 22135 22134 22138 + 22138 22139 22135 + 22136 22135 22139 + 22140 22136 22139 + 22132 22136 22140 + 22140 22141 22132 + 22124 22132 22141 + 22137 22029 22142 + 22143 22137 22142 + 22138 22137 22143 + 22143 22144 22138 + 22145 22138 22144 + 22138 22145 22139 + 22139 22145 22146 + 22146 22140 22139 + 22034 22142 22029 + 22142 22034 22147 + 22148 22142 22147 + 22148 22143 22142 + 22149 22143 22148 + 22143 22149 22144 + 22149 22150 22144 + 22144 22150 22151 + 22144 22151 22145 + 22040 22147 22034 + 22152 22147 22040 + 22147 22152 22153 + 22153 22148 22147 + 22148 22153 22149 + 22149 22153 22154 + 22150 22149 22154 + 22154 22155 22150 + 22151 22150 22155 + 22155 22156 22151 + 22145 22151 22156 + 22146 22145 22156 + 22040 22045 22152 + 22152 22045 22064 + 22064 22157 22152 + 22153 22152 22157 + 22158 22153 22157 + 22153 22158 22154 + 22064 22045 22044 + 22121 22125 22124 + 22124 22141 22121 + 22159 22121 22141 + 22121 22159 22116 + 22116 22159 22160 + 22160 22117 22116 + 22141 22161 22159 + 22160 22159 22161 + 22161 22162 22160 + 22162 22163 22160 + 22163 22164 22160 + 22165 22160 22164 + 22117 22160 22165 + 22161 22141 22140 + 22140 22146 22161 + 22161 22146 22166 + 22166 22162 22161 + 22166 22167 22162 + 22162 22167 22168 + 22168 22163 22162 + 22168 22169 22163 + 22163 22169 22170 + 22170 22164 22163 + 22166 22146 22156 + 22167 22166 22156 + 22156 22171 22167 + 22168 22167 22171 + 22171 22172 22168 + 22169 22168 22172 + 22172 22173 22169 + 22169 22173 22174 + 22170 22169 22174 + 22156 22155 22171 + 22155 22175 22171 + 22171 22175 22176 + 22176 22172 22171 + 22173 22172 22176 + 22176 22177 22173 + 22173 22177 22178 + 22178 22174 22173 + 22175 22155 22154 + 22154 22179 22175 + 22176 22175 22179 + 22179 22180 22176 + 22177 22176 22180 + 22180 22181 22177 + 22177 22181 22182 + 22182 22178 22177 + 22183 22178 22182 + 22174 22178 22183 + 22154 22184 22179 + 22180 22179 22184 + 22185 22180 22184 + 22181 22180 22185 + 22181 22185 22186 + 22186 22187 22181 + 22181 22187 22182 + 22154 22158 22184 + 22184 22158 22188 + 22185 22184 22188 + 22188 22186 22185 + 22189 22186 22188 + 22186 22189 22187 + 22187 22189 22190 + 22190 22191 22187 + 22187 22191 22182 + 22158 22157 22188 + 22192 22188 22157 + 22188 22192 22189 + 22189 22192 22069 + 22190 22189 22069 + 22069 22068 22190 + 22068 22193 22190 + 22194 22190 22193 + 22190 22194 22191 + 22157 22064 22192 + 22192 22064 22069 + 22073 22193 22068 + 22193 22073 22195 + 22193 22195 22194 + 22194 22195 22196 + 22196 22197 22194 + 22191 22194 22197 + 22197 22182 22191 + 22182 22197 22198 + 22198 22199 22182 + 22182 22199 22183 + 22195 22073 22200 + 22200 22196 22195 + 22196 22200 22201 + 22201 22202 22196 + 22196 22202 22198 + 22198 22197 22196 + 22072 22200 22073 + 22201 22200 22072 + 22072 22203 22201 + 22201 22203 22204 + 22204 22205 22201 + 22202 22201 22205 + 22205 22206 22202 + 22198 22202 22206 + 22081 22203 22072 + 22203 22081 22207 + 22207 22204 22203 + 22204 22207 22208 + 22208 22209 22204 + 22204 22209 22210 + 22210 22205 22204 + 22206 22205 22210 + 22211 22207 22081 + 22208 22207 22211 + 22211 22212 22208 + 22208 22212 22213 + 22213 22214 22208 + 22209 22208 22214 + 22214 22215 22209 + 22210 22209 22215 + 22081 22085 22211 + 22216 22211 22085 + 22211 22216 22217 + 22217 22212 22211 + 22212 22217 22218 + 22218 22213 22212 + 22085 22084 22216 + 22219 22216 22084 + 22217 22216 22219 + 22219 22220 22217 + 22217 22220 22221 + 22221 22218 22217 + 22222 22218 22221 + 22213 22218 22222 + 22084 22093 22219 + 22223 22219 22093 + 22219 22223 22224 + 22224 22220 22219 + 22220 22224 22225 + 22225 22221 22220 + 22221 22225 22226 + 22226 22227 22221 + 22221 22227 22222 + 22093 22092 22223 + 22228 22223 22092 + 22224 22223 22228 + 22228 22229 22224 + 22224 22229 22230 + 22230 22225 22224 + 22226 22225 22230 + 22231 22228 22092 + 22232 22228 22231 + 22228 22232 22233 + 22233 22229 22228 + 22229 22233 22234 + 22234 22230 22229 + 22235 22231 22092 + 22236 22231 22235 + 22237 22231 22236 + 22231 22237 22232 + 22232 22237 22238 + 22233 22232 22238 + 22092 22239 22235 + 22240 22235 22239 + 22235 22240 22241 + 22241 22242 22235 + 22235 22242 22236 + 22097 22239 22092 + 22243 22239 22097 + 22239 22243 22240 + 22244 22240 22243 + 22241 22240 22244 + 22244 22245 22241 + 22241 22245 22246 + 22246 22247 22241 + 22242 22241 22247 + 22097 22102 22243 + 22243 22102 22248 + 22248 22249 22243 + 22243 22249 22244 + 22250 22244 22249 + 22244 22250 22251 + 22251 22245 22244 + 22245 22251 22252 + 22252 22246 22245 + 22248 22102 22101 + 22101 22253 22248 + 22254 22248 22253 + 22248 22254 22255 + 22255 22249 22248 + 22249 22255 22250 + 22256 22250 22255 + 22251 22250 22256 + 22107 22253 22101 + 22257 22253 22107 + 22253 22257 22254 + 22258 22254 22257 + 22255 22254 22258 + 22258 22259 22255 + 22255 22259 22256 + 22107 22112 22257 + 22257 22112 22117 + 22117 22260 22257 + 22257 22260 22258 + 22261 22258 22260 + 22258 22261 22262 + 22262 22259 22258 + 22259 22262 22263 + 22263 22256 22259 + 22165 22260 22117 + 22260 22165 22261 + 22264 22261 22165 + 22262 22261 22264 + 22264 22265 22262 + 22262 22265 22266 + 22266 22263 22262 + 22267 22263 22266 + 22256 22263 22267 + 22267 22268 22256 + 22256 22268 22251 + 22165 22269 22264 + 22270 22264 22269 + 22264 22270 22271 + 22271 22265 22264 + 22265 22271 22272 + 22272 22266 22265 + 22164 22269 22165 + 22164 22170 22269 + 22269 22170 22270 + 22174 22270 22170 + 22271 22270 22174 + 22174 22273 22271 + 22271 22273 22274 + 22274 22272 22271 + 22275 22272 22274 + 22266 22272 22275 + 22275 22276 22266 + 22266 22276 22267 + 22183 22273 22174 + 22273 22183 22277 + 22277 22274 22273 + 22274 22277 22278 + 22278 22279 22274 + 22274 22279 22275 + 22275 22279 22280 + 22280 22281 22275 + 22276 22275 22281 + 22282 22277 22183 + 22278 22277 22282 + 22282 22283 22278 + 22278 22283 22284 + 22284 22285 22278 + 22279 22278 22285 + 22285 22280 22279 + 22183 22199 22282 + 22286 22282 22199 + 22282 22286 22287 + 22287 22283 22282 + 22283 22287 22288 + 22288 22284 22283 + 22199 22198 22286 + 22289 22286 22198 + 22287 22286 22289 + 22289 22290 22287 + 22287 22290 22291 + 22291 22288 22287 + 22292 22288 22291 + 22284 22288 22292 + 22293 22289 22198 + 22294 22289 22293 + 22289 22294 22295 + 22295 22290 22289 + 22290 22295 22296 + 22296 22291 22290 + 22206 22293 22198 + 22297 22293 22206 + 22298 22293 22297 + 22293 22298 22294 + 22299 22294 22298 + 22295 22294 22299 + 22299 22300 22295 + 22295 22300 22301 + 22301 22296 22295 + 22206 22302 22297 + 22297 22302 22303 + 22303 22304 22297 + 22305 22297 22304 + 22297 22305 22298 + 22210 22302 22206 + 22302 22210 22306 + 22306 22303 22302 + 22303 22306 22307 + 22307 22308 22303 + 22303 22308 22309 + 22309 22304 22303 + 22310 22304 22309 + 22304 22310 22305 + 22215 22306 22210 + 22307 22306 22215 + 22215 22311 22307 + 22307 22311 22312 + 22312 22313 22307 + 22308 22307 22313 + 22313 22314 22308 + 22309 22308 22314 + 22315 22311 22215 + 22311 22315 22316 + 22316 22312 22311 + 22312 22316 22317 + 22317 22318 22312 + 22312 22318 22319 + 22319 22313 22312 + 22314 22313 22319 + 22215 22214 22315 + 22315 22214 22213 + 22213 22320 22315 + 22315 22320 22321 + 22321 22316 22315 + 22317 22316 22321 + 22321 22322 22317 + 22323 22317 22322 + 22318 22317 22323 + 22323 22324 22318 + 22319 22318 22324 + 22222 22320 22213 + 22320 22222 22325 + 22325 22321 22320 + 22321 22325 22326 + 22326 22322 22321 + 22322 22326 22323 + 22326 22327 22323 + 22323 22327 22328 + 22324 22323 22328 + 22329 22325 22222 + 22326 22325 22329 + 22329 22330 22326 + 22326 22330 22327 + 22330 22331 22327 + 22331 22328 22327 + 22222 22227 22329 + 22332 22329 22227 + 22329 22332 22331 + 22331 22330 22329 + 22227 22226 22332 + 22333 22332 22226 + 22331 22332 22333 + 22333 22334 22331 + 22331 22334 22328 + 22334 22335 22328 + 22335 22336 22328 + 22328 22336 22324 + 22226 22337 22333 + 22338 22333 22337 + 22333 22338 22335 + 22335 22334 22333 + 22230 22337 22226 + 22339 22337 22230 + 22337 22339 22338 + 22340 22338 22339 + 22335 22338 22340 + 22340 22341 22335 + 22335 22341 22336 + 22342 22336 22341 + 22336 22342 22324 + 22230 22234 22339 + 22339 22234 22343 + 22343 22344 22339 + 22339 22344 22340 + 22345 22340 22344 + 22340 22345 22346 + 22346 22341 22340 + 22341 22346 22342 + 22343 22234 22233 + 22233 22347 22343 + 22348 22343 22347 + 22343 22348 22349 + 22349 22344 22343 + 22344 22349 22345 + 22350 22345 22349 + 22346 22345 22350 + 22350 22351 22346 + 22346 22351 22342 + 22238 22347 22233 + 22352 22347 22238 + 22347 22352 22348 + 22310 22348 22352 + 22349 22348 22310 + 22310 22353 22349 + 22349 22353 22350 + 22354 22350 22353 + 22350 22354 22355 + 22355 22351 22350 + 22238 22356 22352 + 22352 22356 22298 + 22298 22305 22352 + 22352 22305 22310 + 22356 22238 22357 + 22357 22299 22356 + 22356 22299 22298 + 22237 22357 22238 + 22309 22353 22310 + 22353 22309 22354 + 22314 22354 22309 + 22355 22354 22314 + 22314 22358 22355 + 22355 22358 22359 + 22351 22355 22359 + 22359 22342 22351 + 22342 22359 22324 + 22324 22359 22358 + 22358 22319 22324 + 22319 22358 22314 + 22360 22296 22301 + 22291 22296 22360 + 22360 22361 22291 + 22291 22361 22292 + 22301 22362 22360 + 22360 22362 22363 + 22363 22364 22360 + 22361 22360 22364 + 22364 22365 22361 + 22365 22366 22361 + 22366 22292 22361 + 22367 22362 22301 + 22362 22367 22368 + 22368 22363 22362 + 22363 22368 22369 + 22369 22370 22363 + 22363 22370 22371 + 22371 22364 22363 + 22365 22364 22371 + 22301 22372 22367 + 22367 22372 22373 + 22373 22374 22367 + 22367 22374 22375 + 22375 22368 22367 + 22369 22368 22375 + 22372 22301 22300 + 22300 22376 22372 + 22373 22372 22376 + 22376 22377 22373 + 22378 22373 22377 + 22373 22378 22379 + 22379 22374 22373 + 22374 22379 22380 + 22380 22375 22374 + 22376 22300 22299 + 22299 22381 22376 + 22376 22381 22237 + 22237 22377 22376 + 22236 22377 22237 + 22377 22236 22378 + 22382 22378 22236 + 22379 22378 22382 + 22382 22383 22379 + 22379 22383 22384 + 22384 22380 22379 + 22385 22380 22384 + 22375 22380 22385 + 22385 22386 22375 + 22375 22386 22369 + 22236 22242 22382 + 22247 22382 22242 + 22382 22247 22387 + 22387 22383 22382 + 22383 22387 22388 + 22388 22384 22383 + 22384 22388 22389 + 22389 22390 22384 + 22384 22390 22385 + 22387 22247 22246 + 22246 22391 22387 + 22387 22391 22392 + 22392 22388 22387 + 22389 22388 22392 + 22392 22393 22389 + 22389 22393 22394 + 22389 22394 22395 + 22390 22389 22395 + 22385 22390 22395 + 22396 22391 22246 + 22391 22396 22397 + 22397 22392 22391 + 22392 22397 22398 + 22398 22393 22392 + 22393 22398 22399 + 22399 22394 22393 + 22394 22399 22400 + 22395 22394 22400 + 22246 22252 22396 + 22396 22252 22401 + 22401 22402 22396 + 22396 22402 22403 + 22403 22397 22396 + 22398 22397 22403 + 22403 22404 22398 + 22398 22404 22399 + 22400 22399 22404 + 22401 22252 22251 + 22251 22268 22401 + 22405 22401 22268 + 22401 22405 22406 + 22406 22402 22401 + 22402 22406 22407 + 22407 22403 22402 + 22403 22407 22408 + 22408 22404 22403 + 22404 22408 22400 + 22268 22267 22405 + 22409 22405 22267 + 22406 22405 22409 + 22409 22410 22406 + 22406 22410 22411 + 22411 22407 22406 + 22408 22407 22411 + 22411 22412 22408 + 22408 22412 22400 + 22267 22276 22409 + 22281 22409 22276 + 22409 22281 22413 + 22413 22410 22409 + 22410 22413 22414 + 22414 22411 22410 + 22411 22414 22415 + 22415 22412 22411 + 22412 22415 22416 + 22416 22400 22412 + 22413 22281 22280 + 22280 22417 22413 + 22413 22417 22418 + 22418 22414 22413 + 22415 22414 22418 + 22418 22419 22415 + 22415 22419 22416 + 22420 22416 22419 + 22416 22420 22421 + 22400 22416 22421 + 22422 22417 22280 + 22417 22422 22423 + 22423 22418 22417 + 22418 22423 22424 + 22424 22419 22418 + 22419 22424 22420 + 22420 22424 22425 + 22426 22420 22425 + 22420 22426 22421 + 22280 22285 22422 + 22422 22285 22284 + 22284 22427 22422 + 22422 22427 22428 + 22428 22423 22422 + 22423 22428 22425 + 22424 22423 22425 + 22292 22427 22284 + 22428 22427 22292 + 22366 22428 22292 + 22428 22366 22425 + 22366 22429 22425 + 22425 22429 22426 + 22429 22430 22426 + 22430 22371 22426 + 22371 22421 22426 + 22429 22366 22365 + 22365 22430 22429 + 22371 22430 22365 + 22371 22370 22421 + 22370 22369 22421 + 22369 22431 22421 + 22421 22431 22400 + 22431 22395 22400 + 22385 22395 22431 + 22386 22385 22431 + 22369 22386 22431 + 22432 22433 22434 + 22433 22432 22435 + 22435 22436 22433 + 22437 22433 22436 + 22438 22433 22437 + 22439 22432 22434 + 22432 22439 22440 + 22440 22441 22432 + 22432 22441 22442 + 22442 22435 22432 + 22443 22435 22442 + 22435 22443 22436 + 22439 22434 22444 + 22444 22445 22439 + 22440 22439 22445 + 22445 22446 22440 + 22440 22446 22447 + 22447 22448 22440 + 22441 22440 22448 + 22448 22449 22441 + 22442 22441 22449 + 22445 22444 22450 + 22451 22445 22450 + 22445 22451 22452 + 22452 22446 22445 + 22446 22452 22453 + 22453 22447 22446 + 22450 22444 22454 + 22454 22455 22450 + 22450 22455 22456 + 22456 22457 22450 + 22450 22457 22458 + 22451 22450 22458 + 22454 22444 22438 + 22438 22459 22454 + 22454 22459 22460 + 22460 22461 22454 + 22455 22454 22461 + 22461 22462 22455 + 22456 22455 22462 + 22437 22459 22438 + 22459 22437 22463 + 22463 22460 22459 + 22460 22463 22464 + 22464 22465 22460 + 22460 22465 22466 + 22466 22461 22460 + 22462 22461 22466 + 22467 22463 22437 + 22464 22463 22467 + 22467 22468 22464 + 22464 22468 22469 + 22469 22470 22464 + 22465 22464 22470 + 22470 22471 22465 + 22466 22465 22471 + 22437 22472 22467 + 22473 22467 22472 + 22467 22473 22474 + 22474 22468 22467 + 22468 22474 22475 + 22475 22469 22468 + 22436 22472 22437 + 22476 22472 22436 + 22472 22476 22473 + 22477 22473 22476 + 22474 22473 22477 + 22477 22478 22474 + 22474 22478 22479 + 22479 22475 22474 + 22436 22480 22476 + 22476 22480 22481 + 22481 22482 22476 + 22476 22482 22477 + 22483 22477 22482 + 22477 22483 22484 + 22484 22478 22477 + 22443 22480 22436 + 22480 22443 22485 + 22481 22480 22485 + 22485 22486 22481 + 22487 22481 22486 + 22482 22481 22487 + 22488 22482 22487 + 22482 22488 22483 + 22489 22483 22488 + 22484 22483 22489 + 22443 22490 22485 + 22491 22485 22490 + 22485 22491 22492 + 22492 22493 22485 + 22485 22493 22494 + 22494 22486 22485 + 22495 22490 22443 + 22496 22490 22495 + 22490 22496 22491 + 22497 22491 22496 + 22492 22491 22497 + 22443 22498 22495 + 22495 22498 22499 + 22499 22500 22495 + 22501 22495 22500 + 22495 22501 22496 + 22442 22498 22443 + 22498 22442 22502 + 22502 22499 22498 + 22499 22502 22503 + 22503 22504 22499 + 22499 22504 22505 + 22505 22500 22499 + 22506 22500 22505 + 22500 22506 22501 + 22449 22502 22442 + 22503 22502 22449 + 22449 22507 22503 + 22503 22507 22508 + 22508 22509 22503 + 22504 22503 22509 + 22509 22510 22504 + 22505 22504 22510 + 22511 22507 22449 + 22507 22511 22512 + 22512 22508 22507 + 22508 22512 22513 + 22513 22514 22508 + 22508 22514 22515 + 22515 22509 22508 + 22449 22448 22511 + 22511 22448 22447 + 22447 22516 22511 + 22511 22516 22517 + 22517 22512 22511 + 22513 22512 22517 + 22517 22518 22513 + 22519 22513 22518 + 22519 22520 22513 + 22520 22514 22513 + 22520 22515 22514 + 22521 22516 22447 + 22516 22521 22522 + 22522 22517 22516 + 22517 22522 22523 + 22523 22518 22517 + 22518 22523 22524 + 22524 22519 22518 + 22447 22453 22521 + 22521 22453 22525 + 22525 22526 22521 + 22521 22526 22527 + 22527 22522 22521 + 22523 22522 22527 + 22527 22528 22523 + 22524 22523 22528 + 22529 22524 22528 + 22519 22524 22529 + 22525 22453 22452 + 22452 22530 22525 + 22531 22525 22530 + 22525 22531 22532 + 22532 22526 22525 + 22526 22532 22533 + 22533 22527 22526 + 22527 22533 22534 + 22534 22528 22527 + 22528 22534 22529 + 22535 22530 22452 + 22536 22530 22535 + 22530 22536 22531 + 22537 22531 22536 + 22532 22531 22537 + 22537 22538 22532 + 22532 22538 22539 + 22539 22533 22532 + 22534 22533 22539 + 22452 22451 22535 + 22535 22451 22458 + 22458 22540 22535 + 22541 22535 22540 + 22535 22541 22536 + 22536 22541 22542 + 22542 22543 22536 + 22536 22543 22537 + 22544 22540 22458 + 22545 22540 22544 + 22540 22545 22541 + 22542 22541 22545 + 22545 22546 22542 + 22547 22542 22546 + 22542 22547 22548 + 22548 22543 22542 + 22458 22549 22544 + 22544 22549 22550 + 22550 22551 22544 + 22552 22544 22551 + 22544 22552 22545 + 22545 22552 22553 + 22553 22546 22545 + 22554 22549 22458 + 22549 22554 22555 + 22555 22550 22549 + 22556 22550 22555 + 22550 22556 22557 + 22557 22551 22550 + 22458 22558 22554 + 22554 22558 22559 + 22559 22560 22554 + 22554 22560 22561 + 22561 22555 22554 + 22562 22555 22561 + 22555 22562 22556 + 22558 22458 22457 + 22457 22563 22558 + 22559 22558 22563 + 22563 22564 22559 + 22565 22559 22564 + 22559 22565 22566 + 22566 22560 22559 + 22560 22566 22567 + 22567 22561 22560 + 22563 22457 22456 + 22456 22568 22563 + 22563 22568 22569 + 22569 22564 22563 + 22570 22564 22569 + 22564 22570 22565 + 22571 22565 22570 + 22566 22565 22571 + 22568 22456 22572 + 22572 22573 22568 + 22569 22568 22573 + 22573 22574 22569 + 22575 22569 22574 + 22569 22575 22570 + 22462 22572 22456 + 22576 22572 22462 + 22573 22572 22576 + 22576 22577 22573 + 22573 22577 22578 + 22578 22574 22573 + 22579 22574 22578 + 22574 22579 22575 + 22580 22575 22579 + 22570 22575 22580 + 22462 22581 22576 + 22576 22581 22582 + 22582 22583 22576 + 22577 22576 22583 + 22583 22584 22577 + 22578 22577 22584 + 22466 22581 22462 + 22581 22466 22585 + 22585 22582 22581 + 22582 22585 22586 + 22586 22587 22582 + 22582 22587 22588 + 22588 22583 22582 + 22584 22583 22588 + 22471 22585 22466 + 22586 22585 22471 + 22471 22589 22586 + 22590 22586 22589 + 22587 22586 22590 + 22590 22591 22587 + 22591 22588 22587 + 22592 22588 22591 + 22588 22592 22584 + 22593 22589 22471 + 22589 22593 22594 + 22594 22590 22589 + 22590 22594 22595 + 22591 22590 22595 + 22596 22591 22595 + 22591 22596 22592 + 22596 22597 22592 + 22584 22592 22597 + 22471 22470 22593 + 22593 22470 22469 + 22469 22598 22593 + 22594 22593 22598 + 22595 22594 22598 + 22598 22599 22595 + 22595 22599 22600 + 22595 22600 22601 + 22602 22595 22601 + 22595 22602 22596 + 22599 22598 22469 + 22599 22469 22475 + 22599 22475 22600 + 22475 22479 22600 + 22600 22479 22603 + 22601 22600 22603 + 22601 22603 22604 + 22604 22605 22601 + 22601 22605 22602 + 22602 22605 22606 + 22607 22602 22606 + 22602 22607 22596 + 22603 22479 22478 + 22478 22484 22603 + 22604 22603 22484 + 22484 22608 22604 + 22609 22604 22608 + 22605 22604 22609 + 22606 22605 22609 + 22606 22609 22610 + 22610 22611 22606 + 22607 22606 22611 + 22489 22608 22484 + 22612 22608 22489 + 22608 22612 22609 + 22610 22609 22612 + 22612 22613 22610 + 22614 22610 22613 + 22611 22610 22614 + 22615 22611 22614 + 22607 22611 22615 + 22616 22607 22615 + 22607 22616 22596 + 22489 22617 22612 + 22612 22617 22618 + 22618 22613 22612 + 22619 22613 22618 + 22613 22619 22614 + 22620 22614 22619 + 22615 22614 22620 + 22620 22621 22615 + 22616 22615 22621 + 22617 22489 22622 + 22622 22623 22617 + 22618 22617 22623 + 22623 22624 22618 + 22625 22618 22624 + 22618 22625 22619 + 22488 22622 22489 + 22626 22622 22488 + 22623 22622 22626 + 22626 22627 22623 + 22623 22627 22628 + 22628 22624 22623 + 22629 22624 22628 + 22624 22629 22625 + 22630 22625 22629 + 22619 22625 22630 + 22488 22487 22626 + 22626 22487 22631 + 22631 22632 22626 + 22627 22626 22632 + 22632 22633 22627 + 22628 22627 22633 + 22633 22634 22628 + 22635 22628 22634 + 22628 22635 22629 + 22486 22631 22487 + 22631 22486 22494 + 22494 22636 22631 + 22631 22636 22637 + 22637 22632 22631 + 22633 22632 22637 + 22637 22638 22633 + 22633 22638 22639 + 22639 22634 22633 + 22640 22634 22639 + 22634 22640 22635 + 22636 22494 22641 + 22641 22642 22636 + 22637 22636 22642 + 22642 22643 22637 + 22643 22644 22637 + 22644 22645 22637 + 22638 22637 22645 + 22646 22641 22494 + 22647 22641 22646 + 22642 22641 22647 + 22642 22647 22648 + 22648 22643 22642 + 22643 22648 22649 + 22643 22649 22644 + 22494 22493 22646 + 22650 22646 22493 + 22646 22650 22651 + 22646 22651 22647 + 22648 22647 22651 + 22652 22648 22651 + 22648 22652 22653 + 22649 22648 22653 + 22493 22492 22650 + 22650 22492 22654 + 22654 22655 22650 + 22655 22656 22650 + 22651 22650 22656 + 22656 22657 22651 + 22651 22657 22658 + 22658 22652 22651 + 22492 22659 22654 + 22660 22654 22659 + 22654 22660 22661 + 22654 22661 22662 + 22662 22655 22654 + 22497 22659 22492 + 22663 22659 22497 + 22659 22663 22660 + 22664 22660 22663 + 22661 22660 22664 + 22664 22665 22661 + 22662 22661 22665 + 22666 22662 22665 + 22667 22662 22666 + 22655 22662 22667 + 22497 22668 22663 + 22663 22668 22669 + 22669 22670 22663 + 22663 22670 22664 + 22671 22664 22670 + 22665 22664 22671 + 22668 22497 22672 + 22672 22673 22668 + 22669 22668 22673 + 22673 22547 22669 + 22546 22669 22547 + 22669 22546 22553 + 22553 22670 22669 + 22670 22553 22671 + 22496 22672 22497 + 22674 22672 22496 + 22673 22672 22674 + 22674 22675 22673 + 22673 22675 22548 + 22548 22547 22673 + 22496 22501 22674 + 22674 22501 22506 + 22506 22676 22674 + 22675 22674 22676 + 22676 22677 22675 + 22548 22675 22677 + 22677 22678 22548 + 22543 22548 22678 + 22678 22537 22543 + 22679 22676 22506 + 22677 22676 22679 + 22679 22680 22677 + 22677 22680 22681 + 22681 22678 22677 + 22537 22678 22681 + 22681 22538 22537 + 22538 22681 22682 + 22682 22539 22538 + 22506 22683 22679 + 22679 22683 22684 + 22684 22685 22679 + 22680 22679 22685 + 22685 22686 22680 + 22681 22680 22686 + 22686 22682 22681 + 22687 22682 22686 + 22539 22682 22687 + 22505 22683 22506 + 22683 22505 22688 + 22688 22684 22683 + 22689 22684 22688 + 22684 22689 22690 + 22690 22685 22684 + 22690 22691 22685 + 22691 22686 22685 + 22686 22691 22687 + 22510 22688 22505 + 22692 22688 22510 + 22692 22689 22688 + 22693 22689 22692 + 22693 22690 22689 + 22693 22694 22690 + 22694 22691 22690 + 22687 22691 22694 + 22695 22687 22694 + 22687 22695 22539 + 22539 22695 22534 + 22529 22534 22695 + 22510 22696 22692 + 22697 22692 22696 + 22697 22693 22692 + 22693 22697 22519 + 22529 22693 22519 + 22529 22694 22693 + 22694 22529 22695 + 22696 22510 22509 + 22515 22696 22509 + 22697 22696 22515 + 22520 22697 22515 + 22697 22520 22519 + 22698 22671 22553 + 22699 22671 22698 + 22671 22699 22665 + 22665 22699 22700 + 22700 22701 22665 + 22665 22701 22666 + 22553 22552 22698 + 22551 22698 22552 + 22702 22698 22551 + 22698 22702 22699 + 22700 22699 22702 + 22702 22703 22700 + 22704 22700 22703 + 22700 22704 22705 + 22705 22701 22700 + 22701 22705 22706 + 22706 22666 22701 + 22551 22557 22702 + 22702 22557 22707 + 22707 22703 22702 + 22708 22703 22707 + 22703 22708 22704 + 22709 22704 22708 + 22705 22704 22709 + 22709 22710 22705 + 22705 22710 22706 + 22707 22557 22556 + 22556 22711 22707 + 22712 22707 22711 + 22707 22712 22708 + 22708 22712 22713 + 22713 22714 22708 + 22708 22714 22709 + 22715 22709 22714 + 22710 22709 22715 + 22716 22711 22556 + 22717 22711 22716 + 22711 22717 22712 + 22713 22712 22717 + 22718 22713 22717 + 22719 22713 22718 + 22713 22719 22720 + 22720 22714 22713 + 22714 22720 22715 + 22556 22562 22716 + 22716 22562 22721 + 22721 22722 22716 + 22723 22716 22722 + 22716 22723 22717 + 22717 22723 22724 + 22724 22725 22717 + 22717 22725 22718 + 22561 22721 22562 + 22726 22721 22561 + 22721 22726 22727 + 22727 22722 22721 + 22722 22727 22728 + 22728 22729 22722 + 22722 22729 22723 + 22724 22723 22729 + 22561 22567 22726 + 22726 22567 22730 + 22730 22731 22726 + 22726 22731 22732 + 22732 22727 22726 + 22728 22727 22732 + 22732 22733 22728 + 22728 22733 22734 + 22729 22728 22734 + 22730 22567 22566 + 22566 22735 22730 + 22736 22730 22735 + 22730 22736 22737 + 22737 22731 22730 + 22731 22737 22738 + 22738 22732 22731 + 22733 22732 22738 + 22571 22735 22566 + 22739 22735 22571 + 22735 22739 22736 + 22740 22736 22739 + 22737 22736 22740 + 22740 22741 22737 + 22738 22737 22741 + 22742 22738 22741 + 22743 22738 22742 + 22738 22743 22733 + 22571 22744 22739 + 22739 22744 22640 + 22640 22745 22739 + 22739 22745 22740 + 22746 22740 22745 + 22740 22746 22741 + 22744 22571 22747 + 22747 22748 22744 + 22640 22744 22748 + 22748 22635 22640 + 22629 22635 22748 + 22748 22749 22629 + 22629 22749 22630 + 22570 22747 22571 + 22580 22747 22570 + 22748 22747 22580 + 22580 22749 22748 + 22749 22580 22750 + 22750 22630 22749 + 22630 22750 22751 + 22751 22752 22630 + 22630 22752 22619 + 22619 22752 22620 + 22579 22750 22580 + 22751 22750 22579 + 22579 22753 22751 + 22751 22753 22754 + 22754 22755 22751 + 22752 22751 22755 + 22755 22620 22752 + 22621 22620 22755 + 22756 22621 22755 + 22616 22621 22756 + 22578 22753 22579 + 22753 22578 22757 + 22757 22754 22753 + 22597 22754 22757 + 22597 22758 22754 + 22754 22758 22756 + 22756 22755 22754 + 22584 22757 22578 + 22597 22757 22584 + 22639 22745 22640 + 22745 22639 22746 + 22746 22639 22759 + 22759 22760 22746 + 22741 22746 22760 + 22760 22761 22741 + 22741 22761 22742 + 22639 22638 22759 + 22645 22759 22638 + 22762 22759 22645 + 22759 22762 22763 + 22763 22760 22759 + 22761 22760 22763 + 22761 22763 22764 + 22764 22765 22761 + 22761 22765 22742 + 22645 22766 22762 + 22762 22766 22767 + 22767 22768 22762 + 22762 22768 22763 + 22768 22764 22763 + 22769 22764 22768 + 22765 22764 22769 + 22765 22769 22770 + 22770 22742 22765 + 22766 22645 22771 + 22771 22772 22766 + 22772 22767 22766 + 22767 22772 22773 + 22774 22767 22773 + 22767 22774 22775 + 22768 22767 22775 + 22768 22775 22769 + 22770 22769 22775 + 22645 22644 22771 + 22776 22771 22644 + 22771 22776 22777 + 22777 22772 22771 + 22772 22777 22778 + 22778 22773 22772 + 22773 22778 22779 + 22779 22780 22773 + 22774 22773 22780 + 22649 22776 22644 + 22777 22776 22649 + 22649 22653 22777 + 22778 22777 22653 + 22653 22781 22778 + 22779 22778 22781 + 22781 22782 22779 + 22783 22779 22782 + 22780 22779 22783 + 22781 22653 22652 + 22652 22784 22781 + 22781 22784 22785 + 22785 22782 22781 + 22786 22782 22785 + 22782 22786 22783 + 22787 22783 22786 + 22788 22783 22787 + 22788 22780 22783 + 22784 22652 22658 + 22658 22789 22784 + 22785 22784 22789 + 22790 22785 22789 + 22791 22785 22790 + 22785 22791 22786 + 22786 22791 22792 + 22786 22792 22787 + 22658 22793 22789 + 22789 22793 22794 + 22789 22794 22790 + 22795 22790 22794 + 22795 22796 22790 + 22796 22797 22790 + 22790 22797 22791 + 22793 22658 22657 + 22657 22798 22793 + 22799 22793 22798 + 22793 22799 22794 + 22794 22799 22800 + 22794 22800 22795 + 22801 22795 22800 + 22795 22801 22802 + 22796 22795 22802 + 22657 22656 22798 + 22798 22656 22655 + 22655 22667 22798 + 22667 22803 22798 + 22803 22804 22798 + 22804 22799 22798 + 22804 22805 22799 + 22805 22800 22799 + 22805 22806 22800 + 22806 22801 22800 + 22666 22803 22667 + 22803 22666 22706 + 22803 22706 22807 + 22807 22804 22803 + 22804 22807 22805 + 22805 22807 22808 + 22805 22808 22806 + 22809 22806 22808 + 22810 22806 22809 + 22806 22810 22801 + 22810 22811 22801 + 22802 22801 22811 + 22812 22807 22706 + 22807 22812 22808 + 22808 22812 22813 + 22808 22813 22809 + 22814 22809 22813 + 22815 22809 22814 + 22809 22815 22810 + 22810 22815 22816 + 22810 22816 22811 + 22817 22812 22706 + 22817 22818 22812 + 22818 22813 22812 + 22818 22814 22813 + 22710 22817 22706 + 22819 22817 22710 + 22817 22819 22818 + 22818 22819 22820 + 22818 22820 22814 + 22821 22814 22820 + 22821 22822 22814 + 22822 22823 22814 + 22814 22823 22815 + 22710 22715 22819 + 22824 22819 22715 + 22819 22824 22820 + 22820 22824 22825 + 22820 22825 22821 + 22826 22821 22825 + 22826 22827 22821 + 22827 22822 22821 + 22828 22822 22827 + 22823 22822 22828 + 22829 22824 22715 + 22829 22830 22824 + 22830 22825 22824 + 22830 22826 22825 + 22831 22826 22830 + 22827 22826 22831 + 22827 22831 22832 + 22827 22832 22828 + 22720 22829 22715 + 22833 22829 22720 + 22830 22829 22833 + 22834 22830 22833 + 22834 22835 22830 + 22830 22835 22831 + 22836 22831 22835 + 22831 22836 22832 + 22720 22719 22833 + 22837 22833 22719 + 22837 22838 22833 + 22833 22838 22839 + 22840 22833 22839 + 22833 22840 22834 + 22718 22837 22719 + 22841 22837 22718 + 22837 22841 22842 + 22842 22838 22837 + 22839 22838 22842 + 22839 22842 22843 + 22843 22844 22839 + 22840 22839 22844 + 22844 22845 22840 + 22834 22840 22845 + 22841 22718 22725 + 22725 22846 22841 + 22842 22841 22846 + 22843 22842 22846 + 22846 22847 22843 + 22848 22843 22847 + 22849 22843 22848 + 22849 22844 22843 + 22845 22844 22849 + 22846 22725 22724 + 22724 22850 22846 + 22846 22850 22851 + 22851 22847 22846 + 22851 22852 22847 + 22852 22853 22847 + 22847 22853 22848 + 22850 22724 22854 + 22854 22855 22850 + 22855 22856 22850 + 22856 22851 22850 + 22856 22857 22851 + 22857 22852 22851 + 22729 22854 22724 + 22734 22854 22729 + 22855 22854 22734 + 22855 22734 22858 + 22858 22856 22855 + 22857 22856 22858 + 22857 22858 22859 + 22857 22859 22860 + 22857 22860 22852 + 22860 22861 22852 + 22853 22852 22861 + 22861 22862 22853 + 22853 22862 22848 + 22863 22858 22734 + 22858 22863 22859 + 22859 22863 22864 + 22859 22864 22865 + 22865 22860 22859 + 22866 22860 22865 + 22860 22866 22867 + 22867 22861 22860 + 22862 22861 22867 + 22733 22863 22734 + 22863 22733 22743 + 22864 22863 22743 + 22864 22743 22868 + 22868 22869 22864 + 22869 22865 22864 + 22866 22865 22869 + 22869 22870 22866 + 22866 22870 22867 + 22870 22871 22867 + 22862 22867 22871 + 22871 22872 22862 + 22862 22872 22848 + 22742 22868 22743 + 22868 22742 22770 + 22770 22873 22868 + 22868 22873 22869 + 22873 22874 22869 + 22874 22870 22869 + 22871 22870 22874 + 22875 22871 22874 + 22872 22871 22875 + 22875 22876 22872 + 22877 22872 22876 + 22872 22877 22848 + 22873 22770 22878 + 22878 22879 22873 + 22874 22873 22879 + 22879 22875 22874 + 22879 22880 22875 + 22880 22876 22875 + 22876 22880 22881 + 22881 22882 22876 + 22882 22877 22876 + 22883 22878 22770 + 22880 22878 22883 + 22879 22878 22880 + 22775 22883 22770 + 22884 22883 22775 + 22883 22884 22881 + 22883 22881 22880 + 22775 22774 22884 + 22780 22884 22774 + 22881 22884 22780 + 22780 22788 22881 + 22881 22788 22882 + 22787 22882 22788 + 22877 22882 22787 + 22787 22885 22877 + 22877 22885 22848 + 22885 22849 22848 + 22886 22849 22885 + 22886 22845 22849 + 22887 22845 22886 + 22845 22887 22834 + 22885 22787 22792 + 22792 22888 22885 + 22885 22888 22886 + 22886 22888 22889 + 22887 22886 22889 + 22887 22889 22890 + 22834 22887 22890 + 22834 22890 22891 + 22835 22834 22891 + 22891 22836 22835 + 22889 22888 22792 + 22792 22892 22889 + 22890 22889 22892 + 22893 22890 22892 + 22891 22890 22893 + 22894 22891 22893 + 22891 22894 22836 + 22894 22895 22836 + 22832 22836 22895 + 22791 22892 22792 + 22893 22892 22791 + 22797 22893 22791 + 22894 22893 22797 + 22797 22796 22894 + 22895 22894 22796 + 22802 22895 22796 + 22896 22895 22802 + 22895 22896 22832 + 22828 22832 22896 + 22816 22828 22896 + 22816 22897 22828 + 22828 22897 22823 + 22823 22897 22815 + 22802 22811 22896 + 22816 22896 22811 + 22815 22897 22816 + 22898 22756 22758 + 22898 22616 22756 + 22616 22898 22596 + 22596 22898 22597 + 22898 22758 22597 + 22899 22900 22901 + 22900 22899 22902 + 22903 22899 22901 + 22899 22903 22904 + 22904 22905 22899 + 22906 22899 22905 + 22899 22906 22902 + 22907 22903 22901 + 22903 22907 22908 + 22908 22909 22903 + 22903 22909 22904 + 22910 22904 22909 + 22905 22904 22910 + 22901 22911 22907 + 22907 22911 22912 + 22908 22907 22912 + 22913 22908 22912 + 22909 22908 22913 + 22909 22913 22914 + 22909 22914 22910 + 22911 22901 22915 + 22915 22916 22911 + 22917 22911 22916 + 22911 22917 22912 + 22918 22912 22917 + 22912 22918 22913 + 22915 22901 22919 + 22920 22915 22919 + 22916 22915 22920 + 22916 22920 22921 + 22916 22921 22922 + 22922 22917 22916 + 22917 22922 22923 + 22923 22918 22917 + 22901 22924 22919 + 22924 22925 22919 + 22919 22925 22926 + 22919 22926 22920 + 22927 22920 22926 + 22921 22920 22927 + 22927 22928 22921 + 22921 22928 22929 + 22922 22921 22929 + 22924 22902 22925 + 22930 22925 22902 + 22925 22930 22926 + 22926 22930 22931 + 22931 22932 22926 + 22926 22932 22933 + 22926 22933 22927 + 22934 22927 22933 + 22927 22934 22928 + 22902 22935 22930 + 22931 22930 22935 + 22935 22936 22931 + 22936 22937 22931 + 22937 22938 22931 + 22939 22931 22938 + 22931 22939 22932 + 22902 22906 22935 + 22906 22940 22935 + 22935 22940 22936 + 22940 22941 22936 + 22942 22936 22941 + 22936 22942 22943 + 22943 22937 22936 + 22940 22906 22905 + 22905 22944 22940 + 22941 22940 22944 + 22945 22941 22944 + 22942 22941 22945 + 22945 22946 22942 + 22942 22946 22947 + 22943 22942 22947 + 22905 22910 22944 + 22944 22910 22948 + 22948 22949 22944 + 22944 22949 22945 + 22950 22945 22949 + 22945 22950 22946 + 22946 22950 22951 + 22951 22952 22946 + 22946 22952 22947 + 22953 22948 22910 + 22954 22948 22953 + 22949 22948 22954 + 22949 22954 22950 + 22951 22950 22954 + 22955 22951 22954 + 22956 22951 22955 + 22952 22951 22956 + 22952 22956 22957 + 22957 22947 22952 + 22910 22914 22953 + 22914 22958 22953 + 22959 22953 22958 + 22953 22959 22960 + 22960 22961 22953 + 22953 22961 22954 + 22954 22961 22955 + 22962 22958 22914 + 22963 22958 22962 + 22958 22963 22959 + 22964 22959 22963 + 22960 22959 22964 + 22914 22913 22962 + 22965 22962 22913 + 22963 22962 22965 + 22965 22966 22963 + 22963 22966 22964 + 22967 22964 22966 + 22964 22967 22968 + 22968 22969 22964 + 22964 22969 22960 + 22913 22918 22965 + 22918 22970 22965 + 22971 22965 22970 + 22965 22971 22966 + 22966 22971 22967 + 22972 22967 22971 + 22968 22967 22972 + 22973 22970 22918 + 22974 22970 22973 + 22970 22974 22971 + 22971 22974 22972 + 22975 22972 22974 + 22972 22975 22976 + 22976 22977 22972 + 22972 22977 22968 + 22918 22923 22973 + 22973 22923 22978 + 22978 22979 22973 + 22980 22973 22979 + 22973 22980 22974 + 22974 22980 22975 + 22975 22980 22981 + 22981 22982 22975 + 22976 22975 22982 + 22983 22978 22923 + 22978 22983 22984 + 22984 22985 22978 + 22978 22985 22986 + 22986 22979 22978 + 22981 22979 22986 + 22979 22981 22980 + 22923 22922 22983 + 22929 22983 22922 + 22984 22983 22929 + 22929 22987 22984 + 22984 22987 22988 + 22988 22989 22984 + 22985 22984 22989 + 22989 22990 22985 + 22986 22985 22990 + 22929 22991 22987 + 22991 22992 22987 + 22987 22992 22993 + 22993 22988 22987 + 22991 22929 22994 + 22994 22995 22991 + 22996 22991 22995 + 22992 22991 22996 + 22996 22997 22992 + 22992 22997 22998 + 22998 22993 22992 + 22999 22994 22929 + 23000 22994 22999 + 23000 22995 22994 + 22995 23000 23001 + 23001 23002 22995 + 22995 23002 22996 + 22928 22999 22929 + 23003 22999 22928 + 23003 23004 22999 + 22999 23004 23000 + 23000 23004 23005 + 23005 23001 23000 + 23006 23001 23005 + 23002 23001 23006 + 22928 22934 23003 + 23003 22934 23007 + 23007 23008 23003 + 23008 23009 23003 + 23009 23010 23003 + 23004 23003 23010 + 23010 23005 23004 + 23011 23005 23010 + 23005 23011 23006 + 22933 23007 22934 + 23012 23007 22933 + 23007 23012 23013 + 23013 23008 23007 + 23014 23008 23013 + 23008 23014 23015 + 23015 23009 23008 + 23012 22933 22932 + 22932 22939 23012 + 23012 22939 23013 + 22939 23016 23013 + 23014 23013 23016 + 23016 23017 23014 + 23014 23017 23018 + 23015 23014 23018 + 23018 23019 23015 + 23020 23015 23019 + 23015 23020 23009 + 22938 23016 22939 + 23017 23016 22938 + 22938 23021 23017 + 23021 23022 23017 + 23017 23022 23023 + 23023 23018 23017 + 23023 23024 23018 + 23018 23024 23019 + 23025 23021 22938 + 23021 23025 23026 + 23022 23021 23026 + 23026 23027 23022 + 23022 23027 23023 + 23027 23028 23023 + 23028 23029 23023 + 23023 23029 23024 + 22937 23025 22938 + 23030 23025 22937 + 23025 23030 23031 + 23031 23026 23025 + 23027 23026 23031 + 23028 23027 23031 + 23028 23031 23032 + 23028 23032 23029 + 23032 23033 23029 + 23033 23024 23029 + 22937 22943 23030 + 23030 22943 23034 + 23034 23035 23030 + 23031 23030 23035 + 23031 23035 23032 + 23032 23035 23034 + 23033 23032 23034 + 23034 23036 23033 + 23037 23033 23036 + 23024 23033 23037 + 23038 23024 23037 + 23024 23038 23019 + 22947 23034 22943 + 23036 23034 22947 + 22947 23039 23036 + 23040 23036 23039 + 23040 23037 23036 + 23040 23041 23037 + 23037 23041 23042 + 23042 23043 23037 + 23037 23043 23038 + 22947 22957 23039 + 23039 22957 23044 + 23044 23045 23039 + 23039 23045 23040 + 23041 23040 23045 + 23045 23046 23041 + 23042 23041 23046 + 23046 23047 23042 + 23048 23042 23047 + 23043 23042 23048 + 23044 22957 22956 + 23049 23044 22956 + 23046 23044 23049 + 23045 23044 23046 + 22956 23050 23049 + 23050 23051 23049 + 23052 23049 23051 + 23049 23052 23053 + 23053 23047 23049 + 23049 23047 23046 + 22955 23050 22956 + 22955 23054 23050 + 23050 23054 23055 + 23055 23051 23050 + 23056 23051 23055 + 23051 23056 23052 + 23057 23052 23056 + 23053 23052 23057 + 23054 22955 22961 + 22961 22960 23054 + 23055 23054 22960 + 22960 22969 23055 + 23058 23055 22969 + 23055 23058 23056 + 23056 23058 23059 + 23059 23060 23056 + 23056 23060 23057 + 23061 23057 23060 + 23057 23061 23062 + 23057 23062 23053 + 22969 22968 23058 + 23059 23058 22968 + 22968 22977 23059 + 23063 23059 22977 + 23059 23063 23064 + 23064 23060 23059 + 23060 23064 23061 + 23061 23064 23065 + 23065 23066 23061 + 23062 23061 23066 + 23066 23067 23062 + 23053 23062 23067 + 22977 22976 23063 + 23063 22976 23068 + 23068 23069 23063 + 23064 23063 23069 + 23069 23065 23064 + 23065 23069 23070 + 23070 23071 23065 + 23065 23071 23072 + 23072 23066 23065 + 23067 23066 23072 + 22982 23068 22976 + 23068 22982 23073 + 23073 23074 23068 + 23068 23074 23070 + 23070 23069 23068 + 23073 22982 22981 + 22981 23075 23073 + 23073 23075 23076 + 23076 23077 23073 + 23074 23073 23077 + 23077 23078 23074 + 23070 23074 23078 + 23078 23079 23070 + 23071 23070 23079 + 22986 23075 22981 + 23075 22986 23080 + 23080 23076 23075 + 23076 23080 23081 + 23081 23082 23076 + 23076 23082 23083 + 23083 23077 23076 + 23078 23077 23083 + 22990 23080 22986 + 23081 23080 22990 + 22990 23084 23081 + 23081 23084 23085 + 23085 23086 23081 + 23082 23081 23086 + 23086 23087 23082 + 23083 23082 23087 + 23088 23084 22990 + 23084 23088 23089 + 23089 23085 23084 + 23085 23089 23090 + 23090 23091 23085 + 23085 23091 23092 + 23092 23086 23085 + 23087 23086 23092 + 22990 22989 23088 + 23088 22989 22988 + 22988 23093 23088 + 23088 23093 23094 + 23094 23089 23088 + 23090 23089 23094 + 23094 23095 23090 + 23090 23095 23096 + 23096 23097 23090 + 23091 23090 23097 + 23098 23093 22988 + 23093 23098 23099 + 23099 23094 23093 + 23094 23099 23100 + 23100 23095 23094 + 23095 23100 23101 + 23101 23096 23095 + 22988 22993 23098 + 23098 22993 22998 + 22998 23102 23098 + 23098 23102 23103 + 23103 23099 23098 + 23100 23099 23103 + 23103 23104 23100 + 23100 23104 23105 + 23105 23101 23100 + 23106 23101 23105 + 23096 23101 23106 + 23107 23102 22998 + 23102 23107 23108 + 23108 23103 23102 + 23103 23108 23109 + 23109 23104 23103 + 23104 23109 23110 + 23110 23105 23104 + 22998 23111 23107 + 23107 23111 23112 + 23112 23113 23107 + 23107 23113 23114 + 23114 23108 23107 + 23109 23108 23114 + 23111 22998 22997 + 22997 23115 23111 + 23112 23111 23115 + 23115 23116 23112 + 23117 23112 23116 + 23112 23117 23118 + 23118 23113 23112 + 23113 23118 23119 + 23119 23114 23113 + 23115 22997 22996 + 22996 23120 23115 + 23115 23120 23121 + 23121 23116 23115 + 23122 23116 23121 + 23116 23122 23117 + 23123 23117 23122 + 23118 23117 23123 + 23120 22996 23002 + 23002 23124 23120 + 23120 23124 23125 + 23125 23121 23120 + 23126 23121 23125 + 23121 23126 23122 + 23122 23126 23067 + 23067 23127 23122 + 23122 23127 23123 + 23006 23124 23002 + 23124 23006 23128 + 23128 23129 23124 + 23124 23129 23125 + 23130 23125 23129 + 23125 23130 23131 + 23125 23131 23126 + 23067 23126 23131 + 23131 23048 23067 + 23048 23053 23067 + 23132 23128 23006 + 23133 23128 23132 + 23128 23133 23134 + 23134 23129 23128 + 23129 23134 23130 + 23134 23135 23130 + 23131 23130 23135 + 23135 23048 23131 + 23048 23135 23043 + 23020 23132 23006 + 23019 23132 23020 + 23038 23132 23019 + 23132 23038 23133 + 23043 23133 23038 + 23134 23133 23043 + 23043 23135 23134 + 23006 23011 23020 + 23009 23020 23011 + 23011 23010 23009 + 23047 23053 23048 + 23072 23127 23067 + 23127 23072 23136 + 23136 23123 23127 + 23123 23136 23137 + 23137 23138 23123 + 23123 23138 23118 + 23139 23136 23072 + 23137 23136 23139 + 23139 23140 23137 + 23137 23140 23141 + 23141 23142 23137 + 23138 23137 23142 + 23142 23143 23138 + 23118 23138 23143 + 23143 23119 23118 + 23072 23071 23139 + 23079 23139 23071 + 23139 23079 23144 + 23144 23140 23139 + 23140 23144 23145 + 23145 23141 23140 + 23141 23145 23146 + 23146 23147 23141 + 23141 23147 23148 + 23148 23142 23141 + 23143 23142 23148 + 23144 23079 23078 + 23078 23149 23144 + 23144 23149 23150 + 23150 23145 23144 + 23146 23145 23150 + 23150 23151 23146 + 23146 23151 23152 + 23152 23153 23146 + 23147 23146 23153 + 23083 23149 23078 + 23149 23083 23154 + 23154 23150 23149 + 23150 23154 23155 + 23155 23151 23150 + 23151 23155 23156 + 23156 23152 23151 + 23087 23154 23083 + 23155 23154 23087 + 23087 23157 23155 + 23155 23157 23158 + 23158 23156 23155 + 23159 23156 23158 + 23152 23156 23159 + 23159 23160 23152 + 23152 23160 23161 + 23161 23153 23152 + 23092 23157 23087 + 23157 23092 23162 + 23162 23158 23157 + 23158 23162 23163 + 23163 23164 23158 + 23158 23164 23159 + 23159 23164 23165 + 23165 23166 23159 + 23160 23159 23166 + 23167 23162 23092 + 23163 23162 23167 + 23167 23168 23163 + 23163 23168 23169 + 23164 23163 23169 + 23169 23165 23164 + 23165 23169 23170 + 23170 23171 23165 + 23165 23171 23166 + 23092 23091 23167 + 23097 23167 23091 + 23167 23097 23172 + 23172 23168 23167 + 23168 23172 23169 + 23172 23170 23169 + 23172 23173 23170 + 23173 23106 23170 + 23106 23174 23170 + 23170 23174 23171 + 23172 23097 23096 + 23096 23173 23172 + 23106 23173 23096 + 23175 23171 23174 + 23171 23175 23176 + 23177 23171 23176 + 23171 23177 23166 + 23178 23166 23177 + 23178 23179 23166 + 23166 23179 23160 + 23180 23175 23174 + 23175 23180 23105 + 23105 23110 23175 + 23175 23110 23181 + 23181 23176 23175 + 23182 23176 23181 + 23176 23182 23177 + 23106 23180 23174 + 23105 23180 23106 + 23181 23110 23109 + 23109 23183 23181 + 23184 23181 23183 + 23181 23184 23182 + 23182 23184 23185 + 23185 23186 23182 + 23182 23186 23187 + 23182 23187 23177 + 23177 23187 23178 + 23114 23183 23109 + 23188 23183 23114 + 23183 23188 23184 + 23185 23184 23188 + 23188 23189 23185 + 23190 23185 23189 + 23185 23190 23191 + 23191 23186 23185 + 23186 23191 23178 + 23178 23187 23186 + 23114 23119 23188 + 23188 23119 23143 + 23143 23189 23188 + 23148 23189 23143 + 23189 23148 23190 + 23192 23190 23148 + 23191 23190 23192 + 23192 23193 23191 + 23191 23193 23178 + 23179 23178 23193 + 23193 23161 23179 + 23161 23160 23179 + 23148 23147 23192 + 23153 23192 23147 + 23192 23153 23161 + 23161 23193 23192 + 23194 23195 23196 + 23194 23197 23195 + 23198 23195 23197 + 23199 23194 23196 + 23194 23199 23200 + 23200 23201 23194 + 23194 23201 23202 + 23202 23197 23194 + 23203 23197 23202 + 23197 23203 23198 + 23204 23199 23196 + 23200 23199 23204 + 23204 23205 23200 + 23200 23205 23206 + 23206 23207 23200 + 23201 23200 23207 + 23207 23208 23201 + 23202 23201 23208 + 23204 23196 23209 + 23210 23204 23209 + 23204 23210 23211 + 23211 23205 23204 + 23205 23211 23212 + 23212 23206 23205 + 23209 23196 23213 + 23213 23214 23209 + 23214 23215 23209 + 23216 23209 23215 + 23216 23210 23209 + 23211 23210 23216 + 23216 23217 23211 + 23211 23217 23212 + 23196 23218 23213 + 23218 23198 23213 + 23198 23219 23213 + 23213 23219 23220 + 23220 23221 23213 + 23221 23222 23213 + 23214 23213 23222 + 23219 23198 23223 + 23223 23224 23219 + 23224 23220 23219 + 23224 23225 23220 + 23225 23226 23220 + 23221 23220 23226 + 23203 23223 23198 + 23227 23223 23203 + 23224 23223 23227 + 23227 23225 23224 + 23225 23227 23228 + 23228 23229 23225 + 23226 23225 23229 + 23229 23230 23226 + 23231 23226 23230 + 23226 23231 23221 + 23203 23232 23227 + 23227 23232 23233 + 23233 23228 23227 + 23234 23228 23233 + 23229 23228 23234 + 23234 23235 23229 + 23229 23235 23236 + 23236 23230 23229 + 23202 23232 23203 + 23232 23202 23237 + 23237 23233 23232 + 23233 23237 23238 + 23238 23239 23233 + 23233 23239 23234 + 23234 23239 23240 + 23240 23241 23234 + 23235 23234 23241 + 23208 23237 23202 + 23238 23237 23208 + 23208 23242 23238 + 23238 23242 23243 + 23243 23244 23238 + 23239 23238 23244 + 23244 23240 23239 + 23245 23242 23208 + 23242 23245 23246 + 23246 23243 23242 + 23243 23246 23247 + 23247 23248 23243 + 23243 23248 23249 + 23249 23244 23243 + 23240 23244 23249 + 23208 23207 23245 + 23245 23207 23206 + 23206 23250 23245 + 23245 23250 23251 + 23251 23246 23245 + 23247 23246 23251 + 23251 23252 23247 + 23247 23252 23253 + 23253 23254 23247 + 23248 23247 23254 + 23255 23250 23206 + 23250 23255 23256 + 23256 23251 23250 + 23251 23256 23257 + 23257 23252 23251 + 23252 23257 23258 + 23258 23253 23252 + 23206 23212 23255 + 23255 23212 23259 + 23259 23260 23255 + 23255 23260 23261 + 23261 23256 23255 + 23257 23256 23261 + 23261 23262 23257 + 23257 23262 23263 + 23263 23258 23257 + 23217 23259 23212 + 23264 23259 23217 + 23259 23264 23265 + 23265 23260 23259 + 23260 23265 23266 + 23266 23261 23260 + 23261 23266 23267 + 23267 23262 23261 + 23262 23267 23268 + 23268 23263 23262 + 23217 23269 23264 + 23270 23264 23269 + 23265 23264 23270 + 23270 23271 23265 + 23265 23271 23272 + 23272 23266 23265 + 23267 23266 23272 + 23269 23217 23216 + 23216 23273 23269 + 23269 23273 23274 + 23274 23275 23269 + 23269 23275 23270 + 23276 23270 23275 + 23270 23276 23277 + 23277 23271 23270 + 23273 23216 23215 + 23274 23273 23215 + 23274 23215 23214 + 23278 23274 23214 + 23274 23278 23279 + 23279 23275 23274 + 23275 23279 23276 + 23280 23276 23279 + 23277 23276 23280 + 23214 23281 23278 + 23279 23278 23281 + 23281 23282 23279 + 23279 23282 23280 + 23283 23280 23282 + 23280 23283 23284 + 23284 23285 23280 + 23280 23285 23277 + 23222 23281 23214 + 23281 23222 23286 + 23286 23282 23281 + 23282 23286 23283 + 23287 23283 23286 + 23284 23283 23287 + 23287 23288 23284 + 23284 23288 23289 + 23289 23290 23284 + 23285 23284 23290 + 23286 23222 23221 + 23221 23231 23286 + 23286 23231 23287 + 23230 23287 23231 + 23287 23230 23236 + 23236 23288 23287 + 23288 23236 23291 + 23291 23289 23288 + 23289 23291 23292 + 23292 23293 23289 + 23289 23293 23294 + 23294 23290 23289 + 23295 23290 23294 + 23290 23295 23285 + 23277 23285 23295 + 23296 23291 23236 + 23292 23291 23296 + 23296 23297 23292 + 23292 23297 23298 + 23298 23299 23292 + 23293 23292 23299 + 23299 23300 23293 + 23294 23293 23300 + 23236 23235 23296 + 23241 23296 23235 + 23296 23241 23301 + 23301 23297 23296 + 23297 23301 23302 + 23302 23298 23297 + 23298 23302 23303 + 23303 23304 23298 + 23298 23304 23305 + 23305 23299 23298 + 23301 23241 23240 + 23240 23306 23301 + 23301 23306 23307 + 23307 23302 23301 + 23303 23302 23307 + 23307 23308 23303 + 23303 23308 23309 + 23309 23310 23303 + 23304 23303 23310 + 23249 23306 23240 + 23306 23249 23311 + 23311 23307 23306 + 23307 23311 23312 + 23312 23308 23307 + 23308 23312 23313 + 23313 23314 23308 + 23308 23314 23309 + 23315 23311 23249 + 23312 23311 23315 + 23315 23316 23312 + 23312 23316 23317 + 23317 23313 23312 + 23318 23313 23317 + 23313 23318 23319 + 23319 23314 23313 + 23249 23248 23315 + 23254 23315 23248 + 23315 23254 23320 + 23320 23316 23315 + 23316 23320 23321 + 23321 23317 23316 + 23322 23317 23321 + 23317 23322 23318 + 23323 23318 23322 + 23319 23318 23323 + 23320 23254 23253 + 23253 23324 23320 + 23321 23320 23324 + 23324 23325 23321 + 23326 23321 23325 + 23321 23326 23322 + 23322 23326 23327 + 23327 23328 23322 + 23322 23328 23323 + 23329 23324 23253 + 23324 23329 23330 + 23330 23325 23324 + 23330 23331 23325 + 23325 23331 23326 + 23327 23326 23331 + 23253 23258 23329 + 23332 23329 23258 + 23330 23329 23332 + 23330 23332 23333 + 23331 23330 23333 + 23333 23334 23331 + 23331 23334 23327 + 23263 23332 23258 + 23335 23332 23263 + 23332 23335 23336 + 23336 23333 23332 + 23334 23333 23336 + 23336 23337 23334 + 23334 23337 23338 + 23338 23339 23334 + 23334 23339 23327 + 23263 23268 23335 + 23340 23335 23268 + 23335 23340 23341 + 23341 23336 23335 + 23337 23336 23341 + 23341 23342 23337 + 23338 23337 23342 + 23343 23338 23342 + 23344 23338 23343 + 23338 23344 23339 + 23345 23340 23268 + 23346 23340 23345 + 23340 23346 23347 + 23347 23341 23340 + 23341 23347 23342 + 23345 23268 23267 + 23267 23348 23345 + 23349 23345 23348 + 23345 23349 23346 + 23346 23349 23350 + 23350 23351 23346 + 23347 23346 23351 + 23272 23348 23267 + 23352 23348 23272 + 23348 23352 23349 + 23350 23349 23352 + 23352 23353 23350 + 23354 23350 23353 + 23350 23354 23355 + 23355 23351 23350 + 23272 23356 23352 + 23352 23356 23295 + 23295 23353 23352 + 23294 23353 23295 + 23353 23294 23354 + 23300 23354 23294 + 23355 23354 23300 + 23356 23272 23271 + 23271 23277 23356 + 23295 23356 23277 + 23300 23357 23355 + 23357 23300 23299 + 23305 23357 23299 + 23357 23305 23358 + 23358 23359 23357 + 23357 23359 23360 + 23360 23355 23357 + 23351 23355 23360 + 23360 23361 23351 + 23351 23361 23347 + 23361 23362 23347 + 23342 23347 23362 + 23363 23358 23305 + 23364 23358 23363 + 23358 23364 23365 + 23365 23359 23358 + 23359 23365 23366 + 23366 23360 23359 + 23361 23360 23366 + 23361 23366 23367 + 23367 23362 23361 + 23305 23304 23363 + 23310 23363 23304 + 23363 23310 23368 + 23368 23369 23363 + 23363 23369 23364 + 23370 23364 23369 + 23365 23364 23370 + 23368 23310 23309 + 23309 23371 23368 + 23368 23371 23372 + 23372 23373 23368 + 23369 23368 23373 + 23373 23374 23369 + 23369 23374 23370 + 23309 23375 23371 + 23371 23375 23376 + 23376 23377 23371 + 23371 23377 23372 + 23375 23309 23314 + 23314 23319 23375 + 23376 23375 23319 + 23319 23378 23376 + 23378 23379 23376 + 23380 23376 23379 + 23377 23376 23380 + 23377 23380 23381 + 23377 23381 23372 + 23323 23378 23319 + 23378 23323 23382 + 23378 23382 23383 + 23383 23379 23378 + 23384 23379 23383 + 23379 23384 23380 + 23380 23384 23385 + 23385 23386 23380 + 23380 23386 23381 + 23382 23323 23387 + 23387 23388 23382 + 23383 23382 23388 + 23388 23389 23383 + 23390 23383 23389 + 23383 23390 23384 + 23384 23390 23391 + 23391 23385 23384 + 23328 23387 23323 + 23392 23387 23328 + 23387 23392 23388 + 23389 23388 23392 + 23393 23389 23392 + 23389 23393 23394 + 23389 23394 23390 + 23391 23390 23394 + 23395 23391 23394 + 23396 23391 23395 + 23385 23391 23396 + 23328 23397 23392 + 23393 23392 23397 + 23398 23393 23397 + 23398 23399 23393 + 23399 23394 23393 + 23394 23399 23395 + 23400 23395 23399 + 23395 23400 23401 + 23395 23401 23396 + 23328 23327 23397 + 23397 23327 23402 + 23402 23403 23397 + 23398 23397 23403 + 23398 23403 23404 + 23405 23398 23404 + 23399 23398 23405 + 23399 23405 23400 + 23406 23400 23405 + 23401 23400 23406 + 23339 23402 23327 + 23407 23402 23339 + 23403 23402 23407 + 23407 23404 23403 + 23408 23404 23407 + 23405 23404 23408 + 23408 23406 23405 + 23409 23406 23408 + 23409 23410 23406 + 23406 23410 23401 + 23396 23401 23410 + 23411 23396 23410 + 23385 23396 23411 + 23339 23344 23407 + 23407 23344 23412 + 23412 23413 23407 + 23413 23414 23407 + 23414 23408 23407 + 23408 23414 23415 + 23408 23415 23409 + 23343 23412 23344 + 23416 23412 23343 + 23412 23416 23413 + 23416 23417 23413 + 23413 23417 23418 + 23413 23418 23415 + 23415 23414 23413 + 23416 23343 23419 + 23419 23420 23416 + 23417 23416 23420 + 23420 23421 23417 + 23421 23422 23417 + 23418 23417 23422 + 23422 23423 23418 + 23415 23418 23423 + 23409 23415 23423 + 23419 23343 23342 + 23342 23424 23419 + 23425 23419 23424 + 23420 23419 23425 + 23425 23426 23420 + 23420 23426 23427 + 23427 23421 23420 + 23362 23424 23342 + 23367 23424 23362 + 23424 23367 23425 + 23425 23367 23365 + 23365 23428 23425 + 23426 23425 23428 + 23428 23429 23426 + 23427 23426 23429 + 23429 23430 23427 + 23431 23427 23430 + 23421 23427 23431 + 23367 23366 23365 + 23370 23428 23365 + 23429 23428 23370 + 23370 23432 23429 + 23429 23432 23433 + 23433 23430 23429 + 23430 23433 23434 + 23430 23434 23431 + 23435 23431 23434 + 23421 23431 23435 + 23435 23422 23421 + 23422 23435 23423 + 23432 23370 23374 + 23374 23436 23432 + 23436 23437 23432 + 23437 23433 23432 + 23437 23438 23433 + 23438 23434 23433 + 23434 23438 23439 + 23439 23435 23434 + 23423 23435 23439 + 23439 23440 23423 + 23423 23440 23409 + 23374 23373 23436 + 23436 23373 23372 + 23372 23437 23436 + 23437 23372 23441 + 23438 23437 23441 + 23438 23441 23442 + 23442 23439 23438 + 23442 23440 23439 + 23440 23442 23410 + 23410 23409 23440 + 23441 23372 23381 + 23381 23411 23441 + 23442 23441 23411 + 23410 23442 23411 + 23386 23411 23381 + 23411 23386 23385 + 23443 23444 23445 + 23444 23443 23446 + 23444 23446 23447 + 23444 23447 23448 + 23449 23444 23448 + 23450 23443 23445 + 23443 23450 23451 + 23443 23451 23452 + 23443 23452 23446 + 23446 23452 23453 + 23446 23453 23454 + 23454 23447 23446 + 23448 23447 23454 + 23455 23450 23445 + 23450 23455 23456 + 23450 23456 23457 + 23450 23457 23451 + 23451 23457 23458 + 23451 23458 23459 + 23459 23452 23451 + 23452 23459 23453 + 23460 23455 23445 + 23455 23460 23461 + 23461 23462 23455 + 23462 23463 23455 + 23455 23463 23456 + 23445 23464 23460 + 23464 23465 23460 + 23460 23465 23466 + 23466 23467 23460 + 23460 23467 23461 + 23468 23461 23467 + 23462 23461 23468 + 23465 23464 23469 + 23469 23470 23465 + 23465 23470 23466 + 23470 23471 23466 + 23471 23472 23466 + 23467 23466 23472 + 23472 23473 23467 + 23467 23473 23468 + 23464 23474 23469 + 23475 23469 23474 + 23470 23469 23475 + 23475 23471 23470 + 23471 23475 23476 + 23476 23477 23471 + 23472 23471 23477 + 23477 23478 23472 + 23473 23472 23478 + 23479 23474 23464 + 23474 23479 23480 + 23480 23481 23474 + 23474 23481 23475 + 23475 23481 23482 + 23482 23476 23475 + 23483 23476 23482 + 23477 23476 23483 + 23464 23449 23479 + 23449 23448 23479 + 23480 23479 23448 + 23448 23484 23480 + 23480 23484 23485 + 23485 23486 23480 + 23481 23480 23486 + 23486 23482 23481 + 23482 23486 23487 + 23487 23488 23482 + 23482 23488 23483 + 23454 23484 23448 + 23484 23454 23489 + 23489 23485 23484 + 23485 23489 23490 + 23490 23491 23485 + 23485 23491 23487 + 23487 23486 23485 + 23492 23489 23454 + 23490 23489 23492 + 23492 23493 23490 + 23490 23493 23494 + 23494 23495 23490 + 23491 23490 23495 + 23495 23496 23491 + 23487 23491 23496 + 23454 23453 23492 + 23497 23492 23453 + 23492 23497 23498 + 23498 23493 23492 + 23493 23498 23499 + 23499 23494 23493 + 23453 23459 23497 + 23459 23458 23497 + 23458 23500 23497 + 23498 23497 23500 + 23500 23501 23498 + 23498 23501 23502 + 23502 23499 23498 + 23503 23499 23502 + 23494 23499 23503 + 23504 23500 23458 + 23500 23504 23505 + 23505 23501 23500 + 23501 23505 23506 + 23506 23502 23501 + 23502 23506 23507 + 23507 23508 23502 + 23502 23508 23503 + 23458 23509 23504 + 23510 23504 23509 + 23505 23504 23510 + 23510 23511 23505 + 23505 23511 23512 + 23512 23506 23505 + 23507 23506 23512 + 23457 23509 23458 + 23509 23457 23456 + 23456 23513 23509 + 23509 23513 23510 + 23514 23510 23513 + 23510 23514 23515 + 23515 23511 23510 + 23511 23515 23516 + 23516 23512 23511 + 23456 23463 23513 + 23463 23517 23513 + 23513 23517 23514 + 23518 23514 23517 + 23515 23514 23518 + 23518 23519 23515 + 23515 23519 23520 + 23520 23516 23515 + 23521 23516 23520 + 23512 23516 23521 + 23517 23463 23462 + 23462 23522 23517 + 23517 23522 23518 + 23523 23518 23522 + 23518 23523 23524 + 23524 23519 23518 + 23519 23524 23525 + 23525 23520 23519 + 23468 23522 23462 + 23522 23468 23523 + 23526 23523 23468 + 23524 23523 23526 + 23526 23527 23524 + 23524 23527 23528 + 23528 23525 23524 + 23529 23525 23528 + 23520 23525 23529 + 23529 23530 23520 + 23520 23530 23521 + 23468 23473 23526 + 23478 23526 23473 + 23526 23478 23531 + 23531 23527 23526 + 23527 23531 23532 + 23532 23528 23527 + 23528 23532 23533 + 23533 23534 23528 + 23528 23534 23529 + 23531 23478 23477 + 23477 23535 23531 + 23531 23535 23536 + 23536 23532 23531 + 23533 23532 23536 + 23536 23537 23533 + 23538 23533 23537 + 23538 23539 23533 + 23539 23534 23533 + 23529 23534 23539 + 23483 23535 23477 + 23535 23483 23540 + 23540 23536 23535 + 23536 23540 23541 + 23541 23537 23536 + 23542 23537 23541 + 23542 23538 23537 + 23543 23538 23542 + 23538 23543 23544 + 23539 23538 23544 + 23545 23540 23483 + 23541 23540 23545 + 23545 23546 23541 + 23541 23546 23547 + 23547 23548 23541 + 23548 23542 23541 + 23542 23548 23549 + 23542 23549 23543 + 23483 23488 23545 + 23550 23545 23488 + 23545 23550 23551 + 23551 23546 23545 + 23546 23551 23552 + 23552 23547 23546 + 23547 23552 23553 + 23553 23554 23547 + 23547 23554 23548 + 23488 23487 23550 + 23496 23550 23487 + 23551 23550 23496 + 23496 23555 23551 + 23551 23555 23556 + 23556 23552 23551 + 23553 23552 23556 + 23556 23557 23553 + 23553 23557 23558 + 23558 23559 23553 + 23554 23553 23559 + 23560 23555 23496 + 23555 23560 23561 + 23561 23556 23555 + 23556 23561 23562 + 23562 23557 23556 + 23557 23562 23563 + 23563 23558 23557 + 23496 23495 23560 + 23560 23495 23494 + 23494 23564 23560 + 23560 23564 23565 + 23565 23561 23560 + 23562 23561 23565 + 23565 23566 23562 + 23563 23562 23566 + 23503 23564 23494 + 23564 23503 23567 + 23567 23565 23564 + 23565 23567 23566 + 23567 23568 23566 + 23566 23568 23569 + 23569 23570 23566 + 23566 23570 23563 + 23571 23567 23503 + 23571 23572 23567 + 23572 23568 23567 + 23568 23572 23573 + 23573 23569 23568 + 23574 23569 23573 + 23570 23569 23574 + 23503 23508 23571 + 23575 23571 23508 + 23571 23575 23576 + 23576 23572 23571 + 23572 23576 23577 + 23577 23573 23572 + 23578 23573 23577 + 23573 23578 23574 + 23508 23507 23575 + 23579 23575 23507 + 23579 23580 23575 + 23580 23576 23575 + 23577 23576 23580 + 23580 23581 23577 + 23582 23577 23581 + 23577 23582 23578 + 23507 23583 23579 + 23584 23579 23583 + 23579 23584 23585 + 23585 23580 23579 + 23580 23585 23586 + 23586 23581 23580 + 23587 23581 23586 + 23581 23587 23582 + 23512 23583 23507 + 23521 23583 23512 + 23583 23521 23584 + 23588 23584 23521 + 23585 23584 23588 + 23588 23589 23585 + 23585 23589 23590 + 23590 23586 23585 + 23587 23586 23590 + 23521 23530 23588 + 23591 23588 23530 + 23588 23591 23592 + 23592 23589 23588 + 23589 23592 23593 + 23593 23594 23589 + 23589 23594 23590 + 23530 23529 23591 + 23539 23591 23529 + 23592 23591 23539 + 23539 23544 23592 + 23592 23544 23595 + 23595 23593 23592 + 23596 23593 23595 + 23596 23594 23593 + 23594 23596 23597 + 23597 23590 23594 + 23590 23597 23598 + 23590 23598 23587 + 23599 23595 23544 + 23600 23595 23599 + 23595 23600 23596 + 23597 23596 23600 + 23601 23597 23600 + 23598 23597 23601 + 23601 23602 23598 + 23587 23598 23602 + 23602 23603 23587 + 23603 23582 23587 + 23544 23543 23599 + 23599 23543 23549 + 23549 23604 23599 + 23605 23599 23604 + 23599 23605 23600 + 23600 23605 23606 + 23606 23607 23600 + 23600 23607 23601 + 23604 23549 23608 + 23609 23604 23608 + 23609 23610 23604 + 23604 23610 23605 + 23605 23610 23611 + 23611 23606 23605 + 23612 23606 23611 + 23606 23612 23607 + 23548 23608 23549 + 23554 23608 23548 + 23609 23608 23554 + 23554 23613 23609 + 23610 23609 23613 + 23613 23614 23610 + 23610 23614 23611 + 23559 23613 23554 + 23614 23613 23559 + 23559 23615 23614 + 23614 23615 23616 + 23616 23617 23614 + 23614 23617 23611 + 23615 23559 23558 + 23558 23618 23615 + 23616 23615 23618 + 23619 23616 23618 + 23620 23616 23619 + 23620 23617 23616 + 23617 23620 23621 + 23621 23611 23617 + 23618 23558 23563 + 23563 23622 23618 + 23618 23622 23623 + 23623 23624 23618 + 23618 23624 23619 + 23625 23619 23624 + 23625 23626 23619 + 23619 23626 23620 + 23621 23620 23626 + 23622 23563 23627 + 23627 23628 23622 + 23623 23622 23628 + 23629 23623 23628 + 23630 23623 23629 + 23630 23624 23623 + 23624 23630 23625 + 23631 23625 23630 + 23626 23625 23631 + 23570 23627 23563 + 23632 23627 23570 + 23632 23628 23627 + 23628 23632 23633 + 23633 23634 23628 + 23628 23634 23629 + 23570 23635 23632 + 23632 23635 23636 + 23637 23632 23636 + 23637 23633 23632 + 23638 23633 23637 + 23638 23634 23633 + 23634 23638 23639 + 23639 23629 23634 + 23574 23635 23570 + 23635 23574 23640 + 23640 23636 23635 + 23641 23636 23640 + 23636 23641 23642 + 23642 23643 23636 + 23636 23643 23637 + 23640 23574 23578 + 23578 23644 23640 + 23641 23640 23644 + 23644 23645 23641 + 23642 23641 23645 + 23645 23646 23642 + 23647 23642 23646 + 23642 23647 23648 + 23648 23643 23642 + 23603 23644 23578 + 23645 23644 23603 + 23603 23649 23645 + 23645 23649 23650 + 23650 23646 23645 + 23651 23646 23650 + 23646 23651 23647 + 23578 23582 23603 + 23649 23603 23602 + 23602 23652 23649 + 23650 23649 23652 + 23652 23653 23650 + 23653 23654 23650 + 23654 23651 23650 + 23647 23651 23654 + 23655 23647 23654 + 23648 23647 23655 + 23652 23602 23601 + 23601 23656 23652 + 23652 23656 23657 + 23657 23653 23652 + 23654 23653 23657 + 23654 23657 23658 + 23658 23659 23654 + 23654 23659 23655 + 23656 23601 23660 + 23660 23661 23656 + 23656 23661 23658 + 23658 23657 23656 + 23607 23660 23601 + 23662 23660 23607 + 23660 23662 23661 + 23661 23662 23663 + 23663 23664 23661 + 23661 23664 23658 + 23664 23665 23658 + 23665 23666 23658 + 23666 23659 23658 + 23607 23612 23662 + 23662 23612 23667 + 23667 23663 23662 + 23663 23667 23668 + 23665 23663 23668 + 23665 23664 23663 + 23612 23669 23667 + 23670 23667 23669 + 23668 23667 23670 + 23668 23670 23671 + 23671 23672 23668 + 23665 23668 23672 + 23665 23672 23673 + 23673 23666 23665 + 23659 23666 23673 + 23673 23655 23659 + 23611 23669 23612 + 23674 23669 23611 + 23669 23674 23670 + 23674 23675 23670 + 23675 23676 23670 + 23676 23671 23670 + 23677 23671 23676 + 23671 23677 23672 + 23672 23677 23678 + 23678 23673 23672 + 23655 23673 23678 + 23611 23621 23674 + 23674 23621 23679 + 23679 23675 23674 + 23675 23679 23680 + 23675 23680 23681 + 23681 23676 23675 + 23682 23676 23681 + 23676 23682 23677 + 23678 23677 23682 + 23648 23678 23682 + 23655 23678 23648 + 23683 23679 23621 + 23680 23679 23683 + 23683 23684 23680 + 23680 23684 23685 + 23685 23686 23680 + 23686 23681 23680 + 23682 23681 23686 + 23686 23687 23682 + 23682 23687 23648 + 23626 23683 23621 + 23631 23683 23626 + 23684 23683 23631 + 23684 23631 23688 + 23688 23685 23684 + 23685 23688 23629 + 23629 23639 23685 + 23685 23639 23689 + 23689 23686 23685 + 23687 23686 23689 + 23690 23687 23689 + 23687 23690 23648 + 23643 23648 23690 + 23630 23688 23631 + 23629 23688 23630 + 23690 23637 23643 + 23637 23690 23691 + 23637 23691 23638 + 23691 23639 23638 + 23691 23689 23639 + 23691 23690 23689 + 23692 23693 23694 + 23693 23695 23694 + 23696 23694 23695 + 23697 23694 23696 + 23694 23697 23692 + 23697 23698 23692 + 23699 23692 23698 + 23700 23692 23699 + 23695 23693 23701 + 23702 23695 23701 + 23695 23702 23703 + 23703 23704 23695 + 23695 23704 23696 + 23705 23702 23701 + 23703 23702 23705 + 23705 23706 23703 + 23703 23706 23707 + 23707 23708 23703 + 23704 23703 23708 + 23708 23709 23704 + 23696 23704 23709 + 23705 23701 23710 + 23711 23705 23710 + 23705 23711 23712 + 23712 23706 23705 + 23706 23712 23713 + 23713 23707 23706 + 23710 23701 23699 + 23699 23714 23710 + 23714 23715 23710 + 23715 23716 23710 + 23716 23717 23710 + 23718 23710 23717 + 23718 23711 23710 + 23701 23700 23699 + 23712 23711 23718 + 23718 23719 23712 + 23712 23719 23720 + 23720 23713 23712 + 23721 23713 23720 + 23707 23713 23721 + 23721 23722 23707 + 23707 23722 23723 + 23723 23708 23707 + 23709 23708 23723 + 23724 23719 23718 + 23719 23724 23725 + 23725 23720 23719 + 23720 23725 23726 + 23726 23727 23720 + 23720 23727 23721 + 23718 23728 23724 + 23724 23728 23729 + 23729 23730 23724 + 23724 23730 23731 + 23731 23725 23724 + 23726 23725 23731 + 23728 23718 23717 + 23729 23728 23717 + 23729 23717 23716 + 23732 23729 23716 + 23729 23732 23733 + 23733 23730 23729 + 23730 23733 23734 + 23734 23731 23730 + 23731 23734 23735 + 23735 23736 23731 + 23731 23736 23726 + 23737 23732 23716 + 23733 23732 23737 + 23737 23738 23733 + 23733 23738 23739 + 23739 23734 23733 + 23735 23734 23739 + 23740 23737 23716 + 23737 23740 23741 + 23741 23738 23737 + 23738 23741 23742 + 23742 23739 23738 + 23739 23742 23743 + 23743 23744 23739 + 23739 23744 23735 + 23716 23715 23740 + 23745 23740 23715 + 23741 23740 23745 + 23745 23746 23741 + 23741 23746 23747 + 23747 23742 23741 + 23743 23742 23747 + 23748 23745 23715 + 23745 23748 23749 + 23749 23746 23745 + 23746 23749 23750 + 23750 23747 23746 + 23747 23750 23751 + 23751 23752 23747 + 23747 23752 23743 + 23715 23714 23748 + 23753 23748 23714 + 23749 23748 23753 + 23753 23754 23749 + 23749 23754 23755 + 23755 23750 23749 + 23751 23750 23755 + 23756 23753 23714 + 23753 23756 23757 + 23757 23754 23753 + 23754 23757 23758 + 23758 23755 23754 + 23755 23758 23759 + 23759 23760 23755 + 23755 23760 23751 + 23714 23699 23756 + 23761 23756 23699 + 23757 23756 23761 + 23761 23762 23757 + 23757 23762 23763 + 23763 23758 23757 + 23759 23758 23763 + 23698 23761 23699 + 23761 23698 23764 + 23764 23762 23761 + 23762 23764 23765 + 23765 23763 23762 + 23763 23765 23766 + 23766 23767 23763 + 23763 23767 23759 + 23764 23698 23697 + 23697 23768 23764 + 23764 23768 23769 + 23769 23765 23764 + 23766 23765 23769 + 23769 23770 23766 + 23766 23770 23771 + 23771 23772 23766 + 23767 23766 23772 + 23696 23768 23697 + 23768 23696 23773 + 23773 23769 23768 + 23769 23773 23774 + 23774 23770 23769 + 23770 23774 23775 + 23775 23771 23770 + 23709 23773 23696 + 23774 23773 23709 + 23709 23776 23774 + 23774 23776 23777 + 23777 23775 23774 + 23778 23775 23777 + 23771 23775 23778 + 23778 23779 23771 + 23771 23779 23780 + 23780 23772 23771 + 23723 23776 23709 + 23776 23723 23781 + 23781 23777 23776 + 23777 23781 23782 + 23782 23783 23777 + 23777 23783 23778 + 23778 23783 23784 + 23784 23785 23778 + 23779 23778 23785 + 23786 23781 23723 + 23782 23781 23786 + 23786 23787 23782 + 23782 23787 23788 + 23788 23789 23782 + 23783 23782 23789 + 23789 23784 23783 + 23723 23722 23786 + 23790 23786 23722 + 23786 23790 23791 + 23791 23787 23786 + 23787 23791 23792 + 23792 23788 23787 + 23722 23721 23790 + 23793 23790 23721 + 23791 23790 23793 + 23793 23794 23791 + 23791 23794 23795 + 23795 23792 23791 + 23796 23792 23795 + 23788 23792 23796 + 23721 23727 23793 + 23797 23793 23727 + 23793 23797 23798 + 23798 23794 23793 + 23794 23798 23799 + 23799 23795 23794 + 23795 23799 23800 + 23800 23801 23795 + 23795 23801 23796 + 23727 23726 23797 + 23802 23797 23726 + 23798 23797 23802 + 23802 23803 23798 + 23798 23803 23804 + 23804 23799 23798 + 23800 23799 23804 + 23726 23736 23802 + 23805 23802 23736 + 23802 23805 23806 + 23806 23803 23802 + 23803 23806 23807 + 23807 23804 23803 + 23804 23807 23808 + 23808 23809 23804 + 23804 23809 23800 + 23736 23735 23805 + 23810 23805 23735 + 23806 23805 23810 + 23810 23811 23806 + 23806 23811 23812 + 23812 23807 23806 + 23808 23807 23812 + 23735 23744 23810 + 23813 23810 23744 + 23810 23813 23814 + 23814 23811 23810 + 23811 23814 23815 + 23815 23812 23811 + 23812 23815 23816 + 23816 23817 23812 + 23812 23817 23808 + 23744 23743 23813 + 23818 23813 23743 + 23814 23813 23818 + 23818 23819 23814 + 23814 23819 23820 + 23820 23815 23814 + 23816 23815 23820 + 23743 23752 23818 + 23821 23818 23752 + 23818 23821 23822 + 23822 23819 23818 + 23819 23822 23823 + 23823 23820 23819 + 23820 23823 23824 + 23824 23825 23820 + 23820 23825 23816 + 23752 23751 23821 + 23826 23821 23751 + 23822 23821 23826 + 23826 23827 23822 + 23822 23827 23828 + 23828 23823 23822 + 23824 23823 23828 + 23751 23760 23826 + 23829 23826 23760 + 23826 23829 23830 + 23830 23827 23826 + 23827 23830 23831 + 23831 23828 23827 + 23828 23831 23832 + 23832 23833 23828 + 23828 23833 23824 + 23760 23759 23829 + 23834 23829 23759 + 23830 23829 23834 + 23834 23835 23830 + 23830 23835 23836 + 23836 23831 23830 + 23832 23831 23836 + 23836 23837 23832 + 23838 23832 23837 + 23833 23832 23838 + 23759 23767 23834 + 23772 23834 23767 + 23834 23772 23780 + 23780 23835 23834 + 23835 23780 23839 + 23839 23836 23835 + 23836 23839 23840 + 23840 23837 23836 + 23837 23840 23841 + 23841 23842 23837 + 23837 23842 23838 + 23843 23839 23780 + 23840 23839 23843 + 23843 23844 23840 + 23840 23844 23845 + 23845 23841 23840 + 23846 23841 23845 + 23842 23841 23846 + 23780 23779 23843 + 23785 23843 23779 + 23843 23785 23847 + 23847 23844 23843 + 23844 23847 23848 + 23848 23849 23844 + 23844 23849 23845 + 23850 23845 23849 + 23851 23845 23850 + 23845 23851 23846 + 23847 23785 23784 + 23784 23852 23847 + 23847 23852 23853 + 23853 23848 23847 + 23854 23848 23853 + 23848 23854 23849 + 23849 23854 23850 + 23855 23850 23854 + 23856 23850 23855 + 23850 23856 23851 + 23857 23852 23784 + 23852 23857 23858 + 23858 23853 23852 + 23859 23853 23858 + 23853 23859 23854 + 23854 23859 23855 + 23860 23855 23859 + 23861 23855 23860 + 23855 23861 23856 + 23784 23789 23857 + 23857 23789 23788 + 23788 23862 23857 + 23857 23862 23863 + 23863 23858 23857 + 23864 23858 23863 + 23858 23864 23859 + 23859 23864 23860 + 23796 23862 23788 + 23862 23796 23865 + 23865 23863 23862 + 23866 23863 23865 + 23863 23866 23864 + 23860 23864 23866 + 23866 23867 23860 + 23868 23860 23867 + 23860 23868 23861 + 23869 23865 23796 + 23870 23865 23869 + 23865 23870 23866 + 23866 23870 23871 + 23871 23867 23866 + 23867 23871 23872 + 23867 23872 23868 + 23873 23868 23872 + 23861 23868 23873 + 23796 23801 23869 + 23874 23869 23801 + 23869 23874 23875 + 23875 23876 23869 + 23869 23876 23870 + 23871 23870 23876 + 23877 23871 23876 + 23872 23871 23877 + 23877 23878 23872 + 23872 23878 23873 + 23801 23800 23874 + 23879 23874 23800 + 23875 23874 23879 + 23879 23880 23875 + 23875 23880 23881 + 23882 23875 23881 + 23876 23875 23882 + 23882 23883 23876 + 23876 23883 23877 + 23800 23809 23879 + 23884 23879 23809 + 23879 23884 23885 + 23885 23880 23879 + 23880 23885 23886 + 23886 23881 23880 + 23809 23808 23884 + 23887 23884 23808 + 23885 23884 23887 + 23887 23888 23885 + 23886 23885 23888 + 23889 23886 23888 + 23890 23886 23889 + 23886 23890 23881 + 23808 23817 23887 + 23891 23887 23817 + 23887 23891 23892 + 23892 23888 23887 + 23888 23892 23893 + 23893 23894 23888 + 23888 23894 23889 + 23817 23816 23891 + 23895 23891 23816 + 23892 23891 23895 + 23895 23896 23892 + 23893 23892 23896 + 23896 23897 23893 + 23898 23893 23897 + 23893 23898 23894 + 23894 23898 23899 + 23899 23889 23894 + 23816 23825 23895 + 23900 23895 23825 + 23896 23895 23900 + 23900 23901 23896 + 23896 23901 23902 + 23902 23897 23896 + 23903 23897 23902 + 23897 23903 23898 + 23825 23824 23900 + 23904 23900 23824 + 23901 23900 23904 + 23904 23905 23901 + 23902 23901 23905 + 23906 23902 23905 + 23907 23902 23906 + 23902 23907 23903 + 23824 23833 23904 + 23838 23904 23833 + 23904 23838 23905 + 23905 23838 23908 + 23908 23909 23905 + 23905 23909 23906 + 23910 23906 23909 + 23906 23910 23911 + 23906 23911 23907 + 23912 23907 23911 + 23903 23907 23912 + 23842 23908 23838 + 23913 23908 23842 + 23909 23908 23913 + 23909 23913 23910 + 23910 23913 23914 + 23915 23910 23914 + 23911 23910 23915 + 23915 23916 23911 + 23911 23916 23912 + 23842 23914 23913 + 23846 23914 23842 + 23914 23846 23917 + 23917 23918 23914 + 23914 23918 23915 + 23919 23915 23918 + 23919 23916 23915 + 23916 23919 23920 + 23920 23912 23916 + 23921 23912 23920 + 23912 23921 23903 + 23898 23903 23921 + 23917 23846 23851 + 23851 23922 23917 + 23923 23917 23922 + 23918 23917 23923 + 23923 23924 23918 + 23918 23924 23919 + 23920 23919 23924 + 23924 23925 23920 + 23926 23920 23925 + 23920 23926 23921 + 23927 23922 23851 + 23922 23927 23928 + 23922 23928 23923 + 23923 23928 23929 + 23929 23930 23923 + 23924 23923 23930 + 23930 23925 23924 + 23851 23856 23927 + 23927 23856 23861 + 23861 23931 23927 + 23928 23927 23931 + 23931 23929 23928 + 23932 23929 23931 + 23929 23932 23933 + 23933 23930 23929 + 23925 23930 23933 + 23933 23934 23925 + 23925 23934 23926 + 23935 23926 23934 + 23921 23926 23935 + 23873 23931 23861 + 23931 23873 23932 + 23932 23873 23936 + 23936 23937 23932 + 23932 23937 23938 + 23933 23932 23938 + 23934 23933 23938 + 23938 23939 23934 + 23934 23939 23935 + 23878 23936 23873 + 23936 23878 23940 + 23941 23936 23940 + 23936 23941 23937 + 23937 23941 23942 + 23937 23942 23938 + 23943 23938 23942 + 23938 23943 23944 + 23944 23939 23938 + 23878 23877 23940 + 23940 23877 23883 + 23883 23945 23940 + 23941 23940 23945 + 23945 23946 23941 + 23941 23946 23942 + 23946 23947 23942 + 23942 23947 23943 + 23943 23947 23948 + 23944 23943 23948 + 23949 23945 23883 + 23945 23949 23947 + 23947 23946 23945 + 23883 23882 23949 + 23949 23882 23950 + 23950 23948 23949 + 23947 23949 23948 + 23881 23950 23882 + 23951 23950 23881 + 23950 23951 23948 + 23948 23951 23944 + 23944 23951 23890 + 23952 23944 23890 + 23939 23944 23952 + 23952 23935 23939 + 23953 23935 23952 + 23935 23953 23921 + 23881 23890 23951 + 23921 23953 23898 + 23953 23899 23898 + 23954 23899 23953 + 23889 23899 23954 + 23889 23954 23890 + 23890 23954 23952 + 23953 23952 23954 + 23955 23956 23957 + 23956 23958 23957 + 23958 23959 23957 + 23957 23959 23960 + 23960 23961 23957 + 23957 23961 23962 + 23963 23957 23962 + 23957 23963 23964 + 23964 23955 23957 + 23958 23956 23965 + 23965 23966 23958 + 23958 23966 23967 + 23959 23958 23967 + 23967 23968 23959 + 23959 23968 23960 + 23969 23960 23968 + 23961 23960 23969 + 23956 23970 23965 + 23971 23965 23970 + 23966 23965 23971 + 23971 23972 23966 + 23966 23972 23973 + 23973 23967 23966 + 23968 23967 23973 + 23973 23974 23968 + 23968 23974 23969 + 23975 23970 23956 + 23970 23975 23976 + 23976 23977 23970 + 23970 23977 23971 + 23971 23977 23978 + 23978 23979 23971 + 23972 23971 23979 + 23956 23980 23975 + 23981 23975 23980 + 23976 23975 23981 + 23981 23982 23976 + 23976 23982 23983 + 23983 23984 23976 + 23977 23976 23984 + 23984 23978 23977 + 23980 23964 23981 + 23964 23985 23981 + 23981 23985 23986 + 23986 23982 23981 + 23982 23986 23987 + 23987 23983 23982 + 23964 23988 23985 + 23986 23985 23988 + 23988 23989 23986 + 23986 23989 23990 + 23990 23987 23986 + 23991 23987 23990 + 23983 23987 23991 + 23964 23992 23988 + 23992 23993 23988 + 23988 23993 23989 + 23993 23994 23989 + 23989 23994 23995 + 23995 23990 23989 + 23996 23992 23964 + 23992 23996 23997 + 23992 23997 23993 + 23994 23993 23997 + 23997 23998 23994 + 23994 23998 23999 + 23999 23995 23994 + 24000 23995 23999 + 23990 23995 24000 + 23963 23996 23964 + 23996 23963 24001 + 24001 24002 23996 + 23996 24002 24003 + 23996 24003 23997 + 23997 24003 24004 + 24004 23998 23997 + 23998 24004 24005 + 24005 23999 23998 + 23963 24006 24001 + 24007 24001 24006 + 24002 24001 24007 + 24007 24008 24002 + 24002 24008 24004 + 24004 24003 24002 + 23962 24006 23963 + 24006 23962 24009 + 24009 24010 24006 + 24006 24010 24007 + 24007 24010 24011 + 24011 24012 24007 + 24008 24007 24012 + 24012 24013 24008 + 24004 24008 24013 + 24013 24005 24004 + 24009 23962 23961 + 23961 24014 24009 + 24009 24014 24015 + 24015 24016 24009 + 24010 24009 24016 + 24016 24011 24010 + 23969 24014 23961 + 24014 23969 24017 + 24017 24015 24014 + 24015 24017 24018 + 24018 24019 24015 + 24015 24019 24020 + 24020 24016 24015 + 24011 24016 24020 + 24021 24017 23969 + 24018 24017 24021 + 24021 24022 24018 + 24018 24022 24023 + 24023 24024 24018 + 24019 24018 24024 + 24024 24025 24019 + 24020 24019 24025 + 23969 23974 24021 + 24026 24021 23974 + 24021 24026 24027 + 24027 24022 24021 + 24022 24027 24028 + 24028 24023 24022 + 23974 23973 24026 + 24029 24026 23973 + 24027 24026 24029 + 24029 24030 24027 + 24027 24030 24031 + 24031 24028 24027 + 24032 24028 24031 + 24023 24028 24032 + 23973 23972 24029 + 23979 24029 23972 + 24029 23979 24033 + 24033 24030 24029 + 24030 24033 24034 + 24034 24031 24030 + 24031 24034 24035 + 24035 24036 24031 + 24031 24036 24032 + 24033 23979 23978 + 23978 24037 24033 + 24033 24037 24038 + 24038 24034 24033 + 24035 24034 24038 + 24038 24039 24035 + 24035 24039 24040 + 24040 24041 24035 + 24036 24035 24041 + 24042 24037 23978 + 24037 24042 24043 + 24043 24038 24037 + 24038 24043 24044 + 24044 24039 24038 + 24039 24044 24045 + 24045 24040 24039 + 23978 23984 24042 + 24042 23984 23983 + 23983 24046 24042 + 24042 24046 24047 + 24047 24043 24042 + 24044 24043 24047 + 24047 24048 24044 + 24044 24048 24049 + 24049 24045 24044 + 24050 24045 24049 + 24040 24045 24050 + 23991 24046 23983 + 24046 23991 24051 + 24051 24047 24046 + 24047 24051 24052 + 24052 24048 24047 + 24048 24052 24053 + 24053 24049 24048 + 24049 24053 24054 + 24054 24055 24049 + 24049 24055 24050 + 24056 24051 23991 + 24052 24051 24056 + 24056 24057 24052 + 24052 24057 24058 + 24058 24053 24052 + 24054 24053 24058 + 24058 24059 24054 + 24060 24054 24059 + 24055 24054 24060 + 23991 24061 24056 + 24062 24056 24061 + 24056 24062 24063 + 24063 24057 24056 + 24057 24063 24064 + 24064 24058 24057 + 24058 24064 24065 + 24065 24059 24058 + 23990 24061 23991 + 24000 24061 23990 + 24061 24000 24062 + 24066 24062 24000 + 24063 24062 24066 + 24066 24067 24063 + 24063 24067 24068 + 24068 24064 24063 + 24065 24064 24068 + 24000 24069 24066 + 24070 24066 24069 + 24066 24070 24071 + 24071 24067 24066 + 24067 24071 24072 + 24072 24068 24067 + 23999 24069 24000 + 24073 24069 23999 + 24069 24073 24070 + 24074 24070 24073 + 24071 24070 24074 + 24074 24075 24071 + 24071 24075 24076 + 24076 24072 24071 + 24077 24072 24076 + 24068 24072 24077 + 23999 24005 24073 + 24073 24005 24013 + 24013 24078 24073 + 24073 24078 24074 + 24079 24074 24078 + 24074 24079 24080 + 24080 24075 24074 + 24075 24080 24081 + 24081 24076 24075 + 24082 24078 24013 + 24078 24082 24079 + 24083 24079 24082 + 24080 24079 24083 + 24083 24084 24080 + 24080 24084 24085 + 24085 24081 24080 + 24086 24081 24085 + 24076 24081 24086 + 24013 24012 24082 + 24082 24012 24011 + 24011 24087 24082 + 24082 24087 24083 + 24088 24083 24087 + 24083 24088 24089 + 24089 24084 24083 + 24084 24089 24090 + 24090 24085 24084 + 24020 24087 24011 + 24087 24020 24088 + 24025 24088 24020 + 24089 24088 24025 + 24025 24091 24089 + 24089 24091 24092 + 24092 24090 24089 + 24093 24090 24092 + 24085 24090 24093 + 24093 24094 24085 + 24085 24094 24086 + 24095 24091 24025 + 24091 24095 24096 + 24096 24092 24091 + 24092 24096 24097 + 24097 24098 24092 + 24092 24098 24093 + 24025 24024 24095 + 24095 24024 24023 + 24023 24099 24095 + 24095 24099 24100 + 24100 24096 24095 + 24097 24096 24100 + 24100 24101 24097 + 24097 24101 24102 + 24102 24103 24097 + 24098 24097 24103 + 24032 24099 24023 + 24099 24032 24104 + 24104 24100 24099 + 24100 24104 24105 + 24105 24101 24100 + 24101 24105 24106 + 24106 24102 24101 + 24107 24104 24032 + 24105 24104 24107 + 24107 24108 24105 + 24105 24108 24109 + 24109 24106 24105 + 24110 24106 24109 + 24102 24106 24110 + 24032 24036 24107 + 24041 24107 24036 + 24107 24041 24111 + 24111 24108 24107 + 24108 24111 24112 + 24112 24109 24108 + 24113 24109 24112 + 24109 24113 24110 + 24114 24110 24113 + 24115 24110 24114 + 24110 24115 24102 + 24111 24041 24040 + 24040 24116 24111 + 24111 24116 24117 + 24117 24112 24111 + 24118 24112 24117 + 24112 24118 24113 + 24113 24118 24119 + 24119 24120 24113 + 24113 24120 24114 + 24050 24116 24040 + 24116 24050 24121 + 24121 24117 24116 + 24122 24117 24121 + 24117 24122 24118 + 24119 24118 24122 + 24122 24123 24119 + 24124 24119 24123 + 24124 24120 24119 + 24125 24121 24050 + 24126 24121 24125 + 24121 24126 24122 + 24122 24126 24127 + 24127 24123 24122 + 24128 24123 24127 + 24123 24128 24124 + 24129 24124 24128 + 24120 24124 24129 + 24050 24055 24125 + 24060 24125 24055 + 24060 24130 24125 + 24125 24130 24126 + 24126 24130 24131 + 24131 24127 24126 + 24132 24127 24131 + 24127 24132 24128 + 24130 24060 24133 + 24133 24131 24130 + 24134 24131 24133 + 24131 24134 24132 + 24135 24132 24134 + 24128 24132 24135 + 24135 24136 24128 + 24128 24136 24137 + 24137 24129 24128 + 24138 24133 24060 + 24139 24133 24138 + 24133 24139 24134 + 24134 24139 24140 + 24140 24141 24134 + 24134 24141 24135 + 24142 24135 24141 + 24136 24135 24142 + 24059 24138 24060 + 24143 24138 24059 + 24138 24143 24144 + 24144 24145 24138 + 24138 24145 24139 + 24140 24139 24145 + 24145 24146 24140 + 24147 24140 24146 + 24147 24141 24140 + 24141 24147 24142 + 24059 24065 24143 + 24148 24143 24065 + 24144 24143 24148 + 24148 24149 24144 + 24150 24144 24149 + 24145 24144 24150 + 24150 24146 24145 + 24146 24150 24151 + 24151 24152 24146 + 24146 24152 24147 + 24065 24153 24148 + 24153 24154 24148 + 24155 24148 24154 + 24149 24148 24155 + 24068 24153 24065 + 24077 24153 24068 + 24153 24077 24156 + 24156 24154 24153 + 24157 24154 24156 + 24154 24157 24155 + 24155 24157 24158 + 24159 24155 24158 + 24149 24155 24159 + 24160 24156 24077 + 24157 24156 24160 + 24160 24158 24157 + 24158 24160 24161 + 24161 24162 24158 + 24158 24162 24163 + 24163 24164 24158 + 24158 24164 24159 + 24077 24165 24160 + 24161 24160 24165 + 24165 24086 24161 + 24166 24161 24086 + 24162 24161 24166 + 24166 24167 24162 + 24163 24162 24167 + 24076 24165 24077 + 24086 24165 24076 + 24086 24094 24166 + 24168 24166 24094 + 24166 24168 24169 + 24169 24167 24166 + 24167 24169 24170 + 24170 24171 24167 + 24167 24171 24163 + 24094 24093 24168 + 24172 24168 24093 + 24169 24168 24172 + 24172 24173 24169 + 24170 24169 24173 + 24174 24170 24173 + 24175 24170 24174 + 24170 24175 24171 + 24171 24175 24176 + 24176 24163 24171 + 24093 24098 24172 + 24103 24172 24098 + 24172 24103 24177 + 24177 24173 24172 + 24173 24177 24178 + 24178 24179 24173 + 24173 24179 24174 + 24180 24174 24179 + 24180 24181 24174 + 24174 24181 24175 + 24176 24175 24181 + 24177 24103 24102 + 24102 24115 24177 + 24177 24115 24182 + 24182 24183 24177 + 24183 24178 24177 + 24184 24178 24183 + 24178 24184 24179 + 24179 24184 24180 + 24180 24184 24185 + 24186 24180 24185 + 24181 24180 24186 + 24114 24182 24115 + 24187 24182 24114 + 24182 24187 24188 + 24188 24183 24182 + 24188 24185 24183 + 24183 24185 24184 + 24189 24187 24114 + 24190 24187 24189 + 24188 24187 24190 + 24190 24191 24188 + 24185 24188 24191 + 24191 24192 24185 + 24185 24192 24186 + 24189 24114 24193 + 24193 24194 24189 + 24194 24195 24189 + 24195 24196 24189 + 24196 24190 24189 + 24197 24190 24196 + 24191 24190 24197 + 24120 24193 24114 + 24129 24193 24120 + 24194 24193 24129 + 24194 24129 24137 + 24137 24195 24194 + 24198 24195 24137 + 24195 24198 24197 + 24197 24196 24195 + 24198 24137 24136 + 24136 24199 24198 + 24197 24198 24199 + 24200 24197 24199 + 24200 24191 24197 + 24191 24200 24201 + 24201 24192 24191 + 24192 24201 24202 + 24202 24186 24192 + 24186 24202 24203 + 24186 24203 24181 + 24142 24199 24136 + 24199 24142 24204 + 24204 24205 24199 + 24199 24205 24200 + 24201 24200 24205 + 24205 24206 24201 + 24201 24206 24207 + 24207 24202 24201 + 24203 24202 24207 + 24207 24208 24203 + 24181 24203 24208 + 24208 24176 24181 + 24204 24142 24147 + 24147 24152 24204 + 24209 24204 24152 + 24204 24209 24206 + 24206 24205 24204 + 24152 24151 24209 + 24209 24151 24210 + 24210 24211 24209 + 24206 24209 24211 + 24211 24207 24206 + 24207 24211 24212 + 24212 24208 24207 + 24208 24212 24213 + 24213 24176 24208 + 24163 24176 24213 + 24213 24164 24163 + 24214 24210 24151 + 24214 24215 24210 + 24210 24215 24212 + 24212 24211 24210 + 24151 24150 24214 + 24214 24150 24149 + 24149 24216 24214 + 24215 24214 24216 + 24216 24217 24215 + 24215 24217 24213 + 24213 24212 24215 + 24159 24216 24149 + 24217 24216 24159 + 24217 24159 24164 + 24164 24213 24217 + 24218 24219 24220 + 24218 24221 24219 + 24222 24219 24221 + 24219 24222 24223 + 24220 24224 24218 + 24225 24218 24224 + 24225 24226 24218 + 24226 24221 24218 + 24227 24221 24226 + 24227 24222 24221 + 24228 24224 24220 + 24229 24224 24228 + 24224 24229 24225 + 24230 24225 24229 + 24225 24230 24231 + 24225 24231 24226 + 24228 24220 24232 + 24232 24233 24228 + 24234 24228 24233 + 24234 24229 24228 + 24235 24229 24234 + 24229 24235 24230 + 24236 24230 24235 + 24231 24230 24236 + 24232 24220 24223 + 24237 24232 24223 + 24238 24232 24237 + 24238 24233 24232 + 24233 24238 24239 + 24239 24240 24233 + 24233 24240 24234 + 24241 24234 24240 + 24234 24241 24235 + 24223 24242 24237 + 24242 24243 24237 + 24244 24237 24243 + 24244 24245 24237 + 24237 24245 24238 + 24238 24245 24246 + 24246 24239 24238 + 24247 24242 24223 + 24248 24242 24247 + 24242 24248 24249 + 24249 24243 24242 + 24250 24243 24249 + 24243 24250 24244 + 24251 24244 24250 + 24245 24244 24251 + 24223 24252 24247 + 24253 24247 24252 + 24248 24247 24253 + 24253 24254 24248 + 24249 24248 24254 + 24254 24255 24249 + 24256 24249 24255 + 24249 24256 24250 + 24252 24223 24257 + 24252 24257 24258 + 24258 24259 24252 + 24252 24259 24253 + 24260 24253 24259 + 24254 24253 24260 + 24257 24223 24222 + 24222 24261 24257 + 24257 24261 24262 + 24258 24257 24262 + 24263 24258 24262 + 24258 24263 24264 + 24264 24259 24258 + 24259 24264 24260 + 24222 24227 24261 + 24261 24227 24265 + 24265 24262 24261 + 24266 24262 24265 + 24262 24266 24263 + 24267 24263 24266 + 24264 24263 24267 + 24267 24268 24264 + 24260 24264 24268 + 24265 24227 24226 + 24269 24265 24226 + 24265 24269 24266 + 24266 24269 24270 + 24270 24271 24266 + 24266 24271 24272 + 24272 24267 24266 + 24273 24267 24272 + 24273 24268 24267 + 24226 24231 24269 + 24270 24269 24231 + 24231 24274 24270 + 24274 24275 24270 + 24276 24270 24275 + 24270 24276 24277 + 24277 24271 24270 + 24271 24277 24278 + 24278 24272 24271 + 24236 24274 24231 + 24236 24279 24274 + 24274 24279 24280 + 24280 24275 24274 + 24281 24275 24280 + 24275 24281 24276 + 24281 24282 24276 + 24277 24276 24282 + 24283 24279 24236 + 24279 24283 24284 + 24284 24280 24279 + 24285 24280 24284 + 24280 24285 24281 + 24286 24281 24285 + 24281 24286 24282 + 24287 24283 24236 + 24288 24283 24287 + 24283 24288 24289 + 24289 24284 24283 + 24290 24284 24289 + 24284 24290 24285 + 24235 24287 24236 + 24291 24287 24235 + 24287 24291 24288 + 24288 24291 24292 + 24292 24293 24288 + 24289 24288 24293 + 24293 24294 24289 + 24295 24289 24294 + 24289 24295 24290 + 24235 24241 24291 + 24241 24296 24291 + 24296 24292 24291 + 24246 24292 24296 + 24293 24292 24246 + 24246 24297 24293 + 24293 24297 24298 + 24298 24294 24293 + 24299 24294 24298 + 24294 24299 24295 + 24240 24296 24241 + 24296 24240 24239 + 24296 24239 24246 + 24300 24295 24299 + 24290 24295 24300 + 24300 24301 24290 + 24301 24285 24290 + 24301 24302 24285 + 24302 24286 24285 + 24303 24286 24302 + 24286 24303 24304 + 24286 24304 24282 + 24299 24305 24300 + 24306 24300 24305 + 24301 24300 24306 + 24306 24307 24301 + 24301 24307 24302 + 24307 24303 24302 + 24303 24307 24308 + 24308 24309 24303 + 24303 24309 24304 + 24310 24305 24299 + 24311 24305 24310 + 24305 24311 24306 + 24312 24306 24311 + 24307 24306 24312 + 24312 24308 24307 + 24312 24313 24308 + 24308 24313 24314 + 24314 24309 24308 + 24304 24309 24314 + 24299 24315 24310 + 24310 24315 24316 + 24316 24317 24310 + 24318 24310 24317 + 24310 24318 24311 + 24298 24315 24299 + 24315 24298 24319 + 24319 24316 24315 + 24316 24319 24320 + 24320 24321 24316 + 24316 24321 24322 + 24322 24317 24316 + 24323 24317 24322 + 24317 24323 24318 + 24324 24319 24298 + 24320 24319 24324 + 24324 24325 24320 + 24320 24325 24326 + 24326 24327 24320 + 24321 24320 24327 + 24327 24328 24321 + 24322 24321 24328 + 24298 24297 24324 + 24329 24324 24297 + 24324 24329 24330 + 24330 24325 24324 + 24325 24330 24331 + 24331 24326 24325 + 24297 24246 24329 + 24332 24329 24246 + 24330 24329 24332 + 24332 24333 24330 + 24330 24333 24334 + 24334 24331 24330 + 24335 24331 24334 + 24326 24331 24335 + 24336 24332 24246 + 24337 24332 24336 + 24332 24337 24333 + 24333 24337 24338 + 24338 24334 24333 + 24334 24338 24339 + 24339 24340 24334 + 24334 24340 24335 + 24245 24336 24246 + 24251 24336 24245 + 24251 24341 24336 + 24336 24341 24337 + 24337 24341 24342 + 24342 24338 24337 + 24339 24338 24342 + 24342 24343 24339 + 24344 24339 24343 + 24340 24339 24344 + 24341 24251 24345 + 24345 24342 24341 + 24342 24345 24346 + 24346 24343 24342 + 24343 24346 24347 + 24347 24348 24343 + 24343 24348 24344 + 24345 24251 24250 + 24250 24349 24345 + 24346 24345 24349 + 24349 24350 24346 + 24347 24346 24350 + 24350 24351 24347 + 24352 24347 24351 + 24348 24347 24352 + 24353 24349 24250 + 24349 24353 24354 + 24354 24350 24349 + 24350 24354 24355 + 24355 24351 24350 + 24351 24355 24356 + 24356 24357 24351 + 24351 24357 24352 + 24250 24256 24353 + 24358 24353 24256 + 24354 24353 24358 + 24358 24359 24354 + 24355 24354 24359 + 24359 24360 24355 + 24356 24355 24360 + 24360 24361 24356 + 24362 24356 24361 + 24357 24356 24362 + 24256 24363 24358 + 24364 24358 24363 + 24359 24358 24364 + 24365 24359 24364 + 24359 24365 24366 + 24366 24360 24359 + 24360 24366 24367 + 24367 24361 24360 + 24255 24363 24256 + 24368 24363 24255 + 24363 24368 24364 + 24369 24364 24368 + 24365 24364 24369 + 24369 24370 24365 + 24366 24365 24370 + 24370 24371 24366 + 24367 24366 24371 + 24255 24372 24368 + 24368 24372 24373 + 24373 24374 24368 + 24368 24374 24369 + 24375 24369 24374 + 24369 24375 24376 + 24376 24370 24369 + 24372 24255 24254 + 24254 24377 24372 + 24373 24372 24377 + 24377 24378 24373 + 24379 24373 24378 + 24374 24373 24379 + 24379 24380 24374 + 24374 24380 24375 + 24381 24375 24380 + 24376 24375 24381 + 24260 24377 24254 + 24377 24260 24382 + 24382 24378 24377 + 24378 24382 24383 + 24383 24384 24378 + 24378 24384 24379 + 24379 24384 24385 + 24385 24386 24379 + 24380 24379 24386 + 24268 24382 24260 + 24383 24382 24268 + 24268 24273 24383 + 24383 24273 24387 + 24387 24388 24383 + 24384 24383 24388 + 24388 24385 24384 + 24385 24388 24389 + 24389 24390 24385 + 24385 24390 24391 + 24391 24386 24385 + 24272 24387 24273 + 24392 24387 24272 + 24387 24392 24389 + 24389 24388 24387 + 24272 24278 24392 + 24392 24278 24393 + 24393 24394 24392 + 24389 24392 24394 + 24394 24395 24389 + 24395 24396 24389 + 24390 24389 24396 + 24396 24397 24390 + 24391 24390 24397 + 24393 24278 24277 + 24277 24398 24393 + 24399 24393 24398 + 24394 24393 24399 + 24394 24399 24400 + 24400 24395 24394 + 24401 24395 24400 + 24395 24401 24402 + 24402 24396 24395 + 24402 24397 24396 + 24282 24398 24277 + 24403 24398 24282 + 24398 24403 24399 + 24400 24399 24403 + 24403 24404 24400 + 24401 24400 24404 + 24404 24405 24401 + 24402 24401 24405 + 24282 24406 24403 + 24403 24406 24407 + 24407 24404 24403 + 24407 24405 24404 + 24405 24407 24408 + 24408 24409 24405 + 24405 24409 24402 + 24406 24282 24304 + 24304 24314 24406 + 24407 24406 24314 + 24408 24407 24314 + 24314 24313 24408 + 24313 24410 24408 + 24411 24408 24410 + 24408 24411 24409 + 24409 24411 24412 + 24412 24413 24409 + 24409 24413 24402 + 24413 24414 24402 + 24397 24402 24414 + 24415 24410 24313 + 24410 24415 24416 + 24410 24416 24411 + 24411 24416 24417 + 24417 24412 24411 + 24418 24412 24417 + 24413 24412 24418 + 24313 24312 24415 + 24415 24312 24311 + 24311 24419 24415 + 24416 24415 24419 + 24419 24420 24416 + 24416 24420 24417 + 24421 24417 24420 + 24417 24421 24422 + 24422 24423 24417 + 24417 24423 24418 + 24424 24419 24311 + 24419 24424 24420 + 24420 24424 24421 + 24323 24421 24424 + 24422 24421 24323 + 24323 24425 24422 + 24422 24425 24426 + 24426 24427 24422 + 24423 24422 24427 + 24311 24318 24424 + 24424 24318 24323 + 24322 24425 24323 + 24425 24322 24428 + 24428 24426 24425 + 24426 24428 24429 + 24429 24430 24426 + 24426 24430 24431 + 24431 24427 24426 + 24432 24427 24431 + 24427 24432 24423 + 24418 24423 24432 + 24328 24428 24322 + 24429 24428 24328 + 24328 24433 24429 + 24434 24429 24433 + 24430 24429 24434 + 24434 24435 24430 + 24430 24435 24436 + 24436 24431 24430 + 24437 24431 24436 + 24431 24437 24432 + 24438 24433 24328 + 24433 24438 24439 + 24439 24440 24433 + 24433 24440 24434 + 24441 24434 24440 + 24435 24434 24441 + 24328 24327 24438 + 24438 24327 24326 + 24326 24442 24438 + 24438 24442 24443 + 24443 24439 24438 + 24444 24439 24443 + 24440 24439 24444 + 24444 24445 24440 + 24440 24445 24441 + 24335 24442 24326 + 24442 24335 24446 + 24446 24443 24442 + 24443 24446 24447 + 24447 24448 24443 + 24443 24448 24444 + 24449 24444 24448 + 24445 24444 24449 + 24446 24335 24340 + 24340 24450 24446 + 24447 24446 24450 + 24450 24451 24447 + 24452 24447 24451 + 24448 24447 24452 + 24452 24453 24448 + 24448 24453 24449 + 24344 24450 24340 + 24450 24344 24454 + 24454 24451 24450 + 24451 24454 24455 + 24455 24456 24451 + 24451 24456 24452 + 24457 24452 24456 + 24453 24452 24457 + 24454 24344 24348 + 24348 24458 24454 + 24455 24454 24458 + 24458 24459 24455 + 24460 24455 24459 + 24456 24455 24460 + 24460 24461 24456 + 24456 24461 24457 + 24352 24458 24348 + 24458 24352 24462 + 24462 24459 24458 + 24459 24462 24463 + 24463 24464 24459 + 24459 24464 24460 + 24465 24460 24464 + 24461 24460 24465 + 24466 24462 24352 + 24463 24462 24466 + 24466 24467 24463 + 24468 24463 24467 + 24464 24463 24468 + 24468 24469 24464 + 24464 24469 24465 + 24352 24357 24466 + 24362 24466 24357 + 24466 24362 24470 + 24470 24467 24466 + 24467 24470 24471 + 24471 24472 24467 + 24467 24472 24468 + 24473 24468 24472 + 24469 24468 24473 + 24470 24362 24474 + 24474 24475 24470 + 24471 24470 24475 + 24475 24476 24471 + 24477 24471 24476 + 24472 24471 24477 + 24477 24478 24472 + 24472 24478 24473 + 24361 24474 24362 + 24479 24474 24361 + 24474 24479 24480 + 24480 24475 24474 + 24475 24480 24481 + 24481 24476 24475 + 24476 24481 24482 + 24482 24483 24476 + 24476 24483 24477 + 24361 24367 24479 + 24479 24367 24484 + 24484 24485 24479 + 24480 24479 24485 + 24485 24486 24480 + 24481 24480 24486 + 24486 24487 24481 + 24482 24481 24487 + 24371 24484 24367 + 24488 24484 24371 + 24484 24488 24489 + 24489 24485 24484 + 24485 24489 24490 + 24490 24486 24485 + 24486 24490 24491 + 24491 24487 24486 + 24371 24492 24488 + 24488 24492 24493 + 24493 24494 24488 + 24489 24488 24494 + 24494 24495 24489 + 24490 24489 24495 + 24492 24371 24370 + 24370 24376 24492 + 24492 24376 24496 + 24496 24493 24492 + 24497 24493 24496 + 24493 24497 24498 + 24498 24494 24493 + 24494 24498 24499 + 24499 24495 24494 + 24381 24496 24376 + 24500 24496 24381 + 24496 24500 24497 + 24497 24500 24501 + 24501 24502 24497 + 24498 24497 24502 + 24502 24503 24498 + 24499 24498 24503 + 24381 24504 24500 + 24500 24504 24505 + 24505 24501 24500 + 24506 24501 24505 + 24501 24506 24507 + 24507 24502 24501 + 24502 24507 24508 + 24508 24503 24502 + 24504 24381 24509 + 24509 24510 24504 + 24505 24504 24510 + 24510 24511 24505 + 24512 24505 24511 + 24505 24512 24506 + 24380 24509 24381 + 24386 24509 24380 + 24510 24509 24386 + 24386 24391 24510 + 24510 24391 24513 + 24513 24511 24510 + 24514 24511 24513 + 24511 24514 24512 + 24515 24512 24514 + 24506 24512 24515 + 24515 24516 24506 + 24507 24506 24516 + 24516 24517 24507 + 24508 24507 24517 + 24397 24513 24391 + 24414 24513 24397 + 24513 24414 24514 + 24514 24414 24413 + 24413 24518 24514 + 24514 24518 24515 + 24519 24515 24518 + 24515 24519 24520 + 24520 24516 24515 + 24516 24520 24521 + 24521 24517 24516 + 24418 24518 24413 + 24518 24418 24519 + 24432 24519 24418 + 24520 24519 24432 + 24432 24437 24520 + 24521 24520 24437 + 24437 24522 24521 + 24523 24521 24522 + 24517 24521 24523 + 24523 24524 24517 + 24517 24524 24508 + 24525 24508 24524 + 24503 24508 24525 + 24436 24522 24437 + 24522 24436 24526 + 24526 24527 24522 + 24522 24527 24523 + 24528 24523 24527 + 24524 24523 24528 + 24528 24529 24524 + 24524 24529 24525 + 24526 24436 24435 + 24435 24530 24526 + 24531 24526 24530 + 24527 24526 24531 + 24531 24532 24527 + 24527 24532 24528 + 24533 24528 24532 + 24529 24528 24533 + 24441 24530 24435 + 24530 24441 24534 + 24534 24535 24530 + 24530 24535 24531 + 24536 24531 24535 + 24532 24531 24536 + 24536 24537 24532 + 24532 24537 24533 + 24534 24441 24445 + 24445 24538 24534 + 24539 24534 24538 + 24535 24534 24539 + 24539 24540 24535 + 24535 24540 24536 + 24541 24536 24540 + 24537 24536 24541 + 24449 24538 24445 + 24538 24449 24542 + 24542 24543 24538 + 24538 24543 24539 + 24544 24539 24543 + 24540 24539 24544 + 24544 24545 24540 + 24540 24545 24541 + 24542 24449 24453 + 24453 24546 24542 + 24547 24542 24546 + 24543 24542 24547 + 24547 24548 24543 + 24543 24548 24544 + 24549 24544 24548 + 24545 24544 24549 + 24457 24546 24453 + 24546 24457 24550 + 24550 24551 24546 + 24546 24551 24547 + 24552 24547 24551 + 24548 24547 24552 + 24552 24553 24548 + 24548 24553 24549 + 24550 24457 24461 + 24461 24554 24550 + 24555 24550 24554 + 24551 24550 24555 + 24555 24556 24551 + 24551 24556 24552 + 24557 24552 24556 + 24553 24552 24557 + 24465 24554 24461 + 24554 24465 24558 + 24558 24559 24554 + 24554 24559 24555 + 24560 24555 24559 + 24556 24555 24560 + 24560 24561 24556 + 24556 24561 24557 + 24558 24465 24469 + 24469 24562 24558 + 24563 24558 24562 + 24559 24558 24563 + 24563 24564 24559 + 24559 24564 24560 + 24565 24560 24564 + 24565 24561 24560 + 24473 24562 24469 + 24562 24473 24566 + 24566 24567 24562 + 24562 24567 24563 + 24568 24563 24567 + 24568 24569 24563 + 24569 24564 24563 + 24564 24569 24565 + 24566 24473 24478 + 24478 24570 24566 + 24571 24566 24570 + 24571 24567 24566 + 24571 24572 24567 + 24567 24572 24568 + 24568 24572 24573 + 24573 24574 24568 + 24574 24569 24568 + 24574 24565 24569 + 24575 24570 24478 + 24576 24570 24575 + 24576 24577 24570 + 24570 24577 24571 + 24578 24571 24577 + 24572 24571 24578 + 24578 24573 24572 + 24574 24573 24578 + 24579 24574 24578 + 24574 24579 24565 + 24478 24477 24575 + 24575 24477 24483 + 24483 24580 24575 + 24580 24581 24575 + 24581 24576 24575 + 24582 24576 24581 + 24577 24576 24582 + 24582 24578 24577 + 24583 24580 24483 + 24584 24580 24583 + 24584 24581 24580 + 24581 24584 24585 + 24585 24582 24581 + 24582 24585 24586 + 24578 24582 24586 + 24483 24482 24583 + 24583 24482 24587 + 24587 24588 24583 + 24584 24583 24588 + 24588 24589 24584 + 24585 24584 24589 + 24585 24589 24590 + 24591 24585 24590 + 24585 24591 24586 + 24487 24587 24482 + 24592 24587 24487 + 24587 24592 24593 + 24593 24588 24587 + 24590 24588 24593 + 24590 24589 24588 + 24487 24491 24592 + 24592 24491 24594 + 24594 24595 24592 + 24593 24592 24595 + 24595 24596 24593 + 24590 24593 24596 + 24596 24597 24590 + 24591 24590 24597 + 24594 24491 24490 + 24490 24598 24594 + 24599 24594 24598 + 24594 24599 24600 + 24600 24595 24594 + 24595 24600 24601 + 24601 24596 24595 + 24602 24596 24601 + 24602 24597 24596 + 24591 24597 24602 + 24495 24598 24490 + 24603 24598 24495 + 24598 24603 24599 + 24599 24603 24604 + 24604 24605 24599 + 24600 24599 24605 + 24605 24606 24600 + 24601 24600 24606 + 24606 24607 24601 + 24602 24601 24607 + 24495 24499 24603 + 24603 24499 24608 + 24608 24604 24603 + 24609 24604 24608 + 24604 24609 24610 + 24610 24605 24604 + 24605 24610 24611 + 24611 24606 24605 + 24606 24611 24612 + 24612 24607 24606 + 24503 24608 24499 + 24525 24608 24503 + 24608 24525 24609 + 24609 24525 24529 + 24529 24613 24609 + 24610 24609 24613 + 24613 24614 24610 + 24611 24610 24614 + 24614 24615 24611 + 24612 24611 24615 + 24533 24613 24529 + 24613 24533 24616 + 24616 24614 24613 + 24614 24616 24617 + 24617 24615 24614 + 24615 24617 24618 + 24618 24619 24615 + 24615 24619 24612 + 24616 24533 24537 + 24537 24620 24616 + 24617 24616 24620 + 24620 24621 24617 + 24617 24621 24622 + 24622 24618 24617 + 24622 24623 24618 + 24623 24624 24618 + 24619 24618 24624 + 24541 24620 24537 + 24620 24541 24625 + 24625 24621 24620 + 24621 24625 24626 + 24626 24622 24621 + 24622 24626 24627 + 24627 24623 24622 + 24623 24627 24628 + 24628 24586 24623 + 24586 24624 24623 + 24625 24541 24545 + 24545 24629 24625 + 24626 24625 24629 + 24629 24630 24626 + 24630 24631 24626 + 24631 24627 24626 + 24628 24627 24631 + 24632 24628 24631 + 24628 24632 24578 + 24586 24628 24578 + 24549 24629 24545 + 24629 24549 24633 + 24633 24630 24629 + 24630 24633 24634 + 24634 24631 24630 + 24631 24634 24632 + 24632 24634 24635 + 24579 24632 24635 + 24632 24579 24578 + 24633 24549 24553 + 24553 24636 24633 + 24634 24633 24636 + 24636 24635 24634 + 24637 24635 24636 + 24635 24637 24579 + 24579 24637 24638 + 24579 24638 24565 + 24565 24638 24561 + 24557 24636 24553 + 24637 24636 24557 + 24637 24557 24561 + 24561 24638 24637 + 24639 24624 24586 + 24624 24639 24619 + 24619 24639 24640 + 24640 24612 24619 + 24640 24641 24612 + 24641 24607 24612 + 24586 24642 24639 + 24642 24640 24639 + 24642 24643 24640 + 24643 24641 24640 + 24643 24602 24641 + 24607 24641 24602 + 24643 24642 24586 + 24591 24643 24586 + 24643 24591 24602 + 24644 24645 24646 + 24647 24645 24644 + 24648 24645 24647 + 24645 24648 24649 + 24649 24650 24645 + 24651 24644 24646 + 24652 24644 24651 + 24644 24652 24653 + 24644 24653 24647 + 24654 24647 24653 + 24655 24647 24654 + 24647 24655 24648 + 24646 24656 24651 + 24656 24657 24651 + 24657 24658 24651 + 24658 24659 24651 + 24660 24651 24659 + 24660 24661 24651 + 24651 24661 24652 + 24662 24656 24646 + 24656 24662 24663 + 24657 24656 24663 + 24664 24657 24663 + 24665 24657 24664 + 24657 24665 24666 + 24666 24658 24657 + 24646 24667 24662 + 24668 24662 24667 + 24663 24662 24668 + 24668 24669 24663 + 24663 24669 24664 + 24669 24670 24664 + 24665 24664 24670 + 24670 24671 24665 + 24666 24665 24671 + 24646 24672 24667 + 24667 24672 24673 + 24673 24674 24667 + 24667 24674 24668 + 24675 24672 24646 + 24672 24675 24676 + 24672 24676 24673 + 24676 24677 24673 + 24678 24673 24677 + 24673 24678 24679 + 24679 24674 24673 + 24668 24674 24679 + 24650 24675 24646 + 24675 24650 24649 + 24675 24649 24680 + 24680 24676 24675 + 24676 24680 24681 + 24682 24676 24681 + 24676 24682 24677 + 24682 24683 24677 + 24684 24677 24683 + 24677 24684 24678 + 24648 24680 24649 + 24680 24648 24655 + 24681 24680 24655 + 24685 24681 24655 + 24682 24681 24685 + 24685 24686 24682 + 24683 24682 24686 + 24686 24687 24683 + 24688 24683 24687 + 24688 24684 24683 + 24689 24685 24655 + 24690 24685 24689 + 24686 24685 24690 + 24690 24691 24686 + 24686 24691 24687 + 24691 24692 24687 + 24693 24687 24692 + 24687 24693 24688 + 24654 24689 24655 + 24654 24694 24689 + 24689 24694 24690 + 24695 24690 24694 + 24691 24690 24695 + 24695 24696 24691 + 24691 24696 24697 + 24697 24692 24691 + 24698 24692 24697 + 24692 24698 24693 + 24694 24654 24699 + 24699 24700 24694 + 24694 24700 24695 + 24701 24695 24700 + 24695 24701 24702 + 24702 24696 24695 + 24696 24702 24703 + 24703 24697 24696 + 24699 24654 24653 + 24653 24704 24699 + 24705 24699 24704 + 24699 24705 24706 + 24706 24700 24699 + 24700 24706 24701 + 24707 24701 24706 + 24702 24701 24707 + 24708 24704 24653 + 24709 24704 24708 + 24704 24709 24705 + 24710 24705 24709 + 24706 24705 24710 + 24653 24652 24708 + 24708 24652 24711 + 24711 24712 24708 + 24713 24708 24712 + 24708 24713 24709 + 24652 24661 24711 + 24714 24711 24661 + 24711 24714 24715 + 24715 24716 24711 + 24711 24716 24717 + 24717 24712 24711 + 24718 24712 24717 + 24712 24718 24713 + 24661 24660 24714 + 24719 24714 24660 + 24715 24714 24719 + 24719 24720 24715 + 24715 24720 24721 + 24721 24722 24715 + 24716 24715 24722 + 24660 24723 24719 + 24723 24724 24719 + 24725 24719 24724 + 24719 24725 24726 + 24726 24720 24719 + 24720 24726 24727 + 24727 24721 24720 + 24659 24723 24660 + 24723 24659 24728 + 24723 24728 24729 + 24729 24724 24723 + 24724 24729 24730 + 24730 24731 24724 + 24724 24731 24725 + 24728 24659 24658 + 24658 24732 24728 + 24728 24732 24733 + 24733 24729 24728 + 24730 24729 24733 + 24733 24734 24730 + 24730 24734 24735 + 24735 24736 24730 + 24731 24730 24736 + 24666 24732 24658 + 24732 24666 24737 + 24737 24738 24732 + 24732 24738 24733 + 24739 24733 24738 + 24739 24734 24733 + 24734 24739 24740 + 24740 24741 24734 + 24734 24741 24735 + 24666 24671 24737 + 24671 24742 24737 + 24743 24737 24742 + 24743 24738 24737 + 24738 24743 24739 + 24739 24743 24744 + 24740 24739 24744 + 24744 24745 24740 + 24746 24740 24745 + 24741 24740 24746 + 24742 24671 24747 + 24748 24742 24747 + 24744 24742 24748 + 24742 24744 24743 + 24747 24671 24670 + 24747 24670 24669 + 24669 24749 24747 + 24747 24749 24750 + 24750 24748 24747 + 24748 24750 24751 + 24752 24748 24751 + 24748 24752 24744 + 24744 24752 24753 + 24753 24745 24744 + 24669 24668 24749 + 24668 24754 24749 + 24749 24754 24755 + 24755 24750 24749 + 24750 24755 24751 + 24754 24668 24679 + 24679 24755 24754 + 24755 24679 24678 + 24756 24755 24678 + 24755 24756 24751 + 24751 24756 24757 + 24757 24758 24751 + 24751 24758 24753 + 24753 24752 24751 + 24756 24678 24684 + 24684 24757 24756 + 24759 24757 24684 + 24757 24759 24760 + 24760 24758 24757 + 24758 24760 24761 + 24761 24753 24758 + 24753 24761 24745 + 24761 24762 24745 + 24745 24762 24746 + 24684 24688 24759 + 24763 24759 24688 + 24760 24759 24763 + 24763 24764 24760 + 24760 24764 24765 + 24765 24761 24760 + 24762 24761 24765 + 24765 24766 24762 + 24746 24762 24766 + 24688 24693 24763 + 24767 24763 24693 + 24764 24763 24767 + 24767 24768 24764 + 24764 24768 24765 + 24768 24769 24765 + 24766 24765 24769 + 24770 24766 24769 + 24766 24770 24771 + 24771 24746 24766 + 24741 24746 24771 + 24693 24698 24767 + 24767 24698 24772 + 24772 24773 24767 + 24768 24767 24773 + 24773 24774 24768 + 24769 24768 24774 + 24774 24775 24769 + 24775 24770 24769 + 24697 24772 24698 + 24776 24772 24697 + 24772 24776 24777 + 24777 24773 24772 + 24773 24777 24778 + 24778 24774 24773 + 24774 24778 24779 + 24779 24775 24774 + 24770 24775 24779 + 24776 24697 24703 + 24776 24703 24780 + 24780 24781 24776 + 24781 24777 24776 + 24778 24777 24781 + 24781 24782 24778 + 24778 24782 24783 + 24779 24778 24783 + 24703 24784 24780 + 24780 24784 24785 + 24786 24780 24785 + 24781 24780 24786 + 24787 24781 24786 + 24781 24787 24782 + 24782 24787 24788 + 24788 24783 24782 + 24784 24703 24702 + 24702 24789 24784 + 24789 24790 24784 + 24790 24785 24784 + 24785 24790 24791 + 24791 24792 24785 + 24786 24785 24792 + 24792 24793 24786 + 24787 24786 24793 + 24788 24787 24793 + 24707 24789 24702 + 24790 24789 24707 + 24790 24707 24794 + 24794 24791 24790 + 24794 24795 24791 + 24792 24791 24795 + 24796 24792 24795 + 24793 24792 24796 + 24796 24797 24793 + 24793 24797 24788 + 24797 24798 24788 + 24783 24788 24798 + 24794 24707 24706 + 24799 24794 24706 + 24799 24800 24794 + 24800 24795 24794 + 24795 24800 24801 + 24801 24796 24795 + 24801 24802 24796 + 24802 24797 24796 + 24798 24797 24802 + 24802 24803 24798 + 24783 24798 24803 + 24706 24804 24799 + 24799 24804 24805 + 24806 24799 24805 + 24799 24806 24807 + 24807 24800 24799 + 24800 24807 24808 + 24808 24801 24800 + 24710 24804 24706 + 24710 24805 24804 + 24805 24710 24809 + 24809 24810 24805 + 24805 24810 24811 + 24811 24806 24805 + 24807 24806 24811 + 24811 24812 24807 + 24808 24807 24812 + 24809 24710 24709 + 24709 24813 24809 + 24814 24809 24813 + 24809 24814 24815 + 24815 24810 24809 + 24811 24810 24815 + 24816 24811 24815 + 24812 24811 24816 + 24817 24813 24709 + 24813 24817 24818 + 24818 24819 24813 + 24813 24819 24814 + 24820 24814 24819 + 24815 24814 24820 + 24820 24821 24815 + 24815 24821 24816 + 24709 24713 24817 + 24817 24713 24718 + 24718 24822 24817 + 24818 24817 24822 + 24822 24823 24818 + 24824 24818 24823 + 24819 24818 24824 + 24824 24825 24819 + 24819 24825 24820 + 24826 24820 24825 + 24820 24826 24821 + 24827 24822 24718 + 24823 24822 24827 + 24827 24828 24823 + 24823 24828 24829 + 24829 24830 24823 + 24823 24830 24824 + 24718 24831 24827 + 24832 24827 24831 + 24828 24827 24832 + 24832 24833 24828 + 24829 24828 24833 + 24717 24831 24718 + 24831 24717 24834 + 24834 24835 24831 + 24831 24835 24832 + 24836 24832 24835 + 24833 24832 24836 + 24837 24834 24717 + 24838 24834 24837 + 24835 24834 24838 + 24838 24839 24835 + 24835 24839 24836 + 24717 24716 24837 + 24716 24840 24837 + 24840 24841 24837 + 24842 24837 24841 + 24837 24842 24843 + 24843 24844 24837 + 24837 24844 24838 + 24722 24840 24716 + 24840 24722 24845 + 24845 24846 24840 + 24840 24846 24847 + 24847 24841 24840 + 24848 24841 24847 + 24841 24848 24842 + 24849 24842 24848 + 24843 24842 24849 + 24845 24722 24721 + 24721 24850 24845 + 24845 24850 24851 + 24851 24852 24845 + 24846 24845 24852 + 24852 24853 24846 + 24847 24846 24853 + 24854 24850 24721 + 24850 24854 24855 + 24855 24851 24850 + 24851 24855 24856 + 24856 24857 24851 + 24851 24857 24858 + 24858 24852 24851 + 24853 24852 24858 + 24721 24727 24854 + 24854 24727 24859 + 24859 24860 24854 + 24855 24854 24860 + 24860 24861 24855 + 24856 24855 24861 + 24859 24727 24726 + 24726 24862 24859 + 24863 24859 24862 + 24859 24863 24864 + 24864 24860 24859 + 24860 24864 24865 + 24865 24861 24860 + 24866 24862 24726 + 24867 24862 24866 + 24862 24867 24863 + 24868 24863 24867 + 24864 24863 24868 + 24868 24869 24864 + 24864 24869 24870 + 24870 24865 24864 + 24726 24725 24866 + 24871 24866 24725 + 24872 24866 24871 + 24866 24872 24867 + 24725 24731 24871 + 24736 24871 24731 + 24873 24871 24736 + 24871 24873 24872 + 24874 24872 24873 + 24867 24872 24874 + 24874 24875 24867 + 24867 24875 24876 + 24876 24877 24867 + 24877 24868 24867 + 24736 24878 24873 + 24873 24878 24879 + 24879 24880 24873 + 24873 24880 24874 + 24878 24736 24735 + 24735 24881 24878 + 24879 24878 24881 + 24882 24879 24881 + 24883 24879 24882 + 24880 24879 24883 + 24880 24883 24884 + 24884 24885 24880 + 24880 24885 24874 + 24771 24881 24735 + 24881 24771 24886 + 24886 24887 24881 + 24881 24887 24882 + 24771 24735 24741 + 24770 24886 24771 + 24888 24886 24770 + 24888 24887 24886 + 24887 24888 24889 + 24889 24882 24887 + 24882 24889 24890 + 24890 24891 24882 + 24882 24891 24883 + 24883 24891 24892 + 24892 24884 24883 + 24770 24893 24888 + 24888 24893 24894 + 24894 24889 24888 + 24890 24889 24894 + 24894 24895 24890 + 24890 24895 24896 + 24896 24897 24890 + 24891 24890 24897 + 24779 24893 24770 + 24893 24779 24898 + 24898 24894 24893 + 24895 24894 24898 + 24898 24899 24895 + 24895 24899 24900 + 24900 24896 24895 + 24901 24896 24900 + 24896 24901 24902 + 24902 24897 24896 + 24903 24898 24779 + 24899 24898 24903 + 24903 24904 24899 + 24900 24899 24904 + 24904 24905 24900 + 24905 24906 24900 + 24907 24900 24906 + 24900 24907 24901 + 24783 24903 24779 + 24803 24903 24783 + 24904 24903 24803 + 24803 24908 24904 + 24904 24908 24909 + 24909 24905 24904 + 24909 24910 24905 + 24905 24910 24911 + 24911 24906 24905 + 24912 24906 24911 + 24906 24912 24907 + 24908 24803 24802 + 24802 24913 24908 + 24914 24908 24913 + 24914 24909 24908 + 24909 24914 24915 + 24910 24909 24915 + 24910 24915 24916 + 24916 24911 24910 + 24917 24911 24916 + 24911 24917 24912 + 24913 24802 24801 + 24801 24808 24913 + 24913 24808 24918 + 24918 24914 24913 + 24914 24918 24919 + 24915 24914 24919 + 24915 24919 24916 + 24919 24920 24916 + 24921 24916 24920 + 24916 24921 24917 + 24922 24917 24921 + 24912 24917 24922 + 24918 24808 24812 + 24812 24923 24918 + 24923 24919 24918 + 24919 24923 24924 + 24920 24919 24924 + 24921 24920 24924 + 24924 24925 24921 + 24921 24925 24926 + 24926 24922 24921 + 24923 24812 24816 + 24923 24816 24927 + 24927 24924 24923 + 24925 24924 24927 + 24927 24928 24925 + 24925 24928 24929 + 24929 24926 24925 + 24926 24929 24930 + 24931 24926 24930 + 24922 24926 24931 + 24821 24927 24816 + 24928 24927 24821 + 24821 24932 24928 + 24929 24928 24932 + 24930 24929 24932 + 24932 24826 24930 + 24930 24826 24933 + 24934 24930 24933 + 24931 24930 24934 + 24826 24932 24821 + 24825 24933 24826 + 24933 24825 24824 + 24824 24935 24933 + 24933 24935 24936 + 24936 24937 24933 + 24933 24937 24938 + 24938 24934 24933 + 24935 24824 24830 + 24830 24939 24935 + 24936 24935 24939 + 24939 24940 24936 + 24941 24936 24940 + 24936 24941 24942 + 24942 24937 24936 + 24937 24942 24943 + 24943 24938 24937 + 24939 24830 24829 + 24829 24944 24939 + 24939 24944 24945 + 24945 24940 24939 + 24946 24940 24945 + 24940 24946 24941 + 24947 24941 24946 + 24942 24941 24947 + 24947 24948 24942 + 24943 24942 24948 + 24944 24829 24949 + 24949 24950 24944 + 24944 24950 24951 + 24945 24944 24951 + 24833 24949 24829 + 24952 24949 24833 + 24950 24949 24952 + 24950 24952 24953 + 24953 24951 24950 + 24951 24953 24954 + 24951 24954 24955 + 24955 24956 24951 + 24951 24956 24945 + 24833 24957 24952 + 24952 24957 24958 + 24953 24952 24958 + 24958 24959 24953 + 24954 24953 24959 + 24959 24960 24954 + 24955 24954 24960 + 24836 24957 24833 + 24957 24836 24961 + 24961 24958 24957 + 24958 24961 24962 + 24962 24963 24958 + 24958 24963 24964 + 24964 24959 24958 + 24960 24959 24964 + 24965 24961 24836 + 24962 24961 24965 + 24965 24966 24962 + 24962 24966 24967 + 24967 24968 24962 + 24963 24962 24968 + 24968 24969 24963 + 24964 24963 24969 + 24836 24839 24965 + 24970 24965 24839 + 24965 24970 24971 + 24971 24966 24965 + 24966 24971 24972 + 24972 24967 24966 + 24839 24838 24970 + 24973 24970 24838 + 24971 24970 24973 + 24973 24974 24971 + 24972 24971 24974 + 24974 24975 24972 + 24975 24976 24972 + 24976 24977 24972 + 24967 24972 24977 + 24838 24844 24973 + 24978 24973 24844 + 24973 24978 24979 + 24979 24974 24973 + 24974 24979 24980 + 24980 24975 24974 + 24975 24980 24981 + 24981 24976 24975 + 24976 24981 24982 + 24982 24977 24976 + 24844 24843 24978 + 24983 24978 24843 + 24979 24978 24983 + 24983 24984 24979 + 24985 24979 24984 + 24985 24980 24979 + 24980 24985 24986 + 24981 24980 24986 + 24843 24987 24983 + 24988 24983 24987 + 24983 24988 24989 + 24989 24984 24983 + 24984 24989 24990 + 24990 24985 24984 + 24985 24990 24991 + 24991 24986 24985 + 24849 24987 24843 + 24992 24987 24849 + 24987 24992 24988 + 24993 24988 24992 + 24989 24988 24993 + 24993 24994 24989 + 24989 24994 24995 + 24995 24990 24989 + 24990 24995 24996 + 24991 24990 24996 + 24849 24997 24992 + 24992 24997 24998 + 24998 24999 24992 + 24992 24999 24993 + 25000 24993 24999 + 24993 25000 25001 + 25001 24994 24993 + 24997 24849 25002 + 25002 25003 24997 + 24997 25003 25004 + 24998 24997 25004 + 24848 25002 24849 + 25005 25002 24848 + 25003 25002 25005 + 25005 25006 25003 + 25003 25006 25007 + 25007 25004 25003 + 24848 25008 25005 + 25005 25008 25009 + 25009 25010 25005 + 25006 25005 25010 + 25010 25011 25006 + 25007 25006 25011 + 24847 25008 24848 + 25008 24847 25009 + 24847 25012 25009 + 25009 25012 25013 + 25009 25013 25014 + 25014 25010 25009 + 25011 25010 25014 + 24853 25012 24847 + 25015 25012 24853 + 25012 25015 25013 + 25013 25015 25016 + 25013 25016 25017 + 25017 25014 25013 + 25018 25014 25017 + 25014 25018 25011 + 24853 25019 25015 + 25020 25015 25019 + 25015 25020 25016 + 25016 25020 25021 + 25016 25021 25022 + 25022 25017 25016 + 25023 25017 25022 + 25017 25023 25018 + 24858 25019 24853 + 25019 24858 25024 + 25024 25025 25019 + 25025 25020 25019 + 25026 25020 25025 + 25020 25026 25021 + 25021 25026 25027 + 25027 25028 25021 + 25028 25022 25021 + 25029 25024 24858 + 25030 25024 25029 + 25025 25024 25030 + 25030 25031 25025 + 25025 25031 25026 + 25032 25026 25031 + 25026 25032 25027 + 24858 24857 25029 + 25033 25029 24857 + 25029 25033 25034 + 25034 25035 25029 + 25029 25035 25030 + 24857 24856 25033 + 25036 25033 24856 + 25033 25036 25037 + 25034 25033 25037 + 25038 25034 25037 + 25038 25039 25034 + 25035 25034 25039 + 25039 25040 25035 + 25040 25030 25035 + 24856 25041 25036 + 25042 25036 25041 + 25036 25042 25043 + 25043 25037 25036 + 25037 25043 25044 + 25044 25038 25037 + 24861 25041 24856 + 25045 25041 24861 + 25041 25045 25042 + 25046 25042 25045 + 25042 25046 25047 + 25043 25042 25047 + 25043 25047 25048 + 25044 25043 25048 + 24861 24865 25045 + 25045 24865 24870 + 24870 25049 25045 + 25045 25049 25046 + 25050 25046 25049 + 25046 25050 25051 + 25051 25047 25046 + 25047 25051 25052 + 25052 25048 25047 + 25053 25049 24870 + 25049 25053 25050 + 25054 25050 25053 + 25050 25054 25055 + 25051 25050 25055 + 25056 25051 25055 + 25056 25052 25051 + 25057 25052 25056 + 25048 25052 25057 + 24870 25058 25053 + 25053 25058 25059 + 25059 25060 25053 + 25053 25060 25054 + 25061 25054 25060 + 25054 25061 25062 + 25062 25055 25054 + 25058 24870 24869 + 24869 25063 25058 + 25059 25058 25063 + 25063 25064 25059 + 25065 25059 25064 + 25059 25065 25066 + 25066 25060 25059 + 25060 25066 25061 + 25023 25061 25066 + 25062 25061 25023 + 25063 24869 24868 + 24868 25067 25063 + 25063 25067 25068 + 25068 25064 25063 + 25007 25064 25068 + 25064 25007 25065 + 25011 25065 25007 + 25066 25065 25011 + 25011 25018 25066 + 25066 25018 25023 + 25067 24868 25069 + 25069 25070 25067 + 25070 25068 25067 + 25004 25068 25070 + 25068 25004 25007 + 24868 24877 25069 + 25069 24877 25071 + 25071 25072 25069 + 25069 25072 25073 + 25073 25070 25069 + 25074 25070 25073 + 25070 25074 25004 + 25004 25074 24998 + 25071 24877 24876 + 24876 25075 25071 + 25076 25071 25075 + 25072 25071 25076 + 25076 25077 25072 + 25073 25072 25077 + 25077 25078 25073 + 25079 25073 25078 + 25073 25079 25074 + 25080 25075 24876 + 25075 25080 25081 + 25081 25082 25075 + 25075 25082 25076 + 25083 25076 25082 + 25077 25076 25083 + 24876 25084 25080 + 25080 25084 25085 + 25085 25086 25080 + 25080 25086 25087 + 25087 25081 25080 + 25088 25081 25087 + 25082 25081 25088 + 25084 24876 24875 + 24875 25089 25084 + 25085 25084 25089 + 25089 25090 25085 + 25091 25085 25090 + 25085 25091 25092 + 25092 25086 25085 + 25086 25092 25093 + 25093 25087 25086 + 25089 24875 24874 + 24874 25094 25089 + 25089 25094 25095 + 25095 25090 25089 + 25096 25090 25095 + 25090 25096 25091 + 25097 25091 25096 + 25092 25091 25097 + 25094 24874 24885 + 24885 25098 25094 + 25094 25098 25099 + 25095 25094 25099 + 25099 25100 25095 + 25101 25095 25100 + 25095 25101 25096 + 24884 25098 24885 + 25098 24884 24892 + 24892 25099 25098 + 25099 24892 25102 + 25099 25102 25103 + 25103 25100 25099 + 25100 25103 25104 + 25104 25105 25100 + 25100 25105 25101 + 25106 25101 25105 + 25096 25101 25106 + 25102 24892 25107 + 25107 25108 25102 + 25102 25108 25109 + 25109 25103 25102 + 25104 25103 25109 + 24891 25107 24892 + 24897 25107 24891 + 25107 24897 24902 + 24902 25108 25107 + 25108 24902 25110 + 25110 25109 25108 + 25111 25109 25110 + 25109 25111 25104 + 25104 25111 25112 + 25112 25113 25104 + 25105 25104 25113 + 25113 25114 25105 + 25105 25114 25106 + 25110 24902 24901 + 24901 25115 25110 + 25116 25110 25115 + 25116 25111 25110 + 25111 25116 25112 + 25116 25117 25112 + 25112 25117 25118 + 25112 25118 24948 + 24948 25113 25112 + 25114 25113 24948 + 25119 25115 24901 + 25119 25120 25115 + 25115 25120 25116 + 25117 25116 25120 + 25121 25117 25120 + 25117 25121 24943 + 25118 25117 24943 + 24948 25118 24943 + 24901 24907 25119 + 25119 24907 24912 + 25122 25119 24912 + 25123 25119 25122 + 25119 25123 25120 + 25120 25123 25124 + 25124 25125 25120 + 25120 25125 25121 + 24938 25121 25125 + 24938 24943 25121 + 24922 25122 24912 + 25122 24922 25126 + 25122 25126 25123 + 25124 25123 25126 + 25126 24931 25124 + 24934 25124 24931 + 24934 25125 25124 + 25125 24934 24938 + 25126 24922 24931 + 24948 24947 25114 + 25114 24947 25127 + 25127 25106 25114 + 25106 25127 25128 + 25128 25129 25106 + 25106 25129 25096 + 24946 25127 24947 + 25128 25127 24946 + 24946 25130 25128 + 25128 25130 25131 + 25131 25132 25128 + 25129 25128 25132 + 25132 25097 25129 + 25096 25129 25097 + 24945 25130 24946 + 25130 24945 25133 + 25133 25131 25130 + 25133 25134 25131 + 25131 25134 25135 + 25135 25132 25131 + 25097 25132 25135 + 25135 25136 25097 + 25097 25136 25092 + 25137 25133 24945 + 25134 25133 25137 + 25137 25138 25134 + 25134 25138 25139 + 25135 25134 25139 + 25139 25140 25135 + 25136 25135 25140 + 25140 25141 25136 + 25092 25136 25141 + 25141 25093 25092 + 25142 25137 24945 + 25143 25137 25142 + 25138 25137 25143 + 25138 25143 25144 + 25144 25139 25138 + 24956 25142 24945 + 25142 24956 25145 + 25146 25142 25145 + 25142 25146 25147 + 25147 25148 25142 + 25142 25148 25143 + 25143 25148 25149 + 25149 25144 25143 + 25145 24956 24955 + 24955 25150 25145 + 25145 25150 25151 + 25151 25152 25145 + 25145 25152 25146 + 25152 25153 25146 + 25147 25146 25153 + 25150 24955 25154 + 25154 25155 25150 + 25150 25155 25000 + 25000 25151 25150 + 24999 25151 25000 + 25151 24999 24998 + 24998 25152 25151 + 25153 25152 24998 + 24960 25154 24955 + 25156 25154 24960 + 25155 25154 25156 + 25156 25157 25155 + 25155 25157 25001 + 25001 25000 25155 + 24960 25158 25156 + 25156 25158 25159 + 25159 25160 25156 + 25157 25156 25160 + 25160 25161 25157 + 25001 25157 25161 + 25161 25162 25001 + 24994 25001 25162 + 24964 25158 24960 + 25158 24964 25163 + 25163 25159 25158 + 25159 25163 25164 + 25164 25165 25159 + 25159 25165 25166 + 25166 25160 25159 + 25161 25160 25166 + 25166 25167 25161 + 25162 25161 25167 + 24969 25163 24964 + 25164 25163 24969 + 24969 25168 25164 + 25169 25164 25168 + 25164 25169 25170 + 25165 25164 25170 + 25165 25170 25171 + 25171 25166 25165 + 25167 25166 25171 + 25172 25168 24969 + 25168 25172 25173 + 25173 25169 25168 + 25174 25169 25173 + 25170 25169 25174 + 25174 25175 25170 + 25170 25175 25176 + 25176 25171 25170 + 24969 24968 25172 + 25172 24968 24967 + 24967 25177 25172 + 25178 25172 25177 + 25172 25178 25173 + 25173 25178 25179 + 25179 25180 25173 + 25173 25180 25174 + 24977 25177 24967 + 25177 24977 25181 + 25181 25182 25177 + 25182 25178 25177 + 25178 25182 25183 + 25179 25178 25183 + 25184 25179 25183 + 25180 25179 25184 + 25184 25185 25180 + 25185 25174 25180 + 24982 25181 24977 + 25181 24982 25186 + 25187 25181 25186 + 25182 25181 25187 + 25187 25183 25182 + 25183 25187 25188 + 25183 25188 25184 + 25188 25189 25184 + 25190 25184 25189 + 25185 25184 25190 + 25191 25186 24982 + 25186 25191 25192 + 25192 25187 25186 + 25187 25192 25188 + 25188 25192 25193 + 25193 25194 25188 + 25189 25188 25194 + 24982 25195 25191 + 25191 25195 25196 + 25196 25197 25191 + 25193 25191 25197 + 25191 25193 25192 + 24981 25195 24982 + 25196 25195 24981 + 25196 24981 24986 + 25198 25196 24986 + 25196 25198 25199 + 25199 25197 25196 + 25197 25199 25194 + 25194 25193 25197 + 24986 24991 25198 + 25200 25198 24991 + 25199 25198 25200 + 25200 25201 25199 + 25194 25199 25201 + 25201 25202 25194 + 25202 25189 25194 + 25202 25203 25189 + 25189 25203 25190 + 24991 24996 25200 + 25204 25200 24996 + 25200 25204 25205 + 25205 25201 25200 + 25201 25205 25203 + 25203 25202 25201 + 24996 25206 25204 + 25207 25204 25206 + 25204 25207 25208 + 25205 25204 25208 + 25203 25205 25208 + 25190 25203 25208 + 25208 25176 25190 + 25176 25209 25190 + 25190 25209 25185 + 25206 24996 24995 + 24995 25162 25206 + 25206 25162 25167 + 25206 25167 25207 + 25171 25207 25167 + 25207 25171 25176 + 25176 25208 25207 + 25162 24995 24994 + 25174 25185 25209 + 25175 25174 25209 + 25209 25176 25175 + 25210 25153 24998 + 25153 25210 25211 + 25211 25212 25153 + 25153 25212 25147 + 25074 25210 24998 + 25211 25210 25074 + 25074 25079 25211 + 25211 25079 25213 + 25213 25214 25211 + 25212 25211 25214 + 25214 25215 25212 + 25147 25212 25215 + 25215 25216 25147 + 25148 25147 25216 + 25216 25149 25148 + 25078 25213 25079 + 25213 25078 25217 + 25217 25218 25213 + 25213 25218 25219 + 25219 25214 25213 + 25215 25214 25219 + 25219 25220 25215 + 25215 25220 25221 + 25221 25216 25215 + 25149 25216 25221 + 25217 25078 25077 + 25077 25222 25217 + 25223 25217 25222 + 25223 25224 25217 + 25218 25217 25224 + 25224 25225 25218 + 25219 25218 25225 + 25225 25226 25219 + 25220 25219 25226 + 25083 25222 25077 + 25222 25083 25227 + 25227 25223 25222 + 25223 25227 25228 + 25228 25229 25223 + 25224 25223 25229 + 25230 25224 25229 + 25225 25224 25230 + 25231 25227 25083 + 25227 25231 25232 + 25228 25227 25232 + 25228 25232 25233 + 25233 25234 25228 + 25229 25228 25234 + 25234 25235 25229 + 25235 25230 25229 + 25083 25236 25231 + 25237 25231 25236 + 25231 25237 25238 + 25238 25232 25231 + 25232 25238 25239 + 25239 25233 25232 + 25082 25236 25083 + 25088 25236 25082 + 25236 25088 25237 + 25240 25237 25088 + 25237 25240 25241 + 25238 25237 25241 + 25238 25241 25242 + 25242 25239 25238 + 25239 25242 25243 + 25244 25239 25243 + 25233 25239 25244 + 25088 25245 25240 + 25246 25240 25245 + 25240 25246 25247 + 25247 25241 25240 + 25241 25247 25248 + 25248 25242 25241 + 25242 25248 25249 + 25249 25243 25242 + 25087 25245 25088 + 25250 25245 25087 + 25245 25250 25246 + 25251 25246 25250 + 25246 25251 25252 + 25247 25246 25252 + 25247 25252 25253 + 25248 25247 25253 + 25249 25248 25253 + 25087 25093 25250 + 25250 25093 25141 + 25141 25254 25250 + 25250 25254 25251 + 25255 25251 25254 + 25251 25255 25256 + 25256 25252 25251 + 25252 25256 25257 + 25257 25253 25252 + 25258 25254 25141 + 25254 25258 25255 + 25259 25255 25258 + 25256 25255 25259 + 25259 25260 25256 + 25261 25256 25260 + 25261 25257 25256 + 25262 25257 25261 + 25253 25257 25262 + 25141 25140 25258 + 25258 25140 25139 + 25139 25263 25258 + 25258 25263 25259 + 25264 25259 25263 + 25259 25264 25265 + 25265 25260 25259 + 25260 25265 25261 + 25266 25263 25139 + 25263 25266 25264 + 25267 25264 25266 + 25265 25264 25267 + 25267 25268 25265 + 25269 25265 25268 + 25269 25270 25265 + 25265 25270 25261 + 25139 25144 25266 + 25266 25144 25149 + 25149 25271 25266 + 25266 25271 25267 + 25271 25221 25267 + 25221 25272 25267 + 25267 25272 25268 + 25272 25273 25268 + 25268 25273 25269 + 25221 25271 25149 + 25272 25221 25220 + 25220 25274 25272 + 25273 25272 25274 + 25274 25275 25273 + 25276 25273 25275 + 25273 25276 25269 + 25269 25276 25277 + 25277 25278 25269 + 25270 25269 25278 + 25226 25274 25220 + 25274 25226 25279 + 25279 25275 25274 + 25275 25279 25280 + 25280 25276 25275 + 25277 25276 25280 + 25280 25281 25277 + 25282 25277 25281 + 25277 25282 25283 + 25278 25277 25283 + 25279 25226 25225 + 25225 25284 25279 + 25285 25279 25284 + 25279 25285 25280 + 25280 25285 25286 + 25286 25281 25280 + 25281 25286 25287 + 25281 25287 25282 + 25230 25284 25225 + 25284 25230 25288 + 25288 25285 25284 + 25286 25285 25288 + 25288 25289 25286 + 25290 25286 25289 + 25286 25290 25287 + 25287 25290 25291 + 25291 25292 25287 + 25287 25292 25282 + 25230 25293 25288 + 25288 25293 25294 + 25294 25289 25288 + 25289 25294 25291 + 25291 25290 25289 + 25235 25293 25230 + 25293 25235 25295 + 25294 25293 25295 + 25291 25294 25295 + 25292 25291 25295 + 25295 25296 25292 + 25297 25292 25296 + 25292 25297 25282 + 25282 25297 25298 + 25298 25283 25282 + 25299 25283 25298 + 25283 25299 25278 + 25296 25295 25235 + 25235 25234 25296 + 25296 25234 25233 + 25233 25300 25296 + 25297 25296 25300 + 25298 25297 25300 + 25300 25244 25298 + 25298 25244 25243 + 25243 25301 25298 + 25301 25299 25298 + 25244 25300 25233 + 25301 25243 25249 + 25302 25301 25249 + 25301 25302 25303 + 25303 25299 25301 + 25299 25303 25304 + 25304 25305 25299 + 25299 25305 25278 + 25305 25270 25278 + 25261 25270 25305 + 25249 25306 25302 + 25302 25306 25262 + 25303 25302 25262 + 25304 25303 25262 + 25261 25304 25262 + 25305 25304 25261 + 25253 25306 25249 + 25262 25306 25253 + 25023 25307 25062 + 25022 25307 25023 + 25307 25022 25308 + 25308 25062 25307 + 25308 25309 25062 + 25055 25062 25309 + 25309 25056 25055 + 25022 25028 25308 + 25308 25028 25310 + 25310 25311 25308 + 25308 25311 25312 + 25312 25309 25308 + 25056 25309 25312 + 25312 25313 25056 + 25056 25313 25057 + 25310 25028 25314 + 25315 25310 25314 + 25310 25315 25316 + 25311 25310 25316 + 25311 25316 25317 + 25317 25312 25311 + 25313 25312 25317 + 25317 25318 25313 + 25318 25057 25313 + 25028 25027 25314 + 25319 25314 25027 + 25314 25319 25315 + 25319 25320 25315 + 25316 25315 25320 + 25320 25321 25316 + 25322 25316 25321 + 25316 25322 25317 + 25323 25317 25322 + 25318 25317 25323 + 25027 25032 25319 + 25319 25032 25324 + 25324 25325 25319 + 25320 25319 25325 + 25321 25320 25325 + 25325 25326 25321 + 25321 25326 25327 + 25327 25322 25321 + 25327 25328 25322 + 25322 25328 25323 + 25324 25032 25031 + 25031 25030 25324 + 25030 25329 25324 + 25324 25329 25326 + 25326 25325 25324 + 25040 25329 25030 + 25329 25040 25330 + 25326 25329 25330 + 25326 25330 25327 + 25327 25330 25331 + 25328 25327 25331 + 25328 25331 25332 + 25323 25328 25332 + 25332 25333 25323 + 25333 25334 25323 + 25323 25334 25318 + 25331 25330 25040 + 25040 25039 25331 + 25331 25039 25038 + 25038 25332 25331 + 25333 25332 25038 + 25038 25044 25333 + 25335 25333 25044 + 25334 25333 25335 + 25318 25334 25335 + 25335 25057 25318 + 25057 25335 25048 + 25048 25335 25044 + 25336 25337 25338 + 25339 25337 25336 + 25340 25337 25339 + 25337 25340 25341 + 25341 25342 25337 + 25343 25336 25338 + 25344 25336 25343 + 25345 25336 25344 + 25336 25345 25339 + 25338 25346 25343 + 25347 25343 25346 + 25343 25347 25348 + 25348 25349 25343 + 25343 25349 25344 + 25350 25346 25338 + 25350 25351 25346 + 25346 25351 25347 + 25352 25347 25351 + 25348 25347 25352 + 25352 25353 25348 + 25354 25348 25353 + 25349 25348 25354 + 25338 25355 25350 + 25350 25355 25356 + 25356 25357 25350 + 25351 25350 25357 + 25357 25358 25351 + 25351 25358 25352 + 25355 25338 25359 + 25355 25359 25360 + 25360 25361 25355 + 25355 25361 25356 + 25362 25359 25338 + 25360 25359 25362 + 25363 25360 25362 + 25364 25360 25363 + 25361 25360 25364 + 25361 25364 25365 + 25365 25366 25361 + 25361 25366 25356 + 25342 25362 25338 + 25341 25362 25342 + 25362 25341 25363 + 25341 25367 25363 + 25368 25363 25367 + 25363 25368 25364 + 25364 25368 25369 + 25369 25370 25364 + 25370 25365 25364 + 25367 25341 25340 + 25340 25371 25367 + 25372 25367 25371 + 25367 25372 25368 + 25368 25372 25369 + 25372 25373 25369 + 25374 25369 25373 + 25369 25374 25370 + 25340 25375 25371 + 25375 25376 25371 + 25377 25371 25376 + 25371 25377 25372 + 25373 25372 25377 + 25339 25375 25340 + 25375 25339 25378 + 25378 25379 25375 + 25376 25375 25379 + 25379 25380 25376 + 25380 25381 25376 + 25376 25381 25377 + 25382 25378 25339 + 25383 25378 25382 + 25379 25378 25383 + 25380 25379 25383 + 25380 25383 25384 + 25384 25385 25380 + 25381 25380 25385 + 25386 25381 25385 + 25377 25381 25386 + 25339 25345 25382 + 25387 25382 25345 + 25382 25387 25388 + 25382 25388 25383 + 25383 25388 25389 + 25384 25383 25389 + 25345 25390 25387 + 25391 25387 25390 + 25388 25387 25391 + 25391 25389 25388 + 25390 25345 25344 + 25390 25344 25392 + 25392 25393 25390 + 25390 25393 25391 + 25394 25391 25393 + 25389 25391 25394 + 25395 25392 25344 + 25396 25392 25395 + 25392 25396 25397 + 25397 25393 25392 + 25393 25397 25394 + 25344 25349 25395 + 25354 25395 25349 + 25398 25395 25354 + 25395 25398 25396 + 25396 25398 25399 + 25399 25400 25396 + 25397 25396 25400 + 25400 25401 25397 + 25394 25397 25401 + 25354 25402 25398 + 25398 25402 25403 + 25403 25399 25398 + 25399 25403 25404 + 25404 25405 25399 + 25399 25405 25406 + 25406 25400 25399 + 25401 25400 25406 + 25402 25354 25407 + 25407 25408 25402 + 25402 25408 25409 + 25409 25403 25402 + 25404 25403 25409 + 25409 25410 25404 + 25411 25404 25410 + 25405 25404 25411 + 25353 25407 25354 + 25412 25407 25353 + 25407 25412 25413 + 25413 25408 25407 + 25408 25413 25414 + 25414 25409 25408 + 25409 25414 25415 + 25415 25410 25409 + 25353 25416 25412 + 25412 25416 25417 + 25417 25418 25412 + 25413 25412 25418 + 25418 25419 25413 + 25413 25419 25420 + 25420 25414 25413 + 25415 25414 25420 + 25416 25353 25352 + 25416 25352 25421 + 25421 25422 25416 + 25416 25422 25417 + 25423 25417 25422 + 25424 25417 25423 + 25417 25424 25425 + 25425 25418 25417 + 25419 25418 25425 + 25358 25421 25352 + 25426 25421 25358 + 25426 25422 25421 + 25422 25426 25423 + 25423 25426 25427 + 25428 25423 25427 + 25424 25423 25428 + 25428 25429 25424 + 25425 25424 25429 + 25358 25427 25426 + 25427 25358 25357 + 25427 25357 25356 + 25356 25430 25427 + 25427 25430 25428 + 25431 25428 25430 + 25429 25428 25431 + 25431 25432 25429 + 25429 25432 25433 + 25433 25434 25429 + 25429 25434 25425 + 25435 25430 25356 + 25430 25435 25431 + 25431 25435 25436 + 25436 25437 25431 + 25432 25431 25437 + 25437 25438 25432 + 25433 25432 25438 + 25356 25439 25435 + 25440 25435 25439 + 25435 25440 25436 + 25441 25436 25440 + 25442 25436 25441 + 25436 25442 25443 + 25443 25437 25436 + 25438 25437 25443 + 25439 25356 25366 + 25366 25444 25439 + 25445 25439 25444 + 25445 25446 25439 + 25446 25440 25439 + 25446 25447 25440 + 25440 25447 25441 + 25444 25366 25365 + 25365 25448 25444 + 25444 25448 25449 + 25449 25445 25444 + 25445 25449 25450 + 25445 25450 25447 + 25447 25446 25445 + 25448 25365 25370 + 25370 25451 25448 + 25451 25452 25448 + 25452 25449 25448 + 25452 25453 25449 + 25453 25450 25449 + 25450 25453 25454 + 25454 25441 25450 + 25441 25447 25450 + 25451 25370 25455 + 25451 25455 25456 + 25456 25452 25451 + 25452 25456 25457 + 25457 25453 25452 + 25453 25457 25458 + 25458 25454 25453 + 25374 25455 25370 + 25455 25374 25459 + 25459 25456 25455 + 25456 25459 25460 + 25457 25456 25460 + 25458 25457 25460 + 25460 25461 25458 + 25462 25458 25461 + 25458 25462 25463 + 25463 25454 25458 + 25374 25464 25459 + 25464 25465 25459 + 25459 25465 25460 + 25460 25465 25466 + 25466 25461 25460 + 25466 25467 25461 + 25467 25468 25461 + 25461 25468 25462 + 25373 25464 25374 + 25464 25373 25469 + 25465 25464 25469 + 25466 25465 25469 + 25469 25470 25466 + 25467 25466 25470 + 25470 25471 25467 + 25472 25467 25471 + 25468 25467 25472 + 25472 25473 25468 + 25462 25468 25473 + 25373 25474 25469 + 25469 25474 25386 + 25386 25475 25469 + 25469 25475 25476 + 25476 25470 25469 + 25471 25470 25476 + 25377 25474 25373 + 25386 25474 25377 + 25475 25386 25385 + 25385 25477 25475 + 25476 25475 25477 + 25477 25478 25476 + 25479 25476 25478 + 25476 25479 25471 + 25471 25479 25480 + 25480 25481 25471 + 25471 25481 25472 + 25477 25385 25384 + 25384 25482 25477 + 25477 25482 25483 + 25483 25478 25477 + 25484 25478 25483 + 25478 25484 25479 + 25480 25479 25484 + 25482 25384 25485 + 25485 25486 25482 + 25483 25482 25486 + 25486 25487 25483 + 25488 25483 25487 + 25483 25488 25484 + 25389 25485 25384 + 25489 25485 25389 + 25486 25485 25489 + 25486 25489 25490 + 25490 25487 25486 + 25491 25487 25490 + 25487 25491 25488 + 25492 25488 25491 + 25484 25488 25492 + 25492 25493 25484 + 25484 25493 25480 + 25389 25494 25489 + 25489 25494 25495 + 25495 25490 25489 + 25496 25490 25495 + 25490 25496 25491 + 25491 25496 25497 + 25497 25498 25491 + 25491 25498 25492 + 25394 25494 25389 + 25494 25394 25499 + 25499 25500 25494 + 25494 25500 25495 + 25501 25495 25500 + 25502 25495 25501 + 25495 25502 25496 + 25497 25496 25502 + 25401 25499 25394 + 25503 25499 25401 + 25500 25499 25503 + 25503 25504 25500 + 25500 25504 25501 + 25501 25504 25505 + 25505 25506 25501 + 25507 25501 25506 + 25501 25507 25502 + 25401 25508 25503 + 25503 25508 25509 + 25509 25510 25503 + 25504 25503 25510 + 25510 25505 25504 + 25406 25508 25401 + 25508 25406 25511 + 25511 25509 25508 + 25509 25511 25512 + 25512 25513 25509 + 25509 25513 25514 + 25514 25510 25509 + 25505 25510 25514 + 25515 25511 25406 + 25512 25511 25515 + 25515 25516 25512 + 25512 25516 25517 + 25517 25518 25512 + 25513 25512 25518 + 25406 25405 25515 + 25411 25515 25405 + 25515 25411 25519 + 25519 25516 25515 + 25516 25519 25520 + 25520 25517 25516 + 25517 25520 25521 + 25521 25522 25517 + 25517 25522 25523 + 25523 25518 25517 + 25519 25411 25524 + 25524 25525 25519 + 25519 25525 25526 + 25526 25520 25519 + 25521 25520 25526 + 25410 25524 25411 + 25527 25524 25410 + 25524 25527 25528 + 25528 25525 25524 + 25525 25528 25529 + 25529 25526 25525 + 25526 25529 25530 + 25530 25531 25526 + 25526 25531 25521 + 25410 25415 25527 + 25532 25527 25415 + 25528 25527 25532 + 25532 25533 25528 + 25528 25533 25534 + 25534 25529 25528 + 25530 25529 25534 + 25415 25535 25532 + 25536 25532 25535 + 25532 25536 25537 + 25537 25533 25532 + 25533 25537 25538 + 25538 25534 25533 + 25420 25535 25415 + 25539 25535 25420 + 25535 25539 25536 + 25540 25536 25539 + 25537 25536 25540 + 25420 25541 25539 + 25539 25541 25542 + 25542 25543 25539 + 25539 25543 25540 + 25541 25420 25419 + 25419 25544 25541 + 25542 25541 25544 + 25545 25542 25544 + 25546 25542 25545 + 25542 25546 25547 + 25547 25543 25542 + 25543 25547 25548 + 25548 25540 25543 + 25425 25544 25419 + 25544 25425 25434 + 25434 25549 25544 + 25544 25549 25545 + 25550 25545 25549 + 25551 25545 25550 + 25545 25551 25546 + 25552 25546 25551 + 25547 25546 25552 + 25552 25553 25547 + 25548 25547 25553 + 25434 25433 25549 + 25549 25433 25550 + 25554 25550 25433 + 25551 25550 25554 + 25554 25555 25551 + 25551 25555 25552 + 25556 25552 25555 + 25552 25556 25557 + 25557 25553 25552 + 25438 25554 25433 + 25558 25554 25438 + 25555 25554 25558 + 25558 25559 25555 + 25555 25559 25556 + 25560 25556 25559 + 25557 25556 25560 + 25438 25561 25558 + 25558 25561 25562 + 25562 25563 25558 + 25559 25558 25563 + 25563 25564 25559 + 25559 25564 25560 + 25443 25561 25438 + 25561 25443 25565 + 25565 25562 25561 + 25566 25562 25565 + 25562 25566 25567 + 25567 25563 25562 + 25564 25563 25567 + 25567 25568 25564 + 25564 25568 25569 + 25569 25560 25564 + 25565 25443 25442 + 25442 25570 25565 + 25570 25571 25565 + 25566 25565 25571 + 25571 25572 25566 + 25567 25566 25572 + 25572 25573 25567 + 25568 25567 25573 + 25574 25570 25442 + 25570 25574 25575 + 25575 25576 25570 + 25570 25576 25577 + 25577 25571 25570 + 25577 25572 25571 + 25572 25577 25578 + 25578 25573 25572 + 25442 25579 25574 + 25574 25579 25463 + 25463 25580 25574 + 25575 25574 25580 + 25580 25581 25575 + 25582 25575 25581 + 25576 25575 25582 + 25441 25579 25442 + 25579 25441 25454 + 25454 25463 25579 + 25582 25583 25576 + 25583 25582 25584 + 25583 25584 25585 + 25585 25586 25583 + 25583 25586 25577 + 25577 25576 25583 + 25584 25582 25587 + 25587 25588 25584 + 25584 25588 25589 + 25589 25585 25584 + 25590 25585 25589 + 25586 25585 25590 + 25581 25587 25582 + 25587 25581 25591 + 25592 25587 25591 + 25587 25592 25588 + 25592 25593 25588 + 25588 25593 25594 + 25594 25595 25588 + 25588 25595 25589 + 25596 25591 25581 + 25591 25596 25473 + 25473 25597 25591 + 25592 25591 25597 + 25597 25598 25592 + 25598 25599 25592 + 25599 25593 25592 + 25581 25580 25596 + 25596 25580 25463 + 25463 25462 25596 + 25473 25596 25462 + 25597 25473 25472 + 25598 25597 25472 + 25600 25598 25472 + 25598 25600 25599 + 25599 25600 25481 + 25481 25601 25599 + 25593 25599 25601 + 25601 25594 25593 + 25602 25594 25601 + 25594 25602 25603 + 25603 25595 25594 + 25481 25600 25472 + 25601 25481 25480 + 25480 25604 25601 + 25601 25604 25602 + 25604 25605 25602 + 25603 25602 25605 + 25605 25606 25603 + 25607 25603 25606 + 25595 25603 25607 + 25607 25589 25595 + 25604 25480 25493 + 25493 25605 25604 + 25605 25493 25492 + 25492 25606 25605 + 25606 25492 25498 + 25498 25608 25606 + 25606 25608 25607 + 25609 25607 25608 + 25589 25607 25609 + 25609 25610 25589 + 25589 25610 25590 + 25608 25498 25497 + 25497 25611 25608 + 25608 25611 25609 + 25609 25611 25612 + 25612 25613 25609 + 25610 25609 25613 + 25613 25614 25610 + 25590 25610 25614 + 25611 25497 25615 + 25615 25612 25611 + 25612 25615 25616 + 25616 25617 25612 + 25612 25617 25618 + 25618 25613 25612 + 25614 25613 25618 + 25502 25615 25497 + 25616 25615 25502 + 25502 25507 25616 + 25616 25507 25619 + 25619 25620 25616 + 25617 25616 25620 + 25620 25621 25617 + 25618 25617 25621 + 25621 25622 25618 + 25623 25618 25622 + 25618 25623 25614 + 25506 25619 25507 + 25619 25506 25624 + 25624 25625 25619 + 25619 25625 25626 + 25626 25620 25619 + 25621 25620 25626 + 25626 25627 25621 + 25621 25627 25628 + 25628 25622 25621 + 25624 25506 25505 + 25505 25629 25624 + 25624 25629 25630 + 25630 25631 25624 + 25625 25624 25631 + 25631 25632 25625 + 25625 25632 25633 + 25633 25626 25625 + 25627 25626 25633 + 25514 25629 25505 + 25629 25514 25634 + 25634 25630 25629 + 25635 25630 25634 + 25630 25635 25636 + 25636 25631 25630 + 25632 25631 25636 + 25636 25637 25632 + 25632 25637 25638 + 25638 25633 25632 + 25639 25634 25514 + 25640 25634 25639 + 25640 25635 25634 + 25635 25640 25641 + 25641 25642 25635 + 25636 25635 25642 + 25642 25643 25636 + 25637 25636 25643 + 25644 25639 25514 + 25645 25639 25644 + 25639 25645 25646 + 25646 25647 25639 + 25639 25647 25640 + 25640 25647 25648 + 25648 25641 25640 + 25649 25644 25514 + 25650 25644 25649 + 25651 25644 25650 + 25644 25651 25645 + 25652 25645 25651 + 25646 25645 25652 + 25514 25513 25649 + 25513 25653 25649 + 25654 25649 25653 + 25655 25649 25654 + 25649 25655 25650 + 25518 25653 25513 + 25518 25523 25653 + 25653 25523 25654 + 25654 25523 25522 + 25522 25656 25654 + 25656 25657 25654 + 25655 25654 25657 + 25657 25658 25655 + 25650 25655 25658 + 25658 25659 25650 + 25660 25650 25659 + 25650 25660 25651 + 25661 25656 25522 + 25656 25661 25662 + 25662 25663 25656 + 25656 25663 25664 + 25664 25657 25656 + 25658 25657 25664 + 25522 25521 25661 + 25665 25661 25521 + 25662 25661 25665 + 25665 25666 25662 + 25662 25666 25667 + 25667 25668 25662 + 25663 25662 25668 + 25668 25669 25663 + 25664 25663 25669 + 25521 25531 25665 + 25670 25665 25531 + 25665 25670 25671 + 25671 25666 25665 + 25666 25671 25672 + 25672 25667 25666 + 25531 25530 25670 + 25673 25670 25530 + 25671 25670 25673 + 25673 25674 25671 + 25671 25674 25675 + 25675 25672 25671 + 25676 25672 25675 + 25676 25667 25672 + 25530 25677 25673 + 25678 25673 25677 + 25673 25678 25679 + 25679 25674 25673 + 25674 25679 25680 + 25680 25675 25674 + 25681 25675 25680 + 25675 25681 25676 + 25534 25677 25530 + 25682 25677 25534 + 25677 25682 25678 + 25678 25682 25683 + 25683 25684 25678 + 25679 25678 25684 + 25684 25685 25679 + 25679 25685 25686 + 25686 25680 25679 + 25534 25538 25682 + 25682 25538 25687 + 25687 25683 25682 + 25683 25687 25688 + 25688 25689 25683 + 25683 25689 25690 + 25690 25684 25683 + 25684 25690 25691 + 25691 25685 25684 + 25687 25538 25537 + 25692 25687 25537 + 25688 25687 25692 + 25692 25693 25688 + 25694 25688 25693 + 25689 25688 25694 + 25694 25695 25689 + 25689 25695 25696 + 25696 25690 25689 + 25691 25690 25696 + 25697 25692 25537 + 25698 25692 25697 + 25692 25698 25699 + 25699 25693 25692 + 25693 25699 25700 + 25700 25701 25693 + 25693 25701 25694 + 25537 25702 25697 + 25702 25703 25697 + 25704 25697 25703 + 25705 25697 25704 + 25697 25705 25698 + 25540 25702 25537 + 25706 25702 25540 + 25702 25706 25707 + 25707 25703 25702 + 25707 25708 25703 + 25703 25708 25704 + 25540 25548 25706 + 25706 25548 25709 + 25709 25710 25706 + 25706 25710 25711 + 25711 25707 25706 + 25708 25707 25711 + 25711 25712 25708 + 25704 25708 25712 + 25553 25709 25548 + 25713 25709 25553 + 25709 25713 25714 + 25714 25710 25709 + 25710 25714 25715 + 25715 25711 25710 + 25711 25715 25716 + 25716 25712 25711 + 25553 25557 25713 + 25717 25713 25557 + 25714 25713 25717 + 25717 25718 25714 + 25714 25718 25719 + 25719 25715 25714 + 25716 25715 25719 + 25720 25717 25557 + 25721 25717 25720 + 25717 25721 25722 + 25722 25718 25717 + 25718 25722 25723 + 25723 25719 25718 + 25557 25724 25720 + 25725 25720 25724 + 25726 25720 25725 + 25720 25726 25721 + 25727 25721 25726 + 25722 25721 25727 + 25560 25724 25557 + 25724 25560 25569 + 25724 25569 25725 + 25725 25569 25568 + 25568 25728 25725 + 25729 25725 25728 + 25725 25729 25726 + 25726 25729 25614 + 25614 25623 25726 + 25726 25623 25727 + 25573 25728 25568 + 25730 25728 25573 + 25728 25730 25729 + 25729 25730 25590 + 25614 25729 25590 + 25573 25578 25730 + 25730 25578 25586 + 25586 25590 25730 + 25586 25578 25577 + 25622 25727 25623 + 25731 25727 25622 + 25727 25731 25722 + 25722 25731 25732 + 25732 25723 25722 + 25733 25723 25732 + 25719 25723 25733 + 25733 25734 25719 + 25719 25734 25716 + 25628 25731 25622 + 25731 25628 25735 + 25735 25736 25731 + 25731 25736 25732 + 25736 25737 25732 + 25738 25732 25737 + 25739 25732 25738 + 25732 25739 25733 + 25740 25735 25628 + 25741 25735 25740 + 25736 25735 25741 + 25741 25742 25736 + 25736 25742 25743 + 25743 25737 25736 + 25628 25627 25740 + 25633 25740 25627 + 25740 25633 25638 + 25638 25744 25740 + 25740 25744 25741 + 25741 25744 25745 + 25745 25746 25741 + 25742 25741 25746 + 25746 25747 25742 + 25743 25742 25747 + 25744 25638 25748 + 25748 25745 25744 + 25745 25748 25749 + 25749 25750 25745 + 25745 25750 25751 + 25751 25746 25745 + 25751 25752 25746 + 25752 25747 25746 + 25753 25748 25638 + 25749 25748 25753 + 25753 25754 25749 + 25749 25754 25755 + 25755 25756 25749 + 25750 25749 25756 + 25756 25757 25750 + 25751 25750 25757 + 25638 25637 25753 + 25643 25753 25637 + 25753 25643 25758 + 25758 25754 25753 + 25754 25758 25759 + 25759 25755 25754 + 25760 25755 25759 + 25760 25761 25755 + 25755 25761 25762 + 25762 25756 25755 + 25757 25756 25762 + 25758 25643 25642 + 25642 25763 25758 + 25758 25763 25764 + 25764 25759 25758 + 25759 25764 25765 + 25760 25759 25765 + 25766 25760 25765 + 25766 25767 25760 + 25767 25761 25760 + 25762 25761 25767 + 25768 25763 25642 + 25763 25768 25769 + 25769 25764 25763 + 25770 25764 25769 + 25770 25765 25764 + 25771 25765 25770 + 25765 25771 25766 + 25642 25641 25768 + 25768 25641 25648 + 25648 25772 25768 + 25768 25772 25773 + 25773 25769 25768 + 25770 25769 25773 + 25773 25774 25770 + 25770 25774 25775 + 25775 25771 25770 + 25776 25772 25648 + 25772 25776 25777 + 25777 25773 25772 + 25778 25773 25777 + 25778 25774 25773 + 25779 25774 25778 + 25774 25779 25775 + 25780 25775 25779 + 25780 25771 25775 + 25648 25781 25776 + 25776 25781 25782 + 25782 25783 25776 + 25776 25783 25784 + 25784 25777 25776 + 25778 25777 25784 + 25781 25648 25647 + 25647 25646 25781 + 25781 25646 25785 + 25785 25782 25781 + 25786 25782 25785 + 25782 25786 25787 + 25787 25783 25782 + 25783 25787 25788 + 25788 25784 25783 + 25652 25785 25646 + 25785 25652 25789 + 25789 25790 25785 + 25785 25790 25786 + 25791 25786 25790 + 25787 25786 25791 + 25791 25792 25787 + 25787 25792 25793 + 25793 25788 25787 + 25789 25652 25794 + 25794 25795 25789 + 25789 25795 25796 + 25796 25797 25789 + 25797 25798 25789 + 25798 25799 25789 + 25790 25789 25799 + 25651 25794 25652 + 25800 25794 25651 + 25794 25800 25801 + 25801 25795 25794 + 25795 25801 25802 + 25802 25796 25795 + 25651 25660 25800 + 25800 25660 25803 + 25803 25804 25800 + 25801 25800 25804 + 25804 25805 25801 + 25802 25801 25805 + 25805 25806 25802 + 25695 25802 25806 + 25796 25802 25695 + 25659 25803 25660 + 25803 25659 25807 + 25807 25808 25803 + 25803 25808 25809 + 25809 25804 25803 + 25805 25804 25809 + 25809 25810 25805 + 25805 25810 25811 + 25811 25806 25805 + 25807 25659 25658 + 25658 25812 25807 + 25807 25812 25813 + 25813 25814 25807 + 25808 25807 25814 + 25814 25815 25808 + 25808 25815 25816 + 25816 25809 25808 + 25810 25809 25816 + 25664 25812 25658 + 25812 25664 25817 + 25817 25813 25812 + 25818 25813 25817 + 25818 25819 25813 + 25814 25813 25819 + 25820 25814 25819 + 25815 25814 25820 + 25820 25821 25815 + 25815 25821 25816 + 25669 25817 25664 + 25818 25817 25669 + 25669 25822 25818 + 25818 25822 25823 + 25823 25824 25818 + 25819 25818 25824 + 25824 25825 25819 + 25820 25819 25825 + 25825 25826 25820 + 25821 25820 25826 + 25827 25822 25669 + 25822 25827 25828 + 25828 25823 25822 + 25829 25823 25828 + 25829 25830 25823 + 25824 25823 25830 + 25831 25824 25830 + 25831 25825 25824 + 25669 25668 25827 + 25827 25668 25667 + 25667 25832 25827 + 25828 25827 25832 + 25832 25833 25828 + 25833 25834 25828 + 25834 25829 25828 + 25835 25829 25834 + 25830 25829 25835 + 25835 25836 25830 + 25830 25836 25831 + 25676 25832 25667 + 25833 25832 25676 + 25837 25833 25676 + 25838 25833 25837 + 25838 25834 25833 + 25834 25838 25839 + 25839 25835 25834 + 25835 25839 25840 + 25840 25836 25835 + 25831 25836 25840 + 25841 25831 25840 + 25831 25841 25825 + 25842 25837 25676 + 25837 25842 25843 + 25838 25837 25843 + 25839 25838 25843 + 25839 25843 25844 + 25840 25839 25844 + 25844 25845 25840 + 25841 25840 25845 + 25846 25841 25845 + 25825 25841 25846 + 25676 25681 25842 + 25842 25681 25847 + 25848 25842 25847 + 25849 25842 25848 + 25849 25843 25842 + 25844 25843 25849 + 25850 25844 25849 + 25845 25844 25850 + 25847 25681 25680 + 25847 25680 25686 + 25686 25851 25847 + 25847 25851 25848 + 25851 25852 25848 + 25849 25848 25852 + 25852 25853 25849 + 25849 25853 25850 + 25851 25686 25854 + 25855 25851 25854 + 25852 25851 25855 + 25856 25852 25855 + 25857 25852 25856 + 25857 25853 25852 + 25858 25853 25857 + 25853 25858 25850 + 25854 25686 25685 + 25685 25691 25854 + 25859 25854 25691 + 25855 25854 25859 + 25859 25860 25855 + 25855 25860 25861 + 25861 25856 25855 + 25857 25856 25861 + 25861 25862 25857 + 25857 25862 25863 + 25863 25858 25857 + 25691 25864 25859 + 25865 25859 25864 + 25866 25859 25865 + 25866 25860 25859 + 25861 25860 25866 + 25867 25861 25866 + 25868 25861 25867 + 25868 25862 25861 + 25696 25864 25691 + 25811 25864 25696 + 25864 25811 25865 + 25869 25865 25811 + 25865 25869 25870 + 25866 25865 25870 + 25866 25870 25871 + 25871 25867 25866 + 25867 25871 25872 + 25868 25867 25872 + 25696 25806 25811 + 25806 25696 25695 + 25811 25810 25869 + 25816 25869 25810 + 25869 25816 25873 + 25873 25870 25869 + 25870 25873 25874 + 25874 25871 25870 + 25875 25871 25874 + 25875 25872 25871 + 25872 25875 25876 + 25876 25877 25872 + 25868 25872 25877 + 25862 25868 25877 + 25877 25863 25862 + 25858 25863 25877 + 25821 25873 25816 + 25873 25821 25878 + 25878 25874 25873 + 25874 25878 25879 + 25875 25874 25879 + 25875 25879 25880 + 25880 25876 25875 + 25880 25850 25876 + 25850 25858 25876 + 25877 25876 25858 + 25826 25878 25821 + 25846 25878 25826 + 25846 25879 25878 + 25879 25846 25845 + 25845 25880 25879 + 25850 25880 25845 + 25846 25826 25825 + 25695 25694 25796 + 25796 25694 25701 + 25701 25797 25796 + 25881 25797 25701 + 25797 25881 25882 + 25882 25798 25797 + 25701 25700 25881 + 25881 25700 25883 + 25883 25884 25881 + 25882 25881 25884 + 25884 25885 25882 + 25886 25882 25885 + 25798 25882 25886 + 25887 25883 25700 + 25888 25883 25887 + 25884 25883 25888 + 25888 25889 25884 + 25884 25889 25890 + 25890 25885 25884 + 25891 25885 25890 + 25885 25891 25886 + 25700 25699 25887 + 25892 25887 25699 + 25887 25892 25893 + 25893 25894 25887 + 25887 25894 25888 + 25895 25888 25894 + 25889 25888 25895 + 25895 25896 25889 + 25890 25889 25896 + 25699 25698 25892 + 25897 25892 25698 + 25893 25892 25897 + 25897 25898 25893 + 25893 25898 25899 + 25899 25900 25893 + 25894 25893 25900 + 25900 25901 25894 + 25894 25901 25895 + 25698 25705 25897 + 25902 25897 25705 + 25897 25902 25903 + 25903 25898 25897 + 25899 25898 25903 + 25904 25899 25903 + 25905 25899 25904 + 25905 25906 25899 + 25900 25899 25906 + 25705 25704 25902 + 25907 25902 25704 + 25903 25902 25907 + 25907 25908 25903 + 25903 25908 25909 + 25909 25904 25903 + 25905 25904 25909 + 25712 25907 25704 + 25910 25907 25712 + 25907 25910 25911 + 25911 25908 25907 + 25908 25911 25912 + 25912 25909 25908 + 25909 25912 25913 + 25913 25914 25909 + 25909 25914 25905 + 25712 25716 25910 + 25915 25910 25716 + 25911 25910 25915 + 25915 25916 25911 + 25911 25916 25917 + 25917 25912 25911 + 25913 25912 25917 + 25716 25734 25915 + 25918 25915 25734 + 25915 25918 25919 + 25919 25916 25915 + 25916 25919 25920 + 25920 25917 25916 + 25921 25917 25920 + 25921 25922 25917 + 25917 25922 25913 + 25734 25733 25918 + 25918 25733 25739 + 25739 25923 25918 + 25919 25918 25923 + 25923 25924 25919 + 25919 25924 25925 + 25925 25920 25919 + 25921 25920 25925 + 25926 25923 25739 + 25923 25926 25927 + 25927 25924 25923 + 25924 25927 25928 + 25928 25925 25924 + 25929 25925 25928 + 25929 25930 25925 + 25925 25930 25921 + 25739 25931 25926 + 25891 25926 25931 + 25927 25926 25891 + 25891 25932 25927 + 25927 25932 25933 + 25933 25928 25927 + 25929 25928 25933 + 25738 25931 25739 + 25931 25738 25934 + 25934 25886 25931 + 25931 25886 25891 + 25934 25738 25935 + 25935 25936 25934 + 25798 25934 25936 + 25886 25934 25798 + 25737 25935 25738 + 25937 25935 25737 + 25935 25937 25938 + 25938 25936 25935 + 25936 25938 25939 + 25939 25799 25936 + 25936 25799 25798 + 25737 25743 25937 + 25937 25743 25940 + 25940 25941 25937 + 25938 25937 25941 + 25941 25942 25938 + 25939 25938 25942 + 25942 25791 25939 + 25790 25939 25791 + 25799 25939 25790 + 25747 25940 25743 + 25943 25940 25747 + 25941 25940 25943 + 25943 25944 25941 + 25941 25944 25945 + 25945 25942 25941 + 25791 25942 25945 + 25945 25792 25791 + 25792 25945 25946 + 25946 25793 25792 + 25747 25752 25943 + 25947 25943 25752 + 25944 25943 25947 + 25947 25948 25944 + 25945 25944 25948 + 25948 25946 25945 + 25946 25948 25949 + 25950 25946 25949 + 25950 25793 25946 + 25950 25951 25793 + 25788 25793 25951 + 25752 25952 25947 + 25952 25953 25947 + 25953 25954 25947 + 25954 25948 25947 + 25954 25949 25948 + 25949 25954 25955 + 25955 25956 25949 + 25950 25949 25956 + 25952 25752 25751 + 25957 25952 25751 + 25958 25952 25957 + 25958 25953 25952 + 25953 25958 25959 + 25959 25960 25953 + 25954 25953 25960 + 25960 25955 25954 + 25757 25957 25751 + 25958 25957 25757 + 25757 25961 25958 + 25958 25961 25962 + 25962 25959 25958 + 25963 25959 25962 + 25963 25960 25959 + 25963 25964 25960 + 25955 25960 25964 + 25965 25955 25964 + 25965 25956 25955 + 25762 25961 25757 + 25961 25762 25966 + 25966 25962 25961 + 25967 25962 25966 + 25967 25968 25962 + 25962 25968 25963 + 25963 25968 25969 + 25964 25963 25969 + 25767 25966 25762 + 25966 25767 25970 + 25967 25966 25970 + 25970 25971 25967 + 25967 25971 25972 + 25968 25967 25972 + 25968 25972 25969 + 25973 25970 25767 + 25970 25973 25974 + 25974 25971 25970 + 25972 25971 25974 + 25974 25975 25972 + 25972 25975 25976 + 25976 25969 25972 + 25973 25767 25766 + 25977 25973 25766 + 25974 25973 25977 + 25975 25974 25977 + 25977 25780 25975 + 25975 25780 25978 + 25978 25976 25975 + 25976 25978 25979 + 25980 25976 25979 + 25969 25976 25980 + 25771 25977 25766 + 25780 25977 25771 + 25779 25978 25780 + 25979 25978 25779 + 25979 25779 25981 + 25979 25981 25982 + 25982 25983 25979 + 25979 25983 25980 + 25983 25984 25980 + 25985 25980 25984 + 25980 25985 25969 + 25969 25985 25964 + 25981 25779 25778 + 25982 25981 25778 + 25778 25986 25982 + 25982 25986 25987 + 25988 25982 25987 + 25989 25982 25988 + 25989 25983 25982 + 25984 25983 25989 + 25784 25986 25778 + 25987 25986 25784 + 25987 25784 25788 + 25987 25788 25951 + 25987 25951 25990 + 25990 25988 25987 + 25988 25990 25991 + 25989 25988 25991 + 25989 25991 25992 + 25992 25984 25989 + 25984 25992 25993 + 25993 25994 25984 + 25984 25994 25985 + 25994 25964 25985 + 25994 25965 25964 + 25995 25990 25951 + 25996 25990 25995 + 25996 25991 25990 + 25991 25996 25993 + 25993 25992 25991 + 25951 25950 25995 + 25956 25995 25950 + 25995 25956 25997 + 25996 25995 25997 + 25996 25997 25993 + 25994 25993 25997 + 25997 25965 25994 + 25965 25997 25956 + 25890 25932 25891 + 25932 25890 25998 + 25998 25933 25932 + 25999 25933 25998 + 25999 26000 25933 + 25933 26000 25929 + 25896 25998 25890 + 25999 25998 25896 + 25896 26001 25999 + 25999 26001 26002 + 26002 26003 25999 + 26003 26004 25999 + 26004 26000 25999 + 25929 26000 26004 + 26005 26001 25896 + 26001 26005 26006 + 26006 26002 26001 + 26007 26002 26006 + 26007 26008 26002 + 26002 26008 26009 + 26009 26003 26002 + 26009 26004 26003 + 26005 25896 25895 + 26010 26005 25895 + 26005 26010 26011 + 26011 26006 26005 + 26006 26011 26012 + 26007 26006 26012 + 26007 26012 26013 + 26008 26007 26013 + 26013 26014 26008 + 26009 26008 26014 + 25901 26010 25895 + 26015 26010 25901 + 26010 26015 26016 + 26016 26011 26010 + 26017 26011 26016 + 26017 26012 26011 + 26012 26017 26018 + 26018 26013 26012 + 26013 26018 26019 + 26019 26014 26013 + 26014 26019 26009 + 26015 25901 25900 + 26015 25900 25906 + 26015 25906 26020 + 26020 26016 26015 + 26016 26020 26021 + 26017 26016 26021 + 26018 26017 26021 + 26018 26021 26022 + 26022 26023 26018 + 26019 26018 26023 + 26024 26020 25906 + 26025 26020 26024 + 26025 26021 26020 + 26022 26021 26025 + 26026 26022 26025 + 26022 26026 26027 + 26027 26028 26022 + 26022 26028 26023 + 25906 25905 26024 + 26029 26024 25905 + 26025 26024 26029 + 26029 26030 26025 + 26025 26030 26026 + 26026 26030 26031 + 26027 26026 26031 + 26031 26032 26027 + 26028 26027 26032 + 25905 25914 26029 + 26029 25914 25913 + 26033 26029 25913 + 26031 26029 26033 + 26031 26030 26029 + 26033 25913 25922 + 25922 26034 26033 + 26034 26032 26033 + 26032 26031 26033 + 26034 25922 25921 + 26035 26034 25921 + 26036 26034 26035 + 26036 26032 26034 + 26032 26036 26028 + 26037 26028 26036 + 26028 26037 26023 + 26023 26037 26038 + 26023 26038 26019 + 26039 26035 25921 + 26036 26035 26039 + 26039 26040 26036 + 26036 26040 26037 + 26040 26041 26037 + 26041 26038 26037 + 26038 26041 26042 + 26042 26019 26038 + 26019 26042 26009 + 26009 26042 26004 + 25921 25930 26039 + 26039 25930 25929 + 26043 26039 25929 + 26041 26039 26043 + 26041 26040 26039 + 26004 26043 25929 + 26041 26043 26004 + 26004 26042 26041 + 26044 26045 26046 + 26047 26045 26044 + 26048 26045 26047 + 26045 26048 26049 + 26049 26050 26045 + 26046 26051 26044 + 26052 26044 26051 + 26044 26052 26053 + 26053 26054 26044 + 26044 26054 26047 + 26055 26051 26046 + 26056 26051 26055 + 26051 26056 26052 + 26057 26052 26056 + 26053 26052 26057 + 26057 26058 26053 + 26059 26053 26058 + 26054 26053 26059 + 26046 26060 26055 + 26061 26055 26060 + 26062 26055 26061 + 26055 26062 26056 + 26056 26062 26063 + 26063 26064 26056 + 26056 26064 26057 + 26060 26046 26065 + 26060 26065 26066 + 26066 26067 26060 + 26060 26067 26068 + 26068 26061 26060 + 26069 26065 26046 + 26065 26069 26070 + 26070 26066 26065 + 26071 26066 26070 + 26066 26071 26072 + 26072 26067 26066 + 26067 26072 26073 + 26073 26068 26067 + 26050 26069 26046 + 26050 26049 26069 + 26069 26049 26070 + 26049 26074 26070 + 26075 26070 26074 + 26070 26075 26071 + 26076 26071 26075 + 26072 26071 26076 + 26076 26077 26072 + 26072 26077 26078 + 26073 26072 26078 + 26074 26049 26048 + 26048 26079 26074 + 26080 26074 26079 + 26074 26080 26075 + 26075 26080 26081 + 26081 26082 26075 + 26075 26082 26083 + 26083 26076 26075 + 26079 26048 26084 + 26085 26079 26084 + 26085 26086 26079 + 26079 26086 26080 + 26080 26086 26087 + 26087 26081 26080 + 26088 26081 26087 + 26081 26088 26082 + 26084 26048 26047 + 26084 26047 26089 + 26089 26090 26084 + 26084 26090 26085 + 26090 26091 26085 + 26086 26085 26091 + 26091 26092 26086 + 26086 26092 26087 + 26093 26089 26047 + 26089 26093 26094 + 26095 26089 26094 + 26089 26095 26090 + 26090 26095 26096 + 26096 26091 26090 + 26092 26091 26096 + 26047 26054 26093 + 26059 26093 26054 + 26093 26059 26097 + 26097 26094 26093 + 26094 26097 26098 + 26098 26099 26094 + 26094 26099 26100 + 26096 26094 26100 + 26096 26095 26094 + 26101 26097 26059 + 26097 26101 26102 + 26098 26097 26102 + 26102 26103 26098 + 26104 26098 26103 + 26099 26098 26104 + 26105 26101 26059 + 26101 26105 26106 + 26101 26106 26107 + 26107 26102 26101 + 26108 26102 26107 + 26102 26108 26109 + 26109 26103 26102 + 26058 26105 26059 + 26058 26110 26105 + 26110 26106 26105 + 26107 26106 26110 + 26107 26110 26111 + 26108 26107 26111 + 26111 26112 26108 + 26108 26112 26113 + 26113 26109 26108 + 26114 26109 26113 + 26103 26109 26114 + 26115 26110 26058 + 26110 26115 26116 + 26116 26111 26110 + 26112 26111 26116 + 26117 26112 26116 + 26112 26117 26118 + 26118 26113 26112 + 26119 26113 26118 + 26113 26119 26114 + 26058 26057 26115 + 26115 26057 26064 + 26064 26120 26115 + 26116 26115 26120 + 26120 26121 26116 + 26117 26116 26121 + 26121 26122 26117 + 26117 26122 26123 + 26118 26117 26123 + 26124 26120 26064 + 26120 26124 26125 + 26125 26121 26120 + 26122 26121 26125 + 26122 26125 26126 + 26126 26123 26122 + 26064 26063 26124 + 26124 26063 26127 + 26127 26128 26124 + 26124 26128 26129 + 26125 26124 26129 + 26129 26126 26125 + 26130 26126 26129 + 26130 26123 26126 + 26127 26063 26062 + 26062 26131 26127 + 26131 26132 26127 + 26133 26127 26132 + 26127 26133 26128 + 26128 26133 26134 + 26134 26129 26128 + 26061 26131 26062 + 26135 26131 26061 + 26131 26135 26136 + 26136 26132 26131 + 26132 26136 26137 + 26132 26137 26133 + 26134 26133 26137 + 26137 26138 26134 + 26139 26134 26138 + 26129 26134 26139 + 26061 26140 26135 + 26135 26140 26141 + 26141 26142 26135 + 26135 26142 26143 + 26143 26136 26135 + 26137 26136 26143 + 26143 26138 26137 + 26144 26138 26143 + 26138 26144 26139 + 26140 26061 26068 + 26068 26145 26140 + 26140 26145 26146 + 26146 26141 26140 + 26147 26141 26146 + 26141 26147 26148 + 26148 26142 26141 + 26142 26148 26149 + 26149 26143 26142 + 26143 26149 26144 + 26145 26068 26073 + 26073 26150 26145 + 26145 26150 26151 + 26151 26152 26145 + 26145 26152 26146 + 26153 26146 26152 + 26146 26153 26154 + 26146 26154 26147 + 26150 26073 26155 + 26155 26156 26150 + 26151 26150 26156 + 26156 26157 26151 + 26158 26151 26157 + 26158 26152 26151 + 26152 26158 26153 + 26078 26155 26073 + 26159 26155 26078 + 26155 26159 26156 + 26156 26159 26160 + 26160 26157 26156 + 26161 26157 26160 + 26157 26161 26158 + 26158 26161 26162 + 26153 26158 26162 + 26162 26163 26153 + 26154 26153 26163 + 26078 26164 26159 + 26160 26159 26164 + 26165 26160 26164 + 26166 26160 26165 + 26160 26166 26161 + 26161 26166 26167 + 26167 26162 26161 + 26168 26164 26078 + 26164 26168 26169 + 26169 26170 26164 + 26164 26170 26165 + 26168 26078 26077 + 26077 26171 26168 + 26168 26171 26172 + 26172 26173 26168 + 26173 26169 26168 + 26174 26169 26173 + 26169 26174 26170 + 26170 26174 26175 + 26175 26165 26170 + 26076 26171 26077 + 26171 26076 26083 + 26083 26172 26171 + 26176 26172 26083 + 26172 26176 26177 + 26177 26173 26172 + 26173 26177 26178 + 26178 26179 26173 + 26173 26179 26174 + 26175 26174 26179 + 26176 26083 26180 + 26180 26181 26176 + 26176 26181 26182 + 26177 26176 26182 + 26182 26183 26177 + 26183 26184 26177 + 26178 26177 26184 + 26082 26180 26083 + 26185 26180 26082 + 26185 26181 26180 + 26181 26185 26186 + 26186 26182 26181 + 26182 26186 26187 + 26183 26182 26187 + 26082 26088 26185 + 26185 26088 26188 + 26186 26185 26188 + 26187 26186 26188 + 26188 26189 26187 + 26187 26189 26190 + 26190 26183 26187 + 26183 26190 26191 + 26183 26191 26192 + 26192 26184 26183 + 26087 26188 26088 + 26188 26087 26193 + 26188 26193 26189 + 26194 26189 26193 + 26189 26194 26190 + 26195 26190 26194 + 26190 26195 26191 + 26191 26195 26196 + 26192 26191 26196 + 26193 26087 26092 + 26092 26197 26193 + 26193 26197 26198 + 26198 26199 26193 + 26199 26194 26193 + 26194 26199 26200 + 26200 26201 26194 + 26194 26201 26195 + 26092 26096 26197 + 26197 26096 26100 + 26100 26198 26197 + 26198 26100 26202 + 26202 26203 26198 + 26198 26203 26200 + 26200 26199 26198 + 26202 26100 26099 + 26099 26204 26202 + 26202 26204 26205 + 26205 26206 26202 + 26203 26202 26206 + 26206 26207 26203 + 26200 26203 26207 + 26207 26208 26200 + 26201 26200 26208 + 26104 26204 26099 + 26204 26104 26209 + 26209 26205 26204 + 26205 26209 26210 + 26210 26211 26205 + 26205 26211 26212 + 26212 26206 26205 + 26207 26206 26212 + 26213 26209 26104 + 26210 26209 26213 + 26213 26214 26210 + 26210 26214 26215 + 26215 26216 26210 + 26211 26210 26216 + 26216 26217 26211 + 26212 26211 26217 + 26104 26218 26213 + 26219 26213 26218 + 26213 26219 26220 + 26220 26214 26213 + 26214 26220 26221 + 26221 26215 26214 + 26103 26218 26104 + 26114 26218 26103 + 26218 26114 26219 + 26119 26219 26114 + 26220 26219 26119 + 26119 26222 26220 + 26221 26220 26222 + 26222 26223 26221 + 26224 26221 26223 + 26215 26221 26224 + 26224 26225 26215 + 26215 26225 26226 + 26226 26216 26215 + 26217 26216 26226 + 26118 26222 26119 + 26222 26118 26227 + 26227 26223 26222 + 26223 26227 26228 + 26228 26229 26223 + 26223 26229 26224 + 26224 26229 26230 + 26230 26231 26224 + 26225 26224 26231 + 26123 26227 26118 + 26228 26227 26123 + 26123 26130 26228 + 26228 26130 26232 + 26233 26228 26232 + 26229 26228 26233 + 26233 26230 26229 + 26230 26233 26234 + 26234 26235 26230 + 26230 26235 26236 + 26236 26231 26230 + 26129 26232 26130 + 26139 26232 26129 + 26232 26139 26237 + 26237 26238 26232 + 26232 26238 26233 + 26234 26233 26238 + 26238 26239 26234 + 26234 26239 26240 + 26240 26241 26234 + 26235 26234 26241 + 26242 26237 26139 + 26243 26237 26242 + 26238 26237 26243 + 26243 26239 26238 + 26239 26243 26244 + 26244 26240 26239 + 26139 26144 26242 + 26245 26242 26144 + 26242 26245 26246 + 26242 26246 26243 + 26243 26246 26247 + 26247 26244 26243 + 26248 26244 26247 + 26240 26244 26248 + 26144 26149 26245 + 26249 26245 26149 + 26246 26245 26249 + 26249 26250 26246 + 26246 26250 26247 + 26251 26247 26250 + 26247 26251 26252 + 26252 26253 26247 + 26247 26253 26248 + 26149 26148 26249 + 26254 26249 26148 + 26249 26254 26255 + 26255 26250 26249 + 26250 26255 26251 + 26251 26255 26256 + 26256 26257 26251 + 26252 26251 26257 + 26148 26147 26254 + 26258 26254 26147 + 26255 26254 26258 + 26258 26256 26255 + 26259 26256 26258 + 26256 26259 26260 + 26260 26257 26256 + 26257 26260 26261 + 26261 26262 26257 + 26257 26262 26252 + 26147 26154 26258 + 26163 26258 26154 + 26258 26163 26259 + 26259 26163 26162 + 26162 26263 26259 + 26259 26263 26264 + 26264 26260 26259 + 26261 26260 26264 + 26264 26265 26261 + 26266 26261 26265 + 26262 26261 26266 + 26266 26267 26262 + 26252 26262 26267 + 26268 26263 26162 + 26263 26268 26269 + 26269 26264 26263 + 26264 26269 26270 + 26270 26265 26264 + 26265 26270 26271 + 26271 26272 26265 + 26265 26272 26266 + 26162 26167 26268 + 26268 26167 26273 + 26273 26274 26268 + 26268 26274 26275 + 26275 26269 26268 + 26270 26269 26275 + 26275 26276 26270 + 26270 26276 26277 + 26277 26271 26270 + 26273 26167 26166 + 26166 26278 26273 + 26279 26273 26278 + 26273 26279 26280 + 26280 26274 26273 + 26274 26280 26281 + 26281 26275 26274 + 26275 26281 26282 + 26282 26276 26275 + 26165 26278 26166 + 26283 26278 26165 + 26278 26283 26279 + 26284 26279 26283 + 26280 26279 26284 + 26284 26285 26280 + 26281 26280 26285 + 26285 26286 26281 + 26282 26281 26286 + 26165 26175 26283 + 26283 26175 26287 + 26287 26288 26283 + 26283 26288 26284 + 26289 26284 26288 + 26284 26289 26290 + 26290 26285 26284 + 26285 26290 26291 + 26291 26286 26285 + 26179 26287 26175 + 26292 26287 26179 + 26288 26287 26292 + 26292 26293 26288 + 26288 26293 26289 + 26294 26289 26293 + 26290 26289 26294 + 26294 26295 26290 + 26290 26295 26296 + 26296 26291 26290 + 26179 26178 26292 + 26297 26292 26178 + 26293 26292 26297 + 26297 26298 26293 + 26293 26298 26294 + 26299 26294 26298 + 26294 26299 26300 + 26300 26295 26294 + 26295 26300 26301 + 26301 26296 26295 + 26178 26302 26297 + 26303 26297 26302 + 26298 26297 26303 + 26303 26304 26298 + 26298 26304 26299 + 26305 26299 26304 + 26300 26299 26305 + 26184 26302 26178 + 26302 26184 26192 + 26192 26306 26302 + 26302 26306 26303 + 26303 26306 26307 + 26307 26308 26303 + 26304 26303 26308 + 26308 26309 26304 + 26304 26309 26305 + 26306 26192 26310 + 26310 26307 26306 + 26311 26307 26310 + 26307 26311 26312 + 26312 26308 26307 + 26308 26312 26313 + 26313 26309 26308 + 26309 26313 26314 + 26314 26305 26309 + 26196 26310 26192 + 26196 26315 26310 + 26315 26311 26310 + 26311 26315 26316 + 26316 26312 26311 + 26313 26312 26316 + 26316 26317 26313 + 26314 26313 26317 + 26315 26196 26318 + 26318 26208 26315 + 26315 26208 26207 + 26207 26319 26315 + 26315 26319 26316 + 26320 26316 26319 + 26317 26316 26320 + 26195 26318 26196 + 26318 26195 26201 + 26208 26318 26201 + 26212 26319 26207 + 26319 26212 26320 + 26217 26320 26212 + 26317 26320 26217 + 26217 26321 26317 + 26317 26321 26314 + 26321 26322 26314 + 26323 26314 26322 + 26305 26314 26323 + 26323 26324 26305 + 26305 26324 26300 + 26226 26321 26217 + 26321 26226 26325 + 26325 26322 26321 + 26322 26325 26326 + 26326 26327 26322 + 26322 26327 26323 + 26323 26327 26328 + 26328 26329 26323 + 26324 26323 26329 + 26330 26325 26226 + 26326 26325 26330 + 26330 26331 26326 + 26326 26331 26332 + 26332 26333 26326 + 26327 26326 26333 + 26333 26328 26327 + 26226 26225 26330 + 26231 26330 26225 + 26330 26231 26236 + 26236 26331 26330 + 26331 26236 26334 + 26334 26332 26331 + 26332 26334 26335 + 26335 26336 26332 + 26332 26336 26337 + 26337 26333 26332 + 26328 26333 26337 + 26338 26334 26236 + 26335 26334 26338 + 26338 26339 26335 + 26335 26339 26340 + 26340 26341 26335 + 26336 26335 26341 + 26236 26235 26338 + 26241 26338 26235 + 26338 26241 26342 + 26342 26339 26338 + 26339 26342 26343 + 26343 26340 26339 + 26340 26343 26344 + 26344 26345 26340 + 26340 26345 26346 + 26346 26341 26340 + 26342 26241 26240 + 26240 26347 26342 + 26342 26347 26348 + 26348 26343 26342 + 26344 26343 26348 + 26348 26349 26344 + 26344 26349 26350 + 26350 26351 26344 + 26345 26344 26351 + 26248 26347 26240 + 26347 26248 26352 + 26352 26353 26347 + 26347 26353 26348 + 26353 26354 26348 + 26354 26355 26348 + 26355 26356 26348 + 26349 26348 26356 + 26357 26352 26248 + 26358 26352 26357 + 26353 26352 26358 + 26358 26359 26353 + 26353 26359 26360 + 26360 26354 26353 + 26354 26360 26361 + 26361 26355 26354 + 26248 26253 26357 + 26362 26357 26253 + 26357 26362 26363 + 26363 26364 26357 + 26357 26364 26358 + 26358 26364 26365 + 26365 26366 26358 + 26359 26358 26366 + 26253 26252 26362 + 26267 26362 26252 + 26363 26362 26267 + 26267 26367 26363 + 26363 26367 26368 + 26368 26369 26363 + 26364 26363 26369 + 26369 26365 26364 + 26266 26367 26267 + 26367 26266 26370 + 26370 26371 26367 + 26367 26371 26368 + 26372 26370 26266 + 26373 26370 26372 + 26371 26370 26373 + 26371 26373 26374 + 26374 26368 26371 + 26375 26372 26266 + 26376 26372 26375 + 26377 26372 26376 + 26372 26377 26373 + 26373 26377 26378 + 26378 26374 26373 + 26379 26374 26378 + 26368 26374 26379 + 26272 26375 26266 + 26380 26375 26272 + 26375 26380 26381 + 26381 26382 26375 + 26375 26382 26376 + 26272 26383 26380 + 26384 26380 26383 + 26381 26380 26384 + 26384 26385 26381 + 26386 26381 26385 + 26382 26381 26386 + 26386 26387 26382 + 26376 26382 26387 + 26388 26383 26272 + 26383 26388 26389 + 26389 26390 26383 + 26383 26390 26384 + 26391 26384 26390 + 26385 26384 26391 + 26272 26271 26388 + 26388 26271 26277 + 26277 26392 26388 + 26388 26392 26393 + 26393 26389 26388 + 26394 26389 26393 + 26389 26394 26395 + 26390 26389 26395 + 26390 26395 26391 + 26396 26392 26277 + 26392 26396 26397 + 26397 26393 26392 + 26393 26397 26398 + 26398 26399 26393 + 26393 26399 26394 + 26277 26400 26396 + 26396 26400 26401 + 26401 26402 26396 + 26396 26402 26403 + 26403 26397 26396 + 26398 26397 26403 + 26400 26277 26276 + 26276 26282 26400 + 26401 26400 26282 + 26282 26404 26401 + 26405 26401 26404 + 26401 26405 26406 + 26406 26402 26401 + 26402 26406 26407 + 26407 26403 26402 + 26286 26404 26282 + 26408 26404 26286 + 26404 26408 26405 + 26409 26405 26408 + 26406 26405 26409 + 26409 26410 26406 + 26406 26410 26411 + 26411 26407 26406 + 26412 26407 26411 + 26403 26407 26412 + 26286 26291 26408 + 26408 26291 26296 + 26296 26413 26408 + 26408 26413 26409 + 26414 26409 26413 + 26414 26410 26409 + 26410 26414 26415 + 26415 26416 26410 + 26410 26416 26411 + 26417 26413 26296 + 26413 26417 26414 + 26414 26417 26418 + 26418 26419 26414 + 26419 26420 26414 + 26420 26421 26414 + 26421 26415 26414 + 26296 26301 26417 + 26417 26301 26422 + 26422 26418 26417 + 26423 26418 26422 + 26418 26423 26424 + 26424 26419 26418 + 26422 26301 26300 + 26300 26324 26422 + 26329 26422 26324 + 26422 26329 26423 + 26423 26329 26328 + 26328 26425 26423 + 26423 26425 26426 + 26426 26424 26423 + 26427 26424 26426 + 26419 26424 26427 + 26427 26428 26419 + 26419 26428 26429 + 26429 26420 26419 + 26337 26425 26328 + 26425 26337 26430 + 26430 26426 26425 + 26426 26430 26431 + 26431 26432 26426 + 26426 26432 26427 + 26427 26432 26433 + 26433 26434 26427 + 26428 26427 26434 + 26430 26337 26336 + 26336 26435 26430 + 26431 26430 26435 + 26435 26436 26431 + 26431 26436 26437 + 26437 26438 26431 + 26432 26431 26438 + 26438 26433 26432 + 26341 26435 26336 + 26435 26341 26346 + 26346 26436 26435 + 26436 26346 26439 + 26439 26437 26436 + 26437 26439 26440 + 26440 26441 26437 + 26437 26441 26442 + 26442 26438 26437 + 26433 26438 26442 + 26443 26439 26346 + 26440 26439 26443 + 26443 26444 26440 + 26440 26444 26445 + 26445 26446 26440 + 26441 26440 26446 + 26446 26447 26441 + 26442 26441 26447 + 26346 26345 26443 + 26351 26443 26345 + 26443 26351 26448 + 26448 26444 26443 + 26444 26448 26449 + 26449 26445 26444 + 26445 26449 26450 + 26450 26451 26445 + 26446 26445 26451 + 26452 26446 26451 + 26447 26446 26452 + 26448 26351 26350 + 26350 26453 26448 + 26449 26448 26453 + 26453 26454 26449 + 26450 26449 26454 + 26454 26455 26450 + 26456 26450 26455 + 26450 26456 26457 + 26451 26450 26457 + 26457 26452 26451 + 26458 26453 26350 + 26453 26458 26459 + 26459 26454 26453 + 26454 26459 26460 + 26460 26455 26454 + 26455 26460 26461 + 26455 26461 26456 + 26462 26456 26461 + 26457 26456 26462 + 26350 26463 26458 + 26458 26463 26464 + 26464 26465 26458 + 26466 26458 26465 + 26466 26459 26458 + 26460 26459 26466 + 26463 26350 26349 + 26349 26467 26463 + 26464 26463 26467 + 26467 26468 26464 + 26469 26464 26468 + 26464 26469 26470 + 26470 26465 26464 + 26465 26470 26471 + 26471 26466 26465 + 26356 26467 26349 + 26467 26356 26472 + 26472 26468 26467 + 26468 26472 26473 + 26473 26474 26468 + 26468 26474 26469 + 26475 26469 26474 + 26470 26469 26475 + 26472 26356 26476 + 26476 26477 26472 + 26477 26473 26472 + 26473 26477 26478 + 26479 26473 26478 + 26479 26480 26473 + 26474 26473 26480 + 26356 26355 26476 + 26481 26476 26355 + 26476 26481 26482 + 26482 26477 26476 + 26477 26482 26483 + 26483 26478 26477 + 26355 26361 26481 + 26481 26361 26484 + 26484 26485 26481 + 26482 26481 26485 + 26485 26486 26482 + 26483 26482 26486 + 26486 26487 26483 + 26488 26483 26487 + 26478 26483 26488 + 26489 26484 26361 + 26484 26489 26490 + 26490 26491 26484 + 26484 26491 26492 + 26492 26485 26484 + 26486 26485 26492 + 26361 26360 26489 + 26489 26360 26359 + 26359 26493 26489 + 26490 26489 26493 + 26493 26494 26490 + 26495 26490 26494 + 26495 26496 26490 + 26491 26490 26496 + 26496 26497 26491 + 26497 26492 26491 + 26366 26493 26359 + 26493 26366 26498 + 26498 26494 26493 + 26494 26498 26495 + 26498 26499 26495 + 26495 26499 26500 + 26500 26501 26495 + 26496 26495 26501 + 26502 26496 26501 + 26497 26496 26502 + 26498 26366 26365 + 26365 26503 26498 + 26498 26503 26504 + 26504 26499 26498 + 26500 26499 26504 + 26504 26505 26500 + 26506 26500 26505 + 26501 26500 26506 + 26506 26507 26501 + 26507 26502 26501 + 26508 26503 26365 + 26503 26508 26509 + 26509 26504 26503 + 26504 26509 26510 + 26510 26505 26504 + 26505 26510 26511 + 26511 26512 26505 + 26505 26512 26506 + 26365 26369 26508 + 26508 26369 26368 + 26368 26513 26508 + 26508 26513 26514 + 26514 26509 26508 + 26510 26509 26514 + 26514 26515 26510 + 26516 26510 26515 + 26516 26511 26510 + 26379 26513 26368 + 26513 26379 26517 + 26517 26514 26513 + 26514 26517 26518 + 26518 26515 26514 + 26515 26518 26516 + 26518 26519 26516 + 26516 26519 26520 + 26520 26521 26516 + 26511 26516 26521 + 26522 26517 26379 + 26518 26517 26522 + 26522 26523 26518 + 26524 26518 26523 + 26524 26519 26518 + 26520 26519 26524 + 26524 26525 26520 + 26526 26520 26525 + 26521 26520 26526 + 26522 26379 26527 + 26528 26522 26527 + 26522 26528 26529 + 26529 26523 26522 + 26523 26529 26524 + 26529 26530 26524 + 26524 26530 26531 + 26531 26525 26524 + 26378 26527 26379 + 26532 26527 26378 + 26527 26532 26528 + 26528 26532 26533 + 26533 26534 26528 + 26529 26528 26534 + 26534 26535 26529 + 26536 26529 26535 + 26536 26530 26529 + 26531 26530 26536 + 26378 26537 26532 + 26532 26537 26538 + 26538 26533 26532 + 26539 26533 26538 + 26533 26539 26540 + 26540 26534 26533 + 26534 26540 26541 + 26541 26535 26534 + 26535 26541 26536 + 26537 26378 26377 + 26377 26542 26537 + 26538 26537 26542 + 26542 26488 26538 + 26487 26538 26488 + 26538 26487 26539 + 26376 26542 26377 + 26542 26376 26543 + 26543 26488 26542 + 26488 26543 26478 + 26544 26478 26543 + 26478 26544 26479 + 26543 26376 26387 + 26387 26544 26543 + 26545 26544 26387 + 26544 26545 26546 + 26546 26479 26544 + 26479 26546 26547 + 26547 26548 26479 + 26480 26479 26548 + 26387 26386 26545 + 26545 26386 26549 + 26549 26550 26545 + 26546 26545 26550 + 26550 26551 26546 + 26547 26546 26551 + 26551 26552 26547 + 26553 26547 26552 + 26548 26547 26553 + 26385 26549 26386 + 26554 26549 26385 + 26550 26549 26554 + 26554 26555 26550 + 26550 26555 26556 + 26556 26551 26550 + 26552 26551 26556 + 26385 26557 26554 + 26554 26557 26558 + 26558 26559 26554 + 26555 26554 26559 + 26559 26560 26555 + 26560 26556 26555 + 26391 26557 26385 + 26557 26391 26561 + 26561 26558 26557 + 26558 26561 26562 + 26562 26563 26558 + 26558 26563 26564 + 26564 26559 26558 + 26560 26559 26564 + 26565 26561 26391 + 26561 26565 26566 + 26562 26561 26566 + 26562 26566 26567 + 26567 26568 26562 + 26563 26562 26568 + 26568 26569 26563 + 26569 26564 26563 + 26391 26395 26565 + 26395 26394 26565 + 26394 26570 26565 + 26565 26570 26571 + 26571 26566 26565 + 26566 26571 26572 + 26572 26567 26566 + 26567 26572 26573 + 26573 26574 26567 + 26568 26567 26574 + 26570 26394 26399 + 26575 26570 26399 + 26570 26575 26576 + 26571 26570 26576 + 26577 26571 26576 + 26577 26572 26571 + 26573 26572 26577 + 26577 26578 26573 + 26579 26573 26578 + 26574 26573 26579 + 26580 26575 26399 + 26575 26580 26581 + 26581 26576 26575 + 26576 26581 26582 + 26582 26577 26576 + 26577 26582 26583 + 26583 26578 26577 + 26584 26578 26583 + 26578 26584 26579 + 26399 26398 26580 + 26585 26580 26398 + 26581 26580 26585 + 26585 26586 26581 + 26582 26581 26586 + 26586 26587 26582 + 26583 26582 26587 + 26587 26588 26583 + 26583 26588 26589 + 26589 26584 26583 + 26398 26590 26585 + 26591 26585 26590 + 26585 26591 26592 + 26592 26586 26585 + 26586 26592 26587 + 26592 26593 26587 + 26587 26593 26594 + 26594 26588 26587 + 26589 26588 26594 + 26403 26590 26398 + 26412 26590 26403 + 26590 26412 26591 + 26595 26591 26412 + 26592 26591 26595 + 26595 26596 26592 + 26597 26592 26596 + 26597 26593 26592 + 26594 26593 26597 + 26597 26598 26594 + 26598 26599 26594 + 26599 26589 26594 + 26584 26589 26599 + 26412 26600 26595 + 26601 26595 26600 + 26595 26601 26602 + 26602 26596 26595 + 26596 26602 26597 + 26602 26603 26597 + 26597 26603 26604 + 26604 26598 26597 + 26411 26600 26412 + 26605 26600 26411 + 26600 26605 26601 + 26606 26601 26605 + 26602 26601 26606 + 26606 26607 26602 + 26608 26602 26607 + 26608 26603 26602 + 26603 26608 26609 + 26604 26603 26609 + 26411 26610 26605 + 26605 26610 26611 + 26611 26612 26605 + 26606 26605 26612 + 26612 26613 26606 + 26613 26614 26606 + 26606 26614 26607 + 26610 26411 26416 + 26416 26615 26610 + 26611 26610 26615 + 26615 26616 26611 + 26617 26611 26616 + 26611 26617 26613 + 26613 26612 26611 + 26416 26415 26615 + 26615 26415 26421 + 26421 26616 26615 + 26553 26616 26421 + 26616 26553 26617 + 26552 26617 26553 + 26613 26617 26552 + 26552 26618 26613 + 26614 26613 26618 + 26618 26619 26614 + 26620 26614 26619 + 26614 26620 26607 + 26607 26620 26608 + 26421 26621 26553 + 26553 26621 26548 + 26622 26548 26621 + 26622 26480 26548 + 26623 26480 26622 + 26480 26623 26474 + 26624 26621 26421 + 26621 26624 26622 + 26625 26622 26624 + 26622 26625 26623 + 26623 26625 26626 + 26626 26475 26623 + 26474 26623 26475 + 26420 26624 26421 + 26624 26420 26429 + 26429 26627 26624 + 26624 26627 26625 + 26626 26625 26627 + 26627 26628 26626 + 26629 26626 26628 + 26475 26626 26629 + 26629 26630 26475 + 26475 26630 26470 + 26627 26429 26631 + 26631 26628 26627 + 26628 26631 26632 + 26632 26633 26628 + 26628 26633 26629 + 26634 26629 26633 + 26634 26635 26629 + 26630 26629 26635 + 26636 26631 26429 + 26632 26631 26636 + 26636 26637 26632 + 26638 26632 26637 + 26638 26639 26632 + 26633 26632 26639 + 26639 26634 26633 + 26429 26428 26636 + 26434 26636 26428 + 26636 26434 26640 + 26640 26637 26636 + 26637 26640 26638 + 26640 26641 26638 + 26638 26641 26642 + 26642 26643 26638 + 26639 26638 26643 + 26644 26639 26643 + 26634 26639 26644 + 26640 26434 26433 + 26433 26645 26640 + 26641 26640 26645 + 26646 26641 26645 + 26642 26641 26646 + 26646 26647 26642 + 26648 26642 26647 + 26643 26642 26648 + 26648 26649 26643 + 26644 26643 26649 + 26442 26645 26433 + 26645 26442 26650 + 26650 26646 26645 + 26646 26650 26651 + 26651 26647 26646 + 26647 26651 26652 + 26652 26653 26647 + 26647 26653 26648 + 26654 26648 26653 + 26649 26648 26654 + 26447 26650 26442 + 26651 26650 26447 + 26447 26655 26651 + 26656 26651 26655 + 26656 26652 26651 + 26657 26652 26656 + 26653 26652 26657 + 26657 26658 26653 + 26653 26658 26654 + 26452 26655 26447 + 26655 26452 26656 + 26452 26659 26656 + 26656 26659 26660 + 26660 26661 26656 + 26656 26661 26657 + 26661 26662 26657 + 26662 26663 26657 + 26663 26658 26657 + 26654 26658 26663 + 26457 26659 26452 + 26659 26457 26664 + 26660 26659 26664 + 26665 26660 26664 + 26661 26660 26665 + 26665 26662 26661 + 26662 26665 26666 + 26666 26663 26662 + 26663 26666 26654 + 26666 26667 26654 + 26654 26667 26649 + 26668 26649 26667 + 26649 26668 26644 + 26462 26664 26457 + 26664 26462 26669 + 26669 26665 26664 + 26665 26669 26670 + 26666 26665 26670 + 26667 26666 26670 + 26670 26671 26667 + 26671 26668 26667 + 26672 26668 26671 + 26668 26672 26673 + 26673 26644 26668 + 26644 26673 26634 + 26462 26674 26669 + 26674 26670 26669 + 26674 26675 26670 + 26670 26675 26676 + 26676 26671 26670 + 26671 26676 26672 + 26677 26672 26676 + 26672 26677 26678 + 26672 26678 26673 + 26674 26462 26679 + 26679 26680 26674 + 26680 26681 26674 + 26681 26675 26674 + 26675 26681 26682 + 26675 26682 26676 + 26682 26677 26676 + 26461 26679 26462 + 26683 26679 26461 + 26679 26683 26680 + 26683 26684 26680 + 26680 26684 26685 + 26685 26681 26680 + 26681 26685 26686 + 26686 26682 26681 + 26682 26686 26687 + 26687 26677 26682 + 26461 26688 26683 + 26683 26688 26689 + 26689 26690 26683 + 26684 26683 26690 + 26690 26691 26684 + 26691 26685 26684 + 26685 26691 26686 + 26687 26686 26691 + 26460 26688 26461 + 26689 26688 26460 + 26689 26460 26692 + 26692 26693 26689 + 26693 26694 26689 + 26689 26694 26691 + 26691 26690 26689 + 26466 26692 26460 + 26693 26692 26466 + 26466 26471 26693 + 26693 26471 26695 + 26695 26696 26693 + 26687 26693 26696 + 26687 26694 26693 + 26691 26694 26687 + 26695 26471 26470 + 26695 26470 26630 + 26635 26695 26630 + 26695 26635 26678 + 26678 26696 26695 + 26696 26678 26677 + 26677 26687 26696 + 26678 26635 26673 + 26635 26634 26673 + 26556 26618 26552 + 26618 26556 26619 + 26556 26697 26619 + 26619 26697 26698 + 26619 26698 26620 + 26699 26620 26698 + 26620 26699 26608 + 26560 26697 26556 + 26700 26697 26560 + 26697 26700 26698 + 26698 26700 26701 + 26701 26699 26698 + 26702 26699 26701 + 26608 26699 26702 + 26702 26609 26608 + 26609 26702 26703 + 26703 26604 26609 + 26560 26704 26700 + 26705 26700 26704 + 26705 26706 26700 + 26700 26706 26701 + 26701 26706 26707 + 26707 26708 26701 + 26701 26708 26702 + 26564 26704 26560 + 26704 26564 26709 + 26709 26705 26704 + 26705 26709 26710 + 26710 26711 26705 + 26705 26711 26707 + 26707 26706 26705 + 26569 26709 26564 + 26709 26569 26712 + 26710 26709 26712 + 26713 26710 26712 + 26710 26713 26714 + 26711 26710 26714 + 26714 26707 26711 + 26707 26714 26715 + 26708 26707 26715 + 26708 26715 26716 + 26716 26702 26708 + 26702 26716 26703 + 26717 26712 26569 + 26712 26717 26718 + 26718 26713 26712 + 26713 26718 26715 + 26715 26714 26713 + 26569 26568 26717 + 26717 26568 26574 + 26718 26717 26574 + 26719 26718 26574 + 26715 26718 26719 + 26719 26716 26715 + 26716 26719 26579 + 26716 26579 26703 + 26720 26703 26579 + 26703 26720 26604 + 26598 26604 26720 + 26720 26599 26598 + 26599 26720 26584 + 26579 26719 26574 + 26584 26720 26579 + 26539 26487 26486 + 26486 26721 26539 + 26539 26721 26722 + 26722 26540 26539 + 26540 26722 26723 + 26541 26540 26723 + 26492 26721 26486 + 26721 26492 26724 + 26724 26722 26721 + 26722 26724 26725 + 26725 26723 26722 + 26723 26725 26726 + 26726 26727 26723 + 26727 26541 26723 + 26727 26728 26541 + 26541 26728 26536 + 26497 26724 26492 + 26724 26497 26729 + 26725 26724 26729 + 26730 26725 26729 + 26730 26726 26725 + 26726 26730 26731 + 26732 26726 26731 + 26727 26726 26732 + 26732 26733 26727 + 26728 26727 26733 + 26502 26729 26497 + 26729 26502 26734 + 26734 26730 26729 + 26730 26734 26735 + 26735 26731 26730 + 26731 26735 26736 + 26736 26737 26731 + 26732 26731 26737 + 26738 26732 26737 + 26733 26732 26738 + 26507 26734 26502 + 26734 26507 26739 + 26735 26734 26739 + 26736 26735 26739 + 26740 26736 26739 + 26741 26736 26740 + 26737 26736 26741 + 26737 26741 26738 + 26741 26742 26738 + 26743 26738 26742 + 26738 26743 26733 + 26744 26739 26507 + 26739 26744 26740 + 26744 26745 26740 + 26740 26745 26746 + 26746 26526 26740 + 26740 26526 26741 + 26742 26741 26526 + 26507 26506 26744 + 26744 26506 26512 + 26512 26747 26744 + 26745 26744 26747 + 26746 26745 26747 + 26747 26748 26746 + 26746 26748 26521 + 26526 26746 26521 + 26748 26747 26512 + 26512 26511 26748 + 26748 26511 26521 + 26525 26742 26526 + 26525 26531 26742 + 26531 26749 26742 + 26742 26749 26743 + 26750 26743 26749 + 26743 26750 26733 + 26750 26728 26733 + 26536 26728 26750 + 26749 26531 26751 + 26751 26750 26749 + 26750 26751 26536 + 26536 26751 26531 + 26752 26753 26754 + 26753 26755 26754 + 26756 26754 26755 + 26754 26756 26757 + 26757 26758 26754 + 26754 26758 26752 + 26759 26752 26758 + 26760 26752 26759 + 26761 26755 26753 + 26762 26755 26761 + 26755 26762 26756 + 26756 26762 26763 + 26763 26764 26756 + 26757 26756 26764 + 26753 26765 26761 + 26766 26761 26765 + 26767 26761 26766 + 26761 26767 26762 + 26762 26767 26768 + 26768 26763 26762 + 26769 26763 26768 + 26763 26769 26770 + 26770 26764 26763 + 26771 26766 26765 + 26772 26766 26771 + 26766 26772 26767 + 26768 26767 26772 + 26772 26773 26768 + 26774 26768 26773 + 26768 26774 26769 + 26765 26775 26771 + 26776 26771 26775 + 26777 26771 26776 + 26771 26777 26772 + 26772 26777 26778 + 26778 26773 26772 + 26779 26773 26778 + 26773 26779 26774 + 26780 26774 26779 + 26769 26774 26780 + 26781 26776 26775 + 26782 26776 26781 + 26776 26782 26777 + 26778 26777 26782 + 26782 26783 26778 + 26784 26778 26783 + 26778 26784 26779 + 26775 26785 26781 + 26781 26785 26786 + 26786 26787 26781 + 26788 26781 26787 + 26781 26788 26782 + 26782 26788 26789 + 26789 26783 26782 + 26790 26783 26789 + 26783 26790 26784 + 26791 26786 26785 + 26785 26792 26791 + 26793 26791 26792 + 26792 26794 26793 + 26795 26793 26794 + 26794 26796 26795 + 26797 26795 26796 + 26798 26795 26797 + 26795 26798 26786 + 26786 26798 26799 + 26799 26787 26786 + 26800 26787 26799 + 26787 26800 26788 + 26789 26788 26800 + 26801 26797 26796 + 26797 26801 26802 + 26802 26803 26797 + 26797 26803 26798 + 26799 26798 26803 + 26803 26804 26799 + 26805 26799 26804 + 26799 26805 26800 + 26796 26760 26801 + 26801 26760 26806 + 26806 26807 26801 + 26802 26801 26807 + 26807 26808 26802 + 26802 26808 26809 + 26809 26810 26802 + 26803 26802 26810 + 26810 26804 26803 + 26759 26806 26760 + 26806 26759 26811 + 26811 26812 26806 + 26806 26812 26813 + 26813 26807 26806 + 26808 26807 26813 + 26813 26814 26808 + 26808 26814 26815 + 26815 26809 26808 + 26811 26759 26816 + 26816 26817 26811 + 26818 26811 26817 + 26812 26811 26818 + 26818 26819 26812 + 26812 26819 26820 + 26820 26813 26812 + 26814 26813 26820 + 26758 26816 26759 + 26821 26816 26758 + 26816 26821 26822 + 26822 26817 26816 + 26817 26822 26823 + 26823 26824 26817 + 26817 26824 26818 + 26825 26818 26824 + 26819 26818 26825 + 26758 26757 26821 + 26826 26821 26757 + 26822 26821 26826 + 26826 26827 26822 + 26823 26822 26827 + 26827 26828 26823 + 26829 26823 26828 + 26824 26823 26829 + 26829 26830 26824 + 26824 26830 26825 + 26757 26831 26826 + 26832 26826 26831 + 26826 26832 26833 + 26833 26827 26826 + 26827 26833 26834 + 26834 26828 26827 + 26764 26831 26757 + 26835 26831 26764 + 26831 26835 26832 + 26836 26832 26835 + 26833 26832 26836 + 26836 26837 26833 + 26833 26837 26838 + 26838 26834 26833 + 26839 26834 26838 + 26828 26834 26839 + 26764 26770 26835 + 26835 26770 26840 + 26840 26841 26835 + 26835 26841 26836 + 26842 26836 26841 + 26836 26842 26843 + 26843 26837 26836 + 26837 26843 26844 + 26844 26838 26837 + 26840 26770 26769 + 26845 26840 26769 + 26846 26840 26845 + 26846 26841 26840 + 26841 26846 26842 + 26847 26842 26846 + 26843 26842 26847 + 26847 26848 26843 + 26844 26843 26848 + 26769 26849 26845 + 26849 26850 26845 + 26851 26845 26850 + 26852 26845 26851 + 26845 26852 26846 + 26846 26852 26847 + 26780 26849 26769 + 26849 26780 26853 + 26849 26853 26854 + 26854 26850 26849 + 26855 26850 26854 + 26850 26855 26851 + 26856 26851 26855 + 26852 26851 26856 + 26856 26857 26852 + 26852 26857 26847 + 26853 26780 26858 + 26858 26859 26853 + 26854 26853 26859 + 26859 26860 26854 + 26861 26854 26860 + 26854 26861 26855 + 26779 26858 26780 + 26862 26858 26779 + 26859 26858 26862 + 26859 26862 26863 + 26863 26860 26859 + 26864 26860 26863 + 26860 26864 26861 + 26865 26861 26864 + 26855 26861 26865 + 26865 26866 26855 + 26855 26866 26856 + 26779 26784 26862 + 26862 26784 26790 + 26863 26862 26790 + 26867 26863 26790 + 26864 26863 26867 + 26867 26868 26864 + 26864 26868 26865 + 26869 26865 26868 + 26865 26869 26870 + 26870 26866 26865 + 26866 26870 26871 + 26871 26856 26866 + 26857 26856 26871 + 26790 26872 26867 + 26873 26867 26872 + 26867 26873 26874 + 26874 26868 26867 + 26868 26874 26869 + 26875 26869 26874 + 26870 26869 26875 + 26876 26872 26790 + 26877 26872 26876 + 26872 26877 26873 + 26878 26873 26877 + 26874 26873 26878 + 26878 26879 26874 + 26874 26879 26875 + 26790 26880 26876 + 26876 26880 26881 + 26882 26876 26881 + 26876 26882 26877 + 26877 26882 26883 + 26883 26884 26877 + 26877 26884 26878 + 26789 26880 26790 + 26880 26789 26885 + 26885 26881 26880 + 26886 26881 26885 + 26881 26886 26882 + 26882 26886 26887 + 26887 26883 26882 + 26888 26883 26887 + 26884 26883 26888 + 26800 26885 26789 + 26889 26885 26800 + 26885 26889 26890 + 26890 26886 26885 + 26886 26890 26891 + 26891 26887 26886 + 26892 26887 26891 + 26887 26892 26888 + 26800 26805 26889 + 26893 26889 26805 + 26890 26889 26893 + 26893 26894 26890 + 26890 26894 26895 + 26891 26890 26895 + 26895 26896 26891 + 26897 26891 26896 + 26891 26897 26892 + 26805 26898 26893 + 26899 26893 26898 + 26893 26899 26900 + 26900 26894 26893 + 26894 26900 26901 + 26901 26895 26894 + 26804 26898 26805 + 26902 26898 26804 + 26898 26902 26899 + 26899 26902 26903 + 26903 26904 26899 + 26900 26899 26904 + 26904 26905 26900 + 26901 26900 26905 + 26804 26810 26902 + 26902 26810 26809 + 26809 26903 26902 + 26903 26809 26815 + 26815 26906 26903 + 26903 26906 26907 + 26907 26904 26903 + 26905 26904 26907 + 26907 26908 26905 + 26905 26908 26909 + 26909 26910 26905 + 26905 26910 26901 + 26906 26815 26911 + 26911 26912 26906 + 26906 26912 26913 + 26913 26907 26906 + 26908 26907 26913 + 26913 26914 26908 + 26908 26914 26915 + 26915 26909 26908 + 26911 26815 26814 + 26814 26916 26911 + 26916 26917 26911 + 26917 26918 26911 + 26912 26911 26918 + 26918 26919 26912 + 26912 26919 26920 + 26920 26913 26912 + 26914 26913 26920 + 26820 26916 26814 + 26916 26820 26921 + 26921 26917 26916 + 26917 26921 26922 + 26922 26923 26917 + 26917 26923 26924 + 26924 26918 26917 + 26919 26918 26924 + 26921 26820 26819 + 26819 26925 26921 + 26921 26925 26926 + 26926 26922 26921 + 26927 26922 26926 + 26923 26922 26927 + 26927 26928 26923 + 26923 26928 26929 + 26929 26924 26923 + 26825 26925 26819 + 26925 26825 26930 + 26930 26926 26925 + 26926 26930 26931 + 26931 26932 26926 + 26926 26932 26927 + 26933 26927 26932 + 26928 26927 26933 + 26930 26825 26830 + 26830 26934 26930 + 26931 26930 26934 + 26934 26935 26931 + 26936 26931 26935 + 26932 26931 26936 + 26936 26937 26932 + 26932 26937 26933 + 26938 26934 26830 + 26934 26938 26939 + 26939 26935 26934 + 26935 26939 26940 + 26940 26941 26935 + 26935 26941 26936 + 26942 26936 26941 + 26937 26936 26942 + 26830 26829 26938 + 26938 26829 26943 + 26943 26944 26938 + 26939 26938 26944 + 26944 26945 26939 + 26940 26939 26945 + 26945 26946 26940 + 26947 26940 26946 + 26941 26940 26947 + 26828 26943 26829 + 26839 26943 26828 + 26943 26839 26948 + 26948 26944 26943 + 26944 26948 26949 + 26949 26945 26944 + 26945 26949 26950 + 26950 26946 26945 + 26946 26950 26951 + 26951 26952 26946 + 26946 26952 26947 + 26948 26839 26953 + 26953 26954 26948 + 26949 26948 26954 + 26954 26955 26949 + 26950 26949 26955 + 26955 26956 26950 + 26951 26950 26956 + 26838 26953 26839 + 26957 26953 26838 + 26953 26957 26958 + 26958 26954 26953 + 26954 26958 26959 + 26959 26955 26954 + 26955 26959 26960 + 26960 26956 26955 + 26838 26844 26957 + 26957 26844 26961 + 26961 26962 26957 + 26958 26957 26962 + 26962 26963 26958 + 26959 26958 26963 + 26963 26964 26959 + 26960 26959 26964 + 26848 26961 26844 + 26965 26961 26848 + 26961 26965 26966 + 26966 26962 26961 + 26962 26966 26967 + 26967 26963 26962 + 26963 26967 26968 + 26968 26964 26963 + 26848 26969 26965 + 26965 26969 26970 + 26970 26971 26965 + 26966 26965 26971 + 26971 26972 26966 + 26967 26966 26972 + 26972 26973 26967 + 26968 26967 26973 + 26969 26848 26847 + 26847 26974 26969 + 26969 26974 26975 + 26975 26970 26969 + 26976 26970 26975 + 26970 26976 26977 + 26977 26971 26970 + 26971 26977 26978 + 26978 26972 26971 + 26974 26847 26979 + 26979 26980 26974 + 26975 26974 26980 + 26980 26981 26975 + 26982 26975 26981 + 26975 26982 26976 + 26857 26979 26847 + 26983 26979 26857 + 26980 26979 26983 + 26980 26983 26981 + 26983 26984 26981 + 26985 26981 26984 + 26981 26985 26982 + 26986 26982 26985 + 26976 26982 26986 + 26986 26987 26976 + 26977 26976 26987 + 26857 26988 26983 + 26983 26988 26989 + 26989 26984 26983 + 26985 26984 26989 + 26989 26990 26985 + 26985 26990 26991 + 26991 26986 26985 + 26871 26988 26857 + 26988 26871 26992 + 26992 26989 26988 + 26989 26992 26993 + 26993 26990 26989 + 26990 26993 26994 + 26994 26991 26990 + 26995 26991 26994 + 26991 26995 26996 + 26996 26986 26991 + 26992 26871 26870 + 26870 26997 26992 + 26997 26998 26992 + 26993 26992 26998 + 26998 26999 26993 + 26993 26999 27000 + 27000 26994 26993 + 27001 26994 27000 + 26994 27001 26995 + 26875 26997 26870 + 26875 27002 26997 + 26997 27002 27003 + 27003 26998 26997 + 26998 27003 27004 + 27004 26999 26998 + 26999 27004 27005 + 27005 27000 26999 + 27006 27000 27005 + 27000 27006 27001 + 27002 26875 26879 + 26879 27007 27002 + 27002 27007 27008 + 27008 27003 27002 + 27004 27003 27008 + 27008 27009 27004 + 27004 27009 27005 + 27010 27005 27009 + 27005 27010 27006 + 27007 26879 26878 + 27007 26878 27011 + 27007 27011 27008 + 27012 27008 27011 + 27012 27009 27008 + 27009 27012 27010 + 27010 27012 26888 + 26892 27010 26888 + 27006 27010 26892 + 26892 26897 27006 + 27001 27006 26897 + 26878 27013 27011 + 27011 27013 27014 + 27011 27014 27012 + 27012 27014 26888 + 26884 26888 27014 + 27014 27013 26884 + 26884 27013 26878 + 26897 27015 27001 + 26896 27015 26897 + 27016 27015 26896 + 27015 27016 26995 + 26995 27001 27015 + 26896 27017 27016 + 27016 27017 27018 + 27018 27019 27016 + 27016 27019 26996 + 26996 26995 27016 + 27017 26896 26895 + 26895 27020 27017 + 27018 27017 27020 + 27020 27021 27018 + 27022 27018 27021 + 27019 27018 27022 + 27022 27023 27019 + 27019 27023 27024 + 27024 26996 27019 + 26986 26996 27024 + 26895 26901 27020 + 27020 26901 26910 + 26910 27021 27020 + 27021 26910 26909 + 26909 27025 27021 + 27021 27025 27022 + 27026 27022 27025 + 27023 27022 27026 + 27026 27027 27023 + 27023 27027 27028 + 27028 27024 27023 + 26987 27024 27028 + 27024 26987 26986 + 27025 26909 26915 + 26915 27029 27025 + 27025 27029 27026 + 27030 27026 27029 + 27026 27030 27031 + 27027 27026 27031 + 27027 27031 27032 + 27032 27028 27027 + 27033 27028 27032 + 27028 27033 26987 + 26987 27033 26977 + 27029 26915 27034 + 27034 27035 27029 + 27029 27035 27030 + 27036 27030 27035 + 27031 27030 27036 + 27036 27037 27031 + 27031 27037 27038 + 27038 27032 27031 + 27034 26915 26914 + 26914 27039 27034 + 27040 27034 27039 + 27035 27034 27040 + 27040 27041 27035 + 27035 27041 27036 + 27042 27036 27041 + 27037 27036 27042 + 26920 27039 26914 + 27039 26920 27043 + 27043 27044 27039 + 27039 27044 27040 + 27045 27040 27044 + 27041 27040 27045 + 27045 27046 27041 + 27041 27046 27042 + 27043 26920 26919 + 26919 27047 27043 + 27048 27043 27047 + 27044 27043 27048 + 27048 27049 27044 + 27044 27049 27045 + 27045 27049 27050 + 27050 27051 27045 + 27046 27045 27051 + 26924 27047 26919 + 27047 26924 26929 + 26929 27052 27047 + 27047 27052 27048 + 27053 27048 27052 + 27049 27048 27053 + 27053 27050 27049 + 27050 27053 27054 + 27054 27055 27050 + 27050 27055 27056 + 27056 27051 27050 + 27052 26929 27057 + 27057 27058 27052 + 27052 27058 27053 + 27054 27053 27058 + 27058 27059 27054 + 27054 27059 27060 + 27055 27054 27060 + 27060 27061 27055 + 27056 27055 27061 + 27057 26929 26928 + 26928 27062 27057 + 27063 27057 27062 + 27058 27057 27063 + 27063 27059 27058 + 27059 27063 27064 + 27064 27060 27059 + 27060 27064 27065 + 27061 27060 27065 + 26933 27062 26928 + 27062 26933 27066 + 27066 27067 27062 + 27062 27067 27063 + 27063 27067 27064 + 27068 27064 27067 + 27064 27068 27065 + 27066 26933 26937 + 26937 27069 27066 + 27066 27069 27068 + 27067 27066 27068 + 26942 27069 26937 + 27069 26942 27065 + 27065 27068 27069 + 26942 27070 27065 + 27071 27065 27070 + 27065 27071 27072 + 27072 27073 27065 + 27073 27074 27065 + 27074 27075 27065 + 27075 27061 27065 + 26941 27070 26942 + 26947 27070 26941 + 27070 26947 27071 + 26947 26952 27071 + 26952 26951 27071 + 26951 27076 27071 + 27071 27076 27072 + 27077 27072 27076 + 27072 27077 27078 + 27079 27072 27078 + 27072 27079 27073 + 26951 27080 27076 + 27080 27077 27076 + 27077 27080 26956 + 26956 26960 27077 + 27077 26960 27081 + 27081 27078 27077 + 27082 27078 27081 + 27078 27082 27079 + 26956 27080 26951 + 26964 27081 26960 + 27083 27081 26964 + 27081 27083 27082 + 27082 27083 27084 + 27084 27085 27082 + 27082 27085 27079 + 27073 27079 27085 + 27085 27086 27073 + 27086 27087 27073 + 27074 27073 27087 + 26964 26968 27083 + 27083 26968 27088 + 27088 27084 27083 + 27089 27084 27088 + 27084 27089 27086 + 27086 27085 27084 + 26973 27088 26968 + 27090 27088 26973 + 27088 27090 27089 + 27089 27090 27091 + 27091 27092 27089 + 27086 27089 27092 + 27092 27087 27086 + 27093 27087 27092 + 27087 27093 27074 + 26973 27094 27090 + 27090 27094 27095 + 27095 27091 27090 + 27096 27091 27095 + 27091 27096 27097 + 27097 27092 27091 + 27092 27097 27093 + 27094 26973 26972 + 26972 26978 27094 + 27094 26978 27098 + 27098 27095 27094 + 27038 27095 27098 + 27095 27038 27096 + 27096 27038 27037 + 27037 27099 27096 + 27097 27096 27099 + 27099 27100 27097 + 27093 27097 27100 + 27033 27098 26978 + 27032 27098 27033 + 27098 27032 27038 + 26978 26977 27033 + 27042 27099 27037 + 27099 27042 27101 + 27101 27100 27099 + 27100 27101 27102 + 27102 27103 27100 + 27100 27103 27093 + 27093 27103 27074 + 27075 27074 27103 + 27101 27042 27046 + 27046 27104 27101 + 27102 27101 27104 + 27104 27105 27102 + 27102 27105 27075 + 27103 27102 27075 + 27051 27104 27046 + 27104 27051 27056 + 27056 27105 27104 + 27105 27056 27061 + 27061 27075 27105 + 27106 27107 27108 + 27106 27109 27107 + 27110 27107 27109 + 27107 27110 27111 + 27108 27107 27111 + 27112 27106 27108 + 27106 27112 27113 + 27113 27114 27106 + 27114 27115 27106 + 27115 27116 27106 + 27106 27116 27109 + 27108 27117 27112 + 27112 27117 27118 + 27119 27112 27118 + 27112 27119 27113 + 27120 27117 27108 + 27117 27120 27121 + 27118 27117 27121 + 27118 27121 27122 + 27122 27123 27118 + 27119 27118 27123 + 27124 27119 27123 + 27119 27124 27113 + 27108 27111 27120 + 27120 27111 27125 + 27125 27126 27120 + 27121 27120 27126 + 27126 27127 27121 + 27122 27121 27127 + 27128 27125 27111 + 27125 27128 27129 + 27129 27130 27125 + 27125 27130 27131 + 27131 27126 27125 + 27127 27126 27131 + 27111 27110 27128 + 27132 27128 27110 + 27129 27128 27132 + 27132 27133 27129 + 27129 27133 27134 + 27134 27135 27129 + 27130 27129 27135 + 27135 27136 27130 + 27131 27130 27136 + 27110 27137 27132 + 27138 27132 27137 + 27132 27138 27139 + 27139 27133 27132 + 27133 27139 27140 + 27140 27134 27133 + 27109 27137 27110 + 27109 27141 27137 + 27141 27142 27137 + 27137 27142 27138 + 27143 27138 27142 + 27139 27138 27143 + 27143 27144 27139 + 27139 27144 27145 + 27145 27140 27139 + 27116 27141 27109 + 27116 27146 27141 + 27142 27141 27146 + 27146 27147 27142 + 27142 27147 27143 + 27143 27147 27148 + 27149 27143 27148 + 27143 27149 27150 + 27150 27144 27143 + 27116 27115 27146 + 27115 27151 27146 + 27146 27151 27147 + 27151 27148 27147 + 27148 27151 27152 + 27152 27153 27148 + 27148 27153 27154 + 27148 27154 27149 + 27150 27149 27154 + 27115 27152 27151 + 27115 27114 27152 + 27114 27155 27152 + 27152 27155 27156 + 27152 27156 27153 + 27153 27156 27157 + 27157 27154 27153 + 27154 27157 27158 + 27158 27159 27154 + 27154 27159 27150 + 27114 27160 27155 + 27160 27161 27155 + 27161 27156 27155 + 27156 27161 27162 + 27162 27157 27156 + 27158 27157 27162 + 27163 27160 27114 + 27160 27163 27164 + 27164 27161 27160 + 27161 27164 27165 + 27165 27162 27161 + 27162 27165 27166 + 27166 27167 27162 + 27162 27167 27158 + 27114 27113 27163 + 27113 27168 27163 + 27168 27169 27163 + 27169 27164 27163 + 27164 27169 27170 + 27170 27165 27164 + 27166 27165 27170 + 27171 27168 27113 + 27168 27171 27172 + 27172 27169 27168 + 27169 27172 27173 + 27173 27170 27169 + 27170 27173 27174 + 27174 27175 27170 + 27170 27175 27166 + 27113 27176 27171 + 27176 27177 27171 + 27171 27177 27178 + 27172 27171 27178 + 27172 27178 27179 + 27179 27173 27172 + 27174 27173 27179 + 27124 27176 27113 + 27176 27124 27180 + 27180 27177 27176 + 27177 27180 27181 + 27181 27178 27177 + 27178 27181 27182 + 27182 27179 27178 + 27179 27182 27183 + 27183 27184 27179 + 27179 27184 27174 + 27124 27185 27180 + 27185 27186 27180 + 27186 27181 27180 + 27181 27186 27187 + 27187 27182 27181 + 27183 27182 27187 + 27123 27185 27124 + 27185 27123 27122 + 27122 27186 27185 + 27186 27122 27188 + 27188 27187 27186 + 27187 27188 27189 + 27189 27190 27187 + 27187 27190 27183 + 27183 27190 27191 + 27191 27192 27183 + 27184 27183 27192 + 27127 27188 27122 + 27189 27188 27127 + 27127 27193 27189 + 27189 27193 27194 + 27194 27195 27189 + 27190 27189 27195 + 27195 27191 27190 + 27131 27193 27127 + 27193 27131 27196 + 27196 27194 27193 + 27194 27196 27197 + 27197 27198 27194 + 27194 27198 27199 + 27199 27195 27194 + 27191 27195 27199 + 27136 27196 27131 + 27197 27196 27136 + 27136 27200 27197 + 27197 27200 27201 + 27201 27202 27197 + 27198 27197 27202 + 27202 27203 27198 + 27199 27198 27203 + 27204 27200 27136 + 27200 27204 27205 + 27205 27201 27200 + 27201 27205 27206 + 27206 27207 27201 + 27201 27207 27208 + 27208 27202 27201 + 27203 27202 27208 + 27136 27135 27204 + 27204 27135 27134 + 27134 27209 27204 + 27204 27209 27210 + 27210 27205 27204 + 27206 27205 27210 + 27210 27211 27206 + 27206 27211 27212 + 27212 27213 27206 + 27207 27206 27213 + 27214 27209 27134 + 27209 27214 27215 + 27215 27210 27209 + 27210 27215 27216 + 27216 27211 27210 + 27211 27216 27217 + 27217 27212 27211 + 27134 27140 27214 + 27214 27140 27145 + 27145 27218 27214 + 27214 27218 27219 + 27219 27215 27214 + 27216 27215 27219 + 27219 27220 27216 + 27216 27220 27221 + 27221 27217 27216 + 27222 27218 27145 + 27218 27222 27223 + 27223 27219 27218 + 27219 27223 27224 + 27224 27220 27219 + 27220 27224 27225 + 27225 27221 27220 + 27145 27226 27222 + 27222 27226 27227 + 27227 27228 27222 + 27222 27228 27229 + 27229 27223 27222 + 27224 27223 27229 + 27229 27230 27224 + 27225 27224 27230 + 27226 27145 27144 + 27144 27150 27226 + 27227 27226 27150 + 27150 27159 27227 + 27231 27227 27159 + 27227 27231 27232 + 27232 27228 27227 + 27228 27232 27233 + 27233 27229 27228 + 27229 27233 27234 + 27234 27230 27229 + 27159 27158 27231 + 27235 27231 27158 + 27232 27231 27235 + 27235 27236 27232 + 27232 27236 27237 + 27237 27233 27232 + 27234 27233 27237 + 27237 27238 27234 + 27239 27234 27238 + 27230 27234 27239 + 27158 27167 27235 + 27240 27235 27167 + 27235 27240 27241 + 27241 27236 27235 + 27236 27241 27242 + 27242 27237 27236 + 27237 27242 27243 + 27243 27238 27237 + 27167 27166 27240 + 27244 27240 27166 + 27241 27240 27244 + 27244 27245 27241 + 27241 27245 27246 + 27246 27242 27241 + 27243 27242 27246 + 27166 27175 27244 + 27247 27244 27175 + 27244 27247 27248 + 27248 27245 27244 + 27245 27248 27249 + 27249 27246 27245 + 27246 27249 27250 + 27250 27251 27246 + 27246 27251 27243 + 27175 27174 27247 + 27252 27247 27174 + 27248 27247 27252 + 27252 27253 27248 + 27248 27253 27254 + 27254 27249 27248 + 27250 27249 27254 + 27174 27184 27252 + 27192 27252 27184 + 27252 27192 27255 + 27255 27253 27252 + 27253 27255 27256 + 27256 27254 27253 + 27254 27256 27257 + 27257 27258 27254 + 27254 27258 27250 + 27255 27192 27191 + 27191 27259 27255 + 27255 27259 27260 + 27260 27256 27255 + 27257 27256 27260 + 27260 27261 27257 + 27257 27261 27262 + 27262 27263 27257 + 27258 27257 27263 + 27199 27259 27191 + 27259 27199 27264 + 27264 27260 27259 + 27260 27264 27261 + 27264 27265 27261 + 27261 27265 27266 + 27266 27262 27261 + 27203 27264 27199 + 27265 27264 27203 + 27203 27267 27265 + 27265 27267 27268 + 27268 27266 27265 + 27269 27266 27268 + 27262 27266 27269 + 27269 27270 27262 + 27262 27270 27271 + 27271 27263 27262 + 27208 27267 27203 + 27267 27208 27272 + 27272 27268 27267 + 27273 27268 27272 + 27268 27273 27269 + 27274 27272 27208 + 27275 27272 27274 + 27272 27275 27273 + 27273 27275 27276 + 27276 27277 27273 + 27269 27273 27277 + 27208 27207 27274 + 27213 27274 27207 + 27278 27274 27213 + 27274 27278 27275 + 27276 27275 27278 + 27279 27276 27278 + 27280 27276 27279 + 27280 27277 27276 + 27277 27280 27281 + 27277 27281 27269 + 27213 27282 27278 + 27278 27282 27283 + 27283 27284 27278 + 27278 27284 27279 + 27285 27279 27284 + 27285 27286 27279 + 27279 27286 27280 + 27282 27213 27212 + 27212 27287 27282 + 27283 27282 27287 + 27287 27288 27283 + 27289 27283 27288 + 27284 27283 27289 + 27284 27289 27285 + 27285 27289 27290 + 27290 27291 27285 + 27286 27285 27291 + 27287 27212 27217 + 27217 27292 27287 + 27287 27292 27293 + 27293 27288 27287 + 27290 27288 27293 + 27288 27290 27289 + 27292 27217 27221 + 27221 27294 27292 + 27293 27292 27294 + 27295 27293 27294 + 27296 27293 27295 + 27293 27296 27290 + 27290 27296 27297 + 27297 27291 27290 + 27298 27291 27297 + 27291 27298 27286 + 27280 27286 27298 + 27221 27225 27294 + 27294 27225 27299 + 27299 27300 27294 + 27294 27300 27295 + 27301 27295 27300 + 27302 27295 27301 + 27295 27302 27296 + 27297 27296 27302 + 27299 27225 27230 + 27230 27303 27299 + 27304 27299 27303 + 27300 27299 27304 + 27300 27304 27301 + 27301 27304 27305 + 27305 27306 27301 + 27307 27301 27306 + 27301 27307 27302 + 27239 27303 27230 + 27305 27303 27239 + 27303 27305 27304 + 27305 27239 27308 + 27308 27306 27305 + 27309 27306 27308 + 27306 27309 27307 + 27310 27307 27309 + 27302 27307 27310 + 27310 27311 27302 + 27302 27311 27297 + 27312 27297 27311 + 27297 27312 27298 + 27313 27308 27239 + 27309 27308 27313 + 27313 27314 27309 + 27309 27314 27315 + 27315 27316 27309 + 27316 27310 27309 + 27317 27310 27316 + 27311 27310 27317 + 27311 27317 27312 + 27318 27313 27239 + 27319 27313 27318 + 27314 27313 27319 + 27314 27319 27320 + 27320 27315 27314 + 27315 27320 27321 + 27315 27321 27322 + 27322 27316 27315 + 27323 27318 27239 + 27324 27318 27323 + 27318 27324 27325 + 27325 27326 27318 + 27318 27326 27319 + 27319 27326 27327 + 27327 27320 27319 + 27321 27320 27327 + 27238 27323 27239 + 27328 27323 27238 + 27329 27323 27328 + 27323 27329 27324 + 27330 27324 27329 + 27325 27324 27330 + 27330 27331 27325 + 27332 27325 27331 + 27326 27325 27332 + 27332 27327 27326 + 27238 27243 27328 + 27333 27328 27243 + 27334 27328 27333 + 27328 27334 27329 + 27329 27334 27335 + 27335 27336 27329 + 27336 27330 27329 + 27337 27330 27336 + 27331 27330 27337 + 27243 27251 27333 + 27338 27333 27251 + 27333 27338 27339 + 27333 27339 27334 + 27335 27334 27339 + 27340 27335 27339 + 27341 27335 27340 + 27336 27335 27341 + 27336 27341 27337 + 27251 27250 27338 + 27338 27250 27342 + 27342 27343 27338 + 27339 27338 27343 + 27343 27344 27339 + 27339 27344 27340 + 27345 27340 27344 + 27340 27345 27346 + 27340 27346 27341 + 27337 27341 27346 + 27250 27258 27342 + 27263 27342 27258 + 27347 27342 27263 + 27342 27347 27348 + 27348 27343 27342 + 27344 27343 27348 + 27344 27348 27345 + 27345 27348 27347 + 27349 27345 27347 + 27346 27345 27349 + 27349 27350 27346 + 27346 27350 27351 + 27346 27351 27337 + 27263 27271 27347 + 27347 27271 27352 + 27352 27353 27347 + 27347 27353 27349 + 27354 27349 27353 + 27350 27349 27354 + 27350 27354 27355 + 27355 27351 27350 + 27356 27351 27355 + 27351 27356 27337 + 27352 27271 27270 + 27357 27352 27270 + 27358 27352 27357 + 27353 27352 27358 + 27353 27358 27354 + 27355 27354 27358 + 27358 27359 27355 + 27359 27360 27355 + 27361 27355 27360 + 27355 27361 27356 + 27270 27362 27357 + 27363 27357 27362 + 27359 27357 27363 + 27357 27359 27358 + 27364 27362 27270 + 27365 27362 27364 + 27362 27365 27363 + 27366 27363 27365 + 27359 27363 27366 + 27366 27360 27359 + 27367 27360 27366 + 27360 27367 27361 + 27270 27269 27364 + 27368 27364 27269 + 27365 27364 27368 + 27368 27369 27365 + 27365 27369 27366 + 27370 27366 27369 + 27366 27370 27367 + 27367 27370 27371 + 27367 27371 27372 + 27372 27361 27367 + 27373 27368 27269 + 27368 27373 27374 + 27375 27368 27374 + 27375 27369 27368 + 27369 27375 27370 + 27376 27370 27375 + 27370 27376 27371 + 27281 27373 27269 + 27377 27373 27281 + 27377 27374 27373 + 27374 27377 27378 + 27378 27379 27374 + 27375 27374 27379 + 27379 27376 27375 + 27380 27376 27379 + 27371 27376 27380 + 27371 27380 27381 + 27372 27371 27381 + 27281 27382 27377 + 27377 27382 27378 + 27383 27378 27382 + 27379 27378 27383 + 27379 27383 27380 + 27384 27380 27383 + 27384 27385 27380 + 27385 27381 27380 + 27386 27382 27281 + 27382 27386 27383 + 27383 27386 27384 + 27384 27386 27387 + 27388 27384 27387 + 27384 27388 27389 + 27389 27385 27384 + 27386 27281 27387 + 27280 27387 27281 + 27388 27387 27280 + 27298 27388 27280 + 27389 27388 27298 + 27298 27312 27389 + 27390 27389 27312 + 27385 27389 27390 + 27390 27391 27385 + 27381 27385 27391 + 27391 27392 27381 + 27392 27372 27381 + 27393 27390 27312 + 27394 27390 27393 + 27391 27390 27394 + 27394 27395 27391 + 27391 27395 27392 + 27395 27396 27392 + 27372 27392 27396 + 27397 27372 27396 + 27361 27372 27397 + 27317 27393 27312 + 27316 27393 27317 + 27322 27393 27316 + 27393 27322 27394 + 27394 27322 27321 + 27321 27398 27394 + 27398 27399 27394 + 27395 27394 27399 + 27399 27400 27395 + 27396 27395 27400 + 27400 27401 27396 + 27397 27396 27401 + 27327 27398 27321 + 27398 27327 27332 + 27398 27332 27402 + 27402 27399 27398 + 27400 27399 27402 + 27400 27402 27401 + 27402 27403 27401 + 27404 27401 27403 + 27401 27404 27397 + 27397 27404 27405 + 27356 27397 27405 + 27356 27361 27397 + 27403 27402 27332 + 27331 27403 27332 + 27331 27405 27403 + 27405 27404 27403 + 27337 27405 27331 + 27356 27405 27337 + 27406 27407 27408 + 27407 27406 27409 + 27410 27407 27409 + 27407 27410 27411 + 27411 27412 27407 + 27407 27412 27408 + 27408 27413 27406 + 27413 27414 27406 + 27409 27406 27414 + 27413 27408 27415 + 27415 27416 27413 + 27413 27416 27417 + 27417 27414 27413 + 27418 27414 27417 + 27414 27418 27409 + 27419 27415 27408 + 27415 27419 27420 + 27420 27421 27415 + 27416 27415 27421 + 27421 27422 27416 + 27417 27416 27422 + 27412 27419 27408 + 27423 27419 27412 + 27419 27423 27424 + 27424 27420 27419 + 27420 27424 27425 + 27425 27426 27420 + 27420 27426 27427 + 27427 27421 27420 + 27422 27421 27427 + 27412 27411 27423 + 27423 27411 27428 + 27428 27429 27423 + 27423 27429 27430 + 27430 27424 27423 + 27425 27424 27430 + 27428 27411 27410 + 27431 27428 27410 + 27428 27431 27432 + 27432 27429 27428 + 27429 27432 27433 + 27433 27430 27429 + 27430 27433 27434 + 27434 27435 27430 + 27430 27435 27425 + 27410 27436 27431 + 27437 27431 27436 + 27432 27431 27437 + 27437 27438 27432 + 27432 27438 27439 + 27439 27433 27432 + 27434 27433 27439 + 27436 27410 27409 + 27409 27440 27436 + 27440 27441 27436 + 27441 27442 27436 + 27442 27443 27436 + 27437 27436 27443 + 27440 27409 27444 + 27444 27445 27440 + 27445 27446 27440 + 27446 27447 27440 + 27447 27441 27440 + 27418 27444 27409 + 27448 27444 27418 + 27445 27444 27448 + 27448 27449 27445 + 27445 27449 27450 + 27450 27446 27445 + 27447 27446 27450 + 27418 27451 27448 + 27448 27451 27452 + 27452 27453 27448 + 27449 27448 27453 + 27453 27454 27449 + 27450 27449 27454 + 27417 27451 27418 + 27451 27417 27455 + 27455 27452 27451 + 27452 27455 27456 + 27456 27457 27452 + 27452 27457 27458 + 27458 27453 27452 + 27454 27453 27458 + 27422 27455 27417 + 27456 27455 27422 + 27422 27459 27456 + 27456 27459 27460 + 27460 27461 27456 + 27457 27456 27461 + 27461 27462 27457 + 27458 27457 27462 + 27427 27459 27422 + 27459 27427 27463 + 27463 27460 27459 + 27460 27463 27464 + 27464 27465 27460 + 27460 27465 27466 + 27466 27461 27460 + 27462 27461 27466 + 27467 27463 27427 + 27464 27463 27467 + 27467 27468 27464 + 27464 27468 27469 + 27469 27470 27464 + 27465 27464 27470 + 27470 27471 27465 + 27466 27465 27471 + 27427 27426 27467 + 27472 27467 27426 + 27467 27472 27473 + 27473 27468 27467 + 27468 27473 27474 + 27474 27469 27468 + 27426 27425 27472 + 27475 27472 27425 + 27473 27472 27475 + 27475 27476 27473 + 27473 27476 27477 + 27477 27478 27473 + 27478 27474 27473 + 27479 27474 27478 + 27469 27474 27479 + 27425 27435 27475 + 27480 27475 27435 + 27476 27475 27480 + 27480 27481 27476 + 27476 27481 27482 + 27482 27483 27476 + 27476 27483 27477 + 27435 27434 27480 + 27484 27480 27434 + 27481 27480 27484 + 27484 27485 27481 + 27482 27481 27485 + 27485 27486 27482 + 27487 27482 27486 + 27482 27487 27488 + 27488 27483 27482 + 27434 27489 27484 + 27490 27484 27489 + 27485 27484 27490 + 27490 27491 27485 + 27485 27491 27486 + 27491 27492 27486 + 27493 27486 27492 + 27486 27493 27487 + 27439 27489 27434 + 27494 27489 27439 + 27489 27494 27490 + 27490 27494 27495 + 27495 27496 27490 + 27491 27490 27496 + 27496 27497 27491 + 27492 27491 27497 + 27439 27498 27494 + 27494 27498 27499 + 27499 27495 27494 + 27500 27495 27499 + 27495 27500 27501 + 27501 27496 27495 + 27496 27501 27502 + 27497 27496 27502 + 27498 27439 27438 + 27438 27503 27498 + 27499 27498 27503 + 27503 27504 27499 + 27505 27499 27504 + 27499 27505 27500 + 27503 27438 27437 + 27437 27506 27503 + 27503 27506 27507 + 27507 27504 27503 + 27504 27507 27508 + 27509 27504 27508 + 27504 27509 27505 + 27510 27505 27509 + 27500 27505 27510 + 27506 27437 27443 + 27507 27506 27443 + 27507 27443 27442 + 27508 27507 27442 + 27511 27508 27442 + 27509 27508 27511 + 27511 27512 27509 + 27509 27512 27510 + 27513 27510 27512 + 27510 27513 27514 + 27514 27515 27510 + 27510 27515 27500 + 27511 27442 27441 + 27516 27511 27441 + 27511 27516 27517 + 27517 27512 27511 + 27512 27517 27513 + 27518 27513 27517 + 27514 27513 27518 + 27447 27516 27441 + 27517 27516 27447 + 27447 27519 27517 + 27517 27519 27518 + 27520 27518 27519 + 27518 27520 27521 + 27521 27522 27518 + 27518 27522 27514 + 27450 27519 27447 + 27519 27450 27520 + 27454 27520 27450 + 27521 27520 27454 + 27454 27523 27521 + 27521 27523 27524 + 27524 27525 27521 + 27522 27521 27525 + 27525 27526 27522 + 27514 27522 27526 + 27526 27527 27514 + 27515 27514 27527 + 27458 27523 27454 + 27523 27458 27528 + 27528 27524 27523 + 27524 27528 27529 + 27529 27530 27524 + 27524 27530 27531 + 27531 27525 27524 + 27526 27525 27531 + 27462 27528 27458 + 27529 27528 27462 + 27462 27532 27529 + 27529 27532 27533 + 27533 27534 27529 + 27530 27529 27534 + 27534 27535 27530 + 27531 27530 27535 + 27466 27532 27462 + 27532 27466 27536 + 27536 27533 27532 + 27533 27536 27537 + 27537 27538 27533 + 27533 27538 27539 + 27539 27534 27533 + 27535 27534 27539 + 27471 27536 27466 + 27537 27536 27471 + 27471 27540 27537 + 27541 27537 27540 + 27538 27537 27541 + 27541 27542 27538 + 27538 27542 27543 + 27539 27538 27543 + 27544 27540 27471 + 27540 27544 27545 + 27545 27546 27540 + 27540 27546 27541 + 27547 27541 27546 + 27542 27541 27547 + 27542 27547 27548 + 27548 27543 27542 + 27471 27470 27544 + 27544 27470 27469 + 27469 27549 27544 + 27544 27549 27550 + 27550 27545 27544 + 27551 27545 27550 + 27545 27551 27552 + 27552 27546 27545 + 27546 27552 27547 + 27548 27547 27552 + 27479 27549 27469 + 27549 27479 27553 + 27553 27550 27549 + 27554 27550 27553 + 27550 27554 27551 + 27555 27551 27554 + 27552 27551 27555 + 27555 27556 27552 + 27552 27556 27557 + 27557 27548 27552 + 27558 27553 27479 + 27559 27553 27558 + 27553 27559 27554 + 27554 27559 27560 + 27560 27561 27554 + 27554 27561 27555 + 27479 27562 27558 + 27563 27558 27562 + 27564 27558 27563 + 27558 27564 27559 + 27560 27559 27564 + 27478 27562 27479 + 27565 27562 27478 + 27562 27565 27563 + 27566 27563 27565 + 27567 27563 27566 + 27563 27567 27564 + 27564 27567 27568 + 27568 27569 27564 + 27564 27569 27560 + 27478 27570 27565 + 27565 27570 27571 + 27571 27572 27565 + 27565 27572 27566 + 27573 27566 27572 + 27574 27566 27573 + 27566 27574 27567 + 27568 27567 27574 + 27570 27478 27477 + 27477 27575 27570 + 27571 27570 27575 + 27575 27576 27571 + 27577 27571 27576 + 27571 27577 27578 + 27578 27572 27571 + 27572 27578 27573 + 27575 27477 27579 + 27579 27580 27575 + 27575 27580 27581 + 27581 27576 27575 + 27582 27576 27581 + 27576 27582 27577 + 27583 27577 27582 + 27578 27577 27583 + 27579 27477 27483 + 27483 27488 27579 + 27584 27579 27488 + 27580 27579 27584 + 27584 27585 27580 + 27581 27580 27585 + 27585 27586 27581 + 27587 27581 27586 + 27581 27587 27582 + 27488 27588 27584 + 27589 27584 27588 + 27585 27584 27589 + 27589 27590 27585 + 27585 27590 27591 + 27591 27586 27585 + 27592 27586 27591 + 27586 27592 27587 + 27593 27588 27488 + 27588 27593 27594 + 27594 27595 27588 + 27588 27595 27589 + 27589 27595 27596 + 27596 27597 27589 + 27590 27589 27597 + 27488 27487 27593 + 27593 27487 27493 + 27493 27598 27593 + 27594 27593 27598 + 27598 27599 27594 + 27594 27599 27600 + 27600 27601 27594 + 27595 27594 27601 + 27601 27596 27595 + 27602 27598 27493 + 27598 27602 27603 + 27603 27599 27598 + 27599 27603 27604 + 27604 27600 27599 + 27493 27605 27602 + 27606 27602 27605 + 27603 27602 27606 + 27606 27607 27603 + 27603 27607 27608 + 27608 27604 27603 + 27609 27604 27608 + 27600 27604 27609 + 27492 27605 27493 + 27605 27492 27610 + 27610 27611 27605 + 27605 27611 27606 + 27612 27606 27611 + 27606 27612 27613 + 27613 27607 27606 + 27607 27613 27614 + 27614 27608 27607 + 27492 27497 27610 + 27615 27610 27497 + 27611 27610 27615 + 27615 27616 27611 + 27611 27616 27612 + 27617 27612 27616 + 27613 27612 27617 + 27617 27618 27613 + 27613 27618 27619 + 27619 27614 27613 + 27497 27502 27615 + 27615 27502 27620 + 27621 27615 27620 + 27616 27615 27621 + 27621 27622 27616 + 27616 27622 27617 + 27623 27617 27622 + 27617 27623 27624 + 27624 27618 27617 + 27502 27625 27620 + 27626 27620 27625 + 27620 27626 27627 + 27627 27628 27620 + 27620 27628 27629 + 27629 27630 27620 + 27620 27630 27621 + 27631 27625 27502 + 27632 27625 27631 + 27625 27632 27626 + 27633 27626 27632 + 27627 27626 27633 + 27502 27501 27631 + 27631 27501 27500 + 27500 27515 27631 + 27527 27631 27515 + 27631 27527 27632 + 27632 27527 27526 + 27526 27634 27632 + 27632 27634 27633 + 27635 27633 27634 + 27633 27635 27636 + 27636 27637 27633 + 27633 27637 27627 + 27531 27634 27526 + 27634 27531 27635 + 27535 27635 27531 + 27636 27635 27535 + 27535 27638 27636 + 27636 27638 27639 + 27639 27640 27636 + 27640 27641 27636 + 27637 27636 27641 + 27641 27642 27637 + 27627 27637 27642 + 27539 27638 27535 + 27638 27539 27643 + 27643 27639 27638 + 27639 27643 27644 + 27644 27645 27639 + 27639 27645 27646 + 27646 27640 27639 + 27543 27643 27539 + 27644 27643 27543 + 27543 27647 27644 + 27648 27644 27647 + 27645 27644 27648 + 27648 27649 27645 + 27645 27649 27650 + 27650 27651 27645 + 27651 27646 27645 + 27647 27543 27548 + 27647 27548 27557 + 27557 27652 27647 + 27647 27652 27648 + 27652 27653 27648 + 27654 27648 27653 + 27649 27648 27654 + 27654 27655 27649 + 27649 27655 27656 + 27656 27650 27649 + 27657 27652 27557 + 27652 27657 27658 + 27658 27653 27652 + 27658 27659 27653 + 27653 27659 27654 + 27660 27654 27659 + 27654 27660 27661 + 27655 27654 27661 + 27657 27557 27556 + 27556 27662 27657 + 27657 27662 27663 + 27663 27664 27657 + 27664 27658 27657 + 27664 27665 27658 + 27665 27659 27658 + 27659 27665 27660 + 27666 27660 27665 + 27661 27660 27666 + 27662 27556 27555 + 27555 27667 27662 + 27662 27667 27668 + 27668 27663 27662 + 27668 27669 27663 + 27663 27669 27670 + 27670 27664 27663 + 27665 27664 27670 + 27665 27670 27666 + 27667 27555 27561 + 27561 27671 27667 + 27668 27667 27671 + 27671 27672 27668 + 27673 27668 27672 + 27668 27673 27669 + 27671 27561 27560 + 27560 27674 27671 + 27671 27674 27675 + 27675 27672 27671 + 27676 27672 27675 + 27672 27676 27673 + 27677 27673 27676 + 27669 27673 27677 + 27674 27560 27569 + 27569 27678 27674 + 27675 27674 27678 + 27678 27679 27675 + 27680 27675 27679 + 27675 27680 27676 + 27676 27680 27681 + 27681 27682 27676 + 27676 27682 27677 + 27678 27569 27568 + 27568 27683 27678 + 27678 27683 27684 + 27684 27679 27678 + 27685 27679 27684 + 27679 27685 27680 + 27681 27680 27685 + 27683 27568 27686 + 27686 27687 27683 + 27684 27683 27687 + 27687 27688 27684 + 27689 27684 27688 + 27684 27689 27685 + 27574 27686 27568 + 27690 27686 27574 + 27687 27686 27690 + 27690 27691 27687 + 27687 27691 27692 + 27692 27688 27687 + 27692 27693 27688 + 27693 27694 27688 + 27688 27694 27689 + 27574 27695 27690 + 27690 27695 27696 + 27696 27697 27690 + 27697 27698 27690 + 27691 27690 27698 + 27698 27699 27691 + 27699 27692 27691 + 27573 27695 27574 + 27695 27573 27700 + 27700 27696 27695 + 27696 27700 27701 + 27696 27701 27702 + 27702 27697 27696 + 27703 27697 27702 + 27698 27697 27703 + 27704 27698 27703 + 27699 27698 27704 + 27700 27573 27578 + 27578 27705 27700 + 27701 27700 27705 + 27705 27706 27701 + 27702 27701 27706 + 27707 27702 27706 + 27703 27702 27707 + 27707 27708 27703 + 27704 27703 27708 + 27583 27705 27578 + 27706 27705 27583 + 27583 27709 27706 + 27706 27709 27710 + 27710 27711 27706 + 27706 27711 27712 + 27712 27707 27706 + 27713 27707 27712 + 27708 27707 27713 + 27709 27583 27714 + 27714 27715 27709 + 27710 27709 27715 + 27715 27716 27710 + 27717 27710 27716 + 27710 27717 27718 + 27718 27711 27710 + 27582 27714 27583 + 27719 27714 27582 + 27715 27714 27719 + 27719 27720 27715 + 27715 27720 27721 + 27721 27716 27715 + 27722 27716 27721 + 27716 27722 27717 + 27723 27717 27722 + 27718 27717 27723 + 27582 27587 27719 + 27719 27587 27592 + 27592 27724 27719 + 27720 27719 27724 + 27724 27725 27720 + 27721 27720 27725 + 27725 27726 27721 + 27727 27721 27726 + 27721 27727 27722 + 27728 27724 27592 + 27725 27724 27728 + 27728 27729 27725 + 27725 27729 27730 + 27730 27726 27725 + 27731 27726 27730 + 27726 27731 27727 + 27732 27727 27731 + 27722 27727 27732 + 27592 27733 27728 + 27728 27733 27734 + 27734 27735 27728 + 27729 27728 27735 + 27735 27736 27729 + 27730 27729 27736 + 27591 27733 27592 + 27733 27591 27737 + 27737 27734 27733 + 27734 27737 27738 + 27738 27739 27734 + 27734 27739 27740 + 27740 27735 27734 + 27736 27735 27740 + 27741 27737 27591 + 27738 27737 27741 + 27741 27742 27738 + 27738 27742 27743 + 27738 27743 27744 + 27739 27738 27744 + 27740 27739 27744 + 27591 27590 27741 + 27597 27741 27590 + 27741 27597 27745 + 27745 27742 27741 + 27742 27745 27743 + 27745 27746 27743 + 27743 27746 27747 + 27744 27743 27747 + 27748 27744 27747 + 27740 27744 27748 + 27749 27740 27748 + 27740 27749 27736 + 27745 27597 27596 + 27596 27750 27745 + 27745 27750 27746 + 27750 27751 27746 + 27751 27752 27746 + 27746 27752 27747 + 27751 27750 27596 + 27596 27601 27751 + 27751 27601 27600 + 27600 27753 27751 + 27751 27753 27752 + 27747 27752 27753 + 27753 27609 27747 + 27609 27754 27747 + 27755 27747 27754 + 27747 27755 27748 + 27609 27753 27600 + 27608 27754 27609 + 27756 27754 27608 + 27754 27756 27755 + 27756 27757 27755 + 27758 27755 27757 + 27755 27758 27748 + 27608 27614 27756 + 27756 27614 27757 + 27614 27619 27757 + 27759 27757 27619 + 27757 27759 27758 + 27758 27759 27760 + 27761 27758 27760 + 27758 27761 27748 + 27748 27761 27762 + 27762 27763 27748 + 27763 27749 27748 + 27736 27749 27763 + 27619 27764 27759 + 27759 27764 27765 + 27765 27760 27759 + 27766 27760 27765 + 27760 27766 27761 + 27766 27762 27761 + 27767 27762 27766 + 27763 27762 27767 + 27767 27768 27763 + 27763 27768 27736 + 27736 27768 27730 + 27764 27619 27618 + 27618 27624 27764 + 27765 27764 27624 + 27624 27769 27765 + 27770 27765 27769 + 27765 27770 27766 + 27766 27770 27767 + 27767 27770 27771 + 27771 27772 27767 + 27768 27767 27772 + 27772 27730 27768 + 27730 27772 27731 + 27773 27769 27624 + 27771 27769 27773 + 27769 27771 27770 + 27624 27623 27773 + 27773 27623 27774 + 27774 27775 27773 + 27776 27773 27775 + 27773 27776 27771 + 27771 27776 27731 + 27731 27772 27771 + 27622 27774 27623 + 27774 27622 27621 + 27621 27777 27774 + 27774 27777 27778 + 27778 27775 27774 + 27732 27775 27778 + 27775 27732 27776 + 27731 27776 27732 + 27777 27621 27630 + 27630 27779 27777 + 27778 27777 27779 + 27779 27780 27778 + 27781 27778 27780 + 27778 27781 27732 + 27732 27781 27722 + 27722 27781 27723 + 27779 27630 27629 + 27629 27782 27779 + 27779 27782 27783 + 27783 27780 27779 + 27723 27780 27783 + 27780 27723 27781 + 27782 27629 27784 + 27784 27785 27782 + 27783 27782 27785 + 27785 27786 27783 + 27787 27783 27786 + 27783 27787 27723 + 27723 27787 27718 + 27788 27784 27629 + 27789 27784 27788 + 27784 27789 27790 + 27790 27785 27784 + 27785 27790 27791 + 27791 27786 27785 + 27792 27786 27791 + 27786 27792 27787 + 27629 27628 27788 + 27793 27788 27628 + 27788 27793 27794 + 27794 27795 27788 + 27788 27795 27789 + 27796 27789 27795 + 27790 27789 27796 + 27628 27627 27793 + 27642 27793 27627 + 27794 27793 27642 + 27642 27797 27794 + 27798 27794 27797 + 27795 27794 27798 + 27798 27799 27795 + 27795 27799 27800 + 27800 27796 27795 + 27797 27642 27641 + 27797 27641 27640 + 27640 27801 27797 + 27797 27801 27802 + 27802 27798 27797 + 27803 27798 27802 + 27799 27798 27803 + 27803 27804 27799 + 27799 27804 27805 + 27805 27800 27799 + 27646 27801 27640 + 27801 27646 27651 + 27651 27802 27801 + 27806 27802 27651 + 27802 27806 27803 + 27807 27803 27806 + 27804 27803 27807 + 27806 27651 27650 + 27650 27808 27806 + 27806 27808 27807 + 27809 27807 27808 + 27810 27807 27809 + 27807 27810 27804 + 27811 27808 27650 + 27808 27811 27809 + 27811 27812 27809 + 27812 27813 27809 + 27810 27809 27813 + 27813 27814 27810 + 27804 27810 27814 + 27650 27656 27811 + 27811 27656 27815 + 27815 27812 27811 + 27816 27812 27815 + 27812 27816 27817 + 27817 27813 27812 + 27813 27817 27818 + 27818 27814 27813 + 27819 27815 27656 + 27816 27815 27819 + 27819 27820 27816 + 27816 27820 27821 + 27816 27821 27817 + 27818 27817 27821 + 27821 27822 27818 + 27818 27822 27823 + 27814 27818 27823 + 27824 27819 27656 + 27825 27819 27824 + 27819 27825 27820 + 27820 27825 27826 + 27826 27821 27820 + 27822 27821 27826 + 27826 27827 27822 + 27822 27827 27828 + 27822 27828 27823 + 27824 27656 27655 + 27655 27661 27824 + 27829 27824 27661 + 27824 27829 27830 + 27824 27830 27825 + 27825 27830 27831 + 27831 27826 27825 + 27827 27826 27831 + 27661 27666 27829 + 27829 27666 27669 + 27669 27832 27829 + 27830 27829 27832 + 27832 27831 27830 + 27831 27832 27677 + 27677 27833 27831 + 27831 27833 27827 + 27666 27670 27669 + 27677 27832 27669 + 27833 27677 27682 + 27682 27834 27833 + 27827 27833 27834 + 27835 27827 27834 + 27827 27835 27828 + 27836 27828 27835 + 27828 27836 27837 + 27837 27823 27828 + 27823 27837 27838 + 27823 27838 27814 + 27834 27682 27681 + 27681 27839 27834 + 27840 27834 27839 + 27834 27840 27835 + 27836 27835 27840 + 27840 27841 27836 + 27837 27836 27841 + 27837 27841 27842 + 27838 27837 27842 + 27839 27681 27843 + 27843 27844 27839 + 27845 27839 27844 + 27845 27840 27839 + 27841 27840 27845 + 27845 27846 27841 + 27841 27846 27847 + 27847 27842 27841 + 27685 27843 27681 + 27848 27843 27685 + 27848 27849 27843 + 27849 27844 27843 + 27850 27844 27849 + 27844 27850 27845 + 27846 27845 27850 + 27850 27851 27846 + 27846 27851 27852 + 27847 27846 27852 + 27685 27689 27848 + 27848 27689 27694 + 27694 27853 27848 + 27849 27848 27853 + 27853 27854 27849 + 27855 27849 27854 + 27855 27850 27849 + 27850 27855 27851 + 27851 27855 27856 + 27856 27857 27851 + 27851 27857 27852 + 27853 27694 27693 + 27858 27853 27693 + 27854 27853 27858 + 27858 27859 27854 + 27854 27859 27860 + 27860 27856 27854 + 27854 27856 27855 + 27858 27693 27861 + 27861 27862 27858 + 27859 27858 27862 + 27862 27863 27859 + 27860 27859 27863 + 27864 27860 27863 + 27857 27860 27864 + 27860 27857 27856 + 27861 27693 27692 + 27865 27861 27692 + 27866 27861 27865 + 27862 27861 27866 + 27867 27862 27866 + 27863 27862 27867 + 27699 27865 27692 + 27868 27865 27699 + 27868 27866 27865 + 27866 27868 27869 + 27869 27870 27866 + 27870 27867 27866 + 27863 27867 27870 + 27699 27704 27868 + 27869 27868 27704 + 27708 27869 27704 + 27871 27869 27708 + 27871 27870 27869 + 27870 27871 27863 + 27863 27871 27872 + 27872 27873 27863 + 27873 27864 27863 + 27874 27864 27873 + 27864 27874 27852 + 27864 27852 27857 + 27708 27713 27871 + 27871 27713 27872 + 27713 27875 27872 + 27876 27872 27875 + 27876 27877 27872 + 27872 27877 27878 + 27878 27873 27872 + 27873 27878 27879 + 27873 27879 27874 + 27712 27875 27713 + 27712 27880 27875 + 27875 27880 27876 + 27792 27876 27880 + 27877 27876 27792 + 27792 27881 27877 + 27877 27881 27882 + 27882 27883 27877 + 27883 27878 27877 + 27879 27878 27883 + 27880 27712 27711 + 27711 27718 27880 + 27880 27718 27787 + 27787 27792 27880 + 27791 27881 27792 + 27881 27791 27884 + 27884 27882 27881 + 27882 27884 27885 + 27882 27885 27886 + 27886 27883 27882 + 27883 27886 27887 + 27883 27887 27879 + 27879 27887 27888 + 27874 27879 27888 + 27884 27791 27790 + 27790 27889 27884 + 27885 27884 27889 + 27889 27890 27885 + 27886 27885 27890 + 27890 27891 27886 + 27891 27892 27886 + 27887 27886 27892 + 27892 27888 27887 + 27796 27889 27790 + 27890 27889 27796 + 27890 27796 27800 + 27800 27891 27890 + 27805 27891 27800 + 27891 27805 27893 + 27893 27892 27891 + 27888 27892 27893 + 27888 27893 27894 + 27894 27895 27888 + 27888 27895 27874 + 27852 27874 27895 + 27895 27847 27852 + 27893 27805 27804 + 27894 27893 27804 + 27838 27894 27804 + 27842 27894 27838 + 27894 27842 27847 + 27847 27895 27894 + 27814 27838 27804 + 27896 27897 27898 + 27896 27899 27897 + 27900 27897 27899 + 27897 27900 27901 + 27898 27897 27901 + 27902 27896 27898 + 27896 27902 27903 + 27903 27904 27896 + 27904 27905 27896 + 27905 27906 27896 + 27896 27906 27899 + 27898 27907 27902 + 27902 27907 27908 + 27909 27902 27908 + 27902 27909 27903 + 27910 27907 27898 + 27907 27910 27911 + 27908 27907 27911 + 27908 27911 27912 + 27912 27913 27908 + 27909 27908 27913 + 27898 27901 27910 + 27910 27901 27914 + 27914 27915 27910 + 27911 27910 27915 + 27915 27916 27911 + 27912 27911 27916 + 27917 27914 27901 + 27914 27917 27918 + 27918 27919 27914 + 27914 27919 27920 + 27920 27915 27914 + 27916 27915 27920 + 27901 27900 27917 + 27921 27917 27900 + 27918 27917 27921 + 27921 27922 27918 + 27918 27922 27923 + 27923 27924 27918 + 27919 27918 27924 + 27924 27925 27919 + 27920 27919 27925 + 27900 27926 27921 + 27927 27921 27926 + 27921 27927 27928 + 27928 27922 27921 + 27922 27928 27929 + 27929 27923 27922 + 27899 27926 27900 + 27899 27930 27926 + 27930 27931 27926 + 27926 27931 27927 + 27932 27927 27931 + 27928 27927 27932 + 27932 27933 27928 + 27928 27933 27934 + 27934 27929 27928 + 27906 27930 27899 + 27906 27935 27930 + 27931 27930 27935 + 27935 27936 27931 + 27931 27936 27932 + 27937 27932 27936 + 27932 27937 27938 + 27938 27933 27932 + 27933 27938 27939 + 27939 27934 27933 + 27906 27905 27935 + 27905 27940 27935 + 27935 27940 27941 + 27941 27936 27935 + 27936 27941 27937 + 27942 27937 27941 + 27938 27937 27942 + 27942 27943 27938 + 27938 27943 27944 + 27944 27939 27938 + 27905 27945 27940 + 27941 27940 27945 + 27945 27946 27941 + 27941 27946 27942 + 27947 27942 27946 + 27942 27947 27948 + 27948 27943 27942 + 27943 27948 27949 + 27949 27944 27943 + 27950 27945 27905 + 27945 27950 27951 + 27951 27946 27945 + 27946 27951 27947 + 27952 27947 27951 + 27948 27947 27952 + 27952 27953 27948 + 27948 27953 27954 + 27954 27949 27948 + 27905 27904 27950 + 27904 27955 27950 + 27951 27950 27955 + 27955 27956 27951 + 27951 27956 27952 + 27957 27952 27956 + 27952 27957 27958 + 27958 27953 27952 + 27953 27958 27959 + 27959 27954 27953 + 27960 27955 27904 + 27955 27960 27961 + 27961 27956 27955 + 27956 27961 27957 + 27962 27957 27961 + 27958 27957 27962 + 27962 27963 27958 + 27958 27963 27964 + 27964 27959 27958 + 27904 27903 27960 + 27903 27965 27960 + 27965 27966 27960 + 27966 27961 27960 + 27961 27966 27962 + 27967 27962 27966 + 27962 27967 27968 + 27968 27963 27962 + 27963 27968 27969 + 27969 27964 27963 + 27970 27965 27903 + 27965 27970 27971 + 27971 27966 27965 + 27966 27971 27967 + 27972 27967 27971 + 27968 27967 27972 + 27972 27973 27968 + 27969 27968 27973 + 27903 27974 27970 + 27974 27975 27970 + 27971 27970 27975 + 27975 27976 27971 + 27971 27976 27972 + 27977 27972 27976 + 27972 27977 27978 + 27978 27973 27972 + 27979 27974 27903 + 27974 27979 27980 + 27980 27975 27974 + 27975 27980 27981 + 27981 27976 27975 + 27976 27981 27977 + 27982 27977 27981 + 27978 27977 27982 + 27909 27979 27903 + 27979 27909 27983 + 27979 27983 27980 + 27981 27980 27983 + 27983 27984 27981 + 27981 27984 27982 + 27985 27982 27984 + 27982 27985 27986 + 27986 27987 27982 + 27982 27987 27978 + 27909 27913 27983 + 27983 27913 27912 + 27983 27912 27984 + 27984 27912 27985 + 27916 27985 27912 + 27986 27985 27916 + 27916 27988 27986 + 27986 27988 27989 + 27989 27990 27986 + 27987 27986 27990 + 27990 27991 27987 + 27978 27987 27991 + 27991 27992 27978 + 27973 27978 27992 + 27920 27988 27916 + 27988 27920 27993 + 27993 27989 27988 + 27989 27993 27994 + 27994 27995 27989 + 27989 27995 27996 + 27996 27990 27989 + 27990 27996 27997 + 27997 27991 27990 + 27925 27993 27920 + 27994 27993 27925 + 27925 27998 27994 + 27994 27998 27999 + 27999 28000 27994 + 27995 27994 28000 + 28000 28001 27995 + 27996 27995 28001 + 28002 27996 28001 + 27997 27996 28002 + 28003 27998 27925 + 27998 28003 28004 + 28004 27999 27998 + 27999 28004 28005 + 28005 28006 27999 + 27999 28006 28007 + 28007 28000 27999 + 28001 28000 28007 + 27925 27924 28003 + 28003 27924 27923 + 27923 28008 28003 + 28003 28008 28009 + 28009 28004 28003 + 28005 28004 28009 + 28009 28010 28005 + 28011 28005 28010 + 28006 28005 28011 + 28011 28012 28006 + 28007 28006 28012 + 28013 28008 27923 + 28008 28013 28014 + 28014 28009 28008 + 28009 28014 28015 + 28015 28010 28009 + 28010 28015 28016 + 28016 28017 28010 + 28010 28017 28011 + 27923 27929 28013 + 28013 27929 27934 + 27934 28018 28013 + 28013 28018 28019 + 28019 28014 28013 + 28015 28014 28019 + 28019 28020 28015 + 28016 28015 28020 + 28021 28018 27934 + 28018 28021 28022 + 28022 28019 28018 + 28019 28022 28023 + 28023 28020 28019 + 28020 28023 28024 + 28024 28025 28020 + 28020 28025 28016 + 27934 27939 28021 + 28021 27939 27944 + 27944 28026 28021 + 28021 28026 28027 + 28027 28022 28021 + 28023 28022 28027 + 28027 28028 28023 + 28023 28028 28029 + 28024 28023 28029 + 28030 28026 27944 + 28026 28030 28031 + 28031 28027 28026 + 28027 28031 28032 + 28032 28028 28027 + 28028 28032 28033 + 28033 28029 28028 + 27944 27949 28030 + 28030 27949 27954 + 27954 28034 28030 + 28030 28034 28035 + 28035 28031 28030 + 28032 28031 28035 + 28035 28036 28032 + 28032 28036 28037 + 28037 28033 28032 + 28038 28033 28037 + 28029 28033 28038 + 28039 28034 27954 + 28034 28039 28040 + 28040 28035 28034 + 28035 28040 28041 + 28041 28036 28035 + 28036 28041 28042 + 28042 28037 28036 + 27954 27959 28039 + 28039 27959 27964 + 27964 28043 28039 + 28039 28043 28044 + 28044 28045 28039 + 28045 28040 28039 + 28041 28040 28045 + 28045 28046 28041 + 28041 28046 28047 + 28047 28042 28041 + 28043 27964 27969 + 27969 28048 28043 + 28043 28048 28049 + 28049 28050 28043 + 28043 28050 28044 + 28048 27969 28051 + 28051 28052 28048 + 28049 28048 28052 + 28052 28053 28049 + 28054 28049 28053 + 28049 28054 28055 + 28055 28050 28049 + 27973 28051 27969 + 27992 28051 27973 + 28052 28051 27992 + 27992 28056 28052 + 28052 28056 28057 + 28057 28053 28052 + 28058 28053 28057 + 28053 28058 28054 + 28054 28058 28059 + 28059 28060 28054 + 28055 28054 28060 + 28056 27992 27991 + 27991 27997 28056 + 27997 28061 28056 + 28061 28057 28056 + 28062 28057 28061 + 28057 28062 28058 + 28058 28062 28063 + 28063 28059 28058 + 28002 28061 27997 + 28064 28061 28002 + 28061 28064 28062 + 28063 28062 28064 + 28064 28065 28063 + 28066 28063 28065 + 28059 28063 28066 + 28066 28067 28059 + 28059 28067 28068 + 28068 28060 28059 + 28002 28069 28064 + 28064 28069 28070 + 28070 28065 28064 + 28065 28070 28071 + 28071 28072 28065 + 28065 28072 28066 + 28069 28002 28073 + 28073 28074 28069 + 28070 28069 28074 + 28074 28075 28070 + 28071 28070 28075 + 28073 28002 28001 + 28001 28076 28073 + 28077 28073 28076 + 28073 28077 28078 + 28078 28074 28073 + 28074 28078 28079 + 28079 28075 28074 + 28080 28076 28001 + 28081 28076 28080 + 28076 28081 28077 + 28082 28077 28081 + 28078 28077 28082 + 28082 28083 28078 + 28078 28083 28084 + 28084 28079 28078 + 28001 28085 28080 + 28080 28085 28086 + 28086 28087 28080 + 28088 28080 28087 + 28080 28088 28081 + 28007 28085 28001 + 28085 28007 28089 + 28089 28086 28085 + 28090 28086 28089 + 28086 28090 28091 + 28091 28087 28086 + 28087 28091 28092 + 28092 28093 28087 + 28087 28093 28088 + 28012 28089 28007 + 28094 28089 28012 + 28089 28094 28090 + 28090 28094 28095 + 28095 28096 28090 + 28090 28096 28097 + 28097 28091 28090 + 28092 28091 28097 + 28012 28098 28094 + 28095 28094 28098 + 28098 28099 28095 + 28100 28095 28099 + 28095 28100 28101 + 28101 28096 28095 + 28096 28101 28102 + 28102 28097 28096 + 28098 28012 28011 + 28011 28103 28098 + 28098 28103 28104 + 28104 28099 28098 + 28105 28099 28104 + 28099 28105 28100 + 28106 28100 28105 + 28101 28100 28106 + 28103 28011 28017 + 28017 28107 28103 + 28104 28103 28107 + 28108 28104 28107 + 28109 28104 28108 + 28104 28109 28105 + 28105 28109 28110 + 28110 28111 28105 + 28105 28111 28106 + 28107 28017 28016 + 28107 28016 28112 + 28112 28113 28107 + 28107 28113 28108 + 28114 28108 28113 + 28108 28114 28115 + 28108 28115 28109 + 28116 28109 28115 + 28116 28110 28109 + 28025 28112 28016 + 28117 28112 28025 + 28113 28112 28117 + 28113 28117 28114 + 28118 28114 28117 + 28115 28114 28118 + 28118 28119 28115 + 28115 28119 28116 + 28120 28116 28119 + 28121 28116 28120 + 28116 28121 28110 + 28025 28122 28117 + 28117 28122 28118 + 28122 28123 28118 + 28124 28118 28123 + 28118 28124 28119 + 28119 28124 28120 + 28125 28120 28124 + 28120 28125 28126 + 28121 28120 28126 + 28127 28122 28025 + 28122 28127 28128 + 28128 28123 28122 + 28123 28128 28129 + 28129 28130 28123 + 28123 28130 28124 + 28130 28125 28124 + 28131 28125 28130 + 28126 28125 28131 + 28025 28024 28127 + 28127 28024 28132 + 28132 28133 28127 + 28128 28127 28133 + 28134 28128 28133 + 28134 28135 28128 + 28135 28129 28128 + 28131 28129 28135 + 28130 28129 28131 + 28029 28132 28024 + 28136 28132 28029 + 28132 28136 28133 + 28133 28136 28137 + 28137 28138 28133 + 28133 28138 28134 + 28139 28134 28138 + 28135 28134 28139 + 28029 28038 28136 + 28136 28038 28140 + 28137 28136 28140 + 28140 28141 28137 + 28142 28137 28141 + 28138 28137 28142 + 28138 28142 28139 + 28037 28140 28038 + 28143 28140 28037 + 28140 28143 28144 + 28144 28141 28140 + 28141 28144 28145 + 28145 28146 28141 + 28141 28146 28142 + 28139 28142 28146 + 28037 28042 28143 + 28143 28042 28047 + 28047 28147 28143 + 28144 28143 28147 + 28147 28148 28144 + 28148 28149 28144 + 28145 28144 28149 + 28149 28150 28145 + 28151 28145 28150 + 28146 28145 28151 + 28147 28047 28152 + 28152 28153 28147 + 28147 28153 28154 + 28154 28148 28147 + 28148 28154 28155 + 28148 28155 28156 + 28156 28149 28148 + 28149 28156 28150 + 28152 28047 28046 + 28046 28157 28152 + 28158 28152 28157 + 28153 28152 28158 + 28158 28159 28153 + 28154 28153 28159 + 28159 28160 28154 + 28155 28154 28160 + 28160 28161 28155 + 28156 28155 28161 + 28157 28046 28045 + 28045 28162 28157 + 28157 28162 28163 + 28163 28164 28157 + 28157 28164 28158 + 28165 28158 28164 + 28158 28165 28166 + 28166 28159 28158 + 28162 28045 28044 + 28044 28167 28162 + 28163 28162 28167 + 28167 28168 28163 + 28169 28163 28168 + 28163 28169 28170 + 28170 28164 28163 + 28164 28170 28165 + 28171 28165 28170 + 28166 28165 28171 + 28167 28044 28172 + 28172 28173 28167 + 28167 28173 28174 + 28174 28168 28167 + 28175 28168 28174 + 28168 28175 28169 + 28176 28169 28175 + 28170 28169 28176 + 28172 28044 28050 + 28050 28055 28172 + 28172 28055 28177 + 28177 28178 28172 + 28173 28172 28178 + 28178 28179 28173 + 28174 28173 28179 + 28179 28180 28174 + 28181 28174 28180 + 28174 28181 28175 + 28060 28177 28055 + 28177 28060 28068 + 28068 28182 28177 + 28177 28182 28183 + 28183 28178 28177 + 28179 28178 28183 + 28183 28184 28179 + 28179 28184 28185 + 28185 28180 28179 + 28186 28180 28185 + 28180 28186 28181 + 28182 28068 28187 + 28187 28188 28182 + 28183 28182 28188 + 28188 28189 28183 + 28183 28189 28190 + 28184 28183 28190 + 28185 28184 28190 + 28191 28187 28068 + 28192 28187 28191 + 28192 28193 28187 + 28193 28188 28187 + 28188 28193 28194 + 28194 28189 28188 + 28194 28195 28189 + 28195 28190 28189 + 28068 28067 28191 + 28196 28191 28067 + 28191 28196 28197 + 28197 28198 28191 + 28191 28198 28192 + 28199 28192 28198 + 28199 28200 28192 + 28200 28193 28192 + 28200 28194 28193 + 28067 28066 28196 + 28201 28196 28066 + 28197 28196 28201 + 28201 28202 28197 + 28203 28197 28202 + 28203 28199 28197 + 28199 28198 28197 + 28066 28072 28201 + 28204 28201 28072 + 28201 28204 28205 + 28205 28202 28201 + 28202 28205 28206 + 28206 28203 28202 + 28199 28203 28206 + 28200 28199 28206 + 28207 28200 28206 + 28200 28207 28194 + 28207 28195 28194 + 28208 28195 28207 + 28190 28195 28208 + 28072 28071 28204 + 28209 28204 28071 + 28205 28204 28209 + 28209 28210 28205 + 28206 28205 28210 + 28211 28206 28210 + 28206 28211 28212 + 28212 28207 28206 + 28207 28212 28208 + 28071 28213 28209 + 28214 28209 28213 + 28209 28214 28215 + 28215 28210 28209 + 28210 28215 28211 + 28211 28215 28216 + 28217 28211 28216 + 28211 28217 28212 + 28075 28213 28071 + 28218 28213 28075 + 28213 28218 28214 + 28219 28214 28218 + 28215 28214 28219 + 28219 28216 28215 + 28220 28216 28219 + 28216 28220 28217 + 28217 28220 28221 + 28222 28217 28221 + 28217 28222 28212 + 28075 28079 28218 + 28218 28079 28084 + 28084 28223 28218 + 28218 28223 28219 + 28224 28219 28223 + 28219 28224 28220 + 28220 28224 28225 + 28225 28221 28220 + 28226 28221 28225 + 28221 28226 28222 + 28227 28223 28084 + 28223 28227 28224 + 28225 28224 28227 + 28227 28228 28225 + 28229 28225 28228 + 28225 28229 28226 + 28226 28229 28230 + 28230 28231 28226 + 28222 28226 28231 + 28084 28232 28227 + 28227 28232 28233 + 28233 28228 28227 + 28234 28228 28233 + 28228 28234 28229 + 28230 28229 28234 + 28232 28084 28083 + 28083 28235 28232 + 28233 28232 28235 + 28235 28236 28233 + 28237 28233 28236 + 28233 28237 28234 + 28234 28237 28238 + 28238 28239 28234 + 28234 28239 28230 + 28235 28083 28082 + 28082 28240 28235 + 28235 28240 28241 + 28241 28236 28235 + 28242 28236 28241 + 28236 28242 28237 + 28238 28237 28242 + 28240 28082 28243 + 28243 28244 28240 + 28241 28240 28244 + 28244 28245 28241 + 28246 28241 28245 + 28241 28246 28242 + 28081 28243 28082 + 28247 28243 28081 + 28244 28243 28247 + 28247 28248 28244 + 28244 28248 28249 + 28249 28245 28244 + 28250 28245 28249 + 28245 28250 28246 + 28251 28246 28250 + 28242 28246 28251 + 28081 28088 28247 + 28247 28088 28093 + 28093 28252 28247 + 28248 28247 28252 + 28252 28253 28248 + 28249 28248 28253 + 28253 28254 28249 + 28255 28249 28254 + 28249 28255 28250 + 28256 28252 28093 + 28252 28256 28257 + 28257 28253 28252 + 28253 28257 28258 + 28258 28254 28253 + 28259 28254 28258 + 28254 28259 28255 + 28260 28255 28259 + 28250 28255 28260 + 28093 28092 28256 + 28261 28256 28092 + 28257 28256 28261 + 28261 28262 28257 + 28257 28262 28263 + 28263 28264 28257 + 28264 28258 28257 + 28258 28264 28265 + 28259 28258 28265 + 28092 28266 28261 + 28267 28261 28266 + 28261 28267 28268 + 28268 28262 28261 + 28262 28268 28269 + 28269 28263 28262 + 28097 28266 28092 + 28270 28266 28097 + 28266 28270 28267 + 28271 28267 28270 + 28268 28267 28271 + 28271 28272 28268 + 28268 28272 28273 + 28273 28269 28268 + 28097 28102 28270 + 28270 28102 28274 + 28274 28275 28270 + 28270 28275 28271 + 28276 28271 28275 + 28271 28276 28277 + 28277 28272 28271 + 28272 28277 28278 + 28278 28273 28272 + 28274 28102 28101 + 28101 28279 28274 + 28279 28280 28274 + 28280 28281 28274 + 28274 28281 28275 + 28281 28282 28275 + 28275 28282 28276 + 28106 28279 28101 + 28106 28283 28279 + 28283 28280 28279 + 28280 28283 28284 + 28284 28285 28280 + 28280 28285 28281 + 28285 28286 28281 + 28282 28281 28286 + 28286 28287 28282 + 28282 28287 28276 + 28288 28283 28106 + 28284 28283 28288 + 28288 28289 28284 + 28290 28284 28289 + 28284 28290 28291 + 28291 28285 28284 + 28285 28291 28292 + 28292 28286 28285 + 28286 28292 28287 + 28111 28288 28106 + 28293 28288 28111 + 28288 28293 28294 + 28294 28289 28288 + 28295 28289 28294 + 28289 28295 28290 + 28110 28293 28111 + 28121 28293 28110 + 28294 28293 28121 + 28121 28126 28294 + 28126 28296 28294 + 28297 28294 28296 + 28294 28297 28295 + 28295 28297 28298 + 28298 28299 28295 + 28295 28299 28290 + 28300 28296 28126 + 28301 28296 28300 + 28296 28301 28297 + 28301 28302 28297 + 28302 28298 28297 + 28298 28302 28303 + 28304 28298 28303 + 28304 28299 28298 + 28126 28131 28300 + 28305 28300 28131 + 28301 28300 28305 + 28305 28302 28301 + 28303 28302 28305 + 28306 28303 28305 + 28303 28306 28307 + 28307 28304 28303 + 28308 28304 28307 + 28304 28308 28299 + 28309 28305 28131 + 28309 28306 28305 + 28309 28310 28306 + 28306 28310 28311 + 28311 28307 28306 + 28307 28311 28312 + 28312 28313 28307 + 28307 28313 28308 + 28135 28309 28131 + 28310 28309 28135 + 28135 28314 28310 + 28310 28314 28315 + 28315 28311 28310 + 28312 28311 28315 + 28315 28151 28312 + 28312 28151 28150 + 28316 28312 28150 + 28313 28312 28316 + 28139 28314 28135 + 28314 28139 28317 + 28317 28315 28314 + 28315 28317 28151 + 28151 28317 28146 + 28146 28317 28139 + 28316 28318 28313 + 28316 28319 28318 + 28318 28319 28320 + 28318 28320 28308 + 28308 28313 28318 + 28319 28316 28321 + 28321 28322 28319 + 28323 28319 28322 + 28319 28323 28320 + 28324 28320 28323 + 28320 28324 28299 + 28299 28308 28320 + 28321 28316 28150 + 28150 28325 28321 + 28326 28321 28325 + 28322 28321 28326 + 28326 28327 28322 + 28322 28327 28328 + 28322 28328 28323 + 28323 28328 28329 + 28324 28323 28329 + 28330 28325 28150 + 28325 28330 28331 + 28325 28331 28326 + 28326 28331 28332 + 28333 28326 28332 + 28327 28326 28333 + 28150 28156 28330 + 28334 28330 28156 + 28334 28332 28330 + 28332 28331 28330 + 28161 28334 28156 + 28335 28334 28161 + 28332 28334 28335 + 28332 28335 28336 + 28336 28337 28332 + 28332 28337 28333 + 28338 28333 28337 + 28339 28333 28338 + 28333 28339 28327 + 28161 28340 28335 + 28335 28340 28166 + 28336 28335 28166 + 28166 28341 28336 + 28342 28336 28341 + 28337 28336 28342 + 28337 28342 28338 + 28161 28160 28340 + 28340 28160 28159 + 28159 28166 28340 + 28171 28341 28166 + 28343 28341 28171 + 28341 28343 28342 + 28342 28343 28344 + 28338 28342 28344 + 28345 28338 28344 + 28339 28338 28345 + 28345 28346 28339 + 28339 28346 28347 + 28339 28347 28327 + 28343 28171 28348 + 28348 28344 28343 + 28344 28348 28349 + 28344 28349 28350 + 28350 28351 28344 + 28344 28351 28352 + 28352 28345 28344 + 28353 28348 28171 + 28349 28348 28353 + 28353 28260 28349 + 28349 28260 28259 + 28259 28265 28349 + 28265 28350 28349 + 28354 28350 28265 + 28351 28350 28354 + 28170 28353 28171 + 28176 28353 28170 + 28260 28353 28176 + 28176 28355 28260 + 28260 28355 28250 + 28250 28355 28251 + 28355 28176 28356 + 28356 28251 28355 + 28251 28356 28357 + 28357 28358 28251 + 28251 28358 28242 + 28242 28358 28238 + 28175 28356 28176 + 28357 28356 28175 + 28175 28181 28357 + 28357 28181 28186 + 28186 28359 28357 + 28358 28357 28359 + 28359 28238 28358 + 28238 28359 28360 + 28360 28239 28238 + 28239 28360 28361 + 28361 28230 28239 + 28360 28359 28186 + 28186 28362 28360 + 28360 28362 28363 + 28363 28361 28360 + 28364 28361 28363 + 28230 28361 28364 + 28364 28231 28230 + 28222 28231 28364 + 28212 28222 28364 + 28185 28362 28186 + 28362 28185 28365 + 28365 28363 28362 + 28363 28365 28208 + 28208 28366 28363 + 28363 28366 28364 + 28212 28364 28366 + 28212 28366 28208 + 28190 28365 28185 + 28208 28365 28190 + 28299 28324 28290 + 28324 28329 28290 + 28291 28290 28329 + 28329 28367 28291 + 28291 28367 28292 + 28367 28368 28292 + 28369 28292 28368 + 28292 28369 28287 + 28367 28329 28328 + 28370 28367 28328 + 28368 28367 28370 + 28347 28368 28370 + 28347 28371 28368 + 28368 28371 28369 + 28369 28371 28372 + 28287 28369 28372 + 28372 28373 28287 + 28287 28373 28276 + 28327 28370 28328 + 28347 28370 28327 + 28277 28276 28373 + 28373 28374 28277 + 28277 28374 28278 + 28374 28375 28278 + 28376 28278 28375 + 28273 28278 28376 + 28352 28374 28373 + 28374 28352 28377 + 28377 28375 28374 + 28378 28375 28377 + 28375 28378 28376 + 28373 28372 28352 + 28352 28372 28379 + 28379 28345 28352 + 28379 28346 28345 + 28347 28346 28379 + 28371 28347 28379 + 28371 28379 28372 + 28376 28378 28380 + 28381 28380 28378 + 28382 28380 28381 + 28376 28380 28382 + 28383 28376 28382 + 28376 28383 28273 + 28269 28273 28383 + 28384 28269 28383 + 28384 28263 28269 + 28378 28377 28381 + 28381 28377 28352 + 28351 28381 28352 + 28382 28381 28351 + 28351 28354 28382 + 28382 28354 28385 + 28385 28384 28382 + 28384 28383 28382 + 28265 28385 28354 + 28265 28264 28385 + 28385 28264 28263 + 28263 28384 28385 + 28386 28387 28388 + 28387 28386 28389 + 28390 28387 28389 + 28391 28387 28390 + 28387 28391 28392 + 28392 28388 28387 + 28388 28393 28386 + 28394 28386 28393 + 28386 28394 28395 + 28395 28389 28386 + 28388 28396 28393 + 28396 28397 28393 + 28398 28393 28397 + 28393 28398 28394 + 28399 28394 28398 + 28394 28399 28400 + 28395 28394 28400 + 28401 28396 28388 + 28396 28401 28402 + 28402 28403 28396 + 28397 28396 28403 + 28403 28404 28397 + 28405 28397 28404 + 28397 28405 28398 + 28388 28392 28401 + 28401 28392 28406 + 28402 28401 28406 + 28406 28407 28402 + 28408 28402 28407 + 28403 28402 28408 + 28408 28409 28403 + 28403 28409 28410 + 28410 28404 28403 + 28392 28411 28406 + 28411 28412 28406 + 28412 28413 28406 + 28406 28413 28414 + 28414 28407 28406 + 28411 28392 28391 + 28391 28415 28411 + 28415 28416 28411 + 28416 28412 28411 + 28412 28416 28417 + 28418 28412 28417 + 28413 28412 28418 + 28415 28391 28419 + 28420 28415 28419 + 28420 28416 28415 + 28420 28421 28416 + 28416 28421 28422 + 28422 28417 28416 + 28422 28423 28417 + 28417 28423 28418 + 28390 28419 28391 + 28419 28390 28424 + 28424 28425 28419 + 28420 28419 28425 + 28421 28420 28425 + 28425 28426 28421 + 28422 28421 28426 + 28426 28427 28422 + 28427 28428 28422 + 28422 28428 28423 + 28424 28390 28389 + 28429 28424 28389 + 28427 28424 28429 + 28425 28424 28427 + 28427 28426 28425 + 28389 28430 28429 + 28430 28431 28429 + 28431 28432 28429 + 28429 28432 28433 + 28429 28433 28427 + 28428 28427 28433 + 28433 28434 28428 + 28423 28428 28434 + 28430 28389 28395 + 28435 28430 28395 + 28430 28435 28436 + 28436 28431 28430 + 28431 28436 28437 + 28432 28431 28437 + 28437 28438 28432 + 28438 28434 28432 + 28434 28433 28432 + 28395 28400 28435 + 28435 28400 28439 + 28436 28435 28439 + 28439 28440 28436 + 28436 28440 28437 + 28437 28440 28441 + 28437 28441 28442 + 28442 28438 28437 + 28438 28442 28443 + 28434 28438 28443 + 28434 28443 28423 + 28439 28400 28399 + 28439 28399 28444 + 28439 28444 28445 + 28445 28440 28439 + 28440 28445 28441 + 28441 28445 28446 + 28446 28447 28441 + 28447 28442 28441 + 28442 28447 28448 + 28443 28442 28448 + 28444 28399 28449 + 28449 28450 28444 + 28444 28450 28451 + 28451 28445 28444 + 28445 28451 28446 + 28446 28451 28452 + 28446 28452 28453 + 28453 28447 28446 + 28398 28449 28399 + 28398 28405 28449 + 28405 28454 28449 + 28450 28449 28454 + 28454 28455 28450 + 28450 28455 28451 + 28455 28456 28451 + 28451 28456 28452 + 28454 28405 28457 + 28457 28458 28454 + 28455 28454 28458 + 28458 28459 28455 + 28456 28455 28459 + 28459 28460 28456 + 28452 28456 28460 + 28404 28457 28405 + 28457 28404 28410 + 28410 28461 28457 + 28457 28461 28462 + 28462 28458 28457 + 28459 28458 28462 + 28462 28463 28459 + 28459 28463 28464 + 28464 28460 28459 + 28465 28460 28464 + 28460 28465 28452 + 28461 28410 28466 + 28466 28467 28461 + 28462 28461 28467 + 28467 28468 28462 + 28463 28462 28468 + 28468 28469 28463 + 28464 28463 28469 + 28470 28466 28410 + 28471 28466 28470 + 28467 28466 28471 + 28471 28472 28467 + 28467 28472 28473 + 28473 28468 28467 + 28468 28473 28469 + 28410 28409 28470 + 28474 28470 28409 + 28470 28474 28475 + 28475 28476 28470 + 28470 28476 28471 + 28471 28476 28477 + 28472 28471 28477 + 28409 28408 28474 + 28478 28474 28408 + 28475 28474 28478 + 28478 28479 28475 + 28475 28479 28480 + 28480 28481 28475 + 28481 28482 28475 + 28476 28475 28482 + 28408 28483 28478 + 28484 28478 28483 + 28478 28484 28485 + 28485 28479 28478 + 28486 28479 28485 + 28479 28486 28480 + 28407 28483 28408 + 28487 28483 28407 + 28483 28487 28484 + 28488 28484 28487 + 28485 28484 28488 + 28488 28489 28485 + 28485 28489 28490 + 28490 28486 28485 + 28407 28414 28487 + 28487 28414 28491 + 28491 28492 28487 + 28487 28492 28488 + 28493 28488 28492 + 28488 28493 28494 + 28494 28489 28488 + 28495 28489 28494 + 28489 28495 28490 + 28491 28414 28413 + 28413 28496 28491 + 28496 28497 28491 + 28497 28498 28491 + 28491 28498 28499 + 28499 28492 28491 + 28492 28499 28493 + 28500 28493 28499 + 28494 28493 28500 + 28418 28496 28413 + 28418 28501 28496 + 28501 28497 28496 + 28497 28501 28448 + 28448 28502 28497 + 28498 28497 28502 + 28503 28498 28502 + 28499 28498 28503 + 28503 28504 28499 + 28499 28504 28500 + 28423 28501 28418 + 28501 28423 28443 + 28448 28501 28443 + 28448 28447 28502 + 28447 28453 28502 + 28502 28453 28503 + 28453 28505 28503 + 28503 28505 28504 + 28505 28506 28504 + 28504 28506 28507 + 28507 28500 28504 + 28500 28507 28508 + 28508 28509 28500 + 28500 28509 28494 + 28505 28453 28452 + 28465 28505 28452 + 28506 28505 28465 + 28465 28510 28506 + 28507 28506 28510 + 28510 28511 28507 + 28508 28507 28511 + 28464 28510 28465 + 28510 28464 28512 + 28512 28511 28510 + 28511 28512 28513 + 28513 28514 28511 + 28511 28514 28508 + 28512 28464 28469 + 28469 28515 28512 + 28513 28512 28515 + 28515 28516 28513 + 28513 28516 28517 + 28517 28518 28513 + 28514 28513 28518 + 28518 28519 28514 + 28508 28514 28519 + 28520 28515 28469 + 28516 28515 28520 + 28516 28520 28521 + 28521 28517 28516 + 28517 28521 28522 + 28522 28523 28517 + 28517 28523 28524 + 28524 28518 28517 + 28469 28473 28520 + 28521 28520 28473 + 28525 28521 28473 + 28522 28521 28525 + 28525 28526 28522 + 28522 28526 28527 + 28527 28528 28522 + 28528 28529 28522 + 28523 28522 28529 + 28530 28525 28473 + 28531 28525 28530 + 28531 28526 28525 + 28526 28531 28532 + 28532 28527 28526 + 28533 28527 28532 + 28528 28527 28533 + 28534 28530 28473 + 28535 28530 28534 + 28536 28530 28535 + 28530 28536 28531 + 28531 28536 28537 + 28532 28531 28537 + 28537 28538 28532 + 28533 28532 28538 + 28473 28472 28534 + 28472 28539 28534 + 28539 28540 28534 + 28541 28534 28540 + 28542 28534 28541 + 28534 28542 28535 + 28477 28539 28472 + 28539 28477 28543 + 28543 28544 28539 + 28539 28544 28545 + 28545 28540 28539 + 28546 28540 28545 + 28540 28546 28541 + 28543 28477 28547 + 28547 28548 28543 + 28543 28548 28549 + 28549 28550 28543 + 28544 28543 28550 + 28550 28551 28544 + 28545 28544 28551 + 28476 28547 28477 + 28482 28547 28476 + 28547 28482 28552 + 28552 28548 28547 + 28548 28552 28553 + 28553 28549 28548 + 28549 28553 28554 + 28554 28555 28549 + 28549 28555 28556 + 28556 28550 28549 + 28552 28482 28481 + 28481 28557 28552 + 28553 28552 28557 + 28557 28558 28553 + 28554 28553 28558 + 28559 28557 28481 + 28557 28559 28560 + 28560 28558 28557 + 28558 28560 28561 + 28561 28562 28558 + 28558 28562 28554 + 28481 28563 28559 + 28559 28563 28564 + 28564 28565 28559 + 28559 28565 28566 + 28566 28560 28559 + 28561 28560 28566 + 28563 28481 28480 + 28480 28567 28563 + 28564 28563 28567 + 28567 28568 28564 + 28569 28564 28568 + 28570 28564 28569 + 28570 28565 28564 + 28565 28570 28571 + 28571 28566 28565 + 28567 28480 28572 + 28572 28573 28567 + 28567 28573 28574 + 28574 28568 28567 + 28575 28568 28574 + 28568 28575 28569 + 28572 28480 28486 + 28486 28576 28572 + 28572 28576 28577 + 28577 28578 28572 + 28573 28572 28578 + 28578 28579 28573 + 28574 28573 28579 + 28580 28576 28486 + 28576 28580 28581 + 28581 28577 28576 + 28577 28581 28582 + 28582 28583 28577 + 28577 28583 28584 + 28584 28578 28577 + 28579 28578 28584 + 28486 28490 28580 + 28580 28490 28495 + 28495 28585 28580 + 28580 28585 28586 + 28586 28581 28580 + 28582 28581 28586 + 28586 28587 28582 + 28588 28582 28587 + 28583 28582 28588 + 28588 28589 28583 + 28584 28583 28589 + 28590 28585 28495 + 28585 28590 28591 + 28591 28586 28585 + 28587 28586 28591 + 28592 28587 28591 + 28587 28592 28593 + 28593 28594 28587 + 28587 28594 28588 + 28495 28595 28590 + 28590 28595 28596 + 28596 28597 28590 + 28590 28597 28598 + 28598 28591 28590 + 28592 28591 28598 + 28595 28495 28494 + 28595 28494 28599 + 28596 28595 28599 + 28599 28600 28596 + 28600 28601 28596 + 28602 28596 28601 + 28597 28596 28602 + 28597 28602 28603 + 28603 28598 28597 + 28494 28509 28599 + 28604 28599 28509 + 28599 28604 28605 + 28605 28606 28599 + 28599 28606 28607 + 28607 28600 28599 + 28509 28508 28604 + 28608 28604 28508 + 28605 28604 28608 + 28608 28609 28605 + 28610 28605 28609 + 28606 28605 28610 + 28610 28611 28606 + 28607 28606 28611 + 28519 28608 28508 + 28612 28608 28519 + 28608 28612 28609 + 28609 28612 28613 + 28613 28614 28609 + 28609 28614 28610 + 28615 28610 28614 + 28610 28615 28616 + 28616 28611 28610 + 28519 28617 28612 + 28613 28612 28617 + 28617 28618 28613 + 28619 28613 28618 + 28613 28619 28620 + 28620 28614 28613 + 28614 28620 28615 + 28617 28519 28518 + 28518 28524 28617 + 28617 28524 28621 + 28621 28618 28617 + 28622 28618 28621 + 28618 28622 28619 + 28619 28622 28623 + 28620 28619 28623 + 28623 28624 28620 + 28615 28620 28624 + 28624 28625 28615 + 28616 28615 28625 + 28626 28621 28524 + 28627 28621 28626 + 28621 28627 28622 + 28622 28627 28628 + 28628 28623 28622 + 28623 28628 28629 + 28624 28623 28629 + 28624 28629 28630 + 28630 28625 28624 + 28524 28523 28626 + 28523 28631 28626 + 28632 28626 28631 + 28626 28632 28633 + 28626 28633 28627 + 28628 28627 28633 + 28633 28634 28628 + 28634 28635 28628 + 28635 28629 28628 + 28529 28631 28523 + 28636 28631 28529 + 28631 28636 28632 + 28636 28529 28637 + 28632 28636 28637 + 28637 28638 28632 + 28638 28639 28632 + 28639 28640 28632 + 28640 28641 28632 + 28633 28632 28641 + 28641 28634 28633 + 28529 28528 28637 + 28637 28528 28642 + 28637 28642 28638 + 28642 28643 28638 + 28638 28643 28644 + 28638 28644 28645 + 28645 28639 28638 + 28639 28645 28646 + 28640 28639 28646 + 28642 28528 28533 + 28643 28642 28533 + 28533 28647 28643 + 28644 28643 28647 + 28647 28648 28644 + 28645 28644 28648 + 28649 28645 28648 + 28646 28645 28649 + 28538 28647 28533 + 28647 28538 28650 + 28650 28648 28647 + 28648 28650 28651 + 28651 28649 28648 + 28649 28651 28652 + 28652 28653 28649 + 28649 28653 28646 + 28650 28538 28537 + 28537 28654 28650 + 28650 28654 28655 + 28655 28651 28650 + 28652 28651 28655 + 28655 28656 28652 + 28657 28652 28656 + 28653 28652 28657 + 28657 28658 28653 + 28646 28653 28658 + 28654 28537 28659 + 28654 28659 28660 + 28660 28661 28654 + 28654 28661 28655 + 28662 28655 28661 + 28655 28662 28663 + 28663 28656 28655 + 28659 28537 28536 + 28536 28535 28659 + 28660 28659 28535 + 28535 28542 28660 + 28664 28660 28542 + 28660 28664 28665 + 28665 28661 28660 + 28661 28665 28662 + 28666 28662 28665 + 28663 28662 28666 + 28666 28667 28663 + 28668 28663 28667 + 28656 28663 28668 + 28542 28669 28664 + 28664 28669 28670 + 28670 28671 28664 + 28665 28664 28671 + 28671 28672 28665 + 28665 28672 28666 + 28541 28669 28542 + 28669 28541 28673 + 28673 28670 28669 + 28670 28673 28674 + 28670 28674 28675 + 28675 28671 28670 + 28671 28675 28676 + 28676 28672 28671 + 28672 28676 28677 + 28677 28666 28672 + 28673 28541 28678 + 28678 28679 28673 + 28679 28680 28673 + 28674 28673 28680 + 28680 28681 28674 + 28675 28674 28681 + 28541 28546 28678 + 28682 28678 28546 + 28683 28678 28682 + 28678 28683 28684 + 28684 28679 28678 + 28679 28684 28685 + 28679 28685 28686 + 28686 28680 28679 + 28686 28681 28680 + 28546 28687 28682 + 28682 28687 28688 + 28688 28689 28682 + 28690 28682 28689 + 28682 28690 28683 + 28545 28687 28546 + 28687 28545 28691 + 28691 28688 28687 + 28688 28691 28692 + 28692 28693 28688 + 28688 28693 28694 + 28694 28689 28688 + 28695 28689 28694 + 28689 28695 28690 + 28551 28691 28545 + 28692 28691 28551 + 28551 28696 28692 + 28692 28696 28697 + 28697 28698 28692 + 28693 28692 28698 + 28698 28699 28693 + 28694 28693 28699 + 28696 28551 28550 + 28556 28696 28550 + 28697 28696 28556 + 28700 28697 28556 + 28701 28697 28700 + 28698 28697 28701 + 28702 28698 28701 + 28699 28698 28702 + 28702 28703 28699 + 28704 28699 28703 + 28699 28704 28694 + 28556 28555 28700 + 28555 28705 28700 + 28706 28700 28705 + 28706 28701 28700 + 28707 28701 28706 + 28702 28701 28707 + 28707 28708 28702 + 28703 28702 28708 + 28705 28555 28554 + 28709 28705 28554 + 28710 28705 28709 + 28705 28710 28706 + 28711 28706 28710 + 28711 28707 28706 + 28712 28707 28711 + 28712 28713 28707 + 28708 28707 28713 + 28714 28709 28554 + 28715 28709 28714 + 28715 28710 28709 + 28716 28710 28715 + 28710 28716 28711 + 28712 28711 28716 + 28554 28562 28714 + 28717 28714 28562 + 28718 28714 28717 + 28714 28718 28715 + 28715 28718 28719 + 28719 28716 28715 + 28720 28716 28719 + 28720 28721 28716 + 28716 28721 28712 + 28562 28561 28717 + 28722 28717 28561 + 28723 28717 28722 + 28723 28718 28717 + 28724 28718 28723 + 28718 28724 28719 + 28720 28719 28724 + 28561 28725 28722 + 28726 28722 28725 + 28727 28722 28726 + 28727 28728 28722 + 28722 28728 28723 + 28566 28725 28561 + 28729 28725 28566 + 28725 28729 28726 + 28730 28726 28729 + 28726 28730 28731 + 28727 28726 28731 + 28727 28731 28732 + 28732 28733 28727 + 28728 28727 28733 + 28566 28571 28729 + 28729 28571 28734 + 28734 28735 28729 + 28729 28735 28730 + 28736 28730 28735 + 28737 28730 28736 + 28737 28731 28730 + 28732 28731 28737 + 28738 28734 28571 + 28739 28734 28738 + 28734 28739 28740 + 28740 28735 28734 + 28735 28740 28736 + 28570 28738 28571 + 28741 28738 28570 + 28738 28741 28742 + 28738 28742 28739 + 28695 28739 28742 + 28740 28739 28695 + 28695 28743 28740 + 28736 28740 28743 + 28570 28569 28741 + 28741 28569 28744 + 28744 28745 28741 + 28745 28746 28741 + 28746 28747 28741 + 28742 28741 28747 + 28569 28575 28744 + 28575 28748 28744 + 28749 28744 28748 + 28744 28749 28750 + 28750 28751 28744 + 28744 28751 28752 + 28752 28745 28744 + 28753 28748 28575 + 28754 28748 28753 + 28748 28754 28749 + 28755 28749 28754 + 28750 28749 28755 + 28755 28756 28750 + 28757 28750 28756 + 28751 28750 28757 + 28575 28758 28753 + 28759 28753 28758 + 28760 28753 28759 + 28753 28760 28754 + 28754 28760 28761 + 28761 28762 28754 + 28754 28762 28755 + 28574 28758 28575 + 28758 28574 28763 + 28763 28764 28758 + 28758 28764 28759 + 28765 28759 28764 + 28766 28759 28765 + 28759 28766 28760 + 28761 28760 28766 + 28579 28763 28574 + 28767 28763 28579 + 28764 28763 28767 + 28767 28768 28764 + 28764 28768 28765 + 28765 28768 28769 + 28769 28770 28765 + 28771 28765 28770 + 28765 28771 28766 + 28579 28772 28767 + 28767 28772 28773 + 28773 28774 28767 + 28774 28769 28767 + 28769 28768 28767 + 28584 28772 28579 + 28772 28584 28775 + 28775 28773 28772 + 28773 28775 28776 + 28776 28777 28773 + 28774 28773 28777 + 28778 28774 28777 + 28778 28779 28774 + 28779 28769 28774 + 28589 28775 28584 + 28775 28589 28780 + 28776 28775 28780 + 28776 28780 28781 + 28781 28782 28776 + 28777 28776 28782 + 28782 28783 28777 + 28778 28777 28783 + 28784 28780 28589 + 28780 28784 28785 + 28785 28781 28780 + 28786 28781 28785 + 28786 28787 28781 + 28781 28787 28788 + 28788 28782 28781 + 28788 28783 28782 + 28589 28588 28784 + 28789 28784 28588 + 28784 28789 28790 + 28790 28785 28784 + 28785 28790 28791 + 28786 28785 28791 + 28786 28791 28792 + 28787 28786 28792 + 28792 28793 28787 + 28788 28787 28793 + 28594 28789 28588 + 28794 28789 28594 + 28789 28794 28795 + 28795 28790 28789 + 28796 28790 28795 + 28796 28791 28790 + 28791 28796 28797 + 28797 28792 28791 + 28792 28797 28798 + 28798 28793 28792 + 28793 28798 28788 + 28594 28593 28794 + 28794 28593 28799 + 28799 28800 28794 + 28794 28800 28801 + 28801 28795 28794 + 28796 28795 28801 + 28801 28802 28796 + 28797 28796 28802 + 28803 28797 28802 + 28798 28797 28803 + 28799 28593 28592 + 28592 28804 28799 + 28805 28799 28804 + 28800 28799 28805 + 28806 28800 28805 + 28801 28800 28806 + 28807 28801 28806 + 28808 28801 28807 + 28808 28802 28801 + 28598 28804 28592 + 28809 28804 28598 + 28804 28809 28805 + 28810 28805 28809 + 28806 28805 28810 + 28810 28811 28806 + 28806 28811 28807 + 28811 28812 28807 + 28808 28807 28812 + 28598 28603 28809 + 28809 28603 28813 + 28813 28814 28809 + 28809 28814 28810 + 28815 28810 28814 + 28811 28810 28815 + 28816 28811 28815 + 28812 28811 28816 + 28813 28603 28602 + 28817 28813 28602 + 28818 28813 28817 + 28813 28818 28819 + 28819 28814 28813 + 28814 28819 28815 + 28820 28815 28819 + 28816 28815 28820 + 28602 28821 28817 + 28822 28817 28821 + 28761 28817 28822 + 28817 28761 28818 + 28766 28818 28761 + 28819 28818 28766 + 28766 28771 28819 + 28819 28771 28820 + 28601 28821 28602 + 28823 28821 28601 + 28821 28823 28822 + 28822 28823 28824 + 28825 28822 28824 + 28762 28822 28825 + 28822 28762 28761 + 28823 28601 28600 + 28600 28824 28823 + 28826 28824 28600 + 28824 28826 28827 + 28827 28828 28824 + 28824 28828 28825 + 28756 28825 28828 + 28756 28755 28825 + 28825 28755 28762 + 28600 28607 28826 + 28826 28607 28829 + 28829 28830 28826 + 28826 28830 28831 + 28827 28826 28831 + 28831 28832 28827 + 28833 28827 28832 + 28833 28828 28827 + 28828 28833 28756 + 28834 28829 28607 + 28835 28829 28834 + 28830 28829 28835 + 28830 28835 28836 + 28836 28831 28830 + 28837 28831 28836 + 28831 28837 28838 + 28838 28832 28831 + 28611 28834 28607 + 28839 28834 28611 + 28840 28834 28839 + 28834 28840 28835 + 28836 28835 28840 + 28841 28836 28840 + 28837 28836 28841 + 28841 28842 28837 + 28837 28842 28843 + 28843 28838 28837 + 28611 28616 28839 + 28839 28616 28844 + 28844 28845 28839 + 28840 28839 28845 + 28845 28846 28840 + 28840 28846 28847 + 28847 28841 28840 + 28848 28841 28847 + 28842 28841 28848 + 28625 28844 28616 + 28844 28625 28849 + 28844 28849 28850 + 28850 28845 28844 + 28846 28845 28850 + 28850 28851 28846 + 28846 28851 28852 + 28852 28847 28846 + 28847 28852 28853 + 28847 28853 28848 + 28625 28630 28849 + 28854 28849 28630 + 28849 28854 28855 + 28850 28849 28855 + 28851 28850 28855 + 28855 28856 28851 + 28852 28851 28856 + 28856 28857 28852 + 28853 28852 28857 + 28858 28854 28630 + 28859 28854 28858 + 28854 28859 28860 + 28860 28855 28854 + 28856 28855 28860 + 28860 28861 28856 + 28856 28861 28862 + 28862 28857 28856 + 28858 28630 28629 + 28629 28635 28858 + 28863 28858 28635 + 28858 28863 28859 + 28864 28859 28863 + 28860 28859 28864 + 28864 28865 28860 + 28861 28860 28865 + 28865 28866 28861 + 28862 28861 28866 + 28635 28867 28863 + 28868 28863 28867 + 28868 28864 28863 + 28868 28869 28864 + 28865 28864 28869 + 28658 28865 28869 + 28866 28865 28658 + 28867 28635 28634 + 28634 28641 28867 + 28867 28641 28640 + 28640 28870 28867 + 28867 28870 28868 + 28869 28868 28870 + 28870 28871 28869 + 28869 28871 28646 + 28658 28869 28646 + 28871 28870 28640 + 28871 28640 28646 + 28658 28657 28866 + 28866 28657 28872 + 28872 28873 28866 + 28866 28873 28862 + 28874 28862 28873 + 28862 28874 28875 + 28875 28857 28862 + 28857 28875 28853 + 28656 28872 28657 + 28668 28872 28656 + 28872 28668 28873 + 28668 28876 28873 + 28873 28876 28874 + 28874 28876 28877 + 28877 28878 28874 + 28875 28874 28878 + 28878 28879 28875 + 28853 28875 28879 + 28879 28880 28853 + 28880 28848 28853 + 28876 28668 28881 + 28881 28877 28876 + 28882 28877 28881 + 28877 28882 28883 + 28883 28878 28877 + 28879 28878 28883 + 28883 28884 28879 + 28879 28884 28885 + 28885 28880 28879 + 28881 28668 28667 + 28667 28886 28881 + 28886 28887 28881 + 28887 28882 28881 + 28882 28887 28888 + 28888 28883 28882 + 28884 28883 28888 + 28888 28889 28884 + 28885 28884 28889 + 28890 28886 28667 + 28886 28890 28891 + 28891 28887 28886 + 28887 28891 28892 + 28892 28888 28887 + 28889 28888 28892 + 28667 28893 28890 + 28890 28893 28894 + 28894 28895 28890 + 28895 28896 28890 + 28896 28891 28890 + 28891 28896 28897 + 28897 28892 28891 + 28893 28667 28666 + 28666 28677 28893 + 28893 28677 28898 + 28898 28894 28893 + 28898 28899 28894 + 28894 28899 28900 + 28900 28895 28894 + 28896 28895 28900 + 28896 28900 28901 + 28901 28897 28896 + 28898 28677 28676 + 28676 28902 28898 + 28899 28898 28902 + 28902 28903 28899 + 28899 28903 28904 + 28899 28904 28905 + 28905 28901 28899 + 28901 28900 28899 + 28906 28902 28676 + 28903 28902 28906 + 28903 28906 28907 + 28907 28904 28903 + 28904 28907 28908 + 28904 28908 28909 + 28909 28905 28904 + 28676 28675 28906 + 28907 28906 28675 + 28681 28907 28675 + 28908 28907 28681 + 28681 28686 28908 + 28908 28686 28910 + 28909 28908 28910 + 28910 28911 28909 + 28912 28909 28911 + 28905 28909 28912 + 28905 28912 28913 + 28913 28901 28905 + 28897 28901 28913 + 28897 28913 28914 + 28914 28892 28897 + 28686 28685 28910 + 28685 28915 28910 + 28745 28910 28915 + 28745 28752 28910 + 28910 28752 28916 + 28916 28911 28910 + 28917 28911 28916 + 28911 28917 28912 + 28918 28915 28685 + 28746 28915 28918 + 28915 28746 28745 + 28685 28684 28918 + 28918 28684 28683 + 28683 28919 28918 + 28746 28918 28919 + 28919 28747 28746 + 28919 28920 28747 + 28747 28920 28742 + 28742 28920 28690 + 28742 28690 28695 + 28920 28919 28683 + 28683 28690 28920 + 28916 28752 28751 + 28751 28921 28916 + 28917 28916 28921 + 28921 28922 28917 + 28912 28917 28922 + 28913 28912 28922 + 28914 28913 28922 + 28922 28923 28914 + 28889 28914 28923 + 28892 28914 28889 + 28757 28921 28751 + 28922 28921 28757 + 28922 28757 28924 + 28924 28923 28922 + 28925 28923 28924 + 28923 28925 28889 + 28889 28925 28885 + 28926 28885 28925 + 28926 28880 28885 + 28924 28757 28756 + 28756 28833 28924 + 28833 28927 28924 + 28843 28924 28927 + 28924 28843 28925 + 28925 28843 28926 + 28842 28926 28843 + 28880 28926 28842 + 28842 28848 28880 + 28832 28927 28833 + 28838 28927 28832 + 28927 28838 28843 + 28770 28820 28771 + 28928 28820 28770 + 28820 28928 28816 + 28929 28816 28928 + 28929 28812 28816 + 28930 28928 28770 + 28931 28928 28930 + 28928 28931 28929 + 28931 28932 28929 + 28932 28933 28929 + 28933 28812 28929 + 28933 28934 28812 + 28812 28934 28808 + 28930 28770 28769 + 28769 28779 28930 + 28930 28779 28935 + 28935 28936 28930 + 28936 28931 28930 + 28937 28931 28936 + 28937 28932 28931 + 28932 28937 28938 + 28938 28939 28932 + 28933 28932 28939 + 28935 28779 28778 + 28940 28935 28778 + 28941 28935 28940 + 28941 28942 28935 + 28936 28935 28942 + 28937 28936 28942 + 28937 28942 28943 + 28943 28938 28937 + 28783 28940 28778 + 28941 28940 28783 + 28783 28944 28941 + 28945 28941 28944 + 28941 28945 28943 + 28942 28941 28943 + 28788 28944 28783 + 28798 28944 28788 + 28944 28798 28945 + 28803 28945 28798 + 28803 28943 28945 + 28938 28943 28803 + 28946 28938 28803 + 28939 28938 28946 + 28946 28947 28939 + 28939 28947 28933 + 28947 28934 28933 + 28808 28934 28947 + 28947 28946 28808 + 28946 28802 28808 + 28802 28946 28803 + 28694 28743 28695 + 28743 28694 28704 + 28704 28948 28743 + 28743 28948 28736 + 28948 28949 28736 + 28949 28737 28736 + 28948 28704 28950 + 28950 28949 28948 + 28949 28950 28951 + 28951 28952 28949 + 28737 28949 28952 + 28952 28953 28737 + 28953 28732 28737 + 28950 28704 28703 + 28950 28703 28954 + 28954 28951 28950 + 28951 28954 28955 + 28956 28951 28955 + 28956 28952 28951 + 28956 28957 28952 + 28952 28957 28958 + 28958 28953 28952 + 28958 28732 28953 + 28708 28954 28703 + 28959 28954 28708 + 28959 28955 28954 + 28960 28955 28959 + 28955 28960 28961 + 28961 28962 28955 + 28962 28956 28955 + 28957 28956 28962 + 28962 28963 28957 + 28958 28957 28963 + 28959 28708 28713 + 28959 28713 28964 + 28964 28960 28959 + 28960 28964 28965 + 28965 28966 28960 + 28960 28966 28961 + 28964 28713 28712 + 28965 28964 28712 + 28712 28721 28965 + 28966 28965 28721 + 28721 28720 28966 + 28967 28966 28720 + 28966 28967 28961 + 28961 28967 28968 + 28961 28968 28969 + 28969 28962 28961 + 28963 28962 28969 + 28969 28970 28963 + 28963 28970 28958 + 28970 28971 28958 + 28958 28971 28732 + 28720 28972 28967 + 28972 28973 28967 + 28973 28968 28967 + 28968 28973 28974 + 28974 28969 28968 + 28969 28974 28975 + 28970 28969 28975 + 28975 28971 28970 + 28732 28971 28975 + 28975 28733 28732 + 28724 28972 28720 + 28973 28972 28724 + 28973 28724 28976 + 28973 28976 28974 + 28976 28977 28974 + 28975 28974 28977 + 28975 28977 28733 + 28733 28977 28728 + 28723 28728 28977 + 28977 28976 28723 + 28976 28724 28723 + 28978 28979 28980 + 28979 28978 28981 + 28982 28979 28981 + 28983 28979 28982 + 28979 28983 28984 + 28984 28980 28979 + 28985 28978 28980 + 28986 28978 28985 + 28978 28986 28987 + 28981 28978 28987 + 28981 28987 28988 + 28988 28989 28981 + 28981 28989 28982 + 28980 28990 28985 + 28990 28991 28985 + 28985 28991 28992 + 28985 28992 28986 + 28993 28986 28992 + 28987 28986 28993 + 28993 28994 28987 + 28994 28988 28987 + 28995 28990 28980 + 28990 28995 28996 + 28996 28997 28990 + 28991 28990 28997 + 28998 28991 28997 + 28999 28991 28998 + 28991 28999 28992 + 28984 28995 28980 + 29000 28995 28984 + 28995 29000 29001 + 29001 28996 28995 + 29002 28996 29001 + 28996 29002 29003 + 29003 28997 28996 + 28997 29003 29004 + 29004 28998 28997 + 29005 29000 28984 + 29000 29005 29006 + 29006 29007 29000 + 29000 29007 29008 + 29008 29001 29000 + 29009 29001 29008 + 29001 29009 29002 + 28984 28983 29005 + 28983 29010 29005 + 29006 29005 29010 + 29010 29011 29006 + 29006 29011 29012 + 29012 29013 29006 + 29007 29006 29013 + 29013 29014 29007 + 29008 29007 29014 + 29010 28983 29015 + 29016 29010 29015 + 29010 29016 29017 + 29017 29011 29010 + 29011 29017 29018 + 29018 29012 29011 + 29015 28983 28982 + 29015 28982 29019 + 29019 29020 29015 + 29015 29020 29016 + 29020 29021 29016 + 29017 29016 29021 + 29021 29022 29017 + 29017 29022 29023 + 29023 29018 29017 + 28989 29019 28982 + 29019 28989 29024 + 29025 29019 29024 + 29019 29025 29026 + 29026 29020 29019 + 29020 29026 29027 + 29027 29021 29020 + 29021 29027 29028 + 29028 29022 29021 + 29024 28989 28988 + 28988 29029 29024 + 29024 29029 29030 + 29025 29024 29030 + 29030 29031 29025 + 29026 29025 29031 + 29031 29032 29026 + 29026 29032 29033 + 29033 29027 29026 + 29028 29027 29033 + 29029 28988 28994 + 28994 29034 29029 + 29034 29035 29029 + 29029 29035 29030 + 29036 29030 29035 + 29030 29036 29037 + 29037 29031 29030 + 29031 29037 29038 + 29038 29032 29031 + 29039 29034 28994 + 29034 29039 29040 + 29040 29035 29034 + 29035 29040 29036 + 29041 29036 29040 + 29036 29041 29042 + 29042 29037 29036 + 29042 29043 29037 + 29043 29038 29037 + 28994 28993 29039 + 29039 28993 29044 + 29044 29045 29039 + 29039 29045 29046 + 29039 29046 29040 + 29046 29041 29040 + 29047 29041 29046 + 29041 29047 29048 + 29048 29042 29041 + 29049 29044 28993 + 29044 29049 29050 + 29051 29044 29050 + 29051 29045 29044 + 29045 29051 29052 + 29052 29046 29045 + 29046 29052 29047 + 28992 29049 28993 + 28992 28999 29049 + 28999 29053 29049 + 29049 29053 29054 + 29054 29050 29049 + 29050 29054 29055 + 29055 29056 29050 + 29050 29056 29051 + 29056 29052 29051 + 29056 29057 29052 + 29057 29047 29052 + 29053 28999 29058 + 29058 29059 29053 + 29059 29054 29053 + 29054 29059 29055 + 29059 29004 29055 + 29004 29060 29055 + 29056 29055 29060 + 29060 29057 29056 + 28998 29058 28999 + 29059 29058 28998 + 28998 29004 29059 + 29060 29004 29003 + 29003 29061 29060 + 29057 29060 29061 + 29061 29062 29057 + 29047 29057 29062 + 29062 29048 29047 + 29062 29063 29048 + 29063 29064 29048 + 29042 29048 29064 + 29064 29043 29042 + 29003 29002 29061 + 29002 29065 29061 + 29062 29061 29065 + 29065 29063 29062 + 29063 29065 29066 + 29066 29067 29063 + 29064 29063 29067 + 29067 29068 29064 + 29043 29064 29068 + 29068 29069 29043 + 29038 29043 29069 + 29065 29002 29009 + 29065 29009 29066 + 29070 29066 29009 + 29067 29066 29070 + 29070 29071 29067 + 29067 29071 29072 + 29072 29068 29067 + 29069 29068 29072 + 29009 29073 29070 + 29070 29073 29074 + 29074 29075 29070 + 29071 29070 29075 + 29075 29076 29071 + 29072 29071 29076 + 29008 29073 29009 + 29073 29008 29077 + 29077 29074 29073 + 29074 29077 29078 + 29078 29079 29074 + 29074 29079 29080 + 29080 29075 29074 + 29076 29075 29080 + 29014 29077 29008 + 29078 29077 29014 + 29014 29081 29078 + 29078 29081 29082 + 29083 29078 29082 + 29079 29078 29083 + 29083 29084 29079 + 29080 29079 29084 + 29085 29081 29014 + 29081 29085 29082 + 29014 29013 29085 + 29085 29013 29012 + 29012 29086 29085 + 29087 29085 29086 + 29085 29087 29082 + 29088 29086 29012 + 29086 29088 29089 + 29089 29090 29086 + 29090 29087 29086 + 29091 29087 29090 + 29082 29087 29091 + 29012 29018 29088 + 29088 29018 29023 + 29023 29092 29088 + 29088 29092 29093 + 29089 29088 29093 + 29094 29089 29093 + 29095 29089 29094 + 29090 29089 29095 + 29095 29096 29090 + 29090 29096 29091 + 29097 29092 29023 + 29092 29097 29098 + 29098 29093 29092 + 29097 29023 29022 + 29022 29028 29097 + 29098 29097 29028 + 29099 29098 29028 + 29100 29098 29099 + 29093 29098 29100 + 29028 29101 29099 + 29102 29099 29101 + 29099 29102 29103 + 29103 29104 29099 + 29099 29104 29100 + 29033 29101 29028 + 29105 29101 29033 + 29101 29105 29102 + 29102 29105 29106 + 29106 29107 29102 + 29103 29102 29107 + 29033 29108 29105 + 29105 29108 29069 + 29069 29106 29105 + 29072 29106 29069 + 29106 29072 29109 + 29109 29107 29106 + 29108 29033 29032 + 29032 29038 29108 + 29069 29108 29038 + 29076 29109 29072 + 29110 29109 29076 + 29107 29109 29110 + 29110 29111 29107 + 29107 29111 29103 + 29103 29111 29112 + 29112 29113 29103 + 29113 29114 29103 + 29104 29103 29114 + 29076 29115 29110 + 29110 29115 29116 + 29117 29110 29116 + 29111 29110 29117 + 29117 29112 29111 + 29080 29115 29076 + 29115 29080 29118 + 29118 29119 29115 + 29115 29119 29116 + 29084 29118 29080 + 29120 29118 29084 + 29119 29118 29120 + 29120 29121 29119 + 29119 29121 29122 + 29122 29123 29119 + 29119 29123 29116 + 29084 29124 29120 + 29120 29124 29125 + 29125 29126 29120 + 29121 29120 29126 + 29126 29127 29121 + 29122 29121 29127 + 29128 29124 29084 + 29124 29128 29129 + 29129 29125 29124 + 29125 29129 29130 + 29130 29131 29125 + 29125 29131 29132 + 29132 29126 29125 + 29127 29126 29132 + 29084 29083 29128 + 29128 29083 29133 + 29133 29134 29128 + 29128 29134 29135 + 29135 29129 29128 + 29130 29129 29135 + 29136 29133 29083 + 29133 29136 29137 + 29138 29133 29137 + 29133 29138 29139 + 29139 29134 29133 + 29134 29139 29140 + 29140 29135 29134 + 29082 29136 29083 + 29141 29136 29082 + 29137 29136 29141 + 29141 29142 29137 + 29137 29142 29143 + 29143 29144 29137 + 29137 29144 29145 + 29145 29138 29137 + 29139 29138 29145 + 29082 29146 29141 + 29147 29141 29146 + 29142 29141 29147 + 29147 29148 29142 + 29143 29142 29148 + 29091 29146 29082 + 29146 29091 29149 + 29149 29150 29146 + 29146 29150 29147 + 29151 29147 29150 + 29148 29147 29151 + 29152 29149 29091 + 29153 29149 29152 + 29150 29149 29153 + 29153 29154 29150 + 29150 29154 29151 + 29091 29096 29152 + 29155 29152 29096 + 29152 29155 29156 + 29156 29157 29152 + 29152 29157 29153 + 29153 29157 29158 + 29158 29159 29153 + 29154 29153 29159 + 29096 29095 29155 + 29160 29155 29095 + 29156 29155 29160 + 29160 29161 29156 + 29156 29161 29162 + 29162 29163 29156 + 29157 29156 29163 + 29163 29158 29157 + 29095 29164 29160 + 29165 29160 29164 + 29160 29165 29166 + 29166 29161 29160 + 29161 29166 29167 + 29167 29162 29161 + 29094 29164 29095 + 29168 29164 29094 + 29164 29168 29165 + 29169 29165 29168 + 29166 29165 29169 + 29169 29170 29166 + 29167 29166 29170 + 29171 29167 29170 + 29172 29167 29171 + 29162 29167 29172 + 29094 29173 29168 + 29168 29173 29174 + 29174 29175 29168 + 29168 29175 29169 + 29176 29169 29175 + 29169 29176 29177 + 29177 29170 29169 + 29173 29094 29178 + 29178 29179 29173 + 29173 29179 29180 + 29180 29181 29173 + 29181 29182 29173 + 29182 29174 29173 + 29178 29094 29093 + 29183 29178 29093 + 29184 29178 29183 + 29178 29184 29185 + 29185 29179 29178 + 29179 29185 29186 + 29186 29180 29179 + 29187 29183 29093 + 29188 29183 29187 + 29189 29183 29188 + 29183 29189 29184 + 29184 29189 29190 + 29190 29191 29184 + 29185 29184 29191 + 29093 29192 29187 + 29193 29187 29192 + 29187 29193 29194 + 29187 29194 29188 + 29188 29194 29195 + 29195 29196 29188 + 29189 29188 29196 + 29196 29190 29189 + 29197 29192 29093 + 29192 29197 29198 + 29198 29199 29192 + 29192 29199 29193 + 29093 29100 29197 + 29200 29197 29100 + 29198 29197 29200 + 29200 29201 29198 + 29202 29198 29201 + 29199 29198 29202 + 29202 29203 29199 + 29193 29199 29203 + 29100 29104 29200 + 29114 29200 29104 + 29201 29200 29114 + 29114 29204 29201 + 29201 29204 29205 + 29205 29206 29201 + 29201 29206 29202 + 29206 29207 29202 + 29208 29202 29207 + 29203 29202 29208 + 29204 29114 29113 + 29113 29209 29204 + 29205 29204 29209 + 29209 29210 29205 + 29211 29205 29210 + 29205 29211 29212 + 29212 29206 29205 + 29206 29212 29213 + 29213 29207 29206 + 29214 29209 29113 + 29209 29214 29215 + 29215 29210 29209 + 29216 29210 29215 + 29210 29216 29211 + 29217 29211 29216 + 29211 29217 29218 + 29212 29211 29218 + 29214 29113 29112 + 29112 29219 29214 + 29215 29214 29219 + 29219 29220 29215 + 29221 29215 29220 + 29215 29221 29216 + 29216 29221 29222 + 29222 29217 29216 + 29217 29222 29223 + 29223 29218 29217 + 29224 29219 29112 + 29219 29224 29225 + 29225 29220 29219 + 29226 29220 29225 + 29220 29226 29221 + 29221 29226 29227 + 29227 29222 29221 + 29222 29227 29228 + 29223 29222 29228 + 29112 29117 29224 + 29224 29117 29229 + 29229 29230 29224 + 29224 29230 29231 + 29231 29232 29224 + 29232 29225 29224 + 29233 29225 29232 + 29225 29233 29226 + 29116 29229 29117 + 29234 29229 29116 + 29230 29229 29234 + 29234 29235 29230 + 29230 29235 29236 + 29236 29231 29230 + 29237 29231 29236 + 29231 29237 29238 + 29238 29232 29231 + 29116 29239 29234 + 29240 29234 29239 + 29235 29234 29240 + 29240 29241 29235 + 29236 29235 29241 + 29241 29242 29236 + 29242 29243 29236 + 29237 29236 29243 + 29116 29244 29239 + 29239 29244 29245 + 29245 29246 29239 + 29239 29246 29247 + 29247 29240 29239 + 29248 29240 29247 + 29241 29240 29248 + 29244 29116 29123 + 29123 29249 29244 + 29244 29249 29250 + 29245 29244 29250 + 29250 29251 29245 + 29252 29245 29251 + 29245 29252 29253 + 29253 29246 29245 + 29249 29123 29122 + 29249 29122 29254 + 29254 29250 29249 + 29250 29254 29255 + 29255 29256 29250 + 29250 29256 29257 + 29257 29251 29250 + 29258 29251 29257 + 29251 29258 29252 + 29127 29254 29122 + 29255 29254 29127 + 29127 29259 29255 + 29255 29259 29260 + 29260 29261 29255 + 29256 29255 29261 + 29261 29262 29256 + 29257 29256 29262 + 29132 29259 29127 + 29259 29132 29260 + 29132 29263 29260 + 29260 29263 29264 + 29261 29260 29264 + 29265 29261 29264 + 29262 29261 29265 + 29265 29266 29262 + 29267 29262 29266 + 29262 29267 29257 + 29263 29132 29131 + 29131 29268 29263 + 29269 29263 29268 + 29263 29269 29264 + 29264 29269 29270 + 29270 29265 29264 + 29270 29271 29265 + 29266 29265 29271 + 29272 29268 29131 + 29268 29272 29273 + 29273 29274 29268 + 29268 29274 29269 + 29275 29269 29274 + 29269 29275 29270 + 29131 29130 29272 + 29276 29272 29130 + 29273 29272 29276 + 29276 29277 29273 + 29278 29273 29277 + 29273 29278 29279 + 29274 29273 29279 + 29279 29275 29274 + 29280 29275 29279 + 29270 29275 29280 + 29130 29281 29276 + 29282 29276 29281 + 29276 29282 29283 + 29283 29277 29276 + 29277 29283 29284 + 29284 29278 29277 + 29135 29281 29130 + 29285 29281 29135 + 29281 29285 29282 + 29286 29282 29285 + 29283 29282 29286 + 29286 29287 29283 + 29288 29283 29287 + 29288 29289 29283 + 29283 29289 29284 + 29135 29140 29285 + 29285 29140 29290 + 29290 29291 29285 + 29285 29291 29286 + 29292 29286 29291 + 29286 29292 29293 + 29293 29287 29286 + 29287 29293 29294 + 29294 29288 29287 + 29290 29140 29139 + 29139 29295 29290 + 29296 29290 29295 + 29290 29296 29297 + 29297 29291 29290 + 29291 29297 29292 + 29145 29295 29139 + 29298 29295 29145 + 29295 29298 29296 + 29296 29298 29299 + 29299 29300 29296 + 29297 29296 29300 + 29300 29301 29297 + 29292 29297 29301 + 29145 29302 29298 + 29298 29302 29303 + 29303 29299 29298 + 29304 29299 29303 + 29299 29304 29305 + 29305 29300 29299 + 29300 29305 29306 + 29306 29301 29300 + 29302 29145 29307 + 29302 29307 29308 + 29303 29302 29308 + 29309 29303 29308 + 29310 29303 29309 + 29303 29310 29304 + 29145 29144 29307 + 29307 29144 29143 + 29143 29311 29307 + 29312 29307 29311 + 29307 29312 29308 + 29311 29143 29313 + 29313 29314 29311 + 29314 29315 29311 + 29315 29312 29311 + 29316 29312 29315 + 29312 29316 29317 + 29317 29308 29312 + 29143 29318 29313 + 29313 29318 29319 + 29313 29319 29320 + 29320 29314 29313 + 29321 29314 29320 + 29314 29321 29316 + 29316 29315 29314 + 29148 29318 29143 + 29322 29318 29148 + 29318 29322 29319 + 29319 29322 29323 + 29323 29324 29319 + 29324 29320 29319 + 29320 29324 29325 + 29326 29320 29325 + 29320 29326 29321 + 29148 29327 29322 + 29328 29322 29327 + 29322 29328 29323 + 29323 29328 29329 + 29323 29329 29330 + 29330 29324 29323 + 29325 29324 29330 + 29151 29327 29148 + 29327 29151 29331 + 29331 29332 29327 + 29332 29328 29327 + 29328 29332 29333 + 29334 29328 29333 + 29328 29334 29329 + 29329 29334 29335 + 29335 29330 29329 + 29336 29331 29151 + 29331 29336 29337 + 29338 29331 29337 + 29332 29331 29338 + 29338 29333 29332 + 29333 29338 29339 + 29339 29340 29333 + 29340 29334 29333 + 29151 29154 29336 + 29159 29336 29154 + 29336 29159 29341 + 29341 29337 29336 + 29337 29341 29342 + 29342 29343 29337 + 29338 29337 29343 + 29343 29339 29338 + 29339 29343 29344 + 29345 29339 29344 + 29340 29339 29345 + 29341 29159 29346 + 29341 29346 29347 + 29342 29341 29347 + 29347 29348 29342 + 29348 29349 29342 + 29343 29342 29349 + 29349 29344 29343 + 29344 29349 29350 + 29350 29345 29344 + 29159 29158 29346 + 29351 29346 29158 + 29346 29351 29352 + 29352 29347 29346 + 29347 29352 29353 + 29353 29348 29347 + 29348 29353 29354 + 29354 29355 29348 + 29355 29349 29348 + 29349 29355 29350 + 29158 29163 29351 + 29351 29163 29162 + 29162 29356 29351 + 29352 29351 29356 + 29357 29352 29356 + 29353 29352 29357 + 29357 29358 29353 + 29354 29353 29358 + 29359 29354 29358 + 29354 29359 29350 + 29350 29355 29354 + 29172 29356 29162 + 29356 29172 29357 + 29172 29360 29357 + 29357 29360 29361 + 29361 29358 29357 + 29358 29361 29359 + 29359 29361 29362 + 29362 29363 29359 + 29363 29364 29359 + 29350 29359 29364 + 29360 29172 29365 + 29366 29360 29365 + 29361 29360 29366 + 29366 29362 29361 + 29367 29362 29366 + 29362 29367 29363 + 29171 29365 29172 + 29368 29365 29171 + 29365 29368 29366 + 29368 29369 29366 + 29366 29369 29367 + 29367 29369 29370 + 29371 29367 29370 + 29367 29371 29363 + 29171 29372 29368 + 29368 29372 29325 + 29325 29373 29368 + 29374 29368 29373 + 29374 29369 29368 + 29369 29374 29370 + 29372 29171 29170 + 29170 29177 29372 + 29372 29177 29326 + 29326 29325 29372 + 29321 29326 29177 + 29177 29176 29321 + 29321 29176 29375 + 29375 29317 29321 + 29317 29316 29321 + 29175 29375 29176 + 29375 29175 29174 + 29174 29376 29375 + 29375 29376 29377 + 29377 29317 29375 + 29308 29317 29377 + 29376 29174 29182 + 29182 29378 29376 + 29377 29376 29378 + 29378 29379 29377 + 29308 29377 29379 + 29379 29380 29308 + 29308 29380 29381 + 29381 29309 29308 + 29382 29378 29182 + 29378 29382 29383 + 29383 29379 29378 + 29379 29383 29380 + 29380 29383 29384 + 29384 29381 29380 + 29384 29385 29381 + 29381 29385 29386 + 29386 29309 29381 + 29382 29182 29181 + 29181 29387 29382 + 29382 29387 29388 + 29383 29382 29388 + 29388 29389 29383 + 29389 29390 29383 + 29390 29384 29383 + 29385 29384 29390 + 29181 29391 29387 + 29387 29391 29392 + 29392 29388 29387 + 29388 29392 29393 + 29388 29393 29394 + 29394 29389 29388 + 29391 29181 29180 + 29180 29395 29391 + 29392 29391 29395 + 29396 29392 29395 + 29393 29392 29396 + 29396 29397 29393 + 29393 29397 29398 + 29394 29393 29398 + 29395 29180 29186 + 29395 29186 29399 + 29399 29400 29395 + 29395 29400 29396 + 29401 29396 29400 + 29396 29401 29397 + 29402 29397 29401 + 29397 29402 29398 + 29399 29186 29185 + 29185 29403 29399 + 29404 29399 29403 + 29400 29399 29404 + 29404 29405 29400 + 29400 29405 29401 + 29401 29405 29406 + 29406 29407 29401 + 29407 29402 29401 + 29191 29403 29185 + 29403 29191 29408 + 29408 29409 29403 + 29403 29409 29404 + 29404 29409 29410 + 29410 29411 29404 + 29405 29404 29411 + 29411 29406 29405 + 29408 29191 29190 + 29190 29412 29408 + 29408 29412 29413 + 29413 29414 29408 + 29409 29408 29414 + 29414 29410 29409 + 29190 29196 29412 + 29412 29196 29195 + 29195 29415 29412 + 29412 29415 29413 + 29416 29413 29415 + 29413 29416 29417 + 29417 29418 29413 + 29413 29418 29419 + 29419 29414 29413 + 29410 29414 29419 + 29420 29415 29195 + 29415 29420 29416 + 29420 29421 29416 + 29421 29422 29416 + 29417 29416 29422 + 29195 29423 29420 + 29420 29423 29424 + 29424 29421 29420 + 29421 29424 29425 + 29421 29425 29426 + 29426 29422 29421 + 29427 29422 29426 + 29422 29427 29417 + 29423 29195 29428 + 29428 29429 29423 + 29424 29423 29429 + 29429 29430 29424 + 29425 29424 29430 + 29194 29428 29195 + 29431 29428 29194 + 29428 29431 29429 + 29429 29431 29432 + 29432 29430 29429 + 29430 29432 29433 + 29430 29433 29425 + 29194 29193 29431 + 29432 29431 29193 + 29203 29432 29193 + 29433 29432 29203 + 29203 29208 29433 + 29425 29433 29208 + 29208 29434 29425 + 29434 29435 29425 + 29435 29436 29425 + 29436 29426 29425 + 29427 29426 29436 + 29436 29437 29427 + 29417 29427 29437 + 29207 29434 29208 + 29213 29434 29207 + 29434 29213 29435 + 29213 29438 29435 + 29435 29438 29439 + 29439 29440 29435 + 29435 29440 29436 + 29440 29441 29436 + 29436 29441 29437 + 29442 29437 29441 + 29437 29442 29417 + 29438 29213 29212 + 29212 29218 29438 + 29439 29438 29218 + 29218 29223 29439 + 29439 29223 29443 + 29440 29439 29443 + 29443 29444 29440 + 29440 29444 29445 + 29445 29441 29440 + 29445 29442 29441 + 29223 29228 29443 + 29446 29443 29228 + 29444 29443 29446 + 29446 29447 29444 + 29444 29447 29448 + 29448 29445 29444 + 29448 29442 29445 + 29442 29448 29449 + 29449 29450 29442 + 29442 29450 29417 + 29228 29451 29446 + 29452 29446 29451 + 29447 29446 29452 + 29452 29453 29447 + 29448 29447 29453 + 29449 29448 29453 + 29453 29454 29449 + 29454 29455 29449 + 29449 29455 29450 + 29451 29228 29227 + 29227 29456 29451 + 29451 29456 29457 + 29452 29451 29457 + 29458 29452 29457 + 29452 29458 29454 + 29454 29453 29452 + 29456 29227 29226 + 29226 29233 29456 + 29459 29456 29233 + 29456 29459 29457 + 29457 29459 29460 + 29461 29457 29460 + 29457 29461 29458 + 29462 29458 29461 + 29454 29458 29462 + 29233 29463 29459 + 29460 29459 29463 + 29463 29238 29460 + 29460 29238 29237 + 29464 29460 29237 + 29461 29460 29464 + 29464 29465 29461 + 29461 29465 29462 + 29232 29463 29233 + 29463 29232 29238 + 29330 29373 29325 + 29373 29330 29466 + 29466 29374 29373 + 29374 29466 29467 + 29467 29370 29374 + 29370 29467 29468 + 29468 29371 29370 + 29335 29466 29330 + 29466 29335 29469 + 29467 29466 29469 + 29468 29467 29469 + 29470 29468 29469 + 29468 29470 29363 + 29363 29371 29468 + 29471 29469 29335 + 29469 29471 29470 + 29470 29471 29472 + 29472 29473 29470 + 29473 29364 29470 + 29364 29363 29470 + 29335 29474 29471 + 29471 29474 29340 + 29340 29472 29471 + 29345 29472 29340 + 29472 29345 29475 + 29475 29473 29472 + 29473 29475 29364 + 29364 29475 29350 + 29350 29475 29345 + 29334 29474 29335 + 29340 29474 29334 + 29476 29462 29465 + 29462 29476 29477 + 29477 29478 29462 + 29462 29478 29454 + 29454 29478 29479 + 29479 29455 29454 + 29465 29480 29476 + 29476 29480 29481 + 29481 29482 29476 + 29482 29483 29476 + 29477 29476 29483 + 29480 29465 29464 + 29480 29464 29484 + 29484 29481 29480 + 29481 29484 29485 + 29481 29485 29486 + 29486 29482 29481 + 29487 29482 29486 + 29482 29487 29488 + 29488 29483 29482 + 29489 29484 29464 + 29485 29484 29489 + 29489 29490 29485 + 29485 29490 29491 + 29486 29485 29491 + 29491 29492 29486 + 29487 29486 29492 + 29492 29493 29487 + 29488 29487 29493 + 29237 29489 29464 + 29243 29489 29237 + 29489 29243 29490 + 29490 29243 29242 + 29242 29491 29490 + 29242 29494 29491 + 29491 29494 29495 + 29495 29492 29491 + 29492 29495 29496 + 29496 29493 29492 + 29493 29496 29497 + 29497 29498 29493 + 29493 29498 29488 + 29494 29242 29241 + 29241 29248 29494 + 29494 29248 29499 + 29495 29494 29499 + 29499 29500 29495 + 29496 29495 29500 + 29500 29501 29496 + 29496 29501 29502 + 29497 29496 29502 + 29248 29503 29499 + 29504 29499 29503 + 29386 29499 29504 + 29499 29386 29505 + 29505 29500 29499 + 29500 29505 29501 + 29501 29505 29506 + 29506 29502 29501 + 29247 29503 29248 + 29247 29507 29503 + 29503 29507 29504 + 29504 29507 29253 + 29253 29310 29504 + 29309 29504 29310 + 29504 29309 29386 + 29507 29247 29246 + 29246 29253 29507 + 29304 29310 29253 + 29253 29252 29304 + 29304 29252 29258 + 29258 29305 29304 + 29306 29305 29258 + 29258 29508 29306 + 29509 29306 29508 + 29301 29306 29509 + 29509 29510 29301 + 29510 29292 29301 + 29257 29508 29258 + 29508 29257 29267 + 29267 29511 29508 + 29511 29509 29508 + 29509 29511 29512 + 29513 29509 29512 + 29510 29509 29513 + 29513 29514 29510 + 29292 29510 29514 + 29293 29292 29514 + 29511 29267 29515 + 29515 29512 29511 + 29512 29515 29516 + 29516 29517 29512 + 29513 29512 29517 + 29518 29513 29517 + 29514 29513 29518 + 29518 29519 29514 + 29519 29293 29514 + 29519 29294 29293 + 29515 29267 29266 + 29515 29266 29520 + 29520 29516 29515 + 29516 29520 29521 + 29522 29516 29521 + 29517 29516 29522 + 29522 29523 29517 + 29517 29523 29524 + 29524 29518 29517 + 29519 29518 29524 + 29271 29520 29266 + 29520 29271 29525 + 29525 29521 29520 + 29521 29525 29526 + 29526 29527 29521 + 29527 29522 29521 + 29523 29522 29527 + 29527 29528 29523 + 29528 29524 29523 + 29525 29271 29529 + 29525 29529 29530 + 29530 29526 29525 + 29530 29531 29526 + 29532 29526 29531 + 29527 29526 29532 + 29532 29528 29527 + 29524 29528 29532 + 29533 29524 29532 + 29524 29533 29519 + 29271 29270 29529 + 29280 29529 29270 + 29529 29280 29530 + 29280 29534 29530 + 29530 29534 29535 + 29535 29536 29530 + 29531 29530 29536 + 29537 29531 29536 + 29537 29538 29531 + 29531 29538 29532 + 29532 29538 29533 + 29534 29280 29539 + 29539 29540 29534 + 29540 29535 29534 + 29535 29540 29541 + 29536 29535 29541 + 29541 29542 29536 + 29536 29542 29537 + 29542 29543 29537 + 29538 29537 29543 + 29279 29539 29280 + 29540 29539 29279 + 29279 29278 29540 + 29540 29278 29541 + 29278 29284 29541 + 29542 29541 29284 + 29284 29289 29542 + 29542 29289 29543 + 29289 29288 29543 + 29544 29543 29288 + 29543 29544 29538 + 29538 29544 29533 + 29519 29533 29544 + 29544 29294 29519 + 29288 29294 29544 + 29505 29386 29385 + 29385 29506 29505 + 29390 29506 29385 + 29506 29390 29502 + 29502 29390 29389 + 29389 29545 29502 + 29502 29545 29546 + 29546 29497 29502 + 29547 29497 29546 + 29497 29547 29548 + 29548 29498 29497 + 29545 29389 29394 + 29545 29394 29549 + 29549 29546 29545 + 29546 29549 29550 + 29546 29550 29547 + 29547 29550 29551 + 29551 29552 29547 + 29548 29547 29552 + 29398 29549 29394 + 29550 29549 29398 + 29398 29551 29550 + 29398 29553 29551 + 29551 29553 29554 + 29554 29552 29551 + 29552 29554 29555 + 29556 29552 29555 + 29552 29556 29548 + 29556 29557 29548 + 29498 29548 29557 + 29557 29488 29498 + 29558 29553 29398 + 29553 29558 29559 + 29559 29554 29553 + 29555 29554 29559 + 29402 29558 29398 + 29558 29402 29407 + 29558 29407 29406 + 29406 29559 29558 + 29560 29559 29406 + 29559 29560 29555 + 29555 29560 29561 + 29561 29562 29555 + 29562 29563 29555 + 29556 29555 29563 + 29563 29564 29556 + 29556 29564 29557 + 29406 29411 29560 + 29560 29411 29410 + 29410 29561 29560 + 29419 29561 29410 + 29561 29419 29565 + 29565 29562 29561 + 29562 29565 29479 + 29479 29566 29562 + 29563 29562 29566 + 29567 29563 29566 + 29563 29567 29564 + 29557 29564 29567 + 29568 29557 29567 + 29488 29557 29568 + 29568 29483 29488 + 29565 29419 29418 + 29418 29569 29565 + 29569 29455 29565 + 29455 29479 29565 + 29418 29417 29569 + 29417 29450 29569 + 29455 29569 29450 + 29483 29568 29477 + 29566 29477 29568 + 29478 29477 29566 + 29566 29479 29478 + 29568 29567 29566 + 29570 29571 29572 + 29570 29573 29571 + 29574 29571 29573 + 29571 29574 29575 + 29572 29571 29575 + 29576 29570 29572 + 29570 29576 29577 + 29577 29578 29570 + 29573 29570 29578 + 29579 29573 29578 + 29580 29573 29579 + 29573 29580 29574 + 29572 29581 29576 + 29577 29576 29581 + 29581 29582 29577 + 29583 29577 29582 + 29578 29577 29583 + 29583 29584 29578 + 29578 29584 29585 + 29585 29579 29578 + 29581 29572 29586 + 29587 29581 29586 + 29581 29587 29588 + 29588 29582 29581 + 29582 29588 29589 + 29589 29590 29582 + 29582 29590 29583 + 29591 29586 29572 + 29586 29591 29592 + 29592 29593 29586 + 29593 29587 29586 + 29587 29593 29594 + 29588 29587 29594 + 29589 29588 29594 + 29595 29591 29572 + 29591 29595 29596 + 29596 29597 29591 + 29597 29592 29591 + 29592 29597 29598 + 29599 29592 29598 + 29593 29592 29599 + 29599 29594 29593 + 29575 29595 29572 + 29595 29575 29600 + 29600 29601 29595 + 29601 29596 29595 + 29596 29601 29602 + 29603 29596 29602 + 29597 29596 29603 + 29603 29598 29597 + 29604 29600 29575 + 29600 29604 29605 + 29606 29600 29605 + 29601 29600 29606 + 29606 29602 29601 + 29602 29606 29607 + 29607 29608 29602 + 29603 29602 29608 + 29604 29575 29609 + 29610 29604 29609 + 29604 29610 29611 + 29611 29605 29604 + 29605 29611 29612 + 29612 29613 29605 + 29606 29605 29613 + 29613 29607 29606 + 29614 29609 29575 + 29615 29609 29614 + 29615 29610 29609 + 29611 29610 29615 + 29615 29616 29611 + 29612 29611 29616 + 29616 29617 29612 + 29618 29612 29617 + 29613 29612 29618 + 29574 29614 29575 + 29614 29574 29619 + 29619 29620 29614 + 29620 29621 29614 + 29621 29615 29614 + 29615 29621 29622 + 29622 29616 29615 + 29616 29622 29617 + 29580 29619 29574 + 29580 29623 29619 + 29623 29624 29619 + 29620 29619 29624 + 29624 29625 29620 + 29621 29620 29625 + 29622 29621 29625 + 29626 29622 29625 + 29622 29626 29617 + 29579 29623 29580 + 29623 29579 29585 + 29585 29627 29623 + 29623 29627 29628 + 29628 29624 29623 + 29625 29624 29628 + 29628 29629 29625 + 29625 29629 29626 + 29630 29626 29629 + 29617 29626 29630 + 29630 29631 29617 + 29617 29631 29618 + 29627 29585 29632 + 29632 29633 29627 + 29627 29633 29634 + 29634 29628 29627 + 29629 29628 29634 + 29634 29635 29629 + 29629 29635 29630 + 29636 29630 29635 + 29631 29630 29636 + 29632 29585 29584 + 29584 29637 29632 + 29638 29632 29637 + 29633 29632 29638 + 29638 29639 29633 + 29633 29639 29640 + 29640 29634 29633 + 29635 29634 29640 + 29640 29641 29635 + 29635 29641 29636 + 29642 29637 29584 + 29637 29642 29643 + 29643 29644 29637 + 29637 29644 29638 + 29645 29638 29644 + 29639 29638 29645 + 29584 29583 29642 + 29642 29583 29590 + 29590 29646 29642 + 29643 29642 29646 + 29646 29647 29643 + 29648 29643 29647 + 29644 29643 29648 + 29648 29649 29644 + 29644 29649 29645 + 29650 29646 29590 + 29646 29650 29651 + 29651 29647 29646 + 29647 29651 29652 + 29652 29653 29647 + 29647 29653 29648 + 29654 29648 29653 + 29649 29648 29654 + 29590 29589 29650 + 29650 29589 29655 + 29655 29656 29650 + 29650 29656 29657 + 29657 29651 29650 + 29652 29651 29657 + 29657 29658 29652 + 29659 29652 29658 + 29653 29652 29659 + 29594 29655 29589 + 29660 29655 29594 + 29655 29660 29661 + 29661 29656 29655 + 29656 29661 29662 + 29662 29657 29656 + 29657 29662 29663 + 29663 29658 29657 + 29594 29599 29660 + 29660 29599 29598 + 29598 29664 29660 + 29661 29660 29664 + 29664 29665 29661 + 29662 29661 29665 + 29665 29666 29662 + 29663 29662 29666 + 29666 29667 29663 + 29668 29663 29667 + 29658 29663 29668 + 29669 29664 29598 + 29664 29669 29670 + 29670 29665 29664 + 29665 29670 29671 + 29671 29666 29665 + 29666 29671 29672 + 29672 29667 29666 + 29598 29603 29669 + 29669 29603 29608 + 29670 29669 29608 + 29608 29673 29670 + 29671 29670 29673 + 29673 29674 29671 + 29672 29671 29674 + 29674 29675 29672 + 29676 29672 29675 + 29667 29672 29676 + 29676 29677 29667 + 29667 29677 29668 + 29678 29673 29608 + 29673 29678 29679 + 29679 29674 29673 + 29674 29679 29680 + 29680 29675 29674 + 29675 29680 29681 + 29681 29682 29675 + 29675 29682 29676 + 29608 29607 29678 + 29678 29607 29613 + 29613 29683 29678 + 29679 29678 29683 + 29683 29684 29679 + 29680 29679 29684 + 29684 29685 29680 + 29681 29680 29685 + 29685 29686 29681 + 29687 29681 29686 + 29682 29681 29687 + 29618 29683 29613 + 29683 29618 29688 + 29688 29684 29683 + 29684 29688 29689 + 29689 29685 29684 + 29685 29689 29690 + 29690 29686 29685 + 29686 29690 29691 + 29691 29692 29686 + 29686 29692 29687 + 29688 29618 29631 + 29631 29693 29688 + 29689 29688 29693 + 29693 29694 29689 + 29690 29689 29694 + 29694 29695 29690 + 29691 29690 29695 + 29636 29693 29631 + 29693 29636 29696 + 29696 29694 29693 + 29694 29696 29697 + 29697 29695 29694 + 29695 29697 29698 + 29698 29699 29695 + 29695 29699 29691 + 29696 29636 29641 + 29641 29700 29696 + 29697 29696 29700 + 29700 29701 29697 + 29698 29697 29701 + 29701 29702 29698 + 29703 29698 29702 + 29699 29698 29703 + 29704 29700 29641 + 29700 29704 29705 + 29705 29701 29700 + 29701 29705 29706 + 29706 29702 29701 + 29702 29706 29707 + 29707 29708 29702 + 29702 29708 29703 + 29641 29640 29704 + 29704 29640 29639 + 29639 29709 29704 + 29704 29709 29710 + 29710 29705 29704 + 29706 29705 29710 + 29710 29711 29706 + 29706 29711 29712 + 29712 29707 29706 + 29645 29709 29639 + 29709 29645 29713 + 29713 29710 29709 + 29710 29713 29714 + 29714 29711 29710 + 29711 29714 29715 + 29715 29712 29711 + 29713 29645 29649 + 29649 29716 29713 + 29714 29713 29716 + 29716 29717 29714 + 29714 29717 29718 + 29718 29715 29714 + 29719 29715 29718 + 29712 29715 29719 + 29654 29716 29649 + 29716 29654 29720 + 29720 29717 29716 + 29717 29720 29721 + 29721 29722 29717 + 29717 29722 29718 + 29723 29718 29722 + 29718 29723 29724 + 29718 29724 29719 + 29720 29654 29725 + 29725 29726 29720 + 29720 29726 29727 + 29727 29721 29720 + 29728 29721 29727 + 29728 29722 29721 + 29722 29728 29723 + 29653 29725 29654 + 29659 29725 29653 + 29725 29659 29729 + 29729 29726 29725 + 29726 29729 29730 + 29730 29731 29726 + 29726 29731 29727 + 29729 29659 29732 + 29732 29733 29729 + 29729 29733 29734 + 29734 29730 29729 + 29735 29730 29734 + 29730 29735 29736 + 29736 29731 29730 + 29658 29732 29659 + 29668 29732 29658 + 29732 29668 29737 + 29737 29733 29732 + 29733 29737 29738 + 29738 29734 29733 + 29739 29734 29738 + 29734 29739 29735 + 29740 29735 29739 + 29736 29735 29740 + 29737 29668 29677 + 29677 29741 29737 + 29737 29741 29742 + 29742 29738 29737 + 29743 29738 29742 + 29738 29743 29739 + 29739 29743 29744 + 29744 29745 29739 + 29739 29745 29740 + 29746 29741 29677 + 29741 29746 29747 + 29747 29742 29741 + 29748 29742 29747 + 29742 29748 29743 + 29744 29743 29748 + 29677 29676 29746 + 29746 29676 29682 + 29682 29749 29746 + 29746 29749 29750 + 29750 29747 29746 + 29751 29747 29750 + 29747 29751 29748 + 29748 29751 29752 + 29752 29753 29748 + 29748 29753 29744 + 29687 29749 29682 + 29749 29687 29754 + 29754 29750 29749 + 29750 29754 29755 + 29755 29756 29750 + 29750 29756 29751 + 29752 29751 29756 + 29757 29754 29687 + 29755 29754 29757 + 29687 29692 29757 + 29758 29757 29692 + 29759 29757 29758 + 29757 29759 29755 + 29692 29691 29758 + 29760 29758 29691 + 29761 29758 29760 + 29758 29761 29759 + 29759 29761 29762 + 29762 29763 29759 + 29755 29759 29763 + 29691 29699 29760 + 29699 29764 29760 + 29765 29760 29764 + 29760 29765 29766 + 29760 29766 29761 + 29761 29766 29767 + 29767 29762 29761 + 29768 29762 29767 + 29763 29762 29768 + 29703 29764 29699 + 29764 29703 29769 + 29769 29770 29764 + 29764 29770 29765 + 29765 29770 29771 + 29771 29772 29765 + 29766 29765 29772 + 29772 29767 29766 + 29769 29703 29708 + 29708 29773 29769 + 29769 29773 29774 + 29774 29775 29769 + 29770 29769 29775 + 29775 29771 29770 + 29771 29775 29776 + 29771 29776 29777 + 29777 29772 29771 + 29767 29772 29777 + 29773 29708 29707 + 29707 29778 29773 + 29773 29778 29779 + 29779 29774 29773 + 29774 29779 29780 + 29780 29781 29774 + 29774 29781 29776 + 29776 29775 29774 + 29778 29707 29712 + 29712 29782 29778 + 29778 29782 29783 + 29783 29779 29778 + 29780 29779 29783 + 29783 29784 29780 + 29780 29784 29785 + 29781 29780 29785 + 29785 29786 29781 + 29776 29781 29786 + 29777 29776 29786 + 29719 29782 29712 + 29782 29719 29787 + 29787 29788 29782 + 29782 29788 29783 + 29789 29783 29788 + 29783 29789 29784 + 29784 29789 29790 + 29790 29791 29784 + 29784 29791 29785 + 29792 29787 29719 + 29793 29787 29792 + 29793 29788 29787 + 29788 29793 29789 + 29789 29793 29794 + 29794 29795 29789 + 29795 29790 29789 + 29719 29724 29792 + 29796 29792 29724 + 29792 29796 29797 + 29797 29794 29792 + 29792 29794 29793 + 29724 29723 29796 + 29798 29796 29723 + 29797 29796 29798 + 29798 29799 29797 + 29797 29799 29800 + 29794 29797 29800 + 29800 29795 29794 + 29801 29795 29800 + 29795 29801 29790 + 29802 29798 29723 + 29803 29798 29802 + 29798 29803 29799 + 29799 29803 29804 + 29799 29804 29800 + 29801 29800 29804 + 29804 29805 29801 + 29801 29805 29806 + 29801 29806 29790 + 29807 29802 29723 + 29808 29802 29807 + 29809 29802 29808 + 29802 29809 29803 + 29809 29810 29803 + 29810 29811 29803 + 29803 29811 29804 + 29805 29804 29811 + 29723 29728 29807 + 29727 29807 29728 + 29812 29807 29727 + 29807 29812 29808 + 29808 29812 29813 + 29813 29814 29808 + 29815 29808 29814 + 29808 29815 29809 + 29810 29809 29815 + 29727 29816 29812 + 29812 29816 29817 + 29817 29813 29812 + 29818 29813 29817 + 29813 29818 29819 + 29819 29814 29813 + 29820 29814 29819 + 29814 29820 29815 + 29816 29727 29731 + 29731 29736 29816 + 29817 29816 29736 + 29736 29821 29817 + 29822 29817 29821 + 29817 29822 29818 + 29818 29822 29823 + 29823 29824 29818 + 29819 29818 29824 + 29825 29819 29824 + 29819 29825 29820 + 29740 29821 29736 + 29821 29740 29826 + 29826 29827 29821 + 29821 29827 29822 + 29822 29827 29823 + 29828 29823 29827 + 29824 29823 29828 + 29829 29824 29828 + 29824 29829 29825 + 29830 29825 29829 + 29820 29825 29830 + 29826 29740 29745 + 29745 29831 29826 + 29828 29826 29831 + 29827 29826 29828 + 29831 29745 29744 + 29744 29832 29831 + 29831 29832 29833 + 29833 29834 29831 + 29831 29834 29828 + 29829 29828 29834 + 29832 29744 29753 + 29753 29835 29832 + 29833 29832 29835 + 29835 29836 29833 + 29837 29833 29836 + 29837 29834 29833 + 29834 29837 29829 + 29829 29837 29838 + 29838 29839 29829 + 29839 29830 29829 + 29835 29753 29752 + 29752 29840 29835 + 29835 29840 29841 + 29841 29836 29835 + 29842 29836 29841 + 29836 29842 29837 + 29837 29842 29838 + 29840 29752 29843 + 29843 29844 29840 + 29841 29840 29844 + 29845 29841 29844 + 29842 29841 29845 + 29845 29838 29842 + 29846 29838 29845 + 29838 29846 29847 + 29847 29839 29838 + 29756 29843 29752 + 29848 29843 29756 + 29844 29843 29848 + 29848 29849 29844 + 29844 29849 29850 + 29850 29851 29844 + 29844 29851 29845 + 29846 29845 29851 + 29756 29755 29848 + 29852 29848 29755 + 29849 29848 29852 + 29852 29853 29849 + 29853 29854 29849 + 29854 29850 29849 + 29855 29850 29854 + 29855 29851 29850 + 29851 29855 29846 + 29846 29855 29856 + 29846 29856 29847 + 29857 29852 29755 + 29858 29852 29857 + 29858 29853 29852 + 29853 29858 29859 + 29859 29854 29853 + 29859 29856 29854 + 29854 29856 29855 + 29763 29857 29755 + 29860 29857 29763 + 29861 29857 29860 + 29857 29861 29858 + 29859 29858 29861 + 29861 29862 29859 + 29862 29863 29859 + 29856 29859 29863 + 29863 29864 29856 + 29856 29864 29847 + 29763 29865 29860 + 29860 29865 29866 + 29866 29867 29860 + 29867 29868 29860 + 29861 29860 29868 + 29868 29862 29861 + 29768 29865 29763 + 29865 29768 29869 + 29869 29866 29865 + 29870 29866 29869 + 29866 29870 29871 + 29871 29867 29866 + 29867 29871 29872 + 29867 29872 29873 + 29873 29868 29867 + 29873 29862 29868 + 29768 29874 29869 + 29875 29869 29874 + 29869 29875 29870 + 29870 29875 29786 + 29786 29876 29870 + 29870 29876 29877 + 29877 29871 29870 + 29767 29874 29768 + 29777 29874 29767 + 29874 29777 29875 + 29786 29875 29777 + 29871 29877 29878 + 29879 29878 29877 + 29878 29879 29880 + 29880 29881 29878 + 29872 29878 29881 + 29872 29871 29878 + 29877 29882 29879 + 29879 29882 29883 + 29883 29884 29879 + 29879 29884 29885 + 29880 29879 29885 + 29839 29880 29885 + 29881 29880 29839 + 29882 29877 29876 + 29876 29886 29882 + 29883 29882 29886 + 29886 29887 29883 + 29888 29883 29887 + 29883 29888 29889 + 29884 29883 29889 + 29884 29889 29890 + 29890 29885 29884 + 29886 29876 29786 + 29786 29785 29886 + 29886 29785 29791 + 29791 29887 29886 + 29887 29791 29790 + 29790 29806 29887 + 29887 29806 29888 + 29805 29888 29806 + 29805 29891 29888 + 29891 29889 29888 + 29889 29891 29892 + 29890 29889 29892 + 29893 29890 29892 + 29890 29893 29830 + 29830 29885 29890 + 29885 29830 29839 + 29811 29891 29805 + 29891 29811 29810 + 29810 29892 29891 + 29810 29894 29892 + 29892 29894 29893 + 29893 29894 29815 + 29820 29893 29815 + 29830 29893 29820 + 29894 29810 29815 + 29839 29847 29881 + 29881 29847 29864 + 29864 29895 29881 + 29881 29895 29872 + 29895 29873 29872 + 29862 29873 29895 + 29895 29863 29862 + 29863 29895 29864 + 29896 29897 29898 + 29897 29896 29899 + 29899 29900 29897 + 29897 29900 29901 + 29901 29902 29897 + 29897 29902 29898 + 29898 29903 29896 + 29903 29904 29896 + 29899 29896 29904 + 29904 29905 29899 + 29906 29899 29905 + 29900 29899 29906 + 29903 29898 29907 + 29908 29903 29907 + 29903 29908 29909 + 29909 29904 29903 + 29904 29909 29910 + 29910 29905 29904 + 29907 29898 29902 + 29902 29911 29907 + 29907 29911 29912 + 29913 29907 29912 + 29907 29913 29914 + 29907 29914 29915 + 29915 29916 29907 + 29916 29908 29907 + 29911 29902 29901 + 29901 29917 29911 + 29911 29917 29918 + 29918 29912 29911 + 29919 29912 29918 + 29912 29919 29913 + 29913 29919 29920 + 29921 29913 29920 + 29913 29921 29914 + 29917 29901 29922 + 29922 29923 29917 + 29917 29923 29924 + 29924 29918 29917 + 29925 29918 29924 + 29918 29925 29919 + 29919 29925 29926 + 29926 29920 29919 + 29922 29901 29900 + 29900 29927 29922 + 29928 29922 29927 + 29923 29922 29928 + 29928 29929 29923 + 29923 29929 29930 + 29930 29924 29923 + 29931 29924 29930 + 29924 29931 29925 + 29906 29927 29900 + 29927 29906 29932 + 29932 29933 29927 + 29927 29933 29928 + 29934 29928 29933 + 29929 29928 29934 + 29934 29935 29929 + 29929 29935 29936 + 29936 29930 29929 + 29932 29906 29937 + 29937 29938 29932 + 29939 29932 29938 + 29933 29932 29939 + 29939 29940 29933 + 29933 29940 29934 + 29941 29934 29940 + 29935 29934 29941 + 29905 29937 29906 + 29942 29937 29905 + 29937 29942 29943 + 29943 29938 29937 + 29938 29943 29944 + 29944 29945 29938 + 29938 29945 29939 + 29946 29939 29945 + 29940 29939 29946 + 29905 29910 29942 + 29942 29910 29947 + 29947 29948 29942 + 29943 29942 29948 + 29948 29949 29943 + 29944 29943 29949 + 29949 29950 29944 + 29951 29944 29950 + 29945 29944 29951 + 29952 29947 29910 + 29953 29947 29952 + 29947 29953 29954 + 29954 29948 29947 + 29948 29954 29955 + 29955 29949 29948 + 29949 29955 29956 + 29956 29950 29949 + 29910 29909 29952 + 29908 29952 29909 + 29908 29916 29952 + 29916 29957 29952 + 29952 29957 29953 + 29953 29957 29958 + 29958 29959 29953 + 29954 29953 29959 + 29959 29960 29954 + 29955 29954 29960 + 29960 29961 29955 + 29956 29955 29961 + 29916 29958 29957 + 29916 29915 29958 + 29915 29962 29958 + 29958 29962 29963 + 29963 29959 29958 + 29959 29963 29964 + 29964 29960 29959 + 29960 29964 29965 + 29965 29961 29960 + 29915 29966 29962 + 29963 29962 29966 + 29966 29967 29963 + 29964 29963 29967 + 29967 29968 29964 + 29965 29964 29968 + 29968 29969 29965 + 29970 29965 29969 + 29961 29965 29970 + 29971 29966 29915 + 29966 29971 29972 + 29972 29967 29966 + 29967 29972 29973 + 29973 29968 29967 + 29968 29973 29974 + 29974 29969 29968 + 29915 29975 29971 + 29975 29976 29971 + 29972 29971 29976 + 29976 29977 29972 + 29972 29977 29978 + 29978 29973 29972 + 29974 29973 29978 + 29979 29975 29915 + 29975 29979 29976 + 29979 29980 29976 + 29976 29980 29981 + 29981 29977 29976 + 29977 29981 29982 + 29982 29978 29977 + 29983 29979 29915 + 29979 29983 29984 + 29979 29984 29980 + 29981 29980 29984 + 29984 29985 29981 + 29982 29981 29985 + 29985 29986 29982 + 29987 29982 29986 + 29978 29982 29987 + 29914 29983 29915 + 29983 29914 29988 + 29988 29989 29983 + 29983 29989 29990 + 29983 29990 29984 + 29984 29990 29991 + 29991 29985 29984 + 29985 29991 29992 + 29992 29986 29985 + 29914 29993 29988 + 29994 29988 29993 + 29989 29988 29994 + 29994 29995 29989 + 29989 29995 29991 + 29991 29990 29989 + 29996 29993 29914 + 29993 29996 29997 + 29997 29998 29993 + 29993 29998 29994 + 29999 29994 29998 + 29995 29994 29999 + 29914 29921 29996 + 29921 30000 29996 + 29997 29996 30000 + 30000 30001 29997 + 30002 29997 30001 + 29998 29997 30002 + 30002 30003 29998 + 29998 30003 29999 + 29920 30000 29921 + 30000 29920 29926 + 29926 30001 30000 + 30001 29926 30004 + 30004 30005 30001 + 30001 30005 30002 + 30006 30002 30005 + 30003 30002 30006 + 30006 30007 30003 + 30003 30007 30008 + 30008 29999 30003 + 30004 29926 29925 + 29925 29931 30004 + 30009 30004 29931 + 30005 30004 30009 + 30009 30010 30005 + 30005 30010 30006 + 30011 30006 30010 + 30007 30006 30011 + 30011 30012 30007 + 30008 30007 30012 + 29931 30013 30009 + 30014 30009 30013 + 30010 30009 30014 + 30014 30015 30010 + 30010 30015 30011 + 30016 30011 30015 + 30012 30011 30016 + 29930 30013 29931 + 30013 29930 29936 + 29936 30017 30013 + 30013 30017 30014 + 30018 30014 30017 + 30014 30018 30019 + 30015 30014 30019 + 30015 30019 30016 + 30017 29936 30020 + 30020 30021 30017 + 30017 30021 30018 + 30022 30018 30021 + 30019 30018 30022 + 30022 30023 30019 + 30016 30019 30023 + 30020 29936 29935 + 29935 30024 30020 + 30020 30024 30025 + 30025 30026 30020 + 30021 30020 30026 + 30026 30027 30021 + 30027 30022 30021 + 29941 30024 29935 + 30024 29941 30028 + 30028 30025 30024 + 30025 30028 30029 + 30029 30030 30025 + 30025 30030 30031 + 30031 30026 30025 + 30027 30026 30031 + 30031 30032 30027 + 30027 30032 30022 + 30028 29941 30033 + 30033 30034 30028 + 30029 30028 30034 + 30034 30035 30029 + 30029 30035 30036 + 30036 30037 30029 + 30030 30029 30037 + 29941 30038 30033 + 30039 30033 30038 + 30033 30039 30040 + 30033 30040 30034 + 30040 30041 30034 + 30035 30034 30041 + 30035 30041 30042 + 30042 30036 30035 + 29940 30038 29941 + 29946 30038 29940 + 30038 29946 30039 + 30039 29946 30043 + 30043 30044 30039 + 30040 30039 30044 + 30044 30045 30040 + 30041 30040 30045 + 30042 30041 30045 + 30046 30042 30045 + 30047 30042 30046 + 30036 30042 30047 + 29945 30043 29946 + 29951 30043 29945 + 30043 29951 30048 + 30048 30044 30043 + 30045 30044 30048 + 30048 30049 30045 + 30045 30049 30050 + 30050 30051 30045 + 30045 30051 30046 + 30052 30048 29951 + 30052 30053 30048 + 30053 30049 30048 + 30050 30049 30053 + 29951 30054 30052 + 30055 30052 30054 + 30052 30055 30056 + 30053 30052 30056 + 30053 30056 30057 + 30057 30058 30053 + 30053 30058 30050 + 29950 30054 29951 + 30059 30054 29950 + 30054 30059 30055 + 30060 30055 30059 + 30056 30055 30060 + 30060 30061 30056 + 30056 30061 30062 + 30062 30057 30056 + 30063 30057 30062 + 30058 30057 30063 + 29950 29956 30059 + 30059 29956 30064 + 30064 30065 30059 + 30059 30065 30060 + 30066 30060 30065 + 30060 30066 30067 + 30067 30061 30060 + 30061 30067 30068 + 30068 30062 30061 + 29961 30064 29956 + 29970 30064 29961 + 30064 29970 30069 + 30064 30069 30065 + 30065 30069 30066 + 30070 30066 30069 + 30067 30066 30070 + 30070 30071 30067 + 30067 30071 30072 + 30072 30068 30067 + 30069 29970 30073 + 30073 30074 30069 + 30069 30074 30070 + 30075 30070 30074 + 30070 30075 30076 + 30076 30071 30070 + 30071 30076 30077 + 30077 30072 30071 + 29969 30073 29970 + 30078 30073 29969 + 30073 30078 30079 + 30079 30074 30073 + 30074 30079 30075 + 30080 30075 30079 + 30076 30075 30080 + 30080 30081 30076 + 30077 30076 30081 + 29969 29974 30078 + 30078 29974 30082 + 30082 30083 30078 + 30079 30078 30083 + 30083 30084 30079 + 30079 30084 30080 + 30085 30080 30084 + 30081 30080 30085 + 29978 30082 29974 + 29987 30082 29978 + 30082 29987 30086 + 30086 30083 30082 + 30083 30086 30087 + 30087 30084 30083 + 30084 30087 30085 + 30088 30085 30087 + 30089 30085 30088 + 30085 30089 30081 + 30086 29987 30090 + 30090 30091 30086 + 30087 30086 30091 + 30091 30092 30087 + 30087 30092 30088 + 30093 30088 30092 + 30094 30088 30093 + 30088 30094 30089 + 29986 30090 29987 + 30095 30090 29986 + 30090 30095 30096 + 30096 30091 30090 + 30091 30096 30097 + 30097 30092 30091 + 30092 30097 30093 + 29986 29992 30095 + 30095 29992 30098 + 30098 30099 30095 + 30096 30095 30099 + 30099 30100 30096 + 30097 30096 30100 + 30100 30101 30097 + 30093 30097 30101 + 29995 30098 29992 + 29999 30098 29995 + 30098 29999 30008 + 30008 30099 30098 + 30099 30008 30102 + 30102 30100 30099 + 30100 30102 30103 + 30103 30101 30100 + 29992 29991 29995 + 30012 30102 30008 + 30103 30102 30012 + 30012 30104 30103 + 30103 30104 30105 + 30105 30106 30103 + 30101 30103 30106 + 30106 30107 30101 + 30101 30107 30093 + 30108 30093 30107 + 30093 30108 30094 + 30016 30104 30012 + 30104 30016 30109 + 30109 30110 30104 + 30104 30110 30105 + 30023 30109 30016 + 30109 30023 30111 + 30112 30109 30111 + 30112 30110 30109 + 30110 30112 30113 + 30113 30105 30110 + 30111 30023 30022 + 30032 30111 30022 + 30111 30032 30114 + 30112 30111 30114 + 30114 30113 30112 + 30115 30113 30114 + 30105 30113 30115 + 30115 30116 30105 + 30105 30116 30117 + 30117 30106 30105 + 30106 30117 30118 + 30118 30107 30106 + 30107 30118 30108 + 30119 30114 30032 + 30120 30114 30119 + 30114 30120 30115 + 30121 30115 30120 + 30116 30115 30121 + 30121 30122 30116 + 30116 30122 30123 + 30123 30117 30116 + 30118 30117 30123 + 30032 30031 30119 + 30124 30119 30031 + 30125 30119 30124 + 30119 30125 30120 + 30120 30125 30126 + 30126 30127 30120 + 30120 30127 30128 + 30128 30121 30120 + 30031 30030 30124 + 30037 30124 30030 + 30124 30037 30129 + 30124 30129 30125 + 30125 30129 30130 + 30130 30131 30125 + 30131 30132 30125 + 30132 30126 30125 + 30133 30126 30132 + 30133 30127 30126 + 30129 30037 30036 + 30036 30130 30129 + 30047 30130 30036 + 30130 30047 30134 + 30134 30131 30130 + 30131 30134 30135 + 30135 30136 30131 + 30131 30136 30137 + 30137 30132 30131 + 30137 30138 30132 + 30132 30138 30133 + 30139 30134 30047 + 30135 30134 30139 + 30139 30140 30135 + 30135 30140 30141 + 30141 30142 30135 + 30136 30135 30142 + 30142 30143 30136 + 30137 30136 30143 + 30144 30139 30047 + 30145 30139 30144 + 30145 30140 30139 + 30140 30145 30146 + 30146 30141 30140 + 30047 30147 30144 + 30148 30144 30147 + 30144 30148 30149 + 30149 30150 30144 + 30144 30150 30145 + 30046 30147 30047 + 30046 30151 30147 + 30147 30151 30148 + 30152 30148 30151 + 30152 30153 30148 + 30153 30149 30148 + 30153 30154 30149 + 30150 30149 30154 + 30154 30155 30150 + 30145 30150 30155 + 30151 30046 30051 + 30051 30152 30151 + 30152 30051 30050 + 30153 30152 30050 + 30050 30156 30153 + 30153 30156 30154 + 30156 30157 30154 + 30154 30157 30155 + 30155 30157 30158 + 30158 30159 30155 + 30155 30159 30145 + 30159 30146 30145 + 30160 30146 30159 + 30141 30146 30160 + 30156 30050 30058 + 30058 30161 30156 + 30157 30156 30161 + 30158 30157 30161 + 30162 30158 30161 + 30159 30158 30162 + 30159 30162 30160 + 30163 30160 30162 + 30164 30160 30163 + 30160 30164 30141 + 30063 30161 30058 + 30161 30063 30162 + 30162 30063 30163 + 30062 30163 30063 + 30163 30062 30068 + 30068 30165 30163 + 30163 30165 30164 + 30164 30165 30166 + 30166 30167 30164 + 30141 30164 30167 + 30167 30142 30141 + 30143 30142 30167 + 30165 30068 30072 + 30072 30166 30165 + 30166 30072 30077 + 30077 30168 30166 + 30166 30168 30169 + 30169 30167 30166 + 30167 30169 30143 + 30143 30169 30170 + 30170 30171 30143 + 30143 30171 30137 + 30168 30077 30172 + 30172 30173 30168 + 30168 30173 30174 + 30174 30170 30168 + 30170 30169 30168 + 30081 30172 30077 + 30175 30172 30081 + 30172 30175 30176 + 30176 30173 30172 + 30173 30176 30177 + 30177 30174 30173 + 30081 30089 30175 + 30175 30089 30094 + 30178 30175 30094 + 30176 30175 30178 + 30178 30179 30176 + 30176 30179 30180 + 30180 30177 30176 + 30181 30177 30180 + 30174 30177 30181 + 30094 30182 30178 + 30183 30178 30182 + 30179 30178 30183 + 30179 30183 30184 + 30184 30180 30179 + 30180 30184 30185 + 30180 30185 30181 + 30186 30182 30094 + 30182 30186 30187 + 30187 30188 30182 + 30182 30188 30183 + 30188 30189 30183 + 30189 30184 30183 + 30185 30184 30189 + 30189 30190 30185 + 30181 30185 30190 + 30094 30108 30186 + 30186 30108 30118 + 30118 30191 30186 + 30187 30186 30191 + 30191 30192 30187 + 30187 30192 30193 + 30193 30194 30187 + 30188 30187 30194 + 30194 30189 30188 + 30189 30194 30190 + 30123 30191 30118 + 30191 30123 30192 + 30192 30123 30122 + 30122 30193 30192 + 30193 30122 30121 + 30193 30121 30128 + 30128 30194 30193 + 30194 30128 30190 + 30195 30190 30128 + 30190 30195 30181 + 30196 30181 30195 + 30181 30196 30174 + 30174 30196 30197 + 30197 30170 30174 + 30170 30197 30171 + 30198 30195 30128 + 30199 30195 30198 + 30195 30199 30196 + 30197 30196 30199 + 30199 30133 30197 + 30133 30138 30197 + 30197 30138 30137 + 30171 30197 30137 + 30127 30198 30128 + 30199 30198 30127 + 30127 30133 30199 + 30200 30201 30202 + 30201 30200 30203 + 30201 30203 30204 + 30204 30205 30201 + 30205 30206 30201 + 30206 30207 30201 + 30201 30207 30208 + 30208 30209 30201 + 30201 30209 30202 + 30202 30210 30200 + 30210 30211 30200 + 30212 30200 30211 + 30200 30212 30203 + 30210 30202 30213 + 30213 30214 30210 + 30210 30214 30215 + 30215 30211 30210 + 30216 30211 30215 + 30211 30216 30212 + 30216 30217 30212 + 30203 30212 30217 + 30213 30202 30209 + 30209 30218 30213 + 30219 30213 30218 + 30214 30213 30219 + 30219 30220 30214 + 30214 30220 30221 + 30221 30215 30214 + 30222 30215 30221 + 30215 30222 30216 + 30223 30218 30209 + 30218 30223 30224 + 30224 30225 30218 + 30218 30225 30219 + 30226 30219 30225 + 30220 30219 30226 + 30209 30208 30223 + 30223 30208 30227 + 30227 30228 30223 + 30224 30223 30228 + 30228 30229 30224 + 30230 30224 30229 + 30225 30224 30230 + 30230 30231 30225 + 30225 30231 30226 + 30227 30208 30207 + 30227 30207 30206 + 30232 30227 30206 + 30227 30232 30233 + 30233 30228 30227 + 30228 30233 30234 + 30234 30229 30228 + 30229 30234 30235 + 30235 30236 30229 + 30229 30236 30230 + 30237 30232 30206 + 30233 30232 30237 + 30237 30238 30233 + 30234 30233 30238 + 30238 30239 30234 + 30235 30234 30239 + 30239 30240 30235 + 30241 30235 30240 + 30236 30235 30241 + 30237 30206 30205 + 30242 30237 30205 + 30237 30242 30243 + 30243 30238 30237 + 30238 30243 30244 + 30244 30239 30238 + 30239 30244 30245 + 30245 30240 30239 + 30246 30242 30205 + 30243 30242 30246 + 30246 30247 30243 + 30244 30243 30247 + 30247 30248 30244 + 30245 30244 30248 + 30248 30249 30245 + 30250 30245 30249 + 30240 30245 30250 + 30251 30246 30205 + 30246 30251 30252 + 30252 30247 30246 + 30247 30252 30253 + 30253 30248 30247 + 30248 30253 30254 + 30254 30249 30248 + 30205 30204 30251 + 30255 30251 30204 + 30252 30251 30255 + 30255 30256 30252 + 30253 30252 30256 + 30256 30257 30253 + 30254 30253 30257 + 30258 30255 30204 + 30255 30258 30259 + 30259 30256 30255 + 30256 30259 30260 + 30260 30257 30256 + 30257 30260 30261 + 30261 30262 30257 + 30257 30262 30254 + 30204 30263 30258 + 30264 30258 30263 + 30259 30258 30264 + 30264 30265 30259 + 30260 30259 30265 + 30265 30266 30260 + 30261 30260 30266 + 30267 30263 30204 + 30263 30267 30268 + 30268 30264 30263 + 30264 30268 30269 + 30269 30265 30264 + 30265 30269 30270 + 30270 30266 30265 + 30271 30267 30204 + 30267 30271 30272 + 30272 30273 30267 + 30273 30268 30267 + 30269 30268 30273 + 30273 30274 30269 + 30270 30269 30274 + 30275 30271 30204 + 30271 30275 30276 + 30276 30277 30271 + 30277 30272 30271 + 30278 30272 30277 + 30273 30272 30278 + 30278 30274 30273 + 30203 30275 30204 + 30275 30203 30279 + 30279 30280 30275 + 30280 30276 30275 + 30281 30276 30280 + 30277 30276 30281 + 30281 30282 30277 + 30277 30282 30278 + 30283 30279 30203 + 30284 30279 30283 + 30280 30279 30284 + 30284 30285 30280 + 30280 30285 30281 + 30286 30281 30285 + 30282 30281 30286 + 30286 30287 30282 + 30278 30282 30287 + 30217 30283 30203 + 30283 30217 30288 + 30288 30289 30283 + 30283 30289 30284 + 30290 30284 30289 + 30285 30284 30290 + 30290 30291 30285 + 30285 30291 30286 + 30292 30286 30291 + 30287 30286 30292 + 30288 30217 30216 + 30216 30222 30288 + 30293 30288 30222 + 30289 30288 30293 + 30293 30294 30289 + 30289 30294 30290 + 30295 30290 30294 + 30291 30290 30295 + 30295 30296 30291 + 30291 30296 30292 + 30222 30297 30293 + 30298 30293 30297 + 30294 30293 30298 + 30298 30299 30294 + 30294 30299 30295 + 30300 30295 30299 + 30296 30295 30300 + 30221 30297 30222 + 30297 30221 30301 + 30301 30302 30297 + 30297 30302 30298 + 30303 30298 30302 + 30299 30298 30303 + 30303 30304 30299 + 30299 30304 30300 + 30301 30221 30220 + 30220 30305 30301 + 30306 30301 30305 + 30302 30301 30306 + 30306 30307 30302 + 30302 30307 30303 + 30308 30303 30307 + 30304 30303 30308 + 30226 30305 30220 + 30305 30226 30309 + 30309 30310 30305 + 30305 30310 30306 + 30311 30306 30310 + 30307 30306 30311 + 30311 30312 30307 + 30307 30312 30308 + 30309 30226 30231 + 30231 30313 30309 + 30314 30309 30313 + 30310 30309 30314 + 30314 30315 30310 + 30310 30315 30311 + 30316 30311 30315 + 30312 30311 30316 + 30316 30317 30312 + 30308 30312 30317 + 30318 30313 30231 + 30313 30318 30319 + 30319 30320 30313 + 30313 30320 30314 + 30231 30230 30318 + 30318 30230 30236 + 30236 30321 30318 + 30319 30318 30321 + 30321 30322 30319 + 30319 30322 30323 + 30323 30324 30319 + 30320 30319 30324 + 30324 30325 30320 + 30314 30320 30325 + 30241 30321 30236 + 30321 30241 30326 + 30326 30322 30321 + 30322 30326 30327 + 30327 30323 30322 + 30323 30327 30328 + 30328 30329 30323 + 30323 30329 30330 + 30330 30324 30323 + 30325 30324 30330 + 30326 30241 30331 + 30331 30332 30326 + 30326 30332 30327 + 30332 30333 30327 + 30328 30327 30333 + 30240 30331 30241 + 30250 30331 30240 + 30332 30331 30250 + 30334 30332 30250 + 30332 30334 30333 + 30334 30335 30333 + 30333 30335 30336 + 30333 30336 30328 + 30328 30336 30337 + 30337 30338 30328 + 30329 30328 30338 + 30334 30250 30339 + 30339 30340 30334 + 30335 30334 30340 + 30341 30335 30340 + 30336 30335 30341 + 30341 30342 30336 + 30336 30342 30337 + 30249 30339 30250 + 30343 30339 30249 + 30339 30343 30344 + 30344 30340 30339 + 30340 30344 30345 + 30345 30341 30340 + 30341 30345 30342 + 30342 30345 30346 + 30346 30337 30342 + 30249 30254 30343 + 30347 30343 30254 + 30344 30343 30347 + 30347 30348 30344 + 30345 30344 30348 + 30348 30349 30345 + 30349 30346 30345 + 30254 30262 30347 + 30350 30347 30262 + 30347 30350 30351 + 30351 30348 30347 + 30348 30351 30352 + 30352 30349 30348 + 30353 30349 30352 + 30349 30353 30346 + 30262 30261 30350 + 30350 30261 30354 + 30354 30355 30350 + 30351 30350 30355 + 30355 30356 30351 + 30352 30351 30356 + 30356 30357 30352 + 30358 30352 30357 + 30352 30358 30353 + 30266 30354 30261 + 30359 30354 30266 + 30354 30359 30360 + 30360 30355 30354 + 30355 30360 30361 + 30361 30356 30355 + 30356 30361 30362 + 30362 30357 30356 + 30363 30357 30362 + 30357 30363 30358 + 30266 30270 30359 + 30359 30270 30364 + 30364 30365 30359 + 30360 30359 30365 + 30365 30366 30360 + 30361 30360 30366 + 30366 30367 30361 + 30361 30367 30368 + 30368 30362 30361 + 30274 30364 30270 + 30369 30364 30274 + 30364 30369 30370 + 30370 30365 30364 + 30365 30370 30371 + 30371 30366 30365 + 30366 30371 30372 + 30372 30367 30366 + 30367 30372 30373 + 30373 30368 30367 + 30274 30278 30369 + 30287 30369 30278 + 30370 30369 30287 + 30287 30374 30370 + 30371 30370 30374 + 30374 30375 30371 + 30372 30371 30375 + 30375 30376 30372 + 30372 30376 30377 + 30377 30373 30372 + 30292 30374 30287 + 30374 30292 30378 + 30378 30375 30374 + 30375 30378 30379 + 30379 30376 30375 + 30376 30379 30380 + 30380 30377 30376 + 30378 30292 30296 + 30296 30381 30378 + 30379 30378 30381 + 30381 30382 30379 + 30379 30382 30383 + 30383 30380 30379 + 30384 30380 30383 + 30377 30380 30384 + 30300 30381 30296 + 30381 30300 30385 + 30385 30382 30381 + 30382 30385 30386 + 30386 30383 30382 + 30383 30386 30387 + 30387 30388 30383 + 30383 30388 30384 + 30385 30300 30304 + 30304 30389 30385 + 30385 30389 30390 + 30390 30386 30385 + 30387 30386 30390 + 30390 30391 30387 + 30387 30391 30392 + 30392 30393 30387 + 30388 30387 30393 + 30308 30389 30304 + 30389 30308 30394 + 30394 30390 30389 + 30391 30390 30394 + 30394 30395 30391 + 30391 30395 30396 + 30396 30392 30391 + 30317 30394 30308 + 30395 30394 30317 + 30317 30397 30395 + 30396 30395 30397 + 30397 30398 30396 + 30399 30396 30398 + 30392 30396 30399 + 30399 30400 30392 + 30392 30400 30401 + 30401 30393 30392 + 30397 30317 30316 + 30316 30402 30397 + 30397 30402 30403 + 30403 30398 30397 + 30404 30398 30403 + 30398 30404 30399 + 30399 30404 30405 + 30405 30406 30399 + 30400 30399 30406 + 30402 30316 30407 + 30407 30408 30402 + 30403 30402 30408 + 30315 30407 30316 + 30409 30407 30315 + 30408 30407 30409 + 30408 30409 30410 + 30410 30411 30408 + 30408 30411 30403 + 30315 30314 30409 + 30410 30409 30314 + 30325 30410 30314 + 30412 30410 30325 + 30411 30410 30412 + 30411 30412 30413 + 30413 30414 30411 + 30411 30414 30403 + 30414 30415 30403 + 30416 30403 30415 + 30403 30416 30404 + 30325 30417 30412 + 30412 30417 30418 + 30418 30413 30412 + 30419 30413 30418 + 30414 30413 30419 + 30419 30420 30414 + 30414 30420 30421 + 30421 30415 30414 + 30330 30417 30325 + 30417 30330 30422 + 30422 30418 30417 + 30423 30418 30422 + 30418 30423 30419 + 30419 30423 30424 + 30424 30425 30419 + 30425 30426 30419 + 30420 30419 30426 + 30427 30422 30330 + 30423 30422 30427 + 30427 30428 30423 + 30423 30428 30424 + 30429 30424 30428 + 30424 30429 30430 + 30424 30430 30431 + 30431 30425 30424 + 30330 30329 30427 + 30338 30427 30329 + 30428 30427 30338 + 30338 30432 30428 + 30428 30432 30429 + 30433 30429 30432 + 30429 30433 30434 + 30430 30429 30434 + 30430 30434 30435 + 30435 30436 30430 + 30436 30431 30430 + 30432 30338 30337 + 30337 30437 30432 + 30432 30437 30433 + 30437 30438 30433 + 30438 30439 30433 + 30440 30433 30439 + 30433 30440 30434 + 30434 30440 30441 + 30441 30435 30434 + 30337 30346 30437 + 30346 30442 30437 + 30437 30442 30443 + 30443 30438 30437 + 30438 30443 30444 + 30438 30444 30445 + 30445 30439 30438 + 30446 30439 30445 + 30439 30446 30440 + 30353 30442 30346 + 30353 30447 30442 + 30447 30443 30442 + 30444 30443 30447 + 30447 30448 30444 + 30444 30448 30449 + 30445 30444 30449 + 30445 30449 30450 + 30451 30445 30450 + 30445 30451 30446 + 30452 30447 30353 + 30448 30447 30452 + 30448 30452 30453 + 30453 30449 30448 + 30450 30449 30453 + 30453 30454 30450 + 30450 30454 30455 + 30455 30456 30450 + 30451 30450 30456 + 30353 30358 30452 + 30452 30358 30363 + 30363 30453 30452 + 30454 30453 30363 + 30363 30457 30454 + 30454 30457 30458 + 30455 30454 30458 + 30458 30459 30455 + 30460 30455 30459 + 30456 30455 30460 + 30362 30457 30363 + 30457 30362 30368 + 30368 30458 30457 + 30458 30368 30373 + 30373 30461 30458 + 30458 30461 30462 + 30462 30459 30458 + 30459 30462 30463 + 30463 30464 30459 + 30459 30464 30460 + 30461 30373 30377 + 30377 30465 30461 + 30462 30461 30465 + 30465 30466 30462 + 30463 30462 30466 + 30384 30465 30377 + 30465 30384 30467 + 30467 30466 30465 + 30468 30466 30467 + 30466 30468 30463 + 30463 30468 30469 + 30469 30470 30463 + 30470 30471 30463 + 30464 30463 30471 + 30472 30467 30384 + 30473 30467 30472 + 30467 30473 30468 + 30468 30473 30474 + 30474 30469 30468 + 30384 30388 30472 + 30393 30472 30388 + 30475 30472 30393 + 30472 30475 30473 + 30474 30473 30475 + 30475 30476 30474 + 30477 30474 30476 + 30469 30474 30477 + 30477 30478 30469 + 30469 30478 30479 + 30479 30470 30469 + 30393 30401 30475 + 30475 30401 30480 + 30480 30476 30475 + 30476 30480 30481 + 30481 30482 30476 + 30476 30482 30477 + 30477 30482 30483 + 30483 30484 30477 + 30478 30477 30484 + 30480 30401 30400 + 30400 30485 30480 + 30481 30480 30485 + 30485 30486 30481 + 30481 30486 30487 + 30482 30481 30487 + 30487 30483 30482 + 30488 30483 30487 + 30483 30488 30489 + 30489 30484 30483 + 30406 30485 30400 + 30485 30406 30486 + 30490 30486 30406 + 30486 30490 30487 + 30490 30491 30487 + 30488 30487 30491 + 30491 30492 30488 + 30488 30492 30421 + 30489 30488 30421 + 30405 30490 30406 + 30490 30405 30493 + 30491 30490 30493 + 30494 30491 30493 + 30491 30494 30495 + 30495 30492 30491 + 30492 30495 30496 + 30496 30421 30492 + 30421 30496 30415 + 30415 30496 30416 + 30493 30405 30404 + 30404 30497 30493 + 30494 30493 30497 + 30495 30494 30497 + 30497 30416 30495 + 30496 30495 30416 + 30416 30497 30404 + 30421 30420 30489 + 30426 30489 30420 + 30489 30426 30498 + 30498 30484 30489 + 30484 30498 30478 + 30479 30478 30498 + 30498 30499 30479 + 30436 30479 30499 + 30479 30436 30470 + 30498 30426 30425 + 30425 30499 30498 + 30425 30431 30499 + 30499 30431 30436 + 30470 30436 30435 + 30435 30471 30470 + 30500 30471 30435 + 30471 30500 30464 + 30460 30464 30500 + 30500 30501 30460 + 30456 30460 30501 + 30435 30441 30500 + 30500 30441 30502 + 30502 30501 30500 + 30502 30503 30501 + 30501 30503 30456 + 30456 30503 30451 + 30451 30503 30502 + 30446 30451 30502 + 30440 30446 30502 + 30502 30441 30440 + 30504 30505 30506 + 30505 30504 30507 + 30507 30508 30505 + 30505 30508 30509 + 30509 30510 30505 + 30505 30510 30511 + 30511 30506 30505 + 30506 30512 30504 + 30513 30504 30512 + 30507 30504 30513 + 30513 30514 30507 + 30515 30507 30514 + 30508 30507 30515 + 30516 30512 30506 + 30512 30516 30517 + 30517 30518 30512 + 30512 30518 30519 + 30519 30513 30512 + 30520 30513 30519 + 30514 30513 30520 + 30516 30506 30511 + 30511 30521 30516 + 30516 30521 30522 + 30522 30523 30516 + 30523 30517 30516 + 30524 30517 30523 + 30518 30517 30524 + 30525 30521 30511 + 30521 30525 30526 + 30526 30522 30521 + 30522 30526 30527 + 30522 30527 30528 + 30528 30523 30522 + 30528 30529 30523 + 30523 30529 30524 + 30511 30530 30525 + 30525 30530 30531 + 30531 30532 30525 + 30526 30525 30532 + 30532 30533 30526 + 30527 30526 30533 + 30530 30511 30510 + 30510 30534 30530 + 30530 30534 30535 + 30535 30536 30530 + 30536 30531 30530 + 30537 30531 30536 + 30537 30532 30531 + 30532 30537 30538 + 30538 30533 30532 + 30534 30510 30509 + 30509 30539 30534 + 30534 30539 30540 + 30540 30541 30534 + 30534 30541 30535 + 30539 30509 30542 + 30542 30543 30539 + 30539 30543 30544 + 30544 30540 30539 + 30545 30540 30544 + 30540 30545 30546 + 30546 30541 30540 + 30542 30509 30508 + 30508 30547 30542 + 30548 30542 30547 + 30543 30542 30548 + 30548 30549 30543 + 30543 30549 30550 + 30550 30544 30543 + 30551 30544 30550 + 30544 30551 30545 + 30515 30547 30508 + 30547 30515 30552 + 30552 30553 30547 + 30547 30553 30548 + 30554 30548 30553 + 30549 30548 30554 + 30554 30555 30549 + 30549 30555 30556 + 30556 30550 30549 + 30552 30515 30557 + 30557 30558 30552 + 30552 30558 30559 + 30559 30560 30552 + 30553 30552 30560 + 30560 30561 30553 + 30553 30561 30554 + 30557 30515 30514 + 30514 30562 30557 + 30563 30557 30562 + 30557 30563 30564 + 30564 30558 30557 + 30558 30564 30565 + 30565 30559 30558 + 30566 30562 30514 + 30562 30566 30567 + 30562 30567 30563 + 30563 30567 30568 + 30568 30569 30563 + 30564 30563 30569 + 30569 30570 30564 + 30565 30564 30570 + 30514 30520 30566 + 30566 30520 30571 + 30571 30572 30566 + 30567 30566 30572 + 30572 30573 30567 + 30567 30573 30568 + 30520 30574 30571 + 30574 30575 30571 + 30576 30571 30575 + 30577 30571 30576 + 30571 30577 30578 + 30578 30572 30571 + 30573 30572 30578 + 30519 30574 30520 + 30574 30519 30579 + 30579 30580 30574 + 30574 30580 30581 + 30581 30575 30574 + 30582 30575 30581 + 30575 30582 30576 + 30583 30576 30582 + 30577 30576 30583 + 30579 30519 30518 + 30518 30584 30579 + 30579 30584 30585 + 30585 30586 30579 + 30580 30579 30586 + 30586 30587 30580 + 30581 30580 30587 + 30524 30584 30518 + 30584 30524 30588 + 30588 30585 30584 + 30585 30588 30589 + 30589 30590 30585 + 30585 30590 30591 + 30591 30586 30585 + 30587 30586 30591 + 30592 30588 30524 + 30589 30588 30592 + 30592 30593 30589 + 30589 30593 30594 + 30594 30595 30589 + 30590 30589 30595 + 30595 30596 30590 + 30591 30590 30596 + 30524 30529 30592 + 30597 30592 30529 + 30592 30597 30598 + 30598 30593 30592 + 30593 30598 30599 + 30599 30594 30593 + 30600 30594 30599 + 30594 30600 30601 + 30601 30595 30594 + 30596 30595 30601 + 30529 30528 30597 + 30602 30597 30528 + 30598 30597 30602 + 30602 30603 30598 + 30598 30603 30604 + 30604 30605 30598 + 30605 30599 30598 + 30600 30599 30605 + 30528 30527 30602 + 30527 30606 30602 + 30606 30607 30602 + 30608 30602 30607 + 30602 30608 30603 + 30608 30609 30603 + 30603 30609 30610 + 30610 30604 30603 + 30533 30606 30527 + 30538 30606 30533 + 30607 30606 30538 + 30611 30607 30538 + 30607 30611 30612 + 30607 30612 30608 + 30608 30612 30613 + 30609 30608 30613 + 30613 30614 30609 + 30609 30614 30615 + 30615 30610 30609 + 30611 30538 30616 + 30616 30617 30611 + 30612 30611 30617 + 30617 30618 30612 + 30612 30618 30613 + 30619 30613 30618 + 30614 30613 30619 + 30538 30537 30616 + 30536 30616 30537 + 30536 30620 30616 + 30616 30620 30621 + 30621 30617 30616 + 30618 30617 30621 + 30618 30621 30619 + 30619 30621 30622 + 30622 30623 30619 + 30624 30619 30623 + 30619 30624 30614 + 30620 30536 30535 + 30535 30622 30620 + 30621 30620 30622 + 30622 30535 30625 + 30625 30626 30622 + 30622 30626 30627 + 30627 30623 30622 + 30628 30623 30627 + 30623 30628 30624 + 30625 30535 30541 + 30541 30546 30625 + 30629 30625 30546 + 30626 30625 30629 + 30629 30630 30626 + 30626 30630 30631 + 30631 30627 30626 + 30632 30627 30631 + 30627 30632 30628 + 30546 30633 30629 + 30634 30629 30633 + 30630 30629 30634 + 30634 30635 30630 + 30630 30635 30636 + 30636 30631 30630 + 30637 30631 30636 + 30631 30637 30632 + 30638 30633 30546 + 30639 30633 30638 + 30633 30639 30634 + 30640 30634 30639 + 30635 30634 30640 + 30640 30641 30635 + 30635 30641 30642 + 30642 30636 30635 + 30546 30545 30638 + 30643 30638 30545 + 30644 30638 30643 + 30638 30644 30639 + 30639 30644 30645 + 30645 30646 30639 + 30639 30646 30640 + 30647 30640 30646 + 30640 30647 30641 + 30545 30551 30643 + 30648 30643 30551 + 30649 30643 30648 + 30643 30649 30644 + 30644 30649 30650 + 30650 30645 30644 + 30651 30645 30650 + 30645 30651 30652 + 30652 30646 30645 + 30646 30652 30647 + 30551 30653 30648 + 30654 30648 30653 + 30655 30648 30654 + 30648 30655 30649 + 30649 30655 30656 + 30656 30650 30649 + 30657 30650 30656 + 30650 30657 30651 + 30550 30653 30551 + 30653 30550 30556 + 30556 30658 30653 + 30653 30658 30654 + 30659 30654 30658 + 30660 30654 30659 + 30654 30660 30655 + 30655 30660 30661 + 30661 30656 30655 + 30662 30656 30661 + 30656 30662 30657 + 30658 30556 30663 + 30663 30664 30658 + 30658 30664 30659 + 30665 30659 30664 + 30666 30659 30665 + 30659 30666 30660 + 30660 30666 30667 + 30667 30661 30660 + 30663 30556 30555 + 30555 30668 30663 + 30663 30668 30669 + 30664 30663 30669 + 30669 30665 30664 + 30665 30669 30670 + 30671 30665 30670 + 30665 30671 30666 + 30671 30667 30666 + 30672 30668 30555 + 30668 30672 30670 + 30670 30669 30668 + 30555 30554 30672 + 30672 30554 30561 + 30561 30673 30672 + 30670 30672 30673 + 30674 30670 30673 + 30670 30674 30671 + 30675 30673 30561 + 30673 30675 30674 + 30674 30675 30676 + 30677 30674 30676 + 30674 30677 30671 + 30561 30560 30675 + 30675 30560 30559 + 30559 30676 30675 + 30678 30676 30559 + 30676 30678 30677 + 30677 30678 30679 + 30680 30677 30679 + 30677 30680 30671 + 30559 30565 30678 + 30678 30565 30681 + 30681 30679 30678 + 30682 30679 30681 + 30679 30682 30680 + 30680 30682 30683 + 30684 30680 30683 + 30680 30684 30671 + 30570 30681 30565 + 30685 30681 30570 + 30681 30685 30682 + 30682 30685 30686 + 30686 30683 30682 + 30687 30683 30686 + 30683 30687 30684 + 30684 30687 30688 + 30689 30684 30688 + 30684 30689 30671 + 30570 30690 30685 + 30685 30690 30691 + 30691 30686 30685 + 30692 30686 30691 + 30686 30692 30687 + 30687 30692 30693 + 30693 30688 30687 + 30694 30688 30693 + 30688 30694 30689 + 30690 30570 30569 + 30569 30695 30690 + 30690 30695 30696 + 30696 30691 30690 + 30691 30696 30697 + 30697 30698 30691 + 30691 30698 30692 + 30693 30692 30698 + 30695 30569 30568 + 30568 30699 30695 + 30695 30699 30700 + 30700 30696 30695 + 30697 30696 30700 + 30700 30701 30697 + 30697 30701 30702 + 30702 30703 30697 + 30698 30697 30703 + 30699 30568 30704 + 30704 30705 30699 + 30699 30705 30706 + 30706 30700 30699 + 30701 30700 30706 + 30706 30707 30701 + 30701 30707 30708 + 30708 30702 30701 + 30704 30568 30573 + 30573 30578 30704 + 30709 30704 30578 + 30705 30704 30709 + 30709 30710 30705 + 30706 30705 30710 + 30710 30711 30706 + 30707 30706 30711 + 30711 30712 30707 + 30708 30707 30712 + 30578 30577 30709 + 30577 30713 30709 + 30714 30709 30713 + 30709 30714 30715 + 30715 30710 30709 + 30710 30715 30716 + 30716 30711 30710 + 30711 30716 30717 + 30717 30712 30711 + 30583 30713 30577 + 30718 30713 30583 + 30713 30718 30714 + 30714 30718 30719 + 30719 30720 30714 + 30715 30714 30720 + 30720 30721 30715 + 30716 30715 30721 + 30721 30722 30716 + 30717 30716 30722 + 30718 30583 30723 + 30723 30724 30718 + 30718 30724 30719 + 30725 30719 30724 + 30725 30726 30719 + 30719 30726 30727 + 30727 30720 30719 + 30721 30720 30727 + 30582 30723 30583 + 30582 30728 30723 + 30728 30729 30723 + 30723 30729 30724 + 30729 30730 30724 + 30724 30730 30725 + 30725 30730 30731 + 30731 30732 30725 + 30726 30725 30732 + 30581 30728 30582 + 30728 30581 30733 + 30733 30734 30728 + 30734 30729 30728 + 30730 30729 30734 + 30734 30731 30730 + 30735 30731 30734 + 30731 30735 30736 + 30736 30732 30731 + 30587 30733 30581 + 30735 30733 30587 + 30734 30733 30735 + 30587 30737 30735 + 30735 30737 30738 + 30738 30736 30735 + 30736 30738 30739 + 30740 30736 30739 + 30732 30736 30740 + 30740 30741 30732 + 30732 30741 30726 + 30591 30737 30587 + 30737 30591 30742 + 30742 30738 30737 + 30739 30738 30742 + 30743 30739 30742 + 30739 30743 30744 + 30744 30745 30739 + 30740 30739 30745 + 30745 30746 30740 + 30741 30740 30746 + 30596 30742 30591 + 30742 30596 30747 + 30743 30742 30747 + 30743 30747 30748 + 30748 30744 30743 + 30749 30744 30748 + 30745 30744 30749 + 30749 30750 30745 + 30745 30750 30751 + 30751 30746 30745 + 30601 30747 30596 + 30747 30601 30752 + 30752 30748 30747 + 30748 30752 30753 + 30753 30754 30748 + 30748 30754 30749 + 30755 30749 30754 + 30750 30749 30755 + 30756 30752 30601 + 30753 30752 30756 + 30756 30757 30753 + 30758 30753 30757 + 30754 30753 30758 + 30758 30759 30754 + 30754 30759 30755 + 30601 30600 30756 + 30600 30760 30756 + 30761 30756 30760 + 30756 30761 30762 + 30762 30757 30756 + 30757 30762 30763 + 30763 30758 30757 + 30758 30763 30642 + 30759 30758 30642 + 30605 30760 30600 + 30764 30760 30605 + 30760 30764 30761 + 30765 30761 30764 + 30762 30761 30765 + 30765 30766 30762 + 30763 30762 30766 + 30766 30767 30763 + 30642 30763 30767 + 30767 30636 30642 + 30636 30767 30637 + 30764 30605 30604 + 30604 30768 30764 + 30764 30768 30765 + 30768 30769 30765 + 30770 30765 30769 + 30765 30770 30771 + 30771 30766 30765 + 30766 30771 30637 + 30637 30767 30766 + 30768 30604 30610 + 30768 30610 30615 + 30615 30769 30768 + 30615 30772 30769 + 30769 30772 30770 + 30770 30772 30624 + 30624 30628 30770 + 30771 30770 30628 + 30628 30632 30771 + 30637 30771 30632 + 30772 30615 30614 + 30614 30624 30772 + 30642 30773 30759 + 30773 30642 30774 + 30774 30775 30773 + 30776 30773 30775 + 30759 30773 30776 + 30776 30755 30759 + 30641 30774 30642 + 30777 30774 30641 + 30774 30777 30778 + 30778 30775 30774 + 30775 30778 30712 + 30712 30717 30775 + 30775 30717 30776 + 30722 30776 30717 + 30755 30776 30722 + 30641 30647 30777 + 30777 30647 30652 + 30652 30779 30777 + 30778 30777 30779 + 30779 30708 30778 + 30712 30778 30708 + 30780 30779 30652 + 30708 30779 30780 + 30780 30702 30708 + 30702 30780 30781 + 30781 30703 30702 + 30652 30651 30780 + 30781 30780 30651 + 30651 30657 30781 + 30782 30781 30657 + 30703 30781 30782 + 30782 30783 30703 + 30703 30783 30698 + 30698 30783 30693 + 30784 30693 30783 + 30693 30784 30694 + 30657 30662 30782 + 30784 30782 30662 + 30783 30782 30784 + 30662 30785 30784 + 30694 30784 30785 + 30785 30786 30694 + 30689 30694 30786 + 30671 30689 30786 + 30786 30667 30671 + 30661 30785 30662 + 30785 30661 30667 + 30667 30786 30785 + 30722 30787 30755 + 30787 30722 30721 + 30721 30788 30787 + 30750 30787 30788 + 30755 30787 30750 + 30727 30788 30721 + 30788 30727 30789 + 30789 30751 30788 + 30788 30751 30750 + 30727 30726 30789 + 30726 30741 30789 + 30746 30789 30741 + 30751 30789 30746 + 30790 30791 30792 + 30791 30790 30793 + 30791 30793 30794 + 30794 30795 30791 + 30791 30795 30796 + 30796 30792 30791 + 30792 30797 30790 + 30798 30790 30797 + 30793 30790 30798 + 30798 30799 30793 + 30794 30793 30799 + 30797 30792 30800 + 30800 30801 30797 + 30797 30801 30802 + 30802 30803 30797 + 30797 30803 30804 + 30804 30798 30797 + 30800 30792 30796 + 30796 30805 30800 + 30806 30800 30805 + 30801 30800 30806 + 30806 30807 30801 + 30801 30807 30808 + 30808 30809 30801 + 30809 30802 30801 + 30810 30805 30796 + 30805 30810 30811 + 30811 30812 30805 + 30805 30812 30806 + 30813 30806 30812 + 30807 30806 30813 + 30796 30814 30810 + 30810 30814 30815 + 30815 30816 30810 + 30811 30810 30816 + 30816 30817 30811 + 30818 30811 30817 + 30812 30811 30818 + 30814 30796 30795 + 30795 30819 30814 + 30815 30814 30819 + 30819 30795 30794 + 30794 30820 30819 + 30819 30820 30821 + 30821 30822 30819 + 30819 30822 30815 + 30820 30794 30823 + 30823 30824 30820 + 30820 30824 30825 + 30825 30821 30820 + 30826 30821 30825 + 30822 30821 30826 + 30827 30823 30794 + 30828 30823 30827 + 30828 30824 30823 + 30824 30828 30829 + 30829 30825 30824 + 30825 30829 30830 + 30825 30830 30826 + 30799 30827 30794 + 30831 30827 30799 + 30827 30831 30832 + 30827 30832 30828 + 30828 30832 30833 + 30829 30828 30833 + 30834 30829 30833 + 30830 30829 30834 + 30799 30835 30831 + 30831 30835 30836 + 30836 30837 30831 + 30832 30831 30837 + 30837 30833 30832 + 30838 30835 30799 + 30835 30838 30839 + 30839 30836 30835 + 30836 30839 30840 + 30840 30841 30836 + 30836 30841 30842 + 30842 30837 30836 + 30833 30837 30842 + 30799 30798 30838 + 30838 30798 30804 + 30804 30843 30838 + 30838 30843 30844 + 30844 30839 30838 + 30840 30839 30844 + 30844 30845 30840 + 30840 30845 30846 + 30846 30847 30840 + 30841 30840 30847 + 30848 30843 30804 + 30843 30848 30849 + 30849 30844 30843 + 30844 30849 30850 + 30850 30845 30844 + 30845 30850 30851 + 30851 30846 30845 + 30804 30852 30848 + 30848 30852 30853 + 30853 30854 30848 + 30848 30854 30855 + 30855 30849 30848 + 30850 30849 30855 + 30852 30804 30803 + 30803 30856 30852 + 30853 30852 30856 + 30856 30857 30853 + 30857 30858 30853 + 30858 30859 30853 + 30860 30853 30859 + 30853 30860 30854 + 30856 30803 30802 + 30856 30802 30809 + 30809 30857 30856 + 30861 30857 30809 + 30857 30861 30862 + 30862 30858 30857 + 30863 30858 30862 + 30858 30863 30864 + 30864 30859 30858 + 30865 30859 30864 + 30859 30865 30860 + 30861 30809 30808 + 30808 30866 30861 + 30862 30861 30866 + 30866 30867 30862 + 30867 30868 30862 + 30863 30862 30868 + 30868 30869 30863 + 30863 30869 30870 + 30870 30864 30863 + 30865 30864 30870 + 30866 30808 30871 + 30871 30872 30866 + 30866 30872 30873 + 30873 30867 30866 + 30874 30867 30873 + 30867 30874 30875 + 30875 30868 30867 + 30871 30808 30807 + 30807 30876 30871 + 30871 30876 30877 + 30877 30878 30871 + 30872 30871 30878 + 30878 30879 30872 + 30872 30879 30880 + 30880 30873 30872 + 30813 30876 30807 + 30876 30813 30881 + 30881 30877 30876 + 30877 30881 30882 + 30882 30883 30877 + 30877 30883 30884 + 30884 30878 30877 + 30879 30878 30884 + 30881 30813 30885 + 30885 30886 30881 + 30882 30881 30886 + 30886 30887 30882 + 30882 30887 30888 + 30883 30882 30888 + 30888 30889 30883 + 30884 30883 30889 + 30812 30885 30813 + 30818 30885 30812 + 30885 30818 30890 + 30890 30886 30885 + 30886 30890 30891 + 30891 30887 30886 + 30887 30891 30892 + 30892 30888 30887 + 30889 30888 30892 + 30893 30889 30892 + 30889 30893 30894 + 30894 30884 30889 + 30884 30894 30879 + 30890 30818 30895 + 30895 30896 30890 + 30891 30890 30896 + 30896 30897 30891 + 30892 30891 30897 + 30898 30892 30897 + 30892 30898 30893 + 30817 30895 30818 + 30899 30895 30817 + 30895 30899 30900 + 30900 30896 30895 + 30896 30900 30901 + 30901 30897 30896 + 30897 30901 30898 + 30901 30902 30898 + 30903 30898 30902 + 30898 30903 30893 + 30817 30904 30899 + 30899 30904 30905 + 30905 30906 30899 + 30900 30899 30906 + 30906 30907 30900 + 30901 30900 30907 + 30907 30902 30901 + 30908 30902 30907 + 30902 30908 30903 + 30904 30817 30816 + 30816 30909 30904 + 30904 30909 30910 + 30910 30905 30904 + 30911 30905 30910 + 30905 30911 30912 + 30912 30906 30905 + 30906 30912 30913 + 30913 30907 30906 + 30907 30913 30908 + 30909 30816 30815 + 30815 30914 30909 + 30909 30914 30915 + 30915 30910 30909 + 30916 30910 30915 + 30910 30916 30911 + 30911 30916 30917 + 30917 30918 30911 + 30912 30911 30918 + 30914 30815 30919 + 30919 30920 30914 + 30915 30914 30920 + 30920 30921 30915 + 30922 30915 30921 + 30915 30922 30916 + 30916 30922 30923 + 30923 30917 30916 + 30924 30919 30815 + 30925 30919 30924 + 30919 30925 30926 + 30926 30920 30919 + 30920 30926 30927 + 30927 30921 30920 + 30822 30924 30815 + 30928 30924 30822 + 30928 30929 30924 + 30924 30929 30925 + 30930 30925 30929 + 30926 30925 30930 + 30930 30931 30926 + 30927 30926 30931 + 30822 30826 30928 + 30932 30928 30826 + 30929 30928 30932 + 30932 30933 30929 + 30929 30933 30930 + 30933 30934 30930 + 30935 30930 30934 + 30930 30935 30936 + 30936 30931 30930 + 30826 30830 30932 + 30830 30937 30932 + 30932 30937 30938 + 30939 30932 30938 + 30933 30932 30939 + 30933 30939 30940 + 30940 30934 30933 + 30941 30934 30940 + 30934 30941 30935 + 30834 30937 30830 + 30938 30937 30834 + 30938 30834 30942 + 30942 30943 30938 + 30939 30938 30943 + 30940 30939 30943 + 30940 30943 30944 + 30945 30940 30944 + 30940 30945 30941 + 30833 30942 30834 + 30946 30942 30833 + 30943 30942 30946 + 30946 30944 30943 + 30944 30946 30947 + 30947 30948 30944 + 30948 30949 30944 + 30949 30945 30944 + 30941 30945 30949 + 30949 30950 30941 + 30935 30941 30950 + 30833 30951 30946 + 30946 30951 30952 + 30952 30953 30946 + 30953 30947 30946 + 30954 30947 30953 + 30948 30947 30954 + 30948 30954 30955 + 30955 30949 30948 + 30955 30950 30949 + 30842 30951 30833 + 30951 30842 30956 + 30956 30952 30951 + 30952 30956 30957 + 30952 30957 30958 + 30958 30953 30952 + 30953 30958 30959 + 30953 30959 30954 + 30954 30959 30960 + 30955 30954 30960 + 30961 30956 30842 + 30957 30956 30961 + 30961 30962 30957 + 30957 30962 30963 + 30958 30957 30963 + 30963 30964 30958 + 30959 30958 30964 + 30964 30960 30959 + 30842 30841 30961 + 30847 30961 30841 + 30961 30847 30962 + 30847 30965 30962 + 30962 30965 30966 + 30966 30963 30962 + 30963 30966 30967 + 30967 30968 30963 + 30963 30968 30969 + 30969 30964 30963 + 30960 30964 30969 + 30965 30847 30846 + 30846 30970 30965 + 30965 30970 30971 + 30971 30966 30965 + 30967 30966 30971 + 30971 30972 30967 + 30973 30967 30972 + 30968 30967 30973 + 30973 30974 30968 + 30969 30968 30974 + 30846 30851 30970 + 30851 30975 30970 + 30970 30975 30971 + 30975 30976 30971 + 30971 30976 30977 + 30977 30972 30971 + 30972 30977 30978 + 30978 30979 30972 + 30972 30979 30973 + 30975 30851 30980 + 30980 30981 30975 + 30975 30981 30982 + 30982 30976 30975 + 30977 30976 30982 + 30982 30983 30977 + 30978 30977 30983 + 30980 30851 30850 + 30850 30984 30980 + 30985 30980 30984 + 30980 30985 30981 + 30985 30986 30981 + 30981 30986 30982 + 30986 30987 30982 + 30982 30987 30983 + 30855 30984 30850 + 30988 30984 30855 + 30984 30988 30985 + 30985 30988 30989 + 30989 30990 30985 + 30985 30990 30991 + 30986 30985 30991 + 30986 30991 30992 + 30987 30986 30992 + 30983 30987 30992 + 30855 30993 30988 + 30988 30993 30994 + 30994 30989 30988 + 30995 30989 30994 + 30989 30995 30996 + 30996 30990 30989 + 30996 30991 30990 + 30991 30996 30997 + 30997 30992 30991 + 30993 30855 30854 + 30854 30998 30993 + 30998 30994 30993 + 30999 30994 30998 + 30994 30999 30995 + 30995 30999 31000 + 31000 31001 30995 + 30996 30995 31001 + 30997 30996 31001 + 30860 30998 30854 + 30998 30860 30999 + 30999 30860 30865 + 30865 31000 30999 + 30870 31000 30865 + 31000 30870 31001 + 31001 30870 31002 + 31002 31003 31001 + 31001 31003 30997 + 31004 30997 31003 + 30997 31004 31005 + 31005 30992 30997 + 30992 31005 30983 + 30983 31005 30978 + 30869 31002 30870 + 31006 31002 30869 + 31002 31006 31007 + 31003 31002 31007 + 31003 31007 31004 + 31008 31004 31007 + 31005 31004 31008 + 31008 30978 31005 + 30978 31008 31009 + 31009 30979 30978 + 30869 31010 31006 + 31011 31006 31010 + 31007 31006 31011 + 31011 31012 31007 + 31007 31012 31008 + 31009 31008 31012 + 31012 31013 31009 + 31014 31009 31013 + 30979 31009 31014 + 31014 30973 30979 + 31010 30869 30868 + 30868 30875 31010 + 31010 30875 31015 + 31015 31016 31010 + 31010 31016 31011 + 31017 31011 31016 + 31012 31011 31017 + 31017 31013 31012 + 31013 31017 31018 + 31018 31019 31013 + 31013 31019 31014 + 31020 31015 30875 + 31021 31015 31020 + 31015 31021 31022 + 31022 31016 31015 + 31016 31022 31017 + 31018 31017 31022 + 31022 31023 31018 + 31024 31018 31023 + 31019 31018 31024 + 30875 30874 31020 + 31025 31020 30874 + 31020 31025 31026 + 31026 31027 31020 + 31020 31027 31021 + 31021 31027 31028 + 31028 31029 31021 + 31022 31021 31029 + 31029 31023 31022 + 30874 31030 31025 + 31031 31025 31030 + 31026 31025 31031 + 31031 31032 31026 + 31033 31026 31032 + 31027 31026 31033 + 31033 31028 31027 + 30873 31030 30874 + 31030 30873 30880 + 30880 31034 31030 + 31030 31034 31031 + 31035 31031 31034 + 31032 31031 31035 + 31035 31036 31032 + 31032 31036 31037 + 31037 31038 31032 + 31032 31038 31033 + 31034 30880 31039 + 31039 31040 31034 + 31034 31040 31035 + 31035 31040 31041 + 31036 31035 31041 + 31041 31042 31036 + 31037 31036 31042 + 31039 30880 30879 + 30879 30894 31039 + 31039 30894 30893 + 31040 31039 30893 + 30893 31041 31040 + 31042 31041 30893 + 31043 31042 30893 + 31042 31043 31044 + 31044 31037 31042 + 31037 31044 31045 + 31045 31038 31037 + 31038 31045 31046 + 31046 31033 31038 + 31033 31046 31047 + 31047 31028 31033 + 30903 31043 30893 + 31043 30903 31048 + 31048 31049 31043 + 31049 31044 31043 + 31045 31044 31049 + 31049 31050 31045 + 31046 31045 31050 + 31050 31051 31046 + 31047 31046 31051 + 30908 31048 30903 + 31052 31048 30908 + 31049 31048 31052 + 31052 31050 31049 + 31050 31052 31053 + 31053 31051 31050 + 31051 31053 30918 + 30918 31054 31051 + 31051 31054 31047 + 31055 31047 31054 + 31028 31047 31055 + 31055 31029 31028 + 30908 30913 31052 + 31053 31052 30913 + 30913 30912 31053 + 30918 31053 30912 + 31054 30918 30917 + 30917 31056 31054 + 31054 31056 31055 + 31057 31055 31056 + 31029 31055 31057 + 31057 31023 31029 + 31023 31057 31024 + 31056 30917 30923 + 30923 31058 31056 + 31056 31058 31057 + 31057 31058 31059 + 31059 31024 31057 + 31060 31024 31059 + 31024 31060 31019 + 31019 31060 31061 + 31061 31014 31019 + 31058 30923 31062 + 31062 31059 31058 + 31063 31059 31062 + 31059 31063 31060 + 31060 31063 31064 + 31064 31065 31060 + 31065 31061 31060 + 31066 31061 31065 + 31014 31061 31066 + 31067 31062 30923 + 31063 31062 31067 + 31067 31064 31063 + 31064 31067 30921 + 30921 30927 31064 + 31064 30927 31068 + 31068 31065 31064 + 31069 31065 31068 + 31065 31069 31066 + 30923 30922 31067 + 30921 31067 30922 + 30931 31068 30927 + 31070 31068 30931 + 31068 31070 31069 + 31069 31070 31071 + 31071 31072 31069 + 31069 31072 31073 + 31073 31066 31069 + 30974 31066 31073 + 31066 30974 31014 + 30974 30973 31014 + 30931 30936 31070 + 30936 31071 31070 + 31074 31071 30936 + 31072 31071 31074 + 31074 31075 31072 + 31072 31075 30960 + 30960 31073 31072 + 30969 31073 30960 + 31073 30969 30974 + 30936 30935 31074 + 30950 31074 30935 + 31075 31074 30950 + 30950 30955 31075 + 30960 31075 30955 +} diff --git a/Chapter 18 Cube Mapping/Textures/bricks2.dds b/Chapter 18 Cube Mapping/Textures/bricks2.dds new file mode 100644 index 0000000..a0fb9c3 Binary files /dev/null and b/Chapter 18 Cube Mapping/Textures/bricks2.dds differ diff --git a/Chapter 18 Cube Mapping/Textures/grasscube1024.dds b/Chapter 18 Cube Mapping/Textures/grasscube1024.dds new file mode 100644 index 0000000..9a6324b Binary files /dev/null and b/Chapter 18 Cube Mapping/Textures/grasscube1024.dds differ diff --git a/Chapter 18 Cube Mapping/Textures/tile.dds b/Chapter 18 Cube Mapping/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 18 Cube Mapping/Textures/tile.dds differ diff --git a/Chapter 18 Cube Mapping/Textures/white1x1.dds b/Chapter 18 Cube Mapping/Textures/white1x1.dds new file mode 100644 index 0000000..54df118 Binary files /dev/null and b/Chapter 18 Cube Mapping/Textures/white1x1.dds differ diff --git a/Chapter 18 Cube Mapping/d3dUtil.h b/Chapter 18 Cube Mapping/d3dUtil.h new file mode 100644 index 0000000..50c424e --- /dev/null +++ b/Chapter 18 Cube Mapping/d3dUtil.h @@ -0,0 +1,156 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; +// �Ƿ�����׶���޳� +static bool g_openFrustumCull = true; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; + UINT MaterialPad0; // ռλ����16�ֽڶ��� + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + Vertex(float x, float y, float z, float nx, float ny, float nz, float u, float v) : + Pos(x, y, z), + Normal(nx, ny, nz), + TexC(u, v) {} + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void storeVertexAndIndex(std::vector& vertex, std::vector& index) + { + vecVertex = std::move(vertex); + vecIndex = std::move(index); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + + // �洢������������� + std::vector vecVertex; + std::vector vecIndex; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // ����ת��������Ҫ���ڶ����Ӧ���������� + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); // ����������ƾ��󣬱���ͨ�������������̬�ƶ����� + + UINT MaterialIndex = -1; // ����������Ŀ��������Ӧ���������� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� +}; \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/main.cpp b/Chapter 18 Cube Mapping/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 18 Cube Mapping/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 18 Cube Mapping/packages.config b/Chapter 18 Cube Mapping/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 18 Cube Mapping/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj b/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj new file mode 100644 index 0000000..412aadd --- /dev/null +++ b/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj @@ -0,0 +1,554 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00} + Chapter19NormalMapping + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + Document + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj.filters b/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj.filters new file mode 100644 index 0000000..8240968 --- /dev/null +++ b/Chapter 19 Normal Mapping/Chapter 19 Normal Mapping.vcxproj.filters @@ -0,0 +1,970 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/CameraController.cpp b/Chapter 19 Normal Mapping/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 19 Normal Mapping/Core/CameraController.h b/Chapter 19 Normal Mapping/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 19 Normal Mapping/Core/EngineProfiling.cpp b/Chapter 19 Normal Mapping/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 19 Normal Mapping/Core/EngineProfiling.h b/Chapter 19 Normal Mapping/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 19 Normal Mapping/Core/EngineTuning.cpp b/Chapter 19 Normal Mapping/Core/EngineTuning.cpp new file mode 100644 index 0000000..aa8bba5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, (float)log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp((float)log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return (float)exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 19 Normal Mapping/Core/EngineTuning.h b/Chapter 19 Normal Mapping/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 19 Normal Mapping/Core/FileUtility.cpp b/Chapter 19 Normal Mapping/Core/FileUtility.cpp new file mode 100644 index 0000000..78ee5bf --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (unsigned char*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (unsigned char*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 19 Normal Mapping/Core/FileUtility.h b/Chapter 19 Normal Mapping/Core/FileUtility.h new file mode 100644 index 0000000..999b030 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 19 Normal Mapping/Core/Fonts/consola24.h b/Chapter 19 Normal Mapping/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 19 Normal Mapping/Core/GameCore.cpp b/Chapter 19 Normal Mapping/Core/GameCore.cpp new file mode 100644 index 0000000..8ac190f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/GameCore.cpp @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_MOUSEMOVE: + GameInput::OnMouseMove(wParam, LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 19 Normal Mapping/Core/GameCore.h b/Chapter 19 Normal Mapping/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/GameInput.cpp b/Chapter 19 Normal Mapping/Core/GameInput.cpp new file mode 100644 index 0000000..733b0a1 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/GameInput.cpp @@ -0,0 +1,595 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + + int s_Mouse_X; + int s_Mouse_Y; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +void GameInput::OnMouseMove(WPARAM btnState, int x, int y) +{ + s_Mouse_X = x; + s_Mouse_Y = y; +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} + +POINT GameInput::GetCurPos() +{ + return { s_Mouse_X, s_Mouse_Y }; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/GameInput.h b/Chapter 19 Normal Mapping/Core/GameInput.h new file mode 100644 index 0000000..649b1df --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/GameInput.h @@ -0,0 +1,198 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + void OnMouseMove(WPARAM btnState, int x, int y); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + + POINT GetCurPos(); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Camera.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..486a16f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Camera.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任���󣬻�û�п��� m_CameraToWorld + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::Update() +{ + BaseCamera::Update(); + + m_FrustumVS = Frustum(m_ProjMatrix, m_NearClip / m_FarClip); + m_FrustumWS = m_CameraToWorld * m_FrustumVS; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Camera.h b/Chapter 19 Normal Mapping/Core/Graphics/Camera.h new file mode 100644 index 0000000..240ccde --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Camera.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + virtual void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + // �޸ĸú�����ԭ�ȵ��Ƿ��� + const Vector3 GetForwardVec() const { return m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + const Frustum& GetViewSpaceFrustum() const { return m_FrustumVS; } + const Frustum& GetWorldSpaceFrustum() const { return m_FrustumWS; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + + // ��׶����� + Frustum m_FrustumVS; // View-space view frustum + Frustum m_FrustumWS; // World-space view frustum + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + virtual void Update() override; + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Color.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Color.h b/Chapter 19 Normal Mapping/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..ef38fe6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,623 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearColor(ColorCubeBuffer& Target) +{ + for (int i = 0; i < 6; ++i) + m_CommandList->ClearRenderTargetView(Target.GetRTV(i), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.h b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..722c7bf --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,763 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class ColorCubeBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearColor(ColorCubeBuffer& Target); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.h b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Command/readme_command.txt b/Chapter 19 Normal Mapping/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.cpp b/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..35e5eea --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + // ���������������������shader�����˵��µ� + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.h b/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.cpp b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..841e575 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,223 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_GREATER_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = -1.5f; + RasterizerShadow.DepthBias = -100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.h b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.cpp b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.h b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.h b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.h b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.h b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..5b0f7b6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorCubeBuffer g_SceneCubeBuff; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// +// g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_SceneCubeBuff.Create(L"scene cube buffer", 1024, 1024, 1, DefaultHdrColorFormat); + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_SceneCubeBuff.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..5cf9d30 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + extern ColorCubeBuffer g_SceneCubeBuff; // ��պ�6��RTV��colorbuffer + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp new file mode 100644 index 0000000..927b1cd --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp @@ -0,0 +1,60 @@ +#include "pch.h" +#include "ColorCubeBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + +void ColorCubeBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = 1; + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + // Create the render target view + for (int i = 0; i < 6; ++i) + { + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + RTVDesc.Format = Format; + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.PlaneSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = i; + RTVDesc.Texture2DArray.ArraySize = 1; + + if (m_RTVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_RTVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle[i]); + } +} + +void ColorCubeBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 6, NumMips, Format, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET); + + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 6, NumMips); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.h new file mode 100644 index 0000000..7e5e869 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ColorCubeBuffer.h @@ -0,0 +1,53 @@ +/* + ��պ���ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle[6]: ��ȾĿ����ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorCubeBuffer : public PixelBuffer +{ +public: + ColorCubeBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_RTVHandle, 0xFF, sizeof(m_RTVHandle)); + } + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(int idx = 0) const { + if (idx < 0 || idx > 5) + idx = 0; + + return m_RTVHandle[idx]; + } + + Color GetClearColor(void) const { return m_ClearColor; } + +protected: + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle[6]; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/EsramAllocator.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuResource.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Resource/readme_resource.txt b/Chapter 19 Normal Mapping/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..6280d42 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,80 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--ColorCubeBuffer -> PixelBuffer -> GpuResource +--��պ���ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����2������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle[6]: ��ȾĿ����ͼ��� + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.cpp b/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.h b/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 19 Normal Mapping/Core/Graphics/Texture/dds.h b/Chapter 19 Normal Mapping/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 19 Normal Mapping/Core/Graphics/d3dx12.h b/Chapter 19 Normal Mapping/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 19 Normal Mapping/Core/Hash.h b/Chapter 19 Normal Mapping/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 19 Normal Mapping/Core/Math/BoundingPlane.h b/Chapter 19 Normal Mapping/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Math/BoundingSphere.h b/Chapter 19 Normal Mapping/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Math/Common.h b/Chapter 19 Normal Mapping/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Frustum.cpp b/Chapter 19 Normal Mapping/Core/Math/Frustum.cpp new file mode 100644 index 0000000..c38f478 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Frustum.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + // �Ѹ�Ϊ��������ϵ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // ��׶�壬�����Զ�������4������ + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = NVy * VTan; + + // ������׶���6���棬�洢���Ƿ������Լ����ϵ�һ���� + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // TODO ���޸�Ϊ��������ϵ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum(const Matrix4& ProjMat, float NearDivFar) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / NearDivFar; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // TODO ���޸�Ϊ��������ϵ + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // ���޸�Ϊ��������ϵ + // Perspective + float NearClip, FarClip; + + FarClip = -ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Frustum.h b/Chapter 19 Normal Mapping/Core/Math/Frustum.h new file mode 100644 index 0000000..86211a8 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix, float NearDivFar); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Math/Functions.inl b/Chapter 19 Normal Mapping/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Math/Matrix3.h b/Chapter 19 Normal Mapping/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Math/Matrix4.h b/Chapter 19 Normal Mapping/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Quaternion.h b/Chapter 19 Normal Mapping/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Random.cpp b/Chapter 19 Normal Mapping/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Random.h b/Chapter 19 Normal Mapping/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 19 Normal Mapping/Core/Math/Scalar.h b/Chapter 19 Normal Mapping/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Math/Transform.h b/Chapter 19 Normal Mapping/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 19 Normal Mapping/Core/Math/Vector.h b/Chapter 19 Normal Mapping/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoRender1CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoRender2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AoRenderCS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/AverageLumaCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BlurCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/BufferCopyPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFCommon.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPass1CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/FXAARootSignature.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticlePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleUtility.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ParticleVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PostEffectsRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PresentHDRPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PresentRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 19 Normal Mapping/Core/Shaders/PresentSDRPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ResolveTAACS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/SSAORS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ShaderUtility.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/SharpenTAACS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TemporalRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TextRS.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TextShadowPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/TextVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ToneMap2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ToneMapCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 19 Normal Mapping/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 19 Normal Mapping/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 19 Normal Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/LightingUtil.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/bezierDS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/bezierHS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/bezierPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/bezierVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/billboardGS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/billboardPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/billboardVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/blurVertCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/common.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/common.hlsl new file mode 100644 index 0000000..40e4570 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/common.hlsl @@ -0,0 +1,20 @@ +//--------------------------------------------------------------------------------------- +// Transforms a normal map sample to world space. +//--------------------------------------------------------------------------------------- +float3 NormalSampleToWorldSpace(float3 normalMapSample, float3 unitNormalW, float3 tangentW) +{ + // Uncompress each component from [0,1] to [-1,1]. + float3 normalT = 2.0f * normalMapSample - 1.0f; + + // Build orthonormal basis. + float3 N = unitNormalW; + float3 T = normalize(tangentW - dot(tangentW, N) * N); + float3 B = cross(N, T); + + float3x3 TBN = float3x3(T, B, N); + + // Transform from tangent space to world space. + float3 bumpedNormalW = mul(normalT, TBN); + + return bumpedNormalW; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/compositeCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/defaultPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/defaultVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..913d1fa --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,148 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" +#include "common.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; // ����ID + uint NormalMapIndex; // ������ͼ��ID + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t0); + +// ռ��t1-t4 +Texture2D gTextureMaps[6] : register(t1); +// gTextureMapsռ�ݵ���t1-t7������պ����������Ƿ���t4λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t7); + +SamplerState gsamLinearWrap : register(s0); +SamplerState gsamAnisotropicWrap : register(s1); + +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; + uint vPad0; // ռλ�� + uint vPad1; // ռλ�� + uint vPad2; // ռλ�� +}; + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float3 TangentW : TANGENT; // ���ߵ��������� + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[gMaterialIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + uint normalMapIndex = matData.NormalMapIndex; + + // �������淶�� + pin.NormalW = normalize(pin.NormalW); + + // ȡ�÷������� + float4 normalMapSample = gTextureMaps[normalMapIndex].Sample(gsamAnisotropicWrap, pin.TexC); + // ������õ��ʵ�ʷ��� ȡ��pin.NormalW + float3 bumpedNormalW = NormalSampleToWorldSpace(normalMapSample.rgb, pin.NormalW, pin.TangentW); + + //bumpedNormalW = pin.NormalW; + + diffuseAlbedo *= gTextureMaps[diffuseTexIndex].Sample(gsamAnisotropicWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = (1.0f - roughness) * normalMapSample.a; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + bumpedNormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // ���淴�� + float3 r = reflect(-toEyeW, bumpedNormalW); + float4 reflectionColor = gCubeMap.Sample(gsamLinearWrap, r); + float3 fresnelFactor = SchlickFresnel(fresnelR0, bumpedNormalW, r); + litColor.rgb += shininess * fresnelFactor * reflectionColor.rgb; + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..df27912 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,53 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; + float3 TangentU : TANGENT; // �������� +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float3 TangentW : TANGENT; // ���ߵ��������� + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ��������ת������������ϵ + vout.TangentW = mul(vin.TangentU, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl new file mode 100644 index 0000000..4add4f5 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl @@ -0,0 +1,4 @@ +float4 main() : SV_Target0 +{ + return float4(0.0f, 1.0f, 0.0f, 0.1f); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl new file mode 100644 index 0000000..936a286 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl @@ -0,0 +1,74 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ������ŷ�����ƫ��һ�� + float3 viPos = vin.PosL + vin.NormalL * 0.2; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(viPos, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxPS.hlsl new file mode 100644 index 0000000..1b1703d --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxPS.hlsl @@ -0,0 +1,17 @@ + +// Texture2D gDiffuseMap[7] : register(t1); +// gDiffuseMapռ�ݵ���t1-t7������պ����������Ƿ���t7λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t7); + +SamplerState gsamLinearWrap : register(s0); + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + return gCubeMap.Sample(gsamLinearWrap, pin.PosL); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxVS.hlsl new file mode 100644 index 0000000..2b3fa24 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/skyboxVS.hlsl @@ -0,0 +1,48 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + // ... +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // ʹ��ģ������ϵ + vout.PosL = vin.PosL; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + + // ������պе�����ʼ�����������λ�� + posW.xyz += gEyePosW; + + // ����ת����ͶӰ����ϵ + // ʹ��z=w������ʼ������Զ��ƽ�� + vout.PosH = mul(posW, gViewProj).xyww; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/sobelCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/tessDS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/tessHS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/tessPS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/tessVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/vecAdd.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/Shaders/default/waveVS.hlsl b/Chapter 19 Normal Mapping/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/Core/SystemTime.cpp b/Chapter 19 Normal Mapping/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 19 Normal Mapping/Core/SystemTime.h b/Chapter 19 Normal Mapping/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 19 Normal Mapping/Core/Utility.cpp b/Chapter 19 Normal Mapping/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 19 Normal Mapping/Core/Utility.h b/Chapter 19 Normal Mapping/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 19 Normal Mapping/Core/VectorMath.h b/Chapter 19 Normal Mapping/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 19 Normal Mapping/Core/pch.cpp b/Chapter 19 Normal Mapping/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 19 Normal Mapping/Core/pch.h b/Chapter 19 Normal Mapping/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 19 Normal Mapping/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 19 Normal Mapping/GameApp.cpp b/Chapter 19 Normal Mapping/GameApp.cpp new file mode 100644 index 0000000..87356a2 --- /dev/null +++ b/Chapter 19 Normal Mapping/GameApp.cpp @@ -0,0 +1,697 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include +#include +#include "GeometryGenerator.h" +#include + +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" +#include "CompiledShaders/skyboxPS.h" +#include "CompiledShaders/skyboxVS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + buildCubeCamera(0.0f, 2.0f, 0.0f); + + m_Camera.SetEyeAtUp({ 0.0f, 5.0f, -10.0f }, { 0.0f, 0.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + // skull ����������һֱ�仯 + static float fAllTime = 0; + fAllTime += deltaT; + using namespace Math; + Matrix4 skullScale = Matrix4::MakeScale(0.2f); + Matrix4 skullOffset = Matrix4(Matrix3(kIdentity), { 3.0f, 2.0f, 0.0f }); + Matrix4 skullLocalRotate = Matrix3::MakeYRotation(2.0f * fAllTime); + Matrix4 skullGlobalRotate = Matrix3::MakeYRotation(0.5f * fAllTime); + // ע�ⷴ�� + m_SkullRItem->modeToWorld = Transpose(skullGlobalRotate * skullOffset * skullLocalRotate * skullScale); + + m_ViewProjMatrix = m_Camera.GetViewProjMatrix(); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + // ��̬��պ���Ⱦ�� => g_SceneCubeBuffer + DrawSceneToCubeMap(gfxContext); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + gfxContext.SetRootSignature(m_RootSignature); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_ViewProjMatrix); + psc.eyePosW = m_Camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 7, &m_srvs[0]); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ��Ⱦ�м��ˮ���������������ϱ߶�̬���ɵ���պ� + // ���ö�̬����պ���Դ + gfxContext.SetDynamicDescriptors(3, 6, 1, &Graphics::g_SceneCubeBuff.GetSRV()); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + // ����ԭʼ����պ���Դ + gfxContext.SetDynamicDescriptors(3, 6, 1, &m_srvs[6]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::DrawSceneToCubeMap(GraphicsContext& gfxContext) +{ + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + // �������ģ�建�� + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + + // ��������ɫ + gfxContext.ClearColor(Graphics::g_SceneCubeBuff); + + // �����ӿںͲü����� + auto width = Graphics::g_SceneCubeBuff.GetWidth(); + auto height = Graphics::g_SceneCubeBuff.GetHeight(); + D3D12_VIEWPORT mViewport = { 0.0f, 0.0f, (float)width, (float)height, 0.0f, 1.0f }; + D3D12_RECT mScissorRect = { 0, 0, (LONG)width, (LONG)height }; + gfxContext.SetViewportAndScissor(mViewport, mScissorRect); + + // ���ø�ǩ�� + gfxContext.SetRootSignature(m_RootSignature); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 7, &m_srvs[0]); + + for (int i = 0; i < 6; ++i) + { + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + // ����Ϊ��ȾĿ�� + gfxContext.SetRenderTarget(Graphics::g_SceneCubeBuff.GetRTV(i), Graphics::g_SceneDepthBuffer.GetDSV()); + + // ����ͨ�õij��������� + PassConstants psc; + psc.viewProj = Transpose(m_CameraCube[i].GetViewProjMatrix()); + psc.eyePosW = m_CameraCube[i].GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = { 0.57735f, -0.57735f, 0.57735f }; + psc.Lights[0].Strength = { 0.8f, 0.8f, 0.8f }; + psc.Lights[1].Direction = { -0.57735f, -0.57735f, 0.57735f }; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = { 0.0f, -0.707f, -0.707f }; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ��ʼ���� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + } + + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_GENERIC_READ, true); +} + +void GameApp::RenderUI(class GraphicsContext& gfxContext) +{ + +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + obc.texTransform = item->texTransform; + obc.matTransform = item->matTransform; + obc.MaterialIndex = item->MaterialIndex; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(4, 2); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature.InitStaticSampler(1, Graphics::SamplerAnisoWrapDesc); + m_RootSignature[0].InitAsConstantBuffer(0); + m_RootSignature[1].InitAsConstantBuffer(1); + m_RootSignature[2].InitAsBufferSRV(0); + m_RootSignature[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1, 7); + m_RootSignature.Finalize(L"18 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 } + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + // ��պ�PSO + auto ras = Graphics::RasterizerDefaultCw; + ras.CullMode = D3D12_CULL_MODE_NONE; + auto dep = Graphics::DepthStateReadWrite; + dep.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + GraphicsPSO skyPSO = defaultPSO; + skyPSO.SetRasterizerState(ras); + skyPSO.SetDepthStencilState(dep); + skyPSO.SetVertexShader(g_pskyboxVS, sizeof(g_pskyboxVS)); + skyPSO.SetPixelShader(g_pskyboxPS, sizeof(g_pskyboxPS)); + skyPSO.Finalize(); + m_mapPSO[E_EPT_SKY] = skyPSO; +} + +void GameApp::buildGeo() +{ + buildShapeGeo(); + buildSkullGeo(); +} + +void GameApp::buildShapeGeo() +{ + // ������״���� + GeometryGenerator geoGen; + GeometryGenerator::MeshData box = geoGen.CreateBox(1.0f, 1.0f, 1.0f, 3); + GeometryGenerator::MeshData grid = geoGen.CreateGrid(20.0f, 30.0f, 60, 40); + GeometryGenerator::MeshData sphere = geoGen.CreateSphere(0.5f, 20, 20); + GeometryGenerator::MeshData cylinder = geoGen.CreateCylinder(0.5f, 0.3f, 3.0f, 20, 20); + + // + // We are concatenating all the geometry into one big vertex/index buffer. So + // define the regions in the buffer each submesh covers. + // + + // Cache the vertex offsets to each object in the concatenated vertex buffer. + UINT boxVertexOffset = 0; + UINT gridVertexOffset = (UINT)box.Vertices.size(); + UINT sphereVertexOffset = gridVertexOffset + (UINT)grid.Vertices.size(); + UINT cylinderVertexOffset = sphereVertexOffset + (UINT)sphere.Vertices.size(); + + // Cache the starting index for each object in the concatenated index buffer. + UINT boxIndexOffset = 0; + UINT gridIndexOffset = (UINT)box.Indices32.size(); + UINT sphereIndexOffset = gridIndexOffset + (UINT)grid.Indices32.size(); + UINT cylinderIndexOffset = sphereIndexOffset + (UINT)sphere.Indices32.size(); + + SubmeshGeometry boxSubmesh; + boxSubmesh.IndexCount = (UINT)box.Indices32.size(); + boxSubmesh.StartIndexLocation = boxIndexOffset; + boxSubmesh.BaseVertexLocation = boxVertexOffset; + + SubmeshGeometry gridSubmesh; + gridSubmesh.IndexCount = (UINT)grid.Indices32.size(); + gridSubmesh.StartIndexLocation = gridIndexOffset; + gridSubmesh.BaseVertexLocation = gridVertexOffset; + + SubmeshGeometry sphereSubmesh; + sphereSubmesh.IndexCount = (UINT)sphere.Indices32.size(); + sphereSubmesh.StartIndexLocation = sphereIndexOffset; + sphereSubmesh.BaseVertexLocation = sphereVertexOffset; + + SubmeshGeometry cylinderSubmesh; + cylinderSubmesh.IndexCount = (UINT)cylinder.Indices32.size(); + cylinderSubmesh.StartIndexLocation = cylinderIndexOffset; + cylinderSubmesh.BaseVertexLocation = cylinderVertexOffset; + + // + // Extract the vertex elements we are interested in and pack the + // vertices of all the meshes into one vertex buffer. + // + + auto totalVertexCount = + box.Vertices.size() + + grid.Vertices.size() + + sphere.Vertices.size() + + cylinder.Vertices.size(); + + std::vector vertices(totalVertexCount); + + UINT k = 0; + for (size_t i = 0; i < box.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = box.Vertices[i].Position; + vertices[k].Normal = box.Vertices[i].Normal; + vertices[k].TexC = box.Vertices[i].TexC; + vertices[k].TangentU = box.Vertices[i].TangentU; + } + + for (size_t i = 0; i < grid.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = grid.Vertices[i].Position; + vertices[k].Normal = grid.Vertices[i].Normal; + vertices[k].TexC = grid.Vertices[i].TexC; + vertices[k].TangentU = grid.Vertices[i].TangentU; + } + + for (size_t i = 0; i < sphere.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = sphere.Vertices[i].Position; + vertices[k].Normal = sphere.Vertices[i].Normal; + vertices[k].TexC = sphere.Vertices[i].TexC; + vertices[k].TangentU = sphere.Vertices[i].TangentU; + } + + for (size_t i = 0; i < cylinder.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = cylinder.Vertices[i].Position; + vertices[k].Normal = cylinder.Vertices[i].Normal; + vertices[k].TexC = cylinder.Vertices[i].TexC; + vertices[k].TangentU = cylinder.Vertices[i].TangentU; + } + + std::vector indices; + indices.insert(indices.end(), std::begin(box.GetIndices16()), std::end(box.GetIndices16())); + indices.insert(indices.end(), std::begin(grid.GetIndices16()), std::end(grid.GetIndices16())); + indices.insert(indices.end(), std::begin(sphere.GetIndices16()), std::end(sphere.GetIndices16())); + indices.insert(indices.end(), std::begin(cylinder.GetIndices16()), std::end(cylinder.GetIndices16())); + + auto geo = std::make_unique(); + geo->name = "shapeGeo"; + + // GPUBuff�࣬�Զ��Ѷ���ͨ���ϴ������������˶�Ӧ��Ĭ�϶��� + geo->createVertex(L"vertex buff", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"index buff", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + geo->geoMap["box"] = boxSubmesh; + geo->geoMap["grid"] = gridSubmesh; + geo->geoMap["sphere"] = sphereSubmesh; + geo->geoMap["cylinder"] = cylinderSubmesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildSkullGeo() +{ + std::ifstream fin("Models/skull.txt"); + + if (!fin) + { + MessageBox(0, L"Models/skull.txt not found.", 0, 0); + return; + } + + UINT vcount = 0; + UINT tcount = 0; + std::string ignore; + + fin >> ignore >> vcount; + fin >> ignore >> tcount; + fin >> ignore >> ignore >> ignore >> ignore; + + std::vector vertices(vcount); + for (UINT i = 0; i < vcount; ++i) + { + fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; + fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; + + XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); + + // ������������ + XMFLOAT3 spherePos; + XMStoreFloat3(&spherePos, XMVector3Normalize(P)); + + float theta = atan2f(spherePos.z, spherePos.x); + + // Put in [0, 2pi]. + if (theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(spherePos.y); + + float u = theta / (2.0f * XM_PI); + float v = phi / XM_PI; + + vertices[i].TexC = { u, v }; + } + + fin >> ignore; + fin >> ignore; + fin >> ignore; + + std::vector indices(3 * tcount); + for (UINT i = 0; i < tcount; ++i) + { + fin >> indices[i * 3 + 0] >> indices[i * 3 + 1] >> indices[i * 3 + 2]; + } + + fin.close(); + + auto geo = std::make_unique(); + geo->name = "skullGeo"; + + geo->createVertex(L"skullGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"skullGeo index", (UINT)indices.size(), sizeof(std::int32_t), indices.data()); + geo->storeVertexAndIndex(vertices, indices); + + SubmeshGeometry submesh; + submesh.IndexCount = 3 * tcount; + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["skull"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + // 5���������� + std::vector v = { + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 0.3f, 0, 1}, // bricks + { { 0.9f, 0.9f, 0.9f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.1f, 2, 3}, // tile + { { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.98f, 0.97f, 0.95f }, 0.1f, 4, 5}, // mirror + { { 0.8f, 0.8f, 0.8f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.2f, 4, 5}, // skull + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 1.0f, 6, 6}, // sky + }; + + // ���������������� + m_mats.Create(L"materials", (UINT)v.size(), sizeof(MaterialConstants), v.data()); + + // 7������ + m_srvs.resize(7); + TextureManager::Initialize(L"Textures/"); + m_srvs[0] = TextureManager::LoadFromFile(L"bricks2", true)->GetSRV(); + m_srvs[1] = TextureManager::LoadFromFile(L"bricks2_nmap", false)->GetSRV(); + m_srvs[2] = TextureManager::LoadFromFile(L"tile", true)->GetSRV(); + m_srvs[3] = TextureManager::LoadFromFile(L"tile_nmap", false)->GetSRV(); + m_srvs[4] = TextureManager::LoadFromFile(L"white1x1", true)->GetSRV(); + m_srvs[5] = TextureManager::LoadFromFile(L"default_nmap", false)->GetSRV(); + m_srvs[6] = TextureManager::LoadFromFile(L"snowcube1024", true)->GetSRV(); +} + +void GameApp::buildRenderItem() +{ + using namespace Math; + auto skyRitem = std::make_unique(); + skyRitem->modeToWorld = Transpose(Matrix4::MakeScale(5000.0f)); + skyRitem->texTransform = Transpose(Matrix4(kIdentity)); + skyRitem->matTransform = Transpose(Matrix4(kIdentity)); + skyRitem->MaterialIndex = eMaterialType::sky; + skyRitem->geo = m_mapGeometries["shapeGeo"].get(); + skyRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skyRitem->IndexCount = skyRitem->geo->geoMap["sphere"].IndexCount; + skyRitem->StartIndexLocation = skyRitem->geo->geoMap["sphere"].StartIndexLocation; + skyRitem->BaseVertexLocation = skyRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Sky].push_back(skyRitem.get()); + m_vecAll.push_back(std::move(skyRitem)); + + auto boxRitem = std::make_unique(); + boxRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 1.0f, 2.0f), Vector3(0.0f, 0.5f, 0.0f)))); + boxRitem->texTransform = Transpose(Matrix4(kIdentity)); + boxRitem->matTransform = Transpose(Matrix4(kIdentity)); + boxRitem->MaterialIndex = eMaterialType::bricks; + boxRitem->geo = m_mapGeometries["shapeGeo"].get(); + boxRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + boxRitem->IndexCount = boxRitem->geo->geoMap["box"].IndexCount; + boxRitem->StartIndexLocation = boxRitem->geo->geoMap["box"].StartIndexLocation; + boxRitem->BaseVertexLocation = boxRitem->geo->geoMap["box"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(boxRitem.get()); + m_vecAll.push_back(std::move(boxRitem)); + + auto globeRitem = std::make_unique(); + globeRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 2.0f, 2.0f), Vector3(0.0f, 2.0f, 0.0f)))); + globeRitem->texTransform = Transpose(Matrix4::MakeScale(1.0f)); + globeRitem->matTransform = Transpose(Matrix4(kIdentity)); + globeRitem->MaterialIndex = eMaterialType::mirror; + globeRitem->geo = m_mapGeometries["shapeGeo"].get(); + globeRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + globeRitem->IndexCount = globeRitem->geo->geoMap["sphere"].IndexCount; + globeRitem->StartIndexLocation = globeRitem->geo->geoMap["sphere"].StartIndexLocation; + globeRitem->BaseVertexLocation = globeRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors].push_back(globeRitem.get()); + m_vecAll.push_back(std::move(globeRitem)); + + auto skullRitem = std::make_unique(); + skullRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + skullRitem->texTransform = Transpose(Matrix4(kIdentity)); + skullRitem->matTransform = Transpose(Matrix4(kIdentity)); + skullRitem->MaterialIndex = eMaterialType::skull; + skullRitem->geo = m_mapGeometries["skullGeo"].get(); + skullRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skullRitem->IndexCount = skullRitem->geo->geoMap["skull"].IndexCount; + skullRitem->StartIndexLocation = skullRitem->geo->geoMap["skull"].StartIndexLocation; + skullRitem->BaseVertexLocation = skullRitem->geo->geoMap["skull"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(skullRitem.get()); + m_SkullRItem = skullRitem.get(); + m_vecAll.push_back(std::move(skullRitem)); + + auto gridRitem = std::make_unique(); + gridRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + gridRitem->texTransform = Transpose(Matrix4::MakeScale({ 8.0f, 8.0f, 1.0f })); + gridRitem->matTransform = Transpose(Matrix4(kIdentity)); + gridRitem->MaterialIndex = eMaterialType::tile; + gridRitem->geo = m_mapGeometries["shapeGeo"].get(); + gridRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + gridRitem->IndexCount = gridRitem->geo->geoMap["grid"].IndexCount; + gridRitem->StartIndexLocation = gridRitem->geo->geoMap["grid"].StartIndexLocation; + gridRitem->BaseVertexLocation = gridRitem->geo->geoMap["grid"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(gridRitem.get()); + m_vecAll.push_back(std::move(gridRitem)); + + for (int i = 0; i < 5; ++i) + { + auto leftCylRitem = std::make_unique(); + leftCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 1.5f, -10.0f + i * 5.0f)))); + leftCylRitem->texTransform = Transpose(Matrix4::MakeScale({ 1.5f, 2.0f, 1.0f })); + leftCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->MaterialIndex = eMaterialType::bricks; + leftCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftCylRitem->IndexCount = leftCylRitem->geo->geoMap["cylinder"].IndexCount; + leftCylRitem->StartIndexLocation = leftCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + leftCylRitem->BaseVertexLocation = leftCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftCylRitem.get()); + m_vecAll.push_back(std::move(leftCylRitem)); + + auto rightCylRitem = std::make_unique(); + rightCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 1.5f, -10.0f + i * 5.0f)))); + rightCylRitem->texTransform = Transpose(Matrix4::MakeScale({ 1.5f, 2.0f, 1.0f })); + rightCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->MaterialIndex = eMaterialType::bricks; + rightCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightCylRitem->IndexCount = rightCylRitem->geo->geoMap["cylinder"].IndexCount; + rightCylRitem->StartIndexLocation = rightCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + rightCylRitem->BaseVertexLocation = rightCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightCylRitem.get()); + m_vecAll.push_back(std::move(rightCylRitem)); + + auto leftSphereRitem = std::make_unique(); + leftSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 3.5f, -10.0f + i * 5.0f)))); + leftSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->MaterialIndex = eMaterialType::mirror; + leftSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftSphereRitem->IndexCount = leftSphereRitem->geo->geoMap["sphere"].IndexCount; + leftSphereRitem->StartIndexLocation = leftSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + leftSphereRitem->BaseVertexLocation = leftSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftSphereRitem.get()); + m_vecAll.push_back(std::move(leftSphereRitem)); + + auto rightSphereRitem = std::make_unique(); + rightSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 3.5f, -10.0f + i * 5.0f)))); + rightSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->MaterialIndex = eMaterialType::mirror; + rightSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightSphereRitem->IndexCount = rightSphereRitem->geo->geoMap["sphere"].IndexCount; + rightSphereRitem->StartIndexLocation = rightSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + rightSphereRitem->BaseVertexLocation = rightSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightSphereRitem.get()); + m_vecAll.push_back(std::move(rightSphereRitem)); + } +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} + +void GameApp::buildCubeCamera(float x, float y, float z) +{ + // �������� + Math::Vector3 targets[6] = + { + { x + 1.0f, y, z }, // +X + { x - 1.0f, y, z }, // -X + { x, y + 1.0f, z }, // +Y + { x, y - 1.0f, z }, // -Y + { x, y, z + 1.0f }, // +Z + { x, y, z - 1.0f } // -Z + }; + + // ��������Ϸ� + Math::Vector3 ups[6] = + { + { +0.0f, +1.0f, +0.0f }, // +X + { +0.0f, +1.0f, +0.0f }, // -X + { +0.0f, +0.0f, -1.0f }, // +Y + { +0.0f, +0.0f, +1.0f }, // -Y + { +0.0f, +1.0f, +0.0f }, // +Z + { +0.0f, +1.0f, +0.0f } // -Z + }; + + for (int i = 0; i < 6; ++i) + { + m_CameraCube[i].SetEyeAtUp({ x, y, z }, targets[i], ups[i]); + m_CameraCube[i].SetPerspectiveMatrix(Math::XM_PIDIV2, 1.0f, 0.1f, 1000.0f); + m_CameraCube[i].Update(); + } +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/GameApp.h b/Chapter 19 Normal Mapping/GameApp.h new file mode 100644 index 0000000..0fab1d9 --- /dev/null +++ b/Chapter 19 Normal Mapping/GameApp.h @@ -0,0 +1,110 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + virtual void RenderUI(class GraphicsContext& gfxContext) override; + +private: + void cameraUpdate(); // camera���� + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + + void buildCubeCamera(float x, float y, float z); + void DrawSceneToCubeMap(GraphicsContext& gfxContext); + +private: + void buildShapeGeo(); + void buildSkullGeo(); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + OpaqueDynamicReflectors, + Sky, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + enum eMaterialType + { + bricks = 0, + tile, + mirror, + skull, + sky + }; + StructuredBuffer m_mats; // t1 �洢���е��������� + std::vector m_srvs; // �洢���е�������Դ + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_SKY, + }; + std::unordered_map m_mapPSO; + + RenderItem* m_SkullRItem = nullptr; + + // ��պ������ + Math::Camera m_CameraCube[6]; + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + Math::Matrix4 m_ViewProjMatrix; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::unique_ptr m_CameraController; + + // �뾶 + float m_radius = 10.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/GeometryGenerator.cpp b/Chapter 19 Normal Mapping/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 19 Normal Mapping/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 19 Normal Mapping/GeometryGenerator.h b/Chapter 19 Normal Mapping/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 19 Normal Mapping/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 19 Normal Mapping/Models/skull.txt b/Chapter 19 Normal Mapping/Models/skull.txt new file mode 100644 index 0000000..5e0f3ce --- /dev/null +++ b/Chapter 19 Normal Mapping/Models/skull.txt @@ -0,0 +1,91423 @@ +VertexCount: 31076 +TriangleCount: 60339 +VertexList (pos, normal) +{ + 0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907 + 0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907 + 0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907 + 1.12127 1.64042 -1.94785 -0.0941668 0.904117 0.416779 + 1.04654 1.60198 -1.86107 0.0955379 0.877073 0.47076 + 1.06964 1.60894 -1.87873 0.0955378 0.877073 0.47076 + 1.151 1.65245 -1.7697 -0.378509 0.925514 -0.01241 + 1.11866 1.63277 -1.6602 -0.373131 0.92607 0.0562804 + 1.13374 1.64126 -1.6999 -0.373131 0.92607 0.0562804 + -1.55433 1.51188 0.462787 -0.650629 -0.723091 0.231995 + -1.58157 1.5563 0.524846 -0.650628 -0.723091 0.231995 + -1.63136 1.61203 0.558918 -0.189662 0.407906 -0.893108 + -0.948906 1.69815 -1.06444 0.06309 -0.586398 -0.807562 + -0.883508 1.6865 -1.05088 0.333777 -0.941824 -0.0394929 + -0.901206 1.61571 -1.00085 0.06309 -0.586398 -0.807562 + -0.698766 2.11852 0.21365 0.449339 0.0647742 -0.89101 + -0.800745 2.16722 0.143497 0.233569 0.963598 0.130093 + -0.757773 2.14908 0.186115 0.510221 0.846084 -0.154329 + -0.026884 2.45107 -1.11594 0.569732 0.569877 -0.592153 + -0.026893 2.5207 -1.04894 0.569732 0.569877 -0.592153 + -0.00861 2.52374 -1.02842 -0.412524 0.686678 0.59858 + -0.925082 1.67623 0.632925 0.327682 0.790395 0.517591 + -1.02369 1.81801 0.51875 0.764479 0.632399 0.12507 + -1.07771 1.88665 0.501859 0.768834 0.630814 0.104728 + -1.21447 1.45124 0.759218 -0.977394 0.0525264 0.204796 + -1.24213 1.58922 0.591819 -0.977394 0.0525264 0.204796 + -1.25585 1.60974 0.521077 -0.977394 0.0525264 0.204796 + -1.46174 1.30584 0.581853 0.864067 -0.492757 0.102851 + -1.46161 1.25622 0.403406 0.828898 0.539105 -0.149312 + -1.49721 1.30268 0.373529 0.828898 0.539105 -0.149312 + -1.14801 1.74733 -2.15642 0.627914 0.700696 0.338748 + -1.14244 1.71124 -2.06432 0.928712 0.127139 -0.348326 + -1.11856 1.68698 -2.02151 0.312969 0.890586 0.330011 + -1.0984 1.63391 -1.92098 0.487942 -0.510099 -0.708315 + -1.04635 1.60183 -1.86122 0.772868 0.0817976 -0.629273 + -1.12108 1.64027 -1.948 0.772868 0.0817976 -0.629273 + -1.13384 1.64128 -1.69995 0.359386 0.931225 0.060508 + -1.11876 1.63288 -1.66019 0.359386 0.931225 0.060508 + -1.1511 1.65248 -1.76974 0.66363 0.744796 -0.0698237 + -1.18233 1.23731 -1.58105 -0.922929 -0.0737541 -0.37784 + -1.17721 1.24002 -1.59409 -0.922929 -0.073754 -0.37784 + -1.16328 1.23237 -1.62663 -0.922929 -0.073754 -0.37784 + -0.91314 1.26874 -2.12118 -0.105577 0.815147 0.569551 + -0.898511 1.25175 -2.09719 -0.887193 -0.36437 0.283061 + -0.883033 1.24766 -2.05395 -0.887193 -0.36437 0.283061 + 1.04301 1.16262 -1.8932 0.397469 0.0978369 -0.912385 + 1.01556 1.17173 -1.90419 0.0633285 0.952548 -0.297727 + 0.980129 1.18837 -1.91784 0.397469 0.0978369 -0.912385 + 0.800364 1.32241 -2.89805 0.629678 0.750854 -0.199307 + 0.806559 1.32541 -2.88944 0.823409 -0.271908 -0.49806 + 0.831275 1.27798 -2.82269 0.823409 -0.271908 -0.49806 + -2.04759 1.79087 -0.419645 -0.988527 -0.10864 0.104937 + -2.05701 1.81152 -0.487006 -0.997315 -0.0537478 0.0497454 + -2.05691 1.78848 -0.509912 -0.980777 -0.193847 -0.0223518 + -0.692099 1.2342 -2.95767 -0.573742 0.803924 -0.156607 + -0.695861 1.23354 -2.94732 -0.573742 0.803924 -0.156607 + -0.697976 1.23713 -2.92113 -0.573742 0.803924 -0.156607 + 2.05691 1.78848 -0.509912 0.998191 -0.0583625 -0.0144192 + 2.05701 1.81152 -0.487006 0.997306 -0.0538525 0.0498041 + 2.04758 1.79087 -0.419637 0.988507 -0.108734 0.105031 + 1.24544 1.07804 -1.44958 0.649224 -0.0182511 -0.760378 + 1.21165 1.0146 -1.47691 0.166265 0.745609 -0.645308 + 1.1173 1.02629 -1.55774 0.649224 -0.0182511 -0.760378 + -1.11728 1.02629 -1.55775 -0.649255 -0.0183743 -0.760349 + -1.21163 1.0146 -1.47691 -0.166337 0.745526 -0.645385 + -1.24542 1.07804 -1.44959 -0.649255 -0.0183743 -0.760349 + -0.806332 1.74827 -2.76421 -0.434612 0.209157 0.875994 + -0.814274 1.75317 -2.76932 -0.434612 0.209157 0.875994 + -0.839872 1.7517 -2.78167 -0.434612 0.209157 0.875994 + 0.821988 1.74942 -2.77501 0.329372 -0.519014 0.788757 + 0.814274 1.75317 -2.76932 0.329372 -0.519014 0.788757 + 0.785028 1.76407 -2.74993 0.329372 -0.519014 0.788757 + 0.888762 1.33938 -1.5282 0.00961599 0.997143 0.0749256 + 0.915406 1.33821 -1.5161 0.00961599 0.997143 0.0749256 + 0.921874 1.33846 -1.52023 0.00961599 0.997143 0.0749256 + -0.886486 1.45631 -2.24676 -0.396142 0.917961 0.0204671 + -0.902475 1.44951 -2.25152 -0.396142 0.917961 0.0204671 + -0.927139 1.43888 -2.25177 -0.396142 0.917961 0.0204671 + 1.04271 1.37679 -2.1176 0.2494 -0.0437617 0.967411 + 1.07451 1.36833 -2.12618 0.2494 -0.0437617 0.967411 + 1.08487 1.3765 -2.12848 0.2494 -0.0437617 0.967411 + -0.943902 1.36906 -1.86388 0.166581 0.42439 0.890025 + -0.967246 1.38002 -1.86474 0.166581 0.42439 0.890025 + -0.996414 1.38162 -1.86005 0.166581 0.42439 0.890025 + -0.909016 1.37928 -1.86229 -0.0199364 0.651776 0.75815 + -0.935798 1.39002 -1.87222 -0.0199364 0.651776 0.75815 + -0.977897 1.39575 -1.87826 -0.0199364 0.651776 0.75815 + -0.049274 1.91604 -3.38694 -0.350601 -0.899629 -0.26028 + -0.00609 1.89928 -3.38721 -0.369168 -0.892749 -0.258289 + 0 1.88767 -3.35525 -0.350601 -0.899629 -0.26028 + -0.00609 1.93619 -3.35816 -1 0 0 + -0.00609 1.92264 -3.37029 -1 0 0 + -0.011004 2.20909 -0.926224 0.999938 0.00708208 -0.00860211 + -0.011004 1.92279 -1.16193 0.999938 0.00708208 -0.00860211 + -0.014777 2.65435 -0.998232 0.995471 -0.0158419 0.0937386 + -0.011004 1.92279 -1.16193 0.785848 -0.421049 0.452946 + 0.031727 1.84797 -1.26694 0.686473 -0.714394 -0.13563 + 0.031727 1.84797 -1.26694 -0.882422 -0.413073 0.225172 + 0.064756 1.84625 -1.22456 -0.869915 -0.210535 0.446008 + -0.014777 2.65435 -0.998232 -0.770175 -0.241181 0.590477 + 0.161362 1.08963 0.567937 0.195338 0.92057 0.338221 + 0.15157 1.06403 0.643287 0.195338 0.92057 0.33822 + 0.202299 1.02452 0.721508 0.195338 0.92057 0.33822 + 1.13441 1.64513 -1.92742 0.664039 -0.745121 -0.0620253 + 1.12127 1.64042 -1.94785 0.577008 -0.794899 -0.187611 + 1.15142 1.68191 -2.03092 0.577008 -0.794899 -0.187611 + 1.14237 1.66056 -1.98515 -0.181527 0.904501 0.385909 + 1.15142 1.68191 -2.03092 -0.181527 0.904501 0.385909 + 0.173526 2.0323 -3.02581 0.421532 0.687881 -0.590873 + 0.164996 2.02874 -3.03604 0.421532 0.687881 -0.590873 + 0.156435 2.02905 -3.04178 0.421532 0.687881 -0.590873 + -0.018207 2.29242 -0.86875 -0.16113 0.133196 0.977904 + -0.011004 2.20909 -0.926224 -0.329358 -0.555228 0.763704 + 0.016514 2.25648 -0.879903 -0.329358 -0.555228 0.763704 + -0.011004 2.20909 -0.926224 0.902381 -0.119202 -0.414126 + 0.014767 2.65435 -0.998232 0.630835 -0.424023 -0.649809 + 0.016514 2.25648 -0.879903 0.902381 -0.119202 -0.414126 + -0.042206 0.01602 3.24589 0 0.626778 0.779198 + -0.001795 0.003301 3.25612 -0.369989 -0.0689123 0.926477 + 0.001808 0.003301 3.25612 0 0.626778 0.779198 + -0.972324 1.71963 0.59555 0.307586 0.790657 0.529389 + -0.848978 1.62264 0.668739 0.307586 0.790657 0.529389 + -1.237 1.53076 0.60848 -0.417096 0.181801 0.890494 + -1.26298 1.58624 0.584985 -0.819253 -0.356714 0.448976 + -1.33145 1.63145 0.543685 -0.417096 0.181801 0.890494 + -1.30863 1.42333 0.768356 -0.275156 -0.302959 -0.912417 + -1.35441 1.57088 0.718197 -0.944445 -0.205966 0.256128 + -1.37295 1.58577 0.661806 -0.944445 -0.205966 0.256128 + -0.995136 1.68804 -1.12174 0.696565 0.353522 -0.624355 + -0.971002 1.70035 -1.08785 0.696565 0.353522 -0.624355 + -0.948906 1.69815 -1.06444 0.696565 0.353522 -0.624355 + -0.686108 1.69237 -1.37664 -0.112009 0.079852 0.990494 + -0.668868 1.74969 -1.37931 0.942787 -0.288834 0.166514 + -0.692772 1.67708 -1.37616 -0.112009 0.079852 0.990494 + -0.991592 1.54803 -1.21183 -0.598015 -0.458623 -0.657299 + -0.955511 1.48158 -1.19533 -0.725065 -0.232811 0.648136 + -0.922127 1.44708 -1.17038 -0.725065 -0.232811 0.648136 + -1.02216 1.67959 -1.28351 0.554421 -0.0861091 -0.82777 + -1.00886 1.67572 -1.2742 0.686154 -0.0106421 -0.727379 + -0.994441 1.63158 -1.25995 0.554421 -0.0861091 -0.82777 + 0.02884 1.8545 -1.31386 0.209354 -0.97749 0.0261592 + -0.011004 1.92279 -1.16193 -0.876146 -0.481864 -0.0131942 + -0.566524 1.95757 -2.62998 0.80872 -0.586442 0.0453573 + -0.592266 1.91999 -2.61288 0.735678 -0.623871 -0.263747 + -0.593047 1.92413 -2.62486 0.731705 -0.641824 -0.229498 + -1.14934 1.85886 -1.621 -0.748231 -0.0628384 0.660455 + -1.18042 1.92842 -1.63808 0.695388 0.448556 0.561456 + -1.22327 1.99607 -1.63906 0.695388 0.448556 0.561456 + -0.848896 1.59106 -1.29936 0.0547428 0.991271 -0.119936 + -0.862195 1.59124 -1.28868 -0.607286 0.231798 -0.759916 + -0.906036 1.59329 -1.25302 -0.240133 -0.963498 -0.118355 + 0.040846 2.03476 -3.07187 0.32524 -0.797022 -0.508895 + 0.021963 2.02879 -3.08313 0.412098 0.310944 -0.856439 + -0.030826 2.04626 -3.10218 0.412098 0.310944 -0.856439 + 0.016514 2.25648 -0.879903 0.361972 0.492241 0.791628 + 0.036031 2.2728 -0.898977 0.854781 0.134694 0.501205 + 0.026896 2.5207 -1.04894 0.89138 0.34194 0.297521 + 0.342526 0.826727 1.0007 0.953858 0.107937 0.280186 + 0.321893 0.815854 1.07513 0.953858 0.107937 0.280186 + 0.312155 0.767184 1.12703 0.953858 0.107937 0.280186 + -0.280438 0.691045 1.20391 -0.945571 0.12964 0.298478 + -0.28423 0.755168 1.16405 -0.945571 0.12964 0.298478 + -0.293968 0.803753 1.11209 -0.945571 0.12964 0.298478 + 1.02368 1.78898 0.51143 0.89627 -0.163857 0.41213 + 0.939812 1.7023 0.659358 0.89627 -0.163857 0.41213 + 0.972324 1.71963 0.595543 0.89627 -0.163857 0.41213 + 0.639283 1.82867 -0.742512 0.949949 -0.265038 0.165381 + 0.641212 1.80309 -0.633011 -0.155079 -0.962606 -0.222129 + 0.588889 1.81998 -0.669658 -0.576988 -0.694303 0.430148 + 0.996149 2.87607 -0.646464 0.195019 -0.66248 0.723248 + 0.779571 2.78279 -0.673504 0.195019 -0.66248 0.723249 + 0.739695 2.74565 -0.696773 0.694051 -0.493486 -0.524181 + 2.01559 2.518 -0.205467 -0.398232 -0.638181 0.65889 + 1.85647 2.54302 -0.277405 -0.398232 -0.638181 0.65889 + 1.78909 2.52885 -0.331856 -0.398232 -0.638181 0.65889 + 2.06551 2.37554 -0.14513 0.209248 0.739158 0.640203 + 1.98115 2.45802 -0.212777 0.209248 0.739158 0.640203 + 1.90735 2.49937 -0.236397 0.209248 0.739158 0.640203 + 0.701621 1.59347 -1.07093 -0.310767 -0.590351 -0.744923 + 0.795773 1.58717 -1.10522 -0.407193 -0.681904 -0.607618 + 0.857639 1.53971 -1.09341 -0.310767 -0.59035 -0.744923 + 0.700579 1.79093 -2.19915 0.794599 0.593925 -0.125957 + 0.750666 1.75461 -2.12943 0.145023 -0.880776 -0.45078 + 0.719806 1.76903 -2.18362 0.813011 0.475148 -0.336522 + -0.92271 1.96082 -0.624798 0.172164 -0.446348 0.878142 + -0.929869 1.89636 -0.656157 0.172164 -0.446348 0.878142 + -0.915918 1.85125 -0.681822 0.892288 -0.365755 0.26466 + -1.25705 3.37972 -1.68482 -0.110911 -0.983827 0.14065 + -1.14214 3.39251 -1.50476 -0.110911 -0.983827 0.14065 + -1.11887 3.39705 -1.45464 -0.110911 -0.983827 0.14065 + -0.010689 2.2749 -0.3052 0.629784 0.648282 0.427905 + -0.009414 2.2992 -0.343893 0.629784 0.648282 0.427905 + -0.048528 2.35557 -0.371727 0.629784 0.648282 0.427905 + -1.07094 1.86141 0.481375 -0.876493 -0.32002 0.359647 + -0.972324 1.71963 0.59555 -0.876493 -0.32002 0.359647 + -0.939812 1.7023 0.659365 -0.876493 -0.32002 0.359647 + -1.25585 1.60974 0.521077 0.204306 -0.604269 -0.770141 + -1.18554 1.48162 0.722401 -0.0429436 -0.669492 -0.741577 + -1.21447 1.45124 0.759218 0.24249 -0.645061 -0.724634 + -1.70723 0.427067 1.15213 -0.205891 0.970178 -0.12792 + -1.70775 0.443486 1.2775 -0.205891 0.970178 -0.12792 + -1.7011 0.453737 1.34454 -0.205891 0.970178 -0.12792 + -0.609115 1.90933 -2.58583 -0.554437 0.827813 0.0855872 + -0.571293 1.94331 -2.66948 -0.554437 0.827813 0.0855872 + -0.593047 1.92413 -2.62486 -0.554437 0.827813 0.0855872 + -0.729379 1.60414 -1.84242 -0.735368 0.676003 -0.0474693 + -0.696971 1.63682 -1.87903 -0.82698 -0.194483 -0.527522 + -0.692433 1.63726 -1.94318 -0.735368 0.676003 -0.0474693 + -1.0984 1.63391 -1.92098 -0.244409 0.749525 0.615204 + -1.06945 1.6088 -1.87888 -0.244409 0.749526 0.615204 + -1.04635 1.60183 -1.86122 -0.244409 0.749525 0.615204 + 0.036031 2.2728 -0.898977 -0.996262 0.014774 0.0851082 + 0.03663 2.30385 -0.897355 -0.996262 0.014774 0.0851082 + 0.026896 2.5207 -1.04894 -0.996262 0.014774 0.0851082 + 1.21543 1.25463 0.632758 -0.912708 0.113447 -0.392548 + 1.20241 1.08491 0.659711 -0.928512 0.0122976 -0.371098 + 1.1661 0.918671 0.745052 -0.286635 -0.61351 -0.73583 + 1.33145 1.63145 0.543685 0.417147 0.181782 0.890474 + 1.26299 1.58624 0.584984 0.417147 0.181782 0.890474 + 1.23701 1.53076 0.60848 0.417147 0.181782 0.890474 + 1.37295 1.58577 0.661806 0.944445 -0.205962 0.256133 + 1.35441 1.57088 0.718196 0.944445 -0.205962 0.256133 + 1.30863 1.42333 0.768356 0.275663 -0.291308 -0.916051 + 0.792052 1.49776 -1.24696 -0.0135992 0.985387 0.169787 + 0.828512 1.49337 -1.21855 0.221899 0.853284 -0.471877 + 0.874389 1.49643 -1.23266 -0.449359 0.864271 0.226078 + 0.922122 1.44708 -1.17038 -0.238096 -0.602308 0.761929 + 0.955513 1.48149 -1.19538 0.725133 -0.232945 0.648011 + 0.991592 1.54803 -1.21183 0.601275 -0.451223 -0.659444 + 0.592978 1.92413 -2.62486 -0.733794 -0.641747 -0.222951 + 0.592234 1.92008 -2.61283 -0.738748 -0.623481 -0.255977 + 0.566529 1.95757 -2.62998 -0.805241 -0.592217 0.0294389 + 1.22327 1.99606 -1.63905 -0.695663 0.448589 0.56109 + 1.18043 1.92842 -1.63808 -0.695663 0.448589 0.56109 + 1.14935 1.85886 -1.621 0.743443 -0.0685493 0.665277 + -1.59486 1.39116 0.355271 -0.0661124 0.295114 -0.953172 + -1.51069 1.33656 0.353853 -0.384054 -0.573208 -0.723834 + -1.49721 1.30268 0.373529 -0.328928 -0.706901 -0.626177 + -1.49586 2.56716 -0.58981 -0.607194 -0.445574 -0.65786 + -1.58602 2.58657 -0.536845 -0.516028 -0.066654 -0.853974 + -1.72019 2.70443 -0.464969 -0.717703 -0.338326 -0.608637 + 0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.069411 0.149083 3.81521 0 0.702478 -0.711705 + -1.13431 1.77915 -2.24394 0.748987 0.576371 0.326825 + -1.15072 1.77302 -2.19552 0.796931 0.528217 0.293067 + 1.02369 1.81801 0.518748 -0.769296 0.630583 0.102705 + 1.0777 1.88665 0.501858 -0.548412 -0.0230373 -0.835891 + 1.18729 2.0375 0.396588 -0.788918 0.537794 0.297298 + 1.21543 1.25463 0.632758 -0.943445 0.0893122 -0.319273 + 1.21129 1.35382 0.672741 -0.659387 -0.123053 -0.741665 + 1.26299 1.58624 0.584984 -0.943445 0.0893122 -0.319273 + 0.757834 2.14915 0.186202 -0.510264 0.846046 -0.154393 + 0.800807 2.16729 0.143582 -0.510264 0.846046 -0.154393 + 0.698828 2.11859 0.213736 -0.448671 0.0631055 -0.891466 + 0.001808 0.003301 3.25612 1 0 0 + 0.001808 -0.013762 3.24667 1 0 0 + 0.001808 -0.005483 3.17033 0.46511 -0.884971 -0.0223388 + 0.74827 1.58102 -1.31758 0.185978 0.978799 -0.085815 + 0.748333 1.58493 -1.27294 0.139582 0.986432 -0.0864167 + 0.848893 1.59105 -1.29935 -0.083259 0.992753 -0.0866547 + 0.711042 1.59463 -1.33315 0.839186 0.541675 -0.0485298 + 0.711105 1.59853 -1.28851 0.687275 0.724916 -0.0463682 + 0.699505 1.64767 -1.36081 0.956663 0.288108 0.0423007 + 0.686132 1.69228 -1.37669 0.936448 0.341179 0.0816172 + 0.697732 1.64315 -1.30438 0.94884 0.310267 0.0586247 + 0.656563 1.77702 -1.40086 0.932306 0.350624 0.0887014 + 1.00885 1.67572 -1.27419 0.670214 -0.693233 -0.265032 + 0.977919 1.61141 -1.18422 -0.548297 -0.595979 -0.586669 + 0.946949 1.61536 -1.27285 0.462875 -0.884401 -0.059845 + 0.937006 1.58934 -1.16439 0.0125529 -0.640481 -0.767871 + 0.906036 1.59329 -1.25302 0.240627 -0.963412 -0.118054 + 0.85677 1.58823 -1.32627 0.043441 -0.986395 0.158547 + 0.960259 1.61924 -1.28217 -0.0511243 -0.433055 0.899916 + 1.00885 1.67572 -1.27419 0.578205 -0.561083 0.592339 + 0.963515 1.56736 -1.16991 -0.691064 0.46106 -0.556646 + 0.917637 1.56429 -1.1558 0.00972007 0.191642 -0.981417 + 0.845353 1.58744 -1.19488 0.17914 -0.851587 -0.492654 + 0.801509 1.58539 -1.23054 -0.335613 -0.85461 0.396239 + 0.862192 1.59116 -1.28874 0.0295432 -0.9993 0.0229327 + 0.994443 1.63158 -1.25994 -0.925431 0.375615 -0.0498965 + 1.00885 1.67572 -1.27419 -0.953877 0.267096 -0.137033 + 0.75894 1.61619 -1.24569 -0.790815 -0.347 0.504184 + 0.761569 1.58122 -1.30691 -0.242761 -0.955401 0.168154 + 0.848893 1.59105 -1.29935 0.0612642 -0.998073 0.00988391 + 0.718999 1.61201 -1.32205 -0.802857 -0.23298 0.548763 + 0.74827 1.58102 -1.31758 -0.492294 -0.557249 0.66867 + 0.699021 1.70327 -1.32391 -0.803778 -0.594448 0.0239307 + 0.707462 1.66505 -1.34971 -0.935553 -0.137607 0.325277 + 0.699505 1.64767 -1.36081 -0.840344 0.0395603 0.540607 + 0.711042 1.59463 -1.33315 -0.686943 -0.140715 0.712958 + 0.76871 1.61927 -1.22983 -0.829319 -0.146584 0.539206 + 0.708791 1.70626 -1.3081 -0.838716 -0.095275 0.53617 + 0.789525 1.56678 -1.21471 -0.823792 -0.170977 0.540493 + 0.686132 1.69228 -1.37669 -0.866756 -0.211662 0.45159 + 0.668871 1.74969 -1.37931 -0.92902 -0.312853 0.197597 + 0.656563 1.77702 -1.40086 -0.944761 -0.140863 0.295946 + 0.639302 1.83442 -1.40348 -0.945695 -0.302329 0.119408 + 0.600297 1.9196 -1.45941 -0.935523 -0.35319 -0.00734592 + 0.636604 1.83901 -1.44743 -0.909434 -0.393561 -0.134309 + 0.697732 1.64315 -1.30438 -0.904037 0.0293146 0.426448 + 0.66043 1.78791 -1.35351 -0.858241 -0.478347 0.186029 + 0.626051 1.87036 -1.31612 -0.909292 -0.346445 -0.230571 + 0.599786 1.94895 -1.30965 -0.875446 -0.276772 -0.39622 + 0.613037 1.91293 -1.39706 -0.951128 -0.301862 0.0650784 + 0.654263 1.77702 -1.32405 -0.751583 -0.211272 -0.624889 + 0.619884 1.85947 -1.28666 -0.501873 -0.163251 -0.849396 + 0.589443 1.89582 -1.28503 -0.0798705 -0.0211582 -0.996581 + 0.572223 2.03146 -1.30735 -0.650346 -0.512783 -0.56045 + 0.657449 1.71478 -1.31545 -0.182016 -0.375202 -0.908897 + 0.628195 1.74036 -1.30896 -0.284599 -0.0806566 -0.955247 + 0.597753 1.77671 -1.30732 0.190494 0.01163 -0.981619 + 0.548924 1.83147 -1.32837 0.353545 0.0467009 -0.934251 + 0.56188 1.97841 -1.28267 -0.148599 -0.106591 -0.983136 + 0.684132 1.6989 -1.29475 -0.0788835 -0.724345 -0.68491 + 0.631718 1.61943 -1.2503 0.0298424 -0.668702 -0.742932 + 0.631381 1.67812 -1.30036 0.0169822 -0.488516 -0.87239 + 0.590278 1.68513 -1.29089 -0.376297 -0.43088 -0.820209 + 0.708791 1.70626 -1.3081 -0.0330505 -0.848193 -0.528656 + 0.726242 1.62827 -1.2706 -0.311936 -0.689434 -0.65374 + 0.658401 1.60355 -1.2296 0.185007 -0.812766 -0.552434 + 0.636545 1.55107 -1.1577 0.30473 -0.846636 -0.436287 + 0.605073 1.57287 -1.20325 0.0408359 -0.779023 -0.625664 + 0.604736 1.63147 -1.25336 -0.219954 -0.619859 -0.753257 + 0.750901 1.63563 -1.28395 -0.352328 -0.550117 -0.757123 + 0.770083 1.58651 -1.24989 -0.862131 -0.476999 -0.170882 + 0.711337 1.62078 -1.18883 -0.05394 -0.934159 -0.352757 + 0.689481 1.5683 -1.11694 0.330974 -0.873629 -0.356691 + 0.622039 1.51561 -1.08948 -0.117519 -0.919616 -0.374827 + 0.590567 1.53741 -1.13503 -0.335536 -0.906502 -0.256262 + 0.771717 1.58314 -1.26884 -0.950377 -0.309946 -0.0267693 + 0.790419 1.50113 -1.22799 -0.805017 -0.546168 0.231621 + 0.755178 1.57902 -1.16811 -0.517039 -0.830337 -0.207874 + 0.704378 1.56692 -1.09036 0.112455 -0.869528 -0.480911 + 0.635703 1.4879 -1.04188 -0.0054858 -0.928742 -0.370685 + 0.792052 1.49776 -1.24696 -0.872426 -0.488606 0.0116762 + 0.840998 1.46202 -1.20765 -0.327813 -0.943636 -0.045711 + 0.809256 1.55981 -1.16444 -0.507047 -0.838293 0.200418 + 0.758457 1.54772 -1.08669 -0.29294 -0.824332 -0.484419 + 0.6506 1.48652 -1.0153 -0.164864 -0.611883 -0.773575 + 0.859835 1.52061 -1.14415 -0.563628 -0.7081 0.425344 + 0.6506 1.48652 -1.0153 0.282589 -0.936699 -0.206731 + 0.612757 1.47847 -0.963546 -0.195089 -0.933803 0.29992 + 0.599093 1.50618 -1.01114 -0.791459 -0.597956 -0.126651 + 0.579459 1.54475 -1.05154 -0.850008 -0.526332 0.0214585 + 0.556701 1.56805 -1.18832 -0.580403 -0.7039 -0.409458 + 0.586667 1.54747 -0.91427 -0.844742 -0.444083 0.298665 + 0.567033 1.58604 -0.954669 -0.977182 -0.203594 0.0605327 + 0.567352 1.65255 -1.00526 -0.990658 -0.0825064 0.108583 + 0.545593 1.57539 -1.10483 -0.891632 -0.434143 0.128501 + 0.6172 1.53206 -0.889972 0.030182 -0.796937 0.603307 + 0.612248 1.60182 -0.819792 -0.496877 -0.648056 0.57718 + 0.581715 1.61732 -0.84404 -0.875442 -0.341842 0.341681 + 0.565407 1.66919 -0.887485 -0.990111 -0.0742072 0.119056 + 0.629692 1.50131 -0.961109 0.862344 -0.383833 0.330206 + 0.634135 1.5549 -0.887535 0.907243 -0.352565 0.229366 + 0.630172 1.5876 -0.82637 0.539158 -0.579954 0.610706 + 0.601719 1.6529 -0.769478 -0.577694 -0.438679 0.688353 + 0.6506 1.48652 -1.0153 0.916919 -0.109968 0.383624 + 0.643397 1.56889 -0.998153 0.953583 -0.111151 0.279865 + 0.643726 1.61889 -0.917968 0.983699 -0.140621 0.112079 + 0.639763 1.6516 -0.856812 0.979198 -0.0845448 0.184455 + 0.619643 1.63869 -0.776057 0.471726 -0.542211 0.695329 + 0.664305 1.55402 -1.0524 0.699612 -0.0272337 0.714004 + 0.701621 1.59347 -1.07093 0.503858 0.0379935 0.862951 + 0.658945 1.63178 -1.03008 0.875368 -0.124851 0.467058 + 0.659274 1.68187 -0.949849 0.978211 -0.107128 0.177839 + 0.646938 1.71515 -0.867495 0.982201 -0.0753932 0.172038 + 0.626818 1.70224 -0.78674 0.973819 -0.11088 0.198448 + 0.616518 1.72023 -0.715886 0.952295 -0.110975 0.284286 + 0.795773 1.58717 -1.10522 0.43991 0.00564992 0.898024 + 0.758457 1.54772 -1.08669 0.384658 0.112744 0.916148 + 0.6506 1.48652 -1.0153 0.337107 0.400058 0.85224 + 0.133271 1.97001 -3.02272 0.0154635 -0.521531 -0.853092 + 0.093994 2.00582 -3.01375 -0.0964595 -0.529434 -0.842849 + 0.156435 2.02905 -3.04178 -0.329619 -0.159169 -0.9306 + 0.122012 1.95733 -3.01055 -0.0762406 -0.997074 0.00553609 + 0.082735 1.99305 -3.00163 -0.423956 -0.745927 -0.513667 + 0.080404 2.00707 -3.02371 0.31784 -0.784906 -0.531884 + 0.141832 1.9697 -3.01698 0.779898 -0.625712 0.0155829 + 0.128453 1.99899 -2.99251 0.691133 -0.559822 0.457094 + 0.108633 1.98662 -2.9861 0.501486 -0.407871 0.762989 + 0.156435 2.02905 -3.04178 0.475826 -0.443846 -0.759335 + 0.164996 2.02874 -3.03604 0.4903 -0.436023 -0.754645 + 0.164996 2.02874 -3.03604 0.80018 -0.124512 0.586693 + 0.108633 1.98662 -2.9861 -0.49426 -0.678915 0.542938 + 0.284568 2.00427 -2.96887 0.56808 -0.247494 -0.784877 + 0.261295 1.99188 -2.9818 0.187019 0.265387 -0.94583 + 0.2203 2.03343 -3.02458 -0.0508619 -0.991931 0.116125 + 0.240299 1.98703 -2.9834 -0.0571379 -0.00710554 -0.998341 + 0.199304 2.0285 -3.02623 0.0826115 -0.771611 -0.630708 + 0.156435 2.02905 -3.04178 -0.105135 -0.719327 -0.686669 + 0.263765 1.97714 -2.99568 -0.119907 0.938453 -0.323926 + 0.22481 1.97654 -2.98743 -0.0130644 0.94052 -0.339487 + 0.201344 1.98642 -2.97515 -0.0161998 0.130523 -0.991313 + 0.175566 1.99014 -2.97478 -0.121146 -0.768017 -0.628867 + 0.173526 2.0323 -3.02581 0.0509812 -0.987473 -0.149324 + 0.156435 2.02905 -3.04178 -0.132375 -0.934101 0.33156 + 0.286899 1.98164 -2.99787 -0.241542 0.932903 -0.267114 + 0.293134 1.98928 -3.0755 -0.0133371 0.983189 0.182106 + 0.268182 1.99335 -3.07676 0.253084 0.874727 0.413281 + 0.199857 1.98061 -2.98869 0.204668 0.977909 -0.0424764 + 0.175566 1.99014 -2.97478 0.287814 0.946572 -0.145479 + 0.284568 2.00427 -2.96887 -0.0733668 0.783513 -0.617028 + 0.310171 1.99395 -2.98499 -0.173813 0.973152 -0.150879 + 0.316268 1.99369 -3.07773 -0.223476 0.972495 0.0656668 + 0.319848 1.99731 -3.11521 -0.0681588 0.981479 0.179032 + 0.295996 1.99739 -3.09994 0.460292 -0.348579 0.81647 + 0.24433 1.99334 -3.06154 0.124711 0.929926 0.345956 + 0.161274 1.99295 -2.99625 0.215005 0.976527 0.0129801 + 0.136983 2.00247 -2.98234 0.170644 0.951116 -0.257408 + 0.322326 1.99302 -3.04417 0.00197971 0.999987 -0.00458595 + 0.325906 1.99664 -3.08165 -0.267212 0.961274 0.0674538 + 0.332804 1.99775 -3.02017 0.191921 0.950702 -0.24358 + 0.320649 1.99868 -2.96098 -0.564124 0.814722 0.134134 + 0.32929 2.00113 -2.94802 -0.154741 0.954427 0.255193 + 0.343366 1.99505 -2.9427 0.310494 0.919074 -0.242686 + 0.34688 1.99167 -3.01484 0.425132 0.903039 -0.0615074 + 0.313291 2.00102 -3.03582 0.492869 0.738373 -0.46031 + 0.320286 1.98989 -2.94595 -0.828572 0.0466269 0.557938 + 0.328927 1.99242 -2.93294 -0.700958 0.624826 0.343874 + 0.295702 1.99981 -2.96814 0.373223 0.927739 -0.00221117 + 0.284568 2.00427 -2.96887 0.372151 0.928166 -0.00327953 + 0.365691 1.98304 -2.9843 0.421741 0.906473 0.0210214 + 0.371161 1.97686 -2.92739 0.518874 0.766784 -0.377906 + 0.397432 1.96751 -2.92599 0.320663 0.923046 -0.21251 + 0.391961 1.97369 -2.9829 0.274841 0.958349 0.0776548 + 0.436121 1.96422 -2.97889 0.18569 0.97975 0.0748887 + 0.423477 1.96208 -2.9154 0.25171 0.923845 -0.288363 + 0.462167 1.9588 -2.9683 0.0456098 0.998736 -0.0211222 + 0.356671 2.00434 -2.92579 0.528511 -0.481743 -0.698999 + 0.384466 1.98607 -2.91054 0.263444 -0.0453287 -0.963609 + 0.406745 1.97654 -2.90444 0.373114 0.765192 -0.524659 + 0.348135 2.00185 -2.93868 0.745781 -0.658126 0.103347 + 0.39795 2.0237 -2.97152 0.719518 -0.692725 -0.0492576 + 0.406486 2.02619 -2.95862 0.19985 -0.78305 -0.588976 + 0.428765 2.01675 -2.95248 -0.153313 -0.745058 -0.649141 + 0.406745 1.97654 -2.90444 -0.132424 -0.729384 -0.671166 + 0.44583 1.96623 -2.90117 -0.151335 -0.750736 -0.643034 + 0.350242 1.97577 -2.9623 0.49825 -0.830182 0.250088 + 0.35437 1.97828 -2.99445 0.386881 -0.907121 -0.165695 + 0.402078 2.0262 -3.00365 0.856346 -0.503661 -0.114005 + 0.418264 2.08128 -3.01025 0.7548 -0.317299 -0.574106 + 0.328927 1.99242 -2.93294 0.479015 -0.567757 0.669476 + 0.331034 1.96634 -2.95656 -0.0169217 -0.972696 0.231465 + 0.30645 1.97627 -2.97876 -0.454314 -0.880803 0.133358 + 0.313322 1.9798 -3.00647 -0.180227 -0.93728 -0.298371 + 0.364508 2.01202 -3.06709 0.474649 -0.715071 -0.513208 + 0.36865 2.03918 -3.08753 0.68518 -0.346518 -0.640667 + 0.40622 2.05345 -3.02404 0.881552 -0.238116 -0.407635 + 0.295702 1.99981 -2.96814 -0.65275 -0.623705 0.430011 + 0.231434 2.02898 -3.02386 -0.328901 -0.943378 -0.043141 + 0.238306 2.0325 -3.05156 -0.238856 -0.842117 -0.483514 + 0.32346 2.01354 -3.07911 -0.0808887 -0.797601 -0.597737 + 0.328927 1.99242 -2.93294 -0.649816 -0.538453 0.536477 + 0.156435 2.02905 -3.04178 0.0275726 -0.992469 -0.119352 + 0.284568 2.00427 -2.96887 -0.367788 -0.927873 -0.061516 + 0.156435 2.02905 -3.04178 -0.214287 -0.391188 0.895016 + 0.44583 1.96623 -2.90117 0.249323 0.75169 -0.610573 + 0.462562 1.95177 -2.91213 0.30346 0.951695 -0.0467856 + 0.49606 1.95866 -2.97745 0.0813961 0.993522 0.0793004 + 0.483244 1.9587 -2.99094 0.004039 0.999992 -0.000346849 + 0.517137 1.95856 -3.00009 0.092826 0.992272 0.0823419 + 0.517922 1.95242 -2.95825 0.13078 0.978736 0.158024 + 0.484424 1.94553 -2.89293 0.171707 0.980794 0.092513 + 0.508552 1.94894 -2.92703 0.0423027 0.990757 0.128884 + 0.52042 1.93869 -2.87167 0.428624 0.900379 0.0748257 + 0.44583 1.96623 -2.90117 0.499743 0.810446 -0.305669 + 0.328927 1.99242 -2.93294 -0.026466 0.974304 0.223678 + 0.348135 2.00185 -2.93868 -0.494815 0.672304 -0.550605 + 0.267677 2.00019 -3.0754 0.259724 -0.874459 0.409713 + 0.297587 1.99953 -3.05706 -0.126168 -0.988859 0.0789889 + 0.213992 2.01165 -3.01764 -0.035651 -0.947964 0.316375 + 0.243514 1.99815 -3.05565 0.329877 -0.864645 0.378905 + 0.221579 1.99604 -3.06701 0.0763245 -0.997034 -0.00985793 + 0.197416 1.994 -3.04727 -0.547475 -0.434681 -0.715069 + 0.138523 1.99564 -3.00172 -0.590193 -0.29206 -0.752577 + 0.325906 1.99664 -3.08165 -0.082742 -0.996488 -0.0128938 + 0.322326 1.99302 -3.04417 -0.353591 -0.912555 0.205467 + 0.313291 2.00102 -3.03582 -0.30181 -0.929701 0.21111 + 0.319848 1.99731 -3.11521 -0.0142549 -0.999747 -0.0174161 + 0.332804 1.99775 -3.02017 -0.419856 -0.838005 0.348523 + 0.136983 2.00247 -2.98234 0.245324 -0.883155 -0.399817 + 0.164996 2.02874 -3.03604 0.519605 -0.842885 -0.13984 + 0.76871 1.61927 -1.22983 0.919224 0.339172 -0.199975 + 0.750901 1.63563 -1.28395 0.890788 0.423336 -0.165177 + 0.708791 1.70626 -1.3081 0.870879 0.469742 -0.144616 + 0.789525 1.56678 -1.21471 0.779198 0.138322 -0.611325 + 0.771717 1.58314 -1.26884 0.93754 0.261539 -0.229383 + 0.792052 1.49776 -1.24696 0.747982 0.303256 -0.590389 + 0.825985 1.56239 -1.1863 0.433016 -0.0171771 -0.901222 + 0.874389 1.49643 -1.23266 -0.227826 0.78994 -0.569289 + 0.75894 1.61619 -1.24569 0.465107 -0.328062 -0.822223 + 0.568883 1.86808 -2.71898 -0.52045 0.793298 0.315928 + 0.596791 1.8903 -2.71226 -0.637409 0.710444 0.298294 + 0.56253 1.89213 -2.78983 -0.70778 0.526266 0.471265 + 0.554398 1.87296 -2.73802 0.755214 0.513528 -0.407359 + 0.548045 1.897 -2.80887 0.412423 0.871442 0.265511 + 0.539499 1.90956 -2.78862 0.925239 -0.210193 -0.315836 + 0.56062 1.92182 -2.78625 0.348483 -0.763202 -0.544135 + 0.575518 1.88522 -2.73566 0.394795 -0.738155 -0.54705 + 0.568883 1.86808 -2.71898 0.467932 -0.702741 -0.535906 + 0.540993 1.91304 -2.85124 0.887587 0.458544 0.0439012 + 0.532448 1.92559 -2.83099 0.952967 -0.290272 -0.0871579 + 0.556381 1.93513 -2.81012 0.43379 -0.829295 -0.352272 + 0.63233 1.9467 -2.79915 0.224633 -0.819026 -0.527955 + 0.646581 1.94192 -2.78008 0.121137 -0.906707 -0.403989 + 0.58977 1.88043 -2.71657 0.456878 -0.852569 0.253748 + 0.568883 1.86808 -2.71898 0.47583 -0.7011 -0.531078 + 0.534839 1.92882 -2.85178 0.926069 -0.287059 -0.244934 + 0.558772 1.93836 -2.83091 0.386607 -0.913901 -0.123772 + 0.628091 1.96002 -2.82302 0.325178 -0.872606 -0.364443 + 0.52297 1.93907 -2.90713 0.56514 0.824394 0.0314878 + 0.508552 1.94894 -2.92703 0.519872 0.852978 0.04649 + 0.857639 1.53971 -1.09341 0.209745 0.209288 0.955095 + 0.734627 1.66052 -1.09287 0.272265 -0.276923 0.921513 + 0.691951 1.69874 -1.05208 0.72977 -0.187247 0.657551 + 0.666266 1.73981 -0.991201 0.918423 -0.181836 0.351332 + 0.653929 1.77309 -0.908846 0.980147 -0.0816021 0.180704 + 0.801719 1.66092 -1.09516 -0.0503109 -0.227895 0.972385 + 0.727067 1.74912 -1.07274 0.276988 -0.481855 0.83132 + 0.701382 1.79018 -1.01185 0.770398 -0.17425 0.613289 + 0.665803 1.85544 -0.942675 0.951726 -0.0417351 0.304099 + 0.649583 1.8106 -0.813416 0.981967 -0.133608 0.133752 + 0.924731 1.54019 -1.09564 0.122894 -0.206633 0.97067 + 0.956135 1.59387 -1.09764 0.135844 -0.186392 0.973039 + 0.872103 1.65857 -1.07749 -0.104962 -0.498 0.860801 + 0.797451 1.74686 -1.05501 -0.282399 -0.438527 0.853197 + 0.857639 1.53971 -1.09341 0.0284716 -0.108768 0.993659 + 0.976813 1.48683 -1.12362 0.493183 -0.54229 0.680214 + 1.00822 1.5406 -1.12556 0.817988 -0.259632 0.513309 + 0.989639 1.62409 -1.09438 0.525123 -0.0615618 0.848797 + 0.905607 1.68879 -1.07423 0.279292 -0.713321 0.642783 + 0.883508 1.6865 -1.05088 -0.333675 -0.941855 -0.0396204 + 0.921701 1.47324 -1.1323 -0.217656 -0.728071 0.650029 + 0.977234 1.46075 -1.16166 0.561699 -0.820421 -0.106785 + 1.00584 1.5264 -1.17677 0.909123 -0.355602 -0.216894 + 1.0114 1.59751 -1.17953 0.997605 -0.014321 -0.0676686 + 1.01377 1.61179 -1.12827 0.964203 0.0650206 0.257071 + 0.971005 1.70035 -1.08785 0.673212 0.0295699 0.738858 + 0.922122 1.44708 -1.17038 -0.182077 -0.811392 0.55542 + 0.857639 1.53971 -1.09341 -0.618596 -0.743815 0.253138 + 0.547729 2.0507 -1.40088 -0.559879 -0.824023 0.086733 + 0.531356 2.07762 -1.31671 -0.0112687 -0.95303 0.302666 + 0.474402 2.06298 -1.36495 0.239511 -0.909373 -0.340109 + 0.474158 2.07625 -1.40354 -0.0695818 -0.980446 -0.184076 + 0.465143 2.07809 -1.44612 -0.119267 -0.985195 -0.123147 + 0.538714 2.05245 -1.44351 -0.55642 -0.798752 0.228893 + 0.588596 2.00453 -1.39151 -0.898385 -0.436873 0.0452392 + 0.531356 2.07762 -1.31671 -0.753587 -0.654347 0.062748 + 0.400545 2.05461 -1.39905 0.360664 -0.803443 -0.47371 + 0.400301 2.06788 -1.43764 0.354171 -0.892785 -0.278385 + 0.426899 2.08626 -1.47047 0.106958 -0.971244 -0.212707 + 0.47773 2.07946 -1.47809 -0.393151 -0.918755 0.0363416 + 0.445089 2.02378 -1.34266 0.518758 -0.456248 -0.723 + 0.388764 1.99841 -1.35531 0.279624 -0.388313 -0.87808 + 0.319803 2.01877 -1.40457 0.315089 -0.808891 -0.496401 + 0.359019 2.06661 -1.50784 0.373913 -0.898965 -0.228146 + 0.385616 2.08499 -1.54067 0.255332 -0.966667 0.0189735 + 0.502044 2.03843 -1.29442 0.201838 -0.365986 -0.908469 + 0.412598 1.90184 -1.34124 0.301508 0.0049376 -0.953451 + 0.356273 1.87655 -1.35384 -0.242239 -0.43785 -0.865799 + 0.289944 1.91605 -1.33405 -0.186541 -0.539196 -0.821261 + 0.308022 1.96257 -1.36083 0.10913 -0.57836 -0.80845 + 0.531356 2.07762 -1.31671 0.565559 -0.684525 -0.459966 + 0.575856 2.0112 -1.45386 -0.800007 -0.554324 0.229596 + 0.580338 1.98159 -1.50598 -0.856886 -0.50255 0.114844 + 0.63432 1.85705 -1.49726 -0.944821 -0.325087 0.0403969 + 0.697732 1.64315 -1.30438 -0.768268 -0.612395 -0.186378 + 0.514872 2.03813 -1.48851 -0.659248 -0.721121 0.213018 + 0.497177 2.05931 -1.52979 -0.565527 -0.824655 0.011116 + 0.562643 2.00285 -1.54721 -0.787953 -0.614582 0.037663 + 0.62704 1.86132 -1.54027 -0.920635 -0.387396 0.0485341 + 0.695448 1.66118 -1.35421 -0.862039 -0.496172 -0.103452 + 0.75621 1.58202 -1.2999 -0.267214 -0.962764 -0.0410026 + 0.439282 2.08334 -1.53762 -0.191282 -0.974035 0.121109 + 0.51533 2.05069 -1.57487 -0.607573 -0.792174 -0.0575836 + 0.555363 2.00713 -1.59022 -0.81299 -0.582006 0.0177664 + 0.439486 2.08755 -1.50251 -0.115273 -0.992837 0.031416 + 0.385413 2.08078 -1.57577 0.138568 -0.981181 0.134473 + 0.457435 2.07473 -1.5827 -0.229298 -0.967001 0.111045 + 0.515561 2.0499 -1.62109 -0.53729 -0.841135 0.0617415 + 0.555594 2.00625 -1.63649 -0.827284 -0.561476 0.0185904 + 0.297377 2.03902 -1.49545 0.35498 -0.912076 -0.205198 + 0.29011 2.04489 -1.55221 0.393179 -0.915676 -0.0833482 + 0.3657 2.07343 -1.60525 0.177192 -0.980202 0.0883553 + 0.359616 2.06797 -1.64419 0.124811 -0.987634 0.0948761 + 0.451351 2.06927 -1.62164 -0.148316 -0.980866 0.12611 + 0.258161 1.99109 -1.39224 0.259526 -0.876804 -0.404798 + 0.166984 1.95299 -1.35484 0.273097 -0.880025 -0.388553 + 0.140569 1.94325 -1.36118 0.523372 -0.83758 -0.156656 + 0.270961 2.02929 -1.5018 0.437071 -0.889907 -0.130519 + 0.239043 1.95976 -1.34897 -0.00762572 -0.667344 -0.74471 + 0.147866 1.92165 -1.31156 -0.00968685 -0.754085 -0.656706 + 0.112991 1.89426 -1.27811 0.0651212 -0.828291 -0.556502 + 0.078295 1.88988 -1.28734 0.486043 -0.831921 -0.267713 + 0.152396 1.95209 -1.41768 0.604537 -0.796573 -0.00249135 + 0.220964 1.91315 -1.32224 -0.1379 -0.589326 -0.796039 + 0.186089 1.88576 -1.28879 -0.161239 -0.700465 -0.695234 + 0.099451 1.85062 -1.21534 0.121784 -0.827132 -0.548655 + 0.064756 1.84625 -1.22456 0.345297 -0.803886 -0.48429 + 0.307145 1.88639 -1.30329 -0.0763115 -0.738844 -0.669542 + 0.090122 1.89871 -1.34383 0.601238 -0.796726 -0.0611623 + 0.171544 1.96768 -1.46809 0.512808 -0.85304 -0.0966938 + 0.270397 2.03754 -1.58169 0.41276 -0.904147 -0.110213 + 0.087235 1.90525 -1.39075 0.549947 -0.825664 -0.125846 + 0.171197 1.97345 -1.51008 0.481269 -0.865152 -0.14104 + 0.162867 1.97594 -1.54879 0.44374 -0.873146 -0.20177 + 0.262067 2.04011 -1.62035 0.38276 -0.920835 -0.0745459 + 0.02884 1.85513 -1.35635 0.327307 -0.941844 -0.0761579 + 0.086888 1.91102 -1.43274 0.567938 -0.815084 -0.114392 + 0.089782 1.91973 -1.48143 0.561941 -0.812529 -0.154978 + 0.173147 1.99886 -1.61009 0.431061 -0.885795 -0.171911 + 0.249812 2.03641 -1.65153 0.357099 -0.930957 -0.0761602 + -0.028838 1.8545 -1.31385 -0.210111 -0.977045 0.0351617 + -0.028838 1.85513 -1.35634 -0.348063 -0.934808 -0.0706067 + 0.031734 1.86393 -1.40499 0.337605 -0.933536 -0.120551 + 0.031734 1.86779 -1.44848 0.31907 -0.935751 -0.150211 + 0.100061 1.94265 -1.54273 0.566829 -0.807746 -0.162021 + -0.011004 1.92279 -1.16193 0.000143575 -0.91209 0.409991 + 0.994443 1.63158 -1.25994 0.451141 -0.445626 -0.773233 + 0.955513 1.48149 -1.19538 0.278587 -0.55692 -0.782451 + 0.874389 1.49643 -1.23266 0.306049 -0.442079 -0.843149 + 1.03052 1.69812 -1.27639 0.843935 -0.181655 0.504752 + 1.03288 1.78952 -1.25311 0.91013 -0.0638198 0.409378 + 1.00885 1.67572 -1.27419 0.305529 -0.381384 -0.872467 + 1.03288 1.78952 -1.25311 -0.216746 -0.128378 -0.96775 + 1.0202 1.61368 -1.22695 0.72889 -0.16296 -0.664954 + 0.922122 1.44708 -1.17038 0.256915 -0.513074 -0.818993 + 1.01446 1.69188 -1.20979 0.889155 0.0632542 0.453214 + 0.995087 1.68693 -1.18041 0.934164 0.201385 0.294589 + 0.995136 1.68804 -1.12174 0.938642 0.210084 0.273524 + 1.02713 1.86772 -1.23595 0.827111 -0.0210253 0.561645 + 0.992933 1.94976 -1.19305 0.708781 -0.0524788 0.703473 + 1.05983 1.83094 -1.29605 0.866174 -0.109213 0.487663 + 1.06221 1.92259 -1.27918 0.77134 -0.13212 0.622558 + 1.05748 1.73954 -1.31934 0.844177 -0.0109204 0.535954 + 1.09515 1.77972 -1.37113 0.936955 -0.161103 0.310098 + 1.09753 1.87136 -1.35425 0.820421 -0.209637 0.531942 + 1.12102 1.97158 -1.32344 0.747078 -0.25842 0.612448 + 1.02801 2.00471 -1.23623 0.730534 -0.171177 0.661073 + 1.05056 1.6794 -1.29078 0.719179 0.30666 0.623491 + 1.08036 1.67959 -1.33931 0.952271 0.0121125 0.305014 + 1.08457 1.69014 -1.39597 0.843293 -0.337756 -0.418065 + 1.09936 1.79026 -1.42779 0.817456 -0.444766 -0.365991 + 1.14099 1.87746 -1.41543 0.895959 -0.360931 0.258815 + 1.02216 1.67959 -1.28351 0.305812 0.00347126 0.952086 + 1.05968 1.62708 -1.22854 0.517828 0.615892 0.593744 + 1.07345 1.61946 -1.31076 0.942933 0.332733 -0.0129195 + 1.04813 1.6359 -1.39004 0.636789 -0.437044 -0.635211 + 1.03903 1.79188 -1.47559 0.66187 -0.559084 -0.499352 + 1.03127 1.62727 -1.22128 -0.294471 0.350689 0.88899 + 1.04195 1.61112 -1.2181 -0.0172773 -0.558898 0.829056 + 1.07094 1.61182 -1.22433 0.55557 0.69889 0.450437 + 1.08471 1.6042 -1.30653 -0.344203 0.874207 0.342471 + 1.06697 1.60458 -1.35498 0.910741 0.180925 -0.371236 + 0.970943 1.60308 -1.27899 -0.246095 -0.831474 0.498084 + 1.0649 1.61489 -1.27083 0.065591 -0.996733 -0.0471223 + 1.09389 1.61568 -1.277 -0.931783 -0.287204 -0.222022 + 1.07094 1.61182 -1.22433 0.0094432 -0.997581 -0.0688635 + 0.974214 1.60453 -1.30429 0.153899 -0.967906 0.198678 + 1.06817 1.61633 -1.29612 0.0398838 -0.998653 -0.0331873 + 1.07614 1.61597 -1.3255 -0.632925 -0.737396 0.235907 + 0.958138 1.59199 -1.32117 0.0683383 -0.826753 0.558399 + 1.05513 1.61691 -1.31914 0.149368 -0.986403 0.0685423 + 1.06311 1.61647 -1.34857 -0.252598 -0.914244 0.316782 + 1.06697 1.60458 -1.35498 -0.715491 -0.465826 0.520653 + 0.916015 1.58052 -1.33811 -0.0512089 -0.880662 0.470969 + 1.0045 1.56971 -1.36039 0.384251 -0.865048 0.322558 + 1.03906 1.60429 -1.33608 0.42292 -0.860697 0.283443 + 1.04445 1.60833 -1.36107 0.66917 -0.639706 -0.378136 + 0.999675 1.61762 -1.41156 0.577824 -0.513928 -0.634032 + 0.874885 1.58171 -1.35816 -0.155836 -0.935521 0.317042 + 0.869803 1.55489 -1.40731 -0.117366 -0.951148 0.285557 + 0.962381 1.55824 -1.37732 0.0737749 -0.961406 0.265058 + 0.962586 1.55538 -1.43136 0.16705 -0.984224 -0.0582934 + 1.00391 1.56712 -1.43049 0.500222 -0.861933 -0.0827651 + 1.00949 1.57435 -1.40242 0.746686 -0.664781 0.0229117 + 0.797842 1.56298 -1.45753 -0.373286 -0.8553 0.359333 + 0.828673 1.55607 -1.42736 -0.435269 -0.785725 0.439519 + 0.779727 1.56951 -1.42564 -0.419993 -0.901678 0.102872 + 0.764601 1.55928 -1.50431 -0.560087 -0.819925 0.118428 + 0.795433 1.55237 -1.47414 -0.408857 -0.847247 0.339128 + 0.718965 1.64867 -1.47995 -0.833241 -0.547865 -0.0745153 + 0.709268 1.66856 -1.55219 -0.910085 -0.336092 0.242461 + 0.741883 1.56683 -1.54499 -0.772004 -0.538919 0.337011 + 0.748333 1.58493 -1.27294 -0.168059 -0.98413 0.0569621 + 0.711105 1.59853 -1.28851 -0.392707 -0.580329 -0.713442 + 0.697732 1.64315 -1.30438 -0.36092 -0.406732 -0.839229 + 0.999675 1.61762 -1.41156 -0.606195 -0.520986 0.600917 + 0.617342 1.88121 -1.61252 -0.90865 -0.416987 0.0218258 + 0.614695 1.88295 -1.65654 -0.924023 -0.346765 0.161047 + 0.68655 1.67611 -1.59288 -0.899378 -0.247155 0.360602 + 0.735827 1.56272 -1.57048 -0.763838 -0.554399 0.330445 + 0.789377 1.54835 -1.49958 -0.338769 -0.907886 0.246939 + 0.552946 2.00791 -1.68057 -0.798235 -0.598307 0.069638 + 0.550943 2.00401 -1.7274 -0.801423 -0.589201 0.10278 + 0.602854 1.87946 -1.70009 -0.934379 -0.315812 0.16492 + 0.674709 1.67271 -1.63638 -0.903988 -0.220834 0.366111 + 0.510269 2.04669 -1.66974 -0.477782 -0.872512 0.102211 + 0.508265 2.04278 -1.71657 -0.476349 -0.872615 0.107861 + 0.550714 1.99679 -1.7715 -0.802137 -0.589271 0.0966212 + 0.602625 1.87233 -1.74413 -0.95172 -0.27653 0.13327 + 0.446058 2.06606 -1.67028 -0.136581 -0.986829 0.0866803 + 0.440412 2.06276 -1.71117 -0.132052 -0.985838 0.103375 + 0.507865 2.03663 -1.76551 -0.457713 -0.86867 0.189502 + 0.514368 2.02202 -1.8028 -0.577323 -0.808095 0.11696 + 0.557217 1.98227 -1.80875 -0.824748 -0.543819 0.155086 + 0.34736 2.06418 -1.67543 0.140809 -0.988981 0.0457112 + 0.341714 2.06088 -1.71631 0.118041 -0.992768 0.0218711 + 0.338668 2.061 -1.74972 0.081344 -0.996683 0.00225337 + 0.440012 2.0566 -1.76011 -0.176853 -0.979986 0.091382 + 0.251153 2.04122 -1.70027 0.319286 -0.94645 -0.0478393 + 0.248108 2.04134 -1.73368 0.381642 -0.924035 -0.022558 + 0.264373 2.05085 -1.77315 0.314288 -0.945223 -0.0881893 + 0.339247 2.05993 -1.79147 0.030166 -0.998423 -0.0473315 + 0.174488 2.00368 -1.65883 0.538045 -0.842662 0.0206794 + 0.189027 2.00479 -1.72437 0.501598 -0.864757 -0.0243829 + 0.205292 2.0143 -1.76384 0.356518 -0.923188 -0.143591 + 0.265035 2.05477 -1.80713 0.228708 -0.956795 -0.179543 + 0.339909 2.06385 -1.82546 -0.000285224 -0.995065 -0.0992229 + 0.111065 1.95909 -1.59961 0.587067 -0.809264 -0.0210554 + 0.125604 1.96012 -1.66519 0.335336 -0.92672 -0.169525 + 0.187894 2.01719 -1.79183 0.169331 -0.918047 -0.358491 + 0.247637 2.05774 -1.83508 0.26027 -0.935877 -0.237474 + 0.042738 1.88424 -1.50536 0.33673 -0.88782 -0.313669 + 0.042738 1.90673 -1.53852 0.0774374 -0.866322 -0.493446 + 0.040862 1.9282 -1.58431 -0.118476 -0.798496 -0.590226 + 0.123728 1.98159 -1.71098 -0.161344 -0.893084 -0.419963 + -0.031751 1.86788 -1.44843 -0.348314 -0.926419 -0.142913 + -0.042737 1.88423 -1.50535 -0.331087 -0.895377 -0.297794 + -0.042737 1.90673 -1.53852 0.13453 -0.849144 -0.510741 + -0.040873 1.9282 -1.58431 0.125077 -0.810713 -0.571926 + 0.040862 1.96688 -1.60749 -0.334689 -0.645822 -0.68622 + -0.031751 1.86393 -1.40499 -0.339445 -0.932228 -0.12541 + -0.100078 1.94265 -1.54273 -0.565744 -0.808957 -0.159757 + -0.111065 1.95909 -1.5996 -0.672005 -0.740429 0.0132315 + -0.125604 1.96012 -1.66519 -0.338467 -0.924021 -0.177833 + -0.12374 1.98159 -1.71098 0.0467623 -0.904869 -0.423113 + -0.089799 1.91981 -1.48138 -0.52149 -0.834869 -0.176187 + -0.162859 1.97594 -1.54879 -0.446653 -0.870728 -0.205752 + -0.173139 1.99886 -1.61009 -0.464722 -0.872677 -0.149894 + -0.174485 2.00368 -1.65883 -0.534945 -0.844501 0.0255376 + -0.086886 1.91101 -1.43273 -0.566541 -0.816399 -0.111913 + -0.171197 1.97345 -1.51008 -0.483083 -0.864242 -0.140419 + -0.262059 2.04011 -1.62035 -0.357959 -0.930292 -0.0801356 + -0.249804 2.03641 -1.65153 -0.348048 -0.935789 -0.0562269 + -0.25115 2.04123 -1.70028 -0.346664 -0.937405 -0.033101 + -0.087233 1.90524 -1.39074 -0.527614 -0.838987 -0.13313 + -0.171544 1.96768 -1.46809 -0.512997 -0.852862 -0.0972679 + -0.290109 2.04489 -1.55221 -0.392271 -0.916058 -0.0834259 + -0.270397 2.03754 -1.58169 -0.4122 -0.904524 -0.109213 + -0.031728 1.84797 -1.26694 0.437367 -0.897671 -0.0538279 + -0.090123 1.89872 -1.34384 -0.6065 -0.791501 -0.0753859 + -0.152415 1.95209 -1.41768 -0.604237 -0.7968 -0.0028008 + -0.064756 1.84625 -1.22456 0.0618531 -0.984561 0.163748 + -0.078296 1.88988 -1.28734 -0.788453 -0.592911 -0.163702 + -0.140588 1.94325 -1.36118 -0.523398 -0.837579 -0.156575 + -0.270981 2.02929 -1.5018 -0.437137 -0.889871 -0.130543 + -0.044032 1.92098 -1.1196 -0.0115868 -0.707289 0.706829 + -0.055769 1.94427 -1.11555 -0.910722 -0.180195 0.371638 + -0.099451 1.85062 -1.21534 -0.0480097 -0.996661 -0.0660425 + -0.112991 1.89426 -1.27811 -0.0651286 -0.828299 -0.556488 + -0.166982 1.95299 -1.35484 -0.273241 -0.880027 -0.388448 + -0.011004 2.20909 -0.926224 0.7156 -0.443972 0.539263 + -0.186089 1.88576 -1.28879 0.161232 -0.700466 -0.695235 + -0.220969 1.91315 -1.32224 0.137791 -0.589257 -0.796109 + -0.147871 1.92165 -1.31156 0.00972485 -0.754059 -0.656734 + -0.258158 1.99109 -1.39224 -0.259558 -0.876762 -0.404868 + -0.297374 2.03902 -1.49545 -0.35527 -0.91204 -0.204857 + -0.385413 2.08078 -1.57577 -0.138565 -0.981181 0.134478 + -0.289946 1.91605 -1.33405 0.277019 -0.573605 -0.770868 + -0.239048 1.95976 -1.34897 0.00738439 -0.667543 -0.744535 + -0.319803 2.01877 -1.40457 -0.317686 -0.806755 -0.498218 + -0.359019 2.06661 -1.50784 -0.374431 -0.899556 -0.224946 + -0.385615 2.08499 -1.54067 -0.255338 -0.966666 0.0189713 + -0.307158 1.88639 -1.30328 0.0762721 -0.738896 -0.669489 + 1.04089 1.60615 -1.42989 0.816785 -0.57681 -0.0123572 + 1.03531 1.59883 -1.45802 0.720083 -0.692699 -0.0406009 + 1.07254 1.68849 -1.48572 0.460321 0.326474 0.825542 + 0.958147 1.58084 -1.55326 0.318838 -0.928762 -0.189058 + 0.974159 1.59288 -1.59131 0.252233 -0.962968 -0.0952475 + 1.05132 1.61087 -1.49608 0.251025 -0.956782 -0.146815 + 1.09371 1.62534 -1.52933 0.734313 -0.600706 0.316129 + 1.11344 1.68017 -1.5459 0.899975 -0.129682 0.416207 + 0.91682 1.56909 -1.55411 0.230899 -0.95778 -0.171298 + 0.854296 1.57472 -1.65427 0.127203 -0.985126 -0.115527 + 0.984777 1.59709 -1.6334 0.217578 -0.976041 0.00205133 + 1.06806 1.61524 -1.58263 0.280751 -0.959757 -0.00679284 + 1.11045 1.62969 -1.61588 0.571944 -0.818042 0.0607276 + 0.870008 1.5521 -1.46128 0.102568 -0.994519 -0.0203004 + 0.835008 1.54712 -1.48826 0.0904825 -0.992795 0.0785595 + 0.88182 1.56411 -1.58109 0.333728 -0.928299 -0.163972 + 0.822507 1.53543 -1.53941 0.195749 -0.97751 0.0784601 + 0.808802 1.53514 -1.5703 0.149093 -0.97645 -0.15594 + 0.868116 1.5639 -1.61192 0.561916 -0.744045 -0.361451 + 0.776876 1.53665 -1.55073 -0.327038 -0.918534 0.222127 + 0.766598 1.5343 -1.58024 -0.239272 -0.970949 0.00269664 + 0.780273 1.54606 -1.61161 0.13826 -0.915184 -0.378579 + 0.765583 1.55312 -1.63144 0.167659 -0.857169 -0.486982 + 0.853425 1.57097 -1.63176 -0.00466186 -0.959275 -0.282436 + 0.708811 1.56323 -1.62117 -0.773408 -0.51719 0.366543 + 0.698533 1.56096 -1.65062 -0.690655 -0.685795 0.229522 + 0.738069 1.5453 -1.62151 -0.133907 -0.977187 -0.164845 + 0.710916 1.55531 -1.66445 0.00711219 -0.924414 -0.381325 + 0.750306 1.56372 -1.6498 0.234349 -0.853668 -0.465114 + 0.647693 1.67322 -1.68706 -0.924547 -0.16637 0.342832 + 0.67138 1.57105 -1.69351 -0.72205 -0.660574 0.205637 + 0.594177 1.86686 -1.79246 -0.96086 -0.237148 0.143211 + 0.639244 1.66784 -1.73534 -0.965609 -0.220461 0.137828 + 0.66662 1.5694 -1.74905 -0.563861 -0.822548 -0.0739995 + 0.695639 1.56591 -1.6828 0.0581625 -0.941151 -0.332944 + 0.751176 1.56747 -1.67231 0.050207 -0.994112 -0.096026 + 0.594023 1.85066 -1.8352 -0.96658 -0.252292 0.0455186 + 0.634484 1.66618 -1.79088 -0.959732 -0.279773 0.0253176 + 0.67391 1.57456 -1.78639 -0.470853 -0.849224 -0.238989 + 0.702929 1.57108 -1.72015 0.0412472 -0.996137 -0.0775247 + 0.768767 1.56808 -1.72116 0.0530425 -0.996764 -0.060392 + 0.557063 1.96606 -1.85148 -0.883195 -0.456076 0.109363 + 0.552771 1.96938 -1.88103 -0.887925 -0.459138 -0.0279655 + 0.594288 1.85134 -1.88378 -0.959408 -0.277764 -0.0488163 + 0.634749 1.66686 -1.83946 -0.927225 -0.358029 -0.10986 + 0.510076 2.02542 -1.8323 -0.604471 -0.796521 -0.0129642 + 0.555563 1.97222 -1.92336 -0.894779 -0.431104 -0.116272 + 0.59708 1.85427 -1.92606 -0.943277 -0.295349 -0.151648 + 0.638298 1.6843 -1.89185 -0.883089 -0.410002 -0.228147 + 0.677459 1.59199 -1.83878 -0.51054 -0.791386 -0.336239 + 0.44059 2.05553 -1.80185 -0.227041 -0.973863 0.00660674 + 0.516572 2.02379 -1.88107 -0.665881 -0.737829 -0.110502 + 0.520779 2.02929 -1.92639 -0.654446 -0.741409 -0.148369 + 0.55977 1.97772 -1.96868 -0.890791 -0.400217 -0.215214 + 0.603326 1.86842 -1.97277 -0.92247 -0.311388 -0.228225 + 0.447086 2.0539 -1.85062 -0.268111 -0.961703 -0.0569544 + 0.449094 2.05791 -1.89177 -0.280381 -0.951832 -0.124101 + 0.522501 2.03545 -1.97427 -0.612652 -0.773905 -0.160398 + 0.565518 1.9927 -2.01062 -0.860653 -0.477821 -0.175963 + 0.609074 1.8834 -2.01471 -0.891675 -0.341021 -0.297691 + 0.341917 2.06786 -1.86661 -0.0445563 -0.984371 -0.170377 + 0.340549 2.07585 -1.89925 -0.0944188 -0.969281 -0.227112 + 0.450816 2.06408 -1.93966 -0.300418 -0.939814 -0.16278 + 0.522957 2.04655 -2.01909 -0.582695 -0.798623 -0.150557 + 0.565974 2.00379 -2.05543 -0.830559 -0.50032 -0.244648 + 0.246269 2.06574 -1.86774 0.12086 -0.933249 -0.338289 + 0.259559 2.08354 -1.90636 0.0402131 -0.940388 -0.337718 + 0.338979 2.08419 -1.93909 -0.142759 -0.958185 -0.247996 + 0.449246 2.07242 -1.9795 -0.302975 -0.937516 -0.171086 + 0.17614 2.05015 -1.86073 0.0867517 -0.912287 -0.400258 + 0.18943 2.06804 -1.89932 0.143896 -0.918931 -0.367231 + 0.261 2.09316 -1.93783 -0.00387187 -0.955782 -0.294049 + 0.34042 2.09381 -1.97056 -0.162819 -0.948114 -0.273074 + 0.111974 2.01456 -1.77988 -0.27701 -0.859301 -0.429962 + 0.171277 2.07515 -1.92282 -0.0161006 -0.916453 -0.399819 + 0.242848 2.10027 -1.96134 0.0538339 -0.947297 -0.315802 + 0.337427 2.1054 -2.00943 -0.182357 -0.934912 -0.304442 + 0.437442 2.0831 -2.0248 -0.318361 -0.928611 -0.190599 + 0.035854 1.99695 -1.65639 -0.258966 -0.831457 -0.491545 + 0.106966 2.04463 -1.82877 -0.320906 -0.852873 -0.411858 + 0.158061 2.0999 -1.9735 -0.0158891 -0.920281 -0.390935 + 0.247097 2.11101 -1.99235 -0.0366604 -0.920525 -0.38896 + 0.341676 2.11606 -2.04048 -0.225425 -0.924514 -0.30734 + -0.040873 1.96688 -1.60749 0.447342 -0.605901 -0.657852 + -0.035869 1.99695 -1.65639 0.259909 -0.833199 -0.488085 + 0.035854 2.01767 -1.68967 -0.294139 -0.83197 -0.470434 + 0.093749 2.06938 -1.87943 -0.259546 -0.892635 -0.368563 + -0.111985 2.01456 -1.77988 0.275051 -0.855166 -0.43936 + -0.106981 2.04463 -1.82877 0.292868 -0.860237 -0.417396 + -0.093765 2.06929 -1.87949 0.2604 -0.89144 -0.370846 + -0.035869 2.01767 -1.68967 0.365537 -0.808481 -0.461239 + 0.025987 2.03612 -1.72583 -0.168121 -0.904856 -0.391115 + -0.187894 2.01719 -1.79183 -0.174317 -0.913408 -0.36783 + -0.17614 2.05015 -1.86073 -0.108508 -0.915471 -0.387478 + -0.171277 2.07515 -1.92282 0.011308 -0.913346 -0.407028 + -0.189024 2.00479 -1.72437 -0.486474 -0.872838 -0.0386927 + -0.205292 2.0143 -1.76384 -0.356607 -0.923126 -0.143773 + -0.247637 2.05774 -1.83508 -0.185314 -0.943872 -0.273431 + -0.248104 2.04134 -1.73368 -0.394612 -0.918022 -0.0389338 + -0.264373 2.05085 -1.77315 -0.314272 -0.94523 -0.088168 + -0.265035 2.05477 -1.80713 -0.228408 -0.956859 -0.179586 + -0.341714 2.06088 -1.71631 -0.105217 -0.993904 0.0329194 + -0.338669 2.061 -1.74972 -0.0692507 -0.997581 -0.00607547 + -0.339247 2.05993 -1.79147 -0.0202501 -0.999058 -0.0383757 + -0.339909 2.06385 -1.82546 0.0163608 -0.993846 -0.109556 + -0.34736 2.06418 -1.67543 -0.143915 -0.988425 0.0480109 + -0.440412 2.06276 -1.71117 0.12431 -0.986141 0.109878 + -0.440012 2.0566 -1.76011 0.162983 -0.983239 0.0817146 + -0.44059 2.05553 -1.80185 0.215503 -0.976374 0.0158792 + -0.447086 2.0539 -1.85062 0.262667 -0.962886 -0.0621016 + -0.359616 2.06797 -1.64419 -0.133723 -0.987247 0.0863842 + -0.446058 2.06606 -1.67028 0.140596 -0.985975 0.0899251 + -0.508265 2.04278 -1.71657 0.474703 -0.873774 0.105713 + -0.507865 2.03663 -1.76551 0.482399 -0.865182 0.136935 + -0.510076 2.02542 -1.8323 0.61025 -0.792073 0.0146968 + -0.3657 2.07343 -1.60525 -0.177184 -0.980204 0.088356 + -0.451351 2.06927 -1.62164 0.150486 -0.980798 0.124052 + -0.515571 2.0499 -1.62109 0.543541 -0.836332 0.0714971 + -0.510278 2.04669 -1.66974 0.492073 -0.865777 0.0910711 + -0.550943 2.00401 -1.7274 0.804281 -0.585967 0.0988655 + -0.457435 2.07473 -1.5827 0.229321 -0.966998 0.111025 + -0.515322 2.05069 -1.57487 0.576369 -0.816993 -0.0179433 + -0.555603 2.00625 -1.63649 0.817199 -0.575558 0.0303213 + -0.552956 2.00791 -1.68057 0.793023 -0.606439 0.0578475 + -0.439282 2.08334 -1.53762 0.191301 -0.974031 0.121108 + -0.497169 2.05931 -1.52979 0.558127 -0.829746 0.00398275 + -0.562635 2.00285 -1.54721 0.80071 -0.598515 0.0253719 + -0.555354 2.00713 -1.59022 0.821027 -0.569684 0.0370653 + -0.439484 2.08755 -1.50251 0.115367 -0.992835 0.0311252 + -0.47773 2.07946 -1.47809 0.392774 -0.91892 0.0362546 + -0.514858 2.03812 -1.4885 0.692738 -0.691325 0.205385 + -0.580324 1.98159 -1.50598 0.814622 -0.560088 -0.15064 + -0.63432 1.85705 -1.49726 0.921812 -0.387524 0.00933292 + -0.426897 2.08626 -1.47047 -0.106515 -0.971316 -0.212603 + -0.465143 2.07809 -1.44612 0.1193 -0.985214 -0.122965 + -0.538714 2.05245 -1.44351 0.55632 -0.798899 0.228624 + -0.575842 2.0112 -1.45386 0.771179 -0.440403 0.459704 + -0.600283 1.9196 -1.4594 0.922073 -0.387009 0.00237487 + -0.400301 2.06788 -1.43764 -0.317224 -0.909285 -0.269389 + -0.474158 2.07625 -1.40354 -0.000841495 -0.994941 -0.100453 + -0.547729 2.0507 -1.40088 0.595961 -0.794513 0.116533 + -0.588591 2.00453 -1.39152 0.893102 -0.445823 0.0600933 + -0.400545 2.05461 -1.39905 -0.351901 -0.801865 -0.482884 + -0.474401 2.06298 -1.36495 -0.445921 -0.790117 -0.420558 + -0.531356 2.07762 -1.31671 0.190772 -0.863539 -0.466805 + -0.572218 2.03154 -1.3073 0.643406 -0.517911 -0.563734 + -0.308024 1.96257 -1.36083 0.0454341 -0.434275 -0.899634 + -0.388766 1.99849 -1.35526 -0.301134 -0.3669 -0.880172 + -0.445089 2.02378 -1.34266 -0.518481 -0.45634 -0.72314 + -0.502044 2.03843 -1.29442 -0.201851 -0.365996 -0.908462 + -0.516749 1.9941 -1.29365 -0.16422 -0.00214567 -0.986421 + -0.356275 1.87655 -1.35384 0.209898 -0.484645 -0.849154 + -0.412598 1.90184 -1.34124 -0.301528 0.00494521 -0.953444 + -0.427303 1.85751 -1.34046 -0.0279439 -0.123754 -0.991919 + -0.307158 1.88639 -1.30328 0.544734 -0.814191 -0.200894 + -0.373487 1.84689 -1.32308 0.417849 -0.900289 -0.12199 + -0.436509 1.85922 -1.26723 0.429557 -0.543335 0.721296 + -0.49098 1.81562 -1.26952 0.751295 -0.349062 0.5601 + -0.427958 1.8033 -1.32537 0.457793 -0.606249 0.650299 + -0.475914 1.89309 -1.2211 0.782113 -0.491869 0.382575 + -0.500833 1.82957 -1.20268 0.939012 -0.332084 0.0893095 + -0.51418 1.75007 -1.25658 0.840412 -0.540167 0.0438927 + -0.427958 1.8033 -1.32537 0.652006 -0.0819838 0.753769 + -0.422755 1.953 -1.21965 0.844536 0.00795385 0.535439 + -0.45742 1.9356 -1.16112 0.9233 -0.216313 0.317374 + -0.482339 1.87208 -1.1427 0.945903 -0.307456 0.103623 + -0.506073 1.81232 -1.1118 0.958146 -0.27496 0.0797017 + -0.524033 1.76402 -1.18974 0.942365 -0.331354 0.0464063 + -0.38335 1.9192 -1.26572 0.640686 0.0840649 0.763187 + -0.406668 2.21423 -1.56392 0.802703 0.471233 0.365524 + -0.458864 2.00335 -1.18766 0.948296 0.193561 0.251535 + -0.470622 2.07197 -1.13612 0.989595 0.086953 0.114639 + -0.469178 2.00413 -1.10962 0.972673 0.00364498 0.232153 + -0.307158 1.88639 -1.30328 0.314201 -0.301025 0.900367 + -0.427958 1.8033 -1.32537 0.102436 -0.26789 -0.957988 + -0.503793 1.84717 -1.33935 -0.120804 0.0310537 -0.992191 + -0.548917 1.83148 -1.32838 -0.357764 0.0485685 -0.932548 + -0.561873 1.97841 -1.28268 0.147875 -0.106814 -0.983221 + -0.504448 1.79296 -1.32426 0.174015 -0.517839 -0.837593 + -0.541439 1.73998 -1.3119 0.364933 -0.463747 -0.807318 + -0.597746 1.77671 -1.30732 -0.189676 0.012338 -0.981769 + -0.589436 1.89582 -1.28503 0.103275 -0.0258392 -0.994317 + -0.599781 1.94896 -1.30966 0.87307 -0.263721 -0.410122 + -0.551171 1.69718 -1.24416 0.991708 -0.118923 0.0487045 + -0.542234 1.62171 -1.22585 0.780819 -0.375076 -0.499639 + -0.590268 1.68522 -1.29085 0.221149 -0.440923 -0.869873 + -0.631381 1.67812 -1.30036 -0.0164012 -0.488553 -0.87238 + -0.628198 1.74036 -1.30896 0.284703 -0.080724 -0.955211 + -0.541192 1.70115 -1.16484 0.992566 -0.116392 -0.0355904 + -0.532254 1.62568 -1.14653 0.996308 -0.0840098 0.0176845 + -0.556701 1.56805 -1.18832 0.482479 -0.752529 -0.448235 + -0.427958 1.8033 -1.32537 0.106893 -0.846721 -0.521189 + 0.998147 1.78121 -1.21072 0.176721 0.0027352 0.984257 + 0.973831 1.76895 -1.17167 0.931008 0.205379 0.301735 + 0.97388 1.77014 -1.11294 0.962471 0.214047 0.166836 + 0.948906 1.69815 -1.06444 0.65038 -0.758601 -0.0391053 + 0.97091 1.85955 -1.1818 0.645793 0.0168485 0.763327 + 0.947908 1.85511 -1.16152 0.872688 0.225909 0.432875 + 0.950398 1.84448 -1.0949 0.955143 0.277036 0.104658 + 0.940618 1.79502 -1.02983 0.988135 0.0332332 0.149946 + 0.9641 1.72068 -1.04788 0.953665 -0.172208 0.246715 + 0.901206 1.61571 -1.00085 0.845814 -0.530776 -0.0536267 + 0.965696 2.02809 -1.16413 0.73215 -0.09829 0.674014 + 0.937612 2.10506 -1.11184 0.459765 -0.284535 0.841223 + 0.944987 1.94571 -1.17164 0.118054 -0.164887 0.979222 + 0.914823 2.0173 -1.13822 0.454341 -0.170611 0.874338 + 0.918321 1.93126 -1.14001 0.856898 0.2115 0.470099 + 1.01448 2.0909 -1.18991 0.62502 -0.268693 0.732908 + 0.986391 2.16787 -1.13762 0.613835 -0.297592 0.731194 + 0.964182 2.25192 -1.0832 0.515252 -0.329734 0.791069 + 0.907448 2.17665 -1.07843 0.507999 -0.269674 0.818054 + 1.01446 1.69188 -1.20979 -0.601831 -0.101663 0.792126 + 1.10748 2.05776 -1.27712 0.655601 -0.30825 0.689325 + 1.09549 2.15062 -1.22155 0.636267 -0.307186 0.707673 + 1.07328 2.23468 -1.16714 0.605909 -0.333226 0.722381 + 1.16448 1.97777 -1.38457 0.876606 -0.270515 0.397974 + 1.17192 2.06806 -1.34315 0.851429 -0.241055 0.465792 + 1.15993 2.16082 -1.28762 0.792213 -0.25469 0.554556 + 1.15643 2.2665 -1.23506 0.773664 -0.244587 0.584483 + 1.05397 2.32482 -1.10727 0.575139 -0.330183 0.748462 + 1.17722 1.95109 -1.46175 0.928746 -0.342127 0.142757 + 1.18692 2.03124 -1.42838 0.943336 -0.220648 0.247853 + 1.19436 2.12152 -1.38695 0.912291 -0.221821 0.344267 + 1.20373 2.19955 -1.34889 0.87031 -0.266113 0.41442 + 1.20022 2.30514 -1.29638 0.823583 -0.222867 0.521576 + 1.13559 1.86389 -1.47411 0.772915 -0.587424 -0.239867 + 1.16166 1.92269 -1.53557 0.773735 -0.633217 -0.0192284 + 1.20451 1.99043 -1.53648 0.924552 -0.348469 0.154186 + 1.2142 2.0705 -1.50317 0.940541 -0.271985 0.203488 + 1.23862 2.16438 -1.46977 0.926123 -0.269104 0.264348 + 1.0651 1.85068 -1.53704 0.803781 -0.572182 0.162926 + 1.18043 1.92842 -1.63808 0.800181 -0.549045 0.24137 + 1.22327 1.99606 -1.63905 0.930457 -0.325114 0.168969 + 1.24255 2.08485 -1.60643 0.943292 -0.286116 0.168336 + 1.26697 2.17874 -1.57305 0.900717 -0.375908 0.217721 + 1.00259 1.73764 -1.46965 0.911143 -0.354519 -0.210083 + 1.03402 1.78122 -1.51992 0.819924 -0.155853 0.550849 + 0.98083 1.64894 -1.44662 0.914052 0.402404 0.0507898 + 1.01227 1.69252 -1.49689 0.506191 0.324629 0.798991 + 1.19025 1.85053 -1.68118 0.923312 -0.229289 0.308094 + 0.999675 1.61762 -1.41156 0.0173156 0.75015 0.661041 + 0.9164 1.63825 -0.984295 0.740895 -0.606086 0.289368 + 0.943193 1.68178 -0.955688 0.87374 -0.484211 0.0460162 + 0.912573 1.69183 -0.920301 -0.500376 -0.688659 0.52476 + 0.885779 1.6483 -0.948908 -0.301474 -0.649747 0.697812 + 0.901206 1.61571 -1.00085 0.425495 -0.704292 0.568267 + 0.942229 1.8297 -1.0013 0.994588 0.102939 0.0140512 + 0.944804 1.71646 -0.927156 0.999425 -0.0305215 -0.0147637 + 0.942828 1.68755 -0.866894 0.998141 -0.0411194 0.0449861 + 0.945445 1.76854 -0.856961 0.99584 0.0460406 0.0786322 + 0.934322 1.71336 -0.760589 0.598627 -0.707114 0.376344 + 0.920811 1.92063 -1.0734 0.925506 0.374322 0.0576395 + 0.930003 1.89001 -1.01636 0.953451 0.300533 0.0246987 + 0.947421 1.79745 -0.917232 0.994185 0.101218 0.0367644 + 0.882867 2.01003 -1.11103 0.861614 0.220036 0.457389 + 0.886784 1.98825 -1.04451 0.909922 0.407703 0.0762849 + 0.895976 1.95763 -0.987472 0.920109 0.390461 0.030656 + 0.935195 1.85775 -0.932285 0.962104 0.265439 0.0624326 + 0.879369 2.09615 -1.1092 0.321053 -0.253941 0.912381 + 0.845327 2.17518 -1.06869 0.448241 -0.259466 0.855428 + 0.849735 2.0802 -1.07638 0.878367 0.198379 0.434876 + 0.853651 2.05842 -1.00985 0.91679 0.398687 0.0233236 + 0.881246 1.99862 -0.951473 0.926245 0.376605 -0.0154823 + 0.879442 2.25536 -1.02896 0.267248 -0.391944 0.880317 + 0.845399 2.33448 -0.9884 0.0790563 -0.382344 0.920632 + 0.809396 2.42101 -0.952472 0.270372 -0.321581 0.90746 + 0.808738 2.24592 -1.02162 0.612162 -0.17746 0.770562 + 0.813146 2.15103 -1.02926 0.916703 0.217531 0.335167 + 0.936176 2.33064 -1.03375 0.491946 -0.322704 0.80861 + 0.91135 2.41981 -0.9836 0.385384 -0.286813 0.87705 + 0.875347 2.50634 -0.947673 0.339144 -0.271432 0.900725 + 0.84901 2.5959 -0.908795 0.348091 -0.260138 0.900645 + 0.776939 2.49672 -0.913018 0.150996 -0.336835 0.929377 + 1.02915 2.41408 -1.05708 0.530968 -0.318174 0.785391 + 1.01347 2.5095 -1.00474 0.499452 -0.26853 0.823674 + 0.987138 2.59905 -0.965853 0.474369 -0.204146 0.856328 + 1.11549 2.42714 -1.11729 0.705029 -0.262086 0.658972 + 1.09981 2.52255 -1.06495 0.684773 -0.222131 0.694077 + 1.10261 2.61414 -1.04439 0.712006 -0.102851 0.6946 + 0.958832 2.696 -0.930375 0.47887 -0.227707 0.84784 + 1.13711 2.35673 -1.17514 0.751653 -0.263745 0.60453 + 1.17913 2.52014 -1.17458 0.827472 -0.163829 0.537075 + 1.18193 2.61173 -1.15402 0.747321 -0.218951 0.627353 + 1.0743 2.71118 -1.00886 0.634746 -0.167597 0.754326 + 1.20076 2.44965 -1.23248 0.806375 -0.215933 0.550575 + 1.26461 2.50664 -1.301 0.707621 -0.297575 0.640876 + 1.25061 2.61971 -1.22144 0.662115 -0.340955 0.667348 + 1.17847 2.75048 -1.09314 0.681459 -0.21774 0.698715 + 1.26406 2.36205 -1.36495 0.827636 -0.300358 0.474135 + 1.33952 2.57633 -1.3355 0.677111 -0.40554 0.61405 + 1.32552 2.6894 -1.25595 0.644429 -0.334869 0.68744 + 1.24715 2.75846 -1.16056 0.64424 -0.279807 0.711802 + 1.15569 2.85747 -1.04705 0.643262 -0.174932 0.745394 + 1.24798 2.24232 -1.43177 0.885961 -0.32003 0.33564 + 1.33449 2.41726 -1.46819 0.768124 -0.41294 0.489354 + 1.4176 2.48106 -1.51169 0.562564 -0.550139 0.617146 + 1.42262 2.64013 -1.379 0.606178 -0.441856 0.661295 + 1.35603 2.76998 -1.24792 0.598128 -0.363393 0.714275 + 1.31841 2.29753 -1.535 0.812886 -0.464384 0.351518 + 1.43417 2.38079 -1.61921 0.552759 -0.682558 0.478092 + 1.53345 2.52886 -1.54308 0.396722 -0.594562 0.699363 + 1.49076 2.72627 -1.3838 0.454796 -0.502434 0.735337 + 1.42417 2.85621 -1.25266 0.47138 -0.451471 0.757611 + 1.28924 2.1782 -1.66811 0.884098 -0.433425 0.174684 + 1.34068 2.29708 -1.63003 0.761071 -0.612964 0.212241 + 1.38679 2.33015 -1.6615 0.589487 -0.744131 0.314283 + 1.52086 2.36081 -1.75201 0.317471 -0.810465 0.492299 + 1.55002 2.42859 -1.6506 0.319272 -0.73415 0.59924 + 1.26074 2.09963 -1.71582 0.932064 -0.343325 0.115697 + 1.31454 2.19299 -1.78813 0.81329 -0.555462 0.173264 + 1.36065 2.22605 -1.8196 0.626467 -0.72319 0.290751 + 1.47347 2.31008 -1.79434 0.436712 -0.833116 0.339412 + 1.24146 2.01092 -1.74839 0.965315 -0.257614 0.0424489 + 1.24278 2.03662 -1.8647 0.939585 -0.338999 -0.0475287 + 1.28605 2.1145 -1.83579 0.901687 -0.431892 0.0207403 + 1.29907 2.1611 -1.92471 0.807038 -0.545618 -0.225813 + 1.39568 2.23147 -1.89478 0.597069 -0.780679 -0.184524 + 1.21483 1.91541 -1.79335 0.978002 -0.208562 -0.0036083 + 1.21616 1.94119 -1.90961 0.974387 -0.219436 -0.0491665 + 1.20434 1.9139 -1.99994 0.980805 -0.158822 -0.113129 + 1.21327 1.99216 -2.01029 0.96728 -0.169182 -0.189066 + 1.25581 2.08331 -1.95357 0.909478 -0.351334 -0.222294 + 1.20517 1.85808 -1.77485 0.977937 -0.203172 0.048575 + 1.18278 1.76785 -1.93897 0.9789 -0.193564 -0.0654797 + 1.17096 1.74047 -2.02934 0.959981 -0.25989 -0.104377 + 1.16752 1.80589 -2.15486 0.954694 -0.207466 -0.213347 + 1.17645 1.88415 -2.16522 0.942118 -0.0382446 -0.333092 + 1.17745 1.71176 -1.83562 0.936087 -0.350697 0.0274444 + 1.17311 1.71051 -1.92046 0.938578 -0.339105 -0.0638635 + 1.15142 1.68191 -2.03092 0.968679 -0.207435 -0.1365 + 1.16252 1.70413 -1.742 0.944067 -0.305173 0.124926 + 1.13874 1.64637 -1.84257 0.698468 -0.714866 -0.0333007 + 1.15142 1.68191 -2.03092 0.913985 -0.383838 -0.131527 + 1.1428 1.64929 -1.72542 0.852678 -0.512774 0.100018 + 1.11866 1.63277 -1.6602 0.472415 -0.881191 -0.0180574 + 1.151 1.65245 -1.7697 0.728805 -0.680928 0.0719691 + 1.07868 1.61952 -1.62466 0.260139 -0.963641 -0.0610206 + 1.13374 1.64126 -1.6999 0.395596 -0.91711 0.0491234 + 1.09376 1.62793 -1.66441 0.262589 -0.964091 -0.0396832 + 1.13429 1.63956 -1.72157 0.593647 -0.799579 0.0908634 + 1.15155 1.65076 -1.79137 0.575327 -0.817291 -0.0321529 + 0.983657 1.59513 -1.65601 0.235754 -0.962681 0.132913 + 1.09264 1.62597 -1.68702 0.356762 -0.92549 0.12724 + 1.11412 1.62372 -1.75273 0.461114 -0.886532 0.0378739 + 1.10131 1.61933 -1.80392 0.429413 -0.899486 -0.0808002 + 1.05968 1.60678 -1.84059 0.378753 -0.924359 -0.0458907 + 0.962638 1.58518 -1.67937 0.158432 -0.978443 0.132473 + 1.07247 1.61012 -1.71818 0.354357 -0.923003 0.149987 + 1.05145 1.60017 -1.74154 0.307079 -0.949714 0.0612074 + 1.00982 1.58762 -1.7782 0.172976 -0.98369 -0.0493352 + 1.04654 1.60198 -1.86107 0.174137 -0.96499 -0.19614 + 0.862281 1.57804 -1.67641 0.0931563 -0.990595 -0.100212 + 0.90641 1.58098 -1.68711 0.0536302 -0.99854 -0.00642122 + 0.776752 1.5714 -1.74331 0.194425 -0.953838 -0.228891 + 0.783099 1.58057 -1.76098 0.174883 -0.95598 -0.235623 + 0.827227 1.58351 -1.77167 0.0109612 -0.984911 -0.172712 + 0.953589 1.58342 -1.78594 0.0390918 -0.990586 -0.131189 + 0.733873 1.5759 -1.7889 0.119775 -0.950791 -0.285747 + 0.740219 1.58506 -1.80657 0.219833 -0.880022 -0.420994 + 0.729381 1.60414 -1.84241 0.272837 -0.748053 -0.604961 + 0.782992 1.61007 -1.84089 -0.0277679 -0.867597 -0.496492 + 0.835885 1.59909 -1.83347 -0.0936769 -0.928144 -0.360239 + 0.72052 1.57168 -1.769 -0.00286543 -0.990885 -0.134677 + 0.690812 1.59621 -1.85868 -0.135229 -0.854711 -0.50118 + 0.679974 1.61528 -1.89451 0.377307 -0.765326 -0.521455 + 0.644544 1.69845 -1.93856 -0.850646 -0.419864 -0.316411 + 0.679974 1.61528 -1.89451 -0.933281 -0.34537 0.0985241 + 0.657005 1.72042 -1.98722 -0.799496 -0.443119 -0.405526 + 0.692435 1.63725 -1.94316 -0.716957 -0.539359 -0.441661 + 0.679974 1.61528 -1.89451 -0.726925 -0.53663 -0.428494 + 0.618961 1.9043 -2.05851 -0.866897 -0.378982 -0.323825 + 0.666892 1.74132 -2.03102 -0.734983 -0.471582 -0.487248 + 0.702546 1.66783 -1.99233 -0.0219185 -0.890527 -0.454403 + 0.628127 1.91379 -2.10014 -0.854525 -0.417905 -0.308451 + 0.680883 1.77302 -2.07412 -0.744353 -0.48553 -0.458475 + 0.716537 1.69952 -2.03542 -0.0872129 -0.839277 -0.536664 + 0.575139 2.01336 -2.097 -0.774972 -0.609114 -0.168518 + 0.575473 2.02009 -2.14067 -0.70299 -0.708263 -0.0645623 + 0.637969 1.92843 -2.1431 -0.846333 -0.47816 -0.234698 + 0.690725 1.78757 -2.11712 -0.788109 -0.507852 -0.347807 + 0.729336 1.72366 -2.08744 -0.192497 -0.878335 -0.437576 + 0.511152 2.05723 -2.06439 -0.485559 -0.867525 -0.107859 + 0.511486 2.06396 -2.10805 -0.547314 -0.820497 -0.16502 + 0.58823 2.00932 -2.18261 -0.751994 -0.654913 -0.0747964 + 0.650726 1.91757 -2.18509 -0.872408 -0.471314 -0.129487 + 0.434449 2.09469 -2.06367 -0.372701 -0.893503 -0.250493 + 0.506492 2.07895 -2.15301 -0.544495 -0.829369 -0.125188 + 0.508242 2.08118 -2.19707 -0.544658 -0.837964 -0.0341302 + 0.589979 2.01155 -2.22667 -0.746194 -0.657017 -0.107346 + 0.429455 2.10959 -2.10868 -0.372252 -0.89973 -0.227848 + 0.426015 2.12053 -2.14762 -0.374498 -0.918667 -0.125708 + 0.499475 2.08507 -2.24461 -0.506715 -0.861706 0.0265007 + 0.594652 2.01541 -2.26976 -0.708885 -0.703051 -0.0565841 + 0.338236 2.127 -2.07943 -0.267992 -0.909635 -0.317403 + 0.33785 2.1411 -2.11065 -0.303875 -0.90752 -0.289944 + 0.417248 2.12441 -2.19516 -0.410398 -0.908732 -0.0760271 + 0.48074 2.09326 -2.3066 -0.558767 -0.82853 0.0362838 + 0.510478 2.07515 -2.28504 -0.570969 -0.817278 0.07779 + 0.264106 2.12716 -2.02732 -0.114793 -0.897597 -0.425608 + 0.263721 2.14117 -2.05859 -0.136458 -0.902535 -0.408423 + 0.25955 2.15094 -2.07891 -0.144676 -0.906434 -0.396794 + 0.326549 2.15319 -2.1476 -0.3484 -0.901596 -0.256404 + 0.405947 2.13659 -2.23205 -0.483291 -0.867556 -0.117372 + 0.17507 2.11596 -2.00852 0.00177045 -0.90716 -0.420782 + 0.170899 2.12573 -2.02884 0.0719704 -0.910264 -0.407725 + 0.248157 2.16615 -2.10865 -0.108761 -0.934486 -0.33898 + 0.315156 2.1684 -2.17734 -0.35421 -0.900309 -0.252939 + 0.159007 2.13113 -2.04539 0.120753 -0.926079 -0.357487 + 0.236265 2.17147 -2.12526 0.0254303 -0.970293 -0.240592 + 0.295471 2.1831 -2.2082 -0.188415 -0.975883 -0.110237 + 0.38386 2.15237 -2.27137 -0.476518 -0.87343 -0.100257 + 0.458653 2.10904 -2.34592 -0.60858 -0.793344 0.0153674 + 0.127671 2.12562 -2.04185 -0.054145 -0.936223 -0.34721 + 0.211459 2.17238 -2.14525 0.139326 -0.979542 -0.145211 + 0.270665 2.18392 -2.22823 -0.0497684 -0.993653 -0.100876 + 0.364174 2.16698 -2.30229 -0.502063 -0.845702 -0.18089 + 0.426257 2.13531 -2.39723 -0.677894 -0.732475 -0.062769 + 0.083882 2.08784 -1.9156 -0.264595 -0.900368 -0.345436 + 0.100328 2.13502 -2.05032 -0.104897 -0.948047 -0.300338 + 0.146993 2.16015 -2.15325 0.0947447 -0.974619 -0.202835 + 0.180123 2.16687 -2.14169 0.186481 -0.962434 -0.197349 + 0.025987 2.05142 -1.76373 -0.208507 -0.901287 -0.379745 + 0.056539 2.09723 -1.92407 -0.239743 -0.91712 -0.318456 + 0.072668 2.13843 -2.06243 -0.0528516 -0.962844 -0.264835 + 0.119333 2.16347 -2.1654 -0.0430622 -0.975191 -0.217137 + 0.206692 2.18146 -2.25856 0.148823 -0.987598 -0.0500119 + -0.025977 2.03612 -1.72583 0.168117 -0.905339 -0.389998 + -0.025977 2.05142 -1.76373 0.276984 -0.88459 -0.375207 + 0.011625 2.06196 -1.78159 -0.138052 -0.892613 -0.429166 + 0.042178 2.10776 -1.94192 -0.197782 -0.939715 -0.278958 + -0.083873 2.08784 -1.9156 0.263369 -0.899651 -0.348231 + -0.05653 2.09723 -1.92407 0.240676 -0.915964 -0.321068 + -0.042178 2.10776 -1.94192 0.183491 -0.938271 -0.293221 + -0.011625 2.06196 -1.78159 0.1385 -0.894316 -0.42546 + 0.011625 2.08203 -1.81914 -0.45952 -0.767627 -0.446756 + -0.127671 2.12562 -2.04185 0.0642568 -0.920803 -0.384698 + -0.100328 2.13502 -2.05032 0.0741297 -0.945151 -0.31811 + -0.072668 2.13843 -2.06243 0.0536213 -0.962334 -0.266531 + -0.020866 2.11114 -1.94717 0.410788 -0.874217 -0.258839 + -0.011625 2.08203 -1.81914 0.647897 -0.649197 -0.398462 + -0.158061 2.0999 -1.9735 0.0038983 -0.923565 -0.383421 + -0.17507 2.11596 -2.00852 -0.0538746 -0.910176 -0.410704 + -0.170899 2.12573 -2.02884 -0.0814251 -0.902378 -0.423182 + -0.159006 2.13113 -2.04539 -0.119246 -0.927615 -0.353993 + -0.180123 2.16687 -2.14169 -0.164198 -0.968946 -0.184887 + -0.242848 2.10027 -1.96134 -0.0138784 -0.941603 -0.336439 + -0.247097 2.11101 -1.99235 0.0460035 -0.92402 -0.379565 + -0.264106 2.12716 -2.02732 0.114963 -0.897662 -0.425426 + -0.263721 2.14117 -2.05859 0.136896 -0.902412 -0.408549 + -0.25955 2.15094 -2.07891 0.144677 -0.906435 -0.396793 + -0.189428 2.06804 -1.89932 -0.143543 -0.918847 -0.367581 + -0.260998 2.09316 -1.93783 0.0038661 -0.955783 -0.294049 + -0.340421 2.09381 -1.97056 0.182245 -0.942206 -0.281131 + -0.337429 2.1054 -2.00943 0.185472 -0.93537 -0.301135 + -0.341678 2.11606 -2.04048 0.242006 -0.918396 -0.313022 + -0.259557 2.08354 -1.90636 -0.0403483 -0.940346 -0.337817 + -0.33898 2.08419 -1.93909 0.148525 -0.959011 -0.241326 + -0.437442 2.0831 -2.0248 0.314833 -0.928536 -0.196729 + -0.43445 2.09469 -2.06367 0.365523 -0.89702 -0.248491 + -0.429457 2.10959 -2.10868 0.370975 -0.899499 -0.230824 + -0.246269 2.06574 -1.86774 -0.0986639 -0.945306 -0.310905 + -0.340548 2.07585 -1.89925 0.106115 -0.966711 -0.23283 + -0.449247 2.07242 -1.9795 0.294349 -0.940763 -0.168298 + -0.341916 2.06786 -1.86661 0.0503669 -0.985137 -0.164218 + -0.450815 2.06408 -1.93966 0.29727 -0.94016 -0.166522 + -0.522957 2.04655 -2.01909 0.596232 -0.793401 -0.122566 + -0.511152 2.05723 -2.06439 0.516766 -0.847458 -0.121522 + -0.511485 2.06396 -2.10805 0.538179 -0.823708 -0.178514 + -0.449093 2.05791 -1.89177 0.272106 -0.954851 -0.119236 + -0.520794 2.02929 -1.92639 0.661218 -0.737992 -0.134754 + -0.522516 2.03537 -1.97433 0.643903 -0.743746 -0.179529 + -0.565974 2.00379 -2.05543 0.796459 -0.564439 -0.216935 + -0.516572 2.02379 -1.88107 0.665865 -0.737832 -0.110575 + -0.559785 1.97772 -1.96868 0.876198 -0.436896 -0.203467 + -0.565533 1.99261 -2.01067 0.854261 -0.482859 -0.192575 + -0.552771 1.96938 -1.88103 0.887936 -0.459114 -0.027991 + -0.555563 1.97222 -1.92336 0.89484 -0.430939 -0.116422 + -0.597085 1.85418 -1.9261 0.942802 -0.298046 -0.149304 + -0.603334 1.86842 -1.97277 0.916039 -0.322945 -0.237864 + -0.609082 1.88331 -2.01476 0.890919 -0.346005 -0.294184 + -0.514372 2.02202 -1.8028 0.761433 -0.638277 0.113238 + -0.557067 1.96606 -1.85148 0.883078 -0.456279 0.109467 + -0.594023 1.85066 -1.8352 0.966753 -0.251769 0.0447406 + -0.594293 1.85134 -1.88378 0.957728 -0.282989 -0.0517112 + -0.557221 1.98226 -1.80874 0.824846 -0.543675 0.155067 + -0.594177 1.86686 -1.79246 0.960993 -0.23646 0.143457 + -0.634484 1.66618 -1.79088 0.959525 -0.280525 0.024858 + -0.634754 1.66686 -1.83946 0.92789 -0.356015 -0.110789 + -0.638303 1.68421 -1.8919 0.885992 -0.405678 -0.224598 + -0.550714 1.99679 -1.7715 0.803544 -0.587014 0.0986484 + -0.602625 1.87233 -1.74413 0.958586 -0.260788 0.114468 + -0.639244 1.66784 -1.73534 0.965476 -0.220812 0.138194 + -0.602854 1.87955 -1.70004 0.941382 -0.286731 0.177721 + -0.647692 1.67322 -1.68706 0.924954 -0.195323 0.32605 + -0.671382 1.57105 -1.69351 0.771201 -0.603015 0.204014 + -0.666623 1.5694 -1.74905 0.571741 -0.81744 -0.0700294 + -0.673911 1.57456 -1.78639 0.290986 -0.911775 -0.289815 + -0.614695 1.88295 -1.65654 0.929028 -0.337637 0.151352 + -0.674709 1.67271 -1.63638 0.897458 -0.23081 0.375893 + -0.735823 1.56272 -1.57048 0.766215 -0.550049 0.332204 + -0.708806 1.56324 -1.62117 0.765484 -0.520409 0.378429 + -0.617342 1.88121 -1.61252 0.917994 -0.395065 0.0347914 + -0.68655 1.67611 -1.59288 0.89776 -0.278795 0.341028 + -0.741883 1.56683 -1.54499 0.771661 -0.539409 0.337011 + -0.789372 1.54835 -1.49959 0.339912 -0.907341 0.247369 + -0.62704 1.86132 -1.54027 0.913981 -0.400713 0.0637825 + -0.709268 1.66856 -1.55219 0.905355 -0.343962 0.249045 + -0.764601 1.55928 -1.50431 0.55999 -0.819957 0.11867 + -0.795433 1.55237 -1.47414 0.40947 -0.846557 0.34011 + -0.718965 1.64867 -1.47995 0.840284 -0.537683 -0.0694279 + -0.779727 1.56951 -1.42564 0.418519 -0.902479 0.101849 + -0.797832 1.56316 -1.45743 0.371349 -0.856028 0.359604 + -0.828664 1.55625 -1.42726 0.438238 -0.782213 0.442821 + -0.869795 1.5549 -1.40733 0.118829 -0.950683 0.286499 + -0.695448 1.66118 -1.35421 0.863235 -0.492792 -0.109461 + -0.75621 1.58202 -1.2999 0.267065 -0.962814 -0.0408011 + -0.85677 1.58823 -1.32627 -0.0438062 -0.986232 0.15946 + -0.874876 1.58179 -1.35811 0.155722 -0.935971 0.315768 + -0.916007 1.58053 -1.33812 0.0515232 -0.880915 0.470462 + -0.636581 1.83901 -1.44743 0.909857 -0.392923 -0.133311 + -0.697709 1.64323 -1.30433 0.731193 -0.604022 -0.317039 + -0.711105 1.59853 -1.28851 0.392562 -0.579307 -0.714351 + -0.748335 1.58493 -1.27294 0.167833 -0.984176 0.0568265 + -0.65654 1.77702 -1.40086 0.946832 -0.314013 0.0700285 + -0.686108 1.69237 -1.37664 0.937616 -0.343276 -0.0551146 + -0.639299 1.83442 -1.40348 0.940583 -0.311006 0.136304 + -0.686108 1.69237 -1.37664 0.942462 -0.274508 0.190815 + -0.660427 1.78791 -1.35351 0.938143 -0.341573 -0.0567117 + -0.684331 1.71531 -1.35037 0.936451 -0.275172 0.217579 + -0.692772 1.67708 -1.37616 0.942 -0.303974 0.142255 + -0.613032 1.91293 -1.39706 0.952444 -0.29688 0.0686564 + -0.626048 1.87036 -1.31612 0.906816 -0.350627 -0.233978 + -0.619887 1.85947 -1.28666 0.501903 -0.163292 -0.849369 + -0.654266 1.77702 -1.32406 0.757721 -0.206092 -0.619181 + -0.699814 1.69538 -1.32206 0.673289 -0.67932 -0.291902 + -0.657449 1.71478 -1.31545 0.192012 -0.364222 -0.911303 + -0.699814 1.69538 -1.32206 0.216656 -0.144532 -0.96549 + -0.631718 1.61943 -1.2503 -0.0311826 -0.668894 -0.742703 + -0.658401 1.60355 -1.2296 -0.332418 -0.729388 -0.597906 + -0.684132 1.6989 -1.29475 0.278865 -0.794212 -0.539872 + -0.741925 1.62467 -1.29797 0.704304 -0.653188 -0.278033 + -0.604736 1.63147 -1.25336 0.224865 -0.62885 -0.7443 + -0.605073 1.57287 -1.20325 0.380604 -0.709631 -0.592929 + -0.636539 1.55107 -1.1577 -0.297041 -0.837696 -0.458292 + -0.711337 1.62078 -1.18883 0.101616 -0.871829 -0.479154 + -0.726242 1.62827 -1.2706 0.71587 -0.651824 -0.250309 + -0.590567 1.53741 -1.13503 0.339035 -0.899062 -0.277024 + -0.622033 1.51561 -1.08948 0.343836 -0.87628 -0.337507 + -0.635697 1.4879 -1.04188 0.00751525 -0.934855 -0.35495 + -0.689475 1.5683 -1.11694 -0.350767 -0.863784 -0.361717 + -0.755178 1.57902 -1.16811 0.378852 -0.869663 -0.316478 + -0.545593 1.57539 -1.10483 0.897589 -0.433879 0.0779912 + -0.579459 1.54475 -1.05154 0.767467 -0.641044 -0.00753826 + -0.599094 1.50618 -1.01114 0.793352 -0.600673 -0.0989179 + -0.612758 1.47846 -0.963537 0.279977 -0.883991 0.374396 + -0.650522 1.48642 -1.01532 -0.715281 -0.68983 0.111835 + -0.567352 1.65255 -1.00526 0.992325 -0.0191993 0.122159 + -0.567033 1.58604 -0.954669 0.970839 -0.211109 0.113597 + -0.586668 1.54747 -0.914262 0.806259 -0.525457 0.271736 + -0.617201 1.53206 -0.889963 -0.00423025 -0.831079 0.556138 + -0.554013 1.70283 -1.04696 0.961291 -0.182841 0.206127 + -0.553473 1.76406 -0.988607 0.948561 -0.222102 0.225614 + -0.565723 1.7357 -0.938079 0.992174 -0.124417 -0.0104999 + -0.565405 1.66919 -0.887485 0.988102 -0.0941568 0.121607 + -0.581715 1.61732 -0.84404 0.850924 -0.310676 0.423567 + -0.523232 1.74945 -1.0869 0.932527 -0.334931 0.134959 + -0.522692 1.81068 -1.02855 0.920143 -0.237118 0.311627 + -0.534472 1.87048 -0.966136 0.95338 -0.223758 0.20248 + -0.546722 1.84212 -0.915617 0.977181 -0.159196 0.14062 + -0.503299 1.87251 -1.05165 0.938181 -0.206877 0.277522 + -0.515079 1.9324 -0.989183 0.951914 -0.111092 0.285516 + -0.536851 1.93903 -0.89247 0.976825 -0.131189 0.16912 + -0.567757 1.78059 -0.839841 0.976729 -0.119337 0.178214 + -0.584067 1.72863 -0.796446 0.968529 -0.167063 0.184503 + -0.479565 1.93227 -1.08255 0.963501 -0.125677 0.23637 + -0.492001 2.01237 -1.04649 0.948521 -0.0337905 0.314907 + -0.496957 2.08891 -1.01227 0.973452 -0.0328019 0.226527 + -0.520036 2.00887 -0.955024 0.974866 -0.0986475 0.199762 + -0.481613 2.08432 -1.07351 0.923746 -0.0504893 0.379664 + -0.505886 2.17583 -0.98122 0.992226 0.0217894 0.122524 + -0.509794 2.09676 -0.93526 0.988415 -0.0781303 0.130122 + -0.52661 2.02693 -0.872705 0.98329 -0.138406 0.118259 + -0.490542 2.17132 -1.0424 0.978338 0.0821304 0.190023 + -0.49373 2.54348 -1.26601 0.999342 0.00589675 0.0357823 + -0.506727 2.26545 -0.910037 0.999197 -0.0214141 0.033875 + -0.510635 2.18637 -0.864076 0.996615 -0.0523124 0.0634119 + -0.467295 2.31933 -1.42137 0.985123 0.123665 0.119328 + -0.487215 2.4186 -1.32771 0.995357 0.0661781 0.0698997 + -0.442777 2.26449 -1.53198 0.929293 0.282405 0.238039 + -0.456831 2.73908 -1.99399 0.986106 0.134142 0.0979889 + -0.470319 2.85022 -1.94529 0.9968 0.0652334 0.0461988 + -0.476834 2.9751 -1.88358 0.999986 -0.00210731 0.00484943 + -0.432314 2.68433 -2.10455 0.971987 0.199479 0.124294 + -0.443245 2.88386 -2.37756 0.830384 0.52645 -0.182517 + -0.46452 2.95675 -2.31301 0.896288 0.33638 -0.288992 + -0.478007 3.06789 -2.2643 0.924597 0.171125 -0.340349 + -0.406533 2.64024 -2.2384 0.884267 0.411198 0.221333 + -0.417465 2.83978 -2.51141 0.364933 0.765226 -0.530333 + -0.469929 2.87812 -2.40661 0.14398 0.810099 -0.56834 + -0.491204 2.95109 -2.34201 0.375426 0.547034 -0.748204 + -0.349571 2.16502 -1.59929 0.637748 0.619766 0.457348 + -0.349436 2.59104 -2.27377 0.512443 0.750513 0.417292 + -0.361948 2.7581 -2.62793 0.359333 0.854852 0.374311 + -0.409998 2.77346 -2.58234 0.765625 0.602423 0.225621 + -0.273379 2.13212 -1.6369 0.254902 0.790299 0.557182 + -0.257731 2.58286 -2.30601 0.0841082 0.86008 0.503178 + -0.270242 2.74992 -2.66017 0.578968 0.745126 0.331033 + -0.307158 1.88639 -1.30328 0.267175 0.762781 0.588883 + -0.186089 1.88576 -1.28879 -0.121253 0.80607 0.579265 + -0.182064 2.14381 -1.64916 -0.111481 0.80854 0.577784 + -0.166416 2.59446 -2.3183 -0.2985 0.80161 0.517996 + -0.138812 2.83607 -2.68899 -0.742492 0.669326 -0.0266218 + -0.164632 2.7747 -2.71669 -0.800169 0.471337 -0.370906 + -0.230933 2.71078 -2.69637 -0.569766 0.606267 -0.554803 + -0.095427 2.10859 -1.57575 -0.531619 0.696565 0.481848 + -0.062398 2.67037 -2.31079 -0.395123 0.831159 0.39122 + -0.034794 2.91207 -2.68142 -0.284627 0.948242 0.1408 + -0.034794 2.88076 -2.79778 -0.297152 0.744523 -0.597817 + -0.060614 2.81939 -2.82549 -0.541063 0.486951 -0.68566 + -0.099451 1.85062 -1.21534 -0.795101 0.497334 0.347093 + -0.046205 2.12026 -1.46977 -0.910752 0.371934 0.179433 + -0.013176 2.68204 -2.2048 -0.445739 0.883173 0.14602 + 0.062399 2.67037 -2.31079 0.399386 0.826521 0.396678 + 0.034794 2.91207 -2.68142 0.284652 0.948231 0.140826 + 0.034794 2.88076 -2.79778 0.30504 0.779772 -0.546723 + -0.031447 2.23142 -1.4257 -0.995398 0.0920102 0.0267833 + -0.013176 2.64772 -1.98235 -0.871707 0.443988 -0.207369 + 0.013176 2.64772 -1.98235 0.872058 0.435194 -0.223876 + 0.013176 2.68204 -2.2048 0.445656 0.883314 0.145421 + -0.04101 2.05543 -1.07148 -0.944183 0.197634 -0.263551 + -0.030452 2.20762 -1.25668 -0.998651 0.0512888 -0.00810898 + -0.012182 2.62392 -1.81333 -0.999068 0.0418518 -0.0105813 + 0.00729 2.80633 -1.93447 -0.992372 0.121137 0.0228938 + -0.041014 2.1598 -1.00965 -0.998697 0.0508875 -0.00390431 + -0.04101 2.12203 -1.03943 -0.999756 0.00996567 -0.0197393 + -0.030452 2.27413 -1.22468 -0.998667 -0.00298986 -0.0515299 + -0.02556 2.45654 -1.34582 -0.999583 0.0134728 -0.0255595 + -0.00729 2.80633 -1.93447 -0.610295 -0.0995614 -0.785893 + 0.00729 2.80633 -1.93447 0 -0.553235 -0.833025 + -0.051236 2.00431 -1.06212 -0.685473 -0.375545 0.623773 + -0.036481 2.21983 -0.956232 -0.99162 -0.0178171 0.127951 + -0.026884 2.45107 -1.11594 -0.997671 0.0651839 0.020107 + -0.025563 2.49432 -1.31605 -0.99952 0.0292854 -0.0100625 + -0.03649 2.28937 -0.889273 -0.878614 -0.0850716 0.469894 + -0.026893 2.5207 -1.04894 -0.931517 0.231986 0.280105 + -0.011004 2.20909 -0.926224 0.0760722 -0.561671 0.823856 + 0.00729 2.80633 -1.93447 0 0.314016 -0.949418 + -0.230933 2.71078 -2.69637 0.787045 0.5682 0.240225 + 1.12127 1.64042 -1.94785 -0.317944 -0.790147 -0.524004 + 1.15142 1.68191 -2.03092 0.948434 -0.3157 -0.0284066 + 0.016514 2.25648 -0.879903 0.776853 -0.00706368 0.629642 + -0.409998 2.77346 -2.58234 -0.740481 0.341366 -0.578928 + -0.462462 2.81189 -2.4775 -0.568156 0.516505 -0.640641 + -0.531689 2.93747 -2.3582 0.065333 0.57323 -0.816786 + -0.50897 3.07022 -2.29494 0.46853 0.315402 -0.825228 + -0.413206 2.61819 -2.66241 -0.497029 0.532658 -0.685009 + -0.449813 2.61727 -2.64002 -0.32977 0.609351 -0.721071 + -0.499068 2.81097 -2.45511 -0.21711 0.587325 -0.779687 + -0.361948 2.7581 -2.62793 -0.452281 0.416146 -0.788837 + -0.365156 2.60283 -2.70801 -0.350217 0.538606 -0.766324 + -0.446128 2.39177 -2.86763 -0.414887 0.721435 -0.554437 + -0.475367 2.54895 -2.68768 -0.38227 0.612555 -0.691842 + -0.556401 2.77007 -2.49266 -0.129048 0.635654 -0.761111 + -0.589022 2.89656 -2.39575 -0.194771 0.579782 -0.791149 + -0.270242 2.74992 -2.66017 -0.281987 0.456403 -0.843907 + -0.325847 2.56369 -2.74422 -0.25929 0.594643 -0.761031 + -0.204709 2.60208 -2.77249 -0.525392 0.541078 -0.656656 + -0.230387 2.49807 -2.86374 -0.494574 0.656453 -0.569619 + -0.351525 2.45968 -2.83546 -0.313763 0.705908 -0.635017 + -0.138408 2.666 -2.79281 -0.659639 0.374018 -0.65191 + -0.201101 2.45831 -2.94429 -0.366786 0.729211 -0.577685 + -0.333607 2.29487 -3.0612 -0.368372 0.72948 -0.576334 + -0.38881 2.23339 -3.1151 -0.0893524 0.680593 -0.727193 + -0.406728 2.39811 -2.88941 -0.342595 0.774223 -0.532172 + -0.033806 2.75669 -2.8853 -0.591287 0.455811 -0.665294 + -0.1116 2.60339 -2.85257 -0.551518 0.451658 -0.701307 + -0.145455 2.47997 -2.93701 -0.269226 0.663349 -0.698202 + -0.234477 2.30039 -3.15796 -0.372612 0.690146 -0.62037 + -0.304321 2.25512 -3.14175 -0.593571 0.591758 -0.545431 + -0.350353 2.16381 -3.16919 -0.639689 0.438702 -0.631141 + -0.007876 2.73617 -2.92294 -0.350781 0.468796 -0.810668 + -0.057432 2.52427 -2.95573 -0.592475 0.432198 -0.679837 + -0.091287 2.40085 -3.04016 -0.122002 0.711941 -0.69156 + -0.178832 2.32205 -3.15067 -0.0637383 0.737679 -0.672136 + 0.007879 2.73617 -2.92294 0.345702 0.452125 -0.822237 + -0.007876 2.52092 -3.00333 -0.298719 0.397261 -0.867727 + -0.031502 2.50374 -2.99337 -0.62924 0.354526 -0.691642 + -0.031473 2.38415 -3.06184 -0.22481 0.603237 -0.765223 + -0.047726 2.34737 -3.09734 -0.000692336 0.730375 -0.683046 + 0.033806 2.75669 -2.8853 0.677335 0.354392 -0.644688 + 0.031505 2.50374 -2.99337 0.629258 0.354532 -0.691622 + 0.007879 2.52092 -3.00333 0.298718 0.397264 -0.867726 + -0.007848 2.40133 -3.07179 -0.324993 0.542027 -0.774975 + 0.060613 2.81939 -2.82549 0.635719 0.439739 -0.634422 + 0.1116 2.60339 -2.85257 0.551519 0.451666 -0.701302 + 0.057432 2.52427 -2.95573 0.592496 0.432196 -0.67982 + 0.03148 2.38415 -3.06184 0.224564 0.603292 -0.765251 + 0.007854 2.40133 -3.07179 0.324986 0.542032 -0.774974 + 0.164631 2.7747 -2.71669 0.800169 0.471334 -0.37091 + 0.138407 2.666 -2.79281 0.659627 0.374025 -0.651918 + 0.145455 2.47997 -2.93701 0.268966 0.662206 -0.699386 + 0.091287 2.40085 -3.04016 0.153104 0.703494 -0.694014 + 0.047727 2.34738 -3.09734 0.000404965 0.730374 -0.683048 + 0.138812 2.83607 -2.68899 0.74248 0.669341 -0.0265605 + 0.257731 2.58286 -2.30601 -0.0876816 0.863071 0.497414 + 0.230933 2.71078 -2.69637 0.569748 0.606277 -0.55481 + 0.166417 2.59446 -2.3183 0.288668 0.797265 0.530132 + 0.095427 2.10859 -1.57575 0.527492 0.690172 0.495393 + 0.182065 2.14381 -1.64916 0.0843685 0.821569 0.563832 + 0.273379 2.13212 -1.6369 -0.261582 0.783301 0.563928 + 0.046205 2.12026 -1.46977 0.948433 0.25557 0.187506 + 0.064756 1.84625 -1.22456 0.855419 0.376344 0.355841 + 0.031447 2.23142 -1.4257 0.995229 0.0931339 0.0290761 + 0.036018 2.0989 -1.02776 0.988156 0.106063 -0.110896 + 0.049543 1.96837 -1.07328 0.995808 0.0878904 0.0253151 + 0.064756 1.84625 -1.22456 0.995484 0.091141 0.0265352 + 0.012182 2.62392 -1.81333 0.99935 0.03588 -0.00343977 + 0.030452 2.20762 -1.25668 0.99872 0.050545 -0.00164767 + 0.036617 2.12995 -1.02614 0.999934 -0.0106089 -0.0044382 + 0.00729 2.80633 -1.93447 0.999369 0.0338723 0.0106468 + -0.350353 2.16381 -3.16919 0.0529504 0.631009 -0.773966 + 0.03663 2.30385 -0.897355 0.999827 0.0135726 -0.0127152 + 0.036617 2.19646 -0.99414 0.999907 0.00717034 -0.0116362 + 0.03662 2.23423 -0.964364 0.999869 0.0120505 -0.0108013 + 0.026886 2.45107 -1.11594 0.999407 0.0327774 -0.0105639 + 0.030452 2.27413 -1.22468 0.999662 0.0113855 -0.02336 + 0.025561 2.45654 -1.34582 0.999656 0.0133546 -0.0225628 + 0.025564 2.49432 -1.31605 0.999591 0.0268187 -0.00991077 + 0.008613 2.95866 -1.66912 0.653216 0.699 0.291048 + 0.008613 2.52374 -1.02842 0.354026 0.619904 0.700275 + 0.00729 2.80633 -1.93447 0.999643 0.00881096 -0.0252111 + 0.00729 2.80633 -1.93447 0.999638 0.0166024 -0.0211621 + -0.318018 2.1931 -3.18552 -0.64503 0.530517 -0.54999 + -0.248174 2.23837 -3.20173 -0.409537 0.584682 -0.700304 + -0.191271 2.24886 -3.2109 -0.0693939 0.625955 -0.776766 + -0.129043 2.23586 -3.21559 -0.0403564 0.638843 -0.768278 + -0.116604 2.30914 -3.15531 0.0698724 0.722511 -0.68782 + -0.073042 2.25566 -3.21249 0.0214699 0.603984 -0.796707 + -0.0241 2.22116 -3.23232 0.223686 0.468088 -0.854903 + -0.032099 2.17756 -3.24701 -0.300288 -0.158146 -0.940647 + -0.081041 2.21207 -3.22718 -0.450354 -0.271353 -0.850617 + -0.129043 2.23586 -3.21559 -0.0643849 0.329374 -0.942002 + -0.007848 2.25785 -3.19687 -0.0128833 0.626788 -0.779083 + 0.009784 2.14998 -3.24683 0.286438 -0.361634 -0.887229 + -0.009793 2.14998 -3.24684 -0.283293 -0.388088 -0.877002 + -0.057733 2.16318 -3.18711 -0.683371 -0.50201 -0.530085 + -0.088709 2.19606 -3.17486 -0.599271 -0.631342 -0.492222 + 0.007854 2.25785 -3.19687 0.0135554 0.620051 -0.784445 + 0.024101 2.22116 -3.23232 -0.321714 0.432609 -0.842229 + 0.032099 2.17755 -3.247 0.285428 -0.160409 -0.944881 + 0.035418 2.1356 -3.18694 0.682134 -0.458799 -0.569383 + 0.009784 2.10533 -3.19671 0.312958 -0.725233 -0.613266 + -0.009793 2.10534 -3.19672 -0.312869 -0.724859 -0.613752 + 0.073043 2.25567 -3.2125 -0.0214286 0.603882 -0.796786 + 0.081041 2.21207 -3.22718 0.461091 -0.235483 -0.855537 + 0.057733 2.16318 -3.1871 0.674272 -0.535415 -0.508613 + 0.083967 2.13643 -3.14198 0.599704 -0.300238 -0.741763 + 0.06521 2.11575 -3.14935 0.594944 -0.265207 -0.758753 + 0.116604 2.30914 -3.15531 -0.0651908 0.729148 -0.681244 + 0.129042 2.23586 -3.21559 0.0403984 0.638798 -0.768313 + 0.19127 2.24886 -3.2109 0.0694461 0.62592 -0.776789 + 0.178832 2.32205 -3.15067 0.0561378 0.742644 -0.667329 + 0.234475 2.30039 -3.15796 0.372622 0.690143 -0.620367 + 0.248177 2.23837 -3.20173 0.409587 0.58472 -0.700244 + 0.201098 2.45831 -2.94429 0.366757 0.729216 -0.577696 + 0.304318 2.25512 -3.14175 0.593548 0.591756 -0.545459 + 0.31802 2.1931 -3.18552 0.645089 0.530539 -0.549899 + 0.230391 2.49807 -2.86374 0.494556 0.656466 -0.56962 + 0.333611 2.29487 -3.0612 0.368457 0.72947 -0.576292 + 0.350348 2.16381 -3.16919 0.704639 0.505005 -0.498452 + 0.204709 2.60208 -2.77249 0.525397 0.541079 -0.656651 + 0.351529 2.45968 -2.83546 0.313768 0.705906 -0.635017 + 0.406727 2.39811 -2.88941 0.342517 0.774218 -0.53223 + 0.388809 2.23339 -3.1151 0.0915615 0.6895 -0.718475 + 0.350348 2.16381 -3.16919 -0.088849 0.641514 -0.761949 + 0.393486 2.18026 -3.16149 -0.112469 0.647904 -0.753373 + 0.325847 2.56369 -2.74422 0.259282 0.594632 -0.761043 + 0.446128 2.39177 -2.86763 0.414807 0.721467 -0.554455 + 0.451255 2.25163 -3.07989 0.33271 0.695687 -0.636651 + 0.455932 2.1985 -3.12628 0.402806 0.621866 -0.671588 + 0.393486 2.18026 -3.16149 0.218372 0.652678 -0.725483 + 0.270244 2.74992 -2.66017 0.281983 0.456419 -0.8439 + 0.365158 2.60283 -2.70801 0.350234 0.5386 -0.76632 + 0.36195 2.7581 -2.62793 0.452291 0.416145 -0.788833 + 0.409998 2.77346 -2.58234 0.74047 0.341373 -0.578938 + 0.413206 2.61819 -2.66241 0.497038 0.532655 -0.685005 + 0.462462 2.81189 -2.4775 0.568235 0.516443 -0.640621 + 0.499068 2.81097 -2.45511 0.217087 0.587319 -0.779698 + 0.449813 2.61727 -2.64002 0.329823 0.609345 -0.721052 + 0.417464 2.83978 -2.5114 -0.365156 0.765216 -0.530194 + 0.469928 2.87812 -2.40661 -0.144009 0.810101 -0.568329 + 0.531689 2.93747 -2.3582 -0.169709 0.517115 -0.838923 + 0.556401 2.77007 -2.49266 0.129042 0.635644 -0.76112 + 0.58196 2.70165 -2.54037 0.34765 0.562426 -0.750211 + 0.475371 2.54895 -2.68768 0.382261 0.612566 -0.691837 + 0.443244 2.88386 -2.37756 -0.830348 0.526504 -0.182523 + 0.464522 2.95676 -2.31302 -0.897812 0.3331 -0.288058 + 0.491206 2.9511 -2.34202 -0.374928 0.545713 -0.749418 + 0.549455 3.05667 -2.31108 0.169685 0.422691 -0.890247 + 0.589022 2.89656 -2.39575 0.202176 0.561392 -0.802473 + 0.40654 2.64024 -2.2384 -0.883762 0.41017 0.225221 + 0.43232 2.68433 -2.10455 -0.974885 0.184017 0.125449 + 0.456831 2.73908 -1.99399 -0.986289 0.134004 0.096312 + 0.478009 3.06797 -2.26425 -0.924978 0.172248 -0.338744 + 0.508972 3.07022 -2.29494 -0.467015 0.317391 -0.825324 + 0.409998 2.77346 -2.58234 -0.765625 0.602418 0.225635 + 0.36195 2.7581 -2.62793 -0.359337 0.854849 0.374314 + 0.349436 2.59104 -2.27377 -0.505605 0.758477 0.411187 + 0.406675 2.21423 -1.56392 -0.798571 0.482637 0.359648 + 0.442784 2.26449 -1.53198 -0.932561 0.282969 0.224186 + 0.467295 2.31933 -1.42137 -0.985252 0.122309 0.119664 + 0.470319 2.85022 -1.94529 -0.996754 0.0662457 0.0457528 + 0.349571 2.16502 -1.59929 -0.634105 0.617943 0.46482 + 0.383337 1.9192 -1.26572 -0.672311 -0.00124287 0.740268 + 0.422755 1.95308 -1.2196 -0.704806 -0.0179974 0.709172 + 0.458864 2.00335 -1.18766 -0.964596 0.108898 0.240199 + 0.270244 2.74992 -2.66017 -0.578955 0.745135 0.331035 + 0.230933 2.71078 -2.69637 -0.78703 0.568219 0.24023 + 0.129042 2.23586 -3.21559 0.0644217 0.328979 -0.942137 + 0.307145 1.88639 -1.30329 -0.542571 0.649074 0.533217 + 0.480623 2.19749 -3.09233 0.362943 0.566643 -0.739722 + 0.490656 2.24529 -3.05811 0.520403 0.650578 -0.553108 + 0.509415 2.1894 -3.09931 0.455896 0.622136 -0.636479 + 0.565038 2.15256 -3.06872 0.803158 0.503868 -0.317891 + 0.546279 2.20846 -3.02752 0.677107 0.566185 -0.470064 + 0.576688 2.13834 -3.04387 -0.0601419 -0.217417 -0.974224 + 0.473219 2.43685 -2.79011 0.507879 0.605489 -0.612733 + 0.57337 2.25345 -2.95005 0.345375 0.698932 -0.626266 + 0.599183 2.42489 -2.7486 0.286103 0.68804 -0.666892 + 0.65657 2.36347 -2.79322 0.437725 0.675891 -0.592932 + 0.630757 2.19211 -2.99461 0.225267 0.600956 -0.766881 + 0.601336 2.53699 -2.64617 0.393818 0.578579 -0.714251 + 0.677919 2.54619 -2.58509 0.592926 0.503555 -0.628388 + 0.700677 2.34287 -2.76293 0.705752 0.55509 -0.440216 + 0.702641 2.19183 -2.96792 0.457771 0.586314 -0.668342 + 0.658544 2.71084 -2.47928 0.55527 0.483449 -0.676722 + 0.733518 2.69688 -2.4195 0.668498 0.43335 -0.604416 + 0.751342 2.50776 -2.52614 0.69828 0.443283 -0.562054 + 0.783212 2.34884 -2.62608 0.718171 0.489483 -0.494607 + 0.709789 2.38727 -2.68504 0.779784 0.45942 -0.425288 + 0.636617 2.85949 -2.39415 0.507461 0.494197 -0.70587 + 0.711591 2.84553 -2.33437 0.630863 0.447285 -0.633994 + 0.802339 2.68845 -2.3385 0.726678 0.391408 -0.56457 + 0.820163 2.49925 -2.44519 0.789892 0.356433 -0.499026 + 0.638357 3.03011 -2.26808 0.541585 0.45227 -0.708617 + 0.697201 3.05442 -2.19217 0.576616 0.386934 -0.71958 + 0.770435 2.86984 -2.25847 0.680048 0.405366 -0.610911 + 0.894426 2.68315 -2.21772 0.770299 0.277584 -0.574097 + 0.590762 3.06718 -2.26968 0.476981 0.368642 -0.797867 + 0.588448 3.23589 -2.21229 0.669453 0.211068 -0.712238 + 0.634906 3.22009 -2.17392 0.615188 0.257919 -0.744998 + 0.776695 3.07793 -2.1311 0.493319 0.256638 -0.831128 + 0.862523 2.86462 -2.13763 0.583459 0.34318 -0.736073 + 0.547142 3.22538 -2.25369 0.453372 0.180983 -0.872753 + 0.542813 3.40623 -2.23413 0.578812 0.159623 -0.799686 + 0.57015 3.42786 -2.18299 0.757566 0.203239 -0.620312 + 0.616608 3.41206 -2.14463 0.663809 0.235384 -0.709895 + 0.7144 3.24369 -2.1128 0.581099 0.269512 -0.767911 + 0.513561 3.21526 -2.26297 -0.269929 0.156558 -0.950067 + 0.509232 3.39612 -2.24342 -0.170948 0.0590479 -0.983509 + 0.510975 3.56567 -2.21989 0.668912 0.223092 -0.709075 + 0.538313 3.58721 -2.1688 0.794228 0.304578 -0.52577 + 0.619672 3.48872 -2.11141 0.750214 0.310856 -0.583565 + 0.482598 3.21302 -2.23229 -0.92284 0.0444947 -0.382604 + 0.47536 3.38339 -2.21817 -0.871412 -0.068937 -0.485684 + 0.448788 3.53384 -2.21555 -0.774776 -0.247451 -0.581799 + 0.48266 3.54656 -2.24079 0.00278559 0.0256981 -0.999666 + 0.463356 3.69601 -2.21324 0.670272 0.279488 -0.687475 + 0.476834 2.9751 -1.88358 -0.99997 -0.00143462 0.00754503 + 0.469596 3.14547 -1.86948 -0.994934 -0.0858837 -0.0522469 + 0.451787 3.26083 -1.83669 -0.952288 -0.261039 -0.158135 + 0.399831 3.66393 -2.24569 -0.875164 -0.403234 -0.267377 + 0.49373 2.54348 -1.26601 -0.999343 0.00816976 0.0353259 + 0.494948 2.63292 -1.14452 -0.996782 -0.076722 -0.0232157 + 0.477139 2.7482 -1.11179 -0.987412 -0.143962 -0.0655108 + 0.465519 2.78306 -1.02856 -0.96844 -0.225712 -0.105725 + 0.40283 3.39093 -1.86683 -0.896832 -0.3773 -0.230949 + 0.487215 2.41869 -1.32766 -0.995291 0.0660846 0.0709138 + 0.490541 2.17124 -1.04245 -0.978541 0.0811493 0.189399 + 0.505886 2.17583 -0.98122 -0.992248 0.0075929 0.124039 + 0.506727 2.26545 -0.910037 -0.999323 -0.0209609 0.0302518 + 0.507945 2.3548 -0.788592 -0.998115 -0.0605284 0.010089 + 0.470621 2.07197 -1.13612 -0.988659 0.0860481 0.123083 + 0.481612 2.08431 -1.0735 -0.975834 0.0184801 0.217731 + 0.496957 2.08883 -1.01232 -0.958089 -0.0243643 0.285432 + 0.469177 2.00413 -1.10962 -0.97259 0.00594725 0.232449 + 0.479563 1.93218 -1.0826 -0.949778 -0.124338 0.28716 + 0.491999 2.01237 -1.04649 -0.947713 -0.046703 0.315689 + 0.520036 2.00887 -0.955024 -0.976567 -0.0859685 0.197299 + 0.45742 1.9356 -1.16112 -0.980677 -0.160428 0.111959 + 0.482339 1.87208 -1.1427 -0.947319 -0.302591 0.105005 + 0.503297 1.87252 -1.05166 -0.941491 -0.186516 0.280725 + 0.515077 1.93232 -0.989242 -0.958975 -0.109645 0.261429 + 0.475913 1.89309 -1.2211 -0.806349 -0.425524 0.410767 + 0.500832 1.82957 -1.20268 -0.941159 -0.328798 0.078175 + 0.524033 1.76402 -1.18974 -0.941246 -0.334725 0.0448846 + 0.506073 1.81232 -1.1118 -0.957115 -0.276476 0.0865558 + 0.436496 1.8593 -1.26718 -0.466891 -0.530503 0.707517 + 0.490999 1.81553 -1.26956 -0.75349 -0.555674 0.351396 + 0.514199 1.75007 -1.25657 -0.875709 -0.482828 -0.00331005 + 0.551181 1.69709 -1.24422 -0.903034 -0.323384 -0.282757 + 0.54119 1.70115 -1.16484 -0.985668 -0.0840994 -0.14624 + 0.373475 1.84698 -1.32303 -0.460123 -0.887518 -0.0244592 + 0.427977 1.80321 -1.32542 -0.38086 -0.714159 0.587301 + 0.504467 1.79287 -1.32431 -0.373739 -0.60172 -0.70587 + 0.541449 1.73998 -1.3119 -0.352566 -0.515199 -0.781196 + 0.307145 1.88639 -1.30329 -0.126312 -0.605969 0.785396 + -0.7043 1.56683 -1.09039 -0.0579134 -0.910528 -0.40937 + -0.809256 1.55981 -1.16444 0.621692 -0.782816 0.0264271 + -0.770083 1.58651 -1.24989 0.822565 -0.56759 -0.0350532 + -0.771717 1.58314 -1.26884 0.902702 -0.430264 -0.00125148 + -0.792052 1.49776 -1.24696 0.795663 -0.604491 0.0388702 + -0.758379 1.54753 -1.08676 0.319953 -0.8652 -0.386082 + -0.85984 1.52061 -1.14415 0.578219 -0.689216 0.436628 + -0.790419 1.50113 -1.22799 0.764077 -0.599054 0.239417 + -0.828509 1.49337 -1.21855 -0.171815 0.0361979 -0.984464 + -0.664227 1.55392 -1.05243 0.250962 -0.804405 -0.538471 + -0.841003 1.46202 -1.20765 0.108578 -0.364707 -0.92477 + -0.874387 1.49643 -1.23266 -0.00756757 0.0824023 -0.99657 + -0.917635 1.56429 -1.1558 -0.00963629 0.191667 -0.981413 + -0.825982 1.56239 -1.1863 -0.436581 -0.0238436 -0.899349 + -0.789525 1.56678 -1.21471 -0.764503 0.151685 -0.626519 + -0.792052 1.49776 -1.24696 -0.748 0.303248 -0.590369 + -0.771717 1.58314 -1.26884 -0.889854 0.42572 -0.164081 + -0.963513 1.56736 -1.16992 0.617042 0.228292 -0.753089 + -0.937006 1.58934 -1.16439 -0.0124739 -0.64044 -0.767907 + -0.845353 1.58744 -1.19488 -0.188978 -0.851268 -0.489521 + -0.759733 1.60831 -1.24384 -0.872302 0.409161 -0.267726 + -0.741925 1.62467 -1.29797 -0.865477 0.481194 -0.139294 + -0.699814 1.69538 -1.32206 -0.871046 0.469408 -0.144688 + -0.955511 1.48158 -1.19533 -0.387509 -0.241353 -0.889711 + -0.841003 1.46202 -1.20765 -0.193037 -0.691838 -0.695771 + -0.922127 1.44708 -1.17038 -0.19297 -0.690765 -0.696855 + -0.841003 1.46202 -1.20765 0.592124 -0.497074 0.634277 + -0.921706 1.47324 -1.1323 0.172693 -0.711149 0.681502 + -0.795782 1.58707 -1.10525 0.0980888 -0.358145 0.928499 + -0.857648 1.5397 -1.0934 0.332808 -0.489426 0.80604 + -0.976804 1.48683 -1.12362 -0.443535 -0.546361 0.710469 + -0.922127 1.44708 -1.17038 0.177745 -0.812123 0.555755 + -0.841003 1.46202 -1.20765 0.380096 -0.764325 0.520896 + -0.758379 1.54753 -1.08676 -0.38932 0.061382 0.919055 + -0.701631 1.59346 -1.07091 -0.537525 0.014305 0.843127 + -0.734637 1.66043 -1.09291 -0.280765 -0.308062 0.908993 + -0.801723 1.66092 -1.09515 0.066854 -0.221603 0.972842 + -0.924734 1.54009 -1.09569 -0.129045 -0.237832 0.962696 + -0.664227 1.55392 -1.05243 -0.755839 -0.041935 0.653413 + -0.643397 1.56889 -0.998153 -0.951572 -0.112991 0.285908 + -0.658945 1.63178 -1.03008 -0.874385 -0.0773671 0.479026 + -0.691951 1.69874 -1.05208 -0.677794 -0.20054 0.707375 + -0.727078 1.74912 -1.07274 -0.355439 -0.221842 0.907992 + -0.872106 1.65856 -1.07748 0.0821934 -0.374116 0.923732 + -0.629692 1.50131 -0.961109 -0.864165 -0.378523 0.331571 + -0.643726 1.61889 -0.917968 -0.983074 -0.146316 0.110257 + -0.659274 1.68178 -0.9499 -0.987941 -0.0967153 0.120911 + -0.666266 1.73981 -0.991201 -0.909565 -0.25308 0.32961 + -0.701392 1.79019 -1.01186 -0.871963 -0.165792 0.460644 + -0.634135 1.5549 -0.887535 -0.909793 -0.351305 0.221046 + -0.630176 1.5876 -0.82637 -0.539263 -0.579913 0.610651 + -0.639767 1.6515 -0.856854 -0.97921 -0.0845585 0.184384 + -0.7043 1.56683 -1.09039 -0.60997 0.283033 0.740155 + -0.612248 1.60182 -0.819792 0.555118 -0.578507 0.59764 + -0.619647 1.6386 -0.776098 -0.470889 -0.542769 0.695461 + -0.626818 1.70224 -0.78674 -0.976858 -0.102375 0.187796 + -0.646938 1.71515 -0.867495 -0.977445 -0.0104043 0.210932 + -0.653929 1.77309 -0.908846 -0.976016 -0.0883579 0.19896 + -0.601719 1.6529 -0.769478 0.65135 -0.467801 0.597415 + -0.590095 1.7375 -0.728603 0.841118 -0.367801 0.396539 + -0.616529 1.72023 -0.715886 0.612314 -0.474959 0.632048 + -0.5889 1.81998 -0.669658 0.627277 -0.499679 0.597365 + -0.641223 1.8031 -0.63302 0.587385 -0.566776 0.577706 + -0.572443 1.81332 -0.755521 0.983876 -0.17622 0.0305689 + -0.562466 1.83725 -0.682375 0.896986 -0.323236 0.301553 + -0.552602 1.93633 -0.620381 0.962293 -0.195013 0.189635 + -0.584926 1.90744 -0.569742 0.73605 -0.465421 0.491542 + -0.637249 1.89055 -0.533104 0.00908 -0.757238 0.653076 + -0.557886 1.8775 -0.816694 0.982529 -0.143459 0.118557 + -0.55954 1.90423 -0.743586 0.992212 -0.122825 0.0206999 + -0.549676 2.00331 -0.6816 0.993608 -0.103677 0.0446549 + -0.559972 2.04854 -0.520547 0.940104 -0.248689 0.233148 + -0.592296 2.01965 -0.469899 0.62371 -0.553381 0.552046 + -0.544982 1.96833 -0.804808 0.982153 -0.148528 0.115387 + -0.537917 2.06141 -0.743632 0.983455 -0.155479 0.0929626 + -0.5417 2.10455 -0.577354 0.980999 -0.170093 0.0933201 + -0.540315 2.19079 -0.463918 0.973147 -0.202817 0.108859 + -0.558588 2.13478 -0.407112 0.927606 -0.318897 0.194556 + -0.519544 2.12001 -0.811529 0.989764 -0.116048 0.0830708 + -0.529941 2.16265 -0.639385 0.990571 -0.126732 0.0520317 + -0.522905 2.24451 -0.524367 0.986944 -0.150328 0.0578225 + -0.536521 2.25412 -0.344224 0.959709 -0.274802 0.058674 + -0.557372 2.19883 -0.281854 0.899123 -0.402624 0.171671 + -0.522444 2.21458 -0.698937 0.994634 -0.0896011 0.0517238 + -0.515408 2.29635 -0.583968 0.986639 -0.162866 0.00419181 + -0.519111 2.30785 -0.404672 0.957907 -0.282892 0.0488582 + -0.497717 2.37589 -0.348125 0.914707 -0.39995 -0.057882 + -0.516823 2.31852 -0.290163 0.905928 -0.409674 -0.107056 + -0.513535 2.28095 -0.751484 0.996512 -0.0753354 0.035887 + -0.507187 2.34934 -0.641333 0.991345 -0.128146 -0.0285081 + -0.49643 2.3586 -0.468174 0.954609 -0.297862 -0.000882352 + -0.475036 2.42664 -0.411626 0.941501 -0.331841 -0.058804 + -0.507945 2.35488 -0.788542 0.997951 -0.0633102 0.00921731 + -0.501598 2.42318 -0.678441 0.991835 -0.117823 -0.0487934 + -0.488209 2.41158 -0.525539 0.976829 -0.193367 -0.09173 + -0.466466 2.48194 -0.471415 0.950986 -0.268709 -0.153042 + -0.494948 2.63292 -1.14452 0.996798 -0.076866 -0.0220273 + -0.477139 2.7482 -1.11179 0.985375 -0.15794 -0.063955 + -0.489977 2.45804 -0.595212 0.98076 -0.163975 -0.105934 + -0.468234 2.52849 -0.541039 0.957523 -0.235423 -0.166511 + -0.469596 3.14547 -1.86948 0.994976 -0.0851184 -0.0527081 + -0.451787 3.26083 -1.83669 0.948527 -0.265786 -0.172206 + -0.40283 3.39093 -1.86683 0.897252 -0.375317 -0.232542 + -0.465519 2.78306 -1.02856 0.968669 -0.226854 -0.10108 + -0.452473 2.74238 -0.853301 0.958597 -0.254835 -0.127084 + -0.482601 3.21302 -2.23229 0.920849 0.0522264 -0.386405 + -0.475363 3.3834 -2.21818 0.867229 -0.0766204 -0.491978 + -0.448792 3.53384 -2.21555 0.778464 -0.294577 -0.554272 + -0.513564 3.21526 -2.26297 0.274215 0.163424 -0.947681 + -0.509235 3.39612 -2.24342 0.174029 0.0527565 -0.983326 + -0.482664 3.54656 -2.24079 -0.0558913 -0.0151413 -0.998322 + -0.399835 3.66393 -2.24569 0.433788 -0.242433 -0.867787 + -0.54714 3.22538 -2.25369 -0.459696 0.194748 -0.86646 + -0.542811 3.40624 -2.23414 -0.600675 0.135025 -0.788009 + -0.510975 3.56567 -2.21989 -0.669435 0.227458 -0.707191 + -0.435045 3.67681 -2.2342 -0.398752 0.149052 -0.904865 + -0.393058 3.77165 -2.24425 -0.449267 0.107329 -0.886927 + -0.357848 3.75877 -2.25574 -0.299592 0.0315814 -0.953544 + -0.549455 3.05667 -2.31108 -0.263344 0.31596 -0.911493 + -0.588446 3.23589 -2.21229 -0.654255 0.229934 -0.720472 + -0.570148 3.42786 -2.18299 -0.75517 0.192317 -0.626684 + -0.538313 3.58721 -2.1688 -0.790129 0.308344 -0.529736 + -0.590762 3.06718 -2.26968 -0.460774 0.344314 -0.818007 + -0.638357 3.03011 -2.26808 -0.541586 0.452267 -0.708617 + -0.6349 3.2201 -2.17393 -0.615206 0.257916 -0.744984 + -0.616602 3.41206 -2.14463 -0.663813 0.23537 -0.709897 + -0.619672 3.48872 -2.11141 -0.750212 0.310852 -0.58357 + -0.636617 2.85949 -2.39415 -0.507461 0.494196 -0.705871 + -0.711591 2.84553 -2.33437 -0.630863 0.447285 -0.633993 + -0.770435 2.86984 -2.25847 -0.686712 0.432042 -0.584608 + -0.697201 3.05442 -2.19217 -0.618691 0.351899 -0.702417 + -0.714394 3.24369 -2.1128 -0.581069 0.269497 -0.767939 + -0.581956 2.70165 -2.54037 -0.347692 0.562429 -0.750189 + -0.658544 2.71084 -2.47928 -0.564727 0.471622 -0.677241 + -0.733518 2.69688 -2.4195 -0.664314 0.42752 -0.613118 + -0.802339 2.68845 -2.3385 -0.736232 0.376285 -0.56247 + -0.862522 2.86462 -2.13764 -0.56203 0.360548 -0.744398 + -0.601332 2.537 -2.64618 -0.39382 0.578568 -0.714259 + -0.67792 2.54619 -2.58509 -0.598892 0.509756 -0.617638 + -0.751343 2.50776 -2.52614 -0.692542 0.452599 -0.56173 + -0.820163 2.49925 -2.44519 -0.799046 0.36698 -0.47629 + -0.473219 2.43685 -2.79011 -0.507862 0.605494 -0.612743 + -0.599183 2.42489 -2.7486 -0.286101 0.688043 -0.666891 + -0.65657 2.36347 -2.79322 -0.437782 0.67589 -0.59289 + -0.700677 2.34287 -2.76293 -0.705758 0.555088 -0.440207 + -0.709787 2.38727 -2.68504 -0.7798 0.459401 -0.42528 + -0.57337 2.25345 -2.95005 -0.345234 0.69896 -0.626314 + -0.630757 2.19211 -2.99461 -0.225273 0.600944 -0.766889 + -0.702641 2.19183 -2.96792 -0.457773 0.586308 -0.668346 + -0.746748 2.17122 -2.93763 -0.726054 0.505952 -0.465681 + -0.546279 2.20846 -3.02752 -0.677085 0.566198 -0.47008 + -0.576693 2.13834 -3.04387 0.0911394 -0.189261 -0.977688 + -0.640043 2.12566 -3.02751 -0.475565 -0.117881 -0.871746 + -0.711928 2.12546 -3.00077 -0.456863 0.445075 -0.770185 + -0.745388 2.12484 -2.9707 -0.652627 0.418267 -0.631768 + -0.490656 2.24529 -3.05811 -0.520412 0.65057 -0.553109 + -0.50941 2.1894 -3.09931 -0.455886 0.622112 -0.63651 + -0.565033 2.15256 -3.06872 -0.803082 0.503888 -0.318051 + -0.451256 2.25163 -3.07989 -0.332721 0.695688 -0.636643 + -0.480623 2.19749 -3.09233 -0.36293 0.566636 -0.739733 + -0.393484 2.18027 -3.1615 0.309983 0.609779 -0.729438 + -0.45593 2.1985 -3.12628 -0.402882 0.621838 -0.671568 + -0.372272 2.1636 -3.15483 -0.515333 -0.430193 -0.741192 + -0.7722 2.09951 -2.95763 -0.794376 0.407612 -0.450356 + -0.807259 2.10921 -2.87383 -0.829615 0.434968 -0.35006 + -0.816369 2.15362 -2.79594 -0.75658 0.503765 -0.416902 + -0.78321 2.34884 -2.62608 -0.718184 0.489468 -0.494603 + -0.832711 2.03751 -2.89384 -0.796911 0.429894 -0.424411 + -0.851231 2.13087 -2.76174 -0.766625 0.493754 -0.410479 + -0.818072 2.32609 -2.59188 -0.808241 0.418749 -0.413999 + -0.879773 2.05483 -2.80203 -0.745883 0.479179 -0.462651 + -0.849238 2.29637 -2.54819 -0.807388 0.432161 -0.401698 + -0.85133 2.46952 -2.4015 -0.855075 0.291833 -0.42858 + -0.894426 2.68315 -2.21772 -0.768031 0.274872 -0.578423 + -0.891264 1.98563 -2.84077 -0.593613 -0.298406 -0.74738 + -0.932252 2.02172 -2.75308 -0.791953 0.450271 -0.412391 + -0.877781 2.22032 -2.58847 -0.801371 0.474694 -0.363964 + -0.891187 2.40223 -2.36215 -0.887686 0.261363 -0.379083 + -0.934283 2.61586 -2.17837 -0.808242 0.18417 -0.559309 + -0.975074 2.89702 -2.06695 -0.80171 0.0435097 -0.596128 + -0.943743 1.95252 -2.79183 -0.829521 0.35162 -0.433887 + -0.957339 2.00159 -2.71642 -0.883227 0.374803 -0.281839 + -0.902867 2.20019 -2.5518 -0.867896 0.409687 -0.280915 + -0.902565 2.25588 -2.45786 -0.942132 0.269094 -0.199938 + -0.944732 2.3707 -2.24494 -0.850126 0.222032 -0.47748 + -0.961467 1.93615 -2.75448 -0.85944 0.29645 -0.41651 + -0.976679 1.92511 -2.73795 -0.887227 0.318337 -0.333901 + -0.980083 1.97465 -2.65517 -0.926228 0.326448 -0.188502 + -0.97978 2.03034 -2.56122 -0.892225 0.38394 -0.237748 + -0.95611 2.22434 -2.34064 -0.886865 0.336692 -0.3164 + -1.02199 2.18508 -2.21343 -0.778211 0.262492 -0.570513 + -0.996492 2.4102 -2.17036 -0.660322 0.207774 -0.721668 + -0.999423 1.89818 -2.6767 -0.564249 -0.59868 -0.568512 + -1.01974 1.93901 -2.55022 -0.927356 0.298486 -0.225649 + -0.996071 2.13301 -2.32965 -0.909622 0.327295 -0.255863 + -1.03285 1.85781 -2.57419 -0.797408 -0.476615 -0.370107 + -1.06243 1.89044 -2.4139 -0.936067 0.272282 -0.222802 + -1.08587 1.87405 -2.34371 -0.929636 0.244839 -0.275375 + -1.01952 2.11653 -2.25951 -0.885086 0.279309 -0.372304 + -0.999951 1.87606 -2.63399 0.128967 -0.841571 -0.524525 + -0.988363 1.85496 -2.62205 -0.546797 -0.72186 -0.424183 + -0.992294 1.85263 -2.60982 -0.460463 -0.839095 -0.289642 + -1.01338 1.85759 -2.5856 -0.163371 -0.986546 -0.00610426 + -1.04854 1.80823 -2.42551 -0.0165023 -0.946948 -0.320961 + -1.07554 1.80925 -2.43787 -0.684384 -0.584851 -0.435394 + -0.986254 1.88944 -2.63897 0.382906 -0.823668 -0.418275 + -0.986783 1.86741 -2.59621 0.655489 -0.487962 -0.576392 + -0.972097 1.83359 -2.56863 0.758818 -0.0740781 -0.647076 + -0.988363 1.85496 -2.62205 0.887672 0.45272 -0.0841598 + -0.960509 1.81249 -2.55669 0.775684 0.275018 -0.568049 + -0.940727 1.79069 -2.54593 0.6882 0.706349 0.165686 + -0.977312 1.90902 -2.67488 0.326318 -0.881797 -0.340516 + -0.942907 1.89832 -2.63916 0.0931135 -0.887607 -0.451091 + -0.95185 1.87874 -2.60324 0.204543 -0.79365 -0.572959 + -0.949697 1.86099 -2.5821 0.127297 -0.684584 -0.717733 + -0.935011 1.82717 -2.55452 0.156906 -0.518131 -0.840786 + -0.976679 1.92511 -2.73795 0.408287 -0.885504 -0.221777 + -0.961467 1.93615 -2.75448 0.285962 -0.921694 -0.262116 + -0.9621 1.92007 -2.69142 0.233567 -0.9203 -0.313836 + -0.932709 1.90732 -2.65595 0.0517874 -0.902264 -0.428063 + -0.854408 1.8762 -2.59584 0.0677582 -0.832606 -0.549705 + -0.852255 1.85836 -2.57475 0.0738102 -0.65499 -0.752024 + -0.941467 1.92742 -2.70595 0.119757 -0.936985 -0.328203 + -0.912075 1.91468 -2.67049 -0.113951 -0.929047 -0.351975 + -0.844209 1.88512 -2.61269 -0.0876091 -0.961355 -0.261001 + -0.731115 1.88176 -2.57266 0.240312 -0.969697 -0.0440154 + -0.840742 1.83956 -2.56178 0.175113 -0.652347 -0.737414 + -0.943743 1.95252 -2.79183 0.294881 -0.912308 -0.284147 + -0.923743 1.94387 -2.74325 0.0231523 -0.935339 -0.352995 + -0.892881 1.92997 -2.73397 -0.370541 -0.850887 -0.372411 + -0.881181 1.90619 -2.68198 -0.379758 -0.903856 -0.197049 + -0.813314 1.87664 -2.6242 -0.200225 -0.971413 0.127542 + -0.860402 1.97181 -2.83144 -0.281652 -0.817224 -0.50281 + -0.819887 1.8968 -2.75452 -0.33971 -0.8377 -0.427617 + -0.808187 1.87303 -2.70255 -0.247318 -0.952387 -0.178306 + -0.756234 1.86791 -2.70108 0.0602364 -0.982106 -0.178436 + -0.761362 1.87152 -2.62273 0.0199043 -0.991865 0.125726 + -0.839839 1.97294 -2.84319 0.439026 -0.435866 -0.78567 + -0.799324 1.89793 -2.76628 0.0703518 -0.696227 -0.714366 + -0.768363 1.89362 -2.75541 0.0197245 -0.740419 -0.671856 + -0.736661 1.88587 -2.74199 0.166587 -0.850358 -0.49914 + -0.67396 1.88607 -2.67533 0.224113 -0.970805 -0.0855009 + -0.846348 1.99907 -2.85285 0.424848 -0.589848 -0.68672 + -0.81119 1.93752 -2.78025 0.689812 -0.0718933 -0.72041 + -0.780228 1.9332 -2.76937 0.00172394 -0.355061 -0.934842 + -0.714993 1.95113 -2.79983 -0.0688085 -0.542818 -0.837027 + -0.683291 1.9433 -2.78645 0.134201 -0.766003 -0.628673 + -0.832711 2.03751 -2.89384 0.537891 -0.763711 -0.356958 + -0.825596 1.99728 -2.80676 0.601099 -0.451418 -0.659471 + -0.817699 1.96365 -2.78991 0.654127 -0.16328 -0.738551 + -0.787041 1.95828 -2.78001 -0.00779252 -0.408731 -0.912622 + -0.811959 2.03572 -2.84774 0.589355 -0.663873 -0.460362 + -0.794939 1.99191 -2.79686 0.0151458 -0.52397 -0.851602 + -0.721806 1.97612 -2.81051 -0.173775 -0.479595 -0.860111 + -0.63233 1.9467 -2.79915 -0.226831 -0.830723 -0.508376 + -0.646625 1.94192 -2.78008 -0.135315 -0.895651 -0.423674 + -0.7722 2.09951 -2.95763 0.719673 -0.694112 0.0166993 + -0.793107 2.08309 -2.88218 0.780176 -0.587641 -0.214486 + -0.771598 2.06407 -2.84745 0.0991126 -0.629943 -0.770291 + -0.79045 2.01671 -2.81301 0.17133 -0.576187 -0.799158 + -0.717317 2.00101 -2.82661 -0.193824 -0.528686 -0.826392 + -0.745388 2.12484 -2.9707 0.105438 -0.985176 -0.135318 + -0.766295 2.10833 -2.8953 0.322422 -0.881794 -0.344214 + -0.754926 2.08123 -2.86297 -0.088241 -0.669275 -0.737756 + -0.734795 2.11178 -2.90688 -0.18419 -0.897889 -0.399835 + -0.723426 2.08469 -2.87455 -0.317962 -0.661377 -0.679323 + -0.700645 2.01817 -2.84213 -0.322437 -0.570899 -0.755055 + -0.711928 2.12546 -3.00077 -0.0942479 -0.978302 -0.184505 + -0.701335 2.1124 -2.93695 -0.434316 -0.827924 -0.354839 + -0.70669 2.08199 -2.88367 -0.556543 -0.624325 -0.548159 + -0.683909 2.01546 -2.85125 -0.63762 -0.589122 -0.496363 + -0.679138 2.09519 -2.95214 -0.650221 -0.572981 -0.498904 + -0.684493 2.06486 -2.89881 -0.738842 -0.498467 -0.453479 + -0.671611 2.04896 -2.90707 -0.824363 -0.360687 -0.436269 + -0.671027 1.99965 -2.85946 -0.832657 -0.514013 -0.206091 + -0.619337 2.10537 -3.02358 -0.774776 -0.598747 -0.203037 + -0.658431 2.07491 -2.94821 -0.719512 -0.476982 -0.504768 + -0.656267 2.01889 -2.91698 -0.847577 -0.345666 -0.402651 + -0.645456 2.00311 -2.92446 -0.796217 -0.434369 -0.421144 + -0.660216 1.98387 -2.86694 -0.694732 -0.681264 -0.230709 + -0.610102 2.09214 -3.03065 -0.648038 -0.417286 -0.637118 + -0.643087 2.04483 -2.95812 -0.82228 -0.283918 -0.4932 + -0.633852 2.0316 -2.96519 -0.787272 -0.336108 -0.516947 + -0.632333 1.99251 -2.93589 -0.523645 -0.703772 -0.480105 + -0.598376 2.08982 -3.03804 -0.0216755 -0.397058 -0.917537 + -0.620729 2.02099 -2.97662 -0.599586 -0.548391 -0.582892 + -0.588531 2.10963 -3.04154 0.33991 -0.205779 -0.917669 + -0.588059 2.02391 -2.99407 0.0558765 -0.592923 -0.803318 + -0.609004 2.01859 -2.98406 -0.354576 -0.67891 -0.642928 + -0.582176 1.97927 -2.93717 -0.146671 -0.864848 -0.48013 + -0.568856 2.10302 -2.9977 0.676745 -0.220017 -0.702573 + -0.578214 2.04372 -2.99759 0.511444 -0.27269 -0.814902 + -0.534166 2.00115 -2.96645 0.120555 -0.661453 -0.740234 + -0.561231 1.9846 -2.94719 -0.0037534 -0.81851 -0.57448 + -0.557018 2.13173 -3.00002 0.53759 -0.49929 -0.679489 + -0.540525 2.08938 -2.98327 0.193884 -0.095052 -0.976409 + -0.549883 2.03016 -2.98311 0.22911 -0.262468 -0.937347 + -0.532865 2.15391 -3.00765 0.237224 -0.777528 -0.582387 + -0.505218 2.1392 -2.99357 -0.0178397 -0.464766 -0.885254 + -0.529371 2.1171 -2.98589 0.108102 -0.267392 -0.957505 + -0.476331 2.05192 -2.98459 0.113045 -0.24789 -0.96217 + -0.460613 2.02282 -2.96798 0.248829 -0.520817 -0.816599 + -0.565033 2.15256 -3.06872 0.484069 -0.846474 -0.221718 + -0.521205 2.16814 -3.0325 0.358025 -0.861725 -0.35951 + -0.492418 2.17623 -3.02551 0.15063 -0.831792 -0.534259 + -0.483079 2.14953 -3.00127 -0.129771 -0.496484 -0.858291 + -0.465177 2.07955 -2.98726 -0.0437703 -0.249576 -0.967365 + -0.50941 2.1894 -3.09931 0.368776 -0.902609 -0.222038 + -0.480623 2.19749 -3.09233 0.05889 -0.976603 -0.206831 + -0.449959 2.18494 -3.04079 -0.257076 -0.853096 -0.454026 + -0.440619 2.15824 -3.01654 -0.398102 -0.517548 -0.757403 + -0.443037 2.08988 -2.99495 -0.353468 -0.3979 -0.846603 + -0.406483 2.02619 -2.95862 -0.232996 -0.809607 -0.538749 + -0.428765 2.01675 -2.95248 0.138018 -0.68137 -0.718809 + -0.45593 2.1985 -3.12628 -0.241834 -0.966007 -0.0913623 + -0.425266 2.18595 -3.07474 -0.394178 -0.887344 -0.239257 + -0.404054 2.16929 -3.06809 -0.679295 -0.628527 -0.378831 + -0.415846 2.14963 -3.03183 -0.674938 -0.397921 -0.621384 + -0.418264 2.08128 -3.01025 -0.753756 -0.316226 -0.576067 + -0.393484 2.18027 -3.1615 -0.501108 -0.855941 -0.127496 + -0.371147 2.13183 -3.0994 -0.713108 -0.487069 -0.504223 + -0.38294 2.11217 -3.06315 -0.812176 -0.21162 -0.543679 + -0.370886 2.08425 -3.07699 -0.813072 0.0218246 -0.581754 + -0.406211 2.05336 -3.02409 -0.891624 -0.241537 -0.382971 + -0.350353 2.16381 -3.16919 -0.29822 -0.830397 -0.470644 + -0.349228 2.13195 -3.11381 -0.462097 -0.573419 -0.676503 + -0.35431 2.09602 -3.09818 -0.713984 -0.0871747 -0.694714 + -0.368641 2.03918 -3.08753 -0.684455 -0.346635 -0.641378 + -0.364508 2.01202 -3.06709 -0.474709 -0.715003 -0.513247 + -0.402078 2.0262 -3.00365 -0.84527 -0.509436 -0.161223 + -0.334436 2.13338 -3.1253 0.199361 -0.454001 -0.868411 + -0.339518 2.09737 -3.10972 -0.288629 -0.190774 -0.938242 + -0.352065 2.05095 -3.10872 -0.394263 -0.244131 -0.885978 + -0.323458 2.01354 -3.07911 0.0809718 -0.797337 -0.598077 + -0.35437 1.97828 -2.99445 -0.405852 -0.893079 -0.194152 + -0.310485 2.08449 -3.1044 0.277689 -0.115665 -0.953683 + -0.323032 2.03799 -3.10346 0.139075 -0.466517 -0.87351 + -0.238304 2.0325 -3.05156 0.339023 -0.780841 -0.524738 + -0.31332 1.9798 -3.00647 0.180299 -0.937267 -0.298366 + -0.302064 2.11371 -3.10301 0.450584 -0.0484366 -0.891419 + -0.237878 2.05695 -3.07591 0.529582 -0.39172 -0.752395 + -0.289754 2.15123 -3.09701 0.371972 -0.235149 -0.897965 + -0.229457 2.08617 -3.07451 0.104246 -0.0261088 -0.994209 + -0.208237 2.10715 -3.07546 0.0272764 -0.330273 -0.943491 + -0.322126 2.17091 -3.1193 0.589221 -0.493477 -0.639764 + -0.289791 2.2002 -3.13563 0.407427 -0.790579 -0.457153 + -0.268534 2.17222 -3.09796 0.235879 -0.484311 -0.842498 + -0.350353 2.16381 -3.16919 0.863495 -0.209925 -0.458593 + -1.10664 1.77992 -2.31808 -0.839459 -0.448712 -0.306541 + -1.11354 1.8732 -2.26963 -0.921075 0.202699 -0.332465 + -1.11601 1.94174 -2.22355 -0.733331 0.272861 -0.622714 + -1.08037 1.78631 -2.37834 -0.268936 -0.87116 -0.410797 + -1.06729 1.76693 -2.35678 -0.529537 -0.799574 -0.283322 + -1.07252 1.76395 -2.33541 -0.49166 -0.841967 -0.222176 + -1.0932 1.74848 -2.21302 -0.467606 -0.868302 -0.165517 + -1.12955 1.76009 -2.17713 -0.388941 -0.899444 -0.199311 + -1.13431 1.77915 -2.24394 -0.823167 -0.455097 -0.339533 + -1.05337 1.7853 -2.36599 0.113347 -0.884727 -0.452117 + -1.05223 1.76606 -2.33606 0.501433 -0.546948 -0.670382 + -1.06729 1.76693 -2.35678 0.812098 -0.0785088 -0.578215 + -1.03915 1.74659 -2.31455 0.693161 -0.0985847 -0.714009 + -1.00204 1.70979 -2.2786 -0.0834123 -0.861284 -0.50123 + -1.01319 1.78128 -2.35383 0.00959363 -0.905434 -0.424379 + -1.01205 1.76204 -2.32391 0.0818213 -0.780047 -0.620349 + -0.999293 1.74336 -2.30196 0.114434 -0.668815 -0.734568 + -0.962187 1.70664 -2.26596 0.125684 -0.873764 -0.46983 + -1.00727 1.7068 -2.25724 -0.314082 -0.929948 -0.191178 + -1.02907 1.808 -2.43692 -0.246026 -0.92968 -0.274166 + -1.0031 1.78788 -2.37926 -0.1156 -0.967138 -0.226452 + -0.919578 1.77053 -2.32961 0.0250614 -0.878133 -0.477759 + -0.906824 1.75185 -2.30766 0.150893 -0.811615 -0.564369 + -0.997619 1.80835 -2.48351 -0.424834 -0.870825 -0.247343 + -0.971655 1.78821 -2.42584 -0.241776 -0.964547 -0.105801 + -0.909494 1.77704 -2.35508 -0.0565466 -0.993731 -0.0964449 + -0.809792 1.77706 -2.32613 0.188447 -0.982079 0.00278942 + -0.863841 1.74856 -2.26716 0.367874 -0.886781 -0.279799 + -0.976528 1.80348 -2.50768 -0.503138 -0.838327 -0.209903 + -0.950965 1.78361 -2.44946 -0.350992 -0.93597 -0.0276399 + -0.888804 1.77243 -2.3787 -0.0913196 -0.992784 0.0777251 + -0.944658 1.78837 -2.53371 -0.350349 -0.905888 -0.237954 + -0.919094 1.7685 -2.47549 -0.180214 -0.977904 -0.105958 + -0.875386 1.76883 -2.46366 0.142442 -0.977915 -0.152948 + -0.845095 1.77276 -2.36687 0.0609837 -0.997089 0.0457605 + -0.940727 1.79069 -2.54593 -0.0728904 -0.727367 -0.682366 + -0.903717 1.78657 -2.5308 0.125959 -0.787047 -0.603897 + -0.864548 1.78519 -2.5062 0.291836 -0.861078 -0.416385 + -0.777425 1.78562 -2.40034 0.261389 -0.949915 -0.171279 + -0.743873 1.78945 -2.37079 0.203337 -0.961421 -0.185268 + -0.811544 1.77651 -2.33737 0.111896 -0.993688 -0.00792463 + -0.923498 1.80837 -2.54156 0.18622 -0.36191 -0.913424 + -0.801573 1.83818 -2.53719 0.379027 -0.799878 -0.465332 + -0.766587 1.80198 -2.44288 0.420044 -0.840084 -0.343253 + -0.731199 1.88017 -2.54571 0.395795 -0.903312 -0.165451 + -0.750759 1.86051 -2.52226 0.460266 -0.799169 -0.386632 + -0.715772 1.8243 -2.42795 0.417089 -0.773367 -0.477431 + -0.693494 1.82274 -2.41123 0.357652 -0.725317 -0.588219 + -0.710576 1.80419 -2.39672 0.346268 -0.851554 -0.393642 + -0.63728 1.90316 -2.52174 0.181397 -0.976218 -0.118719 + -0.64211 1.89408 -2.4698 0.165093 -0.924706 -0.343022 + -0.66167 1.87441 -2.44634 0.405501 -0.773259 -0.487483 + -0.639392 1.87276 -2.42967 0.272619 -0.792925 -0.54493 + -0.637196 1.90475 -2.54868 0.227812 -0.973699 -0.00349911 + -0.603434 1.90976 -2.54397 -0.748915 -0.614656 -0.247638 + -0.608264 1.9006 -2.4921 0.0412206 -0.974082 -0.222408 + -0.621012 1.88748 -2.46078 -0.0896543 -0.892265 -0.442522 + -0.642098 1.90017 -2.57856 0.254049 -0.963444 0.0850545 + -0.609115 1.90933 -2.58583 0.475288 -0.879233 0.0324001 + -0.604214 1.91391 -2.55595 -0.156328 -0.973167 -0.168841 + -0.592266 1.91999 -2.61288 -0.640771 -0.737514 -0.213273 + -0.593047 1.92413 -2.62486 -0.640765 -0.737519 -0.213273 + -0.733381 1.87888 -2.59848 0.193993 -0.977533 0.0824332 + -0.644363 1.8973 -2.60438 0.290735 -0.953812 0.0756082 + -0.594698 1.91353 -2.65769 0.610895 -0.78464 0.105579 + -0.571293 1.94331 -2.66948 0.796323 -0.587156 0.145317 + -0.645979 1.89343 -2.65109 0.285741 -0.957429 0.0410105 + -0.596314 1.90958 -2.70445 0.488558 -0.803174 0.340916 + -0.562054 1.91149 -2.78196 0.892178 -0.327389 0.311183 + -0.556875 1.94742 -2.7414 0.783711 -0.595774 0.175642 + -0.596777 1.8903 -2.71226 0.732716 -0.270747 0.624358 + -0.562516 1.89213 -2.78983 0.707667 0.552525 0.440367 + -0.540993 1.91304 -2.85124 0.948403 -0.138484 0.285227 + -1.15743 1.91745 -2.19529 -0.765219 0.152997 -0.625325 + -1.09573 2.14878 -2.15916 -0.644858 0.242609 -0.724775 + -1.10695 2.28195 -2.11301 -0.632824 0.155424 -0.758537 + -1.0332 2.31833 -2.16724 -0.609489 0.191343 -0.769358 + -1.17645 1.88416 -2.16522 -0.942099 -0.0382322 -0.333148 + -1.18765 2.08689 -2.10077 -0.750283 0.168071 -0.639396 + -1.13716 2.12449 -2.13089 -0.641379 0.256433 -0.723101 + -1.14179 2.21318 -2.0973 -0.651842 0.19096 -0.733918 + -1.14109 2.34193 -2.07631 -0.522511 0.0925126 -0.847599 + -1.16752 1.8059 -2.15487 -0.9547 -0.207369 -0.213416 + -1.21327 1.99216 -2.01029 -0.967286 -0.169126 -0.189087 + -1.20666 2.0536 -2.07071 -0.916515 -0.0594466 -0.395557 + -1.2492 2.14475 -2.01399 -0.773145 -0.235086 -0.589051 + -1.19228 2.17558 -2.06719 -0.60126 0.120367 -0.789936 + -1.14801 1.74733 -2.15642 -0.9288 -0.303759 -0.212278 + -1.17096 1.74047 -2.02934 -0.960066 -0.259605 -0.104302 + -1.20434 1.9139 -1.99994 -0.980805 -0.158871 -0.113052 + -1.24278 2.03662 -1.8647 -0.931278 -0.35514 -0.0812146 + -1.2558 2.08331 -1.95357 -0.901063 -0.375583 -0.216848 + -1.15145 1.6819 -2.03091 -0.486241 -0.794128 -0.364597 + -1.18277 1.76785 -1.93897 -0.978926 -0.193431 -0.0654877 + -1.21615 1.94119 -1.90961 -0.974374 -0.219508 -0.0491093 + -1.24146 2.01092 -1.74839 -0.952108 -0.298057 0.0682104 + -1.28605 2.1145 -1.83579 -0.918882 -0.3945 -0.00512896 + -1.29906 2.16111 -1.92472 -0.830483 -0.540358 -0.135319 + -1.17311 1.71051 -1.92046 -0.935592 -0.34672 -0.0667287 + -1.21483 1.91541 -1.79335 -0.97801 -0.208528 -0.0036615 + -1.22327 1.99607 -1.63906 -0.930147 -0.329843 0.161339 + -1.26074 2.09963 -1.71582 -0.933772 -0.32675 0.145961 + -1.14237 1.66056 -1.98515 -0.402532 -0.874839 -0.26949 + -1.12108 1.64027 -1.948 -0.818254 -0.565399 -0.103853 + -1.13441 1.64513 -1.92742 -0.699975 -0.6896 -0.185703 + -1.17745 1.71176 -1.83562 -0.93609 -0.350689 0.0274534 + -1.20517 1.85808 -1.77485 -0.97794 -0.203166 0.0485556 + -1.10948 1.66565 -1.97575 0.135518 -0.874943 -0.464877 + -1.11968 1.6542 -1.95812 0.352141 -0.739179 -0.574118 + -1.12108 1.64027 -1.948 0.595698 -0.510438 -0.620159 + -1.08136 1.64392 -1.93812 -0.00774151 -0.862955 -0.505221 + -1.06945 1.6088 -1.87888 0.00737978 -0.880066 -0.474794 + -1.11856 1.68698 -2.02151 0.237111 -0.830548 -0.503953 + -1.0775 1.66753 -1.97561 -0.00641392 -0.852507 -0.522676 + -1.08771 1.65608 -1.95799 0.0123477 -0.848293 -0.529384 + -1.0079 1.65625 -1.96487 0.024702 -0.857507 -0.513879 + -1.05241 1.61881 -1.89603 -0.00116581 -0.870749 -0.491726 + -1.14801 1.74733 -2.15642 0.258762 -0.859452 -0.440889 + -0.649583 1.8106 -0.813416 -0.980869 -0.14873 0.125599 + -0.661456 1.89294 -0.847236 -0.993982 -0.0438529 0.100377 + -0.665803 1.85544 -0.942675 -0.953548 -0.102119 0.283404 + -0.723908 1.85085 -1.04912 -0.280782 -0.340263 0.897431 + -0.616529 1.72023 -0.715886 -0.981363 -0.163407 0.101122 + -0.639294 1.82867 -0.742512 -0.97765 -0.198828 0.0683203 + -0.656365 1.90801 -0.744739 -0.997035 -0.0769454 0.0010585 + -0.65719 1.99449 -0.872528 -0.921122 -0.271916 0.278562 + -0.688318 1.91609 -0.979938 -0.818349 -0.264622 0.510176 + -0.641223 1.8031 -0.63302 -0.976983 -0.213048 0.0106765 + -0.658294 1.88243 -0.635237 -0.980913 -0.193882 0.0148055 + -0.66404 1.99448 -0.668502 -0.992128 -0.0802442 -0.0961359 + -0.652099 2.00947 -0.770073 -0.995772 -0.0882967 0.0253457 + -0.690586 2.04601 -0.869965 -0.651675 -0.578504 0.490564 + -0.721714 1.96762 -0.977374 -0.0653536 -0.61846 0.783094 + -0.670984 1.91222 -0.532224 -0.785764 -0.522623 0.330819 + -0.67673 2.02426 -0.56549 -0.98629 -0.109726 -0.123255 + -0.675378 2.08841 -0.670391 -0.993583 -0.0114219 -0.112528 + -0.663437 2.10349 -0.771912 -0.857258 -0.417236 0.3017 + -0.745918 2.11019 -0.834725 0.0945999 -0.771066 0.629688 + -0.677353 2.07043 -0.42066 0.168401 -0.700289 0.693712 + -0.719851 2.09289 -0.351357 0.732537 -0.37235 0.569864 + -0.643618 2.04868 -0.42158 -0.110878 -0.720557 0.684473 + -0.642861 2.13821 -0.297858 -0.0476366 -0.950944 0.305674 + -0.683856 2.1495 -0.235005 0.0157995 -0.967238 0.253381 + -0.719851 2.09289 -0.351357 0.159494 -0.906225 0.391558 + -0.726354 2.17204 -0.165652 -0.245095 -0.965109 0.0921618 + -0.591539 2.1091 -0.346226 0.525479 -0.738011 0.423335 + -0.632028 2.15113 -0.149236 0.301249 -0.929363 0.213385 + -0.673023 2.1625 -0.086333 -0.0360688 -0.990365 0.133701 + -0.694818 2.17955 -0.003062 -0.0667867 -0.990247 0.122268 + -0.590323 2.17315 -0.220969 0.797921 -0.567165 0.204074 + -0.559074 2.21804 -0.16272 0.742297 -0.669738 -0.0210964 + -0.600778 2.19602 -0.090987 0.508197 -0.861075 0.0168798 + -0.617838 2.17332 -0.016465 0.151545 -0.987773 -0.0365742 + -0.537674 2.26323 -0.227793 0.874435 -0.483853 -0.0353454 + -0.519612 2.28057 -0.179638 0.688921 -0.661905 -0.295414 + -0.525803 2.23951 -0.112705 0.565716 -0.803141 -0.186895 + -0.542863 2.21689 -0.038133 0.336101 -0.869336 -0.362343 + -0.498212 2.32577 -0.24471 0.77181 -0.582199 -0.255642 + -0.442832 2.38537 -0.239753 0.598936 -0.611056 -0.517577 + -0.445415 2.33028 -0.186529 0.430497 -0.680179 -0.59332 + -0.451606 2.2893 -0.119546 0.345365 -0.810414 -0.473235 + -0.481643 2.38683 -0.29747 0.783133 -0.529422 -0.326214 + -0.426263 2.44644 -0.292521 0.63061 -0.577187 -0.518833 + -0.361921 2.4423 -0.221354 0.219892 -0.676355 -0.702987 + -0.364504 2.38729 -0.16808 0.179872 -0.620493 -0.763305 + -0.35169 2.32451 -0.12374 0.0690669 -0.742476 -0.666302 + -0.462537 2.44419 -0.355431 0.850651 -0.481766 -0.210462 + -0.415492 2.50481 -0.344625 0.694633 -0.557192 -0.454996 + -0.3606 2.49977 -0.271703 0.259769 -0.658679 -0.70616 + -0.266055 2.51805 -0.310551 -0.407732 -0.602135 -0.686432 + -0.267376 2.46057 -0.260203 -0.371141 -0.620333 -0.690971 + -0.446736 2.50631 -0.40663 0.859747 -0.425557 -0.282376 + -0.39969 2.56693 -0.395823 0.677224 -0.54382 -0.495609 + -0.349828 2.55815 -0.323807 0.250919 -0.68534 -0.683629 + -0.271304 2.57523 -0.3564 -0.387972 -0.617953 -0.683821 + -0.438166 2.56162 -0.466418 0.879113 -0.365454 -0.305947 + -0.392707 2.62786 -0.447353 0.688569 -0.493727 -0.531137 + -0.340044 2.61075 -0.377513 0.230001 -0.691242 -0.685044 + -0.26152 2.62783 -0.410106 -0.387313 -0.649707 -0.654117 + -0.439425 2.6232 -0.51988 0.884767 -0.352439 -0.304915 + -0.393966 2.68945 -0.500823 0.718516 -0.526767 -0.454148 + -0.333061 2.67159 -0.4291 0.150934 -0.612573 -0.775869 + -0.26243 2.671 -0.458472 -0.448585 -0.573961 -0.685084 + -0.423663 2.83709 -0.832142 0.899465 -0.382728 -0.210906 + -0.383908 2.96572 -0.936345 0.754844 -0.569141 -0.326019 + -0.328671 2.73479 -0.471964 0.182213 -0.686864 -0.703574 + -0.258041 2.73411 -0.501386 -0.532705 -0.599616 -0.597232 + -0.389784 3.35025 -1.69157 0.907022 -0.377863 -0.185823 + -0.350029 3.47889 -1.79577 0.865349 -0.438158 -0.243288 + -0.31586 3.53684 -1.79416 0.787117 -0.529784 -0.315874 + -0.318614 3.01098 -0.907536 0.688474 -0.621364 -0.374046 + -0.26365 3.18553 -1.08067 0.535459 -0.631209 -0.561124 + -0.357848 3.75877 -2.25574 0.870537 -0.413683 -0.266518 + -0.357848 3.75877 -2.25574 0.824205 -0.477442 -0.304524 + -0.323679 3.81672 -2.25412 0.515322 -0.433265 -0.739408 + -0.260896 3.7114 -1.9673 0.784248 -0.525438 -0.329954 + -0.287798 3.87878 -2.26541 0.547926 -0.423239 -0.721558 + -0.226921 3.78392 -1.9845 0.744677 -0.555421 -0.370085 + -0.320441 3.88862 -2.27345 -0.237887 -0.0412594 -0.970416 + -0.280552 3.9586 -2.28646 -0.248078 0.0220471 -0.968489 + -0.253823 3.9513 -2.28262 0.464591 -0.392343 -0.793865 + -0.201838 4.02314 -2.28604 0.437655 -0.340648 -0.832116 + -0.170029 3.8391 -1.98008 0.612836 -0.657875 -0.437759 + -0.356322 3.82656 -2.26216 -0.260274 -0.0890776 -0.961417 + -0.335666 3.91617 -2.25556 -0.681655 0.292058 -0.670857 + -0.295777 3.98606 -2.26862 -0.686428 0.385977 -0.61631 + -0.238178 4.05334 -2.27375 -0.537741 0.499111 -0.679502 + -0.228567 4.03034 -2.28992 -0.183981 0.171153 -0.967914 + -0.414938 3.79883 -2.22034 -0.720113 0.272106 -0.638275 + -0.378202 3.85375 -2.23826 -0.701246 0.273284 -0.658461 + -0.342256 3.96762 -2.21109 -0.748213 0.449247 -0.488216 + -0.289296 4.02531 -2.231 -0.722365 0.526344 -0.448499 + -0.357848 3.75877 -2.25574 -0.247884 0.172693 -0.953274 + -0.463356 3.69601 -2.21324 -0.678449 0.274489 -0.681441 + -0.429885 3.82907 -2.17531 -0.813272 0.379751 -0.440883 + -0.384793 3.90521 -2.19379 -0.801508 0.391873 -0.451686 + -0.378565 3.95873 -2.14769 -0.829334 0.460094 -0.317047 + -0.335829 4.02806 -2.14717 -0.776441 0.524639 -0.349133 + -0.478303 3.72625 -2.16821 -0.803751 0.342748 -0.486321 + -0.504429 3.73987 -2.11361 -0.82587 0.397715 -0.399702 + -0.423657 3.88259 -2.12921 -0.833771 0.440712 -0.332565 + -0.365999 4.02351 -2.06529 -0.824745 0.498463 -0.267076 + -0.323263 4.09292 -2.06472 -0.806498 0.507759 -0.302889 + -0.564439 3.60092 -2.11415 -0.794199 0.36304 -0.487289 + -0.591852 3.63862 -2.04383 -0.653269 0.433813 -0.620521 + -0.549484 3.70203 -2.04408 -0.757982 0.467353 -0.455021 + -0.501226 3.80578 -2.03256 -0.773217 0.383494 -0.505042 + -0.456171 3.84361 -2.1021 -0.831653 0.446748 -0.329801 + -0.647085 3.52642 -2.0411 -0.496292 0.278787 -0.822175 + -0.700534 3.60249 -2.02207 0.0222737 0.125976 -0.991783 + -0.619137 3.65463 -2.00676 -0.208829 0.341478 -0.916397 + -0.576769 3.71804 -2.007 -0.317497 0.22297 -0.921672 + -0.532606 3.80752 -1.99978 -0.343624 0.303519 -0.888706 + -0.427697 3.95708 -2.04764 -0.0749504 0.101348 -0.992024 + -0.717464 3.32035 -2.07958 -0.430209 0.27129 -0.861 + -0.770078 3.30759 -2.07469 0.18806 0.182001 -0.965147 + -0.6997 3.51375 -2.03617 0.0713413 0.171735 -0.982557 + -0.776695 3.07793 -2.1311 -0.479383 0.210897 -0.851889 + -0.816951 3.26181 -2.10819 0.367657 -0.000813715 -0.929961 + -0.830246 3.43662 -2.09196 0.337313 0.152628 -0.928937 + -0.831081 3.52536 -2.07787 0.0343598 0.437928 -0.898353 + -0.934467 2.91554 -2.08703 -0.430684 0.111011 -0.895649 + -0.84864 3.12885 -2.08049 -0.353126 -0.0253951 -0.935231 + -0.843466 3.22363 -2.09885 -0.166718 -0.253941 -0.952743 + -0.887219 3.33249 -2.16981 0.36213 0.079671 -0.928716 + -0.877119 3.39084 -2.12547 0.415215 0.373389 -0.829564 + -0.988181 3.1422 -2.07001 -0.230553 -0.116348 -0.966079 + -0.983007 3.23697 -2.08837 -0.25442 -0.358061 -0.898367 + -0.913734 3.29439 -2.16042 -0.0756926 -0.44545 -0.892101 + -0.971944 3.33475 -2.15372 -0.454421 -0.144641 -0.878966 + -0.945597 3.3738 -2.16275 -0.139378 0.337716 -0.930872 + -1.02879 3.12367 -2.04993 -0.567989 -0.356446 -0.741845 + -1.13992 3.1959 -2.03623 -0.229918 -0.177834 -0.956824 + -1.04122 3.27733 -2.08166 -0.430465 -0.205168 -0.87898 + -1.0767 3.38613 -2.07192 -0.431981 -0.0467594 -0.90067 + -1.05036 3.42518 -2.08095 -0.347645 0.418403 -0.839096 + -1.01116 3.05512 -1.99999 -0.827572 -0.310506 -0.467665 + -1.06198 3.0943 -1.98165 -0.214445 -0.482203 -0.849407 + -1.07961 3.16294 -2.03154 -0.414817 -0.837076 -0.356693 + -0.975289 2.85138 -2.0535 -0.951523 0.238084 -0.19473 + -1.01137 3.00939 -1.98658 -0.65421 0.00718047 -0.756279 + -1.06208 3.04749 -1.96857 -0.144276 -0.111882 -0.983192 + -1.17824 3.0538 -1.99369 0.0675386 -0.279717 -0.957704 + -1.23855 3.08685 -1.99834 -0.09158 -0.143726 -0.985371 + -1.00064 2.76627 -2.06269 -0.64153 0.199236 -0.740772 + -1.02943 2.93831 -1.99707 -0.35258 0.213584 -0.911081 + -1.08014 2.97632 -1.97911 -0.0795743 0.149333 -0.98558 + -1.17835 3.00699 -1.98062 0.0720652 -0.065211 -0.995266 + -1.31949 3.00873 -1.98584 -0.0162973 -0.0208787 -0.999649 + -0.986043 2.65546 -2.10375 -0.655297 0.19743 -0.729114 + -1.11286 2.67152 -2.02258 -0.301424 0.261841 -0.916833 + -1.05478 2.85312 -2.00632 -0.362516 0.201705 -0.909889 + -1.10555 2.89233 -1.98803 -0.0906678 0.125675 -0.987919 + -1.20375 2.92299 -1.98954 0.0203355 0.0750271 -0.996974 + -1.09827 2.56071 -2.06364 -0.416537 0.204287 -0.885869 + -1.24444 2.67947 -2.00494 -0.0963287 0.107055 -0.989576 + -1.16363 2.71074 -2.0043 -0.108192 0.175012 -0.978604 + -1.28456 2.89182 -1.99014 -0.0221535 0.0461543 -0.998689 + -1.13497 2.46883 -2.06051 -0.43348 0.143259 -0.889703 + -1.24701 2.56134 -2.01134 -0.227772 0.0698009 -0.971209 + -1.42874 2.76685 -1.99049 -0.0696272 0.0429395 -0.996648 + -1.46366 2.88377 -1.98619 -0.0932224 0.0330562 -0.995096 + -1.25313 2.43444 -2.02713 -0.270164 0.073252 -0.960024 + -1.376 2.51822 -1.99585 -0.114477 0.0144164 -0.993321 + -1.43131 2.64864 -1.99695 -0.075487 0.0136572 -0.997053 + -1.63719 2.8068 -1.96728 -0.093509 0.133554 -0.98662 + -1.23734 2.32035 -2.03312 -0.343442 0.0366645 -0.938458 + -1.36021 2.40413 -2.00184 -0.216379 -0.0373293 -0.975596 + -1.53882 2.55361 -1.98375 -0.0473551 -0.0389049 -0.99812 + -1.59413 2.68402 -1.98483 -0.0448303 0.0564439 -0.997399 + -1.17593 2.27307 -2.06064 -0.473531 0.0996804 -0.875119 + -1.25369 2.22285 -2.03966 -0.502976 -0.0939219 -0.859182 + -1.33576 2.3177 -2.00015 -0.399315 -0.189006 -0.89712 + -1.46842 2.37095 -1.97597 -0.223438 -0.345836 -0.911303 + -1.49287 2.45738 -1.97767 -0.116185 -0.0937373 -0.988794 + -1.33127 2.23969 -1.97442 -0.646114 -0.420912 -0.636687 + -1.42789 2.30996 -1.94454 -0.446572 -0.617113 -0.647878 + -1.62731 2.40409 -1.94996 -0.235512 -0.634903 -0.735821 + -1.66729 2.45157 -1.98061 -0.106977 -0.338737 -0.93478 + -1.71324 2.5478 -1.98668 -0.0974185 -0.0390775 -0.994476 + -1.39568 2.23147 -1.89478 -0.626229 -0.755703 -0.191702 + -1.50851 2.3155 -1.86953 -0.340965 -0.935321 -0.0944317 + -1.58678 2.34309 -1.91852 -0.260574 -0.815644 -0.516552 + -1.73092 2.37115 -1.88572 -0.131401 -0.848915 -0.511934 + -1.781 2.40746 -1.9224 -0.142853 -0.706798 -0.692842 + -1.31454 2.19299 -1.78813 -0.813264 -0.555502 0.173263 + -1.36065 2.22605 -1.8196 -0.626462 -0.723195 0.290748 + -1.47348 2.31008 -1.79434 -0.436618 -0.833227 0.339262 + -1.65265 2.34347 -1.83677 -0.127858 -0.990665 0.0472872 + -1.28924 2.1782 -1.66811 -0.884102 -0.433411 0.174695 + -1.34068 2.29708 -1.63003 -0.761031 -0.612996 0.212291 + -1.38679 2.33015 -1.6615 -0.589409 -0.744175 0.314326 + -1.43417 2.38079 -1.61921 -0.55271 -0.682526 0.478193 + -1.52085 2.36072 -1.75206 -0.317515 -0.81048 0.492246 + -1.26697 2.17874 -1.57305 -0.900365 -0.390708 0.19155 + -1.31841 2.29754 -1.53501 -0.823395 -0.449967 0.345761 + -1.24255 2.08486 -1.60644 -0.947869 -0.274829 0.161286 + -1.23862 2.16438 -1.46977 -0.905292 -0.313672 0.286453 + -1.24799 2.24232 -1.43177 -0.8767 -0.305355 0.371694 + -1.26407 2.36213 -1.3649 -0.841359 -0.267282 0.469762 + -1.33449 2.41726 -1.46819 -0.756846 -0.403412 0.51424 + -1.2045 1.99043 -1.53649 -0.917416 -0.362814 0.163444 + -1.2142 2.0705 -1.50317 -0.940018 -0.267209 0.212052 + -1.18692 2.03124 -1.42837 -0.941062 -0.229075 0.248849 + -1.19436 2.12152 -1.38695 -0.92791 -0.233749 0.290421 + -1.20373 2.19955 -1.3489 -0.87935 -0.241729 0.410257 + -1.18042 1.92842 -1.63808 -0.800197 -0.54896 0.241512 + -1.16165 1.92269 -1.53557 -0.773768 -0.633174 -0.0193038 + -1.17722 1.95109 -1.46175 -0.925285 -0.338291 0.171486 + -1.14099 1.87746 -1.41543 -0.897996 -0.356174 0.258347 + -1.16448 1.97777 -1.38457 -0.885871 -0.279823 0.370041 + -1.17192 2.06806 -1.34315 -0.844979 -0.263254 0.465519 + -1.0651 1.85069 -1.53705 -0.803826 -0.572122 0.162914 + -1.03903 1.79188 -1.47559 -0.62161 -0.56532 -0.542231 + -1.13558 1.86389 -1.47411 -0.784048 -0.569633 -0.246549 + -1.03402 1.78121 -1.51991 -0.745892 0.00624042 0.666037 + -1.00259 1.73764 -1.46965 -0.911133 -0.354543 -0.210087 + -1.08457 1.69014 -1.39597 -0.841294 -0.353496 -0.408982 + -1.09935 1.79026 -1.42779 -0.913192 -0.136649 0.383938 + -1.07254 1.68849 -1.48572 -0.493736 0.219424 0.841474 + -1.01226 1.69252 -1.49689 -0.433205 0.25784 0.863627 + -0.98083 1.64894 -1.44662 -0.999595 -0.0181607 0.0219353 + -1.04813 1.6359 -1.39004 -0.63553 -0.439626 -0.634689 + -1.19025 1.85053 -1.68118 -0.923306 -0.229262 0.308131 + -1.11344 1.68017 -1.5459 -0.899984 -0.129642 0.416199 + -1.03534 1.59892 -1.45797 -0.720565 -0.692201 -0.0405528 + -1.04089 1.60615 -1.4299 -0.816759 -0.576836 -0.0128116 + -1.00949 1.57435 -1.40242 -0.72558 -0.687312 0.0336929 + -1.00394 1.56712 -1.43049 -0.480069 -0.87658 -0.0337773 + -1.16252 1.70413 -1.742 -0.944069 -0.305172 0.124916 + -1.1428 1.64929 -1.72542 -0.853456 -0.511329 0.100777 + -1.09371 1.62534 -1.52933 -0.734295 -0.600879 0.315842 + -1.05132 1.61087 -1.49608 -0.25206 -0.956804 -0.144884 + -0.958178 1.58084 -1.55326 -0.318905 -0.928741 -0.189051 + -1.13874 1.64637 -1.84257 -0.734216 -0.678743 -0.0152977 + -1.10131 1.61933 -1.80392 -0.427943 -0.902582 -0.0470206 + -1.11409 1.62372 -1.75273 -0.461266 -0.886452 0.037892 + -1.15152 1.65076 -1.79137 -0.574764 -0.817688 -0.032139 + -1.13426 1.63956 -1.72157 -0.589242 -0.802918 0.0900953 + -1.1511 1.65248 -1.76974 -0.722256 -0.688154 0.069209 + -1.13384 1.64128 -1.69995 -0.387328 -0.920801 0.0458632 + -1.05968 1.60678 -1.84059 -0.360312 -0.931784 -0.0441978 + -1.00982 1.58762 -1.7782 -0.172767 -0.983746 -0.0489417 + -1.05145 1.60017 -1.74154 -0.306909 -0.949764 0.0612722 + -1.07246 1.61012 -1.71817 -0.354464 -0.922949 0.150067 + -1.09263 1.62597 -1.68702 -0.359884 -0.924163 0.128086 + -1.12108 1.64027 -1.948 -0.409749 -0.910838 -0.0498061 + -1.04635 1.60183 -1.86122 -0.390813 -0.919916 -0.0319293 + -1.04089 1.60615 -1.4299 0.101406 0.631667 0.768579 + -0.980616 1.61008 -1.44111 -0.759623 0.365778 0.537754 + -0.981012 1.60939 -1.42411 -0.943301 0.0838024 -0.321186 + -0.999654 1.61778 -1.41144 -0.58114 -0.451522 -0.677056 + -1.00949 1.57435 -1.40242 0.0864199 0.698891 0.709988 + -1.06695 1.60474 -1.35485 -0.911111 0.180789 -0.370394 + -1.07344 1.61946 -1.31076 -0.94261 0.333636 -0.0131445 + -1.08036 1.67959 -1.33931 -0.953034 -0.0079723 0.30276 + -1.09514 1.77971 -1.37112 -0.952395 -0.141753 0.269905 + -1.0847 1.60428 -1.30646 0.344914 0.873386 0.343847 + -1.05967 1.62708 -1.22854 -0.517706 0.616087 0.593648 + -1.05056 1.6794 -1.29078 -0.623353 0.434418 0.650163 + -1.05747 1.73953 -1.31933 -0.608519 -0.141346 0.78085 + -1.05982 1.83094 -1.29605 -0.863655 -0.0959455 0.494869 + -1.07093 1.61181 -1.2243 -0.555215 0.698731 0.451122 + -1.04195 1.61112 -1.2181 0.0177145 -0.558759 0.829141 + -1.03127 1.62727 -1.22128 0.294438 0.350709 0.888993 + -1.02216 1.67959 -1.28351 -0.163998 0.766711 0.620693 + -1.09388 1.61566 -1.27697 0.931842 -0.292028 -0.215386 + -1.07612 1.61612 -1.32537 0.630763 -0.740881 0.230724 + -1.0649 1.61489 -1.27083 -0.0609777 -0.997269 -0.0416578 + -1.07093 1.61181 -1.2243 -0.0100838 -0.997679 -0.0673415 + -0.970943 1.60308 -1.27899 0.24613 -0.83141 0.498173 + -0.960261 1.61924 -1.28217 0.0509955 -0.433233 0.899838 + -1.02216 1.67959 -1.28351 0.562905 0.590162 0.578659 + -1.06695 1.60474 -1.35485 0.715576 -0.465775 0.52058 + -1.06309 1.61663 -1.34844 0.250124 -0.915138 0.316164 + -1.05514 1.61691 -1.31914 -0.152138 -0.986159 0.0659096 + -1.06817 1.61632 -1.29611 0.151025 -0.985457 -0.0778796 + -0.974216 1.60452 -1.30428 -0.15388 -0.967894 0.198749 + -0.999654 1.61778 -1.41144 0.606177 -0.521017 0.600908 + -1.02216 1.67959 -1.28351 -0.230206 0.395678 0.889069 + -1.03906 1.60437 -1.33602 -0.423485 -0.860589 0.282926 + -0.958142 1.59198 -1.32116 -0.0682836 -0.826814 0.558315 + -1.04444 1.60832 -1.36106 -0.674257 -0.633505 -0.379538 + -1.00451 1.56971 -1.36038 -0.38392 -0.868722 0.312933 + -0.962374 1.55825 -1.37734 -0.0735577 -0.961427 0.265043 + -1.00989 1.57366 -1.38542 -0.7333 -0.633382 -0.247181 + -0.962586 1.55538 -1.43136 -0.177867 -0.982673 -0.052131 + -0.870008 1.5521 -1.46128 -0.103584 -0.994415 -0.020232 + -0.834993 1.54703 -1.48831 -0.0902 -0.99277 0.0791909 + -1.00949 1.57435 -1.40242 -0.773667 0.633547 0.00764688 + -1.00949 1.57435 -1.40242 -0.365035 -0.930807 0.0186478 + -0.91682 1.56909 -1.55411 -0.231713 -0.95774 -0.170419 + -0.881805 1.56411 -1.58109 -0.266134 -0.960008 -0.0869348 + -0.822492 1.53543 -1.53941 -0.1957 -0.977601 0.0774421 + -0.776871 1.53666 -1.55074 0.326105 -0.918971 0.221692 + -0.854296 1.57473 -1.65427 -0.126971 -0.986502 -0.103406 + -0.853425 1.57096 -1.63175 -0.183366 -0.937702 -0.295113 + -0.868117 1.5639 -1.61192 -0.556573 -0.663322 -0.500231 + -0.808803 1.53514 -1.5703 -0.14933 -0.976427 -0.155857 + -0.766598 1.5343 -1.58024 0.238431 -0.971158 0.00170524 + -0.97416 1.59288 -1.59131 -0.252404 -0.962905 -0.0954239 + -0.984773 1.59709 -1.6334 -0.217725 -0.976008 0.00221638 + -0.983652 1.59513 -1.65601 -0.23537 -0.962867 0.132239 + -0.962637 1.58526 -1.67932 -0.159118 -0.978441 0.131661 + -0.90641 1.58098 -1.68711 -0.0566384 -0.997395 -0.0446586 + -0.862303 1.57804 -1.67641 -0.0813725 -0.990691 -0.109134 + -0.768767 1.56808 -1.72116 -0.0529709 -0.996773 -0.060315 + -0.751176 1.56748 -1.67232 -0.0502469 -0.994098 -0.0961447 + -0.750306 1.56371 -1.64979 -0.234412 -0.853581 -0.465242 + -1.06806 1.61523 -1.58262 -0.280695 -0.959771 -0.00704812 + -1.07867 1.61952 -1.62466 -0.260978 -0.963437 -0.0606632 + -1.09376 1.62793 -1.66441 -0.262901 -0.963972 -0.0405197 + -1.11045 1.62969 -1.61588 -0.571358 -0.81851 0.0599255 + -1.11876 1.63288 -1.66019 -0.474541 -0.880086 -0.0161062 + -0.95359 1.58342 -1.78594 -0.0391885 -0.990612 -0.130963 + -0.827228 1.58351 -1.77167 -0.0109673 -0.98491 -0.172719 + -0.783121 1.58057 -1.76098 -0.174831 -0.955985 -0.235641 + -0.776774 1.5714 -1.74331 -0.194397 -0.953847 -0.228879 + -0.962247 1.59901 -1.84773 0.0180731 -0.944338 -0.32848 + -0.835885 1.59909 -1.83347 0.0936741 -0.928146 -0.360237 + -0.782991 1.61007 -1.84089 0.0279097 -0.867559 -0.49655 + -0.729379 1.60414 -1.84242 -0.230313 -0.788832 -0.569824 + -0.740212 1.58506 -1.80657 -0.219807 -0.880026 -0.420997 + -1.01211 1.60125 -1.8584 0.0253295 -0.951035 -0.308043 + -0.940837 1.64332 -1.93428 0.0752452 -0.864885 -0.496299 + -0.887944 1.6543 -1.9417 0.134328 -0.844154 -0.518999 + -0.750584 1.64268 -1.87757 0.0117227 -0.799987 -0.599903 + -1.04635 1.60183 -1.86122 0.00874517 -0.947906 -0.318429 + -1.03521 1.60812 -1.87612 0.0296281 -0.902393 -0.429895 + -0.990703 1.64564 -1.9449 0.0524718 -0.871027 -0.488424 + -0.891333 1.6773 -1.97893 0.153092 -0.871262 -0.466332 + -0.753973 1.66567 -1.91479 0.0224135 -0.87181 -0.489332 + -0.707074 1.6674 -1.92818 -0.566941 -0.767826 -0.298363 + -0.692433 1.63726 -1.94318 -0.910186 -0.408722 -0.0671495 + -1.01425 1.66841 -1.98473 0.0153449 -0.852979 -0.52172 + -1.01888 1.6804 -2.0049 0.0210473 -0.855876 -0.516753 + -1.02739 1.69411 -2.02766 -0.0805906 -0.92199 -0.378735 + -1.01531 1.69599 -2.04791 -0.265431 -0.96072 -0.0810168 + -0.985795 1.68354 -2.06893 -0.213297 -0.97662 0.0267923 + -0.937936 1.68407 -2.04925 0.176096 -0.979275 -0.100049 + -0.906403 1.69126 -2.01231 0.475863 -0.795416 -0.375323 + -0.796615 1.70206 -1.98982 0.055276 -0.895607 -0.441399 + -1.08214 1.67944 -1.99584 0.0674367 -0.855493 -0.513404 + -1.10601 1.7037 -2.03866 0.112258 -0.830651 -0.545359 + -1.11452 1.7175 -2.06136 0.160372 -0.807428 -0.567751 + -1.11534 1.73461 -2.08659 -0.0194852 -0.90383 -0.427449 + -1.10326 1.7364 -2.1069 -0.313409 -0.931672 -0.183744 + -1.14514 1.73694 -2.10343 0.788842 -0.485393 -0.376992 + -1.14596 1.75405 -2.12866 0.537945 -0.790808 -0.291955 + -1.06691 1.72479 -2.14278 -0.420761 -0.901761 -0.0989347 + -1.03739 1.71233 -2.1638 -0.453159 -0.888195 -0.0758787 + -1.14801 1.74733 -2.15642 0.998327 0.0327699 -0.0476409 + -1.05909 1.73242 -2.2304 -0.48969 -0.858861 -0.150206 + -0.985578 1.68671 -2.19063 -0.186364 -0.973788 -0.1304 + -0.937719 1.68725 -2.17096 0.199297 -0.973203 -0.114701 + -0.845878 1.71426 -2.08535 0.311308 -0.944806 -0.102125 + -0.814345 1.72146 -2.04842 0.197049 -0.971279 -0.133371 + -0.919204 1.70335 -2.22546 0.319808 -0.906084 -0.277009 + -0.827363 1.73046 -2.13981 0.418124 -0.89073 -0.178248 + -0.780045 1.75154 -2.13453 0.273036 -0.904565 -0.327434 + -0.750666 1.75461 -2.12943 -0.109871 -0.895508 -0.431271 + -0.765201 1.73346 -2.0804 -0.0347549 -0.962335 -0.269637 + -0.816523 1.76973 -2.26183 0.376997 -0.908085 -0.182357 + -0.729958 1.78796 -2.20421 0.253118 -0.927286 -0.275812 + -0.700579 1.79093 -2.19915 -0.743828 -0.298767 -0.597879 + -0.804428 1.78088 -2.30394 0.335722 -0.941955 -0.00349396 + -0.717864 1.79902 -2.24636 0.371396 -0.923487 -0.0961088 + -0.693261 1.81091 -2.24576 -0.233866 -0.954053 -0.187325 + -0.685856 1.80393 -2.25027 -0.984765 -0.124044 -0.121863 + -0.705589 1.77883 -2.23698 -0.781478 0.616823 -0.093918 + -0.750666 1.75461 -2.12943 -0.696716 0.704855 -0.133289 + -0.731575 1.796 -2.30292 0.322661 -0.946137 0.0267417 + -0.706973 1.80789 -2.30233 -0.477063 -0.826336 0.299298 + -0.709495 1.8001 -2.31164 -0.0983555 -0.908419 0.406326 + -0.689605 1.80637 -2.26988 -0.208619 -0.976405 0.0557856 + -0.685589 1.8085 -2.33898 -0.349439 -0.935665 -0.0492316 + -0.689338 1.81093 -2.35859 0.66566 -0.72292 -0.185157 + -0.736939 1.79227 -2.32506 0.100539 -0.889494 0.445749 + -0.739461 1.78448 -2.33438 0.20031 -0.942322 0.268152 + -0.705839 1.79564 -2.33571 0.454571 -0.89069 0.00599458 + -0.741214 1.78393 -2.34563 0.217153 -0.971784 -0.0920932 + -0.707916 1.79867 -2.37156 0.466936 -0.869884 -0.158975 + -0.676915 1.83214 -2.40552 0.77628 -0.628439 -0.0495339 + -0.678992 1.83517 -2.44137 0.699189 -0.706441 -0.109891 + -0.625186 1.8998 -2.49551 0.836443 -0.481083 0.26253 + -0.645874 1.8849 -2.45391 0.899239 -0.353088 0.258259 + -0.658297 1.8637 -2.40698 0.896016 -0.436693 0.0803439 + -0.67171 1.85164 -2.3627 0.933788 -0.343174 0.101344 + -0.685589 1.8085 -2.33898 0.886894 -0.406265 -0.219929 + -0.601053 1.95609 -2.44482 0.761608 -0.602336 0.239047 + -0.623155 1.94846 -2.40779 0.806442 -0.557092 0.198242 + -0.636569 1.9364 -2.36351 0.851163 -0.477634 0.217687 + -0.580364 1.971 -2.48643 0.774992 -0.596831 0.207798 + -0.534165 2.03217 -2.44998 0.710168 -0.694223 0.117115 + -0.539496 2.03274 -2.40997 0.665053 -0.728829 0.162829 + -0.561598 2.0251 -2.37295 0.643269 -0.738155 0.203301 + -0.600397 1.91406 -2.54321 0.837195 -0.502207 0.216549 + -0.555263 1.99129 -2.51618 0.778008 -0.605523 0.167467 + -0.509064 2.05246 -2.47973 0.713234 -0.691458 0.114813 + -0.453323 2.10837 -2.38597 0.689644 -0.720919 0.068306 + -0.458653 2.10904 -2.34592 0.599352 -0.800315 0.0164888 + -0.643531 1.86852 -2.48694 0.854673 -0.416059 0.31053 + -0.618742 1.88277 -2.53462 0.860034 -0.428077 0.277654 + -0.605994 1.89588 -2.56593 0.853302 -0.506708 0.122973 + -0.580252 1.93347 -2.58302 0.835735 -0.54771 0.0394952 + -0.661911 1.8537 -2.45587 0.855295 -0.417418 0.306975 + -0.690866 1.79182 -2.28809 -0.917138 0.398523 -0.00612391 + -0.685589 1.8085 -2.33898 -0.93944 0.342393 0.0148036 + -1.15072 1.77302 -2.19552 -0.347946 -0.908119 -0.232924 + -0.702535 1.66783 -1.99233 -0.883527 -0.463758 -0.0656402 + -0.716526 1.69944 -2.03547 0.0796162 -0.864748 -0.495855 + -0.749716 1.7037 -2.00326 -0.218345 -0.913923 -0.342155 + -0.762541 1.72793 -2.05523 -0.160226 -0.946201 -0.281124 + -0.729351 1.72366 -2.08744 0.19206 -0.878248 -0.437942 + -0.680883 1.77302 -2.07412 0.766567 -0.468225 -0.439476 + -0.702535 1.66783 -1.99233 0.656057 -0.561386 -0.504416 + -0.811685 1.71602 -2.0232 0.119001 -0.934931 -0.334279 + -0.734341 1.74788 -2.13459 0.138231 -0.865202 -0.481993 + -0.695709 1.8117 -2.16432 0.854791 -0.478307 -0.201384 + -0.690719 1.78757 -2.11712 0.789548 -0.503589 -0.35073 + -0.719806 1.76903 -2.18362 0.677607 -0.735353 0.0102454 + -0.698701 1.8166 -2.21121 0.923499 -0.37738 0.0688019 + -0.65072 1.91757 -2.18509 0.869658 -0.479051 -0.119186 + -0.637963 1.92843 -2.1431 0.841574 -0.48477 -0.238224 + -0.628127 1.91379 -2.10014 0.852506 -0.428285 -0.299677 + -0.705589 1.77883 -2.23698 0.927225 -0.331085 0.175035 + -0.684484 1.8263 -2.26462 0.93937 -0.324291 0.111438 + -0.653712 1.92238 -2.23203 0.881598 -0.461787 -0.0976589 + -0.589979 2.01155 -2.22668 0.732055 -0.674682 -0.0943325 + -0.588229 2.00932 -2.18261 0.757157 -0.649671 -0.0681215 + -0.575472 2.02009 -2.14067 0.732037 -0.674041 -0.0989495 + -0.676987 1.83497 -2.31182 0.960058 -0.274072 0.0563378 + -0.658385 1.92633 -2.27507 0.913671 -0.405278 -0.0308882 + -0.594651 2.01542 -2.26977 0.701129 -0.709864 -0.0671595 + -0.690866 1.79182 -2.28809 0.961302 -0.21348 0.174139 + -0.650887 1.9349 -2.32232 0.889135 -0.429839 0.15709 + -0.605655 2.0055 -2.31019 0.727177 -0.679353 0.0984513 + -0.499475 2.08507 -2.24461 0.519983 -0.85397 0.0187846 + -0.685589 1.8085 -2.33898 0.951615 -0.307286 -0.00203496 + -0.591336 2.007 -2.35139 0.682898 -0.660177 0.312756 + -0.510478 2.07515 -2.28504 0.570976 -0.817267 0.077858 + -0.48074 2.09326 -2.3066 0.555463 -0.8312 0.0238116 + -0.417248 2.12441 -2.19516 0.405727 -0.909644 -0.0890718 + -0.508241 2.08118 -2.19707 0.553133 -0.83281 -0.0217055 + -0.38386 2.15237 -2.27137 0.475121 -0.873301 -0.107726 + -0.405947 2.13659 -2.23205 0.470782 -0.87426 -0.118463 + -0.33785 2.1411 -2.11065 0.374059 -0.877031 -0.30149 + -0.338236 2.127 -2.07943 0.277855 -0.912856 -0.29915 + -0.426015 2.12053 -2.14762 0.3304 -0.936474 -0.117699 + -0.426257 2.13531 -2.39723 0.677107 -0.732586 -0.0696004 + -0.364172 2.16698 -2.30229 0.546318 -0.820226 -0.169608 + -0.315156 2.1684 -2.17734 0.375775 -0.891915 -0.251557 + -0.326549 2.15319 -2.1476 0.351074 -0.903235 -0.246807 + -0.481998 2.07939 -2.49098 0.734128 -0.678113 0.0349072 + -0.407235 2.16024 -2.42981 0.587936 -0.808522 -0.0249545 + -0.34515 2.19191 -2.33487 0.37602 -0.920074 -0.109878 + -0.295469 2.1831 -2.2082 0.186945 -0.969252 -0.160008 + -0.535117 2.0107 -2.556 0.793361 -0.603424 0.0803571 + -0.465729 2.09545 -2.52819 0.729711 -0.68172 0.052724 + -0.460517 2.0966 -2.57438 0.675915 -0.725058 0.13202 + -0.402023 2.16139 -2.476 0.480139 -0.866346 0.137519 + -0.36698 2.17379 -2.47308 0.181389 -0.959584 0.215165 + -0.518848 2.02675 -2.59321 0.777784 -0.623559 0.0789044 + -0.501167 2.04318 -2.63445 0.722833 -0.674191 0.151589 + -0.440632 2.10339 -2.61014 0.43435 -0.824677 0.362282 + -0.405589 2.11579 -2.60722 0.267636 -0.902011 0.338745 + -0.592266 1.91999 -2.61288 0.809897 -0.583216 -0.0626508 + -0.398513 3.98461 -2.03812 -0.535311 0.490147 -0.687894 + -0.30799 4.16202 -1.9874 -0.790491 0.519779 -0.323965 + -0.276587 4.16497 -2.0711 -0.739835 0.556714 -0.377773 + -0.282869 4.08583 -2.16703 -0.712881 0.566542 -0.413317 + -0.326369 4.14841 -1.97002 -0.611097 0.596423 -0.520423 + -0.250851 4.29974 -1.89373 -0.693572 0.66508 -0.276816 + -0.261313 4.23416 -1.99374 -0.730399 0.592907 -0.339084 + -0.21748 4.22262 -2.07876 -0.574808 0.683907 -0.449296 + -0.355553 4.12096 -1.97949 -0.460189 0.563263 -0.686266 + -0.292218 4.25662 -1.87365 -0.722555 0.559325 -0.406287 + -0.26923 4.28621 -1.8763 -0.723482 0.579816 -0.374683 + -0.205029 4.34236 -1.89375 -0.550503 0.718014 -0.425915 + -0.215492 4.27678 -1.99376 -0.549715 0.717863 -0.427183 + -0.401211 4.07733 -1.95971 -0.733835 0.549341 -0.399638 + -0.337876 4.21298 -1.85386 -0.72149 0.581723 -0.375568 + -0.285288 4.38676 -1.73806 -0.698805 0.489042 -0.522025 + -0.237996 4.41396 -1.75877 -0.641133 0.550732 -0.534455 + -0.501226 3.80578 -2.03256 0.573652 -0.352441 -0.739398 + -0.719851 2.09289 -0.351357 -0.980183 -0.11691 -0.159915 + -0.733426 2.16917 -0.325479 -0.422968 -0.872168 0.245806 + -0.690305 2.10063 -0.539561 -0.985224 -0.00356063 -0.171232 + -0.665292 2.18573 -0.653752 -0.867224 -0.469909 0.164646 + -0.718769 2.16766 -0.736671 -0.248566 -0.784045 0.56876 + -0.680219 2.19795 -0.522923 -0.979217 -0.152937 -0.133212 + -0.708907 2.22741 -0.610553 -0.547199 -0.797935 0.25273 + -0.762384 2.20935 -0.693472 0.197273 -0.844076 0.498618 + -0.797269 2.10626 -0.78912 0.578752 -0.634939 0.51176 + -0.775359 1.95469 -0.938779 0.588975 -0.498634 0.635982 + -0.77872 2.17722 -0.248824 -0.694277 -0.696737 -0.180378 + -0.796669 2.22433 -0.213417 -0.94676 -0.136116 -0.291749 + -0.698169 2.24505 -0.487516 -0.871912 -0.48212 -0.0856091 + -0.754293 2.27651 -0.547195 0.0832475 -0.964228 0.251662 + -0.830699 2.16795 -0.637373 0.744345 -0.603115 0.286709 + -0.865584 2.06487 -0.733021 0.828694 -0.431946 0.355933 + -0.829931 2.21614 -0.096232 -0.996534 -0.0432626 -0.071053 + -0.743554 2.29407 -0.424208 -0.314497 -0.942117 -0.116222 + -0.776816 2.28588 -0.307023 0.582122 -0.808527 0.0861305 + -0.793376 2.25035 -0.483283 0.723206 -0.681119 0.114231 + -0.806663 2.18697 -0.024113 -0.319221 -0.938301 -0.133004 + -0.833448 2.18638 0.014919 -0.787728 -0.608449 -0.096299 + -0.830529 2.21353 -0.017905 -0.998984 -0.0415037 -0.0175808 + -0.776816 2.28588 -0.307023 -0.968634 -0.196423 -0.152207 + -0.761369 2.17901 -0.100718 -0.104107 -0.994115 0.0299452 + -0.764288 2.1663 0.096893 0.0609571 -0.994559 -0.0844741 + -0.791073 2.16562 0.135874 -0.0875311 -0.989017 -0.119097 + -0.834045 2.18376 0.093254 -0.844415 0.116963 0.522764 + -0.729833 2.18652 0.061879 0.227542 -0.970325 -0.0818157 + -0.690305 2.10063 -0.539561 0.45234 -0.818888 0.353285 + -0.719851 2.09289 -0.351357 -0.980593 -0.190385 0.0468075 + -0.639633 2.19037 0.066806 -0.0936961 -0.995599 -0.0018826 + -0.649184 2.18275 0.132395 0.050891 -0.975688 -0.213172 + -0.683639 2.16254 0.167409 -0.136421 -0.956444 0.258077 + -0.67044 2.19247 0.209165 0.33403 -0.919375 0.207781 + -0.757773 2.14908 0.186115 0.485313 -0.695055 -0.530443 + -0.69311 2.17527 0.216759 0.527183 -0.447327 -0.722479 + -0.544957 2.17091 0.038111 0.107141 -0.970295 -0.216904 + -0.554508 2.1632 0.10366 0.00154227 -0.998902 0.0468303 + -0.556535 2.1815 0.171369 0.115546 -0.918586 0.377952 + -0.543336 2.21135 0.213068 0.0632389 -0.718486 0.692661 + -0.450826 2.24422 -0.055273 0.222567 -0.824429 -0.520366 + -0.452919 2.19833 0.021021 0.28435 -0.89334 -0.347977 + -0.452089 2.18241 0.091793 0.274449 -0.961493 -0.0144336 + -0.454116 2.2007 0.159503 0.179526 -0.951409 0.250184 + -0.35091 2.27944 -0.059467 0.124402 -0.87549 -0.46695 + -0.346556 2.25176 0.008467 0.169659 -0.931193 -0.322639 + -0.345726 2.23594 0.079281 0.245021 -0.955129 -0.166414 + -0.351772 2.22323 0.157091 0.26965 -0.958692 0.0905479 + -0.237927 2.33918 -0.172751 -0.370569 -0.680571 -0.632061 + -0.248223 2.30299 -0.114056 -0.209345 -0.868011 -0.450256 + -0.24387 2.27531 -0.046122 -0.364768 -0.565263 -0.739879 + -0.211494 2.26453 -0.064842 -0.471636 -0.774043 -0.422395 + -0.247164 2.25438 0.014126 -0.0198724 -0.992017 -0.124527 + -0.25074 2.40196 -0.217091 -0.402341 -0.603263 -0.688618 + -0.086589 2.32683 -0.287961 -0.549091 -0.661287 -0.511075 + -0.096886 2.29063 -0.229258 -0.489414 -0.719265 -0.493084 + -0.06451 2.27976 -0.248027 -0.42926 -0.740469 -0.517148 + -0.125703 2.38312 -0.315846 -0.585852 -0.625718 -0.515029 + -0.048528 2.35557 -0.371727 -0.710127 -0.64505 -0.282189 + -0.009414 2.2992 -0.343893 -0.586879 -0.685003 -0.431676 + -0.142339 2.44172 -0.358958 -0.649364 -0.575581 -0.497024 + -0.061399 2.38566 -0.424453 -0.783583 -0.558522 -0.272122 + -0.010689 2.2915 -0.381352 -0.456529 -0.844607 -0.279678 + -0.010689 2.2749 -0.3052 -0.635906 -0.734806 -0.235975 + -0.162727 2.49951 -0.404448 -0.677746 -0.547546 -0.490769 + -0.081787 2.44345 -0.469944 -0.817378 -0.506353 -0.274773 + -0.02356 2.3215 -0.43412 -0.580548 -0.800358 -0.149635 + 0.02356 2.3215 -0.43412 0.564381 -0.814872 -0.132127 + 0.010678 2.29141 -0.381402 0.488746 -0.844055 -0.220678 + -0.167976 2.5567 -0.450297 -0.717515 -0.45609 -0.526455 + -0.089769 2.48429 -0.520287 -0.85363 -0.409796 -0.321533 + -0.02356 2.31923 -0.513395 -0.481353 -0.837175 -0.259687 + 0.02356 2.31923 -0.513395 0.472986 -0.838855 -0.269458 + -0.180935 2.62069 -0.484529 -0.69222 -0.512026 -0.508587 + -0.102728 2.54819 -0.55457 -0.840253 -0.434519 -0.324297 + -0.031542 2.36016 -0.563687 -0.5556 -0.662305 -0.502654 + 0.031537 2.36008 -0.563737 0.554929 -0.662304 -0.503396 + -0.181846 2.66385 -0.532888 -0.725622 -0.652622 -0.218076 + -0.100078 2.57141 -0.606185 -0.823751 -0.557597 -0.102567 + -0.031542 2.40605 -0.616164 -0.56558 -0.684565 -0.459881 + 0.031537 2.40605 -0.616164 0.566461 -0.684378 -0.459075 + -0.154947 2.62717 -0.609756 -0.800089 -0.579183 -0.156221 + -0.073179 2.53464 -0.683094 -0.88261 -0.41589 -0.219168 + -0.028892 2.42927 -0.667781 -0.542946 -0.77979 -0.31167 + 0.02889 2.42927 -0.667781 0.543045 -0.779693 -0.311739 + -0.211292 2.9129 -0.796651 -0.738777 -0.513833 -0.436101 + -0.108198 2.80586 -0.905062 -0.843288 -0.391336 -0.368404 + -0.059065 2.74121 -0.955474 -0.878553 -0.347436 -0.327769 + -0.028892 2.44778 -0.725853 -0.752265 -0.65779 -0.0375527 + 0.02889 2.44778 -0.725853 0.762213 -0.647315 0.00380121 + -0.196517 3.1695 -1.0593 -0.560707 -0.505592 -0.655732 + -0.06391 3.39357 -1.63559 -0.849924 -0.334386 -0.407204 + -0.014777 3.32891 -1.68601 -0.390802 -0.120575 -0.912544 + -0.014777 2.65435 -0.998232 -0.936183 -0.257571 -0.239202 + 0.016514 2.25648 -0.879903 -0.982725 -0.119354 -0.14144 + -0.214432 3.22701 -1.07951 -0.116923 -0.655085 -0.746454 + -0.049135 3.83237 -1.95563 -0.465604 -0.380007 -0.799254 + -0.049135 3.65017 -1.89825 -0.594469 -0.345198 -0.726254 + 0.014767 3.32891 -1.68601 0.348821 -0.516646 -0.781921 + -0.014777 2.65435 -0.998232 0 -0.46053 -0.887644 + -0.120811 3.88058 -1.97892 0.38784 -0.755631 -0.527827 + -0.067051 3.88988 -1.97584 -0.0901157 -0.735746 -0.671236 + 0.049134 3.83237 -1.95562 0.497791 -0.480955 -0.721725 + 0.049134 3.65017 -1.89824 0.594319 -0.342208 -0.72779 + -0.084071 4.11489 -2.27757 0.139527 -0.330621 -0.933393 + -0.030311 4.12419 -2.27447 0.0489921 -0.443205 -0.89508 + 0.030311 4.1242 -2.27448 -0.0201643 -0.424243 -0.905324 + 0.067051 3.88988 -1.97584 0.388566 -0.705807 -0.592329 + 0.196516 3.1695 -1.0593 0.560764 -0.505454 -0.65579 + -0.144946 4.07823 -2.28167 0.276653 -0.300278 -0.912851 + -0.0953 4.14486 -2.27287 -0.104897 0.290836 -0.951005 + -0.030311 4.15293 -2.27666 -0.0222827 0.197133 -0.980124 + 0.030311 4.15293 -2.27666 0.0390194 0.181315 -0.982651 + -0.156175 4.10828 -2.27693 -0.175556 0.314576 -0.932857 + -0.096826 4.17112 -2.26095 -0.224933 0.570322 -0.790024 + -0.031836 4.17919 -2.26473 -0.0592718 0.561371 -0.825439 + 0.031829 4.17919 -2.26474 0.0604002 0.562218 -0.824781 + 0.095301 4.14486 -2.27287 0.0884889 0.282878 -0.955065 + -0.165785 4.13128 -2.26075 -0.413641 0.56131 -0.716821 + -0.094081 4.1974 -2.23568 -0.268107 0.738435 -0.618735 + -0.031836 4.20574 -2.23932 -0.0690251 0.755118 -0.651945 + 0.031829 4.20566 -2.23938 0.0701433 0.754455 -0.652593 + -0.163041 4.15757 -2.23549 -0.498186 0.665898 -0.555329 + -0.155107 4.20838 -2.17409 -0.489497 0.72553 -0.483735 + -0.090118 4.23945 -2.17751 -0.274891 0.810832 -0.516707 + -0.027872 4.2477 -2.1812 -0.0695179 0.832476 -0.549683 + 0.027872 4.2477 -2.1812 0.0698179 0.832529 -0.549564 + -0.231697 4.09259 -2.23614 -0.633747 0.603666 -0.483686 + -0.223763 4.1434 -2.17474 -0.629403 0.628153 -0.457467 + -0.142402 4.26511 -2.08456 -0.427982 0.781915 -0.453255 + -0.077413 4.2961 -2.08803 -0.270787 0.838045 -0.473661 + 0.016514 2.25648 -0.879903 0 -0.627193 0.778864 + -0.140414 4.31927 -1.99955 -0.381968 0.809692 -0.445532 + -0.077222 4.33603 -2.01459 -0.240827 0.869099 -0.432053 + -0.027872 4.30445 -2.0877 -0.070864 0.86523 -0.496341 + 0.027872 4.30445 -2.0877 0.0711782 0.865085 -0.49655 + -0.149779 4.33989 -1.94548 -0.343558 0.828861 -0.44154 + -0.086587 4.35656 -1.96056 -0.253029 0.849795 -0.462412 + -0.027682 4.3443 -2.01431 -0.0764981 0.897563 -0.434198 + 0.027676 4.34431 -2.01432 0.0734926 0.896408 -0.437094 + -0.191334 4.41115 -1.80271 -0.408517 0.694829 -0.591884 + -0.136083 4.4086 -1.85448 -0.373955 0.758172 -0.534166 + -0.090758 4.42195 -1.861 -0.243877 0.790964 -0.561159 + -0.027682 4.36549 -1.96582 -0.0864853 0.875305 -0.475774 + 0.027676 4.3655 -1.96584 0.0836663 0.876806 -0.473509 + -0.215009 4.44355 -1.76142 -0.516817 0.680783 -0.519071 + -0.135694 4.54426 -1.67186 -0.238937 0.724962 -0.646018 + -0.090369 4.55762 -1.67839 -0.247756 0.783397 -0.570005 + -0.031852 4.43088 -1.86627 -0.0892357 0.813982 -0.573994 + 0.031855 4.43088 -1.86627 0.0878237 0.813034 -0.575554 + -0.159369 4.57666 -1.63058 0.0128266 0.522972 -0.852254 + -0.144635 4.68977 -1.56729 0.330427 0.354524 -0.874717 + -0.088188 4.69572 -1.55799 0.0258261 0.351729 -0.935746 + -0.078099 4.62054 -1.59598 0.0842606 0.606381 -0.790698 + -0.031852 4.51372 -1.75675 -0.104115 0.793682 -0.599357 + -0.209419 4.58301 -1.66818 0.0254648 0.475088 -0.87957 + -0.194686 4.69612 -1.60488 0.10529 0.409634 -0.906153 + -0.147078 4.80597 -1.54415 0.121547 0.297353 -0.946999 + -0.090631 4.812 -1.5348 0.0247308 0.225096 -0.974023 + -0.256711 4.55582 -1.64747 -0.70818 0.409758 -0.57496 + -0.237951 4.66941 -1.59862 -0.620995 0.363117 -0.69463 + -0.203348 4.79753 -1.55013 -0.131802 0.363286 -0.922308 + -0.310484 4.52313 -1.57026 -0.802408 0.376124 -0.463327 + -0.291724 4.63672 -1.52141 -0.748005 0.226768 -0.62375 + -0.246614 4.77073 -1.54392 -0.517528 0.212484 -0.828864 + -0.31653 4.85085 -1.50488 -0.300161 0.0195752 -0.953688 + -0.231399 4.89724 -1.51704 -0.0665514 0.275791 -0.958911 + -0.336983 4.39134 -1.6486 -0.765878 0.441601 -0.467353 + -0.388448 4.37418 -1.57967 -0.742577 0.461037 -0.485823 + -0.361948 4.50597 -1.50133 -0.717274 0.342467 -0.606823 + -0.328191 4.64972 -1.48851 -0.549166 0.0699804 -0.832778 + -0.283081 4.78373 -1.51102 -0.575292 -0.107422 -0.810864 + -0.31438 4.29125 -1.78103 -0.86387 0.436561 -0.251282 + -0.366075 4.29584 -1.69158 -0.73677 0.496339 -0.459149 + -0.417436 4.27618 -1.63193 -0.731863 0.493108 -0.470341 + -0.447268 4.41163 -1.46274 -0.705631 0.34455 -0.619169 + -0.382639 4.23564 -1.74191 -0.710522 0.567209 -0.416452 + -0.434 4.21608 -1.68223 -0.776324 0.51782 -0.359422 + -0.484016 4.13257 -1.67439 -0.891224 0.375442 -0.254486 + -0.476256 4.31372 -1.51495 -0.859402 0.39074 -0.329773 + -0.406135 4.15745 -1.81468 -0.72814 0.576172 -0.371265 + -0.463537 4.10564 -1.77914 -0.785553 0.522746 -0.331123 + -0.513553 4.02222 -1.77126 -0.876295 0.4747 -0.0822618 + -0.534289 3.94934 -1.71543 -0.909097 0.267691 0.319193 + -0.508511 4.08163 -1.62556 -0.994447 0.0968672 -0.0411247 + -0.461047 4.0245 -1.90301 -0.753345 0.554199 -0.354027 + -0.518448 3.97269 -1.86747 -0.686953 0.644963 -0.33484 + -0.574631 3.9544 -1.82219 -0.746063 0.661437 -0.0767546 + -0.595367 3.88153 -1.76637 -0.744993 0.460924 0.482217 + -0.459077 3.95874 -2.0149 -0.71835 0.447079 -0.533005 + -0.518913 3.90592 -1.95821 -0.654694 0.517844 -0.550647 + -0.581128 3.8813 -1.91798 -0.593882 0.653541 -0.469243 + -0.63731 3.86293 -1.87275 -0.717521 0.660918 -0.219889 + -0.664799 3.81544 -1.7985 -0.745189 0.551675 0.374632 + -0.57649 3.82336 -2.00542 -0.199712 0.443968 -0.873503 + -0.638704 3.79866 -1.96524 -0.571018 0.687658 -0.448404 + -0.705771 3.78952 -1.8924 -0.674436 0.721331 -0.157537 + -0.733259 3.74194 -1.8182 -0.63824 0.657479 0.400462 + -0.620652 3.73389 -2.01265 -0.0117598 0.101754 -0.99474 + -0.705245 3.728 -1.99306 -0.441691 0.630195 -0.638563 + -0.772312 3.71886 -1.92022 -0.594243 0.758329 -0.267978 + -0.834258 3.66848 -1.83855 -0.566494 0.73125 0.379945 + -0.702049 3.68176 -2.02795 -0.0868603 0.26937 -0.959112 + -0.846738 3.62203 -1.9957 -0.435314 0.661417 -0.610761 + -0.910701 3.59059 -1.97905 -0.431854 0.726968 -0.533872 + -0.836274 3.68742 -1.90357 -0.502088 0.861533 -0.0752853 + -0.843542 3.57578 -2.0306 -0.215124 0.570767 -0.792431 + -0.948754 3.51836 -2.04094 -0.304793 0.657604 -0.688955 + -0.969458 3.54005 -2.00651 -0.349924 0.726273 -0.591677 + -0.96066 3.60365 -1.92487 -0.49498 0.849033 -0.184763 + -0.958644 3.58479 -1.8598 -0.478888 0.77011 0.421423 + -0.936293 3.46802 -2.08816 -0.271233 0.618736 -0.737291 + -1.05115 3.46115 -2.05065 -0.260596 0.671883 -0.693299 + -1.07186 3.48275 -2.01626 -0.307229 0.760497 -0.572062 + -1.01942 3.5531 -1.95232 -0.42653 0.804003 -0.414309 + -1.10742 3.52012 -1.86978 -0.317231 0.863952 0.39109 + -0.935497 3.43206 -2.11846 -0.067642 0.560242 -0.825562 + -1.21528 3.4251 -2.03881 -0.132946 0.343208 -0.929803 + -1.15462 3.4633 -1.99157 -0.297732 0.841876 -0.450112 + -1.10218 3.53356 -1.92768 -0.301341 0.938192 -0.170265 + -1.15429 3.37695 -2.03582 -0.298708 -0.215492 -0.929697 + -1.21141 3.39853 -2.0294 -0.114029 -0.2606 -0.958689 + -1.35098 3.38002 -2.02933 -0.0591391 -0.279084 -0.958444 + -1.35475 3.42672 -2.04083 -0.132516 0.383609 -0.913939 + -1.35795 3.44244 -2.01504 -0.114242 0.947434 -0.298861 + -1.21849 3.44081 -2.01302 -0.103024 0.899356 -0.424906 + -1.1188 3.26806 -2.04562 -0.341523 -0.0244298 -0.939556 + -1.28209 3.29816 -2.00954 -0.181955 -0.0719586 -0.98067 + -1.33921 3.31983 -2.00308 -0.0693361 -0.282772 -0.956678 + -1.34711 3.35337 -2.01998 0.010529 -0.386072 -0.922409 + -1.30321 3.226 -2.00016 -0.179517 -0.0636078 -0.981696 + -1.48786 3.25512 -1.9694 -0.125144 -0.239845 -0.962711 + -1.49576 3.28867 -1.9863 -0.131868 -0.287625 -0.948622 + -1.49195 3.33784 -1.99188 -0.265667 -0.144179 -0.953223 + -1.38414 3.14797 -1.98761 -0.127415 -0.00609528 -0.991831 + -1.4767 3.16306 -1.97075 -0.206201 0.0169054 -0.978363 + -1.70089 3.16095 -1.91709 -0.215306 -0.118051 -0.969385 + -1.68929 3.21364 -1.93175 -0.244063 -0.141248 -0.959418 + -1.68549 3.26274 -1.93739 -0.373132 0.133625 -0.918105 + -1.55622 2.89886 -1.96934 -0.187411 0.102336 -0.976936 + -1.68973 3.06898 -1.9184 -0.229259 0.0713814 -0.970745 + -1.8276 3.12336 -1.88178 -0.236696 -0.000425215 -0.971584 + -1.816 3.17597 -1.8965 -0.319094 0.0325694 -0.947163 + -1.81518 3.23462 -1.87768 -0.419443 0.33053 -0.845469 + -1.7707 2.97684 -1.9164 -0.133249 0.200992 -0.970488 + -1.84137 3.0456 -1.89209 -0.156951 0.206904 -0.96569 + -1.90588 3.15745 -1.86043 -0.444964 0.201379 -0.872613 + -1.90506 3.21602 -1.84167 -0.588689 0.37704 -0.715043 + -1.80062 2.79505 -1.96253 -0.133814 0.152216 -0.979247 + -1.8713 2.86373 -1.93829 -0.294856 0.185338 -0.937395 + -1.91965 3.07969 -1.87075 -0.373913 0.193058 -0.907148 + -1.98323 3.03521 -1.84151 -0.656245 0.193747 -0.729249 + -1.75757 2.67228 -1.98008 -0.124107 0.0468761 -0.991161 + -1.90627 2.66502 -1.94612 -0.391631 0.041007 -0.919208 + -1.93488 2.81925 -1.90905 -0.537433 0.129762 -0.833263 + -1.86195 2.54063 -1.95267 -0.284155 -0.0919722 -0.954357 + -1.98576 2.53832 -1.90667 -0.4989 -0.0543889 -0.864951 + -2.03739 2.64602 -1.85741 -0.635439 0.0875217 -0.767175 + -2.066 2.80025 -1.82034 -0.686532 0.126833 -0.715952 + -2.03558 3.02965 -1.78487 -0.723429 0.249492 -0.643743 + -1.82098 2.45495 -1.95305 -0.228883 -0.375661 -0.898049 + -1.94479 2.45264 -1.90706 -0.350374 -0.327981 -0.877307 + -2.05358 2.41321 -1.84278 -0.494072 -0.300003 -0.816021 + -2.1144 2.48689 -1.80179 -0.669233 -0.0502481 -0.741352 + -1.91748 2.39915 -1.88422 -0.207774 -0.650334 -0.730681 + -2.02627 2.35974 -1.81995 -0.176308 -0.659126 -0.731074 + -2.11269 2.29131 -1.74084 -0.260374 -0.68608 -0.679338 + -2.14522 2.32336 -1.74013 -0.58607 -0.341166 -0.734934 + -2.20604 2.39694 -1.69919 -0.702351 -0.10835 -0.703536 + -1.86741 2.36285 -1.84754 -0.0723934 -0.865948 -0.494868 + -1.99787 2.33884 -1.79176 0.0342845 -0.875306 -0.482353 + -2.0843 2.27043 -1.71266 0.357818 -0.920097 -0.159338 + -2.22028 2.2444 -1.62197 -0.315277 -0.83798 -0.44541 + -2.25281 2.27635 -1.62132 -0.622178 -0.432474 -0.652581 + -1.82591 2.34578 -1.80238 0.0589825 -0.99629 -0.0626645 + -1.95637 2.32169 -1.74665 0.180869 -0.983194 -0.0248368 + -2.07981 2.29329 -1.66846 0.498506 -0.787628 0.362124 + -2.19142 2.26339 -1.55927 0.585489 -0.685228 0.433203 + -2.19591 2.24044 -1.60352 0.265559 -0.960946 0.0778554 + -1.62473 2.36295 -1.77832 -0.0650082 -0.893835 0.443659 + -1.79798 2.36518 -1.74398 0.170597 -0.813671 0.55573 + -1.92422 2.34637 -1.7204 0.339186 -0.744728 0.574745 + -2.04766 2.31797 -1.64221 0.368669 -0.738623 0.564374 + -2.09623 2.36604 -1.57067 0.571067 -0.625583 0.531534 + -1.65389 2.43073 -1.67692 -0.124636 -0.739206 0.661847 + -1.78809 2.42361 -1.69979 0.111038 -0.647294 0.754109 + -1.91434 2.40472 -1.67626 0.369514 -0.597183 0.711922 + -1.96291 2.45279 -1.60472 0.453011 -0.483146 0.749234 + -1.55002 2.42859 -1.6506 -0.319291 -0.734046 0.599359 + -1.6553 2.55664 -1.57659 -0.235761 -0.578077 0.781181 + -1.7895 2.54952 -1.59947 0.049477 -0.51376 0.856506 + -1.98412 2.60114 -1.53767 0.425468 -0.355264 0.832325 + -2.19343 2.3614 -1.44902 0.658474 -0.437393 0.612454 + -1.4176 2.48106 -1.51169 -0.572434 -0.533142 0.62296 + -1.53345 2.52886 -1.54308 -0.381702 -0.58713 0.71385 + -1.61261 2.75404 -1.41731 -0.341463 -0.526345 0.778694 + -1.81071 2.69787 -1.53241 -0.0531796 -0.461109 0.885749 + -1.42262 2.64013 -1.379 -0.646269 -0.448759 0.617213 + -1.49076 2.72627 -1.3838 -0.450147 -0.516117 0.728692 + -1.42417 2.85621 -1.25266 -0.456849 -0.454836 0.764469 + -1.6557 2.9089 -1.34153 -0.371355 -0.448269 0.813112 + -1.8538 2.85272 -1.45663 -0.0043441 -0.48191 0.87621 + -1.33952 2.57633 -1.3355 -0.665193 -0.432081 0.608954 + -1.32552 2.6894 -1.25595 -0.644431 -0.334877 0.687435 + -1.35603 2.76998 -1.24792 -0.596201 -0.342642 0.726044 + -1.26461 2.50664 -1.301 -0.751112 -0.319782 0.577556 + -1.25061 2.61971 -1.22144 -0.662114 -0.340955 0.66735 + -1.24715 2.75846 -1.16056 -0.644224 -0.279814 0.711814 + -1.27766 2.83913 -1.15248 -0.656332 -0.213873 0.723524 + -1.26369 2.93221 -1.11991 -0.543691 -0.377198 0.749748 + -1.20022 2.30514 -1.29638 -0.829237 -0.227693 0.510413 + -1.20076 2.44973 -1.23243 -0.807709 -0.211129 0.550483 + -1.18193 2.61173 -1.15402 -0.757177 -0.231489 0.610816 + -1.17847 2.75048 -1.09314 -0.697503 -0.188561 0.691328 + -1.15569 2.85747 -1.04705 -0.648235 -0.178146 0.740307 + -1.15642 2.2665 -1.23506 -0.768634 -0.25871 0.585039 + -1.13711 2.35673 -1.17514 -0.742867 -0.261386 0.6163 + -1.11549 2.42714 -1.11729 -0.705038 -0.26208 0.658965 + -1.17913 2.52014 -1.17457 -0.82744 -0.163809 0.537131 + -1.10261 2.61414 -1.04439 -0.678291 -0.162712 0.716552 + -1.15994 2.16083 -1.28762 -0.779226 -0.245919 0.576481 + -1.07329 2.23459 -1.16719 -0.602811 -0.330372 0.726273 + -1.05398 2.32482 -1.10727 -0.562054 -0.346554 0.750996 + -1.02917 2.41408 -1.05708 -0.520297 -0.309529 0.795916 + -1.09981 2.52255 -1.06495 -0.684803 -0.222119 0.694052 + -1.10748 2.05776 -1.27712 -0.653928 -0.306117 0.691861 + -1.09549 2.15062 -1.22155 -0.626568 -0.318646 0.711251 + -0.964186 2.25183 -1.08325 -0.534239 -0.306893 0.787658 + -0.93618 2.33064 -1.03375 -0.49618 -0.325829 0.804761 + -0.911368 2.41982 -0.983609 -0.422087 -0.240743 0.874005 + -1.12102 1.97167 -1.3234 -0.710353 -0.293973 0.639515 + -1.01448 2.0909 -1.18991 -0.641829 -0.247052 0.725962 + -0.986391 2.16787 -1.13762 -0.615956 -0.299513 0.728622 + -0.937618 2.10507 -1.11184 -0.461012 -0.290509 0.838494 + -0.907448 2.17665 -1.07843 -0.347757 -0.346562 0.871183 + -1.09753 1.87136 -1.35425 -0.816195 -0.192413 0.544796 + -1.02801 2.00471 -1.23623 -0.738019 -0.181504 0.649911 + -0.992937 1.94976 -1.19306 -0.70954 -0.0574575 0.702319 + -0.965703 2.0281 -1.16413 -0.618031 -0.17955 0.765375 + -1.06221 1.92259 -1.27918 -0.889397 0.073742 0.451149 + -1.02713 1.86773 -1.23596 -0.792379 -0.0446357 0.608394 + -0.99815 1.78121 -1.21072 -0.679744 0.0880096 0.72815 + -0.970916 1.85955 -1.1818 -0.64461 0.0236216 0.764147 + -0.944993 1.94571 -1.17164 -0.49636 -0.0377188 0.867297 + -1.03288 1.78952 -1.25311 -0.915521 -0.0604097 0.397709 + -1.01446 1.69188 -1.20979 -0.879753 0.0666659 0.470735 + -1.0114 1.59751 -1.17953 -0.998089 -0.00594584 -0.061504 + -0.995087 1.68693 -1.18041 -0.933843 0.191168 0.30231 + -0.973838 1.76895 -1.17167 -0.930113 0.206864 0.303474 + -1.03052 1.69812 -1.27639 -0.955703 -0.268696 0.120138 + -1.0202 1.61368 -1.22695 -0.951187 -0.250823 -0.179811 + -1.00583 1.52632 -1.17682 -0.909522 -0.337774 -0.242235 + -1.01377 1.61179 -1.12827 -0.966765 0.0807322 0.242585 + -0.995136 1.68804 -1.12174 -0.936915 0.198063 0.288029 + -1.02216 1.67959 -1.28351 -0.884993 -0.448046 0.126656 + -0.994441 1.63158 -1.25995 -0.884773 -0.448254 0.127458 + -0.800745 2.16722 0.143497 -0.266488 -0.953999 -0.13737 + -0.757773 2.14908 0.186115 -0.266484 -0.954 -0.137366 + -0.977225 1.46075 -1.16166 -0.540388 -0.833129 -0.117799 + -1.00821 1.5406 -1.12556 -0.819157 -0.235047 0.523196 + -0.922127 1.44708 -1.17038 -0.25698 -0.513093 -0.818961 + -0.956138 1.59387 -1.09763 -0.188993 -0.184014 0.964583 + -0.989636 1.62409 -1.09438 -0.525167 -0.061513 0.848773 + -0.905604 1.68879 -1.07423 -0.27887 -0.713951 0.642266 + -0.971002 1.70035 -1.08785 -0.509734 -0.180965 0.841084 + -0.948906 1.69815 -1.06444 -0.61871 -0.785323 -0.0216053 + -0.797461 1.74686 -1.05502 0.348302 -0.398457 0.84848 + -0.837016 1.7382 -1.03661 0.775411 -0.49829 0.387873 + -0.901206 1.61571 -1.00085 0.715941 -0.513326 -0.473208 + -0.854714 1.6674 -0.986595 0.88732 -0.454064 0.080551 + -0.763463 1.84218 -1.03071 0.515865 -0.435311 0.737826 + -0.817107 1.82925 -0.992113 0.72016 -0.382189 0.579052 + -0.848173 1.81015 -0.954435 0.831705 -0.250724 0.495383 + -0.88578 1.6483 -0.948908 0.29959 -0.669645 0.679574 + -0.901206 1.61571 -1.00085 0.693105 -0.685132 0.224053 + -0.826709 1.95084 -0.893124 0.736538 -0.417882 0.531871 + -0.882893 1.77276 -0.908069 0.867289 -0.280717 0.411106 + -0.912574 1.69183 -0.92031 0.393387 -0.722894 0.568042 + -0.943193 1.68178 -0.955688 -0.850662 -0.47655 0.22198 + -0.9164 1.63825 -0.984295 -0.695892 -0.656655 0.290755 + -0.901206 1.61571 -1.00085 -0.425502 -0.704292 0.568261 + -0.861429 1.91345 -0.846758 0.889291 -0.274612 0.365719 + -0.893682 1.87478 -0.783184 0.952703 -0.194267 0.233706 + -0.901912 1.77293 -0.848373 0.938045 -0.280433 0.203542 + -0.931592 1.69201 -0.860605 0.617175 -0.764469 0.186231 + -0.942828 1.68755 -0.866885 0.286173 -0.949441 0.129099 + -0.897836 2.0262 -0.669447 0.954947 -0.251594 0.157406 + -0.906177 1.85878 -0.71386 0.857558 -0.509565 0.0702668 + -0.914407 1.75692 -0.77904 0.971355 -0.133928 0.196298 + -0.923086 1.71773 -0.754359 0.624715 -0.644696 0.440565 + -0.934322 1.71336 -0.760589 -0.598461 -0.707358 0.376152 + -0.869782 2.14179 -0.573461 0.888404 -0.447224 0.103582 + -0.910296 1.95936 -0.588676 0.961004 -0.229764 0.153884 + -0.882242 2.07495 -0.492681 0.941447 -0.330552 0.0664271 + -0.915054 2.03059 -0.423643 0.703566 -0.688659 0.175335 + -0.833842 2.20954 -0.4174 0.843498 -0.529591 0.0896856 + -0.866654 2.16518 -0.348362 0.884182 -0.453976 0.110124 + -0.779985 2.29664 -0.306655 0.78012 -0.618285 0.0955808 + -0.820451 2.25574 -0.240823 0.775963 -0.622929 0.0992019 + -0.84198 2.23368 -0.221018 0.82061 -0.563294 0.0964302 + -0.899356 2.11045 -0.280376 0.81514 -0.559007 0.151852 + -0.848062 2.25593 0.053241 0.726813 -0.686831 -0.00237746 + -0.86959 2.23379 0.072996 0.867972 -0.492529 -0.0635625 + -0.874682 2.17887 -0.153082 0.93638 -0.34992 0.0273723 + -0.872962 2.20626 0.169881 0.949076 -0.200427 -0.243071 + -0.878053 2.15134 -0.056197 0.966319 -0.249561 -0.0628171 + -0.892074 2.13502 -0.102131 0.440964 -0.893313 0.0868521 + -0.923579 2.11023 -0.208393 0.514534 -0.830556 0.213148 + -0.9677 2.00174 -0.371486 0.504991 -0.852363 0.135872 + -0.828119 2.24167 0.237951 0.389455 -0.912287 -0.12672 + -0.822356 2.22867 0.269664 0.624984 -0.414468 -0.661522 + -0.855557 2.12347 0.166472 0.95707 0.0074767 -0.289759 + -0.869578 2.10715 0.120537 0.52764 -0.815524 -0.237731 + -0.928957 2.14091 -0.013939 0.514104 -0.828587 -0.221675 + -0.960462 2.11612 -0.120201 0.114763 -0.949988 0.290435 + -0.689714 2.22859 0.3148 -0.221485 -0.916279 0.333731 + -0.645114 2.2745 0.37449 -0.197541 -0.70019 0.686084 + -0.549107 2.2493 0.375134 -0.182217 -0.884402 0.429687 + -0.504507 2.2952 0.434824 -0.249365 -0.967644 -0.0384942 + -0.695478 2.2415 0.283037 -0.290957 -0.953189 0.0823044 + -0.656684 2.21392 0.282414 -0.340352 -0.706998 0.619931 + -0.570774 2.244 0.324112 0.0107686 -0.880301 0.474292 + -0.451134 2.24204 0.399915 -0.239691 -0.85309 -0.463449 + -0.414515 2.17767 0.436803 -0.770046 -0.633828 -0.0727464 + -0.813755 2.21001 0.167176 -0.653682 -0.725331 0.215857 + -0.774962 2.18234 0.16651 -0.662782 -0.387812 0.640564 + -0.672983 2.13364 0.236662 -0.234453 -0.678889 0.695803 + -0.587072 2.16372 0.27836 0.433978 -0.883631 0.17567 + -0.4728 2.23674 0.348895 -0.0690611 -0.964036 -0.256641 + -0.848062 2.25593 0.053241 -0.899549 -0.436635 0.0126956 + -0.833698 2.22428 -0.017537 -0.972286 -0.201425 -0.118696 + -0.800745 2.16722 0.143497 -0.673742 0.668008 0.31597 + -0.779985 2.29664 -0.306655 -0.961153 -0.268991 -0.0618751 + -0.793376 2.25035 -0.483283 -0.94756 -0.284124 0.146298 + -0.905691 2.11918 0.074307 0.960751 -0.0657779 -0.269501 + -0.927779 1.73612 -0.733023 -0.0606392 -0.762523 0.644113 + -0.910296 1.95936 -0.588676 0.99301 -0.0738874 0.0920415 + -0.800745 2.16722 0.143497 -0.607963 -0.149967 0.779673 + -0.698766 2.11852 0.21365 -0.562192 -0.244004 0.790191 + -0.634104 2.14471 0.244295 0.483673 -0.72715 -0.487148 + -0.49705 2.29366 0.303292 0.132551 -0.898236 -0.419048 + -0.417636 2.26287 0.309421 -0.558912 -0.726121 -0.400456 + -0.393386 2.20586 0.354973 -0.751536 -0.583386 -0.307984 + -0.368257 2.13837 0.383673 -0.842988 -0.492074 -0.217336 + -0.544082 2.27465 0.269227 0.636425 -0.625105 -0.451892 + -0.521412 2.29176 0.261582 0.198375 -0.913628 0.354868 + -0.436632 2.29198 0.270599 -0.349242 -0.918979 0.183051 + -0.341659 2.14994 0.304622 -0.590922 -0.461859 -0.661436 + -0.323066 2.06909 0.320072 -0.787551 -0.396245 -0.471969 + -0.458556 2.21157 0.222087 -0.0816158 -0.864391 0.496151 + -0.360655 2.17914 0.26585 -0.594786 -0.739531 -0.315156 + -0.757773 2.14908 0.186115 0.425881 0.00712076 -0.904751 + -0.356213 2.23418 0.219722 -0.0791444 -0.906976 -0.413679 + -0.255573 2.2155 0.158679 -0.472097 -0.709327 -0.523431 + -0.260015 2.16046 0.204812 -0.546939 -0.531354 -0.646932 + -0.25963 2.10261 0.248802 -0.628203 -0.369867 -0.684514 + -0.25321 2.24159 0.091878 -0.182373 -0.952253 -0.244857 + -0.159262 2.21968 0.033037 -0.309951 -0.870516 -0.382272 + -0.154596 2.18535 0.100294 -0.405122 -0.706198 -0.580655 + -0.154212 2.12742 0.144235 -0.42478 -0.510078 -0.747918 + -0.156899 2.24578 -0.033764 -0.155742 -0.968762 -0.192988 + -0.082695 2.24703 -0.071537 -0.022138 -0.989172 -0.145084 + -0.081395 2.22044 -0.002884 0.0259693 -0.913436 -0.406154 + -0.07673 2.18603 0.064323 -0.0808295 -0.830636 -0.550918 + -0.154394 2.249 -0.110343 -0.250281 -0.94924 -0.190531 + -0.08019 2.25017 -0.148166 0.0928859 -0.990571 -0.100701 + -0.02725 2.24172 -0.024536 0.105285 -0.945042 -0.309532 + -0.02595 2.21513 0.044117 0.183362 -0.83223 -0.523231 + -0.02595 2.16442 0.105158 0.126649 -0.73229 -0.669112 + -0.118724 2.25914 -0.189312 -0.644393 -0.505473 -0.573807 + -0.070071 2.25744 -0.21357 -0.0346311 -0.950151 -0.309862 + -0.02725 2.26148 -0.094764 0.204235 -0.958795 -0.197484 + 0.02725 2.26148 -0.094764 -0.112465 -0.980759 -0.159571 + 0.02725 2.24172 -0.024536 -0.0973461 -0.940416 -0.325793 + -0.015856 2.27806 -0.272286 -0.692326 -0.674947 -0.255208 + -0.017131 2.26876 -0.160169 0.132692 -0.991072 -0.0129884 + 0.017132 2.26876 -0.160169 -0.0970983 -0.995025 0.0222771 + 0.08019 2.25017 -0.148166 -0.0992598 -0.991427 -0.0849676 + 0.082695 2.24703 -0.071537 -0.0676404 -0.980529 -0.184354 + -0.017131 2.25377 -0.233603 -0.672001 -0.739387 -0.0414943 + -0.017131 2.26876 -0.160169 -0.999184 0.0395704 -0.00807802 + 0.010678 2.2749 -0.3052 0.640246 -0.728935 -0.24236 + 0.017132 2.25377 -0.233603 0.12652 -0.980525 -0.150209 + 0.070072 2.25744 -0.21357 0.131999 -0.946954 -0.293008 + 0.118717 2.25914 -0.18932 0.644411 -0.505444 -0.573813 + 0.154394 2.249 -0.110343 0.248355 -0.948936 -0.194524 + 0.009403 2.2992 -0.343893 0.907328 -0.39374 -0.147391 + 0.015857 2.27806 -0.272286 0.680649 -0.659772 -0.318463 + 0.064503 2.27977 -0.248036 0.429281 -0.740471 -0.517127 + 0.211487 2.26453 -0.064851 0.47178 -0.773808 -0.422663 + 0.247164 2.25439 0.014118 0.0696504 -0.988172 -0.136617 + 0.048517 2.35557 -0.371727 0.704882 -0.656029 -0.269754 + 0.125703 2.38312 -0.315846 0.581502 -0.618836 -0.528107 + 0.086589 2.32683 -0.287961 0.542128 -0.665705 -0.512771 + 0.061399 2.38566 -0.424453 0.808042 -0.548472 -0.215049 + 0.142328 2.44172 -0.358949 0.638228 -0.585929 -0.499351 + 0.25074 2.40196 -0.217091 0.412862 -0.596397 -0.688372 + 0.237927 2.33919 -0.172759 0.374804 -0.684412 -0.625381 + 0.081787 2.44345 -0.469944 0.821557 -0.498454 -0.276745 + 0.162716 2.49951 -0.404439 0.672959 -0.54307 -0.502196 + 0.267365 2.46057 -0.260203 0.376942 -0.624658 -0.683899 + 0.364503 2.38729 -0.16808 -0.147701 -0.662525 -0.734333 + 0.089764 2.48429 -0.520287 0.852656 -0.40991 -0.323962 + 0.167976 2.5567 -0.450297 0.720992 -0.452007 -0.525223 + 0.266044 2.51805 -0.310551 0.425678 -0.588121 -0.687686 + 0.360602 2.49977 -0.271703 -0.252078 -0.667705 -0.700447 + 0.361923 2.4423 -0.221354 -0.200971 -0.667831 -0.716667 + 0.102723 2.54819 -0.55457 0.84008 -0.434995 -0.324106 + 0.180935 2.62069 -0.484529 0.693794 -0.514081 -0.504352 + 0.271304 2.57523 -0.3564 0.386137 -0.616703 -0.685986 + 0.100077 2.57141 -0.606185 0.823852 -0.557405 -0.102796 + 0.181855 2.66385 -0.532888 0.313529 -0.948602 0.0430502 + 0.26152 2.62783 -0.410106 0.378469 -0.656392 -0.652618 + 0.340041 2.61075 -0.377513 -0.233545 -0.687877 -0.687228 + 0.349826 2.55815 -0.323807 -0.258667 -0.689309 -0.676716 + 0.073178 2.53464 -0.683094 0.882518 -0.416255 -0.218848 + 0.154956 2.62717 -0.609756 0.790133 -0.588326 -0.171937 + 0.262439 2.671 -0.458472 0.481221 -0.592234 -0.646286 + 0.059054 2.74121 -0.955474 0.878544 -0.347442 -0.327789 + 0.108192 2.80586 -0.905062 0.84321 -0.391443 -0.368469 + 0.25805 2.7342 -0.501336 0.575171 -0.552291 -0.603451 + 0.016514 2.25648 -0.879903 0.997942 -0.0142128 -0.0625224 + -0.9191 1.77532 -0.757703 0.863215 -0.272616 0.424901 + -0.927779 1.73612 -0.733023 0.965021 -0.051872 0.256989 + -0.994441 1.63158 -1.25995 -0.485316 -0.448721 -0.750412 + -0.699814 1.69538 -1.32206 0.90454 -0.205812 0.373428 + -0.704309 1.62413 -1.34845 0.818599 -0.454673 -0.350952 + -0.692772 1.67708 -1.37616 0.976357 -0.216071 -0.00636239 + -0.699505 1.64767 -1.36081 0.120086 -0.480725 -0.86861 + -0.711042 1.59463 -1.33315 0.233098 -0.489048 -0.840534 + -0.719793 1.60413 -1.3202 0.761892 -0.349214 0.5455 + -0.711042 1.59463 -1.33315 0.751826 -0.174539 0.63584 + -0.748272 1.58103 -1.31759 0.447718 -0.677802 0.58321 + -0.761571 1.58121 -1.3069 0.188617 -0.973236 0.131283 + -0.848896 1.59106 -1.29936 -0.0676339 -0.997591 0.015436 + -0.862195 1.59124 -1.28868 -0.0867424 -0.995577 -0.036101 + -0.759733 1.60831 -1.24384 0.640418 -0.650066 0.408998 + -0.801512 1.58539 -1.23054 0.285219 -0.890828 0.353661 + -0.977933 1.61141 -1.18422 0.548729 -0.595782 -0.586464 + -0.946964 1.61536 -1.27285 -0.462913 -0.884374 -0.059952 + -0.994441 1.63158 -1.25995 0.956751 0.248319 -0.151541 + -0.955511 1.48158 -1.19533 0.963046 0.15508 -0.22021 + -1.00886 1.67572 -1.2742 -0.651743 -0.660064 0.373559 + -1.02216 1.67959 -1.28351 -0.574611 -0.57638 0.581041 + -0.710918 1.55531 -1.66445 -0.0168882 -0.92895 -0.369821 + -0.698533 1.56096 -1.65062 0.562251 -0.808668 0.173002 + -0.738069 1.5453 -1.62151 0.133805 -0.977218 -0.164746 + -0.765583 1.55311 -1.63143 -0.167649 -0.857189 -0.48695 + -0.695642 1.56591 -1.6828 -0.777786 -0.411159 -0.475391 + -0.666623 1.5694 -1.74905 -0.761908 0.572093 -0.303654 + -0.780274 1.54606 -1.61161 -0.137724 -0.915593 -0.377784 + -0.70293 1.57108 -1.72015 -0.0398422 -0.994837 -0.0933409 + -0.67746 1.59199 -1.83878 0.508764 -0.797592 -0.324047 + -0.72052 1.57168 -1.769 0.0946379 -0.986478 -0.133807 + -0.733866 1.5759 -1.7889 -0.119709 -0.950796 -0.285755 + -0.690805 1.59621 -1.85868 0.135136 -0.854781 -0.501087 + -0.644552 1.69844 -1.93855 0.851291 -0.416087 -0.319648 + -0.679972 1.61529 -1.89452 0.529116 -0.808327 -0.258155 + -0.657013 1.72041 -1.98721 0.807873 -0.434723 -0.397941 + -0.666892 1.74132 -2.03102 0.736366 -0.464695 -0.491755 + -0.618961 1.9043 -2.05851 0.853878 -0.396202 -0.337516 + -0.692433 1.63726 -1.94318 -0.180185 -0.91296 -0.366112 + -0.692433 1.63726 -1.94318 0.717053 -0.53926 -0.441625 + -0.575139 2.01336 -2.097 0.763209 -0.617583 -0.190008 + -0.506492 2.07895 -2.15301 0.531751 -0.838599 -0.118292 + -0.248157 2.16615 -2.10865 0.108474 -0.934503 -0.339024 + -0.236264 2.17147 -2.12526 -0.0254974 -0.970204 -0.240943 + -0.211458 2.17238 -2.14524 -0.139532 -0.979493 -0.14534 + -0.270663 2.18392 -2.22823 -0.00269414 -0.99329 -0.115618 + -0.239822 2.18818 -2.24701 -0.081898 -0.992073 -0.095312 + -0.146993 2.16015 -2.15325 -0.104751 -0.980314 -0.16737 + -0.119333 2.16347 -2.1654 0.0441472 -0.975183 -0.216954 + -0.314309 2.19617 -2.35364 0.0538928 -0.997682 0.0415453 + -0.268684 2.19336 -2.36638 -0.0585484 -0.995402 0.0758044 + -0.206692 2.18146 -2.25856 -0.157522 -0.986015 -0.0544196 + -0.321355 2.17099 -2.48582 0.0353566 -0.964084 0.263235 + -0.27985 2.16796 -2.50339 -0.0479251 -0.958592 0.280722 + -0.230059 2.1897 -2.37884 -0.128191 -0.98699 0.0970404 + -0.168067 2.17779 -2.27101 -0.0113098 -0.996495 -0.082884 + -0.364216 2.11959 -2.62621 0.160657 -0.921714 0.353033 + -0.322711 2.11657 -2.64377 0.113074 -0.942002 0.315985 + -0.236111 2.15775 -2.5155 -0.0391953 -0.964627 0.260688 + -0.18632 2.17957 -2.3909 -0.0550696 -0.992989 0.104592 + -0.450585 2.06243 -2.70541 0.449636 -0.837078 0.311654 + -0.409212 2.06633 -2.72435 0.292901 -0.8983 0.327514 + -0.370329 2.07271 -2.7538 0.271262 -0.917557 0.2907 + -0.290031 2.11226 -2.67471 0.0813537 -0.955006 0.285209 + -0.481281 2.05005 -2.67016 0.609404 -0.753512 0.246668 + -0.496392 2.00565 -2.75105 0.653384 -0.714778 0.249365 + -0.458077 2.02381 -2.7897 0.484304 -0.818918 0.307934 + -0.419195 2.03027 -2.8191 0.380277 -0.876176 0.29615 + -0.527088 1.99318 -2.71585 0.787791 -0.442397 0.428567 + -0.526564 1.96599 -2.80317 0.736628 -0.61928 0.271795 + -0.48825 1.98423 -2.84176 0.610204 -0.76504 0.205827 + -0.548842 1.974 -2.67123 0.795435 -0.593333 0.123447 + -0.593047 1.92413 -2.62486 0.794315 -0.596341 0.115931 + -0.531743 1.92998 -2.84378 0.823273 -0.5396 0.176218 + -0.51372 1.95601 -2.89967 0.730385 -0.667414 0.145246 + -0.481219 1.9705 -2.93378 0.455656 -0.873991 0.168869 + -0.455748 1.99864 -2.87592 0.439666 -0.871288 0.218064 + -0.374755 2.03635 -2.85183 0.282487 -0.906706 0.313186 + -0.540993 1.91304 -2.85124 0.841803 -0.521316 0.139993 + -0.52297 1.93907 -2.90713 0.825938 -0.544307 0.146821 + -0.508552 1.94894 -2.92703 0.636434 -0.757467 0.145582 + -0.507767 1.95508 -2.96886 0.213725 -0.97544 -0.0532826 + -0.456696 1.97413 -2.95585 0.286324 -0.869506 0.402465 + -0.411309 2.00472 -2.90865 0.31193 -0.904832 0.28979 + -0.334863 2.03597 -2.88316 0.261405 -0.917724 0.299082 + -0.337649 2.06849 -2.78469 0.191887 -0.933404 0.30321 + -0.517922 1.95242 -2.95826 0.1088 -0.983819 -0.14235 + -0.517137 1.95856 -3.00009 0.053763 -0.990498 -0.126585 + -0.483244 1.9587 -2.99094 0.0992161 -0.983626 0.150452 + -0.462167 1.9588 -2.9683 -0.337711 -0.517515 0.786212 + -0.436121 1.96423 -2.9789 0.412128 -0.537216 0.7359 + -0.418222 1.97945 -2.97868 0.274929 -0.612696 0.740957 + -0.372835 2.01005 -2.93147 0.285233 -0.913547 0.289955 + -0.288907 2.03914 -2.91625 0.185164 -0.93607 0.299144 + -0.297757 2.06811 -2.81603 0.14378 -0.946268 0.289663 + -0.391961 1.97369 -2.9829 0.119732 -0.155226 0.980596 + -0.374062 1.98892 -2.98267 0.245697 -0.527914 0.812982 + -0.326879 2.01322 -2.96456 0.261368 -0.902153 0.343229 + -0.243345 2.03958 -2.93603 0.0675455 -0.943215 0.325244 + -0.262208 2.06183 -2.84155 0.0815764 -0.958129 0.27447 + -0.3657 1.98304 -2.9843 0.0994869 -0.131514 0.986309 + -0.26893 2.09855 -2.72197 0.0653673 -0.954627 0.29054 + -0.21501 2.14395 -2.5628 0.0811233 -0.956504 0.280212 + -0.176994 2.15529 -2.54404 0.154638 -0.964924 0.212152 + -0.233381 2.09228 -2.74749 0.0991773 -0.957212 0.271862 + -0.195365 2.10352 -2.72877 0.199717 -0.947145 0.251056 + -0.216646 2.06227 -2.86133 0.164678 -0.944947 0.282767 + -0.151773 2.11226 -2.73851 0.288032 -0.927812 0.237069 + -0.128718 2.16379 -2.55436 0.256177 -0.952474 0.164822 + -0.098774 2.18937 -2.41326 0.121431 -0.991376 0.0492831 + -0.14705 2.18087 -2.40294 0.118078 -0.990372 0.072249 + -0.188123 2.03604 -2.94528 0.166006 -0.932256 0.321465 + -0.173054 2.07101 -2.87106 0.255078 -0.916478 0.308226 + -0.126505 2.07915 -2.88576 0.384142 -0.869572 0.310288 + -0.120238 2.11383 -2.78023 0.435674 -0.869701 0.231964 + -0.284915 2.01668 -2.98715 0.139171 -0.854689 0.500138 + -0.229693 2.01313 -2.99641 0.110544 -0.955673 0.272891 + -0.21399 2.01164 -3.01763 0.0319108 -0.947525 0.318084 + -0.141573 2.04417 -2.95997 0.285424 -0.888593 0.359076 + -0.332098 1.99229 -3.00532 0.233097 -0.965953 0.112253 + -0.313287 2.00102 -3.03582 0.278906 -0.951632 0.12887 + -0.297585 1.99953 -3.05705 0.107263 -0.990981 0.0803216 + -0.3657 1.98304 -2.9843 0.418968 0.366156 0.8309 + 1.14799 1.74733 -2.15643 0.928722 -0.304044 -0.212207 + 1.13429 1.77906 -2.24399 0.815696 -0.46777 -0.34034 + 1.15743 1.91745 -2.19529 0.765258 0.153009 -0.625275 + 1.20667 2.0536 -2.0707 0.916496 -0.0594858 -0.395597 + 1.24921 2.14475 -2.01399 0.800373 -0.233246 -0.552267 + 1.11601 1.94174 -2.22355 0.73333 0.272877 -0.622708 + 1.13715 2.12449 -2.13089 0.641395 0.256459 -0.723077 + 1.18765 2.08689 -2.10077 0.750226 0.168115 -0.639451 + 1.11354 1.8732 -2.26963 0.921117 0.202597 -0.332413 + 1.02199 2.18507 -2.21342 0.778208 0.262519 -0.570505 + 1.09573 2.14878 -2.15916 0.644863 0.242643 -0.724759 + 1.10694 2.28195 -2.11301 0.632316 0.157299 -0.758573 + 1.14176 2.21318 -2.09731 0.651887 0.190926 -0.733887 + 1.08587 1.87405 -2.34371 0.92966 0.244765 -0.275358 + 1.01952 2.11653 -2.25951 0.885084 0.279305 -0.372311 + 1.10662 1.77992 -2.31807 0.836646 -0.450327 -0.311815 + 1.07554 1.80925 -2.43787 0.952325 0.203261 -0.227515 + 1.06243 1.89044 -2.4139 0.936046 0.272328 -0.222833 + 0.996072 2.13292 -2.3297 0.909632 0.327286 -0.255837 + 1.09318 1.74847 -2.21301 0.471848 -0.865716 -0.167019 + 1.05909 1.73242 -2.2304 0.489568 -0.858959 -0.150045 + 1.07252 1.76395 -2.33541 0.512921 -0.821206 -0.250063 + 1.07554 1.80925 -2.43787 0.574721 -0.75459 -0.316684 + 1.06729 1.76693 -2.35678 0.655905 -0.708823 -0.259536 + 1.00205 1.70979 -2.27861 0.093853 -0.847204 -0.522913 + 1.12953 1.76009 -2.17713 0.386969 -0.900022 -0.200537 + 1.10326 1.7364 -2.1069 0.313372 -0.931716 -0.183587 + 1.0669 1.72478 -2.14277 0.420731 -0.901772 -0.0989536 + 1.03738 1.71233 -2.1638 0.453112 -0.888217 -0.0758886 + 1.00727 1.7068 -2.25724 0.400765 -0.898458 -0.179334 + 1.15072 1.77302 -2.19552 0.351682 -0.906842 -0.232286 + 1.14596 1.75405 -2.12866 -0.537992 -0.790792 -0.291912 + 1.11534 1.73461 -2.08659 0.0192434 -0.903832 -0.427454 + 1.01531 1.69599 -2.04791 0.265646 -0.96066 -0.0810202 + 0.985789 1.68354 -2.06893 0.213289 -0.976622 0.0267796 + 0.985572 1.68671 -2.19063 0.186134 -0.974207 -0.127576 + 1.14514 1.73694 -2.10343 -0.789833 -0.484626 -0.375901 + 1.11452 1.7175 -2.06136 -0.12554 -0.820661 -0.557454 + 1.02739 1.69411 -2.02766 0.0801468 -0.921829 -0.379221 + 0.891333 1.6773 -1.97893 -0.153091 -0.871265 -0.466327 + 0.937936 1.68407 -2.04925 -0.17611 -0.979272 -0.100057 + 1.15072 1.77302 -2.19552 -0.797612 0.527641 0.292252 + 1.14799 1.74733 -2.15643 -0.997747 0.0634496 -0.0217945 + 1.14241 1.71125 -2.06434 -0.547246 -0.706409 -0.448896 + 1.10601 1.7037 -2.03866 -0.111 -0.830124 -0.546418 + 1.01888 1.6804 -2.0049 -0.0208503 -0.856074 -0.516433 + 1.13429 1.77906 -2.24399 -0.749858 0.575728 0.32596 + 1.15142 1.68191 -2.03092 -0.798592 -0.54239 -0.260892 + 0.942828 1.68755 -0.866894 -0.285676 -0.949615 0.128919 + 0.931592 1.69201 -0.860605 -0.621255 -0.759147 0.194263 + 0.882892 1.77276 -0.908069 -0.880223 -0.330703 0.340357 + 0.848172 1.81015 -0.954435 -0.824321 -0.264242 0.50067 + 0.923086 1.71773 -0.754359 -0.637496 -0.643845 0.423158 + 0.914407 1.75692 -0.77904 -0.972244 -0.178628 0.151107 + 0.901911 1.77293 -0.848373 -0.941113 -0.262454 0.213132 + 0.8945 1.86096 -0.814435 -0.929991 -0.202739 0.306616 + 0.86143 1.91345 -0.846758 -0.854838 -0.322911 0.406178 + 0.927778 1.73612 -0.733014 0.0604344 -0.762729 0.643888 + 0.927778 1.73612 -0.733014 -0.965046 -0.0519368 0.256883 + 0.919099 1.77531 -0.757695 -0.925774 -0.160899 0.342131 + 0.906995 1.84494 -0.745102 -0.979667 0.0247327 0.199099 + 0.920946 1.88997 -0.719496 -0.948819 -0.13377 0.286092 + 0.898654 2.01237 -0.70069 -0.907191 -0.265216 0.326595 + 0.865585 2.06487 -0.733021 -0.784253 -0.448947 0.428245 + 0.79727 2.10626 -0.78912 -0.590938 -0.620716 0.515271 + 0.82671 1.95084 -0.893124 -0.749553 -0.431167 0.502261 + 0.817107 1.82925 -0.992113 -0.690958 -0.284297 0.664644 + 0.925346 1.94468 -0.654843 -0.963054 -0.202689 0.177324 + 0.903054 2.06699 -0.636095 -0.915931 -0.375406 0.141917 + 0.830701 2.16795 -0.637364 -0.676618 -0.678194 0.286777 + 0.762385 2.20934 -0.693463 -0.222679 -0.898963 0.3772 + 0.718762 2.16758 -0.736722 0.409235 -0.743795 0.528485 + 0.745911 2.11019 -0.834725 -0.0881068 -0.750393 0.655093 + 0.915514 2.00015 -0.555323 -0.951565 -0.30599 -0.0298895 + 0.882244 2.07495 -0.492681 -0.908861 -0.416316 0.0255637 + 0.869784 2.14179 -0.573461 -0.861026 -0.508257 0.0175657 + 0.754295 2.27651 -0.547195 -0.0862156 -0.942741 0.322189 + 0.708909 2.2274 -0.610544 0.357385 -0.884183 0.300825 + 0.665285 2.18573 -0.653752 0.875837 -0.408195 0.257462 + 0.915054 2.03059 -0.423643 -0.703805 -0.6802 0.204906 + 0.833844 2.20954 -0.4174 -0.845466 -0.51177 0.152574 + 0.793378 2.25035 -0.483283 -0.754844 -0.646424 0.111117 + 0.776758 2.28597 -0.306972 -0.581938 -0.808646 0.0862505 + 0.743554 2.29407 -0.424208 0.314961 -0.941988 -0.116012 + 0.866654 2.16518 -0.348362 -0.868133 -0.483363 0.11272 + 0.820451 2.25574 -0.240823 -0.737043 -0.674493 0.0427327 + 0.779985 2.29664 -0.306655 -0.766011 -0.638531 0.0741976 + 0.833698 2.22428 -0.017537 -0.652667 -0.754624 -0.0675919 + 0.9677 2.00174 -0.371486 -0.540538 -0.829977 0.137682 + 0.899356 2.11045 -0.280376 -0.814365 -0.571365 0.101739 + 0.874688 2.17887 -0.153082 -0.936324 -0.350063 0.0274422 + 0.841986 2.2336 -0.221068 -0.821032 -0.56268 0.0964225 + 0.848062 2.25593 0.053241 -0.724839 -0.688894 -0.00578605 + 0.948408 2.01676 -0.468093 -0.440186 -0.896435 -0.0513962 + 1.00105 1.98792 -0.415936 0.491473 -0.781639 -0.384051 + 0.991919 2.0016 -0.299444 0.192013 -0.869892 0.454333 + 0.923575 2.11031 -0.208334 -0.463531 -0.855419 0.231077 + 0.878053 2.15134 -0.056197 -0.966034 -0.250109 -0.0649895 + 0.869596 2.23379 0.072996 -0.867958 -0.492548 -0.0635955 + 0.872962 2.20626 0.169881 -0.949061 -0.200448 -0.243111 + 0.828111 2.24166 0.237958 -0.389069 -0.912578 -0.125804 + 1.018 2.02083 -0.35915 0.968861 -0.247604 0.000397428 + 0.983368 2.07331 -0.217248 0.314194 -0.839755 0.442825 + 0.960458 2.11612 -0.120201 -0.11602 -0.95524 0.272131 + 0.928955 2.14092 -0.013948 -0.514095 -0.828573 -0.221749 + 0.892072 2.13503 -0.10214 -0.74989 -0.652426 -0.109573 + 1.00554 2.1554 -0.369826 0.985544 -0.0256754 -0.167462 + 1.00945 2.09254 -0.276952 0.976226 -0.185235 0.112561 + 1.02436 2.14526 -0.215457 0.965487 -0.257281 -0.0405055 + 1.0088 2.10705 -0.139885 0.60466 -0.750663 0.266256 + 0.985888 2.14995 -0.042786 0.480837 -0.872258 0.0892287 + 0.905681 2.11917 0.074324 0.559914 -0.810846 0.170369 + 0.988594 2.12248 -0.426613 0.930138 -0.0321563 -0.365798 + 1.00756 2.25448 -0.396038 0.97163 -0.0942255 -0.216926 + 1.01462 2.2153 -0.323177 0.987623 -0.0737678 -0.138414 + 1.02953 2.26801 -0.26168 0.872103 -0.363405 -0.327677 + 0.948408 2.01676 -0.468093 0.706343 0.00922063 -0.70781 + 0.905681 2.11917 0.074324 -0.960751 -0.0657405 -0.269511 + 0.855557 2.12347 0.166472 -0.957056 0.00752283 -0.289806 + 0.804931 2.14597 0.266304 -0.707835 0.102181 -0.698948 + 0.822335 2.22876 0.269713 -0.583502 -0.399815 -0.706876 + 0.869576 2.10715 0.120537 -0.527845 -0.815367 -0.237815 + 0.846302 2.08541 0.208805 -0.87344 0.292854 -0.389023 + 0.738914 2.12985 0.32183 -0.655032 -0.00053789 -0.755601 + 0.645094 2.2745 0.37449 -0.445687 -0.88854 -0.108906 + 0.689694 2.22859 0.3148 -0.137128 -0.987659 0.07567 + 0.905681 2.11917 0.074324 -0.107938 -0.933078 -0.343096 + 0.901206 1.61571 -1.00085 -0.0630899 -0.586398 -0.807562 + 0.605962 1.89597 -2.56588 0.923388 0.373922 -0.0868155 + 0.592234 1.92008 -2.61283 0.936869 0.334412 -0.102206 + 0.603401 1.90985 -2.54392 0.747603 -0.617252 -0.245134 + 0.608231 1.90077 -2.492 0.809966 0.583106 -0.0627855 + 0.621039 1.88748 -2.46078 0.657496 0.752541 -0.0371633 + 0.618769 1.88277 -2.53462 0.757364 0.649774 -0.06475 + 0.643558 1.86843 -2.48698 0.630719 0.773953 -0.0564912 + 0.63938 1.87276 -2.42967 0.651434 0.758661 0.00822009 + 0.661899 1.8537 -2.45587 0.813414 0.547971 -0.195155 + 0.672911 1.83834 -2.44066 0.882328 0.221354 -0.415332 + 0.693482 1.82274 -2.41123 0.75964 0.643992 -0.0906696 + 0.678992 1.83517 -2.44137 0.773457 0.623367 -0.114794 + 0.710576 1.80419 -2.39672 0.773541 0.623246 -0.114885 + 0.719806 1.76903 -2.18362 0.780362 0.618151 -0.0944661 + 0.705589 1.77883 -2.23698 0.799448 0.594769 -0.0844562 + 0.690866 1.79182 -2.28809 0.917138 0.398523 -0.00611514 + 0.685856 1.80393 -2.25027 0.826716 0.558339 -0.0692761 + 0.685589 1.8085 -2.33898 0.93944 0.342393 0.0148036 + 0.05808 2.02101 -3.09945 0.166767 0.877209 0.450214 + 0.021963 2.02879 -3.08313 0.255024 0.96108 0.106246 + 0.052011 2.01575 -3.03735 0.774316 0.344201 -0.530999 + 0.080404 2.00707 -3.02371 0.242811 0.966685 0.08101 + 0.086472 2.01224 -3.08588 0.0147812 0.897971 0.439807 + 0.074256 2.02532 -3.10312 -0.0780005 0.745662 0.661743 + 0.048257 2.03376 -3.11254 -0.0341371 -0.0290121 0.998996 + 0.021963 2.02879 -3.08313 0.290487 0.785079 0.547054 + 0.012141 2.04154 -3.09621 0.192698 0.296144 0.935503 + -0.030826 2.04626 -3.10218 -0.0202983 0.708357 0.705563 + 0.128187 1.99744 -3.05683 -0.0637266 0.896948 0.437519 + 0.11597 2.01052 -3.07408 -0.257645 0.673376 0.692953 + 0.106302 2.00064 -3.00818 0.00746884 0.959279 0.282363 + 0.138523 1.99564 -3.00172 0.126377 0.984305 -0.123176 + 0.160408 1.99253 -3.05032 0.0651072 0.828602 0.556039 + 0.145789 2.00213 -3.05075 -0.323149 -0.629332 0.706764 + 0.128453 1.99899 -2.99251 0.00105117 0.997997 -0.0632477 + 0.221579 1.99604 -3.06701 0.0740882 0.981615 0.175904 + 0.267677 2.00019 -3.0754 -0.000177651 0.896667 0.442706 + 0.108633 1.98662 -2.9861 -0.317524 0.785011 0.531917 + 0.197416 1.994 -3.04727 -0.0632734 0.805886 0.588679 + 0.170471 1.99605 -3.05282 -0.124991 -0.154432 0.980065 + 0.153275 2.0171 -3.00969 -0.210018 -0.876372 0.433433 + 0.107118 2.02426 -3.03748 -0.429885 -0.846334 0.314512 + 0.0773 2.03273 -3.06076 -0.503356 -0.823811 0.260709 + 0.11597 2.01052 -3.07408 -0.429506 -0.876949 0.215605 + 0.074256 2.02532 -3.10312 -0.471371 -0.846677 0.246875 + 0.20748 1.99752 -3.04977 0.122771 -0.442068 0.88854 + 0.177958 2.01102 -3.01176 0.0449212 -0.473426 0.879687 + 0.141569 2.04417 -2.95997 -0.302838 -0.880115 0.365633 + 0.988445 1.85505 -2.622 -0.878003 0.477838 -0.0279526 + 0.940809 1.79078 -2.54588 -0.688319 0.706263 0.165561 + 0.96059 1.81258 -2.55664 -0.776608 0.270433 -0.568987 + 0.972108 1.83344 -2.56877 -0.761714 -0.0722076 -0.643877 + 0.999963 1.87599 -2.63407 -0.993306 -0.0704394 -0.0915477 + 0.99941 1.89818 -2.6767 -0.74186 0.590827 0.317122 + 0.93501 1.82717 -2.55451 -0.157193 -0.519338 -0.839987 + 0.986794 1.86725 -2.59635 -0.68801 -0.439859 -0.577205 + 0.986241 1.88944 -2.63897 -0.388349 -0.825609 -0.409335 + 0.99941 1.89818 -2.6767 -0.46223 -0.835078 -0.298311 + 0.977299 1.90902 -2.67488 -0.320458 -0.883482 -0.341711 + 0.976666 1.92511 -2.73795 -0.411386 -0.884875 -0.218535 + 0.923497 1.80836 -2.54154 -0.185011 -0.362747 -0.913337 + 0.852254 1.85836 -2.57474 -0.0736101 -0.654922 -0.752103 + 0.949696 1.86099 -2.58209 -0.114851 -0.669024 -0.734314 + 0.95185 1.87874 -2.60324 -0.0989063 -0.833448 -0.543675 + 0.940809 1.79078 -2.54588 0.0827279 -0.710166 -0.699157 + 0.903715 1.78656 -2.53079 -0.136504 -0.783727 -0.60592 + 0.840741 1.83956 -2.56177 -0.175085 -0.652354 -0.737414 + 0.731119 1.88176 -2.57267 -0.242526 -0.967617 -0.0699833 + 0.854408 1.8762 -2.59584 -0.0676272 -0.832852 -0.549348 + 0.942908 1.89832 -2.63916 -0.0937025 -0.889475 -0.447274 + 0.919104 1.7685 -2.47549 0.179908 -0.978183 -0.103879 + 0.864548 1.78519 -2.5062 -0.291845 -0.861076 -0.416382 + 0.801573 1.83818 -2.53719 -0.374448 -0.802298 -0.464873 + 0.944645 1.78837 -2.53371 0.4061 -0.883839 -0.232188 + 0.950974 1.78361 -2.44946 0.351076 -0.935938 -0.0276754 + 0.888813 1.77243 -2.3787 0.0895855 -0.99265 0.0813651 + 0.845095 1.77276 -2.36687 -0.0551768 -0.996462 0.0633942 + 0.875385 1.76883 -2.46366 -0.142435 -0.977914 -0.152959 + 0.992281 1.85263 -2.60982 0.581792 -0.736947 -0.344131 + 0.976516 1.80348 -2.50768 0.503351 -0.838155 -0.210082 + 0.971656 1.78821 -2.42584 0.241772 -0.964544 -0.10583 + 0.909495 1.77704 -2.35508 0.0545723 -0.993792 -0.0969456 + 0.988445 1.85505 -2.622 0.665404 -0.663961 -0.341165 + 0.99941 1.89818 -2.6767 0.538185 -0.7392 -0.404895 + 1.01338 1.85759 -2.5856 0.401176 -0.839211 -0.367129 + 0.997619 1.80835 -2.48351 0.424748 -0.870826 -0.247491 + 1.00311 1.78787 -2.37925 0.115823 -0.967061 -0.226668 + 1.03285 1.85781 -2.57419 0.784597 -0.47881 -0.393889 + 1.02907 1.808 -2.43692 0.246043 -0.929671 -0.274179 + 1.01319 1.78128 -2.35383 -0.00934356 -0.905481 -0.424285 + 0.919578 1.77053 -2.32961 -0.0249025 -0.878239 -0.477573 + 0.809791 1.777 -2.32622 -0.184381 -0.982652 -0.0199646 + 0.811545 1.77651 -2.33737 -0.0737089 -0.997265 0.00539728 + 1.04854 1.80823 -2.42551 0.0164932 -0.946946 -0.320968 + 1.05337 1.7853 -2.36599 -0.113349 -0.884727 -0.452118 + 1.01205 1.76204 -2.32391 -0.0818345 -0.780033 -0.620364 + 0.999293 1.74336 -2.30196 -0.114029 -0.669421 -0.73408 + 0.906824 1.75185 -2.30766 -0.150546 -0.811826 -0.564158 + 1.07554 1.80925 -2.43787 -0.112449 -0.939684 -0.32303 + 1.08037 1.78631 -2.37835 -0.967737 -0.200749 -0.152265 + 1.05223 1.76606 -2.33607 -0.501349 -0.547009 -0.670396 + 1.03915 1.7466 -2.31456 -0.693142 -0.0989139 -0.713982 + 0.962187 1.70664 -2.26596 -0.139371 -0.869368 -0.474104 + 0.919208 1.70335 -2.22546 -0.319646 -0.906121 -0.277076 + 0.863845 1.74856 -2.26716 -0.36381 -0.889022 -0.277997 + 1.06729 1.76693 -2.35678 -0.858027 0.0242464 -0.513031 + 0.937719 1.68725 -2.17096 -0.199332 -0.973195 -0.114711 + 0.827367 1.73037 -2.13986 -0.4184 -0.89074 -0.177551 + 1.07554 1.80925 -2.43787 -0.56335 0.754606 0.336462 + 0.845878 1.71427 -2.08536 -0.311218 -0.944863 -0.101862 + 0.780043 1.75154 -2.13453 -0.273662 -0.904408 -0.327346 + 0.816521 1.76973 -2.26183 -0.384722 -0.908388 -0.16377 + 0.906401 1.69126 -2.01231 -0.475823 -0.795449 -0.375304 + 0.814343 1.72146 -2.04842 -0.196403 -0.971376 -0.133618 + 0.765186 1.73346 -2.0804 0.0346962 -0.962277 -0.269849 + 0.729957 1.78796 -2.20421 -0.226103 -0.93998 -0.255567 + 0.811683 1.71602 -2.0232 -0.118898 -0.935009 -0.334098 + 0.762526 1.72793 -2.05523 0.15969 -0.946325 -0.28101 + 0.734326 1.74788 -2.13459 -0.13896 -0.86526 -0.481679 + 0.719806 1.76903 -2.18362 0.458204 -0.758763 -0.462956 + 0.796615 1.70206 -1.98982 -0.0554451 -0.895639 -0.441312 + 0.749727 1.7037 -2.00326 0.277602 -0.893677 -0.352531 + 0.753973 1.66567 -1.91479 -0.0225075 -0.871666 -0.489584 + 0.707085 1.6674 -1.92819 0.566041 -0.774363 -0.282772 + 0.696973 1.63682 -1.87902 0.588237 -0.579241 -0.564319 + 0.692435 1.63725 -1.94316 0.895204 -0.440702 -0.0662708 + 0.679974 1.61528 -1.89451 0.841999 -0.437785 -0.315249 + 0.887944 1.6543 -1.9417 -0.134328 -0.844154 -0.518998 + 0.750584 1.64268 -1.87757 -0.0114864 -0.799686 -0.600308 + 0.940837 1.64332 -1.93428 -0.0750667 -0.864966 -0.496185 + 0.990703 1.64564 -1.9449 -0.0530004 -0.871056 -0.488316 + 0.962247 1.59901 -1.84773 -0.0179635 -0.944272 -0.328675 + 1.0079 1.65625 -1.96487 -0.0247148 -0.857414 -0.514033 + 1.03521 1.60812 -1.87612 -0.0262762 -0.904125 -0.42646 + 1.01211 1.60125 -1.8584 -0.0235787 -0.951236 -0.307562 + 1.01425 1.66841 -1.98473 -0.0150394 -0.85289 -0.521874 + 1.08136 1.64392 -1.93812 0.0100114 -0.864092 -0.503234 + 1.05241 1.61881 -1.89603 0.00499999 -0.871903 -0.489654 + 1.06964 1.60894 -1.87873 -0.0283936 -0.873847 -0.485371 + 1.07751 1.66753 -1.97561 0.0187494 -0.846229 -0.532489 + 1.08771 1.65608 -1.95798 -0.0123419 -0.848289 -0.529389 + 1.11968 1.6542 -1.95813 -0.345921 -0.745367 -0.569882 + 1.09859 1.63405 -1.92082 -0.389466 -0.658427 -0.644042 + 1.12127 1.64042 -1.94785 -0.697529 -0.292428 -0.65417 + 1.08214 1.67944 -1.99584 -0.0257029 -0.871891 -0.489025 + 1.10948 1.66565 -1.97575 -0.146814 -0.867404 -0.475453 + 1.14237 1.66056 -1.98515 -0.297753 -0.833052 -0.466227 + 1.11854 1.68699 -2.02152 -0.243061 -0.815177 -0.525745 + 1.15142 1.68191 -2.03092 -0.260626 -0.854212 -0.449885 + 1.15142 1.68191 -2.03092 -0.285007 -0.757116 -0.587832 + 0.695715 1.8117 -2.16432 -0.84513 -0.49006 -0.213534 + 0.698705 1.81652 -2.21126 -0.929584 -0.364112 0.0574169 + 0.719806 1.76903 -2.18362 -0.932769 -0.329769 0.145584 + 0.705589 1.77883 -2.23698 -0.937332 -0.295927 0.183946 + 0.653716 1.92238 -2.23203 -0.861246 -0.493111 -0.122864 + 0.658388 1.92625 -2.27512 -0.904402 -0.426575 -0.00949785 + 0.684488 1.8263 -2.26462 -0.946262 -0.290834 0.141437 + 0.676987 1.83497 -2.31182 -0.954873 -0.289287 0.0673056 + 0.690866 1.79182 -2.28809 -0.961303 -0.213477 0.174136 + 0.685589 1.8085 -2.33898 -0.531176 -0.840559 -0.106357 + 0.605655 2.0055 -2.31019 -0.727267 -0.679278 0.0983055 + 0.650887 1.9349 -2.32232 -0.898501 -0.396874 0.187583 + 0.636569 1.9364 -2.36351 -0.866627 -0.457012 0.200243 + 0.67171 1.85164 -2.3627 -0.9307 -0.356629 0.081325 + 0.591336 2.007 -2.35139 -0.682898 -0.660177 0.312756 + 0.561598 2.0251 -2.37295 -0.632528 -0.746887 0.205107 + 0.623155 1.94846 -2.40779 -0.818553 -0.516234 0.25194 + 0.658297 1.8637 -2.40698 -0.888783 -0.449241 0.0908186 + 0.688957 1.80989 -2.34959 -0.729614 -0.672942 -0.121705 + 0.689224 1.80532 -2.26088 -0.00198846 -0.99766 -0.0683426 + 0.685856 1.80393 -2.25027 -0.14933 -0.973203 -0.174861 + 0.539496 2.03274 -2.40997 -0.662498 -0.733775 0.150567 + 0.601053 1.95609 -2.44482 -0.781668 -0.581461 0.225607 + 0.645874 1.8849 -2.45391 -0.858388 -0.493948 0.13851 + 0.672911 1.83834 -2.44066 -0.686624 -0.701432 -0.191157 + 0.685333 1.81714 -2.39374 -0.669002 -0.728987 -0.144962 + 0.453322 2.10837 -2.38597 -0.689794 -0.720783 0.0682383 + 0.534164 2.03217 -2.44998 -0.71007 -0.694369 0.116843 + 0.58036 1.97108 -2.48638 -0.776028 -0.592062 0.217355 + 0.625181 1.8998 -2.49552 -0.833791 -0.481988 0.269221 + 0.643558 1.86843 -2.48698 -0.859723 -0.427569 0.279395 + 0.618769 1.88277 -2.53462 -0.859778 -0.428671 0.277529 + 0.509063 2.05246 -2.47973 -0.713164 -0.691593 0.114444 + 0.555258 1.99137 -2.51613 -0.779658 -0.603485 0.16715 + 0.600393 1.91406 -2.54321 -0.836679 -0.504813 0.212445 + 0.605962 1.89597 -2.56588 -0.853097 -0.507039 0.123034 + 0.580257 1.93347 -2.58302 -0.829106 -0.557465 0.0426112 + 0.592234 1.92008 -2.61283 -0.809492 -0.583738 -0.0630373 + 0.481998 2.07939 -2.49098 -0.726315 -0.686515 0.0341247 + 0.535122 2.0107 -2.556 -0.797876 -0.594102 0.102163 + 0.518853 2.02675 -2.59321 -0.787628 -0.611561 0.0750756 + 0.465729 2.09545 -2.52819 -0.729191 -0.682697 0.0469641 + 0.407234 2.16024 -2.42981 -0.594599 -0.803673 -0.0237138 + 0.402023 2.16139 -2.476 -0.480142 -0.866346 0.137509 + 0.460517 2.0966 -2.57438 -0.675891 -0.725099 0.131919 + 0.501171 2.04318 -2.63445 -0.726673 -0.664823 0.173081 + 0.548847 1.974 -2.67123 -0.785996 -0.60498 0.127312 + 0.592978 1.92413 -2.62486 -0.795144 -0.59506 0.116829 + 0.345152 2.19191 -2.33487 -0.373347 -0.917638 -0.136206 + 0.36698 2.17379 -2.47308 -0.186296 -0.961549 0.201787 + 0.440632 2.10339 -2.61014 -0.434183 -0.824771 0.362268 + 0.481286 2.05005 -2.67016 -0.629525 -0.738069 0.242801 + 0.239822 2.18818 -2.24701 0.0848382 -0.993234 -0.0793073 + 0.314309 2.19617 -2.35364 -0.0478683 -0.998108 0.0385948 + 0.321355 2.17099 -2.48582 -0.0239328 -0.966633 0.255046 + 0.364216 2.11959 -2.62621 -0.156134 -0.917783 0.365098 + 0.405589 2.11579 -2.60722 -0.28078 -0.895119 0.346302 + 0.268684 2.19336 -2.36638 0.0556852 -0.996435 0.0633834 + 0.27985 2.16797 -2.5034 0.0425746 -0.963081 0.265825 + 0.322711 2.11657 -2.64377 -0.14093 -0.934372 0.327243 + 0.409211 2.06633 -2.72435 -0.33009 -0.881896 0.336599 + 0.450584 2.06243 -2.70541 -0.43858 -0.811436 0.386289 + 0.168068 2.17779 -2.27101 0.00387069 -0.992617 -0.121228 + 0.23006 2.1897 -2.37884 0.110104 -0.988137 0.107063 + 0.236111 2.15775 -2.51551 0.0530436 -0.966552 0.250924 + 0.290031 2.11226 -2.67471 -0.0791806 -0.951862 0.296123 + 0.136501 2.18334 -2.28403 -0.0499216 -0.994533 -0.0917138 + 0.186321 2.17957 -2.3909 0.0636485 -0.988647 0.13611 + 0.176997 2.15529 -2.54403 -0.153803 -0.964792 0.213357 + 0.21501 2.14396 -2.56281 -0.0813519 -0.956509 0.280129 + 0.087766 2.16911 -2.17837 -0.0710534 -0.972233 -0.222967 + 0.06815 2.17549 -2.20082 -0.0365212 -0.98288 -0.180591 + 0.09723 2.18464 -2.29607 -0.0302796 -0.998604 -0.0432892 + 0.14705 2.18087 -2.40294 -0.112111 -0.991343 0.0683447 + 0.051356 2.1418 -2.06767 -0.0580746 -0.96413 -0.258999 + 0.031741 2.14827 -2.09007 -0.108783 -0.964701 -0.239829 + 0.035064 2.17725 -2.21087 -0.0455962 -0.988311 -0.145476 + 0.064144 2.1864 -2.30612 -0.0394146 -0.997158 -0.0642082 + 0.020866 2.11114 -1.94717 -0.403464 -0.881483 -0.245368 + 0.011392 2.12379 -1.95869 -0.715407 -0.675197 -0.179729 + 0.014718 2.14764 -2.07438 -0.473125 -0.860291 -0.189876 + 0.018041 2.17662 -2.19519 -0.20174 -0.961301 -0.187621 + 0.029223 2.18812 -2.31711 -0.150187 -0.984385 -0.0918098 + 0.002151 2.0946 -1.83072 -0.349107 -0.783439 -0.514147 + 0.002151 2.1184 -1.86854 -0.59547 -0.742069 -0.307814 + 0.002151 2.13624 -1.96643 -0.419138 -0.889477 -0.182082 + 0.005477 2.16008 -2.08213 -0.418278 -0.89195 -0.171661 + 0.005477 2.17994 -2.19533 -0.132208 -0.979458 -0.15226 + -0.002113 2.09469 -1.83067 0.328957 -0.789289 -0.518468 + -0.002113 2.11848 -1.86849 -0.0235515 -0.931561 -0.36282 + -0.002113 2.13632 -1.96638 0.402711 -0.894165 -0.195686 + -0.005484 2.16008 -2.08213 0.395542 -0.897507 -0.195008 + -0.011354 2.12388 -1.95864 0.692403 -0.690699 -0.208595 + -0.002113 2.11848 -1.86849 1 0 0 + -0.031741 2.14827 -2.09007 0.1092 -0.964707 -0.239615 + -0.014725 2.14764 -2.07438 0.475505 -0.857196 -0.197762 + -0.018048 2.17662 -2.19519 0.21306 -0.961856 -0.171577 + -0.005484 2.17994 -2.19533 0.12258 -0.982895 -0.137449 + -0.051356 2.1418 -2.06767 0.0567394 -0.963986 -0.259828 + -0.06815 2.17549 -2.20082 0.0365345 -0.98286 -0.180698 + -0.035064 2.17725 -2.21087 0.0456091 -0.988311 -0.145471 + -0.087766 2.16911 -2.17837 0.0702526 -0.972457 -0.222241 + -0.1365 2.18334 -2.28403 0.0793184 -0.993959 -0.0758595 + -0.097229 2.18464 -2.29606 0.0346223 -0.997773 -0.0570121 + -0.064143 2.1864 -2.30612 0.0292856 -0.997033 -0.0711883 + -0.029223 2.18812 -2.31711 0.125127 -0.991131 -0.0447426 + -0.063854 2.19118 -2.4242 -0.00484698 -0.998882 0.0470204 + -0.016659 2.18512 -2.41971 -0.0572962 -0.99722 0.0476374 + -0.016659 2.19144 -2.31725 0.13125 -0.991112 -0.021707 + 0.01666 2.19144 -2.31725 -0.105249 -0.993016 -0.0533088 + -0.066816 2.18306 -2.56814 0.136549 -0.986821 0.0868206 + -0.019621 2.17709 -2.5636 -0.0644406 -0.997621 0.0244778 + 0.019625 2.17709 -2.5636 0.0423929 -0.997362 0.0589169 + 0.01666 2.18512 -2.41971 0.0660385 -0.996058 0.0592181 + -0.097183 2.16536 -2.59609 0.350658 -0.914514 0.201749 + -0.051781 2.15049 -2.76553 0.546643 -0.818045 0.178838 + -0.019621 2.17927 -2.78057 0.345269 -0.928424 0.137175 + 0.019625 2.17927 -2.78057 -0.362621 -0.926028 0.10478 + -0.082149 2.13271 -2.79353 0.430533 -0.87808 0.208848 + -0.049759 2.11734 -2.9173 0.617215 -0.735984 0.27816 + -0.017598 2.14611 -2.93234 0.369743 -0.864803 0.339713 + 0.017596 2.14611 -2.93234 -0.358336 -0.873881 0.328523 + 0.051785 2.15049 -2.76553 -0.512599 -0.848531 0.131292 + -0.088416 2.09802 -2.89905 0.52097 -0.798956 0.300432 + -0.056759 2.07064 -3.00603 0.557569 -0.760354 0.333136 + -0.017598 2.09191 -3.02626 0.309954 -0.849749 0.426445 + 0.017596 2.09191 -3.02626 -0.302777 -0.850348 0.430388 + -0.095416 2.05133 -2.98778 0.46486 -0.813286 0.349959 + -0.10711 2.02426 -3.03749 0.429799 -0.846141 0.315149 + -0.077283 2.03273 -3.06076 0.507711 -0.837308 0.20284 + -0.038122 2.054 -3.08099 0.428458 -0.836678 0.341166 + 0.012141 2.06244 -3.09041 -0.0630865 -0.724519 0.686361 + -0.153267 2.01711 -3.0097 0.263286 -0.879889 0.395571 + -0.14578 2.00214 -3.05077 0.322576 -0.62977 0.706635 + -0.115954 2.01052 -3.07408 0.44436 -0.870199 0.212834 + -0.177958 2.01103 -3.01177 0.0229328 -0.886177 0.462778 + -0.170472 1.99605 -3.05282 0.126099 -0.162419 0.978631 + -0.16041 1.99245 -3.05039 -0.0634353 0.826033 0.560041 + -0.128186 1.99744 -3.05683 0.0508681 0.898799 0.4354 + -0.115954 2.01052 -3.07408 0.2578 0.673148 0.693117 + -0.20748 1.99752 -3.04978 -0.122397 -0.442876 0.888189 + -0.197418 1.99401 -3.04728 0.0639059 0.805355 0.589337 + -0.138525 1.99565 -3.00174 -0.126523 0.98429 -0.12315 + -0.106301 2.00065 -3.00819 -0.0107928 0.95537 0.295214 + -0.086472 2.01224 -3.08588 -0.0123343 0.900004 0.435707 + -0.074239 2.02532 -3.10312 0.0780137 0.745587 0.661826 + -0.243512 1.99814 -3.05565 -0.0650774 -0.980629 0.184748 + -0.267675 2.00019 -3.07539 -0.278348 -0.901611 0.331088 + -0.221581 1.99605 -3.06703 -0.0759167 -0.99706 -0.0103557 + -0.197418 1.99401 -3.04728 0.547496 -0.434578 -0.715116 + -0.138525 1.99565 -3.00174 0.590231 -0.291836 -0.752635 + -0.325906 1.99664 -3.08165 0.0820147 -0.996547 -0.0129895 + -0.295996 1.99739 -3.09994 -0.460867 -0.349252 0.815858 + -0.244328 1.99334 -3.06154 -0.124772 0.929909 0.345979 + -0.322338 1.99302 -3.04417 0.367126 -0.90602 0.210586 + -0.346889 1.99167 -3.01484 0.193866 -0.973581 -0.120645 + -0.3657 1.98304 -2.9843 0.155747 -0.971517 -0.178596 + -0.319848 1.99731 -3.11521 0.0142549 -0.999747 -0.0174161 + -0.080403 2.00708 -3.02372 -0.206357 0.973241 0.101089 + -0.052009 2.01575 -3.03735 -0.774373 0.343769 -0.531196 + -0.058077 2.02101 -3.09945 -0.166707 0.877136 0.450379 + -0.048219 2.03375 -3.11253 0.0336214 -0.0285343 0.999027 + -0.021961 2.02879 -3.08313 -0.338109 0.882253 0.327586 + -0.012102 2.04153 -3.0962 -0.289705 0.0301424 0.956641 + -0.012102 2.06243 -3.0904 0.013743 -0.970612 0.240255 + -0.074239 2.02532 -3.10312 0.465547 -0.827793 0.313089 + 0.038139 2.05391 -3.08104 -0.476639 -0.807923 0.34652 + 0.056757 2.07064 -3.00603 -0.569344 -0.747539 0.342102 + 0.049757 2.11734 -2.9173 -0.625374 -0.735515 0.260626 + 0.095412 2.05133 -2.98777 -0.460017 -0.811154 0.361127 + 0.088411 2.09802 -2.89905 -0.507649 -0.811172 0.290333 + 0.082143 2.1327 -2.79352 -0.430592 -0.878062 0.2088 + 0.06682 2.18306 -2.56814 -0.107911 -0.986458 0.123515 + 0.1265 2.07915 -2.88575 -0.394793 -0.871917 0.289652 + 0.120232 2.11383 -2.78023 -0.435596 -0.869733 0.231995 + 0.097178 2.16536 -2.59608 -0.350573 -0.914514 0.201899 + 0.128721 2.16379 -2.55435 -0.257283 -0.951991 0.165884 + 0.063855 2.19118 -2.4242 -0.000975231 -0.998607 0.0527618 + 0.188124 2.03604 -2.94528 -0.150306 -0.925153 0.348569 + 0.173055 2.07101 -2.87106 -0.22875 -0.929199 0.290281 + 0.151776 2.11226 -2.73851 -0.288771 -0.927944 0.23565 + 0.229697 2.01313 -2.99641 -0.0932213 -0.95808 0.270912 + 0.243346 2.03958 -2.93603 -0.0896241 -0.936437 0.339196 + 0.216647 2.06227 -2.86133 -0.184957 -0.952038 0.243752 + 0.195368 2.10352 -2.72876 -0.198373 -0.947702 0.25002 + 0.284919 2.01668 -2.98715 -0.149152 -0.942242 0.299888 + 0.326879 2.01322 -2.96456 -0.268307 -0.900392 0.3425 + 0.288908 2.03914 -2.91625 -0.189532 -0.940151 0.283185 + 0.262209 2.06183 -2.84155 -0.116807 -0.950909 0.286581 + 0.332102 1.99229 -3.00532 -0.291332 -0.951267 0.101077 + 0.374062 1.98892 -2.98267 -0.273677 -0.581606 0.766052 + 0.372835 2.01005 -2.93147 -0.283981 -0.909524 0.303515 + 0.334864 2.03597 -2.88316 -0.238648 -0.925878 0.292913 + 0.34688 1.99167 -3.01484 -0.156409 -0.971258 -0.179428 + 0.365691 1.98304 -2.9843 -0.155845 -0.971513 -0.178535 + 0.365691 1.98304 -2.9843 -0.418863 0.366701 0.830713 + 0.098775 2.18937 -2.41326 -0.12522 -0.99134 0.0395571 + 0.233381 2.09228 -2.74749 -0.0990519 -0.957195 0.271969 + 0.26893 2.09856 -2.72197 -0.065376 -0.954634 0.290517 + 0.33765 2.06849 -2.78469 -0.215051 -0.92693 0.307496 + 0.297758 2.06811 -2.81603 -0.139598 -0.940116 0.310956 + 0.374756 2.03635 -2.85183 -0.28497 -0.910517 0.299585 + 0.419196 2.03027 -2.8191 -0.367728 -0.882284 0.293855 + 0.37033 2.07271 -2.7538 -0.270668 -0.913019 0.305181 + 0.411303 2.00472 -2.90865 -0.30848 -0.906146 0.289377 + 0.455743 1.99864 -2.87592 -0.440521 -0.871775 0.214361 + 0.48825 1.98423 -2.84176 -0.544509 -0.815323 0.19687 + 0.458077 2.02381 -2.7897 -0.48864 -0.831724 0.263563 + 0.496391 2.00565 -2.75105 -0.626191 -0.738698 0.249418 + 0.45669 1.97413 -2.95585 -0.285572 -0.866724 0.408949 + 0.481213 1.9705 -2.93378 -0.414682 -0.893845 0.170531 + 0.51372 1.95601 -2.89967 -0.735211 -0.660761 0.151195 + 0.526564 1.96599 -2.80317 -0.749502 -0.626188 0.214791 + 0.418222 1.97945 -2.97868 -0.268608 -0.616232 0.740343 + 0.436121 1.96422 -2.97889 -0.412185 -0.536924 0.736082 + 0.462167 1.9588 -2.9683 0.337973 -0.517308 0.786236 + 0.483244 1.9587 -2.99094 -0.099222 -0.98363 0.150426 + 0.507767 1.95508 -2.96886 -0.21824 -0.9754 -0.0310735 + 0.508552 1.94894 -2.92703 -0.919444 0.386207 0.0739347 + 0.391961 1.97369 -2.9829 -0.119741 -0.155146 0.980608 + 0.365691 1.98304 -2.9843 -0.0994297 -0.131447 0.986324 + 0.517137 1.95856 -3.00009 -0.0538259 -0.990492 -0.126603 + 0.517922 1.95242 -2.95825 -0.109137 -0.98378 -0.142361 + 0.508552 1.94894 -2.92703 -0.109161 -0.98378 -0.142338 + 0.571224 1.94331 -2.66948 -0.79599 -0.587679 0.145031 + 0.527093 1.99318 -2.71585 -0.791332 -0.451765 0.411949 + 0.556864 1.94751 -2.74135 -0.744495 -0.641418 0.185232 + 0.609047 1.90942 -2.58578 -0.474647 -0.879605 0.0317055 + 0.700579 1.79093 -2.19915 -0.144659 -0.952667 -0.267395 + 0.717862 1.79902 -2.24636 -0.19776 -0.9714 -0.131429 + 0.804427 1.78079 -2.30399 -0.407845 -0.913024 -0.00711501 + 0.731574 1.796 -2.30293 -0.220019 -0.974287 0.0485341 + 0.736939 1.79212 -2.32521 -0.171861 -0.901383 0.397458 + 0.739461 1.78442 -2.33447 -0.183961 -0.938257 0.292972 + 0.741214 1.78393 -2.34562 -0.189176 -0.976166 -0.106364 + 0.702936 1.8023 -2.31744 0.536282 -0.760112 0.366922 + 0.705458 1.7946 -2.32671 -0.346331 -0.913361 0.214073 + 0.707916 1.79867 -2.37156 -0.373513 -0.908516 -0.187316 + 0.743874 1.78945 -2.37079 -0.203501 -0.961387 -0.185264 + 0.777424 1.78561 -2.40034 -0.261454 -0.949836 -0.171622 + 0.701834 1.80185 -2.37086 -0.531235 -0.834439 -0.146633 + 0.678992 1.83517 -2.44137 -0.470099 -0.831225 -0.296768 + 0.710576 1.80419 -2.39672 -0.346261 -0.851567 -0.39362 + 0.661899 1.8537 -2.45587 -0.45384 -0.76975 -0.448903 + 0.693482 1.82274 -2.41123 -0.357646 -0.724737 -0.588936 + 0.715772 1.8243 -2.42795 -0.417218 -0.773273 -0.477471 + 0.766587 1.80198 -2.44288 -0.420047 -0.840071 -0.343281 + 0.66167 1.87441 -2.44634 -0.405396 -0.773493 -0.487199 + 0.750759 1.86051 -2.52226 -0.472392 -0.813009 -0.340386 + 0.63938 1.87276 -2.42967 -0.272151 -0.793003 -0.545051 + 0.64211 1.89408 -2.4698 -0.166273 -0.924298 -0.343551 + 0.731199 1.88017 -2.54571 -0.474357 -0.869574 -0.137207 + 0.621039 1.88748 -2.46078 0.0885132 -0.891278 -0.444735 + 0.608231 1.90077 -2.492 -0.04725 -0.973987 -0.221623 + 0.63728 1.90316 -2.52174 -0.182826 -0.975969 -0.118569 + 0.6372 1.90475 -2.54868 -0.228304 -0.973585 -0.00300028 + 0.604146 1.91391 -2.55595 0.150155 -0.974546 -0.166474 + 0.642102 1.90017 -2.57856 -0.254315 -0.963386 0.0849251 + 0.592234 1.92008 -2.61283 0.629907 -0.746916 -0.212916 + 0.592978 1.92413 -2.62486 0.629913 -0.746911 -0.212917 + 0.980616 1.61008 -1.44111 0.759422 0.366883 0.537284 + 1.00949 1.57435 -1.40242 -0.0864719 0.698867 0.710005 + 1.04089 1.60615 -1.42989 -0.101678 0.632006 0.768264 + 0.981022 1.60948 -1.42407 0.946317 -0.023956 -0.322352 + 1.00949 1.57435 -1.40242 0.775835 0.630926 0.00358046 + 1.0099 1.57375 -1.38538 0.755706 -0.609669 -0.239191 + 1.00949 1.57435 -1.40242 0.465199 -0.884194 -0.0423172 + -0.915918 1.85125 -0.681822 -0.971441 -0.2338 -0.0405009 + -0.920037 1.95183 -0.55663 -0.995019 -0.0961423 0.0263379 + -0.92271 1.96082 -0.624798 -0.999424 -0.0187193 0.028308 + -0.924635 2.00506 -0.519026 -0.954455 0.0669949 -0.290736 + -0.927308 2.01413 -0.587145 -0.994889 -0.081764 -0.0592547 + -0.927079 2.0888 -0.602681 -0.978241 0.0251031 -0.205949 + -0.920312 2.0305 -0.651286 -0.994058 0.0651446 -0.087207 + -0.929869 1.89636 -0.656157 -0.997049 -0.0766943 -0.00330807 + -0.940043 2.06386 -0.530873 -0.954912 -0.151628 -0.255248 + -0.939814 2.13853 -0.546399 -0.945401 -0.0122623 -0.325679 + -0.917013 2.20864 -0.606034 -0.919853 0.121785 -0.37288 + -0.910245 2.15041 -0.65459 -0.938109 0.168784 -0.302428 + -0.948391 2.01676 -0.468093 -0.468949 -0.844946 -0.257204 + -0.963799 2.07547 -0.479989 -0.884744 -0.118253 -0.450826 + -0.964867 2.1885 -0.493562 -0.913728 -0.0286139 -0.405318 + -0.936145 2.27055 -0.554076 -0.878188 0.0606318 -0.474457 + -0.910296 1.95936 -0.588676 -0.757762 0.463024 -0.459788 + -1.42465 1.65393 0.554738 0.158651 -0.348461 -0.923799 + -1.33145 1.63145 0.543685 -0.0662636 -0.755799 -0.651442 + -1.36103 1.64833 0.656244 -0.44662 -0.894571 0.0165496 + -1.42107 1.71157 0.51291 -0.341219 -0.537438 -0.771187 + -1.32788 1.68917 0.501908 -0.499495 -0.749325 -0.43476 + -1.24213 1.58922 0.591819 0.152189 -0.58564 -0.796156 + -1.4907 1.74001 0.544657 -0.49971 -0.517585 -0.694547 + -1.47947 1.78026 0.487332 -0.513283 -0.578693 -0.633763 + -1.3416 1.70969 0.431165 -0.247209 -0.720373 -0.648036 + -1.25585 1.60974 0.521077 -0.733074 -0.677962 -0.0544878 + -1.24213 1.58922 0.591819 -0.733074 -0.677962 -0.0544896 + -1.55876 1.75007 0.57343 -0.274106 0.0021195 -0.961697 + -1.55474 1.7939 0.567707 -0.574034 -0.467154 -0.672497 + -1.5491 1.8087 0.519079 -0.558101 -0.675418 -0.48201 + -1.48119 1.81453 0.465381 -0.403333 -0.407991 -0.819064 + -1.34332 1.74387 0.409165 0.172048 -0.0571056 -0.983432 + -1.54673 1.70181 0.56561 -0.125475 0.235197 -0.963815 + -1.72344 1.78891 0.607946 0.0614365 0.200849 -0.977694 + -1.73866 1.86406 0.624396 -0.0594945 -0.0861165 -0.994507 + -1.62279 1.80396 0.596478 -0.258931 -0.0251385 -0.965569 + -1.63474 1.85424 0.577997 -0.531421 -0.600955 -0.597029 + -1.5057 1.64402 0.533103 0.00407243 0.4744 -0.8803 + -1.67239 1.66973 0.591376 -0.0118551 0.3349 -0.942179 + -1.71141 1.74066 0.600128 -0.0154851 0.123927 -0.99217 + -1.84873 1.84604 0.584596 0.346673 0.132744 -0.928545 + -1.55433 1.51188 0.462787 0.0783771 0.182104 -0.98015 + -1.78626 1.7063 0.586033 0.116068 0.148598 -0.982063 + -1.82528 1.77714 0.594734 0.284094 0.125119 -0.950598 + -1.47328 1.52179 0.484423 0.576575 0.04319 -0.815902 + -1.4852 1.45922 0.489986 0.674998 0.159123 -0.720457 + -1.6279 1.51032 0.455686 -0.361603 -0.319779 -0.875777 + -1.58157 1.5563 0.524846 0.0200238 0.749896 -0.661252 + -1.36103 1.64833 0.656244 0.718026 -0.156207 -0.678261 + -1.37295 1.58577 0.661806 0.906335 -0.102093 -0.410041 + -1.4117 1.40588 0.573584 0.890971 0.0662854 -0.449195 + -1.44611 1.34345 0.496517 0.862761 0.182988 -0.471338 + -1.51962 1.39679 0.412919 0.598471 0.554336 -0.578398 + -1.60378 1.4514 0.414339 0.252118 0.685964 -0.682561 + -1.6785 1.53268 0.464751 -0.0695768 0.427526 -0.901321 + -1.35441 1.57088 0.718197 0.895974 -0.14791 -0.418751 + -1.39315 1.39099 0.629975 0.925882 -0.376372 0.0329614 + -1.43263 1.30966 0.516243 0.751217 -0.630082 -0.196646 + -1.51069 1.33656 0.353853 0.736424 0.451479 -0.503832 + -1.42226 1.38717 0.695585 0.901474 -0.432822 -0.00318933 + -1.37611 1.46992 0.725658 0.613776 -0.264279 -0.743933 + -1.38745 1.42682 0.758114 0.291409 -0.549019 -0.783364 + -1.43361 1.34407 0.72804 0.871131 -0.370591 -0.322169 + -1.4716 1.28252 0.647242 0.807773 -0.588772 0.0291533 + -1.46161 1.25622 0.403406 0.971141 -0.229602 0.0645576 + -1.47147 1.2329 0.468794 0.970547 -0.240874 -0.0042273 + -1.33033 1.32237 0.775818 -0.0139062 -0.260345 -0.965415 + -1.36663 1.3271 0.796625 -0.0331493 -0.312713 -0.949269 + -1.40545 1.33244 0.772376 0.608169 -0.300587 -0.734696 + -1.42922 1.26703 0.791681 0.265653 -0.4725 -0.84034 + -1.45738 1.27865 0.747345 0.628655 -0.713754 -0.308783 + -1.30379 1.01935 0.842075 -0.701042 -0.274019 -0.658372 + -1.3401 1.02416 0.862932 -0.26384 -0.291012 -0.91962 + -1.39111 1.13398 0.83733 0.120392 -0.243485 -0.962404 + -1.38463 1.23273 0.810888 0.449948 -0.263087 -0.853424 + -1.25658 1.00816 0.761047 -0.816984 -0.227274 -0.529984 + -1.23493 0.81986 0.848598 -0.3394 -0.739154 -0.581773 + -1.28214 0.831044 0.929626 -0.572969 -0.185011 -0.798422 + -1.34743 0.893034 0.898256 0.0404228 -0.329513 -0.943285 + -1.27955 1.43341 0.724495 -0.787108 -0.264702 -0.55713 + -1.2275 1.01816 0.717136 -0.668107 -0.322756 -0.670419 + -1.19119 0.851915 0.802477 0.177938 -0.726068 -0.664201 + -1.19143 0.74391 1.06795 0.121434 -0.810634 -0.572823 + -1.32722 0.760374 0.965028 -0.103016 -0.722529 -0.683622 + -1.37295 1.58577 0.661806 -0.603513 -0.590461 -0.535843 + -1.49721 1.30268 0.373529 0.902449 0.118537 -0.414167 + -1.26058 1.67037 0.479465 0.748008 -0.111949 -0.654179 + -1.27974 1.74305 0.504183 0.532834 -0.346579 -0.771991 + -1.19027 1.54224 0.680788 0.641162 -0.279753 -0.714598 + -1.25585 1.60974 0.521077 0.855809 -0.245671 -0.455232 + -1.36248 1.81655 0.433883 0.428058 0.603827 -0.672428 + -1.40002 1.84843 0.43166 0.645561 0.762778 0.0376799 + -1.51874 1.84632 0.463109 -0.371993 -0.682685 -0.628937 + -1.40002 1.84843 0.43166 -0.31818 -0.808407 -0.495216 + -1.6096 1.89578 0.469648 -0.532898 -0.672036 -0.514185 + -1.49371 1.87369 0.4009 -0.342336 -0.911483 -0.228044 + -1.45697 1.86202 0.356314 -0.354889 -0.929502 0.100401 + -1.36329 1.83676 0.387075 -0.505364 -0.851676 0.138762 + -1.26813 1.77022 0.467517 -0.65214 -0.740768 -0.161171 + -1.62911 1.86903 0.52937 -0.601119 -0.697692 -0.389719 + -1.71663 1.98444 0.482682 -0.280927 -0.831833 -0.47868 + -1.70041 2.01636 0.421399 -0.302824 -0.874058 -0.379895 + -1.58458 1.92315 0.407439 -0.55551 -0.750692 -0.357589 + -1.4805 1.86989 0.323886 -0.530858 -0.844972 -0.0649066 + -1.73614 1.95778 0.542455 -0.386941 -0.789641 -0.476177 + -1.85217 2.01488 0.387354 -0.221925 -0.975061 -0.0020898 + -1.82237 2.0239 0.372136 0.209587 -0.926501 -0.312521 + -1.80615 2.05582 0.310853 0.260895 -0.927769 -0.266794 + -1.68151 2.01991 0.357853 -0.516562 -0.856238 0.00441094 + -1.75061 1.91433 0.605915 -0.198178 -0.546767 -0.813493 + -1.86303 1.97649 0.569659 0.0790728 -0.655159 -0.751342 + -1.84856 2.01994 0.506199 -0.282637 -0.901608 -0.327445 + -1.86395 1.92119 0.601046 0.292483 -0.153384 -0.943889 + -1.9859 2.03839 0.470843 0.378025 -0.690931 -0.616208 + -1.97685 2.07276 0.415306 0.134482 -0.934255 -0.330275 + -1.98985 2.08774 0.344357 -0.133822 -0.991001 -0.00308779 + -1.86155 2.03492 0.43525 -0.59574 -0.802765 0.0257306 + -1.97939 1.91008 0.527281 0.55678 -0.0870311 -0.826088 + -1.98682 1.983 0.502179 0.573622 -0.319895 -0.754073 + -2.10785 2.01579 0.369994 0.72488 -0.523015 -0.448336 + -2.09749 2.04099 0.300132 0.612565 -0.7504 -0.248322 + -2.08845 2.07545 0.244645 0.631907 -0.753134 -0.18298 + -1.95594 1.84118 0.537418 0.318832 -0.267833 -0.909182 + -2.11899 1.92745 0.436187 0.487515 -0.601926 -0.632466 + -2.10042 1.94287 0.395095 0.480734 -0.688386 -0.543158 + -2.21448 1.97213 0.146212 0.340431 -0.938293 -0.0609351 + -2.20412 1.99725 0.076298 0.422197 -0.904346 -0.0625178 + -1.92435 1.7883 0.580401 0.0339354 -0.222883 -0.974254 + -2.0874 1.87467 0.479219 0.111452 -0.663774 -0.739582 + -2.25096 1.97584 0.273977 -0.0299687 -0.985607 -0.166376 + -2.23239 1.99125 0.232885 -0.118591 -0.992596 -0.026269 + -1.73074 1.64424 0.584322 0.0741838 0.316941 -0.94554 + -1.86882 1.72633 0.57874 0.513882 0.526135 -0.677574 + -1.84301 1.69247 0.546183 0.315118 0.669452 -0.672706 + -1.89362 1.71493 0.555299 0.0694684 0.222082 -0.97255 + -2.06103 1.82402 0.535744 0.404489 -0.204117 -0.891474 + -1.68095 1.58851 0.550251 0.225784 0.686037 -0.691647 + -1.65514 1.55474 0.517745 0.280253 0.801447 -0.528338 + -2.11446 1.66752 0.536 -0.668628 -0.425153 0.610067 + -2.07944 1.69408 0.561203 -0.540933 -0.521962 0.659506 + -2.17596 1.71816 0.505099 -0.520638 -0.116165 0.845838 + -2.06416 1.6055 0.555424 -0.736878 -0.396759 0.547351 + -2.02915 1.63206 0.580626 -0.619384 -0.25349 0.743038 + -1.99323 1.67405 0.641699 -0.679049 -0.496245 0.540956 + -2.03536 1.72045 0.660326 -0.396191 -0.82836 0.396045 + -2.09294 1.7091 0.57958 -0.341504 -0.883916 0.31948 + -2.17596 1.71816 0.505099 -0.49317 -0.804002 0.33221 + -2.05331 1.58948 0.539777 -0.539813 -0.340268 -0.769948 + -2.03335 1.52095 0.551873 -0.928457 -0.2446 0.279532 + -1.97254 1.54083 0.602234 -0.716622 -0.156022 0.679787 + -1.93662 1.58282 0.663307 -0.960484 -0.0456554 0.274564 + -2.08416 1.6346 0.53063 -0.525064 -0.671323 -0.5231 + -1.92623 1.52555 0.55051 -0.171319 -0.160066 -0.972126 + -2.0225 1.50484 0.536176 -0.468757 -0.0323017 -0.882736 + -2.02235 1.43909 0.554258 -0.978711 -0.187128 0.084304 + -1.96154 1.45906 0.604668 -0.93673 0.228917 0.264827 + -2.14566 1.68514 0.49968 -0.472258 -0.603201 -0.642744 + -1.95708 1.57075 0.541413 -0.064221 -0.166665 -0.98392 + -1.81379 1.44762 0.531278 -0.346612 -0.0335845 -0.937407 + -1.87226 1.48096 0.546936 -0.240218 -0.125874 -0.962523 + -0.798114 2.04695 0.249812 0.582907 -0.482716 -0.653609 + -0.905691 2.11918 0.074307 0.678748 0.724874 -0.117722 + -0.846312 2.08542 0.208784 0.87355 0.292197 -0.38927 + -0.738912 2.12985 0.321833 0.667648 0.0013291 -0.744476 + -0.690714 2.09138 0.362861 0.713596 -0.0775135 -0.696256 + -0.675598 2.02754 0.398431 0.658085 -0.394429 -0.641366 + -0.815225 2.03678 0.260635 0.448631 -0.71777 -0.532481 + -0.905691 2.11918 0.074307 0.10775 -0.933094 -0.343112 + -0.804951 2.14597 0.266304 0.718092 0.128867 -0.683913 + -0.579075 2.25846 0.43007 0.496331 -0.498872 -0.71048 + -0.547216 2.19947 0.491447 0.522684 -0.400135 -0.75279 + -0.5321 2.13554 0.526966 0.50735 -0.165553 -0.845688 + -0.645114 2.2745 0.37449 0.588502 -0.17204 -0.789979 + -0.4687 2.2542 0.479834 -0.365837 -0.796584 -0.481267 + -0.9191 1.77532 -0.757703 -0.921344 0.26709 0.282469 + -0.938901 1.7913 -0.829386 -0.967888 0.120528 0.220604 + -0.927779 1.73612 -0.733023 -0.859058 0.395144 0.325392 + -0.919516 1.81726 -0.779352 -0.970921 0.0678472 0.229586 + -0.939318 1.83324 -0.851034 -0.993218 0.116063 0.00684519 + -0.945445 1.76854 -0.856961 -0.99584 0.0460393 0.0786314 + -0.927779 1.73612 -0.733023 -0.982974 0.0857149 0.162529 + -0.942828 1.68755 -0.866885 -0.998141 -0.0411133 0.04499 + -0.906177 1.85878 -0.71386 -0.977632 -0.0166357 0.209664 + -0.914713 1.86018 -0.745692 -0.99153 -0.0836206 0.0993798 + -0.926983 1.90829 -0.818027 -0.993211 0.112422 0.0299023 + -0.908131 1.97388 -0.863228 -0.94228 0.295835 -0.156816 + -0.920465 1.89883 -0.896237 -0.96343 0.259979 -0.0649091 + -0.935194 1.85775 -0.932285 -0.962114 0.265406 0.0624215 + -0.947421 1.79744 -0.917223 -0.994183 0.101227 0.0367764 + -0.92218 1.95121 -0.784367 -0.991157 0.125322 0.0436205 + -0.889057 2.0438 -0.824329 -0.920411 0.323342 -0.219759 + -0.853357 2.06532 -0.916001 -0.904602 0.40171 -0.142567 + -0.881246 1.99862 -0.951473 -0.921489 0.379427 -0.0830305 + -0.895974 1.95763 -0.987472 -0.920106 0.390474 0.0305702 + -0.911212 2.02207 -0.740895 -0.968058 0.180607 -0.17391 + -0.87809 2.11465 -0.780856 -0.905549 0.336539 -0.258307 + -0.834284 2.13524 -0.87711 -0.877909 0.411532 -0.244781 + -0.794945 2.19464 -0.931195 -0.908282 0.409743 -0.0844633 + -0.825763 2.12504 -0.97444 -0.912184 0.409762 -0.00392631 + -0.928664 1.90521 -0.720078 -0.967429 -0.0535973 -0.247402 + -0.927471 1.96604 -0.682646 -0.995367 0.0887608 -0.0369671 + -0.910019 2.0829 -0.703454 -0.948029 0.185944 -0.258197 + -0.867241 2.18075 -0.73473 -0.861721 0.329599 -0.385748 + -0.808844 2.2017 -0.834823 -0.854692 0.437788 -0.279004 + -0.867467 2.24817 -0.685917 -0.821212 0.306916 -0.481055 + -0.797996 2.26779 -0.788689 -0.816448 0.413034 -0.403504 + -0.742346 2.33211 -0.841297 -0.895377 0.381106 -0.230344 + -0.769506 2.2611 -0.8889 -0.896867 0.427295 -0.114234 + -0.879963 2.30651 -0.635553 -0.798769 0.254947 -0.544951 + -0.790321 2.32833 -0.73795 -0.783134 0.401007 -0.475284 + -0.734671 2.39274 -0.790508 -0.835662 0.436833 -0.332934 + -0.723082 2.36367 -0.89277 -0.952793 0.234904 0.19237 + -0.750241 2.29266 -0.940374 -0.93994 0.240587 0.242137 + -0.899095 2.36842 -0.583594 -0.744534 0.122759 -0.6562 + -0.802816 2.38658 -0.687645 -0.712985 0.287553 -0.639504 + -0.724962 2.45691 -0.737052 -0.775946 0.283106 -0.563701 + -0.683658 2.44041 -0.844285 -0.952871 0.272195 0.133969 + -0.943494 2.41256 -0.535238 -0.757947 0.0332098 -0.65147 + -0.843535 2.43289 -0.63406 -0.688584 0.153698 -0.708681 + -0.76568 2.50322 -0.683475 -0.628235 0.296858 -0.719164 + -0.673949 2.50458 -0.790829 -0.965184 0.246424 -0.0877197 + -0.961197 2.32062 -0.501188 -0.859715 -0.0457565 -0.50872 + -0.98843 2.44837 -0.481262 -0.618629 -0.390629 -0.681694 + -0.887934 2.47711 -0.585654 -0.605344 -0.0538717 -0.794139 + -0.798624 2.54457 -0.643083 -0.510764 0.1197 -0.851347 + -0.640952 2.57393 -0.734741 -0.958912 0.202906 -0.198285 + -0.989645 2.23551 -0.440186 -0.916228 -0.0672446 -0.394974 + -1.00613 2.35642 -0.447203 -0.88277 -0.081908 -0.46261 + -1.02405 2.3753 -0.403114 -0.918116 -0.253661 -0.304499 + -1.04836 2.45826 -0.454405 -0.665428 -0.475437 -0.575469 + -0.960276 2.50357 -0.553475 -0.434735 -0.480003 -0.761972 + -0.988577 2.12248 -0.426613 -0.934876 -0.0052776 -0.354934 + -1.00756 2.25448 -0.396038 -0.971597 -0.094175 -0.217095 + -1.01663 2.3143 -0.349446 -0.951964 -0.210719 -0.222177 + -1.03504 2.35087 -0.329394 -0.815363 -0.303482 -0.493033 + -1.04245 2.41196 -0.383011 -0.765655 -0.543822 -0.343555 + -1.00104 1.98792 -0.415936 -0.496606 -0.799198 -0.338622 + -1.018 2.02083 -0.35915 -0.965877 -0.258968 -0.00407133 + -1.00554 2.1554 -0.369826 -0.967887 0.00481509 -0.251339 + -0.991923 2.00152 -0.299495 -0.195315 -0.878073 0.436853 + -1.00945 2.09254 -0.276952 -0.968933 -0.19708 0.149428 + -1.01462 2.2153 -0.323177 -0.989167 -0.0561285 -0.135639 + -0.910296 1.95936 -0.588676 -0.140828 -0.910463 0.388876 + -0.983372 2.07331 -0.217248 -0.868739 -0.417688 0.266137 + -1.02436 2.14526 -0.215457 -0.94804 -0.314095 -0.0506466 + -1.02953 2.26801 -0.26168 -0.851984 -0.313542 -0.419303 + -1.06899 2.33969 -0.284833 -0.692449 -0.464131 -0.552355 + -1.08109 2.40086 -0.315784 -0.531204 -0.658702 -0.532855 + -0.985891 2.14995 -0.042786 -0.0406279 -0.98201 0.184409 + -1.0088 2.10705 -0.139893 -0.602097 -0.76224 0.237632 + -1.03829 2.21156 -0.143494 -0.863502 -0.504267 -0.00885052 + -1.08053 2.27656 -0.209287 -0.748895 -0.537308 -0.387887 + -1.11999 2.34824 -0.23243 -0.550238 -0.587228 -0.593635 + -0.905691 2.11918 0.074307 -0.559876 -0.810866 0.170398 + -0.939812 1.7023 0.659365 0.856444 0.472057 -0.208964 + -1.02368 1.78898 0.511438 0.875293 0.159408 -0.456564 + -1.07094 1.86141 0.481375 0.853731 0.506002 -0.122905 + -1.07689 1.85796 0.419351 0.895538 0.126612 -0.426592 + -1.12415 1.9304 0.389289 0.870411 0.488948 0.0575688 + -1.17438 2.06327 0.257947 0.900989 0.163297 -0.401936 + -1.18352 2.10173 0.282137 0.975216 0.190671 -0.112247 + -1.1333 1.96885 0.413481 0.869201 0.494442 0.00400529 + -1.07094 1.86141 0.481375 0.466296 -0.263077 -0.844606 + -1.08471 1.76643 0.448892 0.644822 -0.371989 -0.667704 + -1.19886 1.96262 0.243077 0.696707 -0.225157 -0.681105 + -1.26321 2.0167 0.155611 0.652707 -0.227057 -0.722786 + -1.23873 2.11735 0.170481 0.741797 -0.0562659 -0.66826 + -0.963729 1.67169 0.607384 0.748538 -0.209375 -0.629168 + -1.08988 1.68747 0.501654 0.334339 -0.70916 -0.620733 + -1.20667 1.87117 0.272668 0.581034 -0.372146 -0.723814 + -1.30139 1.91958 0.191021 0.260718 -0.473027 -0.841588 + -0.879863 1.58501 0.755312 0.511077 -0.277831 -0.813394 + -0.897106 1.49916 0.727805 0.499125 -0.113589 -0.859053 + -0.9689 1.59273 0.660146 0.26412 -0.489588 -0.83099 + -1.11069 1.64926 0.56604 -0.104398 -0.871487 -0.479177 + -1.25634 1.77205 0.302146 0.280348 -0.705549 -0.65085 + -0.939812 1.7023 0.659365 0.88661 0.080599 -0.455441 + -1.02369 1.81801 0.51875 0.389526 -0.319725 -0.863739 + -2.01921 2.08801 0.063897 0.891652 -0.363071 -0.270437 + -2.05462 2.14025 -0.122982 0.706738 -0.521509 -0.478068 + -2.02297 2.22611 -0.133903 0.307269 -0.652945 -0.692278 + -2.11 2.13872 -0.166128 -0.0225143 -0.134814 -0.990615 + -2.07834 2.22467 -0.176999 -0.234222 -0.0311514 -0.971684 + -1.99525 2.25385 -0.159755 0.368819 -0.473768 -0.799698 + -2.00431 2.06925 -0.007613 -0.435439 -0.782534 -0.445009 + -2.01921 2.08801 0.063897 -0.963397 -0.228058 -0.140913 + -2.1564 2.07049 -0.153557 0.272909 -0.420879 -0.86509 + -2.21245 2.05771 -0.140023 -0.285395 0.204076 -0.936431 + -2.15347 2.13098 -0.122723 -0.474097 0.330843 -0.81595 + -2.11643 2.21115 -0.126387 -0.731772 0.290711 -0.616439 + -2.0413 2.30484 -0.180664 -0.33293 -0.033589 -0.942353 + -2.08449 2.10682 -0.082678 0.622944 -0.738172 -0.258925 + -2.20285 2.00328 -0.128748 0.393814 -0.715142 -0.577479 + -2.25885 1.98948 -0.127453 0.0654146 -0.410799 -0.909376 + -2.28707 2.03025 -0.12807 0.0726322 0.0373063 -0.996661 + -2.22809 2.10343 -0.110819 -0.108063 0.451365 -0.885772 + -2.04908 2.05457 0.10421 -0.394549 -0.904236 -0.163367 + -2.01921 2.08801 0.063897 0.445365 -0.822987 -0.352623 + -1.96677 2.0257 0.223427 -0.477639 -0.864623 0.155847 + -1.97616 2.04573 0.271322 -0.576478 -0.770909 0.270873 + -2.06277 2.09659 0.177242 -0.0374822 -0.993785 0.104814 + -2.08449 2.10682 -0.082678 -0.913318 -0.402732 0.0604703 + -2.13094 2.03961 -0.057868 0.669738 -0.722122 -0.173179 + -1.95187 2.00685 0.151865 -0.29087 -0.949658 -0.116377 + -1.92207 2.01587 0.136647 0.26746 -0.928651 -0.257044 + -1.90933 2.03896 0.068049 0.0729942 -0.964419 -0.254103 + -2.01921 2.08801 0.063897 -0.772591 -0.634878 0.00569207 + -1.9766 2.09699 -0.033465 -0.181133 -0.798418 -0.574212 + -1.96385 2.12008 -0.10206 -0.502451 -0.590536 -0.631514 + -1.88992 2.05432 0.003641 0.175826 -0.91176 -0.371186 + -1.78673 2.07109 0.246399 -0.195834 -0.98047 0.0180721 + -1.95888 2.33143 -0.179713 -0.160192 -0.365857 -0.916781 + -1.91703 2.39073 -0.221035 -0.199487 -0.259334 -0.944961 + -1.922 2.17939 -0.143383 -0.0811221 -0.538241 -0.838878 + -1.84277 2.10366 -0.031417 0.0408099 -0.879235 -0.474636 + -2.00493 2.38241 -0.200621 -0.402876 -0.110237 -0.908591 + -1.98115 2.45802 -0.212777 -0.401571 0.0593372 -0.913904 + -1.84323 2.43208 -0.244655 -0.338361 -0.225106 -0.913695 + -1.87485 2.22873 -0.178439 -0.194052 -0.47996 -0.855559 + -2.08929 2.29985 -0.133025 -0.702724 0.137258 -0.698097 + -2.06551 2.37554 -0.14513 -0.649134 -0.0154919 -0.760516 + -2.06646 2.47435 -0.164459 -0.589917 -0.069556 -0.804463 + -1.90735 2.49937 -0.236397 -0.324489 -0.273372 -0.905524 + -1.78377 2.48357 -0.285444 -0.551084 -0.389166 -0.738144 + -2.18137 2.18104 -0.066045 -0.610975 0.487603 -0.623661 + -2.15423 2.26975 -0.072682 -0.746867 0.132608 -0.651617 + -2.14124 2.36422 -0.079906 -0.739422 -0.0379092 -0.672174 + -2.1422 2.46302 -0.099236 -0.724802 -0.136636 -0.675272 + -2.01558 2.518 -0.205467 -0.451924 -0.352835 -0.819312 + -2.22713 2.13299 -0.089216 -0.106504 0.701112 -0.705052 + -2.23721 2.19597 -0.019299 -0.401947 0.577828 -0.710319 + -2.20792 2.29565 0.00465 -0.754194 0.195071 -0.627008 + -2.19493 2.39012 -0.002574 -0.82334 -0.045999 -0.565681 + -2.19766 2.49044 -0.027537 -0.819587 -0.122525 -0.559701 + -2.34943 2.14379 -0.120915 0.20603 0.815703 -0.540537 + -2.28297 2.148 -0.04242 0.0294366 0.754191 -0.655995 + -2.39238 2.16494 -0.055148 0.0178468 0.996255 -0.0846045 + -2.29868 2.23092 0.067564 -0.715059 0.543131 -0.440113 + -2.26939 2.33052 0.091463 -0.780482 0.159953 -0.60437 + -2.35039 2.11423 -0.142518 0.187993 0.291966 -0.937771 + -2.45884 2.16073 -0.133652 0.464929 0.746119 -0.4766 + -2.34741 1.98765 -0.137876 0.0395935 -0.34346 -0.938332 + -2.41073 2.07162 -0.152324 0.417677 0.0289103 -0.908135 + -2.47436 2.13853 -0.208818 0.692414 0.4631 -0.553264 + -2.57149 2.19664 -0.189667 0.368222 0.929039 -0.0360333 + -2.41388 1.93289 -0.102239 0.117337 -0.726642 -0.676922 + -2.46026 1.99781 -0.192677 0.407568 -0.490041 -0.770551 + -2.52389 2.06472 -0.24917 0.562199 -0.435811 -0.702852 + -2.57622 2.1621 -0.327435 0.864073 0.345566 -0.366008 + -2.58701 2.17446 -0.264832 0.691813 0.691644 -0.20742 + -2.32532 1.93473 -0.091815 0.282242 -0.835506 -0.471454 + -2.4752 1.90394 -0.065482 -0.184357 -0.928635 -0.321946 + -2.52159 1.96885 -0.155921 -0.216449 -0.819189 -0.531112 + -2.57747 2.04533 -0.243775 -0.224516 -0.830237 -0.510195 + -2.55172 2.0625 -0.290718 0.351439 -0.666144 -0.657832 + -2.26235 1.96594 -0.076878 0.466506 -0.883362 -0.0452016 + -2.38482 1.89739 -0.039944 0.229607 -0.969668 -0.0838089 + -2.52786 1.90878 0.011527 -0.324616 -0.940898 -0.0966134 + -2.59692 1.97242 -0.081094 -0.513403 -0.812734 -0.275465 + -2.6528 2.0488 -0.168998 -0.570032 -0.742784 -0.351191 + -2.15662 2.01839 0.009485 0.535389 -0.844412 -0.0181095 + -2.30984 1.9448 -0.010065 0.423462 -0.896017 0.133542 + -2.43748 1.90232 0.037117 0.135359 -0.982911 0.124752 + -2.56208 1.9173 0.096568 -0.446336 -0.893011 0.0575868 + -2.33788 1.95024 0.068513 0.304299 -0.936248 0.175618 + -2.46552 1.90768 0.115641 0.123459 -0.980982 0.149772 + -2.56497 1.93226 0.183856 -0.439401 -0.891893 0.107025 + -2.63114 1.98094 0.00394 -0.683884 -0.726283 -0.0693862 + -2.69489 2.06219 -0.099988 -0.756224 -0.640445 -0.133998 + -2.35579 1.96937 0.155186 0.250707 -0.952246 0.174281 + -2.46841 1.92264 0.20293 0.153463 -0.981928 0.110753 + -2.55743 1.93752 0.279154 -0.486431 -0.868117 0.0987784 + -2.63891 1.99185 0.10725 -0.72968 -0.682228 0.0461766 + -2.70266 2.07318 0.003376 -0.822254 -0.56912 0.000746165 + -2.35464 1.97552 0.240132 0.23627 -0.968858 0.0740969 + -2.46726 1.92879 0.287876 0.171688 -0.98125 -0.0875881 + -2.51789 1.91892 0.360977 -0.36936 -0.927258 -0.061358 + -2.63136 1.99719 0.2026 -0.729722 -0.675936 0.103038 + -2.69203 2.06454 0.153948 -0.832593 -0.545824 0.0941518 + -2.36393 1.98662 0.325503 0.306812 -0.943564 -0.124715 + -2.42772 1.91018 0.369699 0.270018 -0.903994 -0.331491 + -2.49455 1.90443 0.452073 -0.465108 -0.883359 -0.0578806 + -2.62208 2.00313 0.305904 -0.721649 -0.685928 0.0934048 + -2.68276 2.07057 0.257303 -0.869396 -0.482955 0.104423 + -2.26025 1.98694 0.35935 -0.217413 -0.94835 -0.231006 + -2.3478 1.96087 0.399315 0.250601 -0.780095 -0.573281 + -2.4116 1.88434 0.44346 0.0186851 -0.913316 -0.406823 + -2.45006 1.8742 0.527831 -0.396996 -0.895642 -0.20055 + -2.59874 1.98865 0.397 -0.680365 -0.732865 -0.00338486 + -2.23387 1.93629 0.415874 -0.0206697 -0.684186 -0.729015 + -2.3475 1.89328 0.451581 0.0304835 -0.718822 -0.694525 + -2.36711 1.85411 0.519218 -0.263996 -0.881681 -0.39108 + -2.02509 1.75372 0.534509 0.226373 0.0154897 -0.973918 + -2.23356 1.86879 0.468189 -0.0801071 -0.518449 -0.851348 + -2.29796 1.84198 0.496837 -0.316115 -0.638518 -0.701687 + -2.31758 1.80281 0.564476 -0.530786 -0.824015 -0.198154 + -2.32775 1.80176 0.638488 -0.354247 -0.932081 -0.0757208 + -1.85767 1.64454 0.554014 0.00223835 0.344011 -0.938963 + -1.78295 1.56325 0.503601 -0.316717 0.174407 -0.932348 + -1.98656 1.67634 0.551519 0.0121252 -0.0451675 -0.998906 + -2.19504 1.79142 0.4852 -0.00539201 -0.199273 -0.979929 + -2.25122 1.76773 0.50923 -0.496109 -0.710724 -0.498746 + -1.60429 1.36788 0.3626 -0.552506 -0.452338 -0.700091 + -1.79238 1.54006 0.510978 -0.361389 -0.0101552 -0.93236 + -1.95973 1.60279 0.539327 0.0337568 0.0391626 -0.998662 + -2.1483 1.71718 0.497593 -0.00359493 -0.103174 -0.994657 + -2.17596 1.71816 0.505099 -0.258826 -0.316883 -0.912466 + -1.49721 1.30268 0.373529 -0.0689533 -0.274035 -0.959245 + -1.3001 2.61612 -0.639218 -0.198498 -0.763167 0.614959 + -1.49586 2.56716 -0.58981 0.325213 -0.813204 0.482634 + -1.42854 2.55889 -0.649095 -0.261824 -0.953626 -0.148479 + -1.29075 2.53949 -0.6781 -0.273143 -0.946443 0.17216 + -1.25085 2.53548 -0.642347 -0.422825 -0.891601 0.162072 + -1.2602 2.61211 -0.603465 -0.817925 -0.562122 -0.122549 + -1.39026 2.63554 -0.586252 0.138319 -0.9763 0.166454 + -1.49586 2.56716 -0.58981 0.331158 -0.551235 0.765817 + -1.58602 2.58657 -0.536845 0.286573 -0.582008 0.761014 + -1.38815 2.56513 -0.686901 -0.36841 -0.647767 -0.666838 + -1.25037 2.54573 -0.715897 0.0747647 -0.674029 -0.734912 + -1.20705 2.52844 -0.663145 0.369842 -0.921393 -0.119382 + -1.3163 2.56033 -0.481979 0.0779208 -0.994226 -0.073779 + -1.38229 2.53653 -0.460558 -0.203936 -0.811828 -0.547124 + -1.57837 2.67193 -0.59068 -0.656773 -0.297396 -0.692968 + -1.51214 2.66684 -0.652472 -0.609066 -0.322124 -0.724758 + -1.33797 2.62379 -0.735296 -0.205029 -0.183532 -0.961394 + -1.1783 2.60536 -0.717774 0.255144 -0.437048 -0.862491 + -1.13498 2.58814 -0.664965 0.32786 -0.884544 -0.331798 + -1.6457 2.68019 -0.531396 -0.674609 -0.346892 -0.65159 + -1.68768 2.91119 -0.517889 -0.673386 -0.0672369 -0.736228 + -1.62145 2.9061 -0.57968 -0.722778 -0.104964 -0.683063 + -1.55545 2.87743 -0.65243 -0.700632 -0.122339 -0.702957 + -1.46196 2.7255 -0.700868 -0.532933 -0.234319 -0.813066 + -1.47007 2.61951 -0.553496 0.0691955 -0.996045 0.0557275 + -1.65093 2.62757 -0.481455 -0.442259 -0.871965 -0.209962 + -1.49939 2.62158 -0.514475 -0.182048 -0.886402 -0.425618 + -1.68026 2.62964 -0.442434 -0.511415 -0.808471 -0.291254 + -1.85563 2.74393 -0.352592 -0.687383 -0.376163 -0.621293 + -1.7851 2.74542 -0.40958 -0.653868 -0.154463 -0.740674 + -1.58602 2.58657 -0.536845 -0.714862 -0.552201 -0.429008 + -1.40544 2.59553 -0.522956 -0.091748 -0.826615 -0.555239 + -1.47385 2.56861 -0.483731 -0.0671506 -0.742373 -0.666613 + -1.56168 2.57668 -0.468498 -0.327449 -0.502145 -0.800392 + -1.74718 2.65567 -0.375326 -0.601375 -0.450839 -0.659615 + -1.92255 2.76996 -0.285484 -0.596367 -0.140757 -0.790275 + -1.32563 2.61155 -0.555713 -0.313955 -0.768675 -0.557289 + -1.5158 2.50943 -0.384024 0.0381157 -0.825219 -0.563525 + -1.58421 2.4825 -0.34479 -0.184095 -0.722046 -0.666902 + -1.64313 2.46622 -0.302775 0.153892 -0.89812 -0.411943 + -1.53614 2.52362 -0.437803 0.285919 -0.873028 -0.395059 + -1.44772 2.53598 -0.412815 -0.0344637 -0.87907 -0.475444 + -1.50702 2.42195 -0.279312 0.11945 -0.724956 -0.678359 + -1.5751 2.3954 -0.250513 0.00538386 -0.670113 -0.742239 + -1.58602 2.58657 -0.536845 0.299558 -0.910718 0.284354 + -1.44638 2.46044 -0.300165 0.15228 -0.780961 -0.605731 + -1.51313 2.29001 -0.149574 0.379767 -0.632734 -0.674852 + -1.56252 2.23009 -0.131389 0.175666 -0.618888 -0.765584 + -1.614 2.19748 -0.106921 0.3588 -0.532128 -0.766878 + -1.62659 2.3628 -0.226055 -0.187271 -0.599717 -0.777991 + -1.38039 2.48423 -0.321586 0.103289 -0.850498 -0.515738 + -1.45249 2.32849 -0.170436 0.265634 -0.6968 -0.666265 + -1.40673 2.26514 -0.0839 0.343748 -0.632489 -0.694114 + -1.44143 2.21733 -0.061887 0.333725 -0.500521 -0.798816 + -1.49081 2.1574 -0.043692 0.26466 -0.454164 -0.8507 + -1.31783 2.50633 -0.353252 -0.269259 -0.818702 -0.507175 + -1.39437 2.37983 -0.191359 0.22857 -0.761374 -0.606684 + -1.3486 2.31648 -0.104823 0.153892 -0.768012 -0.621671 + -1.27698 2.27543 -0.022522 0.241215 -0.849161 -0.469831 + -1.31168 2.22762 -0.000509 0.502434 -0.358478 -0.7868 + -1.27251 2.55328 -0.502778 -0.321253 -0.926771 -0.194658 + -1.25834 2.48932 -0.404594 -0.393215 -0.82417 -0.407585 + -1.33181 2.40193 -0.223025 -0.0107838 -0.804446 -0.593928 + -1.30396 2.34659 -0.149771 -0.0339501 -0.780982 -0.62363 + -1.27338 2.29774 -0.092373 -0.0574718 -0.892647 -0.447077 + -1.21302 2.53636 -0.55407 -0.309272 -0.769486 -0.558786 + -1.19745 2.49031 -0.447509 -0.345417 -0.851623 -0.394239 + -1.26661 2.4303 -0.253176 -0.0271631 -0.888749 -0.457588 + -1.23877 2.37488 -0.179981 -0.192944 -0.740977 -0.643214 + -1.22874 2.32785 -0.137321 -0.201154 -0.804231 -0.55924 + -1.05893 2.61404 -0.683015 0.33478 -0.768482 -0.545305 + -1.13696 2.56225 -0.572121 -0.211886 -0.806495 -0.55197 + -1.14564 2.48276 -0.502629 -0.408862 -0.780114 -0.473555 + -1.20572 2.43121 -0.29614 -0.257861 -0.878056 -0.403144 + -1.18009 2.38412 -0.225178 -0.357684 -0.725287 -0.588235 + -1.10129 2.65799 -0.720933 0.176528 -0.169503 -0.969591 + -0.952736 2.65753 -0.671346 0.117545 -0.543568 -0.831094 + -1.08515 2.55479 -0.6272 -0.418655 -0.25149 -0.872629 + -1.09197 2.49324 -0.547582 0.0035975 -0.881634 -0.471921 + -1.14067 2.43669 -0.342226 -0.187104 -0.904363 -0.383561 + -1.26096 2.67633 -0.738513 0.0744521 0.00752472 -0.997196 + -1.18748 2.72607 -0.714866 0.137809 0.221193 -0.965444 + -0.995101 2.70139 -0.709312 0.178388 -0.0654426 -0.981781 + -0.875328 2.66696 -0.670681 0.0796277 -0.327457 -0.941505 + -1.00774 2.56423 -0.626535 0.199668 -0.711624 -0.67359 + -1.40656 2.74411 -0.750897 -0.221084 -0.407019 -0.88626 + -1.33308 2.79385 -0.727258 0.214473 -0.218816 -0.951904 + -1.11543 2.77194 -0.693708 0.168783 0.248755 -0.953747 + -0.923048 2.74734 -0.688105 0.121206 0.193536 -0.973577 + -0.778789 2.66576 -0.665798 -0.0887103 -0.34113 -0.935821 + -1.50006 2.89604 -0.702459 -0.797797 -0.284566 -0.531547 + -1.45443 2.86248 -0.801524 -0.454077 -0.405666 -0.793252 + -1.38219 2.88944 -0.808829 0.0923162 -0.461446 -0.882352 + -1.26083 2.82082 -0.734563 0.285119 -0.354411 -0.890562 + -1.04309 2.83942 -0.656181 0.167087 0.185379 -0.968358 + -1.61028 3.04066 -0.617947 -0.802366 -0.119512 -0.584743 + -1.56896 3.04128 -0.69341 -0.884303 -0.226945 -0.408048 + -1.52334 3.00771 -0.792474 -0.838766 -0.279602 -0.467219 + -1.46456 2.96133 -0.856744 -0.43366 -0.509505 -0.743198 + -1.30813 2.92966 -0.807285 0.338312 -0.37687 -0.862273 + -1.67628 3.06941 -0.545148 -0.726891 -0.05382 -0.684641 + -1.65569 3.23792 -0.566404 -0.787428 -0.254808 -0.561275 + -1.61437 3.23854 -0.641875 -0.890128 -0.183726 -0.417033 + -1.54549 3.15754 -0.791375 -0.887836 -0.374175 -0.267844 + -1.48671 3.11124 -0.855596 -0.59334 -0.175434 -0.785602 + -1.74535 3.11365 -0.478972 -0.678771 -0.0264612 -0.733873 + -1.72475 3.28224 -0.500178 -0.735128 -0.0979724 -0.670812 + -1.65737 3.38525 -0.628392 -0.881319 -0.268854 -0.388581 + -1.82338 3.13348 -0.411117 -0.65923 -0.00961781 -0.75188 + -1.85704 3.26162 -0.378462 -0.66499 -0.035641 -0.746001 + -1.89281 3.42958 -0.364967 -0.677891 -0.0988322 -0.728488 + -1.76052 3.45011 -0.486733 -0.764736 -0.153269 -0.625849 + -1.72596 3.52404 -0.570377 -0.877418 -0.287079 -0.384348 + -1.76571 2.93101 -0.450025 -0.66997 -0.0674115 -0.739321 + -1.93094 3.12032 -0.315717 -0.688146 -0.03703 -0.724626 + -1.9646 3.24846 -0.283062 -0.656972 -0.0300507 -0.753316 + -1.8402 2.95534 -0.383558 -0.688682 -0.0853769 -0.720019 + -2.00248 3.10753 -0.242768 -0.647973 -0.0453044 -0.760315 + -1.49586 2.56716 -0.58981 -0.637179 -0.585839 -0.500795 + -1.91174 2.94255 -0.310608 -0.665606 -0.0556807 -0.744223 + -1.98227 2.94105 -0.25362 -0.558639 0.0198152 -0.829174 + -2.08849 3.05709 -0.174005 -0.576015 0.0573106 -0.815428 + -2.09573 3.21649 -0.178093 -0.630168 -0.0245891 -0.776069 + -2.06155 2.88877 -0.219268 -0.513809 0.0245556 -0.857553 + -2.16776 3.0049 -0.139603 -0.622669 0.148497 -0.768265 + -2.24769 3.06839 -0.04557 -0.709019 0.0349271 -0.704324 + -2.18174 3.16605 -0.10933 -0.657452 0.0110682 -0.753415 + -1.97577 2.71731 -0.247687 -0.45761 -0.00880304 -0.889109 + -2.11477 2.83612 -0.18147 -0.621534 -0.0347292 -0.782617 + -2.22059 2.91037 -0.085081 -0.735021 -0.0397142 -0.67688 + -2.30052 2.97378 0.008902 -0.789742 -0.0420709 -0.611995 + -2.31727 3.15669 0.028492 -0.770474 0.0286842 -0.636825 + -1.83669 2.6434 -0.321467 -0.457957 -0.0221103 -0.8887 + -2.03681 2.65629 -0.224989 -0.534364 -0.0485526 -0.843859 + -2.13665 2.73934 -0.144843 -0.698631 -0.0887716 -0.709954 + -2.24246 2.81351 -0.048503 -0.769853 -0.107974 -0.629022 + -2.3405 2.85857 0.084852 -0.82496 -0.0994869 -0.556366 + -1.6512 2.5644 -0.41463 -0.440221 -0.305126 -0.844455 + -1.72545 2.55667 -0.373052 -0.428378 -0.256508 -0.866427 + -1.89774 2.58237 -0.29876 -0.438942 -0.111462 -0.891575 + -2.07411 2.58682 -0.186068 -0.605043 -0.161246 -0.779694 + -1.59495 2.48724 -0.400794 0.137899 -0.839391 -0.525744 + -1.66919 2.47952 -0.359216 -0.366408 -0.44297 -0.818243 + -1.78908 2.52885 -0.331856 -0.470619 -0.492298 -0.732229 + -1.96138 2.55454 -0.257564 -0.430506 -0.382153 -0.817694 + -1.70194 2.42975 -0.265816 0.645164 -0.737215 -0.200693 + -1.73553 2.35858 -0.256944 0.332164 -0.651797 -0.681783 + -1.78273 2.34838 -0.237672 0.538597 -0.692638 -0.479756 + -1.71639 2.46932 -0.339945 -0.371202 -0.410771 -0.832752 + -1.85647 2.54302 -0.277405 -0.311587 -0.843734 -0.437065 + -1.68551 2.34651 -0.184032 -0.0935676 -0.609139 -0.787525 + -1.71628 2.29053 -0.14388 0.347864 -0.548168 -0.760593 + -1.74988 2.21936 -0.135015 0.186513 -0.612087 -0.76848 + -1.77436 2.17638 -0.08636 0.271163 -0.665157 -0.695728 + -1.8154 2.28022 -0.219228 0.137216 -0.472127 -0.870786 + -1.71639 2.46932 -0.339945 0.907551 -0.4055 0.10918 + -1.63216 2.1283 -0.077687 0.0192926 -0.498098 -0.866906 + -1.66293 2.07241 -0.037486 -0.40343 -0.597529 -0.692967 + -1.68409 2.03939 0.025701 -0.273643 -0.713378 -0.645145 + -1.70857 1.99641 0.074348 -0.572156 -0.73765 -0.358484 + -1.53196 2.1008 -0.030862 0.279885 -0.438283 -0.85415 + -1.55011 2.03162 -0.001628 0.22981 -0.584972 -0.777814 + -1.57347 1.98018 0.03807 -0.00642807 -0.773817 -0.633377 + -1.59463 1.94725 0.1013 -0.107748 -0.887259 -0.448511 + -1.38042 2.10717 0.002718 0.411046 -0.67189 -0.616121 + -1.43484 2.0693 0.0235 0.399968 -0.680769 -0.613661 + -1.4582 2.01786 0.063199 0.345951 -0.577204 -0.739699 + -1.47766 1.95416 0.101329 0.153002 -0.790946 -0.592447 + -1.33928 2.16376 -0.010112 0.468369 -0.342054 -0.814635 + -1.27263 2.16069 0.057417 0.641721 -0.744093 -0.185796 + -1.32704 2.12282 0.078207 0.703728 -0.633441 -0.321744 + -1.37329 2.02361 0.083435 0.334338 -0.352658 -0.873985 + -1.1922 2.27055 0.073518 0.450513 -0.681699 -0.576476 + -1.21979 2.20679 0.063957 0.723967 -0.575963 -0.379656 + -1.19121 2.27081 0.18087 0.69421 -0.717527 -0.056813 + -1.17331 2.26835 0.009938 -0.0378973 -0.999281 0.00106347 + -1.0976 2.3003 0.121208 -0.224908 -0.973844 -0.0323156 + -1.13837 2.31692 0.187409 0.0824058 -0.986284 -0.143015 + -1.12303 2.27615 0.261829 -0.480785 -0.673812 -0.561091 + -1.14682 2.27224 0.275606 0.251423 -0.717666 -0.649417 + -1.17764 2.27532 0.212466 -0.871159 -0.266775 0.412206 + -1.16971 2.29075 -0.059863 -0.283283 -0.931787 -0.226987 + -1.0774 2.23682 -0.044042 -0.552576 -0.818903 0.155106 + -1.07871 2.29809 0.057626 -0.262194 -0.942435 0.207535 + -1.05384 2.25235 0.14565 -0.840032 -0.35726 -0.408303 + -1.08226 2.25953 0.195622 -0.848131 -0.337051 -0.408742 + -1.17186 2.29449 -0.122738 -0.437185 -0.854362 -0.280954 + -1.07955 2.24064 -0.106867 -0.580085 -0.801537 -0.14505 + -1.02273 2.17336 -0.067931 -0.929554 -0.368633 0.00620746 + -1.03478 2.21398 -0.011292 -0.862637 -0.46737 0.193452 + -1.12179 2.30564 -0.172649 -0.512935 -0.728255 -0.454469 + -1.17866 2.339 -0.187233 -0.388309 -0.697699 -0.602023 + -1.11505 2.38959 -0.271264 -0.467927 -0.676145 -0.569097 + -1.087 2.44716 -0.387179 -0.287327 -0.868946 -0.402959 + -1.02021 2.51347 -0.526628 -0.0238733 -0.821431 -0.569808 + -0.935985 2.58446 -0.605581 0.104523 -0.764177 -0.636481 + -0.870966 2.57111 -0.610862 -0.297528 -0.270653 -0.915546 + -0.713771 2.65233 -0.67113 -0.475959 -0.188093 -0.859118 + -0.673895 2.61527 -0.694348 -0.745561 -0.0926619 -0.659964 + -1.02167 2.1516 0.035751 -0.740981 -0.667115 -0.0768413 + -1.03372 2.19214 0.092341 -0.979933 -0.0172478 -0.19858 + -1.0361 2.27517 0.090327 -0.763857 -0.624151 -0.164187 + -0.922802 2.10901 0.085129 -0.0730675 -0.940762 -0.331101 + -0.958577 2.11066 0.163666 -0.403519 -0.847821 -0.344053 + -1.05147 2.16932 0.147664 -0.741176 -0.418416 -0.524963 + -1.10586 2.12196 0.209692 -0.660401 -0.396373 -0.637777 + -1.13427 2.12922 0.259715 -0.902301 -0.177056 -0.39307 + -0.810344 1.97817 0.320542 0.252569 -0.775443 -0.578703 + -0.833391 1.94058 0.379053 0.383086 -0.588722 -0.711794 + -0.981624 2.07298 0.222127 -0.165579 -0.749026 -0.641516 + -1.03601 2.02571 0.284205 -0.172602 -0.721006 -0.671088 + -1.05697 1.97337 0.346654 -0.456815 -0.712095 -0.533142 + -0.670717 1.96894 0.458339 0.5406 -0.452775 -0.709046 + -0.667906 1.89635 0.48865 0.486931 -0.350594 -0.799989 + -0.815929 1.8798 0.41873 0.196764 -0.638051 -0.744429 + -0.836881 1.82746 0.481179 0.137446 -0.657438 -0.740867 + -0.538643 2.04431 0.522979 0.487738 -0.177435 -0.854768 + -0.535832 1.97165 0.553241 0.337731 -0.287496 -0.896261 + -0.544717 1.8913 0.575002 0.281666 -0.394091 -0.874846 + -0.650445 1.83549 0.528277 0.448517 -0.508229 -0.735211 + -0.427416 2.11128 0.562994 -0.244922 -0.165181 -0.955368 + -0.433959 2.01996 0.558956 0.0292519 -0.0334085 -0.999014 + -0.456382 1.94003 0.566206 -0.125882 -0.107125 -0.986244 + -0.465268 1.85968 0.587968 -0.578016 -0.164181 -0.799339 + -0.570279 1.82633 0.611336 0.204365 -0.59909 -0.774161 + -0.436841 2.19521 0.541212 -0.404992 -0.582201 -0.704999 + -0.353586 1.97298 0.525926 -0.695918 -0.130636 -0.706139 + -0.378271 1.89349 0.544613 -0.439686 -0.00325801 -0.898145 + -0.400694 1.81364 0.551913 -0.2421 0.06829 -0.967845 + -0.446909 1.74023 0.544275 -0.46875 0.0966612 -0.878026 + -0.363011 2.05692 0.504144 -0.819735 -0.279144 -0.500113 + -0.301749 1.91849 0.465723 -0.963012 -0.158057 -0.218232 + -0.308399 1.84823 0.493806 -0.830271 -0.0286213 -0.556625 + -0.333084 1.76874 0.512494 -0.586746 -0.028627 -0.809265 + -0.348014 1.70073 0.530483 -0.396609 0.0165682 -0.917838 + -0.378708 2.13667 0.481814 -0.726258 -0.499145 -0.472655 + -0.317446 1.99815 0.443342 -0.914962 -0.251027 -0.31596 + -0.290161 1.78861 0.420064 -0.877068 -0.0629937 -0.476218 + -0.296811 1.71836 0.448148 -0.944697 -0.204777 -0.256153 + -0.280895 1.6451 0.472234 -0.74401 -0.151147 -0.650848 + -0.331639 2.07409 0.420611 -0.910034 -0.398997 -0.112426 + -0.26363 1.85203 0.385818 -0.792137 -0.143332 -0.593275 + -0.206389 1.80208 0.32754 -0.640929 -0.246385 -0.726983 + -0.23292 1.73866 0.361786 -0.617796 -0.251387 -0.745072 + -0.235821 1.6716 0.395736 -0.601231 -0.361446 -0.712655 + -0.277823 1.92789 0.363036 -0.862772 -0.299925 -0.407025 + -0.21079 1.87381 0.301308 -0.693584 -0.301411 -0.654288 + -0.14511 1.84072 0.259615 -0.45794 -0.377817 -0.804702 + -0.135439 1.77259 0.295815 -0.40197 -0.420262 -0.813511 + -0.13834 1.70553 0.329765 -0.409917 -0.406786 -0.816391 + -0.297938 2.00159 0.348771 -0.796957 -0.359634 -0.485306 + -0.230905 1.94743 0.286993 -0.694517 -0.305071 -0.651597 + -0.149511 1.91236 0.233334 -0.432045 -0.321497 -0.842601 + -0.084582 1.92307 0.212986 0.0414754 -0.299385 -0.953231 + -0.081362 1.84769 0.230549 -0.0483851 -0.284384 -0.957489 + -0.241038 2.02176 0.264251 -0.650004 -0.31712 -0.690601 + -0.1517 1.98683 0.207735 -0.424964 -0.322893 -0.845663 + -0.086772 1.99754 0.187387 0.124605 -0.352569 -0.927453 + -0.028371 1.90395 0.240101 0.206269 -0.20136 -0.957553 + -0.025151 1.82848 0.257614 0.208168 -0.0754405 -0.975179 + -0.161833 2.06108 0.184943 -0.470986 -0.361832 -0.804518 + -0.086495 2.06566 0.157802 0.0707083 -0.471308 -0.87913 + -0.028371 1.98169 0.227848 0.262455 -0.257919 -0.929836 + 0.028384 1.98169 0.227848 -0.232164 -0.281559 -0.931034 + 0.028384 1.90395 0.240102 -0.196088 -0.186512 -0.962685 + -0.078873 2.13192 0.117042 0.0419019 -0.640991 -0.766404 + -0.028094 2.04981 0.198263 0.223948 -0.456923 -0.860853 + 0.028086 2.04981 0.198263 -0.223684 -0.456645 -0.86107 + 0.086785 1.99754 0.187387 -0.133314 -0.365728 -0.921125 + 0.084595 1.92307 0.212986 -0.080155 -0.2709 -0.959264 + -0.028094 2.11031 0.157878 0.182796 -0.60551 -0.77456 + 0.028086 2.11031 0.157878 -0.180857 -0.606177 -0.774494 + 0.086487 2.06566 0.157802 -0.0716737 -0.470248 -0.879619 + 0.151697 1.98684 0.207726 0.42598 -0.325174 -0.844276 + 0.025953 2.16442 0.105158 -0.119504 -0.723437 -0.679969 + 0.078865 2.13201 0.117092 -0.0420762 -0.641547 -0.765929 + 0.154209 2.12742 0.144226 0.421737 -0.506752 -0.751891 + 0.16183 2.06108 0.184937 0.445027 -0.38063 -0.8106 + 0.025953 2.21513 0.044117 -0.1192 -0.857985 -0.499653 + 0.076732 2.18603 0.064323 -0.016313 -0.804925 -0.593153 + 0.154605 2.18535 0.100294 0.309959 -0.754485 -0.578513 + 0.259627 2.10262 0.248796 0.637108 -0.363523 -0.679665 + 0.241035 2.02176 0.264245 0.652543 -0.322855 -0.685531 + 0.081398 2.22044 -0.002884 -0.0330055 -0.918829 -0.393273 + 0.15927 2.21967 0.033045 0.303564 -0.865301 -0.398877 + 0.260023 2.16046 0.204816 0.556213 -0.540992 -0.630836 + 0.341669 2.14994 0.304624 0.739955 -0.480742 -0.470482 + 0.156899 2.24578 -0.033764 0.108098 -0.977051 -0.183538 + 0.255581 2.21549 0.158688 0.548452 -0.659496 -0.514068 + 0.35622 2.23418 0.219711 0.302315 -0.925348 -0.228772 + 0.360662 2.17915 0.265841 0.672493 -0.639137 -0.373172 + 0.25321 2.24159 0.091878 0.183784 -0.952974 -0.240965 + 0.351766 2.22323 0.157082 -0.226873 -0.972716 0.0485016 + 0.458563 2.21157 0.222077 -0.0542141 -0.822172 0.566652 + 0.436639 2.29199 0.27059 0.256662 -0.960627 0.106399 + 0.417646 2.26287 0.309422 0.549386 -0.735699 -0.396135 + 0.345719 2.23594 0.079281 -0.218538 -0.965642 -0.140629 + 0.454109 2.20062 0.159444 -0.222399 -0.951529 0.212441 + 0.543356 2.21135 0.213069 -0.063121 -0.718424 0.692736 + 0.521432 2.29176 0.261583 -0.19864 -0.913644 0.354677 + 0.346555 2.25176 0.008467 -0.188592 -0.932179 -0.308991 + 0.452082 2.18241 0.091785 -0.317062 -0.948202 0.0195966 + 0.554508 2.1632 0.10366 -0.0359045 -0.999279 0.0123136 + 0.556535 2.1815 0.171369 -0.161488 -0.896338 0.412916 + 0.67046 2.19247 0.209166 -0.334003 -0.919569 0.206967 + 0.243867 2.27531 -0.046122 0.364803 -0.565114 -0.739976 + 0.350908 2.27944 -0.059467 -0.134923 -0.868025 -0.477838 + 0.452918 2.19833 0.021021 -0.277137 -0.898218 -0.341173 + 0.096883 2.29063 -0.229258 0.489284 -0.71954 -0.492812 + 0.24822 2.30299 -0.114056 0.209344 -0.868014 -0.450252 + 0.35169 2.32451 -0.12374 0.00205613 -0.713908 -0.700236 + 0.450824 2.24422 -0.055273 -0.205456 -0.820718 -0.533113 + 0.451606 2.2893 -0.119546 -0.37794 -0.779885 -0.498939 + 0.542863 2.2168 -0.038182 -0.292597 -0.904761 -0.309508 + 0.544957 2.17091 0.038111 0.019762 -0.948674 -0.315637 + 0.649184 2.18275 0.132395 0.124707 -0.893937 -0.430494 + 0.683639 2.16253 0.167417 0.179414 -0.94545 0.27191 + 0.445414 2.33028 -0.186529 -0.496531 -0.687819 -0.529491 + 0.519611 2.28058 -0.179647 -0.673012 -0.687869 -0.271828 + 0.525802 2.23951 -0.112714 -0.4558 -0.834679 -0.309124 + 0.617838 2.17332 -0.016465 -0.310813 -0.943415 0.115597 + 0.639633 2.19037 0.066806 0.047314 -0.997631 -0.0499374 + 0.442834 2.38537 -0.239753 -0.604136 -0.603835 -0.520003 + 0.4982 2.32577 -0.24471 -0.727964 -0.601011 -0.32993 + 0.559073 2.21804 -0.162728 -0.814487 -0.558261 0.157976 + 0.600777 2.19603 -0.090996 -0.527749 -0.8494 -0.000225221 + 0.673023 2.1625 -0.086333 0.0349253 -0.990374 0.133937 + 0.426266 2.44644 -0.292521 -0.647424 -0.580264 -0.4941 + 0.481631 2.38683 -0.29747 -0.780826 -0.534269 -0.323833 + 0.537662 2.26323 -0.227793 -0.876742 -0.479452 -0.0380599 + 0.590327 2.17315 -0.220969 -0.681039 -0.714986 0.158051 + 0.632032 2.15113 -0.149236 -0.309219 -0.932848 0.184872 + 0.415489 2.50481 -0.344625 -0.692527 -0.560435 -0.454223 + 0.46255 2.44419 -0.355431 -0.810433 -0.503731 -0.299087 + 0.516811 2.31852 -0.290163 -0.919632 -0.389169 -0.0531396 + 0.536521 2.25412 -0.344224 -0.960938 -0.27025 0.0596881 + 0.557372 2.19883 -0.281854 -0.898655 -0.402766 0.173778 + 0.399688 2.56693 -0.395823 -0.670596 -0.542369 -0.5061 + 0.446749 2.50631 -0.40663 -0.856737 -0.433576 -0.279309 + 0.49773 2.37589 -0.348125 -0.917936 -0.391819 -0.0622153 + 0.333062 2.67159 -0.4291 -0.139327 -0.605185 -0.783798 + 0.392709 2.62786 -0.447361 -0.691659 -0.487732 -0.532659 + 0.438169 2.56162 -0.466418 -0.861458 -0.375875 -0.341481 + 0.475049 2.42664 -0.411635 -0.950012 -0.312144 -0.0066024 + 0.328673 2.73479 -0.471964 -0.178235 -0.691386 -0.700156 + 0.393967 2.68945 -0.500823 -0.723978 -0.527399 -0.444641 + 0.439427 2.62312 -0.519938 -0.882883 -0.35938 -0.302263 + 0.466469 2.48194 -0.471415 -0.952664 -0.260561 -0.156651 + 0.49643 2.3586 -0.468174 -0.964303 -0.26474 0.00566451 + 0.26365 3.18553 -1.08067 -0.535437 -0.631319 -0.56102 + 0.318613 3.01098 -0.907536 -0.690458 -0.621868 -0.369523 + 0.383908 2.96572 -0.936345 -0.752941 -0.57307 -0.323527 + 0.423656 2.83709 -0.832142 -0.899409 -0.382795 -0.211024 + 0.468237 2.52849 -0.541048 -0.96266 -0.227596 -0.146579 + 0.211286 2.9128 -0.796693 0.73924 -0.513497 -0.435713 + 0.214432 3.22701 -1.07952 0.11691 -0.655131 -0.746415 + 0.170029 3.8391 -1.98009 -0.624127 -0.64204 -0.445253 + 0.260896 3.7114 -1.9673 -0.741447 -0.559738 -0.370066 + 0.315859 3.53684 -1.79416 -0.788261 -0.526422 -0.318629 + 0.063904 3.39356 -1.63558 0.881494 -0.32128 -0.346047 + -0.011004 2.20909 -0.926224 0 -0.159648 -0.987174 + 0.120811 3.88058 -1.97892 -0.387844 -0.755631 -0.527825 + 0.084072 4.11489 -2.27757 -0.161473 -0.305658 -0.938349 + 0.144953 4.07833 -2.28164 -0.302697 -0.298767 -0.905049 + 0.226921 3.78392 -1.9845 -0.651826 -0.488595 -0.579998 + 0.156182 4.10829 -2.27694 0.172708 0.322697 -0.930612 + 0.228575 4.03035 -2.28994 0.194202 0.166993 -0.966643 + 0.201845 4.02314 -2.28606 -0.43519 -0.372215 -0.819796 + 0.253826 3.95131 -2.28264 -0.471122 -0.386856 -0.792708 + 0.096818 4.17112 -2.26096 0.223833 0.571077 -0.789791 + 0.165782 4.13128 -2.26075 0.419336 0.561333 -0.713486 + 0.238175 4.05342 -2.2737 0.537699 0.500127 -0.678787 + 0.280556 3.95861 -2.28647 0.250303 0.033792 -0.967578 + 0.094074 4.19741 -2.23569 0.266597 0.738094 -0.619793 + 0.163038 4.15765 -2.23543 0.498966 0.664795 -0.55595 + 0.231694 4.09268 -2.23609 0.630681 0.60432 -0.486866 + 0.289297 4.02531 -2.231 0.713252 0.542923 -0.443289 + 0.295778 3.98606 -2.26862 0.639188 0.38878 -0.663542 + 0.090118 4.23945 -2.17751 0.274533 0.810976 -0.516672 + 0.155107 4.20838 -2.17409 0.522863 0.726506 -0.445873 + 0.223763 4.1434 -2.17474 0.622931 0.639694 -0.450276 + 0.282864 4.08583 -2.16703 0.702945 0.566731 -0.429749 + 0.342257 3.96762 -2.21109 0.771023 0.445835 -0.454702 + 0.077413 4.2961 -2.08803 0.270437 0.838046 -0.47386 + 0.142402 4.26511 -2.08456 0.440203 0.76892 -0.463664 + 0.21748 4.22262 -2.07876 0.550759 0.681972 -0.481225 + 0.276581 4.16497 -2.0711 0.73689 0.562623 -0.374763 + 0.335824 4.02814 -2.14711 0.780547 0.516235 -0.352488 + 0.077217 4.33595 -2.01465 0.243611 0.866787 -0.435125 + 0.140414 4.31927 -1.99955 0.393913 0.810496 -0.433508 + 0.215492 4.27678 -1.99376 0.544849 0.723776 -0.423425 + 0.261316 4.23416 -1.99374 0.730379 0.592927 -0.339092 + 0.323258 4.09292 -2.06472 0.818049 0.503243 -0.278464 + 0.086582 4.35657 -1.96057 0.255164 0.850071 -0.460729 + 0.149779 4.33989 -1.94548 0.387382 0.798444 -0.460892 + 0.205029 4.34236 -1.89375 0.547656 0.716354 -0.432332 + 0.250854 4.29974 -1.89373 0.693542 0.665126 -0.276779 + 0.307993 4.16202 -1.9874 0.790539 0.519727 -0.323931 + 0.090761 4.42195 -1.861 0.2451 0.789811 -0.56225 + 0.136076 4.4086 -1.85449 0.374044 0.758101 -0.534203 + 0.191327 4.41115 -1.80271 0.408515 0.694799 -0.591921 + 0.269232 4.28621 -1.8763 0.72102 0.584076 -0.372806 + 0.031855 4.51372 -1.75675 0.0975426 0.796003 -0.597381 + 0.090371 4.55762 -1.67839 0.24802 0.783585 -0.569632 + 0.135687 4.54427 -1.67187 0.238956 0.72497 -0.646002 + 0.159375 4.57666 -1.63058 -0.0272755 0.539777 -0.841366 + 0.215015 4.44355 -1.76142 0.410891 0.620843 -0.667625 + 0.019581 4.57673 -1.67429 0.0822428 0.808915 -0.582145 + 0.078097 4.62054 -1.59598 -0.084314 0.606392 -0.790683 + 0.088187 4.69572 -1.55799 -0.0242987 0.349665 -0.93656 + 0.144635 4.68969 -1.56734 -0.284522 0.404217 -0.869285 + 0.209426 4.5831 -1.66813 0.00589629 0.524071 -0.851654 + -0.019583 4.57673 -1.67429 -0.0824503 0.808871 -0.582176 + 0.019581 4.62602 -1.60127 0.0626536 0.656613 -0.751621 + 0.02967 4.70111 -1.56333 0.0582603 0.322479 -0.944782 + 0.09063 4.812 -1.5348 -0.0225725 0.227466 -0.973524 + 0.147078 4.80597 -1.54415 -0.0877212 0.2508 -0.964056 + -0.019583 4.62602 -1.60127 -0.0626653 0.656621 -0.751613 + -0.029672 4.70111 -1.56333 -0.0602841 0.324572 -0.943938 + 0.02967 4.82222 -1.5379 0.0436184 0.230337 -0.972133 + 0.031893 4.92248 -1.51155 0.0302154 0.302891 -0.952546 + 0.092852 4.91217 -1.5085 0.0337277 0.271666 -0.9618 + -0.029672 4.82222 -1.5379 -0.0449098 0.228458 -0.972517 + -0.031893 4.92248 -1.51155 -0.0509479 0.321189 -0.945643 + 0.031893 5.00159 -1.47878 -0.0240052 0.367767 -0.929608 + 0.098094 4.99545 -1.48494 -0.0148726 0.330447 -0.943707 + -0.092852 4.91218 -1.50851 -0.0203891 0.288639 -0.957221 + -0.031893 5.00159 -1.47878 0.0112348 0.353127 -0.935508 + 0.058347 5.10813 -1.43912 -0.0236694 0.362587 -0.931649 + 0.124549 5.10199 -1.44528 -0.0222974 0.367918 -0.929591 + 0.180374 4.98905 -1.48744 -0.0034224 0.321428 -0.946928 + -0.175129 4.90577 -1.51101 0.0222455 0.304884 -0.95213 + -0.098094 4.99545 -1.48495 0.0330762 0.314555 -0.948663 + -0.124545 5.10199 -1.44528 0.0183492 0.360004 -0.93277 + -0.058344 5.10813 -1.43912 0.028584 0.358655 -0.933033 + -0.314178 4.96879 -1.49417 -0.121927 0.239438 -0.963226 + -0.180371 4.98905 -1.48744 -0.000528955 0.316294 -0.948661 + -0.245024 5.10121 -1.44312 -0.0136319 0.356406 -0.934232 + -0.212368 5.21916 -1.39982 -0.00446196 0.457778 -0.889055 + -0.058344 5.22547 -1.39355 0.0103232 0.465922 -0.884765 + -0.39931 4.92231 -1.48206 -0.256635 0.0693434 -0.964018 + -0.378831 5.08096 -1.44984 -0.101233 0.314973 -0.943686 + -0.332847 5.21829 -1.39771 -0.0324007 0.446595 -0.89415 + -0.229843 5.34087 -1.31843 -0.00111754 0.603123 -0.797648 + -0.47304 4.8423 -1.45428 -0.331432 -0.132738 -0.934095 + -0.575158 4.91974 -1.42141 -0.337859 -0.0384835 -0.94041 + -0.501428 4.99984 -1.44914 -0.271212 0.121322 -0.954843 + -0.506441 5.13501 -1.41247 -0.174721 0.307506 -0.935368 + -0.457463 5.29863 -1.35106 -0.0300837 0.480176 -0.876656 + -0.417519 4.7888 -1.46101 -0.347509 -0.161835 -0.923605 + -0.497081 4.70961 -1.41125 -0.43423 -0.196027 -0.879214 + -0.552602 4.7632 -1.40447 -0.392368 -0.270892 -0.879014 + -0.62043 4.83545 -1.39461 -0.398448 -0.216285 -0.891325 + -0.384069 4.72168 -1.46716 -0.402101 -0.0752056 -0.912501 + -0.44761 4.64259 -1.43078 -0.484941 -0.112088 -0.867334 + -0.567514 4.62001 -1.34906 -0.599506 -0.251952 -0.759679 + -0.61531 4.69129 -1.34531 -0.528167 -0.361802 -0.768205 + -0.683138 4.76353 -1.33545 -0.574009 -0.391888 -0.718984 + -0.391732 4.57063 -1.45213 -0.585631 0.101293 -0.804224 + -0.518043 4.55291 -1.36864 -0.607452 -0.0769277 -0.790623 + -0.569416 4.48354 -1.31309 -0.835857 -0.167358 -0.522814 + -0.605012 4.56017 -1.27502 -0.846825 -0.297333 -0.440999 + -0.652807 4.63153 -1.27122 -0.760136 -0.493465 -0.422712 + -0.477052 4.4763 -1.41354 -0.683593 0.171459 -0.709438 + -0.528424 4.40693 -1.35799 -0.848818 0.0960515 -0.519887 + -0.583852 4.43159 -1.2419 -0.918135 -0.134537 -0.372731 + -0.619448 4.5083 -1.20378 -0.914321 -0.206562 -0.34835 + -0.650159 4.59414 -1.17185 -0.846763 -0.404485 -0.345519 + -0.500752 4.26279 -1.46613 -0.903235 0.254771 -0.345339 + -0.562038 4.35849 -1.3121 -0.922541 0.102806 -0.371952 + -0.627602 4.1418 -1.07658 -0.974118 0.051195 -0.220165 + -0.649416 4.21499 -1.00634 -0.975156 -0.0115375 -0.221218 + -0.654169 4.28647 -0.963151 -0.968055 -0.0879768 -0.234795 + -0.534365 4.21435 -1.42024 -0.937499 0.100705 -0.333097 + -0.6201 4.04521 -1.17587 -0.963158 0.0446895 -0.265197 + -0.768658 3.74322 -0.619611 -0.943966 0.320068 -0.080525 + -0.737398 3.80817 -0.584916 -0.963018 0.236611 -0.128882 + -0.74215 3.87974 -0.541678 -0.966102 0.153859 -0.207302 + -0.484063 4.0017 -1.55352 -0.999533 0.013755 -0.0272776 + -0.569798 3.83247 -1.3092 -0.950406 0.195093 -0.242211 + -0.761156 3.64662 -0.718893 -0.919456 0.351286 -0.176633 + -0.91 3.44794 -0.45138 -0.552901 0.70962 -0.436738 + -0.859614 3.51785 -0.392463 -0.607293 0.649221 -0.457938 + -0.509841 3.86933 -1.64343 -0.912811 0.33702 0.230639 + -0.599227 3.72037 -1.38404 -0.858173 0.510049 -0.0582163 + -0.806855 3.56984 -0.807711 -0.847204 0.510248 -0.147961 + -0.955699 3.37117 -0.540198 -0.592616 0.760361 -0.265814 + -0.588362 3.78145 -1.68063 -0.746333 0.566857 0.348799 + -0.677748 3.63249 -1.42123 -0.699057 0.710278 0.0826107 + -0.836284 3.45774 -0.882547 -0.787825 0.599044 -0.143101 + -1.00753 3.3111 -0.661758 -0.561087 0.818899 -0.120772 + -1.043 3.33197 -0.549702 0.127586 0.78626 -0.60458 + -0.657794 3.71536 -1.71276 -0.663381 0.641159 0.385798 + -0.7262 3.6026 -1.49185 -0.613381 0.77274 0.163206 + -0.858807 3.44275 -0.997782 -0.63744 0.768601 0.0540593 + -1.03005 3.29611 -0.776992 -0.502932 0.863789 0.0304564 + -0.732849 3.66746 -1.731 -0.575377 0.718392 0.390965 + -0.801256 3.55478 -1.51003 -0.515467 0.841093 0.163879 + -0.907259 3.41294 -1.06835 -0.420587 0.882242 0.211555 + -1.03338 3.30779 -0.868825 -0.457397 0.866819 0.198527 + -1.16827 3.23591 -0.834932 -0.032081 0.992397 -0.118825 + -0.833848 3.59399 -1.75135 -0.565725 0.732274 0.379118 + -0.863759 3.53291 -1.58534 -0.523009 0.83752 0.158182 + -0.925856 3.45071 -1.17737 -0.216647 0.945458 0.243255 + -1.05197 3.34555 -0.977836 -0.391998 0.868885 0.302286 + -1.1716 3.24768 -0.926706 -0.409463 0.893203 0.185815 + -0.969964 3.5092 -1.77767 -0.46573 0.78007 0.417836 + -0.999875 3.44811 -1.61167 -0.459858 0.87967 0.121289 + -0.98836 3.42883 -1.25267 -0.4556 0.882473 0.116919 + -1.09283 3.34785 -1.08122 -0.505851 0.842624 0.18466 + -1.21245 3.24989 -1.03014 -0.282424 0.945185 0.163895 + -1.11874 3.44462 -1.78761 -0.278944 0.832069 0.479428 + -1.09957 3.413 -1.67885 -0.315615 0.93014 0.187688 + -1.01918 3.43216 -1.38745 -0.295156 0.951244 0.0895472 + -1.12364 3.35118 -1.21599 -0.5044 0.851531 0.143092 + -1.23216 3.2789 -1.20999 -0.304035 0.93962 0.157086 + -1.30519 3.45113 -1.84669 -0.181255 0.884041 0.430835 + -1.27622 3.41134 -1.79357 -0.162275 0.853107 0.495859 + -1.25705 3.37972 -1.68482 -0.218171 0.956111 0.195583 + -1.11887 3.39705 -1.45464 -0.412461 0.904531 0.108162 + -1.13075 3.36642 -1.32257 -0.526437 0.837185 0.148276 + -1.29995 3.46466 -1.90454 -0.265125 0.959469 -0.0955401 + -1.46391 3.41461 -1.81744 -0.0341149 0.923737 0.381506 + -1.43494 3.37481 -1.76431 -0.0350859 0.889098 0.456369 + -1.35307 3.35536 -1.67502 -0.1563 0.96949 0.188839 + -1.14214 3.39251 -1.50476 -0.284377 0.946908 0.149986 + -1.36382 3.44217 -1.92598 -0.179917 0.982134 -0.0551585 + -1.48277 3.42564 -1.88494 -0.0776707 0.993122 0.0876163 + -1.59004 3.40451 -1.78076 0.119371 0.935239 0.333285 + -1.55599 3.35431 -1.7118 0.113256 0.920255 0.374572 + -1.47412 3.33477 -1.62255 -0.0691088 0.97927 0.190408 + -1.47691 3.4259 -1.974 -0.318429 0.873374 -0.368538 + -1.6089 3.41555 -1.84827 -0.211726 0.960048 -0.182973 + -1.69671 3.41036 -1.72967 0.207314 0.955132 0.211528 + -1.66266 3.36006 -1.66077 0.314831 0.922706 0.222475 + -1.54073 3.32302 -1.56781 0.133456 0.990554 -0.0314893 + -1.49571 3.38455 -2.00338 -0.405016 0.220916 -0.887219 + -1.64401 3.36864 -1.89082 -0.437396 0.700827 -0.563494 + -1.76033 3.36363 -1.82314 -0.364025 0.684239 -0.631905 + -1.72522 3.41054 -1.78059 -0.167285 0.931208 -0.323833 + -1.79723 3.42649 -1.65382 0.258902 0.962067 0.0860093 + -1.66281 3.32729 -1.92019 -0.440612 0.485897 -0.754828 + -1.79251 3.29908 -1.86053 -0.454315 0.47498 -0.753652 + -1.83363 3.39129 -1.76046 -0.398294 0.735366 -0.548269 + -1.82574 3.42676 -1.70469 -0.214448 0.93276 -0.289776 + -1.86581 3.32674 -1.79784 -0.554988 0.533983 -0.637849 + -1.94243 3.33731 -1.68535 -0.700685 0.562802 -0.438514 + -1.92308 3.40147 -1.61709 -0.656105 0.661208 -0.363773 + -1.9152 3.43695 -1.56133 -0.422771 0.883772 -0.200529 + -1.88163 3.43962 -1.53096 0.195688 0.978016 0.0720413 + -1.98168 3.22658 -1.72917 -0.709701 0.412668 -0.57099 + -2.03403 3.22111 -1.67248 -0.706009 0.479468 -0.521212 + -2.04657 3.34112 -1.43756 -0.651581 0.64886 -0.392967 + -2.02722 3.40521 -1.36935 -0.544128 0.69565 -0.469036 + -1.98072 3.43541 -1.38007 -0.294537 0.906434 -0.302696 + -2.14444 3.08049 -1.62792 -0.776127 0.289602 -0.560141 + -2.12598 3.21637 -1.55647 -0.669219 0.556196 -0.492739 + -2.13852 3.33638 -1.32155 -0.395261 0.725467 -0.563442 + -2.08324 3.49396 -1.20809 -0.390149 0.567836 -0.724808 + -2.17485 2.85109 -1.6634 -0.79539 0.200263 -0.572057 + -2.31866 3.01833 -1.37227 -0.833806 0.237462 -0.498376 + -2.27807 3.12168 -1.39247 -0.815392 0.298196 -0.4962 + -2.25962 3.25755 -1.32101 -0.789205 0.330252 -0.517772 + -2.25356 3.33286 -1.28524 -0.579242 0.519918 -0.627825 + -2.24194 2.72805 -1.6143 -0.782503 0.209447 -0.586362 + -2.38575 2.89521 -1.32322 -0.8413 0.23941 -0.484662 + -2.38694 3.07967 -1.2155 -0.899898 0.422306 0.108813 + -2.34636 3.18301 -1.2357 -0.933782 0.248663 -0.25733 + -2.33018 3.2656 -1.21775 -0.914582 0.240842 -0.32486 + -2.16603 2.59459 -1.75254 -0.709151 0.137168 -0.691585 + -2.3903 2.63865 -1.45183 -0.801119 0.225301 -0.554479 + -2.43603 2.83347 -1.26568 -0.824146 0.297454 -0.481979 + -2.46885 2.93672 -1.12491 -0.621371 0.73428 0.273368 + -2.41857 2.99846 -1.18245 -0.859254 0.509805 -0.0422177 + -2.31438 2.50519 -1.59007 -0.763846 0.0744398 -0.641092 + -2.49329 2.5927 -1.31286 -0.825116 0.215545 -0.522229 + -2.53903 2.78753 -1.1267 -0.849247 0.332748 -0.40995 + -2.28302 2.33097 -1.61352 -0.694635 -0.170568 -0.698848 + -2.39136 2.43913 -1.50445 -0.790298 0.0546029 -0.610284 + -2.49452 2.4665 -1.34626 -0.838856 0.0752713 -0.539124 + -2.64128 2.60297 -1.06884 -0.869722 0.227182 -0.438146 + -2.58184 2.76009 -1.05317 -0.831745 0.384051 -0.400879 + -2.40166 2.32341 -1.48662 -0.790425 -0.196533 -0.580176 + -2.50482 2.35078 -1.32843 -0.857148 -0.168307 -0.486795 + -2.64251 2.47677 -1.10226 -0.897715 -0.0294658 -0.439589 + -2.74077 2.4962 -0.832505 -0.979981 0.0277292 -0.197152 + -2.6903 2.62741 -0.943175 -0.924 0.242128 -0.29597 + -2.37144 2.26879 -1.49442 -0.664562 -0.534611 -0.522061 + -2.48835 2.28339 -1.31431 -0.764429 -0.523551 -0.376221 + -2.62715 2.384 -1.08077 -0.882861 -0.275063 -0.380653 + -2.7039 2.38727 -0.910439 -0.880312 -0.385573 -0.276377 + -2.71926 2.48005 -0.931931 -0.882633 0.335294 -0.32945 + -2.34168 2.2341 -1.47373 -0.3536 -0.899385 -0.257049 + -2.45859 2.24861 -1.29367 -0.380601 -0.919034 -0.102559 + -2.58583 2.29395 -1.05661 -0.39012 -0.920493 -0.0223533 + -2.61069 2.3166 -1.06664 -0.789673 -0.549192 -0.273503 + -2.68906 2.3493 -0.878472 -0.772178 -0.619099 -0.143034 + -2.31731 2.23023 -1.45523 0.206065 -0.963579 0.170449 + -2.43314 2.249 -1.27375 0.222823 -0.937244 0.268184 + -2.56038 2.29426 -1.03674 0.234198 -0.930731 0.280876 + -2.62978 2.32533 -0.864149 0.254835 -0.934433 0.248787 + -2.66421 2.32665 -0.868442 -0.39123 -0.919039 0.0480244 + -2.28861 2.25875 -1.43763 0.594899 -0.647939 0.475679 + -2.40444 2.27752 -1.25615 0.675387 -0.554943 0.485686 + -2.52836 2.321 -1.03146 0.717266 -0.534882 0.446576 + -2.59777 2.35215 -0.858812 0.772203 -0.567406 0.285925 + -2.38166 2.37619 -1.23645 0.780595 -0.270465 0.563489 + -2.50558 2.41975 -1.0117 0.85921 -0.219896 0.461956 + -2.57205 2.442 -0.857433 0.944664 -0.2284 0.235463 + -2.60291 2.36298 -0.752564 0.7427 -0.653014 0.14822 + -2.6482 2.34852 -0.75112 0.146052 -0.983998 0.102065 + -2.25441 2.49434 -1.34129 0.691931 -0.254839 0.675491 + -2.41966 2.65186 -1.08493 0.812118 -0.190609 0.551482 + -2.44962 2.72882 -0.999425 0.903561 -0.118441 0.411763 + -2.53554 2.49671 -0.9262 0.904866 -0.172492 0.389185 + -2.0451 2.73408 -1.42993 0.523529 -0.337583 0.782276 + -2.29241 2.76992 -1.18981 0.705283 -0.207141 0.677988 + -2.43195 2.81345 -1.02221 0.731419 0.224719 0.643838 + -2.50149 2.68375 -0.894552 0.912299 -0.144821 0.383062 + -2.538 2.62912 -0.825736 0.870357 -0.0740285 0.486825 + -2.11149 2.90972 -1.33014 0.529617 -0.258764 0.807804 + -2.14282 3.05528 -1.26346 0.49627 -0.218821 0.840139 + -2.32373 2.91548 -1.12313 0.587956 0.0175165 0.808703 + -1.92019 3.02836 -1.35684 0.0963612 -0.429583 0.897872 + -1.99462 3.17363 -1.27045 0.107677 -0.521472 0.846447 + -2.09605 3.15024 -1.26755 0.263202 -0.305561 0.915072 + -2.2651 3.05915 -1.17558 0.53726 -0.0839273 0.83923 + -1.76545 3.0591 -1.32967 -0.245598 -0.431619 0.867978 + -1.83988 3.20445 -1.24323 -0.220652 -0.682028 0.697245 + -2.03489 3.3184 -1.1424 0.0322312 -0.624419 0.780424 + -2.13633 3.2951 -1.13945 0.266788 -0.551032 0.790688 + -2.21834 3.15412 -1.17966 0.500302 -0.335962 0.798015 + -1.49485 2.94623 -1.23198 -0.444425 -0.532135 0.720637 + -1.6046 3.09642 -1.22012 -0.511415 -0.617923 0.597181 + -1.69808 3.18616 -1.16996 -0.45118 -0.748657 0.485746 + -1.91688 3.30486 -1.13415 -0.2609 -0.720263 0.642769 + -1.33436 3.02223 -1.09923 -0.30023 -0.772109 0.560098 + -1.45654 3.06137 -1.05041 -0.388008 -0.800663 0.456496 + -1.55002 3.15102 -1.0003 -0.547426 -0.777128 0.310478 + -1.59496 3.20381 -0.955135 -0.634939 -0.727498 0.259998 + -1.77508 3.28657 -1.06087 -0.486594 -0.717848 0.497916 + -1.14172 2.95056 -1.01449 -0.600859 -0.406927 0.688026 + -1.18623 3.02234 -0.981609 -0.408484 -0.830733 0.378184 + -1.30841 3.06147 -0.932784 -0.210476 -0.97115 0.112102 + -1.43413 3.09074 -0.915481 -0.503019 -0.851738 -0.146679 + -1.05152 2.81816 -0.962764 -0.612905 -0.173159 0.77095 + -1.02259 2.92278 -0.922776 -0.601848 -0.392151 0.695699 + -1.06711 2.99456 -0.889893 -0.490929 -0.751292 0.441077 + -1.0743 2.71117 -1.00885 -0.612019 -0.152118 0.776075 + -0.95884 2.696 -0.930375 -0.480876 -0.224871 0.847461 + -0.946305 2.78767 -0.892355 -0.521581 -0.255388 0.814082 + -0.917374 2.89238 -0.852317 -0.647176 -0.384337 0.658368 + -0.953604 2.96515 -0.807556 -0.554282 -0.75766 0.344562 + -0.987146 2.59906 -0.965861 -0.475489 -0.204962 0.855512 + -0.825757 2.68506 -0.875432 -0.369797 -0.28638 0.883876 + -0.813222 2.77682 -0.837363 -0.574381 -0.474245 0.667217 + -0.842561 2.85913 -0.788723 -0.721909 -0.524633 0.451228 + -0.87879 2.93189 -0.743953 -0.691349 -0.722272 0.0189484 + -1.01349 2.5095 -1.00474 -0.475416 -0.298697 0.827502 + -0.849018 2.5959 -0.908795 -0.345662 -0.263008 0.900747 + -0.77694 2.49672 -0.913018 -0.301612 -0.29547 0.906492 + -0.753679 2.58589 -0.879656 -0.486869 -0.271014 0.830367 + -0.732766 2.65292 -0.837963 -0.772046 -0.394459 0.498345 + -0.875364 2.50634 -0.947682 -0.352174 -0.279786 0.893137 + -0.809399 2.42101 -0.952472 -0.269808 -0.318405 0.908747 + -0.776282 2.32164 -0.982164 -0.598309 -0.179432 0.780917 + -0.744195 2.39376 -0.936474 -0.731219 -0.145468 0.666452 + -0.723282 2.4607 -0.894831 -0.7267 -0.123874 0.675694 + -0.845402 2.33448 -0.9884 -0.194417 -0.344254 0.918527 + -0.808741 2.24592 -1.02162 -0.541358 -0.225661 0.809943 + -0.813146 2.15103 -1.02926 -0.914109 0.232175 0.332415 + -0.782328 2.22055 -0.986063 -0.932343 0.232615 0.276813 + -0.879442 2.25536 -1.02896 -0.267778 -0.395307 0.878651 + -0.84533 2.17518 -1.06869 -0.449074 -0.263539 0.853745 + -0.849735 2.0802 -1.07638 -0.883195 0.195516 0.426309 + -0.879369 2.09615 -1.1092 -0.434824 -0.200162 0.877988 + -0.882867 2.01003 -1.11103 -0.862044 0.212673 0.460055 + -0.853651 2.05842 -1.00985 -0.922479 0.384975 0.028763 + -0.914823 2.0173 -1.13822 -0.453696 -0.16657 0.875451 + -0.918321 1.93126 -1.14001 -0.853472 0.214328 0.475026 + -0.886784 1.98825 -1.04451 -0.9117 0.404844 0.0700266 + -0.930002 1.89001 -1.01636 -0.953447 0.300546 0.0247175 + -0.947915 1.85511 -1.16152 -0.872664 0.223746 0.434046 + -0.920811 1.92063 -1.0734 -0.922426 0.382505 0.0531098 + -0.942229 1.8297 -1.0013 -0.994587 0.102947 0.0140837 + -0.944804 1.71646 -0.927156 -0.999425 -0.0305201 -0.0147665 + -0.950406 1.84448 -1.0949 -0.955758 0.275624 0.102749 + -0.940618 1.79502 -1.02983 -0.987349 0.0696285 0.142455 + -0.973888 1.77006 -1.11299 -0.963183 0.21098 0.166631 + -0.9641 1.72068 -1.04788 -0.981482 -0.172416 0.0834631 + -0.901206 1.61571 -1.00085 -0.845823 -0.530761 -0.0536288 + -0.948906 1.69815 -1.06444 -0.78258 0.137988 0.607064 + -0.683858 2.53744 -0.846346 -0.858172 -0.164745 0.48621 + -0.762105 2.73523 -0.789314 -0.726278 -0.478221 0.493786 + -0.683088 2.60532 -0.795705 -0.77092 -0.263774 0.579747 + -0.761334 2.80318 -0.738623 -0.756367 -0.644287 0.113148 + -0.953552 2.97745 -0.695252 -0.356628 -0.71408 -0.602417 + -0.650091 2.67466 -0.739618 -0.919101 -0.389863 -0.0570955 + -0.836096 2.84874 -0.689923 -0.658549 -0.621486 -0.424344 + -1.04074 2.97995 -0.685998 0.0895136 -0.695155 -0.713265 + -1.02738 3.01237 -0.781739 -0.292768 -0.955866 -0.0246249 + -1.14089 3.04178 -0.864075 -0.270503 -0.946077 0.178231 + -0.739713 2.74565 -0.696773 -0.70068 -0.487566 -0.520891 + -0.925718 2.91973 -0.647078 -0.402639 -0.651497 -0.642987 + -1.11119 2.9363 -0.685384 0.323845 -0.433356 -0.841027 + -1.11457 3.01479 -0.772534 0.135978 -0.865108 -0.482802 + -0.779589 2.78279 -0.673504 -0.509753 -0.442289 -0.737924 + -0.996167 2.87607 -0.646464 0.0903809 -0.00983747 -0.995859 + -1.18849 2.88821 -0.697087 0.428702 -0.204449 -0.880009 + -1.23083 2.97775 -0.795581 0.363353 -0.589363 -0.721544 + -0.82651 2.74605 -0.683273 0.0443094 0.0475857 -0.997884 + -1.19572 3.04732 -0.839083 0.082926 -0.901285 -0.425216 + -1.36324 3.06702 -0.907792 -0.154665 -0.833665 -0.530172 + -1.38286 3.03392 -0.869869 -0.260885 -0.545611 -0.796397 + -1.47907 3.14352 -0.870306 -0.666419 -0.700017 -0.256636 + -1.31198 3.01028 -0.86213 0.148443 -0.670087 -0.727288 + -1.3905 3.00163 -0.85515 0.0343783 -0.33501 -0.941587 + -1.68164 3.35355 -0.865289 -0.685426 -0.54663 0.481027 + -1.19064 2.1133 0.362099 -0.418103 -0.373553 -0.828039 + -1.16685 2.11721 0.348321 -0.60143 -0.400633 -0.691213 + -1.18731 2.03749 0.39659 -0.115408 -0.520295 -0.846153 + -1.08955 1.96145 0.43531 -0.461465 -0.678634 -0.571407 + -1.07771 1.88665 0.501859 -0.404213 -0.649958 -0.643558 + -0.895428 1.6969 0.571713 -0.247759 -0.720322 -0.647882 + -0.925082 1.67623 0.632925 -0.404549 -0.767018 -0.498019 + -0.907269 1.77161 0.505114 -0.110171 -0.644206 -0.756875 + -0.765246 1.66905 0.611158 0.342274 -0.476751 -0.809665 + -0.819324 1.64323 0.607476 -0.00636929 -0.705998 -0.708186 + -0.848978 1.62264 0.668739 -0.231957 -0.826573 -0.512809 + -0.676006 1.77051 0.564613 0.418287 -0.677524 -0.604977 + -0.746393 1.71475 0.588597 0.374677 -0.594613 -0.711374 + -0.632869 1.72466 0.683228 0.2201 -0.242516 -0.94485 + -0.667674 1.64144 0.666177 0.168601 0.0796185 -0.982463 + -0.721751 1.61571 0.662546 -0.0557991 -0.603254 -0.795595 + -0.614016 1.77037 0.660667 0.215028 -0.643981 -0.734201 + -0.537044 1.73605 0.661114 -0.466283 -0.187858 -0.864459 + -0.560694 1.66274 0.668891 -0.345965 0.14876 -0.92638 + -0.595499 1.57951 0.651842 -0.089707 0.299817 -0.94977 + -0.609086 1.49934 0.623102 -0.358854 0.284633 -0.888936 + -0.493306 1.79201 0.611783 -0.563764 -0.158282 -0.810627 + -0.470814 1.59102 0.579113 -0.679126 0.00141297 -0.73402 + -0.494464 1.51771 0.586891 -0.523104 0.173738 -0.834372 + -0.523226 1.45056 0.587791 -0.352038 0.295744 -0.888034 + -0.536813 1.37039 0.559051 -0.0712238 0.434175 -0.898008 + -0.474948 1.67246 0.56804 -0.82181 -0.0489156 -0.567658 + -0.403462 1.55309 0.519801 -0.360455 -0.0122598 -0.932696 + -0.399328 1.47156 0.530822 -0.567327 0.0898514 -0.818576 + -0.430158 1.4069 0.519009 -0.425503 0.281932 -0.859919 + -0.45892 1.33984 0.519959 -0.488517 0.273818 -0.828477 + -0.394229 1.62731 0.522845 -0.176745 0.0650789 -0.982103 + -0.293227 1.44316 0.523598 0.0487424 0.282895 -0.957911 + -0.337539 1.38741 0.477964 -0.087005 0.380719 -0.920589 + -0.36837 1.32276 0.46615 -0.23837 0.353237 -0.904656 + -0.404201 1.26275 0.450694 -0.376759 0.322577 -0.86833 + -0.283994 1.51739 0.526643 -0.34297 -0.183991 -0.921151 + -0.18183 1.41074 0.48616 -0.522886 0.0774162 -0.84888 + -0.221171 1.38548 0.495105 -0.176352 0.438397 -0.881311 + -0.265483 1.32973 0.44947 -0.101295 0.515548 -0.850853 + -0.283711 1.28422 0.428496 -0.164203 0.363246 -0.917109 + -0.295824 1.5771 0.490223 -0.781044 -0.294882 -0.550468 + -0.210234 1.5283 0.447544 -0.526203 -0.426964 -0.735399 + -0.198404 1.46867 0.484013 -0.579941 -0.320817 -0.748829 + -0.219905 1.59834 0.419821 -0.525719 -0.339941 -0.779782 + -0.127071 1.56688 0.393913 -0.431722 -0.304748 -0.848967 + -0.124814 1.48874 0.411456 -0.529382 -0.237627 -0.814425 + -0.10824 1.43089 0.413652 -0.531732 -0.145506 -0.834319 + -0.136742 1.63693 0.36619 -0.403456 -0.404359 -0.820803 + -0.067915 1.63866 0.328985 -0.480558 -0.398719 -0.78108 + -0.066978 1.57055 0.359558 -0.463832 -0.329064 -0.822543 + -0.064721 1.49241 0.377102 -0.23782 -0.23073 -0.943507 + -0.069513 1.70727 0.292561 -0.454163 -0.354367 -0.81741 + -0.022973 1.60797 0.312956 -0.27179 -0.415256 -0.868155 + -0.022036 1.53985 0.343528 -0.275752 -0.443021 -0.853049 + -0.022036 1.47459 0.381172 -0.0526471 -0.342582 -0.938012 + -0.071691 1.77956 0.266749 -0.428516 -0.420676 -0.799628 + -0.022973 1.67413 0.279962 -0.241002 -0.389383 -0.888987 + 0.022972 1.67413 0.279957 0.249451 -0.394279 -0.884488 + 0.022972 1.60797 0.312951 0.273966 -0.41155 -0.869235 + 0.022033 1.53986 0.34352 0.211773 -0.401878 -0.890868 + -0.025151 1.74642 0.25415 -0.168328 -0.228454 -0.958892 + 0.025152 1.74642 0.25415 0.195837 -0.179824 -0.964008 + 0.069512 1.70727 0.292556 0.452452 -0.357785 -0.81687 + 0.067914 1.63867 0.32898 0.473636 -0.395008 -0.78717 + 0.066975 1.57056 0.359551 0.478287 -0.302429 -0.824487 + 0.025152 1.82848 0.257614 -0.094793 -0.165363 -0.981667 + 0.071692 1.77956 0.266749 0.267132 -0.321371 -0.908494 + 0.138335 1.70553 0.329772 0.406794 -0.402298 -0.820168 + 0.136737 1.63693 0.366197 0.382705 -0.417345 -0.824233 + 0.127071 1.56688 0.393913 0.444677 -0.326375 -0.834111 + 0.081363 1.84769 0.230549 0.0179551 -0.328724 -0.944255 + 0.145096 1.84073 0.259605 0.451012 -0.366014 -0.814016 + 0.135424 1.7726 0.295804 0.358816 -0.44562 -0.820167 + 0.235816 1.6716 0.395743 0.612861 -0.352643 -0.707138 + 0.2199 1.59834 0.419828 0.528765 -0.346037 -0.775026 + 0.149508 1.91236 0.233325 0.441942 -0.315568 -0.839705 + 0.206375 1.80209 0.327529 0.727398 -0.140786 -0.671618 + 0.232905 1.73867 0.361775 0.624394 -0.258729 -0.737015 + 0.29681 1.71836 0.448149 0.860846 -0.209775 -0.463615 + 0.210787 1.87381 0.301299 0.692924 -0.298311 -0.656404 + 0.263629 1.85203 0.385818 0.838912 -0.128431 -0.528897 + 0.29016 1.78861 0.420064 0.877701 -0.0393647 -0.477589 + 0.230902 1.94743 0.286985 0.689676 -0.308795 -0.654975 + 0.297934 2.00159 0.348771 0.860567 -0.371393 -0.348555 + 0.277819 1.92789 0.363036 0.865623 -0.292029 -0.406712 + 0.317445 1.99815 0.443342 0.910565 -0.26615 -0.316283 + 0.301748 1.91849 0.465723 0.901525 -0.16344 -0.400674 + 0.323077 2.06909 0.320073 0.791825 -0.387351 -0.472199 + 0.368253 2.13837 0.383673 0.838894 -0.499458 -0.216328 + 0.331635 2.07409 0.420611 0.89681 -0.407382 -0.172546 + 0.378705 2.13667 0.481815 0.845794 -0.477248 -0.238469 + 0.393396 2.20586 0.354975 0.708447 -0.591826 -0.384506 + 0.451134 2.24204 0.399915 0.582689 -0.812491 0.0182176 + 0.414515 2.17767 0.436803 0.791461 -0.605465 -0.0836763 + 0.497044 2.29366 0.303292 -0.0509846 -0.944861 -0.32348 + 0.472794 2.23674 0.348895 0.168552 -0.932217 -0.320253 + 0.549107 2.2493 0.375134 0.127075 -0.879058 0.459466 + 0.504507 2.2952 0.434824 0.161504 -0.978919 -0.125037 + 0.468697 2.2542 0.479835 0.351181 -0.809393 -0.470696 + 0.544082 2.27465 0.269227 -0.636557 -0.624973 -0.45189 + 0.587066 2.16372 0.27836 -0.50263 -0.835519 0.221971 + 0.570767 2.244 0.324112 -0.311043 -0.907562 0.282104 + 0.656683 2.21392 0.282416 0.340378 -0.706974 0.619944 + 0.69311 2.17527 0.216759 -0.526058 -0.447447 -0.723224 + 0.634104 2.14471 0.244295 -0.483446 -0.727164 -0.487352 + 0.672982 2.13364 0.236664 0.233829 -0.679581 0.695337 + 0.757834 2.14915 0.186202 -0.484517 -0.697017 -0.528593 + 0.791075 2.16562 0.135865 0.0890415 -0.989088 -0.117375 + 0.764288 2.1663 0.096893 -0.0659463 -0.990531 -0.120415 + 0.83345 2.18638 0.01491 0.788276 -0.607753 -0.0962156 + 0.834047 2.18376 0.093245 0.846173 0.115969 0.520137 + 0.800807 2.16729 0.143582 0.269573 -0.9536 -0.134083 + 0.757834 2.14915 0.186202 0.269567 -0.953602 -0.134076 + 0.729833 2.18652 0.061879 -0.13134 -0.983256 -0.126323 + 0.806663 2.18697 -0.024105 0.225126 -0.968103 -0.109977 + 0.829873 2.21614 -0.096232 0.996469 -0.0440814 -0.0714557 + 0.83047 2.21361 -0.017854 0.998851 -0.0444163 -0.0179958 + 0.800807 2.16729 0.143582 0.583007 0.746251 0.321266 + 0.774961 2.18234 0.16651 0.662776 -0.386191 0.641549 + 0.694818 2.17955 -0.003062 0.0667963 -0.990243 0.122303 + 0.761369 2.179 -0.100709 0.105361 -0.993434 0.0445938 + 0.733426 2.16917 -0.325479 0.836294 -0.526484 -0.153056 + 0.77872 2.17723 -0.248833 0.689654 -0.697818 -0.19346 + 0.726354 2.17204 -0.165652 0.245391 -0.965046 0.0920265 + 0.719845 2.09289 -0.351357 0.623882 -0.756021 0.197997 + 0.690305 2.10063 -0.539561 0.988101 -0.00750337 -0.153625 + 0.680219 2.19795 -0.522923 0.979196 -0.169943 -0.110879 + 0.683856 2.1495 -0.235005 -0.0153914 -0.967276 0.25326 + 0.677348 2.07035 -0.42071 0.267895 -0.841857 0.468519 + 0.676724 2.02426 -0.56549 0.989777 -0.124688 -0.0692404 + 0.675371 2.08841 -0.670391 0.991742 -0.125312 -0.0272947 + 0.642865 2.13821 -0.29785 -0.133497 -0.911534 0.388954 + 0.643619 2.04868 -0.42158 0.113588 -0.714654 0.690194 + 0.670978 1.91222 -0.532224 0.796404 -0.496356 0.3455 + 0.658296 1.88243 -0.635237 0.982107 -0.188133 0.00841582 + 0.664042 1.99448 -0.668502 0.988357 -0.1008 -0.113968 + 0.591543 2.1091 -0.346226 -0.51506 -0.725892 0.455844 + 0.592297 2.01965 -0.469899 -0.665171 -0.505269 0.549773 + 0.63725 1.89055 -0.533104 0.00704404 -0.770106 0.637877 + 0.641212 1.80309 -0.633011 0.956379 -0.199951 0.212975 + 0.558588 2.13478 -0.407112 -0.926325 -0.323327 0.193344 + 0.559973 2.04854 -0.520547 -0.93419 -0.245391 0.258983 + 0.584927 1.90744 -0.569742 -0.741954 -0.471341 0.476804 + 0.641212 1.80309 -0.633011 -0.572073 -0.628236 0.527306 + 0.540315 2.19079 -0.463918 -0.973453 -0.202623 0.106453 + 0.5417 2.10455 -0.577354 -0.984898 -0.144494 0.095384 + 0.552602 1.93633 -0.620381 -0.958182 -0.216193 0.187479 + 0.562467 1.83725 -0.682375 -0.90242 -0.332575 0.27392 + 0.616518 1.72023 -0.715886 -0.614284 -0.476627 0.628874 + 0.519111 2.30785 -0.404672 -0.956811 -0.283568 0.064045 + 0.522905 2.24451 -0.524367 -0.981203 -0.186234 0.050573 + 0.52994 2.16265 -0.639385 -0.991032 -0.12787 0.0387863 + 0.549676 2.00322 -0.681651 -0.994271 -0.105033 0.0198208 + 0.559541 1.90423 -0.743586 -0.991122 -0.131 0.0227111 + 0.515408 2.29635 -0.583968 -0.986721 -0.16194 -0.0125587 + 0.522443 2.21458 -0.698937 -0.993023 -0.106653 0.0502947 + 0.537916 2.06141 -0.743632 -0.98551 -0.14134 0.0937756 + 0.488206 2.41158 -0.525548 -0.976745 -0.193347 -0.0926653 + 0.507184 2.34934 -0.641333 -0.991555 -0.126623 -0.0280074 + 0.513535 2.28095 -0.751484 -0.996295 -0.075932 0.0403803 + 0.519544 2.12001 -0.811529 -0.988874 -0.115325 0.0939528 + 0.489974 2.45804 -0.595221 -0.98003 -0.167869 -0.106592 + 0.501595 2.42327 -0.678391 -0.991855 -0.118328 -0.047128 + 0.510635 2.18637 -0.864076 -0.996516 -0.0549294 0.0627552 + 0.526611 2.02693 -0.872705 -0.983096 -0.139465 0.118621 + 0.452466 2.74238 -0.853301 -0.958588 -0.254863 -0.127098 + 0.389777 3.35025 -1.69156 -0.90702 -0.377863 -0.185833 + 0.350028 3.47889 -1.79577 -0.86164 -0.439859 -0.253183 + 0.357852 3.75867 -2.25577 -0.378537 -0.320033 -0.868498 + 0.323683 3.81663 -2.25415 -0.55997 -0.402122 -0.724384 + 0.356326 3.82647 -2.2622 0.27545 0.00164683 -0.961314 + 0.393062 3.77164 -2.24423 0.48678 0.0899744 -0.868879 + 0.435041 3.67681 -2.2342 0.383895 0.0863823 -0.919327 + 0.399831 3.66393 -2.24569 0.318722 -0.0261144 -0.947488 + 0.287801 3.87879 -2.26543 -0.54885 -0.430104 -0.71678 + 0.320444 3.88863 -2.27347 0.243756 -0.044005 -0.968838 + 0.335666 3.91617 -2.25556 0.685093 0.277404 -0.673569 + 0.3782 3.85375 -2.23826 0.704552 0.273052 -0.655018 + 0.414936 3.79883 -2.22034 0.719672 0.274838 -0.637602 + 0.38479 3.90521 -2.19379 0.80188 0.390519 -0.452198 + 0.429882 3.82916 -2.17526 0.8114 0.380702 -0.443504 + 0.478303 3.72625 -2.16821 0.803247 0.346498 -0.484492 + 0.378568 3.95873 -2.14769 0.829358 0.460048 -0.31705 + 0.42366 3.88259 -2.12921 0.833792 0.440717 -0.332505 + 0.504429 3.73987 -2.11361 0.832936 0.388421 -0.39414 + 0.366002 4.02351 -2.06529 0.824725 0.498538 -0.266999 + 0.398513 3.98461 -2.03812 0.52043 0.513402 -0.682328 + 0.456171 3.84361 -2.1021 0.829315 0.425742 -0.361911 + 0.549484 3.70203 -2.04408 0.750844 0.413037 -0.515395 + 0.564439 3.60092 -2.11415 0.792874 0.379289 -0.476961 + 0.326371 4.14841 -1.97002 0.575364 0.583458 -0.573178 + 0.427696 3.95708 -2.04764 0.452818 0.461964 -0.762591 + 0.501226 3.80578 -2.03256 0.774085 0.369589 -0.514 + 0.355555 4.12096 -1.97949 0.462404 0.559329 -0.687992 + 0.401214 4.07733 -1.95971 0.738456 0.554933 -0.383056 + 0.459072 3.95874 -2.0149 0.701962 0.46593 -0.538664 + 0.532601 3.80743 -1.99983 0.315249 0.148063 -0.937388 + 0.29222 4.25662 -1.87364 0.736924 0.565396 -0.3705 + 0.337879 4.21298 -1.85387 0.726191 0.575107 -0.376695 + 0.46105 4.0245 -1.90301 0.747877 0.561824 -0.353602 + 0.518908 3.90592 -1.95821 0.685419 0.610261 -0.39722 + 0.576484 3.82328 -2.00548 0.305577 0.375593 -0.874958 + 0.238003 4.41405 -1.75872 0.654101 0.523305 -0.546171 + 0.285288 4.38676 -1.73806 0.697759 0.485415 -0.526787 + 0.314373 4.29125 -1.78103 0.863923 0.436556 -0.251108 + 0.406139 4.15745 -1.81468 0.721169 0.569685 -0.394177 + 0.256711 4.55582 -1.64747 0.702959 0.417535 -0.575772 + 0.336983 4.39134 -1.6486 0.775187 0.429336 -0.463416 + 0.366068 4.29584 -1.69158 0.736767 0.496379 -0.45911 + 0.382632 4.23573 -1.74186 0.710506 0.567284 -0.416377 + 0.463537 4.10564 -1.77914 0.777978 0.536105 -0.327629 + 0.194685 4.69612 -1.60488 -0.137093 0.456697 -0.878995 + 0.237949 4.66941 -1.59862 0.621001 0.363116 -0.694625 + 0.310484 4.52313 -1.57026 0.805047 0.380646 -0.454982 + 0.203348 4.79744 -1.55017 0.0744521 0.312668 -0.94694 + 0.246611 4.77073 -1.54392 0.517578 0.212346 -0.828868 + 0.291722 4.63672 -1.52141 0.747856 0.226739 -0.62394 + 0.361952 4.50588 -1.50138 0.717337 0.342523 -0.606716 + 0.175131 4.90577 -1.51101 -0.0329069 0.297754 -0.954075 + 0.231401 4.89724 -1.51704 0.0738258 0.254109 -0.964354 + 0.316543 4.85085 -1.50488 0.308706 0.0200356 -0.950946 + 0.283094 4.78372 -1.51101 0.575219 -0.107421 -0.810915 + 0.328204 4.64963 -1.48855 0.549114 0.0701608 -0.832797 + 0.314181 4.96879 -1.49417 0.124741 0.240233 -0.962667 + 0.399322 4.9224 -1.48201 0.25692 0.0540487 -0.96492 + 0.417531 4.7888 -1.46101 0.345654 -0.139805 -0.927889 + 0.384082 4.72168 -1.46715 0.402205 -0.0750398 -0.912469 + 0.245031 5.10121 -1.44312 0.0210488 0.360268 -0.932611 + 0.378838 5.08096 -1.44984 0.0946743 0.327072 -0.940245 + 0.501443 4.99974 -1.44918 0.250674 0.122408 -0.960301 + 0.473052 4.8423 -1.45428 0.314939 -0.132493 -0.939819 + 0.332854 5.21829 -1.39771 0.10649 0.373271 -0.92159 + 0.45747 5.29863 -1.35106 0.0276865 0.477643 -0.878118 + 0.585074 5.3526 -1.31374 0.106686 0.475025 -0.873481 + 0.506442 5.13492 -1.41252 0.175392 0.308239 -0.935001 + 0.212371 5.21916 -1.39982 0.00301754 0.457123 -0.889398 + 0.229843 5.34087 -1.31843 -0.00131149 0.605226 -0.796053 + 0.36618 5.37449 -1.29245 -0.0418319 0.616756 -0.786042 + 0.490796 5.45483 -1.24581 -0.0808134 0.665567 -0.74195 + 0.058347 5.22547 -1.39355 -0.0082534 0.463639 -0.885986 + 0.075818 5.34727 -1.31211 -0.000853593 0.607026 -0.794681 + 0.221985 5.48645 -1.18898 -0.00177469 0.661158 -0.750245 + 0.358322 5.52015 -1.16295 0.00660434 0.6685 -0.743683 + 0.482726 5.58027 -1.10407 -0.0234419 0.705847 -0.707976 + -0.075818 5.34727 -1.31211 0.00394171 0.604507 -0.79659 + 0.075818 5.48662 -1.19328 0.0115321 0.655618 -0.755005 + 0.072429 5.69616 -1.00801 0.0122119 0.663558 -0.748025 + 0.218596 5.69599 -1.00371 0.0213943 0.668653 -0.743267 + 0.355916 5.71389 -0.98212 0.0243196 0.675759 -0.736721 + -0.075818 5.48662 -1.19328 -0.00852906 0.658008 -0.752962 + -0.072429 5.69616 -1.00801 -0.0113551 0.662747 -0.748757 + 0.072429 5.97501 -0.760987 0.0188381 0.661816 -0.74943 + 0.216766 5.96896 -0.759101 0.0332929 0.663227 -0.747678 + 0.354086 5.98686 -0.737507 0.0320341 0.666046 -0.745223 + -0.221985 5.48645 -1.18898 -0.00105603 0.663519 -0.748159 + -0.218595 5.69599 -1.00371 -0.0222974 0.667812 -0.743996 + -0.072429 5.97501 -0.760987 -0.0179775 0.66265 -0.748714 + 0.069681 6.1512 -0.605952 0.0212353 0.649818 -0.759793 + 0.214018 6.14506 -0.604125 0.0402827 0.658258 -0.751713 + -0.366178 5.37449 -1.29246 0.0466732 0.608305 -0.79233 + -0.35832 5.52015 -1.16296 0.0333867 0.68461 -0.728144 + -0.355915 5.71389 -0.98212 -0.0243469 0.675759 -0.73672 + -0.216766 5.96896 -0.759101 -0.0342174 0.664055 -0.746901 + -0.490794 5.45483 -1.24581 0.0400022 0.650851 -0.758151 + -0.482724 5.58027 -1.10407 0.0180154 0.713899 -0.700017 + -0.480319 5.77401 -0.923245 -0.0259058 0.676964 -0.73556 + -0.354086 5.98686 -0.737507 -0.0319879 0.666052 -0.745219 + -0.214024 6.14514 -0.604066 -0.0427082 0.656454 -0.753156 + -0.585073 5.3526 -1.31374 -0.101309 0.480809 -0.870953 + -0.625152 5.50066 -1.20399 -0.0437619 0.671224 -0.739962 + -0.617082 5.6261 -1.06225 -0.00699847 0.715133 -0.698953 + -0.621968 5.79243 -0.899559 -0.0313346 0.682893 -0.729846 + -0.498003 5.99299 -0.726127 -0.0340916 0.667247 -0.744056 + -0.648565 5.23973 -1.34765 -0.207584 0.314417 -0.92631 + -0.729833 5.37582 -1.27596 -0.176161 0.459542 -0.87051 + -0.769912 5.52379 -1.16626 -0.116869 0.659197 -0.742833 + -0.763907 5.64422 -1.03944 -0.0865878 0.710005 -0.698853 + -0.768794 5.81046 -0.876784 -0.0847802 0.679394 -0.728859 + -0.643552 5.10455 -1.38431 -0.260173 0.191913 -0.946298 + -0.75869 5.15924 -1.34083 -0.280034 0.219362 -0.934592 + -0.790913 5.27267 -1.2991 -0.268294 0.295482 -0.916902 + -0.87218 5.40876 -1.22741 -0.246897 0.452568 -0.856869 + -0.916419 5.52384 -1.13374 -0.242149 0.635748 -0.732932 + -0.693761 4.99564 -1.38867 -0.278328 0.0317936 -0.95996 + -0.808899 5.05033 -1.34519 -0.318793 0.117759 -0.940481 + -0.874585 5.17472 -1.29805 -0.283043 0.22411 -0.932556 + -0.906808 5.28823 -1.25626 -0.291465 0.29207 -0.910903 + -0.739033 4.91135 -1.36187 -0.380542 -0.250171 -0.890282 + -0.834022 4.97093 -1.34046 -0.349652 -0.150342 -0.924738 + -0.897439 5.07519 -1.31066 -0.287299 0.119157 -0.9504 + -1.06721 5.0593 -1.27034 -0.20662 0.178672 -0.961969 + -1.04436 5.15892 -1.25768 -0.262494 0.256333 -0.930263 + -0.753886 4.85831 -1.3304 -0.518264 -0.445583 -0.729971 + -0.848875 4.91789 -1.309 -0.381662 -0.546568 -0.745384 + -0.935001 4.94725 -1.30045 -0.250948 -0.435305 -0.864601 + -0.922562 4.99579 -1.30592 -0.275955 0.0117628 -0.961099 + -0.707743 4.71343 -1.26267 -0.754112 -0.523825 -0.396135 + -0.778492 4.80821 -1.25762 -0.64273 -0.597651 -0.479281 + -0.858119 4.86914 -1.24797 -0.464162 -0.728206 -0.504251 + -0.705095 4.67604 -1.1633 -0.743944 -0.564044 -0.358332 + -0.778795 4.75395 -1.16045 -0.63737 -0.635574 -0.435665 + -0.858422 4.81498 -1.15075 -0.529484 -0.706651 -0.469351 + -0.946564 4.86002 -1.13477 -0.283752 -0.834323 -0.472642 + -0.944245 4.89859 -1.23938 -0.233714 -0.834893 -0.498328 + -0.68488 4.37231 -0.931225 -0.920786 -0.226122 -0.31784 + -0.713711 4.4393 -0.891461 -0.81785 -0.409644 -0.40412 + -0.787411 4.51721 -0.888613 -0.715847 -0.531571 -0.452764 + -0.840733 4.59343 -0.868419 -0.660605 -0.603681 -0.446284 + -0.735201 3.93699 -0.506827 -0.952922 0.0327594 -0.301441 + -0.764032 4.00398 -0.467072 -0.944732 -0.0579927 -0.322673 + -0.773668 4.10225 -0.429669 -0.892892 -0.220631 -0.392511 + -0.826991 4.17847 -0.409485 -0.848911 -0.359368 -0.387562 + -0.866016 3.63627 -0.323968 -0.515665 0.355658 -0.779485 + -0.859066 3.69351 -0.289117 -0.590769 0.434929 -0.67958 + -0.839342 3.77394 -0.251423 -0.670237 0.351858 -0.653436 + -0.848979 3.8722 -0.21402 -0.626161 0.265036 -0.733266 + -0.828354 3.58281 -0.357777 -0.719455 0.350056 -0.599871 + -0.973384 3.56342 -0.355589 0.229455 0.551609 -0.801921 + -1.05349 3.68378 -0.282855 0.311257 0.603251 -0.734308 + -1.03377 3.76411 -0.245203 -0.0755589 0.395936 -0.915164 + -0.935722 3.50996 -0.389398 -0.0210866 0.595645 -0.802971 + -0.986107 3.44005 -0.448314 0.224153 0.608274 -0.761419 + -1.26445 3.5853 -0.576089 0.596143 0.344512 -0.725207 + -1.25245 3.70489 -0.517631 0.646656 0.477446 -0.594879 + -1.32135 3.47721 -0.677476 0.552852 0.389911 -0.736427 + -1.77462 3.94002 -0.880283 0.564184 0.175329 -0.806818 + -1.76261 4.05962 -0.821833 0.608472 0.144961 -0.780223 + -1.73801 4.16008 -0.797641 0.67549 0.120899 -0.72739 + -1.33256 3.82517 -0.444947 0.69554 0.437485 -0.569939 + -1.09483 3.2719 -0.671261 0.0498391 0.926215 -0.373688 + -1.34655 3.34276 -0.768394 0.487895 0.648745 -0.584027 + -1.74741 3.72033 -0.871373 0.512495 0.196337 -0.835943 + -1.99585 3.86673 -1.01114 0.535749 0.141729 -0.832397 + -2.02305 4.08633 -1.0201 0.705316 -0.031425 -0.708196 + -1.41999 3.30677 -0.932065 0.451377 0.807032 -0.380733 + -1.77261 3.58579 -0.962341 0.541556 0.459701 -0.703841 + -1.97489 3.67645 -1.06076 0.563931 0.390834 -0.727483 + -2.05102 3.88745 -1.04243 0.414272 0.14586 -0.898389 + -1.41563 3.25271 -1.08502 0.203698 0.977548 -0.0539174 + -1.74752 3.40461 -1.07452 0.484354 0.706031 -0.516644 + -1.9498 3.49535 -1.17289 0.620114 0.63803 -0.456482 + -2.03006 3.69726 -1.092 0.419035 0.403192 -0.813539 + -1.43534 3.28172 -1.26488 0.122931 0.985309 0.118547 + -1.74317 3.35054 -1.22748 0.350866 0.931439 -0.0965076 + -1.90418 3.40747 -1.31688 0.490889 0.868698 -0.0662685 + -1.99278 3.52588 -1.20576 0.477286 0.704185 -0.525662 + -1.39002 3.28857 -1.38414 0.0142937 0.966325 0.256926 + -1.68608 3.35453 -1.39578 0.238921 0.963974 0.11692 + -1.84709 3.41146 -1.48519 0.379312 0.912703 0.151973 + -1.94716 3.43808 -1.3497 0.401155 0.905302 -0.139654 + -1.23927 3.29413 -1.31657 -0.307173 0.932089 0.191976 + -1.34359 3.3214 -1.449 -0.0746816 0.97037 0.229792 + -1.64076 3.36138 -1.51505 0.238689 0.970394 0.0369177 + -1.76269 3.39842 -1.608 0.378296 0.915542 0.136654 + -1.19284 3.32696 -1.38142 -0.497938 0.817225 0.290175 + -1.27698 3.33323 -1.50369 -0.379465 0.771364 0.510885 + -1.15402 3.36187 -1.3727 -0.562822 0.788342 0.248492 + -1.23816 3.36814 -1.49496 -0.420223 0.846644 0.326506 + -2.03674 3.52417 -1.2188 -0.20668 0.680349 -0.703142 + -2.07403 3.69546 -1.10509 -0.133465 0.406055 -0.90405 + -2.10814 3.70056 -1.08372 -0.352327 0.320457 -0.879303 + -2.12779 3.92912 -1.0268 -0.48189 0.0725509 -0.873223 + -2.09368 3.92411 -1.04812 -0.217651 0.0481205 -0.97484 + -2.04662 4.10856 -1.05841 0.496568 -0.0961534 -0.862655 + -2.15277 3.49152 -1.19185 -0.22057 0.530183 -0.818691 + -2.17767 3.69811 -1.06748 -0.0261827 0.395142 -0.918247 + -2.1757 3.92894 -1.00148 -0.214309 0.168308 -0.962156 + -2.14407 4.18355 -1.03649 -0.495373 -0.0225646 -0.868387 + -2.08927 4.14522 -1.0641 -0.251775 -0.0967016 -0.962943 + -2.26781 3.48799 -1.15554 -0.433034 0.399989 -0.807769 + -2.25717 3.7201 -1.07276 -0.214088 0.338873 -0.91615 + -2.2552 3.95093 -1.00678 -0.348059 0.285967 -0.892792 + -2.21741 4.1759 -0.951634 -0.817518 0.18664 -0.544821 + -2.19198 4.18327 -1.01121 -0.747521 0.0392026 -0.66308 + -2.32413 3.3409 -1.18198 -0.938841 0.218272 -0.266337 + -2.31998 3.49107 -1.12188 -0.882703 0.171152 -0.437655 + -2.30934 3.72318 -1.0391 -0.768542 0.237593 -0.594048 + -2.28632 3.94674 -0.972512 -0.850108 0.265913 -0.45454 + -2.33304 3.25212 -1.1848 -0.986146 0.0807105 0.144923 + -2.31988 3.32512 -1.13384 -0.988285 -0.00159184 0.152614 + -2.31574 3.47529 -1.07374 -0.86991 -0.154588 0.468359 + -2.32832 3.70336 -0.997166 -0.954095 -0.0450388 0.296099 + -2.30531 3.92699 -0.930517 -0.974764 0.122282 0.186768 + -2.34921 3.16953 -1.20275 -0.971452 0.0462548 0.232685 + -2.3288 3.19885 -1.17333 -0.915978 0.0124456 0.401035 + -2.31564 3.27193 -1.12231 -0.667049 -0.196994 0.718498 + -2.27542 3.46653 -1.04677 -0.276034 -0.323147 0.905197 + -2.28801 3.69459 -0.970183 -0.42858 -0.27725 0.859914 + -2.34791 3.10641 -1.19963 -0.754527 0.288436 0.589486 + -2.3275 3.13582 -1.17016 -0.693225 0.0636203 0.717908 + -2.30229 3.14979 -1.15956 -0.459799 -0.0169939 0.887861 + -2.26361 3.19658 -1.1378 0.108022 -0.319313 0.941473 + -2.27696 3.31872 -1.10056 -0.0500991 -0.323178 0.945011 + -2.37953 3.0253 -1.16654 -0.441648 0.523007 0.72898 + -2.34848 3.02759 -1.15571 -0.466432 0.427424 0.774435 + -2.32327 3.04155 -1.14509 -0.037935 0.189986 0.981054 + -2.1816 3.33755 -1.09758 0.132213 -0.416153 0.899631 + -2.42194 2.92441 -1.12279 -0.0872067 0.584255 0.806871 + -2.39088 2.92679 -1.11191 -0.244572 0.547449 0.800302 + -2.3819 2.89788 -1.09264 0.18471 0.505911 0.842577 + -2.51375 2.87948 -1.06177 -0.497057 0.85052 0.171903 + -2.46684 2.86717 -1.05965 0.204828 0.729196 0.652931 + -2.44093 2.84227 -1.04153 0.239355 0.672351 0.700466 + -2.55656 2.85204 -0.988248 -0.341542 0.926441 0.158288 + -2.51101 2.82575 -0.98151 0.345405 0.755607 0.556554 + -2.48511 2.80086 -0.963391 0.302031 0.775501 0.554414 + -2.48381 2.76838 -0.917348 0.708668 0.414782 0.570742 + -2.63086 2.78461 -0.927457 -0.806476 0.566714 -0.168617 + -2.59755 2.8118 -0.900746 -0.18606 0.933011 0.308013 + -2.55199 2.7856 -0.893959 0.430014 0.725366 0.537524 + -2.52567 2.7659 -0.891038 0.370613 0.735319 0.567407 + -2.52438 2.73342 -0.844986 0.64503 0.432435 0.630028 + -2.66066 2.74987 -0.83028 -0.82744 0.561399 0.0132083 + -2.62735 2.77706 -0.803569 -0.0493439 0.873465 0.484379 + -2.60067 2.72773 -0.789934 0.531507 0.589788 0.607988 + -2.57435 2.70811 -0.786954 0.64034 0.39903 0.656308 + -2.58797 2.60381 -0.767704 0.834478 0.0537793 0.548411 + -2.72259 2.56669 -0.860208 -0.956183 0.231627 -0.179062 + -2.69296 2.68907 -0.747364 -0.889107 0.457443 -0.0153327 + -2.67426 2.71354 -0.70516 -0.838971 0.541086 0.0579133 + -2.74137 2.56587 -0.553589 -0.880493 0.457054 0.125831 + -2.76006 2.54148 -0.595733 -0.936866 0.349607 0.00749561 + -2.79322 2.40892 -0.417933 -0.938189 0.337526 0.076671 + -2.77823 2.47099 -0.568038 -0.987795 0.139993 -0.0682804 + -2.77526 2.41856 -0.604634 -0.952243 -0.234386 -0.195694 + -2.79025 2.35658 -0.454487 -0.94422 -0.283216 -0.16804 + -2.79322 2.40892 -0.417933 -0.994755 -0.0682202 -0.0762121 + -2.7775 2.26562 -0.336527 -0.835773 -0.475701 -0.274212 + -2.80481 2.30012 -0.301482 -0.875531 -0.403008 -0.266514 + -2.75386 2.42636 -0.691736 -0.900818 -0.381683 -0.206991 + -2.7346 2.37815 -0.659845 -0.715397 -0.677388 -0.171325 + -2.75601 2.37036 -0.572744 -0.677809 -0.67288 -0.296322 + -2.7551 2.32544 -0.485146 -0.630155 -0.673156 -0.386995 + -2.73235 2.41021 -0.791162 -0.935062 -0.318862 -0.154873 + -2.71751 2.37223 -0.759195 -0.751532 -0.656511 -0.0647519 + -2.69972 2.35576 -0.656064 -0.34996 -0.931197 -0.101984 + -2.69724 2.3427 -0.584036 -0.326262 -0.894569 -0.305449 + -2.69634 2.29778 -0.49643 -0.379151 -0.778764 -0.499771 + -2.68263 2.34984 -0.755413 -0.31506 -0.946747 0.0663902 + -2.65726 2.35028 -0.663776 0.0794665 -0.994686 -0.0654554 + -2.65478 2.33722 -0.591748 0.131387 -0.942476 -0.307371 + -2.65599 2.29595 -0.515472 0.0694266 -0.82843 -0.555773 + -2.61197 2.36466 -0.665269 0.863419 -0.495081 0.0969687 + -2.6308 2.34821 -0.587988 0.891864 -0.44596 -0.0754884 + -2.63201 2.30695 -0.511721 0.664362 -0.626642 -0.407362 + -2.64478 2.22857 -0.436561 -0.115513 -0.725978 -0.677948 + -2.68512 2.23031 -0.417578 -0.422456 -0.720006 -0.550566 + -2.62188 2.43396 -0.655106 0.915079 0.129608 0.38188 + -2.64071 2.41751 -0.577825 0.838624 0.42812 0.336785 + -2.62464 2.29899 -0.474341 0.965654 0.235955 0.108801 + -2.62827 2.23067 -0.436606 0.624547 -0.494214 -0.604726 + -2.57719 2.45282 -0.751176 0.950076 -0.121724 0.287295 + -2.63265 2.58495 -0.671634 0.792221 0.187362 0.580759 + -2.72643 2.48661 -0.533697 0.706814 0.384221 0.593959 + -2.75702 2.40792 -0.417813 0.326771 0.734124 0.595216 + -2.6713 2.33883 -0.461941 0.66829 0.595627 0.445665 + -2.64759 2.66422 -0.691526 0.617413 0.408156 0.672465 + -2.74137 2.56587 -0.553589 0.678726 0.311166 0.665212 + -2.79322 2.40892 -0.417933 0.730069 0.292584 0.617571 + -2.67426 2.71354 -0.70516 0.585618 0.494254 0.642468 + -2.79322 2.40892 -0.417933 0.0190187 0.771061 0.636477 + -2.76861 2.29912 -0.301354 0.184847 0.822265 0.538249 + -2.67835 2.27482 -0.324272 0.509222 0.781928 0.359558 + -2.63169 2.23507 -0.336622 0.773302 0.630507 0.066812 + -2.6209 2.22272 -0.399226 0.922044 0.387 0.00812664 + -2.80481 2.30012 -0.301482 0.0150156 0.836221 0.548187 + -2.7715 2.24308 -0.168698 0.0686574 0.941178 0.330863 + -2.68124 2.21887 -0.191567 0.252826 0.926529 0.27861 + -2.78894 2.21716 -0.116009 -0.974741 0.183439 0.127398 + -2.75434 2.21575 -0.014957 -0.119126 0.968143 0.220248 + -2.68391 2.19877 -0.072337 0.281741 0.943273 0.175662 + -2.57417 2.17654 -0.070437 0.116701 0.976384 0.181812 + -2.77177 2.18983 0.037742 -0.897126 0.328558 0.295322 + -2.74515 2.15659 0.136712 -0.87528 0.266124 0.40381 + -2.72403 2.18317 0.102277 -0.0532834 0.948269 0.312964 + -2.65361 2.16627 0.044948 0.275911 0.940453 0.198549 + -2.56437 2.16259 -0.001088 0.107395 0.964623 0.240768 + -2.71866 2.09769 0.054926 -0.847469 -0.529968 0.0304928 + -2.69974 2.11281 0.241532 -0.931868 0.263087 0.249814 + -2.67862 2.13939 0.207101 -0.129672 0.955035 0.266634 + -2.59974 2.13291 0.120721 0.151966 0.981231 0.11871 + -2.77295 2.19257 -0.167609 -0.871961 -0.47949 -0.0988584 + -2.74563 2.15807 -0.202654 -0.779736 -0.586112 -0.220195 + -2.70354 2.14469 -0.271672 -0.605016 -0.69265 -0.392673 + -2.64631 2.14052 -0.322056 -0.461534 -0.735068 -0.49665 + -2.62056 2.15769 -0.36899 -0.20352 -0.722511 -0.660725 + -2.74235 2.23447 -0.367186 -0.644679 -0.653046 -0.397391 + -2.60405 2.15979 -0.369034 0.495254 -0.455903 -0.739511 + -2.66377 2.05986 0.383058 -0.862399 -0.504179 0.0455193 + -2.68075 2.1021 0.367288 -0.98935 0.0869814 0.116705 + -2.65377 2.14535 0.367786 -0.625829 0.779616 -0.0231731 + -2.63115 2.14083 0.289608 -0.263948 0.955437 -0.132179 + -2.65958 2.04483 0.483687 -0.902284 -0.425122 -0.0718033 + -2.66952 2.10925 0.515707 -0.970708 0.234125 0.0539545 + -2.64254 2.15241 0.516154 -0.753836 0.65417 -0.0615804 + -2.54722 2.20302 0.444684 -0.44355 0.878741 -0.176288 + -2.52459 2.1986 0.366555 -0.328891 0.92046 -0.211148 + -2.59455 1.97362 0.497629 -0.62556 -0.767548 -0.139802 + -2.66026 2.01101 0.590262 -0.915908 -0.309181 -0.255968 + -2.6702 2.07543 0.622282 -0.99197 0.016934 -0.125338 + -2.64937 2.17764 0.618454 -0.823647 0.470607 -0.316441 + -2.44827 1.85895 0.591642 -0.425711 -0.871234 -0.24438 + -2.59276 1.95846 0.561489 -0.547416 -0.780403 -0.30217 + -2.64805 1.97062 0.596026 -0.673337 -0.516994 -0.52852 + -2.68163 1.94816 0.724126 -0.947784 -0.158946 -0.27648 + -2.40772 1.82859 0.626028 -0.309207 -0.916334 -0.254408 + -2.56371 1.90541 0.638774 -0.421108 -0.815377 -0.397277 + -2.619 1.91757 0.673311 -0.408098 -0.789303 -0.458755 + -2.66943 1.90768 0.72984 -0.835491 -0.540317 -0.100059 + -2.43108 1.83731 0.699726 -0.285353 -0.920983 -0.265262 + -2.52315 1.87505 0.673161 -0.311142 -0.876903 -0.366377 + -2.58025 1.85702 0.72798 -0.337728 -0.737034 -0.585424 + -2.63068 1.84713 0.784507 -0.467577 -0.587057 -0.66086 + -2.35111 1.81048 0.712186 -0.226399 -0.936499 -0.267794 + -2.48818 1.81928 0.754544 -0.155314 -0.723602 -0.672516 + -2.58267 1.73848 0.824504 -0.27478 -0.546245 -0.791273 + -2.62966 1.70621 0.870192 -0.482056 -0.492275 -0.724767 + -2.67768 1.81487 0.830195 -0.561067 -0.484789 -0.670957 + -2.24022 1.7703 0.672387 -0.216768 -0.97406 0.0649485 + -2.25326 1.7895 0.740333 -0.0978414 -0.986684 -0.129931 + -2.32032 1.74681 0.80888 0.0655626 -0.739591 -0.669855 + -2.41817 1.76788 0.780783 -0.0811627 -0.701237 -0.708293 + -2.23005 1.77135 0.598375 -0.39503 -0.914604 0.0863156 + -2.16063 1.76303 0.711379 -0.179924 -0.950519 0.253259 + -2.17367 1.78214 0.779274 0.0584101 -0.993014 -0.102523 + -2.23175 1.7483 0.824294 0.202526 -0.806138 -0.55599 + -2.18945 1.73318 0.523476 -0.468713 -0.850047 0.240265 + -2.16828 1.73679 0.612622 -0.375291 -0.901582 0.215189 + -2.11071 1.74814 0.693367 -0.186954 -0.927475 0.323787 + -2.07002 1.79113 0.816904 -0.136102 -0.976311 -0.168207 + -2.1281 1.7572 0.861874 0.191651 -0.750324 -0.63268 + -1.96398 1.75787 0.800715 -0.61827 -0.765524 -0.178085 + -2.0201 1.77624 0.798892 -0.299101 -0.953547 0.0358793 + -2.07482 1.75424 0.87501 -0.0678023 -0.603834 -0.794221 + -2.39266 1.62727 0.890711 0.178703 -0.409148 -0.894798 + -2.48123 1.62578 0.875297 -0.0509209 -0.564103 -0.824133 + -1.92184 1.71138 0.78204 -0.919863 -0.383005 -0.0846055 + -2.0322 1.70732 0.876675 -0.371098 0.230403 -0.899556 + -2.0187 1.73586 0.876834 -0.549696 -0.251992 -0.796451 + -2.33938 1.62431 0.903847 0.0807427 -0.234473 -0.968764 + -2.35287 1.59576 0.903688 -0.0285176 -0.0623737 -0.997645 + -1.95162 1.54327 0.695609 -0.893541 0.362483 -0.264936 + -1.93684 1.67183 0.814342 -0.742547 0.171886 -0.647363 + -2.1287 1.64025 0.874234 -0.273124 0.369562 -0.888159 + -1.99576 1.4709 0.701758 -0.629161 0.535672 -0.563215 + -2.03334 1.60485 0.811951 -0.363201 0.503872 -0.783708 + -2.09902 1.5652 0.821238 -0.367398 0.493523 -0.788324 + -2.22983 1.57812 0.886249 -0.261304 0.298129 -0.918063 + -2.00568 1.3866 0.610768 -0.776792 0.47007 -0.41908 + -2.10772 1.36445 0.683333 -0.383125 0.545403 -0.745487 + -2.06144 1.43125 0.711045 -0.395991 0.556382 -0.7305 + -2.1753 1.4964 0.804189 -0.355822 0.535242 -0.766099 + -2.30612 1.50933 0.869199 -0.425902 0.407795 -0.807658 + -2.01091 1.34499 0.547637 -0.82101 0.187108 -0.539382 + -2.04117 1.26221 0.547429 -0.823187 0.0125159 -0.567633 + -2.03594 1.30382 0.610558 -0.706906 0.399197 -0.583889 + -1.99104 1.3952 0.534271 -0.362261 -0.0715226 -0.929329 + -1.9796 1.30111 0.52765 -0.0896282 0.0114549 -0.995909 + -1.96357 1.2312 0.53693 0.0409232 -0.119397 -0.992003 + -2.03364 1.17372 0.55069 -0.275874 0.116181 -0.954146 + -1.93628 1.39256 0.520656 -0.356412 -0.348423 -0.866932 + -1.84257 1.26513 0.553172 -0.0791193 -0.224305 -0.971302 + -1.82655 1.19522 0.562451 0.213439 -0.479395 -0.851249 + -1.87035 1.14444 0.593405 0.422897 -0.30261 -0.854158 + -1.95604 1.14272 0.540192 0.24263 -0.00450295 -0.970108 + -1.9422 1.42049 0.512666 -0.241462 0.0906465 -0.966167 + -1.76075 1.29119 0.47323 -0.475316 -0.348325 -0.807926 + -1.78781 1.26248 0.539557 -0.424987 -0.579908 -0.695048 + -1.75005 1.18048 0.619175 0.229811 -0.875825 -0.424403 + -1.96852 1.46025 0.532603 0.279973 0.455906 -0.844846 + -1.81121 1.37251 0.505971 0.110625 0.597934 -0.793875 + -1.76668 1.31913 0.465241 -0.110583 0.0740392 -0.991105 + -1.73453 1.32555 0.469519 -0.598576 -0.0676313 -0.798206 + -1.69201 1.22698 0.438445 -0.849049 -0.159216 -0.503752 + -1.83753 1.41219 0.525857 0.0165979 0.379719 -0.924953 + -1.77906 1.37893 0.510249 -0.454201 0.20119 -0.867885 + -1.77486 1.40457 0.487045 -0.498039 0.350622 -0.793109 + -1.6956 1.2825 0.425286 -0.827926 -0.190966 -0.527323 + -1.66144 1.21731 0.386586 -0.829269 0.00101613 -0.558849 + -1.66855 1.1534 0.384091 -0.927191 -0.0580284 -0.370067 + -1.71907 1.19827 0.504771 -0.799903 -0.540106 -0.261613 + -1.73841 1.37974 0.466652 0.0308051 0.628342 -0.777327 + -1.6236 1.20702 0.333423 -0.510988 0.289906 -0.809225 + -1.58944 1.14192 0.294773 -0.959969 -0.236139 -0.150657 + -1.63799 1.14373 0.332232 -0.71601 0.258553 -0.648444 + -1.72334 1.39731 0.482822 -0.304943 0.269619 -0.913409 + -1.55 1.18402 0.345047 0.372253 0.60795 -0.701302 + -1.58715 1.1821 0.312979 0.214456 0.648658 -0.730241 + -1.54797 1.02022 0.202565 -0.230462 0.523247 -0.820427 + -1.76554 1.46641 0.498735 -0.467581 -0.105256 -0.877661 + -1.52648 1.25231 0.376564 0.193148 0.279237 -0.940596 + -1.53493 1.20159 0.361217 0.208956 0.424488 -0.880992 + -1.47932 1.00796 0.269591 0.943581 -0.0354123 0.329243 + -1.47344 1.01536 0.236374 0.884015 0.398156 -0.244927 + -1.56869 1.32141 0.392476 -0.483494 -0.419662 -0.768191 + -1.46161 1.25622 0.403406 0.33007 0.398658 -0.855643 + -2.17596 1.71816 0.505099 -0.263738 -0.0843385 -0.9609 + -1.54797 1.02022 0.202565 -0.521385 -0.621049 0.585197 + -1.46161 1.25622 0.403406 -0.349121 -0.681257 -0.643431 + -1.59651 1.02203 0.240025 -0.671117 0.289821 -0.682353 + -1.61359 1.00509 0.256167 -0.914185 0.0015515 -0.405295 + -1.67449 1.15068 0.422399 -0.893056 -0.436931 -0.107439 + -1.50234 0.79014 0.055474 -0.353134 0.453329 -0.818406 + -1.51852 0.785997 0.06025 -0.57868 0.344038 -0.739437 + -1.53559 0.768969 0.076342 -0.833049 0.124216 -0.539072 + -1.61953 1.00237 0.294474 -0.954233 -0.297303 -0.0324203 + -1.51479 0.962226 0.156811 0.157683 0.565378 -0.809619 + -1.46917 0.732146 0.009719 0.122346 0.494524 -0.86051 + -1.46578 0.650271 -0.032268 0.197986 -0.209541 -0.957546 + -1.48196 0.646043 -0.027542 -0.427993 -0.309191 -0.849249 + -1.54581 0.757617 0.093804 -0.960131 -0.201784 -0.193471 + -1.51058 1.01353 0.204357 0.382254 0.59817 -0.704326 + -1.4571 0.731029 0.019659 0.786894 0.350643 -0.507787 + -1.45372 0.649152 -0.02233 0.65373 -0.308235 -0.691106 + -1.49218 0.634691 -0.010081 -0.609276 -0.697937 -0.376386 + -1.54175 0.759102 0.133231 -0.736178 -0.58669 0.337397 + -1.44014 0.777232 0.086428 0.965795 0.207333 -0.155736 + -1.45289 0.782328 0.067205 0.737273 0.43294 -0.518644 + -1.44451 0.644244 -0.008829 0.693537 -0.376036 -0.614495 + -1.48298 0.629783 0.00342 -0.32377 -0.946123 0.00487623 + -1.44603 0.769833 0.119646 0.78951 -0.28675 0.542631 + -1.43177 0.639149 0.010395 0.876247 -0.479596 -0.0466862 + -1.46019 0.624934 0.016618 0.112789 -0.969363 0.218207 + -1.51896 0.754167 0.14638 -0.162587 -0.788857 0.59268 + -1.47445 0.755618 0.125869 0.437179 -0.55398 0.708506 + -1.52288 0.986717 0.329392 0.770085 -0.334956 0.542931 + -1.5559 1.0049 0.38149 0.696801 -0.40086 0.594794 + -1.50747 0.773805 0.177967 0.216367 -0.70042 0.680145 + -1.48532 1.13277 0.359413 0.993469 0.0522243 -0.101446 + -1.52888 1.11144 0.419164 0.790188 -0.492035 0.365383 + -1.55706 1.1107 0.472043 0.537579 -0.644801 0.54336 + -1.59401 1.11498 0.500825 0.536835 -0.562131 0.62914 + -1.58579 1.01846 0.423404 0.193689 -0.684936 0.702387 + -1.47688 1.18341 0.374709 0.864777 0.066944 -0.497674 + -1.48993 1.15558 0.452516 0.820847 -0.554378 0.137388 + -1.51811 1.15484 0.505396 0.488966 -0.785006 0.380365 + -1.58083 1.16838 0.550743 0.217533 -0.881851 0.418353 + -1.61778 1.17257 0.579474 0.16423 -0.937898 0.305574 + -1.48452 1.20507 0.546602 0.923418 -0.323581 0.206383 + -1.51974 1.17783 0.595377 0.475071 -0.84225 0.254797 + -1.58246 1.19137 0.640725 0.24207 -0.97019 -0.0115609 + -1.61781 1.15953 0.666276 0.117909 -0.964051 -0.238124 + -1.46161 1.25622 0.403406 0.182702 -0.934433 -0.305706 + -2.22158 1.4297 0.776526 -0.399677 0.576859 -0.712385 + -2.3626 1.4335 0.884137 -0.499741 0.383233 -0.776783 + -2.51607 1.4707 0.967903 -0.314174 -0.156043 -0.936453 + -2.18905 1.30173 0.668175 -0.377341 0.480985 -0.79137 + -2.29883 1.35653 0.762461 -0.457124 0.527599 -0.716015 + -2.43985 1.36033 0.870072 -0.679531 0.528154 -0.509207 + -2.55795 1.29515 1.00677 -0.777668 -0.0362123 -0.627631 + -2.57256 1.39479 0.98279 -0.468191 -0.191573 -0.86261 + -2.11727 1.24109 0.5954 -0.375559 0.364049 -0.852305 + -2.13899 1.16138 0.587867 -0.405973 0.198356 -0.892099 + -2.24957 1.22143 0.65906 -0.461721 0.312796 -0.830044 + -2.35935 1.27623 0.753346 -0.568282 0.37039 -0.734756 + -2.45962 1.2704 0.860231 -0.758861 0.275312 -0.590197 + -2.05536 1.09401 0.543158 -0.24911 0.0975772 -0.963547 + -2.03337 1.0074 0.527763 -0.112446 0.228181 -0.967103 + -2.17506 1.07656 0.587571 -0.391157 0.198376 -0.89869 + -2.28565 1.13661 0.658765 -0.483454 0.248239 -0.839434 + -1.95709 1.06466 0.54279 0.280709 0.104229 -0.954117 + -1.9351 0.978054 0.527395 0.359277 0.250944 -0.898859 + -2.02185 0.925852 0.501813 -0.026173 0.362291 -0.931698 + -2.16355 0.995014 0.561621 -0.30587 0.316225 -0.898023 + -1.87139 1.06639 0.596003 0.608294 0.0443129 -0.792474 + -1.86447 0.985962 0.583301 0.638048 0.223832 -0.736746 + -1.84667 0.90357 0.570806 0.69828 0.0693767 -0.712455 + -1.9173 0.895663 0.514903 0.473333 0.342722 -0.811478 + -1.9978 0.845877 0.461334 0.0371751 0.462423 -0.88588 + -1.79385 1.1297 0.650129 0.586702 -0.485353 -0.648239 + -1.80259 1.06251 0.667518 0.768497 -0.0722046 -0.635767 + -1.79567 0.982171 0.654866 0.808225 0.144551 -0.570857 + -1.78401 0.905763 0.660809 0.837957 0.0601161 -0.542415 + -1.8293 0.835938 0.596148 0.817203 0.0901419 -0.569258 + -1.73359 1.12172 0.728554 0.495678 -0.494808 -0.713771 + -1.74233 1.05453 0.745943 0.680259 -0.162053 -0.714833 + -1.7404 0.972385 0.752615 0.761869 0.0278333 -0.647133 + -1.72873 0.895891 0.758508 0.806428 0.0939876 -0.583815 + -1.72804 1.18235 0.68035 0.285053 -0.847523 -0.447716 + -1.6787 1.12832 0.732518 0.160881 -0.579655 -0.798822 + -1.68426 1.0677 0.780721 -0.0431545 -0.437108 -0.898373 + -1.67503 0.993074 0.804182 0.151432 -0.226414 -0.962187 + -1.67309 0.910845 0.810805 0.535372 -0.088663 -0.83995 + -1.71513 1.18513 0.556936 -0.568156 -0.821054 -0.0554042 + -1.69311 1.18699 0.618111 -0.135757 -0.989895 0.0409699 + -1.66467 1.16989 0.715122 0.133919 -0.807543 -0.574404 + -1.62616 1.00956 0.800619 0.743316 -0.0441051 -0.667485 + -1.60738 0.938321 0.794815 0.196255 -0.0880708 -0.97659 + -1.67055 1.13745 0.474514 -0.813186 -0.578851 0.0604995 + -1.65237 1.13251 0.532479 -0.526637 -0.776519 0.345934 + -1.6239 1.12854 0.542738 0.18189 -0.757081 0.627491 + -1.66465 1.18294 0.628321 -0.202455 -0.976883 0.0686345 + -1.61546 1.00377 0.333852 -0.881271 -0.444839 0.159623 + -1.59728 0.998827 0.391816 -0.626495 -0.653323 0.425057 + -1.61213 1.05113 0.783223 0.555339 -0.294414 -0.777765 + -1.5683 0.988202 0.841219 0.547399 0.0488385 -0.835445 + -1.5629 0.938744 0.837082 0.558675 0.180516 -0.809504 + -1.54412 0.867502 0.831277 0.432244 -0.111071 -0.89489 + -1.59815 0.863693 0.818274 -0.21058 -0.422443 -0.881588 + -1.60952 1.13005 0.79013 0.773799 -0.44207 -0.453661 + -1.56569 1.06712 0.848126 0.525555 -0.0998693 -0.844878 + -1.48094 0.947401 0.878488 0.109901 0.0457181 -0.992891 + -1.47554 0.897944 0.874352 0.555507 -0.0448609 -0.8303 + -1.57418 1.16189 0.764578 0.643914 -0.687121 -0.33651 + -1.54296 1.11265 0.844866 0.306169 -0.354462 -0.883525 + -1.45821 0.993018 0.875278 0.0809339 -0.209781 -0.974393 + -1.4594 0.843428 0.897777 0.648958 -0.222243 -0.727641 + -1.52797 0.812986 0.854702 0.377584 -0.371614 -0.848135 + -1.54804 1.22667 0.747174 0.814744 -0.57145 -0.0981658 + -1.51682 1.17743 0.827461 0.325364 -0.412496 -0.850873 + -1.45391 1.09575 0.847134 -0.0822618 -0.301143 -0.950024 + -1.51282 1.25382 0.698348 0.686531 -0.7209 0.0947574 + -1.4986 1.24995 0.798452 0.370037 -0.665066 -0.64866 + -1.43569 1.16827 0.818123 0.0269922 -0.299273 -0.953786 + -1.39844 1.00285 0.872655 -0.0319888 -0.264807 -0.963771 + -1.40273 0.900111 0.9008 -0.0964257 -0.330437 -0.938889 + -1.42705 0.810131 0.938248 0.268959 -0.383339 -0.883579 + -1.48115 0.749575 0.933935 0.590757 -0.414201 -0.692418 + -1.52058 0.751028 0.891216 0.493563 -0.401586 -0.771443 + -1.59075 0.801736 0.854789 0.124545 -0.357172 -0.925698 + -1.3925 0.822363 0.933659 0.0203045 -0.444787 -0.895406 + -1.41682 0.732299 0.971057 0.277714 -0.437923 -0.855043 + -1.4488 0.716278 0.974406 0.313028 -0.499471 -0.807801 + -1.49687 0.688112 0.95859 0.596314 -0.520787 -0.610893 + -1.33489 0.693301 1.0436 0.393503 -0.576032 -0.716479 + -1.42433 0.648578 1.01686 0.201754 -0.557455 -0.805319 + -1.45478 0.596872 1.05422 -0.0269332 -0.686943 -0.726212 + -1.47925 0.664574 1.01176 0.20294 -0.750257 -0.62923 + -1.50627 0.652275 0.987461 0.678628 -0.670131 -0.300646 + -1.1991 0.676835 1.14652 0.449861 -0.632005 -0.631027 + -1.3424 0.60958 1.08941 0.40311 -0.549624 -0.731721 + -1.45688 0.548566 1.10849 -0.0682584 -0.740357 -0.668739 + -1.54082 0.606679 1.08404 0.0652579 -0.800728 -0.595463 + -1.14769 0.775965 1.02182 0.425913 -0.790026 -0.440974 + -1.07025 0.74551 1.15717 0.460718 -0.742964 -0.485534 + -1.05089 0.714986 1.22064 0.473928 -0.645433 -0.599006 + -1.17527 0.617705 1.20894 0.499067 -0.508761 -0.701495 + -1.1661 0.918671 0.745052 0.286612 -0.613039 -0.736231 + -1.14172 0.8227 0.960676 0.697446 -0.567514 -0.437603 + -1.06428 0.792159 1.09598 0.406018 -0.801647 -0.438761 + -0.948354 0.796696 1.19172 0.380433 -0.849613 -0.36528 + -0.928998 0.766172 1.25519 0.432385 -0.795523 -0.424483 + -1.20241 1.08491 0.659711 -0.821727 -0.175557 -0.542167 + -1.29256 1.60304 0.697494 -0.812119 -0.563741 -0.15053 + -1.21542 1.25462 0.632759 -0.0031453 -0.00839504 -0.99996 + -1.587 0.730286 0.874144 0.0665804 -0.448761 -0.891168 + -1.66934 0.839396 0.83016 0.573369 -0.0696163 -0.816334 + -1.71192 0.812042 0.755739 0.804134 0.0394228 -0.593139 + -1.53629 0.689567 0.915871 0.436515 -0.5196 -0.734486 + -1.59718 0.672544 0.915154 0.449715 -0.429837 -0.782941 + -1.65253 0.75546 0.827341 0.824798 -0.0082988 -0.565367 + -1.69959 0.744897 0.780836 0.756707 -0.0979742 -0.646371 + -1.76663 0.838045 0.6861 0.810457 -0.0213166 -0.58541 + -1.54647 0.631827 0.956881 0.40973 -0.619083 -0.669969 + -1.55587 0.595988 0.985752 0.578711 -0.615123 -0.53546 + -1.59539 0.606046 0.942334 0.438197 -0.540751 -0.718033 + -1.65074 0.688961 0.854519 0.773858 -0.154545 -0.614215 + -1.57421 0.54596 1.0314 0.73269 -0.637314 -0.238741 + -1.61372 0.556018 0.987985 0.602529 -0.590915 -0.53645 + -1.6368 0.619564 0.87692 0.787817 -0.316406 -0.528424 + -1.68565 0.675413 0.803186 0.387969 -0.471947 -0.791673 + -1.7543 0.770899 0.711198 0.769803 -0.295818 -0.565593 + -1.51022 0.651849 1.0122 0.607161 -0.79105 -0.074804 + -1.57817 0.545448 1.05609 0.901714 -0.375559 0.214166 + -1.60585 0.49996 1.10848 0.834642 -0.550431 0.0199433 + -1.62122 0.504521 1.03438 0.342927 -0.836223 -0.42794 + -1.5718 0.593954 1.08447 0.724252 -0.6792 -0.118936 + -1.59948 0.548467 1.13686 0.723504 -0.659554 -0.203789 + -1.62677 0.468698 1.16843 0.780966 -0.620852 -0.0680772 + -1.64214 0.473346 1.09438 0.513707 -0.815679 -0.26603 + -1.6443 0.568153 0.923365 0.467164 -0.655206 -0.593686 + -1.54292 0.558373 1.13831 -0.0577527 -0.810044 -0.583519 + -1.60355 0.505276 1.20727 0.517044 -0.801543 -0.300325 + -1.62257 0.484198 1.25658 0.529428 -0.846497 -0.0561147 + -1.64579 0.44762 1.21774 0.402664 -0.90742 0.120211 + -1.66103 0.442873 1.15136 -0.04617 -0.980104 -0.19304 + -1.54699 0.515182 1.20871 -0.0749877 -0.809016 -0.582983 + -1.52479 0.464575 1.26937 -0.31232 -0.874101 -0.372026 + -1.59744 0.481079 1.30738 -0.0259835 -0.972897 -0.229774 + -1.6726 0.458265 1.2863 0.383771 -0.917937 -0.100556 + -1.68784 0.453432 1.21987 0.295227 -0.952111 0.0795293 + -1.44043 0.486339 1.17467 -0.111137 -0.760384 -0.639894 + -1.41823 0.435732 1.23532 -0.147158 -0.788088 -0.597713 + -1.44873 0.417293 1.32726 -0.541541 -0.783838 -0.303861 + -1.52138 0.433797 1.36528 -0.365322 -0.895546 -0.254041 + -1.32655 0.544633 1.1463 0.351928 -0.596813 -0.721083 + -1.31011 0.482406 1.21249 0.297737 -0.662763 -0.687093 + -1.26219 0.434609 1.27727 0.349234 -0.582392 -0.734068 + -1.27731 0.371808 1.32425 0.240972 -0.661891 -0.709811 + -1.40647 0.371246 1.30042 -0.406111 -0.755673 -0.513841 + -1.15942 0.552757 1.26583 0.500775 -0.466544 -0.729082 + -1.13583 0.493105 1.31715 0.470839 -0.494101 -0.730872 + -1.08792 0.445309 1.38194 0.44709 -0.495578 -0.744656 + -0.987842 0.616329 1.33052 0.433735 -0.464773 -0.771919 + -0.964256 0.556677 1.38184 0.377966 -0.474035 -0.795256 + -0.958075 0.487541 1.42119 0.352676 -0.486815 -0.799144 + -1.06737 0.38742 1.4322 0.417652 -0.529008 -0.738726 + -1.02706 0.655854 1.28306 0.483618 -0.479365 -0.732341 + -0.815221 0.742389 1.35778 0.313595 -0.419724 -0.851757 + -0.79827 0.664136 1.38552 0.264558 -0.375585 -0.888226 + -0.792089 0.594913 1.42482 0.195617 -0.419154 -0.886591 + -0.854442 0.781914 1.31032 0.433389 -0.680396 -0.590962 + -0.695028 0.820486 1.34571 -0.0541374 -0.660398 -0.748961 + -0.708286 0.770455 1.36997 0.016561 -0.390295 -0.920541 + -0.691335 0.692288 1.39776 -0.312427 -0.389432 -0.866448 + -0.812578 0.820227 1.26856 0.348052 -0.885531 -0.307726 + -0.738021 0.83597 1.32369 0.20944 -0.86485 -0.456255 + -0.618769 0.825268 1.31523 -0.701038 -0.67658 -0.225354 + -0.640121 0.757806 1.35788 -0.480281 -0.300874 -0.823896 + -0.653379 0.707775 1.38213 -0.453169 -0.246801 -0.856579 + -0.811583 0.827076 1.2515 0.343971 -0.810517 -0.474075 + -0.661762 0.840666 1.29316 -0.0297325 -0.936742 -0.348755 + -0.660767 0.847515 1.2761 -0.255366 -0.947414 0.192862 + -0.59698 0.776022 1.30872 -0.911292 -0.297893 -0.284263 + -0.862432 0.824007 1.21941 0.406876 -0.822885 -0.396626 + -0.734307 0.862237 1.2566 -0.094028 -0.87659 -0.471962 + -0.864203 0.836358 1.14702 0.425711 -0.872347 -0.240376 + -0.785156 0.85908 1.22446 0.365456 -0.848031 -0.383778 + -0.78827 0.875179 1.17438 -0.0730326 -0.996704 0.0353108 + -0.712689 0.835707 1.21915 -0.655829 -0.635822 0.406962 + -0.687961 0.839972 1.25976 -0.474731 -0.542775 0.692839 + -0.614421 0.825336 1.27931 -0.362325 -0.173236 0.915811 + -0.950125 0.809046 1.11933 0.269323 -0.921694 -0.279185 + -0.867317 0.852369 1.09689 0.477885 -0.790046 -0.383997 + -0.865264 0.89818 1.02414 0.242881 -0.890796 -0.384045 + -1.04637 0.825001 1.03549 0.234761 -0.86554 -0.442411 + -0.932214 0.841889 1.05884 0.331304 -0.843882 -0.42202 + -0.930161 0.8877 0.986093 0.397391 -0.824751 -0.402326 + -0.860678 0.922089 0.953931 0.198095 -0.896026 -0.397361 + -0.826398 0.869631 1.10659 -0.830173 -0.520502 0.199724 + -1.11972 0.886319 0.929887 0.502918 -0.673538 -0.541683 + -0.988034 0.855089 0.986578 0.212904 -0.869801 -0.445105 + -0.960444 0.897098 0.922215 0.218833 -0.770023 -0.599314 + -0.902572 0.92971 0.921729 0.279728 -0.855884 -0.434988 + -1.1441 0.982289 0.714262 0.570624 -0.289262 -0.768581 + -1.13996 1.08149 0.754245 0.881795 -0.00266715 -0.471624 + -1.06139 0.916319 0.880924 0.169801 -0.549543 -0.818028 + -1.05187 0.99702 0.888545 0.28604 -0.290561 -0.913102 + -0.928793 0.949374 0.86747 -0.0679236 -0.763173 -0.642614 + -1.21128 1.35382 0.672742 0.426411 -0.042953 -0.903509 + -1.1853 1.29834 0.696237 0.835049 0.0870797 -0.54324 + -1.13045 1.1621 0.761815 0.894394 0.152379 -0.420523 + -1.20241 1.08491 0.659711 0.928462 0.0122208 -0.371226 + -1.29256 1.60304 0.697494 0.437824 -0.105642 -0.892832 + -2.55227 2.13444 0.203282 -0.144941 0.975208 -0.167216 + -2.46869 2.13569 0.121704 -0.206607 0.964036 -0.167178 + -2.5105 2.12924 0.074687 0.0104376 0.989857 0.141682 + -2.4744 2.21408 0.359739 -0.617388 0.685529 -0.385852 + -2.50208 2.14992 0.196466 -0.336006 0.889614 -0.309334 + -2.39707 2.18859 0.187288 -0.578816 0.703306 -0.412714 + -2.34077 2.15746 0.061211 -0.648427 0.76038 -0.0369516 + -2.38258 2.151 0.014202 -0.200623 0.963665 0.176352 + -2.55404 2.22825 0.546984 -0.691729 0.636677 -0.340814 + -2.54716 2.2602 0.573062 -0.858596 0.267177 -0.437526 + -2.51401 2.31498 0.503967 -0.910698 0.032595 -0.411784 + -2.46937 2.34416 0.416232 -0.868306 0.0381956 -0.494556 + -2.44543 2.27979 0.37632 -0.718041 0.275045 -0.639349 + -2.43045 2.20281 0.26205 -0.612632 0.694204 -0.37784 + -2.68135 2.24606 0.776546 -0.81152 0.410326 -0.416014 + -2.67447 2.278 0.802623 -0.720618 0.411119 -0.558293 + -2.62183 2.30578 0.72291 -0.87712 0.0831844 -0.473013 + -2.58868 2.36048 0.653765 -0.895234 -0.0565549 -0.441993 + -2.69067 2.14011 0.697649 -0.968115 0.0605135 -0.243087 + -2.72265 2.20853 0.85574 -0.939291 0.0748139 -0.334867 + -2.73841 2.35365 0.931195 -0.907184 0.0635316 -0.41591 + -2.68577 2.38143 0.851482 -0.878298 0.0280821 -0.477288 + -2.64802 2.47483 0.752112 -0.90022 -0.0899189 -0.426051 + -2.6886 2.09026 0.768796 -0.968818 -0.0878022 -0.231693 + -2.73772 2.11713 0.89106 -0.940948 0.00987779 -0.338408 + -2.78481 2.16824 1.04533 -0.949733 0.0332333 -0.311293 + -2.76975 2.25965 1.01001 -0.94575 0.0366028 -0.322828 + -2.66813 2.02558 0.693429 -0.997575 0.0600019 -0.0352705 + -2.71138 1.98324 0.833166 -0.941642 0.0235637 -0.33579 + -2.7605 2.01002 0.95538 -0.936041 0.0429695 -0.349257 + -2.72489 1.90573 0.863813 -0.922793 -0.0425729 -0.382938 + -2.81001 1.8243 1.04305 -0.925878 -0.0272132 -0.376842 + -2.86532 1.87272 1.20998 -0.952521 0.000752998 -0.304472 + -2.81581 2.05844 1.12231 -0.944092 0.0713675 -0.321864 + -2.72178 1.82364 0.876602 -0.80842 -0.285164 -0.514916 + -2.8069 1.74221 1.05584 -0.890098 -0.21666 -0.400979 + -2.72186 1.72568 0.947274 -0.734147 -0.372987 -0.567371 + -2.71597 1.64793 0.986144 -0.712937 -0.337375 -0.614735 + -2.80101 1.66446 1.09471 -0.864067 -0.233578 -0.445902 + -2.67776 1.71691 0.900867 -0.615568 -0.460027 -0.639884 + -2.65143 1.66036 0.922402 -0.540757 -0.461793 -0.703086 + -2.66111 1.61844 0.948007 -0.54897 -0.341838 -0.762744 + -2.69851 1.5131 1.03227 -0.708767 -0.344801 -0.615436 + -2.60333 1.64967 0.891728 -0.390486 -0.520427 -0.759392 + -2.5719 1.58847 0.916332 -0.242246 -0.493655 -0.835237 + -2.58158 1.54655 0.941937 -0.266086 -0.418532 -0.868348 + -2.64365 1.48362 0.994138 -0.522657 -0.378444 -0.763943 + -2.51266 1.68707 0.850743 -0.116092 -0.518464 -0.847182 + -2.45401 1.53363 0.915703 -0.112405 -0.304601 -0.945824 + -2.71043 1.46155 1.07875 -0.739514 -0.310717 -0.597138 + -2.81293 1.61291 1.14119 -0.870545 -0.246686 -0.42579 + -2.69582 1.36191 1.10273 -0.749938 -0.445746 -0.488778 + -2.83411 1.59996 1.19782 -0.920479 -0.256511 -0.294823 + -2.92455 1.84272 1.39255 -0.973138 -0.0687242 -0.219724 + -2.90337 1.85575 1.33597 -0.94824 0.0143974 -0.317229 + -2.69088 1.31879 1.16603 -0.83262 -0.488595 -0.260803 + -2.82917 1.55684 1.26112 -0.911736 -0.404557 -0.0712168 + -2.88132 1.67507 1.38653 -0.916345 -0.399691 -0.0236408 + -2.63789 1.20703 1.1818 -0.924112 -0.302307 -0.233726 + -2.73704 1.3818 1.34469 -0.898637 -0.438456 0.0144213 + -2.75066 1.43318 1.4467 -0.893538 -0.394871 0.213698 + -2.8428 1.60821 1.36313 -0.856803 -0.490194 0.159995 + -2.61381 1.14019 1.11437 -0.978571 -0.0727289 -0.192639 + -2.61716 1.10996 1.32433 -0.934912 -0.354656 -0.0126379 + -2.68404 1.27004 1.36046 -0.912307 -0.409137 -0.0174159 + -2.68566 1.28041 1.4271 -0.833467 -0.458792 0.307965 + -2.57772 1.20514 0.996875 -0.904527 0.147861 -0.39996 + -2.60092 1.04733 1.08021 -0.985106 -0.145394 -0.0917945 + -2.59308 1.04304 1.25684 -0.950259 -0.311364 0.00781739 + -2.61877 1.12024 1.39092 -0.928899 -0.346585 0.130485 + -2.56484 1.11228 0.962714 -0.919465 0.105989 -0.378616 + -2.58618 0.98852 1.00507 -0.969967 -0.190865 -0.150778 + -2.58243 1.00189 1.14671 -0.945154 -0.323487 0.0451764 + -2.54816 0.916788 1.24551 -0.924532 -0.377052 0.0554235 + -2.55881 0.957931 1.35565 -0.925182 -0.375946 0.0519808 + -2.50194 1.17043 0.851593 -0.821886 0.309601 -0.478173 + -2.49899 1.08753 0.812577 -0.810373 0.197348 -0.551679 + -2.56188 1.02929 0.923648 -0.93213 0.0344602 -0.36048 + -2.55869 0.93982 0.946217 -0.96478 -0.129222 -0.229133 + -2.56768 0.943084 1.07156 -0.945993 -0.321485 0.0417764 + -2.40168 1.17625 0.744709 -0.619436 0.298552 -0.726062 + -2.41419 1.08425 0.721255 -0.61971 0.265996 -0.738381 + -2.49104 0.990875 0.771388 -0.824036 0.158811 -0.543823 + -2.5344 0.980593 0.864797 -0.924585 0.0233744 -0.380258 + -2.29816 1.04453 0.635261 -0.448085 0.294329 -0.844151 + -2.27494 0.963113 0.591875 -0.410539 0.358633 -0.838355 + -2.40624 0.987598 0.680065 -0.617791 0.253472 -0.744369 + -2.14033 0.913598 0.518236 -0.231781 0.399618 -0.886895 + -2.24601 0.882803 0.540174 -0.375682 0.422097 -0.825044 + -2.37731 0.907288 0.628365 -0.566056 0.310739 -0.763559 + -2.45752 0.899734 0.695248 -0.762946 0.183049 -0.620005 + -2.48473 0.934199 0.747354 -0.875126 0.0847596 -0.476414 + -1.96912 0.765755 0.420306 0.136233 0.291685 -0.946763 + -2.11165 0.833479 0.477208 -0.146208 0.497451 -0.855082 + -2.20315 0.817744 0.481859 -0.324 0.470537 -0.820743 + -2.33615 0.828191 0.564767 -0.558406 0.286279 -0.778606 + -2.41636 0.820637 0.631649 -0.735722 0.114228 -0.667582 + -1.89324 0.815688 0.474423 0.617393 0.322612 -0.717459 + -1.88089 0.74382 0.478903 0.783604 0.124291 -0.608701 + -1.96103 0.67472 0.399785 0.449127 0.333875 -0.828741 + -2.06879 0.768334 0.418843 0.209192 0.663968 -0.717904 + -1.81695 0.764071 0.600627 0.86766 -0.183795 -0.461937 + -1.81262 0.720615 0.663493 0.876135 -0.325717 -0.355382 + -1.87281 0.652784 0.458382 0.832041 0.0362028 -0.553532 + -1.91603 0.534961 0.413056 0.789759 -0.279424 -0.546079 + -1.96117 0.623916 0.370181 0.582356 0.309594 -0.751673 + -1.74998 0.727445 0.774065 0.26545 -0.746467 -0.610183 + -1.80877 0.671025 0.710185 0.86313 -0.426725 -0.270022 + -1.86896 0.60328 0.505124 0.945919 -0.196669 -0.257988 + -1.68642 0.623923 0.855168 -0.0045126 -0.708756 -0.705439 + -1.75074 0.675868 0.825996 0.214467 -0.785796 -0.580112 + -1.8218 0.634855 0.772834 0.833828 -0.514777 -0.199338 + -1.85867 0.560345 0.575091 0.957778 -0.223931 -0.180319 + -1.90574 0.492112 0.483073 0.829766 -0.421959 -0.365293 + -1.69254 0.569577 0.911698 -0.158111 -0.733039 -0.661554 + -1.76377 0.639697 0.888646 0.105377 -0.842898 -0.527655 + -1.82642 0.59689 0.838591 0.7945 -0.584643 -0.1642 + -1.86328 0.522381 0.640847 0.966507 -0.214487 -0.140924 + -1.65042 0.513721 0.979845 0.525468 -0.716742 -0.458436 + -1.70803 0.526187 0.970451 -0.238842 -0.749552 -0.617355 + -1.77926 0.596395 0.94745 0.0728766 -0.840701 -0.536573 + -1.85124 0.55914 0.898178 0.809196 -0.579714 -0.0955744 + -1.66931 0.483248 1.03682 0.266847 -0.854562 -0.445551 + -1.72604 0.479952 1.02813 -0.222569 -0.779222 -0.585898 + -1.80409 0.558557 1.00699 0.0564278 -0.87805 -0.475231 + -1.86902 0.523285 0.957278 0.84407 -0.530537 -0.0779501 + -1.85602 0.483439 0.700495 0.962704 -0.259133 -0.0777881 + -1.68732 0.437013 1.09451 0.485507 -0.842984 -0.231648 + -1.74607 0.451085 1.08933 -0.400766 -0.840026 -0.36571 + -1.82411 0.52969 1.06819 0.0629603 -0.912948 -0.40319 + -1.88128 0.493809 1.02393 0.757383 -0.64941 -0.0680977 + -1.87381 0.447584 0.759596 0.806986 -0.589472 0.036005 + -1.70775 0.443486 1.2775 0.372705 -0.927857 -0.0131178 + -1.70723 0.427067 1.15213 0.206735 -0.977373 -0.0447376 + -1.77727 0.448527 1.15856 -0.429328 -0.85716 -0.284526 + -1.83637 0.500213 1.13484 0.00218417 -0.947644 -0.319322 + -1.64747 0.455233 1.33715 0.287165 -0.957778 0.0140231 + -1.7011 0.453737 1.34454 0.320589 -0.944677 0.0693361 + -1.64082 0.465398 1.40414 -0.00173264 -0.981346 -0.192241 + -1.70716 0.451032 1.41863 0.746003 -0.553233 -0.370692 + -1.73843 0.424595 1.22141 0.0774129 -0.99613 -0.0416256 + -1.48839 0.408059 1.43006 -0.449636 -0.874282 -0.182915 + -1.60783 0.439747 1.46897 -0.101088 -0.935032 -0.339847 + -1.67675 0.424968 1.47897 0.194083 -0.932887 -0.303405 + -1.74448 0.42189 1.2955 0.226335 -0.973954 -0.0136437 + -1.7944 0.430866 1.22575 -0.355016 -0.914442 -0.194316 + -1.417 0.365191 1.40291 -0.655971 -0.738087 -0.157892 + -1.46206 0.367494 1.51932 -0.475959 -0.842572 -0.252063 + -1.57742 0.413598 1.52926 -0.208755 -0.932572 -0.294502 + -1.67259 0.411655 1.55043 0.289223 -0.867086 -0.4056 + -1.76926 0.424379 1.37059 0.07764 -0.991337 -0.105937 + -1.37475 0.319144 1.37606 -0.432593 -0.810749 -0.394397 + -1.39068 0.324625 1.49217 -0.770867 -0.619188 -0.149566 + -1.38133 0.290225 1.57975 -0.80906 -0.568873 -0.147665 + -1.43898 0.324733 1.62698 -0.483201 -0.844856 -0.229641 + -1.46494 0.348315 1.57954 -0.318927 -0.898098 -0.302829 + -1.2514 0.260562 1.46153 0.119277 -0.827592 -0.548511 + -1.36742 0.271559 1.45088 -0.587021 -0.731977 -0.345856 + -1.35807 0.237154 1.53847 -0.627426 -0.748182 -0.215778 + -1.38355 0.264554 1.67781 -0.780556 -0.606511 -0.151251 + -1.44119 0.299154 1.72508 -0.4835 -0.852908 -0.196913 + -1.26555 0.307234 1.38929 0.20303 -0.746738 -0.633372 + -1.03236 0.181381 1.67547 0.111045 -0.884332 -0.453459 + -1.01916 0.153671 1.75087 0.0721301 -0.93162 -0.356205 + -1.24407 0.212977 1.53635 0.0391076 -0.894326 -0.445704 + -1.23482 0.182879 1.61828 -0.0921612 -0.951509 -0.293492 + -1.04651 0.228051 1.60324 0.241731 -0.787234 -0.5673 + -0.878998 0.208596 1.69633 0.14939 -0.785803 -0.600164 + -0.858484 0.160513 1.75982 0.0567368 -0.871973 -0.486255 + -0.845283 0.132889 1.83526 -0.0105737 -0.911851 -0.410385 + -1.00992 0.123663 1.83285 0.0085355 -0.954924 -0.296728 + -1.06378 0.27098 1.53688 0.263569 -0.738922 -0.620101 + -0.896263 0.251439 1.62993 0.203733 -0.725197 -0.65771 + -0.771005 0.252727 1.6505 -0.00640396 -0.731077 -0.682265 + -0.750491 0.20473 1.71403 -0.0403855 -0.772602 -0.633605 + -0.72341 0.149105 1.77358 -0.0860938 -0.840909 -0.534285 + -1.24913 0.397413 1.31329 0.361401 -0.602578 -0.71154 + -1.0356 0.296588 1.52593 0.350375 -0.646162 -0.678021 + -0.912573 0.310585 1.57489 0.271502 -0.633978 -0.724126 + -0.793357 0.317255 1.59913 0.0353987 -0.640977 -0.766743 + -1.05431 0.350224 1.46823 0.383147 -0.593471 -0.707806 + -0.93128 0.364226 1.51718 0.310855 -0.586365 -0.748028 + -0.809666 0.376401 1.54409 0.0933004 -0.592463 -0.800177 + -0.703249 0.385732 1.53053 -0.17649 -0.557519 -0.811186 + -0.673794 0.323089 1.57323 -0.223171 -0.642032 -0.733478 + -0.937526 0.429652 1.47146 0.339301 -0.527993 -0.778523 + -0.810899 0.450873 1.5015 0.117863 -0.513104 -0.850196 + -0.704481 0.460204 1.48794 -0.227218 -0.464816 -0.855756 + -0.574079 0.336989 1.51655 -0.356712 -0.633116 -0.686965 + -0.544624 0.274352 1.55925 -0.322191 -0.722232 -0.612024 + -0.817145 0.516216 1.45572 0.204672 -0.489189 -0.847823 + -0.719093 0.531891 1.45677 -0.106355 -0.390648 -0.914376 + -0.62273 0.398818 1.48366 -0.502321 -0.597337 -0.62519 + -0.513597 0.336729 1.48201 -0.539356 -0.746407 -0.389835 + -0.464946 0.27499 1.51494 -0.272045 -0.728313 -0.628929 + -0.694037 0.610589 1.42586 -0.185737 -0.324988 -0.9273 + -0.637341 0.470503 1.4525 -0.425363 -0.39714 -0.813232 + -0.556858 0.379338 1.4482 -0.387109 -0.551252 -0.739099 + -0.411498 0.244197 1.49247 -0.500021 -0.860111 0.100936 + -0.344818 0.220911 1.52321 -0.278767 -0.909458 -0.308503 + -0.66784 0.546321 1.43458 -0.824893 -0.380433 -0.418118 + -0.587357 0.455156 1.43028 -0.713086 -0.493871 -0.497594 + -0.454759 0.286808 1.45867 -0.542028 -0.820163 -0.183132 + -0.378843 0.25661 1.45817 -0.0156217 -0.773723 -0.633332 + -0.316716 0.227436 1.4939 0.0254412 -0.781327 -0.623603 + -0.665138 0.627934 1.40642 -0.480783 -0.237754 -0.843991 + -0.620104 0.518944 1.3988 -0.643216 -0.356192 -0.67779 + -0.506451 0.320803 1.41179 -0.673958 -0.726159 -0.135919 + -0.430534 0.290693 1.41134 -0.0206024 -0.743793 -0.668092 + -0.608345 0.598784 1.37451 -0.895837 -0.231059 -0.37959 + -0.539198 0.384677 1.38036 -0.758753 -0.614424 -0.216279 + -0.475534 0.339011 1.37125 -0.0499525 -0.602305 -0.796701 + -0.359348 0.340435 1.42019 0.321289 -0.322209 -0.89048 + -0.311006 0.293472 1.45073 0.260868 -0.434924 -0.861852 + -0.617936 0.632074 1.35425 -0.959442 -0.174028 -0.221776 + -0.585745 0.435954 1.33994 -0.852909 -0.519024 -0.0562139 + -0.522081 0.390288 1.33083 -0.172224 -0.660943 -0.730406 + -0.404348 0.388668 1.38004 0.378828 -0.364832 -0.850521 + -0.618333 0.70856 1.35137 -0.695973 -0.0389876 -0.717009 + -0.607887 0.547783 1.32225 -0.921173 -0.209015 -0.328258 + -0.595336 0.469246 1.31968 -0.853359 -0.256599 -0.453802 + -0.553227 0.446257 1.2989 -0.225587 -0.371602 -0.900568 + -0.438301 0.447908 1.33823 0.348344 -0.377143 -0.858149 + -0.608283 0.624181 1.31932 -0.972663 0.0112533 -0.231947 + -0.604949 0.61793 1.29995 -0.942718 -0.0709479 -0.325958 + -0.579984 0.587683 1.26814 -0.649754 -0.342972 -0.678372 + -0.565778 0.524706 1.30142 -0.373989 -0.315839 -0.871997 + -0.469447 0.503789 1.30625 0.214758 -0.460341 -0.861374 + -0.593646 0.769686 1.2893 -0.926238 -0.201482 0.318573 + -0.604988 0.683732 1.27398 -0.973907 -0.224224 0.0350467 + -0.580023 0.653486 1.24217 -0.753327 -0.396395 -0.524757 + -0.52019 0.609442 1.22065 -0.28038 -0.542816 -0.791667 + -0.505983 0.546464 1.25393 -0.0549415 -0.64068 -0.76584 + -0.614421 0.825336 1.27931 -0.019841 -0.183826 -0.982758 + -0.625762 0.739297 1.26394 -0.675628 -0.202438 0.708904 + -0.65049 0.735117 1.22337 -0.742742 -0.665145 0.0769174 + -0.583397 0.700325 1.18764 -0.578078 -0.706451 -0.408353 + -0.524591 0.665486 1.16738 -0.266571 -0.722343 -0.638092 + -0.750817 0.830245 1.15141 -0.594226 -0.793715 0.130048 + -0.656362 0.772864 1.1512 -0.50883 -0.812218 -0.285295 + -0.589269 0.73807 1.11546 -0.475727 -0.802918 -0.359176 + -0.527966 0.712325 1.11285 -0.231629 -0.835416 -0.498426 + -0.761403 0.847206 1.07903 -0.478168 -0.862449 -0.165942 + -0.666948 0.789911 1.07887 -0.427857 -0.882308 -0.196139 + -0.58677 0.76533 1.04744 -0.384727 -0.868118 -0.313617 + -0.528096 0.742561 1.04268 -0.172658 -0.91587 -0.362452 + -0.865264 0.89818 1.02414 -0.863132 0.183568 0.470432 + -2.40148 2.26853 0.27863 -0.855898 0.261633 -0.446079 + -2.35498 2.26205 0.193641 -0.818023 0.283417 -0.500513 + -2.38615 2.4128 0.262939 -0.879792 -0.0017056 -0.475355 + -2.33965 2.40641 0.178006 -0.814221 -0.000115831 -0.580555 + -2.41009 2.47716 0.302859 -0.871212 -0.0786176 -0.48457 + -2.40968 2.60772 0.270929 -0.856088 -0.135507 -0.498749 + -2.33398 2.58486 0.15232 -0.826289 -0.139883 -0.545599 + -2.31542 2.48829 0.153996 -0.689462 -0.100011 -0.717384 + -2.24517 2.41248 0.067503 -0.806713 -0.0430281 -0.589375 + -2.49718 2.52572 0.438165 -0.866028 -0.0962787 -0.490637 + -2.49677 2.65627 0.406242 -0.870145 -0.128671 -0.4757 + -2.43035 2.76938 0.249128 -0.859047 -0.138095 -0.492918 + -2.35465 2.74652 0.130519 -0.833927 -0.147293 -0.531856 + -2.54182 2.49645 0.525851 -0.888186 -0.0924913 -0.450078 + -2.58091 2.74515 0.544287 -0.888185 -0.120127 -0.443505 + -2.49429 2.81905 0.355288 -0.87711 -0.114313 -0.466488 + -2.47963 2.97629 0.295346 -0.872185 -0.0770665 -0.483067 + -2.41569 2.92662 0.189185 -0.854615 -0.0783679 -0.513314 + -2.60116 2.6108 0.624196 -0.89595 -0.110302 -0.43024 + -2.68695 2.89679 0.71864 -0.900823 -0.106143 -0.421013 + -2.66019 3.0171 0.63406 -0.896377 -0.086915 -0.434689 + -2.57843 2.90803 0.493386 -0.885997 -0.104187 -0.451834 + -2.54816 3.04584 0.411292 -0.880319 -0.0648228 -0.469933 + -2.7072 2.76244 0.798549 -0.908201 -0.119095 -0.401231 + -2.76845 3.07492 0.860518 -0.915771 -0.081857 -0.393273 + -2.74168 3.19523 0.775939 -0.910102 -0.0631682 -0.409541 + -2.70095 3.29493 0.677653 -0.893609 -0.0381599 -0.447222 + -2.62992 3.15491 0.551967 -0.885189 -0.04706 -0.462846 + -2.72096 2.63579 0.876315 -0.912156 -0.104979 -0.396169 + -2.81207 2.84551 1.03226 -0.921891 -0.106169 -0.372619 + -2.79831 2.97216 0.954499 -0.924879 -0.10066 -0.366696 + -2.84357 3.31723 0.997227 -0.933814 -0.0304933 -0.356456 + -2.80086 3.39498 0.886163 -0.924031 -0.0232215 -0.381612 + -2.75872 2.54239 0.975684 -0.913895 -0.0672549 -0.400341 + -2.837 2.73734 1.12262 -0.919997 -0.0929037 -0.380755 + -2.90994 3.12542 1.19425 -0.93675 -0.0493234 -0.346507 + -2.87343 3.21447 1.09121 -0.935326 -0.0433438 -0.351122 + -2.89598 3.56679 1.14817 -0.953682 0.0275757 -0.299551 + -2.78123 2.41982 1.05658 -0.931449 -0.0280248 -0.362791 + -2.85952 2.61477 1.20352 -0.925594 -0.0867182 -0.36845 + -2.93487 3.01725 1.2846 -0.941858 -0.0638603 -0.329887 + -2.96473 3.39293 1.3569 -0.962692 0.0326232 -0.268627 + -2.92822 3.48207 1.25391 -0.957043 0.0321749 -0.288154 + -2.81256 2.32573 1.13535 -0.939687 -0.0201803 -0.34144 + -2.88121 2.50385 1.29123 -0.934029 -0.0814847 -0.347778 + -2.96272 2.92172 1.38686 -0.947394 -0.0625004 -0.313907 + -3.02043 3.20382 1.55945 -0.976259 0.0130221 -0.216214 + -2.99258 3.29926 1.45715 -0.969218 0.0229619 -0.245131 + -2.84567 2.22835 1.24362 -0.941299 -0.00359974 -0.337555 + -2.91431 2.40647 1.3995 -0.948569 -0.0835005 -0.305359 + -2.98441 2.8109 1.47462 -0.955763 -0.0713432 -0.285355 + -2.87667 2.11855 1.3206 -0.952512 0.0394207 -0.30194 + -2.93623 2.33865 1.51157 -0.961664 -0.0740546 -0.264042 + -2.99463 2.69059 1.5504 -0.962682 -0.0881337 -0.255882 + -3.05017 2.98744 1.73523 -0.989332 -0.0291787 -0.142728 + -3.03994 3.10766 1.65941 -0.98569 -0.00413942 -0.16852 + -2.91676 2.11445 1.45989 -0.959711 0.0316562 -0.279202 + -2.97632 2.33456 1.65087 -0.978085 -0.0789315 -0.192666 + -3.01655 2.62285 1.66252 -0.980868 -0.105634 -0.163521 + -2.95481 2.09748 1.58589 -0.972261 0.0237855 -0.232688 + -2.99255 2.32319 1.78795 -0.986442 -0.0465786 -0.15736 + -3.01529 2.55297 1.78236 -0.990024 -0.106132 -0.0926679 + -3.0561 2.83204 1.959 -0.996434 -0.0761684 -0.0362971 + -3.05736 2.90192 1.83917 -0.99577 -0.0602179 -0.0693919 + -2.98303 2.14159 1.73209 -0.989139 -0.039658 -0.141534 + -3.02077 2.3673 1.93415 -0.994754 -0.0769954 -0.0673586 + -3.03153 2.54161 1.91944 -0.994429 -0.079158 -0.0696074 + -2.93726 1.8551 1.51631 -0.982642 -0.154902 -0.10208 + -2.99574 2.15389 1.85579 -0.989668 -0.143212 0.00682483 + -3.01987 2.36333 2.07983 -0.987959 -0.142507 0.0602385 + -3.02892 2.52052 2.06117 -0.996994 -0.0773228 0.00494252 + -2.96054 1.88031 1.66985 -0.978932 -0.204185 -0.000654397 + -2.97736 2.1481 2.00502 -0.959616 -0.245991 0.136477 + -3.00149 2.35754 2.22905 -0.970838 -0.212374 0.111225 + -3.02802 2.51664 2.20689 -0.992721 -0.112198 0.0437818 + -3.05121 2.75296 2.22377 -0.994911 -0.0964525 0.0291278 + -2.9046 1.70027 1.54007 -0.866205 -0.499639 0.00702912 + -2.92564 1.84141 1.81123 -0.890258 -0.401248 0.215501 + -2.94247 2.1092 2.14639 -0.939378 -0.310889 0.14463 + -2.97441 2.31554 2.36321 -0.958614 -0.251129 0.134142 + -3.01751 2.4999 2.34988 -0.982392 -0.159453 0.097373 + -2.78394 1.59132 1.59758 -0.787785 -0.605424 0.113386 + -2.75872 1.58567 1.72018 -0.831279 -0.534721 0.151817 + -2.87938 1.69462 1.66267 -0.793194 -0.584787 0.169904 + -2.82662 1.79901 2.02526 -0.876113 -0.44198 0.192559 + -2.74542 1.52447 1.57417 -0.864803 -0.467161 0.184059 + -2.70084 1.45524 1.60888 -0.870726 -0.459715 0.174635 + -2.68044 1.42697 1.65945 -0.904854 -0.420712 0.0651221 + -2.67129 1.41559 1.73735 -0.91534 -0.397516 0.0642925 + -2.67396 1.43037 1.80435 -0.919041 -0.39083 0.0511448 + -2.69898 1.49683 1.84245 -0.910748 -0.407124 0.0692 + -2.70609 1.36395 1.48141 -0.791284 -0.472552 0.388026 + -2.66486 1.33239 1.50287 -0.812307 -0.468514 0.347351 + -2.64446 1.30412 1.55343 -0.939658 -0.326793 0.101235 + -2.62412 1.24978 1.68276 -0.954804 -0.291127 0.05995 + -2.61496 1.2384 1.76067 -0.948755 -0.301912 0.0933429 + -2.64442 1.24894 1.44861 -0.814684 -0.398577 0.421219 + -2.6239 1.22028 1.49886 -0.951316 -0.279558 0.129792 + -2.60356 1.16593 1.62819 -0.958683 -0.274484 0.0747332 + -2.57155 1.11526 1.79054 -0.947149 -0.301288 0.110158 + -2.60791 1.25902 1.86534 -0.939972 -0.329724 0.0879468 + -2.59824 1.09167 1.44121 -0.950671 -0.246932 0.187746 + -2.56943 1.00822 1.47854 -0.935792 -0.340606 0.0909984 + -2.57475 1.08248 1.66552 -0.949045 -0.301088 0.0930595 + -2.52548 0.975537 1.80256 -0.912902 -0.377776 0.15458 + -2.5645 1.13589 1.89522 -0.938668 -0.307645 0.155745 + -2.52091 0.910412 1.57756 -0.911048 -0.401822 0.092363 + -2.52867 0.942755 1.67753 -0.917669 -0.388548 0.0831501 + -2.45901 0.838753 1.79127 -0.815526 -0.553404 0.169296 + -2.45238 0.870138 1.88291 -0.831487 -0.506998 0.227117 + -2.51609 1.00412 1.90324 -0.902943 -0.38792 0.184963 + -2.51029 0.860121 1.45466 -0.898337 -0.434165 0.0670126 + -2.45187 0.773464 1.59656 -0.867058 -0.486056 0.109362 + -2.45124 0.806408 1.69129 -0.872684 -0.466425 0.144465 + -2.35716 0.768187 1.95149 -0.82638 -0.469243 0.3113 + -2.35053 0.799572 2.04313 -0.757813 -0.613114 0.223182 + -2.49949 0.828385 1.35403 -0.890069 -0.450992 0.0661992 + -2.44107 0.741642 1.49587 -0.857665 -0.509839 0.0668962 + -2.37738 0.689151 1.77499 -0.824916 -0.540635 0.165009 + -2.37676 0.722098 1.86973 -0.877664 -0.387375 0.282216 + -2.53911 0.88031 1.14569 -0.92035 -0.384449 0.071797 + -2.49044 0.791906 1.25421 -0.888431 -0.451782 0.0811384 + -2.42665 0.707026 1.40663 -0.863806 -0.497431 0.0800094 + -2.37651 0.663807 1.68489 -0.822636 -0.554232 0.126872 + -2.53166 0.838905 1.05261 -0.91301 -0.40319 0.0620577 + -2.48424 0.761973 1.15306 -0.875184 -0.477214 0.0795046 + -2.42046 0.677093 1.30547 -0.829327 -0.55385 0.0739398 + -2.36209 0.629193 1.59564 -0.780686 -0.619751 0.0802384 + -2.56023 0.901679 0.978482 -0.973021 -0.223459 -0.0574181 + -2.54015 0.858694 0.912934 -0.935028 -0.312015 -0.168429 + -2.51634 0.799821 0.971907 -0.894208 -0.446819 -0.0272932 + -2.46893 0.722889 1.07235 -0.856475 -0.511347 0.0705366 + -2.39861 0.638763 1.21626 -0.814999 -0.574484 0.0757926 + -2.53861 0.896836 0.880669 -0.960877 -0.111013 -0.253756 + -2.51454 0.823445 0.866386 -0.919587 -0.373631 -0.12149 + -2.49074 0.764572 0.925359 -0.887821 -0.454023 -0.0750764 + -2.45263 0.684515 0.975821 -0.851662 -0.523362 0.0276422 + -2.38231 0.600476 1.11978 -0.78982 -0.609055 0.0723661 + -2.52809 0.923916 0.840764 -0.942134 0.0156036 -0.334874 + -2.52028 0.852697 0.830319 -0.955498 -0.204132 -0.212964 + -2.49906 0.810617 0.786604 -0.941473 -0.221403 -0.254182 + -2.49332 0.781365 0.822671 -0.927539 -0.364063 -0.0844333 + -2.48104 0.747248 0.863964 -0.914465 -0.403719 -0.0276527 + -2.50975 0.879778 0.790414 -0.921391 -0.0226009 -0.387978 + -2.48254 0.845314 0.738309 -0.899068 -0.0321586 -0.436625 + -2.47901 0.76723 0.747753 -0.921246 -0.263998 -0.285677 + -2.47308 0.737895 0.783763 -0.903785 -0.408652 -0.127182 + -2.4608 0.703778 0.825056 -0.890975 -0.450108 -0.0597247 + -2.4625 0.80184 0.699408 -0.879635 -0.0610529 -0.471714 + -2.45367 0.732083 0.713031 -0.869966 -0.371918 -0.323783 + -2.44773 0.702748 0.74904 -0.819459 -0.524584 -0.230865 + -2.43712 0.665621 0.797747 -0.850379 -0.495211 -0.177827 + -2.44294 0.667191 0.914427 -0.870124 -0.492801 -0.00557889 + -2.40083 0.774758 0.610516 -0.726129 -0.024312 -0.687128 + -2.44697 0.756048 0.678323 -0.864056 -0.192797 -0.465013 + -2.42472 0.700478 0.684772 -0.78797 -0.521589 -0.327182 + -2.41327 0.679273 0.7131 -0.734305 -0.631986 -0.247767 + -2.40265 0.642147 0.761806 -0.808713 -0.441402 -0.388778 + -2.36064 0.744002 0.573184 -0.72022 -0.10465 -0.685807 + -2.41802 0.724444 0.650064 -0.791102 -0.314027 -0.524923 + -2.39664 0.676451 0.657788 -0.753974 -0.552474 -0.35538 + -2.38518 0.655246 0.686115 -0.781181 -0.571712 -0.2508 + -2.29095 0.754305 0.50994 -0.591253 0.155886 -0.791277 + -2.29897 0.667007 0.517945 -0.74976 -0.244727 -0.614791 + -2.3376 0.653831 0.596767 -0.74753 -0.434721 -0.502211 + -2.37782 0.693687 0.612733 -0.711692 -0.378537 -0.591781 + -2.35641 0.636681 0.641871 -0.759225 -0.502721 -0.413339 + -2.15795 0.743773 0.426982 -0.358854 0.368239 -0.857685 + -2.13163 0.660542 0.387545 -0.441128 0.14915 -0.884964 + -2.22928 0.677311 0.4547 -0.605838 0.0213153 -0.795302 + -2.19049 0.596965 0.432463 -0.654034 -0.283244 -0.701436 + -2.25055 0.615227 0.490032 -0.718078 -0.437556 -0.541211 + -2.06893 0.717615 0.389289 -0.0168169 0.44988 -0.89293 + -2.04261 0.634297 0.349801 -0.0356685 0.264495 -0.963727 + -2.03077 0.576074 0.342247 -0.0478531 -0.0217802 -0.998617 + -2.09283 0.580194 0.365307 -0.450414 -0.079126 -0.889307 + -1.94933 0.565779 0.362676 0.617395 -0.0383686 -0.785717 + -2.0216 0.483798 0.359073 0.03749 -0.57505 -0.817259 + -2.08366 0.48792 0.382134 -0.501791 -0.444887 -0.74181 + -2.13465 0.524988 0.431131 -0.724638 -0.520652 -0.451466 + -2.19471 0.54325 0.4887 -0.681666 -0.526662 -0.507896 + -1.9883 0.45298 0.409452 0.417605 -0.705126 -0.573065 + -2.06513 0.433022 0.407219 -0.264069 -0.739561 -0.619126 + -2.11612 0.470089 0.456215 -0.721532 -0.570265 -0.39267 + -1.89848 0.453085 0.542671 0.793456 -0.534458 -0.291174 + -1.91972 0.415229 0.60264 0.571507 -0.803509 -0.166594 + -2.00954 0.415124 0.469421 0.202572 -0.93421 -0.293626 + -2.08196 0.418872 0.489529 -0.407875 -0.873911 -0.26442 + -1.95867 0.386642 0.672753 0.371757 -0.922483 -0.104025 + -2.02637 0.400974 0.55173 0.016649 -0.980646 -0.195081 + -2.05472 0.382269 0.629927 -0.0656474 -0.97698 -0.202979 + -2.11198 0.414983 0.555663 -0.52412 -0.81267 -0.254686 + -2.14614 0.466201 0.522352 -0.628522 -0.668658 -0.397311 + -1.91275 0.418999 0.82971 0.693866 -0.719589 0.0272241 + -1.98702 0.367937 0.750949 0.331112 -0.939201 -0.0909184 + -2.02519 0.351912 0.827106 0.188981 -0.979275 -0.0728461 + -2.07224 0.36711 0.717184 -0.12392 -0.976833 -0.174473 + -2.12951 0.399824 0.64292 -0.396362 -0.887535 -0.234903 + -1.90422 0.465659 1.09489 0.82056 -0.557494 -0.126022 + -1.9357 0.390763 0.900615 0.652078 -0.757994 0.0154749 + -1.97387 0.374737 0.976771 0.532508 -0.844279 -0.0602339 + -2.04494 0.342123 0.90966 0.25723 -0.959014 -0.118847 + -2.092 0.357321 0.799737 -0.324932 -0.943242 -0.0686484 + -1.8535 0.482553 1.20203 0.205393 -0.902307 -0.379019 + -1.90727 0.422201 1.15736 0.796622 -0.575877 -0.183737 + -1.92036 0.393833 1.2301 0.775941 -0.59943 -0.196465 + -1.98696 0.346454 1.04956 0.585345 -0.799063 -0.137366 + -2.05528 0.326128 0.991967 -0.126362 -0.987207 -0.0972343 + -1.81918 0.433355 1.30084 -0.0277061 -0.977844 -0.207493 + -1.85654 0.439093 1.2645 0.513435 -0.79257 -0.328965 + -1.87002 0.41583 1.3378 0.528912 -0.806925 -0.262914 + -1.92652 0.351051 1.2894 0.706499 -0.678503 -0.20123 + -1.9973 0.330459 1.13187 0.387721 -0.911763 -0.135499 + -1.83267 0.410092 1.37414 0.0622999 -0.986552 -0.151107 + -1.84235 0.406737 1.45075 0.396169 -0.916194 -0.0603194 + -1.87618 0.373049 1.39709 0.738808 -0.658861 -0.141651 + -1.93117 0.334753 1.36423 0.335112 -0.942016 0.0174829 + -1.76511 0.411152 1.4421 0.132338 -0.981785 -0.13633 + -1.7748 0.407712 1.51866 -0.0291195 -0.993767 -0.107607 + -1.85045 0.398633 1.52138 0.425075 -0.904203 -0.0415591 + -1.88427 0.364945 1.46773 0.483536 -0.871073 0.0861698 + -1.65583 0.378339 1.60973 -0.0143902 -0.950904 -0.30915 + -1.65108 0.366233 1.6813 -0.134821 -0.972098 -0.191959 + -1.77005 0.395607 1.59022 -0.0856149 -0.99261 -0.0860006 + -1.85122 0.398926 1.59928 0.155597 -0.985889 0.0617382 + -1.58031 0.394507 1.58953 -0.163262 -0.903683 -0.395856 + -1.56355 0.361189 1.64884 -0.21887 -0.914201 -0.341076 + -1.53758 0.337601 1.69629 -0.246375 -0.942465 -0.225963 + -1.64358 0.352119 1.74875 -0.24884 -0.961295 -0.11828 + -1.77082 0.395987 1.66817 -0.194979 -0.98054 -0.0229125 + -1.53008 0.323491 1.76373 -0.269889 -0.945882 -0.180189 + -1.53293 0.308826 1.84893 -0.293583 -0.952625 -0.0794605 + -1.64093 0.345863 1.82318 -0.306584 -0.950613 -0.048381 + -1.76818 0.389645 1.74255 -0.183639 -0.979459 -0.0832907 + -1.85945 0.40399 1.6747 0.194425 -0.980656 -0.0226389 + -1.44405 0.284483 1.8103 -0.501312 -0.847054 -0.176596 + -1.53307 0.306576 1.92143 -0.37376 -0.920959 -0.110176 + -1.64107 0.343527 1.89563 -0.283628 -0.956871 -0.0628742 + -1.771 0.382386 1.81952 -0.197358 -0.977344 -0.0764759 + -1.86227 0.396732 1.75168 -0.060034 -0.998192 0.00308328 + -1.38511 0.244046 1.77334 -0.795532 -0.578955 -0.178715 + -1.45856 0.269326 1.90935 -0.542716 -0.823284 -0.166318 + -1.46891 0.259892 1.99509 -0.49757 -0.851334 -0.166296 + -1.54342 0.297141 2.00717 -0.394842 -0.906355 -0.150401 + -1.64148 0.337272 1.96966 -0.270629 -0.954985 -0.121503 + -1.35462 0.194096 1.72325 -0.634296 -0.754835 -0.16701 + -1.39962 0.228884 1.8724 -0.709918 -0.687838 -0.151312 + -1.39166 0.208942 1.93914 -0.703805 -0.706451 -0.0747323 + -1.40439 0.215415 2.01313 -0.633085 -0.761753 -0.137605 + -1.35305 0.21461 1.62772 -0.622323 -0.765293 -0.164442 + -1.2298 0.160337 1.70752 -0.152031 -0.962783 -0.223464 + -1.22831 0.141582 1.79381 -0.177832 -0.965211 -0.191688 + -1.34899 0.176277 1.81411 -0.554387 -0.819961 -0.142548 + -1.34103 0.156335 1.88086 -0.523057 -0.840986 -0.1384 + -1.01064 0.104507 1.91102 -0.0511396 -0.973439 -0.223163 + -1.00914 0.085758 1.9973 -0.0735815 -0.977959 -0.195401 + -1.0238 0.072506 2.07605 -0.103697 -0.982693 -0.153494 + -1.22268 0.123849 1.88472 -0.17623 -0.96992 -0.167921 + -0.828999 0.095944 1.90606 -0.083087 -0.935663 -0.342975 + -0.829722 0.076875 1.98428 -0.116355 -0.965344 -0.233608 + -0.833452 0.058511 2.06169 -0.0812208 -0.97989 -0.182262 + -0.848105 0.045259 2.14045 -0.0470974 -0.992081 -0.116435 + -1.02656 0.061384 2.16131 -0.143608 -0.985868 -0.0862618 + -0.707126 0.112246 1.84442 -0.10426 -0.876729 -0.469548 + -0.685094 0.06822 1.91427 -0.102666 -0.928156 -0.357752 + -0.688824 0.049855 1.99168 -0.0446493 -0.992636 -0.112609 + -0.70527 0.051219 2.07712 0.0129491 -0.999305 -0.0349546 + -0.594742 0.15241 1.74105 -0.0968202 -0.826016 -0.555269 + -0.573582 0.116783 1.81176 -0.0538481 -0.892294 -0.448233 + -0.55155 0.072756 1.88162 0.0649407 -0.921598 -0.382675 + -0.549722 0.058582 1.96297 0.0975851 -0.991879 -0.0815633 + -0.621823 0.208035 1.68151 -0.180549 -0.784136 -0.593745 + -0.450434 0.140476 1.73692 -0.0949033 -0.904495 -0.41579 + -0.429275 0.104849 1.80763 -0.0286014 -0.96104 -0.274927 + -0.42024 0.092654 1.88995 0.0786705 -0.97761 -0.195165 + -0.418412 0.078475 1.97131 0.123636 -0.988986 -0.0813699 + -0.651443 0.258561 1.6246 -0.18797 -0.717513 -0.670703 + -0.475349 0.171371 1.66461 -0.195166 -0.877559 -0.437951 + -0.325697 0.165847 1.65678 -0.00118046 -0.927848 -0.372958 + -0.300782 0.134952 1.72909 0.0606308 -0.935267 -0.348712 + -0.289261 0.11663 1.80043 0.0949077 -0.971575 -0.216876 + -0.504969 0.221988 1.60774 -0.245306 -0.762138 -0.599142 + -0.372127 0.188644 1.6019 -0.0691583 -0.825454 -0.560216 + -0.172667 0.169411 1.65301 0.0849025 -0.946659 -0.310851 + -0.140145 0.15994 1.71921 0.135867 -0.958466 -0.250766 + -0.128624 0.141613 1.79056 0.163049 -0.953283 -0.254294 + -0.411782 0.241094 1.55345 -0.280466 -0.850581 -0.444803 + -0.219097 0.192294 1.59817 0.0299338 -0.97964 -0.198516 + -0.077383 0.188657 1.64287 0.293998 -0.882087 -0.368085 + -0.044861 0.179094 1.70903 0.399989 -0.873307 -0.278107 + -0.291654 0.187008 1.56173 -0.247922 -0.960947 0.122945 + -0.185978 0.19434 1.55923 0.213793 -0.883714 -0.416344 + -0.113421 0.19954 1.59562 0.26995 -0.830748 -0.48681 + -0.023065 0.212553 1.65228 0.253661 -0.949396 -0.18521 + -0.250036 0.204145 1.52465 0.117748 -0.750248 -0.650587 + -0.108752 0.245665 1.55153 0.421344 -0.548282 -0.722396 + -0.059102 0.223437 1.60503 0.443465 -0.633577 -0.63397 + 0.023071 0.212553 1.65228 -0.232932 -0.931158 -0.280512 + -0.023065 0.214616 1.66891 0.49486 -0.868783 -0.0181345 + -0.17281 0.255556 1.517 0.31142 -0.477568 -0.821552 + -0.094316 0.306883 1.5237 0.490621 -0.118273 -0.863309 + -0.066104 0.284205 1.55838 0.622683 -0.326266 -0.711208 + -0.016455 0.26198 1.61187 0.347317 -0.362888 -0.864687 + -0.24888 0.264298 1.48646 0.270889 -0.499393 -0.822937 + -0.170386 0.315624 1.49316 0.336756 -0.410803 -0.847252 + -0.044666 0.359282 1.56194 0.40639 -0.713754 -0.57044 + -0.016455 0.33661 1.59661 0.298498 -0.480461 -0.824655 + -0.224871 0.336079 1.46153 0.290301 -0.375165 -0.880328 + -0.044666 0.372658 1.50717 0.175735 -0.837016 -0.518191 + 0.044666 0.372658 1.50717 -0.244256 -0.774419 -0.583622 + 0.044666 0.359282 1.56194 -0.486855 -0.713556 -0.503796 + 0.016455 0.33661 1.59661 -0.298489 -0.480461 -0.824658 + -0.273213 0.382957 1.43094 0.31134 -0.226667 -0.92287 + -0.099152 0.393027 1.47549 0.170834 -0.570332 -0.803454 + 0.044471 0.592403 1.28836 -0.0305786 -0.70551 -0.70804 + -0.338859 0.425044 1.39604 0.398628 -0.302546 -0.865772 + -0.214573 0.417707 1.45135 0.176207 -0.273014 -0.945735 + -0.171573 0.58754 1.30419 0.0149532 -0.710869 -0.703165 + -0.056152 0.56286 1.32833 -0.04853 -0.678418 -0.733072 + -0.372812 0.484198 1.35418 0.452908 -0.369414 -0.811423 + -0.28022 0.459794 1.41645 0.243815 -0.448458 -0.859907 + -0.222009 0.62574 1.26182 0.00246949 -0.699496 -0.714633 + -0.056152 0.989814 0.876228 -0.0716674 -0.711215 -0.699312 + 0.044471 1.01944 0.836308 -0.251443 -0.770222 -0.586118 + -0.405591 0.540158 1.30665 0.424081 -0.468904 -0.77478 + -0.330656 0.497994 1.37408 0.300375 -0.501479 -0.811353 + -0.280438 0.691045 1.20391 -0.191637 -0.620482 -0.760446 + -0.114581 1.05512 0.818315 0.0988504 -0.841224 -0.531573 + -0.442128 0.582833 1.25434 0.42768 -0.547012 -0.71963 + -0.363435 0.553954 1.32656 0.257175 -0.53453 -0.805071 + -0.28423 0.755168 1.16405 0.0341988 -0.690832 -0.722206 + -0.367227 0.618077 1.2867 0.124615 -0.557305 -0.820903 + -0.380763 0.667435 1.2396 0.311923 -0.630579 -0.710686 + -0.293968 0.803753 1.11209 0.0529057 -0.772095 -0.633301 + -0.455664 0.632193 1.20725 0.328751 -0.596318 -0.732344 + -0.460065 0.688236 1.15398 0.354125 -0.721347 -0.595193 + -0.468769 0.724255 1.09359 0.28326 -0.843411 -0.456533 + -0.3905 0.71602 1.18765 0.350846 -0.698669 -0.623513 + -0.399204 0.752039 1.12726 0.432839 -0.791565 -0.431365 + -0.30355 0.842645 1.03113 0.46646 -0.822832 -0.324598 + -0.468899 0.754491 1.02342 0.212639 -0.948744 -0.233814 + -0.462394 0.767838 0.951901 0.0608051 -0.973128 -0.222091 + -0.419837 0.762911 1.05283 0.40376 -0.89112 -0.207083 + -0.324183 0.853516 0.956702 0.213502 -0.976913 0.00758949 + -0.305268 0.847475 0.879167 0.729367 -0.676845 0.0995277 + -0.124163 1.09392 0.737303 0.388621 -0.907413 -0.159923 + -0.525597 0.769822 0.974665 -0.243091 -0.908593 -0.339655 + -0.436888 0.782429 0.890828 -0.118575 -0.980616 -0.155989 + -0.413333 0.776258 0.981316 0.431472 -0.900803 -0.0488351 + -0.58699 0.789665 0.976497 -0.337743 -0.894964 -0.291494 + -0.500091 0.784326 0.913543 -0.186117 -0.94779 -0.258949 + -0.405465 0.790071 0.823591 -0.165292 -0.977783 -0.128911 + -0.394417 0.770217 0.903782 0.213678 -0.975171 0.0581723 + -0.667167 0.814158 1.00787 -0.381927 -0.881872 -0.276467 + -0.566088 0.802553 0.906574 -0.288792 -0.926904 -0.239682 + -0.479189 0.797301 0.843669 -0.191591 -0.965331 -0.177281 + -0.357763 0.788004 0.755173 0.0895674 -0.964573 -0.248148 + -0.362994 0.777859 0.836545 0.310881 -0.950424 0.00686539 + -0.754306 0.855908 0.997757 -0.475686 -0.857574 -0.195679 + -0.74951 0.875033 0.919634 -0.471692 -0.831234 -0.294206 + -0.662371 0.833281 0.929749 -0.378801 -0.892376 -0.245307 + -0.554784 0.816955 0.832629 -0.302037 -0.918025 -0.256912 + -0.431487 0.795234 0.775251 -0.188452 -0.962806 -0.193622 + -0.821812 0.89354 1.03638 -0.296111 -0.916493 -0.268996 + -0.814715 0.902242 0.955106 -0.670643 -0.703059 -0.236528 + -0.800184 0.935 0.882766 -0.58176 -0.723686 -0.37126 + -0.75087 0.903341 0.841204 -0.535807 -0.785773 -0.308985 + -0.651067 0.847683 0.855804 -0.395862 -0.870878 -0.291316 + -0.838622 0.960135 0.881234 -0.166581 -0.88348 -0.437852 + -0.824091 0.992893 0.808894 0.0105744 -0.763329 -0.645923 + -0.796283 1.05165 0.751717 -0.464893 -0.547181 -0.696037 + -0.801544 0.963308 0.804335 -0.893126 -0.344565 -0.289137 + -0.738356 0.929695 0.768755 -0.514745 -0.696352 -0.500132 + -0.880516 0.967757 0.849032 0.0764414 -0.84054 -0.53633 + -0.864227 1.02491 0.785246 -0.0796097 -0.684865 -0.724308 + -0.836419 1.08358 0.728018 -0.177641 -0.52834 -0.830241 + -0.775011 1.09626 0.700851 0.219363 -0.404125 -0.888011 + -0.780272 1.008 0.75352 -0.739608 -0.361515 -0.567703 + -0.912504 1.00652 0.803684 -0.229923 -0.662436 -0.712961 + -0.925344 1.0704 0.75084 -0.381783 -0.518897 -0.764844 + -0.908048 1.13717 0.722007 -0.292062 -0.270252 -0.917422 + -0.819123 1.15034 0.699185 -0.115459 -0.125561 -0.985344 + -0.735288 1.17414 0.702162 -0.574918 -0.0112688 -0.818134 + -1.02022 1.0493 0.8338 -0.420134 -0.335859 -0.843022 + -1.0018 1.08846 0.824958 -0.490644 -0.316394 -0.811889 + -1.01464 1.15234 0.772115 -0.69356 -0.413412 -0.589971 + -1.00783 1.21606 0.740161 -0.498853 -0.246026 -0.831034 + -0.899154 1.20921 0.706027 -0.175162 -0.039471 -0.983748 + -1.15449 1.25662 0.841506 0.565143 0.0883656 -0.820247 + -1.13607 1.2957 0.832614 -0.18194 -0.360993 -0.914649 + -1.10714 1.32608 0.795797 -0.534369 -0.406833 -0.740903 + -1.10033 1.38979 0.763843 -0.296152 -0.327334 -0.897299 + -1.20934 1.39286 0.775928 0.847249 0.0204626 -0.530802 + -1.237 1.53076 0.60848 0.714429 -0.153688 -0.68262 + -1.24213 1.58922 0.591819 0.565643 -0.179735 -0.804825 + -1.21447 1.45124 0.759218 0.991328 0.0526531 -0.1204 + -1.33145 1.63145 0.543685 -0.543737 -0.839083 -0.0170354 + -1.33145 1.63145 0.543685 0.378768 -0.222766 -0.898282 + -1.21447 1.45124 0.759218 -0.379993 -0.544417 -0.747807 + -1.09286 1.46508 0.743649 0.0027724 -0.227357 -0.973807 + -0.998936 1.2881 0.724181 -0.320784 -0.129488 -0.938259 + -1.18281 1.61753 0.660593 0.275143 -0.564068 -0.77854 + -1.06473 1.5217 0.727976 -0.27238 -0.469576 -0.839826 + -0.970805 1.34472 0.708509 -0.0359701 -0.0326016 -0.998821 + -0.894772 1.27125 0.713167 -0.0207977 0.145216 -0.989181 + -0.7794 1.22822 0.700495 -0.199746 0.0276441 -0.979458 + -1.1712 1.6447 0.623927 -0.24367 -0.832528 -0.497517 + -1.00422 1.52625 0.67009 -0.00280247 -0.480093 -0.877213 + -0.932428 1.43269 0.737749 0.381381 -0.0696506 -0.92179 + -0.856396 1.35913 0.742356 0.168024 0.308933 -0.936124 + -0.775018 1.29018 0.707586 -0.0104874 0.387028 -0.922008 + -1.27714 1.73384 0.366533 -0.374423 -0.912398 -0.165342 + -0.799592 1.37863 0.763184 0.241643 0.326155 -0.91391 + -1.3723 1.80029 0.286041 -0.627611 -0.711864 0.315205 + -1.39582 1.80824 0.253663 -0.46484 -0.795354 -0.389019 + -1.45718 1.86782 0.25627 -0.503789 -0.747313 -0.433266 + -1.41241 1.88004 0.223108 -0.297405 -0.475482 -0.827929 + -1.35106 1.82046 0.2205 -0.0313051 -0.583739 -0.811338 + -1.56568 1.92661 0.343843 -0.551292 -0.823554 -0.133553 + -1.54235 1.92454 0.276228 -0.472824 -0.880222 -0.040572 + -1.52271 1.90991 0.211972 -0.234054 -0.95291 -0.192823 + -1.42618 1.90793 0.206006 -0.0561791 -0.788695 -0.612213 + -1.66635 1.9747 0.290952 -0.535822 -0.817738 0.210239 + -1.64671 1.96007 0.226696 -0.464553 -0.880411 0.095215 + -1.61945 1.92603 0.158052 -0.33048 -0.940355 -0.0807135 + -1.50248 1.93303 0.158131 0.00728966 -0.929354 -0.369119 + -1.40595 1.93105 0.152166 0.15712 -0.870197 -0.466981 + -1.77158 2.02597 0.179548 -0.621402 -0.783101 -0.0247466 + -1.73583 2.03045 0.142996 -0.460332 -0.859672 -0.221492 + -1.80703 2.10814 -0.067965 0.195607 -0.7968 -0.571706 + -2.12832 2.55027 -0.13397 -0.689854 -0.160919 -0.705838 + -2.17394 2.66979 -0.105973 -0.750962 -0.0705465 -0.656566 + -2.25662 2.70147 -0.002845 -0.79765 -0.14991 -0.584194 + -2.18378 2.5777 -0.062271 -0.804477 -0.150715 -0.574545 + -2.26645 2.60929 0.040805 -0.813158 -0.171333 -0.556254 + -2.2479 2.5128 0.042531 -0.820598 -0.153481 -0.550511 + -2.37571 3.04191 0.113286 -0.832983 -0.0400175 -0.55185 + -2.38088 3.25584 0.119155 -0.810771 0.0473385 -0.583446 + -2.25132 3.25444 -0.035226 -0.721731 0.0259835 -0.691686 + -2.43932 3.14098 0.203898 -0.84968 -0.0239841 -0.526753 + -2.44382 3.3279 0.219741 -0.842178 0.0874708 -0.532058 + -2.28491 3.35096 0.002008 -0.765119 0.0445854 -0.642344 + -2.17411 3.43345 -0.107079 -0.704157 0.035426 -0.70916 + -2.14052 3.33694 -0.144314 -0.664055 0.0142197 -0.747548 + -2.50785 3.21052 0.319844 -0.873912 0.00319087 -0.486073 + -2.51801 3.37872 0.359921 -0.851918 0.0551105 -0.520766 + -2.44711 3.46454 0.261678 -0.830247 0.0761797 -0.552166 + -2.34785 3.42302 0.102595 -0.819047 0.111565 -0.562775 + -2.26119 3.51529 -0.00802 -0.771448 0.0498969 -0.634333 + -2.58204 3.26134 0.460024 -0.873316 -0.00277948 -0.487147 + -2.59962 3.50006 0.490758 -0.846954 0.00289049 -0.531659 + -2.52873 3.58587 0.392516 -0.832929 -0.00277913 -0.553372 + -2.47465 3.68253 0.300103 -0.840098 -0.0532368 -0.539816 + -2.36046 3.55681 0.151055 -0.830931 0.00181216 -0.556373 + -2.65306 3.40136 0.58571 -0.871641 -0.0167948 -0.489857 + -2.66362 3.68599 0.593915 -0.867821 -0.00513404 -0.49685 + -2.61641 3.79249 0.510856 -0.857105 -0.0178233 -0.514833 + -2.56234 3.88914 0.418443 -0.853785 -0.0404341 -0.519052 + -2.71706 3.58728 0.688875 -0.893354 -0.0102524 -0.449236 + -2.73856 3.90859 0.73135 -0.907438 2.0857e-005 -0.420185 + -2.69136 4.01509 0.648292 -0.887157 -0.00997291 -0.461361 + -2.64914 4.11155 0.555025 -0.884528 -0.0275563 -0.465673 + -2.51631 3.99197 0.330737 -0.859935 -0.0475704 -0.508182 + -2.76012 3.49468 0.787875 -0.91455 -0.016034 -0.404154 + -2.81888 3.72601 0.929804 -0.940141 0.00992018 -0.340642 + -2.77582 3.81861 0.830804 -0.928393 0.00401201 -0.371577 + -2.80241 4.17046 0.902182 -0.94793 0.00487846 -0.318442 + -2.77019 4.2544 0.796595 -0.932733 0.00112957 -0.360565 + -2.85327 3.64454 1.03711 -0.947445 0.0200021 -0.319293 + -2.86699 4.00351 1.11354 -0.965229 0.0167854 -0.260867 + -2.83967 4.08039 1.00158 -0.956757 0.00987816 -0.29072 + -2.83456 4.40331 1.01987 -0.964107 0.0603643 -0.258562 + -2.90137 3.92205 1.22085 -0.96863 0.0299047 -0.246702 + -2.89466 4.25686 1.24234 -0.975151 0.0444389 -0.217036 + -2.86733 4.33374 1.13038 -0.972457 0.0521519 -0.227171 + -2.92656 3.84275 1.33099 -0.972578 0.0410079 -0.228934 + -2.9469 4.10375 1.46152 -0.978346 0.0458449 -0.201833 + -2.92172 4.18305 1.35138 -0.978451 0.0445725 -0.201611 + -2.89572 4.50276 1.32343 -0.974935 0.149329 -0.164933 + -2.8645 4.56131 1.20821 -0.969388 0.161899 -0.184596 + -2.95881 3.75803 1.43673 -0.973203 0.0538567 -0.22355 + -2.97224 4.01901 1.5641 -0.979032 0.0505875 -0.197327 + -2.94816 4.34934 1.53556 -0.981947 0.124941 -0.14202 + -2.92278 4.42895 1.43246 -0.980037 0.133249 -0.147557 + -2.85402 4.73817 1.43067 -0.949257 0.295463 -0.10776 + -2.98331 3.6646 1.53557 -0.977377 0.0574731 -0.203548 + -2.99674 3.92558 1.66294 -0.97907 0.0488919 -0.197565 + -2.9735 4.26459 1.63814 -0.981855 0.125075 -0.142537 + -2.90846 4.59979 1.64576 -0.967813 0.247346 -0.046447 + -2.88307 4.67932 1.54261 -0.961713 0.263951 -0.0737469 + -3.01117 3.57084 1.63576 -0.979552 0.0589202 -0.192371 + -3.0208 3.83789 1.76322 -0.981289 0.0477542 -0.186525 + -2.99948 4.17727 1.73478 -0.982301 0.120258 -0.143604 + -2.95514 4.4525 1.85547 -0.970935 0.235756 -0.0412756 + -2.92916 4.53973 1.75878 -0.96645 0.254427 -0.0352258 + -3.03359 3.47522 1.73278 -0.985593 0.0485326 -0.162024 + -3.04323 3.74227 1.86023 -0.985333 0.0410416 -0.165636 + -3.02354 4.08968 1.8351 -0.98447 0.117686 -0.130267 + -3.0531 3.37906 1.83273 -0.990131 0.0334703 -0.136087 + -3.06252 3.66391 1.96755 -0.990077 0.0307512 -0.137123 + -3.04636 4.01302 1.94028 -0.98691 0.115826 -0.112223 + -2.99596 4.31437 2.09793 -0.971905 0.23494 -0.0142546 + -2.97314 4.39094 1.99271 -0.970877 0.237901 -0.0283056 + -3.06928 3.30294 1.94597 -0.995183 0.00961897 -0.097564 + -3.0787 3.58771 2.08074 -0.995121 0.0150453 -0.0975064 + -3.06565 3.93467 2.04759 -0.990221 0.104895 -0.0919771 + -3.07647 3.21742 2.04991 -0.997908 -0.0162816 -0.0625671 + -3.08895 3.52185 2.21422 -0.998323 -0.000920435 -0.0578908 + -3.0818 3.87102 2.16324 -0.993673 0.0951125 -0.0597268 + -3.0344 4.15634 2.33024 -0.974326 0.223808 0.0244825 + -3.01826 4.2199 2.21454 -0.973043 0.230585 -0.00422352 + -3.08109 3.14025 2.16597 -0.99861 -0.0419668 -0.0319002 + -3.09356 3.44468 2.33028 -0.999739 -0.0187587 -0.0130365 + -3.09204 3.80515 2.29671 -0.996723 0.0797864 -0.0133175 + -3.05381 2.77414 2.08209 -0.996405 -0.084485 -0.00629648 + -3.0788 3.08234 2.28906 -0.997644 -0.0664127 0.0172218 + -3.08929 3.3725 2.4613 -0.998404 -0.0420702 0.037683 + -3.09588 3.72791 2.47051 -0.997261 0.0645251 0.0361433 + -3.06812 3.01108 2.40629 -0.994893 -0.0861612 0.0525723 + -3.07861 3.30131 2.57859 -0.994863 -0.05994 0.0815805 + -3.09161 3.65564 2.60148 -0.995924 0.0343002 0.0834155 + -3.04793 4.00287 2.62426 -0.976937 0.187824 0.101568 + -3.04409 4.0802 2.45051 -0.977306 0.203266 0.059628 + -3.03966 2.71913 2.35896 -0.992734 -0.104479 0.0596978 + -3.05657 2.97725 2.54149 -0.990005 -0.0999076 0.0995394 + -3.0629 3.26618 2.70544 -0.989233 -0.0753762 0.125446 + -3.07773 3.62876 2.73185 -0.99218 0.0308193 0.120949 + -3.02916 2.70248 2.502 -0.985016 -0.130322 0.112954 + -3.03511 2.96217 2.67901 -0.981701 -0.116037 0.150994 + -3.04144 3.2511 2.84297 -0.98389 -0.0914496 0.153614 + -3.06202 3.59362 2.8587 -0.990392 0.018643 0.137027 + -3.02245 3.93634 2.89569 -0.971203 0.17576 0.160849 + -2.99042 2.45789 2.48404 -0.965662 -0.205132 0.159428 + -3.00339 2.67289 2.63705 -0.970397 -0.162974 0.178237 + -3.00934 2.93258 2.81406 -0.97263 -0.138556 0.186526 + -3.01648 3.21906 2.97146 -0.974828 -0.114358 0.191399 + -3.04423 3.55852 2.9869 -0.986437 0.00130627 0.164133 + -2.93387 2.23435 2.47923 -0.94443 -0.28361 0.166182 + -2.9537 2.39974 2.60716 -0.950611 -0.233367 0.204643 + -2.96667 2.61474 2.76017 -0.954502 -0.196147 0.224615 + -2.97642 2.9104 2.94847 -0.956968 -0.16692 0.237381 + -2.98356 3.19688 3.10587 -0.963389 -0.139286 0.229087 + -2.90194 2.0281 2.26247 -0.92667 -0.353867 0.126728 + -2.83818 1.92807 2.39192 -0.922833 -0.360306 0.136231 + -2.88684 2.14071 2.57242 -0.931236 -0.309609 0.192202 + -2.90666 2.30602 2.7003 -0.934106 -0.263819 0.240509 + -2.92343 2.55214 2.87299 -0.93494 -0.22638 0.273201 + -2.76286 1.69898 2.15471 -0.925325 -0.372706 0.0697392 + -2.70903 1.55131 2.28208 -0.92923 -0.35873 0.0885699 + -2.78184 1.79753 2.44243 -0.922195 -0.356699 0.149407 + -2.83049 2.01008 2.62288 -0.920057 -0.332534 0.207163 + -2.72062 1.56338 1.99899 -0.923537 -0.378857 0.0595535 + -2.66678 1.41571 2.12635 -0.930263 -0.361337 0.0636041 + -2.59055 1.28583 2.30111 -0.882091 -0.442249 0.162268 + -2.63475 1.40743 2.3743 -0.892844 -0.411875 0.182176 + -2.70756 1.65364 2.53465 -0.904637 -0.381123 0.190729 + -2.78036 1.65222 1.87671 -0.844322 -0.508604 0.168649 + -2.65077 1.36379 2.06668 -0.930127 -0.363955 0.0489987 + -2.57454 1.23391 2.24143 -0.869265 -0.472003 0.146941 + -2.62574 1.29734 2.02858 -0.905831 -0.423349 0.015689 + -2.57253 1.20236 2.14269 -0.874843 -0.477347 0.0824048 + -2.49688 1.14894 2.35241 -0.797846 -0.577688 0.172392 + -2.47789 1.15753 2.47854 -0.801425 -0.551778 0.230782 + -2.52209 1.27912 2.55174 -0.844095 -0.454112 0.285106 + -2.61058 1.2738 1.93234 -0.91332 -0.407003 0.013949 + -2.55736 1.17874 2.0464 -0.89168 -0.449123 0.0565332 + -2.49804 1.0787 2.15467 -0.845913 -0.49919 0.187725 + -2.49487 1.11739 2.25366 -0.811537 -0.547891 0.203034 + -2.3746 1.0412 2.47782 -0.737199 -0.640993 0.213693 + -2.54855 1.13661 1.98176 -0.923823 -0.352456 0.149419 + -2.48922 1.03649 2.08999 -0.867064 -0.450973 0.211715 + -2.3982 0.9821 2.26839 -0.763188 -0.589093 0.265543 + -2.39503 1.02079 2.36737 -0.778268 -0.575211 0.251857 + -2.50013 1.00485 1.98979 -0.886277 -0.414869 0.205907 + -2.42456 0.923891 2.07661 -0.818905 -0.496968 0.287082 + -2.41365 0.955533 2.1768 -0.774064 -0.567695 0.280263 + -2.26307 0.891843 2.39772 -0.675971 -0.708013 0.204404 + -2.24738 0.891026 2.48613 -0.692788 -0.696211 0.187975 + -2.44299 0.898732 1.98359 -0.831434 -0.499844 0.242637 + -2.31965 0.836749 2.22674 -0.825006 -0.373394 0.424195 + -2.27852 0.865364 2.30618 -0.762481 -0.50065 0.409844 + -2.17378 0.795248 2.41202 -0.706789 -0.56219 0.429408 + -2.14557 0.806572 2.49401 -0.640421 -0.739745 0.206492 + -2.33809 0.811585 2.13373 -0.774895 -0.582227 0.246066 + -2.24336 0.743201 2.25177 -0.697289 -0.652148 0.297474 + -2.21492 0.766726 2.33263 -0.734153 -0.481645 0.478578 + -2.08783 0.74786 2.47611 -0.730279 -0.512078 0.452181 + -2.05961 0.759091 2.55805 -0.647539 -0.745887 0.156029 + -2.2558 0.73119 2.16118 -0.735008 -0.629485 0.252016 + -2.15809 0.695136 2.32363 -0.73305 -0.570873 0.369785 + -2.12965 0.71866 2.40448 -0.748755 -0.436536 0.498801 + -2.04338 0.641992 2.48507 -0.808803 -0.352878 0.470442 + -2.00156 0.671104 2.55665 -0.828498 -0.321208 0.458713 + -2.26814 0.703118 2.0762 -0.789196 -0.499355 0.357509 + -2.17751 0.671424 2.24169 -0.752863 -0.576913 0.316809 + -2.09016 0.602344 2.32814 -0.763927 -0.578689 0.285542 + -2.07074 0.626055 2.41008 -0.79726 -0.480614 0.365221 + -2.28774 0.657029 1.99443 -0.73705 -0.571119 0.361359 + -2.18985 0.643355 2.15671 -0.711715 -0.641943 0.285256 + -2.10681 0.59144 2.24863 -0.729728 -0.642076 0.235023 + -1.99277 0.524004 2.43263 -0.735676 -0.640561 0.220141 + -1.97127 0.522689 2.50491 -0.780389 -0.54591 0.304918 + -2.29048 0.621709 1.9102 -0.667492 -0.702247 0.247594 + -2.18733 0.613612 2.07243 -0.620495 -0.73439 0.27506 + -2.1043 0.561692 2.16436 -0.701603 -0.679374 0.214952 + -2.00942 0.513183 2.35318 -0.71777 -0.668456 0.194866 + -2.28961 0.596452 1.82015 -0.687799 -0.695352 0.208371 + -2.19008 0.578291 1.98821 -0.628913 -0.714082 0.307498 + -2.11079 0.542994 2.08414 -0.708206 -0.657741 0.256555 + -2.03023 0.518534 2.27931 -0.65453 -0.739604 0.156767 + -2.28026 0.562414 1.73771 -0.679328 -0.714799 0.166061 + -2.18691 0.539241 1.90664 -0.6342 -0.724581 0.269764 + -2.10762 0.50394 2.00259 -0.640231 -0.724305 0.255904 + -2.03672 0.499833 2.1991 -0.65951 -0.726239 0.193967 + -2.24905 0.521653 1.65891 -0.684254 -0.716505 0.135709 + -2.17756 0.505198 1.82421 -0.630668 -0.737194 0.242493 + -2.10575 0.4792 1.92564 -0.631569 -0.735123 0.246405 + -2.05096 0.495578 2.12347 -0.484012 -0.859925 0.162056 + -2.33088 0.588432 1.51684 -0.744028 -0.663789 0.0762042 + -2.22442 0.481562 1.57934 -0.694638 -0.708134 0.126589 + -2.17066 0.469328 1.74214 -0.635417 -0.740743 0.218051 + -2.09886 0.44333 1.84357 -0.486876 -0.838458 0.244825 + -2.0491 0.470745 2.04648 -0.495894 -0.846812 0.19235 + -2.30903 0.550103 1.42763 -0.750388 -0.655746 0.0831516 + -2.18976 0.4357 1.50058 -0.672905 -0.732342 0.104283 + -2.14603 0.429243 1.66256 -0.598331 -0.778142 0.191037 + -2.08491 0.41771 1.76634 -0.472304 -0.848543 0.238546 + -2.04536 0.459435 1.97107 -0.214931 -0.962309 0.16663 + -2.27437 0.504326 1.34892 -0.723764 -0.685416 0.0798187 + -2.16101 0.400339 1.41963 -0.643431 -0.761764 0.0755844 + -2.12044 0.391848 1.58513 -0.560477 -0.810525 0.170045 + -2.05932 0.380315 1.68891 -0.289083 -0.92232 0.256431 + -2.03142 0.433901 1.89389 -0.251125 -0.944618 0.211263 + -2.3602 0.564961 1.02569 -0.78062 -0.621002 0.0706385 + -2.25227 0.468723 1.25478 -0.697441 -0.713735 0.0644751 + -2.13629 0.374728 1.33399 -0.611773 -0.79012 0.037991 + -2.09168 0.356484 1.50419 -0.52082 -0.840147 0.151325 + -2.03896 0.35597 1.61188 -0.262853 -0.931513 0.251379 + -2.41926 0.62912 0.887167 -0.834734 -0.550042 0.0259435 + -2.33831 0.524184 0.926321 -0.72016 -0.693218 0.0286187 + -2.22755 0.443112 1.16914 -0.636467 -0.77051 0.0349839 + -2.11923 0.35999 1.24832 -0.541833 -0.839667 -0.0370968 + -2.06554 0.327366 1.42382 -0.458538 -0.882794 0.102062 + -2.39736 0.588431 0.787844 -0.834602 -0.523427 -0.171649 + -2.30226 0.493857 0.894251 -0.593066 -0.804758 -0.0252384 + -2.19151 0.412783 1.13707 -0.558935 -0.828683 -0.0295925 + -2.10625 0.362893 1.15849 -0.572301 -0.81804 -0.0572907 + -2.04848 0.312717 1.33819 -0.402113 -0.914284 0.0488823 + -2.36268 0.60947 0.695201 -0.835358 -0.403851 -0.372937 + -2.35739 0.555668 0.72119 -0.776904 -0.546223 -0.313146 + -2.3056 0.499838 0.79589 -0.61471 -0.786615 -0.0580366 + -2.17853 0.415688 1.04724 -0.503147 -0.861923 -0.0627045 + -2.33391 0.590818 0.650907 -0.78666 -0.467235 -0.403555 + -2.28997 0.514976 0.652872 -0.713512 -0.619832 -0.326663 + -2.23818 0.459146 0.727572 -0.593176 -0.802481 -0.0645463 + -2.18187 0.421669 0.948884 -0.550253 -0.834858 -0.0153152 + -2.2873 0.572308 0.595769 -0.741835 -0.45959 -0.48832 + -2.24336 0.496377 0.597683 -0.680646 -0.579164 -0.448654 + -2.19667 0.44916 0.60447 -0.539142 -0.767248 -0.347357 + -2.20274 0.435055 0.681698 -0.580149 -0.805973 -0.117619 + -0.713836 1.20864 0.668001 -0.550473 0.327647 -0.767872 + -0.76307 1.05071 0.687555 -0.865885 -0.130153 -0.483015 + -0.721154 0.972399 0.702789 -0.591722 -0.587199 -0.552325 + -0.718215 1.30967 0.728414 0.224483 0.627249 -0.745766 + -0.687688 1.26297 0.695711 0.126179 0.626822 -0.768878 + -0.703623 1.13731 0.60416 -0.764048 0.101558 -0.637116 + -0.741618 1.08512 0.653345 -0.824341 -0.0358251 -0.564958 + -0.667994 1.35128 0.798747 -0.0132149 0.405154 -0.914153 + -0.637467 1.30458 0.766045 -0.553887 0.636284 -0.536984 + -0.677474 1.19172 0.63192 -0.755109 0.497765 -0.426661 + -0.793653 1.40654 0.767637 0.0632094 -0.107809 -0.99216 + -0.662055 1.37911 0.803149 -0.456809 -0.424754 -0.781607 + -0.631551 1.33229 0.770247 -0.955349 -0.0691095 -0.287285 + -0.671558 1.21943 0.636123 -0.987962 0.15401 -0.01459 + -0.664457 1.19884 0.575777 -0.801503 0.195911 -0.564988 + -0.831875 1.44489 0.765211 0.345372 0.232124 -0.909305 + -0.694071 1.41874 0.7437 -0.588084 -0.77514 -0.230902 + -0.663568 1.37192 0.710797 -0.897815 -0.419413 0.134243 + -0.656467 1.35125 0.650401 -0.909617 0.1083 -0.401084 + -0.814632 1.53065 0.792667 -0.0193719 -0.0446855 -0.998813 + -0.732294 1.45709 0.741273 -0.556268 -0.16247 -0.814966 + -0.797789 1.57132 0.771423 -0.486179 -0.653187 -0.580497 + -0.715451 1.49768 0.71998 -0.61024 -0.151298 -0.777635 + -0.649712 1.43033 0.669226 -0.703279 0.12038 -0.700647 + -0.60316 1.24951 0.528621 -0.626123 0.163761 -0.762333 + -0.939812 1.7023 0.659365 0.0514114 -0.616467 -0.7857 + -0.097276 1.11213 0.652366 0.640076 -0.765317 -0.0677761 + -0.05827 1.15812 0.604717 0.522918 -0.597341 -0.608063 + -0.069667 1.21195 0.547068 0.540397 -0.65274 -0.530944 + -0.037458 1.25754 0.527104 0.277973 -0.849107 -0.449164 + 0.037461 1.25754 0.527104 -0.287828 -0.866197 -0.408483 + 0.069674 1.21195 0.547068 -0.617967 -0.651894 -0.439489 + 0.106297 0.963787 0.855306 -0.302552 -0.778666 -0.549675 + 0.159893 0.617168 1.26427 -0.00018195 -0.723562 -0.690259 + -0.278381 0.865595 0.794182 0.793877 -0.57517 0.19733 + -0.196947 0.932788 0.689999 0.825396 -0.522807 0.213058 + -0.157942 0.978861 0.642399 0.827801 -0.522574 0.204111 + -0.241614 0.889583 0.738233 0.791228 -0.560691 0.244097 + -0.288895 0.827734 0.717356 0.635839 -0.771518 -0.0216514 + -0.244228 0.870942 0.669121 0.68001 -0.727993 -0.0872503 + -0.219008 0.907592 0.615839 0.652838 -0.737088 -0.174652 + -0.121262 1.0174 0.600437 0.971148 -0.221631 -0.0880376 + -0.120096 1.10255 0.623764 0.401105 -0.241361 -0.883663 + -0.326227 0.801761 0.780547 0.626899 -0.775722 0.0724724 + -0.320431 0.813893 0.691933 0.276914 -0.917187 -0.286508 + -0.309675 0.843907 0.623746 0.234508 -0.872709 -0.428234 + -0.284455 0.880559 0.570464 0.325062 -0.838464 -0.437394 + -0.405103 0.809844 0.705145 -0.138438 -0.935576 -0.324859 + -0.394347 0.839772 0.636909 -0.157283 -0.878174 -0.451743 + -0.376098 0.87127 0.570549 -0.117394 -0.848915 -0.515327 + -0.268356 0.921192 0.510285 0.314855 -0.672168 -0.670117 + -0.182329 0.946137 0.573879 0.682998 -0.663204 -0.306064 + -0.5284 0.831478 0.762472 -0.344344 -0.878752 -0.330487 + -0.50752 0.852181 0.689413 -0.351198 -0.839542 -0.414523 + -0.489271 0.88368 0.623056 -0.383332 -0.760798 -0.523682 + -0.464 0.918458 0.559421 -0.396583 -0.667741 -0.629955 + -0.359999 0.911817 0.510322 -0.120931 -0.733906 -0.668399 + -0.638553 0.874038 0.783357 -0.419054 -0.821211 -0.387307 + -0.617673 0.894655 0.710248 -0.459057 -0.761781 -0.457118 + -0.593 0.932484 0.647928 -0.475582 -0.645681 -0.597426 + -0.56773 0.967259 0.584292 -0.516091 -0.555809 -0.651711 + -0.44088 0.967001 0.506741 -0.420403 -0.499455 -0.7575 + -0.696481 1.01014 0.64042 -0.563423 -0.467338 -0.681285 + -0.658486 1.06232 0.591236 -0.555324 -0.366803 -0.746371 + -0.623498 1.11123 0.54193 -0.55144 -0.212606 -0.806668 + -0.532742 1.01616 0.534987 -0.477022 -0.399104 -0.783049 + -0.562201 1.16198 0.494825 -0.467206 -0.0966409 -0.878851 + -0.508158 1.07115 0.493348 -0.449762 -0.267959 -0.852005 + -0.416295 1.0219 0.465053 -0.416386 -0.309639 -0.854837 + -0.336879 0.960448 0.457692 -0.0367639 -0.638476 -0.768764 + -0.248564 0.979545 0.481016 0.439468 -0.591959 -0.675613 + -0.568156 1.31347 0.519837 -0.248861 0.375811 -0.892656 + -0.520369 1.21784 0.473467 -0.0513135 0.205582 -0.977294 + -0.466326 1.12701 0.471992 -0.371089 -0.0715025 -0.92584 + -0.390225 1.08754 0.441956 -0.417755 -0.14868 -0.896312 + -0.312808 1.02384 0.415092 -0.0392679 -0.411501 -0.910563 + -0.596406 1.32859 0.547445 -0.713339 0.233785 -0.660675 + -0.489027 1.27485 0.512732 -0.189612 0.389764 -0.901183 + -0.637336 1.51437 0.650661 -0.734374 -0.0989793 -0.671489 + -0.703075 1.58181 0.701465 -0.470371 -0.510864 -0.719561 + -0.830301 1.58874 0.707658 -0.532356 -0.805434 -0.260524 + -0.972324 1.71963 0.59555 -0.71085 -0.698134 0.0854449 + -0.939812 1.7023 0.659365 -0.746828 -0.631325 0.208988 + -0.434308 1.19784 0.443518 -0.520866 0.0958387 -0.848242 + -0.358207 1.15828 0.413431 -0.286541 0.00440085 -0.958058 + -0.286738 1.0894 0.391946 0.0889776 -0.153882 -0.984075 + -0.194616 1.1096 0.436545 0.700968 -0.218571 -0.678875 + -0.224494 1.04294 0.438416 0.561182 -0.37126 -0.739757 + -0.319542 1.22421 0.413041 -0.147284 0.193216 -0.970039 + -0.258145 1.16068 0.410479 0.18777 0.0261342 -0.981865 + -0.166023 1.18089 0.455079 0.656369 -0.481118 -0.581124 + -0.131493 1.15639 0.566116 0.652731 -0.576033 -0.492066 + -0.161371 1.08963 0.567937 0.866261 -0.13673 -0.480518 + -0.21948 1.22669 0.410138 0.0613259 -0.0554027 -0.996579 + -0.133813 1.22648 0.435115 0.465124 -0.553232 -0.691082 + -0.160933 1.28092 0.40182 0.0291503 0.0203809 -0.999367 + -0.075267 1.2807 0.426797 0.352949 -0.536901 -0.766267 + -0.142705 1.32643 0.422794 -0.375198 0.498522 -0.781475 + -0.103364 1.35168 0.413848 -0.347091 0.0392415 -0.93701 + -0.058157 1.3369 0.399255 0.187623 -0.214952 -0.958433 + -0.037458 1.26966 0.460324 0.0588953 -0.872721 -0.484653 + 0.037461 1.26966 0.460324 -0.29007 -0.794245 -0.533886 + -0.063033 1.41611 0.399059 -0.142519 -0.196359 -0.970119 + -0.020348 1.32586 0.432783 0.231741 -0.401437 -0.886084 + 0.020343 1.32585 0.43279 -0.252983 -0.437843 -0.862724 + 0.07527 1.2807 0.426797 -0.330844 -0.437348 -0.836223 + 0.133816 1.22648 0.435115 -0.443435 -0.563743 -0.696821 + -0.020348 1.3982 0.403079 -0.0271822 -0.33499 -0.94183 + 0.020343 1.3982 0.403087 -0.0815778 -0.250729 -0.964614 + 0.058152 1.3369 0.399263 -0.100473 -0.294318 -0.950412 + 0.103371 1.35168 0.413852 0.347001 0.0392828 -0.937042 + 0.160933 1.28092 0.40182 -0.0430296 0.0255672 -0.998747 + 0.022033 1.47459 0.381164 0.0315029 -0.376409 -0.925918 + 0.063028 1.41611 0.399067 0.169006 -0.152092 -0.973809 + 0.108247 1.43089 0.413656 0.531612 -0.145584 -0.834382 + 0.064718 1.49242 0.377094 0.317126 -0.287932 -0.903618 + 0.124814 1.48874 0.411456 0.582193 -0.194188 -0.789521 + 0.181837 1.41074 0.486163 0.522952 0.0773544 -0.848844 + 0.221193 1.38548 0.495113 0.176339 0.438415 -0.881304 + 0.142727 1.32642 0.422802 0.375128 0.498526 -0.781505 + 0.198404 1.46867 0.484013 0.565244 -0.297728 -0.769323 + 0.283988 1.51739 0.52664 0.324128 -0.22821 -0.918075 + 0.293227 1.44316 0.523606 0.0526546 0.28335 -0.95757 + 0.265505 1.32973 0.449478 0.101272 0.515591 -0.850829 + 0.283711 1.28422 0.428496 0.193634 0.407203 -0.892576 + 0.210234 1.5283 0.447544 0.45081 -0.475953 -0.755142 + 0.295818 1.5771 0.490221 0.573441 -0.301096 -0.76191 + 0.394222 1.62731 0.522844 0.282031 0.0675666 -0.957023 + 0.403461 1.553 0.51976 0.345415 -0.0507179 -0.937078 + 0.280894 1.6451 0.472234 0.739166 -0.170683 -0.651538 + 0.348007 1.70073 0.530481 0.400072 0.060822 -0.914463 + 0.400693 1.81364 0.551913 0.370849 0.089959 -0.924326 + 0.446908 1.74023 0.544275 0.466976 0.122535 -0.875739 + 0.474947 1.67246 0.56804 0.728444 -0.0387595 -0.684008 + 0.333083 1.76874 0.512495 0.694432 -0.0192365 -0.719301 + 0.378274 1.89349 0.544616 0.438766 -0.0111476 -0.898532 + 0.456381 1.94003 0.566206 0.123192 -0.129377 -0.983913 + 0.465267 1.85968 0.587968 0.345129 -0.159922 -0.92483 + 0.493306 1.79201 0.611783 0.563225 -0.139724 -0.814404 + 0.308398 1.84823 0.493807 0.831084 -0.0086162 -0.556081 + 0.353588 1.97298 0.525929 0.663916 -0.133579 -0.73578 + 0.433961 2.01996 0.558959 0.0721653 -0.0444385 -0.996402 + 0.535835 1.97165 0.553246 -0.334563 -0.292087 -0.895965 + 0.363007 2.05692 0.504145 0.824621 -0.263804 -0.500408 + 0.427419 2.11128 0.562997 0.246753 -0.158179 -0.956082 + 0.532117 2.13554 0.526962 -0.490472 -0.188304 -0.850869 + 0.538659 2.04423 0.522924 -0.400579 -0.128175 -0.907253 + 0.436838 2.19521 0.541213 0.324947 -0.561984 -0.760647 + 0.547218 2.19947 0.491443 -0.535375 -0.40146 -0.743104 + 0.675615 2.02754 0.398427 -0.688805 -0.400184 -0.604484 + 0.670734 1.96894 0.458334 -0.572778 -0.40382 -0.71334 + 0.667909 1.89627 0.488606 -0.493779 -0.352755 -0.794825 + 0.579077 2.25846 0.430067 -0.509442 -0.476457 -0.71656 + 0.690716 2.09138 0.362858 -0.705055 -0.124379 -0.698159 + 0.798104 2.04702 0.249884 -0.583926 -0.481146 -0.653857 + 0.815225 2.03678 0.260635 -0.217635 -0.802835 -0.555059 + 0.905681 2.11917 0.074324 -0.677792 0.725881 -0.117028 + -0.157942 0.978861 0.642399 -0.231013 -0.0754603 -0.97002 + -0.162537 1.00449 0.54461 0.784285 -0.254138 -0.565959 + -2.09165 3.45262 -1.04988 -0.0543093 -0.45732 0.887643 + -2.18006 3.48536 -1.04378 -0.0209092 -0.388401 0.921253 + -2.2058 3.68529 -0.95188 -0.2531 -0.394922 0.883163 + -1.97364 3.439 -1.04168 -0.297213 -0.583841 0.755509 + -2.1174 3.65256 -0.957993 -0.258198 -0.660296 0.705225 + -1.86176 3.43631 -0.971036 -0.505425 -0.593745 0.626109 + -2.00552 3.64988 -0.887349 -0.44918 -0.5374 0.71375 + -2.07039 3.82545 -0.818837 -0.506927 -0.317155 0.801522 + -2.14037 3.9084 -0.844915 -0.519915 -0.226356 0.823682 + -2.20152 3.88538 -0.885033 -0.363834 -0.250587 0.897124 + -1.79986 3.5921 -0.782469 -0.625921 -0.509609 0.590357 + -1.86474 3.76767 -0.713957 -0.683507 -0.470865 0.557767 + -1.97612 3.9831 -0.709897 -0.76075 -0.338078 0.554042 + -2.04609 4.06606 -0.735983 -0.608563 -0.297325 0.735697 + -1.58849 3.30425 -0.777901 -0.914295 -0.357266 0.190855 + -1.70671 3.54272 -0.695131 -0.871353 -0.468831 0.144714 + -1.77531 3.6815 -0.637106 -0.88567 -0.455344 0.090835 + -1.92994 3.90122 -0.673683 -0.853646 -0.465011 0.234633 + -1.82364 3.76664 -0.537178 -0.861739 -0.387494 -0.327496 + -1.84051 3.81505 -0.596833 -0.856313 -0.512053 0.0672991 + -1.94943 4.01591 -0.560924 -0.910745 -0.404165 -0.0848185 + -1.99561 4.09788 -0.597096 -0.909061 -0.406266 0.0925032 + -2.03906 4.19652 -0.66155 -0.785931 -0.500045 0.363687 + -1.8582 3.6928 -0.453484 -0.761729 -0.209058 -0.61324 + -1.93577 3.88299 -0.4305 -0.791942 -0.415927 -0.447026 + -1.95263 3.9314 -0.490156 -0.828293 -0.436161 -0.351701 + -2.03259 4.06293 -0.415175 -0.885005 -0.287457 -0.366244 + -2.03936 4.18336 -0.499351 -0.906514 -0.379454 -0.185058 + -1.93562 3.58438 -0.343901 -0.717892 -0.114539 -0.686668 + -2.05642 3.6944 -0.238661 -0.731413 -0.124679 -0.67044 + -1.979 3.80282 -0.348244 -0.727421 -0.218734 -0.650396 + -2.10697 3.8933 -0.246166 -0.759824 -0.172866 -0.626725 + -2.0358 3.97843 -0.344406 -0.821546 -0.21935 -0.526259 + -2.00939 3.36899 -0.249225 -0.661383 -0.0449468 -0.7487 + -2.0522 3.5238 -0.228167 -0.703479 -0.0532264 -0.70872 + -2.13928 3.60563 -0.129109 -0.740915 -0.0352635 -0.670672 + -2.2237 3.73838 -0.061223 -0.757445 -0.109574 -0.643639 + -2.15021 3.81314 -0.163911 -0.761943 -0.159675 -0.627652 + -2.30656 3.64969 0.04838 -0.8004 -0.0724007 -0.595079 + -2.36788 3.86899 0.100744 -0.817208 -0.0760076 -0.571309 + -2.29439 3.94375 -0.001943 -0.790675 -0.0926866 -0.605179 + -2.24075 4.03992 -0.09271 -0.79328 -0.097494 -0.601 + -2.42075 3.77541 0.197428 -0.843604 -0.0850079 -0.530194 + -2.46344 4.08564 0.234104 -0.870739 -0.0700197 -0.486734 + -2.42688 4.18807 0.142888 -0.852323 -0.075422 -0.517549 + -2.37324 4.28423 0.052122 -0.834333 -0.0749794 -0.546139 + -2.55816 4.3135 0.378037 -0.886111 -0.0396392 -0.461775 + -2.5216 4.41592 0.286831 -0.893206 -0.0227285 -0.449073 + -2.47784 4.52184 0.207375 -0.884018 -0.0024716 -0.467446 + -2.34308 4.40835 -0.01565 -0.845198 -0.0911075 -0.52663 + -2.16957 4.12504 -0.190949 -0.795887 -0.110816 -0.595218 + -2.60312 4.21438 0.46731 -0.874776 -0.0297995 -0.483611 + -2.64047 4.54202 0.519619 -0.88904 0.0479407 -0.455313 + -2.586 4.64014 0.436469 -0.893476 0.0723779 -0.443241 + -2.54224 4.74606 0.357013 -0.898797 0.10193 -0.426349 + -2.68542 4.4429 0.6089 -0.906215 0.0169883 -0.422476 + -2.66822 4.75083 0.630958 -0.911901 0.157781 -0.37887 + -2.61376 4.84895 0.547808 -0.900977 0.177215 -0.396023 + -2.55713 4.93932 0.463279 -0.900637 0.193606 -0.389062 + -2.48569 4.84565 0.275923 -0.900593 0.129705 -0.414859 + -2.72797 4.35094 0.703387 -0.915186 0.0102556 -0.402902 + -2.76089 4.56788 0.813234 -0.941275 0.103216 -0.321478 + -2.71834 4.65994 0.718789 -0.9311 0.130438 -0.340644 + -2.65025 4.94789 0.708834 -0.920467 0.267033 -0.285365 + -2.59492 5.03463 0.622196 -0.909378 0.282126 -0.305673 + -2.80234 4.48734 0.914338 -0.958409 0.0835529 -0.272894 + -2.74932 4.77044 0.885785 -0.940867 0.225482 -0.252838 + -2.70037 4.857 0.796664 -0.931207 0.250401 -0.264863 + -2.61138 5.14084 0.817034 -0.911251 0.354851 -0.209049 + -2.79077 4.6899 0.98689 -0.951738 0.206352 -0.227187 + -2.7084 4.97785 0.998734 -0.931745 0.32956 -0.152452 + -2.65944 5.06441 0.909622 -0.921912 0.338252 -0.188848 + -2.83173 4.63089 1.0977 -0.959075 0.189566 -0.210331 + -2.78712 4.84956 1.20634 -0.930227 0.338752 -0.141156 + -2.74616 4.90857 1.09554 -0.931493 0.333064 -0.146247 + -2.63199 5.20228 1.15381 -0.918214 0.393414 -0.0459125 + -2.60005 5.27246 1.05447 -0.912686 0.399923 -0.0840546 + -2.8228 4.79673 1.31545 -0.93772 0.326351 -0.119063 + -2.69677 5.07788 1.34668 -0.905787 0.420403 -0.0530262 + -2.66975 5.13291 1.25057 -0.912907 0.404943 -0.0512024 + -2.53978 5.40978 1.32602 -0.898035 0.439922 0.00130757 + -2.73246 5.02505 1.45579 -0.888433 0.44311 -0.11975 + -2.59562 5.29916 1.50761 -0.885355 0.464805 -0.0101343 + -2.5686 5.35419 1.4115 -0.894304 0.447457 0.00138431 + -2.42323 5.62676 1.5194 -0.818219 0.574298 0.0264345 + -2.50784 5.47996 1.22667 -0.873247 0.486304 -0.0307972 + -2.77865 4.97933 1.56458 -0.901265 0.419155 -0.109685 + -2.66938 5.20707 1.70372 -0.856494 0.513361 -0.0536392 + -2.62319 5.25279 1.59493 -0.859418 0.506552 -0.0693241 + -2.46568 5.52634 1.67394 -0.85751 0.509483 0.071438 + -2.45206 5.57117 1.60488 -0.859907 0.502524 0.0896057 + -2.80769 4.92047 1.67653 -0.93074 0.365679 0.00157322 + -2.68816 5.16972 1.81502 -0.881842 0.468562 0.0529564 + -2.50869 5.45074 1.83768 -0.820295 0.570351 0.0426088 + -2.49325 5.47997 1.76125 -0.837623 0.544791 0.0398699 + -2.31828 5.7211 1.80079 -0.784604 0.580258 0.218397 + -2.82122 4.86942 1.79256 -0.933617 0.35671 0.0334293 + -2.70169 5.11875 1.9311 -0.89055 0.44423 0.0978837 + -2.55329 5.34863 2.07074 -0.8275 0.544612 0.136531 + -2.52747 5.41347 1.94903 -0.816856 0.569034 0.0945872 + -2.30026 5.70265 1.96015 -0.742642 0.655494 0.137152 + -2.84193 4.80944 1.90563 -0.928767 0.37057 -0.00836971 + -2.71208 5.05683 2.09695 -0.866553 0.493758 0.0727193 + -2.56369 5.28679 2.23664 -0.82575 0.527754 0.199031 + -2.36036 5.57092 2.18392 -0.739523 0.637411 0.21636 + -2.33453 5.63576 2.06221 -0.745054 0.642313 0.1798 + -2.86009 4.78554 2.03663 -0.923899 0.382483 -0.010808 + -2.73024 5.03293 2.22795 -0.788939 0.610517 0.0696004 + -2.58513 5.13559 2.48833 -0.790199 0.568266 0.229475 + -2.41336 5.32076 2.59061 -0.745234 0.597703 0.295596 + -2.39192 5.47197 2.33891 -0.74202 0.614454 0.268054 + -2.87809 4.72406 2.17391 -0.940136 0.337211 0.0493238 + -2.78208 4.9222 2.33093 -0.869903 0.475428 0.13129 + -2.63696 5.02486 2.59132 -0.788866 0.56382 0.244535 + -2.89948 4.61338 2.36022 -0.944468 0.318925 0.079168 + -2.80347 4.81152 2.51723 -0.87635 0.438099 0.200202 + -2.77926 4.7781 2.66272 -0.853893 0.462914 0.237861 + -2.61275 4.99135 2.73675 -0.777742 0.562653 0.280247 + -2.92178 4.51901 2.47688 -0.941396 0.320807 0.104194 + -2.7918 4.70423 2.76488 -0.857363 0.466237 0.218063 + -2.6075 4.91344 2.9007 -0.769537 0.556362 0.313487 + -2.39793 5.14652 2.96539 -0.715766 0.609412 0.341021 + -2.40318 5.22443 2.80145 -0.727052 0.607832 0.319273 + -2.93431 4.44513 2.57904 -0.93877 0.321731 0.123289 + -2.944 4.36891 2.69926 -0.942316 0.300852 0.146728 + -2.82734 4.60859 2.84251 -0.878694 0.435094 0.196444 + -2.64304 4.81781 2.97834 -0.78528 0.53861 0.305343 + -2.93668 4.31809 2.81409 -0.941943 0.287876 0.172833 + -2.82002 4.55769 2.95729 -0.865309 0.411778 0.285796 + -2.76831 4.56016 3.08241 -0.833603 0.455824 0.31198 + -2.59133 4.8202 3.1034 -0.761178 0.551585 0.341118 + -3.03633 3.96322 2.76533 -0.974454 0.17874 0.135982 + -2.92508 4.27844 2.95516 -0.930415 0.302307 0.207214 + -2.75332 4.51485 3.20068 -0.829055 0.476306 0.292917 + -2.56165 4.72498 3.30773 -0.746222 0.550401 0.374448 + -2.91008 4.23313 3.07343 -0.923007 0.310234 0.227627 + -2.89556 4.19064 3.19443 -0.921938 0.304481 0.239418 + -2.77868 4.4125 3.29715 -0.850802 0.436808 0.292122 + -2.58701 4.62271 3.40426 -0.75346 0.533149 0.384772 + -2.35703 4.93946 3.37123 -0.688603 0.6029 0.402911 + -3.00792 3.89376 3.01664 -0.969872 0.166385 0.177947 + -2.99013 3.85874 3.14489 -0.964628 0.158448 0.21068 + -2.88356 4.12758 3.30345 -0.920057 0.276043 0.27802 + -2.76669 4.34953 3.40622 -0.83521 0.402747 0.37446 + -3.01927 3.52656 3.11545 -0.978264 -0.0181472 0.206569 + -2.9702 3.80311 3.25965 -0.957509 0.127008 0.258931 + -2.86364 4.07195 3.41821 -0.903613 0.265969 0.335775 + -2.71835 4.34324 3.50512 -0.804391 0.419175 0.421007 + -2.53868 4.61643 3.50315 -0.738434 0.544643 0.39759 + -2.99093 3.47223 3.23235 -0.966858 -0.0510364 0.250161 + -2.94185 3.7487 3.3765 -0.946037 0.0993097 0.308467 + -2.84152 4.00321 3.52207 -0.890499 0.243175 0.384549 + -2.69623 4.2745 3.60898 -0.813905 0.382305 0.437495 + -2.52007 4.5369 3.64849 -0.73621 0.513257 0.441092 + -2.94526 3.14078 3.22244 -0.947246 -0.168592 0.272583 + -2.95263 3.41614 3.34891 -0.950557 -0.0799189 0.300089 + -2.9106 3.68128 3.48288 -0.930175 0.0592283 0.362306 + -2.81027 3.93579 3.62845 -0.882242 0.215088 0.418791 + -2.65982 4.2023 3.73764 -0.802569 0.364417 0.472316 + -2.93318 2.84781 3.06129 -0.941533 -0.196948 0.273363 + -2.8961 3.06982 3.33155 -0.933504 -0.194095 0.301493 + -2.91085 3.34236 3.45169 -0.934533 -0.111482 0.337964 + -2.86882 3.6075 3.58566 -0.918938 0.0248867 0.393616 + -2.86976 2.44501 2.95194 -0.918618 -0.255853 0.301133 + -2.88402 2.77684 3.17041 -0.922545 -0.225435 0.313192 + -2.82897 2.67436 3.24551 -0.90573 -0.254176 0.339188 + -2.84745 2.98667 3.42657 -0.912453 -0.222497 0.343402 + -2.86219 3.25922 3.54671 -0.929621 -0.13405 0.343271 + -2.85299 2.1988 2.7792 -0.915081 -0.292864 0.277233 + -2.79381 2.07464 2.83085 -0.901153 -0.318168 0.294435 + -2.81471 2.34254 3.02704 -0.900527 -0.281915 0.331021 + -2.77132 1.88583 2.67448 -0.901379 -0.35691 0.245216 + -2.70523 1.74766 2.70259 -0.885211 -0.384821 0.261368 + -2.73262 1.95246 2.88208 -0.885417 -0.343054 0.31361 + -2.75351 2.22044 3.07832 -0.887788 -0.302792 0.346627 + -2.64147 1.51538 2.56272 -0.886635 -0.444319 0.12829 + -2.5387 1.40196 2.66698 -0.848709 -0.455277 0.269102 + -2.63705 1.62676 2.7512 -0.880864 -0.41533 0.227113 + -2.66443 1.83164 2.93074 -0.8636 -0.371295 0.341079 + -2.41932 1.16569 2.65599 -0.757829 -0.486036 0.435274 + -2.27515 1.08933 2.76686 -0.72349 -0.621395 0.300717 + -2.46649 1.2873 2.72756 -0.766638 -0.630721 -0.120241 + -2.56484 1.51211 2.81178 -0.860239 -0.431404 0.271809 + -2.35561 1.04979 2.60395 -0.672192 -0.68579 0.279017 + -2.21144 0.973508 2.71487 -0.721084 -0.577432 0.382898 + -2.10981 0.896364 2.79808 -0.823418 -0.512403 0.243772 + -2.20762 1.03299 2.84985 -0.750614 -0.657077 0.0694844 + -2.39897 1.23088 2.81048 -0.781194 -0.591803 0.198757 + -2.22695 0.911439 2.59657 -0.735958 -0.599618 0.314362 + -2.12532 0.8343 2.67978 -0.71394 -0.635401 0.294203 + -2.07563 0.857085 2.85552 -0.763329 -0.605712 0.224595 + -2.17345 0.993706 2.90729 -0.753335 -0.643149 0.13728 + -2.12988 0.805667 2.58238 -0.656956 -0.733925 0.172516 + -2.03971 0.774912 2.74105 -0.707772 -0.662453 0.245387 + -1.97094 0.723982 2.81546 -0.73055 -0.638569 0.241921 + -2.00686 0.806154 2.92993 -0.72925 -0.638309 0.246488 + -2.04427 0.746279 2.64364 -0.66514 -0.737012 0.120011 + -1.96054 0.673768 2.71784 -0.679722 -0.724682 0.113197 + -1.89341 0.665197 2.89428 -0.741697 -0.621265 0.252815 + -1.92394 0.74449 3.01254 -0.725632 -0.639517 0.253921 + -1.97589 0.68658 2.63224 -0.799499 -0.561566 0.213177 + -1.88301 0.61507 2.7967 -0.813589 -0.496025 0.303368 + -1.82403 0.563674 2.87752 -0.86339 -0.39021 0.319833 + -1.83081 0.619075 2.95577 -0.786076 -0.550375 0.281375 + -1.89952 0.575276 2.72663 -0.856007 -0.363034 0.368046 + -1.84054 0.52388 2.80745 -0.804464 -0.46877 0.364817 + -1.78991 0.540926 2.95392 -0.745189 -0.581831 0.325831 + -1.79669 0.59624 3.03212 -0.765077 -0.50521 0.399274 + -1.9252 0.559805 2.65102 -0.844864 -0.386319 0.370083 + -1.84902 0.490325 2.73637 -0.777631 -0.520484 0.352684 + -1.78719 0.502876 2.88203 -0.665964 -0.658825 0.349917 + -1.73148 0.480153 2.93659 -0.569271 -0.725555 0.386653 + -1.73421 0.51829 3.00853 -0.538427 -0.714791 0.446285 + -1.94391 0.538627 2.57991 -0.804422 -0.471355 0.361564 + -1.86774 0.469151 2.66524 -0.750918 -0.572214 0.329686 + -1.79567 0.469321 2.81095 -0.670839 -0.645173 0.365685 + -1.73252 0.44352 2.86664 -0.572203 -0.725371 0.382648 + -1.88031 0.447599 2.59177 -0.688693 -0.683989 0.240544 + -1.80017 0.435389 2.73712 -0.637175 -0.694699 0.333767 + -1.73702 0.409586 2.79281 -0.552377 -0.75448 0.354455 + -1.66489 0.41602 2.90367 -0.500535 -0.772213 0.391346 + -1.66385 0.452739 2.97367 -0.526799 -0.734419 0.427915 + -1.9018 0.448913 2.5195 -0.717192 -0.665489 0.206787 + -1.81274 0.413835 2.66365 -0.642262 -0.696881 0.319151 + -1.74226 0.381653 2.72039 -0.546807 -0.76448 0.341427 + -1.66729 0.385132 2.83637 -0.458282 -0.815868 0.352615 + -1.91665 0.442788 2.4447 -0.706371 -0.685974 0.174582 + -1.82285 0.386233 2.58806 -0.648848 -0.715846 0.257994 + -1.75237 0.35405 2.6448 -0.477941 -0.833239 0.278003 + -1.67252 0.357199 2.76395 -0.401829 -0.861335 0.310861 + -1.93747 0.448141 2.37083 -0.66322 -0.74147 0.101789 + -1.8377 0.380114 2.51326 -0.618341 -0.771339 0.150635 + -1.75667 0.33829 2.5721 -0.410896 -0.898397 0.155073 + -1.67697 0.338785 2.69304 -0.318146 -0.917909 0.237122 + -1.94748 0.45034 2.29522 -0.652028 -0.747666 0.125917 + -1.84167 0.373013 2.43696 -0.570074 -0.81826 0.0739376 + -1.76064 0.33119 2.4958 -0.392025 -0.916909 0.0747872 + -1.68127 0.323023 2.62034 -0.292781 -0.938828 0.181332 + -1.96172 0.44608 2.2196 -0.545545 -0.835137 0.070196 + -1.85169 0.375125 2.3613 -0.511168 -0.859007 -0.0285292 + -1.75908 0.327635 2.42095 -0.31491 -0.947448 -0.0563375 + -1.68045 0.311597 2.54813 -0.290844 -0.950306 0.111036 + -1.96598 0.448469 2.14407 -0.483277 -0.87237 0.0735853 + -1.84948 0.386313 2.28472 -0.413375 -0.907028 -0.0801349 + -1.75687 0.338735 2.34433 -0.36352 -0.926843 -0.0938897 + -1.67889 0.30813 2.47334 -0.303308 -0.952342 0.0323784 + -1.96224 0.437152 2.06866 -0.373598 -0.925468 0.0627102 + -1.85374 0.388701 2.20919 -0.404561 -0.913232 -0.0483561 + -1.75317 0.342798 2.27029 -0.368158 -0.925502 -0.0889166 + -1.67281 0.301677 2.40131 -0.371055 -0.928604 0.0036374 + -1.9619 0.434756 1.99342 -0.320484 -0.943178 0.0877777 + -1.85671 0.399638 2.13244 -0.326285 -0.943416 -0.0591966 + -1.75615 0.353735 2.19355 -0.37183 -0.923184 -0.0973329 + -1.66911 0.305741 2.32728 -0.361023 -0.930197 -0.0662937 + -1.94478 0.420302 1.91885 -0.242144 -0.966171 0.0887686 + -1.85638 0.397241 2.05719 -0.34773 -0.937278 0.0243521 + -1.75483 0.359828 2.1202 -0.403427 -0.91483 -0.0182605 + -1.66021 0.306524 2.25632 -0.390768 -0.918382 -0.0622521 + -2.01429 0.419449 1.81933 0.000201078 -0.976165 0.217028 + -1.9407 0.415079 1.8431 -0.193123 -0.974072 0.117843 + -1.86792 0.40068 1.98044 -0.27893 -0.960268 0.00916281 + -1.76638 0.363265 2.04344 -0.323562 -0.944997 -0.0478489 + -1.65889 0.312522 2.18293 -0.363883 -0.924314 -0.115032 + -1.99393 0.39519 1.74235 -0.000629854 -0.96888 0.247529 + -1.92829 0.401439 1.76872 -0.0227849 -0.993839 0.108469 + -1.86385 0.395455 1.90469 -0.241658 -0.970327 0.00815342 + -1.76647 0.37023 1.97018 -0.282978 -0.957349 -0.0583555 + -1.64877 0.321744 2.11336 -0.305524 -0.942695 -0.134089 + -2.01282 0.326938 1.53156 -0.00306389 -0.969994 0.243107 + -1.98152 0.381463 1.66792 0.303052 -0.928114 0.216248 + -1.92178 0.39673 1.69228 0.0234258 -0.988778 0.147541 + -1.86879 0.401352 1.82807 -0.0709514 -0.996959 -0.0322347 + -1.77141 0.376127 1.89356 -0.228292 -0.970658 -0.075535 + -1.99759 0.31104 1.4545 0.258246 -0.955681 0.14136 + -1.9663 0.36556 1.59087 0.268162 -0.931293 0.24654 + -1.90934 0.379825 1.61676 0.2331 -0.960014 0.15504 + -1.9927 0.303234 1.36722 0.217083 -0.971962 0.0903619 + -1.95386 0.34866 1.51534 0.303079 -0.937723 0.169764 + -1.90111 0.374766 1.54132 0.321714 -0.936831 0.137285 + -2.04358 0.304913 1.25091 -0.408087 -0.912941 0.00203094 + -1.98685 0.299232 1.28975 0.583597 -0.804124 -0.113135 + -1.94801 0.344573 1.43782 0.417967 -0.900173 0.122445 + -2.10656 0.366408 1.0692 -0.619418 -0.784896 -0.0160926 + -2.04389 0.308428 1.16162 -0.165263 -0.976137 -0.140874 + -2.00195 0.314246 1.20675 0.46818 -0.863876 -0.18581 + -2.10102 0.361741 0.977082 -0.600154 -0.799549 -0.0231476 + -2.05899 0.323441 1.07862 -0.287557 -0.956446 -0.0502304 + -2.17633 0.417002 0.856766 -0.574413 -0.818565 -0.00089604 + -2.14088 0.392912 0.810892 -0.573654 -0.819044 0.00939378 + -2.0973 0.364427 0.890429 -0.593997 -0.804343 -0.0141689 + -2.13557 0.385806 0.720198 -0.454311 -0.884817 -0.103444 + -2.19283 0.513421 0.515565 -0.613024 -0.568446 -0.5487 + -2.28918 0.60205 0.568854 -0.744975 -0.480878 -0.462352 + -1.64886 0.328703 2.0401 -0.300308 -0.947308 -0.111459 + -1.5508 0.28849 2.07756 -0.417531 -0.896406 -0.148742 + -1.56516 0.281293 2.16402 -0.421362 -0.892018 -0.163578 + -1.48961 0.249849 2.09508 -0.498856 -0.852899 -0.153969 + -1.50396 0.242652 2.18155 -0.438085 -0.889565 -0.129441 + -1.57528 0.272073 2.23359 -0.416914 -0.904021 -0.0944887 + -1.58532 0.274212 2.32089 -0.414239 -0.909138 -0.0432954 + -1.42509 0.205372 2.11312 -0.552619 -0.830091 -0.0745739 + -1.43347 0.208092 2.21021 -0.466861 -0.88171 -0.0680356 + -1.52169 0.24162 2.28234 -0.431556 -0.901287 -0.0379507 + -1.53174 0.243759 2.36963 -0.375807 -0.925829 0.040131 + -1.59423 0.273517 2.39189 -0.362183 -0.931812 0.0234357 + -1.34864 0.1531 2.04626 -0.536426 -0.843531 -0.0265117 + -1.34554 0.158488 2.14013 -0.456358 -0.889265 0.0307576 + -1.35392 0.161294 2.23726 -0.422963 -0.905377 0.0373347 + -1.4512 0.206969 2.31095 -0.400125 -0.915105 0.0498191 + -1.45679 0.220878 2.40706 -0.333336 -0.934438 0.125353 + -1.33591 0.146628 1.97227 -0.52148 -0.851632 -0.052743 + -1.22032 0.103022 2.0614 -0.252562 -0.966088 -0.0537253 + -1.22021 0.101478 2.14847 -0.321263 -0.94675 0.0213059 + -1.21711 0.106865 2.24234 -0.342811 -0.938572 0.0395335 + -1.22545 0.112729 1.96998 -0.211424 -0.971177 -0.110067 + -1.02737 0.056695 2.24564 -0.164359 -0.98576 -0.0355564 + -1.02726 0.055147 2.33272 -0.192495 -0.981253 -0.00936353 + -1.02824 0.056105 2.41526 -0.227889 -0.973438 0.0220352 + -0.867153 0.039802 2.2227 -0.0501389 -0.99665 -0.064616 + -0.867964 0.035107 2.30703 -0.0566004 -0.996033 -0.068656 + -0.879902 0.028684 2.38955 -0.124479 -0.990823 -0.0526654 + -0.880885 0.029725 2.47215 -0.202916 -0.976444 -0.0733684 + -1.03752 0.060968 2.49944 -0.198429 -0.976019 -0.0895106 + -0.724318 0.045762 2.15937 0.0411721 -0.997937 -0.0492575 + -0.756667 0.040633 2.24066 0.0373009 -0.997558 -0.0590538 + -0.768605 0.034296 2.32323 -0.0148463 -0.988781 -0.148635 + -0.787987 0.016661 2.40498 -0.0765398 -0.986346 -0.145821 + -0.566167 0.059859 2.04836 0.095351 -0.995418 0.00718027 + -0.583467 0.056534 2.13152 0.0920215 -0.995314 -0.0296966 + -0.615817 0.051409 2.21279 0.0697268 -0.993691 -0.0878428 + -0.637802 0.036659 2.29194 0.0172544 -0.979085 -0.202718 + -0.4243 0.077633 2.05497 0.118094 -0.992988 -0.00533023 + -0.4416 0.074308 2.13813 0.0911641 -0.993795 -0.0637168 + -0.456349 0.065611 2.21919 0.0690841 -0.989662 -0.12568 + -0.478334 0.050861 2.29834 0.0362249 -0.963091 -0.266728 + -0.285543 0.092543 1.96235 0.082683 -0.99299 -0.0844699 + -0.291431 0.091702 2.046 0.0472788 -0.996903 -0.062845 + -0.301232 0.081181 2.12422 -0.00713135 -0.990435 -0.137798 + -0.315981 0.072491 2.20528 -0.0564023 -0.978318 -0.199279 + -0.280226 0.104435 1.88275 0.0850947 -0.984963 -0.150357 + -0.154552 0.107445 1.94174 0.130729 -0.981449 -0.140239 + -0.161487 0.095491 2.01744 0.0906738 -0.986474 -0.136554 + -0.171288 0.084975 2.09565 0.0223911 -0.979078 -0.202248 + -0.183179 0.063995 2.16679 -0.0165967 -0.964244 -0.264497 + -0.149236 0.119336 1.86214 0.144734 -0.970682 -0.191909 + -0.065459 0.122525 1.94562 0.333935 -0.934339 -0.12449 + -0.072394 0.110565 2.02133 0.332738 -0.928511 -0.16478 + -0.079232 0.091678 2.08985 0.304363 -0.929804 -0.206948 + -0.039051 0.157157 1.80163 0.364521 -0.907556 -0.208488 + -0.059663 0.134967 1.87326 0.331259 -0.92966 -0.161244 + -0.023052 0.142337 1.9765 0.252548 -0.958922 -0.129184 + -0.023052 0.132783 2.05185 0.240554 -0.952935 -0.184525 + -0.029889 0.113896 2.12036 0.33783 -0.907215 -0.250663 + -0.029835 0.176438 1.74344 0.509049 -0.819146 -0.264328 + -0.017255 0.16442 1.82885 0.265666 -0.945975 -0.185886 + -0.017255 0.15478 1.90415 0.244123 -0.960376 -0.134465 + 0.023052 0.142337 1.9765 -0.257471 -0.957182 -0.132328 + 0.023052 0.132783 2.05185 -0.243841 -0.954338 -0.172574 + -0.008039 0.211872 1.70326 0.273746 -0.921409 -0.275806 + -0.008039 0.183616 1.7706 0.275276 -0.912485 -0.302645 + 0.00804 0.183611 1.77061 -0.275861 -0.912252 -0.302816 + 0.017255 0.16442 1.82885 -0.252688 -0.950749 -0.179513 + 0.017255 0.15478 1.90415 -0.243275 -0.960318 -0.136405 + 0.00804 0.211867 1.70327 -0.273303 -0.921494 -0.275959 + 0.029836 0.176433 1.74344 -0.508916 -0.819128 -0.264638 + 0.039051 0.157157 1.80163 -0.364626 -0.908268 -0.205173 + 0.059663 0.134967 1.87326 -0.335117 -0.927885 -0.16348 + 0.065459 0.122525 1.94562 -0.333115 -0.93439 -0.126292 + 0.023071 0.214616 1.66891 -0.301299 -0.948176 -0.100904 + 0.044867 0.179094 1.70903 -0.402852 -0.866191 -0.295675 + 0.128624 0.141618 1.79055 -0.156189 -0.955816 -0.249038 + 0.149236 0.119336 1.86214 -0.127307 -0.969749 -0.208277 + 0.077389 0.188657 1.64287 -0.310978 -0.880171 -0.358597 + 0.172667 0.169411 1.65301 -0.111582 -0.9323 -0.344043 + 0.140145 0.15994 1.71921 -0.151988 -0.95824 -0.24223 + 0.289262 0.11663 1.80043 -0.104833 -0.972077 -0.209945 + 0.280227 0.104435 1.88275 -0.0934368 -0.982816 -0.15919 + 0.059101 0.223437 1.60503 -0.492994 -0.625485 -0.604753 + 0.113419 0.19954 1.59562 -0.266812 -0.844287 -0.464748 + 0.219097 0.192294 1.59817 -0.0519375 -0.979975 -0.19223 + 0.325697 0.165847 1.65678 0.0170248 -0.924096 -0.381781 + 0.300782 0.134952 1.72909 -0.0412717 -0.944205 -0.326763 + 0.016455 0.26198 1.61187 -0.33597 -0.439832 -0.832869 + 0.10875 0.245665 1.55153 -0.421674 -0.543614 -0.725724 + 0.185977 0.19434 1.55923 -0.212517 -0.883403 -0.417654 + 0.291654 0.187008 1.56173 0.0826667 -0.965876 -0.245459 + 0.372127 0.188644 1.6019 0.151304 -0.872841 -0.463957 + 0.066104 0.284205 1.55838 -0.622691 -0.326218 -0.711222 + 0.094316 0.306883 1.5237 -0.491361 -0.423392 -0.76112 + 0.172807 0.255556 1.517 -0.31558 -0.476786 -0.820418 + 0.250034 0.204145 1.52465 -0.117479 -0.764324 -0.63404 + 0.170386 0.315624 1.49316 -0.311988 -0.415864 -0.854237 + 0.248877 0.264298 1.48646 -0.26823 -0.470975 -0.840378 + 0.316714 0.227436 1.4939 -0.019341 -0.781214 -0.623964 + 0.411496 0.244192 1.49248 0.389863 -0.898825 -0.200303 + 0.344816 0.220906 1.52322 0.26835 -0.913575 -0.305565 + 0.099147 0.393027 1.47549 -0.178478 -0.571875 -0.80069 + 0.224866 0.336079 1.46153 -0.302939 -0.321099 -0.897287 + 0.311003 0.293472 1.45073 -0.2287 -0.433422 -0.871689 + 0.378839 0.25661 1.45817 0.00399699 -0.732972 -0.680247 + 0.214568 0.417707 1.45135 -0.175932 -0.405625 -0.896948 + 0.273208 0.382957 1.43094 -0.341688 -0.22859 -0.91159 + 0.359344 0.340435 1.42019 -0.313158 -0.371842 -0.87388 + 0.234373 0.595155 1.2896 0.00199342 -0.695913 -0.718123 + 0.280223 0.459798 1.41644 -0.229196 -0.456427 -0.859735 + 0.338862 0.425048 1.39603 -0.39924 -0.299754 -0.866461 + 0.404353 0.388668 1.38004 -0.383904 -0.36497 -0.848183 + 0.430531 0.290693 1.41134 -0.00866732 -0.74897 -0.662547 + 0.180778 0.941774 0.880636 0.0874276 -0.796584 -0.598172 + 0.288601 0.697477 1.20737 0.13617 -0.706496 -0.694494 + 0.284809 0.633355 1.24723 -0.0167387 -0.565796 -0.824375 + 0.330659 0.497998 1.37408 -0.296662 -0.512839 -0.805597 + 0.202299 1.02452 0.721508 -0.237914 -0.808776 -0.537846 + 0.1315 1.15639 0.566116 -0.683273 -0.674188 -0.280372 + 0.194623 1.1096 0.436545 -0.675886 -0.241239 -0.696407 + 0.224485 1.04294 0.438416 -0.60556 -0.420037 -0.675919 + 0.161362 1.08963 0.567937 -0.941146 -0.271414 -0.201444 + 0.202299 1.02452 0.721508 -0.881071 -0.357353 0.30986 + 0.166029 1.18089 0.455079 -0.604039 -0.362134 -0.709926 + 0.258117 1.16069 0.410469 -0.140426 -0.00502579 -0.990078 + 0.286711 1.0894 0.391936 -0.0190481 -0.0590518 -0.998073 + 0.312808 1.02384 0.415092 0.0412183 -0.413174 -0.909719 + 0.248556 0.979544 0.481017 -0.514629 -0.534366 -0.67053 + 0.21948 1.22669 0.410138 -0.111188 -0.156652 -0.981375 + 0.35818 1.15829 0.413422 0.201108 -0.118426 -0.972384 + 0.390198 1.08755 0.441946 0.384308 -0.126856 -0.914448 + 0.416295 1.0219 0.465053 0.410432 -0.317729 -0.854748 + 0.319542 1.22421 0.413041 0.165406 0.183347 -0.969033 + 0.4343 1.19784 0.443514 0.384609 0.101531 -0.917479 + 0.466318 1.12702 0.471987 0.364306 -0.134856 -0.921463 + 0.508152 1.07115 0.493346 0.414522 -0.272607 -0.868249 + 0.44088 0.967001 0.506741 0.418383 -0.49861 -0.759173 + 0.368359 1.32276 0.466147 0.296338 0.350691 -0.888369 + 0.40419 1.26275 0.450692 0.37819 0.34222 -0.86015 + 0.489019 1.27485 0.512728 0.195126 0.447301 -0.872839 + 0.520361 1.21793 0.473514 0.304285 0.210338 -0.929069 + 0.562195 1.16198 0.494822 0.465224 -0.0802301 -0.881549 + 0.337539 1.38741 0.477972 0.094197 0.434565 -0.895701 + 0.430147 1.4069 0.519008 0.423498 0.262598 -0.867001 + 0.458909 1.33976 0.519908 0.437379 0.280545 -0.854397 + 0.536813 1.37039 0.559051 0.0712872 0.434187 -0.897998 + 0.568156 1.31347 0.519837 0.248883 0.375791 -0.892658 + 0.399327 1.47155 0.530832 0.29048 0.1643 -0.94267 + 0.494464 1.51771 0.586891 0.48701 0.173572 -0.855975 + 0.523226 1.45056 0.587791 0.351529 0.285556 -0.891563 + 0.609086 1.49934 0.623102 0.358834 0.284674 -0.888931 + 0.470813 1.59102 0.579113 0.677248 -0.0090501 -0.735699 + 0.560694 1.66274 0.668891 0.346754 0.156162 -0.924865 + 0.595499 1.57951 0.651842 0.130183 0.301985 -0.944382 + 0.537043 1.73605 0.661113 0.489452 -0.183572 -0.852489 + 0.63287 1.72467 0.683221 -0.220073 -0.242601 -0.944835 + 0.667675 1.64153 0.666221 -0.168833 0.0794248 -0.982439 + 0.570279 1.82633 0.611337 -0.200123 -0.601636 -0.773295 + 0.614016 1.77037 0.660667 -0.208448 -0.636527 -0.742552 + 0.765247 1.66905 0.611151 -0.342337 -0.4768 -0.809609 + 0.819324 1.64323 0.607476 0.00663408 -0.706049 -0.708132 + 0.721752 1.61571 0.662546 0.0554567 -0.602927 -0.795867 + 0.544721 1.8913 0.575008 -0.270023 -0.387148 -0.881592 + 0.676006 1.77051 0.564613 -0.42849 -0.691888 -0.581109 + 0.746393 1.71475 0.588597 -0.377476 -0.592926 -0.711302 + 0.907269 1.77161 0.505114 0.119378 -0.583327 -0.803417 + 0.895425 1.6969 0.571711 0.228782 -0.725119 -0.649508 + 0.650448 1.83548 0.528282 -0.454389 -0.500496 -0.736909 + 0.836882 1.82746 0.481179 -0.0777549 -0.654659 -0.751914 + 1.08955 1.96145 0.43531 0.388775 -0.706283 -0.591623 + 1.02369 1.81801 0.518748 -0.557543 0.243408 -0.793661 + 0.833391 1.94058 0.379053 -0.226783 -0.656655 -0.719287 + 0.815929 1.8798 0.41873 -0.190316 -0.630613 -0.752401 + 1.05697 1.97337 0.346654 0.442259 -0.750163 -0.491592 + 0.810344 1.97817 0.320542 -0.246073 -0.765187 -0.594926 + 0.981624 2.07298 0.222127 0.163624 -0.758487 -0.630813 + 1.03601 2.02571 0.284205 0.150126 -0.724684 -0.672529 + 1.10585 2.12196 0.209687 0.660096 -0.396582 -0.637963 + 1.13428 2.12922 0.259715 0.882049 -0.226791 -0.412984 + 0.958577 2.11066 0.163666 0.343393 -0.87323 -0.345759 + 1.05147 2.16932 0.147664 0.741189 -0.418469 -0.524902 + 1.05384 2.25235 0.14565 0.840021 -0.357247 -0.408338 + 1.08226 2.25953 0.195622 0.842923 -0.32878 -0.425892 + 0.922802 2.10901 0.085129 0.0690286 -0.949442 -0.306259 + 1.02166 2.1516 0.03576 0.735983 -0.668118 -0.109302 + 1.03372 2.19214 0.092341 0.979928 -0.0173254 -0.198597 + 1.18729 2.0375 0.396588 0.11454 -0.51983 -0.846556 + 1.16686 2.1173 0.348371 0.604834 -0.408006 -0.683891 + 1.19065 2.1133 0.362098 0.415425 -0.374356 -0.829023 + 1.14683 2.27224 0.275606 -0.251369 -0.703331 -0.664935 + 1.12304 2.27624 0.261878 0.518217 -0.639739 -0.567614 + 1.17763 2.27532 0.212466 -0.466835 -0.86589 -0.179719 + 1.18686 2.17753 0.247647 -0.923615 -0.216732 -0.316169 + 1.19065 2.1133 0.362098 -0.99948 -0.00159498 0.0322018 + 1.1835 2.10173 0.282136 -0.975206 0.190751 -0.112197 + 1.09759 2.3003 0.121208 0.319193 -0.947526 -0.0176331 + 1.13837 2.31692 0.187409 -0.0712604 -0.976293 -0.204385 + 1.19122 2.27081 0.18087 -0.696198 -0.715946 -0.05225 + 1.31347 2.12724 0.109754 -0.793508 -0.28562 -0.53737 + 1.21766 2.18061 0.184504 -0.765389 -0.119618 -0.632354 + 1.07871 2.29808 0.057635 0.297169 -0.94411 0.142642 + 1.19219 2.27055 0.073518 -0.564576 -0.798629 -0.208438 + 1.21979 2.20679 0.063957 -0.756811 -0.543957 -0.362418 + 1.27264 2.16069 0.057417 -0.641701 -0.744126 -0.185731 + 1.32705 2.12282 0.078207 -0.703711 -0.633417 -0.321828 + 1.0361 2.27517 0.090327 0.763837 -0.624206 -0.164072 + 1.0774 2.23681 -0.044033 0.620122 -0.757082 0.20561 + 1.1697 2.29075 -0.059863 0.207982 -0.969606 -0.128869 + 1.17331 2.26835 0.009938 -0.173367 -0.977501 -0.120148 + 1.03478 2.21398 -0.011292 0.862466 -0.467678 0.193468 + 1.02272 2.17335 -0.067922 0.805969 -0.584621 0.0929153 + 1.03829 2.21156 -0.143494 0.865686 -0.486219 -0.119077 + 1.07955 2.24064 -0.106867 0.58024 -0.801442 -0.144955 + 1.08053 2.27656 -0.209287 0.652902 -0.643199 -0.400017 + 1.12179 2.30564 -0.172649 0.512942 -0.728268 -0.454441 + 1.17186 2.29449 -0.122738 0.43716 -0.854415 -0.280829 + 1.22873 2.32785 -0.137321 0.168746 -0.879145 -0.445678 + 1.27338 2.29774 -0.092373 -0.0457302 -0.865845 -0.498218 + 1.06901 2.33969 -0.284824 0.678377 -0.47301 -0.562197 + 1.12 2.34824 -0.23243 0.539317 -0.683937 -0.491291 + 1.17866 2.339 -0.187233 0.356476 -0.702752 -0.615682 + 1.30396 2.34659 -0.149771 0.0614656 -0.782636 -0.619438 + 1.3486 2.31648 -0.104823 -0.0978227 -0.653546 -0.750538 + 1.01663 2.3143 -0.349446 0.951981 -0.210593 -0.22222 + 1.03503 2.35088 -0.329403 0.815209 -0.303388 -0.493346 + 1.11506 2.38959 -0.271264 0.468928 -0.602128 -0.64618 + 1.18011 2.38412 -0.225178 0.373677 -0.721976 -0.582337 + 1.23876 2.37488 -0.179972 0.212932 -0.626427 -0.749833 + 1.02405 2.3753 -0.403114 0.918254 -0.253542 -0.304181 + 1.04244 2.41197 -0.383019 0.765658 -0.543893 -0.343436 + 1.08108 2.40086 -0.315784 0.531257 -0.658405 -0.533169 + 1.14067 2.43669 -0.342226 0.226085 -0.885337 -0.40628 + 0.989653 2.23551 -0.440186 0.936124 -0.103942 -0.335957 + 1.00614 2.35642 -0.447203 0.887363 -0.0667328 -0.456216 + 0.98841 2.44837 -0.48127 0.649857 -0.398456 -0.647239 + 1.04836 2.45826 -0.454405 0.323119 -0.802898 -0.500947 + 1.087 2.44716 -0.387179 0.2938 -0.87552 -0.383597 + 0.964875 2.1885 -0.493562 0.910786 -0.0428506 -0.410649 + 0.961205 2.32061 -0.501179 0.840011 -0.0187463 -0.542245 + 0.943474 2.41256 -0.535247 0.749377 -0.0817093 -0.657083 + 0.960257 2.50357 -0.553484 0.479821 -0.380069 -0.790772 + 1.02021 2.51347 -0.526628 -0.0167753 -0.797881 -0.602581 + 0.963816 2.07556 -0.479939 0.928115 -0.193392 -0.318122 + 0.940043 2.06386 -0.530873 0.954931 -0.151602 -0.255193 + 0.939814 2.13853 -0.546399 0.95328 -0.025994 -0.300968 + 0.936145 2.27055 -0.554076 0.878685 0.0654387 -0.472895 + 0.948408 2.01676 -0.468093 0.903603 -0.298642 -0.307108 + 0.924635 2.00506 -0.519026 0.394429 -0.91787 0.0440384 + 0.927308 2.01413 -0.587145 0.903983 -0.407302 -0.130075 + 0.927079 2.0888 -0.602681 0.977534 0.0101431 -0.210532 + 0.917013 2.20864 -0.606034 0.905177 0.136502 -0.40252 + 0.879951 2.30643 -0.635612 0.803202 0.237296 -0.546404 + 0.899083 2.36834 -0.583653 0.759423 0.123513 -0.638765 + 0.915514 2.00015 -0.555323 0.67694 -0.732603 -0.0710247 + 0.918187 2.00922 -0.623443 0.99943 -0.0337012 -0.00200876 + 0.92031 2.03058 -0.651237 0.999368 0.0300102 0.0190617 + 0.910244 2.15041 -0.65459 0.937828 0.171801 -0.301602 + 0.867467 2.24817 -0.685917 0.809552 0.305848 -0.501082 + 0.802804 2.38658 -0.687645 0.702115 0.288865 -0.650839 + 0.843523 2.4329 -0.634069 0.684831 0.18255 -0.705465 + 0.927469 1.96604 -0.682646 0.997563 0.0666929 -0.0205148 + 0.910018 2.0829 -0.703454 0.939819 0.193352 -0.281702 + 0.867241 2.18075 -0.73473 0.857674 0.340548 -0.385255 + 0.790321 2.32833 -0.73795 0.788343 0.389661 -0.476108 + 0.724965 2.45691 -0.737052 0.73263 0.406756 -0.545712 + 0.925346 1.94468 -0.654843 0.995348 0.00755878 0.0960458 + 0.928663 1.90521 -0.720078 0.978418 -0.199941 0.0521718 + 0.911212 2.02207 -0.740895 0.965652 0.195 -0.171732 + 0.87809 2.11465 -0.780856 0.893804 0.336039 -0.296971 + 0.797996 2.26779 -0.788689 0.827154 0.412986 -0.38113 + 0.915514 2.00015 -0.555323 0.995032 0.0858065 0.050475 + 0.920946 1.88997 -0.719496 0.859532 -0.424604 0.284458 + 0.914712 1.86018 -0.745692 0.941118 -0.259361 0.216859 + 0.922179 1.95121 -0.784367 0.988399 0.142361 -0.0529256 + 0.889057 2.0438 -0.824337 0.91589 0.335957 -0.219723 + 0.808844 2.2017 -0.834823 0.8605 0.426274 -0.278981 + 0.742346 2.33211 -0.841297 0.871273 0.430974 -0.234829 + 0.906995 1.84494 -0.745102 0.843147 -0.274478 0.462347 + 0.919515 1.81725 -0.779344 0.959868 0.0716058 0.271157 + 0.926982 1.90829 -0.818027 0.993211 0.11242 0.0298957 + 0.908131 1.97388 -0.863228 0.929556 0.294501 -0.221798 + 0.834284 2.13524 -0.87711 0.889457 0.411568 -0.198689 + 0.919099 1.77531 -0.757695 0.906247 0.289663 0.307916 + 0.939316 1.83324 -0.851034 0.993216 0.116079 0.00686109 + 0.920465 1.89883 -0.896237 0.959648 0.2734 -0.0657916 + 0.853357 2.06532 -0.916001 0.910547 0.388286 -0.14191 + 0.794945 2.19464 -0.931195 0.904049 0.418535 -0.0867431 + 0.769505 2.2611 -0.8889 0.896928 0.42444 -0.123978 + 0.9389 1.79129 -0.829378 0.967886 0.120559 0.220597 + 0.927778 1.73612 -0.733014 0.859051 0.395155 0.325397 + 0.825763 2.12504 -0.97444 0.914092 0.405114 -0.017842 + 0.782328 2.22055 -0.986063 0.929348 0.23474 0.284974 + 0.750241 2.29266 -0.940374 0.941732 0.232421 0.243149 + 0.723081 2.36367 -0.89277 0.939013 0.244247 0.242068 + 0.776281 2.32164 -0.982164 0.597743 -0.176709 0.78197 + 0.744194 2.39376 -0.936474 0.768441 -0.113274 0.629815 + 0.723281 2.4607 -0.894831 0.728022 -0.132818 0.672565 + 0.683658 2.44041 -0.844285 0.960032 0.245488 0.134442 + 0.753678 2.58589 -0.879656 0.487133 -0.273232 0.829485 + 0.732765 2.65292 -0.837963 0.984934 -0.161452 0.0619613 + 0.762104 2.73531 -0.789264 0.728586 -0.471099 0.49722 + 0.683857 2.53744 -0.846346 0.808967 -0.215405 0.546967 + 0.825749 2.68506 -0.875424 0.371184 -0.287287 0.882999 + 0.813222 2.77682 -0.837363 0.615377 -0.42938 0.661018 + 0.842561 2.85913 -0.788723 0.748743 -0.554919 0.362558 + 0.87879 2.93189 -0.743953 0.694823 -0.718947 0.0183238 + 0.761325 2.80318 -0.738623 0.889461 -0.424716 -0.168745 + 0.946305 2.78767 -0.892355 0.491148 -0.233846 0.8391 + 0.917374 2.89238 -0.852317 0.596918 -0.454373 0.661236 + 0.953604 2.96515 -0.807556 0.55331 -0.751557 0.359179 + 1.05152 2.81816 -0.962764 0.617008 -0.165531 0.76935 + 1.02259 2.92278 -0.922776 0.605181 -0.394181 0.691648 + 1.0671 2.99456 -0.889893 0.509886 -0.741533 0.436055 + 1.02738 3.01237 -0.781739 0.288641 -0.957141 -0.0238343 + 1.14171 2.95065 -1.01444 0.594889 -0.414362 0.688775 + 1.18623 3.02234 -0.981609 0.400739 -0.804318 0.438725 + 1.14088 3.04178 -0.864075 0.278975 -0.957474 0.0736036 + 1.11456 3.01479 -0.772534 -0.128487 -0.875975 -0.464928 + 0.953552 2.97745 -0.695252 0.352744 -0.709932 -0.609564 + 1.27766 2.83913 -1.15248 0.595693 -0.258769 0.760387 + 1.26369 2.93221 -1.11991 0.538965 -0.36915 0.757129 + 1.33436 3.02223 -1.09923 0.374899 -0.757695 0.53418 + 1.30841 3.06147 -0.932784 0.199208 -0.97344 0.112829 + 1.49484 2.94614 -1.23203 0.431399 -0.450109 0.781855 + 1.60459 3.09642 -1.22012 0.46498 -0.637982 0.613818 + 1.45654 3.06128 -1.05046 0.380886 -0.87477 0.299507 + 1.65571 2.9089 -1.34153 0.402663 -0.434872 0.805449 + 1.76546 3.0591 -1.32967 0.273189 -0.5078 0.817011 + 1.69808 3.18616 -1.16996 0.451621 -0.749236 0.484443 + 1.55002 3.15102 -1.0003 0.545271 -0.778457 0.310942 + 1.61261 2.75404 -1.41731 0.335411 -0.520052 0.785522 + 1.8538 2.85272 -1.45663 -0.00908349 -0.450488 0.892736 + 1.9202 3.02836 -1.35684 -0.141619 -0.448079 0.882706 + 1.99461 3.17363 -1.27045 -0.0990468 -0.535452 0.838738 + 1.83988 3.20445 -1.24323 0.20631 -0.689934 0.69385 + 1.6553 2.55664 -1.57659 0.200426 -0.611083 0.765772 + 1.7895 2.54952 -1.59947 -0.0247822 -0.543034 0.839345 + 1.81071 2.69787 -1.53241 0.0930443 -0.437005 0.894634 + 1.98412 2.60123 -1.53762 -0.416579 -0.37579 0.827794 + 2.0451 2.73408 -1.42993 -0.499449 -0.334107 0.799327 + 1.65389 2.43073 -1.67692 0.0984026 -0.720387 0.686557 + 1.78809 2.42361 -1.69979 -0.0579976 -0.613869 0.787274 + 1.91434 2.40472 -1.67626 -0.369532 -0.597193 0.711904 + 1.96291 2.45279 -1.60472 -0.393898 -0.47166 0.788911 + 1.62473 2.36295 -1.77831 0.0484259 -0.900565 0.432015 + 1.79798 2.36518 -1.74398 -0.129398 -0.833912 0.536514 + 1.92422 2.34637 -1.7204 -0.339189 -0.744819 0.574626 + 2.04766 2.31797 -1.64221 -0.368673 -0.738629 0.564365 + 2.09623 2.36604 -1.57067 -0.602334 -0.510557 0.613617 + 1.65265 2.34347 -1.83677 0.130695 -0.990335 0.0464219 + 1.82591 2.34578 -1.80238 -0.0669262 -0.994633 -0.0789024 + 1.95638 2.32169 -1.74666 -0.248998 -0.968228 -0.0231163 + 2.07981 2.29329 -1.66846 -0.462743 -0.781348 0.418765 + 1.50851 2.3155 -1.86953 0.405143 -0.898496 0.169011 + 1.73092 2.37115 -1.88572 0.13724 -0.857311 -0.496168 + 1.86741 2.36285 -1.84754 0.0661882 -0.867166 -0.493601 + 1.99788 2.33885 -1.79177 -0.0445374 -0.841804 -0.537942 + 2.0843 2.27043 -1.71266 -0.227093 -0.959056 -0.169234 + 1.58678 2.34309 -1.91852 0.29018 -0.803058 -0.520474 + 1.62731 2.40409 -1.94996 0.152462 -0.552871 -0.8192 + 1.781 2.40746 -1.9224 0.155324 -0.70291 -0.694113 + 1.91748 2.39915 -1.88422 0.193242 -0.633388 -0.749318 + 2.02626 2.35974 -1.81995 0.190851 -0.658213 -0.728239 + 1.42789 2.30996 -1.94454 0.365639 -0.567879 -0.737442 + 1.46842 2.37095 -1.97597 0.247474 -0.328742 -0.911419 + 1.49287 2.45738 -1.97767 0.159663 -0.138554 -0.9774 + 1.66729 2.45157 -1.98061 0.0760049 -0.35324 -0.93244 + 1.82098 2.45494 -1.95305 0.24581 -0.39973 -0.883059 + 1.33128 2.23969 -1.97442 0.638914 -0.433309 -0.635635 + 1.33576 2.3177 -2.00015 0.510398 -0.249068 -0.823079 + 1.36021 2.40413 -2.00185 0.223148 -0.0276724 -0.974392 + 1.53882 2.55361 -1.98375 0.0424011 -0.0418811 -0.998222 + 1.71324 2.5478 -1.98668 0.104952 -0.049717 -0.993234 + 1.25368 2.22285 -2.03966 0.497939 -0.106475 -0.860651 + 1.23734 2.32035 -2.03313 0.301296 0.0518492 -0.95212 + 1.25312 2.43435 -2.02718 0.262671 0.0598724 -0.963026 + 1.37599 2.51822 -1.99585 0.20468 -0.053114 -0.977387 + 1.59413 2.68402 -1.98483 0.0373841 0.0674627 -0.997021 + 1.19226 2.17559 -2.0672 0.601184 0.120441 -0.789982 + 1.17591 2.27308 -2.06065 0.473602 0.0994598 -0.875105 + 1.14108 2.34184 -2.07636 0.518574 0.0935959 -0.849894 + 1.247 2.56125 -2.01139 0.190673 0.0908362 -0.977442 + 1.4313 2.64864 -1.99694 0.082035 0.0206508 -0.996415 + 1.13496 2.46875 -2.06056 0.43331 0.14307 -0.889816 + 1.24444 2.67947 -2.00494 0.0962112 0.107172 -0.989574 + 1.42874 2.76685 -1.99049 0.0697176 0.0429018 -0.996644 + 1.63719 2.8068 -1.96728 0.0934946 0.133542 -0.986623 + 1.75757 2.67228 -1.98008 0.129854 0.0505806 -0.990242 + 1.03319 2.31833 -2.16724 0.60999 0.191388 -0.76895 + 0.996497 2.4102 -2.17036 0.660312 0.207757 -0.721682 + 1.09827 2.56071 -2.06364 0.416426 0.204381 -0.885899 + 0.944732 2.3707 -2.24494 0.850122 0.222017 -0.477494 + 0.986048 2.65546 -2.10375 0.65528 0.197438 -0.729127 + 1.00064 2.76627 -2.06269 0.641548 0.199214 -0.740763 + 1.11286 2.67152 -2.02258 0.301432 0.261851 -0.916827 + 0.956106 2.22434 -2.34064 0.886879 0.336654 -0.316401 + 0.891187 2.40223 -2.36215 0.887693 0.261349 -0.379075 + 0.934283 2.61586 -2.17837 0.808235 0.184166 -0.55932 + 0.975073 2.89702 -2.06695 0.80162 0.0435633 -0.596244 + 0.979776 2.03034 -2.56122 0.892278 0.383864 -0.237672 + 0.902561 2.25588 -2.45786 0.942154 0.269055 -0.199891 + 1.01974 1.93892 -2.55027 0.927369 0.298454 -0.225638 + 0.99941 1.89818 -2.6767 0.931517 0.290391 -0.218971 + 0.980083 1.97465 -2.65517 0.926274 0.326345 -0.188453 + 0.902867 2.20019 -2.5518 0.867913 0.40967 -0.280888 + 0.927778 1.73612 -0.733014 0.982974 0.0857146 0.162528 + 0.509794 2.09676 -0.93526 -0.995136 -0.0926188 0.0335534 + 0.536853 1.93903 -0.89247 -0.976427 -0.130032 0.172286 + 0.557887 1.87741 -0.816744 -0.982702 -0.142523 0.118253 + 0.544984 1.96833 -0.804808 -0.982382 -0.149969 0.111508 + 0.546724 1.84212 -0.915617 -0.973415 -0.176739 0.145692 + 0.567759 1.7805 -0.83989 -0.981761 -0.131877 0.136946 + 0.572445 1.81332 -0.755521 -0.977391 -0.160809 0.137288 + 0.534472 1.87048 -0.966136 -0.95337 -0.223907 0.202362 + 0.565725 1.7357 -0.938079 -0.991994 -0.100695 0.0762124 + 0.584067 1.72863 -0.796446 -0.971245 -0.148662 0.185966 + 0.522692 1.81068 -1.02855 -0.920148 -0.237118 0.311613 + 0.553473 1.76406 -0.988607 -0.948559 -0.222105 0.225623 + 0.52323 1.74945 -1.08691 -0.955974 -0.247696 0.157356 + 0.554011 1.70283 -1.04696 -0.943987 -0.18619 0.272435 + 0.532253 1.62568 -1.14653 -0.992083 -0.125579 0.0011034 + 0.542243 1.62171 -1.22585 -0.779024 -0.341375 -0.525913 + 0.50379 1.84717 -1.33935 0.121064 0.0314344 -0.992147 + 0.516746 1.9941 -1.29365 0.16402 -0.00232964 -0.986454 + 0.531356 2.07762 -1.31671 -0.202793 -0.227498 -0.952428 + 0.4273 1.85751 -1.34046 0.027498 -0.123479 -0.991966 + 0.427977 1.80321 -1.32542 -0.102736 -0.26681 -0.958258 + 0.307145 1.88639 -1.30329 -0.553259 -0.732472 -0.396724 + 0.590096 1.7375 -0.728603 -0.843983 -0.360656 0.397015 + 0.698828 2.11859 0.213736 0.561962 -0.240564 0.791408 + 0.813747 2.21001 0.167185 0.653596 -0.725447 0.215729 + 0.695469 2.2415 0.283044 0.290899 -0.953211 0.0822541 + 0.800807 2.16729 0.143582 0.607242 -0.146729 0.780851 + 0.833698 2.22428 -0.017537 0.954621 -0.287115 -0.0791371 + 0.848062 2.25593 0.053241 0.880113 -0.473604 0.0331692 + 0.820451 2.25574 -0.240823 0.967446 -0.236273 -0.0906826 + 0.779985 2.29664 -0.306655 0.956183 -0.287545 -0.0550654 + 0.776758 2.28597 -0.306972 0.968082 -0.19913 -0.152197 + 0.793378 2.25035 -0.483283 0.94545 -0.290324 0.147773 + 0.796669 2.22433 -0.213417 0.947011 -0.135195 -0.291364 + 0.698168 2.24505 -0.487516 0.871803 -0.482344 -0.0854645 + 0.66343 2.1034 -0.771961 0.850608 -0.481138 0.212067 + 0.690579 2.04601 -0.869965 0.530727 -0.599501 0.599105 + 0.775351 1.95469 -0.938787 -0.535531 -0.562834 0.629622 + 0.652101 2.00956 -0.770023 0.994828 -0.0958681 0.0335539 + 0.65719 1.99449 -0.872528 0.917711 -0.294289 0.266834 + 0.721707 1.96762 -0.977374 0.0359111 -0.684208 0.728403 + 0.763463 1.84218 -1.03071 -0.548072 -0.408358 0.729973 + 0.854714 1.6674 -0.986595 -0.874925 -0.476245 0.0877331 + 0.656367 1.90801 -0.744739 0.998217 -0.05561 0.0216843 + 0.661456 1.89294 -0.847236 0.998215 -0.0245201 0.0544646 + 0.688318 1.91609 -0.979938 0.791239 -0.269277 0.549027 + 0.723897 1.85084 -1.04911 0.281007 -0.228072 0.932211 + 0.641212 1.80309 -0.633011 0.975034 -0.211814 -0.0666538 + 0.588889 1.81998 -0.669658 0.82384 -0.0340243 0.5658 + 0.901206 1.61571 -1.00085 -0.693109 -0.685132 0.224039 + 0.837016 1.7382 -1.03661 -0.749239 -0.647207 0.140586 + 0.901206 1.61571 -1.00085 -0.715932 -0.513342 -0.473204 + 0.757834 2.14915 0.186202 -0.425153 0.00538387 -0.905105 + -1.17764 2.27532 0.212466 0.843377 -0.296139 -0.44835 + -1.31347 2.12724 0.109754 0.793546 -0.285467 -0.537395 + -1.33453 2.06406 0.095774 0.606277 -0.214905 -0.765666 + -1.30196 1.97625 0.143271 0.467733 -0.51259 -0.720054 + -1.39275 1.95991 0.121567 0.251253 -0.663219 -0.704991 + -1.21767 2.18061 0.184507 0.765395 -0.119622 -0.632346 + -1.31516 1.94747 0.173919 -0.0441729 -0.69767 -0.715056 + -1.18685 2.17753 0.247647 0.923516 -0.216905 -0.316341 + -1.19064 2.1133 0.362099 0.999487 -0.00202297 0.0319622 + -1.18731 2.03749 0.39659 0.788496 0.538188 0.297704 + -1.02369 1.81801 0.51875 0.769241 0.630648 0.102723 + -0.748335 1.58493 -1.27294 -0.139546 0.986449 -0.086292 + -0.748272 1.58103 -1.31759 -0.185898 0.978822 -0.0857284 + -0.711105 1.59853 -1.28851 -0.687442 0.724761 -0.0463128 + -0.711042 1.59463 -1.33315 -0.839139 0.541748 -0.0485361 + -0.699505 1.64767 -1.36081 -0.954206 0.293462 0.0580593 + -0.697709 1.64323 -1.30433 -0.948507 0.311161 0.059277 + -0.686108 1.69237 -1.37664 -0.928851 0.353046 0.112224 + -0.692772 1.67708 -1.37616 -0.851335 0.382325 0.359245 + -0.636581 1.83901 -1.44743 -0.928226 0.359568 0.0954311 + -0.220308 2.03334 -3.02461 -0.0801513 -0.938798 -0.335013 + -0.261303 1.99187 -2.98179 -0.187502 0.265591 -0.945677 + -0.284575 2.00426 -2.96885 -0.568285 -0.248324 -0.784466 + -0.199306 2.0285 -3.02623 0.045883 -0.866926 -0.49632 + -0.240301 1.98703 -2.9834 0.0570533 -0.00749639 -0.998343 + -0.263765 1.97714 -2.99568 0.119604 0.938579 -0.323671 + -0.28691 1.98164 -2.99787 0.221935 0.934964 -0.276743 + -0.284575 2.00426 -2.96885 0.0737328 0.783795 -0.616627 + -0.310183 1.99395 -2.98499 0.176062 0.959149 -0.221438 + -0.173526 2.0323 -3.02582 -0.133698 -0.964241 -0.228831 + -0.201346 1.98642 -2.97515 0.0163988 0.130809 -0.991272 + -0.22481 1.97654 -2.98743 0.0130636 0.940518 -0.339493 + -0.231446 2.02897 -3.02385 0.407855 -0.903828 -0.129423 + -0.306462 1.97626 -2.97875 0.483915 -0.866438 0.122931 + -0.284575 2.00426 -2.96885 0.366653 -0.928229 -0.0628972 + -0.295713 1.99981 -2.96814 0.652643 -0.62387 0.429933 + -0.320303 1.98989 -2.94595 0.796372 0.0261013 0.604244 + -0.331051 1.96634 -2.95656 0.0622725 -0.929419 0.363734 + -0.350253 1.97577 -2.9623 -0.583802 -0.743936 0.32517 + -0.39796 2.02379 -2.97147 -0.488138 -0.872068 0.0348973 + -0.328944 1.99242 -2.93294 0.649816 -0.538453 0.536477 + -0.328944 1.99242 -2.93294 -0.479139 -0.567698 0.669435 + -0.348145 2.00185 -2.93868 -0.745905 -0.657938 0.103655 + -0.356668 2.00434 -2.92579 -0.528691 -0.481318 -0.699156 + -0.384464 1.98607 -2.91054 -0.263055 -0.0453457 -0.963715 + -0.406745 1.97654 -2.90444 0.132234 -0.729845 -0.670702 + -0.343375 1.99505 -2.9427 -0.310433 0.919121 -0.242588 + -0.371171 1.97686 -2.92739 -0.5188 0.766889 -0.377794 + -0.397431 1.96752 -2.926 -0.320649 0.923092 -0.212335 + -0.406745 1.97654 -2.90444 -0.373183 0.765303 -0.524448 + -0.423478 1.96208 -2.9154 -0.262391 0.919116 -0.293898 + -0.44583 1.96623 -2.90117 0.0398298 0.040284 -0.998394 + -0.3657 1.98304 -2.9843 -0.421775 0.906457 0.0210142 + -0.391961 1.97369 -2.9829 -0.274839 0.958352 0.0776163 + -0.436121 1.96423 -2.9789 -0.185733 0.979741 0.0749052 + -0.462167 1.9588 -2.9683 -0.107238 0.990077 0.0908189 + -0.462562 1.95177 -2.91213 -0.169802 0.837056 -0.520101 + -0.346889 1.99167 -3.01484 -0.431965 0.897309 -0.0907949 + -0.329296 2.00112 -2.94802 0.155097 0.954334 0.255325 + -0.33281 1.99774 -3.02016 -0.15277 0.971756 -0.179863 + -0.322338 1.99302 -3.04417 0.20789 0.978012 -0.016584 + -0.328944 1.99242 -2.93294 0.0265057 0.974311 0.223643 + -0.348145 2.00185 -2.93868 0.494962 0.672361 -0.550403 + -0.477678 1.9723 -2.91668 0.0749566 -0.666881 -0.741385 + -0.504744 1.95583 -2.89736 -0.102313 -0.786442 -0.609132 + -0.484424 1.94554 -2.89294 -0.26841 -0.643287 -0.717034 + -0.52042 1.93869 -2.87167 -0.247113 -0.751105 -0.61219 + -0.54074 1.94898 -2.8761 -0.210205 -0.847566 -0.487284 + -0.573469 1.94957 -2.85811 -0.305937 -0.909683 -0.280856 + -0.614905 1.97986 -2.91918 -0.288926 -0.901819 -0.321317 + -0.534839 1.92882 -2.85178 -0.180211 -0.946202 -0.26875 + -0.558772 1.93836 -2.83091 -0.386603 -0.913903 -0.12377 + -0.642788 1.97122 -2.85022 -0.298621 -0.904674 -0.303957 + -0.532448 1.92559 -2.83099 -0.948828 -0.290266 -0.124383 + -0.556381 1.93513 -2.81012 -0.433795 -0.829294 -0.352268 + -0.628091 1.96002 -2.82302 -0.0925388 -0.917999 -0.385634 + -0.175566 1.99014 -2.97479 0.120543 -0.767637 -0.629447 + -0.136983 2.00247 -2.98235 -0.245385 -0.883166 -0.399754 + -0.128457 1.99899 -2.99252 -0.691513 -0.559645 0.456735 + -0.165001 2.02874 -3.03604 -0.37203 -0.914019 -0.16175 + -0.141836 1.9697 -3.01698 -0.780814 -0.624578 0.0152173 + -0.122047 1.95724 -3.0106 0.074926 -0.997181 0.00405767 + -0.108668 1.98654 -2.98615 -0.502205 -0.407388 0.762774 + -0.156423 2.02915 -3.04175 -0.116466 -0.596074 -0.794438 + -0.133259 1.97002 -3.02274 -0.0161232 -0.519196 -0.854503 + -0.082769 1.99305 -3.00163 0.425325 -0.744893 -0.514035 + -0.108668 1.98654 -2.98615 0.495081 -0.678801 0.542331 + -0.175985 2.10943 -3.08141 -0.278335 -0.390708 -0.877426 + -0.150816 2.0951 -3.08878 -0.523344 -0.335971 -0.783093 + -0.132025 2.07441 -3.09614 -0.524532 -0.425441 -0.737473 + -0.123316 2.05662 -3.08433 -0.260741 -0.778195 -0.571338 + -0.133336 2.04513 -3.05403 0.18847 -0.879113 -0.437768 + -0.093982 2.00583 -3.01377 0.0960676 -0.528986 -0.843176 + -0.185473 2.19701 -3.11309 -0.204291 -0.571278 -0.794925 + -0.140105 2.18376 -3.12234 -0.396297 -0.501788 -0.768868 + -0.114936 2.16933 -3.12975 -0.540457 -0.385614 -0.747802 + -0.083959 2.13644 -3.14199 -0.599683 -0.300588 -0.741639 + -0.065169 2.11575 -3.14936 -0.595133 -0.265103 -0.758641 + -0.217725 2.19464 -3.10718 0.00753708 -0.589024 -0.80808 + -0.182079 2.23311 -3.15402 -0.14078 -0.881711 -0.450296 + -0.136711 2.21986 -3.16327 -0.38733 -0.796874 -0.463646 + -0.238982 2.22262 -3.14485 0.191657 -0.861874 -0.469512 + -0.191271 2.24886 -3.2109 -0.0616488 -0.957934 -0.280289 + -0.129043 2.23586 -3.21559 -0.216743 -0.924201 -0.314443 + -0.248174 2.23837 -3.20173 0.268604 -0.92598 -0.265356 + -0.318018 2.1931 -3.18552 0.556114 -0.806754 -0.199714 + -0.350353 2.16381 -3.16919 0.590012 -0.775904 -0.223291 + -0.035427 2.13561 -3.18694 -0.682214 -0.458894 -0.56921 + -0.039535 2.08549 -3.15914 -0.379286 -0.54305 -0.749159 + -0.030826 2.06779 -3.14729 -0.13509 -0.749882 -0.647632 + -0.030826 2.04626 -3.10218 -0.0590464 -0.87446 -0.48149 + 0.039576 2.08557 -3.15907 0.379912 -0.542272 -0.749405 + 0.030828 2.06779 -3.14728 0.135537 -0.748663 -0.648948 + 0.030828 2.04626 -3.10218 0.081593 -0.911789 -0.402473 + 0.132066 2.0744 -3.09612 0.526476 -0.445916 -0.723866 + 0.123318 2.05662 -3.08433 0.411402 -0.759432 -0.503996 + 0.133336 2.04513 -3.05403 -0.0332632 -0.814664 -0.578979 + 0.070894 2.02181 -3.02604 0.351005 -0.486734 -0.799928 + 0.021963 2.02879 -3.08313 0.527441 -0.660561 -0.534289 + 0.150823 2.095 -3.08881 0.524743 -0.335332 -0.78243 + 0.175985 2.10953 -3.08138 0.278799 -0.389795 -0.877685 + 0.208237 2.10715 -3.07546 -0.0254115 -0.317133 -0.94804 + 0.114943 2.16932 -3.12973 0.540321 -0.3855 -0.747959 + 0.140105 2.18376 -3.12235 0.396281 -0.501989 -0.768744 + 0.185474 2.19702 -3.11311 0.204268 -0.571453 -0.794805 + 0.217725 2.19464 -3.10718 -0.00740461 -0.58899 -0.808106 + 0.088709 2.19606 -3.17486 0.617181 -0.628128 -0.47386 + 0.136709 2.21986 -3.16327 0.403162 -0.780595 -0.477631 + 0.182078 2.23311 -3.15402 0.126937 -0.876067 -0.465181 + 0.238985 2.22262 -3.14485 -0.222732 -0.863119 -0.453228 + 0.268534 2.17222 -3.09796 -0.236088 -0.484316 -0.842437 + 0.129042 2.23586 -3.21559 0.442592 -0.837313 -0.320967 + 0.080404 2.00707 -3.02371 0.558278 0.234857 -0.795718 + -0.129043 2.23586 -3.21559 -0.481621 -0.815823 -0.320117 + -0.080403 2.00708 -3.02372 -0.318263 -0.784542 -0.532167 + -0.596777 1.8903 -2.71226 0.637413 0.71044 0.298295 + -0.568869 1.86808 -2.71897 0.520562 0.793228 0.315919 + -0.554396 1.87296 -2.73803 -0.755406 0.513444 -0.407108 + -0.548043 1.89701 -2.80889 -0.412445 0.871443 0.265473 + -0.540993 1.91304 -2.85124 0.186979 0.908097 0.374698 + -0.539497 1.90957 -2.78863 -0.925256 -0.210189 -0.315789 + -0.540993 1.91304 -2.85124 -0.837668 0.545976 0.0149386 + -0.52297 1.93907 -2.90713 -0.555133 0.830707 0.0418757 + -0.575518 1.88522 -2.73566 -0.394493 -0.738218 -0.547184 + -0.56062 1.92182 -2.78625 -0.348486 -0.763191 -0.544148 + -0.568869 1.86808 -2.71897 -0.485676 -0.739604 -0.465945 + -0.589813 1.88044 -2.71658 -0.456706 -0.852813 0.253238 + -0.596777 1.8903 -2.71226 -0.205753 -0.510838 0.834691 + -0.61772 1.90266 -2.70986 -0.369921 -0.770768 -0.518724 + -0.654387 1.90403 -2.71624 0.15042 -0.886631 -0.437332 + -0.596777 1.8903 -2.71226 -0.363154 -0.457952 -0.811418 + 0.700788 1.60693 -3.09201 -0.935445 0.353103 0.0161381 + 0.700286 1.60496 -3.09226 -0.953977 0.189685 0.232263 + 0.713785 1.62766 -3.06485 -0.678695 0.713623 -0.173537 + 0.714287 1.62963 -3.06459 -0.919041 0.367061 0.143628 + 0.719965 1.63784 -3.07821 -0.830357 0.549801 -0.0906978 + 0.721527 1.63887 -3.08342 -0.817532 0.567644 -0.097067 + 0.702351 1.60795 -3.09721 -0.830406 0.556598 -0.0249845 + 0.700286 1.60496 -3.09226 -0.895389 0.430489 -0.113827 + 0.698218 1.60237 -3.10074 -0.935982 0.331597 -0.118238 + 0.735808 1.65866 -3.01872 -0.666743 0.734097 -0.128668 + 0.740829 1.67833 -3.01615 -0.863698 0.403629 0.301843 + 0.746507 1.68655 -3.02977 -0.771492 0.635909 -0.0205227 + 0.723359 1.65031 -3.03058 0.138716 0.819181 -0.556508 + 0.726764 1.6649 -3.00715 -0.0995092 0.980206 -0.171155 + 0.762929 1.68282 -2.988 -0.638984 0.39098 0.662445 + 0.76795 1.70249 -2.98543 -0.594273 0.5275 0.607111 + 0.701336 1.61931 -3.07671 0.328939 0.679388 -0.655921 + 0.683112 1.63959 -3.07115 -0.224761 0.653228 -0.723032 + 0.686517 1.65418 -3.04772 -0.11062 0.929914 -0.350747 + 0.710988 1.66406 -2.99897 -0.186712 0.974499 0.124456 + 0.744332 1.65545 -2.97188 -0.17084 0.85622 0.487546 + 0.700286 1.60496 -3.09226 0.159707 0.720202 -0.675132 + 0.697173 1.59291 -3.09688 -0.813514 0.116336 -0.56979 + 0.695999 1.5703 -3.11698 -0.986078 0.14171 -0.0869993 + 0.694954 1.56084 -3.11312 -0.978094 0.0883813 -0.188468 + 0.689663 1.57411 -3.09402 -0.741581 0.095203 -0.664074 + 0.688751 1.58509 -3.09346 -0.48378 0.0783975 -0.871671 + 0.696261 1.60389 -3.09632 -0.180911 0.450164 -0.874428 + 0.700286 1.60496 -3.09226 0.546028 0.497951 -0.67372 + 0.710325 1.62074 -3.11096 -0.879374 0.475627 -0.0219122 + 0.699405 1.57794 -3.14714 -0.888559 0.212688 -0.406482 + 0.694389 1.50268 -3.15615 -0.90074 0.0799559 -0.426936 + 0.68896 1.48336 -3.10853 -0.982827 0.0246061 -0.182883 + 0.683668 1.49664 -3.08943 -0.944176 -0.0217137 -0.328724 + 0.714458 1.62632 -3.10743 -0.825696 0.563977 0.0124751 + 0.755063 1.6842 -3.10586 -0.76741 0.630373 -0.117099 + 0.713731 1.62839 -3.14112 -0.831432 0.433017 -0.348163 + 0.724048 1.56911 -3.1729 -0.410332 0.178925 -0.894211 + 0.762133 1.69675 -3.08184 -0.736743 0.668983 -0.0983438 + 0.773682 1.70236 -3.1145 -0.399395 0.788765 -0.467262 + 0.73235 1.64655 -3.14976 -0.520148 0.581192 -0.625829 + 0.77521 1.71429 -3.01999 -0.440014 0.893548 0.0892177 + 0.790836 1.72448 -3.07206 -0.25334 0.960429 -0.115734 + 0.80354 1.71436 -3.10247 0.135789 0.848434 -0.511588 + 0.805723 1.6918 -3.12458 0.128472 0.662692 -0.73779 + 0.775865 1.6798 -3.13661 -0.0676384 0.598624 -0.798169 + 0.784145 1.71184 -2.99598 -0.230467 0.940921 0.248098 + 0.818774 1.72266 -3.0542 0.157211 0.987058 -0.0316526 + 0.831478 1.71254 -3.0846 0.385266 0.855034 -0.347111 + 0.810379 1.70534 -2.96548 -0.260932 0.717954 0.645334 + 0.826574 1.71469 -2.97603 0.12208 0.899702 0.419085 + 0.827708 1.72022 -3.03019 0.140143 0.986952 0.0792875 + 0.8513 1.71244 -3.03504 0.561292 0.827393 -0.0192898 + 0.76146 1.66694 -2.97721 -0.365876 0.625914 0.688743 + 0.80891 1.68947 -2.95469 -0.526387 0.535264 0.660613 + 0.819506 1.67489 -2.93533 -0.0602987 0.583959 0.80954 + 0.850166 1.70692 -2.98088 0.568615 0.745217 0.348323 + 0.767406 1.65093 -2.95128 -0.464066 0.686456 0.559841 + 0.772151 1.65318 -2.94903 -0.503024 0.628014 0.593772 + 0.782747 1.63861 -2.92967 -0.368758 0.557467 0.743806 + 0.750278 1.63944 -2.94596 0.0209299 0.823393 0.567086 + 0.759055 1.63552 -2.94107 -0.235389 0.788655 0.567992 + 0.7638 1.63777 -2.93882 -0.437651 0.643943 0.627535 + 0.780306 1.6323 -2.92608 -0.288204 0.647061 0.705868 + 0.815706 1.62228 -2.90612 0.124878 0.479006 0.868883 + 0.728557 1.65461 -2.9637 -0.00793514 0.907688 0.419572 + 0.750129 1.63638 -2.94029 0.18042 0.860595 0.476262 + 0.758906 1.63246 -2.93541 0.0561691 0.788152 0.612912 + 0.76136 1.63146 -2.93523 -0.0293958 0.697708 0.715779 + 0.70868 1.65059 -2.96396 -0.341861 0.822352 0.454827 + 0.742838 1.62485 -2.91521 -0.0152496 0.78271 0.6222 + 0.760134 1.62211 -2.92016 0.272579 0.828643 0.488929 + 0.762588 1.62112 -2.91999 0.0550852 0.817751 0.572931 + 0.795101 1.61183 -2.89945 -0.0469307 0.49094 0.869929 + 0.695763 1.65722 -2.99638 -0.454934 0.8663 0.206297 + 0.678778 1.63089 -2.96438 -0.758219 0.422261 0.496789 + 0.722961 1.62083 -2.91547 -0.40496 0.522384 0.750415 + 0.727908 1.5947 -2.90265 -0.623075 0.124454 0.772197 + 0.752843 1.61059 -2.89508 -0.094553 0.654026 0.75054 + 0.671291 1.64734 -3.04513 -0.759618 0.620622 -0.194444 + 0.665861 1.63752 -2.9968 -0.852983 0.476924 0.212044 + 0.683725 1.60477 -2.95156 -0.787319 0.0556653 0.614028 + 0.666173 1.60744 -3.06324 -0.955854 0.117315 -0.269407 + 0.660742 1.59762 -3.01491 -0.998913 0.0453507 0.0107923 + 0.670611 1.58683 -2.96985 -0.881131 -0.00980823 0.47277 + 0.72847 1.54609 -2.91265 -0.675457 -0.182414 0.714481 + 0.674551 1.60644 -3.08384 -0.623596 0.24512 -0.742324 + 0.67529 1.49763 -3.06883 -0.955341 -0.109941 -0.274294 + 0.675092 1.47307 -3.05471 -0.978055 -0.0556893 -0.200764 + 0.660545 1.57306 -3.00079 -0.991605 -0.0224113 0.127348 + 0.697311 1.61823 -3.08077 0.197968 0.57859 -0.791229 + 0.679223 1.43047 -3.06729 -0.978327 -0.0415076 -0.202863 + 0.665383 1.50919 -3.00677 -0.978842 -0.141584 0.147721 + 0.68851 1.41049 -3.11426 -0.989145 -0.0619066 -0.133268 + 0.686728 1.39615 -3.08333 -0.976048 -0.109724 -0.187857 + 0.677067 1.40267 -3.05111 -0.965029 -0.234309 0.117556 + 0.669514 1.46659 -3.01935 -0.966267 -0.184369 0.179824 + 0.693939 1.4298 -3.16189 -0.896329 -0.00861553 -0.443306 + 0.69819 1.36955 -3.16113 -0.898081 -0.0640788 -0.435136 + 0.694726 1.36325 -3.12214 -0.991672 -0.0822054 -0.0991424 + 0.692944 1.34892 -3.0912 -0.989454 -0.142851 -0.0239792 + 0.684572 1.36835 -3.06714 -0.954512 -0.289552 0.0711758 + 0.716485 1.43006 -3.18433 -0.41442 0.0047709 -0.910073 + 0.720736 1.36981 -3.18358 -0.373408 -0.0469636 -0.926478 + 0.719922 1.28898 -3.17817 -0.383264 -0.0664205 -0.921248 + 0.70197 1.28763 -3.1606 -0.897244 -0.0481392 -0.438902 + 0.698506 1.28133 -3.1216 -0.997817 -0.0432214 -0.0499371 + 0.719033 1.49384 -3.18192 -0.392002 0.0949836 -0.915048 + 0.76129 1.40878 -3.18738 -0.0326972 -0.0248075 -0.999157 + 0.757219 1.36651 -3.18369 -0.0128779 -0.0681832 -0.99759 + 0.756405 1.28568 -3.17829 0.016686 -0.0727226 -0.997213 + 0.763838 1.47256 -3.18497 -0.0105868 0.0574224 -0.998294 + 0.801582 1.39762 -3.18654 0.0371262 -0.0345071 -0.998715 + 0.797511 1.35535 -3.18285 0.0453096 -0.0904423 -0.994871 + 0.788812 1.28247 -3.17667 0.063947 -0.0823329 -0.994551 + 0.750995 1.17563 -3.16969 0.0160812 -0.061235 -0.997994 + 0.769195 1.54989 -3.17987 -0.0249877 0.120279 -0.992426 + 0.813673 1.53427 -3.17938 0.135486 0.108803 -0.984787 + 0.808316 1.45694 -3.18447 0.0694908 0.0581577 -0.995886 + 0.845832 1.38144 -3.18374 0.354266 -0.143398 -0.924085 + 0.833141 1.35149 -3.17915 0.320905 -0.185374 -0.928793 + 0.733622 1.62154 -3.16383 -0.453746 0.321119 -0.831263 + 0.778768 1.60233 -3.1708 0.028152 0.253517 -0.966921 + 0.813206 1.60082 -3.16797 0.137868 0.242546 -0.960294 + 0.857387 1.52845 -3.17019 0.451533 0.117568 -0.884475 + 0.852566 1.44075 -3.18167 0.38889 0.0403665 -0.9204 + 0.777137 1.65479 -3.15069 0.0154395 0.445613 -0.895093 + 0.811574 1.65329 -3.14786 0.0838981 0.451101 -0.88852 + 0.846504 1.64373 -3.14987 0.395785 0.395273 -0.828923 + 0.85692 1.595 -3.15879 0.495367 0.203617 -0.844483 + 0.840653 1.68224 -3.12658 0.376947 0.648321 -0.661506 + 0.863912 1.67388 -3.10907 0.737494 0.536513 -0.41019 + 0.874516 1.63969 -3.12224 0.81587 0.337792 -0.469312 + 0.884932 1.59097 -3.13117 0.835199 0.198623 -0.512827 + 0.886875 1.52234 -3.145 0.822874 0.0787617 -0.562739 + 0.854737 1.70418 -3.06709 0.646513 0.730064 -0.221421 + 0.88195 1.67248 -3.04744 0.888013 0.448523 -0.101287 + 0.892555 1.63829 -3.06061 0.964454 0.25371 -0.0738963 + 0.9003 1.5916 -3.08948 0.971079 0.174759 -0.162678 + 0.902243 1.52298 -3.10331 0.984157 0.0188288 -0.176299 + 0.878514 1.68074 -3.01539 0.886186 0.445666 0.126712 + 0.876869 1.66136 -2.98761 0.895263 0.283128 0.344008 + 0.883256 1.63656 -2.98772 0.932162 0.174993 0.316941 + 0.892188 1.60638 -3.01517 0.978727 0.081796 0.188154 + 0.899933 1.55969 -3.04404 0.986329 -0.0091884 0.164535 + 0.848521 1.68754 -2.95309 0.492205 0.602971 0.627822 + 0.844721 1.63493 -2.92389 0.598312 0.288512 0.747518 + 0.851108 1.61012 -2.92401 0.745631 0.174029 0.643232 + 0.874069 1.58832 -2.95356 0.882402 -0.00570791 0.470462 + 0.883002 1.55814 -2.981 0.923409 -0.11779 0.365297 + 0.833524 1.59783 -2.90054 0.519677 0.0550165 0.85259 + 0.856485 1.57603 -2.93009 0.743148 -0.15405 0.651153 + 0.853575 1.52989 -2.94193 0.746095 -0.207528 0.632672 + 0.874246 1.48103 -2.99973 0.894297 -0.167073 0.415113 + 0.812919 1.58737 -2.89387 0.217734 -0.0105637 0.975951 + 0.810009 1.54124 -2.90571 0.519032 -0.208213 0.829007 + 0.805551 1.45534 -2.91908 0.568426 -0.228602 0.790337 + 0.844819 1.45278 -2.96066 0.768549 -0.257066 0.585874 + 0.876418 1.43272 -3.02103 0.869527 -0.188582 0.456465 + 0.781249 1.53134 -2.89374 0.151456 -0.184957 0.971006 + 0.776791 1.44544 -2.90711 -0.328562 -0.252617 0.910072 + 0.792961 1.41006 -2.92624 0.171971 -0.606728 0.776085 + 0.832229 1.40751 -2.96782 0.673481 -0.419816 0.608422 + 0.777383 1.60064 -2.89336 0.200314 0.424396 0.883042 + 0.775356 1.57809 -2.88406 0.480751 0.039515 0.875966 + 0.75727 1.49267 -2.90546 -0.343978 -0.301939 0.889108 + 0.768564 1.43061 -2.9253 -0.541749 -0.438385 0.717166 + 0.784733 1.39524 -2.94443 -0.0485043 -0.694091 0.718251 + 0.750816 1.58804 -2.88577 -0.300059 0.114674 0.947003 + 0.751378 1.53942 -2.89578 -0.395611 -0.215859 0.892691 + 0.715355 1.52815 -2.93095 -0.702633 -0.207871 0.680512 + 0.728331 1.47624 -2.93836 -0.6625 -0.305273 0.684033 + 0.675449 1.52296 -2.97583 -0.831941 -0.184289 0.523365 + 0.688425 1.47104 -2.98324 -0.771179 -0.302461 0.560179 + 0.739624 1.41418 -2.9582 -0.654186 -0.363178 0.663433 + 0.746833 1.36701 -2.97759 -0.511635 -0.444488 0.735296 + 0.786007 1.36963 -2.96497 0.141565 -0.554925 0.819767 + 0.695978 1.40712 -3.015 -0.773997 -0.350969 0.527019 + 0.703187 1.35996 -3.03439 -0.784807 -0.400852 0.472648 + 0.715481 1.33661 -3.03751 -0.813503 -0.266747 0.516778 + 0.744527 1.32767 -3.00042 -0.587356 -0.254346 0.768323 + 0.783702 1.33029 -2.9878 0.120904 -0.3648 0.923203 + 0.696866 1.34501 -3.07027 -0.914946 -0.298987 0.271072 + 0.70283 1.27277 -3.07349 -0.940969 -0.060861 0.332976 + 0.717646 1.267 -3.04741 -0.837119 -0.0682182 0.54275 + 0.746692 1.25807 -3.01032 -0.555269 -0.103092 0.825256 + 0.698909 1.27668 -3.09442 -0.99453 -0.0551595 0.0887001 + 0.701586 1.16723 -3.09375 -0.993417 -0.0329606 0.109707 + 0.705499 1.16387 -3.07604 -0.935535 -0.0353781 0.351458 + 0.720315 1.1581 -3.04997 -0.833832 -0.0353227 0.550887 + 0.701184 1.17188 -3.12093 -0.998571 -0.0322023 -0.0426532 + 0.705125 1.06853 -3.11732 -0.997987 -0.050053 -0.038954 + 0.705752 1.06448 -3.09411 -0.992409 -0.0495043 0.112581 + 0.709665 1.06112 -3.07641 -0.940536 -0.0444678 0.336771 + 0.703946 1.17691 -3.15202 -0.905141 -0.0426522 -0.422967 + 0.707888 1.07356 -3.14842 -0.924691 -0.0569793 -0.376429 + 0.713241 0.976547 -3.1442 -0.925466 -0.0642167 -0.373347 + 0.710884 0.972315 -3.11638 -0.997643 -0.0566793 -0.0386713 + 0.711511 0.968265 -3.09316 -0.991721 -0.0556331 0.115734 + 0.721898 1.17826 -3.1696 -0.37877 -0.0602308 -0.923529 + 0.72109 1.07123 -3.16464 -0.444997 -0.0453588 -0.894383 + 0.726443 0.974225 -3.16042 -0.580861 -0.0676771 -0.811184 + 0.726527 0.875771 -3.15145 -0.634698 -0.105587 -0.765512 + 0.718143 0.880408 -3.13907 -0.941296 -0.073221 -0.329545 + 0.750186 1.0686 -3.16473 0.00844807 -0.0177461 -0.999807 + 0.745035 0.958311 -3.16628 -0.162641 -0.0515508 -0.985338 + 0.745119 0.859859 -3.15731 -0.234301 -0.1429 -0.961604 + 0.775266 1.06278 -3.16408 0.066902 -0.0214768 -0.997528 + 0.770114 0.952483 -3.16563 0.12031 -0.0438588 -0.991767 + 0.762232 0.852825 -3.15737 0.0680338 -0.151879 -0.986055 + 0.741544 0.769971 -3.13812 -0.229043 -0.313945 -0.9214 + 0.783401 1.17241 -3.16807 0.0703857 -0.0614228 -0.995627 + 0.803682 1.05969 -3.16112 0.403698 -0.0536019 -0.913321 + 0.794329 0.950801 -3.16004 0.448426 -0.070075 -0.891069 + 0.786447 0.851142 -3.15179 0.445215 -0.1548 -0.881941 + 0.811817 1.16932 -3.16512 0.379728 -0.0883243 -0.920872 + 0.821023 1.05585 -3.14529 0.832958 -0.0870153 -0.546451 + 0.81167 0.946961 -3.14421 0.831544 -0.1018 -0.54605 + 0.79914 0.848498 -3.14022 0.814522 -0.168242 -0.555201 + 0.772999 0.76158 -3.13749 0.3191 -0.328354 -0.889021 + 0.824442 1.2786 -3.17296 0.37599 -0.116431 -0.91928 + 0.845429 1.27364 -3.155 0.805996 -0.155493 -0.571132 + 0.832804 1.16437 -3.14715 0.821373 -0.116734 -0.558319 + 0.829853 1.05014 -3.11636 0.987854 -0.100336 -0.118644 + 0.819573 0.942088 -3.11833 0.985848 -0.111342 -0.125325 + 0.859534 1.34392 -3.15667 0.764696 -0.290696 -0.575096 + 0.856502 1.26648 -3.11872 0.976875 -0.167397 -0.133013 + 0.841635 1.15865 -3.11822 0.984171 -0.123086 -0.127505 + 0.82755 1.04513 -3.0913 0.963053 -0.112741 0.244577 + 0.872225 1.37387 -3.16127 0.786749 -0.240202 -0.568621 + 0.870607 1.33676 -3.1204 0.940795 -0.305928 -0.145988 + 0.85376 1.26113 -3.08574 0.959641 -0.168593 0.225091 + 0.838893 1.1533 -3.08524 0.962827 -0.122529 0.240728 + 0.882054 1.43465 -3.15648 0.83209 -0.0378242 -0.553349 + 0.886844 1.37081 -3.11415 0.952646 -0.281034 -0.116129 + 0.883944 1.37025 -3.07144 0.917392 -0.326949 0.226926 + 0.867707 1.3362 -3.07768 0.917191 -0.337814 0.211289 + 0.896673 1.43159 -3.10936 0.982078 -0.104648 -0.156752 + 0.896536 1.41999 -3.07138 0.969828 -0.170033 0.174707 + 0.863826 1.38298 -3.02108 0.785117 -0.292005 0.546191 + 0.850533 1.33146 -3.04056 0.798927 -0.312346 0.513961 + 0.836586 1.25639 -3.04862 0.825092 -0.166957 0.539767 + 0.902105 1.51138 -3.06534 0.985669 -0.0539359 0.159834 + 0.833503 1.38189 -2.98836 0.630331 -0.412928 0.657399 + 0.82021 1.33037 -3.00783 0.585936 -0.318945 0.744952 + 0.812463 1.25423 -3.02293 0.611503 -0.165467 0.773747 + 0.775955 1.25415 -3.0029 0.109863 -0.155232 0.98175 + 0.771958 1.1473 -3.01397 0.127433 -0.105463 0.986224 + 0.801073 1.14736 -3.02995 0.608752 -0.121245 0.784041 + 0.825197 1.14953 -3.05563 0.828094 -0.122487 0.547044 + 0.742695 1.15122 -3.02139 -0.556495 -0.059617 0.82871 + 0.742493 1.04514 -3.02834 -0.503241 -0.0782431 0.860597 + 0.764642 1.03836 -3.02585 0.173733 -0.123124 0.977066 + 0.793758 1.03842 -3.04183 0.603302 -0.134541 0.786082 + 0.813854 1.04135 -3.06169 0.816734 -0.131012 0.561945 + 0.720112 1.05203 -3.05692 -0.845027 -0.0437517 0.532931 + 0.725672 0.955581 -3.05743 -0.855401 -0.0455373 0.515961 + 0.737453 0.933047 -3.04199 -0.535915 -0.0780239 0.840659 + 0.759602 0.926263 -3.03951 0.239594 -0.123193 0.963025 + 0.715225 0.964675 -3.07691 -0.940826 -0.0548141 0.334429 + 0.720464 0.869428 -3.07741 -0.946526 -0.0502731 0.318686 + 0.726842 0.85972 -3.0645 -0.874596 -0.0557324 0.481638 + 0.738623 0.837186 -3.04907 -0.49374 -0.0934459 0.864574 + 0.716751 0.87302 -3.09366 -0.990353 -0.0518002 0.128522 + 0.721533 0.778315 -3.0923 -0.980171 -0.096369 0.173143 + 0.72532 0.775814 -3.08118 -0.934154 -0.102162 0.341935 + 0.731699 0.766105 -3.06827 -0.892646 -0.112527 0.436486 + 0.715786 0.876178 -3.11125 -0.998312 -0.0529804 -0.0237958 + 0.720568 0.781473 -3.10989 -0.994763 -0.0961929 -0.0345456 + 0.727586 0.728534 -3.09845 -0.753101 -0.657734 -0.0149931 + 0.731373 0.726032 -3.08733 -0.896027 -0.413148 0.162615 + 0.73793 0.755901 -3.05943 -0.54205 -0.217014 0.811841 + 0.721855 0.783783 -3.12507 -0.940259 -0.127966 -0.315497 + 0.728872 0.730843 -3.11363 -0.753535 -0.485996 -0.442711 + 0.740176 0.721669 -3.11429 -0.43502 -0.711477 -0.551867 + 0.737605 0.715827 -3.07849 -0.610775 -0.681908 0.402436 + 0.752399 0.748231 -3.05953 0.131267 -0.282889 0.950128 + 0.73024 0.779145 -3.13746 -0.562717 -0.215037 -0.798191 + 0.758657 0.762938 -3.13818 -0.0637806 -0.337891 -0.939022 + 0.755709 0.715314 -3.11404 -0.172974 -0.796798 -0.578958 + 0.753137 0.709472 -3.07824 -0.0550107 -0.868767 0.492156 + 0.770051 0.713956 -3.11335 0.358864 -0.751013 -0.554252 + 0.767678 0.70932 -3.08482 0.434262 -0.824148 0.363588 + 0.76694 0.74808 -3.06611 0.533913 -0.219183 0.816637 + 0.778414 0.831733 -3.06725 0.635848 -0.103489 0.764845 + 0.753092 0.829517 -3.04917 0.274375 -0.12115 0.953961 + 0.785692 0.758936 -3.12592 0.779881 -0.303731 -0.547296 + 0.790005 0.756277 -3.1118 0.946459 -0.280706 -0.159434 + 0.774364 0.711295 -3.09923 0.611396 -0.790103 -0.0439523 + 0.78164 0.750508 -3.07983 0.799905 -0.22335 0.557016 + 0.807043 0.843624 -3.11434 0.978606 -0.1607 -0.128475 + 0.805363 0.839829 -3.09679 0.935664 -0.144888 0.321777 + 0.788325 0.752482 -3.09424 0.941537 -0.257519 0.217237 + 0.793113 0.83416 -3.08097 0.749946 -0.104536 0.653187 + 0.81727 0.937079 -3.09327 0.933411 -0.10991 0.341561 + 0.80502 0.931409 -3.07746 0.764571 -0.123691 0.632559 + 0.784924 0.928477 -3.05759 0.64749 -0.138817 0.749324 + -0.891883 1.52196 -2.6212 -0.22609 0.561287 0.796141 + -0.906756 1.51837 -2.62531 0.10449 0.994419 -0.0145637 + -0.93052 1.51733 -2.62797 0.0584756 0.636585 -0.768986 + -0.892392 1.53419 -2.64619 -0.365591 0.808455 0.461241 + -0.900577 1.5312 -2.64834 0.139518 0.805828 0.575479 + -0.912714 1.52633 -2.6262 0.242418 0.388341 0.889058 + -0.93052 1.51733 -2.62797 -0.419363 0.0396953 0.90695 + -0.877519 1.53779 -2.64208 -0.301602 0.825908 0.476352 + -0.890007 1.54021 -2.65338 -0.225765 0.663121 0.713653 + -0.898192 1.53722 -2.65553 0.107253 0.322486 0.940478 + -0.906535 1.53917 -2.64923 0.655018 0.201444 0.728266 + -0.841083 1.54559 -2.63191 -0.102775 0.670841 0.734445 + -0.818326 1.56307 -2.64951 -0.0447733 0.804111 0.59279 + -0.854762 1.55527 -2.65968 -0.231459 0.809545 0.539503 + -0.875344 1.55504 -2.66534 -0.0540791 0.707923 0.704217 + -0.876163 1.50957 -2.61646 -0.0435633 0.0331228 0.998501 + -0.825363 1.5332 -2.62717 0.190283 0.303543 0.933624 + -0.801154 1.54689 -2.63927 0.39546 0.427512 0.812923 + -0.779329 1.56435 -2.66489 0.592562 0.485385 0.642862 + -0.796501 1.58053 -2.67512 0.103071 0.837004 0.537402 + -0.928499 1.44977 -2.64188 -0.393582 -0.269532 0.878889 + -0.88467 1.4419 -2.63615 -0.0961734 -0.303545 0.947951 + -0.814638 1.48823 -2.62312 0.295047 -0.124756 0.947303 + -0.79043 1.50192 -2.63522 0.601685 0.0229928 0.798403 + -0.969471 1.43614 -2.67626 -0.647472 -0.201327 0.735015 + -0.910615 1.32677 -2.68468 -0.221259 -0.330885 0.917365 + -0.866786 1.3189 -2.67895 0.106557 -0.392402 0.913601 + -0.823145 1.42055 -2.64281 0.267356 -0.355809 0.8955 + -0.788958 1.41557 -2.6663 0.656989 -0.353273 0.666006 + -0.971492 1.50371 -2.66235 -0.693407 -0.0525904 0.718624 + -0.983836 1.51751 -2.67543 -0.75654 0.03766 0.652862 + -0.999264 1.50315 -2.6968 -0.879837 -0.0303789 0.474304 + -0.998304 1.44441 -2.70876 -0.876009 -0.114088 0.468606 + -0.964992 1.35018 -2.68955 -0.491557 -0.234337 0.838724 + -0.940298 1.55651 -2.64549 -0.447077 0.350576 0.822933 + -0.952642 1.57031 -2.65857 -0.461898 0.419921 0.781228 + -0.979896 1.57252 -2.68028 -0.721434 0.400796 0.564708 + -0.995324 1.55816 -2.70165 -0.897094 0.288711 0.334466 + -0.922492 1.56551 -2.64372 0.0630064 0.524095 0.849326 + -0.911465 1.58928 -2.66198 0.190243 0.574209 0.796299 + -0.937803 1.59891 -2.67516 -0.243033 0.734408 0.633703 + -0.965057 1.60113 -2.69687 -0.559648 0.733901 0.384946 + -0.905557 1.54438 -2.64776 0.354318 -0.0592797 0.933244 + -0.894531 1.56815 -2.66602 0.48239 0.337818 0.808195 + -0.867746 1.59585 -2.69256 0.474283 0.485573 0.734353 + -0.885343 1.61232 -2.69242 0.267523 0.705233 0.656565 + -0.911681 1.62195 -2.7056 -0.10586 0.910048 0.400757 + -0.897214 1.54243 -2.65405 0.345225 0.077066 0.93535 + -0.882551 1.55726 -2.66602 0.234796 0.498919 0.834237 + -0.855766 1.58495 -2.69256 0.28742 0.637788 0.714574 + -0.849924 1.60828 -2.71679 0.566754 0.663429 0.488521 + -0.867521 1.62475 -2.71665 0.380702 0.828308 0.411063 + -0.849585 1.5812 -2.68906 -0.0353293 0.798288 0.601239 + -0.828368 1.59373 -2.71497 0.146724 0.943731 0.296383 + -0.834549 1.59748 -2.71847 0.444904 0.799796 0.402973 + -0.834941 1.60577 -2.74159 0.591739 0.774122 0.224898 + -0.864122 1.6263 -2.73181 0.423915 0.889071 0.172767 + -0.829003 1.58143 -2.6834 -0.121484 0.851511 0.510069 + -0.811174 1.5928 -2.7105 -0.0214423 0.983216 0.181182 + -0.811027 1.59247 -2.74355 0.153523 0.985513 0.072074 + -0.819566 1.59496 -2.74326 0.424025 0.889941 0.16795 + -0.778672 1.5919 -2.70222 0.35084 0.880319 0.319296 + -0.772282 1.59501 -2.73269 0.302944 0.940593 0.153327 + -0.793833 1.59155 -2.73908 -0.060727 0.998063 -0.0134772 + -0.803196 1.59435 -2.77524 0.186314 0.976174 0.111227 + -0.811736 1.59684 -2.77495 0.409385 0.900436 0.147034 + -0.760085 1.57115 -2.69963 0.825939 0.432965 0.361061 + -0.753695 1.57426 -2.7301 0.817051 0.471931 0.331223 + -0.751357 1.59298 -2.76679 0.446724 0.879992 0.161407 + -0.769096 1.59685 -2.77483 0.0491148 0.998454 -0.0260182 + -0.790647 1.59339 -2.78122 0.0213143 0.998105 0.0577178 + -0.765915 1.5493 -2.67958 0.848401 0.161521 0.504109 + -0.741668 1.50855 -2.71809 0.880022 0.19405 0.433481 + -0.733332 1.50676 -2.73257 0.956958 0.0327701 0.288369 + -0.745359 1.57248 -2.74458 0.735298 0.470937 0.487396 + -0.777016 1.48688 -2.64992 0.750565 -0.115649 0.650598 + -0.747498 1.4867 -2.69804 0.889495 -0.0654025 0.45224 + -0.738473 1.45156 -2.73762 0.969209 -0.219454 0.111688 + -0.726742 1.56403 -2.75754 0.931474 0.259925 0.25455 + -0.75944 1.41539 -2.71442 0.855891 -0.307935 0.415485 + -0.765923 1.35168 -2.76479 0.958521 -0.283734 0.0270655 + -0.731883 1.50883 -2.76259 0.984025 -0.112073 -0.138327 + -0.746557 1.53971 -2.81573 0.906447 0.0021148 -0.422314 + -0.73274 1.58453 -2.77975 0.824529 0.558302 -0.0919244 + -0.78689 1.3155 -2.7416 0.805312 -0.353729 0.47576 + -0.799393 1.24551 -2.7692 0.854398 -0.260015 0.449884 + -0.773356 1.3433 -2.78776 0.966381 -0.20482 -0.155421 + -0.739316 1.50045 -2.78555 0.945678 -0.13106 -0.297517 + -0.814154 1.31359 -2.71211 0.593899 -0.404248 0.695606 + -0.826657 1.2436 -2.73972 0.661291 -0.338552 0.669385 + -0.848341 1.31858 -2.68862 0.446106 -0.406151 0.797515 + -0.848495 1.23947 -2.7224 0.513131 -0.362928 0.777805 + -0.823961 1.19951 -2.76147 0.67794 -0.307272 0.667818 + -0.86694 1.2398 -2.71272 0.162325 -0.417997 0.893828 + -0.862939 1.19246 -2.73746 0.15102 -0.452062 0.879109 + -0.8458 1.19538 -2.74415 0.512286 -0.367034 0.776434 + -0.901155 1.24515 -2.71393 -0.189097 -0.424621 0.885403 + -0.897154 1.19781 -2.73866 -0.202264 -0.474083 0.856933 + -0.885064 1.11308 -2.78374 -0.203041 -0.486904 0.849529 + -0.857895 1.11402 -2.77952 0.139952 -0.469199 0.871932 + -0.840756 1.11695 -2.78622 0.510101 -0.386238 0.768516 + -0.955531 1.26856 -2.7188 -0.496144 -0.396083 0.772632 + -0.944055 1.19838 -2.75499 -0.510399 -0.452603 0.731193 + -0.931966 1.11365 -2.80007 -0.484807 -0.470809 0.737089 + -0.983141 1.28138 -2.74361 -0.889107 -0.279328 0.36258 + -0.971665 1.21119 -2.77979 -0.893401 -0.307535 0.327502 + -0.95616 1.11954 -2.82119 -0.868557 -0.330632 0.369177 + -0.908684 1.00316 -2.85679 -0.470362 -0.462925 0.751306 + -0.993825 1.35845 -2.72205 -0.905694 -0.185731 0.381081 + -0.988035 1.29495 -2.78707 -0.984831 -0.167623 0.0448501 + -0.975929 1.22491 -2.81432 -0.982278 -0.183621 0.0376019 + -0.960425 1.13325 -2.85572 -0.985402 -0.165077 0.0416373 + -1.01339 1.45412 -2.75603 -0.984817 -0.0887633 0.149187 + -0.998719 1.37202 -2.76552 -0.984029 -0.169562 0.0541816 + -0.990991 1.30479 -2.82818 -0.985617 -0.167175 0.0247397 + -0.978886 1.23475 -2.85543 -0.984693 -0.174093 0.00843553 + -0.963241 1.14511 -2.88537 -0.986167 -0.165736 -0.00230545 + -1.01435 1.51286 -2.74407 -0.987585 0.0792685 0.135622 + -1.0123 1.53068 -2.77243 -0.972831 0.230619 -0.0203678 + -1.01708 1.46156 -2.80018 -0.997232 -0.0441868 -0.0598019 + -1.0024 1.37945 -2.80967 -0.988283 -0.151019 0.0221316 + -0.993265 1.57599 -2.73001 -0.864745 0.486161 0.125953 + -0.983454 1.59551 -2.77394 -0.806544 0.588438 -0.0568123 + -1.00644 1.53931 -2.8072 -0.930646 0.307611 -0.198176 + -1.01122 1.47018 -2.83495 -0.978063 0.0583339 -0.199974 + -0.955245 1.62066 -2.7408 -0.48232 0.859587 0.168754 + -0.946612 1.62905 -2.77789 -0.340305 0.936351 -0.086251 + -0.967775 1.60432 -2.81096 -0.657293 0.687269 -0.309236 + -0.990762 1.54811 -2.84422 -0.836216 0.402474 -0.372502 + -0.903047 1.63034 -2.7427 -0.0882662 0.99462 0.0542233 + -0.925879 1.62295 -2.81582 -0.168011 0.937725 -0.304048 + -0.947043 1.59822 -2.84888 -0.427489 0.715085 -0.553088 + -0.887393 1.63128 -2.73602 0.00295766 0.9891 0.147214 + -0.910225 1.62389 -2.80914 0.102165 0.974336 -0.200577 + -0.905845 1.6127 -2.8457 0.0248469 0.874337 -0.484684 + -0.883994 1.63283 -2.75118 -0.0178476 0.999277 -0.0335799 + -0.879614 1.62164 -2.78774 0.168309 0.947439 -0.272085 + -0.869875 1.58653 -2.88225 -0.0578116 0.809356 -0.584467 + -0.863711 1.54912 -2.92 -0.268314 0.380988 -0.884791 + -0.89968 1.5753 -2.88344 -0.271146 0.550918 -0.789284 + -0.85349 1.62504 -2.76183 0.379809 0.925062 0.00223308 + -0.859971 1.62019 -2.79007 0.0168362 0.970605 -0.240088 + -0.850232 1.58508 -2.88458 0.0153005 0.804867 -0.593257 + -0.835818 1.55511 -2.91418 0.278561 0.479645 -0.832072 + -0.854955 1.47201 -2.93872 -0.063711 0.182406 -0.981157 + -0.824309 1.60451 -2.7716 0.574778 0.802247 0.161339 + -0.82079 1.61174 -2.82678 0.344894 0.935113 -0.0813088 + -0.827271 1.60687 -2.85503 0.149029 0.890965 -0.428919 + -0.812857 1.57691 -2.88462 0.373274 0.661785 -0.650159 + -0.808217 1.60406 -2.83014 0.314385 0.944017 -0.0999674 + -0.795668 1.6031 -2.83612 0.258166 0.929567 -0.263164 + -0.792252 1.56646 -2.87796 0.662158 0.402325 -0.632204 + -0.827063 1.478 -2.93291 0.468141 0.172441 -0.866665 + -0.775063 1.59265 -2.82945 0.473812 0.80152 -0.364785 + -0.77114 1.54396 -2.85738 0.817065 0.136911 -0.560053 + -0.805951 1.4555 -2.91233 0.808165 0.0559644 -0.586291 + -0.824235 1.37254 -2.94607 0.613753 0.122473 -0.77994 + -0.872747 1.46842 -2.93547 -0.0893839 0.29444 -0.951481 + -0.757324 1.58878 -2.8214 0.614111 0.647935 -0.450609 + -0.775446 1.45734 -2.85964 0.898803 -0.0613154 -0.434044 + -0.79373 1.37437 -2.89337 0.912884 0.00115234 -0.408217 + -0.768206 1.41808 -2.82947 0.948323 -0.136453 -0.286467 + -0.780405 1.34771 -2.8475 0.977473 -0.0739796 -0.197671 + -0.800511 1.2866 -2.91908 0.906474 0.0521904 -0.419024 + -0.785555 1.27293 -2.80579 0.983717 -0.124474 0.129641 + -0.785618 1.23892 -2.82147 0.989766 -0.0798494 0.118267 + -0.787186 1.25993 -2.87321 0.988089 -0.00621435 -0.153757 + -0.799455 1.2115 -2.78489 0.864258 -0.211996 0.456198 + -0.798572 1.13536 -2.82202 0.873662 -0.215576 0.436168 + -0.789111 1.14932 -2.85386 0.992109 -0.0734903 0.101584 + -0.79068 1.17034 -2.9056 0.982825 0.0193546 -0.183523 + -0.823078 1.12337 -2.79861 0.67682 -0.321418 0.662273 + -0.8192 1.01195 -2.85771 0.67275 -0.318662 0.667729 + -0.801549 1.02036 -2.87402 0.8689 -0.214634 0.446032 + -0.792088 1.03432 -2.90586 0.995083 -0.0613204 0.0777778 + -0.836878 1.00552 -2.84532 0.476401 -0.389876 0.78806 + -0.830536 0.893194 -2.90304 0.470886 -0.372882 0.799515 + -0.818915 0.897514 -2.9108 0.664699 -0.307494 0.680898 + -0.801264 0.905924 -2.92711 0.874166 -0.203711 0.440836 + -0.848297 1.00313 -2.84221 0.107195 -0.464102 0.879272 + -0.841954 0.890798 -2.89992 0.0966079 -0.440808 0.892387 + -0.833718 0.777782 -2.95507 0.095437 -0.399929 0.911564 + -0.826877 0.779219 -2.95694 0.466962 -0.338023 0.817121 + -0.815256 0.783538 -2.96471 0.665399 -0.278073 0.692762 + -0.875466 1.00218 -2.84643 -0.198566 -0.479279 0.854905 + -0.859798 0.890231 -2.90282 -0.202535 -0.45191 0.868767 + -0.893016 0.891206 -2.91318 -0.444824 -0.444226 0.777685 + -0.871462 0.777799 -2.96418 -0.445752 -0.408124 0.796706 + -0.851562 0.777212 -2.95797 -0.210514 -0.411461 0.886783 + -0.91125 0.894913 -2.92662 -0.755978 -0.381665 0.531816 + -0.889696 0.781507 -2.97762 -0.762165 -0.364953 0.53471 + -0.872875 0.707806 -3.00101 -0.774018 -0.304332 0.555228 + -0.861211 0.705433 -2.99241 -0.469271 -0.289304 0.834319 + -0.841311 0.704848 -2.9862 -0.220981 -0.267276 0.93794 + -0.932878 1.00905 -2.87791 -0.77868 -0.387517 0.493445 + -0.923644 0.903215 -2.94988 -0.945361 -0.269203 0.183908 + -0.897121 0.78648 -2.99155 -0.943409 -0.276693 0.18281 + -0.8803 0.712776 -3.01494 -0.944125 -0.288983 0.158481 + -0.945272 1.01735 -2.90117 -0.952154 -0.248534 0.177858 + -0.925618 0.910994 -2.96936 -0.976745 -0.152146 -0.151068 + -0.899094 0.794259 -3.01104 -0.970179 -0.17407 -0.168677 + -0.881562 0.717753 -3.02741 -0.947249 -0.24901 -0.201775 + -0.948089 1.0292 -2.93081 -0.984171 -0.107365 -0.140996 + -0.918159 0.922154 -2.99485 -0.910556 -0.0551202 -0.409694 + -0.894626 0.800945 -3.02631 -0.902355 -0.0911458 -0.421246 + -0.877095 0.72444 -3.04267 -0.859735 -0.20941 -0.465836 + -0.94063 1.04036 -2.9563 -0.944878 -0.0718342 -0.319445 + -0.910284 0.928679 -3.0089 -0.769099 0.0239422 -0.63868 + -0.886751 0.807467 -3.04036 -0.75314 -0.0109761 -0.657769 + -0.872057 0.728612 -3.05166 -0.701856 -0.167027 -0.692459 + -0.965306 1.15935 -2.92069 -0.973982 -0.126356 -0.18813 + -0.957508 1.16939 -2.94333 -0.886139 -0.0530251 -0.460376 + -0.932832 1.0504 -2.97894 -0.810818 0.000326564 -0.585298 + -0.898042 0.933835 -3.01856 -0.471304 0.125816 -0.872951 + -0.879417 0.810558 -3.04614 -0.465475 0.084202 -0.881046 + -0.98095 1.249 -2.89075 -0.980846 -0.153496 -0.119916 + -0.973979 1.25621 -2.92398 -0.908819 -0.0870864 -0.408 + -0.94395 1.17894 -2.96344 -0.635531 0.0442598 -0.770806 + -0.920591 1.05555 -2.98861 -0.53069 0.0996473 -0.841688 + -0.880745 0.937452 -3.02325 -0.197101 0.180046 -0.963709 + -0.991593 1.30264 -2.87929 -0.983016 -0.1495 -0.106435 + -0.984621 1.30985 -2.91253 -0.91517 -0.0696551 -0.397003 + -0.960421 1.26577 -2.94409 -0.657008 0.0139924 -0.753753 + -0.916401 1.18623 -2.97462 -0.328534 0.116524 -0.937277 + -0.893041 1.06284 -2.99979 -0.242959 0.152349 -0.957998 + -1.003 1.3773 -2.86079 -0.990521 -0.0897947 -0.103947 + -0.994655 1.36584 -2.89536 -0.927406 -0.0223782 -0.373387 + -0.967627 1.31704 -2.93891 -0.662031 0.0267576 -0.748999 + -0.930838 1.33198 -2.95569 -0.323075 0.100271 -0.941046 + -0.923632 1.28072 -2.96087 -0.343138 0.0765542 -0.93616 + -1.00287 1.45872 -2.86952 -0.91665 0.0707902 -0.393373 + -0.977661 1.37303 -2.92174 -0.735059 0.0779156 -0.673512 + -0.942147 1.39065 -2.9436 -0.374008 0.15113 -0.915029 + -0.867606 1.36449 -2.96342 0.0916473 0.176359 -0.98005 + -0.870262 1.29124 -2.97378 0.0425137 0.1387 -0.989422 + -0.996841 1.49407 -2.87139 -0.875051 0.214786 -0.433765 + -0.971629 1.40838 -2.92362 -0.655032 0.127388 -0.744786 + -0.941046 1.48951 -2.92284 -0.281737 0.277741 -0.918414 + -0.878915 1.42316 -2.95133 0.0809528 0.247303 -0.965551 + -0.970527 1.50724 -2.90286 -0.6206 0.297853 -0.725354 + -0.934877 1.53478 -2.90699 -0.140902 0.493199 -0.858429 + -0.964448 1.56129 -2.87568 -0.553006 0.556796 -0.619809 + -0.917472 1.57171 -2.88019 -0.191852 0.567192 -0.800928 + -0.898511 1.25175 -2.09719 0.892978 0.346908 -0.286786 + -0.893679 1.25709 -2.07569 0.456797 0.847666 -0.269812 + -0.883033 1.24766 -2.05395 0.832686 0.550594 0.0589866 + -0.896025 1.26076 -1.99076 0.631475 0.700116 0.333281 + -0.87489 1.21524 -1.98255 0.885859 0.24839 0.391863 + -0.866728 1.19559 -2.00045 0.974383 -0.00889473 0.22472 + -0.874871 1.22801 -2.07185 0.952748 0.274217 0.130675 + -0.871571 1.24751 -2.11555 0.864158 0.412797 0.2878 + -0.88557 1.27604 -2.1347 0.391807 0.787321 0.476039 + -0.906671 1.27018 -2.01251 0.324928 0.94425 -0.0530492 + -0.919716 1.27212 -2.00414 0.0949342 0.98965 0.107614 + -0.930917 1.25764 -1.96193 0.041314 0.776417 0.628863 + -0.91676 1.24203 -1.95501 0.407149 0.495529 0.767255 + -0.917472 1.25296 -2.06952 -0.14029 0.958992 -0.246279 + -0.930517 1.25489 -2.06115 0.0215812 0.955997 -0.292583 + -0.93684 1.25535 -2.06139 0.0257109 0.946378 -0.322037 + -0.941049 1.27345 -2.01668 0.00362017 0.997321 -0.0730553 + -0.95225 1.25897 -1.97446 -0.272476 0.840383 0.468522 + -0.898511 1.25175 -2.09719 -0.201253 0.971477 -0.125416 + -0.922304 1.24762 -2.09102 -0.146563 0.989199 0.00198903 + -0.932343 1.24639 -2.08904 -0.0239433 0.997775 -0.0622208 + -0.938666 1.24684 -2.08927 0.0369946 0.996177 -0.0791387 + -0.956727 1.2527 -2.06544 -0.04595 0.963301 -0.264462 + -0.960936 1.27081 -2.02073 -0.272243 0.959653 -0.0703551 + -0.926001 1.24885 -2.0985 -0.0964539 0.902875 0.418943 + -0.93604 1.24762 -2.09652 -0.0170284 0.960047 0.27932 + -0.950931 1.24801 -2.0982 -0.00550002 0.955936 0.293523 + -0.953558 1.24724 -2.09095 0.0209443 0.998688 -0.0467285 + -0.952937 1.25444 -2.11069 -0.0586869 0.834614 0.5477 + -0.978095 1.2481 -2.099 0.0441309 0.958969 0.280053 + -0.979279 1.24761 -2.09173 0.0563735 0.996304 -0.0648139 + -0.982449 1.25307 -2.06622 -0.0417126 0.989159 -0.140798 + -0.987106 1.25807 -2.02339 -0.273993 0.961183 0.0324747 + -0.940629 1.26583 -2.12249 -0.114706 0.774715 0.62182 + -0.975395 1.27283 -2.13765 -9.02355e-005 0.779726 0.626121 + -0.980101 1.25453 -2.11149 0.10135 0.862903 0.495103 + -0.991501 1.26042 -2.1175 0.265802 0.787418 0.556167 + -0.994803 1.24965 -2.09998 0.293211 0.90135 0.318739 + -0.963088 1.28421 -2.14945 -0.11339 0.75338 0.647735 + -0.986795 1.27872 -2.14366 0.209386 0.77013 0.602542 + -0.898511 1.25175 -2.09719 -0.111811 0.777643 0.618684 + 1.05117 1.12715 -1.90057 0.0662268 -0.171641 0.982931 + 1.04301 1.16262 -1.8932 -0.138049 -0.0522402 0.989047 + 0.980129 1.18837 -1.91784 -0.447262 -0.27944 0.849629 + 1.1199 1.17478 -1.91371 0.473942 0.0978725 0.8751 + 1.08924 1.19869 -1.90469 0.378253 0.22797 0.897193 + 1.06864 1.19787 -1.89697 0.107883 0.209246 0.971894 + 1.04118 1.20698 -1.90796 -0.452956 0.493767 0.742311 + 1.12806 1.13932 -1.92108 0.477789 -0.115971 0.870786 + 1.17441 1.14361 -1.95867 0.801182 0.0679804 0.594547 + 1.15065 1.19284 -1.94371 0.707235 0.395257 0.586166 + 1.07232 1.09107 -1.91115 0.115185 -0.388734 0.914122 + 1.13452 1.09271 -1.93472 0.483907 -0.298475 0.822646 + 1.18087 1.097 -1.97232 0.776563 -0.162315 0.608773 + 0.989426 1.13764 -1.89975 -0.246098 -0.111477 0.962813 + 1.01057 1.10156 -1.91032 -0.255411 -0.553567 0.792672 + 1.00457 1.08538 -1.93131 -0.418346 -0.632369 0.651994 + 1.07934 1.04655 -1.93878 0.0810999 -0.591904 0.801918 + 1.14155 1.04819 -1.96235 0.443516 -0.50213 0.742401 + 0.980129 1.18837 -1.91784 0.134531 0.540413 0.830575 + 0.965973 1.17276 -1.91092 -0.227417 0.232093 0.945735 + 0.919078 1.1614 -1.93562 -0.60827 -0.306227 0.732279 + 0.913074 1.14522 -1.9566 -0.686922 -0.514411 0.513342 + 0.91676 1.24203 -1.95501 -0.407155 0.495529 0.767252 + 0.895625 1.19651 -1.94679 -0.726461 0.0217994 0.686862 + 0.930917 1.25764 -1.96193 -0.041317 0.776415 0.628866 + 0.896025 1.26076 -1.99076 -0.631476 0.700117 0.333279 + 0.87489 1.21524 -1.98255 -0.888637 0.207783 0.408842 + 0.95225 1.25897 -1.97446 0.272492 0.840374 0.468529 + 0.941049 1.27345 -2.01668 0.00364353 0.997716 -0.0674545 + 0.919716 1.27212 -2.00414 -0.0962171 0.989277 0.109874 + 0.906671 1.27018 -2.01251 -0.324939 0.944246 -0.0530534 + 0.883033 1.24766 -2.05395 -0.832981 0.550264 0.0578914 + 0.995964 1.18457 -1.9229 0.354686 0.701349 0.61831 + 0.968084 1.25517 -1.97953 0.38769 0.803675 0.451446 + 0.960936 1.27081 -2.02073 0.244574 0.969016 -0.0345248 + 0.93684 1.25535 -2.06139 -0.0150176 0.941578 -0.33646 + 0.930517 1.25489 -2.06115 -0.0327555 0.950541 -0.308867 + 1.00645 1.17926 -1.92269 -0.070925 0.843162 0.532962 + 1.00474 1.23713 -1.98197 0.164995 0.700408 0.69441 + 0.994254 1.24243 -1.98218 0.308637 0.761385 0.570119 + 0.987106 1.25807 -2.02339 0.260051 0.96521 0.0272653 + 0.982449 1.25307 -2.06622 0.0808846 0.977999 -0.19229 + 0.956727 1.2527 -2.06544 0.00781325 0.953414 -0.301562 + 1.01002 1.23395 -1.97869 -0.313765 0.690069 0.652194 + 1.01179 1.25355 -1.99836 -0.302507 0.6774 0.670536 + 1.00651 1.25674 -2.00165 -0.136821 0.917672 0.373039 + 1.00371 1.25545 -2.02439 0.0084103 0.996068 -0.0881855 + 0.999056 1.25046 -2.06722 0.00821282 0.996386 -0.0845421 + 1.01913 1.22641 -1.96018 -0.62756 0.583376 0.515598 + 1.02713 1.2549 -1.9832 -0.604268 0.609424 0.513286 + 1.02889 1.25904 -1.98622 -0.58748 0.689504 0.423616 + 1.01355 1.2577 -2.00138 -0.396477 0.847567 0.352755 + 1.01075 1.25642 -2.02412 -0.391076 0.919622 -0.0368149 + 1.04919 1.23547 -1.93097 -0.53378 0.63185 0.562001 + 0.980129 1.18837 -1.91784 0.353085 0.914284 0.198533 + -0.265027 1.74133 -3.37072 0.608582 0.176412 0.773632 + -0.261467 1.75486 -3.37977 0.405413 0.43226 0.805476 + -0.286397 1.7575 -3.36864 0.37424 0.926179 -0.046233 + -0.289957 1.74398 -3.35959 0.454078 0.191852 0.870061 + -0.290079 1.69202 -3.35677 0.531317 0.0558839 0.845328 + -0.263388 1.66691 -3.37811 0.721112 -0.0194369 0.692546 + -0.250973 1.65474 -3.39333 0.941656 -0.0536991 0.332266 + -0.252611 1.72917 -3.38594 0.965166 0.24466 -0.0927086 + -0.261467 1.75486 -3.37977 0.821733 0.151318 0.549415 + -0.311519 1.7617 -3.35095 0.347925 0.550309 0.759018 + -0.311641 1.70974 -3.34812 0.366798 0.103597 0.924514 + -0.298838 1.64784 -3.34424 0.595801 0.192498 0.779721 + -0.319147 1.76774 -3.36248 0.229633 0.931589 -0.281798 + -0.337551 1.76806 -3.34796 0.2119 0.658287 0.722327 + -0.363175 1.76019 -3.33739 0.202236 0.59766 0.775824 + -0.337265 1.70187 -3.33755 0.372538 0.188176 0.908738 + -0.302376 1.7471 -3.37552 0.0828534 0.576953 -0.812564 + -0.342152 1.73389 -3.39425 -0.0644843 0.58809 -0.806221 + -0.345179 1.7741 -3.35949 -0.0419621 0.979265 -0.198189 + -0.278095 1.69156 -3.41165 0.165581 0.444574 -0.880305 + -0.325381 1.71326 -3.40729 0.0546254 0.531179 -0.845497 + -0.373982 1.66906 -3.42415 -0.270237 0.446519 -0.85299 + -0.36635 1.72855 -3.39056 -0.288517 0.550972 -0.783063 + -0.369377 1.76876 -3.3558 -0.258623 0.940838 -0.218947 + -0.262116 1.70196 -3.40477 0.256435 0.427005 -0.867126 + -0.265668 1.59394 -3.44147 0.665034 0.156589 -0.730212 + -0.285878 1.6439 -3.43792 0.360814 0.369512 -0.856314 + -0.333165 1.6656 -3.43356 -0.0260002 0.439998 -0.897622 + -0.261467 1.75486 -3.37977 -0.336333 0.405795 -0.84983 + -0.261467 1.75486 -3.37977 0.508502 0.36284 -0.78088 + -0.25326 1.67627 -3.41094 0.757799 0.207451 -0.618631 + -0.251006 1.6008 -3.4046 0.985798 -0.00604765 0.167825 + -0.253294 1.62233 -3.42221 0.907878 0.0770128 -0.412101 + -0.254886 1.56206 -3.39721 0.93169 -0.0672253 0.35698 + -0.252745 1.5134 -3.43101 0.971276 -0.0195466 -0.237152 + -0.26512 1.48501 -3.45027 0.719997 0.00756946 -0.693936 + -0.272148 1.62272 -3.36558 0.792666 0.0339366 0.608711 + -0.275901 1.5648 -3.36241 0.824765 -0.0536535 0.562925 + -0.268812 1.46739 -3.39265 0.89524 -0.119957 0.429134 + -0.256625 1.47467 -3.42362 0.987255 -0.12629 0.0968424 + -0.267812 1.42086 -3.44995 0.835022 -0.127189 -0.535314 + -0.312908 1.59752 -3.31389 0.635482 0.133297 0.760522 + -0.316661 1.5396 -3.31073 0.701162 -0.0253243 0.712552 + -0.289828 1.47013 -3.35786 0.830505 -0.0954493 0.548773 + -0.29734 1.40521 -3.35865 0.844437 -0.131489 0.519265 + -0.275158 1.41654 -3.39595 0.903332 -0.150612 0.401632 + -0.332826 1.64955 -3.32398 0.443863 0.315853 0.838584 + -0.346895 1.59923 -3.29364 0.408375 0.217354 0.886559 + -0.352689 1.52951 -3.28365 0.441666 0.0273881 0.896761 + -0.326163 1.45287 -3.30861 0.718472 -0.0810191 0.690821 + -0.333676 1.38795 -3.30941 0.697126 -0.11975 0.706877 + -0.393265 1.6544 -3.30009 0.323102 0.306307 0.895422 + -0.377439 1.60125 -3.28521 0.286481 0.228842 0.930355 + -0.383233 1.53154 -3.27522 0.206028 0.01021 0.978493 + -0.362191 1.44278 -3.28154 0.320038 -0.0850304 0.943581 + -0.367138 1.38005 -3.28699 0.280995 -0.151444 0.947685 + -0.397704 1.70673 -3.31366 0.366105 0.188659 0.911249 + -0.423719 1.64686 -3.28781 0.262929 0.284979 0.921768 + -0.407894 1.59371 -3.27293 0.248335 0.179211 0.951952 + -0.407762 1.54644 -3.27043 0.198923 0.00279423 0.980011 + -0.398662 1.44285 -3.2826 -0.0962749 -0.153384 0.983466 + -0.387798 1.75425 -3.32289 0.356258 0.527686 0.771121 + -0.418806 1.75845 -3.31183 0.162655 0.640958 0.750144 + -0.428712 1.71092 -3.3026 0.303439 0.181344 0.935435 + -0.437086 1.67696 -3.29285 0.260686 0.234293 0.936563 + -0.438935 1.59252 -3.26779 -0.238769 0.0619927 0.969096 + -0.393999 1.76282 -3.34131 -0.18787 0.973892 -0.127437 + -0.419446 1.76383 -3.32485 -0.140627 0.986581 -0.0829547 + -0.453626 1.75346 -3.31585 -0.603686 0.793128 -0.0806886 + -0.452985 1.74807 -3.30283 -0.393021 0.548496 0.738029 + -0.461359 1.71412 -3.29308 -0.361702 0.314179 0.87776 + -0.405828 1.73146 -3.37114 -0.413503 0.563814 -0.714932 + -0.431275 1.73247 -3.35469 -0.483916 0.569356 -0.664575 + -0.443239 1.71002 -3.36003 -0.612301 0.366396 -0.7006 + -0.46559 1.73101 -3.32119 -0.900693 0.383894 -0.203414 + -0.413459 1.67197 -3.40473 -0.526387 0.42897 -0.734099 + -0.443485 1.65151 -3.38545 -0.702603 0.314714 -0.638204 + -0.421977 1.58169 -3.44311 -0.531918 0.323934 -0.782387 + -0.452003 1.56124 -3.42383 -0.794192 0.255368 -0.551404 + -0.473777 1.52375 -3.39233 -0.94315 0.132378 -0.304867 + -0.467549 1.61552 -3.37163 -0.874239 0.167728 -0.455603 + -0.467302 1.67403 -3.34621 -0.90584 0.185067 -0.381056 + -0.387188 1.59292 -3.45548 -0.302176 0.349149 -0.887009 + -0.392478 1.51526 -3.47722 -0.2913 0.202795 -0.934889 + -0.427267 1.50404 -3.46484 -0.502611 0.155071 -0.850491 + -0.451868 1.50135 -3.44542 -0.758451 0.141644 -0.636152 + -0.346372 1.58946 -3.46489 -0.0950784 0.336429 -0.936897 + -0.356547 1.51892 -3.48286 -0.0839514 0.180585 -0.97997 + -0.392487 1.43292 -3.48973 -0.33083 0.0638047 -0.941531 + -0.42669 1.44214 -3.46954 -0.549193 0.0463773 -0.834408 + -0.451292 1.43946 -3.45012 -0.760532 -0.0217099 -0.648938 + -0.304657 1.58899 -3.46638 0.209098 0.325753 -0.922043 + -0.314833 1.51845 -3.48435 0.19791 0.0728223 -0.977511 + -0.323541 1.44968 -3.48392 0.346154 0.0167443 -0.938028 + -0.356556 1.43658 -3.49537 0.0757598 0.0630933 -0.995128 + -0.284447 1.53902 -3.46994 0.677107 0.0315538 -0.735207 + -0.293155 1.47025 -3.46951 0.528596 -0.0304665 -0.848327 + -0.295847 1.40611 -3.46918 0.543833 -0.0629988 -0.836826 + -0.323849 1.39324 -3.48339 0.405857 -0.054603 -0.912304 + -0.356864 1.38014 -3.49484 0.111892 -0.0929572 -0.989363 + -0.276146 1.37933 -3.44706 0.879099 -0.128788 -0.45891 + -0.290122 1.36875 -3.46237 0.644369 -0.0930436 -0.759034 + -0.318124 1.35588 -3.47658 0.420436 -0.128133 -0.898229 + -0.26297 1.42381 -3.42693 0.985584 -0.15623 0.0649388 + -0.271304 1.38229 -3.42404 0.987079 -0.140247 0.0774975 + -0.278449 1.29525 -3.41344 0.992734 -0.0508365 0.109065 + -0.281624 1.29572 -3.43696 0.913391 -0.110583 -0.391776 + -0.295601 1.28513 -3.45226 0.648705 -0.135066 -0.748958 + -0.281762 1.37604 -3.39747 0.904234 -0.0957594 0.416163 + -0.288907 1.28901 -3.38686 0.889855 0.0141175 0.456024 + -0.293574 1.15781 -3.36481 0.923363 -0.00195039 0.383922 + -0.287422 1.16036 -3.39442 0.996868 -0.0725267 0.0315257 + -0.290597 1.16082 -3.41794 0.920458 -0.13103 -0.368224 + -0.303945 1.36472 -3.36017 0.849301 -0.0899559 0.520188 + -0.307281 1.28333 -3.3581 0.824663 0.0103439 0.565529 + -0.311948 1.15213 -3.33605 0.694553 0.0583915 0.717068 + -0.317682 1.04499 -3.32682 0.684034 0.017217 0.729247 + -0.303511 1.04582 -3.34643 0.915049 -0.042819 0.401063 + -0.333694 1.3502 -3.31774 0.711332 -0.0949383 0.696415 + -0.33703 1.26882 -3.31568 0.63988 -0.0218807 0.768163 + -0.339085 1.15273 -3.31962 0.486193 0.0284324 0.873389 + -0.344819 1.04559 -3.31039 0.36838 0.0573657 0.927904 + -0.367156 1.34229 -3.29532 0.287706 -0.143707 0.946876 + -0.365862 1.26606 -3.30244 0.209757 -0.0547727 0.976218 + -0.367918 1.14997 -3.30638 0.122155 -0.0125416 0.992432 + -0.367929 1.04705 -3.30553 0.0293487 0.0568498 0.997951 + -0.348894 0.95487 -3.30343 0.37192 0.0454904 0.927149 + -0.398451 1.34236 -3.29623 -0.348792 -0.155851 0.924151 + -0.397157 1.26612 -3.30336 -0.320237 -0.0827486 0.943716 + -0.395067 1.15279 -3.31141 -0.377308 -0.0158285 0.925952 + -0.395078 1.04987 -3.31056 -0.337019 0.0398671 0.940654 + -0.403609 1.38012 -3.28805 -0.351364 -0.195463 0.915608 + -0.435699 1.3942 -3.31337 -0.791835 -0.244577 0.559624 + -0.43054 1.35643 -3.32155 -0.783858 -0.151577 0.602155 + -0.422927 1.27418 -3.32113 -0.733292 -0.0584317 0.677398 + -0.439204 1.43827 -3.29809 -0.703119 -0.257571 0.662783 + -0.468309 1.42442 -3.36681 -0.956274 -0.17538 0.234055 + -0.458523 1.38237 -3.36741 -0.946108 -0.159846 0.281653 + -0.450909 1.30012 -3.36699 -0.942399 -0.0715862 0.32674 + -0.423191 1.45776 -3.27781 -0.265779 -0.304789 0.914585 + -0.454815 1.52576 -3.28556 -0.817729 -0.140938 0.558082 + -0.471814 1.4685 -3.35154 -0.951706 -0.172839 0.253736 + -0.473642 1.46386 -3.41391 -0.958757 -0.00928643 -0.284076 + -0.473075 1.42713 -3.40846 -0.978893 -0.117253 -0.167392 + -0.438802 1.54524 -3.26529 -0.356851 -0.0418794 0.933222 + -0.463609 1.56642 -3.29648 -0.895441 -0.0418163 0.443212 + -0.480608 1.50917 -3.36245 -0.997003 -0.0356092 0.0686778 + 0.302376 1.7471 -3.37552 0.605009 0.546625 0.578934 + 0.286397 1.7575 -3.36864 -0.0282659 0.550726 0.834208 + 0.289957 1.74398 -3.35959 -0.378524 0.394632 0.837249 + 0.265027 1.74133 -3.37072 -0.592574 0.151185 0.791201 + 0.263388 1.66691 -3.37811 -0.712373 0.0100714 0.701729 + 0.290079 1.69202 -3.35677 -0.572382 0.0871925 0.815338 + 0.311641 1.70974 -3.34812 -0.376733 0.12915 0.917274 + 0.311519 1.7617 -3.35095 -0.518698 0.59519 0.61376 + 0.302376 1.7471 -3.37552 -0.251226 0.674389 -0.694324 + 0.261467 1.75486 -3.37977 -0.405413 0.43226 0.805476 + 0.261467 1.75486 -3.37977 -0.508502 0.36284 -0.78088 + 0.262116 1.70196 -3.40477 -0.255932 0.424602 -0.868454 + 0.252611 1.72917 -3.38594 -0.965163 0.244672 -0.0927199 + 0.25326 1.67627 -3.41094 -0.722976 0.175062 -0.668325 + 0.250973 1.65474 -3.39333 -0.960679 -0.00159407 0.277656 + 0.261467 1.75486 -3.37977 -0.821733 0.151318 0.549415 + 0.278095 1.69156 -3.41165 -0.176609 0.433651 -0.883604 + 0.253294 1.62233 -3.42221 -0.856372 0.149487 -0.494248 + 0.251006 1.6008 -3.4046 -0.985186 -0.0272702 0.169307 + 0.275901 1.5648 -3.36241 -0.826746 -0.0530138 0.560071 + 0.272148 1.62272 -3.36558 -0.763999 0.0393004 0.64402 + 0.325381 1.71326 -3.40729 -0.0754329 0.536348 -0.840619 + 0.333165 1.6656 -3.43356 0.0310609 0.447888 -0.89355 + 0.285878 1.6439 -3.43792 -0.356144 0.377426 -0.854816 + 0.286397 1.7575 -3.36864 0.142721 0.49512 -0.857022 + 0.261467 1.75486 -3.37977 0.336333 0.405795 -0.84983 + 2.04758 1.79087 -0.419637 -0.249284 0.966606 0.0594206 + 2.06611 1.79246 -0.363198 -0.316726 0.945977 0.0693761 + 2.05691 1.78848 -0.509912 -0.00432426 0.999631 -0.0268118 + 2.03494 1.76178 -0.21826 -0.450717 0.892185 -0.0293273 + 2.0868 1.79252 -0.279496 -0.396395 0.918036 0.00894935 + 2.10728 1.79865 -0.302325 0.225013 0.960324 -0.164764 + 2.08659 1.79868 -0.385977 0.450068 0.868791 -0.206496 + 2.05691 1.78848 -0.509912 -0.298098 0.954508 -0.00716793 + 2.01641 1.76019 -0.274698 -0.646056 0.744558 0.168059 + 1.99292 1.73621 -0.301369 -0.834937 0.550078 0.0171822 + 2.05739 1.77861 -0.145405 -0.149682 0.942619 -0.298437 + 2.10924 1.80934 -0.206632 -0.48522 0.868103 -0.104686 + 2.13002 1.81455 -0.230656 0.10985 0.941445 -0.31877 + 2.01201 1.78593 -0.505683 -0.647752 0.745353 0.157689 + 1.98853 1.76195 -0.532355 -0.808373 0.563605 0.169948 + 2.05701 1.81152 -0.487006 -0.605781 0.768424 0.206288 + 2.02145 1.80658 -0.573053 -0.684981 0.658453 0.311834 + 1.95822 1.80145 -0.69817 -0.902349 0.239872 0.358089 + 1.95457 1.72805 -0.596037 -0.882649 0.420461 0.210103 + 2.05368 1.84205 -0.544286 -0.816998 0.44394 0.368009 + 2.04962 1.87449 -0.581082 -0.807561 0.34688 0.47699 + 2.01739 1.83903 -0.60986 -0.801433 0.276898 0.530125 + 2.04145 1.94214 -0.633857 -0.509342 0.297551 0.807486 + 1.99541 2.02753 -0.68675 -0.451245 0.240122 0.859488 + 1.97135 1.9245 -0.662693 -0.66393 0.110395 0.739601 + 1.99534 2.10094 -0.703895 0.0674122 0.297012 0.952491 + 1.86547 2.21636 -0.792618 -0.671514 0.080592 0.736596 + 1.84979 2.19327 -0.819613 -0.869377 -0.115087 0.480561 + 1.95567 1.90131 -0.689739 -0.912574 -0.0905374 0.398763 + 1.86541 2.28977 -0.809761 -0.103607 0.135346 0.985366 + 1.83866 2.42426 -0.82771 -0.676891 -0.0164193 0.7359 + 1.81648 2.20599 -0.877656 -0.814349 -0.118305 0.56819 + 1.93269 1.9349 -0.794719 -0.938157 -0.168725 0.302311 + 1.93524 1.83504 -0.80315 -0.745945 0.469677 0.472197 + 1.97011 2.21519 -0.731785 -0.441618 0.0311642 0.896662 + 1.94336 2.34968 -0.749733 -0.608066 -0.0518974 0.792188 + 2.02648 2.0249 -0.695197 0.977184 0.208644 0.0397491 + 2.00125 2.13916 -0.723096 0.869589 0.265344 0.416423 + 1.9866 2.29243 -0.724362 -0.495486 -0.0100094 0.868559 + 1.92042 2.52582 -0.743409 -0.584158 8.24479e-005 0.81164 + 1.86427 2.60485 -0.810302 -0.717714 0.0241957 0.695918 + 2.04085 1.94543 -0.658947 0.97875 0.0890772 -0.184696 + 2.00071 1.93192 -0.74635 0.907332 -0.018104 -0.420025 + 1.9952 2.15733 -0.756969 0.955995 0.0692947 -0.285084 + 1.98055 2.3106 -0.758235 0.964562 0.107044 -0.241166 + 1.9866 2.29243 -0.724362 0.987131 0.106805 -0.119018 + 1.96367 2.46847 -0.718087 0.967344 0.154519 -0.200921 + 2.04145 1.94214 -0.633857 0.986129 0.165973 -0.00186748 + 2.04902 1.87778 -0.606172 0.989278 -0.00254245 -0.14602 + 2.01508 1.85244 -0.710092 0.952747 -0.0137097 -0.303456 + 1.97115 1.95368 -0.81144 0.928207 0.0460719 -0.3692 + 1.96563 2.17909 -0.822059 0.910113 0.0404235 -0.412383 + 2.04962 1.87449 -0.581082 0.996867 0.0760077 -0.0218788 + 2.05358 1.81893 -0.567241 0.987726 -0.0195535 -0.154965 + 2.01964 1.79368 -0.671101 0.979189 -0.00273165 -0.202932 + 2.01547 1.73294 -0.734101 0.969893 0.14779 -0.193558 + 1.9663 1.86477 -0.850038 0.956227 0.138399 -0.257828 + 1.9045 2.14994 -0.949971 0.922767 0.0635816 -0.380076 + 2.05368 1.84205 -0.544286 0.997817 0.044314 -0.048968 + 2.05691 1.78848 -0.509912 0.984295 0.0710033 -0.161622 + 1.96367 2.46847 -0.718087 -0.561329 -0.0588435 0.825498 + 1.94728 2.53942 -0.740764 -0.15 0.105041 0.98309 + 1.93692 2.63864 -0.741815 0.92548 -0.00228058 0.37879 + 1.93078 2.6463 -0.737484 -0.10585 0.0512121 0.993062 + 1.87462 2.72542 -0.804329 -0.601269 0.302205 0.739694 + 1.84108 2.75625 -0.85193 -0.678126 0.368373 0.635961 + 1.81909 2.66232 -0.855642 -0.752589 0.108002 0.649574 + 1.93854 2.71913 -0.745837 0.949914 0.201573 0.238813 + 1.93239 2.72679 -0.741506 0.819548 0.497016 0.28516 + 1.90746 2.75606 -0.820608 0.903148 0.362832 -0.229514 + 1.90131 2.76364 -0.816327 0.21572 0.852988 0.475263 + 1.91067 2.6755 -0.81607 0.927014 0.037004 -0.373197 + 1.88433 2.6978 -0.875887 0.907588 0.0219838 -0.419285 + 1.88111 2.77836 -0.880432 0.891321 0.337764 -0.302427 + 1.94728 2.53942 -0.740764 0.955538 0.142827 -0.257968 + 1.92103 2.57619 -0.81506 0.933266 0.123653 -0.337229 + 1.8688 2.6436 -0.913422 0.901446 0.0778739 -0.42583 + 1.84788 2.75571 -0.943395 0.84028 0.151041 -0.520688 + 1.96416 2.38154 -0.780912 0.945128 0.137359 -0.296422 + 1.94617 2.36492 -0.83112 0.907722 0.112059 -0.404332 + 1.90304 2.55966 -0.865218 0.903324 0.130819 -0.408524 + 1.84113 2.55759 -0.989435 0.879284 0.090636 -0.467594 + 1.83235 2.70152 -0.98093 0.841532 0.127519 -0.52494 + 1.94017 2.29025 -0.862401 0.903979 0.0835848 -0.419328 + 1.87537 2.47364 -0.941231 0.8806 0.111494 -0.460556 + 1.82428 2.46175 -1.03645 0.878147 0.110511 -0.465451 + 1.8116 2.64031 -1.02712 0.812591 0.13374 -0.567282 + 1.87904 2.26111 -0.990322 0.876491 0.0896242 -0.473002 + 1.86936 2.39898 -0.972522 0.873941 0.123227 -0.470151 + 1.83396 2.32389 -1.05426 0.836788 0.118065 -0.534646 + 1.79476 2.54448 -1.07413 0.771538 0.117822 -0.625177 + 1.89966 2.06103 -0.988568 0.933014 0.14294 -0.330233 + 1.97308 1.77805 -0.900439 0.956211 0.154462 -0.2486 + 1.90809 1.96695 -1.02102 0.929627 0.168928 -0.3275 + 1.84003 2.13082 -1.11226 0.842112 0.187269 -0.505745 + 1.8316 2.22491 -1.07981 0.875838 0.165954 -0.453175 + 1.77241 2.45597 -1.10923 0.711894 0.120935 -0.691796 + 2.02224 1.64622 -0.784511 0.954705 0.186192 -0.232099 + 1.96957 1.69115 -0.948727 0.945285 0.131515 -0.298563 + 1.90458 1.88014 -1.06926 0.898545 0.12779 -0.419866 + 1.83533 2.04015 -1.14441 0.814819 0.165328 -0.555641 + 2.05874 1.57734 -0.692196 0.955637 0.220504 -0.195282 + 2.06228 1.48826 -0.746906 0.959337 0.133581 -0.248655 + 2.02579 1.55705 -0.839262 0.947982 0.153683 -0.278768 + 1.96564 1.60198 -0.996678 0.927121 0.126419 -0.352796 + 2.04671 1.65056 -0.619819 0.961811 0.219504 -0.163514 + 2.0836 1.60426 -0.499617 0.944556 0.227231 -0.237024 + 2.09564 1.53103 -0.571994 0.962523 0.206975 -0.175247 + 2.09122 1.45139 -0.640447 0.975894 0.0889762 -0.199283 + 2.06073 1.38864 -0.790966 0.960789 0.118105 -0.250872 + 2.05087 1.7113 -0.556819 0.97071 0.08963 -0.222909 + 2.08045 1.67933 -0.46125 0.941754 0.153503 -0.299225 + 2.13379 1.6011 -0.367149 0.923814 0.167903 -0.34406 + 2.12301 1.50724 -0.430988 0.935587 0.191822 -0.296449 + 2.11859 1.42768 -0.499382 0.982869 0.038253 -0.180294 + 1.30253 1.11291 -1.43659 -0.820237 0.429347 0.377985 + 1.24544 1.07804 -1.44958 -0.173027 -0.082297 0.981473 + 1.26037 1.02438 -1.45144 -0.700595 -0.0458828 0.712082 + 1.3426 1.16556 -1.41618 -0.820964 0.52714 0.219409 + 1.3456 1.16561 -1.50585 -0.810721 0.564313 -0.155826 + 1.26874 1.04947 -1.46391 -0.478295 0.655899 -0.583979 + 1.24544 1.07804 -1.44958 -0.0479991 0.416655 -0.907797 + 1.33891 1.09936 -1.36652 -0.778355 0.197498 0.595952 + 1.39323 1.22173 -1.37206 -0.831872 0.518805 0.197055 + 1.38567 1.21834 -1.48539 -0.718961 0.690609 -0.078447 + 1.40949 1.225 -1.56412 -0.608212 0.750192 -0.259402 + 1.35337 1.16552 -1.5321 -0.822267 0.493318 -0.28375 + 1.31526 1.03417 -1.3908 -0.737079 -0.00556368 0.675784 + 1.38245 1.00039 -1.32068 -0.741638 0.0431278 0.669412 + 1.38954 1.15545 -1.32246 -0.800763 0.189376 0.568257 + 1.42804 1.26844 -1.32856 -0.874294 0.46343 0.144372 + 1.42592 1.25813 -1.43972 -0.71915 0.690669 -0.0761482 + 1.31912 0.885883 -1.39596 -0.743856 -0.0551313 0.666062 + 1.3588 0.935104 -1.34501 -0.759096 -0.0387793 0.649823 + 1.43222 0.938435 -1.25338 -0.792483 -0.0251114 0.609377 + 1.41032 1.07485 -1.29766 -0.756665 0.0477295 0.652058 + 1.26424 0.876179 -1.45655 -0.712912 -0.0276757 0.700707 + 1.36481 0.824607 -1.35122 -0.73417 -0.1549 0.66106 + 1.40449 0.873828 -1.30028 -0.767333 -0.0822381 0.635953 + 1.15338 0.931117 -1.57811 -0.750803 -0.0925044 0.654017 + 1.20752 0.861958 -1.50692 -0.735522 0.00278936 0.677495 + 1.26447 0.772444 -1.46028 -0.702389 -0.306301 0.642518 + 1.32119 0.786574 -1.40995 -0.694927 -0.0859872 0.713921 + 1.22106 1.06807 -1.48272 -0.270686 -0.808357 0.522769 + 1.11407 0.974727 -1.60944 -0.586119 -0.266673 0.765082 + 1.05745 0.968945 -1.65383 -0.630711 -0.550673 0.546775 + 1.05439 0.957346 -1.67294 -0.687817 -0.547951 0.476085 + 1.08013 0.917146 -1.67951 -0.745556 -0.464935 0.477475 + 1.10835 0.891593 -1.64305 -0.853496 -0.242545 0.461212 + 1.24544 1.07804 -1.44958 -0.749579 -0.230172 0.620607 + 1.09292 1.01632 -1.59089 -0.442721 -0.5433 0.713318 + 1.03631 1.01054 -1.63527 -0.630817 -0.110333 0.768048 + 0.994771 1.04413 -1.66085 -0.78387 0.19825 0.588425 + 0.99171 1.03263 -1.67992 -0.876001 -0.285815 0.3885 + 1.0238 0.965114 -1.71099 -0.78903 -0.517803 0.330622 + 1.04954 0.924914 -1.71756 -0.744273 -0.545269 0.385667 + 1.05009 1.03581 -1.64904 -0.0977583 0.735303 0.670651 + 1.00856 1.06949 -1.67458 -0.238031 0.660262 0.712317 + 0.969315 1.06119 -1.7084 -0.895747 -0.067017 0.439483 + 1.00141 0.993682 -1.73947 -0.883995 -0.467468 0.00506182 + 1.03953 0.916941 -1.75575 -0.845507 -0.492238 0.206931 + 1.09292 1.01632 -1.59089 -0.526645 0.609847 0.592227 + 0.806559 1.32541 -2.88944 -0.558204 0.564681 0.607901 + 0.806972 1.30427 -2.86942 -0.220093 0.648024 0.729126 + 0.831275 1.27798 -2.82269 -0.239099 0.870245 0.430704 + 0.815389 1.28112 -2.84272 -0.396157 0.70014 0.594023 + 0.812282 1.24475 -2.75953 -0.423957 0.774806 0.468974 + 0.829082 1.2376 -2.73315 -0.299861 0.753459 0.585134 + 0.855869 1.243 -2.7345 -0.191148 0.859784 0.473533 + 0.858063 1.28346 -2.82399 -0.122556 0.90488 0.407643 + 0.81342 1.32127 -2.91208 0.211659 0.926348 0.311577 + 0.765252 1.25011 -2.81322 -0.382628 0.700336 0.602599 + 0.796396 1.24789 -2.77957 -0.449154 0.757355 0.473998 + 0.781786 1.22053 -2.76578 -0.686583 0.412622 0.59862 + 0.802751 1.21632 -2.7361 -0.700208 0.441925 0.560724 + 0.819551 1.20909 -2.70976 -0.648239 0.537428 0.539405 + 0.756835 1.27327 -2.83993 -0.167237 0.642949 0.747428 + 0.740141 1.25385 -2.8313 -0.857479 0.332431 0.392708 + 0.750642 1.22267 -2.79949 -0.816389 0.242884 0.523943 + 0.767105 1.18344 -2.77254 -0.824546 0.0466552 0.563868 + 0.78807 1.17924 -2.74286 -0.819109 0.139 0.556543 + 0.762815 1.34027 -2.88619 -0.0796048 0.626757 0.775138 + 0.746121 1.32086 -2.87756 -0.629411 0.51735 0.579819 + 0.740144 1.22732 -2.83495 -0.942062 0.0918383 0.322623 + 0.750645 1.19614 -2.80314 -0.901227 -0.0012949 0.433346 + 0.806559 1.32541 -2.88944 0.277143 0.663466 0.694985 + 0.762402 1.36142 -2.90621 0.399341 0.900846 0.170304 + 0.743612 1.36243 -2.90876 -0.346555 0.794944 0.49796 + 0.740452 1.32252 -2.89143 -0.730302 0.393102 0.558686 + 0.734475 1.22898 -2.84882 -0.875732 0.197576 0.44052 + 0.723961 1.18408 -2.85365 -0.889039 0.00510389 0.457803 + 0.744275 1.16953 -2.81506 -0.892096 -0.0712825 0.446188 + 0.753638 1.36216 -2.9173 0.381278 0.849204 -0.365348 + 0.734848 1.36318 -2.91986 -0.569972 0.815532 -0.100198 + 0.722285 1.30336 -2.90405 -0.837144 0.290727 0.463323 + 0.719125 1.26344 -2.88671 -0.835075 0.246424 0.491858 + 0.708611 1.21854 -2.89154 -0.884514 0.135836 0.4463 + 0.806559 1.32541 -2.88944 0.644271 0.471065 -0.602504 + 0.747443 1.35908 -2.92595 0.241799 0.709465 -0.661961 + 0.723498 1.34021 -2.93208 -0.826675 0.559168 -0.0627738 + 0.710935 1.28039 -2.91626 -0.938589 0.231137 0.256177 + 0.697968 1.23703 -2.92117 -0.93935 0.23392 0.250806 + 0.686418 1.1672 -2.92422 -0.870361 0.079408 0.48597 + 0.739216 1.34428 -2.94413 -0.163885 0.944227 -0.285616 + 0.715271 1.32541 -2.95025 -0.82395 0.547343 -0.146702 + 0.70882 1.27688 -2.94239 -0.972672 0.20551 0.108054 + 0.695853 1.23354 -2.94732 -0.926637 0.334136 0.172329 + 0.675775 1.18578 -2.9538 -0.814374 0.323878 0.481558 + 0.752272 1.34314 -2.95816 -0.0644487 0.976553 0.205405 + 0.690081 1.32223 -2.99214 -0.707555 0.426026 0.563797 + 0.710462 1.31384 -2.964 -0.868745 0.257874 0.422828 + 0.704011 1.26531 -2.95615 -0.936897 0.25001 0.244376 + 0.692091 1.2342 -2.95767 -0.832678 0.327486 0.446542 + 0.799768 1.35538 -2.98155 0.107882 0.95339 0.281796 + 0.777883 1.36636 -3.02257 0.0510507 0.987437 0.149539 + 0.730388 1.35412 -2.99916 -0.288904 0.894992 0.339889 + 0.850375 1.31449 -2.91732 0.271329 0.876976 0.396602 + 0.836722 1.34868 -2.98676 0.296147 0.940715 0.165382 + 0.846376 1.34513 -3.0218 0.399249 0.901544 -0.166789 + 0.877136 1.30123 -2.90596 0.240545 0.961887 0.130045 + 0.899954 1.31617 -2.97904 0.441076 0.886789 0.13805 + 0.909608 1.31262 -3.01408 0.576954 0.801029 -0.159614 + 0.882594 1.29958 -2.8801 0.154256 0.985508 0.070555 + 0.943709 1.29575 -2.94127 0.33275 0.942986 -0.0074522 + 0.926715 1.30291 -2.96768 0.404418 0.914238 0.0247991 + 0.949318 1.28643 -2.99374 0.662062 0.702712 -0.260518 + 0.933412 1.29065 -3.02023 0.658798 0.675252 -0.331691 + 0.880748 1.29581 -2.84857 0.00134481 0.960866 0.277012 + 0.948567 1.29623 -2.86431 0.221952 0.974397 0.0358988 + 0.949168 1.29402 -2.91547 0.27578 0.961148 -0.0118441 + 0.98106 1.27856 -2.92569 0.794983 0.59719 -0.106617 + 0.966312 1.27927 -2.96733 0.745938 0.617867 -0.248628 + 0.941826 1.27882 -2.78935 0.141964 0.885366 0.442689 + 0.94672 1.29238 -2.83283 0.161147 0.960719 0.225943 + 0.988214 1.27832 -2.83389 0.526555 0.833225 0.168746 + 0.980459 1.28078 -2.87453 0.531262 0.843032 -0.084012 + 0.91914 1.26648 -2.76477 -0.0257045 0.917182 0.397638 + 0.983319 1.26477 -2.79041 0.361393 0.848285 0.387051 + 1.01994 1.25288 -2.85401 0.681815 0.720368 -0.127269 + 1.01218 1.25533 -2.89466 0.720218 0.629439 -0.291707 + 0.986984 1.24749 -2.93948 0.842663 0.395526 -0.365346 + 0.878192 1.22829 -2.69583 -0.202904 0.896 0.394987 + 0.941463 1.25178 -2.72611 -0.0217896 0.928727 0.370124 + 1.0015 1.25512 -2.76769 0.171379 0.98227 -0.0759961 + 1.00108 1.25237 -2.77993 0.335067 0.941782 0.0278619 + 1.0373 1.24602 -2.83274 0.59118 0.795722 -0.131652 + 0.862039 1.21597 -2.67048 -0.353989 0.860613 0.366111 + 0.94738 1.22467 -2.66936 -0.0527854 0.921491 0.384797 + 0.986856 1.22901 -2.68127 0.106088 0.863739 0.492647 + 0.98094 1.25611 -2.73802 0.0255142 0.986986 0.158767 + 0.835042 1.19344 -2.67006 -0.74745 0.498613 0.43898 + 0.876853 1.2022 -2.62483 -0.346184 0.878847 0.328306 + 0.931226 1.21225 -2.64405 -0.0962557 0.94093 0.324631 + 0.82485 1.16142 -2.67061 -0.895127 0.240871 0.375138 + 0.834107 1.13159 -2.62274 -0.899956 0.25666 0.352427 + 0.849856 1.17976 -2.62437 -0.76307 0.514633 0.390995 + 0.883468 1.19496 -2.5945 -0.413403 0.867205 0.277585 + 0.80936 1.17716 -2.71027 -0.851487 0.194764 0.486864 + 0.798097 1.1421 -2.72174 -0.884447 0.0911255 0.457656 + 0.814874 1.13507 -2.68037 -0.920936 0.169296 0.351021 + 0.824131 1.10524 -2.6325 -0.941854 0.0956495 0.322121 + 0.846683 1.11699 -2.58144 -0.850833 0.157033 0.501421 + 0.776807 1.14418 -2.75434 -0.852351 -0.114855 0.510201 + 0.762373 1.12165 -2.79273 -0.893641 -0.0200451 0.448335 + 0.791705 1.10019 -2.72515 -0.910796 0.0867619 0.403637 + 0.808482 1.09317 -2.68378 -0.932208 0.0815051 0.352626 + 0.760734 1.15684 -2.78447 -0.883749 -0.0639518 0.463571 + 0.7463 1.13431 -2.82285 -0.896797 -0.147159 0.417252 + 0.725986 1.14877 -2.86149 -0.873084 -0.0543001 0.484537 + 0.758251 0.991941 -2.78005 -0.907306 0.0560661 0.416715 + 0.686176 1.06194 -2.9165 -0.78003 0.0929665 0.618797 + 0.725744 1.0435 -2.85377 -0.873127 0.0417324 0.485704 + 0.763945 0.810468 -2.75313 -0.950184 0.00335823 0.311672 + 0.784835 0.713102 -2.65509 -0.955928 0.0222523 0.292757 + 0.787583 0.970479 -2.71248 -0.910953 0.083724 0.403924 + 0.647707 1.18379 -2.99095 -0.728875 0.242059 0.640429 + 0.636951 1.07292 -2.96692 -0.694806 0.166539 0.69965 + 0.691375 0.908283 -2.88575 -0.756229 0.0722199 0.650309 + 0.731438 0.862037 -2.82686 -0.863858 0.0379043 0.502307 + 0.664024 1.23221 -2.99482 -0.723184 0.293507 0.625187 + 0.596155 1.19695 -3.04635 -0.673594 0.289111 0.68021 + 0.585399 1.08609 -3.02232 -0.667304 0.215735 0.712857 + 0.642151 0.919266 -2.93618 -0.575568 0.139635 0.805744 + 0.70025 1.26598 -2.9665 -0.839475 0.242667 0.486205 + 0.679869 1.27438 -2.99465 -0.749496 0.213944 0.626485 + 0.619842 1.24071 -3.04454 -0.695664 0.306045 0.649913 + 0.646435 1.3151 -3.04898 -0.703495 0.439975 0.558137 + 0.635687 1.28288 -3.04437 -0.711662 0.302413 0.6341 + 0.595684 1.25431 -3.07788 -0.749735 0.353766 0.559238 + 0.571997 1.21055 -3.0797 -0.599589 0.478256 0.641689 + 0.539081 1.20411 -3.10155 -0.588134 0.349215 0.729484 + 0.700087 1.3477 -3.01025 -0.44719 0.793062 0.413609 + 0.65644 1.34066 -3.06706 -0.487157 0.766258 0.418959 + 0.620873 1.3181 -3.08259 -0.722537 0.40748 0.558481 + 0.610125 1.28579 -3.07802 -0.767265 0.342722 0.542076 + 0.695376 1.35868 -3.08727 -0.190913 0.952482 0.23734 + 0.681277 1.36645 -3.11213 -0.00826762 0.927968 0.372568 + 0.642341 1.34843 -3.09191 -0.327128 0.66882 0.667583 + 0.620269 1.32826 -3.09077 -0.689576 0.437648 0.577018 + 0.725677 1.3651 -3.07618 -0.152684 0.988161 0.0150318 + 0.748237 1.36493 -3.10089 0.0761242 0.996453 -0.0358613 + 0.663343 1.37105 -3.12769 0.0609541 0.975168 0.212913 + 0.644497 1.37624 -3.10808 0.00601558 0.829783 0.558054 + 0.622425 1.35607 -3.10695 -0.496327 0.447925 0.743655 + 0.800443 1.36619 -3.04727 0.297307 0.947271 0.119521 + 0.820561 1.35346 -3.09762 0.331798 0.939532 -0.0847929 + 0.822392 1.35025 -3.13007 0.374969 0.924829 -0.0639524 + 0.750068 1.36172 -3.13333 0.190851 0.981604 0.00546958 + 0.665156 1.37844 -3.1423 -0.0203897 0.8774 0.479326 + 0.828296 1.3515 -3.05063 0.6188 0.741501 0.25935 + 0.848414 1.33877 -3.10098 0.805762 0.588042 0.070385 + 0.850536 1.32721 -3.13796 0.842903 0.519016 -0.141902 + 0.842038 1.33793 -3.14952 0.74284 0.660398 -0.109829 + 0.807773 1.35332 -3.17718 0.344728 0.936776 -0.0601094 + 0.836077 1.34062 -3.04639 0.604754 0.788035 -0.11521 + 0.859362 1.30741 -3.11426 0.91799 0.389819 -0.0730424 + 0.861484 1.29584 -3.15123 0.961286 0.169616 -0.217163 + 0.83701 1.30443 -3.1987 0.873634 0.162979 -0.458477 + 0.828512 1.31515 -3.21027 0.75927 0.18011 -0.625355 + 0.879112 1.29481 -3.08344 0.728265 0.590416 -0.347906 + 0.867142 1.29652 -3.11001 0.798194 0.500449 -0.335318 + 0.860707 1.25354 -3.15315 0.892924 0.028105 -0.449329 + 0.836233 1.26212 -3.20062 0.782612 -0.115591 -0.611683 + 0.889411 1.29932 -3.05886 0.549736 0.69309 -0.466278 + 0.892395 1.25566 -3.09584 0.842981 0.215754 -0.492781 + 0.880425 1.25738 -3.12241 0.85511 0.189574 -0.482544 + 0.871592 1.18768 -3.12529 0.826093 -0.0241988 -0.563014 + 0.913215 1.27735 -3.065 0.517098 0.497921 -0.696193 + 0.906593 1.25503 -3.07875 0.672367 0.222181 -0.706087 + 0.891311 1.19161 -3.0945 0.821475 0.0304554 -0.56943 + 0.940599 1.25994 -3.04386 0.782028 0.31206 -0.539492 + 0.933976 1.23772 -3.05755 0.724393 0.0474008 -0.687756 + 0.905509 1.19098 -3.0774 0.736723 -0.0626343 -0.673287 + 0.924853 1.16125 -3.05211 0.757926 0.092378 -0.645767 + 0.956505 1.25574 -3.01736 0.845158 0.315706 -0.431321 + 0.953321 1.20799 -3.03226 0.76822 -0.0603313 -0.637336 + 0.972236 1.24811 -2.98116 0.901768 0.285438 -0.324561 + 0.983819 1.212 -2.97801 0.900292 0.21221 -0.380053 + 0.968088 1.21962 -3.01421 0.840211 0.113884 -0.530165 + 0.986052 1.14559 -2.97619 0.802296 0.138504 -0.580635 + 0.997624 1.21503 -2.94985 0.843359 0.255684 -0.472622 + 1.00082 1.15722 -2.95813 0.852129 -0.0160561 -0.523085 + 1.04075 1.13677 -2.8959 0.805804 0.287854 -0.517514 + 1.06735 1.08183 -2.90755 0.720687 0.549714 -0.422402 + 1.00278 1.09979 -2.98406 0.711893 0.501873 -0.491254 + 1.02282 1.22287 -2.90504 0.844313 0.311891 -0.435729 + 1.01462 1.16025 -2.92998 0.854996 0.182781 -0.485358 + 1.04895 1.19939 -2.87097 0.81289 0.314196 -0.490399 + 1.09691 1.11595 -2.82104 0.799905 0.313031 -0.512019 + 1.1235 1.06101 -2.83269 0.698799 0.586245 -0.409874 + 1.06631 1.19254 -2.84971 0.784574 0.301124 -0.542004 + 1.0807 1.1925 -2.82743 0.779574 0.356129 -0.515206 + 1.1113 1.11582 -2.79883 0.772065 0.249808 -0.58439 + 1.1847 1.04322 -2.75687 0.678877 0.638404 -0.36272 + 1.05505 1.23363 -2.82227 0.652053 0.745352 -0.138843 + 1.06865 1.22229 -2.81203 0.601831 0.737651 -0.306056 + 1.0943 1.18108 -2.81725 0.665882 0.147786 -0.731274 + 1.10832 1.18096 -2.80125 0.812738 0.211133 -0.543028 + 1.12532 1.1158 -2.78279 0.809449 0.228221 -0.541025 + 1.06907 1.22495 -2.79984 0.367358 0.878654 -0.304985 + 1.10091 1.21132 -2.79184 0.684034 0.566983 -0.458941 + 1.12906 1.16266 -2.76575 0.890237 0.221544 -0.397991 + 1.153 1.14253 -2.72549 0.880135 0.277413 -0.385233 + 1.14926 1.09558 -2.74257 0.83547 0.384426 -0.392692 + 1.05669 1.24472 -2.77308 0.276617 0.938121 -0.208355 + 1.08853 1.23109 -2.76508 0.445763 0.880753 -0.159903 + 1.11572 1.21894 -2.74322 0.682791 0.714263 -0.153706 + 1.12164 1.19301 -2.75633 0.889767 0.334273 -0.310767 + 1.13784 1.18449 -2.71436 0.893461 0.379847 -0.239673 + 1.03613 1.2458 -2.74336 0.212104 0.949005 0.23324 + 1.06359 1.23826 -2.73789 0.240886 0.954662 0.174915 + 1.09078 1.2261 -2.71603 0.235643 0.96309 0.130119 + 1.13191 1.21041 -2.70125 0.770303 0.634702 -0.0615336 + 1.01432 1.22146 -2.67579 0.0882708 0.964511 0.24885 + 1.02305 1.21805 -2.64968 -0.0348986 0.987771 0.151954 + 1.09952 1.22269 -2.68993 0.187654 0.98196 0.023254 + 1.13078 1.21224 -2.64523 0.590672 0.806697 -0.0186057 + 0.990116 1.20637 -2.60766 -0.0839998 0.956858 0.27815 + 1.09838 1.22452 -2.6339 0.133558 0.981804 0.134998 + 1.14095 1.20304 -2.60229 0.560528 0.825679 0.0637312 + 1.15267 1.18141 -2.66743 0.839699 0.516898 -0.166499 + 1.16783 1.13946 -2.67856 0.864399 0.43995 -0.243429 + 0.937842 1.20493 -2.61377 -0.0585684 0.963529 0.261115 + 0.948539 1.19817 -2.59145 -0.0251799 0.950696 0.309101 + 0.967912 1.176 -2.52145 -0.158938 0.929052 0.334067 + 1.06545 1.21285 -2.59188 -0.0449399 0.973614 0.22373 + 0.888448 1.18672 -2.54942 -0.422628 0.850001 0.314456 + 0.899145 1.17995 -2.5271 -0.25357 0.831593 0.494121 + 0.926335 1.16779 -2.50524 0.0118262 0.734204 0.678827 + 0.91171 1.13684 -2.48263 -0.594806 0.556296 0.580294 + 0.982868 1.16997 -2.4862 -0.272244 0.949284 0.157298 + 0.862432 1.16515 -2.58306 -0.843803 0.424433 0.32841 + 0.867412 1.15699 -2.53792 -0.891763 0.293355 0.34453 + 0.88452 1.14899 -2.50448 -0.688939 0.341354 0.639406 + 0.867952 1.10422 -2.55012 -0.888783 0.00310142 0.458318 + 0.885061 1.09631 -2.51663 -0.911197 0.0305639 0.410835 + 0.90077 1.09393 -2.4795 -0.894608 0.159997 0.417226 + 0.834743 1.0821 -2.60222 -0.891384 -0.190872 0.411099 + 0.856012 1.06933 -2.5709 -0.882663 0.107983 0.457434 + 0.876887 1.05242 -2.51521 -0.889029 0.231324 0.395115 + 0.892596 1.05004 -2.47808 -0.906558 0.266655 0.32718 + 0.91422 1.0936 -2.44394 -0.947581 0.260035 0.185669 + 0.819094 1.07002 -2.65349 -0.937619 0.0156662 0.347312 + 0.842512 1.04608 -2.58462 -0.910644 0.16722 0.377843 + 0.863387 1.02917 -2.52894 -0.913336 0.175327 0.367529 + 0.813708 0.928872 -2.64202 -0.924804 0.0743181 0.373113 + 0.837126 0.904844 -2.5732 -0.934105 0.0506815 0.353383 + 0.862232 0.8689 -2.50514 -0.94576 0.0402809 0.322359 + 0.882186 1.00437 -2.45918 -0.948184 0.169656 0.268635 + 0.81096 0.671494 -2.58463 -0.884844 0.0459353 0.463618 + 0.843492 0.617564 -2.52622 -0.916776 -0.0154819 0.399102 + 0.868597 0.581615 -2.45815 -0.939481 -0.0542891 0.338273 + 0.895077 0.562532 -2.3843 -0.94922 -0.0924291 0.300729 + 0.881031 0.844101 -2.43539 -0.959831 0.0229515 0.279638 + 0.79294 0.560906 -2.64128 -0.964058 -0.194843 0.180632 + 0.83036 0.496081 -2.5744 -0.916484 -0.257982 0.30578 + 0.862892 0.442151 -2.51599 -0.888344 -0.401692 0.22246 + 0.904768 0.409989 -2.44929 -0.843064 -0.467362 0.26611 + 0.77205 0.658362 -2.73928 -0.947906 -0.0393929 0.316105 + 0.820585 0.480402 -2.67264 -0.918146 -0.32715 0.223562 + 0.858005 0.415578 -2.60577 -0.845312 -0.436601 0.307939 + 0.910705 0.378083 -2.54642 -0.788636 -0.563118 0.246883 + 0.95258 0.345927 -2.47973 -0.717796 -0.629482 0.297525 + 0.736264 0.710197 -2.81106 -0.863871 0.00460857 0.503692 + 0.77928 0.535043 -2.72769 -0.877255 -0.146152 0.457235 + 0.81956 0.390287 -2.77676 -0.846957 -0.394571 0.35634 + 0.860865 0.33565 -2.72173 -0.84238 -0.459432 0.281633 + 0.911098 0.308272 -2.65471 -0.765361 -0.534496 0.358521 + 0.696201 0.756447 -2.86997 -0.789895 0.0132344 0.613099 + 0.743494 0.586878 -2.79947 -0.898543 -0.126245 0.420337 + 0.771455 0.415147 -2.84922 -0.854741 -0.354118 0.379497 + 0.873381 0.196486 -2.86869 -0.750353 -0.520508 0.407482 + 0.930101 0.177676 -2.79671 -0.746588 -0.556319 0.364849 + 0.650257 0.756918 -2.92238 -0.542823 0.0236162 0.839515 + 0.701816 0.617653 -2.86977 -0.822584 -0.154655 0.547208 + 0.729778 0.44592 -2.91952 -0.828065 -0.328785 0.454102 + 0.825276 0.221345 -2.94114 -0.789122 -0.464703 0.401669 + 0.592856 0.721468 -2.93838 -0.499686 -0.0680936 0.863526 + 0.655872 0.618129 -2.92219 -0.684809 -0.242747 0.687103 + 0.682178 0.444467 -2.9922 -0.710059 -0.376243 0.595196 + 0.772757 0.219313 -3.03282 -0.742349 -0.477129 0.470389 + 0.58475 0.88381 -2.95217 -0.50823 0.150182 0.848026 + 0.542083 0.679823 -2.98485 -0.612835 -0.169475 0.771824 + 0.607761 0.585761 -2.98813 -0.565869 -0.370678 0.736471 + 0.634068 0.412018 -3.0582 -0.638313 -0.416062 0.647649 + 0.725157 0.217773 -3.10556 -0.701475 -0.491603 0.516004 + 0.531513 1.06108 -3.0644 -0.625987 0.244037 0.740667 + 0.530865 0.858806 -2.99426 -0.704745 0.0984981 0.70259 + 0.494928 0.617412 -3.03835 -0.574625 -0.195356 0.794759 + 0.556988 0.544116 -3.0346 -0.399929 -0.435911 0.806249 + 0.582788 0.389107 -3.12352 -0.468106 -0.495807 0.731473 + 0.470823 1.0643 -3.11199 -0.632253 0.192894 0.750366 + 0.48371 0.796392 -3.04775 -0.713334 0.0518902 0.698901 + 0.440181 0.567976 -3.08593 -0.514652 -0.195692 0.834768 + 0.505421 0.495836 -3.08818 -0.369874 -0.45455 0.810295 + 0.531221 0.340828 -3.17709 -0.408243 -0.546315 0.731353 + 0.478391 1.20726 -3.14919 -0.548683 0.279114 0.788062 + 0.411206 1.20736 -3.19318 -0.520528 0.281555 0.806087 + 0.413563 1.03519 -3.15817 -0.588014 0.157852 0.793298 + 0.42645 0.767278 -3.09393 -0.644101 0.0580872 0.762732 + 0.550071 1.24921 -3.12146 -0.519171 0.346405 0.781323 + 0.508176 1.25605 -3.1455 -0.506641 0.261836 0.821436 + 0.477073 1.2723 -3.17425 -0.587973 0.245212 0.770817 + 0.447288 1.22359 -3.17789 -0.531353 0.351651 0.770718 + 0.582987 1.25574 -3.09956 -0.674543 0.373596 0.636724 + 0.571491 1.29953 -3.12541 -0.507356 0.253325 0.82366 + 0.529596 1.30636 -3.14945 -0.481966 0.213162 0.849865 + 0.484204 1.31017 -3.17625 -0.550425 0.128092 0.825 + 0.441119 1.27996 -3.20792 -0.542797 0.227698 0.808409 + 0.597427 1.28713 -3.09974 -0.7191 0.364049 0.591914 + 0.596824 1.29737 -3.10787 -0.628685 0.382611 0.677026 + 0.597092 1.35823 -3.12449 -0.481094 0.399942 0.780125 + 0.540536 1.34948 -3.15254 -0.452757 0.341733 0.823547 + 0.495144 1.35338 -3.17928 -0.367877 0.431313 0.823793 + 0.626563 1.38075 -3.12369 -0.14922 0.981271 0.121821 + 0.570007 1.37209 -3.15169 -0.326274 0.763485 0.557347 + 0.57182 1.37949 -3.16631 -0.243952 0.853876 0.459764 + 0.535893 1.3848 -3.19771 -0.279474 0.862132 0.422637 + 0.501026 1.37766 -3.19754 -0.156716 0.805888 0.57095 + 0.45252 1.35984 -3.19848 -0.478666 0.263273 0.837595 + 0.44825 1.31783 -3.20992 -0.624181 0.036017 0.780449 + 0.633806 1.40745 -3.18594 -0.0523282 0.941843 0.331954 + 0.597879 1.41285 -3.21729 -0.0988632 0.983253 0.153097 + 0.521536 1.39995 -3.26795 -0.0862199 0.988228 0.126376 + 0.486669 1.39281 -3.26778 -0.0158785 0.905248 0.424587 + 0.458403 1.38412 -3.21674 -0.0611349 0.828436 0.556737 + 0.700704 1.3806 -3.14983 0.250097 0.725419 0.641263 + 0.669354 1.40969 -3.19342 0.176446 0.978852 0.103515 + 0.661598 1.4 -3.24124 0.286453 0.924849 -0.250197 + 0.618248 1.4097 -3.25283 0.145553 0.969154 -0.198883 + 0.730432 1.36816 -3.14988 0.2606 0.938643 0.225912 + 0.714159 1.38846 -3.19644 0.406331 0.913714 0.00464153 + 0.706403 1.37868 -3.24431 0.491951 0.764685 -0.416222 + 0.660643 1.36268 -3.328 0.50912 0.763275 -0.397754 + 0.617293 1.37238 -3.33959 0.229824 0.91507 -0.331403 + 0.788137 1.35976 -3.19374 0.343841 0.933367 -0.102948 + 0.743887 1.37593 -3.19654 0.374091 0.927254 -0.0159809 + 0.759644 1.36237 -3.21786 0.387649 0.740591 -0.548865 + 0.734897 1.36508 -3.22996 0.517085 0.301449 -0.801094 + 0.695527 1.3494 -3.28519 0.733434 0.436486 -0.521109 + 0.803894 1.3462 -3.21505 0.433349 0.670951 -0.601692 + 0.775423 1.33123 -3.23053 0.314749 0.335889 -0.887756 + 0.750676 1.33395 -3.24263 0.569269 0.372345 -0.733002 + 0.724021 1.3358 -3.27084 0.611058 0.356967 -0.706528 + 0.827419 1.341 -3.19664 0.711096 0.602111 -0.363049 + 0.804987 1.32035 -3.22868 0.406684 0.242789 -0.880717 + 0.81049 1.2834 -3.23168 0.467265 -0.0275923 -0.883687 + 0.780926 1.29429 -3.23354 0.308523 0.0410823 -0.950329 + 0.758508 1.28489 -3.24767 0.632447 0.0881508 -0.769572 + 0.731854 1.28674 -3.27587 0.743752 0.149028 -0.651632 + 0.798461 1.22376 -3.22077 0.579906 -0.132253 -0.803877 + 0.776043 1.21436 -3.2349 0.635483 -0.0263831 -0.771664 + 0.74007 1.21133 -3.26986 0.755918 0.0101932 -0.654586 + 0.711436 1.20857 -3.31008 0.83955 0.00589757 -0.543251 + 0.70322 1.28398 -3.31609 0.874413 0.145166 -0.462957 + 0.824204 1.20238 -3.18975 0.7643 -0.100354 -0.637004 + 0.831356 1.13163 -3.18461 0.732241 -0.0189649 -0.680782 + 0.792498 1.14151 -3.21772 0.668946 -0.0403856 -0.742213 + 0.756525 1.13848 -3.25267 0.719142 -0.0116432 -0.694766 + 0.729949 1.09364 -3.2816 0.792301 -0.0141198 -0.609967 + 0.878744 1.11684 -3.12019 0.692636 0.2474 -0.677532 + 0.844468 1.01909 -3.16388 0.461867 0.136264 -0.876419 + 0.805611 1.02897 -3.19699 0.673932 0.0307018 -0.738155 + 0.779035 0.984124 -3.22592 0.675871 0.0635502 -0.734275 + 0.941584 1.11545 -3.05998 0.680165 0.47123 -0.561531 + 0.906005 1.05988 -3.15032 0.331442 0.398504 -0.855185 + 0.924277 0.952189 -3.16241 0.39304 0.121718 -0.91143 + 0.862741 0.911406 -3.17596 0.374121 0.163141 -0.912918 + 0.968845 1.05849 -3.09012 0.674047 0.449019 -0.586552 + 0.981885 0.970858 -3.11574 0.682698 0.185786 -0.706687 + 0.924354 0.819293 -3.17382 0.552254 0.13559 -0.822576 + 1.03934 1.04783 -3.00726 0.702325 0.486809 -0.519381 + 1.05238 0.960199 -3.03288 0.733141 0.228749 -0.640452 + 1.04096 0.835847 -3.07489 0.691687 0.109127 -0.713905 + 0.981962 0.837958 -3.12715 0.636854 0.0708287 -0.767724 + 1.1039 1.02987 -2.93075 0.705609 0.53323 -0.46667 + 1.14424 0.938086 -2.94017 0.730665 0.282997 -0.621322 + 1.10361 0.92803 -2.98836 0.712472 0.205664 -0.670884 + 1.09219 0.803672 -3.03036 0.669875 0.166967 -0.723457 + 1.03949 0.728479 -3.08773 0.5943 0.106962 -0.797099 + 1.171 1.00422 -2.86553 0.681395 0.559318 -0.472085 + 1.21134 0.912432 -2.87494 0.719467 0.23453 -0.653729 + 1.24475 0.789843 -2.86081 0.760583 0.196185 -0.61889 + 1.1949 0.799574 -2.92747 0.76117 0.227231 -0.607443 + 1.15427 0.789519 -2.97565 0.701597 0.205424 -0.682322 + 1.23221 0.986422 -2.7897 0.675687 0.613269 -0.409082 + 1.26662 0.915059 -2.81249 0.725456 0.341597 -0.597516 + 1.30003 0.792556 -2.79831 0.599488 0.116832 -0.791811 + 1.2762 0.695953 -2.85739 0.73175 0.312722 -0.605597 + 1.23602 1.03286 -2.68113 0.655973 0.688321 -0.309698 + 1.30144 0.975091 -2.69707 0.660996 0.64522 -0.383112 + 1.33585 0.903728 -2.71987 0.695777 0.480519 -0.53385 + 1.34461 0.824924 -2.77497 0.613318 0.243218 -0.751456 + 1.20058 1.08523 -2.66683 0.805471 0.497716 -0.321706 + 1.2355 1.07169 -2.57379 0.715248 0.670455 -0.197257 + 1.28515 1.0287 -2.58513 0.612554 0.759543 -0.218797 + 1.35057 0.970939 -2.60108 0.628319 0.718758 -0.297661 + 1.38363 0.891352 -2.67423 0.716143 0.510962 -0.475455 + 1.18088 1.1429 -2.63392 0.839339 0.518009 -0.164855 + 1.21363 1.08867 -2.62219 0.867228 0.446428 -0.220494 + 1.212 1.11193 -2.53548 0.756913 0.637373 -0.144352 + 1.27318 1.0645 -2.46373 0.664414 0.731832 -0.151576 + 1.32283 1.02151 -2.47507 0.533209 0.816656 -0.22082 + 1.16285 1.17229 -2.62444 0.834291 0.544902 -0.0839092 + 1.19013 1.12891 -2.58389 0.826729 0.554336 -0.0960763 + 1.1721 1.15831 -2.57441 0.856889 0.512622 -0.0543991 + 1.18127 1.14826 -2.52601 0.805008 0.590456 -0.0576533 + 1.22233 1.10923 -2.49381 0.716509 0.684521 -0.134333 + 1.16169 1.17928 -2.56753 0.757527 0.651927 0.0338273 + 1.11981 1.21108 -2.56861 0.168116 0.985702 0.0113623 + 1.14055 1.18741 -2.53381 0.432184 0.87621 0.213246 + 1.17086 1.16932 -2.51908 0.735448 0.676211 0.043078 + 1.16543 1.17131 -2.46853 0.570611 0.821127 -0.0123467 + 1.1916 1.14556 -2.48434 0.701022 0.707854 -0.0866668 + 1.0804 1.20673 -2.55668 -0.0678785 0.981014 0.181669 + 1.08928 1.18644 -2.47874 0.0821197 0.965555 0.2469 + 1.09447 1.1792 -2.45001 0.0182652 0.997846 0.0630083 + 1.14574 1.18017 -2.50508 0.301642 0.948149 0.100127 + 1.04987 1.18209 -2.46681 -0.127035 0.980773 0.148146 + 1.09184 1.17938 -2.4269 0.0142783 0.999779 -0.0154023 + 1.14031 1.18208 -2.45458 0.148682 0.988638 -0.0221078 + 1.16158 1.17478 -2.43814 0.537232 0.841689 0.0542304 + 0.952427 1.16044 -2.45231 -0.437754 0.897693 -0.0501898 + 1.01943 1.17257 -2.43291 -0.190886 0.981002 0.0346086 + 1.01558 1.17032 -2.39601 -0.0987706 0.990661 0.0939989 + 1.04735 1.17306 -2.38357 -0.1449 0.987065 0.0686003 + 1.08819 1.18004 -2.40846 -0.0644724 0.997895 0.00699668 + 0.925161 1.13651 -2.44707 -0.836032 0.519219 0.177373 + 0.95903 1.1691 -2.4199 -0.3522 0.933655 -0.0651455 + 0.955185 1.16677 -2.38307 -0.358833 0.930344 0.0754888 + 0.93663 1.15101 -2.30578 -0.420606 0.880546 0.21847 + 0.9684 1.15384 -2.29328 -0.202692 0.955332 0.215076 + 0.931764 1.14517 -2.41466 -0.82712 0.562025 -0.000698458 + 0.932578 1.14581 -2.36357 -0.849154 0.528143 -0.00128994 + 0.914023 1.12997 -2.28633 -0.930181 0.367025 -0.00748337 + 0.974547 1.14311 -2.24689 -0.146146 0.96026 0.237787 + 1.08239 1.17791 -2.33317 -0.0478934 0.985577 0.162311 + 0.919198 1.10644 -2.39597 -0.956791 0.290327 0.0161777 + 0.920013 1.10707 -2.34487 -0.944296 0.268242 0.19066 + 0.929803 1.09339 -2.29977 -0.997613 -0.0684833 -0.00881137 + 0.904511 1.05753 -2.44045 -0.951047 0.272972 0.144897 + 0.909489 1.07044 -2.39242 -0.975029 0.202737 0.0906424 + 0.914026 1.05165 -2.35327 -0.971286 0.111476 0.210184 + 0.923815 1.03796 -2.30816 -0.980843 0.0810049 0.177156 + 0.926824 1.07678 -2.2384 -0.974239 -0.198443 -0.107135 + 0.894101 1.01186 -2.42156 -0.94737 0.25029 0.199614 + 0.898638 0.993068 -2.38241 -0.972827 0.0846928 0.215486 + 0.913802 0.9689 -2.31155 -0.976611 0.0558439 0.207637 + 0.923286 0.9505 -2.24968 -0.989984 -0.0133627 0.140548 + 0.9333 1.01948 -2.24635 -0.999525 0.0138456 0.027546 + 0.900385 0.845177 -2.37266 -0.967859 0.00332926 0.251472 + 0.915549 0.821097 -2.30175 -0.970909 -0.0303687 0.237513 + 0.936049 0.81885 -2.23186 -0.968691 -0.0553289 0.242026 + 0.940327 0.92798 -2.17827 -0.974351 -0.13064 0.183231 + 0.92678 0.999707 -2.18871 -0.995003 -0.0861782 0.0504268 + 0.914431 0.563609 -2.32156 -0.899239 -0.120208 0.420618 + 0.934239 0.615486 -2.27582 -0.930408 -0.1012 0.352278 + 0.954739 0.613244 -2.20594 -0.932294 -0.187961 0.309028 + 0.9812 0.627521 -2.12066 -0.931412 -0.205704 0.300262 + 0.953089 0.796417 -2.1604 -0.965353 -0.0840891 0.247028 + 0.931247 0.390906 -2.37543 -0.784739 -0.550677 0.284497 + 0.9674 0.395445 -2.30669 -0.684164 -0.517101 0.514322 + 0.987209 0.44724 -2.26101 -0.744546 -0.366499 0.557969 + 1.00997 0.477562 -2.19773 -0.764592 -0.47245 0.438394 + 1.00436 0.330429 -2.40948 -0.629916 -0.706063 0.323543 + 1.04052 0.334882 -2.34079 -0.603828 -0.723666 0.334215 + 1.07843 0.337759 -2.25998 -0.631622 -0.624216 0.459791 + 1.10119 0.368082 -2.1967 -0.595181 -0.528881 0.605015 + 1.01351 0.260159 -2.51977 -0.696086 -0.611783 0.375747 + 1.06529 0.244662 -2.44953 -0.694796 -0.608913 0.382731 + 1.11078 0.244901 -2.36655 -0.698305 -0.61152 0.37204 + 1.14869 0.247773 -2.28572 -0.680572 -0.612644 0.401857 + 0.963798 0.270777 -2.59536 -0.747005 -0.570387 0.341529 + 1.08132 0.139613 -2.57138 -0.66432 -0.646582 0.374982 + 1.12487 0.148312 -2.48305 -0.66486 -0.644521 0.377562 + 1.17036 0.148551 -2.40006 -0.665451 -0.645935 0.37409 + 1.21585 0.15262 -2.31431 -0.643736 -0.653095 0.398837 + 1.03161 0.150229 -2.64697 -0.682573 -0.623963 0.38048 + 1.0949 0.063421 -2.70421 -0.499715 -0.814254 0.295424 + 1.14295 0.067705 -2.61003 -0.488574 -0.817523 0.30488 + 1.1865 0.076404 -2.5217 -0.51608 -0.800222 0.305461 + 1.23065 0.082109 -2.42798 -0.526274 -0.793275 0.306186 + 0.980334 0.150298 -2.72969 -0.700203 -0.606399 0.376824 + 1.04362 0.063489 -2.78693 -0.506161 -0.812992 0.287829 + 1.10235 0.025305 -2.8486 -0.341774 -0.92234 0.180219 + 1.15152 0.028616 -2.74833 -0.3442 -0.917666 0.198531 + 1.19957 0.032899 -2.65415 -0.372208 -0.898997 0.230793 + 0.989418 0.068168 -2.87763 -0.549534 -0.791573 0.267254 + 1.04815 0.029898 -2.93935 -0.357127 -0.918277 0.17096 + 1.13541 0.009312 -2.87949 0.114029 -0.990566 -0.0760006 + 1.18457 0.012616 -2.77921 -0.215265 -0.968517 0.125045 + 1.23162 0.013941 -2.67851 -0.244951 -0.957156 0.154439 + 0.932698 0.086978 -2.94961 -0.570699 -0.758707 0.314113 + 0.989046 0.03358 -3.04213 -0.366431 -0.909163 0.197867 + 1.02346 0.014294 -3.08632 -0.0908701 -0.992946 0.0761693 + 1.08256 0.010615 -2.98355 0.121831 -0.988497 -0.0896097 + 0.87449 0.089578 -3.03132 -0.57292 -0.734133 0.364433 + 0.930838 0.036182 -3.12383 -0.287014 -0.91081 0.296731 + 0.963492 0.009705 -3.17978 -0.0451712 -0.988402 0.144984 + 1.04045 0.016546 -3.10162 0.331272 -0.932238 -0.145572 + 1.09387 0.020379 -2.98946 0.509725 -0.817379 -0.268464 + 0.821971 0.08746 -3.12305 -0.603842 -0.679487 0.416741 + 0.863394 0.02385 -3.19867 -0.344298 -0.873396 0.344439 + 0.896048 -0.002625 -3.25462 -0.0205348 -0.996729 0.0781625 + 0.980486 0.012045 -3.19503 0.340731 -0.926335 -0.160643 + 0.763439 0.084031 -3.20171 -0.57675 -0.68164 0.450251 + 0.804862 0.020423 -3.27734 -0.407896 -0.860627 0.304863 + 0.835807 -0.002219 -3.32752 -0.0700688 -0.997515 0.00733986 + 0.925137 0.007863 -3.27798 0.360889 -0.898524 -0.249827 + 0.711511 0.081249 -3.27089 -0.558544 -0.696653 0.450226 + 0.741351 0.027227 -3.35152 -0.403801 -0.866071 0.294731 + 0.772297 0.004586 -3.40171 -0.0598842 -0.996163 -0.0638226 + 0.864896 0.00827 -3.35089 0.316588 -0.892167 -0.322197 + 0.67323 0.214898 -3.17478 -0.624533 -0.531767 0.571998 + 0.652094 0.083546 -3.34127 -0.523599 -0.723974 0.449117 + 0.681935 0.029526 -3.4219 -0.386268 -0.885552 0.25806 + 0.704692 0.015375 -3.47239 -0.0465797 -0.993761 -0.101337 + 0.798552 0.018302 -3.42467 0.295475 -0.867659 -0.399828 + 0.62195 0.191992 -3.2401 -0.530702 -0.61379 0.584481 + 0.596305 0.078852 -3.40994 -0.468465 -0.77211 0.429403 + 0.614264 0.039505 -3.49159 -0.34018 -0.90857 0.242441 + 0.637021 0.02535 -3.54207 0.0214712 -0.97588 -0.21725 + 0.730947 0.029087 -3.49534 0.281707 -0.855416 -0.434631 + 0.56616 0.187379 -3.30871 -0.488216 -0.658847 0.572333 + 0.528555 0.085339 -3.47517 -0.411344 -0.815162 0.407807 + 0.546514 0.045994 -3.55683 -0.337205 -0.92125 0.193882 + 0.563558 0.039291 -3.60282 0.0269834 -0.966717 -0.254422 + 0.656432 0.045461 -3.56171 0.296049 -0.784103 -0.54547 + 0.468641 0.323794 -3.23039 -0.279337 -0.626816 0.727374 + 0.50358 0.170259 -3.36206 -0.344741 -0.750712 0.563547 + 0.458603 0.088549 -3.53054 -0.294802 -0.880461 0.371322 + 0.473631 0.061026 -3.62246 -0.23212 -0.960076 0.15612 + 0.490675 0.054324 -3.66846 0.172489 -0.783244 -0.597307 + 0.450674 0.446399 -3.13575 -0.230695 -0.52117 0.821682 + 0.39922 0.297007 -3.26859 -0.227283 -0.67582 0.701149 + 0.433628 0.173555 -3.41737 -0.319599 -0.785446 0.53003 + 0.373358 0.097524 -3.56988 -0.200434 -0.905933 0.372976 + 0.388386 0.070091 -3.66177 -0.147227 -0.978731 0.142862 + 0.38411 0.510512 -3.131 -0.416219 -0.219768 0.882306 + 0.381253 0.419616 -3.17396 -0.229077 -0.521411 0.821982 + 0.320793 0.288955 -3.30525 -0.144923 -0.73143 0.666338 + 0.355201 0.165506 -3.45403 -0.169198 -0.832435 0.527659 + 0.370379 0.709814 -3.139 -0.580902 0.043998 0.812784 + 0.316229 0.474584 -3.16837 -0.38356 -0.201283 0.901314 + 0.313372 0.383687 -3.21133 -0.138834 -0.582747 0.800706 + 0.238392 0.271757 -3.33506 -0.0800217 -0.759537 0.645523 + 0.346861 1.02945 -3.19722 -0.519687 0.140874 0.842663 + 0.282676 1.00031 -3.23375 -0.457483 0.123581 0.880589 + 0.306194 0.680591 -3.17558 -0.504488 0.0540576 0.861725 + 0.251104 0.432437 -3.20417 -0.258066 -0.23745 0.936493 + 0.230971 0.366491 -3.24114 -0.100362 -0.594957 0.797467 + 0.344504 1.20162 -3.23223 -0.463287 0.20697 0.861701 + 0.261176 1.19278 -3.27112 -0.408149 0.202499 0.890173 + 0.212322 0.988001 -3.26123 -0.330996 0.134717 0.933966 + 0.241069 0.63853 -3.21133 -0.379493 0.0552298 0.923544 + 0.159293 0.409373 -3.22522 -0.0779895 -0.249167 0.965315 + 0.405038 1.26374 -3.22322 -0.349371 0.231071 0.908045 + 0.380499 1.26393 -3.22596 -0.28359 0.114307 0.952108 + 0.360752 1.27625 -3.24029 -0.609799 0.256532 0.749891 + 0.324758 1.21402 -3.24652 -0.463511 0.269363 0.844157 + 0.417691 1.33543 -3.23319 -0.441942 0.0954144 0.891954 + 0.393152 1.33563 -3.23594 -0.341058 0.246031 0.907275 + 0.374771 1.3332 -3.24893 -0.65165 0.251949 0.715453 + 0.351967 1.277 -3.25119 -0.612715 0.290973 0.734789 + 0.421961 1.37743 -3.22175 -0.597949 0.288871 0.74767 + 0.401225 1.40643 -3.25577 -0.436917 0.487309 0.756065 + 0.382844 1.404 -3.26876 -0.639616 0.467118 0.610485 + 0.363138 1.38292 -3.27385 -0.545824 0.525512 0.652621 + 0.365986 1.33394 -3.25982 -0.59251 0.215319 0.776254 + 0.437347 1.39596 -3.23444 0.0327572 0.815414 0.57795 + 0.416611 1.42487 -3.26852 0.212195 0.785863 0.580855 + 0.403286 1.43616 -3.27807 -0.12814 0.756958 0.640776 + 0.38358 1.415 -3.28322 -0.67523 0.732613 -0.0856932 + 0.465614 1.40456 -3.28554 0.0890856 0.757408 0.646836 + 0.452289 1.41586 -3.2951 0.217186 0.976129 -0.00175134 + 0.455867 1.41022 -3.31814 0.218478 0.97298 0.0746824 + 0.403286 1.43616 -3.27807 -0.162617 0.373302 -0.913346 + 0.541905 1.39688 -3.30343 0.104012 0.971656 -0.212286 + 0.526225 1.38861 -3.34211 0.228445 0.958278 -0.171801 + 0.497237 1.3962 -3.34946 0.347955 0.936135 -0.0507878 + 0.475313 1.40955 -3.34178 0.539652 0.814042 0.214736 + 0.418215 1.43963 -3.35968 0.112036 0.971377 0.209461 + 0.387158 1.40937 -3.30626 -0.228393 0.946287 0.228862 + 0.601613 1.36411 -3.37827 0.321798 0.901763 -0.288566 + 0.555249 1.37678 -3.40721 0.334122 0.913865 -0.230681 + 0.526261 1.38436 -3.41455 0.235829 0.923571 -0.302325 + 0.485753 1.39471 -3.40748 0.312397 0.898944 -0.307094 + 0.463829 1.40797 -3.39984 0.534539 0.784976 -0.313178 + 0.619329 1.34505 -3.40407 0.474979 0.713402 -0.51522 + 0.572965 1.35764 -3.43306 0.437896 0.663495 -0.606647 + 0.528327 1.36562 -3.44609 0.194917 0.688982 -0.698077 + 0.487819 1.37588 -3.43906 0.152479 0.721684 -0.67522 + 0.657265 1.34065 -3.37004 0.593032 0.666855 -0.451241 + 0.630083 1.32452 -3.4159 0.589529 0.23171 -0.7738 + 0.569569 1.32693 -3.45287 0.434248 0.14585 -0.888908 + 0.524932 1.33491 -3.4659 0.146665 0.230935 -0.961851 + 0.490004 1.34003 -3.46416 0.0897001 0.32474 -0.94154 + 0.692149 1.32736 -3.32722 0.863762 0.366736 -0.345571 + 0.668019 1.32011 -3.38187 0.737632 0.273871 -0.617167 + 0.631042 1.25434 -3.39814 0.489285 -0.235391 -0.839756 + 0.570529 1.25675 -3.43512 0.435845 -0.298502 -0.84908 + 0.516745 1.26462 -3.46175 0.127914 -0.274834 -0.952945 + 0.679089 1.27673 -3.37073 0.759658 -0.00281797 -0.650317 + 0.65761 1.23795 -3.38175 0.477493 -0.192601 -0.857266 + 0.606513 1.1171 -3.35144 0.448723 -0.257495 -0.855771 + 0.685681 1.19519 -3.35049 0.745618 -0.0818122 -0.661333 + 0.664201 1.1564 -3.36151 0.162401 -0.204653 -0.965268 + 0.633081 1.10071 -3.33505 0.0239507 -0.220876 -0.975008 + 0.704194 1.08025 -3.32202 0.731503 -0.0652825 -0.678706 + 0.667664 1.07883 -3.34755 0.0803001 -0.161119 -0.983663 + 0.636544 1.02322 -3.32103 -0.0319817 -0.127823 -0.991281 + 0.613294 0.983224 -3.32556 0.396543 0.075697 -0.91489 + 0.583599 1.12337 -3.3677 0.413698 -0.306237 -0.857364 + 0.708008 0.92919 -3.30037 0.642857 0.0275413 -0.765491 + 0.671478 0.927766 -3.3259 0.305039 0.0231653 -0.952058 + 0.648228 0.887856 -3.33038 0.2457 0.150311 -0.957621 + 0.590379 0.98949 -3.34181 0.474715 0.033359 -0.879507 + 0.55476 1.09691 -3.36786 0.190968 -0.237163 -0.952515 + 0.807312 0.8757 -3.21712 0.561123 0.201085 -0.802936 + 0.736285 0.820761 -3.29156 0.579098 0.206179 -0.788756 + 0.669651 0.802808 -3.33947 0.476023 0.214456 -0.852884 + 0.592546 0.886392 -3.36024 0.44205 0.197623 -0.874949 + 0.833049 0.737981 -3.25239 0.538082 0.232332 -0.81024 + 0.770918 0.732946 -3.30046 0.565695 0.275949 -0.777072 + 0.704285 0.714901 -3.34841 0.44325 0.319158 -0.837656 + 0.613969 0.801339 -3.36932 0.45534 0.205917 -0.866177 + 0.888478 0.773687 -3.21123 0.567982 0.183687 -0.802282 + 0.853694 0.663423 -3.25465 0.650339 -0.0904432 -0.754241 + 0.791563 0.65847 -3.30267 0.763411 0.200832 -0.613897 + 0.784197 0.647313 -3.32094 0.656346 0.549182 -0.51731 + 0.729674 0.650131 -3.36422 0.41197 0.49529 -0.764832 + 0.92887 0.716168 -3.1782 0.664848 -0.0383567 -0.745993 + 0.892994 0.670479 -3.21567 0.76955 -0.160969 -0.617967 + 0.842585 0.617559 -3.24441 0.7351 0.113864 -0.668329 + 0.835219 0.606485 -3.26263 0.801096 0.461663 -0.380937 + 0.980501 0.730595 -3.13999 0.629372 -0.0288895 -0.776567 + 0.920828 0.628098 -3.16606 0.651729 0.0909913 -0.752974 + 0.881886 0.624614 -3.20543 0.722501 0.0317045 -0.690642 + 0.891832 0.577881 -3.21908 0.534798 0.638518 -0.553431 + 0.972459 0.64252 -3.12784 0.520016 0.054793 -0.852397 + 0.994589 0.583223 -3.13074 0.327934 0.629721 -0.704209 + 0.930774 0.581364 -3.17972 0.454383 0.666697 -0.590806 + 1.05871 0.662694 -3.09238 0.458811 0.203702 -0.864869 + 1.08084 0.603397 -3.09528 0.501695 0.29678 -0.812542 + 1.03412 0.56884 -3.14922 0.422113 0.632248 -0.649679 + 0.97031 0.566982 -3.19821 0.381049 0.774132 -0.505491 + 0.917456 0.547772 -3.26173 0.483719 0.717608 -0.501054 + 1.10836 0.726897 -3.03779 0.624903 0.218848 -0.749401 + 1.12758 0.661112 -3.04244 0.623997 0.248429 -0.740885 + 1.14228 0.592282 -3.05423 0.620139 0.26761 -0.737437 + 1.09371 0.52643 -3.11337 0.625206 0.325646 -0.709276 + 1.17045 0.71283 -2.98302 0.695398 0.235141 -0.679065 + 1.18938 0.64572 -2.98918 0.689498 0.263844 -0.674521 + 1.20408 0.57689 -3.00097 0.681756 0.268097 -0.680685 + 1.15514 0.515313 -3.07231 0.618157 0.259105 -0.742123 + 1.22635 0.705679 -2.92404 0.75791 0.250957 -0.602157 + 1.24529 0.638654 -2.93015 0.723852 0.298555 -0.622016 + 1.26352 0.578902 -2.93805 0.71217 0.281597 -0.643052 + 1.21596 0.512611 -3.01483 0.687582 0.257546 -0.678897 + 1.30118 0.653066 -2.85931 0.708234 0.351445 -0.612284 + 1.31942 0.593315 -2.86721 0.748489 0.29479 -0.594023 + 1.2754 0.514542 -2.95198 0.713026 0.240679 -0.658534 + 1.29227 0.447821 -2.95441 0.729493 0.204651 -0.652655 + 1.23276 0.442429 -3.02388 0.710127 0.232011 -0.664748 + 1.32933 0.706247 -2.79182 0.557873 0.252084 -0.790715 + 1.35431 0.66336 -2.79374 0.747785 0.210929 -0.629545 + 1.37088 0.599904 -2.79263 0.809278 0.248619 -0.532219 + 1.32947 0.522163 -2.88898 0.750871 0.252577 -0.610243 + 1.34634 0.455443 -2.89141 0.778821 0.172184 -0.60315 + 1.37391 0.738612 -2.76848 0.655395 0.0481836 -0.753748 + 1.39956 0.667331 -2.71382 0.82527 0.0249825 -0.564186 + 1.41613 0.603874 -2.71271 0.81195 0.247132 -0.528831 + 1.38094 0.528752 -2.81439 0.805896 0.25281 -0.535367 + 1.40063 0.465663 -2.81112 0.821897 0.181855 -0.539828 + 1.39239 0.812546 -2.72934 0.742928 0.323868 -0.585805 + 1.41427 0.75751 -2.72101 0.809959 0.0538787 -0.584006 + 1.43992 0.686233 -2.66636 0.722784 -0.0417284 -0.689813 + 1.46558 0.611347 -2.63985 0.645131 0.159636 -0.74721 + 1.43291 0.53521 -2.72537 0.820223 0.247739 -0.515616 + 1.43613 0.819446 -2.65289 0.798975 0.36091 -0.481023 + 1.45802 0.764408 -2.64456 0.784234 0.188934 -0.591 + 1.48718 0.714298 -2.63396 0.693372 0.122475 -0.710095 + 1.51284 0.639411 -2.60746 0.765854 0.0194789 -0.64272 + 1.48236 0.542768 -2.65247 0.808971 0.129818 -0.573335 + 1.40873 0.912972 -2.60628 0.716328 0.577249 -0.391992 + 1.46124 0.841065 -2.58493 0.769079 0.473773 -0.429017 + 1.50327 0.780374 -2.57541 0.775586 0.379359 -0.504532 + 1.53243 0.730259 -2.56481 0.823798 0.213562 -0.525117 + 1.55426 0.652742 -2.53995 0.866902 0.0218731 -0.497998 + 1.45178 0.922027 -2.49836 0.691849 0.611657 -0.383694 + 1.50043 0.854552 -2.50769 0.740065 0.514944 -0.432593 + 1.54246 0.793947 -2.49812 0.779228 0.437461 -0.448811 + 1.57515 0.749187 -2.48239 0.852548 0.264386 -0.450846 + 1.59698 0.67167 -2.45753 0.909424 0.0398459 -0.413958 + 1.39361 0.979989 -2.49315 0.543362 0.783952 -0.300293 + 1.48815 0.946809 -2.39809 0.641728 0.657973 -0.394026 + 1.53679 0.879339 -2.40742 0.737068 0.533261 -0.415166 + 1.57527 0.815265 -2.41484 0.776954 0.467845 -0.421265 + 1.35937 1.0365 -2.36624 0.420685 0.87693 -0.232417 + 1.43015 0.994892 -2.38437 0.473087 0.818023 -0.32715 + 1.52471 0.991998 -2.27056 0.611797 0.678336 -0.406895 + 1.56388 0.906056 -2.3267 0.727361 0.544335 -0.417906 + 1.60236 0.841891 -2.33416 0.82618 0.428335 -0.365998 + 1.27743 1.06971 -2.41596 0.600584 0.795858 -0.0768686 + 1.28157 1.06511 -2.39559 0.484029 0.874865 0.0181271 + 1.30015 1.05879 -2.37105 0.420067 0.895238 -0.148635 + 1.37522 1.05238 -2.28095 0.312883 0.896626 -0.313314 + 1.46671 1.04008 -2.25684 0.378151 0.848294 -0.370673 + 1.22658 1.11436 -2.44609 0.686137 0.724526 -0.0654051 + 1.23658 1.10612 -2.40041 0.660108 0.750974 0.0171641 + 1.24072 1.1016 -2.37999 0.668683 0.737594 0.093909 + 1.24393 1.09531 -2.36529 0.613106 0.789782 -0.0186014 + 1.2625 1.08908 -2.3407 0.503436 0.835522 -0.220125 + 1.18775 1.14912 -2.45389 0.684302 0.728927 0.0199044 + 1.19962 1.13794 -2.44374 0.660533 0.750396 0.0245554 + 1.20963 1.1297 -2.39806 0.655957 0.754313 0.0270673 + 1.2086 1.12749 -2.36263 0.659315 0.741602 0.123811 + 1.21181 1.12119 -2.34793 0.620873 0.783802 0.0130641 + 1.15943 1.1735 -2.41832 0.50957 0.85734 0.0728458 + 1.1713 1.16232 -2.40817 0.656824 0.753402 0.0311189 + 1.15925 1.17136 -2.38481 0.512867 0.857249 0.0457278 + 1.19758 1.13864 -2.37475 0.649799 0.756277 0.0762025 + 1.16163 1.16328 -2.33763 0.508381 0.823473 0.251873 + 1.13768 1.18233 -2.43142 0.129183 0.990719 0.0422811 + 1.13552 1.18105 -2.41161 0.152814 0.987582 0.0364712 + 1.13186 1.18171 -2.39315 0.173294 0.984571 -0.0242587 + 1.15061 1.17453 -2.34971 0.392002 0.873585 0.288417 + 1.12323 1.18489 -2.35805 0.117122 0.976248 0.182271 + 1.08854 1.16718 -2.28678 0.0116818 0.95891 0.283469 + 1.13451 1.168 -2.2984 0.256328 0.949696 0.179927 + 1.18562 1.14149 -2.33268 0.566389 0.816278 0.113548 + 1.07193 1.13042 -2.19791 0.0266725 0.945007 0.32596 + 1.1179 1.13115 -2.20958 0.172195 0.89986 0.400751 + 1.1585 1.1462 -2.29345 0.466686 0.831772 0.300598 + 1.20242 1.13319 -2.31351 0.395237 0.914411 -0.0874055 + 0.937486 1.13191 -2.21189 -0.332083 0.928381 0.166821 + 1.03487 1.11922 -2.16291 0.0351643 0.953752 0.298532 + 1.04583 1.10626 -2.12786 -0.0446316 0.94583 0.32158 + 1.06895 1.10064 -2.09712 -0.18693 0.960553 0.205902 + 1.10267 1.10541 -2.0876 0.00300693 0.990756 0.135622 + 1.13199 1.10347 -2.11343 0.229389 0.968709 0.0947763 + 1.14066 1.10399 -2.14793 0.244749 0.951117 0.188347 + 1.14071 1.11475 -2.17696 0.163689 0.920856 0.353879 + 1.13323 1.12325 -2.19868 0.129903 0.935574 0.328368 + 0.911044 1.11345 -2.22492 -0.963276 0.268069 0.0154602 + 0.940285 1.12247 -2.14673 -0.328392 0.894372 0.303738 + 0.951245 1.1095 -2.11167 -0.256759 0.809431 0.528107 + 0.9813 1.08014 -2.07162 -0.294401 0.784818 0.545334 + 1.00443 1.07461 -2.04084 -0.398733 0.888064 0.228809 + 0.920305 1.05709 -2.18069 -0.987307 -0.158592 0.00863486 + 0.913844 1.10391 -2.1598 -0.917789 0.344785 0.196943 + 0.924854 1.08378 -2.10833 -0.840551 0.253402 0.478814 + 0.95491 1.05443 -2.06828 -0.765272 0.297479 0.570846 + 0.931315 1.03687 -2.12927 -0.964255 -0.171283 0.202173 + 0.950425 1.01243 -2.07954 -0.927932 -0.106069 0.357339 + 0.969659 0.993571 -2.03348 -0.947 -0.0449968 0.318066 + 0.974144 1.03556 -2.02221 -0.914344 0.118798 0.387119 + 0.988982 1.05418 -2.00106 -0.745034 0.568496 0.348907 + 0.9335 0.994386 -2.14149 -0.970841 -0.132049 0.200078 + 0.952611 0.969858 -2.09181 -0.945439 -0.126386 0.300288 + 0.969799 0.949883 -2.04361 -0.950464 -0.104315 0.292807 + 0.99163 0.99924 -1.9591 -0.934978 0.102049 0.339709 + 1.00647 1.01785 -1.93794 -0.877015 0.331856 0.347444 + 0.947047 0.922664 -2.13107 -0.924332 -0.349831 0.152411 + 0.964235 0.902602 -2.08292 -0.957746 -0.130321 0.256397 + 0.991771 0.955552 -1.96923 -0.952357 -0.101618 0.287559 + 1.014 0.959053 -1.88549 -0.974349 -0.199628 0.103885 + 0.977004 0.797029 -2.08306 -0.954093 -0.100056 0.282305 + 0.986775 0.88534 -2.01142 -0.947548 -0.118233 0.29694 + 1.006 0.870142 -1.95989 -0.932876 -0.157087 0.324139 + 1.011 0.940273 -1.91776 -0.937037 -0.216011 0.274408 + 1.00511 0.628134 -2.04333 -0.896041 -0.25459 0.363722 + 1.03454 0.654822 -1.96195 -0.884102 -0.259336 0.388726 + 0.999544 0.779769 -2.01156 -0.939958 -0.13009 0.315523 + 1.02907 0.790633 -1.93678 -0.917207 -0.137907 0.373782 + 1.03466 0.865062 -1.88869 -0.939729 -0.188265 0.285423 + 1.03643 0.491839 -2.11245 -0.718326 -0.579297 0.385256 + 1.06777 0.515248 -2.0376 -0.669479 -0.593515 0.446697 + 1.09719 0.541936 -1.95623 -0.68675 -0.591894 0.421944 + 1.06407 0.665688 -1.88717 -0.849345 -0.26081 0.458903 + 1.13094 0.40575 -2.14854 -0.575993 -0.604141 0.550678 + 1.16228 0.429159 -2.07369 -0.60288 -0.671368 0.431046 + 1.19008 0.455437 -1.98781 -0.616682 -0.672129 0.409812 + 1.2211 0.481229 -1.89808 -0.663714 -0.67197 0.328541 + 1.12821 0.567733 -1.86651 -0.702856 -0.544659 0.457537 + 1.18918 0.259384 -2.20843 -0.64749 -0.532737 0.54493 + 1.21894 0.297052 -2.16027 -0.659153 -0.474784 0.583179 + 1.2501 0.32239 -2.08156 -0.736925 -0.521878 0.429634 + 1.2779 0.348663 -1.99567 -0.754168 -0.531704 0.385385 + 1.25634 0.164224 -2.23701 -0.670172 -0.628885 0.394174 + 1.29498 0.176688 -2.14659 -0.702887 -0.557584 0.441643 + 1.32614 0.201938 -2.06793 -0.75443 -0.510301 0.41283 + 1.36476 0.21381 -1.97769 -0.768286 -0.518039 0.375996 + 1.27614 0.086092 -2.34228 -0.55246 -0.772458 0.313204 + 1.31981 0.091549 -2.24473 -0.583983 -0.742856 0.327306 + 1.35845 0.104011 -2.15432 -0.634402 -0.692185 0.344113 + 1.39973 0.110487 -2.05993 -0.663337 -0.659972 0.352734 + 1.29001 0.043919 -2.45923 -0.420708 -0.874545 0.241196 + 1.33236 0.04906 -2.35634 -0.450329 -0.860929 0.236654 + 1.37603 0.054431 -2.25884 -0.47066 -0.846477 0.248911 + 1.42215 0.052258 -2.15928 -0.512005 -0.821614 0.250602 + 1.46343 0.05873 -2.06489 -0.505815 -0.81703 0.276792 + 1.24586 0.0383 -2.5529 -0.40197 -0.885474 0.233143 + 1.32447 0.025344 -2.47006 -0.270454 -0.946848 0.174167 + 1.36682 0.030486 -2.36717 -0.197779 -0.972139 0.125815 + 1.4169 0.033245 -2.26275 -0.202524 -0.973683 0.104526 + 1.27791 0.019255 -2.57732 -0.259785 -0.950946 0.167969 + 1.33261 0.023419 -2.47613 0.196222 -0.980274 -0.0236396 + 1.37851 0.030783 -2.37168 0.264077 -0.960865 -0.0836729 + 1.42859 0.03363 -2.26721 0.22163 -0.96943 -0.105291 + 1.28605 0.01733 -2.58338 0.196201 -0.980105 -0.0300053 + 1.31177 0.039233 -2.61412 0.542821 -0.818054 -0.190087 + 1.35501 0.043626 -2.51033 0.539472 -0.821016 -0.186823 + 1.4009 0.050985 -2.40587 0.516667 -0.832304 -0.200813 + 1.24117 0.011804 -2.68801 0.196778 -0.978806 -0.0567286 + 1.26688 0.033708 -2.71875 0.524446 -0.823346 -0.216925 + 1.35264 0.084103 -2.67244 0.679295 -0.68754 -0.256607 + 1.39589 0.088496 -2.56864 0.6508 -0.720002 -0.240951 + 1.43552 0.089799 -2.4631 0.614271 -0.747486 -0.252853 + 1.19412 0.010571 -2.78867 0.200901 -0.974925 -0.0957104 + 1.21938 0.0345 -2.82152 0.489494 -0.828939 -0.27066 + 1.30804 0.080062 -2.77604 0.657698 -0.697242 -0.285109 + 1.3159 0.131596 -2.85429 0.762123 -0.507885 -0.401523 + 1.3605 0.135637 -2.75069 0.78718 -0.513423 -0.34168 + 1.14672 0.019074 -2.8854 0.48808 -0.823107 -0.290298 + 1.17197 0.043004 -2.91825 0.467872 -0.839717 -0.27563 + 1.26054 0.08085 -2.8788 0.651794 -0.680302 -0.335192 + 1.2627 0.132812 -2.9466 0.784661 -0.43852 -0.438187 + 1.11726 0.04216 -3.01339 0.50675 -0.825445 -0.248687 + 1.20361 0.082894 -2.98534 0.615799 -0.705182 -0.35144 + 1.20578 0.134944 -3.05309 0.750552 -0.411881 -0.516745 + 1.23257 0.198224 -3.0411 0.832212 -0.134002 -0.538022 + 1.28577 0.197006 -2.94879 0.82367 -0.270193 -0.498562 + 1.06385 0.038414 -3.1255 0.546693 -0.778636 -0.307982 + 1.14891 0.082051 -3.08048 0.672507 -0.628995 -0.389999 + 1.14272 0.132298 -3.13651 0.762568 -0.319812 -0.562326 + 1.17071 0.195576 -3.11291 0.767707 -0.146829 -0.623753 + 1.00439 0.03507 -3.21691 0.560201 -0.758229 -0.333561 + 1.08511 0.074678 -3.15911 0.657542 -0.599452 -0.456395 + 1.07893 0.12484 -3.21519 0.7338 -0.31935 -0.599628 + 1.10766 0.192935 -3.19634 0.772763 -0.050199 -0.632706 + 0.949043 0.030887 -3.29986 0.549324 -0.724851 -0.415733 + 1.02565 0.071333 -3.25052 0.724519 -0.497494 -0.477045 + 1.0167 0.11971 -3.28931 0.77394 -0.199875 -0.600888 + 1.04185 0.188535 -3.26612 0.744788 -0.0415938 -0.666004 + 0.887218 0.033712 -3.37595 0.504073 -0.713261 -0.487 + 0.966535 0.072591 -3.32869 0.687346 -0.472205 -0.551886 + 0.957584 0.120966 -3.36748 0.753851 -0.176111 -0.633003 + 0.979623 0.183405 -3.34023 0.76658 0.0446406 -0.640595 + 0.820874 0.04374 -3.44972 0.452365 -0.720547 -0.525526 + 0.90471 0.07541 -3.40478 0.655355 -0.46554 -0.594797 + 0.891333 0.117574 -3.44041 0.717991 -0.186819 -0.670513 + 0.916497 0.168037 -3.41381 0.74106 0.043587 -0.670023 + 0.749319 0.051972 -3.51798 0.401379 -0.722141 -0.56339 + 0.834662 0.079343 -3.47739 0.5872 -0.508025 -0.630164 + 0.821285 0.121507 -3.51302 0.665907 -0.201872 -0.718203 + 0.850245 0.164647 -3.48674 0.712563 0.0526355 -0.699631 + 0.674804 0.068439 -3.5843 0.32359 -0.758158 -0.566114 + 0.763107 0.087575 -3.54565 0.533237 -0.526078 -0.662495 + 0.747396 0.126027 -3.58025 0.629351 -0.217549 -0.746049 + 0.779473 0.166045 -3.55116 0.67338 0.0539229 -0.737328 + 0.587938 0.081027 -3.64191 0.273497 -0.725732 -0.631278 + 0.682155 0.090917 -3.60984 0.430722 -0.612291 -0.663007 + 0.666445 0.129282 -3.64449 0.534465 -0.343079 -0.772427 + 0.705585 0.170568 -3.6184 0.661444 0.00572989 -0.749972 + 0.582969 0.059404 -3.62245 0.328086 -0.719442 -0.612178 + 0.495604 0.097005 -3.69178 0.195581 -0.695335 -0.691561 + 0.595289 0.103505 -3.66744 0.321267 -0.631731 -0.705481 + 0.584202 0.141342 -3.69718 0.3921 -0.431442 -0.812475 + 0.636835 0.183147 -3.68218 0.595842 -0.0951547 -0.797445 + 0.490635 0.07538 -3.67233 0.31935 -0.443692 -0.837349 + 0.392792 0.111121 -3.72923 0.153326 -0.651705 -0.742814 + 0.499956 0.118466 -3.71255 0.219973 -0.623153 -0.750528 + 0.488869 0.156304 -3.74229 0.245794 -0.494677 -0.833595 + 0.554592 0.195121 -3.73492 0.445141 -0.198265 -0.873236 + 0.389211 0.068004 -3.70975 0.0901472 -0.756543 -0.647701 + 0.389172 0.088973 -3.71367 0.206662 -0.414812 -0.886127 + 0.285338 0.121152 -3.7546 0.0858579 -0.616796 -0.782426 + 0.397144 0.132582 -3.75 0.172042 -0.581549 -0.795111 + 0.389831 0.172658 -3.77302 0.177267 -0.471326 -0.863961 + 0.280005 0.078806 -3.72246 -0.0160651 -0.903159 -0.429006 + 0.281718 0.099004 -3.73904 0.0738285 -0.616244 -0.784087 + 0.174334 0.128605 -3.76831 0.00536578 -0.681278 -0.732005 + 0.290328 0.147155 -3.77605 0.0913476 -0.556444 -0.825848 + 0.283016 0.187238 -3.79907 0.0716524 -0.397154 -0.914951 + 0.27918 0.080809 -3.67453 -0.0947214 -0.983147 0.156365 + 0.168313 0.087526 -3.72896 -0.0809119 -0.887337 -0.453968 + 0.170026 0.107717 -3.74554 -0.0386115 -0.700158 -0.712943 + 0.059143 0.132298 -3.76991 -0.00293313 -0.707647 -0.70656 + 0.179324 0.15461 -3.78975 0.0395974 -0.518969 -0.853875 + 0.279441 0.105189 -3.59316 -0.115536 -0.91874 0.377582 + 0.174324 0.110026 -3.60193 -0.0329214 -0.934406 0.354685 + 0.174064 0.085731 -3.68326 -0.0660142 -0.990614 0.119694 + 0.054835 0.097839 -3.71703 -0.0334079 -0.971145 -0.236139 + 0.054835 0.111412 -3.74713 -0.00920017 -0.833823 -0.551956 + 0.261284 0.173084 -3.47735 -0.107452 -0.844954 0.523934 + 0.165895 0.160955 -3.49994 0.00289706 -0.861474 0.507794 + 0.060586 0.098942 -3.61633 0.0324895 -0.968829 0.24559 + 0.060586 0.096136 -3.67128 -0.0153833 -0.999194 0.0370713 + -0.054834 0.097839 -3.71703 0.0538067 -0.973959 -0.220247 + 0.143003 0.259629 -3.35765 0.0364686 -0.779498 0.625342 + 0.052156 0.233569 -3.37552 0.0421687 -0.802373 0.595331 + 0.052156 0.149869 -3.51435 0.0120491 -0.876828 0.480654 + -0.052156 0.149869 -3.51435 -0.0193578 -0.8719 0.489301 + -0.060586 0.098947 -3.61634 0.000757084 -0.962699 0.270575 + 0.13916 0.343427 -3.2622 0.0232743 -0.636446 0.77097 + 0.048313 0.317362 -3.28005 0.0248013 -0.66934 0.742542 + -0.052156 0.233564 -3.37551 -0.0603506 -0.81052 0.582593 + 0.048313 0.39542 -3.22765 -0.00128654 -0.283842 0.95887 + -0.048316 0.39542 -3.22765 -0.00859111 -0.291272 0.956602 + -0.048316 0.317362 -3.28005 -0.0297717 -0.664647 0.746564 + -0.143003 0.259629 -3.35765 -0.0297728 -0.78688 0.616388 + 0.159773 0.610328 -3.23008 -0.150103 0.081427 0.985312 + 0.048793 0.596376 -3.23252 -0.016907 0.0980659 0.995036 + -0.048793 0.596376 -3.23252 0.0219971 0.0903335 0.995669 + -0.159296 0.409373 -3.22522 0.0840981 -0.254132 0.963506 + -0.139163 0.343427 -3.2622 -0.00319524 -0.623154 0.782092 + 0.131025 0.959799 -3.27998 -0.229988 0.129924 0.964482 + 0.048793 0.941243 -3.29465 -0.0959883 0.14968 0.984064 + -0.048793 0.941243 -3.29465 0.106681 0.161356 0.981113 + -0.131025 0.959799 -3.27998 0.224561 0.140295 0.964308 + -0.159772 0.610328 -3.23008 0.142823 0.073393 0.987023 + 0.153945 1.1952 -3.31131 -0.174267 0.175552 0.968923 + 0.114166 1.17597 -3.31341 -0.154999 0.130972 0.979194 + 0.031933 1.15733 -3.32813 -0.0904492 0.105169 0.990332 + -0.031937 1.15732 -3.32811 0.09557 0.0980074 0.990586 + 0.190822 1.18046 -3.29858 -0.316954 0.180388 0.931128 + 0.160899 1.2621 -3.32539 -0.0991105 0.23849 0.966074 + 0.11631 1.26212 -3.32542 -0.0824543 0.192453 0.977836 + 0.076531 1.24281 -3.32756 -0.131371 0.153666 0.979351 + 0.197776 1.24736 -3.31266 -0.249331 0.293441 0.92289 + 0.177853 1.30956 -3.33679 -0.049485 0.280975 0.958439 + 0.153964 1.31145 -3.33627 0.0298063 0.229923 0.972752 + 0.109375 1.31139 -3.33635 -0.0939241 0.170043 0.98095 + 0.062433 1.31188 -3.34561 -0.19475 0.221675 0.955475 + 0.203355 1.25836 -3.31571 -0.26872 0.299404 0.915504 + 0.183432 1.32056 -3.33984 -0.0685056 0.292341 0.953857 + 0.170708 1.37497 -3.35408 0.0321088 0.35861 0.932935 + 0.146819 1.37676 -3.35359 0.0127079 0.474305 0.880269 + 0.100607 1.34927 -3.34237 -0.101084 0.327527 0.939419 + 0.280732 1.22028 -3.26996 -0.408561 0.234757 0.882024 + 0.222911 1.28587 -3.31456 -0.402411 0.211562 0.890678 + 0.211256 1.33662 -3.33106 -0.454471 0.24275 0.857046 + 0.186303 1.34668 -3.34808 -0.15653 0.291956 0.943536 + 0.308595 1.21723 -3.25627 -0.428268 0.279597 0.859309 + 0.26534 1.28981 -3.29397 -0.43334 0.192196 0.880498 + 0.253685 1.34056 -3.31048 -0.50602 0.109472 0.855546 + 0.214499 1.40225 -3.35213 -0.47451 0.399363 0.784443 + 0.189546 1.41231 -3.36916 -0.0726872 0.392406 0.916916 + 0.335804 1.2802 -3.26094 -0.416463 0.221702 0.881707 + 0.293203 1.28675 -3.28029 -0.400339 0.192104 0.896005 + 0.296609 1.33174 -3.28701 -0.43812 0.0485444 0.897605 + 0.258705 1.38294 -3.30408 -0.547454 0.241454 0.801245 + 0.33921 1.32519 -3.26767 -0.329269 0.164307 0.929831 + 0.301628 1.37404 -3.28067 -0.244839 0.289297 0.925398 + 0.294955 1.40256 -3.30208 -0.0987777 0.800415 0.591252 + 0.268466 1.40904 -3.31769 -0.178262 0.829259 0.529672 + 0.22426 1.42835 -3.36575 -0.0703497 0.858586 0.50782 + 0.336362 1.37408 -3.28175 -0.125644 0.498092 0.857973 + 0.329689 1.40261 -3.30316 0.0753393 0.797063 0.599178 + 0.291361 1.41354 -3.36028 -0.0218483 0.986369 0.163091 + 0.264872 1.42001 -3.37589 0.223335 0.970896 0.086503 + 0.351495 1.41275 -3.32132 -0.141962 0.868005 0.475829 + 0.313167 1.42367 -3.37844 -0.32941 0.93576 0.125867 + 0.29845 1.41438 -3.42715 -0.0514491 0.977812 -0.203066 + 1.17383 1.1383 -2.28255 0.194613 0.970105 0.14499 + 1.22424 1.13141 -2.28583 0.413817 0.904967 -0.0989409 + 1.22861 1.11298 -2.32871 0.528261 0.821847 -0.213325 + 1.19565 1.13651 -2.25487 0.109195 0.982264 0.152424 + 1.2357 1.12492 -2.25118 0.541182 0.808211 0.2322 + 1.2456 1.11119 -2.3016 0.564608 0.807396 -0.171257 + 1.27949 1.08729 -2.3136 0.475525 0.854761 -0.207989 + 1.20313 1.12802 -2.23314 0.239668 0.884039 0.401291 + 1.2362 1.1012 -2.2137 0.137806 0.951148 0.276272 + 1.25706 1.10469 -2.26695 0.495192 0.86841 -0.0254913 + 1.27976 1.09644 -2.26906 0.372953 0.917345 -0.139225 + 1.316 1.07477 -2.28571 0.385327 0.893984 -0.228726 + 1.20362 1.1043 -2.19567 0.238304 0.889581 0.389688 + 1.24091 1.09246 -2.16535 -0.071895 0.977773 0.196955 + 1.26129 1.10663 -2.2153 0.0715909 0.995352 0.0644136 + 1.28399 1.0983 -2.21747 0.327265 0.944682 -0.0217718 + 1.31627 1.08384 -2.24124 0.347565 0.927761 -0.135862 + 1.20357 1.09346 -2.1667 0.126448 0.954904 0.268644 + 1.24051 1.08368 -2.11575 -0.126674 0.989325 0.0720449 + 1.26601 1.0978 -2.167 -0.0723418 0.989714 0.12342 + 1.29085 1.09788 -2.18675 0.18714 0.982137 -0.019651 + 1.20317 1.08477 -2.11704 0.127915 0.98607 0.106317 + 1.22956 1.08229 -2.07395 -0.133262 0.984262 -0.116057 + 1.28135 1.09502 -2.12479 -0.137151 0.990519 0.00790676 + 1.3062 1.0951 -2.14453 0.0604684 0.995696 -0.0702398 + 1.32313 1.08342 -2.21051 -0.0672484 0.997689 0.0097306 + 1.1945 1.08434 -2.08249 0.164639 0.986353 -0.00122404 + 1.20388 1.08947 -2.01999 0.0502951 0.903703 -0.425196 + 1.27041 1.09363 -2.08299 -0.27621 0.955386 -0.104625 + 1.28695 1.09954 -2.07262 -0.17438 0.976454 -0.127 + 1.3294 1.10126 -2.095 -0.0517155 0.987727 -0.147377 + 1.16882 1.09152 -2.02854 0.0959799 0.994324 -0.0458997 + 1.22043 1.09538 -2.00962 -0.138517 0.979629 -0.145398 + 1.29729 1.10744 -2.02971 -0.135188 0.984822 -0.108855 + 1.33975 1.10917 -2.0521 -0.0840485 0.98392 -0.157597 + 1.1395 1.09346 -2.0027 0.0166381 0.997789 0.0643516 + 1.21825 1.09746 -1.98082 -0.117738 0.992968 0.0123341 + 1.29512 1.10951 -2.0009 -0.169237 0.97886 -0.114858 + 1.33864 1.11785 -1.99854 -0.118338 0.982547 -0.143519 + 1.38558 1.11758 -2.01527 -0.0404582 0.978936 -0.200118 + 1.0773 1.09187 -1.97934 -0.139717 0.980491 0.138261 + 1.08885 1.08668 -1.91054 -0.0543864 0.997953 -0.0336387 + 1.15105 1.08818 -1.93396 -0.0322639 0.997527 0.0624434 + 1.04358 1.08718 -1.98882 -0.335124 0.920743 0.199811 + 1.02814 1.06684 -1.94899 -0.656876 0.724309 0.2095 + 1.04704 1.09328 -1.87537 -0.0568165 0.973459 -0.221696 + 1.14875 1.08447 -1.81252 0.0166636 0.99893 0.0431429 + 1.01312 1.00698 -1.8999 -0.865874 0.464506 0.185732 + 1.03479 1.05596 -1.91095 -0.999783 -0.00282248 0.0206327 + 1.02131 1.08018 -1.88689 -0.783526 0.443773 -0.434916 + 0.983915 1.11468 -1.79325 -0.102163 0.983633 -0.148422 + 1.10695 1.09107 -1.77734 0.193433 0.980445 0.036208 + 1.00757 0.9871 -1.87747 -0.999527 0.0279341 0.0128563 + 1.01754 1.01435 -1.84748 -0.980148 0.0821281 -0.180456 + 1.00406 1.03856 -1.82341 -0.881742 -0.332062 -0.33506 + 0.958184 1.10158 -1.80475 -0.844795 0.338915 -0.414075 + 0.969238 1.11357 -1.74933 -0.426329 0.859398 0.282274 + 1.01144 0.973013 -1.82287 -0.992641 -0.100177 0.0680311 + 1.01199 0.994478 -1.82505 -0.999822 -0.0137948 0.0128437 + 1.01533 0.98769 -1.79489 -0.983281 -0.180019 -0.0274183 + 0.996084 1.02283 -1.77676 -0.852529 -0.450039 -0.265817 + 0.950205 1.08585 -1.75811 -0.997753 0.00627019 0.0667073 + 1.01787 0.944963 -1.83089 -0.948448 -0.308782 0.0714167 + 1.01477 0.966219 -1.79271 -0.977988 -0.167108 0.124954 + 1.03766 0.883841 -1.85642 -0.936011 -0.29024 0.199107 + 1.05344 0.863585 -1.81634 -0.869877 -0.456995 0.185658 + 1.03365 0.924709 -1.79081 -0.918624 -0.378818 0.11237 + 1.02065 0.95854 -1.7576 -0.920918 -0.382938 -0.0725823 + 1.05773 0.785549 -1.86557 -0.899163 -0.216533 0.380289 + 1.09745 0.79464 -1.78372 -0.871335 -0.271412 0.408793 + 1.08484 0.863034 -1.74498 -0.811353 -0.472962 0.34353 + 1.10162 0.703111 -1.81219 -0.838781 -0.265915 0.475117 + 1.14134 0.7122 -1.73033 -0.842879 -0.285457 0.456146 + 1.19672 0.711416 -1.63137 -0.832189 -0.330822 0.444992 + 1.12885 0.794089 -1.71237 -0.849674 -0.358839 0.386378 + 1.16576 0.605239 -1.79147 -0.747742 -0.443804 0.493882 + 1.19759 0.632303 -1.70194 -0.770217 -0.466625 0.434772 + 1.25297 0.631515 -1.60298 -0.718975 -0.531517 0.447844 + 1.24 0.709635 -1.55049 -0.78085 -0.247533 0.573585 + 1.2434 0.501544 -1.78166 -0.723235 -0.581448 0.372624 + 1.27523 0.528608 -1.69214 -0.720071 -0.51528 0.464741 + 1.30463 0.57125 -1.6108 -0.679335 -0.545572 0.490771 + 1.35822 0.581842 -1.52854 -0.656583 -0.539662 0.526938 + 1.30656 0.642111 -1.52073 -0.660908 -0.507948 0.55244 + 1.3082 0.368428 -1.9001 -0.776223 -0.545595 0.315918 + 1.3305 0.388747 -1.78369 -0.756266 -0.57022 0.320797 + 1.36581 0.406463 -1.68898 -0.730104 -0.523775 0.438872 + 1.39521 0.449102 -1.60763 -0.723074 -0.48696 0.489932 + 1.39505 0.233576 -1.88213 -0.767191 -0.520094 0.375393 + 1.4351 0.243462 -1.79225 -0.74423 -0.554587 0.37223 + 1.47042 0.261177 -1.69754 -0.73133 -0.564573 0.38264 + 1.51087 0.270411 -1.60753 -0.737571 -0.529534 0.419025 + 1.48207 0.129597 -1.87343 -0.683504 -0.633734 0.362221 + 1.52211 0.139485 -1.78356 -0.684904 -0.628296 0.368986 + 1.56892 0.142187 -1.69044 -0.68261 -0.632699 0.365698 + 1.43834 0.12236 -1.9697 -0.68387 -0.636318 0.356961 + 1.54867 0.072714 -1.86511 -0.541253 -0.786384 0.297733 + 1.60296 0.071117 -1.76894 -0.548631 -0.785206 0.287151 + 1.64978 0.073826 -1.67583 -0.594865 -0.743055 0.306601 + 1.60938 0.151428 -1.60044 -0.69843 -0.62922 0.340994 + 1.50495 0.06539 -1.96142 -0.529744 -0.799468 0.283236 + 1.55544 0.042441 -1.96028 -0.128213 -0.985428 0.111771 + 1.60319 0.045063 -1.86662 -0.144472 -0.985996 0.0833079 + 1.65748 0.043559 -1.77041 -0.154326 -0.987293 0.0378994 + 1.70933 0.036278 -1.6716 -0.220039 -0.974594 0.0418279 + 1.51392 0.035693 -2.06379 -0.118869 -0.987129 0.106985 + 1.59725 0.050773 -1.9709 0.28735 -0.952473 -0.101115 + 1.645 0.053394 -1.87724 0.255373 -0.957105 -0.136877 + 1.69304 0.049387 -1.7757 0.224058 -0.959964 -0.168126 + 1.74489 0.042194 -1.67685 0.200715 -0.952112 -0.230643 + 1.46302 0.031072 -2.16318 -0.151168 -0.984575 0.0880925 + 1.5377 0.03982 -2.07013 0.281672 -0.956024 -0.0817188 + 1.5584 0.054865 -2.10739 0.448973 -0.873183 -0.189669 + 1.61795 0.065818 -2.00816 0.470416 -0.858163 -0.205585 + 1.67244 0.068455 -1.90453 0.409726 -0.884014 -0.225042 + 1.4868 0.035107 -2.16957 0.295092 -0.946694 -0.129194 + 1.50602 0.052899 -2.20699 0.438454 -0.869963 -0.225661 + 1.58162 0.083373 -2.16217 0.614934 -0.74329 -0.263392 + 1.62722 0.088345 -2.05878 0.60824 -0.742768 -0.279892 + 1.68171 0.091068 -1.9551 0.594195 -0.735021 -0.326614 + 1.44781 0.051335 -2.30468 0.449054 -0.862328 -0.233966 + 1.52924 0.081407 -2.26176 0.526251 -0.802257 -0.281857 + 1.5361 0.121257 -2.34579 0.669314 -0.663609 -0.334129 + 1.5781 0.118879 -2.24587 0.790392 -0.519879 -0.324048 + 1.6237 0.123939 -2.14243 0.808366 -0.48473 -0.334038 + 1.48243 0.090151 -2.36191 0.53415 -0.794824 -0.287989 + 1.48929 0.129995 -2.44592 0.631937 -0.699259 -0.334204 + 1.51576 0.167229 -2.46501 0.774431 -0.511087 -0.37289 + 1.55775 0.164852 -2.3651 0.858598 -0.397825 -0.323334 + 1.59089 0.16895 -2.26439 0.878137 -0.345949 -0.330448 + 1.44616 0.135233 -2.545 0.720464 -0.622236 -0.306194 + 1.47405 0.177061 -2.55984 0.774775 -0.505775 -0.379361 + 1.461 0.248108 -2.6577 0.826048 -0.357328 -0.435846 + 1.50271 0.238276 -2.56287 0.84771 -0.346865 -0.401339 + 1.5414 0.229123 -2.47201 0.854706 -0.369007 -0.365118 + 1.40652 0.13393 -2.65054 0.744357 -0.583335 -0.325043 + 1.43091 0.182214 -2.65897 0.840434 -0.388022 -0.378298 + 1.41123 0.246872 -2.74796 0.8547 -0.287013 -0.432564 + 1.44686 0.33257 -2.73139 0.84968 -0.199013 -0.4883 + 1.49747 0.340717 -2.6479 0.883143 -0.175278 -0.435127 + 1.38632 0.185582 -2.7542 0.834678 -0.375493 -0.402887 + 1.36663 0.250236 -2.84319 0.825653 -0.28402 -0.487473 + 1.39708 0.331328 -2.82164 0.857538 -0.116913 -0.500959 + 1.37354 0.397061 -2.86469 0.823809 0.0155686 -0.566653 + 1.42783 0.407363 -2.78434 0.844701 -0.0024908 -0.535233 + 1.34029 0.187375 -2.85431 0.865257 -0.252638 -0.433018 + 1.31287 0.247542 -2.92752 0.841424 -0.178422 -0.510069 + 1.33473 0.319051 -2.90858 0.822832 -0.0951803 -0.560258 + 1.31119 0.384784 -2.95163 0.773205 0.0210807 -0.633806 + 1.25835 0.25717 -3.02199 0.787327 -0.172088 -0.592032 + 1.28097 0.316272 -2.99296 0.821111 0.0322024 -0.569859 + 1.25167 0.379392 -3.02109 0.757663 0.120298 -0.641464 + 1.19801 0.257929 -3.09751 0.775382 -0.0560858 -0.628996 + 1.22401 0.308672 -3.0596 0.761525 0.0677958 -0.64458 + 1.19471 0.371712 -3.08779 0.701771 0.120874 -0.702074 + 1.13615 0.255278 -3.16932 0.724929 -0.0724772 -0.685 + 1.16367 0.309433 -3.13512 0.744582 0.136117 -0.653506 + 1.13457 0.383945 -3.14298 0.699053 0.226511 -0.678246 + 1.17194 0.445132 -3.08136 0.662967 0.274658 -0.696446 + 1.07432 0.25742 -3.23383 0.73092 0.0408514 -0.68124 + 1.10446 0.320445 -3.19199 0.70577 0.158678 -0.690442 + 1.07535 0.395043 -3.1998 0.681112 0.252963 -0.687093 + 1.11179 0.457364 -3.13654 0.668815 0.333525 -0.664415 + 1.00851 0.253025 -3.30362 0.718451 0.0519048 -0.693639 + 1.04262 0.322675 -3.25645 0.706391 0.17828 -0.685003 + 1.01994 0.404621 -3.25099 0.681459 0.277771 -0.677094 + 1.05221 0.499857 -3.17234 0.645736 0.378265 -0.66328 + 0.944428 0.249624 -3.37032 0.732425 0.115271 -0.671019 + 0.980638 0.325053 -3.31757 0.697502 0.190228 -0.690872 + 0.957952 0.406999 -3.31211 0.678046 0.278316 -0.68029 + 0.996791 0.50944 -3.22354 0.632031 0.444915 -0.634498 + 0.881302 0.234337 -3.44385 0.706798 0.126796 -0.695959 + 0.916559 0.321651 -3.38428 0.696719 0.206907 -0.686856 + 0.899258 0.399787 -3.37301 0.672912 0.279736 -0.68479 + 0.943938 0.490236 -3.28708 0.646297 0.409179 -0.644106 + 0.876258 0.541468 -3.31861 0.473963 0.683883 -0.554674 + 0.817145 0.232554 -3.50676 0.68057 0.157737 -0.715502 + 0.853666 0.326434 -3.44337 0.669238 0.237034 -0.704227 + 0.836365 0.404575 -3.43211 0.633331 0.301495 -0.712736 + 0.885244 0.483021 -3.34798 0.629417 0.379515 -0.678087 + 0.746372 0.233952 -3.57118 0.669883 0.156931 -0.725692 + 0.789509 0.324651 -3.50627 0.662242 0.263051 -0.701598 + 0.769752 0.39896 -3.49018 0.629927 0.332175 -0.702034 + 0.826932 0.46533 -3.40914 0.598605 0.39314 -0.697935 + 0.817946 0.523864 -3.37972 0.648699 0.355459 -0.672933 + 0.680662 0.232892 -3.63234 0.679381 0.154297 -0.71738 + 0.724944 0.323717 -3.56626 0.646391 0.269001 -0.714014 + 0.705187 0.397941 -3.55022 0.552641 0.451557 -0.700488 + 0.760318 0.459718 -3.46722 0.525491 0.431257 -0.733401 + 0.763341 0.514662 -3.43259 0.527047 0.380368 -0.759962 + 0.611912 0.245471 -3.69613 0.608378 0.150566 -0.779235 + 0.659234 0.322565 -3.62746 0.632226 0.313554 -0.708501 + 0.633228 0.392851 -3.6094 0.524499 0.509453 -0.682172 + 0.686246 0.450249 -3.51362 0.447668 0.54437 -0.709404 + 0.689269 0.50519 -3.47898 0.451928 0.465408 -0.761023 + 0.53144 0.25276 -3.74876 0.483301 0.0969158 -0.870073 + 0.592167 0.301591 -3.69274 0.568567 0.318986 -0.758274 + 0.566161 0.371871 -3.67466 0.523248 0.454411 -0.720918 + 0.614287 0.445155 -3.57279 0.526912 0.546538 -0.650891 + 0.608234 0.503811 -3.53379 0.556263 0.458323 -0.69319 + 0.44283 0.266892 -3.78923 0.322154 0.0675238 -0.944276 + 0.511694 0.308967 -3.74531 0.474516 0.321334 -0.819499 + 0.494656 0.378376 -3.71793 0.459761 0.460824 -0.759119 + 0.541237 0.456002 -3.63058 0.527577 0.509415 -0.679823 + 0.535184 0.51466 -3.59158 0.537571 0.473167 -0.697947 + 0.465982 0.209252 -3.7754 0.3021 -0.258712 -0.917498 + 0.355308 0.284864 -3.81136 0.19792 0.0967771 -0.975429 + 0.431191 0.33672 -3.77258 0.354235 0.346198 -0.868714 + 0.414152 0.406132 -3.74521 0.36191 0.489554 -0.79332 + 0.469732 0.4625 -3.67384 0.430857 0.527184 -0.73242 + 0.366945 0.225613 -3.80614 0.181632 -0.242402 -0.953022 + 0.252434 0.307248 -3.82213 0.0817809 0.081911 -0.993279 + 0.343669 0.354777 -3.79466 0.231617 0.325292 -0.916809 + 0.328062 0.418079 -3.7713 0.241082 0.47718 -0.845091 + 0.389347 0.471242 -3.70698 0.340012 0.549087 -0.763475 + 0.26407 0.248002 -3.81692 0.0603427 -0.160659 -0.985164 + 0.147688 0.318304 -3.82488 -0.00684758 0.108863 -0.994033 + 0.248549 0.359507 -3.81045 0.124471 0.288709 -0.949291 + 0.232942 0.422812 -3.7871 0.176342 0.414317 -0.892885 + 0.303257 0.483193 -3.73308 0.279063 0.525115 -0.803977 + 0.176903 0.195293 -3.80722 0.0407228 -0.336927 -0.94065 + 0.157958 0.255972 -3.82512 0.0188621 -0.12006 -0.992587 + 0.046452 0.314111 -3.81882 -0.0291123 0.0995672 -0.994605 + 0.143803 0.370477 -3.81325 -0.00485322 0.230677 -0.973018 + 0.145096 0.431693 -3.79748 0.047996 0.336661 -0.940402 + 0.056722 0.196941 -3.80987 -0.00373321 -0.291163 -0.956666 + 0.056722 0.251864 -3.81901 -0.0298785 -0.0846121 -0.995966 + -0.046453 0.314111 -3.81882 0.0302387 0.0984484 -0.994683 + 0.046452 0.391079 -3.80313 -0.0262006 0.226635 -0.973627 + 0.047745 0.452294 -3.78736 0.0110155 0.228217 -0.973548 + 0.059143 0.156342 -3.79236 0.00529499 -0.546063 -0.837727 + -0.056722 0.196941 -3.80987 -0.00851193 -0.281138 -0.95963 + -0.056722 0.251864 -3.81901 0.0163078 -0.0953417 -0.995311 + -0.147688 0.318304 -3.82488 0.00542591 0.107405 -0.994201 + -0.046453 0.391079 -3.80313 0.0270779 0.227553 -0.973389 + -0.059144 0.132308 -3.76993 0.00680413 -0.70964 -0.704532 + -0.059144 0.156351 -3.79237 -0.00182354 -0.543587 -0.839351 + -0.176904 0.195293 -3.80722 -0.0322481 -0.331945 -0.942747 + -0.157958 0.255972 -3.82512 -0.00591289 -0.134356 -0.990915 + -0.054834 0.111412 -3.74713 0.0307269 -0.824498 -0.56503 + -0.174334 0.128615 -3.76833 -0.00914269 -0.683778 -0.729633 + -0.179325 0.154625 -3.78978 -0.0428574 -0.516867 -0.854992 + -0.290328 0.147155 -3.77605 -0.094679 -0.559306 -0.823537 + -0.283017 0.187238 -3.79907 -0.114784 -0.36001 -0.925861 + -0.168312 0.087521 -3.72895 0.0496754 -0.898873 -0.435385 + -0.170024 0.107717 -3.74554 0.0118117 -0.687459 -0.726127 + -0.281723 0.098999 -3.73903 -0.0584176 -0.603617 -0.795131 + -0.285337 0.121152 -3.7546 -0.091184 -0.614501 -0.783629 + -0.060586 0.096136 -3.67128 0.0466666 -0.998847 0.0113056 + -0.174064 0.085736 -3.68326 0.048937 -0.993376 0.103972 + -0.27918 0.080809 -3.67453 0.0927764 -0.98278 0.159801 + -0.28001 0.078715 -3.7225 0.0430148 -0.907461 -0.417929 + -0.174324 0.110026 -3.60193 0.0166475 -0.929162 0.369299 + -0.279441 0.105189 -3.59316 0.111749 -0.920389 0.374694 + -0.388386 0.070091 -3.66177 0.149617 -0.978069 0.144895 + -0.389216 0.067999 -3.70974 -0.117379 -0.768087 -0.629496 + -0.165895 0.16095 -3.49994 0.00834939 -0.856492 0.516093 + -0.261283 0.173084 -3.47735 0.0987227 -0.837787 0.536998 + -0.373358 0.097524 -3.56988 0.202337 -0.906663 0.370164 + -0.238391 0.271757 -3.33506 0.0595084 -0.770229 0.634984 + -0.320792 0.288955 -3.30525 0.151164 -0.739532 0.655928 + -0.3552 0.165506 -3.45403 0.181601 -0.824866 0.535366 + -0.433629 0.173555 -3.41737 0.311265 -0.773587 0.551976 + -0.458605 0.088544 -3.53053 0.331167 -0.862598 0.382431 + -0.230969 0.366491 -3.24114 0.0995276 -0.594179 0.798151 + -0.31337 0.383687 -3.21133 0.141697 -0.58093 0.801525 + -0.381253 0.419616 -3.17396 0.228272 -0.520139 0.823011 + -0.399221 0.297007 -3.26859 0.174258 -0.706702 0.685717 + -0.251102 0.432437 -3.20417 0.250327 -0.243591 0.937016 + -0.316227 0.474584 -3.16837 0.38403 -0.20214 0.900922 + -0.384109 0.510512 -3.131 0.406972 -0.225809 0.88509 + -0.241066 0.63853 -3.21133 0.377262 0.0614409 0.924066 + -0.306191 0.680596 -3.17559 0.514185 0.0625139 0.855398 + -0.370374 0.709814 -3.139 0.578864 0.0521354 0.813756 + -0.44018 0.567976 -3.08593 0.515034 -0.19669 0.834298 + -0.212319 0.988087 -3.26118 0.324308 0.127323 0.937344 + -0.282673 1.00032 -3.23376 0.461718 0.114725 0.879576 + -0.346856 1.02945 -3.19722 0.511971 0.130633 0.849011 + -0.413558 1.03519 -3.15817 0.595967 0.142712 0.790226 + -0.426445 0.767278 -3.09393 0.659974 0.0706526 0.747959 + -0.153945 1.1952 -3.31132 0.174574 0.17545 0.968887 + -0.190816 1.18047 -3.29859 0.316914 0.180531 0.931114 + -0.26117 1.19278 -3.27112 0.410115 0.201215 0.889561 + -0.344489 1.20163 -3.23224 0.477331 0.195364 0.856731 + -0.114169 1.17588 -3.31345 0.14803 0.126719 0.980831 + -0.11631 1.26212 -3.32543 0.0820971 0.192741 0.977809 + -0.160899 1.2621 -3.32539 0.0995642 0.238302 0.966074 + -0.19777 1.24737 -3.31267 0.249493 0.293113 0.922951 + -0.031937 1.24305 -3.33199 0.0637637 0.156528 0.985613 + -0.076534 1.2428 -3.32755 0.115328 0.181314 0.976639 + -0.062427 1.31189 -3.34562 0.140711 0.170437 0.97527 + -0.109376 1.31139 -3.33635 0.0787367 0.190525 0.97852 + 0.031933 1.24315 -3.33196 -0.0516016 0.145085 0.988073 + -0.017829 1.31214 -3.35006 0.0988941 0.340303 0.935101 + -0.053659 1.34977 -3.35164 0.270054 0.404265 0.873865 + -0.100608 1.34927 -3.34237 0.0763008 0.317099 0.945318 + 0.017835 1.31214 -3.35006 -0.0417941 0.393612 0.918326 + -0.017829 1.37905 -3.39174 0.160566 0.585753 0.794426 + -0.02584 1.40636 -3.41205 -0.00505257 0.861277 0.50811 + -0.061669 1.37709 -3.37195 0.172867 0.766493 0.618551 + -0.088954 1.37642 -3.3624 0.206618 0.720412 0.662054 + 0.017835 1.37904 -3.39173 -0.164955 0.59249 0.788508 + -0.013819 1.41482 -3.4315 -0.0556168 0.987237 0.149232 + -0.055307 1.40668 -3.44081 -0.117956 0.987172 -0.107599 + -0.067327 1.39831 -3.4213 -0.0216331 0.915 0.402873 + -0.094612 1.39773 -3.41171 0.27398 0.870181 0.409537 + 0.053665 1.34977 -3.35164 -0.480395 0.253956 0.83948 + 0.061669 1.37709 -3.37195 -0.172497 0.766738 0.618351 + 0.02584 1.40636 -3.41205 0.0097644 0.844262 0.535842 + 0.088951 1.37642 -3.3624 -0.206806 0.720557 0.661837 + 0.067327 1.39831 -3.4213 0.000186073 0.906139 0.42298 + 0.055319 1.40667 -3.44079 0.0784006 0.992009 -0.0988484 + 0.013832 1.41481 -3.43149 0.0804617 0.993241 0.083655 + 0.135162 1.40392 -3.37363 -0.171998 0.757538 0.629724 + 0.094609 1.39773 -3.41171 -0.26881 0.865612 0.422443 + 0.111364 1.41296 -3.42808 -0.363813 0.900301 0.238952 + 0.151917 1.41924 -3.38996 -0.307755 0.812301 0.495433 + 0.156277 1.43764 -3.42784 -0.285621 0.938718 0.19295 + 0.15292 1.43718 -3.44704 -0.206158 0.926448 -0.314948 + 0.108007 1.4125 -3.44729 -0.321138 0.911293 -0.257713 + 0.173579 1.40108 -3.36231 -0.254519 0.382566 0.88818 + 0.187502 1.42533 -3.37352 -0.0976133 0.863239 0.495267 + 0.184397 1.42224 -3.38296 -0.0686834 0.997477 0.0179669 + 0.188757 1.44073 -3.42079 -0.0162508 0.987682 0.155629 + 0.203469 1.43657 -3.38037 -0.0886693 0.716164 0.692276 + 0.244081 1.42822 -3.39051 0.285648 0.935309 -0.208812 + 0.240976 1.42512 -3.39995 0.171851 0.985119 -0.00276594 + 0.203469 1.43657 -3.38037 -0.273932 -0.186205 -0.943551 + 0.273714 1.41652 -3.42925 0.202362 0.965394 -0.164512 + 0.251959 1.4259 -3.4201 0.374003 0.924182 0.0775175 + 0.289238 1.40217 -3.48199 0.140981 0.891409 -0.430714 + 0.248195 1.41737 -3.46932 0.190556 0.89119 -0.411666 + 0.22644 1.42675 -3.46018 0.170376 0.876864 -0.449534 + 0.19974 1.44151 -3.44094 -0.121399 0.958384 -0.258385 + 0.190844 1.42436 -3.46183 -0.0614585 0.718917 -0.692374 + 0.313974 1.40012 -3.47984 0.0742122 0.891002 -0.447893 + 0.330946 1.38218 -3.50197 0.182925 0.670616 -0.718897 + 0.288755 1.38388 -3.50732 0.0512786 0.653434 -0.755245 + 0.247711 1.399 -3.4947 -0.0481689 0.666744 -0.743729 + 0.217544 1.4096 -3.48106 -0.204916 0.6054 -0.769091 + 0.346548 1.40927 -3.45969 0.00868479 0.878648 -0.477391 + 0.36352 1.39142 -3.48178 0.247026 0.695938 -0.674276 + 0.336869 1.3615 -3.51435 0.221369 0.391135 -0.893314 + 0.294678 1.3632 -3.5197 0.0467424 0.372107 -0.927012 + 0.25492 1.35791 -3.51993 -0.146598 0.337282 -0.929919 + 0.316487 1.42576 -3.40806 -0.338962 0.928199 -0.153462 + 0.364585 1.42065 -3.44061 -0.0226793 0.85014 -0.526069 + 0.389512 1.40048 -3.46206 0.323625 0.674508 -0.663556 + 0.375559 1.35026 -3.50649 0.38076 0.350827 -0.855536 + 0.385872 1.44511 -3.40436 0.212699 0.963748 -0.161084 + 0.410798 1.42493 -3.42582 0.28736 0.811221 -0.509259 + 0.401551 1.3594 -3.48672 0.374962 0.47191 -0.797938 + 0.38448 1.29631 -3.51504 0.269127 0.0632948 -0.961022 + 0.382552 1.44302 -3.37474 -0.0412554 0.987495 0.152158 + 0.431014 1.42252 -3.41704 0.349737 0.802369 -0.48362 + 0.420168 1.36919 -3.47308 0.324627 0.555358 -0.765634 + 0.428869 1.32363 -3.49155 0.49583 0.268433 -0.825891 + 0.410252 1.31375 -3.50525 0.346747 0.223354 -0.910977 + 0.437661 1.43887 -3.38337 0.217246 0.955316 -0.200436 + 0.457182 1.39153 -3.43356 0.356417 0.694627 -0.624868 + 0.440384 1.36678 -3.4643 0.431359 0.501611 -0.749877 + 0.44041 1.31497 -3.48615 0.462112 0.198961 -0.864214 + 0.428342 1.24897 -3.49684 0.418722 -0.0477808 -0.906857 + 0.459366 1.35568 -3.45866 0.298453 0.473778 -0.828529 + 0.459392 1.30386 -3.48052 0.447459 0.0877752 -0.889986 + 0.439884 1.24031 -3.49145 0.443513 -0.11501 -0.888858 + 0.45177 1.11419 -3.4558 0.628216 -0.197709 -0.7525 + 0.402571 1.23153 -3.50663 0.36982 -0.111089 -0.922438 + 0.481817 1.26982 -3.45996 0.35386 -0.164402 -0.920736 + 0.462308 1.20627 -3.47089 0.659232 -0.158976 -0.734942 + 0.500979 1.14196 -3.4007 0.548185 -0.309852 -0.776843 + 0.490441 1.04989 -3.38562 0.673376 -0.0727248 -0.735715 + 0.54169 1.23037 -3.43524 0.316975 -0.420198 -0.850271 + 0.525924 1.10772 -3.37419 0.350719 -0.259242 -0.899883 + 0.523947 1.00931 -3.36355 0.410235 0.0254605 -0.911624 + 0.483309 0.9457 -3.40716 0.38816 0.0450427 -0.920491 + 0.552783 0.998588 -3.35717 0.311503 0.0379845 -0.949486 + 0.554949 0.895571 -3.37554 0.353821 0.217668 -0.909632 + 0.516815 0.905132 -3.3851 0.440698 0.168369 -0.881724 + 0.478449 0.842041 -3.41942 0.343439 0.347188 -0.872645 + 0.453938 0.960764 -3.40646 0.18714 -0.143293 -0.971826 + 0.549585 0.807847 -3.4032 0.369654 0.20877 -0.905412 + 0.51145 0.817408 -3.41276 0.415847 0.319928 -0.851303 + 0.452226 0.777477 -3.47419 0.218744 0.143885 -0.965116 + 0.449078 0.857014 -3.41876 0.182208 0.338376 -0.923202 + 0.562027 0.731222 -3.41288 0.517741 0.338327 -0.785799 + 0.485227 0.752929 -3.46748 0.511071 0.425893 -0.746607 + 0.429639 0.78645 -3.47633 0.315643 0.499265 -0.80691 + 0.426491 0.865992 -3.42091 0.311218 0.263877 -0.912969 + 0.415375 0.969923 -3.43112 0.442703 -0.16193 -0.881925 + 0.62641 0.7248 -3.37895 0.434195 0.284204 -0.854812 + 0.57491 0.667283 -3.44113 0.539399 0.479631 -0.6921 + 0.498111 0.688905 -3.49578 0.533051 0.479051 -0.6974 + 0.419446 0.698937 -3.53976 0.36682 0.526179 -0.767189 + 0.401327 0.760889 -3.50386 0.311133 0.534954 -0.785507 + 0.6518 0.659947 -3.39483 0.434262 0.444228 -0.783632 + 0.608552 0.602889 -3.4668 0.524961 0.515402 -0.677331 + 0.526324 0.622523 -3.52641 0.530705 0.514742 -0.673344 + 0.447658 0.632468 -3.57043 0.410001 0.521637 -0.748194 + 0.685442 0.595548 -3.42048 0.398138 0.516228 -0.758284 + 0.700774 0.548617 -3.4434 0.37111 0.523403 -0.767024 + 0.619739 0.547326 -3.49816 0.532904 0.471288 -0.702781 + 0.53751 0.56696 -3.55777 0.541562 0.467465 -0.698704 + 0.769571 0.623474 -3.37065 0.414621 0.619307 -0.666744 + 0.784903 0.576636 -3.39353 0.514389 0.398737 -0.759218 + 0.824094 0.620744 -3.32732 0.689605 0.667044 -0.281952 + 0.839508 0.585837 -3.34066 0.880302 0.234367 -0.412481 + 0.850633 0.571579 -3.27597 0.691401 0.624303 -0.363607 + 0.202863 1.37775 -3.4871 -0.246237 0.390109 -0.887233 + 0.18102 1.37515 -3.48979 0.284148 0.480033 -0.829957 + 0.169001 1.42167 -3.46457 0.0410484 0.663436 -0.747106 + 0.135567 1.41214 -3.47266 -0.214545 0.785278 -0.580783 + 0.224753 1.36843 -3.50635 -0.415741 0.338208 -0.84426 + 0.23124 1.30733 -3.52613 -0.410462 0.0793803 -0.908416 + 0.20935 1.31665 -3.50687 -0.216845 0.232952 -0.948004 + 0.186503 1.33698 -3.50528 0.399705 0.319828 -0.859038 + 0.265468 1.30618 -3.52993 -0.0489671 0.0972229 -0.994057 + 0.240546 1.23784 -3.52937 -0.139411 -0.0449392 -0.989214 + 0.205617 1.25386 -3.52612 0.0793408 0.0959397 -0.99222 + 0.18277 1.27427 -3.52447 0.278017 0.213043 -0.936653 + 0.305226 1.31147 -3.52969 0.0808413 0.105789 -0.991097 + 0.313998 1.23121 -3.52948 0.11317 -0.0763665 -0.990636 + 0.274773 1.23669 -3.53318 -0.00492439 -0.0564707 -0.998392 + 0.34579 1.30755 -3.5229 0.210507 0.0991929 -0.972547 + 0.354562 1.22729 -3.52269 0.246926 -0.0850897 -0.965291 + 0.328106 1.12278 -3.50867 0.171585 -0.230828 -0.957746 + 0.288882 1.12826 -3.51238 0.130659 -0.194822 -0.972097 + 0.271159 1.09806 -3.51045 0.223639 -0.178084 -0.958265 + 0.413208 1.12335 -3.48046 0.413676 -0.219259 -0.883627 + 0.365199 1.1191 -3.49651 0.305335 -0.240667 -0.921331 + 0.340683 0.972804 -3.45911 0.350587 -0.134777 -0.926782 + 0.321531 0.967345 -3.46626 0.266288 -0.123788 -0.955912 + 0.303809 0.937137 -3.46433 0.208122 -0.0170007 -0.977955 + 0.377776 0.969135 -3.44696 0.340925 -0.160459 -0.926295 + 0.388892 0.865204 -3.43674 0.435932 0.24891 -0.864874 + 0.36058 0.839644 -3.46427 0.336231 0.355347 -0.872168 + 0.341428 0.834182 -3.47141 0.253304 0.3868 -0.886692 + 0.324119 0.755671 -3.53462 0.313321 0.54734 -0.776047 + 0.291475 0.778169 -3.53319 0.408725 0.542398 -0.733994 + 0.308783 0.856679 -3.46998 0.308499 0.272868 -0.911247 + 0.273883 0.94721 -3.48018 0.347105 -0.0545972 -0.936236 + 0.342238 0.693626 -3.57056 0.278259 0.543769 -0.791762 + 0.276321 0.788484 -3.53466 0.0526014 0.542389 -0.838479 + 0.278858 0.866753 -3.48582 0.432091 0.310496 -0.846694 + 0.263704 0.877155 -3.48724 0.0778299 0.264969 -0.961111 + 0.258453 0.951896 -3.4843 0.000965101 -0.07946 -0.996838 + 0.366268 0.635173 -3.60391 0.295469 0.53815 -0.789362 + 0.283918 0.635585 -3.63123 0.275975 0.569554 -0.774239 + 0.259889 0.694043 -3.59788 0.204008 0.580512 -0.78828 + 0.459741 0.576667 -3.60318 0.422799 0.504339 -0.752917 + 0.37835 0.579463 -3.63662 0.319651 0.54525 -0.774936 + 0.295794 0.585203 -3.66637 0.295661 0.573611 -0.763908 + 0.19882 0.638771 -3.65915 0.19567 0.613711 -0.7649 + 0.457415 0.524364 -3.63699 0.426486 0.501637 -0.752642 + 0.37703 0.533192 -3.67008 0.33887 0.534265 -0.774421 + 0.294473 0.538852 -3.69988 0.299305 0.539182 -0.787209 + 0.210359 0.547039 -3.72446 0.243693 0.54762 -0.800454 + 0.210696 0.588303 -3.69433 0.234628 0.586332 -0.775348 + 0.219143 0.491294 -3.75771 0.226493 0.465643 -0.855499 + 0.125856 0.550614 -3.74385 0.164237 0.519415 -0.83859 + 0.126193 0.591881 -3.71373 0.161139 0.615806 -0.771244 + 0.121754 0.635303 -3.67714 0.13727 0.643985 -0.752622 + 0.177596 0.693464 -3.61488 0.148772 0.64176 -0.752337 + 0.131297 0.500173 -3.76809 0.116093 0.402432 -0.908059 + 0.042305 0.554897 -3.75507 0.0635508 0.528745 -0.846398 + 0.042305 0.592503 -3.72521 0.0562201 0.633567 -0.771642 + 0.037866 0.635925 -3.68862 0.0399128 0.675958 -0.735859 + 0.10053 0.689996 -3.63287 0.0719798 0.673846 -0.735357 + 0.047745 0.504458 -3.77931 0.0729337 0.299081 -0.951436 + -0.042299 0.554897 -3.75507 -0.067407 0.531543 -0.844345 + -0.042299 0.592503 -3.72521 -0.0608131 0.630536 -0.773774 + -0.037866 0.635925 -3.68862 -0.0506536 0.684472 -0.727278 + 0.037866 0.679163 -3.64331 -0.00267406 0.708749 -0.705456 + -0.047746 0.452294 -3.78736 0.0304382 0.197922 -0.979745 + -0.047746 0.504458 -3.77931 -0.0424475 0.326367 -0.94429 + -0.125851 0.550614 -3.74385 -0.160109 0.522816 -0.837274 + -0.126187 0.591881 -3.71373 -0.157705 0.613615 -0.773696 + -0.121754 0.635303 -3.67714 -0.12676 0.65031 -0.749018 + -0.145096 0.431693 -3.79748 -0.0623385 0.323363 -0.94422 + -0.131297 0.500178 -3.7681 -0.145146 0.428246 -0.891929 + -0.219143 0.491294 -3.75771 -0.209934 0.478385 -0.852687 + -0.210358 0.547039 -3.72446 -0.244548 0.548124 -0.799848 + -0.210694 0.588303 -3.69433 -0.23583 0.585459 -0.775643 + -0.143803 0.370477 -3.81325 0.00251031 0.232517 -0.972589 + -0.248561 0.359502 -3.81044 -0.121637 0.291314 -0.948863 + -0.232942 0.422812 -3.7871 -0.158052 0.39551 -0.90476 + -0.252446 0.307248 -3.82213 -0.0774734 0.0785539 -0.993895 + -0.35532 0.284859 -3.81135 -0.199613 0.0952325 -0.975236 + -0.343681 0.354772 -3.79465 -0.23448 0.327842 -0.915171 + -0.328062 0.418079 -3.7713 -0.254814 0.466885 -0.846811 + -0.264071 0.247997 -3.81691 -0.0745682 -0.171886 -0.98229 + -0.366946 0.225613 -3.80614 -0.132483 -0.290398 -0.947691 + -0.46598 0.209252 -3.7754 -0.303117 -0.259466 -0.91695 + -0.442819 0.266897 -3.78924 -0.331122 0.0754069 -0.94057 + -0.43118 0.336725 -3.77259 -0.359 0.341411 -0.868653 + -0.389832 0.172658 -3.77302 -0.164427 -0.462954 -0.870998 + -0.488867 0.156299 -3.74228 -0.250614 -0.490366 -0.834706 + -0.5842 0.141337 -3.69717 -0.391415 -0.430963 -0.813059 + -0.55459 0.195116 -3.73491 -0.440772 -0.204233 -0.874076 + -0.531429 0.25276 -3.74876 -0.478224 0.101717 -0.872327 + -0.397143 0.132582 -3.75 -0.165876 -0.58462 -0.794169 + -0.499958 0.118466 -3.71255 -0.223329 -0.626162 -0.747024 + -0.595291 0.103505 -3.66744 -0.313826 -0.635406 -0.70553 + -0.682147 0.090917 -3.60984 -0.426149 -0.606739 -0.671018 + -0.666436 0.129377 -3.64445 -0.515866 -0.36769 -0.773748 + -0.392791 0.111121 -3.72923 -0.149574 -0.648977 -0.74596 + -0.495606 0.097005 -3.69178 -0.205233 -0.691502 -0.692607 + -0.58794 0.081027 -3.64191 -0.270917 -0.723488 -0.634956 + -0.674795 0.068439 -3.5843 -0.302017 -0.766649 -0.5666 + -0.389177 0.088968 -3.71366 -0.237191 -0.396388 -0.886914 + -0.490638 0.07538 -3.67233 -0.347933 -0.472663 -0.80965 + -0.582971 0.059404 -3.62245 -0.295983 -0.729356 -0.616794 + -0.656429 0.045461 -3.56171 -0.300589 -0.794469 -0.527698 + -0.74931 0.051972 -3.51798 -0.404311 -0.725625 -0.556778 + -0.490677 0.054324 -3.66846 -0.271277 -0.764678 -0.584531 + -0.56356 0.039286 -3.60281 -0.0151808 -0.956663 -0.290801 + -0.637018 0.02535 -3.54207 -0.0474612 -0.975787 -0.213512 + -0.704689 0.015375 -3.47239 0.0497116 -0.991183 -0.12282 + -0.730944 0.029087 -3.49534 -0.262881 -0.859505 -0.438343 + -0.473633 0.061026 -3.62246 0.236519 -0.960869 0.144188 + -0.546516 0.045994 -3.55683 0.304335 -0.934442 0.184926 + -0.614262 0.039505 -3.49159 0.342227 -0.909834 0.234698 + -0.681933 0.029531 -3.42191 0.368968 -0.893535 0.255847 + -0.772297 0.004586 -3.40171 0.0500294 -0.996834 -0.0617984 + -0.528557 0.085339 -3.47517 0.405513 -0.811049 0.421613 + -0.596303 0.078852 -3.40994 0.494828 -0.754489 0.431152 + -0.652092 0.083551 -3.34128 0.521612 -0.720876 0.456354 + -0.711505 0.081249 -3.27089 0.568741 -0.688788 0.44956 + -0.741345 0.027227 -3.35152 0.404557 -0.867117 0.290587 + -0.503581 0.170259 -3.36206 0.382646 -0.723755 0.574248 + -0.56616 0.187379 -3.30871 0.483675 -0.646985 0.589464 + -0.62195 0.191992 -3.2401 0.566958 -0.581271 0.583681 + -0.67323 0.214898 -3.17478 0.622908 -0.5263 0.578787 + -0.468642 0.323794 -3.23039 0.287651 -0.643127 0.709679 + -0.531221 0.340828 -3.17709 0.323101 -0.596325 0.734848 + -0.582788 0.389107 -3.12352 0.470962 -0.508368 0.720942 + -0.634068 0.412018 -3.0582 0.618481 -0.435186 0.654289 + -0.450673 0.446399 -3.13575 0.234921 -0.518637 0.822087 + -0.505423 0.495836 -3.08818 0.369441 -0.453015 0.811351 + -0.55699 0.544116 -3.0346 0.409437 -0.430524 0.80437 + -0.60776 0.585761 -2.98813 0.557687 -0.34303 0.755854 + -0.682178 0.444467 -2.9922 0.711149 -0.381336 0.590635 + -0.49493 0.617412 -3.03835 0.563081 -0.203271 0.801013 + -0.542085 0.679823 -2.98485 0.613253 -0.170892 0.771178 + -0.592855 0.721468 -2.93838 0.391013 -0.158552 0.906626 + -0.650256 0.756918 -2.92238 0.560709 -0.0199546 0.827772 + -0.655871 0.618124 -2.92219 0.749676 -0.176908 0.637722 + -0.483712 0.796392 -3.04775 0.710443 0.0649358 0.700752 + -0.530867 0.858801 -2.99425 0.728672 0.117238 0.674754 + -0.584755 0.88381 -2.95217 0.515703 0.130637 0.846749 + -0.470825 1.0643 -3.11199 0.622835 0.17802 0.76183 + -0.531515 1.06107 -3.06439 0.644572 0.214255 0.733909 + -0.585403 1.08609 -3.02232 0.67448 0.232207 0.700826 + -0.636956 1.07292 -2.96692 0.67064 0.202604 0.713578 + -0.642155 0.919266 -2.93618 0.538513 0.108757 0.835569 + -0.411191 1.20737 -3.19319 0.503364 0.263393 0.822951 + -0.478377 1.20727 -3.14921 0.561896 0.270668 0.781673 + -0.539068 1.20412 -3.10156 0.564598 0.326131 0.7582 + -0.571991 1.21055 -3.0797 0.641148 0.346885 0.684544 + -0.596152 1.19696 -3.04635 0.701851 0.271422 0.658586 + -0.380483 1.26394 -3.22597 0.349973 0.242226 0.904901 + -0.405022 1.26374 -3.22323 0.282333 0.308878 0.90823 + -0.441117 1.27996 -3.20793 0.54275 0.227806 0.80841 + -0.447286 1.2236 -3.1779 0.531465 0.351648 0.770641 + -0.508162 1.25605 -3.14551 0.52243 0.305436 0.7961 + -0.324758 1.21402 -3.24652 0.480054 0.237997 0.844337 + -0.360752 1.27625 -3.24029 0.609766 0.256482 0.749935 + -0.393174 1.33562 -3.23593 0.412858 0.166265 0.895491 + -0.417713 1.33543 -3.23319 0.36587 -0.0340581 0.930042 + -0.448258 1.31784 -3.20993 0.587047 0.0656499 0.806886 + -0.308602 1.21724 -3.25628 0.396627 0.337141 0.853828 + -0.351967 1.277 -3.25119 0.613052 0.290892 0.73454 + -0.374757 1.3333 -3.24891 0.66002 0.269898 0.701091 + -0.401247 1.40643 -3.25577 0.458557 0.565264 0.685712 + -0.421983 1.37743 -3.22175 0.479854 0.342175 0.807872 + -0.280751 1.22028 -3.26996 0.415013 0.246145 0.875886 + -0.29321 1.28676 -3.2803 0.400311 0.192049 0.896029 + -0.335811 1.28021 -3.26095 0.416642 0.221769 0.881605 + -0.365972 1.33396 -3.25985 0.570043 0.250602 0.782464 + -0.38283 1.40402 -3.26879 0.617982 0.481989 0.621115 + -0.22293 1.28596 -3.31451 0.403117 0.211752 0.890313 + -0.265359 1.28981 -3.29397 0.432818 0.192407 0.880709 + -0.296601 1.33175 -3.28702 0.389387 0.0914541 0.916523 + -0.339203 1.3252 -3.26767 0.356037 0.195876 0.913712 + -0.363124 1.38293 -3.27388 0.434251 0.348162 0.830788 + -0.203349 1.25836 -3.31571 0.268914 0.296926 0.916253 + -0.21125 1.33662 -3.33106 0.472873 0.215991 0.854248 + -0.253679 1.34056 -3.31048 0.454215 0.0415636 0.889922 + -0.301621 1.37405 -3.28068 0.184177 0.216919 0.958658 + -0.336355 1.37418 -3.28171 0.216154 0.405705 0.888077 + -0.177853 1.30966 -3.33677 0.046587 0.281948 0.958298 + -0.183432 1.32058 -3.33987 0.184337 0.273368 0.944081 + -0.186302 1.34668 -3.34808 0.163969 0.306378 0.937682 + -0.214493 1.40225 -3.35213 0.483943 0.417706 0.768974 + -0.258698 1.38294 -3.30408 0.492748 0.276341 0.825127 + -0.153965 1.31145 -3.33627 -0.0179711 0.23833 0.971018 + -0.170708 1.37498 -3.3541 -0.0879593 0.279533 0.956098 + -0.173578 1.40108 -3.36231 -0.00961449 0.393126 0.919434 + -0.189545 1.41231 -3.36916 0.0731095 0.393161 0.916558 + -0.224264 1.42835 -3.36575 0.0706971 0.86016 0.505101 + -0.146819 1.37676 -3.35359 0.0449542 0.416268 0.90813 + -0.187495 1.4252 -3.37349 0.259943 0.850018 0.458148 + -0.203462 1.43643 -3.38034 0.0906212 0.718171 0.689941 + -0.135165 1.40392 -3.37363 0.262243 0.744137 0.614401 + -0.184397 1.42224 -3.38296 0.271134 0.927153 0.258599 + -0.240976 1.42512 -3.39995 -0.0953237 0.995206 0.0218627 + -0.244074 1.42809 -3.39048 -0.282114 0.937571 -0.203402 + -0.203462 1.43643 -3.38034 0.273906 -0.186256 -0.943549 + -0.111356 1.41296 -3.42808 0.411951 0.891038 0.190648 + -0.15191 1.41924 -3.38996 0.294832 0.849487 0.437546 + -0.188757 1.44073 -3.42079 0.00273671 0.9709 0.239468 + -0.059856 1.40067 -3.4512 -0.0651882 0.889861 -0.451551 + -0.075108 1.39564 -3.46168 0.0534032 0.927157 -0.370848 + -0.094483 1.39846 -3.46257 0.263931 0.905424 -0.332488 + -0.108024 1.41251 -3.4473 0.594 0.795571 -0.119289 + -0.152937 1.43718 -3.44704 0.134764 0.951098 -0.277942 + -0.15627 1.43764 -3.42784 0.245363 0.960705 0.129784 + -0.199714 1.44152 -3.44096 -0.0491463 0.962796 -0.265722 + -0.190848 1.42427 -3.46188 0.0699882 0.706934 -0.703808 + -0.226414 1.42676 -3.46019 -0.169941 0.876752 -0.449919 + -0.251933 1.42591 -3.42012 -0.191869 0.97744 -0.0883005 + -0.169 1.42167 -3.46457 -0.0414682 0.663814 -0.746748 + -0.202867 1.37775 -3.4871 0.281507 0.355621 -0.891228 + -0.224757 1.36843 -3.50635 0.411895 0.33284 -0.848269 + -0.217548 1.4096 -3.48106 0.16487 0.63056 -0.758428 + -0.248204 1.41737 -3.46932 -0.190634 0.891346 -0.411292 + -0.135584 1.41214 -3.47267 0.214519 0.78425 -0.58218 + -0.151647 1.39662 -3.49018 -0.174491 0.673595 -0.718208 + -0.181019 1.37515 -3.48979 -0.284144 0.480028 -0.829961 + -0.186503 1.33698 -3.50528 -0.399625 0.319892 -0.859051 + -0.209365 1.31665 -3.50687 0.237464 0.274236 -0.931882 + -0.122043 1.39809 -3.48794 0.148184 0.822446 -0.549203 + -0.126074 1.37867 -3.50889 -0.012152 0.668185 -0.743896 + -0.153831 1.37137 -3.51385 -0.335538 0.546428 -0.767353 + -0.159315 1.33329 -3.52929 -0.386848 0.284674 -0.877103 + -0.099131 1.38335 -3.5078 0.0769065 0.841667 -0.534492 + -0.117655 1.38251 -3.50654 -0.114319 0.666873 -0.73635 + -0.08848 1.33753 -3.53403 0.096666 0.317675 -0.943259 + -0.128258 1.35342 -3.53255 -0.0913116 0.443083 -0.891818 + -0.135059 1.31346 -3.53994 -0.170567 0.144479 -0.974696 + -0.079756 1.38052 -3.5069 0.187132 0.841228 -0.507263 + -0.094743 1.36776 -3.5264 -0.316799 0.300163 -0.899745 + -0.080061 1.34137 -3.53168 0.0987366 0.286026 -0.953121 + -0.058754 1.33893 -3.52826 0.372046 0.284184 -0.883641 + -0.095281 1.29757 -3.54142 0.078685 0.123629 -0.989204 + -0.046942 1.38944 -3.47895 0.106689 0.861233 -0.496885 + -0.040622 1.37433 -3.49498 0.332874 0.638963 -0.693485 + -0.073436 1.36542 -3.52293 0.299095 0.53609 -0.789398 + -0.03169 1.39448 -3.46848 -0.0312237 0.779153 -0.626056 + -0.020389 1.38216 -3.47973 0.176764 0.613621 -0.769561 + -0.022016 1.35661 -3.49828 0.457628 0.376069 -0.805698 + -0.04225 1.34878 -3.51353 0.457271 0.395466 -0.796561 + -0.018368 1.40455 -3.46031 -0.0775444 0.795788 -0.60059 + -0.007067 1.39222 -3.47157 0.0127303 0.600312 -0.799664 + -0.007067 1.36636 -3.48576 0.180249 0.415998 -0.891322 + -0.013819 1.41047 -3.44996 -0.0705546 0.930499 -0.359435 + 0.013832 1.41055 -3.4499 0.05415 0.915858 -0.397834 + 0.007074 1.39222 -3.47157 -0.0157734 0.626372 -0.779365 + 0.01834 1.40455 -3.46031 -0.0100483 0.803799 -0.594816 + 0.031661 1.39457 -3.46843 0.0321566 0.7794 -0.625701 + 0.020396 1.38225 -3.47968 -0.176175 0.613781 -0.769568 + 0.007074 1.36644 -3.48571 -0.179221 0.416617 -0.891241 + 0.059827 1.40067 -3.4512 0.0313504 0.880414 -0.473169 + 0.046942 1.38944 -3.47895 -0.105918 0.860726 -0.497928 + 0.040618 1.37425 -3.49503 -0.335451 0.641835 -0.68958 + 0.022024 1.35669 -3.49822 -0.457355 0.376553 -0.805626 + 0.006906 1.32209 -3.4975 -0.282331 0.204947 -0.937169 + 0.075108 1.39564 -3.46168 -0.086145 0.896469 -0.434653 + 0.079756 1.38052 -3.5069 -0.187833 0.840961 -0.507448 + 0.073432 1.36533 -3.52298 -0.288449 0.539421 -0.791089 + 0.042246 1.34869 -3.51357 -0.496431 0.365892 -0.787197 + 0.094483 1.39846 -3.46257 -0.231166 0.863868 -0.447543 + 0.099131 1.38335 -3.5078 -0.0774568 0.841973 -0.53393 + 0.094713 1.36778 -3.52642 0.316134 0.300896 -0.899734 + 0.080031 1.34138 -3.53171 -0.0996003 0.274027 -0.956551 + 0.05875 1.33893 -3.52826 -0.37021 0.273795 -0.887683 + 0.122043 1.39809 -3.48794 -0.155638 0.822449 -0.547133 + 0.117625 1.38252 -3.50657 0.115323 0.666777 -0.736281 + 0.088466 1.33752 -3.53402 -0.0944428 0.320119 -0.942658 + 0.066479 1.28183 -3.53956 -0.298008 0.0248699 -0.954239 + 0.051653 1.3072 -3.5327 -0.435792 0.115722 -0.892577 + 0.151647 1.39662 -3.49018 0.176984 0.67318 -0.717987 + 0.12606 1.37867 -3.50889 0.0129282 0.667218 -0.744751 + 0.128244 1.35342 -3.53255 0.0910695 0.443035 -0.891867 + 0.135067 1.31345 -3.53993 0.159501 0.111153 -0.98092 + 0.095289 1.29747 -3.54145 -0.0440092 0.106649 -0.993322 + 0.153831 1.37137 -3.51385 0.335495 0.546419 -0.767378 + 0.159315 1.33329 -3.52929 0.386712 0.284775 -0.87713 + 0.158522 1.25435 -3.53517 0.258226 0.00560321 -0.966068 + 0.122837 1.23369 -3.54737 0.1603 -0.0281909 -0.986666 + 0.094027 1.21796 -3.54554 -0.197356 -0.128487 -0.971875 + 0.2026 1.15117 -3.50946 -0.0385232 -0.237621 -0.970594 + 0.17446 1.14901 -3.5117 0.261492 -0.223895 -0.938879 + 0.138775 1.12834 -3.52391 0.281318 -0.20583 -0.93728 + 0.101669 1.11634 -3.52693 -0.122127 -0.208053 -0.970463 + 0.049246 1.23504 -3.52671 -0.460089 -0.109814 -0.881056 + 0.237529 1.13524 -3.51266 -0.300422 -0.19243 -0.934193 + 0.199765 0.994883 -3.45615 -0.287079 -0.149053 -0.946239 + 0.171624 0.99271 -3.45839 0.4724 -0.128666 -0.871942 + 0.153737 0.971674 -3.47695 0.424746 -0.0277147 -0.904888 + 0.116631 0.959679 -3.47998 0.100339 -0.0814759 -0.991612 + 0.255729 1.10274 -3.51457 -0.0779485 -0.151425 -0.985391 + 0.224304 0.9899 -3.47912 -0.551881 -0.114408 -0.826038 + 0.234171 0.879942 -3.47827 -0.562222 0.116394 -0.818755 + 0.209632 0.884925 -3.4553 -0.123649 0.201072 -0.971741 + 0.188623 0.8582 -3.47441 0.319617 0.414404 -0.852123 + 0.242504 0.9574 -3.48103 -0.169874 -0.0526683 -0.984057 + 0.247755 0.882659 -3.48397 -0.282803 0.165282 -0.94483 + 0.262738 0.785681 -3.529 -0.288017 0.565391 -0.772903 + 0.241729 0.758958 -3.54812 -0.00934317 0.620757 -0.783948 + 0.170736 0.837166 -3.49298 0.137954 0.507563 -0.850499 + 0.159436 0.758378 -3.56511 0.111522 0.648325 -0.753152 + 0.116505 0.772062 -3.55781 0.0292675 0.639227 -0.768461 + 0.127805 0.850848 -3.48568 -0.00138549 0.334279 -0.942473 + 0.085191 0.749427 -3.57601 -0.010711 0.681014 -0.732192 + 0.078727 0.845574 -3.49134 0.111025 0.389887 -0.914145 + 0.067553 0.954492 -3.48559 -0.0841475 -0.0805331 -0.993194 + 0.022527 0.738598 -3.58645 -0.0021121 0.70788 -0.706329 + 0.022527 0.824989 -3.49509 -0.205911 0.446642 -0.870696 + 0.047413 0.822939 -3.50954 -0.213885 0.473741 -0.854297 + 0.035048 0.945606 -3.4772 -0.352676 0.0103365 -0.935688 + 0.056888 1.13333 -3.50816 -0.321801 -0.170372 -0.931352 + -0.037866 0.679168 -3.64332 -0.0184305 0.697304 -0.716538 + -0.022528 0.738598 -3.58645 0.0101019 0.698287 -0.715747 + -0.022528 0.824989 -3.49509 0.22356 0.465964 -0.856095 + -0.010165 0.947661 -3.46276 0.244268 0.00352737 -0.969701 + 0.010163 0.947656 -3.46275 -0.235267 0.0157254 -0.971803 + -0.100529 0.689996 -3.63287 -0.061335 0.66172 -0.747238 + -0.085191 0.749427 -3.57601 -0.00416693 0.672755 -0.739853 + -0.047413 0.822939 -3.50954 0.152378 0.551159 -0.820368 + -0.03505 0.945606 -3.4772 0.345375 -0.00167197 -0.938463 + -0.198824 0.638771 -3.65915 -0.209035 0.627992 -0.74962 + -0.177599 0.693464 -3.61488 -0.164666 0.632744 -0.756651 + -0.159444 0.758378 -3.56511 -0.108944 0.645719 -0.755763 + -0.116506 0.772062 -3.55781 -0.029263 0.639229 -0.768459 + -0.078728 0.845574 -3.49134 -0.110972 0.389815 -0.914182 + -0.283922 0.635585 -3.63123 -0.261182 0.578932 -0.772413 + -0.259892 0.694038 -3.59787 -0.188098 0.563649 -0.804313 + -0.241737 0.759039 -3.54806 -0.0548734 0.61744 -0.784702 + -0.295792 0.585203 -3.66637 -0.295008 0.573145 -0.76451 + -0.378347 0.579463 -3.63662 -0.327201 0.538748 -0.776331 + -0.366271 0.635173 -3.60391 -0.301963 0.546706 -0.78098 + -0.294472 0.538846 -3.69987 -0.298325 0.540013 -0.787012 + -0.377027 0.533192 -3.67008 -0.343154 0.53723 -0.770473 + -0.457412 0.524364 -3.63699 -0.420185 0.50786 -0.752012 + -0.459738 0.576753 -3.60313 -0.419189 0.501755 -0.756653 + -0.447662 0.632468 -3.57043 -0.403088 0.526571 -0.748494 + -0.303257 0.483193 -3.73308 -0.296881 0.543916 -0.784868 + -0.38935 0.471242 -3.70698 -0.348059 0.542941 -0.764245 + -0.469735 0.4625 -3.67384 -0.424179 0.519869 -0.741491 + -0.541235 0.456002 -3.63058 -0.514318 0.520291 -0.681743 + -0.535185 0.51466 -3.59158 -0.538157 0.473573 -0.69722 + -0.414155 0.406132 -3.74521 -0.373511 0.500378 -0.781097 + -0.494659 0.378376 -3.71793 -0.454684 0.466169 -0.758913 + -0.566159 0.371876 -3.67467 -0.519093 0.44633 -0.728925 + -0.511684 0.308967 -3.74531 -0.460029 0.306354 -0.833379 + -0.592165 0.301591 -3.69274 -0.579007 0.31238 -0.753107 + -0.633226 0.392851 -3.6094 -0.550613 0.490718 -0.675294 + -0.614285 0.445155 -3.57279 -0.535048 0.557665 -0.634612 + -0.608234 0.503811 -3.53379 -0.554614 0.460293 -0.693205 + -0.61191 0.245383 -3.69618 -0.617183 0.164426 -0.769447 + -0.68066 0.232892 -3.63234 -0.674761 0.159253 -0.72065 + -0.659232 0.322565 -3.62746 -0.629497 0.306615 -0.713947 + -0.724942 0.323717 -3.56626 -0.645886 0.269511 -0.71428 + -0.705186 0.397941 -3.55022 -0.566836 0.471824 -0.675336 + -0.636826 0.183152 -3.68219 -0.592698 -0.0935264 -0.799976 + -0.705576 0.170573 -3.61841 -0.679548 0.0578139 -0.731349 + -0.779496 0.166131 -3.55111 -0.676408 0.052661 -0.734642 + -0.74637 0.233952 -3.57118 -0.669501 0.156098 -0.726224 + -0.747388 0.126032 -3.58026 -0.631936 -0.219128 -0.743397 + -0.821308 0.121588 -3.51296 -0.685282 -0.159372 -0.710626 + -0.891356 0.117655 -3.44035 -0.715784 -0.185291 -0.673291 + -0.850268 0.164728 -3.48668 -0.701302 0.0115068 -0.712771 + -0.817142 0.232554 -3.50676 -0.680946 0.157225 -0.715257 + -0.763098 0.087575 -3.54565 -0.543683 -0.518915 -0.659648 + -0.834658 0.079343 -3.47739 -0.586614 -0.506409 -0.632008 + -0.904706 0.07541 -3.40478 -0.65785 -0.463285 -0.593802 + -0.966542 0.072591 -3.32869 -0.691116 -0.479752 -0.540552 + -0.957584 0.120966 -3.36748 -0.768471 -0.136347 -0.62519 + -0.82087 0.04374 -3.44972 -0.448737 -0.722323 -0.526198 + -0.887214 0.033712 -3.37595 -0.504798 -0.713993 -0.485173 + -0.94905 0.030974 -3.29981 -0.569094 -0.712661 -0.410178 + -0.798552 0.018302 -3.42467 -0.296489 -0.871084 -0.391543 + -0.864896 0.00827 -3.35089 -0.308312 -0.89423 -0.324494 + -0.925134 0.007858 -3.27797 -0.362021 -0.900442 -0.241133 + -1.0044 0.03507 -3.21691 -0.558394 -0.753938 -0.346083 + -0.835807 -0.002219 -3.32752 0.0706723 -0.997497 -0.00213926 + -0.896045 -0.00263 -3.25461 0.0113316 -0.996675 0.0806855 + -0.963489 0.009705 -3.17978 0.0460634 -0.990561 0.129104 + -0.980483 0.012045 -3.19503 -0.323737 -0.931545 -0.165586 + -0.804855 0.020423 -3.27734 0.400169 -0.864293 0.304734 + -0.863391 0.02385 -3.19867 0.341767 -0.865227 0.366849 + -0.930835 0.036187 -3.12384 0.332217 -0.895097 0.297376 + -1.02345 0.014294 -3.08632 0.11366 -0.991258 0.0669937 + -1.04045 0.016546 -3.10162 -0.330771 -0.929967 -0.160475 + -0.763432 0.084119 -3.20166 0.576011 -0.679436 0.454508 + -0.821968 0.087465 -3.12306 0.556768 -0.713211 0.425839 + -0.874487 0.089583 -3.03133 0.574691 -0.741456 0.346371 + -0.932695 0.086978 -2.94961 0.555391 -0.769562 0.315143 + -0.989043 0.03358 -3.04213 0.366423 -0.907486 0.205433 + -0.725157 0.217773 -3.10556 0.71214 -0.4788 0.513427 + -0.772757 0.219313 -3.03282 0.74329 -0.482304 0.463577 + -0.825276 0.221345 -2.94114 0.779225 -0.477597 0.405844 + -0.873382 0.196486 -2.86869 0.752954 -0.532971 0.386008 + -0.729778 0.44592 -2.91952 0.833864 -0.316914 0.451926 + -0.771455 0.415147 -2.84922 0.852014 -0.346097 0.392797 + -0.819561 0.390287 -2.77676 0.854515 -0.378972 0.355225 + -0.701812 0.617653 -2.86977 0.818919 -0.148005 0.554496 + -0.743489 0.586878 -2.79947 0.899891 -0.122892 0.418443 + -0.779279 0.535043 -2.72769 0.92705 -0.224895 0.300002 + -0.860866 0.33565 -2.72173 0.835946 -0.441921 0.325424 + -0.696197 0.756447 -2.86997 0.788908 0.0101232 0.614427 + -0.736259 0.710197 -2.81106 0.870703 -0.0053864 0.49178 + -0.772049 0.658362 -2.73928 0.950574 -0.0242424 0.309549 + -0.792939 0.560906 -2.64128 0.945914 -0.168161 0.277431 + -0.820584 0.480402 -2.67264 0.901959 -0.363881 0.23251 + -0.691375 0.908283 -2.88575 0.764759 0.0617762 0.641348 + -0.731438 0.862037 -2.82686 0.863204 0.0356039 0.503599 + -0.76395 0.810468 -2.75313 0.937546 0.0290762 0.346643 + -0.686176 1.06194 -2.9165 0.78134 0.0960812 0.616665 + -0.725744 1.0435 -2.85377 0.869827 0.0488439 0.490933 + -0.758256 0.991941 -2.78005 0.905073 0.0472874 0.422619 + -0.787588 0.970479 -2.71248 0.919307 0.063206 0.388433 + -0.78484 0.713096 -2.65508 0.956327 0.0252929 0.291203 + -0.647704 1.1838 -2.99096 0.730735 0.247443 0.636238 + -0.686414 1.1672 -2.92421 0.862902 0.0838233 0.498371 + -0.725982 1.14876 -2.86148 0.882645 -0.0251462 0.469367 + -0.746306 1.13431 -2.82284 0.889112 -0.0362587 0.456251 + -0.76236 1.12166 -2.79273 0.897618 -0.0208858 0.440279 + -0.619839 1.24072 -3.04455 0.693616 0.2983 0.655679 + -0.664021 1.23222 -2.99483 0.72792 0.289704 0.621453 + -0.692099 1.2342 -2.95767 0.857161 0.331456 0.394224 + -0.675783 1.18578 -2.9538 0.816407 0.320006 0.480704 + -0.708607 1.21854 -2.89153 0.884636 0.108438 0.453498 + -0.595678 1.25431 -3.07789 0.74964 0.353486 0.559542 + -0.635705 1.28287 -3.04436 0.731787 0.285136 0.619019 + -0.679887 1.27437 -2.99464 0.74163 0.19584 0.641586 + -0.70025 1.26598 -2.9665 0.839518 0.242642 0.486143 + -0.704011 1.26531 -2.95615 0.936856 0.249922 0.244623 + -0.695861 1.23354 -2.94732 0.935366 0.302221 0.18372 + -0.582981 1.25574 -3.09956 0.671599 0.364336 0.645146 + -0.597425 1.28722 -3.0997 0.742004 0.376349 0.55479 + -0.610123 1.2858 -3.07803 0.766642 0.342624 0.543017 + -0.646453 1.31519 -3.04893 0.709055 0.458261 0.535946 + -0.6901 1.32223 -2.99213 0.70561 0.434965 0.559392 + -0.550057 1.24921 -3.12147 0.486541 0.372525 0.790255 + -0.596822 1.29737 -3.10788 0.671906 0.327617 0.664235 + -0.620871 1.31811 -3.08259 0.754948 0.366346 0.543915 + -0.529577 1.30636 -3.14945 0.480931 0.214275 0.850171 + -0.571472 1.29953 -3.12542 0.496228 0.240126 0.834324 + -0.622424 1.35607 -3.10695 0.496206 0.448015 0.743681 + -0.620268 1.32826 -3.09078 0.698394 0.445526 0.560137 + -0.477071 1.2723 -3.17425 0.588087 0.245457 0.770652 + -0.484212 1.31017 -3.17625 0.574634 0.175209 0.799436 + -0.540517 1.34949 -3.15255 0.452004 0.340472 0.824482 + -0.597073 1.35823 -3.12449 0.481182 0.399079 0.780513 + -0.495152 1.35338 -3.17929 0.417314 0.402569 0.814732 + -0.570031 1.37209 -3.15169 0.326319 0.76413 0.556436 + -0.626587 1.38075 -3.12369 0.149002 0.981322 0.121681 + -0.644495 1.37625 -3.1081 -0.00598481 0.829881 0.557908 + -0.642339 1.34843 -3.09192 0.327896 0.663587 0.672411 + -0.452528 1.35984 -3.19848 0.447026 0.208104 0.869977 + -0.458403 1.38412 -3.21673 0.0612236 0.828206 0.557069 + -0.501026 1.37766 -3.19754 0.156714 0.805843 0.571014 + -0.535893 1.3848 -3.19771 0.279328 0.862153 0.422691 + -0.57182 1.37949 -3.16631 0.24394 0.854031 0.459483 + -0.437333 1.39596 -3.23444 -0.0313357 0.815458 0.577967 + -0.486669 1.39281 -3.26778 -0.00487984 0.951158 0.308667 + -0.521536 1.39995 -3.26795 0.105452 0.987283 0.118962 + -0.597879 1.41285 -3.21729 0.0989004 0.983156 0.153695 + -0.633806 1.40745 -3.18594 0.0527407 0.941863 0.331833 + -0.416597 1.42487 -3.26851 -0.130774 0.790754 0.598002 + -0.4656 1.40456 -3.28554 -0.464568 0.870663 0.161624 + -0.455866 1.41022 -3.31814 -0.231533 0.963696 0.132973 + -0.541909 1.39688 -3.30343 -0.104008 0.971629 -0.212412 + -0.403292 1.43617 -3.27808 0.126301 0.67881 0.723371 + -0.452295 1.41595 -3.29506 -0.375708 0.925981 -0.037452 + -0.383586 1.41509 -3.28317 0.59724 0.801426 -0.0319518 + -0.387157 1.40937 -3.30626 0.172799 0.967918 0.182413 + -0.403292 1.43617 -3.27808 0.162657 0.372724 -0.913575 + -0.329689 1.40261 -3.30316 0.051933 0.813752 0.578887 + -0.351495 1.41275 -3.32132 0.148803 0.913498 0.378656 + -0.418215 1.43963 -3.35968 -0.121709 0.945761 0.301203 + -0.294955 1.40256 -3.30208 0.0990731 0.800527 0.591051 + -0.291361 1.41354 -3.36028 0.0241639 0.962897 0.268787 + -0.313167 1.42367 -3.37844 0.166527 0.962278 0.215151 + -0.382552 1.44302 -3.37474 0.0783278 0.982132 0.17112 + -0.437666 1.43887 -3.38337 -0.365385 0.916094 -0.165124 + -0.268469 1.40904 -3.31769 0.178235 0.829284 0.529641 + -0.264876 1.42001 -3.37589 -0.255714 0.965837 0.0420664 + -0.316495 1.42576 -3.40805 0.129876 0.970776 -0.201809 + -0.273723 1.41652 -3.42925 -0.187884 0.911902 -0.364877 + -0.29845 1.41438 -3.42715 -0.0248339 0.910229 -0.41336 + -0.364593 1.42073 -3.44055 0.0226781 0.850136 -0.526074 + -0.38588 1.4451 -3.40435 -0.101595 0.975382 -0.195727 + -0.431022 1.42252 -3.41704 -0.385412 0.76951 -0.509227 + -0.289247 1.40217 -3.48199 -0.142651 0.89036 -0.432332 + -0.313974 1.40012 -3.47984 -0.0724862 0.889387 -0.451372 + -0.346548 1.40927 -3.45969 -0.0084214 0.878237 -0.478152 + -0.389518 1.40048 -3.46206 -0.273068 0.69308 -0.667139 + -0.410805 1.42493 -3.42582 -0.274452 0.761445 -0.587262 + -0.247715 1.39909 -3.49465 0.0476116 0.667443 -0.743138 + -0.288758 1.38388 -3.50732 -0.0524574 0.654239 -0.754467 + -0.330949 1.38218 -3.50197 -0.181435 0.671538 -0.718414 + -0.363523 1.39142 -3.48178 -0.246849 0.696206 -0.674064 + -0.254924 1.35791 -3.51993 0.146615 0.337262 -0.929924 + -0.294682 1.3632 -3.5197 -0.046744 0.372108 -0.927012 + -0.336873 1.3615 -3.51435 -0.220808 0.39067 -0.893656 + -0.375563 1.35026 -3.50649 -0.380891 0.350707 -0.855527 + -0.401558 1.3594 -3.48672 -0.370166 0.45785 -0.808301 + -0.231255 1.30733 -3.52613 0.326247 0.168402 -0.930163 + -0.265471 1.30618 -3.52993 0.0573695 0.104924 -0.992824 + -0.305229 1.31147 -3.52969 -0.0866864 0.114666 -0.989615 + -0.345791 1.30755 -3.52291 -0.20309 0.107999 -0.973186 + -0.384481 1.29631 -3.51505 -0.291074 0.0906114 -0.9524 + -0.205632 1.25386 -3.52612 -0.00186938 0.03479 -0.999393 + -0.240561 1.23784 -3.52937 0.121702 -0.0731405 -0.989868 + -0.274776 1.23669 -3.53318 0.0149927 -0.0686066 -0.997531 + -0.314001 1.23121 -3.52948 -0.11862 -0.0827736 -0.989483 + -0.354563 1.22729 -3.52269 -0.238059 -0.0971919 -0.966376 + -0.18277 1.27427 -3.52447 -0.27771 0.213127 -0.936725 + -0.158514 1.25436 -3.53517 -0.294021 -0.0103963 -0.955742 + -0.202594 1.15117 -3.50946 0.0477741 -0.219127 -0.974526 + -0.237523 1.13524 -3.51266 0.155527 -0.159038 -0.974945 + -0.271166 1.09805 -3.51044 -0.205029 -0.157363 -0.966023 + -0.122829 1.2337 -3.54739 -0.151469 -0.0569415 -0.986821 + -0.138765 1.12834 -3.52391 -0.303527 -0.224051 -0.926106 + -0.17445 1.14901 -3.5117 -0.255493 -0.237549 -0.937173 + -0.199758 0.994971 -3.4561 0.305179 -0.173767 -0.936307 + -0.224297 0.9899 -3.47912 0.536828 -0.146619 -0.830854 + -0.066486 1.28184 -3.53957 0.297325 0.0274514 -0.954382 + -0.094034 1.21797 -3.54555 0.197254 -0.128294 -0.971922 + -0.10167 1.11635 -3.52693 0.159304 -0.252449 -0.954406 + -0.153727 0.971674 -3.47695 -0.428914 -0.00879569 -0.903303 + -0.171614 0.99271 -3.45839 -0.439955 -0.101958 -0.892213 + -0.051677 1.3072 -3.53271 0.431915 0.117217 -0.894265 + -0.049252 1.23504 -3.52672 0.467704 -0.10956 -0.877069 + -0.056889 1.13333 -3.50816 0.306545 -0.195787 -0.931503 + -0.116632 0.959679 -3.47998 -0.0723335 -0.0508205 -0.996085 + -0.170744 0.837161 -3.49297 -0.0807517 0.532283 -0.842706 + -0.035173 1.31697 -3.51802 0.570229 0.154511 -0.806824 + -0.034443 1.26032 -3.51991 0.518682 -0.0327048 -0.854341 + -0.024385 1.12445 -3.49976 0.0705888 -0.125775 -0.989544 + -0.067554 0.954492 -3.48559 0.0622058 -0.0461901 -0.996994 + -0.021855 1.31235 -3.51002 0.535864 0.139557 -0.83269 + -0.021125 1.2557 -3.5119 0.249718 -0.0230944 -0.968043 + -0.010165 1.11387 -3.50005 -0.035103 -0.135426 -0.990165 + -0.006905 1.3221 -3.49751 0.288907 0.219125 -0.931943 + -0.006905 1.24513 -3.51219 -0.00634015 0.00313263 -0.999975 + 0.006906 1.24504 -3.51223 0.0128487 0.0201976 -0.999713 + 0.010163 1.11387 -3.50005 0.0763811 -0.167599 -0.982892 + 0.021126 1.2557 -3.51189 -0.318241 0.0319158 -0.947472 + 0.024383 1.12445 -3.49976 -0.0754617 -0.140816 -0.987156 + 0.021855 1.31234 -3.51001 -0.570926 0.103883 -0.814403 + 0.034419 1.26032 -3.5199 -0.517014 -0.0240446 -0.855639 + 0.035149 1.31696 -3.51801 -0.570615 0.154536 -0.806546 + -0.697976 1.23713 -2.92113 0.938193 0.224392 0.263518 + -0.719127 1.26344 -2.8867 0.833935 0.245431 0.494284 + -0.723957 1.18398 -2.85369 0.91868 -0.0162691 0.394666 + -0.744281 1.16962 -2.81501 0.892174 -0.0710925 0.446063 + -0.710942 1.28047 -2.91621 0.941252 0.24797 0.229252 + -0.722284 1.30336 -2.90405 0.83628 0.292019 0.46407 + -0.740454 1.32251 -2.89142 0.720709 0.416755 0.55398 + -0.734477 1.22897 -2.84881 0.874796 0.188329 0.446391 + -0.750635 1.19613 -2.80312 0.875663 0.0328588 0.481803 + -0.708827 1.27688 -2.94239 0.967793 0.222699 0.117393 + -0.723505 1.34021 -2.93208 0.833721 0.548095 -0.0670915 + -0.734848 1.36318 -2.91986 0.56904 0.816208 -0.0999884 + -0.743611 1.36243 -2.90876 0.304418 0.772023 0.557952 + -0.710462 1.31384 -2.964 0.897196 0.00296292 0.441624 + -0.715278 1.32541 -2.95025 0.874164 0.40786 0.263606 + -0.73922 1.34428 -2.94413 0.14817 0.94997 -0.274959 + -0.747447 1.35908 -2.92595 -0.241704 0.710506 -0.660878 + -0.753688 1.36208 -2.91735 -0.384206 0.846995 -0.367404 + -0.752272 1.34314 -2.95816 0.0644246 0.97649 0.205708 + -0.800368 1.32232 -2.8981 -0.339659 0.877823 -0.337725 + -0.806609 1.32532 -2.88949 -0.660117 0.706291 0.255732 + -0.762452 1.36133 -2.90626 -0.346835 0.906606 0.240358 + -0.730388 1.35412 -2.99916 0.288946 0.894964 0.339927 + -0.799767 1.35538 -2.98155 -0.107673 0.953461 0.281634 + -0.81342 1.32127 -2.91208 -0.219553 0.93154 0.289879 + -0.806973 1.30427 -2.86942 -0.426794 0.67748 0.599056 + -0.762816 1.34027 -2.88619 0.14582 0.670579 0.727365 + -0.700092 1.3477 -3.01025 0.447027 0.793116 0.413684 + -0.725677 1.3651 -3.07618 0.109228 0.985576 0.129264 + -0.777884 1.36636 -3.02257 -0.0277869 0.987041 0.158041 + -0.846376 1.34513 -3.0218 -0.451253 0.88407 -0.12162 + -0.836724 1.34868 -2.98676 -0.296305 0.940721 0.165069 + -0.656446 1.34066 -3.06706 0.487509 0.768067 0.41522 + -0.695381 1.35868 -3.08727 0.301383 0.889776 0.342734 + -0.665156 1.37845 -3.1423 0.0397632 0.884147 0.465514 + -0.748238 1.36493 -3.10089 -0.118587 0.99198 -0.0437333 + -0.800445 1.36619 -3.04728 -0.235835 0.97156 0.0212905 + -0.681275 1.36646 -3.11215 0.446156 0.694746 0.564156 + -0.663367 1.37105 -3.12769 -0.0320323 0.975216 0.218923 + -0.66935 1.40969 -3.19342 -0.176412 0.978892 0.103199 + -0.7007 1.3806 -3.14983 -0.21487 0.863985 0.45537 + -0.750069 1.36172 -3.13333 -0.201581 0.979425 0.00952228 + -0.820562 1.35346 -3.09763 -0.330672 0.939886 -0.0852659 + -0.661605 1.4 -3.24124 -0.310781 0.908952 -0.277889 + -0.714155 1.38846 -3.19644 -0.406761 0.91352 0.00523802 + -0.743885 1.37593 -3.19654 -0.373163 0.926866 -0.040853 + -0.73043 1.36816 -3.14988 -0.344936 0.934734 0.0853891 + -0.618252 1.40969 -3.25282 -0.145747 0.969107 -0.198969 + -0.66065 1.36268 -3.328 -0.51932 0.766937 -0.376981 + -0.695535 1.34931 -3.28524 -0.665785 0.556929 -0.496548 + -0.70641 1.37868 -3.24431 -0.449078 0.762527 -0.465705 + -0.617297 1.37237 -3.33958 -0.229767 0.915119 -0.331306 + -0.601612 1.36411 -3.37827 -0.321734 0.901716 -0.288782 + -0.619326 1.34505 -3.40407 -0.490089 0.726922 -0.481037 + -0.657254 1.34065 -3.37004 -0.592836 0.667174 -0.451025 + -0.526224 1.38862 -3.34212 -0.238401 0.955782 -0.172177 + -0.555248 1.37678 -3.40721 -0.334303 0.913785 -0.230734 + -0.572962 1.35764 -3.43306 -0.415488 0.680636 -0.603411 + -0.63008 1.32452 -3.4159 -0.607219 0.215558 -0.764735 + -0.668008 1.3202 -3.38182 -0.737567 0.274932 -0.616772 + -0.475318 1.40955 -3.34178 -0.449008 0.8872 0.106145 + -0.497237 1.3962 -3.34946 -0.358989 0.89945 -0.249232 + -0.526261 1.38436 -3.41455 -0.235587 0.923559 -0.302551 + -0.528327 1.36562 -3.44609 -0.187363 0.686163 -0.702905 + -0.569567 1.32693 -3.45287 -0.422742 0.138622 -0.895585 + -0.463834 1.40797 -3.39984 -0.534547 0.785011 -0.313077 + -0.485753 1.39471 -3.40748 -0.31293 0.898748 -0.307128 + -0.487819 1.37588 -3.43906 -0.155624 0.718995 -0.677368 + -0.524932 1.33491 -3.4659 -0.141916 0.236938 -0.961104 + -0.457189 1.39153 -3.43356 -0.280674 0.68233 -0.675017 + -0.490004 1.34003 -3.46416 -0.0970424 0.330048 -0.938963 + -0.48183 1.26982 -3.45996 -0.27983 0.00130047 -0.960049 + -0.516758 1.26462 -3.46175 -0.229068 -0.185606 -0.955551 + -0.570524 1.25675 -3.43512 -0.435926 -0.298686 -0.848973 + -0.459374 1.35568 -3.45866 -0.287349 0.491665 -0.822007 + -0.459392 1.30386 -3.48052 -0.447396 0.0878286 -0.890013 + -0.462321 1.20627 -3.47089 -0.551825 -0.213002 -0.8063 + -0.440392 1.36678 -3.4643 -0.456044 0.517094 -0.724319 + -0.44041 1.31497 -3.48615 -0.461842 0.199007 -0.864348 + -0.439884 1.24031 -3.49145 -0.443041 -0.115054 -0.889088 + -0.451774 1.11419 -3.4558 -0.631497 -0.21112 -0.746083 + -0.500992 1.14196 -3.4007 -0.551265 -0.324636 -0.768582 + -0.420175 1.36919 -3.47308 -0.368042 0.526619 -0.766301 + -0.428884 1.32362 -3.49154 -0.495725 0.268344 -0.825983 + -0.428357 1.24896 -3.49682 -0.418738 -0.0476719 -0.906855 + -0.410267 1.31374 -3.50523 -0.347302 0.223187 -0.910807 + -0.402571 1.23154 -3.50665 -0.378505 -0.11856 -0.917975 + -0.365196 1.11911 -3.49652 -0.303239 -0.238381 -0.922616 + -0.413205 1.12335 -3.48047 -0.415682 -0.21607 -0.883472 + -0.453942 0.960764 -3.40646 -0.344691 0.00182879 -0.938714 + -0.490445 1.04989 -3.38562 -0.596686 -0.127539 -0.792275 + -0.328109 1.12278 -3.50867 -0.162214 -0.24417 -0.956069 + -0.377773 0.969135 -3.44696 -0.338157 -0.164971 -0.926517 + -0.415372 0.969923 -3.43112 -0.444899 -0.164805 -0.880286 + -0.288884 1.12826 -3.51238 -0.135813 -0.201475 -0.970032 + -0.340686 0.972809 -3.45912 -0.334685 -0.119372 -0.934738 + -0.388887 0.865204 -3.43674 -0.435817 0.248918 -0.86493 + -0.426486 0.865992 -3.42091 -0.311655 0.264027 -0.912776 + -0.321534 0.967345 -3.46626 -0.274533 -0.103264 -0.956017 + -0.341429 0.834182 -3.47141 -0.223318 0.416186 -0.88143 + -0.360581 0.839731 -3.46422 -0.345501 0.373164 -0.861033 + -0.429634 0.78645 -3.47633 -0.288984 0.544585 -0.787347 + -0.303815 0.937131 -3.46432 -0.207943 -0.0169981 -0.977993 + -0.308784 0.856679 -3.46998 -0.308517 0.272904 -0.91123 + -0.32412 0.755671 -3.53462 -0.325248 0.548037 -0.770629 + -0.401328 0.760889 -3.50386 -0.310948 0.529622 -0.789184 + -0.452223 0.777477 -3.47419 -0.383998 0.440329 -0.811576 + -0.27389 0.947205 -3.48017 -0.34731 -0.0545515 -0.936162 + -0.278858 0.866753 -3.48582 -0.432233 0.310528 -0.846609 + -0.291475 0.778083 -3.53324 -0.519863 0.734893 -0.435517 + -0.276334 0.788484 -3.53466 -0.0196673 0.522402 -0.852472 + -0.342242 0.693626 -3.57056 -0.287546 0.537936 -0.792428 + -0.255729 1.10274 -3.51457 0.00763824 -0.0249272 -0.99966 + -0.258453 0.951896 -3.4843 -0.000998641 -0.0796473 -0.996822 + -0.263717 0.877155 -3.48724 -0.0774602 0.265318 -0.961044 + -0.242504 0.9574 -3.48103 0.170447 -0.0531088 -0.983935 + -0.247767 0.882745 -3.48392 0.282547 0.164616 -0.945023 + -0.234171 0.879942 -3.47827 0.561333 0.116954 -0.819285 + -0.262738 0.785681 -3.529 0.260835 0.509604 -0.81992 + -0.209632 0.884925 -3.4553 0.123735 0.201055 -0.971734 + -0.188632 0.858195 -3.4744 -0.3209 0.421017 -0.848391 + -0.127806 0.850848 -3.48568 0.0012032 0.334229 -0.942491 + -0.419449 0.698937 -3.53976 -0.361202 0.517912 -0.775435 + -0.485231 0.752929 -3.46748 -0.501751 0.414547 -0.759208 + -0.526323 0.622523 -3.52641 -0.529495 0.513142 -0.675514 + -0.498111 0.688905 -3.49578 -0.531749 0.480195 -0.697607 + -0.537511 0.56696 -3.55777 -0.542696 0.466241 -0.698642 + -0.608552 0.602889 -3.4668 -0.526246 0.514464 -0.677046 + -0.57491 0.667283 -3.44113 -0.5409 0.481648 -0.689523 + -0.56203 0.731222 -3.41288 -0.536445 0.315892 -0.782585 + -0.619739 0.547326 -3.49816 -0.532272 0.470982 -0.703464 + -0.700775 0.548705 -3.44335 -0.414279 0.487641 -0.768491 + -0.685445 0.59546 -3.42053 -0.393888 0.506739 -0.766856 + -0.651803 0.659947 -3.39483 -0.426033 0.449402 -0.785197 + -0.626387 0.724717 -3.37901 -0.44313 0.29615 -0.846127 + -0.68927 0.50519 -3.47898 -0.458667 0.470756 -0.753667 + -0.763342 0.514662 -3.43259 -0.498172 0.412364 -0.762746 + -0.784905 0.576636 -3.39353 -0.510376 0.394981 -0.763876 + -0.769575 0.623479 -3.37066 -0.42582 0.615554 -0.663152 + -0.686245 0.450249 -3.51362 -0.488393 0.515967 -0.70374 + -0.760317 0.459718 -3.46722 -0.509769 0.409101 -0.756817 + -0.826931 0.46533 -3.40914 -0.606798 0.386306 -0.694668 + -0.817946 0.523864 -3.37972 -0.627834 0.33238 -0.703809 + -0.769751 0.39896 -3.49018 -0.594744 0.365778 -0.715882 + -0.836365 0.404575 -3.43211 -0.636286 0.305727 -0.708288 + -0.899257 0.399787 -3.37301 -0.668785 0.284345 -0.686931 + -0.885243 0.483021 -3.34798 -0.627994 0.376449 -0.681109 + -0.876258 0.541468 -3.31861 -0.653415 0.557851 -0.511715 + -0.789506 0.324651 -3.50627 -0.662559 0.263873 -0.70099 + -0.85367 0.326434 -3.44337 -0.675102 0.23173 -0.700385 + -0.916562 0.321651 -3.38428 -0.689992 0.189181 -0.698657 + -0.980646 0.325053 -3.31757 -0.699639 0.188527 -0.689175 + -0.957952 0.406999 -3.31211 -0.677412 0.277269 -0.681347 + -0.881306 0.234342 -3.44386 -0.710566 0.136038 -0.690355 + -0.944432 0.24971 -3.37027 -0.72634 0.120221 -0.67674 + -1.00852 0.253025 -3.30362 -0.721009 0.0577907 -0.690512 + -0.916497 0.168037 -3.41381 -0.744195 0.042118 -0.666633 + -0.979623 0.183405 -3.34023 -0.761718 0.0222245 -0.647528 + -1.04184 0.18854 -3.26613 -0.74849 -0.043733 -0.661703 + -1.07433 0.25742 -3.23383 -0.72919 0.0423298 -0.683 + -1.0167 0.11971 -3.28931 -0.771749 -0.198337 -0.604207 + -1.07892 0.124845 -3.2152 -0.749588 -0.288555 -0.595697 + -1.14271 0.132217 -3.13657 -0.759696 -0.318452 -0.566966 + -1.10765 0.192935 -3.19634 -0.761872 -0.0869551 -0.641865 + -1.02566 0.071333 -3.25052 -0.707459 -0.51346 -0.485655 + -1.08511 0.074678 -3.15911 -0.663352 -0.609216 -0.434534 + -1.14891 0.082051 -3.08048 -0.646054 -0.652184 -0.396573 + -1.20362 0.082894 -2.98534 -0.615211 -0.704137 -0.354551 + -1.20577 0.134949 -3.0531 -0.808709 -0.308618 -0.500744 + -1.06385 0.038414 -3.1255 -0.583036 -0.756388 -0.296557 + -1.11726 0.04216 -3.01339 -0.5059 -0.822782 -0.259027 + -1.17198 0.043004 -2.91825 -0.455321 -0.845817 -0.277984 + -1.09386 0.020379 -2.98946 -0.5307 -0.808432 -0.25455 + -1.14672 0.019074 -2.8854 -0.487059 -0.830987 -0.268763 + -1.21938 0.0345 -2.82152 -0.489515 -0.830114 -0.266994 + -1.26054 0.08085 -2.8788 -0.659247 -0.674555 -0.33222 + -1.2627 0.132817 -2.94661 -0.781702 -0.435847 -0.446071 + -1.08255 0.010615 -2.98355 -0.120284 -0.990917 -0.0601254 + -1.13542 0.009312 -2.87949 -0.137101 -0.988634 -0.0616938 + -1.18458 0.012616 -2.77921 0.214938 -0.971133 0.103456 + -1.19413 0.010571 -2.78867 -0.162578 -0.980218 -0.112874 + -1.04814 0.029898 -2.93935 0.37529 -0.911531 0.168135 + -1.10234 0.025305 -2.8486 0.341399 -0.922831 0.178407 + -1.15151 0.028616 -2.74833 0.34072 -0.918739 0.199571 + -1.23162 0.013941 -2.67851 0.243915 -0.95739 0.154625 + -1.24117 0.011804 -2.68801 -0.19652 -0.978881 -0.0563109 + -0.989415 0.068168 -2.87763 0.550681 -0.795727 0.252129 + -1.04361 0.063489 -2.78693 0.509476 -0.811212 0.287 + -1.09489 0.063421 -2.70421 0.499826 -0.813227 0.298052 + -1.14295 0.067705 -2.61003 0.499514 -0.812636 0.300181 + -1.19957 0.032899 -2.65415 0.371172 -0.901168 0.223891 + -0.930102 0.177676 -2.79671 0.731444 -0.573901 0.368276 + -0.980336 0.150298 -2.72969 0.700095 -0.612051 0.367777 + -1.03161 0.150143 -2.64702 0.672089 -0.633023 0.384159 + -1.08132 0.139613 -2.57138 0.664147 -0.647134 0.374336 + -0.9111 0.308272 -2.65471 0.77121 -0.526868 0.357275 + -0.963799 0.270777 -2.59536 0.745057 -0.560169 0.36208 + -1.01351 0.260159 -2.51977 0.696839 -0.611076 0.375501 + -0.858011 0.415583 -2.60577 0.85481 -0.461343 0.23762 + -0.910711 0.378083 -2.54642 0.76891 -0.587098 0.253167 + -0.952577 0.345927 -2.47973 0.71597 -0.65084 0.252577 + -1.06529 0.244662 -2.44953 0.694772 -0.608019 0.384192 + -0.830366 0.496 -2.57446 0.92631 -0.230387 0.298113 + -0.862898 0.442151 -2.51599 0.873814 -0.374449 0.31022 + -0.904765 0.409989 -2.44929 0.864552 -0.436537 0.248969 + -0.931244 0.390993 -2.37538 0.785399 -0.527753 0.323458 + -1.00436 0.330429 -2.40948 0.608251 -0.720988 0.331974 + -0.810958 0.671494 -2.58463 0.899464 0.0199178 0.436541 + -0.84349 0.617564 -2.52622 0.915709 -0.0203555 0.401326 + -0.868595 0.581615 -2.45815 0.940753 -0.0604942 0.333654 + -0.813706 0.928877 -2.64202 0.925978 0.0806582 0.368861 + -0.837125 0.904849 -2.57321 0.928137 0.0676635 0.366038 + -0.862229 0.8689 -2.50514 0.946262 0.0429775 0.320532 + -0.881028 0.844101 -2.43539 0.957894 0.0304208 0.285505 + -0.895074 0.562532 -2.3843 0.948378 -0.0950314 0.30257 + -0.791692 1.10011 -2.72521 0.906639 0.0671882 0.416523 + -0.80848 1.09317 -2.68379 0.933675 0.0740411 0.350385 + -0.819086 1.07003 -2.65352 0.941812 0.0150642 0.335802 + -0.842504 1.04609 -2.58464 0.909114 0.0981918 0.404809 + -0.863389 1.02916 -2.52893 0.915619 0.173593 0.36264 + -0.776795 1.14418 -2.75435 0.878355 0.0212247 0.477538 + -0.798085 1.14211 -2.72175 0.869721 0.108442 0.481483 + -0.814873 1.13508 -2.68038 0.920951 0.169147 0.351054 + -0.82413 1.10525 -2.63251 0.941899 0.0956513 0.321988 + -0.834735 1.08211 -2.60224 0.910544 0.00363815 0.413396 + -0.76074 1.15692 -2.78442 0.883719 -0.0639152 0.463633 + -0.788046 1.17924 -2.74286 0.817161 0.141228 0.55884 + -0.809336 1.17707 -2.71031 0.852518 0.198846 0.483398 + -0.824851 1.16142 -2.6706 0.891979 0.243592 0.380837 + -0.767094 1.18343 -2.77253 0.833324 0.082408 0.546607 + -0.802728 1.21624 -2.73615 0.70089 0.437004 0.56372 + -0.819528 1.20909 -2.70976 0.66716 0.513197 0.539931 + -0.835043 1.19344 -2.67006 0.747953 0.495711 0.441404 + -0.781776 1.22044 -2.76582 0.704393 0.400478 0.586044 + -0.812288 1.24475 -2.75953 0.424592 0.774234 0.469343 + -0.829088 1.2376 -2.73315 0.362487 0.775994 0.516175 + -0.878192 1.2283 -2.69584 0.188865 0.89445 0.405327 + -0.862039 1.21597 -2.67048 0.353578 0.860882 0.365876 + -0.750632 1.22266 -2.79948 0.803947 0.203722 0.558718 + -0.765252 1.25011 -2.81322 0.381514 0.700577 0.603025 + -0.796396 1.24789 -2.77957 0.4494 0.75685 0.474572 + -0.831281 1.27798 -2.82269 0.235721 0.879753 0.412881 + -0.740139 1.2274 -2.83489 0.949084 0.061087 0.309042 + -0.740136 1.25394 -2.83125 0.856419 0.333671 0.393968 + -0.756836 1.27327 -2.83993 0.164245 0.643231 0.747848 + -0.815389 1.28112 -2.84272 0.244358 0.818869 0.519368 + -0.746116 1.32094 -2.8775 0.628467 0.519046 0.579328 + -0.858062 1.28346 -2.82399 0.122449 0.904965 0.407486 + 1.45261 0.472207 -2.72205 0.846829 0.216699 -0.485719 + 1.47845 0.415515 -2.70086 0.8709 0.0420003 -0.489662 + 1.53616 0.331475 -2.5571 0.877718 -0.231189 -0.419718 + 1.49924 0.468028 -2.63601 0.861062 0.164256 -0.481241 + 1.52509 0.411336 -2.61482 0.889471 -0.00556116 -0.456957 + 1.57127 0.306457 -2.47256 0.896678 -0.249413 -0.365734 + 1.57454 0.233221 -2.37131 0.898987 -0.317792 -0.301381 + 1.54396 0.462983 -2.55687 0.903801 0.104927 -0.41489 + 1.56019 0.386316 -2.53028 0.914206 -0.0691379 -0.399309 + 1.60575 0.310399 -2.37859 0.922365 -0.252243 -0.292603 + 1.60902 0.237071 -2.27738 0.913262 -0.262684 -0.311367 + 1.63386 0.173251 -2.16504 0.893975 -0.285388 -0.345489 + 1.52708 0.537637 -2.57338 0.871701 0.00847439 -0.489964 + 1.5792 0.459677 -2.47515 0.908337 0.0209943 -0.417711 + 1.59543 0.383098 -2.44851 0.924195 -0.103934 -0.367507 + 1.63363 0.327312 -2.28708 0.923524 -0.232254 -0.305224 + 1.56851 0.550967 -2.50587 0.881095 -0.0502244 -0.470264 + 1.61732 0.461668 -2.39239 0.931579 -0.0370847 -0.361642 + 1.62331 0.400016 -2.35701 0.945922 -0.114288 -0.303595 + 1.66959 0.336595 -2.19856 0.89974 -0.255241 -0.354006 + 1.64677 0.245073 -2.17824 0.90529 -0.260687 -0.335399 + 1.60662 0.552958 -2.42312 0.921648 -0.0287569 -0.386961 + 1.64523 0.478729 -2.32075 0.947218 -0.0449714 -0.317419 + 1.65123 0.417072 -2.28535 0.927974 -0.115325 -0.35435 + 1.6967 0.352746 -2.14414 0.880801 -0.27371 -0.386359 + 1.68272 0.254356 -2.08972 0.891986 -0.248242 -0.377805 + 1.62548 0.694368 -2.38345 0.946686 0.0697107 -0.314524 + 1.63512 0.575662 -2.34904 0.946435 0.00129848 -0.322891 + 1.66055 0.507282 -2.271 0.942295 -0.00223324 -0.334775 + 1.67833 0.43314 -2.23098 0.918481 -0.0835185 -0.386545 + 1.60796 0.770499 -2.39911 0.885756 0.282469 -0.368303 + 1.64705 0.719534 -2.29283 0.958266 0.100971 -0.267453 + 1.65044 0.604129 -2.29935 0.953504 0.0396657 -0.298758 + 1.68726 0.517667 -2.19919 0.943339 0.0539296 -0.327419 + 1.62954 0.79567 -2.3085 0.921323 0.258183 -0.290698 + 1.66896 0.729781 -2.21098 0.966131 0.108195 -0.234274 + 1.67234 0.614464 -2.21745 0.957262 0.0796398 -0.278042 + 1.71697 0.522975 -2.10938 0.944673 0.0817996 -0.317651 + 1.70504 0.443523 -2.15917 0.939808 0.00288297 -0.34169 + 1.62358 0.866281 -2.2448 0.869465 0.372424 -0.324547 + 1.65077 0.820142 -2.21909 0.931695 0.251491 -0.262099 + 1.68803 0.731209 -2.11905 0.95566 0.14238 -0.257763 + 1.70205 0.619774 -2.12764 0.945033 0.117978 -0.304949 + 1.59304 0.919411 -2.25863 0.775834 0.500474 -0.384196 + 1.63942 0.904651 -2.16327 0.895177 0.344165 -0.283212 + 1.66984 0.821567 -2.12716 0.949787 0.213068 -0.229142 + 1.71475 0.731724 -2.02935 0.947246 0.171256 -0.270919 + 1.55387 1.00544 -2.20244 0.617275 0.669127 -0.413812 + 1.60888 0.957783 -2.17709 0.788335 0.493296 -0.367678 + 1.65644 0.92519 -2.07784 0.918725 0.29385 -0.263812 + 1.68686 0.842111 -2.04174 0.940862 0.22969 -0.249038 + 1.4908 1.0756 -2.14036 0.26001 0.889867 -0.374875 + 1.54839 1.05144 -2.14471 0.489667 0.728006 -0.479827 + 1.6034 1.00377 -2.11935 0.690615 0.596978 -0.408249 + 1.62395 1.00397 -2.08508 0.80265 0.47478 -0.361021 + 1.6628 0.974096 -1.99975 0.912035 0.303283 -0.276063 + 1.39932 1.0879 -2.16447 0.132861 0.961096 -0.242161 + 1.43855 1.1159 -2.01876 -0.0386831 0.95426 -0.296464 + 1.51379 1.12676 -2.02398 0.0638906 0.914765 -0.398903 + 1.57138 1.1026 -2.02832 0.518408 0.729382 -0.44638 + 1.59193 1.10279 -1.99405 0.673292 0.595965 -0.437611 + 1.34634 1.0895 -2.16103 0.0369523 0.987302 -0.154498 + 1.46346 1.16028 -1.89442 -0.23982 0.942984 -0.230797 + 0.988349 1.08892 -1.69963 -0.36581 0.683973 0.631161 + 1.09227 1.08996 -1.73342 0.261129 0.915849 0.305012 + 1.11248 1.07053 -1.70838 0.166592 0.90663 0.387645 + 1.09541 1.02064 -1.61357 -0.023803 0.962626 0.269788 + 1.15779 1.05545 -1.67285 -0.195693 0.924334 0.327584 + 1.09292 1.01632 -1.59089 -0.354268 0.925022 0.137218 + 1.1173 1.02629 -1.55774 -0.499264 0.859587 0.10884 + -2.0866 1.79868 -0.385969 -0.450143 0.868692 -0.206751 + -2.06612 1.79246 -0.363198 0.317015 0.945894 0.0691808 + -2.05691 1.78848 -0.509912 0.297877 0.954577 -0.00716328 + -2.08681 1.79252 -0.279496 0.39676 0.917871 0.00967817 + -2.03495 1.76178 -0.21826 0.450823 0.892131 -0.029331 + -2.01642 1.76019 -0.274707 0.646245 0.744378 0.168134 + -2.04759 1.79087 -0.419645 0.249125 0.966647 0.0594145 + -2.05691 1.78848 -0.509912 0.00397707 0.999632 -0.0268333 + -2.10728 1.79874 -0.302267 -0.224544 0.960517 -0.164277 + -2.13006 1.81445 -0.230689 -0.110625 0.941329 -0.318846 + -2.10924 1.80934 -0.206632 0.484039 0.86867 -0.105443 + -2.05739 1.77861 -0.145405 0.14963 0.942622 -0.298453 + -1.99295 1.73621 -0.301369 0.83562 0.549196 0.0110664 + -2.11821 1.78343 -0.31315 -0.843627 0.437169 -0.311732 + -2.14098 1.79923 -0.241522 -0.524124 0.721479 -0.452506 + -2.17594 1.86452 -0.096405 0.0643315 0.957873 -0.279893 + -2.15513 1.8594 -0.07235 0.32547 0.872805 -0.363703 + -2.08649 1.7566 -0.414291 -0.938982 0.156244 -0.306431 + -2.1181 1.74126 -0.341513 -0.90115 0.18041 -0.394184 + -2.17356 1.80731 -0.204712 -0.475464 0.696599 -0.537293 + -2.20852 1.87268 -0.059546 -0.019154 0.925532 -0.378184 + -2.05691 1.78848 -0.509912 -0.982277 0.0686332 -0.17442 + -2.08045 1.67933 -0.46125 -0.941302 0.152532 -0.301138 + -2.13064 1.67626 -0.328739 -0.909521 0.135366 -0.392998 + -2.17854 1.69863 -0.236073 -0.852201 0.021149 -0.522787 + -2.16601 1.76363 -0.248856 -0.814249 0.229287 -0.533316 + -2.26032 1.84742 -0.082585 -0.339492 0.733317 -0.589059 + -2.05087 1.7113 -0.556828 -0.967225 0.114483 -0.22665 + -2.08361 1.60417 -0.499667 -0.91313 0.305299 -0.270159 + -2.13379 1.6011 -0.367149 -0.928556 0.176043 -0.326792 + -2.17994 1.62481 -0.232215 -0.826142 0.179614 -0.534067 + -2.01964 1.79368 -0.67111 -0.981152 -0.00407053 -0.193195 + -2.01547 1.73294 -0.734101 -0.972584 0.133596 -0.190349 + -2.04671 1.65056 -0.619819 -0.959585 0.218274 -0.177633 + -2.09564 1.53103 -0.571994 -0.960136 0.200244 -0.19504 + -2.12301 1.50724 -0.430988 -0.952883 0.135384 -0.271449 + -2.16916 1.53095 -0.296056 -0.966723 -0.0486957 -0.25115 + -2.01507 1.85244 -0.710092 -0.952732 -0.0137144 -0.303503 + -1.9663 1.86477 -0.850038 -0.954697 0.138719 -0.263267 + -2.02224 1.64622 -0.784511 -0.958662 0.189841 -0.211963 + -2.05874 1.57734 -0.692196 -0.950602 0.23948 -0.197496 + -2.04901 1.87769 -0.606221 -0.98889 -0.00170281 -0.148637 + -2.04084 1.94534 -0.658996 -0.978647 0.0887841 -0.185384 + -2.02648 2.0249 -0.695197 -0.972804 0.231595 -0.00389074 + -2.00071 1.93192 -0.74635 -0.907793 -0.0136759 -0.419195 + -1.97115 1.95368 -0.81144 -0.928221 0.0460678 -0.369167 + -2.05358 1.81893 -0.567241 -0.978176 -0.129611 -0.162394 + -2.05367 1.84205 -0.544286 -0.998185 0.0436692 -0.0414662 + -2.04962 1.87449 -0.581074 -0.993561 0.11288 -0.0097189 + -2.04145 1.94214 -0.633849 -0.986185 0.165622 -0.00283097 + -1.9953 2.10086 -0.703953 -0.0654755 0.296776 0.9527 + -1.24542 1.07804 -1.44959 0.173142 -0.0822395 0.981457 + -1.30253 1.11291 -1.43659 0.82029 0.42927 0.377958 + -1.26037 1.02438 -1.45144 0.697685 -0.0379477 0.715399 + -1.3426 1.16556 -1.41618 0.818352 0.531273 0.219201 + -1.33891 1.09937 -1.36652 0.779628 0.197893 0.594154 + -1.31527 1.03417 -1.3908 0.737068 -0.00548835 0.675796 + -1.26424 0.876179 -1.45655 0.69155 -0.0476274 0.720756 + -1.20752 0.862044 -1.50687 0.74719 -0.0679487 0.661127 + -1.15338 0.931117 -1.57811 0.759355 -0.0907354 0.644319 + -1.11406 0.974813 -1.60939 0.586011 -0.267587 0.764845 + -1.22105 1.06807 -1.48272 0.27089 -0.808143 0.522995 + -1.24542 1.07804 -1.44959 0.749546 -0.230328 0.620588 + -1.38567 1.21834 -1.48539 0.731757 0.678101 -0.0686348 + -1.42592 1.25813 -1.43972 0.72592 0.685023 -0.0615047 + -1.39323 1.22173 -1.37206 0.833855 0.518408 0.189573 + -1.38954 1.15545 -1.32246 0.800471 0.190871 0.568167 + -1.3456 1.16561 -1.50585 0.807646 0.56773 -0.159343 + -1.42313 1.24458 -1.54323 0.599116 0.767823 -0.226954 + -1.46338 1.28437 -1.49756 0.652605 0.726901 -0.213829 + -1.46073 1.30484 -1.39622 0.812452 0.5688 -0.128014 + -1.42804 1.26844 -1.32856 0.881324 0.448974 0.147277 + -1.26875 1.04947 -1.46391 0.478371 0.656019 -0.583781 + -1.27651 1.04939 -1.49016 0.700866 0.708303 -0.0842194 + -1.35337 1.16552 -1.5321 0.818574 0.503214 -0.27697 + -1.24542 1.07804 -1.44959 0.0475818 0.416344 -0.907961 + -1.24022 1.02623 -1.52285 0.478502 0.862283 0.165843 + -1.33367 1.11258 -1.54161 0.772216 0.605052 -0.19389 + -1.36149 1.14219 -1.57689 0.863292 0.418384 -0.282279 + -1.38119 1.19504 -1.56743 0.798107 0.567022 -0.203743 + -1.18975 1.00904 -1.53268 0.062907 0.995546 0.0702265 + -1.20826 1.07264 -1.66304 0.415145 0.859062 0.299445 + -1.29738 1.08942 -1.5743 0.562487 0.792297 0.236376 + -1.31783 1.10964 -1.60512 0.369622 0.927123 0.0618199 + -1.35577 1.12264 -1.59423 0.659886 0.737977 -0.141213 + -1.09541 1.02064 -1.61357 0.0237913 0.962556 0.270036 + -1.15779 1.05545 -1.67285 0.195469 0.924385 0.327572 + -1.14875 1.08447 -1.81252 -0.0166731 0.99893 0.043146 + -1.22871 1.09286 -1.69385 0.3051 0.943457 0.129627 + -1.11728 1.02629 -1.55775 -0.295542 0.931926 -0.210163 + -1.09291 1.01632 -1.59089 0.442612 -0.543432 0.713286 + -1.05745 0.968945 -1.65383 0.630685 -0.550842 0.546635 + -1.0363 1.01054 -1.63527 0.630821 -0.110549 0.768013 + -0.994768 1.04414 -1.66086 0.655605 0.0954371 0.749048 + -1.00856 1.06949 -1.67458 0.16273 0.701066 0.694281 + -1.05009 1.03582 -1.64905 0.0974265 0.735369 0.670627 + -1.09291 1.01632 -1.59089 0.526572 0.61002 0.592113 + -1.0544 0.957346 -1.67294 0.687805 -0.548067 0.47597 + -0.991716 1.03263 -1.67992 0.815287 -0.473244 0.333686 + -0.969312 1.06119 -1.7084 0.926927 -0.0756831 0.36753 + -0.988349 1.08892 -1.69963 0.365777 0.683989 0.631163 + -1.11248 1.07053 -1.70838 -0.166583 0.90673 0.387415 + -1.08014 0.917146 -1.67951 0.74554 -0.464936 0.477498 + -1.02381 0.965114 -1.71099 0.79491 -0.521387 0.310281 + -1.0014 0.993682 -1.73947 0.892418 -0.451204 -0.00241486 + -1.10836 0.891593 -1.64305 0.853521 -0.242521 0.461178 + -1.09486 0.870919 -1.70684 0.801495 -0.493602 0.337582 + -1.04955 0.924909 -1.71755 0.744193 -0.545299 0.38578 + -1.03953 0.916936 -1.75575 0.824881 -0.548452 0.137012 + -1.02065 0.95854 -1.7576 0.915138 -0.400652 0.0447345 + -1.16249 0.822434 -1.57186 0.836226 -0.343911 0.427143 + -1.12307 0.845368 -1.67038 0.836454 -0.447241 0.316734 + -1.08484 0.863034 -1.74498 0.824632 -0.459995 0.329221 + -1.03365 0.924709 -1.79081 0.894405 -0.425211 0.138694 + -1.01477 0.966219 -1.79271 0.97713 -0.191171 0.0931124 + -1.21154 0.769462 -1.53291 0.787037 -0.409205 0.461653 + -1.17212 0.792308 -1.63148 0.836245 -0.441014 0.325886 + -1.12885 0.794089 -1.71237 0.857283 -0.316273 0.406248 + -1.05344 0.863585 -1.81634 0.872638 -0.440905 0.210011 + -1.26447 0.772444 -1.46028 0.695533 -0.308164 0.649052 + -1.29789 0.714715 -1.48249 0.673517 -0.48752 0.555608 + -1.24 0.709635 -1.55049 0.754407 -0.437563 0.489294 + -1.19672 0.711416 -1.63137 0.830035 -0.332251 0.447941 + -1.32119 0.786574 -1.40995 0.688698 -0.190326 0.699622 + -1.35082 0.717703 -1.40986 0.675227 -0.414784 0.609937 + -1.36445 0.647105 -1.45278 0.645421 -0.514315 0.564723 + -1.30656 0.642106 -1.52072 0.658748 -0.509325 0.55375 + -1.25297 0.631515 -1.60298 0.721021 -0.506995 0.472319 + -1.36481 0.824607 -1.35122 0.724988 -0.153365 0.67147 + -1.39914 0.743891 -1.34262 0.667865 -0.338687 0.662757 + -1.4656 0.683465 -1.31776 0.658023 -0.446382 0.606423 + -1.41728 0.657188 -1.38505 0.61585 -0.508591 0.601717 + -1.31913 0.885966 -1.3959 0.743944 -0.0553597 0.665945 + -1.40449 0.873828 -1.30028 0.755522 -0.134008 0.641271 + -1.44277 0.781924 -1.2839 0.71458 -0.284723 0.63899 + -1.35881 0.935192 -1.34496 0.759032 -0.0386245 0.649907 + -1.43222 0.93844 -1.25339 0.76997 -0.0115449 0.637976 + -1.47412 0.841002 -1.21862 0.738598 -0.213192 0.639548 + -1.53037 0.782376 -1.18348 0.766098 -0.300331 0.568238 + -1.49902 0.723384 -1.2487 0.676639 -0.391776 0.623436 + -1.38245 1.00039 -1.32068 0.741655 0.0422017 0.669453 + -1.46009 1.01299 -1.23031 0.82379 0.000647658 0.566895 + -1.50185 0.905609 -1.17173 0.817054 -0.146961 0.557517 + -1.41032 1.07485 -1.29766 0.752916 0.0473755 0.656409 + -1.48367 1.07867 -1.18368 0.868379 0.0439774 0.493946 + -1.51686 0.973193 -1.12178 0.860304 -0.103619 0.499139 + -1.56396 0.914514 -1.06795 0.816421 -0.169329 0.552073 + -1.54895 0.846931 -1.11789 0.805782 -0.2504 0.53667 + -1.42778 1.21479 -1.28065 0.857926 0.159448 0.488405 + -1.44856 1.13419 -1.25584 0.8129 0.0627485 0.579014 + -1.51747 1.13409 -1.13427 0.895261 0.081783 0.437973 + -1.54043 1.03896 -1.07509 0.875969 -0.085484 0.474732 + -1.45892 1.26563 -1.2397 0.866108 0.153312 0.475766 + -1.48237 1.18961 -1.20643 0.839119 0.0558851 0.541069 + -1.54824 1.19931 -1.08523 0.892584 0.202536 0.402832 + -1.55596 1.11245 -1.01639 0.896302 -0.0196309 0.443009 + -1.45918 1.31928 -1.28762 0.907493 0.396119 0.139806 + -1.482 1.36422 -1.25526 0.905756 0.377442 0.192728 + -1.49134 1.31266 -1.19896 0.837718 0.160443 0.522003 + -1.51478 1.23655 -1.16574 0.833717 0.119872 0.539024 + -1.47664 1.34482 -1.35347 0.858846 0.499496 -0.11352 + -1.49947 1.38977 -1.32112 0.888233 0.452212 -0.0809087 + -1.5168 1.43611 -1.29238 0.904034 0.425647 -0.0393292 + -1.50491 1.40026 -1.23249 0.901912 0.36012 0.238472 + -1.51425 1.3487 -1.17618 0.838207 0.16343 0.520289 + -1.48146 1.32614 -1.4323 0.742308 0.629793 -0.228778 + -1.49738 1.36613 -1.38956 0.781875 0.537231 -0.316314 + -1.5245 1.42932 -1.36002 0.831078 0.470068 -0.29723 + -1.51048 1.35755 -1.41971 0.785497 0.565423 -0.251577 + -1.5376 1.42074 -1.39016 0.809508 0.487 -0.327915 + -1.58824 1.56145 -1.33468 0.864036 0.442911 -0.239315 + -1.54182 1.47566 -1.33128 0.878835 0.438414 -0.18826 + -1.4924 1.31578 -1.48496 0.682665 0.667858 -0.296536 + -1.55899 1.44397 -1.42699 0.863564 0.435221 -0.254636 + -1.60964 1.58459 -1.37157 0.944732 0.322602 -0.0583826 + -1.60153 1.60372 -1.30009 0.914593 0.385592 -0.121815 + -1.55511 1.51792 -1.29669 0.893597 0.437526 -0.100283 + -1.46548 1.23855 -1.61559 0.572906 0.758523 -0.310517 + -1.50726 1.26305 -1.64863 0.644095 0.695631 -0.318179 + -1.53418 1.34028 -1.51799 0.753159 0.579994 -0.310417 + -1.59651 1.47515 -1.4948 0.835756 0.42398 -0.34893 + -1.61771 1.62371 -1.39571 0.917012 0.326939 -0.228471 + -1.4019 1.21062 -1.58843 0.646922 0.697115 -0.309069 + -1.44425 1.20459 -1.66078 0.638012 0.737988 -0.219804 + -1.4398 1.18462 -1.73799 0.48088 0.852271 -0.205886 + -1.48964 1.19978 -1.76384 0.491435 0.835547 -0.245667 + -1.40843 1.18278 -1.6526 0.633276 0.732962 -0.24845 + -1.40398 1.16281 -1.72981 0.522368 0.846345 -0.104075 + -1.41362 1.14503 -1.86862 0.320512 0.934897 -0.152442 + -1.46347 1.16028 -1.89442 0.27376 0.926384 -0.258589 + -1.38772 1.1672 -1.63161 0.825308 0.510224 -0.241945 + -1.38199 1.14774 -1.6489 0.835776 0.54096 -0.0940225 + -1.38227 1.15146 -1.69034 0.556547 0.827417 0.0750823 + -1.37664 1.14592 -1.80136 0.36247 0.928366 -0.0821708 + -1.36011 1.12005 -1.63475 0.592442 0.803189 -0.0624442 + -1.36038 1.12376 -1.67618 0.770781 0.632918 0.0728784 + -1.35493 1.13465 -1.76184 0.683378 0.728207 0.0520413 + -1.35051 1.13019 -1.85951 0.260086 0.96343 -0.0644806 + -1.32217 1.10706 -1.64564 0.220286 0.973971 -0.053426 + -1.32173 1.1061 -1.68638 0.21761 0.975953 -0.0127332 + -1.35104 1.11445 -1.69885 0.586982 0.807809 0.0538187 + -1.34559 1.12525 -1.78456 0.898268 0.432898 0.0755937 + -1.22827 1.0919 -1.73459 0.114962 0.993313 -0.0106827 + -1.31574 1.10599 -1.7686 0.212411 0.976995 0.0190527 + -1.34506 1.11426 -1.78112 0.77047 0.632282 0.0812103 + -1.33747 1.11615 -1.8326 0.837045 0.520751 0.167849 + -1.33801 1.12714 -1.83603 0.692712 0.706621 0.144346 + -1.21204 1.08971 -1.78439 0.116011 0.993232 -0.00562076 + -1.29951 1.1038 -1.8184 0.195488 0.980549 0.0175863 + -1.32299 1.11005 -1.85383 0.418816 0.900976 0.113291 + -1.32052 1.12088 -1.90499 0.453739 0.888132 0.0730834 + -1.33303 1.12393 -1.92846 0.210548 0.975773 -0.0594717 + -1.18366 1.08628 -1.81346 0.0817664 0.996602 -0.00990603 + -1.25696 1.09743 -1.88518 0.169439 0.98513 0.0284454 + -1.28043 1.1036 -1.92066 0.277512 0.95671 0.0877068 + -1.30604 1.11478 -1.92621 0.347487 0.935136 0.0690866 + -1.18596 1.09 -1.9349 0.0767218 0.994352 0.0733329 + -1.22858 1.09393 -1.9143 0.137355 0.989622 0.0422201 + -1.26087 1.10138 -1.96022 0.223457 0.973129 0.0555531 + -1.28648 1.11256 -1.96577 0.319311 0.946757 -0.0411404 + -1.33 1.12081 -1.96347 0.159355 0.984233 -0.0767621 + -1.15105 1.08818 -1.93396 0.0325011 0.997528 0.0623048 + -1.21825 1.09746 -1.98082 0.111722 0.993739 0.000589359 + -1.29512 1.10951 -2.0009 0.184854 0.977755 -0.0991183 + -1.33863 1.11785 -1.99855 0.117618 0.982567 -0.143972 + -1.08885 1.08668 -1.91054 0.0542806 0.997954 -0.0337843 + -1.0773 1.09187 -1.97934 0.13935 0.980498 0.138586 + -1.1395 1.09346 -2.0027 -0.0165511 0.99778 0.0645019 + -1.10695 1.09107 -1.77734 -0.193431 0.980445 0.0362127 + -1.04704 1.09328 -1.87537 0.0569004 0.973453 -0.221701 + -1.02812 1.06684 -1.94899 0.656839 0.724231 0.209884 + -1.04358 1.08719 -1.98883 0.334814 0.920845 0.199859 + -1.10267 1.10541 -2.0876 -0.00308561 0.990809 0.135235 + -1.09227 1.08996 -1.73342 -0.261124 0.915849 0.305016 + -0.983915 1.11468 -1.79325 0.102135 0.983635 -0.148429 + -0.958179 1.10158 -1.80475 0.844946 0.338635 -0.413995 + -1.02131 1.08017 -1.88688 0.783676 0.443465 -0.434961 + -0.969238 1.11357 -1.74933 0.425771 0.859656 0.282329 + -0.950201 1.08593 -1.75806 0.99664 -0.0195232 0.0795413 + -1.00406 1.03856 -1.82341 0.881778 -0.332204 -0.334826 + -1.09291 1.01632 -1.59089 0.354243 0.925053 0.137072 + -1.11728 1.02629 -1.55775 0.499307 0.859589 0.108618 + -0.996081 1.02292 -1.77671 0.876835 -0.433937 -0.207024 + -1.01533 0.98769 -1.79489 0.983354 -0.179662 -0.0271248 + -1.012 0.994478 -1.82505 0.999829 -0.0134116 0.0127323 + -1.01756 1.01435 -1.84748 0.980127 0.0823714 -0.18046 + -1.03481 1.05596 -1.91095 0.999773 -0.00306452 0.0210607 + -1.01144 0.973099 -1.82282 0.987951 -0.128609 0.086098 + -1.00757 0.987186 -1.87742 0.995834 0.0198532 -0.0889959 + -1.01314 1.00706 -1.89985 0.966596 0.238096 0.094885 + -1.00645 1.01785 -1.93794 0.875372 0.325751 0.357224 + -1.01786 0.945051 -1.83084 0.950162 -0.293284 0.10572 + -1.01399 0.959138 -1.88544 0.979392 -0.176513 0.0981545 + -0.99163 0.99924 -1.9591 0.935095 0.101867 0.339441 + -0.988968 1.05418 -2.00106 0.745405 0.568094 0.348771 + -1.00443 1.07461 -2.04084 0.398694 0.888189 0.228391 + -1.03765 0.883927 -1.85637 0.93604 -0.290251 0.198955 + -1.03466 0.865062 -1.88869 0.939733 -0.188261 0.285413 + -1.011 0.940273 -1.91776 0.937055 -0.215974 0.27438 + -0.991771 0.955552 -1.96923 0.9521 -0.101055 0.288605 + -1.09745 0.79464 -1.78372 0.875019 -0.268242 0.402973 + -1.05773 0.785549 -1.86557 0.899101 -0.167006 0.404632 + -1.006 0.870142 -1.95989 0.932887 -0.157103 0.324099 + -0.986775 0.88534 -2.01142 0.946685 -0.121602 0.29833 + -1.14134 0.712286 -1.73028 0.840727 -0.314113 0.441034 + -1.10162 0.703111 -1.81219 0.830778 -0.270314 0.486557 + -1.06407 0.665688 -1.88717 0.847717 -0.277697 0.451952 + -1.02908 0.790633 -1.93678 0.921692 -0.131475 0.364963 + -1.19759 0.632303 -1.70194 0.778508 -0.460176 0.426806 + -1.16577 0.605239 -1.79147 0.737381 -0.493769 0.460935 + -1.12821 0.567733 -1.86651 0.647001 -0.573674 0.502283 + -1.09718 0.541941 -1.95623 0.685948 -0.594715 0.419274 + -1.03454 0.654822 -1.96195 0.879723 -0.263726 0.395646 + -1.27522 0.528608 -1.69214 0.715921 -0.530846 0.453497 + -1.2434 0.501544 -1.78166 0.755033 -0.560987 0.339438 + -1.22111 0.481229 -1.89808 0.675259 -0.644874 0.357998 + -1.19008 0.455437 -1.98781 0.621183 -0.669827 0.406773 + -1.30462 0.57125 -1.6108 0.653371 -0.55673 0.512989 + -1.39521 0.449102 -1.60763 0.720441 -0.496904 0.483789 + -1.36581 0.406463 -1.68898 0.71644 -0.532194 0.451092 + -1.33049 0.388747 -1.78369 0.761052 -0.5572 0.332157 + -1.35822 0.581842 -1.52854 0.656139 -0.535145 0.532073 + -1.43477 0.463087 -1.52806 0.71188 -0.458388 0.532079 + -1.51087 0.270411 -1.60753 0.745923 -0.523087 0.412285 + -1.47041 0.261263 -1.69749 0.734902 -0.55189 0.394128 + -1.4351 0.243462 -1.79225 0.731062 -0.564496 0.383267 + -1.41888 0.576279 -1.46511 0.646976 -0.496289 0.578895 + -1.49543 0.45761 -1.46457 0.752044 -0.40799 0.517661 + -1.55043 0.284485 -1.52791 0.770437 -0.476393 0.423646 + -1.64693 0.158135 -1.50386 0.728119 -0.599991 0.331442 + -1.60938 0.151428 -1.60044 0.702056 -0.62076 0.348962 + -1.47171 0.58636 -1.39737 0.693619 -0.45853 0.555556 + -1.52999 0.476495 -1.38248 0.801063 -0.349192 0.486172 + -1.57685 0.307882 -1.43463 0.806349 -0.444788 0.389828 + -1.67335 0.181532 -1.41058 0.771124 -0.541297 0.33521 + -1.51673 0.601888 -1.32347 0.73258 -0.394978 0.554364 + -1.57501 0.491937 -1.30862 0.854505 -0.282919 0.435635 + -1.6114 0.326762 -1.35253 0.840761 -0.412313 0.350883 + -1.69386 0.205535 -1.30996 0.793536 -0.536675 0.286845 + -1.77078 0.075799 -1.37565 0.68536 -0.682119 0.254942 + -1.55015 0.641811 -1.25441 0.790138 -0.360605 0.495628 + -1.59402 0.539542 -1.22688 0.908984 -0.237773 0.342362 + -1.61983 0.365541 -1.2569 0.889323 -0.339409 0.306442 + -1.70229 0.244309 -1.21432 0.79847 -0.50459 0.328383 + -1.56162 0.702814 -1.18007 0.854852 -0.28339 0.434648 + -1.60549 0.60055 -1.15255 0.907737 -0.230313 0.35067 + -1.63884 0.413152 -1.17517 0.883781 -0.29005 0.367153 + -1.71489 0.294507 -1.11826 0.805347 -0.440134 0.397113 + -1.80779 0.132344 -1.16719 0.711517 -0.611219 0.346634 + -1.58019 0.76737 -1.11449 0.85704 -0.244885 0.453336 + -1.61581 0.67097 -1.08032 0.914331 -0.19806 0.35323 + -1.65143 0.480345 -1.09594 0.885192 -0.269321 0.379343 + -1.72749 0.361699 -1.03904 0.815727 -0.38333 0.433182 + -1.59302 0.838534 -1.04755 0.857829 -0.170253 0.484916 + -1.62864 0.74213 -1.01337 0.907813 -0.148264 0.392291 + -1.66176 0.550679 -1.02377 0.894996 -0.253189 0.367256 + -1.73373 0.435792 -0.954179 0.834671 -0.365902 0.411632 + -1.8313 0.24669 -0.970242 0.726684 -0.513273 0.456597 + -1.58681 0.989069 -1.01928 0.832526 -0.176992 0.524952 + -1.61587 0.913088 -0.998879 0.718302 -0.054998 0.693554 + -1.64391 0.823498 -0.957905 0.803516 0.0356972 0.594212 + -1.66647 0.634013 -0.954109 0.893489 -0.196039 0.404038 + -1.73844 0.519127 -0.884519 0.853437 -0.31061 0.418528 + -1.60233 1.06256 -0.96058 0.600196 -0.284741 0.747454 + -1.66335 0.996747 -0.978581 0.469243 -0.157034 0.868995 + -1.69139 0.907156 -0.937606 0.867169 0.145639 0.476243 + -1.68175 0.715383 -0.898643 0.930508 -0.137929 0.339309 + -1.58673 1.17767 -0.967345 0.866091 0.107659 0.488155 + -1.63217 1.13485 -0.91298 0.53935 -0.251011 0.8038 + -1.69319 1.06903 -0.930981 0.685085 -0.268883 0.677023 + -1.71302 0.976869 -0.880152 0.966357 0.102141 0.236053 + -1.67673 0.798432 -0.840487 0.984347 -0.021866 0.174878 + -1.58645 1.25696 -1.04068 0.88288 0.265888 0.387073 + -1.62401 1.25131 -0.923105 0.859705 0.163754 0.483831 + -1.66946 1.2085 -0.86874 0.731817 -0.180123 0.657267 + -1.71522 1.12579 -0.863086 0.849517 -0.178815 0.496333 + -1.73504 1.03363 -0.812257 0.964998 0.122164 0.232066 + -1.553 1.29421 -1.1212 0.826732 0.142832 0.544163 + -1.59609 1.36052 -1.07345 0.84029 0.142386 0.523106 + -1.62539 1.32331 -0.995411 0.891507 0.26432 0.3679 + -1.66295 1.31767 -0.877832 0.880105 0.197236 0.431872 + -1.69943 1.27083 -0.806712 0.748984 -0.100641 0.654901 + -1.53056 1.3972 -1.16099 0.861567 0.170934 0.477999 + -1.56931 1.3428 -1.10596 0.786053 0.0714698 0.614014 + -1.58452 1.45584 -1.09935 0.816287 0.170745 0.551835 + -1.63139 1.42106 -1.02992 0.841445 0.168355 0.513447 + -1.66069 1.38386 -0.951877 0.886274 0.275812 0.372083 + -1.52672 1.44195 -1.2025 0.908297 0.340478 0.243046 + -1.55774 1.43811 -1.13185 0.825473 0.220466 0.519604 + -1.55391 1.48278 -1.17341 0.886322 0.332952 0.321834 + -1.57536 1.52092 -1.14547 0.884572 0.293971 0.362097 + -1.60743 1.48643 -1.07733 0.81361 0.189247 0.549749 + -1.5386 1.4778 -1.26239 0.91024 0.410397 0.0551191 + -1.55989 1.52355 -1.22323 0.909299 0.401645 0.108891 + -1.5764 1.56368 -1.25754 0.903344 0.42881 -0.00961589 + -1.58134 1.56168 -1.19528 0.92928 0.348741 0.121733 + -1.59512 1.59787 -1.17855 0.918722 0.344777 0.19256 + -1.59827 1.55151 -1.12345 0.85495 0.291415 0.429112 + -1.63962 1.53551 -1.04434 0.80926 0.215384 0.546542 + -1.61323 1.63106 -1.28145 0.950067 0.307948 0.0504122 + -1.5881 1.59102 -1.23889 0.923268 0.383847 -0.015392 + -1.60188 1.6272 -1.22216 0.943095 0.332503 -0.00366988 + -1.61773 1.64263 -1.16089 0.921459 0.298711 0.248366 + -1.62087 1.59636 -1.10574 0.850282 0.294279 0.436372 + -1.63079 1.69475 -1.26975 0.965671 0.259755 -0.00262169 + -1.64063 1.746 -1.29753 0.981808 0.18736 -0.0308098 + -1.65095 1.83516 -1.20736 0.987992 0.134976 0.0751928 + -1.64342 1.75405 -1.19387 0.968595 0.192593 0.157261 + -1.61944 1.69088 -1.21046 0.949872 0.31088 0.033105 + -1.64171 1.70581 -1.14431 0.904836 0.277634 0.322786 + -1.6487 1.78512 -1.32169 0.958587 0.199575 -0.203176 + -1.67051 1.94782 -1.27149 0.967009 0.168724 -0.190856 + -1.66079 1.88642 -1.23514 0.988287 0.139971 -0.0608062 + -1.6578 1.70994 -1.38728 0.685234 0.393604 -0.612805 + -1.65962 1.79027 -1.34981 0.801938 0.270827 -0.532492 + -1.68143 1.95297 -1.29961 0.704724 0.300802 -0.642559 + -1.68429 2.08831 -1.22682 0.967528 0.102554 -0.231025 + -1.67457 2.027 -1.19043 0.99549 0.0922849 0.0219888 + -1.64283 1.63651 -1.43129 0.642264 0.483408 -0.594822 + -1.67945 1.64718 -1.44516 -0.139892 0.500138 -0.854571 + -1.68468 1.72955 -1.40063 -0.00451575 0.429118 -0.903237 + -1.6865 1.80988 -1.36317 0.0242019 0.391968 -0.91966 + -1.62162 1.48795 -1.53037 0.66687 0.527203 -0.526633 + -1.66448 1.57375 -1.48918 -0.128547 0.52756 -0.839736 + -1.72826 1.47856 -1.47591 -0.748902 0.314693 -0.583193 + -1.72777 1.56512 -1.43703 -0.708755 0.288441 -0.643792 + -1.5717 1.37146 -1.5858 0.745003 0.560257 -0.362053 + -1.61248 1.3985 -1.60823 0.581359 0.5953 -0.554652 + -1.65498 1.50123 -1.54717 -0.108795 0.619411 -0.777492 + -1.71876 1.40596 -1.53395 -0.754409 0.329249 -0.567858 + -1.56679 1.29244 -1.68874 0.601428 0.674473 -0.428218 + -1.60758 1.31948 -1.71117 0.326133 0.720529 -0.611944 + -1.63912 1.34099 -1.68663 -0.382134 0.670327 -0.636109 + -1.64584 1.41169 -1.62508 -0.153842 0.639864 -0.752932 + -1.71504 1.32517 -1.58463 -0.798321 0.327842 -0.505176 + -1.54917 1.22917 -1.80395 0.260681 0.875349 -0.407196 + -1.60006 1.21441 -1.83039 -0.172425 0.799119 -0.575915 + -1.60983 1.26131 -1.77081 -0.355723 0.662634 -0.659073 + -1.64137 1.28281 -1.74627 -0.499421 0.596737 -0.628079 + -1.70833 1.25447 -1.64618 -0.826482 0.323048 -0.461051 + -1.53871 1.17114 -1.89964 0.0665979 0.897041 -0.436901 + -1.5896 1.15638 -1.92608 -0.397037 0.790209 -0.466831 + -1.62797 1.10647 -1.93902 -0.765356 0.504198 -0.400018 + -1.62972 1.16616 -1.86822 -0.640316 0.563034 -0.522483 + -1.63948 1.21306 -1.80864 -0.639744 0.540692 -0.546242 + -1.43855 1.1159 -2.01876 0.0727262 0.966674 -0.245464 + -1.51379 1.12676 -2.02398 -0.0953847 0.923993 -0.370322 + -1.57138 1.1026 -2.02832 -0.51876 0.729184 -0.446295 + -1.59193 1.1027 -1.9941 -0.673649 0.595491 -0.437708 + -1.38557 1.11758 -2.01527 0.041107 0.979143 -0.198972 + -1.39932 1.0879 -2.16447 -0.115984 0.958613 -0.260017 + -1.4908 1.0756 -2.14036 -0.301435 0.856809 -0.418347 + -1.54839 1.05144 -2.14471 -0.489676 0.727995 -0.479833 + -1.38749 1.1293 -1.92677 0.203054 0.973422 -0.105919 + -1.38446 1.12618 -1.96176 -0.235509 0.964317 -0.120943 + -1.33975 1.10917 -2.0521 0.0800733 0.983705 -0.160977 + -1.34634 1.0895 -2.16103 -0.0357518 0.987175 -0.155588 + -1.29729 1.10744 -2.02971 0.135192 0.984821 -0.108859 + -1.3294 1.10126 -2.095 0.0444298 0.988207 -0.146535 + -1.30621 1.0951 -2.14454 -0.058199 0.996153 -0.0655115 + -1.32314 1.08343 -2.21052 -0.17548 0.979131 -0.102519 + -1.31599 1.07477 -2.28572 -0.385102 0.894613 -0.226635 + -1.22043 1.09538 -2.00962 0.228125 0.966454 -0.118005 + -1.28695 1.09954 -2.07262 0.178507 0.97375 -0.141231 + -1.27041 1.09363 -2.08299 0.250065 0.960632 -0.121053 + -1.28136 1.09502 -2.12479 0.0811391 0.9951 0.0565034 + -1.29086 1.09788 -2.18676 -0.187011 0.982159 -0.0197482 + -1.20388 1.08947 -2.01999 0.0361177 0.983928 -0.174876 + -1.22956 1.08229 -2.07395 0.133266 0.984258 -0.116087 + -1.24051 1.08368 -2.11575 0.128339 0.988893 0.0749617 + -1.24092 1.09246 -2.16535 0.0765288 0.978473 0.19166 + -1.26601 1.0978 -2.167 0.0684345 0.990901 0.115898 + -1.16882 1.09152 -2.02854 -0.103222 0.993759 -0.0422805 + -1.19449 1.08434 -2.08249 -0.164808 0.986325 -0.00108854 + -1.20317 1.08477 -2.11703 -0.127966 0.986048 0.106457 + -1.13199 1.10347 -2.11344 -0.2288 0.968857 0.0946935 + -1.14066 1.10399 -2.14793 -0.244385 0.951314 0.187826 + -1.20358 1.09346 -2.16669 -0.125805 0.955117 0.268189 + -1.20362 1.1043 -2.19567 -0.238142 0.889549 0.38986 + -1.23619 1.1012 -2.2137 -0.0647689 0.923384 0.378375 + -1.07193 1.13033 -2.19796 -0.024249 0.945075 0.325953 + -1.14071 1.11474 -2.17695 -0.167989 0.918081 0.359036 + -1.20313 1.12802 -2.23314 -0.239696 0.884025 0.401305 + -1.2357 1.12492 -2.25118 -0.444914 0.880695 0.162567 + -1.26129 1.10663 -2.2153 -0.169965 0.971981 0.162373 + -1.06896 1.10064 -2.09713 0.187102 0.960629 0.205391 + -1.04583 1.10626 -2.12786 0.0440734 0.9459 0.321452 + -1.03487 1.11922 -2.16291 -0.0361829 0.953847 0.298104 + -0.974548 1.14311 -2.24689 0.145567 0.960289 0.238026 + -1.08854 1.16718 -2.28678 -0.0115867 0.958846 0.283689 + -1.13452 1.168 -2.2984 -0.256421 0.949666 0.179949 + -1.11791 1.13115 -2.20958 -0.173721 0.914506 0.365375 + -0.9813 1.08014 -2.07162 0.294152 0.784897 0.545355 + -0.951245 1.1095 -2.11168 0.257384 0.809139 0.52825 + -0.940285 1.12247 -2.14673 0.328488 0.894388 0.303587 + -0.937486 1.13191 -2.21189 0.332247 0.928216 0.167415 + -0.954909 1.05443 -2.06828 0.804878 0.278694 0.523929 + -0.924853 1.0837 -2.10838 0.84013 0.22087 0.495377 + -0.913843 1.10392 -2.15981 0.926368 0.335705 0.17072 + -0.911044 1.11345 -2.22492 0.973042 0.225081 0.0502845 + -0.914023 1.13006 -2.28628 0.918688 0.389675 0.0645338 + -0.974143 1.03556 -2.02221 0.914424 0.118565 0.387003 + -0.950424 1.01234 -2.07959 0.936629 -0.07147 0.342955 + -0.931314 1.03687 -2.12927 0.957038 -0.156572 0.244057 + -0.920304 1.05709 -2.18069 0.992451 -0.122179 -0.010626 + -0.926823 1.07678 -2.2384 0.980467 -0.183094 -0.0718396 + -0.969659 0.993571 -2.03348 0.947023 -0.0449454 0.318006 + -0.952612 0.969858 -2.09181 0.945446 -0.12635 0.300279 + -0.933501 0.994386 -2.14149 0.970845 -0.132088 0.200033 + -0.926781 0.999793 -2.18866 0.987968 -0.15197 -0.0287218 + -0.969799 0.949883 -2.04361 0.952234 -0.0972612 0.289467 + -0.947048 0.922664 -2.13107 0.967483 -0.155459 0.199522 + -0.940327 0.928066 -2.17822 0.982403 -0.103286 0.155618 + -0.9333 1.01957 -2.2463 0.998326 -0.0233835 0.052892 + -0.964235 0.902602 -2.08292 0.951822 -0.118642 0.282771 + -0.977004 0.797029 -2.08306 0.955386 -0.097933 0.27865 + -0.953089 0.796417 -2.1604 0.963165 -0.0675538 0.260289 + -0.923287 0.9505 -2.24968 0.979987 0.0275919 0.19714 + -0.999544 0.779769 -2.01156 0.937617 -0.10709 0.330765 + -1.00511 0.628134 -2.04333 0.895379 -0.263211 0.359189 + -0.9812 0.627521 -2.12066 0.92832 -0.210969 0.306128 + -0.954739 0.613244 -2.20594 0.932296 -0.195628 0.304228 + -0.936049 0.81885 -2.23186 0.969981 -0.0499561 0.237994 + -1.06776 0.515253 -2.03761 0.665001 -0.596063 0.44998 + -1.03642 0.491844 -2.11246 0.727047 -0.546295 0.41589 + -1.00996 0.477562 -2.19773 0.794171 -0.449285 0.40919 + -0.987213 0.44724 -2.26101 0.735311 -0.410456 0.539299 + -0.934241 0.615491 -2.27583 0.918927 -0.11539 0.377172 + -1.16227 0.429164 -2.0737 0.603788 -0.668898 0.433607 + -1.13093 0.405755 -2.14855 0.504108 -0.629814 0.590939 + -1.10118 0.368082 -2.1967 0.581672 -0.573917 0.576434 + -1.07843 0.337759 -2.25998 0.66629 -0.604275 0.436931 + -1.2779 0.348663 -1.99567 0.754261 -0.531393 0.385631 + -1.2501 0.32239 -2.08156 0.73718 -0.521743 0.42936 + -1.21894 0.297052 -2.16027 0.650316 -0.512833 0.560439 + -1.18919 0.259384 -2.20843 0.579813 -0.564258 0.587732 + -1.14869 0.247773 -2.28572 0.681187 -0.608254 0.407444 + -1.3082 0.368428 -1.9001 0.787299 -0.536785 0.30335 + -1.36476 0.21381 -1.97769 0.768104 -0.518164 0.376194 + -1.32614 0.201938 -2.06793 0.754365 -0.510653 0.412513 + -1.29498 0.176688 -2.14659 0.725484 -0.542638 0.423339 + -1.25635 0.164224 -2.23701 0.677059 -0.602807 0.422155 + -1.39505 0.233576 -1.88213 0.76082 -0.542501 0.356153 + -1.48207 0.129597 -1.87343 0.682624 -0.634174 0.363108 + -1.43835 0.122355 -1.96969 0.68794 -0.625107 0.368754 + -1.39973 0.110482 -2.05993 0.670276 -0.656216 0.34657 + -1.35845 0.104011 -2.15432 0.639467 -0.678156 0.362197 + -1.52211 0.139485 -1.78356 0.684211 -0.630122 0.367153 + -1.54867 0.072714 -1.86511 0.542206 -0.784721 0.300376 + -1.50496 0.06539 -1.96142 0.523912 -0.80173 0.287656 + -1.46343 0.05873 -2.06489 0.500826 -0.823959 0.265075 + -1.42215 0.052258 -2.15928 0.501515 -0.825834 0.257838 + -1.56892 0.142187 -1.69044 0.686286 -0.630615 0.362403 + -1.60296 0.071117 -1.76894 0.549244 -0.785052 0.286397 + -1.65748 0.043559 -1.77041 0.153631 -0.987522 0.0346111 + -1.60319 0.045063 -1.86662 0.143323 -0.986081 0.0842797 + -1.55544 0.042446 -1.96028 0.12878 -0.985175 0.113338 + -1.70267 0.06714 -1.57905 0.598631 -0.750262 0.280621 + -1.64978 0.073826 -1.67583 0.589737 -0.751714 0.29519 + -1.70933 0.036278 -1.6716 0.206748 -0.977039 0.0514759 + -1.69304 0.049387 -1.7757 -0.22278 -0.96006 -0.169277 + -1.645 0.053394 -1.87724 -0.25473 -0.957594 -0.134631 + -1.74022 0.073933 -1.48242 0.644235 -0.729187 0.230752 + -1.76223 0.029679 -1.57477 0.337237 -0.937576 0.0849903 + -1.74489 0.042194 -1.67685 -0.191787 -0.960279 -0.202689 + -1.72049 0.064447 -1.80299 -0.35515 -0.905699 -0.231467 + -1.83471 0.025187 -1.36499 0.436433 -0.8833 0.171193 + -1.80415 0.023321 -1.47176 0.381871 -0.917714 0.109436 + -1.79512 0.025566 -1.58045 -0.0922438 -0.985356 -0.143401 + -1.82149 0.041109 -1.60877 -0.442671 -0.849374 -0.287412 + -1.77126 0.05782 -1.70511 -0.296105 -0.915917 -0.270956 + -1.86011 0.040048 -1.25573 0.447953 -0.849213 0.279599 + -1.86908 0.015865 -1.36964 -0.120348 -0.991968 0.0389295 + -1.83704 0.019212 -1.47744 -0.121295 -0.989967 -0.0724768 + -1.79129 0.099711 -1.27507 0.710707 -0.63697 0.298606 + -1.87661 0.072682 -1.14785 0.490809 -0.791054 0.365158 + -1.89448 0.030728 -1.26038 -0.0224925 -0.981886 0.188132 + -1.89584 0.031306 -1.39999 -0.544022 -0.826537 -0.14449 + -1.8638 0.034655 -1.50779 -0.533683 -0.81644 -0.220474 + -1.8892 0.11967 -1.04724 0.491107 -0.73462 0.468132 + -1.91654 0.057357 -1.15051 -0.0664251 -0.937121 0.342626 + -1.94594 0.060274 -1.18596 -0.424581 -0.887641 0.178394 + -1.92388 0.03373 -1.29579 -0.512177 -0.858808 -0.0111148 + -1.82039 0.18254 -1.07113 0.715962 -0.563761 0.411792 + -1.90011 0.183815 -0.946342 0.40796 -0.714354 0.568566 + -1.92914 0.104254 -1.04994 -0.0017037 -0.859972 0.510339 + -1.90442 0.264828 -0.848658 0.407666 -0.684278 0.604626 + -1.93193 0.175895 -0.951423 -0.126213 -0.782923 0.609182 + -1.96125 0.164999 -0.98295 -0.4823 -0.704669 0.520412 + -1.95845 0.09336 -1.08147 -0.445979 -0.814433 0.371216 + -1.83755 0.320778 -0.885367 0.743809 -0.490286 0.454277 + -1.90238 0.345574 -0.758916 0.252848 -0.654547 0.712486 + -1.93624 0.256906 -0.853739 -0.186993 -0.718289 0.670145 + -1.83552 0.40161 -0.795576 0.757055 -0.449723 0.473937 + -1.9005 0.439095 -0.683499 0.22376 -0.574554 0.787286 + -1.93979 0.349147 -0.769904 -0.397779 -0.591454 0.701395 + -1.96402 0.330959 -0.803601 -0.719051 -0.454278 0.525925 + -1.96047 0.238717 -0.887436 -0.529062 -0.635927 0.561863 + -1.73691 0.605799 -0.81344 0.879357 -0.306427 0.364464 + -1.83398 0.488196 -0.724546 0.757838 -0.400816 0.514809 + -1.89473 0.542755 -0.617445 0.266518 -0.504582 0.821198 + -1.9379 0.44258 -0.694537 -0.441434 -0.515706 0.734291 + -1.73189 0.688842 -0.755276 0.882044 -0.271597 0.385011 + -1.82821 0.591858 -0.658491 0.746126 -0.372853 0.551613 + -1.89444 0.652219 -0.557439 0.223468 -0.454549 0.862234 + -1.93576 0.547198 -0.624538 -0.425058 -0.461598 0.778622 + -1.69835 0.868144 -0.783033 0.971882 0.0827049 0.220466 + -1.73465 0.775569 -0.692687 0.899378 -0.205636 0.385789 + -1.83097 0.678666 -0.59585 0.702944 -0.354677 0.616502 + -1.89441 0.764101 -0.504826 0.211403 -0.429864 0.877796 + -1.93547 0.65666 -0.564533 -0.489309 -0.39302 0.778532 + -1.72244 0.926738 -0.699321 0.969121 0.0967503 0.226811 + -1.75873 0.834162 -0.608975 0.856447 -0.241278 0.456381 + -1.83094 0.790462 -0.543286 0.675589 -0.349146 0.649366 + -1.90827 0.87039 -0.446126 0.0923059 -0.552086 0.828662 + -1.94212 0.77194 -0.513802 -0.504601 -0.426751 0.750508 + -1.76018 1.08757 -0.733287 0.979458 0.113183 0.166886 + -1.74758 0.980684 -0.62036 0.954768 0.111829 0.275521 + -1.78124 0.914346 -0.53626 0.856383 -0.147809 0.494732 + -1.85344 0.870648 -0.470571 0.553392 -0.437721 0.708631 + -1.74518 1.18812 -0.801049 0.879133 -0.139851 0.455596 + -1.77403 1.13592 -0.650637 0.969242 0.107163 0.221555 + -1.78834 1.03441 -0.536214 0.936855 0.102752 0.334281 + -1.822 0.968071 -0.452114 0.79048 -0.269115 0.550198 + -1.88088 0.964924 -0.39846 0.502809 -0.456807 0.733832 + -1.74325 1.34093 -0.758132 0.887192 0.0441054 0.459288 + -1.75903 1.23639 -0.718449 0.962019 -0.0014114 0.272979 + -1.78886 1.28967 -0.649536 0.944103 0.0596126 0.324217 + -1.80398 1.18699 -0.568694 0.962772 0.0990288 0.251521 + -1.81829 1.08548 -0.45427 0.932449 0.0646542 0.35547 + -1.70677 1.38786 -0.829211 0.871686 0.241045 0.426687 + -1.7464 1.44765 -0.780767 0.896455 0.259433 0.359254 + -1.77308 1.39422 -0.689219 0.904058 0.108271 0.41347 + -1.70032 1.44373 -0.903383 0.876662 0.307219 0.370242 + -1.74034 1.49789 -0.858394 0.866347 0.341449 0.364492 + -1.78704 1.49931 -0.716844 0.874499 0.342764 0.343167 + -1.81373 1.44579 -0.625345 0.924458 0.191136 0.329916 + -1.66357 1.47014 -0.99693 0.838241 0.195143 0.509187 + -1.70359 1.5243 -0.951933 0.829102 0.26667 0.491403 + -1.78188 1.54323 -0.805916 0.828395 0.447641 0.336719 + -1.82859 1.54464 -0.664366 0.848237 0.439456 0.295589 + -1.66809 1.57701 -1.02522 0.792729 0.263704 0.549583 + -1.68527 1.62043 -1.02003 0.763601 0.279338 0.582137 + -1.72078 1.56773 -0.946754 0.786063 0.263578 0.559135 + -1.74954 1.58263 -0.912958 0.807513 0.344869 0.478527 + -1.83001 1.59114 -0.762101 0.826915 0.459996 0.323443 + -1.64934 1.63786 -1.08662 0.833499 0.27127 0.481344 + -1.67123 1.69079 -1.07069 0.812778 0.251001 0.525729 + -1.70927 1.65192 -1.00797 0.766288 0.2652 0.585211 + -1.73804 1.66673 -0.974226 0.80212 0.212312 0.558147 + -1.79767 1.63046 -0.8692 0.811469 0.339352 0.475772 + -1.6636 1.75882 -1.12833 0.940747 0.158885 0.299585 + -1.67721 1.82691 -1.10747 0.904157 0.104037 0.414339 + -1.69524 1.72227 -1.05862 0.791299 0.191216 0.58076 + -1.71156 1.78375 -1.0419 0.836549 0.109677 0.536802 + -1.75646 1.70307 -0.956964 0.800844 0.182837 0.57028 + -1.65796 1.81516 -1.16071 0.960048 0.102709 0.260307 + -1.67156 1.88334 -1.1398 0.949171 0.0938131 0.300456 + -1.69353 1.88847 -1.0907 0.908299 0.0581232 0.414264 + 1.09292 1.01632 -1.59089 0.36811 -0.929741 0.00873225 + 1.24544 1.07804 -1.44958 0.368108 -0.929742 0.00873484 + 1.1173 1.02629 -1.55774 0.36811 -0.929741 0.00873143 + -1.09291 1.01632 -1.59089 -0.367616 -0.92993 0.00940683 + -1.11728 1.02629 -1.55775 -0.367616 -0.92993 0.00940681 + -1.24542 1.07804 -1.44959 -0.367617 -0.92993 0.00940625 + 1.93239 2.72679 -0.741506 -0.916 0.0382739 0.399347 + 1.86777 2.79456 -0.863879 0.112702 0.880319 0.4608 + 1.82515 2.77478 -0.886633 -0.729584 0.436691 0.526317 + 1.80133 2.74089 -0.909921 -0.892707 0.165894 0.41899 + 1.81726 2.72235 -0.875219 -0.845523 0.175199 0.504377 + 1.86198 2.8063 -0.896229 0.50297 0.83669 -0.216727 + 1.85923 2.80544 -0.885537 -0.0592395 0.92662 0.371303 + 1.81661 2.78567 -0.908291 -0.743352 0.45415 0.491097 + 1.79003 2.7526 -0.944002 -0.907992 0.158258 0.38795 + 1.78061 2.68483 -0.955633 -0.949351 0.137416 0.282574 + 1.82875 2.78366 -0.959199 0.561422 0.544702 -0.62298 + 1.80795 2.79902 -0.949217 -0.187596 0.917246 -0.35138 + 1.8052 2.79816 -0.938525 -0.646271 0.729673 0.223407 + 1.77862 2.76509 -0.974238 -0.905423 0.40769 0.118315 + 1.80458 2.75174 -1.00111 0.472688 0.47962 -0.739278 + 1.78378 2.76702 -0.991191 -0.396033 0.746265 -0.535019 + 1.78383 2.69045 -1.04735 0.444954 0.377498 -0.812103 + 1.76305 2.71127 -1.03682 -0.47726 0.585845 -0.654987 + 1.75789 2.70925 -1.01992 -0.963661 0.259097 0.0650122 + 1.7693 2.69654 -0.989714 -0.936065 0.056336 0.347288 + 1.76503 2.61621 -1.08778 0.330892 0.303752 -0.893446 + 1.74425 2.63695 -1.0773 -0.626099 0.41643 -0.659232 + 1.74104 2.63256 -1.0577 -0.984457 0.129693 0.118423 + 1.75246 2.61995 -1.02745 -0.950653 0.0442371 0.307086 + 1.76075 2.60809 -0.991314 -0.972834 0.0960788 0.210627 + 1.74268 2.5277 -1.12287 0.0477392 0.320426 -0.94607 + 1.7312 2.54263 -1.10692 -0.809607 0.320956 -0.491452 + 1.728 2.53824 -1.08732 -0.985972 0.104142 0.130439 + 1.73941 2.52038 -1.0578 -0.950493 0.0418529 0.307916 + 1.7477 2.50862 -1.02162 -0.978792 0.0827069 0.187419 + 1.72818 2.43651 -1.15392 0.0810189 0.330372 -0.940367 + 1.7167 2.45152 -1.13792 -0.854077 0.287388 -0.433546 + 1.7122 2.432 -1.11812 -0.981024 0.0939114 0.169625 + 1.72362 2.41406 -1.08864 -0.950572 0.0560772 0.305399 + 1.73003 2.38788 -1.0561 -0.974624 0.0962894 0.202078 + 1.77005 2.3569 -1.13484 0.713429 0.144014 -0.685769 + 1.72075 2.34607 -1.17588 0.391001 0.21588 -0.894714 + 1.70418 2.37334 -1.1703 -0.650951 0.280336 -0.70546 + 1.69969 2.35382 -1.15051 -0.990737 0.111569 0.0774106 + 1.76262 2.26646 -1.1568 0.658389 0.163777 -0.734643 + 1.71276 2.24476 -1.2068 0.388641 0.245919 -0.887965 + 1.6962 2.27211 -1.20117 -0.564513 0.2812 -0.776049 + 1.68711 2.23536 -1.18593 -0.993446 0.0838867 -0.0776394 + 1.70018 2.27691 -1.12029 -0.973089 0.0769613 0.217197 + 1.75792 2.17579 -1.18895 0.667364 0.202865 -0.716569 + 1.7067 2.15597 -1.23461 0.23055 0.28228 -0.931217 + 1.69337 2.12496 -1.24211 -0.648277 0.243186 -0.721525 + 1.68429 2.08831 -1.22682 -0.981199 0.119198 -0.151789 + 1.68761 2.15846 -1.15573 -0.995449 0.0538875 0.0785941 + 1.8141 1.95582 -1.19674 0.771757 0.171607 -0.612325 + 1.75186 2.08692 -1.21682 0.642961 0.212671 -0.73578 + 1.70639 2.07934 -1.25929 0.253922 0.304421 -0.918069 + 1.69305 2.04842 -1.26673 -0.0811285 0.336144 -0.93831 + 1.68143 1.95297 -1.29961 -0.704906 0.297907 -0.643707 + 1.88335 1.79572 -1.12164 0.871595 0.126337 -0.473668 + 1.80276 1.87013 -1.23573 0.775056 0.188371 -0.603162 + 1.74052 2.00132 -1.25576 0.665366 0.235785 -0.708303 + 1.70175 1.99203 -1.29306 0.152272 0.337195 -0.929039 + 1.69013 1.89658 -1.32594 0.0329159 0.343605 -0.938537 + 1.95992 1.51335 -1.04196 0.932547 0.176951 -0.314714 + 1.87763 1.70717 -1.16687 0.873451 0.157859 -0.460612 + 1.7962 1.78133 -1.27253 0.774396 0.200558 -0.600073 + 1.73589 1.91402 -1.28954 0.632478 0.238087 -0.737079 + 2.02186 1.46779 -0.887253 0.94337 0.137798 -0.301768 + 2.02129 1.37888 -0.937849 0.946085 0.178483 -0.27031 + 1.96479 1.42748 -1.09262 0.919534 0.202505 -0.33682 + 1.87107 1.61838 -1.20367 0.859476 0.181911 -0.477713 + 1.79399 1.69277 -1.30653 0.783743 0.223034 -0.579657 + 2.06017 1.29964 -0.841612 0.963235 0.135786 -0.231821 + 2.05816 1.21379 -0.905509 0.966162 0.135598 -0.219419 + 2.02617 1.29301 -0.988521 0.949195 0.178161 -0.2594 + 1.96847 1.33642 -1.13131 0.913559 0.196022 -0.356349 + 1.87474 1.52722 -1.2424 0.870186 0.218854 -0.441452 + 2.08967 1.35177 -0.684508 0.980638 0.0678055 -0.183716 + 2.08309 1.26324 -0.753163 0.982409 0.074765 -0.171124 + 2.08108 1.17739 -0.817061 0.988014 0.0492373 -0.146304 + 2.05549 1.1299 -0.964603 0.971445 0.0808971 -0.223049 + 2.02351 1.20911 -1.04761 0.945827 0.155188 -0.285182 + 2.10357 1.35566 -0.589833 0.985757 0.040358 -0.163258 + 2.09699 1.26712 -0.658488 0.993712 -0.000132064 -0.111969 + 2.08871 1.18155 -0.736669 0.996009 -0.00997451 -0.0886932 + 2.07962 1.08929 -0.804875 0.995133 -0.077164 -0.0612927 + 2.07198 1.08521 -0.885208 0.990669 -0.0184381 -0.135034 + 2.14132 1.44162 -0.358728 0.979014 -0.170212 -0.112072 + 2.1263 1.3696 -0.449178 0.990215 -0.0964402 -0.100859 + 2.10602 1.28468 -0.5331 0.987303 -0.156358 -0.0280198 + 2.09775 1.19911 -0.611281 0.994332 -0.105224 -0.0152324 + 2.16917 1.53095 -0.296056 0.970738 -0.0371363 -0.237253 + 2.17486 1.49982 -0.209326 0.956756 -0.283565 -0.064881 + 2.14119 1.40637 -0.285263 0.974198 -0.217438 -0.0604918 + 2.12091 1.32145 -0.369194 0.967122 -0.253942 0.0137075 + 2.09766 1.23015 -0.449251 0.979001 -0.202001 0.0274191 + 2.17995 1.62481 -0.232215 0.924273 -0.00134944 -0.381731 + 2.2027 1.58923 -0.146599 0.946364 -0.21384 -0.242214 + 2.23459 1.63726 -0.042976 0.871473 -0.480251 0.0994638 + 2.18673 1.53689 -0.099744 0.89042 -0.438547 0.121769 + 2.15307 1.44336 -0.175734 0.923469 -0.377588 0.0680578 + 2.13064 1.67626 -0.328739 0.908047 0.137683 -0.395594 + 2.17853 1.69854 -0.236123 0.852335 0.0211165 -0.52257 + 2.20713 1.69783 -0.193899 0.838437 -0.0222997 -0.544542 + 2.25308 1.68695 -0.118641 0.913854 -0.256464 -0.314797 + 2.28498 1.73488 -0.015069 0.863761 -0.501686 -0.0472033 + 2.08649 1.75651 -0.414333 0.941138 0.149615 -0.303108 + 2.1181 1.74126 -0.341513 0.899235 0.173892 -0.401419 + 2.166 1.76363 -0.248856 0.814259 0.2293 -0.533295 + 2.25276 1.80374 -0.126729 0.74387 0.255286 -0.617646 + 2.28136 1.80294 -0.084555 0.80767 -0.122768 -0.576712 + 2.1182 1.78343 -0.313159 0.84332 0.437863 -0.311589 + 2.14095 1.79924 -0.241539 0.524803 0.72091 -0.452627 + 2.17356 1.80731 -0.204712 0.475833 0.696268 -0.537395 + 2.17591 1.86453 -0.096423 -0.0647697 0.957956 -0.27951 + 2.20852 1.87268 -0.059546 0.0192487 0.925546 -0.378146 + 2.26032 1.84742 -0.082585 0.339512 0.733387 -0.588961 + 2.30147 1.86921 -0.036331 0.147606 0.602991 -0.783973 + 2.31679 1.83824 -0.046093 0.406966 0.180917 -0.895348 + 2.15513 1.8594 -0.07235 -0.325661 0.872809 -0.363523 + 2.24968 1.89447 -0.013292 0.0940125 0.61456 -0.783248 + 2.33587 1.87955 -0.031042 0.497156 0.502094 -0.707628 + 2.35118 1.84867 -0.040755 0.740308 0.0524998 -0.670215 + 2.04625 1.81044 -0.084535 -0.29816 0.796579 -0.525892 + 2.14399 1.89124 -0.011488 -0.426955 0.672222 -0.604836 + 2.15986 1.95106 0.0341 -0.269385 0.585088 -0.764921 + 2.19351 1.9624 0.028866 -0.19832 0.533223 -0.822401 + 2.23918 1.92694 0.002671 0.000354123 0.505196 -0.863005 + 1.98549 1.76989 -0.0955 -0.587841 0.68839 -0.424925 + 2.06493 1.93633 0.036612 -0.195793 0.646177 -0.737644 + 2.08081 1.99615 0.0822 -0.248424 0.504436 -0.82694 + 2.10964 2.04865 0.097671 -0.238838 0.542146 -0.805627 + 2.14329 2.05998 0.092438 -0.250881 0.672396 -0.696378 + 1.96656 1.69425 -0.164895 -0.762686 0.585145 -0.275527 + 1.90108 1.7297 -0.05469 -0.416517 0.642807 -0.642894 + 2.00417 1.89569 0.025602 -0.345405 0.624199 -0.700765 + 1.9399 1.94676 0.091551 -0.284117 0.614465 -0.73601 + 2.03839 2.02387 0.109794 -0.271635 0.449645 -0.850902 + 1.95085 1.65504 -0.247183 -0.878572 0.446154 -0.170463 + 1.88215 1.65406 -0.124082 -0.780122 0.366224 -0.507238 + 1.85621 1.7471 -0.020024 -0.479762 0.468106 -0.742095 + 1.95931 1.91309 0.060267 -0.320211 0.539667 -0.778604 + 1.97722 1.697 -0.383658 -0.947737 0.305239 0.0928613 + 1.94178 1.60443 -0.321116 -0.898011 0.439216 -0.0257884 + 1.90366 1.58585 -0.184941 -0.92423 0.210981 -0.318253 + 1.92188 1.68619 -0.662742 -0.868341 0.413427 0.273975 + 1.94453 1.65515 -0.450362 -0.889792 0.427568 0.15955 + 1.90903 1.55894 -0.395126 -0.91421 0.39655 0.0834777 + 1.89458 1.53524 -0.258873 -0.954281 0.295487 -0.045118 + 1.88155 1.734 -0.804341 -0.794698 0.347802 0.497482 + 1.87312 1.63301 -0.700431 -0.829292 0.472889 0.297742 + 1.91178 1.60975 -0.524332 -0.903729 0.362156 0.228289 + 1.88306 1.51248 -0.474651 -0.891369 0.404275 0.204997 + 1.88468 1.48434 -0.340922 -0.971865 0.229913 0.0511796 + 1.92426 1.76755 -0.761852 -0.854154 0.29644 0.427252 + 1.81558 1.806 -0.914846 -0.740293 0.142317 0.657048 + 1.8328 1.68082 -0.84203 -0.808046 0.323488 0.492359 + 1.83001 1.59114 -0.762101 -0.826089 0.462812 0.321531 + 1.86867 1.56779 -0.586052 -0.844081 0.45369 0.285819 + 1.85829 1.83954 -0.872349 -0.723624 0.176787 0.667169 + 1.82242 1.95205 -0.922019 -0.597101 0.00831807 0.802123 + 1.78843 2.05003 -0.946326 -0.823241 -0.0835126 0.561516 + 1.77205 1.97564 -0.98287 -0.795458 0.0273482 0.605391 + 1.79158 1.75343 -0.929793 -0.779573 0.181061 0.599569 + 1.89937 1.94763 -0.852761 -0.777405 -0.0751455 0.624496 + 1.78249 2.30397 -0.901962 -0.855789 -0.0775616 0.511478 + 1.76337 2.3391 -0.950211 -0.922985 -0.04299 0.382427 + 1.74699 2.26462 -0.986805 -0.885803 -0.0371201 0.462575 + 1.77868 2.43366 -0.894787 -0.862155 -0.034492 0.505469 + 1.75957 2.4688 -0.943045 -0.945401 0.024567 0.324983 + 1.73501 2.3795 -1.01098 -0.96367 0.0425334 0.263687 + 1.72145 2.09212 -1.04902 -0.872722 -0.00981404 0.488119 + 1.74805 1.92307 -0.997825 -0.782443 0.0616857 0.61966 + 1.79348 2.48173 -0.873041 -0.788227 0.0169487 0.615151 + 1.77315 2.56887 -0.917576 -0.924316 0.0714179 0.374887 + 1.76627 2.60023 -0.951096 -0.966713 0.117521 0.227277 + 1.75268 2.50015 -0.976557 -0.977098 0.084948 0.195096 + 1.78795 2.61693 -0.89583 -0.881208 0.0900346 0.464075 + 1.78612 2.67697 -0.915407 -0.917066 0.240604 0.317962 + -0.978323 1.56018 -2.29297 -0.735672 0.0373439 0.676308 + -0.957668 1.56216 -2.26916 -0.0867878 0.996198 -0.00755631 + -0.921928 1.56547 -2.2434 -0.595457 -0.177077 0.783629 + -0.995792 1.57698 -2.3158 -0.762851 -0.148632 0.629259 + -1.02102 1.49003 -2.36325 -0.778307 -0.263573 0.569883 + -0.986659 1.48947 -2.32574 -0.652615 -0.40069 0.643071 + -0.966005 1.49145 -2.30192 -0.660713 -0.427226 0.6172 + -0.957668 1.56216 -2.26916 -0.662956 -0.188835 0.724452 + -0.924466 1.62071 -2.22722 -0.605303 -0.230266 0.761962 + -0.987141 1.64227 -2.27943 -0.709784 -0.236276 0.663611 + -1.05303 1.60998 -2.37494 -0.902174 -0.190409 0.387074 + -1.03849 1.50683 -2.38608 -0.952761 -0.158236 0.259244 + -1.02274 1.45627 -2.3887 -0.703906 -0.528012 0.475099 + -0.849891 1.58028 -2.18976 -0.503663 -0.297231 0.811158 + -0.928917 1.65604 -2.22124 -0.63435 -0.211001 0.743692 + -0.991591 1.6776 -2.27344 -0.718364 -0.167692 0.675153 + -1.04438 1.67527 -2.33857 -0.839388 -0.127089 0.528465 + -0.847353 1.52504 -2.20593 -0.332792 -0.401038 0.853474 + -0.803225 1.55777 -2.17385 0.0172905 -0.462384 0.886511 + -0.84721 1.6801 -2.14508 -0.474003 -0.234857 0.848624 + -0.843826 1.74823 -2.12572 -0.536354 -0.115995 0.835984 + -0.925533 1.72417 -2.20189 -0.656415 -0.142547 0.74081 + -0.902662 1.50126 -2.24224 -0.434564 -0.472666 0.766642 + -0.858232 1.50344 -2.22114 -0.267051 -0.57633 0.772352 + -0.820847 1.48452 -2.22826 0.0749807 -0.772945 0.630027 + -0.809967 1.50612 -2.21306 0.117651 -0.606083 0.786652 + -0.938402 1.49795 -2.268 -0.586322 -0.401596 0.703525 + -0.929985 1.47636 -2.28303 -0.154777 -0.895837 0.416557 + -0.916757 1.47828 -2.28659 -0.0562905 -0.980846 0.186472 + -0.895943 1.47159 -2.27488 -0.362217 -0.866165 0.344319 + -0.851514 1.47378 -2.25377 -0.152115 -0.848139 0.507466 + -0.957587 1.46986 -2.31696 -0.242345 -0.862889 0.443499 + -0.923997 1.47581 -2.32931 0.213766 -0.956467 0.198684 + -0.91077 1.47773 -2.33286 0.146659 -0.98545 0.0858982 + -0.904677 1.47752 -2.33118 -0.127075 -0.988903 -0.0769603 + -0.883863 1.47083 -2.31947 -0.463197 -0.878129 -0.11974 + -0.965733 1.4575 -2.3428 -0.0335626 -0.810173 0.585229 + -0.932143 1.46345 -2.35515 0.405092 -0.850522 0.33543 + -0.892145 1.48023 -2.36953 0.239076 -0.968836 0.0648013 + -0.886052 1.48002 -2.36785 -0.267837 -0.943374 -0.195724 + -0.988383 1.4557 -2.35119 -0.419168 -0.648732 0.635173 + -0.962566 1.42692 -2.38639 0.211574 -0.901396 0.377786 + -0.945631 1.42706 -2.41825 0.440494 -0.889389 0.122277 + -0.915207 1.4636 -2.38701 0.523848 -0.807688 0.270598 + -0.985216 1.42513 -2.39478 -0.259437 -0.888376 0.378788 + -0.9951 1.42087 -2.41695 -0.331484 -0.919492 0.211313 + -0.978751 1.41416 -2.43431 -0.00302993 -0.999401 0.0344635 + -0.934111 1.43808 -2.46427 0.461561 -0.883787 -0.076694 + -0.88349 1.46958 -2.43114 0.521108 -0.845238 0.118399 + -1.03263 1.45201 -2.41087 -0.884312 -0.430984 0.17957 + -1.02792 1.43867 -2.43989 -0.804007 -0.571435 -0.164423 + -1.01157 1.43196 -2.45725 -0.557874 -0.766235 -0.318841 + -0.967231 1.42517 -2.48034 0.0462574 -0.893403 -0.446869 + -0.908384 1.45247 -2.48527 0.477693 -0.810585 -0.338766 + -1.03378 1.49348 -2.41509 -0.991537 -0.129274 0.011892 + -1.04434 1.51289 -2.45419 -0.974827 -0.205479 -0.0865535 + -1.02199 1.45065 -2.47566 -0.771623 -0.543072 -0.331165 + -0.977657 1.44386 -2.49875 -0.2131 -0.728745 -0.650784 + -0.918406 1.46792 -2.50923 0.456538 -0.66701 -0.588788 + -1.06358 1.62938 -2.41404 -0.995578 -0.0855496 -0.0388107 + -1.05483 1.64907 -2.44998 -0.93666 0.0643339 -0.344282 + -1.04279 1.55116 -2.48648 -0.930687 -0.0742056 -0.35821 + -1.02045 1.48892 -2.50796 -0.762795 -0.378169 -0.52453 + -1.06608 1.70247 -2.37884 -0.987975 0.0566257 0.143871 + -1.05732 1.72216 -2.41478 -0.929807 0.242186 -0.277137 + -1.0388 1.73244 -2.44884 -0.752109 0.349376 -0.55881 + -1.03766 1.66368 -2.47911 -0.738379 0.212933 -0.639887 + -1.02563 1.56577 -2.51562 -0.787121 0.064665 -0.6134 + -1.05047 1.74166 -2.34976 -0.934652 0.113055 0.337112 + -1.05161 1.76093 -2.37974 -0.934433 0.345113 -0.0879335 + -1.0331 1.77121 -2.41381 -0.791675 0.467505 -0.393306 + -1.02877 1.71446 -2.30948 -0.818322 -0.0733619 0.570059 + -1.01603 1.77596 -2.28519 -0.818803 -0.0235674 0.573591 + -1.03164 1.79677 -2.31524 -0.929254 0.133601 0.344439 + -1.03278 1.81604 -2.34523 -0.936369 0.35019 -0.0241015 + -0.978848 1.7391 -2.24915 -0.709422 -0.115477 0.695259 + -0.965064 1.835 -2.2212 -0.730807 -0.0905793 0.676548 + -0.989996 1.85156 -2.25103 -0.828143 0.0130016 0.560365 + -1.0056 1.87237 -2.28108 -0.929679 0.204244 0.306564 + -0.911749 1.82007 -2.17394 -0.640784 -0.149391 0.753046 + -0.931095 1.93246 -2.16816 -0.732297 -0.11865 0.670569 + -0.956027 1.94903 -2.19799 -0.846892 0.010513 0.531661 + -0.965719 1.96289 -2.21997 -0.932072 0.218976 0.288601 + -1.00478 1.88291 -2.30544 -0.908991 0.414745 -0.0414974 + -0.842307 1.78971 -2.12691 -0.559307 -0.0968779 0.82328 + -0.822741 1.87667 -2.09111 -0.526007 -0.246633 0.813934 + -0.892183 1.90702 -2.13813 -0.64141 -0.186451 0.744197 + -0.887574 2.04071 -2.0992 -0.731235 -0.129121 0.669793 + -0.794844 1.75036 -2.09994 -0.0264171 -0.202189 0.97899 + -0.793324 1.79183 -2.10113 -0.0250974 -0.145366 0.98906 + -0.785415 1.86019 -2.07757 -0.00816341 -0.370813 0.928672 + -0.803301 1.97889 -2.0436 -0.537974 -0.279342 0.795331 + -0.848662 2.01527 -2.06917 -0.64428 -0.211466 0.734973 + -0.78226 1.67854 -2.13192 0.250986 -0.265461 0.93088 + -0.770512 1.76357 -2.10983 0.579467 -0.0807575 0.810985 + -0.772874 1.7934 -2.11132 0.600408 -0.105542 0.792698 + -0.764965 1.86176 -2.08775 0.593107 -0.374126 0.71292 + -0.800543 1.65759 -2.12917 0.00205592 -0.182778 0.983152 + -0.760813 1.57338 -2.19175 0.562037 -0.405248 0.721033 + -0.757929 1.69175 -2.14181 0.651087 -0.240095 0.720028 + -0.733084 1.70668 -2.17051 0.817202 -0.157824 0.554322 + -0.742735 1.77732 -2.13783 0.766605 -0.038325 0.640974 + -0.779096 1.55243 -2.18899 0.50512 -0.496959 0.70561 + -0.785838 1.50078 -2.2282 0.411992 -0.688119 0.59729 + -0.763128 1.50201 -2.24492 0.481373 -0.692752 0.537005 + -0.729885 1.58097 -2.2126 0.696314 -0.353577 0.624604 + -0.705041 1.5959 -2.2413 0.917405 -0.187347 0.351096 + -0.81444 1.45243 -2.30017 0.178553 -0.918884 0.35181 + -0.79173 1.45366 -2.31689 0.393858 -0.891762 0.222792 + -0.732201 1.5096 -2.26577 0.71652 -0.593496 0.366554 + -0.727552 1.50758 -2.29468 0.80966 -0.579632 0.0920732 + -0.697095 1.60853 -2.27505 0.970974 -0.149193 0.186951 + -0.845107 1.44169 -2.32568 -0.230677 -0.965962 0.11707 + -0.787081 1.45164 -2.3458 0.470087 -0.880941 0.0544246 + -0.719606 1.52022 -2.32843 0.817049 -0.561168 0.132371 + -0.869282 1.46545 -2.36408 -0.595181 -0.753412 -0.279517 + -0.830525 1.43631 -2.3703 -0.164754 -0.969015 -0.184027 + -0.77798 1.45808 -2.36581 0.548944 -0.83444 0.0486847 + -0.838544 1.47036 -2.40602 -0.475844 -0.68906 -0.546598 + -0.821425 1.44275 -2.39031 -0.140088 -0.908503 -0.393697 + -0.772387 1.45834 -2.39081 0.45948 -0.888067 0.0146243 + -0.714012 1.52048 -2.35343 0.769923 -0.622796 0.139081 + -0.696508 1.54728 -2.34911 0.957258 -0.288905 0.0138323 + -0.855315 1.48492 -2.40979 -0.309046 -0.880299 -0.359949 + -0.837786 1.48875 -2.43245 -0.0879896 -0.845276 -0.527035 + -0.819265 1.478 -2.42592 -0.202526 -0.646646 -0.735413 + -0.802146 1.45039 -2.41021 0.00245151 -0.858773 -0.512351 + -0.739204 1.4759 -2.4068 0.691214 -0.710953 -0.129494 + -0.860427 1.48621 -2.41366 0.200966 -0.979055 -0.032627 + -0.842899 1.49004 -2.43632 0.260622 -0.942107 -0.210977 + -0.839337 1.49281 -2.43923 0.298526 -0.896703 -0.326812 + -0.833691 1.49043 -2.4341 -0.00796357 -0.763876 -0.645313 + -0.815169 1.47968 -2.42758 -0.105872 -0.607902 -0.786922 + -0.857762 1.48397 -2.45214 0.511881 -0.858352 -0.0347629 + -0.8542 1.48674 -2.45505 0.515106 -0.849605 -0.113297 + -0.829639 1.49942 -2.45521 0.302403 -0.935282 -0.183849 + -0.821802 1.49881 -2.44856 0.105673 -0.922353 -0.371616 + -0.816156 1.49644 -2.44343 -0.0263318 -0.810131 -0.585658 + -0.852274 1.49029 -2.4762 0.49115 -0.793029 -0.360384 + -0.827713 1.50296 -2.47636 0.420363 -0.700806 -0.576338 + -0.799746 1.50878 -2.47087 0.361619 -0.634493 -0.683118 + -0.791909 1.50818 -2.46422 0.280423 -0.689507 -0.667789 + -0.862296 1.50574 -2.50017 0.449318 -0.395313 -0.80115 + -0.823302 1.53265 -2.48298 0.410897 -0.153139 -0.898728 + -0.795335 1.53847 -2.47749 0.307128 -0.0294234 -0.951213 + -0.775175 1.53447 -2.46828 0.392769 -0.102806 -0.913873 + -0.783568 1.50665 -2.4605 0.132566 -0.583799 -0.801002 + -0.873375 1.55246 -2.51634 0.601034 -0.153906 -0.784265 + -0.834381 1.57937 -2.49915 0.524368 -0.0215471 -0.851219 + -0.787825 1.60187 -2.46326 0.475107 0.090796 -0.875231 + -0.767666 1.59787 -2.45405 0.634915 0.211303 -0.743124 + -0.766835 1.53293 -2.46456 0.568836 -0.0943859 -0.817017 + -0.898718 1.51097 -2.53465 0.750577 -0.39981 -0.526104 + -0.906936 1.54814 -2.54853 0.666973 -0.145621 -0.730713 + -0.881593 1.58963 -2.53022 0.624693 0.0651682 -0.778146 + -0.856116 1.63222 -2.50569 0.509991 0.178057 -0.841549 + -0.80956 1.65472 -2.4698 0.570199 0.200911 -0.79656 + -0.94644 1.46103 -2.5276 0.198247 -0.852294 -0.484038 + -0.926752 1.50408 -2.55302 0.524936 -0.451182 -0.721718 + -0.938077 1.51208 -2.56524 0.223468 -0.262323 -0.938749 + -0.91826 1.55614 -2.56075 0.399215 0.0428475 -0.915856 + -0.969331 1.45617 -2.51773 -0.152062 -0.801907 -0.577774 + -0.965799 1.50478 -2.56146 -0.191097 -0.30805 -0.93198 + -1.01213 1.50124 -2.52694 -0.737201 -0.30711 -0.601845 + -0.988691 1.49992 -2.55159 -0.499773 -0.35886 -0.788319 + -0.971973 1.56406 -2.55641 -0.321586 0.181791 -0.929265 + -0.944251 1.57137 -2.56018 -0.0446945 0.23323 -0.971394 + -0.911747 1.64053 -2.53192 0.30084 0.302379 -0.904468 + -1.00219 1.56445 -2.54027 -0.600184 0.143902 -0.786811 + -0.972498 1.66507 -2.51892 -0.339214 0.34905 -0.873555 + -0.937738 1.65575 -2.53135 -0.0166662 0.352514 -0.935658 + -0.886271 1.68311 -2.50739 0.35738 0.274521 -0.892702 + -1.00271 1.66546 -2.50279 -0.500502 0.310935 -0.807971 + -0.964559 1.72626 -2.49555 -0.276415 0.374294 -0.885155 + -0.929799 1.71694 -2.50798 0.0111196 0.449004 -0.893461 + -0.862776 1.70508 -2.49231 0.432013 0.303466 -0.849278 + -1.00386 1.73423 -2.47251 -0.489415 0.318101 -0.811963 + -0.962286 1.76365 -2.48349 -0.200547 0.42083 -0.884694 + -0.906304 1.73891 -2.4929 0.207584 0.432738 -0.877295 + -0.827699 1.73417 -2.4562 0.525142 0.363281 -0.76958 + -1.00159 1.77161 -2.46045 -0.540087 0.462084 -0.703409 + -0.987716 1.82698 -2.4258 -0.574031 0.540817 -0.614822 + -0.95015 1.82306 -2.44983 -0.17298 0.542358 -0.822147 + -0.894168 1.79832 -2.45924 0.261396 0.454127 -0.851728 + -0.833309 1.79061 -2.43007 0.507059 0.401788 -0.762534 + -1.01923 1.82657 -2.37916 -0.805096 0.481279 -0.346685 + -0.99123 1.89345 -2.33937 -0.814683 0.50723 -0.281085 + -0.968212 1.90539 -2.37411 -0.614985 0.575999 -0.538534 + -0.930646 1.90147 -2.39814 -0.214773 0.59214 -0.776687 + -0.954505 1.98373 -2.26926 -0.808143 0.543176 -0.227737 + -0.931487 1.99567 -2.304 -0.615686 0.644897 -0.452812 + -0.904952 1.99817 -2.32179 -0.254399 0.684437 -0.683247 + -0.890894 1.89819 -2.40346 0.176766 0.528986 -0.830016 + -0.830036 1.89047 -2.37428 0.530299 0.447076 -0.720351 + -0.964897 1.97343 -2.24433 -0.902333 0.430659 -0.0181286 + -0.901535 2.09321 -2.17986 -0.786094 0.58543 -0.198312 + -0.885057 2.10202 -2.20443 -0.598458 0.68725 -0.411746 + -0.858522 2.10453 -2.22223 -0.212597 0.734758 -0.644153 + -0.8652 1.99489 -2.32711 0.225469 0.599496 -0.767964 + -0.91318 2.07301 -2.13887 -0.921443 0.240205 0.30536 + -0.911928 2.08291 -2.15493 -0.888448 0.45875 0.0144434 + -0.846882 2.19034 -2.0862 -0.757821 0.633696 -0.155358 + -0.830403 2.19916 -2.11077 -0.558099 0.738657 -0.378035 + -0.903487 2.05914 -2.11689 -0.839413 0.0153026 0.543278 + -0.855559 2.1726 -2.05312 -0.901624 0.272233 0.336101 + -0.854308 2.1825 -2.06918 -0.861094 0.50607 0.0490848 + -0.784599 2.27812 -1.99735 -0.723949 0.679316 -0.120111 + -0.833506 2.14229 -2.0213 -0.7259 -0.122689 0.676769 + -0.849419 2.16073 -2.03899 -0.828673 0.0347784 0.558651 + -0.79287 2.26359 -1.96948 -0.87785 0.31294 0.362557 + -0.792025 2.27028 -1.98033 -0.831938 0.548371 0.084665 + -0.807843 2.11933 -2.00318 -0.645171 -0.210074 0.73459 + -0.775984 2.23927 -1.94341 -0.714757 -0.0973061 0.692571 + -0.78673 2.25172 -1.95535 -0.811373 0.0620697 0.581224 + -0.753638 2.31157 -1.92174 -0.735604 0.484882 0.47305 + -0.752792 2.31826 -1.93259 -0.680276 0.703568 0.205468 + -0.762482 2.08295 -1.97761 -0.537501 -0.292838 0.790783 + -0.719688 2.19174 -1.90802 -0.530579 -0.273299 0.802368 + -0.75032 2.21631 -1.92529 -0.633662 -0.191531 0.749525 + -0.721864 2.27609 -1.88848 -0.530824 0.00852193 0.847439 + -0.738832 2.29127 -1.90046 -0.603796 0.0915941 0.791859 + -0.765975 1.96241 -2.03005 -0.0227249 -0.454939 0.890233 + -0.737599 2.0674 -1.97035 -0.0462216 -0.50535 0.861676 + -0.694806 2.17619 -1.90076 -0.0208488 -0.497499 0.867214 + -0.691231 2.25153 -1.8712 -0.399405 -0.0527992 0.915253 + -0.751927 1.96167 -2.03831 0.57048 -0.469926 0.673589 + -0.723551 2.06666 -1.9786 0.54645 -0.554354 0.62776 + -0.685319 2.17569 -1.90633 0.545468 -0.553316 0.629529 + -0.665293 2.24074 -1.87198 0.616946 -0.229921 0.752671 + -0.67478 2.24124 -1.86641 0.0906377 -0.201489 0.975288 + -0.743434 1.86794 -2.11017 0.771105 -0.326619 0.546551 + -0.730396 1.96785 -2.06072 0.757156 -0.414665 0.504745 + -0.708674 2.0705 -1.99447 0.730836 -0.504805 0.459402 + -0.670442 2.17954 -1.9222 0.731534 -0.50667 0.456228 + -0.745097 1.80715 -2.13932 0.782187 -0.101768 0.614676 + -0.713282 1.88189 -2.15177 0.919165 -0.215541 0.329664 + -0.708922 1.97778 -2.09036 0.904023 -0.306665 0.297823 + -0.687199 2.08044 -2.0241 0.885236 -0.395453 0.244895 + -0.65594 2.18625 -1.94222 0.8797 -0.405933 0.247681 + -0.714945 1.8211 -2.18093 0.908057 0.0103445 0.418719 + -0.705524 1.89749 -2.18565 0.999195 0.00369994 -0.0399548 + -0.701163 1.99338 -2.12423 0.99554 -0.0675015 -0.0658986 + -0.681391 2.09276 -2.04693 0.981635 -0.155672 -0.110267 + -0.706562 1.80358 -2.18817 0.901448 0.0921141 0.422974 + -0.696663 1.81764 -2.23517 0.96056 0.278069 0.00165307 + -0.705046 1.83516 -2.22793 0.973749 0.22752 -0.00694964 + -0.718511 1.91654 -2.22502 0.886919 0.240021 -0.39467 + -0.708769 2.01287 -2.1491 0.898348 0.18185 -0.399876 + -0.696911 1.73294 -2.22085 0.936618 -0.0934312 0.337665 + -0.690782 1.74648 -2.26215 0.996843 0.0634328 -0.0477425 + -0.710402 1.81461 -2.29184 0.862524 0.32148 -0.390772 + -0.718033 1.85421 -2.2673 0.862475 0.331309 -0.382586 + -0.690965 1.62207 -2.31635 0.998923 -0.0164482 -0.0433782 + -0.704521 1.74345 -2.31883 0.910927 0.204912 -0.358082 + -0.748398 1.76289 -2.37486 0.682017 0.34605 -0.644284 + -0.754009 1.81933 -2.34872 0.681665 0.404008 -0.610008 + -0.761639 1.85892 -2.32418 0.695985 0.433864 -0.572159 + -0.696827 1.64032 -2.34079 0.954217 0.102061 -0.281164 + -0.711705 1.63495 -2.37702 0.851026 0.138091 -0.506642 + -0.719399 1.73808 -2.35506 0.802015 0.338053 -0.492434 + -0.70237 1.56553 -2.37354 0.921939 -0.00122586 -0.387333 + -0.719395 1.57264 -2.40035 0.810744 0.0651058 -0.581769 + -0.745485 1.659 -2.4139 0.723251 0.197655 -0.661695 + -0.774483 1.6838 -2.4337 0.635835 0.256915 -0.72781 + -0.721699 1.50269 -2.40248 0.885695 -0.348526 -0.306716 + -0.738725 1.5098 -2.42928 0.774464 -0.152584 -0.613941 + -0.753175 1.59668 -2.43723 0.744829 0.155501 -0.648883 + -0.756482 1.47811 -2.43653 0.416224 -0.613345 -0.671242 + -0.752344 1.53175 -2.44773 0.778281 -0.026552 -0.627355 + -0.768963 1.46795 -2.4262 0.166699 -0.821156 -0.545816 + -0.802688 1.48985 -2.43791 -0.105407 -0.689741 -0.716343 + -0.770101 1.50006 -2.45498 0.286894 -0.491131 -0.822485 + -0.820298 1.97496 -2.31063 0.563242 0.456573 -0.688694 + -0.751901 1.94341 -2.26053 0.733487 0.358551 -0.577441 + -0.78673 2.07714 -2.21228 0.592425 0.450911 -0.667617 + -0.742159 2.03974 -2.18461 0.74734 0.340538 -0.57054 + -0.688997 2.11225 -2.0718 0.893224 0.123075 -0.432439 + -0.831632 2.09707 -2.22876 0.256402 0.629752 -0.733261 + -0.75542 2.17348 -2.12149 0.60167 0.431034 -0.67246 + -0.710849 2.13608 -2.09381 0.750729 0.296103 -0.590532 + -0.655268 2.21173 -1.98184 0.897818 0.111921 -0.425907 + -0.650131 2.19857 -1.96504 0.980032 -0.161755 -0.11564 + -0.812239 2.19972 -2.1238 -0.187112 0.768747 -0.611569 + -0.785349 2.19226 -2.13034 0.282734 0.632751 -0.720894 + -0.707219 2.26081 -2.02254 0.612771 0.434798 -0.659896 + -0.67712 2.23555 -2.00384 0.750541 0.302056 -0.587751 + -0.64225 2.2713 -1.93437 0.917244 0.28733 -0.275871 + -0.755307 2.28464 -2.02698 -0.157226 0.801736 -0.576628 + -0.737148 2.2796 -2.03139 0.292386 0.657328 -0.694573 + -0.686797 2.31231 -1.96761 0.634707 0.572917 -0.518568 + -0.656699 2.28706 -1.94892 0.783717 0.435912 -0.442458 + -0.773471 2.28407 -2.01394 -0.529881 0.778732 -0.335862 + -0.724745 2.32977 -1.96905 -0.072796 0.913511 -0.400248 + -0.706586 2.32474 -1.97346 0.349314 0.770202 -0.533637 + -0.701295 2.32979 -1.95471 0.407993 0.909048 -0.0846973 + -0.681506 2.31737 -1.94886 0.622813 0.776928 -0.0921282 + -0.747882 2.32345 -1.94384 -0.580374 0.81407 0.0213808 + -0.736754 2.3294 -1.96044 -0.394038 0.90037 -0.184573 + -0.712922 2.33301 -1.95189 0.152201 0.98824 0.0147047 + -0.702805 2.32088 -1.92498 0.27044 0.870804 0.410564 + -0.691178 2.31766 -1.92781 0.413452 0.840047 0.351253 + -0.732056 2.32883 -1.93265 -0.165332 0.941457 0.293808 + -0.724931 2.33264 -1.94327 -0.0686573 0.982872 0.171023 + -0.736966 2.32364 -1.92139 -0.244051 0.874902 0.418313 + -0.70993 2.31707 -1.91436 0.201495 0.844749 0.495781 + -0.737508 2.31936 -1.91445 -0.294043 0.749937 0.592564 + -0.710472 2.31279 -1.90741 0.164396 0.784888 0.597431 + -0.668617 2.29306 -1.90509 0.481994 0.723886 0.493629 + -0.671906 2.30149 -1.91584 0.479355 0.787921 0.386522 + -0.662234 2.30119 -1.93689 0.700092 0.712291 -0.0501296 + -0.749578 2.30373 -1.9124 -0.689121 0.259375 0.676637 + -0.733448 2.31151 -1.9051 -0.284337 0.59437 0.752248 + -0.726568 2.30354 -1.89746 -0.241862 0.496269 0.833798 + -0.703591 2.30482 -1.89977 0.188003 0.735029 0.65145 + -0.709599 2.28836 -1.88548 -0.18386 0.433298 0.882297 + -0.683977 2.28909 -1.88871 0.261307 0.695252 0.669585 + -0.689985 2.27263 -1.87442 -0.112013 0.404329 0.907729 + -0.673534 2.26235 -1.86962 0.222924 0.348046 0.910587 + -0.677903 2.28876 -1.89228 0.417893 0.701664 0.57709 + -0.66746 2.26203 -1.87319 0.563196 0.358057 0.744718 + -0.657623 2.26457 -1.88368 0.65981 0.377538 0.649705 + -0.648337 2.26887 -1.89649 0.740199 0.40184 0.5391 + -0.644497 2.27701 -1.91159 0.813221 0.500292 0.297287 + -0.647785 2.28544 -1.92234 0.783983 0.614324 0.0893147 + -0.655456 2.24329 -1.88247 0.77951 -0.194699 0.595363 + -0.640954 2.24999 -1.90248 0.914357 -0.116579 0.387764 + -0.637114 2.25814 -1.91758 0.996337 0.0638149 0.0569169 + 0.836968 1.58108 -2.53408 -0.529244 -0.278961 -0.8013 + 0.849002 1.58689 -2.54405 -0.231101 -0.923839 -0.305145 + 0.870453 1.57278 -2.5533 -0.161916 -0.811215 0.561883 + 0.858967 1.55925 -2.59536 -0.480914 -0.834799 0.268014 + 0.892878 1.52828 -2.6236 -0.3311 -0.925079 0.186016 + 0.907121 1.53929 -2.58384 -0.0693211 -0.836373 0.54376 + 0.917493 1.56796 -2.55886 0.40571 -0.477343 0.77945 + 0.880826 1.60145 -2.52833 0.306076 -0.477655 0.823507 + 0.853085 1.62012 -2.50619 0.44327 -0.399519 0.802432 + 0.82717 1.59283 -2.50967 0.356478 -0.630121 0.689834 + 0.836968 1.58108 -2.53408 0.300681 -0.889637 0.34371 + 0.837516 1.57337 -2.58611 -0.143927 -0.947201 0.286522 + 0.846625 1.56037 -2.63923 -0.487877 -0.87038 0.0664382 + 0.880536 1.52939 -2.66746 -0.376819 -0.916215 -0.136225 + 0.920106 1.53063 -2.67928 0.25347 -0.92227 -0.291841 + 0.920658 1.52071 -2.64289 0.146261 -0.984981 -0.0917605 + 0.831839 1.57414 -2.58139 0.293109 -0.940601 0.171338 + 0.825704 1.57004 -2.59471 0.15939 -0.987205 0.00451157 + 0.831381 1.56927 -2.59942 -0.046646 -0.987739 0.148982 + 0.819805 1.56833 -2.57142 0.461567 -0.886976 0.0151249 + 0.800317 1.56093 -2.58798 0.33693 -0.920816 -0.196407 + 0.824463 1.57049 -2.59732 0.065448 -0.989332 -0.130146 + 0.819686 1.57149 -2.61797 0.0288438 -0.996895 -0.0732735 + 0.826604 1.57027 -2.62008 -0.291709 -0.956182 0.0249299 + 0.78938 1.55013 -2.54623 0.299884 -0.920252 0.251408 + 0.769892 1.54273 -2.56278 0.119963 -0.989273 0.083352 + 0.73635 1.54179 -2.59341 -0.00512646 -0.999904 -0.012889 + 0.799076 1.56137 -2.59059 0.274611 -0.92913 -0.247601 + 0.779582 1.56188 -2.52182 0.125974 -0.800099 0.586491 + 0.749654 1.56542 -2.51827 -0.173842 -0.78436 0.595448 + 0.725127 1.55751 -2.54698 -0.31064 -0.85028 0.424883 + 0.691584 1.55657 -2.57761 -0.497564 -0.834238 0.237648 + 0.721856 1.54442 -2.62195 -0.088708 -0.988174 -0.125074 + 0.780614 1.61533 -2.47378 0.161607 -0.480563 0.861941 + 0.750687 1.61887 -2.47023 -0.113863 -0.503501 0.856459 + 0.707459 1.60697 -2.49548 -0.482508 -0.520281 0.704623 + 0.682931 1.59906 -2.52419 -0.5862 -0.583065 0.562499 + 0.806529 1.64262 -2.4703 0.324654 -0.309088 0.893904 + 0.808238 1.67943 -2.46158 0.405139 -0.269722 0.873563 + 0.753714 1.67357 -2.44263 -0.0881242 -0.288874 0.953303 + 0.710487 1.66167 -2.46787 -0.423221 -0.374537 0.824989 + 0.883239 1.67101 -2.50788 0.520974 -0.222013 0.824194 + 0.884948 1.70783 -2.49917 0.520417 -0.0886289 0.849301 + 0.885501 1.73942 -2.50075 0.57843 -0.174445 0.796861 + 0.825457 1.74618 -2.44792 0.484661 -0.335141 0.80795 + 0.770933 1.74032 -2.42897 0.206856 -0.404116 0.891011 + 0.91098 1.65235 -2.53002 0.593177 -0.208412 0.777628 + 0.932378 1.72366 -2.53138 0.622406 -0.100417 0.776226 + 0.932931 1.75525 -2.53296 0.557635 -0.103001 0.823671 + 0.930384 1.78543 -2.5186 0.663167 -0.368326 0.651572 + 0.890599 1.77759 -2.4862 0.595131 -0.436902 0.674489 + 0.937477 1.56351 -2.58027 0.750783 -0.325756 0.574637 + 0.930964 1.6479 -2.55143 0.743431 -0.188964 0.641563 + 0.93984 1.68266 -2.55103 0.721776 -0.21694 0.657249 + 0.96552 1.74357 -2.55903 0.760425 -0.111008 0.639868 + 0.952752 1.77705 -2.54377 0.731841 -0.131457 0.668676 + 0.9349 1.53172 -2.60313 0.49009 -0.786692 0.375403 + 0.960761 1.58365 -2.61395 0.923558 -0.230741 0.306268 + 0.969637 1.61842 -2.61355 0.847841 -0.275641 0.452976 + 0.972983 1.70257 -2.57868 0.819259 -0.171981 0.547026 + 0.958184 1.55185 -2.63682 0.885324 -0.463885 0.0318226 + 0.957632 1.56178 -2.6732 0.80879 -0.587373 -0.0291866 + 0.986209 1.61679 -2.64923 0.910859 -0.341267 0.232106 + 0.989555 1.70095 -2.61435 0.906179 -0.182344 0.381562 + 0.987338 1.76658 -2.58585 0.858615 -0.0559184 0.509562 + 0.96237 1.56839 -2.71456 0.676905 -0.694211 -0.244687 + 0.990947 1.6234 -2.69058 0.952436 -0.304419 -0.0139587 + 1.00914 1.71738 -2.65557 0.97822 -0.14128 0.152072 + 1.00693 1.78301 -2.62707 0.966659 0.0356724 0.253569 + 0.907131 1.55762 -2.73451 0.0904279 -0.865588 -0.492524 + 0.912271 1.57791 -2.76563 0.193799 -0.752384 -0.629572 + 0.967511 1.58868 -2.74568 0.686138 -0.576451 -0.443755 + 0.990624 1.64064 -2.72722 0.944689 -0.219302 -0.243862 + 1.00882 1.73461 -2.6922 0.971831 0.0351207 -0.233048 + 0.867561 1.55638 -2.72269 -0.333967 -0.869329 -0.364325 + 0.886801 1.59359 -2.78687 0.0484448 -0.69519 -0.717192 + 0.96149 1.61897 -2.77657 0.631099 -0.349328 -0.692592 + 0.984603 1.67093 -2.75811 0.85292 -0.0351305 -0.520858 + 0.835961 1.56237 -2.67765 -0.422165 -0.899461 -0.112901 + 0.821584 1.58909 -2.72284 -0.577195 -0.741375 -0.342358 + 0.853184 1.5831 -2.76788 -0.337355 -0.796361 -0.501998 + 0.815939 1.57227 -2.6585 -0.281784 -0.95886 -0.0344407 + 0.80924 1.57376 -2.67852 0.0286495 -0.967249 -0.252208 + 0.806055 1.59391 -2.7076 -0.388355 -0.778758 -0.492663 + 0.812135 1.63108 -2.78261 -0.707527 -0.461325 -0.535336 + 0.828764 1.61901 -2.79522 -0.524726 -0.545668 -0.653383 + 0.808282 1.57371 -2.65728 0.0102338 -0.997671 -0.0674312 + 0.801583 1.5752 -2.67731 0.0205262 -0.985793 -0.166709 + 0.801867 1.57579 -2.67967 0.00979677 -0.909811 -0.414907 + 0.798681 1.59594 -2.70875 0.0660528 -0.814171 -0.576856 + 0.796606 1.6359 -2.76737 -0.555843 -0.550282 -0.62308 + 0.784583 1.564 -2.61912 0.258324 -0.950155 -0.174565 + 0.773179 1.56623 -2.65844 0.224088 -0.959351 -0.171553 + 0.772061 1.57169 -2.68612 0.196159 -0.958583 -0.206494 + 0.772345 1.57227 -2.68849 0.26389 -0.891924 -0.367198 + 0.710069 1.55321 -2.66353 -0.148991 -0.973818 -0.171698 + 0.708951 1.55867 -2.69122 -0.245517 -0.893039 -0.377098 + 0.727387 1.56891 -2.7187 -0.0782791 -0.839603 -0.537531 + 0.734684 1.58857 -2.74297 -0.0566682 -0.63082 -0.773857 + 0.779641 1.59193 -2.71276 0.340283 -0.759882 -0.553884 + 0.671648 1.56884 -2.61368 -0.625943 -0.778312 0.0492529 + 0.659861 1.57763 -2.65526 -0.737212 -0.640644 -0.214694 + 0.667228 1.59578 -2.68959 -0.752914 -0.411699 -0.513443 + 0.685665 1.60601 -2.71707 -0.68077 -0.34087 -0.648352 + 0.706759 1.60945 -2.73933 -0.543492 -0.296008 -0.785491 + 0.627933 1.62419 -2.59563 -0.911088 -0.408095 0.0581156 + 0.628581 1.65253 -2.63233 -0.947183 -0.205286 -0.246379 + 0.635948 1.67068 -2.66666 -0.883542 -0.122301 -0.452101 + 0.658122 1.69592 -2.69818 -0.766696 0.0031688 -0.642002 + 0.679217 1.69936 -2.72044 -0.60579 0.089137 -0.790615 + 0.647869 1.61192 -2.55956 -0.765996 -0.521087 0.376455 + 0.632771 1.68983 -2.52035 -0.78935 -0.323772 0.52163 + 0.607579 1.71319 -2.55455 -0.966156 -0.189301 0.175234 + 0.608227 1.74153 -2.59125 -0.991388 -0.088012 -0.096973 + 0.612124 1.75432 -2.62735 -0.939314 -0.00908203 -0.342937 + 0.667834 1.67697 -2.48499 -0.618388 -0.348957 0.704149 + 0.690167 1.76568 -2.43545 -0.52172 -0.358107 0.774317 + 0.635957 1.81583 -2.45391 -0.735904 -0.295343 0.609276 + 0.610765 1.83919 -2.48811 -0.915532 -0.185415 0.356964 + 0.732821 1.75039 -2.41834 -0.17546 -0.43856 0.881407 + 0.743447 1.80265 -2.39067 -0.177277 -0.554538 0.813056 + 0.697106 1.83315 -2.39531 -0.522479 -0.473941 0.708799 + 0.642895 1.8833 -2.41377 -0.734475 -0.356784 0.57728 + 0.78156 1.79259 -2.4013 0.24011 -0.578732 0.779369 + 0.783061 1.81933 -2.37746 0.237475 -0.558674 0.794663 + 0.744899 1.82951 -2.36703 -0.169312 -0.551006 0.817145 + 0.698558 1.86001 -2.37167 -0.518317 -0.457142 0.722751 + 0.830554 1.78436 -2.43336 0.469313 -0.50653 0.723307 + 0.832056 1.8111 -2.40953 0.481788 -0.512384 0.710875 + 0.78561 1.86204 -2.35542 0.304196 -0.392347 0.86806 + 0.747448 1.87221 -2.34499 -0.0968603 -0.380952 0.919507 + 0.703661 1.89229 -2.35301 -0.443742 -0.315421 0.83881 + 0.891714 1.80518 -2.46391 0.584491 -0.464796 0.665083 + 0.890927 1.85616 -2.43603 0.625132 -0.338618 0.703241 + 0.831269 1.86208 -2.38165 0.535945 -0.351631 0.76754 + 0.786437 1.92585 -2.33228 0.317231 -0.374022 0.871477 + 0.931499 1.81302 -2.49631 0.685991 -0.419362 0.594602 + 0.927125 1.86591 -2.46471 0.676861 -0.311731 0.666846 + 0.884337 1.94192 -2.39379 0.623156 -0.304589 0.720349 + 0.832096 1.92589 -2.35851 0.537725 -0.320904 0.779661 + 0.951119 1.83526 -2.50792 0.815294 -0.309731 0.489247 + 0.946745 1.88814 -2.47632 0.799019 -0.214216 0.561854 + 0.933809 1.95831 -2.43594 0.814003 -0.175048 0.553857 + 0.920535 1.95166 -2.42247 0.698709 -0.268539 0.663093 + 0.871366 2.01493 -2.35083 0.614805 -0.326722 0.717821 + 0.950205 1.80722 -2.5294 0.806295 -0.292485 0.514141 + 0.967303 1.83543 -2.5493 0.906405 -0.180151 0.382067 + 0.968217 1.86347 -2.52782 0.918564 -0.192238 0.345377 + 0.960645 1.90798 -2.49709 0.905291 -0.092692 0.414555 + 0.974569 1.80005 -2.57059 0.84144 -0.0289492 0.539574 + 0.982019 1.86931 -2.57694 0.974105 -0.0520607 0.22002 + 0.982453 1.8984 -2.55738 0.978268 -0.059994 0.198475 + 0.97488 1.94291 -2.52665 0.959882 0.0580655 0.274326 + 0.989285 1.83393 -2.59822 0.949207 0.0791123 0.304544 + 0.984638 1.89665 -2.60977 0.994851 0.0930935 -0.0400536 + 0.985072 1.92573 -2.59022 0.992818 0.117399 -0.0230152 + 0.976227 1.96522 -2.5583 0.968177 0.245205 0.050083 + 0.956177 1.99368 -2.48517 0.961038 0.109783 0.253678 + 1.00836 1.80441 -2.66154 0.964083 0.230153 -0.132563 + 0.99072 1.85533 -2.63269 0.977796 0.209208 -0.0120721 + 0.975678 1.9163 -2.64574 0.938999 0.220034 -0.264322 + 0.975559 1.9466 -2.6284 0.934168 0.263886 -0.240196 + 0.966714 1.98608 -2.59648 0.907218 0.393033 -0.149937 + 0.98876 1.82 -2.69461 0.856976 0.286266 -0.428536 + 0.98176 1.87498 -2.66866 0.911828 0.264892 -0.313692 + 0.960655 1.93025 -2.67183 0.763613 0.325428 -0.557666 + 0.960536 1.96055 -2.6545 0.773513 0.411801 -0.481766 + 0.989218 1.75021 -2.72527 0.836597 0.193717 -0.512424 + 0.967167 1.83358 -2.72033 0.682186 0.333391 -0.650748 + 0.960167 1.88856 -2.69438 0.71344 0.349019 -0.60761 + 0.939981 1.93761 -2.6864 0.449762 0.420299 -0.788076 + 0.939594 1.96849 -2.67014 0.428185 0.548653 -0.718079 + 0.959759 1.68877 -2.78486 0.66902 0.0857639 -0.73828 + 0.964374 1.76805 -2.75202 0.665187 0.286628 -0.689471 + 0.930033 1.84529 -2.73959 0.356475 0.425539 -0.831771 + 0.939493 1.89591 -2.70895 0.426344 0.422212 -0.79998 + 0.894775 1.92671 -2.70593 0.193933 0.417535 -0.887724 + 0.93602 1.63465 -2.79782 0.474063 -0.30298 -0.826721 + 0.92314 1.70255 -2.80862 0.416158 0.195859 -0.887948 + 0.92724 1.77977 -2.77129 0.407635 0.381528 -0.82962 + 0.895508 1.7952 -2.77479 0.0612267 0.434692 -0.898496 + 0.886814 1.83889 -2.75243 -0.0258629 0.491093 -0.870723 + 0.899401 1.64843 -2.82158 0.219461 -0.216447 -0.951308 + 0.891408 1.71798 -2.81212 0.0331725 0.35334 -0.934907 + 0.853578 1.78375 -2.77168 -0.274737 0.406796 -0.871227 + 0.844884 1.82745 -2.74932 -0.141503 0.332949 -0.932267 + 0.896273 1.88951 -2.72178 0.120896 0.43092 -0.894255 + 0.862381 1.6295 -2.81421 -0.150587 -0.418167 -0.895801 + 0.840681 1.667 -2.81473 -0.305041 0.0662291 -0.950034 + 0.877702 1.68593 -2.82211 -0.053599 0.177384 -0.982681 + 0.839872 1.7517 -2.78167 -0.333201 0.384723 -0.860793 + 0.785028 1.76407 -2.74993 -0.352535 0.220555 -0.909436 + 0.822798 1.66471 -2.80807 -0.511128 -0.0265206 -0.859095 + 0.806169 1.67678 -2.79547 -0.583979 0.0337159 -0.811068 + 0.821988 1.74942 -2.77501 -0.391889 0.391583 -0.832518 + 0.798455 1.68053 -2.78978 -0.573549 0.0465163 -0.81785 + 0.814274 1.75317 -2.76932 -0.550827 0.26096 -0.792773 + 0.791942 1.67972 -2.78532 -0.57781 0.0178925 -0.815975 + 0.806332 1.74827 -2.76421 -0.558725 0.207544 -0.802964 + 0.790093 1.63509 -2.76291 -0.0450581 -0.654894 -0.754376 + 0.783999 1.67483 -2.78021 -0.520899 0.00297168 -0.853613 + 0.766685 1.66096 -2.76934 -0.45916 0.0390612 -0.887495 + 0.745381 1.67676 -2.75506 -0.413751 0.191193 -0.890087 + 0.771053 1.63108 -2.76692 -0.0260312 -0.453194 -0.891032 + 0.753738 1.61722 -2.75605 -0.3947 -0.145953 -0.907144 + 0.725814 1.6381 -2.75241 -0.413907 -0.0494596 -0.908974 + 0.698784 1.73801 -2.7231 -0.482258 0.193695 -0.854347 + 0.634298 1.77956 -2.65887 -0.803022 0.0927684 -0.588685 + 0.70475 1.77673 -2.71907 -0.465112 0.121587 -0.876862 + 0.790993 1.80279 -2.74591 -0.195927 0.110458 -0.974377 + 0.602519 1.85409 -2.57044 -0.989775 -0.0171107 -0.141611 + 0.60743 1.84952 -2.60037 -0.940452 -0.0136382 -0.339653 + 0.625217 1.86462 -2.62128 -0.741903 0.261455 -0.617432 + 0.652085 1.79466 -2.67979 -0.690009 0.0510876 -0.721996 + 0.598621 1.84131 -2.53434 -0.993402 -0.0891303 0.0721672 + 0.599069 1.91403 -2.49513 -0.991341 0.0147544 0.130479 + 0.59704 1.91508 -2.53562 -0.994661 0.0833361 -0.0608726 + 0.601951 1.91051 -2.56554 -0.917656 0.185892 -0.351216 + 0.611212 1.91192 -2.4489 -0.902772 -0.222533 0.368078 + 0.611993 1.94024 -2.42795 -0.930858 -0.0550729 0.361208 + 0.606495 1.95083 -2.4826 -0.975055 0.202647 0.0905612 + 0.604467 1.95189 -2.52309 -0.957179 0.280245 -0.072603 + 0.643676 1.91163 -2.39283 -0.727034 -0.314237 0.610472 + 0.620815 1.96969 -2.40936 -0.905041 0.145275 0.399743 + 0.615318 1.98028 -2.46401 -0.950925 0.289127 0.110213 + 0.616228 1.99017 -2.50007 -0.906227 0.416864 -0.070542 + 0.609082 1.94796 -2.55421 -0.851563 0.370101 -0.371302 + 0.64878 1.9439 -2.37416 -0.698782 -0.156308 0.698048 + 0.632582 1.99022 -2.39685 -0.935138 0.0330864 0.352735 + 0.63063 2.01243 -2.43561 -0.979628 0.181901 0.0850901 + 0.631541 2.02232 -2.47167 -0.948994 0.311316 -0.0499301 + 0.620843 1.98625 -2.53119 -0.79502 0.509016 -0.329918 + 0.710074 1.94569 -2.33546 -0.440496 -0.369597 0.818145 + 0.660547 1.96443 -2.36165 -0.676542 -0.246812 0.693811 + 0.635489 2.025 -2.36662 -0.945593 -0.235756 0.224217 + 0.633538 2.0472 -2.40539 -0.999492 -0.0199863 -0.0248049 + 0.63553 2.06394 -2.43221 -0.985003 0.0954169 -0.143749 + 0.753861 1.92561 -2.32744 -0.0779226 -0.387061 0.918756 + 0.70905 1.98909 -2.30845 -0.435597 -0.536 0.723159 + 0.659523 2.00784 -2.33464 -0.696934 -0.465806 0.545259 + 0.62777 2.06848 -2.32943 -0.934597 -0.315599 0.16409 + 0.779803 1.98534 -2.30028 0.304596 -0.458945 0.83462 + 0.747227 1.9851 -2.29544 -0.0902986 -0.542122 0.835434 + 0.694494 2.04529 -2.26765 -0.417284 -0.624472 0.660234 + 0.651803 2.05132 -2.29745 -0.671476 -0.553332 0.492893 + 0.819125 1.9989 -2.31556 0.526806 -0.375013 0.762785 + 0.760585 2.04989 -2.25375 0.304931 -0.525779 0.794087 + 0.732671 2.0413 -2.25464 -0.0799034 -0.619927 0.78058 + 0.677505 2.12639 -2.19846 -0.387856 -0.640766 0.662561 + 0.844465 2.09285 -2.29092 0.616114 -0.364898 0.698035 + 0.799907 2.06345 -2.26903 0.527434 -0.416829 0.740315 + 0.739134 2.13566 -2.18479 0.30962 -0.55993 0.768514 + 0.711221 2.12707 -2.18568 -0.0512291 -0.642287 0.76475 + 0.901706 2.03045 -2.37084 0.692787 -0.27321 0.667385 + 0.874805 2.10837 -2.31093 0.690601 -0.304851 0.655847 + 0.817902 2.18362 -2.21486 0.618527 -0.413089 0.668418 + 0.773344 2.15422 -2.19296 0.527377 -0.464518 0.711405 + 0.711712 2.24639 -2.09058 0.293885 -0.529355 0.795874 + 0.91498 2.03709 -2.3843 0.829221 -0.138502 0.541489 + 0.886092 2.11841 -2.32031 0.829745 -0.162649 0.533919 + 0.855504 2.2129 -2.23729 0.836434 -0.202743 0.509189 + 0.844218 2.20286 -2.22791 0.693456 -0.35549 0.626695 + 0.785192 2.29349 -2.11126 0.582077 -0.399666 0.708134 + 0.947709 1.97814 -2.45671 0.920878 -0.0304977 0.388655 + 0.925 2.04957 -2.40284 0.922237 0.0109609 0.38647 + 0.896112 2.13089 -2.33884 0.92254 -0.00589091 0.385856 + 0.86421 2.22607 -2.25259 0.929283 -0.0420559 0.366965 + 0.821654 2.32176 -2.13275 0.82778 -0.171743 0.53412 + 0.933468 2.06511 -2.43129 0.96132 0.145756 0.233706 + 0.903163 2.14858 -2.36166 0.962891 0.133979 0.234287 + 0.871261 2.24376 -2.27541 0.969106 0.108601 0.221447 + 0.836699 2.35083 -2.16856 0.957603 0.144605 0.249171 + 0.83036 2.33492 -2.14804 0.919974 -0.00651825 0.391925 + 0.957524 2.01599 -2.51681 0.956234 0.283177 0.073668 + 0.933667 2.08186 -2.45844 0.953969 0.293753 0.0604318 + 0.903362 2.16533 -2.38881 0.955816 0.289075 0.0534023 + 0.871323 2.25969 -2.29903 0.96095 0.272592 0.047626 + 0.949723 2.03387 -2.54718 0.895743 0.430067 -0.112632 + 0.925867 2.09974 -2.48881 0.896787 0.427097 -0.115588 + 0.896442 2.1812 -2.41575 0.897696 0.424396 -0.118452 + 0.864403 2.27556 -2.32598 0.897656 0.422454 -0.125483 + 0.952981 1.9998 -2.62055 0.750634 0.546339 -0.371566 + 0.93599 2.04759 -2.57125 0.749261 0.58059 -0.318627 + 0.914418 2.11119 -2.50936 0.753502 0.571078 -0.325739 + 0.884993 2.19264 -2.4363 0.735171 0.582479 -0.346759 + 0.932038 2.00774 -2.6362 0.426825 0.672039 -0.605131 + 0.919314 2.05575 -2.58333 0.446381 0.707449 -0.54796 + 0.897743 2.11935 -2.52144 0.466568 0.68746 -0.556518 + 0.870596 2.19652 -2.4491 0.446092 0.693783 -0.565391 + 0.894387 1.95759 -2.68967 0.181568 0.543906 -0.819267 + 0.893074 2.0071 -2.65126 0.173788 0.671227 -0.720591 + 0.88035 2.0551 -2.5984 0.201658 0.732872 -0.649795 + 0.865733 2.12251 -2.53207 0.222487 0.711071 -0.666991 + 0.828318 1.93192 -2.71699 -0.00385911 0.42863 -0.903472 + 0.827004 1.98142 -2.67858 -0.0542592 0.638747 -0.767501 + 0.828179 2.06209 -2.6036 -0.00900196 0.702534 -0.711593 + 0.813562 2.1295 -2.53728 0.00371492 0.70896 -0.705239 + 0.821635 1.89349 -2.72653 -0.0379539 0.320115 -0.946618 + 0.76261 1.88185 -2.72064 -0.348699 0.31201 -0.883775 + 0.769293 1.92029 -2.7111 -0.3462 0.413572 -0.842083 + 0.774611 1.97526 -2.67192 -0.323512 0.605061 -0.72749 + 0.823133 1.85629 -2.74238 -0.0656082 0.302468 -0.950899 + 0.769243 1.83163 -2.73897 -0.273363 0.176144 -0.945646 + 0.747032 1.84454 -2.72582 -0.444234 0.262938 -0.856458 + 0.717728 1.89175 -2.68815 -0.529601 0.361514 -0.767353 + 0.717287 1.92276 -2.6721 -0.528112 0.448408 -0.72113 + 0.682539 1.78964 -2.70592 -0.608635 -0.0405407 -0.792414 + 0.70215 1.85444 -2.69333 -0.548166 0.326985 -0.769802 + 0.672159 1.89904 -2.64849 -0.609067 0.349716 -0.711854 + 0.671718 1.93004 -2.63245 -0.569186 0.447479 -0.689775 + 0.722605 1.97773 -2.63292 -0.487543 0.574136 -0.657776 + 0.671696 1.85946 -2.66719 -0.608519 0.336563 -0.71863 + 0.62568 1.9042 -2.60259 -0.722428 0.309389 -0.618366 + 0.63281 1.94165 -2.59125 -0.660744 0.428873 -0.616024 + 0.64224 1.9879 -2.56041 -0.582087 0.593427 -0.555895 + 0.681147 1.97629 -2.60161 -0.512187 0.576299 -0.636824 + 0.659411 2.03466 -2.52058 -0.61816 0.581069 -0.529374 + 0.695002 2.04605 -2.54545 -0.546413 0.578407 -0.605704 + 0.73646 2.04749 -2.57676 -0.479866 0.595033 -0.64472 + 0.775786 2.05593 -2.59694 -0.318106 0.643455 -0.696258 + 0.638015 2.03301 -2.49136 -0.83395 0.455184 -0.311985 + 0.66146 2.08837 -2.47088 -0.675343 0.495717 -0.546055 + 0.697051 2.09976 -2.49575 -0.574924 0.544827 -0.61043 + 0.731765 2.11448 -2.51369 -0.505128 0.568826 -0.649063 + 0.771091 2.12291 -2.53387 -0.314378 0.638417 -0.70256 + 0.642004 2.07463 -2.4519 -0.876969 0.321684 -0.356995 + 0.652663 2.13298 -2.42409 -0.702558 0.432981 -0.564747 + 0.683014 2.15348 -2.43972 -0.597597 0.501115 -0.625909 + 0.717728 2.16819 -2.45766 -0.533156 0.535886 -0.654653 + 0.627798 2.10689 -2.38942 -0.981431 0.00851246 -0.191625 + 0.633207 2.11924 -2.40512 -0.886673 0.233692 -0.398998 + 0.635474 2.21187 -2.34328 -0.711483 0.422248 -0.561693 + 0.665825 2.23238 -2.35891 -0.607682 0.499412 -0.617502 + 0.696182 2.2509 -2.37159 -0.548256 0.535068 -0.642742 + 0.625806 2.09016 -2.36259 -0.991313 -0.107273 -0.0761004 + 0.613089 2.18393 -2.31271 -0.980987 0.00471444 -0.194014 + 0.618498 2.19627 -2.32841 -0.889052 0.225481 -0.398428 + 0.614047 2.32153 -2.23386 -0.715106 0.444629 -0.539377 + 0.613417 2.14609 -2.25635 -0.928504 -0.329442 0.171316 + 0.611454 2.16777 -2.28951 -0.990872 -0.109273 -0.0789475 + 0.592208 2.29483 -2.20487 -0.985199 0.0431024 -0.165906 + 0.597071 2.30593 -2.21899 -0.893656 0.252396 -0.371046 + 0.634814 2.13241 -2.22826 -0.662188 -0.563703 0.493706 + 0.592338 2.25919 -2.15187 -0.936909 -0.28433 0.203364 + 0.590573 2.27868 -2.18168 -0.996486 -0.067872 -0.0490905 + 0.588996 2.36206 -2.14054 -0.966485 0.256697 0.00363897 + 0.652901 2.23799 -2.10415 -0.364571 -0.609089 0.704343 + 0.613735 2.24551 -2.12377 -0.641395 -0.534826 0.550066 + 0.589485 2.32996 -2.09262 -0.917093 -0.00982676 0.398553 + 0.587719 2.34945 -2.12243 -0.977948 0.174287 0.115074 + 0.686618 2.23868 -2.09138 -0.0588529 -0.605251 0.793856 + 0.645524 2.31131 -2.05263 -0.380565 -0.298017 0.875417 + 0.606357 2.31883 -2.07225 -0.655361 -0.211977 0.72496 + 0.604448 2.36293 -2.08553 -0.692656 0.468093 0.54874 + 0.603302 2.37558 -2.10487 -0.725614 0.571432 0.383341 + 0.697108 2.3191 -2.04342 0.177742 -0.255731 0.950268 + 0.672013 2.31139 -2.04422 -0.120665 -0.304798 0.944742 + 0.646734 2.34692 -2.05243 -0.341751 0.279793 0.897174 + 0.62132 2.3518 -2.06515 -0.491925 0.326545 0.80708 + 0.653081 2.39392 -2.08458 -0.336742 0.695034 0.635242 + 0.72364 2.33405 -2.04824 0.350697 -0.196004 0.915748 + 0.689506 2.352 -2.04349 -0.0490756 0.28227 0.958079 + 0.673224 2.347 -2.04401 -0.195474 0.259964 0.945626 + 0.678495 2.38904 -2.07185 -0.226056 0.627679 0.744928 + 0.745921 2.26495 -2.09875 0.490999 -0.450093 0.745879 + 0.762911 2.36258 -2.06075 0.441742 -0.145001 0.885347 + 0.741521 2.38546 -2.05643 0.0821967 0.349115 0.933468 + 0.716039 2.36695 -2.04832 0.0397241 0.315208 0.948191 + 0.811507 2.31273 -2.12431 0.685079 -0.325964 0.651471 + 0.783282 2.37806 -2.06938 0.551221 -0.0486067 0.832942 + 0.761891 2.40094 -2.06506 0.175504 0.445567 0.877877 + 0.72026 2.41256 -2.07945 -0.25585 0.724551 0.639974 + 0.694778 2.39405 -2.07133 -0.215268 0.649897 0.728899 + 0.793428 2.38709 -2.07782 0.701245 0.119224 0.70288 + 0.768476 2.4068 -2.07054 0.274707 0.563677 0.778976 + 0.726844 2.41842 -2.08492 -0.129791 0.777026 0.615943 + 0.730957 2.42874 -2.09823 -0.128335 0.815768 0.563961 + 0.800224 2.39736 -2.08975 0.779302 0.271967 0.564555 + 0.775271 2.41707 -2.08247 0.313588 0.665203 0.677619 + 0.806563 2.41327 -2.11027 0.808623 0.411992 0.419991 + 0.779384 2.4274 -2.09579 0.330316 0.736389 0.590442 + 0.836761 2.36676 -2.19219 0.94666 0.313168 0.0758933 + 0.806611 2.42571 -2.12871 0.791962 0.554152 0.256344 + 0.779433 2.43983 -2.11423 0.312905 0.820975 0.477588 + 0.830539 2.38103 -2.21641 0.881532 0.462728 -0.0937213 + 0.800389 2.43997 -2.15293 0.723763 0.684221 0.0894924 + 0.775395 2.44909 -2.12994 0.274214 0.883376 0.38007 + 0.72692 2.43799 -2.11395 -0.146258 0.857057 0.494026 + 0.854282 2.28493 -2.34484 0.731351 0.588777 -0.344192 + 0.820418 2.3904 -2.23527 0.713449 0.628588 -0.309623 + 0.792489 2.44729 -2.16766 0.577168 0.808929 -0.111855 + 0.767495 2.4564 -2.14467 0.187435 0.952813 0.23878 + 0.839885 2.28881 -2.35764 0.422638 0.712098 -0.560619 + 0.807475 2.39389 -2.24678 0.409071 0.746315 -0.525047 + 0.779546 2.45078 -2.17917 0.307423 0.891575 -0.332545 + 0.759097 2.45867 -2.15214 0.0370589 0.995453 0.0877453 + 0.838586 2.19968 -2.45973 0.18498 0.717368 -0.671689 + 0.811783 2.28762 -2.36961 0.162041 0.734636 -0.658826 + 0.779373 2.3927 -2.25875 0.148816 0.764298 -0.627457 + 0.75761 2.44985 -2.18851 0.0810486 0.891237 -0.446238 + 0.79379 2.19329 -2.47214 -0.0312491 0.70472 -0.708797 + 0.766986 2.28123 -2.38203 -0.0604195 0.713955 -0.69758 + 0.739101 2.38695 -2.26991 -0.0684724 0.739944 -0.669175 + 0.717338 2.4441 -2.19967 -0.122586 0.855898 -0.502405 + 0.751319 2.1867 -2.46873 -0.349591 0.620235 -0.702208 + 0.729772 2.26941 -2.38266 -0.367233 0.626148 -0.687808 + 0.701887 2.37513 -2.27055 -0.373887 0.648146 -0.663411 + 0.688289 2.43487 -2.20017 -0.392067 0.765045 -0.510871 + 0.711029 2.45401 -2.16872 -0.212971 0.975971 -0.0460893 + 0.671689 2.35849 -2.26059 -0.553376 0.556712 -0.619553 + 0.658091 2.41823 -2.19021 -0.568242 0.670692 -0.476731 + 0.662386 2.43398 -2.16276 -0.510846 0.858764 -0.0395079 + 0.68198 2.44478 -2.16922 -0.410419 0.909116 -0.0711663 + 0.641333 2.33997 -2.24791 -0.611848 0.519942 -0.596073 + 0.634396 2.40377 -2.18031 -0.621311 0.639083 -0.453371 + 0.63869 2.41953 -2.15286 -0.547701 0.836432 -0.0201219 + 0.672795 2.42573 -2.1222 -0.342466 0.844668 0.411403 + 0.69239 2.43653 -2.12866 -0.295278 0.872108 0.390179 + 0.60711 2.38534 -2.16626 -0.723069 0.575599 -0.381913 + 0.620986 2.40756 -2.14374 -0.601163 0.798868 0.0203085 + 0.655091 2.41377 -2.11308 -0.376575 0.818915 0.433092 + 0.593858 2.37316 -2.15465 -0.882743 0.422708 -0.205139 + 0.607734 2.39539 -2.13214 -0.694391 0.703013 0.153605 + 0.651936 2.40657 -2.10392 -0.381509 0.775641 0.502824 + 0.604579 2.38819 -2.12298 -0.728042 0.614623 0.303635 + 0.718521 2.44026 -2.12142 -0.210033 0.878992 0.428087 + 0.737161 2.45774 -2.16148 -0.1006 0.994919 0.00386093 + -0.861683 1.78372 -1.68945 0.542942 0.676105 -0.498092 + -0.844417 1.76425 -1.68043 0.295676 0.853413 0.429257 + -0.795989 1.7501 -1.67675 0.0704556 0.470165 0.879762 + -0.896655 1.82743 -1.63648 0.819838 0.570199 -0.0523411 + -0.893836 1.82196 -1.6254 0.891577 0.305086 0.334685 + -0.875973 1.76755 -1.63771 0.527652 0.752673 0.393784 + -0.859869 1.76859 -1.6341 -0.509809 0.758022 -0.406813 + -0.828313 1.76528 -1.67683 -0.0515056 0.57841 -0.814119 + -0.795989 1.7501 -1.67675 0.619461 0.360333 -0.697444 + -0.913921 1.84691 -1.6455 0.628337 0.660206 -0.411486 + -0.938856 1.89544 -1.61696 0.553402 0.538562 -0.635372 + -0.921707 1.88933 -1.60415 0.819835 0.433994 -0.373524 + -0.918888 1.88385 -1.59307 0.976606 0.173526 0.127003 + -0.914592 1.82073 -1.59468 0.849752 0.0515985 0.524652 + -0.950332 1.85538 -1.66374 0.228995 0.62174 -0.749 + -0.975267 1.90391 -1.6352 0.215899 0.562513 -0.798102 + -0.973509 1.9577 -1.59711 0.256444 0.558221 -0.789067 + -0.946743 1.95147 -1.58371 0.553459 0.488953 -0.674246 + -0.929595 1.94537 -1.5709 0.841358 0.358801 -0.404202 + -0.874571 1.76401 -1.70684 0.24176 0.499863 -0.831678 + -0.96322 1.83567 -1.68111 -0.00269435 0.560421 -0.828204 + -1.00872 1.84191 -1.66855 -0.371559 0.465291 -0.803398 + -1.0025 1.90419 -1.63537 -0.304839 0.519388 -0.798316 + -0.862319 1.70005 -1.74151 0.254402 0.500152 -0.827724 + -0.965472 1.76805 -1.71504 -0.0500905 0.458199 -0.887437 + -1.01097 1.77429 -1.70247 -0.384834 0.445536 -0.808332 + -1.03461 1.83407 -1.65072 -0.650961 0.392859 -0.649547 + -1.02839 1.89634 -1.61754 -0.678934 0.423899 -0.599466 + -0.798428 1.69134 -1.71503 0.627613 0.409576 -0.66208 + -0.860608 1.62202 -1.78844 0.252982 0.439702 -0.861778 + -0.95322 1.70409 -1.74971 -0.00297674 0.504452 -0.863435 + -1.01937 1.70534 -1.74027 -0.363104 0.497155 -0.788031 + -1.04663 1.76377 -1.67854 -0.648101 0.399675 -0.648248 + -0.76879 1.67356 -1.67546 0.87792 0.252431 -0.406859 + -0.763945 1.5997 -1.71449 0.881476 0.206488 -0.424691 + -0.796717 1.61331 -1.76195 0.639402 0.337439 -0.690869 + -0.766351 1.73233 -1.63718 0.89385 0.216533 -0.392615 + -0.752199 1.66051 -1.6355 0.97648 0.136311 -0.167049 + -0.747354 1.58665 -1.67453 0.979245 0.0889351 -0.182123 + -0.753606 1.5029 -1.71989 0.965301 -0.0427322 -0.25762 + -0.770913 1.51923 -1.75069 0.861404 0.0973666 -0.498501 + -0.769426 1.80185 -1.60854 0.861362 0.282283 -0.42234 + -0.759348 1.79972 -1.57636 0.97648 0.155311 -0.149549 + -0.756274 1.73021 -1.60501 0.980811 0.115874 -0.156792 + -0.750401 1.64607 -1.60312 0.989386 0.00195389 0.145294 + -0.74596 1.57993 -1.63403 0.992367 -0.0378516 0.117364 + -0.805752 1.77556 -1.67281 0.296163 0.483039 -0.823991 + -0.779188 1.82732 -1.60459 0.686472 0.456702 -0.565844 + -0.777499 1.87088 -1.56637 0.735772 0.439402 -0.51533 + -0.805421 1.83416 -1.62143 0.239147 0.611648 -0.754119 + -0.803731 1.87773 -1.5832 0.384125 0.590126 -0.71007 + -0.827982 1.82389 -1.62545 -0.212933 0.608359 -0.764564 + -0.82617 1.87946 -1.58753 -0.0574496 0.608425 -0.791529 + -0.806134 1.92987 -1.54242 0.381638 0.58766 -0.713448 + -0.853077 1.821 -1.61849 -0.558502 0.456633 -0.692504 + -0.851265 1.87658 -1.58058 -0.511802 0.514498 -0.688004 + -0.84702 1.92949 -1.54163 -0.501892 0.544839 -0.671755 + -0.828572 1.93161 -1.54674 -0.04566 0.622728 -0.781105 + -0.884962 1.76516 -1.6048 -0.471562 0.844265 -0.254649 + -0.87817 1.81756 -1.5892 -0.841018 0.311302 -0.442469 + -0.867427 1.86948 -1.56556 -0.823135 0.372758 -0.428369 + -0.896729 1.76634 -1.60699 0.532001 0.687299 0.494565 + -0.91404 1.75833 -1.57116 -0.425466 0.881673 0.204038 + -0.890048 1.80422 -1.56183 -0.945887 0.308043 -0.102017 + -0.879305 1.85613 -1.5382 -0.976116 0.203773 -0.0753241 + -0.925807 1.75951 -1.57334 0.416597 0.58701 0.694166 + -0.913283 1.74562 -1.54745 -0.293624 0.672019 0.679835 + -0.889292 1.79151 -1.53811 -0.883087 0.204614 0.422245 + -0.877897 1.84482 -1.5174 -0.941031 0.000393014 0.33832 + -0.871914 1.91258 -1.5065 -0.980782 0.170719 -0.0944559 + -0.927912 1.80841 -1.56914 0.748761 -0.0563014 0.660444 + -0.955781 1.8022 -1.55238 0.356948 -0.15968 0.920375 + -0.953676 1.75329 -1.55657 0.10946 0.503488 0.85704 + -0.923794 1.74036 -1.53732 0.371164 0.92692 -0.0552796 + -0.923481 1.87607 -1.57706 0.931412 -0.00718635 0.363897 + -0.936802 1.86374 -1.55152 0.768744 -0.134296 0.625297 + -0.955874 1.85768 -1.53792 0.418948 -0.262017 0.869384 + -0.986097 1.80064 -1.54679 0.0576717 -0.220796 0.973614 + -0.988572 1.74562 -1.55695 -0.150924 0.398619 0.904613 + -0.932115 1.93356 -1.54674 0.936475 -0.0628728 0.345052 + -0.941907 1.9245 -1.52797 0.78366 -0.194031 0.590109 + -0.96098 1.91842 -1.51437 0.409649 -0.33383 0.848967 + -0.98619 1.85613 -1.53234 0.0389872 -0.292569 0.955449 + -1.01567 1.7933 -1.55082 -0.297138 -0.14412 0.943895 + -0.927522 1.94134 -1.56276 0.992671 0.10416 0.0612771 + -0.937515 1.98613 -1.51921 0.940351 -0.096075 0.326359 + -0.947307 1.97706 -1.50044 0.781325 -0.248362 0.57258 + -0.96172 1.97249 -1.49016 0.41677 -0.397877 0.817311 + -0.983264 1.91729 -1.51026 0.038501 -0.37452 0.926419 + -0.936118 1.99604 -1.53943 0.837471 0.369266 -0.402846 + -0.934046 1.99201 -1.53129 0.995022 0.0836096 0.0542295 + -0.938812 2.03584 -1.50142 0.990397 0.117413 0.0729926 + -0.942281 2.02995 -1.48935 0.936737 -0.072848 0.342369 + -0.950006 2.02281 -1.47453 0.783275 -0.227616 0.578508 + -0.949082 2.00065 -1.54913 0.554014 0.512331 -0.65619 + -0.95341 2.04363 -1.51755 0.54609 0.555685 -0.626898 + -0.940447 2.03902 -1.50785 0.838202 0.404192 -0.366124 + -0.946611 2.0652 -1.48899 0.766284 0.605202 -0.215731 + -0.944975 2.06202 -1.48256 0.906873 0.366954 0.207187 + -0.975847 2.00687 -1.56253 0.2442 0.588885 -0.770442 + -0.974527 2.04854 -1.52813 0.253542 0.62928 -0.734659 + -0.976944 2.0734 -1.50646 0.216557 0.78221 -0.584167 + -0.955827 2.06849 -1.4959 0.5129 0.716682 -0.472546 + -0.954597 2.07248 -1.48133 0.501042 0.862294 0.0735273 + -0.99642 2.00708 -1.56267 -0.296677 0.590083 -0.750856 + -0.995099 2.04874 -1.52825 -0.305563 0.630162 -0.713812 + -0.991595 2.07352 -1.50661 -0.261439 0.781612 -0.566332 + -0.990813 2.07877 -1.49456 -0.23599 0.934454 -0.266656 + -0.976162 2.07864 -1.49442 0.209394 0.939152 -0.272302 + -1.00074 1.95798 -1.5973 -0.309319 0.560863 -0.767955 + -1.01545 2.00132 -1.54956 -0.671264 0.479027 -0.565631 + -1.01011 2.04419 -1.51791 -0.662031 0.520583 -0.539174 + -1.00661 2.06898 -1.49627 -0.61735 0.681379 -0.393195 + -0.999594 2.0761 -1.48852 -0.449988 0.882143 -0.139047 + -1.01978 1.9522 -1.58419 -0.672114 0.459341 -0.580748 + -1.02503 1.99671 -1.53925 -0.881109 0.341643 -0.326996 + -1.01969 2.03959 -1.5076 -0.87834 0.3744 -0.297227 + -1.01336 2.06577 -1.48866 -0.80597 0.568286 -0.165721 + -1.00634 2.0729 -1.48091 -0.568024 0.818663 0.0844981 + -1.04108 1.89025 -1.60387 -0.878394 0.332351 -0.343462 + -1.03246 1.94612 -1.57052 -0.884638 0.332088 -0.327313 + -1.03476 1.94165 -1.56062 -0.989207 0.14568 0.0157156 + -1.02733 1.99224 -1.52935 -0.991211 0.1318 0.0113462 + -1.02151 2.03608 -1.49979 -0.98602 0.164408 0.0271031 + -1.05554 1.82437 -1.63257 -0.868041 0.324169 -0.376057 + -1.0442 1.88418 -1.5904 -0.984005 0.175679 0.0295085 + -1.04226 1.87778 -1.57615 -0.959584 0.0712467 0.272255 + -1.03281 1.93526 -1.54636 -0.966121 0.00840258 0.257954 + -1.02586 1.98743 -1.51856 -0.969797 -0.0168192 0.243333 + -1.06756 1.75407 -1.66038 -0.735671 0.414641 -0.535594 + -1.05867 1.81829 -1.61909 -0.968395 0.248755 -0.0182061 + -1.05823 1.80894 -1.59774 -0.94289 0.188163 0.27487 + -1.03468 1.86924 -1.55703 -0.861852 -0.0367449 0.505827 + -1.02724 1.92897 -1.53232 -0.875806 -0.108841 0.470232 + -1.05503 1.69481 -1.71634 -0.573101 0.490184 -0.656715 + -1.084 1.69714 -1.68879 -0.674157 0.490231 -0.552437 + -1.08388 1.74579 -1.64166 -0.91784 0.360949 -0.165182 + -1.08344 1.73643 -1.6203 -0.931969 0.222139 0.286508 + -1.05065 1.80039 -1.57863 -0.818814 0.0811334 0.568297 + -1.02788 1.62315 -1.79044 -0.289454 0.509889 -0.81008 + -1.0696 1.63577 -1.75368 -0.520732 0.518179 -0.678476 + -1.09857 1.6381 -1.72614 -0.556987 0.539667 -0.631289 + -1.10032 1.68885 -1.67007 -0.840847 0.477293 -0.25528 + -0.961734 1.6219 -1.79988 -0.010275 0.458752 -0.888505 + -0.964636 1.5442 -1.83363 0.0835684 0.379133 -0.921561 + -1.03632 1.56513 -1.82489 -0.228865 0.492134 -0.839896 + -1.07804 1.57775 -1.78813 -0.498248 0.49233 -0.713695 + -0.86351 1.54431 -1.82219 0.259389 0.267042 -0.92812 + -0.878343 1.44646 -1.8412 0.326135 0.179794 -0.928068 + -0.9756 1.49514 -1.85648 0.186908 0.35741 -0.915054 + -1.04729 1.51607 -1.84774 -0.25159 0.480981 -0.839857 + -1.0753 1.52508 -1.82485 -0.497551 0.457676 -0.736869 + -0.803685 1.53284 -1.79816 0.625118 0.186471 -0.757928 + -0.796508 1.42312 -1.80198 0.74657 -0.0126133 -0.665187 + -0.818518 1.43499 -1.81718 0.496852 0.0713508 -0.864897 + -0.779201 1.40679 -1.77117 0.858954 -0.0209808 -0.511623 + -0.814222 1.33839 -1.80653 0.640426 -0.322429 -0.697061 + -0.829046 1.35425 -1.82431 0.553095 -0.229478 -0.80089 + -0.851056 1.36611 -1.83951 0.440722 -0.141564 -0.88641 + -0.752212 1.49618 -1.6794 0.994201 -0.107525 -0.00179019 + -0.76183 1.39164 -1.74576 0.953425 -0.106439 -0.282224 + -0.79685 1.32324 -1.78111 0.788249 -0.426068 -0.443992 + -0.864718 1.29753 -1.81167 0.346095 -0.613927 -0.709445 + -0.879542 1.31338 -1.82945 0.258197 -0.505559 -0.823252 + -0.757383 1.48395 -1.636 0.944214 -0.153962 0.291127 + -0.767001 1.37943 -1.70236 0.95799 -0.27371 0.0856636 + -0.792378 1.31083 -1.73172 0.819668 -0.570517 -0.0515171 + -0.805334 1.30464 -1.76866 0.690927 -0.647656 -0.321188 + -0.86489 1.28634 -1.80025 0.319797 -0.674995 -0.664915 + -0.758081 1.56626 -1.59838 0.901097 -0.153857 0.405404 + -0.785969 1.473 -1.59462 0.820348 -0.134906 0.555724 + -0.777832 1.37883 -1.62356 0.905003 -0.270068 0.328684 + -0.80321 1.31023 -1.65291 0.785106 -0.58282 0.209593 + -0.762522 1.6324 -1.56747 0.890223 -0.112723 0.441356 + -0.786667 1.5553 -1.557 0.737383 -0.231265 0.634651 + -0.844632 1.49219 -1.52469 0.573965 -0.0973955 0.813067 + -0.814774 1.46235 -1.54842 0.74533 0.0523511 0.664638 + -0.765889 1.69882 -1.54682 0.877079 -0.106486 0.468395 + -0.787836 1.60928 -1.53775 0.698236 -0.180004 0.692868 + -0.837401 1.59422 -1.50277 0.538881 -0.204098 0.817283 + -0.836232 1.54024 -1.52202 0.541309 -0.204292 0.815628 + -0.754476 1.71575 -1.57263 0.983949 -0.010114 0.178165 + -0.769974 1.77104 -1.52429 0.803068 -0.111664 0.585331 + -0.791203 1.67569 -1.51711 0.566783 -0.134394 0.812831 + -0.832232 1.66576 -1.50159 0.583904 0.209753 0.784258 + -0.758561 1.78796 -1.55009 0.983459 0.00664217 0.181008 + -0.764901 1.85098 -1.52125 0.973265 0.0260329 0.228204 + -0.774543 1.8401 -1.50329 0.78652 -0.153738 0.598122 + -0.79282 1.75793 -1.50947 0.432875 -0.146761 0.889427 + -0.765688 1.86275 -1.54751 0.950277 0.239754 -0.198725 + -0.77504 1.9167 -1.51119 0.947341 0.270981 -0.17063 + -0.774462 1.90805 -1.49188 0.973254 0.024937 0.228373 + -0.784104 1.89718 -1.47393 0.785585 -0.20298 0.584513 + -0.797389 1.827 -1.48848 0.457099 -0.276565 0.845324 + -0.786851 1.92484 -1.53005 0.711075 0.476506 -0.517025 + -0.79177 1.97231 -1.49268 0.712307 0.491471 -0.501073 + -0.782852 1.96615 -1.47846 0.944844 0.27537 -0.177317 + -0.782274 1.95751 -1.45914 0.975602 -0.00478825 0.219495 + -0.811053 1.97734 -1.50506 0.371627 0.616783 -0.693881 + -0.812841 2.01759 -1.46816 0.372689 0.654804 -0.657522 + -0.797628 2.01363 -1.45839 0.700356 0.532257 -0.475609 + -0.78871 2.00747 -1.44416 0.942368 0.30002 -0.148092 + -0.828013 1.97864 -1.50834 -0.0387738 0.652543 -0.756759 + -0.829801 2.0189 -1.47144 -0.0453624 0.693058 -0.719453 + -0.816785 2.04146 -1.44513 0.326457 0.793863 -0.513038 + -0.801572 2.03748 -1.43537 0.647661 0.688267 -0.32684 + -0.84646 1.97652 -1.50322 -0.504384 0.566943 -0.651285 + -0.844355 2.01723 -1.4674 -0.493983 0.609319 -0.620251 + -0.828873 2.04234 -1.44754 -0.0306886 0.823086 -0.567087 + -0.829989 2.04737 -1.43556 -0.0497992 0.968762 -0.24294 + -0.817901 2.04647 -1.43316 0.25941 0.937266 -0.232892 + -0.858672 1.97117 -1.49188 -0.825384 0.387134 -0.410937 + -0.856566 2.01188 -1.45606 -0.825313 0.417327 -0.38039 + -0.843427 2.04067 -1.44351 -0.465512 0.753488 -0.464278 + -0.8385 2.04639 -1.43321 -0.312177 0.937369 -0.154544 + -0.863182 1.92239 -1.52662 -0.831654 0.370901 -0.413261 + -0.867404 1.96136 -1.47176 -0.982855 0.158866 -0.0935788 + -0.863455 2.00413 -1.44018 -0.978324 0.192189 -0.0771096 + -0.852103 2.03688 -1.43541 -0.754099 0.607915 -0.248543 + -0.86634 1.95281 -1.45605 -0.952865 -0.103577 0.285166 + -0.862391 1.99558 -1.42447 -0.946617 -0.0891164 0.309796 + -0.858992 2.02914 -1.41954 -0.910348 0.40723 0.0736918 + -0.851204 2.03807 -1.41583 -0.644971 0.725994 0.238632 + -0.847176 2.0426 -1.42511 -0.551467 0.833621 0.0309861 + -0.870505 1.90126 -1.4857 -0.947568 -0.0761338 0.310353 + -0.855242 1.94359 -1.44121 -0.718738 -0.328704 0.612674 + -0.853636 1.98831 -1.41276 -0.719562 -0.311967 0.620409 + -0.85823 2.02307 -1.40831 -0.880551 0.187933 0.435099 + -0.850442 2.032 -1.4046 -0.616316 0.552086 0.561565 + -0.859408 1.89205 -1.47086 -0.719033 -0.273932 0.638712 + -0.84165 1.93848 -1.43341 -0.378928 -0.454768 0.805977 + -0.840044 1.98319 -1.40497 -0.370014 -0.445191 0.815411 + -0.839799 2.01216 -1.39104 -0.346252 -0.125076 0.929766 + -0.849475 2.0158 -1.3966 -0.653254 -0.0181182 0.756922 + -0.8628 1.83228 -1.49721 -0.700578 -0.188892 0.688121 + -0.844815 1.82551 -1.48689 -0.365152 -0.299583 0.881427 + -0.841422 1.88527 -1.46055 -0.36923 -0.390232 0.843439 + -0.8225 1.93631 -1.43091 0.0673759 -0.486757 0.870935 + -0.824935 1.98148 -1.40299 0.0594858 -0.479681 0.875424 + -0.874195 1.77897 -1.51791 -0.631738 -0.0953256 0.769299 + -0.84636 1.76001 -1.5058 -0.325903 -0.246802 0.91262 + -0.818764 1.82256 -1.48349 0.0664525 -0.32836 0.942212 + -0.822272 1.88311 -1.45804 0.0592593 -0.417445 0.906768 + -0.884407 1.72657 -1.53545 -0.153748 0.309262 0.938466 + -0.856572 1.70761 -1.52333 -0.168963 0.220004 0.960755 + -0.820309 1.75707 -1.50241 0.02009 -0.215358 0.976329 + -0.800897 1.88754 -1.46304 0.47293 -0.349431 0.808848 + -0.894918 1.72132 -1.52531 0.600347 0.793044 0.103276 + -0.870112 1.69854 -1.51488 0.573723 0.789857 0.216722 + -0.818692 1.67483 -1.51004 0.131552 0.29778 0.945527 + -0.925882 1.77462 -1.50761 0.502066 0.602654 -0.620273 + -0.903651 1.76204 -1.48842 0.699505 0.533594 -0.475362 + -0.878845 1.73927 -1.47799 0.858185 0.486475 -0.163891 + -0.952938 1.74542 -1.54417 -0.0222476 0.995374 -0.0934673 + -0.955026 1.77968 -1.51447 0.0120528 0.665044 -0.746707 + -0.952568 1.8216 -1.47601 0.0382501 0.685138 -0.727409 + -0.931047 1.81741 -1.4704 0.518223 0.597492 -0.611922 + -0.908816 1.80483 -1.45121 0.764668 0.482294 -0.427406 + -0.987834 1.73775 -1.54454 -0.288217 0.951613 -0.106601 + -0.982022 1.77671 -1.5081 -0.244803 0.672643 -0.6983 + -0.979564 1.81863 -1.46965 -0.337055 0.650955 -0.680185 + -1.01815 1.73827 -1.56097 -0.310807 0.264974 0.912791 + -1.01475 1.72657 -1.54594 -0.445772 0.894263 -0.0397493 + -1.00893 1.76552 -1.50949 -0.55517 0.628102 -0.545229 + -0.994451 1.81507 -1.46328 -0.610959 0.590116 -0.527724 + -0.97368 1.8672 -1.42555 -0.331486 0.667198 -0.667056 + -1.05153 1.72021 -1.57018 -0.678542 0.247599 0.691574 + -1.04813 1.70852 -1.55514 -0.794529 0.488288 0.360968 + -1.01599 1.76034 -1.50129 -0.903596 0.415545 -0.104097 + -1.00151 1.80988 -1.45507 -0.930384 0.336381 -0.145717 + -0.988567 1.86364 -1.41917 -0.628021 0.570687 -0.529061 + -1.0327 1.79865 -1.56084 -0.620006 -0.0294021 0.784046 + -1.06948 1.72195 -1.58796 -0.793704 0.0978317 0.600385 + -1.08878 1.67161 -1.60646 -0.855911 0.180056 0.484764 + -1.04836 1.68864 -1.53604 -0.890805 0.13957 0.43242 + -1.0069 1.85779 -1.53428 -0.33282 -0.248125 0.909761 + -1.02393 1.86315 -1.54429 -0.675669 -0.151786 0.72141 + -1.00397 1.91895 -1.51221 -0.346819 -0.336182 0.875613 + -1.01649 1.92288 -1.51957 -0.680799 -0.233301 0.694322 + -0.984005 1.97135 -1.48604 0.0314484 -0.444111 0.895419 + -0.999619 1.97261 -1.48749 -0.344846 -0.403809 0.84736 + -1.01214 1.97655 -1.49485 -0.686794 -0.286449 0.668028 + -1.0203 1.98114 -1.50452 -0.877307 -0.151552 0.455372 + -0.964419 2.01823 -1.46426 0.407492 -0.389519 0.825969 + -0.982001 2.01733 -1.46101 0.0373872 -0.434607 0.899844 + -0.997615 2.0186 -1.46245 -0.34794 -0.391279 0.851962 + -1.00749 2.02171 -1.46826 -0.680776 -0.273483 0.679523 + -1.01565 2.02629 -1.47792 -0.875941 -0.130227 0.464509 + -0.955171 2.05069 -1.45916 0.720065 0.0675929 0.690606 + -0.965424 2.04743 -1.45186 0.402204 -0.0619828 0.913449 + -0.983006 2.04653 -1.44862 0.0337902 -0.108413 0.993531 + -0.994161 2.04743 -1.44967 -0.306286 -0.0729372 0.949141 + -1.00404 2.05053 -1.45548 -0.635883 0.0332925 0.771067 + -0.947446 2.05783 -1.47398 0.867983 0.213795 0.448215 + -0.956111 2.06645 -1.46899 0.610177 0.586505 0.532631 + -0.960629 2.06227 -1.46033 0.546666 0.49236 0.677302 + -0.970882 2.059 -1.45302 0.286682 0.355062 0.8898 + -0.953641 2.07063 -1.47757 0.593337 0.72326 0.353335 + -0.967214 2.07131 -1.46621 0.265496 0.845889 0.462584 + -0.971731 2.06713 -1.45755 0.221329 0.705967 0.672773 + -0.982013 2.06661 -1.45565 -0.00177327 0.712973 0.701189 + -0.981163 2.05847 -1.45113 0.0549696 0.337265 0.939804 + -0.970723 2.07549 -1.47471 0.179435 0.915809 0.3593 + -0.969766 2.07362 -1.47095 0.15416 0.909084 0.387041 + -0.987789 2.06842 -1.45905 -0.153577 0.806631 0.570754 + -0.992319 2.05937 -1.45218 -0.229001 0.414255 0.880881 + -0.963814 2.07577 -1.48824 0.367629 0.919463 -0.139413 + -0.972252 2.07813 -1.48049 0.234788 0.943636 0.233294 + -0.992911 2.07364 -1.47028 -0.174837 0.875338 0.450795 + -0.990342 2.07074 -1.46379 -0.163391 0.857355 0.488104 + -0.998095 2.06118 -1.45558 -0.422733 0.510091 0.749069 + -0.984601 2.08101 -1.48667 -0.0231295 0.998052 0.0579329 + -0.993381 2.07834 -1.48062 -0.216603 0.949029 0.228971 + -0.99444 2.07629 -1.47606 -0.207986 0.89141 0.402654 + -1.0074 2.07084 -1.47634 -0.605436 0.731746 0.313041 + -1.00647 2.06735 -1.46898 -0.589308 0.661583 0.463707 + -1.00391 2.06445 -1.46249 -0.541286 0.599912 0.589165 + -1.00985 2.05379 -1.4624 -0.810502 0.145974 0.567255 + -1.01517 2.06224 -1.48085 -0.908251 0.392521 0.144941 + -1.01424 2.05876 -1.47348 -0.897053 0.265032 0.353631 + -1.02004 2.03125 -1.48901 -0.965931 0.00602489 0.258728 + -1.10274 1.68609 -1.6388 -0.928522 0.286858 0.235709 + -1.12121 1.65122 -1.66364 -0.900856 0.39323 0.183924 + -1.1061 1.64277 -1.62382 -0.852629 0.243119 0.462511 + -1.08274 1.6196 -1.57935 -0.803775 0.207646 0.55752 + -1.06543 1.64843 -1.56198 -0.836344 0.0856898 0.541467 + -1.11879 1.65398 -1.69492 -0.724962 0.575102 -0.379063 + -1.14137 1.61459 -1.68087 -0.902482 0.424152 0.07497 + -1.12625 1.60613 -1.64105 -0.84108 0.30273 0.448261 + -1.10805 1.58706 -1.76083 -0.511412 0.5276 -0.678303 + -1.12827 1.60294 -1.7296 -0.649726 0.528113 -0.546766 + -1.14801 1.59761 -1.70914 -0.78781 0.5466 -0.283872 + -1.16836 1.5483 -1.68293 -0.938686 0.291499 0.184111 + -1.10532 1.53438 -1.79755 -0.484818 0.473429 -0.735402 + -1.13309 1.54353 -1.7746 -0.606646 0.44187 -0.660857 + -1.15283 1.53819 -1.75413 -0.794711 0.347706 -0.497529 + -1.17501 1.53132 -1.71119 -0.992373 0.118036 -0.0355381 + -1.09534 1.48847 -1.83271 -0.515778 0.38929 -0.763169 + -1.12311 1.49763 -1.80977 -0.609845 0.349881 -0.711107 + -1.15272 1.49406 -1.77795 -0.807926 0.224801 -0.54472 + -1.17489 1.48719 -1.73501 -0.957577 0.110455 -0.266168 + -1.17284 1.51873 -1.66879 -0.9567 0.181032 0.227931 + -1.07225 1.49111 -1.84717 -0.506229 0.397058 -0.765557 + -1.06557 1.4637 -1.86328 -0.488367 0.259635 -0.833119 + -1.11164 1.45681 -1.83562 -0.643574 0.189797 -0.741478 + -1.14125 1.45325 -1.8038 -0.765504 0.0850554 -0.637784 + -1.16209 1.43471 -1.77781 -0.893668 -0.0357329 -0.447304 + -1.04423 1.48211 -1.87005 -0.218264 0.443524 -0.86928 + -1.04247 1.46635 -1.87773 -0.272638 0.0838189 -0.958458 + -1.00107 1.43371 -1.88308 0.105073 0.110682 -0.988286 + -1.05129 1.43838 -1.87943 -0.24013 0.267479 -0.933163 + -1.09737 1.43149 -1.85176 -0.630431 0.0146473 -0.776107 + -1.00247 1.46289 -1.8726 0.202006 0.383679 -0.901101 + -1.00071 1.44711 -1.88027 0.207208 0.318562 -0.924977 + -0.905572 1.40079 -1.86012 0.273116 0.129672 -0.953202 + -1.00389 1.40927 -1.88379 0.091356 -0.043122 -0.994884 + -1.05412 1.41394 -1.88015 -0.361046 -0.127194 -0.923833 + -0.905215 1.41419 -1.85732 0.302473 0.209436 -0.929864 + -0.879577 1.38728 -1.85458 0.391346 0.0133918 -0.920146 + -0.977897 1.39575 -1.87826 0.162585 -0.14137 -0.976515 + -1.03086 1.39979 -1.88477 -0.114306 -0.409271 -0.905225 + -0.909016 1.37928 -1.86229 0.219388 -0.203368 -0.954207 + -0.880494 1.35811 -1.84722 0.260736 -0.32044 -0.910678 + -0.91712 1.35833 -1.85396 0.0698016 -0.443323 -0.89364 + -0.943902 1.36906 -1.86388 -0.0627396 -0.52475 -0.848941 + -0.935798 1.39002 -1.87222 0.0335625 -0.449008 -0.892897 + -0.916168 1.3136 -1.83618 -0.0729311 -0.532352 -0.843375 + -0.960586 1.34898 -1.84185 -0.287512 -0.601493 -0.745347 + -0.967246 1.38002 -1.86474 -0.232559 -0.636904 -0.73503 + -0.996414 1.38162 -1.86005 -0.0993971 -0.755664 -0.647373 + -0.988765 1.39406 -1.87874 0.0326634 -0.61536 -0.787569 + -1.05268 1.39308 -1.8694 -0.307762 -0.665633 -0.679864 + -1.07593 1.40723 -1.86478 -0.539408 -0.326004 -0.776377 + -1.06033 1.38065 -1.85071 -0.252805 -0.744048 -0.618452 + -1.09939 1.39036 -1.83797 -0.549298 -0.490807 -0.676299 + -1.12082 1.41464 -1.82495 -0.717299 -0.125166 -0.685431 + -1.06981 1.35429 -1.81241 -0.23753 -0.775376 -0.585125 + -1.10887 1.36402 -1.79966 -0.471611 -0.630467 -0.616518 + -1.14166 1.3961 -1.79896 -0.72833 -0.303682 -0.614257 + -1.1536 1.37329 -1.7689 -0.797641 -0.374192 -0.473022 + -1.16897 1.41515 -1.74191 -0.967478 -0.131729 -0.215948 + -1.02125 1.36435 -1.83674 -0.175971 -0.734549 -0.655341 + -1.01555 1.35052 -1.81807 -0.107532 -0.847897 -0.519141 + -1.06411 1.34048 -1.79374 -0.130243 -0.877904 -0.460783 + -1.12081 1.34121 -1.76961 -0.391113 -0.683013 -0.616866 + -0.99208 1.36275 -1.84143 -0.224003 -0.731134 -0.644411 + -0.993649 1.35055 -1.82362 -0.224075 -0.842317 -0.490196 + -1.00441 1.33839 -1.79689 -0.0287457 -0.936412 -0.349722 + -1.01752 1.33057 -1.77356 0.129109 -0.99008 -0.0554308 + -1.07722 1.33266 -1.77041 -0.118343 -0.865469 -0.486783 + -0.98393 1.35994 -1.8427 -0.31843 -0.674411 -0.666162 + -0.985499 1.34774 -1.8249 -0.414596 -0.790654 -0.450529 + -0.98251 1.3384 -1.80245 -0.215971 -0.95673 -0.194997 + -0.974722 1.33694 -1.78108 -0.0578647 -0.982442 0.17737 + -0.963161 1.32996 -1.82532 -0.533246 -0.708516 -0.462226 + -0.975116 1.33601 -1.80524 -0.504604 -0.860644 -0.0683099 + -0.918743 1.29457 -1.81965 -0.224243 -0.692597 -0.685583 + -0.952777 1.31823 -1.80566 -0.666774 -0.741382 -0.0759341 + -0.967328 1.33454 -1.78386 -0.495941 -0.83553 0.2365 + -0.918915 1.28339 -1.80822 -0.344704 -0.832042 -0.434609 + -0.94631 1.31106 -1.78594 -0.7073 -0.680454 0.191596 + -0.941823 1.32009 -1.7633 -0.742413 -0.612218 0.27205 + -0.962841 1.34356 -1.76123 -0.45567 -0.809372 0.370515 + -0.912448 1.27623 -1.78851 -0.464107 -0.851731 -0.243226 + -0.905776 1.26502 -1.76626 -0.525256 -0.844972 -0.100638 + -0.908231 1.27295 -1.75308 -0.852086 -0.513351 0.102083 + -0.944279 1.32802 -1.75012 -0.77189 -0.60442 0.197136 + -0.873374 1.26773 -1.7878 0.120622 -0.762145 -0.63607 + -0.866702 1.25654 -1.76555 0.179958 -0.967861 -0.175672 + -0.853746 1.26272 -1.72861 0.36219 -0.930236 -0.0589842 + -0.902844 1.26036 -1.73079 -0.455028 -0.882391 -0.119733 + -0.906507 1.2704 -1.74915 -0.906012 -0.423252 -0.000438769 + -0.854407 1.25904 -1.69102 0.400661 -0.916198 0.00725012 + -0.903505 1.25667 -1.6932 -0.427851 -0.898359 -0.0994688 + -0.943571 1.31249 -1.6796 -0.81202 -0.569409 -0.128053 + -0.933747 1.30773 -1.71638 -0.830983 -0.537681 -0.142713 + -0.93741 1.31778 -1.73474 -0.82851 -0.538919 -0.152109 + -0.824142 1.30322 -1.61679 0.635607 -0.656789 0.40575 + -0.875339 1.25203 -1.6549 0.218927 -0.960509 0.171738 + -0.906429 1.25446 -1.66273 -0.443213 -0.896406 -0.00427416 + -0.828588 1.32435 -1.58429 0.604075 -0.563931 0.563094 + -0.893779 1.26871 -1.61192 0.138584 -0.882422 0.449584 + -0.924869 1.27115 -1.61975 -0.561155 -0.82311 0.0871518 + -0.946496 1.31028 -1.64912 -0.801549 -0.580988 -0.14132 + -0.806637 1.36818 -1.57736 0.752837 -0.299582 0.586078 + -0.888762 1.33938 -1.5282 0.446472 -0.501837 0.740826 + -0.898225 1.28984 -1.57942 0.236675 -0.79988 0.551522 + -0.931525 1.27846 -1.59554 -0.446088 -0.86093 0.244549 + -0.944885 1.30645 -1.6432 -0.818586 -0.564125 -0.108075 + -0.866811 1.38322 -1.52127 0.533514 -0.259367 0.805041 + -0.915406 1.33821 -1.5161 0.146542 -0.625799 0.766095 + -0.898161 1.30431 -1.5557 0.548481 -0.695978 0.463447 + -0.931461 1.29292 -1.57181 -0.134422 -0.885844 0.444084 + -0.89667 1.41305 -1.49754 0.483713 -0.132438 0.865149 + -0.926071 1.48754 -1.48244 0.363866 -0.0126134 0.931366 + -0.958812 1.47239 -1.46701 0.222013 0.168505 0.960373 + -0.929411 1.3979 -1.48212 0.464505 -0.134078 0.875361 + -0.917671 1.53559 -1.47976 0.320139 -0.170836 0.93184 + -0.992002 1.49626 -1.47072 -0.106889 0.113836 0.987733 + -0.975596 1.43157 -1.46301 0.148548 0.0180906 0.98874 + -0.985385 1.40246 -1.46142 0.133275 0.00861454 0.991042 + -0.9392 1.36879 -1.48052 0.529687 -0.136329 0.837166 + -0.909642 1.57166 -1.47418 0.323231 -0.241514 0.914982 + -0.967667 1.5725 -1.4625 -0.132686 -0.192944 0.972197 + -0.975695 1.53644 -1.46807 -0.0810722 -0.07865 0.9936 + -1.02872 1.5178 -1.48609 -0.506208 0.164417 0.846594 + -1.00879 1.45545 -1.46672 -0.239736 0.115339 0.963962 + -0.849331 1.64797 -1.4825 0.606455 -0.0838512 0.790684 + -0.921571 1.62542 -1.45391 0.311314 -0.261905 0.913504 + -0.96191 1.62178 -1.44692 -0.148253 -0.293165 0.944497 + -0.99954 1.58436 -1.4781 -0.583804 -0.0313831 0.811288 + -1.01241 1.55797 -1.48345 -0.520782 0.112509 0.846243 + -0.89595 1.71482 -1.44879 0.651254 -0.120181 0.749283 + -0.924839 1.70033 -1.42998 0.425196 -0.289024 0.857714 + -0.965178 1.6967 -1.42299 -0.10667 -0.376135 0.920404 + -0.993784 1.63365 -1.46253 -0.644593 -0.203386 0.736976 + -1.03451 1.61165 -1.51412 -0.76567 0.0762977 0.638692 + -0.878852 1.73262 -1.46788 0.867103 0.180607 0.464234 + -0.899094 1.78978 -1.42827 0.925539 -0.0306324 0.377411 + -0.911742 1.78053 -1.41565 0.698934 -0.269162 0.662603 + -0.940631 1.76602 -1.39685 0.447424 -0.394469 0.802624 + -0.899087 1.79644 -1.43839 0.936939 0.327141 -0.122981 + -0.906243 1.84754 -1.39768 0.951956 0.259521 -0.16257 + -0.906249 1.84265 -1.39025 0.942178 -0.120714 0.312617 + -0.918897 1.8334 -1.37762 0.707862 -0.371766 0.600601 + -0.915972 1.85595 -1.4105 0.774524 0.461932 -0.432125 + -0.911958 1.89358 -1.35878 0.950607 0.262781 -0.165201 + -0.911964 1.88869 -1.35134 0.943951 -0.153564 0.292189 + -0.921495 1.8817 -1.34177 0.713127 -0.417147 0.563417 + -0.940133 1.82274 -1.3638 0.475995 -0.476833 0.738959 + -0.932314 1.86519 -1.42462 0.52505 0.602032 -0.601564 + -0.935626 1.90917 -1.38255 0.514935 0.630654 -0.580618 + -0.919284 1.89993 -1.36844 0.773918 0.477572 -0.415903 + -0.923294 1.9384 -1.32966 0.767415 0.509108 -0.389721 + -0.915968 1.93204 -1.31999 0.95007 0.28164 -0.134336 + -0.953835 1.86938 -1.43022 0.0313139 0.700647 -0.712821 + -0.95189 1.91233 -1.3868 0.0400432 0.730366 -0.681882 + -0.952452 1.94884 -1.34504 0.0329559 0.76326 -0.645251 + -0.936187 1.94568 -1.34079 0.520211 0.657447 -0.545109 + -0.971735 1.91015 -1.38211 -0.330231 0.696033 -0.637562 + -0.968108 1.94712 -1.34135 -0.322806 0.729585 -0.602911 + -0.950922 1.97011 -1.31884 0.0509809 0.857286 -0.512311 + -0.939359 1.96785 -1.31586 0.480082 0.770957 -0.418506 + -0.926466 1.96057 -1.30472 0.729153 0.6365 -0.251403 + -0.982981 1.90748 -1.37727 -0.620831 0.594702 -0.510782 + -0.979354 1.94445 -1.3365 -0.620038 0.623844 -0.475785 + -0.966579 1.96839 -1.31515 -0.302998 0.828806 -0.470397 + -0.96174 1.9735 -1.30556 -0.206415 0.96463 -0.163957 + -0.952584 1.9745 -1.30772 0.0363779 0.986315 -0.16081 + -0.993755 1.85983 -1.41314 -0.93619 0.299033 -0.184735 + -0.988169 1.90367 -1.37124 -0.936612 0.299991 -0.181005 + -0.983448 1.94144 -1.33175 -0.932314 0.326099 -0.156365 + -0.974644 1.9664 -1.31195 -0.572853 0.746425 -0.338658 + -0.969805 1.9715 -1.30236 -0.434444 0.89926 -0.0509001 + -1.00188 1.79872 -1.4398 -0.984069 0.0783702 0.159582 + -0.994129 1.84866 -1.39787 -0.99149 0.0328186 0.125979 + -0.988447 1.89522 -1.35972 -0.993575 0.0199373 0.111409 + -0.983726 1.933 -1.32021 -0.990769 0.0350772 0.130948 + -0.978738 1.9634 -1.30719 -0.874648 0.484746 -0.00345629 + -1.01623 1.74048 -1.4822 -0.948702 0.168944 0.26725 + -0.995673 1.77835 -1.41304 -0.914287 -0.11021 0.389786 + -0.989565 1.83369 -1.3782 -0.927134 -0.14191 0.346821 + -0.983883 1.88026 -1.34004 -0.927613 -0.177096 0.328893 + -0.980124 1.92119 -1.3047 -0.926822 -0.161084 0.339194 + -1.01002 1.72012 -1.45543 -0.884363 -0.0721925 0.461183 + -0.986358 1.70191 -1.42978 -0.597492 -0.306496 0.740988 + -0.983694 1.76718 -1.39836 -0.637187 -0.33585 0.693684 + -0.977586 1.82251 -1.36353 -0.632741 -0.390838 0.668494 + -0.974832 1.87181 -1.32896 -0.641643 -0.441238 0.627378 + -1.01744 1.65185 -1.48818 -0.816826 -0.104458 0.567348 + -0.962515 1.76197 -1.39159 -0.0408746 -0.466521 0.883565 + -0.962017 1.81868 -1.35854 -0.0486911 -0.536721 0.842354 + -1.04738 1.58525 -1.51946 -0.709079 0.214903 0.671583 + -1.06727 1.53607 -1.52473 -0.704163 0.22816 0.672382 + -1.04955 1.45545 -1.48666 -0.551179 0.162455 0.818419 + -1.10264 1.57041 -1.58462 -0.773551 0.281002 0.568029 + -1.1312 1.49015 -1.58202 -0.801776 0.204968 0.561376 + -1.0881 1.47372 -1.5253 -0.70442 0.195132 0.682434 + -1.08911 1.40826 -1.51204 -0.745394 0.0500508 0.664743 + -1.06464 1.41698 -1.4888 -0.596013 0.102991 0.796342 + -1.13073 1.57656 -1.62691 -0.802559 0.333469 0.494669 + -1.15929 1.49629 -1.62432 -0.877949 0.0822719 0.471633 + -1.16822 1.44519 -1.65465 -0.962054 -0.0510071 0.26805 + -1.16132 1.42747 -1.62544 -0.952895 -0.0187484 0.30272 + -1.14646 1.44239 -1.58743 -0.886167 0.0826178 0.455941 + -1.18177 1.46764 -1.69911 -0.999475 -0.00395709 0.0321609 + -1.16971 1.38401 -1.71198 -0.980138 -0.195089 -0.0356455 + -1.16281 1.36629 -1.68276 -0.954273 -0.243047 0.174045 + -1.15087 1.38488 -1.61849 -0.902374 -0.258588 0.344752 + -1.13601 1.3998 -1.58048 -0.859078 -0.156505 0.487331 + -1.15435 1.34214 -1.73898 -0.838713 -0.427998 -0.336717 + -1.15551 1.33786 -1.69304 -0.908353 -0.40434 0.106789 + -1.14358 1.35647 -1.62877 -0.842491 -0.434269 0.318779 + -1.12177 1.38211 -1.56183 -0.849258 -0.147795 0.50687 + -1.10336 1.42596 -1.53069 -0.776559 0.0606686 0.627116 + -1.14122 1.31857 -1.73434 -0.532018 -0.776227 -0.338274 + -1.14238 1.31428 -1.68841 -0.53909 -0.8226 0.180862 + -1.13185 1.33538 -1.63701 -0.478529 -0.805413 0.349743 + -1.123 1.3416 -1.60631 -0.49341 -0.837358 0.235324 + -1.13473 1.36269 -1.59807 -0.932562 -0.184748 0.310156 + -1.09764 1.31002 -1.73515 -0.0600342 -0.968137 -0.24312 + -1.08148 1.30923 -1.71925 0.173325 -0.957252 -0.231574 + -1.09911 1.30895 -1.69599 0.0262624 -0.986821 0.159673 + -1.08858 1.33004 -1.64459 0.0642073 -0.951029 0.302361 + -1.08388 1.33706 -1.61943 0.00117658 -0.99386 0.110644 + -1.01234 1.33979 -1.75085 0.268562 -0.959749 0.0821983 + -0.998055 1.34162 -1.73825 0.217022 -0.957711 -0.188919 + -1.08335 1.31185 -1.72254 0.428468 -0.728845 -0.534041 + -0.969543 1.34615 -1.75837 0.0101574 -0.956433 0.291774 + -0.965886 1.35 -1.74384 -0.0307256 -0.999527 -0.00144084 + -0.995594 1.34006 -1.73234 0.173426 -0.844825 -0.506155 + -0.959184 1.34741 -1.74669 -0.5284 -0.828906 0.183597 + -0.963425 1.34844 -1.73791 -0.140448 -0.919039 -0.368294 + -0.99372 1.33744 -1.72904 0.0845933 -0.640538 -0.763253 + -0.990595 1.33114 -1.72509 0.13701 -0.886124 -0.442733 + -1.00822 1.33085 -1.70182 0.19308 -0.964863 0.17821 + -0.95694 1.34591 -1.74022 -0.612021 -0.784068 -0.103283 + -0.960751 1.3446 -1.73259 -0.203137 -0.7347 -0.647264 + -0.957626 1.33829 -1.72863 -0.22033 -0.861657 -0.457167 + -0.960991 1.33745 -1.70855 -0.107104 -0.993787 0.0302585 + -1.01772 1.33528 -1.66846 0.135129 -0.971788 0.19331 + -0.942035 1.32651 -1.74363 -0.811014 -0.581756 0.0617796 + -0.954266 1.34206 -1.73489 -0.641603 -0.690389 -0.334229 + -0.951365 1.33587 -1.72993 -0.6809 -0.684109 -0.261477 + -0.95473 1.33503 -1.70984 -0.621785 -0.775724 -0.107869 + -0.970486 1.34187 -1.67517 -0.0865242 -0.99325 0.0772496 + -0.940311 1.32397 -1.7397 -0.825138 -0.555887 -0.100681 + -0.964555 1.33979 -1.67305 -0.588996 -0.805096 -0.070021 + -0.975047 1.343 -1.65421 -0.106749 -0.994286 0.000790287 + -0.969116 1.34092 -1.65209 -0.563581 -0.810951 -0.15727 + -0.975156 1.34222 -1.6462 -0.256534 -0.918018 -0.302379 + -1.01302 1.3423 -1.6433 0.0684837 -0.994645 0.0774064 + -0.967505 1.3371 -1.64616 -0.647959 -0.704487 -0.289564 + -0.972093 1.32925 -1.62651 -0.345998 -0.785019 -0.513839 + -1.00627 1.33112 -1.61759 -0.16015 -0.833879 -0.528202 + -1.01313 1.34151 -1.63528 -0.0436079 -0.956924 -0.287044 + -0.95154 1.31375 -1.61899 -0.655142 -0.70744 -0.265174 + -0.964442 1.32413 -1.62648 -0.415925 -0.775437 -0.475083 + -0.966954 1.3028 -1.59418 -0.0525192 -0.818805 -0.571665 + -1.00113 1.30466 -1.58525 -0.226532 -0.810941 -0.539497 + -0.946222 1.29217 -1.58454 -0.386929 -0.921374 -0.0368235 + -0.959124 1.30255 -1.59204 -0.133294 -0.838926 -0.52767 + -0.965185 1.29072 -1.57667 0.00321453 -0.875983 -0.482332 + -0.99787 1.29022 -1.56055 -0.215064 -0.876743 -0.430197 + -1.05856 1.31114 -1.56816 -0.34662 -0.865903 -0.360648 + -0.939566 1.30239 -1.55634 -0.38153 -0.701608 0.601815 + -0.957355 1.29046 -1.57453 -0.0240168 -0.983625 0.178618 + -0.961993 1.29199 -1.57414 0.182617 -0.817752 0.545832 + -0.964165 1.28973 -1.57497 0.433743 -0.878655 -0.199582 + -0.996851 1.28924 -1.55885 -0.0132995 -0.987392 -0.157734 + -0.924805 1.30314 -1.54361 -0.13515 -0.744394 0.65392 + -0.921874 1.33846 -1.52023 -0.14568 -0.778188 0.610901 + -0.946034 1.30264 -1.56046 -0.34344 -0.565627 0.749743 + -0.950673 1.30417 -1.56006 0.0581413 -0.778074 0.625476 + -0.95556 1.31203 -1.54408 0.373475 -0.801729 0.466634 + -0.977756 1.2971 -1.54699 0.516219 -0.732936 0.443085 + -0.979928 1.29485 -1.54782 0.413325 -0.843953 0.341914 + -1.03297 1.28272 -1.52354 -0.189174 -0.978299 0.084523 + -1.05531 1.2967 -1.54347 -0.565358 -0.794439 -0.221892 + -0.926761 1.34633 -1.50425 -0.144246 -0.947473 0.285463 + -0.965624 1.33399 -1.49664 0.395119 -0.790783 0.467486 + -0.987821 1.31907 -1.49956 0.489562 -0.730359 0.476345 + -1.01605 1.28833 -1.51252 0.288612 -0.884435 0.366711 + -1.04665 1.2969 -1.50157 -0.532196 -0.687789 0.493673 + -0.936756 1.35346 -1.48437 0.581016 -0.413242 0.701179 + -0.975619 1.34114 -1.47677 0.380523 -0.763947 0.52114 + -0.99798 1.32681 -1.47853 0.436767 -0.698445 0.566931 + -1.02621 1.29607 -1.4915 0.0172932 -0.790759 0.611884 + -0.995526 1.34064 -1.46447 0.2745 -0.432883 0.85864 + -1.01789 1.32631 -1.46624 -0.0142333 -0.495639 0.868412 + -1.03833 1.32715 -1.47631 -0.540477 -0.35733 0.761708 + -1.06899 1.31088 -1.52149 -0.716384 -0.627478 0.305066 + -0.99797 1.35597 -1.46064 0.141579 -0.118927 0.982757 + -1.02708 1.35498 -1.46118 -0.341749 -0.06788 0.937337 + -1.06688 1.337 -1.49782 -0.713885 -0.278871 0.642339 + -1.09143 1.34996 -1.52572 -0.79421 -0.296403 0.530449 + -1.09355 1.32383 -1.54939 -0.716845 -0.681378 0.147839 + -1.01449 1.40147 -1.46196 -0.216498 0.182084 0.959153 + -1.05562 1.36483 -1.48268 -0.632206 -0.0377527 0.77388 + -1.02388 1.41698 -1.46886 -0.355908 0.101447 0.928998 + -1.06501 1.38033 -1.48959 -0.620866 -0.0466155 0.78253 + -1.08948 1.37162 -1.51283 -0.725051 -0.191942 0.661406 + -1.12372 1.36045 -1.57473 -0.840676 -0.361587 0.403136 + -1.10928 1.33905 -1.57589 -0.644088 -0.754409 0.12656 + -1.12029 1.3413 -1.59924 -0.509695 -0.845123 0.161175 + -1.08116 1.33676 -1.61236 -0.137504 -0.971094 -0.195111 + -1.0743 1.32636 -1.59466 -0.288154 -0.882814 -0.370955 + -0.942731 1.87105 -1.32796 0.470613 -0.53673 0.700317 + -0.959263 1.86798 -1.32398 -0.0407287 -0.603519 0.796307 + -0.971073 1.91275 -1.29362 -0.629854 -0.437929 0.641484 + -0.925505 1.92119 -1.30457 0.708799 -0.410987 0.573318 + -0.942258 1.91278 -1.29366 0.474868 -0.529428 0.702998 + -0.95879 1.90972 -1.28968 -0.0502332 -0.596344 0.801156 + -0.968843 1.93965 -1.27537 -0.59362 -0.156437 0.789394 + -0.915973 1.92818 -1.31413 0.9417 -0.13543 0.307993 + -0.921247 1.95218 -1.29197 0.878811 0.0971569 0.467175 + -0.928037 1.94721 -1.28517 0.67805 -0.143793 0.720813 + -0.94479 1.9388 -1.27427 0.429764 -0.253191 0.866716 + -0.956559 1.93662 -1.27144 -0.0317741 -0.296374 0.954543 + -0.921242 1.95604 -1.29783 0.888691 0.458377 0.0109046 + -0.928256 1.96346 -1.29133 0.661668 0.710279 0.240207 + -0.928259 1.9612 -1.2879 0.651468 0.469038 0.596316 + -0.935049 1.95622 -1.2811 0.489499 0.261265 0.831944 + -0.93348 1.96797 -1.29823 0.54589 0.837766 0.0123134 + -0.937365 1.96768 -1.28845 0.270531 0.86261 0.427454 + -0.937368 1.96542 -1.28502 0.262033 0.698448 0.665965 + -0.947165 1.96051 -1.27864 0.140392 0.633998 0.760485 + -0.944847 1.95131 -1.27473 0.337241 0.215795 0.916352 + -0.94102 1.97224 -1.30474 0.383802 0.918964 -0.0905595 + -0.944905 1.97195 -1.29496 0.10464 0.94009 0.324471 + -0.951054 1.97051 -1.29305 0.0350931 0.868002 0.495319 + -0.953314 1.95908 -1.27673 0.0168759 0.606118 0.795196 + -0.956616 1.94912 -1.2719 -0.0406626 0.213546 0.976086 + -0.954131 1.97383 -1.29744 0.236857 0.933192 0.270279 + -0.963575 1.96415 -1.28342 -0.26646 0.715367 0.645948 + -0.960497 1.96084 -1.27902 -0.193969 0.652721 0.732347 + -0.963799 1.9509 -1.2742 -0.405418 0.292556 0.866053 + -0.975262 1.94566 -1.28323 -0.861922 0.0563489 0.5039 + -0.963287 1.97281 -1.29528 -0.1506 0.940355 0.305045 + -0.965681 1.97106 -1.2925 -0.311302 0.810207 0.496644 + -0.972324 1.96381 -1.29113 -0.71808 0.511063 0.472415 + -0.970218 1.95691 -1.28205 -0.654836 0.419876 0.628405 + -0.978864 1.95746 -1.29875 -0.932867 0.239561 0.269016 + -0.972199 1.96974 -1.29958 -0.659069 0.721789 0.211303 + -0.789559 1.94929 -1.44557 0.797223 -0.245734 0.551407 + -0.806352 1.93965 -1.43468 0.475559 -0.412121 0.777174 + -0.788254 2.00064 -1.42894 0.972321 0.0246218 0.23235 + -0.795539 1.99244 -1.41536 0.787449 -0.233208 0.57056 + -0.808788 1.98483 -1.40677 0.478136 -0.401277 0.781257 + -0.813198 2.01283 -1.39175 0.406694 -0.104484 0.90757 + -0.82469 2.01045 -1.38907 0.0617445 -0.165163 0.984332 + -0.795223 2.03311 -1.42523 0.855236 0.517339 -0.0305339 + -0.794767 2.02627 -1.40999 0.883444 0.28071 0.375139 + -0.799949 2.02044 -1.40034 0.713175 0.0680769 0.697673 + -0.809004 2.04415 -1.42744 0.459793 0.881303 -0.109063 + -0.802656 2.03978 -1.4173 0.609237 0.770695 0.186706 + -0.802389 2.03578 -1.4084 0.586213 0.66012 0.469675 + -0.807571 2.02994 -1.39874 0.454208 0.468879 0.757527 + -0.822531 2.04825 -1.42455 0.0694523 0.991485 0.110152 + -0.813634 2.04593 -1.41883 0.246162 0.940865 0.232762 + -0.813367 2.04193 -1.40993 0.219155 0.818463 0.531121 + -0.819485 2.04025 -1.40646 0.0644264 0.872314 0.484683 + -0.817687 2.0367 -1.40026 0.173607 0.754034 0.633477 + -0.831042 2.04727 -1.42219 -0.0937982 0.973253 0.209717 + -0.837159 2.04559 -1.41873 -0.214142 0.939507 0.26734 + -0.841188 2.04106 -1.40945 -0.283642 0.856168 0.431883 + -0.83939 2.03751 -1.40323 -0.243246 0.769416 0.590619 + -0.825435 2.03225 -1.39523 0.0387021 0.597015 0.801296 + -0.815319 2.0255 -1.39372 0.278633 0.332372 0.901051 + -0.845322 2.02775 -1.39775 -0.484795 0.411847 0.771593 + -0.83427 2.03325 -1.39638 -0.146429 0.66012 0.73675 + -0.835646 2.02411 -1.39219 -0.227252 0.297854 0.927167 + -0.826811 2.02311 -1.39104 0.022814 0.272858 0.961784 + 0 1.88767 -3.35525 0.954836 0.139621 -0.262288 + -0.00609 1.89928 -3.38721 0.73586 0.391916 -0.552188 + -0.00609 1.92264 -3.37029 0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 0.995304 0.0615783 -0.0746866 + -0.00609 1.93619 -3.35816 0.804944 0.379203 -0.456367 + 0 1.92457 -3.32621 0.995095 0.069045 -0.0708434 + 0 1.97685 -3.27268 0.992394 0.102252 -0.0685482 + -0.00609 1.98847 -3.30463 0.876866 0.357759 -0.321114 + -0.014034 2.05323 -3.24402 0.847172 0.410905 -0.336834 + 0 2.00459 -3.23674 0.987841 0.135558 -0.0761145 + -0.036542 2.02576 -3.30766 0.469584 0.580569 -0.665154 + -0.044486 2.09052 -3.24705 0.596458 0.635622 -0.490125 + -0.014034 2.08098 -3.20808 0.881133 0.428775 -0.199391 + -0.023387 2.12143 -3.14955 0.815642 0.528358 -0.235726 + -0.011587 2.09962 -3.13161 0.964855 0.259286 -0.0427265 + 0 1.98306 -3.19152 0.996986 -0.00648198 0.0773058 + -0.049274 1.91604 -3.38694 0.229826 0.457821 -0.858825 + -0.079725 2.04251 -3.30739 0.188988 0.587024 -0.787202 + -0.0805 2.12506 -3.23831 0.409341 0.71635 -0.565051 + -0.03972 2.11125 -3.19831 0.626549 0.689362 -0.363617 + -0.049073 2.1517 -3.13979 0.618566 0.697315 -0.362115 + -0.136609 2.08013 -3.29146 0.0487676 0.600445 -0.798177 + -0.137384 2.16267 -3.22238 0.22175 0.733824 -0.642129 + -0.075734 2.14578 -3.18957 0.547429 0.728775 -0.411349 + -0.075698 2.17553 -3.13363 0.573402 0.726165 -0.379335 + -0.070733 2.20765 -3.06834 0.585511 0.678113 -0.444229 + -0.128582 1.91321 -3.39442 0.0116184 0.419262 -0.907791 + -0.194055 1.90173 -3.39661 -0.116477 0.390591 -0.913166 + -0.202082 2.06864 -3.29366 -0.12001 0.562741 -0.817876 + -0.183074 2.18144 -3.21184 -0.0442381 0.828972 -0.557538 + -0.106772 2.17875 -3.1773 0.434574 0.770525 -0.4663 + -0.033943 1.8295 -3.41372 0.518421 -0.283289 -0.806837 + -0.113252 1.82668 -3.4212 0.061524 -0.295893 -0.953238 + -0.168645 1.82333 -3.42097 -0.0308865 -0.303605 -0.952297 + -0.232151 1.89626 -3.39129 -0.253492 0.360478 -0.897662 + 0 1.9393 -3.21829 0.982047 -0.14436 0.121427 + 0 1.88998 -3.27556 0.964815 -0.232589 0.122617 + 0 1.86404 -3.32057 0.952614 -0.300232 0.0488543 + 0.00609 1.89928 -3.38721 1 0 0 + 0.00609 1.92264 -3.37029 1 0 0 + 0.00609 1.98847 -3.30463 1 0 0 + 0.00609 1.93619 -3.35816 1 0 0 + 0.049543 1.96837 -1.07328 -0.995507 -0.0901895 -0.0288196 + 0.016514 2.25648 -0.879903 -0.99532 -0.0892786 -0.0369856 + 1.6236 1.20702 0.333423 0.510365 0.290661 -0.809348 + 1.58944 1.14183 0.294724 0.959968 -0.235533 -0.151609 + 1.54797 1.02022 0.202565 0.523282 -0.620808 0.583757 + 1.66144 1.21731 0.386587 0.829473 0.000741546 -0.558546 + 1.63799 1.14373 0.332233 0.716039 0.258524 -0.648423 + 1.59651 1.02203 0.240025 0.672063 0.290901 -0.680961 + 1.54797 1.02022 0.202565 0.226642 0.528293 -0.818254 + 1.6956 1.2825 0.425286 0.827912 -0.190931 -0.527359 + 1.73453 1.32555 0.469515 0.59851 -0.0676555 -0.798253 + 1.692 1.22698 0.438445 0.845628 -0.195696 -0.496605 + 1.66855 1.1534 0.384091 0.935831 -0.0489318 -0.349036 + 1.61359 1.00509 0.256167 0.913109 0.016752 -0.40737 + 1.77486 1.40457 0.487045 0.498028 0.350576 -0.793136 + 1.81379 1.44763 0.531275 0.346877 -0.0339696 -0.937295 + 1.58713 1.18209 0.312985 -0.214621 0.648706 -0.73015 + 1.73839 1.37974 0.466657 -0.0308607 0.628315 -0.777347 + 1.51058 1.01353 0.204356 -0.374377 0.604993 -0.702727 + 1.54999 1.18402 0.345052 -0.372224 0.60787 -0.701387 + 1.53494 1.20168 0.361265 -0.208387 0.42428 -0.881227 + 1.72335 1.39731 0.482819 0.304993 0.269628 -0.913389 + 1.51479 0.962226 0.156811 -0.157681 0.565375 -0.809622 + 1.45289 0.782328 0.067205 -0.72597 0.439872 -0.528659 + 1.47344 1.01536 0.236373 -0.883827 0.40215 -0.239009 + 1.47932 1.00805 0.26964 -0.944953 -0.0140928 0.326903 + 1.46916 0.732146 0.009719 0.102647 0.384459 -0.917418 + 1.4571 0.731029 0.019659 -0.6994 0.421026 -0.57756 + 1.43836 0.646562 -0.011843 -0.689147 -0.261958 -0.675614 + 1.44014 0.777232 0.086428 -0.967332 0.207528 -0.145603 + 1.44603 0.769833 0.119645 -0.805823 -0.299857 0.510622 + 1.50234 0.79014 0.055474 0.350218 0.433111 -0.830519 + 1.45043 0.647681 -0.021782 -0.393666 -0.207783 -0.895463 + 1.45404 0.627251 0.013604 -0.290697 -0.932272 0.215325 + 1.42562 0.641468 0.007382 -0.886585 -0.459955 -0.0490732 + 1.51852 0.785997 0.06025 0.577753 0.321199 -0.750355 + 1.48511 0.641076 -0.02074 0.425259 -0.331964 -0.841994 + 1.46893 0.645218 -0.025515 0.351453 0.393669 -0.849415 + 1.5356 0.768969 0.076342 0.826409 0.117779 -0.550615 + 1.49533 0.629724 -0.003278 0.636739 -0.730776 -0.246027 + 1.47254 0.624788 0.009871 0.0761257 -0.98873 0.128911 + 1.46893 0.645218 -0.025515 -0.0765132 -0.866848 -0.492667 + 1.54581 0.757617 0.093804 0.960075 -0.197828 -0.197786 + 1.54175 0.759103 0.13323 0.734959 -0.571755 0.364598 + 1.51896 0.754167 0.146379 0.402359 -0.716633 0.569687 + 1.46893 0.645218 -0.025515 -0.20936 -0.855931 -0.472811 + 1.61953 1.00237 0.294474 0.955052 -0.29502 -0.0289627 + 1.61547 1.00377 0.333851 0.872187 -0.461668 0.16172 + 1.59729 0.998827 0.391816 0.627257 -0.656573 0.418881 + 1.58579 1.01838 0.423353 -0.192795 -0.685146 0.702428 + 1.50747 0.773805 0.177967 -0.206319 -0.667966 0.715021 + 1.67448 1.15068 0.422399 0.94249 -0.303089 -0.140891 + 1.67055 1.13745 0.474519 0.812658 -0.580282 0.0534738 + 1.65236 1.1325 0.532484 0.499967 -0.79345 0.347087 + 1.6239 1.12854 0.542745 -0.22435 -0.727669 0.648201 + 1.5559 1.00482 0.38144 -0.696829 -0.400836 0.594778 + 1.71906 1.19827 0.504771 0.795508 -0.541855 -0.27122 + 1.71512 1.18512 0.556941 0.593966 -0.802384 -0.0581649 + 1.69311 1.18699 0.618116 0.136508 -0.989503 0.0474213 + 1.66465 1.18294 0.628327 0.200871 -0.977265 0.0678582 + 1.59401 1.11498 0.500832 -0.536172 -0.561187 0.630547 + 1.76075 1.29119 0.47323 0.475269 -0.3485 -0.807878 + 1.78781 1.26248 0.539557 0.424672 -0.579949 -0.695207 + 1.75006 1.18048 0.619176 -0.225521 -0.899222 -0.374887 + 1.7667 1.31913 0.465227 0.11062 0.0739337 -0.991109 + 1.93628 1.39256 0.520656 0.356604 -0.348769 -0.866714 + 1.99104 1.3952 0.534275 0.362224 -0.0715316 -0.929342 + 1.84258 1.26504 0.553125 0.0784366 -0.223787 -0.971477 + 1.82655 1.19522 0.562452 -0.2759 -0.454501 -0.84694 + 1.81123 1.37244 0.505908 -0.110928 0.598447 -0.793445 + 1.94223 1.4205 0.512653 0.241929 0.0903826 -0.966075 + 2.0225 1.50484 0.536169 0.469032 -0.0321816 -0.882595 + 2.02235 1.43909 0.554254 0.998357 -0.0372874 -0.0434996 + 1.9796 1.30111 0.527655 0.0897314 0.0114527 -0.9959 + 1.77906 1.37894 0.510245 0.454176 0.201232 -0.867888 + 1.83752 1.41218 0.525862 -0.0167261 0.380014 -0.924829 + 1.96852 1.46025 0.532606 -0.280149 0.456054 -0.844708 + 1.87225 1.48096 0.54694 0.239515 -0.124146 -0.962923 + 1.92623 1.52564 0.550554 0.172475 -0.161453 -0.971692 + 2.05331 1.58948 0.539771 0.54734 -0.332092 -0.768202 + 2.06414 1.60558 0.55548 0.780939 -0.375439 0.49918 + 2.03333 1.52095 0.551879 0.927057 -0.258818 0.271255 + 1.95708 1.57075 0.541413 0.0655887 -0.168645 -0.983492 + 2.08416 1.6346 0.53063 0.567752 -0.724193 -0.391411 + 2.11451 1.66753 0.53599 0.666764 -0.427903 0.610184 + 2.02913 1.63205 0.580633 0.618854 -0.235073 0.749506 + 1.97252 1.54083 0.60224 0.710247 -0.160271 0.685465 + 1.95975 1.6027 0.539277 -0.0294818 0.0429675 -0.998641 + 2.14566 1.68514 0.49968 0.471094 -0.603399 -0.643414 + 2.17601 1.71808 0.505039 0.493545 -0.803153 0.333705 + 1.76554 1.46641 0.498737 0.555026 -0.166265 -0.815048 + 1.98658 1.67634 0.551519 0.0189887 -0.0624135 -0.99787 + 2.14832 1.71718 0.497593 -0.0606716 -0.0515479 -0.996826 + 2.17601 1.71808 0.505039 0.261306 -0.0843447 -0.961564 + 1.56869 1.32141 0.392478 0.470856 -0.431441 -0.769515 + 1.60429 1.36788 0.362601 0.509988 -0.43286 -0.743333 + 1.79238 1.54006 0.510979 0.368331 -0.00141475 -0.929694 + 1.52649 1.25232 0.376561 -0.192984 0.279094 -0.940672 + 1.46161 1.25622 0.403405 -0.330055 0.398679 -0.85564 + 1.48532 1.13277 0.359413 -0.976364 -0.00819381 -0.215976 + 1.47688 1.18341 0.374709 -0.843832 0.154716 -0.51382 + 1.47147 1.2329 0.468794 -0.970484 -0.240582 -0.016795 + 1.46161 1.25622 0.403405 -0.182658 -0.93444 -0.30571 + 1.52888 1.11144 0.419164 -0.746584 -0.541723 0.386197 + 1.48992 1.15558 0.452516 -0.822669 -0.532214 0.19991 + 1.48452 1.20507 0.546602 -0.87594 -0.449635 0.174809 + 1.4716 1.28252 0.647242 -0.84839 -0.525813 0.0612872 + 1.46174 1.30584 0.581852 -0.861665 -0.490563 0.12993 + 1.46161 1.25622 0.403405 -0.971142 -0.229598 0.0645564 + 1.52288 0.986717 0.329392 -0.765954 -0.330527 0.551422 + 1.55706 1.1107 0.47205 -0.537589 -0.644784 0.543371 + 1.5181 1.15484 0.505402 -0.489018 -0.784974 0.380363 + 1.47445 0.755618 0.125868 -0.576922 -0.479247 0.661425 + 1.46893 0.645218 -0.025515 -0.105967 0.503593 -0.857417 + 1.58083 1.16837 0.550749 -0.21705 -0.88192 0.418456 + 1.58246 1.19137 0.640725 -0.43872 -0.885924 0.150543 + 1.51974 1.17783 0.595377 -0.45268 -0.838773 0.302557 + 1.51282 1.25382 0.698348 -0.681814 -0.722766 0.11287 + 1.61778 1.17266 0.579532 -0.145801 -0.943844 0.296481 + 1.61781 1.15953 0.666276 -0.0959474 -0.982855 -0.15745 + 1.57418 1.16189 0.764578 -0.656618 -0.640319 -0.398554 + 1.54804 1.22667 0.747174 -0.744862 -0.641889 -0.182097 + 1.4986 1.24995 0.798455 -0.203004 -0.719298 -0.664379 + 1.66467 1.16989 0.715122 -0.293473 -0.835617 -0.464346 + 1.60952 1.13005 0.79013 -0.62645 -0.479115 -0.614824 + 1.54296 1.11265 0.844866 -0.310264 -0.353472 -0.882493 + 1.51682 1.17743 0.827462 -0.325504 -0.413572 -0.850297 + 1.6787 1.12823 0.732476 -0.163096 -0.590504 -0.790383 + 1.61213 1.05113 0.783223 -0.548869 -0.241584 -0.800238 + 1.5683 0.988111 0.841178 -0.547422 0.0486342 -0.835442 + 1.56569 1.06703 0.848084 -0.525994 -0.0993635 -0.844664 + 1.45821 0.993018 0.875279 -0.0813083 -0.209352 -0.974454 + 1.72804 1.18235 0.680351 -0.155506 -0.879822 -0.449146 + 1.68426 1.0677 0.780728 -0.125696 -0.429738 -0.894162 + 1.62616 1.00947 0.800577 -0.440865 -0.10875 -0.890961 + 1.56293 0.938751 0.83707 -0.558799 0.180336 -0.809458 + 1.48094 0.947396 0.878496 -0.109455 0.0458741 -0.992932 + 1.79385 1.1297 0.65013 -0.628969 -0.456384 -0.629374 + 1.73359 1.12172 0.728555 -0.484665 -0.476802 -0.733321 + 1.74233 1.05453 0.745943 -0.701051 -0.139494 -0.699335 + 1.67503 0.993074 0.804182 -0.147553 -0.213552 -0.965724 + 1.60738 0.938317 0.794822 -0.189863 -0.0721526 -0.979156 + 1.87035 1.14444 0.593406 -0.490213 -0.410335 -0.768971 + 1.8714 1.0663 0.595953 -0.6176 0.0565013 -0.78446 + 1.80259 1.06251 0.667518 -0.756807 -0.0514879 -0.651608 + 1.95605 1.14271 0.540193 -0.166259 -0.0730329 -0.983374 + 1.9571 1.06466 0.54279 -0.26905 0.113571 -0.956407 + 1.93511 0.978054 0.527395 -0.350577 0.23699 -0.906053 + 1.86448 0.985962 0.583301 -0.651692 0.209617 -0.728944 + 1.79567 0.982171 0.654865 -0.797821 0.127589 -0.589238 + 1.96358 1.2312 0.53693 -0.005607 -0.0794771 -0.996821 + 2.04117 1.26221 0.547429 0.52779 0.198538 -0.825846 + 2.03364 1.17372 0.55069 0.254421 0.0580307 -0.965351 + 2.05537 1.09401 0.543158 0.214348 0.118331 -0.969563 + 2.01091 1.34499 0.547634 0.81624 0.127041 -0.563572 + 2.03594 1.30382 0.610558 0.68583 0.48723 -0.540595 + 2.11727 1.24118 0.595449 0.471294 0.349728 -0.809674 + 2.139 1.16138 0.587867 0.408253 0.205988 -0.889325 + 2.00568 1.3866 0.610764 0.8956 0.389303 -0.215274 + 2.10772 1.36445 0.683332 0.390779 0.544198 -0.742388 + 2.18905 1.30173 0.668173 0.378002 0.493255 -0.783462 + 2.24957 1.22143 0.659059 0.45356 0.315919 -0.833354 + 2.17508 1.07656 0.587571 0.400354 0.195079 -0.895355 + 1.96154 1.45906 0.604665 0.906871 0.294318 0.3016 + 1.95162 1.54327 0.695611 0.848633 0.372677 -0.375412 + 1.99576 1.4709 0.701759 0.63831 0.508945 -0.577525 + 1.93662 1.58282 0.663307 0.960497 -0.0456671 0.274518 + 1.93684 1.67183 0.814343 0.739532 0.196784 -0.643714 + 2.03334 1.60485 0.811952 0.408198 0.516888 -0.752463 + 2.09902 1.56519 0.821239 0.367379 0.493529 -0.788328 + 2.06144 1.43124 0.711046 0.395982 0.556402 -0.73049 + 1.99323 1.67405 0.641699 0.67895 -0.496368 0.540967 + 1.92184 1.71138 0.78204 0.919819 -0.383088 -0.0847195 + 2.03223 1.70722 0.876638 0.371309 0.231117 -0.899285 + 2.12873 1.64024 0.874247 0.273064 0.369404 -0.888244 + 2.0795 1.694 0.561142 0.541121 -0.520916 0.660178 + 2.03537 1.72045 0.660322 0.397973 -0.822373 0.406595 + 1.96398 1.75787 0.800712 0.625753 -0.757657 -0.185443 + 2.0187 1.73586 0.876834 0.549683 -0.251798 -0.796522 + 2.35291 1.59576 0.903702 0.0285107 -0.0624801 -0.997639 + 2.17601 1.71808 0.505039 0.52057 -0.115346 0.845992 + 1.46161 1.25622 0.403405 0.349143 -0.681253 -0.643423 + 1.49721 1.30268 0.373527 -0.37272 -0.374124 -0.849182 + 1.59486 1.39116 0.355271 0.0661859 0.295105 -0.95317 + 1.78295 1.56325 0.503601 0.316794 0.174222 -0.932356 + 1.51069 1.33656 0.353853 0.384043 -0.57319 -0.723854 + 0.671558 1.21943 0.636123 0.983072 0.18314 0.00534615 + 0.677479 1.19172 0.631921 0.799627 0.0806201 0.595061 + 0.703623 1.13731 0.604161 0.7663 0.0905741 -0.636067 + 0.664457 1.19876 0.575727 0.786868 0.20078 -0.583546 + 0.663568 1.37192 0.710797 0.897814 -0.419412 0.134249 + 0.631551 1.33229 0.770247 0.955351 -0.0690554 -0.287291 + 0.637472 1.30458 0.766046 0.553653 0.636433 -0.537048 + 0.677479 1.19172 0.631921 0.973251 0.187902 0.132193 + 0.623492 1.11123 0.541927 0.564488 -0.20943 -0.798431 + 0.60316 1.24951 0.528621 0.62607 0.163866 -0.762354 + 0.656467 1.35125 0.650401 0.909619 0.108296 -0.40108 + 0.694071 1.41874 0.7437 0.588084 -0.775142 -0.230894 + 0.658484 1.06232 0.591236 0.561809 -0.332218 -0.757629 + 0.532736 1.01616 0.534984 0.473469 -0.412744 -0.77812 + 0.696479 1.01014 0.640421 0.599495 -0.459591 -0.655273 + 0.567728 0.967259 0.584293 0.476373 -0.563204 -0.675182 + 0.741618 1.08512 0.653345 0.824359 -0.0358048 -0.564934 + 0.721161 0.972399 0.702789 0.600172 -0.566654 -0.564532 + 0.592998 0.932483 0.647929 0.46096 -0.676248 -0.574633 + 0.489273 0.883681 0.623055 0.38148 -0.760402 -0.525607 + 0.464003 0.918458 0.55942 0.387628 -0.676796 -0.625853 + 0.713836 1.20864 0.668001 0.550632 0.327563 -0.767793 + 0.735281 1.17415 0.702152 0.570207 0.00791372 -0.821463 + 0.763063 1.05071 0.687546 0.771286 -0.231551 -0.592876 + 0.738363 0.929695 0.768755 0.54624 -0.689676 -0.475361 + 0.61768 0.894655 0.710248 0.432531 -0.766956 -0.47402 + 0.677479 1.19172 0.631921 0.432823 0.565969 -0.701671 + 0.687693 1.26305 0.695763 -0.126491 0.626772 -0.768867 + 0.718215 1.30967 0.728414 -0.224358 0.627313 -0.745749 + 0.775011 1.29018 0.707583 0.0104317 0.38707 -0.921991 + 0.77941 1.22822 0.700495 0.213732 0.0171579 -0.976742 + 0.775003 1.09627 0.700841 0.393209 -0.12387 -0.911067 + 0.780265 1.00801 0.753511 0.74184 -0.378022 -0.553871 + 0.667994 1.35128 0.798747 0.0131407 0.405127 -0.914166 + 0.799592 1.37863 0.763184 -0.24156 0.326181 -0.913923 + 0.856388 1.35922 0.742404 -0.168118 0.308778 -0.936159 + 0.894765 1.27125 0.713165 0.0208732 0.145352 -0.98916 + 0.899164 1.20921 0.706027 0.134098 -0.077727 -0.987915 + 0.662054 1.37911 0.803149 0.456739 -0.424743 -0.781654 + 0.677479 1.19172 0.631921 -0.388276 0.644804 -0.658384 + 0.793652 1.40654 0.767637 -0.0631322 -0.107736 -0.992173 + 0.831874 1.44489 0.765213 -0.345299 0.232157 -0.909325 + 0.897125 1.49917 0.7278 -0.489156 -0.074926 -0.868972 + 0.932428 1.43269 0.737749 -0.189256 -0.0589247 -0.980158 + 0.732292 1.45709 0.741276 0.556258 -0.162581 -0.814951 + 0.814631 1.53065 0.792669 0.0196056 -0.0447594 -0.998805 + 0.879882 1.58502 0.755306 -0.45102 -0.287418 -0.844969 + 0.968919 1.59273 0.660141 -0.522094 -0.393728 -0.756569 + 1.00422 1.52625 0.67009 0.0161814 -0.621083 -0.783577 + 0.715451 1.49768 0.719977 0.646056 -0.0668012 -0.760361 + 0.797789 1.57132 0.771421 0.329567 -0.603551 -0.726024 + 0.939812 1.7023 0.659358 -0.0514133 -0.616475 -0.785694 + 0.649712 1.43033 0.669226 0.703275 0.12043 -0.700643 + 0.703075 1.58181 0.701463 0.567189 -0.551004 -0.61212 + 0.830301 1.58874 0.707657 0.436486 -0.872244 -0.220615 + 0.972324 1.71963 0.595543 0.746934 -0.631206 0.208969 + 0.939812 1.7023 0.659358 0.747034 -0.630996 0.209247 + 0.596406 1.32859 0.547445 0.713354 0.233755 -0.66067 + 0.637336 1.51437 0.650661 0.734461 -0.0990238 -0.671388 + 0.593646 0.769686 1.2893 0.92627 -0.201533 0.318446 + 0.614436 0.825338 1.27931 0.0199751 -0.18394 -0.982734 + 0.660776 0.847515 1.2761 0.309724 -0.941107 0.135601 + 0.596975 0.776023 1.30872 0.907173 -0.310714 -0.283714 + 0.604949 0.61793 1.29995 0.942752 -0.0708002 -0.325892 + 0.604988 0.683733 1.27397 0.973905 -0.224235 0.0350467 + 0.625778 0.7393 1.26393 0.675428 -0.202503 0.709077 + 0.614436 0.825338 1.27931 0.362314 -0.173322 0.915799 + 0.661762 0.840666 1.29316 0.237359 -0.93121 -0.276602 + 0.618764 0.825271 1.31522 0.705172 -0.704806 -0.077339 + 0.618328 0.70856 1.35137 0.695864 -0.0389635 -0.717116 + 0.608278 0.624182 1.31932 0.972629 0.0113972 -0.232082 + 0.812578 0.820227 1.26856 -0.348042 -0.885505 -0.30781 + 0.738021 0.83597 1.32369 -0.209302 -0.864843 -0.456333 + 0.695024 0.820489 1.34571 0.0542812 -0.660843 -0.748559 + 0.640117 0.757809 1.35787 0.480275 -0.300903 -0.823889 + 0.617934 0.632076 1.35425 0.959473 -0.173992 -0.221674 + 0.811592 0.827076 1.2515 -0.343823 -0.810948 -0.473445 + 0.928995 0.766171 1.25519 -0.467682 -0.712154 -0.523556 + 0.854439 0.781914 1.31032 -0.439701 -0.678319 -0.588683 + 0.815221 0.742389 1.35778 -0.303508 -0.436673 -0.846876 + 0.708284 0.770454 1.36997 -0.0187659 -0.394964 -0.918505 + 0.734317 0.862237 1.2566 0.0939015 -0.876588 -0.471991 + 0.785162 0.85908 1.22446 -0.365618 -0.847624 -0.384521 + 0.862438 0.824007 1.21941 -0.406828 -0.822903 -0.396638 + 0.948354 0.796696 1.19172 -0.410287 -0.848688 -0.333757 + 0.687977 0.839975 1.25976 0.474716 -0.542805 0.692826 + 0.712689 0.835707 1.21915 0.62195 -0.718834 0.310574 + 0.78827 0.875179 1.17438 0.0673945 -0.996713 0.0449497 + 0.864209 0.836358 1.14702 -0.426044 -0.872168 -0.240436 + 0.950125 0.809046 1.11933 -0.323084 -0.8923 -0.315304 + 0.65049 0.735117 1.22337 0.778201 -0.626407 0.0449143 + 0.656362 0.772864 1.1512 0.598655 -0.781203 -0.177017 + 0.750817 0.830245 1.15141 0.544324 -0.822513 0.164873 + 0.826398 0.869631 1.10659 -0.0233187 -0.974607 -0.222705 + 0.867317 0.852369 1.09689 -0.419848 -0.826584 -0.374816 + 0.583394 0.700325 1.18764 0.57882 -0.707174 -0.406044 + 0.589266 0.73807 1.11546 0.489678 -0.793882 -0.360508 + 0.586773 0.765331 1.04744 0.383968 -0.868039 -0.314765 + 0.666944 0.789911 1.07887 0.440452 -0.873255 -0.208391 + 0.761399 0.847206 1.07903 0.462576 -0.868051 -0.180308 + 0.580026 0.653479 1.24218 0.807556 -0.329218 -0.489355 + 0.527962 0.712325 1.11285 0.209525 -0.843828 -0.494017 + 0.528092 0.742561 1.04268 0.171667 -0.915098 -0.364865 + 0.5256 0.769822 0.974664 0.270024 -0.896064 -0.352358 + 0.579987 0.587676 1.26815 0.662342 -0.364872 -0.654348 + 0.524594 0.665479 1.16739 0.257533 -0.708012 -0.657568 + 0.468772 0.724256 1.09359 -0.26343 -0.85706 -0.442779 + 0.468902 0.754492 1.02342 -0.204557 -0.947174 -0.247018 + 0.462395 0.767841 0.951896 0.00153005 -0.980961 -0.194197 + 0.607885 0.547698 1.32219 0.920988 -0.209194 -0.328664 + 0.565778 0.5247 1.30143 0.531529 -0.227359 -0.815956 + 0.520193 0.609434 1.22066 0.172091 -0.600808 -0.78065 + 0.455669 0.632191 1.20725 -0.328024 -0.597129 -0.732009 + 0.46007 0.688235 1.15398 -0.353447 -0.721074 -0.595926 + 0.595334 0.469248 1.31967 0.853564 -0.256671 -0.453374 + 0.553228 0.446164 1.29886 0.256957 -0.447485 -0.85658 + 0.505984 0.546459 1.25394 0.0193538 -0.536586 -0.843624 + 0.608345 0.598784 1.37451 0.901692 -0.202569 -0.38199 + 0.585745 0.435954 1.33994 0.798244 -0.553802 -0.236875 + 0.522086 0.390288 1.33083 0.176729 -0.659583 -0.73056 + 0.469447 0.503784 1.30626 -0.329217 -0.470044 -0.818948 + 0.653377 0.707774 1.38213 0.500445 -0.257571 -0.826566 + 0.620104 0.518943 1.3988 0.80884 -0.327255 -0.488551 + 0.539198 0.384676 1.38036 0.741735 -0.636758 -0.210636 + 0.475539 0.339011 1.37125 0.0516421 -0.607722 -0.792469 + 0.438306 0.447908 1.33823 -0.349948 -0.372669 -0.85945 + 0.691333 0.692201 1.39771 0.0756771 -0.324047 -0.943009 + 0.665136 0.627933 1.40642 0.480813 -0.231379 -0.845744 + 0.66784 0.546323 1.43458 0.474523 -0.315874 -0.821615 + 0.587339 0.455159 1.43027 0.720245 -0.481984 -0.498937 + 0.506433 0.320807 1.41178 0.6115 -0.747892 -0.258311 + 0.79827 0.664136 1.38552 -0.224547 -0.367723 -0.902418 + 0.792089 0.594912 1.42482 -0.191261 -0.424136 -0.885171 + 0.694037 0.61059 1.42586 0.187231 -0.320463 -0.928573 + 0.964256 0.556677 1.38184 -0.389096 -0.452307 -0.80251 + 0.958075 0.487539 1.42119 -0.369341 -0.487834 -0.790952 + 0.937526 0.429651 1.47146 -0.344313 -0.51796 -0.783049 + 0.817145 0.516214 1.45573 -0.156101 -0.468159 -0.869747 + 0.719093 0.531893 1.45677 0.121676 -0.395528 -0.910358 + 0.987842 0.616329 1.33052 -0.462038 -0.465012 -0.755172 + 1.15942 0.552757 1.26583 -0.479621 -0.489079 -0.728536 + 1.13583 0.493105 1.31715 -0.465161 -0.491342 -0.736348 + 1.08792 0.445309 1.38194 -0.447094 -0.495578 -0.744654 + 1.02706 0.655854 1.28306 -0.477108 -0.492572 -0.727833 + 1.17526 0.617706 1.20894 -0.496012 -0.507105 -0.704852 + 1.32655 0.544633 1.1463 -0.356891 -0.599697 -0.716235 + 1.31011 0.482405 1.21249 -0.317483 -0.648429 -0.691914 + 1.26219 0.434609 1.27727 -0.34923 -0.58241 -0.734055 + 1.05089 0.714985 1.22065 -0.461147 -0.64533 -0.60901 + 1.19909 0.676836 1.14652 -0.429144 -0.648771 -0.628436 + 1.33488 0.693301 1.0436 -0.396769 -0.579324 -0.71201 + 1.34239 0.60958 1.08941 -0.411784 -0.543683 -0.73133 + 1.45688 0.548566 1.10849 0.0567372 -0.730387 -0.680673 + 1.07025 0.74551 1.15717 -0.427829 -0.771936 -0.470189 + 1.14769 0.775965 1.02182 -0.426195 -0.789631 -0.441408 + 1.19143 0.74391 1.06795 -0.104974 -0.797144 -0.594594 + 1.06428 0.792158 1.09598 -0.370419 -0.79465 -0.480959 + 1.14172 0.8227 0.960676 -0.684337 -0.577558 -0.445095 + 1.19119 0.851914 0.802478 -0.182632 -0.725836 -0.66318 + 1.23493 0.81986 0.848598 0.375051 -0.773427 -0.511025 + 0.932215 0.841889 1.05884 -0.309534 -0.837981 -0.449417 + 1.04637 0.825001 1.03549 -0.251448 -0.858541 -0.446857 + 1.11972 0.886319 0.929887 -0.492359 -0.719802 -0.489354 + 0.930162 0.8877 0.986093 -0.372316 -0.845254 -0.383311 + 0.988035 0.855089 0.986578 -0.303414 -0.912191 -0.275403 + 1.06139 0.916319 0.880924 -0.372279 -0.592725 -0.714203 + 1.1441 0.982289 0.714262 -0.481174 -0.287238 -0.828231 + 1.21543 1.25463 0.632758 0.273383 -0.340805 -0.899507 + 0.865264 0.89818 1.02414 -0.219596 -0.89621 -0.385468 + 0.860678 0.922089 0.953931 0.0263632 -0.917131 -0.397713 + 0.902573 0.92971 0.921729 -0.320844 -0.866806 -0.381714 + 0.960445 0.897099 0.922214 -0.206608 -0.779844 -0.590894 + 0.821812 0.89354 1.03638 0.293648 -0.922189 -0.251672 + 0.814715 0.902242 0.955106 0.461388 -0.835719 -0.297816 + 0.838622 0.960135 0.881234 0.166373 -0.875291 -0.454076 + 0.880517 0.967757 0.849032 -0.0888985 -0.831377 -0.548552 + 0.754302 0.855908 0.997757 0.463563 -0.867508 -0.180384 + 0.749509 0.875033 0.919634 0.482272 -0.828576 -0.284386 + 0.800219 0.935087 0.882817 0.579955 -0.732049 -0.357431 + 0.824126 0.992981 0.808944 0.405311 -0.671363 -0.62048 + 0.667163 0.814158 1.00787 0.4065 -0.877395 -0.254825 + 0.662371 0.833281 0.929749 0.372905 -0.896905 -0.237703 + 0.651066 0.847683 0.855804 0.38658 -0.87276 -0.29807 + 0.75087 0.903341 0.841204 0.53932 -0.781601 -0.313424 + 0.80158 0.963308 0.804335 0.701991 -0.56239 -0.436951 + 0.586993 0.789665 0.976497 0.331114 -0.898062 -0.289566 + 0.56609 0.802554 0.906573 0.29108 -0.927231 -0.235615 + 0.554785 0.816956 0.832628 0.317929 -0.909997 -0.266134 + 0.528399 0.831478 0.762472 0.340283 -0.878914 -0.334241 + 0.638559 0.874038 0.783357 0.403963 -0.838962 -0.364632 + 0.500094 0.784327 0.913542 0.188155 -0.9475 -0.258537 + 0.479191 0.797302 0.843667 0.125233 -0.985027 -0.118485 + 0.431488 0.795235 0.775249 0.186393 -0.962749 -0.195885 + 0.405102 0.809844 0.705145 0.154431 -0.929857 -0.333941 + 0.436889 0.782346 0.890773 0.144953 -0.964497 -0.22076 + 0.405466 0.790068 0.823596 0.114393 -0.982008 -0.150246 + 0.357764 0.788001 0.755178 -0.0986554 -0.98039 -0.170593 + 0.320431 0.813892 0.691934 -0.268402 -0.920949 -0.282513 + 0.394347 0.839772 0.636909 0.161998 -0.879637 -0.447208 + 0.394418 0.77022 0.903777 -0.32008 -0.94701 0.0268429 + 0.362995 0.777856 0.83655 -0.334832 -0.939989 -0.0656432 + 0.326228 0.801844 0.780602 -0.569555 -0.815808 0.100323 + 0.288896 0.827734 0.717357 -0.650398 -0.759585 0.0035483 + 0.413333 0.776261 0.981311 -0.441724 -0.896683 -0.0289581 + 0.340494 0.839684 0.921859 -0.75494 -0.651871 0.0716227 + 0.321578 0.833643 0.844325 -0.754277 -0.610662 0.241159 + 0.284811 0.85763 0.788377 -0.834879 -0.470989 0.284862 + 0.41984 0.762912 1.05283 -0.443539 -0.863495 -0.240105 + 0.342526 0.826727 1.0007 -0.525246 -0.805011 -0.275814 + 0.399207 0.75204 1.12726 -0.438023 -0.792164 -0.424984 + 0.321893 0.815854 1.07513 -0.385493 -0.835576 -0.391418 + 0.390505 0.716019 1.18765 -0.280909 -0.715741 -0.639379 + 0.312155 0.767184 1.12703 0.047574 -0.761667 -0.64622 + 0.380768 0.667434 1.23961 -0.22867 -0.657369 -0.718036 + 0.367227 0.618077 1.2867 -0.138123 -0.569559 -0.810262 + 0.204332 1.01157 0.800351 0.140382 -0.956403 -0.256098 + 0.442128 0.582833 1.25434 -0.429512 -0.547422 -0.718226 + 0.405591 0.540158 1.30665 -0.428595 -0.459577 -0.777879 + 0.363435 0.553954 1.32656 -0.234677 -0.535858 -0.811038 + 0.372815 0.484203 1.35417 -0.4545 -0.370133 -0.810204 + 0.454742 0.286813 1.45866 0.529305 -0.829656 -0.177503 + 0.513595 0.336723 1.48201 0.547143 -0.739573 -0.392003 + 0.464944 0.274985 1.51495 0.424898 -0.791161 -0.439916 + 0.556841 0.379342 1.44819 0.660228 -0.616026 -0.429664 + 0.622733 0.398813 1.48367 0.413708 -0.545651 -0.728773 + 0.574081 0.336989 1.51655 0.3484 -0.639017 -0.685766 + 0.544624 0.274352 1.55925 0.29643 -0.707359 -0.641695 + 0.411782 0.241094 1.55345 0.304053 -0.83739 -0.454236 + 0.637341 0.470505 1.4525 0.423389 -0.400165 -0.812779 + 0.704484 0.460203 1.48794 0.235895 -0.452694 -0.859896 + 0.703252 0.385732 1.53053 0.204329 -0.571039 -0.795088 + 0.673794 0.323089 1.57323 0.23101 -0.635907 -0.736381 + 0.810897 0.450873 1.5015 -0.110266 -0.525487 -0.843626 + 0.809665 0.376401 1.54409 -0.0318477 -0.574155 -0.818127 + 0.793357 0.317255 1.59913 -0.0234177 -0.662293 -0.748879 + 0.651443 0.258561 1.6246 0.205977 -0.727571 -0.654381 + 0.931278 0.364221 1.51719 -0.348678 -0.587841 -0.729977 + 0.912571 0.310585 1.57489 -0.280475 -0.617036 -0.735255 + 0.896263 0.251439 1.62993 -0.263604 -0.727988 -0.632887 + 0.878998 0.208596 1.69633 -0.16299 -0.766043 -0.621781 + 0.771006 0.252727 1.6505 0.0630077 -0.716838 -0.694387 + 1.06737 0.38742 1.4322 -0.417632 -0.529055 -0.738705 + 1.05432 0.350224 1.46823 -0.383137 -0.593501 -0.707787 + 1.03561 0.296588 1.52593 -0.350384 -0.64611 -0.678066 + 1.06378 0.27098 1.53688 -0.30591 -0.718648 -0.624472 + 1.24914 0.397413 1.31329 -0.36142 -0.602596 -0.711515 + 1.27731 0.371808 1.32425 -0.239567 -0.659883 -0.712153 + 1.26555 0.307234 1.38929 -0.178416 -0.755017 -0.630965 + 1.04651 0.228051 1.60324 -0.243893 -0.788599 -0.564471 + 1.41823 0.435732 1.23532 0.0978256 -0.745623 -0.659148 + 1.40647 0.371246 1.30042 0.341774 -0.807519 -0.480732 + 1.2514 0.260562 1.46153 -0.117096 -0.825638 -0.551915 + 1.03236 0.181381 1.67547 -0.156214 -0.872193 -0.463547 + 0.858484 0.160513 1.75982 -0.130643 -0.879407 -0.457794 + 1.44043 0.486339 1.17467 0.0991666 -0.767305 -0.633568 + 1.52479 0.464575 1.26937 0.342517 -0.860059 -0.378127 + 1.44873 0.417293 1.32726 0.582041 -0.807053 -0.0994715 + 1.417 0.365191 1.40291 0.682119 -0.710361 -0.173495 + 1.37475 0.319144 1.37606 0.406041 -0.800521 -0.440791 + 1.54292 0.558372 1.13831 0.0788931 -0.798403 -0.596932 + 1.54699 0.515181 1.20871 0.0854089 -0.814929 -0.573233 + 1.60355 0.505276 1.20727 -0.529479 -0.807406 -0.260283 + 1.59744 0.481078 1.30738 0.00332927 -0.929065 -0.369902 + 1.52138 0.433797 1.36528 0.333371 -0.909355 -0.248871 + 1.45478 0.596872 1.05422 0.0269449 -0.68694 -0.726214 + 1.54082 0.606679 1.08404 -0.065265 -0.800736 -0.595452 + 1.5718 0.593954 1.08447 -0.72425 -0.679202 -0.118938 + 1.59948 0.548467 1.13686 -0.754554 -0.615717 -0.227026 + 1.42433 0.648577 1.01687 -0.201513 -0.554291 -0.807561 + 1.47925 0.664574 1.01176 -0.202741 -0.750115 -0.629463 + 1.51022 0.651849 1.0122 -0.606925 -0.791157 -0.0755789 + 1.57817 0.545448 1.05609 -0.901635 -0.375955 0.213802 + 1.60585 0.49996 1.10848 -0.829963 -0.556707 -0.0351931 + 1.41682 0.732298 0.971058 -0.00818089 -0.470001 -0.882628 + 1.42704 0.810131 0.938248 -0.269831 -0.386336 -0.882007 + 1.4488 0.716278 0.974406 -0.366956 -0.483879 -0.794484 + 1.50632 0.652275 0.987461 -0.685511 -0.659946 -0.307483 + 1.57426 0.545874 1.03135 -0.732346 -0.63746 -0.239403 + 1.3925 0.822365 0.933657 -0.0201024 -0.436979 -0.899247 + 1.40273 0.900198 0.900847 -0.261108 -0.310053 -0.914161 + 1.4594 0.843428 0.897777 -0.644665 -0.229194 -0.729299 + 1.48115 0.749575 0.933935 -0.586509 -0.418205 -0.693622 + 1.32722 0.760374 0.965028 -0.0412927 -0.675207 -0.736472 + 1.34742 0.893035 0.898255 0.00805139 -0.32697 -0.945 + 1.39844 1.00285 0.872652 0.0318738 -0.269614 -0.962441 + 1.45392 1.09575 0.847134 0.0879558 -0.302245 -0.949164 + 1.28214 0.831044 0.929625 0.285419 -0.655278 -0.69939 + 1.3401 1.02416 0.862932 0.263538 -0.292307 -0.919296 + 1.39111 1.13398 0.83733 -0.0701664 -0.262316 -0.962428 + 1.43569 1.16827 0.818127 -0.0359714 -0.332134 -0.942546 + 1.25658 1.00816 0.761047 0.808058 -0.242504 -0.536875 + 1.30379 1.01935 0.842075 0.706865 -0.292324 -0.644118 + 1.36663 1.3271 0.796625 0.032978 -0.310657 -0.94995 + 1.38463 1.23273 0.810888 -0.219713 -0.236823 -0.946383 + 1.42922 1.26702 0.791684 -0.521084 -0.321673 -0.790568 + 1.2275 1.01816 0.717136 0.668087 -0.322776 -0.670429 + 1.33033 1.32237 0.775818 0.361061 -0.180405 -0.914926 + 1.38744 1.42682 0.758114 -0.291341 -0.549014 -0.783392 + 1.40544 1.33244 0.772376 -0.608186 -0.300621 -0.734668 + 1.20241 1.08491 0.659711 0.821737 -0.175556 -0.542152 + 1.27955 1.43341 0.724495 0.787079 -0.2647 -0.557172 + 1.37295 1.58577 0.661806 0.603513 -0.590461 -0.535843 + 1.21543 1.25463 0.632758 0.920161 -0.135399 -0.367382 + 1.29257 1.60304 0.697493 0.833208 -0.528713 -0.161949 + 1.26299 1.58624 0.584984 0.813464 -0.56708 -0.129213 + 1.33145 1.63145 0.543685 0.543916 -0.838958 -0.0174777 + 1.36103 1.64833 0.656244 -0.298211 -0.854922 -0.424475 + 1.35441 1.57088 0.718196 -0.903337 -0.116272 -0.412872 + 1.3761 1.46992 0.725657 -0.793977 -0.33983 -0.504099 + 1.4336 1.34407 0.72804 -0.871107 -0.370603 -0.322221 + 1.45738 1.27865 0.747349 -0.632673 -0.65034 -0.420455 + 1.39315 1.39099 0.629974 -0.918886 -0.394522 0.000149688 + 1.42226 1.38717 0.695584 -0.874198 -0.485303 0.0160831 + 1.37295 1.58577 0.661806 -0.906335 -0.102063 -0.410048 + 1.41169 1.40588 0.573584 -0.890991 0.0662353 -0.449163 + 1.43263 1.30966 0.516241 -0.908723 -0.406028 -0.0967652 + 1.46161 1.25622 0.403405 -0.590293 -0.777568 0.216662 + 1.4852 1.45922 0.489986 -0.674987 0.159167 -0.720457 + 1.51961 1.39679 0.412919 -0.598489 0.554314 -0.5784 + 1.44611 1.34345 0.496517 -0.862759 0.182983 -0.471343 + 1.46161 1.25622 0.403405 -0.833932 0.384215 -0.396152 + 1.47328 1.52179 0.484423 -0.55284 0.0157892 -0.833138 + 1.55433 1.51188 0.462787 -0.0458869 0.183572 -0.981935 + 1.6279 1.51032 0.455686 0.361807 -0.319823 -0.875676 + 1.6785 1.53269 0.464743 0.0694811 0.427603 -0.901292 + 1.60378 1.4514 0.414339 -0.25211 0.68595 -0.682579 + 1.33145 1.63145 0.543685 -0.520805 -0.813476 0.258881 + 1.51069 1.33656 0.353853 -0.736409 0.451454 -0.503876 + 1.85767 1.64454 0.554005 -0.00225008 0.343957 -0.938983 + 2.02507 1.75372 0.534508 -0.210753 0.0301314 -0.977075 + 2.19506 1.79142 0.4852 0.00211821 -0.202454 -0.97929 + 1.89362 1.71493 0.55529 -0.0698114 0.222428 -0.972446 + 2.06102 1.82402 0.535743 -0.234465 -0.288846 -0.928221 + 2.23355 1.86879 0.468189 -0.0140452 -0.49414 -0.869269 + 2.29796 1.84198 0.49684 0.293068 -0.701961 -0.649124 + 2.25122 1.76773 0.509233 0.649237 -0.649562 -0.395677 + 2.17601 1.71808 0.505039 0.256217 -0.310771 -0.9153 + 1.84301 1.69247 0.546183 -0.315416 0.669603 -0.672417 + 1.92435 1.7883 0.580415 -0.245577 -0.0998971 -0.964216 + 2.0874 1.87467 0.479216 -0.100475 -0.653987 -0.749804 + 2.23386 1.9363 0.415873 0.00987048 -0.698067 -0.715965 + 1.65514 1.55474 0.517745 -0.280241 0.801455 -0.528332 + 1.68095 1.58851 0.550251 -0.22565 0.685992 -0.691735 + 1.86882 1.72633 0.57874 -0.5141 0.526502 -0.677124 + 1.58157 1.5563 0.524846 0.234794 0.617193 -0.750963 + 1.73074 1.64424 0.584322 -0.0742102 0.317076 -0.945492 + 1.78626 1.70629 0.586049 -0.101839 0.161284 -0.98164 + 1.50569 1.64402 0.533103 0.0164701 0.457677 -0.888966 + 1.63136 1.61203 0.558918 0.155741 0.390001 -0.907548 + 1.67239 1.66973 0.591372 0.0119341 0.334782 -0.94222 + 1.82528 1.77713 0.594749 -0.125755 0.00273734 -0.992058 + 1.42465 1.65393 0.554737 0.125815 0.0144747 -0.991948 + 1.54673 1.70181 0.565607 0.125471 0.235171 -0.963821 + 1.71141 1.74066 0.600124 0.0154467 0.124025 -0.992159 + 1.84873 1.84604 0.584593 -0.366665 0.109098 -0.923934 + 1.95594 1.84108 0.537384 -0.333553 -0.281617 -0.899686 + 1.33145 1.63145 0.543685 -0.007949 0.467433 -0.883993 + 0.504969 0.221988 1.60774 0.237825 -0.766746 -0.596271 + 0.475349 0.171371 1.66461 0.157695 -0.863973 -0.478208 + 0.621823 0.208035 1.68151 0.201233 -0.772149 -0.602736 + 0.594741 0.15241 1.74105 0.136813 -0.846672 -0.514226 + 0.450434 0.140476 1.73692 0.0706211 -0.9128 -0.402254 + 0.429275 0.104849 1.80763 -0.0147282 -0.948953 -0.315074 + 0.750491 0.20473 1.71403 0.0571877 -0.795196 -0.60365 + 0.72341 0.149105 1.77358 0.140004 -0.826015 -0.545983 + 0.707126 0.112246 1.84442 0.116904 -0.886261 -0.44819 + 0.573582 0.116783 1.81176 0.0858164 -0.880066 -0.467033 + 0.845283 0.132889 1.83526 -0.00712098 -0.898008 -0.439922 + 0.828999 0.095944 1.90606 0.0262662 -0.947878 -0.317548 + 0.829722 0.076875 1.98428 0.104221 -0.962419 -0.250775 + 0.685094 0.06822 1.91427 0.135809 -0.91992 -0.367835 + 0.55155 0.072756 1.88162 -0.0154271 -0.9426 -0.333566 + 1.01916 0.153671 1.75087 -0.0749727 -0.932811 -0.352481 + 1.00992 0.123663 1.83285 -0.00953909 -0.954883 -0.296828 + 1.01064 0.104512 1.91101 0.0508786 -0.973464 -0.223114 + 1.00914 0.085753 1.99731 0.0726489 -0.977996 -0.195563 + 0.833452 0.058511 2.06169 0.119228 -0.97156 -0.204585 + 1.24407 0.212977 1.53635 -0.00844745 -0.898485 -0.438923 + 1.23482 0.182879 1.61828 0.0924586 -0.951464 -0.293543 + 1.2298 0.160337 1.70752 0.152977 -0.962698 -0.223184 + 1.22831 0.141582 1.79381 0.178141 -0.965141 -0.191752 + 1.36742 0.271559 1.45088 0.552388 -0.768584 -0.322717 + 1.35807 0.237154 1.53847 0.631495 -0.747611 -0.205653 + 1.35305 0.21461 1.62772 0.639089 -0.74878 -0.175767 + 1.35462 0.194096 1.72325 0.640707 -0.752951 -0.150199 + 1.22268 0.123844 1.88473 0.177579 -0.969734 -0.167572 + 1.39068 0.324625 1.49217 0.779432 -0.616511 -0.111353 + 1.38133 0.290225 1.57975 0.797888 -0.586871 -0.137683 + 1.38355 0.264554 1.67781 0.777919 -0.607992 -0.158705 + 1.38511 0.244046 1.77334 0.763435 -0.628064 -0.150674 + 1.34899 0.176277 1.81411 0.589128 -0.791234 -0.163945 + 1.48839 0.408057 1.43006 0.44459 -0.874828 -0.192395 + 1.46206 0.367494 1.51932 0.470969 -0.846269 -0.249031 + 1.43897 0.324733 1.62698 0.480796 -0.844795 -0.234856 + 1.44119 0.299154 1.72508 0.469891 -0.862275 -0.188902 + 1.44404 0.284487 1.81029 0.493293 -0.849294 -0.188047 + 1.60783 0.439745 1.46897 0.109248 -0.932497 -0.344259 + 1.57742 0.413593 1.52927 0.220968 -0.935259 -0.276521 + 1.58031 0.394507 1.58953 0.163125 -0.903667 -0.395949 + 1.46494 0.348315 1.57954 0.318997 -0.898043 -0.302918 + 1.53758 0.337601 1.69629 0.267681 -0.934524 -0.234546 + 1.64082 0.465397 1.40414 0.046207 -0.99173 -0.11973 + 1.70716 0.451029 1.41863 -0.429796 -0.840721 -0.329337 + 1.67675 0.424968 1.47897 -0.182324 -0.929255 -0.321315 + 1.67259 0.411655 1.55043 -0.0930051 -0.932799 -0.348189 + 1.56355 0.361189 1.64884 0.218852 -0.914201 -0.341086 + 1.64747 0.455233 1.33715 -0.0884755 -0.993173 -0.0760226 + 1.70774 0.443485 1.2775 -0.373478 -0.926359 0.0487167 + 1.7011 0.453736 1.34454 -0.321336 -0.944484 0.0685023 + 1.74448 0.421888 1.2955 -0.229203 -0.973324 0.0102887 + 1.76927 0.424377 1.37059 -0.218054 -0.969941 -0.108015 + 1.62255 0.484202 1.25657 -0.529236 -0.846614 -0.0561619 + 1.67258 0.458269 1.28629 -0.384053 -0.917826 -0.100491 + 1.68785 0.453432 1.21987 -0.292349 -0.951219 0.0985656 + 1.70722 0.427067 1.15213 -0.206535 -0.977385 -0.0454132 + 1.73842 0.424595 1.22141 -0.082505 -0.995759 -0.0407002 + 1.64577 0.44771 1.21778 -0.404307 -0.906621 0.120719 + 1.66104 0.442785 1.15131 -0.327013 -0.943935 -0.0452763 + 1.68733 0.437013 1.09451 -0.2811 -0.906551 -0.314878 + 1.74607 0.451085 1.08933 0.38557 -0.844264 -0.372228 + 1.62677 0.468698 1.16843 -0.740285 -0.670151 -0.0536352 + 1.64214 0.473346 1.09438 -0.512874 -0.818667 -0.25835 + 1.66932 0.483248 1.03682 -0.267884 -0.845797 -0.461373 + 1.70803 0.526187 0.970451 0.249358 -0.749471 -0.613281 + 1.72604 0.479952 1.02813 0.224074 -0.776557 -0.588854 + 1.62122 0.504521 1.03438 -0.537848 -0.768184 -0.347293 + 1.65042 0.513721 0.979845 -0.31386 -0.785172 -0.53385 + 1.69254 0.569577 0.911697 0.164414 -0.724033 -0.669884 + 1.77926 0.596395 0.94745 -0.0748964 -0.843285 -0.532223 + 1.80408 0.558557 1.00699 -0.0652228 -0.876019 -0.477847 + 1.61372 0.556018 0.987985 -0.602199 -0.604026 -0.522023 + 1.6443 0.568153 0.923365 -0.467755 -0.649808 -0.599128 + 1.68642 0.623924 0.855168 0.0633865 -0.722658 -0.688294 + 1.76377 0.639698 0.888645 -0.148995 -0.827491 -0.541349 + 1.82641 0.596891 0.83859 -0.831164 -0.536003 -0.147874 + 1.59539 0.606046 0.942334 -0.640329 -0.465984 -0.610604 + 1.6368 0.619564 0.87692 -0.632854 -0.404949 -0.659934 + 1.68565 0.675408 0.803195 -0.370572 -0.441957 -0.816915 + 1.75074 0.675868 0.825996 -0.219666 -0.795801 -0.564312 + 1.55592 0.595988 0.985752 -0.578901 -0.614615 -0.535838 + 1.59717 0.672538 0.915164 -0.456079 -0.452806 -0.766132 + 1.65074 0.688961 0.854519 -0.768384 -0.140612 -0.624351 + 1.69959 0.744892 0.780844 -0.601941 -0.268584 -0.752017 + 1.74998 0.727353 0.774023 -0.514271 -0.579191 -0.632505 + 1.49687 0.688112 0.95859 -0.854548 -0.403535 -0.326966 + 1.54647 0.631827 0.956881 -0.409921 -0.61929 -0.66966 + 1.587 0.73028 0.874155 -0.323355 -0.404275 -0.855572 + 1.65252 0.755455 0.82735 -0.689923 -0.0795619 -0.719497 + 1.53629 0.689567 0.915871 -0.436454 -0.519615 -0.734512 + 1.52058 0.751028 0.891216 -0.514173 -0.37798 -0.769907 + 1.59075 0.801736 0.854789 -0.129658 -0.369474 -0.920151 + 1.66934 0.83939 0.830171 -0.565248 -0.0487041 -0.823482 + 1.52797 0.812986 0.854702 -0.387274 -0.378952 -0.840485 + 1.59815 0.863693 0.818274 0.00621149 -0.391408 -0.920196 + 1.67309 0.910845 0.810805 -0.389945 -0.130503 -0.911544 + 1.72873 0.895888 0.758512 -0.796035 0.0757938 -0.600486 + 1.71192 0.81204 0.755743 -0.797092 0.0510415 -0.601697 + 1.47557 0.897951 0.87434 -0.555298 -0.0447722 -0.830446 + 1.54415 0.867509 0.831265 -0.432187 -0.111064 -0.894919 + 1.7404 0.972385 0.752615 -0.772429 0.0119071 -0.634989 + 1.784 0.90576 0.660813 -0.844497 0.05193 -0.533037 + 1.76663 0.838042 0.686105 -0.83602 0.0261024 -0.548078 + 1.7543 0.770894 0.711207 -0.781265 -0.311228 -0.541075 + 1.84667 0.90357 0.570808 -0.741144 0.177801 -0.647373 + 1.82929 0.835937 0.59615 -0.846533 0.0632503 -0.528566 + 1.81694 0.764071 0.600627 -0.904114 -0.0662976 -0.422117 + 1.81262 0.720615 0.663493 -0.88331 -0.330036 -0.332925 + 1.80878 0.671025 0.710185 -0.888061 -0.380465 -0.258059 + 1.91729 0.895662 0.514904 -0.395556 0.394136 -0.829573 + 1.89324 0.815687 0.474424 -0.60156 0.290562 -0.74411 + 1.88089 0.74382 0.478903 -0.74833 0.158326 -0.644155 + 1.8728 0.652784 0.458382 -0.82356 0.0196149 -0.566889 + 1.86896 0.603195 0.505073 -0.943057 -0.196082 -0.268691 + 2.02185 0.925852 0.501813 0.0194175 0.366195 -0.930335 + 1.9978 0.845877 0.461334 -0.0378628 0.461631 -0.886264 + 1.96911 0.765755 0.420306 -0.243309 0.337251 -0.90943 + 1.96102 0.67472 0.399785 -0.45954 0.313179 -0.831109 + 1.91603 0.534961 0.413056 -0.78968 -0.27946 -0.546176 + 2.03338 1.0074 0.527763 0.109678 0.224496 -0.968283 + 2.16355 0.995014 0.561621 0.30655 0.316882 -0.89756 + 2.14033 0.913598 0.518236 0.237985 0.395526 -0.887086 + 2.11164 0.833479 0.477208 0.158222 0.508014 -0.846692 + 2.06878 0.768334 0.418843 0.0346415 0.545491 -0.8374 + 2.28565 1.13661 0.658763 0.480438 0.24021 -0.843492 + 2.29816 1.04453 0.635263 0.444883 0.297324 -0.844795 + 2.27494 0.963112 0.591876 0.410017 0.358164 -0.838812 + 2.24601 0.882803 0.540174 0.373561 0.424456 -0.824796 + 2.40167 1.17625 0.744707 0.62545 0.295034 -0.722335 + 2.41419 1.08425 0.721256 0.62007 0.266557 -0.737876 + 2.40624 0.987597 0.680067 0.619445 0.251694 -0.743598 + 2.37731 0.907288 0.628365 0.566246 0.310875 -0.763362 + 2.20315 0.817744 0.481859 0.323724 0.470376 -0.820944 + 2.35935 1.27623 0.753345 0.569768 0.376025 -0.730732 + 2.45962 1.2704 0.860231 0.746365 0.290998 -0.598548 + 2.50194 1.17043 0.851594 0.795723 0.267893 -0.543192 + 2.499 1.08753 0.812577 0.807296 0.204484 -0.553588 + 2.49105 0.990875 0.771388 0.821083 0.155633 -0.549182 + 2.29884 1.35653 0.76246 0.449463 0.529444 -0.719494 + 2.43986 1.36033 0.870073 0.60841 0.399242 -0.685888 + 2.57772 1.20514 0.996876 0.917296 0.16136 -0.364048 + 2.56484 1.11228 0.962714 0.929446 0.0686311 -0.362519 + 2.56189 1.02938 0.923698 0.934205 0.0353729 -0.354978 + 2.22158 1.4297 0.776525 0.399504 0.567108 -0.720268 + 2.36261 1.4335 0.884138 0.465973 0.403284 -0.787547 + 2.57256 1.39479 0.982791 0.549311 -0.135382 -0.824578 + 2.55796 1.29515 1.00677 0.801521 -0.0799392 -0.5926 + 2.61381 1.14019 1.11437 0.978215 -0.0848983 -0.18944 + 2.1753 1.4964 0.804189 0.35581 0.535244 -0.766103 + 2.3061 1.50942 0.869238 0.344642 0.291116 -0.892453 + 2.22982 1.57813 0.886237 0.243367 0.306875 -0.920109 + 2.45399 1.53364 0.915692 0.25468 -0.134575 -0.957616 + 2.51606 1.47071 0.967891 0.330929 -0.163916 -0.92931 + 2.58157 1.54655 0.941937 0.266095 -0.418526 -0.868349 + 2.64364 1.48362 0.994138 0.522602 -0.378271 -0.764067 + 2.69852 1.5131 1.03227 0.708694 -0.344683 -0.615587 + 2.71043 1.46155 1.07875 0.716198 -0.306736 -0.626876 + 2.5719 1.58847 0.916332 0.24231 -0.493795 -0.835136 + 2.6611 1.61844 0.948007 0.549291 -0.341806 -0.762527 + 2.71598 1.64801 0.986193 0.712945 -0.337458 -0.61468 + 2.80102 1.66446 1.09471 0.864027 -0.233586 -0.445976 + 2.81293 1.61291 1.14119 0.873009 -0.225582 -0.432398 + 2.48122 1.62578 0.875297 0.0576972 -0.586627 -0.807799 + 2.60333 1.64967 0.891728 0.39063 -0.520367 -0.75936 + 2.65143 1.66036 0.922402 0.541031 -0.461766 -0.702892 + 2.67776 1.7169 0.900876 0.615671 -0.46008 -0.639747 + 2.72185 1.72568 0.947274 0.734082 -0.373179 -0.567328 + 2.39266 1.62727 0.890711 -0.178698 -0.409407 -0.89468 + 2.32032 1.74681 0.80888 -0.080778 -0.736278 -0.671841 + 2.41817 1.76788 0.780783 0.0867385 -0.663433 -0.743192 + 2.51266 1.68707 0.850743 0.176262 -0.512871 -0.840176 + 2.33938 1.62431 0.903847 -0.0807268 -0.234746 -0.968699 + 2.1281 1.7572 0.861874 -0.191533 -0.75013 -0.632945 + 2.23175 1.7483 0.824294 -0.202616 -0.80611 -0.555997 + 2.25326 1.7895 0.740335 0.113395 -0.981665 -0.153219 + 2.07482 1.75424 0.87501 0.0678055 -0.603834 -0.794221 + 2.07002 1.79113 0.816903 0.136201 -0.976298 -0.168201 + 2.17367 1.78214 0.779273 -0.0585759 -0.993051 -0.102069 + 2.0201 1.77625 0.798888 0.28461 -0.958639 0.00302481 + 2.16063 1.76303 0.711379 0.17972 -0.950578 0.253183 + 2.24023 1.7703 0.672389 0.244021 -0.966599 0.0783627 + 2.32775 1.80176 0.63849 0.343177 -0.937812 -0.0523219 + 2.35111 1.81057 0.712237 0.202888 -0.938995 -0.277712 + 2.11072 1.74814 0.693364 0.17752 -0.928081 0.32734 + 2.16828 1.73679 0.612622 0.375287 -0.901583 0.215191 + 2.23005 1.77134 0.598377 0.433469 -0.900303 0.0394736 + 2.09294 1.7091 0.57958 0.34235 -0.883237 0.320451 + 2.18945 1.73318 0.523476 0.468924 -0.849497 0.241797 + 2.31758 1.80281 0.564478 0.393126 -0.869731 -0.298361 + 1.82181 0.634855 0.772834 -0.836211 -0.515998 -0.185735 + 1.86328 0.522468 0.640895 -0.963848 -0.213776 -0.159052 + 1.85602 0.48344 0.700494 -0.939084 -0.329717 -0.0969986 + 1.85124 0.55914 0.898177 -0.80946 -0.582162 -0.076567 + 1.85867 0.560346 0.57509 -0.942193 -0.275062 -0.191345 + 1.90574 0.492112 0.483073 -0.829741 -0.422046 -0.365249 + 1.89848 0.453085 0.542671 -0.793513 -0.534383 -0.291156 + 1.87381 0.447583 0.759598 -0.806263 -0.589642 0.0475713 + 1.86903 0.523284 0.95728 -0.803541 -0.588331 -0.0904918 + 1.9883 0.45298 0.409452 -0.417599 -0.705123 -0.573072 + 2.00954 0.415124 0.469421 -0.204335 -0.935948 -0.286789 + 1.91972 0.415229 0.60264 -0.549737 -0.81767 -0.170893 + 1.91275 0.418998 0.829711 -0.727032 -0.685426 0.0402044 + 1.94935 0.565786 0.362664 -0.617152 -0.0384118 -0.785906 + 2.02161 0.483805 0.35906 -0.03745 -0.574896 -0.817369 + 2.08366 0.48792 0.382134 0.525269 -0.420733 -0.739646 + 2.06514 0.433022 0.407221 0.26415 -0.739555 -0.619099 + 2.02637 0.400974 0.55173 -0.0700898 -0.977697 -0.197978 + 1.96117 0.623916 0.370181 -0.582338 0.309576 -0.751695 + 2.03079 0.576167 0.342284 0.0479223 -0.0215181 -0.998619 + 2.09283 0.580194 0.365307 0.48037 -0.11017 -0.870119 + 2.13465 0.524988 0.431131 0.689607 -0.423183 -0.587671 + 2.11612 0.470088 0.456217 0.721537 -0.57025 -0.392682 + 2.06893 0.717615 0.389289 0.0168197 0.449892 -0.892925 + 2.0426 0.634297 0.349801 0.0357102 0.264327 -0.963772 + 2.13163 0.660539 0.38755 0.443276 0.150754 -0.883618 + 2.19049 0.596965 0.432463 0.639774 -0.295599 -0.709444 + 2.15795 0.743771 0.426986 0.366044 0.360736 -0.857835 + 2.22929 0.677309 0.454703 0.597338 0.0398495 -0.800999 + 2.29897 0.667008 0.517943 0.739136 -0.248636 -0.625986 + 2.25055 0.615226 0.490033 0.718076 -0.437572 -0.5412 + 2.19471 0.543249 0.488701 0.681708 -0.526608 -0.507895 + 2.29095 0.754304 0.509943 0.590004 0.155228 -0.792338 + 2.36063 0.744003 0.573183 0.723767 -0.0701408 -0.68647 + 2.37781 0.693688 0.612731 0.750656 -0.375087 -0.543898 + 2.33759 0.653832 0.596765 0.73113 -0.500001 -0.464164 + 2.28918 0.60205 0.568855 0.744919 -0.480831 -0.46249 + 2.33615 0.828191 0.564767 0.559638 0.28448 -0.778381 + 2.41636 0.820637 0.631649 0.739303 0.115705 -0.663358 + 2.40083 0.774762 0.610509 0.726021 -0.0241785 -0.687247 + 2.41802 0.724447 0.650057 0.791033 -0.314137 -0.524962 + 2.39662 0.676452 0.657786 0.754001 -0.5525 -0.355283 + 2.45752 0.899734 0.695248 0.764468 0.172604 -0.621125 + 2.48254 0.845314 0.738309 0.892254 -0.0327908 -0.450342 + 2.4625 0.801927 0.699457 0.877721 -0.0342006 -0.47795 + 2.44697 0.756052 0.678316 0.86418 -0.192485 -0.464912 + 2.48473 0.934199 0.747354 0.875184 0.0846304 -0.47633 + 2.50976 0.879865 0.790465 0.92145 -0.0224679 -0.387847 + 2.49905 0.810617 0.786604 0.941661 -0.220736 -0.254069 + 2.479 0.767145 0.747704 0.921024 -0.264187 -0.286217 + 2.45367 0.732084 0.713029 0.860567 -0.394201 -0.322536 + 2.52809 0.924004 0.840815 0.942149 0.0156458 -0.33483 + 2.5386 0.896836 0.880669 0.964608 -0.082113 -0.250576 + 2.52027 0.852697 0.830319 0.949232 -0.204135 -0.239349 + 2.49331 0.781366 0.82267 0.9276 -0.364023 -0.0839421 + 2.5344 0.980681 0.864848 0.928631 -0.00801826 -0.370919 + 2.55869 0.939821 0.946216 0.951577 -0.124901 -0.280894 + 2.54014 0.858694 0.912934 0.939332 -0.313187 -0.13989 + 2.51454 0.823445 0.866386 0.904225 -0.40913 -0.122436 + 2.58618 0.988521 1.00507 0.979071 -0.140135 -0.147585 + 2.56023 0.901679 0.978481 0.954078 -0.290333 -0.0737738 + 2.53165 0.838818 1.05256 0.913538 -0.402561 0.0582432 + 2.51634 0.79982 0.971909 0.883863 -0.466957 -0.027164 + 2.49073 0.764571 0.92536 0.886831 -0.459666 -0.0473023 + 2.60092 1.04733 1.08021 0.98845 -0.138787 -0.0608608 + 2.56768 0.943084 1.07156 0.944623 -0.322299 0.0617331 + 2.5391 0.88031 1.14569 0.924055 -0.37523 0.0729709 + 2.58243 1.00189 1.14671 0.958156 -0.282252 0.0476613 + 2.54816 0.916788 1.24551 0.924885 -0.376572 0.0527289 + 2.49043 0.791906 1.25421 0.887843 -0.45236 0.0842909 + 2.48424 0.761974 1.15306 0.869378 -0.488031 0.0775038 + 2.46892 0.722888 1.07236 0.857893 -0.510084 0.0619184 + 2.59308 1.04304 1.25684 0.950486 -0.310767 0.000276595 + 2.55881 0.957931 1.35565 0.927786 -0.369289 0.0532814 + 2.51029 0.860121 1.45466 0.897745 -0.434915 0.0700224 + 2.49949 0.828385 1.35403 0.886072 -0.459019 0.0646431 + 2.42666 0.707028 1.40663 0.845744 -0.527412 0.0809584 + 2.63788 1.20703 1.1818 0.924135 -0.302237 -0.233726 + 2.61715 1.10987 1.32427 0.934838 -0.354857 -0.0124516 + 2.61877 1.12024 1.39092 0.928873 -0.346621 0.130568 + 2.56943 1.00822 1.47854 0.936878 -0.339198 0.0848845 + 2.69088 1.31879 1.16602 0.832613 -0.488627 -0.260765 + 2.68403 1.27004 1.36046 0.912318 -0.409108 -0.0174877 + 2.68566 1.28041 1.4271 0.833458 -0.458786 0.307997 + 2.69582 1.36191 1.10273 0.747763 -0.449461 -0.488707 + 2.82917 1.55684 1.26112 0.91173 -0.404572 -0.0712022 + 2.73704 1.3818 1.34469 0.898624 -0.438482 0.0144118 + 2.83411 1.59996 1.19782 0.924772 -0.25079 -0.286185 + 2.88133 1.67507 1.38653 0.916335 -0.399711 -0.023677 + 2.84279 1.60821 1.36312 0.856738 -0.490286 0.160061 + 2.75066 1.43318 1.4467 0.893546 -0.394843 0.213716 + 2.90337 1.85575 1.33597 0.949621 0.0161176 -0.312987 + 2.92455 1.84272 1.39255 0.973919 -0.0519995 -0.220858 + 2.86532 1.87264 1.20993 0.952761 0.00404706 -0.303695 + 2.95481 2.09748 1.58589 0.974836 -0.00174564 -0.222915 + 2.98303 2.14159 1.73209 0.988962 -0.0402742 -0.142589 + 2.99574 2.15389 1.85579 0.981807 -0.189344 0.014288 + 2.93726 1.8551 1.51631 0.983621 -0.15214 -0.0966632 + 2.80689 1.74221 1.05584 0.890065 -0.216512 -0.401132 + 2.81001 1.82439 1.0431 0.925427 -0.0260535 -0.37803 + 2.81581 2.05844 1.12231 0.945637 0.0702556 -0.317545 + 2.91676 2.11437 1.45984 0.958892 0.030765 -0.282098 + 2.72177 1.82364 0.876602 0.808816 -0.282963 -0.515509 + 2.72489 1.90582 0.863861 0.923415 -0.0291651 -0.382693 + 2.76051 2.01011 0.95543 0.934749 0.0349288 -0.353588 + 2.7848 2.16815 1.04528 0.950584 0.0400578 -0.307871 + 2.87667 2.11855 1.3206 0.954486 -0.0238058 -0.297303 + 2.67768 1.81486 0.830204 0.559341 -0.493534 -0.666004 + 2.67396 1.9354 0.721423 0.776952 -0.421209 -0.467898 + 2.68502 1.95172 0.749157 0.954307 -0.0233638 -0.297914 + 2.71138 1.98324 0.833165 0.938418 0.0114834 -0.345311 + 2.62967 1.7062 0.870201 0.482092 -0.492265 -0.72475 + 2.58267 1.73848 0.824504 0.270608 -0.514977 -0.81337 + 2.63068 1.84713 0.784507 0.351959 -0.618914 -0.702189 + 2.48818 1.81928 0.754544 0.206464 -0.72191 -0.660468 + 2.58025 1.85702 0.72798 0.356293 -0.776905 -0.519109 + 2.62354 1.94529 0.664895 0.485335 -0.76367 -0.425744 + 2.43108 1.83731 0.699718 0.284864 -0.921229 -0.264933 + 2.52314 1.87505 0.673153 0.380824 -0.851003 -0.361617 + 2.56371 1.90541 0.638774 0.538406 -0.813374 -0.220321 + 2.65259 1.99834 0.58761 0.855624 -0.475973 -0.203363 + 2.40771 1.82859 0.62602 0.309136 -0.916423 -0.254175 + 2.44828 1.85895 0.591641 0.425765 -0.871223 -0.244324 + 2.59276 1.95846 0.561488 0.568262 -0.78942 -0.23215 + 2.45007 1.87419 0.527834 0.393111 -0.89808 -0.197273 + 2.59456 1.9737 0.497681 0.629886 -0.764202 -0.138706 + 2.65958 2.04483 0.483687 0.897798 -0.437804 -0.0478185 + 2.66253 2.06267 0.61958 0.98472 -0.0204596 -0.17294 + 2.36711 1.85411 0.519218 0.266042 -0.869767 -0.415603 + 2.49456 1.90442 0.452076 0.427214 -0.898405 -0.101765 + 2.59875 1.98864 0.397003 0.681887 -0.731436 -0.00562154 + 2.66377 2.05986 0.383058 0.854675 -0.518882 0.0171137 + 2.3475 1.89328 0.451581 0.467733 -0.587779 -0.660107 + 2.3478 1.96087 0.399315 -0.244105 -0.794221 -0.556441 + 2.4116 1.88434 0.44346 -0.106566 -0.913771 -0.392003 + 2.42771 1.91018 0.369699 -0.251129 -0.929934 -0.268622 + 2.51789 1.91892 0.360977 0.367215 -0.928262 -0.0590254 + 2.26025 1.98695 0.359346 0.149794 -0.958924 -0.240888 + 2.36392 1.98662 0.325503 -0.436626 -0.898441 -0.046489 + 2.35463 1.97552 0.240132 -0.267618 -0.963065 0.0297682 + 2.46725 1.92879 0.287876 -0.0923059 -0.988734 -0.117834 + 2.55743 1.93752 0.279154 0.451304 -0.889987 0.0651723 + 2.11899 1.92745 0.436183 -0.150894 -0.777408 -0.610628 + 2.25096 1.97584 0.273974 0.0223312 -0.988689 -0.14831 + 1.97939 1.91008 0.527278 -0.464129 -0.153791 -0.872314 + 2.10042 1.94287 0.395095 -0.460241 -0.664172 -0.589113 + 2.23238 1.99125 0.232885 -0.0799532 -0.996497 -0.0245063 + 2.35579 1.96937 0.155186 -0.271557 -0.943545 0.18968 + 2.46841 1.92264 0.20293 -0.146599 -0.981954 0.119476 + 1.98681 1.983 0.502177 -0.561287 -0.301657 -0.770688 + 2.10785 2.01579 0.369994 -0.645005 -0.583986 -0.492878 + 2.21447 1.97213 0.146212 -0.348375 -0.936876 -0.029968 + 2.33788 1.95024 0.068513 -0.31059 -0.935433 0.168814 + 1.86395 1.92119 0.601043 -0.367421 -0.116224 -0.922764 + 1.86303 1.97649 0.569659 -0.0802777 -0.65664 -0.74992 + 1.98589 2.03839 0.470843 -0.368885 -0.695125 -0.617029 + 2.09749 2.04099 0.300132 -0.607779 -0.747658 -0.267605 + 2.20412 1.99725 0.076298 -0.464977 -0.88396 -0.0491106 + 1.72344 1.78891 0.607946 -0.0683575 0.205625 -0.97624 + 1.73866 1.86406 0.624396 0.0576267 -0.0879699 -0.994455 + 1.75061 1.91433 0.605914 0.221224 -0.551671 -0.804189 + 1.84856 2.01994 0.506199 0.275472 -0.903026 -0.329635 + 1.97685 2.07276 0.415306 -0.133399 -0.933509 -0.332815 + 1.55876 1.75007 0.57343 0.275332 0.00285728 -0.961345 + 1.62279 1.80396 0.596478 0.299484 -0.0830465 -0.95048 + 1.63474 1.85424 0.577997 0.507909 -0.636863 -0.58003 + 1.62911 1.86904 0.529369 0.574287 -0.705876 -0.41465 + 1.73614 1.95778 0.542454 0.4003 -0.775248 -0.488621 + 1.4907 1.74 0.544658 0.499719 -0.517574 -0.694549 + 1.55473 1.7939 0.567707 0.574051 -0.467155 -0.672482 + 1.5491 1.8087 0.519079 0.558113 -0.675436 -0.481971 + 1.6096 1.89578 0.469647 0.534305 -0.669692 -0.515782 + 1.42107 1.71157 0.51291 0.445146 -0.643983 -0.622198 + 1.32788 1.68917 0.501908 0.451926 -0.790947 -0.412512 + 1.3416 1.70969 0.431165 0.204113 -0.701643 -0.682668 + 1.47947 1.78026 0.487332 0.52898 -0.565696 -0.632589 + 1.48119 1.81453 0.465381 0.403264 -0.407623 -0.819281 + 1.51874 1.84632 0.463109 0.371934 -0.682713 -0.628942 + 1.33145 1.63145 0.543685 0.00577073 -0.586066 -0.810243 + 1.24213 1.58922 0.591819 0.405878 -0.653216 -0.639196 + 1.25585 1.60974 0.521077 0.733069 -0.677968 -0.054492 + 0.202299 1.02452 0.721508 0.907211 -0.410738 -0.0908981 + 0.15157 1.06403 0.643287 -0.979472 -0.0908809 0.179929 + 0.234082 0.897133 0.710156 -0.837062 -0.441437 0.323203 + 0.244229 0.870941 0.669123 -0.690048 -0.721132 -0.0616642 + 0.309676 0.843906 0.623748 -0.233073 -0.871502 -0.431464 + 0.152736 0.978969 0.620009 -0.937993 -0.318667 0.136454 + 0.189415 0.940339 0.661921 -0.794578 -0.0695574 0.603164 + 0.219009 0.907591 0.61584 -0.646218 -0.744772 -0.166487 + 0.284455 0.880559 0.570464 -0.312537 -0.845145 -0.433648 + 0.162528 1.00458 0.544659 -0.823551 -0.121026 -0.55418 + 0.182329 0.946137 0.57388 -0.708726 -0.630776 -0.315958 + 0.268357 0.921192 0.510286 -0.309738 -0.667453 -0.677177 + 0.360002 0.911817 0.510322 0.1237 -0.734881 -0.66682 + 0.3761 0.87127 0.570549 0.125586 -0.844819 -0.520105 + 0.336879 0.960448 0.457692 0.042657 -0.633968 -0.772182 + 0.50752 0.852181 0.689413 0.332563 -0.852478 -0.403341 + 0.796318 1.05165 0.751717 0.461918 -0.535962 -0.706666 + 0.836418 1.08358 0.728015 0.175088 -0.526333 -0.832057 + 0.864226 1.02491 0.785242 0.0570301 -0.699887 -0.711974 + 0.819133 1.15034 0.699185 0.171875 -0.0589575 -0.983353 + 0.925343 1.0704 0.750837 0.388301 -0.512821 -0.765661 + 0.912503 1.00653 0.803681 0.233334 -0.666625 -0.707931 + 0.928794 0.949375 0.867469 0.170093 -0.679648 -0.713545 + 0.908058 1.13717 0.722007 0.270862 -0.250709 -0.929397 + 1.01464 1.15234 0.772115 0.64582 -0.423266 -0.635423 + 1.0018 1.08846 0.824958 0.486827 -0.327264 -0.809875 + 1.02022 1.0493 0.8338 0.226322 -0.394117 -0.890758 + 1.05187 0.99702 0.888545 -0.297698 -0.357201 -0.885315 + 0.998934 1.2881 0.724183 0.333965 -0.129558 -0.933639 + 1.00783 1.21606 0.740162 0.499355 -0.244388 -0.831215 + 1.10713 1.32608 0.795797 0.538744 -0.38091 -0.75144 + 1.13606 1.2957 0.832614 0.218669 -0.351567 -0.910266 + 1.15449 1.25662 0.841506 -0.553634 0.133807 -0.82194 + 0.970805 1.34472 0.708509 0.0412451 0.0257167 -0.998818 + 1.09286 1.46508 0.74365 -0.00318308 -0.228903 -0.973444 + 1.10032 1.38979 0.763845 0.283601 -0.326596 -0.901613 + 1.18554 1.48162 0.722401 0.110353 -0.648594 -0.753092 + 1.06473 1.5217 0.727976 0.180033 -0.508141 -0.842248 + 1.18281 1.61753 0.660593 -0.386171 -0.553711 -0.73775 + 1.19027 1.54224 0.680788 -0.646054 -0.296844 -0.703205 + 1.25585 1.60974 0.521077 -0.855804 -0.245678 -0.455239 + 1.26058 1.67037 0.479465 -0.707525 -0.12166 -0.696137 + 1.11069 1.64925 0.566047 0.182669 -0.850071 -0.493975 + 1.17119 1.6447 0.623934 0.239739 -0.799342 -0.550979 + 1.27974 1.74305 0.504183 0.116358 -0.779946 -0.614935 + 1.26813 1.77022 0.467524 0.53658 -0.827109 -0.167254 + 1.40002 1.84843 0.43166 0.318277 -0.808561 -0.494902 + 1.08987 1.68747 0.501654 -0.334451 -0.709302 -0.620511 + 1.27714 1.73384 0.36654 0.362731 -0.922568 -0.131513 + 1.0847 1.76643 0.448892 -0.646018 -0.37113 -0.667026 + 1.25633 1.77205 0.302146 -0.280083 -0.705534 -0.65098 + 1.39581 1.80816 0.253611 0.464538 -0.795514 -0.389053 + 1.3723 1.80029 0.286041 0.62763 -0.711542 0.315894 + 1.36329 1.83676 0.387075 0.505454 -0.851617 0.138795 + 0.963748 1.67169 0.607379 -0.755497 -0.22715 -0.614513 + 1.02368 1.78898 0.51143 -0.892864 0.190919 -0.407853 + 1.07689 1.85796 0.419351 -0.887376 0.140668 -0.439063 + 1.20666 1.87117 0.272668 -0.581059 -0.371834 -0.723955 + 0.939812 1.7023 0.659358 -0.88657 0.0803309 -0.455567 + 1.27974 1.74305 0.504183 -0.8219 0.38494 -0.419883 + 1.36248 1.81655 0.433883 -0.427988 0.603869 -0.672435 + 1.34332 1.74387 0.409165 -0.172196 -0.0570466 -0.98341 + 1.25585 1.60974 0.521077 -0.220231 -0.536248 -0.814823 + 1.40002 1.84843 0.43166 -0.645561 0.762778 0.0376797 + 1.49371 1.87369 0.4009 0.34234 -0.911475 -0.228071 + 1.58458 1.92315 0.407439 0.557262 -0.750147 -0.356003 + 1.71664 1.98444 0.482681 0.278229 -0.831885 -0.480163 + 1.45697 1.86202 0.356314 0.354918 -0.929497 0.10034 + 1.48049 1.86989 0.323885 0.53095 -0.844942 -0.0645404 + 1.56568 1.92661 0.343843 0.60291 -0.771357 -0.203735 + 1.70041 2.01636 0.421399 0.301257 -0.875416 -0.378009 + 1.45717 1.86774 0.25622 0.503959 -0.747068 -0.433491 + 1.54235 1.92454 0.276228 0.504036 -0.863544 -0.0154657 + 1.68151 2.01991 0.357853 0.49261 -0.870166 -0.0121202 + 1.80615 2.05582 0.310851 -0.247213 -0.930943 -0.268756 + 1.35107 1.82046 0.2205 0.0308679 -0.583249 -0.811707 + 1.41242 1.88004 0.223108 0.296819 -0.475157 -0.828326 + 1.42618 1.90793 0.206004 0.0559549 -0.788487 -0.6125 + 1.52271 1.90991 0.211981 0.331174 -0.897673 -0.2907 + 1.66635 1.9747 0.290952 0.460207 -0.837403 0.294899 + 1.3014 1.91958 0.191021 -0.260683 -0.473029 -0.841599 + 1.31516 1.94747 0.173917 0.0440153 -0.697839 -0.7149 + 1.40595 1.93105 0.152164 -0.156965 -0.870254 -0.466927 + 1.50248 1.93302 0.15814 0.0554339 -0.941576 -0.332208 + 1.64671 1.96006 0.226704 0.431689 -0.899067 0.0729549 + 1.19886 1.96262 0.243077 -0.732002 -0.213603 -0.646952 + 1.26321 2.0167 0.155612 -0.652699 -0.227075 -0.722787 + 1.30196 1.97625 0.143271 -0.467895 -0.51246 -0.720041 + 1.39275 1.95991 0.121567 -0.25105 -0.663083 -0.705191 + 1.47766 1.95416 0.101329 -0.0823218 -0.749088 -0.657335 + 1.12415 1.9304 0.389289 -0.904072 0.337209 -0.26257 + 1.17438 2.06327 0.257947 -0.908346 0.140968 -0.393745 + 1.23873 2.11735 0.170481 -0.741687 -0.0562635 -0.668382 + 1.33453 2.06406 0.095774 -0.60626 -0.214866 -0.76569 + 1.37329 2.02361 0.083435 -0.334344 -0.352648 -0.873987 + 1.07094 1.86142 0.481368 -0.784607 0.114513 -0.609327 + 1.13327 1.96877 0.413429 -0.869528 0.493876 0.00283459 + 0.972324 1.71963 0.595543 -0.851201 0.516356 -0.0939909 + 1.02369 1.81801 0.518748 -0.38825 -0.321218 -0.86376 + 1.4582 2.01786 0.063199 -0.312538 -0.605407 -0.731986 + 1.59463 1.94725 0.1013 0.0663678 -0.876901 -0.476067 + 1.61945 1.92603 0.15806 0.243899 -0.969305 0.0310103 + 1.43484 2.0693 0.0235 -0.451963 -0.743282 -0.493215 + 1.57347 1.98018 0.03807 -0.0562376 -0.816198 -0.575029 + 1.66293 2.07241 -0.037486 0.258456 -0.663051 -0.702541 + 1.68409 2.03939 0.025701 0.27263 -0.727827 -0.629238 + 1.70857 1.99641 0.074348 0.490401 -0.804537 -0.335002 + 1.38042 2.10717 0.002718 -0.424909 -0.664467 -0.614765 + 1.55011 2.03162 -0.001628 -0.214168 -0.595484 -0.774294 + 1.63216 2.12829 -0.077678 -0.0197043 -0.489115 -0.871997 + 1.71628 2.29053 -0.143889 -0.350455 -0.527353 -0.774003 + 1.74988 2.21936 -0.135015 -0.0760398 -0.581662 -0.809869 + 1.33928 2.16376 -0.010112 -0.422975 -0.278949 -0.862137 + 1.53196 2.1008 -0.030862 -0.256697 -0.418164 -0.871347 + 1.61401 2.19748 -0.106921 -0.108177 -0.517776 -0.848649 + 1.68551 2.34651 -0.184032 0.0644446 -0.625817 -0.777303 + 1.70192 2.42975 -0.265816 -0.571784 -0.719947 -0.393369 + 1.31168 2.22762 -0.000509 -0.476709 -0.374344 -0.795371 + 1.49081 2.1574 -0.043692 -0.286219 -0.444091 -0.849036 + 1.56252 2.23009 -0.131389 -0.180634 -0.605685 -0.774931 + 1.62659 2.36279 -0.226046 0.192369 -0.61118 -0.767759 + 1.27698 2.27543 -0.022522 -0.270669 -0.862189 -0.428214 + 1.44143 2.21733 -0.061887 -0.372907 -0.561533 -0.738661 + 1.51313 2.29001 -0.149574 -0.289754 -0.611365 -0.736394 + 1.5751 2.3954 -0.250513 -0.0542794 -0.696207 -0.715786 + 1.58421 2.4825 -0.34479 0.0710746 -0.822369 -0.564498 + 1.40673 2.26514 -0.0839 -0.311667 -0.645853 -0.696949 + 1.45249 2.32849 -0.170436 -0.270604 -0.687699 -0.673679 + 1.50702 2.42195 -0.279312 -0.110617 -0.738128 -0.665531 + 1.44772 2.53598 -0.412815 0.0751554 -0.845197 -0.529144 + 1.5158 2.50943 -0.384024 -0.0406863 -0.823733 -0.565516 + 1.39437 2.37983 -0.191359 -0.171735 -0.742652 -0.647283 + 1.44638 2.46044 -0.300165 -0.189766 -0.796118 -0.574618 + 1.38229 2.53653 -0.460558 0.176715 -0.802337 -0.570111 + 1.32563 2.61155 -0.555713 0.316298 -0.76934 -0.555042 + 1.40544 2.59553 -0.522956 0.0654508 -0.851329 -0.520533 + 1.33181 2.40193 -0.223025 -0.00531729 -0.786412 -0.617679 + 1.38039 2.48423 -0.321586 -0.0946595 -0.858646 -0.503752 + 1.3163 2.56033 -0.481979 0.0610148 -0.944679 -0.322272 + 1.2602 2.61211 -0.603465 0.784775 -0.617647 -0.051381 + 1.39026 2.63554 -0.586252 -0.133654 -0.97668 0.168024 + 1.26661 2.4303 -0.253176 0.137693 -0.836198 -0.530861 + 1.31783 2.50633 -0.353252 0.185982 -0.873261 -0.450361 + 1.27251 2.55329 -0.502787 0.338238 -0.92525 -0.171777 + 1.25085 2.53548 -0.642347 0.440322 -0.876021 0.196731 + 1.20572 2.43121 -0.29614 0.252556 -0.874902 -0.413233 + 1.25834 2.48932 -0.404594 0.408645 -0.831082 -0.377243 + 1.21302 2.53637 -0.554078 0.0101246 -0.981543 -0.190975 + 1.20705 2.52844 -0.663154 -0.32234 -0.924094 -0.205299 + 1.29075 2.53949 -0.6781 0.234468 -0.96012 0.152295 + 1.19745 2.49031 -0.447509 0.294009 -0.88254 -0.366991 + 1.13696 2.56225 -0.572121 0.24055 -0.816552 -0.524765 + 1.13498 2.58815 -0.664973 -0.34989 -0.869559 -0.348488 + 1.1783 2.60535 -0.717757 -0.228783 -0.445422 -0.865596 + 1.25037 2.54564 -0.715938 0.00630611 -0.546052 -0.837727 + 1.14564 2.48276 -0.502637 0.414545 -0.783728 -0.462518 + 1.08515 2.55479 -0.6272 0.321934 -0.602177 -0.730576 + 1.05893 2.61404 -0.683015 -0.248084 -0.66334 -0.705999 + 1.09197 2.49324 -0.547582 0.0228098 -0.863729 -0.50344 + 1.00774 2.56423 -0.626535 -0.213493 -0.706061 -0.675202 + 0.952736 2.65753 -0.671346 -0.133289 -0.534675 -0.83448 + 0.995094 2.70139 -0.709304 -0.182556 -0.0647531 -0.981061 + 1.10128 2.65798 -0.720924 -0.190865 -0.241193 -0.951523 + 0.935983 2.58446 -0.605581 -0.0900865 -0.66383 -0.742438 + 0.875326 2.66696 -0.670681 -0.0999409 -0.421074 -0.901503 + 0.923069 2.74734 -0.688105 -0.11676 0.0871691 -0.989327 + 1.18747 2.72598 -0.714907 -0.121215 0.263575 -0.956993 + 1.26096 2.67633 -0.738505 -0.0684365 0.00595046 -0.997638 + 0.870966 2.57111 -0.610862 0.295643 -0.26993 -0.916369 + 0.778787 2.66576 -0.665798 0.0984849 -0.344216 -0.933711 + 0.826531 2.74605 -0.683273 -0.0455286 0.0476413 -0.997826 + 1.11545 2.77194 -0.693708 -0.167445 0.248483 -0.954054 + 1.33308 2.79385 -0.727258 -0.0948411 -0.200281 -0.975137 + 0.798624 2.54457 -0.643083 0.509149 0.133604 -0.850246 + 0.713771 2.65233 -0.67113 0.477435 -0.197945 -0.85608 + 0.779571 2.78279 -0.673504 0.0612776 0.0646197 -0.996027 + 1.04311 2.83942 -0.656181 -0.165697 0.189405 -0.967817 + 0.887914 2.47712 -0.585663 0.573875 -0.0462899 -0.817633 + 0.765683 2.50322 -0.683475 0.594998 0.295082 -0.747599 + 0.673895 2.61527 -0.694348 0.748482 -0.092454 -0.656678 + 0.640955 2.57392 -0.734732 0.967448 0.156922 -0.198544 + 0.650081 2.67466 -0.739609 0.874451 -0.485098 -0.00393705 + 0.9257 2.91973 -0.647078 0.419638 -0.628224 -0.655164 + 0.996149 2.87607 -0.646464 -0.083087 0.000552148 -0.996542 + 0.673952 2.50458 -0.790829 0.967494 0.252412 0.0155832 + 0.683078 2.60532 -0.795705 0.769421 -0.286839 0.570714 + 0.836086 2.84874 -0.689923 0.671471 -0.611283 -0.418879 + 1.04073 2.97995 -0.685998 -0.0815139 -0.694347 -0.715009 + 0.734671 2.39274 -0.790508 0.82232 0.427947 -0.375036 + 1.23082 2.97775 -0.795581 -0.366035 -0.589373 -0.720179 + 1.11118 2.9363 -0.685384 -0.323937 -0.417107 -0.849168 + 1.1885 2.88821 -0.697087 -0.404972 -0.207456 -0.890483 + 1.19572 3.04732 -0.839083 -0.0829407 -0.901272 -0.42524 + 1.31198 3.01028 -0.86213 -0.148386 -0.670049 -0.727335 + 1.3905 3.00163 -0.85515 -0.03438 -0.334962 -0.941604 + 1.30814 2.92966 -0.807285 -0.340962 -0.474834 -0.811343 + 1.36325 3.06702 -0.907792 0.155057 -0.833908 -0.529674 + 1.43413 3.09074 -0.915481 0.502967 -0.851769 -0.146675 + 1.38286 3.03391 -0.869861 0.260468 -0.545147 -0.796851 + 1.47907 3.14352 -0.870306 0.666408 -0.700049 -0.256579 + 1.48671 3.11124 -0.855587 0.593306 -0.175406 -0.785634 + 1.46456 2.96133 -0.856744 0.433671 -0.509201 -0.7434 + 1.3822 2.88936 -0.80888 -0.125509 -0.464528 -0.876619 + 1.59496 3.20381 -0.955135 0.63392 -0.726842 0.264284 + 1.54549 3.15754 -0.791375 0.887634 -0.370916 -0.272996 + 1.52334 3.00771 -0.792474 0.837472 -0.281624 -0.468326 + 1.45443 2.86248 -0.801524 0.44711 -0.59702 -0.666078 + 1.26084 2.82082 -0.734563 -0.277489 -0.275354 -0.920424 + 1.77508 3.28657 -1.06087 0.487567 -0.717152 0.497967 + 1.86176 3.43631 -0.971036 0.518958 -0.61624 0.592394 + 1.68164 3.35355 -0.865289 0.67825 -0.554468 0.482227 + 1.91688 3.30485 -1.13414 0.239255 -0.697744 0.675212 + 1.97363 3.439 -1.04168 0.29723 -0.583833 0.755509 + 2.00552 3.64988 -0.887349 0.457435 -0.53112 0.713208 + 2.03489 3.31849 -1.14235 -0.0182706 -0.615519 0.78791 + 2.09165 3.45262 -1.04988 0.054304 -0.457319 0.887643 + 2.11739 3.65256 -0.957993 0.2582 -0.660345 0.705179 + 2.09605 3.15024 -1.26755 -0.263228 -0.305557 0.915066 + 2.13632 3.2951 -1.13945 -0.266846 -0.550978 0.790706 + 2.1816 3.33755 -1.09758 -0.132174 -0.416136 0.899645 + 2.18006 3.48536 -1.04378 0.0413162 -0.370108 0.92807 + 2.20581 3.68529 -0.95188 0.271468 -0.417502 0.867178 + 2.14282 3.05528 -1.26346 -0.49629 -0.218851 0.840119 + 2.21833 3.15421 -1.17961 -0.500217 -0.336075 0.798021 + 2.2636 3.19658 -1.1378 -0.107978 -0.319223 0.941508 + 2.27696 3.31872 -1.10056 0.050101 -0.323185 0.945009 + 2.27543 3.46653 -1.04677 0.264821 -0.305753 0.914541 + 2.11149 2.90972 -1.33014 -0.521176 -0.281282 0.805764 + 2.32373 2.91548 -1.12313 -0.587964 0.0175507 0.808697 + 2.2651 3.05915 -1.17558 -0.537321 -0.084115 0.839173 + 2.32326 3.04155 -1.14509 0.0336512 0.195202 0.980186 + 2.30229 3.14979 -1.15956 0.552687 0.0674438 0.830656 + 2.25441 2.49434 -1.34129 -0.694787 -0.245086 0.676169 + 2.29241 2.76992 -1.18981 -0.719133 -0.212029 0.661733 + 2.43192 2.81345 -1.02221 -0.700339 0.244804 0.670519 + 2.3819 2.89788 -1.09264 -0.184813 0.50216 0.844795 + 2.19343 2.3614 -1.44902 -0.673294 -0.429962 0.601505 + 2.38166 2.37619 -1.23645 -0.780582 -0.2705 0.56349 + 2.41966 2.65186 -1.08493 -0.812118 -0.190649 0.551468 + 2.19141 2.26339 -1.55927 -0.590204 -0.681517 0.432659 + 2.28861 2.25875 -1.43763 -0.594287 -0.646519 0.478368 + 2.40446 2.27752 -1.25614 -0.677232 -0.554043 0.484142 + 2.50558 2.41975 -1.0117 -0.859194 -0.219936 0.461967 + 2.1959 2.24044 -1.60352 -0.266858 -0.960607 0.0775979 + 2.31731 2.23023 -1.45523 -0.203759 -0.963926 0.171253 + 2.43316 2.24899 -1.27374 -0.221677 -0.938223 0.265702 + 2.56039 2.29426 -1.03674 -0.232768 -0.930696 0.282175 + 2.52838 2.32108 -1.03139 -0.717522 -0.532754 0.448704 + 2.22027 2.24431 -1.62202 0.307573 -0.839233 -0.448427 + 2.34167 2.2341 -1.47373 0.354542 -0.901958 -0.24652 + 2.45861 2.2487 -1.29362 0.378665 -0.919644 -0.104251 + 2.58585 2.29395 -1.05661 0.389559 -0.920836 -0.0174791 + 2.62979 2.32533 -0.864149 -0.241571 -0.944778 0.221443 + 2.11269 2.29132 -1.74085 0.260504 -0.675861 -0.689456 + 2.2528 2.27635 -1.62132 0.618366 -0.417079 -0.666084 + 2.37143 2.26879 -1.49442 0.671909 -0.529926 -0.517413 + 2.48837 2.28339 -1.31431 0.763623 -0.522942 -0.378697 + 2.6107 2.3166 -1.06664 0.791842 -0.547112 -0.271395 + 2.14522 2.32336 -1.74014 0.576688 -0.341687 -0.742079 + 2.20604 2.39694 -1.69919 0.702302 -0.108798 -0.703517 + 2.28302 2.33097 -1.61352 0.694617 -0.170725 -0.698827 + 2.40166 2.32341 -1.48662 0.790406 -0.196616 -0.580172 + 2.50482 2.35078 -1.32843 0.867374 -0.151911 -0.473904 + 2.05358 2.41322 -1.84278 0.495528 -0.304985 -0.813287 + 2.1144 2.48689 -1.80179 0.669009 -0.0503813 -0.741545 + 2.31438 2.50519 -1.59007 0.763922 0.0745473 -0.640988 + 2.39136 2.43913 -1.50445 0.790307 0.0546089 -0.610273 + 2.49453 2.4665 -1.34626 0.847806 0.0654729 -0.526249 + 1.94479 2.45263 -1.90705 0.336243 -0.33616 -0.879737 + 1.98576 2.53833 -1.90668 0.460474 0.023228 -0.887369 + 2.16603 2.59459 -1.75254 0.709055 0.137512 -0.691615 + 1.86195 2.54064 -1.95268 0.310542 -0.0748399 -0.947609 + 2.03739 2.64603 -1.85742 0.618068 0.076534 -0.78239 + 2.24194 2.72805 -1.6143 0.780376 0.208978 -0.589357 + 2.39029 2.63865 -1.45183 0.804111 0.212302 -0.555278 + 2.49329 2.5927 -1.31286 0.82348 0.213687 -0.525565 + 1.90627 2.66503 -1.94613 0.418474 -0.00425106 -0.908219 + 1.93489 2.81924 -1.90904 0.528604 0.120894 -0.840216 + 2.066 2.80025 -1.82034 0.693987 0.113716 -0.71095 + 2.17485 2.85109 -1.6634 0.795705 0.201428 -0.57121 + 2.38575 2.89521 -1.32322 0.838269 0.262333 -0.478002 + 1.80062 2.79505 -1.96253 0.1338 0.15225 -0.979243 + 1.8713 2.86373 -1.93829 0.294788 0.185389 -0.937406 + 1.98323 3.03521 -1.84151 0.634615 0.231175 -0.737443 + 2.03559 3.02965 -1.78487 0.734394 0.272104 -0.621792 + 2.14444 3.08049 -1.62792 0.778636 0.287473 -0.55775 + 1.7707 2.97684 -1.9164 0.133419 0.200884 -0.970487 + 1.84137 3.0456 -1.89209 0.156999 0.206819 -0.9657 + 1.91965 3.07969 -1.87075 0.373964 0.193041 -0.90713 + 1.55622 2.89886 -1.96933 0.187376 0.102362 -0.97694 + 1.68973 3.06889 -1.91844 0.229269 0.0715042 -0.970733 + 1.82756 3.12337 -1.8818 0.236797 -0.000513714 -0.971559 + 1.90584 3.15746 -1.86045 0.444827 0.201356 -0.872688 + 1.46366 2.88377 -1.98619 0.0932554 0.0330778 -0.995093 + 1.4767 3.16306 -1.97075 0.206175 0.0169078 -0.978369 + 1.48786 3.25512 -1.9694 0.107757 -0.245094 -0.963492 + 1.70089 3.16095 -1.91709 0.218922 -0.121734 -0.968119 + 1.81596 3.17598 -1.89651 0.319283 0.0327563 -0.947093 + 1.31949 3.00873 -1.98584 0.016312 -0.0207455 -0.999652 + 1.38414 3.14797 -1.98761 0.127312 -0.00612026 -0.991844 + 1.28456 2.89173 -1.99019 0.0221008 0.0463043 -0.998683 + 1.20375 2.92299 -1.98954 -0.0205017 0.0750963 -0.996966 + 1.17834 3.00699 -1.98062 -0.0720716 -0.0652024 -0.995266 + 1.17824 3.0538 -1.99369 -0.0675442 -0.27984 -0.957668 + 1.23855 3.08685 -1.99834 0.091776 -0.143728 -0.985352 + 1.16363 2.71074 -2.0043 0.108166 0.175013 -0.978607 + 1.10555 2.89233 -1.98803 0.0906666 0.125668 -0.987921 + 1.08014 2.97632 -1.97911 0.0794665 0.149379 -0.985581 + 1.06208 3.04749 -1.96857 0.144114 -0.112001 -0.983202 + 1.06198 3.0943 -1.98165 0.214222 -0.482034 -0.84956 + 1.05478 2.85312 -2.00632 0.362667 0.201661 -0.909838 + 1.02944 2.93831 -1.99707 0.352468 0.213754 -0.911085 + 1.01138 3.00948 -1.98653 0.654139 0.00684707 -0.756344 + 1.01116 3.05512 -1.99999 0.827631 -0.310653 -0.467462 + 1.07961 3.16294 -2.03154 0.414632 -0.837115 -0.356818 + 0.975299 2.85138 -2.0535 0.95144 0.238123 -0.195086 + 1.02879 3.12367 -2.04993 0.56819 -0.356565 -0.741634 + 1.13992 3.19591 -2.03624 0.229932 -0.177704 -0.956845 + 1.3032 3.226 -2.00016 0.179543 -0.063667 -0.981688 + 1.50006 2.89604 -0.702459 0.755571 -0.327893 -0.567096 + 1.40656 2.74411 -0.750897 0.231851 -0.214789 -0.948742 + 1.46196 2.7255 -0.700868 0.551622 -0.228435 -0.802204 + 1.33797 2.62378 -0.735288 0.155368 -0.278657 -0.94774 + 1.56896 3.04128 -0.69341 0.88533 -0.232284 -0.402783 + 1.61028 3.04066 -0.617947 0.802329 -0.119395 -0.584819 + 1.55546 2.87743 -0.65243 0.715171 -0.17481 -0.676736 + 1.61437 3.23854 -0.641875 0.890541 -0.182957 -0.41649 + 1.65569 3.23792 -0.566404 0.78743 -0.254906 -0.561229 + 1.67628 3.06941 -0.545148 0.726877 -0.0537266 -0.684663 + 1.62146 2.9061 -0.57968 0.718332 -0.110391 -0.686886 + 1.58849 3.30425 -0.777901 0.914292 -0.357275 0.190853 + 1.65737 3.38525 -0.628392 0.881303 -0.268859 -0.388612 + 1.72476 3.28224 -0.500178 0.733933 -0.0961806 -0.672378 + 1.74536 3.11365 -0.478972 0.67637 -0.0304491 -0.735933 + 1.70671 3.54272 -0.695131 0.871358 -0.468821 0.144717 + 1.77531 3.6815 -0.637106 0.884812 -0.462439 0.0570738 + 1.72597 3.52404 -0.570377 0.876903 -0.288922 -0.384143 + 1.79986 3.5921 -0.782469 0.615243 -0.491472 0.616386 + 1.86474 3.76767 -0.713957 0.663508 -0.494972 0.561035 + 1.84051 3.81505 -0.596833 0.861095 -0.504246 0.0652007 + 2.07039 3.82544 -0.818829 0.525064 -0.324806 0.786644 + 1.92994 3.90122 -0.673683 0.759256 -0.400809 0.512721 + 1.94943 4.01599 -0.560873 0.89014 -0.44434 -0.101061 + 1.95262 3.9314 -0.490156 0.811097 -0.424423 -0.402477 + 1.82365 3.76664 -0.537178 0.873063 -0.379806 -0.305792 + 2.14037 3.9084 -0.844915 0.519966 -0.226324 0.823658 + 1.97612 3.9831 -0.709897 0.775538 -0.28472 0.56345 + 1.99561 4.09788 -0.597096 0.902196 -0.430551 0.0258403 + 2.03259 4.06293 -0.415175 0.893177 -0.297131 -0.337561 + 2.03579 3.97842 -0.344398 0.861593 -0.0883979 -0.499843 + 2.20153 3.88538 -0.885041 0.352607 -0.269278 0.896191 + 2.13402 4.1046 -0.790138 0.520963 -0.339746 0.783052 + 2.0461 4.06606 -0.735983 0.618441 -0.330479 0.712962 + 2.02928 4.14695 -0.667097 0.75968 -0.528621 0.378743 + 2.03936 4.18336 -0.499351 0.917623 -0.374214 -0.133908 + 2.28373 3.89467 -0.903336 0.592753 -0.181143 0.784749 + 2.19518 4.08157 -0.830255 0.523382 -0.221904 0.822697 + 2.15099 4.25654 -0.721906 0.758773 -0.310386 0.572647 + 2.11721 4.18549 -0.721252 0.711338 -0.450945 0.539116 + 2.07304 4.23252 -0.569301 0.850339 -0.482751 0.209463 + 2.28801 3.69459 -0.970183 0.413654 -0.298851 0.859987 + 2.30531 3.92699 -0.930517 0.976263 0.101939 0.191098 + 2.22707 4.10422 -0.851082 0.721056 -0.093298 0.686567 + 2.18288 4.27918 -0.742733 0.833906 -0.111718 0.540482 + 2.31574 3.47529 -1.07374 0.87692 -0.128845 0.463045 + 2.32832 3.70336 -0.997166 0.960268 -0.0664704 0.271048 + 2.28632 3.94674 -0.972512 0.843449 0.245586 -0.477788 + 2.24854 4.17171 -0.91737 0.929195 0.261675 -0.261004 + 2.24864 4.13654 -0.878263 0.923726 0.0909507 0.3721 + 2.31565 3.27194 -1.12232 0.66785 -0.205359 0.715404 + 2.31988 3.32521 -1.13379 0.989768 -0.00581824 0.142569 + 2.31998 3.49107 -1.12188 0.888669 0.189445 -0.417587 + 2.30934 3.72318 -1.0391 0.77699 0.215255 -0.591568 + 2.2552 3.95093 -1.00678 0.405141 0.219637 -0.88748 + 2.32881 3.19885 -1.17333 0.823816 -0.0686056 0.562691 + 2.33304 3.25212 -1.1848 0.984546 0.104988 0.140167 + 2.33018 3.26569 -1.2177 0.91787 0.250287 -0.308011 + 2.32412 3.3409 -1.18198 0.943948 0.200673 -0.262091 + 2.26781 3.48799 -1.15554 0.408597 0.431151 -0.804461 + 2.3275 3.13582 -1.17017 0.671931 0.116824 0.731342 + 2.34791 3.10642 -1.19964 0.680376 0.194051 0.706705 + 2.34921 3.16953 -1.20275 0.921368 0.170262 0.349415 + 2.34636 3.18301 -1.2357 0.915542 0.285872 -0.28295 + 2.25961 3.25755 -1.32101 0.679149 0.4543 -0.576513 + 2.34847 3.02759 -1.15571 0.476697 0.44267 0.759476 + 2.37953 3.0253 -1.16654 0.465635 0.494731 0.733774 + 2.38695 3.07967 -1.21551 0.913632 0.392814 0.104758 + 2.31866 3.01833 -1.37227 0.830747 0.239178 -0.502646 + 2.27807 3.12168 -1.39247 0.814822 0.293371 -0.499998 + 2.39088 2.92679 -1.11191 0.284346 0.538619 0.793118 + 2.42194 2.92441 -1.12279 0.114789 0.646593 0.754149 + 2.41857 2.99846 -1.18245 0.866542 0.48193 0.129802 + 2.44091 2.84227 -1.04153 -0.237021 0.666068 0.70723 + 2.46684 2.86717 -1.05965 -0.190559 0.726383 0.660345 + 2.46885 2.93672 -1.12491 -0.138387 0.655284 0.742598 + 2.48508 2.80086 -0.963391 -0.378377 0.74819 0.545016 + 2.51101 2.82575 -0.98151 -0.340047 0.770053 0.539803 + 2.51375 2.87948 -1.06177 0.492291 0.844218 0.212004 + 2.48379 2.76838 -0.917348 -0.710214 0.417356 0.566931 + 2.52439 2.73342 -0.844986 -0.644861 0.43255 0.630123 + 2.52569 2.76589 -0.891029 -0.370329 0.735316 0.567598 + 2.552 2.7856 -0.893959 -0.394705 0.725965 0.56319 + 2.55657 2.85204 -0.988248 0.322281 0.935296 0.146135 + 2.44962 2.72882 -0.999425 -0.903528 -0.118642 0.411778 + 2.50149 2.68375 -0.894552 -0.912315 -0.144965 0.382971 + 2.538 2.62912 -0.825736 -0.850754 -0.123915 0.510747 + 2.57436 2.70811 -0.786946 -0.640341 0.399221 0.65619 + 2.60068 2.72773 -0.789934 -0.530689 0.609118 0.58936 + 2.53554 2.49671 -0.9262 -0.904868 -0.172496 0.389177 + 2.57205 2.442 -0.857433 -0.944306 -0.192886 0.266609 + 2.58797 2.60381 -0.767704 -0.882255 -0.0338123 0.469556 + 2.63265 2.58495 -0.671634 -0.796042 0.209686 0.567758 + 2.64759 2.66422 -0.691526 -0.617391 0.408196 0.672461 + 2.62735 2.77706 -0.803569 -0.610821 0.50002 0.613904 + 2.59777 2.35215 -0.858812 -0.794912 -0.551824 0.2522 + 2.5772 2.45282 -0.751176 -0.967617 -0.0713522 0.242127 + 2.62188 2.43396 -0.655106 -0.954579 0.0582228 0.292214 + 2.60292 2.36289 -0.752614 -0.753798 -0.632932 0.176596 + 2.61197 2.36466 -0.665269 -0.859328 -0.500528 0.105009 + 2.64071 2.41751 -0.577825 -0.865074 0.291459 0.408286 + 2.72643 2.48661 -0.533697 -0.677356 0.38995 0.623801 + 2.74137 2.56587 -0.553589 -0.678793 0.311168 0.665142 + 2.64821 2.34852 -0.75112 -0.12657 -0.984292 0.123079 + 2.65726 2.35028 -0.663776 -0.0882357 -0.994597 -0.0546845 + 2.6308 2.34821 -0.587988 -0.886231 -0.452376 -0.099749 + 2.62461 2.29891 -0.474391 -0.966054 0.234751 0.107849 + 2.6713 2.33883 -0.461941 -0.641501 0.594047 0.48537 + 2.66423 2.32665 -0.868442 0.40228 -0.913666 0.0581781 + 2.68265 2.34984 -0.755413 0.321865 -0.945319 0.052682 + 2.69973 2.35576 -0.656064 0.361262 -0.92819 -0.0891837 + 2.65478 2.33721 -0.59174 -0.145298 -0.935081 -0.323284 + 2.68909 2.3493 -0.878472 0.770395 -0.624307 -0.129355 + 2.71754 2.37223 -0.759195 0.746177 -0.661869 -0.0717628 + 2.73462 2.37815 -0.659845 0.711008 -0.684692 -0.1602 + 2.69726 2.3427 -0.584036 0.333435 -0.889399 -0.312715 + 2.65599 2.29595 -0.515472 -0.0595492 -0.822488 -0.565656 + 2.62716 2.384 -1.08077 0.877351 -0.262665 -0.401576 + 2.7039 2.38727 -0.910439 0.880404 -0.385332 -0.27642 + 2.73235 2.41021 -0.791162 0.93514 -0.318611 -0.154919 + 2.75386 2.42636 -0.691736 0.946918 -0.272978 -0.169795 + 2.75602 2.37044 -0.572693 0.674232 -0.674298 -0.301221 + 2.64252 2.47677 -1.10226 0.888004 -0.0482117 -0.4573 + 2.71926 2.48005 -0.931931 0.882656 0.335253 -0.329429 + 2.74077 2.4962 -0.832505 0.980408 0.0271144 -0.195102 + 2.77823 2.47099 -0.568038 0.987616 0.135624 -0.0788729 + 2.77526 2.41856 -0.604634 0.954101 -0.198244 -0.224478 + 2.64128 2.60297 -1.06884 0.875854 0.217192 -0.430937 + 2.53903 2.78753 -1.1267 0.832415 0.367805 -0.414493 + 2.58184 2.76009 -1.05317 0.83692 0.406029 -0.367021 + 2.63086 2.78461 -0.927457 0.806485 0.566707 -0.168599 + 2.6903 2.62741 -0.943175 0.92401 0.242122 -0.295944 + 2.72259 2.56669 -0.860208 0.956179 0.231644 -0.179059 + 2.43603 2.83347 -1.26568 0.831561 0.299208 -0.467954 + 2.46885 2.93672 -1.12491 0.844887 0.357665 -0.397795 + 2.79322 2.409 -0.417882 -0.730368 0.292555 0.617231 + 2.79322 2.409 -0.417882 0.995577 0.00890332 -0.0935304 + 2.79025 2.35658 -0.454487 0.935687 -0.281566 -0.212626 + 2.75511 2.32544 -0.485146 0.633574 -0.668455 -0.389553 + 2.69635 2.29778 -0.49643 0.372962 -0.776324 -0.508153 + 2.80482 2.30012 -0.301482 0.896726 -0.40283 -0.183331 + 2.7775 2.26562 -0.336527 0.814235 -0.518397 -0.261314 + 2.74236 2.23447 -0.367186 0.645912 -0.65418 -0.393504 + 2.68513 2.23031 -0.417569 0.41328 -0.727264 -0.547983 + 2.64477 2.22857 -0.436561 0.126321 -0.737578 -0.663342 + 2.77295 2.19257 -0.167609 0.892697 -0.445818 -0.0658623 + 2.74564 2.15807 -0.202654 0.781382 -0.588638 -0.207236 + 2.70354 2.14469 -0.271672 0.601803 -0.695448 -0.392665 + 2.64631 2.14052 -0.322056 0.462091 -0.736858 -0.49347 + 2.62055 2.15769 -0.36899 0.20344 -0.722506 -0.660755 + 2.77928 2.20864 -0.082238 0.984586 0.110243 0.135782 + 2.70267 2.07318 0.003376 0.836514 -0.547754 0.014477 + 2.6949 2.06228 -0.099938 0.767693 -0.627281 -0.131019 + 2.6528 2.0488 -0.168998 0.569824 -0.742112 -0.352945 + 2.57747 2.04533 -0.243775 0.226749 -0.82943 -0.51052 + 2.55172 2.0625 -0.290718 -0.351892 -0.666295 -0.657436 + 2.709 2.08926 0.088737 0.856384 -0.510245 0.0790959 + 2.63892 1.99185 0.107248 0.755261 -0.652355 0.0633558 + 2.63115 1.98094 0.00394 0.684966 -0.724785 -0.0742184 + 2.59691 1.97242 -0.081094 0.529917 -0.802109 -0.275335 + 2.76211 2.1813 0.071503 0.905551 0.287613 0.311858 + 2.7167 2.13753 0.17632 0.898473 0.237665 0.369136 + 2.6847 2.09356 0.268876 0.909643 -0.405524 0.0900051 + 2.677 2.04529 0.181292 0.818587 -0.573067 0.0388578 + 2.63136 1.99719 0.2026 0.722923 -0.685561 0.0859597 + 2.7715 2.24308 -0.168698 -0.275405 0.906716 0.319404 + 2.75433 2.21575 -0.014957 0.21925 0.951198 0.217145 + 2.72403 2.18316 0.102286 0.0398625 0.92883 0.368355 + 2.76861 2.29912 -0.301354 -0.223355 0.8396 0.495161 + 2.68124 2.21888 -0.191575 -0.231281 0.92765 0.293213 + 2.68391 2.19877 -0.072337 -0.266334 0.949399 0.166457 + 2.65361 2.16627 0.044948 -0.285331 0.934935 0.210909 + 2.67862 2.13939 0.207102 -0.00424041 0.996266 0.0862374 + 2.80482 2.30012 -0.301482 -0.0213744 0.837882 0.545433 + 2.75702 2.40792 -0.417813 -0.356776 0.698251 0.62061 + 2.67835 2.27482 -0.324272 -0.464578 0.825742 0.319871 + 2.57225 2.19177 -0.160632 -0.156026 0.980244 0.121564 + 2.57493 2.17175 -0.041352 -0.13483 0.96413 0.228636 + 2.79322 2.409 -0.417882 -0.0217758 0.77056 0.636995 + 2.63166 2.23499 -0.336672 -0.772075 0.630387 0.0807016 + 2.58701 2.17446 -0.264832 -0.78381 0.566506 -0.254388 + 2.54034 2.19516 -0.206485 -0.179878 0.933812 -0.309254 + 2.39313 2.16016 -0.026063 0.0860057 0.994129 0.0656515 + 2.62087 2.22263 -0.399276 -0.921776 0.387633 0.00839225 + 2.57622 2.1621 -0.327435 -0.910889 0.318364 -0.262537 + 2.52389 2.06481 -0.24912 -0.574172 -0.34192 -0.74392 + 2.47436 2.13853 -0.208818 -0.558872 0.310508 -0.768925 + 2.42769 2.15923 -0.150462 -0.448132 0.726509 -0.520925 + 2.63201 2.30695 -0.511721 -0.66717 -0.619317 -0.413922 + 2.62827 2.23067 -0.436606 -0.635642 -0.504043 -0.584722 + 2.60405 2.15979 -0.369034 -0.495276 -0.455891 -0.739503 + 2.52158 1.96885 -0.155921 0.213752 -0.812116 -0.542934 + 2.46026 1.99781 -0.192677 -0.286723 -0.4782 -0.83013 + 2.41073 2.07162 -0.152324 -0.429304 -0.0775828 -0.899822 + 2.35036 2.11422 -0.142509 -0.317898 0.250277 -0.914495 + 2.4752 1.90394 -0.065482 0.153994 -0.935207 -0.318862 + 2.41388 1.93289 -0.102239 -0.101387 -0.787323 -0.608147 + 2.34741 1.98765 -0.137876 -0.211049 -0.356109 -0.910299 + 2.28704 2.03016 -0.128111 -0.0725027 0.0370631 -0.996679 + 2.52785 1.90878 0.011527 0.323965 -0.942463 -0.082528 + 2.43748 1.90232 0.037117 -0.144141 -0.982497 0.118 + 2.38482 1.89739 -0.039944 -0.283936 -0.958485 -0.0262235 + 2.32532 1.93473 -0.091815 -0.28481 -0.833993 -0.472587 + 2.25885 1.98948 -0.127453 -0.366669 -0.608295 -0.70394 + 2.56209 1.91731 0.096564 0.424164 -0.904233 0.0494767 + 2.46552 1.90768 0.115641 -0.105461 -0.984845 0.137689 + 2.30984 1.9448 -0.010065 -0.341642 -0.939437 0.027197 + 2.26235 1.96594 -0.076878 -0.458021 -0.888087 -0.0389571 + 2.20285 2.00328 -0.128748 -0.300277 -0.684294 -0.664511 + 2.56499 1.93226 0.183852 0.436985 -0.892297 0.113354 + 2.62208 2.00313 0.305904 0.710348 -0.69746 0.0946306 + 2.66772 2.05132 0.284646 0.852719 -0.514268 0.0916429 + 2.68075 2.1021 0.367288 0.991928 0.067784 0.107161 + 2.66952 2.10925 0.515707 0.963936 0.238587 0.11791 + 2.65377 2.14534 0.36779 0.613387 0.789717 0.0101416 + 2.64254 2.15241 0.516157 0.765157 0.642382 -0.0433546 + 2.64936 2.17764 0.618455 0.835803 0.443509 -0.323624 + 2.69067 2.14011 0.697648 0.958104 0.0577956 -0.280527 + 2.67358 2.07899 0.647313 0.958496 -0.0365627 -0.282751 + 2.63114 2.14084 0.289597 0.123464 0.983379 -0.133126 + 2.54722 2.20302 0.444687 0.443546 0.878704 -0.176481 + 2.55403 2.22825 0.546984 0.691815 0.636579 -0.340822 + 2.68134 2.24606 0.776546 0.811488 0.410337 -0.416066 + 2.72266 2.20854 0.855739 0.941793 0.107823 -0.318435 + 2.55226 2.13436 0.203219 0.173224 0.975412 -0.136256 + 2.52459 2.19852 0.366494 0.329327 0.920197 -0.211615 + 2.4744 2.21408 0.359742 0.617685 0.68527 -0.385837 + 2.54716 2.2602 0.573062 0.858658 0.267007 -0.437508 + 2.59974 2.13291 0.120721 -0.124145 0.986088 0.110534 + 2.52106 2.13839 0.03443 -0.0365716 0.979023 0.200441 + 2.50208 2.14992 0.196468 0.292599 0.929108 -0.226149 + 2.34077 2.15746 0.061211 0.640804 0.767535 0.016146 + 2.46869 2.13569 0.121704 0.0926142 0.985538 -0.141904 + 2.43045 2.20281 0.262053 0.612645 0.694194 -0.377837 + 2.29868 2.23092 0.067564 0.712179 0.505665 -0.486932 + 2.39707 2.18859 0.187288 0.578834 0.703298 -0.412702 + 2.40148 2.26853 0.27863 0.855918 0.261603 -0.446058 + 2.23721 2.19597 -0.019299 0.475875 0.54311 -0.691791 + 2.26939 2.33052 0.091463 0.700012 0.215634 -0.680798 + 2.33965 2.40641 0.178006 0.821898 0.0280302 -0.568945 + 2.35498 2.26205 0.193641 0.849162 0.254372 -0.462839 + 2.28297 2.14801 -0.042428 0.0463855 0.823618 -0.565245 + 2.18137 2.18104 -0.066045 0.605212 0.452975 -0.654623 + 2.15423 2.26975 -0.072682 0.723278 0.152528 -0.673501 + 2.20792 2.29565 0.00465 0.76011 0.214829 -0.613255 + 2.36122 2.16345 -0.071967 -0.206332 0.976315 -0.0650779 + 2.34944 2.14371 -0.120982 -0.304404 0.780206 -0.546458 + 2.22713 2.133 -0.089233 0.105905 0.700789 -0.705464 + 2.22806 2.10343 -0.11081 0.108157 0.451318 -0.885784 + 2.11644 2.21114 -0.126378 0.731918 0.290401 -0.616411 + 2.21245 2.05762 -0.140074 0.293347 0.193593 -0.936199 + 2.15347 2.13089 -0.122772 0.617527 0.444233 -0.64909 + 2.04131 2.30483 -0.180655 0.322644 -0.040949 -0.945634 + 2.00494 2.38241 -0.200613 0.402568 -0.110055 -0.90875 + 2.0893 2.29985 -0.133016 0.705511 0.139444 -0.694845 + 2.11 2.13872 -0.166128 -0.223537 -0.273811 -0.935446 + 2.07835 2.22458 -0.177049 0.222904 -0.0150988 -0.974723 + 1.99528 2.25385 -0.159746 -0.159199 -0.427504 -0.889885 + 2.1564 2.07049 -0.153557 -0.269975 -0.424126 -0.864425 + 2.05462 2.14025 -0.122982 -0.620185 -0.543127 -0.566024 + 2.02297 2.22611 -0.133903 -0.311538 -0.629409 -0.71189 + 2.13094 2.03961 -0.057868 -0.623805 -0.751981 -0.213052 + 2.08449 2.10682 -0.082678 -0.60021 -0.740754 -0.301714 + 2.01921 2.08801 0.063897 0.192739 -0.952173 -0.237105 + 2.00431 2.06925 -0.007613 0.27448 -0.884077 -0.378244 + 1.97662 2.09698 -0.033448 0.181554 -0.809946 -0.557697 + 2.15662 2.01839 0.009485 -0.53482 -0.844965 -0.00153331 + 2.06277 2.09659 0.177241 0.0345612 -0.98921 0.142371 + 2.04908 2.05457 0.10421 0.114904 -0.992838 -0.0327054 + 1.96677 2.02569 0.223428 0.477653 -0.864619 0.155825 + 1.95187 2.00685 0.151867 0.291033 -0.949605 -0.116403 + 2.08845 2.07537 0.244596 -0.561086 -0.802972 -0.201041 + 1.98985 2.08774 0.344357 0.133315 -0.991069 -0.00316876 + 1.97616 2.04573 0.271322 0.57649 -0.770898 0.270878 + 1.85216 2.01488 0.387357 0.22185 -0.975078 -0.00215842 + 1.86155 2.03492 0.43525 0.595665 -0.802821 0.0257183 + 1.82237 2.0239 0.372133 -0.209197 -0.925756 -0.314981 + 1.92207 2.01587 0.136644 -0.285996 -0.923519 -0.255575 + 1.96388 2.12008 -0.102051 0.383241 -0.669611 -0.636198 + 1.9589 2.33142 -0.179704 0.157719 -0.352588 -0.922392 + 1.90933 2.03897 0.06804 -0.0732252 -0.965012 -0.251771 + 1.88992 2.05432 0.003641 -0.0878354 -0.908832 -0.407811 + 1.92201 2.1794 -0.143392 0.0832893 -0.543582 -0.835214 + 1.91703 2.39073 -0.221035 0.219575 -0.241535 -0.945224 + 1.98115 2.45802 -0.212777 0.327904 -0.0646981 -0.942493 + 1.78673 2.07109 0.246399 0.191047 -0.979735 0.0601637 + 1.77158 2.02597 0.179548 0.487079 -0.873037 0.0236991 + 1.84277 2.10366 -0.031417 -0.0444197 -0.853981 -0.518405 + 1.87486 2.22874 -0.178448 0.13811 -0.510781 -0.848545 + 1.73583 2.03045 0.142995 0.460923 -0.870142 -0.174365 + 1.80703 2.10814 -0.067965 -0.0507253 -0.767378 -0.639185 + 1.81538 2.28023 -0.219246 -0.14234 -0.458795 -0.877067 + 1.84323 2.43208 -0.244655 0.335595 -0.220068 -0.91594 + 1.90735 2.49937 -0.236397 0.319533 -0.295997 -0.900158 + 1.77436 2.17638 -0.086369 -0.272964 -0.631253 -0.725955 + 1.78271 2.34839 -0.23769 -0.00108266 -0.490935 -0.871196 + 1.78375 2.48358 -0.285453 0.530831 -0.422237 -0.734802 + 1.85647 2.54302 -0.277405 0.425011 -0.439625 -0.791262 + 2.06646 2.47435 -0.164459 0.558592 -0.0959796 -0.823871 + 2.06551 2.37554 -0.14513 0.632379 -0.019087 -0.774424 + 1.73552 2.35858 -0.256944 -0.345065 -0.632219 -0.693707 + 1.71636 2.46933 -0.339962 0.366166 -0.430568 -0.824944 + 1.78909 2.52885 -0.331856 0.473067 -0.45834 -0.752418 + 1.66918 2.47952 -0.359216 0.248827 -0.632041 -0.7339 + 1.72547 2.55667 -0.373052 0.397253 -0.410256 -0.820902 + 1.96138 2.55454 -0.257564 0.492616 -0.264569 -0.829055 + 2.01559 2.518 -0.205467 0.463192 -0.337747 -0.819378 + 1.59493 2.48724 -0.400794 -0.120042 -0.851474 -0.510472 + 1.65122 2.5644 -0.41463 0.436506 -0.305601 -0.84621 + 1.89776 2.58237 -0.29876 0.443604 -0.112468 -0.889138 + 2.07411 2.58682 -0.186068 0.619794 -0.161113 -0.768048 + 1.64313 2.46621 -0.302767 -0.150048 -0.900168 -0.40888 + 1.53613 2.52362 -0.437803 -0.149909 -0.833341 -0.532042 + 1.56169 2.57668 -0.468498 0.378568 -0.409723 -0.829948 + 1.83671 2.6434 -0.321467 0.464005 -0.00484815 -0.885819 + 1.47384 2.56861 -0.483722 0.0647009 -0.740861 -0.668535 + 1.49939 2.62158 -0.514475 0.196966 -0.887411 -0.416781 + 1.74718 2.65567 -0.375326 0.59154 -0.453897 -0.666376 + 1.97576 2.71731 -0.247687 0.489134 -0.00884625 -0.872164 + 2.03681 2.65629 -0.224989 0.544192 0.00825355 -0.83892 + 1.47007 2.61951 -0.553496 0.329449 -0.634657 -0.699052 + 1.68026 2.62964 -0.442434 0.293168 -0.955949 0.0146108 + 1.85564 2.74393 -0.352592 0.676137 -0.38411 -0.628728 + 1.92255 2.76996 -0.285484 0.622414 -0.341049 -0.704476 + 1.65093 2.62757 -0.481455 0.438934 -0.873153 -0.21199 + 1.78511 2.74542 -0.40958 0.648768 -0.141008 -0.747808 + 1.98228 2.94105 -0.25362 0.557283 0.0576714 -0.828317 + 2.06155 2.88886 -0.219218 0.533516 0.0293455 -0.845281 + 2.11476 2.83612 -0.18147 0.61413 -0.0603336 -0.786895 + 1.58602 2.58657 -0.536845 -0.330109 -0.535194 0.777557 + 1.3001 2.61612 -0.639218 0.158389 -0.744872 0.648134 + 1.49586 2.56716 -0.58981 0.251919 -0.959865 0.123272 + 1.42854 2.55889 -0.649095 0.411288 -0.808744 -0.420446 + 1.57837 2.67193 -0.59068 0.656824 -0.297302 -0.69296 + 1.6457 2.68019 -0.531396 0.674596 -0.346656 -0.651728 + 1.72019 2.70443 -0.464969 0.718341 -0.33754 -0.608319 + 1.58602 2.58657 -0.536845 0.545597 -0.114853 -0.83014 + 1.38816 2.56512 -0.686883 0.338592 -0.644105 -0.685918 + 1.51214 2.66684 -0.652472 0.611047 -0.308178 -0.729142 + 1.68768 2.91127 -0.51784 0.673445 -0.0674876 -0.73615 + 1.76571 2.93102 -0.450034 0.669853 -0.0675107 -0.739419 + 1.84021 2.95533 -0.383549 0.689191 -0.0886898 -0.719132 + 2.1422 2.46302 -0.099236 0.729548 -0.141788 -0.669071 + 2.14124 2.36422 -0.079906 0.742069 -0.0321544 -0.669552 + 2.12832 2.55027 -0.13397 0.709349 -0.0465191 -0.70332 + 2.19766 2.49044 -0.027537 0.816983 -0.128346 -0.562197 + 2.19493 2.39012 -0.002574 0.819446 -0.0415006 -0.571652 + 2.18378 2.5777 -0.062271 0.78814 -0.140912 -0.599149 + 2.2479 2.5128 0.042531 0.820571 -0.153507 -0.550544 + 2.24517 2.41248 0.067503 0.806741 -0.0430421 -0.589335 + 2.17394 2.66979 -0.105973 0.744964 -0.0918837 -0.660746 + 2.25661 2.70147 -0.002845 0.79699 -0.149316 -0.585245 + 2.26645 2.60929 0.040805 0.811439 -0.174013 -0.55793 + 2.31542 2.48829 0.153996 0.689504 -0.100045 -0.717339 + 2.13664 2.73934 -0.144843 0.663402 -0.0794197 -0.744037 + 2.24246 2.81351 -0.048503 0.765735 -0.118426 -0.63216 + 2.35465 2.74652 0.130519 0.834302 -0.146591 -0.531461 + 2.33397 2.58486 0.15232 0.826652 -0.140575 -0.544872 + 2.22058 2.91029 -0.08513 0.727762 -0.036209 -0.684873 + 2.30051 2.97377 0.008911 0.791971 -0.0317916 -0.609731 + 2.3405 2.85856 0.084861 0.82764 -0.101053 -0.552087 + 2.41569 2.92662 0.189185 0.853095 -0.0861966 -0.514587 + 2.43035 2.76938 0.249128 0.86287 -0.144026 -0.48447 + 2.16776 3.0049 -0.139603 0.62296 0.0553234 -0.780295 + 2.24769 3.06839 -0.04557 0.731941 0.0314938 -0.68064 + 2.31727 3.15669 0.028492 0.77088 0.0143478 -0.636819 + 2.3757 3.04183 0.113235 0.829544 -0.0391125 -0.55707 + 2.08849 3.05709 -0.174005 0.543878 0.0537137 -0.837443 + 2.18174 3.16605 -0.10933 0.658782 0.0528224 -0.750477 + 2.25132 3.25444 -0.035226 0.704798 0.0233697 -0.709023 + 2.00248 3.10754 -0.242777 0.658333 -0.0938043 -0.746859 + 2.09573 3.2165 -0.178102 0.636156 -0.0218363 -0.771251 + 2.14051 3.33694 -0.144314 0.67452 -0.012615 -0.738148 + 2.28491 3.35096 0.002008 0.762419 0.0577815 -0.644499 + 1.91175 2.94255 -0.310608 0.664754 -0.0562678 -0.744941 + 1.93094 3.12032 -0.315726 0.676071 -0.0459393 -0.735403 + 1.9646 3.24855 -0.283013 0.649527 -0.0104225 -0.760267 + 2.00939 3.36899 -0.249225 0.65077 -0.0521406 -0.757483 + 1.82339 3.13348 -0.411117 0.664302 -0.0175406 -0.747258 + 1.85705 3.26162 -0.378462 0.667157 -0.0338128 -0.744149 + 1.89281 3.42958 -0.364967 0.671593 -0.0810416 -0.736475 + 2.05219 3.5238 -0.228167 0.699825 -0.0415494 -0.713105 + 2.1741 3.43345 -0.107079 0.718241 0.0416658 -0.694546 + 1.76052 3.45011 -0.486733 0.770802 -0.147746 -0.619705 + 1.93562 3.58438 -0.343901 0.698702 -0.124206 -0.704549 + 2.05642 3.6944 -0.238661 0.733739 -0.11795 -0.669114 + 2.13928 3.60563 -0.129109 0.747983 -0.0367563 -0.6627 + 2.26119 3.51529 -0.008028 0.775921 0.162528 -0.609534 + 1.8582 3.6928 -0.453484 0.761915 -0.218033 -0.609874 + 1.979 3.80282 -0.348244 0.728048 -0.218968 -0.649614 + 2.2237 3.73838 -0.061223 0.756632 -0.109457 -0.644614 + 2.30656 3.64969 0.04838 0.775991 -0.159366 -0.610279 + 2.36045 3.55681 0.151055 0.820168 0.00568968 -0.572095 + 1.93576 3.88298 -0.430492 0.718831 -0.507093 -0.47554 + 2.15021 3.81314 -0.163911 0.75771 -0.171942 -0.629532 + 2.29439 3.94375 -0.001943 0.799453 -0.0889737 -0.594104 + 2.36788 3.86899 0.100744 0.81727 -0.0560707 -0.57352 + 2.42075 3.77541 0.197428 0.842863 -0.0853154 -0.531322 + 2.10696 3.8933 -0.246158 0.769274 -0.176576 -0.614034 + 2.24075 4.03992 -0.09271 0.793767 -0.0897396 -0.601565 + 2.42688 4.18807 0.142888 0.851078 -0.090122 -0.517246 + 2.46344 4.08564 0.234104 0.859779 -0.0734938 -0.50535 + 2.51631 3.99197 0.330737 0.860001 -0.0464279 -0.508175 + 2.16957 4.12504 -0.190949 0.799653 -0.109481 -0.590397 + 2.37324 4.28423 0.052122 0.827923 -0.0756678 -0.555713 + 2.47784 4.52184 0.207375 0.883496 -0.0131345 -0.468256 + 2.5216 4.41592 0.286831 0.884281 -0.0259611 -0.466233 + 2.55816 4.3135 0.378037 0.885542 -0.0526453 -0.461567 + 2.13786 4.23703 -0.268518 0.866291 -0.227695 -0.44463 + 2.34308 4.40835 -0.01565 0.844415 -0.0961144 -0.526997 + 2.44768 4.64596 0.139603 0.884656 0.0187437 -0.465867 + 2.54224 4.74606 0.357013 0.906903 0.105023 -0.408041 + 2.586 4.64014 0.436469 0.892505 0.0860047 -0.442762 + 2.14463 4.35754 -0.352645 0.926542 -0.216957 -0.307328 + 2.31137 4.52042 -0.093169 0.866354 -0.073893 -0.493933 + 2.40095 4.75493 0.063448 0.890888 0.0414994 -0.452323 + 2.48569 4.84565 0.275923 0.898858 0.143565 -0.414057 + 2.10681 4.30357 -0.569965 0.944924 -0.28984 0.152024 + 2.13134 4.47389 -0.427379 0.973045 -0.158952 -0.167088 + 2.27085 4.63874 -0.164498 0.894784 -0.0543149 -0.443184 + 2.36043 4.87316 -0.00793 0.887318 0.0862932 -0.453013 + 2.43896 4.95463 0.199769 0.912753 0.166223 -0.373164 + 2.13782 4.43884 -0.629461 0.980683 -0.0642449 0.184751 + 2.16234 4.60916 -0.486875 0.973389 -0.0749846 -0.216544 + 2.25756 4.75509 -0.239223 0.93838 -0.0194372 -0.345058 + 2.30296 4.96977 -0.093867 0.90418 0.115896 -0.411128 + 2.19346 4.36427 -0.7931 0.965098 0.126119 0.229522 + 2.1484 4.52392 -0.679827 0.984557 0.0944007 0.147428 + 2.13064 4.7121 -0.564763 0.977112 0.0765348 -0.19848 + 2.2028 4.84339 -0.336761 0.922989 0.0950288 -0.372909 + 2.2482 5.05807 -0.191405 0.875215 0.205219 -0.438045 + 2.19335 4.39952 -0.832166 0.969171 0.244961 -0.0264674 + 2.12695 4.65774 -0.736409 0.961873 0.244117 -0.123321 + 2.10918 4.84592 -0.621343 0.903046 0.253359 -0.346866 + 2.17109 4.94632 -0.414649 0.912672 0.201131 -0.355776 + 2.17387 5.1368 -0.282967 0.840234 0.298315 -0.452786 + 2.15185 4.49786 -0.87628 0.939317 0.299347 -0.167557 + 2.08545 4.75607 -0.780523 0.871822 0.415455 -0.259467 + 2.03206 4.93082 -0.7006 0.790891 0.414522 -0.450181 + 2.08717 5.00564 -0.514393 0.815822 0.368693 -0.445533 + 2.08995 5.19612 -0.382712 0.789791 0.359419 -0.49704 + 2.21742 4.1759 -0.951634 0.835344 0.251404 -0.488872 + 2.17726 4.38166 -0.952832 0.952819 0.23426 -0.193026 + 2.09335 4.67413 -0.890592 0.854799 0.421801 -0.30233 + 1.98499 4.84801 -0.845362 0.756128 0.517099 -0.401099 + 1.9316 5.02276 -0.765438 0.703633 0.471571 -0.531528 + 2.19199 4.18336 -1.01116 0.713774 0.109885 -0.691702 + 2.15183 4.38913 -1.01236 0.833741 0.260787 -0.486689 + 2.08058 4.50017 -1.05329 0.740992 0.287426 -0.606892 + 2.11876 4.55803 -0.967101 0.86123 0.338772 -0.378835 + 1.9959 4.7827 -0.94005 0.72393 0.539124 -0.43043 + 2.1757 3.92894 -1.00148 0.188805 0.122559 -0.974337 + 2.12779 3.92912 -1.0268 0.48462 0.06873 -0.872021 + 2.14408 4.18354 -1.03648 0.496091 -0.0212207 -0.868011 + 2.12014 4.34516 -1.06081 0.662663 0.046567 -0.747468 + 2.25716 3.7201 -1.07276 0.190899 0.30479 -0.933092 + 2.17766 3.69811 -1.06748 0.0745438 0.343137 -0.936323 + 2.10814 3.70056 -1.08372 0.352806 0.321139 -0.878861 + 2.09368 3.92411 -1.04812 0.215585 0.0446019 -0.975466 + 2.15277 3.49152 -1.19185 0.237933 0.547742 -0.802101 + 2.08324 3.49396 -1.20809 0.390461 0.567218 -0.725123 + 2.03674 3.52417 -1.2188 0.205763 0.679839 -0.703904 + 2.07403 3.69546 -1.10509 0.131744 0.40823 -0.903323 + 2.25356 3.33286 -1.28525 0.520445 0.462624 -0.717716 + 2.13852 3.33639 -1.32156 0.474176 0.653367 -0.590143 + 2.04657 3.34112 -1.43756 0.650325 0.64725 -0.397673 + 2.02722 3.40521 -1.36935 0.549537 0.694587 -0.464282 + 2.12598 3.21637 -1.55647 0.672972 0.560008 -0.483218 + 2.03403 3.22111 -1.67248 0.638922 0.568877 -0.517838 + 1.98168 3.22667 -1.72912 0.725695 0.44367 -0.525855 + 1.94243 3.33731 -1.68535 0.7295 0.535439 -0.425599 + 1.92308 3.40147 -1.61709 0.654967 0.659739 -0.36846 + 1.90506 3.21602 -1.84167 0.595112 0.370107 -0.713346 + 1.81518 3.23462 -1.87768 0.404401 0.31082 -0.860146 + 1.79251 3.29908 -1.86053 0.435239 0.485815 -0.757991 + 1.86581 3.32674 -1.79784 0.557168 0.540749 -0.630202 + 1.83363 3.39129 -1.76046 0.436406 0.713703 -0.547884 + 1.9152 3.43695 -1.56133 0.389217 0.897077 -0.209196 + 1.68929 3.21364 -1.93175 0.26303 -0.129465 -0.956062 + 1.68544 3.26274 -1.93739 0.387176 0.119901 -0.914177 + 1.66277 3.3272 -1.92024 0.478758 0.511757 -0.713369 + 1.76033 3.36363 -1.82314 0.360017 0.675397 -0.643604 + 1.49576 3.28867 -1.9863 0.125192 -0.279595 -0.951921 + 1.49191 3.33776 -1.99193 0.203632 -0.172483 -0.963734 + 1.49567 3.38455 -2.00338 0.376293 0.248437 -0.892571 + 1.4769 3.4259 -1.974 0.340544 0.874706 -0.344848 + 1.644 3.36855 -1.89087 0.402154 0.723094 -0.561611 + 1.33921 3.31982 -2.00306 0.0694265 -0.282559 -0.956734 + 1.34711 3.35336 -2.01996 -0.0106783 -0.386564 -0.922201 + 1.35098 3.38003 -2.02934 0.0591444 -0.279377 -0.958358 + 1.35474 3.42673 -2.04084 0.132508 0.383839 -0.913843 + 1.28209 3.29816 -2.00954 0.182039 -0.0719823 -0.980653 + 1.21141 3.39852 -2.02938 0.113984 -0.260802 -0.95864 + 1.21528 3.4251 -2.03882 0.132837 0.343165 -0.929834 + 1.21849 3.44081 -2.01302 0.103066 0.899404 -0.424794 + 1.35795 3.44244 -2.01504 0.114224 0.947508 -0.298632 + 1.1188 3.26806 -2.04562 0.341523 -0.0242842 -0.93956 + 1.15429 3.37695 -2.03582 0.298403 -0.215147 -0.929875 + 1.04122 3.27733 -2.08167 0.430542 -0.205054 -0.878969 + 1.07671 3.38622 -2.07188 0.431787 -0.0470074 -0.90075 + 0.983008 3.23697 -2.08837 0.254391 -0.358082 -0.898367 + 0.97195 3.33475 -2.15373 0.454453 -0.14448 -0.878975 + 0.945587 3.3738 -2.16275 0.139275 0.337838 -0.930843 + 1.05035 3.42518 -2.08095 0.347749 0.418256 -0.839126 + 0.98818 3.1422 -2.07001 0.230539 -0.116354 -0.966082 + 0.843467 3.22363 -2.09885 0.167231 -0.254299 -0.952557 + 0.913735 3.29439 -2.16042 0.0756546 -0.445483 -0.892088 + 0.887221 3.33249 -2.16981 -0.362102 0.0797176 -0.928723 + 0.935487 3.43206 -2.11846 0.0676357 0.560195 -0.825595 + 0.934466 2.91554 -2.08703 0.430653 0.110974 -0.895669 + 0.848639 3.12885 -2.08049 0.353131 -0.0254059 -0.935229 + 0.816953 3.26172 -2.10824 -0.367019 -0.0012002 -0.930213 + 0.877121 3.39075 -2.12552 -0.415379 0.373403 -0.829476 + 0.85133 2.46952 -2.4015 0.862951 0.265682 -0.429801 + 0.849243 2.29637 -2.54819 0.807398 0.432155 -0.401686 + 0.818076 2.32609 -2.59188 0.808228 0.418766 -0.414007 + 0.877783 2.22032 -2.58847 0.801398 0.474667 -0.363941 + 0.851235 2.13087 -2.76174 0.766622 0.493752 -0.410486 + 0.816371 2.15362 -2.79594 0.756566 0.50377 -0.416923 + 0.807259 2.10921 -2.87383 0.829617 0.434969 -0.350053 + 0.932255 2.02172 -2.75308 0.791971 0.450252 -0.412377 + 0.879776 2.05483 -2.80203 0.745879 0.47917 -0.462666 + 0.83271 2.03751 -2.89384 0.796911 0.429877 -0.424428 + 0.746748 2.17122 -2.93763 0.726052 0.505953 -0.465681 + 0.957339 2.00159 -2.71642 0.882347 0.379622 -0.278119 + 0.943743 1.95252 -2.79183 0.813502 0.37476 -0.444713 + 0.891264 1.98563 -2.84077 0.589267 -0.307134 -0.747284 + 0.976666 1.92511 -2.73795 0.908901 0.308609 -0.280464 + 0.772199 2.09951 -2.95763 0.794364 0.407588 -0.450398 + 0.745388 2.12484 -2.9707 0.652646 0.418271 -0.631746 + 0.711933 2.12546 -3.00077 0.519362 -0.323774 -0.790844 + 0.640049 2.12566 -3.02751 0.400574 -0.144019 -0.904875 + 0.61934 2.10536 -3.02356 0.555988 -0.321682 -0.766419 + 0.61008 2.09215 -3.03068 0.631621 -0.181779 -0.753665 + 0.598376 2.08982 -3.03804 0.0815207 -0.310188 -0.947174 + 0.588527 2.10963 -3.04155 0.728356 0.248811 -0.638429 + 0.679143 2.09519 -2.95214 0.56536 -0.725893 -0.391724 + 0.658435 2.0749 -2.94819 0.71944 -0.477175 -0.504688 + 0.643091 2.04482 -2.95809 0.822419 -0.282537 -0.493761 + 0.633831 2.03161 -2.96522 0.786452 -0.33594 -0.518302 + 0.70134 2.1124 -2.93695 0.482688 -0.831769 -0.274175 + 0.706703 2.08199 -2.88367 0.556804 -0.624279 -0.547947 + 0.684506 2.06486 -2.89881 0.73812 -0.499445 -0.453579 + 0.671639 2.04904 -2.90701 0.824072 -0.361371 -0.436252 + 0.656295 2.01888 -2.91696 0.848419 -0.344976 -0.401468 + 0.745388 2.12484 -2.9707 -0.105507 -0.985152 -0.135438 + 0.734795 2.11178 -2.90688 0.184212 -0.897888 -0.39983 + 0.723426 2.08469 -2.87455 0.318083 -0.661349 -0.679295 + 0.683922 2.01546 -2.85125 0.636825 -0.589376 -0.497082 + 0.671055 1.99973 -2.8594 0.814312 -0.545859 -0.197317 + 0.766295 2.10833 -2.8953 -0.326633 -0.876409 -0.353862 + 0.754926 2.08123 -2.86297 0.0371263 -0.679432 -0.732798 + 0.700645 2.01817 -2.84213 0.322544 -0.57093 -0.754986 + 0.772199 2.09951 -2.95763 -0.706113 -0.706894 0.0413043 + 0.793106 2.08309 -2.88218 -0.608152 -0.721755 -0.330486 + 0.771606 2.06407 -2.84745 -0.0984308 -0.641747 -0.760574 + 0.717325 2.00101 -2.82661 0.193981 -0.528656 -0.826374 + 0.83271 2.03751 -2.89384 -0.748264 -0.618737 -0.239301 + 0.811958 2.03572 -2.84774 -0.589538 -0.643534 -0.488168 + 0.790458 2.01671 -2.81301 -0.0403747 -0.617337 -0.785662 + 0.794947 1.99192 -2.79688 0.00616252 -0.487049 -0.873353 + 0.721814 1.97613 -2.81053 0.173875 -0.479318 -0.860245 + 0.846357 1.99908 -2.85287 -0.995004 -0.0687249 0.0724176 + 0.825605 1.99729 -2.80678 -0.633736 -0.413234 -0.653924 + 0.78705 1.9583 -2.78003 0.00757615 -0.409941 -0.91208 + 0.780231 1.9333 -2.76934 -0.00211998 -0.356229 -0.934396 + 0.714996 1.95114 -2.79984 0.0717885 -0.542636 -0.836895 + 0.683296 1.9433 -2.78645 -0.079781 -0.848488 -0.523167 + 0.817707 1.96366 -2.78993 -0.654148 -0.163456 -0.738494 + 0.811185 1.93751 -2.78023 -0.690024 -0.0724013 -0.720156 + 0.768366 1.89371 -2.75537 -0.0197988 -0.739615 -0.672739 + 0.736666 1.88587 -2.74199 -0.165716 -0.850028 -0.499991 + 0.839834 1.97284 -2.84323 -0.957504 0.152359 -0.244894 + 0.799319 1.89792 -2.76627 -0.0716306 -0.696446 -0.714025 + 0.808198 1.87303 -2.70255 0.247209 -0.952377 -0.17851 + 0.756233 1.86791 -2.70109 -0.0602847 -0.982099 -0.17846 + 0.654392 1.90403 -2.71624 -0.150379 -0.886649 -0.43731 + 0.83271 2.03751 -2.89384 -0.69545 0.393795 0.601062 + 0.642788 1.97122 -2.85022 0.53712 -0.840362 -0.0727665 + 0.66024 1.98387 -2.86694 0.707074 -0.697049 -0.119032 + 0.64548 2.00311 -2.92446 0.795927 -0.435207 -0.420828 + 0.573469 1.94957 -2.85811 0.303614 -0.910307 -0.281355 + 0.614905 1.97986 -2.91918 0.284136 -0.891277 -0.3534 + 0.632357 1.99251 -2.93589 0.500886 -0.719912 -0.480458 + 0.620708 2.02101 -2.97665 0.638933 -0.480235 -0.600949 + 0.52042 1.93869 -2.87167 0.261246 -0.750124 -0.607507 + 0.54074 1.94898 -2.8761 0.208281 -0.856071 -0.473034 + 0.582176 1.97927 -2.93717 0.146442 -0.866962 -0.476373 + 0.609004 2.01859 -2.98406 0.334369 -0.65819 -0.674525 + 0.504744 1.95583 -2.89736 0.0657213 -0.784127 -0.617111 + 0.561231 1.9846 -2.94719 0.00479849 -0.827016 -0.562158 + 0.588059 2.02391 -2.99407 -0.0529281 -0.592872 -0.803555 + 0.57821 2.04381 -2.99755 -0.511442 -0.268182 -0.816398 + 0.588527 2.10963 -3.04155 -0.799168 -0.326007 -0.505025 + 0.484424 1.94553 -2.89293 0.0698482 -0.507247 -0.858966 + 0.44583 1.96623 -2.90117 -0.0076664 -0.382206 -0.924045 + 2.67151 2.02914 0.71846 0.99686 0.0589322 -0.0528951 + 2.6886 2.09035 0.768845 0.943737 -0.200669 -0.262855 + 2.73773 2.11713 0.891059 0.950885 -0.00242421 -0.309534 + 2.76974 2.25956 1.00996 0.948322 0.0343029 -0.31545 + 2.84566 2.22835 1.24362 0.940422 -0.003093 -0.339996 + 2.91431 2.40647 1.3995 0.948849 -0.0790274 -0.305681 + 2.93623 2.33865 1.51157 0.964898 -0.0674303 -0.253821 + 2.73842 2.35373 0.931246 0.894006 0.174965 -0.412481 + 2.81256 2.32573 1.13535 0.938734 -0.0297848 -0.343353 + 2.88121 2.50385 1.29123 0.936162 -0.0799716 -0.342353 + 2.99463 2.69059 1.5504 0.959938 -0.0896236 -0.265495 + 3.01655 2.62285 1.66252 0.979102 -0.125827 -0.159772 + 2.67447 2.278 0.802623 0.720593 0.411058 -0.558369 + 2.68578 2.38143 0.851482 0.888723 0.0336841 -0.457206 + 2.78124 2.41982 1.05658 0.92132 -0.0243742 -0.38804 + 2.85952 2.61477 1.20352 0.925873 -0.0842115 -0.36833 + 2.98441 2.8109 1.47462 0.955422 -0.0749462 -0.285574 + 2.62183 2.30578 0.72291 0.877114 0.0831774 -0.473025 + 2.64802 2.47483 0.752111 0.900968 -0.0820684 -0.426053 + 2.75872 2.54239 0.975685 0.911529 -0.0870234 -0.401923 + 2.837 2.73734 1.12262 0.92231 -0.092091 -0.375318 + 2.96272 2.92172 1.38686 0.945961 -0.0635739 -0.317986 + 2.51401 2.31489 0.503919 0.910713 0.03266 -0.411745 + 2.58868 2.36048 0.653766 0.895251 -0.056553 -0.441959 + 2.60116 2.6108 0.624196 0.898823 -0.110475 -0.424161 + 2.72096 2.63579 0.876314 0.906586 -0.104319 -0.408925 + 2.81207 2.84551 1.03226 0.921419 -0.109802 -0.372733 + 2.46937 2.34416 0.416232 0.86826 0.038163 -0.49464 + 2.54182 2.49645 0.525852 0.888207 -0.0924309 -0.45005 + 2.58091 2.74515 0.544287 0.887911 -0.121179 -0.443767 + 2.7072 2.76244 0.798548 0.906629 -0.127132 -0.40232 + 2.79831 2.97216 0.954499 0.920891 -0.101816 -0.376288 + 2.44543 2.27979 0.37632 0.718057 0.275031 -0.639337 + 2.41009 2.47716 0.302859 0.871211 -0.0786243 -0.484571 + 2.49718 2.52572 0.438165 0.86603 -0.0963212 -0.490626 + 2.38615 2.4128 0.262939 0.879806 -0.00167563 -0.475331 + 2.40968 2.60772 0.270929 0.857919 -0.13133 -0.496717 + 2.49677 2.65618 0.406191 0.867706 -0.125355 -0.481013 + 2.49429 2.81905 0.355288 0.875115 -0.120078 -0.468781 + 2.57843 2.90803 0.493386 0.884851 -0.103434 -0.454246 + 2.68696 2.89679 0.71864 0.901603 -0.106367 -0.419283 + 2.76845 3.07492 0.860518 0.915697 -0.0827831 -0.39325 + 2.47963 2.97629 0.295346 0.874121 -0.0784305 -0.479333 + 2.54816 3.04584 0.411292 0.879667 -0.068648 -0.47061 + 2.66019 3.0171 0.63406 0.896749 -0.0848377 -0.434332 + 2.74168 3.19523 0.775939 0.909137 -0.063492 -0.411628 + 2.43931 3.14098 0.203898 0.850076 -0.0200171 -0.526279 + 2.50785 3.21052 0.319844 0.872276 0.00426763 -0.488996 + 2.62992 3.15491 0.551967 0.886977 -0.047584 -0.459356 + 2.70095 3.29493 0.677653 0.893638 -0.0326435 -0.447599 + 2.38088 3.25584 0.119155 0.815884 0.0478805 -0.57623 + 2.44382 3.3279 0.219741 0.842162 0.110341 -0.527815 + 2.58204 3.26134 0.460024 0.874376 0.00588322 -0.485214 + 2.65307 3.40136 0.58571 0.876219 -0.0151807 -0.481674 + 2.34785 3.42302 0.102595 0.821075 0.111012 -0.559921 + 2.51801 3.37872 0.359921 0.849225 0.0558676 -0.525068 + 2.59962 3.50006 0.490758 0.846312 0.012624 -0.532538 + 2.71706 3.58728 0.688875 0.893513 -0.0167451 -0.448725 + 2.76013 3.49468 0.787875 0.911009 -0.0178989 -0.411998 + 2.44711 3.46454 0.261678 0.828567 0.0508519 -0.557576 + 2.52873 3.58587 0.392516 0.83814 -0.000561049 -0.545455 + 2.66362 3.68599 0.593915 0.860778 -0.00734568 -0.508927 + 2.73856 3.90859 0.73135 0.907451 0.013409 -0.419944 + 2.77582 3.81861 0.830804 0.933799 0.00766403 -0.357717 + 2.47465 3.68253 0.300103 0.840074 -0.0545014 -0.539727 + 2.61642 3.79249 0.510856 0.857008 -0.0257027 -0.514662 + 2.69136 4.01509 0.648292 0.897292 -0.00604435 -0.441395 + 2.80241 4.17046 0.902182 0.942138 0.000324917 -0.335226 + 2.83967 4.08039 1.00158 0.957128 -0.00431602 -0.289633 + 2.56233 3.88914 0.418443 0.854671 -0.0401501 -0.517616 + 2.64914 4.11155 0.555025 0.884611 -0.0234189 -0.465741 + 2.77019 4.2544 0.796595 0.932967 -0.0158803 -0.359612 + 2.80234 4.48734 0.914338 0.955139 0.0781334 -0.285666 + 2.83456 4.40331 1.01987 0.964872 0.0541266 -0.257084 + 2.60312 4.21438 0.46731 0.877797 -0.0286857 -0.478173 + 2.72797 4.35094 0.703387 0.912857 0.00904089 -0.40818 + 2.76089 4.56788 0.813234 0.94214 0.0981501 -0.32053 + 2.79077 4.6899 0.98689 0.949499 0.214131 -0.229346 + 2.83173 4.63089 1.0977 0.960287 0.194486 -0.200061 + 2.68542 4.4429 0.6089 0.906319 0.0123005 -0.422416 + 2.71834 4.65985 0.718739 0.927165 0.125943 -0.352849 + 2.74932 4.77044 0.885785 0.943216 0.229901 -0.23977 + 2.7084 4.97785 0.998734 0.929402 0.336078 -0.152522 + 2.74616 4.90857 1.09554 0.931632 0.33578 -0.138975 + 2.64047 4.54202 0.519628 0.897385 0.0513165 -0.438255 + 2.66822 4.75083 0.630958 0.912169 0.15659 -0.378718 + 2.70037 4.857 0.796664 0.929584 0.255633 -0.265565 + 2.65944 5.06441 0.909622 0.923181 0.341067 -0.177232 + 2.61376 4.84895 0.547808 0.899669 0.176061 -0.399498 + 2.65025 4.94798 0.708883 0.921177 0.268123 -0.282034 + 2.61138 5.14084 0.817034 0.913574 0.348811 -0.209076 + 2.60005 5.27246 1.05447 0.916325 0.391651 -0.0834139 + 2.63199 5.20228 1.15381 0.91877 0.390824 -0.0558353 + 2.55713 4.93932 0.463279 0.90167 0.189749 -0.388569 + 2.59492 5.03463 0.622196 0.908901 0.283452 -0.305867 + 2.55605 5.22749 0.730347 0.893946 0.380737 -0.236431 + 2.55198 5.34889 0.961884 0.87828 0.452994 -0.153039 + 2.50784 5.47996 1.22667 0.872213 0.488792 -0.0180771 + 2.50059 5.03891 0.382189 0.891358 0.21689 -0.398044 + 2.5383 5.125 0.537667 0.901303 0.304185 -0.308422 + 2.49893 5.29793 0.637158 0.883413 0.399328 -0.245192 + 2.49541 5.41053 0.865721 0.857535 0.482417 -0.178629 + 2.43881 5.12605 0.296857 0.896079 0.237447 -0.375049 + 2.47683 5.20264 0.447795 0.888298 0.323433 -0.326065 + 2.43747 5.37556 0.547294 0.870629 0.417207 -0.260659 + 2.4383 5.48096 0.772532 0.857675 0.482028 -0.179004 + 2.39598 5.61798 1.0342 0.827613 0.54967 -0.113666 + 2.37936 5.22093 0.213316 0.876929 0.283483 -0.388114 + 2.41505 5.28978 0.362463 0.879786 0.351102 -0.320475 + 2.37552 5.44264 0.454495 0.857017 0.435614 -0.275249 + 2.38285 5.53666 0.67206 0.846725 0.492349 -0.201616 + 2.37951 5.0495 0.116236 0.89498 0.212028 -0.392497 + 2.31038 5.30304 0.127906 0.863872 0.325878 -0.384094 + 2.34577 5.36623 0.277045 0.857304 0.38771 -0.338689 + 2.30624 5.5191 0.369077 0.841989 0.45216 -0.29429 + 2.3209 5.60374 0.579269 0.829908 0.51656 -0.210756 + 2.32204 5.14603 0.030249 0.889735 0.257918 -0.376631 + 2.23783 5.38581 0.041944 0.841278 0.357507 -0.405512 + 2.2768 5.44834 0.191635 0.850292 0.404467 -0.336764 + 2.23743 5.58643 0.280245 0.83262 0.465317 -0.300374 + 2.25917 5.66193 0.483885 0.820038 0.527487 -0.222024 + 2.24948 5.2288 -0.055713 0.850589 0.325182 -0.413225 + 2.1625 5.46109 -0.042254 0.823091 0.380725 -0.421391 + 2.20301 5.52251 0.10737 0.830445 0.42511 -0.360061 + 2.16364 5.6606 0.195989 0.817953 0.482846 -0.31275 + 2.19036 5.72927 0.395052 0.799878 0.55289 -0.233471 + 2.17516 5.30753 -0.147275 0.830827 0.351023 -0.431867 + 2.07975 5.54245 -0.121966 0.801233 0.389729 -0.454023 + 2.12768 5.59788 0.023222 0.823283 0.430212 -0.370301 + 2.08997 5.72607 0.107994 0.811367 0.491573 -0.316291 + 2.1204 5.78911 0.305796 0.788776 0.566282 -0.239077 + 2.09241 5.38889 -0.226996 0.791544 0.381486 -0.477417 + 1.99624 5.61466 -0.200255 0.774812 0.394399 -0.494081 + 2.0527 5.66198 -0.067605 0.803315 0.43225 -0.40969 + 2.015 5.79017 0.017166 0.786792 0.512218 -0.34437 + 2.04673 5.85449 0.217752 0.784342 0.569674 -0.245519 + 1.9999 5.26727 -0.465553 0.74328 0.410284 -0.528395 + 2.00236 5.46013 -0.309787 0.761803 0.391158 -0.516383 + 1.90669 5.70324 -0.265662 0.726674 0.433134 -0.533235 + 1.96919 5.7342 -0.145894 0.763189 0.464014 -0.449704 + 1.93368 5.85036 -0.06688 0.742615 0.543902 -0.390761 + 2.01005 5.09055 -0.593649 0.773849 0.415489 -0.478044 + 1.897 5.32413 -0.550839 0.699807 0.433177 -0.568003 + 1.91281 5.54861 -0.375237 0.726 0.404402 -0.556223 + 1.80394 5.77041 -0.338008 0.667209 0.460198 -0.585704 + 1.87717 5.79114 -0.227716 0.70867 0.499751 -0.498032 + 1.90715 5.14741 -0.678936 0.69296 0.474293 -0.543003 + 1.79588 5.39142 -0.619783 0.661577 0.447364 -0.601815 + 1.81169 5.61589 -0.444181 0.662366 0.439637 -0.606622 + 1.69468 5.82508 -0.409707 0.590969 0.489442 -0.641251 + 1.77442 5.8584 -0.300021 0.658857 0.520112 -0.543499 + 1.82293 5.09917 -0.833386 0.665469 0.512977 -0.542222 + 1.79847 5.22373 -0.746933 0.660948 0.48498 -0.572663 + 1.68559 5.46478 -0.67924 0.60448 0.475804 -0.638917 + 1.70243 5.67048 -0.51592 0.602893 0.471022 -0.64394 + 1.88753 4.95658 -0.89482 0.706913 0.536145 -0.461326 + 1.70753 5.17999 -0.889376 0.614641 0.525357 -0.588401 + 1.68819 5.29708 -0.806381 0.614619 0.503426 -0.607294 + 1.56957 5.52995 -0.731322 0.555854 0.502461 -0.662238 + 1.87891 4.87863 -0.985402 0.618341 0.538791 -0.572152 + 1.77214 5.03741 -0.950809 0.608016 0.529219 -0.591815 + 1.58714 5.25355 -0.942585 0.559589 0.528346 -0.638523 + 1.5678 5.37064 -0.85959 0.564117 0.52434 -0.637839 + 2.03337 4.6711 -1.00275 0.729694 0.463329 -0.502865 + 1.91638 4.76694 -1.04815 0.615698 0.543182 -0.57085 + 1.74087 4.96192 -1.04267 0.544296 0.511057 -0.665254 + 1.63409 5.12079 -1.00802 0.545805 0.50741 -0.666807 + 1.45903 5.31512 -0.996827 0.505928 0.531538 -0.679341 + 1.99519 4.61324 -1.08894 0.667133 0.366672 -0.648448 + 1.88748 4.71569 -1.13058 0.584667 0.472478 -0.659491 + 1.73303 4.82137 -1.17302 0.464421 0.502104 -0.729524 + 1.76194 4.87261 -1.09058 0.539443 0.5513 -0.636451 + 1.53142 5.08193 -1.11033 0.472589 0.491175 -0.731715 + 2.04889 4.45611 -1.10178 0.625652 0.162118 -0.763071 + 1.96621 4.56012 -1.13792 0.569859 0.226626 -0.789875 + 1.8585 4.66265 -1.17951 0.394964 0.202347 -0.896136 + 2.06534 4.30683 -1.08842 0.165726 -0.190595 -0.967579 + 2.02337 4.39865 -1.12526 0.270114 -0.208268 -0.940033 + 1.94069 4.50266 -1.1614 -0.106776 -0.315449 -0.942916 + 2.08928 4.14522 -1.06409 0.248168 -0.0934227 -0.964202 + 2.0466 4.10856 -1.0584 -0.489524 -0.0754847 -0.868717 + 2.03364 4.27968 -1.06779 -0.542495 -0.301152 -0.784224 + 1.99167 4.3715 -1.10462 -0.611108 -0.504348 -0.610065 + 2.05101 3.88745 -1.04242 -0.392203 0.118485 -0.912216 + 1.99583 3.86673 -1.01114 -0.544096 0.127998 -0.829202 + 2.02304 4.08642 -1.02005 -0.737529 0.0149861 -0.675149 + 2.01007 4.25745 -1.02949 -0.762162 -0.132344 -0.633715 + 2.03007 3.69726 -1.092 -0.411265 0.414258 -0.811943 + 1.9749 3.67645 -1.06076 -0.572579 0.400494 -0.715373 + 1.74742 3.72033 -0.871373 -0.549309 0.216261 -0.80715 + 1.77462 3.94002 -0.880283 -0.570766 0.166296 -0.804097 + 1.76261 4.05962 -0.821833 -0.647748 0.152918 -0.74635 + 1.99278 3.52588 -1.20576 -0.469362 0.695106 -0.544543 + 1.94981 3.49535 -1.17289 -0.628683 0.627639 -0.459158 + 1.74752 3.40461 -1.07452 -0.5071 0.712606 -0.484811 + 1.77261 3.58579 -0.962341 -0.555242 0.442445 -0.704236 + 1.98072 3.43541 -1.38007 0.286957 0.915062 -0.283402 + 1.94716 3.43808 -1.3497 -0.401772 0.90496 -0.140092 + 1.90418 3.40747 -1.31688 -0.490817 0.868704 -0.0667227 + 1.88163 3.43962 -1.53096 -0.195883 0.977953 0.0723714 + 1.84709 3.41146 -1.48519 -0.378316 0.913064 0.152285 + 1.68608 3.35453 -1.39578 -0.240246 0.963322 0.119554 + 1.74316 3.35054 -1.22748 -0.354105 0.930087 -0.0977177 + 1.82574 3.42676 -1.70469 0.218895 0.934977 -0.27911 + 1.79723 3.42649 -1.65382 -0.237571 0.96765 0.0849265 + 1.76269 3.39842 -1.608 -0.368893 0.914219 0.167695 + 1.72522 3.41054 -1.78059 0.148565 0.934332 -0.323964 + 1.69671 3.41036 -1.72967 -0.213004 0.957225 0.195832 + 1.66266 3.36006 -1.66077 -0.329502 0.916902 0.22521 + 1.54073 3.32302 -1.56781 -0.147083 0.986648 0.0699382 + 1.64076 3.36138 -1.51505 -0.263014 0.964016 0.0386954 + 1.6089 3.41555 -1.84827 0.161352 0.946806 -0.278429 + 1.59004 3.40451 -1.78076 -0.118379 0.935399 0.333189 + 1.556 3.35431 -1.7118 -0.112573 0.919986 0.375438 + 1.48277 3.42564 -1.88495 0.155326 0.986915 0.0432823 + 1.46391 3.41461 -1.81744 0.0333653 0.924266 0.380288 + 1.43494 3.37481 -1.76431 0.0337742 0.88904 0.456583 + 1.35307 3.35536 -1.67502 0.160271 0.958432 0.236055 + 1.47412 3.33477 -1.62255 0.0504947 0.979649 0.194263 + 1.36382 3.44218 -1.92599 0.179912 0.982135 -0.0551638 + 1.29996 3.46466 -1.90454 0.265219 0.959441 -0.095561 + 1.30519 3.45113 -1.84669 0.181437 0.884 0.430841 + 1.27622 3.41134 -1.79357 0.16241 0.852996 0.496004 + 1.15463 3.4633 -1.99157 0.297673 0.841896 -0.450113 + 1.1022 3.53356 -1.92768 0.301205 0.938207 -0.17042 + 1.10742 3.52012 -1.86978 0.31716 0.864002 0.391036 + 1.07183 3.48275 -2.01627 0.307296 0.760528 -0.571984 + 1.01939 3.55311 -1.95233 0.426555 0.803947 -0.414391 + 0.96066 3.60365 -1.92487 0.494927 0.84908 -0.18469 + 0.958648 3.58478 -1.85979 0.482183 0.77035 0.417205 + 1.11874 3.44461 -1.78761 0.278898 0.832016 0.479547 + 1.05115 3.46115 -2.05065 0.260583 0.671837 -0.693348 + 0.969432 3.54005 -2.00651 0.349835 0.726283 -0.591716 + 0.9107 3.59059 -1.97905 0.431828 0.726953 -0.533913 + 0.836274 3.68742 -1.90357 0.502162 0.861491 -0.0752784 + 0.834262 3.66848 -1.83855 0.564977 0.733019 0.378793 + 0.936296 3.46802 -2.08816 0.271225 0.618756 -0.737278 + 0.948757 3.51835 -2.04093 0.304695 0.657611 -0.688991 + 0.846731 3.62203 -1.9957 0.435322 0.661427 -0.610745 + 0.772305 3.71886 -1.92022 0.594254 0.758296 -0.268047 + 0.831081 3.52536 -2.07787 -0.00852729 0.39327 -0.919383 + 0.843542 3.57578 -2.0306 0.32367 0.578306 -0.748865 + 0.705238 3.728 -1.99306 0.44169 0.630157 -0.638602 + 0.638711 3.79866 -1.96524 0.570894 0.687529 -0.448759 + 0.705777 3.78952 -1.8924 0.674525 0.721203 -0.157738 + 0.830249 3.43662 -2.09197 -0.337322 0.152765 -0.928912 + 0.700534 3.60249 -2.02207 -0.15147 0.0801534 -0.985207 + 0.702049 3.68176 -2.02795 0.0647169 0.304795 -0.950217 + 0.620649 3.7338 -2.01269 0.0114687 0.101269 -0.994793 + 0.770081 3.3076 -2.0747 -0.188333 0.182023 -0.96509 + 0.699702 3.51375 -2.03617 -0.0713914 0.171692 -0.98256 + 0.647085 3.52642 -2.0411 0.496314 0.278766 -0.822169 + 0.591852 3.63862 -2.04383 0.618985 0.449348 -0.644162 + 0.619134 3.65462 -2.00675 0.208815 0.341377 -0.916438 + 0.717464 3.32035 -2.07958 0.430172 0.271348 -0.861001 + 0.576766 3.71804 -2.007 0.31714 0.222589 -0.921887 + 2.67427 2.71354 -0.70516 -0.585552 0.494316 0.64248 + 1.02369 1.81801 0.518748 -0.770135 0.629929 0.100407 + 0.925079 1.67623 0.632923 -0.31584 -0.363456 -0.876439 + 0.972324 1.71963 0.595543 -0.756445 0.3446 -0.555915 + 0.848978 1.62264 0.668738 0.232188 -0.827003 -0.51201 + 1.02369 1.81801 0.518748 0.487929 -0.727629 -0.482164 + 0.948408 2.01676 -0.468093 -0.0645931 -0.965585 0.251938 + 0.915514 2.00015 -0.555323 -0.344388 -0.914973 0.210287 + 1.23701 1.53076 0.60848 -0.714382 -0.153768 -0.682652 + 1.33145 1.63145 0.543685 -0.378735 -0.222833 -0.898279 + 1.21447 1.45124 0.759218 -0.521178 -0.444237 -0.728716 + 1.25585 1.60974 0.521077 0.910925 -0.408448 0.0581845 + 1.20934 1.39286 0.775928 -0.847225 0.0204599 -0.530839 + 1.1853 1.29834 0.696237 -0.449277 -0.288303 -0.845595 + 1.13045 1.1621 0.761815 -0.819103 0.172255 -0.547174 + 1.26299 1.58624 0.584984 -0.17437 -0.313641 -0.933394 + 1.13996 1.08149 0.754245 -0.871564 0.0509284 -0.48763 + 1.29257 1.60304 0.697493 -0.42515 -0.12688 -0.896186 + 1.37295 1.58577 0.661806 -0.426385 -0.136886 -0.894124 + 0.307145 1.88639 -1.30329 0.0661222 0.806585 0.587409 + 0.186089 1.88576 -1.28879 0.121439 0.805982 0.579349 + 0.099451 1.85062 -1.21534 -0.0995206 0.808565 0.579929 + 0.064756 1.84625 -1.22456 -0.24945 0.786141 0.565471 + 0.874389 1.49643 -1.23266 0.166063 -0.680019 -0.714141 + 0.792052 1.49776 -1.24696 0.1188 -0.656521 -0.744894 + 0.922122 1.44708 -1.17038 0.192259 -0.692053 -0.695772 + 0.508552 1.94894 -2.92703 -0.780217 -0.553978 0.290465 + 0.52297 1.93907 -2.90713 -0.837095 -0.524939 0.153982 + 0.531743 1.92998 -2.84378 -0.892581 -0.423164 0.155665 + 0.562042 1.91149 -2.78196 -0.880935 -0.314045 0.354018 + 0.540993 1.91304 -2.85124 -0.857508 -0.506917 0.0878356 + 0.596303 1.90966 -2.7044 -0.70092 -0.627276 0.339465 + 0.594687 1.91353 -2.65769 -0.614061 -0.784243 0.088835 + 0.596791 1.8903 -2.71226 -0.732456 -0.271992 0.624122 + 0.673959 1.88607 -2.67534 -0.224245 -0.970769 -0.0855689 + 0.645977 1.89343 -2.65109 -0.28634 -0.957263 0.0407023 + 0.644361 1.8973 -2.60438 -0.290762 -0.953806 0.0755789 + 0.733378 1.87888 -2.59848 -0.11827 -0.986878 0.109923 + 0.813326 1.87664 -2.6242 0.196596 -0.971981 0.128851 + 0.844209 1.88512 -2.61269 0.0873606 -0.961378 -0.260999 + 0.76136 1.87152 -2.62273 -0.00669117 -0.982034 0.188584 + 0.881192 1.90619 -2.68198 0.379819 -0.90383 -0.197052 + 0.912075 1.91468 -2.67049 0.113981 -0.929046 -0.351968 + 0.932709 1.90732 -2.65595 -0.061355 -0.901762 -0.427857 + 0.617677 1.90266 -2.70986 0.370197 -0.770326 -0.519184 + 0.596791 1.8903 -2.71226 0.206586 -0.511364 0.834164 + 0.568883 1.86808 -2.71898 0.20596 -0.511065 0.834501 + 0.596791 1.8903 -2.71226 0.363491 -0.456742 -0.811949 + 1.1428 1.64929 -1.72542 -0.401092 0.915994 -0.00893161 + 1.13874 1.64637 -1.84257 -0.2741 0.961098 -0.0340594 + 1.15155 1.65076 -1.79137 -0.0272506 0.996538 -0.0785461 + 0.393486 2.18026 -3.16149 0.377926 -0.716 -0.586954 + 0.372261 2.1636 -3.15483 0.464096 -0.775365 -0.42828 + 0.350348 2.16381 -3.16919 0.321523 -0.800553 -0.505705 + 0.349223 2.13195 -3.11381 0.490387 -0.595144 -0.636651 + 0.334431 2.13339 -3.12531 -0.199286 -0.454074 -0.86839 + 0.371136 2.13183 -3.0994 0.592057 -0.661129 -0.460844 + 0.38294 2.11217 -3.06315 0.804983 -0.204868 -0.556805 + 0.370895 2.08434 -3.07694 0.818381 0.00123083 -0.574674 + 0.354297 2.09602 -3.09818 0.705106 -0.0623241 -0.706357 + 0.339505 2.09737 -3.10972 0.28838 -0.190533 -0.938368 + 0.404042 2.16929 -3.06808 0.679273 -0.628524 -0.378875 + 0.415846 2.14963 -3.03183 0.675007 -0.39771 -0.621444 + 0.393486 2.18026 -3.16149 0.500982 -0.856028 -0.12741 + 0.425268 2.18595 -3.07474 0.394101 -0.887399 -0.239183 + 0.440601 2.15824 -3.01655 0.399007 -0.517363 -0.757052 + 0.443019 2.08989 -2.99497 0.353871 -0.397841 -0.846462 + 0.455932 2.1985 -3.12628 0.241862 -0.966002 -0.091344 + 0.480623 2.19749 -3.09233 -0.0588648 -0.976604 -0.206832 + 0.449959 2.18494 -3.04079 0.257136 -0.853261 -0.453682 + 0.483061 2.14963 -3.00123 0.0814883 -0.519822 -0.850379 + 0.50524 2.13919 -2.99355 0.0266964 -0.487804 -0.872545 + 0.465198 2.07954 -2.98724 0.0433964 -0.24891 -0.967554 + 0.492418 2.17623 -3.02551 -0.176385 -0.80804 -0.562102 + 0.52121 2.16814 -3.0325 -0.343357 -0.861212 -0.374726 + 0.53286 2.15391 -3.00765 -0.2372 -0.777605 -0.582295 + 0.529393 2.117 -2.98592 -0.107761 -0.266479 -0.957797 + 0.509415 2.1894 -3.09931 -0.368745 -0.90262 -0.222047 + 0.565038 2.15256 -3.06872 -0.484107 -0.846432 -0.221797 + 0.557013 2.13173 -3.00002 -0.537375 -0.499236 -0.6797 + 0.540525 2.08937 -2.98326 -0.193184 -0.0956334 -0.976491 + 0.476331 2.05182 -2.98463 -0.10682 -0.242327 -0.964296 + 0.460611 2.02282 -2.96798 -0.171443 -0.57887 -0.797193 + 0.568852 2.10302 -2.9977 -0.676759 -0.220353 -0.702454 + 0.549883 2.03016 -2.9831 -0.239556 -0.25282 -0.937387 + 0.534164 2.00115 -2.96646 -0.121044 -0.661562 -0.740057 + 0.477676 1.9723 -2.91668 -0.140817 -0.783527 -0.605191 + 0.352052 2.05087 -3.10877 0.393683 -0.245151 -0.885954 + 0.323018 2.03798 -3.10345 -0.140404 -0.466361 -0.87338 + 0.310471 2.08448 -3.1044 -0.277882 -0.115503 -0.953646 + 0.237864 2.05686 -3.07595 -0.324359 -0.349116 -0.879153 + 0.229401 2.08615 -3.07449 -0.277474 -0.133379 -0.951429 + 0.302008 2.1137 -3.10299 -0.45046 -0.048573 -0.891475 + 0.322121 2.17092 -3.11931 -0.589253 -0.493426 -0.639774 + 0.350348 2.16381 -3.16919 -0.863471 -0.209912 -0.458643 + 0.289698 2.15122 -3.09699 -0.37193 -0.235035 -0.898013 + 0.289793 2.2002 -3.13563 -0.394012 -0.817502 -0.420054 + 0.350348 2.16381 -3.16919 -0.590066 -0.775858 -0.22331 + 0.31802 2.1931 -3.18552 -0.525173 -0.822986 -0.216533 + 0.248177 2.23837 -3.20173 -0.289099 -0.909547 -0.298572 + 0.19127 2.24886 -3.2109 0.0385587 -0.964608 -0.260852 + 0.129042 2.23586 -3.21559 0.215521 -0.949493 -0.228067 + -0.924635 2.00506 -0.519026 0.958068 -0.105458 0.266429 + -0.920037 1.95183 -0.55663 0.95512 -0.151033 0.254824 + -0.914713 1.86018 -0.745692 0.313962 -0.941078 -0.125697 + -1.37295 1.58577 0.661806 0.426351 -0.136895 -0.894139 + -0.678992 1.83517 -2.44137 -0.769858 0.630129 -0.101274 + -0.661911 1.8537 -2.45587 -0.545686 0.791819 0.274315 + -0.625186 1.8998 -2.49551 -0.346166 0.754879 0.557069 + -0.693494 1.82274 -2.41123 -0.760057 0.643401 -0.0913747 + -0.639392 1.87276 -2.42967 -0.65124 0.758831 0.00788446 + -0.621012 1.88748 -2.46078 -0.656241 0.753659 -0.0366962 + -0.643531 1.86852 -2.48694 -0.614522 0.787777 -0.042064 + -0.618742 1.88277 -2.53462 -0.757163 0.650004 -0.0647919 + -0.710576 1.80419 -2.39672 -0.774003 0.622518 -0.115717 + -0.608264 1.9006 -2.4921 -0.807943 0.585964 -0.0622418 + -0.605994 1.89588 -2.56593 -0.923488 0.373686 -0.0867705 + -0.592266 1.91999 -2.61288 -0.936872 0.3344 -0.102214 + -0.221581 1.99605 -3.06703 -0.0743072 0.98154 0.176233 + -0.267675 2.00019 -3.07539 0.000131986 0.89665 0.44274 + -0.161271 1.99295 -2.99625 -0.215221 0.976479 0.0129731 + -0.136983 2.00247 -2.98235 -0.170746 0.951133 -0.257277 + -0.128457 1.99899 -2.99252 -8.67722e-005 0.998062 -0.062219 + -0.108668 1.98654 -2.98615 0.319866 0.781959 0.535001 + -0.199855 1.98061 -2.98869 -0.204715 0.977897 -0.0425444 + -0.175566 1.99014 -2.97479 -0.287902 0.946501 -0.145769 + -0.268179 1.99335 -3.07676 -0.237126 0.87706 0.417777 + -0.293134 1.98927 -3.07549 0.0324754 0.819348 0.572376 + -0.319848 1.99731 -3.11521 0.0382435 0.990886 0.12916 + -0.31628 1.99369 -3.07773 0.175231 0.978838 0.105689 + -0.325906 1.99664 -3.08165 0.2675 0.96119 0.067504 + -0.320655 1.99868 -2.96098 0.220556 0.965805 0.136293 + -0.295713 1.99981 -2.96814 -0.243513 0.969871 -0.00724026 + -0.284575 2.00426 -2.96885 -0.371288 0.928509 -0.00411823 + -0.328944 1.99242 -2.93294 0.701206 0.624414 0.344119 + -1.15152 1.65076 -1.79137 0.293997 0.955644 -0.0176318 + -1.1428 1.64929 -1.72542 0.397442 0.917063 -0.0321691 + -1.13874 1.64637 -1.84257 0.271888 0.962219 -0.0145619 + 0.012141 2.04154 -3.09621 -6.94118e-005 -0.784969 -0.619535 + -0.012102 2.04153 -3.0962 0.0120096 -0.766179 -0.642514 + -0.021961 2.02879 -3.08313 -0.371428 -0.74644 -0.552149 + 1.02369 1.81801 0.518748 -0.11541 -0.573078 -0.811334 + 0.972324 1.71963 0.595543 -0.115414 -0.573076 -0.811334 + 0.080404 2.00707 -3.02371 -0.117919 0.832655 0.541092 + 0.082735 1.99305 -3.00163 -0.117919 0.832655 0.541093 + 0.108633 1.98662 -2.9861 -0.117919 0.832655 0.541092 + 0.00729 3.0019 -1.86921 0.575951 0.709312 -0.406396 + -0.00729 3.0019 -1.86921 -0.575837 0.709395 -0.406412 + -0.00861 2.95866 -1.66912 -0.653304 0.698657 0.291672 + 0.016514 2.25648 -0.879903 0 0.48573 0.874109 + -1.02369 1.81801 0.51875 0.115235 -0.573168 -0.811295 + -0.972324 1.71963 0.59555 0.115273 -0.573153 -0.8113 + -1.07094 1.86141 0.481375 0.115234 -0.573169 -0.811294 + -0.082769 1.99305 -3.00163 0.117371 0.831776 0.542561 + -0.080403 2.00708 -3.02372 0.118004 0.832569 0.541206 + -0.108668 1.98654 -2.98615 0.116522 0.83071 0.544374 + 2.62735 2.77706 -0.803569 0.799797 0.60024 0.0060576 + 2.67427 2.71354 -0.70516 0.83897 0.541101 0.0577904 + 2.69296 2.68907 -0.747364 0.88912 0.457413 -0.015448 + 2.76006 2.54148 -0.595733 0.936886 0.349556 0.00744066 + 2.66066 2.74987 -0.83028 0.827452 0.561381 0.0132091 + 2.62735 2.77706 -0.803569 0.686197 0.716294 0.126717 + 2.59755 2.8118 -0.900746 0.17471 0.918879 0.353748 + 2.74137 2.56587 -0.553589 0.880466 0.4571 0.125856 + 2.79322 2.409 -0.417882 0.938195 0.337548 0.0764976 + 2.62735 2.77706 -0.803569 -0.747519 0.518851 0.41474 + -0.534839 1.92882 -2.85178 -0.519846 0.852994 0.0464883 + -0.52042 1.93869 -2.87167 -0.428662 0.900362 0.0748143 + -0.508552 1.94894 -2.92703 -0.0961616 0.987912 0.121582 + -0.484424 1.94554 -2.89294 -0.105183 0.980917 0.16352 + -0.517922 1.95242 -2.95826 -0.130694 0.978753 0.157993 + -0.49606 1.95866 -2.97745 -0.0723008 0.993601 0.0867757 + -0.517137 1.95856 -3.00009 -0.092774 0.992281 0.0822934 + -0.483244 1.9587 -2.99094 -0.004039 0.999992 -0.000346849 + 0.9621 1.92007 -2.69142 -0.233448 -0.918965 -0.317814 + 0.941467 1.92742 -2.70595 -0.11974 -0.936938 -0.328343 + 0.961467 1.93616 -2.75449 -0.36455 -0.904699 -0.220507 + 0.923743 1.94387 -2.74325 -0.0220769 -0.935402 -0.352896 + 0.943743 1.95252 -2.79183 -0.300675 -0.911713 -0.279954 + 0.892877 1.92997 -2.73397 0.370485 -0.850968 -0.372282 + 0.819883 1.89681 -2.75453 0.339735 -0.837637 -0.42772 + 0.860398 1.97181 -2.83144 0.276514 -0.74731 -0.604208 + 0.83271 2.03751 -2.89384 0.202295 -0.628225 -0.751272 + 0.839834 1.97284 -2.84323 0.357996 -0.639183 -0.680649 + 0.581134 3.8813 -1.91798 0.593829 0.653635 -0.469179 + 0.637317 3.86293 -1.87275 0.717414 0.661076 -0.219764 + 0.664806 3.81544 -1.79851 0.736779 0.566971 0.368375 + 0.733266 3.74195 -1.81821 0.662141 0.655561 0.363056 + 0.518448 3.97269 -1.86747 0.677603 0.623281 -0.390351 + 0.574631 3.9544 -1.82219 0.776251 0.625737 -0.0767332 + 0.595367 3.88153 -1.76637 0.757146 0.462753 0.461075 + 0.657801 3.71537 -1.71277 0.642688 0.640464 0.420427 + 0.732856 3.66747 -1.731 0.590283 0.699904 0.40212 + 0.513553 4.02222 -1.77126 0.883755 0.445905 0.141934 + 0.534289 3.94934 -1.71543 0.903596 0.288934 0.316279 + 0.588362 3.78145 -1.68063 0.752881 0.555775 0.35254 + 0.7262 3.6026 -1.49185 0.604674 0.781074 0.155863 + 0.434 4.21608 -1.68223 0.744553 0.515752 -0.423841 + 0.484016 4.13257 -1.67439 0.893866 0.367382 -0.25697 + 0.508511 4.08163 -1.62556 0.994108 0.10708 0.01682 + 0.509841 3.86933 -1.64343 0.904911 0.340212 0.25572 + 0.417436 4.27618 -1.63193 0.692139 0.535711 -0.483692 + 0.476256 4.31372 -1.51495 0.859956 0.393163 -0.325421 + 0.500752 4.26279 -1.46613 0.915907 0.192544 -0.352194 + 0.484063 4.0017 -1.55352 0.998355 0.0513136 -0.0255802 + 0.599219 3.72037 -1.38404 0.856827 0.512155 -0.0595347 + 0.388452 4.3741 -1.57972 0.742546 0.461111 -0.4858 + 0.447272 4.41163 -1.46274 0.705612 0.344537 -0.619197 + 0.477044 4.4763 -1.41355 0.689446 0.136094 -0.711437 + 0.528419 4.40693 -1.35799 0.816176 0.0886979 -0.570954 + 0.534365 4.21435 -1.42024 0.910352 0.0809521 -0.40584 + 0.391724 4.57063 -1.45214 0.545024 0.101825 -0.832214 + 0.447602 4.6426 -1.43079 0.483485 -0.0728453 -0.872316 + 0.518036 4.55291 -1.36864 0.644902 -0.0761025 -0.760467 + 0.56941 4.48354 -1.31309 0.840042 -0.116021 -0.529971 + 0.562032 4.35841 -1.31215 0.926941 0.0424404 -0.372798 + 0.497061 4.70962 -1.41126 0.424653 -0.195474 -0.884002 + 0.567495 4.62002 -1.34907 0.599758 -0.258698 -0.757209 + 0.605012 4.56017 -1.27502 0.797508 -0.319706 -0.511634 + 0.583846 4.43159 -1.2419 0.933751 -0.130155 -0.333419 + 0.552582 4.76321 -1.40448 0.392602 -0.260636 -0.882005 + 0.61529 4.69129 -1.34532 0.53872 -0.360494 -0.761462 + 0.652807 4.63153 -1.27122 0.769746 -0.459985 -0.442611 + 0.619448 4.5083 -1.20378 0.909816 -0.246648 -0.333765 + 0.649418 4.2149 -1.00639 0.974289 0.00778448 -0.225168 + 0.620436 4.83545 -1.39461 0.394019 -0.216182 -0.893317 + 0.683144 4.76353 -1.33545 0.572904 -0.397392 -0.716841 + 0.707743 4.71343 -1.26267 0.770551 -0.515583 -0.374733 + 0.650159 4.59414 -1.17185 0.869613 -0.39027 -0.302428 + 0.575173 4.91974 -1.4214 0.33075 -0.0745998 -0.940765 + 0.739039 4.91135 -1.36187 0.383517 -0.242294 -0.891183 + 0.753893 4.85831 -1.3304 0.533711 -0.444865 -0.719199 + 0.778492 4.80821 -1.25762 0.637733 -0.6082 -0.47264 + 0.705095 4.67604 -1.1633 0.749525 -0.551004 -0.366888 + 0.693776 4.99564 -1.38866 0.308646 0.0244211 -0.950863 + 0.834013 4.97092 -1.34045 0.382718 -0.164344 -0.90913 + 0.848867 4.91788 -1.30899 0.410099 -0.50902 -0.756781 + 0.858119 4.86914 -1.24797 0.445101 -0.725131 -0.525425 + 0.778795 4.75395 -1.16045 0.616234 -0.640368 -0.458459 + 0.643568 5.10455 -1.3843 0.265049 0.210269 -0.941029 + 0.758672 5.15924 -1.34083 0.279265 0.219755 -0.934729 + 0.808881 5.05033 -1.34519 0.318184 0.116385 -0.940858 + 0.922553 4.99578 -1.30592 0.245997 -0.0351257 -0.968634 + 0.648566 5.23973 -1.34764 0.185371 0.335003 -0.923802 + 0.790913 5.27267 -1.2991 0.268804 0.295902 -0.916617 + 0.874567 5.17472 -1.29805 0.283764 0.225064 -0.932107 + 0.897421 5.07519 -1.31066 0.288618 0.118343 -0.950102 + 0.729833 5.37574 -1.27601 0.174806 0.45826 -0.871459 + 0.87218 5.40876 -1.22741 0.248098 0.450374 -0.857678 + 1.019 5.38393 -1.18621 0.313164 0.421292 -0.851141 + 0.906808 5.28823 -1.25626 0.288041 0.299199 -0.909677 + 1.04436 5.15892 -1.25768 0.253852 0.263659 -0.930615 + 0.62515 5.50066 -1.20399 0.0408389 0.668229 -0.742834 + 0.76991 5.52379 -1.16626 0.124177 0.654321 -0.745952 + 0.916426 5.52384 -1.13374 0.232846 0.62923 -0.74152 + 1.06325 5.49902 -1.09254 0.328853 0.582912 -0.743014 + 1.17762 5.33694 -1.14963 0.366026 0.39186 -0.84408 + 0.61708 5.6261 -1.06225 0.000841583 0.718679 -0.695341 + 0.763906 5.64422 -1.03944 0.0901012 0.712984 -0.695367 + 0.910422 5.64417 -1.00696 0.181054 0.696969 -0.693869 + 1.05435 5.62891 -0.977733 0.293578 0.657106 -0.69428 + 0.48032 5.7741 -0.923194 0.0257597 0.677039 -0.735496 + 0.621965 5.79243 -0.899559 0.032651 0.684147 -0.728613 + 0.768791 5.81047 -0.876793 0.0821737 0.681606 -0.72709 + 0.912049 5.80252 -0.858229 0.174186 0.667657 -0.723805 + 0.498004 5.99299 -0.726127 0.0341043 0.667242 -0.74406 + 0.639649 6.01133 -0.70249 0.0485558 0.668402 -0.742213 + 0.784456 6.01127 -0.691392 0.0933853 0.669114 -0.737269 + 0.927715 6.00332 -0.672828 0.178047 0.656553 -0.732965 + 0.354184 6.1405 -0.599632 0.0420383 0.663685 -0.74683 + 0.498102 6.14672 -0.588201 0.037142 0.678084 -0.734045 + 0.641316 6.14611 -0.579735 0.0490339 0.678255 -0.733189 + 0.786124 6.14596 -0.568686 0.0892531 0.67008 -0.736903 + 0.347783 6.21394 -0.536426 0.0534637 0.700327 -0.711817 + 0.486205 6.20677 -0.532 0.0466256 0.712976 -0.699636 + 0.62942 6.20606 -0.523584 0.0430745 0.720728 -0.691878 + 0.768288 6.20634 -0.515467 0.0787484 0.717985 -0.69159 + 0.207617 6.2185 -0.54092 0.0496514 0.694268 -0.718002 + 0.205578 6.29899 -0.452748 0.0606583 0.765246 -0.640874 + 0.338572 6.28741 -0.454885 0.0592936 0.768014 -0.637682 + 0.476994 6.28015 -0.4505 0.055858 0.771129 -0.634224 + 0.613773 6.2732 -0.447271 0.0478942 0.776335 -0.628499 + 0.069681 6.23174 -0.539659 0.0300049 0.689998 -0.723189 + 0.067642 6.31215 -0.451527 0.0295687 0.773894 -0.632624 + 0.199352 6.38522 -0.341687 0.0541961 0.80811 -0.586533 + 0.332346 6.37373 -0.343783 0.0659207 0.806264 -0.587871 + 0.4634 6.355 -0.353554 0.0675952 0.809977 -0.582553 + -0.069687 6.1512 -0.605952 -0.0184895 0.648016 -0.761403 + -0.069687 6.23174 -0.539659 -0.0275494 0.691679 -0.721679 + -0.067641 6.31215 -0.451527 -0.0340309 0.776502 -0.629195 + 0.067642 6.39267 -0.339994 0.0191721 0.815805 -0.578009 + -0.207623 6.21858 -0.540869 -0.0528744 0.696325 -0.715776 + -0.205577 6.29899 -0.452748 -0.0572296 0.767845 -0.638074 + -0.067641 6.39267 -0.339994 -0.0230563 0.813379 -0.581277 + 0.072926 6.49919 -0.186687 0.0189729 0.826812 -0.562158 + -0.354189 6.14059 -0.599582 -0.0381478 0.660755 -0.749631 + -0.347788 6.21403 -0.536376 -0.04948 0.702982 -0.709484 + -0.33857 6.28741 -0.454885 -0.0583796 0.767573 -0.638297 + -0.199351 6.38522 -0.341687 -0.0496631 0.80558 -0.590403 + -0.498107 6.14672 -0.588201 -0.042035 0.675381 -0.73627 + -0.48621 6.20677 -0.532 -0.0520818 0.716616 -0.695521 + -0.476992 6.28015 -0.450509 -0.056634 0.770558 -0.634849 + -0.332344 6.37373 -0.343783 -0.0651617 0.806701 -0.587356 + -0.639652 6.01141 -0.702441 -0.046504 0.670334 -0.740601 + -0.641313 6.14602 -0.579793 -0.051567 0.680083 -0.731319 + -0.629416 6.20606 -0.523584 -0.0455203 0.719419 -0.693083 + -0.613771 6.2732 -0.447271 -0.0449501 0.774256 -0.631274 + -0.463398 6.35501 -0.353563 -0.0688198 0.810648 -0.581475 + -0.78446 6.01127 -0.691392 -0.0951146 0.67047 -0.735815 + -0.78612 6.14596 -0.568686 -0.0869705 0.671351 -0.736019 + -0.768285 6.20634 -0.515467 -0.0760132 0.715995 -0.693954 + -0.75264 6.27348 -0.439153 -0.0660012 0.77985 -0.622477 + -0.600177 6.34797 -0.350374 -0.0520031 0.820044 -0.569933 + -0.91205 5.80252 -0.858229 -0.173436 0.667096 -0.724502 + -0.927716 6.00332 -0.672828 -0.177348 0.657377 -0.732395 + -0.927557 6.13356 -0.558203 -0.175299 0.666431 -0.724665 + -0.909722 6.19394 -0.504984 -0.12974 0.699057 -0.703197 + -0.910415 5.64417 -1.00696 -0.192555 0.687661 -0.700032 + -1.05597 5.78718 -0.829051 -0.264599 0.648568 -0.713686 + -1.06648 5.96789 -0.661263 -0.265122 0.642501 -0.718959 + -1.06632 6.09813 -0.546639 -0.230281 0.603317 -0.763531 + -1.06324 5.49902 -1.09254 -0.318562 0.59338 -0.739201 + -1.05434 5.62891 -0.977733 -0.283958 0.650584 -0.704349 + -1.19187 5.58415 -0.948404 -0.379817 0.614733 -0.691262 + -1.1931 5.74158 -0.811476 -0.353448 0.619006 -0.70136 + -1.2036 5.92221 -0.643737 -0.327815 0.615515 -0.716714 + -1.019 5.38393 -1.18621 -0.31372 0.421492 -0.850837 + -1.17762 5.33694 -1.14963 -0.351813 0.42896 -0.831998 + -1.20078 5.45425 -1.0632 -0.406586 0.560646 -0.721363 + -1.06543 5.24125 -1.21968 -0.290697 0.328609 -0.898617 + -1.33486 5.16618 -1.16585 -0.353213 0.408556 -0.841619 + -1.30942 5.2666 -1.11779 -0.431476 0.477366 -0.765474 + -1.33258 5.38391 -1.03137 -0.454259 0.526779 -0.718438 + -1.31379 5.08385 -1.20386 -0.276849 0.362378 -0.889964 + -1.55248 4.99254 -1.1583 -0.431303 0.422065 -0.797395 + -1.53142 5.08193 -1.11033 -0.467322 0.488004 -0.737199 + -1.50598 5.18236 -1.06228 -0.480373 0.496365 -0.723092 + -1.28999 5.02564 -1.23883 -0.217344 0.322205 -0.921382 + -1.52868 4.93441 -1.19322 -0.356476 0.416323 -0.836421 + -1.76193 4.87261 -1.09058 -0.51979 0.552509 -0.651577 + -1.74087 4.96192 -1.04267 -0.544982 0.510329 -0.665251 + -1.07212 4.99461 -1.28169 -0.156104 0.0606465 -0.985877 + -1.29489 4.96095 -1.25018 -0.151152 0.128605 -0.980109 + -1.49436 4.89367 -1.22724 -0.235819 0.258652 -0.936743 + -1.73302 4.82137 -1.17302 -0.448347 0.531427 -0.718728 + -1.08456 4.94607 -1.27621 -0.0841637 -0.491281 -0.866925 + -1.27583 4.91587 -1.2563 -0.0111876 -0.419872 -0.907514 + -1.4753 4.84858 -1.23336 0.102244 -0.476335 -0.873299 + -1.6987 4.78061 -1.20703 -0.266966 0.219296 -0.938423 + -1.07847 4.90973 -1.22087 -0.035921 -0.896767 -0.441043 + -1.26974 4.87952 -1.20094 0.160129 -0.92125 -0.354482 + -1.46561 4.82287 -1.16843 0.321027 -0.910417 -0.260928 + -1.66633 4.75043 -1.21235 0.169585 -0.465591 -0.8686 + -1.08079 4.87115 -1.11625 -0.115012 -0.866484 -0.485775 + -1.24336 4.86956 -1.07869 0.0752373 -0.903988 -0.420886 + -1.43923 4.81291 -1.04616 0.225906 -0.878774 -0.420384 + -1.68114 4.71987 -1.00823 0.432985 -0.831728 -0.347496 + -1.65664 4.72463 -1.14746 0.500267 -0.849623 -0.166955 + -0.928875 4.63847 -0.852437 -0.252961 -0.76193 -0.596215 + -1.02178 4.6337 -0.842966 -0.0532569 -0.737417 -0.673335 + -1.18436 4.63201 -0.805442 -0.0176271 -0.674623 -0.737952 + -1.34289 4.64202 -0.837188 0.109292 -0.694404 -0.711237 + -0.867609 4.24338 -0.363923 -0.527234 -0.622152 -0.578749 + -0.960515 4.23869 -0.354402 0.480363 -0.588512 -0.650312 + -1.03739 4.11413 -0.419655 0.520031 -0.441357 -0.731281 + -1.19592 4.12414 -0.451392 -0.471933 -0.63234 -0.61435 + -0.8402 3.9418 -0.182369 -0.774752 0.224842 -0.590936 + -0.880818 4.00672 -0.136817 -0.0899295 -0.220847 -0.971153 + -0.95769 3.88224 -0.202011 0.572473 0.197903 -0.795682 + -0.966468 3.81265 -0.233661 0.193319 -0.0127319 -0.981053 + -1.12487 3.77236 -0.232082 0.474255 0.543726 -0.692419 + -1.05757 3.82089 -0.220541 -0.354538 -0.0250528 -0.934706 + -1.2339 4.17485 -0.409218 -0.329913 -0.650624 -0.683992 + -1.5848 4.54907 -0.799193 0.281534 -0.620336 -0.732067 + -1.83478 4.60951 -0.994476 0.677948 -0.639851 -0.361908 + -1.34224 3.96063 -0.422972 0.718154 0.155635 -0.678257 + -1.09555 3.87159 -0.178358 -0.221569 -0.200593 -0.95429 + -1.31292 4.05995 -0.369198 0.585482 -0.196147 -0.786598 + -1.66383 4.43409 -0.759232 0.500828 -0.395888 -0.769704 + -1.74769 4.29554 -0.775666 0.660362 -0.0850492 -0.746115 + -1.98545 4.35792 -1.0053 0.807632 -0.302662 -0.50609 + -1.91865 4.47089 -1.01097 0.784101 -0.45186 -0.42545 + -1.92485 4.48456 -1.11024 0.792089 -0.559264 -0.24458 + -1.81028 4.61427 -1.13372 0.638432 -0.748334 -0.180001 + -2.01006 4.25745 -1.02949 0.748011 -0.0552651 -0.661381 + -2.03362 4.27968 -1.06779 0.670132 -0.217338 -0.709709 + -1.99166 4.3715 -1.10463 0.608921 -0.535458 -0.585236 + -2.0653 4.30684 -1.08844 -0.160825 -0.214082 -0.963485 + -2.02333 4.39866 -1.12527 -0.225768 -0.199495 -0.953536 + -1.94069 4.50266 -1.1614 0.113139 -0.296302 -0.948369 + -1.82612 4.63246 -1.18482 0.181481 -0.432468 -0.883196 + -2.1201 4.34508 -1.06087 -0.677014 0.0410826 -0.734823 + -2.04885 4.45612 -1.10179 -0.623093 0.177164 -0.761819 + -1.96621 4.56012 -1.13792 -0.54574 0.227644 -0.80644 + -1.8585 4.66265 -1.17951 -0.402514 0.16736 -0.899985 + -2.15183 4.38913 -1.01236 -0.830673 0.204592 -0.517807 + -2.08058 4.50017 -1.05329 -0.725911 0.294137 -0.621721 + -1.99519 4.61324 -1.08894 -0.664518 0.37643 -0.645536 + -1.88748 4.71569 -1.13058 -0.591656 0.471745 -0.653759 + -2.17726 4.38166 -0.952832 -0.959257 0.218638 -0.178948 + -2.11876 4.55803 -0.967101 -0.858982 0.350757 -0.372987 + -2.03337 4.6711 -1.00275 -0.724799 0.464615 -0.508723 + -1.91638 4.76694 -1.04815 -0.620175 0.533531 -0.57509 + -2.15185 4.49786 -0.87628 -0.93645 0.308829 -0.166392 + -2.09336 4.67413 -0.890592 -0.892186 0.442235 0.091826 + -1.9959 4.7827 -0.94005 -0.723627 0.539447 -0.430537 + -1.87892 4.87863 -0.985402 -0.620665 0.541783 -0.566786 + -1.63409 5.12079 -1.00802 -0.551177 0.5135 -0.657664 + -2.24854 4.17171 -0.91737 -0.934021 0.246431 -0.258603 + -2.19335 4.39952 -0.832166 -0.968594 0.247948 -0.018657 + -2.08545 4.75607 -0.780523 -0.853189 0.384398 -0.352571 + -1.98499 4.84801 -0.845362 -0.766497 0.502366 -0.40014 + -1.88754 4.95658 -0.89482 -0.705758 0.534175 -0.465363 + -2.24864 4.13654 -0.878263 -0.932806 0.0776146 0.351922 + -2.19346 4.36427 -0.7931 -0.967214 0.137153 0.213744 + -2.12695 4.65774 -0.736409 -0.962108 0.243155 -0.123387 + -2.03206 4.93082 -0.7006 -0.788516 0.419337 -0.449888 + -2.28372 3.89467 -0.903336 -0.582355 -0.169603 0.795045 + -2.22706 4.10422 -0.851082 -0.694429 -0.0964978 0.713061 + -2.19937 4.274 -0.786762 -0.831122 -0.0775592 0.550654 + -2.1484 4.52392 -0.679827 -0.971796 0.0667655 0.226176 + -2.19517 4.08157 -0.830255 -0.56557 -0.223907 0.793723 + -2.16748 4.25127 -0.765985 -0.722121 -0.198765 0.662596 + -2.15431 4.43366 -0.67349 -0.871363 -0.0148259 0.490415 + -2.11382 4.41735 -0.623251 -0.951791 -0.149522 0.267838 + -2.13064 4.7121 -0.564763 -0.976898 0.085832 -0.19571 + -2.13402 4.10459 -0.790129 -0.498001 -0.337411 0.798842 + -2.12698 4.23505 -0.715696 -0.743746 -0.32304 0.585223 + -2.08281 4.28208 -0.563746 -0.936643 -0.345893 0.0553052 + -2.13134 4.47389 -0.427379 -0.965133 -0.160885 -0.206481 + -2.16234 4.60916 -0.486875 -0.982702 -0.0955547 -0.158638 + -2.14463 4.35754 -0.352645 -0.933539 -0.21049 -0.29017 + -2.25756 4.75509 -0.239223 -0.922096 -0.0294762 -0.385837 + -2.2028 4.84339 -0.336761 -0.92642 0.0518802 -0.372901 + -2.17109 4.94632 -0.414649 -0.899402 0.188308 -0.394481 + -2.13786 4.23703 -0.268518 -0.871772 -0.208045 -0.443545 + -2.27085 4.63874 -0.164498 -0.892174 -0.0767991 -0.445116 + -2.30296 4.96977 -0.093867 -0.901205 0.134963 -0.411844 + -2.2482 5.05807 -0.191405 -0.883957 0.209873 -0.417819 + -2.17387 5.1368 -0.282967 -0.840107 0.298649 -0.452801 + -2.31137 4.52042 -0.093169 -0.845276 -0.0774828 -0.528682 + -2.40095 4.75493 0.063448 -0.890638 0.0510447 -0.451839 + -2.36043 4.87316 -0.00793 -0.897243 0.0883171 -0.432614 + -2.32204 5.14603 0.030249 -0.881622 0.2533 -0.398223 + -2.24948 5.2288 -0.055713 -0.856936 0.306751 -0.414204 + -2.44768 4.64596 0.139603 -0.897404 0.0206002 -0.440729 + -2.43896 4.95463 0.199769 -0.906639 0.163528 -0.388926 + -2.37951 5.0495 0.116236 -0.897482 0.199988 -0.393103 + -2.31038 5.30304 0.127906 -0.862403 0.329154 -0.384602 + -2.43881 5.12605 0.296857 -0.893345 0.245788 -0.376195 + -2.37936 5.22093 0.213316 -0.885344 0.291531 -0.362181 + -2.2768 5.44834 0.191635 -0.848176 0.401769 -0.345224 + -2.20301 5.52251 0.10737 -0.83241 0.421618 -0.359628 + -2.23783 5.38581 0.041944 -0.844093 0.360321 -0.397084 + -2.50059 5.03891 0.382189 -0.895872 0.22087 -0.385524 + -2.41505 5.28978 0.362463 -0.874239 0.343795 -0.342798 + -2.34577 5.36623 0.277045 -0.861993 0.378289 -0.33744 + -2.23743 5.58643 0.280245 -0.83144 0.467443 -0.300339 + -2.47683 5.20264 0.447795 -0.89023 0.318772 -0.325383 + -2.37552 5.44264 0.454495 -0.857053 0.435546 -0.275244 + -2.30624 5.5191 0.369077 -0.841963 0.452132 -0.294407 + -2.5383 5.125 0.537667 -0.898986 0.300788 -0.318358 + -2.49893 5.29793 0.637158 -0.882619 0.401049 -0.245242 + -2.43747 5.37556 0.547294 -0.871118 0.417913 -0.257881 + -2.3209 5.60374 0.579269 -0.829943 0.516537 -0.210675 + -2.25917 5.66193 0.483885 -0.819998 0.52753 -0.222068 + -2.55605 5.22749 0.730347 -0.895686 0.383347 -0.22537 + -2.4383 5.48096 0.772532 -0.857551 0.481392 -0.181298 + -2.38285 5.53666 0.67206 -0.84802 0.490176 -0.201469 + -2.3171 5.68751 0.806972 -0.804549 0.570822 -0.163898 + -2.24643 5.76781 0.768289 -0.786241 0.59681 -0.160135 + -2.49541 5.41053 0.865721 -0.861749 0.475012 -0.178189 + -2.39597 5.61798 1.0342 -0.827314 0.551849 -0.104947 + -2.37255 5.63181 0.907443 -0.837499 0.532455 -0.122826 + -2.23624 5.85057 1.06814 -0.775175 0.626179 -0.0836794 + -2.16557 5.93087 1.02946 -0.734695 0.674446 -0.073111 + -2.55198 5.3488 0.961835 -0.877918 0.450501 -0.1622 + -2.45255 5.55625 1.13032 -0.830441 0.549581 -0.0912589 + -2.32895 5.74736 1.34111 -0.797503 0.603314 0.00140142 + -2.25966 5.83682 1.19496 -0.775072 0.630476 -0.0419944 + -2.38425 5.67106 1.43747 -0.790769 0.612015 -0.0110311 + -2.19092 5.90505 1.48339 -0.732698 0.676184 0.0769977 + -2.12164 5.99442 1.33719 -0.699589 0.714367 0.0159671 + -2.02499 6.07968 1.26831 -0.65105 0.759028 -0.00317655 + -2.22627 5.84969 1.68367 -0.717874 0.694061 0.0541761 + -2.18728 5.894 1.60172 -0.71018 0.701462 0.0599579 + -1.92557 6.13361 1.57631 -0.622916 0.775782 0.10069 + -1.82892 6.21878 1.50738 -0.580117 0.808073 0.10238 + -2.30466 5.76602 1.73179 -0.76823 0.633415 0.0927775 + -1.98527 6.0613 1.81496 -0.628439 0.761048 0.160846 + -1.92192 6.12256 1.69465 -0.601566 0.793809 0.0893619 + -1.58307 6.34482 1.72328 -0.495569 0.857439 0.1386 + -2.06366 5.97762 1.86309 -0.680883 0.711328 0.174388 + -1.72021 6.22202 1.95958 -0.531449 0.825284 0.190967 + -1.65687 6.28328 1.83927 -0.509354 0.848531 0.143367 + -2.28482 5.73189 1.88371 -0.745343 0.646386 0.163246 + -2.03019 5.98832 1.94595 -0.647969 0.733979 0.203495 + -1.76867 6.15769 2.07459 -0.559481 0.786474 0.26161 + -1.42144 6.34167 2.14354 -0.438062 0.866121 0.2407 + -2.06972 5.91293 2.05774 -0.665501 0.707765 0.237017 + -1.8082 6.0823 2.18638 -0.569094 0.765983 0.299002 + -1.50251 6.21269 2.36954 -0.489143 0.801031 0.345092 + -1.4699 6.27735 2.25855 -0.475747 0.826127 0.301957 + -2.104 5.84604 2.1598 -0.670562 0.698682 0.24938 + -1.87858 6.009 2.24893 -0.590643 0.761647 0.266524 + -2.11294 5.7944 2.27003 -0.666562 0.689565 0.283187 + -1.88752 5.95737 2.35916 -0.585268 0.739929 0.331613 + -1.57288 6.13948 2.43215 -0.520451 0.781261 0.34462 + -2.1445 5.69545 2.42503 -0.660573 0.689119 0.297924 + -1.84999 5.92615 2.48143 -0.564882 0.743964 0.356968 + -1.53535 6.10826 2.55442 -0.489147 0.785305 0.379514 + -1.23443 6.24429 2.6212 -0.395735 0.819675 0.414158 + -1.25699 6.29017 2.51054 -0.416464 0.818024 0.396729 + -2.18262 5.59851 2.57112 -0.670684 0.672163 0.313656 + -1.88811 5.8293 2.62758 -0.573635 0.734894 0.361765 + -1.53756 6.03442 2.69831 -0.487196 0.774542 0.403391 + -1.23664 6.17045 2.76509 -0.391 0.814482 0.428648 + -2.17244 5.50219 2.78196 -0.661462 0.658477 0.358993 + -1.8998 5.71355 2.82708 -0.565085 0.722115 0.399034 + -1.54926 5.91866 2.89781 -0.48609 0.763833 0.424589 + -1.25477 6.06039 2.95013 -0.39671 0.800892 0.448546 + -0.979822 6.24763 2.81382 -0.315632 0.83308 0.454263 + -2.158 5.36113 3.04749 -0.647779 0.655795 0.387705 + -1.88536 5.57239 3.09256 -0.56264 0.714356 0.416092 + -1.57754 5.7544 3.15491 -0.487216 0.755791 0.437492 + -1.28304 5.89613 3.20723 -0.407056 0.786678 0.464158 + -2.38671 5.03469 3.1669 -0.701412 0.601414 0.382522 + -2.14678 5.24937 3.24905 -0.643943 0.63825 0.42187 + -1.88054 5.45252 3.30259 -0.56554 0.700051 0.435996 + -1.57272 5.63453 3.36494 -0.484241 0.75215 0.446968 + -1.28068 5.78732 3.39111 -0.396231 0.786872 0.473111 + -2.10228 5.16854 3.42585 -0.629775 0.641628 0.437833 + -1.83605 5.37169 3.47939 -0.553281 0.684531 0.474655 + -1.55979 5.56028 3.50194 -0.48047 0.73433 0.479487 + -1.26774 5.71298 3.52805 -0.377546 0.780172 0.498788 + -2.32378 4.85822 3.53916 -0.677951 0.600146 0.424509 + -2.06904 5.08721 3.59373 -0.612011 0.641167 0.462977 + -1.7827 5.29043 3.64674 -0.538486 0.68082 0.496504 + -1.50643 5.47902 3.66929 -0.45509 0.713418 0.532849 + -1.24504 5.61941 3.67913 -0.370039 0.752409 0.544933 + -2.30518 4.77869 3.6845 -0.666593 0.588671 0.457296 + -2.04024 5.00608 3.73765 -0.592851 0.634558 0.495846 + -1.7539 5.20939 3.79071 -0.517473 0.668737 0.533866 + -1.43854 5.35952 3.86526 -0.430359 0.696739 0.573887 + -1.17714 5.49992 3.8751 -0.369731 0.731528 0.572857 + -2.48365 4.46478 3.7772 -0.721899 0.478827 0.499586 + -2.26262 4.69396 3.83745 -0.647759 0.559229 0.517369 + -1.99768 4.92135 3.8906 -0.570842 0.618521 0.539973 + -1.71986 5.09801 3.95142 -0.496235 0.654934 0.569923 + -1.4045 5.24815 4.02597 -0.430143 0.683824 0.589374 + -2.41989 4.38871 3.93257 -0.703169 0.451393 0.549361 + -2.19885 4.61797 3.99287 -0.627162 0.539792 0.561509 + -1.94895 4.80519 4.0614 -0.555678 0.590378 0.585386 + -1.67113 4.98185 4.12221 -0.477449 0.632657 0.609744 + -1.36275 5.14531 4.16988 -0.418264 0.65903 0.625087 + -2.62707 4.1322 3.83826 -0.788709 0.331007 0.518047 + -2.57458 4.05159 3.96267 -0.773564 0.310175 0.552621 + -2.3674 4.3081 4.05697 -0.689013 0.416436 0.593163 + -2.14437 4.5084 4.14646 -0.613684 0.496887 0.613593 + -1.89447 4.69571 4.21503 -0.532072 0.557875 0.636926 + -2.77752 3.86569 3.72906 -0.872701 0.18169 0.453191 + -2.73728 3.79021 3.8274 -0.861302 0.154815 0.483932 + -2.53309 3.97831 4.05781 -0.761107 0.296734 0.576771 + -2.29879 4.2055 4.1993 -0.661744 0.378805 0.646994 + -2.07576 4.40579 4.28877 -0.598627 0.463738 0.653141 + -2.82858 3.53202 3.684 -0.914763 0.00252382 0.403983 + -2.78421 3.44796 3.7778 -0.893841 -0.0361337 0.446926 + -2.69578 3.71692 3.92254 -0.84096 0.116687 0.528366 + -2.64521 3.64027 4.0067 -0.825531 0.0542281 0.561746 + -2.53323 3.86313 4.1181 -0.786901 0.226733 0.573915 + -2.81782 3.17507 3.64045 -0.912748 -0.166902 0.372873 + -2.76579 3.06917 3.70128 -0.872649 -0.217023 0.437475 + -2.73363 3.37131 3.86196 -0.839471 -0.0999628 0.534131 + -2.78998 2.87553 3.49106 -0.903807 -0.252249 0.345691 + -2.73795 2.76963 3.5519 -0.907166 -0.258982 0.331629 + -2.68565 2.64337 3.59557 -0.885289 -0.272216 0.377043 + -2.71231 2.98091 3.75194 -0.841354 -0.23272 0.487816 + -2.68015 3.28305 3.91262 -0.813042 -0.150788 0.56234 + -2.7715 2.56331 3.31005 -0.890009 -0.276129 0.362818 + -2.71027 2.44319 3.36151 -0.895795 -0.28226 0.343338 + -2.65797 2.31693 3.40519 -0.890658 -0.303943 0.338153 + -2.59067 2.20433 3.46002 -0.871856 -0.328038 0.363673 + -2.62818 2.5354 3.64319 -0.868149 -0.287172 0.404783 + -2.69228 2.10032 3.12978 -0.866146 -0.332279 0.373338 + -2.61717 1.99095 3.18921 -0.858295 -0.354371 0.371147 + -2.54987 1.87835 3.24403 -0.848873 -0.373395 0.374153 + -2.58932 1.72227 2.99017 -0.846744 -0.385045 0.367103 + -2.5124 1.62377 3.06318 -0.838015 -0.396239 0.375133 + -2.46886 1.78873 3.32206 -0.832631 -0.399723 0.383337 + -2.53005 2.083 3.50337 -0.864435 -0.352253 0.358707 + -2.56756 2.41407 3.68654 -0.840207 -0.302682 0.449929 + -2.48791 1.4137 2.88484 -0.840462 -0.45627 0.292304 + -2.40648 1.33423 2.98427 -0.815559 -0.466775 0.34203 + -2.43139 1.53425 3.14124 -0.8157 -0.4135 0.404538 + -2.34569 1.46559 3.23756 -0.80594 -0.439092 0.397063 + -2.39338 1.69648 3.39225 -0.830078 -0.413424 0.374234 + -2.31754 1.1515 2.90997 -0.771437 -0.600781 0.209635 + -2.2371 1.09047 2.99829 -0.73199 -0.598334 0.325862 + -2.32078 1.26567 3.08063 -0.761775 -0.497766 0.414642 + -2.093 0.932672 2.9956 -0.727344 -0.645048 0.234272 + -2.01009 0.871012 3.0782 -0.706425 -0.601006 0.373839 + -2.1368 1.04701 3.10196 -0.692456 -0.55539 0.460485 + -2.22049 1.22221 3.1843 -0.720047 -0.535747 0.441031 + -1.86134 0.698281 3.07398 -0.655973 -0.645351 0.391435 + -1.92477 0.837049 3.16022 -0.611667 -0.544957 0.573485 + -2.05149 1.01305 3.18398 -0.659113 -0.566861 0.494205 + -2.12533 1.1769 3.28579 -0.671819 -0.578709 0.462337 + -2.26637 1.40325 3.33934 -0.772778 -0.487055 0.406929 + -1.7962 0.650262 3.09175 -0.63669 -0.606658 0.476016 + -1.85963 0.789029 3.178 -0.612233 -0.581127 0.536155 + -1.94244 0.986556 3.28547 -0.629705 -0.577808 0.519239 + -2.01628 1.1504 3.38728 -0.646243 -0.612695 0.454944 + -2.17121 1.35793 3.44083 -0.723357 -0.534965 0.43654 + -1.73412 0.564605 3.06711 -0.515192 -0.640653 0.569333 + -1.73363 0.618536 3.1267 -0.458439 -0.6538 0.601979 + -1.77198 0.749834 3.24148 -0.46805 -0.60495 0.644177 + -1.85479 0.947356 3.34897 -0.666573 -0.594576 0.449621 + -1.66348 0.541346 3.0962 -0.560467 -0.593837 0.577265 + -1.65978 0.59553 3.13895 -0.551915 -0.567521 0.610991 + -1.69813 0.726735 3.25369 -0.538474 -0.657094 0.527517 + -1.66356 0.494942 3.03757 -0.522959 -0.698496 0.488485 + -1.5765 0.47587 3.1152 -0.582342 -0.680957 0.444043 + -1.57356 0.529691 3.20318 -0.690582 -0.549312 0.470481 + -1.56985 0.583876 3.24593 -0.796085 -0.439406 0.416138 + -1.57678 0.433581 3.05125 -0.527025 -0.741342 0.415519 + -1.48361 0.423983 3.15228 -0.54046 -0.751175 0.378997 + -1.46315 0.457696 3.25048 -0.580016 -0.712209 0.395399 + -1.46021 0.511524 3.33845 -0.622179 -0.674229 0.39788 + -1.49536 0.600462 3.45061 -0.665155 -0.655132 0.358289 + -1.58563 0.400431 2.97007 -0.453371 -0.809549 0.372942 + -1.49245 0.390835 3.07109 -0.424568 -0.845336 0.324267 + -1.39311 0.423956 3.28332 -0.466359 -0.811614 0.35184 + -1.37265 0.457671 3.38152 -0.587014 -0.716386 0.377102 + -1.37396 0.50998 3.47732 -0.608254 -0.697137 0.379509 + -1.58803 0.369629 2.90282 -0.382283 -0.861703 0.333658 + -1.50742 0.365528 2.97092 -0.357958 -0.88623 0.294047 + -1.41527 0.367643 3.09466 -0.407665 -0.864922 0.29278 + -1.40031 0.392948 3.19483 -0.34258 -0.889776 0.301559 + -1.59505 0.345333 2.8163 -0.297495 -0.915784 0.269881 + -1.51444 0.341323 2.88444 -0.288884 -0.92649 0.241167 + -1.42643 0.338359 2.99638 -0.361807 -0.897124 0.253505 + -1.31135 0.370899 3.26322 -0.455682 -0.823591 0.337717 + -1.31732 0.41586 3.35094 -0.41413 -0.839218 0.352432 + -1.5995 0.32692 2.74539 -0.241215 -0.940917 0.237678 + -1.52447 0.322081 2.78258 -0.254475 -0.941457 0.221137 + -1.43646 0.319034 2.89445 -0.400886 -0.886323 0.231778 + -1.3225 0.341615 3.16494 -0.433311 -0.844193 0.315563 + -1.60492 0.308399 2.65827 -0.240552 -0.949548 0.201229 + -1.5299 0.303479 2.69539 -0.258209 -0.937699 0.232481 + -1.45863 0.292208 2.75412 -0.398208 -0.886978 0.233882 + -1.43366 0.302875 2.84704 -0.498565 -0.835232 0.231994 + -1.3337 0.312427 3.07849 -0.500614 -0.809059 0.30791 + -1.6041 0.296972 2.58606 -0.26783 -0.951418 0.15189 + -1.53775 0.278788 2.59336 -0.276041 -0.943865 0.181437 + -1.46648 0.267522 2.65207 -0.344302 -0.91691 0.201824 + -1.38725 0.279569 2.84861 -0.413782 -0.884556 0.215276 + -1.36228 0.290151 2.94148 -0.369347 -0.907823 0.198597 + -1.61688 0.289009 2.51586 -0.28857 -0.952577 0.096562 + -1.55053 0.27074 2.5231 -0.251109 -0.961151 0.114601 + -1.6108 0.282559 2.44383 -0.307914 -0.949251 0.064123 + -1.53395 0.261698 2.47116 -0.32043 -0.939161 0.123696 + -1.459 0.23882 2.50859 -0.318432 -0.933297 0.166009 + -1.44907 0.249449 2.58998 -0.316583 -0.935513 0.156813 + -1.38554 0.257779 2.75535 -0.382951 -0.903815 0.190962 + -1.35813 0.192676 2.42711 -0.366869 -0.91929 0.142524 + -1.36248 0.214593 2.51975 -0.360373 -0.915035 0.181227 + -1.35254 0.225228 2.60113 -0.355305 -0.92384 0.142402 + -1.36812 0.239711 2.69324 -0.353859 -0.926213 0.13005 + -1.35254 0.178855 2.33105 -0.375137 -0.915107 0.147824 + -1.22502 0.1292 2.42025 -0.503715 -0.855159 0.122368 + -1.24753 0.147325 2.49866 -0.491099 -0.863072 0.118023 + -1.25187 0.169242 2.5913 -0.529094 -0.8298 0.177456 + -1.26171 0.195051 2.6764 -0.478505 -0.865507 0.148093 + -1.22639 0.11164 2.32647 -0.382186 -0.920909 0.0765589 + -1.09364 0.061061 2.56068 -0.335105 -0.942169 -0.00473835 + -1.11615 0.079097 2.63903 -0.456969 -0.87659 0.150894 + -1.13842 0.10992 2.71005 -0.500592 -0.841312 0.203964 + -1.14825 0.135812 2.7952 -0.542457 -0.7889 0.28875 + -0.896145 0.022032 2.55048 -0.214804 -0.963145 -0.161897 + -0.952262 0.022123 2.61172 -0.203659 -0.978692 -0.0261792 + -0.983929 0.03359 2.68686 -0.249332 -0.949588 0.190041 + -1.00619 0.064412 2.75787 -0.283769 -0.918875 0.274125 + -0.803247 0.008962 2.48331 -0.158851 -0.978311 -0.132942 + -0.814194 0.000593 2.56841 -0.12055 -0.992694 -0.00509737 + -0.845861 0.012058 2.64355 -0.107171 -0.984322 0.14009 + -0.866441 0.031135 2.72791 -0.112306 -0.960205 0.255722 + -0.657184 0.01911 2.37374 -0.0147508 -0.976254 -0.216126 + -0.675869 -0.000111 2.45303 -0.0695588 -0.977366 -0.199795 + -0.686816 -0.008481 2.53812 -0.0908094 -0.994179 -0.0579866 + -0.703071 -0.008483 2.62033 -0.107308 -0.991085 0.078968 + -0.499512 0.022608 2.37428 0.0102038 -0.961159 -0.275806 + -0.518198 0.003392 2.45356 -0.0204655 -0.96135 -0.274569 + -0.539283 -0.019714 2.52918 -0.0416273 -0.990242 -0.132996 + -0.555538 -0.019623 2.61142 -0.0525226 -0.996237 0.0689479 + -0.331538 0.051209 2.27994 -0.100796 -0.937161 -0.334021 + -0.352717 0.023041 2.35593 -0.103715 -0.934538 -0.340415 + -0.367796 -0.000722 2.43029 -0.0973485 -0.946152 -0.308738 + -0.388881 -0.023827 2.5059 -0.056209 -0.982144 -0.179537 + -0.198736 0.042713 2.24145 -0.078837 -0.938607 -0.33586 + -0.21426 0.01562 2.31178 -0.0900101 -0.932855 -0.348827 + -0.229339 -0.00815 2.38615 -0.0575547 -0.96312 -0.262843 + -0.23537 -0.024098 2.46137 -0.00773696 -0.989474 -0.144503 + -0.091123 0.070783 2.16104 0.184411 -0.934218 -0.305335 + -0.102384 0.045062 2.23058 0.130922 -0.939753 -0.31579 + -0.117908 0.017966 2.30092 0.16783 -0.944094 -0.283758 + -0.127574 -0.000582 2.37404 0.191788 -0.961106 -0.198729 + -0.037665 0.080134 2.17804 0.337094 -0.864903 -0.371902 + -0.048927 0.054415 2.24759 0.230597 -0.932495 -0.277991 + -0.059922 0.03462 2.32127 0.240626 -0.944363 -0.224226 + -0.069588 0.016073 2.3944 0.216533 -0.959851 -0.178325 + -0.003058 0.11597 2.14477 0.163545 -0.956035 -0.243415 + -0.010834 0.082213 2.20244 0.3746 -0.851261 -0.367462 + -0.014994 0.056002 2.26444 0.256505 -0.919409 -0.298146 + -0.025989 0.036207 2.33812 -0.15586 -0.944153 -0.290313 + 0.003058 0.11597 2.14477 -0.158852 -0.935086 -0.31683 + -0.003058 0.082127 2.21059 0.187122 -0.896754 -0.401021 + -0.007218 0.056001 2.27264 0.106277 -0.93326 -0.343121 + 0.029889 0.113896 2.12036 -0.433885 -0.852333 -0.292014 + 0.010834 0.082213 2.20244 -0.374604 -0.851261 -0.367459 + 0.003058 0.082127 2.21059 -0.18711 -0.89676 -0.401013 + 0.007227 0.056001 2.27264 -0.106401 -0.933287 -0.343009 + -0.007218 0.024066 2.34035 -0.243394 -0.909678 -0.33652 + 0.079232 0.091678 2.08985 -0.289449 -0.927352 -0.237145 + 0.037665 0.080134 2.17804 -0.359894 -0.871334 -0.333545 + 0.048925 0.054415 2.24759 -0.24533 -0.92584 -0.287459 + 0.015003 0.055997 2.26445 -0.256553 -0.919418 -0.298081 + 0.072394 0.110565 2.02133 -0.329107 -0.930207 -0.162492 + 0.161487 0.095491 2.01744 -0.0685538 -0.985789 -0.153364 + 0.171288 0.084975 2.09565 -0.0115078 -0.98139 -0.191679 + 0.091123 0.070783 2.16104 -0.143059 -0.94941 -0.279562 + 0.102382 0.045057 2.23059 -0.122777 -0.936224 -0.329257 + 0.154552 0.107445 1.94174 -0.120366 -0.984145 -0.130269 + 0.291431 0.091702 2.046 -0.0565842 -0.99577 -0.0723881 + 0.301232 0.081181 2.12422 -0.0199479 -0.992998 -0.116439 + 0.315981 0.072491 2.20528 0.0470769 -0.976937 -0.208274 + 0.183179 0.063995 2.16679 0.0456908 -0.957181 -0.285862 + 0.285543 0.092543 1.96235 -0.101498 -0.992377 -0.0699049 + 0.41841 0.078475 1.97131 -0.11929 -0.989789 -0.0780191 + 0.424298 0.077633 2.05497 -0.114148 -0.99342 -0.00929113 + 0.4416 0.074308 2.13813 -0.0853809 -0.994554 -0.0597712 + 0.42024 0.092654 1.88995 -0.115153 -0.979433 -0.165681 + 0.54972 0.058582 1.96297 -0.101911 -0.991811 -0.0769779 + 0.566166 0.059859 2.04836 -0.0992237 -0.995054 0.00470803 + 0.583467 0.056539 2.13151 -0.0993196 -0.994846 -0.0204205 + 0.688824 0.049855 1.99168 0.0382392 -0.992 -0.120303 + 0.70527 0.051219 2.07712 -0.0494202 -0.998704 -0.0121398 + 0.724318 0.045762 2.15937 -0.0411527 -0.99794 -0.0492164 + 0.615817 0.051409 2.21279 -0.0742989 -0.99312 -0.0905151 + 0.456349 0.065616 2.21918 -0.0626254 -0.989205 -0.132482 + 0.848105 0.045259 2.14045 0.0543518 -0.992657 -0.108063 + 0.867153 0.039802 2.2227 0.0499618 -0.996664 -0.0645339 + 0.867964 0.035107 2.30703 0.0568548 -0.996004 -0.0688691 + 0.756667 0.040633 2.24066 -0.0369891 -0.997551 -0.0593598 + 1.0238 0.072501 2.07606 0.103605 -0.982744 -0.153235 + 1.02656 0.061384 2.16131 0.136539 -0.986719 -0.0879906 + 1.02737 0.056695 2.24564 0.163765 -0.9859 -0.0343876 + 1.02727 0.055147 2.33272 0.203149 -0.979126 -0.00658434 + 0.879902 0.028684 2.38955 0.0652774 -0.997577 -0.0240407 + 1.22545 0.112729 1.96998 0.211976 -0.970946 -0.111036 + 1.22032 0.103022 2.0614 0.259999 -0.964237 -0.0514541 + 1.22022 0.101478 2.14847 0.320432 -0.946994 0.022916 + 1.34103 0.156335 1.88086 0.523063 -0.840983 -0.138394 + 1.33591 0.146628 1.97227 0.521473 -0.851636 -0.0527465 + 1.34864 0.1531 2.04626 0.589787 -0.807353 0.0182312 + 1.21712 0.106865 2.24234 0.333338 -0.942089 0.036791 + 1.39166 0.208942 1.93914 0.703827 -0.70643 -0.0747307 + 1.40439 0.215415 2.01313 0.62135 -0.776022 -0.108235 + 1.34554 0.158488 2.14013 0.474663 -0.880166 0.00172384 + 1.39962 0.228884 1.8724 0.705242 -0.690147 -0.162267 + 1.45855 0.269326 1.90935 0.522432 -0.840345 -0.144514 + 1.46891 0.259892 1.99509 0.49533 -0.852168 -0.168693 + 1.42509 0.205372 2.11312 0.511678 -0.852605 -0.106067 + 1.53293 0.308826 1.84893 0.330094 -0.938016 -0.105662 + 1.53307 0.306576 1.92143 0.391088 -0.916012 -0.0892856 + 1.54342 0.297145 2.00716 0.398761 -0.903806 -0.155318 + 1.48961 0.249849 2.09508 0.496919 -0.854654 -0.150455 + 1.43347 0.208092 2.21021 0.448849 -0.892884 -0.035966 + 1.53008 0.323491 1.76373 0.275938 -0.94598 -0.170235 + 1.64358 0.352114 1.74876 0.253682 -0.959063 -0.125876 + 1.64093 0.345863 1.82318 0.293477 -0.954442 -0.0539524 + 1.64107 0.343527 1.89563 0.281179 -0.957819 -0.0593381 + 1.64148 0.337272 1.96966 0.285172 -0.951481 -0.115591 + 1.65108 0.366223 1.68132 0.184431 -0.967957 -0.170423 + 1.77082 0.395977 1.66818 0.164362 -0.985771 -0.0352348 + 1.76818 0.389645 1.74255 0.185971 -0.978734 -0.0865751 + 1.771 0.382386 1.81952 0.209389 -0.975226 -0.071343 + 1.77141 0.376132 1.89355 0.225647 -0.971576 -0.0715816 + 1.65583 0.378339 1.60973 0.0257995 -0.945029 -0.325967 + 1.77005 0.395597 1.59024 0.0816358 -0.993585 -0.0782656 + 1.85044 0.398633 1.52138 -0.320957 -0.947091 0.00234549 + 1.85122 0.398931 1.59927 -0.151561 -0.987259 0.0484734 + 1.85945 0.403984 1.67471 -0.0536916 -0.998166 0.0279686 + 1.7748 0.407712 1.51866 -0.0619945 -0.989651 -0.129412 + 1.84236 0.406737 1.45075 -0.405369 -0.913879 -0.0223828 + 1.88427 0.36495 1.46772 -0.48708 -0.867401 0.101831 + 1.90111 0.374766 1.54132 -0.396612 -0.911067 0.112498 + 1.90934 0.379825 1.61676 -0.239748 -0.954517 0.177249 + 1.76511 0.411152 1.4421 -0.141135 -0.983091 -0.116677 + 1.83267 0.410092 1.37414 -0.29654 -0.925223 -0.236701 + 1.87618 0.373049 1.39709 -0.648237 -0.751997 -0.119544 + 1.93117 0.334755 1.36422 -0.483302 -0.875141 0.0234159 + 1.81919 0.433354 1.30084 0.00983121 -0.989932 -0.141205 + 1.87003 0.41583 1.3378 -0.51384 -0.795843 -0.320315 + 1.92036 0.393833 1.2301 -0.736894 -0.642779 -0.209338 + 1.92652 0.351051 1.2894 -0.703942 -0.676847 -0.215276 + 1.79441 0.430865 1.22576 0.27621 -0.931744 -0.235715 + 1.85655 0.439092 1.2645 -0.283468 -0.922398 -0.26235 + 1.90726 0.422203 1.15736 -0.792068 -0.57329 -0.209684 + 1.98696 0.346454 1.04956 -0.587609 -0.799014 -0.127645 + 1.9973 0.330459 1.13187 -0.484672 -0.864336 -0.134225 + 1.77727 0.448527 1.15856 0.422272 -0.8665 -0.266203 + 1.8535 0.482551 1.20203 -0.18739 -0.883592 -0.429126 + 1.90421 0.465661 1.09488 -0.756166 -0.637205 -0.148939 + 1.97386 0.374826 0.976819 -0.621314 -0.782562 -0.0395699 + 2.04494 0.342123 0.90966 -0.0715123 -0.991567 -0.108076 + 1.83637 0.500213 1.13484 0.0306055 -0.952491 -0.303024 + 1.88128 0.493808 1.02394 -0.756631 -0.648825 -0.0808453 + 1.93569 0.390765 0.900612 -0.651428 -0.757784 0.0374919 + 1.98702 0.367937 0.75095 -0.327691 -0.940371 -0.0912207 + 2.02519 0.351912 0.827106 -0.189255 -0.979172 -0.0735147 + 1.82411 0.52969 1.06819 -0.0578216 -0.907299 -0.416492 + 1.95867 0.386642 0.672753 -0.371384 -0.92159 -0.112893 + 2.05472 0.382269 0.629927 0.065554 -0.977113 -0.202366 + 2.07224 0.36711 0.717184 0.116856 -0.977633 -0.174868 + 2.092 0.357321 0.799737 0.323412 -0.944409 -0.0591275 + 2.0973 0.364427 0.890429 0.464803 -0.884773 -0.0336758 + 2.05528 0.326128 0.991967 0.128093 -0.985761 -0.108941 + 2.08196 0.418871 0.48953 0.407847 -0.873923 -0.264424 + 2.11199 0.414984 0.555663 0.452122 -0.842762 -0.292126 + 2.12951 0.399825 0.642919 0.387981 -0.897008 -0.211774 + 2.13558 0.38581 0.72019 0.454304 -0.884833 -0.10334 + 2.14615 0.466202 0.52235 0.629181 -0.65078 -0.424989 + 2.19668 0.44916 0.604469 0.572982 -0.750098 -0.330219 + 2.20274 0.43506 0.68169 0.580376 -0.805838 -0.117426 + 2.14088 0.392917 0.810883 0.573695 -0.819015 0.0093976 + 2.10104 0.361741 0.977082 0.600432 -0.799358 -0.0225296 + 2.19285 0.51342 0.515567 0.613053 -0.568272 -0.548847 + 2.24338 0.496376 0.597685 0.680611 -0.579277 -0.44856 + 2.28997 0.514976 0.652872 0.707388 -0.625578 -0.32902 + 2.23818 0.459144 0.727577 0.592941 -0.80241 -0.0675213 + 2.17632 0.417 0.85677 0.561185 -0.827685 -0.00306734 + 2.28732 0.572307 0.59577 0.741811 -0.45929 -0.488639 + 2.33391 0.590818 0.650907 0.779893 -0.436275 -0.448811 + 2.35739 0.555668 0.72119 0.782201 -0.553962 -0.285109 + 2.3056 0.499835 0.795894 0.616967 -0.78481 -0.0585181 + 2.3564 0.636682 0.641869 0.759233 -0.503021 -0.412959 + 2.36268 0.60947 0.695201 0.851453 -0.376784 -0.364775 + 2.40264 0.642146 0.761807 0.836375 -0.468896 -0.283925 + 2.39735 0.588344 0.787796 0.87413 -0.460995 -0.152907 + 2.38517 0.655248 0.686114 0.781124 -0.571727 -0.250944 + 2.41327 0.679275 0.713097 0.753124 -0.608838 -0.24924 + 2.4371 0.665621 0.797747 0.789215 -0.59173 -0.164303 + 2.41924 0.62912 0.887168 0.835089 -0.550095 0.0046775 + 2.42472 0.70048 0.684769 0.799056 -0.522985 -0.296641 + 2.44773 0.702749 0.749038 0.814101 -0.523923 -0.250488 + 2.4608 0.703778 0.825056 0.890907 -0.450235 -0.0597797 + 2.47306 0.737895 0.783762 0.903579 -0.409227 -0.126798 + 2.48104 0.747248 0.863964 0.914526 -0.403579 -0.0276885 + 2.44294 0.667191 0.914427 0.869972 -0.49307 -0.00555513 + 2.45262 0.684514 0.975823 0.861075 -0.507469 0.03202 + 2.3602 0.564961 1.02569 0.768668 -0.635541 0.0723629 + 2.39861 0.638763 1.21626 0.805622 -0.5874 0.0770369 + 2.38231 0.600476 1.11978 0.789314 -0.609268 0.0759963 + 2.25227 0.468723 1.25478 0.698229 -0.713451 0.0588555 + 2.22755 0.443112 1.16914 0.65457 -0.755285 0.0329122 + 2.33831 0.524184 0.926321 0.719688 -0.693494 0.0334011 + 2.42046 0.677095 1.30547 0.828536 -0.554345 0.0789334 + 2.30903 0.550103 1.42763 0.750774 -0.655896 0.0783519 + 2.27437 0.504326 1.34892 0.731443 -0.67743 0.0779699 + 2.16102 0.400339 1.41963 0.648016 -0.757781 0.0764341 + 2.33088 0.588434 1.51684 0.757616 -0.648607 0.0729866 + 2.22441 0.481562 1.57934 0.694352 -0.708428 0.12651 + 2.18975 0.4357 1.50058 0.67295 -0.732255 0.104599 + 2.36209 0.629195 1.59564 0.781334 -0.619837 0.072931 + 2.28026 0.562414 1.73771 0.692251 -0.701816 0.168054 + 2.24905 0.521653 1.65891 0.687522 -0.71591 0.121601 + 2.14602 0.429243 1.66256 0.598414 -0.77815 0.190744 + 2.12043 0.391848 1.58513 0.5609 -0.810215 0.170125 + 2.44107 0.741639 1.49588 0.858054 -0.509507 0.0643884 + 2.37651 0.663807 1.68489 0.810918 -0.571291 0.126642 + 2.28961 0.596452 1.82015 0.691577 -0.69423 0.199415 + 2.17756 0.505198 1.82421 0.626008 -0.737496 0.253404 + 2.17066 0.469328 1.74214 0.614265 -0.75993 0.212565 + 2.45187 0.773462 1.59656 0.874339 -0.47292 0.108989 + 2.37738 0.689146 1.775 0.824266 -0.540742 0.167879 + 2.29048 0.621709 1.9102 0.687285 -0.679971 0.255495 + 2.18691 0.539241 1.90664 0.616385 -0.74181 0.264171 + 2.10576 0.47921 1.92562 0.564836 -0.78536 0.253315 + 2.5209 0.910411 1.57756 0.90282 -0.421401 0.0856562 + 2.45124 0.806408 1.69129 0.875849 -0.46505 0.128908 + 2.37676 0.722098 1.86973 0.839628 -0.462381 0.285005 + 2.28774 0.657035 1.99442 0.726418 -0.57156 0.381623 + 2.19008 0.578291 1.98821 0.623762 -0.714053 0.317883 + 2.52867 0.942755 1.67753 0.912805 -0.396344 0.0984824 + 2.45901 0.838753 1.79127 0.858049 -0.484414 0.17057 + 2.35716 0.768187 1.95149 0.819581 -0.469273 0.32874 + 2.26814 0.703124 2.07619 0.753854 -0.559826 0.343947 + 2.18734 0.613617 2.07242 0.667351 -0.684937 0.292412 + 2.57475 1.08248 1.66552 0.950545 -0.295178 0.0966118 + 2.57155 1.11526 1.79054 0.944891 -0.30605 0.116247 + 2.52548 0.975537 1.80256 0.914342 -0.372792 0.158128 + 2.45238 0.870138 1.88291 0.830781 -0.50723 0.229174 + 2.35053 0.799572 2.04313 0.770175 -0.596041 0.227081 + 2.59824 1.09167 1.44121 0.950668 -0.246942 0.187751 + 2.60356 1.16593 1.62819 0.958696 -0.274437 0.0747358 + 2.62389 1.22028 1.49886 0.951311 -0.279535 0.129874 + 2.64445 1.30412 1.55343 0.939656 -0.326798 0.101239 + 2.62411 1.24978 1.68276 0.954808 -0.291124 0.0599066 + 2.64442 1.24894 1.44861 0.814674 -0.398533 0.421281 + 2.66485 1.33239 1.50287 0.812294 -0.468549 0.347333 + 2.68044 1.42697 1.65945 0.904838 -0.42075 0.0651016 + 2.67129 1.41559 1.73735 0.915336 -0.397523 0.0643014 + 2.61496 1.2384 1.76067 0.948755 -0.301931 0.093284 + 2.70609 1.36395 1.48141 0.791247 -0.472594 0.388049 + 2.70084 1.45524 1.60889 0.870726 -0.459734 0.174591 + 2.78395 1.59133 1.59757 0.787807 -0.605392 0.113405 + 2.67396 1.43038 1.80435 0.919037 -0.390839 0.0511513 + 2.60791 1.25902 1.86534 0.939973 -0.329719 0.0879526 + 2.74541 1.52447 1.57417 0.864816 -0.467209 0.183871 + 2.90461 1.70028 1.54007 0.866201 -0.499645 0.00711979 + 2.87939 1.69471 1.66272 0.793177 -0.58475 0.170111 + 2.75873 1.58567 1.72017 0.831363 -0.534576 0.151868 + 2.69898 1.49683 1.84245 0.910648 -0.407222 0.069928 + 2.96054 1.88031 1.66985 0.99253 -0.119298 -0.0255294 + 2.92564 1.84141 1.81123 0.891443 -0.40446 0.204307 + 2.78036 1.65231 1.87676 0.844401 -0.508476 0.168641 + 2.72062 1.56338 1.99899 0.922727 -0.380864 0.0593083 + 2.97736 2.1481 2.00502 0.959823 -0.24875 0.129861 + 2.94247 2.1092 2.14639 0.951548 -0.269409 0.148241 + 2.90194 2.0281 2.26247 0.92428 -0.348229 0.156342 + 2.82662 1.79901 2.02526 0.855891 -0.478772 0.195521 + 3.01987 2.36333 2.07983 0.987932 -0.144265 0.0563761 + 3.00149 2.35754 2.22905 0.965788 -0.230895 0.118072 + 2.97441 2.31554 2.36321 0.958536 -0.251 0.134936 + 2.93387 2.23443 2.47928 0.944679 -0.282818 0.166119 + 2.83818 1.92807 2.39191 0.920875 -0.365786 0.134867 + 3.02077 2.3673 1.93415 0.993387 0.0078276 -0.114545 + 3.02802 2.51664 2.20689 0.994751 -0.0950307 0.037931 + 3.01751 2.4999 2.34988 0.982252 -0.157549 0.101779 + 2.99042 2.45789 2.48404 0.965403 -0.206231 0.159581 + 2.9537 2.39974 2.60716 0.950701 -0.233574 0.203986 + 2.99255 2.32319 1.78795 0.987705 -0.0415422 -0.15071 + 3.02892 2.52052 2.06117 0.996525 -0.0829995 -0.00695802 + 3.05121 2.75296 2.22377 0.995407 -0.0916072 0.0277883 + 3.03966 2.71913 2.35896 0.992703 -0.102171 0.0640396 + 3.02916 2.70248 2.502 0.987232 -0.116406 0.108735 + 2.97632 2.33456 1.65087 0.977253 -0.0384652 -0.208559 + 3.03153 2.54161 1.91944 0.992019 -0.11236 -0.0572146 + 3.05381 2.77414 2.08209 0.996481 -0.0836835 -0.00470311 + 3.06812 3.01108 2.40629 0.99495 -0.0870433 0.0499732 + 3.05657 2.97725 2.54149 0.987999 -0.114326 0.103863 + 3.01529 2.55297 1.78236 0.986964 -0.113999 -0.113608 + 3.0561 2.83204 1.959 0.996103 -0.0805939 -0.0358342 + 3.0788 3.08234 2.28906 0.997438 -0.0693568 0.017529 + 3.08929 3.3725 2.4613 0.998344 -0.0408288 0.0405364 + 3.07861 3.30131 2.57859 0.995042 -0.0575339 0.0811209 + 3.05736 2.90192 1.83917 0.995429 -0.0615048 -0.07306 + 3.08109 3.14025 2.16597 0.99878 -0.0406927 -0.0279831 + 3.09356 3.44468 2.33028 0.999765 -0.0170492 -0.0134014 + 3.09161 3.65564 2.60148 0.995939 0.0306326 0.0846603 + 3.07773 3.62876 2.73184 0.992443 0.0296511 0.119072 + 3.05017 2.98744 1.73523 0.989288 -0.0302723 -0.142806 + 3.07647 3.21742 2.04991 0.997946 -0.0121458 -0.0629032 + 3.08895 3.52185 2.21422 0.998469 0.000277825 -0.0553154 + 3.09588 3.72791 2.47051 0.997352 0.0638767 0.0347733 + 3.03994 3.10766 1.65941 0.985201 -0.00453093 -0.171341 + 3.06928 3.30294 1.94597 0.995333 0.0101293 -0.0959642 + 3.0787 3.58771 2.08074 0.995121 0.0150615 -0.0975044 + 3.09204 3.80515 2.29671 0.996835 0.0784467 -0.0128625 + 3.02043 3.20382 1.55945 0.976201 0.0156533 -0.2163 + 3.0531 3.37906 1.83273 0.990054 0.0351806 -0.136217 + 3.06252 3.66391 1.96755 0.990079 0.0307592 -0.137101 + 3.0818 3.8711 2.16328 0.993671 0.095148 -0.0597099 + 2.99258 3.29926 1.45715 0.970068 0.0238696 -0.241657 + 3.03359 3.47522 1.73278 0.984992 0.0476094 -0.165905 + 3.04323 3.74227 1.86023 0.98532 0.0411864 -0.165676 + 3.06565 3.93467 2.04759 0.990221 0.104877 -0.0919981 + 2.93487 3.01725 1.2846 0.941673 -0.0671375 -0.329764 + 2.96473 3.39302 1.35695 0.962349 0.0396591 -0.26891 + 3.01117 3.57084 1.63576 0.979717 0.056274 -0.192322 + 3.0208 3.83789 1.76322 0.981362 0.047918 -0.186099 + 3.04636 4.01302 1.94028 0.986886 0.115689 -0.112569 + 2.90994 3.12542 1.19425 0.939049 -0.0476501 -0.340464 + 2.92822 3.48207 1.25391 0.95939 0.0344006 -0.279978 + 2.98331 3.6646 1.53557 0.975552 0.055204 -0.212723 + 2.99674 3.92558 1.66294 0.97917 0.047794 -0.197338 + 3.02354 4.08959 1.83506 0.984495 0.117468 -0.130275 + 2.87343 3.21447 1.09121 0.935428 -0.0378803 -0.351482 + 2.89598 3.56679 1.14817 0.952969 0.0394309 -0.300492 + 2.95881 3.75803 1.43673 0.97358 0.0470454 -0.223447 + 2.97224 4.01901 1.5641 0.978491 0.0493955 -0.200288 + 2.99948 4.17727 1.73478 0.98259 0.121483 -0.140567 + 2.84357 3.31723 0.997228 0.93432 -0.0300914 -0.355161 + 2.85327 3.64454 1.03711 0.95085 0.0234604 -0.308761 + 2.92656 3.84275 1.33099 0.969922 0.0374312 -0.240523 + 2.9469 4.10375 1.46152 0.978436 0.0449607 -0.201595 + 2.9735 4.26459 1.63814 0.98167 0.126259 -0.142764 + 2.80086 3.39498 0.886163 0.924 -0.0217662 -0.381773 + 2.81888 3.72601 0.929804 0.939823 0.0219247 -0.340958 + 2.90137 3.92205 1.22085 0.969124 0.0179812 -0.245919 + 2.92172 4.18305 1.35138 0.978142 0.0438218 -0.203266 + 2.94816 4.34934 1.53556 0.98211 0.125763 -0.140157 + 2.86699 4.00351 1.11354 0.961796 0.0128639 -0.273463 + 2.89466 4.25686 1.24234 0.975437 0.0416533 -0.216304 + 2.92278 4.42895 1.43246 0.979885 0.13416 -0.147738 + 2.88307 4.67932 1.54261 0.961676 0.264774 -0.0712351 + 2.90846 4.59979 1.64576 0.967398 0.248919 -0.0467011 + 2.86733 4.33374 1.13038 0.971432 0.0498883 -0.232014 + 2.89572 4.50276 1.32343 0.975306 0.151458 -0.160747 + 2.85403 4.73817 1.43067 0.953931 0.281099 -0.104879 + 2.8077 4.92047 1.67653 0.931559 0.363585 0.0020652 + 2.82123 4.86942 1.79256 0.933956 0.355987 0.031622 + 2.8645 4.56131 1.20821 0.968644 0.165196 -0.185577 + 2.8228 4.79673 1.31545 0.937833 0.320255 -0.133815 + 2.77865 4.97932 1.56459 0.900078 0.42536 -0.0944897 + 2.66938 5.20707 1.70372 0.861152 0.50567 -0.0521084 + 2.68816 5.16972 1.81502 0.881064 0.469688 0.0558559 + 2.78712 4.84956 1.20634 0.927483 0.345742 -0.142255 + 2.73246 5.02505 1.45579 0.880609 0.457721 -0.122556 + 2.62319 5.25279 1.59493 0.8607 0.503054 -0.0783006 + 2.69677 5.07788 1.34668 0.906637 0.417358 -0.0618144 + 2.59562 5.29916 1.50761 0.888302 0.459158 -0.00966126 + 2.49325 5.47997 1.76125 0.828482 0.5588 0.0368802 + 2.50869 5.45074 1.83768 0.816103 0.575279 0.0550381 + 2.52747 5.41347 1.94903 0.818354 0.566771 0.0952226 + 2.66976 5.13291 1.25057 0.916567 0.396717 -0.0501943 + 2.5686 5.35419 1.4115 0.895084 0.445878 -0.00409296 + 2.45205 5.57126 1.60493 0.855363 0.510268 0.0893337 + 2.46568 5.52634 1.67394 0.855636 0.511427 0.0795583 + 2.53978 5.40978 1.32602 0.891634 0.452755 0.00138334 + 2.42323 5.62676 1.5194 0.820668 0.571308 0.0105456 + 2.22626 5.84969 1.68367 0.715355 0.696712 0.0534761 + 2.30465 5.76602 1.73179 0.768168 0.633483 0.0928311 + 2.31828 5.7211 1.80079 0.784566 0.580301 0.21842 + 2.38425 5.67106 1.43747 0.80256 0.596463 -0.0113856 + 2.18727 5.894 1.60173 0.707731 0.703387 0.0660502 + 1.92192 6.12256 1.69465 0.603293 0.792438 0.0898832 + 1.98527 6.0613 1.81496 0.630317 0.760334 0.156816 + 2.06366 5.97762 1.86309 0.680932 0.711282 0.174382 + 2.45255 5.55625 1.13032 0.834792 0.542952 -0.0912464 + 2.32895 5.74736 1.34111 0.796858 0.604132 0.0064982 + 2.19092 5.90505 1.48339 0.73271 0.676171 0.0769918 + 2.25966 5.83674 1.19491 0.771762 0.634502 -0.0423199 + 2.12164 5.99442 1.33719 0.699671 0.714289 0.0158527 + 1.92557 6.13361 1.57631 0.622918 0.775771 0.100762 + 1.58307 6.34482 1.72328 0.494798 0.857881 0.138622 + 1.65687 6.28328 1.83928 0.508842 0.848622 0.144637 + 2.37255 5.63181 0.907443 0.837481 0.532479 -0.12285 + 2.23624 5.85057 1.06815 0.775208 0.626154 -0.0835615 + 2.02499 6.07968 1.26831 0.651464 0.758672 -0.0033258 + 1.82892 6.21878 1.50738 0.580012 0.80809 0.102846 + 2.3171 5.68751 0.806972 0.804445 0.57095 -0.163963 + 2.24643 5.76772 0.768239 0.7804 0.604823 -0.158636 + 2.16557 5.93087 1.02946 0.734497 0.674131 -0.0778547 + 1.93897 6.14683 1.14961 0.635689 0.771607 -0.0228731 + 1.74926 6.28213 1.38726 0.565457 0.822407 0.0624813 + 2.18471 5.82591 0.672854 0.771632 0.615361 -0.160982 + 2.07956 5.99811 0.910802 0.711352 0.694328 -0.10903 + 1.84073 6.22417 1.02166 0.635503 0.771967 -0.0142103 + 2.09022 5.90723 0.568006 0.747037 0.642696 -0.169937 + 1.98507 6.07943 0.805954 0.701737 0.704546 -0.10574 + 1.70047 6.33976 0.889051 0.602793 0.797458 -0.026489 + 1.54913 6.43287 1.13137 0.529964 0.84682 0.0450993 + 1.65102 6.35946 1.25932 0.558933 0.827692 0.0501974 + 2.02026 5.96716 0.478801 0.746139 0.647236 -0.156082 + 1.84481 6.19502 0.673343 0.672512 0.731975 -0.109273 + 1.56641 6.42612 0.776263 0.551043 0.833121 -0.0475507 + 1.97917 5.98423 0.353645 0.753089 0.635215 -0.171343 + 1.80372 6.21208 0.548196 0.67623 0.724477 -0.133586 + 1.90528 6.04599 0.268878 0.707469 0.675386 -0.208185 + 1.8027 6.13603 0.252724 0.664243 0.717764 -0.208796 + 1.70115 6.30212 0.532041 0.628295 0.7681 -0.123566 + 1.97283 5.91634 0.133034 0.760599 0.589064 -0.272934 + 1.89152 5.97653 0.048988 0.722804 0.620963 -0.303247 + 1.71826 6.19427 0.17425 0.637824 0.737143 -0.223161 + 1.55972 6.38729 0.440731 0.576227 0.800299 -0.165785 + 1.42498 6.51129 0.684952 0.502546 0.863928 -0.0327935 + 1.84166 5.9073 -0.148702 0.700996 0.559618 -0.442078 + 1.80708 6.03477 -0.029486 0.691803 0.63848 -0.337271 + 1.71078 6.09582 -0.096035 0.640532 0.668867 -0.377274 + 1.61436 6.25035 0.099903 0.591625 0.767005 -0.248361 + 1.74535 5.96835 -0.215251 0.652593 0.582886 -0.484114 + 1.63947 6.03127 -0.271635 0.58603 0.608977 -0.534524 + 1.60914 6.16113 -0.145152 0.588265 0.696561 -0.410788 + 1.51273 6.31567 0.050778 0.556136 0.795907 -0.23926 + 1.66853 5.92133 -0.356413 0.58496 0.548362 -0.597596 + 1.53006 6.08995 -0.313864 0.51805 0.632289 -0.576052 + 1.49973 6.2198 -0.187381 0.504857 0.729962 -0.460733 + 1.44807 6.32948 -0.029744 0.486299 0.810333 -0.326916 + 1.34707 6.48501 0.323472 0.434776 0.870944 -0.228966 + 1.5802 5.88425 -0.457982 0.508504 0.520305 -0.68608 + 1.55406 5.9805 -0.404688 0.507557 0.564844 -0.650643 + 1.41123 6.15387 -0.342177 0.429292 0.666181 -0.609845 + 1.38259 6.26348 -0.226426 0.412512 0.760641 -0.501257 + 1.33093 6.37315 -0.068788 0.368896 0.852819 -0.369614 + 1.5864 5.73574 -0.567952 0.526086 0.518095 -0.674397 + 1.4557 5.94005 -0.496631 0.427738 0.539782 -0.725035 + 1.43523 6.04441 -0.432993 0.433227 0.584038 -0.68645 + 1.28798 6.19373 -0.374023 0.358962 0.692118 -0.626194 + 1.25934 6.30343 -0.25822 0.30526 0.801726 -0.513861 + 1.44985 5.60658 -0.768845 0.48268 0.545301 -0.685323 + 1.4619 5.79162 -0.606549 0.449183 0.561326 -0.695088 + 1.33366 5.99449 -0.521319 0.373692 0.559552 -0.739768 + 1.31319 6.09876 -0.457732 0.368104 0.608093 -0.703365 + 1.15742 6.23121 -0.400348 0.255656 0.726888 -0.637395 + 1.44808 5.44719 -0.897173 0.510311 0.543693 -0.666319 + 1.32284 5.6734 -0.794788 0.426016 0.582979 -0.691842 + 1.33489 5.85845 -0.632493 0.40463 0.588736 -0.69976 + 1.20237 6.05825 -0.532572 0.295362 0.578077 -0.76065 + 1.18264 6.13625 -0.484056 0.282958 0.621704 -0.730355 + 1.33258 5.38391 -1.03137 0.458855 0.520082 -0.720393 + 1.32162 5.51597 -0.931708 0.454826 0.579427 -0.676312 + 1.19309 5.74158 -0.811476 0.347673 0.616529 -0.70641 + 1.2036 5.92221 -0.643737 0.325352 0.619168 -0.714687 + 1.06634 6.09804 -0.546688 0.240416 0.595091 -0.766855 + 1.50598 5.18236 -1.06228 0.482678 0.493962 -0.723204 + 1.30942 5.2666 -1.11779 0.390946 0.457269 -0.798791 + 1.20078 5.45425 -1.0632 0.395662 0.555692 -0.731203 + 1.19188 5.58415 -0.948395 0.375159 0.62079 -0.688386 + 1.05597 5.78718 -0.829051 0.263708 0.649597 -0.713079 + 1.33486 5.16617 -1.16584 0.341677 0.42085 -0.840323 + 1.06543 5.24125 -1.21968 0.299315 0.33008 -0.895242 + 1.55249 4.99254 -1.1583 0.409704 0.457924 -0.788954 + 1.31379 5.08385 -1.20386 0.294403 0.368036 -0.881973 + 1.52869 4.93441 -1.19322 0.316268 0.411183 -0.854929 + 1.28999 5.02564 -1.23883 0.238531 0.295858 -0.924971 + 1.06721 5.0593 -1.27034 0.184419 0.161831 -0.969433 + 1.69867 4.78061 -1.20703 0.265382 0.21928 -0.938876 + 1.49433 4.89358 -1.22729 0.236548 0.256727 -0.937089 + 1.29489 4.96095 -1.25018 0.15758 0.131234 -0.978747 + 1.07212 4.99461 -1.28169 0.150994 0.0642519 -0.986444 + 0.934992 4.94724 -1.30044 0.196123 -0.414098 -0.888852 + 1.6663 4.75043 -1.21235 -0.170863 -0.462853 -0.869812 + 1.47527 4.84858 -1.23336 -0.100133 -0.47664 -0.873377 + 1.27583 4.91587 -1.2563 0.0200935 -0.42907 -0.903048 + 1.08456 4.94607 -1.27621 0.0707411 -0.499102 -0.863651 + 1.82612 4.63246 -1.18482 -0.216228 -0.421606 -0.880621 + 1.81028 4.61436 -1.13367 -0.650008 -0.734426 -0.195213 + 1.65664 4.72463 -1.14746 -0.476344 -0.858849 -0.188348 + 1.46561 4.82287 -1.16843 -0.336567 -0.898871 -0.280631 + 1.26974 4.87952 -1.20094 -0.13413 -0.919311 -0.369967 + 1.92484 4.48456 -1.11024 -0.763068 -0.584121 -0.276639 + 1.91864 4.47097 -1.01092 -0.775277 -0.486853 -0.402392 + 1.83478 4.60951 -0.994476 -0.702383 -0.626311 -0.33822 + 1.68114 4.71987 -1.00823 -0.422589 -0.841157 -0.337451 + 1.43923 4.81291 -1.04616 -0.247781 -0.878049 -0.409433 + 1.98546 4.35791 -1.00529 -0.839535 -0.27239 -0.47009 + 1.74769 4.29554 -0.775666 -0.677963 -0.0829774 -0.730397 + 1.66383 4.43409 -0.759232 -0.502433 -0.411924 -0.760183 + 1.5848 4.54907 -0.799193 -0.260257 -0.614766 -0.744533 + 1.73801 4.16008 -0.797641 -0.689331 0.0912442 -0.718677 + 1.34224 3.96063 -0.422972 -0.709361 0.178332 -0.681912 + 1.31292 4.05995 -0.369198 -0.558391 -0.196083 -0.806071 + 1.2339 4.17485 -0.409218 0.3591 -0.757839 -0.544726 + 1.33256 3.82517 -0.444947 -0.67465 0.424733 -0.603696 + 1.06559 3.68669 -0.279894 -0.326294 0.597408 -0.732555 + 1.12487 3.77227 -0.232133 -0.468155 0.519229 -0.715005 + 1.09555 3.87159 -0.178358 0.221535 -0.200561 -0.954305 + 1.19592 4.12414 -0.451392 0.413237 -0.697956 -0.584887 + 1.25245 3.70489 -0.517631 -0.625407 0.508854 -0.591552 + 0.985481 3.56642 -0.352577 -0.308117 0.7636 -0.567432 + 0.871163 3.69651 -0.286106 0.0719273 0.458941 -0.88555 + 0.839349 3.77385 -0.251464 0.581297 0.242737 -0.776642 + 1.03377 3.76403 -0.245252 0.077416 0.391376 -0.916969 + 1.26446 3.5853 -0.576089 -0.561306 0.338549 -0.755195 + 0.928646 3.53155 -0.376982 -0.109366 0.598536 -0.793595 + 0.814329 3.66164 -0.310509 0.671868 0.357362 -0.648758 + 1.32136 3.47721 -0.677476 -0.535059 0.421699 -0.732039 + 1.043 3.33197 -0.54971 -0.121252 0.782648 -0.610541 + 0.986104 3.43997 -0.448364 -0.223074 0.575776 -0.786587 + 0.852539 3.53944 -0.380047 0.588592 0.61112 -0.529237 + 0.821278 3.60439 -0.345361 0.684352 0.512137 -0.519016 + 1.34655 3.34276 -0.768394 -0.471292 0.649683 -0.596487 + 1.09483 3.2719 -0.671261 -0.0538216 0.923937 -0.378739 + 0.955696 3.37117 -0.540198 0.572719 0.758127 -0.311829 + 0.909997 3.44794 -0.45138 0.516243 0.725989 -0.454348 + 1.41999 3.30677 -0.932065 -0.388224 0.859462 -0.332575 + 1.16827 3.23591 -0.834932 0.0315517 0.992507 -0.118042 + 1.03005 3.29611 -0.776992 0.506809 0.861345 0.0350618 + 1.00753 3.3111 -0.661758 0.56267 0.817539 -0.122609 + 0.806855 3.56984 -0.807711 0.884405 0.447961 -0.130988 + 1.41563 3.25271 -1.08502 -0.202463 0.977719 -0.0554406 + 1.21245 3.24989 -1.03014 0.280125 0.94657 0.159798 + 1.1716 3.24768 -0.926706 0.409472 0.893231 0.185664 + 1.43534 3.28172 -1.26487 -0.116243 0.985672 0.122221 + 1.23216 3.2789 -1.20999 0.297731 0.940707 0.162561 + 1.12365 3.35118 -1.21599 0.509116 0.847316 0.151184 + 1.09283 3.34785 -1.08122 0.513307 0.839191 0.179651 + 1.05197 3.34555 -0.977836 0.392107 0.86885 0.302245 + 1.39002 3.28857 -1.38413 0.00897914 0.980383 0.196899 + 1.23927 3.29413 -1.31657 0.313813 0.929036 0.195992 + 1.13075 3.36642 -1.32257 0.512054 0.844147 0.158798 + 1.11887 3.39705 -1.45464 0.421399 0.900394 0.108227 + 1.01918 3.43216 -1.38745 0.430606 0.896281 0.106105 + 1.34359 3.3214 -1.449 0.135 0.962923 0.23357 + 1.19284 3.32696 -1.38142 0.532203 0.813873 0.233175 + 1.15402 3.36187 -1.3727 0.528251 0.826333 0.195258 + 1.14214 3.39251 -1.50476 0.273871 0.956796 0.0976515 + 1.27698 3.33323 -1.50369 0.379779 0.881281 0.281268 + 1.23816 3.36814 -1.49496 0.46431 0.833696 0.298943 + 1.25705 3.37972 -1.68482 0.218195 0.955603 0.198023 + 1.09957 3.413 -1.67886 0.317427 0.929034 0.190097 + 0.999874 3.44811 -1.61167 0.465706 0.87811 0.109729 + 0.969968 3.5092 -1.77767 0.467253 0.778559 0.418951 + 0.863759 3.53291 -1.58534 0.517353 0.841872 0.153613 + 0.988359 3.42883 -1.25268 0.455706 0.881631 0.122713 + 0.925856 3.45071 -1.17737 0.318525 0.916563 0.241773 + 0.833852 3.59399 -1.75135 0.563096 0.732523 0.382535 + 0.801256 3.55478 -1.51003 0.523123 0.840922 0.138537 + 0.907259 3.41294 -1.06835 0.42178 0.880007 0.218378 + 1.03338 3.30779 -0.868825 0.457277 0.866899 0.198452 + 0.858799 3.44275 -0.997782 0.646696 0.760813 0.0542887 + 0.836276 3.45774 -0.882547 0.788437 0.598745 -0.140963 + 0.67774 3.63249 -1.42123 0.699861 0.710048 0.0776311 + 0.569798 3.83247 -1.3092 0.943311 0.192645 -0.270283 + 0.6201 4.04521 -1.17587 0.959146 0.0731005 -0.273306 + 0.761156 3.64662 -0.718893 0.934319 0.346447 -0.0838027 + 0.76866 3.74322 -0.619611 0.962712 0.260601 -0.0726095 + 0.7374 3.80817 -0.584916 0.970592 0.234355 -0.0550305 + 0.74215 3.87974 -0.541678 0.983727 0.1076 -0.14389 + 0.627604 4.1418 -1.07658 0.97003 0.0535131 -0.237019 + 0.654169 4.28647 -0.963151 0.96326 -0.0876276 -0.253871 + 0.68488 4.37231 -0.931225 0.921715 -0.217365 -0.321239 + 0.735201 3.93699 -0.506827 0.969757 -0.00188808 -0.244065 + 0.713711 4.4393 -0.891461 0.794623 -0.407201 -0.450291 + 0.764032 4.00398 -0.467072 0.945572 -0.0942645 -0.311459 + 0.848985 3.8722 -0.214011 0.62404 0.269643 -0.733394 + 0.966475 3.81264 -0.233652 -0.0997424 0.132629 -0.986134 + 0.787411 4.51721 -0.888613 0.721344 -0.515995 -0.461965 + 0.773668 4.10225 -0.429669 0.910142 -0.222538 -0.349453 + 0.826991 4.17847 -0.409485 0.842975 -0.380263 -0.380516 + 0.840212 3.94172 -0.18242 0.774758 0.225008 -0.590865 + 0.858422 4.81498 -1.15075 0.5173 -0.722629 -0.458485 + 0.840733 4.59343 -0.868419 0.647954 -0.597957 -0.471808 + 0.928875 4.63847 -0.852437 0.262761 -0.750193 -0.606768 + 0.867609 4.24338 -0.363923 0.541322 -0.633498 -0.552856 + 0.88083 4.00672 -0.136817 0.0900021 -0.220771 -0.971164 + 0.944245 4.89859 -1.23938 0.249841 -0.820847 -0.513605 + 0.946564 4.86002 -1.13477 0.301342 -0.837809 -0.455269 + 1.07847 4.90973 -1.22087 0.0153075 -0.887378 -0.460789 + 1.08079 4.87115 -1.11625 0.0744267 -0.883695 -0.462108 + 1.02178 4.6337 -0.842966 0.0797526 -0.770377 -0.632581 + 0.960515 4.23869 -0.354402 -0.424609 -0.562054 -0.70979 + 0.957702 3.88216 -0.202061 -0.572487 0.197845 -0.795686 + 1.24336 4.86956 -1.07869 -0.0533823 -0.917012 -0.39527 + 1.18436 4.63201 -0.805442 -0.0252765 -0.704625 -0.709129 + 1.03739 4.11413 -0.419655 -0.530826 -0.3916 -0.751581 + 1.34289 4.64202 -0.837188 -0.117168 -0.675489 -0.728002 + 1.05757 3.82089 -0.220541 0.354544 -0.0249305 -0.934707 + 1.06648 5.96789 -0.661263 0.264126 0.64191 -0.719853 + 0.927575 6.13356 -0.558203 0.151563 0.652038 -0.742883 + 1.04661 6.17613 -0.498132 0.213248 0.662049 -0.718482 + 0.90974 6.19394 -0.504984 0.116691 0.707369 -0.697146 + 0.888864 6.26743 -0.428478 0.102982 0.770998 -0.628456 + 1.02573 6.2497 -0.421567 0.176562 0.757605 -0.628379 + 1.1318 6.31711 -0.291521 0.210692 0.832102 -0.513045 + 0.752642 6.27348 -0.439145 0.0631153 0.78146 -0.620755 + 0.868635 6.33987 -0.329947 0.0882681 0.840034 -0.535306 + 1.0001 6.33551 -0.31279 0.155417 0.835658 -0.526803 + 1.09517 6.43098 -0.085945 0.210194 0.883545 -0.418528 + 1.22271 6.41721 -0.052703 0.262854 0.886367 -0.38113 + 0.732413 6.34592 -0.340615 0.0707171 0.829502 -0.554008 + 0.837548 6.44609 -0.14733 0.113305 0.866333 -0.486445 + 0.969017 6.44173 -0.130172 0.16837 0.877295 -0.44945 + 1.05477 6.5639 0.200029 0.253569 0.915079 -0.313582 + 0.600179 6.34797 -0.350374 0.0550388 0.81839 -0.572021 + 0.579928 6.44836 -0.194862 0.0769101 0.841008 -0.535528 + 0.712162 6.44622 -0.185152 0.109193 0.852182 -0.511725 + 0.798436 6.5756 0.080752 0.172963 0.899828 -0.400491 + 0.928617 6.57474 0.155851 0.206806 0.911084 -0.356591 + 0.464092 6.45655 -0.206243 0.100041 0.828402 -0.551127 + 0.567921 6.58042 0.016008 0.118704 0.882083 -0.455894 + 0.67305 6.57573 0.04293 0.142592 0.887274 -0.438649 + 0.631543 6.67633 0.252485 0.164598 0.929064 -0.331281 + 0.707501 6.68331 0.327598 0.187633 0.937397 -0.293395 + 0.333038 6.47527 -0.196465 0.0718994 0.823045 -0.563407 + 0.359552 6.60168 -0.006219 0.124456 0.874143 -0.469451 + 0.452085 6.58861 0.004627 0.140861 0.880194 -0.453229 + 0.401713 6.71159 0.279412 0.123813 0.93763 -0.324839 + 0.526414 6.68102 0.225571 0.0944628 0.924418 -0.369496 + 0.204636 6.49173 -0.188379 0.0542598 0.823742 -0.564363 + 0.23115 6.61823 0.001916 0.0653113 0.872478 -0.484269 + 0.309179 6.72467 0.268558 0.13867 0.941593 -0.306878 + 0.072926 6.62302 0.00042 0.0159541 0.86912 -0.494343 + 0.052708 6.71495 0.189992 0.0152879 0.93025 -0.366607 + 0.210932 6.71016 0.191489 0.0954653 0.924458 -0.36914 + 0.150956 6.82104 0.562248 0.0391639 0.980834 -0.190868 + -0.072927 6.49919 -0.186687 -0.0199643 0.827386 -0.561278 + -0.072927 6.62302 0.00042 -0.0167477 0.868659 -0.495128 + -0.052709 6.71495 0.190001 -0.0153295 0.930253 -0.366599 + 0.052708 6.80653 0.485178 0.0184563 0.973096 -0.22966 + -0.204636 6.49173 -0.188379 -0.0533229 0.824431 -0.563445 + -0.23115 6.61823 0.001916 -0.0645307 0.872168 -0.484933 + -0.210932 6.71016 0.191489 -0.0954467 0.924459 -0.369142 + -0.052709 6.80653 0.485178 -0.0178497 0.972492 -0.232251 + 0.100983 6.86309 0.880213 0.0293859 0.99735 -0.0665491 + -0.333038 6.47527 -0.196465 -0.0791032 0.826543 -0.557288 + -0.359552 6.60168 -0.006219 -0.133421 0.867632 -0.478971 + -0.309181 6.72467 0.268558 -0.130659 0.937209 -0.323369 + -0.150957 6.82104 0.562248 -0.0420738 0.980531 -0.191803 + -0.464092 6.45655 -0.206243 -0.0954008 0.832238 -0.546148 + -0.452085 6.58861 0.004627 -0.133058 0.876516 -0.462617 + -0.401714 6.71159 0.279412 -0.13257 0.933801 -0.332326 + -0.371308 6.80834 0.581647 -0.118317 0.974849 -0.188863 + -0.579927 6.44836 -0.194862 -0.0836925 0.845523 -0.52734 + -0.56792 6.58042 0.016008 -0.130094 0.875833 -0.464749 + -0.526414 6.68102 0.225571 -0.0944586 0.924423 -0.369486 + -0.71216 6.44622 -0.185152 -0.101872 0.856561 -0.505891 + -0.673048 6.57573 0.04293 -0.136295 0.883186 -0.448782 + -0.631543 6.67633 0.252485 -0.164593 0.929057 -0.331303 + -0.496008 6.77776 0.527814 -0.133023 0.963023 -0.234291 + -0.732411 6.34592 -0.340623 -0.073803 0.831437 -0.550696 + -0.837548 6.44609 -0.14733 -0.123621 0.873256 -0.471318 + -0.798436 6.5756 0.080752 -0.192901 0.890874 -0.411257 + -0.707503 6.68331 0.327598 -0.190056 0.940027 -0.283246 + -0.888862 6.26743 -0.428478 -0.107564 0.77391 -0.624094 + -0.868633 6.33987 -0.329947 -0.0923583 0.838026 -0.537756 + -0.969017 6.44173 -0.130172 -0.155915 0.884453 -0.439811 + -0.928617 6.57474 0.155851 -0.202306 0.908179 -0.366448 + -0.837684 6.68236 0.402646 -0.217927 0.946081 -0.239662 + -1.02573 6.2497 -0.421567 -0.173619 0.759717 -0.626647 + -1.0001 6.33551 -0.31279 -0.151888 0.833586 -0.531097 + -1.09517 6.43098 -0.085945 -0.216241 0.88683 -0.408377 + -1.05477 6.5639 0.200029 -0.266321 0.908536 -0.321926 + -1.04659 6.17613 -0.498132 -0.193025 0.649367 -0.73557 + -1.18263 6.13625 -0.484056 -0.284942 0.620036 -0.731002 + -1.15742 6.23121 -0.400348 -0.268276 0.734648 -0.623153 + -1.13179 6.31711 -0.291521 -0.223336 0.824761 -0.51951 + -1.20237 6.05825 -0.532572 -0.30057 0.580825 -0.756505 + -1.33366 5.99449 -0.521319 -0.372503 0.560866 -0.739372 + -1.31319 6.09876 -0.457732 -0.365083 0.606388 -0.706405 + -1.28798 6.19373 -0.374023 -0.35047 0.69982 -0.622433 + -1.3349 5.85845 -0.632493 -0.398867 0.586366 -0.705039 + -1.4619 5.79162 -0.606549 -0.454494 0.552984 -0.698315 + -1.4557 5.94013 -0.49658 -0.428492 0.540229 -0.724257 + -1.43523 6.04441 -0.432993 -0.433556 0.583714 -0.686518 + -1.32284 5.6734 -0.794788 -0.423715 0.586801 -0.690022 + -1.44985 5.60658 -0.768845 -0.491605 0.549145 -0.675844 + -1.56957 5.53004 -0.731271 -0.551994 0.509857 -0.65981 + -1.5864 5.73574 -0.567952 -0.518539 0.514297 -0.683093 + -1.5802 5.88425 -0.457982 -0.508224 0.520687 -0.685998 + -1.32162 5.51598 -0.931716 -0.442257 0.574315 -0.688891 + -1.44808 5.44719 -0.897173 -0.509501 0.544854 -0.66599 + -1.5678 5.37064 -0.85959 -0.566267 0.52526 -0.635172 + -1.68818 5.29708 -0.806381 -0.613928 0.504444 -0.607148 + -1.68559 5.46478 -0.67924 -0.604512 0.47579 -0.638897 + -1.45903 5.31513 -0.996836 -0.504378 0.530727 -0.681125 + -1.58714 5.25355 -0.942585 -0.560605 0.527016 -0.63873 + -1.70753 5.17999 -0.889376 -0.613308 0.524746 -0.590335 + -1.77214 5.03741 -0.950809 -0.608362 0.528894 -0.591748 + -1.82292 5.09917 -0.833386 -0.666087 0.512101 -0.542293 + -1.79847 5.22373 -0.746933 -0.662188 0.48557 -0.570727 + -1.79588 5.39142 -0.619783 -0.661573 0.447363 -0.60182 + -1.70243 5.67048 -0.51592 -0.602907 0.471024 -0.643925 + -1.9316 5.02276 -0.765438 -0.71001 0.474878 -0.519977 + -1.90715 5.14732 -0.678985 -0.697412 0.46766 -0.543057 + -1.897 5.32413 -0.550839 -0.695725 0.430373 -0.575105 + -1.81169 5.61589 -0.444181 -0.66235 0.439633 -0.606642 + -2.01005 5.09055 -0.593649 -0.77042 0.412825 -0.485828 + -1.9999 5.26727 -0.465553 -0.74792 0.400571 -0.5293 + -1.91281 5.54861 -0.375237 -0.722968 0.411762 -0.55477 + -1.80395 5.77041 -0.338008 -0.665327 0.462519 -0.586017 + -1.69468 5.825 -0.409757 -0.593959 0.491624 -0.636804 + -2.10918 4.84592 -0.621343 -0.935996 0.261187 -0.235995 + -2.08717 5.00564 -0.514393 -0.83689 0.320051 -0.444053 + -2.08995 5.19612 -0.382712 -0.789898 0.359498 -0.496813 + -2.00236 5.46004 -0.309838 -0.767669 0.393788 -0.505585 + -2.09241 5.38889 -0.226996 -0.791638 0.381233 -0.477464 + -1.99624 5.61467 -0.200263 -0.772364 0.398713 -0.494451 + -1.90669 5.70315 -0.265712 -0.73627 0.439559 -0.514484 + -1.77442 5.8584 -0.300021 -0.655078 0.517386 -0.550623 + -1.66854 5.92133 -0.356405 -0.586813 0.546258 -0.597705 + -2.17516 5.30753 -0.147275 -0.830692 0.350951 -0.432186 + -2.1625 5.46109 -0.042254 -0.824536 0.377936 -0.421075 + -2.07975 5.54245 -0.121966 -0.798066 0.386985 -0.46188 + -1.96919 5.7342 -0.145894 -0.758833 0.460048 -0.461008 + -1.87717 5.79115 -0.227725 -0.713284 0.493917 -0.497263 + -2.12768 5.59788 0.023222 -0.824996 0.432441 -0.363835 + -2.0527 5.66198 -0.067605 -0.801166 0.435727 -0.410213 + -1.93369 5.85036 -0.06688 -0.745557 0.539725 -0.390949 + -1.84166 5.9073 -0.148702 -0.698959 0.558146 -0.447135 + -1.74535 5.96835 -0.215251 -0.652918 0.58248 -0.484164 + -2.08997 5.72607 0.107994 -0.810185 0.493532 -0.316268 + -2.01499 5.79017 0.017166 -0.787434 0.512829 -0.341986 + -1.89153 5.97644 0.048937 -0.724223 0.622166 -0.297339 + -1.80708 6.03468 -0.029536 -0.688262 0.642608 -0.336677 + -1.71078 6.09573 -0.096085 -0.641011 0.668949 -0.376313 + -2.16364 5.6606 0.195989 -0.818788 0.483639 -0.309321 + -2.04672 5.85449 0.217752 -0.783916 0.569111 -0.248171 + -1.97283 5.91634 0.133034 -0.761952 0.587214 -0.273145 + -1.90528 6.04599 0.268878 -0.707426 0.675412 -0.208248 + -1.8027 6.13603 0.252724 -0.67177 0.709909 -0.211552 + -2.1204 5.78911 0.305796 -0.790494 0.56386 -0.239125 + -2.02026 5.96716 0.478801 -0.746 0.645657 -0.163129 + -1.97917 5.98423 0.353645 -0.753105 0.635206 -0.171304 + -1.80372 6.21208 0.548196 -0.676236 0.724473 -0.133579 + -1.70115 6.30212 0.532041 -0.629631 0.768257 -0.115527 + -2.19036 5.72927 0.395052 -0.79939 0.552234 -0.236671 + -2.09022 5.90723 0.568006 -0.751131 0.63769 -0.170745 + -1.98507 6.07943 0.805954 -0.702069 0.704841 -0.101476 + -1.84481 6.19502 0.673343 -0.670561 0.733792 -0.109075 + -2.1847 5.826 0.672904 -0.771011 0.614444 -0.16733 + -2.07955 5.99811 0.910802 -0.706213 0.699721 -0.107953 + -1.84073 6.22417 1.02166 -0.639991 0.768235 -0.0150445 + -1.70047 6.33976 0.889043 -0.602231 0.797612 -0.033674 + -1.56641 6.42612 0.776263 -0.561146 0.826161 -0.0507359 + -1.93897 6.14683 1.14961 -0.635619 0.771678 -0.0224062 + -1.65102 6.35946 1.25932 -0.558442 0.827507 0.0581008 + -1.54913 6.43287 1.13137 -0.521506 0.851986 0.046378 + -1.41507 6.51924 1.01858 -0.460664 0.886927 0.0338941 + -1.74926 6.28213 1.38726 -0.565921 0.822091 0.0624477 + -1.47639 6.44575 1.47206 -0.491568 0.861513 0.127104 + -1.3745 6.51916 1.34411 -0.444877 0.89258 0.0733865 + -1.242 6.58068 1.29897 -0.383659 0.9206 0.0728071 + -1.50341 6.40817 1.60316 -0.481719 0.864848 0.141369 + -1.17018 6.56106 1.67595 -0.397218 0.90393 0.158521 + -1.03768 6.62266 1.63085 -0.354024 0.923295 0.148973 + -1.10299 6.64171 1.17946 -0.347552 0.936491 0.0468164 + -1.27606 6.58026 0.899078 -0.393067 0.919313 0.0190205 + -1.29037 6.45835 1.91044 -0.412719 0.888633 0.199984 + -1.19721 6.52356 1.8071 -0.395055 0.898605 0.190893 + -1.36416 6.39673 2.02638 -0.416889 0.884742 0.208411 + -1.08876 6.45985 2.22505 -0.335848 0.902488 0.269669 + -1.02113 6.51363 2.13009 -0.33801 0.902417 0.267195 + -0.92797 6.57875 2.02669 -0.320919 0.915024 0.244421 + -1.14603 6.40479 2.34221 -0.327107 0.898789 0.291853 + -0.883885 6.41497 2.54317 -0.28579 0.882641 0.373188 + -0.827271 6.46639 2.46352 -0.283355 0.895909 0.342136 + -0.759644 6.52008 2.36851 -0.26753 0.911118 0.313516 + -1.22438 6.35483 2.39954 -0.382324 0.863093 0.329997 + -0.962239 6.36502 2.60049 -0.303404 0.866472 0.39645 + -0.674401 6.34161 2.83165 -0.241724 0.854591 0.459613 + -0.644018 6.42086 2.69499 -0.238509 0.871949 0.427572 + -0.587404 6.47226 2.61534 -0.212713 0.888983 0.405539 + -0.93967 6.31905 2.71111 -0.301833 0.847859 0.435926 + -0.714553 6.27018 2.93436 -0.255892 0.844764 0.469992 + -0.488797 6.21125 3.14743 -0.201175 0.856603 0.475143 + -0.45681 6.34753 2.91038 -0.181123 0.86623 0.465661 + -0.426427 6.4267 2.77367 -0.152582 0.884218 0.441449 + -0.78341 6.18987 3.04706 -0.264561 0.846344 0.462287 + -0.557654 6.13094 3.26013 -0.212371 0.845696 0.489589 + -0.327175 6.15706 3.3087 -0.176016 0.856413 0.48536 + -0.295187 6.29334 3.07165 -0.148549 0.870543 0.469135 + -0.271816 6.35498 2.96229 -0.108517 0.88473 0.453296 + -0.997952 6.13756 2.99886 -0.32085 0.828644 0.458699 + -0.788677 6.06704 3.26661 -0.267711 0.830227 0.488931 + -0.756484 5.99632 3.3973 -0.253489 0.812226 0.525387 + -0.525461 6.06022 3.39082 -0.211965 0.830137 0.515696 + -1.00322 6.01473 3.21841 -0.328164 0.816944 0.474247 + -1.00086 5.90592 3.40228 -0.320699 0.794349 0.515908 + -0.741024 5.91316 3.52434 -0.254345 0.801365 0.541408 + -0.549237 5.97989 3.50496 -0.219053 0.815843 0.535179 + -0.985395 5.82275 3.52933 -0.304387 0.788377 0.534612 + -0.729783 5.82241 3.66751 -0.259229 0.808148 0.528863 + -0.537996 5.88923 3.64818 -0.224039 0.816147 0.532644 + -0.369525 6.00461 3.53995 -0.213401 0.819164 0.532381 + -0.345749 6.08485 3.42576 -0.197699 0.837667 0.509146 + -0.962693 5.72918 3.6804 -0.300143 0.794599 0.527756 + -0.706855 5.73509 3.81456 -0.254 0.803469 0.538443 + -0.530927 5.7715 3.8319 -0.219422 0.80903 0.545275 + -0.368029 5.82088 3.82297 -0.202632 0.809693 0.55076 + -0.375098 5.93861 3.63925 -0.214364 0.818796 0.532561 + -0.939765 5.64185 3.82745 -0.309069 0.776639 0.548916 + -0.693585 5.62984 3.97047 -0.250957 0.781071 0.571794 + -0.517658 5.66625 3.9878 -0.202269 0.780697 0.591269 + -0.355791 5.75569 3.91968 -0.174539 0.789348 0.588614 + -0.148623 5.95613 3.70132 -0.0584016 0.8319 0.551844 + -1.12536 5.39736 4.04032 -0.370535 0.719613 0.587249 + -0.887986 5.53922 3.99263 -0.311417 0.757896 0.573248 + -0.661059 5.50964 4.14565 -0.229294 0.759663 0.608553 + -0.488028 5.58849 4.09428 -0.174387 0.769752 0.614061 + -0.326162 5.67794 4.02615 -0.137856 0.770393 0.622487 + -1.08361 5.29444 4.18419 -0.366161 0.688324 0.626208 + -0.85546 5.41902 4.1678 -0.306028 0.728614 0.612754 + -0.593196 5.41042 4.28431 -0.20229 0.732127 0.650438 + -0.420165 5.48927 4.23294 -0.137508 0.754184 0.642104 + -1.02628 5.18841 4.32803 -0.349541 0.649715 0.675049 + -0.798127 5.31308 4.3117 -0.287399 0.691733 0.662501 + -0.503428 5.31304 4.41678 -0.177091 0.717075 0.674124 + -0.331182 5.372 4.38366 -0.103171 0.737736 0.66716 + -1.31486 5.02819 4.31615 -0.401351 0.614235 0.679435 + -0.960334 5.09124 4.44514 -0.334607 0.611648 0.716886 + -0.708359 5.21562 4.44412 -0.272532 0.659536 0.700527 + -0.460431 5.21435 4.5285 -0.165665 0.669186 0.724392 + -1.62324 4.86473 4.26848 -0.454643 0.594602 0.663135 + -1.24892 4.93102 4.43325 -0.382474 0.594292 0.707482 + -0.884017 5.00403 4.55201 -0.317914 0.619029 0.718146 + -0.632041 5.1284 4.55099 -0.254888 0.612736 0.748055 + -1.58155 4.72317 4.41606 -0.445776 0.563813 0.695269 + -1.52887 4.62331 4.52863 -0.448044 0.536642 0.715033 + -1.19624 4.83116 4.54582 -0.379405 0.602297 0.702346 + -0.8515 4.94003 4.62545 -0.291084 0.617352 0.730853 + -0.547303 5.02682 4.65352 -0.217263 0.593083 0.775274 + -1.85277 4.55415 4.36261 -0.511905 0.519943 0.683821 + -1.83964 4.42295 4.46545 -0.501523 0.469936 0.726385 + -1.74296 4.39244 4.5459 -0.48589 0.463178 0.7412 + -1.42798 4.54238 4.6458 -0.410508 0.495965 0.765181 + -1.16372 4.76716 4.61927 -0.363869 0.564561 0.740857 + -2.06263 4.2746 4.3916 -0.617155 0.406621 0.673631 + -1.98966 4.14767 4.51646 -0.567099 0.345091 0.747871 + -1.89297 4.11716 4.5969 -0.521703 0.329784 0.786809 + -1.64207 4.31151 4.66307 -0.458005 0.413415 0.786969 + -2.20914 4.07508 4.35018 -0.653686 0.320396 0.685596 + -2.13616 3.94806 4.47499 -0.638437 0.253364 0.726777 + -2.06758 3.85189 4.55996 -0.605943 0.209711 0.767368 + -1.82588 4.03272 4.66956 -0.51226 0.286029 0.8098 + -2.29894 4.09032 4.25959 -0.663449 0.320368 0.676166 + -2.38769 3.77091 4.29422 -0.691036 0.143444 0.708444 + -2.31605 3.69854 4.37297 -0.697383 0.0957499 0.710273 + -2.24747 3.60237 4.45794 -0.691897 0.0453037 0.720574 + -2.00049 3.76746 4.63261 -0.57921 0.171054 0.79703 + -2.47749 3.78615 4.20362 -0.721096 0.139234 0.678701 + -2.52876 3.47356 4.15646 -0.763446 -0.0618433 0.642904 + -2.45712 3.40119 4.2352 -0.735795 -0.0829159 0.672109 + -2.38262 3.31487 4.29711 -0.716712 -0.133858 0.684402 + -2.16285 3.53564 4.53012 -0.654839 0.000774119 0.755768 + -2.58947 3.5633 4.09222 -0.794708 -0.0122773 0.606867 + -2.61945 3.19332 3.97685 -0.796538 -0.174258 0.578931 + -2.55453 3.08603 4.02568 -0.7719 -0.206428 0.601298 + -2.48002 2.99971 4.08758 -0.742247 -0.229747 0.629512 + -2.65484 2.87294 3.79956 -0.831109 -0.243685 0.499875 + -2.58992 2.76565 3.84838 -0.799379 -0.259682 0.54181 + -2.51848 2.65663 3.89642 -0.768489 -0.278629 0.576013 + -2.40224 2.90154 4.13742 -0.725062 -0.247261 0.642765 + -2.298 3.24814 4.36929 -0.698267 -0.155859 0.698664 + -2.49612 2.30505 3.73457 -0.793725 -0.327676 0.512474 + -2.41321 2.20392 3.79012 -0.761936 -0.340561 0.550883 + -2.4407 2.55846 3.94625 -0.741223 -0.292733 0.604065 + -2.35401 2.47291 4.00843 -0.724726 -0.300728 0.619947 + -2.32092 2.82189 4.19837 -0.715456 -0.255906 0.650104 + -2.45458 1.99083 3.57362 -0.813558 -0.380307 0.439875 + -2.37167 1.88962 3.62912 -0.787821 -0.392009 0.475043 + -2.28419 1.81926 3.71338 -0.75858 -0.395006 0.518196 + -2.32652 2.11846 3.85235 -0.737533 -0.344721 0.580699 + -2.31407 1.63413 3.49404 -0.797395 -0.432701 0.420632 + -2.22659 1.56377 3.5783 -0.765635 -0.459395 0.450287 + -2.13417 1.51403 3.67706 -0.726652 -0.468889 0.502115 + -2.18866 1.74569 3.78762 -0.723026 -0.402654 0.561341 + -2.23098 2.04488 3.9266 -0.712166 -0.351209 0.607842 + -2.07879 1.30819 3.53959 -0.703278 -0.571865 0.422339 + -1.97879 1.26809 3.64004 -0.671623 -0.573026 0.469642 + -2.03389 1.46269 3.76477 -0.683843 -0.48238 0.54742 + -2.08837 1.69435 3.87533 -0.687656 -0.407438 0.600935 + -1.91628 1.1104 3.48777 -0.691861 -0.613134 0.381307 + -1.82446 1.06329 3.59595 -0.703252 -0.586234 0.402201 + -1.87287 1.23073 3.73175 -0.678957 -0.547529 0.489111 + -1.92797 1.42525 3.85644 -0.65843 -0.475953 0.583042 + -1.76298 0.90034 3.4572 -0.703044 -0.61733 0.353033 + -1.6807 0.861303 3.54682 -0.718566 -0.607542 0.33846 + -1.72597 1.01679 3.69349 -0.738108 -0.552772 0.386834 + -1.77437 1.18415 3.82923 -0.685666 -0.506026 0.523258 + -1.61585 0.687698 3.34331 -0.700927 -0.632266 0.330063 + -1.54136 0.704368 3.54803 -0.681439 -0.65312 0.330265 + -1.59424 0.805556 3.65557 -0.707943 -0.62312 0.332472 + -1.63951 0.960962 3.8022 -0.71875 -0.519554 0.46202 + -1.40911 0.598918 3.58948 -0.595074 -0.701076 0.392911 + -1.44189 0.682476 3.68675 -0.598353 -0.702993 0.384416 + -1.49477 0.783663 3.79429 -0.62331 -0.642359 0.445938 + -1.53374 0.918068 3.89229 -0.645928 -0.5159 0.562694 + -1.66388 1.13845 3.91159 -0.661103 -0.46324 0.590213 + -1.2922 0.579149 3.71252 -0.568148 -0.694064 0.442134 + -1.32498 0.662709 3.80979 -0.537153 -0.714817 0.447776 + -1.38252 0.755475 3.88891 -0.558105 -0.650717 0.514864 + -1.42149 0.88988 3.98692 -0.592683 -0.518961 0.61596 + -1.55811 1.09555 4.00168 -0.634315 -0.445343 0.631913 + -1.29235 0.517844 3.6271 -0.609013 -0.672287 0.420873 + -1.15834 0.476777 3.72603 -0.51464 -0.737264 0.437708 + -1.15819 0.538088 3.81144 -0.517753 -0.695951 0.497577 + -1.18742 0.628462 3.90511 -0.504468 -0.708502 0.493494 + -1.24496 0.721228 3.98423 -0.504889 -0.653722 0.56368 + -1.29105 0.465531 3.53131 -0.502943 -0.796814 0.334867 + -1.16866 0.443531 3.64062 -0.475527 -0.815731 0.329327 + -0.999028 0.407612 3.78343 -0.46603 -0.769689 0.436343 + -0.990719 0.457313 3.86275 -0.469713 -0.713855 0.519405 + -1.01995 0.547601 3.95636 -0.454461 -0.691665 0.561306 + -1.31012 0.446865 3.43944 -0.288667 -0.91798 0.272 + -1.18774 0.424785 3.54869 -0.392568 -0.886534 0.244841 + -1.00935 0.374284 3.69795 -0.425504 -0.872298 0.24092 + -0.889601 0.326565 3.73001 -0.410753 -0.885395 0.217618 + -0.878866 0.352189 3.81043 -0.412184 -0.803745 0.429067 + -1.19881 0.406289 3.46332 -0.399887 -0.860391 0.315939 + -1.02128 0.372296 3.6162 -0.358309 -0.922693 0.142307 + -0.901532 0.324581 3.64824 -0.404619 -0.908649 0.103156 + -0.818256 0.295757 3.73317 -0.382532 -0.897228 0.220572 + -0.807521 0.32129 3.81354 -0.356564 -0.827608 0.433505 + -1.19284 0.361408 3.37566 -0.358705 -0.867184 0.345431 + -1.03236 0.353714 3.53078 -0.33854 -0.914424 0.221855 + -0.911372 0.317569 3.56339 -0.388958 -0.907546 0.158343 + -0.829495 0.290214 3.64637 -0.401557 -0.908886 0.112597 + -1.19868 0.33381 3.29126 -0.323772 -0.888675 0.324697 + -1.04472 0.343259 3.44889 -0.260551 -0.940243 0.219219 + -0.923729 0.307112 3.4815 -0.351057 -0.920093 0.173745 + -0.839335 0.283289 3.56156 -0.386883 -0.913465 0.12611 + -1.20987 0.304616 3.20482 -0.319033 -0.889879 0.326088 + -1.05055 0.315746 3.36455 -0.261537 -0.915099 0.306906 + -0.931271 0.292165 3.39719 -0.321118 -0.912818 0.252285 + -0.842599 0.273449 3.47381 -0.355943 -0.922549 0.149022 + -1.22724 0.281244 3.12211 -0.259298 -0.93868 0.227253 + -1.0655 0.294472 3.2842 -0.251211 -0.918822 0.304399 + -0.94622 0.270982 3.31688 -0.269348 -0.913575 0.304684 + -0.850141 0.258502 3.3895 -0.318009 -0.925426 0.20605 + -1.3309 0.296182 3.03103 -0.39134 -0.893669 0.219565 + -1.25861 0.275212 3.03255 -0.336561 -0.911648 0.235848 + -1.08286 0.271099 3.20148 -0.292172 -0.881512 0.370906 + -0.955817 0.242177 3.23497 -0.25585 -0.882947 0.39363 + -0.848922 0.240285 3.30245 -0.263867 -0.928569 0.261024 + -1.27815 0.254457 2.9473 -0.411056 -0.87378 0.259888 + -1.10375 0.236451 3.12569 -0.390361 -0.827473 0.403615 + -0.976704 0.207529 3.15919 -0.257219 -0.864092 0.432647 + -0.858519 0.211475 3.22055 -0.204674 -0.896785 0.392282 + -1.27644 0.232753 2.85409 -0.415409 -0.880744 0.22743 + -1.12329 0.215782 3.04049 -0.389423 -0.865725 0.314438 + -0.987582 0.174583 3.08025 -0.274462 -0.889022 0.366483 + -0.862611 0.172535 3.13899 -0.18557 -0.893917 0.408014 + -1.27729 0.20953 2.76852 -0.396229 -0.90494 0.155195 + -1.1375 0.190275 2.96227 -0.437359 -0.844223 0.309846 + -1.00179 0.149073 3.00203 -0.304167 -0.889565 0.340817 + -0.87349 0.139587 3.06006 -0.178451 -0.904682 0.386918 + -1.13835 0.167054 2.87669 -0.448971 -0.848297 0.280744 + -1.00819 0.121292 2.91955 -0.320266 -0.884921 0.33815 + -0.87924 0.105543 2.97703 -0.192909 -0.916111 0.351464 + -0.740831 0.076886 2.95827 -0.108706 -0.939587 0.32459 + -0.735081 0.110928 3.0413 -0.136091 -0.924316 0.356538 + -1.0181 0.09005 2.83806 -0.310583 -0.899854 0.306268 + -0.885642 0.077761 2.89455 -0.181811 -0.940328 0.287626 + -0.740988 0.051478 2.87467 -0.0965122 -0.960605 0.26062 + -0.579673 0.064888 2.94204 -0.0474531 -0.964764 0.2588 + -0.574499 0.084859 3.02466 -0.0729616 -0.954356 0.289621 + -0.878345 0.056773 2.8081 -0.151753 -0.957061 0.246994 + -0.733691 0.030489 2.78823 -0.110125 -0.967569 0.227339 + -0.579831 0.039477 2.85846 -0.0353697 -0.956076 0.290978 + -0.41875 0.027249 2.82584 -0.0136209 -0.963887 0.265964 + -0.419744 0.045337 2.90591 -0.0571255 -0.974156 0.218534 + -0.723651 0.010684 2.70473 -0.10459 -0.971748 0.211581 + -0.578916 0.01297 2.77557 -0.0522859 -0.963274 0.263381 + -0.417835 0.000743 2.74295 -0.000300291 -0.968764 0.247986 + -0.252623 0.013328 2.77215 0.00742963 -0.973262 0.229576 + -0.253617 0.031415 2.85222 -0.0556276 -0.987708 0.146079 + -0.568876 -0.006835 2.69207 -0.0506149 -0.979906 0.192931 + -0.412647 -0.015497 2.66368 -0.00305939 -0.983551 0.180604 + -0.251053 -0.004567 2.69474 0.0250989 -0.978808 0.203234 + -0.139327 -0.007745 2.68045 0.0573897 -0.991061 0.120432 + -0.140897 0.010143 2.75787 -0.0912459 -0.979674 0.178644 + -0.399308 -0.028286 2.58303 -0.0233685 -0.998705 0.0451859 + -0.245864 -0.020802 2.61547 0.0529546 -0.986704 0.153659 + -0.137669 -0.014182 2.6022 0.111937 -0.988315 0.103456 + -0.086319 0.003583 2.70243 0.0140312 -0.999222 0.0368526 + -0.084593 0.005254 2.78074 -0.139591 -0.98695 0.0802788 + -0.245797 -0.028469 2.53855 0.0323361 -0.999338 0.0166495 + -0.137601 -0.021854 2.52529 0.189968 -0.981789 -0.0016456 + -0.084661 -0.002766 2.62423 0.0693223 -0.996505 0.0466067 + -0.043617 -0.005494 2.63555 -0.372329 -0.928101 0.000368724 + -0.045034 -0.004085 2.71171 -0.40235 -0.914846 0.0342334 + -0.133605 -0.016529 2.44927 0.21348 -0.968449 -0.128582 + -0.080051 -0.001158 2.54624 0.161011 -0.985857 -0.0464948 + -0.039007 -0.003886 2.55757 -0.344754 -0.934951 -0.0837376 + -0.01377 -0.02925 2.6329 -0.323546 -0.945656 -0.0324408 + -0.015187 -0.027839 2.70906 -0.325786 -0.943135 0.0660271 + -0.076054 0.004253 2.47027 0.215494 -0.971138 -0.102244 + -0.036398 0.005475 2.48295 -0.285958 -0.948344 -0.137374 + -0.01377 -0.022748 2.55703 -0.316563 -0.942784 -0.104624 + 0.013768 -0.022748 2.55703 0.31904 -0.942303 -0.101382 + 0.013768 -0.02925 2.6329 0.32558 -0.94486 -0.0351615 + -0.029931 0.017297 2.40708 -0.227768 -0.947469 -0.224554 + -0.01116 -0.013386 2.48242 -0.302209 -0.936814 -0.176206 + 0.011169 -0.013386 2.48242 0.305559 -0.934796 -0.181082 + 0.039005 -0.003886 2.55757 0.342515 -0.936062 -0.0804491 + 0.043615 -0.005498 2.63556 0.370629 -0.928779 -0.00204399 + -0.01116 0.005243 2.40935 -0.265884 -0.930501 -0.251939 + 0.011169 0.005243 2.40935 0.273892 -0.930536 -0.243077 + 0.036407 0.005475 2.48295 0.281456 -0.948855 -0.143028 + 0.080059 -0.001158 2.54624 -0.140097 -0.989657 -0.0308614 + 0.007227 0.024152 2.3404 0.247769 -0.908647 -0.336111 + 0.02994 0.017302 2.40707 0.223806 -0.950036 -0.217585 + 0.069587 0.016073 2.3944 -0.226598 -0.956161 -0.185498 + 0.076054 0.004253 2.47027 -0.219523 -0.97096 -0.0951173 + 0.025998 0.036207 2.33812 0.154177 -0.944426 -0.290325 + 0.05992 0.03462 2.32127 -0.247528 -0.94531 -0.212413 + 0.127574 -0.000582 2.37404 -0.187255 -0.96054 -0.205666 + 0.133604 -0.016529 2.44927 -0.203643 -0.971492 -0.121378 + 0.13761 -0.021854 2.52529 -0.197223 -0.980318 0.00891414 + 0.117906 0.017966 2.30092 -0.154899 -0.948701 -0.275631 + 0.229339 -0.00815 2.38615 0.0517479 -0.961788 -0.268862 + 0.23537 -0.024098 2.46137 -0.00772249 -0.990875 -0.134565 + 0.245797 -0.028469 2.53855 -0.0291239 -0.999364 0.0205959 + 0.137677 -0.014182 2.6022 -0.138502 -0.986774 0.0842314 + 0.198737 0.042713 2.24145 0.0790131 -0.938649 -0.3357 + 0.214261 0.01562 2.31178 0.0905312 -0.93267 -0.349187 + 0.367796 -0.000722 2.43029 0.115602 -0.939701 -0.321868 + 0.388881 -0.023827 2.5059 0.0613183 -0.982643 -0.17508 + 0.399308 -0.028286 2.58303 0.0142192 -0.998566 0.0516119 + 0.331539 0.051209 2.27994 0.100364 -0.937363 -0.333584 + 0.352718 0.023041 2.35593 0.10372 -0.93444 -0.340682 + 0.518198 0.003392 2.45356 0.035725 -0.963758 -0.264377 + 0.539283 -0.019714 2.52918 0.0662853 -0.985258 -0.15771 + 0.555538 -0.019623 2.61142 0.056973 -0.995726 0.072684 + 0.478334 0.050861 2.29834 -0.0256344 -0.965309 -0.259848 + 0.499512 0.022608 2.37428 0.00516555 -0.956491 -0.291716 + 0.675869 -0.000111 2.45303 0.0499337 -0.982121 -0.181507 + 0.686816 -0.008481 2.53812 0.0755558 -0.994653 -0.0704025 + 0.703071 -0.008483 2.62033 0.100154 -0.991217 0.0863581 + 0.637802 0.036659 2.29194 -0.0313835 -0.981711 -0.187772 + 0.657184 0.019105 2.37374 0.00435097 -0.974719 -0.223391 + 0.803247 0.008962 2.48331 0.156777 -0.978263 -0.135727 + 0.814194 0.000593 2.56841 0.11018 -0.99391 0.00170079 + 0.845861 0.012058 2.64355 0.115008 -0.982319 0.147725 + 0.768605 0.034296 2.32323 0.0225806 -0.990275 -0.137281 + 0.787987 0.016661 2.40498 0.162167 -0.96757 -0.193675 + 0.896145 0.022032 2.55048 0.285048 -0.928757 -0.236977 + 0.952262 0.022123 2.61172 0.20575 -0.978294 -0.0246542 + 0.983929 0.03359 2.68686 0.212968 -0.951543 0.221832 + 0.880885 0.02973 2.47214 0.194398 -0.976968 -0.0879949 + 1.03752 0.060968 2.49944 0.23423 -0.967839 -0.0917835 + 1.09364 0.061061 2.56068 0.341591 -0.938987 -0.0402388 + 1.11615 0.079097 2.63903 0.456861 -0.876657 0.150834 + 1.00619 0.064412 2.75787 0.275065 -0.923622 0.26695 + 1.02825 0.056105 2.41526 0.228605 -0.973314 0.0199946 + 1.22639 0.111645 2.32646 0.374927 -0.922438 0.0923994 + 1.22502 0.129205 2.42024 0.429713 -0.896987 0.103732 + 1.24753 0.147325 2.49866 0.491019 -0.863128 0.11794 + 1.35392 0.161294 2.23726 0.465482 -0.882209 0.0709454 + 1.35255 0.178855 2.33105 0.397579 -0.909946 0.118018 + 1.35813 0.192681 2.4271 0.373681 -0.915699 0.147845 + 1.25187 0.169242 2.5913 0.529284 -0.829683 0.177437 + 1.13842 0.10992 2.71005 0.500446 -0.841388 0.204009 + 1.4512 0.206969 2.31095 0.366363 -0.930147 0.0245943 + 1.45678 0.220883 2.40706 0.328811 -0.935288 0.13084 + 1.36247 0.214598 2.51974 0.365674 -0.914245 0.174468 + 1.35254 0.225228 2.60113 0.355286 -0.923857 0.142338 + 1.26171 0.195051 2.6764 0.486274 -0.864128 0.129692 + 1.50397 0.242657 2.18154 0.451819 -0.884025 -0.119834 + 1.5217 0.24162 2.28234 0.434757 -0.899392 -0.0456044 + 1.53175 0.243749 2.36965 0.435367 -0.897784 0.0666279 + 1.459 0.23882 2.50859 0.312116 -0.936378 0.160564 + 1.44907 0.249449 2.58998 0.316463 -0.935557 0.156793 + 1.56516 0.281298 2.16401 0.414802 -0.897318 -0.150865 + 1.57529 0.272073 2.23359 0.384713 -0.91638 -0.110652 + 1.58533 0.274293 2.32094 0.407199 -0.913049 -0.0230182 + 1.53396 0.261693 2.47117 0.32399 -0.939241 0.113384 + 1.4665 0.267522 2.65207 0.343452 -0.91679 0.203806 + 1.5508 0.28849 2.07756 0.423082 -0.894568 -0.144047 + 1.64876 0.321749 2.11335 0.337081 -0.933681 -0.120896 + 1.65888 0.312527 2.18292 0.369771 -0.920408 -0.126962 + 1.66021 0.306524 2.25632 0.379235 -0.922868 -0.0670414 + 1.59423 0.273512 2.3919 0.263957 -0.964513 -0.00646079 + 1.64886 0.328708 2.0401 0.303443 -0.945717 -0.116365 + 1.76637 0.36327 2.04343 0.317971 -0.947264 -0.0398122 + 1.75482 0.359828 2.1202 0.360645 -0.931714 -0.0429499 + 1.75615 0.353735 2.19355 0.373931 -0.922008 -0.100382 + 1.76647 0.370235 1.97017 0.265854 -0.961691 -0.0668771 + 1.86793 0.400675 1.98045 0.314336 -0.948909 0.0276645 + 1.85638 0.397236 2.0572 0.350977 -0.936184 0.0193697 + 1.85669 0.399638 2.13244 0.376879 -0.925698 -0.0323272 + 1.75317 0.342798 2.27029 0.383221 -0.920114 -0.0808235 + 1.86879 0.401352 1.82807 0.171887 -0.98507 0.00964778 + 1.86385 0.395455 1.90469 0.247719 -0.968823 -0.00403978 + 1.94478 0.420302 1.91885 0.238577 -0.966283 0.0968396 + 1.96191 0.434751 1.99342 0.30569 -0.948553 0.0824715 + 1.96222 0.437152 2.06866 0.364602 -0.927875 0.0781899 + 1.86227 0.396727 1.75169 0.0685158 -0.997487 -0.0180336 + 1.9283 0.401439 1.76872 0.0159164 -0.99211 0.124359 + 1.9407 0.415079 1.8431 0.141149 -0.984943 0.099819 + 2.01429 0.419449 1.81933 0.130007 -0.969133 0.209472 + 1.92178 0.396725 1.69229 -0.136905 -0.984372 0.110761 + 1.98152 0.381463 1.66792 -0.17876 -0.959764 0.216558 + 1.99393 0.39519 1.74235 0.00196946 -0.970289 0.241942 + 1.95386 0.34866 1.51534 -0.40336 -0.899508 0.167887 + 1.9663 0.36556 1.59087 -0.268356 -0.930241 0.250272 + 2.01282 0.326943 1.53155 0.00321771 -0.968741 0.248053 + 2.03896 0.355975 1.61187 0.193475 -0.944943 0.263913 + 2.05932 0.380315 1.68891 0.288418 -0.920179 0.264736 + 1.948 0.344573 1.43782 -0.419415 -0.897815 0.134237 + 1.9927 0.303234 1.36722 -0.216156 -0.972486 0.0868707 + 1.9976 0.311036 1.45451 -0.149816 -0.977921 0.145691 + 2.06555 0.327452 1.42387 0.453865 -0.885257 0.101614 + 1.98685 0.299233 1.28975 -0.357079 -0.929721 -0.0900791 + 2.04357 0.304913 1.25091 0.359107 -0.93321 -0.0126455 + 2.04846 0.312631 1.33814 0.398184 -0.915475 0.0579219 + 2.00194 0.314248 1.20674 -0.465474 -0.863371 -0.19474 + 2.05901 0.323441 1.07862 0.301738 -0.952336 -0.0448411 + 2.04391 0.308428 1.16162 0.165733 -0.976004 -0.141239 + 2.10624 0.362893 1.15849 0.574491 -0.815857 -0.0658557 + 2.11922 0.35999 1.24832 0.584053 -0.811367 -0.0237886 + 2.10658 0.366494 1.06925 0.61662 -0.787077 -0.0170255 + 2.18187 0.421666 0.948888 0.549531 -0.835362 -0.0136267 + 2.17853 0.415693 1.04723 0.503162 -0.861917 -0.062667 + 2.30227 0.493861 0.894243 0.593009 -0.804802 -0.025169 + 2.19151 0.412788 1.13706 0.558891 -0.828712 -0.0296052 + 2.1363 0.374728 1.33399 0.612072 -0.789991 0.0358038 + 2.09169 0.356484 1.50419 0.520052 -0.840202 0.153645 + 2.08491 0.41771 1.76634 0.400895 -0.880288 0.253725 + 2.09887 0.44334 1.84355 0.485498 -0.837264 0.251558 + 2.03142 0.433901 1.89389 0.252587 -0.946323 0.201673 + 2.04537 0.459445 1.97105 0.371276 -0.912266 0.172987 + 2.04911 0.470755 2.04646 0.497279 -0.847802 0.184243 + 1.96596 0.448469 2.14407 0.449456 -0.891475 0.0571081 + 1.85372 0.388614 2.20914 0.411948 -0.90918 -0.0607486 + 2.10762 0.50394 2.00259 0.639358 -0.723494 0.26034 + 2.05096 0.495578 2.12347 0.612678 -0.766037 0.194455 + 1.96174 0.44608 2.2196 0.536178 -0.839903 0.0841268 + 1.84949 0.386313 2.28472 0.464605 -0.88401 -0.0516566 + 2.11079 0.542994 2.08414 0.688071 -0.678793 0.256511 + 2.03672 0.499833 2.1991 0.661382 -0.725714 0.189508 + 1.9475 0.45034 2.29522 0.604801 -0.790978 0.0925665 + 2.10428 0.561698 2.16435 0.700684 -0.679434 0.217744 + 2.03022 0.518539 2.2793 0.688775 -0.703435 0.175409 + 1.93746 0.448136 2.37084 0.662402 -0.742008 0.103185 + 1.8517 0.375213 2.36135 0.520052 -0.853017 -0.0436667 + 2.10679 0.59144 2.24863 0.723006 -0.650297 0.233189 + 2.0094 0.513188 2.35317 0.71909 -0.667688 0.192616 + 1.91665 0.442783 2.44471 0.69935 -0.694684 0.168297 + 1.84167 0.373009 2.43697 0.575044 -0.814544 0.0764418 + 1.75909 0.327635 2.42095 0.367097 -0.929696 -0.0300774 + 2.18985 0.64336 2.1567 0.722375 -0.640196 0.261387 + 2.17752 0.67142 2.2417 0.724353 -0.620771 0.299926 + 2.09014 0.602258 2.3281 0.761244 -0.579975 0.290061 + 1.99275 0.524004 2.43263 0.759045 -0.606003 0.237931 + 2.25581 0.731185 2.16119 0.739712 -0.627614 0.242746 + 2.24337 0.743196 2.25178 0.728047 -0.608041 0.316597 + 2.1581 0.695131 2.32363 0.726893 -0.572109 0.379892 + 2.07072 0.626055 2.41008 0.788761 -0.498229 0.360033 + 2.33809 0.811585 2.13373 0.775889 -0.581839 0.243843 + 2.31965 0.836749 2.22674 0.785558 -0.465103 0.408139 + 2.21491 0.766721 2.33263 0.736101 -0.481272 0.475954 + 2.12964 0.71866 2.40448 0.740635 -0.456768 0.492771 + 2.44299 0.898732 1.98359 0.825074 -0.510951 0.241211 + 2.42456 0.923891 2.07661 0.824582 -0.495084 0.273783 + 2.41365 0.955533 2.1768 0.805677 -0.516127 0.290684 + 2.27852 0.865364 2.30618 0.753947 -0.502688 0.422929 + 2.17378 0.795248 2.41202 0.716012 -0.544692 0.43662 + 2.51609 1.00412 1.90324 0.906434 -0.382993 0.178026 + 2.50013 1.00485 1.98979 0.88627 -0.414877 0.205918 + 2.48922 1.03649 2.08999 0.867051 -0.450986 0.211742 + 2.3982 0.9821 2.26839 0.759202 -0.590496 0.273727 + 2.26307 0.891843 2.39772 0.707539 -0.670395 0.223515 + 2.5645 1.13589 1.89522 0.937552 -0.312947 0.151858 + 2.54855 1.13661 1.98176 0.923831 -0.35244 0.149408 + 2.55736 1.17874 2.0464 0.888205 -0.453412 0.0742183 + 2.49803 1.0787 2.15467 0.868311 -0.45539 0.196612 + 2.39503 1.02079 2.36737 0.766934 -0.592084 0.247486 + 2.61058 1.27381 1.93234 0.913306 -0.407036 0.0139468 + 2.57253 1.20236 2.14269 0.847912 -0.525126 0.0727171 + 2.49487 1.11738 2.25367 0.816979 -0.545548 0.186875 + 2.37461 1.04129 2.47787 0.745694 -0.636125 0.198206 + 2.24738 0.891026 2.48613 0.697465 -0.693427 0.180836 + 2.62575 1.29734 2.02858 0.905788 -0.423439 0.01569 + 2.65077 1.36379 2.06668 0.931364 -0.360836 0.0485618 + 2.57453 1.23392 2.24142 0.870335 -0.471684 0.14153 + 2.49688 1.14894 2.35241 0.790432 -0.588937 0.168432 + 2.66678 1.41571 2.12635 0.930563 -0.361042 0.0608322 + 2.59055 1.28584 2.3011 0.884862 -0.436871 0.161748 + 2.47789 1.15753 2.47854 0.800817 -0.552076 0.232175 + 2.35563 1.04979 2.60395 0.721874 -0.618021 0.311366 + 2.22697 0.911444 2.59657 0.710296 -0.635696 0.302276 + 2.76286 1.69898 2.15471 0.924898 -0.372068 0.0782903 + 2.70903 1.55131 2.28208 0.931146 -0.353674 0.0887814 + 2.63475 1.40743 2.3743 0.893463 -0.414586 0.172748 + 2.52209 1.27912 2.55174 0.842105 -0.457189 0.286071 + 2.78184 1.79753 2.44243 0.925221 -0.357334 0.127585 + 2.70756 1.65364 2.53465 0.906463 -0.376509 0.19122 + 2.64147 1.51538 2.56272 0.867698 -0.419687 0.266389 + 2.53871 1.40196 2.66698 0.855162 -0.444665 0.266404 + 2.41932 1.16569 2.65599 0.761665 -0.539585 0.358768 + 2.88684 2.14071 2.57242 0.932067 -0.309508 0.188296 + 2.83049 2.01008 2.62288 0.919731 -0.333562 0.206956 + 2.77132 1.88583 2.67448 0.904144 -0.356213 0.235873 + 2.70523 1.74766 2.70259 0.884542 -0.38671 0.260845 + 2.90666 2.30602 2.7003 0.934483 -0.262375 0.240625 + 2.85299 2.1988 2.7792 0.91438 -0.292627 0.279783 + 2.79381 2.07464 2.83085 0.901854 -0.315692 0.294954 + 2.73262 1.95246 2.88208 0.882984 -0.342887 0.320574 + 2.96667 2.61474 2.76017 0.954485 -0.196217 0.224625 + 2.92343 2.55214 2.87299 0.936017 -0.227377 0.268649 + 2.86976 2.44501 2.95194 0.918081 -0.257978 0.300955 + 2.81471 2.34254 3.02704 0.902224 -0.282631 0.325749 + 3.00339 2.67289 2.63705 0.970403 -0.162995 0.178185 + 2.97642 2.9104 2.94847 0.956962 -0.1669 0.237419 + 2.93318 2.84781 3.06129 0.942228 -0.193862 0.273172 + 2.88402 2.77684 3.17041 0.921825 -0.224337 0.316088 + 2.82897 2.67436 3.24551 0.906141 -0.25235 0.339453 + 3.00934 2.93258 2.81406 0.972651 -0.138453 0.186499 + 3.01648 3.21906 2.97146 0.975071 -0.11567 0.18936 + 2.98356 3.19688 3.10587 0.962453 -0.143341 0.230518 + 2.94526 3.14078 3.22244 0.948179 -0.170598 0.268054 + 2.8961 3.06982 3.33155 0.932595 -0.197519 0.30208 + 3.03511 2.96217 2.67901 0.982085 -0.118509 0.14651 + 3.04144 3.2511 2.84297 0.983367 -0.0948271 0.154909 + 3.01927 3.52656 3.11545 0.978498 -0.0149116 0.205719 + 2.99093 3.47223 3.23235 0.966157 -0.0494565 0.253171 + 2.95263 3.41614 3.34891 0.95105 -0.0763788 0.299451 + 3.0629 3.26618 2.70544 0.989341 -0.0763806 0.123976 + 3.04423 3.55852 2.9869 0.986128 0.00244653 0.165971 + 2.99013 3.85874 3.14489 0.964082 0.163447 0.209359 + 2.9702 3.80311 3.25965 0.957335 0.127249 0.259456 + 2.94185 3.7487 3.3765 0.945998 0.100162 0.308311 + 3.06202 3.59362 2.8587 0.990462 0.0215801 0.136082 + 3.00792 3.89376 3.01664 0.969245 0.167505 0.180294 + 2.88357 4.12758 3.30345 0.921376 0.274884 0.274781 + 2.86363 4.07195 3.41821 0.903764 0.26524 0.335944 + 2.84151 4.00321 3.52207 0.890837 0.242976 0.38389 + 3.02245 3.93634 2.89569 0.970236 0.182804 0.158821 + 2.89556 4.19064 3.19443 0.922974 0.300742 0.240153 + 2.77869 4.4125 3.29715 0.850838 0.436739 0.29212 + 2.76669 4.34953 3.40622 0.835236 0.40272 0.374429 + 2.71836 4.34324 3.50512 0.79382 0.42622 0.433804 + 3.03632 3.96331 2.76538 0.973727 0.180416 0.138948 + 2.91008 4.23313 3.07343 0.924412 0.308683 0.224003 + 2.75332 4.51485 3.20068 0.832435 0.468175 0.296418 + 2.58702 4.62271 3.40426 0.753415 0.53316 0.384844 + 2.53868 4.61643 3.50315 0.740639 0.539317 0.400737 + 3.04793 4.00287 2.62426 0.975742 0.194576 0.100334 + 2.92507 4.27844 2.95516 0.931997 0.296361 0.208689 + 2.76831 4.56016 3.08241 0.838401 0.451904 0.304739 + 2.59133 4.8202 3.1034 0.759681 0.554875 0.339113 + 2.56165 4.72498 3.30773 0.743484 0.551602 0.378109 + 3.04409 4.0802 2.45051 0.976736 0.204721 0.0638477 + 2.93668 4.31809 2.81409 0.943916 0.285296 0.166219 + 2.82002 4.55769 2.95729 0.865283 0.411798 0.285845 + 3.0344 4.15634 2.33024 0.973152 0.228878 0.0242978 + 2.944 4.36891 2.69926 0.945532 0.289744 0.148386 + 2.82734 4.60859 2.84251 0.87868 0.435125 0.196435 + 2.64304 4.81781 2.97834 0.785292 0.538568 0.305387 + 3.01826 4.2199 2.21454 0.972814 0.231584 -0.000810247 + 2.93431 4.44513 2.57904 0.939594 0.320855 0.119229 + 2.7918 4.70423 2.76488 0.857076 0.466827 0.217929 + 2.6075 4.91344 2.9007 0.769773 0.556263 0.313083 + 2.39792 5.14652 2.96539 0.719119 0.603699 0.344114 + 2.99596 4.31437 2.09793 0.970352 0.241258 -0.0145129 + 2.92178 4.51901 2.47688 0.942928 0.316274 0.104198 + 2.77926 4.7781 2.66272 0.853473 0.463221 0.238767 + 2.61275 4.99135 2.73675 0.778012 0.562199 0.280409 + 2.40318 5.22443 2.80145 0.733661 0.604146 0.311045 + 2.97314 4.39094 1.99271 0.970512 0.240119 -0.0212097 + 2.89948 4.61338 2.36022 0.945029 0.318085 0.0757767 + 2.80347 4.81152 2.51723 0.876333 0.438116 0.200233 + 2.63696 5.02486 2.59132 0.788889 0.563776 0.244562 + 2.41336 5.32076 2.59061 0.743277 0.601154 0.293517 + 2.95514 4.4525 1.85547 0.972238 0.230399 -0.0408542 + 2.87809 4.72406 2.17391 0.941433 0.333482 0.0499389 + 2.78208 4.9222 2.33093 0.869906 0.475416 0.131313 + 2.73025 5.03293 2.22795 0.851495 0.517468 0.0847543 + 2.58513 5.13559 2.48833 0.78646 0.567862 0.242929 + 2.92916 4.53973 1.75878 0.966881 0.251215 -0.0450822 + 2.86009 4.78554 2.03663 0.922881 0.385037 -0.00606439 + 2.84193 4.80944 1.90563 0.925108 0.379538 -0.0112586 + 2.71208 5.05683 2.09695 0.874878 0.482649 0.04049 + 2.56369 5.28679 2.23664 0.812925 0.549223 0.19367 + 2.39192 5.47197 2.33891 0.737031 0.616664 0.276605 + 2.70169 5.11875 1.9311 0.889085 0.44734 0.0970254 + 2.55329 5.34863 2.07074 0.828516 0.543798 0.133585 + 2.36036 5.57092 2.18392 0.741282 0.635063 0.217245 + 2.1445 5.69545 2.42503 0.665438 0.6831 0.300943 + 2.33453 5.63576 2.06221 0.747108 0.641041 0.175771 + 2.104 5.84604 2.1598 0.66803 0.701579 0.248037 + 2.11294 5.7944 2.27003 0.663853 0.690611 0.286975 + 2.30026 5.70265 1.96015 0.74683 0.650257 0.139322 + 2.06973 5.91293 2.05774 0.661925 0.709017 0.243206 + 1.8082 6.0823 2.18638 0.566887 0.767757 0.298645 + 1.87858 6.009 2.24893 0.590669 0.761627 0.266522 + 1.88752 5.95737 2.35916 0.585268 0.739929 0.331611 + 2.28482 5.73189 1.88371 0.749847 0.643049 0.155617 + 2.0302 5.98832 1.94595 0.645917 0.736043 0.202563 + 1.76867 6.15769 2.07459 0.558241 0.786444 0.264335 + 1.72022 6.22202 1.95958 0.530466 0.825945 0.190844 + 1.4699 6.27735 2.25855 0.478487 0.824361 0.302455 + 1.50251 6.21269 2.36954 0.49058 0.801251 0.342531 + 1.57288 6.13948 2.43215 0.520422 0.781245 0.344699 + 1.36416 6.39673 2.02638 0.418071 0.884161 0.208509 + 1.42144 6.34167 2.14354 0.438627 0.866187 0.23943 + 1.22438 6.35483 2.39954 0.382326 0.863093 0.329997 + 1.29037 6.45835 1.91044 0.413127 0.888746 0.198635 + 1.08876 6.45985 2.22505 0.337227 0.903197 0.265542 + 1.14603 6.40479 2.34221 0.333728 0.896316 0.291963 + 0.962238 6.36502 2.60049 0.303487 0.866417 0.396505 + 1.25699 6.29017 2.51054 0.416426 0.818026 0.396766 + 1.19721 6.52356 1.8071 0.395743 0.898278 0.191008 + 0.92797 6.57875 2.02669 0.320666 0.914523 0.246619 + 1.02113 6.51363 2.13009 0.335588 0.903247 0.267443 + 0.827272 6.46639 2.46352 0.2759 0.89805 0.342615 + 0.883886 6.41497 2.54317 0.283659 0.880641 0.379486 + 1.50341 6.40817 1.60316 0.481439 0.864822 0.142477 + 1.47639 6.44575 1.47206 0.491586 0.861509 0.127067 + 1.17018 6.56106 1.67595 0.397142 0.903978 0.158438 + 1.03768 6.62266 1.63085 0.354249 0.922635 0.152485 + 1.3745 6.51916 1.34411 0.444843 0.892595 0.0734048 + 1.242 6.58068 1.29897 0.38719 0.919204 0.0717442 + 1.41507 6.51924 1.01858 0.459762 0.887813 0.020166 + 1.10298 6.64171 1.17946 0.347351 0.936704 0.0439558 + 0.911761 6.6831 1.53417 0.316562 0.941743 0.113614 + 1.27606 6.58026 0.899078 0.406722 0.913409 0.016194 + 0.960672 6.69594 1.07172 0.310669 0.950148 0.0265456 + 0.769448 6.73725 1.42637 0.273924 0.95876 0.0757916 + 0.698665 6.70618 1.81299 0.269257 0.941558 0.20241 + 1.34251 6.55074 0.580817 0.451397 0.886043 -0.105678 + 1.19359 6.61972 0.794943 0.361378 0.932412 -0.00367437 + 1.05861 6.66359 0.798562 0.306181 0.951637 -0.025301 + 0.734752 6.76539 0.984238 0.275986 0.961056 0.0142514 + 0.664641 6.76811 1.36752 0.252908 0.965384 0.0638015 + 1.45582 6.44337 0.366384 0.500004 0.834441 -0.231745 + 1.23376 6.59237 0.537905 0.342467 0.923487 -0.172881 + 1.09878 6.63633 0.541574 0.296987 0.943048 -0.149862 + 0.832688 6.73303 0.711083 0.266769 0.960664 -0.0771992 + 0.593452 6.80476 0.946639 0.241569 0.970304 -0.0124353 + 1.28241 6.49882 0.24295 0.391359 0.886621 -0.246457 + 1.17419 6.54288 0.259035 0.314415 0.913465 -0.25831 + 0.979355 6.65734 0.482576 0.267833 0.943903 -0.193167 + 0.837682 6.68236 0.402646 0.22827 0.942763 -0.243087 + 0.691015 6.75805 0.631154 0.240113 0.96354 -0.118057 + 0.571966 6.78465 0.602867 0.157263 0.975067 -0.156566 + 0.474402 6.83137 0.918353 0.173058 0.983976 -0.0429265 + 0.435957 6.83259 1.30843 0.190581 0.979422 0.0664219 + 0.523341 6.80757 1.32997 0.246637 0.965911 0.0786573 + 0.533797 6.77079 1.67088 0.175863 0.975253 0.133994 + 0.496008 6.77776 0.527806 0.133089 0.963008 -0.234315 + 0.371306 6.80834 0.581647 0.114747 0.974147 -0.194603 + 0.321333 6.85039 0.899611 0.0956722 0.993856 -0.0556407 + 0.100983 6.86306 1.27106 0.0305822 0.999006 0.0324287 + 0.282888 6.85153 1.28964 0.0888201 0.995273 0.0392824 + 0.242537 6.83233 1.5989 0.0966845 0.986142 0.134818 + 0.325972 6.80725 1.68334 0.171629 0.965591 0.195392 + 0.413356 6.78223 1.70487 0.172374 0.969258 0.175573 + -0.100983 6.86309 0.880213 -0.0301542 0.997468 -0.0644153 + -0.100983 6.86306 1.27106 -0.0311355 0.999008 0.031849 + -0.060632 6.84387 1.58031 -0.0238566 0.991803 0.125525 + 0.060632 6.84387 1.58031 0.023854 0.991803 0.125527 + -0.321333 6.85039 0.899611 -0.0952661 0.993922 -0.0551612 + -0.282888 6.85153 1.28964 -0.0884482 0.99533 0.0386617 + -0.242537 6.83233 1.5989 -0.0966814 0.986149 0.134768 + -0.060632 6.77963 1.91316 -0.0333648 0.975356 0.218101 + 0.060632 6.77963 1.91316 0.0331918 0.975788 0.216185 + -0.474402 6.83137 0.918353 -0.174478 0.983844 -0.0400988 + -0.435957 6.83259 1.30843 -0.19441 0.978914 0.0626998 + -0.325972 6.80725 1.68334 -0.166641 0.969998 0.177017 + -0.144067 6.75447 1.99756 -0.0560148 0.970728 0.23356 + 0.050108 6.70567 2.20727 0.0191598 0.94888 0.315055 + -0.571968 6.78465 0.602867 -0.165925 0.972859 -0.16129 + -0.593452 6.80476 0.946639 -0.238817 0.971014 -0.00991598 + -0.523341 6.80757 1.32997 -0.2448 0.966687 0.0747638 + -0.413356 6.78223 1.70487 -0.184286 0.968488 0.16754 + -0.294177 6.73724 2.02838 -0.116182 0.964747 0.236148 + -0.691017 6.75805 0.631154 -0.234265 0.962265 -0.138439 + -0.832686 6.73303 0.711083 -0.274443 0.958242 -0.0803349 + -0.734753 6.76539 0.984238 -0.275625 0.961175 0.0131982 + -0.664642 6.76811 1.36752 -0.2502 0.965978 0.0654683 + -0.533797 6.77079 1.67088 -0.175863 0.975253 0.133995 + -0.979353 6.65735 0.482567 -0.273644 0.946061 -0.17346 + -1.05861 6.66359 0.798562 -0.302155 0.952641 -0.0343206 + -0.960673 6.69594 1.07172 -0.311622 0.949848 0.0260678 + -0.769449 6.73725 1.42637 -0.274441 0.958434 0.0780185 + -0.638605 6.73993 1.72974 -0.250156 0.954856 0.160226 + -1.09878 6.63633 0.541574 -0.276758 0.950898 -0.138558 + -1.23376 6.59237 0.537905 -0.342433 0.923507 -0.172844 + -1.19359 6.61972 0.794943 -0.361331 0.93243 -0.00374486 + -1.17419 6.54288 0.259035 -0.310508 0.912125 -0.267606 + -1.28241 6.49882 0.24295 -0.39136 0.886621 -0.246455 + -1.34707 6.48501 0.323472 -0.424825 0.876972 -0.224598 + -1.34251 6.55074 0.580817 -0.451397 0.886043 -0.10568 + -1.42498 6.51129 0.684952 -0.49995 0.864578 -0.050538 + -1.22271 6.41721 -0.052703 -0.252991 0.892369 -0.373729 + -1.33093 6.37315 -0.068788 -0.368897 0.852815 -0.369623 + -1.44807 6.32948 -0.029744 -0.486297 0.810333 -0.326919 + -1.51273 6.31567 0.050778 -0.551009 0.792421 -0.261646 + -1.45582 6.44337 0.366384 -0.504725 0.837727 -0.208485 + -1.25933 6.30343 -0.25822 -0.296176 0.796449 -0.527209 + -1.38258 6.26348 -0.226426 -0.417446 0.756406 -0.503576 + -1.49973 6.2198 -0.187381 -0.500136 0.727892 -0.469082 + -1.60914 6.16113 -0.145152 -0.587997 0.696925 -0.410556 + -1.61436 6.25035 0.099903 -0.599716 0.759521 -0.251929 + -1.41123 6.15387 -0.342177 -0.436526 0.669571 -0.600932 + -1.53005 6.08995 -0.313864 -0.514859 0.636253 -0.574545 + -1.63947 6.03127 -0.271635 -0.585603 0.608756 -0.535242 + -1.55406 5.9805 -0.404688 -0.506626 0.564371 -0.651778 + -1.55972 6.38729 0.440731 -0.571692 0.803866 -0.164217 + -1.71826 6.19427 0.17425 -0.636188 0.735213 -0.233939 + -0.911762 6.6831 1.53417 -0.320456 0.940593 0.112216 + -0.824584 6.64574 1.90967 -0.340674 0.910563 0.234127 + -0.698665 6.70618 1.81299 -0.269471 0.942128 0.199449 + -0.414618 6.72581 1.99439 -0.172457 0.958678 0.226262 + -0.822126 6.61587 2.016 -0.296806 0.916931 0.266727 + -0.531952 6.66896 2.12045 -0.216813 0.939927 0.263683 + -0.474679 6.69206 2.07765 -0.18791 0.948779 0.253983 + -0.269292 6.67497 2.26263 -0.0982188 0.937131 0.334871 + -0.200218 6.68836 2.23805 -0.0539781 0.943883 0.325838 + -0.581012 6.59979 2.28966 -0.258779 0.903052 0.342826 + -0.529493 6.63918 2.22683 -0.206439 0.928025 0.310086 + -0.349068 6.61759 2.37783 -0.140586 0.909918 0.390237 + -0.326565 6.65188 2.30544 -0.147469 0.921502 0.359285 + -0.686856 6.56267 2.30035 -0.269102 0.911541 0.31093 + -0.499961 6.55393 2.46969 -0.173136 0.921233 0.348358 + -0.400587 6.57829 2.44071 -0.159405 0.911399 0.379396 + -0.572748 6.51135 2.53785 -0.227197 0.897176 0.378757 + -0.373621 6.51423 2.60505 -0.120892 0.903409 0.411385 + -0.274247 6.53868 2.5761 -0.0639589 0.911777 0.405674 + -0.141685 6.57025 2.50863 -0.0249631 0.911647 0.410215 + -0.119182 6.60453 2.43624 -0.0373573 0.909668 0.413653 + -0.388277 6.47524 2.68259 -0.121005 0.897519 0.42405 + -0.176785 6.43005 2.81825 -0.0228194 0.905372 0.424005 + -0.044223 6.46171 2.75082 -0.000832044 0.906535 0.42213 + 0.044223 6.46171 2.75082 0.000973426 0.905695 0.423929 + -0.050108 6.61792 2.41166 -0.0153402 0.913002 0.407666 + -0.233666 6.40344 2.87116 -0.0584052 0.901238 0.429371 + -0.044223 6.18267 3.32274 -0.00301525 0.895771 0.444507 + 0.044223 6.18267 3.32274 -0.000375389 0.883408 0.468604 + -0.101104 6.15596 3.37559 -0.0433475 0.880086 0.472831 + -0.124475 6.09432 3.48496 -0.0505963 0.858728 0.509928 + -0.14305 6.0222 3.60207 -0.0458803 0.838137 0.543526 + -0.136385 5.89102 3.79808 -0.0231056 0.815036 0.578949 + -0.096861 5.82595 3.88378 -0.00610063 0.798814 0.601546 + -0.033595 5.77673 3.94804 -0.0139803 0.7893 0.613849 + 0.033595 5.77673 3.94804 0.0141317 0.790106 0.612808 + 0.096861 5.82595 3.88378 -0.000654557 0.802035 0.597277 + 0.136385 5.89102 3.79808 0.00216317 0.818883 0.573956 + 0.148623 5.95613 3.70132 0.0301867 0.834556 0.550095 + 0.143051 6.0222 3.60207 -0.0164265 0.836582 0.547595 + 0.124475 6.09432 3.48496 -0.00245258 0.855128 0.518411 + 0.101105 6.15596 3.37559 0.0263383 0.877671 0.478539 + 0.176785 6.43005 2.81825 0.0228409 0.905335 0.424085 + -0.286638 5.61296 4.1119 -0.106085 0.761138 0.639855 + -0.197655 5.49568 4.26263 -0.0848229 0.748889 0.657245 + -0.134389 5.44638 4.32683 -0.0988236 0.7263 0.680237 + -0.033595 5.41581 4.36878 -0.0330103 0.725782 0.687132 + 0.033595 5.41581 4.36878 0.0330103 0.725782 0.687132 + -0.288186 5.27331 4.49538 -0.0325709 0.704378 0.709077 + -0.237468 5.2187 4.54617 -0.0183962 0.672358 0.739997 + -0.158013 5.22322 4.54455 -0.0644347 0.680698 0.729725 + -0.057219 5.19265 4.58649 -0.0441369 0.651127 0.757684 + -0.375693 5.11286 4.63109 -0.125624 0.626574 0.769171 + -0.324975 5.05817 4.68183 -0.0774454 0.606328 0.791435 + -0.257627 4.99574 4.73155 -0.0446107 0.574868 0.817029 + -0.178172 5.00026 4.72992 -0.00741539 0.578774 0.815455 + -0.551165 4.9418 4.71679 -0.210525 0.561817 0.800025 + -0.449579 4.90913 4.76317 -0.164434 0.535735 0.82822 + -0.38223 4.84671 4.81289 -0.136734 0.522014 0.841905 + -0.332603 4.78451 4.85881 -0.0824376 0.486759 0.869638 + -0.203725 4.79747 4.85657 -0.00671893 0.478783 0.877908 + -0.855362 4.85492 4.68866 -0.282521 0.544077 0.790039 + -0.770678 4.77739 4.76376 -0.247181 0.491926 0.834812 + -0.669092 4.74481 4.81019 -0.23065 0.485812 0.843082 + -0.572613 4.68144 4.87434 -0.217462 0.483731 0.84777 + -0.522986 4.61924 4.92026 -0.175539 0.407963 0.895964 + -1.07525 4.67905 4.71547 -0.319774 0.496196 0.807176 + -0.990563 4.60152 4.79056 -0.277527 0.448864 0.849411 + -0.88492 4.49976 4.87041 -0.266447 0.430218 0.862507 + -0.788441 4.43648 4.93462 -0.225488 0.36933 0.901527 + -1.33951 4.45427 4.74201 -0.37003 0.442199 0.81703 + -1.22576 4.32411 4.85146 -0.321498 0.388917 0.863355 + -1.12011 4.22243 4.93136 -0.275099 0.33054 0.902809 + -1.55192 4.20397 4.75893 -0.425889 0.36072 0.829759 + -1.43817 4.07381 4.86839 -0.37616 0.307449 0.874059 + -1.33197 3.94823 4.94689 -0.323093 0.246229 0.913774 + -1.0017 4.09007 5.00022 -0.214451 0.252546 0.943521 + -1.73573 3.92518 4.76543 -0.498636 0.260969 0.826594 + -1.65182 3.80226 4.84653 -0.456603 0.201046 0.866657 + -1.54562 3.67677 4.92508 -0.406468 0.136203 0.903456 + -1.21356 3.81596 5.0158 -0.253457 0.185034 0.949485 + -1.91851 3.68226 4.70637 -0.571773 0.150984 0.806399 + -1.8346 3.55934 4.78748 -0.524896 0.090492 0.846342 + -1.80006 3.43825 4.8144 -0.519398 0.0106398 0.854466 + -1.70185 3.41556 4.86911 -0.46405 0.011331 0.885737 + -1.42499 3.56737 4.98257 -0.348271 0.0874058 0.93331 + -2.08087 3.45036 4.60384 -0.656406 -0.0199555 0.754144 + -2.00319 3.36563 4.66239 -0.645437 -0.0447652 0.7625 + -1.96864 3.24454 4.68932 -0.671268 -0.0820945 0.736654 + -1.89171 3.14942 4.73467 -0.571543 -0.156056 0.805596 + -1.79349 3.12682 4.78942 -0.495968 -0.163429 0.852823 + -2.21668 3.16849 4.43025 -0.69954 -0.16886 0.694356 + -2.13899 3.08376 4.4888 -0.69583 -0.186715 0.693512 + -2.05366 3.01292 4.5517 -0.686012 -0.20679 0.697585 + -1.97672 2.9178 4.59705 -0.65711 -0.255404 0.709207 + -1.87899 2.85807 4.65711 -0.571738 -0.287899 0.768265 + -2.23071 2.75267 4.26706 -0.705719 -0.266491 0.656463 + -2.14538 2.68183 4.32996 -0.688711 -0.285678 0.666382 + -2.04499 2.64384 4.41137 -0.652489 -0.309448 0.691737 + -1.94726 2.5841 4.47144 -0.605363 -0.340779 0.719309 + -2.2638 2.40369 4.07712 -0.703425 -0.309465 0.639863 + -2.16569 2.34754 4.15417 -0.680711 -0.320905 0.658523 + -2.06529 2.30954 4.23558 -0.647659 -0.3342 0.684725 + -1.95764 2.27166 4.3132 -0.60289 -0.347635 0.718104 + -1.83623 2.54914 4.541 -0.554325 -0.360572 0.750141 + -2.13287 1.98865 4.00359 -0.679998 -0.357046 0.640407 + -2.02705 1.9426 4.08575 -0.647034 -0.363228 0.670383 + -1.9194 1.90472 4.16336 -0.609956 -0.367102 0.702275 + -1.80501 1.87262 4.24177 -0.577531 -0.366554 0.729449 + -1.8466 2.2367 4.38276 -0.566467 -0.355253 0.743579 + -1.98256 1.64831 3.95749 -0.654883 -0.411626 0.633792 + -1.87276 1.60828 4.04202 -0.622294 -0.40827 0.667882 + -1.75837 1.57617 4.12042 -0.594053 -0.396851 0.699722 + -1.64331 1.53754 4.19673 -0.571927 -0.388873 0.722272 + -1.69093 1.83115 4.30698 -0.550829 -0.362976 0.751555 + -1.81817 1.38522 3.94096 -0.643166 -0.457579 0.613969 + -1.70767 1.33952 4.02331 -0.623372 -0.439719 0.646571 + -1.59261 1.30081 4.09957 -0.596504 -0.417843 0.685266 + -1.47608 1.25865 4.17559 -0.577431 -0.406186 0.708228 + -1.52366 1.5029 4.26593 -0.552043 -0.375918 0.744267 + -1.57128 1.79651 4.37618 -0.520854 -0.35673 0.775535 + -1.73252 2.19524 4.44797 -0.536168 -0.356916 0.764941 + -1.44158 1.0534 4.07769 -0.590086 -0.436629 0.679083 + -1.32338 1.02894 4.16285 -0.563054 -0.437388 0.701186 + -1.35746 1.22365 4.248 -0.558534 -0.397408 0.728084 + -1.40504 1.46782 4.33829 -0.549269 -0.363803 0.752297 + -1.3033 0.865423 4.07208 -0.540708 -0.525265 0.657063 + -1.17891 0.862822 4.16378 -0.500702 -0.532997 0.682064 + -1.2026 1.0051 4.24194 -0.530501 -0.446044 0.720842 + -1.23668 1.19981 4.3271 -0.529513 -0.393947 0.75128 + -1.12057 0.718627 4.07593 -0.452997 -0.630202 0.630587 + -1.00324 0.698969 4.13638 -0.417269 -0.645693 0.639506 + -1.05235 0.848683 4.24327 -0.460874 -0.549519 0.696867 + -1.07604 0.990964 4.32143 -0.496606 -0.450763 0.741751 + -0.902619 0.527941 4.01681 -0.342193 -0.679927 0.648539 + -0.823602 0.487744 4.00924 -0.312669 -0.706346 0.63507 + -0.870688 0.690466 4.21011 -0.346131 -0.651755 0.67484 + -0.919796 0.840262 4.31706 -0.395413 -0.570516 0.719833 + -0.870557 0.401885 3.88975 -0.376331 -0.732886 0.566792 + -0.79154 0.361685 3.88218 -0.308815 -0.748816 0.586436 + -0.684415 0.310778 3.87075 -0.315437 -0.755333 0.574432 + -0.698136 0.433094 4.01169 -0.310837 -0.717754 0.623064 + -0.745222 0.635818 4.21257 -0.29312 -0.676987 0.675107 + -0.700396 0.270386 3.80211 -0.346508 -0.848789 0.399361 + -0.546162 0.240623 3.85626 -0.231824 -0.813878 0.532785 + -0.559883 0.362934 3.99721 -0.236413 -0.730003 0.641253 + -0.713744 0.250686 3.72123 -0.369742 -0.907429 0.199658 + -0.567089 0.212172 3.77694 -0.293639 -0.897084 0.330176 + -0.405594 0.146043 3.72688 -0.245452 -0.920474 0.304107 + -0.384667 0.174489 3.80621 -0.151287 -0.855381 0.495415 + -0.724983 0.245138 3.63444 -0.376323 -0.921602 0.0950334 + -0.580437 0.192389 3.69601 -0.330343 -0.9276 0.174448 + -0.419806 0.130899 3.64511 -0.305112 -0.940942 0.14675 + -0.222854 0.076814 3.64279 -0.260964 -0.916226 0.304019 + -0.727814 0.237982 3.54944 -0.362894 -0.925756 0.106225 + -0.579758 0.186964 3.61221 -0.346074 -0.9356 0.0698891 + -0.419127 0.125386 3.56126 -0.333597 -0.94194 0.0382462 + -0.237066 0.061669 3.56102 -0.337644 -0.936637 0.0933161 + -0.731078 0.228144 3.46168 -0.353132 -0.928178 0.117401 + -0.582589 0.17972 3.52715 -0.328464 -0.940223 0.0899577 + -0.41847 0.122742 3.48064 -0.307707 -0.949606 0.0597099 + -0.235534 0.064179 3.48367 -0.346292 -0.937974 -0.0169581 + -0.729601 0.216277 3.37663 -0.325913 -0.931132 0.163626 + -0.579692 0.171394 3.44337 -0.316242 -0.943453 0.099434 + -0.415573 0.114329 3.39681 -0.291532 -0.954205 0.0670897 + -0.234877 0.061445 3.40301 -0.287831 -0.95746 0.0206024 + -0.728382 0.197971 3.28954 -0.300918 -0.931631 0.203743 + -0.578215 0.159527 3.35832 -0.290687 -0.948393 0.126698 + -0.416776 0.109762 3.31652 -0.265352 -0.959941 0.0900068 + -0.240011 0.062836 3.3258 -0.268919 -0.962853 0.0244205 + -0.727645 0.176995 3.20547 -0.240519 -0.908464 0.341826 + -0.572743 0.148067 3.27457 -0.261168 -0.951636 0.161806 + -0.411303 0.098302 3.23277 -0.246099 -0.964385 0.096937 + -0.241214 0.058268 3.24551 -0.232564 -0.971402 0.0478737 + -0.731737 0.138056 3.12391 -0.183317 -0.917877 0.351989 + -0.572005 0.127007 3.19045 -0.192548 -0.954332 0.228419 + -0.413808 0.091427 3.15228 -0.197864 -0.970177 0.14002 + -0.251182 0.05854 3.16844 -0.213808 -0.975344 0.0546902 + -0.571155 0.111987 3.10727 -0.135003 -0.963711 0.230294 + -0.412958 0.07632 3.06904 -0.164885 -0.97552 0.145512 + -0.253687 0.051659 3.08796 -0.17859 -0.981442 0.0698416 + -0.136247 0.029047 3.06873 -0.177746 -0.983472 0.0344942 + -0.128314 0.029368 3.14517 -0.192969 -0.980971 0.0213986 + -0.41457 0.065308 2.98852 -0.0994723 -0.975113 0.198139 + -0.257193 0.049803 3.01057 -0.147046 -0.985872 0.0802129 + -0.139753 0.0271 2.9913 -0.176826 -0.983373 0.0413576 + -0.057365 0.016899 3.09136 -0.189413 -0.981345 0.0329282 + -0.049432 0.017313 3.16785 -0.220177 -0.975448 0.00477787 + -0.258805 0.038703 2.93 -0.094602 -0.987831 0.123453 + -0.144791 0.024377 2.91461 -0.154305 -0.985154 0.075238 + -0.067193 0.015366 3.01382 -0.194394 -0.979884 0.0451481 + -0.022521 0.005565 3.0174 -0.234458 -0.971898 0.0210687 + -0.012693 0.007103 3.09493 -0.545909 -0.836837 0.0410699 + -0.139603 0.017087 2.83684 -0.121366 -0.989332 0.0805702 + -0.072231 0.012645 2.93713 -0.189703 -0.980776 0.0457299 + -0.028391 0.003156 2.93997 -0.208115 -0.977209 0.0418421 + -0.005468 0.001829 3.01207 -0.105693 -0.994375 -0.0068918 + -0.005468 -0.002888 3.08724 -0.415117 -0.909698 0.011265 + -0.083299 0.012198 2.85971 -0.15622 -0.986313 0.0527342 + -0.03946 0.002704 2.86255 -0.327407 -0.941418 0.0808473 + -0.011338 -0.000585 2.93465 -0.122615 -0.989707 0.0738005 + 0.005478 0.001819 3.01208 0.104796 -0.99447 -0.00693339 + -0.043309 -0.002418 2.79002 -0.336811 -0.939596 0.0609669 + -0.011338 -0.012557 2.85838 -0.232525 -0.965861 0.114213 + 0.011342 -0.012567 2.8584 0.224626 -0.969097 0.101952 + 0.011342 -0.000595 2.93466 0.0928812 -0.990405 0.102329 + -0.015187 -0.017678 2.78586 -0.259508 -0.961864 0.0864487 + 0.015202 -0.017673 2.78585 0.243163 -0.964262 0.105216 + 0.039464 0.002694 2.86257 0.339633 -0.938111 0.0678075 + 0.028396 0.003146 2.93999 0.219049 -0.973626 0.063803 + 0.022531 0.005555 3.01741 0.234615 -0.971859 0.0211035 + 0.015202 -0.027834 2.70905 0.317365 -0.946797 0.0534323 + 0.043324 -0.002408 2.79001 0.346204 -0.935126 0.0753743 + 0.083303 0.012198 2.85971 0.172472 -0.982808 0.0658886 + 0.072235 0.012645 2.93713 0.193501 -0.980241 0.0410494 + 0.067193 0.015366 3.01382 0.192719 -0.980283 0.0436479 + 0.045049 -0.00408 2.7117 0.413914 -0.910105 0.0195777 + 0.086319 0.003583 2.70243 0.0410699 -0.996078 0.0783683 + 0.084593 0.005254 2.78074 0.153332 -0.986439 0.0585433 + 0.139607 0.017087 2.83684 0.117096 -0.98928 0.0872591 + 0.144795 0.024377 2.91461 0.144259 -0.987215 0.0677871 + 0.084669 -0.002766 2.62423 -0.0617981 -0.997488 0.0346231 + 0.139327 -0.007745 2.68045 -0.0714778 -0.987192 0.142629 + 0.140897 0.010143 2.75787 0.0428646 -0.988731 0.143434 + 0.253621 0.03142 2.85222 0.0631227 -0.985984 0.15444 + 0.251053 -0.004552 2.69472 -0.0205557 -0.977852 0.208287 + 0.252623 0.013338 2.77213 0.00454647 -0.974858 0.222781 + 0.419748 0.045343 2.9059 0.0382705 -0.972933 0.227898 + 0.414573 0.065225 2.98846 0.0925768 -0.977508 0.189494 + 0.258808 0.038709 2.92999 0.119044 -0.986881 0.109061 + 0.245864 -0.020802 2.61547 -0.0450001 -0.987796 0.149111 + 0.417835 0.000753 2.74293 -0.0102218 -0.967138 0.254046 + 0.41875 0.027259 2.82582 0.009627 -0.965158 0.26149 + 0.579673 0.064888 2.94204 0.0597813 -0.960795 0.270737 + 0.412647 -0.015497 2.66368 0.000161769 -0.984052 0.177879 + 0.578916 0.01297 2.77557 0.0462489 -0.96505 0.257953 + 0.579831 0.039477 2.85846 0.0267341 -0.954405 0.297314 + 0.568876 -0.006835 2.69207 0.058004 -0.980775 0.186324 + 0.733691 0.030489 2.78823 0.118975 -0.968217 0.220002 + 0.740988 0.051478 2.87467 0.10199 -0.958757 0.265297 + 0.740831 0.076886 2.95827 0.0930372 -0.937445 0.335471 + 0.723651 0.010684 2.70473 0.100899 -0.972782 0.2086 + 0.878345 0.056773 2.8081 0.161779 -0.952639 0.257502 + 0.885642 0.077761 2.89455 0.209306 -0.940553 0.26749 + 0.879242 0.105538 2.97704 0.190034 -0.918028 0.348011 + 0.735081 0.110928 3.0413 0.12501 -0.929839 0.346081 + 0.866441 0.031135 2.72791 0.14127 -0.962327 0.232314 + 1.0181 0.09005 2.83806 0.288674 -0.901849 0.321459 + 1.00819 0.121292 2.91955 0.309697 -0.893407 0.325442 + 1.00179 0.149068 3.00204 0.31055 -0.888948 0.336645 + 1.14825 0.135812 2.7952 0.477761 -0.836376 0.268737 + 1.13835 0.167054 2.87669 0.43871 -0.847828 0.29786 + 1.1375 0.190275 2.96227 0.404007 -0.865537 0.296013 + 0.987585 0.174579 3.08026 0.277919 -0.88612 0.370879 + 0.873492 0.139581 3.06007 0.171449 -0.904088 0.391445 + 1.27729 0.20953 2.76852 0.447254 -0.87839 0.168505 + 1.27644 0.232753 2.85409 0.419725 -0.880691 0.219577 + 1.27815 0.254457 2.9473 0.433511 -0.860289 0.268275 + 1.12329 0.215782 3.04049 0.383657 -0.865379 0.322376 + 1.36812 0.239706 2.69325 0.35387 -0.92621 0.130043 + 1.38555 0.257779 2.75535 0.401543 -0.894754 0.195395 + 1.38726 0.279569 2.84861 0.415337 -0.884371 0.213033 + 1.25862 0.275212 3.03255 0.34458 -0.911028 0.226479 + 1.10376 0.236451 3.12569 0.337351 -0.862155 0.377999 + 1.45865 0.292208 2.75412 0.377058 -0.897711 0.227907 + 1.43366 0.302875 2.84704 0.498047 -0.835579 0.231855 + 1.36228 0.290151 2.94148 0.369389 -0.907805 0.198601 + 1.22725 0.281244 3.12211 0.336045 -0.900284 0.2767 + 1.53776 0.278788 2.59336 0.289635 -0.937107 0.194788 + 1.52991 0.303479 2.69539 0.263006 -0.938207 0.224936 + 1.52448 0.322081 2.78258 0.239668 -0.947407 0.212085 + 1.43646 0.319034 2.89445 0.402411 -0.886375 0.228921 + 1.3309 0.296182 3.03103 0.391174 -0.893738 0.219579 + 1.55052 0.27074 2.5231 0.251055 -0.961182 0.114455 + 1.60411 0.296972 2.58606 0.255773 -0.952171 0.167186 + 1.60493 0.308399 2.65827 0.215367 -0.958995 0.184244 + 1.5995 0.32692 2.74539 0.244897 -0.9413 0.232335 + 1.61079 0.282559 2.44383 0.307897 -0.949251 0.0641983 + 1.61687 0.289009 2.51586 0.288656 -0.95256 0.0964765 + 1.68044 0.311601 2.54813 0.280225 -0.954062 0.106022 + 1.68126 0.323028 2.62033 0.290887 -0.93879 0.184549 + 1.67697 0.338785 2.69304 0.347961 -0.902702 0.253084 + 1.67283 0.301677 2.40131 0.326744 -0.944974 -0.0162184 + 1.67891 0.30813 2.47334 0.294815 -0.954304 0.0488664 + 1.76063 0.331107 2.49574 0.393415 -0.916542 0.0719432 + 1.75666 0.338295 2.57209 0.421724 -0.892274 0.161231 + 1.75237 0.35405 2.6448 0.473063 -0.833312 0.286012 + 1.66911 0.305741 2.32728 0.358539 -0.931453 -0.0620026 + 1.75689 0.338735 2.34433 0.370444 -0.922719 -0.106588 + 1.8377 0.380109 2.51327 0.619263 -0.770963 0.14876 + 1.90183 0.448913 2.5195 0.720918 -0.663364 0.200564 + 1.82288 0.386233 2.58806 0.629101 -0.736658 0.248124 + 1.74226 0.381653 2.72039 0.523959 -0.785853 0.328483 + 1.67252 0.357199 2.76395 0.407948 -0.861818 0.301411 + 1.59506 0.345333 2.8163 0.318901 -0.905614 0.27958 + 1.88033 0.447599 2.59177 0.735914 -0.618859 0.274672 + 1.81277 0.413835 2.66365 0.638111 -0.697144 0.326811 + 1.80017 0.435389 2.73712 0.64469 -0.686637 0.336012 + 1.73703 0.409576 2.79283 0.551789 -0.754433 0.355471 + 1.66729 0.385121 2.83638 0.460618 -0.814041 0.353791 + 1.97125 0.522689 2.50491 0.783444 -0.544054 0.300367 + 1.94391 0.538627 2.57991 0.824773 -0.422136 0.376233 + 1.86774 0.469151 2.66524 0.74995 -0.572201 0.331906 + 2.04338 0.641992 2.48507 0.8003 -0.356393 0.482186 + 2.00156 0.671104 2.55665 0.815761 -0.367652 0.446504 + 1.9252 0.559805 2.65102 0.853673 -0.381397 0.354654 + 1.84902 0.490325 2.73637 0.765963 -0.540033 0.348804 + 2.08783 0.747855 2.47611 0.728122 -0.512401 0.455283 + 2.05961 0.759091 2.55805 0.676199 -0.714293 0.180389 + 1.97589 0.68658 2.63224 0.807879 -0.554937 0.198437 + 1.89952 0.575276 2.72663 0.835641 -0.416735 0.35782 + 2.14557 0.806572 2.49401 0.636439 -0.741605 0.212056 + 2.12988 0.805667 2.58238 0.633329 -0.758526 0.153404 + 2.04427 0.746279 2.64364 0.668605 -0.734754 0.114475 + 1.96054 0.673768 2.71784 0.776055 -0.602021 0.187908 + 2.12532 0.8343 2.67978 0.703705 -0.635687 0.317335 + 2.03971 0.774912 2.74105 0.727287 -0.637899 0.253256 + 1.97095 0.723982 2.81546 0.73085 -0.638748 0.240539 + 1.88301 0.61507 2.7967 0.801144 -0.499889 0.329058 + 2.1098 0.896364 2.79808 0.781095 -0.582923 0.22381 + 2.07563 0.857085 2.85552 0.770821 -0.608836 0.187495 + 2.00687 0.806154 2.92993 0.730264 -0.637064 0.246706 + 1.89342 0.665197 2.89428 0.740708 -0.622613 0.252396 + 1.82403 0.563674 2.87752 0.818069 -0.479014 0.318289 + 2.21145 0.973508 2.71487 0.709761 -0.578447 0.402042 + 2.27515 1.08941 2.76691 0.716988 -0.627549 0.303496 + 2.20761 1.03299 2.84985 0.757698 -0.64678 0.087003 + 2.17343 0.993706 2.90729 0.755539 -0.640832 0.135995 + 2.4665 1.2873 2.72756 0.824175 -0.499171 0.267515 + 2.39896 1.23088 2.81049 0.780419 -0.592657 0.19926 + 2.31753 1.15141 2.90992 0.768974 -0.608232 0.196809 + 2.2371 1.09047 2.99829 0.727608 -0.602398 0.328182 + 2.093 0.932672 2.9956 0.73203 -0.621668 0.278677 + 2.63704 1.62676 2.7512 0.879415 -0.415083 0.233099 + 2.56483 1.51211 2.81178 0.861252 -0.429022 0.272368 + 2.48791 1.4137 2.88484 0.839807 -0.455684 0.295089 + 2.40648 1.33423 2.98427 0.816887 -0.464329 0.342191 + 2.66443 1.83164 2.93074 0.862754 -0.373821 0.34046 + 2.58932 1.72218 2.99012 0.848903 -0.385681 0.361406 + 2.5124 1.62377 3.06318 0.837052 -0.398514 0.374873 + 2.43139 1.53416 3.14119 0.817052 -0.414312 0.400963 + 2.75351 2.22044 3.07832 0.887369 -0.304368 0.34632 + 2.69228 2.10032 3.12978 0.872048 -0.335766 0.356081 + 2.61717 1.99095 3.18921 0.856066 -0.360912 0.369992 + 2.54987 1.87835 3.24403 0.852742 -0.377318 0.361196 + 2.7715 2.56331 3.31005 0.888469 -0.275229 0.367249 + 2.71027 2.44319 3.36151 0.897166 -0.27624 0.344651 + 2.65797 2.31693 3.40519 0.882 -0.30097 0.362619 + 2.59067 2.20433 3.46002 0.873434 -0.322625 0.364728 + 2.84745 2.98667 3.42657 0.919023 -0.228203 0.321433 + 2.78998 2.87553 3.49106 0.902217 -0.25822 0.345438 + 2.73795 2.76963 3.5519 0.903081 -0.256803 0.344235 + 2.68565 2.64337 3.59557 0.885822 -0.270075 0.377331 + 2.86219 3.25922 3.54671 0.931082 -0.125918 0.342391 + 2.81782 3.17507 3.64045 0.908045 -0.161303 0.386569 + 2.76579 3.06917 3.70128 0.871917 -0.220282 0.437307 + 2.71231 2.98091 3.75194 0.846006 -0.23613 0.478034 + 2.91085 3.34236 3.45169 0.932995 -0.109232 0.342912 + 2.86882 3.6075 3.58566 0.918821 0.0191131 0.394212 + 2.82858 3.53202 3.684 0.915992 0.00166416 0.401192 + 2.78421 3.44796 3.7778 0.893693 -0.0386005 0.447016 + 2.73363 3.37131 3.86196 0.849296 -0.103629 0.517646 + 2.91061 3.68128 3.48288 0.932271 0.0574913 0.357162 + 2.77752 3.86569 3.72906 0.869644 0.183478 0.458317 + 2.73728 3.79021 3.8274 0.860969 0.157561 0.48364 + 2.69578 3.71683 3.92249 0.839304 0.117564 0.530798 + 2.64521 3.64027 4.0067 0.825363 0.0655243 0.560787 + 2.81027 3.93579 3.62845 0.881263 0.221044 0.417749 + 2.65981 4.2023 3.73764 0.800813 0.365353 0.474568 + 2.62706 4.1322 3.83826 0.788217 0.33311 0.517447 + 2.57458 4.05159 3.96266 0.774472 0.309838 0.551538 + 2.53309 3.97831 4.05781 0.761553 0.295189 0.576975 + 2.69624 4.2745 3.60898 0.811777 0.390578 0.434128 + 2.48365 4.46478 3.7772 0.722277 0.477387 0.500417 + 2.41988 4.38871 3.93257 0.70421 0.451007 0.548344 + 2.3674 4.3081 4.05697 0.688713 0.417396 0.592836 + 2.52007 4.5369 3.64849 0.744217 0.509115 0.432369 + 2.30518 4.77869 3.6845 0.668764 0.58469 0.459231 + 2.26262 4.69396 3.83745 0.650303 0.558412 0.515056 + 2.19885 4.61797 3.99287 0.629096 0.535358 0.563587 + 2.32379 4.85822 3.53916 0.681875 0.598803 0.420096 + 2.06904 5.08721 3.59373 0.609577 0.645066 0.460767 + 2.04024 5.00608 3.73765 0.588631 0.635531 0.499614 + 1.99768 4.92135 3.8906 0.569334 0.621192 0.538497 + 2.35703 4.93946 3.37123 0.691627 0.597259 0.40612 + 2.10228 5.16854 3.42585 0.624334 0.643193 0.443294 + 1.83605 5.37169 3.47939 0.5523 0.686016 0.473653 + 1.7827 5.29043 3.64674 0.528337 0.682205 0.505427 + 2.38671 5.03469 3.1669 0.705799 0.599771 0.376992 + 2.14678 5.24937 3.24905 0.639582 0.645464 0.417506 + 1.88054 5.45252 3.30259 0.564334 0.700318 0.437129 + 2.15799 5.36113 3.04749 0.644118 0.656742 0.392176 + 1.88536 5.57239 3.09256 0.562162 0.71492 0.415768 + 1.57272 5.63453 3.36494 0.485663 0.750627 0.447985 + 1.55978 5.56028 3.50194 0.482617 0.734066 0.477731 + 1.50643 5.47902 3.66929 0.459996 0.706389 0.537976 + 2.17244 5.50219 2.78196 0.660012 0.660936 0.357137 + 1.8998 5.71355 2.82708 0.564536 0.722204 0.399651 + 1.54926 5.91866 2.89781 0.486488 0.76343 0.424859 + 1.57754 5.7544 3.15491 0.487899 0.755819 0.436683 + 1.28068 5.78732 3.39111 0.404312 0.786735 0.466454 + 2.18262 5.59851 2.57112 0.684506 0.666897 0.294448 + 1.8881 5.8293 2.62758 0.574272 0.734283 0.361994 + 1.53756 6.03442 2.69831 0.486178 0.774635 0.40444 + 1.25476 6.06039 2.95013 0.393231 0.80018 0.452858 + 1.28304 5.89613 3.20723 0.40484 0.788817 0.462464 + 1.84999 5.92615 2.48144 0.565953 0.743822 0.355564 + 1.53535 6.10826 2.55442 0.488287 0.786093 0.378989 + 1.23443 6.24429 2.6212 0.396847 0.819859 0.412728 + 1.23664 6.17045 2.76509 0.392648 0.813214 0.429547 + 0.997951 6.13756 2.99886 0.324617 0.825652 0.461434 + 0.939671 6.31905 2.71111 0.300156 0.848784 0.435285 + 0.979823 6.24763 2.81382 0.313377 0.83241 0.457044 + 0.783409 6.18987 3.04706 0.264558 0.846345 0.462287 + 1.00322 6.01473 3.21841 0.332757 0.8177 0.469723 + 1.00086 5.90592 3.40229 0.315086 0.799533 0.511339 + 0.674401 6.34161 2.83165 0.238381 0.852093 0.465954 + 0.714553 6.27018 2.93436 0.245672 0.848341 0.469002 + 0.557653 6.13094 3.26013 0.212372 0.845695 0.489589 + 0.788676 6.06704 3.26661 0.267708 0.830228 0.488932 + 0.756484 5.99632 3.3973 0.250507 0.811743 0.52756 + 0.644018 6.42086 2.69499 0.235396 0.873096 0.426957 + 0.45681 6.34753 2.91038 0.186247 0.864038 0.467707 + 0.488798 6.21125 3.14743 0.201918 0.857328 0.473516 + 0.327174 6.15706 3.3087 0.176032 0.85643 0.485325 + 0.525461 6.06022 3.39082 0.213677 0.828862 0.517039 + 0.587404 6.47226 2.61534 0.210112 0.887176 0.410819 + 0.388277 6.47524 2.68259 0.124825 0.896385 0.425339 + 0.426427 6.4267 2.77367 0.154748 0.885724 0.437659 + 0.271817 6.35498 2.96229 0.108529 0.884751 0.453252 + 0.295187 6.29334 3.07165 0.148546 0.870544 0.469135 + 0.759644 6.52008 2.36851 0.268079 0.912171 0.309962 + 0.572748 6.51135 2.53785 0.227254 0.897194 0.37868 + 0.373621 6.51423 2.60505 0.120753 0.903521 0.411179 + 0.233667 6.40344 2.87116 0.0585024 0.901215 0.429406 + 0.686856 6.56267 2.30035 0.272553 0.910747 0.310249 + 0.49996 6.55393 2.46969 0.173065 0.921237 0.348384 + 0.400587 6.57829 2.44071 0.13517 0.914495 0.381351 + 0.274247 6.53868 2.5761 0.0635051 0.919083 0.388912 + 0.822127 6.61587 2.016 0.296922 0.916884 0.266759 + 0.581013 6.59979 2.28966 0.258678 0.903077 0.342836 + 0.349068 6.61759 2.37783 0.136546 0.902966 0.407439 + 0.141685 6.57025 2.50863 0.037565 0.911875 0.408745 + 0.824584 6.64574 1.90967 0.338734 0.911209 0.23443 + 0.529494 6.63918 2.22683 0.206397 0.927995 0.310203 + 0.531951 6.66896 2.12045 0.217955 0.941752 0.256122 + 0.326565 6.65188 2.30544 0.147469 0.921502 0.359287 + 0.119182 6.60453 2.43624 0.0389747 0.91035 0.412 + 0.474678 6.69206 2.07765 0.193211 0.948023 0.252828 + 0.638605 6.73993 1.72974 0.250156 0.954855 0.160228 + 0.414618 6.72581 1.99439 0.172462 0.958677 0.226265 + 0.269292 6.67497 2.26263 0.0982191 0.937131 0.334871 + 0.200218 6.68836 2.23805 0.0540197 0.94385 0.325928 + 0.050108 6.61792 2.41166 0.0148797 0.913553 0.406449 + 0.294177 6.73724 2.02838 0.112282 0.967813 0.225233 + -0.050108 6.70567 2.20727 -0.0185939 0.950177 0.311156 + 0.144067 6.75447 1.99756 0.0674644 0.97135 0.227878 + 0.345751 6.08485 3.42576 0.197929 0.837581 0.509198 + 0.549237 5.97989 3.50496 0.223845 0.817178 0.531144 + 0.741024 5.91316 3.52434 0.2526 0.803107 0.53964 + 0.369527 6.00461 3.53995 0.21342 0.819175 0.532357 + 0.537997 5.88923 3.64818 0.223215 0.816817 0.531963 + 0.729784 5.82241 3.66751 0.26094 0.808392 0.527648 + 0.985396 5.82275 3.52933 0.295445 0.787513 0.540865 + 0.375098 5.93861 3.63925 0.214275 0.818843 0.532525 + 0.530928 5.7715 3.8319 0.218166 0.808617 0.546391 + 0.706856 5.73509 3.81456 0.255343 0.802228 0.539657 + 0.939765 5.64185 3.82746 0.32104 0.776834 0.541722 + 0.962693 5.72918 3.6804 0.305318 0.789086 0.533033 + 0.368029 5.82088 3.82297 0.202782 0.809691 0.550709 + 0.517657 5.66625 3.9878 0.196518 0.786404 0.585619 + 0.693585 5.62984 3.97047 0.255292 0.782145 0.568397 + 0.887986 5.53922 3.99263 0.313606 0.754968 0.575912 + 1.17714 5.49992 3.8751 0.366756 0.73621 0.568757 + 0.355791 5.75569 3.91968 0.174558 0.789322 0.588643 + 0.488028 5.58849 4.09428 0.165202 0.768102 0.61865 + 0.661059 5.50964 4.14565 0.231286 0.756949 0.611175 + 0.85546 5.41902 4.1678 0.312914 0.72923 0.608529 + 0.326162 5.67794 4.02615 0.137714 0.770415 0.622492 + 0.420165 5.48927 4.23294 0.136756 0.7557 0.640481 + 0.593196 5.41042 4.28431 0.204667 0.732211 0.649598 + 0.798127 5.31308 4.3117 0.28831 0.689753 0.664167 + 1.08361 5.29444 4.18419 0.363359 0.692846 0.622843 + 0.286638 5.61296 4.1119 0.106079 0.761158 0.639833 + 0.331182 5.372 4.38366 0.101051 0.737328 0.667934 + 0.503427 5.31304 4.41678 0.178207 0.714874 0.676164 + 0.708359 5.21562 4.44412 0.274202 0.659676 0.699743 + 0.197655 5.49568 4.26263 0.0849289 0.748852 0.657273 + 0.288186 5.27331 4.49538 0.0325703 0.704415 0.709041 + 0.460431 5.21435 4.5285 0.165698 0.669112 0.724453 + 0.632041 5.1284 4.55099 0.249119 0.622421 0.741979 + 0.960334 5.09124 4.44514 0.333484 0.613815 0.715555 + 0.13439 5.44638 4.32683 0.0988213 0.726283 0.680255 + 0.158013 5.22322 4.54455 0.0596786 0.673818 0.736483 + 0.237468 5.2187 4.54617 0.0182112 0.672397 0.739966 + 0.375694 5.11286 4.63109 0.125884 0.626533 0.769162 + 0.547303 5.02682 4.65352 0.211203 0.592295 0.777547 + 0.057219 5.19265 4.58649 0.0661675 0.636753 0.768224 + 0.057219 4.99359 4.73147 -0.000951834 0.568615 0.822603 + 0.178172 5.00026 4.72992 -0.00246085 0.587644 0.809116 + 0.257627 4.99574 4.73155 0.0446175 0.574868 0.817029 + 0.324975 5.05817 4.68183 0.0774402 0.606287 0.791466 + -0.057219 4.99359 4.73147 0.009684 0.55878 0.82926 + -0.082772 4.79088 4.85818 0.00792762 0.471989 0.881569 + 0.082772 4.79088 4.85818 -0.00729618 0.471345 0.881918 + 0.203725 4.79746 4.85658 0.00614009 0.477745 0.878477 + -0.285444 4.61442 4.94182 -0.00909633 0.34753 0.937625 + -0.082772 4.60556 4.94236 0.00584276 0.338859 0.940819 + 0.082772 4.60556 4.94237 -0.00550107 0.339355 0.940642 + -0.414322 4.60138 4.944 -0.0730218 0.350262 0.933801 + -0.543759 4.3414 5.00711 -0.096371 0.255155 0.962085 + -0.32929 4.34471 5.01577 -0.0174748 0.231047 0.972786 + -0.126618 4.33594 5.01637 0.00453156 0.223685 0.974651 + 0.126618 4.33593 5.01637 -0.0036363 0.222666 0.974888 + -0.652423 4.35926 4.98337 -0.163386 0.293037 0.942037 + -0.865682 4.01294 5.04901 -0.158428 0.20174 0.966541 + -0.630538 3.96772 5.07934 -0.0683377 0.159628 0.984809 + -0.416069 3.97103 5.08801 -0.0130168 0.152022 0.988291 + -0.993086 3.68812 5.07863 -0.145179 0.109087 0.983373 + -0.757941 3.64289 5.10896 -0.0829358 0.0858739 0.992848 + -0.68639 3.5435 5.12112 -0.0908882 0.0567809 0.994241 + -0.617987 3.54915 5.12692 -0.0555106 0.0607834 0.996606 + -0.458076 3.63911 5.12571 -0.00482345 0.0729424 0.997324 + -1.14611 3.67064 5.05489 -0.209345 0.114193 0.971151 + -1.07239 3.31675 5.08426 -0.149515 -0.0227936 0.988497 + -0.958763 3.27031 5.09969 -0.155883 -0.0308165 0.987295 + -0.887212 3.17091 5.11186 -0.186098 -0.111764 0.976154 + -1.35755 3.42205 5.02166 -0.347305 0.0322172 0.937199 + -1.22541 3.29936 5.06057 -0.221265 -0.0421611 0.974302 + -1.21843 3.01113 5.0242 -0.237574 -0.211563 0.94805 + -1.46484 3.21364 4.96944 -0.391974 -0.0899445 0.915569 + -1.33271 3.09095 5.00835 -0.319776 -0.162291 0.933491 + -1.35202 2.81481 4.92064 -0.243946 -0.370148 0.896371 + -1.10481 2.96469 5.03964 -0.147728 -0.250786 0.956704 + -1.58122 3.30616 4.9266 -0.418372 -0.049682 0.906916 + -1.57552 2.96247 4.87328 -0.445247 -0.222031 0.867443 + -1.46629 2.89463 4.90478 -0.373747 -0.274154 0.886088 + -1.44593 2.60017 4.80041 -0.265986 -0.404283 0.875104 + -1.24339 2.76206 4.9082 -0.186225 -0.427257 0.884744 + -1.6919 3.05489 4.8304 -0.476125 -0.19396 0.857721 + -1.66799 2.72722 4.74575 -0.486702 -0.323524 0.811451 + -1.55875 2.65939 4.77724 -0.411929 -0.357509 0.838154 + -1.7774 2.78615 4.69809 -0.525407 -0.309852 0.792426 + -1.72681 2.49021 4.58866 -0.523177 -0.367512 0.768909 + -1.61373 2.43179 4.63605 -0.456024 -0.379509 0.804994 + -1.50091 2.37249 4.65916 -0.365956 -0.379789 0.84961 + -1.61944 2.1369 4.49541 -0.503119 -0.355866 0.787548 + -1.50006 2.09219 4.54966 -0.42656 -0.33998 0.838129 + -1.37672 2.32352 4.68958 -0.306188 -0.35425 0.883604 + -1.33731 2.54742 4.78797 -0.181192 -0.390987 0.902385 + -1.4519 1.7518 4.43043 -0.517268 -0.343495 0.783865 + -1.33155 1.71384 4.49857 -0.466253 -0.310613 0.828329 + -1.37586 2.04314 4.58001 -0.364773 -0.302321 0.880649 + -1.24894 2.0079 4.62565 -0.342694 -0.280648 0.896547 + -1.25794 2.27592 4.70703 -0.27795 -0.313926 0.907851 + -1.28469 1.42995 4.40648 -0.523484 -0.356986 0.773645 + -1.16026 1.40077 4.47283 -0.448639 -0.329041 0.830936 + -1.20462 1.67869 4.54425 -0.388639 -0.278691 0.878232 + -1.11225 1.17063 4.39344 -0.502591 -0.390755 0.771176 + -0.985985 1.14855 4.46448 -0.417304 -0.361795 0.833644 + -1.0296 1.369 4.51986 -0.364949 -0.290132 0.884667 + -1.07396 1.64692 4.59128 -0.327578 -0.257932 0.908935 + -0.949773 0.968969 4.39253 -0.42568 -0.467572 0.774708 + -0.811769 0.938248 4.43574 -0.304831 -0.47348 0.826374 + -0.851214 1.11841 4.50649 -0.295048 -0.344777 0.891109 + -0.89483 1.33894 4.56192 -0.278806 -0.270597 0.921436 + -0.781792 0.809541 4.36027 -0.291312 -0.588875 0.753899 + -0.640455 0.753492 4.35995 -0.218559 -0.616575 0.756351 + -0.671365 0.901889 4.45952 -0.187984 -0.477371 0.858358 + -0.71081 1.08213 4.53032 -0.203492 -0.340799 0.917849 + -0.603886 0.57968 4.2122 -0.204478 -0.682206 0.701985 + -0.457249 0.502509 4.16846 -0.181902 -0.706786 0.683641 + -0.505232 0.693511 4.34644 -0.146638 -0.628048 0.764234 + -0.536142 0.841995 4.44606 -0.114587 -0.508646 0.853316 + -0.413246 0.285763 3.95348 -0.112729 -0.759461 0.640712 + -0.227673 0.222295 3.88321 -0.114031 -0.794323 0.596697 + -0.336282 0.412749 4.11293 -0.221337 -0.757548 0.614109 + -0.384266 0.603749 4.29091 -0.126542 -0.650435 0.748947 + -0.199094 0.111016 3.73595 -0.16742 -0.856193 0.488779 + -0.081146 0.054032 3.68825 -0.160018 -0.818297 0.552073 + -0.118188 0.172667 3.84657 -0.0611245 -0.789582 0.610593 + -0.226797 0.363122 4.07629 -0.155787 -0.757273 0.634246 + -0.104906 0.019918 3.59514 -0.49197 -0.81746 0.299542 + -0.032368 -0.044339 3.60443 -0.279536 -0.828981 0.484407 + -0.032368 0.030536 3.65695 0.0757885 -0.682439 0.727003 + -0.069411 0.149083 3.81521 -0.162708 -0.821924 0.545864 + -0.109104 0.005884 3.52904 -0.53606 -0.840783 0.0756582 + -0.036567 -0.058374 3.53834 -0.300194 -0.948498 -0.10117 + 0.036568 -0.058369 3.53833 0.331794 -0.933619 -0.135158 + 0.032373 -0.044339 3.60443 0.307896 -0.79988 0.515162 + -0.107572 0.008307 3.45165 -0.399618 -0.902064 -0.163052 + -0.036567 -0.018551 3.47337 -0.110209 -0.917471 -0.382232 + 0.036568 -0.018547 3.47336 0.21938 -0.926087 -0.306977 + 0.109105 0.005889 3.52904 0.485817 -0.873742 0.0235984 + 0.10491 0.019918 3.59514 0.438857 -0.827357 0.350549 + -0.107747 0.02312 3.37639 -0.334062 -0.940766 -0.0579841 + -0.036742 -0.00374 3.39811 -0.13722 -0.974925 -0.175192 + 0.036742 -0.00374 3.39811 0.150444 -0.969559 -0.193188 + 0.107573 0.008312 3.45164 0.368661 -0.921873 -0.119331 + -0.112881 0.02451 3.29918 -0.238683 -0.970165 -0.0425471 + -0.036742 0.011515 3.32289 -0.0877069 -0.990913 -0.101977 + 0.036742 0.011515 3.32289 0.127384 -0.989278 -0.0714273 + 0.107747 0.02312 3.37639 0.295661 -0.951092 -0.089489 + 0.235538 0.064179 3.48367 0.349687 -0.936789 -0.0120809 + -0.118346 0.029102 3.22223 -0.206854 -0.978367 0.00299602 + -0.042206 0.01602 3.24589 -0.224925 -0.974235 -0.0165609 + 0.001808 0.003301 3.25612 -0.152057 -0.987796 0.0337263 + -0.00902 0.004506 3.17803 -0.6074 -0.794312 -0.0115841 + -0.001795 -0.013757 3.24666 -0.565669 -0.725684 0.391666 + 0.001808 0.003301 3.25612 -0.000334 -0.484823 0.874612 + 0.001808 -0.013762 3.24667 -0.0023907 -0.887409 0.460977 + -0.001795 -0.005478 3.17033 -0.457664 -0.888022 -0.0442719 + 0.005478 -0.002898 3.08726 0.414386 -0.91003 0.0113895 + 0.009033 0.004594 3.17808 0.571837 -0.819982 0.0251326 + 0.001808 0.003301 3.25612 0.327917 -0.944672 -0.00810761 + 0.012703 0.007093 3.09495 0.545859 -0.836854 0.041393 + 0.049429 0.017318 3.16784 0.223219 -0.974734 0.00823755 + 0.042204 0.016025 3.24588 0.230259 -0.972959 -0.0181781 + 0.112881 0.02451 3.29918 0.225763 -0.973854 -0.025298 + 0.057365 0.016899 3.09136 0.188742 -0.981457 0.0334541 + 0.128312 0.029374 3.14516 0.191887 -0.981143 0.0231842 + 0.118344 0.029107 3.22222 0.202844 -0.979211 -0.000587482 + 0.240013 0.062841 3.32579 0.27246 -0.961723 0.0292462 + 0.234878 0.06145 3.403 0.297965 -0.954448 0.0156532 + 0.136247 0.029047 3.06873 0.179538 -0.983107 0.0355803 + 0.251182 0.05854 3.16844 0.217895 -0.97409 0.0605827 + 0.241214 0.058268 3.24551 0.243353 -0.968986 0.0429475 + 0.415574 0.114334 3.3968 0.28046 -0.957062 0.0733089 + 0.418471 0.122747 3.48063 0.305017 -0.95071 0.0558167 + 0.139753 0.0271 2.9913 0.177521 -0.983276 0.0406776 + 0.257193 0.049803 3.01057 0.153721 -0.984058 0.0894388 + 0.253687 0.051659 3.08796 0.199049 -0.978195 0.0592768 + 0.411303 0.098302 3.23277 0.232739 -0.966894 0.104638 + 0.416776 0.109762 3.31652 0.262048 -0.961217 0.0859871 + 0.412958 0.07632 3.06904 0.143879 -0.976982 0.157498 + 0.413808 0.091427 3.15228 0.192239 -0.972347 0.132612 + 0.572745 0.148072 3.27457 0.266854 -0.949124 0.167191 + 0.578218 0.159532 3.35832 0.300646 -0.946352 0.118451 + 0.579692 0.171394 3.44337 0.318611 -0.942383 0.101989 + 0.57116 0.111997 3.10725 0.1552 -0.955842 0.249555 + 0.57201 0.127017 3.19044 0.22425 -0.952895 0.204211 + 0.728385 0.197976 3.28953 0.291852 -0.93287 0.211131 + 0.729604 0.216282 3.37662 0.320706 -0.933856 0.158303 + 0.731078 0.228144 3.46168 0.349335 -0.929241 0.120313 + 0.574499 0.084859 3.02466 0.0898395 -0.956272 0.278338 + 0.731742 0.138062 3.12391 0.153541 -0.915014 0.37306 + 0.727649 0.177005 3.20545 0.222837 -0.919064 0.325061 + 0.848913 0.240285 3.30245 0.271862 -0.923503 0.270617 + 0.862604 0.172535 3.13899 0.187145 -0.892695 0.409966 + 0.858511 0.211475 3.22055 0.208629 -0.897126 0.389408 + 0.946212 0.270982 3.31688 0.254217 -0.914281 0.315379 + 0.931263 0.292165 3.39719 0.310634 -0.92007 0.238699 + 0.850132 0.258502 3.3895 0.334571 -0.922842 0.190852 + 0.976696 0.207529 3.15919 0.253914 -0.86402 0.434737 + 0.95581 0.242177 3.23497 0.253761 -0.884774 0.390871 + 1.0655 0.294472 3.2842 0.262135 -0.913895 0.309971 + 1.08288 0.271099 3.20148 0.28156 -0.879744 0.383112 + 1.20987 0.304616 3.20482 0.31726 -0.88963 0.328486 + 1.19868 0.33381 3.29126 0.315343 -0.893151 0.320686 + 1.05055 0.315746 3.36455 0.263823 -0.915205 0.304627 + 1.3337 0.312427 3.07849 0.447854 -0.841028 0.303477 + 1.3225 0.341615 3.16494 0.431964 -0.843568 0.319061 + 1.31136 0.370904 3.26321 0.426614 -0.83856 0.338849 + 1.19284 0.361408 3.37566 0.347059 -0.865253 0.361784 + 1.04472 0.343259 3.44889 0.312963 -0.916589 0.248833 + 1.42643 0.338359 2.99638 0.419544 -0.869238 0.261549 + 1.41528 0.367649 3.09465 0.408669 -0.865376 0.290023 + 1.40032 0.392958 3.19481 0.422256 -0.851119 0.311923 + 1.31733 0.415865 3.35093 0.41307 -0.838289 0.35587 + 1.19881 0.406289 3.46332 0.374615 -0.875478 0.305289 + 1.51444 0.341323 2.88444 0.287252 -0.926237 0.244072 + 1.50741 0.365523 2.97093 0.31599 -0.907338 0.277286 + 1.49244 0.390831 3.07109 0.422317 -0.844767 0.328659 + 1.39312 0.42388 3.28325 0.465354 -0.811461 0.35352 + 1.31013 0.446875 3.43942 0.395502 -0.870851 0.291885 + 1.58802 0.369624 2.90283 0.386405 -0.863202 0.324921 + 1.58562 0.400512 2.97013 0.491139 -0.783373 0.380931 + 1.57678 0.433576 3.05126 0.529764 -0.742832 0.409329 + 1.4836 0.423983 3.15228 0.509998 -0.775846 0.371437 + 1.37266 0.457595 3.38146 0.528131 -0.762577 0.373569 + 1.66489 0.416009 2.90369 0.501145 -0.772422 0.390151 + 1.66384 0.452729 2.97368 0.511262 -0.749391 0.420742 + 1.57649 0.475865 3.11521 0.602225 -0.663438 0.444044 + 1.46315 0.457696 3.25048 0.578553 -0.711724 0.398404 + 1.73252 0.44351 2.86665 0.570408 -0.727361 0.381551 + 1.73147 0.480144 2.9366 0.576297 -0.726158 0.374935 + 1.73419 0.51828 3.00855 0.551899 -0.700002 0.453216 + 1.66355 0.495025 3.03763 0.513986 -0.696268 0.501028 + 1.79567 0.469321 2.81095 0.671908 -0.645368 0.363372 + 1.78719 0.502876 2.88203 0.714444 -0.602467 0.355814 + 1.78991 0.540926 2.95392 0.749658 -0.58429 0.310834 + 1.7967 0.596245 3.03211 0.704553 -0.589816 0.394615 + 1.73411 0.56452 3.06706 0.530344 -0.646039 0.54897 + 1.84054 0.52388 2.80745 0.79937 -0.467143 0.37787 + 1.83081 0.618993 2.95571 0.790551 -0.555546 0.257676 + 1.86135 0.698286 3.07397 0.673053 -0.620744 0.402091 + 1.7962 0.650267 3.09174 0.595544 -0.597516 0.536937 + 1.73362 0.618536 3.1267 0.474475 -0.634289 0.61037 + 1.66347 0.54126 3.09615 0.540523 -0.618665 0.570166 + 1.57356 0.529691 3.20318 0.67781 -0.536753 0.502463 + 1.92395 0.74449 3.01254 0.72532 -0.639365 0.255192 + 2.01009 0.871012 3.0782 0.711283 -0.596358 0.372067 + 1.92477 0.837049 3.16022 0.629837 -0.572718 0.524689 + 1.85963 0.789033 3.17799 0.608632 -0.585414 0.535591 + 2.1368 1.04701 3.10196 0.693286 -0.573013 0.437049 + 2.05149 1.01305 3.18398 0.661839 -0.564429 0.493345 + 1.94244 0.986556 3.28547 0.628497 -0.573755 0.525164 + 1.85479 0.947356 3.34897 0.687797 -0.570221 0.449203 + 1.77198 0.749834 3.24148 0.515624 -0.656931 0.550066 + 2.32079 1.26567 3.08063 0.766598 -0.503798 0.39814 + 2.22049 1.22221 3.1843 0.705785 -0.554902 0.440399 + 2.12533 1.1769 3.28579 0.676659 -0.585434 0.446541 + 2.01628 1.1504 3.38728 0.628891 -0.63108 0.454129 + 2.34569 1.46559 3.23756 0.816545 -0.418963 0.397144 + 2.26637 1.40325 3.33934 0.766578 -0.480165 0.426379 + 2.17121 1.35793 3.44083 0.73695 -0.515792 0.43688 + 2.07879 1.30819 3.53959 0.697343 -0.564514 0.441629 + 2.46886 1.78873 3.32206 0.82969 -0.406358 0.382736 + 2.39338 1.69648 3.39225 0.8291 -0.411664 0.37832 + 2.31407 1.63413 3.49404 0.799174 -0.42957 0.420465 + 2.22659 1.56377 3.5783 0.764632 -0.457583 0.453824 + 2.53005 2.083 3.50337 0.855668 -0.34827 0.382805 + 2.45458 1.99083 3.57362 0.812611 -0.382608 0.439629 + 2.37167 1.88962 3.62912 0.791261 -0.394638 0.467083 + 2.28419 1.81926 3.71338 0.757369 -0.397263 0.518242 + 2.62818 2.5354 3.64319 0.865408 -0.285657 0.411666 + 2.56756 2.41416 3.68659 0.840556 -0.301375 0.450154 + 2.49612 2.30505 3.73457 0.793605 -0.327569 0.512728 + 2.41321 2.20392 3.79012 0.761967 -0.340472 0.550895 + 2.65484 2.87294 3.79956 0.830736 -0.245185 0.499761 + 2.58992 2.76565 3.84838 0.802469 -0.261549 0.536317 + 2.51848 2.65663 3.89642 0.768456 -0.278719 0.576013 + 2.4407 2.55846 3.94625 0.741408 -0.292855 0.60378 + 2.68016 3.28305 3.91262 0.812082 -0.160733 0.56097 + 2.61945 3.19332 3.97685 0.800725 -0.175365 0.572788 + 2.55453 3.08603 4.02567 0.771505 -0.209914 0.600596 + 2.48002 2.99971 4.08758 0.743641 -0.230198 0.6277 + 2.58947 3.5633 4.09222 0.787395 -0.00880562 0.616386 + 2.52876 3.47356 4.15646 0.763872 -0.0565466 0.642886 + 2.45712 3.40119 4.2352 0.732608 -0.0814041 0.675765 + 2.38262 3.31487 4.29711 0.716988 -0.13199 0.684476 + 2.53323 3.86313 4.1181 0.786897 0.226721 0.573925 + 2.47749 3.78616 4.20362 0.721098 0.139239 0.678698 + 2.38769 3.77091 4.29422 0.678831 0.148692 0.719083 + 2.31605 3.69854 4.37297 0.697025 0.112261 0.708204 + 2.29894 4.09032 4.25959 0.663444 0.320361 0.676173 + 2.20914 4.07508 4.35018 0.655043 0.312588 0.6879 + 2.13616 3.94806 4.47499 0.648276 0.251111 0.718805 + 2.06758 3.85189 4.55996 0.606905 0.203086 0.768389 + 2.24747 3.60237 4.45794 0.687574 0.0469488 0.724595 + 2.29879 4.2055 4.1993 0.661144 0.378913 0.647544 + 2.07576 4.40579 4.28877 0.599153 0.462425 0.653589 + 2.06263 4.2746 4.3916 0.61716 0.406574 0.673655 + 1.98965 4.14767 4.51646 0.567154 0.345086 0.747831 + 2.14437 4.5084 4.14646 0.614424 0.496759 0.612955 + 1.89447 4.69571 4.21503 0.531597 0.558655 0.636639 + 1.85277 4.55415 4.36261 0.511037 0.519867 0.684528 + 1.83964 4.42295 4.46545 0.501522 0.469933 0.726387 + 1.94895 4.80519 4.0614 0.552897 0.590676 0.587713 + 1.67113 4.98185 4.12221 0.478723 0.630739 0.610731 + 1.62324 4.86473 4.26848 0.457166 0.594734 0.66128 + 1.58155 4.72317 4.41606 0.446919 0.561858 0.696117 + 1.74296 4.39244 4.5459 0.486243 0.455029 0.746001 + 1.71986 5.09801 3.95141 0.497743 0.654933 0.568608 + 1.4045 5.24815 4.02597 0.428489 0.685969 0.588084 + 1.36275 5.14532 4.16988 0.416279 0.658873 0.626577 + 1.31486 5.02819 4.31615 0.399374 0.617523 0.677617 + 1.7539 5.20939 3.79071 0.509878 0.6792 0.527932 + 1.43854 5.35952 3.86526 0.43637 0.696795 0.569261 + 1.12536 5.39737 4.04032 0.362671 0.719854 0.591845 + 1.24504 5.61941 3.67913 0.364099 0.752389 0.548947 + 1.26774 5.71298 3.52805 0.38281 0.774771 0.503175 + 1.02628 5.18841 4.32803 0.347347 0.649667 0.676227 + 1.24892 4.93102 4.43325 0.379631 0.594307 0.708999 + 1.19624 4.83116 4.54582 0.381561 0.598503 0.704419 + 1.52887 4.62331 4.52863 0.445921 0.537041 0.716059 + 0.884016 5.00403 4.55201 0.330896 0.619984 0.711426 + 1.16372 4.76716 4.61927 0.369696 0.564099 0.738321 + 1.42798 4.54238 4.6458 0.409611 0.499168 0.763577 + 1.64207 4.31151 4.66307 0.46973 0.408967 0.782368 + 0.8515 4.94003 4.62545 0.301013 0.60428 0.737724 + 0.85536 4.85492 4.68867 0.282565 0.544035 0.790053 + 1.07525 4.67906 4.71546 0.320392 0.493399 0.808645 + 1.33951 4.45427 4.74201 0.367867 0.442547 0.817818 + 1.55192 4.20397 4.75893 0.426267 0.356838 0.831242 + 0.551163 4.94179 4.7168 0.210461 0.561688 0.800133 + 0.770676 4.77739 4.76376 0.247134 0.491921 0.834828 + 0.990565 4.60152 4.79056 0.280788 0.44819 0.848696 + 1.22576 4.32411 4.85146 0.3211 0.390445 0.862813 + 1.43817 4.07381 4.86839 0.381876 0.306349 0.871964 + 0.449577 4.90912 4.76318 0.16314 0.541058 0.82501 + 0.66909 4.74481 4.81019 0.234444 0.485341 0.842307 + 0.884919 4.49976 4.87041 0.267078 0.41303 0.870675 + 1.12011 4.22235 4.93131 0.258373 0.334263 0.906373 + 1.33197 3.94823 4.94689 0.323482 0.242215 0.914708 + 0.382229 4.84671 4.81289 0.130663 0.522575 0.842521 + 0.572612 4.68144 4.87435 0.21802 0.478742 0.850455 + 0.788441 4.43648 4.93462 0.244569 0.362726 0.899231 + 1.0017 4.09007 5.00022 0.214301 0.261916 0.940997 + 1.21356 3.81596 5.0158 0.258702 0.184379 0.948197 + 0.332602 4.78452 4.8588 0.0823826 0.48666 0.869699 + 0.522985 4.61924 4.92026 0.175513 0.407951 0.895975 + 0.652423 4.35927 4.98336 0.15821 0.277783 0.947526 + 0.414322 4.60138 4.944 0.0730142 0.350317 0.933781 + 0.54376 4.3414 5.00711 0.105858 0.24824 0.962897 + 0.630538 3.96772 5.07934 0.0711827 0.165669 0.983609 + 0.865683 4.01294 5.04901 0.154586 0.204109 0.966666 + 0.285445 4.61442 4.94183 0.00888124 0.347949 0.937471 + 0.32929 4.34471 5.01578 0.0166305 0.229806 0.973094 + 0.126618 4.00777 5.07718 -0.00899253 0.145264 0.989352 + 0.416069 3.97102 5.08802 0.0125617 0.152476 0.988227 + -0.126618 4.00777 5.07718 0.00857274 0.148449 0.988883 + -0.168625 3.67585 5.11488 0.0335816 0.0700883 0.996975 + -0.036021 3.60958 5.11106 0.0340239 0.0444754 0.998431 + 0.036019 3.60958 5.11106 -0.0312578 0.0527594 0.998118 + 0.168625 3.67585 5.11488 -0.0475263 0.0797874 0.995678 + -0.453675 3.28342 5.13379 0.0184732 -0.0443496 0.998845 + -0.276569 3.30822 5.13443 0.00945991 -0.0334062 0.999397 + -0.143965 3.24195 5.13062 0.0491112 -0.0919628 0.994551 + -0.036021 3.22358 5.11523 0.0606462 -0.0963806 0.993495 + 0.036019 3.22358 5.11523 -0.0606653 -0.0963602 0.993496 + -0.613586 3.19338 5.13494 -0.01899 -0.0926544 0.995517 + -0.481604 2.89141 5.07997 -0.00407933 -0.246547 0.969122 + -0.304498 2.9162 5.08063 0.048865 -0.210134 0.976451 + -0.169009 2.89863 5.06505 0.0828932 -0.225449 0.970722 + -0.061064 2.88035 5.04972 0.0588927 -0.255182 0.965098 + -0.739636 3.19127 5.1252 -0.0767826 -0.0885667 0.993106 + -0.748806 2.8824 5.05998 -0.0827097 -0.275901 0.957621 + -0.622755 2.88451 5.06972 -0.0657268 -0.26867 0.960987 + -0.460761 2.49748 4.94567 -0.0748446 -0.294213 0.952805 + -0.808039 3.18561 5.11939 -0.0806067 -0.0878201 0.99287 + -0.861885 2.89341 5.05169 -0.0737692 -0.280627 0.956978 + -0.731464 2.51883 4.92969 -0.104952 -0.332579 0.937217 + -0.601912 2.49058 4.93542 -0.0903038 -0.320347 0.942986 + -0.941057 2.87871 5.04416 -0.131866 -0.28773 0.94859 + -0.966131 2.6097 4.9291 -0.187203 -0.355123 0.915884 + -0.844543 2.52985 4.92141 -0.141239 -0.34552 0.927722 + -0.729918 2.25879 4.83789 -0.145149 -0.336756 0.930337 + -1.0351 2.88445 5.02402 -0.208229 -0.303092 0.929933 + -1.06018 2.61545 4.90895 -0.274133 -0.352606 0.894718 + -0.98127 2.37989 4.83674 -0.220625 -0.358481 0.907092 + -0.859682 2.30012 4.82911 -0.172967 -0.350769 0.920349 + -1.17369 2.68191 4.89262 -0.279532 -0.365124 0.888001 + -1.21853 2.49981 4.80543 -0.296156 -0.35098 0.888316 + -1.10502 2.43343 4.8218 -0.29743 -0.352398 0.887328 + -1.00337 2.1928 4.755 -0.230279 -0.314649 0.920852 + -0.872669 2.14869 4.76999 -0.186075 -0.305523 0.933826 + -1.12712 2.24625 4.74002 -0.280957 -0.318961 0.905167 + -0.985657 1.94226 4.68794 -0.232328 -0.247505 0.940619 + -0.854955 1.89815 4.70294 -0.193071 -0.235839 0.95242 + -0.719277 1.86649 4.72337 -0.184152 -0.223843 0.95707 + -0.742904 2.10736 4.77878 -0.164809 -0.286427 0.943821 + -1.11812 1.97832 4.65868 -0.283296 -0.257614 0.923785 + -0.941492 1.61095 4.6206 -0.243542 -0.23446 0.941125 + -0.802828 1.5775 4.64393 -0.20175 -0.228845 0.952327 + -0.66715 1.54584 4.66436 -0.204871 -0.234155 0.950368 + -0.756166 1.30549 4.58525 -0.187959 -0.253758 0.94883 + -0.618234 1.26053 4.59593 -0.182971 -0.276477 0.943441 + -0.533475 1.49319 4.68135 -0.175303 -0.239478 0.954945 + -0.585319 1.85745 4.74583 -0.163337 -0.216363 0.962553 + -0.608946 2.09832 4.80124 -0.157941 -0.272977 0.948967 + -0.572878 1.03708 4.54095 -0.083161 -0.345928 0.934568 + -0.436992 0.976107 4.51797 -0.0559284 -0.412472 0.909252 + -0.484559 1.20779 4.61287 -0.127697 -0.322557 0.937897 + -0.356444 1.14556 4.59446 -0.0443588 -0.350538 0.935497 + -0.399265 1.46708 4.69638 -0.0729508 -0.240995 0.967781 + -0.400256 0.781019 4.42307 -0.0106649 -0.510206 0.859986 + -0.284118 0.698607 4.36901 0.000932436 -0.554439 0.832224 + -0.308877 0.91388 4.49955 0.0485728 -0.432285 0.900428 + -0.268127 0.521252 4.2368 -0.0753403 -0.663891 0.744025 + -0.16076 0.430421 4.16132 -0.0072755 -0.674685 0.73807 + -0.175686 0.614286 4.31086 0.137063 -0.556624 0.81938 + -0.200446 0.82956 4.44139 0.0596473 -0.491286 0.868953 + -0.11943 0.272204 4.00076 -0.208514 -0.783694 0.585103 + -0.06733 0.225955 3.95507 0.0178055 -0.790443 0.612277 + -0.078383 0.34054 4.076 0.30374 -0.635554 0.709798 + -0.093309 0.524492 4.22559 0.189826 -0.594423 0.781427 + -0.017312 0.102744 3.76948 -0.124459 -0.883564 0.451469 + -0.017312 0.136658 3.83734 -0.204271 -0.829768 0.519383 + -0.028364 0.251335 3.95831 0.19298 -0.696101 0.691521 + -0.028364 0.420627 4.12849 -0.0175842 -0.674384 0.738171 + -0.037326 0.63723 4.28972 0.128472 -0.58124 0.803527 + -0.102271 0.741095 4.38682 0.239922 -0.504773 0.829241 + 0.017312 0.102744 3.76948 0.0866434 -0.844051 0.529216 + 0.017312 0.136658 3.83734 0.20427 -0.82977 0.51938 + 0.028357 0.251335 3.95831 -0.193868 -0.698862 0.688482 + 0.028357 0.420627 4.12849 -0.108218 -0.639865 0.76083 + 0.037325 0.63723 4.28972 -0.129928 -0.586594 0.799391 + 0.06733 0.225955 3.95507 -0.0173498 -0.790553 0.612148 + 0.078376 0.340545 4.07599 -0.14255 -0.696546 0.703209 + 0.093302 0.524492 4.22559 -0.18882 -0.591303 0.784033 + 0.10227 0.741095 4.38682 -0.0782281 -0.572254 0.816337 + 0.069407 0.149078 3.81522 0.168529 -0.826828 0.536613 + 0.119425 0.272204 4.00076 0.170351 -0.771974 0.612403 + 0.16076 0.430421 4.16132 0.00605378 -0.676566 0.736357 + 0.175687 0.614286 4.31086 -0.158377 -0.544376 0.823754 + 0.200447 0.82956 4.44139 -0.0635871 -0.498487 0.864562 + 0.032373 0.030536 3.65695 0.145489 -0.757769 0.636096 + 0.118184 0.172667 3.84657 0.121926 -0.819007 0.56068 + 0.226793 0.363122 4.07629 0.15692 -0.755885 0.63562 + 0.268128 0.521252 4.2368 0.100941 -0.672467 0.733212 + 0.08115 0.054032 3.68825 0.137498 -0.854595 0.500761 + 0.227669 0.22229 3.88322 0.108977 -0.798666 0.591825 + 0.336278 0.412744 4.11294 0.136049 -0.721329 0.679099 + 0.413241 0.285763 3.95348 0.147936 -0.77677 0.612163 + 0.457244 0.502509 4.16846 0.187171 -0.699479 0.689707 + 0.505232 0.693511 4.34644 0.168456 -0.636767 0.752429 + 0.384265 0.603749 4.29091 0.125167 -0.652449 0.747424 + 0.284118 0.698607 4.36901 0.000405746 -0.551966 0.833866 + 0.199095 0.111021 3.73594 0.168197 -0.856183 0.488529 + 0.384668 0.174494 3.8062 0.151031 -0.855663 0.495005 + 0.559882 0.362934 3.99721 0.236794 -0.729579 0.641594 + 0.603885 0.57968 4.2122 0.205733 -0.683039 0.700807 + 0.640456 0.753492 4.35995 0.215102 -0.619996 0.754543 + 0.222855 0.076819 3.64278 0.261264 -0.916036 0.304334 + 0.405595 0.146048 3.72687 0.244611 -0.920584 0.30445 + 0.5671 0.212172 3.77694 0.303262 -0.889085 0.342871 + 0.546173 0.240623 3.85626 0.249228 -0.814257 0.524281 + 0.698136 0.433094 4.01169 0.309269 -0.71703 0.624677 + 0.23707 0.061669 3.56102 0.350144 -0.932646 0.0870095 + 0.41981 0.130899 3.64511 0.302144 -0.942544 0.142547 + 0.580437 0.192389 3.69601 0.336802 -0.926155 0.169712 + 0.700407 0.270469 3.80217 0.325902 -0.850786 0.412252 + 0.684426 0.310778 3.87075 0.306681 -0.766432 0.564384 + 0.419131 0.125386 3.56126 0.322002 -0.945693 0.0444952 + 0.579758 0.186964 3.61221 0.349233 -0.934132 0.0737142 + 0.713744 0.250686 3.72123 0.366499 -0.909607 0.195686 + 0.807504 0.32129 3.81354 0.355221 -0.82918 0.4316 + 0.582589 0.17972 3.52715 0.332727 -0.939061 0.0863546 + 0.724983 0.245138 3.63444 0.371342 -0.92324 0.0986587 + 0.829485 0.290214 3.64637 0.398504 -0.910746 0.108332 + 0.818245 0.295757 3.73317 0.379328 -0.89781 0.223714 + 0.727814 0.237982 3.54944 0.360635 -0.926939 0.103568 + 0.839325 0.283289 3.56156 0.39462 -0.911153 0.118643 + 0.901522 0.324581 3.64824 0.407885 -0.907555 0.0998716 + 0.889591 0.326565 3.73001 0.414165 -0.882604 0.222434 + 0.87885 0.352189 3.81043 0.413976 -0.803967 0.426921 + 0.842589 0.273449 3.47381 0.36121 -0.919414 0.155581 + 0.911362 0.317569 3.56339 0.382289 -0.911803 0.149903 + 1.02128 0.372296 3.6162 0.38698 -0.907799 0.1617 + 1.00935 0.374284 3.69795 0.434578 -0.870421 0.231321 + 0.999038 0.407612 3.78343 0.467217 -0.768616 0.436963 + 0.92372 0.307112 3.4815 0.343319 -0.92175 0.180303 + 1.03236 0.353714 3.53078 0.350733 -0.913232 0.207349 + 1.18774 0.424785 3.54869 0.385461 -0.887364 0.252992 + 1.16866 0.443531 3.64062 0.455006 -0.833079 0.314562 + 1.29106 0.465541 3.5313 0.503585 -0.797351 0.332616 + 1.29236 0.517844 3.6271 0.567315 -0.70587 0.424149 + 1.15835 0.476777 3.72603 0.513923 -0.737074 0.438867 + 1.37396 0.509985 3.47731 0.609641 -0.699364 0.373132 + 1.40912 0.598923 3.58947 0.611471 -0.687514 0.391699 + 1.29221 0.579154 3.71251 0.56437 -0.691397 0.451061 + 1.1582 0.538174 3.81149 0.51694 -0.69684 0.497179 + 1.46022 0.511524 3.33845 0.661922 -0.640609 0.389204 + 1.49537 0.600548 3.45065 0.666996 -0.659474 0.346715 + 1.54136 0.704368 3.54803 0.666631 -0.666083 0.33457 + 1.44189 0.682476 3.68675 0.597719 -0.702049 0.387115 + 1.32498 0.662709 3.80979 0.54056 -0.712473 0.447413 + 1.56986 0.583876 3.24593 0.712371 -0.530732 0.459186 + 1.61585 0.687698 3.34331 0.701167 -0.6334 0.327367 + 1.59424 0.805556 3.65557 0.705947 -0.620175 0.342085 + 1.49477 0.783668 3.79428 0.620268 -0.645179 0.446106 + 1.38252 0.755475 3.88891 0.559501 -0.652639 0.510903 + 1.65977 0.595445 3.1389 0.530351 -0.559547 0.636895 + 1.69813 0.726735 3.25369 0.508273 -0.691615 0.513155 + 1.6807 0.861303 3.54682 0.725403 -0.599312 0.338549 + 1.72597 1.01679 3.69349 0.729961 -0.54229 0.416028 + 1.63951 0.960962 3.8022 0.738618 -0.491797 0.461064 + 1.76298 0.90034 3.4572 0.697311 -0.607765 0.379972 + 1.82446 1.06329 3.59596 0.717629 -0.568598 0.402125 + 1.77437 1.18415 3.82923 0.666476 -0.531775 0.522519 + 1.66388 1.13845 3.91158 0.676316 -0.478514 0.560019 + 1.91628 1.1104 3.48777 0.687528 -0.607123 0.39838 + 1.87287 1.23073 3.73175 0.685338 -0.555294 0.471126 + 1.92797 1.42525 3.85644 0.65931 -0.474878 0.582925 + 1.81817 1.38522 3.94096 0.638687 -0.451324 0.623206 + 1.97879 1.26809 3.64004 0.657222 -0.589996 0.469002 + 2.03389 1.46269 3.76477 0.683295 -0.481485 0.548889 + 1.98256 1.64831 3.95749 0.655709 -0.412744 0.632209 + 1.87276 1.60828 4.04202 0.617402 -0.414599 0.668522 + 2.13417 1.51403 3.67706 0.728469 -0.466285 0.501908 + 2.08837 1.69435 3.87533 0.686929 -0.408522 0.601032 + 2.13287 1.98865 4.00359 0.680107 -0.357191 0.640209 + 2.02705 1.9426 4.08575 0.64693 -0.363393 0.670393 + 2.18866 1.74569 3.78762 0.725366 -0.405236 0.556442 + 2.23098 2.04488 3.9266 0.71235 -0.350831 0.607845 + 2.16569 2.34754 4.15417 0.680814 -0.32071 0.658512 + 2.06529 2.30954 4.23558 0.647547 -0.334039 0.684909 + 2.32652 2.11846 3.85235 0.737179 -0.34434 0.581375 + 2.2638 2.40369 4.07712 0.703857 -0.309903 0.639176 + 2.23071 2.75267 4.26706 0.704848 -0.269927 0.655994 + 2.14538 2.68183 4.32996 0.690635 -0.287135 0.66376 + 2.35401 2.47291 4.00843 0.724547 -0.301144 0.619955 + 2.32092 2.82189 4.19837 0.717417 -0.256977 0.647515 + 2.13899 3.08376 4.4888 0.693077 -0.185557 0.696573 + 2.05366 3.01292 4.5517 0.686493 -0.203207 0.698165 + 2.40224 2.90154 4.13742 0.724859 -0.248558 0.642493 + 2.21668 3.16849 4.43025 0.69993 -0.165775 0.694706 + 2.08087 3.45036 4.60384 0.648443 -0.0183955 0.761041 + 2.00318 3.36563 4.6624 0.645155 -0.0330288 0.763338 + 2.298 3.24814 4.36929 0.6972 -0.155298 0.699853 + 2.16285 3.53564 4.53012 0.655194 0.00920751 0.755404 + 1.91851 3.68226 4.70637 0.572735 0.143768 0.807035 + 2.00049 3.76746 4.63261 0.585234 0.169721 0.792903 + 1.82588 4.03272 4.66956 0.511661 0.297051 0.806203 + 1.73573 3.92518 4.76543 0.490588 0.26284 0.830806 + 1.8346 3.55934 4.78748 0.532126 0.0899927 0.841869 + 1.89297 4.11716 4.5969 0.500414 0.338098 0.797042 + 1.65182 3.80226 4.84653 0.456126 0.205762 0.865801 + 1.54562 3.67677 4.92508 0.401523 0.13732 0.905496 + 1.70185 3.41556 4.86911 0.463396 0.00673877 0.886126 + 1.80006 3.43825 4.8144 0.519388 0.0106047 0.854472 + 1.96864 3.24454 4.68932 0.671263 -0.0821063 0.736658 + 1.42499 3.56737 4.98257 0.348177 0.0926658 0.932837 + 1.58122 3.30616 4.9266 0.425314 -0.0520848 0.903546 + 1.6919 3.0549 4.83039 0.477747 -0.186797 0.858408 + 1.7935 3.12682 4.78942 0.488323 -0.159843 0.857899 + 1.8917 3.14942 4.73467 0.571543 -0.156039 0.8056 + 1.14611 3.67064 5.05489 0.209351 0.114225 0.971146 + 1.35754 3.42205 5.02166 0.347281 0.0322239 0.937207 + 1.46485 3.21364 4.96944 0.39152 -0.0939165 0.915364 + 0.993089 3.68812 5.07862 0.145085 0.108972 0.9834 + 1.22541 3.29936 5.06057 0.221278 -0.0421704 0.974298 + 1.33272 3.09095 5.00835 0.325064 -0.163369 0.931474 + 1.4663 2.89464 4.90477 0.37536 -0.26665 0.887695 + 1.57553 2.96239 4.87323 0.439571 -0.220094 0.870825 + 0.757944 3.6429 5.10895 0.0830556 0.0858306 0.992842 + 0.958766 3.27031 5.09969 0.155946 -0.0305617 0.987293 + 1.07239 3.31675 5.08426 0.149254 -0.0226684 0.988539 + 1.21843 3.01113 5.0242 0.23259 -0.235513 0.943629 + 0.68639 3.5435 5.12112 0.0909173 0.0567912 0.994238 + 0.887212 3.17091 5.11186 0.186094 -0.111762 0.976155 + 0.941054 2.87871 5.04416 0.144061 -0.272918 0.95119 + 1.0351 2.88445 5.02402 0.208241 -0.303094 0.92993 + 1.10481 2.96469 5.03964 0.160819 -0.255759 0.95327 + 0.617988 3.54915 5.12692 0.0554546 0.060742 0.996612 + 0.808039 3.18561 5.11939 0.0806072 -0.0878199 0.99287 + 0.861881 2.89341 5.05169 0.0674412 -0.271256 0.960142 + 0.458076 3.63911 5.12571 0.00855743 0.0767953 0.99701 + 0.613587 3.19338 5.13494 0.0189589 -0.092632 0.99552 + 0.739637 3.19127 5.1252 0.0767833 -0.0885661 0.993106 + 0.748809 2.8824 5.05998 0.0851551 -0.272994 0.958239 + 0.84454 2.52985 4.92141 0.139294 -0.349418 0.926555 + 0.276569 3.30822 5.13443 -0.015804 -0.041527 0.999012 + 0.453675 3.28342 5.13378 -0.0148087 -0.0487054 0.998703 + 0.481604 2.89141 5.07997 0.0128763 -0.237057 0.97141 + 0.622758 2.88451 5.06972 0.0635068 -0.265686 0.961966 + 0.143964 3.24195 5.13062 -0.0490992 -0.091944 0.994553 + 0.169004 2.89863 5.06505 -0.0896965 -0.236381 0.967512 + 0.304498 2.91621 5.08062 -0.0544776 -0.202464 0.977773 + 0.06106 2.88035 5.04972 -0.0461286 -0.269083 0.962012 + 0.06106 2.47763 4.90566 -0.129033 -0.277718 0.951958 + 0.194119 2.46558 4.94153 -0.165542 -0.268496 0.94895 + 0.329613 2.48315 4.9571 0.0125246 -0.292442 0.956201 + -0.061064 2.47763 4.90566 0.136515 -0.287229 0.948084 + -0.066662 2.22117 4.84245 0.130976 -0.0255291 0.991057 + 0.06666 2.22117 4.84245 -0.093112 -0.0629048 0.993667 + 0.199719 2.20912 4.87832 -0.124011 -0.21396 0.968939 + 0.338014 2.20633 4.87336 0.0798532 -0.237676 0.968056 + -0.194123 2.46558 4.94153 0.158418 -0.277759 0.947499 + -0.199721 2.20904 4.87827 0.0723522 -0.165933 0.983479 + -0.066662 2.10356 4.86675 0.0153311 -0.0531574 0.998469 + 0.06666 2.10357 4.86674 0.0296002 -0.0118345 0.999492 + 0.205331 2.10297 4.85859 -0.000590693 -0.163757 0.986501 + -0.329613 2.48315 4.9571 -0.0209634 -0.280896 0.959509 + -0.338025 2.20633 4.87336 -0.0623166 -0.223014 0.972821 + -0.205333 2.10297 4.85859 -0.0433549 -0.203224 0.978172 + -0.193778 1.81952 4.79314 -0.0359448 -0.251317 0.967237 + -0.055108 1.82012 4.80129 -0.0273549 -0.264827 0.963908 + -0.469173 2.22066 4.86194 -0.13962 -0.283734 0.948684 + -0.343636 2.10026 4.85368 -0.113288 -0.220933 0.968687 + -0.316992 1.84324 4.79504 -0.124844 -0.24625 0.961132 + -0.143478 1.37916 4.67886 0.111431 -0.284868 0.952068 + -0.055108 1.27413 4.62718 0.0615891 -0.339909 0.938439 + -0.600366 2.23063 4.84367 -0.132611 -0.311944 0.9408 + -0.477753 2.08844 4.81955 -0.182925 -0.261751 0.947642 + -0.451109 1.83142 4.76091 -0.172841 -0.228024 0.958192 + -0.266692 1.40288 4.68077 -0.0301442 -0.285015 0.958049 + -0.125696 0.992824 4.52421 0.0830763 -0.419569 0.903914 + -0.223871 1.08129 4.57879 0.0707025 -0.372905 0.925172 + -0.037326 0.887793 4.47253 -0.0786295 -0.513223 0.854646 + 0.055106 1.27413 4.62717 -0.0633069 -0.345381 0.936325 + 0.037325 0.887793 4.47253 -0.0045344 -0.478726 0.877952 + 0.143476 1.37917 4.67885 -0.0549522 -0.317859 0.946544 + 0.055106 1.82012 4.80129 0.0198876 -0.254714 0.966812 + 0.125695 0.992824 4.52421 -0.080558 -0.412653 0.907319 + 0.266694 1.40288 4.68077 0.0250415 -0.293139 0.955742 + 0.193777 1.8196 4.79319 0.0436417 -0.241895 0.969321 + 0.343625 2.10025 4.85369 0.13296 -0.202518 0.97021 + 0.223872 1.08129 4.57879 -0.102943 -0.345231 0.932855 + 0.399267 1.46708 4.69638 0.0996345 -0.266208 0.958753 + 0.316994 1.84324 4.79504 0.116424 -0.232371 0.965634 + 0.477742 2.08844 4.81956 0.172771 -0.25193 0.952198 + 0.308878 0.91388 4.49955 0.0230627 -0.476866 0.878673 + 0.356445 1.14556 4.59446 0.0504753 -0.341489 0.938529 + 0.533477 1.49319 4.68135 0.176178 -0.238344 0.955067 + 0.451111 1.83142 4.76091 0.185346 -0.21502 0.95886 + 0.437002 0.976107 4.51797 0.0473672 -0.423403 0.904702 + 0.484569 1.20779 4.61287 0.0907409 -0.286699 0.953714 + 0.667151 1.54584 4.66436 0.201888 -0.231096 0.951754 + 0.585321 1.85745 4.74583 0.164995 -0.21864 0.961755 + 0.608959 2.09832 4.80123 0.165594 -0.264029 0.950193 + 0.400256 0.781019 4.42307 -0.000185284 -0.503147 0.864201 + 0.572888 1.03708 4.54095 0.132448 -0.387693 0.912223 + 0.618244 1.26053 4.59593 0.19345 -0.262811 0.945255 + 0.802826 1.57758 4.64398 0.202981 -0.227326 0.952429 + 0.719279 1.86649 4.72337 0.182769 -0.225335 0.956984 + 0.536141 0.841995 4.44606 0.116833 -0.505686 0.85477 + 0.71081 1.08213 4.53032 0.203883 -0.340475 0.917883 + 0.756166 1.30549 4.58525 0.188774 -0.254654 0.948428 + 0.941491 1.61095 4.6206 0.241126 -0.231558 0.942465 + 0.854954 1.89815 4.70294 0.196229 -0.239324 0.950904 + 0.671365 0.901889 4.45952 0.179325 -0.470172 0.864165 + 0.851214 1.11841 4.50649 0.294277 -0.34399 0.891668 + 0.89483 1.33894 4.56192 0.278438 -0.270967 0.921439 + 1.07396 1.64692 4.59128 0.331799 -0.252466 0.908939 + 0.985656 1.94234 4.68799 0.231211 -0.249054 0.940486 + 0.781792 0.809541 4.36027 0.303734 -0.596549 0.742882 + 0.811769 0.938248 4.43574 0.309418 -0.468492 0.827512 + 0.985987 1.14855 4.46448 0.426726 -0.351933 0.833095 + 1.0296 1.369 4.51986 0.378869 -0.306808 0.873113 + 0.745222 0.635818 4.21257 0.292696 -0.677525 0.674751 + 0.919797 0.840262 4.31706 0.388128 -0.576277 0.719209 + 0.949774 0.968969 4.39253 0.420456 -0.461927 0.780923 + 1.11225 1.17063 4.39344 0.493681 -0.378198 0.7831 + 0.823599 0.487744 4.00924 0.308141 -0.711242 0.631811 + 0.870685 0.690466 4.21011 0.34351 -0.64817 0.679615 + 1.05235 0.848769 4.24332 0.464676 -0.553747 0.69097 + 1.07604 0.990964 4.32143 0.502603 -0.444474 0.741507 + 0.791524 0.361599 3.88213 0.306478 -0.748676 0.58784 + 0.902616 0.527941 4.01681 0.364105 -0.695754 0.619156 + 1.00323 0.698969 4.13638 0.422654 -0.641398 0.640291 + 1.17891 0.862822 4.16378 0.497765 -0.53561 0.682167 + 0.87054 0.401797 3.8897 0.377166 -0.731788 0.567655 + 1.01995 0.547596 3.95637 0.458437 -0.688446 0.562031 + 1.12057 0.718627 4.07593 0.456855 -0.63689 0.62101 + 1.3033 0.865423 4.07208 0.541695 -0.526554 0.655215 + 1.2026 1.0051 4.24194 0.528858 -0.444225 0.723169 + 0.990729 0.457313 3.86275 0.47081 -0.713856 0.518409 + 1.18742 0.628457 3.90512 0.493701 -0.700614 0.515169 + 1.24496 0.721223 3.98424 0.493019 -0.662374 0.564086 + 1.42149 0.889875 3.98692 0.598697 -0.512145 0.615848 + 1.32338 1.02894 4.16285 0.565193 -0.434894 0.701017 + 1.53374 0.918068 3.89229 0.64322 -0.512676 0.568711 + 1.44158 1.0534 4.07769 0.594718 -0.441061 0.672142 + 1.47608 1.25865 4.17559 0.581269 -0.401202 0.707929 + 1.35746 1.22365 4.248 0.557483 -0.395859 0.729731 + 1.23668 1.19981 4.3271 0.530777 -0.392507 0.751142 + 1.55811 1.09555 4.00168 0.629852 -0.451547 0.631974 + 1.59261 1.30081 4.09957 0.591983 -0.411903 0.692743 + 1.52366 1.5029 4.26593 0.556874 -0.382205 0.737435 + 1.40504 1.46782 4.33829 0.54822 -0.365178 0.752396 + 1.28469 1.42995 4.40648 0.524964 -0.358875 0.771765 + 1.70767 1.33952 4.02331 0.627781 -0.433967 0.646192 + 1.64331 1.53754 4.19673 0.567878 -0.394118 0.722624 + 1.69093 1.83115 4.30698 0.549143 -0.360751 0.753857 + 1.57128 1.79651 4.37618 0.522358 -0.354602 0.775499 + 1.4519 1.7518 4.43043 0.505121 -0.327733 0.798401 + 1.75837 1.57626 4.12047 0.598716 -0.403378 0.691973 + 1.80501 1.87262 4.24177 0.578622 -0.364946 0.729391 + 1.73252 2.19524 4.44797 0.535026 -0.35886 0.764831 + 1.61944 2.1369 4.49541 0.506039 -0.35889 0.784298 + 1.50006 2.09219 4.54966 0.418901 -0.351467 0.837253 + 1.9194 1.90472 4.16336 0.608974 -0.365701 0.703856 + 1.8466 2.2367 4.38276 0.567671 -0.356841 0.741899 + 1.83623 2.54914 4.541 0.55545 -0.358178 0.750456 + 1.72681 2.49021 4.58866 0.519334 -0.365533 0.772449 + 1.61373 2.43179 4.63605 0.458219 -0.3744 0.806139 + 1.95764 2.27166 4.3132 0.601845 -0.349297 0.718174 + 1.94726 2.5841 4.47144 0.604456 -0.340142 0.720373 + 1.7774 2.78615 4.69809 0.527126 -0.310637 0.790976 + 1.66799 2.72722 4.74575 0.48511 -0.3282 0.810526 + 1.55876 2.65939 4.77724 0.417146 -0.359934 0.834528 + 2.04499 2.64384 4.41137 0.650129 -0.31547 0.691238 + 1.87899 2.85807 4.65711 0.571262 -0.2896 0.767979 + 1.97672 2.9178 4.59705 0.65247 -0.253819 0.714044 + 1.44593 2.60017 4.80041 0.257662 -0.42463 0.867929 + 1.50091 2.37257 4.65921 0.345915 -0.36824 0.862985 + 1.37587 2.04314 4.58001 0.385219 -0.323978 0.864086 + 1.35201 2.81481 4.92064 0.228274 -0.365585 0.902352 + 1.33731 2.54742 4.78797 0.215805 -0.409421 0.886455 + 1.37672 2.32352 4.68958 0.31693 -0.332352 0.888312 + 1.24894 2.0079 4.62565 0.338407 -0.286289 0.896393 + 1.33155 1.71384 4.49857 0.475129 -0.298176 0.827855 + 1.24339 2.76206 4.9082 0.18998 -0.40872 0.892667 + 1.21853 2.49981 4.80543 0.297067 -0.348958 0.888808 + 1.25794 2.27592 4.70703 0.280022 -0.315419 0.906697 + 1.11812 1.97832 4.65868 0.290981 -0.266915 0.918742 + 1.20462 1.67869 4.54425 0.381834 -0.270176 0.88386 + 1.17369 2.68191 4.89262 0.279532 -0.365117 0.888004 + 1.10502 2.43335 4.82176 0.293681 -0.350358 0.889382 + 1.12712 2.24625 4.74002 0.279282 -0.321578 0.904759 + 1.06018 2.61545 4.90895 0.274134 -0.352617 0.894713 + 0.981271 2.37989 4.83674 0.219137 -0.361744 0.906157 + 1.00337 2.1928 4.755 0.22438 -0.310985 0.923549 + 0.87267 2.14869 4.76999 0.188975 -0.300815 0.934772 + 0.966128 2.6097 4.9291 0.199935 -0.363202 0.910006 + 0.859683 2.30012 4.82911 0.183215 -0.355693 0.916468 + 0.72993 2.25879 4.83789 0.139526 -0.344087 0.928513 + 0.742917 2.10736 4.77878 0.1578 -0.280602 0.946764 + 0.731467 2.51883 4.92969 0.108072 -0.3359 0.935677 + 0.600378 2.23063 4.84367 0.14269 -0.319469 0.936792 + 0.469162 2.22066 4.86194 0.126716 -0.297719 0.946206 + 0.601915 2.49058 4.93542 0.088653 -0.322623 0.942367 + 0.460761 2.49748 4.94567 0.0856858 -0.306807 0.947907 + 1.16027 1.40077 4.47282 0.44072 -0.338532 0.831362 + -0.251458 2.05987 -3.28899 -0.218359 0.538832 -0.813621 + -0.23245 2.17267 -3.20717 -0.21192 0.731562 -0.648002 + -0.152461 2.19752 -3.16676 0.172897 0.865061 -0.470931 + -0.267721 1.89853 -3.37668 -0.307719 0.373517 -0.875097 + -0.310818 1.90591 -3.35837 -0.343209 0.388145 -0.855308 + -0.294555 2.06726 -3.27068 -0.396886 0.55638 -0.730016 + -0.248572 1.81892 -3.40553 -0.299508 -0.421526 -0.855927 + -0.284143 1.82119 -3.39091 -0.352686 -0.476198 -0.805511 + -0.31065 1.83131 -3.38534 -0.541482 -0.328912 -0.773702 + -0.327769 1.9222 -3.34395 -0.545759 0.401431 -0.735527 + -0.329604 2.02374 -3.2783 -0.64101 0.442267 -0.6273 + -0.206741 1.81786 -3.41565 -0.168602 -0.426708 -0.888535 + -0.235338 1.79851 -3.3656 -0.0778444 -0.991165 -0.107389 + -0.281294 1.8027 -3.34962 -0.238713 -0.968073 -0.0764938 + -0.307801 1.81282 -3.34405 -0.507137 -0.84637 -0.162696 + -0.327601 1.8476 -3.37092 -0.780887 -0.129977 -0.611001 + -0.145802 1.79423 -3.3803 -0.00251803 -0.980512 -0.196443 + -0.193506 1.79745 -3.37572 -0.0631678 -0.991158 -0.116684 + -0.090409 1.79758 -3.38053 0.105152 -0.957042 -0.270212 + -0.083178 1.80368 -3.33461 0.0607932 -0.928123 0.367277 + -0.127022 1.80633 -3.32918 -0.00742429 -0.894547 0.446911 + -0.174726 1.80955 -3.3246 0.00547908 -0.909947 0.414689 + -0.033943 1.80588 -3.37903 0.540004 -0.804734 -0.246575 + -0.026712 1.81199 -3.33312 0.564218 -0.798804 0.208735 + -0.026712 1.83793 -3.28811 0.440511 -0.756404 0.483531 + -0.077097 1.85489 -3.27132 -0.0232801 -0.805646 0.59194 + -0.120941 1.85754 -3.26589 0.0676383 -0.836412 0.543911 + 0 1.88767 -3.35525 0.922265 -0.319494 -0.217603 + -0.016252 1.87696 -3.22971 0.521247 -0.694291 0.496248 + -0.066636 1.89392 -3.21292 0.0744862 -0.873026 0.481952 + -0.101804 1.89658 -3.19232 0.119764 -0.914255 0.387032 + -0.141762 1.85626 -3.26403 0.09413 -0.846341 0.524259 + -0.016252 1.92627 -3.17244 0.72321 -0.621892 0.300361 + -0.030875 1.92357 -3.14486 0.480746 -0.803582 0.350913 + -0.066043 1.92622 -3.12427 0.19493 -0.912793 0.358903 + -0.122625 1.89529 -3.19047 0.141095 -0.924313 0.354596 + -0.160705 1.86355 -3.24917 0.177591 -0.870128 0.459716 + -0.011183 1.96532 -3.12314 0.906192 -0.313133 0.284191 + -0.025806 1.96262 -3.09556 0.74708 -0.470955 0.46912 + -0.057187 1.95648 -3.06427 0.495356 -0.693643 0.522954 + -0.120883 1.92386 -3.08813 0.217273 -0.90909 0.355454 + -0.011183 2.00908 -3.09637 0.962129 -0.0397052 0.269686 + -0.041291 1.9961 -3.05045 0.760701 -0.354126 0.543994 + -0.072672 1.98996 -3.01916 0.589456 -0.527498 0.611791 + -0.112028 1.95411 -3.02813 0.351856 -0.794393 0.495113 + -0.147395 1.9172 -3.09252 0.147189 -0.929507 0.338159 + -0.025536 2.06202 -3.04565 0.912294 -0.121763 0.391015 + -0.055645 2.04904 -2.99974 0.795514 -0.294027 0.529816 + -0.080386 2.03729 -2.9747 0.64465 -0.446693 0.620396 + -0.098622 1.98346 -3.00363 0.479707 -0.62103 0.619841 + -0.011587 2.07808 -3.08639 0.98191 0.0245926 0.187744 + -0.051364 2.13434 -2.97331 0.918314 -0.121087 0.376879 + -0.071744 2.11124 -2.94107 0.821001 -0.273425 0.501194 + -0.096485 2.0995 -2.91603 0.555575 -0.471126 0.685111 + -0.106336 2.03079 -2.95916 0.427257 -0.537206 0.727228 + -0.032105 2.15701 -3.05363 0.961641 0.273533 0.0206299 + -0.037415 2.1504 -3.01405 0.970944 0.0436742 0.235287 + -0.061569 2.19045 -2.92543 0.925257 -0.188719 0.329067 + -0.081949 2.16734 -2.89318 0.82727 -0.292898 0.479411 + -0.102944 2.15383 -2.872 0.557112 -0.467825 0.686125 + -0.043906 2.17882 -3.07158 0.808843 0.533337 -0.247638 + -0.044375 2.21465 -3.00057 0.984043 0.173808 -0.0380833 + -0.049685 2.20804 -2.96099 0.980836 -0.0527312 0.187566 + -0.060198 2.2336 -2.89595 0.925279 -0.217824 0.310503 + -0.081358 2.25834 -3.01682 0.422646 0.610891 -0.669464 + -0.054531 2.22951 -3.02005 0.782685 0.464533 -0.414263 + -0.048481 2.27233 -2.96812 0.972569 0.205606 -0.108789 + -0.048313 2.25119 -2.93151 0.991396 -0.0412564 0.124226 + -0.097358 2.23148 -3.06218 0.303969 0.759977 -0.574489 + -0.104256 2.26771 -3.01851 0.221836 0.665219 -0.712932 + -0.077574 2.29006 -2.99257 0.315715 0.665445 -0.676392 + -0.058636 2.28719 -2.9876 0.638596 0.557015 -0.530969 + -0.120311 2.23474 -3.06283 0.230218 0.833097 -0.50294 + -0.127209 2.27097 -3.01915 0.0880916 0.680018 -0.727884 + -0.123349 2.30196 -2.99864 0.11593 0.713936 -0.690547 + -0.100472 2.29943 -2.99426 0.26694 0.718151 -0.642653 + -0.089494 2.35141 -2.90314 0.23161 0.853124 -0.467479 + -0.106736 2.2085 -3.12135 0.490261 0.809485 -0.323075 + -0.138848 2.22171 -3.11437 0.227633 0.891642 -0.391353 + -0.152423 2.24796 -3.05585 0.0904188 0.866021 -0.491764 + -0.154284 2.27313 -3.01843 -0.0152724 0.704336 -0.709703 + -0.184307 2.23498 -3.10511 0.019555 0.937109 -0.348489 + -0.181421 2.25134 -3.04883 -0.0847387 0.893436 -0.441125 + -0.183282 2.27651 -3.01141 -0.194604 0.648238 -0.73615 + -0.183897 2.30362 -2.99704 -0.165107 0.675695 -0.718454 + -0.150424 2.30412 -2.99792 0.00673593 0.721367 -0.692521 + -0.197921 2.21078 -3.1575 -0.0182108 0.862449 -0.505817 + -0.227363 2.23092 -3.09344 -0.287568 0.907389 -0.306512 + -0.224477 2.24728 -3.03716 -0.282637 0.876315 -0.390113 + -0.219971 2.27262 -3.00065 -0.350766 0.62678 -0.69578 + -0.267374 2.17265 -3.19234 -0.427205 0.717835 -0.549735 + -0.232845 2.21076 -3.14267 -0.291392 0.876131 -0.384037 + -0.278273 2.20844 -3.08421 -0.537864 0.794916 -0.280733 + -0.271332 2.2369 -3.01597 -0.513607 0.774855 -0.368521 + -0.266826 2.26223 -2.97946 -0.503052 0.544678 -0.671017 + -0.293459 2.14228 -3.20248 -0.553463 0.636752 -0.536867 + -0.283755 2.18828 -3.13344 -0.581465 0.760323 -0.289495 + -0.30984 2.1579 -3.14358 -0.811951 0.536674 -0.229599 + -0.308809 2.18477 -3.07768 -0.812183 0.552145 -0.188402 + -0.301868 2.21323 -3.00943 -0.781573 0.576371 -0.238622 + -0.328509 2.09876 -3.2101 -0.794375 0.496494 -0.349946 + -0.348331 2.00741 -3.25833 -0.909443 0.262462 -0.322533 + -0.346668 2.05602 -3.20424 -0.944 0.301425 -0.134194 + -0.322175 2.12033 -3.14958 -0.934475 0.348612 -0.0722897 + -0.321143 2.14719 -3.08367 -0.944076 0.31689 -0.0911142 + -0.313911 2.189 -3.00771 -0.931044 0.352826 -0.0931184 + -0.346496 1.90587 -3.32399 -0.884811 0.193 -0.4241 + -0.361012 1.96411 -3.22222 -0.997379 0.035581 -0.0630031 + -0.35935 2.01272 -3.16812 -0.991915 0.0996217 0.0786141 + -0.352907 2.03101 -3.14275 -0.983721 0.110054 0.142062 + -0.340334 2.07758 -3.14371 -0.948807 0.313783 -0.0361418 + -0.33517 1.84774 -3.34792 -0.843722 -0.409428 -0.347134 + -0.345178 1.86107 -3.34457 -0.564471 0.0283059 -0.824968 + -0.35672 1.91106 -3.28705 -0.983636 0.0990789 -0.15048 + -0.353513 1.88831 -3.25743 -0.991042 -0.118767 0.0610789 + -0.357805 1.94136 -3.1926 -0.942532 -0.234948 0.237558 + -0.31537 1.81296 -3.32104 -0.457844 -0.885437 -0.0798684 + -0.340923 1.83189 -3.29333 -0.699523 -0.713746 0.0351388 + -0.350931 1.84522 -3.28997 -0.891516 -0.449983 0.0520898 + -0.355402 1.86627 -3.30763 -0.982489 -0.123404 -0.139592 + -0.349042 1.86726 -3.23978 -0.851427 -0.423322 0.309629 + -0.305358 1.81202 -3.29945 -0.127702 -0.941155 0.31292 + -0.330911 1.83094 -3.27173 -0.348666 -0.83127 0.432923 + -0.277517 1.8115 -3.30338 0.000438635 -0.920624 0.390449 + -0.295121 1.84395 -3.26153 0.092684 -0.82821 0.552701 + -0.296138 1.86434 -3.22731 0.0621897 -0.875939 0.478397 + -0.331928 1.85133 -3.23751 -0.294864 -0.809359 0.50793 + -0.326539 1.90949 -3.16483 -0.716455 -0.513282 0.472476 + -0.231561 1.80731 -3.31936 0.10679 -0.942221 0.317513 + -0.242772 1.84949 -3.25356 0.0126169 -0.859353 0.511228 + -0.267281 1.84343 -3.26547 -0.0228817 -0.812728 0.582194 + -0.272701 1.87554 -3.20482 0.00579415 -0.903613 0.42831 + -0.309425 1.89356 -3.16257 -0.310998 -0.809053 0.498712 + -0.208394 1.81534 -3.30799 0.106514 -0.908215 0.404721 + -0.219605 1.85752 -3.24219 0.0331016 -0.885616 0.463237 + -0.215573 1.88599 -3.1778 -0.015708 -0.930334 0.366377 + -0.248192 1.8816 -3.19291 -0.0110217 -0.919205 0.393625 + -0.193669 1.81684 -3.30973 0.0946689 -0.889434 0.447152 + -0.197347 1.8591 -3.23793 0.0616154 -0.887548 0.456577 + -0.193315 1.88757 -3.17354 0.0470639 -0.93674 0.346847 + -0.182622 1.86061 -3.23967 0.217704 -0.877168 0.427998 + -0.171053 1.8857 -3.18537 0.182903 -0.925894 0.330556 + -0.169656 1.91908 -3.08069 0.07424 -0.933414 0.351037 + -0.222994 1.91107 -3.10367 -0.0173308 -0.941348 0.336991 + -0.255613 1.90667 -3.11878 -0.124156 -0.921583 0.367792 + -0.149137 1.88864 -3.19486 0.215088 -0.92054 0.326103 + -0.165125 1.94022 -3.02443 0.108313 -0.907134 0.406666 + -0.218463 1.93221 -3.04741 -0.111582 -0.898779 0.423964 + -0.253433 1.93131 -3.06382 -0.264142 -0.837594 0.47819 + -0.225351 1.9563 -3.00877 -0.219118 -0.830583 0.511977 + -0.282463 1.94866 -3.05916 -0.49023 -0.724139 0.485075 + -0.283809 1.9294 -3.08511 -0.437836 -0.758427 0.482792 + -0.285988 1.90476 -3.14008 -0.0758485 -0.913571 0.399544 + -0.19038 1.9572 -2.99237 -0.145514 -0.763983 0.628614 + -0.17514 2.01276 -2.94363 0.135703 -0.5745 0.807177 + -0.221486 1.96884 -2.98288 0.121068 -0.834987 0.536786 + -0.142878 1.95267 -3.0086 0.273699 -0.812213 0.515169 + -0.168133 1.96965 -2.97654 0.0953047 -0.689024 0.718445 + -0.129472 1.98201 -2.9841 0.381677 -0.614563 0.690388 + -0.136479 2.02512 -2.9512 0.316344 -0.540863 0.779355 + -0.149155 2.08945 -2.9016 0.195232 -0.562646 0.803314 + -0.182592 2.09 -2.89932 0.0299881 -0.556464 0.83033 + -0.215792 2.08846 -2.89973 -0.117927 -0.545613 0.829698 + -0.20834 2.01122 -2.94405 -0.0712762 -0.585065 0.807848 + -0.119012 2.09512 -2.90956 0.317708 -0.556568 0.767655 + -0.12547 2.14946 -2.86554 0.334991 -0.576663 0.745144 + -0.151331 2.14541 -2.85801 0.174117 -0.61988 0.765135 + -0.184768 2.14596 -2.85572 0.0400575 -0.669956 0.741319 + -0.212844 2.14683 -2.85505 -0.135856 -0.668473 0.731223 + -0.103209 2.20056 -2.84094 0.673171 -0.477386 0.564751 + -0.122263 2.19353 -2.82877 0.460513 -0.614541 0.640521 + -0.148124 2.18949 -2.82124 0.293896 -0.690206 0.661242 + -0.176551 2.18416 -2.81201 0.176259 -0.748459 0.63933 + -0.204628 2.18504 -2.81134 -0.107222 -0.750932 0.651616 + -0.082215 2.21407 -2.86212 0.826353 -0.337796 0.450593 + -0.11137 2.27078 -2.76348 0.680305 -0.514465 0.522025 + -0.130423 2.26376 -2.75131 0.504414 -0.626712 0.593968 + -0.15082 2.25873 -2.74261 0.377074 -0.68718 0.620966 + -0.071664 2.30111 -2.81601 0.924252 -0.212027 0.317494 + -0.093681 2.28158 -2.78219 0.819853 -0.380389 0.427955 + -0.131873 2.36449 -2.64017 0.649771 -0.551772 0.522823 + -0.145505 2.36013 -2.63263 0.471492 -0.659434 0.585528 + -0.165902 2.35511 -2.62392 0.362104 -0.703069 0.612025 + -0.062194 2.31767 -2.84469 0.986158 0.0186609 0.164755 + -0.098132 2.38756 -2.68012 0.90883 -0.248176 0.335314 + -0.114185 2.37528 -2.65887 0.798363 -0.414673 0.436649 + -0.145322 2.44721 -2.53414 0.631681 -0.575774 0.519099 + -0.062361 2.3388 -2.8813 0.945746 0.322243 -0.0415247 + -0.088682 2.4174 -2.73182 0.943167 0.331759 -0.0193032 + -0.088662 2.40411 -2.7088 0.98495 0.021417 0.171507 + -0.117082 2.4663 -2.56721 0.903317 -0.268488 0.334564 + -0.133134 2.45403 -2.54596 0.781937 -0.444957 0.436564 + -0.070556 2.34854 -2.89817 0.610668 0.713171 -0.344199 + -0.096877 2.42714 -2.74869 0.575422 0.75827 -0.306456 + -0.110511 2.49009 -2.60842 0.939899 0.339659 -0.0349542 + -0.110491 2.47681 -2.5854 0.98469 -0.00573657 0.174221 + -0.134346 2.53153 -2.4672 0.892657 -0.0892953 0.441802 + -0.110532 2.42881 -2.75158 0.198245 0.879829 -0.431972 + -0.129787 2.4979 -2.62194 0.189268 0.874336 -0.446894 + -0.116132 2.49623 -2.61905 0.571454 0.754259 -0.323316 + -0.127775 2.55059 -2.50022 0.879144 0.47098 0.0726899 + -0.127755 2.54203 -2.48539 0.94369 0.184184 0.274819 + -0.107449 2.35357 -2.90688 0.192312 0.863848 -0.465599 + -0.128487 2.43097 -2.75532 0.175695 0.883329 -0.434582 + -0.142106 2.49922 -2.62423 0.167668 0.877041 -0.450207 + -0.142187 2.55777 -2.51265 0.171822 0.922607 -0.345359 + -0.133396 2.55673 -2.51085 0.53549 0.814638 -0.222746 + -0.130326 2.3561 -2.91125 0.121261 0.870736 -0.476565 + -0.14484 2.43253 -2.75802 0.107021 0.889835 -0.443555 + -0.158459 2.50078 -2.62693 0.104357 0.882685 -0.458233 + -0.16498 2.56009 -2.51667 0.100141 0.926764 -0.362049 + -0.154506 2.55909 -2.51493 0.155437 0.923946 -0.349517 + -0.154514 2.35691 -2.91266 0.0160742 0.873493 -0.486572 + -0.169028 2.43334 -2.75942 0.0153302 0.892056 -0.451664 + -0.175038 2.50128 -2.6278 0.013682 0.884916 -0.46555 + -0.187987 2.3564 -2.91177 -0.113945 0.863086 -0.492036 + -0.193077 2.43299 -2.75882 -0.106923 0.884529 -0.454067 + -0.199087 2.50094 -2.6272 -0.103096 0.878995 -0.465553 + -0.196999 2.56038 -2.51717 -0.0930509 0.922979 -0.373433 + -0.181559 2.5606 -2.51754 0.0126849 0.92831 -0.37159 + -0.220585 2.29972 -2.98628 -0.327904 0.640685 -0.694263 + -0.218494 2.35289 -2.90569 -0.271071 0.832024 -0.484 + -0.223585 2.42948 -2.75274 -0.248741 0.85982 -0.445911 + -0.220089 2.49869 -2.62331 -0.242939 0.857078 -0.45431 + -0.258012 2.29166 -2.97232 -0.464643 0.583242 -0.666285 + -0.255921 2.34483 -2.89174 -0.400385 0.788459 -0.466931 + -0.250666 2.42435 -2.74386 -0.36815 0.824968 -0.428827 + -0.247171 2.49356 -2.61442 -0.35535 0.82708 -0.435506 + -0.284352 2.27957 -2.96062 -0.637382 0.507025 -0.580232 + -0.275893 2.33922 -2.88201 -0.592933 0.69556 -0.405743 + -0.270638 2.41874 -2.73413 -0.561015 0.737811 -0.375363 + -0.260889 2.49002 -2.60827 -0.54621 0.748479 -0.376076 + -0.235442 2.55483 -2.50754 -0.327434 0.884796 -0.331547 + -0.293166 2.25013 -2.96776 -0.714989 0.465898 -0.521278 + -0.29339 2.27383 -2.95069 -0.849928 0.409895 -0.331072 + -0.28493 2.33348 -2.87208 -0.821451 0.503148 -0.26844 + -0.276981 2.41524 -2.72802 -0.795645 0.548389 -0.257327 + -0.267232 2.48651 -2.60215 -0.780405 0.571807 -0.252992 + -0.305209 2.2259 -2.96604 -0.913315 0.355514 -0.198661 + -0.312744 2.21232 -2.94996 -0.969967 0.232273 -0.0722071 + -0.300925 2.26025 -2.93461 -0.940963 0.29954 -0.157686 + -0.292781 2.32328 -2.85759 -0.922847 0.348015 -0.165039 + -0.284832 2.40503 -2.71352 -0.908802 0.386021 -0.158323 + -0.323131 2.16066 -3.00182 -0.977091 0.21184 -0.0204442 + -0.312674 2.20736 -2.92309 -0.973595 -0.0340987 0.22572 + -0.310056 2.24086 -2.9088 -0.992727 0.0721936 0.0963434 + -0.301912 2.30389 -2.83178 -0.997784 0.0452835 0.0487576 + -0.291723 2.39286 -2.69742 -0.996212 0.0758862 0.0424683 + -0.330363 2.11885 -3.07778 -0.960276 0.276503 -0.0376346 + -0.32306 2.1557 -2.97495 -0.97942 -0.018849 0.200951 + -0.306553 2.13106 -2.94589 -0.797598 -0.354726 0.48786 + -0.298173 2.1898 -2.89418 -0.822847 -0.285061 0.491592 + -0.295555 2.2233 -2.87989 -0.888521 -0.221718 0.401711 + -0.342936 2.07228 -3.07681 -0.986382 0.00243778 0.16445 + -0.326429 2.04764 -3.04775 -0.886975 -0.235309 0.397371 + -0.272273 2.10669 -2.92795 -0.665415 -0.415155 0.620379 + -0.263892 2.16543 -2.87623 -0.632123 -0.513739 0.58008 + -0.262774 2.2018 -2.83487 -0.705051 -0.508618 0.494177 + -0.344862 1.99285 -3.11945 -0.914913 -0.197597 0.351979 + -0.332527 1.99984 -3.08785 -0.866712 -0.279936 0.412851 + -0.282181 2.02501 -2.97729 -0.750679 -0.319663 0.578184 + -0.247373 2.01184 -2.95231 -0.410357 -0.502208 0.761179 + -0.237464 2.09352 -2.90297 -0.44558 -0.482307 0.754214 + -0.351305 1.97457 -3.14482 -0.908708 -0.239193 0.342106 + -0.320039 1.9427 -3.11706 -0.736999 -0.506047 0.448049 + -0.318694 1.96196 -3.09111 -0.768869 -0.482946 0.419052 + -0.306359 1.96895 -3.05951 -0.738873 -0.52726 0.419598 + -0.28828 1.97721 -3.01739 -0.721224 -0.506276 0.472781 + -0.278599 1.9612 -3.03327 -0.437857 -0.798916 0.412329 + -0.260519 1.96946 -2.99115 -0.385691 -0.750131 0.537165 + -0.234516 2.1519 -2.85829 -0.440538 -0.601958 0.666013 + -0.233398 2.18826 -2.81693 -0.414741 -0.68348 0.600703 + -0.259031 2.26576 -2.75796 -0.722329 -0.524375 0.450856 + -0.203814 2.25251 -2.73182 -0.070152 -0.75801 0.64846 + -0.232584 2.25573 -2.73741 -0.424254 -0.69214 0.58391 + -0.257984 2.36276 -2.64031 -0.702431 -0.546811 0.45562 + -0.291812 2.28726 -2.80297 -0.896974 -0.322994 0.301847 + -0.179248 2.2534 -2.73338 0.203954 -0.735972 0.64556 + -0.210942 2.35081 -2.61647 -0.054758 -0.766176 0.640293 + -0.231537 2.35273 -2.61976 -0.406037 -0.703988 0.582696 + -0.249046 2.4439 -2.53038 -0.688999 -0.542046 0.48111 + -0.281624 2.37623 -2.66861 -0.87677 -0.360605 0.318179 + -0.186376 2.35171 -2.61803 0.185515 -0.747591 0.637724 + -0.210276 2.43566 -2.51411 -0.051602 -0.769134 0.637001 + -0.230871 2.43758 -2.5174 -0.395312 -0.700434 0.59424 + -0.240977 2.5156 -2.44155 -0.720253 -0.307776 0.621698 + -0.272686 2.45737 -2.55869 -0.880328 -0.327252 0.343407 + -0.172947 2.43967 -2.52109 0.34674 -0.718014 0.603513 + -0.193421 2.43627 -2.5152 0.182407 -0.756081 0.628545 + -0.2096 2.50807 -2.42651 -0.0610164 -0.596689 0.80015 + -0.222802 2.50928 -2.42857 -0.410159 -0.503335 0.760542 + -0.158954 2.44285 -2.52659 0.455179 -0.677123 0.5782 + -0.179594 2.51086 -2.4314 0.360863 -0.562574 0.743834 + -0.192744 2.50868 -2.4276 0.194926 -0.59648 0.778598 + -0.196838 2.55676 -2.40464 0.0615659 0.247304 0.96698 + -0.21004 2.55797 -2.4067 -0.329769 0.34857 0.877355 + -0.156885 2.51682 -2.44171 0.645516 -0.408913 0.645058 + -0.165601 2.51404 -2.43691 0.476431 -0.514593 0.712887 + -0.183688 2.55895 -2.40844 0.282714 0.313734 0.906446 + -0.225304 2.56665 -2.42497 -0.602512 0.56139 0.567293 + -0.256241 2.52427 -2.45982 -0.873282 -0.109365 0.474782 + -0.144697 2.52364 -2.45353 0.793967 -0.260513 0.549318 + -0.174971 2.56172 -2.41324 0.449796 0.386425 0.805208 + -0.199345 2.58 -2.44491 -0.082826 0.991591 0.0994351 + -0.216786 2.57669 -2.43918 -0.242803 0.959411 0.143451 + -0.220791 2.57447 -2.43529 -0.411202 0.861011 0.299286 + -0.16462 2.56961 -2.42691 0.561152 0.569587 0.600566 + -0.16464 2.57817 -2.44174 0.418249 0.882048 0.216932 + -0.173431 2.57921 -2.44353 0.0786092 0.986949 0.140543 + -0.183906 2.58021 -2.44528 0.0294615 0.993422 0.110656 + -0.218001 2.55814 -2.51328 -0.228921 0.905474 -0.357368 + -0.24916 2.55128 -2.50139 -0.509127 0.82027 -0.260665 + -0.253165 2.54906 -2.4975 -0.717118 0.686214 -0.121872 + -0.258603 2.54263 -2.4884 -0.828347 0.560103 -0.011234 + -0.263116 2.53481 -2.47807 -0.942069 0.269214 0.200073 + -0.27267 2.48008 -2.59304 -0.895014 0.419745 -0.150879 + -0.279561 2.46791 -2.57694 -0.993344 0.0904817 0.0712806 + 1.70947 2.207 -1.0732 -0.932897 0.0215028 0.359501 + 1.68994 2.06329 -1.11309 -0.928746 0.0378035 0.368784 + 1.70339 1.9893 -1.07574 -0.891568 0.0270818 0.452076 + 1.7066 2.25074 -1.08775 -0.946906 0.0705403 0.313677 + 1.68707 2.10694 -1.1277 -0.975667 0.0565817 0.211832 + 1.6801 1.96246 -1.12805 -0.952446 0.0480972 0.300888 + 1.69354 1.88847 -1.0907 -0.887855 0.0584277 0.456399 + 1.72999 1.82017 -1.02458 -0.824997 0.0814265 0.559241 + 1.67403 1.97548 -1.1624 -0.980483 0.0776943 0.180599 + 1.66549 1.89627 -1.1742 -0.963869 0.0805697 0.253901 + 1.67156 1.88333 -1.13979 -0.949116 0.0939896 0.300574 + 1.67721 1.82691 -1.10747 -0.904603 0.0904892 0.416541 + 1.71157 1.78383 -1.04185 -0.835431 0.120999 0.536111 + 1.67457 2.027 -1.19043 -0.994833 0.0992431 0.0214194 + 1.65095 1.83516 -1.20736 -0.986529 0.144783 0.0761403 + 1.65795 1.81516 -1.16071 -0.960089 0.102713 0.260151 + 1.6636 1.75882 -1.12833 -0.91532 0.161804 0.368793 + 1.69524 1.72227 -1.05862 -0.837344 0.205978 0.506387 + 1.67051 1.94782 -1.27149 -0.967205 0.167548 -0.1909 + 1.66079 1.88651 -1.2351 -0.988105 0.13857 -0.0666898 + 1.63079 1.69475 -1.26975 -0.969797 0.24063 -0.0398943 + 1.61944 1.69088 -1.21046 -0.963271 0.262642 0.0559363 + 1.64341 1.75406 -1.19388 -0.903505 0.190167 0.384077 + 1.64871 1.78512 -1.32169 -0.959819 0.202309 -0.194467 + 1.64063 1.74601 -1.29754 -0.981592 0.188498 -0.030748 + 1.61323 1.63098 -1.2815 -0.945025 0.326675 0.0145108 + 1.60187 1.62711 -1.22221 -0.943088 0.33252 -0.00401347 + 1.61773 1.64263 -1.16089 -0.909241 0.305563 0.282688 + 1.65962 1.79027 -1.34981 -0.800425 0.27522 -0.532517 + 1.6578 1.70994 -1.38728 -0.685265 0.39361 -0.612767 + 1.61771 1.62371 -1.39571 -0.925311 0.300882 -0.230802 + 1.60964 1.58459 -1.37157 -0.942423 0.300413 -0.146939 + 1.60154 1.60372 -1.30009 -0.91387 0.387585 -0.120914 + 1.6865 1.80988 -1.36317 -0.0330141 0.40307 -0.914574 + 1.68468 1.72955 -1.40063 0.00451311 0.429125 -0.903234 + 1.67945 1.64718 -1.44516 0.139863 0.500127 -0.854582 + 1.66448 1.57375 -1.48918 0.22822 0.537852 -0.811561 + 1.64283 1.63651 -1.43129 -0.642365 0.485275 -0.593191 + 1.73367 1.82544 -1.32353 0.632844 0.274154 -0.724119 + 1.73005 1.73866 -1.36081 0.654193 0.279369 -0.70284 + 1.73301 1.64749 -1.3925 0.696074 0.278801 -0.661627 + 1.72777 1.56512 -1.43703 0.722036 0.287675 -0.629212 + 1.72826 1.47856 -1.47591 0.749976 0.311276 -0.583646 + 1.8073 1.59501 -1.329 0.790291 0.234705 -0.565998 + 1.81026 1.50393 -1.36065 0.761352 0.208606 -0.613862 + 1.81855 1.40599 -1.38161 0.809609 0.219224 -0.544494 + 1.81903 1.31935 -1.42054 0.824329 0.232015 -0.516383 + 1.88805 1.42946 -1.26487 0.862473 0.198283 -0.465644 + 1.88883 1.33396 -1.29624 0.848639 0.16815 -0.501535 + 1.89712 1.23602 -1.31722 0.89229 0.157549 -0.423081 + 1.89403 1.14413 -1.35127 0.900486 0.162554 -0.403361 + 1.82824 1.22532 -1.44989 0.857478 0.240547 -0.454827 + 1.9662 1.25106 -1.18427 0.897749 0.174042 -0.404667 + 1.96698 1.15547 -1.2157 0.851342 0.0861279 -0.517492 + 1.95399 1.05227 -1.23915 0.88509 0.0718771 -0.459836 + 1.95089 0.960473 -1.27315 0.922425 0.103655 -0.372004 + 2.02124 1.12376 -1.10058 0.943906 0.107475 -0.312234 + 2.01002 1.03308 -1.14751 0.912561 0.0248311 -0.408186 + 1.99703 0.929877 -1.17096 0.921965 0.013977 -0.387022 + 1.97952 0.841297 -1.22353 0.943093 0.0450062 -0.32947 + 1.93121 0.894901 -1.34518 0.937188 0.0959741 -0.335362 + 2.04402 1.04975 -1.03439 0.970161 0.0366551 -0.239675 + 2.0328 0.959071 -1.08132 0.962936 -0.042258 -0.266397 + 2.01409 0.862541 -1.12133 0.963861 -0.0557323 -0.260511 + 1.99658 0.774051 -1.17386 0.972629 -0.0280371 -0.230665 + 2.06051 1.00499 -0.955058 0.988196 -0.0555689 -0.142761 + 2.04378 0.902897 -0.995826 0.982864 -0.124274 -0.136139 + 2.02508 0.806365 -1.03583 0.983887 -0.123265 -0.129508 + 2.00857 0.707927 -1.07553 0.987845 -0.100335 -0.118719 + 1.98022 0.694353 -1.24222 0.968275 -0.0336522 -0.247611 + 2.0661 0.987656 -0.861234 0.991255 -0.121944 -0.0504304 + 2.04937 0.885481 -0.902062 0.986152 -0.155723 -0.0570551 + 2.02757 0.760312 -0.902864 0.986576 -0.157178 -0.0443059 + 2.01107 0.661873 -0.942562 0.992309 -0.118422 -0.0360296 + 2.0847 1.11063 -0.690828 0.99095 -0.134231 -0.00102659 + 2.07118 1.00891 -0.747247 0.989535 -0.14429 0.000143634 + 2.05499 0.905722 -0.797122 0.985056 -0.171725 0.0132001 + 2.03319 0.780641 -0.797873 0.983153 -0.175636 0.0506217 + 2.08462 1.14167 -0.528789 0.972804 -0.21493 0.0863571 + 2.07631 1.0583 -0.619392 0.981467 -0.177007 0.0734189 + 2.06012 0.955113 -0.669267 0.965319 -0.235701 0.112269 + 2.03629 0.845114 -0.720743 0.968054 -0.21256 0.133004 + 2.09548 1.25584 -0.32634 0.905461 -0.382988 0.18292 + 2.07182 1.16429 -0.403371 0.899717 -0.378018 0.2182 + 2.06351 1.08092 -0.493969 0.928445 -0.306689 0.209597 + 2.04628 0.984262 -0.563157 0.914629 -0.324169 0.241595 + 2.11872 1.34714 -0.246282 0.894526 -0.425495 0.137028 + 2.07553 1.27638 -0.230928 0.803187 -0.506288 0.313947 + 2.05188 1.18475 -0.308008 0.827498 -0.457483 0.325509 + 2.03179 1.08707 -0.384218 0.850049 -0.40973 0.330965 + 2.01455 0.990413 -0.453411 0.843974 -0.395673 0.362146 + 2.12035 1.37266 -0.167875 0.830063 -0.497557 0.251857 + 2.09296 1.37722 -0.106179 0.691283 -0.550943 0.467536 + 2.04814 1.28086 -0.169283 0.714323 -0.569529 0.406669 + 2.0211 1.18058 -0.248183 0.73405 -0.526722 0.428642 + 2.001 1.0829 -0.324393 0.698443 -0.519557 0.492177 + 2.15469 1.46887 -0.097327 0.813106 -0.497315 0.302551 + 2.11209 1.46856 -0.032783 0.645814 -0.555379 0.523907 + 2.02482 1.34524 -0.069792 0.392895 -0.628094 0.671663 + 2.01546 1.25513 -0.152315 0.470969 -0.639135 0.608025 + 1.98841 1.15476 -0.231266 0.369836 -0.638807 0.674646 + 2.18873 1.57082 -0.033902 0.766863 -0.523109 0.371858 + 2.14613 1.57059 0.030692 0.668491 -0.511082 0.540291 + 2.04396 1.43658 0.003602 0.426998 -0.634943 0.643832 + 1.97634 1.39651 -0.013797 -0.191043 -0.67037 0.717012 + 1.97747 1.30843 -0.088838 -0.161013 -0.65685 0.736629 + 2.2366 1.67118 0.022866 0.711958 -0.602968 0.359923 + 2.15405 1.65995 0.099917 0.588529 -0.620177 0.518666 + 2.03495 1.51832 0.092235 0.386357 -0.612656 0.689478 + 1.96733 1.47825 0.074836 -0.183369 -0.713998 0.675709 + 2.30028 1.76094 0.076794 0.743493 -0.577635 0.336981 + 2.21773 1.74971 0.153845 0.511923 -0.621409 0.593116 + 2.04287 1.60776 0.161511 0.364529 -0.561598 0.742782 + 1.93928 1.55924 0.143957 -0.180167 -0.693776 0.697291 + 1.92104 1.44646 -0.019105 -0.739905 -0.527243 0.417799 + 2.32127 1.79285 -0.010067 0.840246 -0.535624 -0.0842239 + 2.33657 1.81891 0.081796 0.830153 -0.507981 0.229784 + 2.3157 1.79518 -0.041913 0.8125 -0.373584 -0.447526 + 2.35674 1.84633 -0.008909 0.96658 -0.193091 -0.168636 + 2.36546 1.88611 0.038201 0.987746 -0.155841 0.00845147 + 2.34528 1.85868 0.128906 0.848888 -0.431477 0.305315 + 2.28027 1.75988 -0.080374 0.887248 -0.211176 -0.410117 + 2.32537 1.91211 -0.01503 0.274366 0.425895 -0.862169 + 2.34897 1.93992 0.013602 0.631987 0.451472 -0.629893 + 2.36724 1.92857 0.042453 0.962657 0.182794 -0.199693 + 2.35617 1.95194 0.178382 0.93798 -0.170716 0.301743 + 2.26153 2.01042 0.037081 0.0306458 0.537382 -0.842782 + 2.28513 2.03823 0.065712 0.32017 0.729768 -0.604094 + 2.33417 2.04014 0.1172 0.623085 0.714893 -0.317321 + 2.35243 2.02888 0.146103 0.850756 0.52553 -0.00571994 + 2.35795 1.99449 0.182684 0.938337 0.177979 0.296391 + 2.21586 2.04588 0.063268 -0.0889614 0.6397 -0.763459 + 2.23229 2.08064 0.109466 0.135533 0.889422 -0.436531 + 2.28133 2.08255 0.160956 0.396365 0.911942 -0.1061 + 2.30384 2.06634 0.207823 0.58321 0.754691 0.300513 + 2.15972 2.09474 0.138633 -0.0465934 0.918884 -0.391766 + 2.19296 2.10671 0.200114 0.138424 0.990254 0.0153814 + 2.21547 2.09059 0.247031 0.308259 0.840799 0.44501 + 2.22548 2.04512 0.287584 0.386278 0.573091 0.722742 + 2.30936 2.03194 0.244404 0.667677 0.466693 0.580004 + 2.06722 2.07637 0.125264 -0.213807 0.715928 -0.66463 + 2.06868 2.09668 0.172282 -0.154962 0.955069 -0.252647 + 2.10191 2.10864 0.233762 -0.0297638 0.996132 0.082677 + 2.11664 2.09202 0.285745 0.126242 0.846815 0.516689 + 1.99034 2.06431 0.145555 -0.349591 0.712653 -0.608204 + 1.99179 2.08462 0.192572 -0.281934 0.926048 -0.250896 + 1.97828 2.09008 0.273113 -0.201683 0.971979 0.120754 + 1.99301 2.07346 0.325096 -0.0465262 0.841273 0.538605 + 2.12665 2.04664 0.326349 0.246298 0.530786 0.810927 + 1.97494 1.98465 0.109118 -0.33246 0.566044 -0.754364 + 1.92688 2.02509 0.144879 -0.284269 0.599323 -0.748333 + 1.86678 2.02229 0.164923 -0.340007 0.709316 -0.617467 + 1.88359 2.04991 0.211892 -0.35373 0.90158 -0.249056 + 1.81352 1.9195 0.12256 -0.322076 0.547825 -0.77211 + 1.75341 1.9167 0.142605 -0.438961 0.414584 -0.79714 + 1.73438 1.97249 0.188775 -0.572091 0.647194 -0.503838 + 1.7512 2.00011 0.235745 -0.534351 0.839487 -0.0986473 + 1.87008 2.05545 0.292484 -0.360957 0.922306 0.138063 + 1.77848 1.88161 0.104993 -0.479598 0.76479 -0.430211 + 1.72363 1.8572 0.131276 -0.922634 0.0408691 -0.383505 + 1.71488 1.87816 0.156571 -0.917652 0.0475583 -0.394528 + 1.69585 1.93395 0.202742 -0.924586 0.208421 -0.318907 + 1.78656 1.8729 0.074278 -0.450833 0.632716 -0.629618 + 1.73172 1.84849 0.100561 -0.859066 0.215164 -0.464445 + 1.72141 1.84774 0.19585 -0.919133 -0.393719 -0.0133936 + 1.71266 1.8687 0.221145 -0.920921 -0.383631 0.0687863 + 1.80597 1.83923 0.042994 -0.4178 0.411838 -0.809835 + 1.75682 1.79571 0.071374 -0.862163 -0.117462 -0.492825 + 1.74652 1.79497 0.166664 -0.90685 -0.420786 0.0237309 + 1.71044 1.88591 0.258945 -0.894354 -0.39077 0.217782 + 1.69363 1.95115 0.240542 -0.930314 0.366292 -0.0185871 + 1.80707 1.70358 0.008356 -0.884428 -0.0258417 -0.465961 + 1.84763 1.61518 -0.058342 -0.939199 -0.0838011 -0.33299 + 1.79353 1.68774 0.086183 -0.915349 -0.400036 -0.0459052 + 1.86913 1.54697 -0.119202 -0.968741 -0.071143 -0.237656 + 1.83409 1.59935 0.019485 -0.904695 -0.425944 0.00991559 + 1.85245 1.60663 0.108876 -0.728893 -0.609277 0.312243 + 1.80713 1.67712 0.149785 -0.770186 -0.583953 0.256538 + 1.88609 1.47278 -0.186297 -0.998635 0.0506971 -0.0125523 + 1.87462 1.52017 -0.039378 -0.898153 -0.427624 0.102274 + 1.89298 1.52745 0.050015 -0.705448 -0.608514 0.363392 + 1.8862 1.64258 0.21421 -0.27612 -0.720871 0.635691 + 1.84087 1.71298 0.255069 -0.651491 -0.635158 0.414891 + 1.87618 1.42189 -0.268346 -0.996064 0.016844 0.0870237 + 1.89158 1.44598 -0.106472 -0.942362 -0.289633 0.16753 + 1.86885 1.35294 -0.337923 -0.979877 0.00763949 0.199458 + 1.90639 1.358 -0.168095 -0.9417 -0.229522 0.246012 + 1.93585 1.35848 -0.080729 -0.733469 -0.461113 0.499398 + 1.93698 1.27049 -0.155721 -0.741454 -0.401711 0.53747 + 1.85871 1.43788 -0.420448 -0.961644 0.205777 0.181372 + 1.85085 1.29307 -0.412823 -0.968556 0.0391518 0.245698 + 1.89905 1.28905 -0.237671 -0.943827 -0.129409 0.304046 + 1.92234 1.18614 -0.219015 -0.69095 -0.372551 0.619511 + 1.96811 1.21832 -0.17136 -0.0948823 -0.646467 0.757019 + 1.84298 1.48933 -0.552965 -0.912855 0.300427 0.276476 + 1.84071 1.37809 -0.49529 -0.966285 0.11132 0.232166 + 1.82658 1.23187 -0.486835 -0.962105 0.0355134 0.270355 + 1.88441 1.2047 -0.300965 -0.937289 -0.0666557 0.342119 + 1.89832 1.10095 -0.296262 -0.726026 -0.295838 0.620779 + 1.82859 1.54464 -0.664366 -0.853786 0.424573 0.30131 + 1.81373 1.44579 -0.625345 -0.91646 0.219698 0.334416 + 1.81147 1.33455 -0.567678 -0.951584 0.096741 0.29177 + 1.80398 1.18699 -0.568694 -0.958656 0.0965626 0.267685 + 1.86015 1.14351 -0.374978 -0.929323 0.0243971 0.368461 + 1.78188 1.54323 -0.805916 -0.828759 0.447392 0.336152 + 1.74035 1.49789 -0.858394 -0.864628 0.355173 0.355346 + 1.78706 1.49931 -0.716844 -0.873598 0.343412 0.344811 + 1.77308 1.39422 -0.689219 -0.920959 0.123895 0.369439 + 1.78887 1.28967 -0.649536 -0.948651 0.0275966 0.315117 + 1.79768 1.63054 -0.869151 -0.8072 0.338824 0.48335 + 1.74955 1.58263 -0.912958 -0.810723 0.334747 0.480283 + 1.70359 1.5243 -0.951933 -0.83526 0.265906 0.481285 + 1.70034 1.44373 -0.903383 -0.877824 0.306469 0.368106 + 1.74642 1.44774 -0.780717 -0.897925 0.23803 0.370234 + 1.75647 1.70315 -0.956914 -0.80009 0.198643 0.566036 + 1.73805 1.66673 -0.974234 -0.817519 0.214121 0.534617 + 1.70923 1.65183 -1.00802 -0.766276 0.265323 0.58517 + 1.72073 1.56773 -0.946754 -0.785855 0.263163 0.559623 + 1.68522 1.62034 -1.02008 -0.76353 0.279533 0.582137 + 1.66809 1.577 -1.02521 -0.795263 0.243144 0.555372 + 1.66357 1.47014 -0.99693 -0.835576 0.210523 0.507437 + 1.66068 1.38386 -0.951877 -0.886614 0.265384 0.378797 + 1.67123 1.69079 -1.07069 -0.805884 0.286591 0.51809 + 1.64934 1.63786 -1.08662 -0.85063 0.271332 0.450341 + 1.63962 1.53542 -1.04439 -0.793347 0.215067 0.569514 + 1.60744 1.48643 -1.07733 -0.816076 0.175225 0.550742 + 1.63139 1.42106 -1.02992 -0.848007 0.169924 0.502006 + 1.64171 1.7058 -1.1443 -0.906867 0.266878 0.326141 + 1.62087 1.59636 -1.10574 -0.845629 0.314286 0.431435 + 1.59827 1.55151 -1.12345 -0.866794 0.292173 0.404108 + 1.98978 1.6911 0.231766 0.262485 -0.587353 0.765584 + 1.98945 1.75703 0.288962 0.357307 -0.655906 0.66492 + 1.8863 1.73845 0.328145 0.0159542 -0.745426 0.666398 + 1.8458 1.74 0.305064 -0.526804 -0.688234 0.49881 + 2.2174 1.81556 0.210993 0.426864 -0.604969 0.672161 + 2.14869 1.86319 0.301296 0.402667 -0.549092 0.732365 + 2.03042 1.82386 0.333414 0.38261 -0.563965 0.731815 + 1.92727 1.80528 0.372597 0.278413 -0.51425 0.811192 + 2.31566 1.8655 0.18929 0.664612 -0.516192 0.540219 + 2.24695 1.91313 0.279592 0.500297 -0.44567 0.742348 + 2.22239 1.94999 0.310547 0.441435 -0.206128 0.873296 + 2.13676 1.92875 0.342738 0.35553 -0.227517 0.906551 + 2.32655 1.95876 0.238765 0.766278 -0.176219 0.617871 + 2.30199 1.99562 0.269721 0.649086 0.102996 0.75371 + 2.21811 2.00879 0.3129 0.395035 0.248026 0.884551 + 2.13248 1.98755 0.345091 0.308353 0.136688 0.9414 + 2.01849 1.88934 0.374807 0.327816 -0.276444 0.903391 + 2.02889 1.97432 0.382406 0.234953 0.116625 0.964985 + 1.95482 1.94111 0.397731 0.212943 0.0215192 0.976828 + 1.94442 1.85613 0.390132 0.216446 -0.262399 0.940371 + 1.86725 1.78376 0.373066 -0.111711 -0.563103 0.818801 + 2.02307 2.03341 0.363662 0.135103 0.530452 0.83688 + 1.91758 1.99965 0.388944 -0.0136993 0.499708 0.866085 + 1.92943 1.95493 0.405201 0.24524 0.181315 0.952356 + 1.8844 1.83461 0.3906 0.0565497 -0.312228 0.948323 + 1.88753 2.03961 0.350326 -0.248674 0.779322 0.575169 + 1.78108 1.97992 0.360723 -0.478586 0.63171 0.609835 + 1.83084 1.95588 0.403754 -0.270964 0.449504 0.85119 + 1.84269 1.91125 0.420061 -0.107942 -0.0450639 0.993135 + 1.85901 1.84842 0.398071 -0.0344053 -0.398678 0.916445 + 1.76363 1.99576 0.302879 -0.534506 0.803617 0.26173 + 1.70607 1.9468 0.307678 -0.897708 0.252123 0.361323 + 1.72681 1.93728 0.344367 -0.776633 0.065298 0.62656 + 1.77658 1.91316 0.387347 -0.630922 -0.0637786 0.77322 + 1.79859 1.88451 0.394568 -0.53452 -0.331479 0.777438 + 1.73118 1.87639 0.295635 -0.789293 -0.469433 0.39579 + 1.75319 1.84774 0.302855 -0.776952 -0.480615 0.406638 + 1.81491 1.82177 0.372629 -0.527449 -0.4648 0.711168 + 1.82675 1.78531 0.349985 -0.555107 -0.631421 0.541446 + 1.76504 1.81136 0.280262 -0.792617 -0.509043 0.335608 + 1.76011 1.78434 0.230267 -0.864917 -0.42226 0.27132 + 1.58453 1.45584 -1.09935 -0.802301 0.163224 0.57417 + 1.59609 1.36052 -1.07345 -0.839104 0.14781 0.523504 + 1.62538 1.32332 -0.99542 -0.890444 0.265153 0.369868 + 1.57536 1.52092 -1.14547 -0.878333 0.317695 0.357213 + 1.55389 1.48278 -1.17341 -0.895957 0.331959 0.295066 + 1.55777 1.43811 -1.13185 -0.825413 0.220356 0.519746 + 1.58134 1.56168 -1.19528 -0.921888 0.3531 0.159505 + 1.55987 1.52346 -1.22328 -0.918088 0.380083 0.11248 + 1.53859 1.4778 -1.26239 -0.907779 0.412614 0.0754066 + 1.5267 1.44186 -1.20255 -0.901004 0.362714 0.237974 + 1.53059 1.39729 -1.16094 -0.86159 0.171245 0.477847 + 1.59512 1.59787 -1.17855 -0.924556 0.325277 0.198473 + 1.58809 1.59093 -1.23894 -0.9231 0.384251 -0.0154084 + 1.5764 1.56368 -1.25754 -0.903209 0.4291 -0.00931362 + 1.55512 1.51801 -1.29664 -0.89359 0.437548 -0.100239 + 1.5168 1.43611 -1.29238 -0.914226 0.403938 -0.0320071 + 1.50491 1.40026 -1.23249 -0.910542 0.356512 0.209312 + 1.51426 1.3487 -1.17618 -0.839164 0.154629 0.521435 + 1.56933 1.34288 -1.10591 -0.785845 0.0716688 0.614257 + 1.58824 1.56145 -1.33468 -0.864739 0.441311 -0.239729 + 1.54182 1.47566 -1.33128 -0.863572 0.438451 -0.249004 + 1.49947 1.38977 -1.32112 -0.887005 0.458013 -0.0587064 + 1.482 1.36422 -1.25526 -0.895911 0.40474 0.183106 + 1.49135 1.31266 -1.19896 -0.831164 0.159119 0.532773 + 1.5376 1.42074 -1.39016 -0.804266 0.480961 -0.349045 + 1.52449 1.42932 -1.36002 -0.806215 0.502831 -0.311736 + 1.47664 1.34482 -1.35347 -0.873371 0.474939 -0.107961 + 1.45918 1.31928 -1.28762 -0.910555 0.393848 0.125594 + 1.45892 1.26563 -1.2397 -0.86702 0.148839 0.475524 + 1.55899 1.44397 -1.42699 -0.867956 0.423709 -0.259082 + 1.53418 1.34028 -1.51799 -0.775167 0.564166 -0.284311 + 1.50517 1.32765 -1.47451 -0.693466 0.6526 -0.305315 + 1.51048 1.35755 -1.41971 -0.742662 0.584706 -0.326452 + 1.49738 1.36613 -1.38956 -0.781909 0.537167 -0.316338 + 1.59651 1.47515 -1.4948 -0.838945 0.433246 -0.329347 + 1.5717 1.37146 -1.5858 -0.780036 0.504412 -0.370287 + 1.56679 1.29244 -1.68873 -0.615639 0.681116 -0.39632 + 1.50726 1.26305 -1.64863 -0.619662 0.728836 -0.291233 + 1.47825 1.25041 -1.60514 -0.622239 0.734984 -0.269477 + 1.62162 1.48795 -1.53037 -0.6741 0.515948 -0.52857 + 1.61249 1.3985 -1.60824 -0.597468 0.605622 -0.525599 + 1.60758 1.31948 -1.71117 -0.331996 0.708153 -0.623136 + 1.60007 1.21433 -1.83044 0.171037 0.802544 -0.571549 + 1.54917 1.22917 -1.80395 -0.316075 0.83959 -0.441797 + 1.65498 1.50123 -1.54717 0.118303 0.602727 -0.789129 + 1.64584 1.41169 -1.62508 0.180601 0.667739 -0.722155 + 1.63913 1.34099 -1.68663 0.485408 0.577644 -0.656283 + 1.64138 1.28281 -1.74627 0.499445 0.59676 -0.628038 + 1.60984 1.26131 -1.77081 0.354721 0.662943 -0.659302 + 1.71876 1.40596 -1.53395 0.759519 0.328406 -0.561499 + 1.71504 1.32517 -1.58463 0.800481 0.321174 -0.506041 + 1.70833 1.25447 -1.64618 0.834385 0.320584 -0.44836 + 1.69567 1.18769 -1.7125 0.856598 0.299539 -0.420138 + 1.6395 1.21314 -1.80858 0.639438 0.540823 -0.546471 + 1.82453 1.14454 -1.50056 0.854569 0.227015 -0.467093 + 1.80562 1.07001 -1.56648 0.868029 0.226457 -0.441863 + 1.79295 1.00322 -1.6328 0.882549 0.22458 -0.413123 + 1.7691 0.950287 -1.71131 0.899067 0.22975 -0.372685 + 1.69378 1.11793 -1.77487 0.876339 0.305138 -0.372721 + 1.90324 1.05011 -1.38061 0.940898 0.159919 -0.298558 + 1.88766 0.978483 -1.44294 0.908477 0.130693 -0.396974 + 1.86874 0.903956 -1.50886 0.919014 0.113824 -0.377436 + 1.84544 0.846043 -1.58295 0.923027 0.116013 -0.366827 + 1.91563 0.823272 -1.40751 0.925274 0.0637843 -0.373899 + 1.88919 0.755559 -1.47603 0.93202 0.0461949 -0.35945 + 1.86589 0.69756 -1.55017 0.946661 0.0574913 -0.317061 + 1.84155 0.660377 -1.63517 0.95274 0.0719376 -0.295147 + 1.82158 0.793109 -1.66147 0.933142 0.131926 -0.334428 + 1.95983 0.77573 -1.29557 0.943286 0.050874 -0.32806 + 1.9371 0.70295 -1.36411 0.933537 0.016757 -0.35809 + 1.91065 0.635231 -1.43262 0.940694 0.0153696 -0.338908 + 1.8863 0.579432 -1.50997 0.952915 0.0469511 -0.299582 + 1.95748 0.621574 -1.31076 0.951806 -0.0396771 -0.304122 + 1.92874 0.541985 -1.37811 0.953258 -0.0440531 -0.298928 + 1.90438 0.486181 -1.45545 0.964023 0.0614641 -0.258617 + 1.88613 0.445995 -1.54445 0.960478 0.103117 -0.258551 + 1.86197 0.542251 -1.59497 0.95571 0.0853998 -0.281646 + 1.99221 0.628315 -1.14384 0.987686 -0.0739775 -0.137858 + 1.97947 0.54448 -1.21083 0.978644 -0.0415123 -0.201329 + 1.95073 0.464891 -1.27818 0.963453 0.014457 -0.267487 + 1.94019 0.396175 -1.36396 0.957087 0.164188 -0.238802 + 2.00034 0.561665 -0.990198 0.993099 -0.108892 -0.0435471 + 1.9876 0.477829 -1.05719 0.998822 -9.28516e-005 -0.0485147 + 1.99081 0.394963 -1.14666 0.993859 0.013095 -0.109873 + 1.98028 0.326333 -1.23239 0.980332 0.132749 -0.146041 + 2.01226 0.657475 -0.819343 0.987232 -0.15183 0.0481693 + 2.00153 0.557266 -0.866979 0.993478 -0.108648 0.0346047 + 1.99419 0.452858 -0.919338 0.998614 -0.0452626 0.0268432 + 1.99741 0.369992 -1.00881 0.999767 -0.00279491 0.0214261 + 2.01535 0.722029 -0.742154 0.972088 -0.178786 0.151921 + 1.99507 0.593357 -0.747888 0.976081 -0.155522 0.151918 + 1.98773 0.488861 -0.800298 0.986084 -0.113757 0.121233 + 1.98427 0.380212 -0.861711 0.986503 -0.106008 0.124799 + 2.02245 0.874262 -0.614633 0.929315 -0.276767 0.244488 + 2.00529 0.764217 -0.656829 0.944617 -0.210281 0.251951 + 1.98501 0.635545 -0.662561 0.948275 -0.171097 0.267396 + 1.97703 0.517647 -0.708554 0.954295 -0.165996 0.24853 + 1.9935 0.882653 -0.514565 0.862711 -0.332253 0.381233 + 1.97634 0.772609 -0.556762 0.851082 -0.287047 0.439617 + 1.96969 0.657329 -0.607493 0.855888 -0.236219 0.460061 + 1.96171 0.539344 -0.653536 0.791871 -0.31462 0.523406 + 1.97703 0.986076 -0.393898 0.663247 -0.524674 0.533686 + 1.95598 0.878317 -0.455052 0.538996 -0.472276 0.697452 + 1.94212 0.77194 -0.513802 0.503137 -0.428994 0.750212 + 1.93547 0.65666 -0.564533 0.487376 -0.39072 0.780899 + 1.93571 0.964666 -0.374015 0.129455 -0.613249 0.779209 + 1.90827 0.87039 -0.446126 -0.0730224 -0.535608 0.841304 + 1.89441 0.764101 -0.504826 -0.209419 -0.432517 0.876968 + 1.89444 0.652219 -0.557439 -0.221493 -0.452192 0.863981 + 1.95968 1.0614 -0.30456 0.291985 -0.632291 0.717601 + 1.88088 0.964924 -0.39846 -0.495392 -0.451569 0.742073 + 1.85344 0.870648 -0.470571 -0.542136 -0.458412 0.704235 + 1.83094 0.790462 -0.543286 -0.660761 -0.340721 0.668807 + 1.94409 1.13304 -0.248657 -0.191081 -0.597667 0.778641 + 1.91535 1.03977 -0.321901 -0.27071 -0.614998 0.740604 + 1.822 0.968071 -0.452114 -0.813169 -0.191859 0.549496 + 1.78124 0.914346 -0.53626 -0.861443 -0.148911 0.485531 + 1.75873 0.834162 -0.608975 -0.86638 -0.201307 0.457013 + 1.85647 1.04292 -0.375554 -0.799086 -0.19388 0.569098 + 1.81829 1.08548 -0.45427 -0.929991 0.0950057 0.355091 + 1.78834 1.03441 -0.536214 -0.943985 0.106347 0.312381 + 1.74758 0.980684 -0.62036 -0.948823 0.151941 0.276855 + 1.77403 1.13592 -0.650637 -0.973769 0.0566799 0.220368 + 1.76018 1.08757 -0.733287 -0.975327 0.108805 0.192092 + 1.73504 1.03363 -0.812257 -0.964946 0.12261 0.232047 + 1.72244 0.926738 -0.699321 -0.969064 0.0966896 0.227081 + 1.75903 1.23639 -0.718449 -0.933234 -0.0317795 0.357862 + 1.74518 1.18803 -0.801099 -0.879111 -0.198859 0.433151 + 1.71522 1.12579 -0.863086 -0.791667 -0.201756 0.576678 + 1.71302 0.976869 -0.880152 -0.966437 0.102223 0.235689 + 1.74325 1.34093 -0.758132 -0.880187 0.0909851 0.465824 + 1.69942 1.27075 -0.806761 -0.836947 -0.0703456 0.542745 + 1.66946 1.2085 -0.86874 -0.732137 -0.145528 0.66543 + 1.63217 1.13485 -0.91298 -0.624685 -0.244123 0.741737 + 1.69319 1.06903 -0.930981 -0.682886 -0.308829 0.662036 + 1.70676 1.38777 -0.829262 -0.8727 0.240032 0.425181 + 1.66294 1.31767 -0.877841 -0.88034 0.206199 0.427181 + 1.62401 1.25131 -0.923105 -0.857357 0.165391 0.487427 + 1.58673 1.17767 -0.967345 -0.864335 0.0943314 0.493991 + 1.60233 1.06256 -0.96058 -0.593298 -0.332617 0.733051 + 1.58645 1.25696 -1.04068 -0.881474 0.28495 0.376574 + 1.54824 1.19931 -1.08523 -0.894809 0.200963 0.398661 + 1.51747 1.13409 -1.13427 -0.898731 0.153436 0.410781 + 1.55596 1.11245 -1.01639 -0.888552 -0.0141568 0.458557 + 1.55301 1.29429 -1.12115 -0.82964 0.142834 0.539718 + 1.51479 1.23664 -1.16569 -0.83315 0.124071 0.53895 + 1.48237 1.18961 -1.20643 -0.843278 0.0572872 0.534416 + 1.48367 1.07867 -1.18368 -0.878202 0.0399063 0.476623 + 1.44856 1.13419 -1.25584 -0.812248 0.0665417 0.579505 + 1.46009 1.01299 -1.23031 -0.835144 0.044783 0.548205 + 1.54043 1.03896 -1.07509 -0.863095 -0.131112 0.487726 + 1.58681 0.989069 -1.01928 -0.710331 -0.192575 0.677012 + 1.42778 1.21479 -1.28065 -0.85326 0.157485 0.497137 + 1.46073 1.30484 -1.39622 -0.813722 0.57069 -0.110313 + 1.44974 1.26479 -1.51845 -0.594693 0.768678 -0.23553 + 1.48146 1.32614 -1.4323 -0.725099 0.641886 -0.249429 + 1.47615 1.29624 -1.48712 -0.566957 0.752009 -0.336217 + 1.45184 1.21897 -1.63648 -0.559207 0.780175 -0.280383 + 1.48964 1.19978 -1.76384 -0.47794 0.83265 -0.279763 + 1.43979 1.18462 -1.73799 -0.447951 0.873471 -0.190759 + 1.41602 1.19716 -1.6283 -0.620747 0.728048 -0.290895 + 1.38771 1.1672 -1.63161 -0.743786 0.559587 -0.365574 + 1.38119 1.19504 -1.56743 -0.775228 0.596055 -0.209141 + 1.5387 1.17114 -1.89964 -0.106165 0.916496 -0.385699 + 1.41362 1.14503 -1.86862 -0.319305 0.934196 -0.15913 + 1.37663 1.14592 -1.80136 -0.41811 0.903719 -0.09207 + 1.40397 1.16281 -1.72981 -0.539043 0.838513 -0.0795562 + 1.58961 1.1563 -1.92613 0.371172 0.790447 -0.487262 + 1.62973 1.16616 -1.86822 0.701789 0.539025 -0.465773 + 1.62799 1.10638 -1.93907 0.76729 0.497841 -0.404252 + 1.63031 1.05287 -2.00698 0.798148 0.485847 -0.356248 + 1.6801 1.06513 -1.84902 0.884092 0.315177 -0.345029 + 1.67836 1.00543 -1.91982 0.907555 0.3063 -0.287269 + 1.75542 0.897488 -1.78546 0.909556 0.230262 -0.34596 + 1.7298 0.86485 -1.87113 0.922923 0.230535 -0.308328 + 1.71425 0.833595 -1.95099 0.936017 0.2267 -0.269218 + 1.74214 0.723213 -1.93861 0.938724 0.19566 -0.28375 + 1.79718 0.760102 -1.7523 0.938004 0.156933 -0.309064 + 1.77156 0.727377 -1.83802 0.925709 0.203147 -0.319051 + 1.76037 0.623595 -1.94926 0.937715 0.153794 -0.311508 + 1.72877 0.620289 -2.03794 0.944454 0.133595 -0.300264 + 1.81715 0.627372 -1.726 0.963781 0.101073 -0.2468 + 1.78979 0.627846 -1.84862 0.953463 0.141691 -0.266142 + 1.81014 0.522261 -1.81735 0.965712 0.0847973 -0.245377 + 1.78193 0.519971 -1.91998 0.952571 0.0837122 -0.292575 + 1.75033 0.516578 -2.0087 0.942768 0.0952932 -0.319544 + 1.83749 0.521787 -1.69473 0.964391 0.103509 -0.243383 + 1.83638 0.413125 -1.73832 0.959552 0.108642 -0.259726 + 1.80817 0.410835 -1.84095 0.961632 0.0819259 -0.261825 + 1.77306 0.429219 -1.96599 0.951472 0.069319 -0.299828 + 1.7397 0.435529 -2.06672 0.9414 0.0153384 -0.336944 + 1.86166 0.425444 -1.64426 0.956767 0.120679 -0.264637 + 1.90282 0.328456 -1.54907 0.946218 0.190039 -0.261833 + 1.87754 0.316044 -1.64317 0.945123 0.163967 -0.282591 + 1.8437 0.321936 -1.74858 0.952746 0.0741091 -0.29459 + 1.80858 0.340319 -1.87362 0.946973 -0.0228189 -0.320502 + 1.92194 0.355984 -1.45294 0.948587 0.183001 -0.258252 + 1.96 0.235763 -1.42632 0.963929 0.0755163 -0.255224 + 1.93246 0.229713 -1.52304 0.954348 0.00484252 -0.298657 + 1.89862 0.235606 -1.62845 0.920979 -0.0812703 -0.381042 + 1.85498 0.253233 -1.72317 0.916886 -0.102173 -0.385852 + 1.97913 0.263295 -1.33021 0.980224 0.0763599 -0.182566 + 1.9978 0.223203 -1.19056 0.999099 0.00454468 -0.042206 + 1.99354 0.170387 -1.28388 0.987074 -0.0353957 -0.156306 + 1.966 0.164338 -1.38061 0.966422 -0.0921063 -0.239884 + 1.94276 0.159406 -1.48706 0.938742 -0.107998 -0.32726 + 1.99895 0.286242 -1.09275 0.999457 0.0299574 -0.0137188 + 1.99281 0.211628 -1.03391 0.978934 -0.174571 0.10589 + 1.98855 0.158812 -1.12723 0.994071 -0.0975026 0.0481312 + 1.99174 0.109062 -1.23506 0.875254 -0.479624 -0.0623798 + 1.9685 0.104039 -1.34156 0.932262 -0.290786 -0.215244 + 1.98581 0.296467 -0.94566 0.991516 -0.0642481 0.112993 + 1.97373 0.305143 -0.850089 0.93049 -0.243527 0.273649 + 1.98072 0.220307 -0.938347 0.877151 -0.355734 0.322583 + 1.98151 0.146584 -1.03386 0.863007 -0.413602 0.290091 + 1.9847 0.096749 -1.14174 0.857099 -0.495846 0.139706 + 1.97356 0.409 -0.769973 0.951985 -0.185096 0.243854 + 1.96402 0.330958 -0.8036 0.719105 -0.455412 0.524869 + 1.96047 0.238716 -0.887436 0.544927 -0.623345 0.560799 + 1.96125 0.164999 -0.98295 0.480761 -0.701365 0.526266 + 1.95846 0.09336 -1.08147 0.398876 -0.843646 0.359388 + 1.96385 0.434814 -0.723485 0.783438 -0.36088 0.505956 + 1.9379 0.44258 -0.694537 0.445 -0.519247 0.729628 + 1.93977 0.349149 -0.769906 0.383093 -0.609971 0.693668 + 1.93622 0.256907 -0.853742 0.176949 -0.707156 0.684558 + 1.93193 0.175897 -0.951427 0.113965 -0.791755 0.600113 + 1.93576 0.547198 -0.624538 0.428931 -0.455461 0.780111 + 1.9005 0.439095 -0.683499 -0.228906 -0.580071 0.781741 + 1.90237 0.345576 -0.758919 -0.242611 -0.669729 0.701857 + 1.9044 0.264829 -0.84866 -0.385373 -0.672833 0.631493 + 1.90011 0.183817 -0.946346 -0.403227 -0.72259 0.561491 + 1.89473 0.542755 -0.617445 -0.270596 -0.498903 0.823331 + 1.82821 0.591857 -0.65849 -0.743771 -0.37207 0.55531 + 1.83398 0.488284 -0.724495 -0.756749 -0.40291 0.514775 + 1.83552 0.40161 -0.795575 -0.767168 -0.449772 0.457338 + 1.83097 0.678666 -0.59585 -0.696655 -0.366538 0.616703 + 1.73189 0.688842 -0.755276 -0.88312 -0.268487 0.384726 + 1.73691 0.605799 -0.81344 -0.881337 -0.306718 0.359401 + 1.73845 0.519127 -0.884519 -0.848222 -0.325539 0.417785 + 1.83755 0.320778 -0.885367 -0.750635 -0.477231 0.456943 + 1.73465 0.775569 -0.692687 -0.905329 -0.20541 0.371734 + 1.69835 0.868144 -0.783033 -0.971914 0.0823167 0.22047 + 1.67673 0.798432 -0.840487 -0.95697 -0.0222398 0.289333 + 1.68175 0.715383 -0.898643 -0.920956 -0.192014 0.339072 + 1.69139 0.907156 -0.937606 -0.86201 0.1953 0.467757 + 1.64391 0.823498 -0.957905 -0.897776 0.0385864 0.438759 + 1.62864 0.74213 -1.01337 -0.908609 -0.141116 0.393086 + 1.66647 0.634013 -0.954109 -0.887547 -0.197212 0.416374 + 1.73373 0.435792 -0.954179 -0.823002 -0.366495 0.433992 + 1.66335 0.996747 -0.978581 -0.595002 -0.162131 0.787202 + 1.61587 0.913088 -0.998879 -0.716985 -0.0043455 0.697075 + 1.59302 0.838534 -1.04755 -0.841369 -0.174901 0.511379 + 1.61581 0.67097 -1.08032 -0.919365 -0.196055 0.341073 + 1.66176 0.550679 -1.02377 -0.893757 -0.258638 0.366475 + 1.56395 0.914514 -1.06795 -0.817058 -0.159239 0.55413 + 1.54895 0.846936 -1.1179 -0.832362 -0.242245 0.498488 + 1.58019 0.76737 -1.11449 -0.856175 -0.252863 0.450583 + 1.60549 0.600545 -1.15254 -0.907584 -0.23119 0.350488 + 1.51686 0.973193 -1.12178 -0.846371 -0.0954106 0.523978 + 1.50185 0.905609 -1.17173 -0.794253 -0.206077 0.571572 + 1.53037 0.782376 -1.18348 -0.767121 -0.279822 0.577257 + 1.56162 0.702814 -1.18007 -0.816341 -0.303426 0.491447 + 1.47412 0.841002 -1.21862 -0.731233 -0.211109 0.648638 + 1.49902 0.723297 -1.24875 -0.717535 -0.378423 0.584756 + 1.44277 0.781924 -1.2839 -0.700884 -0.320116 0.637407 + 1.46561 0.683379 -1.31781 -0.657722 -0.428735 0.619344 + 1.55015 0.641811 -1.25441 -0.787389 -0.377322 0.48749 + 1.59402 0.539542 -1.22688 -0.908403 -0.238131 0.343653 + 1.65143 0.480345 -1.09594 -0.885784 -0.269028 0.378167 + 1.39914 0.743891 -1.34262 -0.661716 -0.339201 0.668636 + 1.41728 0.657188 -1.38505 -0.633818 -0.499654 0.590441 + 1.51673 0.601888 -1.32347 -0.718708 -0.40455 0.565507 + 1.57501 0.491937 -1.30862 -0.85682 -0.216954 0.46775 + 1.63884 0.413147 -1.17516 -0.883952 -0.289295 0.367339 + 1.35082 0.717703 -1.40986 -0.659248 -0.463665 0.591952 + 1.36445 0.647105 -1.45278 -0.645063 -0.510812 0.568299 + 1.47172 0.58636 -1.39737 -0.693542 -0.477079 0.53981 + 1.52999 0.476495 -1.38248 -0.822814 -0.331198 0.461827 + 1.61983 0.365541 -1.2569 -0.869424 -0.356363 0.34221 + 1.21154 0.769462 -1.53291 -0.730088 -0.589616 0.345433 + 1.29789 0.714715 -1.48249 -0.688886 -0.481824 0.541555 + 1.41889 0.576279 -1.46511 -0.645059 -0.497596 0.579911 + 1.49544 0.45761 -1.46457 -0.751038 -0.351266 0.559065 + 1.16249 0.822434 -1.57186 -0.836205 -0.343661 0.427386 + 1.17212 0.792308 -1.63148 -0.828446 -0.447297 0.337049 + 1.12307 0.845368 -1.67038 -0.836426 -0.447318 0.316699 + 1.09485 0.870919 -1.70684 -0.80139 -0.493808 0.337534 + 1.43477 0.463087 -1.52806 -0.727208 -0.445268 0.522402 + 1.57685 0.307882 -1.43463 -0.788277 -0.459401 0.409352 + 1.6114 0.326762 -1.35253 -0.831172 -0.443992 0.334699 + 1.69386 0.205535 -1.30996 -0.792732 -0.537131 0.288213 + 1.70229 0.244309 -1.21432 -0.797824 -0.506063 0.327684 + 1.55043 0.284485 -1.52791 -0.764261 -0.500115 0.407174 + 1.64693 0.15814 -1.50387 -0.716971 -0.606196 0.344208 + 1.67335 0.181537 -1.41059 -0.762058 -0.56271 0.32035 + 1.79129 0.099711 -1.27507 -0.711496 -0.635652 0.299535 + 1.74022 0.073938 -1.48243 -0.65837 -0.709218 0.252109 + 1.77078 0.075799 -1.37565 -0.693189 -0.677378 0.246269 + 1.86011 0.040048 -1.25573 -0.455616 -0.847977 0.27083 + 1.80779 0.132344 -1.16719 -0.712253 -0.610894 0.345694 + 1.70267 0.06714 -1.57905 -0.601434 -0.748713 0.278758 + 1.76223 0.029679 -1.57477 -0.345 -0.931193 0.117703 + 1.80415 0.023321 -1.47176 -0.389471 -0.915324 0.102441 + 1.83471 0.025187 -1.36499 -0.440512 -0.879021 0.182404 + 1.79512 0.025571 -1.58045 0.106565 -0.985244 -0.133933 + 1.83704 0.019212 -1.47744 0.12631 -0.988382 -0.0845405 + 1.86908 0.015865 -1.36964 0.126595 -0.990912 0.0454667 + 1.89448 0.030728 -1.26038 0.0266796 -0.98352 0.178819 + 1.77127 0.05782 -1.70511 0.358809 -0.895134 -0.264559 + 1.8215 0.041109 -1.60877 0.441333 -0.846886 -0.296662 + 1.8638 0.034655 -1.50779 0.509336 -0.82995 -0.227507 + 1.89584 0.03122 -1.40004 0.543211 -0.827716 -0.140745 + 1.72048 0.064447 -1.80299 0.355504 -0.906246 -0.22877 + 1.78786 0.081215 -1.75983 0.604423 -0.718133 -0.344902 + 1.83784 0.07849 -1.66291 0.696546 -0.612632 -0.373504 + 1.88013 0.072038 -1.56194 0.766398 -0.552423 -0.327815 + 1.91872 0.068677 -1.45832 0.838603 -0.4831 -0.251711 + 1.73707 0.087843 -1.85771 0.551596 -0.767886 -0.325718 + 1.72202 0.125014 -1.9457 0.802322 -0.412461 -0.431457 + 1.76963 0.12724 -1.84895 0.854101 -0.297045 -0.426937 + 1.81961 0.124515 -1.75203 0.856929 -0.288681 -0.427008 + 1.86571 0.123374 -1.65405 0.882445 -0.269715 -0.385415 + 1.66667 0.12824 -2.04308 0.835569 -0.388266 -0.388681 + 1.6716 0.181256 -2.06591 0.873684 -0.292629 -0.388645 + 1.71921 0.18357 -1.96911 0.881119 -0.203479 -0.42688 + 1.76707 0.188831 -1.87443 0.880938 -0.198953 -0.429379 + 1.81318 0.18769 -1.77645 0.882777 -0.183771 -0.432358 + 1.73059 0.259704 -1.99498 0.863772 -0.295049 -0.408466 + 1.76911 0.263281 -1.91358 0.870296 -0.266004 -0.414521 + 1.86033 0.185653 -1.68272 0.908296 -0.134305 -0.396183 + 1.90429 0.120099 -1.55038 0.905735 -0.239975 -0.349366 + 1.94675 0.0711 -1.35412 0.780844 -0.586923 -0.214018 + 1.73522 0.35624 -2.06279 0.90498 -0.19652 -0.377347 + 1.76987 0.348244 -1.97034 0.911582 -0.16943 -0.374581 + 1.81627 0.261243 -1.81985 0.883376 -0.231303 -0.407609 + 1.89912 0.177033 -1.58179 0.882229 -0.23454 -0.408245 + 1.94308 0.111478 -1.44945 0.843749 -0.440494 -0.306679 + 1.97217 0.063662 -1.24623 0.807091 -0.590304 -0.012087 + 1.92387 0.033643 -1.29584 0.411073 -0.910514 -0.0445405 + 1.91655 0.057357 -1.15051 0.0733815 -0.934442 0.348472 + 1.94593 0.060274 -1.18596 0.422043 -0.884609 0.198362 + 1.92914 0.104259 -1.04994 -0.00254531 -0.856029 0.516921 + 1.87661 0.072687 -1.14786 -0.494284 -0.785778 0.3718 + 1.8892 0.11967 -1.04724 -0.482991 -0.733323 0.478495 + 1.8204 0.18254 -1.07113 -0.722261 -0.552088 0.416578 + 1.71489 0.294507 -1.11826 -0.79533 -0.443032 0.413731 + 1.83131 0.24669 -0.970242 -0.734923 -0.511781 0.444935 + 1.72749 0.361699 -1.03904 -0.810573 -0.397433 0.430138 + 1.38447 1.12618 -1.96176 -0.114715 0.985001 -0.128893 + 1.38749 1.12929 -1.92676 -0.278228 0.957846 -0.0715501 + 1.35051 1.13018 -1.8595 -0.258671 0.963354 -0.070976 + 1.35498 1.13465 -1.76183 -0.680226 0.730672 0.0583947 + 1.33 1.12081 -1.96346 -0.159644 0.984173 -0.0769253 + 1.33303 1.12393 -1.92846 -0.213748 0.975039 -0.0600933 + 1.32053 1.12089 -1.905 -0.453605 0.888262 0.0723449 + 1.33802 1.12715 -1.83604 -0.750727 0.65288 0.100786 + 1.28648 1.11256 -1.96577 -0.249703 0.968222 0.0139225 + 1.30604 1.11478 -1.92621 -0.346332 0.93557 0.0690164 + 1.26087 1.10138 -1.96022 -0.254065 0.942033 0.219144 + 1.28043 1.1036 -1.92066 -0.277523 0.956721 0.0875538 + 1.32299 1.11005 -1.85383 -0.422881 0.901229 0.0946451 + 1.33748 1.11624 -1.83255 -0.784888 0.605502 0.131596 + 1.3456 1.12534 -1.78452 -0.939363 0.316012 0.133168 + 1.18596 1.09 -1.9349 -0.0767119 0.994353 0.0733291 + 1.22858 1.09393 -1.9143 -0.137347 0.989618 0.0423287 + 1.25696 1.09743 -1.88518 -0.170066 0.985021 0.0284881 + 1.29951 1.1038 -1.8184 -0.213624 0.97669 0.0209931 + 1.34507 1.11445 -1.78104 -0.769977 0.632049 0.0874601 + 1.18366 1.08628 -1.81346 -0.0815065 0.996623 -0.00999 + 1.21204 1.08971 -1.78439 -0.116009 0.993231 -0.00582218 + 1.22826 1.0919 -1.7346 -0.115033 0.993305 -0.0106372 + 1.31574 1.10599 -1.7686 -0.215214 0.97637 0.019584 + 1.35105 1.11454 -1.69881 -0.579294 0.815113 -0.00308249 + 1.22871 1.09286 -1.69385 -0.305127 0.94344 0.129688 + 1.32172 1.1061 -1.68638 -0.24173 0.970171 -0.0182939 + 1.36043 1.12385 -1.67613 -0.643485 0.764167 0.0444444 + 1.38231 1.15154 -1.69029 -0.711543 0.702625 -0.00493221 + 1.20826 1.07264 -1.66304 -0.415146 0.859061 0.299444 + 1.31783 1.10964 -1.60512 -0.369736 0.927105 0.0614085 + 1.32217 1.10705 -1.64564 -0.22033 0.973962 -0.053412 + 1.36011 1.12005 -1.63475 -0.590569 0.805355 -0.0513001 + 1.24022 1.02623 -1.52285 -0.478502 0.862266 0.165929 + 1.29738 1.08942 -1.5743 -0.56295 0.792059 0.236071 + 1.33367 1.11267 -1.54156 -0.77242 0.604664 -0.194292 + 1.35577 1.12264 -1.59423 -0.659742 0.738045 -0.14153 + 1.38199 1.14774 -1.6489 -0.816197 0.573819 -0.0674902 + 1.18976 1.00904 -1.53268 -0.0624446 0.995592 0.0699848 + 1.27652 1.04939 -1.49016 -0.700979 0.70817 -0.0844012 + 1.1173 1.02629 -1.55774 0.294382 0.932429 -0.209558 + 1.36149 1.14219 -1.57689 -0.863237 0.418501 -0.282274 + -1.70337 1.98922 -1.07579 0.891611 0.0298264 0.451819 + -1.6801 1.96255 -1.12801 0.952713 0.0524449 0.299312 + -1.68994 2.0633 -1.1131 0.938931 0.0320593 0.34261 + -1.72145 2.09212 -1.04902 0.901242 0.00129184 0.433315 + -1.72998 1.82017 -1.02458 0.804155 0.0712945 0.590129 + -1.67403 1.97548 -1.1624 0.979369 0.0811721 0.185062 + -1.68707 2.10694 -1.1277 0.975783 0.0546045 0.211815 + -1.7066 2.25074 -1.08775 0.96142 0.0621275 0.267977 + -1.70947 2.207 -1.0732 0.933052 0.0165296 0.359362 + -1.66549 1.89627 -1.1742 0.963879 0.0805039 0.253882 + -1.68761 2.15846 -1.15573 0.98872 0.0635271 0.135634 + -1.70018 2.27683 -1.12034 0.973309 0.0739352 0.217262 + -1.73003 2.38788 -1.0561 0.974417 0.106487 0.19792 + -1.73501 2.3795 -1.01098 0.961666 0.0476262 0.270056 + -1.74699 2.26462 -0.986805 0.885762 -0.0339763 0.462894 + -1.74805 1.92307 -0.997825 0.783753 0.0445339 0.619474 + -1.7916 1.75351 -0.929734 0.771075 0.182649 0.609985 + -1.72361 2.41406 -1.08864 0.944074 0.0660568 0.323049 + -1.73941 2.52038 -1.0578 0.950436 0.0423528 0.308022 + -1.74771 2.50862 -1.02162 0.979238 0.0813547 0.185672 + -1.71219 2.43192 -1.11818 0.98004 0.110151 0.165491 + -1.728 2.53833 -1.08728 0.985819 0.104593 0.131228 + -1.74105 2.63265 -1.05765 0.984489 0.129136 0.118763 + -1.75246 2.61995 -1.02745 0.950897 0.0438008 0.306393 + -1.76075 2.60818 -0.991272 0.972825 0.0989987 0.20931 + -1.69968 2.35382 -1.15051 0.993282 0.10702 0.0440168 + -1.70418 2.37334 -1.1703 0.985378 0.154616 -0.0715803 + -1.7167 2.45151 -1.13791 0.853954 0.272302 -0.443412 + -1.7312 2.54263 -1.10692 0.847461 0.271339 -0.456272 + -1.68711 2.23536 -1.18593 0.992992 0.0891708 -0.0775557 + -1.69619 2.27211 -1.20117 0.564763 0.283507 -0.775027 + -1.69337 2.12496 -1.24211 0.64998 0.232885 -0.723388 + -1.7067 2.15597 -1.23462 -0.279038 0.259524 -0.924546 + -1.71276 2.24476 -1.2068 -0.407443 0.252831 -0.877535 + -1.72075 2.34607 -1.17588 -0.389299 0.227154 -0.892663 + -1.70418 2.37334 -1.1703 -0.226178 0.325351 -0.918145 + -1.69304 2.04842 -1.26673 0.635359 0.313566 -0.705688 + -1.70637 2.07934 -1.25929 -0.253434 0.304553 -0.91816 + -1.75185 2.08692 -1.21682 -0.667682 0.212853 -0.713369 + -1.75791 2.17579 -1.18895 -0.668498 0.198866 -0.716632 + -1.76262 2.26646 -1.1568 -0.705615 0.16858 -0.68825 + -1.70174 1.99203 -1.29306 -0.152096 0.337167 -0.929078 + -1.73589 1.91402 -1.28954 -0.633696 0.238057 -0.736042 + -1.74052 2.00132 -1.25576 -0.665436 0.235665 -0.708278 + -1.8141 1.95582 -1.19674 -0.771143 0.175993 -0.611854 + -1.83533 2.04016 -1.14442 -0.805799 0.167127 -0.568117 + -1.69013 1.89667 -1.32589 -0.182584 0.357967 -0.915709 + -1.73367 1.82544 -1.32353 -0.632928 0.274196 -0.724029 + -1.7962 1.78133 -1.27253 -0.774322 0.200739 -0.600107 + -1.80276 1.87013 -1.23573 -0.774089 0.18849 -0.604365 + -1.88335 1.79572 -1.12164 -0.880744 0.124553 -0.456921 + -1.73005 1.73866 -1.36081 -0.654207 0.279361 -0.70283 + -1.79399 1.69277 -1.30653 -0.783721 0.223039 -0.579685 + -1.87107 1.61838 -1.20367 -0.874201 0.181608 -0.450324 + -1.87763 1.70717 -1.16687 -0.875535 0.149056 -0.459588 + -1.73301 1.64749 -1.3925 -0.6948 0.283038 -0.661168 + -1.8073 1.59501 -1.329 -0.790297 0.234706 -0.565988 + -1.88805 1.42946 -1.26487 -0.863437 0.198477 -0.46377 + -1.87474 1.52722 -1.2424 -0.870276 0.218614 -0.441393 + -1.81026 1.50393 -1.36065 -0.785988 0.211472 -0.58095 + -1.88883 1.33387 -1.29629 -0.84692 0.174672 -0.502211 + -1.9662 1.25106 -1.18427 -0.897676 0.174362 -0.404693 + -1.96847 1.33642 -1.13131 -0.9132 0.196119 -0.357215 + -1.96479 1.42748 -1.09262 -0.917288 0.211393 -0.337485 + -1.81855 1.40599 -1.38161 -0.810558 0.216017 -0.544364 + -1.89712 1.23594 -1.31727 -0.861848 0.154234 -0.483145 + -1.96698 1.15547 -1.2157 -0.874299 0.0864331 -0.477629 + -2.02124 1.12376 -1.10058 -0.940833 0.106489 -0.321703 + -1.81903 1.31935 -1.42054 -0.833639 0.232664 -0.500913 + -1.89403 1.14413 -1.35127 -0.899525 0.167263 -0.403581 + -1.95399 1.05227 -1.23915 -0.886003 0.0653478 -0.459051 + -1.99703 0.929877 -1.17096 -0.922634 0.0143854 -0.385408 + -2.01002 1.03308 -1.14751 -0.91261 0.0244684 -0.408099 + -1.82824 1.22532 -1.44989 -0.858232 0.238178 -0.454653 + -1.90324 1.05011 -1.38061 -0.920302 0.164658 -0.35487 + -1.95089 0.960473 -1.27315 -0.928163 0.0991291 -0.35873 + -1.82453 1.14454 -1.50056 -0.860847 0.22471 -0.45656 + -1.88766 0.978483 -1.44294 -0.908312 0.134507 -0.396077 + -1.93121 0.894901 -1.34518 -0.937381 0.0888712 -0.336777 + -1.95983 0.77573 -1.29557 -0.944314 0.050614 -0.32513 + -1.97952 0.841297 -1.22353 -0.9431 0.0422474 -0.329815 + -1.80562 1.07001 -1.56648 -0.869394 0.219808 -0.442537 + -1.86874 0.903956 -1.50886 -0.912923 0.118603 -0.39052 + -1.91563 0.823277 -1.40752 -0.929996 0.0592713 -0.362761 + -1.69567 1.18769 -1.7125 -0.854825 0.305633 -0.419359 + -1.79295 1.00322 -1.6328 -0.886963 0.221574 -0.405219 + -1.84544 0.846043 -1.58295 -0.922975 0.113518 -0.367737 + -1.88919 0.755559 -1.47603 -0.931817 0.0420228 -0.360486 + -1.69378 1.11793 -1.77487 -0.869063 0.308485 -0.386737 + -1.7691 0.950287 -1.71131 -0.900283 0.221805 -0.374558 + -1.82158 0.793109 -1.66147 -0.935243 0.129371 -0.32952 + -1.86589 0.69756 -1.55017 -0.945273 0.0597576 -0.320763 + -1.91065 0.635231 -1.43262 -0.939002 0.0160366 -0.343539 + -1.6801 1.06513 -1.84902 -0.881764 0.323823 -0.342974 + -1.75542 0.897488 -1.78546 -0.914065 0.225605 -0.337028 + -1.79718 0.760102 -1.7523 -0.93734 0.141684 -0.318307 + -1.84155 0.660377 -1.63517 -0.952917 0.0749478 -0.293824 + -1.67836 1.00534 -1.91987 -0.899867 0.312027 -0.304759 + -1.7298 0.86485 -1.87113 -0.924424 0.217459 -0.313292 + -1.77156 0.727377 -1.83802 -0.938751 0.181689 -0.292807 + -1.81715 0.627372 -1.726 -0.960318 0.10939 -0.25656 + -1.86197 0.542246 -1.59496 -0.958595 0.0820601 -0.272693 + -1.6628 0.974096 -1.99975 -0.911455 0.30585 -0.275147 + -1.71425 0.833595 -1.95099 -0.936695 0.225613 -0.267771 + -1.74214 0.723213 -1.93861 -0.939716 0.203829 -0.274566 + -1.78979 0.627846 -1.84862 -0.954913 0.155289 -0.253033 + -1.63031 1.05278 -2.00703 -0.79804 0.48585 -0.356486 + -1.65644 0.92519 -2.07784 -0.917015 0.295446 -0.267945 + -1.68686 0.842111 -2.04174 -0.941348 0.222886 -0.253348 + -1.71475 0.731724 -2.02935 -0.943961 0.179191 -0.277177 + -1.76037 0.623595 -1.94926 -0.9418 0.144527 -0.303522 + -1.62395 1.00388 -2.08513 -0.802861 0.474627 -0.360754 + -1.60888 0.957783 -2.17709 -0.788335 0.493322 -0.367644 + -1.63942 0.904651 -2.16327 -0.898923 0.326404 -0.292229 + -1.66984 0.821567 -2.12716 -0.946163 0.21842 -0.238889 + -1.6034 1.00377 -2.11935 -0.690982 0.596727 -0.407997 + -1.55387 1.00544 -2.20244 -0.617303 0.669101 -0.413813 + -1.59304 0.919411 -2.25863 -0.775756 0.500543 -0.384263 + -1.62358 0.866281 -2.2448 -0.878785 0.366838 -0.305233 + -1.46671 1.04008 -2.25685 -0.389992 0.848392 -0.357962 + -1.52471 0.991998 -2.27056 -0.612036 0.677482 -0.407958 + -1.56387 0.906056 -2.3267 -0.721933 0.548584 -0.421745 + -1.60236 0.841891 -2.33416 -0.83178 0.403929 -0.380766 + -1.65077 0.820142 -2.21909 -0.926539 0.292141 -0.237023 + -1.37522 1.05239 -2.28095 -0.277282 0.920443 -0.2755 + -1.35936 1.03642 -2.36629 -0.38834 0.884189 -0.259619 + -1.43014 0.994897 -2.38438 -0.483021 0.803818 -0.347228 + -1.48814 0.946809 -2.39809 -0.644772 0.656604 -0.391332 + -1.53679 0.879425 -2.40737 -0.736605 0.535769 -0.412752 + -1.30013 1.0588 -2.37107 -0.413034 0.903358 -0.115531 + -1.27743 1.06971 -2.41596 -0.596696 0.798163 -0.0830052 + -1.32284 1.02151 -2.47507 -0.523589 0.830042 -0.192055 + -1.39362 0.979989 -2.49315 -0.564237 0.774675 -0.285509 + -1.45177 0.922027 -2.49836 -0.688375 0.625886 -0.366615 + -1.27948 1.08729 -2.31361 -0.477194 0.853377 -0.209844 + -1.26248 1.08908 -2.34071 -0.50428 0.835202 -0.219407 + -1.24392 1.09539 -2.36524 -0.612632 0.790124 -0.0196539 + -1.28157 1.06511 -2.39559 -0.386614 0.920236 0.0607796 + -1.31626 1.08384 -2.24124 -0.539697 0.832647 -0.1242 + -1.27975 1.09644 -2.26906 -0.373528 0.917056 -0.139588 + -1.25706 1.10469 -2.26695 -0.51825 0.850804 -0.0868846 + -1.2456 1.11119 -2.3016 -0.55435 0.813754 -0.174641 + -1.22861 1.11298 -2.32871 -0.526312 0.826119 -0.201303 + -1.28398 1.0983 -2.21747 -0.327419 0.944631 -0.0216478 + -1.22424 1.13141 -2.28583 -0.415646 0.902694 -0.111275 + -1.20242 1.13319 -2.31351 -0.397821 0.913572 -0.0844049 + -1.21181 1.12119 -2.34793 -0.623263 0.78189 0.0138067 + -1.24071 1.1016 -2.37999 -0.671903 0.734678 0.0937815 + -1.23658 1.10612 -2.40041 -0.662028 0.74935 0.0139587 + -1.18562 1.14149 -2.33268 -0.565484 0.814708 0.128369 + -1.2086 1.12749 -2.36263 -0.658181 0.741127 0.132398 + -1.19759 1.13864 -2.37475 -0.645347 0.760108 0.0759098 + -1.20962 1.1297 -2.39806 -0.654382 0.755825 0.0226384 + -1.22658 1.11436 -2.44609 -0.68521 0.725387 -0.0655798 + -1.17383 1.1383 -2.28255 -0.194727 0.971349 0.136242 + -1.1585 1.1462 -2.29345 -0.472865 0.828992 0.298616 + -1.16163 1.16328 -2.33763 -0.504202 0.826222 0.251274 + -1.15063 1.17453 -2.34971 -0.36474 0.873196 0.323253 + -1.19565 1.13651 -2.25487 -0.109197 0.982267 0.152406 + -1.13323 1.12325 -2.19868 -0.202951 0.936813 0.284941 + -1.08239 1.17791 -2.33317 0.0467369 0.985681 0.162016 + -1.12323 1.18488 -2.35804 -0.121405 0.97306 0.195995 + -1.15926 1.17136 -2.38481 -0.514572 0.856113 0.0478178 + -1.1713 1.16232 -2.40817 -0.65713 0.753116 0.0315561 + -1.19962 1.13795 -2.44375 -0.663176 0.748434 0.00659296 + -0.968399 1.15384 -2.29328 0.202304 0.95554 0.214516 + -1.04735 1.17306 -2.38357 0.140036 0.988195 0.0621329 + -1.08819 1.18004 -2.40845 0.127357 0.990857 -0.044536 + -1.13186 1.18171 -2.39315 -0.167956 0.985579 -0.0206364 + -1.15944 1.1735 -2.41832 -0.511552 0.856371 0.0703066 + -0.936631 1.15101 -2.30577 0.419649 0.881265 0.217411 + -0.955186 1.16676 -2.38306 0.358932 0.930285 0.0757467 + -1.01558 1.17032 -2.39601 0.0984417 0.990638 0.0945756 + -0.932578 1.14581 -2.36357 0.836361 0.547373 -0.029708 + -0.931757 1.14517 -2.41466 0.816887 0.576744 0.00785208 + -0.959034 1.1691 -2.41991 0.352482 0.933536 -0.0653192 + -1.01943 1.17257 -2.43292 0.1906 0.981061 0.03452 + -1.04987 1.18209 -2.46681 0.143806 0.979138 0.143559 + -0.920012 1.10707 -2.34487 0.991735 0.123413 0.0350695 + -0.919192 1.10644 -2.39597 0.958062 0.285307 0.0267738 + -0.925154 1.13651 -2.44707 0.83272 0.530471 0.158676 + -0.952431 1.16044 -2.45231 0.437461 0.897856 -0.0498172 + -0.98287 1.16997 -2.4862 0.271842 0.94942 0.157177 + -0.929802 1.09338 -2.29976 0.987913 -0.148206 0.0454186 + -0.923815 1.03796 -2.30816 0.980927 0.0807736 0.176798 + -0.914026 1.05165 -2.35327 0.97129 0.111056 0.210386 + -0.909485 1.07044 -2.39242 0.975036 0.202639 0.0907886 + -0.914214 1.0936 -2.44394 0.951115 0.251325 0.179487 + -0.913802 0.9689 -2.31155 0.976617 0.0560245 0.207558 + -0.898638 0.993068 -2.38241 0.972779 0.0847546 0.215679 + -0.894097 1.01186 -2.42156 0.947415 0.250139 0.199586 + -0.904507 1.05752 -2.44045 0.951095 0.272874 0.144766 + -0.915551 0.821097 -2.30175 0.967868 -0.0135223 0.251094 + -0.900387 0.845177 -2.37266 0.968886 0.00923174 0.247334 + -0.882188 1.00437 -2.45918 0.947986 0.167926 0.270412 + -0.892598 1.05003 -2.47807 0.902205 0.273671 0.333364 + -0.900778 1.09393 -2.4795 0.903358 0.217654 0.369556 + -0.914433 0.563609 -2.32156 0.899078 -0.127257 0.418884 + -0.876889 1.05242 -2.5152 0.889144 0.246558 0.385527 + -0.967405 0.395445 -2.30669 0.570663 -0.556743 0.60364 + -1.04052 0.334882 -2.34079 0.619429 -0.682168 0.388528 + -1.11079 0.244901 -2.36655 0.703855 -0.607116 0.368781 + -1.17036 0.148551 -2.40006 0.66486 -0.649604 0.368748 + -1.12487 0.148312 -2.48305 0.663812 -0.645286 0.3781 + -1.1865 0.076404 -2.5217 0.517336 -0.79615 0.313861 + -1.21585 0.15262 -2.31431 0.638596 -0.65645 0.401583 + -1.27615 0.086092 -2.34228 0.554654 -0.766439 0.323928 + -1.23066 0.082109 -2.42798 0.534141 -0.789679 0.301829 + -1.31981 0.091549 -2.24473 0.59906 -0.735708 0.316007 + -1.33237 0.04906 -2.35634 0.443284 -0.863344 0.241114 + -1.29002 0.043919 -2.45923 0.419095 -0.877292 0.23392 + -1.24587 0.0383 -2.5529 0.392885 -0.888393 0.237485 + -1.37603 0.054431 -2.25884 0.463887 -0.856336 0.226932 + -1.4169 0.033245 -2.26275 0.208912 -0.972733 0.100728 + -1.36682 0.030486 -2.36717 0.198967 -0.971232 0.130842 + -1.32447 0.025344 -2.47006 0.277403 -0.945532 0.170342 + -1.27791 0.019255 -2.57732 0.259595 -0.951121 0.167271 + -1.46302 0.031072 -2.16318 0.15235 -0.983932 0.0930932 + -1.42859 0.03363 -2.26721 -0.223407 -0.967988 -0.114405 + -1.37851 0.030783 -2.37168 -0.268104 -0.959969 -0.0811185 + -1.33261 0.023419 -2.47613 -0.196511 -0.980076 -0.0288872 + -1.28605 0.01733 -2.58338 -0.195131 -0.980299 -0.0306362 + -1.51392 0.035698 -2.0638 0.120761 -0.986976 0.106278 + -1.4868 0.035107 -2.16957 -0.297794 -0.946035 -0.127816 + -1.50602 0.052899 -2.20699 -0.437889 -0.86945 -0.228715 + -1.44781 0.051335 -2.30468 -0.456397 -0.858905 -0.232344 + -1.4009 0.050985 -2.40587 -0.516667 -0.83205 -0.201862 + -1.5377 0.03982 -2.07013 -0.282159 -0.955628 -0.0846247 + -1.55839 0.054865 -2.10739 -0.4377 -0.878496 -0.191476 + -1.52924 0.081407 -2.26176 -0.515163 -0.808473 -0.284568 + -1.48243 0.090151 -2.36191 -0.534614 -0.795466 -0.285344 + -1.43552 0.089799 -2.4631 -0.611384 -0.749514 -0.253845 + -1.59725 0.050773 -1.9709 -0.287284 -0.9526 -0.100105 + -1.61793 0.06573 -2.00821 -0.471077 -0.85864 -0.202049 + -1.5816 0.083373 -2.16217 -0.614495 -0.742501 -0.266625 + -1.53613 0.121343 -2.34574 -0.66917 -0.663885 -0.333867 + -1.67245 0.068455 -1.90453 -0.430918 -0.87444 -0.222854 + -1.62721 0.088345 -2.05878 -0.626175 -0.728733 -0.277223 + -1.62369 0.123851 -2.14248 -0.809031 -0.485348 -0.331521 + -1.57809 0.118879 -2.24587 -0.749995 -0.579813 -0.318315 + -1.68172 0.091068 -1.9551 -0.595255 -0.735456 -0.32369 + -1.66666 0.12824 -2.04308 -0.755778 -0.53652 -0.375428 + -1.59088 0.16895 -2.26439 -0.908197 -0.257935 -0.329617 + -1.55774 0.164852 -2.3651 -0.857896 -0.397119 -0.326055 + -1.51578 0.167229 -2.46501 -0.778409 -0.505108 -0.372754 + -1.73708 0.087843 -1.85771 -0.537741 -0.776549 -0.328338 + -1.72202 0.125014 -1.9457 -0.804256 -0.413509 -0.426828 + -1.63385 0.173256 -2.16505 -0.892198 -0.284677 -0.35063 + -1.57455 0.233216 -2.3713 -0.897305 -0.314701 -0.309528 + -1.78785 0.081215 -1.75983 -0.602447 -0.714889 -0.354953 + -1.76961 0.12724 -1.84895 -0.848033 -0.313932 -0.42695 + -1.6716 0.181256 -2.06591 -0.907151 -0.163127 -0.3879 + -1.64677 0.245073 -2.17824 -0.906566 -0.262149 -0.330782 + -1.60902 0.237071 -2.27738 -0.899618 -0.300264 -0.317062 + -1.83783 0.078495 -1.66292 -0.731957 -0.578616 -0.359781 + -1.81959 0.124515 -1.75203 -0.857016 -0.289019 -0.426605 + -1.71919 0.183482 -1.96917 -0.880981 -0.203089 -0.427348 + -1.88014 0.072038 -1.56194 -0.767076 -0.55394 -0.323643 + -1.8657 0.123287 -1.6541 -0.906288 -0.185652 -0.379704 + -1.76705 0.188831 -1.87443 -0.883857 -0.186407 -0.42901 + -1.73059 0.259704 -1.99498 -0.864404 -0.295783 -0.406593 + -1.68272 0.254356 -2.08972 -0.885282 -0.269026 -0.379342 + -1.91872 0.068677 -1.45832 -0.824943 -0.501848 -0.260033 + -1.90428 0.120012 -1.55043 -0.904734 -0.239795 -0.352072 + -1.81316 0.187605 -1.7765 -0.883902 -0.18487 -0.429582 + -1.94676 0.071188 -1.35406 -0.78137 -0.592719 -0.195308 + -1.94308 0.111483 -1.44946 -0.918032 -0.263003 -0.296726 + -1.86032 0.185567 -1.68277 -0.889791 -0.216255 -0.401877 + -1.8163 0.261243 -1.81985 -0.884339 -0.231715 -0.40528 + -1.76915 0.263281 -1.91358 -0.857215 -0.303184 -0.416248 + -1.97218 0.063662 -1.24623 -0.657513 -0.749939 -0.0725779 + -1.9685 0.104044 -1.34157 -0.931463 -0.290266 -0.219367 + -1.89912 0.177033 -1.58179 -0.88379 -0.23562 -0.404226 + -1.98469 0.096754 -1.14175 -0.856678 -0.494602 0.146529 + -1.99175 0.109062 -1.23506 -0.921411 -0.378697 -0.0871208 + -1.94276 0.159406 -1.48706 -0.867182 -0.354308 -0.349945 + -1.89862 0.235611 -1.62845 -0.922587 -0.0831037 -0.376731 + -1.85498 0.253237 -1.72318 -0.875598 -0.250563 -0.412973 + -1.9815 0.146589 -1.03387 -0.756034 -0.578494 0.306198 + -1.98856 0.158812 -1.12723 -0.994374 -0.0986883 0.0384729 + -1.96601 0.164424 -1.38056 -0.968948 -0.093475 -0.228914 + -1.98072 0.220307 -0.938348 -0.877316 -0.356528 0.321254 + -1.99281 0.211628 -1.03391 -0.984552 -0.147455 0.0944188 + -1.99355 0.170473 -1.28383 -0.875953 -0.46704 -0.120749 + -1.96 0.235677 -1.42637 -0.96396 0.0753148 -0.255163 + -1.93247 0.229627 -1.52309 -0.954284 0.00366101 -0.29888 + -1.97373 0.305144 -0.85009 -0.949834 -0.192936 0.246152 + -1.98581 0.296467 -0.94566 -0.99183 -0.0657703 0.109308 + -1.9978 0.223203 -1.19056 -0.999247 0.00558986 -0.0383945 + -1.96385 0.434813 -0.723484 -0.791408 -0.351018 0.500459 + -1.97356 0.409 -0.769972 -0.951961 -0.184389 0.244482 + -1.98427 0.380217 -0.861719 -0.98546 -0.111371 0.128314 + -1.99895 0.286242 -1.09275 -0.999664 -0.024943 0.00706155 + -1.96171 0.539431 -0.653485 -0.792064 -0.315157 0.522792 + -1.97703 0.517646 -0.708553 -0.952197 -0.172335 0.252232 + -1.98773 0.488861 -0.800298 -0.986037 -0.11302 0.122301 + -1.9974 0.369992 -1.00881 -0.999786 -0.00325218 0.0204195 + -1.98028 0.326333 -1.23239 -0.978903 0.132828 -0.155258 + -1.96969 0.65733 -0.607494 -0.848082 -0.247574 0.468469 + -1.98501 0.635545 -0.662562 -0.948366 -0.174676 0.264745 + -1.99507 0.593357 -0.747888 -0.975685 -0.156634 0.153314 + -1.99419 0.452858 -0.919338 -0.999438 -0.0288507 0.0170785 + -1.97634 0.772609 -0.556763 -0.850695 -0.285233 0.441543 + -2.00529 0.764217 -0.656829 -0.94617 -0.206749 0.249032 + -2.01535 0.722029 -0.742154 -0.972116 -0.178315 0.152296 + -2.00153 0.557266 -0.866979 -0.993446 -0.109064 0.034209 + -1.9876 0.477829 -1.05719 -0.99718 -0.0037107 -0.0749563 + -1.95598 0.878317 -0.455052 -0.559245 -0.496608 0.663796 + -1.99349 0.882653 -0.514565 -0.861348 -0.334405 0.38243 + -2.02245 0.874262 -0.614633 -0.929341 -0.277309 0.243772 + -2.03629 0.845109 -0.720735 -0.947825 -0.255022 0.19129 + -2.01226 0.657475 -0.819343 -0.988316 -0.146658 0.0415088 + -1.93571 0.964666 -0.374015 -0.10366 -0.579508 0.808347 + -1.97703 0.986076 -0.393898 -0.676771 -0.503894 0.536723 + -2.01455 0.990413 -0.453411 -0.843885 -0.395258 0.362808 + -2.04627 0.984262 -0.563157 -0.915534 -0.322419 0.240508 + -2.06012 0.955113 -0.669267 -0.965758 -0.232337 0.115463 + -1.95968 1.0614 -0.304562 -0.286001 -0.63837 0.714623 + -2.001 1.0829 -0.324395 -0.703933 -0.524519 0.478913 + -2.0318 1.08707 -0.384218 -0.848563 -0.412 0.331958 + -2.06352 1.08092 -0.493969 -0.928484 -0.306902 0.209113 + -1.91534 1.03977 -0.321901 0.298187 -0.584626 0.754518 + -1.98842 1.15476 -0.231268 -0.359145 -0.62848 0.689947 + -2.0211 1.18058 -0.248185 -0.738508 -0.518872 0.430555 + -2.05189 1.18475 -0.308008 -0.827528 -0.457102 0.325968 + -1.85646 1.04292 -0.375555 0.795385 -0.19138 0.575096 + -1.94408 1.13313 -0.248607 0.194199 -0.601948 0.774562 + -2.01546 1.25513 -0.152315 -0.480432 -0.627259 0.612969 + -2.04814 1.28086 -0.169283 -0.702556 -0.559663 0.439536 + -1.89832 1.10095 -0.296262 0.585955 -0.505802 0.633104 + -1.92234 1.18614 -0.219013 0.693387 -0.377439 0.613804 + -1.96811 1.21832 -0.171359 0.0206645 -0.679714 0.733186 + -2.02483 1.34524 -0.069792 -0.399811 -0.633933 0.662027 + -1.86015 1.14351 -0.374978 0.923293 0.0230016 0.383408 + -1.88441 1.2047 -0.300965 0.937177 -0.0676176 0.34224 + -1.93698 1.27049 -0.155719 0.801202 -0.320647 0.505233 + -1.97748 1.30843 -0.088837 0.159109 -0.653027 0.740433 + -1.82658 1.23187 -0.486835 0.959575 0.0779347 0.270447 + -1.85085 1.29307 -0.412823 0.968752 0.0391377 0.244924 + -1.86885 1.35294 -0.337923 0.9799 0.00934479 0.199271 + -1.89905 1.28905 -0.237671 0.943557 -0.129305 0.304926 + -1.93585 1.35848 -0.080727 0.734889 -0.467839 0.490983 + -1.81146 1.33455 -0.567678 0.959934 0.109406 0.257987 + -1.84072 1.37809 -0.49529 0.959493 0.148617 0.239345 + -1.85872 1.43788 -0.420448 0.968057 0.219129 0.121856 + -1.88469 1.48434 -0.340922 0.960459 0.271951 0.0596735 + -1.87618 1.42189 -0.268346 0.99453 0.0176527 0.102947 + -1.84299 1.48933 -0.552965 0.905606 0.28427 0.314752 + -1.88307 1.51248 -0.474651 0.920278 0.342515 0.189135 + -1.90903 1.55894 -0.395126 0.913094 0.387587 0.126632 + -1.86867 1.56779 -0.586052 0.844163 0.453842 0.285335 + -1.91179 1.60975 -0.524332 0.884484 0.421175 0.200747 + -1.94178 1.60443 -0.321116 0.915049 0.402104 -0.0315978 + -1.89459 1.53524 -0.258873 0.950323 0.30069 -0.0804451 + -1.88608 1.47278 -0.186297 0.999663 -0.025758 -0.00321867 + -1.87313 1.63301 -0.700431 0.824208 0.475242 0.307937 + -1.92189 1.68619 -0.662742 0.874562 0.387361 0.291708 + -1.94454 1.65515 -0.450362 0.891517 0.426598 0.152355 + -1.97724 1.697 -0.383658 0.924263 0.375769 0.0673527 + -1.95085 1.65504 -0.247183 0.89539 0.435085 -0.0947499 + -1.83282 1.6809 -0.841971 0.806269 0.33302 0.488906 + -1.88157 1.734 -0.804341 0.79783 0.347586 0.492596 + -1.95459 1.72805 -0.596037 0.880661 0.420793 0.217645 + -1.8156 1.80599 -0.914837 0.738931 0.133514 0.66042 + -1.85829 1.83954 -0.872349 0.712938 0.172409 0.679702 + -1.92426 1.76755 -0.761844 0.804968 0.445729 0.391602 + -1.98855 1.76204 -0.532305 0.835529 0.513459 0.195577 + -1.77205 1.97564 -0.98287 0.710944 -0.0156977 0.703073 + -1.78843 2.05003 -0.946326 0.823193 -0.0835351 0.561582 + -1.82242 1.95205 -0.922019 0.597077 0.00829871 0.802141 + -1.93524 1.83504 -0.803141 0.833598 0.211904 0.510108 + -1.95822 1.80145 -0.698161 0.913507 0.240093 0.32842 + -1.76337 2.3391 -0.950211 0.922975 -0.0429746 0.382453 + -1.78249 2.30397 -0.901962 0.855773 -0.0775873 0.511501 + -1.81647 2.2059 -0.877697 0.814325 -0.118375 0.56821 + -1.89937 1.94763 -0.852761 0.777452 -0.0752609 0.624423 + -1.93269 1.9349 -0.794719 0.938156 -0.168714 0.302323 + -1.75957 2.46879 -0.943036 0.945399 0.0245559 0.324987 + -1.77868 2.43366 -0.894787 0.862175 -0.0345068 0.505434 + -1.83865 2.42426 -0.82771 0.70206 -0.0359695 0.711209 + -1.84979 2.19327 -0.819613 0.869369 -0.115066 0.480581 + -1.95567 1.90131 -0.689739 0.912627 -0.0905058 0.398649 + -1.75268 2.50016 -0.976565 0.9771 0.0824444 0.196159 + -1.77315 2.56887 -0.917576 0.924301 0.071436 0.374919 + -1.78795 2.61693 -0.89583 0.881218 0.0900881 0.464047 + -1.79348 2.48173 -0.873041 0.788265 0.0169569 0.615102 + -1.76627 2.60023 -0.951096 0.966019 0.119021 0.229435 + -1.78613 2.67697 -0.915407 0.927593 0.161559 0.336852 + -1.81909 2.66232 -0.855642 0.752669 0.107855 0.649505 + -1.86426 2.60485 -0.810302 0.721259 0.0397575 0.691524 + -1.78062 2.68492 -0.955583 0.956455 0.129544 0.261555 + -1.80134 2.74089 -0.909921 0.885734 0.219629 0.408947 + -1.81727 2.72244 -0.875169 0.830836 0.180625 0.52639 + -1.84106 2.75625 -0.851922 0.677954 0.368343 0.636162 + -1.76931 2.69654 -0.989714 0.936114 0.0566238 0.347108 + -1.79004 2.7526 -0.944002 0.908019 0.158139 0.387935 + -1.82513 2.77478 -0.886624 0.729699 0.436906 0.525979 + -1.7579 2.70925 -1.01992 0.963718 0.258817 0.0652807 + -1.77862 2.76509 -0.974238 0.90547 0.407531 0.118499 + -1.8052 2.79816 -0.938525 0.646307 0.729636 0.223426 + -1.81661 2.78567 -0.908291 0.743381 0.454403 0.490819 + -1.86775 2.79455 -0.86387 0.537195 0.581952 0.610535 + -1.74425 2.63695 -1.0773 0.626532 0.427098 -0.651955 + -1.76305 2.71127 -1.03682 0.463925 0.596348 -0.655089 + -1.78378 2.76702 -0.991191 0.395354 0.742639 -0.540539 + -1.80795 2.79902 -0.949217 0.187592 0.917222 -0.351445 + -1.74268 2.5277 -1.12287 -0.0488763 0.305199 -0.951034 + -1.76503 2.61621 -1.08778 -0.368311 0.31913 -0.873214 + -1.78383 2.69045 -1.04735 -0.444662 0.382017 -0.810147 + -1.80458 2.75174 -1.00111 -0.460354 0.477401 -0.74844 + -1.82875 2.78366 -0.959199 -0.561231 0.5448 -0.623067 + -1.72818 2.43651 -1.15392 0.0153373 0.273364 -0.961788 + -1.7724 2.45598 -1.10924 -0.734968 0.123263 -0.666804 + -1.79475 2.54449 -1.07414 -0.772937 0.107699 -0.625276 + -1.81161 2.64031 -1.02712 -0.822024 0.133012 -0.5537 + -1.83236 2.70152 -0.98093 -0.843192 0.116224 -0.524898 + -1.77005 2.3569 -1.13484 -0.715717 0.134452 -0.685326 + -1.83396 2.32389 -1.05426 -0.836003 0.121886 -0.535017 + -1.82428 2.46176 -1.03646 -0.845391 0.0969951 -0.525267 + -1.84113 2.55759 -0.989435 -0.879065 0.0968489 -0.46676 + -1.8688 2.64369 -0.913372 -0.89814 0.0772281 -0.432874 + -1.8316 2.22491 -1.07981 -0.843554 0.163224 -0.511638 + -1.89966 2.06103 -0.988568 -0.933401 0.14116 -0.329902 + -1.87904 2.2611 -0.990313 -0.876503 0.089622 -0.472981 + -1.86937 2.39898 -0.972513 -0.873943 0.123206 -0.470153 + -1.87537 2.47364 -0.941231 -0.880607 0.111525 -0.460536 + -1.84003 2.13082 -1.11226 -0.839926 0.195803 -0.506148 + -1.90809 1.96695 -1.02102 -0.932285 0.169191 -0.319717 + -1.9045 2.14994 -0.949971 -0.92276 0.0636023 -0.38009 + -1.90458 1.88014 -1.06926 -0.900005 0.118722 -0.419399 + -1.97308 1.77805 -0.900439 -0.955821 0.156521 -0.248812 + -1.96957 1.69115 -0.948727 -0.937747 0.132989 -0.32085 + -2.02579 1.55705 -0.839262 -0.947964 0.15376 -0.278787 + -1.96564 1.60198 -0.996678 -0.925672 0.134525 -0.353601 + -2.02186 1.46779 -0.887253 -0.943343 0.137763 -0.301869 + -2.06228 1.48826 -0.746906 -0.959362 0.133604 -0.248546 + -2.09122 1.45139 -0.640447 -0.974431 0.0962247 -0.20304 + -1.95992 1.51335 -1.04196 -0.923642 0.178625 -0.339085 + -2.02129 1.37888 -0.937849 -0.94504 0.182911 -0.271004 + -2.06073 1.38864 -0.790966 -0.960796 0.118039 -0.250875 + -2.08967 1.35177 -0.684508 -0.980061 0.065485 -0.187594 + -2.11859 1.4276 -0.499441 -0.983277 0.0389271 -0.177909 + -2.02617 1.29301 -0.988521 -0.947385 0.177116 -0.266628 + -2.06017 1.29964 -0.841612 -0.964425 0.136427 -0.226433 + -2.08309 1.26324 -0.753163 -0.979789 0.0907949 -0.17824 + -2.10357 1.35566 -0.589833 -0.988026 0.0150411 -0.153556 + -2.02351 1.20911 -1.04761 -0.944788 0.160515 -0.285676 + -2.05816 1.21379 -0.905509 -0.96694 0.130825 -0.21889 + -2.08108 1.17739 -0.817061 -0.987623 0.0473868 -0.149515 + -2.09699 1.26712 -0.658488 -0.993989 0.00114169 -0.109477 + -2.12631 1.36968 -0.449128 -0.98963 -0.0982745 -0.104761 + -2.05549 1.1299 -0.964603 -0.972881 0.0812402 -0.216569 + -2.07198 1.08522 -0.885216 -0.990384 -0.0118836 -0.137833 + -2.08871 1.18155 -0.736669 -0.996322 -0.0308005 -0.0799573 + -2.09774 1.19902 -0.611331 -0.993967 -0.107858 -0.0199089 + -2.10602 1.28468 -0.5331 -0.992525 -0.103797 -0.0641862 + -2.04402 1.04975 -1.03439 -0.970439 0.030296 -0.239437 + -2.06051 1.00508 -0.955007 -0.987998 -0.0560364 -0.143945 + -2.07962 1.08938 -0.804825 -0.995261 -0.0763985 -0.0601538 + -2.0328 0.959071 -1.08132 -0.962637 -0.0424637 -0.267444 + -2.04378 0.902897 -0.995826 -0.983016 -0.121232 -0.13778 + -2.0661 0.987661 -0.861243 -0.990934 -0.125045 -0.0491213 + -2.07118 1.00899 -0.747187 -0.989622 -0.143696 0.000826782 + -2.08471 1.11063 -0.690828 -0.990304 -0.138888 0.0027783 + -2.01409 0.862541 -1.12133 -0.963874 -0.0552808 -0.260559 + -2.02508 0.806365 -1.03583 -0.983527 -0.124181 -0.131357 + -2.04937 0.885476 -0.902053 -0.98657 -0.153917 -0.0546657 + -1.99658 0.774051 -1.17386 -0.971801 -0.0279902 -0.234136 + -2.00857 0.707927 -1.07553 -0.986996 -0.112858 -0.114464 + -2.02757 0.760312 -0.902864 -0.986431 -0.158308 -0.0435122 + -2.03319 0.780641 -0.797873 -0.982325 -0.181062 0.0474664 + -2.05499 0.905722 -0.797122 -0.986957 -0.16097 -0.00194736 + -1.98022 0.694353 -1.24222 -0.968386 -0.0316358 -0.247441 + -1.99221 0.628315 -1.14384 -0.988532 -0.0728051 -0.132303 + -2.01107 0.661873 -0.942562 -0.991753 -0.120767 -0.042911 + -1.9371 0.70295 -1.36411 -0.933596 0.0203236 -0.357751 + -1.95748 0.621574 -1.31076 -0.953344 -0.0400655 -0.299216 + -1.97947 0.54448 -1.21083 -0.977391 -0.104149 -0.184012 + -2.00034 0.561665 -0.990198 -0.993735 -0.101515 -0.0467479 + -1.92874 0.541985 -1.37811 -0.953065 -0.0468341 -0.299122 + -1.95073 0.464891 -1.27818 -0.97211 0.0194808 -0.233714 + -1.8863 0.579432 -1.50997 -0.952219 0.0337673 -0.303544 + -1.90438 0.486181 -1.45545 -0.961391 0.064499 -0.267521 + -1.94019 0.396175 -1.36396 -0.963416 0.121826 -0.23872 + -1.99081 0.395049 -1.14661 -0.989561 0.0761923 -0.122326 + -1.88613 0.445995 -1.54445 -0.960159 0.115062 -0.254667 + -1.92194 0.355984 -1.45294 -0.951354 0.181882 -0.248686 + -1.83749 0.521787 -1.69473 -0.964718 0.118015 -0.235353 + -1.86166 0.425444 -1.64426 -0.958609 0.117814 -0.259208 + -1.90282 0.328364 -1.54911 -0.94618 0.190271 -0.261801 + -1.97912 0.263295 -1.33021 -0.977919 0.100252 -0.183366 + -1.81013 0.522261 -1.81735 -0.964761 0.0864903 -0.248507 + -1.83638 0.413125 -1.73832 -0.959356 0.0927667 -0.266516 + -1.87754 0.315958 -1.64322 -0.945104 0.164066 -0.282596 + -1.78193 0.519976 -1.91999 -0.950571 0.057625 -0.305113 + -1.80817 0.410835 -1.84095 -0.960484 0.0840346 -0.265345 + -1.8437 0.321936 -1.74858 -0.948369 0.178105 -0.26244 + -1.75033 0.516583 -2.00871 -0.945673 0.0907224 -0.312206 + -1.77306 0.429219 -1.96599 -0.95427 0.0938365 -0.283836 + -1.80858 0.340319 -1.87362 -0.945998 -0.0213889 -0.323466 + -1.72877 0.620289 -2.03794 -0.943108 0.126186 -0.30761 + -1.70205 0.619774 -2.12764 -0.950979 0.10299 -0.291603 + -1.71697 0.522889 -2.10943 -0.94546 0.0895083 -0.313198 + -1.7397 0.435529 -2.06672 -0.942173 0.0140033 -0.334835 + -1.68803 0.731209 -2.11905 -0.956964 0.154947 -0.245381 + -1.66896 0.729781 -2.21098 -0.961123 0.122954 -0.247236 + -1.67234 0.614464 -2.21745 -0.954832 0.0675853 -0.289359 + -1.68726 0.517582 -2.19924 -0.942297 0.055448 -0.330155 + -1.62954 0.79567 -2.3085 -0.916133 0.262274 -0.303172 + -1.64705 0.719534 -2.29283 -0.958629 0.105311 -0.264463 + -1.65044 0.604129 -2.29935 -0.958592 0.0284245 -0.283361 + -1.66056 0.507282 -2.271 -0.944086 0.0219805 -0.328965 + -1.70504 0.443523 -2.15917 -0.937578 -0.00732861 -0.347698 + -1.57527 0.815265 -2.41484 -0.786469 0.463635 -0.408055 + -1.60796 0.770587 -2.39906 -0.883805 0.304206 -0.355453 + -1.62548 0.694363 -2.38344 -0.944528 0.0736135 -0.320073 + -1.63512 0.575657 -2.34903 -0.945393 -0.00628874 -0.325871 + -1.64524 0.478729 -2.32075 -0.939555 -0.0369874 -0.340395 + -1.54246 0.793947 -2.49812 -0.778423 0.444319 -0.443439 + -1.57515 0.749187 -2.48239 -0.854523 0.262989 -0.447915 + -1.59698 0.67167 -2.45753 -0.908288 0.0341742 -0.416948 + -1.60662 0.552963 -2.42312 -0.920288 -0.0260881 -0.390371 + -1.50042 0.854638 -2.50764 -0.755032 0.504357 -0.418987 + -1.50328 0.780374 -2.57541 -0.772967 0.380888 -0.507392 + -1.53243 0.730259 -2.56481 -0.822976 0.207752 -0.528725 + -1.55426 0.652742 -2.53995 -0.869186 0.0190255 -0.494118 + -1.40873 0.913059 -2.60623 -0.707436 0.582214 -0.400701 + -1.46124 0.841065 -2.58493 -0.773094 0.446835 -0.450182 + -1.43613 0.819446 -2.65289 -0.798962 0.360914 -0.481042 + -1.45803 0.764403 -2.64455 -0.795105 0.293892 -0.530504 + -1.48719 0.714293 -2.63396 -0.751387 0.0945052 -0.653059 + -1.35057 0.970934 -2.60107 -0.634369 0.702594 -0.322394 + -1.38363 0.891352 -2.67423 -0.716114 0.510931 -0.475532 + -1.39239 0.812546 -2.72934 -0.74291 0.323901 -0.585809 + -1.41428 0.75751 -2.72101 -0.7928 0.0651492 -0.60599 + -1.28516 1.0287 -2.58513 -0.594154 0.769993 -0.232576 + -1.23603 1.03277 -2.68117 -0.654781 0.69439 -0.298471 + -1.30145 0.975091 -2.69707 -0.664642 0.642797 -0.380873 + -1.33585 0.903728 -2.71987 -0.681349 0.452028 -0.575703 + -1.27319 1.0645 -2.46373 -0.662391 0.733103 -0.154267 + -1.23551 1.07169 -2.57379 -0.714719 0.672558 -0.191943 + -1.20058 1.08523 -2.66683 -0.793243 0.509164 -0.333941 + -1.18471 1.04321 -2.75686 -0.666151 0.649363 -0.366838 + -1.22233 1.10923 -2.49381 -0.729059 0.666569 -0.155428 + -1.21201 1.11193 -2.53548 -0.773572 0.619555 -0.133186 + -1.19013 1.12891 -2.58389 -0.826646 0.554456 -0.0960993 + -1.21363 1.08867 -2.62219 -0.867134 0.446604 -0.220507 + -1.19159 1.14556 -2.48434 -0.731957 0.678813 -0.0587482 + -1.18126 1.14826 -2.52601 -0.815828 0.569804 -0.098732 + -1.17209 1.15831 -2.57441 -0.84457 0.531328 -0.0662785 + -1.18088 1.1429 -2.63392 -0.839225 0.5182 -0.164836 + -1.16783 1.13946 -2.67856 -0.872127 0.381376 -0.306507 + -1.18777 1.14912 -2.45389 -0.690687 0.722938 0.0176511 + -1.16542 1.17131 -2.46853 -0.560574 0.828096 0.00376736 + -1.17085 1.16932 -2.51908 -0.694251 0.719653 -0.0107273 + -1.16168 1.17937 -2.56748 -0.763728 0.645469 -0.00946441 + -1.1616 1.17478 -2.43814 -0.537117 0.841758 0.0543007 + -1.1403 1.18208 -2.45458 -0.148686 0.988614 -0.0231118 + -1.14573 1.18009 -2.50514 -0.300884 0.948428 0.0997637 + -1.14055 1.18732 -2.53386 -0.431706 0.876175 0.214351 + -1.14094 1.20304 -2.60229 -0.572271 0.817286 0.0674576 + -1.13768 1.18233 -2.43142 -0.129509 0.990662 0.0426188 + -1.09447 1.17921 -2.45001 -0.0558176 0.993542 0.0987885 + -1.08928 1.18644 -2.47874 -0.0957059 0.969905 0.223885 + -1.11981 1.21108 -2.56861 -0.168447 0.98564 0.0118046 + -1.13552 1.18105 -2.41161 -0.145418 0.988941 0.0291549 + -1.09184 1.17938 -2.4269 0.109258 0.99367 -0.0261175 + -1.0804 1.20673 -2.55668 0.0681394 0.981004 0.181625 + -0.967913 1.176 -2.52145 0.158523 0.9292 0.333852 + -1.06545 1.21285 -2.59188 0.0449928 0.973577 0.223881 + -1.09838 1.22453 -2.63391 -0.134256 0.981751 0.134686 + -1.13079 1.21216 -2.64528 -0.583304 0.812253 0.00105262 + -1.16283 1.17229 -2.62444 -0.833004 0.548775 -0.0703607 + -0.911718 1.13693 -2.48258 0.675808 0.505001 0.536896 + -0.926335 1.16779 -2.50524 -0.011886 0.735221 0.677723 + -0.990116 1.20637 -2.60766 0.0790973 0.956466 0.28092 + -1.02305 1.21805 -2.64968 0.0225568 0.986295 0.163444 + -0.885069 1.09631 -2.51663 0.889157 0.0688556 0.452392 + -0.884528 1.14908 -2.50443 0.676666 0.2882 0.677542 + -0.899145 1.17995 -2.5271 0.253383 0.832005 0.493522 + -0.948538 1.19817 -2.59145 0.0255572 0.950254 0.310427 + -0.94738 1.22467 -2.66936 0.0601982 0.925018 0.375122 + -0.856004 1.06934 -2.57092 0.861692 0.116377 0.493905 + -0.867959 1.10431 -2.55008 0.87148 -0.0567673 0.487134 + -0.867418 1.15699 -2.53792 0.856337 0.330428 0.396868 + -0.88845 1.18671 -2.54941 0.422347 0.85005 0.314702 + -0.937843 1.20493 -2.61377 0.078891 0.955981 0.282623 + -0.84669 1.11707 -2.58139 0.896595 0.100933 0.431195 + -0.862438 1.16515 -2.58307 0.834094 0.470844 0.287389 + -0.88347 1.19496 -2.5945 0.413193 0.867419 0.277229 + -0.834108 1.13159 -2.62274 0.899935 0.258385 0.351218 + -0.849857 1.17975 -2.62436 0.765879 0.512534 0.38825 + -0.876853 1.2022 -2.62483 0.345542 0.878935 0.328747 + -0.931226 1.21225 -2.64405 0.157951 0.938008 0.308532 + -0.941463 1.25178 -2.72611 0.0463528 0.911807 0.407994 + -0.980939 1.25611 -2.73802 -0.124525 0.955234 0.268369 + -0.986855 1.22901 -2.68127 -0.0860182 0.929966 0.357442 + -0.855869 1.243 -2.7345 0.149777 0.897169 0.415517 + -0.91914 1.26648 -2.76477 0.0567207 0.916672 0.395594 + -1.0015 1.25512 -2.76769 -0.274863 0.961474 -0.00433306 + -1.03613 1.2458 -2.74336 -0.199231 0.950363 0.23899 + -0.880748 1.29581 -2.84857 -0.00167506 0.960918 0.276828 + -0.941826 1.27882 -2.78935 -0.105791 0.914751 0.38992 + -0.882594 1.29958 -2.8801 -0.162982 0.983306 0.0809091 + -0.94672 1.29238 -2.83283 -0.160976 0.960792 0.225757 + -0.988215 1.27832 -2.83389 -0.466197 0.873957 0.137331 + -0.983321 1.26477 -2.79041 -0.400141 0.892953 0.20621 + -0.850377 1.31449 -2.91732 -0.282936 0.919806 0.271854 + -0.877135 1.30123 -2.90596 -0.300999 0.948933 0.0944764 + -0.949167 1.29401 -2.91546 -0.275316 0.96128 -0.0118887 + -0.948567 1.29623 -2.86431 -0.221607 0.974469 0.0360735 + -0.899956 1.31617 -2.97904 -0.428834 0.890801 0.150248 + -0.926715 1.30291 -2.96768 -0.404979 0.914011 0.0239883 + -0.943709 1.29575 -2.94127 -0.333011 0.942891 -0.0077541 + -0.981064 1.27856 -2.9257 -0.675549 0.704626 -0.217107 + -0.980463 1.28078 -2.87453 -0.512733 0.857576 -0.0408408 + -0.909608 1.31262 -3.01408 -0.524969 0.825447 -0.207473 + -0.949326 1.28635 -2.99379 -0.704705 0.666207 -0.244047 + -0.96632 1.27919 -2.96738 -0.744648 0.609156 -0.272815 + -0.986988 1.24749 -2.93948 -0.835253 0.356501 -0.41864 + -1.01219 1.25533 -2.89466 -0.787824 0.568261 -0.237514 + -0.889411 1.29932 -3.05886 -0.526052 0.749129 -0.402584 + -0.913215 1.27735 -3.065 -0.633356 0.477886 -0.608675 + -0.933412 1.29065 -3.02023 -0.669073 0.636878 -0.383051 + -0.956513 1.25574 -3.01736 -0.84996 0.354623 -0.389629 + -0.972244 1.24811 -2.98116 -0.89113 0.307196 -0.333943 + -0.836077 1.34062 -3.04639 -0.736355 0.622526 -0.265035 + -0.879112 1.29481 -3.08344 -0.670374 0.630444 -0.39133 + -0.906593 1.25503 -3.07875 -0.689439 0.168004 -0.704592 + -0.940599 1.25994 -3.04386 -0.77263 0.321629 -0.547355 + -0.9681 1.2197 -3.01414 -0.860102 0.0940931 -0.50137 + -0.828288 1.35158 -3.05058 -0.624178 0.777037 -0.0813382 + -0.867142 1.29652 -3.11001 -0.834016 0.520162 -0.18398 + -0.880425 1.25738 -3.12241 -0.895863 0.120374 -0.427714 + -0.892395 1.25566 -3.09584 -0.837736 0.200515 -0.507929 + -0.848405 1.33885 -3.10093 -0.805847 0.585174 0.0904521 + -0.859353 1.30749 -3.11421 -0.88592 0.463174 -0.0248135 + -0.861481 1.29584 -3.15123 -0.909019 0.257874 -0.327393 + -0.860701 1.25353 -3.15314 -0.847179 -0.0782314 -0.525516 + -0.891311 1.19161 -3.0945 -0.764881 0.317403 -0.560547 + -0.822393 1.35025 -3.13007 -0.335236 0.940074 -0.062271 + -0.842034 1.33802 -3.14948 -0.73097 0.654264 -0.193963 + -0.850533 1.32721 -3.13796 -0.88922 0.425233 -0.168716 + -0.837007 1.30443 -3.1987 -0.866915 0.155506 -0.473578 + -0.836227 1.26211 -3.20061 -0.794169 -0.140755 -0.591172 + -0.807774 1.35332 -3.17719 -0.343641 0.937186 -0.0599436 + -0.827415 1.34108 -3.19659 -0.710348 0.603132 -0.362819 + -0.828508 1.31515 -3.21027 -0.780578 0.211785 -0.588086 + -0.788135 1.35976 -3.19374 -0.344028 0.933357 -0.102414 + -0.803897 1.3462 -3.21505 -0.433188 0.670717 -0.602069 + -0.80499 1.32035 -3.22868 -0.383956 0.26671 -0.883993 + -0.810492 1.2834 -3.23168 -0.423018 -0.0677639 -0.903583 + -0.824198 1.20238 -3.18974 -0.746425 -0.103299 -0.657404 + -0.759647 1.36245 -3.21781 -0.352857 0.757129 -0.549771 + -0.775426 1.33123 -3.23053 -0.314824 0.336035 -0.887675 + -0.780928 1.29429 -3.23354 -0.308369 0.0410189 -0.950382 + -0.798463 1.22376 -3.22077 -0.571091 -0.225615 -0.789274 + -0.734881 1.36517 -3.22991 -0.510718 0.679211 -0.527105 + -0.75066 1.33395 -3.24263 -0.56923 0.372221 -0.733095 + -0.758515 1.28489 -3.24766 -0.628664 0.0801214 -0.773538 + -0.77605 1.21436 -3.23489 -0.650392 -0.0290112 -0.759044 + -0.724005 1.3358 -3.27084 -0.611347 0.357093 -0.706215 + -0.731861 1.28674 -3.27586 -0.746686 0.145284 -0.649116 + -0.740077 1.21133 -3.26985 -0.758034 0.0150473 -0.652041 + -0.703222 1.28398 -3.31608 -0.871041 0.128482 -0.474111 + -0.711438 1.20857 -3.31007 -0.827377 0.0219875 -0.561216 + -0.729951 1.09364 -3.2816 -0.799537 0.024507 -0.600116 + -0.756525 1.13848 -3.25267 -0.71915 -0.0116248 -0.694757 + -0.692139 1.32737 -3.32723 -0.863614 0.367076 -0.345582 + -0.679091 1.27673 -3.37073 -0.768159 -0.0132553 -0.640122 + -0.685683 1.19519 -3.35049 -0.753651 -0.0625606 -0.654291 + -0.704195 1.08025 -3.32202 -0.713854 -0.0462183 -0.698768 + -0.631037 1.25434 -3.39814 -0.489264 -0.235466 -0.839747 + -0.657607 1.23794 -3.38175 -0.477437 -0.192609 -0.857296 + -0.664199 1.15631 -3.36156 -0.161871 -0.204568 -0.965375 + -0.667673 1.07883 -3.34755 -0.0804065 -0.16128 -0.983628 + -0.583594 1.12337 -3.3677 -0.413194 -0.305865 -0.85774 + -0.606508 1.1171 -3.35144 -0.448663 -0.257233 -0.855881 + -0.633078 1.1007 -3.33504 -0.023857 -0.220987 -0.974985 + -0.636552 1.02322 -3.32103 0.0327785 -0.128015 -0.99123 + -0.541689 1.23037 -3.43524 -0.317245 -0.420334 -0.850103 + -0.554759 1.09699 -3.36781 -0.191171 -0.237253 -0.952452 + -0.590393 0.98949 -3.34181 -0.485612 0.0171394 -0.874006 + -0.613308 0.983305 -3.3255 -0.376048 0.0441672 -0.925547 + -0.525923 1.10772 -3.37419 -0.351974 -0.259034 -0.899453 + -0.523938 1.00931 -3.36355 -0.410158 0.0258807 -0.911647 + -0.552774 0.998588 -3.35717 -0.312055 0.0387584 -0.949273 + -0.59256 0.886387 -3.36023 -0.447357 0.20609 -0.870286 + -0.516806 0.905132 -3.3851 -0.440406 0.167995 -0.881941 + -0.554941 0.895571 -3.37554 -0.353946 0.217305 -0.909671 + -0.549588 0.807847 -3.4032 -0.434649 0.27002 -0.859168 + -0.613945 0.801257 -3.36938 -0.465565 0.196425 -0.86294 + -0.648242 0.887851 -3.33037 -0.238582 0.156511 -0.958427 + -0.483313 0.9457 -3.40716 -0.352928 0.129484 -0.926647 + -0.478446 0.842036 -3.41942 -0.343401 0.347352 -0.872595 + -0.511454 0.817408 -3.41276 -0.373646 0.39511 -0.839212 + -0.449075 0.857102 -3.41871 -0.181931 0.337697 -0.923505 + -1.15269 1.18141 -2.66743 -0.871896 0.470712 -0.135007 + -1.153 1.14253 -2.72549 -0.915223 0.211874 -0.342748 + -1.14926 1.09558 -2.74257 -0.82447 0.379249 -0.420022 + -1.13193 1.21032 -2.7013 -0.71007 0.693272 -0.123184 + -1.13785 1.1844 -2.71441 -0.891173 0.360217 -0.275779 + -1.12906 1.16266 -2.76575 -0.89021 0.221673 -0.397979 + -1.12532 1.1158 -2.78279 -0.82497 -0.0490651 -0.563043 + -1.09691 1.11595 -2.82104 -0.805106 0.309681 -0.505868 + -1.09952 1.22269 -2.68993 -0.188756 0.981753 0.0230639 + -1.09078 1.2261 -2.71603 -0.236185 0.96295 0.130168 + -1.1157 1.21894 -2.74322 -0.668408 0.703396 -0.241793 + -1.12163 1.19302 -2.75634 -0.864647 0.383575 -0.324431 + -1.10832 1.18096 -2.80125 -0.784085 0.256464 -0.565187 + -1.01432 1.22146 -2.67579 -0.154738 0.968056 0.197288 + -1.06359 1.23826 -2.73789 -0.251442 0.943282 0.216784 + -1.08851 1.23109 -2.76508 -0.509744 0.844013 -0.166745 + -1.10089 1.21141 -2.79179 -0.643317 0.553659 -0.528777 + -1.05669 1.24472 -2.77308 -0.264462 0.935019 -0.236217 + -1.06907 1.22495 -2.79984 -0.463944 0.800522 -0.379369 + -1.09432 1.18106 -2.81722 -0.684007 0.204102 -0.700341 + -1.11132 1.1158 -2.79879 -0.539026 0.721 -0.435442 + -1.00108 1.25237 -2.77993 -0.484721 0.873235 -0.050064 + -1.06865 1.22229 -2.81203 -0.698494 0.68337 -0.212396 + -1.08073 1.19248 -2.8274 -0.779709 0.356109 -0.515014 + -1.06632 1.19253 -2.8497 -0.78751 0.313911 -0.530365 + -1.05505 1.23363 -2.82227 -0.65206 0.745344 -0.138853 + -1.0373 1.24602 -2.83274 -0.637136 0.760528 -0.12512 + -1.04896 1.19939 -2.87096 -0.808506 0.321565 -0.492864 + -1.04076 1.13677 -2.8959 -0.802866 0.287136 -0.522454 + -1.01994 1.25288 -2.85401 -0.690285 0.692207 -0.21061 + -1.02282 1.22287 -2.90504 -0.844319 0.311836 -0.435756 + -1.01462 1.16025 -2.92998 -0.847699 0.0952491 -0.521856 + -0.98606 1.14559 -2.97619 -0.807124 0.140914 -0.573318 + -1.06735 1.08183 -2.90755 -0.71221 0.557681 -0.426321 + -0.997624 1.21503 -2.94985 -0.843424 0.255487 -0.472612 + -0.983832 1.21207 -2.97794 -0.900273 0.212269 -0.380067 + -1.00083 1.1573 -2.95806 -0.874113 -0.195654 -0.444575 + -0.953329 1.20799 -3.03226 -0.761881 -0.082279 -0.64247 + -0.924861 1.16125 -3.05211 -0.759065 0.0913809 -0.64457 + -0.94158 1.11554 -3.05993 -0.671967 0.478682 -0.565087 + -1.00278 1.09979 -2.98406 -0.715202 0.509992 -0.477906 + -0.933976 1.23772 -3.05755 -0.724362 0.0473782 -0.68779 + -0.905509 1.19098 -3.0774 -0.756984 -0.0196027 -0.653139 + -0.871586 1.18768 -3.12528 -0.819592 -0.0165358 -0.572709 + -0.878753 1.11692 -3.12013 -0.743617 0.354148 -0.56711 + -0.831364 1.13163 -3.1846 -0.693751 0.0361876 -0.719306 + -0.906013 1.05988 -3.15032 -0.511791 0.295604 -0.806652 + -0.96884 1.05849 -3.09012 -0.670227 0.442286 -0.595968 + -1.03934 1.04783 -3.00726 -0.70953 0.480407 -0.515534 + -1.10391 1.02987 -2.93075 -0.700279 0.522208 -0.486732 + -0.792498 1.14151 -3.21772 -0.668955 -0.0403599 -0.742206 + -0.844477 1.01909 -3.16388 -0.435912 0.0641955 -0.897697 + -0.862737 0.911411 -3.17597 -0.314487 0.204616 -0.926947 + -0.924274 0.952194 -3.16241 -0.401295 0.14305 -0.904709 + -0.981885 0.970853 -3.11573 -0.692672 0.171191 -0.700642 + -0.805611 1.02897 -3.19699 -0.673897 0.0307071 -0.738187 + -0.779037 0.984124 -3.22592 -0.685824 0.0585476 -0.725408 + -0.807312 0.8757 -3.21712 -0.561078 0.201036 -0.802979 + -0.888474 0.773687 -3.21123 -0.563203 0.163526 -0.809976 + -0.708009 0.929185 -3.30036 -0.640215 0.0185042 -0.767973 + -0.736285 0.820761 -3.29156 -0.579149 0.206094 -0.788741 + -0.770918 0.732946 -3.30046 -0.565777 0.276 -0.776994 + -0.833049 0.737981 -3.25239 -0.538052 0.232206 -0.810297 + -0.671487 0.927766 -3.3259 -0.305046 0.0231465 -0.952056 + -0.669628 0.802808 -3.33947 -0.467802 0.19936 -0.861055 + -0.704261 0.714906 -3.34842 -0.437763 0.323929 -0.838709 + -0.729677 0.650131 -3.36422 -0.429278 0.544317 -0.720722 + -0.784197 0.647313 -3.32094 -0.656441 0.549434 -0.516922 + -0.791553 0.658465 -3.30266 -0.763638 0.201061 -0.61354 + -0.853684 0.663413 -3.25463 -0.650272 -0.0904644 -0.754296 + -0.824094 0.620744 -3.32732 -0.689668 0.667002 -0.281899 + -0.835219 0.606485 -3.26263 -0.793486 0.461746 -0.396448 + -0.842575 0.617554 -3.2444 -0.680987 0.225742 -0.696633 + -0.881885 0.624614 -3.20543 -0.71574 0.01508 -0.698204 + -0.892993 0.670473 -3.21566 -0.728335 -0.127559 -0.673244 + -0.839508 0.585837 -3.34066 -0.767933 0.434601 -0.470532 + -0.850633 0.571579 -3.27597 -0.699861 0.656442 -0.281565 + -0.891828 0.577886 -3.21909 -0.516642 0.648426 -0.559128 + -0.917453 0.547777 -3.26174 -0.481756 0.711617 -0.511383 + -0.970307 0.566982 -3.19821 -0.398424 0.769379 -0.499313 + -0.930771 0.581369 -3.17973 -0.457876 0.689703 -0.560945 + -0.920827 0.628098 -3.16606 -0.668567 0.0729528 -0.740065 + -0.943938 0.49023 -3.28707 -0.644385 0.410786 -0.644998 + -0.996791 0.50944 -3.22354 -0.632229 0.445744 -0.633719 + -1.05221 0.499862 -3.17235 -0.648677 0.374187 -0.662723 + -1.03412 0.568928 -3.14917 -0.543396 0.784954 -0.297604 + -0.994583 0.583223 -3.13074 -0.406932 0.601124 -0.68779 + -1.01994 0.404621 -3.25099 -0.682462 0.276672 -0.676534 + -1.07535 0.395043 -3.1998 -0.685545 0.259637 -0.68016 + -1.13457 0.383945 -3.14298 -0.694294 0.232501 -0.681101 + -1.11179 0.457364 -3.13654 -0.655355 0.3179 -0.685164 + -1.0937 0.52643 -3.11337 -0.59319 0.365523 -0.717299 + -1.04263 0.322675 -3.25645 -0.703613 0.169594 -0.690049 + -1.10444 0.320445 -3.19199 -0.710552 0.154784 -0.686409 + -1.16366 0.309347 -3.13517 -0.729849 0.084507 -0.678365 + -1.22401 0.308672 -3.0596 -0.772003 0.0621487 -0.632574 + -1.19471 0.371712 -3.08779 -0.707413 0.13203 -0.69436 + -1.13614 0.255278 -3.16932 -0.736031 -0.048465 -0.675211 + -1.19799 0.257929 -3.09751 -0.771599 -0.0537367 -0.633836 + -1.25835 0.25717 -3.02199 -0.825489 -0.0769077 -0.559154 + -1.17071 0.195581 -3.11292 -0.775988 -0.151882 -0.612188 + -1.23257 0.198234 -3.04111 -0.796209 -0.240811 -0.555032 + -1.28577 0.197006 -2.94879 -0.82635 -0.272375 -0.492907 + -1.31288 0.247537 -2.92751 -0.837482 -0.174951 -0.517703 + -1.3159 0.131596 -2.85429 -0.813168 -0.425584 -0.397033 + -1.3605 0.135637 -2.75069 -0.785636 -0.511692 -0.347776 + -1.34029 0.187375 -2.85431 -0.811358 -0.375442 -0.448042 + -1.30803 0.080062 -2.77604 -0.657718 -0.697751 -0.283814 + -1.35263 0.084103 -2.67244 -0.676531 -0.689855 -0.257693 + -1.39589 0.088496 -2.56864 -0.650732 -0.720374 -0.24002 + -1.40652 0.13393 -2.65054 -0.787216 -0.523908 -0.325286 + -1.38632 0.185582 -2.7542 -0.835594 -0.376829 -0.399728 + -1.26687 0.033708 -2.71875 -0.527483 -0.821637 -0.216043 + -1.31176 0.039233 -2.61412 -0.542936 -0.817674 -0.191389 + -1.35501 0.043626 -2.51033 -0.541844 -0.819614 -0.186114 + -1.44616 0.135233 -2.545 -0.71925 -0.622187 -0.309132 + -1.48932 0.129995 -2.44592 -0.627934 -0.70319 -0.3335 + -1.43091 0.182214 -2.65897 -0.802916 -0.458224 -0.381257 + -1.41122 0.246872 -2.74796 -0.851353 -0.282496 -0.442033 + -1.36663 0.250236 -2.84319 -0.859513 -0.20662 -0.467489 + -1.47407 0.177061 -2.55984 -0.774972 -0.505297 -0.379597 + -1.46101 0.248108 -2.6577 -0.842072 -0.32881 -0.42755 + -1.39707 0.331328 -2.82164 -0.842121 -0.163062 -0.514045 + -1.33472 0.319051 -2.90858 -0.829021 -0.0990452 -0.550377 + -1.28097 0.316267 -2.99295 -0.803522 -0.0413684 -0.593836 + -1.50272 0.238276 -2.56287 -0.84679 -0.344521 -0.405281 + -1.44686 0.33257 -2.73139 -0.851905 -0.201614 -0.483332 + -1.37354 0.397148 -2.86464 -0.818817 0.0195779 -0.573721 + -1.31119 0.384784 -2.95163 -0.779952 0.0353195 -0.624842 + -1.25167 0.379392 -3.02109 -0.750007 0.127781 -0.64897 + -1.54141 0.229118 -2.47201 -0.878911 -0.321167 -0.352658 + -1.49748 0.340717 -2.6479 -0.876334 -0.194716 -0.440596 + -1.47845 0.415515 -2.70086 -0.872163 0.0408533 -0.487507 + -1.42783 0.407368 -2.78435 -0.842552 -0.00890266 -0.538541 + -1.53617 0.331558 -2.55704 -0.880085 -0.235715 -0.412175 + -1.52509 0.411422 -2.61477 -0.910456 0.0523829 -0.410276 + -1.45261 0.472207 -2.72205 -0.847584 0.222339 -0.481837 + -1.40063 0.465663 -2.81112 -0.820573 0.182764 -0.541532 + -1.34634 0.455443 -2.89141 -0.772425 0.145223 -0.618279 + -1.57128 0.306542 -2.47251 -0.835394 -0.370571 -0.405948 + -1.5602 0.386404 -2.53023 -0.910678 -0.0614836 -0.408516 + -1.49925 0.468028 -2.63601 -0.869102 0.155199 -0.469655 + -1.43292 0.53521 -2.72537 -0.822372 0.245145 -0.513427 + -1.60575 0.310399 -2.37859 -0.920906 -0.250653 -0.298506 + -1.59543 0.38301 -2.44856 -0.932298 -0.0776528 -0.353257 + -1.54397 0.462983 -2.55687 -0.894162 0.0689012 -0.442411 + -1.52708 0.537637 -2.57338 -0.856026 0.0321084 -0.515935 + -1.48236 0.542768 -2.65247 -0.830761 0.187923 -0.523947 + -1.63363 0.327312 -2.28708 -0.933057 -0.197409 -0.300721 + -1.62331 0.400011 -2.357 -0.941493 -0.10647 -0.319773 + -1.5792 0.459672 -2.47514 -0.914495 0.0123474 -0.404409 + -1.66959 0.336595 -2.19856 -0.898147 -0.253989 -0.358917 + -1.65123 0.417072 -2.28535 -0.920044 -0.146869 -0.363247 + -1.61732 0.461668 -2.39239 -0.919441 -0.0799871 -0.385007 + -1.5685 0.550967 -2.50587 -0.883756 -0.0422909 -0.466032 + -1.6967 0.352746 -2.14414 -0.887069 -0.25059 -0.387702 + -1.67834 0.433221 -2.23093 -0.924063 -0.0900735 -0.371476 + -1.73525 0.356326 -2.06274 -0.904216 -0.195466 -0.379718 + -1.76991 0.348332 -1.97029 -0.923692 -0.111495 -0.366554 + -1.51283 0.639411 -2.60746 -0.747482 -0.0418051 -0.662965 + -1.46558 0.611434 -2.6398 -0.735773 0.0833317 -0.672082 + -1.41613 0.603874 -2.71271 -0.812837 0.249557 -0.526324 + -1.43993 0.686228 -2.66635 -0.701385 -0.130788 -0.700681 + -1.39955 0.667331 -2.71382 -0.806797 0.0380626 -0.589602 + -1.37089 0.599904 -2.79263 -0.806693 0.251944 -0.534576 + -1.38094 0.528752 -2.81439 -0.805135 0.251071 -0.537327 + -1.37391 0.738612 -2.76848 -0.636777 -0.0527125 -0.769244 + -1.32933 0.706247 -2.79182 -0.676599 0.20304 -0.707805 + -1.35431 0.66336 -2.79374 -0.767904 0.325738 -0.55156 + -1.30118 0.653066 -2.85931 -0.724483 0.340029 -0.599587 + -1.31941 0.593228 -2.86727 -0.749196 0.296524 -0.592266 + -1.34461 0.824924 -2.77497 -0.411356 0.40117 -0.818443 + -1.30003 0.792471 -2.79836 -0.618966 0.188194 -0.762538 + -1.2762 0.695953 -2.85739 -0.741885 0.343054 -0.576125 + -1.26662 0.915059 -2.81249 -0.753054 0.313349 -0.578552 + -1.21134 0.912351 -2.875 -0.729015 0.258014 -0.634008 + -1.24475 0.789848 -2.86082 -0.767324 0.187833 -0.613133 + -1.22635 0.705679 -2.92404 -0.747082 0.262215 -0.610828 + -1.23221 0.986335 -2.78975 -0.674975 0.608715 -0.416983 + -1.17101 1.00413 -2.86558 -0.688502 0.55266 -0.469608 + -1.14424 0.938086 -2.94017 -0.725606 0.288729 -0.624605 + -1.1949 0.799579 -2.92748 -0.754747 0.20571 -0.622929 + -1.12351 1.06101 -2.83269 -0.701325 0.593726 -0.394505 + -1.05238 0.960199 -3.03288 -0.726634 0.219754 -0.65093 + -1.10361 0.92803 -2.98836 -0.712459 0.205663 -0.670898 + -1.15427 0.789519 -2.97565 -0.701545 0.205512 -0.682349 + -1.17045 0.712744 -2.98307 -0.696069 0.236238 -0.677997 + -1.24529 0.638654 -2.93015 -0.718489 0.283709 -0.635045 + -0.981962 0.837958 -3.12715 -0.648643 0.086705 -0.756138 + -1.04096 0.835841 -3.07488 -0.676754 0.135161 -0.723696 + -1.09219 0.803672 -3.03036 -0.669838 0.166998 -0.723484 + -1.10836 0.726897 -3.03779 -0.624304 0.219397 -0.749739 + -1.18938 0.64572 -2.98918 -0.69001 0.263171 -0.674261 + -0.92435 0.819293 -3.17382 -0.649633 0.0631261 -0.757623 + -0.928869 0.716082 -3.17825 -0.668462 -0.0290365 -0.74318 + -0.980501 0.730595 -3.13999 -0.596225 0.010625 -0.802747 + -1.03949 0.728479 -3.08773 -0.63342 0.171974 -0.754456 + -1.12758 0.661112 -3.04244 -0.623165 0.247104 -0.742028 + -0.972459 0.64252 -3.12784 -0.49703 0.0221792 -0.86745 + -1.05871 0.662694 -3.09238 -0.507377 0.168821 -0.845025 + -1.14228 0.592368 -3.05418 -0.6203 0.267425 -0.737368 + -1.20409 0.576976 -3.00092 -0.681562 0.267929 -0.680946 + -1.26352 0.578902 -2.93805 -0.708927 0.284702 -0.645265 + -1.08084 0.603397 -3.09528 -0.462074 0.24442 -0.852494 + -1.15515 0.515401 -3.07226 -0.618284 0.259328 -0.741939 + -1.21596 0.512611 -3.01483 -0.687406 0.257678 -0.679026 + -1.2754 0.514542 -2.95198 -0.711823 0.238095 -0.660771 + -1.32947 0.522163 -2.88898 -0.753782 0.249189 -0.608044 + -1.17193 0.445132 -3.08136 -0.670714 0.267724 -0.691712 + -1.23275 0.442429 -3.02388 -0.703146 0.21641 -0.677312 + -1.29227 0.447909 -2.95436 -0.739324 0.196686 -0.643984 + -2.07631 1.05829 -0.619383 -0.984776 -0.161989 0.0630468 + -2.08462 1.14167 -0.528789 -0.972802 -0.215204 0.0856987 + -2.09766 1.23015 -0.449251 -0.96778 -0.24505 0.0579026 + -2.07183 1.16429 -0.40337 -0.90215 -0.373365 0.216157 + -2.09548 1.25584 -0.32634 -0.904996 -0.386754 0.17721 + -2.1209 1.32137 -0.369243 -0.96768 -0.251537 0.0180005 + -2.1412 1.40637 -0.285263 -0.964817 -0.26175 -0.0248056 + -2.07553 1.27638 -0.230928 -0.778319 -0.533494 0.331065 + -2.12035 1.37266 -0.167875 -0.831185 -0.492366 0.258278 + -2.11872 1.34714 -0.246282 -0.930117 -0.355499 0.0922128 + -2.15307 1.44336 -0.175734 -0.923882 -0.376226 0.0699626 + -2.17486 1.4999 -0.209276 -0.957722 -0.281004 -0.0616842 + -2.09296 1.37722 -0.106179 -0.686569 -0.557314 0.46693 + -2.11209 1.46856 -0.032785 -0.646813 -0.556234 0.521764 + -2.1547 1.46887 -0.097327 -0.826761 -0.481316 0.291204 + -2.18874 1.57082 -0.033902 -0.766564 -0.524893 0.369955 + -2.18673 1.53689 -0.099744 -0.870768 -0.469572 0.145828 + -2.04395 1.43658 0.003601 -0.425691 -0.636428 0.643232 + -2.03494 1.51832 0.092234 -0.385641 -0.612214 0.690272 + -2.14612 1.57059 0.03069 -0.668946 -0.510348 0.540422 + -1.97635 1.39651 -0.013794 0.0907708 -0.70271 0.705663 + -1.96734 1.47825 0.074839 0.181619 -0.708776 0.681652 + -2.04287 1.60776 0.161511 -0.408368 -0.500057 0.763662 + -2.15405 1.65995 0.099917 -0.546278 -0.586471 0.598024 + -2.2366 1.67118 0.022866 -0.638983 -0.645383 0.418547 + -1.92104 1.44646 -0.019103 0.780813 -0.482862 0.396455 + -1.89298 1.52745 0.050015 0.705753 -0.604032 0.370214 + -1.93928 1.55924 0.143957 0.207741 -0.688047 0.695295 + -1.98979 1.6911 0.231766 -0.283109 -0.594299 0.752767 + -1.90639 1.358 -0.168095 0.948273 -0.205625 0.24186 + -1.89158 1.44598 -0.106472 0.943949 -0.296139 0.145811 + -1.87462 1.52017 -0.039377 0.914213 -0.394759 0.0915382 + -1.85245 1.60663 0.108876 0.704914 -0.629211 0.327399 + -1.8862 1.64258 0.21421 0.276049 -0.725521 0.63041 + -1.86913 1.54697 -0.119201 0.973441 -0.0658189 -0.21927 + -1.84762 1.61518 -0.058341 0.937781 -0.141336 -0.317161 + -1.83409 1.59935 0.019485 0.901535 -0.432666 -0.00585471 + -1.79353 1.68774 0.086182 0.903663 -0.426788 -0.0352704 + -1.80712 1.67712 0.149782 0.770121 -0.584024 0.256575 + -1.90366 1.58585 -0.184941 0.900212 0.304796 -0.310995 + -1.88215 1.65406 -0.124082 0.734553 0.357577 -0.576689 + -1.80707 1.70358 0.008356 0.879021 -0.0303957 -0.475814 + -1.96656 1.69425 -0.164886 0.815085 0.494977 -0.301056 + -1.98548 1.76989 -0.0955 0.587809 0.688393 -0.424966 + -1.90107 1.7297 -0.054687 0.416509 0.642809 -0.642897 + -1.85621 1.7471 -0.020024 0.479751 0.468105 -0.742103 + -1.75682 1.79571 0.071374 0.860873 -0.0825552 -0.502078 + -2.04625 1.81044 -0.084535 0.29823 0.796599 -0.525822 + -2.00417 1.89569 0.025604 0.345333 0.624215 -0.700786 + -1.95931 1.91309 0.060267 0.320098 0.539902 -0.778488 + -1.80597 1.83923 0.042994 0.417825 0.411959 -0.809761 + -2.01202 1.78593 -0.505692 0.647339 0.745688 0.157802 + -2.02144 1.80659 -0.573062 0.685061 0.658367 0.311841 + -2.05701 1.81152 -0.487006 0.605798 0.768393 0.206351 + -2.05367 1.84205 -0.544286 0.817012 0.443929 0.367991 + -2.01739 1.83902 -0.609851 0.801432 0.276919 0.530116 + -2.04962 1.87449 -0.581074 0.807571 0.346906 0.476953 + -2.04145 1.94214 -0.633849 0.508707 0.297805 0.807793 + -1.97133 1.92451 -0.662711 0.664323 0.110262 0.739268 + -1.99539 2.02754 -0.686759 0.450854 0.240487 0.859591 + -1.86546 2.21637 -0.792627 0.671205 0.0809145 0.736842 + -1.86537 2.28969 -0.80982 0.100236 0.135708 0.985665 + -1.97007 2.21519 -0.731793 0.441884 0.0308854 0.89654 + -2.00125 2.13916 -0.723096 -0.909366 0.200364 0.364564 + -1.94335 2.34968 -0.749733 0.602343 -0.0633986 0.795716 + -1.9866 2.29243 -0.724362 0.495295 -0.00991002 0.868668 + -1.92042 2.52582 -0.743409 0.632544 -0.0129348 0.774417 + -1.96367 2.46847 -0.718087 -0.522958 0.087648 0.84784 + -1.87463 2.72542 -0.804338 0.70776 0.274569 0.650913 + -1.93079 2.6463 -0.737493 0.108039 0.0688432 0.99176 + -1.93692 2.63864 -0.741815 -0.967517 0.129701 0.217 + -1.94728 2.53942 -0.740764 -0.942284 0.120314 -0.312449 + -1.98055 2.3106 -0.758235 -0.964562 0.107045 -0.241166 + -1.9866 2.29243 -0.724362 -0.987131 0.106807 -0.119016 + -1.90132 2.76373 -0.816285 0.528351 0.56562 0.633181 + -1.9324 2.7268 -0.741515 -0.133289 0.598016 0.790323 + -1.93854 2.71913 -0.745837 -0.955142 0.192124 0.225371 + -2.14399 1.89124 -0.011488 0.426955 0.672227 -0.604831 + -2.06494 1.93633 0.036612 0.195836 0.646167 -0.737643 + -1.93989 1.94675 0.091568 0.284015 0.614345 -0.73615 + -2.15986 1.95106 0.0341 0.269388 0.585078 -0.764927 + -2.0808 1.99615 0.082202 0.248486 0.50442 -0.826931 + -2.19351 1.9624 0.028866 0.198285 0.533191 -0.822429 + -2.10963 2.04865 0.097671 0.238839 0.542194 -0.805594 + -2.06721 2.07636 0.125269 0.213802 0.715921 -0.664639 + -2.03838 2.02386 0.109799 0.271657 0.449616 -0.85091 + -2.23917 1.92694 0.002679 -0.000378154 0.505122 -0.863048 + -2.21586 2.04588 0.063268 0.0890033 0.639748 -0.763414 + -2.14329 2.05998 0.092438 0.250808 0.672469 -0.696334 + -2.15972 2.09474 0.138641 0.0354119 0.920513 -0.389104 + -2.24964 1.89447 -0.013284 -0.0940971 0.614787 -0.78306 + -2.32536 1.91211 -0.01503 -0.274091 0.4257 -0.862354 + -2.26152 2.01042 0.037081 -0.0305131 0.537276 -0.842854 + -2.28514 2.03824 0.065703 -0.320131 0.729777 -0.604103 + -2.23229 2.08063 0.109474 -0.131286 0.898211 -0.419501 + -2.30144 1.86929 -0.036272 -0.147104 0.603321 -0.783814 + -2.33583 1.87963 -0.030984 -0.497391 0.502262 -0.707344 + -2.35673 1.84625 -0.008958 -0.96642 -0.193908 -0.168619 + -2.34898 1.93992 0.013602 -0.632048 0.451421 -0.629869 + -2.25277 1.80374 -0.126729 -0.744028 0.255098 -0.617533 + -2.31679 1.83824 -0.046093 -0.406846 0.181152 -0.895355 + -2.35118 1.84867 -0.040755 -0.740287 0.0530725 -0.670193 + -2.20712 1.69775 -0.19395 -0.83829 -0.0221298 -0.544775 + -2.28134 1.80294 -0.084555 -0.80772 -0.123241 -0.576541 + -2.3157 1.79518 -0.041913 -0.812506 -0.373635 -0.447471 + -2.32125 1.79285 -0.010065 -0.840183 -0.535749 -0.0840558 + -2.28025 1.75988 -0.080374 -0.887256 -0.211078 -0.41015 + -2.28498 1.73488 -0.015069 -0.882903 -0.461293 -0.0876999 + -2.33655 1.81891 0.081797 -0.830046 -0.508139 0.229823 + -2.25308 1.68695 -0.118641 -0.922409 -0.241731 -0.301209 + -2.23459 1.63726 -0.042976 -0.866257 -0.491669 0.0886564 + -2.30028 1.76094 0.076794 -0.746337 -0.569201 0.344952 + -2.21773 1.74971 0.153845 -0.494162 -0.635582 0.59316 + -2.34528 1.85868 0.128905 -0.84888 -0.431524 0.305269 + -2.20269 1.58923 -0.146599 -0.944752 -0.300742 -0.130379 + -2.14133 1.44162 -0.358728 -0.979075 -0.0336256 -0.200702 + -1.98942 1.75695 0.288917 -0.356772 -0.656255 0.664864 + -2.21737 1.81556 0.210996 -0.427094 -0.604982 0.672003 + -2.31566 1.8655 0.189291 -0.664597 -0.516207 0.540222 + -2.35617 1.95194 0.178382 -0.937982 -0.170715 0.301738 + -2.36546 1.88611 0.038201 -0.987757 -0.155769 0.00846897 + -1.8863 1.73845 0.328145 -0.0158764 -0.745407 0.666421 + -2.03039 1.82377 0.333367 -0.381333 -0.563144 0.733113 + -2.14866 1.86319 0.301299 -0.403642 -0.547401 0.733093 + -2.24695 1.91313 0.279594 -0.500256 -0.445701 0.742358 + -2.32655 1.95876 0.238766 -0.76628 -0.176209 0.617872 + -1.8458 1.74 0.305064 0.52681 -0.688237 0.498799 + -1.86725 1.78376 0.373066 0.111726 -0.563128 0.818782 + -1.92727 1.80528 0.372597 -0.278403 -0.514301 0.811163 + -1.94441 1.85603 0.390103 -0.216515 -0.262564 0.940309 + -2.0185 1.88934 0.374807 -0.322445 -0.281857 0.903651 + -1.84087 1.71298 0.255067 0.651502 -0.63517 0.414853 + -1.76504 1.81136 0.280262 0.792631 -0.509071 0.335533 + -1.82675 1.78531 0.349985 0.555052 -0.631462 0.541454 + -1.81491 1.82177 0.372629 0.527454 -0.464782 0.711175 + -1.88439 1.83451 0.390573 -0.0563916 -0.312353 0.948291 + -1.76011 1.78434 0.230264 0.864915 -0.42226 0.271326 + -1.74652 1.79497 0.166664 0.908399 -0.416978 0.0306689 + -1.75319 1.84774 0.302856 0.777004 -0.480524 0.406646 + -1.73164 1.84857 0.10061 0.858913 0.21563 -0.464513 + -1.72133 1.84783 0.1959 0.911492 -0.410839 0.0198552 + -1.71044 1.88591 0.258945 0.894286 -0.39135 0.217018 + -1.73118 1.87639 0.295633 0.789309 -0.46938 0.395821 + -1.79859 1.8846 0.394619 0.534401 -0.330996 0.777726 + -1.78655 1.87289 0.074295 0.450527 0.632341 -0.630214 + -1.72356 1.85728 0.131326 0.922665 0.0418918 -0.383321 + -1.71488 1.87816 0.156571 0.917837 0.0483912 -0.393997 + -1.71266 1.8687 0.221145 0.901692 -0.422774 0.0906235 + -1.77846 1.88169 0.105061 0.479172 0.764593 -0.431034 + -1.81352 1.9195 0.12256 0.322027 0.547946 -0.772045 + -1.75341 1.9167 0.142605 0.43893 0.414666 -0.797115 + -1.69585 1.93395 0.202742 0.924585 0.208427 -0.318907 + -1.69363 1.95115 0.240542 0.930307 0.366312 -0.0185843 + -1.97494 1.98465 0.109118 0.33233 0.565857 -0.754561 + -1.92688 2.02509 0.144879 0.284258 0.599303 -0.748353 + -1.86677 2.02229 0.164923 0.340009 0.709329 -0.617451 + -1.73438 1.97249 0.188775 0.5721 0.6472 -0.503819 + -1.7512 2.00011 0.235748 0.509114 0.857031 -0.0793692 + -1.99032 2.0643 0.14556 0.34963 0.712652 -0.608183 + -1.99179 2.08462 0.19257 0.282208 0.925875 -0.251225 + -1.88359 2.0499 0.211896 0.37028 0.89876 -0.234783 + -1.76364 1.99576 0.302883 0.515872 0.823652 0.235529 + -1.70607 1.9468 0.307678 0.897687 0.252079 0.361406 + -2.06867 2.09668 0.17228 0.154743 0.954999 -0.253045 + -1.97827 2.09008 0.273111 0.201643 0.971959 0.120974 + -1.87008 2.05545 0.292487 0.39163 0.913235 0.112371 + -1.88752 2.03961 0.350326 0.241186 0.790539 0.562918 + -1.78108 1.97992 0.360723 0.487772 0.628816 0.605532 + -2.10191 2.10864 0.233761 0.0295365 0.996133 0.0827478 + -2.11664 2.09202 0.285748 -0.130634 0.849911 0.510476 + -1.99301 2.07346 0.325098 0.0538973 0.842256 0.536377 + -2.19296 2.1067 0.200123 -0.143025 0.98971 0.00429181 + -2.21547 2.09059 0.247028 -0.303141 0.843637 0.44315 + -2.12665 2.04664 0.326351 -0.25651 0.524742 0.811695 + -2.02307 2.03341 0.363666 -0.129289 0.522003 0.843088 + -1.91758 1.99965 0.388943 -0.00327734 0.49643 0.86807 + -2.28133 2.08254 0.160965 -0.38893 0.914944 -0.107751 + -2.30384 2.06635 0.20782 -0.586204 0.755072 0.293651 + -2.30936 2.03195 0.244401 -0.672984 0.459557 0.579569 + -2.22548 2.04512 0.287581 -0.382665 0.570306 0.726855 + -2.33417 2.04015 0.1172 -0.62313 0.714879 -0.317265 + -2.35243 2.02888 0.146103 -0.850768 0.52551 -0.00573434 + -2.35795 1.99449 0.182684 -0.938336 0.177983 0.296392 + -2.30199 1.99562 0.269721 -0.649089 0.103014 0.753705 + -2.36724 1.92857 0.042453 -0.96268 0.182775 -0.1996 + -1.85923 2.80544 -0.885537 -0.0566575 0.92097 0.385491 + -1.86198 2.8063 -0.896229 -0.517549 0.834665 -0.188356 + -1.88113 2.77837 -0.880441 -0.887676 0.347976 -0.301568 + -1.86775 2.79455 -0.86387 -0.756149 0.653669 -0.0309293 + -1.90746 2.75606 -0.820608 -0.904711 0.358815 -0.229673 + -1.90132 2.76373 -0.816285 -0.760978 0.645608 -0.0640537 + -1.84789 2.75571 -0.943404 -0.840199 0.151155 -0.520786 + -1.88434 2.69789 -0.875845 -0.907581 0.0217136 -0.419316 + -1.91067 2.6755 -0.816061 -0.931754 0.0461627 -0.360143 + -1.92103 2.57619 -0.81506 -0.933255 0.123665 -0.337255 + -1.96416 2.38154 -0.780912 -0.945125 0.137365 -0.29643 + -1.90304 2.55966 -0.865218 -0.903307 0.130846 -0.408553 + -1.94617 2.36492 -0.83112 -0.907722 0.112067 -0.404328 + -1.94017 2.29025 -0.862401 -0.903977 0.083575 -0.419334 + -1.96563 2.17909 -0.822059 -0.910114 0.0404193 -0.412383 + -1.9952 2.15733 -0.756969 -0.959982 0.0516612 -0.275255 + -2.21811 2.00879 0.3129 -0.395003 0.247979 0.884579 + -2.22239 1.94999 0.310547 -0.441301 -0.206085 0.873374 + -2.13677 1.92867 0.342689 -0.371068 -0.23758 0.897699 + -2.13249 1.98755 0.345092 -0.317924 0.147624 0.936553 + -2.0289 1.97432 0.382406 -0.221898 0.126425 0.966839 + -1.95482 1.94101 0.397702 -0.213087 0.0210479 0.976806 + -1.92943 1.95493 0.405201 -0.24607 0.181724 0.952064 + -1.83084 1.95588 0.403753 0.275392 0.424646 0.862459 + -1.85901 1.84842 0.398071 0.0344284 -0.398228 0.91664 + -1.84269 1.91125 0.420061 0.107803 -0.0448686 0.993159 + -1.77658 1.91316 0.387345 0.631121 -0.0633982 0.773089 + -1.72682 1.93728 0.344364 0.776531 0.065288 0.626688 + 0.265668 1.59394 -3.44147 -0.667019 0.166743 -0.726142 + 0.284447 1.53902 -3.46994 -0.563875 0.0938647 -0.820508 + 0.26512 1.48501 -3.45027 -0.794046 -0.0651636 -0.604355 + 0.252745 1.5134 -3.43101 -0.970392 -0.0302874 -0.239628 + 0.304657 1.58899 -3.46638 -0.221908 0.303297 -0.926697 + 0.314833 1.51845 -3.48435 -0.220254 0.0978511 -0.970522 + 0.293155 1.47025 -3.46951 -0.519442 -0.0479388 -0.85316 + 0.346372 1.58946 -3.46489 0.107909 0.325204 -0.939467 + 0.356547 1.51892 -3.48286 0.107521 0.208874 -0.972014 + 0.356556 1.43658 -3.49537 -0.064939 0.0445557 -0.996894 + 0.323541 1.44968 -3.48392 -0.390399 -0.0312012 -0.920117 + 0.373982 1.66906 -3.42415 0.264824 0.45265 -0.851456 + 0.387188 1.59292 -3.45548 0.297383 0.343534 -0.890813 + 0.392478 1.51526 -3.47722 0.283267 0.214176 -0.93482 + 0.36635 1.72855 -3.39056 0.291239 0.554463 -0.779584 + 0.413459 1.67197 -3.40473 0.501149 0.410395 -0.761856 + 0.421977 1.58169 -3.44311 0.534741 0.319278 -0.782377 + 0.427267 1.50404 -3.46484 0.518054 0.172092 -0.837857 + 0.392487 1.43292 -3.48973 0.328875 0.0593423 -0.942507 + 0.342152 1.73389 -3.39425 0.0705888 0.584627 -0.808226 + 0.369377 1.76876 -3.3558 0.299537 0.925098 -0.233389 + 0.393999 1.76282 -3.34131 0.171309 0.970884 -0.167442 + 0.405828 1.73146 -3.37114 0.367337 0.605201 -0.706255 + 0.319147 1.76774 -3.36248 -0.363273 0.88824 -0.281182 + 0.345179 1.7741 -3.35949 0.0515844 0.981405 -0.184885 + 0.337551 1.76806 -3.34796 -0.201914 0.661603 0.722158 + 0.363175 1.76019 -3.33739 -0.215014 0.620562 0.754103 + 0.337265 1.70187 -3.33755 -0.347902 0.210406 0.913615 + 0.387798 1.75425 -3.32289 -0.319804 0.552437 0.769765 + 0.418806 1.75845 -3.31183 -0.164774 0.642272 0.748557 + 0.419446 1.76383 -3.32485 0.134831 0.987542 -0.0811213 + 0.431275 1.73247 -3.35469 0.486535 0.577384 -0.655677 + 0.332826 1.64955 -3.32398 -0.425334 0.293407 0.856156 + 0.397704 1.70673 -3.31366 -0.351565 0.176201 0.919432 + 0.428712 1.71092 -3.3026 -0.311634 0.164589 0.935839 + 0.452985 1.74807 -3.30283 0.393021 0.548492 0.738032 + 0.453626 1.75346 -3.31585 0.603686 0.793128 -0.0806897 + 0.298838 1.64784 -3.34424 -0.609866 0.173755 0.773222 + 0.346895 1.59923 -3.29364 -0.383659 0.251729 0.888503 + 0.377439 1.60125 -3.28521 -0.306163 0.253198 0.91769 + 0.393265 1.6544 -3.30009 -0.326688 0.302077 0.895558 + 0.437086 1.67696 -3.29285 -0.316021 0.238812 0.918205 + 0.312908 1.59752 -3.31389 -0.642238 0.142921 0.753063 + 0.352689 1.52951 -3.28365 -0.419835 0.000676443 0.9076 + 0.383233 1.53154 -3.27522 -0.225939 -0.0242077 0.973841 + 0.407894 1.59371 -3.27293 -0.236023 0.191441 0.952703 + 0.423719 1.64686 -3.28781 -0.264426 0.294095 0.91847 + 0.316661 1.5396 -3.31073 -0.707172 -0.0350756 0.706171 + 0.362191 1.44278 -3.28154 -0.298055 -0.0522237 0.953119 + 0.398662 1.44285 -3.2826 -0.069011 -0.0751676 0.99478 + 0.423191 1.45776 -3.27781 0.289214 -0.189953 0.938229 + 0.407762 1.54644 -3.27043 -0.177209 -0.0131404 0.984086 + 0.326163 1.45287 -3.30861 -0.719861 -0.0786141 0.689652 + 0.333676 1.38795 -3.30941 -0.705045 -0.130222 0.697103 + 0.367138 1.38005 -3.28699 -0.276767 -0.156631 0.948086 + 0.403609 1.38012 -3.28805 0.349415 -0.208838 0.913398 + 0.289828 1.47013 -3.35786 -0.834231 -0.104086 0.541502 + 0.29734 1.40521 -3.35865 -0.844975 -0.130331 0.518681 + 0.303945 1.36472 -3.36017 -0.845094 -0.0826799 0.528186 + 0.333694 1.3502 -3.31774 -0.718814 -0.0813498 0.690426 + 0.367156 1.34229 -3.29532 -0.275882 -0.129906 0.952373 + 0.254886 1.56206 -3.39721 -0.930224 -0.05773 0.362424 + 0.268812 1.46739 -3.39265 -0.892278 -0.125632 0.433656 + 0.275158 1.41654 -3.39595 -0.901246 -0.144495 0.408505 + 0.256625 1.47467 -3.42362 -0.991866 -0.126913 0.00975066 + 0.26297 1.42381 -3.42693 -0.988636 -0.141041 0.052024 + 0.271304 1.38229 -3.42404 -0.987434 -0.136579 0.0794979 + 0.281762 1.37604 -3.39747 -0.904888 -0.0941318 0.41511 + 0.267812 1.42086 -3.44995 -0.841517 -0.112645 -0.528355 + 0.276146 1.37933 -3.44706 -0.878157 -0.125465 -0.461627 + 0.281624 1.29572 -3.43696 -0.912371 -0.112645 -0.393562 + 0.278449 1.29525 -3.41344 -0.991527 -0.0594747 0.115489 + 0.288907 1.28901 -3.38686 -0.895488 -0.00221955 0.44508 + 0.295847 1.40611 -3.46918 -0.546644 -0.06583 -0.834773 + 0.290122 1.36875 -3.46237 -0.644234 -0.0933342 -0.759112 + 0.295601 1.28513 -3.45226 -0.645878 -0.131112 -0.752098 + 0.323849 1.39324 -3.48339 -0.4014 -0.0628578 -0.913743 + 0.318124 1.35588 -3.47658 -0.413183 -0.123718 -0.902205 + 0.320655 1.28102 -3.46597 -0.406774 -0.140159 -0.902713 + 0.305931 1.16446 -3.44053 -0.660656 -0.161543 -0.733102 + 0.356864 1.38014 -3.49484 -0.126362 -0.104413 -0.986474 + 0.355104 1.34286 -3.48744 -0.124435 -0.162046 -0.978906 + 0.357635 1.26799 -3.47682 -0.100965 -0.154143 -0.982876 + 0.364915 1.16385 -3.46031 -0.0166002 -0.170351 -0.985244 + 0.330986 1.16034 -3.45424 -0.328372 -0.167938 -0.929499 + 0.390251 1.37789 -3.49104 0.323731 -0.107509 -0.940021 + 0.388491 1.34061 -3.48364 0.322521 -0.169001 -0.931353 + 0.388798 1.26766 -3.47239 0.336895 -0.133383 -0.932046 + 0.424454 1.38712 -3.47086 0.637503 -0.106994 -0.762982 + 0.41784 1.34853 -3.46632 0.644539 -0.161419 -0.747338 + 0.418147 1.27557 -3.45507 0.674683 -0.102163 -0.731003 + 0.420471 1.16378 -3.43851 0.69635 -0.123519 -0.706994 + 0.396078 1.16351 -3.45588 0.369856 -0.156008 -0.915897 + 0.42669 1.44214 -3.46954 0.57362 0.0147284 -0.818989 + 0.450724 1.40273 -3.44467 0.809558 -0.13664 -0.570917 + 0.44411 1.36414 -3.44013 0.819897 -0.167748 -0.547384 + 0.437236 1.28207 -3.43037 0.847101 -0.10886 -0.520163 + 0.451868 1.50135 -3.44542 0.75674 0.145404 -0.63734 + 0.451292 1.43946 -3.45012 0.746997 -0.0444644 -0.663338 + 0.473075 1.42713 -3.40846 0.977177 -0.124535 -0.172094 + 0.463289 1.38508 -3.40906 0.967762 -0.176429 -0.179751 + 0.456415 1.303 -3.3993 0.982106 -0.107288 -0.154783 + 0.452003 1.56124 -3.42383 0.773725 0.237624 -0.587269 + 0.473642 1.46386 -3.41391 0.960039 0.0136139 -0.279535 + 0.473777 1.52375 -3.39233 0.955927 0.0753839 -0.283763 + 0.468309 1.42442 -3.36681 0.957288 -0.169204 0.234457 + 0.443485 1.65151 -3.38545 0.708183 0.304848 -0.636824 + 0.467549 1.61552 -3.37163 0.90485 0.194828 -0.378534 + 0.443239 1.71002 -3.36003 0.648642 0.379142 -0.659935 + 0.467302 1.67403 -3.34621 0.90668 0.181422 -0.380812 + 0.471733 1.65052 -3.32651 0.999425 0.0229898 0.024907 + 0.47438 1.60094 -3.34175 0.998348 0.0525115 0.0233387 + 0.46559 1.73101 -3.32119 0.900692 0.383895 -0.203416 + 0.470021 1.70751 -3.30149 0.930142 0.184118 0.317704 + 0.460963 1.61601 -3.28124 0.860879 -0.0208798 0.508381 + 0.463609 1.56642 -3.29648 0.915187 -0.0595862 0.398601 + 0.480608 1.50917 -3.36245 0.992185 -0.121239 -0.0295068 + 0.461359 1.71412 -3.29308 0.361682 0.314186 0.877766 + 0.452301 1.62262 -3.27282 0.280367 0.15948 0.946552 + 0.438802 1.54524 -3.26529 0.335463 -0.0716281 0.939326 + 0.454815 1.52576 -3.28556 0.818003 -0.145224 0.55658 + 0.471814 1.4685 -3.35154 0.966979 -0.154681 0.202545 + 0.438935 1.59252 -3.26779 0.0108353 0.129298 0.991547 + 0.439204 1.43827 -3.29809 0.751344 -0.257961 0.607403 + 0.435699 1.3942 -3.31337 0.788243 -0.238693 0.567185 + 0.43054 1.35643 -3.32155 0.782094 -0.155106 0.603549 + 0.458523 1.38237 -3.36741 0.946408 -0.164189 0.278126 + 0.450909 1.30012 -3.36699 0.942797 -0.0712561 0.325664 + 0.398451 1.34236 -3.29623 0.354706 -0.16248 0.920752 + 0.397157 1.26612 -3.30336 0.329467 -0.0687138 0.941663 + 0.422927 1.27418 -3.32113 0.735323 -0.0603398 0.675025 + 0.365862 1.26606 -3.30244 -0.204552 -0.0618665 0.976899 + 0.367918 1.14997 -3.30638 -0.119159 -0.00973971 0.992827 + 0.395067 1.15279 -3.31141 0.388679 -0.030788 0.920859 + 0.420837 1.16085 -3.32918 0.681105 -0.0179885 0.731965 + 0.33703 1.26882 -3.31568 -0.632024 -0.0120533 0.774855 + 0.339085 1.15273 -3.31962 -0.469592 0.00475506 0.882871 + 0.344819 1.04559 -3.31039 -0.377088 0.0431288 0.925173 + 0.367929 1.04705 -3.30553 -0.0184225 0.0426845 0.998919 + 0.395078 1.04987 -3.31056 0.340251 0.0451459 0.93925 + 0.307281 1.28333 -3.3581 -0.828768 0.0211548 0.559192 + 0.311948 1.15213 -3.33605 -0.710893 0.0245632 0.702872 + 0.317682 1.04499 -3.32682 -0.682288 0.014202 0.730945 + 0.293574 1.15781 -3.36481 -0.925671 0.00561856 0.378289 + 0.303511 1.04582 -3.34643 -0.916007 -0.047497 0.39834 + 0.329822 0.954448 -3.31498 -0.676156 -0.00282454 0.736753 + 0.348894 0.95487 -3.30343 -0.371924 0.0454988 0.927148 + 0.372004 0.956326 -3.29858 -0.0154366 0.0687572 0.997514 + 0.287422 1.16036 -3.39442 -0.997203 -0.065219 0.0364992 + 0.297359 1.04837 -3.37604 -0.992668 -0.120871 0.000150586 + 0.311327 0.95707 -3.3554 -0.987401 -0.158198 0.00336663 + 0.31565 0.955279 -3.33459 -0.915218 -0.0813393 0.394663 + 0.290597 1.16082 -3.41794 -0.921012 -0.134551 -0.365558 + 0.301268 1.051 -3.39826 -0.90197 -0.188114 -0.388668 + 0.315236 0.959704 -3.37762 -0.890033 -0.23234 -0.39225 + 0.328431 0.873081 -3.3548 -0.886415 -0.254119 -0.386901 + 0.325983 0.871432 -3.34088 -0.981615 -0.190785 -0.00569755 + 0.316602 1.05464 -3.42085 -0.638082 -0.236829 -0.732641 + 0.326013 0.962261 -3.3935 -0.63212 -0.281234 -0.722033 + 0.339208 0.875641 -3.37068 -0.62173 -0.300516 -0.723285 + 0.337573 1.05768 -3.43306 -0.308942 -0.251902 -0.917115 + 0.346984 0.965303 -3.4057 -0.295352 -0.300099 -0.907032 + 0.352342 0.877546 -3.37832 -0.298787 -0.310867 -0.902268 + 0.351308 0.793622 -3.34521 -0.585632 -0.423575 -0.6911 + 0.371502 1.06119 -3.43913 0.0309075 -0.247693 -0.968346 + 0.37083 0.967765 -3.40997 0.0277507 -0.296955 -0.954488 + 0.376188 0.880008 -3.38259 0.0347298 -0.304417 -0.951905 + 0.376782 0.796802 -3.35506 0.035141 -0.412539 -0.910262 + 0.364442 0.795528 -3.35285 -0.263673 -0.424739 -0.866068 + 0.39633 1.06279 -3.43432 0.387835 -0.228971 -0.892836 + 0.395658 0.969371 -3.40516 0.391539 -0.274302 -0.878326 + 0.391738 0.881014 -3.37958 0.38545 -0.279704 -0.879314 + 0.392332 0.79781 -3.35205 0.384028 -0.387575 -0.838039 + 0.382539 0.754393 -3.32904 0.181054 -0.791563 -0.58365 + 0.420724 1.06306 -3.41696 0.734404 -0.181368 -0.654031 + 0.412802 0.969561 -3.39296 0.723538 -0.225647 -0.652362 + 0.408883 0.881203 -3.36738 0.727975 -0.226399 -0.647144 + 0.401204 0.797906 -3.34574 0.695371 -0.345796 -0.629988 + 0.432571 1.06185 -3.3955 0.940653 -0.13046 -0.313293 + 0.424649 0.968343 -3.3715 0.941315 -0.152493 -0.301117 + 0.416303 0.880442 -3.35394 0.938142 -0.159108 -0.30753 + 0.408624 0.797144 -3.3323 0.912442 -0.283093 -0.295479 + 0.391411 0.754491 -3.32273 0.561809 -0.759451 -0.328031 + 0.439561 1.17028 -3.41382 0.930157 -0.0724923 -0.359933 + 0.436006 1.05872 -3.36246 0.995432 -0.0690331 0.0659534 + 0.427063 0.966141 -3.34828 0.994488 -0.0852665 0.0610133 + 0.418717 0.87824 -3.33072 0.993833 -0.0883535 0.0669986 + 0.409874 0.796004 -3.32028 0.971425 -0.23337 0.0432731 + 0.442996 1.16715 -3.38078 0.997977 -0.0625481 0.011358 + 0.430379 1.05593 -3.34019 0.892014 -0.0178645 0.451655 + 0.421436 0.963358 -3.32601 0.88581 -0.0133015 0.463858 + 0.415192 0.876496 -3.31677 0.889175 -0.0271198 0.456762 + 0.43749 1.16426 -3.34847 0.902508 -0.0270727 0.429822 + 0.413725 1.05252 -3.32091 0.627153 0.0315384 0.778257 + 0.409732 0.960962 -3.31246 0.627747 0.0405266 0.777361 + 0.403488 0.8741 -3.30322 0.625487 0.0261601 0.779796 + 0.406349 0.794262 -3.30633 0.87843 -0.178117 0.443436 + 0.391084 0.958309 -3.30211 0.327523 0.0676271 0.94242 + 0.391809 0.872439 -3.29673 0.334886 0.0463619 0.941117 + 0.400293 0.793021 -3.29932 0.642422 -0.139952 0.753464 + 0.392661 0.753352 -3.31071 0.647935 -0.74603 0.153683 + 0.372728 0.870455 -3.2932 -0.019793 0.0439646 0.998837 + 0.388614 0.791359 -3.29284 0.343248 -0.117086 0.931918 + 0.386604 0.752111 -3.3037 0.377316 -0.761029 0.5277 + 0.3702 0.753119 -3.32683 -0.235483 -0.821502 -0.519309 + 0.358254 0.869543 -3.29624 -0.36548 0.0180216 0.930645 + 0.378739 0.790332 -3.29101 0.00538248 -0.12188 0.99253 + 0.37673 0.751086 -3.30187 -0.0604947 -0.782837 0.61928 + 0.339181 0.869123 -3.3078 -0.681102 -0.036879 0.731259 + 0.354396 0.789204 -3.30003 -0.659567 -0.201385 0.724165 + 0.364265 0.78942 -3.29405 -0.36391 -0.150492 0.919196 + 0.36686 0.750868 -3.30785 -0.464317 -0.814603 0.347609 + 0.330306 0.869642 -3.32007 -0.910449 -0.11033 0.398635 + 0.34552 0.789724 -3.31231 -0.886416 -0.281632 0.367356 + 0.343283 0.79065 -3.32308 -0.938966 -0.343858 -0.010273 + 0.364623 0.751795 -3.31862 -0.525326 -0.836273 -0.157102 + 0.345731 0.792301 -3.33699 -0.829666 -0.399699 -0.389737 + -0.47438 1.60094 -3.34175 -0.998548 0.0478403 0.0247741 + -0.471733 1.65052 -3.32651 -0.998958 0.0267621 0.0369747 + -0.470021 1.70751 -3.30149 -0.930142 0.184117 0.317705 + -0.460963 1.61601 -3.28124 -0.840998 -0.0602027 0.537679 + -0.452301 1.62262 -3.27282 -0.285647 0.127585 0.949804 + -0.450724 1.40273 -3.44467 -0.822092 -0.154132 -0.548096 + -0.44411 1.36414 -3.44013 -0.822268 -0.162143 -0.545514 + -0.463289 1.38508 -3.40906 -0.967857 -0.173152 -0.182406 + -0.424454 1.38712 -3.47086 -0.63199 -0.11611 -0.766229 + -0.41784 1.34853 -3.46632 -0.637304 -0.152999 -0.755271 + -0.418147 1.27557 -3.45507 -0.67149 -0.107858 -0.733122 + -0.437236 1.28207 -3.43037 -0.836829 -0.094783 -0.539196 + -0.456415 1.303 -3.3993 -0.983046 -0.0984923 -0.154663 + -0.390251 1.37789 -3.49104 -0.320413 -0.102923 -0.94167 + -0.388491 1.34061 -3.48364 -0.325017 -0.165811 -0.931059 + -0.388798 1.26766 -3.47239 -0.335987 -0.132759 -0.932463 + -0.355104 1.34286 -3.48744 0.122498 -0.165151 -0.978631 + -0.357635 1.26799 -3.47682 0.0907829 -0.143128 -0.985532 + -0.396078 1.16351 -3.45588 -0.368948 -0.157235 -0.916054 + -0.420471 1.16378 -3.43851 -0.694889 -0.121614 -0.708759 + -0.439561 1.17028 -3.41382 -0.920821 -0.0992477 -0.377145 + -0.320655 1.28102 -3.46597 0.410875 -0.133275 -0.901898 + -0.330986 1.16034 -3.45424 0.334008 -0.177682 -0.925671 + -0.364915 1.16385 -3.46031 0.00839878 -0.178721 -0.983864 + -0.371502 1.06119 -3.43913 -0.0279949 -0.251818 -0.96737 + -0.39633 1.06279 -3.43432 -0.390612 -0.232627 -0.890678 + -0.305931 1.16446 -3.44053 0.663043 -0.157854 -0.731749 + -0.316602 1.05464 -3.42085 0.638639 -0.238218 -0.731705 + -0.337573 1.05768 -3.43306 0.307337 -0.253666 -0.917168 + -0.301268 1.051 -3.39826 0.900542 -0.191215 -0.390462 + -0.315236 0.959704 -3.37762 0.890032 -0.232343 -0.392249 + -0.326013 0.962261 -3.3935 0.632114 -0.281237 -0.722037 + -0.346984 0.965303 -3.4057 0.295358 -0.30009 -0.907034 + -0.297359 1.04837 -3.37604 0.992453 -0.122614 0.00156549 + -0.311327 0.95707 -3.3554 0.987401 -0.158204 0.00336517 + -0.325983 0.871432 -3.34088 0.981615 -0.190784 -0.00569855 + -0.328431 0.873081 -3.3548 0.886413 -0.254123 -0.386902 + -0.339208 0.875641 -3.37068 0.621727 -0.300518 -0.723287 + -0.31565 0.955279 -3.33459 0.91522 -0.0813439 0.394659 + -0.330306 0.869642 -3.32007 0.910452 -0.110335 0.398628 + -0.34552 0.789724 -3.31231 0.886415 -0.281638 0.367354 + -0.343283 0.79065 -3.32308 0.938965 -0.34386 -0.0102755 + -0.345731 0.792301 -3.33699 0.829667 -0.399694 -0.38974 + -0.329822 0.954448 -3.31498 0.676153 -0.0028278 0.736756 + -0.339181 0.869123 -3.3078 0.681096 -0.0368787 0.731265 + -0.354396 0.789204 -3.30003 0.659564 -0.201387 0.724167 + -0.36686 0.750868 -3.30785 0.464297 -0.814623 0.347587 + -0.364623 0.751795 -3.31862 0.525295 -0.836294 -0.15709 + -0.358254 0.869543 -3.29624 0.365474 0.0180213 0.930647 + -0.364265 0.78942 -3.29405 0.363908 -0.150485 0.919198 + -0.37673 0.751086 -3.30187 0.0604816 -0.782851 0.619263 + -0.3702 0.753119 -3.32683 0.23548 -0.821508 -0.519301 + -0.351308 0.793622 -3.34521 0.585636 -0.423567 -0.691101 + -0.372728 0.870455 -3.2932 0.0198033 0.0439575 0.998837 + -0.378739 0.790332 -3.29101 -0.00537795 -0.121875 0.992531 + -0.386604 0.752111 -3.3037 -0.377289 -0.761048 0.527693 + -0.391411 0.754491 -3.32273 -0.561795 -0.759461 -0.328034 + -0.372004 0.956326 -3.29858 0.0154422 0.0687606 0.997514 + -0.391809 0.872439 -3.29673 -0.334895 0.0463577 0.941115 + -0.388614 0.791359 -3.29284 -0.343249 -0.117084 0.931918 + -0.400293 0.793021 -3.29932 -0.642421 -0.139949 0.753465 + -0.392661 0.753352 -3.31071 -0.647973 -0.745994 0.153699 + -0.391084 0.958309 -3.30211 -0.327529 0.0676302 0.942418 + -0.403488 0.8741 -3.30322 -0.625483 0.0261647 0.779799 + -0.406349 0.794262 -3.30633 -0.87843 -0.178117 0.443436 + -0.409874 0.796004 -3.32028 -0.971425 -0.23337 0.0432729 + -0.413725 1.05252 -3.32091 -0.63141 0.0243428 0.775067 + -0.409732 0.960962 -3.31246 -0.627746 0.0405256 0.777363 + -0.415192 0.876496 -3.31677 -0.889174 -0.027121 0.456764 + -0.418717 0.87824 -3.33072 -0.993833 -0.0883571 0.066996 + -0.408624 0.797144 -3.3323 -0.912442 -0.283092 -0.29548 + -0.420837 1.16085 -3.32918 -0.675561 -0.0286615 0.736747 + -0.430379 1.05593 -3.34019 -0.890612 -0.0217687 0.454244 + -0.421436 0.963358 -3.32601 -0.885809 -0.0132984 0.46386 + -0.427063 0.966141 -3.34828 -0.994488 -0.0852656 0.0610127 + -0.416303 0.880442 -3.35394 -0.938142 -0.159109 -0.30753 + -0.43749 1.16426 -3.34847 -0.906926 -0.0422804 0.419162 + -0.436006 1.05872 -3.36246 -0.995242 -0.0756892 0.0613517 + -0.424649 0.968343 -3.3715 -0.941315 -0.152494 -0.301117 + -0.408883 0.881203 -3.36738 -0.727975 -0.226398 -0.647145 + -0.401204 0.797906 -3.34574 -0.695371 -0.345795 -0.629987 + -0.442996 1.16715 -3.38078 -0.996657 -0.0780272 0.0242265 + -0.432571 1.06185 -3.3955 -0.9415 -0.136262 -0.308238 + -0.420724 1.06306 -3.41696 -0.728733 -0.19097 -0.657631 + -0.412802 0.969561 -3.39296 -0.723536 -0.22565 -0.652363 + -0.395658 0.969371 -3.40516 -0.391539 -0.274303 -0.878325 + -0.391738 0.881014 -3.37958 -0.385449 -0.279706 -0.879314 + -0.392332 0.79781 -3.35205 -0.384025 -0.387571 -0.838041 + -0.382539 0.754393 -3.32904 -0.181055 -0.791577 -0.583631 + -0.37083 0.967765 -3.40997 -0.0277503 -0.296946 -0.954491 + -0.376188 0.880008 -3.38259 -0.0347356 -0.304427 -0.951902 + -0.376782 0.796802 -3.35506 -0.0351403 -0.412532 -0.910265 + -0.364442 0.795528 -3.35285 0.263674 -0.424733 -0.86607 + -0.352342 0.877546 -3.37832 0.298794 -0.310871 -0.902265 + 1.05998 1.28532 -1.98015 -0.500479 0.759671 0.415235 + 1.06342 1.2998 -2.01482 -0.517699 0.831014 0.203478 + 1.03233 1.27353 -2.02089 -0.633506 0.767002 0.101876 + 1.0713 1.23734 -1.91791 -0.0643823 0.603396 0.794839 + 1.08209 1.28719 -1.9671 -0.214468 0.799704 0.560782 + 1.09271 1.31195 -2.01471 -0.13582 0.96152 0.238813 + 1.06884 1.30877 -2.05737 -0.537622 0.838544 0.088352 + 1.0919 1.23816 -1.92563 0.420318 0.490951 0.763086 + 1.09677 1.28702 -1.96546 0.298827 0.738398 0.604542 + 1.10739 1.31177 -2.01308 0.352868 0.901107 0.251974 + 1.12879 1.30312 -2.07197 0.626266 0.763814 0.156139 + 1.09813 1.32091 -2.05726 0.111312 0.977553 0.178884 + 1.12 1.21675 -1.93469 0.599104 0.437506 0.670569 + 1.12487 1.26561 -1.97452 0.690203 0.521998 0.501135 + 1.13795 1.28203 -2.02425 0.75444 0.588814 0.290031 + 1.1713 1.20323 -1.99566 0.833927 0.388517 0.391945 + 1.18439 1.21965 -2.04539 0.870532 0.398339 0.288964 + 1.18982 1.23474 -2.09363 0.871282 0.439525 0.218367 + 1.15935 1.27338 -2.08314 0.762269 0.6116 0.211874 + 1.19506 1.154 -2.01062 0.920235 0.20978 0.330394 + 1.2081 1.16085 -2.06177 0.955203 0.204545 0.21389 + 1.21353 1.17594 -2.11001 0.970073 0.197506 0.141242 + 1.21609 1.18911 -2.15515 0.976443 0.180113 0.118824 + 1.19843 1.24064 -2.13741 0.885469 0.425197 0.187491 + 1.20655 1.08999 -2.02667 0.937487 -0.0336583 0.346388 + 1.21959 1.09684 -2.07782 0.988019 0.0576245 0.14317 + 1.22 1.10578 -2.12788 0.996792 0.0579571 0.0552058 + 1.22256 1.11894 -2.17302 0.998966 0.0334086 0.0308387 + 1.18376 1.04641 -1.99763 0.722806 -0.372566 0.582019 + 1.20943 1.0394 -2.05198 0.908588 -0.233349 0.346433 + 1.22159 1.03917 -2.09959 0.983991 -0.117904 0.133641 + 1.222 1.04811 -2.14965 0.999124 -0.0418097 0.00180435 + 1.18223 0.997715 -2.03899 0.729089 -0.380592 0.56884 + 1.20455 0.99636 -2.08217 0.900865 -0.276688 0.334495 + 1.21671 0.996135 -2.12977 0.977165 -0.187159 0.100602 + 1.14002 0.999492 -2.00372 0.425208 -0.488246 0.762112 + 1.14063 0.93424 -2.03183 0.470183 -0.250193 0.846364 + 1.17278 0.933552 -2.05711 0.754682 -0.220611 0.617889 + 1.19509 0.932198 -2.10029 0.923103 -0.217563 0.317091 + 1.08136 0.999866 -1.98372 0.0634823 -0.564175 0.823211 + 1.08197 0.934614 -2.01182 0.0409518 -0.313055 0.948852 + 1.09487 0.851658 -2.03071 0.0281718 -0.123912 0.991893 + 1.12967 0.851577 -2.03907 0.426521 -0.090523 0.899936 + 1.16182 0.850889 -2.06436 0.784998 -0.118003 0.608156 + 1.03277 1.04274 -1.95099 -0.33406 -0.624074 0.706354 + 1.03478 0.996049 -1.99593 -0.512928 -0.514025 0.687519 + 1.04575 0.934113 -2.02012 -0.533249 -0.314454 0.785344 + 0.99361 1.0303 -2.00338 -0.592228 -0.645924 0.481715 + 1.0085 0.994477 -2.03599 -0.718557 -0.48874 0.494781 + 1.01947 0.932542 -2.06017 -0.809346 -0.243989 0.534254 + 1.03355 0.850267 -2.06046 -0.757823 -0.144672 0.636219 + 1.05866 0.851156 -2.039 -0.441995 -0.170734 0.880619 + 0.965412 1.07295 -1.98369 -0.613215 -0.625939 0.481837 + 0.933796 1.08842 -2.01277 -0.716398 -0.644078 0.268213 + 0.941223 1.0742 -2.03529 -0.766172 -0.600485 0.228906 + 0.963119 1.03383 -2.04639 -0.737233 -0.550657 0.391489 + 0.881459 1.1607 -1.98568 -0.818843 -0.322511 0.47485 + 0.878107 1.14727 -2.04762 -0.86756 -0.488698 0.0922717 + 0.885534 1.13305 -2.07014 -0.824237 -0.565784 0.0228514 + 0.911168 1.10379 -2.07578 -0.810394 -0.580309 0.0806388 + 0.933064 1.06342 -2.08687 -0.864379 -0.449233 0.225916 + 0.866728 1.19559 -2.00045 -0.965484 -0.0195621 0.259728 + 0.863375 1.18217 -2.06239 -0.991553 -0.127445 0.0240845 + 0.860076 1.20167 -2.10609 -0.973416 0.0488518 0.223772 + 0.855496 1.19582 -2.12385 -0.981997 -0.165933 0.090262 + 0.869982 1.15731 -2.1148 -0.873213 -0.484643 -0.051195 + 0.874871 1.22801 -2.07185 -0.94291 0.313074 0.113599 + 0.871571 1.24751 -2.11555 -0.81898 0.455663 0.348774 + 0.85353 1.2736 -2.17525 -0.857345 0.418926 0.299099 + 0.84895 1.26775 -2.19301 -0.98093 0.134181 -0.140613 + 0.88557 1.27604 -2.1347 -0.380004 0.772985 0.508026 + 0.867528 1.30213 -2.1944 -0.653736 0.737199 0.170783 + 0.877653 1.31105 -2.22518 -0.54257 0.787879 -0.291314 + 0.862907 1.29195 -2.22695 -0.826247 0.292857 -0.481197 + 0.853252 1.22412 -2.18659 -0.924319 -0.253923 -0.284881 + 0.893679 1.25709 -2.07569 0.0220694 0.998675 0.0464986 + 0.898511 1.25175 -2.09719 0.449089 0.871824 0.195555 + 0.91314 1.26874 -2.12118 0.021591 0.790447 0.61215 + 0.91607 1.31578 -2.18266 -0.17146 0.904902 0.389556 + 0.926195 1.32469 -2.21344 -0.121501 0.992012 0.0339035 + 0.917472 1.25296 -2.06952 0.14029 0.958992 -0.246279 + 0.922304 1.24762 -2.09102 0.146563 0.989199 0.00198903 + 0.926001 1.24885 -2.0985 0.0781883 0.90069 0.42737 + 0.940629 1.26583 -2.12249 0.121554 0.768717 0.627933 + 0.94364 1.30847 -2.16914 0.135608 0.817423 0.559849 + 0.932343 1.24639 -2.08904 0.0239433 0.997775 -0.0622208 + 0.93604 1.24762 -2.09652 0.012227 0.936827 0.349578 + 0.938666 1.24684 -2.08927 -0.0369945 0.996177 -0.0791387 + 0.950931 1.24801 -2.0982 0.0329205 0.94512 0.325061 + 0.952937 1.25444 -2.11069 0.144166 0.841326 0.520947 + 0.975395 1.27283 -2.13765 0.00538565 0.796846 0.604158 + 0.963088 1.28421 -2.14945 0.158221 0.74151 0.65202 + 0.953558 1.24724 -2.09095 -0.0209443 0.998688 -0.0467285 + 0.978095 1.2481 -2.099 -0.0331501 0.962586 0.268941 + 0.980101 1.25453 -2.11149 -0.0531189 0.850111 0.523917 + 0.979279 1.24761 -2.09173 -0.0563735 0.996304 -0.0648139 + 0.994803 1.24965 -2.09998 -0.224654 0.906298 0.357987 + 0.991501 1.26042 -2.1175 -0.270358 0.780272 0.563988 + 0.986795 1.27872 -2.14366 -0.254009 0.772631 0.581825 + 0.98358 1.289 -2.15871 -0.126906 0.760235 0.637133 + 0.995988 1.24916 -2.09271 -0.0851331 0.996341 -0.0075334 + 1.00349 1.2501 -2.09354 -0.434017 0.87176 0.227296 + 1.00125 1.25445 -2.10147 -0.511975 0.684279 0.519272 + 0.997946 1.26522 -2.11898 -0.516598 0.662751 0.542114 + 0.992867 1.28516 -2.14769 -0.517531 0.654433 0.551252 + 1.00656 1.2514 -2.06805 -0.397021 0.917475 -0.0247556 + 1.02759 1.27069 -2.09037 -0.659037 0.69473 0.288132 + 1.02535 1.27504 -2.0983 -0.603356 0.608743 0.515163 + 1.01366 1.28604 -2.12274 -0.622116 0.563451 0.543594 + 1.02814 1.26851 -2.06481 -0.663078 0.74807 0.0268115 + 1.06829 1.31095 -2.08292 -0.552074 0.827128 0.105229 + 1.0671 1.31137 -2.09074 -0.55557 0.745859 0.367472 + 1.02682 1.28381 -2.10704 -0.585811 0.600035 0.544778 + 1.09933 1.3241 -2.08277 0.103469 0.990292 0.092818 + 1.09813 1.32451 -2.09058 0.0774698 0.989796 0.119592 + 1.06857 1.32014 -2.09948 -0.357598 0.793443 0.492516 + 1.0547 1.32472 -2.11767 -0.399745 0.758346 0.514892 + 1.04153 1.32695 -2.13338 -0.438641 0.683399 0.583575 + 1.12999 1.30631 -2.09748 0.402923 0.905217 0.135041 + 1.10025 1.32588 -2.1048 0.21047 0.959276 0.188393 + 1.08638 1.33047 -2.12299 0.081562 0.927425 0.365007 + 1.07524 1.34267 -2.14156 0.0262889 0.851369 0.523909 + 1.13211 1.30768 -2.11169 0.598068 0.748019 0.287719 + 1.13483 1.32016 -2.13533 0.542154 0.780571 0.31109 + 1.12368 1.33237 -2.1539 0.493946 0.820482 0.287796 + 1.10077 1.35398 -2.1694 0.27772 0.95455 0.108191 + 1.06475 1.35282 -2.1585 -0.171872 0.961852 0.21284 + 1.16797 1.27928 -2.12693 0.761453 0.586076 0.276956 + 1.17068 1.29177 -2.15056 0.77724 0.586511 0.227824 + 1.1614 1.30587 -2.17791 0.729902 0.683551 -0.000959145 + 1.20333 1.24534 -2.18178 0.904887 0.423654 0.0411874 + 1.19404 1.25944 -2.20913 0.843087 0.504866 -0.185241 + 1.17222 1.27705 -2.23502 0.701489 0.584242 -0.408135 + 1.13848 1.32748 -2.19342 0.605265 0.780558 -0.156151 + 1.22099 1.1938 -2.19952 0.984256 0.171117 -0.0442632 + 1.21118 1.20584 -2.23352 0.897353 0.248278 -0.364851 + 1.18935 1.22346 -2.2594 0.716623 0.315702 -0.62192 + 1.16151 1.23532 -2.27643 0.445482 0.349786 -0.824133 + 1.15208 1.28048 -2.25538 0.457027 0.584309 -0.670604 + 1.22206 1.14287 -2.21088 0.992774 0.0491199 -0.10949 + 1.21225 1.15491 -2.24488 0.892032 0.106052 -0.439353 + 1.19043 1.15683 -2.27277 0.686954 0.15626 -0.709702 + 1.16259 1.1687 -2.28979 0.479238 0.194392 -0.855887 + 1.22178 1.05825 -2.19106 0.998525 -0.0463214 -0.0283155 + 1.22129 1.08217 -2.22892 0.985702 0.00100377 -0.168497 + 1.21091 1.09261 -2.25966 0.883572 0.077633 -0.461816 + 1.18908 1.09453 -2.28755 0.709144 0.147439 -0.689475 + 1.21672 1.00479 -2.21402 0.981893 -0.179261 -0.0612473 + 1.21572 1.01392 -2.24892 0.972811 -0.11192 -0.202762 + 1.20533 1.02435 -2.27965 0.874005 -0.00766102 -0.485856 + 1.21694 0.994661 -2.17261 0.987063 -0.159318 -0.0180065 + 1.20229 0.929581 -2.1775 0.897026 -0.340019 -0.282367 + 1.18536 0.92208 -2.19428 0.684215 -0.566058 -0.459814 + 1.18263 0.925247 -2.21716 0.800222 -0.577455 0.161837 + 1.19733 0.936526 -2.23764 0.914921 -0.381313 0.132361 + 1.20206 0.931056 -2.13466 0.96795 -0.229049 0.102999 + 1.18161 0.848802 -2.12835 0.9718 -0.232379 -0.0400575 + 1.17411 0.848005 -2.15023 0.831795 -0.331734 -0.445049 + 1.15718 0.840503 -2.16701 0.636737 -0.24471 -0.731221 + 1.17464 0.849946 -2.09397 0.941004 -0.149959 0.303355 + 1.16603 0.768546 -2.09129 0.964699 -0.0548629 0.257579 + 1.16863 0.769838 -2.11595 0.988116 -0.109205 -0.108175 + 1.16113 0.769041 -2.13784 0.881889 -0.134174 -0.451961 + 1.15321 0.769489 -2.06168 0.791262 -0.0205788 0.611131 + 1.15215 0.686861 -2.05711 0.785551 -0.0148813 0.618618 + 1.16406 0.690491 -2.08423 0.964006 -0.00472616 0.265839 + 1.16666 0.691784 -2.10889 0.99467 -0.00626989 -0.102915 + 1.13029 0.768856 -2.04348 0.441823 -0.000572975 0.897102 + 1.12924 0.686226 -2.03891 0.428056 -0.0320119 0.903185 + 1.13621 0.587613 -2.05397 0.432606 -0.165015 0.886353 + 1.15403 0.589054 -2.06807 0.78537 -0.0896097 0.612506 + 1.16595 0.592685 -2.09518 0.965714 -0.0177749 0.258999 + 1.0955 0.768938 -2.03512 0.0102689 -0.00240859 0.999944 + 1.09711 0.686301 -2.0312 0.0065365 -0.0522498 0.998613 + 1.10408 0.587688 -2.04625 -0.0021076 -0.225797 0.974172 + 1.06671 0.769714 -2.04136 -0.441448 -0.018945 0.897087 + 1.06833 0.687077 -2.03744 -0.448153 -0.0774159 0.890598 + 1.08172 0.589274 -2.05105 -0.44449 -0.257877 0.857862 + 1.12386 0.47308 -2.08207 0.00682784 -0.426215 0.904596 + 1.0416 0.768826 -2.06282 -0.764613 -0.039805 0.64326 + 1.04521 0.690924 -2.05702 -0.760811 -0.0866785 0.643159 + 1.05861 0.59312 -2.07063 -0.757637 -0.257227 0.59985 + 1.08718 0.477048 -2.099 -0.716519 -0.446145 0.536242 + 1.1015 0.474666 -2.08687 -0.434988 -0.45779 0.775379 + 1.02846 0.770206 -2.08467 -0.944289 -0.0839063 0.318242 + 1.03207 0.692305 -2.07887 -0.945825 -0.103693 0.307675 + 1.04842 0.596061 -2.08753 -0.931336 -0.235435 0.277819 + 1.077 0.479988 -2.11589 -0.885545 -0.409333 0.219671 + 1.11186 0.421268 -2.1308 -0.520964 -0.842644 0.136188 + 1.01351 0.849065 -2.09167 -0.934 -0.155291 0.32176 + 1.02616 0.76936 -2.10888 -0.992172 -0.121291 -0.0297297 + 1.03002 0.695723 -2.10101 -0.99381 -0.106443 -0.0317969 + 1.04637 0.599478 -2.10967 -0.978798 -0.197055 -0.0558987 + 1.07573 0.482105 -2.12961 -0.929249 -0.360717 -0.0798702 + 0.999435 0.931338 -2.09138 -0.808717 -0.275684 0.519591 + 1.01121 0.848216 -2.11588 -0.963468 -0.266946 0.0216602 + 1.02911 0.770366 -2.12836 -0.940629 -0.146486 -0.306199 + 1.03297 0.696732 -2.12049 -0.945599 -0.11165 -0.305575 + 1.04869 0.601661 -2.12474 -0.934774 -0.158737 -0.317805 + 0.978011 0.997999 -2.079 -0.709799 -0.511257 0.484564 + 0.972961 0.929833 -2.1305 -0.920958 -0.348939 0.173427 + 0.979065 0.922293 -2.15239 -0.848147 -0.495076 -0.188536 + 1.01732 0.840676 -2.13777 -0.901475 -0.317098 -0.294604 + 0.951538 0.996494 -2.11812 -0.860916 -0.408472 0.303272 + 0.978927 0.926189 -2.17924 -0.747799 -0.64023 0.175791 + 1.02388 0.894998 -2.16015 -0.401774 -0.577137 -0.710979 + 1.02568 0.840159 -2.15425 -0.599736 -0.22659 -0.767446 + 1.03748 0.769849 -2.14484 -0.695031 -0.167143 -0.699282 + 0.917717 1.07644 -2.13672 -0.924901 -0.373323 0.0720254 + 0.936191 1.00951 -2.16796 -0.938098 -0.339544 0.0684168 + 0.963497 0.938828 -2.19881 -0.879676 -0.463391 0.106956 + 0.895616 1.12806 -2.12044 -0.850682 -0.522942 -0.0535753 + 0.914917 1.08625 -2.20238 -0.939312 -0.26993 -0.211734 + 0.934132 1.02369 -2.22206 -0.948817 -0.241037 -0.204075 + 0.961437 0.953005 -2.25291 -0.931587 -0.308391 -0.192461 + 0.867738 1.18561 -2.17754 -0.865158 -0.410179 -0.288539 + 0.892817 1.13787 -2.1861 -0.898418 -0.36582 -0.242943 + 0.912048 1.16244 -2.2362 -0.741425 -0.199704 -0.640631 + 0.931123 1.09699 -2.24512 -0.793727 -0.121234 -0.59607 + 0.886969 1.21019 -2.22764 -0.697033 -0.253338 -0.670794 + 0.931082 1.25449 -2.2667 -0.496383 -0.0603342 -0.866004 + 0.949901 1.17835 -2.26912 -0.549463 -0.0739628 -0.832238 + 0.968976 1.1129 -2.27805 -0.502827 -0.04349 -0.863292 + 0.867208 1.24832 -2.22053 -0.739263 -0.192247 -0.645393 + 0.911322 1.29262 -2.25959 -0.458741 0.154976 -0.874951 + 0.95385 1.31284 -2.26747 -0.175347 0.690413 -0.701843 + 0.96008 1.28314 -2.28307 -0.261777 0.222177 -0.939207 + 0.978899 1.20701 -2.2855 -0.239876 0.0117626 -0.970732 + 0.926069 1.31171 -2.25781 -0.30531 0.70978 -0.634821 + 0.953976 1.32582 -2.2231 0.0342874 0.996947 -0.0701552 + 0.988777 1.31557 -2.2638 0.260973 0.793595 -0.549637 + 0.995008 1.28587 -2.2794 0.155317 0.385048 -0.909733 + 0.960743 1.32387 -2.20375 0.234705 0.934046 0.269205 + 0.995544 1.31361 -2.24446 0.0722315 0.958511 0.275753 + 1.01332 1.3184 -2.2382 -0.41811 0.862893 -0.283899 + 1.03281 1.27082 -2.2821 0.0358828 0.357108 -0.933374 + 0.980918 1.30501 -2.19008 0.402933 0.839999 0.363383 + 1.00405 1.30768 -2.23924 -0.281354 0.823435 0.492743 + 0.963815 1.28962 -2.15547 0.192433 0.761993 0.618333 + 0.984307 1.29441 -2.16473 -0.11699 0.889984 0.440729 + 0.989425 1.29907 -2.18486 0.103819 0.970214 0.218876 + 0.994769 1.30012 -2.18287 -0.530824 0.846309 0.0445665 + 1.00404 1.31084 -2.18183 -0.762132 0.645132 0.0543976 + 0.989652 1.29545 -2.16274 -0.485407 0.791507 0.371345 + 1.00858 1.30598 -2.15145 -0.702517 0.597802 0.386137 + 1.03105 1.3371 -2.15031 -0.520343 0.761098 0.387264 + 1.02651 1.34196 -2.1807 -0.463705 0.885612 0.0258765 + 1.05061 1.34378 -2.1937 -0.156115 0.946896 -0.281098 + 1.03742 1.32022 -2.25119 -0.0504328 0.766035 -0.640818 + 1.08663 1.34494 -2.2046 0.0211869 0.883564 -0.46783 + 1.07665 1.30058 -2.25546 0.135038 0.654696 -0.743732 + 1.07203 1.25118 -2.28636 0.0414754 0.317842 -0.947236 + 1.0167 1.19196 -2.28819 -0.0603842 0.114855 -0.991545 + 1.11835 1.3309 -2.21378 0.341041 0.797469 -0.497729 + 1.10837 1.28654 -2.26464 0.105259 0.564383 -0.818775 + 1.1178 1.24139 -2.28569 0.144738 0.343141 -0.928065 + 1.09284 1.20037 -2.29555 -0.0275252 0.162899 -0.986259 + 1.13861 1.19058 -2.29487 0.21427 0.212422 -0.953396 + 1.14382 1.12486 -2.30849 0.180341 0.202571 -0.962519 + 1.09754 1.1286 -2.30501 -0.0863768 0.163649 -0.98273 + 1.0214 1.12019 -2.29765 -0.234945 0.0613805 -0.970069 + 1.1678 1.10298 -2.30341 0.513874 0.193492 -0.83576 + 1.16584 1.03957 -2.31782 0.508209 0.128806 -0.851547 + 1.14473 1.04282 -2.32601 0.171387 0.175421 -0.969461 + 1.09845 1.04656 -2.32253 -0.16029 0.156543 -0.974578 + 1.18713 1.03112 -2.30196 0.706941 0.0671098 -0.704082 + 1.17165 0.958611 -2.31734 0.715925 -0.0592651 -0.695658 + 1.15719 0.962818 -2.33057 0.533968 0.0190873 -0.845289 + 1.13607 0.966066 -2.33875 0.147679 0.105123 -0.983433 + 1.18985 0.951844 -2.29503 0.857141 -0.159269 -0.48984 + 1.1573 0.873995 -2.31263 0.89054 -0.175441 -0.419713 + 1.14982 0.878091 -2.32685 0.775457 -0.0886108 -0.625152 + 1.13536 0.882297 -2.34008 0.628111 -0.00830906 -0.778079 + 1.19632 0.945651 -2.27253 0.939227 -0.262051 -0.22177 + 1.16377 0.867801 -2.29013 0.945305 -0.270189 -0.182747 + 1.14423 0.789423 -2.31181 0.985597 -0.125514 -0.113334 + 1.1409 0.791504 -2.32781 0.936473 -0.0553848 -0.34634 + 1.13343 0.795599 -2.34203 0.828379 0.00282698 -0.560161 + 1.16295 0.863015 -2.27155 0.914036 -0.377747 0.147802 + 1.14342 0.784636 -2.29323 0.965048 -0.194038 0.176158 + 1.13797 0.70623 -2.31128 0.981378 -0.0362149 0.188641 + 1.13845 0.705678 -2.32895 0.995329 -0.00336656 -0.0964816 + 1.13513 0.707759 -2.34495 0.936861 0.0132466 -0.349451 + 1.14825 0.851736 -2.25108 0.793352 -0.418347 0.442242 + 1.13618 0.782888 -2.27523 0.851006 -0.250532 0.461543 + 1.13074 0.704483 -2.29328 0.871564 -0.0617221 0.486381 + 1.1363 0.615698 -2.29634 0.876214 0.10804 0.469655 + 1.14159 0.612412 -2.30958 0.978392 0.100237 0.180833 + 1.13375 0.847744 -2.23277 0.535838 -0.43715 0.722341 + 1.12168 0.778896 -2.25693 0.567932 -0.297964 0.767248 + 1.11761 0.705719 -2.27586 0.585761 -0.117022 0.801991 + 1.12317 0.616935 -2.27891 0.585473 0.0943926 0.805178 + 1.13814 0.898036 -2.20703 0.438425 -0.799892 0.409824 + 1.10266 0.89077 -2.19775 0.171176 -0.891553 0.419323 + 1.09827 0.840477 -2.22349 0.139698 -0.415647 0.898733 + 1.09638 0.779218 -2.24812 0.147142 -0.315785 0.937352 + 1.14087 0.89487 -2.18415 0.181535 -0.651745 -0.736392 + 1.10379 0.887968 -2.17995 -0.056183 -0.669864 -0.740355 + 1.05801 0.890812 -2.18881 -0.0683178 -0.921668 0.381917 + 1.06003 0.842575 -2.22376 -0.0370483 -0.466899 0.883534 + 1.05814 0.781314 -2.24839 -0.118949 -0.308103 0.943888 + 1.14119 0.839975 -2.17954 0.290378 -0.135224 -0.947309 + 1.10412 0.833077 -2.17534 -0.147752 -0.117206 -0.982055 + 1.05913 0.888012 -2.17101 -0.257002 -0.666987 -0.699342 + 1.02374 0.898894 -2.187 -0.312877 -0.853588 0.416529 + 1.14987 0.770103 -2.1543 0.720032 -0.147736 -0.678033 + 1.13389 0.769575 -2.16683 0.322624 -0.153736 -0.933959 + 1.10545 0.770067 -2.16789 -0.096934 -0.1288 -0.986922 + 1.06094 0.833172 -2.1651 -0.271326 -0.115415 -0.955543 + 1.14854 0.696128 -2.14536 0.728905 -0.0266264 -0.684096 + 1.13383 0.698417 -2.15678 0.339681 -0.0545352 -0.938958 + 1.10539 0.69891 -2.15785 -0.103199 -0.0689841 -0.992266 + 1.06227 0.770162 -2.15765 -0.332669 -0.141325 -0.932394 + 1.1598 0.695065 -2.1289 0.895542 -0.0176321 -0.444628 + 1.16114 0.598766 -2.13427 0.896834 0.0679929 -0.437111 + 1.1524 0.601022 -2.147 0.735166 0.0813882 -0.672984 + 1.13769 0.60331 -2.15842 0.343561 0.0724325 -0.936333 + 1.16799 0.595484 -2.11426 0.994751 0.0322279 -0.0971157 + 1.17101 0.479522 -2.13682 0.984385 -0.113959 -0.134164 + 1.16676 0.481555 -2.14921 0.888762 -0.0654523 -0.453672 + 1.15803 0.483812 -2.16194 0.720971 -0.0421243 -0.691684 + 1.16896 0.476723 -2.11774 0.954935 -0.182944 0.23373 + 1.15345 0.42109 -2.14024 0.643304 -0.760109 -0.0916182 + 1.1492 0.423124 -2.15263 0.513027 -0.709054 -0.483783 + 1.14009 0.424542 -2.15971 0.129355 -0.650965 -0.748006 + 1.14892 0.485228 -2.16902 0.351338 -0.0311114 -0.935731 + 1.16158 0.474473 -2.10095 0.783568 -0.266171 0.561404 + 1.14607 0.418842 -2.12345 0.415155 -0.834931 0.361299 + 1.12617 0.418888 -2.11867 -0.143097 -0.873927 0.464516 + 1.14375 0.473033 -2.08685 0.413466 -0.365003 0.834158 + 1.02577 0.850658 -2.22195 -0.383354 -0.55021 0.741828 + 1.03522 0.783103 -2.25302 -0.470771 -0.306281 0.827385 + 1.05701 0.707977 -2.2673 -0.116851 -0.16208 0.979835 + 1.01641 0.853552 -2.23117 -0.754539 -0.485275 0.44179 + 1.02586 0.785997 -2.26224 -0.820055 -0.239906 0.519572 + 1.03409 0.709764 -2.27193 -0.494739 -0.174611 0.851319 + 1.00098 0.866192 -2.25074 -0.871518 -0.440288 0.215877 + 1.01861 0.788239 -2.27782 -0.938213 -0.176467 0.297683 + 1.02532 0.709987 -2.2807 -0.823235 -0.152377 0.546869 + 1.04215 0.62187 -2.28487 -0.789832 -0.192263 0.582409 + 1.05092 0.621647 -2.2761 -0.479042 -0.111171 0.870724 + 0.995492 0.872387 -2.27345 -0.951575 -0.292723 -0.0939096 + 1.01313 0.794434 -2.30052 -0.986528 -0.13705 0.0893289 + 1.01268 0.711888 -2.31788 -0.987929 -0.106946 0.11207 + 1.01807 0.712229 -2.29628 -0.940514 -0.124627 0.316073 + 1.03636 0.619611 -2.29634 -0.907596 -0.225532 0.354126 + 0.968884 0.959752 -2.28037 -0.780075 -0.105775 -0.61668 + 1.00294 0.879134 -2.30091 -0.925343 -0.168031 -0.339861 + 1.013 0.796612 -2.3188 -0.980697 -0.0319422 -0.192904 + 0.950337 1.03443 -2.26481 -0.743805 -0.0289728 -0.667769 + 1.00071 0.962823 -2.29867 -0.456441 0.10721 -0.883271 + 1.00844 0.882676 -2.31566 -0.698545 0.0236632 -0.715174 + 1.0185 0.800157 -2.33354 -0.750151 0.0916483 -0.654885 + 0.982165 1.0375 -2.28311 -0.452766 0.0518603 -0.89012 + 1.03711 0.965133 -2.31498 -0.349584 0.138326 -0.926637 + 1.04484 0.884987 -2.33197 -0.337747 0.168016 -0.92612 + 1.0424 0.800438 -2.34678 -0.371493 0.168365 -0.913042 + 1.01742 0.713383 -2.35019 -0.762061 -0.0197523 -0.647204 + 1.03459 1.04479 -2.30271 -0.326657 0.0684687 -0.94266 + 1.10097 0.9669 -2.3348 -0.197787 0.142765 -0.969793 + 1.08924 0.885849 -2.34433 -0.192659 0.160198 -0.968101 + 1.0868 0.801298 -2.35914 -0.167292 0.177914 -0.969722 + 1.12434 0.885013 -2.34828 0.264996 0.092495 -0.959803 + 1.11343 0.800102 -2.36117 0.279094 0.135057 -0.950719 + 1.08213 0.711068 -2.3752 -0.179845 0.0387804 -0.98293 + 1.04131 0.713664 -2.36342 -0.382405 0.0322836 -0.923431 + 1.12445 0.797383 -2.35297 0.695644 0.0563259 -0.716175 + 1.11905 0.709535 -2.36943 0.687185 0.0367277 -0.725553 + 1.10876 0.709872 -2.37723 0.264532 0.041797 -0.963471 + 1.11486 0.60827 -2.36842 0.258883 -0.159847 -0.95259 + 1.09444 0.609757 -2.36693 -0.185086 -0.210049 -0.960012 + 1.12802 0.707751 -2.35849 0.829758 0.0260422 -0.557515 + 1.13219 0.609351 -2.35256 0.821458 -0.024545 -0.56974 + 1.12515 0.607935 -2.36061 0.677186 -0.0720334 -0.732277 + 1.1393 0.60936 -2.33903 0.932486 0.020612 -0.360618 + 1.15191 0.500329 -2.31369 0.929786 -0.122929 -0.346967 + 1.14743 0.496383 -2.32059 0.815537 -0.217254 -0.536376 + 1.14039 0.494966 -2.32864 0.669375 -0.25898 -0.696323 + 1.14208 0.61186 -2.32725 0.991352 0.0600068 -0.116704 + 1.15469 0.502829 -2.30192 0.993291 -0.0827761 -0.0807485 + 1.14351 0.450377 -2.29177 0.659772 -0.727186 0.189476 + 1.13903 0.446433 -2.29866 0.516083 -0.853316 -0.0742224 + 1.15469 0.508324 -2.29292 0.982488 0.00623827 0.186223 + 1.14352 0.455873 -2.28276 0.614539 -0.584816 0.529463 + 1.13594 0.461731 -2.2739 0.284404 -0.474977 0.832773 + 1.13274 0.444378 -2.30264 0.110688 -0.94111 -0.319467 + 1.13409 0.49291 -2.33262 0.268242 -0.385113 -0.883025 + 1.1494 0.511608 -2.27968 0.856033 0.0202964 0.516522 + 1.14182 0.517466 -2.27081 0.587188 0.053829 0.807659 + 1.12253 0.520015 -2.26434 0.155237 -0.00723777 0.987851 + 1.11479 0.462892 -2.27405 -0.179241 -0.531526 0.82786 + 1.10388 0.619483 -2.27244 0.160199 0.0342834 0.986489 + 1.10138 0.521175 -2.26449 -0.096181 -0.0634202 0.993341 + 1.08372 0.521401 -2.2679 -0.386055 -0.157544 0.908923 + 1.07832 0.518992 -2.27237 -0.694707 -0.302119 0.652768 + 1.10939 0.460482 -2.27852 -0.423215 -0.645372 0.635911 + 1.09232 0.706041 -2.26706 0.148063 -0.150144 0.977514 + 1.06858 0.62142 -2.27269 -0.104782 -0.0165703 0.994357 + 1.07254 0.516733 -2.28383 -0.815608 -0.336935 0.470382 + 1.06895 0.510228 -2.29484 -0.867531 -0.398146 0.298111 + 1.10581 0.453976 -2.28953 -0.541841 -0.740233 0.398074 + 1.03097 0.61927 -2.31794 -0.958479 -0.239242 0.155182 + 1.03061 0.616257 -2.33139 -0.95443 -0.272163 -0.122433 + 1.0686 0.507215 -2.30829 -0.904745 -0.425569 0.0181301 + 1.07128 0.502696 -2.31543 -0.753701 -0.5066 -0.418677 + 1.10849 0.449455 -2.29667 -0.435324 -0.89232 -0.119407 + 1.01255 0.714067 -2.33616 -0.981893 -0.065473 -0.177761 + 1.03548 0.615573 -2.34542 -0.7422 -0.269034 -0.613807 + 1.05363 0.612355 -2.35515 -0.393364 -0.240066 -0.887487 + 1.08943 0.499476 -2.32516 -0.389011 -0.453864 -0.801672 + 1.11368 0.494398 -2.33113 -0.203735 -0.437988 -0.87559 + 1.04073 0.698706 -2.13558 -0.713148 -0.104059 -0.693247 + 1.05645 0.603637 -2.13983 -0.704541 -0.0801143 -0.705127 + 1.06553 0.699021 -2.1484 -0.349855 -0.0813898 -0.933261 + 1.07573 0.604393 -2.14977 -0.35183 0.0035847 -0.936057 + 1.08285 0.485512 -2.15402 -0.681325 -0.204194 -0.702923 + 1.07804 0.484288 -2.14468 -0.889979 -0.307988 -0.336274 + 1.1156 0.604282 -2.15922 -0.0967296 0.0416103 -0.99444 + 1.12682 0.4862 -2.16981 -0.102032 -0.050279 -0.99351 + 1.10213 0.486269 -2.16396 -0.339421 -0.0902369 -0.936296 + 1.1154 0.424609 -2.15386 -0.371155 -0.692349 -0.618786 + 1.11059 0.423385 -2.14451 -0.561708 -0.79476 -0.229869 + -0.997946 1.26522 -2.11898 0.513961 0.664279 0.54275 + -1.00125 1.25445 -2.10147 0.49388 0.722412 0.483947 + -0.995988 1.24916 -2.09271 0.137383 0.988455 0.0638961 + -0.992867 1.28516 -2.14769 0.517531 0.654433 0.551252 + -1.01366 1.28604 -2.12274 0.618266 0.564757 0.546623 + -1.02682 1.28381 -2.10704 0.605076 0.584117 0.541008 + -1.02535 1.27504 -2.0983 0.618559 0.607946 0.497781 + -0.98358 1.289 -2.15871 0.12037 0.770654 0.625782 + -0.989652 1.29545 -2.16274 0.485407 0.791507 0.371345 + -1.00858 1.30598 -2.15145 0.679477 0.608474 0.409963 + -1.04153 1.32695 -2.13338 0.471476 0.673538 0.569261 + -1.0547 1.32472 -2.11767 0.399746 0.758346 0.514892 + -0.963815 1.28962 -2.15547 -0.183418 0.76356 0.61914 + -0.984307 1.29441 -2.16473 0.184608 0.909914 0.371453 + -0.994769 1.30012 -2.18287 0.530824 0.846309 0.0445665 + -1.00404 1.31084 -2.18183 0.762133 0.645131 0.0543958 + -1.03105 1.3371 -2.15031 0.545055 0.711874 0.442889 + -0.94364 1.30847 -2.16914 -0.129731 0.826017 0.548513 + -0.960743 1.32387 -2.20375 -0.24203 0.92725 0.285708 + -0.980918 1.30501 -2.19008 -0.409937 0.822185 0.394923 + -0.989425 1.29907 -2.18486 -0.0279772 0.965028 0.26065 + -1.00405 1.30768 -2.23924 0.00391974 0.973144 -0.230163 + -0.91607 1.31578 -2.18266 0.146177 0.911733 0.383894 + -0.926195 1.32469 -2.21344 0.147343 0.988701 0.0275828 + -0.953976 1.32582 -2.2231 -0.0476521 0.994555 -0.0926787 + -0.995544 1.31361 -2.24446 -0.480832 0.87652 0.0226444 + -0.867528 1.30213 -2.1944 0.64391 0.737506 0.203627 + -0.877653 1.31105 -2.22518 0.52307 0.79705 -0.301842 + -0.926069 1.31171 -2.25781 0.30531 0.70978 -0.634821 + -0.95385 1.31284 -2.26747 0.142053 0.726263 -0.672579 + -0.988777 1.31557 -2.2638 -0.284012 0.824853 -0.48883 + -0.85353 1.2736 -2.17525 0.858587 0.42444 0.28754 + -0.862907 1.29195 -2.22695 0.811404 0.257808 -0.524556 + -0.911322 1.29262 -2.25959 0.503629 0.168112 -0.847406 + -0.96008 1.28314 -2.28307 0.17252 0.194486 -0.965615 + -0.860076 1.20167 -2.10609 0.977829 0.0527667 0.202649 + -0.855496 1.19582 -2.12385 0.978324 -0.177524 0.106618 + -0.84895 1.26775 -2.19301 0.979329 0.151404 -0.134134 + -0.867208 1.24832 -2.22053 0.739929 -0.204522 -0.640839 + -0.863375 1.18217 -2.06239 0.993131 -0.0925709 0.0715634 + -0.869982 1.15731 -2.1148 0.884538 -0.464575 -0.0419891 + -0.853252 1.22412 -2.18659 0.910534 -0.270865 -0.312346 + -0.867738 1.18561 -2.17754 0.87106 -0.384364 -0.30581 + -0.886969 1.21019 -2.22764 0.715305 -0.245911 -0.654115 + -0.881459 1.1607 -1.98568 0.836032 -0.418033 0.355386 + -0.878107 1.14727 -2.04762 0.861581 -0.493556 0.11866 + -0.895625 1.19651 -1.94679 0.679581 0.0758583 0.729668 + -0.919078 1.1614 -1.93562 0.592096 -0.306943 0.745123 + -0.913074 1.14522 -1.9566 0.648751 -0.560217 0.515052 + -0.933796 1.08842 -2.01277 0.695637 -0.667017 0.26679 + -0.965973 1.17276 -1.91092 0.227956 0.232167 0.945587 + -0.989426 1.13764 -1.89975 0.246311 -0.112053 0.962692 + -1.01057 1.10156 -1.91032 0.289681 -0.495879 0.81865 + -1.00457 1.08538 -1.93131 0.531615 -0.606849 0.590863 + -0.965412 1.07295 -1.98369 0.62144 -0.626088 0.470984 + -0.980129 1.18837 -1.91784 -0.155311 0.546138 0.823172 + -1.05117 1.12715 -1.90057 -0.0720222 -0.172502 0.982373 + -1.07232 1.09107 -1.91115 -0.167933 -0.338119 0.925999 + -1.07934 1.04655 -1.93878 -0.0952247 -0.598105 0.79574 + -1.03277 1.04274 -1.95099 0.337861 -0.646305 0.684207 + -0.968084 1.25517 -1.97953 -0.387692 0.803678 0.451438 + -0.995964 1.18457 -1.9229 -0.352308 0.648609 0.674675 + -0.994254 1.24243 -1.98218 -0.313337 0.772476 0.552359 + -1.00474 1.23713 -1.98197 -0.164995 0.700408 0.69441 + -1.00645 1.17926 -1.92269 0.17016 0.608507 0.77509 + -1.00371 1.25545 -2.02439 0.0514151 0.998662 0.00544936 + -1.00651 1.25674 -2.00165 0.345471 0.887877 0.303849 + -1.01179 1.25355 -1.99836 0.302508 0.6774 0.670536 + -1.01002 1.23395 -1.97869 0.313765 0.690069 0.652194 + -0.999056 1.25046 -2.06722 -0.00821282 0.996386 -0.0845421 + -1.00656 1.2514 -2.06805 0.397023 0.917475 -0.0247581 + -1.01075 1.25642 -2.02412 0.39108 0.91962 -0.0368103 + -1.01355 1.2577 -2.00138 0.396477 0.847567 0.352755 + -1.00349 1.2501 -2.09354 0.379706 0.883014 0.275881 + -1.02759 1.27069 -2.09037 0.666809 0.684758 0.294061 + -1.02814 1.26851 -2.06481 0.657845 0.752402 0.0336234 + -1.03233 1.27353 -2.02089 0.621997 0.778144 0.0872426 + -1.02889 1.25904 -1.98622 0.587514 0.689515 0.423552 + -1.06829 1.31095 -2.08292 0.542167 0.832557 0.113592 + -1.06884 1.30877 -2.05737 0.545276 0.832817 0.0953446 + -1.06342 1.2998 -2.01482 0.52789 0.827737 0.190221 + -1.05998 1.28532 -1.98015 0.500475 0.759674 0.415236 + -1.02713 1.2549 -1.9832 0.604321 0.609386 0.513268 + -1.0671 1.31137 -2.09074 0.543852 0.75975 0.356376 + -1.09813 1.32451 -2.09058 -0.0774698 0.989796 0.119592 + -1.09933 1.3241 -2.08277 -0.103469 0.990292 0.0928181 + -1.09813 1.32091 -2.05726 -0.0662083 0.990246 0.122598 + -1.09271 1.31195 -2.01471 0.192334 0.93755 0.289841 + -1.06857 1.32014 -2.09948 0.357598 0.793443 0.492516 + -1.10025 1.32588 -2.1048 -0.21047 0.959276 0.188393 + -1.12999 1.30631 -2.09748 -0.583818 0.800172 0.137405 + -1.12879 1.30312 -2.07197 -0.634952 0.759198 0.143021 + -1.10739 1.31177 -2.01308 -0.37813 0.865314 0.329014 + -1.08638 1.33047 -2.12299 -0.0815611 0.927425 0.365008 + -1.13483 1.32016 -2.13533 -0.546919 0.78092 0.301735 + -1.13211 1.30768 -2.11169 -0.602332 0.741187 0.296374 + -1.16797 1.27928 -2.12693 -0.741695 0.596655 0.306418 + -1.15935 1.27338 -2.08314 -0.766914 0.602076 0.222145 + -1.07524 1.34267 -2.14156 -0.0555998 0.875751 0.479551 + -1.12368 1.33237 -2.1539 -0.487332 0.824377 0.287941 + -1.17068 1.29177 -2.15056 -0.756138 0.618157 0.214795 + -1.19843 1.24064 -2.13741 -0.8893 0.4146 0.193011 + -1.18982 1.23474 -2.09363 -0.863451 0.44763 0.232551 + -1.06475 1.35282 -2.1585 0.101397 0.965176 0.241151 + -1.10077 1.35398 -2.1694 -0.265897 0.951102 0.157173 + -1.13848 1.32748 -2.19342 -0.592972 0.789267 -0.159502 + -1.1614 1.30587 -2.17791 -0.728637 0.684893 0.00321937 + -1.20333 1.24534 -2.18178 -0.907637 0.418511 0.0323098 + -1.02651 1.34196 -2.1807 0.542868 0.839361 -0.0277047 + -1.05061 1.34378 -2.1937 0.165444 0.948647 -0.269625 + -1.08663 1.34494 -2.2046 -0.102595 0.902739 -0.417776 + -1.01332 1.3184 -2.2382 0.547404 0.720786 -0.425225 + -1.03742 1.32022 -2.25119 0.117719 0.732925 -0.670047 + -1.07665 1.30058 -2.25546 -0.14845 0.629303 -0.762851 + -1.10837 1.28654 -2.26464 -0.148225 0.589922 -0.793739 + -1.11835 1.3309 -2.21378 -0.335664 0.820271 -0.463125 + -1.03281 1.27082 -2.2821 -0.0395279 0.360896 -0.931768 + -1.07203 1.25118 -2.28636 -0.0492017 0.326226 -0.94401 + -1.1178 1.24139 -2.28569 -0.153469 0.33296 -0.930368 + -1.15208 1.28048 -2.25538 -0.445637 0.593702 -0.670019 + -1.17222 1.27705 -2.23502 -0.703084 0.590601 -0.396059 + -0.995008 1.28587 -2.2794 -0.0708546 0.313121 -0.947066 + -1.0167 1.19196 -2.28819 0.145802 0.063277 -0.987288 + -1.09284 1.20037 -2.29555 0.0156244 0.15068 -0.988459 + -1.13861 1.19058 -2.29487 -0.199552 0.197976 -0.959679 + -1.16151 1.23532 -2.27643 -0.4365 0.339639 -0.833135 + -0.978899 1.20701 -2.2855 0.214445 -0.105507 -0.971021 + -0.949901 1.17835 -2.26912 0.487822 -0.0853515 -0.86876 + -1.0214 1.12019 -2.29765 0.226025 0.0597328 -0.972288 + -1.09754 1.1286 -2.30501 0.0923096 0.155919 -0.983447 + -0.931082 1.25449 -2.2667 0.502481 -0.101082 -0.858659 + -0.912048 1.16244 -2.2362 0.742272 -0.204591 -0.638103 + -0.931123 1.09699 -2.24512 0.800447 -0.114848 -0.588298 + -0.968976 1.1129 -2.27805 0.489197 -0.0102413 -0.872113 + -0.892817 1.13787 -2.1861 0.889539 -0.374692 -0.261394 + -0.914917 1.08625 -2.20238 0.938747 -0.273717 -0.209362 + -0.950337 1.03443 -2.26481 0.756223 -0.0757755 -0.649911 + -0.982165 1.0375 -2.28311 0.431807 0.0327135 -0.901373 + -1.03459 1.04479 -2.30271 0.305288 0.0956658 -0.947442 + -0.895616 1.12806 -2.12044 0.830532 -0.556333 -0.0266369 + -0.917717 1.07644 -2.13672 0.926829 -0.364878 0.0886172 + -0.936191 1.00951 -2.16796 0.938149 -0.340312 0.0637488 + -0.934132 1.02369 -2.22206 0.945119 -0.246923 -0.213961 + -0.961437 0.953005 -2.25291 0.932227 -0.305135 -0.194536 + -0.963497 0.938828 -2.19881 0.880176 -0.456005 0.131715 + -1.00098 0.866192 -2.25074 0.886738 -0.412694 0.208279 + -0.995492 0.872387 -2.27345 0.953943 -0.288193 -0.0832949 + -1.00294 0.879134 -2.30091 0.925387 -0.111381 -0.36229 + -0.968884 0.959752 -2.28037 0.77473 -0.113828 -0.621962 + -0.978927 0.926189 -2.17924 0.752956 -0.639752 0.154192 + -1.01641 0.853552 -2.23117 0.753174 -0.482156 0.447498 + -1.02586 0.785997 -2.26224 0.815901 -0.248553 0.522042 + -1.01861 0.788239 -2.27782 0.939258 -0.18201 0.290975 + -1.01313 0.794434 -2.30052 0.99075 -0.111301 0.0776356 + -0.979065 0.922293 -2.15239 0.807931 -0.559457 -0.185083 + -1.02374 0.898894 -2.187 0.312873 -0.85359 0.416526 + -1.02577 0.850658 -2.22195 0.388857 -0.542864 0.744371 + -1.03522 0.783103 -2.25302 0.481767 -0.320266 0.815678 + -0.972961 0.929833 -2.1305 0.900174 -0.380436 0.212027 + -1.01732 0.840676 -2.13777 0.899668 -0.248521 -0.358937 + -1.02388 0.894998 -2.16015 0.462293 -0.62034 -0.633611 + -1.05913 0.888012 -2.17101 0.251894 -0.67017 -0.698155 + -1.05801 0.890812 -2.18881 0.0859891 -0.913209 0.398315 + -0.951538 0.996494 -2.11812 0.859201 -0.369314 0.354092 + -0.999435 0.931338 -2.09138 0.804647 -0.246179 0.540315 + -1.01351 0.849065 -2.09167 0.913003 -0.197079 0.35719 + -1.01121 0.848216 -2.11588 0.945877 -0.324019 -0.0181096 + -0.933064 1.06342 -2.08687 0.858895 -0.460662 0.223808 + -0.978011 0.997999 -2.079 0.758528 -0.453955 0.467504 + -1.01947 0.932542 -2.06017 0.795258 -0.263178 0.54617 + -0.911168 1.10379 -2.07578 0.80663 -0.588071 0.0593278 + -0.963119 1.03383 -2.04639 0.748008 -0.578389 0.3255 + -0.99361 1.0303 -2.00338 0.615135 -0.625954 0.479364 + -1.0085 0.994477 -2.03599 0.722616 -0.497106 0.480324 + -0.885534 1.13305 -2.07014 0.797171 -0.603043 0.0292839 + -0.941223 1.0742 -2.03529 0.771318 -0.587966 0.243647 + -1.03478 0.996049 -1.99593 0.468903 -0.551507 0.689906 + -1.08136 0.999866 -1.98372 -0.0548452 -0.570719 0.819312 + -1.08197 0.934614 -2.01182 -0.0357968 -0.30742 0.9509 + -1.04575 0.934113 -2.02012 0.540151 -0.332626 0.773044 + -1.05866 0.851156 -2.039 0.465684 -0.1441 0.87314 + -1.03355 0.850267 -2.06046 0.744675 -0.111229 0.658094 + -1.14002 0.999492 -2.00372 -0.428208 -0.490105 0.759233 + -1.14063 0.93424 -2.03183 -0.472585 -0.247653 0.845773 + -1.12967 0.851577 -2.03907 -0.435333 -0.102752 0.894387 + -1.09487 0.851658 -2.03071 -0.0171549 -0.138014 0.990282 + -1.14155 1.04819 -1.96235 -0.444964 -0.499886 0.743049 + -1.18376 1.04641 -1.99763 -0.72388 -0.373934 0.579802 + -1.18223 0.997715 -2.03899 -0.731642 -0.377332 0.567733 + -1.17278 0.933552 -2.05711 -0.757249 -0.227732 0.612137 + -1.13452 1.09271 -1.93472 -0.473356 -0.29061 0.831553 + -1.18087 1.097 -1.97232 -0.786382 -0.145549 0.600349 + -1.20943 1.0394 -2.05198 -0.907324 -0.236158 0.347839 + -1.20455 0.99636 -2.08217 -0.90108 -0.279217 0.331802 + -1.19509 0.932198 -2.10029 -0.924229 -0.21468 0.315773 + -1.12806 1.13932 -1.92108 -0.47885 -0.113127 0.870577 + -1.17441 1.14361 -1.95867 -0.801984 0.0666919 0.593611 + -1.19506 1.154 -2.01062 -0.920036 0.189181 0.343139 + -1.20655 1.08999 -2.02667 -0.935891 -0.0299462 0.351015 + -1.22159 1.03917 -2.09959 -0.98391 -0.117636 0.134473 + -1.04301 1.16262 -1.8932 0.133149 -0.0513431 0.989765 + -1.1199 1.17478 -1.91371 -0.493117 0.0888113 0.865418 + -1.15065 1.19284 -1.94371 -0.71697 0.309258 0.624751 + -1.01556 1.17173 -1.90419 0.760199 -0.0698092 0.645929 + -1.06864 1.19787 -1.89697 -0.0668883 0.269033 0.960805 + -1.08924 1.19869 -1.90469 -0.396321 0.285385 0.872631 + -1.12 1.21675 -1.93469 -0.551201 0.431076 0.714388 + -1.01913 1.22641 -1.96018 0.627543 0.583386 0.515606 + -1.04118 1.20698 -1.90796 0.402937 0.535494 0.742218 + -1.04919 1.23547 -1.93097 0.51686 0.609857 0.600775 + -1.0713 1.23734 -1.91791 0.102608 0.579982 0.808142 + -1.0919 1.23816 -1.92563 -0.405117 0.512916 0.756834 + -1.08209 1.28719 -1.9671 0.201602 0.787771 0.582042 + -1.09677 1.28702 -1.96546 -0.269858 0.725272 0.63337 + -1.12487 1.26561 -1.97452 -0.688063 0.521079 0.505022 + -1.1713 1.20323 -1.99566 -0.841512 0.383715 0.38029 + -1.13795 1.28203 -2.02425 -0.762557 0.584175 0.277931 + -1.18439 1.21965 -2.04539 -0.866383 0.413741 0.279642 + -1.2081 1.16085 -2.06177 -0.952283 0.209359 0.222093 + -1.21353 1.17594 -2.11001 -0.969684 0.200845 0.139194 + -1.21959 1.09684 -2.07782 -0.987542 0.0428089 0.151421 + -1.21609 1.18911 -2.15515 -0.976556 0.180552 0.117213 + -1.22 1.10578 -2.12788 -0.998328 0.0453873 0.0357814 + -1.222 1.04811 -2.14965 -0.999567 -0.0291064 -0.0042963 + -1.21694 0.994661 -2.17261 -0.985818 -0.165691 -0.0266178 + -1.21671 0.996135 -2.12977 -0.974455 -0.197491 0.106937 + -1.22099 1.1938 -2.19952 -0.981535 0.183936 -0.052501 + -1.22256 1.11894 -2.17302 -0.999135 0.0174052 0.037759 + -1.22178 1.05825 -2.19106 -0.99895 -0.0413191 -0.0198028 + -1.19404 1.25944 -2.20913 -0.842281 0.506105 -0.185525 + -1.21118 1.20584 -2.23352 -0.898297 0.250219 -0.361183 + -1.22206 1.14287 -2.21088 -0.990419 0.0363191 -0.13323 + -1.22129 1.08217 -2.22892 -0.98527 0.00674648 -0.170875 + -1.18935 1.22346 -2.2594 -0.719424 0.310921 -0.621094 + -1.21225 1.15491 -2.24488 -0.894669 0.0980596 -0.435835 + -1.21091 1.09261 -2.25966 -0.885664 0.0811615 -0.457179 + -1.21572 1.01392 -2.24892 -0.973416 -0.110442 -0.200661 + -1.21672 1.00479 -2.21402 -0.984798 -0.163603 -0.0583763 + -1.19043 1.15683 -2.27277 -0.690651 0.159853 -0.7053 + -1.18908 1.09453 -2.28755 -0.712265 0.140421 -0.687722 + -1.18713 1.03112 -2.30196 -0.710449 0.0709391 -0.700164 + -1.20533 1.02435 -2.27965 -0.87336 -0.00392701 -0.487059 + -1.16259 1.1687 -2.28979 -0.476371 0.199149 -0.856394 + -1.1678 1.10298 -2.30341 -0.508134 0.186461 -0.840852 + -1.16584 1.03957 -2.31782 -0.506369 0.133145 -0.851976 + -1.15719 0.962818 -2.33057 -0.535158 0.0205648 -0.844501 + -1.17165 0.958611 -2.31734 -0.715913 -0.0580579 -0.695771 + -1.14382 1.12486 -2.30849 -0.171817 0.212831 -0.961864 + -1.14473 1.04282 -2.32601 -0.167486 0.17144 -0.970854 + -1.13607 0.966066 -2.33875 -0.138194 0.121932 -0.982871 + -1.09845 1.04656 -2.32253 0.179509 0.174572 -0.968143 + -1.10097 0.9669 -2.3348 0.191406 0.149956 -0.969988 + -1.12434 0.885013 -2.34828 -0.253533 0.0805339 -0.963969 + -1.13536 0.882297 -2.34008 -0.632201 -0.0214727 -0.774507 + -1.14982 0.878091 -2.32685 -0.769442 -0.0947641 -0.631647 + -1.03711 0.965133 -2.31498 0.356648 0.1458 -0.922792 + -1.04484 0.884987 -2.33197 0.344746 0.158787 -0.925169 + -1.08924 0.885849 -2.34433 0.191035 0.15841 -0.968717 + -1.0868 0.801298 -2.35914 0.169472 0.175315 -0.969816 + -1.11343 0.800102 -2.36117 -0.281418 0.130983 -0.950604 + -1.00071 0.962823 -2.29867 0.46774 0.0829306 -0.879967 + -1.00844 0.882676 -2.31566 0.731944 0.0655467 -0.678204 + -1.0185 0.800157 -2.33354 0.746164 0.10086 -0.658078 + -1.0424 0.800438 -2.34678 0.376242 0.174763 -0.90989 + -1.013 0.796612 -2.3188 0.984096 -0.0173709 -0.176788 + -1.01255 0.714067 -2.33616 0.981993 -0.0676485 -0.176391 + -1.01742 0.713383 -2.35019 0.761943 -0.0199871 -0.647335 + -1.04131 0.713664 -2.36342 0.383081 0.0313276 -0.923183 + -1.01268 0.711888 -2.31788 0.987855 -0.108988 0.110743 + -1.03097 0.61927 -2.31794 0.958563 -0.239018 0.155006 + -1.03061 0.616257 -2.33139 0.955511 -0.269124 -0.120714 + -1.03548 0.615573 -2.34542 0.742011 -0.268425 -0.614302 + -1.01807 0.712229 -2.29628 0.940291 -0.125168 0.316522 + -1.03636 0.619611 -2.29634 0.907352 -0.22889 0.352592 + -1.07254 0.516733 -2.28383 0.823433 -0.33009 0.461518 + -1.06895 0.510228 -2.29484 0.869973 -0.390427 0.301186 + -1.0686 0.507215 -2.30829 0.904745 -0.425569 0.0181301 + -1.02532 0.709987 -2.2807 0.824082 -0.15566 0.544664 + -1.04215 0.62187 -2.28487 0.791337 -0.190151 0.581058 + -1.07832 0.518992 -2.27237 0.694781 -0.297948 0.654604 + -1.10939 0.460482 -2.27852 0.423204 -0.645375 0.635916 + -1.10581 0.453976 -2.28953 0.541849 -0.740229 0.398071 + -1.03409 0.709764 -2.27193 0.494388 -0.175086 0.851425 + -1.05092 0.621647 -2.2761 0.479625 -0.113771 0.870067 + -1.08372 0.521401 -2.2679 0.389703 -0.154769 0.907843 + -1.11479 0.462892 -2.27405 0.179231 -0.531548 0.827848 + -1.14352 0.455873 -2.28276 -0.614396 -0.584942 0.529491 + -1.05814 0.781314 -2.24839 0.106915 -0.323176 0.94028 + -1.05701 0.707977 -2.2673 0.117343 -0.162842 0.979649 + -1.06858 0.62142 -2.27269 0.105327 -0.0159405 0.99431 + -1.10138 0.521175 -2.26449 0.0961818 -0.0634178 0.993341 + -1.13594 0.461731 -2.2739 -0.284397 -0.475026 0.832748 + -1.06003 0.842575 -2.22376 0.0480452 -0.477106 0.877531 + -1.09638 0.779218 -2.24812 -0.146904 -0.316047 0.937301 + -1.09232 0.706041 -2.26706 -0.147655 -0.149629 0.977655 + -1.10388 0.619483 -2.27244 -0.159453 0.0332052 0.986647 + -1.12253 0.520015 -2.26434 -0.155235 -0.00723967 0.987851 + -1.09827 0.840477 -2.22349 -0.160293 -0.437186 0.884972 + -1.12168 0.778896 -2.25693 -0.567481 -0.297125 0.767908 + -1.11761 0.705719 -2.27586 -0.585134 -0.117937 0.802315 + -1.12317 0.616935 -2.27891 -0.586304 0.0930942 0.804724 + -1.14182 0.517466 -2.27081 -0.588514 0.0556494 0.806569 + -1.10266 0.89077 -2.19775 -0.197894 -0.879598 0.432603 + -1.13814 0.898036 -2.20703 -0.464844 -0.809113 0.359521 + -1.13375 0.847744 -2.23277 -0.574906 -0.38876 0.719965 + -1.13618 0.782888 -2.27523 -0.856429 -0.239476 0.457362 + -1.13074 0.704483 -2.29328 -0.87211 -0.063217 0.485208 + -1.10379 0.887968 -2.17995 0.060497 -0.673013 -0.737153 + -1.14087 0.89487 -2.18415 -0.0875418 -0.608867 -0.788427 + -1.18263 0.925247 -2.21716 -0.622278 -0.778185 0.0848483 + -1.14825 0.851736 -2.25108 -0.786011 -0.394068 0.476337 + -1.14342 0.784636 -2.29323 -0.964957 -0.187838 0.183233 + -1.06094 0.833172 -2.1651 0.279115 -0.124189 -0.952193 + -1.10412 0.833077 -2.17534 0.161889 -0.102368 -0.981485 + -1.14119 0.839975 -2.17954 -0.229248 -0.208736 -0.950723 + -1.18536 0.92208 -2.19428 -0.57468 -0.717364 -0.393868 + -1.02568 0.840159 -2.15425 0.655604 -0.151227 -0.739806 + -1.03748 0.769849 -2.14484 0.687521 -0.151285 -0.710231 + -1.06227 0.770162 -2.15765 0.34487 -0.126877 -0.930036 + -1.10545 0.770067 -2.16789 0.106903 -0.140537 -0.984287 + -1.02911 0.770366 -2.12836 0.942205 -0.142091 -0.303413 + -1.03297 0.696732 -2.12049 0.945662 -0.111886 -0.305296 + -1.04073 0.698706 -2.13558 0.712414 -0.10528 -0.693817 + -1.06553 0.699021 -2.1484 0.349788 -0.081262 -0.933298 + -1.02616 0.76936 -2.10888 0.992449 -0.118358 -0.032174 + -1.03002 0.695723 -2.10101 0.993768 -0.106764 -0.0320364 + -1.04637 0.599478 -2.10967 0.978674 -0.197789 -0.0554709 + -1.04869 0.601661 -2.12474 0.934463 -0.159424 -0.318376 + -1.05645 0.603637 -2.13983 0.704596 -0.080267 -0.705054 + -1.02846 0.770206 -2.08467 0.944851 -0.0875422 0.315585 + -1.03207 0.692305 -2.07887 0.945868 -0.103481 0.307612 + -1.04842 0.596061 -2.08753 0.931367 -0.236396 0.276896 + -1.0416 0.768826 -2.06282 0.762627 -0.0432898 0.645388 + -1.04521 0.690924 -2.05702 0.760141 -0.0851726 0.644152 + -1.05861 0.59312 -2.07063 0.757117 -0.258057 0.60015 + -1.077 0.479988 -2.11589 0.885547 -0.409332 0.219669 + -1.06671 0.769714 -2.04136 0.441229 -0.018642 0.897201 + -1.06833 0.687077 -2.03744 0.44869 -0.0766497 0.890394 + -1.08172 0.589274 -2.05105 0.444696 -0.258233 0.857648 + -1.1015 0.474666 -2.08687 0.434987 -0.457791 0.77538 + -1.08718 0.477048 -2.099 0.716515 -0.446151 0.536242 + -1.0955 0.768938 -2.03512 -0.0096505 -0.00163475 0.999952 + -1.09711 0.686301 -2.0312 -0.00672013 -0.0519661 0.998626 + -1.10408 0.587688 -2.04625 0.00189308 -0.226072 0.974109 + -1.12386 0.47308 -2.08207 -0.00682588 -0.426211 0.904598 + -1.12617 0.418888 -2.11867 0.143104 -0.873915 0.464536 + -1.13029 0.768856 -2.04348 -0.442236 6.37393e-006 0.896899 + -1.12924 0.686226 -2.03891 -0.428091 -0.032047 0.903167 + -1.13621 0.587613 -2.05397 -0.432652 -0.164941 0.886344 + -1.14375 0.473033 -2.08685 -0.413464 -0.365003 0.834158 + -1.14607 0.418842 -2.12345 -0.415151 -0.834933 0.361298 + -1.15321 0.769489 -2.06168 -0.790741 -0.0193701 0.611845 + -1.15215 0.686861 -2.05711 -0.785308 -0.0153978 0.618914 + -1.15403 0.589054 -2.06807 -0.785343 -0.0895455 0.612551 + -1.16158 0.474473 -2.10095 -0.783567 -0.26617 0.561405 + -1.16182 0.850889 -2.06436 -0.789171 -0.111564 0.603956 + -1.16603 0.768546 -2.09129 -0.966794 -0.0468868 0.25122 + -1.16406 0.690491 -2.08423 -0.964123 -0.0053059 0.265404 + -1.16595 0.592685 -2.09518 -0.965689 -0.0179263 0.259082 + -1.16896 0.476723 -2.11774 -0.954937 -0.18294 0.233728 + -1.17464 0.849946 -2.09397 -0.940809 -0.148815 0.304521 + -1.16863 0.769838 -2.11595 -0.989999 -0.098763 -0.100731 + -1.16666 0.691784 -2.10889 -0.994627 -0.00561677 -0.103375 + -1.16799 0.595484 -2.11426 -0.994743 0.032077 -0.0972466 + -1.20206 0.931056 -2.13466 -0.965125 -0.24409 0.0946233 + -1.18161 0.848802 -2.12835 -0.975642 -0.210354 -0.0622393 + -1.16113 0.769041 -2.13784 -0.883528 -0.140874 -0.446691 + -1.1598 0.695065 -2.1289 -0.895884 -0.0166744 -0.443975 + -1.16114 0.598766 -2.13427 -0.896871 0.0678782 -0.437052 + -1.20229 0.929581 -2.1775 -0.910707 -0.382372 -0.156217 + -1.17411 0.848005 -2.15023 -0.855011 -0.2943 -0.427018 + -1.14987 0.770103 -2.1543 -0.714222 -0.15701 -0.682081 + -1.14854 0.696128 -2.14536 -0.728383 -0.0255434 -0.684694 + -1.1524 0.601022 -2.147 -0.7351 0.0812548 -0.673072 + -1.19733 0.936526 -2.23764 -0.910781 -0.412197 -0.0239214 + -1.15718 0.840503 -2.16701 -0.664751 -0.3096 -0.679893 + -1.19632 0.945651 -2.27253 -0.938886 -0.264204 -0.220656 + -1.16377 0.867801 -2.29013 -0.944612 -0.271212 -0.184802 + -1.16295 0.863015 -2.27155 -0.908683 -0.389057 0.151425 + -1.18985 0.951844 -2.29503 -0.858413 -0.157394 -0.488215 + -1.1573 0.873995 -2.31263 -0.890423 -0.18813 -0.414433 + -1.1409 0.791504 -2.32781 -0.934481 -0.0598672 -0.350944 + -1.14423 0.789423 -2.31181 -0.985035 -0.132769 -0.109896 + -1.13343 0.795599 -2.34203 -0.830751 -0.00657771 -0.556605 + -1.12802 0.707751 -2.35849 -0.829548 0.0253955 -0.557858 + -1.13513 0.707759 -2.34495 -0.936996 0.0127874 -0.349106 + -1.13845 0.705678 -2.32895 -0.995218 -0.00478094 -0.0975668 + -1.13797 0.70623 -2.31128 -0.981244 -0.0370933 0.189168 + -1.12445 0.797383 -2.35297 -0.69148 0.0503562 -0.720639 + -1.11905 0.709535 -2.36943 -0.687322 0.0365727 -0.725432 + -1.12515 0.607935 -2.36061 -0.677289 -0.0719191 -0.732193 + -1.13219 0.609351 -2.35256 -0.821535 -0.024576 -0.569628 + -1.1393 0.60936 -2.33903 -0.932397 0.0198639 -0.36089 + -1.10876 0.709872 -2.37723 -0.264773 0.0421609 -0.963389 + -1.11486 0.60827 -2.36842 -0.25921 -0.160316 -0.952423 + -1.13409 0.49291 -2.33262 -0.268775 -0.384067 -0.883319 + -1.14039 0.494966 -2.32864 -0.668861 -0.258289 -0.697073 + -1.14743 0.496383 -2.32059 -0.816314 -0.21488 -0.536151 + -1.08213 0.711068 -2.3752 0.1795 0.038333 -0.983011 + -1.09444 0.609757 -2.36693 0.18542 -0.210577 -0.959832 + -1.11368 0.494398 -2.33113 0.20415 -0.437528 -0.875724 + -1.13274 0.444378 -2.30264 -0.110693 -0.941104 -0.319485 + -1.13903 0.446433 -2.29866 -0.516098 -0.853304 -0.0742616 + -1.05363 0.612355 -2.35515 0.393394 -0.239989 -0.887494 + -1.08943 0.499476 -2.32516 0.388475 -0.452992 -0.802425 + -1.10849 0.449455 -2.29667 0.435325 -0.89232 -0.119399 + -1.14351 0.450377 -2.29177 -0.659804 -0.72715 0.189505 + -1.07128 0.502696 -2.31543 0.753702 -0.506603 -0.418673 + -1.15469 0.502829 -2.30192 -0.993581 -0.0799511 -0.0800288 + -1.15191 0.500329 -2.31369 -0.929023 -0.120917 -0.349708 + -1.14208 0.61186 -2.32725 -0.991341 0.0601525 -0.116724 + -1.15469 0.508324 -2.29292 -0.983315 0.00974674 0.181647 + -1.14159 0.612412 -2.30958 -0.978726 0.0985513 0.179955 + -1.1363 0.615698 -2.29634 -0.876296 0.108311 0.469441 + -1.1494 0.511608 -2.27968 -0.85582 0.0211998 0.516839 + -1.13389 0.769575 -2.16683 -0.332162 -0.167181 -0.928288 + -1.13383 0.698417 -2.15678 -0.340758 -0.0530967 -0.93865 + -1.13769 0.60331 -2.15842 -0.343528 0.0724807 -0.936341 + -1.10539 0.69891 -2.15785 0.103182 -0.0690151 -0.992265 + -1.1156 0.604282 -2.15922 0.09669 0.0416671 -0.994442 + -1.14892 0.485228 -2.16902 -0.351338 -0.0311122 -0.935732 + -1.15803 0.483812 -2.16194 -0.72097 -0.0421274 -0.691685 + -1.16676 0.481555 -2.14921 -0.888763 -0.0654538 -0.45367 + -1.07573 0.604393 -2.14977 0.35174 0.0034731 -0.936091 + -1.10213 0.486269 -2.16396 0.339424 -0.0902265 -0.936296 + -1.12682 0.4862 -2.16981 0.102029 -0.0502667 -0.993511 + -1.14009 0.424542 -2.15971 -0.129369 -0.650949 -0.748016 + -1.1492 0.423124 -2.15263 -0.51305 -0.709021 -0.483806 + -1.08285 0.485512 -2.15402 0.681322 -0.204196 -0.702925 + -1.1154 0.424609 -2.15386 0.371179 -0.692332 -0.61879 + -1.15345 0.42109 -2.14024 -0.643329 -0.760089 -0.0916043 + -1.17101 0.479522 -2.13682 -0.984385 -0.113959 -0.134165 + -1.07804 0.484288 -2.14468 0.889978 -0.307993 -0.336272 + -1.11059 0.423385 -2.14451 0.561725 -0.794749 -0.229867 + -1.07573 0.482105 -2.12961 0.92925 -0.360716 -0.0798683 + -1.11186 0.421268 -2.1308 0.520977 -0.842635 0.136198 + -0.82689 1.29929 -2.95643 0.617033 0.112407 -0.778867 + -0.803656 1.18343 -2.94072 0.894638 0.0821922 -0.439167 + -0.830034 1.19612 -2.97807 0.575668 0.130191 -0.807252 + -0.863031 1.19676 -2.98754 0.0166199 0.127931 -0.991644 + -0.807811 1.06184 -2.97689 0.813349 0.110984 -0.571092 + -0.829019 1.06609 -2.99239 0.448895 0.146127 -0.881556 + -0.862015 1.06673 -3.00185 0.0786585 0.166031 -0.982978 + -0.849719 0.941343 -3.02531 0.0819267 0.201683 -0.976018 + -0.794835 1.04874 -2.94176 0.979301 0.0348408 -0.199389 + -0.798052 0.929471 -2.98389 0.970016 0.0461573 -0.238617 + -0.807629 0.936939 -3.00444 0.786653 0.140009 -0.601311 + -0.828837 0.941197 -3.01994 0.43165 0.200252 -0.879533 + -0.843533 0.816506 -3.05207 0.0783337 0.171048 -0.982144 + -0.795305 0.91505 -2.94799 0.995247 -0.057503 0.0785865 + -0.798724 0.797702 -2.99535 0.996104 -0.0539096 0.0697939 + -0.800369 0.806341 -3.01686 0.969461 0.0372879 -0.242393 + -0.809946 0.813808 -3.03741 0.778168 0.12367 -0.61576 + -0.822651 0.81636 -3.04669 0.433601 0.172667 -0.884407 + -0.804682 0.788575 -2.97448 0.872766 -0.186689 0.451029 + -0.805048 0.714447 -3.00096 0.881252 -0.124899 0.455846 + -0.801237 0.720285 -3.01431 0.99601 -0.0639239 0.0622769 + -0.802882 0.728925 -3.03582 0.957643 -0.0363168 -0.285659 + -0.809008 0.733702 -3.04896 0.761482 -0.0171783 -0.647958 + -0.815622 0.709411 -2.99118 0.654729 -0.166238 0.737356 + -0.807446 0.681117 -3.00185 0.834553 -0.416012 0.361185 + -0.803635 0.686956 -3.0152 0.92744 -0.370181 -0.0531234 + -0.804799 0.693068 -3.03042 0.872678 -0.351701 -0.338731 + -0.810925 0.697845 -3.04357 0.669432 -0.359414 -0.650141 + -0.823056 0.706647 -2.98622 0.458703 -0.203063 0.865076 + -0.814927 0.677555 -2.99494 0.659907 -0.466328 0.589118 + -0.819794 0.667873 -3.01333 0.486103 -0.860276 -0.15372 + -0.820959 0.673984 -3.02855 0.422828 -0.775228 -0.469296 + -0.829896 0.705212 -2.98435 0.077535 -0.248857 0.965432 + -0.822361 0.674792 -2.98997 0.462891 -0.501642 0.730813 + -0.827276 0.664309 -3.00642 0.317967 -0.947171 0.0420035 + -0.829948 0.675789 -3.03512 0.171503 -0.756659 -0.630915 + -0.819914 0.699651 -3.05013 0.37952 -0.37678 -0.844986 + -0.838616 0.673413 -2.9905 -0.194177 -0.541105 0.818231 + -0.827201 0.673775 -2.98865 0.11899 -0.537847 0.834603 + -0.832115 0.663293 -3.0051 0.0671628 -0.987654 0.141525 + -0.848286 0.671955 -3.03015 -0.208749 -0.833694 -0.511251 + -0.852695 0.673826 -2.99489 -0.408041 -0.55183 0.727314 + -0.846194 0.663707 -3.00949 -0.21056 -0.976556 0.0447526 + -0.864359 0.676199 -3.00349 -0.69588 -0.578278 0.425847 + -0.851447 0.667225 -3.01935 -0.318841 -0.903232 -0.287251 + -0.869612 0.679716 -3.01335 -0.820938 -0.567324 0.0648371 + -0.870874 0.684691 -3.02581 -0.789372 -0.543081 -0.286279 + -0.867713 0.689422 -3.03662 -0.685388 -0.5203 -0.509442 + -0.862675 0.693595 -3.0456 -0.533849 -0.493039 -0.686963 + -0.843098 0.674141 -3.03424 -0.0384283 -0.784368 -0.619105 + -0.857487 0.695782 -3.0497 -0.296759 -0.452413 -0.840985 + -0.846422 0.698094 -3.0527 -0.0778333 -0.423467 -0.902562 + -0.833272 0.699745 -3.05357 0.107 -0.398343 -0.910974 + -0.864723 0.731701 -3.05745 -0.413359 -0.105227 -0.904468 + -0.853658 0.734015 -3.06045 -0.154796 -0.063681 -0.985892 + -0.835072 0.736347 -3.06168 0.096749 -0.0343065 -0.994717 + -0.821714 0.736253 -3.05825 0.4175 -0.0164649 -0.908528 + -0.86212 0.814174 -3.05083 -0.183754 0.14366 -0.972418 + -0.070894 2.02181 -3.02604 -0.351185 -0.486508 -0.799987 + -0.040846 2.03476 -3.07187 -0.372013 -0.802254 -0.4669 + -0.080403 2.00708 -3.02372 -0.558122 0.235277 -0.795704 + -0.030826 2.04626 -3.10218 -0.309191 -0.850815 -0.424871 + -1.1518 1.21652 -1.61535 0.813943 0.53967 0.215065 + -1.16328 1.23237 -1.62663 0.616382 0.766541 0.180245 + -1.17721 1.24002 -1.59409 0.691274 0.67049 0.269413 + -1.14452 1.22624 -1.65987 0.710171 0.627744 0.318738 + -1.17429 1.24694 -1.67216 0.188218 0.975681 0.11234 + -1.19304 1.25307 -1.63892 0.083585 0.996385 0.015198 + -1.19615 1.24703 -1.59924 0.0373945 0.968421 0.246499 + -1.18233 1.23731 -1.58105 0.412191 0.831347 0.372773 + -1.16573 1.22416 -1.58282 0.700347 0.634798 0.326414 + -1.14814 1.19983 -1.59413 0.864129 0.455547 0.213911 + -1.12654 1.17353 -1.6363 0.875409 0.430507 0.219824 + -1.14016 1.21833 -1.66015 0.831478 0.448836 0.327399 + -1.16642 1.2016 -1.54698 0.717277 0.584391 0.379476 + -1.15433 1.20203 -1.57527 0.828044 0.486586 0.278527 + -1.13279 1.16309 -1.58257 0.864448 0.461387 0.199629 + -1.12289 1.15684 -1.61507 0.867814 0.459347 0.18947 + -1.17154 1.19889 -1.53394 0.721351 0.623456 0.301588 + -1.15501 1.17947 -1.53944 0.797235 0.557655 0.231165 + -1.1396 1.16384 -1.55976 0.828252 0.508773 0.234838 + -1.13898 1.16529 -1.56371 0.841758 0.469011 0.267341 + -1.18622 1.21333 -1.53064 0.144157 0.779501 0.609587 + -1.17515 1.19341 -1.50857 0.166792 0.669407 0.72393 + -1.16047 1.17898 -1.51187 0.726234 0.6837 0.0716787 + -1.14895 1.16741 -1.52325 0.744014 0.665116 0.0637527 + -1.13354 1.15178 -1.54357 0.741743 0.66919 0.0447282 + -1.20004 1.22305 -1.54884 -0.245882 0.825386 0.508213 + -1.22353 1.20559 -1.54599 -0.492435 0.631944 0.59846 + -1.1988 1.18236 -1.51373 -0.413272 0.316245 0.853929 + -1.17096 1.17815 -1.50282 -0.236947 0.209962 0.948563 + -1.13805 1.15763 -1.49276 0.478373 0.620586 0.621315 + -1.2268 1.23779 -1.60672 -0.462326 0.854276 0.237628 + -1.2503 1.22033 -1.60387 -0.595991 0.753614 0.277239 + -1.26994 1.18244 -1.56291 -0.607054 0.584953 0.53788 + -1.24521 1.15922 -1.53065 -0.467365 0.262882 0.844075 + -1.2237 1.24384 -1.6464 -0.351053 0.935219 0.0461254 + -1.25515 1.22844 -1.65651 -0.595962 0.800467 0.0638908 + -1.27484 1.19579 -1.60417 -0.685577 0.687122 0.240517 + -1.21478 1.24832 -1.69966 -0.218898 0.975726 -0.0064918 + -1.24624 1.23292 -1.70978 -0.563604 0.821039 -0.0908034 + -1.27969 1.20389 -1.65681 -0.731631 0.680197 0.045267 + -1.30767 1.16744 -1.61603 -0.748444 0.646171 0.149315 + -1.15936 1.24648 -1.6915 0.0740504 0.994067 0.0796742 + -1.19986 1.24786 -1.719 0.135244 0.981135 0.13814 + -1.19101 1.25262 -1.75145 -0.245512 0.969061 -0.0253769 + -1.22682 1.23532 -1.76812 -0.520721 0.822891 -0.227374 + -1.27636 1.20376 -1.71496 -0.724124 0.678678 -0.122643 + -1.14441 1.24339 -1.68242 0.475142 0.795742 0.375546 + -1.14064 1.24395 -1.68931 0.632451 0.766567 -0.111269 + -1.15559 1.24705 -1.69839 0.233247 0.968775 0.0840832 + -1.14674 1.25181 -1.73084 0.124247 0.938051 0.323456 + -1.14005 1.23548 -1.6827 0.773546 0.460447 0.435449 + -1.1216 1.21657 -1.69108 0.683372 0.55418 0.475276 + -1.11538 1.23673 -1.7187 0.460284 0.699311 0.546903 + -1.12011 1.26981 -1.78105 0.0104717 0.993792 0.110756 + -1.12101 1.20809 -1.68446 0.735095 0.457936 0.49993 + -1.08343 1.1595 -1.69198 0.731326 0.491405 0.472951 + -1.0772 1.17965 -1.71961 0.780871 0.436186 0.447193 + -1.08338 1.23484 -1.76714 0.861807 0.388328 0.326329 + -1.08874 1.25473 -1.76892 0.693427 0.627103 0.354825 + -1.12257 1.19901 -1.67431 0.765491 0.439672 0.4698 + -1.08845 1.16054 -1.68583 0.702295 0.491362 0.515116 + -1.10764 1.15354 -1.6541 0.743204 0.493837 0.451412 + -1.09001 1.15145 -1.67567 0.666241 0.516837 0.53759 + -1.07935 1.13428 -1.67115 0.558308 0.73313 0.388346 + -1.06831 1.13347 -1.6858 0.559514 0.731183 0.390275 + -1.12523 1.17286 -1.63994 0.843722 0.440262 0.307087 + -1.10786 1.13774 -1.63375 0.676676 0.692175 0.251005 + -1.09697 1.13638 -1.64958 0.572945 0.733106 0.366456 + -1.09287 1.13322 -1.6451 0.234372 0.967523 0.0947054 + -1.07244 1.1308 -1.6701 0.214581 0.972135 0.0943862 + -1.10917 1.13841 -1.6301 0.744588 0.64682 0.164962 + -1.10375 1.13459 -1.62927 0.313406 0.946367 0.0785241 + -1.11518 1.14157 -1.61069 0.795907 0.588065 0.143917 + -1.10792 1.13486 -1.61614 0.396428 0.916976 0.0447292 + -1.09318 1.13501 -1.59889 -0.0225756 0.998791 -0.0436686 + -1.06772 1.13385 -1.63014 -0.0166203 0.996653 -0.0800437 + -1.12508 1.14782 -1.57819 0.802741 0.578767 0.143649 + -1.11393 1.13803 -1.59673 0.516961 0.854926 0.0430419 + -1.09734 1.13528 -1.58575 0.00605762 0.999704 -0.0235447 + -1.05145 1.14076 -1.55772 0.0269644 0.997118 0.0709071 + -1.026 1.1396 -1.58897 0.0133328 0.998487 -0.0533424 + -1.13034 1.15099 -1.56329 0.768774 0.601694 0.216682 + -1.12257 1.14348 -1.56836 0.685363 0.723943 0.0786301 + -1.11314 1.13602 -1.57487 0.342866 0.939144 0.0212346 + -1.10211 1.13791 -1.52383 0.0537726 0.994806 0.0864288 + -1.13097 1.14954 -1.55934 0.581345 0.772665 0.255004 + -1.12783 1.14665 -1.55347 0.646818 0.76134 0.0445799 + -1.12178 1.14147 -1.54651 0.60311 0.797592 0.0102085 + -1.11791 1.13865 -1.51295 0.427715 0.898547 0.0983524 + -1.1046 1.13139 -1.49304 0.434298 0.415728 0.799096 + -1.1304 1.14888 -1.5377 0.672577 0.739937 -0.01153 + -1.12653 1.14606 -1.50415 0.775354 0.591616 0.220947 + -1.13386 1.14237 -1.48701 0.221928 0.293768 0.929757 + -1.11446 1.10698 -1.49489 0.29937 -0.314541 0.9008 + -1.05394 1.13424 -1.52692 0.428142 0.558098 0.710789 + -1.14372 1.11795 -1.48887 -0.186679 -0.223078 0.956759 + -1.12869 1.08069 -1.50374 0.232113 -0.536397 0.81142 + -1.09287 1.10325 -1.50889 0.492498 -0.3841 0.780969 + -1.03235 1.13051 -1.54092 0.552382 0.337196 0.762347 + -0.999891 1.13813 -1.5774 0.481411 0.796235 0.366406 + -1.17155 1.12216 -1.49978 -0.30745 -0.0241445 0.951258 + -1.17813 1.08863 -1.50066 -0.136299 -0.130837 0.98199 + -1.17566 1.04028 -1.52032 0.171254 -0.555759 0.813513 + -1.05405 1.09393 -1.54388 0.439416 -0.581948 0.684288 + -1.01822 1.11649 -1.54903 0.625466 -0.141629 0.76729 + -1.25178 1.12568 -1.53153 -0.390272 0.0428611 0.919701 + -1.2251 1.04822 -1.51723 -0.21691 -0.174327 0.9605 + -1.26669 0.996962 -1.53783 -0.257195 -0.133228 0.957132 + -1.15987 1.02611 -1.5406 0.331425 -0.504712 0.797134 + -1.28649 1.12987 -1.54719 -0.534693 0.204524 0.819922 + -1.2598 1.05241 -1.5329 -0.440201 -0.00444185 0.897888 + -1.30278 1.15409 -1.57476 -0.672972 0.52839 0.517602 + -1.31696 1.10538 -1.56332 -0.643491 0.133371 0.753745 + -1.32384 1.04994 -1.56825 -0.636775 -0.00811588 0.771007 + -1.33324 1.12961 -1.59089 -0.837511 0.404491 0.367372 + -1.35127 1.06406 -1.60065 -0.9218 0.108571 0.372151 + -1.3307 0.948515 -1.57777 -0.655872 -0.0559886 0.752793 + -1.33758 1.12621 -1.6301 -0.909445 0.414581 0.032126 + -1.35561 1.06066 -1.63986 -0.987661 0.155767 0.0161997 + -1.36051 0.965594 -1.63921 -0.999318 0.0347534 0.0124411 + -1.35813 0.962637 -1.61017 -0.92529 0.0114431 0.379088 + -1.30765 1.16858 -1.66663 -0.79448 0.607075 -0.0161678 + -1.33756 1.12735 -1.6807 -0.909474 0.413124 -0.0467562 + -1.353 1.05999 -1.68694 -0.986757 0.139214 -0.083241 + -1.30432 1.16844 -1.72478 -0.784255 0.599512 -0.159781 + -1.33158 1.12212 -1.74451 -0.892684 0.393691 -0.219369 + -1.34702 1.05476 -1.75074 -0.965512 0.104425 -0.2385 + -1.3467 0.967896 -1.74254 -0.955544 -0.0526543 -0.290109 + -1.35789 0.964919 -1.68628 -0.991809 0.0181614 -0.126428 + -1.25695 1.20615 -1.7733 -0.691642 0.673097 -0.261861 + -1.28331 1.16656 -1.78776 -0.753806 0.587742 -0.29383 + -1.31057 1.12024 -1.80749 -0.837042 0.364792 -0.407784 + -1.32535 1.05232 -1.80703 -0.887057 0.0773299 -0.455137 + -1.19359 1.23505 -1.82475 -0.419456 0.854243 -0.307125 + -1.22478 1.21164 -1.8386 -0.582233 0.722302 -0.373208 + -1.25114 1.17205 -1.85306 -0.701379 0.518325 -0.489292 + -1.26801 1.1126 -1.87214 -0.745186 0.26811 -0.610586 + -1.28279 1.04467 -1.87168 -0.763994 0.0206289 -0.644893 + -1.15778 1.25235 -1.80808 -0.310736 0.925767 -0.215405 + -1.13853 1.24819 -1.84913 -0.215625 0.874465 -0.434531 + -1.16126 1.22772 -1.86882 -0.294339 0.773852 -0.560819 + -1.19245 1.20432 -1.88267 -0.40641 0.656733 -0.635242 + -1.21375 1.16608 -1.89675 -0.521956 0.457768 -0.719729 + -1.10086 1.26565 -1.8221 0.078099 0.936389 -0.342164 + -1.10685 1.23112 -1.87862 0.137703 0.772327 -0.62012 + -1.12959 1.21066 -1.89831 -0.109243 0.611496 -0.78367 + -1.16024 1.18686 -1.90753 -0.181874 0.482633 -0.856731 + -1.18154 1.14862 -1.92161 -0.221684 0.362805 -0.905112 + -1.08652 1.26484 -1.8125 0.662975 0.739671 -0.115547 + -1.09251 1.23031 -1.86901 0.523146 0.726083 -0.446231 + -1.08924 1.199 -1.90521 0.226763 0.361181 -0.904504 + -1.1199 1.1752 -1.91443 0.0693779 0.255317 -0.964365 + -1.12806 1.14005 -1.92234 0.143658 0.236854 -0.960865 + -1.08115 1.24495 -1.81071 0.913911 0.403845 -0.0409388 + -1.07628 1.23323 -1.82709 0.716987 0.673658 -0.179208 + -1.08764 1.2186 -1.8854 -0.0570125 0.793379 -0.606052 + -1.06864 1.19837 -1.89783 0.479789 0.439876 -0.759152 + -1.07014 1.21301 -1.77236 0.885817 0.393767 0.24551 + -1.06911 1.22632 -1.80518 0.872861 0.475095 0.111347 + -1.05986 1.21106 -1.85611 0.805129 0.593015 -0.0100665 + -1.06703 1.21797 -1.87802 0.62398 0.680078 -0.384894 + -1.06396 1.15782 -1.72483 0.827478 0.429376 0.361824 + -1.05999 1.17763 -1.76494 0.910434 0.353712 0.21447 + -1.05896 1.19094 -1.79776 0.929684 0.342674 0.135138 + -1.05943 1.14206 -1.71456 0.366442 0.819707 0.440228 + -1.05545 1.16187 -1.75467 0.590011 0.717794 0.369674 + -1.05414 1.17831 -1.79423 0.653776 0.706785 0.270245 + -1.05504 1.19843 -1.85259 0.541744 0.647105 0.53644 + -1.06328 1.13243 -1.69196 0.321215 0.903325 0.284297 + -1.05648 1.14191 -1.71326 -0.373283 0.869794 0.322675 + -1.05115 1.15936 -1.75153 -0.231955 0.894033 0.383278 + -1.04984 1.1758 -1.7911 0.138394 0.940918 0.309065 + -1.06034 1.13228 -1.69065 -0.0676292 0.936335 0.344534 + -1.04408 1.15099 -1.71148 -0.525715 0.74924 0.40282 + -1.03874 1.16844 -1.74975 -0.590614 0.781073 0.202731 + -1.03559 1.17519 -1.79432 -0.106554 0.992456 0.0606458 + -1.04079 1.19782 -1.85581 0.622197 0.782675 -0.0170445 + -1.0614 1.12998 -1.68476 0.128998 0.96563 0.225652 + -1.03405 1.1332 -1.68362 -0.214049 0.838197 0.501606 + -1.03005 1.14648 -1.69451 -0.391976 0.650539 0.650502 + -1.00964 1.18895 -1.7286 -0.388124 0.874277 0.291546 + -1.00648 1.1957 -1.77317 -0.1889 0.97201 -0.139694 + -1.04729 1.13142 -1.65514 -0.0217426 0.996611 -0.0793298 + -1.03512 1.1309 -1.67772 -0.09636 0.98406 0.149465 + -0.986618 1.13712 -1.671 -0.200551 0.802443 0.562019 + -0.982616 1.1504 -1.68189 -0.144633 0.674377 0.724084 + -0.995607 1.18444 -1.71163 -0.203481 0.773205 0.600623 + -0.999435 1.13483 -1.64199 0.0095085 0.998627 -0.051512 + -0.98726 1.13431 -1.66458 -0.0946696 0.976705 0.192575 + -0.961984 1.1384 -1.66464 0.176129 0.824478 0.537786 + -0.960015 1.15492 -1.68632 0.244961 0.722833 0.646147 + -0.973007 1.18895 -1.71607 0.162 0.881003 0.44451 + -0.973326 1.13336 -1.63041 0.460189 0.8677 0.187942 + -0.962626 1.13559 -1.65822 0.419187 0.849423 0.320568 + -1.04301 1.16369 -1.89506 0.641505 0.209774 -0.737879 + -1.05117 1.12854 -1.90297 0.46863 0.0867594 -0.879124 + -1.01517 1.16314 -1.85303 0.560835 0.672519 -0.482889 + -0.988936 1.16213 -1.8385 0.40744 0.716395 -0.566366 + -0.977838 1.14693 -1.8422 0.723758 0.222992 -0.65303 + -0.998882 1.12702 -1.86773 0.690737 0.0460577 -0.721638 + -1.07232 1.0927 -1.91396 0.428812 -0.130145 -0.89397 + -0.980251 1.19469 -1.75863 0.12658 0.989644 -0.0676923 + -0.94695 1.18602 -1.7729 0.48833 0.832204 -0.262622 + -0.935851 1.17081 -1.7766 0.878816 0.325905 -0.348523 + -0.935857 1.13387 -1.77346 0.92725 -0.19477 -0.319799 + -0.956901 1.11396 -1.79899 0.821214 -0.339429 -0.45869 + -0.939705 1.18028 -1.73033 0.675076 0.686576 0.269973 + -0.931083 1.16012 -1.73146 0.960105 0.197341 0.198129 + -0.931089 1.12317 -1.72831 0.980433 -0.174479 0.091144 + -0.961336 1.05217 -1.72489 0.895242 -0.440978 -0.0638771 + -0.957499 1.15374 -1.6868 0.63839 0.543671 0.544868 + -0.948877 1.13357 -1.68792 0.894693 0.164174 0.415416 + -0.9502 1.09972 -1.68082 0.931964 -0.189302 0.309205 + -0.980447 1.02872 -1.6774 0.856722 -0.427014 0.289285 + -0.959468 1.13722 -1.66512 0.757239 0.449467 0.473888 + -0.958693 1.12583 -1.66401 0.923881 0.0713782 0.375965 + -0.960016 1.09198 -1.65691 0.935204 -0.231583 0.267885 + -1.00444 1.01455 -1.64558 0.757798 -0.465029 0.4577 + -1.03712 0.93285 -1.67943 0.807823 -0.506017 0.302273 + -0.961898 1.13456 -1.65811 0.8641 0.342155 0.369136 + -0.961123 1.12317 -1.657 0.93835 0.0745864 0.337544 + -0.966322 1.11954 -1.63973 0.943453 0.125872 0.30668 + -0.965214 1.08835 -1.63965 0.922635 -0.248744 0.294739 + -0.972599 1.13233 -1.6303 0.852504 0.403099 0.332789 + -0.979487 1.11131 -1.59494 0.883959 -0.0678965 0.462608 + -0.992963 1.08999 -1.58691 0.679336 -0.410759 0.608095 + -0.97869 1.06703 -1.63161 0.808976 -0.460306 0.365617 + -0.985764 1.1241 -1.58551 0.819341 0.247266 0.517242 + -1.03826 1.07976 -1.56416 0.446988 -0.513588 0.732413 + -1.02023 1.03424 -1.60761 0.592786 -0.493577 0.636385 + -1.06552 1.02402 -1.58486 0.431567 -0.465307 0.772812 + -1.1043 0.977292 -1.58919 0.430605 -0.403009 0.807566 + -1.04598 0.98177 -1.62157 0.593446 -0.47395 0.650533 + -1.08365 0.92021 -1.6318 0.484688 -0.463338 0.741886 + -1.06112 0.918685 -1.64761 0.650244 -0.484492 0.585192 + -1.19864 0.979392 -1.54493 0.212781 -0.24088 0.946943 + -1.21682 0.926985 -1.55393 0.249666 -0.307984 0.918048 + -1.14197 0.915734 -1.59942 0.445605 -0.417303 0.792019 + -1.28486 0.944555 -1.54683 -0.292539 -0.120495 0.948632 + -1.29003 0.878772 -1.56184 -0.235722 -0.31146 0.920558 + -1.24364 0.873129 -1.56804 0.22376 -0.41958 0.879707 + -1.1688 0.861879 -1.61352 0.511217 -0.572815 0.640734 + -1.33586 0.882732 -1.59277 -0.6367 -0.158724 0.754599 + -1.3311 0.828058 -1.60292 -0.506381 -0.235732 0.829463 + -1.29043 0.824147 -1.59318 -0.0849646 -0.394886 0.914793 + -1.24404 0.818505 -1.59938 0.313648 -0.456375 0.832674 + -1.36025 0.886229 -1.61648 -0.900588 -0.0728978 0.428518 + -1.35549 0.831554 -1.62663 -0.843479 -0.0971261 0.528308 + -1.36057 0.765387 -1.63744 -0.802727 -0.0312921 0.595525 + -1.33929 0.763181 -1.62236 -0.42135 -0.169906 0.89084 + -1.29862 0.759271 -1.61262 -0.0593078 -0.262465 0.963117 + -1.36263 0.889184 -1.64552 -0.999225 0.0302591 -0.0251901 + -1.36415 0.834711 -1.65179 -0.996871 0.0135084 0.0778825 + -1.36923 0.768544 -1.66259 -0.992765 0.0931242 0.0758048 + -1.35755 0.891501 -1.68179 -0.981983 -0.00598264 -0.188876 + -1.35907 0.837027 -1.68806 -0.940961 0.0707402 -0.331041 + -1.36453 0.767713 -1.6887 -0.933128 0.12783 -0.336053 + -1.37998 0.688661 -1.67276 -0.986713 0.147294 0.0685649 + -1.34636 0.894477 -1.73805 -0.846224 -0.129515 -0.516847 + -1.3389 0.837203 -1.72269 -0.792548 -0.0575711 -0.607086 + -1.34436 0.767888 -1.72333 -0.747919 0.110828 -0.654473 + -1.36143 0.682262 -1.7248 -0.748795 0.126558 -0.650607 + -1.37528 0.68783 -1.69886 -0.922368 0.161823 -0.350787 + -1.32271 0.888801 -1.75658 -0.475248 -0.267235 -0.838287 + -1.31525 0.831528 -1.74122 -0.391519 -0.128805 -0.91111 + -1.32367 0.764451 -1.74011 -0.380362 0.0609298 -0.922828 + -1.31465 0.889273 -1.76194 -0.76204 -0.580068 -0.287778 + -1.28797 0.866962 -1.73616 0.258117 -0.439166 -0.860528 + -1.28675 0.827511 -1.74491 0.248239 0.0274827 -0.968309 + -1.29517 0.760435 -1.74379 0.126475 -0.0316701 -0.991464 + -1.31543 0.895608 -1.78808 -0.883307 -0.348088 -0.314012 + -1.27992 0.832313 -1.76981 -0.964941 -0.20549 0.163289 + -1.27991 0.867435 -1.74151 -0.589249 -0.786826 0.183549 + -1.25538 0.857214 -1.71958 0.433939 -0.370166 -0.821385 + -1.32503 0.965453 -1.79882 -0.882958 -0.118448 -0.454264 + -1.2885 0.895743 -1.82849 -0.752232 -0.272463 -0.599926 + -1.26984 0.839253 -1.81832 -0.793728 -0.203505 -0.57322 + -1.2807 0.838646 -1.79595 -0.925832 -0.275072 -0.259172 + -1.2981 0.965589 -1.83923 -0.774983 -0.144185 -0.615314 + -1.26695 0.894931 -1.8507 -0.594654 -0.273573 -0.756006 + -1.24829 0.838441 -1.84053 -0.616306 -0.186162 -0.765187 + -1.25826 0.763103 -1.82955 -0.652943 0.0485137 -0.755852 + -1.26993 0.764796 -1.81515 -0.835315 0.0870977 -0.542828 + -1.24683 1.04103 -1.90683 -0.579888 -0.078901 -0.810866 + -1.26214 0.961948 -1.87438 -0.582076 -0.219862 -0.782847 + -1.23521 0.892172 -1.86625 -0.265912 -0.28973 -0.919428 + -1.23163 0.837205 -1.85103 -0.283736 -0.199385 -0.937944 + -1.24161 0.761868 -1.84005 -0.304829 -0.0524921 -0.950959 + -1.23062 1.10662 -1.91583 -0.562408 0.209926 -0.799768 + -1.20421 1.03673 -1.9268 -0.219289 -0.219022 -0.950759 + -1.23039 0.959189 -1.88993 -0.254691 -0.320733 -0.912284 + -1.20377 0.888107 -1.86701 0.0862194 -0.299128 -0.95031 + -1.188 1.10233 -1.93581 -0.199873 0.123153 -0.972051 + -1.15876 1.03287 -1.92612 0.13594 -0.327879 -0.934888 + -1.18494 0.955324 -1.88926 0.107907 -0.402031 -0.909245 + -1.13452 1.09375 -1.93653 0.180881 0.00568228 -0.983489 + -1.09656 1.03181 -1.90356 0.446193 -0.406472 -0.797303 + -1.13972 0.947954 -1.87361 0.402614 -0.437176 -0.804226 + -1.15854 0.880738 -1.85136 0.417151 -0.295916 -0.859313 + -1.04309 1.03272 -1.86026 0.649039 -0.459616 -0.606219 + -1.08625 0.948863 -1.83031 0.612569 -0.45869 -0.64371 + -1.12481 0.87388 -1.82472 0.645294 -0.321917 -0.692795 + -1.16808 0.828247 -1.84439 0.405757 -0.224436 -0.885996 + -1.20019 0.833142 -1.85179 0.0821968 -0.211977 -0.973812 + -1.02003 1.09118 -1.87873 0.652416 -0.306213 -0.693244 + -0.979965 1.0555 -1.78051 0.807229 -0.44619 -0.386389 + -1.04295 0.938143 -1.77506 0.769567 -0.458511 -0.444449 + -1.0815 0.863159 -1.76947 0.779966 -0.454658 -0.430046 + -1.02432 0.934806 -1.71944 0.867248 -0.497598 -0.0166589 + -1.07187 0.858508 -1.73225 0.820758 -0.570805 -0.0231943 + -1.12004 0.816937 -1.78948 0.818467 -0.401411 -0.411072 + -1.13435 0.821389 -1.81775 0.729012 -0.276011 -0.626386 + -1.08468 0.856552 -1.69225 0.725396 -0.61261 0.313864 + -1.11669 0.810805 -1.72692 0.740051 -0.617224 0.267132 + -1.11041 0.812285 -1.75226 0.821316 -0.566217 -0.0695551 + -1.15065 0.7456 -1.76694 0.878009 -0.478635 -0.00302057 + -1.15429 0.746264 -1.79033 0.849647 -0.425348 -0.311735 + -1.09781 0.856221 -1.66961 0.564729 -0.625645 0.538191 + -1.12983 0.810472 -1.70429 0.596127 -0.63071 0.496827 + -1.16417 0.74514 -1.72641 0.688353 -0.475692 0.547619 + -1.15693 0.74412 -1.7416 0.817737 -0.497499 0.289486 + -1.12035 0.857744 -1.65381 0.210287 -0.553266 0.806025 + -1.14075 0.811055 -1.6949 0.286026 -0.604535 0.743456 + -1.17509 0.745721 -1.71702 0.425244 -0.389938 0.816771 + -1.14508 0.857131 -1.65365 0.185317 -0.774849 0.604373 + -1.16548 0.81044 -1.69474 0.0133857 -0.469183 0.883 + -1.1907 0.748059 -1.71192 0.149476 -0.258656 0.954334 + -1.21592 0.662056 -1.72454 0.442536 -0.276745 0.85298 + -1.15275 0.856415 -1.64339 0.518608 -0.821939 0.235503 + -1.18493 0.849387 -1.68039 -0.296294 -0.760227 0.578156 + -1.19112 0.813612 -1.69258 -0.260851 -0.283671 0.922761 + -1.21634 0.751233 -1.70976 -0.130893 -0.128592 0.983021 + -1.2038 0.80959 -1.64923 0.816235 -0.526653 0.23748 + -1.19259 0.848672 -1.67012 0.533736 -0.749676 -0.391296 + -1.21685 0.851241 -1.69701 -0.205818 -0.924368 0.32122 + -1.22304 0.815468 -1.70921 -0.534893 -0.078298 0.841284 + -1.23805 0.754552 -1.71673 -0.456727 0.0331711 0.888988 + -1.21985 0.815055 -1.61937 0.579261 -0.552402 0.599423 + -1.24668 0.751744 -1.6372 0.65626 -0.420439 0.626541 + -1.23437 0.748589 -1.65778 0.83242 -0.434956 0.343353 + -1.1988 0.810177 -1.67648 0.923295 -0.245162 -0.295673 + -1.27087 0.755194 -1.61721 0.33568 -0.362953 0.869244 + -1.29516 0.680623 -1.63684 0.356918 -0.302108 0.883934 + -1.27825 0.67452 -1.65169 0.664624 -0.3768 0.64521 + -1.26595 0.671366 -1.67227 0.838794 -0.410489 0.357664 + -1.22937 0.749173 -1.68503 0.917546 -0.35948 -0.169954 + -1.32291 0.684698 -1.63226 -0.0565957 -0.176729 0.982631 + -1.34395 0.612136 -1.64165 -0.0384887 -0.0723164 0.996639 + -1.3278 0.606846 -1.64451 0.361937 -0.225801 0.904442 + -1.31089 0.600744 -1.65936 0.662737 -0.347735 0.66322 + -1.35212 0.687546 -1.639 -0.411111 -0.0666491 0.909145 + -1.37316 0.614981 -1.64839 -0.411776 0.0551519 0.909614 + -1.38826 0.545838 -1.64715 -0.41253 -0.000709895 0.910944 + -1.37589 0.541235 -1.64422 -0.0791485 -0.11612 0.990077 + -1.35974 0.535943 -1.64708 0.303378 -0.251926 0.918964 + -1.3734 0.68975 -1.65408 -0.805994 0.0598112 0.588894 + -1.38608 0.61591 -1.65754 -0.79111 0.145988 0.593997 + -1.40118 0.546766 -1.6563 -0.791716 0.0694493 0.606929 + -1.39819 0.503755 -1.65766 -0.618787 -0.395946 0.678476 + -1.38582 0.499151 -1.65473 -0.133645 -0.54085 0.830434 + -1.39266 0.61482 -1.67623 -0.983018 0.173513 0.0597387 + -1.4047 0.544119 -1.66455 -0.98952 0.0496573 0.135587 + -1.40171 0.501108 -1.66591 -0.874062 -0.442184 0.201219 + -1.39721 0.492211 -1.67724 -0.732737 -0.647838 -0.208333 + -1.39059 0.610268 -1.69228 -0.933316 0.131539 -0.334094 + -1.40264 0.539568 -1.6806 -0.965288 0.018016 -0.260567 + -1.39814 0.53067 -1.69193 -0.843184 -0.101343 -0.527987 + -1.37674 0.604702 -1.71822 -0.76852 0.0508278 -0.637804 + -1.36507 0.59865 -1.72853 -0.434249 -0.103099 -0.894873 + -1.38647 0.524618 -1.70224 -0.526548 -0.260895 -0.809124 + -1.37838 0.519222 -1.70333 -0.083132 -0.473219 -0.877013 + -1.38912 0.486813 -1.67833 -0.229277 -0.925448 -0.301625 + -1.34073 0.678825 -1.74158 -0.384824 0.0306201 -0.922482 + -1.3448 0.594307 -1.7314 0.0631948 -0.274048 -0.959638 + -1.32047 0.67448 -1.74446 0.0937599 -0.105011 -0.990041 + -1.32986 0.59129 -1.72547 0.436207 -0.387375 -0.812197 + -1.36343 0.516208 -1.69739 0.366982 -0.587052 -0.721591 + -1.37942 0.486098 -1.66976 0.209021 -0.969626 0.127025 + -1.27009 0.75642 -1.73415 0.505485 -0.107906 -0.856061 + -1.29539 0.670466 -1.73482 0.488378 -0.22358 -0.843504 + -1.30815 0.589689 -1.70631 0.711051 -0.461767 -0.530263 + -1.35373 0.515493 -1.68883 0.616047 -0.636111 -0.464596 + -1.25415 0.817762 -1.72833 0.574157 0.0596323 -0.816571 + -1.24023 0.75033 -1.70818 0.772867 -0.203311 -0.601116 + -1.27368 0.668865 -1.71566 0.742142 -0.314891 -0.591667 + -1.30116 0.591384 -1.69213 0.870314 -0.485337 -0.0836741 + -1.34673 0.517187 -1.67464 0.777869 -0.626086 0.0541774 + -1.22429 0.811672 -1.70237 0.682156 -0.0598078 -0.728756 + -1.26282 0.667708 -1.69251 0.906823 -0.40609 -0.112972 + -1.30428 0.59504 -1.67189 0.815265 -0.427575 0.390541 + -1.34704 0.522626 -1.66585 0.734782 -0.502853 0.455229 + -1.21809 0.850167 -1.696 0.526666 -0.446044 -0.723649 + -1.25413 0.858289 -1.72059 0.208099 -0.786046 -0.582088 + -1.35365 0.528329 -1.65332 0.556322 -0.412501 0.721352 + -1.37972 0.491535 -1.66098 0.124974 -0.762276 0.635072 + -1.24979 0.66784 -1.71765 -0.112638 -0.0326382 0.9931 + -1.23153 0.664393 -1.71944 0.176531 -0.155192 0.971984 + -1.2715 0.671159 -1.72463 -0.450643 0.109135 0.886008 + -1.29816 0.588448 -1.72706 -0.443615 0.119314 0.88824 + -1.28508 0.586268 -1.72283 -0.113897 -0.00515318 0.993479 + -1.26683 0.582821 -1.72462 0.184181 -0.129991 0.974258 + -1.25756 0.580225 -1.72786 0.446164 -0.251055 0.859017 + -1.28955 0.672873 -1.73814 -0.674392 0.189741 0.713578 + -1.31621 0.590162 -1.74058 -0.685128 0.197335 0.701184 + -1.33453 0.50927 -1.73622 -0.693294 0.0812979 0.716054 + -1.32646 0.508505 -1.73018 -0.464583 0.0186473 0.885333 + -1.31338 0.506325 -1.72595 -0.129231 -0.101578 0.986398 + -1.26296 0.759495 -1.73507 -0.68021 0.13025 0.721353 + -1.27643 0.761618 -1.75234 -0.86222 0.148656 0.48423 + -1.30303 0.674996 -1.75542 -0.862277 0.245344 0.44304 + -1.32451 0.590198 -1.75123 -0.867476 0.231661 0.440248 + -1.24795 0.820411 -1.72754 -0.624756 -0.0924609 0.775327 + -1.27373 0.829557 -1.74847 -0.8414 -0.121963 0.52647 + -1.28262 0.764374 -1.77369 -0.983958 0.150091 0.0964282 + -1.30777 0.674078 -1.7713 -0.961895 0.259908 0.0848916 + -1.32925 0.58928 -1.76711 -0.971299 0.226082 0.0739249 + -1.25413 0.858289 -1.72059 -0.61572 -0.238468 0.751013 + -1.28079 0.764191 -1.79278 -0.955152 0.134387 -0.263863 + -1.30594 0.673894 -1.79039 -0.934884 0.230209 -0.270178 + -1.32841 0.587097 -1.77896 -0.947175 0.175993 -0.268117 + -1.34511 0.507897 -1.75403 -0.990582 0.0831378 0.108793 + -1.34282 0.509307 -1.74687 -0.886829 0.110661 0.448652 + -1.29853 0.670716 -1.80716 -0.827046 0.17455 -0.534348 + -1.321 0.583919 -1.79573 -0.84331 0.108462 -0.526368 + -1.34128 0.502486 -1.77348 -0.879601 -0.0519997 -0.472861 + -1.34427 0.505713 -1.76588 -0.972061 0.0335479 -0.23232 + -1.28687 0.669023 -1.82156 -0.660963 0.100971 -0.743594 + -1.31422 0.580905 -1.80472 -0.683627 0.0211274 -0.729525 + -1.3345 0.499472 -1.78246 -0.727215 -0.133726 -0.673257 + -1.34018 0.460173 -1.75922 -0.721267 -0.662777 -0.201248 + -1.34317 0.463401 -1.75163 -0.83499 -0.535898 0.124922 + -1.27515 0.666054 -1.82951 -0.330546 -0.033392 -0.943199 + -1.3025 0.577936 -1.81267 -0.353727 -0.124803 -0.926985 + -1.3295 0.496792 -1.78609 -0.421067 -0.291774 -0.858819 + -1.33518 0.457491 -1.76285 -0.387157 -0.813576 -0.433825 + -1.32506 0.454956 -1.76054 0.126224 -0.945408 -0.300452 + -1.22073 0.758715 -1.84149 0.0617394 -0.146667 -0.987257 + -1.25427 0.662903 -1.83094 0.0529423 -0.17021 -0.983985 + -1.29003 0.575013 -1.81366 0.0185095 -0.259151 -0.965659 + -1.31703 0.493869 -1.78709 -0.0330283 -0.419408 -0.907197 + -1.18862 0.753823 -1.83409 0.393387 -0.24493 -0.886147 + -1.23124 0.659392 -1.82564 0.368974 -0.283606 -0.885113 + -1.26701 0.571504 -1.80835 0.362422 -0.371118 -0.85494 + -1.30691 0.491333 -1.78477 0.284784 -0.517688 -0.806782 + -1.1686 0.750717 -1.8186 0.687829 -0.348035 -0.636995 + -1.21123 0.656288 -1.81015 0.693421 -0.398107 -0.600565 + -1.25483 0.570414 -1.79884 0.672462 -0.457695 -0.581644 + -1.29473 0.490244 -1.77525 0.630615 -0.591165 -0.50284 + -1.20059 0.656724 -1.78915 0.84698 -0.449841 -0.283315 + -1.24419 0.570849 -1.77784 0.839321 -0.487404 -0.240787 + -1.28979 0.491493 -1.7658 0.781526 -0.592364 -0.19576 + -1.32012 0.456206 -1.75109 0.339759 -0.928743 0.148326 + -1.19694 0.656058 -1.76576 0.883955 -0.464723 0.0515346 + -1.2417 0.572741 -1.76335 0.876001 -0.476175 0.0766831 + -1.2873 0.493385 -1.75131 0.809403 -0.570089 0.140946 + -1.32163 0.459255 -1.74252 0.246058 -0.835561 0.491216 + -1.33281 0.464045 -1.73842 -0.364345 -0.550672 0.751008 + -1.20104 0.658888 -1.74681 0.834271 -0.442455 0.328976 + -1.24579 0.575573 -1.74439 0.826078 -0.437528 0.355195 + -1.28881 0.496432 -1.74274 0.763788 -0.516423 0.387214 + -1.29293 0.498939 -1.73328 0.632428 -0.4608 0.622655 + -1.32487 0.461252 -1.73929 0.00788462 -0.705532 0.708634 + -1.20827 0.65991 -1.73162 0.709103 -0.393732 0.584934 + -1.24991 0.578077 -1.73494 0.704896 -0.375251 0.60192 + -1.29617 0.500936 -1.73006 0.393521 -0.330076 0.858016 + -1.30544 0.503532 -1.72682 0.146181 -0.223438 0.963694 + -1.34088 0.46481 -1.74447 -0.701639 -0.490977 0.516377 + 1.21809 0.850167 -1.696 -0.548293 -0.43388 -0.714929 + 1.21685 0.851241 -1.69701 0.197383 -0.922357 0.332112 + 1.25413 0.858289 -1.72059 -0.208099 -0.786046 -0.582088 + 1.19259 0.848672 -1.67012 -0.511167 -0.623797 -0.591258 + 1.18493 0.849387 -1.68039 0.190407 -0.815477 0.546573 + 1.22304 0.815468 -1.70921 0.518788 -0.107786 0.848081 + 1.25413 0.858289 -1.72059 0.625772 -0.225621 0.746662 + 1.25538 0.857214 -1.71958 -0.421665 -0.35137 -0.835905 + 1.25415 0.817762 -1.72833 -0.549194 0.0365944 -0.834893 + 1.22429 0.811672 -1.70237 -0.681171 -0.0501868 -0.730402 + 1.1988 0.810177 -1.67648 -0.857195 -0.332449 -0.393312 + 1.15275 0.856415 -1.64339 -0.626169 -0.72323 0.291291 + 1.27991 0.867435 -1.74151 0.569222 -0.764404 0.302774 + 1.28797 0.866962 -1.73616 -0.109099 -0.49856 -0.859962 + 1.28675 0.827511 -1.74491 -0.196893 0.0947836 -0.975833 + 1.29517 0.760435 -1.74379 -0.135655 -0.0233792 -0.99048 + 1.27009 0.75642 -1.73415 -0.499556 -0.0934479 -0.861226 + 1.24023 0.75033 -1.70818 -0.753126 -0.224603 -0.618348 + 1.31465 0.889273 -1.76194 0.710133 -0.618406 -0.336579 + 1.32271 0.888801 -1.75658 0.443989 -0.469326 -0.763287 + 1.31525 0.831528 -1.74122 0.311686 -0.0395906 -0.94936 + 1.32367 0.764451 -1.74011 0.381067 0.0621822 -0.922454 + 1.27373 0.829557 -1.74847 0.810154 -0.176227 0.559102 + 1.27992 0.832313 -1.76981 0.961408 -0.254101 0.105481 + 1.2807 0.838646 -1.79595 0.927453 -0.249346 -0.278671 + 1.31543 0.895608 -1.78808 0.913532 -0.304259 -0.269972 + 1.32503 0.965453 -1.79882 0.87695 -0.113739 -0.466928 + 1.24795 0.820411 -1.72754 0.62223 -0.0906251 0.777571 + 1.26296 0.759495 -1.73507 0.671479 0.10361 0.733744 + 1.27643 0.761618 -1.75234 0.873216 0.130011 0.469672 + 1.28262 0.764374 -1.77369 0.984603 0.141256 0.102976 + 1.23805 0.754552 -1.71673 0.443221 0.0446638 0.895299 + 1.2715 0.671159 -1.72463 0.449938 0.10697 0.886631 + 1.28955 0.672873 -1.73814 0.674795 0.189325 0.713308 + 1.30303 0.674996 -1.75542 0.862185 0.243559 0.444204 + 1.21634 0.751233 -1.70976 0.141813 -0.104214 0.984392 + 1.24979 0.66784 -1.71765 0.112364 -0.0324403 0.993137 + 1.28508 0.586268 -1.72283 0.113872 -0.00523079 0.993482 + 1.29816 0.588448 -1.72706 0.443642 0.119288 0.88823 + 1.31621 0.590162 -1.74058 0.684747 0.195752 0.701999 + 1.19112 0.813612 -1.69258 0.202745 -0.241276 0.949042 + 1.1907 0.748059 -1.71192 -0.16271 -0.248935 0.954755 + 1.23153 0.664393 -1.71944 -0.17639 -0.154736 0.972082 + 1.26683 0.582821 -1.72462 -0.184172 -0.129999 0.974259 + 1.16548 0.81044 -1.69474 0.0226165 -0.417339 0.908469 + 1.17509 0.745721 -1.71702 -0.419574 -0.369373 0.829169 + 1.21592 0.662056 -1.72454 -0.441814 -0.277283 0.853179 + 1.25756 0.580225 -1.72786 -0.446223 -0.251636 0.858816 + 1.14508 0.857131 -1.65365 -0.124138 -0.77728 0.616786 + 1.12035 0.857744 -1.65381 -0.267113 -0.640483 0.720022 + 1.14075 0.811055 -1.6949 -0.279355 -0.609574 0.741876 + 1.16417 0.74514 -1.72641 -0.690738 -0.473472 0.54654 + 1.20827 0.65991 -1.73162 -0.709149 -0.393261 0.585195 + 1.14197 0.915734 -1.59942 -0.448773 -0.443226 0.775986 + 1.08365 0.92021 -1.6318 -0.469013 -0.469758 0.7479 + 1.09781 0.856221 -1.66961 -0.556509 -0.631063 0.540424 + 1.12983 0.810472 -1.70429 -0.595984 -0.631843 0.495557 + 1.15693 0.74412 -1.7416 -0.818988 -0.492915 0.293757 + 1.1688 0.861879 -1.61352 -0.560633 -0.545675 0.622839 + 1.21682 0.926985 -1.55393 -0.255195 -0.305567 0.917335 + 1.19864 0.979392 -1.54493 -0.218822 -0.246223 0.944188 + 1.1043 0.977292 -1.58919 -0.422671 -0.407423 0.809541 + 1.04598 0.98177 -1.62157 -0.573951 -0.437501 0.692223 + 1.21985 0.815055 -1.61937 -0.576147 -0.51818 0.632095 + 1.24364 0.873129 -1.56804 -0.221803 -0.41454 0.882587 + 1.28486 0.944555 -1.54683 0.276366 -0.148209 0.949556 + 1.2038 0.80959 -1.64923 -0.736277 -0.600769 0.311404 + 1.23437 0.748589 -1.65778 -0.832457 -0.434978 0.343233 + 1.24668 0.751744 -1.6372 -0.655125 -0.421254 0.627181 + 1.24404 0.818505 -1.59938 -0.348707 -0.430911 0.832297 + 1.22937 0.749173 -1.68503 -0.906507 -0.398512 -0.139406 + 1.26282 0.667708 -1.69251 -0.9062 -0.407158 -0.114123 + 1.26595 0.671366 -1.67227 -0.836919 -0.412759 0.359439 + 1.27825 0.67452 -1.65169 -0.664823 -0.376757 0.645031 + 1.27087 0.755194 -1.61721 -0.333621 -0.357892 0.87213 + 1.27368 0.668865 -1.71566 -0.742318 -0.316019 -0.590843 + 1.30815 0.589689 -1.70631 -0.709063 -0.463714 -0.531224 + 1.30116 0.591384 -1.69213 -0.868888 -0.488436 -0.080394 + 1.30428 0.59504 -1.67189 -0.814595 -0.430454 0.388774 + 1.29539 0.670466 -1.73482 -0.48673 -0.224985 -0.844083 + 1.32986 0.59129 -1.72547 -0.436227 -0.387501 -0.812126 + 1.36343 0.516208 -1.69739 -0.366981 -0.587045 -0.721598 + 1.35373 0.515493 -1.68883 -0.616046 -0.636111 -0.464597 + 1.34673 0.517187 -1.67464 -0.777869 -0.626087 0.054178 + 1.32047 0.67448 -1.74446 -0.0934206 -0.10416 -0.990163 + 1.3448 0.594307 -1.7314 -0.0611467 -0.27569 -0.9593 + 1.37838 0.519222 -1.70333 0.0842907 -0.468101 -0.879646 + 1.38912 0.486813 -1.67833 0.225362 -0.925361 -0.304828 + 1.37942 0.486098 -1.66976 -0.211728 -0.969301 0.125008 + 1.34073 0.678825 -1.74158 0.385073 0.0304306 -0.922384 + 1.36507 0.59865 -1.72853 0.433895 -0.10473 -0.894855 + 1.38647 0.524618 -1.70224 0.520707 -0.25766 -0.813926 + 1.39721 0.492211 -1.67724 0.735598 -0.640528 -0.220498 + 1.34436 0.767888 -1.72333 0.746827 0.112378 -0.655455 + 1.36143 0.682262 -1.7248 0.74854 0.125395 -0.651125 + 1.37674 0.604702 -1.71822 0.768535 0.0509314 -0.637777 + 1.39814 0.53067 -1.69193 0.843978 -0.0967356 -0.527583 + 1.40171 0.501108 -1.66591 0.87014 -0.446797 0.207916 + 1.3389 0.837203 -1.72269 0.759674 -0.111511 -0.640673 + 1.36453 0.767713 -1.6887 0.932446 0.123349 -0.3396 + 1.37528 0.68783 -1.69886 0.922372 0.161819 -0.350778 + 1.39059 0.610268 -1.69228 0.933247 0.128924 -0.335304 + 1.40264 0.539568 -1.6806 0.963166 0.0223621 -0.267975 + 1.34636 0.894477 -1.73805 0.86535 -0.165577 -0.473027 + 1.35907 0.837027 -1.68806 0.955833 0.0249475 -0.292851 + 1.36923 0.768544 -1.66259 0.992958 0.0878036 0.0795294 + 1.37998 0.688661 -1.67276 0.986852 0.146617 0.0680247 + 1.39266 0.61482 -1.67623 0.982998 0.173677 0.0595979 + 1.3467 0.967896 -1.74254 0.960473 -0.0256225 -0.277191 + 1.35755 0.891501 -1.68179 0.986235 0.0156398 -0.164607 + 1.36263 0.889184 -1.64552 0.999993 -0.00243655 -0.00293139 + 1.36415 0.834711 -1.65179 0.994039 0.037213 0.102476 + 1.34702 1.05476 -1.75074 0.964219 0.107724 -0.242232 + 1.35789 0.964919 -1.68628 0.992226 0.0148382 -0.123562 + 1.36051 0.965594 -1.63921 0.99908 0.0394581 0.0167727 + 1.36025 0.886229 -1.61648 0.903254 -0.0813383 0.421327 + 1.35549 0.831554 -1.62663 0.849166 -0.0854645 0.521165 + 1.32535 1.05232 -1.80703 0.885253 0.0719435 -0.459513 + 1.31057 1.12024 -1.80749 0.807813 0.398079 -0.434709 + 1.33158 1.12212 -1.74451 0.89117 0.403837 -0.206715 + 1.353 1.05999 -1.68694 0.986423 0.142722 -0.0812388 + 1.35561 1.06066 -1.63986 0.988684 0.148389 0.0220381 + 1.28279 1.04467 -1.87168 0.769698 0.0132059 -0.638272 + 1.26801 1.1126 -1.87214 0.756012 0.297679 -0.582952 + 1.28331 1.16656 -1.78776 0.753863 0.573264 -0.321029 + 1.30432 1.16844 -1.72478 0.79082 0.592522 -0.153365 + 1.2981 0.965589 -1.83923 0.772878 -0.148182 -0.61701 + 1.26214 0.961948 -1.87438 0.582068 -0.220083 -0.78279 + 1.24683 1.04103 -1.90683 0.570824 -0.0947412 -0.815588 + 1.23062 1.10662 -1.91583 0.562232 0.208256 -0.800328 + 1.25114 1.17205 -1.85306 0.724346 0.49767 -0.477125 + 1.2885 0.895743 -1.82849 0.753784 -0.280068 -0.59445 + 1.26695 0.894931 -1.8507 0.592787 -0.275484 -0.756778 + 1.23039 0.959189 -1.88993 0.253063 -0.323021 -0.91193 + 1.20421 1.03673 -1.9268 0.223994 -0.222487 -0.948855 + 1.188 1.10233 -1.93581 0.196024 0.118531 -0.973409 + 1.26984 0.839253 -1.81832 0.801169 -0.1953 -0.565673 + 1.24829 0.838441 -1.84053 0.611811 -0.176999 -0.770946 + 1.23521 0.892172 -1.86625 0.265435 -0.291855 -0.918893 + 1.18494 0.955324 -1.88926 -0.114054 -0.398877 -0.909884 + 1.28079 0.764191 -1.79278 0.954485 0.125052 -0.270779 + 1.26993 0.764796 -1.81515 0.831109 0.0944805 -0.548024 + 1.25826 0.763103 -1.82955 0.656106 0.0562471 -0.75257 + 1.23163 0.837205 -1.85103 0.291033 -0.192085 -0.937232 + 1.30594 0.673894 -1.79039 0.934947 0.230086 -0.270064 + 1.29853 0.670716 -1.80716 0.826929 0.173397 -0.534903 + 1.28687 0.669023 -1.82156 0.660613 0.101342 -0.743855 + 1.24161 0.761868 -1.84005 0.301939 -0.0496857 -0.952031 + 1.20019 0.833142 -1.85179 -0.0964308 -0.198477 -0.97535 + 1.30777 0.674078 -1.7713 0.962334 0.258563 0.0840204 + 1.32925 0.58928 -1.76711 0.971405 0.225445 0.074475 + 1.32841 0.587097 -1.77896 0.947238 0.174707 -0.268732 + 1.321 0.583919 -1.79573 0.843154 0.108687 -0.526573 + 1.32451 0.590198 -1.75123 0.867958 0.230823 0.439739 + 1.34282 0.509307 -1.74687 0.886698 0.110139 0.449039 + 1.34511 0.507897 -1.75403 0.990643 0.0826856 0.108576 + 1.34427 0.505713 -1.76588 0.971849 0.0342016 -0.23311 + 1.33453 0.50927 -1.73622 0.693299 0.081291 0.71605 + 1.34088 0.46481 -1.74447 0.701632 -0.490993 0.51637 + 1.34317 0.463401 -1.75163 0.834988 -0.535899 0.124931 + 1.34128 0.502486 -1.77348 0.879749 -0.0511724 -0.472677 + 1.32646 0.508505 -1.73018 0.464579 0.0186363 0.885336 + 1.33281 0.464045 -1.73842 0.36434 -0.550687 0.750999 + 1.32487 0.461252 -1.73929 -0.00786567 -0.705549 0.708618 + 1.34018 0.460173 -1.75922 0.721272 -0.662768 -0.201258 + 1.3345 0.499472 -1.78246 0.726094 -0.132574 -0.674694 + 1.31338 0.506325 -1.72595 0.129204 -0.101559 0.986404 + 1.30544 0.503532 -1.72682 -0.146174 -0.223403 0.963703 + 1.29617 0.500936 -1.73006 -0.394578 -0.329484 0.857758 + 1.29293 0.498939 -1.73328 -0.632603 -0.459841 0.623185 + 1.32163 0.459255 -1.74252 -0.24603 -0.835576 0.491205 + 1.24991 0.578077 -1.73494 -0.702934 -0.376909 0.603178 + 1.24579 0.575573 -1.74439 -0.825597 -0.439372 0.354038 + 1.28881 0.496432 -1.74274 -0.763788 -0.516423 0.387214 + 1.2873 0.493385 -1.75131 -0.809403 -0.570089 0.140946 + 1.32012 0.456206 -1.75109 -0.339764 -0.928738 0.14834 + 1.20104 0.658888 -1.74681 -0.83228 -0.444679 0.331014 + 1.2417 0.572741 -1.76335 -0.874146 -0.479077 0.0797117 + 1.24419 0.570849 -1.77784 -0.837363 -0.48997 -0.242391 + 1.28979 0.491493 -1.7658 -0.781526 -0.592364 -0.19576 + 1.19694 0.656058 -1.76576 -0.883318 -0.466063 0.0503526 + 1.20059 0.656724 -1.78915 -0.846339 -0.45279 -0.280518 + 1.25483 0.570414 -1.79884 -0.672513 -0.459272 -0.580341 + 1.29473 0.490244 -1.77525 -0.630615 -0.591166 -0.50284 + 1.32506 0.454956 -1.76054 -0.126233 -0.945401 -0.300469 + 1.15065 0.7456 -1.76694 -0.871576 -0.49022 0.00625768 + 1.15429 0.746264 -1.79033 -0.844154 -0.43147 -0.31818 + 1.21123 0.656288 -1.81015 -0.690879 -0.400442 -0.601941 + 1.26701 0.571504 -1.80835 -0.361255 -0.372013 -0.855045 + 1.30691 0.491333 -1.78477 -0.284784 -0.517688 -0.806782 + 1.11669 0.810805 -1.72692 -0.746864 -0.610341 0.263964 + 1.11041 0.812285 -1.75226 -0.827491 -0.558442 -0.0583179 + 1.12004 0.816937 -1.78948 -0.810732 -0.443788 -0.381794 + 1.1686 0.750717 -1.8186 -0.687723 -0.344695 -0.638923 + 1.08468 0.856552 -1.69225 -0.722899 -0.621558 0.301797 + 1.07187 0.858508 -1.73225 -0.81501 -0.579183 -0.0174824 + 1.0815 0.863159 -1.76947 -0.784326 -0.452098 -0.424783 + 1.13435 0.821389 -1.81775 -0.698072 -0.302654 -0.648919 + 1.18862 0.753823 -1.83409 -0.393365 -0.244961 -0.886148 + 1.06112 0.918685 -1.64761 -0.648941 -0.505591 0.568554 + 1.03712 0.93285 -1.67943 -0.803525 -0.510116 0.306804 + 1.02432 0.934806 -1.71944 -0.861644 -0.50683 -0.0263222 + 1.04295 0.938143 -1.77506 -0.77018 -0.432909 -0.468414 + 1.12481 0.87388 -1.82472 -0.637052 -0.293299 -0.712839 + 1.00444 1.01455 -1.64558 -0.746856 -0.47727 0.463054 + 0.980447 1.02872 -1.6774 -0.856365 -0.450425 0.252501 + 0.961336 1.05217 -1.72489 -0.901465 -0.426153 -0.07586 + 0.979965 1.0555 -1.78051 -0.80676 -0.44746 -0.385897 + 1.08625 0.948863 -1.83031 -0.6332 -0.44364 -0.634224 + 1.02023 1.03424 -1.60761 -0.594641 -0.491949 0.635916 + 0.97869 1.06703 -1.63161 -0.791135 -0.441865 0.422918 + 0.965214 1.08835 -1.63965 -0.922307 -0.214208 0.321658 + 0.960016 1.09198 -1.65691 -0.943323 -0.173494 0.282914 + 0.9502 1.09972 -1.68082 -0.93635 -0.178899 0.302067 + 1.06552 1.02402 -1.58486 -0.428089 -0.457374 0.779454 + 0.992963 1.08999 -1.58691 -0.626555 -0.264091 0.73327 + 0.979487 1.11131 -1.59494 -0.843646 -0.079108 0.531039 + 0.966322 1.11954 -1.63973 -0.942605 0.107551 0.316115 + 1.15987 1.02611 -1.5406 -0.27684 -0.50029 0.820408 + 1.03826 1.07976 -1.56416 -0.472331 -0.504813 0.722542 + 0.985764 1.1241 -1.58551 -0.808884 0.152459 0.567858 + 0.972599 1.13233 -1.6303 -0.850327 0.404567 0.336556 + 1.2598 1.05241 -1.5329 0.346077 -0.101342 0.932717 + 1.2251 1.04822 -1.51723 0.302238 -0.561291 0.770458 + 1.17566 1.04028 -1.52032 -0.074169 -0.659413 0.748113 + 1.05405 1.09393 -1.54388 -0.435095 -0.581989 0.687009 + 1.01822 1.11649 -1.54903 -0.668494 -0.18548 0.720217 + 1.26669 0.996962 -1.53783 0.191982 -0.0791861 0.978199 + 1.31696 1.10538 -1.56332 0.666769 0.11968 0.735592 + 1.28649 1.12987 -1.54719 0.435305 0.353619 0.827927 + 1.25178 1.12568 -1.53153 0.431625 0.0910794 0.897443 + 1.32384 1.04994 -1.56825 0.642907 0.00888994 0.765893 + 1.33324 1.12961 -1.59089 0.818431 0.471312 0.328689 + 1.30278 1.15409 -1.57476 0.682287 0.52096 0.512919 + 1.24521 1.15922 -1.53065 0.498784 0.239579 0.832956 + 1.17813 1.08863 -1.50066 0.1363 -0.130833 0.98199 + 1.3307 0.948515 -1.57777 0.67135 -0.0722876 0.737607 + 1.35813 0.962637 -1.61017 0.923359 0.00169523 0.383934 + 1.35127 1.06406 -1.60065 0.915402 0.118461 0.384716 + 1.33758 1.12621 -1.6301 0.898998 0.43401 0.0586277 + 1.29003 0.878772 -1.56184 0.250202 -0.330333 0.910098 + 1.33586 0.882732 -1.59277 0.61858 -0.181907 0.764375 + 1.29043 0.824147 -1.59318 0.12362 -0.355734 0.926375 + 1.3311 0.828058 -1.60292 0.473589 -0.19945 0.857866 + 1.29862 0.759271 -1.61262 0.0570947 -0.26075 0.963717 + 1.33929 0.763181 -1.62236 0.432294 -0.151859 0.888853 + 1.36057 0.765387 -1.63744 0.795157 -0.0192338 0.606098 + 1.32291 0.684698 -1.63226 0.0576233 -0.174582 0.982955 + 1.35212 0.687546 -1.639 0.410493 -0.066075 0.909467 + 1.3734 0.68975 -1.65408 0.805779 0.0590131 0.589269 + 1.38608 0.61591 -1.65754 0.791353 0.145577 0.593775 + 1.29516 0.680623 -1.63684 -0.354644 -0.30368 0.884311 + 1.3278 0.606846 -1.64451 -0.362319 -0.227353 0.9039 + 1.34395 0.612136 -1.64165 0.0398257 -0.0732493 0.996518 + 1.37316 0.614981 -1.64839 0.411718 0.0550103 0.90965 + 1.40118 0.546766 -1.6563 0.792155 0.0704706 0.606238 + 1.31089 0.600744 -1.65936 -0.659093 -0.350419 0.665434 + 1.35974 0.535943 -1.64708 -0.303379 -0.251928 0.918963 + 1.37589 0.541235 -1.64422 0.0791505 -0.116121 0.990076 + 1.38826 0.545838 -1.64715 0.41253 -0.000709368 0.910944 + 1.35365 0.528329 -1.65332 -0.556322 -0.412501 0.721352 + 1.38582 0.499151 -1.65473 0.134339 -0.539775 0.831021 + 1.39819 0.503755 -1.65766 0.617782 -0.403418 0.674981 + 1.4047 0.544119 -1.66455 0.989441 0.0503563 0.135904 + 1.34704 0.522626 -1.66585 -0.734782 -0.502853 0.45523 + 1.37972 0.491535 -1.66098 -0.130943 -0.7598 0.636834 + 1.33756 1.12735 -1.6807 0.899008 0.433057 -0.0651639 + 1.30767 1.16744 -1.61603 0.751556 0.642952 0.14757 + 1.27484 1.19579 -1.60417 0.676003 0.692793 0.251113 + 1.26994 1.18244 -1.56291 0.594763 0.609173 0.524562 + 1.30765 1.16858 -1.66663 0.789852 0.613264 -0.00639229 + 1.27969 1.20389 -1.65681 0.750076 0.657762 0.06881 + 1.2503 1.22033 -1.60387 0.614372 0.724107 0.313396 + 1.22353 1.20559 -1.54599 0.490416 0.63407 0.597869 + 1.1988 1.18236 -1.51373 0.414068 0.322931 0.851037 + 1.27636 1.20376 -1.71496 0.727289 0.673415 -0.132524 + 1.25515 1.22844 -1.65651 0.599518 0.798301 0.0573963 + 1.2268 1.23779 -1.60672 0.443813 0.858264 0.257707 + 1.20004 1.22305 -1.54884 0.250062 0.813578 0.524937 + 1.25695 1.20615 -1.7733 0.709569 0.659615 -0.247832 + 1.24624 1.23292 -1.70978 0.563551 0.82102 -0.0913027 + 1.21478 1.24832 -1.69966 0.221589 0.973985 -0.0474401 + 1.2237 1.24384 -1.6464 0.380929 0.922439 0.0632341 + 1.19615 1.24703 -1.59924 0.00214134 0.971592 0.236654 + 1.22478 1.21164 -1.8386 0.583801 0.705317 -0.402125 + 1.22682 1.23532 -1.76812 0.509135 0.83909 -0.191594 + 1.19986 1.24786 -1.719 0.117689 0.993019 -0.00784904 + 1.17429 1.24694 -1.67216 -0.287387 0.954447 0.0802453 + 1.19304 1.25307 -1.63892 -0.113058 0.989083 0.0945102 + 1.21375 1.16608 -1.89675 0.525675 0.470143 -0.708965 + 1.19245 1.20432 -1.88267 0.427158 0.649849 -0.628675 + 1.19359 1.23505 -1.82475 0.382408 0.865841 -0.32262 + 1.15778 1.25235 -1.80808 0.309068 0.932818 -0.185276 + 1.19101 1.25262 -1.75145 0.222814 0.974623 -0.0215485 + 1.18154 1.14862 -1.92161 0.211974 0.368095 -0.905303 + 1.16024 1.18686 -1.90753 0.191426 0.484875 -0.853377 + 1.12959 1.21066 -1.89831 0.0964721 0.611775 -0.785127 + 1.16126 1.22772 -1.86882 0.293262 0.79612 -0.52933 + 1.13452 1.09375 -1.93653 -0.173957 0.000954272 -0.984753 + 1.12806 1.14005 -1.92234 -0.145607 0.229769 -0.962291 + 1.1199 1.1752 -1.91443 -0.0879885 0.265306 -0.960141 + 1.08924 1.199 -1.90521 -0.195084 0.408978 -0.891448 + 1.10685 1.23112 -1.87862 -0.10731 0.783951 -0.611479 + 1.15876 1.03287 -1.92612 -0.1449 -0.34348 -0.927914 + 1.07232 1.0927 -1.91396 -0.433302 -0.141605 -0.890055 + 1.05117 1.12854 -1.90297 -0.439325 0.0584886 -0.896422 + 1.04301 1.16369 -1.89506 -0.564069 0.298349 -0.769944 + 1.09656 1.03181 -1.90356 -0.430267 -0.417745 -0.800224 + 1.02003 1.09118 -1.87873 -0.662863 -0.295883 -0.687798 + 0.998882 1.12702 -1.86773 -0.717754 0.0474396 -0.694678 + 1.01517 1.16314 -1.85303 -0.622892 0.599402 -0.502715 + 1.06864 1.19837 -1.89783 -0.480862 0.453194 -0.750591 + 1.13972 0.947954 -1.87361 -0.401986 -0.434215 -0.806142 + 1.04309 1.03272 -1.86026 -0.659759 -0.491604 -0.568369 + 0.956901 1.11396 -1.79899 -0.830602 -0.345704 -0.436564 + 1.20377 0.888107 -1.86701 -0.0877738 -0.299745 -0.949973 + 1.15854 0.880738 -1.85136 -0.418316 -0.296385 -0.858584 + 1.16808 0.828247 -1.84439 -0.397459 -0.211075 -0.893014 + 1.22073 0.758715 -1.84149 -0.0593844 -0.141982 -0.988086 + 1.25427 0.662903 -1.83094 -0.052426 -0.170628 -0.98394 + 1.23124 0.659392 -1.82564 -0.368729 -0.282576 -0.885544 + 1.27515 0.666054 -1.82951 0.330582 -0.0332534 -0.943191 + 1.3025 0.577936 -1.81267 0.353378 -0.124558 -0.927151 + 1.29003 0.575013 -1.81366 -0.0180117 -0.257694 -0.966059 + 1.31703 0.493869 -1.78709 0.0330283 -0.419408 -0.907197 + 1.31422 0.580905 -1.80472 0.683558 0.0207569 -0.729601 + 1.3295 0.496792 -1.78609 0.421723 -0.289783 -0.859172 + 0.931089 1.12317 -1.72831 -0.978758 -0.194938 0.0634939 + 0.935857 1.13387 -1.77346 -0.919801 -0.247786 -0.304249 + 0.977838 1.14693 -1.8422 -0.713433 0.226004 -0.663276 + 0.931083 1.16012 -1.73146 -0.960069 0.198083 0.197561 + 0.935851 1.17081 -1.7766 -0.878816 0.325906 -0.348523 + 0.94695 1.18602 -1.7729 -0.48833 0.832204 -0.262623 + 0.988936 1.16213 -1.8385 -0.402617 0.708069 -0.580119 + 0.948877 1.13357 -1.68792 -0.892675 0.166538 0.418804 + 0.957499 1.15374 -1.6868 -0.638327 0.543842 0.54477 + 0.939705 1.18028 -1.73033 -0.675073 0.686574 0.269985 + 0.980251 1.19469 -1.75863 -0.12658 0.989644 -0.067691 + 1.00648 1.1957 -1.77317 0.157047 0.984631 -0.0764015 + 0.958693 1.12583 -1.66401 -0.923881 0.0713783 0.375965 + 0.959468 1.13722 -1.66512 -0.763965 0.448867 0.463547 + 0.961984 1.1384 -1.66464 -0.150821 0.847836 0.508357 + 0.960015 1.15492 -1.68632 -0.231263 0.714546 0.660259 + 0.973007 1.18895 -1.71607 -0.146352 0.885847 0.44029 + 0.961123 1.12317 -1.657 -0.944149 0.0637159 0.3233 + 0.961898 1.13456 -1.65811 -0.86494 0.328445 0.379478 + 0.962626 1.13559 -1.65822 -0.384087 0.851115 0.357884 + 0.98726 1.13431 -1.66458 0.0946759 0.976704 0.192577 + 0.986618 1.13712 -1.671 0.171918 0.817894 0.549084 + 0.973326 1.13336 -1.63041 -0.460195 0.867698 0.187938 + 0.999435 1.13483 -1.64199 -0.00800085 0.998667 -0.0509874 + 1.03512 1.1309 -1.67772 0.0963545 0.98406 0.149475 + 0.999891 1.13813 -1.5774 -0.449345 0.806446 0.384361 + 1.026 1.1396 -1.58897 -0.0212212 0.999774 0.00117188 + 1.04729 1.13142 -1.65514 0.0204046 0.996962 -0.0751674 + 1.0614 1.12998 -1.68476 -0.107709 0.976572 0.186297 + 1.03405 1.1332 -1.68362 0.191697 0.818682 0.541306 + 1.03235 1.13051 -1.54092 -0.497561 0.542741 0.676657 + 1.05145 1.14076 -1.55772 -0.105228 0.99035 0.0901874 + 1.06772 1.13385 -1.63014 0.00884612 0.99668 -0.0809341 + 1.07244 1.1308 -1.6701 -0.214586 0.972134 0.0943835 + 1.09287 1.10325 -1.50889 -0.492499 -0.384104 0.780967 + 1.05394 1.13424 -1.52692 -0.446676 0.563416 0.695013 + 1.10211 1.13791 -1.52383 -0.0537607 0.994807 0.0864238 + 1.09734 1.13528 -1.58575 -0.00605762 0.999704 -0.0235447 + 1.09318 1.13501 -1.59889 0.022918 0.998904 -0.0407987 + 1.12869 1.08069 -1.50374 -0.232114 -0.536396 0.81142 + 1.11446 1.10698 -1.49489 -0.29937 -0.314541 0.9008 + 1.1046 1.13139 -1.49304 -0.458934 0.390508 0.798049 + 1.11791 1.13865 -1.51295 -0.446601 0.894469 0.0217219 + 1.11314 1.13602 -1.57487 -0.342866 0.939144 0.0212346 + 1.17155 1.12216 -1.49978 0.307449 -0.0241423 0.951258 + 1.14372 1.11795 -1.48887 0.186679 -0.223078 0.956759 + 1.13386 1.14237 -1.48701 -0.186214 0.291295 0.938334 + 1.12653 1.14606 -1.50415 -0.647431 0.753133 0.116726 + 1.17096 1.17815 -1.50282 0.236949 0.209959 0.948563 + 1.13805 1.15763 -1.49276 -0.478373 0.620586 0.621315 + 1.14895 1.16741 -1.52325 -0.744014 0.665116 0.0637527 + 1.1304 1.14888 -1.5377 -0.672577 0.739937 -0.01153 + 1.12178 1.14147 -1.54651 -0.60311 0.797593 0.0102085 + 1.17515 1.19341 -1.50857 -0.165826 0.67002 0.723585 + 1.16047 1.17898 -1.51187 -0.726234 0.6837 0.0716787 + 1.15501 1.17947 -1.53944 -0.797237 0.557654 0.231161 + 1.13354 1.15178 -1.54357 -0.741743 0.66919 0.0447282 + 1.12783 1.14665 -1.55347 -0.646818 0.76134 0.0445799 + 1.18622 1.21333 -1.53064 -0.11433 0.781566 0.613256 + 1.17154 1.19889 -1.53394 -0.721351 0.623456 0.301588 + 1.18233 1.23731 -1.58105 -0.372176 0.833383 0.408606 + 1.16642 1.2016 -1.54698 -0.717277 0.584391 0.379476 + 1.15433 1.20203 -1.57527 -0.828045 0.486584 0.278528 + 1.13898 1.16529 -1.56371 -0.841731 0.46904 0.267378 + 1.1396 1.16384 -1.55976 -0.828227 0.508822 0.234821 + 1.17721 1.24002 -1.59409 -0.507342 0.841389 0.186192 + 1.16573 1.22416 -1.58282 -0.700347 0.634798 0.326414 + 1.14814 1.19983 -1.59413 -0.864127 0.455548 0.213915 + 1.13279 1.16309 -1.58257 -0.864448 0.461387 0.199629 + 1.13034 1.15099 -1.56329 -0.768774 0.601694 0.216682 + 1.16328 1.23237 -1.62663 -0.61144 0.773041 0.168965 + 1.1518 1.21652 -1.61535 -0.814916 0.539121 0.212746 + 1.12289 1.15684 -1.61507 -0.859806 0.468007 0.204214 + 1.12508 1.14782 -1.57819 -0.802741 0.578767 0.143649 + 1.14452 1.22624 -1.65987 -0.706122 0.636983 0.309264 + 1.12523 1.17286 -1.63994 -0.843051 0.441654 0.306933 + 1.12654 1.17353 -1.6363 -0.875013 0.431726 0.219009 + 1.11518 1.14157 -1.61069 -0.797432 0.584675 0.149189 + 1.15936 1.24648 -1.6915 -0.0984614 0.978831 0.179428 + 1.14441 1.24339 -1.68242 -0.331272 0.812617 0.479492 + 1.14005 1.23548 -1.6827 -0.773546 0.460447 0.435449 + 1.14016 1.21833 -1.66015 -0.806717 0.448639 0.384619 + 1.15559 1.24705 -1.69839 -0.0439641 0.990115 0.13319 + 1.14064 1.24395 -1.68931 -0.571651 0.786284 0.234463 + 1.1216 1.21657 -1.69108 -0.697917 0.530416 0.481218 + 1.12101 1.20809 -1.68446 -0.733733 0.458449 0.501458 + 1.12257 1.19901 -1.67431 -0.765486 0.439666 0.469813 + 1.14674 1.25181 -1.73084 -0.102324 0.967737 0.230249 + 1.11538 1.23673 -1.7187 -0.460284 0.699311 0.546903 + 1.08343 1.1595 -1.69198 -0.731771 0.490975 0.47271 + 1.08845 1.16054 -1.68583 -0.704059 0.484914 0.518805 + 1.12011 1.26981 -1.78105 0.0548266 0.989651 0.132607 + 1.08874 1.25473 -1.76892 -0.693427 0.627103 0.354825 + 1.08338 1.23484 -1.76714 -0.855613 0.392694 0.337221 + 1.0772 1.17965 -1.71961 -0.78087 0.436185 0.447197 + 1.13853 1.24819 -1.84913 0.252862 0.868842 -0.425647 + 1.10086 1.26565 -1.8221 -0.0780995 0.936389 -0.342164 + 1.08652 1.26484 -1.8125 -0.662975 0.739671 -0.115547 + 1.08115 1.24495 -1.81071 -0.910834 0.409938 -0.0483 + 1.09251 1.23031 -1.86901 -0.530404 0.739301 -0.414857 + 1.07628 1.23323 -1.82709 -0.716986 0.673658 -0.179208 + 1.06911 1.22632 -1.80518 -0.884144 0.459173 0.0863142 + 1.07014 1.21301 -1.77236 -0.888492 0.383056 0.252684 + 1.06396 1.15782 -1.72483 -0.827479 0.429374 0.361824 + 1.08764 1.2186 -1.8854 -0.276174 0.767923 -0.577946 + 1.06703 1.21797 -1.87802 -0.512825 0.767519 -0.38461 + 1.05986 1.21106 -1.85611 -0.890276 0.450345 -0.0678118 + 1.05896 1.19094 -1.79776 -0.929683 0.342675 0.13514 + 1.05999 1.17763 -1.76494 -0.910434 0.353713 0.214469 + 1.04079 1.19782 -1.85581 -0.544305 0.834781 -0.0829051 + 1.05504 1.19843 -1.85259 -0.564073 0.763002 0.315673 + 1.05414 1.17831 -1.79423 -0.653776 0.706785 0.270245 + 1.05545 1.16187 -1.75467 -0.590011 0.717794 0.369674 + 1.05943 1.14206 -1.71456 -0.366442 0.819707 0.440228 + 1.03559 1.17519 -1.79432 0.317053 0.912267 0.259317 + 1.04984 1.1758 -1.7911 -0.138394 0.940918 0.309064 + 1.05115 1.15936 -1.75153 0.231955 0.894033 0.383278 + 1.05648 1.14191 -1.71326 0.321558 0.868807 0.37653 + 1.06328 1.13243 -1.69196 -0.337153 0.854265 0.395677 + 1.00964 1.18895 -1.7286 0.318432 0.90407 0.285059 + 1.03874 1.16844 -1.74975 0.590607 0.78108 0.202727 + 1.04408 1.15099 -1.71148 0.560772 0.694133 0.451347 + 1.03005 1.14648 -1.69451 0.338196 0.687524 0.642599 + 1.06034 1.13228 -1.69065 0.173358 0.90809 0.381208 + 0.995607 1.18444 -1.71163 0.195642 0.805308 0.559646 + 0.982616 1.1504 -1.68189 0.092698 0.640677 0.762195 + 1.06831 1.13347 -1.6858 -0.575276 0.724091 0.38046 + 1.09001 1.15145 -1.67567 -0.685546 0.508367 0.521142 + 1.10764 1.15354 -1.6541 -0.743202 0.49384 0.451412 + 1.07935 1.13428 -1.67115 -0.556622 0.739256 0.37904 + 1.09697 1.13638 -1.64958 -0.572935 0.733111 0.36646 + 1.10786 1.13774 -1.63375 -0.676676 0.692175 0.251005 + 1.10917 1.13841 -1.6301 -0.747052 0.644488 0.162936 + 1.09287 1.13322 -1.6451 -0.233288 0.968642 0.0854976 + 1.10375 1.13459 -1.62927 -0.296519 0.951917 0.0770099 + 1.10792 1.13486 -1.61614 -0.396428 0.916976 0.0447292 + 1.11393 1.13803 -1.59673 -0.516961 0.854926 0.043042 + 1.12257 1.14348 -1.56836 -0.685363 0.723943 0.07863 + 1.13097 1.14954 -1.55934 -0.581345 0.772665 0.255004 + 1.33518 0.457491 -1.76285 0.387157 -0.813576 -0.433825 + -0.700788 1.60693 -3.09201 0.87201 0.456421 0.176857 + -0.700286 1.60496 -3.09226 0.792166 0.124176 0.597539 + -0.696261 1.60389 -3.09632 0.75288 0.497834 -0.430503 + -0.713785 1.62766 -3.06485 0.678695 0.713623 -0.173537 + -0.702351 1.60795 -3.09721 0.764365 0.640976 -0.0699637 + -0.721527 1.63887 -3.08342 0.817512 0.56768 -0.0970227 + -0.719965 1.63784 -3.07821 0.830319 0.549856 -0.0907127 + -0.714287 1.62963 -3.06459 0.919042 0.367061 0.143628 + -0.698218 1.60237 -3.10074 0.882124 0.319834 -0.345778 + -0.710325 1.62074 -3.11096 0.879372 0.475631 -0.0219134 + -0.714458 1.62632 -3.10743 0.825694 0.563981 0.012463 + -0.762133 1.69675 -3.08184 0.679542 0.710222 -0.183868 + -0.697173 1.59291 -3.09688 0.817646 0.0776346 -0.570463 + -0.695999 1.5703 -3.11698 0.986147 0.1404 -0.0883226 + -0.713731 1.62839 -3.14112 0.839795 0.437362 -0.32165 + -0.755063 1.6842 -3.10586 0.730315 0.675564 -0.10126 + -0.688751 1.58509 -3.09346 0.483798 0.0783854 -0.871662 + -0.689663 1.57411 -3.09402 0.741627 0.0952044 -0.664023 + -0.694954 1.56084 -3.11312 0.978316 0.0897861 -0.186645 + -0.699405 1.57794 -3.14714 0.891748 0.207378 -0.402218 + -0.697311 1.61823 -3.08077 -0.197968 0.57859 -0.791229 + -0.674551 1.60644 -3.08384 0.623596 0.245119 -0.742324 + -0.683668 1.49664 -3.08943 0.938475 -0.0149984 -0.345021 + -0.68896 1.48336 -3.10853 0.984847 0.0140192 -0.172859 + -0.694389 1.50268 -3.15615 0.900856 0.0805795 -0.426573 + -0.700286 1.60496 -3.09226 -0.421139 0.65229 -0.630206 + -0.701336 1.61931 -3.07671 -0.328939 0.679388 -0.655921 + -0.683112 1.63959 -3.07115 0.224761 0.653228 -0.723032 + -0.666173 1.60744 -3.06324 0.955854 0.117313 -0.269409 + -0.67529 1.49763 -3.06883 0.964503 -0.0654329 -0.255836 + -0.686728 1.39615 -3.08333 0.977257 -0.0740926 -0.198693 + -0.723359 1.65031 -3.03058 -0.138716 0.81918 -0.556508 + -0.726764 1.6649 -3.00715 0.0886504 0.983024 -0.160638 + -0.686517 1.65418 -3.04772 0.11062 0.929914 -0.350747 + -0.671291 1.64734 -3.04513 0.759615 0.620625 -0.194446 + -0.660742 1.59762 -3.01491 0.998512 0.0457029 -0.0297487 + -0.735808 1.65866 -3.01872 0.666743 0.734097 -0.128668 + -0.762929 1.68282 -2.988 0.661077 0.346894 0.665314 + -0.76146 1.66694 -2.97721 0.502776 0.643523 0.577144 + -0.744332 1.65545 -2.97188 0.149607 0.885156 0.440587 + -0.710988 1.66406 -2.99897 0.186712 0.974499 0.124456 + -0.740829 1.67833 -3.01615 0.863698 0.403629 0.301843 + -0.76795 1.70249 -2.98543 0.604639 0.564535 0.561882 + -0.810379 1.70534 -2.96548 0.234079 0.696843 0.677951 + -0.80891 1.68947 -2.95469 0.316091 0.624754 0.713981 + -0.746507 1.68655 -3.02977 0.764846 0.644089 -0.0126078 + -0.784145 1.71184 -2.99598 0.309967 0.926418 0.213707 + -0.826574 1.71469 -2.97603 -0.0946936 0.911122 0.40111 + -0.848521 1.68754 -2.95309 -0.531113 0.545634 0.64823 + -0.790836 1.72448 -3.07206 0.277811 0.945056 -0.172307 + -0.77521 1.71429 -3.01999 0.481611 0.861845 0.158979 + -0.827708 1.72022 -3.03019 -0.140146 0.986951 0.0792854 + -0.8513 1.71244 -3.03504 -0.559275 0.828597 -0.0252733 + -0.850166 1.70692 -2.98088 -0.588849 0.746378 0.310125 + -0.80354 1.71436 -3.10247 0.0154224 0.882826 -0.469447 + -0.818774 1.72266 -3.0542 -0.165976 0.985525 -0.0345319 + -0.854737 1.70418 -3.06709 -0.635124 0.741478 -0.216395 + -0.878514 1.68074 -3.01539 -0.885677 0.449688 0.115577 + -0.876869 1.66136 -2.98761 -0.881197 0.294044 0.370176 + -0.773682 1.70236 -3.1145 0.415285 0.887866 -0.198074 + -0.805723 1.6918 -3.12458 -0.0900347 0.638744 -0.764134 + -0.840653 1.68224 -3.12658 -0.394434 0.629292 -0.669637 + -0.831478 1.71254 -3.0846 -0.398061 0.861189 -0.31607 + -0.73235 1.64655 -3.14976 0.513004 0.593254 -0.620384 + -0.775865 1.6798 -3.13661 0.0795118 0.603871 -0.793106 + -0.811574 1.65329 -3.14786 -0.102929 0.430473 -0.896716 + -0.733622 1.62154 -3.16383 0.350697 0.329787 -0.8765 + -0.777137 1.65479 -3.15069 -0.00986803 0.439864 -0.89801 + -0.813206 1.60082 -3.16797 -0.161349 0.265461 -0.950525 + -0.85692 1.595 -3.15879 -0.477052 0.227239 -0.848989 + -0.846504 1.64373 -3.14987 -0.360266 0.361162 -0.860099 + -0.724048 1.56911 -3.1729 0.411711 0.179164 -0.893529 + -0.778768 1.60233 -3.1708 -0.0260258 0.256338 -0.966236 + -0.813673 1.53427 -3.17938 -0.128089 0.119226 -0.98457 + -0.719033 1.49384 -3.18192 0.404354 0.0846973 -0.910673 + -0.769195 1.54989 -3.17987 0.0139145 0.128051 -0.99167 + -0.808316 1.45694 -3.18447 -0.0547645 0.046343 -0.997423 + -0.852566 1.44075 -3.18167 -0.393856 0.030329 -0.918672 + -0.857387 1.52845 -3.17019 -0.4561 0.122059 -0.881518 + -0.693939 1.4298 -3.16189 0.897554 -0.0132109 -0.440707 + -0.716485 1.43006 -3.18433 0.416663 0.00902267 -0.909016 + -0.763838 1.47256 -3.18497 0.00751894 0.0515189 -0.998644 + -0.76129 1.40878 -3.18738 0.0179453 -0.015389 -0.999721 + -0.801582 1.39762 -3.18654 -0.0330196 -0.0281901 -0.999057 + -0.68851 1.41049 -3.11426 0.993445 -0.0466734 -0.104351 + -0.694726 1.36325 -3.12214 0.991643 -0.0796369 -0.1015 + -0.69819 1.36955 -3.16113 0.901623 -0.0574822 -0.428686 + -0.720736 1.36981 -3.18358 0.383088 -0.057623 -0.921913 + -0.692944 1.34892 -3.0912 0.988056 -0.150464 -0.0332515 + -0.698909 1.27668 -3.09442 0.995134 -0.0496643 0.0850939 + -0.698506 1.28133 -3.1216 0.998452 -0.0355661 -0.0427657 + -0.70197 1.28763 -3.1606 0.89746 -0.0489395 -0.438373 + -0.684572 1.36835 -3.06714 0.953507 -0.295606 0.0586556 + -0.696866 1.34501 -3.07027 0.914862 -0.299159 0.271168 + -0.70283 1.27277 -3.07349 0.941181 -0.0619246 0.332179 + -0.679223 1.43047 -3.06729 0.92128 0.018115 -0.388478 + -0.677067 1.40267 -3.05111 0.970728 -0.214989 0.107085 + -0.703187 1.35996 -3.03439 0.790129 -0.399228 0.465095 + -0.715481 1.33661 -3.03751 0.823762 -0.289854 0.487238 + -0.717646 1.267 -3.04741 0.83722 -0.0679653 0.542626 + -0.675092 1.47307 -3.05471 0.984177 -0.0643738 -0.165081 + -0.669514 1.46659 -3.01935 0.966297 -0.190461 0.173189 + -0.688425 1.47104 -2.98324 0.753977 -0.323037 0.571984 + -0.695978 1.40712 -3.015 0.770471 -0.342081 0.537916 + -0.660545 1.57306 -3.00079 0.990586 -0.0330301 0.132844 + -0.665383 1.50919 -3.00677 0.984457 -0.120521 0.127743 + -0.675449 1.52296 -2.97583 0.830708 -0.177822 0.527544 + -0.728331 1.47624 -2.93836 0.664829 -0.308652 0.680247 + -0.665861 1.63752 -2.9968 0.852699 0.476346 0.214474 + -0.678778 1.63089 -2.96438 0.74837 0.433046 0.502407 + -0.683725 1.60477 -2.95156 0.800462 0.0485411 0.597414 + -0.670611 1.58683 -2.96985 0.909758 0.226955 0.347608 + -0.715355 1.52815 -2.93095 0.699701 -0.20971 0.682965 + -0.695763 1.65722 -2.99638 0.454934 0.8663 0.206297 + -0.70868 1.65059 -2.96396 0.341868 0.822353 0.45482 + -0.722961 1.62083 -2.91547 0.463381 0.545157 0.698629 + -0.727908 1.5947 -2.90265 0.633652 0.0798204 0.769489 + -0.728557 1.65461 -2.9637 0.0113152 0.90852 0.417688 + -0.742838 1.62485 -2.91521 -0.037868 0.83699 0.545906 + -0.752843 1.61059 -2.89508 0.0477925 0.635702 0.770454 + -0.750816 1.58804 -2.88577 0.300055 0.114677 0.947004 + -0.72847 1.54609 -2.91265 0.672044 -0.190225 0.715661 + -0.750278 1.63944 -2.94596 -0.0419403 0.82293 0.566594 + -0.750129 1.63638 -2.94029 -0.196128 0.856373 0.47766 + -0.760134 1.62211 -2.92016 -0.272601 0.828617 0.488961 + -0.777383 1.60064 -2.89336 -0.0725441 0.524825 0.848113 + -0.767406 1.65093 -2.95128 0.464054 0.686469 0.559834 + -0.759055 1.63552 -2.94107 0.235389 0.788655 0.567992 + -0.758906 1.63246 -2.93541 -0.0561691 0.788152 0.612912 + -0.76136 1.63146 -2.93523 0.0293959 0.697708 0.715779 + -0.762588 1.62112 -2.91999 -0.0550318 0.817711 0.572993 + -0.772151 1.65318 -2.94903 0.50303 0.628038 0.593741 + -0.7638 1.63777 -2.93882 0.437651 0.643943 0.627535 + -0.780306 1.6323 -2.92608 0.362909 0.634026 0.682868 + -0.795101 1.61183 -2.89945 0.0527002 0.497856 0.865657 + -0.819506 1.67489 -2.93533 0.0561581 0.616276 0.785525 + -0.782747 1.63861 -2.92967 0.424833 0.578091 0.696655 + -0.815706 1.62228 -2.90612 -0.178331 0.424784 0.887556 + -0.812919 1.58737 -2.89387 -0.329742 -0.00853355 0.944033 + -0.775356 1.57809 -2.88406 -0.0982588 0.0244805 0.99486 + -0.844721 1.63493 -2.92389 -0.610742 0.334372 0.717767 + -0.833524 1.59783 -2.90054 -0.501494 0.00354065 0.865154 + -0.856485 1.57603 -2.93009 -0.739695 -0.15111 0.655757 + -0.853575 1.52989 -2.94193 -0.728686 -0.230587 0.644861 + -0.810009 1.54124 -2.90571 -0.505813 -0.202465 0.838547 + -0.883256 1.63656 -2.98772 -0.932027 0.164436 0.322934 + -0.851108 1.61012 -2.92401 -0.798286 0.13481 0.586997 + -0.874069 1.58832 -2.95356 -0.88325 0.00170727 0.4689 + -0.883002 1.55814 -2.981 -0.944823 -0.13053 0.30045 + -0.844819 1.45278 -2.96066 -0.762443 -0.236235 0.602389 + -0.892188 1.60638 -3.01517 -0.979897 0.0684396 0.187397 + -0.88195 1.67248 -3.04744 -0.903471 0.421792 -0.0763669 + -0.892555 1.63829 -3.06061 -0.96299 0.264708 -0.0507928 + -0.899933 1.55969 -3.04404 -0.977814 -0.00851941 0.209302 + -0.874246 1.48103 -2.99973 -0.895229 -0.163218 0.414637 + -0.863912 1.67388 -3.10907 -0.735786 0.533196 -0.417517 + -0.874516 1.63969 -3.12224 -0.805323 0.351388 -0.477473 + -0.9003 1.5916 -3.08948 -0.976471 0.154134 -0.15082 + -0.902105 1.51138 -3.06534 -0.985345 -0.0566175 0.1609 + -0.884932 1.59097 -3.13117 -0.833899 0.194448 -0.51653 + -0.886875 1.52234 -3.145 -0.828293 0.0661672 -0.556374 + -0.902243 1.52298 -3.10331 -0.983168 0.0133235 -0.182215 + -0.896536 1.41999 -3.07138 -0.969009 -0.152395 0.194414 + -0.876418 1.43272 -3.02103 -0.872716 -0.171951 0.456947 + -0.882054 1.43465 -3.15648 -0.834092 -0.0343469 -0.550555 + -0.896673 1.43159 -3.10936 -0.981895 -0.088221 -0.167628 + -0.886844 1.37081 -3.11415 -0.946378 -0.294861 -0.13201 + -0.883944 1.37025 -3.07144 -0.901172 -0.352952 0.251623 + -0.863826 1.38298 -3.02108 -0.797005 -0.327477 0.507485 + -0.845832 1.38144 -3.18374 -0.365779 -0.13663 -0.920618 + -0.872225 1.37387 -3.16127 -0.788234 -0.246012 -0.564062 + -0.859534 1.34392 -3.15667 -0.77261 -0.284055 -0.567791 + -0.870607 1.33676 -3.1204 -0.942007 -0.299468 -0.151464 + -0.867707 1.3362 -3.07768 -0.91754 -0.325362 0.228605 + -0.797511 1.35535 -3.18285 -0.0383612 -0.0950201 -0.994736 + -0.833141 1.35149 -3.17915 -0.33025 -0.201621 -0.922108 + -0.757219 1.36651 -3.18369 0.00559388 -0.0770702 -0.99701 + -0.756405 1.28568 -3.17829 -0.0128796 -0.0767177 -0.99697 + -0.788812 1.28247 -3.17667 -0.0668274 -0.0866222 -0.993997 + -0.824442 1.2786 -3.17296 -0.375244 -0.117156 -0.919492 + -0.845429 1.27364 -3.155 -0.806172 -0.15623 -0.570682 + -0.719922 1.28898 -3.17817 0.382609 -0.0673176 -0.921455 + -0.721898 1.17826 -3.1696 0.381692 -0.0653494 -0.921976 + -0.750995 1.17563 -3.16969 -0.0169892 -0.0626134 -0.997893 + -0.783401 1.17241 -3.16807 -0.0691604 -0.0628298 -0.995625 + -0.703946 1.17691 -3.15202 0.903222 -0.0484222 -0.426432 + -0.707888 1.07356 -3.14842 0.923046 -0.0505435 -0.381355 + -0.72109 1.07123 -3.16464 0.441413 -0.0515657 -0.895821 + -0.750186 1.0686 -3.16473 1.25246e-005 -0.0283135 -0.999599 + -0.701184 1.17188 -3.12093 0.998569 -0.0326852 -0.0423313 + -0.705125 1.06853 -3.11732 0.998025 -0.049581 -0.0385655 + -0.710884 0.972315 -3.11638 0.997622 -0.0573218 -0.038262 + -0.713241 0.976547 -3.1442 0.924653 -0.0672904 -0.374817 + -0.726443 0.974225 -3.16042 0.551747 -0.042467 -0.832929 + -0.701586 1.16723 -3.09375 0.993363 -0.0320286 0.110476 + -0.705752 1.06448 -3.09411 0.992459 -0.0490947 0.112318 + -0.711511 0.968265 -3.09316 0.991759 -0.0566243 0.114921 + -0.716751 0.87302 -3.09366 0.990209 -0.0530098 0.12914 + -0.715786 0.876178 -3.11125 0.998434 -0.0512606 -0.0224004 + -0.705499 1.16387 -3.07604 0.936145 -0.0328721 0.350075 + -0.709665 1.06112 -3.07641 0.941353 -0.0471569 0.334113 + -0.715225 0.964675 -3.07691 0.941111 -0.053516 0.333834 + -0.720464 0.869428 -3.07741 0.948357 -0.0567908 0.312079 + -0.720315 1.1581 -3.04997 0.833103 -0.0337943 0.552084 + -0.720112 1.05203 -3.05692 0.845269 -0.04334 0.532581 + -0.725672 0.955581 -3.05743 0.859626 -0.0495315 0.508517 + -0.726842 0.85972 -3.0645 0.874302 -0.0569026 0.482035 + -0.72532 0.775814 -3.08118 0.935201 -0.0985868 0.340116 + -0.742695 1.15122 -3.02139 0.553754 -0.0650853 0.830133 + -0.742493 1.04514 -3.02834 0.494536 -0.0672188 0.866554 + -0.737453 0.933047 -3.04199 0.534197 -0.0828218 0.841293 + -0.738623 0.837186 -3.04907 0.48591 -0.0853355 0.869833 + -0.746692 1.25807 -3.01032 0.552602 -0.09964 0.827467 + -0.775955 1.25415 -3.0029 -0.1075 -0.151712 0.982561 + -0.771958 1.1473 -3.01397 -0.122854 -0.111231 0.986172 + -0.764642 1.03836 -3.02585 -0.175392 -0.124385 0.976609 + -0.744527 1.32767 -3.00042 0.569215 -0.276986 0.774127 + -0.783702 1.33029 -2.9878 -0.108099 -0.376409 0.920126 + -0.812463 1.25423 -3.02293 -0.611576 -0.165372 0.77371 + -0.801073 1.14736 -3.02995 -0.607806 -0.119498 0.785043 + -0.793758 1.03842 -3.04183 -0.597205 -0.143892 0.789076 + -0.746833 1.36701 -2.97759 0.50708 -0.430176 0.746872 + -0.786007 1.36963 -2.96497 -0.146804 -0.558744 0.816243 + -0.82021 1.33037 -3.00783 -0.591072 -0.326004 0.737804 + -0.836586 1.25639 -3.04862 -0.825053 -0.166857 0.539857 + -0.739624 1.41418 -2.9582 0.61681 -0.390308 0.683524 + -0.784733 1.39524 -2.94443 0.0154982 -0.666832 0.745047 + -0.833503 1.38189 -2.98836 -0.592472 -0.454608 0.665062 + -0.850533 1.33146 -3.04056 -0.808966 -0.298991 0.506141 + -0.75727 1.49267 -2.90546 0.478589 -0.229456 0.847527 + -0.768564 1.43061 -2.9253 0.547875 -0.475624 0.688197 + -0.792961 1.41006 -2.92624 -0.171974 -0.606727 0.776085 + -0.832229 1.40751 -2.96782 -0.642983 -0.420387 0.640194 + -0.751378 1.53942 -2.89578 0.401628 -0.223447 0.888125 + -0.781249 1.53134 -2.89374 -0.161111 -0.182067 0.969997 + -0.776791 1.44544 -2.90711 0.1735 -0.356821 0.91792 + -0.805551 1.45534 -2.91908 -0.583928 -0.211372 0.783805 + -0.85376 1.26113 -3.08574 -0.960066 -0.167307 0.224236 + -0.838893 1.1533 -3.08524 -0.962806 -0.122283 0.240939 + -0.825197 1.14953 -3.05563 -0.828872 -0.120879 0.546223 + -0.856502 1.26648 -3.11872 -0.977335 -0.16589 -0.131519 + -0.841635 1.15865 -3.11822 -0.98418 -0.122884 -0.127629 + -0.829853 1.05014 -3.11636 -0.987791 -0.100641 -0.118913 + -0.82755 1.04513 -3.0913 -0.964916 -0.105535 0.240416 + -0.813854 1.04135 -3.06169 -0.814651 -0.125386 0.566235 + -0.832804 1.16437 -3.14715 -0.822315 -0.115083 -0.557273 + -0.821023 1.05585 -3.14529 -0.833394 -0.0887406 -0.545508 + -0.81167 0.946961 -3.14421 -0.831525 -0.101834 -0.546074 + -0.819573 0.942088 -3.11833 -0.985849 -0.111316 -0.125341 + -0.81727 0.937079 -3.09327 -0.936686 -0.125531 0.326895 + -0.811817 1.16932 -3.16512 -0.379046 -0.0868437 -0.921294 + -0.803682 1.05969 -3.16112 -0.406789 -0.0495096 -0.912179 + -0.794329 0.950801 -3.16004 -0.452282 -0.0774234 -0.888508 + -0.786447 0.851142 -3.15179 -0.440704 -0.160811 -0.883131 + -0.79914 0.848498 -3.14022 -0.814523 -0.168243 -0.5552 + -0.775266 1.06278 -3.16408 -0.0622994 -0.0139068 -0.997961 + -0.770114 0.952483 -3.16563 -0.113135 -0.0522288 -0.992206 + -0.762232 0.852825 -3.15737 -0.0708876 -0.156051 -0.985202 + -0.745035 0.958311 -3.16628 0.165553 -0.042963 -0.985265 + -0.745119 0.859859 -3.15731 0.220004 -0.131641 -0.966576 + -0.758657 0.762938 -3.13818 0.0550191 -0.328372 -0.942945 + -0.772999 0.76158 -3.13749 -0.313277 -0.317313 -0.895081 + -0.785692 0.758936 -3.12592 -0.779879 -0.303734 -0.547297 + -0.726527 0.875771 -3.15145 0.637624 -0.0976846 -0.764129 + -0.73024 0.779145 -3.13746 0.579893 -0.229939 -0.78157 + -0.741544 0.769971 -3.13812 0.226529 -0.320206 -0.919866 + -0.740176 0.721669 -3.11429 0.417408 -0.711078 -0.565807 + -0.755709 0.715314 -3.11404 0.172148 -0.797448 -0.578309 + -0.718143 0.880408 -3.13907 0.939885 -0.0677119 -0.33471 + -0.721855 0.783783 -3.12507 0.940257 -0.12797 -0.315498 + -0.728872 0.730843 -3.11363 0.755628 -0.465799 -0.460497 + -0.727586 0.728534 -3.09845 0.8942 -0.447648 0.00409192 + -0.737605 0.715827 -3.07849 0.597383 -0.684818 0.417323 + -0.720568 0.781473 -3.10989 0.994763 -0.0961954 -0.0345439 + -0.721533 0.778315 -3.0923 0.979906 -0.0915413 0.177214 + -0.731373 0.726032 -3.08733 0.918867 -0.247338 0.307421 + -0.73793 0.755901 -3.05943 0.541771 -0.217753 0.81183 + -0.752399 0.748231 -3.05953 -0.118103 -0.297788 0.947298 + -0.753137 0.709472 -3.07824 0.0544323 -0.869105 0.491624 + -0.774364 0.711295 -3.09923 -0.605963 -0.794246 -0.044521 + -0.770051 0.713956 -3.11335 -0.357824 -0.752905 -0.552355 + -0.731699 0.766105 -3.06827 0.893625 -0.114176 0.434048 + -0.753092 0.829517 -3.04917 -0.267056 -0.108626 0.957539 + -0.76694 0.74808 -3.06611 -0.541848 -0.236166 0.806614 + -0.759602 0.926263 -3.03951 -0.241779 -0.119321 0.962967 + -0.778414 0.831733 -3.06725 -0.639391 -0.0982445 0.76258 + -0.793113 0.83416 -3.08097 -0.755826 -0.117781 0.644092 + -0.78164 0.750508 -3.07983 -0.804877 -0.215327 0.552999 + -0.767678 0.70932 -3.08482 -0.432226 -0.826862 0.359834 + -0.784924 0.928477 -3.05759 -0.64256 -0.129857 0.755151 + -0.80502 0.931409 -3.07746 -0.760192 -0.133541 0.635827 + -0.805363 0.839829 -3.09679 -0.933723 -0.150671 0.324746 + -0.788325 0.752482 -3.09424 -0.942382 -0.245713 0.227026 + -0.807043 0.843624 -3.11434 -0.978575 -0.16081 -0.128571 + -0.790005 0.756277 -3.1118 -0.946458 -0.280709 -0.159433 + -0.106343 0.878927 -3.34614 0.362612 -0.0130587 0.931849 + -0.118475 0.842721 -3.34595 0.166227 -0.123161 0.978366 + -0.110367 0.844247 -3.35106 0.516151 -0.813737 0.267245 + -0.124122 0.879198 -3.34372 -0.0237039 0.0262078 0.999375 + -0.133302 0.844537 -3.34848 -0.418236 -0.77872 0.467625 + -0.098235 0.880453 -3.35125 0.620088 -0.0692167 0.781473 + -0.082945 0.960539 -3.37009 0.599546 0.0773708 0.796591 + -0.105239 0.956342 -3.35604 0.327362 0.126304 0.936419 + -0.123019 0.956611 -3.35362 -0.0428739 0.14651 0.98828 + -0.138949 0.881012 -3.34624 -0.349957 -0.0045157 0.936755 + -0.088223 0.883575 -3.36059 0.861612 -0.23212 0.451381 + -0.072933 0.963663 -3.37943 0.773581 0.011667 0.63359 + -0.057545 1.05444 -3.40151 0.769322 0.0293213 0.638188 + -0.074516 1.04927 -3.38601 0.590202 0.0879483 0.802451 + -0.09681 1.04507 -3.37197 0.331846 0.132761 0.933945 + -0.108929 0.846051 -3.35592 0.531956 -0.796498 -0.287425 + -0.086785 0.885379 -3.36544 0.924554 -0.376917 -0.0559803 + -0.064728 0.968621 -3.39278 0.974747 -0.17852 0.134159 + -0.04934 1.0594 -3.41486 0.978964 -0.1059 0.174397 + -0.133971 0.849398 -3.36091 -0.374838 -0.728683 -0.573164 + -0.124687 0.850417 -3.36488 -0.0825503 -0.726829 -0.681839 + -0.113113 0.848798 -3.36239 0.224854 -0.747704 -0.624804 + -0.088296 0.889645 -3.37606 0.76816 -0.449907 -0.455536 + -0.066239 0.972886 -3.4034 0.847901 -0.310072 -0.430021 + -0.118475 0.842721 -3.34595 -0.0524469 -0.93101 -0.361206 + -0.136798 0.847063 -3.35448 -0.644376 -0.753483 -0.13055 + -0.15653 0.892167 -3.37189 -0.890448 -0.359363 -0.279214 + -0.153703 0.894503 -3.37832 -0.674709 -0.410682 -0.613277 + -0.14235 0.897646 -3.38808 -0.417194 -0.439866 -0.795278 + -0.152406 0.885082 -3.35423 -0.741875 -0.129474 0.65792 + -0.155902 0.88761 -3.36023 -0.946909 -0.249627 0.202609 + -0.17198 0.972621 -3.38504 -0.9643 -0.0919351 0.248343 + -0.172608 0.977179 -3.3967 -0.945945 -0.215313 -0.242544 + -0.162365 0.965675 -3.36855 -0.699381 0.0543021 0.712683 + -0.173576 1.05657 -3.38854 -0.70759 0.0642443 0.703697 + -0.18319 1.06351 -3.40504 -0.966261 -0.0545806 0.251715 + -0.183701 1.07108 -3.42438 -0.954115 -0.168561 -0.247492 + -0.164834 0.983602 -3.4144 -0.715077 -0.306015 -0.628507 + -0.148908 0.961604 -3.36056 -0.363474 0.127128 0.92289 + -0.151989 1.05016 -3.37509 -0.362219 0.1422 0.921182 + -0.182779 1.15464 -3.4068 -0.744595 0.0048785 0.667499 + -0.192791 1.16341 -3.42762 -0.977179 -0.0950015 0.18999 + -0.193301 1.17098 -3.44696 -0.954633 -0.154396 -0.254632 + -0.126099 1.04517 -3.36815 -0.0556157 0.15951 0.985628 + -0.120362 1.14332 -3.38379 -0.0355452 0.101679 0.994182 + -0.161192 1.14824 -3.39335 -0.374325 0.0748327 0.924273 + -0.166337 1.23463 -3.39624 -0.36861 -0.0912887 0.925091 + -0.196173 1.24694 -3.41281 -0.763863 -0.176581 0.620752 + -0.091073 1.14322 -3.38761 0.332416 0.0869823 0.939113 + -0.082343 1.22998 -3.39421 0.376697 -0.0499367 0.92499 + -0.125506 1.22972 -3.38668 -0.0387002 -0.0562603 0.997666 + -0.062932 1.14852 -3.40534 0.602212 0.0456936 0.797028 + -0.054202 1.23528 -3.41194 0.635332 -0.0503034 0.770599 + -0.039483 1.31898 -3.41339 0.690144 -0.142272 0.709549 + -0.079466 1.29589 -3.38419 0.412329 -0.155274 0.897705 + -0.122629 1.29563 -3.37666 0.00508542 -0.179858 0.98368 + -0.045961 1.1537 -3.42083 0.788275 0.00197918 0.615321 + -0.03486 1.24243 -3.43173 0.820211 -0.0729481 0.56739 + -0.020141 1.32613 -3.43318 0.907723 -0.15571 0.389608 + -0.011027 1.37809 -3.43342 0.904738 -0.252158 0.343314 + -0.033067 1.36756 -3.40765 0.720628 -0.225701 0.655556 + -0.03672 1.15996 -3.43768 0.984746 -0.101403 0.141399 + -0.025619 1.24869 -3.44858 0.992954 -0.0971488 0.0678533 + -0.020138 1.3201 -3.44856 0.984085 -0.132565 -0.118338 + -0.011025 1.37206 -3.4488 0.954851 -0.235054 -0.181681 + -0.051485 1.06648 -3.43248 0.880501 -0.236271 -0.410967 + -0.038864 1.16704 -3.4553 0.901422 -0.170848 -0.397805 + -0.030731 1.24856 -3.46418 0.885025 -0.089912 -0.456778 + -0.02525 1.31997 -3.46416 0.752804 -0.052248 -0.656168 + -0.019385 1.36442 -3.4612 0.71315 -0.158792 -0.68279 + -0.062989 1.07403 -3.45028 0.62977 -0.285083 -0.722576 + -0.053384 1.17657 -3.47777 0.658552 -0.200392 -0.725363 + -0.045251 1.2581 -3.48665 0.687995 0.0143905 -0.725573 + -0.040422 1.30972 -3.47184 0.527488 0.0333045 -0.84891 + -0.034557 1.35416 -3.46888 0.504975 -0.0713019 -0.860184 + -0.077743 0.980436 -3.4212 0.585176 -0.365 -0.724116 + -0.083243 1.08047 -3.46442 0.358027 -0.305043 -0.882477 + -0.073639 1.18301 -3.49191 0.382668 -0.207642 -0.90025 + -0.070166 1.25611 -3.50245 0.424421 -0.0109552 -0.905399 + -0.09248 0.89239 -3.38254 0.533952 -0.469653 -0.70308 + -0.104595 0.89648 -3.39094 0.260587 -0.476158 -0.839862 + -0.089859 0.984527 -3.4296 0.330789 -0.380542 -0.863578 + -0.104442 1.08492 -3.47127 0.0839557 -0.308391 -0.947548 + -0.107434 1.18723 -3.50136 0.0833086 -0.217474 -0.972504 + -0.116169 0.898099 -3.39343 0.0201028 -0.469621 -0.882639 + -0.111057 0.988976 -3.43646 0.0608176 -0.382686 -0.921874 + -0.132096 1.08551 -3.46917 -0.216844 -0.304605 -0.927467 + -0.133066 0.898663 -3.39205 -0.207426 -0.453354 -0.866859 + -0.127953 0.989541 -3.43507 -0.20885 -0.370352 -0.905108 + -0.157624 1.08271 -3.45826 -0.473128 -0.286403 -0.833141 + -0.165186 1.18429 -3.48549 -0.504392 -0.21294 -0.836806 + -0.135089 1.18782 -3.49926 -0.232552 -0.226026 -0.945955 + -0.153481 0.986745 -3.42415 -0.453962 -0.345674 -0.821236 + -0.175927 1.0775 -3.44208 -0.745893 -0.244613 -0.619523 + -0.183489 1.17908 -3.4693 -0.758234 -0.190554 -0.623514 + -0.192842 1.26553 -3.47934 -0.762133 -0.0916269 -0.640904 + -0.168579 1.25838 -3.49837 -0.517788 -0.0802621 -0.851736 + -0.202654 1.25742 -3.457 -0.940079 -0.141508 -0.310204 + -0.217438 1.34522 -3.45249 -0.913601 -0.1639 -0.372116 + -0.198307 1.32203 -3.4742 -0.704839 -0.0588379 -0.706923 + -0.174044 1.31488 -3.49323 -0.536643 -0.0347598 -0.843093 + -0.138482 1.26191 -3.51215 -0.215974 -0.0617531 -0.974444 + -0.206185 1.25572 -3.43363 -0.981405 -0.174053 0.0809284 + -0.220969 1.34351 -3.42911 -0.97659 -0.20886 -0.0514645 + -0.235157 1.39875 -3.42348 -0.938221 -0.330245 -0.103346 + -0.227261 1.39459 -3.45194 -0.896375 -0.298373 -0.32785 + -0.208129 1.3714 -3.47365 -0.75561 -0.241405 -0.608915 + -0.216163 1.33037 -3.4005 -0.834021 -0.251043 0.491311 + -0.23035 1.38562 -3.39487 -0.846167 -0.397572 0.354878 + -0.240846 1.40782 -3.38741 -0.853154 -0.306734 0.421951 + -0.246637 1.42629 -3.42525 -0.972225 -0.215448 -0.0914337 + -0.238741 1.42212 -3.45371 -0.88983 -0.204054 -0.408122 + -0.186326 1.31806 -3.38394 -0.380923 -0.241721 0.892451 + -0.193244 1.36576 -3.37333 -0.420574 -0.359847 0.832843 + -0.203739 1.38796 -3.36587 -0.440712 -0.314686 0.840682 + -0.233773 1.47268 -3.36828 -0.568142 -0.0261557 0.822515 + -0.247411 1.47396 -3.38664 -0.925928 -0.0468269 0.374787 + -0.129546 1.34333 -3.36606 -0.0229383 -0.380094 0.924663 + -0.129607 1.36256 -3.35343 -0.018699 -0.351372 0.936049 + -0.122787 1.41055 -3.34648 0.0740658 -0.0906146 0.993128 + -0.196918 1.43595 -3.35892 -0.247167 -0.0614541 0.967022 + -0.07305 1.34448 -3.37845 0.479049 -0.312017 0.820462 + -0.073112 1.36371 -3.36582 0.453341 -0.297844 0.840101 + -0.069783 1.41068 -3.36405 0.4847 -0.0663472 0.87216 + -0.117553 1.48198 -3.34654 0.0960616 -0.0144337 0.995271 + -0.164313 1.51504 -3.35114 -0.151542 0.0317332 0.987941 + -0.024941 1.39305 -3.40588 0.734603 -0.180485 0.654052 + -0.021612 1.44002 -3.40411 0.722868 -0.0173732 0.690768 + -0.064549 1.48211 -3.36411 0.542368 -0.0188203 0.83993 + -0.094516 1.52942 -3.34775 0.219293 0.0386151 0.974894 + -0.002901 1.40358 -3.43164 0.92223 -0.184969 0.339527 + 0.001168 1.44139 -3.43087 0.933247 -0.0297194 0.358005 + -0.021597 1.51175 -3.41137 0.748304 0.0181527 0.663108 + -0.013123 1.57046 -3.41925 0.914963 -0.040804 0.401468 + -0.056075 1.54083 -3.37199 0.71383 -0.0931773 0.694093 + -0.002896 1.3993 -3.45006 0.955614 -0.188155 -0.226717 + 0.001172 1.43711 -3.44928 0.955307 -0.0328413 -0.293784 + 0.001183 1.51311 -3.43813 0.989659 0.138968 0.0355261 + -0.011257 1.39166 -3.46246 0.703873 -0.169762 -0.689742 + -0.011073 1.44453 -3.46711 0.620548 0.046224 -0.782804 + -0.011063 1.52054 -3.45595 0.863862 0.088788 -0.495841 + -0.029536 1.38166 -3.47059 0.522139 -0.138507 -0.841538 + -0.029353 1.43453 -3.47524 0.575167 -0.06648 -0.81533 + -0.041779 1.51527 -3.50199 0.720635 -0.0311367 -0.692616 + -0.039756 1.59678 -3.49803 0.671506 0.042351 -0.739788 + -0.009039 1.60204 -3.45199 0.934666 -0.0735715 -0.347833 + -0.057839 1.37151 -3.48744 0.550857 -0.158949 -0.819324 + -0.054059 1.41429 -3.49364 0.595397 -0.144842 -0.790268 + -0.066486 1.49502 -3.5204 0.455704 -0.0515371 -0.888638 + -0.046079 1.64023 -3.49797 0.366265 0.195073 -0.909833 + -0.009016 1.72638 -3.45139 0.791461 0.0559912 -0.60865 + -0.06286 1.34401 -3.48573 0.544074 -0.0714078 -0.835993 + -0.101424 1.36259 -3.51539 0.317609 -0.165723 -0.933628 + -0.097644 1.40537 -3.52159 0.312029 -0.151729 -0.937879 + -0.065337 1.30773 -3.48765 0.526927 0.0953753 -0.844542 + -0.099036 1.33258 -3.50934 0.348894 -0.0589408 -0.935307 + -0.139275 1.33491 -3.513 -0.210491 -0.127275 -0.969275 + -0.141663 1.36492 -3.51906 -0.186031 -0.171324 -0.967492 + -0.101513 1.29631 -3.51126 0.253415 0.0453247 -0.966295 + -0.136033 1.29788 -3.51151 -0.209251 -0.0067073 -0.977839 + -0.177285 1.35191 -3.49472 -0.567322 -0.207713 -0.796869 + -0.184847 1.37756 -3.50042 -0.561368 -0.242097 -0.791363 + -0.103962 1.26034 -3.5119 0.131742 -0.0675522 -0.98898 + -0.215691 1.39704 -3.47935 -0.761032 -0.232816 -0.605497 + -0.241301 1.48495 -3.45658 -0.863912 -0.018531 -0.503302 + -0.218252 1.45987 -3.48222 -0.722114 -0.0439708 -0.690375 + -0.191368 1.42331 -3.50452 -0.556715 -0.0956094 -0.825183 + -0.148184 1.41067 -3.52316 -0.23442 -0.113724 -0.96546 + -0.123403 1.43634 -3.52897 -0.00501192 -0.0748548 -0.997182 + -0.253202 1.49243 -3.42449 -0.993295 -0.0314111 -0.111258 + -0.241996 1.59388 -3.44778 -0.857664 0.0824427 -0.507558 + -0.208758 1.54906 -3.49504 -0.634685 0.103079 -0.765865 + -0.181874 1.51251 -3.51734 -0.455282 0.0289566 -0.889876 + -0.157093 1.53818 -3.52316 -0.221255 0.149735 -0.963652 + -0.251002 1.57982 -3.39807 -0.922518 0.0173927 0.385562 + -0.253897 1.60135 -3.41568 -0.993631 0.0333873 -0.107627 + -0.238164 1.68532 -3.43339 -0.814071 0.214718 -0.539616 + -0.237364 1.57854 -3.37971 -0.615142 0.0878097 0.783511 + -0.234255 1.66947 -3.3863 -0.26206 -0.0333192 0.964476 + -0.249449 1.65451 -3.39346 -0.782252 -0.0145871 0.622791 + -0.252343 1.67604 -3.41108 -0.976304 0.130603 -0.17255 + -0.201168 1.55176 -3.3605 -0.296178 0.079298 0.951835 + -0.191027 1.58842 -3.36185 -0.195249 0.225642 0.954444 + -0.227224 1.6152 -3.38105 -0.197949 0.162864 0.966587 + -0.141276 1.56247 -3.35235 -0.0350407 0.18479 0.982153 + -0.143849 1.5932 -3.36212 0.00507204 0.329282 0.944218 + -0.193209 1.61933 -3.37365 -0.13668 0.296282 0.94527 + -0.225862 1.63376 -3.38559 0.167431 0.158994 0.972979 + -0.077163 1.57536 -3.35946 0.187325 0.222172 0.956843 + -0.079736 1.60609 -3.36923 0.102458 0.32863 0.938885 + -0.146032 1.62411 -3.37392 0.0161638 0.312995 0.949617 + -0.154579 1.64638 -3.37962 0.0426798 0.158979 0.986359 + -0.191848 1.63789 -3.37818 -0.123865 0.178654 0.976084 + -0.064608 1.54626 -3.36014 0.563743 -0.176207 0.806936 + -0.047256 1.5922 -3.37184 0.597639 0.0307288 0.801176 + -0.03764 1.62064 -3.38122 0.521036 0.141413 0.841739 + -0.068242 1.64546 -3.38563 0.114253 0.32247 0.939659 + -0.076789 1.66772 -3.39133 0.126788 0.181867 0.975115 + -0.021648 1.62986 -3.40189 0.798985 -0.086193 0.595142 + -0.012032 1.65829 -3.41127 0.769181 -0.0241418 0.638574 + -0.026146 1.66 -3.39762 0.465442 0.150505 0.872188 + -0.046152 1.69277 -3.39845 0.189343 0.128388 0.973481 + -0.148311 1.67115 -3.38142 0.0817894 0.0698268 0.994201 + -0.013115 1.62442 -3.41374 0.799651 -0.0706683 0.596291 + -0.003494 1.68935 -3.41994 0.782296 -0.0420202 0.621488 + -0.017607 1.69106 -3.4063 0.502039 0.0614457 0.862659 + -0.03203 1.74658 -3.40808 0.241514 0.0497681 0.96912 + -0.117674 1.6962 -3.38854 0.186673 0.0520213 0.981044 + 0.001204 1.6343 -3.43293 0.99647 -0.0624539 0.0560929 + 0.001212 1.68825 -3.42743 0.957973 -0.0297576 0.285309 + 0.00122 1.74377 -3.42341 0.952214 0.0484955 0.301557 + -0.003485 1.74487 -3.41593 0.633891 0.0715405 0.770106 + -0.041176 1.76728 -3.40588 0.299384 -0.0336773 0.953538 + 0.001227 1.75864 -3.43234 0.967184 0.197943 -0.159293 + -0.012625 1.78903 -3.41537 0.642229 0.234497 0.729762 + -0.082733 1.7756 -3.38966 0.234333 0.0185598 0.971979 + -0.126819 1.71691 -3.38634 0.1818 -0.0311398 0.982842 + -0.185579 1.66266 -3.37999 -0.0478121 0.0405391 0.998033 + -0.015339 1.76984 -3.45134 0.516497 0.33758 -0.786938 + -0.018947 1.81086 -3.42742 0.528296 0.839127 -0.129493 + -0.012619 1.80389 -3.4243 0.810861 0.573147 0.118353 + -0.054183 1.79735 -3.39915 0.312284 0.311382 0.897508 + -0.034331 1.77586 -3.45177 0.0653851 0.434678 -0.898209 + -0.037939 1.81688 -3.42785 0.170847 0.959794 -0.222725 + -0.060512 1.80431 -3.40227 0.146369 0.7268 0.671072 + -0.090427 1.62068 -3.50581 0.0462415 0.238949 -0.96993 + -0.078679 1.75631 -3.45961 0.00857797 0.384404 -0.923125 + -0.092595 1.81509 -3.42965 -0.0471287 0.921497 -0.385516 + -0.073656 1.81358 -3.41959 -0.0212948 0.938497 0.344631 + -0.096229 1.801 -3.39401 0.0430479 0.644191 0.763652 + -0.092244 1.526 -3.52778 0.200049 0.1253 -0.971741 + -0.155275 1.63286 -3.50119 -0.185561 0.254511 -0.9491 + -0.158067 1.74829 -3.46422 -0.144246 0.355974 -0.923296 + -0.171983 1.80707 -3.43425 -0.201026 0.862613 -0.464207 + -0.204926 1.6405 -3.48065 -0.546569 0.196231 -0.814098 + -0.207717 1.75593 -3.44368 -0.625529 0.318462 -0.712247 + -0.205488 1.79827 -3.42416 -0.563403 0.744809 -0.357542 + -0.180756 1.79915 -3.40445 -0.14267 0.948382 0.283227 + -0.228842 1.73752 -3.40879 -0.894368 0.327622 -0.304582 + -0.226613 1.77986 -3.38927 -0.699862 0.483846 0.52544 + -0.21426 1.79034 -3.39435 -0.354112 0.752381 0.555453 + -0.161817 1.79763 -3.39439 -0.0671082 0.738359 0.67106 + -0.243022 1.72825 -3.38648 -0.86226 0.338485 0.376743 + -0.227827 1.7432 -3.37932 -0.465084 0.283924 0.838501 + -0.215475 1.75369 -3.38439 0.0842919 0.184764 0.979161 + -0.184037 1.77387 -3.38475 -0.0551369 0.242618 0.968554 + -0.118449 1.77725 -3.38438 0.0616458 0.176749 0.982323 + -0.193972 1.69836 -3.3807 -0.037276 0.00223762 0.999302 + -0.162534 1.71855 -3.38106 0.0579043 0.00773888 0.998292 + 0.136798 0.847063 -3.35448 0.644273 -0.753569 -0.130558 + 0.133302 0.844537 -3.34848 0.418209 -0.778785 0.467541 + 0.118475 0.842721 -3.34595 0.0524625 -0.930993 -0.361248 + 0.152406 0.885082 -3.35423 0.741876 -0.129478 0.657917 + 0.138949 0.881012 -3.34624 0.345055 0.00308332 0.938577 + 0.124122 0.879198 -3.34372 0.0272044 0.0313708 0.999137 + 0.118475 0.842721 -3.34595 -0.166227 -0.123161 0.978366 + 0.133971 0.849398 -3.36091 0.374832 -0.728703 -0.573143 + 0.15653 0.892167 -3.37189 0.890448 -0.359363 -0.279214 + 0.155902 0.88761 -3.36023 0.946909 -0.249627 0.202609 + 0.162365 0.965675 -3.36855 0.698251 0.0564672 0.713622 + 0.148908 0.961604 -3.36056 0.362444 0.125742 0.923485 + 0.124687 0.850417 -3.36488 0.0825573 -0.726833 -0.681835 + 0.14235 0.897646 -3.38808 0.417194 -0.439866 -0.795278 + 0.153703 0.894503 -3.37832 0.674709 -0.410682 -0.613277 + 0.172608 0.977179 -3.3967 0.945946 -0.215314 -0.242543 + 0.17198 0.972621 -3.38504 0.964299 -0.0919315 0.248345 + 0.113113 0.848798 -3.36239 -0.224884 -0.747657 -0.624849 + 0.104595 0.89648 -3.39094 -0.259116 -0.473458 -0.841841 + 0.116169 0.898099 -3.39343 -0.0231674 -0.466681 -0.884122 + 0.133066 0.898663 -3.39205 0.207424 -0.453352 -0.866861 + 0.110367 0.844247 -3.35106 -0.51614 -0.813736 0.267271 + 0.108929 0.846051 -3.35592 -0.532043 -0.796446 -0.287409 + 0.088296 0.889645 -3.37606 -0.76816 -0.449908 -0.455535 + 0.09248 0.89239 -3.38254 -0.533949 -0.469652 -0.703082 + 0.089859 0.984527 -3.4296 -0.329647 -0.38184 -0.863441 + 0.088223 0.883575 -3.36059 -0.864952 -0.22641 0.447881 + 0.086785 0.885379 -3.36544 -0.933112 -0.357289 -0.0405903 + 0.064728 0.968621 -3.39278 -0.974249 -0.180286 0.135409 + 0.066239 0.972886 -3.4034 -0.847902 -0.310072 -0.430021 + 0.077743 0.980436 -3.4212 -0.585075 -0.364686 -0.724355 + 0.098235 0.880453 -3.35125 -0.620086 -0.0692159 0.781475 + 0.072933 0.963663 -3.37943 -0.776025 0.00563757 0.630677 + 0.057545 1.05444 -3.40151 -0.768709 0.0279504 0.638987 + 0.04934 1.0594 -3.41486 -0.979012 -0.109645 0.171793 + 0.051485 1.06648 -3.43248 -0.880498 -0.236275 -0.410971 + 0.106343 0.878927 -3.34614 -0.362615 -0.0130616 0.931847 + 0.105239 0.956342 -3.35604 -0.326999 0.126899 0.936466 + 0.082945 0.960539 -3.37009 -0.599746 0.0777342 0.796406 + 0.074516 1.04927 -3.38601 -0.59053 0.0874151 0.802267 + 0.045961 1.1537 -3.42083 -0.789501 -0.000536091 0.613749 + 0.123019 0.956611 -3.35362 0.0459985 0.143033 0.988648 + 0.126099 1.04517 -3.36815 0.054473 0.157725 0.985979 + 0.09681 1.04507 -3.37197 -0.331635 0.132492 0.934058 + 0.091073 1.14322 -3.38761 -0.335557 0.0824387 0.938406 + 0.062932 1.14852 -3.40534 -0.600801 0.0431508 0.798233 + 0.151989 1.05016 -3.37509 0.364926 0.138766 0.920637 + 0.161192 1.14824 -3.39335 0.373293 0.0729476 0.924841 + 0.120362 1.14332 -3.38379 0.0377029 0.0986842 0.994404 + 0.173576 1.05657 -3.38854 0.708296 0.0659715 0.702826 + 0.182779 1.15464 -3.4068 0.750561 -0.0066001 0.660768 + 0.196173 1.24694 -3.41281 0.77225 -0.159824 0.614887 + 0.166337 1.23463 -3.39624 0.375199 -0.0994423 0.921595 + 0.125506 1.22972 -3.38668 0.0332146 -0.0631781 0.997449 + 0.18319 1.06351 -3.40504 0.965254 -0.0474452 0.25697 + 0.192791 1.16341 -3.42762 0.977809 -0.0918353 0.188295 + 0.206185 1.25572 -3.43363 0.982062 -0.157466 0.103726 + 0.183701 1.07108 -3.42438 0.954114 -0.168562 -0.247493 + 0.193301 1.17098 -3.44696 0.958867 -0.143556 -0.244877 + 0.202654 1.25742 -3.457 0.940065 -0.13318 -0.313912 + 0.220969 1.34351 -3.42911 0.975769 -0.21253 -0.0520201 + 0.175927 1.0775 -3.44208 0.746257 -0.244036 -0.619312 + 0.183489 1.17908 -3.4693 0.75846 -0.191307 -0.623009 + 0.192842 1.26553 -3.47934 0.776011 -0.074095 -0.626352 + 0.198307 1.32203 -3.4742 0.726964 -0.0842817 -0.681484 + 0.217438 1.34522 -3.45249 0.915272 -0.162842 -0.368456 + 0.164834 0.983602 -3.4144 0.715204 -0.30648 -0.628135 + 0.157624 1.08271 -3.45826 0.473671 -0.287328 -0.832513 + 0.165186 1.18429 -3.48549 0.50443 -0.212649 -0.836858 + 0.168579 1.25838 -3.49837 0.516899 -0.079055 -0.852388 + 0.153481 0.986745 -3.42415 0.45316 -0.346539 -0.821314 + 0.132096 1.08551 -3.46917 0.215124 -0.306558 -0.927224 + 0.135089 1.18782 -3.49926 0.226565 -0.218286 -0.949221 + 0.138482 1.26191 -3.51215 0.212535 -0.0665339 -0.974886 + 0.127953 0.989541 -3.43507 0.208443 -0.369834 -0.905414 + 0.104442 1.08492 -3.47127 -0.082372 -0.310089 -0.947132 + 0.107434 1.18723 -3.50136 -0.0774923 -0.209999 -0.974626 + 0.103962 1.26034 -3.5119 -0.165686 -0.0385802 -0.985424 + 0.136033 1.29788 -3.51151 0.197503 0.00587325 -0.980285 + 0.111057 0.988976 -3.43646 -0.0611133 -0.383501 -0.921516 + 0.083243 1.08047 -3.46442 -0.358615 -0.306165 -0.88185 + 0.073639 1.18301 -3.49191 -0.38366 -0.20649 -0.900093 + 0.070166 1.25611 -3.50245 -0.40029 0.0243961 -0.916064 + 0.062989 1.07403 -3.45028 -0.629491 -0.285434 -0.722681 + 0.053384 1.17657 -3.47777 -0.658474 -0.200181 -0.725493 + 0.045251 1.2581 -3.48665 -0.663545 -0.01177 -0.748044 + 0.065337 1.30773 -3.48765 -0.513251 0.0778075 -0.854705 + 0.101513 1.29631 -3.51126 -0.289925 0.0125623 -0.956967 + 0.038864 1.16704 -3.4553 -0.896698 -0.179268 -0.404716 + 0.030731 1.24856 -3.46418 -0.886965 -0.107098 -0.449247 + 0.02525 1.31997 -3.46416 -0.762912 -0.0254145 -0.646002 + 0.040422 1.30972 -3.47184 -0.441165 0.123454 -0.888894 + 0.03672 1.15996 -3.43768 -0.984215 -0.10424 0.143019 + 0.025619 1.24869 -3.44858 -0.992268 -0.113612 0.0499617 + 0.020138 1.3201 -3.44856 -0.983841 -0.105445 -0.1447 + 0.019385 1.36442 -3.4612 -0.71315 -0.158792 -0.68279 + 0.034557 1.35416 -3.46888 -0.506327 -0.069517 -0.859535 + 0.03486 1.24243 -3.43173 -0.81622 -0.0825906 0.571808 + 0.020141 1.32613 -3.43318 -0.91029 -0.149717 0.38595 + 0.011025 1.37206 -3.4488 -0.954851 -0.235054 -0.181681 + 0.011257 1.39166 -3.46246 -0.705798 -0.165854 -0.688725 + 0.029536 1.38166 -3.47059 -0.50628 -0.123329 -0.853505 + 0.054202 1.23528 -3.41194 -0.642404 -0.0605293 0.763972 + 0.039483 1.31898 -3.41339 -0.688684 -0.144229 0.710571 + 0.033067 1.36756 -3.40765 -0.729707 -0.229854 0.643968 + 0.011027 1.37809 -3.43342 -0.906878 -0.247609 0.340972 + 0.002896 1.3993 -3.45006 -0.954732 -0.179947 -0.236867 + 0.082343 1.22998 -3.39421 -0.371166 -0.0581707 0.926743 + 0.079466 1.29589 -3.38419 -0.406767 -0.150988 0.900968 + 0.07305 1.34448 -3.37845 -0.476082 -0.317518 0.820078 + 0.073112 1.36371 -3.36582 -0.455116 -0.307591 0.835618 + 0.024941 1.39305 -3.40588 -0.73676 -0.177454 0.652453 + 0.122629 1.29563 -3.37666 -0.00834578 -0.178819 0.983847 + 0.129546 1.34333 -3.36606 0.0326732 -0.370994 0.92806 + 0.129607 1.36256 -3.35343 0.0419869 -0.366039 0.929652 + 0.122787 1.41055 -3.34648 -0.0563654 -0.068589 0.996051 + 0.069783 1.41068 -3.36405 -0.503245 -0.0429086 0.863078 + 0.186326 1.31806 -3.38394 0.386595 -0.234423 0.891959 + 0.193244 1.36576 -3.37333 0.411674 -0.355328 0.839206 + 0.203739 1.38796 -3.36587 0.449204 -0.297792 0.842339 + 0.196918 1.43595 -3.35892 0.323566 -0.0701775 0.9436 + 0.216163 1.33037 -3.4005 0.835803 -0.264212 0.481274 + 0.23035 1.38562 -3.39487 0.844753 -0.400001 0.355516 + 0.240846 1.40782 -3.38741 0.842707 -0.272854 0.464108 + 0.235157 1.39875 -3.42348 0.936443 -0.33423 -0.106606 + 0.246637 1.42629 -3.42525 0.973179 -0.207393 -0.0995559 + 0.253202 1.49243 -3.42449 0.992725 -0.0366179 -0.114701 + 0.247411 1.47396 -3.38664 0.901998 -0.0992285 0.420182 + 0.227261 1.39459 -3.45194 0.896336 -0.305675 -0.321162 + 0.238741 1.42212 -3.45371 0.893249 -0.19723 -0.403988 + 0.241301 1.48495 -3.45658 0.85445 -0.00846099 -0.519464 + 0.253897 1.60135 -3.41568 0.995215 0.0188373 -0.0958803 + 0.208129 1.3714 -3.47365 0.75453 -0.243187 -0.609545 + 0.215691 1.39704 -3.47935 0.745912 -0.216412 -0.629905 + 0.218252 1.45987 -3.48222 0.722687 -0.0414908 -0.689929 + 0.241996 1.59388 -3.44778 0.854788 0.0715361 -0.514023 + 0.177285 1.35191 -3.49472 0.554495 -0.198112 -0.808261 + 0.184847 1.37756 -3.50042 0.560997 -0.240097 -0.792234 + 0.191368 1.42331 -3.50452 0.598302 -0.122097 -0.791914 + 0.208758 1.54906 -3.49504 0.673867 0.0754104 -0.734994 + 0.174044 1.31488 -3.49323 0.538996 -0.0313707 -0.841724 + 0.139275 1.33491 -3.513 0.208385 -0.128411 -0.96958 + 0.141663 1.36492 -3.51906 0.204341 -0.191438 -0.959998 + 0.148184 1.41067 -3.52316 0.281806 -0.0985886 -0.954393 + 0.181874 1.51251 -3.51734 0.453933 0.0225164 -0.890751 + 0.099036 1.33258 -3.50934 -0.33649 -0.0718157 -0.938945 + 0.101424 1.36259 -3.51539 -0.315509 -0.164939 -0.934478 + 0.123403 1.43634 -3.52897 0.00318025 -0.053921 -0.99854 + 0.06286 1.34401 -3.48573 -0.544687 -0.0711034 -0.835619 + 0.057839 1.37151 -3.48744 -0.560434 -0.144803 -0.815442 + 0.054059 1.41429 -3.49364 -0.619498 -0.16478 -0.767509 + 0.097644 1.40537 -3.52159 -0.335099 -0.150186 -0.930136 + 0.029353 1.43453 -3.47524 -0.549058 -0.133942 -0.824982 + 0.066486 1.49502 -3.5204 -0.464117 -0.0279521 -0.885333 + 0.092244 1.526 -3.52778 -0.201548 0.125674 -0.971383 + 0.157093 1.53818 -3.52316 0.219024 0.148888 -0.964293 + 0.011073 1.44453 -3.46711 -0.701663 -0.0462202 -0.711008 + 0.041779 1.51527 -3.50199 -0.659504 0.0362806 -0.750825 + 0.090427 1.62068 -3.50581 -0.0789496 0.214656 -0.973494 + 0.155275 1.63286 -3.50119 0.181658 0.25687 -0.94922 + 0.204926 1.6405 -3.48065 0.553611 0.213123 -0.805042 + -0.001172 1.43711 -3.44928 -0.953563 -0.0380412 -0.298782 + 0.011063 1.52054 -3.45595 -0.832286 0.0430625 -0.552671 + 0.009039 1.60204 -3.45199 -0.857011 0.00284538 -0.515291 + 0.039756 1.59678 -3.49803 -0.547017 0.0302118 -0.836576 + 0.002901 1.40358 -3.43164 -0.923075 -0.188257 0.335399 + -0.001168 1.44139 -3.43087 -0.934062 -0.0272306 0.35607 + -0.001183 1.51311 -3.43813 -0.997473 0.0436565 0.0560497 + -0.001204 1.6343 -3.43293 -0.997772 -0.0301779 0.0594994 + 0.009016 1.72638 -3.45139 -0.792856 0.0694456 -0.605439 + 0.021612 1.44002 -3.40411 -0.697793 0.00819096 0.716253 + 0.021597 1.51175 -3.41137 -0.743377 0.00729435 0.668832 + 0.064549 1.48211 -3.36411 -0.54446 -0.0033888 0.83878 + 0.056075 1.54083 -3.37199 -0.71319 -0.108131 0.692581 + 0.013123 1.57046 -3.41925 -0.736621 -0.0302573 0.675628 + 0.117553 1.48198 -3.34654 -0.0977576 -0.0105094 0.995155 + 0.064608 1.54626 -3.36014 -0.575365 -0.11508 0.80976 + 0.013115 1.62442 -3.41374 -0.798984 -0.0661801 0.597699 + -0.001212 1.68825 -3.42743 -0.957608 -0.0312965 0.28637 + 0.164313 1.51504 -3.35114 0.149745 0.0264483 0.988371 + 0.141276 1.56247 -3.35235 0.0652717 0.203226 0.976954 + 0.094516 1.52942 -3.34775 -0.230284 -0.00764833 0.973093 + 0.047256 1.5922 -3.37184 -0.618391 0.00652165 0.785844 + 0.021648 1.62986 -3.40189 -0.801785 -0.0833689 0.591769 + 0.233773 1.47268 -3.36828 0.605837 -0.21071 0.767178 + 0.201168 1.55176 -3.3605 0.277501 0.0926896 0.956244 + 0.143849 1.5932 -3.36212 0.0172028 0.307579 0.951367 + 0.077163 1.57536 -3.35946 -0.184267 0.217304 0.958553 + 0.03764 1.62064 -3.38122 -0.523824 0.144665 0.839452 + 0.237364 1.57854 -3.37971 0.60568 0.0752778 0.79214 + 0.227224 1.6152 -3.38105 0.490765 0.229968 0.840395 + 0.191027 1.58842 -3.36185 0.15985 0.189648 0.968753 + 0.251002 1.57982 -3.39807 0.928625 -0.00304574 0.371007 + 0.249449 1.65451 -3.39346 0.781966 0.00512945 0.6233 + 0.225862 1.63376 -3.38559 0.23243 0.123383 0.964755 + 0.193209 1.61933 -3.37365 0.1369 0.296086 0.9453 + 0.146032 1.62411 -3.37392 -0.0189266 0.311497 0.950059 + 0.252343 1.67604 -3.41108 0.977085 0.145859 -0.155013 + 0.243022 1.72825 -3.38648 0.862257 0.338479 0.376756 + 0.227827 1.7432 -3.37932 0.465086 0.283922 0.838501 + 0.234255 1.66947 -3.3863 0.262314 -0.0480649 0.963785 + 0.238164 1.68532 -3.43339 0.721099 0.315619 -0.616767 + 0.228842 1.73752 -3.40879 0.884248 0.298036 -0.359554 + 0.226613 1.77986 -3.38927 0.699862 0.483846 0.52544 + 0.215475 1.75369 -3.38439 -0.101678 0.212118 0.97194 + 0.193972 1.69836 -3.3807 0.0147462 -0.000807294 0.999891 + 0.207717 1.75593 -3.44368 0.639032 0.293813 -0.710853 + 0.205488 1.79827 -3.42416 0.557475 0.742844 -0.37068 + 0.21426 1.79034 -3.39435 0.240132 0.743464 0.624178 + 0.158067 1.74829 -3.46422 0.149806 0.361443 -0.920281 + 0.171983 1.80707 -3.43425 0.210681 0.857248 -0.469829 + 0.180756 1.79915 -3.40445 0.186924 0.858491 0.477549 + 0.184037 1.77387 -3.38475 0.185257 0.36676 0.911683 + 0.078679 1.75631 -3.45961 -0.0180836 0.408411 -0.912619 + 0.092595 1.81509 -3.42965 -0.0998686 0.905177 -0.413135 + 0.073656 1.81358 -3.41959 -0.0489731 0.989422 -0.136549 + 0.161817 1.79763 -3.39439 0.117239 0.72963 0.673717 + 0.046079 1.64023 -3.49797 -0.35891 0.17425 -0.916963 + 0.034331 1.77586 -3.45177 -0.0388783 0.452067 -0.891136 + 0.015339 1.76984 -3.45134 -0.622701 0.309822 -0.718508 + 0.018947 1.81086 -3.42742 -0.516286 0.847025 -0.126479 + 0.037939 1.81688 -3.42785 -0.0844579 0.962918 -0.256235 + 0.060512 1.80431 -3.40227 -0.119611 0.685296 0.718375 + 0.096229 1.801 -3.39401 -0.0685941 0.624635 0.777898 + 0.012619 1.80389 -3.4243 -0.808603 0.564728 0.165056 + 0.054183 1.79735 -3.39915 -0.274466 0.318251 0.907405 + -0.001227 1.75864 -3.43234 -0.923257 0.257088 -0.285486 + 0.012625 1.78903 -3.41537 -0.64193 0.232742 0.730587 + 0.041176 1.76728 -3.40588 -0.304434 -0.0354456 0.951874 + 0.082733 1.7756 -3.38966 -0.232686 0.0457158 0.971477 + 0.118449 1.77725 -3.38438 -0.064762 0.178125 0.981874 + -0.00122 1.74377 -3.42341 -0.952216 0.0484923 0.30155 + 0.003485 1.74487 -3.41593 -0.632229 0.0733501 0.771302 + 0.03203 1.74658 -3.40808 -0.245848 0.0569166 0.967636 + 0.126819 1.71691 -3.38634 -0.177767 -0.045177 0.983035 + 0.162534 1.71855 -3.38106 -0.0562797 -0.0297123 0.997973 + 0.003494 1.68935 -3.41994 -0.78273 -0.0442299 0.620788 + 0.017607 1.69106 -3.4063 -0.488889 0.0536665 0.870694 + 0.046152 1.69277 -3.39845 -0.216602 0.0555768 0.974677 + 0.117674 1.6962 -3.38854 -0.154953 0.0559571 0.986336 + 0.012032 1.65829 -3.41127 -0.811477 -0.0666819 0.580567 + 0.026146 1.66 -3.39762 -0.4667 0.160985 0.869641 + 0.068242 1.64546 -3.38563 -0.108861 0.314174 0.943103 + 0.076789 1.66772 -3.39133 -0.125249 0.187527 0.974241 + 0.148311 1.67115 -3.38142 -0.0959864 0.0838564 0.991844 + 0.079736 1.60609 -3.36923 -0.0877122 0.33747 0.937241 + 0.154579 1.64638 -3.37962 -0.0428927 0.159269 0.986303 + 0.185579 1.66266 -3.37999 0.0509642 0.0400256 0.997898 + 0.191848 1.63789 -3.37818 0.124288 0.178936 0.975979 + -0.599647 0.53971 -3.10657 -0.395676 -0.882245 0.255117 + -0.586175 0.537351 -3.1025 0.0382405 -0.36898 0.92865 + -0.595384 0.580943 -3.08802 -0.141179 -0.173689 0.974629 + -0.576324 0.581513 -3.08902 0.232008 -0.168986 0.957923 + -0.59542 0.685736 -3.08962 -0.121704 0.0199639 0.992366 + -0.608855 0.583301 -3.0921 -0.40878 -0.186391 0.893396 + -0.621625 0.587169 -3.09879 -0.660344 -0.229308 0.715097 + -0.604914 0.543026 -3.11231 -0.598562 -0.793658 -0.108764 + -0.586175 0.537351 -3.1025 -0.000228404 -0.865987 -0.500066 + -0.571676 0.540546 -3.10803 0.494248 -0.846384 0.198376 + -0.561824 0.584708 -3.09456 0.558671 -0.186206 0.808216 + -0.551338 0.69182 -3.10017 0.52954 -0.0151439 0.84815 + -0.57636 0.686306 -3.09062 0.203849 0.0121425 0.978927 + -0.548117 0.591963 -3.10712 0.851263 -0.231359 0.470982 + -0.53763 0.699075 -3.11274 0.829607 -0.0636566 0.554708 + -0.523051 0.832381 -3.11654 0.778822 -0.0757542 0.622653 + -0.546327 0.812116 -3.10224 0.450073 -0.0204718 0.892757 + -0.571349 0.806601 -3.09268 0.137602 0.00995666 0.990437 + -0.566059 0.547996 -3.12093 0.607158 -0.724393 -0.326519 + -0.542499 0.599414 -3.12001 0.964921 -0.256918 0.0540361 + -0.527938 0.711931 -3.13499 0.986514 -0.114807 0.11666 + -0.513358 0.845238 -3.1388 0.981421 -0.121584 0.148425 + -0.605372 0.551679 -3.12737 -0.504871 -0.67326 -0.540209 + -0.591256 0.557566 -3.13757 -0.130253 -0.617476 -0.775731 + -0.577719 0.556843 -3.13631 0.13361 -0.639392 -0.757183 + -0.572659 0.555143 -3.13333 0.351091 -0.658123 -0.66604 + -0.54317 0.60936 -3.13725 0.876287 -0.286262 -0.387524 + -0.528608 0.721878 -3.15223 0.930118 -0.147194 -0.336475 + -0.511998 0.863474 -3.1584 0.945316 -0.118789 -0.303755 + -0.489735 1.01464 -3.13553 0.901997 -0.0358544 0.43025 + -0.513404 0.976579 -3.11442 0.590583 0.0166264 0.806806 + -0.536681 0.956314 -3.10013 0.301924 0.0503119 0.952004 + -0.539998 0.734214 -3.17363 0.788439 -0.157609 -0.594578 + -0.523388 0.875809 -3.1798 0.838502 -0.0856873 -0.538119 + -0.504907 1.04257 -3.16877 0.705771 -0.141211 -0.694224 + -0.488374 1.03288 -3.15513 0.894771 -0.120026 -0.430093 + -0.54977 0.616509 -3.14965 0.721342 -0.297364 -0.625492 + -0.557715 0.622536 -3.16013 0.549172 -0.304284 -0.778345 + -0.547943 0.740242 -3.18411 0.605163 -0.172563 -0.777174 + -0.53772 0.8772 -3.20066 0.671627 -0.123976 -0.730443 + -0.562775 0.624236 -3.16311 0.296171 -0.306305 -0.904688 + -0.556674 0.743174 -3.18924 0.337225 -0.194882 -0.921032 + -0.546451 0.880131 -3.2058 0.532273 -0.163371 -0.83066 + -0.539913 1.02456 -3.23291 0.784993 -0.168188 -0.596237 + -0.519239 1.04396 -3.18963 0.864432 -0.133117 -0.484806 + -0.575448 0.625885 -3.166 0.122911 -0.305821 -0.944122 + -0.569347 0.744823 -3.19213 0.135442 -0.219633 -0.966135 + -0.568121 0.873315 -3.22124 0.357146 -0.20475 -0.911331 + -0.588986 0.626609 -3.16726 -0.0837429 -0.299688 -0.950355 + -0.59271 0.746072 -3.19432 -0.0911789 -0.225703 -0.96992 + -0.591484 0.874562 -3.22342 -0.0441116 -0.246588 -0.968116 + -0.595496 1.0057 -3.25953 0.0893871 -0.245153 -0.965355 + -0.561584 1.01774 -3.24835 0.499579 -0.220708 -0.837681 + -0.60783 0.623089 -3.16117 -0.369648 -0.296901 -0.88046 + -0.611554 0.742554 -3.18823 -0.387965 -0.223543 -0.894154 + -0.620733 0.865637 -3.21597 -0.347217 -0.240953 -0.906301 + -0.621945 0.617204 -3.15097 -0.634042 -0.296573 -0.714167 + -0.635913 0.732394 -3.17062 -0.682062 -0.203838 -0.702311 + -0.645092 0.855476 -3.19836 -0.667173 -0.225454 -0.709966 + -0.660103 0.982023 -3.22652 -0.700863 -0.177584 -0.690837 + -0.624745 0.996771 -3.25208 -0.349333 -0.23417 -0.907266 + -0.631252 0.607295 -3.13376 -0.89556 -0.282222 -0.343979 + -0.64522 0.722485 -3.15341 -0.93676 -0.164801 -0.308741 + -0.659537 0.840098 -3.17165 -0.938084 -0.166875 -0.303565 + -0.630794 0.598641 -3.1187 -0.961021 -0.276293 -0.0100051 + -0.644429 0.707551 -3.12743 -0.989904 -0.109532 0.089957 + -0.658747 0.825165 -3.14567 -0.990262 -0.108617 0.0870886 + -0.673401 0.944969 -3.16209 -0.992213 -0.0530139 0.112706 + -0.674548 0.966645 -3.1998 -0.954531 -0.106706 -0.278361 + -0.626892 0.590484 -3.10453 -0.894568 -0.257589 0.365233 + -0.640528 0.699396 -3.11326 -0.88819 -0.0642961 0.454956 + -0.652691 0.812505 -3.12367 -0.883752 -0.0458961 0.4657 + -0.631437 0.693674 -3.10335 -0.61341 -0.0107478 0.789691 + -0.643601 0.806782 -3.11376 -0.630678 0.012058 0.775951 + -0.654151 0.924001 -3.12571 -0.622811 0.0443697 0.781113 + -0.667346 0.932309 -3.14009 -0.882415 -0.0134584 0.470278 + -0.618668 0.689806 -3.09666 -0.377197 0.0148861 0.926013 + -0.623781 0.803205 -3.10198 -0.402424 0.0313399 0.914917 + -0.634331 0.920423 -3.11392 -0.467161 0.0675622 0.881587 + -0.633643 1.04941 -3.12692 -0.40268 0.106096 0.909171 + -0.656342 1.0555 -3.13793 -0.585255 0.0550094 0.808981 + -0.600533 0.799135 -3.09494 -0.187967 0.0320471 0.981652 + -0.600585 0.924214 -3.09811 -0.254847 0.0736175 0.964175 + -0.599897 1.0532 -3.11111 -0.197205 0.168661 0.965745 + -0.571401 0.931682 -3.09585 -0.011632 0.0780312 0.996883 + -0.565238 1.05913 -3.11408 0.028076 0.184629 0.982407 + -0.590086 1.18348 -3.14239 0.138166 0.106386 0.984679 + -0.6301 1.19278 -3.13251 -0.0959655 0.0186021 0.995211 + -0.652799 1.19887 -3.14352 -0.784218 0.0287844 0.619817 + -0.530518 1.08377 -3.11835 0.165178 0.233346 0.958262 + -0.525271 1.19402 -3.15892 0.345001 0.213429 0.914014 + -0.555427 1.18942 -3.14536 0.225628 0.164157 0.960284 + -0.550287 1.27386 -3.15673 0.358751 -0.0906592 0.92902 + -0.59209 1.27668 -3.14199 0.268557 -0.134915 0.953769 + -0.504713 1.10571 -3.13411 0.439081 0.202716 0.875279 + -0.499466 1.21596 -3.17468 0.597109 0.190043 0.779323 + -0.492573 1.29355 -3.19233 0.78127 -0.0963477 0.616713 + -0.520131 1.27847 -3.17029 0.539567 -0.0830959 0.837832 + -0.481043 1.14377 -3.15522 0.72075 0.231674 0.653335 + -0.484796 1.23645 -3.19877 0.908286 0.105071 0.404941 + -0.477903 1.31404 -3.21642 0.962426 -0.177176 0.205777 + -0.4776 1.16244 -3.18029 0.947886 -0.0993064 -0.302738 + -0.481353 1.25512 -3.22384 0.99649 -0.0675314 -0.0494694 + -0.473405 1.33018 -3.25521 0.967246 -0.224523 -0.118427 + -0.460659 1.3721 -3.21381 0.947386 -0.201999 0.248306 + -0.494132 1.17213 -3.19393 0.621326 -0.407455 -0.669279 + -0.489383 1.26154 -3.26528 0.904318 -0.265871 -0.333947 + -0.481436 1.3366 -3.29665 0.919086 -0.253146 -0.30199 + -0.467885 1.3967 -3.30982 0.926739 -0.178114 -0.330802 + -0.456161 1.38825 -3.2526 0.973562 -0.205812 -0.0990929 + -0.51007 1.16584 -3.22143 0.878434 -0.250658 -0.406847 + -0.505321 1.25524 -3.29279 0.807945 -0.354259 -0.470878 + -0.497544 1.32711 -3.32836 0.81523 -0.298071 -0.496543 + -0.530744 1.14643 -3.26471 0.800967 -0.259368 -0.539611 + -0.523834 1.23336 -3.30446 0.711637 -0.361869 -0.602182 + -0.516057 1.30523 -3.34003 0.574913 -0.369233 -0.730166 + -0.510161 1.35627 -3.35803 0.521897 -0.224078 -0.823051 + -0.483994 1.38721 -3.34153 0.779375 -0.155347 -0.606994 + -0.554839 1.13258 -3.27977 0.492474 -0.292327 -0.819765 + -0.547929 1.21951 -3.31952 0.234365 -0.381114 -0.894329 + -0.54183 1.29023 -3.34464 0.127748 -0.388829 -0.91241 + -0.588752 1.12054 -3.29094 0.060928 -0.246485 -0.96723 + -0.571211 1.21744 -3.31362 -0.193696 -0.296705 -0.935119 + -0.565112 1.28817 -3.33874 -0.250429 -0.354414 -0.900931 + -0.571065 1.33621 -3.3588 -0.207175 -0.273593 -0.939268 + -0.535934 1.34128 -3.36264 0.136599 -0.265788 -0.954305 + -0.620091 1.11109 -3.28075 -0.396794 -0.180007 -0.900084 + -0.60255 1.20799 -3.30343 -0.364755 -0.194845 -0.910488 + -0.599507 1.281 -3.32394 -0.365231 -0.331205 -0.870005 + -0.655449 1.09635 -3.25519 -0.736141 -0.084263 -0.671562 + -0.635353 1.19906 -3.28293 -0.711862 -0.0973557 -0.695538 + -0.63231 1.27207 -3.30345 -0.668897 -0.302297 -0.679112 + -0.651824 1.31642 -3.31503 -0.68029 -0.350574 -0.643664 + -0.60546 1.32904 -3.344 -0.384072 -0.2997 -0.873309 + -0.673716 1.09031 -3.22162 -0.974606 0.0245032 -0.222582 + -0.65362 1.19303 -3.24936 -0.944054 0.0317371 -0.328261 + -0.655198 1.28001 -3.25948 -0.945845 -0.236045 -0.222844 + -0.672569 1.06863 -3.1839 -0.99552 0.0529502 0.0783397 + -0.659673 1.21423 -3.19885 -0.999563 0.0254922 -0.0149709 + -0.661251 1.30121 -3.20897 -0.979716 -0.200277 -0.00677262 + -0.681044 1.35648 -3.19517 -0.957619 -0.286415 0.030529 + -0.674712 1.32436 -3.27106 -0.92112 -0.353839 -0.162284 + -0.669537 1.06381 -3.15232 -0.911409 0.0557262 0.407711 + -0.65664 1.2094 -3.16726 -0.991558 0.015298 0.128755 + -0.661988 1.30826 -3.16319 -0.97416 -0.221999 0.0415746 + -0.681781 1.36353 -3.1494 -0.965138 -0.258043 0.0438349 + -0.69142 1.39961 -3.20542 -0.989456 -0.144563 -0.00880469 + -0.658146 1.29773 -3.13945 -0.805085 -0.301235 0.510975 + -0.676183 1.34892 -3.11645 -0.770492 -0.343897 0.536728 + -0.688456 1.41574 -3.10452 -0.792945 -0.183318 0.581062 + -0.694053 1.43035 -3.13747 -0.990135 -0.120375 0.0717083 + -0.632104 1.28597 -3.13211 -0.056002 -0.210062 0.976083 + -0.650141 1.33717 -3.10911 -0.123922 -0.362223 0.923817 + -0.663083 1.43514 -3.08933 -0.162551 -0.104915 0.981106 + -0.694699 1.50129 -3.10261 -0.830008 0.0232654 0.557266 + -0.595426 1.3246 -3.12652 0.274753 -0.25648 0.926676 + -0.592426 1.37152 -3.1152 0.34967 -0.208938 0.913278 + -0.647141 1.3841 -3.09778 0.0446279 -0.20144 0.978483 + -0.610696 1.49529 -3.0929 0.257429 -0.0587408 0.96451 + -0.669327 1.52069 -3.08742 -0.321728 0.0169348 0.946681 + -0.553622 1.32178 -3.14126 0.359052 -0.207137 0.910042 + -0.553749 1.3855 -3.13142 0.409103 -0.159627 0.898418 + -0.594754 1.44425 -3.10136 0.321298 -0.1072 0.940891 + -0.559255 1.52791 -3.11476 0.525865 -0.00144729 0.850567 + -0.630192 1.55703 -3.08185 0.100977 0.00421621 0.99488 + -0.511293 1.3278 -3.15936 0.556579 -0.206374 0.804754 + -0.511419 1.39152 -3.14952 0.546418 -0.0832728 0.833362 + -0.556076 1.45823 -3.11757 0.498239 -0.0479288 0.865714 + -0.518278 1.5461 -3.14755 0.615737 0.0208376 0.787676 + -0.578752 1.58965 -3.10371 0.481484 0.0939817 0.871402 + -0.483735 1.34288 -3.1814 0.78377 -0.196626 0.589103 + -0.476746 1.40784 -3.17703 0.747944 -0.0508529 0.661811 + -0.515098 1.47642 -3.15036 0.618598 0.015804 0.785548 + -0.45367 1.43706 -3.20944 0.918614 -0.0757433 0.387829 + -0.480425 1.49274 -3.17787 0.649703 -0.0134271 0.76007 + -0.48108 1.54865 -3.17669 0.625375 0.0117252 0.780236 + -0.505491 1.60545 -3.16036 0.59917 0.120357 0.791524 + -0.445592 1.45761 -3.24887 0.994259 -0.0965756 -0.0460731 + -0.448117 1.50459 -3.20464 0.867023 -0.0560747 0.495103 + -0.448771 1.5605 -3.20346 0.825698 -0.0102778 0.564019 + -0.468293 1.608 -3.18951 0.651428 0.105774 0.751301 + -0.511716 1.65707 -3.16855 0.560681 0.227697 0.79611 + -0.457315 1.46607 -3.30609 0.927942 -0.0428979 -0.370247 + -0.451384 1.55784 -3.28539 0.917649 0.0563454 -0.393377 + -0.440038 1.52514 -3.24407 0.997817 -0.0386578 -0.0535343 + -0.44228 1.59049 -3.2147 0.911159 0.0678879 0.406424 + -0.461802 1.63799 -3.20075 0.718727 0.172063 0.673665 + -0.479175 1.46326 -3.34309 0.709444 0.0159014 -0.704582 + -0.473244 1.55503 -3.32238 0.735131 0.147445 -0.661697 + -0.478094 1.62457 -3.30764 0.610939 0.257808 -0.748524 + -0.451207 1.62985 -3.27541 0.89141 0.0858259 -0.444996 + -0.439861 1.59715 -3.23409 0.997209 0.0732936 -0.0142172 + -0.505342 1.43232 -3.35958 0.470989 0.00252229 -0.882135 + -0.511446 1.53358 -3.35532 0.429737 0.164057 -0.887925 + -0.516295 1.60312 -3.34057 0.416979 0.309491 -0.854602 + -0.537834 1.40705 -3.37375 0.182857 -0.0822492 -0.979693 + -0.543937 1.50831 -3.36949 0.303683 0.0899715 -0.948516 + -0.537023 1.60222 -3.34832 0.184123 0.368034 -0.9114 + -0.511614 1.6777 -3.29858 0.28937 0.526455 -0.799444 + -0.572964 1.40198 -3.36991 -0.202334 -0.168695 -0.964678 + -0.574402 1.46469 -3.38058 -0.0760759 -0.0126248 -0.997022 + -0.579204 1.5192 -3.3771 -0.193519 0.176511 -0.965088 + -0.548739 1.56282 -3.36601 0.316272 0.24226 -0.917214 + -0.613389 1.3855 -3.35319 -0.410076 -0.176219 -0.894866 + -0.614827 1.44822 -3.36385 -0.511316 -0.027955 -0.858938 + -0.61217 1.51388 -3.35691 -0.602245 0.206249 -0.771208 + -0.57272 1.58157 -3.35632 -0.320473 0.419932 -0.84909 + -0.561004 1.62097 -3.33863 -0.333849 0.508427 -0.793755 + -0.659754 1.37288 -3.32422 -0.703646 -0.128658 -0.698806 + -0.664568 1.44361 -3.31868 -0.778445 0.0472612 -0.625931 + -0.66191 1.50927 -3.31174 -0.759013 0.167191 -0.629243 + -0.605686 1.57624 -3.33613 -0.557732 0.40186 -0.726253 + -0.685088 1.36749 -3.28131 -0.94787 -0.157782 -0.276854 + -0.689902 1.43823 -3.27578 -0.953167 -0.00851331 -0.302326 + -0.689713 1.50917 -3.26688 -0.934219 0.121313 -0.335437 + -0.651512 1.5761 -3.29962 -0.691041 0.356942 -0.628533 + -0.695203 1.43541 -3.17712 -0.996594 -0.0814507 -0.0129031 + -0.693685 1.47402 -3.24747 -0.994809 -0.00486001 -0.101647 + -0.696247 1.54582 -3.18751 -0.98585 0.153649 -0.0670154 + -0.679315 1.57599 -3.25476 -0.892513 0.288802 -0.346431 + -0.64218 1.63361 -3.26286 -0.620717 0.576953 -0.530882 + -0.700219 1.51068 -3.1681 -0.999331 0.0341685 -0.0130322 + -0.699069 1.50562 -3.12845 -0.992633 0.0457791 0.112181 + -0.68932 1.58412 -3.16583 -0.966944 0.254928 0.0055216 + -0.672388 1.61429 -3.23308 -0.864085 0.404913 -0.299003 + -0.681454 1.58115 -3.10895 -0.855246 0.300638 0.422103 + -0.685824 1.58547 -3.1348 -0.93901 0.297114 0.173158 + -0.662005 1.66235 -3.18016 -0.789805 0.607915 -0.0815297 + -0.631797 1.68167 -3.20994 -0.577602 0.725212 -0.374758 + -0.596354 1.63375 -3.29937 -0.509814 0.600107 -0.61641 + -0.669976 1.57825 -3.09243 -0.573563 0.209215 0.791994 + -0.644528 1.66153 -3.13093 -0.566316 0.625387 0.536821 + -0.658509 1.6637 -3.14912 -0.761311 0.573747 0.302028 + -0.616199 1.70786 -3.17339 -0.466202 0.884441 0.0204983 + -0.586291 1.68653 -3.23816 -0.442823 0.760081 -0.47559 + -0.630841 1.61459 -3.08686 -0.0659155 0.32616 0.943014 + -0.63305 1.65863 -3.1144 -0.293166 0.660131 0.691578 + -0.587185 1.68532 -3.13944 0.142529 0.609273 0.780046 + -0.602219 1.70569 -3.1552 -0.13366 0.816413 0.561787 + -0.584976 1.64128 -3.1119 0.369978 0.364401 0.854592 + -0.527694 1.69846 -3.172 0.405885 0.534781 0.741125 + -0.542727 1.71883 -3.18776 0.0864944 0.93909 0.332609 + -0.570693 1.71273 -3.20162 -0.280839 0.926943 -0.248809 + -0.55558 1.6976 -3.25378 -0.517705 0.769314 -0.37435 + -0.473636 1.66762 -3.19725 0.65203 0.228858 0.722828 + -0.489614 1.70901 -3.2007 0.430944 0.54735 0.717423 + -0.505275 1.72271 -3.2178 0.0235698 0.984215 0.1754 + -0.53324 1.7166 -3.23165 -0.302276 0.938104 -0.169085 + -0.455115 1.66861 -3.22165 0.891253 0.240903 0.384231 + -0.466949 1.69824 -3.21814 0.778274 0.294762 0.554442 + -0.486203 1.72094 -3.212 0.293686 0.834376 0.466439 + -0.479063 1.71713 -3.24826 0.180208 0.931448 -0.316118 + -0.514641 1.71965 -3.26057 -0.104614 0.921259 -0.374616 + -0.452697 1.67527 -3.24104 0.934911 0.205384 0.28941 + -0.463538 1.71018 -3.22945 0.79587 0.39513 0.458763 + -0.459991 1.71537 -3.24245 0.685288 0.726361 -0.0527265 + -0.462616 1.69921 -3.26817 0.580206 0.523166 -0.624226 + -0.44915 1.68046 -3.25404 0.968713 0.217705 -0.119158 + -0.464674 1.6486 -3.28953 0.645647 0.253095 -0.720474 + -0.498194 1.70173 -3.28048 0.14585 0.642187 -0.752545 + -0.536981 1.70065 -3.28269 -0.317241 0.762649 -0.56367 + -0.565644 1.64481 -3.31499 -0.496902 0.601337 -0.625685 + -0.532342 1.6768 -3.30633 -0.0263397 0.614403 -0.788553 + 0.586175 0.537351 -3.1025 0.000243815 -0.866319 -0.499491 + 0.571676 0.540546 -3.10803 -0.494402 -0.846208 0.19874 + 0.577719 0.556843 -3.13631 -0.133621 -0.639282 -0.757274 + 0.566059 0.547996 -3.12093 -0.607597 -0.724037 -0.326491 + 0.572659 0.555143 -3.13333 -0.351091 -0.658123 -0.66604 + 0.557715 0.622536 -3.16013 -0.549172 -0.304283 -0.778345 + 0.562775 0.624236 -3.16311 -0.296171 -0.306302 -0.904689 + 0.575448 0.625885 -3.166 -0.122914 -0.30581 -0.944125 + 0.591256 0.557566 -3.13757 0.130257 -0.617514 -0.775699 + 0.599647 0.53971 -3.10657 0.39564 -0.88214 0.255535 + 0.548117 0.591963 -3.10712 -0.851261 -0.231359 0.470985 + 0.542499 0.599414 -3.12001 -0.96492 -0.256926 0.0540289 + 0.54317 0.60936 -3.13725 -0.876285 -0.286263 -0.387527 + 0.54977 0.616509 -3.14965 -0.721344 -0.297361 -0.625491 + 0.547943 0.740242 -3.18411 -0.610035 -0.1674 -0.77449 + 0.561824 0.584708 -3.09456 -0.55867 -0.186201 0.808219 + 0.53763 0.699075 -3.11274 -0.823995 -0.0514958 0.564251 + 0.527938 0.711931 -3.13499 -0.986741 -0.113444 0.116068 + 0.528608 0.721878 -3.15223 -0.931691 -0.144223 -0.333394 + 0.539998 0.734214 -3.17363 -0.788 -0.154734 -0.595913 + 0.576324 0.581513 -3.08902 -0.232011 -0.168985 0.957922 + 0.57636 0.686306 -3.09062 -0.19836 0.0200232 0.979925 + 0.551338 0.69182 -3.10017 -0.53232 -0.00919047 0.846493 + 0.546327 0.812116 -3.10224 -0.448823 -0.0142062 0.893508 + 0.523051 0.832381 -3.11654 -0.781541 -0.0682296 0.620112 + 0.586175 0.537351 -3.1025 -0.0382405 -0.36898 0.92865 + 0.595384 0.580943 -3.08802 0.14118 -0.173692 0.974628 + 0.59542 0.685736 -3.08962 0.116646 0.0276129 0.99279 + 0.600533 0.799135 -3.09494 0.188462 0.0350788 0.981454 + 0.571349 0.806601 -3.09268 -0.142137 0.0174456 0.989693 + 0.608855 0.583301 -3.0921 0.408782 -0.186392 0.893395 + 0.618668 0.689806 -3.09666 0.378271 0.0167921 0.925543 + 0.623781 0.803205 -3.10198 0.394585 0.0423474 0.917883 + 0.621625 0.587169 -3.09879 0.660343 -0.229307 0.715098 + 0.631437 0.693674 -3.10335 0.61122 -0.00708814 0.791429 + 0.643601 0.806782 -3.11376 0.630021 0.0108439 0.776503 + 0.634331 0.920423 -3.11392 0.460695 0.0582786 0.885643 + 0.604914 0.543026 -3.11231 0.599491 -0.793042 -0.10814 + 0.626892 0.590484 -3.10453 0.894568 -0.257591 0.365234 + 0.640528 0.699396 -3.11326 0.888186 -0.0642877 0.454964 + 0.652691 0.812505 -3.12367 0.883749 -0.0458952 0.465705 + 0.605372 0.551679 -3.12737 0.504876 -0.673182 -0.540301 + 0.630794 0.598641 -3.1187 0.96102 -0.276298 -0.0100097 + 0.644429 0.707551 -3.12743 0.989905 -0.109532 0.0899532 + 0.658747 0.825165 -3.14567 0.990262 -0.108622 0.0870825 + 0.667346 0.932309 -3.14009 0.883841 -0.00785025 0.467721 + 0.60783 0.623089 -3.16117 0.369652 -0.296886 -0.880464 + 0.621945 0.617204 -3.15097 0.634053 -0.296556 -0.714165 + 0.631252 0.607295 -3.13376 0.895559 -0.282223 -0.343981 + 0.64522 0.722485 -3.15341 0.936761 -0.164802 -0.30874 + 0.659537 0.840098 -3.17165 0.938084 -0.166874 -0.303564 + 0.588986 0.626609 -3.16726 0.0837446 -0.299678 -0.950358 + 0.611554 0.742554 -3.18823 0.385992 -0.219779 -0.89594 + 0.635913 0.732394 -3.17062 0.682056 -0.203846 -0.702315 + 0.569347 0.744823 -3.19213 -0.153065 -0.198109 -0.968155 + 0.59271 0.746072 -3.19432 0.095782 -0.220521 -0.970668 + 0.591484 0.874562 -3.22342 0.0317438 -0.231361 -0.97235 + 0.620733 0.865637 -3.21597 0.343933 -0.244555 -0.906589 + 0.645092 0.855476 -3.19836 0.667174 -0.225451 -0.709966 + 0.556674 0.743174 -3.18924 -0.327316 -0.176342 -0.928314 + 0.546451 0.880131 -3.2058 -0.569295 -0.120708 -0.813224 + 0.568121 0.873315 -3.22124 -0.354692 -0.199356 -0.913483 + 0.53772 0.8772 -3.20066 -0.66086 -0.0869969 -0.74545 + 0.519239 1.04396 -3.18963 -0.865697 -0.130476 -0.483265 + 0.539913 1.02456 -3.23291 -0.790094 -0.178882 -0.586305 + 0.561584 1.01774 -3.24835 -0.494967 -0.229583 -0.838033 + 0.523388 0.875809 -3.1798 -0.828502 -0.099929 -0.550999 + 0.504907 1.04257 -3.16877 -0.701565 -0.125339 -0.701496 + 0.494132 1.17213 -3.19393 -0.702786 -0.297564 -0.646179 + 0.51007 1.16584 -3.22143 -0.883429 -0.260642 -0.389383 + 0.530744 1.14643 -3.26471 -0.793758 -0.276857 -0.541571 + 0.511998 0.863474 -3.1584 -0.945307 -0.128199 -0.299932 + 0.488374 1.03288 -3.15513 -0.907395 -0.0970555 -0.408919 + 0.4776 1.16244 -3.18029 -0.942434 -0.0736707 -0.326177 + 0.513358 0.845238 -3.1388 -0.980347 -0.103779 0.167779 + 0.489735 1.01464 -3.13553 -0.901546 -0.0392282 0.430902 + 0.481043 1.14377 -3.15522 -0.784117 0.158754 0.599965 + 0.481353 1.25512 -3.22384 -0.987784 -0.134563 -0.0785871 + 0.513404 0.976579 -3.11442 -0.620808 -0.00632017 0.783937 + 0.504713 1.10571 -3.13411 -0.43755 0.197514 0.877233 + 0.499466 1.21596 -3.17468 -0.560644 0.224104 0.797155 + 0.484796 1.23645 -3.19877 -0.909717 0.11299 0.39956 + 0.536681 0.956314 -3.10013 -0.299688 0.0448607 0.952982 + 0.530518 1.08377 -3.11835 -0.212246 0.192842 0.958 + 0.525271 1.19402 -3.15892 -0.354516 0.225312 0.907498 + 0.520131 1.27847 -3.17029 -0.522122 -0.06221 0.850599 + 0.492573 1.29355 -3.19233 -0.785878 -0.0859075 0.612386 + 0.571401 0.931682 -3.09585 -0.0186609 0.0506652 0.998541 + 0.565238 1.05913 -3.11408 -0.0270512 0.17978 0.983335 + 0.555427 1.18942 -3.14536 -0.22573 0.16772 0.959643 + 0.550287 1.27386 -3.15673 -0.377021 -0.0697977 0.923571 + 0.600585 0.924214 -3.09811 0.26355 0.0591017 0.962834 + 0.599897 1.0532 -3.11111 0.172546 0.132078 0.976106 + 0.590086 1.18348 -3.14239 -0.159698 0.122843 0.979493 + 0.59209 1.27668 -3.14199 -0.260878 -0.122862 0.957522 + 0.553622 1.32178 -3.14126 -0.370477 -0.22021 0.90236 + 0.633643 1.04941 -3.12692 0.424491 0.0719949 0.902565 + 0.6301 1.19278 -3.13251 0.110953 0.0452532 0.992795 + 0.632104 1.28597 -3.13211 0.0597121 -0.214011 0.975004 + 0.650141 1.33717 -3.10911 0.130295 -0.352698 0.926621 + 0.595426 1.3246 -3.12652 -0.269633 -0.261987 0.92664 + 0.656342 1.0555 -3.13793 0.591563 0.0726874 0.802976 + 0.652799 1.19887 -3.14352 0.805247 -0.0103013 0.59285 + 0.658146 1.29773 -3.13945 0.807861 -0.295182 0.510125 + 0.676183 1.34892 -3.11645 0.76637 -0.33731 0.546716 + 0.647141 1.3841 -3.09778 0.0196004 -0.208752 0.977772 + 0.654151 0.924001 -3.12571 0.625688 0.0396191 0.779066 + 0.669537 1.06381 -3.15232 0.902329 0.0752977 0.42442 + 0.65664 1.2094 -3.16726 0.9916 0.0126026 0.128726 + 0.661988 1.30826 -3.16319 0.972988 -0.22795 0.0365212 + 0.681781 1.36353 -3.1494 0.967543 -0.250185 0.0355947 + 0.672569 1.06863 -3.1839 0.995392 0.0595037 0.0751907 + 0.659673 1.21423 -3.19885 0.999634 0.0247544 -0.0109318 + 0.661251 1.30121 -3.20897 0.976592 -0.214797 0.011416 + 0.673401 0.944969 -3.16209 0.990919 -0.0358034 0.129608 + 0.673716 1.09031 -3.22162 0.981413 0.0772892 -0.175653 + 0.65362 1.19303 -3.24936 0.951391 0.015203 -0.307611 + 0.655198 1.28001 -3.25948 0.945373 -0.237076 -0.223751 + 0.674548 0.966645 -3.1998 0.954604 -0.107671 -0.277738 + 0.655449 1.09635 -3.25519 0.734716 -0.0814427 -0.673469 + 0.635353 1.19906 -3.28293 0.702803 -0.113193 -0.702321 + 0.63231 1.27207 -3.30345 0.667225 -0.299354 -0.682054 + 0.674712 1.32436 -3.27106 0.922116 -0.337831 -0.188608 + 0.660103 0.982023 -3.22652 0.698063 -0.181005 -0.69278 + 0.620091 1.11109 -3.28075 0.407212 -0.167293 -0.897881 + 0.60255 1.20799 -3.30343 0.37079 -0.203717 -0.906098 + 0.599507 1.281 -3.32394 0.37684 -0.318738 -0.869711 + 0.624745 0.996771 -3.25208 0.350796 -0.236701 -0.906044 + 0.588752 1.12054 -3.29094 -0.0477699 -0.263829 -0.963386 + 0.571211 1.21744 -3.31362 0.221806 -0.250833 -0.942276 + 0.565112 1.28817 -3.33874 0.235505 -0.334477 -0.912503 + 0.60546 1.32904 -3.344 0.381397 -0.294914 -0.876106 + 0.595496 1.0057 -3.25953 -0.105458 -0.262441 -0.959168 + 0.554839 1.13258 -3.27977 -0.518927 -0.321927 -0.791883 + 0.547929 1.21951 -3.31952 -0.249059 -0.359619 -0.899246 + 0.54183 1.29023 -3.34464 -0.0740494 -0.338382 -0.938091 + 0.523834 1.23336 -3.30446 -0.697298 -0.358713 -0.620564 + 0.516057 1.30523 -3.34003 -0.582081 -0.354316 -0.731876 + 0.535934 1.34128 -3.36264 -0.137462 -0.260306 -0.955691 + 0.571065 1.33621 -3.3588 0.201581 -0.280311 -0.938505 + 0.505321 1.25524 -3.29279 -0.818346 -0.327323 -0.472408 + 0.497544 1.32711 -3.32836 -0.816902 -0.301401 -0.49176 + 0.483994 1.38721 -3.34153 -0.775746 -0.161629 -0.609995 + 0.510161 1.35627 -3.35803 -0.488695 -0.194202 -0.850566 + 0.489383 1.26154 -3.26528 -0.904968 -0.270941 -0.328062 + 0.481436 1.3366 -3.29665 -0.915867 -0.261005 -0.305063 + 0.467885 1.3967 -3.30982 -0.928441 -0.188584 -0.320053 + 0.457315 1.46607 -3.30609 -0.927096 -0.0425561 -0.372401 + 0.479175 1.46326 -3.34309 -0.658218 0.0666085 -0.749875 + 0.473405 1.33018 -3.25521 -0.967109 -0.225588 -0.117519 + 0.456161 1.38825 -3.2526 -0.976451 -0.197322 -0.087216 + 0.445592 1.45761 -3.24887 -0.993196 -0.110171 -0.0377359 + 0.477903 1.31404 -3.21642 -0.960145 -0.167453 0.223787 + 0.460659 1.3721 -3.21381 -0.94851 -0.199063 0.246379 + 0.45367 1.43706 -3.20944 -0.939605 -0.120269 0.320434 + 0.440038 1.52514 -3.24407 -0.998748 -0.0292534 -0.0405875 + 0.483735 1.34288 -3.1814 -0.7891 -0.202178 0.580039 + 0.476746 1.40784 -3.17703 -0.74284 -0.0650878 0.666298 + 0.448117 1.50459 -3.20464 -0.872914 -0.0389951 0.486313 + 0.439861 1.59715 -3.23409 -0.998251 0.0590164 -0.00333648 + 0.451384 1.55784 -3.28539 -0.923745 0.0418626 -0.380713 + 0.511293 1.3278 -3.15936 -0.555793 -0.207193 0.805087 + 0.511419 1.39152 -3.14952 -0.521974 -0.0549894 0.851187 + 0.480425 1.49274 -3.17787 -0.626794 0.0123308 0.779088 + 0.48108 1.54865 -3.17669 -0.625956 0.0126517 0.779755 + 0.448771 1.5605 -3.20346 -0.827301 0.0108676 0.561654 + 0.553749 1.3855 -3.13142 -0.438725 -0.116221 0.891074 + 0.515098 1.47642 -3.15036 -0.60825 -0.00548743 0.793726 + 0.518278 1.5461 -3.14755 -0.617348 0.0191448 0.786457 + 0.468293 1.608 -3.18951 -0.655544 0.0993218 0.748597 + 0.592426 1.37152 -3.1152 -0.329543 -0.19098 0.924623 + 0.556076 1.45823 -3.11757 -0.529834 -0.0763028 0.844662 + 0.559255 1.52791 -3.11476 -0.52542 -0.0022562 0.85084 + 0.505491 1.60545 -3.16036 -0.596333 0.115572 0.794374 + 0.461802 1.63799 -3.20075 -0.728222 0.170082 0.663902 + 0.594754 1.44425 -3.10136 -0.320473 -0.108846 0.940983 + 0.610696 1.49529 -3.0929 -0.300197 -0.069006 0.951378 + 0.578752 1.58965 -3.10371 -0.455998 0.109159 0.883261 + 0.663083 1.43514 -3.08933 0.1661 -0.119303 0.978865 + 0.630192 1.55703 -3.08185 -0.10993 0.030537 0.99347 + 0.584976 1.64128 -3.1119 -0.376148 0.36761 0.850515 + 0.511716 1.65707 -3.16855 -0.528292 0.248882 0.811767 + 0.473636 1.66762 -3.19725 -0.654973 0.238546 0.717012 + 0.688456 1.41574 -3.10452 0.785701 -0.191776 0.588129 + 0.669327 1.52069 -3.08742 0.343381 0.0137743 0.939095 + 0.669976 1.57825 -3.09243 0.545064 0.242442 0.802575 + 0.630841 1.61459 -3.08686 0.0365782 0.313114 0.949011 + 0.587185 1.68532 -3.13944 -0.243375 0.578913 0.778221 + 0.694053 1.43035 -3.13747 0.98998 -0.126578 0.062592 + 0.699069 1.50562 -3.12845 0.992826 0.0512256 0.108035 + 0.694699 1.50129 -3.10261 0.831711 0.0149211 0.555008 + 0.681454 1.58115 -3.10895 0.85654 0.306446 0.415247 + 0.63305 1.65863 -3.1144 0.303509 0.605713 0.735523 + 0.695203 1.43541 -3.17712 0.994445 -0.105055 -0.00647968 + 0.700219 1.51068 -3.1681 0.999117 0.0413441 -0.00750497 + 0.685824 1.58547 -3.1348 0.953066 0.263568 0.148983 + 0.658509 1.6637 -3.14912 0.758979 0.576913 0.301865 + 0.644528 1.66153 -3.13093 0.593316 0.610819 0.524287 + 0.681044 1.35648 -3.19517 0.96115 -0.273334 0.0384635 + 0.69142 1.39961 -3.20542 0.988231 -0.150775 0.025803 + 0.693685 1.47402 -3.24747 0.984788 -0.00702456 -0.173617 + 0.685088 1.36749 -3.28131 0.939304 -0.178376 -0.293071 + 0.689902 1.43823 -3.27578 0.945442 0.0647043 -0.3193 + 0.664568 1.44361 -3.31868 0.772747 0.0315309 -0.633931 + 0.689713 1.50917 -3.26688 0.936623 0.0982223 -0.336288 + 0.659754 1.37288 -3.32422 0.700141 -0.11796 -0.704193 + 0.613389 1.3855 -3.35319 0.438298 -0.151212 -0.886019 + 0.614827 1.44822 -3.36385 0.520671 -0.036705 -0.852968 + 0.61217 1.51388 -3.35691 0.583947 0.183285 -0.79083 + 0.66191 1.50927 -3.31174 0.762714 0.1616 -0.626221 + 0.651824 1.31642 -3.31503 0.692214 -0.337772 -0.637769 + 0.572964 1.40198 -3.36991 0.180221 -0.134421 -0.974398 + 0.574402 1.46469 -3.38058 -0.0310583 -0.0582377 -0.997819 + 0.537834 1.40705 -3.37375 -0.178854 -0.0681361 -0.981514 + 0.543937 1.50831 -3.36949 -0.294815 0.0607852 -0.953619 + 0.548739 1.56282 -3.36601 -0.170037 0.270589 -0.947559 + 0.579204 1.5192 -3.3771 0.20674 0.158669 -0.965444 + 0.505342 1.43232 -3.35958 -0.470406 0.00257515 -0.882446 + 0.511446 1.53358 -3.35532 -0.48973 0.124315 -0.862966 + 0.537023 1.60222 -3.34832 -0.177116 0.384811 -0.905842 + 0.57272 1.58157 -3.35632 0.313933 0.408095 -0.857266 + 0.605686 1.57624 -3.33613 0.552667 0.405386 -0.728163 + 0.473244 1.55503 -3.32238 -0.72584 0.125452 -0.676327 + 0.478094 1.62457 -3.30764 -0.543061 0.294721 -0.786272 + 0.516295 1.60312 -3.34057 -0.420779 0.315638 -0.850481 + 0.532342 1.6768 -3.30633 0.048752 0.589195 -0.806519 + 0.561004 1.62097 -3.33863 0.273532 0.518614 -0.810074 + 0.451207 1.62985 -3.27541 -0.90451 0.100457 -0.414452 + 0.464674 1.6486 -3.28953 -0.642418 0.275969 -0.71494 + 0.511614 1.6777 -3.29858 -0.347331 0.436341 -0.830041 + 0.498194 1.70173 -3.28048 -0.230112 0.644323 -0.729312 + 0.536981 1.70065 -3.28269 0.370334 0.757388 -0.537788 + 0.44915 1.68046 -3.25404 -0.968714 0.217707 -0.119152 + 0.462616 1.69921 -3.26817 -0.580206 0.523167 -0.624225 + 0.452697 1.67527 -3.24104 -0.934911 0.205382 0.289412 + 0.459991 1.71537 -3.24245 -0.685288 0.726361 -0.0527265 + 0.479063 1.71713 -3.24826 -0.15561 0.937762 -0.310464 + 0.514641 1.71965 -3.26057 0.0862263 0.949963 -0.300226 + 0.44228 1.59049 -3.2147 -0.92994 0.0129552 0.367484 + 0.455115 1.66861 -3.22165 -0.891256 0.240899 0.384227 + 0.466949 1.69824 -3.21814 -0.778274 0.294762 0.554442 + 0.463538 1.71018 -3.22945 -0.79587 0.39513 0.458763 + 0.486203 1.72094 -3.212 -0.361332 0.839313 0.406194 + 0.489614 1.70901 -3.2007 -0.53588 0.426681 0.728544 + 0.527694 1.69846 -3.172 -0.387392 0.504702 0.771494 + 0.505275 1.72271 -3.2178 0.0152854 0.997239 0.0726618 + 0.53324 1.7166 -3.23165 0.277026 0.943507 -0.1818 + 0.55558 1.6976 -3.25378 0.525324 0.776818 -0.347259 + 0.565644 1.64481 -3.31499 0.489238 0.61329 -0.620099 + 0.602219 1.70569 -3.1552 0.117109 0.851477 0.511149 + 0.542727 1.71883 -3.18776 -0.0753783 0.939426 0.334361 + 0.570693 1.71273 -3.20162 0.284602 0.933741 -0.217093 + 0.586291 1.68653 -3.23816 0.434657 0.765782 -0.473975 + 0.596354 1.63375 -3.29937 0.515409 0.604416 -0.607483 + 0.616199 1.70786 -3.17339 0.424719 0.90491 0.0274165 + 0.662005 1.66235 -3.18016 0.83368 0.541835 -0.106734 + 0.631797 1.68167 -3.20994 0.564281 0.719699 -0.4045 + 0.64218 1.63361 -3.26286 0.61592 0.582273 -0.530661 + 0.651512 1.5761 -3.29962 0.694891 0.364893 -0.619661 + 0.68932 1.58412 -3.16583 0.968412 0.249146 0.0102062 + 0.672388 1.61429 -3.23308 0.864893 0.406283 -0.294778 + 0.696247 1.54582 -3.18751 0.986079 0.153325 -0.0643388 + 0.679315 1.57599 -3.25476 0.894676 0.284279 -0.344587 + -0.791942 1.67972 -2.78532 0.57781 0.0178925 -0.815975 + -0.814274 1.75317 -2.76932 0.5203 0.360047 -0.774374 + -0.806332 1.74827 -2.76421 0.525217 0.247992 -0.814031 + -0.798455 1.68053 -2.78978 0.573549 0.0465163 -0.817849 + -0.821988 1.74942 -2.77501 0.392105 0.393541 -0.831492 + -0.839872 1.7517 -2.78167 0.324098 0.346841 -0.880149 + -0.783999 1.67483 -2.78021 0.520899 0.00297169 -0.853613 + -0.790093 1.63509 -2.76291 0.0406251 -0.657813 -0.752085 + -0.796606 1.6359 -2.76737 0.556685 -0.551575 -0.621182 + -0.806169 1.67678 -2.79547 0.58398 0.0337181 -0.811068 + -0.766685 1.66096 -2.76934 0.516122 0.0149379 -0.856385 + -0.771053 1.63108 -2.76692 0.0382173 -0.475519 -0.878875 + -0.798681 1.59594 -2.70875 -0.0721774 -0.809432 -0.582761 + -0.806055 1.59391 -2.7076 0.346035 -0.808587 -0.475865 + -0.785028 1.76407 -2.74993 0.397479 0.181623 -0.899457 + -0.745381 1.67676 -2.75506 0.406251 0.141869 -0.902681 + -0.753738 1.61722 -2.75605 0.0231711 -0.459699 -0.887772 + -0.779641 1.59193 -2.71276 -0.331518 -0.754291 -0.566692 + -0.801867 1.57579 -2.67967 -0.0110228 -0.910444 -0.413485 + -0.790993 1.80279 -2.74591 0.275007 0.172826 -0.945782 + -0.698784 1.73801 -2.7231 0.50199 0.185631 -0.844717 + -0.679217 1.69936 -2.72044 0.629685 0.134055 -0.765197 + -0.725814 1.6381 -2.75241 0.355598 -0.0303209 -0.934147 + -0.734684 1.58857 -2.74297 0.0327962 -0.619907 -0.78399 + -0.853578 1.78375 -2.77168 0.220067 0.407499 -0.886293 + -0.844884 1.82745 -2.74932 0.163304 0.275887 -0.947216 + -0.769243 1.83163 -2.73897 0.27562 0.220377 -0.935664 + -0.70475 1.77673 -2.71907 0.421994 0.128815 -0.8974 + -0.658122 1.69592 -2.69818 0.752723 0.0196255 -0.658044 + -0.891408 1.71798 -2.81212 -0.0288314 0.365883 -0.930214 + -0.895508 1.7952 -2.77479 -0.0844793 0.454784 -0.886586 + -0.886814 1.83889 -2.75243 -0.0429062 0.443317 -0.895338 + -0.823133 1.85629 -2.74238 0.0960795 0.302845 -0.948184 + -0.747032 1.84454 -2.72582 0.413157 0.274891 -0.86818 + -0.877702 1.68593 -2.82211 0.0811858 0.173054 -0.981561 + -0.92314 1.70255 -2.80862 -0.434134 0.205941 -0.876993 + -0.92724 1.77977 -2.77129 -0.408501 0.381335 -0.829283 + -0.930033 1.84529 -2.73959 -0.358719 0.425365 -0.830895 + -0.896273 1.88951 -2.72178 -0.13649 0.4492 -0.882944 + -0.840681 1.667 -2.81473 0.317423 0.0409339 -0.9474 + -0.862381 1.6295 -2.81421 0.133586 -0.421408 -0.896978 + -0.899401 1.64843 -2.82158 -0.219311 -0.271845 -0.937018 + -0.959759 1.68877 -2.78486 -0.66129 0.110325 -0.741973 + -0.822798 1.66471 -2.80807 0.497409 -0.0407565 -0.866558 + -0.828764 1.61901 -2.79522 0.533216 -0.552134 -0.640959 + -0.886801 1.59359 -2.78687 -0.0550033 -0.675752 -0.735074 + -0.93602 1.63465 -2.79782 -0.445682 -0.311752 -0.839153 + -0.812135 1.63108 -2.78261 0.700325 -0.474183 -0.533568 + -0.853184 1.5831 -2.76788 0.363031 -0.782004 -0.506634 + -0.912271 1.57791 -2.76563 -0.193856 -0.75236 -0.629582 + -0.96149 1.61897 -2.77657 -0.630373 -0.365855 -0.684675 + -0.821584 1.58909 -2.72284 0.582354 -0.740776 -0.334836 + -0.835961 1.56237 -2.67765 0.502603 -0.853749 -0.136023 + -0.867561 1.55638 -2.72269 0.331162 -0.864951 -0.377081 + -0.907131 1.55762 -2.73451 -0.126398 -0.87775 -0.462145 + -0.967511 1.58868 -2.74568 -0.695097 -0.574968 -0.431569 + -0.80924 1.57376 -2.67852 0.270974 -0.922729 -0.274124 + -0.815939 1.57227 -2.6585 0.29356 -0.955485 0.0294999 + -0.846625 1.56037 -2.63923 0.499598 -0.859789 0.105657 + -0.880536 1.52939 -2.66746 0.362825 -0.921217 -0.140417 + -0.920106 1.53063 -2.67928 -0.314388 -0.874317 -0.369771 + -0.801583 1.5752 -2.67731 -0.0205262 -0.985793 -0.166709 + -0.808282 1.57371 -2.65728 -0.0105827 -0.997689 -0.0671084 + -0.826604 1.57027 -2.62008 0.279188 -0.959767 0.0300253 + -0.858967 1.55925 -2.59536 0.443394 -0.850433 0.283133 + -0.772061 1.57169 -2.68612 -0.196182 -0.958584 -0.206469 + -0.773179 1.56623 -2.65844 -0.205305 -0.967011 -0.150798 + -0.819686 1.57149 -2.61797 -0.0290257 -0.996849 -0.0738163 + -0.831381 1.56927 -2.59942 0.216451 -0.966743 0.136227 + -0.772345 1.57227 -2.68849 -0.261866 -0.892961 -0.366123 + -0.708951 1.55867 -2.69122 0.297745 -0.893899 -0.335102 + -0.710069 1.55321 -2.66353 0.179969 -0.963283 -0.199239 + -0.784583 1.564 -2.61912 -0.247033 -0.951614 -0.182772 + -0.727387 1.56891 -2.7187 0.0782802 -0.839601 -0.537534 + -0.685665 1.60601 -2.71707 0.685552 -0.337869 -0.644875 + -0.667228 1.59578 -2.68959 0.745192 -0.437352 -0.5034 + -0.659861 1.57763 -2.65526 0.747017 -0.635531 -0.195105 + -0.721856 1.54442 -2.62195 0.0933065 -0.989797 -0.107679 + -0.706759 1.60945 -2.73933 0.543491 -0.296007 -0.785492 + -0.635948 1.67068 -2.66666 0.875226 -0.1293 -0.466112 + -0.628581 1.65253 -2.63233 0.938848 -0.25293 -0.233646 + -0.671648 1.56884 -2.61368 0.655234 -0.754728 0.0324623 + -0.73635 1.54179 -2.59341 0.0294985 -0.999311 -0.0225176 + -0.799076 1.56137 -2.59059 -0.27454 -0.929179 -0.247497 + -0.824463 1.57049 -2.59732 -0.065448 -0.989332 -0.130146 + -0.825704 1.57004 -2.59471 -0.15939 -0.987205 0.00451154 + -0.837516 1.57337 -2.58611 0.1607 -0.924362 0.346021 + -0.691584 1.55657 -2.57761 0.495977 -0.831434 0.250447 + -0.769892 1.54273 -2.56278 -0.114509 -0.986836 0.114198 + -0.800317 1.56093 -2.58798 -0.336817 -0.92085 -0.196442 + -0.819805 1.56833 -2.57142 -0.461571 -0.886975 0.0151249 + -0.831839 1.57414 -2.58139 -0.293109 -0.940601 0.171338 + -0.647869 1.61192 -2.55956 0.751836 -0.537037 0.382536 + -0.725127 1.55751 -2.54698 0.322835 -0.844862 0.426597 + -0.78938 1.55013 -2.54623 -0.279208 -0.925488 0.255957 + -0.836968 1.58108 -2.53408 -0.531703 -0.77134 0.349752 + -0.849002 1.58689 -2.54405 -0.198611 -0.853073 0.482514 + -0.627933 1.62419 -2.59563 0.895932 -0.443789 -0.0188942 + -0.607579 1.71319 -2.55455 0.961848 -0.209037 0.176497 + -0.632771 1.68983 -2.52035 0.796637 -0.332407 0.504851 + -0.682931 1.59906 -2.52419 0.595678 -0.623201 0.506742 + -0.608227 1.74153 -2.59125 0.988661 -0.093604 -0.117422 + -0.598621 1.84131 -2.53434 0.995656 -0.0682184 0.0633647 + -0.610765 1.83919 -2.48811 0.915465 -0.179423 0.360182 + -0.635957 1.81583 -2.45391 0.735505 -0.293353 0.610718 + -0.667834 1.67697 -2.48499 0.608988 -0.369415 0.701901 + -0.612124 1.75432 -2.62735 0.93876 -0.0190606 -0.344043 + -0.602519 1.85409 -2.57044 0.990159 -0.0120693 -0.139424 + -0.59704 1.91508 -2.53562 0.991416 0.110059 -0.070574 + -0.599069 1.91403 -2.49513 0.986942 0.0314197 0.157982 + -0.611212 1.91192 -2.4489 0.926831 -0.158407 0.340429 + -0.634298 1.77956 -2.65887 0.81776 0.0940477 -0.567824 + -0.60743 1.84952 -2.60037 0.919925 0.10691 -0.377237 + -0.601951 1.91051 -2.56554 0.916953 0.183154 -0.354474 + -0.652085 1.79466 -2.67979 0.700277 0.195223 -0.686659 + -0.625217 1.86462 -2.62128 0.745472 0.264673 -0.611734 + -0.62568 1.9042 -2.60259 0.726355 0.303311 -0.616774 + -0.609082 1.94796 -2.55421 0.843702 0.381512 -0.377644 + -0.682539 1.78964 -2.70592 0.54287 0.185755 -0.819016 + -0.671696 1.85946 -2.66719 0.610272 0.334825 -0.717955 + -0.672159 1.89904 -2.64849 0.61009 0.351035 -0.710327 + -0.671718 1.93004 -2.63245 0.56861 0.44856 -0.689548 + -0.63281 1.94165 -2.59125 0.661195 0.429934 -0.6148 + -0.70215 1.85444 -2.69333 0.547532 0.325593 -0.770842 + -0.717728 1.89175 -2.68815 0.546454 0.346397 -0.762494 + -0.717287 1.92276 -2.6721 0.533751 0.454755 -0.712958 + -0.681147 1.97629 -2.60161 0.508432 0.569605 -0.645791 + -0.76261 1.88185 -2.72064 0.346042 0.291973 -0.891632 + -0.769293 1.92029 -2.7111 0.336904 0.418033 -0.843649 + -0.774611 1.97526 -2.67192 0.326314 0.606909 -0.724693 + -0.722605 1.97773 -2.63292 0.49186 0.57027 -0.657925 + -0.821635 1.89349 -2.72653 0.0229753 0.337679 -0.940981 + -0.828318 1.93192 -2.71699 -0.0504029 0.400772 -0.91479 + -0.827004 1.98142 -2.67858 0.0468778 0.647493 -0.760628 + -0.775786 2.05593 -2.59694 0.316922 0.644763 -0.695587 + -0.894775 1.92671 -2.70593 -0.163856 0.429055 -0.888292 + -0.894387 1.95759 -2.68967 -0.166821 0.526362 -0.833734 + -0.893074 2.0071 -2.65126 -0.132478 0.695714 -0.705997 + -0.88035 2.0551 -2.5984 -0.182775 0.717491 -0.672161 + -0.828179 2.06209 -2.6036 -0.00471381 0.692041 -0.721843 + -0.939981 1.93761 -2.6864 -0.445685 0.415391 -0.792979 + -0.939594 1.96849 -2.67014 -0.444465 0.534299 -0.71901 + -0.932038 2.00774 -2.6362 -0.434742 0.68001 -0.590412 + -0.919314 2.05575 -2.58333 -0.452493 0.701658 -0.550387 + -0.865733 2.12251 -2.53207 -0.223287 0.710371 -0.66747 + -0.939493 1.89591 -2.70895 -0.425375 0.416242 -0.803616 + -0.960655 1.93025 -2.67183 -0.775159 0.30184 -0.554996 + -0.960536 1.96055 -2.6545 -0.772933 0.411177 -0.483228 + -0.952981 1.9998 -2.62055 -0.747207 0.551452 -0.370921 + -0.93599 2.04759 -2.57125 -0.748226 0.579306 -0.323362 + -0.960167 1.88856 -2.69438 -0.715761 0.349496 -0.604598 + -0.975678 1.9163 -2.64574 -0.933873 0.210408 -0.289154 + -0.975559 1.9466 -2.6284 -0.934795 0.261847 -0.23999 + -0.966714 1.98608 -2.59648 -0.907364 0.393622 -0.147483 + -0.967167 1.83358 -2.72033 -0.678341 0.340172 -0.651258 + -0.98876 1.82 -2.69461 -0.843179 0.265588 -0.467453 + -0.98176 1.87498 -2.66866 -0.889918 0.319809 -0.32522 + -0.984638 1.89665 -2.60977 -0.995455 0.0869279 -0.0388972 + -0.985072 1.92573 -2.59022 -0.992825 0.118331 -0.0172081 + -0.964374 1.76805 -2.75202 -0.660491 0.281924 -0.695895 + -0.989218 1.75021 -2.72527 -0.8451 0.167064 -0.507835 + -1.00836 1.80441 -2.66154 -0.972147 0.198398 -0.124776 + -0.99072 1.85533 -2.63269 -0.973704 0.224957 0.0359918 + -0.982019 1.86931 -2.57694 -0.977464 -0.0539966 0.204077 + -0.984603 1.67093 -2.75811 -0.882443 -0.0137757 -0.470218 + -0.990624 1.64064 -2.72722 -0.946781 -0.20896 -0.244827 + -1.00882 1.73461 -2.6922 -0.964303 0.0181394 -0.264178 + -1.00914 1.71738 -2.65557 -0.981669 -0.122694 0.145849 + -1.00693 1.78301 -2.62707 -0.9627 0.040933 0.267458 + -0.96237 1.56839 -2.71456 -0.62331 -0.755816 -0.200568 + -0.990947 1.6234 -2.69058 -0.945689 -0.321992 -0.0446497 + -0.986209 1.61679 -2.64923 -0.930161 -0.305232 0.204042 + -0.989555 1.70095 -2.61435 -0.901705 -0.174052 0.39577 + -0.987338 1.76658 -2.58585 -0.864124 -0.0264926 0.502581 + -0.957632 1.56178 -2.6732 -0.748753 -0.643059 -0.160759 + -0.920658 1.52071 -2.64289 -0.235248 -0.971297 -0.0352134 + -0.958184 1.55185 -2.63682 -0.828443 -0.556163 0.0660652 + -0.960761 1.58365 -2.61395 -0.861433 -0.259178 0.43676 + -0.969637 1.61842 -2.61355 -0.837963 -0.221706 0.498663 + -0.972983 1.70257 -2.57868 -0.802892 -0.206512 0.559212 + -0.892878 1.52828 -2.6236 0.341683 -0.91388 0.219261 + -0.9349 1.53172 -2.60313 -0.485599 -0.779924 0.394858 + -0.937477 1.56351 -2.58027 -0.713627 -0.37592 0.591118 + -0.930964 1.6479 -2.55143 -0.742944 -0.186842 0.642748 + -0.93984 1.68266 -2.55103 -0.690224 -0.213433 0.691402 + -0.907121 1.53929 -2.58384 0.0272401 -0.829286 0.55816 + -0.917493 1.56796 -2.55886 -0.414358 -0.493459 0.764726 + -0.91098 1.65235 -2.53002 -0.598383 -0.165821 0.783863 + -0.870453 1.57278 -2.5533 0.204894 -0.767801 0.607042 + -0.880826 1.60145 -2.52833 -0.260776 -0.499113 0.826367 + -0.853085 1.62012 -2.50619 -0.442946 -0.440621 0.780802 + -0.883239 1.67101 -2.50788 -0.538309 -0.215685 0.81468 + -0.82717 1.59283 -2.50967 -0.414279 -0.631358 0.65556 + -0.806529 1.64262 -2.4703 -0.390172 -0.333282 0.858306 + -0.808238 1.67943 -2.46158 -0.41718 -0.25338 0.872788 + -0.884948 1.70783 -2.49917 -0.578255 -0.137293 0.804221 + -0.932378 1.72366 -2.53138 -0.623133 -0.107127 0.774745 + -0.779582 1.56188 -2.52182 -0.112349 -0.809437 0.576358 + -0.780614 1.61533 -2.47378 -0.184575 -0.537896 0.822557 + -0.753714 1.67357 -2.44263 0.0275537 -0.358409 0.933158 + -0.825457 1.74618 -2.44792 -0.484789 -0.329762 0.810085 + -0.749654 1.56542 -2.51827 0.163701 -0.804854 0.570449 + -0.750687 1.61887 -2.47023 0.154318 -0.531271 0.833029 + -0.710487 1.66167 -2.46787 0.421 -0.37668 0.825149 + -0.732821 1.75039 -2.41834 0.189249 -0.403489 0.895199 + -0.770933 1.74032 -2.42897 -0.255983 -0.367724 0.894009 + -0.707459 1.60697 -2.49548 0.435904 -0.558892 0.705427 + -0.690167 1.76568 -2.43545 0.509453 -0.355384 0.783684 + -0.697106 1.83315 -2.39531 0.528657 -0.461935 0.712136 + -0.743447 1.80265 -2.39067 0.156302 -0.545101 0.823671 + -0.642895 1.8833 -2.41377 0.723963 -0.353518 0.592371 + -0.643676 1.91163 -2.39283 0.72154 -0.326284 0.610671 + -0.698558 1.86001 -2.37167 0.521743 -0.457078 0.720322 + -0.744899 1.82951 -2.36703 0.169652 -0.550515 0.817405 + -0.78156 1.79259 -2.4013 -0.232799 -0.568733 0.78889 + -0.611993 1.94024 -2.42795 0.940178 -0.0642109 0.334577 + -0.64878 1.9439 -2.37416 0.691696 -0.153799 0.705622 + -0.703661 1.89229 -2.35301 0.442762 -0.317334 0.838606 + -0.747448 1.87221 -2.34499 0.0964543 -0.380229 0.919849 + -0.783061 1.81933 -2.37746 -0.238089 -0.558351 0.794706 + -0.606495 1.95083 -2.4826 0.97823 0.177073 0.108223 + -0.615318 1.98028 -2.46401 0.952364 0.286998 0.10313 + -0.620815 1.96969 -2.40936 0.904435 0.131668 0.405784 + -0.660547 1.96443 -2.36165 0.677487 -0.244718 0.693631 + -0.604467 1.95189 -2.52309 0.956868 0.281856 -0.0704339 + -0.616228 1.99017 -2.50007 0.922045 0.382861 -0.0570147 + -0.63063 2.01243 -2.43561 0.977425 0.195109 0.0810696 + -0.632582 1.99022 -2.39685 0.927693 0.0367494 0.371531 + -0.620843 1.98625 -2.53119 0.794554 0.503069 -0.340008 + -0.638015 2.03301 -2.49136 0.816237 0.485109 -0.31373 + -0.631541 2.02232 -2.47167 0.948275 0.315435 -0.0357073 + -0.633538 2.0472 -2.40539 0.999548 -0.0195783 -0.0228 + -0.64224 1.9879 -2.56041 0.611052 0.567786 -0.551574 + -0.659411 2.03466 -2.52058 0.626613 0.591763 -0.507122 + -0.642004 2.07463 -2.4519 0.874311 0.319315 -0.365538 + -0.63553 2.06394 -2.43221 0.984795 0.0972452 -0.143952 + -0.695002 2.04605 -2.54545 0.526019 0.600353 -0.602396 + -0.697051 2.09976 -2.49575 0.568416 0.54089 -0.619953 + -0.66146 2.08837 -2.47088 0.684603 0.4793 -0.549173 + -0.633207 2.11924 -2.40512 0.886307 0.235552 -0.398717 + -0.73646 2.04749 -2.57676 0.482143 0.597229 -0.64098 + -0.731765 2.11448 -2.51369 0.514485 0.554786 -0.653848 + -0.683014 2.15348 -2.43972 0.593593 0.509452 -0.622981 + -0.652663 2.13298 -2.42409 0.706599 0.4343 -0.55866 + -0.771091 2.12291 -2.53387 0.311195 0.636454 -0.705751 + -0.751319 2.1867 -2.46873 0.34495 0.628141 -0.697459 + -0.717728 2.16819 -2.45766 0.538277 0.537825 -0.648847 + -0.665825 2.23238 -2.35891 0.606256 0.498854 -0.619354 + -0.813562 2.1295 -2.53728 0.00273403 0.701855 -0.712315 + -0.79379 2.19329 -2.47214 0.0409115 0.709869 -0.703144 + -0.729772 2.26941 -2.38266 0.364625 0.625057 -0.690183 + -0.696182 2.2509 -2.37159 0.549229 0.532916 -0.643699 + -0.838586 2.19968 -2.45973 -0.189411 0.723393 -0.663947 + -0.811783 2.28762 -2.36961 -0.164354 0.733101 -0.659963 + -0.766986 2.28123 -2.38203 0.0618663 0.711739 -0.699714 + -0.701887 2.37513 -2.27055 0.373886 0.648147 -0.663412 + -0.897743 2.11935 -2.52144 -0.467667 0.688372 -0.554465 + -0.870596 2.19652 -2.4491 -0.442411 0.697236 -0.564034 + -0.839885 2.28881 -2.35764 -0.421895 0.710917 -0.562673 + -0.779373 2.3927 -2.25875 -0.148816 0.764298 -0.627456 + -0.739101 2.38695 -2.26991 0.0684736 0.739947 -0.669171 + -0.914418 2.11119 -2.50936 -0.754422 0.569669 -0.326073 + -0.884993 2.19264 -2.4363 -0.735518 0.583563 -0.34419 + -0.854282 2.28493 -2.34484 -0.731699 0.588301 -0.344265 + -0.820418 2.3904 -2.23527 -0.713451 0.628584 -0.309628 + -0.807475 2.39389 -2.24678 -0.409072 0.746312 -0.525051 + -0.949723 2.03387 -2.54718 -0.896401 0.428703 -0.112598 + -0.925867 2.09974 -2.48881 -0.896788 0.42718 -0.115278 + -0.896442 2.1812 -2.41575 -0.897487 0.424849 -0.118412 + -0.864403 2.27556 -2.32598 -0.897659 0.422328 -0.125891 + -0.957524 2.01599 -2.51681 -0.955873 0.283779 0.0760023 + -0.933667 2.08186 -2.45844 -0.955482 0.288736 0.0607038 + -0.903362 2.16533 -2.38881 -0.955779 0.289147 0.0536657 + -0.871323 2.25969 -2.29903 -0.961071 0.272168 0.0476102 + -0.976227 1.96522 -2.5583 -0.969524 0.239674 0.0507815 + -0.97488 1.94291 -2.52665 -0.965659 0.054861 0.253954 + -0.956177 1.99368 -2.48517 -0.958448 0.136292 0.250603 + -0.933468 2.06511 -2.43129 -0.962056 0.14511 0.231065 + -0.982453 1.8984 -2.55738 -0.978913 -0.0512429 0.197746 + -0.960645 1.90798 -2.49709 -0.903533 -0.108241 0.414622 + -0.947709 1.97814 -2.45671 -0.913408 -0.0244175 0.406312 + -0.925 2.04957 -2.40284 -0.92221 0.0065995 0.386634 + -0.968217 1.86347 -2.52782 -0.913737 -0.190978 0.358624 + -0.951119 1.83526 -2.50792 -0.817247 -0.303458 0.489919 + -0.946745 1.88814 -2.47632 -0.80619 -0.218147 0.549972 + -0.933809 1.95831 -2.43594 -0.816448 -0.163882 0.553674 + -0.967303 1.83543 -2.5493 -0.906375 -0.180192 0.382119 + -0.950205 1.80722 -2.5294 -0.804771 -0.291616 0.517014 + -0.931499 1.81302 -2.49631 -0.68208 -0.41811 0.59996 + -0.927125 1.86591 -2.46471 -0.675243 -0.315787 0.666578 + -0.920535 1.95166 -2.42247 -0.696359 -0.265959 0.666596 + -0.989285 1.83393 -2.59822 -0.949426 0.0785087 0.304017 + -0.974569 1.80005 -2.57059 -0.854614 -0.0328341 0.518224 + -0.952752 1.77705 -2.54377 -0.725919 -0.154795 0.670135 + -0.930384 1.78543 -2.5186 -0.669148 -0.361581 0.64923 + -0.96552 1.74357 -2.55903 -0.734927 -0.0970597 0.671164 + -0.932931 1.75525 -2.53296 -0.622377 -0.13721 0.770598 + -0.890599 1.77759 -2.4862 -0.592495 -0.434254 0.678508 + -0.891714 1.80518 -2.46391 -0.591678 -0.458083 0.663383 + -0.890927 1.85616 -2.43603 -0.624096 -0.337144 0.704867 + -0.885501 1.73942 -2.50075 -0.614311 -0.143049 0.775989 + -0.830554 1.78436 -2.43336 -0.486673 -0.493024 0.721164 + -0.832056 1.8111 -2.40953 -0.479915 -0.510504 0.713489 + -0.831269 1.86208 -2.38165 -0.54148 -0.345909 0.766255 + -0.78561 1.86204 -2.35542 -0.303951 -0.391738 0.868421 + -0.832096 1.92589 -2.35851 -0.543115 -0.325954 0.773809 + -0.884337 1.94192 -2.39379 -0.618329 -0.312631 0.721063 + -0.901706 2.03045 -2.37084 -0.693712 -0.270323 0.667599 + -0.753861 1.92561 -2.32744 0.0779647 -0.387109 0.918732 + -0.786437 1.92585 -2.33228 -0.313226 -0.378699 0.870906 + -0.819125 1.9989 -2.31556 -0.528493 -0.371839 0.763172 + -0.871366 2.01493 -2.35083 -0.613353 -0.325804 0.719479 + -0.710074 1.94569 -2.33546 0.434301 -0.365764 0.823164 + -0.747227 1.9851 -2.29544 0.0956462 -0.547987 0.831001 + -0.779803 1.98534 -2.30028 -0.303947 -0.458488 0.835108 + -0.799907 2.06345 -2.26903 -0.528842 -0.417472 0.738947 + -0.659523 2.00784 -2.33464 0.700719 -0.468635 0.537935 + -0.70905 1.98909 -2.30845 0.427835 -0.54444 0.721486 + -0.732671 2.0413 -2.25464 0.0843659 -0.616527 0.782801 + -0.760585 2.04989 -2.25375 -0.305038 -0.525347 0.794331 + -0.635489 2.025 -2.36662 0.94458 -0.239428 0.224594 + -0.651803 2.05132 -2.29745 0.677115 -0.546148 0.493192 + -0.694494 2.04529 -2.26765 0.413323 -0.619917 0.666983 + -0.711221 2.12707 -2.18568 0.0531025 -0.645284 0.762095 + -0.625806 2.09016 -2.36259 0.991254 -0.107836 -0.0760717 + -0.62777 2.06848 -2.32943 0.934487 -0.315185 0.165504 + -0.634814 2.13241 -2.22826 0.664094 -0.56651 0.487899 + -0.677505 2.12639 -2.19846 0.37949 -0.648561 0.659815 + -0.627798 2.10689 -2.38942 0.981496 0.00857287 -0.191293 + -0.611454 2.16777 -2.28951 0.990879 -0.109259 -0.0788736 + -0.613417 2.14609 -2.25635 0.927569 -0.332111 0.171223 + -0.613735 2.24551 -2.12377 0.646305 -0.527545 0.551349 + -0.618498 2.19627 -2.32841 0.888655 0.225263 -0.399435 + -0.613089 2.18393 -2.31271 0.980988 0.00482185 -0.194007 + -0.590573 2.27868 -2.18168 0.996485 -0.0678742 -0.0490926 + -0.592338 2.25919 -2.15187 0.936746 -0.283858 0.20477 + -0.635474 2.21187 -2.34328 0.711877 0.421106 -0.562051 + -0.597071 2.30593 -2.21899 0.893656 0.252396 -0.371047 + -0.592208 2.29483 -2.20487 0.985199 0.0430999 -0.165908 + -0.587719 2.34945 -2.12243 0.977946 0.174291 0.115079 + -0.641333 2.33997 -2.24791 0.611847 0.519943 -0.596073 + -0.614047 2.32153 -2.23386 0.715105 0.444631 -0.539377 + -0.593858 2.37316 -2.15465 0.882743 0.422712 -0.205132 + -0.588996 2.36206 -2.14054 0.966483 0.256705 0.00364073 + -0.671689 2.35849 -2.26059 0.553377 0.556708 -0.619557 + -0.634396 2.40377 -2.18031 0.621311 0.639082 -0.453372 + -0.60711 2.38534 -2.16626 0.723068 0.575599 -0.381914 + -0.607734 2.39539 -2.13214 0.694396 0.703007 0.153606 + -0.688289 2.43487 -2.20017 0.392066 0.765047 -0.510869 + -0.658091 2.41823 -2.19021 0.56824 0.670697 -0.476727 + -0.63869 2.41953 -2.15286 0.547702 0.836432 -0.020122 + -0.620986 2.40756 -2.14374 0.601163 0.798868 0.0203085 + -0.717338 2.4441 -2.19967 0.122588 0.855893 -0.502413 + -0.68198 2.44478 -2.16922 0.410428 0.909111 -0.0711744 + -0.662386 2.43398 -2.16276 0.510841 0.858766 -0.0395177 + -0.672795 2.42573 -2.1222 0.342374 0.84465 0.411516 + -0.655091 2.41377 -2.11308 0.376578 0.818919 0.433082 + -0.75761 2.44985 -2.18851 -0.0810503 0.891235 -0.44624 + -0.737161 2.45774 -2.16148 0.100596 0.99492 0.00386728 + -0.711029 2.45401 -2.16872 0.212976 0.97597 -0.0460878 + -0.69239 2.43653 -2.12866 0.290984 0.865544 0.40763 + -0.651936 2.40657 -2.10392 0.381553 0.775628 0.502811 + -0.779546 2.45078 -2.17917 -0.30742 0.891579 -0.332536 + -0.759097 2.45867 -2.15214 -0.0370713 0.995453 0.0877433 + -0.718521 2.44026 -2.12142 0.219071 0.868666 0.444328 + -0.792489 2.44729 -2.16766 -0.577158 0.808936 -0.111851 + -0.767495 2.4564 -2.14467 -0.187437 0.952816 0.238767 + -0.72692 2.43799 -2.11395 0.16542 0.847576 0.504233 + -0.694778 2.39405 -2.07133 0.223661 0.664216 0.713297 + -0.830539 2.38103 -2.21641 -0.881533 0.462726 -0.0937226 + -0.800389 2.43997 -2.15293 -0.723763 0.684222 0.0894853 + -0.775395 2.44909 -2.12994 -0.27419 0.883387 0.380063 + -0.779433 2.43983 -2.11423 -0.312894 0.82097 0.477604 + -0.730957 2.42874 -2.09823 0.159078 0.813555 0.559305 + -0.836761 2.36676 -2.19219 -0.946661 0.313167 0.0758939 + -0.806611 2.42571 -2.12871 -0.791968 0.554141 0.256348 + -0.871261 2.24376 -2.27541 -0.969185 0.108523 0.221141 + -0.836699 2.35083 -2.16856 -0.957604 0.144603 0.24917 + -0.806563 2.41327 -2.11027 -0.808616 0.411995 0.420001 + -0.779384 2.4274 -2.09579 -0.330332 0.736373 0.590454 + -0.903163 2.14858 -2.36166 -0.963085 0.132569 0.23429 + -0.86421 2.22607 -2.25259 -0.929285 -0.0416828 0.367004 + -0.83036 2.33492 -2.14804 -0.919975 -0.00651979 0.391924 + -0.800224 2.39736 -2.08975 -0.779297 0.271983 0.564554 + -0.775271 2.41707 -2.08247 -0.313604 0.665206 0.677608 + -0.896112 2.13089 -2.33884 -0.923206 -0.00632996 0.384253 + -0.886092 2.11841 -2.32031 -0.829607 -0.163921 0.533744 + -0.855504 2.2129 -2.23729 -0.836295 -0.202665 0.509448 + -0.821654 2.32176 -2.13275 -0.82778 -0.171744 0.53412 + -0.793428 2.38709 -2.07782 -0.701245 0.119225 0.702881 + -0.91498 2.03709 -2.3843 -0.831333 -0.140003 0.537851 + -0.874805 2.10837 -2.31093 -0.69172 -0.305455 0.654385 + -0.844218 2.20286 -2.22791 -0.693835 -0.354028 0.627102 + -0.811507 2.31273 -2.12431 -0.686514 -0.326457 0.649711 + -0.783282 2.37806 -2.06938 -0.551401 -0.0454096 0.833003 + -0.844465 2.09285 -2.29092 -0.615169 -0.367549 0.697477 + -0.817902 2.18362 -2.21486 -0.614205 -0.411344 0.67346 + -0.785192 2.29349 -2.11126 -0.579815 -0.40725 0.705664 + -0.773344 2.15422 -2.19296 -0.529769 -0.458467 0.713549 + -0.745921 2.26495 -2.09875 -0.494194 -0.451275 0.74305 + -0.72364 2.33405 -2.04824 -0.34988 -0.199049 0.915403 + -0.762911 2.36258 -2.06075 -0.438923 -0.143965 0.886916 + -0.739134 2.13566 -2.18479 -0.308667 -0.559451 0.769245 + -0.711712 2.24639 -2.09058 -0.294868 -0.527391 0.796813 + -0.697108 2.3191 -2.04342 -0.181196 -0.257626 0.949103 + -0.689506 2.352 -2.04349 0.0490756 0.28227 0.958079 + -0.716039 2.36695 -2.04832 -0.0397312 0.315207 0.948191 + -0.686618 2.23868 -2.09138 0.0611307 -0.603543 0.794984 + -0.672013 2.31139 -2.04422 0.122587 -0.307639 0.943574 + -0.673224 2.347 -2.04401 0.195474 0.259964 0.945626 + -0.678495 2.38904 -2.07185 0.225076 0.653767 0.722447 + -0.652901 2.23799 -2.10415 0.360663 -0.604149 0.710582 + -0.645524 2.31131 -2.05263 0.378136 -0.301161 0.875394 + -0.646734 2.34692 -2.05243 0.341751 0.27979 0.897175 + -0.653081 2.39392 -2.08458 0.320756 0.702836 0.634931 + -0.606357 2.31883 -2.07225 0.656619 -0.213063 0.723502 + -0.62132 2.3518 -2.06515 0.49193 0.326543 0.807077 + -0.604448 2.36293 -2.08553 0.692662 0.468086 0.54874 + -0.589485 2.32996 -2.09262 0.916922 -0.0124601 0.398871 + -0.603302 2.37558 -2.10487 0.725618 0.571427 0.383339 + -0.604579 2.38819 -2.12298 0.728045 0.614623 0.303626 + -0.741521 2.38546 -2.05643 -0.0821952 0.34911 0.93347 + -0.761891 2.40094 -2.06506 -0.175504 0.445567 0.877877 + -0.768476 2.4068 -2.07054 -0.274707 0.563677 0.778976 + -0.72026 2.41256 -2.07945 0.308817 0.760275 0.571501 + -0.726844 2.41842 -2.08492 0.191441 0.782105 0.59301 + 0.866811 1.38322 -1.52127 -0.509732 -0.270871 0.81658 + 0.888762 1.33938 -1.5282 -0.391881 -0.471329 0.790113 + 0.921874 1.33846 -1.52023 -0.116059 -0.65072 0.750396 + 0.828588 1.32435 -1.58429 -0.60527 -0.562075 0.563667 + 0.898161 1.30431 -1.5557 -0.316667 -0.763451 0.562908 + 0.924805 1.30314 -1.54361 0.135117 -0.744381 0.653942 + 0.915406 1.33821 -1.5161 0.00953819 -0.626113 0.779674 + 0.89667 1.41305 -1.49754 -0.495776 -0.133595 0.858113 + 0.814774 1.46235 -1.54842 -0.737016 -0.0651564 0.672727 + 0.806637 1.36818 -1.57736 -0.752968 -0.298712 0.586353 + 0.824142 1.30322 -1.61679 -0.629169 -0.6642 0.403714 + 0.898225 1.28984 -1.57942 -0.208773 -0.833488 0.511578 + 0.926761 1.34633 -1.50425 -0.600554 -0.62624 0.49715 + 0.936756 1.35346 -1.48437 -0.504794 -0.492368 0.709053 + 0.9392 1.36879 -1.48052 -0.402691 -0.122078 0.907158 + 0.929411 1.3979 -1.48212 -0.410404 -0.0659627 0.909515 + 0.926071 1.48754 -1.48244 -0.401241 -0.0239835 0.915658 + 0.844632 1.49219 -1.52469 -0.510054 -0.104623 0.853756 + 0.95556 1.31203 -1.54408 -0.379859 -0.790566 0.480325 + 0.965624 1.33399 -1.49664 -0.395119 -0.790783 0.467486 + 0.975619 1.34114 -1.47677 -0.380523 -0.763947 0.52114 + 0.995526 1.34064 -1.46447 -0.293498 -0.438771 0.849316 + 0.99797 1.35597 -1.46064 -0.150647 -0.106925 0.982788 + 0.950673 1.30417 -1.56006 -0.114048 -0.778626 0.617036 + 0.977756 1.2971 -1.54699 -0.506473 -0.73627 0.448767 + 0.987821 1.31907 -1.49956 -0.48958 -0.730349 0.476342 + 0.99798 1.32681 -1.47853 -0.436769 -0.698436 0.566939 + 1.01789 1.32631 -1.46624 0.0174018 -0.50152 0.864971 + 0.946034 1.30264 -1.56046 0.192164 -0.772265 0.605541 + 0.957355 1.29046 -1.57453 -0.0499628 -0.979301 0.196147 + 0.961993 1.29199 -1.57414 -0.198049 -0.657096 0.727325 + 0.939566 1.30239 -1.55634 0.407837 -0.71324 0.57005 + 0.946222 1.29217 -1.58454 0.394508 -0.91883 -0.0107361 + 0.959124 1.30255 -1.59204 0.133294 -0.838926 -0.52767 + 0.965185 1.29072 -1.57667 0.0689261 -0.849407 -0.523218 + 0.964165 1.28973 -1.57497 -0.181322 -0.982719 -0.0372109 + 0.931461 1.29292 -1.57181 0.134422 -0.885844 0.444084 + 0.931525 1.27846 -1.59554 0.384723 -0.896589 0.219353 + 0.95154 1.31375 -1.61899 0.641728 -0.736824 -0.212781 + 0.964442 1.32413 -1.62648 0.567989 -0.741769 -0.356607 + 0.966954 1.3028 -1.59418 0.0595751 -0.82353 -0.564136 + 0.924869 1.27115 -1.61975 0.540982 -0.82872 0.143394 + 0.944885 1.30645 -1.6432 0.803033 -0.582996 -0.123504 + 0.967505 1.3371 -1.64616 0.658293 -0.689032 -0.303126 + 0.972093 1.32925 -1.62651 0.337234 -0.790846 -0.510721 + 0.893779 1.26871 -1.61192 -0.098346 -0.873571 0.476656 + 0.906429 1.25446 -1.66273 0.462154 -0.886723 0.0116895 + 0.946496 1.31028 -1.64912 0.802415 -0.579369 -0.143043 + 0.969116 1.34092 -1.65209 0.561264 -0.812192 -0.159142 + 0.975156 1.34222 -1.6462 0.251508 -0.916943 -0.309773 + 0.875339 1.25203 -1.6549 -0.228851 -0.95378 0.194758 + 0.903505 1.25667 -1.6932 0.446769 -0.886119 -0.123247 + 0.943571 1.31249 -1.6796 0.809917 -0.571829 -0.130559 + 0.964555 1.33979 -1.67305 0.586218 -0.807387 -0.0668959 + 0.975047 1.343 -1.65421 0.138191 -0.990111 -0.0241573 + 0.80321 1.31023 -1.65291 -0.783326 -0.588685 0.199623 + 0.854407 1.25904 -1.69102 -0.440659 -0.897492 -0.0181088 + 0.902844 1.26036 -1.73079 0.40965 -0.878652 -0.24527 + 0.933747 1.30773 -1.71638 0.824156 -0.551179 -0.130266 + 0.95473 1.33503 -1.70984 0.621941 -0.775626 -0.107677 + 0.777832 1.37883 -1.62356 -0.930319 -0.211131 0.299885 + 0.792378 1.31083 -1.73172 -0.84136 -0.534063 -0.0830089 + 0.853746 1.26272 -1.72861 -0.369615 -0.928217 -0.0424014 + 0.906507 1.2704 -1.74915 0.423343 -0.821167 -0.382708 + 0.785969 1.473 -1.59462 -0.846604 -0.16432 0.506223 + 0.767001 1.37943 -1.70236 -0.957579 -0.275349 0.0849986 + 0.805334 1.30464 -1.76866 -0.703685 -0.638823 -0.311018 + 0.836232 1.54024 -1.52202 -0.559196 -0.213109 0.801177 + 0.786667 1.5553 -1.557 -0.72738 -0.247653 0.63999 + 0.757383 1.48395 -1.636 -0.930436 -0.203747 0.304592 + 0.917671 1.53559 -1.47976 -0.330372 -0.162615 0.929737 + 0.909642 1.57166 -1.47418 -0.333655 -0.250322 0.908853 + 0.837401 1.59422 -1.50277 -0.534312 -0.213828 0.817795 + 0.787836 1.60928 -1.53775 -0.701103 -0.178686 0.690308 + 0.758081 1.56626 -1.59838 -0.905764 -0.162278 0.391481 + 0.975695 1.53644 -1.46807 0.0978063 -0.0286618 0.994793 + 0.967667 1.5725 -1.4625 0.142435 -0.198551 0.969685 + 0.96191 1.62178 -1.44692 0.143792 -0.300523 0.942873 + 0.921571 1.62542 -1.45391 -0.301745 -0.277767 0.912028 + 0.958812 1.47239 -1.46701 -0.220395 0.0473985 0.974258 + 0.992002 1.49626 -1.47072 0.224827 0.0821256 0.970932 + 1.01241 1.55797 -1.48345 0.517338 0.113537 0.848216 + 0.99954 1.58436 -1.4781 0.580086 -0.0410519 0.81352 + 0.993784 1.63365 -1.46253 0.654745 -0.211883 0.725544 + 0.975596 1.43157 -1.46301 -0.125646 0.0106064 0.992018 + 1.00879 1.45545 -1.46672 0.252986 0.135154 0.957983 + 1.04955 1.45545 -1.48666 0.541948 0.172206 0.82258 + 1.02872 1.5178 -1.48609 0.503214 0.153758 0.850373 + 0.985385 1.40246 -1.46142 -0.126807 0.023592 0.991647 + 1.02388 1.41698 -1.46886 0.34373 0.106926 0.932961 + 1.06464 1.41698 -1.4888 0.587574 0.0937868 0.803717 + 1.10336 1.42596 -1.53069 0.769865 0.0661277 0.634772 + 1.0881 1.47372 -1.5253 0.705216 0.195286 0.681567 + 1.02708 1.35498 -1.46118 0.346921 -0.0640374 0.935706 + 1.01449 1.40147 -1.46196 0.216544 0.182118 0.959136 + 1.06501 1.38033 -1.48959 0.608449 -0.018807 0.79337 + 1.08948 1.37162 -1.51283 0.772983 -0.116767 0.623588 + 1.08911 1.40826 -1.51204 0.750265 0.0419963 0.659803 + 1.03833 1.32715 -1.47631 0.529763 -0.351632 0.77182 + 1.05562 1.36483 -1.48268 0.615018 -0.0358755 0.787697 + 1.06688 1.337 -1.49782 0.708889 -0.282648 0.64621 + 1.09143 1.34996 -1.52572 0.810164 -0.310612 0.497146 + 1.12177 1.38211 -1.56183 0.8468 -0.146448 0.511353 + 1.02621 1.29607 -1.4915 -0.0305767 -0.765769 0.642388 + 1.04665 1.2969 -1.50157 0.535785 -0.689587 0.487242 + 1.01605 1.28833 -1.51252 -0.334495 -0.876337 0.346622 + 1.03297 1.28272 -1.52354 0.194203 -0.97962 0.0512818 + 1.05531 1.2967 -1.54347 0.455162 -0.868409 -0.196707 + 1.06899 1.31088 -1.52149 0.709269 -0.612839 0.348377 + 1.09355 1.32383 -1.54939 0.748358 -0.648722 0.138276 + 0.979928 1.29485 -1.54782 -0.413328 -0.844 0.341795 + 0.996851 1.28924 -1.55885 0.0130213 -0.987396 -0.157735 + 0.99787 1.29022 -1.56055 0.21101 -0.874689 -0.436342 + 1.00113 1.30466 -1.58525 0.193832 -0.827729 -0.526587 + 1.05856 1.31114 -1.56816 0.337129 -0.861516 -0.379649 + 1.00627 1.33112 -1.61759 0.15531 -0.831116 -0.53397 + 1.0743 1.32636 -1.59466 0.262229 -0.894482 -0.36213 + 1.10928 1.33905 -1.57589 0.653786 -0.737074 0.171127 + 1.12372 1.36045 -1.57473 0.840681 -0.361592 0.403122 + 1.01313 1.34151 -1.63528 0.0540003 -0.955113 -0.291278 + 1.08116 1.33676 -1.61236 0.105224 -0.962444 -0.25026 + 1.12029 1.3413 -1.59924 0.546743 -0.824729 0.14455 + 1.13473 1.36269 -1.59807 0.869037 -0.356882 0.342651 + 1.01302 1.3423 -1.6433 -0.0787759 -0.994839 0.0639435 + 1.08388 1.33706 -1.61943 -0.0128107 -0.993122 0.116384 + 1.123 1.3416 -1.60631 0.496762 -0.83345 0.242051 + 1.14358 1.35647 -1.62877 0.844084 -0.425937 0.32573 + 1.13601 1.3998 -1.58048 0.861222 -0.160689 0.482158 + 0.970486 1.34187 -1.67517 0.0973232 -0.99146 0.0868046 + 1.01772 1.33528 -1.66846 -0.181854 -0.956707 0.227246 + 1.08858 1.33004 -1.64459 -0.0611224 -0.950204 0.305576 + 1.13185 1.33538 -1.63701 0.458953 -0.809627 0.365878 + 0.960991 1.33745 -1.70855 0.106363 -0.993829 0.0314786 + 1.00822 1.33085 -1.70182 -0.205089 -0.964112 0.168598 + 1.09911 1.30895 -1.69599 0.000168908 -0.993586 0.11308 + 1.14238 1.31428 -1.68841 0.53171 -0.829166 0.172534 + 0.957626 1.33829 -1.72863 0.22033 -0.861657 -0.457167 + 0.990595 1.33114 -1.72509 -0.136992 -0.88613 -0.442726 + 1.08148 1.30923 -1.71925 0.0157102 -0.955463 -0.294693 + 1.08335 1.31185 -1.72254 -0.0535052 -0.954854 -0.292217 + 0.951365 1.33587 -1.72993 0.680666 -0.684464 -0.261157 + 0.954266 1.34206 -1.73489 0.641603 -0.690388 -0.334229 + 0.960751 1.3446 -1.73259 0.203137 -0.7347 -0.647264 + 0.99372 1.33744 -1.72904 -0.0845932 -0.640538 -0.763253 + 0.995594 1.34006 -1.73234 -0.173426 -0.844825 -0.506155 + 0.93741 1.31778 -1.73474 0.828706 -0.538748 -0.151651 + 0.940311 1.32397 -1.7397 0.825138 -0.555887 -0.100681 + 0.942035 1.32651 -1.74363 0.811014 -0.581756 0.0617797 + 0.95694 1.34591 -1.74022 0.612021 -0.784068 -0.103283 + 0.963425 1.34844 -1.73791 0.140448 -0.919039 -0.368295 + 0.908231 1.27295 -1.75308 0.68021 -0.723059 0.120418 + 0.944279 1.32802 -1.75012 0.77189 -0.60442 0.197136 + 0.959184 1.34741 -1.74669 0.5284 -0.828906 0.183597 + 0.965886 1.35 -1.74384 0.0307256 -0.999527 -0.00144085 + 0.998055 1.34162 -1.73825 -0.217014 -0.957713 -0.188921 + 0.905776 1.26502 -1.76626 0.486282 -0.873507 0.0227194 + 0.941823 1.32009 -1.7633 0.754334 -0.588451 0.291044 + 0.962841 1.34356 -1.76123 0.45567 -0.809372 0.370515 + 0.969543 1.34615 -1.75837 -0.0101898 -0.956427 0.291793 + 1.01234 1.33979 -1.75085 -0.198914 -0.978947 0.0457937 + 0.866702 1.25654 -1.76555 -0.179958 -0.967861 -0.175672 + 0.873374 1.26773 -1.7878 -0.171095 -0.797875 -0.578033 + 0.912448 1.27623 -1.78851 0.481969 -0.849188 -0.215839 + 0.94631 1.31106 -1.78594 0.741521 -0.652515 0.156112 + 0.967328 1.33454 -1.78386 0.495941 -0.83553 0.2365 + 0.79685 1.32324 -1.78111 -0.790395 -0.426187 -0.440045 + 0.86489 1.28634 -1.80025 -0.354786 -0.651905 -0.670184 + 0.918915 1.28339 -1.80822 0.379433 -0.805714 -0.454814 + 0.952777 1.31823 -1.80566 0.666774 -0.741382 -0.0759342 + 0.76183 1.39164 -1.74576 -0.947077 -0.179023 -0.266452 + 0.814222 1.33839 -1.80653 -0.64372 -0.302701 -0.702848 + 0.864718 1.29753 -1.81167 -0.346094 -0.613928 -0.709444 + 0.918743 1.29457 -1.81965 0.224238 -0.692603 -0.685579 + 0.752212 1.49618 -1.6794 -0.995593 -0.0876368 0.033378 + 0.753606 1.5029 -1.71989 -0.961439 0.0233884 -0.27402 + 0.779201 1.40679 -1.77117 -0.832177 -0.0421317 -0.552907 + 0.829046 1.35425 -1.82431 -0.571572 -0.223133 -0.789631 + 0.879542 1.31338 -1.82945 -0.258196 -0.505559 -0.823253 + 0.74596 1.57993 -1.63403 -0.990521 -0.0607009 0.123224 + 0.747354 1.58665 -1.67453 -0.978295 0.0855167 -0.188749 + 0.770913 1.51923 -1.75069 -0.859402 0.0941858 -0.502551 + 0.796508 1.42312 -1.80198 -0.742 0.0132376 -0.670269 + 0.851056 1.36611 -1.83951 -0.444579 -0.16388 -0.880621 + 0.750401 1.64607 -1.60312 -0.990187 -0.00110638 0.139745 + 0.752199 1.66051 -1.6355 -0.975527 0.141205 -0.168546 + 0.76879 1.67356 -1.67546 -0.878867 0.253999 -0.403828 + 0.763945 1.5997 -1.71449 -0.884763 0.196587 -0.422549 + 0.762522 1.6324 -1.56747 -0.887756 -0.122147 0.443812 + 0.754476 1.71575 -1.57263 -0.984377 -0.0015908 0.176066 + 0.756274 1.73021 -1.60501 -0.980692 0.114585 -0.158469 + 0.791203 1.67569 -1.51711 -0.541301 -0.153592 0.826682 + 0.765889 1.69882 -1.54682 -0.859758 -0.0853924 0.503511 + 0.758561 1.78796 -1.55009 -0.982815 0.0079859 0.184422 + 0.818692 1.67483 -1.51004 -0.258377 0.0298413 0.965583 + 0.79282 1.75793 -1.50947 -0.467429 -0.178363 0.86585 + 0.769974 1.77104 -1.52429 -0.796549 -0.132821 0.589804 + 0.849331 1.64797 -1.4825 -0.590317 -0.0861354 0.802562 + 0.832232 1.66576 -1.50159 -0.23267 0.674029 0.701106 + 0.856572 1.70761 -1.52333 0.21422 0.202849 0.955491 + 0.84636 1.76001 -1.5058 0.351995 -0.201517 0.914051 + 0.820309 1.75707 -1.50241 -0.0505897 -0.183514 0.981714 + 0.924839 1.70033 -1.42998 -0.396303 -0.26986 0.877564 + 0.89595 1.71482 -1.44879 -0.662965 -0.0660972 0.745727 + 0.878852 1.73262 -1.46788 -0.912664 0.153712 0.378705 + 0.870112 1.69854 -1.51488 -0.575398 0.769583 0.276873 + 0.884407 1.72657 -1.53545 0.16572 0.351825 0.921279 + 0.965178 1.6967 -1.42299 0.0971641 -0.366115 0.925483 + 0.962515 1.76197 -1.39159 0.0494668 -0.456948 0.888117 + 0.940631 1.76602 -1.39685 -0.45406 -0.382372 0.804749 + 0.911742 1.78053 -1.41565 -0.702718 -0.271822 0.657495 + 0.986358 1.70191 -1.42978 0.60395 -0.293491 0.741018 + 0.983694 1.76718 -1.39836 0.632074 -0.331551 0.700397 + 0.977586 1.82251 -1.36353 0.632742 -0.390931 0.668439 + 0.962017 1.81868 -1.35854 0.0486928 -0.536832 0.842283 + 0.940133 1.82274 -1.3638 -0.475986 -0.476836 0.738962 + 1.01744 1.65185 -1.48818 0.82055 -0.083874 0.565388 + 1.01002 1.72012 -1.45543 0.90937 -0.0896113 0.406221 + 0.995673 1.77835 -1.41304 0.915394 -0.101612 0.389524 + 1.03451 1.61165 -1.51412 0.752299 0.0800696 0.653938 + 1.04836 1.68864 -1.53604 0.907406 0.138091 0.396919 + 1.01623 1.74048 -1.4822 0.956033 0.113264 0.270504 + 1.00188 1.79872 -1.4398 0.984819 0.0772673 0.155437 + 1.04738 1.58525 -1.51946 0.706893 0.198983 0.678754 + 1.06543 1.64843 -1.56198 0.834485 0.137703 0.533547 + 1.04813 1.70852 -1.55514 0.845394 0.424976 0.323581 + 1.01599 1.76034 -1.50129 0.901143 0.432403 -0.031131 + 1.00151 1.80988 -1.45507 0.932042 0.33166 -0.145943 + 1.06727 1.53607 -1.52473 0.708083 0.225767 0.669065 + 1.08274 1.6196 -1.57935 0.802613 0.210258 0.558215 + 1.10264 1.57041 -1.58462 0.770191 0.26683 0.579316 + 1.1061 1.64277 -1.62382 0.850943 0.239853 0.467297 + 1.08878 1.67161 -1.60646 0.851207 0.17636 0.494311 + 1.06948 1.72195 -1.58796 0.804773 0.154899 0.573015 + 1.05153 1.72021 -1.57018 0.653806 0.253555 0.712915 + 1.1312 1.49015 -1.58202 0.766807 0.236065 0.596892 + 1.15929 1.49629 -1.62432 0.888797 0.159086 0.429804 + 1.13073 1.57656 -1.62691 0.822449 0.302319 0.481851 + 1.14646 1.44239 -1.58743 0.863653 0.0225176 0.503583 + 1.16822 1.44519 -1.65465 0.974154 -0.0688945 0.215121 + 1.17284 1.51873 -1.66879 0.944891 0.177707 0.274956 + 1.16836 1.5483 -1.68293 0.926131 0.321747 0.196877 + 1.12625 1.60613 -1.64105 0.867512 0.311741 0.387608 + 1.15087 1.38488 -1.61849 0.892281 -0.270739 0.361296 + 1.16132 1.42747 -1.62544 0.953786 -0.0460698 0.296934 + 1.16281 1.36629 -1.68276 0.955738 -0.252189 0.151544 + 1.16971 1.38401 -1.71198 0.985208 -0.168634 -0.030454 + 1.16897 1.41515 -1.74191 0.97297 -0.133001 -0.188784 + 1.18177 1.46764 -1.69911 0.995487 -0.083494 0.0451023 + 1.17501 1.53132 -1.71119 0.956087 0.246035 -0.15926 + 1.15551 1.33786 -1.69304 0.921014 -0.380675 0.0825778 + 1.15435 1.34214 -1.73898 0.867569 -0.408862 -0.283118 + 1.1536 1.37329 -1.7689 0.806537 -0.338132 -0.484938 + 1.14166 1.3961 -1.79896 0.716646 -0.309902 -0.624803 + 1.16209 1.43471 -1.77781 0.894252 -0.0437264 -0.445423 + 1.14122 1.31857 -1.73434 0.537613 -0.77381 -0.33495 + 1.12081 1.34121 -1.76961 0.351543 -0.678879 -0.644625 + 1.10887 1.36402 -1.79966 0.451306 -0.65054 -0.610836 + 1.12082 1.41464 -1.82495 0.716457 -0.19234 -0.670593 + 1.14125 1.45325 -1.8038 0.776066 0.0901003 -0.624182 + 1.09764 1.31002 -1.73515 -0.00304124 -0.960758 -0.277372 + 1.07722 1.33266 -1.77041 0.0673833 -0.886457 -0.457879 + 1.06411 1.34048 -1.79374 0.184022 -0.869776 -0.457848 + 1.06981 1.35429 -1.81241 0.260993 -0.787811 -0.557886 + 1.09939 1.39036 -1.83797 0.587326 -0.491057 -0.643359 + 1.01752 1.33057 -1.77356 -0.0327945 -0.998722 0.0384657 + 1.00441 1.33839 -1.79689 0.0841538 -0.910443 -0.404983 + 1.01555 1.35052 -1.81807 0.106838 -0.847384 -0.520121 + 1.02125 1.36435 -1.83674 0.116995 -0.785207 -0.60808 + 1.06033 1.38065 -1.85071 0.264508 -0.734201 -0.625288 + 0.974722 1.33694 -1.78108 0.0378411 -0.981341 0.188514 + 0.98251 1.3384 -1.80245 0.194066 -0.954064 -0.228256 + 0.993649 1.35055 -1.82362 0.225469 -0.841464 -0.491021 + 0.99208 1.36275 -1.84143 0.224675 -0.731475 -0.64379 + 0.996414 1.38162 -1.86005 0.114721 -0.768803 -0.629111 + 0.975116 1.33601 -1.80524 0.504604 -0.860644 -0.0683099 + 0.985499 1.34774 -1.8249 0.414596 -0.790654 -0.450529 + 0.98393 1.35994 -1.8427 0.31843 -0.674411 -0.666162 + 0.967246 1.38002 -1.86474 0.122181 -0.64373 -0.755436 + 0.988765 1.39406 -1.87874 -0.00797693 -0.589412 -0.807793 + 0.963161 1.32996 -1.82532 0.533264 -0.708512 -0.462212 + 0.960586 1.34898 -1.84185 0.343788 -0.601851 -0.720822 + 0.943902 1.36906 -1.86388 0.0775461 -0.468257 -0.880183 + 0.935798 1.39002 -1.87222 -0.179161 0.289045 -0.940401 + 0.916168 1.3136 -1.83618 0.0631166 -0.548984 -0.833447 + 0.91712 1.35833 -1.85396 -0.174175 -0.385521 -0.906111 + 0.909016 1.37928 -1.86229 -0.235678 -0.29067 -0.927344 + 0.879577 1.38728 -1.85458 -0.356619 0.0186646 -0.934063 + 0.977897 1.39575 -1.87826 -0.162868 -0.130107 -0.978032 + 0.880494 1.35811 -1.84722 -0.260736 -0.32044 -0.910678 + 0.818518 1.43499 -1.81718 -0.53672 0.102321 -0.837533 + 0.905572 1.40079 -1.86012 -0.28874 0.137098 -0.947541 + 0.803685 1.53284 -1.79816 -0.635609 0.163136 -0.754578 + 0.86351 1.54431 -1.82219 -0.276032 0.278569 -0.919894 + 0.878343 1.44646 -1.8412 -0.332643 0.155606 -0.930126 + 0.905215 1.41419 -1.85732 -0.321859 0.203044 -0.924759 + 0.796717 1.61331 -1.76195 -0.639976 0.338044 -0.690042 + 0.860608 1.62202 -1.78844 -0.25166 0.441123 -0.861439 + 0.964636 1.5442 -1.83363 -0.0582802 0.404076 -0.912867 + 0.9756 1.49514 -1.85648 -0.131803 0.335862 -0.932644 + 1.00247 1.46289 -1.8726 -0.190298 0.414101 -0.890116 + 0.798428 1.69134 -1.71503 -0.636144 0.392341 -0.664371 + 0.862319 1.70005 -1.74151 -0.24999 0.501494 -0.828257 + 0.961734 1.6219 -1.79988 -0.00855115 0.473337 -0.88084 + 1.03632 1.56513 -1.82489 0.26045 0.469349 -0.843728 + 1.04729 1.51607 -1.84774 0.24433 0.475268 -0.845235 + 0.766351 1.73233 -1.63718 -0.897547 0.206641 -0.389499 + 0.795989 1.7501 -1.67675 -0.765693 0.326224 -0.55434 + 0.805752 1.77556 -1.67281 -0.333036 0.580864 -0.742754 + 0.769426 1.80185 -1.60854 -0.85964 0.279734 -0.427514 + 0.779188 1.82732 -1.60459 -0.698909 0.455559 -0.551355 + 0.805421 1.83416 -1.62143 -0.203184 0.643701 -0.737811 + 0.827982 1.82389 -1.62545 0.262275 0.564566 -0.782609 + 0.828313 1.76528 -1.67683 0.209881 0.771557 -0.600541 + 0.759348 1.79972 -1.57636 -0.980372 0.136129 -0.142617 + 0.765688 1.86275 -1.54751 -0.95088 0.246581 -0.187147 + 0.777499 1.87088 -1.56637 -0.730178 0.446996 -0.516753 + 0.803731 1.87773 -1.5832 -0.368998 0.576876 -0.728735 + 0.764901 1.85098 -1.52125 -0.973073 0.0188829 0.229721 + 0.774462 1.90805 -1.49188 -0.973258 0.0249355 0.228355 + 0.77504 1.9167 -1.51119 -0.947347 0.270956 -0.170635 + 0.786851 1.92484 -1.53005 -0.711056 0.476532 -0.517027 + 0.774543 1.8401 -1.50329 -0.790856 -0.158585 0.591098 + 0.784104 1.89718 -1.47393 -0.785578 -0.20298 0.584522 + 0.789559 1.94929 -1.44557 -0.797212 -0.245721 0.55143 + 0.782274 1.95751 -1.45914 -0.975601 -0.00475762 0.219498 + 0.782852 1.96615 -1.47846 -0.944843 0.275386 -0.177298 + 0.797389 1.827 -1.48848 -0.458213 -0.274597 0.845362 + 0.800897 1.88754 -1.46304 -0.472918 -0.349431 0.808855 + 0.806352 1.93965 -1.43468 -0.475561 -0.412114 0.777177 + 0.818764 1.82256 -1.48349 -0.0645829 -0.326339 0.943044 + 0.822272 1.88311 -1.45804 -0.0592591 -0.417456 0.906763 + 0.8225 1.93631 -1.43091 -0.0673611 -0.486741 0.870945 + 0.824935 1.98148 -1.40299 -0.0595168 -0.479643 0.875443 + 0.808788 1.98483 -1.40677 -0.478088 -0.401238 0.781306 + 0.844815 1.82551 -1.48689 0.368747 -0.302957 0.878774 + 0.841422 1.88527 -1.46055 0.369227 -0.39024 0.843436 + 0.84165 1.93848 -1.43341 0.378912 -0.454753 0.805993 + 0.840044 1.98319 -1.40497 0.370029 -0.44517 0.815415 + 0.82469 2.01045 -1.38907 -0.0618344 -0.16525 0.984311 + 0.8628 1.83228 -1.49721 0.69882 -0.193724 0.688565 + 0.859408 1.89205 -1.47086 0.719024 -0.273931 0.638722 + 0.855242 1.94359 -1.44121 0.718737 -0.328703 0.612676 + 0.853636 1.98831 -1.41276 0.719534 -0.311942 0.620453 + 0.874195 1.77897 -1.51791 0.676469 -0.125144 0.725761 + 0.877897 1.84482 -1.5174 0.939806 0.00209016 0.341701 + 0.870505 1.90126 -1.4857 0.947571 -0.0761223 0.310346 + 0.86634 1.95281 -1.45605 0.952866 -0.103574 0.285165 + 0.862391 1.99558 -1.42447 0.946617 -0.0891164 0.309796 + 0.889292 1.79151 -1.53811 0.884927 0.139111 0.444469 + 0.879305 1.85613 -1.5382 0.975399 0.206905 -0.0760704 + 0.871914 1.91258 -1.5065 0.980783 0.170718 -0.0944488 + 0.867404 1.96136 -1.47176 0.982856 0.158859 -0.0935781 + 0.863455 2.00413 -1.44018 0.978324 0.192191 -0.0771038 + 0.913283 1.74562 -1.54745 0.224599 0.679926 0.698037 + 0.91404 1.75833 -1.57116 0.444114 0.870108 0.213715 + 0.890048 1.80422 -1.56183 0.936161 0.350899 -0.0217378 + 0.867427 1.86948 -1.56556 0.823437 0.37336 -0.427263 + 0.863182 1.92239 -1.52662 0.831641 0.370929 -0.413261 + 0.894918 1.72132 -1.52531 -0.588939 0.801163 0.106246 + 0.923794 1.74036 -1.53732 -0.38094 0.924197 -0.0272937 + 0.952938 1.74542 -1.54417 -0.00632487 0.993386 -0.114652 + 0.903651 1.76204 -1.48842 -0.702699 0.533287 -0.470976 + 0.925882 1.77462 -1.50761 -0.514275 0.588201 -0.624133 + 0.955026 1.77968 -1.51447 -0.0257015 0.676512 -0.735984 + 0.878845 1.73927 -1.47799 -0.907971 0.386447 -0.162008 + 0.899087 1.79644 -1.43839 -0.935934 0.318857 -0.149525 + 0.908816 1.80483 -1.45121 -0.777495 0.459167 -0.42973 + 0.931047 1.81741 -1.4704 -0.516242 0.596004 -0.61504 + 0.899094 1.78978 -1.42827 -0.925104 -0.0390471 0.3777 + 0.906243 1.84754 -1.39768 -0.951968 0.259491 -0.162547 + 0.915972 1.85595 -1.4105 -0.7745 0.461961 -0.432136 + 0.906249 1.84265 -1.39025 -0.942177 -0.120717 0.312617 + 0.911958 1.89358 -1.35878 -0.950611 0.262794 -0.165158 + 0.919284 1.89993 -1.36844 -0.773901 0.477597 -0.415907 + 0.932314 1.86519 -1.42462 -0.525027 0.602043 -0.601574 + 0.918897 1.8334 -1.37762 -0.707853 -0.371746 0.600623 + 0.911964 1.88869 -1.35134 -0.943951 -0.153564 0.292189 + 0.915968 1.93204 -1.31999 -0.95007 0.28164 -0.134336 + 0.923294 1.9384 -1.32966 -0.767422 0.509113 -0.389702 + 0.935626 1.90917 -1.38255 -0.51493 0.630635 -0.580643 + 0.942731 1.87105 -1.32796 -0.470611 -0.536769 0.700289 + 0.921495 1.8817 -1.34177 -0.713131 -0.417184 0.563385 + 0.915973 1.92818 -1.31413 -0.9417 -0.13543 0.307993 + 0.921242 1.95604 -1.29783 -0.888689 0.45838 0.0109117 + 0.926466 1.96057 -1.30472 -0.729134 0.636521 -0.251405 + 0.959263 1.86798 -1.32398 0.0407104 -0.60349 0.79633 + 0.942258 1.91278 -1.29366 -0.474826 -0.529396 0.703051 + 0.925505 1.92119 -1.30457 -0.708821 -0.410939 0.573326 + 0.921247 1.95218 -1.29197 -0.87881 0.0971644 0.467175 + 0.974832 1.87181 -1.32896 0.641662 -0.441204 0.627383 + 0.971073 1.91275 -1.29362 0.629866 -0.437903 0.641489 + 0.95879 1.90972 -1.28968 0.0502157 -0.596327 0.801169 + 0.983883 1.88026 -1.34004 0.927611 -0.177112 0.32889 + 0.980124 1.92119 -1.3047 0.926811 -0.161075 0.339229 + 0.975262 1.94566 -1.28323 0.861922 0.0563042 0.503905 + 0.968843 1.93965 -1.27537 0.593637 -0.156446 0.78938 + 0.956559 1.93662 -1.27144 0.0317551 -0.296395 0.954537 + 0.989565 1.83369 -1.3782 0.927127 -0.141926 0.346831 + 0.988447 1.89522 -1.35972 0.993572 0.019941 0.111432 + 0.983726 1.933 -1.32021 0.990768 0.035094 0.130949 + 0.978864 1.95746 -1.29875 0.932867 0.239561 0.269015 + 0.994129 1.84866 -1.39787 0.991489 0.0328007 0.12599 + 0.988169 1.90367 -1.37124 0.9366 0.300031 -0.181001 + 0.983448 1.94144 -1.33175 0.932314 0.326099 -0.156365 + 0.978738 1.9634 -1.30719 0.874662 0.484722 -0.00345886 + 0.993755 1.85983 -1.41314 0.936184 0.299037 -0.184759 + 0.982981 1.90748 -1.37727 0.62084 0.594711 -0.510761 + 0.979354 1.94445 -1.3365 0.620038 0.623844 -0.475785 + 0.974644 1.9664 -1.31195 0.572848 0.746418 -0.338683 + 0.988567 1.86364 -1.41917 0.628031 0.57067 -0.529069 + 0.971735 1.91015 -1.38211 0.330232 0.696066 -0.637526 + 0.968108 1.94712 -1.34135 0.322806 0.729585 -0.602911 + 0.966579 1.96839 -1.31515 0.302928 0.828847 -0.470369 + 0.969805 1.9715 -1.30236 0.434397 0.899283 -0.0508902 + 0.994451 1.81507 -1.46328 0.618416 0.597983 -0.50988 + 0.979564 1.81863 -1.46965 0.323729 0.665091 -0.672943 + 0.97368 1.8672 -1.42555 0.331487 0.667147 -0.667107 + 0.95189 1.91233 -1.3868 -0.0400755 0.730379 -0.681865 + 0.952452 1.94884 -1.34504 -0.0328945 0.763208 -0.645315 + 1.00893 1.76552 -1.50949 0.509336 0.67916 -0.528506 + 0.982022 1.77671 -1.5081 0.240849 0.671748 -0.700533 + 0.952568 1.8216 -1.47601 -0.040789 0.682803 -0.729463 + 0.953835 1.86938 -1.43022 -0.031336 0.700593 -0.712873 + 1.01475 1.72657 -1.54594 0.392391 0.91356 -0.106943 + 0.987834 1.73775 -1.54454 0.313461 0.941122 -0.126613 + 1.01815 1.73827 -1.56097 0.333278 0.293653 0.895932 + 0.988572 1.74562 -1.55695 0.176454 0.371544 0.911492 + 1.0327 1.79865 -1.56084 0.604262 -0.0691682 0.793778 + 1.01567 1.7933 -1.55082 0.325016 -0.171933 0.929948 + 0.986097 1.80064 -1.54679 -0.0383162 -0.199551 0.979138 + 0.953676 1.75329 -1.55657 -0.141179 0.479831 0.865928 + 1.05065 1.80039 -1.57863 0.823027 0.076056 0.562887 + 1.02393 1.86315 -1.54429 0.670406 -0.146151 0.727458 + 1.0069 1.85779 -1.53428 0.33041 -0.252079 0.909552 + 0.98619 1.85613 -1.53234 -0.0360483 -0.296041 0.954495 + 0.955781 1.8022 -1.55238 -0.367072 -0.147251 0.918464 + 1.05823 1.80894 -1.59774 0.943709 0.18023 0.277363 + 1.04226 1.87778 -1.57615 0.957066 0.075958 0.279741 + 1.03468 1.86924 -1.55703 0.863438 -0.0279794 0.503678 + 1.01649 1.92288 -1.51957 0.68078 -0.233348 0.694325 + 1.08344 1.73643 -1.6203 0.922525 0.23309 0.307599 + 1.08388 1.74579 -1.64166 0.9155 0.365741 -0.167607 + 1.05867 1.81829 -1.61909 0.962981 0.269164 0.0147819 + 1.0442 1.88418 -1.5904 0.982566 0.183879 0.0274396 + 1.03281 1.93526 -1.54636 0.966128 0.0083907 0.257928 + 1.10274 1.68609 -1.6388 0.928477 0.285324 0.237742 + 1.10032 1.68885 -1.67007 0.844187 0.489356 -0.218812 + 1.06756 1.75407 -1.66038 0.735995 0.409781 -0.53888 + 1.05554 1.82437 -1.63257 0.854704 0.351647 -0.381871 + 1.04108 1.89025 -1.60387 0.87975 0.337209 -0.335155 + 1.12121 1.65122 -1.66364 0.905436 0.387623 0.173016 + 1.11879 1.65398 -1.69492 0.765653 0.540044 -0.349468 + 1.084 1.69714 -1.68879 0.660941 0.508547 -0.551849 + 1.04663 1.76377 -1.67854 0.640029 0.411969 -0.648571 + 1.14137 1.61459 -1.68087 0.896607 0.422757 0.131803 + 1.14801 1.59761 -1.70914 0.845088 0.449594 -0.289295 + 1.12827 1.60294 -1.7296 0.628582 0.502555 -0.593568 + 1.09857 1.6381 -1.72614 0.558262 0.535911 -0.633358 + 1.15283 1.53819 -1.75413 0.793974 0.346618 -0.499462 + 1.13309 1.54353 -1.7746 0.585097 0.46513 -0.664316 + 1.10532 1.53438 -1.79755 0.488058 0.479183 -0.729509 + 1.10805 1.58706 -1.76083 0.578885 0.469159 -0.66692 + 1.0696 1.63577 -1.75368 0.52483 0.515647 -0.677246 + 1.17489 1.48719 -1.73501 0.946845 0.0903226 -0.30875 + 1.15272 1.49406 -1.77795 0.81882 0.196125 -0.539507 + 1.12311 1.49763 -1.80977 0.610504 0.350364 -0.710303 + 1.11164 1.45681 -1.83562 0.647869 0.179895 -0.740205 + 1.09534 1.48847 -1.83271 0.513726 0.392367 -0.762977 + 1.07225 1.49111 -1.84717 0.507356 0.398034 -0.764303 + 1.0753 1.52508 -1.82485 0.489936 0.46432 -0.737814 + 1.07804 1.57775 -1.78813 0.494471 0.485232 -0.721144 + 1.09737 1.43149 -1.85176 0.629567 0.0139265 -0.776821 + 1.06557 1.4637 -1.86328 0.52843 0.279584 -0.80162 + 1.04247 1.46635 -1.87773 0.193359 0.303913 -0.932871 + 1.04423 1.48211 -1.87005 0.177522 0.470682 -0.86426 + 1.07593 1.40723 -1.86478 0.535037 -0.298819 -0.790217 + 1.05129 1.43838 -1.87943 0.321225 0.11378 -0.940143 + 1.00071 1.44711 -1.88027 -0.182705 0.30798 -0.933685 + 1.05268 1.39308 -1.8694 0.307762 -0.665634 -0.679863 + 1.05412 1.41394 -1.88015 0.38233 -0.112089 -0.917202 + 1.00389 1.40927 -1.88379 -0.0913485 -0.0431159 -0.994885 + 1.00107 1.43371 -1.88308 -0.108481 0.116047 -0.987302 + 1.03086 1.39979 -1.88477 0.114306 -0.409271 -0.905225 + 1.02788 1.62315 -1.79044 0.301681 0.519481 -0.799455 + 1.01937 1.70534 -1.74027 0.356645 0.504052 -0.786597 + 1.05503 1.69481 -1.71634 0.578423 0.494647 -0.648654 + 0.95322 1.70409 -1.74971 -0.00172616 0.500178 -0.865921 + 0.965472 1.76805 -1.71504 0.0389043 0.468356 -0.882683 + 1.01097 1.77429 -1.70247 0.388503 0.449961 -0.804115 + 0.874571 1.76401 -1.70684 -0.215765 0.50595 -0.835141 + 0.96322 1.83567 -1.68111 -0.0164933 0.516224 -0.856295 + 1.00872 1.84191 -1.66855 0.387605 0.458023 -0.799986 + 1.03461 1.83407 -1.65072 0.649079 0.390356 -0.652931 + 0.861683 1.78372 -1.68945 -0.597936 0.623598 -0.503586 + 0.950332 1.85538 -1.66374 -0.317726 0.610017 -0.725899 + 0.975267 1.90391 -1.6352 -0.208535 0.561856 -0.800519 + 1.0025 1.90419 -1.63537 0.298996 0.514333 -0.803781 + 1.02839 1.89634 -1.61754 0.674428 0.430963 -0.599515 + 0.844417 1.76425 -1.68043 -0.452432 0.794534 -0.404995 + 0.913921 1.84691 -1.6455 -0.614085 0.644286 -0.455846 + 0.938856 1.89544 -1.61696 -0.542202 0.550342 -0.634933 + 0.859869 1.76859 -1.6341 0.445026 0.793956 -0.41423 + 0.875973 1.76755 -1.63771 -0.527664 0.752669 0.393777 + 0.893836 1.82196 -1.6254 -0.896356 0.299268 0.327085 + 0.896655 1.82743 -1.63648 -0.824761 0.562959 -0.0533535 + 0.921707 1.88933 -1.60415 -0.823308 0.447233 -0.349494 + 0.853077 1.821 -1.61849 0.512321 0.398105 -0.760947 + 0.87817 1.81756 -1.5892 0.818018 0.351029 -0.455659 + 0.884962 1.76516 -1.6048 0.466176 0.828904 -0.309189 + 0.896729 1.76634 -1.60699 -0.550414 0.680166 0.484168 + 0.82617 1.87946 -1.58753 0.0376388 0.588746 -0.807441 + 0.851265 1.87658 -1.58058 0.511033 0.515434 -0.687876 + 0.828572 1.93161 -1.54674 0.0456439 0.622702 -0.781127 + 0.84702 1.92949 -1.54163 0.501914 0.544805 -0.671766 + 0.806134 1.92987 -1.54242 -0.381639 0.587692 -0.713421 + 0.811053 1.97734 -1.50506 -0.37163 0.616737 -0.693921 + 0.828013 1.97864 -1.50834 0.0387334 0.652557 -0.756749 + 0.84646 1.97652 -1.50322 0.504421 0.566935 -0.651264 + 0.858672 1.97117 -1.49188 0.825376 0.387123 -0.410963 + 0.79177 1.97231 -1.49268 -0.712301 0.491453 -0.501101 + 0.797628 2.01363 -1.45839 -0.700366 0.532269 -0.475582 + 0.812841 2.01759 -1.46816 -0.372757 0.654729 -0.657558 + 0.829801 2.0189 -1.47144 0.045444 0.692976 -0.719527 + 0.844355 2.01723 -1.4674 0.493983 0.609319 -0.620251 + 0.78871 2.00747 -1.44416 -0.942371 0.300011 -0.148091 + 0.801572 2.03748 -1.43537 -0.64767 0.688258 -0.32684 + 0.816785 2.04146 -1.44513 -0.326553 0.793927 -0.512877 + 0.828873 2.04234 -1.44754 0.0308448 0.823181 -0.566941 + 0.788254 2.00064 -1.42894 -0.972322 0.0246197 0.232345 + 0.795223 2.03311 -1.42523 -0.855234 0.517342 -0.0305192 + 0.809004 2.04415 -1.42744 -0.459798 0.881304 -0.109035 + 0.817901 2.04647 -1.43316 -0.259383 0.937276 -0.232882 + 0.829989 2.04737 -1.43556 0.0498086 0.96876 -0.242947 + 0.795539 1.99244 -1.41536 -0.787446 -0.233218 0.570559 + 0.794767 2.02627 -1.40999 -0.883441 0.280727 0.375132 + 0.802389 2.03578 -1.4084 -0.586227 0.657626 0.473145 + 0.802656 2.03978 -1.4173 -0.609266 0.770668 0.186721 + 0.813198 2.01283 -1.39175 -0.406642 -0.104597 0.90758 + 0.799949 2.02044 -1.40034 -0.713163 0.0680816 0.697684 + 0.807571 2.02994 -1.39874 -0.452224 0.47853 0.752663 + 0.813367 2.04193 -1.40993 -0.224276 0.858176 0.461773 + 0.813634 2.04593 -1.41883 -0.252492 0.939872 0.229973 + 0.826811 2.02311 -1.39104 -0.0227871 0.272833 0.961792 + 0.815319 2.0255 -1.39372 -0.278669 0.332357 0.901045 + 0.817687 2.0367 -1.40026 -0.17387 0.738249 0.651734 + 0.819485 2.04025 -1.40646 0.00673967 0.884454 0.466579 + 0.831042 2.04727 -1.42219 0.0951323 0.973182 0.209445 + 0.835646 2.02411 -1.39219 0.227234 0.297828 0.92718 + 0.825435 2.03225 -1.39523 -0.0522344 0.571525 0.818921 + 0.83427 2.03325 -1.39638 0.170607 0.635874 0.7527 + 0.83939 2.03751 -1.40323 0.261961 0.77336 0.577314 + 0.839799 2.01216 -1.39104 0.346306 -0.12512 0.929741 + 0.849475 2.0158 -1.3966 0.653227 -0.0182164 0.756943 + 0.845322 2.02775 -1.39775 0.484766 0.411856 0.771606 + 0.85823 2.02307 -1.40831 0.880558 0.187929 0.435087 + 0.850442 2.032 -1.4046 0.6102 0.563452 0.556936 + 0.858992 2.02914 -1.41954 0.910346 0.407234 0.0736904 + 0.851204 2.03807 -1.41583 0.640972 0.726727 0.247025 + 0.841188 2.04106 -1.40945 0.311558 0.836697 0.45041 + 0.837159 2.04559 -1.41873 0.214142 0.939507 0.26734 + 0.852103 2.03688 -1.43541 0.7541 0.607915 -0.24854 + 0.847176 2.0426 -1.42511 0.551476 0.833615 0.0309872 + 0.856566 2.01188 -1.45606 0.825309 0.417335 -0.38039 + 0.843427 2.04067 -1.44351 0.465508 0.753491 -0.464277 + 0.8385 2.04639 -1.43321 0.312172 0.937369 -0.154554 + 0.822531 2.04825 -1.42455 -0.0694684 0.992306 0.102483 + 0.925807 1.75951 -1.57334 -0.411299 0.597867 0.688032 + 0.927912 1.80841 -1.56914 -0.726434 -0.0335528 0.686417 + 0.914592 1.82073 -1.59468 -0.849276 0.0526088 0.525322 + 0.955874 1.85768 -1.53792 -0.411358 -0.254141 0.875327 + 0.936802 1.86374 -1.55152 -0.772608 -0.123482 0.622759 + 0.923481 1.87607 -1.57706 -0.918817 0.0106625 0.394539 + 0.918888 1.88385 -1.59307 -0.970753 0.209136 0.117899 + 0.983264 1.91729 -1.51026 -0.0385597 -0.374533 0.926412 + 0.96098 1.91842 -1.51437 -0.409665 -0.333792 0.848975 + 0.941907 1.9245 -1.52797 -0.783661 -0.194019 0.590112 + 0.932115 1.93356 -1.54674 -0.936473 -0.062891 0.345054 + 0.927522 1.94134 -1.56276 -0.992672 0.104155 0.0612658 + 1.00397 1.91895 -1.51221 0.346889 -0.336199 0.875579 + 0.999619 1.97261 -1.48749 0.344914 -0.403702 0.847384 + 0.984005 1.97135 -1.48604 -0.0315257 -0.444023 0.895461 + 0.96172 1.97249 -1.49016 -0.416772 -0.39788 0.817308 + 0.947307 1.97706 -1.50044 -0.781325 -0.248361 0.57258 + 1.01214 1.97655 -1.49485 0.686758 -0.286408 0.668082 + 1.00749 2.02171 -1.46826 0.680776 -0.273483 0.679523 + 0.997615 2.0186 -1.46245 0.347852 -0.391195 0.852036 + 0.982001 2.01733 -1.46101 -0.0372974 -0.434504 0.899897 + 1.0203 1.98114 -1.50452 0.877327 -0.151467 0.455362 + 1.01565 2.02629 -1.47792 0.875941 -0.130227 0.464509 + 1.00985 2.05379 -1.4624 0.810516 0.146105 0.567201 + 1.00404 2.05053 -1.45548 0.635856 0.0333121 0.771089 + 0.994161 2.04743 -1.44967 0.306196 -0.0730943 0.949158 + 1.02724 1.92897 -1.53232 0.875826 -0.108865 0.470189 + 1.02586 1.98743 -1.51856 0.969797 -0.0168192 0.243333 + 1.02004 2.03125 -1.48901 0.965931 0.00602489 0.258728 + 1.01424 2.05876 -1.47348 0.896998 0.265072 0.353739 + 1.02733 1.99224 -1.52935 0.991211 0.1318 0.0113461 + 1.02151 2.03608 -1.49979 0.98602 0.164408 0.0271031 + 1.01517 2.06224 -1.48085 0.908245 0.392535 0.144937 + 1.0074 2.07084 -1.47634 0.60545 0.731745 0.313018 + 1.00647 2.06735 -1.46898 0.589432 0.661352 0.463879 + 1.03476 1.94165 -1.56062 0.989212 0.145646 0.015722 + 1.02503 1.99671 -1.53925 0.881103 0.341627 -0.32703 + 1.01969 2.03959 -1.5076 0.87834 0.3744 -0.297227 + 1.01336 2.06577 -1.48866 0.805969 0.568291 -0.165708 + 1.00634 2.0729 -1.48091 0.568049 0.818645 0.0845042 + 1.03246 1.94612 -1.57052 0.884622 0.332104 -0.327339 + 1.01545 2.00132 -1.54956 0.671293 0.478968 -0.565645 + 1.01011 2.04419 -1.51791 0.662039 0.520592 -0.539155 + 1.00661 2.06898 -1.49627 0.617417 0.681319 -0.393193 + 1.01978 1.9522 -1.58419 0.672125 0.459333 -0.580742 + 0.99642 2.00708 -1.56267 0.296671 0.590118 -0.750831 + 0.995099 2.04874 -1.52825 0.305392 0.630297 -0.713766 + 0.991595 2.07352 -1.50661 0.261216 0.78147 -0.566631 + 1.00074 1.95798 -1.5973 0.309374 0.560855 -0.767938 + 0.975847 2.00687 -1.56253 -0.244207 0.588952 -0.770389 + 0.974527 2.04854 -1.52813 -0.253411 0.629372 -0.734625 + 0.976944 2.0734 -1.50646 -0.216389 0.782104 -0.58437 + 0.990813 2.07877 -1.49456 0.23579 0.934527 -0.266576 + 0.973509 1.9577 -1.59711 -0.25647 0.558232 -0.78905 + 0.949082 2.00065 -1.54913 -0.554 0.512349 -0.656187 + 0.95341 2.04363 -1.51755 -0.546134 0.555732 -0.626817 + 0.946743 1.95147 -1.58371 -0.553467 0.488961 -0.674233 + 0.936118 1.99604 -1.53943 -0.83747 0.369265 -0.402848 + 0.940447 2.03902 -1.50785 -0.838137 0.404328 -0.366122 + 0.946611 2.0652 -1.48899 -0.766267 0.605144 -0.215955 + 0.955827 2.06849 -1.4959 -0.513041 0.716547 -0.472599 + 0.929595 1.94537 -1.5709 -0.841353 0.358811 -0.404203 + 0.934046 1.99201 -1.53129 -0.995019 0.0836439 0.0542248 + 0.938812 2.03584 -1.50142 -0.990397 0.117413 0.0729926 + 0.937515 1.98613 -1.51921 -0.940343 -0.096062 0.326385 + 0.942281 2.02995 -1.48935 -0.936737 -0.0728499 0.342369 + 0.944975 2.06202 -1.48256 -0.90688 0.366934 0.20719 + 0.953641 2.07063 -1.47757 -0.585212 0.724342 0.364494 + 0.954597 2.07248 -1.48133 -0.51175 0.85593 0.0741257 + 0.950006 2.02281 -1.47453 -0.783276 -0.227617 0.578506 + 0.947446 2.05783 -1.47398 -0.867967 0.213803 0.448244 + 0.956111 2.06645 -1.46899 -0.591633 0.615421 0.520794 + 0.969766 2.07362 -1.47095 -0.17785 0.90143 0.394705 + 0.970723 2.07549 -1.47471 -0.160577 0.906602 0.390241 + 0.964419 2.01823 -1.46426 -0.407496 -0.389513 0.82597 + 0.955171 2.05069 -1.45916 -0.720075 0.0676277 0.690593 + 0.960629 2.06227 -1.46033 -0.546737 0.492337 0.677261 + 0.967214 2.07131 -1.46621 -0.300105 0.858053 0.416751 + 0.965424 2.04743 -1.45186 -0.402195 -0.0619763 0.913454 + 0.970882 2.059 -1.45302 -0.286665 0.355037 0.889816 + 0.971731 2.06713 -1.45755 -0.223775 0.703876 0.674154 + 0.982013 2.06661 -1.45565 0.00366276 0.709287 0.704911 + 0.987789 2.06842 -1.45905 0.154454 0.806582 0.570587 + 0.983006 2.04653 -1.44862 -0.033658 -0.108566 0.993519 + 0.981163 2.05847 -1.45113 -0.0549915 0.337246 0.939809 + 0.992319 2.05937 -1.45218 0.229077 0.414214 0.880881 + 0.998095 2.06118 -1.45558 0.42272 0.510028 0.749119 + 0.990342 2.07074 -1.46379 0.162296 0.858346 0.486725 + 0.992911 2.07364 -1.47028 0.173208 0.87531 0.451476 + 0.972252 2.07813 -1.48049 -0.178992 0.958553 0.221672 + 1.00391 2.06445 -1.46249 0.541523 0.599848 0.589012 + 0.99444 2.07629 -1.47606 0.207902 0.891464 0.402577 + 0.993381 2.07834 -1.48062 0.216081 0.949075 0.229271 + 0.984601 2.08101 -1.48667 0.0231545 0.998041 0.0581277 + 0.976162 2.07864 -1.49442 -0.209449 0.939131 -0.27233 + 0.963814 2.07577 -1.48824 -0.367743 0.913219 -0.175487 + 0.999594 2.0761 -1.48852 0.450022 0.882156 -0.138853 + 0.936187 1.94568 -1.34079 -0.520259 0.657385 -0.545139 + 0.939359 1.96785 -1.31586 -0.480165 0.770993 -0.418343 + 0.950922 1.97011 -1.31884 -0.0508115 0.857391 -0.512151 + 0.93348 1.96797 -1.29823 -0.545887 0.837769 0.0122377 + 0.94102 1.97224 -1.30474 -0.384694 0.918542 -0.0910491 + 0.952584 1.9745 -1.30772 -0.0324882 0.983424 -0.178388 + 0.96174 1.9735 -1.30556 0.206319 0.96462 -0.164136 + 0.928256 1.96346 -1.29133 -0.661678 0.710269 0.240211 + 0.937365 1.96768 -1.28845 -0.283502 0.862474 0.419243 + 0.944905 1.97195 -1.29496 -0.157603 0.927137 0.339969 + 0.954131 1.97383 -1.29744 -0.0301258 0.953895 0.298624 + 0.963287 1.97281 -1.29528 0.142587 0.936476 0.320439 + 0.928259 1.9612 -1.2879 -0.651478 0.469036 0.596306 + 0.937368 1.96542 -1.28502 -0.27234 0.691559 0.669011 + 0.947165 1.96051 -1.27864 -0.139935 0.633509 0.760976 + 0.951054 1.97051 -1.29305 -0.00989646 0.810656 0.585439 + 0.963575 1.96415 -1.28342 0.266397 0.715895 0.645389 + 0.928037 1.94721 -1.28517 -0.678027 -0.143787 0.720837 + 0.935049 1.95622 -1.2811 -0.489486 0.261186 0.831977 + 0.944847 1.95131 -1.27473 -0.337323 0.215754 0.916332 + 0.953314 1.95908 -1.27673 -0.0168759 0.606118 0.795196 + 0.960497 1.96084 -1.27902 0.193969 0.65272 0.732347 + 0.94479 1.9388 -1.27427 -0.429763 -0.253205 0.866713 + 0.956616 1.94912 -1.2719 0.0406909 0.213526 0.976089 + 0.963799 1.9509 -1.2742 0.405407 0.292528 0.866067 + 0.970218 1.95691 -1.28205 0.654834 0.419877 0.628407 + 0.972324 1.96381 -1.29113 0.718078 0.511066 0.472414 + 0.965681 1.97106 -1.2925 0.297962 0.813113 0.500065 + 0.972199 1.96974 -1.29958 0.659057 0.721784 0.211354 + -0.899092 1.49376 -2.24544 0.347716 0.20168 -0.915652 + -0.886486 1.45631 -2.24676 0.411627 -0.152926 -0.89843 + -0.927139 1.43888 -2.25177 0.296551 -0.376099 -0.877842 + -0.848608 1.46705 -2.22149 0.566933 0.0178786 -0.82357 + -0.871592 1.43878 -2.22644 0.360939 -0.50584 -0.783485 + -0.887581 1.43198 -2.23119 0.350441 -0.71197 -0.608514 + -0.902475 1.44951 -2.25152 0.336819 -0.586789 -0.736363 + -0.95769 1.49484 -2.26045 0.215931 0.188097 -0.95812 + -0.924909 1.56648 -2.22949 0.338979 0.369488 -0.865201 + -0.861214 1.50451 -2.22016 0.485139 0.278077 -0.829043 + -0.954314 1.44138 -2.26401 0.319065 -0.257022 -0.912216 + -1.03233 1.48352 -2.27793 0.0674862 0.214674 -0.974351 + -1.04491 1.57445 -2.23899 0.000782238 0.376687 -0.92634 + -0.983508 1.56755 -2.24452 0.0830266 0.318008 -0.944446 + -1.0136 1.39205 -2.2446 0.0963116 -0.826824 -0.554154 + -1.02895 1.43006 -2.28148 0.0655307 -0.332016 -0.940995 + -1.0787 1.49585 -2.27286 -0.224748 0.226038 -0.947837 + -1.09129 1.58679 -2.23392 -0.109045 0.414363 -0.903555 + -1.0558 1.63596 -2.21233 -0.0471832 0.478576 -0.876777 + -0.986422 1.38955 -2.23237 0.208585 -0.792402 -0.573229 + -1.05482 1.38207 -2.20798 -0.410894 -0.870223 -0.271806 + -1.04752 1.38995 -2.23971 -0.286681 -0.846133 -0.449303 + -1.06288 1.42796 -2.27657 -0.383985 -0.436768 -0.813504 + -0.920256 1.42007 -2.23255 0.326465 -0.727625 -0.60331 + -0.920522 1.4091 -2.21389 0.375115 -0.848851 -0.372479 + -0.986688 1.37858 -2.21372 0.192482 -0.924479 -0.329073 + -0.895592 1.4307 -2.23229 0.263162 -0.746972 -0.610555 + -0.895922 1.41692 -2.20714 0.2813 -0.882887 -0.376006 + -0.928203 1.39501 -2.17716 0.324915 -0.938226 -0.119002 + -0.958305 1.38611 -2.16114 0.239838 -0.965313 0.103189 + -1.01679 1.36969 -2.19769 -0.0104022 -0.97555 -0.219531 + -0.887911 1.4182 -2.20603 0.0154502 -0.854308 -0.519537 + -0.903603 1.40282 -2.17041 0.118208 -0.958889 -0.257991 + -0.915701 1.39729 -2.13927 -0.029742 -0.999541 -0.00581299 + -0.940077 1.39375 -2.14157 0.176815 -0.968049 0.177812 + -0.87123 1.41119 -2.20415 -0.0824662 -0.779439 -0.621027 + -0.896651 1.40107 -2.16767 -0.226856 -0.910269 -0.346333 + -0.908748 1.39554 -2.13654 -0.427898 -0.867193 -0.254716 + -0.930671 1.40194 -2.11612 -0.0845671 -0.988612 0.12448 + -0.848054 1.43546 -2.2199 0.426623 -0.310922 -0.849306 + -0.847692 1.40788 -2.19762 0.19371 -0.655241 -0.730162 + -0.87997 1.39407 -2.16579 -0.432775 -0.744314 -0.508628 + -0.828642 1.45837 -2.20087 0.71805 -0.0727985 -0.692174 + -0.828088 1.42677 -2.19929 0.716303 -0.313041 -0.623631 + -0.830224 1.39283 -2.17614 0.624853 -0.447201 -0.639976 + -0.849827 1.37393 -2.17447 -0.0464246 -0.709832 -0.70284 + -0.824036 1.48986 -2.20217 0.636989 0.0877634 -0.765861 + -0.809707 1.45721 -2.1801 0.8428 -0.128338 -0.522701 + -0.799637 1.43961 -2.15706 0.777028 -0.169717 -0.606155 + -0.820154 1.37524 -2.1531 0.688939 -0.52652 -0.498136 + -0.85573 1.3557 -2.14582 -0.207085 -0.775424 -0.596518 + -0.813156 1.51146 -2.18697 0.688529 0.276065 -0.670609 + -0.805101 1.4887 -2.1814 0.89159 -0.0452952 -0.450573 + -0.791442 1.54012 -2.13914 0.866171 0.159485 -0.473616 + -0.850334 1.5261 -2.20495 0.504239 0.355548 -0.786974 + -0.799498 1.56287 -2.14471 0.744863 0.249575 -0.618782 + -0.916339 1.61308 -2.20198 0.354047 0.483464 -0.800571 + -0.841764 1.57271 -2.17745 0.550908 0.341102 -0.761676 + -0.789347 1.64319 -2.10231 0.809707 0.176438 -0.559683 + -0.994392 1.62906 -2.21786 0.11842 0.507327 -0.853578 + -0.92079 1.6404 -2.18212 0.305759 0.493066 -0.814492 + -0.831614 1.65302 -2.13505 0.528621 0.326104 -0.783719 + -0.998842 1.65637 -2.198 0.120238 0.517731 -0.847053 + -0.980605 1.70774 -2.17046 0.111612 0.414575 -0.903145 + -0.917688 1.70239 -2.15691 0.312348 0.331844 -0.890123 + -0.828512 1.71502 -2.10984 0.505614 0.222222 -0.83365 + -1.05076 1.68208 -2.18405 -0.0544873 0.516237 -0.854711 + -1.03252 1.73344 -2.15652 -0.112033 0.492671 -0.862974 + -0.999865 1.7905 -2.12876 -0.118145 0.530815 -0.839212 + -0.953246 1.792 -2.13158 0.0717505 0.465315 -0.882232 + -0.890328 1.78665 -2.11804 0.304835 0.362288 -0.880808 + -1.10063 1.64679 -2.2006 -0.163567 0.499036 -0.851004 + -1.09559 1.6929 -2.17231 -0.146371 0.547252 -0.82407 + -1.07481 1.74248 -2.14068 -0.193684 0.595922 -0.779335 + -1.04216 1.79953 -2.11292 -0.403665 0.681592 -0.610317 + -0.972288 1.8385 -2.09677 -0.170103 0.76314 -0.623443 + -1.13472 1.63559 -2.19829 -0.528753 0.406951 -0.744857 + -1.13202 1.7126 -2.15023 -0.518974 0.539562 -0.662977 + -1.11124 1.76217 -2.11859 -0.383798 0.765009 -0.517166 + -1.07684 1.78557 -2.08856 -0.500082 0.800928 -0.329291 + -1.12538 1.57558 -2.23162 -0.478761 0.307786 -0.822226 + -1.14556 1.56771 -2.21169 -0.924732 0.0127687 -0.380405 + -1.15054 1.62825 -2.18043 -0.94355 0.149282 -0.295684 + -1.14784 1.70525 -2.13236 -0.93001 0.311295 -0.19539 + -1.12989 1.75606 -2.09305 -0.802141 0.597122 -0.00389197 + -1.08355 1.46722 -2.27512 -0.436262 -0.104335 -0.89375 + -1.13023 1.54695 -2.23386 -0.734542 0.00769043 -0.67852 + -1.12601 1.49299 -2.22076 -0.922489 -0.292095 -0.252379 + -1.14477 1.55028 -2.18632 -0.983483 -0.176684 -0.0393022 + -1.14975 1.61081 -2.15505 -0.999238 -0.0371698 0.0119378 + -1.11068 1.47223 -2.24293 -0.844428 -0.314825 -0.433389 + -1.09001 1.43298 -2.24439 -0.757829 -0.511739 -0.404745 + -1.12245 1.47471 -2.19044 -0.928743 -0.347266 -0.129775 + -1.1412 1.532 -2.156 -0.978863 -0.204467 -0.00462601 + -1.0973 1.42511 -2.21268 -0.809678 -0.528579 -0.255001 + -1.1238 1.4619 -2.14593 -0.955007 -0.280978 -0.0949409 + -1.1384 1.52996 -2.09554 -0.984644 -0.174196 0.0114794 + -1.14607 1.58662 -2.06973 -0.992666 -0.0603977 0.104715 + -1.14887 1.58865 -2.13019 -0.996988 -0.0766038 0.0120895 + -1.09865 1.4123 -2.16816 -0.817352 -0.52306 -0.241544 + -1.1117 1.39962 -2.10918 -0.880765 -0.418878 -0.220893 + -1.12189 1.4465 -2.09138 -0.982189 -0.169339 -0.0814219 + -1.13649 1.51456 -2.04099 -0.990881 -0.0860551 0.103681 + -1.078 1.38547 -2.16349 -0.560756 -0.776008 -0.288729 + -1.10301 1.40494 -2.14053 -0.674597 -0.676213 -0.296066 + -1.09355 1.37119 -2.09712 -0.555811 -0.775705 -0.298924 + -1.12052 1.38342 -2.03799 -0.925874 -0.376859 0.0270859 + -1.13071 1.43029 -2.0202 -0.981496 -0.15405 0.113725 + -1.03997 1.37308 -2.15319 -0.00310849 -0.999983 0.0049718 + -1.072 1.36994 -2.13355 -0.182406 -0.949212 -0.256367 + -1.08236 1.37812 -2.13585 -0.63064 -0.703357 -0.327997 + -1.08487 1.3765 -2.12848 -0.639089 -0.69553 -0.328335 + -1.02978 1.37531 -2.15087 0.183394 -0.96671 0.178434 + -1.06181 1.37216 -2.13123 0.22663 -0.973001 0.0436826 + -1.07451 1.36833 -2.12618 -0.192974 -0.95056 -0.243304 + -1.01155 1.38294 -2.1313 0.197974 -0.957821 0.208292 + -1.03001 1.38062 -2.12265 0.242302 -0.967651 0.0702951 + -1.04271 1.37679 -2.1176 0.30303 -0.928481 -0.214701 + -1.04961 1.36119 -2.08699 0.152833 -0.914261 -0.375193 + -0.955048 1.39841 -2.11842 0.172716 -0.955008 0.241098 + -0.973508 1.39608 -2.10977 0.238834 -0.96828 0.0734327 + -0.976448 1.39491 -2.1025 0.292233 -0.931926 -0.214739 + -0.983343 1.37932 -2.07189 0.297877 -0.864302 -0.405279 + -0.940627 1.40425 -2.10236 0.0119251 -0.999809 0.0154635 + -0.943567 1.40308 -2.09509 0.0806325 -0.946819 -0.3115 + -0.949257 1.38472 -2.06144 0.0515516 -0.875933 -0.47967 + -0.995344 1.34393 -2.00981 0.267433 -0.876904 -0.399398 + -1.05697 1.33738 -2.04067 0.00316493 -0.938374 -0.345607 + -0.925917 1.4005 -2.11096 -0.465319 -0.868053 -0.173098 + -0.935873 1.40281 -2.09718 -0.372385 -0.871111 -0.320149 + -0.941563 1.38446 -2.06353 -0.386165 -0.779534 -0.493156 + -0.95376 1.34832 -1.99973 -0.369016 -0.776274 -0.511102 + -0.961258 1.34933 -1.99936 0.0632665 -0.877436 -0.475503 + -0.903042 1.38081 -2.11155 -0.642412 -0.674715 -0.363411 + -0.914566 1.36855 -2.07365 -0.624128 -0.648387 -0.435957 + -0.926763 1.33242 -2.00984 -0.490945 -0.811288 -0.317466 + -0.961228 1.33076 -1.96753 -0.169257 -0.984944 -0.035164 + -0.968726 1.33177 -1.96715 -0.0120355 -0.992256 -0.123627 + -0.885873 1.37584 -2.13714 -0.591827 -0.709596 -0.382381 + -0.855708 1.33141 -2.11817 -0.109685 -0.882587 -0.457176 + -0.867232 1.31915 -2.08026 -0.244785 -0.896655 -0.368904 + -0.820131 1.35095 -2.12545 0.509325 -0.684733 -0.521276 + -0.805212 1.33538 -2.08529 0.580008 -0.755738 -0.304057 + -0.869015 1.31044 -2.04502 -0.125359 -0.972412 -0.196723 + -0.864873 1.304 -1.99944 -0.0532372 -0.997076 0.0548167 + -0.922622 1.32598 -1.96426 -0.182374 -0.961751 0.20439 + -0.77699 1.42361 -2.13262 0.758175 -0.255066 -0.600093 + -0.762071 1.40805 -2.09246 0.839452 -0.341345 -0.422852 + -0.806994 1.32668 -2.05006 0.49444 -0.842977 -0.211944 + -0.782071 1.50568 -2.13663 0.721418 0.143125 -0.677548 + -0.759425 1.48967 -2.11219 0.853145 0.0876704 -0.514253 + -0.737945 1.48817 -2.06393 0.922728 0.0628149 -0.380298 + -0.734565 1.38336 -2.02192 0.84881 -0.469183 -0.243698 + -0.762784 1.59643 -2.05332 0.881025 0.21473 -0.421529 + -0.741304 1.59492 -2.00506 0.900503 0.170746 -0.399924 + -0.710439 1.46348 -1.99338 0.975812 -0.0635473 -0.209172 + -0.739676 1.37208 -1.97537 0.778311 -0.611871 0.140875 + -0.812106 1.3154 -2.0035 0.401367 -0.915608 0.0237888 + -0.772155 1.63086 -2.05582 0.914181 0.10517 -0.391424 + -0.739236 1.6697 -1.97481 0.893909 0.0177221 -0.447898 + -0.710255 1.56845 -1.95041 0.971957 0.0764396 -0.222389 + -0.710269 1.54832 -1.89964 0.951423 -0.12042 0.28336 + -0.710452 1.44335 -1.94262 0.931513 -0.282433 0.22916 + -0.776665 1.70487 -2.06958 0.810363 0.0258287 -0.585358 + -0.759473 1.69255 -2.0231 0.922959 -0.0681686 -0.378814 + -0.729217 1.71242 -1.96378 0.913225 -0.00884209 -0.407359 + -0.708187 1.64323 -1.92017 0.97974 0.0129378 -0.199856 + -0.758738 1.75839 -2.05214 0.823093 0.0326935 -0.566965 + -0.749453 1.73526 -2.01205 0.935118 -0.0904782 -0.342591 + -0.739652 1.76789 -1.98901 0.962083 0.022823 -0.271801 + -0.727109 1.75134 -1.95088 0.944277 0.104782 -0.312027 + -0.705916 1.68333 -1.91339 0.979498 -0.00719142 -0.201327 + -0.810585 1.76854 -2.09241 0.488766 0.221227 -0.8439 + -0.791228 1.81115 -2.06378 0.557852 0.537038 -0.632764 + -0.748937 1.79101 -2.02909 0.851041 0.319981 -0.416343 + -0.870971 1.82926 -2.08941 0.308356 0.544939 -0.779717 + -0.848521 1.85072 -2.05959 0.381558 0.567316 -0.729771 + -0.786292 1.81982 -2.03777 0.606728 0.612492 -0.50669 + -0.744001 1.79968 -2.00307 0.896375 0.304134 -0.322514 + -0.925669 1.84 -2.09959 0.0886677 0.660748 -0.745352 + -0.903219 1.86146 -2.06977 0.117257 0.633783 -0.764572 + -0.889381 1.90294 -2.04387 0.134329 0.422129 -0.896528 + -0.85084 1.88291 -2.04043 0.394515 0.426646 -0.813837 + -0.939863 1.861 -2.06729 -0.174519 0.730715 -0.659999 + -0.926026 1.90248 -2.04141 -0.198054 0.430141 -0.880769 + -0.924929 1.9648 -2.02233 -0.145931 0.346733 -0.926542 + -0.892353 1.96327 -2.02012 0.220558 0.385362 -0.896019 + -0.853812 1.94323 -2.01666 0.443739 0.460189 -0.768975 + -1.01063 1.83274 -2.08394 -0.39026 0.82766 -0.403332 + -0.978204 1.85524 -2.05445 -0.368115 0.76447 -0.529223 + -0.957905 1.89687 -2.03116 -0.438548 0.465725 -0.768619 + -1.04531 1.81879 -2.05957 -0.59268 0.777709 -0.209522 + -1.01618 1.84657 -2.03436 -0.595286 0.722832 -0.350924 + -0.995883 1.8882 -2.01106 -0.646086 0.509964 -0.5679 + -0.975807 1.94944 -1.98993 -0.766071 0.32879 -0.552297 + -0.956808 1.9592 -2.01208 -0.589911 0.296411 -0.751096 + -1.06679 1.80356 -2.03872 -0.714434 0.694392 0.0860424 + -1.03766 1.83134 -2.0135 -0.796864 0.603949 -0.0159384 + -1.01403 1.8742 -1.9934 -0.8602 0.465125 -0.209081 + -1.09549 1.77946 -2.06302 -0.643207 0.761377 0.0811836 + -1.06837 1.78834 -2.0124 -0.757219 0.570832 0.317442 + -1.0501 1.80483 -1.99789 -0.817893 0.509632 0.267071 + -1.02647 1.84769 -1.9778 -0.882684 0.309897 0.353317 + -1.09708 1.76425 -2.0367 -0.761274 0.548182 0.34635 + -1.06596 1.7651 -1.96907 -0.789962 0.506357 0.345777 + -1.12907 1.73891 -2.06777 -0.889246 0.352855 0.291091 + -1.12418 1.7134 -2.0251 -0.869672 0.365851 0.331397 + -1.09218 1.73874 -1.99404 -0.791561 0.482669 0.374782 + -1.14702 1.68809 -2.10709 -0.988099 0.110558 0.106949 + -1.14066 1.67979 -2.04604 -0.959844 0.190917 0.205548 + -1.11048 1.67767 -1.96451 -0.871971 0.241375 0.425916 + -1.08523 1.7041 -1.93404 -0.82439 0.345556 0.448299 + -1.05901 1.73045 -1.90908 -0.79467 0.37722 0.475611 + -1.14614 1.66593 -2.08223 -0.994723 0.0386123 0.0950579 + -1.14059 1.60047 -2.03354 -0.974829 -0.0492873 0.21744 + -1.12697 1.64406 -1.98544 -0.932018 0.0984178 0.348792 + -1.08672 1.64681 -1.9115 -0.826502 0.118699 0.550277 + -1.06147 1.67324 -1.88104 -0.765794 0.13863 0.627965 + -1.12764 1.56808 -1.99769 -0.964985 -0.0361345 0.259805 + -1.11401 1.61167 -1.94958 -0.894939 0.0504442 0.443328 + -1.05772 1.62163 -1.86933 -0.753993 0.0847421 0.651393 + -1.01885 1.64567 -1.83592 -0.630773 0.126082 0.765655 + -1.11346 1.54151 -1.94398 -0.897603 -0.0242042 0.44014 + -1.08501 1.58649 -1.90741 -0.801013 0.00445237 0.59863 + -1.03918 1.60236 -1.84948 -0.646277 -0.109597 0.755192 + -1.12231 1.48799 -1.98729 -0.958534 -0.0410942 0.281998 + -1.106 1.4838 -1.94016 -0.787083 -0.19816 0.584152 + -1.08758 1.52264 -1.91138 -0.696611 -0.1574 0.699971 + -1.05913 1.56764 -1.87481 -0.670339 -0.144468 0.727856 + -1.11441 1.4261 -1.97307 -0.832293 -0.237944 0.50067 + -1.06537 1.47382 -1.91368 -0.604304 -0.279018 0.746301 + -1.04694 1.51267 -1.8849 -0.486776 -0.296557 0.821646 + -1.03598 1.56173 -1.86204 -0.448857 -0.302856 0.840718 + -1.01603 1.59645 -1.83673 -0.364481 -0.398658 0.841561 + -1.10104 1.3795 -1.98664 -0.736316 -0.47224 0.48459 + -1.09989 1.41162 -1.9656 -0.648861 -0.346348 0.677512 + -1.05085 1.45934 -1.90621 -0.591681 -0.206393 0.779305 + -1.00846 1.50637 -1.86986 -0.363339 -0.247272 0.898244 + -1.08144 1.34347 -1.99944 -0.612244 -0.705318 0.357328 + -1.04294 1.35016 -1.9651 -0.455384 -0.62214 0.636841 + -1.04907 1.39376 -1.9313 -0.532662 -0.50549 0.678786 + -1.04792 1.42587 -1.91027 -0.575188 -0.282947 0.767528 + -1.00553 1.4729 -1.87392 -0.386326 -0.206374 0.898978 + -1.10092 1.34738 -2.0508 -0.597087 -0.781405 -0.181368 + -1.05999 1.32342 -2.00723 -0.314764 -0.949148 -0.00648119 + -1.02149 1.3301 -1.97289 -0.187316 -0.880038 0.436401 + -1.00874 1.35683 -1.93603 -0.363404 -0.642582 0.674556 + -1.01487 1.40043 -1.90222 -0.40065 -0.450113 0.798046 + -0.976767 1.38693 -1.89556 -0.212181 -0.516547 0.829553 + -0.955031 1.42883 -1.87211 -0.134559 -0.352529 0.926076 + -0.993137 1.44233 -1.87877 -0.309951 -0.286288 0.906625 + -0.992956 1.34349 -1.94269 -0.126707 -0.816649 0.563054 + -0.960983 1.37358 -1.90222 -0.183924 -0.580943 0.792892 + -0.897501 1.43092 -1.87013 0.0120944 -0.367199 0.930064 + -0.921796 1.52442 -1.84221 -0.128176 -0.282323 0.950718 + -0.998746 1.33032 -1.97424 0.0103125 -0.961874 0.273297 + -0.970212 1.3437 -1.94403 -0.122453 -0.856635 0.501181 + -0.948804 1.35617 -1.91136 -0.25078 -0.702371 0.666172 + -0.893374 1.36083 -1.90056 -0.0224523 -0.58474 0.81091 + -0.905553 1.37825 -1.89143 -0.0392813 -0.425965 0.903886 + -0.998363 1.32996 -1.97637 0.113476 -0.989752 -0.0866871 + -0.969109 1.33213 -1.96502 -0.0793471 -0.941174 0.328475 + -0.962097 1.33641 -1.9534 -0.13941 -0.895945 0.421719 + -0.940689 1.34888 -1.92073 -0.143787 -0.858118 0.492908 + -0.954216 1.33504 -1.9559 -0.0982329 -0.912804 0.396409 + -0.909096 1.33982 -1.92908 -0.13624 -0.850832 0.507467 + -0.848994 1.34274 -1.91206 0.121809 -0.651268 0.749007 + -0.805417 1.37274 -1.90596 0.342821 -0.493843 0.79912 + -0.864716 1.32173 -1.94058 -0.0353278 -0.903518 0.427092 + -0.811948 1.33311 -1.94464 0.377319 -0.826003 0.418747 + -0.768371 1.36311 -1.93854 0.560555 -0.661809 0.497782 + -0.797364 1.42541 -1.88466 0.265085 -0.440463 0.857743 + -0.739147 1.43438 -1.90578 0.614423 -0.424512 0.665036 + -0.800958 1.50662 -1.84181 0.164989 -0.388572 0.906527 + -0.864266 1.5265 -1.84023 -0.0492242 -0.327377 0.943611 + -0.742741 1.5156 -1.86294 0.614545 -0.321978 0.720184 + -0.743671 1.58188 -1.83554 0.641008 -0.270021 0.718468 + -0.787413 1.572 -1.81563 0.205742 -0.347698 0.914755 + -0.85072 1.59187 -1.81405 -0.0574968 -0.37744 0.924247 + -0.711199 1.61461 -1.87225 0.935213 -0.109471 0.336739 + -0.708928 1.65471 -1.86548 0.942386 -0.0692211 0.327286 + -0.741793 1.62937 -1.82166 0.655061 -0.159911 0.73846 + -0.785535 1.61948 -1.80175 0.232587 -0.247171 0.940643 + -0.703809 1.72224 -1.90049 0.992577 0.103451 -0.0639395 + -0.711709 1.70214 -1.8583 0.904742 0.0544195 0.422468 + -0.744575 1.67681 -1.81449 0.660655 -0.0312616 0.750038 + -0.780673 1.66025 -1.79405 0.296559 -0.121798 0.947216 + -0.842039 1.62036 -1.79979 -0.0169634 -0.318493 0.947774 + -0.724012 1.78422 -1.92417 0.948119 0.167234 -0.270374 + -0.713326 1.77037 -1.89423 0.98975 0.140091 -0.0277306 + -0.721226 1.75027 -1.85204 0.903527 0.0572023 0.424697 + -0.751963 1.73191 -1.81056 0.672115 -0.0263851 0.739977 + -0.788062 1.71535 -1.79012 0.199623 -0.0654664 0.977683 + -0.736555 1.80077 -1.96229 0.967159 0.133638 -0.216206 + -0.736368 1.83852 -1.93163 0.961441 0.140857 -0.236199 + -0.726314 1.83497 -1.90204 0.945646 0.155665 -0.285521 + -0.715627 1.82111 -1.87211 0.999403 0.0345378 -0.000400484 + -0.725543 1.80598 -1.84147 0.912115 -0.0939597 0.399021 + -0.743814 1.83743 -1.97241 0.723326 0.456486 -0.518093 + -0.736551 1.89566 -1.90307 0.794033 0.364331 -0.486594 + -0.726497 1.89212 -1.87348 0.944126 0.154961 -0.290884 + -0.717133 1.8795 -1.84616 0.999894 0.0117124 -0.00861892 + -0.727049 1.86436 -1.81551 0.857643 -0.161196 0.488327 + -0.761862 1.84348 -1.975 0.351154 0.757904 -0.549792 + -0.749461 1.89927 -1.91012 0.410827 0.60628 -0.680915 + -0.748343 1.96032 -1.86717 0.346225 0.506933 -0.789397 + -0.735433 1.95672 -1.86013 0.72398 0.339969 -0.600228 + -0.725891 1.95057 -1.84504 0.913436 0.168941 -0.370261 + -0.778005 1.84923 -1.98921 0.738713 0.659058 0.141227 + -0.791416 1.85339 -1.94798 -0.189425 0.894161 -0.405703 + -0.792228 1.90588 -1.91082 -0.309004 0.590827 -0.745279 + -0.76751 1.90531 -1.91271 0.131846 0.653479 -0.745374 + -0.76429 1.96284 -1.86876 0.0632462 0.563842 -0.823457 + -0.784655 1.86838 -2.00259 0.829928 0.510829 -0.224218 + -0.828373 1.92925 -1.96297 0.899974 0.332641 0.281773 + -0.807559 1.85914 -1.96219 0.577452 0.640379 0.506423 + -0.818141 1.85194 -1.92974 -0.297812 0.919837 -0.255359 + -0.788611 1.85201 -2.0186 0.615083 0.429164 -0.661431 + -0.849856 1.95961 -2.00064 0.66663 0.488395 -0.563093 + -0.835023 1.94841 -1.97634 0.888805 0.447232 -0.100042 + -0.892646 2.02482 -1.99562 0.302756 0.388906 -0.87011 + -0.87111 2.01902 -1.98352 0.705783 0.361712 -0.609126 + -0.856278 2.00783 -1.95922 0.922003 0.285453 -0.261586 + -0.851627 1.99948 -1.94063 0.980289 0.17805 0.0856201 + -0.832983 1.92248 -1.94618 0.828313 0.154885 0.538431 + -0.925222 2.02636 -1.99782 -0.162053 0.389442 -0.906683 + -0.921799 2.08898 -1.96949 -0.153016 0.451938 -0.878828 + -0.895326 2.08771 -1.96769 0.308953 0.432891 -0.846849 + -0.873791 2.08192 -1.9556 0.725954 0.333154 -0.601663 + -0.948669 2.02264 -1.98866 -0.597721 0.346066 -0.723165 + -0.945246 2.08526 -1.96032 -0.608751 0.38613 -0.693056 + -0.939173 2.14027 -1.93175 -0.59624 0.47166 -0.649642 + -0.921589 2.14313 -1.93873 -0.160704 0.54685 -0.821663 + -0.895116 2.14186 -1.93694 0.317027 0.525182 -0.789733 + -0.967668 2.01288 -1.9665 -0.843969 0.273105 -0.46166 + -0.960694 2.07717 -1.94198 -0.843239 0.292986 -0.450674 + -0.954621 2.13217 -1.91341 -0.835798 0.359526 -0.414949 + -0.976243 2.00544 -1.95092 -0.963318 0.211039 -0.165772 + -0.969269 2.06972 -1.92641 -0.970206 0.185074 -0.156359 + -0.961027 2.12683 -1.90189 -0.961423 0.236467 -0.140529 + -0.944656 2.18136 -1.88442 -0.823786 0.424218 -0.376054 + -0.993954 1.93544 -1.97227 -0.923256 0.334014 -0.189825 + -0.975963 1.99982 -1.93825 -0.953652 0.074504 0.291542 + -0.969034 2.06551 -1.91693 -0.965248 0.022212 0.26039 + -0.960792 2.12263 -1.8924 -0.961549 0.0362511 0.272229 + -0.951062 2.17602 -1.8729 -0.952511 0.289073 -0.0957111 + -0.993675 1.92983 -1.9596 -0.914322 0.188608 0.35839 + -0.981995 1.92345 -1.94256 -0.76866 0.0297373 0.638966 + -0.967909 1.99389 -1.92317 -0.833792 -0.0381279 0.55076 + -0.96098 2.05958 -1.90185 -0.842948 -0.0899276 0.530426 + -0.954734 2.11813 -1.88125 -0.844093 -0.0971345 0.527325 + -1.01479 1.84131 -1.96075 -0.733716 0.382931 0.56127 + -0.972792 1.85284 -1.93957 -0.47498 0.395604 0.786061 + -0.964709 1.91481 -1.92212 -0.601728 -0.124145 0.788994 + -0.950622 1.98525 -1.90273 -0.611008 -0.132087 0.780527 + -0.946914 2.05248 -1.88496 -0.630339 -0.180557 0.755031 + -1.01408 1.83106 -1.94101 -0.402072 0.911785 -0.0835868 + -0.972088 1.84258 -1.91983 -0.0493733 0.97005 -0.237836 + -0.937711 1.85232 -1.92473 -0.310743 0.412287 0.856422 + -0.929628 1.91428 -1.90729 -0.228028 -0.178993 0.95706 + -0.929162 1.98119 -1.89321 -0.226462 -0.213016 0.950441 + -1.02479 1.83536 -1.92346 -0.7718 0.626895 -0.106433 + -0.980764 1.88526 -1.86563 -0.438602 0.762872 -0.475032 + -0.960507 1.89046 -1.87556 -0.113201 0.727348 -0.676868 + -0.925232 1.8928 -1.86607 0.252741 0.618774 -0.743802 + -0.936812 1.84492 -1.91034 0.058177 0.982972 -0.174304 + -1.04769 1.78159 -1.95457 -0.846836 0.445254 0.29089 + -1.03028 1.81533 -1.93018 -0.908675 0.135185 0.395011 + -0.998351 1.88183 -1.83149 -0.95513 0.235038 0.180233 + -0.991474 1.88956 -1.84808 -0.703425 0.640085 -0.309006 + -1.03082 1.77568 -1.89927 -0.852478 0.290877 0.434363 + -1.01341 1.80942 -1.87489 -0.906329 0.0132432 0.422365 + -1.00384 1.8618 -1.83821 -0.92452 0.0180254 0.380707 + -1.03131 1.70976 -1.86119 -0.699678 0.256514 0.666822 + -1.00313 1.75498 -1.85138 -0.737897 0.156586 0.656497 + -0.987221 1.80629 -1.83345 -0.786645 -0.128956 0.603788 + -0.977649 1.85867 -1.79678 -0.790764 -0.239965 0.563125 + -0.988692 1.68218 -1.81608 -0.534021 0.0845056 0.841237 + -0.959144 1.73527 -1.80948 -0.546456 0.0397479 0.836544 + -0.94324 1.78657 -1.79155 -0.577563 -0.223854 0.785055 + -0.94535 1.84504 -1.7678 -0.595817 -0.341886 0.726716 + -0.943913 1.66603 -1.7953 -0.239564 -0.0683772 0.96847 + -0.914365 1.71912 -1.78871 -0.168197 -0.112645 0.979296 + -0.906958 1.77198 -1.77752 -0.190975 -0.25599 0.947627 + -0.960783 1.62859 -1.80535 -0.227515 -0.27877 0.933019 + -0.887647 1.66415 -1.79206 -0.0331019 -0.0842228 0.995897 + -0.870092 1.70105 -1.79431 0.0448651 -0.0469819 0.997888 + -0.862685 1.75391 -1.78312 0.400713 -0.187489 0.896815 + -1.00031 1.62638 -1.81606 -0.378879 0.0463277 0.924286 + -0.976505 1.59867 -1.82601 -0.180738 -0.434372 0.882414 + -0.904516 1.62672 -1.80212 -0.0723308 -0.33345 0.939989 + -0.837177 1.66114 -1.7921 0.00625998 -0.0740852 0.997232 + -0.997493 1.55542 -1.847 -0.275753 -0.329017 0.903166 + -0.913198 1.59822 -1.81636 -0.118441 -0.379362 0.917636 + -0.934186 1.55499 -1.83735 -0.232062 -0.309494 0.92215 + -0.819622 1.69804 -1.79435 -0.0387735 -0.0124649 0.99917 + -0.847077 1.76163 -1.79512 0.402029 0.219578 0.888908 + -0.890218 1.83336 -1.76077 0.479761 -0.214307 0.850824 + -0.909069 1.83044 -1.75378 -0.0338413 -0.37442 0.926642 + -0.783995 1.77461 -1.7851 0.238725 -0.120581 0.963572 + -0.815555 1.75729 -1.78932 -0.208152 -0.0193717 0.977905 + -0.833175 1.76433 -1.79935 -0.247763 0.510755 0.823251 + -0.855159 1.79369 -1.81726 0.695281 0.54204 0.471992 + -0.87461 1.84108 -1.77277 0.786497 -0.0558778 0.615061 + -0.75628 1.78762 -1.79999 0.66541 -0.112653 0.737929 + -0.783561 1.84073 -1.77594 0.200331 -0.173153 0.964306 + -0.800585 1.84202 -1.77801 -0.327447 -0.106802 0.938814 + -0.818206 1.84905 -1.78803 -0.57954 -0.0510728 0.813342 + -0.755847 1.85374 -1.79084 0.611386 -0.19037 0.768092 + -0.753817 1.91743 -1.77039 0.584204 -0.278586 0.762296 + -0.773635 1.91234 -1.76087 0.180416 -0.265426 0.9471 + -0.790659 1.91362 -1.76293 -0.309668 -0.191506 0.93136 + -0.725019 1.92805 -1.79507 0.842438 -0.206819 0.497519 + -0.723834 1.99148 -1.76811 0.833647 -0.213473 0.509374 + -0.745486 1.98371 -1.75005 0.581502 -0.294912 0.75821 + -0.765304 1.97862 -1.74053 0.162009 -0.305813 0.938207 + -0.775719 1.9795 -1.74215 -0.316414 -0.230686 0.920145 + -0.716527 1.93795 -1.81772 0.999876 -0.0118021 0.0103936 + -0.715341 2.00138 -1.79076 0.999976 0.00545464 -0.00425521 + -0.716837 2.05794 -1.76226 0.99738 0.0615047 0.0380841 + -0.722807 2.05105 -1.74667 0.837025 -0.159141 0.523511 + -0.744459 2.04328 -1.72861 0.580613 -0.259033 0.771875 + -0.722661 2.01034 -1.81018 0.910634 0.185386 -0.369294 + -0.724157 2.0669 -1.78166 0.905955 0.242654 -0.346937 + -0.728679 2.11732 -1.75165 0.898159 0.300915 -0.320562 + -0.723833 2.11158 -1.73951 0.990132 0.132257 0.046338 + -0.729803 2.1047 -1.72392 0.82113 -0.108661 0.560301 + -0.732204 2.0165 -1.82526 0.708452 0.339918 -0.618508 + -0.730445 2.07118 -1.79156 0.711197 0.378445 -0.592434 + -0.734966 2.1216 -1.76153 0.694493 0.435892 -0.572431 + -0.734305 2.14794 -1.73562 0.82005 0.543113 -0.180403 + -0.72946 2.1422 -1.72349 0.909871 0.37377 0.180084 + -0.740157 2.01864 -1.82947 0.348781 0.478228 -0.806008 + -0.738398 2.07332 -1.79576 0.336615 0.500332 -0.797721 + -0.739627 2.12288 -1.76388 0.331996 0.53867 -0.774347 + -0.73814 2.15072 -1.74126 0.641562 0.656093 -0.397416 + -0.756103 2.02117 -1.83105 0.063508 0.533867 -0.84318 + -0.749025 2.07478 -1.79672 0.0591768 0.53596 -0.842167 + -0.750255 2.12433 -1.76486 0.0568512 0.563051 -0.824464 + -0.742801 2.152 -1.74362 0.307206 0.74766 -0.588752 + -0.773934 2.02176 -1.82983 -0.232359 0.554955 -0.798771 + -0.766856 2.07537 -1.79551 -0.234625 0.542753 -0.806455 + -0.761515 2.12477 -1.7641 -0.227951 0.558949 -0.797254 + -0.749178 2.1527 -1.74422 0.0699498 0.767372 -0.637375 + -0.745359 2.15596 -1.73553 0.212772 0.96367 -0.161454 + -0.789008 1.96341 -1.86688 -0.258714 0.57469 -0.776401 + -0.807276 1.96045 -1.8583 -0.58624 0.522215 -0.619366 + -0.792203 2.0188 -1.82125 -0.58549 0.521059 -0.621047 + -0.779339 2.07346 -1.78972 -0.581931 0.493149 -0.646653 + -0.818952 1.90443 -1.89258 -0.611658 0.497217 -0.615345 + -0.824707 1.95308 -1.84008 -0.839777 0.421408 -0.342331 + -0.804526 2.01368 -1.80835 -0.832331 0.429817 -0.349976 + -0.791662 2.06835 -1.77682 -0.846286 0.38395 -0.3693 + -0.849933 1.84528 -1.90432 -0.442666 0.896629 0.0102066 + -0.836383 1.89708 -1.87436 -0.836863 0.412073 -0.360355 + -0.831377 1.94503 -1.82226 -0.959859 0.28037 -0.00798095 + -0.811196 2.00563 -1.79054 -0.95888 0.283788 0.00376616 + -0.796166 2.06289 -1.76471 -0.971396 0.235862 -0.0275504 + -0.828463 1.85617 -1.9411 0.457776 0.63637 0.620866 + -0.860255 1.8495 -1.91568 0.25669 0.654807 0.710871 + -0.891764 1.84878 -1.90985 -0.0265467 0.540643 0.840833 + -0.890865 1.84138 -1.89545 0.264813 0.962688 -0.0557235 + -0.868025 1.83181 -1.87504 0.480848 0.868278 0.12198 + -0.859635 1.83394 -1.87879 -0.572641 0.751897 0.326701 + -0.853887 1.91951 -1.92509 0.681865 0.0276575 0.730955 + -0.868325 1.91479 -1.91271 0.436889 -0.0447324 0.898403 + -0.899833 1.91406 -1.90688 0.0856429 -0.115061 0.98966 + -0.856237 1.99271 -1.92384 0.898733 0.0264964 0.437696 + -0.864832 1.98759 -1.91067 0.763181 -0.0754142 0.641769 + -0.879269 1.98287 -1.89829 0.472665 -0.168787 0.864927 + -0.899367 1.98098 -1.89281 0.133559 -0.226189 0.964884 + -0.857158 2.06436 -1.91706 0.995708 0.0793665 0.0476076 + -0.860908 2.05907 -1.90378 0.918178 -0.0545638 0.392392 + -0.869502 2.05395 -1.89061 0.772328 -0.142413 0.619055 + -0.880929 2.05021 -1.88067 0.495327 -0.225271 0.83899 + -0.901027 2.04832 -1.87518 0.132524 -0.270489 0.953558 + -0.861808 2.0727 -1.93566 0.931351 0.210518 -0.2971 + -0.867014 2.12826 -1.90784 0.927464 0.263012 -0.265772 + -0.863574 2.12212 -1.8939 0.991933 0.113423 0.0566146 + -0.867324 2.11682 -1.88062 0.916317 -0.0513061 0.397153 + -0.87367 2.11305 -1.87094 0.77529 -0.154392 0.612444 + -0.878996 2.13748 -1.92777 0.715735 0.41222 -0.563736 + -0.883524 2.18432 -1.89326 0.719656 0.474219 -0.50716 + -0.875746 2.17829 -1.88002 0.917037 0.323776 -0.232834 + -0.872306 2.17216 -1.86609 0.983122 0.156257 0.0951539 + -0.874821 2.1688 -1.85752 0.909935 -0.0128292 0.414553 + -0.899644 2.1887 -1.90242 0.303733 0.602417 -0.738133 + -0.899835 2.21595 -1.87905 0.29912 0.768633 -0.565447 + -0.889857 2.21324 -1.87334 0.648607 0.66545 -0.369439 + -0.882079 2.20722 -1.8601 0.845047 0.525506 -0.0986827 + -0.879976 2.2035 -1.85141 0.900993 0.392586 0.184629 + -0.916994 2.18952 -1.9036 -0.145667 0.624458 -0.767355 + -0.917186 2.21677 -1.88024 -0.148733 0.79045 -0.594195 + -0.913686 2.22178 -1.86936 -0.0757237 0.959204 -0.272385 + -0.904212 2.22133 -1.86872 0.199324 0.946208 -0.254874 + -0.894234 2.21862 -1.86301 0.491371 0.869143 -0.0560893 + -0.934578 2.18666 -1.89663 -0.60088 0.537352 -0.591773 + -0.92809 2.21496 -1.87591 -0.531203 0.721473 -0.444186 + -0.92459 2.21998 -1.86504 -0.401493 0.908865 -0.11299 + -0.91427 2.22287 -1.85953 -0.0943551 0.987527 0.126045 + -0.904796 2.22242 -1.85888 0.167034 0.975496 0.143206 + -0.938168 2.20966 -1.86371 -0.751742 0.617742 -0.23082 + -0.930047 2.21705 -1.85831 -0.508322 0.860752 0.0267324 + -0.919726 2.21994 -1.85279 -0.199258 0.93073 0.306655 + -0.900609 2.2191 -1.8516 0.24828 0.911126 0.328947 + -0.890047 2.21531 -1.85573 0.581041 0.804545 0.122876 + -0.942085 2.20654 -1.85644 -0.861492 0.507481 0.0171726 + -0.933964 2.21393 -1.85105 -0.563602 0.794978 0.224414 + -0.919546 2.21771 -1.84761 -0.154374 0.905053 0.396292 + -0.900429 2.21687 -1.84642 0.225836 0.89461 0.385579 + -0.887945 2.21159 -1.84705 0.606595 0.726205 0.323526 + -0.950847 2.17345 -1.86696 -0.952334 0.078585 0.294762 + -0.941871 2.20398 -1.85051 -0.864557 0.320035 0.387451 + -0.933822 2.2126 -1.84796 -0.559385 0.693128 0.454601 + -0.919404 2.21638 -1.84453 -0.161879 0.912198 0.376417 + -0.944789 2.16896 -1.85581 -0.837255 -0.0691901 0.542417 + -0.938143 2.20116 -1.84379 -0.771091 0.19883 0.604885 + -0.930094 2.20979 -1.84125 -0.532186 0.60023 0.597078 + -0.940668 2.11102 -1.86436 -0.628058 -0.206575 0.750247 + -0.935579 2.16434 -1.84469 -0.631606 -0.184478 0.753021 + -0.928933 2.19654 -1.83267 -0.57054 0.0866882 0.816682 + -0.925103 2.20724 -1.83516 -0.44788 0.487353 0.749593 + -0.920719 2.2149 -1.84083 -0.294218 0.865521 0.405351 + -0.924527 2.10799 -1.85717 -0.233295 -0.298719 0.925387 + -0.919437 2.16131 -1.8375 -0.219988 -0.290115 0.931364 + -0.918901 2.19468 -1.82816 -0.221872 0.0014846 0.975074 + -0.915071 2.20537 -1.83064 -0.141283 0.377201 0.915292 + -0.915728 2.21235 -1.83474 -0.144588 0.722509 0.676073 + -0.925454 2.04843 -1.87543 -0.224325 -0.259764 0.939256 + -0.9001 2.10789 -1.85691 0.138099 -0.312533 0.939815 + -0.903484 2.16126 -1.83738 0.131391 -0.302029 0.944201 + -0.902948 2.19464 -1.82803 0.135924 -0.00864692 0.990682 + -0.906382 2.20538 -1.83059 0.089429 0.38116 0.920173 + -0.885096 2.10931 -1.861 0.492325 -0.257347 0.831498 + -0.888481 2.16268 -1.84146 0.494971 -0.237133 0.835926 + -0.893706 2.19554 -1.83051 0.451474 0.0490219 0.890937 + -0.89714 2.20628 -1.83307 0.352343 0.484708 0.80057 + -0.881167 2.16503 -1.84784 0.768296 -0.127721 0.627223 + -0.886392 2.19788 -1.83688 0.715913 0.154928 0.680784 + -0.893239 2.20754 -1.8365 0.49748 0.577045 0.647713 + -0.903138 2.21362 -1.83813 0.220427 0.843785 0.489325 + -0.907039 2.21236 -1.8347 0.096214 0.748224 0.656433 + -0.882491 2.20014 -1.84284 0.835106 0.247086 0.491473 + -0.889338 2.20981 -1.84245 0.563963 0.650341 0.508924 + -0.901823 2.2151 -1.84183 0.202977 0.883083 0.423042 + -0.898077 1.8886 -1.8564 0.518111 0.556197 -0.649774 + -0.875236 1.87903 -1.83599 0.846299 0.387714 -0.365316 + -0.92575 1.94566 -1.82462 0.171458 0.593205 -0.786581 + -0.898595 1.94146 -1.81495 0.542702 0.516385 -0.662435 + -0.883017 1.93465 -1.80089 0.847656 0.360433 -0.389317 + -0.868018 1.8683 -1.81446 0.971283 0.213673 -0.104658 + -0.947222 1.9451 -1.82456 -0.227698 0.618468 -0.752098 + -0.926855 2.00147 -1.78457 0.173959 0.564206 -0.8071 + -0.904837 1.99813 -1.77673 0.537006 0.499941 -0.679473 + -0.889259 1.99131 -1.76266 0.854599 0.344783 -0.38831 + -0.875799 1.92392 -1.77936 0.98336 0.176696 -0.0422115 + -0.967479 1.93991 -1.81463 -0.59938 0.549396 -0.582158 + -0.964441 1.99668 -1.77653 -0.612914 0.458499 -0.643518 + -0.948327 2.00093 -1.78451 -0.264128 0.550108 -0.792223 + -0.929849 2.05409 -1.74962 0.168641 0.545752 -0.820801 + -0.907831 2.05075 -1.74177 0.544322 0.479941 -0.688019 + -0.979742 1.93388 -1.803 -0.82864 0.422735 -0.366948 + -0.976704 1.99065 -1.76489 -0.840179 0.333522 -0.427624 + -0.971109 2.04514 -1.73312 -0.833151 0.349815 -0.428356 + -0.961994 2.04944 -1.74159 -0.611665 0.45846 -0.644733 + -0.94588 2.05369 -1.74957 -0.258507 0.539275 -0.801471 + -0.986619 1.92615 -1.78642 -0.990239 0.0496371 0.130245 + -0.982223 1.9849 -1.75249 -0.996053 0.0474061 0.0750426 + -0.976628 2.03938 -1.72072 -0.991546 0.0751098 0.105804 + -0.967821 2.09275 -1.6951 -0.984165 0.139841 0.108922 + -0.964161 2.09645 -1.70299 -0.825811 0.386307 -0.410856 + -0.974871 1.91696 -1.76556 -0.80809 -0.248648 0.534008 + -0.970475 1.97571 -1.73163 -0.803979 -0.234041 0.546665 + -0.967581 2.03238 -1.70531 -0.80249 -0.182964 0.567921 + -0.942573 1.90333 -1.73659 -0.575579 -0.362017 0.733247 + -0.943649 1.96439 -1.70755 -0.581096 -0.3389 0.739915 + -0.940755 2.02107 -1.68121 -0.577969 -0.280643 0.766284 + -0.94082 2.07818 -1.66356 -0.583374 -0.22183 0.781324 + -0.958773 2.08575 -1.67969 -0.792195 -0.133038 0.59559 + -0.919433 1.89794 -1.72668 -0.0542489 -0.408274 0.911246 + -0.92051 1.959 -1.69764 -0.0193238 -0.407389 0.91305 + -0.923508 2.01709 -1.67346 -0.0343958 -0.340261 0.939702 + -0.900583 1.90086 -1.73367 0.534187 -0.289061 0.79441 + -0.906322 1.96132 -1.70327 0.542863 -0.31848 0.777091 + -0.90932 2.01941 -1.6791 0.551249 -0.263009 0.791802 + -0.914512 2.0758 -1.65953 0.549208 -0.200559 0.811262 + -0.923574 2.07421 -1.65581 -0.0139618 -0.270927 0.962499 + -0.887602 1.90638 -1.74452 0.78684 -0.161921 0.595537 + -0.893341 1.96685 -1.71412 0.78975 -0.200115 0.57987 + -0.899932 2.02347 -1.68723 0.788215 -0.162624 0.593524 + -0.877244 1.91512 -1.76182 0.952226 0.00601591 0.305335 + -0.885018 1.97388 -1.72792 0.953755 -0.0384077 0.298121 + -0.891609 2.03049 -1.70102 0.951921 -0.0154722 0.305951 + -0.899657 2.08452 -1.67669 0.944719 0.0220269 0.327141 + -0.905124 2.07985 -1.66766 0.786176 -0.108657 0.608376 + -0.864252 1.84981 -1.79008 0.966876 0.0489869 0.250502 + -0.883573 1.98269 -1.74545 0.987444 0.152307 -0.0419132 + -0.890487 2.03708 -1.71403 0.987584 0.1536 -0.0329262 + -0.858926 1.81218 -1.84164 0.664845 0.675499 0.318875 + -0.841258 1.79639 -1.82149 -0.61065 0.425129 0.66811 + -0.850536 1.81431 -1.84539 -0.607895 0.5645 0.558393 + -0.834888 1.8565 -1.80171 -0.826924 -0.00906901 0.562241 + -0.844166 1.87442 -1.82561 -0.962704 0.0740148 0.260237 + -0.846085 1.88573 -1.84883 -0.973236 0.229664 -0.00818601 + -0.804706 1.91816 -1.76949 -0.561861 -0.120121 0.818464 + -0.821388 1.92561 -1.78316 -0.789027 -0.0112169 0.614255 + -0.829458 1.93372 -1.79905 -0.936361 0.121828 0.32922 + -0.789766 1.98404 -1.74871 -0.561475 -0.147216 0.814293 + -0.801708 1.9894 -1.75827 -0.777055 -0.03013 0.628711 + -0.809777 1.99751 -1.77415 -0.934908 0.128643 0.330754 + -0.794748 2.05477 -1.74833 -0.945186 0.0750444 0.317791 + -0.777267 2.04384 -1.72806 -0.571272 -0.174297 0.80204 + -0.789209 2.04921 -1.73761 -0.787247 -0.069725 0.612683 + -0.779755 2.10356 -1.71724 -0.783138 -0.0685071 0.618063 + -0.785294 2.10913 -1.72796 -0.948193 0.0738797 0.308985 + -0.78617 2.11424 -1.73815 -0.973798 0.226272 -0.0227727 + -0.768143 2.0409 -1.72353 -0.332436 -0.23951 0.912207 + -0.763122 2.09719 -1.70674 -0.340436 -0.212928 0.915841 + -0.772245 2.10013 -1.71128 -0.573704 -0.159394 0.803404 + -0.766734 2.1336 -1.70203 -0.508138 0.111972 0.853966 + -0.774245 2.13703 -1.70799 -0.708054 0.190319 0.680028 + -0.757729 2.04002 -1.72191 0.178542 -0.291066 0.939895 + -0.757071 2.09656 -1.70567 0.150243 -0.246523 0.95742 + -0.75523 2.13133 -1.69808 0.152532 0.0355986 0.987657 + -0.761281 2.13195 -1.69915 -0.310536 0.0692003 0.948039 + -0.743801 2.09981 -1.71239 0.579289 -0.207903 0.788163 + -0.74713 2.13302 -1.70226 0.527554 0.0640502 0.847103 + -0.755835 2.14043 -1.70129 0.0990452 0.516459 0.850565 + -0.759235 2.14083 -1.70197 -0.171923 0.532972 0.828482 + -0.764689 2.14247 -1.70485 -0.328024 0.515329 0.79173 + -0.733132 2.13791 -1.7138 0.77269 0.169625 0.6117 + -0.739654 2.14489 -1.71206 0.539825 0.511604 0.668469 + -0.747735 2.14211 -1.70547 0.367001 0.499715 0.784598 + -0.754787 2.14898 -1.7107 0.0287611 0.813766 0.58048 + -0.735982 2.14919 -1.72174 0.660969 0.69888 0.273288 + -0.741885 2.15134 -1.71689 0.366379 0.80411 0.468159 + -0.749965 2.14857 -1.71031 0.121882 0.75127 0.648644 + -0.738873 2.15246 -1.72863 0.591972 0.802438 0.0752545 + -0.744775 2.15462 -1.72378 0.250857 0.930569 0.26667 + -0.747427 2.15531 -1.72503 0.102425 0.964875 0.241921 + -0.752249 2.15573 -1.72543 0.0567275 0.966348 0.250906 + -0.742707 2.15526 -1.73428 0.426068 0.902384 -0.0645667 + -0.751736 2.15664 -1.73613 0.064452 0.980341 -0.186489 + -0.758081 2.15687 -1.73569 -0.0867116 0.979051 -0.184228 + -0.758594 2.15595 -1.72499 0.0179766 0.970601 0.240022 + -0.760438 2.15313 -1.74346 -0.200144 0.761241 -0.616809 + -0.768046 2.15199 -1.74006 -0.515642 0.704922 -0.487029 + -0.765689 2.15572 -1.73229 -0.331076 0.93559 -0.122717 + -0.762939 2.15581 -1.72408 -0.0825165 0.974132 0.210374 + -0.758188 2.14939 -1.71139 0.0361829 0.838524 0.543662 + -0.773998 2.12286 -1.75831 -0.590362 0.494304 -0.638073 + -0.781665 2.11969 -1.75026 -0.844155 0.382533 -0.375594 + -0.775713 2.14882 -1.73203 -0.773952 0.592416 -0.2237 + -0.769972 2.15396 -1.7278 -0.517527 0.85566 0.00334636 + -0.778422 2.14553 -1.72462 -0.884606 0.458474 0.0852825 + -0.772681 2.15067 -1.72039 -0.6473 0.715473 0.262872 + -0.767222 2.15404 -1.71959 -0.264127 0.903473 0.337598 + -0.766757 2.15118 -1.71388 -0.249765 0.81174 0.527917 + -0.762532 2.14923 -1.71048 -0.0513883 0.783867 0.618798 + -0.777547 2.14042 -1.71443 -0.85531 0.30921 0.415733 + -0.772216 2.14781 -1.71469 -0.625173 0.616445 0.478701 + -0.768914 2.14442 -1.70824 -0.461629 0.545008 0.699903 + -0.896173 2.04571 -1.73124 0.852378 0.33821 -0.39883 + -0.902247 2.09678 -1.70099 0.853588 0.353568 -0.382593 + -0.898535 2.0911 -1.6897 0.982411 0.18483 -0.0265714 + -0.913905 2.10183 -1.71152 0.534685 0.493855 -0.685725 + -0.915885 2.1311 -1.69088 0.512512 0.679784 -0.524619 + -0.908567 2.12793 -1.68416 0.789026 0.558116 -0.256796 + -0.904856 2.12225 -1.67287 0.914534 0.39122 0.102834 + -0.928436 2.10401 -1.71672 0.17659 0.556279 -0.812016 + -0.930417 2.13328 -1.69608 0.143695 0.746448 -0.649743 + -0.928869 2.13787 -1.6866 0.130476 0.937204 -0.323457 + -0.920691 2.13664 -1.68365 0.369071 0.896298 -0.245837 + -0.913373 2.13348 -1.67694 0.594563 0.803065 0.0397582 + -0.944467 2.1036 -1.71668 -0.265249 0.55625 -0.787546 + -0.940495 2.13301 -1.69609 -0.238828 0.748553 -0.61857 + -0.938947 2.1376 -1.68661 -0.203807 0.950276 -0.235453 + -0.930782 2.13926 -1.67936 -0.00554265 0.994069 0.108607 + -0.922603 2.13803 -1.67642 0.21954 0.957616 0.18648 + -0.955045 2.10075 -1.71145 -0.603677 0.485447 -0.632388 + -0.951073 2.13016 -1.69085 -0.558143 0.689945 -0.460926 + -0.944925 2.13601 -1.68367 -0.388554 0.915155 -0.107322 + -0.93676 2.13768 -1.67643 -0.167905 0.95056 0.261235 + -0.920523 2.13485 -1.67008 0.222289 0.894467 0.387965 + -0.956856 2.1275 -1.68586 -0.747685 0.606096 -0.271319 + -0.950708 2.13335 -1.67869 -0.505349 0.861755 0.0447305 + -0.941192 2.13458 -1.67025 -0.18028 0.922367 0.34167 + -0.935932 2.13522 -1.67151 -0.00962236 0.895916 0.44412 + -0.960516 2.1238 -1.67797 -0.903379 0.365592 0.224163 + -0.952845 2.13125 -1.67428 -0.622023 0.705203 0.340259 + -0.943329 2.13249 -1.66584 -0.33745 0.772634 0.53774 + -0.933078 2.12816 -1.65663 -0.149264 0.699564 0.698806 + -0.928012 2.12912 -1.65881 0.066609 0.816345 0.573711 + -0.954746 2.11933 -1.66807 -0.752944 0.118138 0.647394 + -0.947075 2.12678 -1.66438 -0.588024 0.406755 0.699127 + -0.936824 2.12246 -1.65517 -0.45541 0.349474 0.818822 + -0.92593 2.12005 -1.65015 0.0135759 0.440806 0.897499 + -0.936793 2.11176 -1.65195 -0.528903 0.0184661 0.848481 + -0.925899 2.10935 -1.64693 -0.0298801 -0.00698216 0.999529 + -0.916837 2.11094 -1.65066 0.515214 0.0619137 0.854822 + -0.920864 2.121 -1.65233 0.34043 0.495817 0.79892 + -0.922753 2.12975 -1.66006 0.159706 0.786187 0.596996 + -0.919695 2.13239 -1.66517 0.249706 0.844514 0.473754 + -0.911034 2.11345 -1.65579 0.719545 0.133633 0.681467 + -0.915061 2.12352 -1.65745 0.509886 0.52847 0.678775 + -0.912004 2.12616 -1.66256 0.611037 0.59839 0.518231 + -0.911292 2.13029 -1.6706 0.652367 0.709064 0.267667 + -0.905567 2.11812 -1.66483 0.875649 0.252918 0.411426 + 1.04961 1.36119 -2.08699 -0.131768 -0.902901 -0.409154 + 1.04271 1.37679 -2.1176 -0.250658 -0.939358 -0.234046 + 1.08487 1.3765 -2.12848 0.533065 -0.771504 -0.347309 + 0.976448 1.39491 -2.1025 -0.287715 -0.931588 -0.222181 + 1.03001 1.38062 -2.12265 -0.242302 -0.967651 0.0702951 + 1.06181 1.37216 -2.13123 -0.22663 -0.973001 0.0436826 + 1.07451 1.36833 -2.12618 0.16456 -0.954374 -0.249179 + 1.09355 1.37119 -2.09712 0.46366 -0.80056 -0.379636 + 1.05697 1.33738 -2.04067 -0.0863122 -0.907604 -0.410859 + 0.995344 1.34393 -2.00981 -0.275708 -0.879949 -0.386879 + 0.983343 1.37932 -2.07189 -0.295348 -0.865756 -0.404025 + 1.1117 1.39962 -2.10918 0.894676 -0.351076 -0.276225 + 1.10092 1.34738 -2.0508 0.601411 -0.777036 -0.185796 + 1.05999 1.32342 -2.00723 0.20829 -0.974853 0.0792307 + 0.998363 1.32996 -1.97637 -0.128317 -0.9871 -0.0957466 + 0.961258 1.34933 -1.99936 -0.052712 -0.881542 -0.469153 + 1.10301 1.40494 -2.14053 0.848584 -0.463426 -0.255227 + 1.12189 1.4465 -2.09138 0.981421 -0.174417 -0.0799454 + 1.12052 1.38342 -2.03799 0.931466 -0.358136 0.0641006 + 1.10104 1.3795 -1.98664 0.776029 -0.415731 0.474285 + 1.08144 1.34347 -1.99944 0.627897 -0.648194 0.430801 + 1.08236 1.37812 -2.13585 0.564459 -0.731405 -0.382665 + 1.078 1.38547 -2.16349 0.54335 -0.80397 -0.241668 + 1.09865 1.4123 -2.16816 0.835809 -0.506503 -0.211843 + 1.1238 1.4619 -2.14593 0.95782 -0.27263 -0.0908475 + 1.072 1.36994 -2.13355 0.190886 -0.904042 -0.382455 + 1.03997 1.37308 -2.15319 0.0163271 -0.999835 0.00795208 + 1.05482 1.38207 -2.20798 0.451542 -0.858432 -0.243319 + 1.0973 1.42511 -2.21268 0.803472 -0.541293 -0.24786 + 1.12245 1.47471 -2.19044 0.935144 -0.336898 -0.10957 + 1.02978 1.37531 -2.15087 -0.183818 -0.967505 0.173624 + 1.01679 1.36969 -2.19769 -0.00580261 -0.991659 -0.128757 + 1.04752 1.38995 -2.23971 0.323173 -0.811759 -0.486421 + 1.09001 1.43298 -2.24439 0.74219 -0.521644 -0.420764 + 1.11068 1.47223 -2.24293 0.844709 -0.298068 -0.444548 + 1.01155 1.38294 -2.1313 -0.197945 -0.957816 0.208344 + 0.958305 1.38611 -2.16114 -0.236594 -0.966147 0.102877 + 0.928203 1.39501 -2.17716 -0.334852 -0.935599 -0.111925 + 0.986688 1.37858 -2.21372 -0.246594 -0.923243 -0.294642 + 1.0136 1.39205 -2.2446 -0.0996887 -0.773555 -0.62584 + 0.973508 1.39608 -2.10977 -0.238834 -0.96828 0.0734327 + 0.955048 1.39841 -2.11842 -0.172716 -0.955008 0.241098 + 0.940077 1.39375 -2.14157 -0.191601 -0.966244 0.172228 + 0.903603 1.40282 -2.17041 -0.0885365 -0.967359 -0.237438 + 0.920522 1.4091 -2.21389 -0.378917 -0.845978 -0.375157 + 0.943567 1.40308 -2.09509 -0.0862686 -0.945055 -0.315323 + 0.940627 1.40425 -2.10236 -0.0119251 -0.999809 0.0154635 + 0.930671 1.40194 -2.11612 0.0881901 -0.988164 0.125516 + 0.915701 1.39729 -2.13927 0.0471119 -0.998054 -0.0408384 + 0.949257 1.38472 -2.06144 -0.055475 -0.878471 -0.474565 + 0.941563 1.38446 -2.06353 0.387593 -0.780663 -0.490242 + 0.935873 1.40281 -2.09718 0.418348 -0.846774 -0.32857 + 0.925917 1.4005 -2.11096 0.473359 -0.856025 -0.207731 + 0.95376 1.34832 -1.99973 0.326307 -0.834517 -0.443965 + 0.926763 1.33242 -2.00984 0.502812 -0.809181 -0.303985 + 0.914566 1.36855 -2.07365 0.611121 -0.669775 -0.421821 + 0.903042 1.38081 -2.11155 0.647879 -0.671728 -0.359214 + 0.961228 1.33076 -1.96753 -0.231518 -0.965319 -0.120657 + 0.954216 1.33504 -1.9559 0.0567867 -0.973061 0.223446 + 0.922622 1.32598 -1.96426 0.265338 -0.949518 0.167367 + 0.869015 1.31044 -2.04502 0.203827 -0.946168 -0.251438 + 0.968726 1.33177 -1.96715 0.0193318 -0.990625 -0.135232 + 0.969109 1.33213 -1.96502 0.0525341 -0.955666 0.289728 + 0.962097 1.33641 -1.9534 0.105094 -0.897294 0.428742 + 0.940689 1.34888 -1.92073 0.130125 -0.851872 0.507328 + 0.909096 1.33982 -1.92908 0.149481 -0.834531 0.530296 + 0.998746 1.33032 -1.97424 -0.00829376 -0.962241 0.272072 + 0.970212 1.3437 -1.94403 0.089345 -0.898757 0.429248 + 0.948804 1.35617 -1.91136 0.175166 -0.708052 0.68409 + 0.893374 1.36083 -1.90056 0.0448855 -0.599964 0.798767 + 0.864716 1.32173 -1.94058 0.0047596 -0.896294 0.443434 + 1.02149 1.3301 -1.97289 0.187403 -0.875971 0.444471 + 0.992956 1.34349 -1.94269 0.16134 -0.821775 0.546494 + 0.960983 1.37358 -1.90222 0.191438 -0.565118 0.802492 + 0.905553 1.37825 -1.89143 0.0205218 -0.444223 0.895681 + 0.848994 1.34274 -1.91206 -0.123856 -0.657224 0.743449 + 1.04294 1.35016 -1.9651 0.438506 -0.631287 0.639679 + 1.00874 1.35683 -1.93603 0.364965 -0.651724 0.664873 + 0.976767 1.38693 -1.89556 0.215561 -0.517039 0.828374 + 0.955031 1.42883 -1.87211 0.152066 -0.332594 0.93073 + 1.04907 1.39376 -1.9313 0.520519 -0.487289 0.701148 + 1.01487 1.40043 -1.90222 0.450038 -0.412157 0.792208 + 0.993137 1.44233 -1.87877 0.29903 -0.286766 0.910135 + 1.09989 1.41162 -1.9656 0.717945 -0.359919 0.595829 + 1.04792 1.42587 -1.91027 0.446156 -0.373659 0.813218 + 1.00553 1.4729 -1.87392 0.392448 -0.225212 0.891776 + 0.921796 1.52442 -1.84221 0.0999696 -0.232572 0.967428 + 1.13071 1.43029 -2.0202 0.989073 -0.102223 0.106236 + 1.11441 1.4261 -1.97307 0.825519 -0.358387 0.435977 + 1.05085 1.45934 -1.90621 0.593301 -0.167812 0.787295 + 1.00846 1.50637 -1.86986 0.580374 -0.226143 0.782321 + 1.12231 1.48799 -1.98729 0.967294 -0.0513573 0.248405 + 1.106 1.4838 -1.94016 0.818237 -0.0995733 0.566192 + 1.06537 1.47382 -1.91368 0.574682 -0.272768 0.771582 + 1.04694 1.51267 -1.8849 0.47682 -0.326702 0.816032 + 0.997493 1.55542 -1.847 0.271337 -0.334732 0.902403 + 1.13649 1.51456 -2.04099 0.983587 -0.142519 0.110659 + 1.12764 1.56808 -1.99769 0.952457 -0.0314376 0.303048 + 1.11346 1.54151 -1.94398 0.897598 -0.00508183 0.440786 + 1.08758 1.52264 -1.91138 0.716932 -0.166609 0.676941 + 1.03598 1.56173 -1.86204 0.467024 -0.312896 0.827034 + 1.1384 1.52996 -2.09554 0.985516 -0.168419 0.0198111 + 1.14059 1.60047 -2.03354 0.976671 -0.0318639 0.212362 + 1.11401 1.61167 -1.94958 0.891091 -0.0355853 0.452428 + 1.08501 1.58649 -1.90741 0.824324 -0.00211003 0.566115 + 1.05913 1.56764 -1.87481 0.663177 -0.174442 0.727851 + 1.1412 1.532 -2.156 0.970231 -0.241954 0.0105141 + 1.14887 1.58865 -2.13019 0.997047 -0.071887 0.0270195 + 1.14607 1.58662 -2.06973 0.984424 -0.110699 0.136586 + 1.14066 1.67979 -2.04604 0.965172 0.162581 0.204963 + 1.12697 1.64406 -1.98544 0.933678 0.097892 0.344475 + 1.12601 1.49299 -2.22076 0.922224 -0.292944 -0.252363 + 1.14477 1.55028 -2.18632 0.982319 -0.180492 -0.0497236 + 1.14975 1.61081 -2.15505 0.999523 -0.0288958 0.0108836 + 1.14614 1.66593 -2.08223 0.991982 0.0749081 0.101791 + 1.14556 1.56771 -2.21169 0.899218 0.0634379 -0.432878 + 1.15054 1.62825 -2.18043 0.941677 0.144045 -0.30413 + 1.14702 1.68809 -2.10709 0.987258 0.107658 0.117178 + 1.12907 1.73891 -2.06777 0.877959 0.386478 0.282528 + 1.12418 1.7134 -2.0251 0.855721 0.369959 0.361762 + 1.13023 1.54695 -2.23386 0.737889 0.0181865 -0.674677 + 1.13472 1.63559 -2.19829 0.534063 0.397288 -0.746284 + 1.14784 1.70525 -2.13236 0.930519 0.309847 -0.195269 + 1.12989 1.75606 -2.09305 0.79998 0.599973 0.00799541 + 1.08355 1.46722 -2.27512 0.49076 -0.106603 -0.864749 + 1.0787 1.49585 -2.27286 0.228593 0.23567 -0.944566 + 1.12538 1.57558 -2.23162 0.527381 0.300771 -0.794611 + 1.06288 1.42796 -2.27657 0.387442 -0.455687 -0.801398 + 1.02895 1.43006 -2.28148 -0.0718649 -0.335529 -0.939285 + 1.03233 1.48352 -2.27793 -0.0574481 0.196585 -0.978802 + 1.09129 1.58679 -2.23392 0.0858916 0.436199 -0.895742 + 1.10063 1.64679 -2.2006 0.157825 0.492696 -0.85577 + 0.954314 1.44138 -2.26401 -0.264294 -0.290317 -0.919709 + 0.95769 1.49484 -2.26045 -0.220935 0.189697 -0.956662 + 0.983508 1.56755 -2.24452 -0.125779 0.370253 -0.920376 + 1.04491 1.57445 -2.23899 0.0250319 0.401769 -0.915399 + 0.986422 1.38955 -2.23237 -0.266731 -0.759487 -0.593324 + 0.927139 1.43888 -2.25177 -0.278707 -0.624851 -0.729304 + 0.902475 1.44951 -2.25152 -0.307582 -0.287589 -0.90702 + 0.886486 1.45631 -2.24676 -0.451423 -0.138814 -0.881446 + 0.899092 1.49376 -2.24544 -0.364987 0.230434 -0.902045 + 0.920256 1.42007 -2.23255 -0.331344 -0.728773 -0.599251 + 0.895592 1.4307 -2.23229 -0.261028 -0.749166 -0.608781 + 0.887581 1.43198 -2.23119 -0.350441 -0.71197 -0.608514 + 0.895922 1.41692 -2.20714 -0.271922 -0.878812 -0.392106 + 0.887911 1.4182 -2.20603 -0.0235074 -0.849692 -0.526755 + 0.871592 1.43878 -2.22644 -0.360939 -0.50584 -0.783485 + 0.848608 1.46705 -2.22149 -0.631461 0.0930117 -0.769809 + 0.861214 1.50451 -2.22016 -0.501608 0.260556 -0.824924 + 0.896651 1.40107 -2.16767 0.250692 -0.885279 -0.391707 + 0.87123 1.41119 -2.20415 0.132127 -0.714936 -0.686592 + 0.848054 1.43546 -2.2199 -0.426623 -0.310922 -0.849306 + 0.828642 1.45837 -2.20087 -0.697863 -0.0299321 -0.715606 + 0.908748 1.39554 -2.13654 0.451296 -0.861089 -0.234217 + 0.885873 1.37584 -2.13714 0.60735 -0.672591 -0.422785 + 0.87997 1.39407 -2.16579 0.433408 -0.748956 -0.50122 + 0.849827 1.37393 -2.17447 0.00936951 -0.75254 -0.65848 + 0.847692 1.40788 -2.19762 -0.303254 -0.567248 -0.765681 + 0.855708 1.33141 -2.11817 0.165908 -0.852228 -0.496168 + 0.85573 1.3557 -2.14582 0.178927 -0.766808 -0.616433 + 0.867232 1.31915 -2.08026 0.304715 -0.901031 -0.308695 + 0.805212 1.33538 -2.08529 -0.534241 -0.772149 -0.344053 + 0.820131 1.35095 -2.12545 -0.514085 -0.672283 -0.532684 + 0.820154 1.37524 -2.1531 -0.597739 -0.559523 -0.574145 + 0.830224 1.39283 -2.17614 -0.624861 -0.447197 -0.639971 + 0.806994 1.32668 -2.05006 -0.452102 -0.873865 -0.178784 + 0.734565 1.38336 -2.02192 -0.851573 -0.466162 -0.239826 + 0.762071 1.40805 -2.09246 -0.841218 -0.317852 -0.437405 + 0.77699 1.42361 -2.13262 -0.786059 -0.231106 -0.573325 + 0.812106 1.3154 -2.0035 -0.407687 -0.912606 0.0306993 + 0.739676 1.37208 -1.97537 -0.764618 -0.62717 0.148381 + 0.710452 1.44335 -1.94262 -0.930888 -0.275506 0.239881 + 0.710439 1.46348 -1.99338 -0.975935 -0.0621682 -0.209013 + 0.737945 1.48817 -2.06393 -0.919145 0.0581182 -0.389608 + 0.864873 1.304 -1.99944 0.0540454 -0.997151 0.0526146 + 0.811948 1.33311 -1.94464 -0.373796 -0.826429 0.42106 + 0.768371 1.36311 -1.93854 -0.56393 -0.669294 0.483765 + 0.739147 1.43438 -1.90578 -0.620506 -0.418801 0.663007 + 0.805417 1.37274 -1.90596 -0.306034 -0.517645 0.798991 + 0.797364 1.42541 -1.88466 -0.231579 -0.402922 0.885452 + 0.742741 1.5156 -1.86294 -0.617854 -0.326273 0.715403 + 0.710269 1.54832 -1.89964 -0.953683 -0.108947 0.280392 + 0.710255 1.56845 -1.95041 -0.975956 0.087641 -0.199573 + 0.897501 1.43092 -1.87013 -0.0429599 -0.343876 0.938032 + 0.864266 1.5265 -1.84023 0.0512776 -0.341215 0.938586 + 0.800958 1.50662 -1.84181 -0.11434 -0.430144 0.89549 + 0.787413 1.572 -1.81563 -0.202424 -0.344449 0.916722 + 0.743671 1.58188 -1.83554 -0.64638 -0.260911 0.71702 + 0.934186 1.55499 -1.83735 0.12861 -0.315775 0.940077 + 0.85072 1.59187 -1.81405 0.0914737 -0.395346 0.913966 + 0.842039 1.62036 -1.79979 0.0335323 -0.298541 0.953808 + 0.785535 1.61948 -1.80175 -0.237605 -0.245062 0.939941 + 0.741793 1.62937 -1.82166 -0.661079 -0.167372 0.73141 + 0.976505 1.59867 -1.82601 0.176379 -0.430619 0.885131 + 0.913198 1.59822 -1.81636 0.0915963 -0.421893 0.902007 + 0.904516 1.62672 -1.80212 0.0674758 -0.330093 0.941534 + 0.887647 1.66415 -1.79206 0.0163266 -0.114962 0.993236 + 0.837177 1.66114 -1.7921 -0.0135795 -0.0687643 0.99754 + 1.01603 1.59645 -1.83673 0.396192 -0.345262 0.85078 + 0.960783 1.62859 -1.80535 0.20275 -0.281948 0.937762 + 0.943913 1.66603 -1.7953 0.244554 -0.072172 0.966946 + 1.03918 1.60236 -1.84948 0.639783 -0.108202 0.760901 + 1.00031 1.62638 -1.81606 0.432675 -0.148971 0.889157 + 0.988692 1.68218 -1.81608 0.529352 0.130746 0.838267 + 0.914365 1.71912 -1.78871 0.175173 -0.0901935 0.980398 + 1.05772 1.62163 -1.86933 0.754501 0.0404257 0.655053 + 1.01885 1.64567 -1.83592 0.672378 0.124962 0.729584 + 1.03131 1.70976 -1.86119 0.706374 0.254549 0.660485 + 1.00313 1.75498 -1.85138 0.738261 0.158549 0.655617 + 0.959144 1.73527 -1.80948 0.549438 0.0376273 0.834686 + 1.08672 1.64681 -1.9115 0.833922 0.118009 0.539118 + 1.06147 1.67324 -1.88104 0.762678 0.199765 0.615156 + 1.08523 1.7041 -1.93404 0.82692 0.346528 0.442856 + 1.05901 1.73045 -1.90908 0.797211 0.368281 0.478356 + 1.11048 1.67767 -1.96451 0.866277 0.271214 0.419533 + 1.09218 1.73874 -1.99404 0.794826 0.475509 0.377017 + 1.06596 1.7651 -1.96907 0.7875 0.507225 0.350095 + 1.04769 1.78159 -1.95457 0.851349 0.423118 0.310122 + 1.03082 1.77568 -1.89927 0.858434 0.286772 0.425268 + 1.09708 1.76425 -2.0367 0.761803 0.548151 0.345234 + 1.06837 1.78834 -2.0124 0.769436 0.550463 0.323972 + 1.0501 1.80483 -1.99789 0.825668 0.496217 0.268407 + 1.03028 1.81533 -1.93018 0.91773 0.353515 0.181102 + 1.01341 1.80942 -1.87489 0.90755 0.0206805 0.419434 + 1.09549 1.77946 -2.06302 0.672094 0.735425 0.0862512 + 1.06679 1.80356 -2.03872 0.710694 0.694644 0.111284 + 1.03766 1.83134 -2.0135 0.796052 0.605024 -0.0157297 + 1.01403 1.8742 -1.9934 0.858363 0.456876 -0.233403 + 1.02647 1.84769 -1.9778 0.86251 0.431032 0.265119 + 1.11124 1.76217 -2.11859 0.467288 0.724432 -0.506793 + 1.07684 1.78557 -2.08856 0.512797 0.833744 -0.204717 + 1.04531 1.81879 -2.05957 0.567436 0.796265 -0.209709 + 1.01618 1.84657 -2.03436 0.58554 0.706496 -0.397501 + 0.995883 1.8882 -2.01106 0.664036 0.489033 -0.5656 + 1.13202 1.7126 -2.15023 0.51832 0.538245 -0.664558 + 1.07481 1.74248 -2.14068 0.188278 0.55397 -0.810968 + 1.04216 1.79953 -2.11292 0.33298 0.722024 -0.606469 + 1.01063 1.83274 -2.08394 0.384714 0.821899 -0.420092 + 0.978204 1.85524 -2.05445 0.38405 0.755937 -0.530155 + 1.09559 1.6929 -2.17231 0.161811 0.538864 -0.826706 + 1.03252 1.73344 -2.15652 0.10317 0.497943 -0.861051 + 0.999865 1.7905 -2.12876 0.133453 0.56295 -0.815646 + 0.972288 1.8385 -2.09677 0.188299 0.754744 -0.628415 + 1.0558 1.63596 -2.21233 0.0817682 0.450228 -0.889162 + 1.05076 1.68208 -2.18405 0.0516619 0.509271 -0.859054 + 0.980605 1.70774 -2.17046 -0.107032 0.418275 -0.901992 + 0.953246 1.792 -2.13158 -0.0773757 0.468702 -0.879961 + 0.925669 1.84 -2.09959 -0.0907293 0.658803 -0.746825 + 0.994392 1.62906 -2.21786 -0.128752 0.49772 -0.857728 + 0.998842 1.65637 -2.198 -0.141639 0.527294 -0.837794 + 0.917688 1.70239 -2.15691 -0.311428 0.330996 -0.89076 + 0.890328 1.78665 -2.11804 -0.289286 0.384223 -0.876748 + 0.870971 1.82926 -2.08941 -0.321082 0.546554 -0.773424 + 0.916339 1.61308 -2.20198 -0.392093 0.504401 -0.769313 + 0.92079 1.6404 -2.18212 -0.35224 0.456584 -0.816981 + 0.828512 1.71502 -2.10984 -0.526938 0.193591 -0.827562 + 0.810585 1.76854 -2.09241 -0.507016 0.231429 -0.830286 + 0.791228 1.81115 -2.06378 -0.527558 0.582797 -0.618086 + 0.924909 1.56648 -2.22949 -0.332458 0.377131 -0.864433 + 0.841764 1.57271 -2.17745 -0.527686 0.378091 -0.760654 + 0.831614 1.65302 -2.13505 -0.520594 0.319383 -0.791818 + 0.776665 1.70487 -2.06958 -0.815377 0.0302016 -0.578142 + 0.850334 1.5261 -2.20495 -0.490665 0.347792 -0.79893 + 0.813156 1.51146 -2.18697 -0.696756 0.253608 -0.670979 + 0.799498 1.56287 -2.14471 -0.777025 0.258523 -0.573933 + 0.789347 1.64319 -2.10231 -0.814045 0.161517 -0.557891 + 0.824036 1.48986 -2.20217 -0.588341 0.0462795 -0.807288 + 0.805101 1.4887 -2.1814 -0.831474 -0.0140934 -0.555385 + 0.791442 1.54012 -2.13914 -0.864894 0.196373 -0.461948 + 0.772155 1.63086 -2.05582 -0.87607 0.108306 -0.469863 + 0.759473 1.69255 -2.0231 -0.920174 -0.0291921 -0.39042 + 0.809707 1.45721 -2.1801 -0.819657 -0.154198 -0.551712 + 0.782071 1.50568 -2.13663 -0.831698 0.136923 -0.538081 + 0.762784 1.59643 -2.05332 -0.880222 0.198039 -0.431266 + 0.828088 1.42677 -2.19929 -0.716303 -0.313041 -0.623631 + 0.799637 1.43961 -2.15706 -0.77218 -0.162138 -0.614368 + 0.759425 1.48967 -2.11219 -0.851914 0.0911327 -0.515691 + 0.741304 1.59492 -2.00506 -0.900082 0.175812 -0.398675 + 0.739236 1.6697 -1.97481 -0.907583 0.0297168 -0.41882 + 0.749453 1.73526 -2.01205 -0.93301 -0.0940985 -0.34733 + 0.758738 1.75839 -2.05214 -0.818666 0.0477827 -0.572279 + 0.708187 1.64323 -1.92017 -0.978804 0.0175715 -0.204042 + 0.705916 1.68333 -1.91339 -0.980359 -0.00673064 -0.197104 + 0.729217 1.71242 -1.96378 -0.913426 -0.00944856 -0.406895 + 0.727109 1.75134 -1.95088 -0.94254 0.10088 -0.318499 + 0.739652 1.76789 -1.98901 -0.963745 0.00697495 -0.266732 + 0.711199 1.61461 -1.87225 -0.941705 -0.118846 0.314748 + 0.708928 1.65471 -1.86548 -0.946007 -0.052359 0.319889 + 0.711709 1.70214 -1.8583 -0.917127 0.0404303 0.396538 + 0.703809 1.72224 -1.90049 -0.994198 0.0904608 -0.0582032 + 0.744575 1.67681 -1.81449 -0.666117 -0.0195497 0.745591 + 0.751963 1.73191 -1.81056 -0.668395 -0.0232224 0.743444 + 0.721226 1.75027 -1.85204 -0.902406 0.0478873 0.428218 + 0.713326 1.77037 -1.89423 -0.990421 0.124422 -0.0598802 + 0.780673 1.66025 -1.79405 -0.271075 -0.10147 0.957195 + 0.788062 1.71535 -1.79012 -0.200506 -0.0641711 0.977588 + 0.783995 1.77461 -1.7851 -0.236756 -0.118803 0.964278 + 0.75628 1.78762 -1.79999 -0.674165 -0.0951991 0.73242 + 0.819622 1.69804 -1.79435 0.0485028 0.00473611 0.998812 + 0.815555 1.75729 -1.78932 0.309013 -0.0623261 0.949013 + 0.800585 1.84202 -1.77801 0.32229 -0.117136 0.939366 + 0.783561 1.84073 -1.77594 -0.198504 -0.174913 0.964366 + 0.755847 1.85374 -1.79084 -0.630083 -0.210916 0.747335 + 0.870092 1.70105 -1.79431 -0.0810427 -0.0310603 0.996226 + 0.833175 1.76433 -1.79935 0.249001 0.177868 0.95203 + 0.818206 1.84905 -1.78803 0.614126 -0.0835115 0.784777 + 0.804706 1.91816 -1.76949 0.563755 -0.114943 0.817905 + 0.790659 1.91362 -1.76293 0.305111 -0.187189 0.933739 + 0.906958 1.77198 -1.77752 0.215707 -0.280146 0.935408 + 0.862685 1.75391 -1.78312 -0.354468 -0.168924 0.919683 + 0.847077 1.76163 -1.79512 -0.356989 0.598706 0.717015 + 0.855159 1.79369 -1.81726 -0.736962 0.546199 0.398187 + 0.841258 1.79639 -1.82149 0.550371 0.433013 0.713856 + 0.94324 1.78657 -1.79155 0.579369 -0.218619 0.785198 + 0.909069 1.83044 -1.75378 0.0654777 -0.338629 0.938639 + 0.890218 1.83336 -1.76077 -0.505792 -0.156398 0.84836 + 0.87461 1.84108 -1.77277 -0.753847 -0.0273371 0.656481 + 0.864252 1.84981 -1.79008 -0.96432 0.122361 0.234765 + 0.987221 1.80629 -1.83345 0.787426 -0.129193 0.602719 + 0.977649 1.85867 -1.79678 0.77756 -0.252236 0.576001 + 0.94535 1.84504 -1.7678 0.594435 -0.340595 0.728452 + 0.942573 1.90333 -1.73659 0.577675 -0.358421 0.733366 + 0.919433 1.89794 -1.72668 0.0523185 -0.405825 0.912452 + 1.00384 1.8618 -1.83821 0.936587 -0.00700767 0.350366 + 0.986619 1.92615 -1.78642 0.989079 0.060796 0.134264 + 0.974871 1.91696 -1.76556 0.807561 -0.248096 0.535064 + 1.02479 1.83536 -1.92346 0.800739 0.551633 -0.233494 + 0.998351 1.88183 -1.83149 0.930695 0.362723 -0.0473265 + 1.01408 1.83106 -1.94101 0.502432 0.86199 0.0673412 + 0.991474 1.88956 -1.84808 0.718025 0.624288 -0.307741 + 0.979742 1.93388 -1.803 0.830766 0.42629 -0.357918 + 1.01479 1.84131 -1.96075 0.549778 0.561393 0.618532 + 0.972088 1.84258 -1.91983 0.128016 0.976777 -0.171811 + 0.980764 1.88526 -1.86563 0.414956 0.735274 -0.535895 + 0.967479 1.93991 -1.81463 0.59376 0.557094 -0.580599 + 0.976704 1.99065 -1.76489 0.840678 0.332292 -0.427601 + 0.981995 1.92345 -1.94256 0.777505 0.0759679 0.624272 + 0.964709 1.91481 -1.92212 0.564554 -0.0897525 0.820502 + 0.972792 1.85284 -1.93957 0.443915 0.344486 0.827205 + 0.993675 1.92983 -1.9596 0.906861 0.197278 0.372404 + 0.967909 1.99389 -1.92317 0.830085 -0.0334193 0.556634 + 0.950622 1.98525 -1.90273 0.608777 -0.137099 0.781405 + 0.929628 1.91428 -1.90729 0.198376 -0.21833 0.955499 + 0.937711 1.85232 -1.92473 0.283853 0.429933 0.857079 + 0.993954 1.93544 -1.97227 0.919246 0.34275 -0.193675 + 0.976243 2.00544 -1.95092 0.96373 0.224933 -0.143631 + 0.975963 1.99982 -1.93825 0.953762 0.0821907 0.289106 + 0.96098 2.05958 -1.90185 0.84267 -0.0909533 0.530693 + 0.975807 1.94944 -1.98993 0.778914 0.357394 -0.515327 + 0.967668 2.01288 -1.9665 0.837103 0.28847 -0.464805 + 0.969269 2.06972 -1.92641 0.970206 0.185074 -0.156359 + 0.969034 2.06551 -1.91693 0.965329 0.022023 0.260104 + 0.956808 1.9592 -2.01208 0.564425 0.333935 -0.754925 + 0.948669 2.02264 -1.98866 0.600319 0.349677 -0.719266 + 0.945246 2.08526 -1.96032 0.608493 0.386501 -0.693075 + 0.960694 2.07717 -1.94198 0.843505 0.293524 -0.449826 + 0.957905 1.89687 -2.03116 0.416051 0.439163 -0.796265 + 0.926026 1.90248 -2.04141 0.186541 0.442705 -0.877049 + 0.924929 1.9648 -2.02233 0.131254 0.330282 -0.934712 + 0.925222 2.02636 -1.99782 0.158286 0.393945 -0.905402 + 0.939863 1.861 -2.06729 0.172178 0.727475 -0.66418 + 0.889381 1.90294 -2.04387 -0.129103 0.42459 -0.896134 + 0.892353 1.96327 -2.02012 -0.187615 0.373806 -0.908333 + 0.892646 2.02482 -1.99562 -0.314878 0.374548 -0.872104 + 0.903219 1.86146 -2.06977 -0.122963 0.636648 -0.761288 + 0.85084 1.88291 -2.04043 -0.376885 0.418507 -0.826323 + 0.853812 1.94323 -2.01666 -0.459155 0.420616 -0.78247 + 0.87111 2.01902 -1.98352 -0.695745 0.350758 -0.626823 + 0.895326 2.08771 -1.96769 -0.30918 0.433095 -0.846662 + 0.848521 1.85072 -2.05959 -0.405127 0.522966 -0.749919 + 0.788611 1.85201 -2.0186 -0.64903 0.450425 -0.613088 + 0.784655 1.86838 -2.00259 -0.876543 0.418205 -0.23828 + 0.849856 1.95961 -2.00064 -0.754811 0.451659 -0.475673 + 0.786292 1.81982 -2.03777 -0.580243 0.61506 -0.533873 + 0.744001 1.79968 -2.00307 -0.912313 0.24411 -0.328778 + 0.743814 1.83743 -1.97241 -0.794396 0.460891 -0.395619 + 0.761862 1.84348 -1.975 -0.25849 0.922216 -0.287577 + 0.778005 1.84923 -1.98921 -0.610409 0.790295 0.0532384 + 0.748937 1.79101 -2.02909 -0.846565 0.317533 -0.427201 + 0.736555 1.80077 -1.96229 -0.965925 0.131235 -0.223082 + 0.736368 1.83852 -1.93163 -0.9573 0.158464 -0.241797 + 0.724012 1.78422 -1.92417 -0.953863 0.142895 -0.264056 + 0.726314 1.83497 -1.90204 -0.947127 0.159876 -0.27819 + 0.736551 1.89566 -1.90307 -0.792095 0.360144 -0.492831 + 0.749461 1.89927 -1.91012 -0.414055 0.60128 -0.683389 + 0.76751 1.90531 -1.91271 -0.0971631 0.622788 -0.776334 + 0.715627 1.82111 -1.87211 -0.998546 0.0534961 -0.00655442 + 0.717133 1.8795 -1.84616 -0.999897 0.0132344 -0.00559226 + 0.726497 1.89212 -1.87348 -0.948664 0.136484 -0.285321 + 0.725891 1.95057 -1.84504 -0.917238 0.176364 -0.35717 + 0.735433 1.95672 -1.86013 -0.714273 0.360113 -0.600111 + 0.725543 1.80598 -1.84147 -0.894003 -0.068371 0.442813 + 0.727049 1.86436 -1.81551 -0.846168 -0.192158 0.497066 + 0.725019 1.92805 -1.79507 -0.844133 -0.209695 0.493424 + 0.716527 1.93795 -1.81772 -0.999717 -0.0202522 0.0124381 + 0.753817 1.91743 -1.77039 -0.580353 -0.285006 0.762864 + 0.745486 1.98371 -1.75005 -0.58294 -0.296831 0.756355 + 0.723834 1.99148 -1.76811 -0.833189 -0.214658 0.509626 + 0.715341 2.00138 -1.79076 -0.999973 0.00719864 -0.00103465 + 0.773635 1.91234 -1.76087 -0.187794 -0.274986 0.94293 + 0.765304 1.97862 -1.74053 -0.161586 -0.306435 0.938076 + 0.757729 2.04002 -1.72191 -0.177307 -0.289303 0.940673 + 0.744459 2.04328 -1.72861 -0.581416 -0.257542 0.771769 + 0.722807 2.05105 -1.74667 -0.837077 -0.159195 0.523411 + 0.775719 1.9795 -1.74215 0.316008 -0.231557 0.920065 + 0.768143 2.0409 -1.72353 0.331014 -0.238025 0.913112 + 0.763122 2.09719 -1.70674 0.339834 -0.214049 0.915804 + 0.757071 2.09656 -1.70567 -0.149467 -0.247627 0.957257 + 0.743801 2.09981 -1.71239 -0.579808 -0.208486 0.787627 + 0.789766 1.98404 -1.74871 0.561519 -0.147349 0.814238 + 0.777267 2.04384 -1.72806 0.571743 -0.172917 0.802004 + 0.772245 2.10013 -1.71128 0.573608 -0.159297 0.803491 + 0.761281 2.13195 -1.69915 0.309632 0.0701278 0.948267 + 0.75523 2.13133 -1.69808 -0.151824 0.0365892 0.98773 + 0.801708 1.9894 -1.75827 0.777185 -0.029527 0.628579 + 0.789209 2.04921 -1.73761 0.787039 -0.0694886 0.612977 + 0.779755 2.10356 -1.71724 0.783201 -0.0682216 0.618015 + 0.766734 2.1336 -1.70203 0.508286 0.112287 0.853837 + 0.759235 2.14083 -1.70197 0.177648 0.542294 0.821193 + 0.821388 1.92561 -1.78316 0.78452 -0.00693025 0.620065 + 0.829458 1.93372 -1.79905 0.936034 0.129826 0.327087 + 0.809777 1.99751 -1.77415 0.934855 0.128683 0.330889 + 0.794748 2.05477 -1.74833 0.945182 0.075546 0.317685 + 0.834888 1.8565 -1.80171 0.816972 -0.0563333 0.573919 + 0.844166 1.87442 -1.82561 0.957298 0.0828217 0.276984 + 0.831377 1.94503 -1.82226 0.959814 0.280534 -0.0075723 + 0.811196 2.00563 -1.79054 0.958774 0.284147 0.0036961 + 0.796166 2.06289 -1.76471 0.971383 0.235931 -0.027415 + 0.850536 1.81431 -1.84539 0.611634 0.551724 0.567013 + 0.859635 1.83394 -1.87879 0.567337 0.754982 0.328832 + 0.846085 1.88573 -1.84883 0.967324 0.253153 -0.01407 + 0.824707 1.95308 -1.84008 0.83936 0.422156 -0.34243 + 0.858926 1.81218 -1.84164 -0.660746 0.680623 0.316491 + 0.868025 1.83181 -1.87504 -0.478892 0.86608 0.143415 + 0.890865 1.84138 -1.89545 -0.279342 0.95786 -0.0668777 + 0.860255 1.8495 -1.91568 -0.240463 0.636096 0.733185 + 0.849933 1.84528 -1.90432 0.446095 0.89494 0.00901771 + 0.868018 1.8683 -1.81446 -0.971487 0.2145 -0.10101 + 0.875236 1.87903 -1.83599 -0.851069 0.377747 -0.364676 + 0.898077 1.8886 -1.8564 -0.523654 0.560859 -0.641267 + 0.877244 1.91512 -1.76182 -0.957147 -0.00180678 0.289598 + 0.875799 1.92392 -1.77936 -0.98671 0.157721 -0.0390768 + 0.883017 1.93465 -1.80089 -0.847461 0.360132 -0.390018 + 0.898595 1.94146 -1.81495 -0.543497 0.515266 -0.662655 + 0.925232 1.8928 -1.86607 -0.25583 0.616446 -0.744678 + 0.887602 1.90638 -1.74452 -0.786311 -0.163794 0.595724 + 0.893341 1.96685 -1.71412 -0.790203 -0.200638 0.579071 + 0.885018 1.97388 -1.72792 -0.953747 -0.0384268 0.298145 + 0.883573 1.98269 -1.74545 -0.987445 0.152247 -0.0421075 + 0.900583 1.90086 -1.73367 -0.53599 -0.290869 0.792534 + 0.906322 1.96132 -1.70327 -0.543394 -0.31746 0.777137 + 0.90932 2.01941 -1.6791 -0.550898 -0.262686 0.792153 + 0.899932 2.02347 -1.68723 -0.788573 -0.16142 0.593377 + 0.891609 2.03049 -1.70102 -0.951993 -0.0156148 0.305721 + 0.92051 1.959 -1.69764 0.0210432 -0.40515 0.914008 + 0.923508 2.01709 -1.67346 0.0357212 -0.342055 0.939001 + 0.923574 2.07421 -1.65581 0.0142829 -0.270472 0.962622 + 0.914512 2.0758 -1.65953 -0.549411 -0.200134 0.81123 + 0.905124 2.07985 -1.66766 -0.786453 -0.108989 0.607959 + 0.943649 1.96439 -1.70755 0.580547 -0.338264 0.740637 + 0.940755 2.02107 -1.68121 0.577304 -0.281991 0.76629 + 0.94082 2.07818 -1.66356 0.583681 -0.222137 0.781007 + 0.925899 2.10935 -1.64693 0.029823 -0.00713463 0.99953 + 0.916837 2.11094 -1.65066 -0.515326 0.0618104 0.854763 + 0.970475 1.97571 -1.73163 0.803525 -0.235237 0.546819 + 0.967581 2.03238 -1.70531 0.801857 -0.182254 0.569042 + 0.958773 2.08575 -1.67969 0.792263 -0.132821 0.595549 + 0.954746 2.11933 -1.66807 0.753159 0.117968 0.647174 + 0.936793 2.11176 -1.65195 0.529231 0.0192267 0.84826 + 0.982223 1.9849 -1.75249 0.996304 0.0460889 0.0724849 + 0.976628 2.03938 -1.72072 0.9914 0.0774988 0.105446 + 0.967821 2.09275 -1.6951 0.984288 0.139482 0.108269 + 0.960516 2.1238 -1.67797 0.903246 0.36591 0.224178 + 0.971109 2.04514 -1.73312 0.833021 0.349648 -0.428745 + 0.964161 2.09645 -1.70299 0.825535 0.386871 -0.41088 + 0.956856 2.1275 -1.68586 0.747496 0.605392 -0.273407 + 0.950708 2.13335 -1.67869 0.498957 0.865425 0.045627 + 0.952845 2.13125 -1.67428 0.622953 0.705195 0.33857 + 0.961994 2.04944 -1.74159 0.612238 0.457524 -0.644854 + 0.955045 2.10075 -1.71145 0.604372 0.486384 -0.631003 + 0.951073 2.13016 -1.69085 0.559774 0.688294 -0.461416 + 0.944925 2.13601 -1.68367 0.388572 0.916539 -0.094704 + 0.941192 2.13458 -1.67025 0.182079 0.925098 0.333228 + 0.964441 1.99668 -1.77653 0.613458 0.459099 -0.642572 + 0.94588 2.05369 -1.74957 0.258464 0.539225 -0.801519 + 0.944467 2.1036 -1.71668 0.265112 0.556414 -0.787476 + 0.940495 2.13301 -1.69609 0.238927 0.748629 -0.61844 + 0.938947 2.1376 -1.68661 0.204473 0.950056 -0.235765 + 0.948327 2.00093 -1.78451 0.263794 0.550583 -0.792004 + 0.926855 2.00147 -1.78457 -0.173881 0.56434 -0.807022 + 0.929849 2.05409 -1.74962 -0.168649 0.54576 -0.820795 + 0.928436 2.10401 -1.71672 -0.176536 0.556341 -0.811985 + 0.930417 2.13328 -1.69608 -0.143699 0.746423 -0.649771 + 0.947222 1.9451 -1.82456 0.241432 0.632124 -0.736295 + 0.92575 1.94566 -1.82462 -0.184273 0.60462 -0.774905 + 0.904837 1.99813 -1.77673 -0.537046 0.499979 -0.679414 + 0.907831 2.05075 -1.74177 -0.544256 0.480037 -0.688004 + 0.913905 2.10183 -1.71152 -0.534856 0.494059 -0.685445 + 0.960507 1.89046 -1.87556 0.165345 0.686349 -0.708227 + 0.936812 1.84492 -1.91034 -0.0543891 0.98242 -0.178588 + 0.891764 1.84878 -1.90985 0.0324371 0.55205 0.83318 + 0.899833 1.91406 -1.90688 -0.0479227 -0.162398 0.985561 + 0.868325 1.91479 -1.91271 -0.443809 -0.0519622 0.894614 + 0.853887 1.91951 -1.92509 -0.676503 0.0106423 0.736363 + 0.828463 1.85617 -1.9411 -0.456195 0.637005 0.621378 + 0.929162 1.98119 -1.89321 0.230535 -0.217435 0.94846 + 0.899367 1.98098 -1.89281 -0.126952 -0.218565 0.967529 + 0.879269 1.98287 -1.89829 -0.478062 -0.15888 0.863837 + 0.864832 1.98759 -1.91067 -0.75344 -0.0640075 0.654394 + 0.832983 1.92248 -1.94618 -0.810904 0.1688 0.560304 + 0.925454 2.04843 -1.87543 0.224618 -0.259326 0.939306 + 0.901027 2.04832 -1.87518 -0.132784 -0.270145 0.953619 + 0.880929 2.05021 -1.88067 -0.495057 -0.224936 0.839239 + 0.946914 2.05248 -1.88496 0.630728 -0.180969 0.754608 + 0.940668 2.11102 -1.86436 0.628021 -0.206684 0.750247 + 0.924527 2.10799 -1.85717 0.233477 -0.298934 0.925271 + 0.9001 2.10789 -1.85691 -0.138219 -0.312687 0.939746 + 0.954734 2.11813 -1.88125 0.843894 -0.0968828 0.527689 + 0.944789 2.16896 -1.85581 0.837255 -0.0691901 0.542417 + 0.935579 2.16434 -1.84469 0.631484 -0.184358 0.753153 + 0.919437 2.16131 -1.8375 0.220317 -0.289643 0.931433 + 0.960792 2.12263 -1.8924 0.961567 0.0367741 0.272098 + 0.950847 2.17345 -1.86696 0.952334 0.078585 0.294762 + 0.941871 2.20398 -1.85051 0.864669 0.319585 0.387574 + 0.938143 2.20116 -1.84379 0.770907 0.198926 0.605087 + 0.928933 2.19654 -1.83267 0.570529 0.0865833 0.816701 + 0.961027 2.12683 -1.90189 0.961423 0.236467 -0.140529 + 0.951062 2.17602 -1.8729 0.952518 0.289049 -0.0957081 + 0.942085 2.20654 -1.85644 0.861593 0.507321 0.0168428 + 0.933964 2.21393 -1.85105 0.553784 0.802768 0.221106 + 0.933822 2.2126 -1.84796 0.568285 0.691198 0.446428 + 0.954621 2.13217 -1.91341 0.83602 0.359056 -0.414908 + 0.944656 2.18136 -1.88442 0.823919 0.424527 -0.375412 + 0.938168 2.20966 -1.86371 0.752221 0.617217 -0.230665 + 0.930047 2.21705 -1.85831 0.501655 0.863752 0.0476899 + 0.919546 2.21771 -1.84761 0.17016 0.908978 0.380533 + 0.939173 2.14027 -1.93175 0.596336 0.471743 -0.649493 + 0.934578 2.18666 -1.89663 0.600289 0.538164 -0.591635 + 0.92809 2.21496 -1.87591 0.530881 0.721187 -0.445033 + 0.92459 2.21998 -1.86504 0.399588 0.909732 -0.112772 + 0.919726 2.21994 -1.85279 0.230901 0.918102 0.322139 + 0.921589 2.14313 -1.93873 0.160283 0.547275 -0.821462 + 0.916994 2.18952 -1.9036 0.145744 0.624578 -0.767242 + 0.917186 2.21677 -1.88024 0.148921 0.790319 -0.594321 + 0.913686 2.22178 -1.86936 0.0757486 0.95921 -0.272357 + 0.91427 2.22287 -1.85953 0.0940792 0.987495 0.1265 + 0.921799 2.08898 -1.96949 0.152714 0.451574 -0.879067 + 0.895116 2.14186 -1.93694 -0.317397 0.524734 -0.789881 + 0.899644 2.1887 -1.90242 -0.303831 0.602517 -0.73801 + 0.899835 2.21595 -1.87905 -0.299331 0.768468 -0.56556 + 0.904212 2.22133 -1.86872 -0.199345 0.946212 -0.254843 + 0.878996 2.13748 -1.92777 -0.715695 0.412176 -0.563818 + 0.883524 2.18432 -1.89326 -0.720061 0.473578 -0.507184 + 0.889857 2.21324 -1.87334 -0.648738 0.665584 -0.368968 + 0.894234 2.21862 -1.86301 -0.493346 0.868025 -0.0560627 + 0.904796 2.22242 -1.85888 -0.166693 0.975492 0.143627 + 0.873791 2.08192 -1.9556 -0.726092 0.332862 -0.601659 + 0.867014 2.12826 -1.90784 -0.927344 0.263403 -0.265803 + 0.875746 2.17829 -1.88002 -0.916976 0.323491 -0.233472 + 0.882079 2.20722 -1.8601 -0.844685 0.526049 -0.098896 + 0.890047 2.21531 -1.85573 -0.58156 0.804469 0.120906 + 0.861808 2.0727 -1.93566 -0.931239 0.210147 -0.29771 + 0.863574 2.12212 -1.8939 -0.991948 0.11335 0.056486 + 0.872306 2.17216 -1.86609 -0.983111 0.156341 0.0951378 + 0.879976 2.2035 -1.85141 -0.900921 0.392675 0.184789 + 0.887945 2.21159 -1.84705 -0.607071 0.725596 0.323999 + 0.856278 2.00783 -1.95922 -0.92024 0.289877 -0.262926 + 0.851627 1.99948 -1.94063 -0.979133 0.181526 0.0913567 + 0.857158 2.06436 -1.91706 -0.995731 0.0790079 0.0477189 + 0.860908 2.05907 -1.90378 -0.918356 -0.0549317 0.391925 + 0.867324 2.11682 -1.88062 -0.916341 -0.0511572 0.397118 + 0.835023 1.94841 -1.97634 -0.889433 0.443063 -0.112271 + 0.828373 1.92925 -1.96297 -0.891338 0.365361 0.268382 + 0.856237 1.99271 -1.92384 -0.900809 0.0466987 0.431696 + 0.869502 2.05395 -1.89061 -0.772457 -0.142099 0.618966 + 0.87367 2.11305 -1.87094 -0.775228 -0.154306 0.612545 + 0.874821 2.1688 -1.85752 -0.909935 -0.0128292 0.414553 + 0.807559 1.85914 -1.96219 -0.577743 0.604271 0.548698 + 0.818141 1.85194 -1.92974 0.302951 0.921965 -0.241248 + 0.836383 1.89708 -1.87436 0.831891 0.401223 -0.383376 + 0.791416 1.85339 -1.94798 0.123175 0.915019 -0.384146 + 0.818952 1.90443 -1.89258 0.632706 0.468125 -0.61688 + 0.807276 1.96045 -1.8583 0.58967 0.526938 -0.612067 + 0.792228 1.90588 -1.91082 0.284287 0.566471 -0.773493 + 0.789008 1.96341 -1.86688 0.25191 0.581649 -0.773451 + 0.792203 2.0188 -1.82125 0.585316 0.521297 -0.62101 + 0.804526 2.01368 -1.80835 0.832291 0.42969 -0.350226 + 0.76429 1.96284 -1.86876 -0.0581199 0.570618 -0.819156 + 0.756103 2.02117 -1.83105 -0.0623032 0.532735 -0.843986 + 0.773934 2.02176 -1.82983 0.232007 0.554454 -0.799221 + 0.766856 2.07537 -1.79551 0.234987 0.542396 -0.80659 + 0.779339 2.07346 -1.78972 0.581655 0.492699 -0.647245 + 0.748343 1.96032 -1.86717 -0.351489 0.51174 -0.783949 + 0.740157 2.01864 -1.82947 -0.34869 0.478313 -0.805998 + 0.738398 2.07332 -1.79576 -0.3372 0.500836 -0.797157 + 0.749025 2.07478 -1.79672 -0.0584302 0.537012 -0.841548 + 0.732204 2.0165 -1.82526 -0.708769 0.340289 -0.61794 + 0.730445 2.07118 -1.79156 -0.711328 0.378164 -0.592456 + 0.734966 2.1216 -1.76153 -0.69487 0.436483 -0.571522 + 0.739627 2.12288 -1.76388 -0.33169 0.539084 -0.774189 + 0.750255 2.12433 -1.76486 -0.0566549 0.562851 -0.824615 + 0.722661 2.01034 -1.81018 -0.909772 0.188637 -0.369772 + 0.724157 2.0669 -1.78166 -0.905764 0.242222 -0.347735 + 0.728679 2.11732 -1.75165 -0.897377 0.302976 -0.320811 + 0.73814 2.15072 -1.74126 -0.643105 0.654374 -0.397757 + 0.742801 2.152 -1.74362 -0.30661 0.74703 -0.589861 + 0.716837 2.05794 -1.76226 -0.997465 0.0599044 0.0384125 + 0.723833 2.11158 -1.73951 -0.989987 0.132896 0.0475782 + 0.72946 2.1422 -1.72349 -0.910106 0.37306 0.18037 + 0.734305 2.14794 -1.73562 -0.819941 0.542475 -0.182804 + 0.742707 2.15526 -1.73428 -0.426477 0.902393 -0.0616823 + 0.729803 2.1047 -1.72392 -0.820825 -0.109767 0.560533 + 0.733132 2.13791 -1.7138 -0.772121 0.169991 0.612318 + 0.735982 2.14919 -1.72174 -0.659354 0.699094 0.276622 + 0.738873 2.15246 -1.72863 -0.589454 0.80434 0.0747119 + 0.74713 2.13302 -1.70226 -0.527838 0.0644643 0.846895 + 0.747735 2.14211 -1.70547 -0.393081 0.478583 0.78514 + 0.739654 2.14489 -1.71206 -0.539771 0.510412 0.669423 + 0.741885 2.15134 -1.71689 -0.36697 0.80375 0.468315 + 0.744775 2.15462 -1.72378 -0.252655 0.930683 0.264564 + 0.755835 2.14043 -1.70129 -0.0906096 0.506884 0.857238 + 0.749965 2.14857 -1.71031 -0.15674 0.777761 0.608704 + 0.747427 2.15531 -1.72503 -0.100544 0.965803 0.238989 + 0.745359 2.15596 -1.73553 -0.209376 0.964792 -0.159177 + 0.749178 2.1527 -1.74422 -0.0701187 0.767268 -0.637482 + 0.754787 2.14898 -1.7107 -0.00569586 0.830362 0.557195 + 0.752249 2.15573 -1.72543 -0.0574738 0.966419 0.250462 + 0.751736 2.15664 -1.73613 -0.0661334 0.980626 -0.184387 + 0.760438 2.15313 -1.74346 0.20133 0.760372 -0.617495 + 0.761515 2.12477 -1.7641 0.228157 0.559199 -0.79702 + 0.758188 2.14939 -1.71139 -0.0235534 0.830253 0.556888 + 0.758594 2.15595 -1.72499 -0.0195186 0.970111 0.241873 + 0.758081 2.15687 -1.73569 0.0870593 0.979106 -0.183771 + 0.768046 2.15199 -1.74006 0.515266 0.704438 -0.488126 + 0.773998 2.12286 -1.75831 0.589916 0.494925 -0.638003 + 0.764689 2.14247 -1.70485 0.298738 0.537768 0.788392 + 0.762532 2.14923 -1.71048 0.0175476 0.755446 0.654976 + 0.762939 2.15581 -1.72408 0.0822876 0.974278 0.209788 + 0.765689 2.15572 -1.73229 0.331157 0.93556 -0.12273 + 0.768914 2.14442 -1.70824 0.461596 0.544316 0.700464 + 0.766757 2.15118 -1.71388 0.255066 0.808469 0.530396 + 0.767222 2.15404 -1.71959 0.269103 0.903174 0.334457 + 0.769972 2.15396 -1.7278 0.517533 0.855657 0.00326413 + 0.775713 2.14882 -1.73203 0.773721 0.592705 -0.223731 + 0.774245 2.13703 -1.70799 0.707927 0.19039 0.68014 + 0.777547 2.14042 -1.71443 0.855317 0.309276 0.415669 + 0.772216 2.14781 -1.71469 0.625895 0.616268 0.477985 + 0.772681 2.15067 -1.72039 0.647825 0.714857 0.263253 + 0.785294 2.10913 -1.72796 0.948142 0.0739607 0.309122 + 0.78617 2.11424 -1.73815 0.973838 0.226102 -0.0227383 + 0.778422 2.14553 -1.72462 0.884421 0.458702 0.0859739 + 0.791662 2.06835 -1.77682 0.846224 0.384069 -0.369317 + 0.781665 2.11969 -1.75026 0.844128 0.382453 -0.375736 + 0.885096 2.10931 -1.861 -0.492323 -0.25735 0.831498 + 0.881167 2.16503 -1.84784 -0.768296 -0.127721 0.627223 + 0.882491 2.20014 -1.84284 -0.83509 0.247449 0.491319 + 0.888481 2.16268 -1.84146 -0.49489 -0.237045 0.835998 + 0.886392 2.19788 -1.83688 -0.716074 0.154806 0.680641 + 0.889338 2.20981 -1.84245 -0.564553 0.650166 0.508492 + 0.900429 2.21687 -1.84642 -0.227003 0.894601 0.384914 + 0.903484 2.16126 -1.83738 -0.131675 -0.301653 0.944281 + 0.902948 2.19464 -1.82803 -0.136214 -0.00892645 0.990639 + 0.893706 2.19554 -1.83051 -0.451247 0.0485204 0.891079 + 0.89714 2.20628 -1.83307 -0.35182 0.48497 0.800642 + 0.893239 2.20754 -1.8365 -0.497469 0.577537 0.647283 + 0.918901 2.19468 -1.82816 0.222272 0.00112368 0.974984 + 0.915071 2.20537 -1.83064 0.14154 0.377498 0.915129 + 0.906382 2.20538 -1.83059 -0.0896858 0.381444 0.920031 + 0.925103 2.20724 -1.83516 0.448575 0.487065 0.749366 + 0.915728 2.21235 -1.83474 0.140901 0.72642 0.672653 + 0.907039 2.21236 -1.8347 -0.0912971 0.754418 0.650014 + 0.903138 2.21362 -1.83813 -0.218948 0.843849 0.489879 + 0.901823 2.2151 -1.84183 -0.204192 0.882249 0.424197 + 0.930094 2.20979 -1.84125 0.546616 0.568964 0.614403 + 0.920719 2.2149 -1.84083 0.242641 0.857192 0.454254 + 0.919404 2.21638 -1.84453 0.135654 0.921799 0.363159 + 0.900609 2.2191 -1.8516 -0.248187 0.91117 0.328896 + 0.889259 1.99131 -1.76266 -0.85481 0.344293 -0.388281 + 0.896173 2.04571 -1.73124 -0.852418 0.338285 -0.39868 + 0.902247 2.09678 -1.70099 -0.85347 0.353831 -0.382613 + 0.890487 2.03708 -1.71403 -0.98762 0.153378 -0.0328996 + 0.898535 2.0911 -1.6897 -0.982408 0.184851 -0.0265324 + 0.904856 2.12225 -1.67287 -0.914644 0.390943 0.102908 + 0.908567 2.12793 -1.68416 -0.78897 0.557867 -0.25751 + 0.915885 2.1311 -1.69088 -0.512878 0.679409 -0.524748 + 0.899657 2.08452 -1.67669 -0.944725 0.0221626 0.327113 + 0.905567 2.11812 -1.66483 -0.875972 0.252655 0.410899 + 0.912004 2.12616 -1.66256 -0.610862 0.59892 0.517825 + 0.911292 2.13029 -1.6706 -0.652341 0.709068 0.267719 + 0.913373 2.13348 -1.67694 -0.594521 0.803097 0.0397485 + 0.911034 2.11345 -1.65579 -0.71961 0.134254 0.681276 + 0.915061 2.12352 -1.65745 -0.509172 0.528733 0.679106 + 0.922753 2.12975 -1.66006 -0.159706 0.786187 0.596996 + 0.919695 2.13239 -1.66517 -0.249706 0.844514 0.473754 + 0.920523 2.13485 -1.67008 -0.222632 0.89424 0.38829 + 0.920864 2.121 -1.65233 -0.341149 0.497431 0.797609 + 0.928012 2.12912 -1.65881 -0.0659301 0.816484 0.573592 + 0.935932 2.13522 -1.67151 0.00962237 0.895916 0.44412 + 0.93676 2.13768 -1.67643 0.179858 0.948193 0.261878 + 0.922603 2.13803 -1.67642 -0.222073 0.957394 0.184606 + 0.92593 2.12005 -1.65015 -0.0114474 0.442266 0.896811 + 0.933078 2.12816 -1.65663 0.149333 0.700705 0.697648 + 0.943329 2.13249 -1.66584 0.335832 0.77314 0.538026 + 0.936824 2.12246 -1.65517 0.455469 0.349439 0.818804 + 0.947075 2.12678 -1.66438 0.588022 0.406693 0.699164 + 0.930782 2.13926 -1.67936 0.00629828 0.994425 0.105257 + 0.920691 2.13664 -1.68365 -0.368899 0.896251 -0.246268 + 0.928869 2.13787 -1.6866 -0.13089 0.93705 -0.323736 + 0 1.98306 -3.19152 -0.99528 -0.010888 0.0964296 + 0 1.9393 -3.21829 -0.940716 -0.259577 0.218341 + 0.011183 1.96532 -3.12314 -0.905221 -0.310724 0.289873 + 0.016252 1.92627 -3.17244 -0.857915 -0.416422 0.300957 + 0.025806 1.96262 -3.09556 -0.724444 -0.507575 0.466421 + 0.041291 1.9961 -3.05045 -0.764239 -0.356634 0.537355 + 0.011183 2.00908 -3.09637 -0.939303 -0.144079 0.311371 + 0.011587 2.07808 -3.08639 -0.980061 0.0792124 0.182224 + 0 2.00459 -3.23674 -0.973679 0.196861 -0.11487 + 0.016252 1.87696 -3.22971 -0.535559 -0.712149 0.453895 + 0.030875 1.92357 -3.14486 -0.461445 -0.77026 0.440191 + 0.066043 1.92622 -3.12427 -0.260557 -0.883968 0.388215 + 0.057187 1.95648 -3.06427 -0.507634 -0.703139 0.497899 + 0 1.88998 -3.27556 -0.875856 -0.426886 0.225044 + 0.026712 1.83793 -3.28811 -0.400048 -0.7914 0.46222 + 0.066636 1.89392 -3.21292 -0.0503872 -0.878531 0.475021 + 0.101804 1.89658 -3.19232 -0.126564 -0.917524 0.377002 + 0.120883 1.92386 -3.08813 -0.231901 -0.911108 0.340741 + 0.112028 1.95411 -3.02813 -0.359108 -0.787007 0.501659 + 0.026712 1.81199 -3.33312 -0.545924 -0.802074 0.242167 + 0.077097 1.85489 -3.27132 0.00157891 -0.826563 0.562842 + 0.120941 1.85754 -3.26589 -0.0603898 -0.839102 0.540611 + 0.122625 1.89529 -3.19047 -0.131006 -0.929045 0.345995 + 0 1.86404 -3.32057 -0.894591 -0.441082 0.0717885 + 0.033943 1.80588 -3.37903 -0.547599 -0.802874 -0.235647 + 0.083178 1.80368 -3.33461 -0.0615579 -0.92657 0.37105 + 0.127022 1.80633 -3.32918 -0.0079336 -0.904958 0.425426 + 0.141762 1.85626 -3.26403 -0.0875726 -0.841725 0.532757 + 0.149137 1.88864 -3.19486 -0.20373 -0.917412 0.341832 + 0.033943 1.8295 -3.41372 -0.500882 -0.310218 -0.808011 + 0.090409 1.79758 -3.38053 -0.08195 -0.966312 -0.243976 + 0.145802 1.79423 -3.3803 0.0072954 -0.980094 -0.198399 + 0.174726 1.80955 -3.3246 0.0311282 -0.915235 0.401715 + 0 1.88767 -3.35525 -0.96781 -0.142006 -0.207794 + 0.00609 1.89928 -3.38721 -0.721413 0.195641 -0.664295 + 0.049274 1.91604 -3.38694 -0.12575 0.450442 -0.883906 + 0.113252 1.82668 -3.4212 -0.0559755 -0.293479 -0.954325 + 0.168645 1.82333 -3.42097 0.0508069 -0.332007 -0.941908 + 0.193506 1.79745 -3.37572 0.0426891 -0.989388 -0.138884 + 0.00609 1.92264 -3.37029 -0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 -0.982417 0.118768 -0.144051 + 0.00609 1.93619 -3.35816 -0.981516 0.131151 -0.139377 + 0 1.92457 -3.32621 -0.981236 0.134574 -0.13808 + 0.00609 1.98847 -3.30463 -0.872749 0.354069 -0.336073 + 0 1.97685 -3.27268 -0.971776 0.195948 -0.13136 + 0.014034 2.05323 -3.24402 -0.843647 0.422991 -0.330663 + 0.036542 2.02576 -3.30766 -0.464882 0.588192 -0.661752 + 0.079725 2.04251 -3.30739 -0.194271 0.591029 -0.782907 + 0.128582 1.91321 -3.39442 -0.0139732 0.422247 -0.906373 + 0.014034 2.08098 -3.20808 -0.828285 0.472356 -0.301369 + 0.03972 2.11125 -3.19831 -0.630499 0.681409 -0.371689 + 0.044486 2.09052 -3.24705 -0.586181 0.630257 -0.509086 + 0.0805 2.12506 -3.23831 -0.419995 0.695904 -0.582513 + 0.136609 2.08013 -3.29146 -0.0614619 0.587716 -0.806729 + 0.011587 2.09962 -3.13161 -0.965461 0.260081 -0.0155791 + 0.023387 2.12143 -3.14955 -0.804061 0.549432 -0.227179 + 0.049073 2.1517 -3.13979 -0.614227 0.698253 -0.367652 + 0.075698 2.17553 -3.13363 -0.579977 0.716229 -0.388127 + 0.075734 2.14578 -3.18957 -0.59953 0.710085 -0.369247 + 0.037415 2.1504 -3.01405 -0.971596 0.0427349 0.232755 + 0.032105 2.15701 -3.05363 -0.966259 0.256482 0.0236783 + 0.043906 2.17882 -3.07158 -0.808726 0.533994 -0.246602 + 0.070733 2.20765 -3.06834 -0.58317 0.68184 -0.441595 + 0.097358 2.23148 -3.06218 -0.366643 0.790961 -0.489851 + 0.025536 2.06202 -3.04565 -0.906932 -0.11691 0.40473 + 0.051364 2.13434 -2.97331 -0.920072 -0.106101 0.377108 + 0.049685 2.20804 -2.96099 -0.976256 -0.0867732 0.198479 + 0.044375 2.21465 -3.00057 -0.9845 0.167476 -0.0520691 + 0.054531 2.22951 -3.02005 -0.785559 0.457976 -0.416119 + 0.055645 2.04904 -2.99974 -0.795289 -0.293652 0.530361 + 0.071744 2.11124 -2.94107 -0.816098 -0.270674 0.510607 + 0.081949 2.16734 -2.89318 -0.827892 -0.292275 0.478716 + 0.061569 2.19045 -2.92543 -0.923689 -0.18738 0.334195 + 0.048313 2.25119 -2.93151 -0.989208 -0.0356674 0.142113 + 0.080386 2.03729 -2.9747 -0.634606 -0.439718 0.63555 + 0.096485 2.0995 -2.91603 -0.5474 -0.489529 0.67876 + 0.102944 2.15383 -2.872 -0.574535 -0.483042 0.660742 + 0.082215 2.21407 -2.86212 -0.828354 -0.339528 0.44559 + 0.060198 2.2336 -2.89595 -0.923701 -0.222862 0.311625 + 0.072672 1.98996 -3.01916 -0.595095 -0.51768 0.614711 + 0.106336 2.03079 -2.95916 -0.425211 -0.539635 0.726629 + 0.119012 2.09512 -2.90956 -0.328898 -0.564679 0.756944 + 0.12547 2.14946 -2.86554 -0.317259 -0.597508 0.736431 + 0.098622 1.98346 -3.00363 -0.463877 -0.607233 0.645047 + 0.136479 2.02512 -2.9512 -0.311761 -0.53891 0.782547 + 0.149155 2.08945 -2.9016 -0.17283 -0.59087 0.788036 + 0.151331 2.14541 -2.85801 -0.195786 -0.639847 0.743144 + 0.122263 2.19353 -2.82877 -0.443179 -0.599339 0.666622 + 0.142878 1.95267 -3.0086 -0.270855 -0.804568 0.528496 + 0.129472 1.98201 -2.9841 -0.404392 -0.59007 0.698773 + 0.17514 2.01276 -2.94363 -0.165022 -0.532694 0.830063 + 0.182592 2.09 -2.89932 -0.0485238 -0.573594 0.817701 + 0.184768 2.14596 -2.85572 -0.0173365 -0.686329 0.727084 + 0.165125 1.94022 -3.02443 -0.0854405 -0.901983 0.423234 + 0.168133 1.96965 -2.97654 -0.132315 -0.700096 0.701682 + 0.20834 2.01122 -2.94405 0.088305 -0.57761 0.811523 + 0.215792 2.08846 -2.89973 0.123167 -0.550777 0.825515 + 0.147395 1.9172 -3.09252 -0.145158 -0.940262 0.307955 + 0.169656 1.91908 -3.08069 -0.0464452 -0.941227 0.334567 + 0.218463 1.93221 -3.04741 0.11532 -0.900849 0.418535 + 0.19038 1.9572 -2.99237 0.108938 -0.801353 0.588189 + 0.171053 1.8857 -3.18537 -0.182418 -0.926094 0.330263 + 0.193315 1.88757 -3.17354 -0.0469233 -0.936726 0.346904 + 0.222994 1.91107 -3.10367 0.0353866 -0.935889 0.350513 + 0.253433 1.93131 -3.06382 0.228484 -0.860089 0.456117 + 0.225351 1.9563 -3.00877 0.225062 -0.829787 0.510686 + 0.160705 1.86355 -3.24917 -0.156846 -0.878514 0.451235 + 0.182622 1.86061 -3.23967 -0.217331 -0.876959 0.428614 + 0.197347 1.8591 -3.23793 -0.0620503 -0.887299 0.457001 + 0.215573 1.88599 -3.1778 0.0195867 -0.932825 0.359796 + 0.193669 1.81684 -3.30973 -0.105814 -0.892904 0.437637 + 0.208394 1.81534 -3.30799 -0.10561 -0.894851 0.433692 + 0.219605 1.85752 -3.24219 -0.00433524 -0.875537 0.483132 + 0.248192 1.8816 -3.19291 0.0234285 -0.916136 0.400183 + 0.255613 1.90667 -3.11878 0.124299 -0.923002 0.364167 + 0.231561 1.80731 -3.31936 -0.058717 -0.932487 0.3564 + 0.242772 1.84949 -3.25356 -0.00824802 -0.863014 0.505113 + 0.272701 1.87554 -3.20482 -0.0106207 -0.898285 0.439285 + 0.285988 1.90476 -3.14008 0.233641 -0.858608 0.456294 + 0.283809 1.9294 -3.08511 0.452937 -0.767087 0.45434 + 0.235338 1.79851 -3.3656 0.090422 -0.988383 -0.122159 + 0.277517 1.8115 -3.30338 -0.0569388 -0.899895 0.432374 + 0.267281 1.84343 -3.26547 -0.0257778 -0.836133 0.547921 + 0.296138 1.86434 -3.22731 -0.0895534 -0.88083 0.464886 + 0.248572 1.81892 -3.40553 0.299515 -0.421536 -0.855919 + 0.281294 1.8027 -3.34962 0.216724 -0.970377 -0.106766 + 0.305358 1.81202 -3.29945 0.152238 -0.925993 0.345486 + 0.295121 1.84395 -3.26153 -0.101654 -0.821508 0.561062 + 0.206741 1.81786 -3.41565 0.143199 -0.441032 -0.885994 + 0.232151 1.89626 -3.39129 0.243695 0.511986 -0.823701 + 0.284143 1.82119 -3.39091 0.371882 -0.455109 -0.809061 + 0.31065 1.83131 -3.38534 0.511998 -0.299473 -0.805093 + 0.307801 1.81282 -3.34405 0.537248 -0.82021 -0.196521 + 0.194055 1.90173 -3.39661 0.12717 0.394011 -0.910266 + 0.267721 1.89853 -3.37668 0.307938 0.369786 -0.876603 + 0.310818 1.90591 -3.35837 0.334714 0.372684 -0.86549 + 0.327601 1.8476 -3.37092 0.758231 -0.144147 -0.635851 + 0.202082 2.06864 -3.29366 0.125529 0.556933 -0.821016 + 0.251458 2.05987 -3.28899 0.221157 0.542595 -0.810358 + 0.294555 2.06726 -3.27068 0.390434 0.56245 -0.728843 + 0.327769 1.9222 -3.34395 0.571264 0.376209 -0.729468 + 0.183074 2.18144 -3.21184 0.00165362 0.778244 -0.627959 + 0.23245 2.17267 -3.20717 0.232169 0.716735 -0.657562 + 0.267374 2.17265 -3.19234 0.426883 0.733695 -0.528642 + 0.293459 2.14228 -3.20248 0.625964 0.613739 -0.481138 + 0.329604 2.02374 -3.2783 0.659824 0.450233 -0.6016 + 0.137384 2.16267 -3.22238 -0.219062 0.743651 -0.63166 + 0.152461 2.19752 -3.16676 -0.210607 0.866301 -0.452954 + 0.197921 2.21078 -3.1575 0.0375035 0.889359 -0.455669 + 0.232845 2.21076 -3.14267 0.296118 0.873431 -0.386566 + 0.106772 2.17875 -3.1773 -0.427461 0.790057 -0.439417 + 0.106736 2.2085 -3.12135 -0.426032 0.811318 -0.400325 + 0.138848 2.22171 -3.11437 -0.234384 0.886546 -0.398873 + 0.184307 2.23498 -3.10511 -0.00357815 0.932072 -0.362256 + 0.120311 2.23474 -3.06283 -0.193911 0.860723 -0.470697 + 0.152423 2.24796 -3.05585 -0.14364 0.885115 -0.44265 + 0.181421 2.25134 -3.04883 0.0985539 0.90078 -0.422945 + 0.224477 2.24728 -3.03716 0.298593 0.866268 -0.400528 + 0.227363 2.23092 -3.09344 0.299926 0.908853 -0.28988 + 0.104256 2.26771 -3.01851 -0.22022 0.666688 -0.71206 + 0.127209 2.27097 -3.01915 -0.0826443 0.674335 -0.733786 + 0.154284 2.27313 -3.01843 0.01283 0.70368 -0.710401 + 0.183282 2.27651 -3.01141 0.176401 0.660773 -0.729563 + 0.219971 2.27262 -3.00065 0.356232 0.630064 -0.690013 + 0.081358 2.25834 -3.01682 -0.384387 0.596691 -0.704419 + 0.077574 2.29006 -2.99257 -0.298043 0.685559 -0.664213 + 0.100472 2.29943 -2.99426 -0.264599 0.717063 -0.644832 + 0.123349 2.30196 -2.99864 -0.127208 0.703607 -0.69911 + 0.150424 2.30412 -2.99792 0.00570241 0.713725 -0.700403 + 0.058636 2.28719 -2.9876 -0.646188 0.564057 -0.514082 + 0.070556 2.34854 -2.89817 -0.609092 0.714759 -0.343694 + 0.089494 2.35141 -2.90314 -0.22653 0.849564 -0.476367 + 0.107449 2.35357 -2.90688 -0.199395 0.858703 -0.472091 + 0.048481 2.27233 -2.96812 -0.968842 0.220467 -0.112871 + 0.062361 2.3388 -2.8813 -0.945728 0.322515 -0.0397923 + 0.096877 2.42714 -2.74869 -0.576003 0.758634 -0.304459 + 0.110532 2.42881 -2.75158 -0.19695 0.880716 -0.430755 + 0.128487 2.43097 -2.75532 -0.176351 0.883779 -0.433398 + 0.062194 2.31767 -2.84469 -0.986202 0.0171115 0.164661 + 0.088662 2.40411 -2.7088 -0.985079 0.0213175 0.170777 + 0.088682 2.4174 -2.73182 -0.942924 0.33246 -0.0190805 + 0.116132 2.49623 -2.61905 -0.572733 0.752949 -0.324105 + 0.071664 2.30111 -2.81601 -0.923915 -0.211881 0.318571 + 0.098132 2.38756 -2.68012 -0.907022 -0.257442 0.333218 + 0.110491 2.47681 -2.5854 -0.984614 -0.00297979 0.17472 + 0.110511 2.49009 -2.60842 -0.939902 0.339566 -0.0357608 + 0.093681 2.28158 -2.78219 -0.821189 -0.376285 0.429021 + 0.114185 2.37528 -2.65887 -0.79993 -0.415573 0.432911 + 0.133134 2.45403 -2.54596 -0.783163 -0.441784 0.437586 + 0.117082 2.4663 -2.56721 -0.903004 -0.268295 0.335562 + 0.127755 2.54203 -2.48539 -0.943685 0.184185 0.274834 + 0.103209 2.20056 -2.84094 -0.688975 -0.449882 0.56826 + 0.11137 2.27078 -2.76348 -0.679841 -0.514178 0.522912 + 0.131873 2.36449 -2.64017 -0.647215 -0.556778 0.520683 + 0.145322 2.44721 -2.53414 -0.630956 -0.575294 0.520511 + 0.144697 2.52364 -2.45353 -0.793994 -0.260526 0.549272 + 0.130423 2.26376 -2.75131 -0.499731 -0.633473 0.590746 + 0.145505 2.36013 -2.63263 -0.472907 -0.660406 0.583287 + 0.158954 2.44285 -2.52659 -0.456109 -0.67579 0.579027 + 0.165601 2.51404 -2.43691 -0.47646 -0.51462 0.712848 + 0.156885 2.51682 -2.44171 -0.645485 -0.408996 0.645036 + 0.148124 2.18949 -2.82124 -0.326076 -0.658011 0.678746 + 0.15082 2.25873 -2.74261 -0.380528 -0.689831 0.615899 + 0.165902 2.35511 -2.62392 -0.360201 -0.705527 0.610317 + 0.172947 2.43967 -2.52109 -0.346157 -0.717571 0.604373 + 0.176551 2.18416 -2.81201 -0.151618 -0.726648 0.670071 + 0.179248 2.2534 -2.73338 -0.201631 -0.738453 0.643454 + 0.186376 2.35171 -2.61803 -0.186437 -0.748343 0.636572 + 0.193421 2.43627 -2.5152 -0.182371 -0.756111 0.62852 + 0.212844 2.14683 -2.85505 0.133067 -0.672037 0.728463 + 0.204628 2.18504 -2.81134 0.101424 -0.746688 0.657396 + 0.203814 2.25251 -2.73182 0.0662125 -0.761723 0.64451 + 0.210942 2.35081 -2.61647 0.0537737 -0.765219 0.64152 + 0.234516 2.1519 -2.85829 0.446414 -0.60538 0.658961 + 0.233398 2.18826 -2.81693 0.416562 -0.681186 0.602048 + 0.232584 2.25573 -2.73741 0.42393 -0.691837 0.584503 + 0.231537 2.35273 -2.61976 0.408628 -0.700848 0.584667 + 0.237464 2.09352 -2.90297 0.444641 -0.484327 0.753473 + 0.272273 2.10669 -2.92795 0.629365 -0.397285 0.667881 + 0.263892 2.16543 -2.87623 0.65527 -0.474676 0.587625 + 0.262774 2.2018 -2.83487 0.719145 -0.515406 0.466033 + 0.259031 2.26576 -2.75796 0.721058 -0.526535 0.450373 + 0.247373 2.01184 -2.95231 0.403912 -0.497653 0.767591 + 0.282181 2.02501 -2.97729 0.736136 -0.348947 0.579949 + 0.306553 2.13106 -2.94589 0.810757 -0.307662 0.498014 + 0.298173 2.1898 -2.89418 0.778725 -0.264114 0.569061 + 0.295555 2.2233 -2.87989 0.864391 -0.287674 0.412397 + 0.221486 1.96884 -2.98288 -0.484795 -0.751198 0.447968 + 0.260519 1.96946 -2.99115 0.370745 -0.762606 0.530075 + 0.28828 1.97721 -3.01739 0.724165 -0.508492 0.465854 + 0.326429 2.04764 -3.04775 0.88662 -0.239082 0.395909 + 0.278599 1.9612 -3.03327 0.439232 -0.799267 0.410181 + 0.306359 1.96895 -3.05951 0.729328 -0.544323 0.414479 + 0.332527 1.99984 -3.08785 0.891649 -0.243803 0.381474 + 0.342936 2.07228 -3.07681 0.985922 0.0249179 0.165339 + 0.32306 2.1557 -2.97495 0.978776 -0.0177249 0.204163 + 0.282463 1.94866 -3.05916 0.509809 -0.707417 0.489547 + 0.318694 1.96196 -3.09111 0.760424 -0.483414 0.433666 + 0.344862 1.99285 -3.11945 0.916704 -0.145094 0.372292 + 0.352907 2.03101 -3.14275 0.982521 0.0985971 0.157897 + 0.320039 1.9427 -3.11706 0.694908 -0.56921 0.439435 + 0.351305 1.97457 -3.14482 0.919293 -0.236531 0.314569 + 0.35935 2.01272 -3.16812 0.993852 0.081452 0.0749959 + 0.340334 2.07758 -3.14371 0.946487 0.321179 -0.0317194 + 0.330363 2.11885 -3.07778 0.956347 0.284882 -0.0651359 + 0.309425 1.89356 -3.16257 0.302947 -0.791075 0.531436 + 0.326539 1.90949 -3.16483 0.727698 -0.514849 0.453195 + 0.357805 1.94136 -3.1926 0.940288 -0.249177 0.23188 + 0.361012 1.96411 -3.22222 0.998481 0.0372942 -0.040564 + 0.346668 2.05602 -3.20424 0.937829 0.30651 -0.162877 + 0.331928 1.85133 -3.23751 0.306091 -0.812713 0.495788 + 0.349042 1.86726 -3.23978 0.870889 -0.358238 0.336477 + 0.353513 1.88831 -3.25743 0.985139 -0.119263 0.123603 + 0.35672 1.91106 -3.28705 0.989724 0.0466327 -0.135173 + 0.348331 2.00741 -3.25833 0.903131 0.287127 -0.319236 + 0.330911 1.83094 -3.27173 0.358215 -0.823468 0.43998 + 0.350931 1.84522 -3.28997 0.890751 -0.450789 0.0578904 + 0.355402 1.86627 -3.30763 0.98249 -0.123401 -0.139594 + 0.346496 1.90587 -3.32399 0.883539 0.195579 -0.425567 + 0.340923 1.83189 -3.29333 0.699523 -0.713746 0.0351388 + 0.345178 1.86107 -3.34457 0.892365 -0.124907 -0.433685 + 0.31537 1.81296 -3.32104 0.457845 -0.885437 -0.0798701 + 0.33517 1.84774 -3.34792 0.779244 -0.574442 -0.25059 + 0.328509 2.09876 -3.2101 0.790439 0.512685 -0.335203 + 0.322175 2.12033 -3.14958 0.90517 0.399851 -0.144176 + 0.30984 2.1579 -3.14358 0.821859 0.504243 -0.265115 + 0.308809 2.18477 -3.07768 0.825271 0.541897 -0.158983 + 0.321143 2.14719 -3.08367 0.94544 0.31208 -0.0935356 + 0.283755 2.18828 -3.13344 0.564403 0.765534 -0.308881 + 0.278273 2.20844 -3.08421 0.523013 0.809301 -0.267374 + 0.301868 2.21323 -3.00943 0.788454 0.563203 -0.247271 + 0.313911 2.189 -3.00771 0.924042 0.360955 -0.125928 + 0.323131 2.16066 -3.00182 0.971173 0.237335 -0.0222277 + 0.271332 2.2369 -3.01597 0.497154 0.772586 -0.394903 + 0.293166 2.25013 -2.96776 0.722421 0.469087 -0.508001 + 0.305209 2.2259 -2.96604 0.910251 0.363985 -0.197375 + 0.312744 2.21232 -2.94996 0.968041 0.247167 -0.0424808 + 0.266826 2.26223 -2.97946 0.488189 0.561875 -0.667808 + 0.284352 2.27957 -2.96062 0.639842 0.501999 -0.581893 + 0.29339 2.27383 -2.95069 0.848913 0.409085 -0.334657 + 0.300925 2.26025 -2.93461 0.947726 0.279217 -0.154444 + 0.312674 2.20736 -2.92309 0.977756 0.00806135 0.209591 + 0.220585 2.29972 -2.98628 0.340832 0.629452 -0.6983 + 0.258012 2.29166 -2.97232 0.450733 0.571723 -0.685546 + 0.275893 2.33922 -2.88201 0.595605 0.697231 -0.398904 + 0.28493 2.33348 -2.87208 0.817844 0.51008 -0.266364 + 0.292781 2.32328 -2.85759 0.923464 0.348876 -0.159686 + 0.183897 2.30362 -2.99704 0.150005 0.66498 -0.731642 + 0.218494 2.35289 -2.90569 0.273723 0.833447 -0.480043 + 0.255921 2.34483 -2.89174 0.393057 0.795372 -0.4614 + 0.270638 2.41874 -2.73413 0.562921 0.735598 -0.376851 + 0.154514 2.35691 -2.91266 -0.0158405 0.873646 -0.486305 + 0.187987 2.3564 -2.91177 0.111028 0.86511 -0.48914 + 0.223585 2.42948 -2.75274 0.250266 0.858612 -0.447385 + 0.250666 2.42435 -2.74386 0.366872 0.824302 -0.431198 + 0.130326 2.3561 -2.91125 -0.121138 0.870615 -0.476818 + 0.169028 2.43334 -2.75942 -0.0153648 0.892081 -0.451615 + 0.193077 2.43299 -2.75882 0.107115 0.884647 -0.45379 + 0.199087 2.50094 -2.6272 0.103591 0.878641 -0.466111 + 0.220089 2.49869 -2.62331 0.242581 0.856881 -0.454872 + 0.14484 2.43253 -2.75802 -0.106327 0.890275 -0.442837 + 0.175038 2.50128 -2.6278 -0.0138048 0.884837 -0.465695 + 0.181559 2.5606 -2.51754 -0.0126555 0.928296 -0.371626 + 0.196999 2.56038 -2.51717 0.0930237 0.922967 -0.373468 + 0.218001 2.55814 -2.51328 0.228898 0.905491 -0.35734 + 0.142106 2.49922 -2.62423 -0.168129 0.876718 -0.450663 + 0.158459 2.50078 -2.62693 -0.104242 0.882604 -0.458414 + 0.16498 2.56009 -2.51667 -0.100165 0.926753 -0.362072 + 0.183906 2.58021 -2.44528 -0.0294621 0.993425 0.110624 + 0.199345 2.58 -2.44491 0.0828306 0.991592 0.0994189 + 0.129787 2.4979 -2.62194 -0.188868 0.874047 -0.447627 + 0.154506 2.55909 -2.51493 -0.155421 0.923938 -0.349547 + 0.173431 2.57921 -2.44353 -0.0786497 0.987 0.140158 + 0.16462 2.56961 -2.42691 -0.558005 0.570445 0.60268 + 0.133396 2.55673 -2.51085 -0.535557 0.814656 -0.222517 + 0.142187 2.55777 -2.51265 -0.171673 0.92269 -0.345211 + 0.16464 2.57817 -2.44174 -0.418282 0.882038 0.216908 + 0.127775 2.55059 -2.50022 -0.879124 0.471016 0.0726969 + 0.134346 2.53153 -2.4672 -0.892653 -0.089424 0.441785 + 0.174971 2.56172 -2.41324 -0.449944 0.386282 0.805194 + 0.196838 2.55676 -2.40464 -0.0523309 0.265583 0.962667 + 0.225304 2.56665 -2.42497 0.590286 0.572147 0.569395 + 0.220791 2.57447 -2.43529 0.403568 0.859036 0.314943 + 0.216786 2.57669 -2.43918 0.243009 0.959452 0.142824 + 0.183688 2.55895 -2.40844 -0.287777 0.310995 0.905796 + 0.192744 2.50868 -2.4276 -0.194902 -0.596464 0.778617 + 0.2096 2.50807 -2.42651 0.0609267 -0.5966 0.800222 + 0.21004 2.55797 -2.4067 0.321175 0.359835 0.875994 + 0.179594 2.51086 -2.4314 -0.360888 -0.562538 0.743849 + 0.210276 2.43566 -2.51411 0.0515216 -0.769203 0.636925 + 0.222802 2.50928 -2.42857 0.410237 -0.503183 0.7606 + 0.230871 2.43758 -2.5174 0.396325 -0.701317 0.592521 + 0.249046 2.4439 -2.53038 0.68725 -0.545273 0.479963 + 0.240977 2.5156 -2.44155 0.720232 -0.307771 0.621725 + 0.256241 2.52427 -2.45982 0.873291 -0.109277 0.474786 + 0.263116 2.53481 -2.47807 0.942119 0.269204 0.199852 + 0.257984 2.36276 -2.64031 0.700476 -0.545316 0.460395 + 0.272686 2.45737 -2.55869 0.88059 -0.32745 0.342545 + 0.281624 2.37623 -2.66861 0.880159 -0.35035 0.320274 + 0.291723 2.39286 -2.69742 0.996291 0.0757537 0.0407992 + 0.279561 2.46791 -2.57694 0.993548 0.0884857 0.0709342 + 0.258603 2.54263 -2.4884 0.828547 0.559805 -0.0113391 + 0.291812 2.28726 -2.80297 0.895909 -0.322015 0.306028 + 0.301912 2.30389 -2.83178 0.996739 0.0627705 0.0506977 + 0.284832 2.40503 -2.71352 0.910551 0.381245 -0.159843 + 0.27267 2.48008 -2.59304 0.895134 0.419879 -0.14979 + 0.310056 2.24086 -2.9088 0.997111 0.056401 0.0508826 + 0.276981 2.41524 -2.72802 0.795297 0.548125 -0.258963 + 0.267232 2.48651 -2.60215 0.779501 0.573323 -0.252347 + 0.260889 2.49002 -2.60827 0.546615 0.748691 -0.375064 + 0.24916 2.55128 -2.50139 0.509127 0.820271 -0.260664 + 0.253165 2.54906 -2.4975 0.717119 0.686213 -0.121872 + 0.247171 2.49356 -2.61442 0.354357 0.827964 -0.434635 + 0.235442 2.55483 -2.50754 0.327443 0.884803 -0.331518 + 0.851447 0.667225 -3.01935 0.318816 -0.903238 -0.287258 + 0.869612 0.679716 -3.01335 0.820938 -0.567324 0.0648372 + 0.864359 0.676199 -3.00349 0.69588 -0.578278 0.425847 + 0.870874 0.684691 -3.02581 0.789372 -0.543081 -0.286279 + 0.8803 0.712776 -3.01494 0.944125 -0.288983 0.158482 + 0.872875 0.707806 -3.00101 0.774018 -0.30433 0.555229 + 0.846194 0.663707 -3.00949 0.210564 -0.976555 0.0447499 + 0.820959 0.673984 -3.02855 -0.422815 -0.775235 -0.469295 + 0.829948 0.675789 -3.03512 -0.171502 -0.756667 -0.630905 + 0.843098 0.674141 -3.03424 0.0384074 -0.784413 -0.619048 + 0.848286 0.671955 -3.03015 0.20868 -0.833725 -0.511229 + 0.852695 0.673826 -2.99489 0.408041 -0.55183 0.727314 + 0.838616 0.673413 -2.9905 0.194177 -0.541105 0.818231 + 0.832115 0.663293 -3.0051 -0.0671604 -0.987652 0.141536 + 0.861211 0.705433 -2.99241 0.469274 -0.289306 0.834317 + 0.841311 0.704848 -2.9862 0.220978 -0.267279 0.937939 + 0.829896 0.705212 -2.98435 -0.077535 -0.248857 0.965432 + 0.827201 0.673775 -2.98865 -0.11899 -0.537847 0.834603 + 0.827276 0.664309 -3.00642 -0.317975 -0.947168 0.0420103 + 0.889696 0.781507 -2.97762 0.762165 -0.364953 0.53471 + 0.871462 0.777799 -2.96418 0.445755 -0.408123 0.796704 + 0.851562 0.777212 -2.95797 0.210513 -0.411461 0.886783 + 0.897121 0.78648 -2.99155 0.94341 -0.276691 0.182812 + 0.923644 0.903215 -2.94988 0.945482 -0.26884 0.183818 + 0.91125 0.894913 -2.92662 0.754541 -0.378117 0.536372 + 0.893016 0.891206 -2.91318 0.448379 -0.439797 0.778161 + 0.899094 0.794259 -3.01104 0.97018 -0.174067 -0.168677 + 0.925618 0.910994 -2.96936 0.976833 -0.151923 -0.150722 + 0.948089 1.0292 -2.93081 0.982228 -0.13104 -0.134372 + 0.945272 1.01735 -2.90117 0.951211 -0.234074 0.201014 + 0.932878 1.00905 -2.87791 0.790174 -0.366975 0.490871 + 0.881562 0.717753 -3.02741 0.947249 -0.24901 -0.201777 + 0.894626 0.800945 -3.02631 0.902356 -0.0911452 -0.421244 + 0.918159 0.922154 -2.99485 0.911002 -0.0636841 -0.407455 + 0.94063 1.04036 -2.9563 0.938728 -0.0819218 -0.334782 + 0.867713 0.689422 -3.03662 0.685388 -0.5203 -0.509442 + 0.877095 0.72444 -3.04267 0.859736 -0.209409 -0.465835 + 0.886751 0.807467 -3.04036 0.75314 -0.0109769 -0.657768 + 0.910284 0.928679 -3.0089 0.764004 0.0181506 -0.644956 + 0.932832 1.0504 -2.97894 0.812524 -0.0100643 -0.58284 + 0.862675 0.693595 -3.0456 0.533849 -0.493039 -0.686963 + 0.872057 0.728612 -3.05166 0.701856 -0.167027 -0.692459 + 0.864723 0.731701 -3.05745 0.413359 -0.105228 -0.904467 + 0.879417 0.810558 -3.04614 0.465475 0.0842015 -0.881047 + 0.898042 0.933835 -3.01856 0.474358 0.118234 -0.872356 + 0.857487 0.695782 -3.0497 0.296759 -0.452413 -0.840985 + 0.846422 0.698094 -3.0527 0.077843 -0.423482 -0.902554 + 0.853658 0.734015 -3.06045 0.154806 -0.063675 -0.985891 + 0.86212 0.814174 -3.05083 0.183754 0.143665 -0.972417 + 0.833272 0.699745 -3.05357 -0.107014 -0.398356 -0.910967 + 0.835072 0.736347 -3.06168 -0.0967604 -0.0342941 -0.994717 + 0.843533 0.816506 -3.05207 -0.0783359 0.171052 -0.982143 + 0.849719 0.941343 -3.02531 -0.0830815 0.203479 -0.975548 + 0.880745 0.937452 -3.02325 0.191597 0.174301 -0.965873 + 0.819914 0.699651 -3.05013 -0.37952 -0.37678 -0.844986 + 0.821714 0.736253 -3.05825 -0.4175 -0.0164593 -0.908528 + 0.822651 0.81636 -3.04669 -0.4336 0.172664 -0.884408 + 0.810925 0.697845 -3.04357 -0.669432 -0.359414 -0.650141 + 0.809008 0.733702 -3.04896 -0.761481 -0.0171776 -0.64796 + 0.809946 0.813808 -3.03741 -0.778167 0.123668 -0.615762 + 0.807629 0.936939 -3.00444 -0.789425 0.144693 -0.59655 + 0.828837 0.941197 -3.01994 -0.43045 0.202061 -0.879707 + 0.804799 0.693068 -3.03042 -0.872678 -0.351701 -0.338731 + 0.802882 0.728925 -3.03582 -0.957643 -0.0363178 -0.285658 + 0.800369 0.806341 -3.01686 -0.969461 0.0372871 -0.242394 + 0.803635 0.686956 -3.0152 -0.92744 -0.370181 -0.0531234 + 0.801237 0.720285 -3.01431 -0.99601 -0.0639219 0.0622794 + 0.798724 0.797702 -2.99535 -0.996103 -0.0539146 0.069792 + 0.795305 0.91505 -2.94799 -0.995219 -0.0570797 0.0792543 + 0.798052 0.929471 -2.98389 -0.969257 0.0522117 -0.240448 + 0.819794 0.667873 -3.01333 -0.486103 -0.860276 -0.15372 + 0.807446 0.681117 -3.00185 -0.834553 -0.416012 0.361185 + 0.805048 0.714447 -3.00096 -0.881252 -0.124895 0.455846 + 0.804682 0.788575 -2.97448 -0.872765 -0.186694 0.451028 + 0.814927 0.677555 -2.99494 -0.659907 -0.466328 0.589118 + 0.815622 0.709411 -2.99118 -0.65473 -0.166237 0.737356 + 0.815256 0.783538 -2.96471 -0.665398 -0.278073 0.692763 + 0.818915 0.897514 -2.9108 -0.665063 -0.307959 0.680333 + 0.801264 0.905924 -2.92711 -0.874384 -0.202992 0.440735 + 0.822361 0.674792 -2.98997 -0.462891 -0.501642 0.730813 + 0.823056 0.706647 -2.98622 -0.458703 -0.203063 0.865076 + 0.826877 0.779219 -2.95694 -0.466963 -0.338022 0.817121 + 0.833718 0.777782 -2.95507 -0.0954386 -0.399931 0.911563 + 0.841954 0.890798 -2.89992 -0.0969014 -0.441116 0.892203 + 0.830536 0.893194 -2.90304 -0.470514 -0.373588 0.799405 + 0.836878 1.00552 -2.84532 -0.477814 -0.391402 0.786446 + 0.8192 1.01195 -2.85771 -0.672451 -0.319296 0.667728 + 0.859798 0.890231 -2.90282 0.202751 -0.452229 0.868551 + 0.875466 1.00218 -2.84643 0.200141 -0.477651 0.855449 + 0.848297 1.00313 -2.84221 -0.105753 -0.466369 0.878246 + 0.908684 1.00316 -2.85679 0.470976 -0.464217 0.750123 + 0.931966 1.11365 -2.80007 0.488923 -0.465928 0.737472 + 0.885064 1.11308 -2.78374 0.204333 -0.488674 0.848201 + 0.857895 1.11402 -2.77952 -0.139748 -0.468734 0.872215 + 0.95616 1.11954 -2.82119 0.869869 -0.337797 0.359473 + 0.971665 1.21119 -2.77979 0.891112 -0.313301 0.328271 + 0.944055 1.19838 -2.75499 0.5148 -0.458275 0.724545 + 0.897154 1.19781 -2.73866 0.200184 -0.475786 0.856478 + 0.960425 1.13325 -2.85572 0.981694 -0.184667 0.0466304 + 0.975929 1.22491 -2.81432 0.982269 -0.183722 0.0373476 + 0.988035 1.29495 -2.78707 0.984449 -0.169569 0.0458892 + 0.983141 1.28138 -2.74361 0.887274 -0.273865 0.371138 + 0.955531 1.26856 -2.7188 0.500711 -0.389928 0.772816 + 0.963241 1.14511 -2.88537 0.987696 -0.155803 0.0135023 + 0.978886 1.23475 -2.85543 0.983966 -0.178071 0.0100942 + 0.990991 1.30479 -2.82818 0.985617 -0.167205 0.0245254 + 1.0024 1.37945 -2.80967 0.985122 -0.168223 0.035168 + 0.998719 1.37202 -2.76552 0.985564 -0.147887 0.0824256 + 0.965306 1.15935 -2.92069 0.974438 -0.121203 -0.189156 + 0.98095 1.249 -2.89075 0.981216 -0.151818 -0.119026 + 0.991593 1.30264 -2.87929 0.983173 -0.146881 -0.108614 + 1.003 1.3773 -2.86079 0.988694 -0.0982873 -0.113239 + 0.957508 1.16939 -2.94333 0.884532 -0.0546885 -0.463262 + 0.973979 1.25621 -2.92398 0.908274 -0.0804567 -0.410566 + 0.984621 1.30985 -2.91253 0.9153 -0.069382 -0.396751 + 0.994655 1.36584 -2.89536 0.92607 -0.01737 -0.376951 + 0.94395 1.17894 -2.96344 0.635193 0.0479606 -0.770863 + 0.960421 1.26577 -2.94409 0.657157 0.014158 -0.753621 + 0.967627 1.31704 -2.93891 0.655652 0.0455098 -0.753691 + 0.977661 1.37303 -2.92174 0.726886 0.066789 -0.683503 + 0.920591 1.05555 -2.98861 0.523067 0.092324 -0.847276 + 0.893041 1.06284 -2.99979 0.250513 0.13904 -0.958077 + 0.916401 1.18623 -2.97462 0.331534 0.119403 -0.935857 + 0.923632 1.28072 -2.96087 0.333564 0.0919017 -0.938237 + 0.930838 1.33198 -2.95569 0.32228 0.100601 -0.941284 + 0.862015 1.06673 -3.00185 -0.0930138 0.149708 -0.984345 + 0.863031 1.19676 -2.98754 -0.0262476 0.142536 -0.989442 + 0.870262 1.29124 -2.97378 -0.0348798 0.14459 -0.988877 + 0.867606 1.36449 -2.96342 -0.0869442 0.168138 -0.981922 + 0.829019 1.06609 -2.99239 -0.466055 0.1694 -0.868387 + 0.830034 1.19612 -2.97807 -0.578483 0.123211 -0.806335 + 0.82689 1.29929 -2.95643 -0.622048 0.116936 -0.774198 + 0.824235 1.37254 -2.94607 -0.619418 0.136247 -0.773148 + 0.878915 1.42316 -2.95133 -0.0380619 0.219382 -0.974896 + 0.807811 1.06184 -2.97689 -0.804075 0.136537 -0.578637 + 0.803656 1.18343 -2.94072 -0.892393 0.0765409 -0.444721 + 0.800511 1.2866 -2.91908 -0.905135 0.056257 -0.421386 + 0.79373 1.37437 -2.89337 -0.91074 -0.00292007 -0.412971 + 0.794835 1.04874 -2.94176 -0.979457 0.0351137 -0.198571 + 0.79068 1.17034 -2.9056 -0.98229 0.0251107 -0.185674 + 0.787186 1.25993 -2.87321 -0.988512 -0.00607771 -0.151021 + 0.792088 1.03432 -2.90586 -0.995417 -0.0572252 0.0766229 + 0.789111 1.14932 -2.85386 -0.992042 -0.0730683 0.102535 + 0.785618 1.23892 -2.82147 -0.991297 -0.0667583 0.113465 + 0.785555 1.27293 -2.80579 -0.987158 -0.13056 0.0920463 + 0.780405 1.34771 -2.8475 -0.977326 -0.0775253 -0.197035 + 0.801549 1.02036 -2.87402 -0.869399 -0.215553 0.444615 + 0.798572 1.13536 -2.82202 -0.875234 -0.210778 0.43536 + 0.799455 1.2115 -2.78489 -0.864011 -0.211666 0.456818 + 0.823078 1.12337 -2.79861 -0.676623 -0.321179 0.66259 + 0.823961 1.19951 -2.76147 -0.680204 -0.303292 0.667336 + 0.826657 1.2436 -2.73972 -0.655104 -0.327709 0.680768 + 0.799393 1.24551 -2.7692 -0.852055 -0.262258 0.453015 + 0.840756 1.11695 -2.78622 -0.510907 -0.384712 0.768746 + 0.8458 1.19538 -2.74415 -0.512158 -0.366866 0.776598 + 0.848495 1.23947 -2.7224 -0.525255 -0.346325 0.777281 + 0.848341 1.31858 -2.68862 -0.427432 -0.373272 0.823389 + 0.814154 1.31359 -2.71211 -0.596345 -0.401894 0.694877 + 0.862939 1.19246 -2.73746 -0.151772 -0.451115 0.879466 + 0.86694 1.2398 -2.71272 -0.156535 -0.411 0.898096 + 0.866786 1.3189 -2.67895 -0.147481 -0.343734 0.927414 + 0.901155 1.24515 -2.71393 0.176547 -0.412627 0.893627 + 0.910615 1.32677 -2.68468 0.203045 -0.35524 0.912457 + 0.88467 1.4419 -2.63615 0.0975733 -0.29901 0.949248 + 0.823145 1.42055 -2.64281 -0.254054 -0.36839 0.894285 + 0.788958 1.41557 -2.6663 -0.658524 -0.357761 0.662083 + 0.964992 1.35018 -2.68955 0.541089 -0.285627 0.790974 + 0.928499 1.44977 -2.64188 0.372655 -0.23721 0.89714 + 0.993825 1.35845 -2.72205 0.911373 -0.171806 0.374007 + 0.969471 1.43614 -2.67626 0.68521 -0.154782 0.711709 + 0.971492 1.50371 -2.66235 0.686943 -0.0475973 0.725151 + 0.93052 1.51733 -2.62797 0.380104 0.0317999 0.924397 + 0.998304 1.44441 -2.70876 0.883783 -0.132819 0.44865 + 0.983836 1.51751 -2.67543 0.757126 0.0418961 0.651924 + 0.940298 1.55651 -2.64549 0.447017 0.349456 0.823442 + 0.912714 1.52633 -2.6262 -0.240188 0.318376 0.917031 + 1.01339 1.45412 -2.75603 0.978367 -0.121227 0.167636 + 1.01435 1.51286 -2.74407 0.982578 0.0926606 0.161106 + 0.999264 1.50315 -2.6968 0.879387 -0.0311814 0.475086 + 0.979896 1.57252 -2.68028 0.716569 0.396413 0.573922 + 0.952642 1.57031 -2.65857 0.464902 0.418634 0.780135 + 1.01708 1.46156 -2.80018 0.998404 -0.0315648 -0.0468365 + 1.0123 1.53068 -2.77243 0.967634 0.250998 -0.0261525 + 0.995324 1.55816 -2.70165 0.900846 0.277037 0.334255 + 0.993265 1.57599 -2.73001 0.866177 0.485478 0.118526 + 0.965057 1.60113 -2.69687 0.535909 0.752794 0.382234 + 1.01122 1.47018 -2.83495 0.973282 0.0795468 -0.215392 + 1.00644 1.53931 -2.8072 0.930777 0.311429 -0.191484 + 1.00287 1.45872 -2.86952 0.917485 0.0800331 -0.389635 + 0.990762 1.54811 -2.84422 0.841094 0.39288 -0.371762 + 0.983454 1.59551 -2.77394 0.794316 0.604476 -0.0605886 + 0.955245 1.62066 -2.7408 0.484304 0.859181 0.165101 + 0.937803 1.59891 -2.67516 0.247132 0.744325 0.620408 + 0.971629 1.40838 -2.92362 0.655861 0.129806 -0.743637 + 0.996841 1.49407 -2.87139 0.903119 0.203476 -0.378119 + 0.964448 1.56129 -2.87568 0.546169 0.541281 -0.639308 + 0.967775 1.60432 -2.81096 0.657387 0.695881 -0.289123 + 0.942147 1.39065 -2.9436 0.374446 0.141876 -0.91633 + 0.970527 1.50724 -2.90286 0.590546 0.324545 -0.738868 + 0.941046 1.48951 -2.92284 0.286459 0.288637 -0.913581 + 0.934877 1.53478 -2.90699 0.18499 0.476648 -0.85941 + 0.947043 1.59822 -2.84888 0.316259 0.758959 -0.569175 + 0.872747 1.46842 -2.93547 0.154293 0.365492 -0.917938 + 0.917472 1.57171 -2.88019 0.184943 0.609851 -0.770634 + 0.925879 1.62295 -2.81582 0.0718792 0.909705 -0.408988 + 0.946612 1.62905 -2.77789 0.371293 0.925037 -0.0802927 + 0.911681 1.62195 -2.7056 0.117381 0.907897 0.402425 + 0.854955 1.47201 -2.93872 0.0327013 0.263722 -0.964044 + 0.89968 1.5753 -2.88344 0.280801 0.555829 -0.782435 + 0.905845 1.6127 -2.8457 0.327695 0.84772 -0.417117 + 0.910225 1.62389 -2.80914 -0.0735407 0.960341 -0.268956 + 0.903047 1.63034 -2.7427 0.0882651 0.99462 0.054223 + 0.827063 1.478 -2.93291 -0.480537 0.0809781 -0.873228 + 0.863711 1.54912 -2.92 0.268319 0.380992 -0.884788 + 0.869875 1.58653 -2.88225 0.057822 0.809352 -0.584471 + 0.879614 1.62164 -2.78774 -0.187019 0.951832 -0.242983 + 0.883994 1.63283 -2.75118 -0.0812795 0.994301 -0.0689816 + 0.805951 1.4555 -2.91233 -0.744406 0.0263358 -0.667208 + 0.792252 1.56646 -2.87796 -0.642678 0.398049 -0.654616 + 0.812857 1.57691 -2.88462 -0.389562 0.605829 -0.693695 + 0.835818 1.55511 -2.91418 -0.324844 0.469796 -0.820834 + 0.850232 1.58508 -2.88458 -0.0153157 0.804865 -0.59326 + 0.775446 1.45734 -2.85964 -0.898482 -0.0583242 -0.435118 + 0.77114 1.54396 -2.85738 -0.81786 0.134304 -0.559524 + 0.775063 1.59265 -2.82945 -0.513242 0.749024 -0.418982 + 0.795668 1.6031 -2.83612 -0.345461 0.910066 -0.22899 + 0.827271 1.60687 -2.85503 -0.0618566 0.900525 -0.430381 + 0.768206 1.41808 -2.82947 -0.948919 -0.135946 -0.284729 + 0.746557 1.53971 -2.81573 -0.906071 0.00205724 -0.42312 + 0.73274 1.58453 -2.77975 -0.825055 0.557522 -0.0919416 + 0.757324 1.58878 -2.8214 -0.614104 0.647941 -0.450609 + 0.769096 1.59685 -2.77483 -0.114859 0.990661 0.0734657 + 0.773356 1.3433 -2.78776 -0.966627 -0.238336 -0.0939651 + 0.739316 1.50045 -2.78555 -0.944983 -0.133906 -0.298457 + 0.726742 1.56403 -2.75754 -0.931549 0.260433 0.253754 + 0.751357 1.59298 -2.76679 -0.240599 0.890541 0.386068 + 0.78689 1.3155 -2.7416 -0.840496 -0.346318 0.416689 + 0.765923 1.35168 -2.76479 -0.936364 -0.35089 0.00990299 + 0.731883 1.50883 -2.76259 -0.984198 -0.114301 -0.135238 + 0.733332 1.50676 -2.73257 -0.943657 -0.00553194 0.33088 + 0.745359 1.57248 -2.74458 -0.697359 0.536889 0.474806 + 0.75944 1.41539 -2.71442 -0.852801 -0.309414 0.420705 + 0.738473 1.45156 -2.73762 -0.96379 -0.19406 0.18289 + 0.741668 1.50855 -2.71809 -0.909563 0.0675171 0.410045 + 0.753695 1.57426 -2.7301 -0.816777 0.482081 0.316975 + 0.772282 1.59501 -2.73269 -0.30776 0.942392 0.131077 + 0.777016 1.48688 -2.64992 -0.745128 -0.120863 0.655879 + 0.747498 1.4867 -2.69804 -0.93 -0.0932768 0.355526 + 0.760085 1.57115 -2.69963 -0.771774 0.448889 0.450404 + 0.778672 1.5919 -2.70222 -0.355355 0.879471 0.316628 + 0.793833 1.59155 -2.73908 0.0471479 0.99863 0.0226985 + 0.79043 1.50192 -2.63522 -0.601224 0.0167222 0.798906 + 0.765915 1.5493 -2.67958 -0.838299 0.223582 0.497258 + 0.779329 1.56435 -2.66489 -0.6216 0.494891 0.607204 + 0.796501 1.58053 -2.67512 -0.124875 0.83979 0.528354 + 0.811174 1.5928 -2.7105 0.00448316 0.984772 0.17379 + 0.814638 1.48823 -2.62312 -0.301328 -0.130506 0.944547 + 0.801154 1.54689 -2.63927 -0.382496 0.43066 0.817453 + 0.876163 1.50957 -2.61646 0.122089 0.0101106 0.992468 + 0.825363 1.5332 -2.62717 -0.192875 0.325132 0.925791 + 0.818326 1.56307 -2.64951 0.0231986 0.761024 0.648309 + 0.829003 1.58143 -2.6834 0.139615 0.876151 0.461375 + 0.891883 1.52196 -2.6212 0.294532 0.437669 0.849528 + 0.841083 1.54559 -2.63191 0.0869169 0.673175 0.734357 + 0.854762 1.55527 -2.65968 0.246094 0.802935 0.542894 + 0.849585 1.5812 -2.68906 0.028948 0.799637 0.599785 + 0.828368 1.59373 -2.71497 -0.146724 0.943731 0.296383 + 0.906756 1.51837 -2.62531 0.241505 0.178512 0.953839 + 0.892392 1.53419 -2.64619 0.365591 0.808455 0.461241 + 0.877519 1.53779 -2.64208 0.3016 0.825909 0.476352 + 0.875344 1.55504 -2.66534 0.0528466 0.701093 0.711109 + 0.900577 1.5312 -2.64834 -0.139518 0.805828 0.575479 + 0.898192 1.53722 -2.65553 -0.107253 0.322486 0.940478 + 0.890007 1.54021 -2.65338 0.225765 0.663121 0.713653 + 0.882551 1.55726 -2.66602 -0.230452 0.497604 0.836231 + 0.855766 1.58495 -2.69256 -0.287616 0.642058 0.710661 + 0.906535 1.53917 -2.64923 -0.819228 0.0445195 0.571737 + 0.897214 1.54243 -2.65405 -0.345225 0.0770661 0.93535 + 0.894531 1.56815 -2.66602 -0.482399 0.359026 0.798994 + 0.867746 1.59585 -2.69256 -0.452473 0.486781 0.747203 + 0.905557 1.54438 -2.64776 -0.730401 0.130773 0.670383 + 0.922492 1.56551 -2.64372 -0.0548526 0.535001 0.843069 + 0.911465 1.58928 -2.66198 -0.213208 0.576573 0.788737 + 0.885343 1.61232 -2.69242 -0.270854 0.684834 0.676492 + 0.867521 1.62475 -2.71665 -0.380702 0.828308 0.411063 + 0.849924 1.60828 -2.71679 -0.566754 0.663429 0.488521 + 0.834549 1.59748 -2.71847 -0.444904 0.799796 0.402973 + 0.887393 1.63128 -2.73602 -0.00295766 0.9891 0.147214 + 0.864122 1.6263 -2.73181 -0.418768 0.898419 0.132196 + 0.834941 1.60577 -2.74159 -0.591739 0.774122 0.224898 + 0.819566 1.59496 -2.74326 -0.424025 0.889941 0.16795 + 0.811027 1.59247 -2.74355 -0.158013 0.985071 0.0683118 + 0.859971 1.62019 -2.79007 -0.00638076 0.975498 -0.219917 + 0.85349 1.62504 -2.76183 -0.225497 0.974133 0.0147131 + 0.824309 1.60451 -2.7716 -0.574778 0.802247 0.161339 + 0.811736 1.59684 -2.77495 -0.409385 0.900436 0.147034 + 0.82079 1.61174 -2.82678 -0.344921 0.935104 -0.0813087 + 0.808217 1.60406 -2.83014 -0.287445 0.956637 0.0471191 + 0.803196 1.59435 -2.77524 -0.197297 0.972608 0.122916 + 0.790647 1.59339 -2.78122 0.0407557 0.991065 0.127002 + -0.987946 0.54202 -2.82794 -0.314751 -0.758104 -0.571148 + -0.992571 0.541618 -2.82296 -0.569927 -0.754823 -0.324693 + -1.00242 0.583273 -2.8373 -0.815654 -0.202245 -0.542039 + -0.976634 0.541924 -2.83037 0.100624 -0.766488 -0.634327 + -0.994128 0.540551 -2.81285 -0.642338 -0.764717 0.0510794 + -1.00847 0.581138 -2.81623 -0.983805 -0.178851 -0.0118184 + -1.00691 0.582204 -2.82634 -0.943677 -0.181814 -0.276437 + -0.997797 0.583674 -2.84229 -0.571961 -0.227226 -0.788181 + -0.986215 0.583895 -2.84767 -0.304596 -0.252698 -0.918349 + -1.00283 0.663444 -2.84326 -0.835847 -0.00616028 -0.548928 + -0.994011 0.664209 -2.85276 -0.576813 0.0030646 -0.816871 + -0.98243 0.664431 -2.85815 -0.313747 0.00128624 -0.949506 + -0.974903 0.583799 -2.8501 0.0217153 -0.287315 -0.95759 + -1.00732 0.662375 -2.83229 -0.959787 -0.0229856 -0.279786 + -1.01479 0.756517 -2.81332 -0.95891 -0.0201159 -0.282998 + -1.00774 0.761453 -2.82961 -0.833612 0.0594109 -0.549146 + -0.998922 0.76222 -2.83911 -0.577752 0.132626 -0.805366 + -1.01029 0.66034 -2.81301 -0.998687 -0.0512168 -0.00136146 + -1.01776 0.754481 -2.79404 -0.994497 -0.10342 -0.0167141 + -1.03214 0.858538 -2.75211 -0.985839 -0.16284 -0.0400509 + -1.02803 0.86965 -2.77662 -0.948941 -0.0583881 -0.310003 + -1.02098 0.874586 -2.79292 -0.830327 0.0456073 -0.555407 + -1.0061 0.579608 -2.80309 -0.923809 -0.190563 0.332058 + -1.00792 0.65881 -2.79987 -0.938901 -0.0955369 0.330663 + -1.01401 0.748649 -2.77438 -0.929067 -0.20081 0.310661 + -1.00127 0.578569 -2.79511 -0.709695 -0.217832 0.669986 + -0.998712 0.656831 -2.78467 -0.70851 -0.156058 0.688229 + -1.0048 0.746669 -2.75918 -0.699229 -0.308102 0.645098 + -1.01553 0.844499 -2.71281 -0.693573 -0.408079 0.593657 + -1.02839 0.852705 -2.73245 -0.922258 -0.280452 0.266057 + -0.989302 0.539512 -2.80488 -0.405061 -0.796087 0.449633 + -0.987738 0.577242 -2.78706 -0.369587 -0.249088 0.895187 + -0.985181 0.655504 -2.77662 -0.378359 -0.202362 0.903269 + -0.983544 0.743223 -2.74693 -0.368515 -0.363068 0.855791 + -0.964997 0.54048 -2.8207 0.474206 -0.819737 -0.321187 + -0.965146 0.539398 -2.81088 0.491292 -0.86562 0.0966106 + -0.969837 0.538851 -2.80456 0.327982 -0.876319 0.352835 + -0.975509 0.538725 -2.80177 0.0185124 -0.842729 0.53802 + -0.958226 0.58268 -2.84484 0.432045 -0.335508 -0.837121 + -0.946589 0.581236 -2.83517 0.676192 -0.372969 -0.635342 + -0.93824 0.5794 -2.82101 0.867774 -0.417927 -0.268896 + -0.93839 0.578319 -2.81119 0.895972 -0.43483 0.0903149 + -0.944182 0.663127 -2.85751 0.467419 -0.0700287 -0.881258 + -0.921991 0.660374 -2.83908 0.74617 -0.123118 -0.654273 + -0.913643 0.658539 -2.82492 0.937074 -0.192651 -0.291167 + -0.96086 0.664247 -2.86277 0.0563659 -0.0250413 -0.998096 + -0.959166 0.764559 -2.85158 0.0537748 0.187621 -0.980768 + -0.932966 0.762391 -2.84343 0.485805 0.152339 -0.860689 + -0.910775 0.759637 -2.825 0.756753 0.0901468 -0.647456 + -0.980736 0.764743 -2.84695 -0.304099 0.179204 -0.935633 + -0.990514 0.882944 -2.81263 -0.30217 0.236289 -0.923505 + -0.960445 0.886619 -2.81796 0.0612607 0.275325 -0.959397 + -0.934244 0.884451 -2.80981 0.476268 0.247302 -0.843807 + -1.0087 0.88042 -2.8048 -0.569491 0.158833 -0.806506 + -1.02948 0.984916 -2.773 -0.513901 0.119045 -0.849549 + -0.999928 0.98995 -2.78141 -0.246516 0.216802 -0.944577 + -0.969859 0.993627 -2.78674 0.0678551 0.286352 -0.955719 + -1.04177 0.979082 -2.76111 -0.809357 -0.0504991 -0.585142 + -1.07819 1.07044 -2.72921 -0.786941 -0.0644471 -0.613653 + -1.05317 1.08021 -2.74869 -0.467517 0.108565 -0.877292 + -1.02362 1.08524 -2.75711 -0.136557 0.231771 -0.963138 + -1.05198 0.967463 -2.73606 -0.93176 -0.161194 -0.32533 + -1.0884 1.05881 -2.70415 -0.934144 -0.221527 -0.279822 + -1.1102 1.13024 -2.67529 -0.962788 -0.170737 -0.209495 + -1.09758 1.13993 -2.71023 -0.803817 -0.0485517 -0.592892 + -1.07256 1.1497 -2.72971 -0.451082 0.111016 -0.885551 + -1.05609 0.956349 -2.71154 -0.959942 -0.271394 -0.0696948 + -1.08784 1.03906 -2.65981 -0.927381 -0.334875 -0.1668 + -1.10964 1.11049 -2.63095 -0.973536 -0.159467 -0.1637 + -1.04433 0.934346 -2.68809 -0.884365 -0.395589 0.247806 + -1.07608 1.01706 -2.63636 -0.757746 -0.613392 -0.222645 + -1.10668 1.01755 -2.59929 -0.828392 -0.202933 -0.522097 + -1.11904 1.09943 -2.58885 -0.927921 -0.0735344 -0.365452 + -1.11888 1.17747 -2.60983 -0.982429 -0.141328 -0.121902 + -1.03147 0.926142 -2.66845 -0.694617 -0.511805 0.505532 + -1.03839 0.968117 -2.63106 -0.684226 -0.727598 0.0493492 + -1.0459 0.957702 -2.60835 -0.184515 -0.37947 -0.906618 + -1.0836 1.00664 -2.61366 -0.592849 -0.434478 -0.678056 + -0.999984 0.910055 -2.65635 -0.372424 -0.582502 0.72249 + -1.00689 0.95203 -2.61896 -0.331301 -0.938719 0.0951107 + -1.01399 0.943052 -2.6019 0.129016 -0.445886 -0.885743 + -1.04918 0.898729 -2.61392 -0.0529593 0.0569046 -0.996974 + -1.07173 0.899269 -2.60639 -0.405539 -0.00624258 -0.914056 + -0.994271 0.841053 -2.70056 -0.365717 -0.47914 0.797919 + -0.963302 0.907958 -2.64809 -0.151555 -0.634684 0.757764 + -0.968171 0.946924 -2.60376 0.0340642 -0.987818 0.151841 + -0.97527 0.937947 -2.5867 0.418812 -0.50291 -0.756094 + -1.01727 0.884079 -2.60747 0.307674 0.0320804 -0.950951 + -0.957588 0.838956 -2.6923 -0.118971 -0.495253 0.860564 + -0.935371 0.839004 -2.69171 0.208339 -0.498087 0.841727 + -0.930745 0.916726 -2.63758 0.198954 -0.67443 0.711028 + -0.935615 0.955693 -2.59324 0.395482 -0.858067 0.32759 + -0.957243 0.741721 -2.74101 -0.124383 -0.381788 0.915842 + -0.935026 0.741769 -2.74041 0.211622 -0.38868 0.896741 + -0.920299 0.842552 -2.6982 0.549024 -0.438814 0.711347 + -0.915673 0.920278 -2.64408 0.57365 -0.56935 0.588868 + -0.895865 0.994424 -2.56815 0.752412 -0.588411 0.296054 + -0.958881 0.654004 -2.7707 -0.120793 -0.232502 0.965066 + -0.944736 0.653521 -2.77047 0.216364 -0.27377 0.937143 + -0.924211 0.742007 -2.74573 0.54312 -0.34933 0.763537 + -0.973945 0.576454 -2.78396 -0.130357 -0.2819 0.950547 + -0.9598 0.575973 -2.78373 0.206821 -0.349201 0.913938 + -0.954129 0.576099 -2.78652 0.518299 -0.395967 0.758008 + -0.933921 0.65376 -2.77579 0.54817 -0.289151 0.784793 + -0.91239 0.745039 -2.75548 0.723318 -0.306289 0.618869 + -0.946598 0.576588 -2.79314 0.686164 -0.416993 0.596068 + -0.92639 0.654249 -2.78241 0.720128 -0.286822 0.631783 + -0.903445 0.746082 -2.76754 0.884646 -0.241201 0.399029 + -0.896025 0.852877 -2.72309 0.891074 -0.267069 0.366963 + -0.908478 0.845585 -2.70795 0.727199 -0.366495 0.580398 + -0.941907 0.577135 -2.79946 0.819992 -0.429957 0.377822 + -0.917445 0.655293 -2.79446 0.875863 -0.274623 0.396796 + -0.897932 0.751349 -2.78499 0.98174 -0.150554 0.116279 + -0.913927 0.656476 -2.8062 0.962182 -0.246831 0.11524 + -0.897648 0.753411 -2.80372 0.961171 -0.0370835 -0.273451 + -0.890144 0.868814 -2.76442 0.960253 0.0147177 -0.278741 + -0.890512 0.858144 -2.74054 0.983523 -0.144417 0.108748 + -0.903272 0.875039 -2.78571 0.760855 0.163609 -0.627959 + -0.896103 0.980307 -2.74972 0.735065 0.154117 -0.660248 + -0.877059 0.968103 -2.72052 0.9489 -0.0632538 -0.309173 + -0.877426 0.957433 -2.69664 0.977035 -0.203195 0.0641377 + -0.885224 0.944204 -2.66774 0.895272 -0.314113 0.315945 + -0.927075 0.98972 -2.77383 0.483844 0.279546 -0.829306 + -0.929983 1.08219 -2.74118 0.396745 0.276298 -0.875359 + -0.870745 1.07144 -2.71135 0.692486 0.143328 -0.707051 + -0.8517 1.05924 -2.68214 0.973654 -0.115735 -0.196477 + -0.972767 1.0861 -2.75409 0.18173 0.303736 -0.935264 + -0.982147 1.15875 -2.73476 0.176171 0.238138 -0.95512 + -0.92431 1.14823 -2.71871 0.39196 0.236135 -0.889161 + -0.865072 1.13749 -2.68888 0.675691 0.15232 -0.721276 + -1.033 1.1579 -2.73778 -0.0890978 0.208882 -0.973874 + -1.04063 1.20456 -2.72877 -0.0802344 0.17825 -0.980709 + -0.985439 1.21494 -2.72337 0.171817 0.205438 -0.96347 + -0.927602 1.20442 -2.70733 0.379789 0.193926 -0.904518 + -1.08019 1.19637 -2.72071 -0.446707 0.1081 -0.888125 + -1.05709 1.25883 -2.71753 -0.13398 0.195056 -0.971598 + -1.0019 1.26921 -2.71213 0.0225795 0.210716 -0.977286 + -0.984992 1.30116 -2.70562 0.140018 0.185003 -0.972712 + -1.10738 1.18459 -2.69952 -0.805599 -0.0198727 -0.592128 + -1.11733 1.24921 -2.68462 -0.794659 0.0311664 -0.606255 + -1.09014 1.26099 -2.7058 -0.485336 0.12697 -0.865059 + -1.07067 1.34969 -2.69638 -0.180003 0.238498 -0.954315 + -1.05377 1.38164 -2.68987 -0.106737 0.242077 -0.964368 + -1.12001 1.17491 -2.66458 -0.972212 -0.163175 -0.167862 + -1.13216 1.23954 -2.65219 -0.974899 -0.0986769 -0.199586 + -1.12611 1.3255 -2.66586 -0.836427 0.12502 -0.533629 + -1.10373 1.35185 -2.68466 -0.564978 0.229499 -0.792546 + -1.13103 1.2421 -2.59744 -0.966651 -0.194082 -0.167089 + -1.14094 1.31582 -2.63344 -0.948642 0.019755 -0.315733 + -1.12174 1.38945 -2.64227 -0.842108 0.353837 -0.407005 + -1.09936 1.4158 -2.66107 -0.672427 0.52691 -0.519815 + -1.07108 1.41769 -2.67773 -0.276262 0.482141 -0.831396 + -1.14208 1.23005 -2.55351 -0.871477 -0.182165 -0.45535 + -1.15182 1.31268 -2.59848 -0.95788 -0.0562028 -0.281614 + -1.14786 1.37391 -2.57907 -0.920862 0.340431 -0.190051 + -1.13698 1.37706 -2.61403 -0.904803 0.30131 -0.300904 + -1.12827 1.16642 -2.56773 -0.916539 -0.061185 -0.395238 + -1.16281 1.20696 -2.51987 -0.92866 -0.141896 -0.342717 + -1.16287 1.30063 -2.55454 -0.953061 -0.0623715 -0.296284 + -1.14901 1.14333 -2.53409 -0.931537 -0.0856704 -0.353411 + -1.16746 1.19466 -2.47423 -0.981166 -0.192589 -0.0149439 + -1.17659 1.27611 -2.50215 -0.980289 -0.0477509 -0.191711 + -1.17577 1.33363 -2.48915 -0.97345 0.196955 -0.116637 + -1.16205 1.35816 -2.54154 -0.934091 0.318295 -0.16175 + -1.13759 1.0955 -2.55319 -0.933664 -0.0882777 -0.347099 + -1.14487 1.08771 -2.51268 -0.982363 -0.17545 -0.0646565 + -1.15628 1.13553 -2.49358 -0.979493 -0.197892 -0.0378522 + -1.16203 1.19729 -2.42483 -0.96313 -0.212242 0.165327 + -1.18124 1.2638 -2.45652 -0.995258 -0.0882707 0.0408512 + -1.12524 1.01362 -2.56363 -0.932185 -0.114105 -0.343527 + -1.13119 1.0094 -2.5323 -0.985767 -0.153511 -0.0685375 + -1.14009 1.08092 -2.46934 -0.968452 -0.216815 0.122851 + -1.15085 1.13817 -2.44417 -0.960275 -0.239364 0.143447 + -1.09481 0.910179 -2.59202 -0.704523 -0.0747894 -0.705729 + -1.10833 0.908268 -2.57246 -0.913468 -0.0840931 -0.398127 + -1.11428 0.904054 -2.54113 -0.991308 -0.12334 -0.0457847 + -1.12641 1.00262 -2.48896 -0.966953 -0.200898 0.156975 + -1.13367 1.07878 -2.43703 -0.929554 -0.265516 0.255794 + -1.08755 0.812336 -2.59548 -0.716041 0.0111244 -0.697969 + -1.10107 0.810427 -2.57592 -0.918004 -0.0165467 -0.396226 + -1.10538 0.80779 -2.55604 -0.997308 -0.0511498 -0.052539 + -1.11079 0.899823 -2.51437 -0.972073 -0.15423 0.176883 + -1.07207 0.812925 -2.60711 -0.464603 0.0257185 -0.885145 + -1.08934 0.722745 -2.59886 -0.72634 0.0638837 -0.68436 + -1.09904 0.721375 -2.58483 -0.919626 0.0253502 -0.391975 + -1.10334 0.71874 -2.56495 -0.998755 -0.0314128 -0.0387619 + -1.10189 0.803559 -2.52927 -0.964486 -0.0998696 0.244527 + -1.04952 0.812386 -2.61464 -0.0957679 0.0246049 -0.9951 + -1.05769 0.722945 -2.61589 -0.11051 0.0712287 -0.991319 + -1.07386 0.723332 -2.61049 -0.464771 0.0795255 -0.881852 + -1.07647 0.635409 -2.62083 -0.465279 0.146974 -0.872877 + -1.08626 0.635036 -2.61347 -0.722362 0.10618 -0.683315 + -1.02754 0.810431 -2.61238 0.256405 0.00952811 -0.966522 + -1.03571 0.720992 -2.61362 0.265148 0.0393083 -0.963406 + -1.0464 0.633785 -2.62479 0.26744 0.132617 -0.954405 + -1.0603 0.635021 -2.62623 -0.0989332 0.158532 -0.982385 + -0.998872 0.806418 -2.59956 0.546377 -0.037292 -0.836709 + -1.01516 0.718116 -2.60443 0.548501 -0.00795568 -0.836112 + -1.02585 0.630909 -2.6156 0.561694 0.0751344 -0.823927 + -0.988605 0.880068 -2.59465 0.48462 -0.0115258 -0.874649 + -0.982965 0.80307 -2.58489 0.797365 -0.1232 -0.590789 + -0.999249 0.714768 -2.58976 0.818729 -0.0850094 -0.567853 + -1.01579 0.628792 -2.60633 0.824133 -0.0222502 -0.565959 + -1.04 0.546065 -2.63712 0.544353 -0.00889895 -0.838809 + -0.946387 0.944402 -2.56808 0.641839 -0.436344 -0.630593 + -0.959722 0.886523 -2.57604 0.732243 -0.142287 -0.666014 + -0.974575 0.799283 -2.56353 0.934766 -0.196028 -0.296286 + -0.993234 0.71205 -2.57445 0.945974 -0.146481 -0.289268 + -1.00978 0.626076 -2.59102 0.952396 -0.113574 -0.282919 + -0.906638 0.983132 -2.54299 0.872801 -0.483719 -0.0650645 + -0.951332 0.882736 -2.55468 0.919928 -0.28694 -0.267203 + -0.971928 0.796861 -2.54853 0.971119 -0.235169 -0.0403012 + -0.990587 0.70963 -2.55944 0.97929 -0.200358 -0.0291048 + -1.0081 0.624545 -2.58153 0.980802 -0.192545 -0.0308896 + -0.868778 1.06759 -2.53626 0.949754 -0.235756 0.20588 + -0.901376 0.991044 -2.52247 0.858472 -0.389563 0.333567 + -0.94607 0.890647 -2.53416 0.936379 -0.35099 0.00107427 + -0.974151 0.795004 -2.53492 0.901483 -0.272687 0.33611 + -0.992181 0.708298 -2.54969 0.903423 -0.259877 0.341015 + -0.87787 1.01106 -2.57668 0.878134 -0.395548 0.269114 + -0.86407 1.08456 -2.57384 0.979385 -0.173585 0.103312 + -0.861687 1.11392 -2.56091 0.978598 -0.167926 0.11894 + -0.866668 1.10639 -2.51694 0.947761 -0.203811 0.245379 + -0.882104 1.09696 -2.48575 0.784606 -0.298018 0.543672 + -0.884215 1.05816 -2.50507 0.791205 -0.320051 0.521116 + -0.897678 0.936912 -2.6526 0.773609 -0.457386 0.438552 + -0.873162 1.02803 -2.61425 0.965281 -0.241889 0.098597 + -0.854529 1.09843 -2.61509 0.956135 -0.22225 0.190814 + -0.865363 1.04126 -2.64315 0.950426 -0.257208 0.174742 + -0.840866 1.11642 -2.65408 0.982724 -0.0997397 -0.155904 + -0.837332 1.14079 -2.6466 0.979192 -0.0863826 -0.183631 + -0.852146 1.12779 -2.60216 0.956995 -0.206165 0.204099 + -0.861538 1.16186 -2.68141 0.692888 0.152478 -0.704738 + -0.868219 1.24203 -2.66812 0.574125 0.158542 -0.803271 + -0.833628 1.23334 -2.64018 0.855648 0.0787174 -0.511537 + -0.831071 1.17745 -2.63209 0.988874 -0.12975 -0.0727619 + -0.845885 1.16446 -2.58764 0.947227 -0.255703 0.193329 + -0.934282 1.28459 -2.69404 0.364794 0.175382 -0.914422 + -0.938761 1.37007 -2.67991 0.370436 0.210525 -0.904686 + -0.890704 1.39669 -2.64796 0.555286 0.257318 -0.790851 + -0.856113 1.388 -2.62003 0.800786 0.230611 -0.552776 + -0.989471 1.38663 -2.69149 0.118226 0.249029 -0.961253 + -0.94975 1.43807 -2.66388 0.28463 0.384371 -0.878205 + -0.901693 1.4647 -2.63194 0.39648 0.78005 -0.484072 + -0.880149 1.47123 -2.59456 0.309016 0.882258 -0.355148 + -0.860366 1.44322 -2.59861 0.765271 0.403725 -0.501364 + -1.00678 1.42268 -2.67934 -0.00878301 0.438802 -0.898541 + -0.984619 1.43677 -2.67203 0.091524 0.393432 -0.914787 + -0.947564 1.47536 -2.64032 0.317784 0.868931 -0.379435 + -0.920867 1.45928 -2.62568 0.00754016 0.935387 0.353545 + -0.899324 1.46581 -2.5883 -0.338502 0.940963 0.00201027 + -1.05423 1.44533 -2.65705 -0.257718 0.683011 -0.68343 + -1.03207 1.45942 -2.64973 -0.172442 0.66318 -0.728324 + -0.982433 1.47406 -2.64846 0.0170604 0.710272 -0.70372 + -0.968794 1.48219 -2.62952 0.131853 0.980579 0.145185 + -0.942097 1.46611 -2.61488 0.339007 0.806508 0.484375 + -1.08251 1.44345 -2.64039 -0.528518 0.689857 -0.494738 + -1.06681 1.46496 -2.62013 -0.320482 0.885042 -0.337626 + -1.04387 1.46803 -2.63609 -0.297217 0.870988 -0.391206 + -0.994238 1.48267 -2.63483 -0.113418 0.983473 -0.141127 + -1.00639 1.47073 -2.61217 0.0165182 0.857013 0.51503 + -1.09875 1.45047 -2.60848 -0.700871 0.635293 -0.324317 + -1.08305 1.47199 -2.58823 -0.251531 0.967592 -0.0223144 + -1.05477 1.46814 -2.60152 0.0747224 0.986398 0.146409 + -1.03184 1.47121 -2.61748 -0.137016 0.985399 0.101065 + -1.11399 1.43808 -2.58024 -0.851421 0.515949 -0.0942342 + -1.09815 1.46439 -2.55821 -0.427883 0.864768 0.262854 + -1.07211 1.46623 -2.58029 0.266523 0.90494 0.331737 + -1.12543 1.41096 -2.55294 -0.858748 0.512325 0.00866501 + -1.10958 1.43727 -2.53091 -0.809966 0.586366 -0.0113725 + -1.0872 1.45862 -2.55028 0.092161 0.902814 0.420039 + -1.05158 1.44868 -2.55174 0.311533 0.870532 0.380948 + -1.13962 1.39521 -2.51541 -0.823225 0.544266 -0.161477 + -1.12271 1.42414 -2.49449 -0.77304 0.612434 -0.165331 + -1.10257 1.4502 -2.51064 -0.299789 0.941673 0.152899 + -1.08047 1.43007 -2.47989 0.376654 0.853787 0.359415 + -1.0651 1.43849 -2.51953 0.365384 0.852791 0.373151 + -1.16035 1.38697 -2.47996 -0.880904 0.437562 -0.180407 + -1.14345 1.41591 -2.45904 -0.746913 0.66481 -0.0122075 + -1.1157 1.43707 -2.47422 -0.296097 0.947993 0.11677 + -1.17934 1.31858 -2.44536 -0.986818 0.127857 0.0992117 + -1.16392 1.37191 -2.43618 -0.923474 0.334044 0.188704 + -1.14797 1.4016 -2.42365 -0.817402 0.519555 0.248833 + -1.12068 1.42832 -2.43095 -0.202895 0.94604 0.252669 + -1.16889 1.31433 -2.39827 -0.94343 0.166749 0.286592 + -1.1542 1.34868 -2.39596 -0.866943 0.32898 0.374409 + -1.13825 1.37837 -2.38343 -0.881053 0.316462 0.351563 + -1.12732 1.39703 -2.37291 -0.529964 0.647941 0.547092 + -1.12521 1.41402 -2.39556 -0.350048 0.839598 0.415381 + -1.17078 1.25956 -2.40942 -0.969906 -0.093237 0.22492 + -1.16267 1.24834 -2.38147 -0.931278 -0.153555 0.330367 + -1.16159 1.27016 -2.37019 -0.912586 -0.0845404 0.400049 + -1.16229 1.3028 -2.37069 -0.907364 0.131461 0.39926 + -1.1476 1.33715 -2.36837 -0.883226 0.307158 0.354352 + -1.15392 1.18608 -2.39687 -0.932328 -0.232701 0.276793 + -1.14588 1.18477 -2.37766 -0.793191 -0.286797 0.537211 + -1.1448 1.20659 -2.36638 -0.662665 -0.263007 0.701215 + -1.14957 1.27336 -2.35176 -0.668089 -0.106751 0.736383 + -1.15027 1.30599 -2.35226 -0.788477 0.0708074 0.610974 + -1.14443 1.13603 -2.41186 -0.924183 -0.273419 0.266698 + -1.1364 1.13472 -2.39265 -0.623701 -0.392 0.676264 + -1.11827 1.21179 -2.35083 -0.32055 -0.321119 0.89114 + -1.12305 1.27855 -2.33621 -0.444598 -0.212916 0.870057 + -1.12625 1.07567 -2.41973 -0.638675 -0.380241 0.668963 + -1.0902 1.07266 -2.41137 -0.121017 -0.383263 0.915677 + -1.10035 1.13172 -2.38429 -0.129938 -0.43067 0.893107 + -1.09442 1.18844 -2.3562 -0.116724 -0.426738 0.896811 + -1.05547 1.29095 -2.308 -0.219863 -0.323458 0.920345 + -1.11906 0.99834 -2.46379 -0.926896 -0.238494 0.289801 + -1.11163 0.995224 -2.44649 -0.649722 -0.320546 0.689283 + -1.08301 0.991956 -2.43864 -0.147539 -0.316111 0.93718 + -1.02824 1.06834 -2.41296 0.11534 -0.358159 0.926509 + -1.03359 1.12844 -2.38576 0.0974313 -0.429509 0.897791 + -1.10344 0.895543 -2.48919 -0.855178 -0.230617 0.464205 + -1.08971 0.892558 -2.47588 -0.501698 -0.292002 0.814269 + -1.06108 0.889287 -2.46803 -0.176379 -0.264115 0.948227 + -1.02105 0.987635 -2.44024 0.144667 -0.28957 0.946161 + -0.976925 1.05923 -2.42945 0.406835 -0.341488 0.847273 + -1.0945 0.800461 -2.51207 -0.82724 -0.159649 0.538689 + -1.08077 0.797475 -2.49876 -0.528353 -0.206582 0.823509 + -1.0614 0.795053 -2.49203 -0.219275 -0.227354 0.948804 + -1.0297 0.886628 -2.46568 0.0942056 -0.248579 0.96402 + -1.09345 0.712609 -2.52855 -0.824138 -0.154251 0.54498 + -1.08361 0.710468 -2.51901 -0.537036 -0.224478 0.813143 + -1.06424 0.708045 -2.51229 -0.220167 -0.267298 0.938125 + -1.03002 0.792394 -2.48968 0.124432 -0.250754 0.96002 + -0.991862 0.88563 -2.47769 0.498035 -0.264229 0.82592 + -1.10084 0.715706 -2.54576 -0.963889 -0.0867551 0.251777 + -1.09617 0.628966 -2.56769 -0.958431 -0.1488 0.24345 + -1.0915 0.627008 -2.55681 -0.820519 -0.238549 0.519464 + -1.08166 0.624867 -2.54726 -0.530318 -0.328996 0.78136 + -1.09868 0.632 -2.58687 -0.99689 -0.0619289 -0.0487431 + -1.09027 0.546235 -2.61337 -0.976583 -0.203776 -0.069003 + -1.08899 0.544675 -2.60351 -0.934365 -0.294292 0.200884 + -1.08432 0.542717 -2.59263 -0.791189 -0.393918 0.467813 + -1.09595 0.633667 -2.59945 -0.921519 0.0295332 -0.38721 + -1.08755 0.547902 -2.62594 -0.906116 -0.0936438 -0.412535 + -1.0736 0.503052 -2.63077 -0.657908 -0.698812 -0.280747 + -1.07232 0.501492 -2.6209 -0.5838 -0.803005 0.119837 + -1.08257 0.548607 -2.63315 -0.722697 -0.00993852 -0.691093 + -1.06862 0.503757 -2.63797 -0.43344 -0.630561 -0.643834 + -1.04974 0.502079 -2.63603 0.422817 -0.686014 -0.592124 + -1.06726 0.500393 -2.61599 -0.293236 -0.877788 0.378816 + -1.07925 0.541618 -2.58772 -0.521292 -0.480551 0.705213 + -1.07278 0.548979 -2.6405 -0.460169 0.0463358 -0.886622 + -1.06447 0.54878 -2.64328 -0.112793 0.0671714 -0.991345 + -1.06031 0.503558 -2.64075 -0.00466644 -0.612756 -0.790258 + -1.05057 0.547545 -2.64185 0.268025 0.0477428 -0.962228 + -1.02995 0.543948 -2.62785 0.809955 -0.125096 -0.572995 + -1.04665 0.500682 -2.62816 0.554375 -0.805866 -0.207959 + -1.02685 0.542552 -2.61998 0.926257 -0.225626 -0.301896 + -1.02518 0.541021 -2.61049 0.947032 -0.316871 -0.0521857 + -1.04747 0.499998 -2.62314 0.470175 -0.872482 0.133079 + -1.026 0.540337 -2.60548 0.860336 -0.419876 0.28901 + -1.03266 0.539402 -2.59588 0.688047 -0.48246 0.542055 + -1.05569 0.499412 -2.61513 0.147088 -0.899721 0.410934 + -1.05544 0.539107 -2.5826 0.0808372 -0.541862 0.836571 + -1.06701 0.540086 -2.58347 -0.222008 -0.524589 0.8219 + -1.0097 0.623214 -2.57178 0.895208 -0.292463 0.336255 + -1.01635 0.62228 -2.56218 0.730253 -0.346055 0.589048 + -1.04087 0.538816 -2.58787 0.468018 -0.521577 0.713384 + -1.04691 0.621429 -2.54133 0.105559 -0.398375 0.911128 + -1.06941 0.623335 -2.54301 -0.227649 -0.374916 0.898674 + -1.00271 0.706819 -2.53452 0.740571 -0.287232 0.607497 + -1.03234 0.621138 -2.54659 0.488824 -0.386642 0.782023 + -1.01869 0.705681 -2.51892 0.508876 -0.303807 0.805448 + -1.04174 0.706138 -2.5106 0.108581 -0.296112 0.948961 + -0.984676 0.793525 -2.51975 0.742323 -0.268092 0.61407 + -0.948293 0.888791 -2.52055 0.845078 -0.322484 0.426435 + -0.969564 0.887221 -2.49944 0.684999 -0.270924 0.676296 + -1.00697 0.791935 -2.498 0.51377 -0.263712 0.816392 + -0.926244 0.989602 -2.50043 0.660527 -0.31281 0.682535 + -0.947515 0.988032 -2.47932 0.635129 -0.288974 0.716313 + -0.909084 1.05672 -2.48303 0.614267 -0.367071 0.698524 + -0.94123 1.06063 -2.45651 0.56421 -0.377053 0.734506 + -0.983211 0.986638 -2.45225 0.443925 -0.279269 0.851434 + -0.909294 1.08518 -2.46457 0.606607 -0.376106 0.700409 + -0.941441 1.08909 -2.43805 0.532076 -0.394407 0.749226 + -0.871687 1.15593 -2.47057 0.810704 -0.268079 0.520473 + -0.898877 1.14416 -2.44938 0.669766 -0.327231 0.666583 + -0.929246 1.15389 -2.41 0.563535 -0.376751 0.735178 + -0.982273 1.11932 -2.40225 0.312706 -0.407609 0.857945 + -0.856009 1.16132 -2.50709 0.945087 -0.228352 0.233808 + -0.855299 1.23129 -2.46941 0.894735 -0.194911 0.401819 + -0.875496 1.23743 -2.42759 0.796799 -0.267322 0.541895 + -0.905865 1.24716 -2.38821 0.690921 -0.389738 0.608878 + -0.970078 1.18412 -2.3742 0.384688 -0.480377 0.788196 + -0.851029 1.16885 -2.55106 0.961848 -0.248345 0.114771 + -0.829275 1.24505 -2.54502 0.97641 -0.118939 0.180213 + -0.839621 1.23668 -2.50593 0.950809 -0.132504 0.280009 + -0.85271 1.29318 -2.44602 0.953834 -0.0165858 0.299875 + -0.824131 1.24066 -2.58161 0.994979 -0.0936058 0.0354266 + -0.831513 1.32636 -2.53217 0.980253 0.0789056 0.181322 + -0.841858 1.31798 -2.49307 0.951932 0.0791292 0.295911 + -0.85511 1.31488 -2.44981 0.952903 0.156852 0.259565 + -0.826689 1.29654 -2.58971 0.982066 0.109822 -0.153249 + -0.830941 1.35176 -2.56829 0.982874 0.16182 -0.0881616 + -0.851209 1.42879 -2.51838 0.929606 0.220327 0.295445 + -0.869253 1.38921 -2.46263 0.833821 0.316261 0.452463 + -0.882504 1.38611 -2.41937 0.905215 0.348195 0.24361 + -0.850637 1.45419 -2.5545 0.914089 0.399522 -0.0694501 + -0.869045 1.47487 -2.50963 0.450371 0.815023 0.36456 + -0.870421 1.4822 -2.55045 0.265064 0.96055 -0.0841732 + -0.896257 1.46308 -2.48865 -0.22154 0.858129 0.463178 + -0.887089 1.43529 -2.45388 0.299955 0.446597 0.842958 + -0.897632 1.47042 -2.52947 -0.390441 0.91849 0.0627135 + -0.920107 1.45833 -2.51853 -0.542513 0.832476 0.112527 + -0.925061 1.44439 -2.48453 -0.512913 0.744366 0.427597 + -0.915893 1.4166 -2.44975 -0.0692827 0.607753 0.791098 + -0.921798 1.45373 -2.57736 -0.519678 0.852963 -0.0488796 + -0.953587 1.43266 -2.53555 -0.581827 0.808137 0.0916093 + -0.958541 1.41872 -2.50155 -0.567659 0.787052 0.241481 + -0.967459 1.40174 -2.46741 -0.469628 0.78452 0.404941 + -0.934989 1.44534 -2.58484 -0.3171 0.864272 0.390489 + -0.966778 1.42428 -2.54303 -0.389897 0.896888 0.208741 + -0.983379 1.4083 -2.51108 -0.357696 0.877568 0.319262 + -0.992297 1.39131 -2.47694 -0.270847 0.886126 0.376061 + -0.976856 1.38687 -2.4505 -0.376359 0.853842 0.359594 + -0.945825 1.4539 -2.59787 0.00862971 0.854386 0.519567 + -0.97287 1.42479 -2.54844 -0.0404514 0.90323 0.427246 + -0.989471 1.40881 -2.51649 -0.00380139 0.904273 0.426938 + -1.00051 1.38963 -2.47497 0.0981652 0.898424 0.428016 + -0.996782 1.38135 -2.45573 -0.215565 0.906702 0.362523 + -1.01012 1.45852 -2.59516 0.111829 0.831013 0.544896 + -0.983706 1.43335 -2.56148 0.110045 0.853486 0.509364 + -1.00783 1.42542 -2.53927 0.226335 0.85279 0.470661 + -1.03424 1.45059 -2.57296 0.242654 0.877825 0.412967 + -1.01887 1.40624 -2.49774 0.29741 0.849331 0.436101 + -1.03239 1.39605 -2.46553 0.355674 0.821062 0.44649 + -1.00499 1.37967 -2.45376 0.0919162 0.894453 0.437612 + -0.999376 1.37777 -2.44788 -0.206506 0.923662 0.322806 + -0.979449 1.38329 -2.44266 -0.34661 0.918114 0.192165 + -0.925289 1.40173 -2.43285 -0.0513829 0.945575 0.321322 + -1.04273 1.38481 -2.43909 0.429836 0.801685 0.415382 + -1.01192 1.37339 -2.43923 0.121277 0.893529 0.432317 + -1.0063 1.37149 -2.43335 -0.233676 0.931842 0.277609 + -0.980221 1.38175 -2.42299 -0.371224 0.917588 0.142217 + -1.08827 1.42286 -2.45185 0.426117 0.859083 0.283552 + -1.05053 1.3776 -2.41105 0.568071 0.769255 0.292475 + -1.02226 1.36215 -2.41278 0.155148 0.896973 0.413967 + -1.01648 1.3611 -2.40822 -0.265174 0.926222 0.267946 + -0.990394 1.37137 -2.39786 -0.464011 0.87689 0.125531 + -1.09325 1.41411 -2.40858 0.415229 0.863528 0.286189 + -1.05104 1.3772 -2.40825 0.622306 0.746965 0.23405 + -1.02852 1.35678 -2.39971 0.28 0.90287 0.32623 + -1.02274 1.35574 -2.39516 -0.194354 0.944319 0.265495 + -1.00467 1.35807 -2.36786 -0.560909 0.798007 0.220376 + -1.09274 1.4032 -2.37737 0.320379 0.825035 0.465483 + -1.05053 1.3663 -2.37704 0.560245 0.79439 0.234669 + -1.02904 1.35638 -2.39692 0.355279 0.908303 0.220823 + -1.026 1.35042 -2.37727 0.289123 0.927375 0.237451 + -1.0197 1.34977 -2.37551 -0.30177 0.900714 0.312488 + -1.09486 1.38622 -2.35472 0.171952 0.832809 0.526176 + -1.04089 1.3488 -2.32091 0.425237 0.813488 0.39675 + -1.01635 1.33292 -2.32115 -0.0999424 0.994492 0.03158 + -1.12788 1.37252 -2.34763 -0.633704 0.60949 0.476384 + -1.10435 1.37495 -2.33329 -0.135443 0.802191 0.581503 + -1.05038 1.33753 -2.29949 0.06645 0.512045 0.856385 + -1.00133 1.34122 -2.31349 -0.338204 0.889775 0.306462 + -1.1388 1.35386 -2.35816 -0.912977 0.308797 0.266679 + -1.13502 1.34588 -2.32554 -0.785912 0.247448 0.566667 + -1.11149 1.3483 -2.31119 -0.291618 0.4455 0.846457 + -1.14148 1.32271 -2.34204 -0.858726 0.0330041 0.511372 + -1.12248 1.30853 -2.32584 -0.532563 -0.299047 0.7918 + -1.11603 1.3317 -2.30933 -0.439293 -0.140627 0.887269 + -1.05491 1.32093 -2.29762 -0.134271 -0.0906387 0.986791 + -0.999054 1.29229 -2.29894 -0.0651794 -0.270499 0.960511 + -0.98857 1.33391 -2.29523 -0.0910672 0.402129 0.911043 + -0.965906 1.38361 -2.34665 -0.464614 0.819483 0.335532 + -1.03163 1.2676 -2.31336 -0.0915104 -0.415923 0.904784 + -0.995083 1.20985 -2.34325 0.151109 -0.564242 0.811663 + -0.964126 1.2872 -2.29852 0.219764 -0.340606 0.914162 + -0.953642 1.32882 -2.2948 0.231449 0.138884 0.962882 + -0.953148 1.3763 -2.32838 -0.177089 0.709115 0.682492 + -1.02766 1.18516 -2.35767 0.0769188 -0.490747 0.8679 + -0.939121 1.26148 -2.32947 0.581246 -0.483077 0.65482 + -0.923982 1.32046 -2.31195 0.674161 -0.168656 0.71907 + -0.934902 1.34106 -2.30356 0.369274 0.260791 0.891978 + -0.890725 1.30614 -2.37069 0.828578 -0.213496 0.517569 + -0.902689 1.36227 -2.33865 0.836963 0.104198 0.537249 + -0.913609 1.38287 -2.33026 0.432614 0.508049 0.744803 + -0.934407 1.38854 -2.33714 -0.142712 0.75657 0.638149 + -0.925721 1.40547 -2.36051 -0.125967 0.953721 0.273036 + -0.872908 1.29932 -2.4042 0.872746 -0.143765 0.466525 + -0.884871 1.35545 -2.37217 0.908713 0.0655302 0.412246 + -0.88727 1.37715 -2.37596 0.902866 0.301393 0.306588 + -0.904923 1.3998 -2.35364 0.546583 0.695006 0.467133 + -0.900157 1.40875 -2.39705 0.37271 0.927874 0.0116933 + -0.926061 1.40019 -2.41319 -0.211593 0.973755 -0.0838376 + -0.951625 1.39691 -2.37665 -0.432442 0.901477 -0.0182436 + 0.987946 0.54202 -2.82794 0.314747 -0.758113 -0.571138 + 0.997797 0.583674 -2.84229 0.57196 -0.227225 -0.788182 + 1.00242 0.583273 -2.8373 0.815654 -0.202245 -0.542038 + 0.986215 0.583895 -2.84767 0.304597 -0.252697 -0.918349 + 0.994011 0.664209 -2.85276 0.576401 0.00390892 -0.817158 + 1.00283 0.663444 -2.84326 0.836168 -0.00551554 -0.548446 + 0.992571 0.541618 -2.82296 0.569947 -0.754798 -0.324716 + 0.969837 0.538851 -2.80456 -0.327952 -0.876351 0.352783 + 0.965146 0.539398 -2.81088 -0.49127 -0.865631 0.0966238 + 0.964997 0.54048 -2.8207 -0.47421 -0.819732 -0.321191 + 0.976634 0.541924 -2.83037 -0.100627 -0.76649 -0.634324 + 1.00691 0.582204 -2.82634 0.943677 -0.181814 -0.276437 + 1.00847 0.581138 -2.81623 0.983805 -0.178851 -0.0118181 + 0.994128 0.540551 -2.81285 0.64231 -0.764739 0.0511094 + 1.00732 0.662375 -2.83229 0.959681 -0.0220629 -0.280224 + 1.01029 0.66034 -2.81301 0.998707 -0.0508264 -0.000970925 + 1.00792 0.65881 -2.79987 0.939053 -0.0949233 0.330406 + 1.0061 0.579608 -2.80309 0.923809 -0.190563 0.332058 + 1.00774 0.761453 -2.82961 0.833553 0.059638 -0.549211 + 1.01479 0.756517 -2.81332 0.959144 -0.0194904 -0.282245 + 1.01776 0.754481 -2.79404 0.994713 -0.101179 -0.0175988 + 0.998922 0.76222 -2.83911 0.577709 0.132539 -0.80541 + 1.0087 0.88042 -2.8048 0.56572 0.167668 -0.807371 + 1.02098 0.874586 -2.79292 0.829802 0.0448848 -0.55625 + 1.02803 0.86965 -2.77662 0.948995 -0.0606477 -0.309405 + 0.980736 0.764743 -2.84695 0.304326 0.178861 -0.935625 + 0.990514 0.882944 -2.81263 0.307028 0.241703 -0.920496 + 0.999928 0.98995 -2.78141 0.232054 0.24215 -0.94208 + 1.02948 0.984916 -2.773 0.516343 0.120489 -0.847863 + 1.04177 0.979082 -2.76111 0.808312 -0.0403719 -0.587369 + 0.98243 0.664431 -2.85815 0.314251 0.00198932 -0.949338 + 0.959166 0.764559 -2.85158 -0.0536553 0.187806 -0.980739 + 0.960445 0.886619 -2.81796 -0.060877 0.274796 -0.959573 + 0.969859 0.993627 -2.78674 -0.0467908 0.309176 -0.949853 + 0.974903 0.583799 -2.8501 -0.0217184 -0.287312 -0.957591 + 0.96086 0.664247 -2.86277 -0.0562559 -0.0251938 -0.998098 + 0.932966 0.762391 -2.84343 -0.485838 0.152383 -0.860663 + 0.934244 0.884451 -2.80981 -0.476559 0.246822 -0.843783 + 0.927075 0.98972 -2.77383 -0.465841 0.261126 -0.845461 + 0.958226 0.58268 -2.84484 -0.432043 -0.335505 -0.837123 + 0.944182 0.663127 -2.85751 -0.467496 -0.0702007 -0.881203 + 0.910775 0.759637 -2.825 -0.75646 0.0909882 -0.64768 + 0.903272 0.875039 -2.78571 -0.760424 0.163012 -0.628636 + 0.896103 0.980307 -2.74972 -0.746515 0.121203 -0.654237 + 0.946589 0.581236 -2.83517 -0.67619 -0.372972 -0.635342 + 0.921991 0.660374 -2.83908 -0.745374 -0.12414 -0.654986 + 0.897648 0.753411 -2.80372 -0.961171 -0.0370587 -0.273452 + 0.890144 0.868814 -2.76442 -0.960313 0.0142307 -0.27856 + 0.877059 0.968103 -2.72052 -0.958223 -0.0487882 -0.28183 + 0.93824 0.5794 -2.82101 -0.867769 -0.417936 -0.268899 + 0.913643 0.658539 -2.82492 -0.937 -0.194307 -0.290302 + 0.897932 0.751349 -2.78499 -0.981591 -0.151304 0.116561 + 0.890512 0.858144 -2.74054 -0.983584 -0.146602 0.105215 + 0.877426 0.957433 -2.69664 -0.984458 -0.166027 0.0572543 + 0.93839 0.578319 -2.81119 -0.895967 -0.43484 0.0903148 + 0.913927 0.656476 -2.8062 -0.962066 -0.247728 0.114276 + 0.903445 0.746082 -2.76754 -0.884753 -0.241502 0.39861 + 0.896025 0.852877 -2.72309 -0.889135 -0.272227 0.367874 + 0.885224 0.944204 -2.66774 -0.902343 -0.331362 0.275638 + 0.941907 0.577135 -2.79946 -0.819989 -0.429965 0.377819 + 0.917445 0.655293 -2.79446 -0.875195 -0.276001 0.397313 + 0.91239 0.745039 -2.75548 -0.722376 -0.307996 0.619121 + 0.908478 0.845585 -2.70795 -0.728064 -0.367845 0.578457 + 0.897678 0.936912 -2.6526 -0.746277 -0.50435 0.434397 + 0.946598 0.576588 -2.79314 -0.68616 -0.416997 0.596069 + 0.92639 0.654249 -2.78241 -0.720316 -0.287327 0.631338 + 0.924211 0.742007 -2.74573 -0.543434 -0.349792 0.763102 + 0.920299 0.842552 -2.6982 -0.546813 -0.44217 0.710972 + 0.915673 0.920278 -2.64408 -0.571542 -0.567879 0.592328 + 0.954129 0.576099 -2.78652 -0.518299 -0.395967 0.758008 + 0.933921 0.65376 -2.77579 -0.547721 -0.289795 0.78487 + 0.935026 0.741769 -2.74041 -0.210655 -0.389935 0.896423 + 0.935371 0.839004 -2.69171 -0.213408 -0.503343 0.837319 + 0.930745 0.916726 -2.63758 -0.200866 -0.671679 0.713091 + 0.9598 0.575973 -2.78373 -0.206821 -0.349201 0.913938 + 0.944736 0.653521 -2.77047 -0.216427 -0.27386 0.937102 + 0.957243 0.741721 -2.74101 0.124426 -0.381724 0.915863 + 0.957588 0.838956 -2.6923 0.124447 -0.501602 0.856101 + 0.975509 0.538725 -2.80177 -0.0185124 -0.842729 0.53802 + 0.973945 0.576454 -2.78396 0.13036 -0.281896 0.950548 + 0.958881 0.654004 -2.7707 0.12086 -0.232587 0.965037 + 0.983544 0.743223 -2.74693 0.368552 -0.363115 0.855755 + 0.994271 0.841053 -2.70056 0.367816 -0.476657 0.798442 + 0.989302 0.539512 -2.80488 0.40503 -0.796139 0.44957 + 0.987738 0.577242 -2.78706 0.369585 -0.249085 0.895189 + 0.985181 0.655504 -2.77662 0.378428 -0.202257 0.903263 + 1.0048 0.746669 -2.75918 0.700584 -0.305787 0.64473 + 1.00127 0.578569 -2.79511 0.709695 -0.217832 0.669987 + 0.998712 0.656831 -2.78467 0.708462 -0.155975 0.688297 + 1.01401 0.748649 -2.77438 0.928875 -0.199865 0.31184 + 1.02839 0.852705 -2.73245 0.918584 -0.290291 0.268205 + 1.01553 0.844499 -2.71281 0.693033 -0.407387 0.594761 + 1.03214 0.858538 -2.75211 0.984747 -0.167407 -0.0474118 + 1.05609 0.956349 -2.71154 0.955449 -0.287842 -0.0653049 + 1.04433 0.934346 -2.68809 0.882035 -0.387309 0.268338 + 1.03147 0.926142 -2.66845 0.705381 -0.496106 0.506277 + 0.999984 0.910055 -2.65635 0.387036 -0.59509 0.704323 + 1.05198 0.967463 -2.73606 0.925331 -0.168578 -0.339625 + 1.0884 1.05881 -2.70415 0.93478 -0.2186 -0.280001 + 1.08784 1.03906 -2.65981 0.946229 -0.323299 0.011355 + 1.07608 1.01706 -2.63636 0.88807 -0.437073 -0.142472 + 1.03839 0.968117 -2.63106 0.690054 -0.723252 0.0270575 + 1.07819 1.07044 -2.72921 0.780503 -0.0701201 -0.621207 + 1.09758 1.13993 -2.71023 0.802931 -0.0429362 -0.594524 + 1.1102 1.13024 -2.67529 0.958558 -0.177376 -0.222946 + 1.10964 1.11049 -2.63095 0.969999 -0.177352 -0.166275 + 1.0836 1.00664 -2.61366 0.639169 -0.303516 -0.706641 + 1.05317 1.08021 -2.74869 0.465188 0.112529 -0.87803 + 1.07256 1.1497 -2.72971 0.446705 0.107534 -0.888195 + 1.08019 1.19637 -2.72071 0.441207 0.118918 -0.889491 + 1.10738 1.18459 -2.69952 0.810642 -0.014027 -0.585374 + 1.12001 1.17491 -2.66458 0.973171 -0.137212 -0.184691 + 1.02362 1.08524 -2.75711 0.130927 0.226315 -0.965215 + 1.033 1.1579 -2.73778 0.0918917 0.203959 -0.974657 + 1.04063 1.20456 -2.72877 0.0883932 0.184283 -0.97889 + 1.09014 1.26099 -2.7058 0.484544 0.125036 -0.865785 + 1.11733 1.24921 -2.68462 0.795821 0.0283972 -0.604866 + 0.972767 1.0861 -2.75409 -0.170756 0.289218 -0.941911 + 0.982147 1.15875 -2.73476 -0.175982 0.238265 -0.955123 + 0.985439 1.21494 -2.72337 -0.188342 0.232976 -0.95407 + 1.0019 1.26921 -2.71213 -0.119223 0.198162 -0.972891 + 1.05709 1.25883 -2.71753 0.146855 0.176704 -0.973247 + 0.929983 1.08219 -2.74118 -0.385176 0.292744 -0.87518 + 0.92431 1.14823 -2.71871 -0.391233 0.235568 -0.889631 + 0.927602 1.20442 -2.70733 -0.372542 0.201684 -0.905834 + 0.870745 1.07144 -2.71135 -0.699818 0.150315 -0.698327 + 0.865072 1.13749 -2.68888 -0.675653 0.152855 -0.721199 + 0.861538 1.16186 -2.68141 -0.682124 0.143505 -0.717017 + 0.868219 1.24203 -2.66812 -0.580575 0.15414 -0.799483 + 0.934282 1.28459 -2.69404 -0.353678 0.168968 -0.919979 + 0.8517 1.05924 -2.68214 -0.971742 -0.136094 -0.192859 + 0.840866 1.11642 -2.65408 -0.983871 -0.0973136 -0.150093 + 0.837332 1.14079 -2.6466 -0.979924 -0.0931913 -0.176251 + 0.831071 1.17745 -2.63209 -0.978199 -0.0947031 -0.18482 + 0.865363 1.04126 -2.64315 -0.951262 -0.264788 0.158077 + 0.854529 1.09843 -2.61509 -0.957178 -0.218926 0.189424 + 0.852146 1.12779 -2.60216 -0.957166 -0.20616 0.203302 + 0.845885 1.16446 -2.58764 -0.945983 -0.25868 0.195448 + 0.873162 1.02803 -2.61425 -0.972441 -0.212683 0.0955218 + 0.86407 1.08456 -2.57384 -0.979238 -0.172113 0.107099 + 0.861687 1.11392 -2.56091 -0.977969 -0.170595 0.120308 + 0.851029 1.16885 -2.55106 -0.963132 -0.237416 0.126533 + 0.824131 1.24066 -2.58161 -0.995574 -0.083762 0.0426153 + 0.87787 1.01106 -2.57668 -0.90883 -0.377834 0.17683 + 0.868778 1.06759 -2.53626 -0.949647 -0.230657 0.212056 + 0.866668 1.10639 -2.51694 -0.948296 -0.206688 0.240863 + 0.856009 1.16132 -2.50709 -0.949884 -0.216402 0.225587 + 0.895865 0.994424 -2.56815 -0.695386 -0.694595 0.184325 + 0.901376 0.991044 -2.52247 -0.8106 -0.424983 0.402886 + 0.884215 1.05816 -2.50507 -0.796943 -0.331244 0.505133 + 0.882104 1.09696 -2.48575 -0.787024 -0.292682 0.543076 + 0.871687 1.15593 -2.47057 -0.792053 -0.221006 0.569042 + 0.935615 0.955693 -2.59324 -0.389208 -0.860238 0.329405 + 0.946387 0.944402 -2.56808 -0.679977 -0.499001 -0.537242 + 0.906638 0.983132 -2.54299 -0.8216 -0.565443 -0.0724466 + 0.963302 0.907958 -2.64809 0.140922 -0.643664 0.752222 + 0.968171 0.946924 -2.60376 -0.0518793 -0.982319 0.179883 + 0.97527 0.937947 -2.5867 -0.423606 -0.498285 -0.756485 + 0.959722 0.886523 -2.57604 -0.762568 -0.106516 -0.638079 + 0.951332 0.882736 -2.55468 -0.924249 -0.24845 -0.289889 + 1.00689 0.95203 -2.61896 0.35333 -0.92978 0.10328 + 1.01399 0.943052 -2.6019 -0.132118 -0.450158 -0.883121 + 0.988605 0.880068 -2.59465 -0.472837 0.00799295 -0.881114 + 0.998872 0.806418 -2.59956 -0.536595 -0.0478441 -0.842483 + 0.982965 0.80307 -2.58489 -0.800322 -0.138274 -0.583408 + 1.0459 0.957702 -2.60835 0.0874554 -0.346659 -0.933905 + 1.01727 0.884079 -2.60747 -0.320112 0.0429812 -0.946404 + 1.02754 0.810431 -2.61238 -0.262063 -0.00013178 -0.965051 + 1.04918 0.898729 -2.61392 0.0245274 0.017327 -0.999549 + 1.04952 0.812386 -2.61464 0.103179 0.0159324 -0.994535 + 1.03571 0.720992 -2.61362 -0.265146 0.0393099 -0.963407 + 1.01516 0.718116 -2.60443 -0.548501 -0.00795235 -0.836112 + 0.999249 0.714768 -2.58976 -0.81873 -0.085002 -0.567852 + 1.07173 0.899269 -2.60639 0.429908 -0.0426861 -0.901863 + 1.07207 0.812925 -2.60711 0.461009 0.0202921 -0.887164 + 1.07386 0.723332 -2.61049 0.46477 0.0795256 -0.881853 + 1.05769 0.722945 -2.61589 0.11051 0.0712288 -0.991319 + 1.10668 1.01755 -2.59929 0.772028 -0.15355 -0.616761 + 1.09481 0.910179 -2.59202 0.699479 -0.0814139 -0.710001 + 1.08755 0.812336 -2.59548 0.718718 0.00540434 -0.695281 + 1.11904 1.09943 -2.58885 0.935383 -0.0609495 -0.348344 + 1.12524 1.01362 -2.56363 0.934191 -0.109256 -0.339634 + 1.10833 0.908268 -2.57246 0.915023 -0.0934332 -0.392433 + 1.10107 0.810427 -2.57592 0.917366 -0.0182307 -0.397626 + 1.12827 1.16642 -2.56773 0.916495 -0.0637501 -0.394933 + 1.13759 1.0955 -2.55319 0.932415 -0.075096 -0.353501 + 1.13119 1.0094 -2.5323 0.985605 -0.154897 -0.0677514 + 1.11428 0.904054 -2.54113 0.991718 -0.120902 -0.0433471 + 1.10538 0.80779 -2.55604 0.997264 -0.053058 -0.0514714 + 1.11888 1.17747 -2.60983 0.984639 -0.134004 -0.111936 + 1.13103 1.2421 -2.59744 0.963626 -0.22808 -0.139301 + 1.14208 1.23005 -2.55351 0.900858 -0.150553 -0.407171 + 1.14901 1.14333 -2.53409 0.924846 -0.0943328 -0.368457 + 1.13216 1.23954 -2.65219 0.965927 -0.123771 -0.227299 + 1.15182 1.31268 -2.59848 0.966166 -0.0273945 -0.256462 + 1.16287 1.30063 -2.55454 0.955692 -0.096258 -0.278186 + 1.17659 1.27611 -2.50215 0.971841 -0.0666209 -0.226025 + 1.16281 1.20696 -2.51987 0.927666 -0.101556 -0.359335 + 1.14094 1.31582 -2.63344 0.936773 0.0667136 -0.34352 + 1.13698 1.37706 -2.61403 0.907712 0.317374 -0.274468 + 1.14786 1.37391 -2.57907 0.892462 0.397913 -0.212549 + 1.16205 1.35816 -2.54154 0.931142 0.308527 -0.194385 + 1.12611 1.3255 -2.66586 0.828528 0.117144 -0.547557 + 1.12174 1.38945 -2.64227 0.847024 0.342069 -0.406866 + 1.11399 1.43808 -2.58024 0.869691 0.485386 -0.0896594 + 1.12543 1.41096 -2.55294 0.863571 0.502391 -0.0429885 + 1.13962 1.39521 -2.51541 0.783226 0.594915 -0.180646 + 1.10373 1.35185 -2.68466 0.558573 0.241557 -0.793503 + 1.09936 1.4158 -2.66107 0.63565 0.483752 -0.601609 + 1.09875 1.45047 -2.60848 0.698105 0.641172 -0.318666 + 1.09815 1.46439 -2.55821 0.424709 0.862599 0.274855 + 1.07067 1.34969 -2.69638 0.181525 0.227355 -0.956744 + 1.07108 1.41769 -2.67773 0.295818 0.468546 -0.83244 + 1.08251 1.44345 -2.64039 0.47912 0.716705 -0.506732 + 1.06681 1.46496 -2.62013 0.324433 0.889911 -0.320627 + 1.08305 1.47199 -2.58823 0.233902 0.971903 -0.0263657 + 0.984992 1.30116 -2.70562 -0.15007 0.150493 -0.977155 + 1.05377 1.38164 -2.68987 0.0639528 0.246367 -0.967064 + 1.00678 1.42268 -2.67934 0.0303983 0.440531 -0.897223 + 1.05423 1.44533 -2.65705 0.25189 0.674749 -0.693733 + 1.04387 1.46803 -2.63609 0.281663 0.877357 -0.388472 + 0.989471 1.38663 -2.69149 -0.129266 0.252697 -0.958872 + 0.984619 1.43677 -2.67203 -0.0806959 0.452751 -0.887978 + 1.03207 1.45942 -2.64973 0.172443 0.663187 -0.728318 + 0.994238 1.48267 -2.63483 0.113418 0.983473 -0.141127 + 1.03184 1.47121 -2.61748 0.122801 0.972111 0.199798 + 0.938761 1.37007 -2.67991 -0.370233 0.213149 -0.904154 + 0.94975 1.43807 -2.66388 -0.299035 0.398689 -0.866963 + 0.982433 1.47406 -2.64846 -0.0170661 0.710269 -0.703724 + 0.968794 1.48219 -2.62952 -0.131853 0.980579 0.145185 + 1.00639 1.47073 -2.61217 -0.00772869 0.860127 0.510021 + 0.890704 1.39669 -2.64796 -0.546375 0.237799 -0.803073 + 0.901693 1.4647 -2.63194 -0.248292 0.809819 -0.531549 + 0.920867 1.45928 -2.62568 -0.0361548 0.971886 -0.232661 + 0.947564 1.47536 -2.64032 -0.427905 0.810497 -0.399991 + 0.942097 1.46611 -2.61488 -0.136237 0.922781 0.360437 + 0.833628 1.23334 -2.64018 -0.844625 0.0435963 -0.53358 + 0.856113 1.388 -2.62003 -0.803156 0.231255 -0.549055 + 0.880149 1.47123 -2.59456 -0.322878 0.874982 -0.360773 + 0.899324 1.46581 -2.5883 0.313253 0.949669 0.0014485 + 0.826689 1.29654 -2.58971 -0.985476 0.105748 -0.132868 + 0.830941 1.35176 -2.56829 -0.983881 0.156422 -0.0866655 + 0.860366 1.44322 -2.59861 -0.707207 0.393229 -0.587562 + 0.870421 1.4822 -2.55045 -0.321848 0.946217 -0.0329823 + 0.829275 1.24505 -2.54502 -0.977149 -0.117161 0.177352 + 0.831513 1.32636 -2.53217 -0.979601 0.0821127 0.183413 + 0.850637 1.45419 -2.5545 -0.901783 0.432183 -0.00239404 + 0.839621 1.23668 -2.50593 -0.949246 -0.134066 0.284532 + 0.841858 1.31798 -2.49307 -0.954846 0.101224 0.279325 + 0.869253 1.38921 -2.46263 -0.909505 0.226027 0.348873 + 0.851209 1.42879 -2.51838 -0.927781 0.236296 0.288768 + 0.855299 1.23129 -2.46941 -0.894114 -0.187062 0.4069 + 0.85271 1.29318 -2.44602 -0.943243 -0.05159 0.328073 + 0.85511 1.31488 -2.44981 -0.939949 0.187947 0.284906 + 0.882504 1.38611 -2.41937 -0.796883 0.548155 0.253977 + 0.887089 1.43529 -2.45388 -0.315207 0.615308 0.722524 + 0.898877 1.14416 -2.44938 -0.704967 -0.285147 0.649395 + 0.875496 1.23743 -2.42759 -0.797324 -0.276447 0.536518 + 0.872908 1.29932 -2.4042 -0.854907 -0.177021 0.487645 + 0.884871 1.35545 -2.37217 -0.912129 0.0578571 0.4058 + 0.88727 1.37715 -2.37596 -0.904135 0.306716 0.297431 + 0.909294 1.08518 -2.46457 -0.608674 -0.388468 0.691815 + 0.929246 1.15389 -2.41 -0.565243 -0.396482 0.723396 + 0.905865 1.24716 -2.38821 -0.75964 -0.321651 0.565233 + 0.890725 1.30614 -2.37069 -0.832401 -0.226854 0.505615 + 0.902689 1.36227 -2.33865 -0.828869 0.0837425 0.55314 + 0.909084 1.05672 -2.48303 -0.595346 -0.388792 0.703138 + 0.94123 1.06063 -2.45651 -0.555259 -0.370464 0.744609 + 0.941441 1.08909 -2.43805 -0.436782 -0.466273 0.769293 + 0.970078 1.18412 -2.3742 -0.38829 -0.493812 0.778062 + 0.939121 1.26148 -2.32947 -0.574656 -0.442021 0.688758 + 0.926244 0.989602 -2.50043 -0.660747 -0.319605 0.679166 + 0.947515 0.988032 -2.47932 -0.640773 -0.281272 0.71435 + 0.976925 1.05923 -2.42945 -0.427862 -0.319987 0.845306 + 0.982273 1.11932 -2.40225 -0.323441 -0.428492 0.843671 + 0.995083 1.20985 -2.34325 -0.157687 -0.516432 0.841684 + 0.94607 0.890647 -2.53416 -0.94841 -0.314742 0.0381689 + 0.948293 0.888791 -2.52055 -0.866167 -0.286237 0.409663 + 0.969564 0.887221 -2.49944 -0.68352 -0.268036 0.678939 + 0.983211 0.986638 -2.45225 -0.445047 -0.282407 0.849811 + 1.02824 1.06834 -2.41296 -0.117636 -0.360854 0.925174 + 0.974575 0.799283 -2.56353 -0.935873 -0.193842 -0.294221 + 0.971928 0.796861 -2.54853 -0.971737 -0.232327 -0.0418498 + 0.974151 0.795004 -2.53492 -0.90073 -0.261043 0.347191 + 0.984676 0.793525 -2.51975 -0.749839 -0.256518 0.609869 + 0.991862 0.88563 -2.47769 -0.505107 -0.255457 0.824383 + 0.993234 0.71205 -2.57445 -0.945975 -0.146477 -0.289266 + 0.990587 0.70963 -2.55944 -0.97929 -0.200358 -0.0291079 + 0.992181 0.708298 -2.54969 -0.903422 -0.259878 0.341015 + 1.00271 0.706819 -2.53452 -0.740571 -0.287228 0.607499 + 1.00697 0.791935 -2.498 -0.512016 -0.260521 0.818516 + 1.01579 0.628792 -2.60633 -0.824134 -0.0222522 -0.565958 + 1.00978 0.626076 -2.59102 -0.952397 -0.113574 -0.282916 + 1.0081 0.624545 -2.58153 -0.980802 -0.192541 -0.0308912 + 1.0097 0.623214 -2.57178 -0.895208 -0.292463 0.336256 + 1.02585 0.630909 -2.6156 -0.561691 0.0751339 -0.823928 + 1.02995 0.543948 -2.62785 -0.809956 -0.125098 -0.572994 + 1.02685 0.542552 -2.61998 -0.926257 -0.225626 -0.301896 + 1.02518 0.541021 -2.61049 -0.947032 -0.316871 -0.0521857 + 1.026 0.540337 -2.60548 -0.860336 -0.419876 0.28901 + 1.0464 0.633785 -2.62479 -0.267439 0.132618 -0.954405 + 1.05057 0.547545 -2.64185 -0.268027 0.0477455 -0.962227 + 1.04 0.546065 -2.63712 -0.544351 -0.00889653 -0.83881 + 1.04974 0.502079 -2.63603 -0.422816 -0.686006 -0.592134 + 1.04665 0.500682 -2.62816 -0.554379 -0.805867 -0.207947 + 1.0603 0.635021 -2.62623 0.0989327 0.158535 -0.982384 + 1.06447 0.54878 -2.64328 0.112793 0.0671725 -0.991345 + 1.06031 0.503558 -2.64075 0.00466642 -0.612756 -0.790258 + 1.07647 0.635409 -2.62083 0.465277 0.146974 -0.872878 + 1.07278 0.548979 -2.6405 0.460168 0.0463376 -0.886622 + 1.06862 0.503757 -2.63797 0.433434 -0.630586 -0.643814 + 1.04747 0.499998 -2.62314 -0.470179 -0.872482 0.133066 + 1.03266 0.539402 -2.59588 -0.688048 -0.482461 0.542053 + 1.08626 0.635036 -2.61347 0.722361 0.106177 -0.683317 + 1.08257 0.548607 -2.63315 0.722697 -0.00993789 -0.691094 + 1.0736 0.503052 -2.63077 0.65789 -0.698827 -0.280752 + 1.05569 0.499412 -2.61513 -0.147125 -0.899693 0.410983 + 1.08934 0.722745 -2.59886 0.72634 0.0638904 -0.68436 + 1.09595 0.633667 -2.59945 0.92152 0.0295302 -0.387206 + 1.08755 0.547902 -2.62594 0.906116 -0.0936436 -0.412535 + 1.09027 0.546235 -2.61337 0.976583 -0.203776 -0.0690043 + 1.07232 0.501492 -2.6209 0.583831 -0.802985 0.11982 + 1.09904 0.721375 -2.58483 0.919627 0.0253546 -0.391973 + 1.09868 0.632 -2.58687 0.99689 -0.0619245 -0.0487428 + 1.08899 0.544675 -2.60351 0.934364 -0.294293 0.200884 + 1.08432 0.542717 -2.59263 0.791187 -0.393912 0.467821 + 1.06726 0.500393 -2.61599 0.293305 -0.877701 0.378963 + 1.10334 0.71874 -2.56495 0.998754 -0.031418 -0.0387635 + 1.09617 0.628966 -2.56769 0.958432 -0.148798 0.243447 + 1.0915 0.627008 -2.55681 0.820517 -0.23856 0.519462 + 1.07925 0.541618 -2.58772 0.521297 -0.480539 0.705217 + 1.10084 0.715706 -2.54576 0.963889 -0.0867574 0.251776 + 1.09345 0.712609 -2.52855 0.824137 -0.154241 0.544984 + 1.08166 0.624867 -2.54726 0.530313 -0.329002 0.781362 + 1.06941 0.623335 -2.54301 0.227654 -0.374912 0.898674 + 1.06701 0.540086 -2.58347 0.22201 -0.524586 0.821901 + 1.10189 0.803559 -2.52927 0.963508 -0.0936371 0.250766 + 1.0945 0.800461 -2.51207 0.830416 -0.152188 0.535956 + 1.08361 0.710468 -2.51901 0.537032 -0.224469 0.813148 + 1.11079 0.899823 -2.51437 0.971224 -0.157704 0.178472 + 1.10344 0.895543 -2.48919 0.852377 -0.221128 0.473873 + 1.08077 0.797475 -2.49876 0.531209 -0.210876 0.820578 + 1.0614 0.795053 -2.49203 0.216387 -0.231473 0.948471 + 1.06424 0.708045 -2.51229 0.220171 -0.267296 0.938124 + 1.12641 1.00262 -2.48896 0.966955 -0.19798 0.160628 + 1.11906 0.99834 -2.46379 0.923091 -0.248697 0.293349 + 1.08971 0.892558 -2.47588 0.513149 -0.276033 0.812701 + 1.14487 1.08771 -2.51268 0.981384 -0.178742 -0.0702674 + 1.14009 1.08092 -2.46934 0.964278 -0.230723 0.13013 + 1.13367 1.07878 -2.43703 0.929718 -0.269078 0.251437 + 1.11163 0.995224 -2.44649 0.656345 -0.339259 0.67388 + 1.15628 1.13553 -2.49358 0.97966 -0.196767 -0.039355 + 1.15085 1.13817 -2.44417 0.960349 -0.237198 0.146514 + 1.14443 1.13603 -2.41186 0.924564 -0.272338 0.266483 + 1.12625 1.07567 -2.41973 0.63928 -0.37914 0.66901 + 1.08301 0.991956 -2.43864 0.148433 -0.315211 0.937342 + 1.16746 1.19466 -2.47423 0.983086 -0.183135 -0.00209252 + 1.16203 1.19729 -2.42483 0.967483 -0.199114 0.155979 + 1.15392 1.18608 -2.39687 0.932199 -0.23209 0.277739 + 1.1364 1.13472 -2.39265 0.612832 -0.36903 0.698751 + 1.18124 1.2638 -2.45652 0.994293 -0.0962252 0.0460668 + 1.17078 1.25956 -2.40942 0.97265 -0.104292 0.207548 + 1.16267 1.24834 -2.38147 0.927814 -0.166154 0.333996 + 1.14588 1.18477 -2.37766 0.679575 -0.334967 0.652667 + 1.10035 1.13172 -2.38429 0.143664 -0.416404 0.897758 + 1.17934 1.31858 -2.44536 0.984294 0.13707 0.111249 + 1.16889 1.31433 -2.39827 0.9439 0.193923 0.267294 + 1.16229 1.3028 -2.37069 0.906753 0.132379 0.400344 + 1.16159 1.27016 -2.37019 0.904673 -0.0830735 0.41793 + 1.1448 1.20659 -2.36638 0.634223 -0.301725 0.711845 + 1.17577 1.33363 -2.48915 0.981536 0.163274 -0.0996451 + 1.16392 1.37191 -2.43618 0.927317 0.317474 0.198224 + 1.1542 1.34868 -2.39596 0.889209 0.310727 0.335792 + 1.1476 1.33715 -2.36837 0.885633 0.29452 0.359044 + 1.16035 1.38697 -2.47996 0.874099 0.472542 -0.112492 + 1.14797 1.4016 -2.42365 0.816306 0.520095 0.251286 + 1.13825 1.37837 -2.38343 0.879846 0.321204 0.350283 + 1.1388 1.35386 -2.35816 0.908964 0.309905 0.278824 + 1.12271 1.42414 -2.49449 0.77297 0.613209 -0.162766 + 1.14345 1.41591 -2.45904 0.745012 0.666919 -0.0132562 + 1.12521 1.41402 -2.39556 0.350047 0.839597 0.415385 + 1.12732 1.39703 -2.37291 0.529964 0.647941 0.547092 + 1.12788 1.37252 -2.34763 0.633704 0.60949 0.476384 + 1.10958 1.43727 -2.53091 0.807849 0.589261 -0.0123 + 1.10257 1.4502 -2.51064 0.299789 0.941673 0.152899 + 1.1157 1.43707 -2.47422 0.296098 0.947993 0.116767 + 1.12068 1.42832 -2.43095 0.202895 0.94604 0.252669 + 1.0872 1.45862 -2.55028 -0.101398 0.902043 0.419567 + 1.0651 1.43849 -2.51953 -0.365941 0.850762 0.377215 + 1.08047 1.43007 -2.47989 -0.400776 0.844491 0.355264 + 1.08827 1.42286 -2.45185 -0.426107 0.859088 0.283549 + 1.09325 1.41411 -2.40858 -0.415227 0.863527 0.286196 + 1.07211 1.46623 -2.58029 -0.266725 0.903942 0.334284 + 1.05158 1.44868 -2.55174 -0.321343 0.865676 0.383853 + 1.03239 1.39605 -2.46553 -0.310864 0.836032 0.452122 + 1.04273 1.38481 -2.43909 -0.428083 0.807162 0.406491 + 1.05053 1.3776 -2.41105 -0.56815 0.769207 0.292449 + 1.05477 1.46814 -2.60152 -0.0989378 0.98452 0.144679 + 1.03424 1.45059 -2.57296 -0.239177 0.872383 0.426313 + 1.01887 1.40624 -2.49774 -0.296905 0.851189 0.43281 + 1.01012 1.45852 -2.59516 -0.193792 0.797486 0.571367 + 1.00783 1.42542 -2.53927 -0.193781 0.858121 0.475477 + 0.989471 1.40881 -2.51649 0.00476487 0.906329 0.422545 + 1.00051 1.38963 -2.47497 -0.0955533 0.897131 0.431307 + 0.945825 1.4539 -2.59787 -0.0250903 0.822875 0.567669 + 0.983706 1.43335 -2.56148 -0.110033 0.853487 0.509366 + 0.97287 1.42479 -2.54844 0.0404528 0.903227 0.427253 + 0.966778 1.42428 -2.54303 0.380226 0.893452 0.239106 + 0.983379 1.4083 -2.51108 0.336158 0.889576 0.309279 + 0.934989 1.44534 -2.58484 0.390867 0.828509 0.400994 + 0.953587 1.43266 -2.53555 0.603205 0.790734 0.104323 + 0.958541 1.41872 -2.50155 0.537446 0.790063 0.294878 + 0.992297 1.39131 -2.47694 0.263415 0.883641 0.387029 + 0.921798 1.45373 -2.57736 0.507489 0.845633 0.165406 + 0.920107 1.45833 -2.51853 0.542512 0.832478 0.112524 + 0.925061 1.44439 -2.48453 0.558694 0.691864 0.457368 + 0.915893 1.4166 -2.44975 0.316288 0.703462 0.636477 + 0.967459 1.40174 -2.46741 0.423473 0.820583 0.383816 + 0.897632 1.47042 -2.52947 0.392928 0.916927 0.0696626 + 0.896257 1.46308 -2.48865 0.221543 0.858125 0.463184 + 0.925289 1.40173 -2.43285 0.137979 0.919375 0.36839 + 0.869045 1.47487 -2.50963 -0.481698 0.812999 0.327109 + 0.976856 1.38687 -2.4505 0.376357 0.853843 0.359594 + 0.979449 1.38329 -2.44266 0.323786 0.929389 0.177196 + 0.996782 1.38135 -2.45573 0.215565 0.906702 0.362523 + 0.926061 1.40019 -2.41319 0.10809 0.988204 -0.108484 + 0.980221 1.38175 -2.42299 0.400273 0.912347 0.0860484 + 0.999376 1.37777 -2.44788 0.224358 0.929167 0.293788 + 1.00499 1.37967 -2.45376 -0.0919162 0.894453 0.437612 + 0.900157 1.40875 -2.39705 -0.392869 0.91051 -0.128943 + 0.951625 1.39691 -2.37665 0.405354 0.911567 0.0687989 + 0.990394 1.37137 -2.39786 0.505034 0.851674 0.139969 + 1.0063 1.37149 -2.43335 0.249941 0.925642 0.284107 + 1.01192 1.37339 -2.43923 -0.121277 0.893529 0.432317 + 0.904923 1.3998 -2.35364 -0.546584 0.695006 0.467132 + 0.925721 1.40547 -2.36051 0.166479 0.943247 0.287351 + 0.934407 1.38854 -2.33714 0.154179 0.776337 0.611171 + 0.965906 1.38361 -2.34665 0.442761 0.835566 0.325258 + 0.913609 1.38287 -2.33026 -0.427888 0.509488 0.746548 + 0.934902 1.34106 -2.30356 -0.36947 0.224604 0.90169 + 0.953642 1.32882 -2.2948 -0.261363 0.113784 0.95851 + 0.953148 1.3763 -2.32838 0.178339 0.705545 0.685858 + 1.00133 1.34122 -2.31349 0.581175 0.611366 0.537091 + 1.00467 1.35807 -2.36786 0.560645 0.797741 0.222008 + 0.923982 1.32046 -2.31195 -0.564815 -0.21977 0.795415 + 0.964126 1.2872 -2.29852 -0.272026 -0.322621 0.906596 + 0.98857 1.33391 -2.29523 0.3075 0.366199 0.878261 + 0.999054 1.29229 -2.29894 0.202249 -0.194391 0.959848 + 1.03163 1.2676 -2.31336 0.0884451 -0.287302 0.953748 + 1.01635 1.33292 -2.32115 0.246751 0.578691 0.777323 + 1.0197 1.34977 -2.37551 0.301769 0.900714 0.312488 + 1.02274 1.35574 -2.39516 0.202451 0.942425 0.266175 + 1.02766 1.18516 -2.35767 0.0305372 -0.452893 0.891042 + 1.09442 1.18844 -2.3562 0.157629 -0.433256 0.88738 + 1.11827 1.21179 -2.35083 0.331964 -0.368864 0.868182 + 1.05547 1.29095 -2.308 -0.0301127 -0.185052 0.982267 + 1.04089 1.3488 -2.32091 -0.507567 0.665734 0.546968 + 1.03359 1.12844 -2.38576 -0.0801297 -0.444578 0.892149 + 1.12305 1.27855 -2.33621 0.393966 -0.259332 0.881781 + 1.0902 1.07266 -2.41137 0.119314 -0.380754 0.916946 + 1.02105 0.987635 -2.44024 -0.154308 -0.278709 0.947898 + 1.0297 0.886628 -2.46568 -0.103472 -0.260766 0.959841 + 1.06108 0.889287 -2.46803 0.183974 -0.274038 0.943958 + 1.03002 0.792394 -2.48968 -0.12729 -0.247442 0.960505 + 1.04174 0.706138 -2.5106 -0.108579 -0.29611 0.948962 + 1.04691 0.621429 -2.54133 -0.105556 -0.398376 0.911128 + 1.01869 0.705681 -2.51892 -0.508879 -0.303801 0.805449 + 1.03234 0.621138 -2.54659 -0.488823 -0.386644 0.782022 + 1.05544 0.539107 -2.5826 -0.0808367 -0.541862 0.836571 + 1.01635 0.62228 -2.56218 -0.730254 -0.346054 0.589046 + 1.04087 0.538816 -2.58787 -0.468016 -0.521579 0.713384 + 1.02226 1.36215 -2.41278 -0.155148 0.896973 0.413967 + 1.02852 1.35678 -2.39971 -0.28 0.90287 0.32623 + 1.05104 1.3772 -2.40825 -0.622327 0.746934 0.23409 + 1.01648 1.3611 -2.40822 0.267526 0.927142 0.26237 + 1.02904 1.35638 -2.39692 -0.355279 0.908303 0.220823 + 1.05053 1.3663 -2.37704 -0.604503 0.774731 0.185385 + 1.09274 1.4032 -2.37737 -0.291054 0.854274 0.430702 + 1.09486 1.38622 -2.35472 -0.0296707 0.815359 0.578194 + 1.10435 1.37495 -2.33329 0.135446 0.80219 0.581503 + 1.13502 1.34588 -2.32554 0.785912 0.247448 0.566667 + 1.05038 1.33753 -2.29949 -0.531035 0.271629 0.802633 + 1.11149 1.3483 -2.31119 0.291618 0.4455 0.846457 + 1.026 1.35042 -2.37727 -0.289128 0.927375 0.237444 + 1.11603 1.3317 -2.30933 0.439293 -0.140627 0.887269 + 1.05491 1.32093 -2.29762 -0.377026 -0.174552 0.909606 + 1.12248 1.30853 -2.32584 0.517317 -0.279085 0.809008 + 1.14148 1.32271 -2.34204 0.858726 0.0330041 0.511372 + 1.15027 1.30599 -2.35226 0.805698 0.0997527 0.583866 + 1.14957 1.27336 -2.35176 0.685183 -0.13648 0.71547 + -0.872043 1.89298 -1.22862 0.906308 0.309655 -0.287609 + -0.870466 1.89166 -1.22009 0.991227 0.124971 0.0430212 + -0.875993 1.86509 -1.23433 0.963138 -0.268909 -0.00727253 + -0.878416 1.90396 -1.21984 0.682344 0.718651 -0.133966 + -0.876839 1.90264 -1.21131 0.798859 0.588623 0.123882 + -0.873278 1.89039 -1.20845 0.877273 -0.0865625 0.472121 + -0.878806 1.86382 -1.22269 0.80529 -0.438182 0.39938 + -0.878324 1.8668 -1.24714 0.923999 -0.0316581 -0.381081 + -0.878844 1.8951 -1.23876 0.630611 0.522384 -0.573974 + -0.881941 1.90506 -1.22509 0.505147 0.792278 -0.342232 + -0.890991 1.82377 -1.25843 0.98238 -0.186885 0.00167389 + -0.893321 1.82549 -1.27123 0.92697 0.0239723 -0.374368 + -0.885126 1.86893 -1.25728 0.665671 0.256176 -0.700896 + -0.887826 1.89661 -1.24271 0.263853 0.670355 -0.693546 + -0.890922 1.90658 -1.22905 0.207468 0.850413 -0.483482 + -0.89469 1.82278 -1.24289 0.816384 -0.373652 0.440341 + -0.896376 1.771 -1.26494 0.873595 -0.112767 0.473409 + -0.892676 1.772 -1.28048 0.997121 0.0667434 0.035995 + -0.895936 1.77431 -1.29849 0.912621 0.230447 -0.337665 + -0.902286 1.82802 -1.2849 0.63934 0.29314 -0.710854 + -0.904845 1.82269 -1.23241 0.494555 -0.435937 0.751914 + -0.910577 1.77123 -1.25016 0.535428 -0.248437 0.807215 + -0.886475 1.71007 -1.2832 0.871928 -0.0515183 0.486916 + -0.88112 1.71182 -1.3056 0.990685 0.130028 0.0404335 + -0.88438 1.71413 -1.3236 0.912671 0.289861 -0.288119 + -0.88896 1.86373 -1.21221 0.483747 -0.495917 0.721148 + -0.903325 1.86447 -1.20606 0.132739 -0.436019 0.890094 + -0.924168 1.82424 -1.22396 0.108913 -0.391933 0.913524 + -0.9299 1.77278 -1.24171 0.142829 -0.285525 0.947668 + -0.880026 1.89016 -1.20144 0.579182 -0.214051 0.786594 + -0.89439 1.89091 -1.19529 0.162861 -0.23394 0.958514 + -0.90428 1.89206 -1.19567 -0.285973 -0.110498 0.951845 + -0.918214 1.86636 -1.2066 -0.333127 -0.221324 0.916538 + -0.878296 1.90197 -1.20528 0.783152 0.41717 0.461132 + -0.885044 1.90176 -1.19827 0.539733 0.162079 0.826086 + -0.89249 1.90214 -1.19508 0.214635 0.115231 0.969873 + -0.902379 1.90329 -1.19545 -0.289263 0.279122 0.915651 + -0.915198 1.89422 -1.20284 -0.647449 0.106059 0.754693 + -0.885643 1.90921 -1.20591 0.42256 0.901865 0.0898981 + -0.8871 1.90855 -1.19987 0.43175 0.7354 0.522282 + -0.894546 1.90894 -1.19668 0.0793515 0.716269 0.693298 + -0.900206 1.91005 -1.20039 -0.135364 0.87971 0.455837 + -0.908039 1.90442 -1.19917 -0.53612 0.404426 0.740955 + -0.889304 1.90999 -1.20868 0.215372 0.972149 0.0924182 + -0.887159 1.91034 -1.21301 0.493206 0.851323 0.178879 + -0.902818 1.91189 -1.21188 -0.138249 0.990397 -0.000590168 + -0.904962 1.91155 -1.20754 -0.246723 0.962109 0.116081 + -0.903867 1.91083 -1.20316 -0.236963 0.89282 0.383042 + -0.913211 1.9058 -1.20534 -0.67462 0.574165 0.463921 + -0.890685 1.91144 -1.21827 0.242829 0.956785 -0.159989 + -0.899021 1.91234 -1.21824 -0.0579772 0.985062 -0.162145 + -0.912241 1.90737 -1.21786 -0.545397 0.824269 -0.152059 + -0.914307 1.90651 -1.20973 -0.679593 0.722295 0.128231 + -0.899259 1.90748 -1.22901 -0.0452893 0.874012 -0.48379 + -0.908445 1.90781 -1.22421 -0.382049 0.863201 -0.330035 + -0.920418 1.89784 -1.2256 -0.698801 0.678636 -0.226122 + -0.922484 1.89698 -1.21745 -0.821951 0.564428 0.0762759 + -0.920371 1.8956 -1.209 -0.811236 0.318425 0.490409 + -0.903908 1.89837 -1.24266 -0.0996361 0.746249 -0.658168 + -0.913094 1.8987 -1.23785 -0.449539 0.75322 -0.480181 + -0.935862 1.8728 -1.2436 -0.734935 0.627395 -0.257385 + -0.938796 1.87199 -1.23129 -0.856756 0.510932 0.070134 + -0.936683 1.87061 -1.22284 -0.833461 0.274293 0.479694 + -0.898674 1.87111 -1.26329 0.247186 0.504264 -0.827416 + -0.914757 1.87286 -1.26323 -0.126644 0.629636 -0.766498 + -0.928538 1.87366 -1.25585 -0.512226 0.675654 -0.530204 + -0.961024 1.83316 -1.2666 -0.810346 0.510056 -0.288413 + -0.963958 1.83235 -1.2543 -0.919178 0.391394 0.0438425 + -0.915835 1.83019 -1.29091 0.233277 0.472791 -0.849736 + -0.937617 1.83285 -1.29074 -0.171827 0.568522 -0.804524 + -0.951398 1.83367 -1.28336 -0.572521 0.576395 -0.583084 + -0.904902 1.77684 -1.31216 0.636783 0.383808 -0.668729 + -0.923847 1.78005 -1.32045 0.226508 0.47211 -0.851943 + -0.94563 1.78271 -1.32028 -0.181963 0.492792 -0.850909 + -0.964985 1.78391 -1.3099 -0.639266 0.428759 -0.638361 + -0.897349 1.7179 -1.34324 0.626536 0.441472 -0.642305 + -0.916294 1.72112 -1.35154 0.237272 0.482735 -0.843012 + -0.947541 1.72482 -1.35133 -0.21631 0.420502 -0.881129 + -0.966896 1.726 -1.34095 -0.635336 0.344638 -0.691067 + -0.974611 1.7834 -1.29314 -0.883852 0.322957 -0.338385 + -0.869117 1.64944 -1.35508 0.96164 0.229512 -0.150244 + -0.882085 1.65322 -1.37472 0.737273 0.457839 -0.496801 + -0.898097 1.66592 -1.38022 0.34574 0.527152 -0.776257 + -0.929344 1.6696 -1.38002 -0.174811 0.420133 -0.890466 + -0.875055 1.65277 -1.32577 0.976768 0.0268427 0.212611 + -0.861878 1.58725 -1.38164 0.810577 0.58253 0.0601896 + -0.847109 1.57183 -1.41682 0.606951 0.544404 -0.578994 + -0.863122 1.58453 -1.42233 0.2779 0.460555 -0.843007 + -0.88041 1.65102 -1.30338 0.863869 -0.111854 0.491141 + -0.884443 1.60108 -1.31182 0.726892 0.579662 0.368266 + -0.867816 1.59058 -1.35233 0.791151 0.604791 0.0911428 + -0.838959 1.57718 -1.37458 -0.0929606 0.915269 -0.39197 + -0.904427 1.65354 -1.28173 0.504421 -0.221484 0.834568 + -0.90846 1.6036 -1.29017 0.351924 0.557286 0.752052 + -0.880133 1.59288 -1.26871 0.437136 0.885603 -0.156908 + -0.86893 1.59311 -1.27569 -0.345372 0.881904 0.320881 + -0.870447 1.59662 -1.30624 -0.182747 0.976742 -0.112155 + -0.900676 1.7103 -1.26843 0.566795 -0.183282 0.803213 + -0.932203 1.65554 -1.26966 0.248465 -0.263881 0.932004 + -0.950853 1.59833 -1.28282 0.0634073 0.500791 0.863243 + -0.908318 1.60006 -1.27887 0.0903891 0.971264 -0.220174 + -0.928452 1.71229 -1.25636 0.179959 -0.215087 0.959871 + -0.966784 1.65206 -1.26669 -0.179798 -0.0784023 0.980574 + -0.985434 1.59485 -1.27985 0.0396224 0.37881 0.924626 + -0.95071 1.59479 -1.27152 -0.189605 0.935081 -0.299456 + -0.950772 1.77543 -1.24251 -0.353209 -0.232864 0.9061 + -0.949324 1.71495 -1.25716 -0.30387 -0.149123 0.94097 + -0.987782 1.65617 -1.28064 -0.572072 0.200185 0.795399 + -1.02909 1.58369 -1.27341 -0.486597 0.588652 0.645532 + -0.986353 1.58749 -1.26568 -0.283168 0.945129 -0.162931 + -0.939057 1.82614 -1.2245 -0.353492 -0.224564 0.908083 + -0.95363 1.82897 -1.23424 -0.681336 -0.0257633 0.731517 + -0.965345 1.77828 -1.25224 -0.682496 -0.133003 0.718686 + -0.970322 1.71906 -1.2711 -0.666648 -0.0469242 0.743895 + -1.00127 1.65438 -1.2915 -0.823559 0.305949 0.477646 + -0.929133 1.86853 -1.21377 -0.659105 0.0268868 0.75157 + -0.96118 1.83107 -1.24331 -0.869195 0.177609 0.46147 + -0.976077 1.78081 -1.26509 -0.896511 0.00725937 0.442961 + -0.981054 1.7216 -1.28396 -0.886765 0.072845 0.456445 + -0.978855 1.78209 -1.27609 -0.982353 0.185872 0.0208488 + -0.985075 1.72368 -1.29993 -0.97906 0.203571 0.00074545 + -1.00529 1.65647 -1.30746 -0.954991 0.288837 -0.0675579 + -1.02939 1.58151 -1.30581 -0.802917 0.410275 -0.432433 + -1.04258 1.58189 -1.28426 -0.819923 0.552277 0.150722 + -0.980832 1.72499 -1.31697 -0.891432 0.267849 -0.36552 + -0.993663 1.65649 -1.33417 -0.860176 0.273327 -0.430569 + -0.979727 1.6575 -1.35814 -0.677031 0.312093 -0.666503 + -0.99587 1.58131 -1.37529 -0.700148 0.312471 -0.641993 + -1.01775 1.58153 -1.33251 -0.862554 0.302415 -0.405643 + -0.945141 1.64544 -1.38566 -0.364868 0.352261 -0.861849 + -0.961283 1.56924 -1.40281 -0.412822 0.280314 -0.866603 + -0.959292 1.50938 -1.42342 -0.340609 0.325865 -0.881928 + -1.01072 1.52239 -1.39266 -0.605649 0.402589 -0.686376 + -1.03261 1.52261 -1.34987 -0.674224 0.515633 -0.528719 + -0.878919 1.56037 -1.42798 -0.195071 0.310706 -0.930274 + -0.876928 1.5005 -1.44858 -0.144409 0.311681 -0.939149 + -0.91434 1.41689 -1.47011 -0.156472 0.311528 -0.937266 + -0.963096 1.45929 -1.44114 -0.315615 0.356528 -0.87936 + -1.01453 1.4723 -1.41038 -0.425182 0.364873 -0.828304 + -0.846034 1.46578 -1.46154 0.233616 0.241625 -0.941828 + -0.883447 1.38217 -1.48305 0.124474 0.13202 -0.983401 + -0.898388 1.34766 -1.48767 0.123335 -0.0950757 -0.9878 + -0.917624 1.35307 -1.48944 -0.00480222 -0.000494099 -0.999988 + -0.931404 1.37385 -1.48235 -0.146305 0.292848 -0.944899 + -0.825578 1.46091 -1.45214 0.562182 0.189546 -0.804999 + -0.858552 1.35956 -1.47319 0.409302 -0.0362143 -0.91168 + -0.873494 1.32504 -1.47781 0.291707 -0.289544 -0.911631 + -0.905805 1.32772 -1.47999 0.00711285 -0.419096 -0.907914 + -0.800462 1.47952 -1.42216 0.661257 0.205826 -0.72137 + -0.801622 1.36272 -1.44547 0.660726 -0.0894884 -0.745274 + -0.838096 1.3547 -1.4638 0.431881 -0.0956025 -0.896849 + -0.847121 1.30088 -1.4556 0.404243 -0.428369 -0.808139 + -0.878787 1.29238 -1.45967 0.135536 -0.536607 -0.832876 + -0.82419 1.56177 -1.40977 0.337066 0.553259 -0.761768 + -0.797539 1.54957 -1.40402 0.52542 0.33391 -0.782584 + -0.747944 1.46971 -1.36831 0.844839 0.0521338 -0.532475 + -0.776506 1.38133 -1.41549 0.844492 -0.077987 -0.52986 + -0.81319 1.62786 -1.33727 -0.337585 0.68048 -0.650372 + -0.796629 1.62009 -1.34554 0.206189 0.637418 -0.742418 + -0.769978 1.60789 -1.33978 0.543432 0.457793 -0.703638 + -0.745021 1.53976 -1.35016 0.834634 0.182101 -0.519833 + -0.853821 1.58612 -1.34676 -0.128819 0.933463 -0.334743 + -0.828052 1.63679 -1.30945 -0.693575 0.576219 -0.432348 + -0.810805 1.6878 -1.27831 -0.72497 0.464106 -0.508944 + -0.799337 1.68411 -1.29216 -0.350305 0.581457 -0.734298 + -0.782775 1.67633 -1.30044 0.167974 0.577252 -0.799103 + -0.838414 1.63727 -1.28553 -0.833488 0.531842 -0.149804 + -0.821167 1.68827 -1.25439 -0.948822 0.280937 -0.144264 + -0.815791 1.74438 -1.22561 -0.951264 0.268122 -0.152338 + -0.808645 1.74381 -1.24229 -0.747752 0.428121 -0.507523 + -0.797176 1.7401 -1.25615 -0.399648 0.532433 -0.746188 + -0.836896 1.63376 -1.25498 -0.888111 0.302075 0.346423 + -0.820232 1.68161 -1.23398 -0.957166 0.0693887 0.281101 + -0.824419 1.61758 -1.23136 -0.776615 0.159603 0.609423 + -0.807755 1.66545 -1.21036 -0.814483 -0.0830342 0.574216 + -0.806145 1.72636 -1.18875 -0.832721 -0.106153 0.543422 + -0.814856 1.73774 -1.2052 -0.961599 0.0447122 0.270793 + -0.850108 1.57875 -1.2451 -0.318682 0.693232 0.64643 + -0.835122 1.56096 -1.22364 -0.173449 0.690433 0.702295 + -0.809434 1.59979 -1.20989 -0.461089 -0.0244787 0.887016 + -0.796131 1.65424 -1.19988 -0.500294 -0.183112 0.846272 + -0.861311 1.57852 -1.23812 0.733863 0.679289 -0.00336986 + -0.849239 1.56173 -1.2133 0.777123 0.629332 0.0044704 + -0.8172 1.54075 -1.19538 0.0108935 0.571457 0.82056 + -0.794672 1.59027 -1.20888 -0.164164 0.049896 0.98517 + -0.781369 1.64472 -1.19888 0.0255952 -0.226581 0.973656 + -0.87211 1.63319 -1.23201 0.695116 0.40654 -0.592907 + -0.857655 1.61714 -1.21114 0.903617 0.223761 -0.365251 + -0.845582 1.60035 -1.18631 0.984695 0.170564 -0.0358382 + -0.831316 1.54152 -1.18504 0.775414 0.236603 0.58545 + -0.900294 1.64037 -1.24217 0.225142 0.590236 -0.775198 + -0.895755 1.68979 -1.20754 0.258425 0.552647 -0.792336 + -0.873755 1.68132 -1.19933 0.706402 0.434756 -0.558555 + -0.8593 1.66527 -1.17846 0.935592 0.270435 -0.227009 + -0.937101 1.64394 -1.24057 -0.1319 0.592101 -0.794996 + -0.932562 1.69336 -1.20595 -0.127838 0.56311 -0.816434 + -0.929618 1.74917 -1.16933 -0.134395 0.560104 -0.817448 + -0.903856 1.7466 -1.17053 0.228236 0.535647 -0.813013 + -0.881855 1.73813 -1.16231 0.695428 0.406208 -0.592768 + -0.972744 1.63665 -1.23472 -0.516066 0.56559 -0.64326 + -0.95376 1.69237 -1.19926 -0.514852 0.532319 -0.671985 + -0.950816 1.74817 -1.16265 -0.54821 0.518082 -0.656549 + -0.921356 1.79703 -1.13685 -0.137817 0.605058 -0.784163 + -0.895594 1.79447 -1.13804 0.230032 0.510906 -0.828288 + -0.985381 1.63085 -1.22063 -0.705974 0.603704 -0.370328 + -0.966397 1.68657 -1.18517 -0.872173 0.383358 -0.303894 + -0.95951 1.7442 -1.1529 -0.878662 0.362855 -0.310305 + -0.945054 1.79252 -1.1222 -0.826534 0.520191 -0.215043 + -0.93636 1.7965 -1.13195 -0.517403 0.627547 -0.581789 + -1.03001 1.57633 -1.25923 -0.575224 0.816809 -0.044055 + -1.0336 1.58068 -1.23618 -0.825629 0.542276 0.155799 + -0.988965 1.63519 -1.19758 -0.863934 0.503604 -0.0010976 + -0.970598 1.67943 -1.1668 -0.972993 0.229908 0.0206435 + -1.0855 1.52355 -1.28503 -0.72666 0.68691 0.0109257 + -1.07278 1.5156 -1.24957 -0.700988 0.495403 0.513022 + -1.03741 1.56026 -1.23476 -0.691879 0.213944 0.689588 + -0.986193 1.62416 -1.16889 -0.877818 0.208357 0.431304 + -0.967825 1.6684 -1.13811 -0.926718 0.0253183 0.374902 + -1.07231 1.52317 -1.30657 -0.63163 0.658588 -0.409031 + -1.1273 1.48199 -1.31873 -0.739385 0.631231 -0.234218 + -1.13437 1.47422 -1.2827 -0.842878 0.500701 0.19712 + -1.12165 1.46626 -1.24724 -0.689001 0.49929 0.525345 + -1.06195 1.51683 -1.33241 -0.530995 0.650958 -0.542492 + -1.11694 1.47565 -1.34457 -0.570321 0.593929 -0.567435 + -1.14774 1.43202 -1.33843 -0.881684 0.283683 -0.377038 + -1.15481 1.42424 -1.30241 -0.959185 0.275677 -0.0629799 + -1.07912 1.46677 -1.37376 -0.469743 0.541887 -0.696921 + -1.08654 1.42099 -1.39583 -0.492779 0.340748 -0.800662 + -1.12435 1.42987 -1.36663 -0.631998 0.330444 -0.700989 + -1.13619 1.36352 -1.37206 -0.836011 0.0723177 -0.543926 + -1.15203 1.37176 -1.33905 -0.949427 0.00150368 -0.313985 + -1.04978 1.47254 -1.39122 -0.510367 0.488991 -0.707399 + -1.05458 1.42328 -1.4134 -0.461849 0.324665 -0.825402 + -1.07643 1.36615 -1.41705 -0.456017 0.238863 -0.857317 + -1.11281 1.36137 -1.40025 -0.631286 0.163749 -0.758066 + -1.01932 1.42304 -1.43253 -0.428746 0.335059 -0.838995 + -1.04447 1.36845 -1.43462 -0.44154 0.212789 -0.871644 + -1.06289 1.32996 -1.4339 -0.433489 0.0534646 -0.899572 + -1.09927 1.32518 -1.4171 -0.566949 -0.13472 -0.812662 + -1.124 1.32265 -1.39441 -0.748603 -0.231306 -0.621362 + -0.999749 1.41196 -1.44675 -0.424941 0.315738 -0.848372 + -1.02934 1.36782 -1.44163 -0.450422 0.213904 -0.866813 + -1.04776 1.32933 -1.44091 -0.303422 -0.169625 -0.937637 + -1.0756 1.31095 -1.42544 -0.359296 -0.502092 -0.786645 + -1.10033 1.30842 -1.40275 -0.512621 -0.65194 -0.558743 + -0.98016 1.41624 -1.45338 -0.313735 0.356921 -0.879874 + -0.983801 1.36316 -1.47119 -0.44886 0.0466153 -0.892385 + -1.00976 1.35673 -1.45584 -0.476266 0.0428696 -0.878255 + -1.0232 1.32438 -1.44257 -0.164124 -0.561058 -0.811343 + -1.05104 1.306 -1.4271 -0.0461919 -0.735399 -0.676058 + -0.964212 1.36744 -1.47782 -0.278073 0.249054 -0.927711 + -0.950432 1.34667 -1.48492 -0.232695 -0.107729 -0.966565 + -0.959516 1.32626 -1.47543 -0.356838 -0.346624 -0.867478 + -0.975488 1.31856 -1.45992 -0.631631 -0.347653 -0.69295 + -0.986845 1.32558 -1.45128 -0.397712 -0.560167 -0.726662 + -0.997242 1.33079 -1.45792 -0.129543 -0.505558 -0.853012 + -0.92504 1.33313 -1.48176 -0.0503172 -0.374275 -0.925951 + -0.934125 1.31272 -1.47229 -0.0393786 -0.431432 -0.901286 + -0.953963 1.27147 -1.45152 -0.264284 -0.525873 -0.808462 + -0.969935 1.26377 -1.436 -0.5675 -0.62204 -0.539453 + -0.998013 1.28192 -1.41023 -0.681843 -0.57079 -0.457481 + -0.911098 1.29504 -1.46185 0.0410974 -0.496129 -0.867276 + -0.930936 1.2538 -1.44108 -0.0590664 -0.697573 -0.714075 + -0.956661 1.2448 -1.41453 -0.432946 -0.8877 -0.15667 + -0.893346 1.23712 -1.42343 0.13856 -0.841047 -0.522915 + -0.919071 1.22812 -1.39687 -0.226062 -0.973651 -0.030003 + -0.964953 1.26802 -1.36961 -0.365829 -0.845304 0.389398 + -0.984739 1.26295 -1.38875 -0.470922 -0.870186 0.144946 + -0.86168 1.24562 -1.41937 0.371123 -0.764703 -0.52678 + -0.89989 1.22817 -1.37247 -0.159891 -0.981796 0.102529 + -0.945771 1.26806 -1.34521 -0.4441 -0.803746 0.39594 + -0.988898 1.28436 -1.35462 -0.193064 -0.899432 0.392108 + -1.00868 1.27929 -1.37378 -0.205944 -0.946629 0.247952 + -0.810647 1.30891 -1.43728 0.663836 -0.38671 -0.640139 + -0.797745 1.30144 -1.40886 0.786186 -0.463423 -0.408841 + -0.848779 1.23816 -1.39094 0.408277 -0.865968 -0.288807 + -0.884292 1.22887 -1.33956 -0.202803 -0.96004 0.192857 + -0.940004 1.27931 -1.31705 -0.474272 -0.783072 0.402324 + -0.781434 1.29574 -1.36206 0.810838 -0.512512 -0.282618 + -0.833181 1.23887 -1.35803 0.484309 -0.865139 -0.130303 + -0.868618 1.23326 -1.31297 -0.10185 -0.938913 0.328737 + -0.92433 1.28369 -1.29046 -0.48995 -0.794124 0.359606 + -0.969913 1.30349 -1.30289 -0.26035 -0.878781 0.399952 + -0.760195 1.37562 -1.3687 0.893713 -0.185094 -0.408676 + -0.744214 1.35836 -1.33319 0.945043 -0.275886 -0.175448 + -0.769769 1.30105 -1.3271 0.854378 -0.519446 -0.014623 + -0.821516 1.24417 -1.32307 0.499518 -0.864519 0.0555766 + -0.731964 1.45244 -1.3328 0.992013 -0.0319239 -0.122028 + -0.742543 1.37551 -1.30253 0.966831 -0.210614 0.144497 + -0.768097 1.31819 -1.29644 0.892271 -0.438289 0.108423 + -0.804387 1.25859 -1.2947 0.630796 -0.774476 0.0477846 + -0.851488 1.24768 -1.28461 -0.067139 -0.931338 0.357913 + -0.731258 1.53341 -1.31358 0.998527 -0.0148241 0.0521915 + -0.741959 1.47673 -1.30362 0.901197 -0.00626066 0.433365 + -0.737625 1.4509 -1.30698 0.948698 0.0533647 0.311649 + -0.748204 1.37398 -1.2767 0.956536 -0.145545 0.252698 + -0.73042 1.58921 -1.28664 0.996852 -0.0416892 -0.0674328 + -0.754843 1.53399 -1.27322 0.864178 -0.240312 0.442093 + -0.765543 1.47731 -1.26327 0.86311 0.0311546 0.504054 + -0.771192 1.37805 -1.22652 0.854608 0.073574 0.514034 + -0.766858 1.35223 -1.22987 0.887648 -0.0364215 0.459079 + -0.744183 1.59556 -1.32321 0.797809 0.277038 -0.535491 + -0.73886 1.65542 -1.28029 0.804516 0.334796 -0.490577 + -0.729767 1.64655 -1.26158 0.988651 0.118691 -0.0920931 + -0.735051 1.58088 -1.25955 0.924088 -0.288213 0.250988 + -0.764655 1.66775 -1.29685 0.51872 0.478771 -0.708313 + -0.767748 1.72589 -1.25841 0.507052 0.46029 -0.728719 + -0.749705 1.71721 -1.2469 0.781544 0.341015 -0.522396 + -0.740612 1.70835 -1.2282 0.98953 0.115902 -0.0860029 + -0.734398 1.63822 -1.23451 0.936057 -0.0757107 0.343605 + -0.785869 1.73448 -1.26199 0.104175 0.541907 -0.833957 + -0.775806 1.7833 -1.22897 0.112083 0.538153 -0.835361 + -0.762937 1.77707 -1.22652 0.484678 0.387595 -0.784129 + -0.744894 1.76839 -1.21501 0.779226 0.193029 -0.596278 + -0.787113 1.78893 -1.22313 -0.34934 0.613948 -0.707834 + -0.755451 1.82303 -1.20038 0.1374 0.551877 -0.822528 + -0.742583 1.81679 -1.19792 0.497042 0.347328 -0.795181 + -0.729409 1.81058 -1.18933 0.77529 0.121646 -0.619781 + -0.73841 1.76216 -1.20164 0.97978 -0.0917826 -0.177783 + -0.795407 1.79133 -1.21336 -0.658041 0.586085 -0.472744 + -0.764379 1.82667 -1.19626 -0.277715 0.681506 -0.677069 + -0.741745 1.84601 -1.18167 0.204181 0.659839 -0.723134 + -0.733057 1.84215 -1.17988 0.514365 0.496153 -0.699472 + -0.802553 1.79192 -1.19667 -0.882195 0.461421 -0.0939292 + -0.772673 1.82908 -1.18649 -0.579913 0.69253 -0.429073 + -0.750673 1.84965 -1.17755 -0.188094 0.794018 -0.578062 + -0.743052 1.85483 -1.16918 0.00447195 0.913352 -0.407147 + -0.738424 1.85294 -1.17131 0.27292 0.812698 -0.514817 + -0.801975 1.78702 -1.18221 -0.911946 0.234796 0.336491 + -0.778137 1.82888 -1.1742 -0.800014 0.597594 -0.0534719 + -0.756334 1.85098 -1.17113 -0.449576 0.819039 -0.35645 + -0.793264 1.77565 -1.16576 -0.782719 0.0284441 0.621725 + -0.777559 1.82398 -1.15972 -0.844614 0.357656 0.398383 + -0.761798 1.85078 -1.15885 -0.657911 0.752358 0.0333343 + -0.751545 1.85605 -1.1564 -0.326852 0.940235 0.0955249 + -0.748713 1.85615 -1.16277 -0.217755 0.957264 -0.190338 + -0.784826 1.76798 -1.15815 -0.511949 -0.171132 0.841797 + -0.771158 1.81581 -1.14754 -0.725054 0.144512 0.673359 + -0.761438 1.84749 -1.14925 -0.684288 0.573735 0.450087 + -0.794522 1.71516 -1.17827 -0.534363 -0.246129 0.808626 + -0.774765 1.76119 -1.15758 -0.0640767 -0.360595 0.930519 + -0.754731 1.8035 -1.13919 -0.0356894 -0.330692 0.943064 + -0.76272 1.80815 -1.13993 -0.445973 -0.098756 0.889581 + -0.78446 1.70838 -1.1777 -0.0523457 -0.337575 0.939842 + -0.763914 1.75726 -1.16133 0.283687 -0.432456 0.855864 + -0.74388 1.79956 -1.14295 0.298472 -0.448309 0.842576 + -0.734015 1.8273 -1.13362 0.388158 -0.136265 0.911463 + -0.741401 1.82964 -1.13126 0.107301 -0.0399785 0.993422 + -0.766167 1.63927 -1.20409 0.390237 -0.20961 0.896537 + -0.769258 1.70293 -1.18292 0.332011 -0.329471 0.883865 + -0.74944 1.75483 -1.17051 0.626237 -0.428749 0.651154 + -0.733049 1.79826 -1.14971 0.615789 -0.479637 0.625101 + -0.774195 1.59321 -1.20828 0.302909 -0.051395 0.951633 + -0.745318 1.63607 -1.21726 0.715067 -0.168922 0.67834 + -0.754784 1.7005 -1.1921 0.668835 -0.257342 0.697448 + -0.796723 1.54369 -1.19477 0.41874 0.0558634 0.906386 + -0.753347 1.59002 -1.22145 0.722071 -0.200015 0.662275 + -0.743863 1.70264 -1.20935 0.934175 -0.0959354 0.343675 + -0.865981 1.48471 -1.16314 0.40967 -0.0576064 0.910413 + -0.823026 1.46197 -1.17892 0.487505 0.0327931 0.872504 + -0.804852 1.47827 -1.19603 0.789687 -0.00834706 0.613453 + -0.796371 1.52699 -1.20372 0.878679 -0.194765 0.435878 + -0.850865 1.53594 -1.16128 0.655846 -0.118078 0.745603 + -0.926244 1.49054 -1.13347 0.22992 -0.104114 0.967624 + -0.957644 1.41559 -1.13398 0.174036 -0.0592022 0.982958 + -0.896919 1.43523 -1.15219 0.300657 -0.0208961 0.953503 + -0.853963 1.41249 -1.16796 0.30365 -0.0227408 0.952512 + -0.871136 1.58554 -1.14314 0.621126 -0.119351 0.774569 + -0.911128 1.54176 -1.13161 0.227288 -0.127485 0.965447 + -0.959461 1.50028 -1.13282 -0.360415 0.0938556 0.928058 + -0.990861 1.42533 -1.13332 -0.302588 0.130339 0.944168 + -0.976872 1.35841 -1.13414 0.101286 -0.115824 0.988092 + -0.851587 1.59112 -1.1669 0.861823 0.0620139 0.503404 + -0.876677 1.64231 -1.1261 0.62087 -0.184222 0.76196 + -0.900081 1.58792 -1.12604 0.266269 -0.213279 0.940007 + -0.937216 1.59524 -1.12558 -0.298504 -0.193999 0.934484 + -0.948263 1.54908 -1.13115 -0.399725 0.0225855 0.916357 + -0.855673 1.6544 -1.1612 0.983547 0.13168 0.123674 + -0.861678 1.64516 -1.14179 0.859872 -0.0649668 0.506359 + -0.887343 1.7067 -1.10138 0.59639 -0.26688 0.75703 + -0.905622 1.64469 -1.10901 0.241066 -0.27587 0.930474 + -0.868179 1.71596 -1.13054 0.994723 0.0547532 0.0867635 + -0.872343 1.70956 -1.11707 0.867025 -0.132453 0.480337 + -0.871456 1.76321 -1.09177 0.847421 -0.340439 0.407405 + -0.882147 1.76099 -1.0807 0.567752 -0.422483 0.706517 + -0.90756 1.70853 -1.08935 0.233078 -0.324331 0.916779 + -0.871806 1.72683 -1.1478 0.93999 0.223535 -0.25778 + -0.869894 1.77725 -1.11761 0.927553 0.0460175 -0.370847 + -0.867292 1.76962 -1.10525 0.988085 -0.150058 -0.0342125 + -0.879943 1.78854 -1.13211 0.668 0.295993 -0.682762 + -0.863138 1.82711 -1.10443 0.686355 0.24909 -0.68328 + -0.855652 1.81903 -1.09362 0.914461 -0.0115536 -0.404508 + -0.85305 1.8114 -1.08127 0.973057 -0.221965 -0.0623749 + -0.856177 1.80659 -1.07119 0.842332 -0.399671 0.361579 + -0.878788 1.83304 -1.11036 0.244258 0.523043 -0.816556 + -0.867431 1.85564 -1.09128 0.298002 0.713316 -0.634331 + -0.857132 1.85179 -1.0873 0.700486 0.527575 -0.480608 + -0.849646 1.84372 -1.07649 0.937572 0.293633 -0.186383 + -0.897558 1.83475 -1.10967 -0.1086 0.648312 -0.75359 + -0.886201 1.85735 -1.09059 -0.0874498 0.798326 -0.595842 + -0.880174 1.86256 -1.08044 -0.0212004 0.947889 -0.317893 + -0.870445 1.86166 -1.0808 0.230179 0.915618 -0.329637 + -0.860146 1.85782 -1.07682 0.607765 0.788699 -0.0925984 + -0.912562 1.83421 -1.10477 -0.476359 0.708658 -0.520467 + -0.896175 1.85682 -1.08738 -0.408271 0.816717 -0.407784 + -0.890148 1.86201 -1.07722 -0.294137 0.949637 -0.108037 + -0.878847 1.864 -1.07216 0.00391151 0.988105 0.153731 + -0.869117 1.86311 -1.07252 0.275387 0.948594 0.155986 + -0.91926 1.83109 -1.09737 -0.760482 0.631842 -0.149811 + -0.902873 1.85371 -1.07998 -0.686894 0.723839 -0.0650683 + -0.89362 1.8604 -1.07339 -0.46137 0.879973 0.113075 + -0.882319 1.86238 -1.06833 -0.109051 0.905853 0.409314 + -0.865237 1.85893 -1.06692 0.370934 0.853788 0.365314 + -0.948172 1.78724 -1.10924 -0.919925 0.3827 0.0853091 + -0.922378 1.82582 -1.0844 -0.85215 0.502488 0.146106 + -0.904925 1.85022 -1.07134 -0.767874 0.612468 0.187758 + -0.895672 1.85692 -1.06475 -0.510303 0.809169 0.291266 + -0.8803 1.85971 -1.0642 0.0638386 0.904216 0.422277 + -0.963711 1.73707 -1.13453 -0.979912 0.198758 0.0163388 + -0.946256 1.77957 -1.08917 -0.888549 0.20346 0.4112 + -0.920922 1.82009 -1.06974 -0.830829 0.32796 0.449628 + -0.903469 1.84451 -1.05668 -0.736943 0.455267 0.499646 + -0.894917 1.85396 -1.05715 -0.514719 0.71296 0.476184 + -0.961795 1.7294 -1.11447 -0.937814 0.0362235 0.345242 + -0.937389 1.77329 -1.07643 -0.674792 -0.0327488 0.737281 + -0.912055 1.81381 -1.057 -0.626707 0.0496546 0.777671 + -0.897618 1.84035 -1.04833 -0.547161 0.254233 0.797484 + -0.955425 1.65951 -1.12022 -0.686783 -0.168119 0.707153 + -0.949395 1.72051 -1.09659 -0.69239 -0.15808 0.703993 + -0.919181 1.76651 -1.0674 -0.272467 -0.264192 0.925183 + -0.898515 1.80898 -1.05025 -0.247126 -0.216284 0.944537 + -0.963392 1.60487 -1.13858 -0.64414 -0.148649 0.750325 + -0.929249 1.64988 -1.10723 -0.243327 -0.282701 0.927832 + -0.931187 1.71372 -1.08756 -0.279694 -0.290582 0.915059 + -0.902365 1.76281 -1.06867 0.194324 -0.405529 0.893188 + -0.990011 1.60374 -1.16747 -0.790188 0.0614481 0.609776 + -0.97759 1.55466 -1.16298 -0.70395 0.0336149 0.709453 + -1.00421 1.55353 -1.19186 -0.753481 0.145523 0.641163 + -1.03957 1.50887 -1.20666 -0.644419 0.380784 0.66312 + -0.988788 1.50586 -1.16464 -0.645305 0.220088 0.731534 + -1.09297 1.44319 -1.20978 -0.589007 0.397904 0.70338 + -1.06975 1.42015 -1.1794 -0.539634 0.343438 0.768665 + -1.01636 1.48583 -1.17629 -0.548849 0.35996 0.754449 + -1.15167 1.42218 -1.25256 -0.857123 0.312085 0.409808 + -1.12299 1.39912 -1.2151 -0.700725 0.1988 0.685173 + -1.11115 1.37852 -1.19769 -0.719032 0.175663 0.67241 + -1.08528 1.38534 -1.17552 -0.595048 0.27492 0.755207 + -1.01843 1.40529 -1.14496 -0.434601 0.216568 0.874197 + -1.1603 1.41239 -1.27724 -0.971525 0.219627 0.0889032 + -1.14928 1.36379 -1.24717 -0.884151 -0.0473791 0.464792 + -1.13744 1.34319 -1.22976 -0.844491 -0.0214769 0.535139 + -1.10434 1.33974 -1.18294 -0.69842 -0.0383065 0.714662 + -1.07848 1.34656 -1.16078 -0.535038 -0.0589606 0.842768 + -1.15752 1.35991 -1.31387 -0.987781 -0.0721246 -0.138155 + -1.15791 1.354 -1.27186 -0.979507 -0.109869 0.168806 + -1.14028 1.32026 -1.23683 -0.87522 -0.17426 0.451247 + -1.10719 1.31682 -1.19002 -0.672604 -0.271434 0.688424 + -1.05663 1.3173 -1.15837 -0.303517 -0.441757 0.844232 + -1.13984 1.33089 -1.36139 -0.919016 -0.152475 -0.36354 + -1.14995 1.32335 -1.3271 -0.951244 -0.250584 -0.179842 + -1.15034 1.31745 -1.28508 -0.966005 -0.258375 -0.00879001 + -1.14609 1.30588 -1.26206 -0.932197 -0.295606 0.208866 + -1.12251 1.28682 -1.22596 -0.711889 -0.462359 0.528619 + -1.12878 1.30845 -1.37287 -0.717244 -0.572547 -0.397179 + -1.1389 1.30092 -1.33857 -0.809437 -0.473829 -0.346839 + -1.13466 1.27087 -1.31396 -0.76777 -0.560942 -0.309632 + -1.13041 1.25932 -1.29094 -0.547328 -0.832256 0.0882171 + -1.12832 1.27245 -1.2512 -0.556755 -0.761701 0.331414 + -1.10613 1.29619 -1.37587 -0.386289 -0.848846 -0.360889 + -1.10453 1.28748 -1.35446 -0.379836 -0.767747 -0.516032 + -1.1003 1.25744 -1.32985 -0.13971 -0.905314 -0.401109 + -1.09158 1.25722 -1.30268 0.184173 -0.976334 0.11337 + -1.07767 1.29616 -1.40574 -0.256972 -0.864061 -0.432855 + -1.0541 1.28699 -1.38359 -0.20425 -0.941605 -0.267698 + -1.0525 1.27827 -1.36219 0.00662837 -0.964312 -0.264685 + -1.03138 1.2821 -1.34221 0.195588 -0.979978 -0.0372543 + -1.02267 1.2819 -1.31504 0.312634 -0.939515 0.139894 + -1.05239 1.28725 -1.38674 -0.144581 -0.938619 -0.313194 + -1.02715 1.28029 -1.38065 -0.147197 -0.986975 -0.0649175 + -1.01639 1.28195 -1.37049 -0.0297525 -0.977967 0.206628 + -0.995269 1.28579 -1.35051 0.0726601 -0.976132 0.20466 + -1.02576 1.29708 -1.4081 -0.0238752 -0.836328 -0.54771 + -1.02544 1.28055 -1.3838 -0.290863 -0.850832 -0.437588 + -1.01945 1.27762 -1.38393 -0.213561 -0.962452 -0.167564 + -1.01536 1.29187 -1.40145 -0.20208 -0.76181 -0.615475 + -1.00937 1.28894 -1.4016 -0.543251 -0.532229 -0.649315 + -0.975681 1.29224 -1.33105 -0.237009 -0.882469 0.406295 + -0.982052 1.29366 -1.32695 0.158455 -0.94054 0.30046 + -1.01727 1.29321 -1.28847 0.357158 -0.914166 0.191672 + -1.08949 1.27036 -1.26294 0.175018 -0.96174 0.21077 + -0.976651 1.30498 -1.30037 0.143032 -0.925213 0.351458 + -0.97443 1.31079 -1.28553 0.111352 -0.989558 0.0915218 + -1.00854 1.29778 -1.2616 0.267142 -0.95562 -0.124199 + -1.08077 1.27493 -1.23607 0.117449 -0.991031 0.0637386 + -1.10087 1.27697 -1.21521 -0.289717 -0.842208 0.454697 + -0.967692 1.30929 -1.28807 -0.283755 -0.931474 0.227685 + -0.972711 1.31055 -1.28343 -0.0629002 -0.98014 -0.188068 + -1.00682 1.29754 -1.2595 0.13348 -0.93992 -0.314219 + -1.03364 1.27882 -1.21467 0.0470027 -0.991369 -0.122387 + -1.05374 1.28086 -1.19382 -0.11955 -0.891196 0.437582 + -0.951437 1.30384 -1.27738 -0.391854 -0.912337 0.118712 + -0.956456 1.30509 -1.27275 -0.171368 -0.957468 -0.23214 + -0.973217 1.29523 -1.24871 0.00416175 -0.919687 -0.392631 + -1.00003 1.27652 -1.20389 -0.15396 -0.971044 -0.182677 + -0.921645 1.2939 -1.25628 -0.349703 -0.934104 0.0718102 + -0.928007 1.29472 -1.25153 -0.148986 -0.943339 -0.296506 + -0.944768 1.28487 -1.2275 -0.075795 -0.884943 -0.459491 + -0.894538 1.27375 -1.26936 -0.424659 -0.805226 0.413854 + -0.873612 1.2749 -1.24928 -0.359625 -0.856121 0.371114 + -0.890082 1.28386 -1.24262 -0.316667 -0.947785 0.0377581 + -0.896444 1.28468 -1.23787 -0.183211 -0.919789 -0.347019 + -0.907848 1.27721 -1.22204 -0.128606 -0.849989 -0.510862 + -0.830563 1.24882 -1.26453 0.0500492 -0.973579 0.222797 + -0.824941 1.26014 -1.23715 0.134504 -0.954576 0.265882 + -0.841411 1.2691 -1.23049 -0.440981 -0.86615 -0.235201 + -0.852815 1.26164 -1.21466 -0.0481074 -0.976155 -0.211675 + -0.804118 1.26001 -1.27021 0.639207 -0.761723 0.105795 + -0.798497 1.27132 -1.24282 0.657952 -0.709903 0.25127 + -0.792617 1.28394 -1.22778 0.722049 -0.624145 0.298476 + -0.830468 1.26529 -1.20629 0.368574 -0.830541 0.417558 + -0.767829 1.31962 -1.27193 0.87545 -0.481816 0.0379594 + -0.761949 1.33225 -1.25689 0.934551 -0.326203 0.142147 + -0.780603 1.31049 -1.21006 0.790034 -0.326356 0.518978 + -0.818454 1.29184 -1.18857 0.474744 -0.42833 0.768864 + -0.80509 1.36213 -1.18251 0.528553 -0.0371004 0.848089 + -0.830741 1.31746 -1.17781 0.312874 -0.149178 0.938006 + -0.913342 1.25765 -1.1709 0.157883 -0.755623 0.635694 + -0.935689 1.254 -1.17927 -0.149671 -0.978562 0.141473 + -0.97261 1.26164 -1.18472 -0.194946 -0.980533 0.0234855 + -0.786916 1.37844 -1.19961 0.795651 -0.0962921 0.598053 + -0.879614 1.36781 -1.16327 0.252023 -0.0747617 0.964829 + -0.925629 1.28328 -1.16015 0.232275 -0.209838 0.949745 + -0.781268 1.4777 -1.23637 0.862814 0.0326103 0.504469 + -0.772786 1.52642 -1.24407 0.842236 -0.253051 0.47603 + -0.752994 1.57331 -1.2304 0.795897 -0.349974 0.49403 + -0.916147 1.37805 -1.15235 0.2884 -0.10794 0.951407 + -0.962162 1.29351 -1.14923 0.11506 -0.380154 0.917738 + -0.997406 1.27631 -1.15377 -0.28009 -0.711521 0.644428 + -1.01212 1.34121 -1.13867 -0.187961 -0.197365 0.962142 + -1.02483 1.29119 -1.17293 -0.333986 -0.746365 0.575667 + -1.08555 1.30697 -1.17926 -0.430371 -0.486571 0.760283 + -1.03396 1.37048 -1.14108 -0.276228 0.0983286 0.956049 + -0.881699 1.8053 -1.05151 0.224009 -0.41161 0.883401 + -0.884078 1.83552 -1.04158 -0.147377 0.043993 0.988101 + -0.866868 1.80436 -1.06011 0.560762 -0.461412 0.687492 + -0.872943 1.83326 -1.04231 0.280845 -0.0786284 0.956527 + -0.870912 1.84504 -1.04603 0.346052 0.388959 0.853791 + -0.882047 1.8473 -1.0453 -0.0799213 0.439578 0.894642 + -0.889066 1.8498 -1.0488 -0.354846 0.543174 0.760951 + -0.851051 1.83385 -1.05827 0.861569 -0.0510504 0.505067 + -0.858111 1.83233 -1.05092 0.628433 -0.114909 0.76933 + -0.863225 1.84456 -1.05049 0.539952 0.391118 0.745304 + -0.869399 1.85334 -1.05423 0.335924 0.772242 0.539256 + -0.877086 1.85383 -1.04977 0.164155 0.747204 0.644002 + -0.847924 1.83866 -1.06835 0.985729 0.12353 0.114364 + -0.854544 1.84856 -1.06307 0.763419 0.544449 0.347515 + -0.856165 1.84608 -1.05784 0.693148 0.44524 0.56684 + -0.86484 1.85376 -1.05757 0.395155 0.744711 0.537827 + -0.856266 1.85362 -1.07121 0.738622 0.66465 0.112596 + -0.863219 1.85625 -1.06279 0.427837 0.802477 0.415915 + -0.884859 1.8593 -1.06086 -0.100546 0.974081 0.202626 + -0.884105 1.85633 -1.05326 -0.120769 0.838497 0.531355 + -0.741661 1.75646 -1.18278 0.901418 -0.322646 0.288696 + -0.72527 1.79989 -1.16198 0.882191 -0.401839 0.245487 + -0.722925 1.80436 -1.17595 0.960255 -0.19539 -0.199333 + -0.715678 1.83173 -1.16247 0.992216 0.0606605 -0.108756 + -0.718023 1.82726 -1.14849 0.927909 -0.120958 0.352639 + -0.723183 1.82601 -1.14039 0.699441 -0.170049 0.694166 + -0.719883 1.83594 -1.17128 0.812393 0.29715 -0.501716 + -0.722907 1.84586 -1.16508 0.738021 0.601064 -0.306672 + -0.718702 1.84165 -1.15626 0.904508 0.422866 0.0552204 + -0.719918 1.83933 -1.14902 0.884694 0.276454 0.375354 + -0.725078 1.83808 -1.14091 0.670735 0.225041 0.706733 + -0.729735 1.84908 -1.16954 0.540625 0.683133 -0.490973 + -0.727286 1.85203 -1.15864 0.668437 0.742372 0.0455698 + -0.727866 1.85081 -1.15354 0.505989 0.833739 0.221031 + -0.72402 1.8482 -1.15171 0.65874 0.729355 0.184669 + -0.725235 1.84589 -1.14446 0.627696 0.584031 0.514689 + -0.734115 1.85525 -1.16309 0.404735 0.885162 -0.229518 + -0.738743 1.85714 -1.16096 0.175885 0.981258 -0.0787225 + -0.741575 1.85703 -1.15459 0.111935 0.981126 0.157681 + -0.742155 1.85581 -1.14948 0.0830682 0.919877 0.383309 + -0.738837 1.85158 -1.14317 0.165112 0.81137 0.560729 + -0.734991 1.84898 -1.14134 0.28898 0.734137 0.614438 + -0.73085 1.84656 -1.14096 0.41381 0.578669 0.702783 + -0.730692 1.83876 -1.1374 0.461874 0.259079 0.848263 + -0.751185 1.85277 -1.14682 -0.338569 0.797565 0.49926 + -0.747867 1.84854 -1.14049 -0.240256 0.671139 0.70132 + -0.742219 1.8435 -1.13543 -0.00154157 0.516416 0.856336 + -0.738078 1.84109 -1.13504 0.251153 0.363366 0.897155 + -0.755037 1.83934 -1.13707 -0.550152 0.370944 0.748153 + -0.749389 1.83431 -1.13199 -0.282888 0.174373 0.943169 + 0.872043 1.89298 -1.22862 -0.906308 0.309655 -0.287609 + 0.878324 1.8668 -1.24714 -0.923999 -0.0316581 -0.381081 + 0.875993 1.86509 -1.23433 -0.963138 -0.268909 -0.00727253 + 0.878844 1.8951 -1.23876 -0.630611 0.522384 -0.573974 + 0.885126 1.86893 -1.25728 -0.665671 0.256176 -0.700896 + 0.893321 1.82549 -1.27123 -0.92697 0.0239723 -0.374368 + 0.890991 1.82377 -1.25843 -0.98238 -0.186885 0.00167389 + 0.870466 1.89166 -1.22009 -0.991227 0.124971 0.0430212 + 0.878416 1.90396 -1.21984 -0.68511 0.715364 -0.137398 + 0.881941 1.90506 -1.22509 -0.505147 0.792278 -0.342232 + 0.890922 1.90658 -1.22905 -0.207644 0.850486 -0.483278 + 0.887826 1.89661 -1.24271 -0.263922 0.670285 -0.693587 + 0.878806 1.86382 -1.22269 -0.805291 -0.438182 0.39938 + 0.873278 1.89039 -1.20845 -0.877273 -0.0865625 0.472121 + 0.876839 1.90264 -1.21131 -0.797739 0.590288 0.123178 + 0.887159 1.91034 -1.21301 -0.368141 0.929522 0.0214756 + 0.890685 1.91144 -1.21827 -0.242699 0.956851 -0.159792 + 0.89469 1.82278 -1.24289 -0.816301 -0.373796 0.440374 + 0.904845 1.82269 -1.23241 -0.494589 -0.436018 0.751845 + 0.88896 1.86373 -1.21221 -0.483747 -0.495917 0.721148 + 0.880026 1.89016 -1.20144 -0.579202 -0.214069 0.786574 + 0.878296 1.90197 -1.20528 -0.783152 0.41717 0.461132 + 0.896376 1.771 -1.26494 -0.873527 -0.112645 0.473562 + 0.910577 1.77123 -1.25016 -0.535568 -0.248242 0.807182 + 0.924168 1.82424 -1.22396 -0.108986 -0.391865 0.913545 + 0.903325 1.86447 -1.20606 -0.132739 -0.436019 0.890094 + 0.89439 1.89091 -1.19529 -0.162816 -0.233976 0.958512 + 0.892676 1.772 -1.28048 -0.997109 0.066978 0.0358879 + 0.88112 1.71182 -1.3056 -0.987083 0.147237 0.0631539 + 0.886475 1.71007 -1.2832 -0.875618 -0.0391503 0.481415 + 0.900676 1.7103 -1.26843 -0.562681 -0.176691 0.807571 + 0.9299 1.77278 -1.24171 -0.142804 -0.28556 0.947661 + 0.895936 1.77431 -1.29849 -0.912612 0.230391 -0.337727 + 0.88438 1.71413 -1.3236 -0.894988 0.328628 -0.301662 + 0.869117 1.64944 -1.35508 -0.960438 0.257667 -0.105674 + 0.875055 1.65277 -1.32577 -0.976358 0.0243469 0.214784 + 0.88041 1.65102 -1.30338 -0.857546 -0.096681 0.505241 + 0.902286 1.82802 -1.2849 -0.63934 0.29314 -0.710854 + 0.904902 1.77684 -1.31216 -0.63683 0.383698 -0.668748 + 0.897349 1.7179 -1.34324 -0.632185 0.451788 -0.629468 + 0.882085 1.65322 -1.37472 -0.699378 0.503023 -0.507778 + 0.898674 1.87111 -1.26329 -0.247416 0.504394 -0.827268 + 0.915835 1.83019 -1.29091 -0.233422 0.47246 -0.84988 + 0.923847 1.78005 -1.32045 -0.22648 0.472037 -0.851991 + 0.916294 1.72112 -1.35154 -0.228769 0.490876 -0.840658 + 0.898097 1.66592 -1.38022 -0.32626 0.507299 -0.797623 + 0.903908 1.89837 -1.24266 0.100322 0.745915 -0.658442 + 0.914757 1.87286 -1.26323 0.126985 0.630355 -0.765851 + 0.937617 1.83285 -1.29074 0.171946 0.568439 -0.804557 + 0.94563 1.78271 -1.32028 0.181882 0.492761 -0.850944 + 0.947541 1.72482 -1.35133 0.216111 0.426551 -0.878265 + 0.899259 1.90748 -1.22901 0.0454413 0.874112 -0.483594 + 0.913094 1.8987 -1.23785 0.449427 0.75285 -0.480867 + 0.928538 1.87366 -1.25585 0.511887 0.675928 -0.530182 + 0.951398 1.83367 -1.28336 0.572537 0.57642 -0.583045 + 0.964985 1.78391 -1.3099 0.639097 0.429007 -0.638363 + 0.899021 1.91234 -1.21824 0.057848 0.985096 -0.161983 + 0.908445 1.90781 -1.22421 0.382049 0.863201 -0.330035 + 0.920418 1.89784 -1.2256 0.698801 0.678636 -0.226122 + 0.935862 1.8728 -1.2436 0.734935 0.627395 -0.257385 + 0.961024 1.83316 -1.2666 0.810346 0.510054 -0.288416 + 0.902818 1.91189 -1.21188 0.156502 0.987667 0.00451603 + 0.912241 1.90737 -1.21786 0.542561 0.827549 -0.14419 + 0.922484 1.89698 -1.21745 0.821951 0.564428 0.0762759 + 0.938796 1.87199 -1.23129 0.856756 0.510932 0.070134 + 0.963958 1.83235 -1.2543 0.919178 0.391394 0.0438425 + 0.889304 1.90999 -1.20868 -0.107866 0.985112 0.133863 + 0.904962 1.91155 -1.20754 0.258502 0.961302 0.0952659 + 0.914307 1.90651 -1.20973 0.672262 0.729944 0.12347 + 0.920371 1.8956 -1.209 0.811236 0.318425 0.490409 + 0.936683 1.87061 -1.22284 0.833461 0.274293 0.479694 + 0.885643 1.90921 -1.20591 -0.431256 0.890088 0.147522 + 0.900206 1.91005 -1.20039 0.13545 0.879705 0.455821 + 0.903867 1.91083 -1.20316 0.236963 0.89282 0.383042 + 0.913211 1.9058 -1.20534 0.67462 0.574165 0.463921 + 0.8871 1.90855 -1.19987 -0.432099 0.735092 0.522427 + 0.894546 1.90894 -1.19668 -0.0791984 0.71599 0.693603 + 0.902379 1.90329 -1.19545 0.28921 0.279154 0.915659 + 0.908039 1.90442 -1.19917 0.53613 0.404511 0.740902 + 0.915198 1.89422 -1.20284 0.647464 0.10605 0.754681 + 0.885044 1.90176 -1.19827 -0.539796 0.162203 0.826021 + 0.89249 1.90214 -1.19508 -0.214567 0.115304 0.969879 + 0.90428 1.89206 -1.19567 0.285952 -0.110533 0.951848 + 0.918214 1.86636 -1.2066 0.333127 -0.221324 0.916538 + 0.929133 1.86853 -1.21377 0.659105 0.0268868 0.75157 + 0.95363 1.82897 -1.23424 0.681336 -0.0257633 0.731517 + 0.96118 1.83107 -1.24331 0.869195 0.177609 0.46147 + 0.939057 1.82614 -1.2245 0.35354 -0.224459 0.90809 + 0.950772 1.77543 -1.24251 0.353381 -0.233111 0.90597 + 0.965345 1.77828 -1.25224 0.682393 -0.133226 0.718742 + 0.976077 1.78081 -1.26509 0.896513 0.00726872 0.442958 + 0.978855 1.78209 -1.27609 0.982352 0.185873 0.0208511 + 0.949324 1.71495 -1.25716 0.292957 -0.170495 0.940802 + 0.970322 1.71906 -1.2711 0.671748 -0.0529879 0.738882 + 0.981054 1.7216 -1.28396 0.885054 0.0616257 0.46139 + 0.928452 1.71229 -1.25636 -0.164525 -0.231082 0.958923 + 0.932203 1.65554 -1.26966 -0.223342 -0.225336 0.948336 + 0.966784 1.65206 -1.26669 0.232722 -0.11764 0.965402 + 0.987782 1.65617 -1.28064 0.55103 0.113918 0.826673 + 0.904427 1.65354 -1.28173 -0.519262 -0.205645 0.829504 + 0.90846 1.6036 -1.29017 -0.405016 0.511616 0.757767 + 0.950853 1.59833 -1.28282 -0.0497196 0.491563 0.869421 + 0.985434 1.59485 -1.27985 0.0444115 0.467994 0.882615 + 0.884443 1.60108 -1.31182 -0.727831 0.557227 0.399701 + 0.870447 1.59662 -1.30624 0.221189 0.971373 -0.0866567 + 0.908318 1.60006 -1.27887 -0.0959085 0.971723 -0.215768 + 0.95071 1.59479 -1.27152 0.165589 0.943181 -0.288081 + 0.867816 1.59058 -1.35233 -0.78464 0.61236 0.0967258 + 0.861878 1.58725 -1.38164 -0.861407 0.481143 0.162726 + 0.853821 1.58612 -1.34676 0.123938 0.937864 -0.324115 + 0.847109 1.57183 -1.41682 -0.55664 0.415593 -0.719329 + 0.82419 1.56177 -1.40977 -0.312548 0.545862 -0.777398 + 0.838959 1.57718 -1.37458 0.0167008 0.918155 -0.395869 + 0.828052 1.63679 -1.30945 0.661584 0.604942 -0.443116 + 0.863122 1.58453 -1.42233 -0.300306 0.376533 -0.876378 + 0.878919 1.56037 -1.42798 0.000490382 0.28073 -0.959786 + 0.797539 1.54957 -1.40402 -0.521969 0.331794 -0.785787 + 0.796629 1.62009 -1.34554 -0.152186 0.621972 -0.768108 + 0.81319 1.62786 -1.33727 0.332519 0.657284 -0.676319 + 0.929344 1.6696 -1.38002 0.104402 0.416431 -0.903153 + 0.945141 1.64544 -1.38566 0.358129 0.318716 -0.87759 + 0.979727 1.6575 -1.35814 0.695454 0.298398 -0.653683 + 0.961283 1.56924 -1.40281 0.387895 0.301147 -0.871119 + 0.966896 1.726 -1.34095 0.635205 0.344313 -0.691349 + 0.993663 1.65649 -1.33417 0.860705 0.275485 -0.428129 + 1.01775 1.58153 -1.33251 0.825631 0.358422 -0.435738 + 0.99587 1.58131 -1.37529 0.704373 0.325369 -0.630867 + 0.980832 1.72499 -1.31697 0.899691 0.251182 -0.35702 + 0.985075 1.72368 -1.29993 0.981643 0.190319 -0.012446 + 1.00529 1.65647 -1.30746 0.933858 0.341612 -0.10588 + 0.974611 1.7834 -1.29314 0.883863 0.323067 -0.338252 + 1.00127 1.65438 -1.2915 0.783175 0.352818 0.512013 + 1.04258 1.58189 -1.28426 0.803695 0.593714 0.0397228 + 1.02939 1.58151 -1.30581 0.807925 0.41078 -0.422513 + 1.07231 1.52317 -1.30657 0.666608 0.636141 -0.388534 + 1.06195 1.51683 -1.33241 0.557698 0.624062 -0.547284 + 1.03261 1.52261 -1.34987 0.649056 0.453575 -0.610734 + 1.02909 1.58369 -1.27341 0.37508 0.682689 0.627097 + 1.03741 1.56026 -1.23476 0.828056 0.359635 0.4301 + 1.0855 1.52355 -1.28503 0.760083 0.648752 -0.0373316 + 0.986353 1.58749 -1.26568 0.255703 0.940471 -0.223896 + 1.03001 1.57633 -1.25923 0.556939 0.822223 0.11734 + 0.972744 1.63665 -1.23472 0.4639 0.61487 -0.637755 + 0.985381 1.63085 -1.22063 0.711481 0.636714 -0.297304 + 0.988965 1.63519 -1.19758 0.87874 0.477179 0.0107998 + 1.0336 1.58068 -1.23618 0.902987 0.425588 0.0590622 + 0.937101 1.64394 -1.24057 0.108348 0.564176 -0.818514 + 0.932562 1.69336 -1.20595 0.125424 0.565252 -0.815328 + 0.95376 1.69237 -1.19926 0.516272 0.534465 -0.669186 + 0.966397 1.68657 -1.18517 0.864679 0.398109 -0.306332 + 0.900294 1.64037 -1.24217 -0.203537 0.578861 -0.789616 + 0.895755 1.68979 -1.20754 -0.262848 0.546604 -0.795069 + 0.903856 1.7466 -1.17053 -0.228396 0.53578 -0.812881 + 0.929618 1.74917 -1.16933 0.134549 0.560237 -0.817332 + 0.950816 1.74817 -1.16265 0.548122 0.518158 -0.656562 + 0.880133 1.59288 -1.26871 -0.440186 0.888957 -0.126459 + 0.87211 1.63319 -1.23201 -0.692026 0.412763 -0.592222 + 0.873755 1.68132 -1.19933 -0.702369 0.431544 -0.566081 + 0.86893 1.59311 -1.27569 0.333308 0.88666 0.320531 + 0.850108 1.57875 -1.2451 0.31737 0.70288 0.636581 + 0.861311 1.57852 -1.23812 -0.724329 0.689417 -0.00716767 + 0.857655 1.61714 -1.21114 -0.908471 0.230149 -0.348871 + 0.8593 1.66527 -1.17846 -0.942939 0.245602 -0.224824 + 0.836896 1.63376 -1.25498 0.887013 0.30805 0.343966 + 0.824419 1.61758 -1.23136 0.7879 0.153334 0.596408 + 0.809434 1.59979 -1.20989 0.468844 0.0923743 0.878437 + 0.835122 1.56096 -1.22364 0.2324 0.689456 0.686033 + 0.849239 1.56173 -1.2133 -0.76983 0.631154 0.0949045 + 0.838414 1.63727 -1.28553 0.829743 0.542126 -0.132761 + 0.820232 1.68161 -1.23398 0.958758 0.0668034 0.276261 + 0.807755 1.66545 -1.21036 0.817494 -0.06223 0.572566 + 0.810805 1.6878 -1.27831 0.723873 0.458609 -0.515447 + 0.821167 1.68827 -1.25439 0.951288 0.273571 -0.142159 + 0.814856 1.73774 -1.2052 0.961599 0.044988 0.270747 + 0.799337 1.68411 -1.29216 0.368262 0.568784 -0.735436 + 0.808645 1.74381 -1.24229 0.747747 0.428131 -0.507521 + 0.815791 1.74438 -1.22561 0.951262 0.268211 -0.152195 + 0.782775 1.67633 -1.30044 -0.167767 0.577624 -0.798877 + 0.785869 1.73448 -1.26199 -0.104131 0.541873 -0.833985 + 0.797176 1.7401 -1.25615 0.399636 0.532444 -0.746187 + 0.787113 1.78893 -1.22313 0.34934 0.613948 -0.707834 + 0.795407 1.79133 -1.21336 0.658041 0.586085 -0.472744 + 0.764655 1.66775 -1.29685 -0.519034 0.478927 -0.707978 + 0.767748 1.72589 -1.25841 -0.506997 0.460352 -0.728718 + 0.762937 1.77707 -1.22652 -0.485036 0.387786 -0.783812 + 0.775806 1.7833 -1.22897 -0.112055 0.538206 -0.835331 + 0.769978 1.60789 -1.33978 -0.530959 0.481728 -0.697151 + 0.73886 1.65542 -1.28029 -0.801528 0.341671 -0.490728 + 0.749705 1.71721 -1.2469 -0.781608 0.341088 -0.522253 + 0.744894 1.76839 -1.21501 -0.779076 0.193733 -0.596245 + 0.744183 1.59556 -1.32321 -0.806924 0.284152 -0.517813 + 0.729767 1.64655 -1.26158 -0.988843 0.121566 -0.0860849 + 0.740612 1.70835 -1.2282 -0.989546 0.115787 -0.085973 + 0.73841 1.76216 -1.20164 -0.979651 -0.0920684 -0.178347 + 0.729409 1.81058 -1.18933 -0.774944 0.121421 -0.620257 + 0.745021 1.53976 -1.35016 -0.857666 0.140928 -0.494518 + 0.731258 1.53341 -1.31358 -0.992166 -0.120595 -0.032611 + 0.73042 1.58921 -1.28664 -0.99532 0.0286265 -0.0922976 + 0.734398 1.63822 -1.23451 -0.93395 -0.0838859 0.347418 + 0.743863 1.70264 -1.20935 -0.93418 -0.0959446 0.343659 + 0.800462 1.47952 -1.42216 -0.654995 0.201962 -0.728143 + 0.747944 1.46971 -1.36831 -0.821622 0.0109213 -0.569928 + 0.731964 1.45244 -1.3328 -0.994701 0.0114356 -0.102175 + 0.737625 1.4509 -1.30698 -0.950366 0.0642186 0.304435 + 0.741959 1.47673 -1.30362 -0.951476 0.0479465 0.303965 + 0.825578 1.46091 -1.45214 -0.554062 0.229852 -0.800114 + 0.776506 1.38133 -1.41549 -0.878261 -0.00475248 -0.478157 + 0.760195 1.37562 -1.3687 -0.886336 -0.153831 -0.436743 + 0.744214 1.35836 -1.33319 -0.927914 -0.30871 -0.208981 + 0.846034 1.46578 -1.46154 -0.251322 0.276228 -0.92765 + 0.838096 1.3547 -1.4638 -0.415187 -0.111923 -0.902825 + 0.801622 1.36272 -1.44547 -0.651956 -0.0785874 -0.754173 + 0.810647 1.30891 -1.43728 -0.651862 -0.39695 -0.646148 + 0.797745 1.30144 -1.40886 -0.78557 -0.469365 -0.403207 + 0.876928 1.5005 -1.44858 0.132816 0.318797 -0.938471 + 0.883447 1.38217 -1.48305 -0.172928 0.145219 -0.97417 + 0.858552 1.35956 -1.47319 -0.415022 -0.074743 -0.906736 + 0.878787 1.29238 -1.45967 -0.187484 -0.482284 -0.855717 + 0.847121 1.30088 -1.4556 -0.344237 -0.382087 -0.857619 + 0.959292 1.50938 -1.42342 0.335554 0.318392 -0.886583 + 0.963096 1.45929 -1.44114 0.316869 0.355454 -0.879344 + 0.91434 1.41689 -1.47011 0.15869 0.319272 -0.934282 + 1.01072 1.52239 -1.39266 0.689735 0.308729 -0.654944 + 1.01453 1.4723 -1.41038 0.461231 0.414974 -0.784259 + 0.98016 1.41624 -1.45338 0.317951 0.362398 -0.876114 + 0.931404 1.37385 -1.48235 0.150924 0.292162 -0.944385 + 1.04978 1.47254 -1.39122 0.453557 0.540576 -0.708564 + 1.05458 1.42328 -1.4134 0.465144 0.328523 -0.822018 + 1.01932 1.42304 -1.43253 0.431923 0.331593 -0.838742 + 0.999749 1.41196 -1.44675 0.422067 0.320541 -0.848005 + 0.964212 1.36744 -1.47782 0.2982 0.188931 -0.935618 + 1.07912 1.46677 -1.37376 0.46458 0.535617 -0.705181 + 1.08654 1.42099 -1.39583 0.507833 0.322928 -0.798638 + 1.04447 1.36845 -1.43462 0.433339 0.224583 -0.8728 + 1.02934 1.36782 -1.44163 0.443659 0.159694 -0.881853 + 1.00976 1.35673 -1.45584 0.530498 0.0172642 -0.84751 + 1.11694 1.47565 -1.34457 0.615662 0.561044 -0.553345 + 1.12435 1.42987 -1.36663 0.633974 0.337756 -0.695699 + 1.07643 1.36615 -1.41705 0.46611 0.247746 -0.849331 + 1.06289 1.32996 -1.4339 0.433489 0.0534647 -0.899572 + 1.04776 1.32933 -1.44091 0.254579 -0.142309 -0.956524 + 1.1273 1.48199 -1.31873 0.730982 0.646021 -0.219823 + 1.14774 1.43202 -1.33843 0.886451 0.265743 -0.378927 + 1.11281 1.36137 -1.40025 0.602261 0.218063 -0.767939 + 1.09927 1.32518 -1.4171 0.557531 -0.140522 -0.818176 + 1.0756 1.31095 -1.42544 0.359296 -0.502092 -0.786645 + 1.13437 1.47422 -1.2827 0.801884 0.580395 0.141858 + 1.15481 1.42424 -1.30241 0.961423 0.240654 -0.133238 + 1.13619 1.36352 -1.37206 0.845504 0.0866211 -0.526896 + 1.124 1.32265 -1.39441 0.752232 -0.259531 -0.605633 + 1.10033 1.30842 -1.40275 0.512621 -0.65194 -0.558743 + 1.07278 1.5156 -1.24957 0.686427 0.548963 0.476925 + 1.12165 1.46626 -1.24724 0.671236 0.507542 0.540226 + 1.15167 1.42218 -1.25256 0.851174 0.254951 0.458806 + 1.1603 1.41239 -1.27724 0.983932 0.155433 0.0878491 + 1.15203 1.37176 -1.33905 0.929861 0.0917609 -0.356285 + 1.03957 1.50887 -1.20666 0.635208 0.390244 0.666498 + 1.09297 1.44319 -1.20978 0.589965 0.380588 0.712105 + 1.12299 1.39912 -1.2151 0.714026 0.198628 0.671352 + 1.14928 1.36379 -1.24717 0.888024 -0.0493068 0.457146 + 1.15791 1.354 -1.27186 0.960906 -0.173744 0.215576 + 1.00421 1.55353 -1.19186 0.737266 0.0997922 0.668191 + 1.01636 1.48583 -1.17629 0.554872 0.331603 0.762992 + 1.06975 1.42015 -1.1794 0.531778 0.347786 0.772177 + 1.08528 1.38534 -1.17552 0.582804 0.25968 0.770004 + 1.11115 1.37852 -1.19769 0.731748 0.138143 0.667429 + 0.990011 1.60374 -1.16747 0.810996 0.0240756 0.584556 + 0.963392 1.60487 -1.13858 0.646056 -0.107365 0.755701 + 0.97759 1.55466 -1.16298 0.733845 0.00551385 0.679294 + 0.988788 1.50586 -1.16464 0.63886 0.238227 0.73151 + 1.01843 1.40529 -1.14496 0.379943 0.231609 0.895545 + 0.986193 1.62416 -1.16889 0.920829 0.262327 0.288544 + 0.967825 1.6684 -1.13811 0.925109 0.026811 0.378754 + 0.955425 1.65951 -1.12022 0.689505 -0.170272 0.703982 + 0.937216 1.59524 -1.12558 0.255904 -0.164941 0.952527 + 0.948263 1.54908 -1.13115 0.376309 -0.0268754 0.926104 + 0.970598 1.67943 -1.1668 0.971454 0.235007 0.0323743 + 0.963711 1.73707 -1.13453 0.979887 0.198885 0.0163293 + 0.961795 1.7294 -1.11447 0.937887 0.0361091 0.345057 + 0.949395 1.72051 -1.09659 0.69234 -0.15825 0.704004 + 0.929249 1.64988 -1.10723 0.246628 -0.276896 0.928711 + 0.95951 1.7442 -1.1529 0.878679 0.362987 -0.310103 + 0.945054 1.79252 -1.1222 0.826759 0.519852 -0.214996 + 0.948172 1.78724 -1.10924 0.920011 0.382565 0.0849929 + 0.946256 1.77957 -1.08917 0.888531 0.203626 0.411155 + 0.93636 1.7965 -1.13195 0.517344 0.627447 -0.581949 + 0.91926 1.83109 -1.09737 0.760489 0.631822 -0.149855 + 0.922378 1.82582 -1.0844 0.852175 0.502442 0.146117 + 0.920922 1.82009 -1.06974 0.830829 0.32796 0.449628 + 0.937389 1.77329 -1.07643 0.674702 -0.0326782 0.737367 + 0.921356 1.79703 -1.13685 0.137795 0.605047 -0.784175 + 0.912562 1.83421 -1.10477 0.476359 0.708658 -0.520467 + 0.902873 1.85371 -1.07998 0.686777 0.723948 -0.0650869 + 0.904925 1.85022 -1.07134 0.76785 0.612483 0.187805 + 0.895594 1.79447 -1.13804 -0.229959 0.511102 -0.828187 + 0.878788 1.83304 -1.11036 -0.244041 0.52293 -0.816693 + 0.897558 1.83475 -1.10967 0.108401 0.647948 -0.753932 + 0.896175 1.85682 -1.08738 0.408285 0.81675 -0.407705 + 0.879943 1.78854 -1.13211 -0.667891 0.295933 -0.682894 + 0.863138 1.82711 -1.10443 -0.686341 0.249155 -0.683271 + 0.867431 1.85564 -1.09128 -0.297956 0.713357 -0.634306 + 0.886201 1.85735 -1.09059 0.0874 0.798347 -0.595821 + 0.890148 1.86201 -1.07722 0.294309 0.949582 -0.10806 + 0.881855 1.73813 -1.16231 -0.695486 0.406079 -0.59279 + 0.869894 1.77725 -1.11761 -0.927555 0.0460724 -0.370837 + 0.855652 1.81903 -1.09362 -0.91446 -0.0115547 -0.404512 + 0.857132 1.85179 -1.0873 -0.700516 0.527592 -0.480545 + 0.871806 1.72683 -1.1478 -0.939929 0.223364 -0.258151 + 0.867292 1.76962 -1.10525 -0.988095 -0.150014 -0.0341174 + 0.85305 1.8114 -1.08127 -0.973045 -0.222022 -0.0623643 + 0.847924 1.83866 -1.06835 -0.985721 0.123547 0.114415 + 0.849646 1.84372 -1.07649 -0.937522 0.293781 -0.186399 + 0.855673 1.6544 -1.1612 -0.987949 0.121134 0.0963535 + 0.868179 1.71596 -1.13054 -0.994725 0.054719 0.0867662 + 0.871456 1.76321 -1.09177 -0.847421 -0.340439 0.407405 + 0.856177 1.80659 -1.07119 -0.842373 -0.399871 0.361263 + 0.851051 1.83385 -1.05827 -0.861721 -0.0505548 0.504858 + 0.845582 1.60035 -1.18631 -0.998571 0.0519338 -0.0125878 + 0.861678 1.64516 -1.14179 -0.862892 -0.0525943 0.502644 + 0.872343 1.70956 -1.11707 -0.867016 -0.132437 0.480358 + 0.851587 1.59112 -1.1669 -0.910225 0.0169641 0.413766 + 0.871136 1.58554 -1.14314 -0.632264 -0.102075 0.767999 + 0.876677 1.64231 -1.1261 -0.616535 -0.179227 0.766657 + 0.887343 1.7067 -1.10138 -0.596558 -0.266608 0.756993 + 0.831316 1.54152 -1.18504 -0.668939 0.574605 0.47154 + 0.850865 1.53594 -1.16128 -0.598038 -0.059599 0.799249 + 0.900081 1.58792 -1.12604 -0.25884 -0.202557 0.944443 + 0.905622 1.64469 -1.10901 -0.247844 -0.268388 0.930882 + 0.90756 1.70853 -1.08935 -0.232993 -0.324206 0.916845 + 0.8172 1.54075 -1.19538 -0.222111 0.448176 0.865913 + 0.796371 1.52699 -1.20372 -0.6791 -0.17792 0.712157 + 0.865981 1.48471 -1.16314 -0.429084 -0.0594261 0.901308 + 0.911128 1.54176 -1.13161 -0.218763 -0.134349 0.966485 + 0.794672 1.59027 -1.20888 0.0241634 0.111627 0.993456 + 0.796723 1.54369 -1.19477 -0.298448 -0.136837 0.944566 + 0.781369 1.64472 -1.19888 -0.0332926 -0.246044 0.968687 + 0.766167 1.63927 -1.20409 -0.3666 -0.229803 0.901552 + 0.774195 1.59321 -1.20828 -0.284964 -0.0249724 0.958213 + 0.753347 1.59002 -1.22145 -0.748606 -0.191462 0.634768 + 0.752994 1.57331 -1.2304 -0.799915 -0.341954 0.493158 + 0.796131 1.65424 -1.19988 0.475111 -0.168223 0.863696 + 0.78446 1.70838 -1.1777 0.0523447 -0.337577 0.939841 + 0.769258 1.70293 -1.18292 -0.332044 -0.329531 0.88383 + 0.745318 1.63607 -1.21726 -0.718234 -0.176283 0.6731 + 0.794522 1.71516 -1.17827 0.534357 -0.246125 0.808632 + 0.774765 1.76119 -1.15758 0.0640766 -0.360595 0.930519 + 0.763914 1.75726 -1.16133 -0.282903 -0.432999 0.855849 + 0.74944 1.75483 -1.17051 -0.626443 -0.429482 0.650473 + 0.754784 1.7005 -1.1921 -0.668803 -0.257403 0.697457 + 0.806145 1.72636 -1.18875 0.8327 -0.106115 0.543462 + 0.784826 1.76798 -1.15815 0.511949 -0.171132 0.841797 + 0.754731 1.8035 -1.13919 0.0353615 -0.330528 0.943134 + 0.74388 1.79956 -1.14295 -0.298056 -0.446937 0.843451 + 0.801975 1.78702 -1.18221 0.912047 0.23468 0.336295 + 0.793264 1.77565 -1.16576 0.782726 0.0284399 0.621717 + 0.771158 1.81581 -1.14754 0.72509 0.144497 0.673324 + 0.76272 1.80815 -1.13993 0.445967 -0.0988095 0.889579 + 0.741401 1.82964 -1.13126 -0.10746 -0.0404948 0.993384 + 0.802553 1.79192 -1.19667 0.882359 0.461122 -0.0938562 + 0.778137 1.82888 -1.1742 0.800014 0.597594 -0.0534719 + 0.777559 1.82398 -1.15972 0.844614 0.357656 0.398383 + 0.761438 1.84749 -1.14925 0.684258 0.573743 0.450123 + 0.755037 1.83934 -1.13707 0.550136 0.371064 0.748106 + 0.772673 1.82908 -1.18649 0.579913 0.69253 -0.429073 + 0.756334 1.85098 -1.17113 0.449574 0.819048 -0.356432 + 0.761798 1.85078 -1.15885 0.657893 0.752374 0.0333235 + 0.751545 1.85605 -1.1564 0.318978 0.941965 0.104663 + 0.751185 1.85277 -1.14682 0.333104 0.803652 0.493138 + 0.764379 1.82667 -1.19626 0.277715 0.681506 -0.677069 + 0.750673 1.84965 -1.17755 0.187976 0.794057 -0.578047 + 0.743052 1.85483 -1.16918 -0.00451143 0.913251 -0.407371 + 0.748713 1.85615 -1.16277 0.217819 0.957252 -0.190325 + 0.741575 1.85703 -1.15459 -0.0977939 0.980734 0.169109 + 0.755451 1.82303 -1.20038 -0.1374 0.551877 -0.822528 + 0.741745 1.84601 -1.18167 -0.204156 0.659915 -0.723072 + 0.738424 1.85294 -1.17131 -0.272659 0.812695 -0.51496 + 0.734115 1.85525 -1.16309 -0.401512 0.893973 -0.199001 + 0.738743 1.85714 -1.16096 -0.208965 0.976508 -0.0525801 + 0.742583 1.81679 -1.19792 -0.497364 0.34637 -0.795397 + 0.733057 1.84215 -1.17988 -0.514376 0.496156 -0.699462 + 0.729735 1.84908 -1.16954 -0.540659 0.683093 -0.49099 + 0.727286 1.85203 -1.15864 -0.57471 0.818156 -0.0181353 + 0.719883 1.83594 -1.17128 -0.812385 0.297167 -0.501719 + 0.722907 1.84586 -1.16508 -0.73852 0.592507 -0.321752 + 0.718702 1.84165 -1.15626 -0.907116 0.417053 0.056634 + 0.72402 1.8482 -1.15171 -0.667438 0.706083 0.236586 + 0.727866 1.85081 -1.15354 -0.412949 0.86115 0.296467 + 0.722925 1.80436 -1.17595 -0.960445 -0.19422 -0.199558 + 0.715678 1.83173 -1.16247 -0.992218 0.0606729 -0.108729 + 0.719918 1.83933 -1.14902 -0.884731 0.276412 0.375296 + 0.72527 1.79989 -1.16198 -0.882196 -0.401556 0.245931 + 0.718023 1.82726 -1.14849 -0.928105 -0.120268 0.352358 + 0.725078 1.83808 -1.14091 -0.670801 0.225145 0.706637 + 0.725235 1.84589 -1.14446 -0.608543 0.606769 0.511378 + 0.741661 1.75646 -1.18278 -0.901015 -0.323545 0.288946 + 0.733049 1.79826 -1.14971 -0.616365 -0.47901 0.625015 + 0.723183 1.82601 -1.14039 -0.699206 -0.169596 0.694513 + 0.735051 1.58088 -1.25955 -0.916573 -0.241584 0.318641 + 0.754843 1.53399 -1.27322 -0.837855 -0.282676 0.467004 + 0.772786 1.52642 -1.24407 -0.842439 -0.254015 0.475156 + 0.765543 1.47731 -1.26327 -0.862801 0.0320055 0.504529 + 0.781268 1.4777 -1.23637 -0.863051 0.0330505 0.504035 + 0.804852 1.47827 -1.19603 -0.765667 0.0301711 0.64253 + 0.823026 1.46197 -1.17892 -0.485722 0.0725922 0.871094 + 0.771192 1.37805 -1.22652 -0.864946 0.0852553 0.494571 + 0.786916 1.37844 -1.19961 -0.763687 0.0299913 0.64489 + 0.80509 1.36213 -1.18251 -0.602154 -0.177118 0.778486 + 0.853963 1.41249 -1.16796 -0.298656 -0.0246048 0.954044 + 0.896919 1.43523 -1.15219 -0.342073 -0.0846641 0.935852 + 0.766858 1.35223 -1.22987 -0.884744 -0.0354246 0.464729 + 0.780603 1.31049 -1.21006 -0.777689 -0.318832 0.541799 + 0.818454 1.29184 -1.18857 -0.485622 -0.407024 0.77363 + 0.830741 1.31746 -1.17781 -0.362327 -0.138754 0.921665 + 0.748204 1.37398 -1.2767 -0.955035 -0.0941958 0.281133 + 0.761949 1.33225 -1.25689 -0.928583 -0.335763 0.158102 + 0.792617 1.28394 -1.22778 -0.682674 -0.668313 0.295491 + 0.830468 1.26529 -1.20629 -0.392183 -0.886371 0.246048 + 0.742543 1.37551 -1.30253 -0.972277 -0.195585 0.128157 + 0.767829 1.31962 -1.27193 -0.881021 -0.471925 0.0329901 + 0.798497 1.27132 -1.24282 -0.614543 -0.717929 0.326979 + 0.841411 1.2691 -1.23049 0.0483444 -0.99745 0.0524926 + 0.769769 1.30105 -1.3271 -0.84912 -0.528196 0.00219716 + 0.768097 1.31819 -1.29644 -0.877566 -0.470584 0.0918125 + 0.804118 1.26001 -1.27021 -0.609436 -0.788784 0.0800402 + 0.824941 1.26014 -1.23715 -0.140329 -0.717787 0.681974 + 0.781434 1.29574 -1.36206 -0.828096 -0.492192 -0.268334 + 0.821516 1.24417 -1.32307 -0.513552 -0.855765 0.0626942 + 0.804387 1.25859 -1.2947 -0.655639 -0.754998 -0.0107978 + 0.851488 1.24768 -1.28461 0.0906039 -0.930692 0.354406 + 0.830563 1.24882 -1.26453 -0.0780739 -0.985026 0.153713 + 0.848779 1.23816 -1.39094 -0.425209 -0.860416 -0.280859 + 0.833181 1.23887 -1.35803 -0.482021 -0.867208 -0.12492 + 0.884292 1.22887 -1.33956 0.185294 -0.962391 0.198668 + 0.868618 1.23326 -1.31297 0.106269 -0.931696 0.347347 + 0.86168 1.24562 -1.41937 -0.373122 -0.754965 -0.539267 + 0.919071 1.22812 -1.39687 0.211984 -0.976651 -0.0348715 + 0.89989 1.22817 -1.37247 0.165118 -0.979979 0.111251 + 0.893346 1.23712 -1.42343 -0.150887 -0.857482 -0.491892 + 0.956661 1.2448 -1.41453 0.428213 -0.870625 -0.242168 + 0.984739 1.26295 -1.38875 0.484595 -0.863757 0.138175 + 0.964953 1.26802 -1.36961 0.371698 -0.807456 0.4581 + 0.945771 1.26806 -1.34521 0.484522 -0.788113 0.379627 + 0.930936 1.2538 -1.44108 0.0917345 -0.701302 -0.706937 + 0.953963 1.27147 -1.45152 0.265328 -0.542998 -0.796714 + 0.969935 1.26377 -1.436 0.54423 -0.636801 -0.546166 + 0.911098 1.29504 -1.46185 -0.027406 -0.472332 -0.880994 + 0.934125 1.31272 -1.47229 0.0393782 -0.431434 -0.901285 + 0.959516 1.32626 -1.47543 0.333047 -0.34087 -0.87914 + 0.975488 1.31856 -1.45992 0.641872 -0.290741 -0.709556 + 0.998013 1.28192 -1.41023 0.705395 -0.566574 -0.425925 + 0.873494 1.32504 -1.47781 -0.515247 -0.358328 -0.778538 + 0.905805 1.32772 -1.47999 -0.00710404 -0.419085 -0.907919 + 0.92504 1.33313 -1.48176 0.0503172 -0.374276 -0.925951 + 0.898388 1.34766 -1.48767 -0.142098 -0.143099 -0.979454 + 0.917624 1.35307 -1.48944 0.0449983 -0.0314999 -0.99849 + 0.950432 1.34667 -1.48492 0.288354 -0.105204 -0.951727 + 0.983801 1.36316 -1.47119 0.427236 0.0722023 -0.901253 + 0.997242 1.33079 -1.45792 0.338374 -0.520203 -0.78415 + 0.986845 1.32558 -1.45128 0.402605 -0.714741 -0.571887 + 1.00937 1.28894 -1.4016 0.472226 -0.650258 -0.595119 + 1.0232 1.32438 -1.44257 0.404531 -0.0596138 -0.91258 + 1.05104 1.306 -1.4271 0.0790811 -0.738515 -0.669584 + 1.02576 1.29708 -1.4081 0.0205149 -0.849385 -0.527375 + 1.01536 1.29187 -1.40145 0.20208 -0.76181 -0.615475 + 1.01945 1.27762 -1.38393 0.346569 -0.921783 -0.173801 + 1.07767 1.29616 -1.40574 0.25697 -0.864048 -0.432882 + 1.05239 1.28725 -1.38674 0.144398 -0.938631 -0.313242 + 1.02544 1.28055 -1.3838 0.290863 -0.850832 -0.437588 + 1.10613 1.29619 -1.37587 0.386258 -0.84887 -0.360866 + 1.0541 1.28699 -1.38359 0.204119 -0.941706 -0.267443 + 1.02715 1.28029 -1.38065 0.147197 -0.986975 -0.0649175 + 1.01639 1.28195 -1.37049 0.0297525 -0.977967 0.206628 + 1.00868 1.27929 -1.37378 0.220717 -0.885921 0.407955 + 1.12878 1.30845 -1.37287 0.717244 -0.572547 -0.397179 + 1.10453 1.28748 -1.35446 0.319302 -0.807367 -0.496191 + 1.0525 1.27827 -1.36219 0.10893 -0.99363 -0.0288568 + 1.03138 1.2821 -1.34221 -0.175038 -0.98392 -0.0355458 + 0.995269 1.28579 -1.35051 -0.0469675 -0.966821 0.2511 + 1.13984 1.33089 -1.36139 0.917546 -0.153986 -0.366603 + 1.1389 1.30092 -1.33857 0.809431 -0.473841 -0.346838 + 1.1003 1.25744 -1.32985 0.136053 -0.906038 -0.40073 + 1.14995 1.32335 -1.3271 0.95016 -0.256995 -0.176491 + 1.15034 1.31745 -1.28508 0.970828 -0.237921 0.0297829 + 1.13466 1.27087 -1.31396 0.726152 -0.622382 -0.292138 + 1.09158 1.25722 -1.30268 -0.128954 -0.987603 0.0895049 + 1.15752 1.35991 -1.31387 0.988885 -0.0691208 -0.131642 + 1.14609 1.30588 -1.26206 0.942912 -0.258518 0.209964 + 1.13041 1.25932 -1.29094 0.521823 -0.852761 0.0223515 + 0.734015 1.8273 -1.13362 -0.38767 -0.136647 0.911613 + 0.730692 1.83876 -1.1374 -0.461778 0.259218 0.848273 + 0.73085 1.84656 -1.14096 -0.42357 0.611243 0.668559 + 0.738078 1.84109 -1.13504 -0.251027 0.36332 0.897209 + 0.734991 1.84898 -1.14134 -0.27851 0.735778 0.617303 + 0.742219 1.8435 -1.13543 0.000378643 0.525177 0.850993 + 0.747867 1.84854 -1.14049 0.230892 0.671632 0.703988 + 0.738837 1.85158 -1.14317 -0.160839 0.793045 0.587547 + 0.749389 1.83431 -1.13199 0.282749 0.17442 0.943202 + 0.742155 1.85581 -1.14948 -0.0534366 0.930321 0.362833 + 1.08949 1.27036 -1.26294 -0.156516 -0.960898 0.228423 + 1.01727 1.29321 -1.28847 -0.336425 -0.923691 0.18334 + 1.02267 1.2819 -1.31504 -0.329628 -0.937452 0.11193 + 0.982052 1.29366 -1.32695 -0.134854 -0.947086 0.291276 + 1.12832 1.27245 -1.2512 0.488962 -0.768771 0.412198 + 1.12251 1.28682 -1.22596 0.646731 -0.599199 0.47191 + 1.10087 1.27697 -1.21521 0.338222 -0.85436 0.394557 + 1.08077 1.27493 -1.23607 -0.133126 -0.988798 0.0675028 + 1.14028 1.32026 -1.23683 0.914638 -0.114474 0.387727 + 1.10719 1.31682 -1.19002 0.682683 -0.280201 0.674857 + 1.08555 1.30697 -1.17926 0.426656 -0.506852 0.749043 + 1.05374 1.28086 -1.19382 0.0737402 -0.896939 0.435963 + 1.03364 1.27882 -1.21467 -0.0694869 -0.996927 -0.0361688 + 1.13744 1.34319 -1.22976 0.852005 -0.0366785 0.522247 + 1.10434 1.33974 -1.18294 0.720211 -0.0105243 0.693675 + 1.07848 1.34656 -1.16078 0.52262 -0.0298057 0.852044 + 1.05663 1.3173 -1.15837 0.359655 -0.420748 0.832838 + 1.02483 1.29119 -1.17293 0.375889 -0.877397 0.298131 + 1.03396 1.37048 -1.14108 0.326725 0.0856427 0.941231 + 1.01212 1.34121 -1.13867 0.1634 -0.155607 0.974211 + 0.997406 1.27631 -1.15377 0.25638 -0.731277 0.632063 + 0.97261 1.26164 -1.18472 0.163784 -0.986261 0.0215399 + 1.00003 1.27652 -1.20389 0.204927 -0.964084 -0.168955 + 0.957644 1.41559 -1.13398 -0.129767 -0.0796128 0.988343 + 0.976872 1.35841 -1.13414 -0.0756399 -0.0869513 0.993337 + 0.962162 1.29351 -1.14923 -0.140313 -0.292265 0.945988 + 0.925629 1.28328 -1.16015 -0.131081 -0.334809 0.933124 + 0.990861 1.42533 -1.13332 0.295741 -0.0188302 0.955082 + 0.926244 1.49054 -1.13347 -0.217439 -0.081181 0.972692 + 0.916147 1.37805 -1.15235 -0.293647 -0.10503 0.950127 + 0.879614 1.36781 -1.16327 -0.248977 -0.0661522 0.966247 + 0.959461 1.50028 -1.13282 0.359934 0.0942121 0.928209 + 0.931187 1.71372 -1.08756 0.279745 -0.290635 0.915027 + 0.902365 1.76281 -1.06867 -0.194326 -0.405531 0.893186 + 0.882147 1.76099 -1.0807 -0.567749 -0.422487 0.706517 + 0.919181 1.76651 -1.0674 0.272466 -0.264192 0.925184 + 0.898515 1.80898 -1.05025 0.247126 -0.216284 0.944537 + 0.881699 1.8053 -1.05151 -0.224009 -0.41161 0.883401 + 0.866868 1.80436 -1.06011 -0.560519 -0.461661 0.687523 + 0.912055 1.81381 -1.057 0.626707 0.0496546 0.777671 + 0.897618 1.84035 -1.04833 0.547167 0.254229 0.797481 + 0.884078 1.83552 -1.04158 0.147373 0.0439851 0.988102 + 0.872943 1.83326 -1.04231 -0.280863 -0.0786144 0.956523 + 0.858111 1.83233 -1.05092 -0.628119 -0.114445 0.769655 + 0.903469 1.84451 -1.05668 0.736949 0.455244 0.499659 + 0.894917 1.85396 -1.05715 0.514668 0.712968 0.476228 + 0.889066 1.8498 -1.0488 0.354849 0.543194 0.760936 + 0.882047 1.8473 -1.0453 0.0798997 0.439588 0.894639 + 0.870912 1.84504 -1.04603 -0.346091 0.388921 0.853792 + 0.895672 1.85692 -1.06475 0.520328 0.803319 0.289719 + 0.884859 1.8593 -1.06086 0.0866897 0.92823 0.361766 + 0.884105 1.85633 -1.05326 0.102357 0.844771 0.525247 + 0.877086 1.85383 -1.04977 -0.163248 0.759263 0.629976 + 0.89362 1.8604 -1.07339 0.46141 0.879977 0.112877 + 0.882319 1.86238 -1.06833 0.0863302 0.933093 0.349118 + 0.8803 1.85971 -1.0642 -0.183544 0.880091 0.437895 + 0.869399 1.85334 -1.05423 -0.332736 0.773294 0.539725 + 0.863225 1.84456 -1.05049 -0.539929 0.391074 0.745344 + 0.878847 1.864 -1.07216 0.0074882 0.990518 0.13718 + 0.869117 1.86311 -1.07252 -0.28309 0.948041 0.145182 + 0.865237 1.85893 -1.06692 -0.372999 0.852487 0.366248 + 0.863219 1.85625 -1.06279 -0.427837 0.802477 0.415915 + 0.86484 1.85376 -1.05757 -0.395155 0.744711 0.537827 + 0.880174 1.86256 -1.08044 0.0210911 0.947838 -0.318054 + 0.870445 1.86166 -1.0808 -0.230059 0.9156 -0.329773 + 0.860146 1.85782 -1.07682 -0.607892 0.7886 -0.092616 + 0.856266 1.85362 -1.07121 -0.738656 0.664643 0.112411 + 0.854544 1.84856 -1.06307 -0.763381 0.544531 0.347471 + 0.856165 1.84608 -1.05784 -0.69307 0.445276 0.566906 + 0.913342 1.25765 -1.1709 -0.108216 -0.744451 0.658849 + 0.935689 1.254 -1.17927 0.187011 -0.952847 0.238977 + 0.944768 1.28487 -1.2275 0.0501451 -0.883317 -0.466086 + 0.973217 1.29523 -1.24871 -0.00638026 -0.920206 -0.391384 + 0.852815 1.26164 -1.21466 -0.0344646 -0.967893 -0.248989 + 0.907848 1.27721 -1.22204 0.132768 -0.844577 -0.518712 + 0.896444 1.28468 -1.23787 0.189388 -0.919245 -0.345138 + 0.928007 1.29472 -1.25153 0.146829 -0.945375 -0.291044 + 0.890082 1.28386 -1.24262 0.315179 -0.944327 0.0943839 + 0.921645 1.2939 -1.25628 0.355093 -0.932088 0.0715549 + 0.951437 1.30384 -1.27738 0.392175 -0.908203 0.14617 + 0.956456 1.30509 -1.27275 0.153834 -0.959353 -0.236595 + 1.00682 1.29754 -1.2595 -0.128268 -0.940916 -0.313409 + 0.873612 1.2749 -1.24928 0.34608 -0.860455 0.37396 + 0.894538 1.27375 -1.26936 0.418576 -0.850683 0.318014 + 0.92433 1.28369 -1.29046 0.46639 -0.806028 0.364415 + 0.940004 1.27931 -1.31705 0.476945 -0.780841 0.403498 + 0.969913 1.30349 -1.30289 0.272122 -0.87837 0.392958 + 0.967692 1.30929 -1.28807 0.302757 -0.923166 0.236858 + 0.972711 1.31055 -1.28343 0.0634832 -0.975958 -0.208507 + 0.975681 1.29224 -1.33105 0.232301 -0.89181 0.388214 + 0.976651 1.30498 -1.30037 -0.163974 -0.931391 0.324997 + 0.97443 1.31079 -1.28553 -0.158101 -0.98158 0.107263 + 1.00854 1.29778 -1.2616 -0.260384 -0.959425 -0.108187 + 0.988898 1.28436 -1.35462 0.162558 -0.90241 0.399038 + 0.662234 2.30119 -1.93689 -0.700089 0.712293 -0.0501403 + 0.671906 2.30149 -1.91584 -0.479282 0.787934 0.386586 + 0.691178 2.31766 -1.92781 -0.413431 0.84002 0.351343 + 0.647785 2.28544 -1.92234 -0.783983 0.614324 0.0893147 + 0.668617 2.29306 -1.90509 -0.481967 0.723909 0.493623 + 0.703591 2.30482 -1.89977 -0.188053 0.735071 0.651388 + 0.681506 2.31737 -1.94886 -0.622821 0.77692 -0.0921334 + 0.686797 2.31231 -1.96761 -0.63471 0.57292 -0.518561 + 0.656699 2.28706 -1.94892 -0.783715 0.435917 -0.442455 + 0.64225 2.2713 -1.93437 -0.917245 0.287327 -0.27587 + 0.644497 2.27701 -1.91159 -0.813221 0.500292 0.297287 + 0.701295 2.32979 -1.95471 -0.407999 0.909046 -0.0846932 + 0.706586 2.32474 -1.97346 -0.349319 0.770202 -0.533635 + 0.707219 2.26081 -2.02254 -0.612769 0.434793 -0.659901 + 0.67712 2.23555 -2.00384 -0.75054 0.302052 -0.587754 + 0.655268 2.21173 -1.98184 -0.897819 0.111924 -0.425904 + 0.702805 2.32088 -1.92498 -0.270463 0.870784 0.410591 + 0.712922 2.33301 -1.95189 -0.152197 0.988241 0.0147135 + 0.724745 2.32977 -1.96905 0.0727982 0.913513 -0.400243 + 0.755307 2.28464 -2.02698 0.157231 0.801729 -0.576636 + 0.737148 2.2796 -2.03139 -0.292383 0.657319 -0.694581 + 0.70993 2.31707 -1.91436 -0.201646 0.844682 0.495834 + 0.732056 2.32883 -1.93265 0.165328 0.941452 0.293827 + 0.724931 2.33264 -1.94327 0.0686308 0.982874 0.171022 + 0.736754 2.3294 -1.96044 0.394043 0.900366 -0.184581 + 0.710472 2.31279 -1.90741 -0.164522 0.784902 0.597379 + 0.737508 2.31936 -1.91445 0.294043 0.749937 0.592564 + 0.736966 2.32364 -1.92139 0.244051 0.874902 0.418313 + 0.752792 2.31826 -1.93259 0.680277 0.703568 0.205465 + 0.747882 2.32345 -1.94384 0.580389 0.814059 0.0213778 + 0.726568 2.30354 -1.89746 0.241862 0.496269 0.833798 + 0.733448 2.31151 -1.9051 0.284337 0.59437 0.752248 + 0.749578 2.30373 -1.9124 0.689121 0.259375 0.676637 + 0.753638 2.31157 -1.92174 0.735604 0.484882 0.47305 + 0.709599 2.28836 -1.88548 0.183861 0.433306 0.882293 + 0.721864 2.27609 -1.88848 0.530826 0.00852059 0.847438 + 0.738832 2.29127 -1.90046 0.603796 0.0915974 0.791859 + 0.775984 2.23927 -1.94341 0.714757 -0.0973038 0.692571 + 0.78673 2.25172 -1.95535 0.811373 0.0620712 0.581223 + 0.683977 2.28909 -1.88871 -0.261317 0.69527 0.669562 + 0.689985 2.27263 -1.87442 0.111999 0.404332 0.907729 + 0.691231 2.25153 -1.8712 0.399406 -0.0528014 0.915252 + 0.719688 2.19174 -1.90802 0.53058 -0.273297 0.802368 + 0.75032 2.21631 -1.92529 0.63366 -0.191532 0.749527 + 0.677903 2.28876 -1.89228 -0.417846 0.701722 0.577054 + 0.673534 2.26235 -1.86962 -0.222932 0.348037 0.910589 + 0.67478 2.24124 -1.86641 -0.0906435 -0.201483 0.975289 + 0.694806 2.17619 -1.90076 0.0208483 -0.4975 0.867213 + 0.762482 2.08295 -1.97761 0.537573 -0.292529 0.790849 + 0.648337 2.26887 -1.89649 -0.7402 0.401833 0.539106 + 0.657623 2.26457 -1.88368 -0.659817 0.377533 0.6497 + 0.66746 2.26203 -1.87319 -0.563192 0.358048 0.744725 + 0.665293 2.24074 -1.87198 -0.61694 -0.22991 0.75268 + 0.637114 2.25814 -1.91758 -0.996338 0.0638111 0.056914 + 0.640954 2.24999 -1.90248 -0.914357 -0.116577 0.387766 + 0.655456 2.24329 -1.88247 -0.779515 -0.194685 0.59536 + 0.685319 2.17569 -1.90633 -0.545464 -0.553322 0.629527 + 0.650131 2.19857 -1.96504 -0.980034 -0.161747 -0.115636 + 0.65594 2.18625 -1.94222 -0.879701 -0.405931 0.247681 + 0.670442 2.17954 -1.9222 -0.731532 -0.506676 0.456224 + 0.723551 2.06666 -1.9786 -0.546446 -0.554346 0.627772 + 0.737599 2.0674 -1.97035 0.0459017 -0.505137 0.861818 + 0.688997 2.11225 -2.0718 -0.894282 0.123659 -0.430078 + 0.681391 2.09276 -2.04693 -0.981672 -0.15543 -0.110278 + 0.687199 2.08044 -2.0241 -0.88522 -0.395371 0.245087 + 0.708674 2.0705 -1.99447 -0.730846 -0.50479 0.459403 + 0.751927 1.96167 -2.03831 -0.570912 -0.469382 0.673602 + 0.710849 2.13608 -2.09381 -0.750137 0.29866 -0.589997 + 0.708769 2.01287 -2.1491 -0.899456 0.175576 -0.400191 + 0.701163 1.99338 -2.12423 -0.995136 -0.0689562 -0.070356 + 0.708922 1.97778 -2.09036 -0.903962 -0.306828 0.29784 + 0.730396 1.96785 -2.06072 -0.757159 -0.414667 0.504739 + 0.75542 2.17348 -2.12149 -0.603776 0.431726 -0.670125 + 0.78673 2.07714 -2.21228 -0.596372 0.440829 -0.670828 + 0.742159 2.03974 -2.18461 -0.741328 0.338106 -0.579756 + 0.718511 1.91654 -2.22502 -0.891145 0.244126 -0.382443 + 0.785349 2.19226 -2.13034 -0.281568 0.635452 -0.718972 + 0.831632 2.09707 -2.22876 -0.251725 0.627628 -0.736694 + 0.820298 1.97496 -2.31063 -0.571162 0.460803 -0.679289 + 0.751901 1.94341 -2.26053 -0.726163 0.374811 -0.576371 + 0.812239 2.19972 -2.1238 0.188133 0.768188 -0.611958 + 0.858522 2.10453 -2.22223 0.211752 0.733062 -0.64636 + 0.904952 1.99817 -2.32179 0.262376 0.678786 -0.685864 + 0.8652 1.99489 -2.32711 -0.219965 0.608386 -0.76255 + 0.830036 1.89047 -2.37428 -0.546517 0.425606 -0.721234 + 0.773471 2.28407 -2.01394 0.529883 0.778731 -0.33586 + 0.830403 2.19916 -2.11077 0.558014 0.738237 -0.378981 + 0.885057 2.10202 -2.20443 0.597761 0.687941 -0.411606 + 0.931487 1.99567 -2.304 0.613714 0.639803 -0.46261 + 0.930646 1.90147 -2.39814 0.226818 0.609783 -0.75942 + 0.784599 2.27812 -1.99735 0.723945 0.679322 -0.120109 + 0.846882 2.19034 -2.0862 0.758185 0.633255 -0.15538 + 0.901535 2.09321 -2.17986 0.786074 0.585602 -0.197883 + 0.954505 1.98373 -2.26926 0.809839 0.540711 -0.227581 + 0.792025 2.27028 -1.98033 0.831936 0.548373 0.0846659 + 0.854308 2.1825 -2.06918 0.861191 0.505947 0.0486537 + 0.911928 2.08291 -2.15493 0.887771 0.460059 0.0144161 + 0.964897 1.97343 -2.24433 0.902781 0.429595 -0.0208545 + 0.99123 1.89345 -2.33937 0.815671 0.516376 -0.260839 + 0.79287 2.26359 -1.96948 0.877851 0.312938 0.362557 + 0.855559 2.1726 -2.05312 0.901852 0.271475 0.336101 + 0.91318 2.07301 -2.13887 0.92096 0.240574 0.306524 + 0.965719 1.96289 -2.21997 0.93116 0.223686 0.287935 + 0.849419 2.16073 -2.03899 0.829023 0.0346302 0.558142 + 0.903487 2.05914 -2.11689 0.839363 0.0165293 0.543321 + 0.956027 1.94903 -2.19799 0.844699 0.0120483 0.535106 + 1.0056 1.87237 -2.28108 0.934882 0.198655 0.294163 + 1.00478 1.88291 -2.30544 0.913272 0.405469 -0.0391094 + 0.833506 2.14229 -2.0213 0.725894 -0.122797 0.676757 + 0.887574 2.04071 -2.0992 0.730839 -0.12894 0.67026 + 0.931095 1.93246 -2.16816 0.731589 -0.1219 0.670759 + 0.965064 1.835 -2.2212 0.736589 -0.0954219 0.669576 + 0.989996 1.85156 -2.25103 0.82632 -0.00260556 0.563195 + 0.807843 2.11933 -2.00318 0.64524 -0.210103 0.734521 + 0.848662 2.01527 -2.06917 0.6443 -0.211368 0.734984 + 0.892183 1.90702 -2.13813 0.643306 -0.187598 0.74227 + 0.911749 1.82007 -2.17394 0.650473 -0.131969 0.747977 + 0.978848 1.7391 -2.24915 0.708725 -0.114661 0.696105 + 0.803301 1.97889 -2.0436 0.538112 -0.279418 0.795212 + 0.822741 1.87667 -2.09111 0.525186 -0.248529 0.813888 + 0.842307 1.78971 -2.12691 0.526758 -0.0699772 0.84713 + 0.843826 1.74823 -2.12572 0.53618 -0.104514 0.837609 + 0.925533 1.72417 -2.20189 0.663526 -0.150284 0.732904 + 0.765975 1.96241 -2.03005 0.0228253 -0.454682 0.890361 + 0.785415 1.86019 -2.07757 0.0106474 -0.372981 0.927778 + 0.793324 1.79183 -2.10113 0.0268625 -0.142978 0.989361 + 0.764965 1.86176 -2.08775 -0.591649 -0.372034 0.715221 + 0.772874 1.7934 -2.11132 -0.599304 -0.107782 0.793232 + 0.770512 1.76357 -2.10983 -0.574246 -0.0769935 0.815054 + 0.794844 1.75036 -2.09994 0.00249596 -0.151938 0.988387 + 0.743434 1.86794 -2.11017 -0.773143 -0.32292 0.545868 + 0.745097 1.80715 -2.13932 -0.7821 -0.101872 0.614769 + 0.742735 1.77732 -2.13783 -0.768007 -0.0310783 0.639687 + 0.757929 1.69175 -2.14181 -0.646067 -0.254363 0.719651 + 0.713282 1.88189 -2.15177 -0.919171 -0.21556 0.329633 + 0.714945 1.8211 -2.18093 -0.908906 0.0141856 0.41676 + 0.706562 1.80358 -2.18817 -0.905076 0.0886619 0.415905 + 0.696911 1.73294 -2.22085 -0.941771 -0.0615691 0.33057 + 0.733084 1.70668 -2.17051 -0.811331 -0.152904 0.564236 + 0.705524 1.89749 -2.18565 -0.999159 0.00731655 -0.0403444 + 0.705046 1.83516 -2.22793 -0.973747 0.227527 -0.0069306 + 0.696663 1.81764 -2.23517 -0.962601 0.27088 0.00478115 + 0.690782 1.74648 -2.26215 -0.99685 0.0690316 -0.0390361 + 0.718033 1.85421 -2.2673 -0.868714 0.318007 -0.379747 + 0.710402 1.81461 -2.29184 -0.863541 0.328343 -0.382737 + 0.704521 1.74345 -2.31883 -0.930635 0.170969 -0.323555 + 0.761639 1.85892 -2.32418 -0.678895 0.418539 -0.603264 + 0.754009 1.81933 -2.34872 -0.642565 0.443453 -0.624868 + 0.719399 1.73808 -2.35506 -0.80952 0.246333 -0.532914 + 0.696827 1.64032 -2.34079 -0.950187 0.090559 -0.298235 + 0.833309 1.79061 -2.43007 -0.516089 0.41206 -0.750905 + 0.827699 1.73417 -2.4562 -0.547419 0.351054 -0.759667 + 0.748398 1.76289 -2.37486 -0.658395 0.341972 -0.670501 + 0.745485 1.659 -2.4139 -0.717426 0.197369 -0.668091 + 0.711705 1.63495 -2.37702 -0.860826 0.114814 -0.495779 + 0.890894 1.89819 -2.40346 -0.188617 0.537879 -0.821651 + 0.894168 1.79832 -2.45924 -0.254788 0.460794 -0.850148 + 0.862776 1.70508 -2.49231 -0.430393 0.308177 -0.848404 + 0.774483 1.6838 -2.4337 -0.63756 0.246803 -0.729798 + 0.95015 1.82306 -2.44983 0.176843 0.539151 -0.823433 + 0.962286 1.76365 -2.48349 0.209413 0.433209 -0.876628 + 0.906304 1.73891 -2.4929 -0.209751 0.427739 -0.879229 + 0.968212 1.90539 -2.37411 0.592635 0.59902 -0.538478 + 0.987716 1.82698 -2.4258 0.57409 0.53914 -0.616237 + 1.00159 1.77161 -2.46045 0.608269 0.398638 -0.686365 + 0.964559 1.72626 -2.49555 0.329537 0.341156 -0.880351 + 0.929799 1.71694 -2.50798 -0.0314069 0.389298 -0.920576 + 1.01923 1.82657 -2.37916 0.807799 0.478478 -0.344266 + 1.0331 1.77121 -2.41381 0.783063 0.450379 -0.428918 + 1.00386 1.73423 -2.47251 0.52275 0.357287 -0.774002 + 0.972498 1.66507 -2.51892 0.338263 0.347848 -0.874403 + 1.03278 1.81604 -2.34523 0.933579 0.358352 -0.00378537 + 1.05161 1.76093 -2.37974 0.955417 0.284174 -0.0801475 + 1.0388 1.73244 -2.44884 0.706026 0.416678 -0.572631 + 1.03766 1.66368 -2.47911 0.743369 0.220584 -0.631463 + 1.00271 1.66546 -2.50279 0.492539 0.322597 -0.808292 + 1.03164 1.79677 -2.31524 0.92868 0.139109 0.343806 + 1.05047 1.74166 -2.34976 0.946588 0.106863 0.304224 + 1.05732 1.72216 -2.41478 0.935485 0.249442 -0.250294 + 1.01603 1.77596 -2.28519 0.814951 -0.0213268 0.579137 + 1.02877 1.71446 -2.30948 0.817695 -0.0764495 0.570552 + 1.06608 1.70247 -2.37884 0.98671 0.0764947 0.143359 + 1.06358 1.62938 -2.41404 0.99761 -0.0690584 -0.00230886 + 1.05483 1.64907 -2.44998 0.935142 0.0744831 -0.346356 + 0.991591 1.6776 -2.27344 0.722945 -0.170166 0.669622 + 0.987141 1.64227 -2.27943 0.721815 -0.203222 0.661577 + 1.04438 1.67527 -2.33857 0.849455 -0.135481 0.509972 + 0.928917 1.65604 -2.22124 0.654501 -0.1902 0.731746 + 0.84721 1.6801 -2.14508 0.527051 -0.253871 0.811028 + 0.924466 1.62071 -2.22722 0.622346 -0.244183 0.74368 + 0.800543 1.65759 -2.12917 -0.0247224 -0.361444 0.932066 + 0.849891 1.58028 -2.18976 0.479407 -0.337192 0.810229 + 0.847353 1.52504 -2.20593 0.252695 -0.351903 0.901282 + 0.921928 1.56547 -2.2434 0.564408 -0.195119 0.802105 + 0.78226 1.67854 -2.13192 -0.493658 -0.315895 0.810254 + 0.779096 1.55243 -2.18899 -0.485447 -0.488332 0.725171 + 0.803225 1.55777 -2.17385 0.0303811 -0.497011 0.867212 + 0.809967 1.50612 -2.21306 -0.113894 -0.627807 0.769991 + 0.858232 1.50344 -2.22114 0.321648 -0.523018 0.7893 + 0.729885 1.58097 -2.2126 -0.703871 -0.362518 0.610857 + 0.760813 1.57338 -2.19175 -0.567238 -0.393033 0.723717 + 0.763128 1.50201 -2.24492 -0.484207 -0.696389 0.529703 + 0.785838 1.50078 -2.2282 -0.339161 -0.732162 0.590685 + 0.705041 1.5959 -2.2413 -0.896007 -0.260487 0.359607 + 0.727552 1.50758 -2.29468 -0.815277 -0.566922 0.117993 + 0.732201 1.5096 -2.26577 -0.768822 -0.534011 0.351773 + 0.79173 1.45366 -2.31689 -0.400011 -0.886361 0.233142 + 0.81444 1.45243 -2.30017 -0.179193 -0.917239 0.355757 + 0.697095 1.60853 -2.27505 -0.975359 -0.177916 0.13046 + 0.719606 1.52022 -2.32843 -0.85424 -0.509483 0.103445 + 0.77798 1.45808 -2.36581 -0.542994 -0.839117 0.0322331 + 0.787081 1.45164 -2.3458 -0.471582 -0.880553 0.0472935 + 0.690965 1.62207 -2.31635 -0.997444 -0.0628849 -0.033923 + 0.714012 1.52048 -2.35343 -0.793156 -0.580599 0.18387 + 0.772387 1.45834 -2.39081 -0.459482 -0.888067 0.0146262 + 0.821425 1.44275 -2.39031 0.148141 -0.908183 -0.391481 + 0.830525 1.43631 -2.3703 0.170821 -0.965349 -0.197284 + 0.70237 1.56553 -2.37354 -0.919136 0.0165323 -0.393594 + 0.696508 1.54728 -2.34911 -0.888356 -0.330987 0.318233 + 0.739204 1.4759 -2.4068 -0.691215 -0.710952 -0.129493 + 0.768963 1.46795 -2.4262 -0.166699 -0.821156 -0.545815 + 0.802146 1.45039 -2.41021 -0.00244717 -0.858773 -0.51235 + 0.719395 1.57264 -2.40035 -0.822621 0.0772144 -0.563324 + 0.721699 1.50269 -2.40248 -0.885696 -0.348539 -0.306698 + 0.738725 1.5098 -2.42928 -0.774139 -0.165761 -0.610927 + 0.756482 1.47811 -2.43653 -0.416224 -0.613345 -0.671242 + 0.753175 1.59668 -2.43723 -0.76287 0.129119 -0.633528 + 0.752344 1.53175 -2.44773 -0.755237 -0.0412167 -0.654154 + 0.767666 1.59787 -2.45405 -0.587676 0.212831 -0.780602 + 0.766835 1.53293 -2.46456 -0.568832 -0.0943899 -0.817019 + 0.770101 1.50006 -2.45498 -0.286893 -0.491131 -0.822485 + 0.802688 1.48985 -2.43791 0.105407 -0.689741 -0.716343 + 0.787825 1.60187 -2.46326 -0.533387 0.17952 -0.826602 + 0.775175 1.53447 -2.46828 -0.407422 -0.0929335 -0.908499 + 0.783568 1.50665 -2.4605 -0.132566 -0.583799 -0.801002 + 0.816156 1.49644 -2.44343 0.0263318 -0.810131 -0.585658 + 0.815169 1.47968 -2.42758 0.105876 -0.607886 -0.786934 + 0.80956 1.65472 -2.4698 -0.585929 0.192644 -0.787131 + 0.834381 1.57937 -2.49915 -0.527979 -0.00901256 -0.849209 + 0.795335 1.53847 -2.47749 -0.379415 -0.0965355 -0.920177 + 0.799746 1.50878 -2.47087 -0.314491 -0.660004 -0.682268 + 0.791909 1.50818 -2.46422 -0.287499 -0.728917 -0.621308 + 0.856116 1.63222 -2.50569 -0.508646 0.182654 -0.841378 + 0.881593 1.58963 -2.53022 -0.500878 0.0741193 -0.862338 + 0.873375 1.55246 -2.51634 -0.599841 -0.147045 -0.786491 + 0.823302 1.53265 -2.48298 -0.344404 -0.261738 -0.901598 + 0.886271 1.68311 -2.50739 -0.339354 0.282606 -0.897202 + 0.911747 1.64053 -2.53192 -0.305904 0.280891 -0.909683 + 0.906936 1.54814 -2.54853 -0.663379 -0.0685556 -0.745136 + 0.898718 1.51097 -2.53465 -0.606455 -0.350795 -0.713552 + 0.862296 1.50574 -2.50017 -0.575435 -0.420625 -0.701391 + 0.937738 1.65575 -2.53135 0.0331199 0.344394 -0.938241 + 0.91826 1.55614 -2.56075 -0.45608 0.0795948 -0.886372 + 0.938077 1.51208 -2.56524 -0.208019 -0.339887 -0.917172 + 0.926752 1.50408 -2.55302 -0.463644 -0.477295 -0.746474 + 0.918406 1.46792 -2.50923 -0.527312 -0.596774 -0.604817 + 0.971973 1.56406 -2.55641 0.32753 0.173357 -0.928801 + 0.944251 1.57137 -2.56018 0.0427712 0.23108 -0.971994 + 0.965799 1.50478 -2.56146 0.17225 -0.313621 -0.933794 + 0.94644 1.46103 -2.5276 -0.194366 -0.720725 -0.665416 + 0.908384 1.45247 -2.48527 -0.463667 -0.826135 -0.320178 + 1.00219 1.56445 -2.54027 0.590486 0.130656 -0.796401 + 1.02563 1.56577 -2.51562 0.794473 0.0464434 -0.605522 + 1.01213 1.50124 -2.52694 0.72676 -0.313253 -0.611304 + 0.988691 1.49992 -2.55159 0.497268 -0.350932 -0.793455 + 1.04279 1.55116 -2.48648 0.926479 -0.07608 -0.368575 + 1.02045 1.48892 -2.50796 0.760931 -0.387235 -0.520608 + 0.969331 1.45617 -2.51773 0.300105 -0.695323 -0.653041 + 0.967231 1.42517 -2.48034 -0.0577114 -0.910767 -0.408869 + 0.934111 1.43808 -2.46427 -0.466483 -0.875083 -0.128933 + 1.04434 1.51289 -2.45419 0.968865 -0.236268 -0.0740094 + 1.02199 1.45065 -2.47566 0.765352 -0.543841 -0.344198 + 0.977657 1.44386 -2.49875 0.381989 -0.697831 -0.605901 + 1.05303 1.60998 -2.37494 0.900478 -0.194567 0.388951 + 1.03378 1.49348 -2.41509 0.992777 -0.119957 -0.00224613 + 1.01157 1.43196 -2.45725 0.598278 -0.744309 -0.296761 + 0.978751 1.41416 -2.43431 0.00739088 -0.999733 -0.0218946 + 0.945631 1.42706 -2.41825 -0.512825 -0.852041 0.105055 + 0.995792 1.57698 -2.3158 0.814002 -0.169589 0.555555 + 1.03849 1.50683 -2.38608 0.951259 0.306815 0.0311561 + 1.03263 1.45201 -2.41087 0.884312 -0.430984 0.17957 + 1.02792 1.43867 -2.43989 0.847379 -0.409527 -0.337988 + 0.978323 1.56018 -2.29297 0.769817 -0.174749 0.613877 + 1.02102 1.49003 -2.36325 0.778311 -0.263564 0.569882 + 1.02274 1.45627 -2.3887 0.703907 -0.528014 0.475096 + 0.9951 1.42087 -2.41695 0.402973 -0.893083 0.200042 + 0.985216 1.42513 -2.39478 0.233794 -0.893681 0.382981 + 0.957668 1.56216 -2.26916 0.654388 -0.16491 0.737958 + 0.986659 1.48947 -2.32574 0.698985 -0.326803 0.636097 + 0.988383 1.4557 -2.35119 0.448933 -0.670597 0.590558 + 0.938402 1.49795 -2.268 0.552054 -0.445063 0.705092 + 0.966005 1.49145 -2.30192 0.652621 -0.41273 0.635405 + 0.957587 1.46986 -2.31696 0.157069 -0.863637 0.479019 + 0.965733 1.4575 -2.3428 -0.0787737 -0.871895 0.483315 + 0.962566 1.42692 -2.38639 -0.203534 -0.909628 0.362148 + 0.902662 1.50126 -2.24224 0.42143 -0.450761 0.786899 + 0.895943 1.47159 -2.27488 0.229536 -0.931329 0.282736 + 0.916757 1.47828 -2.28659 0.143584 -0.964206 0.222912 + 0.929985 1.47636 -2.28303 0.0357375 -0.826778 0.561391 + 0.851514 1.47378 -2.25377 0.17846 -0.865555 0.467938 + 0.883863 1.47083 -2.31947 0.387042 -0.922057 -0.0029441 + 0.904677 1.47752 -2.33118 0.127075 -0.988903 -0.0769601 + 0.91077 1.47773 -2.33286 -0.147609 -0.984598 0.093687 + 0.923997 1.47581 -2.32931 -0.21377 -0.956465 0.198686 + 0.820847 1.48452 -2.22826 -0.251544 -0.757459 0.602479 + 0.845107 1.44169 -2.32568 0.270701 -0.949947 0.155957 + 0.869282 1.46545 -2.36408 0.594121 -0.753967 -0.280275 + 0.886052 1.48002 -2.36785 0.268451 -0.941958 -0.201619 + 0.892145 1.48023 -2.36953 -0.253546 -0.965472 0.0598149 + 0.860427 1.48621 -2.41366 -0.200694 -0.979229 -0.0288473 + 0.88349 1.46958 -2.43114 -0.485173 -0.865108 0.127257 + 0.915207 1.4636 -2.38701 -0.519909 -0.826232 0.216876 + 0.855315 1.48492 -2.40979 0.312712 -0.879647 -0.358375 + 0.837786 1.48875 -2.43245 0.0879896 -0.845276 -0.527035 + 0.842899 1.49004 -2.43632 -0.260622 -0.942107 -0.210977 + 0.857762 1.48397 -2.45214 -0.511883 -0.85835 -0.0347977 + 0.838544 1.47036 -2.40602 0.475879 -0.690743 -0.544438 + 0.819265 1.478 -2.42592 0.202534 -0.646646 -0.735411 + 0.833691 1.49043 -2.4341 0.00796357 -0.763876 -0.645313 + 0.839337 1.49281 -2.43923 -0.298526 -0.896703 -0.326812 + 0.8542 1.48674 -2.45505 -0.515067 -0.849626 -0.113324 + 0.821802 1.49881 -2.44856 -0.105673 -0.922353 -0.371616 + 0.829639 1.49942 -2.45521 -0.302403 -0.935282 -0.183849 + 0.852274 1.49029 -2.4762 -0.537337 -0.739943 -0.404663 + 0.827713 1.50296 -2.47636 -0.289065 -0.662239 -0.69129 + 0.932143 1.46345 -2.35515 -0.39054 -0.855965 0.338825 + -0.477956 2.44876 -2.42829 -0.713782 -0.394723 0.578541 + -0.467398 2.44058 -2.42085 -0.524332 -0.503582 0.686644 + -0.455121 2.49752 -2.38613 -0.168457 0.0900533 0.981587 + -0.48166 2.36212 -2.53005 -0.723287 -0.5024 0.473762 + -0.464037 2.34847 -2.51762 -0.53005 -0.616581 0.58213 + -0.447121 2.34366 -2.51467 -0.0655915 -0.719394 0.691498 + -0.450482 2.43577 -2.4179 -0.046679 -0.601423 0.797566 + -0.465679 2.5057 -2.39357 -0.383277 0.30033 0.873442 + -0.492046 2.45967 -2.43823 -0.713777 -0.394727 0.578544 + -0.495751 2.37304 -2.53998 -0.723126 -0.502265 0.474151 + -0.484332 2.25592 -2.64186 -0.720373 -0.483533 0.497251 + -0.440329 2.49849 -2.38915 0.316756 0.157133 0.935401 + -0.476236 2.51388 -2.40102 -0.566382 0.416233 0.71131 + -0.502604 2.46785 -2.44568 -0.829634 -0.25995 0.494099 + -0.513374 2.38669 -2.55241 -0.843808 -0.375323 0.383565 + -0.43569 2.43673 -2.42093 0.302498 -0.558936 0.772065 + -0.418756 2.44069 -2.42749 0.521749 -0.469847 0.712054 + -0.429745 2.50345 -2.39596 0.461368 0.283595 0.840662 + -0.424327 2.51521 -2.40944 0.601343 0.599238 0.528489 + -0.467152 2.52407 -2.41326 -0.203465 0.952545 0.226404 + -0.474164 2.52076 -2.40874 -0.44632 0.824317 0.348282 + -0.422429 2.34527 -2.51972 0.298635 -0.675887 0.673791 + -0.405496 2.34923 -2.52628 0.515755 -0.591514 0.619764 + -0.408173 2.44566 -2.43429 0.639148 -0.39315 0.661001 + -0.398907 2.45053 -2.44081 0.703453 -0.336243 0.626175 + -0.426444 2.50578 -2.39893 0.585456 0.381841 0.715149 + -0.440365 2.23543 -2.62505 -0.048931 -0.705347 0.707172 + -0.415673 2.23704 -2.6301 0.297261 -0.667154 0.683039 + -0.389712 2.24311 -2.64016 0.518166 -0.584773 0.624134 + -0.387829 2.35752 -2.53764 0.639941 -0.516832 0.568648 + -0.378564 2.36239 -2.54416 0.707258 -0.463213 0.53406 + -0.466709 2.24227 -2.62943 -0.523434 -0.600563 0.604434 + -0.44074 2.1104 -2.74687 -0.0493188 -0.687421 0.724583 + -0.404898 2.11274 -2.75421 0.302735 -0.655908 0.691474 + -0.378937 2.1188 -2.76427 0.517269 -0.583588 0.625986 + -0.372046 2.2514 -2.65151 0.639663 -0.514842 0.570761 + -0.4943 2.13491 -2.76878 -0.696929 -0.476595 0.535861 + -0.467083 2.11724 -2.75126 -0.489428 -0.592811 0.639558 + -0.442331 2.02299 -2.82772 -0.0314512 -0.640199 0.767565 + -0.40649 2.02533 -2.83506 0.318501 -0.62997 0.708305 + -0.374365 2.03609 -2.84565 0.530869 -0.575813 0.621786 + -0.505944 2.2722 -2.65711 -0.721319 -0.48383 0.495588 + -0.515912 2.15119 -2.78403 -0.733482 -0.445994 0.512926 + -0.502179 2.0455 -2.85321 -0.690503 -0.424785 0.58546 + -0.474962 2.02784 -2.83569 -0.487818 -0.526032 0.696652 + -0.452376 1.96882 -2.8685 -0.00947196 -0.619013 0.785324 + -0.523567 2.28586 -2.66954 -0.840828 -0.363677 0.400933 + -0.539896 2.17133 -2.80264 -0.852082 -0.322402 0.412326 + -0.553113 2.08232 -2.89334 -0.841536 -0.268257 0.468887 + -0.529129 2.06217 -2.87472 -0.725858 -0.391548 0.565526 + -0.513307 1.9881 -2.90143 -0.704606 -0.30485 0.640778 + -0.519036 2.39674 -2.56253 -0.993684 -0.0101956 0.111752 + -0.532252 2.30126 -2.68505 -0.993001 -0.000787938 0.118101 + -0.548581 2.18674 -2.81815 -0.988103 -0.0106538 0.153427 + -0.564027 2.1075 -2.90947 -0.977349 0.0339309 0.208896 + -0.568557 2.0192 -2.94789 -0.822824 -0.216137 0.52559 + -0.508266 2.4779 -2.45579 -0.964535 0.124737 0.23262 + -0.515576 2.40822 -2.57542 -0.924263 0.345164 -0.163094 + -0.528792 2.31274 -2.69794 -0.932179 0.328645 -0.15177 + -0.545174 2.20307 -2.83628 -0.939959 0.316103 -0.128668 + -0.56062 2.12383 -2.92759 -0.948636 0.316125 0.0124357 + -0.506193 2.48478 -2.46351 -0.887713 0.459375 -0.0306548 + -0.500131 2.49158 -2.47168 -0.702651 0.676886 -0.219333 + -0.509514 2.41502 -2.58358 -0.737999 0.578881 -0.346776 + -0.520503 2.32296 -2.7101 -0.751494 0.56082 -0.347473 + -0.536884 2.21329 -2.84844 -0.767794 0.551236 -0.326545 + -0.493119 2.4949 -2.47621 -0.490723 0.802906 -0.338427 + -0.49781 2.42055 -2.59114 -0.516982 0.720761 -0.461771 + -0.508799 2.32849 -2.71765 -0.52511 0.704602 -0.477279 + -0.522297 2.22082 -2.85854 -0.538309 0.705294 -0.461285 + -0.477694 2.49933 -2.48308 -0.36364 0.848718 -0.383984 + -0.482385 2.42499 -2.59801 -0.391614 0.770759 -0.502562 + -0.486967 2.33492 -2.72754 -0.398568 0.753249 -0.523219 + -0.500465 2.22725 -2.86843 -0.400833 0.761233 -0.509762 + -0.535618 2.15706 -2.94556 -0.526022 0.814297 -0.245401 + -0.461591 2.50266 -2.48885 -0.290495 0.869366 -0.399768 + -0.455504 2.43055 -2.60765 -0.313959 0.794689 -0.519518 + -0.460086 2.34048 -2.73717 -0.31707 0.776471 -0.544572 + -0.466308 2.23432 -2.88067 -0.314123 0.788051 -0.529435 + -0.451048 2.52741 -2.41903 -0.0854002 0.974261 0.208619 + -0.443246 2.50551 -2.4944 -0.210098 0.889037 -0.406783 + -0.437159 2.43339 -2.6132 -0.234496 0.814507 -0.53065 + -0.433981 2.34442 -2.74496 -0.236167 0.794165 -0.559934 + -0.439661 2.52833 -2.42158 0.06001 0.981835 0.179995 + -0.431859 2.50643 -2.49695 -0.0612857 0.912063 -0.405445 + -0.418151 2.43494 -2.61744 -0.075994 0.839986 -0.53726 + -0.414973 2.34596 -2.7492 -0.0696229 0.814534 -0.575923 + -0.4286 2.5258 -2.42033 0.448094 0.854593 0.262455 + -0.416879 2.50535 -2.49781 0.149029 0.915236 -0.374345 + -0.403171 2.43386 -2.61831 0.140231 0.841267 -0.522117 + -0.393462 2.34401 -2.75001 0.15221 0.807642 -0.56969 + -0.415832 2.23983 -2.89347 -0.0594768 0.811874 -0.580796 + -0.391312 2.48349 -2.47758 0.926959 0.357546 0.11361 + -0.395585 2.49407 -2.48847 0.823627 0.565352 -0.0449028 + -0.405817 2.50282 -2.49657 0.495461 0.826532 -0.26714 + -0.384707 2.42964 -2.61623 0.522457 0.743262 -0.417852 + -0.374997 2.33978 -2.74793 0.532501 0.698704 -0.47776 + -0.389873 2.47013 -2.4633 0.952587 0.195579 0.233082 + -0.367343 2.40322 -2.58996 0.972079 0.234349 -0.0119956 + -0.374474 2.42088 -2.60813 0.864561 0.465673 -0.188901 + -0.39199 2.4607 -2.45278 0.939376 0.0621409 0.33721 + -0.369437 2.37412 -2.55811 0.970087 -0.0648975 0.233922 + -0.365904 2.38986 -2.57567 0.989964 0.0803018 0.116288 + -0.352711 2.30859 -2.71715 0.96659 0.236506 -0.0988375 + -0.395605 2.45286 -2.44378 0.853254 -0.153288 0.498458 + -0.373052 2.36627 -2.54911 0.87559 -0.272512 0.398848 + -0.350354 2.27359 -2.679 0.985335 -0.0106209 0.170298 + -0.346821 2.28933 -2.69655 0.993311 0.107274 0.0427142 + -0.357841 2.25887 -2.66151 0.707496 -0.462844 0.534064 + -0.35233 2.26275 -2.66646 0.91187 -0.217126 0.348351 + -0.329112 2.15478 -2.81047 0.991712 0.127836 -0.0128568 + -0.338253 2.17287 -2.83091 0.962373 0.234008 -0.138124 + -0.344143 2.19213 -2.8515 0.967022 0.220721 -0.127082 + -0.339088 2.13831 -2.79074 0.707338 -0.467927 0.529828 + -0.331088 2.14395 -2.79793 0.914263 -0.230053 0.333465 + -0.319993 2.06227 -2.90625 0.997595 0.0415473 -0.0554786 + -0.329134 2.08035 -2.92669 0.967249 0.207806 -0.145763 + -0.353293 2.13085 -2.78075 0.639947 -0.51686 0.568615 + -0.331183 2.05649 -2.87513 0.703264 -0.491482 0.513678 + -0.323182 2.06213 -2.88232 0.911156 -0.269459 0.311748 + -0.323851 2.01424 -2.94759 0.992628 -0.0747521 0.0954014 + -0.348721 2.04813 -2.86213 0.640271 -0.53231 0.553804 + -0.335699 2.01663 -2.91063 0.649697 -0.540085 0.534979 + -0.327041 2.0141 -2.92366 0.857244 -0.379026 0.348528 + -0.381088 1.98997 -2.88234 0.532462 -0.585967 0.610842 + -0.353237 2.00827 -2.89763 0.65041 -0.539372 0.534831 + -0.338162 1.98742 -2.93632 0.65371 -0.528527 0.541592 + -0.329504 1.9849 -2.94935 0.831056 -0.389802 0.396738 + -0.413213 1.9792 -2.87175 0.331722 -0.638423 0.694534 + -0.422761 1.94126 -2.90427 0.297743 -0.670594 0.67945 + -0.383209 1.9579 -2.91144 0.523002 -0.591302 0.613865 + -0.355358 1.9762 -2.92673 0.648929 -0.531535 0.544392 + -0.461924 1.93088 -2.90102 0.0978693 -0.695188 0.712134 + -0.482886 1.89872 -2.93538 0.194687 -0.808608 0.555202 + -0.423224 1.92193 -2.92251 0.283896 -0.751676 0.595303 + -0.383672 1.93857 -2.92968 0.521782 -0.682096 0.512337 + -0.352138 1.95325 -2.95268 0.634726 -0.640366 0.432497 + -0.499306 1.93196 -2.90716 -0.480046 -0.286154 0.82926 + -0.49686 1.91642 -2.91029 -0.178898 -0.514258 0.838769 + -0.517822 1.88427 -2.94465 0.0771349 -0.809935 0.581426 + -0.520296 1.84983 -3.0054 0.147517 -0.871697 0.467315 + -0.489461 1.86738 -2.9882 0.240102 -0.863495 0.44354 + -0.485006 1.97367 -2.87647 -0.504201 -0.427606 0.75029 + -0.527606 1.94638 -2.93211 -0.713167 -0.134316 0.688006 + -0.540477 1.89771 -2.94495 -0.668362 -0.157002 0.727078 + -0.538031 1.88218 -2.94808 -0.457874 -0.632475 0.624762 + -0.540505 1.84774 -3.00883 0.044525 -0.793317 0.607178 + -0.540257 2.00477 -2.92293 -0.712884 -0.319851 0.624093 + -0.550425 1.95592 -2.95582 -0.717065 -0.137263 0.683357 + -0.563295 1.90724 -2.96866 -0.778807 -0.187871 0.598468 + -0.567529 1.8399 -3.00697 -0.104567 -0.651089 0.751764 + -0.535155 1.79806 -3.09115 0.340148 -0.840625 0.421483 + -0.578725 1.97035 -2.98078 -0.856759 -0.160377 0.490146 + -0.579954 1.94416 -2.99674 -0.905186 -0.104193 0.412046 + -0.599692 1.88911 -3.03888 -0.925468 0.00617519 0.378775 + -0.583033 1.85218 -3.0108 -0.714014 -0.257658 0.650996 + -0.589618 1.99987 -2.99685 -0.958446 -0.0246769 0.284204 + -0.590847 1.97369 -3.01281 -0.93631 -0.0896753 0.339532 + -0.579471 2.04438 -2.96402 -0.95826 -0.00316714 0.285881 + -0.584399 2.04968 -2.99969 -0.9862 0.146474 0.077163 + -0.59468 1.9906 -3.02123 -0.984201 0.0671927 0.163807 + -0.609711 1.92795 -3.07071 -0.97534 0.0723991 0.208497 + -0.605878 1.91104 -3.06229 -0.954416 -0.00805304 0.298371 + -0.574252 2.09419 -2.96686 -0.964908 0.251883 0.0742159 + -0.578828 2.08162 -3.00726 -0.931109 0.357932 -0.070149 + -0.58911 2.02254 -3.02881 -0.985573 0.159402 0.0568875 + -0.608203 1.94353 -3.09701 -0.979045 0.179536 0.0961097 + -0.637013 1.84059 -3.16702 -0.989931 0.0571008 0.129519 + -0.550205 2.14953 -2.93546 -0.813702 0.558485 -0.161193 + -0.563837 2.11988 -2.97473 -0.882279 0.460366 -0.0982188 + -0.560378 2.11072 -3.00768 -0.785948 0.55163 -0.279265 + -0.586662 2.05445 -3.04743 -0.913065 0.377179 -0.155077 + -0.605755 1.97545 -3.11563 -0.912638 0.369376 -0.17508 + -0.545387 2.14899 -2.97514 -0.661954 0.723716 -0.195068 + -0.533728 2.13537 -3.02469 -0.558143 0.735336 -0.384393 + -0.560011 2.0791 -3.06445 -0.729394 0.562423 -0.389442 + -0.576123 1.99168 -3.14484 -0.719048 0.536651 -0.44156 + -0.508183 2.17016 -2.95508 -0.398298 0.861567 -0.31474 + -0.517952 2.16209 -2.98466 -0.386136 0.884778 -0.260897 + -0.491183 2.14407 -3.04 -0.266413 0.856064 -0.44292 + -0.516853 2.10795 -3.09817 -0.470965 0.730318 -0.494801 + -0.532964 2.02054 -3.17856 -0.54834 0.591358 -0.591286 + -0.474026 2.17723 -2.96733 -0.19824 0.90362 -0.3797 + -0.475407 2.1708 -2.99997 -0.150471 0.936653 -0.316291 + -0.452411 2.14003 -3.06474 0.13632 0.845895 -0.515633 + -0.478081 2.10392 -3.12291 -0.0964758 0.803228 -0.587807 + -0.440204 2.23825 -2.88846 -0.218931 0.800731 -0.557583 + -0.441222 2.17234 -2.98279 -0.0221138 0.893085 -0.449343 + -0.442603 2.16591 -3.01543 0.329022 0.885641 -0.327695 + -0.422268 2.10312 -3.09402 0.426462 0.765735 -0.481436 + -0.41685 2.17391 -2.9878 0.0676328 0.792689 -0.605863 + -0.41246 2.12899 -3.04471 0.39343 0.758927 -0.518886 + -0.386349 2.06833 -3.10966 0.584743 0.673021 -0.4529 + -0.438839 2.08711 -3.14356 0.237809 0.786797 -0.569558 + -0.39432 2.23788 -2.89427 0.187654 0.788698 -0.585441 + -0.389817 2.15261 -2.99969 0.337419 0.731922 -0.591979 + -0.385427 2.10769 -3.0566 0.506834 0.693966 -0.511401 + -0.356933 2.02515 -3.1269 0.744423 0.553287 -0.373775 + -0.40292 2.05232 -3.15919 0.498005 0.678042 -0.540601 + -0.370119 2.2312 -2.89033 0.55757 0.66381 -0.498469 + -0.365615 2.14594 -2.99574 0.580164 0.6196 -0.528683 + -0.356011 2.06451 -3.07384 0.730735 0.537446 -0.420926 + -0.359842 2.32626 -2.73533 0.881773 0.405898 -0.240257 + -0.354964 2.21767 -2.87772 0.879801 0.390288 -0.271342 + -0.346571 2.11936 -2.98543 0.898082 0.354904 -0.259793 + -0.336966 2.03794 -3.06353 0.903413 0.351656 -0.245321 + -0.33575 2.09382 -2.95921 0.964039 0.230572 -0.132159 + -0.325227 2.00706 -3.03519 0.97344 0.195244 -0.119562 + -0.318612 1.99359 -3.00267 0.999024 0.0441667 0.000984841 + -0.321743 1.93023 -3.0794 0.923229 -0.337234 0.184178 + -0.319477 1.95721 -3.08768 0.993013 0.115719 0.0230935 + -0.331216 1.98809 -3.11602 0.909569 0.348049 -0.227037 + -0.358045 2.01003 -3.15456 0.726752 0.554167 -0.40587 + -0.324871 1.97717 -2.97205 0.932115 -0.277305 0.232944 + -0.319632 1.95652 -3.02713 0.961816 -0.252597 0.105375 + -0.334942 1.96447 -2.96227 0.726288 -0.560023 0.398598 + -0.33031 1.95675 -2.98498 0.753021 -0.580483 0.309837 + -0.332421 1.93045 -3.03725 0.716742 -0.641948 0.272365 + -0.362896 1.9105 -3.02897 0.579969 -0.751693 0.313997 + -0.34472 1.86875 -3.17277 0.67375 -0.714126 0.189961 + -0.317757 1.91413 -3.10763 0.770193 -0.558397 0.308213 + -0.31549 1.94111 -3.11592 0.989176 0.135782 -0.0556295 + -0.332328 1.97298 -3.14368 0.882671 0.379849 -0.27678 + -0.39443 1.89582 -3.00597 0.504745 -0.794646 0.337297 + -0.375195 1.84879 -3.16449 0.555768 -0.786484 0.269377 + -0.351296 1.8498 -3.23371 0.795118 -0.606203 -0.0174379 + -0.324332 1.89519 -3.16858 0.943972 -0.319452 -0.0828742 + -0.320957 1.92094 -3.15613 0.975908 0.0775858 -0.203921 + -0.4298 1.89059 -2.97533 0.340549 -0.843884 0.414593 + -0.427918 1.82882 -3.13141 0.439417 -0.839304 0.320127 + -0.441853 1.79071 -3.20774 0.415366 -0.848534 0.327813 + -0.38913 1.81069 -3.24081 0.605902 -0.736656 0.300367 + -0.361202 1.8383 -3.26571 0.940777 -0.274952 0.198343 + -0.463288 1.82359 -3.10077 0.344215 -0.874378 0.342021 + -0.494123 1.80604 -3.11798 0.365028 -0.861032 0.354088 + -0.489767 1.77749 -3.19558 0.294228 -0.919954 0.259065 + -0.460883 1.78007 -3.21531 0.294097 -0.914398 0.278177 + -0.422959 1.78291 -3.25752 0.447344 -0.881616 0.150454 + -0.530799 1.76951 -3.16875 0.324337 -0.918588 0.225834 + -0.540533 1.76076 -3.22843 0.11771 -0.991447 -0.0563651 + -0.494135 1.76554 -3.25139 0.10449 -0.994485 0.0090278 + -0.465251 1.76812 -3.27113 0.118759 -0.99217 -0.0386631 + -0.441989 1.77227 -3.2651 0.359206 -0.933256 0.00197985 + -0.558435 1.76325 -3.1555 0.293737 -0.920608 0.257293 + -0.568169 1.7545 -3.21518 0.0503074 -0.985755 -0.160488 + -0.587769 1.76593 -3.24254 -0.312762 -0.882471 -0.351318 + -0.554822 1.76938 -3.27247 -0.175481 -0.8986 -0.402149 + -0.508423 1.77416 -3.29543 -0.113135 -0.912836 -0.392339 + -0.573037 1.77082 -3.12331 0.180184 -0.906545 0.381721 + -0.580638 1.74965 -3.18292 0.0527998 -0.998467 0.0166229 + -0.600238 1.76109 -3.21029 -0.421898 -0.876679 -0.231162 + -0.562179 1.79022 -3.08929 0.225778 -0.856873 0.463457 + -0.610853 1.77971 -3.09411 -0.470898 -0.791309 0.389981 + -0.614004 1.77602 -3.11247 -0.397612 -0.832013 0.386857 + -0.595239 1.75722 -3.15073 -0.0711713 -0.950787 0.301559 + -0.599995 1.7991 -3.06009 -0.234115 -0.753129 0.614806 + -0.615499 1.81139 -3.06392 -0.866322 -0.235792 0.440327 + -0.618651 1.8077 -3.08228 -0.976566 -0.0945631 0.19333 + -0.624255 1.77598 -3.12444 -0.803737 -0.542337 0.244699 + -0.605489 1.75718 -3.16271 -0.458868 -0.884725 0.0818619 + -0.621003 1.81115 -3.103 -0.983966 0.0241603 0.176711 + -0.626607 1.77943 -3.14516 -0.914191 -0.396809 0.0824398 + -0.630666 1.78308 -3.1656 -0.897546 -0.423464 0.122836 + -0.609548 1.76084 -3.18315 -0.552403 -0.829464 -0.0827085 + -0.631179 1.79085 -3.23334 -0.847462 -0.372282 -0.378436 + -0.627189 1.83308 -3.12642 -0.971678 -0.00707808 0.236202 + -0.640489 1.7906 -3.20621 -0.926867 -0.352008 -0.130414 + -0.635505 1.85617 -3.19331 -0.953631 0.243531 -0.176862 + -0.613937 1.79682 -3.27088 -0.740642 -0.283997 -0.608929 + -0.618263 1.86215 -3.23085 -0.821367 0.35397 -0.447281 + -0.58863 1.87838 -3.26006 -0.580097 0.468114 -0.666601 + -0.58099 1.80027 -3.30081 -0.514348 -0.234756 -0.824825 + -0.532948 1.87658 -3.28699 -0.37928 0.454166 -0.806152 + -0.525308 1.79846 -3.32774 -0.282127 -0.243749 -0.927896 + -0.48922 1.79653 -3.33282 -0.0552429 -0.355778 -0.932936 + -0.472335 1.77223 -3.30051 0.10049 -0.896944 -0.430574 + -0.48838 2.02688 -3.19909 -0.257283 0.649077 -0.715894 + -0.488365 1.88292 -3.30753 -0.317856 0.41292 -0.853501 + -0.468522 1.81279 -3.33568 0.0380865 -0.158595 -0.986609 + -0.449139 2.01008 -3.21974 -0.0256102 0.686103 -0.727054 + -0.448111 1.89804 -3.30834 -0.169706 0.506088 -0.845621 + -0.428268 1.82792 -3.3365 0.158438 -0.403155 -0.901312 + -0.420566 1.99496 -3.23476 0.177246 0.670731 -0.720211 + -0.419538 1.88293 -3.32336 -0.0389268 0.42072 -0.906355 + -0.406468 1.84413 -3.33754 0.288276 -0.158864 -0.944277 + -0.390086 1.82357 -3.29044 0.532366 -0.645625 -0.547499 + -0.403222 2.00625 -3.21301 0.470228 0.653122 -0.593564 + -0.393954 1.89485 -3.30799 0.404817 0.51302 -0.756924 + -0.380884 1.85606 -3.32217 0.653747 -0.0107281 -0.756637 + -0.368286 1.83979 -3.29148 0.654441 -0.599344 -0.460971 + -0.358347 1.96397 -3.20837 0.70129 0.516857 -0.490969 + -0.368483 1.91092 -3.27321 0.7171 0.437002 -0.542952 + -0.376611 1.90614 -3.28625 0.597778 0.485397 -0.638005 + -0.36934 1.85773 -3.30622 0.807147 0.00516889 -0.590328 + -0.356741 1.84146 -3.27553 0.997983 -0.061069 0.0173252 + -0.337794 1.95281 -3.18389 0.850943 0.383801 -0.358599 + -0.347931 1.89976 -3.24873 0.881533 0.202841 -0.426328 + -0.351306 1.87401 -3.26118 0.94511 -0.0207821 -0.326092 + -0.361212 1.86251 -3.29318 0.892142 0.0802041 -0.444579 + -0.365609 1.82155 -3.26492 0.83111 -0.546298 -0.103993 + -0.428375 1.79264 -3.29734 0.48171 -0.587432 -0.650292 + -0.449073 1.77638 -3.29447 0.352737 -0.821275 -0.448424 + -0.370069 1.81839 -3.25511 0.747716 -0.381009 0.543831 + -0.403898 1.79062 -3.27181 0.558526 -0.807993 -0.187608 + 0.465679 2.5057 -2.39357 0.383464 0.300067 0.87345 + 0.455121 2.49752 -2.38613 0.168342 0.0901796 0.981595 + 0.467398 2.44058 -2.42085 0.524332 -0.503585 0.686643 + 0.474164 2.52076 -2.40874 0.446181 0.824383 0.348303 + 0.424327 2.51521 -2.40944 -0.601315 0.599213 0.528549 + 0.426444 2.50578 -2.39893 -0.585541 0.381774 0.715116 + 0.429745 2.50345 -2.39596 -0.461452 0.283428 0.840673 + 0.440329 2.49849 -2.38915 -0.316583 0.157404 0.935414 + 0.43569 2.43673 -2.42093 -0.302496 -0.558937 0.772066 + 0.450482 2.43577 -2.4179 0.0466769 -0.601423 0.797566 + 0.477956 2.44876 -2.42829 0.713783 -0.394725 0.578538 + 0.492046 2.45967 -2.43823 0.713778 -0.394725 0.578543 + 0.476236 2.51388 -2.40102 0.56647 0.416188 0.711265 + 0.464037 2.34847 -2.51762 0.530505 -0.615793 0.582549 + 0.48166 2.36212 -2.53005 0.723126 -0.502302 0.474111 + 0.495751 2.37304 -2.53998 0.723281 -0.501903 0.474297 + 0.502604 2.46785 -2.44568 0.829633 -0.259951 0.4941 + 0.508266 2.4779 -2.45579 0.964536 0.124737 0.232619 + 0.447121 2.34366 -2.51467 0.0649277 -0.718758 0.692222 + 0.466709 2.24227 -2.62943 0.525797 -0.602265 0.600678 + 0.484332 2.25592 -2.64186 0.718824 -0.487143 0.495967 + 0.505944 2.2722 -2.65711 0.720384 -0.483322 0.49744 + 0.513374 2.38669 -2.55241 0.843805 -0.375318 0.383574 + 0.422429 2.34527 -2.51972 -0.298634 -0.675886 0.673792 + 0.415673 2.23704 -2.6301 -0.297262 -0.667155 0.683037 + 0.440365 2.23543 -2.62505 0.0485824 -0.705731 0.706812 + 0.467083 2.11724 -2.75126 0.491269 -0.589695 0.641026 + 0.418756 2.44069 -2.42749 -0.521748 -0.469846 0.712056 + 0.405496 2.34923 -2.52628 -0.515754 -0.591516 0.619763 + 0.389712 2.24311 -2.64016 -0.518166 -0.584775 0.624133 + 0.404898 2.11274 -2.75421 -0.301854 -0.655118 0.692607 + 0.44074 2.1104 -2.74687 0.0485278 -0.686716 0.725304 + 0.408173 2.44566 -2.43429 -0.639148 -0.393146 0.661004 + 0.387829 2.35752 -2.53764 -0.639941 -0.516836 0.568644 + 0.372046 2.2514 -2.65151 -0.639663 -0.51484 0.570763 + 0.353293 2.13085 -2.78075 -0.640012 -0.516908 0.568498 + 0.378937 2.1188 -2.76427 -0.518318 -0.581978 0.626616 + 0.398907 2.45053 -2.44081 -0.703453 -0.33624 0.626176 + 0.378564 2.36239 -2.54416 -0.707258 -0.463217 0.534056 + 0.357841 2.25887 -2.66151 -0.707496 -0.462841 0.534066 + 0.339088 2.13831 -2.79074 -0.707264 -0.468092 0.529781 + 0.348721 2.04813 -2.86213 -0.637327 -0.536612 0.553048 + 0.395605 2.45286 -2.44378 -0.853254 -0.153287 0.498458 + 0.373052 2.36627 -2.54911 -0.874014 -0.271512 0.402965 + 0.35233 2.26275 -2.66646 -0.911269 -0.221579 0.347118 + 0.331088 2.14395 -2.79793 -0.914335 -0.230114 0.333224 + 0.39199 2.4607 -2.45278 -0.939377 0.0621389 0.337209 + 0.369437 2.37412 -2.55811 -0.970159 -0.0588267 0.235225 + 0.350354 2.27359 -2.679 -0.988654 -0.0142267 0.149537 + 0.329112 2.15478 -2.81047 -0.989325 0.145438 -0.00917028 + 0.323182 2.06213 -2.88232 -0.909419 -0.276355 0.310781 + 0.389873 2.47013 -2.4633 -0.952587 0.195578 0.233081 + 0.365904 2.38986 -2.57567 -0.989218 0.0809957 0.122012 + 0.346821 2.28933 -2.69655 -0.996135 0.0796166 0.0371043 + 0.338253 2.17287 -2.83091 -0.96365 0.236449 -0.12438 + 0.391312 2.48349 -2.47758 -0.926958 0.357549 0.113613 + 0.367343 2.40322 -2.58996 -0.970324 0.241592 -0.0101971 + 0.352711 2.30859 -2.71715 -0.966257 0.23593 -0.103361 + 0.395585 2.49407 -2.48847 -0.823625 0.565355 -0.0449006 + 0.374474 2.42088 -2.60813 -0.864413 0.465584 -0.189794 + 0.359842 2.32626 -2.73533 -0.881861 0.405688 -0.240289 + 0.354964 2.21767 -2.87772 -0.87871 0.389522 -0.275936 + 0.344143 2.19213 -2.8515 -0.967179 0.219972 -0.127186 + 0.4286 2.5258 -2.42033 -0.448167 0.85458 0.262371 + 0.405817 2.50282 -2.49657 -0.495462 0.826531 -0.26714 + 0.384707 2.42964 -2.61623 -0.523026 0.74259 -0.418334 + 0.374997 2.33978 -2.74793 -0.533984 0.69952 -0.474903 + 0.439661 2.52833 -2.42158 -0.060127 0.98191 0.179549 + 0.416879 2.50535 -2.49781 -0.149029 0.915236 -0.374344 + 0.403171 2.43386 -2.61831 -0.139572 0.840839 -0.522982 + 0.393462 2.34401 -2.75001 -0.150557 0.809282 -0.567799 + 0.451048 2.52741 -2.41903 0.0862815 0.974705 0.20617 + 0.443246 2.50551 -2.4944 0.2101 0.889036 -0.406784 + 0.431859 2.50643 -2.49695 0.0612857 0.912063 -0.405445 + 0.418151 2.43494 -2.61744 0.0754965 0.839603 -0.537929 + 0.467152 2.52407 -2.41326 0.203434 0.952476 0.226723 + 0.477694 2.49933 -2.48308 0.363639 0.848718 -0.383985 + 0.461591 2.50266 -2.48885 0.290495 0.869365 -0.399772 + 0.437159 2.43339 -2.6132 0.234317 0.814669 -0.53048 + 0.500131 2.49158 -2.47168 0.702651 0.676885 -0.219334 + 0.493119 2.4949 -2.47621 0.490724 0.802906 -0.338426 + 0.482385 2.42499 -2.59801 0.391382 0.770999 -0.502375 + 0.455504 2.43055 -2.60765 0.314064 0.794766 -0.519337 + 0.506193 2.48478 -2.46351 0.887714 0.459374 -0.0306559 + 0.509514 2.41502 -2.58358 0.737313 0.580051 -0.346281 + 0.49781 2.42055 -2.59114 0.517101 0.720842 -0.461512 + 0.486967 2.33492 -2.72754 0.398478 0.75318 -0.523389 + 0.460086 2.34048 -2.73717 0.317193 0.776348 -0.544676 + 0.519036 2.39674 -2.56253 0.993684 -0.0101844 0.111755 + 0.515576 2.40822 -2.57542 0.924382 0.345337 -0.16205 + 0.520503 2.32296 -2.7101 0.751029 0.560399 -0.349153 + 0.508799 2.32849 -2.71765 0.526003 0.703496 -0.477927 + 0.500465 2.22725 -2.86843 0.396569 0.765459 -0.50676 + 0.532252 2.30126 -2.68505 0.993247 -0.00113793 0.116011 + 0.528792 2.31274 -2.69794 0.933213 0.325278 -0.152669 + 0.536884 2.21329 -2.84844 0.761954 0.561361 -0.322955 + 0.522297 2.22082 -2.85854 0.540792 0.707033 -0.455685 + 0.523567 2.28586 -2.66954 0.841516 -0.361218 0.401712 + 0.548581 2.18674 -2.81815 0.988053 -0.00889096 0.153856 + 0.545174 2.20307 -2.83628 0.940753 0.317705 -0.118523 + 0.550205 2.14953 -2.93546 0.797245 0.555925 -0.235262 + 0.515912 2.15119 -2.78403 0.733084 -0.447089 0.512542 + 0.539896 2.17133 -2.80264 0.852708 -0.322727 0.410776 + 0.564027 2.1075 -2.90947 0.982603 0.031333 0.183055 + 0.56062 2.12383 -2.92759 0.95932 0.282243 0.00663171 + 0.4943 2.13491 -2.76878 0.695511 -0.475713 0.538481 + 0.529129 2.06217 -2.87472 0.728156 -0.392582 0.561843 + 0.553113 2.08232 -2.89334 0.840567 -0.272223 0.46834 + 0.579471 2.04438 -2.96402 0.957588 0.00358822 0.28812 + 0.474962 2.02784 -2.83569 0.482724 -0.523383 0.702173 + 0.502179 2.0455 -2.85321 0.693874 -0.417087 0.587007 + 0.540257 2.00477 -2.92293 0.710967 -0.324395 0.623934 + 0.568557 2.0192 -2.94789 0.820231 -0.21499 0.530094 + 0.442331 2.02299 -2.82772 0.0282829 -0.643783 0.764685 + 0.485006 1.97367 -2.87647 0.486894 -0.450797 0.748142 + 0.513307 1.9881 -2.90143 0.712533 -0.309086 0.629891 + 0.550425 1.95592 -2.95582 0.743826 -0.15307 0.65061 + 0.578725 1.97035 -2.98078 0.83414 -0.22848 0.502003 + 0.40649 2.02533 -2.83506 -0.314874 -0.633726 0.706573 + 0.413213 1.9792 -2.87175 -0.323645 -0.632704 0.703519 + 0.452376 1.96882 -2.8685 0.0186772 -0.625472 0.780023 + 0.374365 2.03609 -2.84565 -0.534402 -0.578503 0.616237 + 0.381088 1.98997 -2.88234 -0.538388 -0.578161 0.613082 + 0.383209 1.9579 -2.91144 -0.527345 -0.593125 0.608367 + 0.422761 1.94126 -2.90427 -0.30955 -0.658637 0.685839 + 0.461924 1.93088 -2.90102 -0.0944718 -0.667806 0.738316 + 0.353237 2.00827 -2.89763 -0.647689 -0.53793 0.539565 + 0.355358 1.9762 -2.92673 -0.649371 -0.530818 0.544563 + 0.352138 1.95325 -2.95268 -0.631407 -0.639341 0.438826 + 0.383672 1.93857 -2.92968 -0.518595 -0.686122 0.510193 + 0.423224 1.92193 -2.92251 -0.317513 -0.759529 0.567715 + 0.331183 2.05649 -2.87513 -0.706079 -0.494343 0.507028 + 0.335699 2.01663 -2.91063 -0.659364 -0.528935 0.534291 + 0.338162 1.98742 -2.93632 -0.653415 -0.528365 0.542106 + 0.327041 2.0141 -2.92366 -0.856837 -0.37716 0.35154 + 0.329504 1.9849 -2.94935 -0.831056 -0.389802 0.396738 + 0.334942 1.96447 -2.96227 -0.730143 -0.552643 0.401842 + 0.332421 1.93045 -3.03725 -0.718248 -0.64155 0.269319 + 0.362896 1.9105 -3.02897 -0.571065 -0.761074 0.307656 + 0.319993 2.06227 -2.90625 -0.998576 0.0508423 -0.0161631 + 0.323851 2.01424 -2.94759 -0.966206 -0.201075 0.161291 + 0.324871 1.97717 -2.97205 -0.932115 -0.277305 0.232944 + 0.33031 1.95675 -2.98498 -0.735857 -0.599684 0.314473 + 0.329134 2.08035 -2.92669 -0.959403 0.242602 -0.143843 + 0.318612 1.99359 -3.00267 -0.999245 0.0363079 -0.0137993 + 0.319632 1.95652 -3.02713 -0.968928 -0.224482 0.103861 + 0.321743 1.93023 -3.0794 -0.917648 -0.357241 0.174069 + 0.33575 2.09382 -2.95921 -0.96425 0.231084 -0.129701 + 0.325227 2.00706 -3.03519 -0.974958 0.191433 -0.113185 + 0.319477 1.95721 -3.08768 -0.992596 0.121279 -0.00670317 + 0.346571 2.11936 -2.98543 -0.896873 0.358838 -0.258561 + 0.336966 2.03794 -3.06353 -0.903769 0.351223 -0.244631 + 0.331216 1.98809 -3.11602 -0.900398 0.373777 -0.222653 + 0.31549 1.94111 -3.11592 -0.991997 0.111723 -0.0588171 + 0.370119 2.2312 -2.89033 -0.561163 0.658409 -0.501592 + 0.365615 2.14594 -2.99574 -0.599545 0.630378 -0.493122 + 0.356011 2.06451 -3.07384 -0.731845 0.533857 -0.423555 + 0.356933 2.02515 -3.1269 -0.755486 0.545516 -0.362839 + 0.332328 1.97298 -3.14368 -0.881472 0.379587 -0.280928 + 0.39432 2.23788 -2.89427 -0.174521 0.77983 -0.601172 + 0.389817 2.15261 -2.99969 -0.318464 0.754588 -0.57374 + 0.385427 2.10769 -3.0566 -0.480978 0.6926 -0.537555 + 0.386349 2.06833 -3.10966 -0.585664 0.671772 -0.453564 + 0.358045 2.01003 -3.15456 -0.72638 0.554229 -0.406451 + 0.414973 2.34596 -2.7492 0.0685461 0.815429 -0.574785 + 0.415832 2.23983 -2.89347 0.0498165 0.803606 -0.593073 + 0.41685 2.17391 -2.9878 -0.174051 0.838852 -0.515785 + 0.41246 2.12899 -3.04471 -0.394787 0.756238 -0.521774 + 0.422268 2.10312 -3.09402 -0.485888 0.743637 -0.459256 + 0.433981 2.34442 -2.74496 0.236487 0.794435 -0.559416 + 0.440204 2.23825 -2.88846 0.227816 0.793079 -0.564912 + 0.441222 2.17234 -2.98279 0.0827411 0.927144 -0.365455 + 0.442603 2.16591 -3.01543 -0.122953 0.890915 -0.43721 + 0.452411 2.14003 -3.06474 -0.129889 0.862102 -0.489805 + 0.466308 2.23432 -2.88067 0.308979 0.784427 -0.53778 + 0.474026 2.17723 -2.96733 0.186901 0.909097 -0.372305 + 0.475407 2.1708 -2.99997 0.145123 0.932714 -0.330127 + 0.491183 2.14407 -3.04 0.2971 0.83821 -0.457314 + 0.508183 2.17016 -2.95508 0.396365 0.860939 -0.31887 + 0.517952 2.16209 -2.98466 0.415619 0.867041 -0.274773 + 0.533728 2.13537 -3.02469 0.551186 0.717458 -0.425968 + 0.535618 2.15706 -2.94556 0.588208 0.759652 -0.277381 + 0.545387 2.14899 -2.97514 0.68128 0.705538 -0.195127 + 0.560378 2.11072 -3.00768 0.780776 0.558476 -0.280166 + 0.560011 2.0791 -3.06445 0.704083 0.595278 -0.387184 + 0.563837 2.11988 -2.97473 0.880972 0.46392 -0.0930985 + 0.578828 2.08162 -3.00726 0.888715 0.348437 -0.297956 + 0.58911 2.02254 -3.02881 0.981821 0.180999 0.0571482 + 0.586662 2.05445 -3.04743 0.916753 0.393011 -0.0714607 + 0.574252 2.09419 -2.96686 0.967748 0.246266 0.0530802 + 0.584399 2.04968 -2.99969 0.984454 0.156511 0.0797096 + 0.59468 1.9906 -3.02123 0.984021 0.0671062 0.16492 + 0.609711 1.92795 -3.07071 0.9743 0.0797177 0.210678 + 0.608203 1.94353 -3.09701 0.982589 0.178461 0.0516783 + 0.589618 1.99987 -2.99685 0.959156 -0.0248068 0.281788 + 0.590847 1.97369 -3.01281 0.935666 -0.10425 0.337136 + 0.605878 1.91104 -3.06229 0.94264 -0.00330866 0.333796 + 0.579954 1.94416 -2.99674 0.878459 -0.0938714 0.468506 + 0.599692 1.88911 -3.03888 0.926364 -0.0041942 0.376605 + 0.627189 1.83308 -3.12642 0.971195 -0.0175188 0.237643 + 0.637013 1.84059 -3.16702 0.993609 0.0480325 0.102144 + 0.635505 1.85617 -3.19331 0.945681 0.271976 -0.178088 + 0.563295 1.90724 -2.96866 0.79862 -0.0668863 0.598108 + 0.583033 1.85218 -3.0108 0.697145 -0.29103 0.655202 + 0.621003 1.81115 -3.103 0.979705 0.033747 0.197582 + 0.626607 1.77943 -3.14516 0.914192 -0.396809 0.0824398 + 0.630666 1.78308 -3.1656 0.897543 -0.42347 0.122837 + 0.527606 1.94638 -2.93211 0.717319 -0.119366 0.686443 + 0.540477 1.89771 -2.94495 0.664981 -0.153377 0.730941 + 0.499306 1.93196 -2.90716 0.678483 -0.214103 0.702724 + 0.49686 1.91642 -2.91029 0.20049 -0.56045 0.803554 + 0.538031 1.88218 -2.94808 0.386241 -0.607282 0.694281 + 0.517822 1.88427 -2.94465 -0.076252 -0.809571 0.582048 + 0.520296 1.84983 -3.0054 -0.128805 -0.891481 0.434363 + 0.540505 1.84774 -3.00883 -0.0731721 -0.843703 0.5318 + 0.567529 1.8399 -3.00697 0.059863 -0.39891 0.915034 + 0.615499 1.81139 -3.06392 0.900657 -0.0611883 0.430202 + 0.482886 1.89872 -2.93538 -0.190985 -0.81101 0.55298 + 0.489461 1.86738 -2.9882 -0.241588 -0.863665 0.442401 + 0.494123 1.80604 -3.11798 -0.344642 -0.862688 0.370123 + 0.535155 1.79806 -3.09115 -0.357319 -0.827483 0.433123 + 0.562179 1.79022 -3.08929 -0.236796 -0.861985 0.44823 + 0.4298 1.89059 -2.97533 -0.349195 -0.83856 0.418186 + 0.463288 1.82359 -3.10077 -0.342999 -0.86568 0.364622 + 0.441853 1.79071 -3.20774 -0.421799 -0.8487 0.319051 + 0.460883 1.78007 -3.21531 -0.294596 -0.916755 0.269766 + 0.489767 1.77749 -3.19558 -0.305673 -0.914792 0.264043 + 0.39443 1.89582 -3.00597 -0.50588 -0.795311 0.334016 + 0.427918 1.82882 -3.13141 -0.46362 -0.823519 0.326915 + 0.38913 1.81069 -3.24081 -0.522032 -0.800828 0.293527 + 0.422959 1.78291 -3.25752 -0.456297 -0.884217 0.0997665 + 0.441989 1.77227 -3.2651 -0.359205 -0.933256 0.00197763 + 0.375195 1.84879 -3.16449 -0.540362 -0.784873 0.303287 + 0.370069 1.81839 -3.25511 -0.711498 -0.68577 0.153266 + 0.403898 1.79062 -3.27181 -0.513455 -0.833937 -0.20227 + 0.428375 1.79264 -3.29734 -0.471256 -0.709989 -0.523292 + 0.449073 1.77638 -3.29447 -0.381119 -0.814187 -0.438004 + 0.34472 1.86875 -3.17277 -0.687105 -0.696643 0.206338 + 0.351296 1.8498 -3.23371 -0.90718 -0.414301 -0.073333 + 0.361202 1.8383 -3.26571 -0.969213 -0.231546 0.0837408 + 0.365609 1.82155 -3.26492 -0.826156 -0.558216 -0.0765548 + 0.390086 1.82357 -3.29044 -0.540085 -0.644964 -0.540675 + 0.317757 1.91413 -3.10763 -0.770193 -0.558397 0.308213 + 0.324332 1.89519 -3.16858 -0.943974 -0.319444 -0.0828771 + 0.351306 1.87401 -3.26118 -0.94511 -0.0207816 -0.326092 + 0.361212 1.86251 -3.29318 -0.892142 0.0802041 -0.444579 + 0.356741 1.84146 -3.27553 -0.99919 -0.0183303 0.0358235 + 0.320957 1.92094 -3.15613 -0.975908 0.0775768 -0.203923 + 0.347931 1.89976 -3.24873 -0.881531 0.20285 -0.426328 + 0.368483 1.91092 -3.27321 -0.711821 0.444313 -0.543964 + 0.376611 1.90614 -3.28625 -0.598068 0.486209 -0.637114 + 0.36934 1.85773 -3.30622 -0.807147 0.00516891 -0.590328 + 0.337794 1.95281 -3.18389 -0.860206 0.35781 -0.363342 + 0.358347 1.96397 -3.20837 -0.697123 0.514911 -0.498885 + 0.403222 2.00625 -3.21301 -0.48681 0.639599 -0.59492 + 0.420566 1.99496 -3.23476 -0.182199 0.653628 -0.734558 + 0.393954 1.89485 -3.30799 -0.404817 0.51302 -0.756924 + 0.40292 2.05232 -3.15919 -0.535239 0.676635 -0.505652 + 0.438839 2.08711 -3.14356 -0.24278 0.770125 -0.589886 + 0.449139 2.01008 -3.21974 0.0836736 0.6568 -0.749408 + 0.419538 1.88293 -3.32336 0.0169297 0.440701 -0.897494 + 0.478081 2.10392 -3.12291 0.145707 0.789356 -0.596395 + 0.48838 2.02688 -3.19909 0.254254 0.645091 -0.720564 + 0.488365 1.88292 -3.30753 0.289611 0.449635 -0.844958 + 0.448111 1.89804 -3.30834 0.176563 0.512221 -0.840509 + 0.516853 2.10795 -3.09817 0.495025 0.750287 -0.4382 + 0.532964 2.02054 -3.17856 0.572164 0.556786 -0.602178 + 0.576123 1.99168 -3.14484 0.703388 0.52433 -0.47992 + 0.532948 1.87658 -3.28699 0.413036 0.489111 -0.768226 + 0.525308 1.79846 -3.32774 0.30126 -0.271825 -0.913977 + 0.48922 1.79653 -3.33282 0.0262133 -0.390716 -0.920138 + 0.468522 1.81279 -3.33568 -0.0195938 -0.163252 -0.98639 + 0.605755 1.97545 -3.11563 0.922118 0.340633 -0.183487 + 0.58863 1.87838 -3.26006 0.557067 0.501212 -0.662165 + 0.58099 1.80027 -3.30081 0.535555 -0.220468 -0.815215 + 0.618263 1.86215 -3.23085 0.821617 0.357311 -0.444155 + 0.613937 1.79682 -3.27088 0.738998 -0.26562 -0.619134 + 0.554822 1.76938 -3.27247 0.177147 -0.900383 -0.397404 + 0.508423 1.77416 -3.29543 0.099608 -0.91513 -0.390661 + 0.472335 1.77223 -3.30051 -0.106219 -0.892306 -0.438757 + 0.631179 1.79085 -3.23334 0.853445 -0.369386 -0.367675 + 0.600238 1.76109 -3.21029 0.423074 -0.874949 -0.235527 + 0.587769 1.76593 -3.24254 0.35698 -0.865769 -0.350725 + 0.568169 1.7545 -3.21518 -0.03959 -0.991969 -0.120124 + 0.540533 1.76076 -3.22843 -0.135904 -0.989401 -0.0511395 + 0.640489 1.7906 -3.20621 0.94394 -0.289701 -0.158275 + 0.609548 1.76084 -3.18315 0.552403 -0.829464 -0.0827067 + 0.580638 1.74965 -3.18292 -0.0528003 -0.998467 0.0166281 + 0.558435 1.76325 -3.1555 -0.301912 -0.9153 0.2666 + 0.530799 1.76951 -3.16875 -0.317559 -0.917524 0.239387 + 0.605489 1.75718 -3.16271 0.458868 -0.884725 0.0818619 + 0.595239 1.75722 -3.15073 0.0709899 -0.954808 0.288621 + 0.573037 1.77082 -3.12331 -0.225378 -0.896046 0.382501 + 0.624255 1.77598 -3.12444 0.803737 -0.542336 0.244699 + 0.614004 1.77602 -3.11247 0.525441 -0.773302 0.354846 + 0.610853 1.77971 -3.09411 0.476413 -0.775423 0.414428 + 0.599995 1.7991 -3.06009 0.234117 -0.753126 0.614809 + 0.618651 1.8077 -3.08228 0.976578 -0.0944165 0.19334 + 0.494135 1.76554 -3.25139 -0.107306 -0.994213 0.00500804 + 0.465251 1.76812 -3.27113 -0.132568 -0.990637 -0.0326267 + 0.428268 1.82792 -3.3365 -0.176466 -0.290291 -0.940527 + 0.406468 1.84413 -3.33754 -0.302134 -0.164667 -0.938936 + 0.368286 1.83979 -3.29148 -0.655701 -0.550843 -0.516361 + 0.380884 1.85606 -3.32217 -0.653746 -0.0107272 -0.756638 + -0.557574 1.95467 -2.75219 0.90941 -0.0278976 0.414965 + -0.591195 1.94736 -2.68493 0.685719 -0.153302 0.711539 + -0.582635 1.9028 -2.69995 0.672119 -0.0751704 0.736618 + -0.576773 2.03351 -2.69323 0.87722 -0.209859 0.431792 + -0.603725 2.00268 -2.66108 0.651073 -0.313118 0.691419 + -0.65083 1.99416 -2.64194 0.100098 -0.505881 0.856776 + -0.6383 1.93884 -2.66579 0.086709 -0.348989 0.933107 + -0.6215 1.87741 -2.6876 0.125868 -0.266063 0.955703 + -0.549014 1.91012 -2.7672 0.94613 -0.00324097 0.323771 + -0.540029 1.95215 -2.79381 0.986923 0.106444 0.121046 + -0.559228 2.03099 -2.73484 0.984424 0.10089 0.14398 + -0.582231 2.12162 -2.61887 0.942312 -0.202078 0.266856 + -0.563942 1.87344 -2.71651 0.785614 -0.0785967 0.613705 + -0.560132 1.84076 -2.74265 0.891084 -0.336763 0.304238 + -0.545204 1.87744 -2.79335 0.959721 -0.112755 0.257337 + -0.536207 1.89321 -2.82428 0.998619 0.00428827 0.0523511 + -0.542424 1.9554 -2.81462 0.959283 0.232865 -0.159846 + -0.602807 1.84804 -2.70416 0.37489 -0.240105 0.895437 + -0.593886 1.81248 -2.71632 0.563545 -0.436019 0.701644 + -0.584623 1.81375 -2.72933 0.732246 -0.52654 0.431938 + -0.578252 1.79374 -2.78086 0.756421 -0.565337 0.328971 + -0.648715 1.7972 -2.70334 -0.0223477 -0.185469 0.982396 + -0.639794 1.76164 -2.7155 0.426045 -0.565836 0.705915 + -0.641574 1.74647 -2.75072 0.591306 -0.75103 0.293787 + -0.632311 1.74775 -2.76373 0.544872 -0.76406 0.345435 + -0.602743 1.76674 -2.76753 0.651479 -0.677267 0.341884 + -0.698685 1.85599 -2.71767 -0.362385 -0.180903 0.914304 + -0.731885 1.82353 -2.72971 -0.430119 -0.0689101 0.900138 + -0.681915 1.76474 -2.71539 -0.276162 -0.262936 0.924446 + -0.665852 1.74009 -2.72235 0.138845 -0.690283 0.710093 + -0.715485 1.91742 -2.69586 -0.347155 -0.423126 0.836927 + -0.777419 1.86789 -2.75917 -0.645701 -0.160296 0.746576 + -0.753448 1.83334 -2.74042 -0.543407 -0.0223325 0.839172 + -0.71418 1.75095 -2.73674 -0.490167 -0.397708 0.775606 + -0.698117 1.7263 -2.7437 -0.140991 -0.713704 0.686111 + -0.701491 2.01968 -2.63472 -0.302852 -0.519986 0.798683 + -0.745543 2.03331 -2.65112 -0.626794 -0.376569 0.682148 + -0.759537 1.93105 -2.71226 -0.604477 -0.351736 0.714765 + -0.644579 2.08591 -2.57095 0.0991367 -0.646994 0.756023 + -0.69524 2.11143 -2.56373 -0.36146 -0.588378 0.723296 + -0.727539 2.12957 -2.57257 -0.646524 -0.442853 0.621198 + -0.767489 2.04796 -2.67431 -0.822872 -0.221839 0.523134 + -0.785949 1.96684 -2.73182 -0.822726 -0.198455 0.53267 + -0.609183 2.09079 -2.58673 0.652594 -0.501539 0.567962 + -0.637776 2.19722 -2.46583 0.0609133 -0.678577 0.731999 + -0.678501 2.20954 -2.46987 -0.381566 -0.599171 0.703847 + -0.7108 2.22767 -2.47871 -0.678731 -0.43337 0.592887 + -0.749485 2.14421 -2.59576 -0.834976 -0.264766 0.482405 + -0.579138 2.22859 -2.5094 0.945477 -0.24025 0.219893 + -0.60238 2.20209 -2.48161 0.654067 -0.534983 0.53478 + -0.625194 2.30896 -2.36457 0.0832905 -0.657513 0.748825 + -0.66592 2.32128 -2.36861 -0.40161 -0.578409 0.710037 + -0.688934 2.3344 -2.37654 -0.691224 -0.413747 0.592472 + -0.576987 2.15463 -2.65067 0.994317 0.0949441 -0.0481533 + -0.573893 2.2616 -2.54119 0.996191 0.0534127 -0.0689259 + -0.572847 2.36653 -2.42594 0.996661 0.0662524 -0.0477294 + -0.576804 2.3416 -2.40205 0.947136 -0.219572 0.233928 + -0.600047 2.3151 -2.37426 0.659253 -0.51116 0.551454 + -0.570883 2.07068 -2.72723 0.939214 0.290662 -0.182735 + -0.592754 2.19486 -2.6868 0.910156 0.29793 -0.287845 + -0.587346 2.29606 -2.5723 0.914533 0.287886 -0.284168 + -0.5863 2.40099 -2.45705 0.913618 0.30641 -0.267237 + -0.55408 1.99509 -2.80701 0.929924 0.321134 -0.179204 + -0.58665 2.11092 -2.76336 0.89976 0.35383 -0.255412 + -0.616992 2.12624 -2.81177 0.640275 0.582698 -0.500511 + -0.612134 2.21989 -2.70614 0.683011 0.530756 -0.50179 + -0.606726 2.32109 -2.59164 0.683378 0.538591 -0.492863 + -0.554558 1.92862 -2.88943 0.907005 0.299255 -0.29629 + -0.562318 1.98001 -2.854 0.879112 0.354949 -0.318079 + -0.594889 2.09583 -2.81035 0.814339 0.455069 -0.360227 + -0.538602 1.89646 -2.8451 0.984215 0.0743721 -0.160589 + -0.545167 1.89124 -2.8865 0.976989 0.0944499 -0.191237 + -0.563849 1.89026 -2.95209 0.880184 0.282394 -0.381485 + -0.596077 1.95895 -2.95063 0.791354 0.433904 -0.430681 + -0.603837 2.01035 -2.9152 0.772773 0.443957 -0.453568 + -0.537723 1.8242 -2.8348 0.979183 -0.201119 -0.0274185 + -0.545798 1.83268 -2.864 0.965192 -0.126982 -0.228648 + -0.552363 1.82746 -2.9054 0.962773 -0.238395 -0.127421 + -0.554457 1.85289 -2.94916 0.960343 0.0362309 -0.276455 + -0.579126 1.88838 -2.98191 0.799307 0.300351 -0.520478 + -0.54672 1.80842 -2.80386 0.821386 -0.380042 0.425316 + -0.573284 1.75936 -2.86084 0.702268 -0.700419 0.127406 + -0.563727 1.77151 -2.88367 0.86613 -0.47246 -0.163098 + -0.571803 1.77999 -2.91288 0.890954 -0.373242 -0.258636 + -0.604816 1.74469 -2.83784 0.602023 -0.760474 0.243409 + -0.634648 1.70481 -2.92819 0.710141 -0.703781 -0.0198286 + -0.630071 1.71904 -2.9497 0.762702 -0.632085 -0.136945 + -0.620515 1.73118 -2.97252 0.726169 -0.685072 -0.0579214 + -0.626104 1.73156 -2.82037 0.59418 -0.774158 0.218241 + -0.655936 1.69168 -2.91072 0.531648 -0.826498 0.185071 + -0.67741 1.66562 -2.96674 0.566761 -0.812379 0.137197 + -0.667234 1.67281 -2.98919 0.737882 -0.66847 -0.093157 + -0.662657 1.68703 -3.01069 0.783699 -0.620388 -0.0305707 + -0.655672 1.71257 -2.81656 0.470155 -0.84746 0.246507 + -0.675411 1.68708 -2.88916 0.442259 -0.864809 0.237724 + -0.696884 1.66102 -2.94518 0.535717 -0.821316 0.196078 + -0.71439 1.63416 -3.0018 0.491678 -0.868581 -0.0618075 + -0.704214 1.64134 -3.02425 0.455574 -0.85629 -0.243353 + -0.691288 1.70242 -2.79813 0.336486 -0.896316 0.288783 + -0.711027 1.67694 -2.87073 0.396841 -0.86886 0.295971 + -0.720272 1.65889 -2.90357 0.518363 -0.781804 0.34653 + -0.712321 1.65017 -2.94006 0.613486 -0.759573 0.216065 + -0.667632 1.72493 -2.75756 0.432372 -0.860979 0.267899 + -0.68558 1.71445 -2.77081 0.232079 -0.886915 0.399401 + -0.743351 1.68614 -2.80264 0.0837186 -0.904358 0.418483 + -0.752385 1.67622 -2.81787 0.157499 -0.854919 0.494275 + -0.761631 1.65818 -2.8507 0.301615 -0.858643 0.414439 + -0.716065 1.71582 -2.75695 -0.0793514 -0.659711 0.747318 + -0.737643 1.69816 -2.77531 -0.0770784 -0.786541 0.612709 + -0.774219 1.69796 -2.79495 -0.531175 -0.531719 0.659642 + -0.783253 1.68804 -2.81018 -0.542748 -0.546194 0.638041 + -0.781818 1.65907 -2.84148 -0.312299 -0.809132 0.497771 + -0.735743 1.76076 -2.74744 -0.500528 -0.249321 0.829042 + -0.737034 1.73069 -2.75591 -0.343014 -0.309937 0.886724 + -0.758612 1.71303 -2.77428 -0.513006 -0.381767 0.768817 + -0.785062 1.75884 -2.78734 -0.785536 -0.170354 0.594906 + -0.768164 1.80399 -2.7582 -0.650416 -0.165031 0.741433 + -0.769455 1.77391 -2.76666 -0.644992 -0.187123 0.740926 + -0.792135 1.83855 -2.77695 -0.776888 -0.126564 0.616787 + -0.805177 1.78506 -2.81554 -0.85547 -0.142984 0.497721 + -0.802457 1.69142 -2.83538 -0.822484 -0.344203 0.452818 + -0.803831 1.90368 -2.77872 -0.843747 -0.114244 0.524443 + -0.82819 1.86377 -2.8299 -0.897452 -0.0935231 0.431085 + -0.841232 1.81029 -2.8685 -0.94383 -0.0815744 0.320205 + -0.822571 1.71764 -2.86359 -0.906432 -0.243485 0.345104 + -0.819798 1.9372 -2.81047 -0.911377 -0.0355782 0.410032 + -0.844157 1.89729 -2.86166 -0.978818 0.0351742 0.201689 + -0.849986 1.82833 -2.91261 -0.999344 -0.00411076 0.0359906 + -0.836928 1.73303 -2.90586 -0.958848 -0.221468 0.177658 + -0.801696 1.99261 -2.7507 -0.90194 -0.118134 0.415389 + -0.827717 1.9709 -2.82736 -0.974883 0.101854 0.198061 + -0.837639 1.93666 -2.89927 -0.983112 0.166995 -0.0748587 + -0.843468 1.8677 -2.95023 -0.957006 0.163848 -0.23936 + -0.845683 1.75107 -2.94998 -0.990866 -0.124945 -0.0507323 + -0.783236 2.07373 -2.69319 -0.907264 -0.114002 0.404816 + -0.809615 2.02631 -2.76759 -0.969992 0.0729852 0.231922 + -0.820122 2.0107 -2.8405 -0.963493 0.266953 0.0204414 + -0.830043 1.97645 -2.91241 -0.939583 0.28446 -0.190437 + -0.82513 1.87171 -2.99403 -0.880289 0.188788 -0.43526 + -0.762063 2.1617 -2.61279 -0.916748 -0.142246 0.373283 + -0.789946 2.09269 -2.7091 -0.973877 0.0676066 0.216778 + -0.786084 2.12532 -2.73327 -0.969274 0.245629 0.0131943 + -0.805753 2.05895 -2.79176 -0.964472 0.262928 0.0257243 + -0.801246 2.05817 -2.875 -0.883436 0.4276 -0.191569 + -0.73924 2.26522 -2.5111 -0.919386 -0.153615 0.362121 + -0.768773 2.18065 -2.6287 -0.980017 0.0452351 0.193705 + -0.766666 2.2036 -2.64979 -0.973657 0.227875 0.00802571 + -0.774881 2.15574 -2.76266 -0.888346 0.424037 -0.176162 + -0.786876 2.10642 -2.82626 -0.87499 0.449723 -0.179282 + -0.726663 2.24773 -2.49406 -0.854989 -0.255992 0.451067 + -0.714466 2.36952 -2.40378 -0.917555 -0.155807 0.36581 + -0.745029 2.28153 -2.5248 -0.981192 0.0368969 0.189472 + -0.742922 2.30448 -2.54589 -0.973479 0.22872 0.00503501 + -0.755463 2.23402 -2.67918 -0.889083 0.417508 -0.187666 + -0.704796 2.35446 -2.39188 -0.851793 -0.2565 0.456789 + -0.689272 2.47895 -2.29452 -0.88547 -0.0613379 0.460631 + -0.720255 2.38584 -2.41748 -0.98056 0.0410558 0.191874 + -0.718676 2.4032 -2.43332 -0.972384 0.232999 0.0134098 + -0.733201 2.33058 -2.57124 -0.889196 0.418412 -0.185099 + -0.666223 2.45027 -2.27264 -0.622171 -0.331825 0.709081 + -0.679602 2.46388 -2.28262 -0.78906 -0.196564 0.58202 + -0.654271 2.5352 -2.24488 -0.455756 0.357844 0.815006 + -0.692919 2.48925 -2.30308 -0.947203 0.126682 0.294547 + -0.69134 2.50661 -2.31892 -0.939614 0.322157 0.115499 + -0.643209 2.43715 -2.26472 -0.356077 -0.448493 0.819795 + -0.640891 2.52159 -2.2349 -0.260414 0.183163 0.947964 + -0.618804 2.5151 -2.23258 0.297855 0.0935705 0.950014 + -0.657918 2.5455 -2.25344 -0.535416 0.559567 0.632625 + -0.621121 2.43066 -2.2624 0.0927458 -0.506198 0.857416 + -0.595973 2.4368 -2.27209 0.659874 -0.359071 0.660026 + -0.60427 2.53197 -2.24989 0.686074 0.447887 0.573324 + -0.581439 2.45367 -2.28939 0.926129 -0.10229 0.363074 + -0.577483 2.4786 -2.31328 0.982456 0.175701 0.0625236 + -0.612769 2.55385 -2.26927 0.579746 0.771434 0.262266 + -0.585982 2.50048 -2.33267 0.907511 0.394451 -0.144336 + -0.600589 2.51935 -2.34722 0.685012 0.64206 -0.344264 + -0.626817 2.56116 -2.27229 0.302716 0.924591 0.231287 + -0.600907 2.41987 -2.4716 0.688193 0.554461 -0.467935 + -0.614638 2.52666 -2.35024 0.424 0.789962 -0.442926 + -0.632574 2.5333 -2.35231 0.268719 0.841433 -0.468808 + -0.640409 2.56396 -2.27254 0.0596477 0.97778 0.200968 + -0.623337 2.43172 -2.47629 0.407308 0.705702 -0.579729 + -0.641273 2.43835 -2.47837 0.25651 0.753121 -0.605815 + -0.646166 2.5361 -2.35256 0.0847524 0.876576 -0.473741 + -0.662438 2.53685 -2.3505 -0.14152 0.88569 -0.442181 + -0.651889 2.56221 -2.26917 -0.387354 0.864684 0.319811 + -0.629155 2.33295 -2.59633 0.403918 0.687019 -0.604033 + -0.652948 2.34175 -2.59907 0.251386 0.733471 -0.631526 + -0.662951 2.44292 -2.47871 0.0652099 0.787272 -0.613149 + -0.679223 2.44367 -2.47664 -0.159763 0.792598 -0.588442 + -0.673919 2.5351 -2.34713 -0.543304 0.784142 -0.299902 + -0.638004 2.23347 -2.71156 0.40011 0.677521 -0.617153 + -0.661796 2.24227 -2.7143 0.249581 0.721971 -0.645343 + -0.686989 2.24749 -2.71481 0.054629 0.756829 -0.651326 + -0.674625 2.34631 -2.59941 0.0535402 0.765986 -0.640624 + -0.642862 2.13981 -2.8172 0.385694 0.674261 -0.629772 + -0.66832 2.15902 -2.80953 0.242971 0.707254 -0.663895 + -0.693513 2.16424 -2.81003 0.132661 0.751706 -0.646017 + -0.72417 2.17647 -2.79772 -0.114863 0.784211 -0.60977 + -0.71035 2.24921 -2.71041 -0.172622 0.764017 -0.621675 + -0.62594 2.04075 -2.91662 0.397854 0.662912 -0.63424 + -0.639089 2.05134 -2.90518 0.132592 0.706807 -0.694869 + -0.664548 2.07055 -2.8975 0.317957 0.664696 -0.676079 + -0.70217 2.11799 -2.87233 0.243338 0.723504 -0.646009 + -0.732827 2.13022 -2.86002 -0.129863 0.763007 -0.633211 + -0.633091 1.98217 -2.98009 0.398518 0.645396 -0.65165 + -0.64624 1.99277 -2.96864 0.10887 0.734336 -0.669999 + -0.680429 2.01413 -2.95621 0.179709 0.67802 -0.712736 + -0.718051 2.06157 -2.93104 0.0714772 0.661859 -0.746213 + -0.611355 1.95708 -2.98045 0.686247 0.487926 -0.539438 + -0.637404 1.9462 -3.00835 0.390239 0.518796 -0.760634 + -0.665356 1.96838 -3.00144 0.167982 0.623371 -0.763669 + -0.699545 1.98975 -2.98901 0.0575373 0.688263 -0.723176 + -0.757578 1.995 -2.9828 -0.113592 0.618749 -0.777333 + -0.615668 1.92111 -3.00871 0.640755 0.393981 -0.658947 + -0.628382 1.87494 -3.04685 0.629016 0.354429 -0.691895 + -0.646766 1.88913 -3.04918 0.31548 0.484313 -0.816035 + -0.674717 1.9113 -3.04227 0.106511 0.542112 -0.833529 + -0.713644 1.91231 -3.04069 -0.0536119 0.528878 -0.847003 + -0.574841 1.84957 -2.99428 0.824434 0.14509 -0.547044 + -0.611383 1.8823 -3.02108 0.746249 0.255239 -0.614789 + -0.62545 1.80917 -3.06735 0.936792 0.0537605 -0.345732 + -0.628602 1.80548 -3.08571 0.778873 0.208287 -0.591586 + -0.646986 1.81966 -3.08803 0.348425 0.41703 -0.839456 + -0.55886 1.83319 -2.95833 0.945288 -0.186222 -0.267866 + -0.579244 1.82987 -3.00346 0.830313 0.0130896 -0.557144 + -0.608451 1.81652 -3.04159 0.812581 0.0343134 -0.581838 + -0.607899 1.78621 -3.03232 0.857571 -0.192391 -0.477029 + -0.626676 1.77042 -3.0709 0.961313 -0.107693 -0.253534 + -0.572194 1.79384 -2.94126 0.894994 -0.406265 -0.184213 + -0.578691 1.79957 -2.99419 0.878506 -0.321653 -0.353223 + -0.610714 1.75622 -3.01849 0.876862 -0.376808 -0.298544 + -0.629491 1.74042 -3.05707 0.936372 -0.288158 -0.200432 + -0.610323 1.74237 -2.99011 0.809745 -0.573259 -0.125249 + -0.636893 1.71667 -3.04421 0.852395 -0.520264 -0.0524109 + -0.641123 1.70815 -3.06481 0.771026 -0.547568 -0.325098 + -0.633721 1.73191 -3.07768 0.839998 -0.379005 -0.388276 + -0.629827 1.76674 -3.08925 0.889746 -0.119215 -0.440614 + -0.647085 1.70548 -3.02662 0.774087 -0.632234 0.0327205 + -0.653828 1.68914 -3.05635 0.674865 -0.680502 -0.285437 + -0.679261 1.69753 -3.08295 0.288505 -0.608058 -0.739615 + -0.666556 1.71654 -3.09141 0.342584 -0.569633 -0.747097 + -0.648761 1.73238 -3.09523 0.525446 -0.498374 -0.689587 + -0.6694 1.6707 -3.04041 0.632742 -0.757309 -0.16162 + -0.701236 1.67604 -3.07083 0.246896 -0.672 -0.698182 + -0.732385 1.72797 -3.10979 -0.219813 -0.267371 -0.938187 + -0.70419 1.74452 -3.12064 -0.0828964 -0.259953 -0.962057 + -0.686395 1.76035 -3.12446 0.0478373 -0.00262665 -0.998852 + -0.73605 1.64668 -3.05466 0.0382262 -0.790154 -0.611715 + -0.766549 1.68541 -3.08471 -0.385052 -0.464277 -0.79761 + -0.75436 1.70648 -3.09767 -0.287688 -0.315132 -0.904393 + -0.755636 1.79727 -3.09326 -0.47889 0.233674 -0.846204 + -0.754643 1.63341 -3.02767 -0.260362 -0.905142 -0.33605 + -0.785142 1.67213 -3.05771 -0.629832 -0.526763 -0.570818 + -0.80043 1.74889 -3.06583 -0.778712 -0.051527 -0.625262 + -0.788241 1.76996 -3.0788 -0.651549 0.0998846 -0.752002 + -0.729827 1.62331 -2.99668 0.236524 -0.960203 -0.148551 + -0.763973 1.63233 -2.97724 -0.466552 -0.881515 -0.0725268 + -0.803181 1.67052 -3.02929 -0.767807 -0.537371 -0.348862 + -0.818469 1.74728 -3.03741 -0.880974 -0.0545623 -0.470009 + -0.739157 1.62223 -2.94625 0.183848 -0.972274 0.144513 + -0.781466 1.64126 -2.93816 -0.550098 -0.835065 -0.0076684 + -0.820674 1.67945 -2.99021 -0.837698 -0.513628 -0.185605 + -0.836807 1.74327 -2.9936 -0.949727 -0.10786 -0.293914 + -0.747108 1.63095 -2.90975 0.264774 -0.925529 0.270724 + -0.767295 1.63184 -2.90053 -0.227959 -0.959113 0.167738 + -0.815193 1.67187 -2.90431 -0.815049 -0.566475 0.121658 + -0.82955 1.68726 -2.94658 -0.883619 -0.468202 0.0022076 + -0.801022 1.66245 -2.86669 -0.738001 -0.621782 0.262185 + -0.804283 1.89025 -3.02002 -0.731289 0.281872 -0.6211 + -0.815445 1.98414 -2.93955 -0.832256 0.392559 -0.391469 + -0.794598 2.00269 -2.96554 -0.595379 0.579553 -0.556455 + -0.771678 1.91756 -3.03448 -0.339907 0.451845 -0.824802 + -0.786647 2.06586 -2.90214 -0.595149 0.568378 -0.568105 + -0.755071 2.06926 -2.91379 -0.285953 0.661055 -0.693713 + -0.764403 2.12682 -2.84837 -0.553939 0.681562 -0.478148 + -0.752407 2.17614 -2.78478 -0.557694 0.691893 -0.458542 + -0.738588 2.24888 -2.69747 -0.570708 0.670019 -0.474729 + -0.716326 2.34544 -2.58953 -0.562853 0.677362 -0.473685 + -0.697987 2.34803 -2.59502 -0.175162 0.768317 -0.615635 + -0.697562 2.44109 -2.47116 -0.580256 0.688482 -0.43508 + -0.708955 2.4293 -2.45867 -0.894523 0.417737 -0.159138 + -0.685311 2.52331 -2.33464 -0.863245 0.503124 -0.0409141 + -0.727441 1.81382 -3.10411 -0.29665 0.377363 -0.877266 + -0.688514 1.81281 -3.10569 0.112141 0.401656 -0.908899 + -0.644867 1.76721 -3.1068 0.547638 -0.0186949 -0.836507 + 0.549014 1.91012 -2.7672 -0.984284 0.12032 0.12926 + 0.582635 1.9028 -2.69995 -0.669006 -0.0734864 0.739615 + 0.591195 1.94736 -2.68493 -0.698662 -0.123012 0.704797 + 0.563942 1.87344 -2.71651 -0.776688 -0.12469 0.617421 + 0.602807 1.84804 -2.70416 -0.311947 -0.272558 0.910165 + 0.6215 1.87741 -2.6876 -0.0889264 -0.375767 0.922438 + 0.6383 1.93884 -2.66579 -0.103685 -0.360115 0.927128 + 0.557574 1.95467 -2.75219 -0.913303 -0.0406652 0.405246 + 0.545204 1.87744 -2.79335 -0.96965 -0.0373939 0.241621 + 0.560132 1.84076 -2.74265 -0.841935 -0.30809 0.442974 + 0.603725 2.00268 -2.66108 -0.672136 -0.324644 0.665462 + 0.576773 2.03351 -2.69323 -0.918948 -0.116325 0.376832 + 0.559228 2.03099 -2.73484 -0.970389 0.146713 0.191889 + 0.540029 1.95215 -2.79381 -0.986709 0.0598402 0.151075 + 0.536207 1.89321 -2.82428 -0.998262 0.00129864 0.0589168 + 0.65083 1.99416 -2.64194 -0.131342 -0.47987 0.867453 + 0.609183 2.09079 -2.58673 -0.652399 -0.501865 0.567897 + 0.582231 2.12162 -2.61887 -0.947589 -0.207469 0.242964 + 0.576987 2.15463 -2.65067 -0.995985 0.0730764 -0.0517066 + 0.570883 2.07068 -2.72723 -0.983129 0.181351 0.0238725 + 0.701491 2.01968 -2.63472 0.305489 -0.515511 0.800578 + 0.69524 2.11143 -2.56373 0.354199 -0.584732 0.729816 + 0.644579 2.08591 -2.57095 -0.098464 -0.645845 0.757093 + 0.60238 2.20209 -2.48161 -0.653687 -0.534556 0.53567 + 0.715485 1.91742 -2.69586 0.341287 -0.418115 0.841845 + 0.759537 1.93105 -2.71226 0.616324 -0.306288 0.725488 + 0.745543 2.03331 -2.65112 0.6294 -0.378401 0.678726 + 0.727539 2.12957 -2.57257 0.650472 -0.43314 0.623921 + 0.678501 2.20954 -2.46987 0.379118 -0.603495 0.701472 + 0.698685 1.85599 -2.71767 0.237737 -0.204068 0.949651 + 0.648715 1.7972 -2.70334 0.0146635 -0.118088 0.992895 + 0.681915 1.76474 -2.71539 0.284735 -0.261406 0.922276 + 0.731885 1.82353 -2.72971 0.407925 -0.172844 0.896505 + 0.593886 1.81248 -2.71632 -0.636707 -0.339494 0.69235 + 0.639794 1.76164 -2.7155 -0.437006 -0.565265 0.699643 + 0.665852 1.74009 -2.72235 -0.13692 -0.695432 0.705427 + 0.71418 1.75095 -2.73674 0.426291 -0.320638 0.845853 + 0.584623 1.81375 -2.72933 -0.737073 -0.444665 0.508918 + 0.641574 1.74647 -2.75072 -0.598462 -0.737459 0.313046 + 0.667632 1.72493 -2.75756 -0.378946 -0.860555 0.34036 + 0.698117 1.7263 -2.7437 0.100129 -0.720514 0.686173 + 0.602743 1.76674 -2.76753 -0.641636 -0.673453 0.367103 + 0.632311 1.74775 -2.76373 -0.561822 -0.751114 0.346674 + 0.655672 1.71257 -2.81656 -0.47005 -0.85029 0.236769 + 0.68558 1.71445 -2.77081 -0.266447 -0.888021 0.374733 + 0.578252 1.79374 -2.78086 -0.701199 -0.630529 0.332796 + 0.604816 1.74469 -2.83784 -0.611485 -0.767432 0.192702 + 0.626104 1.73156 -2.82037 -0.58202 -0.783918 0.216158 + 0.54672 1.80842 -2.80386 -0.851015 -0.441567 0.284241 + 0.573284 1.75936 -2.86084 -0.673664 -0.729542 0.118091 + 0.630071 1.71904 -2.9497 -0.768607 -0.631468 -0.102424 + 0.634648 1.70481 -2.92819 -0.762872 -0.646528 -0.00526637 + 0.655936 1.69168 -2.91072 -0.534027 -0.828216 0.169922 + 0.537723 1.8242 -2.8348 -0.982672 -0.182463 -0.0325847 + 0.563727 1.77151 -2.88367 -0.866779 -0.471762 -0.161659 + 0.620515 1.73118 -2.97252 -0.703479 -0.70778 -0.0645406 + 0.647085 1.70548 -3.02662 -0.77346 -0.632644 0.0389986 + 0.662657 1.68703 -3.01069 -0.783826 -0.620231 -0.0305102 + 0.545798 1.83268 -2.864 -0.9674 -0.121431 -0.222243 + 0.571803 1.77999 -2.91288 -0.920957 -0.288673 -0.261737 + 0.610323 1.74237 -2.99011 -0.805913 -0.573224 -0.148047 + 0.636893 1.71667 -3.04421 -0.863633 -0.50186 -0.0476784 + 0.538602 1.89646 -2.8451 -0.989077 0.042865 -0.141026 + 0.545167 1.89124 -2.8865 -0.976249 0.0934415 -0.195463 + 0.552363 1.82746 -2.9054 -0.955981 -0.270213 -0.114393 + 0.572194 1.79384 -2.94126 -0.894126 -0.406437 -0.188011 + 0.542424 1.9554 -2.81462 -0.952158 0.243726 -0.18437 + 0.55408 1.99509 -2.80701 -0.930638 0.316891 -0.18301 + 0.562318 1.98001 -2.854 -0.88973 0.335911 -0.309103 + 0.554558 1.92862 -2.88943 -0.917363 0.300563 -0.260974 + 0.554457 1.85289 -2.94916 -0.961892 0.0318981 -0.271561 + 0.58665 2.11092 -2.76336 -0.934307 0.28971 -0.207698 + 0.594889 2.09583 -2.81035 -0.819504 0.428236 -0.380825 + 0.603837 2.01035 -2.9152 -0.781359 0.446163 -0.436367 + 0.596077 1.95895 -2.95063 -0.817915 0.401187 -0.412389 + 0.563849 1.89026 -2.95209 -0.880828 0.289969 -0.374245 + 0.592754 2.19486 -2.6868 -0.913407 0.300285 -0.274802 + 0.612134 2.21989 -2.70614 -0.678529 0.540584 -0.497361 + 0.616992 2.12624 -2.81177 -0.597247 0.583082 -0.550738 + 0.62594 2.04075 -2.91662 -0.393634 0.675562 -0.623432 + 0.611355 1.95708 -2.98045 -0.686796 0.451121 -0.569913 + 0.573893 2.2616 -2.54119 -0.996181 0.0533981 -0.0690851 + 0.587346 2.29606 -2.5723 -0.914569 0.287738 -0.284201 + 0.606726 2.32109 -2.59164 -0.683334 0.538572 -0.492945 + 0.638004 2.23347 -2.71156 -0.400008 0.677465 -0.61728 + 0.642862 2.13981 -2.8172 -0.390747 0.666457 -0.634943 + 0.579138 2.22859 -2.5094 -0.945474 -0.240265 0.219892 + 0.576804 2.3416 -2.40205 -0.947163 -0.219598 0.233795 + 0.572847 2.36653 -2.42594 -0.996664 0.066203 -0.0477373 + 0.5863 2.40099 -2.45705 -0.913605 0.306404 -0.267288 + 0.600907 2.41987 -2.4716 -0.688218 0.554409 -0.46796 + 0.600047 2.3151 -2.37426 -0.658353 -0.512858 0.550951 + 0.595973 2.4368 -2.27209 -0.659755 -0.35898 0.660195 + 0.581439 2.45367 -2.28939 -0.926143 -0.102081 0.363096 + 0.577483 2.4786 -2.31328 -0.98245 0.175707 0.0625927 + 0.637776 2.19722 -2.46583 -0.0590804 -0.68011 0.730725 + 0.625194 2.30896 -2.36457 -0.0842026 -0.658642 0.74773 + 0.621121 2.43066 -2.2624 -0.0928065 -0.506128 0.857451 + 0.618804 2.5151 -2.23258 -0.297719 0.0939191 0.950022 + 0.60427 2.53197 -2.24989 -0.682101 0.452262 0.574628 + 0.66592 2.32128 -2.36861 0.399618 -0.577219 0.712126 + 0.643209 2.43715 -2.26472 0.356109 -0.44842 0.819821 + 0.640891 2.52159 -2.2349 0.258997 0.189058 0.947195 + 0.612769 2.55385 -2.26927 -0.575663 0.772802 0.267189 + 0.585982 2.50048 -2.33267 -0.907487 0.394512 -0.144316 + 0.7108 2.22767 -2.47871 0.683211 -0.435451 0.586178 + 0.688934 2.3344 -2.37654 0.690992 -0.414727 0.592057 + 0.666223 2.45027 -2.27264 0.618234 -0.329916 0.713402 + 0.654271 2.5352 -2.24488 0.44901 0.363471 0.816259 + 0.726663 2.24773 -2.49406 0.85417 -0.260787 0.449872 + 0.704796 2.35446 -2.39188 0.853745 -0.257361 0.452642 + 0.679602 2.46388 -2.28262 0.78958 -0.191073 0.583142 + 0.689272 2.47895 -2.29452 0.885445 -0.0613291 0.46068 + 0.657918 2.5455 -2.25344 0.530299 0.561257 0.635432 + 0.749485 2.14421 -2.59576 0.833167 -0.263514 0.486202 + 0.762063 2.1617 -2.61279 0.916813 -0.141575 0.373377 + 0.73924 2.26522 -2.5111 0.919297 -0.153564 0.362369 + 0.714466 2.36952 -2.40378 0.91753 -0.156153 0.365726 + 0.692919 2.48925 -2.30308 0.947193 0.126733 0.294556 + 0.767489 2.04796 -2.67431 0.822472 -0.223583 0.523021 + 0.783236 2.07373 -2.69319 0.907812 -0.114247 0.403515 + 0.768773 2.18065 -2.6287 0.980203 0.0451205 0.192783 + 0.745029 2.28153 -2.5248 0.981188 0.0369572 0.189486 + 0.720255 2.38584 -2.41748 0.980578 0.0410447 0.191788 + 0.785949 1.96684 -2.73182 0.809728 -0.195122 0.553414 + 0.801696 1.99261 -2.7507 0.902906 -0.0985288 0.418394 + 0.789946 2.09269 -2.7091 0.973876 0.0675064 0.216816 + 0.786084 2.12532 -2.73327 0.969087 0.245989 0.0189807 + 0.766666 2.2036 -2.64979 0.973806 0.227241 0.00792497 + 0.777419 1.86789 -2.75917 0.7657 -0.163234 0.62214 + 0.803831 1.90368 -2.77872 0.839231 -0.163904 0.518485 + 0.819798 1.9372 -2.81047 0.941424 -0.0259053 0.33623 + 0.809615 2.02631 -2.76759 0.968965 0.072907 0.2362 + 0.805753 2.05895 -2.79176 0.964401 0.263179 0.0258432 + 0.753448 1.83334 -2.74042 0.612595 -0.195606 0.765811 + 0.792135 1.83855 -2.77695 0.787746 -0.0899971 0.609391 + 0.82819 1.86377 -2.8299 0.877799 -0.0868702 0.471087 + 0.844157 1.89729 -2.86166 0.971741 0.107343 0.21023 + 0.735743 1.76076 -2.74744 0.525423 -0.207513 0.825148 + 0.768164 1.80399 -2.7582 0.676137 -0.174936 0.715706 + 0.805177 1.78506 -2.81554 0.850898 -0.147504 0.504197 + 0.841232 1.81029 -2.8685 0.931471 -0.147372 0.33263 + 0.737034 1.73069 -2.75591 0.424886 -0.34653 0.836295 + 0.769455 1.77391 -2.76666 0.680699 -0.161788 0.714474 + 0.785062 1.75884 -2.78734 0.789779 -0.118538 0.601829 + 0.822571 1.71764 -2.86359 0.923573 -0.185293 0.335677 + 0.836928 1.73303 -2.90586 0.955423 -0.207571 0.209954 + 0.716065 1.71582 -2.75695 0.0695719 -0.699572 0.711167 + 0.737643 1.69816 -2.77531 0.140438 -0.800231 0.583016 + 0.758612 1.71303 -2.77428 0.504171 -0.442634 0.741543 + 0.774219 1.69796 -2.79495 0.499399 -0.534125 0.682137 + 0.802457 1.69142 -2.83538 0.819097 -0.342598 0.460116 + 0.691288 1.70242 -2.79813 -0.32445 -0.901512 0.28637 + 0.743351 1.68614 -2.80264 -0.0654722 -0.888995 0.453211 + 0.752385 1.67622 -2.81787 -0.157498 -0.854917 0.494279 + 0.783253 1.68804 -2.81018 0.550407 -0.533286 0.642385 + 0.711027 1.67694 -2.87073 -0.403975 -0.871298 0.278647 + 0.720272 1.65889 -2.90357 -0.547251 -0.764205 0.341331 + 0.761631 1.65818 -2.8507 -0.301597 -0.85865 0.414438 + 0.781818 1.65907 -2.84148 0.312298 -0.809132 0.49777 + 0.801022 1.66245 -2.86669 0.728979 -0.632091 0.262775 + 0.675411 1.68708 -2.88916 -0.408762 -0.884918 0.223233 + 0.696884 1.66102 -2.94518 -0.519993 -0.821012 0.235681 + 0.712321 1.65017 -2.94006 -0.632162 -0.737903 0.236368 + 0.747108 1.63095 -2.90975 -0.305723 -0.909531 0.28158 + 0.767295 1.63184 -2.90053 0.239336 -0.946983 0.214342 + 0.67741 1.66562 -2.96674 -0.582521 -0.80071 0.139761 + 0.71439 1.63416 -3.0018 -0.520992 -0.851917 -0.0529496 + 0.729827 1.62331 -2.99668 -0.225954 -0.969403 -0.0959314 + 0.739157 1.62223 -2.94625 -0.150652 -0.976093 0.156674 + 0.763973 1.63233 -2.97724 0.468076 -0.879589 -0.0850188 + 0.667234 1.67281 -2.98919 -0.738943 -0.668196 -0.0864664 + 0.704214 1.64134 -3.02425 -0.434164 -0.867534 -0.242663 + 0.73605 1.64668 -3.05466 -0.0408443 -0.788118 -0.614167 + 0.754643 1.63341 -3.02767 0.346965 -0.87892 -0.327283 + 0.6694 1.6707 -3.04041 -0.633511 -0.754661 -0.170739 + 0.701236 1.67604 -3.07083 -0.254173 -0.670281 -0.697223 + 0.75436 1.70648 -3.09767 0.287692 -0.323204 -0.901539 + 0.766549 1.68541 -3.08471 0.384265 -0.464444 -0.797893 + 0.785142 1.67213 -3.05771 0.634145 -0.548943 -0.544538 + 0.653828 1.68914 -3.05635 -0.659393 -0.693103 -0.291219 + 0.679261 1.69753 -3.08295 -0.293756 -0.630656 -0.718318 + 0.732385 1.72797 -3.10979 0.219546 -0.268859 -0.937824 + 0.788241 1.76996 -3.0788 0.658577 0.10265 -0.745479 + 0.80043 1.74889 -3.06583 0.779611 -0.0495978 -0.624297 + 0.641123 1.70815 -3.06481 -0.770568 -0.551637 -0.319251 + 0.666556 1.71654 -3.09141 -0.350205 -0.56881 -0.744185 + 0.70419 1.74452 -3.12064 0.0900232 -0.266866 -0.95952 + 0.727441 1.81382 -3.10411 0.255883 0.342015 -0.904184 + 0.755636 1.79727 -3.09326 0.492668 0.197896 -0.847417 + 0.629491 1.74042 -3.05707 -0.936978 -0.289343 -0.195839 + 0.633721 1.73191 -3.07768 -0.86158 -0.346916 -0.37058 + 0.648761 1.73238 -3.09523 -0.517603 -0.456057 -0.723946 + 0.686395 1.76035 -3.12446 -0.126139 -0.0451415 -0.990985 + 0.610714 1.75622 -3.01849 -0.892413 -0.349026 -0.285971 + 0.626676 1.77042 -3.0709 -0.958337 -0.117576 -0.260318 + 0.629827 1.76674 -3.08925 -0.878585 -0.0664066 -0.472946 + 0.644867 1.76721 -3.1068 -0.57333 0.0117399 -0.81924 + 0.607899 1.78621 -3.03232 -0.885647 -0.220565 -0.408632 + 0.608451 1.81652 -3.04159 -0.820529 0.0580835 -0.568646 + 0.62545 1.80917 -3.06735 -0.925097 0.0770647 -0.371829 + 0.628602 1.80548 -3.08571 -0.71194 0.141799 -0.687775 + 0.646986 1.81966 -3.08803 -0.368301 0.385008 -0.84624 + 0.578691 1.79957 -2.99419 -0.810243 -0.480429 -0.3357 + 0.579244 1.82987 -3.00346 -0.830311 0.0130861 -0.557146 + 0.611383 1.8823 -3.02108 -0.746254 0.255242 -0.614782 + 0.628382 1.87494 -3.04685 -0.628016 0.358793 -0.690553 + 0.646766 1.88913 -3.04918 -0.337487 0.493804 -0.801411 + 0.55886 1.83319 -2.95833 -0.945288 -0.186223 -0.267866 + 0.574841 1.84957 -2.99428 -0.822734 0.141529 -0.550526 + 0.579126 1.88838 -2.98191 -0.792407 0.308772 -0.526072 + 0.615668 1.92111 -3.00871 -0.635237 0.39336 -0.664637 + 0.633091 1.98217 -2.98009 -0.362506 0.645152 -0.672584 + 0.637404 1.9462 -3.00835 -0.390901 0.516721 -0.761706 + 0.674717 1.9113 -3.04227 -0.100272 0.552101 -0.827726 + 0.688514 1.81281 -3.10569 -0.129446 0.42285 -0.896907 + 0.64624 1.99277 -2.96864 -0.106922 0.737932 -0.666351 + 0.665356 1.96838 -3.00144 -0.156582 0.619203 -0.76946 + 0.713644 1.91231 -3.04069 0.0249015 0.554894 -0.831549 + 0.771678 1.91756 -3.03448 0.394279 0.500449 -0.770776 + 0.639089 2.05134 -2.90518 -0.176378 0.719694 -0.671514 + 0.680429 2.01413 -2.95621 -0.274626 0.678414 -0.681421 + 0.699545 1.98975 -2.98901 -0.0893502 0.632676 -0.769244 + 0.757578 1.995 -2.9828 0.176583 0.578985 -0.795986 + 0.804283 1.89025 -3.02002 0.724997 0.299677 -0.620139 + 0.66832 2.15902 -2.80953 -0.265073 0.720217 -0.641111 + 0.664548 2.07055 -2.8975 -0.321556 0.655354 -0.683456 + 0.718051 2.06157 -2.93104 -0.0644764 0.685328 -0.725374 + 0.755071 2.06926 -2.91379 0.232986 0.696261 -0.678925 + 0.794598 2.00269 -2.96554 0.567044 0.521304 -0.637733 + 0.661796 2.24227 -2.7143 -0.249679 0.721832 -0.64546 + 0.693513 2.16424 -2.81003 -0.115482 0.772102 -0.624918 + 0.70217 2.11799 -2.87233 -0.180041 0.710531 -0.680244 + 0.732827 2.13022 -2.86002 0.126589 0.755794 -0.642457 + 0.786647 2.06586 -2.90214 0.613934 0.613305 -0.496933 + 0.652948 2.34175 -2.59907 -0.251377 0.733465 -0.631537 + 0.674625 2.34631 -2.59941 -0.0533376 0.766246 -0.640329 + 0.686989 2.24749 -2.71481 -0.0489092 0.75303 -0.656166 + 0.71035 2.24921 -2.71041 0.169442 0.760574 -0.626751 + 0.72417 2.17647 -2.79772 0.11058 0.786538 -0.607561 + 0.629155 2.33295 -2.59633 -0.403955 0.686956 -0.604079 + 0.641273 2.43835 -2.47837 -0.256526 0.753098 -0.605836 + 0.662951 2.44292 -2.47871 -0.0646949 0.786927 -0.613645 + 0.697987 2.34803 -2.59502 0.174809 0.768606 -0.615374 + 0.623337 2.43172 -2.47629 -0.407274 0.705687 -0.57977 + 0.632574 2.5333 -2.35231 -0.268762 0.84145 -0.468751 + 0.646166 2.5361 -2.35256 -0.0847157 0.876607 -0.473691 + 0.662438 2.53685 -2.3505 0.141376 0.885775 -0.442058 + 0.679223 2.44367 -2.47664 0.159384 0.792206 -0.589072 + 0.600589 2.51935 -2.34722 -0.685051 0.642073 -0.344162 + 0.614638 2.52666 -2.35024 -0.42396 0.790017 -0.442867 + 0.626817 2.56116 -2.27229 -0.287078 0.912462 0.291545 + 0.640409 2.56396 -2.27254 -0.0666836 0.972072 0.225009 + 0.651889 2.56221 -2.26917 0.380173 0.865309 0.326663 + 0.673919 2.5351 -2.34713 0.543364 0.784178 -0.299702 + 0.697562 2.44109 -2.47116 0.581835 0.686478 -0.436137 + 0.716326 2.34544 -2.58953 0.56339 0.677932 -0.472228 + 0.738588 2.24888 -2.69747 0.571243 0.669361 -0.475013 + 0.69134 2.50661 -2.31892 0.93955 0.322188 0.11593 + 0.685311 2.52331 -2.33464 0.863028 0.503507 -0.040793 + 0.708955 2.4293 -2.45867 0.894238 0.417316 -0.16182 + 0.733201 2.33058 -2.57124 0.888569 0.419915 -0.184707 + 0.718676 2.4032 -2.43332 0.97246 0.232687 0.0133409 + 0.742922 2.30448 -2.54589 0.973484 0.228702 0.00487676 + 0.755463 2.23402 -2.67918 0.889004 0.417398 -0.188284 + 0.752407 2.17614 -2.78478 0.557229 0.691422 -0.459816 + 0.774881 2.15574 -2.76266 0.886149 0.428971 -0.17528 + 0.764403 2.12682 -2.84837 0.553754 0.681939 -0.477824 + 0.786876 2.10642 -2.82626 0.873886 0.449182 -0.185898 + 0.801246 2.05817 -2.875 0.881539 0.431406 -0.191777 + 0.815445 1.98414 -2.93955 0.865807 0.333068 -0.373422 + 0.82513 1.87171 -2.99403 0.87668 0.18386 -0.444553 + 0.820122 2.0107 -2.8405 0.963403 0.267659 0.0146105 + 0.830043 1.97645 -2.91241 0.942145 0.221111 -0.251937 + 0.837639 1.93666 -2.89927 0.981306 0.183179 -0.0590205 + 0.843468 1.8677 -2.95023 0.963375 0.135425 -0.231447 + 0.818469 1.74728 -3.03741 0.879163 -0.0480265 -0.474094 + 0.827717 1.9709 -2.82736 0.983188 0.0436214 0.177307 + 0.849986 1.82833 -2.91261 0.999864 -0.0122529 0.0110046 + 0.836807 1.74327 -2.9936 0.952236 -0.101471 -0.28801 + 0.845683 1.75107 -2.94998 0.99173 -0.115351 -0.0562623 + 0.82955 1.68726 -2.94658 0.888007 -0.45982 0.00279802 + 0.820674 1.67945 -2.99021 0.836294 -0.517847 -0.180129 + 0.803181 1.67052 -3.02929 0.726909 -0.581746 -0.364932 + 0.815193 1.67187 -2.90431 0.815013 -0.566879 0.120007 + 0.781466 1.64126 -2.93816 0.600422 -0.799324 -0.0239625 +} +TriangleList +{ + 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 88 + 92 93 94 + 95 96 94 + 97 98 99 + 100 101 102 + 103 104 105 + 3 106 107 + 108 109 110 + 111 112 113 + 114 115 116 + 117 118 119 + 120 21 121 + 122 123 124 + 125 126 127 + 128 129 130 + 131 132 133 + 134 135 136 + 137 138 139 + 140 97 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 30 + 246 247 248 + 249 250 251 + 252 253 254 + 255 256 257 + 258 259 260 + 259 258 261 + 261 262 259 + 262 261 263 + 262 263 264 + 264 265 262 + 265 264 266 + 267 268 269 + 269 268 270 + 270 271 269 + 269 271 272 + 273 269 272 + 274 269 273 + 270 268 275 + 275 276 270 + 277 270 276 + 270 277 271 + 271 277 278 + 278 279 271 + 271 279 272 + 280 275 268 + 225 275 280 + 268 281 280 + 282 278 277 + 283 278 282 + 278 283 279 + 279 283 284 + 279 284 272 + 282 285 283 + 286 283 285 + 283 286 284 + 285 282 287 + 287 288 285 + 285 288 289 + 289 290 285 + 285 290 286 + 287 282 291 + 291 292 287 + 293 291 282 + 294 289 288 + 288 295 294 + 296 294 295 + 295 297 296 + 298 296 297 + 299 296 298 + 296 299 300 + 301 295 288 + 295 301 302 + 302 297 295 + 297 302 303 + 303 304 297 + 297 304 298 + 288 287 301 + 305 301 287 + 302 301 305 + 305 306 302 + 302 306 307 + 307 303 302 + 308 303 307 + 304 303 308 + 309 305 287 + 310 305 309 + 305 310 306 + 306 310 311 + 311 307 306 + 307 311 312 + 312 313 307 + 307 313 308 + 314 309 287 + 315 309 314 + 309 315 316 + 309 316 310 + 311 310 316 + 317 311 316 + 312 311 317 + 287 318 314 + 319 314 318 + 320 314 319 + 314 320 315 + 315 320 321 + 321 322 315 + 316 315 322 + 322 323 316 + 316 323 317 + 318 324 319 + 325 319 324 + 326 319 325 + 319 326 320 + 320 326 327 + 327 321 320 + 328 321 327 + 321 328 329 + 329 322 321 + 324 330 325 + 331 325 330 + 332 325 331 + 325 332 326 + 327 326 332 + 332 333 327 + 334 327 333 + 327 334 328 + 330 335 331 + 336 331 335 + 337 331 336 + 331 337 332 + 332 337 338 + 338 333 332 + 339 333 338 + 336 340 337 + 338 337 340 + 340 336 226 + 333 341 334 + 342 334 341 + 328 334 342 + 342 343 328 + 328 343 344 + 344 329 328 + 345 329 344 + 322 329 345 + 345 323 322 + 346 343 342 + 343 346 347 + 347 344 343 + 344 347 348 + 348 349 344 + 344 349 345 + 342 350 346 + 346 350 351 + 351 352 346 + 346 352 353 + 353 347 346 + 348 347 353 + 350 342 354 + 354 355 350 + 350 355 356 + 356 351 350 + 357 351 356 + 352 351 357 + 358 354 342 + 359 354 358 + 355 354 359 + 359 360 355 + 355 360 361 + 361 356 355 + 356 361 362 + 356 362 357 + 358 363 359 + 359 363 364 + 364 365 359 + 360 359 365 + 365 366 360 + 361 360 366 + 366 367 361 + 362 361 367 + 367 368 362 + 362 368 369 + 370 364 363 + 363 371 370 + 340 370 371 + 371 363 372 + 373 374 375 + 374 373 376 + 376 377 374 + 374 377 378 + 373 379 376 + 376 379 380 + 381 376 380 + 379 373 382 + 383 379 382 + 380 379 384 + 385 377 376 + 386 387 388 + 388 387 389 + 389 390 388 + 388 390 391 + 389 387 392 + 392 393 389 + 393 394 389 + 389 394 390 + 390 394 395 + 395 396 390 + 390 396 397 + 387 398 392 + 399 392 398 + 399 393 392 + 393 399 400 + 400 401 393 + 394 393 401 + 402 394 401 + 398 387 403 + 404 398 403 + 405 398 404 + 398 405 399 + 399 405 406 + 406 400 399 + 400 406 407 + 408 400 407 + 400 408 401 + 408 409 401 + 401 409 402 + 409 410 402 + 404 411 405 + 405 411 412 + 412 406 405 + 411 404 413 + 404 414 413 + 414 415 413 + 413 415 416 + 416 417 413 + 413 417 418 + 419 414 404 + 415 414 419 + 419 420 415 + 421 419 404 + 422 421 404 + 423 417 416 + 416 424 423 + 423 424 425 + 425 426 423 + 425 427 426 + 427 425 428 + 428 429 427 + 424 416 430 + 430 431 424 + 425 424 431 + 431 432 425 + 432 428 425 + 433 430 416 + 433 434 430 + 434 435 430 + 431 430 435 + 431 435 436 + 436 437 431 + 438 437 436 + 433 439 434 + 434 439 440 + 440 441 434 + 434 441 442 + 435 434 442 + 439 433 443 + 443 444 439 + 439 444 445 + 440 439 445 + 445 446 440 + 447 440 446 + 440 447 441 + 441 447 448 + 448 449 441 + 441 449 442 + 444 419 445 + 419 450 445 + 445 450 451 + 445 451 452 + 452 446 445 + 453 446 452 + 446 453 447 + 448 447 453 + 454 419 444 + 452 451 455 + 451 450 456 + 456 388 451 + 451 388 457 + 428 432 458 + 459 428 458 + 428 459 460 + 460 429 428 + 429 460 461 + 460 462 461 + 462 460 463 + 460 459 464 + 464 463 460 + 465 463 464 + 464 466 465 + 464 459 467 + 416 415 468 + 416 468 469 + 408 407 470 + 471 470 407 + 470 471 472 + 472 473 470 + 474 470 473 + 475 474 473 + 474 475 476 + 407 477 471 + 471 477 478 + 471 478 479 + 472 471 479 + 477 407 480 + 478 481 479 + 395 482 396 + 396 482 380 + 380 483 396 + 484 485 486 + 485 484 487 + 487 488 485 + 489 488 487 + 489 487 490 + 490 224 489 + 276 224 490 + 224 276 275 + 275 491 224 + 490 487 492 + 277 490 492 + 276 490 277 + 493 494 495 + 496 493 495 + 497 496 495 + 498 496 497 + 496 498 499 + 499 500 496 + 501 496 500 + 502 497 495 + 497 502 503 + 498 497 503 + 499 498 503 + 503 504 499 + 505 499 504 + 500 499 505 + 500 505 506 + 506 507 500 + 500 507 508 + 509 503 502 + 503 509 510 + 510 504 503 + 504 510 511 + 504 511 505 + 502 512 509 + 509 512 466 + 512 513 466 + 514 515 364 + 364 515 516 + 516 365 364 + 366 365 516 + 516 517 366 + 366 517 518 + 518 367 366 + 516 515 519 + 519 520 516 + 517 516 520 + 520 521 517 + 518 517 521 + 521 522 518 + 523 518 522 + 367 518 523 + 523 368 367 + 524 519 515 + 519 524 525 + 525 526 519 + 519 526 527 + 527 520 519 + 521 520 527 + 515 528 524 + 529 524 528 + 525 524 529 + 529 530 525 + 531 525 530 + 526 525 531 + 531 532 526 + 526 532 533 + 527 526 533 + 528 534 529 + 535 529 534 + 529 535 536 + 536 530 529 + 530 536 537 + 537 538 530 + 530 538 531 + 539 531 538 + 532 531 539 + 534 540 535 + 540 534 340 + 340 534 541 + 541 179 340 + 542 543 544 + 544 545 542 + 542 545 546 + 546 547 542 + 548 542 547 + 549 542 548 + 548 308 549 + 545 544 550 + 550 551 545 + 546 545 551 + 551 552 546 + 553 546 552 + 553 547 546 + 550 544 554 + 554 555 550 + 556 550 555 + 550 556 557 + 557 551 550 + 551 557 558 + 558 552 551 + 559 554 544 + 559 560 554 + 554 560 561 + 561 555 554 + 555 561 562 + 562 563 555 + 555 563 556 + 544 564 559 + 308 548 304 + 304 548 565 + 565 298 304 + 566 298 565 + 298 566 299 + 567 299 566 + 568 299 567 + 547 565 548 + 569 565 547 + 565 569 566 + 566 569 570 + 570 571 566 + 566 571 567 + 572 567 571 + 573 567 572 + 567 573 568 + 568 573 574 + 547 553 569 + 570 569 553 + 575 570 553 + 576 570 575 + 570 576 577 + 577 571 570 + 571 577 572 + 553 578 575 + 579 575 578 + 575 579 580 + 575 580 576 + 581 576 580 + 577 576 581 + 581 582 577 + 572 577 582 + 552 578 553 + 558 578 552 + 578 558 579 + 579 558 583 + 584 579 583 + 585 579 584 + 579 585 580 + 580 585 586 + 586 587 580 + 580 587 581 + 558 557 583 + 588 583 557 + 583 588 589 + 583 589 590 + 590 591 583 + 583 591 584 + 557 556 588 + 592 588 556 + 589 588 592 + 592 593 589 + 589 593 594 + 590 589 594 + 594 595 590 + 596 590 595 + 591 590 596 + 556 563 592 + 597 592 563 + 592 597 593 + 593 597 598 + 598 594 593 + 594 598 599 + 594 599 600 + 600 595 594 + 563 562 597 + 598 597 562 + 562 601 598 + 595 600 96 + 96 602 595 + 595 602 596 + 603 596 602 + 591 596 603 + 603 584 591 + 604 584 603 + 584 604 585 + 602 96 140 + 140 605 602 + 602 605 603 + 606 603 605 + 603 606 604 + 604 606 607 + 607 608 604 + 585 604 608 + 608 586 585 + 605 140 609 + 609 610 605 + 605 610 606 + 607 606 610 + 610 611 607 + 612 607 611 + 607 612 613 + 613 608 607 + 609 140 614 + 614 615 609 + 616 609 615 + 610 609 616 + 616 611 610 + 611 616 617 + 617 618 611 + 611 618 612 + 614 140 619 + 620 621 622 + 621 620 623 + 623 228 621 + 228 623 624 + 625 623 620 + 626 627 228 + 228 627 536 + 536 535 228 + 228 535 628 + 536 627 629 + 629 537 536 + 630 537 629 + 538 537 630 + 630 631 538 + 538 631 539 + 632 629 627 + 629 632 633 + 627 624 632 + 632 624 634 + 634 635 632 + 633 632 635 + 636 634 624 + 637 634 636 + 634 637 638 + 638 635 634 + 635 638 639 + 639 640 635 + 635 640 633 + 624 623 636 + 641 636 623 + 642 636 641 + 636 642 637 + 637 642 643 + 643 644 637 + 637 644 645 + 645 638 637 + 639 638 645 + 646 641 623 + 647 641 646 + 647 648 641 + 641 648 642 + 643 642 648 + 649 643 648 + 650 643 649 + 644 643 650 + 274 646 623 + 273 646 274 + 651 646 273 + 646 651 647 + 651 652 647 + 652 653 647 + 648 647 653 + 653 654 648 + 648 654 655 + 655 649 648 + 651 273 656 + 656 652 651 + 657 652 656 + 652 657 658 + 658 659 652 + 656 273 272 + 660 656 272 + 657 656 660 + 660 661 657 + 657 661 658 + 661 662 658 + 654 658 662 + 658 654 653 + 663 660 272 + 664 660 663 + 664 661 660 + 662 661 664 + 665 662 664 + 662 665 666 + 662 666 654 + 667 663 272 + 668 663 667 + 668 669 663 + 663 669 664 + 664 669 665 + 669 670 665 + 671 665 670 + 272 672 667 + 673 667 672 + 673 674 667 + 667 674 668 + 668 674 675 + 675 676 668 + 676 677 668 + 678 672 272 + 678 679 672 + 672 679 673 + 272 680 678 + 681 678 680 + 678 681 682 + 679 678 682 + 673 679 682 + 574 680 272 + 680 574 573 + 573 683 680 + 680 683 684 + 684 681 680 + 685 681 684 + 682 681 685 + 574 272 284 + 284 686 574 + 574 686 687 + 687 688 574 + 665 689 666 + 572 683 573 + 683 572 690 + 690 684 683 + 684 690 691 + 691 692 684 + 684 692 685 + 693 685 692 + 682 685 693 + 693 694 682 + 682 694 673 + 582 690 572 + 691 690 582 + 582 695 691 + 691 695 696 + 696 697 691 + 692 691 697 + 697 698 692 + 692 698 693 + 695 582 581 + 581 699 695 + 695 699 700 + 700 696 695 + 701 696 700 + 696 701 702 + 702 697 696 + 698 697 702 + 699 581 587 + 587 703 699 + 700 699 703 + 703 704 700 + 705 700 704 + 700 705 701 + 701 705 706 + 706 707 701 + 702 701 707 + 708 703 587 + 703 708 709 + 709 704 703 + 704 709 710 + 710 711 704 + 704 711 705 + 706 705 711 + 587 586 708 + 708 586 608 + 608 613 708 + 708 613 712 + 712 709 708 + 710 709 712 + 712 713 710 + 710 713 714 + 714 715 710 + 711 710 715 + 716 712 613 + 713 712 716 + 716 717 713 + 713 717 718 + 718 714 713 + 719 714 718 + 714 719 720 + 720 715 714 + 613 612 716 + 716 612 618 + 618 721 716 + 717 716 721 + 721 722 717 + 717 722 723 + 723 718 717 + 719 718 723 + 723 724 719 + 720 719 724 + 725 721 618 + 721 725 726 + 726 722 721 + 722 726 727 + 727 728 722 + 722 728 723 + 618 617 725 + 725 617 729 + 729 730 725 + 726 725 730 + 730 731 726 + 727 726 731 + 731 732 727 + 733 727 732 + 728 727 733 + 734 729 617 + 735 729 734 + 729 735 736 + 736 730 729 + 730 736 737 + 737 731 730 + 731 737 738 + 738 732 731 + 617 616 734 + 615 734 616 + 739 734 615 + 734 739 735 + 735 739 740 + 740 741 735 + 735 741 742 + 742 736 735 + 737 736 742 + 615 743 739 + 740 739 743 + 743 744 740 + 745 740 744 + 741 740 745 + 745 746 741 + 741 746 747 + 747 742 741 + 743 615 614 + 614 748 743 + 743 748 749 + 749 744 743 + 744 749 750 + 750 751 744 + 744 751 745 + 748 614 752 + 752 753 748 + 749 748 753 + 753 754 749 + 750 749 754 + 95 752 614 + 755 752 95 + 753 752 755 + 755 756 753 + 753 756 757 + 757 754 753 + 754 757 758 + 754 758 750 + 95 759 755 + 755 759 760 + 761 755 760 + 756 755 761 + 761 762 756 + 757 756 762 + 763 757 762 + 758 757 763 + 764 759 95 + 761 765 762 + 762 765 766 + 766 767 762 + 762 767 763 + 768 763 767 + 763 768 769 + 763 769 758 + 750 758 769 + 770 750 769 + 751 750 770 + 771 766 765 + 772 766 771 + 767 766 772 + 767 772 768 + 773 768 772 + 769 768 773 + 773 774 769 + 769 774 775 + 775 770 769 + 776 771 765 + 777 677 676 + 676 778 777 + 779 777 778 + 778 676 780 + 778 780 781 + 781 782 778 + 778 782 783 + 783 784 778 + 784 779 778 + 780 676 675 + 675 785 780 + 780 785 786 + 781 780 786 + 787 781 786 + 788 781 787 + 788 782 781 + 782 788 789 + 789 783 782 + 675 790 785 + 785 790 791 + 791 792 785 + 785 792 786 + 790 675 674 + 674 673 790 + 791 790 673 + 694 791 673 + 793 791 694 + 791 793 792 + 792 793 794 + 794 795 792 + 792 795 786 + 694 796 793 + 794 793 796 + 796 797 794 + 798 794 797 + 794 798 795 + 795 798 799 + 799 800 795 + 795 800 786 + 796 694 693 + 693 801 796 + 796 801 802 + 802 797 796 + 803 797 802 + 797 803 798 + 799 798 803 + 803 804 799 + 805 799 804 + 799 805 800 + 801 693 698 + 698 806 801 + 802 801 806 + 807 802 806 + 802 807 804 + 803 802 804 + 702 806 698 + 806 702 808 + 808 809 806 + 806 809 807 + 810 807 809 + 807 810 811 + 811 804 807 + 804 811 805 + 812 805 811 + 800 805 812 + 812 786 800 + 707 808 702 + 813 808 707 + 809 808 813 + 813 814 809 + 809 814 810 + 815 810 814 + 811 810 815 + 815 816 811 + 811 816 812 + 817 812 816 + 812 817 786 + 707 818 813 + 813 818 819 + 819 820 813 + 814 813 820 + 820 821 814 + 814 821 815 + 818 707 706 + 818 706 822 + 822 819 818 + 823 819 822 + 819 823 824 + 824 820 819 + 821 820 824 + 824 825 821 + 821 825 826 + 826 815 821 + 822 706 711 + 711 827 822 + 828 822 827 + 822 828 823 + 823 828 829 + 829 830 823 + 824 823 830 + 830 831 824 + 825 824 831 + 715 827 711 + 827 715 720 + 720 832 827 + 827 832 828 + 829 828 832 + 832 833 829 + 834 829 833 + 829 834 835 + 835 830 829 + 830 835 836 + 836 831 830 + 832 720 837 + 837 833 832 + 833 837 838 + 838 839 833 + 833 839 834 + 840 834 839 + 835 834 840 + 840 841 835 + 836 835 841 + 724 837 720 + 838 837 724 + 724 842 838 + 838 842 843 + 843 844 838 + 839 838 844 + 844 845 839 + 839 845 840 + 842 724 723 + 723 846 842 + 842 846 847 + 847 843 842 + 848 843 847 + 843 848 849 + 849 844 843 + 845 844 849 + 846 723 728 + 728 850 846 + 846 850 851 + 851 847 846 + 848 847 851 + 851 852 848 + 849 848 852 + 852 853 849 + 854 849 853 + 849 854 845 + 733 850 728 + 850 733 855 + 855 856 850 + 850 856 851 + 857 851 856 + 851 857 858 + 858 852 851 + 852 858 859 + 859 853 852 + 855 733 860 + 860 861 855 + 862 855 861 + 856 855 862 + 862 863 856 + 856 863 857 + 732 860 733 + 864 860 732 + 860 864 865 + 865 861 860 + 861 865 866 + 866 867 861 + 861 867 862 + 868 862 867 + 863 862 868 + 732 738 864 + 864 738 869 + 869 870 864 + 864 870 871 + 871 865 864 + 866 865 871 + 869 738 737 + 737 872 869 + 872 873 869 + 874 869 873 + 870 869 874 + 742 872 737 + 872 742 747 + 747 875 872 + 872 875 876 + 876 873 872 + 873 876 877 + 873 877 874 + 875 747 878 + 878 879 875 + 876 875 879 + 879 880 876 + 877 876 880 + 880 881 877 + 874 877 881 + 882 878 747 + 883 878 882 + 878 883 884 + 884 879 878 + 879 884 885 + 885 880 879 + 880 885 886 + 886 881 880 + 747 746 882 + 887 882 746 + 888 882 887 + 882 888 883 + 889 883 888 + 884 883 889 + 889 890 884 + 884 890 891 + 891 885 884 + 886 885 891 + 746 745 887 + 892 887 745 + 893 887 892 + 887 893 888 + 888 893 894 + 894 895 888 + 888 895 889 + 896 889 895 + 890 889 896 + 745 751 892 + 770 892 751 + 897 892 770 + 892 897 893 + 894 893 897 + 897 898 894 + 899 894 898 + 895 894 899 + 899 900 895 + 895 900 896 + 770 901 897 + 897 901 902 + 902 898 897 + 898 902 903 + 903 904 898 + 898 904 899 + 901 770 775 + 775 905 901 + 901 905 906 + 902 901 906 + 906 907 902 + 903 902 907 + 907 908 903 + 909 903 908 + 904 903 909 + 910 905 775 + 905 910 911 + 911 906 905 + 911 912 906 + 906 912 913 + 913 907 906 + 907 913 914 + 914 908 907 + 910 775 774 + 774 915 910 + 911 910 915 + 915 916 911 + 912 911 916 + 916 917 912 + 912 917 918 + 918 913 912 + 914 913 918 + 915 774 773 + 773 919 915 + 915 919 920 + 920 916 915 + 916 920 921 + 921 917 916 + 917 921 922 + 922 918 917 + 919 773 923 + 923 924 919 + 919 924 925 + 925 920 919 + 921 920 925 + 925 926 921 + 921 926 927 + 922 921 927 + 772 923 773 + 771 923 772 + 923 771 928 + 928 924 923 + 924 928 929 + 929 925 924 + 925 929 926 + 926 929 930 + 930 927 926 + 928 771 931 + 931 932 928 + 928 932 930 + 930 929 928 + 933 932 931 + 932 933 934 + 934 935 932 + 934 933 936 + 936 937 934 + 938 934 937 + 939 934 938 + 940 936 933 + 941 936 940 + 936 941 942 + 942 937 936 + 937 942 943 + 943 944 937 + 937 944 938 + 933 945 940 + 946 940 945 + 947 940 946 + 940 947 941 + 941 947 948 + 948 949 941 + 942 941 949 + 950 945 933 + 932 951 930 + 952 930 951 + 930 952 927 + 927 952 953 + 953 954 927 + 927 954 922 + 951 955 952 + 952 955 956 + 956 953 952 + 957 953 956 + 954 953 957 + 957 958 954 + 954 958 959 + 959 922 954 + 918 922 959 + 960 956 955 + 956 960 961 + 961 962 956 + 956 962 957 + 957 962 963 + 963 964 957 + 958 957 964 + 955 938 960 + 960 938 944 + 944 965 960 + 961 960 965 + 965 966 961 + 967 961 966 + 962 961 967 + 938 955 968 + 629 969 630 + 970 630 969 + 631 630 970 + 970 971 631 + 539 631 971 + 972 539 971 + 532 539 972 + 969 973 970 + 974 970 973 + 971 970 974 + 974 975 971 + 971 975 976 + 976 977 971 + 971 977 972 + 978 972 977 + 979 973 969 + 973 979 980 + 980 981 973 + 973 981 974 + 974 981 982 + 982 983 974 + 975 974 983 + 969 633 979 + 984 979 633 + 980 979 984 + 984 985 980 + 980 985 986 + 986 987 980 + 981 980 987 + 987 982 981 + 633 969 988 + 633 640 984 + 989 984 640 + 984 989 990 + 990 985 984 + 985 990 991 + 991 986 985 + 640 639 989 + 989 639 992 + 992 993 989 + 990 989 993 + 993 994 990 + 991 990 994 + 994 995 991 + 996 991 995 + 986 991 996 + 645 992 639 + 992 645 997 + 997 998 992 + 992 998 999 + 999 993 992 + 994 993 999 + 999 1000 994 + 994 1000 1001 + 1001 995 994 + 997 645 644 + 644 1002 997 + 997 1002 1003 + 1003 1004 997 + 998 997 1004 + 1004 1005 998 + 998 1005 1006 + 1006 999 998 + 1000 999 1006 + 650 1002 644 + 1002 650 1007 + 1007 1003 1002 + 1003 1007 1008 + 1003 1008 1009 + 1009 1004 1003 + 1005 1004 1009 + 1009 1010 1005 + 1005 1010 1011 + 1011 1006 1005 + 1007 650 1012 + 1012 1013 1007 + 1008 1007 1013 + 1013 234 1008 + 649 1012 650 + 1012 649 1014 + 1012 1014 1015 + 1015 1013 1012 + 234 1013 1015 + 1015 779 234 + 234 779 784 + 784 1016 234 + 234 1016 1009 + 1014 649 655 + 655 671 1014 + 1015 1014 1017 + 977 1018 978 + 1018 977 976 + 976 1019 1018 + 1018 1019 1020 + 1020 1021 1018 + 1022 1018 1021 + 1019 976 1023 + 1023 1024 1019 + 1019 1024 1025 + 1026 1025 1024 + 1027 1025 1026 + 1023 976 975 + 975 1028 1023 + 1028 1029 1023 + 1030 1023 1029 + 1023 1030 1024 + 1024 1030 1026 + 983 1028 975 + 1028 983 1031 + 1031 1032 1028 + 1028 1032 1033 + 1033 1029 1028 + 1029 1033 1034 + 1029 1034 1030 + 1026 1030 1034 + 1031 983 982 + 982 1035 1031 + 1031 1035 1036 + 1036 1037 1031 + 1032 1031 1037 + 1037 1038 1032 + 1033 1032 1038 + 1038 1039 1033 + 1034 1033 1039 + 1040 1035 982 + 1035 1040 1041 + 1041 1036 1035 + 1036 1041 1042 + 1042 1043 1036 + 1036 1043 1044 + 1044 1037 1036 + 1038 1037 1044 + 982 987 1040 + 1040 987 986 + 986 1045 1040 + 1040 1045 1046 + 1046 1041 1040 + 1042 1041 1046 + 1046 1047 1042 + 1042 1047 1048 + 1048 1049 1042 + 1043 1042 1049 + 996 1045 986 + 1045 996 1050 + 1050 1046 1045 + 1046 1050 1051 + 1051 1047 1046 + 1047 1051 1052 + 1052 1048 1047 + 1053 1050 996 + 1051 1050 1053 + 1053 1054 1051 + 1051 1054 1055 + 1055 1052 1051 + 1056 1052 1055 + 1048 1052 1056 + 996 1057 1053 + 1058 1053 1057 + 1058 1054 1053 + 1054 1058 1059 + 1059 1055 1054 + 1060 1055 1059 + 1055 1060 1056 + 995 1057 996 + 1057 995 1001 + 1001 1061 1057 + 1057 1061 1058 + 1059 1058 1061 + 1061 1062 1059 + 1062 1063 1059 + 1064 1059 1063 + 1059 1064 1060 + 1061 1001 1065 + 1065 1062 1061 + 1066 1062 1065 + 1062 1066 1067 + 1067 1063 1062 + 1063 1067 1068 + 1063 1068 1064 + 1069 1064 1068 + 1060 1064 1069 + 1065 1001 1000 + 1000 1070 1065 + 1071 1065 1070 + 1065 1071 1066 + 1066 1071 1072 + 1072 1073 1066 + 1067 1066 1073 + 1073 1074 1067 + 1068 1067 1074 + 1006 1070 1000 + 1070 1006 1011 + 1011 1075 1070 + 1070 1075 1071 + 1071 1075 1076 + 1076 1072 1071 + 1077 1072 1076 + 1073 1072 1077 + 1077 1078 1073 + 1073 1078 1079 + 1079 1074 1073 + 1075 1011 1080 + 1080 1081 1075 + 1075 1081 1076 + 1081 1082 1076 + 1083 1076 1082 + 1083 1084 1076 + 1076 1084 1077 + 1085 1080 1011 + 1086 1080 1085 + 1081 1080 1086 + 1081 1086 1087 + 1087 1082 1081 + 1088 1082 1087 + 1082 1088 1083 + 1011 1010 1085 + 1089 1085 1010 + 1085 1089 1090 + 1090 1091 1085 + 1085 1091 1086 + 1086 1091 1092 + 1092 1093 1086 + 1093 1087 1086 + 1088 1087 1093 + 1010 1009 1089 + 1094 1089 1009 + 1090 1089 1094 + 1094 1095 1090 + 1090 1095 1096 + 1096 1097 1090 + 1097 1098 1090 + 1091 1090 1098 + 1098 1092 1091 + 1099 1094 1009 + 1100 1094 1099 + 1100 1095 1094 + 1095 1100 1101 + 1101 1096 1095 + 1101 1102 1096 + 1096 1102 1103 + 1103 1097 1096 + 1016 1099 1009 + 1104 1099 1016 + 1099 1104 1105 + 1099 1105 1100 + 1100 1105 1106 + 1016 1107 1104 + 1108 1104 1107 + 1105 1104 1108 + 1108 103 1105 + 1105 103 1109 + 784 1107 1016 + 1107 784 783 + 783 1110 1107 + 1107 1110 1108 + 783 789 1110 + 1110 789 1111 + 1111 1112 1110 + 1111 789 788 + 788 1113 1111 + 1114 1111 1113 + 1113 1115 1114 + 1116 1114 1115 + 1112 1114 1116 + 1116 1117 1112 + 787 1113 788 + 1115 1113 787 + 1115 787 1118 + 1118 1119 1115 + 1115 1119 1116 + 1120 1116 1119 + 1117 1116 1120 + 1117 1120 1121 + 1121 1108 1117 + 1108 1121 1122 + 1122 103 1108 + 1118 787 786 + 1123 1118 786 + 1124 1118 1123 + 1124 1119 1118 + 1119 1124 1120 + 1121 1120 1124 + 1124 1125 1121 + 1122 1121 1125 + 1125 1126 1122 + 1127 1122 1126 + 103 1122 1127 + 786 1128 1123 + 1128 1129 1123 + 1126 1123 1129 + 1126 1125 1123 + 1123 1125 1124 + 1130 1128 786 + 1130 1131 1128 + 1128 1131 1132 + 1132 1129 1128 + 1132 1133 1129 + 1129 1133 1126 + 786 817 1130 + 1134 1130 817 + 1131 1130 1134 + 1134 1135 1131 + 1132 1131 1135 + 1135 1136 1132 + 1136 1137 1132 + 1137 1138 1132 + 1133 1132 1138 + 817 1139 1134 + 1140 1134 1139 + 1135 1134 1140 + 1135 1140 1141 + 1141 1136 1135 + 816 1139 817 + 1139 816 815 + 815 826 1139 + 1139 826 1140 + 1140 826 825 + 825 1142 1140 + 1142 1143 1140 + 831 1142 825 + 1142 831 836 + 836 1144 1142 + 1142 1144 1145 + 1145 1146 1142 + 1144 836 1147 + 1147 1148 1144 + 1144 1148 1149 + 1149 1145 1144 + 841 1147 836 + 1150 1147 841 + 1148 1147 1150 + 1150 1151 1148 + 1148 1151 1152 + 1152 1149 1148 + 841 1153 1150 + 1150 1153 1154 + 1154 1155 1150 + 1151 1150 1155 + 1155 1156 1151 + 1151 1156 1157 + 1157 1152 1151 + 1153 841 840 + 840 1158 1153 + 1153 1158 1159 + 1159 1154 1153 + 1160 1154 1159 + 1154 1160 1161 + 1161 1155 1154 + 1156 1155 1161 + 1158 840 845 + 845 854 1158 + 1159 1158 854 + 854 1162 1159 + 1163 1159 1162 + 1159 1163 1160 + 1160 1163 1164 + 1164 1165 1160 + 1161 1160 1165 + 853 1162 854 + 1162 853 859 + 859 1166 1162 + 1162 1166 1163 + 1164 1163 1166 + 1166 1167 1164 + 1168 1164 1167 + 1164 1168 1169 + 1169 1165 1164 + 1166 859 1170 + 1170 1167 1166 + 1167 1170 1171 + 1171 1172 1167 + 1167 1172 1168 + 1168 1172 1173 + 1173 1174 1168 + 1169 1168 1174 + 1175 1170 859 + 1171 1170 1175 + 1175 1176 1171 + 1171 1176 1177 + 1177 1178 1171 + 1172 1171 1178 + 1178 1179 1172 + 1172 1179 1173 + 859 858 1175 + 1180 1175 858 + 1176 1175 1180 + 1176 1180 1181 + 1181 1177 1176 + 1182 1177 1181 + 1177 1182 1183 + 1183 1178 1177 + 1179 1178 1183 + 858 857 1180 + 1181 1180 857 + 1184 1181 857 + 1182 1181 1184 + 1184 1185 1182 + 1183 1182 1185 + 1185 1186 1183 + 1187 1183 1186 + 1183 1187 1179 + 1179 1187 1188 + 1188 1173 1179 + 1189 1184 857 + 1190 1184 1189 + 1190 1185 1184 + 1185 1190 1191 + 1191 1186 1185 + 1192 1186 1191 + 1186 1192 1187 + 1187 1192 1193 + 1188 1187 1193 + 857 863 1189 + 863 1194 1189 + 1195 1189 1194 + 1189 1195 1196 + 1196 1197 1189 + 1189 1197 1190 + 1191 1190 1197 + 868 1194 863 + 1194 868 1198 + 1198 1199 1194 + 1194 1199 1195 + 1200 1195 1199 + 1196 1195 1200 + 1200 1201 1196 + 1202 1196 1201 + 1197 1196 1202 + 1198 868 1203 + 1203 1204 1198 + 1205 1198 1204 + 1199 1198 1205 + 1205 1206 1199 + 1199 1206 1200 + 867 1203 868 + 1207 1203 867 + 1203 1207 1208 + 1208 1204 1203 + 1204 1208 1209 + 1209 1210 1204 + 1204 1210 1205 + 1211 1205 1210 + 1206 1205 1211 + 867 866 1207 + 1212 1207 866 + 1208 1207 1212 + 1212 1213 1208 + 1208 1213 1214 + 1214 1209 1208 + 1215 1209 1214 + 1210 1209 1215 + 1215 1216 1210 + 1210 1216 1211 + 866 1217 1212 + 1217 1218 1212 + 1218 1219 1212 + 1219 1220 1212 + 1221 1212 1220 + 1213 1212 1221 + 871 1217 866 + 1217 871 1222 + 1222 1223 1217 + 1217 1223 1224 + 1224 1218 1217 + 1218 1224 1225 + 1218 1225 1226 + 1226 1219 1218 + 1222 871 1227 + 1227 1228 1222 + 1222 1228 1229 + 1229 1230 1222 + 1223 1222 1230 + 1230 1231 1223 + 1224 1223 1231 + 870 1227 871 + 1232 1227 870 + 1227 1232 1228 + 1228 1232 1233 + 1233 1229 1228 + 1234 1229 1233 + 1229 1234 1235 + 1235 1230 1229 + 1230 1235 1236 + 1236 1231 1230 + 870 1237 1232 + 1232 1237 1238 + 1238 1233 1232 + 1239 1233 1238 + 1233 1239 1234 + 874 1237 870 + 1237 874 1240 + 1240 1238 1237 + 1241 1238 1240 + 1238 1241 1239 + 1242 1239 1241 + 1234 1239 1242 + 1242 1243 1234 + 1234 1243 1244 + 1244 1235 1234 + 1236 1235 1244 + 881 1240 874 + 1245 1240 881 + 1240 1245 1241 + 1241 1245 1246 + 1246 1247 1241 + 1241 1247 1242 + 1248 1242 1247 + 1243 1242 1248 + 881 886 1245 + 1246 1245 886 + 886 1249 1246 + 1250 1246 1249 + 1247 1246 1250 + 1250 1251 1247 + 1247 1251 1248 + 891 1249 886 + 1249 891 1252 + 1252 1253 1249 + 1249 1253 1250 + 1250 1253 1254 + 1254 1255 1250 + 1251 1250 1255 + 1255 1256 1251 + 1248 1251 1256 + 1252 891 1257 + 1257 1258 1252 + 1252 1258 1259 + 1259 1260 1252 + 1253 1252 1260 + 1260 1254 1253 + 890 1257 891 + 1261 1257 890 + 1257 1261 1258 + 1258 1261 1262 + 1262 1259 1258 + 1263 1259 1262 + 1259 1263 1264 + 1264 1260 1259 + 1260 1264 1265 + 1265 1254 1260 + 890 1266 1261 + 1261 1266 1267 + 1267 1262 1261 + 1268 1262 1267 + 1262 1268 1263 + 896 1266 890 + 1266 896 1269 + 1269 1267 1266 + 1270 1267 1269 + 1267 1270 1268 + 1271 1268 1270 + 1263 1268 1271 + 1271 1272 1263 + 1263 1272 1273 + 1273 1264 1263 + 1265 1264 1273 + 1274 1269 896 + 1275 1269 1274 + 1269 1275 1270 + 1270 1275 1276 + 1276 1277 1270 + 1270 1277 1271 + 896 900 1274 + 1278 1274 900 + 1279 1274 1278 + 1274 1279 1275 + 1276 1275 1279 + 1279 1280 1276 + 1281 1276 1280 + 1277 1276 1281 + 900 899 1278 + 1282 1278 899 + 1283 1278 1282 + 1278 1283 1279 + 1279 1283 1284 + 1284 1280 1279 + 1280 1284 1285 + 1280 1285 1281 + 899 904 1282 + 909 1282 904 + 1286 1282 909 + 1282 1286 1283 + 1283 1286 1287 + 1284 1283 1287 + 1287 1288 1284 + 1285 1284 1288 + 1288 1289 1285 + 1285 1289 1290 + 1281 1285 1290 + 909 1291 1286 + 1286 1291 1292 + 1292 1287 1286 + 1293 1287 1292 + 1287 1293 1294 + 1294 1288 1287 + 1294 1289 1288 + 1289 1294 1295 + 1295 1290 1289 + 1291 909 1296 + 1296 1297 1291 + 1292 1291 1297 + 1297 1298 1292 + 1298 1299 1292 + 1293 1292 1299 + 908 1296 909 + 1300 1296 908 + 1296 1300 1301 + 908 914 1300 + 1302 1300 914 + 1303 1300 1302 + 1302 132 1303 + 1304 132 1302 + 132 1304 1305 + 1305 1306 132 + 914 1307 1302 + 1308 1302 1307 + 1302 1308 1304 + 1304 1308 1309 + 1309 1310 1304 + 1304 1310 1311 + 918 1307 914 + 959 1307 918 + 1307 959 1308 + 1308 959 958 + 958 1309 1308 + 964 1309 958 + 1309 964 1310 + 1310 964 963 + 963 1312 1310 + 1310 1312 1313 + 963 1314 1312 + 1312 1314 1315 + 1315 1316 1312 + 1312 1316 1311 + 1317 1311 1316 + 1314 963 1318 + 1318 1319 1314 + 1314 1319 1320 + 1320 1315 1314 + 1321 1315 1320 + 1316 1315 1321 + 1321 1322 1316 + 1316 1322 1317 + 962 1318 963 + 967 1318 962 + 1318 967 1323 + 1323 1319 1318 + 1319 1323 1324 + 1324 1320 1319 + 1320 1324 1325 + 1325 1326 1320 + 1320 1326 1321 + 1327 1321 1326 + 1322 1321 1327 + 1323 967 1328 + 1328 1329 1323 + 1324 1323 1329 + 1329 1330 1324 + 1325 1324 1330 + 1330 1331 1325 + 1332 1325 1331 + 1326 1325 1332 + 966 1328 967 + 1333 1328 966 + 1328 1333 1334 + 1334 1329 1328 + 1329 1334 1335 + 1335 1330 1329 + 1330 1335 1336 + 1336 1331 1330 + 966 1337 1333 + 1333 1337 1338 + 1338 1339 1333 + 1334 1333 1339 + 1339 1340 1334 + 1335 1334 1340 + 1340 1341 1335 + 1336 1335 1341 + 1337 966 965 + 965 1342 1337 + 1337 1342 1343 + 1343 1338 1337 + 1343 1344 1338 + 1338 1344 1345 + 1345 1339 1338 + 1340 1339 1345 + 1342 965 944 + 944 943 1342 + 1342 943 1346 + 1346 1343 1342 + 1344 1343 1346 + 1346 1347 1344 + 1345 1344 1347 + 1348 1345 1347 + 1349 1345 1348 + 1345 1349 1340 + 1340 1349 1350 + 1350 1341 1340 + 1351 1346 943 + 1347 1346 1351 + 1351 1352 1347 + 1347 1352 1353 + 1353 1354 1347 + 1347 1354 1348 + 943 942 1351 + 949 1351 942 + 1352 1351 949 + 949 1355 1352 + 1355 1353 1352 + 1356 1353 1355 + 1353 1356 1357 + 1357 1354 1353 + 1354 1357 1358 + 1358 1348 1354 + 1359 1355 949 + 1355 1359 1356 + 1356 1359 1360 + 1360 1361 1356 + 1357 1356 1361 + 1361 1362 1357 + 1358 1357 1362 + 949 948 1359 + 1359 948 1363 + 1363 1364 1359 + 1359 1364 1360 + 1363 948 947 + 947 1365 1363 + 1366 1363 1365 + 1364 1363 1366 + 1366 1367 1364 + 1364 1367 1368 + 1368 1360 1364 + 946 1365 947 + 1369 1365 946 + 1365 1369 1366 + 1366 1369 1370 + 1370 1371 1366 + 1367 1366 1371 + 1371 1372 1367 + 1368 1367 1372 + 946 1373 1369 + 1369 1373 1374 + 1374 1370 1369 + 1374 1375 1370 + 1370 1375 1376 + 1376 1371 1370 + 1372 1371 1376 + 1373 946 1377 + 1377 1378 1373 + 1373 1378 1379 + 1379 1380 1373 + 1380 1374 1373 + 945 1377 946 + 1381 1377 945 + 1378 1377 1381 + 1381 1382 1378 + 1378 1382 1383 + 1383 1379 1378 + 945 1384 1381 + 1381 1384 1385 + 1385 1386 1381 + 1382 1381 1386 + 1386 1387 1382 + 1382 1387 1388 + 1388 1389 1382 + 1389 1390 1382 + 1391 1386 1385 + 1386 1391 1392 + 1392 1387 1386 + 1387 1392 1393 + 1393 1388 1387 + 1388 1393 1394 + 1388 1394 1395 + 1395 1389 1388 + 1385 1396 1391 + 1391 1396 760 + 760 1397 1391 + 1392 1391 1397 + 1397 1398 1392 + 1392 1398 1399 + 1393 1392 1399 + 1399 1400 1393 + 1394 1393 1400 + 1400 1401 1394 + 1395 1394 1401 + 1402 1397 760 + 1398 1397 1402 + 1402 1403 1398 + 1398 1403 1404 + 1404 1405 1398 + 1398 1405 1399 + 760 1406 1402 + 1406 1407 1402 + 1403 1402 1407 + 1407 1408 1403 + 1403 1408 1409 + 1406 760 1410 + 1410 1411 1406 + 1406 1411 1412 + 1412 1407 1406 + 1407 1412 1408 + 1408 1412 1413 + 1413 1414 1408 + 1408 1414 1415 + 1410 760 1416 + 1416 1417 1410 + 1410 1417 1418 + 1418 1419 1410 + 1411 1410 1419 + 1419 1413 1411 + 1411 1413 1412 + 759 1416 760 + 111 1416 759 + 1417 1416 111 + 111 1420 1417 + 1417 1420 1421 + 1421 1418 1417 + 759 1422 111 + 1404 1403 1423 + 1424 1383 1382 + 1127 1425 103 + 1426 1101 1100 + 20 1421 1420 + 1420 111 20 + 20 111 1427 + 1375 1374 1428 + 1428 1429 1375 + 1375 1429 1430 + 1430 1376 1375 + 1431 1376 1430 + 1376 1431 1372 + 1432 1429 1428 + 1429 1432 1433 + 1433 1434 1429 + 1429 1434 1430 + 1432 1428 1435 + 1435 1436 1432 + 1432 1436 1437 + 1433 1432 1437 + 1438 1433 1437 + 1439 1433 1438 + 1433 1439 1434 + 1434 1439 1440 + 1440 1430 1434 + 1436 1435 1441 + 1436 1441 1390 + 1390 1442 1436 + 1436 1442 1437 + 1442 1390 1443 + 1442 1443 1444 + 1444 1445 1442 + 1442 1445 1437 + 1443 1390 1389 + 1389 1446 1443 + 1444 1443 1446 + 1447 1444 1446 + 1448 1444 1447 + 1445 1444 1448 + 1445 1448 1449 + 1449 1450 1445 + 1445 1450 1437 + 1446 1389 1395 + 1446 1395 1451 + 1451 1452 1446 + 1446 1452 1453 + 1453 1447 1446 + 1454 1447 1453 + 1455 1447 1454 + 1447 1455 1448 + 1448 1455 1456 + 1451 1395 1401 + 1457 1451 1401 + 1458 1451 1457 + 1458 1452 1451 + 1452 1458 1459 + 1459 1453 1452 + 1460 1453 1459 + 1453 1460 1454 + 1461 1457 1401 + 1462 1457 1461 + 1463 1457 1462 + 1457 1463 1458 + 1458 1463 1464 + 1464 1465 1458 + 1465 1459 1458 + 1466 1461 1401 + 1467 1461 1466 + 1468 1461 1467 + 1461 1468 1462 + 1469 1462 1468 + 1463 1462 1469 + 1469 1464 1463 + 1401 1470 1466 + 1471 1466 1470 + 1466 1471 1472 + 1466 1472 1467 + 1473 1467 1472 + 1468 1467 1473 + 1473 1474 1468 + 1468 1474 1469 + 1475 1470 1401 + 1470 1475 1476 + 1470 1476 1471 + 1477 1471 1476 + 1472 1471 1477 + 1477 1478 1472 + 1472 1478 1479 + 1479 1473 1472 + 1401 1480 1475 + 1475 1480 1481 + 1482 1475 1481 + 1476 1475 1482 + 1401 1400 1480 + 1480 1400 1399 + 1399 1483 1480 + 1480 1483 1481 + 1483 1399 1484 + 1484 1485 1483 + 1483 1485 1486 + 1486 1481 1483 + 1484 1399 1405 + 1405 1487 1484 + 1484 1487 1488 + 1487 1405 1404 + 1404 1489 1487 + 1487 1489 1490 + 1490 1491 1487 + 1487 1491 1492 + 1489 1404 1493 + 1493 1494 1489 + 1490 1489 1494 + 1494 1495 1490 + 155 1490 1495 + 1491 1490 155 + 155 1427 1491 + 1496 1493 1404 + 1449 1448 1497 + 1495 1498 155 + 1498 1495 1499 + 1499 1500 1498 + 1498 1500 1501 + 1501 156 1498 + 1499 1495 1494 + 1494 1502 1499 + 1503 1499 1502 + 1500 1499 1503 + 1503 1504 1500 + 1504 1501 1500 + 1505 1501 1504 + 156 1501 1505 + 1505 1506 156 + 156 1506 1427 + 1493 1502 1494 + 1502 1493 1507 + 1507 1503 1502 + 1504 1503 1508 + 1455 1509 1456 + 1510 1509 1455 + 1455 1454 1510 + 1511 1510 1454 + 1454 1460 1511 + 1512 1511 1460 + 1460 1513 1512 + 1512 1513 1514 + 1459 1513 1460 + 1513 1459 1465 + 1465 1514 1513 + 1514 1465 1515 + 1514 1515 1516 + 1516 1517 1514 + 1514 1517 1518 + 1515 1465 1464 + 1464 1519 1515 + 1515 1519 1520 + 1520 1521 1515 + 1521 1516 1515 + 1522 1516 1521 + 1516 1522 1523 + 1523 1517 1516 + 1519 1464 1469 + 1519 1469 1474 + 1474 1524 1519 + 1519 1524 1520 + 1474 1473 1524 + 1524 1473 1479 + 1479 1525 1524 + 1524 1525 1520 + 1525 1526 1520 + 1527 1520 1526 + 1520 1527 1528 + 1520 1528 1529 + 1529 1521 1520 + 1525 1479 1530 + 1525 1530 1531 + 1531 1526 1525 + 1532 1526 1531 + 1526 1532 1527 + 1527 1532 1533 + 1533 1534 1527 + 1528 1527 1534 + 1530 1479 1478 + 1478 1535 1530 + 1530 1535 1536 + 1537 1536 1535 + 1535 1538 1537 + 1537 1538 1539 + 1539 1540 1537 + 1535 1478 1477 + 1477 1538 1535 + 1538 1477 1541 + 1541 1539 1538 + 1539 1541 1542 + 1539 1542 1543 + 1543 1540 1539 + 1541 1477 1476 + 1544 1541 1476 + 1542 1541 1544 + 1544 1545 1542 + 1542 1545 1546 + 1546 1543 1542 + 1476 1547 1544 + 1548 1544 1547 + 1545 1544 1548 + 1545 1548 1549 + 1549 1550 1545 + 1545 1550 1551 + 1550 1552 1551 + 1482 1547 1476 + 1547 1482 1553 + 1547 1553 1548 + 1548 1553 1554 + 1554 1549 1548 + 1555 1549 1554 + 1555 1550 1549 + 1550 1555 1556 + 1556 1557 1550 + 1553 1482 1558 + 1558 1559 1553 + 1553 1559 1554 + 1558 1560 1559 + 1559 1560 1561 + 1561 1562 1559 + 1559 1562 1554 + 1561 1563 1562 + 1562 1563 1564 + 1564 1565 1562 + 1562 1565 1554 + 1563 1561 1566 + 1566 1567 1563 + 1563 1567 1568 + 1568 1564 1563 + 1569 1564 1568 + 1564 1569 1565 + 1565 1569 1570 + 1570 1571 1565 + 1565 1571 1554 + 1572 1567 1566 + 1567 1572 1573 + 1573 1574 1567 + 1567 1574 1568 + 1575 1568 1574 + 1576 1568 1575 + 1568 1576 1569 + 1572 1566 1577 + 1577 1578 1572 + 1572 1578 1579 + 1579 1573 1572 + 1580 1573 1579 + 1573 1580 1581 + 1581 1574 1573 + 1574 1581 1575 + 1577 1566 1582 + 1582 1583 1577 + 1583 1584 1577 + 1585 1577 1584 + 1577 1585 1586 + 1586 1578 1577 + 1578 1586 1587 + 1587 1579 1578 + 1588 1579 1587 + 1579 1588 1580 + 1481 1584 1583 + 1589 1584 1481 + 1584 1589 1585 + 1585 1589 1590 + 1590 1591 1585 + 1586 1585 1591 + 1591 1592 1586 + 1587 1586 1592 + 1583 1593 1481 + 1481 1593 1594 + 1595 1531 1530 + 1596 1590 1589 + 1589 1486 1596 + 1481 1486 1589 + 1597 1556 1555 + 1555 1598 1597 + 1598 1599 1597 + 1600 1599 1598 + 1598 1601 1600 + 1602 1600 1601 + 1554 1598 1555 + 1601 1598 1554 + 1601 1554 1603 + 1603 1604 1601 + 1601 1604 1602 + 1571 1603 1554 + 1605 1603 1571 + 1605 1604 1603 + 1604 1605 1606 + 1606 1607 1604 + 1604 1607 1602 + 1571 1608 1605 + 1605 1608 1609 + 1606 1605 1609 + 1610 1606 1609 + 1611 1606 1610 + 1607 1606 1611 + 1570 1608 1571 + 1608 1570 1612 + 1612 1609 1608 + 1609 1612 1613 + 1613 1614 1609 + 1609 1614 1615 + 1615 1616 1609 + 1609 1616 1610 + 1617 1612 1570 + 1613 1612 1617 + 1617 1618 1613 + 1619 1613 1618 + 1614 1613 1619 + 1619 1620 1614 + 1615 1614 1620 + 1570 1569 1617 + 1569 1576 1617 + 1621 1617 1576 + 1617 1621 1618 + 1618 1621 1622 + 1622 1623 1618 + 1618 1623 1619 + 1624 1619 1623 + 1620 1619 1624 + 1576 1625 1621 + 1621 1625 1626 + 1626 1627 1621 + 1627 1622 1621 + 1628 1622 1627 + 1623 1622 1628 + 1628 1629 1623 + 1623 1629 1624 + 1575 1625 1576 + 1625 1575 1630 + 1630 1626 1625 + 1626 1630 1631 + 1631 1632 1626 + 1626 1632 1633 + 1633 1627 1626 + 1633 1634 1627 + 1627 1634 1628 + 1630 1575 1581 + 1581 1635 1630 + 1631 1630 1635 + 1635 1636 1631 + 1637 1631 1636 + 1632 1631 1637 + 1637 1638 1632 + 1632 1638 1639 + 1639 1633 1632 + 1634 1633 1639 + 1640 1635 1581 + 1635 1640 1641 + 1641 1636 1635 + 1636 1641 1642 + 1642 1643 1636 + 1636 1643 1637 + 1644 1637 1643 + 1638 1637 1644 + 1581 1580 1640 + 1645 1640 1580 + 1641 1640 1645 + 1645 1646 1641 + 1641 1646 1647 + 1647 1642 1641 + 1648 1642 1647 + 1580 1588 1645 + 1649 1645 1588 + 1645 1649 1650 + 1650 1646 1645 + 1646 1650 1651 + 1651 1647 1646 + 1647 1651 1652 + 1652 1653 1647 + 1647 1653 1648 + 1588 1654 1649 + 1649 1654 1655 + 1655 1656 1649 + 1656 1657 1649 + 1650 1649 1657 + 1657 1658 1650 + 1651 1650 1658 + 1587 1654 1588 + 1654 1587 1659 + 1659 1655 1654 + 1660 1655 1659 + 1655 1660 1661 + 1661 1656 1655 + 1592 1659 1587 + 1662 1659 1592 + 1659 1662 1660 + 1660 1662 1663 + 1663 1664 1660 + 1660 1664 1661 + 1665 1661 1664 + 1656 1661 1665 + 1592 1666 1662 + 1662 1666 1667 + 1667 1663 1662 + 1668 1663 1667 + 1664 1663 1668 + 1668 1669 1664 + 1664 1669 1665 + 1670 1666 1592 + 1666 1670 1671 + 1671 1667 1666 + 1667 1671 1672 + 1672 1673 1667 + 1667 1673 1668 + 1592 1591 1670 + 1670 1591 1590 + 1590 1674 1670 + 1670 1674 1675 + 1675 1671 1670 + 1672 1671 1675 + 1675 1676 1672 + 1672 1676 1677 + 1677 1678 1672 + 1673 1672 1678 + 1679 1674 1590 + 1674 1679 1680 + 1680 1675 1674 + 1675 1680 1681 + 1681 1676 1675 + 1676 1681 1682 + 1682 1677 1676 + 1590 1683 1679 + 1332 1684 1326 + 1326 1684 1327 + 1685 1327 1684 + 1686 1327 1685 + 1327 1686 1322 + 1317 1322 1686 + 1686 1687 1317 + 1688 1687 1686 + 1684 1689 1685 + 1690 1685 1689 + 1691 1685 1690 + 1685 1691 1686 + 1686 1691 1688 + 1688 1691 1692 + 1693 1689 1684 + 1691 1694 1692 + 1694 1695 1692 + 1696 1692 1695 + 1697 1692 1696 + 1692 1697 1698 + 1698 1699 1692 + 1698 1700 1699 + 1695 1701 1696 + 1702 1696 1701 + 1697 1696 1702 + 1702 1703 1697 + 1697 1703 1704 + 1704 1698 1697 + 1700 1698 1704 + 1704 1705 1700 + 1706 1705 1704 + 1701 1695 1707 + 1707 1695 1708 + 1708 1709 1707 + 1690 1710 1691 + 1710 1690 1711 + 1711 1690 1712 + 1712 1713 1711 + 1714 1711 1713 + 1715 1711 1714 + 1711 1715 1716 + 1717 1712 1690 + 1718 1712 1717 + 1712 1718 1719 + 1719 1713 1712 + 1713 1719 1720 + 1720 1721 1713 + 1713 1721 1714 + 1717 1722 1718 + 1718 1722 1723 + 1723 1724 1718 + 1719 1718 1724 + 1724 1725 1719 + 1720 1719 1725 + 1725 1726 1720 + 1727 1720 1726 + 1721 1720 1727 + 1728 1723 1722 + 1729 1723 1728 + 1723 1729 1730 + 1730 1724 1723 + 1724 1730 1731 + 1731 1725 1724 + 1725 1731 1732 + 1732 1726 1725 + 1722 1332 1728 + 1331 1728 1332 + 1733 1728 1331 + 1728 1733 1729 + 1729 1733 1734 + 1734 1735 1729 + 1730 1729 1735 + 1736 1332 1722 + 1331 1336 1733 + 1734 1733 1336 + 1336 1737 1734 + 1738 1734 1737 + 1738 1735 1734 + 1735 1738 1739 + 1739 1740 1735 + 1735 1740 1730 + 1731 1730 1740 + 1740 1741 1731 + 1732 1731 1741 + 1341 1737 1336 + 1737 1341 1350 + 1350 1742 1737 + 1737 1742 1738 + 1738 1742 1743 + 1743 1744 1738 + 1745 1744 1743 + 1744 1745 1746 + 1742 1350 1747 + 1747 1743 1742 + 1748 1743 1747 + 1743 1748 1745 + 1745 1748 1749 + 1749 1750 1745 + 1746 1745 1750 + 1750 1751 1746 + 1747 1350 1349 + 1349 1752 1747 + 1753 1747 1752 + 1747 1753 1748 + 1748 1753 1754 + 1754 1749 1748 + 1755 1749 1754 + 1749 1755 1756 + 1756 1750 1749 + 1348 1752 1349 + 1757 1752 1348 + 1752 1757 1753 + 1753 1757 1758 + 1758 1754 1753 + 1759 1754 1758 + 1754 1759 1755 + 1755 1759 1760 + 1760 1761 1755 + 1756 1755 1761 + 1348 1358 1757 + 1757 1358 1762 + 1762 1758 1757 + 1763 1758 1762 + 1758 1763 1759 + 1759 1763 1764 + 1764 1760 1759 + 1765 1760 1764 + 1760 1765 1766 + 1766 1761 1760 + 1362 1762 1358 + 1767 1762 1362 + 1762 1767 1763 + 1763 1767 1768 + 1768 1764 1763 + 1769 1764 1768 + 1764 1769 1765 + 1765 1769 1770 + 1770 1771 1765 + 1766 1765 1771 + 1362 1772 1767 + 1767 1772 1773 + 1773 1768 1767 + 1774 1768 1773 + 1768 1774 1769 + 1769 1774 1775 + 1775 1770 1769 + 1772 1362 1361 + 1361 1776 1772 + 1772 1776 1777 + 1777 1773 1772 + 1778 1773 1777 + 1773 1778 1774 + 1774 1778 1779 + 1779 1775 1774 + 1776 1361 1360 + 1360 1780 1776 + 1776 1780 1781 + 1781 1777 1776 + 1782 1777 1781 + 1777 1782 1778 + 1778 1782 1783 + 1783 1779 1778 + 1784 1780 1360 + 1780 1784 1785 + 1785 1781 1780 + 1781 1785 1786 + 1786 1787 1781 + 1781 1787 1782 + 1782 1787 1788 + 1788 1783 1782 + 1360 1368 1784 + 1784 1368 1789 + 1789 1790 1784 + 1785 1784 1790 + 1790 1791 1785 + 1786 1785 1791 + 1372 1789 1368 + 1792 1789 1372 + 1789 1792 1793 + 1793 1790 1789 + 1790 1793 1794 + 1794 1791 1790 + 1795 1791 1794 + 1791 1795 1786 + 1372 1431 1792 + 1796 1792 1431 + 1793 1792 1796 + 1796 1797 1793 + 1793 1797 1798 + 1798 1794 1793 + 1799 1794 1798 + 1794 1799 1795 + 1795 1799 1800 + 1800 1801 1795 + 1431 1802 1796 + 1803 1796 1802 + 1796 1803 1804 + 1804 1797 1796 + 1797 1804 1805 + 1805 1798 1797 + 1430 1802 1431 + 1806 1802 1430 + 1802 1806 1803 + 1803 1806 1807 + 1808 1803 1807 + 1804 1803 1808 + 1808 1809 1804 + 1804 1809 1810 + 1805 1804 1810 + 1430 1440 1806 + 1806 1440 1811 + 1811 1807 1806 + 1812 1807 1811 + 1807 1812 1813 + 1813 1814 1807 + 1807 1814 1808 + 1815 1808 1814 + 1808 1815 1809 + 1811 1440 1439 + 1439 1816 1811 + 1816 1817 1811 + 1812 1811 1817 + 1817 1818 1812 + 1812 1818 1819 + 1819 1813 1812 + 1820 1813 1819 + 1814 1813 1820 + 1438 1816 1439 + 1438 1821 1816 + 1816 1821 1822 + 1822 1817 1816 + 1817 1822 1823 + 1823 1818 1817 + 1818 1823 1824 + 1824 1819 1818 + 1821 1438 1825 + 1825 1826 1821 + 1822 1821 1826 + 1826 1827 1822 + 1827 1828 1822 + 1828 1829 1822 + 1823 1822 1829 + 1437 1825 1438 + 1830 1825 1437 + 1825 1830 1826 + 1826 1830 1831 + 1831 1827 1826 + 1832 1827 1831 + 1827 1832 1833 + 1833 1828 1827 + 1437 1834 1830 + 1830 1834 1835 + 1831 1830 1835 + 1836 1831 1835 + 1832 1831 1836 + 1836 1837 1832 + 1832 1837 1838 + 1833 1832 1838 + 1437 1839 1834 + 1834 1839 1840 + 1840 1841 1834 + 1834 1841 1835 + 1839 1437 1450 + 1450 1842 1839 + 1839 1842 1843 + 1843 1840 1839 + 1450 1449 1842 + 1842 1449 1844 + 1844 1845 1842 + 1842 1845 1843 + 1846 1844 1449 + 1456 1846 1449 + 1838 1847 1833 + 1848 1833 1847 + 1848 1828 1833 + 1828 1848 1849 + 1849 1829 1828 + 1849 1850 1829 + 1829 1850 1823 + 1847 1851 1848 + 1849 1848 1851 + 1852 1849 1851 + 1850 1849 1852 + 1852 1853 1850 + 1850 1853 1824 + 1824 1823 1850 + 1854 1852 1851 + 1855 1852 1854 + 1852 1855 1853 + 1853 1855 1856 + 1856 1824 1853 + 1819 1824 1856 + 1856 1857 1819 + 1819 1857 1820 + 1858 1854 1851 + 1859 1854 1858 + 1859 1860 1854 + 1854 1860 1855 + 1855 1860 1861 + 1861 1856 1855 + 1857 1856 1861 + 1861 1862 1857 + 1857 1862 1863 + 1820 1857 1863 + 1858 1864 1859 + 1865 1859 1864 + 1860 1859 1865 + 1865 1866 1860 + 1860 1866 1861 + 1866 1867 1861 + 1868 1861 1867 + 1868 1862 1861 + 1864 1869 1865 + 1869 1870 1865 + 1871 1865 1870 + 1871 1866 1865 + 1866 1871 1872 + 1872 1867 1866 + 1872 1873 1867 + 1867 1873 1868 + 1868 1873 1874 + 1875 1868 1874 + 1862 1868 1875 + 1870 1876 1871 + 1872 1871 1876 + 1877 1872 1876 + 1873 1872 1877 + 1877 1878 1873 + 1873 1878 1874 + 1879 1877 1876 + 1880 1877 1879 + 1880 1878 1877 + 1878 1880 1881 + 1881 1882 1878 + 1878 1882 1874 + 1876 1883 1879 + 1883 1884 1879 + 1884 1885 1879 + 1885 1886 1879 + 1887 1879 1886 + 1879 1887 1888 + 1879 1888 1880 + 1883 1876 1889 + 1890 1883 1889 + 1890 1891 1883 + 1892 1883 1891 + 1893 1892 1891 + 1893 1894 1892 + 1895 1889 1876 + 1889 1895 1896 + 1896 1897 1889 + 1889 1897 1898 + 1898 1890 1889 + 1891 1890 1898 + 1898 1899 1891 + 1893 1891 1899 + 1900 1895 1876 + 1895 1900 1901 + 1901 1902 1895 + 1896 1895 1902 + 1902 1903 1896 + 1904 1896 1903 + 1904 1897 1896 + 1897 1904 1905 + 1905 1898 1897 + 1905 1899 1898 + 1906 1902 1901 + 1902 1906 1907 + 1907 1903 1902 + 1908 1903 1907 + 1903 1908 1904 + 1904 1908 1909 + 1905 1904 1909 + 1910 1905 1909 + 1899 1905 1910 + 1906 1901 1911 + 1911 1912 1906 + 1907 1906 1912 + 1912 1913 1907 + 1913 1914 1907 + 1908 1907 1914 + 1914 1915 1908 + 1908 1915 1909 + 1858 1912 1911 + 1912 1858 1916 + 1916 1913 1912 + 1917 1913 1916 + 1913 1917 1918 + 1918 1914 1913 + 1915 1914 1918 + 1915 1918 1919 + 1919 1920 1915 + 1915 1920 1909 + 1921 1916 1858 + 1917 1916 1921 + 1921 1922 1917 + 1918 1917 1922 + 1922 1923 1918 + 1923 1924 1918 + 1924 1919 1918 + 1925 1919 1924 + 1920 1919 1925 + 1926 1921 1858 + 1927 1921 1926 + 1927 1922 1921 + 1922 1927 1928 + 1928 1923 1922 + 1929 1923 1928 + 1923 1929 1930 + 1930 1924 1923 + 1931 1926 1858 + 1932 1926 1931 + 1932 1933 1926 + 1926 1933 1927 + 1927 1933 1934 + 1928 1927 1934 + 1929 1928 1934 + 1931 1935 1932 + 1936 1932 1935 + 1933 1932 1936 + 1936 1934 1933 + 1937 1934 1936 + 1934 1937 1929 + 1929 1937 1938 + 1938 1939 1929 + 1939 1930 1929 + 1935 1931 1940 + 1940 1941 1935 + 1935 1941 1942 + 1942 1943 1935 + 1935 1943 1936 + 1937 1936 1943 + 1943 1944 1937 + 1937 1944 1938 + 1941 1940 1945 + 1945 1946 1941 + 1942 1941 1946 + 1946 1947 1942 + 1944 1942 1947 + 1944 1943 1942 + 1948 1946 1945 + 1946 1948 1949 + 1949 1947 1946 + 1950 1947 1949 + 1947 1950 1944 + 1944 1950 1938 + 1948 1945 1951 + 1951 1952 1948 + 1949 1948 1952 + 1952 1953 1949 + 1950 1949 1953 + 1953 1954 1950 + 1950 1954 1938 + 1952 1951 1836 + 1836 1955 1952 + 1952 1955 1956 + 1956 1953 1952 + 1954 1953 1956 + 1954 1956 1957 + 1957 1958 1954 + 1954 1958 1938 + 1955 1836 1959 + 1959 1960 1955 + 1956 1955 1960 + 1960 1957 1956 + 1961 1957 1960 + 1958 1957 1961 + 1958 1961 1962 + 1962 1963 1958 + 1958 1963 1938 + 1964 1959 1836 + 1965 1959 1964 + 1959 1965 1960 + 1960 1965 1961 + 1961 1965 1962 + 1965 1966 1962 + 1967 1962 1966 + 1963 1962 1967 + 1968 1964 1836 + 1969 1964 1968 + 1964 1969 1966 + 1964 1966 1965 + 1970 1968 1836 + 1971 1968 1970 + 1968 1971 1972 + 1968 1972 1969 + 1969 1972 1973 + 1967 1969 1973 + 1966 1969 1967 + 1835 1970 1836 + 1974 1970 1835 + 1970 1974 1975 + 1970 1975 1971 + 1971 1975 1976 + 1976 1977 1971 + 1972 1971 1977 + 1977 1973 1972 + 1835 1978 1974 + 1979 1974 1978 + 1975 1974 1979 + 1979 1980 1975 + 1975 1980 1976 + 1981 1978 1835 + 1978 1981 1982 + 1982 1983 1978 + 1978 1983 1979 + 1984 1979 1983 + 1984 1980 1979 + 1980 1984 1985 + 1985 1976 1980 + 1981 1835 1986 + 1986 1987 1981 + 1982 1981 1987 + 1987 1988 1982 + 1988 1989 1982 + 1990 1982 1989 + 1990 1983 1982 + 1983 1990 1984 + 1991 1987 1986 + 1987 1991 1992 + 1992 1988 1987 + 1992 1993 1988 + 1988 1993 1994 + 1994 1989 1988 + 1995 1989 1994 + 1989 1995 1990 + 1990 1995 1996 + 1984 1990 1996 + 1996 1997 1984 + 1997 1985 1984 + 1993 1992 1998 + 1998 1999 1993 + 1994 1993 1999 + 1999 2000 1994 + 2000 2001 1994 + 1995 1994 2001 + 2001 2002 1995 + 1995 2002 1996 + 1998 2003 1999 + 1999 2003 1846 + 1846 2000 1999 + 1846 2004 2000 + 2000 2004 2005 + 2005 2001 2000 + 2002 2001 2005 + 2002 2005 2006 + 2006 2007 2002 + 2002 2007 1996 + 2004 1846 2008 + 2008 2009 2004 + 2004 2009 2010 + 2005 2004 2010 + 2010 2006 2005 + 2011 2006 2010 + 2007 2006 2011 + 2007 2011 2012 + 2012 2013 2007 + 2007 2013 1996 + 2014 2009 2008 + 2009 2014 2015 + 2015 2010 2009 + 2015 2016 2010 + 2010 2016 2011 + 2011 2016 2017 + 2017 2012 2011 + 2018 2012 2017 + 2013 2012 2018 + 2019 2015 2014 + 2016 2015 2019 + 2019 2020 2016 + 2016 2020 2017 + 2021 2017 2020 + 2021 2022 2017 + 2017 2022 2018 + 2014 2023 2019 + 2024 2019 2023 + 2024 2020 2019 + 2020 2024 2021 + 2025 2023 2014 + 2026 2023 2025 + 2023 2026 2024 + 2024 2026 2027 + 2021 2024 2027 + 2014 2028 2025 + 2025 2028 2029 + 2029 2030 2025 + 2026 2025 2030 + 2030 2027 2026 + 2028 2014 2031 + 1881 1880 1888 + 2032 1881 1888 + 2033 1881 2032 + 2033 1882 1881 + 1882 2033 2034 + 2034 1874 1882 + 1888 2035 2032 + 2035 2036 2032 + 2036 2037 2032 + 2038 2032 2037 + 2032 2038 2039 + 2039 2040 2032 + 2032 2040 2033 + 2041 2035 1888 + 2041 2042 2035 + 2043 2035 2042 + 2044 2043 2042 + 2044 2045 2043 + 1888 1887 2041 + 2046 2041 1887 + 2042 2041 2046 + 2046 2047 2042 + 2042 2047 2048 + 2048 2044 2042 + 2045 2044 2048 + 2048 2049 2045 + 2050 2045 2049 + 2036 2045 2050 + 2050 2037 2036 + 1887 2051 2046 + 2051 2052 2046 + 2053 2046 2052 + 2053 2047 2046 + 2047 2053 2054 + 2054 2048 2047 + 2054 2049 2048 + 1886 2051 1887 + 2055 2051 1886 + 2051 2055 2056 + 2056 2052 2051 + 2057 2052 2056 + 2052 2057 2053 + 2053 2057 2058 + 2054 2053 2058 + 2059 2054 2058 + 2049 2054 2059 + 2055 1886 1885 + 1885 2060 2055 + 2056 2055 2060 + 2060 2061 2056 + 2057 2056 2061 + 2061 2062 2057 + 2057 2062 2058 + 2063 2060 1885 + 2060 2063 2064 + 2064 2061 2060 + 2062 2061 2064 + 2062 2064 2065 + 2065 2066 2062 + 2062 2066 2058 + 2063 1885 1884 + 1884 2067 2063 + 2063 2067 2068 + 2064 2063 2068 + 2068 2069 2064 + 2069 2065 2064 + 2070 2065 2069 + 2066 2065 2070 + 2066 2070 2071 + 2071 2072 2066 + 2066 2072 2058 + 2073 2068 2067 + 1910 2068 2073 + 2068 1910 2074 + 2074 2069 2068 + 2074 2075 2069 + 2069 2075 2070 + 2067 1893 2073 + 2073 1893 1899 + 1910 2073 1899 + 2074 1910 1909 + 1909 2076 2074 + 2076 2077 2074 + 2075 2074 2077 + 2077 2078 2075 + 2070 2075 2078 + 2078 2079 2070 + 2079 2080 2070 + 2080 2071 2070 + 2081 2076 1909 + 2076 2081 2082 + 2076 2082 2083 + 2083 2077 2076 + 2077 2083 2078 + 2078 2083 2084 + 2084 2079 2078 + 1909 2085 2081 + 2086 2081 2085 + 2082 2081 2086 + 2086 2087 2082 + 2082 2087 2088 + 2088 2084 2082 + 2084 2083 2082 + 1909 2089 2085 + 2085 2089 2090 + 2090 2091 2085 + 2085 2091 2086 + 2092 2086 2091 + 2091 2093 2092 + 2089 1909 2094 + 2094 2095 2089 + 2089 2095 2096 + 2096 2090 2089 + 2097 2090 2096 + 1920 2094 1909 + 2098 2094 1920 + 2094 2098 2095 + 2095 2098 2099 + 2099 2096 2095 + 2096 2099 2100 + 2100 2101 2096 + 2096 2101 2097 + 1920 1925 2098 + 2099 2098 1925 + 2102 2099 1925 + 2100 2099 2102 + 2102 2103 2100 + 2103 2104 2100 + 2091 2090 144 + 2034 2033 2040 + 2105 2034 2040 + 2106 2034 2105 + 1874 2034 2106 + 1874 2106 2107 + 2107 2108 1874 + 1874 2108 1875 + 2109 2105 2040 + 2110 2105 2109 + 2105 2110 2111 + 2105 2111 2106 + 2107 2106 2111 + 2111 2112 2107 + 2113 2107 2112 + 2108 2107 2113 + 2114 2109 2040 + 2115 2109 2114 + 2109 2115 2116 + 2109 2116 2110 + 2110 2116 2117 + 2118 2110 2117 + 2111 2110 2118 + 2118 2112 2111 + 2119 2114 2040 + 2120 2114 2119 + 2121 2114 2120 + 2114 2121 2115 + 2115 2121 2122 + 2122 2123 2115 + 2116 2115 2123 + 2123 2117 2116 + 2119 2124 2120 + 2125 2120 2124 + 2121 2120 2125 + 2125 2126 2121 + 2121 2126 2122 + 2127 2122 2126 + 2128 2122 2127 + 2122 2128 2129 + 2129 2123 2122 + 2130 2125 2124 + 2131 2125 2130 + 2131 2126 2125 + 2126 2131 2127 + 2132 2127 2131 + 2133 2127 2132 + 2127 2133 2128 + 2124 2134 2130 + 2134 2135 2130 + 2135 2136 2130 + 2137 2130 2136 + 2130 2137 2138 + 2130 2138 2131 + 2131 2138 2132 + 2139 2134 2124 + 2139 2140 2134 + 2141 2134 2140 + 33 2141 2140 + 2142 33 2140 + 2143 33 2142 + 2124 2144 2139 + 2145 2139 2144 + 2139 2145 2146 + 2140 2139 2146 + 2140 2146 2142 + 2147 2142 2146 + 2147 2148 2142 + 2142 2148 2143 + 2144 2124 2149 + 1741 1740 1739 + 1739 2150 1741 + 1741 2150 2151 + 2151 2152 1741 + 1741 2152 1732 + 2153 1732 2152 + 1726 1732 2153 + 2150 1739 2154 + 2154 2155 2150 + 2150 2155 2156 + 2156 2151 2150 + 2157 2151 2156 + 2151 2157 2158 + 2158 2152 2151 + 2152 2158 2153 + 2154 1739 1738 + 2159 2155 2154 + 2155 2159 2160 + 2160 2156 2155 + 2156 2160 2161 + 2161 2162 2156 + 2156 2162 2157 + 2163 2157 2162 + 2158 2157 2163 + 2163 2164 2158 + 2153 2158 2164 + 2160 2159 1751 + 1751 2165 2160 + 2161 2160 2165 + 2165 2166 2161 + 2167 2161 2166 + 2162 2161 2167 + 2167 2168 2162 + 2162 2168 2163 + 2169 2163 2168 + 2164 2163 2169 + 2170 2165 1751 + 2165 2170 2171 + 1751 2172 2170 + 2170 2172 2173 + 2173 2174 2170 + 2175 2170 2174 + 2174 2176 2175 + 2172 1751 1750 + 1750 1756 2172 + 2172 1756 2177 + 2177 2173 2172 + 2178 2173 2177 + 2173 2178 2179 + 2179 2174 2173 + 2174 2179 2180 + 2180 2176 2174 + 1761 2177 1756 + 2181 2177 1761 + 2177 2181 2178 + 2178 2181 2182 + 2182 2183 2178 + 2179 2178 2183 + 2183 2184 2179 + 2180 2179 2184 + 1761 1766 2181 + 2181 1766 2185 + 2185 2182 2181 + 2186 2182 2185 + 2182 2186 2187 + 2187 2183 2182 + 2183 2187 2188 + 2188 2184 2183 + 1771 2185 1766 + 2189 2185 1771 + 2185 2189 2186 + 2186 2189 2190 + 2190 2191 2186 + 2187 2186 2191 + 2191 2192 2187 + 2188 2187 2192 + 1771 2193 2189 + 2189 2193 2194 + 2194 2190 2189 + 2195 2190 2194 + 2190 2195 2196 + 2196 2191 2190 + 2191 2196 2197 + 2197 2192 2191 + 2193 1771 1770 + 1770 2198 2193 + 2193 2198 2199 + 2199 2194 2193 + 2200 2194 2199 + 2194 2200 2195 + 2195 2200 2201 + 2201 2202 2195 + 2196 2195 2202 + 2198 1770 1775 + 1775 2203 2198 + 2198 2203 2204 + 2204 2199 2198 + 2205 2199 2204 + 2199 2205 2200 + 2200 2205 2206 + 2206 2201 2200 + 2203 1775 1779 + 1779 2207 2203 + 2203 2207 2208 + 2208 2204 2203 + 2209 2204 2208 + 2204 2209 2205 + 2205 2209 2210 + 2210 2206 2205 + 2207 1779 1783 + 1783 2211 2207 + 2207 2211 2212 + 2212 2208 2207 + 2213 2208 2212 + 2208 2213 2209 + 2209 2213 2214 + 2214 2210 2209 + 2211 1783 1788 + 1788 2215 2211 + 2211 2215 2216 + 2216 2212 2211 + 2217 2212 2216 + 2212 2217 2213 + 2213 2217 2218 + 2218 2214 2213 + 2219 2215 1788 + 2215 2219 2220 + 2220 2216 2215 + 2216 2220 2221 + 2221 2222 2216 + 2216 2222 2217 + 2217 2222 2223 + 2218 2217 2223 + 2219 1788 1787 + 1787 1786 2219 + 2220 2219 1786 + 1786 1795 2220 + 1795 2224 2220 + 2221 2220 2225 + 2225 2226 2221 + 2227 2221 2226 + 2222 2221 2227 + 2227 2223 2222 + 2226 2228 2227 + 2229 2227 2228 + 2223 2227 2229 + 2230 2228 2226 + 2228 2230 2231 + 2231 2232 2228 + 2228 2232 2229 + 2229 2232 2233 + 2234 2229 2233 + 2229 2234 2223 + 2226 2235 2230 + 2236 2230 2235 + 2231 2230 2236 + 2236 2237 2231 + 2231 2237 2238 + 2238 2239 2231 + 2232 2231 2239 + 2239 2233 2232 + 1800 2235 2226 + 2235 1800 2240 + 2240 2241 2235 + 2235 2241 2236 + 2242 2236 2241 + 2236 2242 2243 + 2243 2237 2236 + 2226 2244 1800 + 2240 1800 1799 + 1799 2245 2240 + 2246 2240 2245 + 2240 2246 2247 + 2247 2241 2240 + 2241 2247 2242 + 2242 2247 2248 + 2248 2249 2242 + 2243 2242 2249 + 1798 2245 1799 + 2250 2245 1798 + 2245 2250 2246 + 2246 2250 2251 + 2252 2246 2251 + 2247 2246 2252 + 2252 2248 2247 + 2252 2253 2248 + 2248 2253 2254 + 2254 2249 2248 + 1798 1805 2250 + 2250 1805 2255 + 2255 2251 2250 + 2251 2255 2256 + 2256 2257 2251 + 2251 2257 2258 + 2258 2259 2251 + 2251 2259 2252 + 2253 2252 2259 + 1810 2255 1805 + 2256 2255 1810 + 1810 2260 2256 + 2256 2260 2261 + 2261 2262 2256 + 2257 2256 2262 + 2262 2263 2257 + 2257 2263 2264 + 2264 2258 2257 + 2265 2258 2264 + 2266 2260 1810 + 2260 2266 2267 + 2267 2268 2260 + 2260 2268 2261 + 2266 1810 1809 + 1809 1815 2266 + 2266 1815 2269 + 2267 2266 2269 + 2270 2267 2269 + 2271 2267 2270 + 2271 2268 2267 + 2268 2271 2272 + 2272 2261 2268 + 1814 2269 1815 + 1820 2269 1814 + 2269 1820 2273 + 2273 2274 2269 + 2269 2274 2275 + 2275 2270 2269 + 2276 2270 2275 + 2276 2277 2270 + 2270 2277 2271 + 1863 2273 1820 + 2278 2273 1863 + 2273 2278 2274 + 2274 2278 2279 + 2279 2275 2274 + 2279 2280 2275 + 2275 2280 2276 + 2276 2280 2281 + 2281 2282 2276 + 2277 2276 2282 + 1863 2283 2278 + 2278 2283 2284 + 2279 2278 2284 + 2285 2279 2284 + 2280 2279 2285 + 2285 2281 2280 + 2281 2285 2286 + 2281 2286 2287 + 2287 2282 2281 + 2283 1863 2288 + 2283 2288 2289 + 2289 2290 2283 + 2283 2290 2284 + 2288 1863 2291 + 2291 2292 2288 + 2288 2292 2293 + 2293 2289 2288 + 2294 2289 2293 + 2294 2290 2289 + 2290 2294 2295 + 2295 2284 2290 + 2296 2291 1863 + 2297 2291 2296 + 2291 2297 2292 + 2292 2297 2298 + 2298 2293 2292 + 2298 2299 2293 + 2293 2299 2294 + 2294 2299 2300 + 2300 2295 2294 + 2301 2296 1863 + 2302 2296 2301 + 2302 2303 2296 + 2296 2303 2297 + 2298 2297 2303 + 2303 2304 2298 + 2299 2298 2304 + 2304 2305 2299 + 2299 2305 2300 + 1862 2301 1863 + 1875 2301 1862 + 2301 1875 2306 + 2301 2306 2302 + 2302 2306 2307 + 2307 2308 2302 + 2303 2302 2308 + 2308 2304 2303 + 2308 2305 2304 + 2305 2308 2307 + 2307 2309 2305 + 2305 2309 2300 + 2306 1875 2108 + 2108 2310 2306 + 2306 2310 2307 + 2310 2311 2307 + 2312 2307 2311 + 2312 2309 2307 + 2309 2312 2313 + 2313 2300 2309 + 2113 2310 2108 + 2310 2113 2314 + 2314 2311 2310 + 2311 2314 2315 + 2315 2316 2311 + 2311 2316 2312 + 2312 2316 2317 + 2313 2312 2317 + 2318 2314 2113 + 2315 2314 2318 + 2318 2319 2315 + 2320 2315 2319 + 2316 2315 2320 + 2320 2321 2316 + 2316 2321 2317 + 2113 2322 2318 + 2323 2318 2322 + 2318 2323 2324 + 2324 2319 2318 + 2319 2324 2325 + 2325 2326 2319 + 2319 2326 2320 + 2112 2322 2113 + 2112 2118 2322 + 2322 2118 2323 + 2117 2323 2118 + 2324 2323 2117 + 2117 2327 2324 + 2324 2327 2328 + 2328 2325 2324 + 2329 2325 2328 + 2325 2329 2330 + 2330 2326 2325 + 2326 2330 2331 + 2331 2320 2326 + 2327 2117 2123 + 2123 2129 2327 + 2327 2129 2332 + 2332 2328 2327 + 2328 2332 2333 + 2333 2334 2328 + 2328 2334 2329 + 2329 2334 2335 + 2335 2336 2329 + 2330 2329 2336 + 2332 2129 2337 + 2337 2338 2332 + 2333 2332 2338 + 2338 2339 2333 + 2340 2333 2339 + 2334 2333 2340 + 2340 2335 2334 + 2129 2128 2337 + 2341 2337 2128 + 2337 2341 2342 + 2337 2342 2343 + 2343 2338 2337 + 2338 2343 2339 + 2339 2343 2344 + 2344 2345 2339 + 2339 2345 2340 + 2128 2133 2341 + 2346 2341 2133 + 2342 2341 2346 + 2346 2347 2342 + 2342 2347 2344 + 2344 2343 2342 + 2133 2348 2346 + 2349 2346 2348 + 2347 2346 2349 + 2349 2350 2347 + 2347 2350 2351 + 2351 2352 2347 + 2347 2352 2344 + 2132 2348 2133 + 2348 2132 2353 + 2353 2354 2348 + 2348 2354 2349 + 2349 2354 2355 + 2355 2356 2349 + 2350 2349 2356 + 2356 2357 2350 + 2351 2350 2357 + 2353 2132 2358 + 2358 2359 2353 + 2360 2353 2359 + 2354 2353 2360 + 2360 2355 2354 + 2355 2360 2361 + 2361 2362 2355 + 2355 2362 2363 + 2363 2356 2355 + 2357 2356 2363 + 2358 2364 2359 + 2359 2364 2365 + 2365 2366 2359 + 2359 2366 2360 + 2361 2360 2366 + 2364 2358 145 + 145 2367 2364 + 2364 2367 2368 + 2368 2365 2364 + 2369 2365 2368 + 2366 2365 2369 + 2369 2370 2366 + 2366 2370 2361 + 2367 145 2371 + 2371 2372 2367 + 2367 2372 2373 + 2373 2368 2367 + 2373 2374 2368 + 2368 2374 2369 + 2371 145 2375 + 2375 2376 2371 + 2371 2376 2377 + 2377 2378 2371 + 2379 2378 2377 + 2377 2380 2379 + 2375 145 2132 + 2138 2375 2132 + 2381 2375 2138 + 2375 2381 2376 + 2376 2381 2382 + 2382 2383 2376 + 2376 2383 2377 + 2383 2384 2377 + 2385 2377 2384 + 2385 2380 2377 + 2138 2137 2381 + 2381 2137 2386 + 2382 2381 2386 + 2136 2386 2137 + 2387 2386 2136 + 2386 2387 2388 + 2388 2389 2386 + 2388 2390 2389 + 2391 2389 2390 + 2392 2391 2390 + 2136 2393 2387 + 2387 2393 2394 + 2394 2395 2387 + 2387 2395 2396 + 2396 2388 2387 + 2390 2388 2396 + 2396 2397 2390 + 2392 2390 2397 + 2393 2136 2398 + 2398 2399 2393 + 2394 2393 2399 + 2372 2371 2400 + 2400 2401 2372 + 2372 2401 2402 + 2373 2372 2402 + 2402 2403 2373 + 2374 2373 2403 + 2400 2404 2401 + 2403 2405 2374 + 2374 2405 2406 + 2369 2374 2406 + 2406 2407 2369 + 2370 2369 2407 + 2407 2408 2370 + 2361 2370 2408 + 2405 2409 2406 + 2410 2406 2409 + 2411 2406 2410 + 2406 2411 2412 + 2412 2407 2406 + 2407 2412 2413 + 2413 2408 2407 + 2409 2414 2410 + 2410 2414 2415 + 2416 2410 2415 + 2411 2410 2416 + 2416 2417 2411 + 2414 2409 2418 + 2419 2418 2409 + 2420 2418 2419 + 2421 2418 2420 + 2420 2415 2421 + 2422 2415 2420 + 2415 2422 2423 + 2423 2416 2415 + 2423 2424 2416 + 2425 2419 2409 + 2426 2419 2425 + 2419 2426 2427 + 2427 2428 2419 + 2419 2428 2420 + 2422 2420 2428 + 2428 2429 2422 + 2422 2429 1293 + 2423 2422 1293 + 2425 2430 2426 + 2412 2411 2431 + 2429 2428 2427 + 2429 2427 2432 + 2432 2433 2429 + 2429 2433 1293 + 2433 1295 1293 + 1295 1294 1293 + 2427 2426 2432 + 2426 2434 2432 + 2435 2432 2434 + 2433 2432 2435 + 2433 2435 2436 + 2436 1295 2433 + 1295 2436 1290 + 2426 2403 2434 + 2403 2402 2434 + 2437 2434 2402 + 2434 2437 2435 + 2435 2437 2438 + 2438 2436 2435 + 1290 2436 2438 + 2438 2439 1290 + 1290 2439 2440 + 2440 1281 1290 + 2441 2437 2402 + 2401 2441 2402 + 2437 2442 2438 + 2442 2380 2438 + 2443 2438 2380 + 2443 2439 2438 + 2439 2443 2444 + 2444 2440 2439 + 2444 2445 2440 + 2440 2445 2446 + 2446 1281 2440 + 1281 2446 1277 + 2380 2385 2443 + 2443 2385 2447 + 2447 2448 2443 + 2448 2449 2443 + 2449 2444 2443 + 2445 2444 2449 + 2449 2450 2445 + 2446 2445 2450 + 2450 2451 2446 + 1277 2446 2451 + 2385 2452 2447 + 2452 2453 2447 + 2453 2454 2447 + 2454 2455 2447 + 2455 2456 2447 + 2456 2457 2447 + 2458 2447 2457 + 2447 2458 2459 + 2447 2459 2460 + 2460 2448 2447 + 2384 2452 2385 + 2452 2384 2461 + 2452 2461 2462 + 2462 2453 2452 + 2453 2462 2463 + 2453 2463 2397 + 2397 2454 2453 + 2461 2384 2383 + 2383 2464 2461 + 2461 2464 2465 + 2465 2462 2461 + 2463 2462 2465 + 2465 2392 2463 + 2463 2392 2397 + 2382 2464 2383 + 2464 2382 2465 + 2382 2391 2465 + 2454 2397 2396 + 2454 2396 2395 + 2395 2455 2454 + 2455 2395 2394 + 2455 2394 2466 + 2466 2456 2455 + 2456 2466 2467 + 2456 2467 2468 + 2468 2457 2456 + 2457 2468 2469 + 2457 2469 2458 + 2470 2466 2394 + 2467 2466 2470 + 2470 2471 2467 + 2467 2471 2472 + 2472 2473 2467 + 2473 2474 2467 + 2474 2468 2467 + 2469 2468 2474 + 2475 2470 2394 + 2476 2470 2475 + 2476 2471 2470 + 2471 2476 2477 + 2477 2472 2471 + 2477 2478 2472 + 2472 2478 206 + 206 2473 2472 + 2479 2475 2394 + 2480 2475 2479 + 2481 2475 2480 + 2475 2481 2476 + 2476 2481 2482 + 2482 2477 2476 + 2478 2477 2482 + 2482 2483 2478 + 206 2478 2483 + 2483 2484 206 + 2485 206 2484 + 2479 2143 2480 + 2480 2143 2148 + 2481 2480 2148 + 2148 2147 2481 + 2481 2147 2482 + 2147 2486 2482 + 2486 2487 2482 + 2487 2488 2482 + 2488 2489 2482 + 2489 2490 2482 + 2490 2491 2482 + 2491 2492 2482 + 2493 2482 2492 + 2482 2493 2483 + 2146 2486 2147 + 2486 2146 2145 + 2486 2145 2494 + 2494 2487 2486 + 2487 2494 2495 + 2487 2495 2496 + 2496 2488 2487 + 2488 2496 2497 + 2488 2497 2498 + 2498 2489 2488 + 2144 2494 2145 + 2495 2494 2144 + 2144 31 2495 + 2495 31 2499 + 2499 2496 2495 + 2497 2496 2499 + 2499 2500 2497 + 2497 2500 2039 + 2039 2498 2497 + 2501 2498 2039 + 2489 2498 2501 + 2489 2501 2502 + 2502 2490 2489 + 31 2503 2499 + 2503 245 2499 + 2500 2499 245 + 2039 2038 2501 + 2501 2038 2504 + 2504 2502 2501 + 2505 2502 2504 + 2490 2502 2505 + 2490 2505 2506 + 2506 2491 2490 + 2491 2506 2507 + 2491 2507 2508 + 2508 2492 2491 + 2037 2504 2038 + 2050 2504 2037 + 2504 2050 2505 + 2505 2050 2049 + 2049 2509 2505 + 2509 2506 2505 + 2507 2506 2509 + 2509 2510 2507 + 2507 2510 2511 + 2511 2512 2507 + 2512 2513 2507 + 2513 2508 2507 + 2059 2509 2049 + 2059 2510 2509 + 2510 2059 2514 + 2514 2511 2510 + 2514 2515 2511 + 2511 2515 2516 + 2516 2512 2511 + 2517 2514 2059 + 2515 2514 2517 + 2517 2518 2515 + 2515 2518 2519 + 2516 2515 2519 + 2520 2516 2519 + 2521 2516 2520 + 2522 2516 2521 + 2058 2517 2059 + 2523 2517 2058 + 2517 2523 2518 + 2518 2523 2524 + 2524 2519 2518 + 2519 2524 2525 + 2519 2525 2526 + 2526 2520 2519 + 2527 2520 2526 + 2526 2528 2527 + 2058 2529 2523 + 2529 2524 2523 + 2525 2524 2529 + 2529 2530 2525 + 2531 2525 2530 + 2525 2531 2526 + 2528 2526 2531 + 2058 2530 2529 + 2532 2530 2058 + 2530 2532 2533 + 2531 2530 2533 + 2534 2531 2533 + 2531 2534 2528 + 2072 2532 2058 + 2072 2071 2532 + 2532 2071 2533 + 2071 2080 2533 + 2533 2080 2535 + 2533 2535 2534 + 2534 2535 2536 + 2536 2537 2534 + 2528 2534 2537 + 2537 2538 2528 + 2528 2538 2539 + 2539 2540 2528 + 2541 2537 2536 + 2537 2541 2542 + 2542 2538 2537 + 2538 2542 2543 + 2543 2539 2538 + 2536 2544 2541 + 2541 2544 2545 + 2545 2546 2541 + 2542 2541 2546 + 2546 2547 2542 + 2543 2542 2547 + 2544 2536 2548 + 2548 2549 2544 + 2544 2549 2550 + 2550 2545 2544 + 2551 2545 2550 + 2545 2551 2552 + 2552 2546 2545 + 2547 2546 2552 + 2548 2536 2553 + 2553 2554 2548 + 2548 2554 2555 + 2555 2556 2548 + 2549 2548 2556 + 2557 2553 2536 + 2520 2558 2521 + 2520 2559 2558 + 2040 2039 2500 + 2500 2560 2040 + 2484 2561 2485 + 2562 2561 2484 + 2484 2563 2562 + 2562 2563 2564 + 2564 2565 2562 + 2566 2562 2565 + 2567 2562 2566 + 2563 2484 2483 + 2483 2493 2563 + 2564 2563 2493 + 2493 2568 2564 + 2513 2564 2568 + 2564 2513 2565 + 2513 2569 2565 + 2565 2569 2570 + 2570 2571 2565 + 2565 2571 2566 + 2492 2568 2493 + 2492 2508 2568 + 2568 2508 2513 + 2569 2513 2512 + 2512 2572 2569 + 2569 2572 2573 + 2573 2570 2569 + 2574 2570 2573 + 2570 2574 2575 + 2575 2571 2570 + 2571 2575 2576 + 2576 2566 2571 + 2577 2572 2512 + 2572 2577 2578 + 2578 2573 2572 + 2579 2573 2578 + 2573 2579 2574 + 2574 2579 2580 + 2580 2581 2574 + 2575 2574 2581 + 2581 2582 2575 + 2576 2575 2582 + 2583 2578 2577 + 2584 2578 2583 + 2578 2584 2579 + 2579 2584 2585 + 2585 2580 2579 + 2577 2586 2583 + 2539 2583 2586 + 2587 2583 2539 + 2583 2587 2584 + 2584 2587 2588 + 2588 2585 2584 + 2589 2585 2588 + 2580 2585 2589 + 2586 2590 2539 + 2539 2543 2587 + 2587 2543 2591 + 2591 2588 2587 + 2592 2588 2591 + 2588 2592 2589 + 2589 2592 2593 + 2594 2589 2593 + 2595 2589 2594 + 2589 2595 2580 + 2547 2591 2543 + 2592 2591 2547 + 2547 2593 2592 + 2552 2593 2547 + 2593 2552 2596 + 2596 2597 2593 + 2593 2597 2594 + 2598 2594 2597 + 2594 2598 2599 + 2599 2600 2594 + 2594 2600 2595 + 2596 2552 2601 + 2601 2602 2596 + 2603 2596 2602 + 2596 2603 2604 + 2604 2597 2596 + 2597 2604 2598 + 2552 2551 2601 + 2605 2601 2551 + 2606 2601 2605 + 2601 2606 2607 + 2607 2602 2601 + 2608 2602 2607 + 2602 2608 2603 + 2551 2550 2605 + 2605 2550 2549 + 2549 2609 2605 + 2610 2605 2609 + 2605 2610 2606 + 2606 2610 2611 + 2611 2612 2606 + 2606 2612 2613 + 2607 2606 2613 + 2556 2609 2549 + 2609 2556 142 + 142 2614 2609 + 2609 2614 2610 + 2611 2610 2614 + 2614 2615 2611 + 2616 2611 2615 + 2612 2611 2616 + 2612 2616 2617 + 2617 2613 2612 + 142 2556 2555 + 2555 2618 142 + 2619 2259 2258 + 2259 2619 2253 + 2254 2253 2619 + 2620 2254 2619 + 2621 2254 2620 + 2254 2621 2622 + 2622 2249 2254 + 2249 2622 2243 + 2619 2623 2620 + 2624 2620 2623 + 2620 2624 2625 + 2620 2625 2621 + 2626 2621 2625 + 2622 2621 2626 + 2627 2623 2619 + 2623 2627 2628 + 2628 2629 2623 + 2623 2629 2624 + 2630 2624 2629 + 2625 2624 2630 + 2630 2631 2625 + 2625 2631 2626 + 2619 2265 2627 + 2632 2627 2265 + 2628 2627 2632 + 2632 2633 2628 + 2628 2633 2634 + 2634 2635 2628 + 2629 2628 2635 + 2636 2265 2619 + 2637 2166 2165 + 2166 2637 2638 + 2638 2639 2166 + 2166 2639 2167 + 2640 2167 2639 + 2168 2167 2640 + 2640 2641 2168 + 2168 2641 2169 + 2639 2642 2640 + 2643 2640 2642 + 2641 2640 2643 + 2643 2644 2641 + 2641 2644 2645 + 2645 2169 2641 + 2646 2169 2645 + 2169 2646 2164 + 2647 2642 2639 + 2642 2647 2648 + 2648 2649 2642 + 2642 2649 2643 + 2650 2643 2649 + 2644 2643 2650 + 2650 2651 2644 + 2644 2651 2652 + 2652 2645 2644 + 2653 2648 2647 + 2654 2648 2653 + 2648 2654 2649 + 2649 2654 2650 + 2650 2654 2655 + 2656 2650 2655 + 2651 2650 2656 + 2647 2657 2653 + 2657 2658 2653 + 2659 2653 2658 + 2659 2660 2653 + 2653 2660 2654 + 2661 2657 2647 + 2662 2657 2661 + 2657 2662 2663 + 2663 2658 2657 + 2663 2664 2658 + 2658 2664 2659 + 2659 2664 16 + 2647 2638 2661 + 2176 2661 2638 + 2665 2661 2176 + 2661 2665 2662 + 2666 2638 2647 + 2638 2667 2176 + 2176 2180 2665 + 2665 2180 2668 + 2668 2669 2665 + 2662 2665 2669 + 2669 2670 2662 + 2662 2670 2671 + 2663 2662 2671 + 2672 2663 2671 + 2671 2673 2672 + 2184 2668 2180 + 2674 2668 2184 + 2668 2674 2675 + 2675 2669 2668 + 2669 2675 2676 + 2676 2670 2669 + 2670 2676 2677 + 2677 2671 2670 + 2184 2188 2674 + 2674 2188 2678 + 2678 2679 2674 + 2675 2674 2679 + 2679 2680 2675 + 2676 2675 2680 + 2680 2681 2676 + 2677 2676 2681 + 2192 2678 2188 + 2682 2678 2192 + 2678 2682 2683 + 2683 2679 2678 + 2679 2683 2684 + 2684 2680 2679 + 2680 2684 2685 + 2685 2681 2680 + 2192 2197 2682 + 2682 2197 2686 + 2686 2687 2682 + 2683 2682 2687 + 2687 2688 2683 + 2683 2688 2689 + 2684 2683 2689 + 2689 2690 2684 + 2685 2684 2690 + 2691 2686 2197 + 2692 2686 2691 + 2686 2692 2693 + 2693 2687 2686 + 2693 2688 2687 + 2688 2693 2694 + 2694 2689 2688 + 2197 2196 2691 + 2202 2691 2196 + 2695 2691 2202 + 2691 2695 2692 + 2692 2695 2696 + 2696 2697 2692 + 2692 2697 2694 + 2694 2693 2692 + 2202 2698 2695 + 2695 2698 2699 + 2699 2696 2695 + 2700 2696 2699 + 2696 2700 2701 + 2698 2202 2201 + 2201 2702 2698 + 2698 2702 2703 + 2703 2699 2698 + 2704 2699 2703 + 2699 2704 2700 + 2700 2704 2705 + 2705 2706 2700 + 2701 2700 2706 + 2702 2201 2206 + 2206 2707 2702 + 2702 2707 2708 + 2708 2703 2702 + 2709 2703 2708 + 2703 2709 2704 + 2704 2709 2710 + 2710 2705 2704 + 2707 2206 2210 + 2210 2711 2707 + 2707 2711 2712 + 2712 2708 2707 + 2713 2708 2712 + 2708 2713 2709 + 2709 2713 2714 + 2714 2710 2709 + 2711 2210 2214 + 2214 2715 2711 + 2711 2715 2716 + 2716 2712 2711 + 2717 2712 2716 + 2712 2717 2713 + 2713 2717 2718 + 2718 2714 2713 + 2715 2214 2218 + 2218 2719 2715 + 2715 2719 2720 + 2720 2716 2715 + 2721 2716 2720 + 2716 2721 2717 + 2717 2721 2722 + 2722 2718 2717 + 2719 2218 2723 + 2723 2724 2719 + 2719 2724 2725 + 2725 2720 2719 + 2726 2720 2725 + 2720 2726 2721 + 2721 2726 2727 + 2727 2722 2721 + 2723 2218 2223 + 2728 2723 2223 + 2729 2723 2728 + 2729 2724 2723 + 2724 2729 2730 + 2730 2725 2724 + 2730 2731 2725 + 2725 2731 2726 + 2726 2731 2732 + 2223 2733 2728 + 2734 2728 2733 + 2734 2735 2728 + 2728 2735 2729 + 2729 2735 2736 + 2736 2730 2729 + 2737 2730 2736 + 2738 2733 2223 + 2738 2739 2733 + 2733 2739 2734 + 2740 2734 2739 + 2735 2734 2740 + 2740 2741 2735 + 2735 2741 2736 + 2223 2234 2738 + 2742 2738 2234 + 2739 2738 2742 + 2742 2743 2739 + 2739 2743 2740 + 2743 2744 2740 + 2744 2745 2740 + 2746 2740 2745 + 2746 2741 2740 + 2234 2747 2742 + 2748 2742 2747 + 2742 2748 2749 + 2749 2743 2742 + 2743 2749 2750 + 2750 2744 2743 + 2233 2747 2234 + 2751 2747 2233 + 2747 2751 2748 + 2752 2748 2751 + 2749 2748 2752 + 2752 2753 2749 + 2749 2753 2754 + 2754 2750 2749 + 2755 2750 2754 + 2744 2750 2755 + 2233 2239 2751 + 2751 2239 2238 + 2238 2756 2751 + 2751 2756 2752 + 2757 2752 2756 + 2752 2757 2758 + 2758 2753 2752 + 2753 2758 2759 + 2759 2754 2753 + 2760 2756 2238 + 2756 2760 2757 + 2757 2760 2761 + 2761 2762 2757 + 2758 2757 2762 + 2762 2763 2758 + 2758 2763 2764 + 2764 2759 2758 + 2238 2765 2760 + 2760 2765 2766 + 2766 2761 2760 + 2761 2766 2626 + 2626 2767 2761 + 2761 2767 2768 + 2768 2762 2761 + 2763 2762 2768 + 2765 2238 2237 + 2237 2243 2765 + 2765 2243 2622 + 2622 2766 2765 + 2626 2766 2622 + 2727 2726 2769 + 2767 2626 2631 + 2631 2770 2767 + 2767 2770 2771 + 2771 2768 2767 + 2772 2768 2771 + 2768 2772 2763 + 2763 2772 2773 + 2773 2764 2763 + 2770 2631 2630 + 2630 2774 2770 + 2770 2774 2775 + 2775 2771 2770 + 2776 2771 2775 + 2771 2776 2772 + 2772 2776 2777 + 2777 2773 2772 + 2774 2630 2778 + 2778 2779 2774 + 2774 2779 2780 + 2780 2775 2774 + 2781 2775 2780 + 2775 2781 2776 + 2776 2781 2782 + 2782 2777 2776 + 2778 2630 2629 + 2629 2783 2778 + 2784 2778 2783 + 2784 2779 2778 + 2779 2784 2785 + 2785 2780 2779 + 2786 2780 2785 + 2780 2786 2781 + 2781 2786 2787 + 2787 2782 2781 + 2635 2783 2629 + 2788 2783 2635 + 2783 2788 2784 + 2784 2788 2789 + 2789 2790 2784 + 2790 2791 2784 + 2791 2785 2784 + 2792 2785 2791 + 2785 2792 2786 + 2635 2793 2788 + 2788 2793 2794 + 2794 2789 2788 + 2795 2789 2794 + 2789 2795 2796 + 2796 2790 2789 + 2793 2635 2634 + 2634 2797 2793 + 2794 2793 2797 + 2797 2798 2794 + 2799 2794 2798 + 2794 2799 2795 + 2800 2797 2634 + 2797 2800 2801 + 2801 2798 2797 + 2801 2802 2798 + 2798 2802 2799 + 2799 2802 2803 + 2803 2804 2799 + 2795 2799 2804 + 2634 2805 2800 + 2800 2805 2806 + 2806 2807 2800 + 2801 2800 2807 + 2808 2801 2807 + 2802 2801 2808 + 2808 2809 2802 + 2802 2809 2803 + 2805 2634 2810 + 2810 2811 2805 + 2805 2811 2812 + 2812 2806 2805 + 2813 2806 2812 + 2813 2807 2806 + 2633 2810 2634 + 2814 2810 2633 + 2814 2811 2810 + 2811 2814 2815 + 2815 2812 2811 + 2812 2815 2816 + 2816 2817 2812 + 2812 2817 2813 + 2633 2818 2814 + 2814 2818 2819 + 2819 2815 2814 + 2816 2815 2819 + 2819 2820 2816 + 2816 2820 2821 + 2821 2822 2816 + 2817 2816 2822 + 2818 2633 2632 + 2632 2823 2818 + 2818 2823 2824 + 2824 2819 2818 + 2820 2819 2824 + 2824 2825 2820 + 2820 2825 2826 + 2826 2821 2820 + 2823 2632 2827 + 2827 2828 2823 + 2823 2828 2829 + 2829 2824 2823 + 2825 2824 2829 + 2829 2830 2825 + 2825 2830 2831 + 2831 2826 2825 + 2265 2827 2632 + 2264 2827 2265 + 2828 2827 2264 + 2264 2832 2828 + 2828 2832 2833 + 2833 2829 2828 + 2829 2833 2834 + 2834 2830 2829 + 2830 2834 2835 + 2835 2831 2830 + 2832 2264 2263 + 2263 2836 2832 + 2832 2836 2837 + 2837 2833 2832 + 2834 2833 2837 + 2837 2838 2834 + 2834 2838 2839 + 2839 2835 2834 + 2262 2836 2263 + 2836 2262 2261 + 2261 2840 2836 + 2836 2840 2837 + 2841 2837 2840 + 2841 2838 2837 + 2838 2841 2842 + 2842 2843 2838 + 2838 2843 2839 + 2844 2840 2261 + 2840 2844 2841 + 2841 2844 2845 + 2842 2841 2845 + 2845 2846 2842 + 2847 2842 2846 + 2847 2843 2842 + 2843 2847 2848 + 2848 2839 2843 + 2261 2272 2844 + 2844 2272 2849 + 2849 2845 2844 + 2845 2849 2850 + 2845 2850 2851 + 2851 2846 2845 + 2852 2846 2851 + 2846 2852 2847 + 2847 2852 2853 + 2853 2848 2847 + 2854 2849 2272 + 2850 2849 2854 + 2854 2287 2850 + 2850 2287 2855 + 2851 2850 2855 + 2856 2851 2855 + 2852 2851 2856 + 2856 2857 2852 + 2852 2857 2853 + 2272 2271 2854 + 2271 2277 2854 + 2282 2854 2277 + 2854 2282 2287 + 2287 2286 2855 + 2286 2858 2855 + 2858 2859 2855 + 2860 2855 2859 + 2860 2861 2855 + 2855 2861 2862 + 2862 2863 2855 + 2855 2863 2856 + 2864 2858 2286 + 2864 2865 2858 + 2858 2865 2866 + 2866 2859 2858 + 2866 2867 2859 + 2859 2867 2860 + 2286 2285 2864 + 2284 2864 2285 + 2865 2864 2284 + 2284 2868 2865 + 2865 2868 2869 + 2869 2866 2865 + 2867 2866 2869 + 2869 2870 2867 + 2860 2867 2870 + 2870 2871 2860 + 2861 2860 2871 + 2295 2868 2284 + 2868 2295 2300 + 2300 2872 2868 + 2868 2872 2869 + 2872 2873 2869 + 2874 2869 2873 + 2869 2874 2875 + 2875 2870 2869 + 2870 2875 2876 + 2876 2871 2870 + 2313 2872 2300 + 2872 2313 2877 + 2877 2873 2872 + 2877 2878 2873 + 2873 2878 2874 + 2879 2874 2878 + 2875 2874 2879 + 2879 2880 2875 + 2875 2880 2881 + 2881 2876 2875 + 2317 2877 2313 + 2878 2877 2317 + 2317 2882 2878 + 2878 2882 2879 + 2882 2883 2879 + 2884 2879 2883 + 2884 2880 2879 + 2880 2884 2885 + 2885 2881 2880 + 2886 2882 2317 + 2882 2886 2887 + 2887 2883 2882 + 2887 2888 2883 + 2883 2888 2884 + 2884 2888 2889 + 2885 2884 2889 + 2886 2317 2321 + 2321 2890 2886 + 2886 2890 2891 + 2887 2886 2891 + 2891 2892 2887 + 2888 2887 2892 + 2892 2889 2888 + 2890 2321 2320 + 2320 2331 2890 + 2890 2331 2893 + 2893 2891 2890 + 2891 2893 2894 + 2894 2895 2891 + 2891 2895 2896 + 2896 2892 2891 + 2892 2896 2897 + 2897 2889 2892 + 2898 2893 2331 + 2894 2893 2898 + 2898 2899 2894 + 2894 2899 2900 + 2900 2901 2894 + 2895 2894 2901 + 2331 2330 2898 + 2336 2898 2330 + 2898 2336 2902 + 2902 2899 2898 + 2899 2902 2903 + 2903 2900 2899 + 2900 2903 2904 + 2904 2905 2900 + 2900 2905 2906 + 2906 2901 2900 + 2902 2336 2335 + 2335 2907 2902 + 2902 2907 2908 + 2908 2903 2902 + 2904 2903 2908 + 2908 2909 2904 + 2910 2904 2909 + 2905 2904 2910 + 2910 2911 2905 + 2906 2905 2911 + 2907 2335 2340 + 2340 2912 2907 + 2907 2912 2913 + 2913 2908 2907 + 2908 2913 2914 + 2914 2909 2908 + 2909 2914 2915 + 2915 2916 2909 + 2909 2916 2910 + 2912 2340 2917 + 2917 2918 2912 + 2913 2912 2918 + 2918 2919 2913 + 2914 2913 2919 + 2919 2920 2914 + 2914 2920 2921 + 2921 2915 2914 + 2345 2917 2340 + 2922 2917 2345 + 2917 2922 2923 + 2923 2918 2917 + 2918 2923 2924 + 2924 2919 2918 + 2924 2920 2919 + 2920 2924 2925 + 2925 2921 2920 + 2345 2926 2922 + 2927 2922 2926 + 2923 2922 2927 + 2927 2928 2923 + 2924 2923 2928 + 2928 2925 2924 + 2929 2925 2928 + 2925 2929 2930 + 2930 2921 2925 + 2344 2926 2345 + 2926 2344 2931 + 2931 2932 2926 + 2926 2932 2927 + 2933 2927 2932 + 2927 2933 2934 + 2934 2928 2927 + 2928 2934 2929 + 2352 2931 2344 + 2935 2931 2352 + 2931 2935 2936 + 2936 2932 2931 + 2932 2936 2933 + 2933 2936 2937 + 2938 2933 2937 + 2934 2933 2938 + 2938 2939 2934 + 2929 2934 2939 + 2352 2940 2935 + 2935 2940 2941 + 2941 2942 2935 + 2936 2935 2942 + 2942 2937 2936 + 2943 2940 2352 + 2940 2943 2944 + 2944 2941 2940 + 2945 2941 2944 + 2941 2945 2946 + 2946 2942 2941 + 2942 2946 2947 + 2947 2937 2942 + 2352 2351 2943 + 2943 2351 2948 + 2948 2949 2943 + 2943 2949 2950 + 2950 2944 2943 + 2945 2944 2950 + 2950 2951 2945 + 2945 2951 2952 + 2952 2946 2945 + 2947 2946 2952 + 2357 2948 2351 + 2953 2948 2357 + 2949 2948 2953 + 2953 2954 2949 + 2949 2954 2955 + 2955 2956 2949 + 2949 2956 2950 + 2957 2950 2956 + 2951 2950 2957 + 2357 2958 2953 + 2959 2953 2958 + 2954 2953 2959 + 2959 2960 2954 + 2955 2954 2960 + 2960 2961 2955 + 2962 2955 2961 + 2955 2962 2956 + 2956 2962 2957 + 2363 2958 2357 + 2958 2363 2963 + 2963 2964 2958 + 2958 2964 2959 + 2965 2959 2964 + 2959 2965 2966 + 2966 2960 2959 + 2960 2966 2967 + 2967 2961 2960 + 2963 2363 2362 + 2362 2968 2963 + 2969 2963 2968 + 2963 2969 2970 + 2970 2964 2963 + 2964 2970 2965 + 2965 2970 2971 + 2971 2972 2965 + 2966 2965 2972 + 2973 2968 2362 + 2974 2968 2973 + 2968 2974 2969 + 2969 2974 2975 + 2975 2976 2969 + 2970 2969 2976 + 2976 2971 2970 + 2362 2361 2973 + 2408 2973 2361 + 2977 2973 2408 + 2973 2977 2974 + 2974 2977 2978 + 2978 2975 2974 + 2979 2975 2978 + 2975 2979 2980 + 2980 2976 2975 + 2976 2980 2981 + 2981 2971 2976 + 2408 2413 2977 + 2978 2977 2413 + 2413 2982 2978 + 2983 2978 2982 + 2978 2983 2979 + 2979 2983 2984 + 2984 2985 2979 + 2979 2985 2986 + 2986 2980 2979 + 2981 2980 2986 + 2987 2982 2413 + 2988 2982 2987 + 2982 2988 2983 + 2983 2988 2989 + 2989 2984 2983 + 2990 2984 2989 + 2984 2990 2991 + 2991 2985 2984 + 2413 2412 2987 + 2987 2412 2992 + 2993 2987 2992 + 2664 2663 2994 + 2663 2995 2994 + 1714 2996 1715 + 2996 1714 2997 + 2997 2989 2996 + 2996 2989 2988 + 2988 134 2996 + 2998 2996 134 + 2997 1714 1721 + 1721 2999 2997 + 2997 2999 3000 + 3000 2990 2997 + 2989 2997 2990 + 1727 2999 1721 + 2999 1727 3001 + 3001 3000 2999 + 3002 3000 3001 + 3000 3002 2991 + 2991 2990 3000 + 13 3001 1727 + 3002 3001 13 + 13 3003 3002 + 1727 3004 13 + 3004 3005 13 + 3006 13 3005 + 3005 3007 3006 + 1726 3004 1727 + 2153 3004 1726 + 3004 2153 3008 + 3008 3005 3004 + 3005 3008 3009 + 3009 3007 3005 + 3007 3009 3010 + 3010 3011 3007 + 3012 3007 3011 + 2164 3008 2153 + 3009 3008 2164 + 2164 2646 3009 + 3009 2646 3013 + 3013 3010 3009 + 3014 3010 3013 + 3011 3010 3014 + 3014 3015 3011 + 3011 3015 3016 + 3016 3017 3011 + 3011 3017 3018 + 2645 3013 2646 + 3013 2645 2652 + 2652 3019 3013 + 3013 3019 3014 + 3014 3019 3020 + 3020 3021 3014 + 3015 3014 3021 + 3021 3022 3015 + 3015 3022 3023 + 3016 3015 3023 + 3019 2652 3024 + 3024 3020 3019 + 3025 3020 3024 + 3020 3025 3026 + 3026 3021 3020 + 3021 3026 3027 + 3027 3022 3021 + 3022 3027 3028 + 3028 3023 3022 + 3024 2652 2651 + 2651 3029 3024 + 3030 3024 3029 + 3029 3031 3030 + 3030 3031 3032 + 2656 3029 2651 + 3029 2656 3033 + 3033 3031 3029 + 3031 3033 3034 + 3034 3032 3031 + 3033 2656 3035 + 3035 3036 3033 + 3034 3033 3036 + 3036 3037 3034 + 3038 3034 3037 + 3032 3034 3038 + 3039 3036 3035 + 3036 3039 3040 + 3040 3037 3036 + 3040 3041 3037 + 3037 3041 3038 + 3042 3040 3039 + 3041 3040 3042 + 3042 3043 3041 + 3038 3041 3043 + 3043 3044 3038 + 3044 3045 3038 + 3046 3038 3045 + 3038 3046 3032 + 3039 3047 3042 + 3047 3048 3042 + 3049 3042 3048 + 3049 3043 3042 + 3043 3049 3050 + 3050 3044 3043 + 3050 3051 3044 + 3044 3051 3052 + 3052 3045 3044 + 3053 3048 3047 + 3048 3053 3054 + 3054 3053 3055 + 3055 3056 3054 + 3047 3057 3053 + 3053 3057 3058 + 3055 3053 3058 + 3058 3059 3055 + 3060 3055 3059 + 3055 3060 3061 + 3061 3056 3055 + 3057 3047 3062 + 3057 3062 3063 + 3063 3058 3057 + 3064 3058 3063 + 3058 3064 3065 + 3065 3059 3058 + 3066 3059 3065 + 3059 3066 3060 + 3062 3047 3067 + 3067 3068 3062 + 3062 3068 2659 + 3063 3062 2659 + 3069 3063 2659 + 3070 3068 3067 + 3068 3070 2660 + 2660 2659 3068 + 2660 3070 3071 + 3052 3051 3072 + 3028 3027 3073 + 3024 3074 3025 + 3064 3063 3075 + 3075 3076 3064 + 3064 3076 3077 + 3077 3065 3064 + 3078 3065 3077 + 3065 3078 3066 + 3066 3078 3079 + 3079 3080 3066 + 3060 3066 3080 + 3080 3081 3060 + 3061 3060 3081 + 3077 3082 3078 + 3078 3082 3083 + 3079 3078 3083 + 3083 3084 3079 + 3085 3079 3084 + 3079 3085 3086 + 3086 3080 3079 + 3082 3077 2673 + 3082 2673 2671 + 2671 3083 3082 + 2677 3083 2671 + 3083 2677 3087 + 3087 3084 3083 + 3088 3084 3087 + 3084 3088 3085 + 2673 3077 15 + 15 3089 2673 + 2681 3087 2677 + 3090 3087 2681 + 3087 3090 3088 + 3088 3090 3091 + 3091 3092 3088 + 3085 3088 3092 + 3092 3093 3085 + 3086 3085 3093 + 2681 2685 3090 + 3090 2685 3094 + 3094 3091 3090 + 3095 3091 3094 + 3091 3095 3096 + 3096 3092 3091 + 3092 3096 3097 + 3097 3093 3092 + 2690 3094 2685 + 3098 3094 2690 + 3094 3098 3095 + 3095 3098 3099 + 3099 3100 3095 + 3096 3095 3100 + 3100 3101 3096 + 3097 3096 3101 + 2690 3102 3098 + 3098 3102 3103 + 3103 3099 3098 + 3104 3099 3103 + 3099 3104 3105 + 3105 3100 3099 + 3100 3105 3106 + 3106 3101 3100 + 3102 2690 2689 + 2689 3107 3102 + 3103 3102 3107 + 3107 3108 3103 + 3109 3103 3108 + 3103 3109 3104 + 3104 3109 3110 + 3110 3111 3104 + 3105 3104 3111 + 3107 2689 2694 + 3107 2694 3112 + 3112 3108 3107 + 3113 3108 3112 + 3108 3113 3109 + 3109 3113 3114 + 3114 3110 3109 + 3115 3110 3114 + 3110 3115 3116 + 3116 3111 3110 + 2697 3112 2694 + 3112 2697 2701 + 3117 3112 2701 + 3112 3117 3118 + 3117 2701 3119 + 3119 3120 3117 + 3113 3117 3120 + 3120 3114 3113 + 3121 3114 3120 + 3114 3121 3115 + 3115 3121 3122 + 3122 3123 3115 + 3116 3115 3123 + 2706 3119 2701 + 3124 3119 2706 + 3119 3124 3125 + 3125 3120 3119 + 3120 3125 3121 + 3121 3125 3126 + 3126 3122 3121 + 3126 3127 3122 + 3122 3127 3128 + 3128 3123 3122 + 2706 3129 3124 + 3124 3129 3130 + 3130 3131 3124 + 3124 3131 3126 + 3126 3125 3124 + 3129 2706 2705 + 2705 3132 3129 + 3130 3129 3132 + 3132 3133 3130 + 3134 3130 3133 + 3130 3134 3135 + 3135 3131 3130 + 3132 2705 2710 + 2710 3136 3132 + 3132 3136 3137 + 3137 3133 3132 + 3138 3133 3137 + 3133 3138 3134 + 3139 3134 3138 + 3135 3134 3139 + 3136 2710 2714 + 2714 3140 3136 + 3137 3136 3140 + 3140 3141 3137 + 3142 3137 3141 + 3137 3142 3138 + 3138 3142 3143 + 3143 3144 3138 + 3138 3144 3139 + 3140 2714 2718 + 2718 3145 3140 + 3140 3145 3146 + 3146 3141 3140 + 3147 3141 3146 + 3141 3147 3142 + 3143 3142 3147 + 3145 2718 2722 + 2722 3148 3145 + 3146 3145 3148 + 3148 3149 3146 + 3150 3146 3149 + 3146 3150 3147 + 3147 3150 3151 + 3151 3152 3147 + 3147 3152 3143 + 3148 2722 2727 + 2727 3153 3148 + 3148 3153 3154 + 3154 3149 3148 + 3155 3149 3154 + 3149 3155 3150 + 3151 3150 3155 + 3153 2727 115 + 115 3156 3153 + 3154 3153 3156 + 3156 3157 3154 + 3158 3154 3157 + 3154 3158 3155 + 115 2727 3159 + 3160 3026 3025 + 3027 3026 3160 + 3160 3161 3027 + 2987 134 2988 + 134 2987 3162 + 3162 1707 134 + 3163 1305 1304 + 3164 1305 3163 + 3164 3165 1305 + 3166 3165 3164 + 3167 3166 3164 + 3163 3168 3164 + 3169 3164 3168 + 3170 3169 3168 + 3168 3171 3170 + 3172 3170 3171 + 3171 3173 3172 + 3174 3168 3163 + 3168 3174 3175 + 3175 3171 3168 + 3173 3171 3175 + 3173 3175 1703 + 1703 150 3173 + 1703 3175 3174 + 150 1703 1702 + 150 1702 3176 + 3176 3177 150 + 150 3177 1293 + 1293 3172 150 + 1299 3172 1293 + 1701 3176 1702 + 138 3176 1701 + 1701 3178 138 + 3179 3178 1701 + 3177 2423 1293 + 2423 3177 3180 + 3181 2423 3180 + 3177 3176 3180 + 1272 1271 3182 + 3182 1271 3183 + 3183 3184 3182 + 3185 3182 3184 + 3182 3185 2460 + 3186 3182 2460 + 3182 3186 3187 + 1277 3183 1271 + 2451 3183 1277 + 3183 2451 3184 + 3184 2451 2450 + 2450 3188 3184 + 3184 3188 3185 + 2448 3185 3188 + 2448 2460 3185 + 2449 3188 2450 + 3188 2449 2448 + 3186 2460 2459 + 2459 3189 3186 + 1272 3186 3189 + 3189 1273 1272 + 3190 1273 3189 + 1273 3190 1265 + 3191 3189 2459 + 3189 3191 3190 + 3190 3191 3192 + 3192 3193 3190 + 1265 3190 3193 + 3194 1265 3193 + 1254 1265 3194 + 3194 1255 1254 + 2459 2458 3191 + 3192 3191 2458 + 2458 2469 3192 + 2474 3192 2469 + 3193 3192 2474 + 3193 2474 2473 + 2473 3195 3193 + 3193 3195 3194 + 3196 3194 3195 + 1255 3194 3196 + 3196 1256 1255 + 1256 3196 3197 + 3197 3198 1256 + 1256 3198 1248 + 3199 3195 2473 + 3195 3200 3196 + 3196 3200 2567 + 2567 3197 3196 + 2566 3197 2567 + 3198 3197 2566 + 2566 2576 3198 + 3198 2576 3201 + 3201 1248 3198 + 1248 3201 1243 + 1243 3201 2582 + 2582 1244 1243 + 3202 1244 2582 + 1244 3202 1236 + 2582 3201 2576 + 2582 2581 3202 + 3202 2581 2580 + 2580 2595 3202 + 1236 3202 2595 + 2595 2600 1236 + 1231 1236 2600 + 2600 2599 1231 + 1231 2599 1224 + 1225 1224 2599 + 2599 2598 1225 + 1226 1225 2598 + 2598 2604 1226 + 3203 1226 2604 + 1219 1226 3203 + 1219 3203 3204 + 3204 1220 1219 + 1220 3204 3205 + 1220 3205 1221 + 2604 2603 3203 + 3204 3203 2603 + 2603 2608 3204 + 3205 3204 2608 + 2608 3206 3205 + 1221 3205 3206 + 3206 3207 1221 + 3208 1221 3207 + 1221 3208 1213 + 1213 3208 3209 + 3209 1214 1213 + 2607 3206 2608 + 3206 2607 3210 + 3210 3207 3206 + 3207 3210 3211 + 3211 3212 3207 + 3207 3212 3208 + 3209 3208 3212 + 2613 3210 2607 + 3211 3210 2613 + 2613 3213 3211 + 3211 3213 3214 + 3214 3215 3211 + 3212 3211 3215 + 3215 3216 3212 + 3212 3216 3209 + 3213 2613 2617 + 2617 3217 3213 + 3213 3217 3218 + 3218 3214 3213 + 3219 3214 3218 + 3214 3219 3220 + 3220 3215 3214 + 3216 3215 3220 + 3217 2617 3221 + 3221 3222 3217 + 3218 3217 3222 + 3222 3223 3218 + 3224 3218 3223 + 3218 3224 3219 + 3225 3221 2617 + 3226 3221 3225 + 3221 3226 3227 + 3227 3222 3221 + 3222 3227 3228 + 3228 3223 3222 + 2617 2616 3225 + 2615 3225 2616 + 3229 3225 2615 + 3225 3229 3226 + 3226 3229 2097 + 3230 3226 2097 + 3227 3226 3230 + 3230 3231 3227 + 3228 3227 3231 + 2615 3232 3229 + 3229 3232 3233 + 3233 2097 3229 + 3232 2615 2614 + 2614 142 3232 + 3233 3232 142 + 2097 2101 3230 + 3234 3230 2101 + 3231 3230 3234 + 3234 3235 3231 + 3231 3235 3236 + 3236 3237 3231 + 3231 3237 3228 + 3238 3228 3237 + 3223 3228 3238 + 2101 2100 3234 + 3239 3234 2100 + 3235 3234 3239 + 3239 3240 3235 + 3235 3240 3241 + 3235 3241 3236 + 3241 3242 3236 + 3243 3236 3242 + 3236 3243 3244 + 3244 3237 3236 + 3237 3244 3238 + 3245 3238 3244 + 3246 3238 3245 + 3238 3246 3223 + 3241 3247 3242 + 3247 3248 3242 + 3242 3248 3249 + 3242 3249 3243 + 3243 3249 3250 + 3250 3251 3243 + 3251 3252 3243 + 3244 3243 3252 + 3252 3253 3244 + 3244 3253 3245 + 3254 3245 3253 + 3255 3245 3254 + 3245 3255 3246 + 3251 3256 3252 + 3256 3257 3252 + 3252 3257 3258 + 3258 3253 3252 + 3253 3258 3254 + 3259 3254 3258 + 3260 3254 3259 + 3254 3260 3255 + 3257 3256 3261 + 3223 3246 3224 + 3262 3224 3246 + 3219 3224 3262 + 3262 3263 3219 + 3219 3263 3264 + 3220 3219 3264 + 3246 3255 3262 + 3265 3262 3255 + 3263 3262 3265 + 3263 3265 3266 + 3266 3264 3263 + 3255 3260 3265 + 3266 3265 3260 + 3260 3267 3266 + 3268 3266 3267 + 3264 3266 3268 + 3268 3269 3264 + 3264 3269 3270 + 3270 3271 3264 + 3264 3271 3220 + 3259 3267 3260 + 3267 3259 3272 + 3272 3273 3267 + 3267 3273 3268 + 3268 3273 3274 + 3274 3275 3268 + 3269 3268 3275 + 3272 3259 3276 + 3276 3277 3272 + 3272 3277 3278 + 3279 3272 3278 + 3273 3272 3279 + 3279 3274 3273 + 3258 3276 3259 + 3280 3276 3258 + 3277 3276 3280 + 3280 3281 3277 + 3277 3281 3282 + 3282 3278 3277 + 3258 3257 3280 + 3283 3280 3257 + 1102 1101 1109 + 1109 3284 1102 + 1102 3284 3285 + 1103 1102 3285 + 3286 1103 3285 + 3287 1103 3286 + 3287 1097 1103 + 1097 3287 3288 + 3288 1098 1097 + 1092 1098 3288 + 3289 3286 3285 + 3290 3286 3289 + 3290 3291 3286 + 3286 3291 3287 + 3288 3287 3291 + 3285 3292 3289 + 3293 3289 3292 + 3294 3289 3293 + 3289 3294 3290 + 3290 3294 3295 + 3295 3296 3290 + 3291 3290 3296 + 3297 3292 3285 + 3297 3298 3292 + 3292 3298 3293 + 3285 3299 3297 + 3297 3299 3300 + 3300 3301 3297 + 3298 3297 3301 + 3301 3302 3298 + 3293 3298 3302 + 3303 3299 3285 + 3299 3303 3304 + 3304 3305 3299 + 3299 3305 3306 + 3305 3307 3306 + 3308 3307 3305 + 3285 3309 3303 + 3303 3309 3310 + 3310 3311 3303 + 3304 3303 3311 + 3311 3312 3304 + 3313 3304 3312 + 3305 3304 3313 + 3305 3313 3308 + 3309 3285 3314 + 3314 3315 3309 + 3309 3315 3316 + 3316 3310 3309 + 3317 3310 3316 + 3311 3310 3317 + 3311 3317 3318 + 3318 3312 3311 + 3319 3312 3318 + 3312 3319 3313 + 3308 3313 3319 + 3315 3320 3316 + 3320 3321 3316 + 3316 3321 3322 + 3316 3322 3317 + 3317 3322 3323 + 3318 3317 3323 + 3324 3318 3323 + 3319 3318 3324 + 3325 3320 3315 + 3320 3325 3326 + 3326 3327 3320 + 3321 3320 3327 + 3328 3321 3327 + 3322 3321 3328 + 3328 3329 3322 + 3322 3329 3323 + 3326 3325 3330 + 3327 3326 3331 + 1020 1019 3332 + 3332 3333 1020 + 3334 1020 3333 + 1020 3334 3335 + 3335 1021 1020 + 3336 3333 3332 + 3333 3336 3337 + 3337 3338 3333 + 3333 3338 3334 + 3334 3338 3339 + 3339 3340 3334 + 3335 3334 3340 + 3332 1027 3336 + 1027 3341 3336 + 3337 3336 3342 + 3342 3343 3337 + 3344 3337 3343 + 3338 3337 3344 + 3344 3339 3338 + 3339 3344 3345 + 3345 3346 3339 + 3339 3346 3347 + 3347 3340 3339 + 3340 3347 3348 + 3348 3349 3340 + 3340 3349 3335 + 3350 3335 3349 + 1021 3335 3350 + 3346 3345 3351 + 3351 3352 3346 + 3347 3346 3352 + 3353 3347 3352 + 3348 3347 3353 + 3353 3354 3348 + 3348 3354 3355 + 3355 3356 3348 + 3349 3348 3356 + 3357 3352 3351 + 3352 3357 3358 + 3358 3359 3352 + 3352 3359 3353 + 3360 3353 3359 + 3353 3360 3361 + 3361 3354 3353 + 3354 3361 3362 + 3362 3355 3354 + 3363 3358 3357 + 3364 3358 3363 + 3358 3364 3365 + 3365 3359 3358 + 3359 3365 3360 + 3360 3365 3366 + 3366 3367 3360 + 3361 3360 3367 + 3363 3368 3364 + 3369 3364 3368 + 3365 3364 3369 + 3369 3370 3365 + 3371 3370 3369 + 3368 3363 3372 + 3372 3373 3368 + 3368 3373 3374 + 3374 3375 3368 + 3368 3375 3369 + 3376 3369 3375 + 3372 3363 3377 + 3377 3378 3372 + 3379 3372 3378 + 3373 3372 3379 + 3379 3380 3373 + 3373 3380 3381 + 3381 3374 3373 + 3382 3374 3381 + 3375 3374 3382 + 3375 3382 3376 + 3376 3382 3383 + 3384 3376 3383 + 3378 3385 3379 + 3386 3379 3385 + 3380 3379 3386 + 3386 3387 3380 + 3380 3387 3388 + 3388 3389 3380 + 3380 3389 3381 + 3390 3385 3378 + 3391 3385 3390 + 3385 3391 3386 + 3386 3391 3392 + 3392 3393 3386 + 3387 3386 3393 + 3393 3394 3387 + 3387 3394 3395 + 3378 3396 3390 + 3397 3390 3396 + 3398 3390 3397 + 3390 3398 3391 + 3391 3398 3399 + 3399 3392 3391 + 3396 3378 3400 + 3401 3388 3387 + 3381 3383 3382 + 3383 3381 3402 + 3383 3402 3403 + 3403 3404 3383 + 3383 3404 3384 + 3402 3381 3389 + 3389 3405 3402 + 3402 3405 3406 + 3403 3402 3406 + 3406 3407 3403 + 3408 3403 3407 + 3403 3408 3409 + 3409 3404 3403 + 3389 3388 3405 + 3405 3388 3410 + 3410 3406 3405 + 972 533 532 + 3411 533 972 + 3412 3413 3414 + 3414 3415 3412 + 3412 3415 3416 + 3416 3417 3412 + 3418 3417 3416 + 3418 3416 3419 + 3419 3420 3418 + 3418 3420 3421 + 3420 3419 3422 + 3420 3422 3423 + 3422 3424 3423 + 3425 3426 181 + 181 3426 3427 + 3427 3428 181 + 3427 3429 3428 + 3430 3431 3432 + 3430 3432 3433 + 3433 3434 3430 + 3430 3434 3435 + 3436 3430 3435 + 3437 3430 3436 + 3436 3438 3437 + 3437 3438 3439 + 3440 3434 3433 + 3434 3440 3441 + 3441 3435 3434 + 3433 3442 3440 + 3440 3442 3443 + 3443 3444 3440 + 3445 3440 3444 + 3445 3441 3440 + 3443 3442 3446 + 3443 3446 410 + 410 409 3443 + 3447 3443 409 + 409 408 3447 + 3448 3447 408 + 3442 3449 3446 + 3450 3444 3443 + 3444 3450 3451 + 3444 3451 3445 + 3452 3445 3451 + 3452 3453 3445 + 3445 3453 3454 + 3454 3455 3445 + 3456 3455 3454 + 3450 3457 3451 + 3458 3451 3457 + 3451 3458 3452 + 3452 3458 472 + 3459 3452 472 + 3453 3452 3459 + 473 3457 3450 + 3458 3457 473 + 473 472 3458 + 3460 3461 3462 + 3460 3462 3463 + 3463 3464 3460 + 3460 3464 3465 + 3466 3463 3462 + 3467 3463 3466 + 3464 3463 3467 + 3464 3467 3468 + 3468 3469 3464 + 3469 3468 3470 + 3470 3471 3469 + 3472 3466 3462 + 3473 3466 3472 + 3474 3466 3473 + 3466 3474 3467 + 3474 3475 3467 + 3475 3468 3467 + 3470 3468 3475 + 3462 3476 3472 + 3476 3477 3472 + 3472 3477 3478 + 3472 3478 3473 + 3473 3478 3479 + 3480 3473 3479 + 3474 3473 3480 + 3480 3475 3474 + 3481 3475 3480 + 3475 3481 3470 + 3477 3476 3482 + 3483 3477 3482 + 3478 3477 3483 + 3483 3484 3478 + 3478 3484 3479 + 3476 3485 3482 + 3486 3482 3485 + 3482 3486 3487 + 3482 3487 3488 + 3488 3489 3482 + 3482 3489 3483 + 3490 3485 3476 + 3490 3491 3485 + 3485 3491 3486 + 3492 3486 3491 + 3487 3486 3492 + 3492 3493 3487 + 3488 3487 3493 + 3476 3494 3490 + 3490 3494 3495 + 3496 3490 3495 + 3491 3490 3496 + 3496 3497 3491 + 3491 3497 3492 + 3498 3492 3497 + 3492 3498 3493 + 3499 3496 3495 + 3500 3496 3499 + 3496 3500 3497 + 3497 3500 3498 + 3501 3498 3500 + 3493 3498 3501 + 3501 3502 3493 + 3493 3502 3503 + 3503 3504 3493 + 3504 3488 3493 + 3499 3505 3500 + 3500 3505 3501 + 3505 3506 3501 + 3507 3501 3506 + 3501 3507 3502 + 3502 3507 3508 + 3508 3509 3502 + 3502 3509 3503 + 3510 3505 3499 + 3505 3510 3511 + 3511 3506 3505 + 3511 3512 3506 + 3506 3512 3507 + 3508 3507 3512 + 3512 3513 3508 + 3514 3508 3513 + 3508 3514 3509 + 3509 3514 3515 + 3515 3516 3509 + 3509 3516 3503 + 3512 3511 3517 + 3517 3513 3512 + 3517 3308 3513 + 3513 3308 3514 + 3514 3308 3319 + 3515 3514 3319 + 3319 3518 3515 + 3519 3515 3518 + 3515 3519 3516 + 3517 3511 3520 + 3324 3518 3319 + 3521 3518 3324 + 3518 3521 3519 + 3522 3519 3521 + 3516 3519 3522 + 3522 3523 3516 + 3516 3523 3503 + 3521 3324 3524 + 3524 3525 3521 + 3521 3525 3526 + 3526 182 3521 + 182 3522 3521 + 3527 3522 182 + 3522 3527 3523 + 3323 3524 3324 + 3528 3524 3323 + 3528 3525 3524 + 3525 3528 3529 + 3529 3526 3525 + 3526 3529 1157 + 1157 3530 3526 + 182 3526 3530 + 3531 182 3530 + 3323 3532 3528 + 3529 3528 3532 + 3532 3533 3529 + 1157 3529 3533 + 3533 1152 1157 + 1149 1152 3533 + 3534 3532 3323 + 3532 3534 3535 + 3535 3533 3532 + 3533 3535 1149 + 1149 3535 3536 + 3536 3537 1149 + 3538 3537 3536 + 3536 1136 3538 + 3534 3323 3539 + 3539 3540 3534 + 3534 3540 3536 + 3536 3535 3534 + 3541 3539 3323 + 1137 3539 3541 + 1137 3540 3539 + 3540 1137 1136 + 1136 3536 3540 + 3542 3541 3323 + 3543 3541 3542 + 3543 1138 3541 + 3541 1138 1137 + 3544 3542 3323 + 3545 3542 3544 + 3545 3546 3542 + 3542 3546 3543 + 3543 3546 1126 + 1126 1133 3543 + 1138 3543 1133 + 3547 3544 3323 + 3548 3544 3547 + 3548 3549 3544 + 3544 3549 3545 + 3545 3549 3550 + 3550 1127 3545 + 1127 3546 3545 + 3546 1127 1126 + 3329 3547 3323 + 3551 3547 3329 + 3551 3552 3547 + 3547 3552 3548 + 3548 3552 3553 + 3548 3553 3554 + 3549 3548 3554 + 3554 3550 3549 + 3550 3554 3555 + 3329 3556 3551 + 3551 3556 3557 + 3552 3551 3557 + 3557 3553 3552 + 3558 3553 3557 + 3553 3558 1425 + 1425 3554 3553 + 3328 3556 3329 + 3556 3328 3327 + 3327 3559 3556 + 3556 3559 3557 + 3558 3557 3559 + 3559 3560 3558 + 3561 3559 3327 + 3530 1157 1156 + 1156 3562 3530 + 3530 3562 3563 + 3563 3564 3530 + 3565 3564 3563 + 1161 3562 1156 + 3562 1161 3566 + 3566 3563 3562 + 3563 3566 3567 + 3567 3568 3563 + 3563 3568 3565 + 3565 3568 3569 + 3569 3570 3565 + 3571 3570 3569 + 1165 3566 1161 + 3567 3566 1165 + 1165 1169 3567 + 3567 1169 3572 + 3572 3573 3567 + 3568 3567 3573 + 3573 3569 3568 + 3569 3573 3574 + 3574 3575 3569 + 3569 3575 3571 + 1174 3572 1169 + 3576 3572 1174 + 3572 3576 3574 + 3574 3573 3572 + 3576 1174 1173 + 1173 3577 3576 + 3574 3576 3577 + 3577 3578 3574 + 3575 3574 3578 + 3578 3579 3575 + 3575 3579 3580 + 3580 3571 3575 + 3571 3580 3581 + 3582 3571 3581 + 3583 3577 1173 + 3577 3583 3584 + 3584 3578 3577 + 3579 3578 3584 + 3584 3585 3579 + 3579 3585 3586 + 3586 3587 3579 + 3579 3587 3580 + 1173 1188 3583 + 3583 1188 3588 + 3588 3589 3583 + 3584 3583 3589 + 3589 3590 3584 + 3585 3584 3590 + 3590 3591 3585 + 3586 3585 3591 + 3591 3592 3586 + 3593 3592 3591 + 1193 3588 1188 + 3594 3588 1193 + 3594 3589 3588 + 3589 3594 3595 + 3595 3590 3589 + 3591 3590 3595 + 3595 3596 3591 + 3591 3596 3593 + 3597 3593 3596 + 3596 3598 3597 + 3599 3597 3598 + 1193 3600 3594 + 3595 3594 3600 + 3600 3601 3595 + 3596 3595 3601 + 3601 3598 3596 + 3598 3601 3602 + 3602 231 3598 + 3598 231 3599 + 3603 3600 1193 + 3600 3603 3602 + 3602 3601 3600 + 1193 3604 3603 + 3603 3604 3605 + 3605 3606 3603 + 3602 3603 3606 + 3606 3607 3602 + 231 3602 3607 + 3607 3608 231 + 231 3608 3609 + 3604 1193 1192 + 1192 3610 3604 + 3604 3610 3611 + 3611 3605 3604 + 3612 3605 3611 + 3612 3606 3605 + 3606 3612 3613 + 3613 3607 3606 + 3608 3607 3613 + 1191 3610 1192 + 3610 1191 3614 + 3614 3615 3610 + 3610 3615 3611 + 3616 3611 3615 + 3611 3616 3617 + 3617 3618 3611 + 3611 3618 3612 + 3613 3612 3618 + 1197 3614 1191 + 1202 3614 1197 + 3615 3614 1202 + 1202 3619 3615 + 3615 3619 3616 + 3620 3616 3619 + 3617 3616 3620 + 3620 3621 3617 + 3622 3617 3621 + 3618 3617 3622 + 3622 3623 3618 + 3618 3623 3613 + 3619 1202 3624 + 3624 3625 3619 + 3619 3625 3620 + 3626 3620 3625 + 3620 3626 3627 + 3627 3621 3620 + 1201 3624 1202 + 3628 3624 1201 + 3625 3624 3628 + 3628 3629 3625 + 3625 3629 3626 + 3626 3629 3630 + 3630 3631 3626 + 3627 3626 3631 + 1201 3632 3628 + 3628 3632 3633 + 3633 3634 3628 + 3629 3628 3634 + 3634 3635 3629 + 3629 3635 3630 + 3632 1201 1200 + 1200 3636 3632 + 3632 3636 3637 + 3637 3633 3632 + 3638 3633 3637 + 3633 3638 3639 + 3639 3634 3633 + 3635 3634 3639 + 3636 1200 1206 + 1206 3640 3636 + 3637 3636 3640 + 3640 3641 3637 + 3641 3642 3637 + 3638 3637 3642 + 3642 3643 3638 + 3638 3643 3644 + 3644 3639 3638 + 1211 3640 1206 + 3640 1211 3645 + 3645 3641 3640 + 3641 3645 3646 + 3646 3647 3641 + 3641 3647 3648 + 3648 3642 3641 + 3642 3648 3649 + 3649 3643 3642 + 3645 1211 1216 + 1216 3650 3645 + 3646 3645 3650 + 3650 3651 3646 + 3651 3652 3646 + 3652 3647 3646 + 3647 3652 3653 + 3648 3647 3653 + 3649 3648 3653 + 3654 3650 1216 + 3650 3654 3652 + 3652 3655 3650 + 1216 1215 3654 + 3654 1215 3656 + 3656 3657 3654 + 3652 3654 3657 + 3657 3653 3652 + 3653 3657 3658 + 3658 3659 3653 + 3653 3659 3649 + 1215 3660 3656 + 3661 3656 3660 + 3656 3661 3662 + 3656 3662 3658 + 3658 3657 3656 + 1214 3660 1215 + 3660 1214 3209 + 3209 3663 3660 + 3660 3663 3661 + 3661 3663 3664 + 3664 3665 3661 + 3662 3661 3665 + 3665 3666 3662 + 3662 3666 3667 + 3667 3658 3662 + 3659 3658 3667 + 3663 3209 3216 + 3216 3664 3663 + 3220 3664 3216 + 3664 3220 3271 + 3271 3665 3664 + 3665 3271 3270 + 3270 3666 3665 + 3666 3270 3668 + 3668 3667 3666 + 3667 3668 3669 + 3669 3670 3667 + 3667 3670 3659 + 3649 3659 3670 + 3670 3671 3649 + 3643 3649 3671 + 3668 3270 3269 + 3672 3668 3269 + 3669 3668 3672 + 3672 3673 3669 + 3669 3673 3674 + 3674 3675 3669 + 3670 3669 3675 + 3675 3671 3670 + 3269 3676 3672 + 3677 3672 3676 + 3672 3677 3678 + 3678 3673 3672 + 3673 3678 3679 + 3679 3674 3673 + 3275 3676 3269 + 3676 3275 3680 + 3676 3680 3677 + 3681 3677 3680 + 3678 3677 3681 + 3681 3682 3678 + 3679 3678 3682 + 3682 3683 3679 + 3684 3679 3683 + 3674 3679 3684 + 3680 3275 3274 + 3274 3685 3680 + 3680 3685 3681 + 3686 3681 3685 + 3681 3686 3687 + 3687 3682 3681 + 3682 3687 3688 + 3688 3683 3682 + 3689 3685 3274 + 3685 3689 3686 + 3686 3689 3690 + 3690 3691 3686 + 3687 3686 3691 + 3691 3692 3687 + 3687 3692 3693 + 3688 3687 3693 + 3274 3279 3689 + 3689 3279 3694 + 3694 3690 3689 + 3695 3690 3694 + 3690 3695 3696 + 3696 3691 3690 + 3692 3691 3696 + 3697 3694 3279 + 3695 3694 3697 + 3697 3698 3695 + 3698 3699 3695 + 3699 3700 3695 + 3700 3701 3695 + 3278 3697 3279 + 3702 3697 3278 + 3702 3698 3697 + 3698 3702 3703 + 3703 3699 3698 + 3704 3699 3703 + 3699 3704 3705 + 3705 3700 3699 + 3706 3700 3705 + 3700 3706 3701 + 3706 3707 3701 + 3278 3708 3702 + 3708 3703 3702 + 3708 3278 3282 + 3282 3709 3708 + 3708 3709 3710 + 3710 3711 3708 + 3711 3710 3712 + 3709 3282 3713 + 3713 3714 3709 + 3709 3714 3715 + 3716 3713 3282 + 3282 3281 3716 + 3281 3717 3716 + 3717 3281 3280 + 3718 3717 3280 + 3719 3714 3713 + 3705 3720 3706 + 3706 3720 3721 + 3721 3722 3706 + 3707 3706 3722 + 3723 3707 3722 + 3721 3724 3722 + 3722 3724 3723 + 3724 3725 3723 + 3723 3725 3726 + 3723 3726 3692 + 3692 3727 3723 + 3696 3727 3692 + 3726 3725 3438 + 3438 3693 3726 + 3692 3726 3693 + 3693 3438 3436 + 3693 3436 3456 + 3456 3728 3693 + 3693 3728 3688 + 3729 3688 3728 + 3683 3688 3729 + 3729 3730 3683 + 3683 3730 3684 + 3454 3728 3456 + 3728 3454 3729 + 3729 3454 3453 + 3453 3731 3729 + 3730 3729 3731 + 3731 3732 3730 + 3730 3732 3733 + 3733 3684 3730 + 3734 3684 3733 + 3684 3734 3674 + 3459 3731 3453 + 3732 3731 3459 + 3459 3735 3732 + 3732 3735 3736 + 3736 3733 3732 + 3733 3736 3737 + 3733 3737 3734 + 3734 3737 3738 + 3739 3734 3738 + 3674 3734 3739 + 3739 3675 3674 + 3735 3459 3740 + 3740 3741 3735 + 3735 3741 3742 + 3742 3736 3735 + 3737 3736 3742 + 3742 3738 3737 + 3740 3459 472 + 472 3743 3740 + 3744 3740 3743 + 3741 3740 3744 + 3744 3745 3741 + 3741 3745 3746 + 3746 3742 3741 + 3738 3742 3746 + 479 3743 472 + 3747 3743 479 + 3743 3747 3744 + 3744 3747 3748 + 3748 3749 3744 + 3745 3744 3749 + 3749 3750 3745 + 3746 3745 3750 + 479 3751 3747 + 3747 3751 3752 + 3752 3748 3747 + 3753 3748 3752 + 3748 3753 3754 + 3754 3749 3748 + 3750 3749 3754 + 3751 479 3755 + 3755 3756 3751 + 3752 3751 3757 + 3671 3675 3739 + 3739 3644 3671 + 3671 3644 3643 + 3644 3739 3758 + 3758 3639 3644 + 3639 3758 3635 + 3635 3758 3738 + 3738 3630 3635 + 3738 3758 3739 + 3746 3630 3738 + 3630 3746 3759 + 3759 3631 3630 + 3759 3760 3631 + 3631 3760 3627 + 3761 3627 3760 + 3621 3627 3761 + 3750 3759 3746 + 3760 3759 3750 + 3750 3762 3760 + 3760 3762 3761 + 3763 3761 3762 + 3761 3763 3764 + 3764 3765 3761 + 3761 3765 3621 + 3621 3765 3622 + 3754 3762 3750 + 3762 3754 3763 + 3766 3763 3754 + 3764 3763 3766 + 3766 3767 3764 + 3764 3767 3768 + 3768 3769 3764 + 3765 3764 3769 + 3769 3622 3765 + 3622 3769 3770 + 3770 3623 3622 + 3754 3753 3766 + 3771 3766 3753 + 3767 3766 3771 + 3771 3772 3767 + 3767 3772 3773 + 3773 3768 3767 + 3774 3768 3773 + 3768 3774 3770 + 3770 3769 3768 + 3753 3775 3771 + 3771 3775 3776 + 3776 3777 3771 + 3777 3778 3771 + 3772 3771 3778 + 3778 3779 3772 + 3773 3772 3779 + 3779 3780 3773 + 3752 3775 3753 + 3775 3752 3781 + 3781 3776 3775 + 3782 3781 3752 + 3778 3783 3779 + 3779 3783 3784 + 3784 3785 3779 + 3786 3609 3608 + 3608 3787 3786 + 3786 3787 3770 + 3770 3774 3786 + 3774 3788 3786 + 3789 3786 3788 + 3613 3787 3608 + 3787 3613 3623 + 3623 3770 3787 + 3790 3582 3581 + 3527 3790 3581 + 182 3790 3527 + 3581 3791 3527 + 3523 3527 3791 + 3791 3792 3523 + 3523 3792 3503 + 3793 3791 3581 + 3791 3793 3792 + 3792 3793 3794 + 3794 3503 3792 + 3794 3795 3503 + 3503 3795 3796 + 3796 3504 3503 + 3581 3797 3793 + 3797 3794 3793 + 3794 3797 3798 + 3795 3794 3798 + 3796 3795 3798 + 3799 3796 3798 + 3800 3796 3799 + 3796 3800 3504 + 3504 3800 3801 + 3801 3488 3504 + 3798 3797 3581 + 3581 3580 3798 + 3802 3798 3580 + 3798 3802 3799 + 3803 3799 3802 + 3803 3804 3799 + 3799 3804 3800 + 3801 3800 3804 + 3587 3802 3580 + 3587 3586 3802 + 3802 3586 3803 + 3805 3803 3586 + 3804 3806 3801 + 3806 3807 3801 + 3807 3808 3801 + 3489 3801 3808 + 3801 3489 3488 + 3809 3807 3806 + 3807 3809 3810 + 3807 3810 3484 + 3484 3808 3807 + 3483 3808 3484 + 3808 3483 3489 + 3806 3811 3809 + 3812 3809 3811 + 3810 3809 3812 + 3812 3813 3810 + 3810 3813 3479 + 3484 3810 3479 + 3811 3814 3812 + 3814 3815 3812 + 3816 3812 3815 + 3812 3816 3813 + 3813 3816 3817 + 3817 3479 3813 + 3815 3414 3816 + 3817 3816 3414 + 3414 3818 3817 + 3819 3817 3818 + 3817 3819 3479 + 3414 3820 3818 + 3820 3821 3818 + 3822 3823 3824 + 3822 3824 779 + 779 1015 3822 + 3825 3822 1015 + 3826 3822 3825 + 3825 3827 3826 + 3825 1015 671 + 670 3825 671 + 3825 670 3827 + 3827 670 669 + 669 668 3827 + 3828 3827 668 + 3829 3830 3831 + 3831 3830 3832 + 3832 3833 3831 + 3831 3833 3834 + 3834 3835 3831 + 3836 3831 3835 + 3832 3837 3833 + 3833 3837 3838 + 3838 3834 3833 + 3839 3834 3838 + 3834 3839 3840 + 3840 3835 3834 + 3837 3832 3841 + 3841 3842 3837 + 3837 3842 3843 + 3843 3838 3837 + 3844 3838 3843 + 3838 3844 3839 + 3841 3832 3845 + 3846 3847 3848 + 3847 3846 3849 + 3849 3850 3847 + 3847 3850 3851 + 3852 3849 3846 + 3853 3849 3852 + 3850 3849 3853 + 3853 3854 3850 + 3850 3854 3855 + 3855 3856 3850 + 3857 3852 3846 + 3858 3852 3857 + 3859 3852 3858 + 3852 3859 3853 + 3860 3853 3859 + 3854 3853 3860 + 3860 3861 3854 + 196 3854 3861 + 3862 3857 3846 + 3863 3857 3862 + 3857 3863 3864 + 3864 3865 3857 + 3857 3865 3858 + 3858 3865 3866 + 3859 3858 3866 + 3846 3867 3862 + 3868 3862 3867 + 3862 3868 3869 + 3862 3869 3863 + 3870 3863 3869 + 3864 3863 3870 + 3871 3867 3846 + 11 3867 3871 + 3867 11 3868 + 3872 3868 11 + 3869 3868 3872 + 3872 3873 3869 + 3869 3873 3870 + 3846 3874 3871 + 3871 3874 3875 + 3876 3871 3875 + 3877 3871 3876 + 3878 3874 3846 + 3874 3878 3879 + 3879 3875 3874 + 3880 3875 3879 + 3875 3880 3881 + 3881 3882 3875 + 3875 3882 3883 + 3883 3884 3875 + 3884 3876 3875 + 3880 3879 3885 + 3885 3886 3880 + 3880 3886 3887 + 3887 3881 3880 + 3888 3881 3887 + 3881 3888 3882 + 3882 3888 235 + 235 3883 3882 + 3889 3886 3885 + 3886 3889 27 + 27 3887 3886 + 237 3887 27 + 3885 3890 3889 + 3889 3890 3891 + 3891 3892 3889 + 27 3889 3892 + 3893 27 3892 + 3894 27 3893 + 3893 3895 3894 + 3890 3885 125 + 125 3896 3890 + 3891 3890 3896 + 3896 3897 3891 + 3898 3891 3897 + 3898 3892 3891 + 3892 3898 3899 + 3899 3900 3892 + 3892 3900 3893 + 3901 3896 125 + 3896 3901 3902 + 3902 3897 3896 + 3897 3902 3903 + 3903 3904 3897 + 3897 3904 3898 + 3898 3904 3899 + 125 3905 3901 + 3901 3905 3906 + 3906 3907 3901 + 3902 3901 3907 + 3907 3908 3902 + 3903 3902 3908 + 3905 125 3909 + 3909 3910 3905 + 3906 3905 3910 + 3910 3911 3906 + 3912 3906 3911 + 3906 3912 3913 + 3913 3907 3906 + 3909 125 3914 + 3887 3915 3888 + 3861 3916 196 + 3917 3916 3861 + 3918 3916 3917 + 3916 3918 197 + 197 3919 3916 + 3861 3920 3917 + 3917 3920 3921 + 3861 3860 3920 + 3920 3860 3922 + 3922 3923 3920 + 3922 3860 3859 + 3924 3922 3859 + 3925 3922 3924 + 3922 3925 3923 + 3923 3925 3926 + 3926 3927 3923 + 3923 3927 3928 + 3928 3917 3923 + 3859 3929 3924 + 3930 3924 3929 + 3924 3930 3931 + 3931 3932 3924 + 3924 3932 3925 + 3925 3932 3933 + 3933 3926 3925 + 3866 3929 3859 + 3934 3929 3866 + 3929 3934 3930 + 3930 3934 3935 + 3935 3936 3930 + 3931 3930 3936 + 3936 3937 3931 + 3938 3931 3937 + 3932 3931 3938 + 3866 3939 3934 + 3934 3939 3940 + 3940 3941 3934 + 3934 3941 3935 + 3939 3866 3865 + 3865 3864 3939 + 3940 3939 3864 + 3864 3942 3940 + 3943 3940 3942 + 3941 3940 3943 + 3943 3944 3941 + 3941 3944 3945 + 3945 3946 3941 + 3941 3946 3935 + 3870 3942 3864 + 3942 3870 3947 + 3947 3948 3942 + 3942 3948 3943 + 3943 3948 3949 + 3949 3950 3943 + 3944 3943 3950 + 3950 3951 3944 + 3945 3944 3951 + 3947 3870 3873 + 3873 3952 3947 + 3947 3952 3953 + 3953 3954 3947 + 3948 3947 3954 + 3954 3949 3948 + 3955 3949 3954 + 3949 3955 3956 + 3956 3950 3949 + 3952 3873 3872 + 3872 3957 3952 + 3952 3957 3958 + 3958 3953 3952 + 3959 3953 3958 + 3953 3959 3960 + 3960 3954 3953 + 3954 3960 3955 + 3957 3872 3961 + 3961 3962 3957 + 3957 3962 3963 + 3963 3964 3957 + 3964 3965 3957 + 3965 3958 3957 + 11 3961 3872 + 3966 3961 11 + 3966 3962 3961 + 3962 3966 3967 + 3967 3963 3962 + 3876 3963 3967 + 3963 3876 3884 + 3884 3964 3963 + 11 3877 3966 + 3877 3967 3966 + 3876 3967 3877 + 3968 3969 3970 + 3969 3968 3971 + 3971 3972 3969 + 3969 3972 3973 + 3973 3974 3969 + 3974 3975 3969 + 3976 3969 3975 + 3977 3971 3968 + 3978 3971 3977 + 3972 3971 3978 + 3978 3979 3972 + 3972 3979 3980 + 3980 3973 3972 + 3968 3981 3977 + 3982 3977 3981 + 3983 3977 3982 + 3977 3983 3978 + 3984 3978 3983 + 3979 3978 3984 + 3984 3985 3979 + 3980 3979 3985 + 3986 3981 3968 + 3987 3981 3986 + 3981 3987 3982 + 3982 3987 3988 + 3988 3989 3982 + 3983 3982 3989 + 3968 3976 3986 + 3990 3991 3992 + 3990 3992 3993 + 3993 3994 3990 + 3990 3994 3995 + 3995 3996 3990 + 3997 3990 3996 + 3998 3993 3992 + 3999 3993 3998 + 3993 3999 4000 + 4000 3994 3993 + 3994 4000 4001 + 4001 3995 3994 + 3049 3998 3992 + 3048 3998 3049 + 4002 3998 3048 + 3998 4002 3999 + 3999 4002 3056 + 3056 4003 3999 + 4000 3999 4003 + 3992 3050 3049 + 3051 3050 3992 + 3992 3997 3051 + 4004 4005 4006 + 4005 4004 4007 + 4007 4008 4005 + 4009 4005 4008 + 4010 4005 4009 + 4009 3028 4010 + 4009 4011 3028 + 4007 4004 4012 + 4013 4007 4012 + 4014 4007 4013 + 4014 4008 4007 + 4008 4014 4015 + 4015 4016 4008 + 4008 4016 4009 + 4016 4017 4009 + 4017 4018 4009 + 4011 4009 4018 + 4013 4019 4014 + 4015 4014 4019 + 4019 4020 4015 + 4021 4015 4020 + 4015 4021 4022 + 4022 4016 4015 + 4016 4022 4023 + 4023 4017 4016 + 4024 4019 4013 + 4019 4024 4025 + 4025 4020 4019 + 4026 4020 4025 + 4020 4026 4021 + 4021 4026 4027 + 4027 4028 4021 + 4022 4021 4028 + 4013 4029 4024 + 4024 4029 4030 + 4030 4031 4024 + 4024 4031 4032 + 4032 4025 4024 + 4033 4025 4032 + 4025 4033 4026 + 4029 4013 3829 + 3829 3836 4029 + 3836 4030 4029 + 3835 4030 3836 + 4031 4030 3835 + 3835 3840 4031 + 4031 3840 4034 + 4034 4032 4031 + 4035 4032 4034 + 4032 4035 4033 + 4033 4035 4036 + 4036 4037 4033 + 4026 4033 4037 + 4037 4027 4026 + 4038 4034 3840 + 4039 4034 4038 + 4034 4039 4035 + 4035 4039 4040 + 4040 4036 4035 + 4041 4036 4040 + 4036 4041 4042 + 4042 4037 4036 + 3840 3839 4038 + 4043 4038 3839 + 4044 4038 4043 + 4038 4044 4039 + 4039 4044 4045 + 4045 4040 4039 + 4046 4040 4045 + 4040 4046 4041 + 3839 3844 4043 + 4047 4043 3844 + 4048 4043 4047 + 4043 4048 4044 + 4044 4048 4049 + 4049 4045 4044 + 4050 4045 4049 + 4045 4050 4046 + 3844 4051 4047 + 4052 4047 4051 + 4053 4047 4052 + 4047 4053 4048 + 4048 4053 4054 + 4054 4049 4048 + 4055 4049 4054 + 4049 4055 4050 + 3843 4051 3844 + 4051 3843 4056 + 4056 4057 4051 + 4051 4057 4052 + 4052 4057 4058 + 4059 4052 4058 + 4060 4052 4059 + 4052 4060 4053 + 4056 3843 3842 + 3842 4061 4056 + 4062 4056 4061 + 4057 4056 4062 + 4062 4058 4057 + 4062 4063 4058 + 4058 4063 4064 + 4064 4065 4058 + 4058 4065 4059 + 4066 4061 3842 + 4061 4066 4067 + 4067 4068 4061 + 4061 4068 4062 + 4063 4062 4068 + 3842 3841 4066 + 4066 3841 3032 + 3032 3046 4066 + 4066 3046 4069 + 4069 4067 4066 + 4070 4067 4069 + 4067 4070 4071 + 4071 4068 4067 + 4068 4071 4063 + 3032 3841 4072 + 3045 4069 3046 + 4069 3045 3052 + 3052 4073 4069 + 4069 4073 4070 + 4074 4070 4073 + 4071 4070 4074 + 4074 4075 4071 + 4063 4071 4075 + 4075 4076 4063 + 4076 4064 4063 + 4077 4064 4076 + 4064 4077 4065 + 4073 3052 4078 + 4078 4079 4073 + 4073 4079 4074 + 4080 4074 4079 + 4074 4080 4081 + 4081 4075 4074 + 4075 4081 4082 + 4082 4076 4075 + 4078 3052 4083 + 4084 4085 4086 + 4086 4085 4087 + 4087 4088 4086 + 4089 4088 4087 + 4088 4089 4090 + 4090 4091 4088 + 4092 4088 4091 + 4093 4087 4085 + 4094 4087 4093 + 4087 4094 4089 + 4089 4094 4095 + 4095 4096 4089 + 4090 4089 4096 + 4085 4097 4093 + 4098 4093 4097 + 4099 4093 4098 + 4093 4099 4094 + 4094 4099 4100 + 4095 4094 4100 + 4101 4097 4085 + 4097 4101 4102 + 4102 4103 4097 + 4097 4103 4098 + 4104 4098 4103 + 4105 4098 4104 + 4098 4105 4099 + 4085 4106 4101 + 4091 4107 4092 + 4108 4109 4110 + 4110 4109 4111 + 4111 4112 4110 + 4113 4110 4112 + 4114 4110 4113 + 4110 4114 4115 + 4116 4111 4109 + 4117 4111 4116 + 4111 4117 4118 + 4118 4112 4111 + 4112 4118 4119 + 4119 4120 4112 + 4112 4120 4113 + 4109 4121 4116 + 4122 4116 4121 + 4123 4116 4122 + 4116 4123 4117 + 4124 4117 4123 + 4118 4117 4124 + 4124 4125 4118 + 4119 4118 4125 + 4126 4121 4109 + 4109 4127 4126 + 4126 4127 4128 + 4128 4129 4126 + 4130 4126 4129 + 4131 4126 4130 + 3946 4129 4128 + 4129 3946 3945 + 4129 3945 4130 + 3951 4130 3945 + 4132 4130 3951 + 4130 4132 4121 + 4121 4132 4122 + 4128 3935 3946 + 3935 4128 4133 + 3935 4133 4134 + 4134 3936 3935 + 3936 4134 4135 + 4135 3937 3936 + 4133 4128 4136 + 4136 4114 4133 + 4133 4114 4137 + 4137 4134 4133 + 4135 4134 4137 + 4137 4138 4135 + 4139 4135 4138 + 3937 4135 4139 + 4139 4140 3937 + 3937 4140 3938 + 4113 4137 4114 + 4137 4113 4141 + 4141 4138 4137 + 4138 4141 4142 + 4142 4143 4138 + 4138 4143 4139 + 4144 4139 4143 + 4140 4139 4144 + 4141 4113 4120 + 4120 4145 4141 + 4142 4141 4145 + 4145 4146 4142 + 4147 4142 4146 + 4143 4142 4147 + 4147 4148 4143 + 4143 4148 4144 + 4149 4145 4120 + 4145 4149 4150 + 4150 4146 4145 + 4146 4150 4151 + 4151 4152 4146 + 4146 4152 4147 + 4153 4147 4152 + 4148 4147 4153 + 4120 4119 4149 + 4149 4119 4154 + 4154 4155 4149 + 4150 4149 4155 + 4155 4156 4150 + 4151 4150 4156 + 4156 4157 4151 + 4158 4151 4157 + 4152 4151 4158 + 4154 4119 4125 + 4125 4159 4154 + 4160 4154 4159 + 4154 4160 4161 + 4161 4155 4154 + 4155 4161 4162 + 4162 4156 4155 + 4156 4162 4163 + 4163 4157 4156 + 4164 4159 4125 + 4159 4164 4165 + 4159 4165 4160 + 4160 4165 4166 + 4167 4160 4166 + 4161 4160 4167 + 4167 4168 4161 + 4162 4161 4168 + 4125 4169 4164 + 4170 4164 4169 + 4165 4164 4170 + 4170 4166 4165 + 4124 4169 4125 + 4169 4124 4171 + 4171 4172 4169 + 4169 4172 4170 + 4172 4173 4170 + 4174 4170 4173 + 4166 4170 4174 + 4123 4171 4124 + 4175 4171 4123 + 4172 4171 4175 + 4175 4176 4172 + 4172 4176 4177 + 4177 4173 4172 + 4173 4177 4178 + 4178 4179 4173 + 4173 4179 4174 + 4123 4180 4175 + 4181 4175 4180 + 4176 4175 4181 + 4181 4182 4176 + 4177 4176 4182 + 4182 4183 4177 + 4183 4184 4177 + 4178 4177 4184 + 4122 4180 4123 + 4180 4122 4185 + 4185 4186 4180 + 4180 4186 4181 + 4187 4181 4186 + 4182 4181 4187 + 4187 4188 4182 + 4182 4188 4189 + 4189 4183 4182 + 4185 4122 4132 + 4132 4190 4185 + 4191 4185 4190 + 4186 4185 4191 + 4191 4192 4186 + 4186 4192 4187 + 4193 4187 4192 + 4188 4187 4193 + 3951 4190 4132 + 4190 3951 3950 + 3950 3956 4190 + 4190 3956 4191 + 4194 4191 3956 + 4192 4191 4194 + 4194 4195 4192 + 4192 4195 4193 + 4196 4193 4195 + 4197 4193 4196 + 4193 4197 4188 + 4188 4197 4198 + 4198 4189 4188 + 3956 3955 4194 + 4199 4194 3955 + 4195 4194 4199 + 4199 4200 4195 + 4195 4200 4196 + 4201 4196 4200 + 4202 4196 4201 + 4196 4202 4197 + 4197 4202 4203 + 4203 4198 4197 + 3955 3960 4199 + 4204 4199 3960 + 4200 4199 4204 + 4204 4205 4200 + 4200 4205 4201 + 4206 4201 4205 + 4207 4201 4206 + 4201 4207 4202 + 4202 4207 4208 + 4203 4202 4208 + 3960 3959 4204 + 4209 4204 3959 + 4205 4204 4209 + 4209 4210 4205 + 4205 4210 4206 + 4211 4206 4210 + 4212 4206 4211 + 4206 4212 4207 + 4207 4212 4213 + 4213 4208 4207 + 3959 4214 4209 + 4215 4209 4214 + 4210 4209 4215 + 4215 4216 4210 + 4210 4216 4211 + 4217 4211 4216 + 4218 4211 4217 + 4211 4218 4212 + 4213 4212 4218 + 3958 4214 3959 + 4214 3958 3965 + 3965 4219 4214 + 4214 4219 4215 + 4220 4215 4219 + 4216 4215 4220 + 4220 4221 4216 + 4216 4221 4217 + 4219 3965 4222 + 4222 4223 4219 + 4219 4223 4220 + 4224 4220 4223 + 4221 4220 4224 + 4224 4225 4221 + 4221 4225 4226 + 4217 4221 4226 + 4222 3965 3964 + 3964 4227 4222 + 4222 4227 4228 + 4229 4222 4228 + 4223 4222 4229 + 4229 4230 4223 + 4223 4230 4224 + 4231 4224 4230 + 4225 4224 4231 + 3884 4227 3964 + 4227 3884 3883 + 3883 4228 4227 + 235 4228 3883 + 4228 235 4232 + 4232 4233 4228 + 4228 4233 4229 + 4234 4229 4233 + 4230 4229 4234 + 4234 4235 4230 + 4230 4235 4231 + 4231 4235 4236 + 4237 4232 235 + 4238 4239 4240 + 4240 4241 4238 + 4238 4241 4242 + 4242 4243 4238 + 4244 4238 4243 + 4245 4238 4244 + 4244 4246 4245 + 4241 4240 4247 + 4247 4248 4241 + 4241 4248 4249 + 4249 4242 4241 + 4250 4242 4249 + 4242 4250 4251 + 4251 4243 4242 + 4247 4240 4252 + 4252 4253 4247 + 4254 4247 4253 + 4248 4247 4254 + 4254 4255 4248 + 4248 4255 4256 + 4256 4249 4248 + 4257 4252 4240 + 4258 4252 4257 + 4252 4258 4259 + 4259 4253 4252 + 4253 4259 4260 + 4260 4261 4253 + 4253 4261 4254 + 4240 238 4257 + 4262 4263 4246 + 4263 4262 4264 + 4264 4265 4263 + 4263 4265 4266 + 4266 4267 4263 + 4268 4263 4267 + 4267 240 4268 + 4264 4262 4269 + 4269 4270 4264 + 4271 4264 4270 + 4265 4264 4271 + 4271 4272 4265 + 4265 4272 4273 + 4273 4266 4265 + 4274 4269 4262 + 4275 4269 4274 + 4269 4275 4276 + 4276 4270 4269 + 4270 4276 4277 + 4277 4278 4270 + 4270 4278 4271 + 4262 4244 4274 + 4243 4274 4244 + 4279 4274 4243 + 4274 4279 4275 + 4275 4279 4280 + 4280 4281 4275 + 4276 4275 4281 + 4282 4244 4262 + 4243 4251 4279 + 4279 4251 4283 + 4283 4280 4279 + 4284 4280 4283 + 4280 4284 4285 + 4285 4281 4280 + 4281 4285 4286 + 4286 4287 4281 + 4281 4287 4276 + 4277 4276 4287 + 4288 4283 4251 + 4289 4283 4288 + 4283 4289 4284 + 4284 4289 4290 + 4290 4291 4284 + 4285 4284 4291 + 4291 4292 4285 + 4286 4285 4292 + 4251 4250 4288 + 4293 4288 4250 + 4294 4288 4293 + 4288 4294 4289 + 4289 4294 4295 + 4295 4290 4289 + 4296 4290 4295 + 4290 4296 4297 + 4297 4291 4290 + 4250 4298 4293 + 4299 4293 4298 + 4300 4293 4299 + 4293 4300 4294 + 4294 4300 4301 + 4301 4295 4294 + 4302 4295 4301 + 4295 4302 4296 + 4249 4298 4250 + 4298 4249 4256 + 4256 4303 4298 + 4298 4303 4299 + 4304 4299 4303 + 4305 4299 4304 + 4299 4305 4300 + 4300 4305 4306 + 4306 4301 4300 + 4307 4301 4306 + 4301 4307 4302 + 4303 4256 4308 + 4308 4309 4303 + 4303 4309 4304 + 4310 4304 4309 + 4311 4304 4310 + 4304 4311 4305 + 4305 4311 4312 + 4312 4306 4305 + 4308 4256 4255 + 4255 4313 4308 + 4314 4308 4313 + 4309 4308 4314 + 4314 4315 4309 + 4309 4315 4310 + 4316 4310 4315 + 4317 4310 4316 + 4310 4317 4311 + 4318 4313 4255 + 4313 4318 4319 + 4319 4320 4313 + 4313 4320 4314 + 4321 4314 4320 + 4315 4314 4321 + 4321 4322 4315 + 4315 4322 4316 + 4255 4254 4318 + 4318 4254 4261 + 4261 4323 4318 + 4319 4318 4323 + 4323 4324 4319 + 4325 4319 4324 + 4320 4319 4325 + 4325 4326 4320 + 4320 4326 4321 + 4327 4321 4326 + 4322 4321 4327 + 4328 4323 4261 + 4323 4328 4329 + 4329 4324 4323 + 4324 4329 4330 + 4330 4331 4324 + 4324 4331 4325 + 4332 4325 4331 + 4326 4325 4332 + 4261 4260 4328 + 4328 4260 4333 + 4333 4334 4328 + 4329 4328 4334 + 4334 4335 4329 + 4330 4329 4335 + 4335 4336 4330 + 4337 4330 4336 + 4331 4330 4337 + 4338 4333 4260 + 4333 4338 4339 + 4333 4339 4340 + 4340 4334 4333 + 4335 4334 4340 + 4340 4341 4335 + 4335 4341 4342 + 4342 4336 4335 + 4260 4259 4338 + 4343 4338 4259 + 4339 4338 4343 + 4343 4344 4339 + 4340 4339 4344 + 4345 4340 4344 + 4341 4340 4345 + 4259 4258 4343 + 4346 4343 4258 + 4343 4346 4347 + 4347 4344 4343 + 4344 4347 4348 + 4348 4349 4344 + 4344 4349 4350 + 4350 4345 4344 + 4258 4351 4346 + 4352 4346 4351 + 4347 4346 4352 + 4352 4353 4347 + 4348 4347 4353 + 4257 4351 4258 + 4351 4257 240 + 240 4354 4351 + 4351 4354 4352 + 4355 4352 4354 + 4353 4352 4355 + 240 4257 4356 + 4354 240 4267 + 4267 4357 4354 + 4354 4357 4355 + 4355 4357 4358 + 4358 4359 4355 + 4360 4355 4359 + 4355 4360 4353 + 4357 4267 4266 + 4266 4358 4357 + 4358 4266 4273 + 4273 4361 4358 + 4358 4361 4362 + 4362 4359 4358 + 4359 4362 4363 + 4363 4364 4359 + 4359 4364 4360 + 4361 4273 4365 + 4365 4366 4361 + 4361 4366 4367 + 4367 4362 4361 + 4363 4362 4367 + 4367 4368 4363 + 4369 4363 4368 + 4364 4363 4369 + 4365 4273 4272 + 4272 4370 4365 + 4371 4365 4370 + 4366 4365 4371 + 4371 4372 4366 + 4366 4372 4373 + 4373 4367 4366 + 4367 4373 4374 + 4374 4368 4367 + 4375 4370 4272 + 4370 4375 4376 + 4376 4377 4370 + 4370 4377 4371 + 4378 4371 4377 + 4372 4371 4378 + 4272 4271 4375 + 4375 4271 4278 + 4278 4379 4375 + 4376 4375 4379 + 4379 4380 4376 + 4381 4376 4380 + 4377 4376 4381 + 4381 4382 4377 + 4377 4382 4378 + 4383 4379 4278 + 4379 4383 4384 + 4384 4380 4379 + 4380 4384 4385 + 4385 4386 4380 + 4380 4386 4381 + 4387 4381 4386 + 4382 4381 4387 + 4278 4277 4383 + 4383 4277 4388 + 4388 4389 4383 + 4384 4383 4389 + 4389 4390 4384 + 4385 4384 4390 + 4390 4391 4385 + 4392 4385 4391 + 4393 4385 4392 + 4287 4388 4277 + 4394 4388 4287 + 4388 4394 4395 + 4395 4389 4388 + 4389 4395 4396 + 4396 4390 4389 + 4390 4396 4397 + 4397 4391 4390 + 4287 4286 4394 + 4394 4286 4398 + 4398 4399 4394 + 4395 4394 4399 + 4399 4400 4395 + 4396 4395 4400 + 4400 4401 4396 + 4397 4396 4401 + 4292 4398 4286 + 4402 4398 4292 + 4398 4402 4403 + 4403 4399 4398 + 4399 4403 4404 + 4404 4400 4399 + 4400 4404 4405 + 4405 4401 4400 + 4292 4406 4402 + 4407 4402 4406 + 4403 4402 4407 + 4407 4408 4403 + 4404 4403 4408 + 4409 4404 4408 + 4405 4404 4409 + 4406 4292 4291 + 4291 4297 4406 + 4406 4297 4410 + 4410 4411 4406 + 4406 4411 4407 + 4412 4407 4411 + 4407 4412 4408 + 4410 4297 4296 + 4296 4413 4410 + 4414 4410 4413 + 4411 4410 4414 + 4414 4415 4411 + 4411 4415 4412 + 4412 4415 4416 + 4416 4417 4412 + 4417 4418 4412 + 4419 4413 4296 + 4413 4419 4420 + 4420 4421 4413 + 4413 4421 4414 + 4414 4421 4422 + 4422 4423 4414 + 4415 4414 4423 + 4423 4416 4415 + 4296 4302 4419 + 4419 4302 4307 + 4307 4424 4419 + 4420 4419 4424 + 4424 4425 4420 + 4420 4425 4080 + 4080 4426 4420 + 4426 4427 4420 + 4421 4420 4427 + 4428 4424 4307 + 4428 4425 4424 + 4425 4428 4081 + 4081 4080 4425 + 4307 4429 4428 + 4428 4429 4082 + 4082 4081 4428 + 4306 4429 4307 + 4429 4306 4312 + 4312 4082 4429 + 4082 4312 4430 + 4430 4076 4082 + 4076 4430 4077 + 4077 4430 4317 + 4317 4431 4077 + 4065 4077 4431 + 4430 4312 4311 + 4311 4317 4430 + 4431 4059 4065 + 4432 4059 4431 + 4059 4432 4060 + 4060 4432 4433 + 4433 4434 4060 + 4053 4060 4434 + 4434 4054 4053 + 4431 4316 4432 + 4432 4316 4322 + 4322 4433 4432 + 4327 4433 4322 + 4433 4327 4435 + 4435 4434 4433 + 4434 4435 4436 + 4436 4054 4434 + 4054 4436 4055 + 4316 4431 4317 + 4079 4426 4080 + 4437 4426 4079 + 4426 4437 4438 + 4438 4427 4426 + 4438 4439 4427 + 4427 4439 4421 + 4421 4439 4422 + 4079 4078 4437 + 4437 4078 4440 + 4440 4441 4437 + 4437 4441 4442 + 4442 4438 4437 + 4439 4438 4442 + 4442 4422 4439 + 4443 4422 4442 + 4422 4443 4444 + 4444 4423 4422 + 3997 4440 4078 + 3996 4440 3997 + 4440 3996 4445 + 4445 4441 4440 + 4441 4445 4446 + 4446 4447 4441 + 4441 4447 4442 + 4443 4442 4447 + 4447 4448 4443 + 4443 4448 4449 + 4449 4444 4443 + 4445 3996 3995 + 3995 4450 4445 + 4446 4445 4450 + 4450 4451 4446 + 4452 4446 4451 + 4447 4446 4452 + 4452 4448 4447 + 4448 4452 4453 + 4453 4449 4448 + 4454 4450 3995 + 4450 4454 4455 + 4455 4451 4450 + 4451 4455 4456 + 4456 4457 4451 + 4451 4457 4452 + 4453 4452 4457 + 3995 4001 4454 + 4454 4001 4458 + 4458 4459 4454 + 4455 4454 4459 + 4459 4460 4455 + 4456 4455 4460 + 4460 4461 4456 + 4462 4456 4461 + 4457 4456 4462 + 4463 4458 4001 + 4464 4458 4463 + 4458 4464 4465 + 4465 4459 4458 + 4459 4465 4466 + 4466 4460 4459 + 4460 4466 4467 + 4467 4461 4460 + 4001 4000 4463 + 4003 4463 4000 + 4468 4463 4003 + 4463 4468 4464 + 4464 4468 4469 + 4469 4470 4464 + 4465 4464 4470 + 4470 4471 4465 + 4466 4465 4471 + 4471 4472 4466 + 4467 4466 4472 + 4003 4473 4468 + 4468 4473 4474 + 4474 4469 4468 + 4475 4469 4474 + 4469 4475 4476 + 4476 4470 4469 + 4470 4476 4477 + 4477 4471 4470 + 4473 4003 3056 + 3056 3061 4473 + 4473 3061 4478 + 4478 4474 4473 + 4479 4474 4478 + 4474 4479 4475 + 4475 4479 4480 + 4480 4481 4475 + 4476 4475 4481 + 4481 4482 4476 + 4477 4476 4482 + 3081 4478 3061 + 4483 4478 3081 + 4478 4483 4479 + 4479 4483 4484 + 4484 4480 4479 + 4485 4480 4484 + 4480 4485 4486 + 4486 4481 4480 + 4481 4486 4487 + 4487 4482 4481 + 3081 4488 4483 + 4483 4488 4489 + 4489 4484 4483 + 4490 4484 4489 + 4484 4490 4485 + 4485 4490 4491 + 4491 4492 4485 + 4486 4485 4492 + 4488 3081 3080 + 3080 3086 4488 + 4488 3086 4493 + 4493 4489 4488 + 4494 4489 4493 + 4489 4494 4490 + 4490 4494 4495 + 4495 4491 4490 + 4496 4491 4495 + 4491 4496 4497 + 4497 4492 4491 + 3093 4493 3086 + 4498 4493 3093 + 4493 4498 4494 + 4494 4498 4499 + 4499 4495 4494 + 4500 4495 4499 + 4495 4500 4496 + 4496 4500 4501 + 4501 4502 4496 + 4497 4496 4502 + 3093 3097 4498 + 4498 3097 4503 + 4503 4499 4498 + 4504 4499 4503 + 4499 4504 4500 + 4500 4504 4505 + 4505 4501 4500 + 4506 4501 4505 + 4501 4506 4507 + 4507 4502 4501 + 3101 4503 3097 + 4508 4503 3101 + 4503 4508 4504 + 4504 4508 4509 + 4509 4505 4504 + 4510 4505 4509 + 4505 4510 4506 + 4511 4506 4510 + 4507 4506 4511 + 3101 3106 4508 + 4508 3106 4512 + 4512 4509 4508 + 4513 4509 4512 + 4509 4513 4510 + 4510 4513 4514 + 4514 4515 4510 + 4510 4515 4511 + 4516 4512 3106 + 4517 4512 4516 + 4512 4517 4513 + 4514 4513 4517 + 4517 4518 4514 + 4519 4514 4518 + 4514 4519 4520 + 4520 4515 4514 + 3106 3105 4516 + 3111 4516 3105 + 4521 4516 3111 + 4516 4521 4517 + 4517 4521 4522 + 4522 4518 4517 + 4523 4518 4522 + 4518 4523 4519 + 4524 4519 4523 + 4520 4519 4524 + 3111 3116 4521 + 4522 4521 3116 + 3116 4525 4522 + 4526 4522 4525 + 4522 4526 4523 + 4523 4526 4527 + 4527 4528 4523 + 4523 4528 4524 + 3123 4525 3116 + 4529 4525 3123 + 4525 4529 4526 + 4527 4526 4529 + 4529 4530 4527 + 4531 4527 4530 + 4527 4531 4532 + 4532 4528 4527 + 4528 4532 4533 + 4533 4524 4528 + 3123 3128 4529 + 4529 3128 4534 + 4534 4530 4529 + 4535 4530 4534 + 4530 4535 4531 + 4536 4531 4535 + 4532 4531 4536 + 4536 4537 4532 + 4533 4532 4537 + 4534 3128 3127 + 4538 4534 3127 + 4539 4534 4538 + 4534 4539 4535 + 4535 4539 4540 + 4540 4541 4535 + 4535 4541 4536 + 4542 4536 4541 + 4542 4537 4536 + 3127 4543 4538 + 4544 4538 4543 + 4545 4538 4544 + 4538 4545 4539 + 4540 4539 4545 + 4546 4543 3127 + 4547 4543 4546 + 4543 4547 4544 + 4544 4547 3135 + 3135 4548 4544 + 4549 4544 4548 + 4544 4549 4545 + 3127 3126 4546 + 3131 4546 3126 + 4547 4546 3131 + 3131 3135 4547 + 3139 4548 3135 + 4550 4548 3139 + 4548 4550 4549 + 4551 4549 4550 + 4545 4549 4551 + 4551 4552 4545 + 4545 4552 4540 + 4553 4540 4552 + 4540 4553 4554 + 4554 4541 4540 + 4541 4554 4542 + 3139 4555 4550 + 4550 4555 4556 + 4556 4557 4550 + 4550 4557 4551 + 4558 4551 4557 + 4551 4558 4559 + 4559 4552 4551 + 4552 4559 4553 + 4555 3139 3144 + 3144 4560 4555 + 4556 4555 4560 + 4560 4561 4556 + 4562 4556 4561 + 4556 4562 4563 + 4563 4557 4556 + 4557 4563 4558 + 4564 4558 4563 + 4559 4558 4564 + 4560 3144 3143 + 3143 4565 4560 + 4560 4565 4566 + 4566 4561 4560 + 4567 4561 4566 + 4561 4567 4562 + 4568 4562 4567 + 4563 4562 4568 + 4568 4569 4563 + 4563 4569 4564 + 4565 3143 3152 + 3152 4570 4565 + 4566 4565 4570 + 4570 4571 4566 + 4572 4566 4571 + 4566 4572 4567 + 4567 4572 4573 + 4573 4574 4567 + 4567 4574 4568 + 4570 3152 3151 + 3151 4575 4570 + 4570 4575 4576 + 4576 4571 4570 + 4577 4571 4576 + 4571 4577 4572 + 4573 4572 4577 + 4575 3151 4578 + 4578 4579 4575 + 4576 4575 4579 + 4579 4580 4576 + 4581 4576 4580 + 4576 4581 4577 + 3155 4578 3151 + 4582 4578 3155 + 4579 4578 4582 + 4582 4583 4579 + 4579 4583 4584 + 4584 4580 4579 + 4585 4580 4584 + 4580 4585 4581 + 4586 4581 4585 + 4577 4581 4586 + 3155 3158 4582 + 4582 3158 4587 + 4587 4588 4582 + 4583 4582 4588 + 4588 4589 4583 + 4584 4583 4589 + 4589 4590 4584 + 4591 4584 4590 + 4584 4591 4585 + 3158 4592 4587 + 4592 2746 4587 + 2746 4593 4587 + 4594 4587 4593 + 4595 4587 4594 + 4587 4595 4596 + 4596 4588 4587 + 3157 4592 3158 + 4592 3157 4597 + 4592 4597 2741 + 2741 2746 4592 + 4597 3157 3156 + 3156 2736 4597 + 2741 4597 2736 + 3156 115 2736 + 2736 115 2737 + 2737 115 4598 + 2745 4593 2746 + 4593 2745 4599 + 4593 4599 4594 + 4594 4599 4600 + 4600 4601 4594 + 4602 4594 4601 + 4594 4602 4595 + 4599 2745 2744 + 2744 4600 4599 + 2755 4600 2744 + 4600 2755 4603 + 4603 4601 4600 + 4601 4603 4604 + 4604 4605 4601 + 4601 4605 4602 + 4602 4605 4606 + 4595 4602 4606 + 4603 2755 4607 + 4607 4608 4603 + 4604 4603 4608 + 4608 4609 4604 + 4610 4604 4609 + 4605 4604 4610 + 4610 4606 4605 + 2754 4607 2755 + 4611 4607 2754 + 4607 4611 4612 + 4612 4608 4607 + 4608 4612 4613 + 4613 4609 4608 + 4609 4613 4614 + 4614 4615 4609 + 4609 4615 4610 + 2754 2759 4611 + 4611 2759 2764 + 2764 4616 4611 + 4611 4616 4617 + 4617 4612 4611 + 4613 4612 4617 + 4617 4618 4613 + 4613 4618 4619 + 4619 4614 4613 + 4620 4614 4619 + 4615 4614 4620 + 4616 2764 2773 + 2773 4621 4616 + 4616 4621 4622 + 4622 4617 4616 + 4618 4617 4622 + 4622 4623 4618 + 4618 4623 4624 + 4624 4619 4618 + 4625 4619 4624 + 4619 4625 4620 + 4621 2773 2777 + 2777 4626 4621 + 4622 4621 4626 + 4626 4627 4622 + 4623 4622 4627 + 4627 4628 4623 + 4623 4628 4629 + 4629 4624 4623 + 4630 4624 4629 + 4624 4630 4625 + 4626 2777 2782 + 2782 4631 4626 + 4626 4631 4632 + 4632 4627 4626 + 4628 4627 4632 + 4632 4633 4628 + 4628 4633 4634 + 4634 4629 4628 + 4629 4634 4635 + 4629 4635 4630 + 4631 2782 2787 + 2787 4636 4631 + 4632 4631 4636 + 4636 4637 4632 + 4633 4632 4637 + 4637 4638 4633 + 4633 4638 4639 + 4639 4634 4633 + 4635 4634 4639 + 4636 2787 4640 + 4640 4641 4636 + 4636 4641 4642 + 4642 4637 4636 + 4638 4637 4642 + 4638 4642 4643 + 4643 4644 4638 + 4638 4644 4639 + 4640 2787 2786 + 2786 2792 4640 + 4645 4640 2792 + 4641 4640 4645 + 4645 4646 4641 + 4642 4641 4646 + 4646 4647 4642 + 4647 4648 4642 + 4648 4643 4642 + 4649 4643 4648 + 4644 4643 4649 + 2792 4650 4645 + 4651 4645 4650 + 4645 4651 4646 + 4646 4651 4652 + 4652 4647 4646 + 4653 4647 4652 + 4647 4653 4654 + 4654 4648 4647 + 2791 4650 2792 + 2791 4655 4650 + 4650 4655 4651 + 4652 4651 4655 + 4655 4656 4652 + 4657 4652 4656 + 4652 4657 4653 + 4653 4657 4658 + 4658 4659 4653 + 4654 4653 4659 + 4655 2791 2790 + 2790 4656 4655 + 4660 4656 2790 + 4656 4660 4657 + 4658 4657 4660 + 4660 4661 4658 + 4662 4658 4661 + 4658 4662 4663 + 4663 4659 4658 + 2790 2796 4660 + 4660 2796 4664 + 4664 4661 4660 + 4665 4661 4664 + 4661 4665 4662 + 4666 4662 4665 + 4663 4662 4666 + 4666 4667 4663 + 4668 4663 4667 + 4659 4663 4668 + 4664 2796 2795 + 2795 4669 4664 + 4670 4664 4669 + 4664 4670 4665 + 4665 4670 4671 + 4671 4672 4665 + 4665 4672 4666 + 2804 4669 2795 + 4669 2804 4673 + 4673 4674 4669 + 4669 4674 4670 + 4671 4670 4674 + 4674 4675 4671 + 4676 4671 4675 + 4671 4676 4677 + 4677 4672 4671 + 4673 2804 2803 + 2803 4678 4673 + 4679 4673 4678 + 4674 4673 4679 + 4679 4675 4674 + 4680 4675 4679 + 4675 4680 4676 + 4681 4676 4680 + 4677 4676 4681 + 4682 4678 2803 + 4678 4682 4683 + 4683 4684 4678 + 4678 4684 4679 + 4684 4685 4679 + 4686 4679 4685 + 4679 4686 4680 + 2803 4687 4682 + 4682 4687 4688 + 4688 4689 4682 + 4682 4689 4690 + 4690 4683 4682 + 4687 2803 2809 + 2809 4691 4687 + 4688 4687 4691 + 4691 4692 4688 + 4693 4688 4692 + 4688 4693 4694 + 4694 4689 4688 + 4689 4694 4695 + 4695 4690 4689 + 4691 2809 2808 + 4691 2808 4696 + 4696 4692 4691 + 4697 4692 4696 + 4692 4697 4693 + 4693 4697 4698 + 4698 4699 4693 + 4694 4693 4699 + 4699 4700 4694 + 4695 4694 4700 + 2807 4696 2808 + 4701 4696 2807 + 4696 4701 4697 + 4697 4701 4702 + 4702 4698 4697 + 4703 4698 4702 + 4698 4703 4704 + 4704 4699 4698 + 4699 4704 4705 + 4705 4700 4699 + 2807 2813 4701 + 4701 2813 4706 + 4706 4702 4701 + 4707 4702 4706 + 4702 4707 4703 + 4703 4707 4708 + 4708 4709 4703 + 4704 4703 4709 + 4709 4710 4704 + 4705 4704 4710 + 2813 2817 4706 + 2822 4706 2817 + 4711 4706 2822 + 4706 4711 4707 + 4707 4711 4712 + 4712 4708 4707 + 4713 4708 4712 + 4708 4713 4714 + 4714 4709 4708 + 4709 4714 4715 + 4715 4710 4709 + 2822 4716 4711 + 4711 4716 4717 + 4717 4712 4711 + 4718 4712 4717 + 4712 4718 4713 + 4713 4718 4719 + 4719 4720 4713 + 4714 4713 4720 + 4716 2822 2821 + 2821 4721 4716 + 4716 4721 4722 + 4722 4717 4716 + 4723 4717 4722 + 4717 4723 4718 + 4718 4723 4724 + 4724 4719 4718 + 4721 2821 2826 + 2826 4725 4721 + 4721 4725 4726 + 4726 4722 4721 + 4727 4722 4726 + 4722 4727 4723 + 4723 4727 4728 + 4728 4724 4723 + 4729 4724 4728 + 4719 4724 4729 + 4725 2826 2831 + 2831 4730 4725 + 4725 4730 4731 + 4731 4726 4725 + 4732 4726 4731 + 4726 4732 4727 + 4727 4732 4733 + 4733 4728 4727 + 4730 2831 2835 + 2835 4734 4730 + 4730 4734 4735 + 4735 4731 4730 + 4736 4731 4735 + 4731 4736 4732 + 4733 4732 4736 + 4736 4737 4733 + 4738 4733 4737 + 4728 4733 4738 + 4734 2835 2839 + 2839 4739 4734 + 4735 4734 4739 + 4739 4740 4735 + 4741 4735 4740 + 4735 4741 4736 + 4736 4741 4742 + 4742 4737 4736 + 4743 4737 4742 + 4737 4743 4738 + 4739 2839 2848 + 2848 4744 4739 + 4739 4744 4745 + 4745 4740 4739 + 4746 4740 4745 + 4740 4746 4741 + 4741 4746 4747 + 4747 4742 4741 + 4743 4742 4747 + 4747 4748 4743 + 4738 4743 4748 + 4744 2848 2853 + 2853 4749 4744 + 4744 4749 4750 + 4750 4745 4744 + 4751 4745 4750 + 4745 4751 4746 + 4746 4751 4752 + 4752 4747 4746 + 4747 4752 4753 + 4753 4748 4747 + 4749 2853 4754 + 4754 4755 4749 + 4749 4755 4756 + 4756 4750 4749 + 4757 4750 4756 + 4750 4757 4751 + 4752 4751 4757 + 4757 4758 4752 + 4753 4752 4758 + 4754 2853 2857 + 2857 4759 4754 + 4760 4754 4759 + 4755 4754 4760 + 4760 4761 4755 + 4755 4761 4762 + 4762 4756 4755 + 4763 4756 4762 + 4759 2857 2856 + 4759 2856 2863 + 2863 4764 4759 + 4759 4764 4760 + 4764 4765 4760 + 4766 4760 4765 + 4761 4760 4766 + 4766 4767 4761 + 4761 4767 4768 + 4768 4762 4761 + 2862 4764 2863 + 4764 2862 4769 + 4769 4765 4764 + 4770 4765 4769 + 4765 4770 4766 + 4771 4766 4770 + 4767 4766 4771 + 4771 4772 4767 + 4767 4772 4773 + 4773 4768 4767 + 4769 2862 2861 + 2861 4774 4769 + 4775 4769 4774 + 4769 4775 4770 + 4770 4775 4776 + 4776 4777 4770 + 4770 4777 4771 + 4778 4771 4777 + 4772 4771 4778 + 2871 4774 2861 + 4779 4774 2871 + 4774 4779 4775 + 4776 4775 4779 + 4779 4780 4776 + 4781 4776 4780 + 4776 4781 4782 + 4782 4777 4776 + 4777 4782 4778 + 2871 2876 4779 + 4779 2876 2881 + 2881 4780 4779 + 4783 4780 2881 + 4780 4783 4781 + 4781 4783 4784 + 4784 4785 4781 + 4782 4781 4785 + 4785 4786 4782 + 4782 4786 4787 + 4787 4778 4782 + 2881 2885 4783 + 4783 2885 4788 + 4788 4784 4783 + 4784 4788 4789 + 4789 4790 4784 + 4784 4790 4791 + 4791 4785 4784 + 4785 4791 4792 + 4792 4786 4785 + 2889 4788 2885 + 4789 4788 2889 + 2889 2897 4789 + 4789 2897 4793 + 4793 4794 4789 + 4790 4789 4794 + 4794 4795 4790 + 4790 4795 4796 + 4796 4791 4790 + 4792 4791 4796 + 4797 4793 2897 + 4793 4797 4798 + 4798 4799 4793 + 4793 4799 4800 + 4800 4794 4793 + 4794 4800 4801 + 4801 4795 4794 + 2897 2896 4797 + 4802 4797 2896 + 4798 4797 4802 + 4802 4803 4798 + 4804 4798 4803 + 4799 4798 4804 + 4804 4805 4799 + 4800 4799 4805 + 4805 4806 4800 + 4801 4800 4806 + 2896 2895 4802 + 2895 4807 4802 + 4808 4802 4807 + 4802 4808 4809 + 4809 4803 4802 + 4803 4809 4810 + 4810 4811 4803 + 4803 4811 4804 + 2901 4807 2895 + 4807 2901 2906 + 2906 4812 4807 + 4807 4812 4808 + 4813 4808 4812 + 4809 4808 4813 + 4813 4814 4809 + 4810 4809 4814 + 4812 2906 4815 + 4815 4816 4812 + 4812 4816 4813 + 4816 4817 4813 + 4818 4813 4817 + 4813 4818 4819 + 4819 4814 4813 + 2911 4815 2906 + 4820 4815 2911 + 4816 4815 4820 + 4816 4820 4821 + 4821 4817 4816 + 4822 4817 4821 + 4817 4822 4818 + 4818 4822 4823 + 4824 4818 4823 + 4819 4818 4824 + 2911 4825 4820 + 4821 4820 4825 + 4825 4826 4821 + 4827 4821 4826 + 4821 4827 4822 + 4822 4827 4828 + 4828 4829 4822 + 4822 4829 4823 + 4830 4825 2911 + 4825 4830 4831 + 4831 4826 4825 + 4826 4831 4832 + 4832 4833 4826 + 4826 4833 4827 + 4827 4833 4834 + 4834 4828 4827 + 2911 2910 4830 + 4830 2910 2916 + 2916 4835 4830 + 4830 4835 4836 + 4836 4831 4830 + 4832 4831 4836 + 4836 4837 4832 + 4832 4837 4838 + 4838 4839 4832 + 4833 4832 4839 + 4839 4834 4833 + 4840 4835 2916 + 4835 4840 4841 + 4841 4836 4835 + 4836 4841 4842 + 4842 4837 4836 + 4837 4842 4843 + 4843 4838 4837 + 2916 2915 4840 + 4840 2915 2921 + 2921 2930 4840 + 4840 2930 4844 + 4844 4841 4840 + 4842 4841 4844 + 4844 4845 4842 + 4842 4845 4846 + 4846 4843 4842 + 4847 4843 4846 + 4843 4847 4848 + 4848 4838 4843 + 2930 4849 4844 + 4850 4844 4849 + 4845 4844 4850 + 4845 4850 4851 + 4851 4852 4845 + 4845 4852 4846 + 4853 4849 2930 + 4854 4849 4853 + 4849 4854 4850 + 4850 4854 4855 + 4855 4851 4850 + 4856 4851 4855 + 4851 4856 4852 + 4852 4856 4857 + 4857 4846 4852 + 2930 2929 4853 + 2939 4853 2929 + 4858 4853 2939 + 4853 4858 4854 + 4854 4858 4859 + 4859 4860 4854 + 4854 4860 4855 + 2939 4861 4858 + 4859 4858 4861 + 4861 4862 4859 + 4862 4863 4859 + 4864 4859 4863 + 4859 4864 4860 + 4861 2939 2938 + 2938 4865 4861 + 4861 4865 4866 + 4866 4862 4861 + 4867 4862 4866 + 4862 4867 4868 + 4868 4863 4862 + 4868 4869 4863 + 4863 4869 4864 + 4865 2938 4870 + 4870 4871 4865 + 4865 4871 4872 + 4872 4866 4865 + 4873 4866 4872 + 4866 4873 4867 + 2937 4870 2938 + 4874 4870 2937 + 4870 4874 4875 + 4875 4871 4870 + 4871 4875 4876 + 4876 4872 4871 + 4872 4876 4877 + 4877 4878 4872 + 4872 4878 4873 + 2937 2947 4874 + 4874 2947 4879 + 4879 4880 4874 + 4875 4874 4880 + 4880 4881 4875 + 4876 4875 4881 + 4882 4876 4881 + 4877 4876 4882 + 2952 4879 2947 + 4879 2952 4883 + 4883 4884 4879 + 4879 4884 4885 + 4885 4880 4879 + 4881 4880 4885 + 4883 2952 2951 + 2951 4886 4883 + 4883 4886 4887 + 4887 4888 4883 + 4884 4883 4888 + 4888 4889 4884 + 4884 4889 4890 + 4890 4885 4884 + 2957 4886 2951 + 4886 2957 4891 + 4891 4887 4886 + 4892 4887 4891 + 4887 4892 4893 + 4893 4888 4887 + 4888 4893 4894 + 4894 4889 4888 + 4889 4894 4895 + 4895 4890 4889 + 4896 4891 2957 + 4897 4891 4896 + 4891 4897 4892 + 4892 4897 4898 + 4898 4899 4892 + 4893 4892 4899 + 4899 4900 4893 + 4894 4893 4900 + 2957 2962 4896 + 2961 4896 2962 + 4901 4896 2961 + 4896 4901 4897 + 4897 4901 4902 + 4902 4898 4897 + 4903 4898 4902 + 4898 4903 4904 + 4904 4899 4898 + 4899 4904 4905 + 4905 4900 4899 + 2961 2967 4901 + 4901 2967 4906 + 4906 4902 4901 + 4907 4902 4906 + 4902 4907 4903 + 4903 4907 4908 + 4908 4909 4903 + 4904 4903 4909 + 4909 4042 4904 + 4905 4904 4042 + 4910 4906 2967 + 4911 4906 4910 + 4906 4911 4907 + 4907 4911 4912 + 4912 4908 4907 + 4028 4908 4912 + 4908 4028 4027 + 4027 4909 4908 + 2967 2966 4910 + 2972 4910 2966 + 4913 4910 2972 + 4910 4913 4911 + 4911 4913 4914 + 4914 4912 4911 + 4915 4912 4914 + 4912 4915 4028 + 4028 4915 4022 + 4023 4022 4915 + 2972 4916 4913 + 4913 4916 4917 + 4917 4914 4913 + 4918 4914 4917 + 4914 4918 4915 + 4915 4918 4023 + 4919 4023 4918 + 4017 4023 4919 + 4916 2972 2971 + 2971 2981 4916 + 4916 2981 4920 + 4920 4917 4916 + 4921 4917 4920 + 4917 4921 4918 + 4918 4921 4919 + 4922 4919 4921 + 4017 4919 4922 + 4922 4018 4017 + 4923 4018 4922 + 4018 4923 4011 + 2986 4920 2981 + 4924 4920 2986 + 4920 4924 4921 + 4921 4924 4922 + 4924 4925 4922 + 4923 4922 4925 + 4925 3016 4923 + 4011 4923 3016 + 2986 4926 4924 + 4924 4926 4927 + 4927 4925 4924 + 3016 4925 4927 + 4927 3017 3016 + 3017 4927 3003 + 3003 4928 3017 + 4926 2986 2985 + 2985 2991 4926 + 4926 2991 4929 + 3003 4927 4926 + 4909 4027 4037 + 4037 4042 4909 + 4042 4041 4905 + 4930 4905 4041 + 4900 4905 4930 + 4930 4931 4900 + 4900 4931 4894 + 4895 4894 4931 + 4041 4046 4930 + 4932 4930 4046 + 4931 4930 4932 + 4932 4933 4931 + 4931 4933 4895 + 4934 4895 4933 + 4890 4895 4934 + 4046 4050 4932 + 4935 4932 4050 + 4933 4932 4935 + 4935 4936 4933 + 4933 4936 4934 + 4937 4934 4936 + 4938 4934 4937 + 4934 4938 4890 + 4890 4938 4939 + 4939 4885 4890 + 4050 4055 4935 + 4940 4935 4055 + 4936 4935 4940 + 4940 4941 4936 + 4936 4941 4937 + 4942 4937 4941 + 4943 4937 4942 + 4937 4943 4938 + 4939 4938 4943 + 4055 4436 4940 + 4944 4940 4436 + 4941 4940 4944 + 4944 4945 4941 + 4941 4945 4942 + 4946 4942 4945 + 4947 4942 4946 + 4942 4947 4943 + 4436 4435 4944 + 4948 4944 4435 + 4945 4944 4948 + 4948 4332 4945 + 4945 4332 4946 + 4331 4946 4332 + 4337 4946 4331 + 4946 4337 4947 + 4435 4327 4948 + 4326 4948 4327 + 4332 4948 4326 + 4885 4939 4881 + 4881 4939 4949 + 4949 4950 4881 + 4881 4950 4882 + 4951 4882 4950 + 4882 4951 4952 + 4882 4952 4877 + 4943 4949 4939 + 4953 4949 4943 + 4949 4953 4950 + 4950 4953 4951 + 4954 4951 4953 + 4952 4951 4954 + 4954 4342 4952 + 4952 4342 4341 + 4877 4952 4341 + 4955 4877 4341 + 4878 4877 4955 + 4943 4947 4953 + 4953 4947 4954 + 4947 4337 4954 + 4336 4954 4337 + 4954 4336 4342 + 4956 4417 4416 + 4416 4957 4956 + 4958 4956 4957 + 4957 4959 4958 + 4959 4960 4958 + 4961 4960 4959 + 4960 4961 4962 + 4957 4416 4423 + 4423 4444 4957 + 4957 4444 4449 + 4449 4959 4957 + 4963 4959 4449 + 4959 4963 4961 + 4961 4963 4964 + 4964 4965 4961 + 4962 4961 4965 + 4965 4966 4962 + 4449 4453 4963 + 4963 4453 4967 + 4967 4968 4963 + 4963 4968 4964 + 4969 4964 4968 + 4969 4970 4964 + 4964 4970 4971 + 4971 4965 4964 + 4971 4966 4965 + 4457 4967 4453 + 4462 4967 4457 + 4967 4462 4972 + 4972 4968 4967 + 4968 4972 4969 + 4969 4972 4973 + 4973 4974 4969 + 4970 4969 4974 + 4974 4975 4970 + 4970 4975 4976 + 4971 4970 4976 + 4972 4462 4977 + 4977 4973 4972 + 4978 4973 4977 + 4973 4978 4979 + 4979 4974 4973 + 4974 4979 4980 + 4980 4975 4974 + 4975 4980 4981 + 4981 4976 4975 + 4461 4977 4462 + 4982 4977 4461 + 4977 4982 4978 + 4978 4982 4983 + 4983 4984 4978 + 4979 4978 4984 + 4984 4985 4979 + 4980 4979 4985 + 4985 4986 4980 + 4981 4980 4986 + 4461 4467 4982 + 4982 4467 4987 + 4987 4983 4982 + 4988 4983 4987 + 4983 4988 4989 + 4989 4984 4983 + 4984 4989 4990 + 4990 4985 4984 + 4985 4990 4991 + 4991 4986 4985 + 4472 4987 4467 + 4992 4987 4472 + 4987 4992 4988 + 4988 4992 4993 + 4993 4994 4988 + 4989 4988 4994 + 4994 4995 4989 + 4990 4989 4995 + 4995 4996 4990 + 4991 4990 4996 + 4472 4997 4992 + 4992 4997 4998 + 4998 4999 4992 + 4992 4999 4993 + 4997 4472 4471 + 4471 4477 4997 + 4997 4477 5000 + 5000 4998 4997 + 5001 4998 5000 + 4998 5001 5002 + 5002 4999 4998 + 4999 5002 5003 + 5003 4993 4999 + 4482 5000 4477 + 5004 5000 4482 + 5000 5004 5001 + 5001 5004 5005 + 5005 5006 5001 + 5002 5001 5006 + 5006 5007 5002 + 5003 5002 5007 + 4482 4487 5004 + 5004 4487 5008 + 5008 5005 5004 + 5009 5005 5008 + 5005 5009 5010 + 5010 5006 5005 + 5006 5010 5011 + 5011 5007 5006 + 5012 5008 4487 + 5013 5008 5012 + 5008 5013 5009 + 5009 5013 5014 + 5014 5015 5009 + 5010 5009 5015 + 5015 5016 5010 + 5011 5010 5016 + 4487 4486 5012 + 4492 5012 4486 + 5017 5012 4492 + 5012 5017 5013 + 5013 5017 5018 + 5018 5014 5013 + 5019 5014 5018 + 5014 5019 5020 + 5020 5015 5014 + 5015 5020 5021 + 5021 5016 5015 + 4492 4497 5017 + 5017 4497 5022 + 5022 5018 5017 + 5023 5018 5022 + 5018 5023 5019 + 5024 5019 5023 + 5020 5019 5024 + 5024 5025 5020 + 5020 5025 5026 + 5026 5021 5020 + 4502 5022 4497 + 5027 5022 4502 + 5022 5027 5023 + 5023 5027 5028 + 5028 5029 5023 + 5023 5029 5024 + 5030 5024 5029 + 5024 5030 5031 + 5031 5025 5024 + 4502 4507 5027 + 5028 5027 4507 + 4507 5032 5028 + 5033 5028 5032 + 5028 5033 5034 + 5034 5029 5028 + 5029 5034 5030 + 5035 5030 5034 + 5031 5030 5035 + 4511 5032 4507 + 5036 5032 4511 + 5032 5036 5033 + 5037 5033 5036 + 5034 5033 5037 + 5037 5038 5034 + 5034 5038 5035 + 4511 5039 5036 + 5036 5039 5040 + 5040 5041 5036 + 5036 5041 5037 + 5042 5037 5041 + 5037 5042 5043 + 5043 5038 5037 + 5039 4511 4515 + 4515 4520 5039 + 5040 5039 4520 + 4520 5044 5040 + 5045 5040 5044 + 5040 5045 5046 + 5046 5041 5040 + 5041 5046 5042 + 5047 5042 5046 + 5043 5042 5047 + 4524 5044 4520 + 5048 5044 4524 + 5044 5048 5045 + 5049 5045 5048 + 5046 5045 5049 + 5049 5050 5046 + 5046 5050 5047 + 4524 4533 5048 + 5048 4533 5051 + 5051 5052 5048 + 5048 5052 5049 + 5053 5049 5052 + 5049 5053 5054 + 5054 5050 5049 + 5050 5054 5055 + 5055 5047 5050 + 5051 4533 4537 + 4537 5056 5051 + 5057 5051 5056 + 5051 5057 5058 + 5058 5052 5051 + 5052 5058 5053 + 5053 5058 5059 + 3409 5053 5059 + 5054 5053 3409 + 5060 5056 4537 + 5060 5061 5056 + 5056 5061 5057 + 5062 5057 5061 + 5058 5057 5062 + 5062 5059 5058 + 4537 4542 5060 + 5063 5060 4542 + 5064 5063 4542 + 5065 5064 4542 + 5066 5064 5065 + 5066 5067 5064 + 5064 5067 5068 + 5068 5069 5064 + 4542 4554 5065 + 5070 5065 4554 + 5071 5065 5070 + 5065 5071 5066 + 5072 5066 5071 + 5067 5066 5072 + 5072 5073 5067 + 5074 5067 5073 + 5075 5074 5073 + 4554 4553 5070 + 5070 4553 4559 + 4559 5076 5070 + 5077 5070 5076 + 5070 5077 5071 + 5071 5077 5078 + 5078 5079 5071 + 5071 5079 5072 + 4564 5076 4559 + 5080 5076 4564 + 5076 5080 5077 + 5078 5077 5080 + 5080 5081 5078 + 5082 5078 5081 + 5078 5082 5083 + 5083 5079 5078 + 4564 5084 5080 + 5080 5084 5085 + 5085 5081 5080 + 5086 5081 5085 + 5081 5086 5082 + 5087 5082 5086 + 5083 5082 5087 + 5084 4564 4569 + 4569 5088 5084 + 5085 5084 5088 + 5088 5089 5085 + 5090 5085 5089 + 5085 5090 5086 + 5086 5090 5091 + 5091 5092 5086 + 5086 5092 5087 + 5088 4569 4568 + 4568 5093 5088 + 5088 5093 5094 + 5094 5089 5088 + 5095 5089 5094 + 5089 5095 5090 + 5091 5090 5095 + 5095 5096 5091 + 5093 4568 4574 + 4574 5097 5093 + 5094 5093 5097 + 5097 5098 5094 + 5099 5094 5098 + 5094 5099 5095 + 5095 5099 168 + 168 5100 5095 + 5097 4574 4573 + 4573 5101 5097 + 5097 5101 5102 + 5102 5098 5097 + 5103 5098 5102 + 5098 5103 5099 + 168 5099 5103 + 5103 5104 168 + 5105 168 5104 + 5101 4573 5106 + 5106 5107 5101 + 5102 5101 5107 + 5107 5108 5102 + 5109 5102 5108 + 5102 5109 5103 + 5103 5109 5110 + 5110 5104 5103 + 4577 5106 4573 + 4586 5106 4577 + 5107 5106 4586 + 4586 5111 5107 + 5107 5111 5112 + 5112 5108 5107 + 5113 5108 5112 + 5108 5113 5109 + 5110 5109 5113 + 5111 4586 5114 + 5114 5115 5111 + 5112 5111 5115 + 5115 5116 5112 + 5117 5112 5116 + 5112 5117 5113 + 4585 5114 4586 + 5118 5114 4585 + 5115 5114 5118 + 5118 5119 5115 + 5115 5119 1658 + 1658 5116 5115 + 5120 5116 1658 + 5116 5120 5117 + 5121 5117 5120 + 5113 5117 5121 + 4585 4591 5118 + 5118 4591 5122 + 5122 1652 5118 + 5119 5118 1652 + 1652 1651 5119 + 1658 5119 1651 + 4590 5122 4591 + 5122 4590 5123 + 5122 5123 1653 + 1653 1652 5122 + 5123 4590 4589 + 4589 5124 5123 + 1653 5123 5124 + 1648 1653 5124 + 5124 5125 1648 + 5124 4589 4588 + 4588 4596 5124 + 5124 4596 5126 + 5126 5125 5124 + 5125 5126 5127 + 5127 5128 5125 + 5125 5128 5129 + 5129 5130 5125 + 1642 5130 5129 + 5126 4596 4595 + 4595 5131 5126 + 5127 5126 5131 + 5131 5132 5127 + 5127 5132 5133 + 5133 5134 5127 + 5128 5127 5134 + 5134 5135 5128 + 5129 5128 5135 + 4606 5131 4595 + 5132 5131 4606 + 4606 4610 5132 + 5132 4610 4615 + 4615 5133 5132 + 4620 5133 4615 + 5133 4620 5136 + 5136 5134 5133 + 5134 5136 5137 + 5137 5135 5134 + 5135 5137 5138 + 5138 1644 5135 + 5135 1644 5129 + 1643 5129 1644 + 5129 1643 1642 + 5139 5136 4620 + 5137 5136 5139 + 5139 5140 5137 + 5137 5140 5141 + 5141 5138 5137 + 1638 5138 5141 + 1644 5138 1638 + 4620 4625 5139 + 5142 5139 4625 + 5139 5142 5140 + 5140 5142 5143 + 5143 5144 5140 + 5140 5144 5141 + 5145 5141 5144 + 5146 5141 5145 + 5141 5146 1638 + 1638 5146 1639 + 4625 4630 5142 + 5143 5142 4630 + 4630 4635 5143 + 4635 5147 5143 + 5148 5143 5147 + 5144 5143 5148 + 5148 5149 5144 + 5144 5149 5145 + 4639 5147 4635 + 5150 5147 4639 + 5147 5150 5148 + 5148 5150 5151 + 5151 5152 5148 + 5149 5148 5152 + 5152 5153 5149 + 5145 5149 5153 + 4639 5154 5150 + 5150 5154 5155 + 5155 5151 5150 + 5156 5151 5155 + 5151 5156 5157 + 5157 5152 5151 + 5152 5157 5158 + 5158 5153 5152 + 5154 4639 4644 + 4644 5159 5154 + 5154 5159 5160 + 5155 5154 5160 + 5160 5161 5155 + 5162 5155 5161 + 5155 5162 5156 + 4649 5159 4644 + 5159 4649 5163 + 5163 5160 5159 + 5164 5160 5163 + 5160 5164 5165 + 5165 5161 5160 + 5161 5165 5166 + 5161 5166 5162 + 5167 5162 5166 + 5156 5162 5167 + 5163 4649 5168 + 5168 5169 5163 + 5170 5163 5169 + 5163 5170 5164 + 4648 5168 4649 + 5171 5168 4648 + 5168 5171 5172 + 5172 5169 5168 + 5169 5172 5173 + 5169 5173 5170 + 5174 5170 5173 + 5164 5170 5174 + 4648 4654 5171 + 5171 4654 5175 + 5175 5176 5171 + 5171 5176 5177 + 5172 5171 5177 + 5177 5178 5172 + 5173 5172 5178 + 5178 5179 5173 + 5173 5179 5174 + 4659 5175 4654 + 4668 5175 4659 + 5176 5175 4668 + 4668 5180 5176 + 5176 5180 5181 + 5181 5177 5176 + 5182 5177 5181 + 5177 5182 5183 + 5183 5178 5177 + 5179 5178 5183 + 5180 4668 5184 + 5184 5185 5180 + 5181 5180 5185 + 5186 5181 5185 + 5187 5181 5186 + 5181 5187 5182 + 4667 5184 4668 + 5188 5184 4667 + 5184 5188 5189 + 5189 5185 5184 + 5185 5189 5190 + 5190 5191 5185 + 5185 5191 5186 + 4667 5192 5188 + 5188 5192 5193 + 5193 5194 5188 + 5189 5188 5194 + 5194 5195 5189 + 5190 5189 5195 + 5192 4667 4666 + 4666 5196 5192 + 5192 5196 5197 + 5197 5193 5192 + 5198 5193 5197 + 5193 5198 5199 + 5199 5194 5193 + 5194 5199 5200 + 5200 5195 5194 + 5196 4666 4672 + 4672 4677 5196 + 5197 5196 4677 + 4677 5201 5197 + 5202 5197 5201 + 5197 5202 5198 + 5198 5202 5203 + 5203 5204 5198 + 5199 5198 5204 + 5204 5205 5199 + 5200 5199 5205 + 4681 5201 4677 + 5206 5201 4681 + 5201 5206 5202 + 5203 5202 5206 + 5206 5207 5203 + 5208 5203 5207 + 5203 5208 5209 + 5209 5204 5203 + 5204 5209 5210 + 5210 5205 5204 + 4681 5211 5206 + 5206 5211 5212 + 5212 5207 5206 + 5213 5207 5212 + 5207 5213 5208 + 5214 5208 5213 + 5209 5208 5214 + 5214 5215 5209 + 5210 5209 5215 + 5211 4681 5216 + 5216 5217 5211 + 5212 5211 5217 + 5217 5218 5212 + 5219 5212 5218 + 5212 5219 5213 + 4680 5216 4681 + 5220 5216 4680 + 5217 5216 5220 + 5220 5221 5217 + 5217 5221 5222 + 5222 5218 5217 + 5223 5218 5222 + 5218 5223 5219 + 5224 5219 5223 + 5213 5219 5224 + 4680 4686 5220 + 5220 4686 5225 + 5225 5226 5220 + 5221 5220 5226 + 5226 5227 5221 + 5222 5221 5227 + 5227 5228 5222 + 5229 5222 5228 + 5222 5229 5223 + 4685 5225 4686 + 5225 4685 5230 + 5230 5231 5225 + 5225 5231 5232 + 5232 5226 5225 + 5227 5226 5232 + 5232 5233 5227 + 5227 5233 5234 + 5234 5228 5227 + 5230 4685 4684 + 4684 5235 5230 + 5230 5235 5236 + 5236 5237 5230 + 5231 5230 5237 + 5237 5238 5231 + 5232 5231 5238 + 5238 5239 5232 + 5233 5232 5239 + 5235 4684 4683 + 4683 5240 5235 + 5235 5240 5241 + 5241 5236 5235 + 5242 5236 5241 + 5236 5242 5243 + 5243 5237 5236 + 5238 5237 5243 + 5240 4683 4690 + 4690 5244 5240 + 5240 5244 5245 + 5245 5241 5240 + 5246 5241 5245 + 5241 5246 5242 + 5242 5246 5247 + 5247 5248 5242 + 5243 5242 5248 + 5249 5244 4690 + 5244 5249 5250 + 5250 5245 5244 + 5245 5250 5251 + 5251 5252 5245 + 5245 5252 5246 + 5247 5246 5252 + 4690 4695 5249 + 5249 4695 5253 + 5253 5254 5249 + 5250 5249 5254 + 5254 5255 5250 + 5251 5250 5255 + 4700 5253 4695 + 5256 5253 4700 + 5253 5256 5257 + 5257 5254 5253 + 5254 5257 5258 + 5258 5255 5254 + 5255 5258 5259 + 5259 5260 5255 + 5255 5260 5251 + 4700 4705 5256 + 5256 4705 5261 + 5261 5262 5256 + 5257 5256 5262 + 5262 5263 5257 + 5258 5257 5263 + 5263 5264 5258 + 5259 5258 5264 + 4710 5261 4705 + 5265 5261 4710 + 5261 5265 5266 + 5266 5262 5261 + 5262 5266 5267 + 5267 5263 5262 + 5263 5267 5268 + 5268 5264 5263 + 4710 4715 5265 + 5265 4715 5269 + 5269 5270 5265 + 5266 5265 5270 + 5270 5271 5266 + 5267 5266 5271 + 5271 5272 5267 + 5268 5267 5272 + 5269 4715 4714 + 4714 5273 5269 + 5274 5269 5273 + 5270 5269 5274 + 5274 5275 5270 + 5270 5275 5276 + 5276 5271 5270 + 5272 5271 5276 + 4720 5273 4714 + 5273 4720 5277 + 5273 5277 5274 + 5274 5277 5278 + 5278 5279 5274 + 5279 5280 5274 + 5275 5274 5280 + 5277 4720 4719 + 4719 5278 5277 + 4729 5278 4719 + 5278 4729 5281 + 5281 5279 5278 + 5282 5279 5281 + 5279 5282 5283 + 5283 5280 5279 + 5280 5283 5284 + 5284 5285 5280 + 5280 5285 5275 + 5281 4729 5286 + 5286 5287 5281 + 5288 5281 5287 + 5281 5288 5282 + 5282 5288 5289 + 5289 5290 5282 + 5283 5282 5290 + 4728 5286 4729 + 4738 5286 4728 + 5286 4738 5291 + 5291 5287 5286 + 5292 5287 5291 + 5287 5292 5288 + 5288 5292 5293 + 5293 5289 5288 + 5294 5289 5293 + 5290 5289 5294 + 5295 5291 4738 + 5296 5291 5295 + 5291 5296 5292 + 5292 5296 5297 + 5297 5293 5292 + 5298 5293 5297 + 5293 5298 5294 + 4748 5295 4738 + 5299 5295 4748 + 5300 5295 5299 + 5295 5300 5296 + 5296 5300 5301 + 5301 5297 5296 + 5302 5297 5301 + 5297 5302 5298 + 4748 4753 5299 + 5303 5299 4753 + 5304 5299 5303 + 5299 5304 5300 + 5300 5304 5305 + 5305 5301 5300 + 5306 5301 5305 + 5301 5306 5302 + 4753 5307 5303 + 5308 5303 5307 + 5309 5303 5308 + 5303 5309 5304 + 5304 5309 5310 + 5310 5305 5304 + 4787 5305 5310 + 5305 4787 5306 + 4758 5307 4753 + 5311 5307 4758 + 5307 5311 5308 + 5311 5312 5308 + 4773 5308 5312 + 5308 4773 5309 + 5309 4773 4772 + 4772 5310 5309 + 4778 5310 4772 + 5310 4778 4787 + 4758 5313 5311 + 5311 5313 5314 + 5314 5312 5311 + 4768 5312 5314 + 5312 4768 4773 + 5313 4758 4757 + 4757 4763 5313 + 5313 4763 5314 + 4762 5314 4763 + 5314 4762 4768 + 5306 4787 4786 + 4786 4792 5306 + 5302 5306 4792 + 4792 5315 5302 + 5298 5302 5315 + 5315 5316 5298 + 5294 5298 5316 + 4796 5315 4792 + 5316 5315 4796 + 4796 5317 5316 + 5316 5317 5318 + 5318 5319 5316 + 5316 5319 5294 + 5320 5294 5319 + 5294 5320 5290 + 5317 4796 5321 + 5321 5322 5317 + 5318 5317 5322 + 5322 5323 5318 + 5324 5318 5323 + 5318 5324 5325 + 5325 5319 5318 + 5319 5325 5320 + 4795 5321 4796 + 5326 5321 4795 + 5321 5326 5327 + 5327 5322 5321 + 5322 5327 5328 + 5328 5323 5322 + 5323 5328 5329 + 5329 5330 5323 + 5323 5330 5324 + 4795 4801 5326 + 5326 4801 5331 + 5331 5332 5326 + 5327 5326 5332 + 5332 5333 5327 + 5328 5327 5333 + 5333 5334 5328 + 5329 5328 5334 + 4806 5331 4801 + 5331 4806 5335 + 5335 5336 5331 + 5331 5336 5337 + 5337 5332 5331 + 5332 5337 5338 + 5338 5333 5332 + 5333 5338 5339 + 5339 5334 5333 + 5335 4806 4805 + 4805 5340 5335 + 5341 5335 5340 + 5336 5335 5341 + 5341 5342 5336 + 5337 5336 5342 + 5343 5337 5342 + 5338 5337 5343 + 5343 5344 5338 + 5339 5338 5344 + 5345 5340 4805 + 5340 5345 5346 + 5346 5341 5340 + 5342 5341 5346 + 5346 5347 5342 + 5342 5347 5348 + 5348 5349 5342 + 5342 5349 5343 + 4805 4804 5345 + 5345 4804 4811 + 4811 5350 5345 + 5345 5350 5351 + 5351 5346 5345 + 5347 5346 5351 + 5351 5352 5347 + 5348 5347 5352 + 4869 5348 5352 + 5353 5348 4869 + 5349 5348 5353 + 5350 4811 4810 + 4810 5354 5350 + 5350 5354 5355 + 5355 5351 5350 + 5351 5355 5356 + 5356 5352 5351 + 5352 5356 4860 + 4860 4864 5352 + 5352 4864 4869 + 5354 4810 5357 + 5357 5358 5354 + 5354 5358 5359 + 5359 5355 5354 + 5356 5355 5359 + 5359 4855 5356 + 4860 5356 4855 + 4814 5357 4810 + 5360 5357 4814 + 5358 5357 5360 + 5360 5361 5358 + 5358 5361 5362 + 5362 5359 5358 + 5359 5362 5363 + 5363 4855 5359 + 4855 5363 4856 + 4857 4856 5363 + 4814 4819 5360 + 5360 4819 5364 + 5364 5365 5360 + 5361 5360 5365 + 5365 5366 5361 + 5362 5361 5366 + 5366 5367 5362 + 5363 5362 5367 + 5367 5368 5363 + 5363 5368 4857 + 4824 5364 4819 + 5369 5364 4824 + 5364 5369 5370 + 5370 5365 5364 + 5366 5365 5370 + 5370 5371 5366 + 5366 5371 5372 + 5372 5367 5366 + 5372 5368 5367 + 5368 5372 5373 + 5373 4857 5368 + 5369 4824 5374 + 5374 5375 5369 + 5370 5369 5375 + 5375 5376 5370 + 5377 5376 5375 + 5375 5378 5377 + 5377 5378 5379 + 4823 5374 4824 + 5378 5374 4823 + 5378 5375 5374 + 4823 5380 5378 + 5378 5380 5379 + 5381 5380 4823 + 5380 5381 5382 + 5382 5383 5380 + 5383 5382 5384 + 5384 5385 5383 + 4823 5386 5381 + 5381 5386 5387 + 5387 5388 5381 + 5382 5381 5388 + 5388 5389 5382 + 5384 5382 5389 + 5386 4823 4829 + 4829 5390 5386 + 5387 5386 5390 + 5390 5391 5387 + 5392 5387 5391 + 5388 5387 5392 + 5392 5393 5388 + 5388 5393 5394 + 5394 5389 5388 + 4828 5390 4829 + 5390 4828 4834 + 4834 5391 5390 + 5391 4834 4839 + 4839 5395 5391 + 5391 5395 5392 + 5396 5392 5395 + 5393 5392 5396 + 5396 5397 5393 + 5393 5397 5398 + 5398 5394 5393 + 5395 4839 4838 + 4838 4848 5395 + 5395 4848 5396 + 5399 5396 4848 + 5397 5396 5399 + 5399 5400 5397 + 5397 5400 5401 + 5401 5398 5397 + 5402 5398 5401 + 5398 5402 5403 + 5403 5394 5398 + 4848 4847 5399 + 5404 5399 4847 + 5400 5399 5404 + 5404 5405 5400 + 5400 5405 5406 + 5406 5401 5400 + 5407 5401 5406 + 5401 5407 5402 + 4847 5408 5404 + 5409 5404 5408 + 5404 5409 5410 + 5410 5405 5404 + 5405 5410 5411 + 5411 5412 5405 + 5405 5412 5406 + 4846 5408 4847 + 5408 4846 4857 + 4857 5373 5408 + 5408 5373 5409 + 5409 5373 5372 + 5413 5409 5372 + 5410 5409 5413 + 5413 5414 5410 + 5410 5414 5415 + 5372 5371 5413 + 5416 5413 5371 + 5413 5416 5414 + 5371 5370 5416 + 5417 5411 5410 + 5418 5411 5417 + 5411 5418 5419 + 5419 5412 5411 + 5412 5419 5420 + 5420 5406 5412 + 5421 5406 5420 + 5406 5421 5407 + 5417 5422 5418 + 5423 5418 5422 + 5419 5418 5423 + 5423 5424 5419 + 5419 5424 4174 + 5420 5419 4174 + 4174 4179 5420 + 5421 5420 4179 + 4179 4178 5421 + 5407 5421 4178 + 5425 5423 5422 + 5426 5423 5425 + 5424 5423 5426 + 5426 5427 5424 + 5424 5427 5428 + 5428 4174 5424 + 4174 5428 4166 + 5425 5429 5426 + 5426 5429 5430 + 5430 5431 5426 + 5427 5426 5431 + 5431 5432 5427 + 5428 5427 5432 + 5432 5433 5428 + 4166 5428 5433 + 5429 5425 5434 + 5429 5434 4208 + 4208 5430 5429 + 5435 5430 4208 + 5430 5435 5436 + 5436 5431 5430 + 5431 5436 5437 + 5437 5432 5431 + 5434 5425 5438 + 5438 4203 5434 + 4208 5434 4203 + 5385 5438 5425 + 5439 5438 5385 + 5438 5439 4198 + 4198 4203 5438 + 5385 5384 5439 + 5440 5439 5384 + 4198 5439 5440 + 5440 4189 4198 + 4183 4189 5440 + 5440 5441 4183 + 4183 5441 5442 + 5442 4184 4183 + 5384 5443 5440 + 5441 5440 5443 + 5443 5403 5441 + 5442 5441 5403 + 5403 5402 5442 + 5444 5442 5402 + 5444 4184 5442 + 4184 5444 4178 + 4178 5444 5407 + 5389 5443 5384 + 5443 5389 5394 + 5394 5403 5443 + 5402 5407 5444 + 4208 4213 5435 + 5435 4213 5445 + 5445 5446 5435 + 5435 5446 5447 + 5447 5448 5435 + 5448 5436 5435 + 4218 5445 4213 + 5449 5445 4218 + 5445 5449 5450 + 5450 5446 5445 + 5446 5450 5451 + 5451 5447 5446 + 5447 5451 5452 + 5447 5452 5453 + 5453 5448 5447 + 4218 5454 5449 + 5455 5449 5454 + 5450 5449 5455 + 5455 5456 5450 + 5451 5450 5456 + 5457 5451 5456 + 5452 5451 5457 + 4217 5454 4218 + 5454 4217 5458 + 5458 5459 5454 + 5454 5459 5455 + 5459 5460 5455 + 5461 5455 5460 + 5456 5455 5461 + 5458 4217 4226 + 4226 5462 5458 + 5463 5458 5462 + 5458 5463 5459 + 5459 5463 5464 + 5464 5460 5459 + 5460 5464 5465 + 5460 5465 5461 + 5466 5462 4226 + 5466 5467 5462 + 5462 5467 5463 + 5463 5467 5468 + 5468 5464 5463 + 5465 5464 5468 + 5468 5469 5465 + 5461 5465 5469 + 4226 5470 5466 + 5471 5466 5470 + 5467 5466 5471 + 5471 5468 5467 + 5468 5471 5472 + 5472 5469 5468 + 5469 5472 5473 + 5473 5474 5469 + 5469 5474 5461 + 5470 4226 5475 + 5475 5476 5470 + 5470 5476 5477 + 5477 5478 5470 + 5470 5478 5471 + 5472 5471 5478 + 5475 4226 4225 + 4225 5479 5475 + 5480 5475 5479 + 5476 5475 5480 + 5480 5481 5476 + 5476 5481 5482 + 5482 5477 5476 + 4231 5479 4225 + 5479 4231 5483 + 5483 5484 5479 + 5479 5484 5480 + 5484 5485 5480 + 5486 5480 5485 + 5480 5486 5481 + 5481 5486 5487 + 5487 5482 5481 + 3976 5483 4231 + 3975 5483 3976 + 5483 3975 5484 + 5484 3975 3974 + 3974 5485 5484 + 5485 3974 5488 + 5488 5489 5485 + 5485 5489 5486 + 5486 5489 5490 + 5490 5487 5486 + 5491 5487 5490 + 5487 5491 5482 + 5482 5491 5492 + 5492 5477 5482 + 5488 3974 3973 + 3973 5493 5488 + 5488 5493 5494 + 5494 5495 5488 + 5489 5488 5495 + 5495 5490 5489 + 5495 5496 5490 + 5490 5496 5491 + 5491 5496 5497 + 5492 5491 5497 + 3980 5493 3973 + 5493 3980 5498 + 5498 5499 5493 + 5493 5499 5494 + 5500 5494 5499 + 5500 5497 5494 + 5494 5497 5496 + 5496 5495 5494 + 3985 5498 3980 + 5501 5498 3985 + 5499 5498 5501 + 5501 5502 5499 + 5499 5502 5500 + 5500 5502 5503 + 5503 5504 5500 + 5497 5500 5504 + 3985 5505 5501 + 5501 5505 5506 + 5506 5507 5501 + 5502 5501 5507 + 5507 5503 5502 + 5503 5507 5508 + 5503 5508 5509 + 5509 5504 5503 + 5510 5505 3985 + 5505 5510 5511 + 5511 5512 5505 + 5505 5512 5506 + 3985 3984 5510 + 5510 3984 5513 + 5513 5514 5510 + 5511 5510 5514 + 5514 5515 5511 + 5516 5511 5515 + 5512 5511 5516 + 5513 3984 3983 + 5517 5513 3983 + 5518 5513 5517 + 5518 5514 5513 + 5514 5518 5519 + 5519 5515 5514 + 5515 5519 5520 + 5520 5521 5515 + 5515 5521 5516 + 5522 5517 3983 + 5523 5517 5522 + 5523 5524 5517 + 5517 5524 5518 + 5519 5518 5524 + 5525 5519 5524 + 5520 5519 5525 + 3983 5526 5522 + 5527 5522 5526 + 5528 5522 5527 + 5522 5528 5523 + 5523 5528 5529 + 5530 5523 5529 + 5524 5523 5530 + 3989 5526 3983 + 5526 3989 5531 + 5526 5531 5527 + 5532 5527 5531 + 5528 5527 5532 + 5532 5529 5528 + 5531 3989 3988 + 3988 5532 5531 + 5532 3988 5529 + 5529 3988 5533 + 5533 5534 5529 + 5529 5534 5535 + 5535 5530 5529 + 5536 5530 5535 + 5537 5530 5536 + 5530 5537 5524 + 5538 5533 3988 + 5539 5533 5538 + 5534 5533 5539 + 5534 5539 5540 + 5540 5535 5534 + 5541 5535 5540 + 5535 5541 5536 + 5542 5538 3988 + 5543 5538 5542 + 5538 5543 5544 + 5538 5544 5539 + 5539 5544 5545 + 5546 5542 3988 + 5547 5542 5546 + 5547 5548 5542 + 5542 5548 5543 + 5543 5548 5549 + 5549 5550 5543 + 5544 5543 5550 + 4234 5546 3988 + 4233 5546 4234 + 5551 5546 4233 + 5546 5551 5547 + 5547 5551 5552 + 3987 4234 3988 + 4235 4234 3987 + 3987 3986 4235 + 4235 3986 5553 + 5554 5540 5539 + 4233 4232 5551 + 5551 4232 237 + 237 5555 5551 + 5541 5540 5545 + 5545 5556 5541 + 5541 5556 5557 + 5557 5536 5541 + 5558 5536 5557 + 5536 5558 5537 + 5556 5545 5559 + 5559 5560 5556 + 5556 5560 5561 + 5561 5557 5556 + 5562 5557 5561 + 5557 5562 5558 + 5559 5545 5563 + 5563 5564 5559 + 5565 5559 5564 + 5560 5559 5565 + 5565 5566 5560 + 5566 5561 5560 + 5567 5561 5566 + 5561 5567 5562 + 5568 5563 5545 + 5569 5563 5568 + 5569 5564 5563 + 5564 5569 5570 + 5570 5565 5564 + 5565 5570 5571 + 5571 5566 5565 + 5566 5571 5567 + 5572 5567 5571 + 5562 5567 5572 + 5544 5568 5545 + 5550 5568 5544 + 5568 5550 5573 + 5573 5574 5568 + 5568 5574 5569 + 5570 5569 5574 + 5574 5575 5570 + 5575 5576 5570 + 5576 5571 5570 + 5571 5576 5572 + 5573 5550 5549 + 5549 5577 5573 + 5577 5578 5573 + 5574 5573 5578 + 5578 5575 5574 + 5575 5578 5579 + 5576 5575 5579 + 5576 5579 5580 + 5580 5572 5576 + 5581 5577 5549 + 5577 5581 5579 + 5579 5578 5577 + 5549 5582 5581 + 5581 5582 5583 + 5583 5584 5581 + 5581 5584 5580 + 5580 5579 5581 + 5582 5549 5585 + 5585 5586 5582 + 5583 5582 5586 + 5586 5587 5583 + 5587 5588 5583 + 5589 5583 5588 + 5583 5589 5584 + 5548 5585 5549 + 5590 5585 5548 + 5586 5585 5590 + 5590 5591 5586 + 5586 5591 5592 + 5592 5587 5586 + 5593 5587 5592 + 5587 5593 5594 + 5594 5588 5587 + 5548 5547 5590 + 3895 5590 5547 + 5591 5590 3895 + 3895 5595 5591 + 5592 5591 5595 + 5595 5596 5592 + 5593 5592 5596 + 5596 5597 5593 + 5593 5597 5598 + 5598 5594 5593 + 5599 3895 5547 + 5508 5507 5506 + 5506 5600 5508 + 5508 5600 5601 + 5601 5509 5508 + 5602 5509 5601 + 5504 5509 5602 + 5600 5506 5603 + 5603 5604 5600 + 5600 5604 5605 + 5605 5601 5600 + 5601 5605 5606 + 5606 5607 5601 + 5601 5607 5602 + 5603 5506 5512 + 5512 5608 5603 + 5603 5608 5609 + 5609 5610 5603 + 5604 5603 5610 + 5610 5611 5604 + 5605 5604 5611 + 5611 5612 5605 + 5606 5605 5612 + 5516 5608 5512 + 5608 5516 5613 + 5613 5609 5608 + 5609 5613 5614 + 5614 5615 5609 + 5609 5615 5616 + 5616 5610 5609 + 5611 5610 5616 + 5613 5516 5521 + 5521 5617 5613 + 5614 5613 5617 + 5617 5618 5614 + 5619 5614 5618 + 5615 5614 5619 + 5619 5620 5615 + 5616 5615 5620 + 5621 5617 5521 + 5617 5621 5622 + 5622 5618 5617 + 5618 5622 5623 + 5623 5624 5618 + 5618 5624 5619 + 5625 5619 5624 + 5620 5619 5625 + 5521 5520 5621 + 5621 5520 5626 + 5626 5627 5621 + 5622 5621 5627 + 5627 5628 5622 + 5623 5622 5628 + 5628 5629 5623 + 5630 5623 5629 + 5624 5623 5630 + 5525 5626 5520 + 5631 5626 5525 + 5626 5631 5632 + 5632 5627 5626 + 5627 5632 5633 + 5633 5628 5627 + 5628 5633 5634 + 5634 5629 5628 + 5525 5635 5631 + 5631 5635 5636 + 5636 5637 5631 + 5632 5631 5637 + 5637 5638 5632 + 5633 5632 5638 + 5638 5639 5633 + 5634 5633 5639 + 5635 5525 5640 + 5640 5641 5635 + 5636 5635 5641 + 5642 5636 5641 + 5643 5636 5642 + 5636 5643 5644 + 5644 5637 5636 + 5640 5525 5524 + 5524 5537 5640 + 5645 5640 5537 + 5641 5640 5645 + 5645 5646 5641 + 5641 5646 5647 + 5647 5648 5641 + 5641 5648 5642 + 5537 5558 5645 + 5649 5645 5558 + 5646 5645 5649 + 5649 5650 5646 + 5647 5646 5650 + 5650 5589 5647 + 5588 5647 5589 + 5647 5588 5594 + 5594 5648 5647 + 5558 5562 5649 + 5572 5649 5562 + 5650 5649 5572 + 5572 5580 5650 + 5650 5580 5584 + 5584 5589 5650 + 5648 5594 5598 + 5598 5642 5648 + 5651 5642 5598 + 5642 5651 5643 + 5643 5651 5652 + 5652 5653 5643 + 5644 5643 5653 + 5653 5654 5644 + 5655 5644 5654 + 5637 5644 5655 + 5598 5656 5651 + 5651 5656 5657 + 5657 5652 5651 + 5652 5657 5658 + 5652 5658 5659 + 5659 5653 5652 + 5654 5653 5659 + 5656 5598 5597 + 5597 5660 5656 + 5656 5660 5661 + 5661 5657 5656 + 5658 5657 5661 + 5661 5662 5658 + 5659 5658 5662 + 5663 5659 5662 + 5654 5659 5663 + 5663 5664 5654 + 5654 5664 5655 + 5660 5597 5596 + 5596 5665 5660 + 5660 5665 5666 + 5666 5661 5660 + 5661 5666 5667 + 5667 5662 5661 + 5665 5596 5595 + 5595 5668 5665 + 5665 5668 5669 + 5669 5666 5665 + 5667 5666 5669 + 5669 5670 5667 + 5671 5667 5670 + 5662 5667 5671 + 5668 5595 3895 + 3895 3893 5668 + 5668 3893 3900 + 3900 5669 5668 + 5669 3900 3899 + 3899 5670 5669 + 5670 3899 3904 + 3904 3903 5670 + 5670 3903 5671 + 3908 5671 3903 + 5672 5671 3908 + 5671 5672 5662 + 5662 5672 5673 + 5673 5663 5662 + 5674 5663 5673 + 5663 5674 5675 + 5675 5664 5663 + 5664 5675 5676 + 5676 5655 5664 + 3908 5677 5672 + 5672 5677 5678 + 5678 5673 5672 + 5679 5673 5678 + 5673 5679 5674 + 5680 5674 5679 + 5675 5674 5680 + 5677 3908 3907 + 3907 3913 5677 + 5677 3913 5681 + 5681 5678 5677 + 5682 5678 5681 + 5678 5682 5679 + 5679 5682 5683 + 5683 5684 5679 + 5679 5684 5685 + 5685 5680 5679 + 5686 5681 3913 + 5687 5681 5686 + 5681 5687 5682 + 5683 5682 5687 + 5688 5683 5687 + 5689 5683 5688 + 5684 5683 5689 + 3913 3912 5686 + 5686 3912 5690 + 5690 5691 5686 + 5691 5692 5686 + 5693 5686 5692 + 5686 5693 5687 + 3911 5690 3912 + 5690 3911 5694 + 5694 5695 5690 + 5690 5695 5696 + 5696 5691 5690 + 5697 5691 5696 + 5691 5697 5698 + 5698 5692 5691 + 5694 3911 3910 + 3910 5699 5694 + 3909 5699 3910 + 5699 3909 5700 + 5700 5701 5699 + 5655 5638 5637 + 5638 5655 5676 + 5676 5639 5638 + 5639 5676 5702 + 5702 5703 5639 + 5639 5703 5634 + 5704 5634 5703 + 5629 5634 5704 + 5702 5676 5675 + 5675 5705 5702 + 5706 5702 5705 + 5703 5702 5706 + 5706 5707 5703 + 5703 5707 5704 + 5708 5704 5707 + 5709 5704 5708 + 5704 5709 5629 + 5629 5709 5630 + 5680 5705 5675 + 5705 5680 5710 + 5705 5710 5706 + 5706 5710 5711 + 5711 5712 5706 + 5707 5706 5712 + 5712 5713 5707 + 5707 5713 5708 + 5710 5680 5685 + 5685 5711 5710 + 5711 5685 5714 + 5711 5714 5715 + 5715 5712 5711 + 5713 5712 5715 + 5715 5716 5713 + 5713 5716 5717 + 5717 5708 5713 + 5718 5708 5717 + 5708 5718 5709 + 5714 5685 5719 + 5719 5720 5714 + 5714 5720 5721 + 5721 5722 5714 + 5722 5715 5714 + 5716 5715 5722 + 5684 5719 5685 + 5723 5719 5684 + 5720 5719 5723 + 5720 5723 5724 + 5724 5721 5720 + 5725 5721 5724 + 5721 5725 5726 + 5726 5722 5721 + 5727 5722 5726 + 5722 5727 5716 + 5684 5689 5723 + 5723 5689 5728 + 5728 5724 5723 + 5729 5724 5728 + 5724 5729 5725 + 5725 5729 5730 + 5730 5731 5725 + 5725 5731 5732 + 5732 5726 5725 + 5688 5728 5689 + 5733 5728 5688 + 5728 5733 5729 + 5729 5733 5734 + 5734 5735 5729 + 5735 5730 5729 + 5736 5730 5735 + 5736 5731 5730 + 5731 5736 5737 + 5737 5732 5731 + 5688 5738 5733 + 5733 5738 5739 + 5739 5734 5733 + 5740 5734 5739 + 5734 5740 5741 + 5741 5735 5734 + 5738 5688 5742 + 5742 5743 5738 + 5738 5743 5744 + 5739 5738 5744 + 5745 5739 5744 + 5746 5739 5745 + 5739 5746 5740 + 5687 5742 5688 + 5747 5742 5687 + 5742 5747 5748 + 5748 5743 5742 + 5743 5748 5749 + 5749 5744 5743 + 5687 5693 5747 + 5750 5747 5693 + 5748 5747 5750 + 5750 5751 5748 + 5749 5748 5751 + 5751 5752 5749 + 5753 5749 5752 + 5753 5744 5749 + 5693 5754 5750 + 5755 5750 5754 + 5750 5755 5756 + 5756 5751 5750 + 5751 5756 5757 + 5757 5752 5751 + 5692 5754 5693 + 5758 5754 5692 + 5754 5758 5755 + 5755 5758 5759 + 5759 5760 5755 + 5756 5755 5760 + 5760 5761 5756 + 5757 5756 5761 + 5692 5698 5758 + 5758 5698 5762 + 5762 5763 5758 + 5758 5763 5759 + 5764 5759 5763 + 5765 5759 5764 + 5759 5765 5766 + 5766 5760 5759 + 5767 5762 5698 + 5768 5762 5767 + 5768 5763 5762 + 5763 5768 5764 + 5764 5768 5769 + 5770 5764 5769 + 5765 5764 5770 + 5698 5697 5767 + 5697 5771 5767 + 5772 5767 5771 + 5769 5767 5772 + 5767 5769 5768 + 5773 5771 5697 + 5774 5771 5773 + 5771 5774 5772 + 5772 5774 5775 + 5775 5776 5772 + 5776 5777 5772 + 5769 5772 5777 + 5777 5778 5769 + 5697 5779 5773 + 5780 5773 5779 + 5774 5773 5780 + 5780 5775 5774 + 5775 5780 5781 + 5696 5779 5697 + 5779 5696 5782 + 5782 5783 5779 + 5779 5783 5780 + 5781 5780 5783 + 5783 5784 5781 + 5785 5781 5784 + 5786 5781 5785 + 5782 5696 5695 + 5695 5787 5782 + 5788 5782 5787 + 5783 5782 5788 + 5788 5784 5783 + 5784 5788 5789 + 5789 5790 5784 + 5784 5790 5785 + 5791 5787 5695 + 5787 5791 5792 + 5792 5793 5787 + 5787 5793 5788 + 5789 5788 5793 + 5793 5794 5789 + 5795 5789 5794 + 5790 5789 5795 + 5695 5694 5791 + 5701 5791 5694 + 5792 5791 5701 + 5701 5796 5792 + 5796 5797 5792 + 5797 5798 5792 + 5793 5792 5798 + 5798 5794 5793 + 5694 5799 5701 + 5796 5701 5800 + 5437 5436 5448 + 5448 5801 5437 + 5437 5801 5802 + 5802 5803 5437 + 5432 5437 5803 + 5803 5433 5432 + 5801 5448 5453 + 5801 5453 5804 + 5804 5805 5801 + 5801 5805 5802 + 5806 5802 5805 + 5807 5802 5806 + 5802 5807 5808 + 5808 5803 5802 + 5433 5803 5808 + 5433 5808 4166 + 5804 5453 5452 + 5452 5809 5804 + 5809 5810 5804 + 5810 5811 5804 + 5811 5812 5804 + 5812 5813 5804 + 5814 5804 5813 + 5814 5805 5804 + 5457 5809 5452 + 5457 5815 5809 + 5809 5815 5816 + 5816 5810 5809 + 5816 5817 5810 + 5810 5817 5818 + 5818 5811 5810 + 5815 5457 5819 + 5819 5820 5815 + 5815 5820 5821 + 5821 5816 5815 + 5817 5816 5821 + 5821 5822 5817 + 5817 5822 5823 + 5823 5818 5817 + 5456 5819 5457 + 5824 5819 5456 + 5820 5819 5824 + 5824 5825 5820 + 5820 5825 5826 + 5826 5827 5820 + 5820 5827 5821 + 5456 5828 5824 + 5828 5829 5824 + 5825 5824 5829 + 5829 5830 5825 + 5826 5825 5830 + 5461 5828 5456 + 5828 5461 5831 + 5831 5829 5828 + 5829 5831 5832 + 5832 5830 5829 + 5830 5832 5833 + 5833 5834 5830 + 5830 5834 5826 + 5835 5831 5461 + 5832 5831 5835 + 5835 5836 5832 + 5833 5832 5836 + 5474 5835 5461 + 5837 5835 5474 + 5835 5837 5836 + 5836 5837 5838 + 5838 5839 5836 + 5836 5839 5833 + 5474 5840 5837 + 5838 5837 5840 + 5840 5841 5838 + 5841 5842 5838 + 5843 5838 5842 + 5839 5838 5843 + 5840 5474 5473 + 5840 5473 5844 + 5844 5841 5840 + 5841 5844 5845 + 5841 5845 5846 + 5846 5842 5841 + 5842 5846 5847 + 5842 5847 5843 + 5844 5473 5472 + 5472 5848 5844 + 5845 5844 5848 + 5848 5492 5845 + 5845 5492 5497 + 5846 5845 5497 + 5497 5849 5846 + 5847 5846 5849 + 5478 5848 5472 + 5848 5478 5477 + 5477 5492 5848 + 5504 5849 5497 + 5602 5849 5504 + 5849 5602 5847 + 5847 5602 5607 + 5843 5847 5607 + 5607 5850 5843 + 5839 5843 5850 + 5850 5851 5839 + 5839 5851 5833 + 5852 5850 5607 + 5850 5852 5853 + 5853 5851 5850 + 5851 5853 5854 + 5854 5855 5851 + 5851 5855 5833 + 5607 5606 5852 + 5856 5852 5606 + 5853 5852 5856 + 5856 5857 5853 + 5853 5857 5858 + 5854 5853 5858 + 5859 5856 5606 + 5860 5856 5859 + 5857 5856 5860 + 5857 5860 5861 + 5861 5862 5857 + 5857 5862 5858 + 5863 5859 5606 + 5864 5859 5863 + 5865 5859 5864 + 5859 5865 5860 + 5860 5865 5866 + 5861 5860 5866 + 5606 5867 5863 + 5868 5863 5867 + 5869 5863 5868 + 5863 5869 5864 + 5870 5864 5869 + 5865 5864 5870 + 5870 5866 5865 + 5612 5867 5606 + 5871 5867 5612 + 5867 5871 5868 + 5872 5868 5871 + 5873 5868 5872 + 5868 5873 5869 + 5869 5873 5874 + 5874 5875 5869 + 5869 5875 5870 + 5612 5876 5871 + 5871 5876 5877 + 5877 5878 5871 + 5871 5878 5872 + 5879 5872 5878 + 5880 5872 5879 + 5872 5880 5873 + 5874 5873 5880 + 5876 5612 5611 + 5611 5881 5876 + 5876 5881 5882 + 5882 5877 5876 + 5883 5877 5882 + 5877 5883 5884 + 5884 5878 5877 + 5878 5884 5879 + 5616 5881 5611 + 5881 5616 5885 + 5885 5882 5881 + 5882 5885 5886 + 5886 5887 5882 + 5882 5887 5883 + 5620 5885 5616 + 5886 5885 5620 + 5620 5888 5886 + 5889 5886 5888 + 5887 5886 5889 + 5889 5890 5887 + 5883 5887 5890 + 5890 5891 5883 + 5891 5892 5883 + 5884 5883 5892 + 5625 5888 5620 + 5888 5625 5893 + 5893 5894 5888 + 5888 5894 5889 + 5895 5889 5894 + 5889 5895 5896 + 5896 5890 5889 + 5890 5896 5897 + 5897 5891 5890 + 5893 5625 5898 + 5898 5899 5893 + 5900 5893 5899 + 5894 5893 5900 + 5900 5901 5894 + 5894 5901 5895 + 5624 5898 5625 + 5630 5898 5624 + 5898 5630 5902 + 5902 5899 5898 + 5899 5902 5903 + 5903 5904 5899 + 5899 5904 5900 + 5900 5904 5905 + 5906 5900 5905 + 5901 5900 5906 + 5902 5630 5709 + 5709 5718 5902 + 5903 5902 5718 + 5718 5907 5903 + 5908 5903 5907 + 5904 5903 5908 + 5908 5909 5904 + 5904 5909 5905 + 5717 5907 5718 + 5907 5717 5910 + 5910 5911 5907 + 5907 5911 5908 + 5912 5908 5911 + 5909 5908 5912 + 5912 5913 5909 + 5909 5913 5914 + 5914 5905 5909 + 5910 5717 5716 + 5716 5727 5910 + 5915 5910 5727 + 5911 5910 5915 + 5915 5916 5911 + 5911 5916 5912 + 5917 5912 5916 + 5913 5912 5917 + 5917 5918 5913 + 5914 5913 5918 + 5727 5919 5915 + 5920 5915 5919 + 5916 5915 5920 + 5920 5921 5916 + 5916 5921 5917 + 5922 5917 5921 + 5918 5917 5922 + 5726 5919 5727 + 5919 5726 5732 + 5732 5923 5919 + 5919 5923 5920 + 5924 5920 5923 + 5921 5920 5924 + 5924 5925 5921 + 5921 5925 5922 + 5926 5922 5925 + 5927 5922 5926 + 5922 5927 5918 + 5923 5732 5737 + 5737 5928 5923 + 5923 5928 5924 + 5929 5924 5928 + 5925 5924 5929 + 5929 5930 5925 + 5925 5930 5926 + 5931 5926 5930 + 5932 5926 5931 + 5926 5932 5927 + 5928 5737 5933 + 5933 5934 5928 + 5928 5934 5929 + 5935 5929 5934 + 5930 5929 5935 + 5935 5936 5930 + 5930 5936 5931 + 5933 5737 5736 + 5736 5937 5933 + 5938 5933 5937 + 5937 5939 5938 + 5940 5938 5939 + 5941 5938 5940 + 5938 5941 5934 + 5934 5941 5935 + 5735 5937 5736 + 5939 5937 5735 + 5735 5741 5939 + 5939 5741 5942 + 5942 5943 5939 + 5939 5943 5940 + 5944 5940 5943 + 5945 5940 5944 + 5940 5945 5941 + 5941 5945 5946 + 5946 5935 5941 + 5936 5935 5946 + 5947 5942 5741 + 5948 5942 5947 + 5942 5948 5949 + 5949 5943 5942 + 5943 5949 5944 + 5950 5944 5949 + 5951 5944 5950 + 5944 5951 5945 + 5741 5740 5947 + 5952 5947 5740 + 5953 5947 5952 + 5947 5953 5948 + 5948 5953 5954 + 5954 5955 5948 + 5955 5956 5948 + 5949 5948 5956 + 5740 5746 5952 + 5957 5952 5746 + 5958 5952 5957 + 5952 5958 5953 + 5953 5958 5959 + 5959 5954 5953 + 5960 5954 5959 + 5954 5960 5961 + 5961 5955 5954 + 5746 5962 5957 + 5963 5957 5962 + 5957 5963 5964 + 5964 5965 5957 + 5957 5965 5958 + 5958 5965 5966 + 5966 5959 5958 + 5745 5962 5746 + 5967 5962 5745 + 5962 5967 5963 + 5963 5967 5968 + 5968 5969 5963 + 5964 5963 5969 + 5969 5970 5964 + 5971 5964 5970 + 5965 5964 5971 + 5971 5966 5965 + 5745 5972 5967 + 5967 5972 5973 + 5973 5968 5967 + 5974 5968 5973 + 5968 5974 5975 + 5975 5969 5968 + 5969 5975 5976 + 5976 5970 5969 + 5972 5745 5977 + 5977 5978 5972 + 5972 5978 5979 + 5979 5973 5972 + 5980 5973 5979 + 5973 5980 5974 + 5744 5977 5745 + 5981 5977 5744 + 5978 5977 5981 + 5978 5981 5982 + 5982 5979 5978 + 5983 5979 5982 + 5979 5983 5980 + 5980 5983 5984 + 5984 5985 5980 + 5974 5980 5985 + 5744 5753 5981 + 5982 5981 5753 + 5753 5986 5982 + 5987 5982 5986 + 5982 5987 5983 + 5983 5987 5988 + 5988 5984 5983 + 5989 5984 5988 + 5984 5989 5990 + 5990 5985 5984 + 5752 5986 5753 + 5991 5986 5752 + 5986 5991 5987 + 5987 5991 5992 + 5992 5988 5987 + 5993 5988 5992 + 5988 5993 5989 + 5989 5993 5994 + 5994 5995 5989 + 5990 5989 5995 + 5752 5757 5991 + 5991 5757 5996 + 5996 5992 5991 + 5997 5992 5996 + 5992 5997 5993 + 5993 5997 5998 + 5998 5994 5993 + 5999 5994 5998 + 5994 5999 6000 + 6000 5995 5994 + 5761 5996 5757 + 6001 5996 5761 + 5996 6001 5997 + 5997 6001 6002 + 6002 5998 5997 + 6003 5998 6002 + 5998 6003 5999 + 5999 6003 6004 + 6004 6005 5999 + 6000 5999 6005 + 5761 6006 6001 + 6001 6006 6007 + 6007 6002 6001 + 6008 6002 6007 + 6002 6008 6003 + 6003 6008 6009 + 6009 6004 6003 + 6006 5761 5760 + 5760 5766 6006 + 6006 5766 6010 + 6010 6007 6006 + 6011 6007 6010 + 6007 6011 6008 + 6008 6011 6012 + 6012 6009 6008 + 6013 6009 6012 + 6009 6013 6014 + 6014 6004 6009 + 6015 6010 5766 + 6016 6010 6015 + 6010 6016 6011 + 6011 6016 6017 + 6017 6012 6011 + 6018 6012 6017 + 6012 6018 6013 + 5766 5765 6015 + 5765 6019 6015 + 6020 6015 6019 + 6021 6015 6020 + 6015 6021 6016 + 6017 6016 6021 + 6021 6022 6017 + 6023 6017 6022 + 6017 6023 6018 + 5770 6019 5765 + 6024 6019 5770 + 6019 6024 6020 + 6020 6024 6025 + 6025 6026 6020 + 6026 6027 6020 + 6021 6020 6027 + 6027 6022 6021 + 6028 6022 6027 + 6022 6028 6023 + 6024 5770 6029 + 6029 6025 6024 + 6025 6029 6030 + 6025 6030 6031 + 6031 6026 6025 + 6032 6026 6031 + 6026 6032 6033 + 6033 6027 6026 + 6027 6033 6028 + 6029 5770 5769 + 5769 6034 6029 + 6030 6029 5778 + 5778 6035 6030 + 6030 6035 6036 + 6036 6037 6030 + 6037 6031 6030 + 6038 6031 6037 + 6031 6038 6032 + 6035 5778 5777 + 6035 5777 5776 + 5776 6036 6035 + 6036 5776 6039 + 6039 6040 6036 + 6036 6040 6041 + 6041 6037 6036 + 6042 6037 6041 + 6037 6042 6038 + 6039 5776 5775 + 5775 5786 6039 + 6043 6039 5786 + 6040 6039 6043 + 6043 6044 6040 + 6040 6044 6045 + 6045 6041 6040 + 6046 6041 6045 + 6041 6046 6042 + 6047 5786 5775 + 5805 5814 5806 + 5806 5814 6048 + 6048 6049 5806 + 5807 5806 6049 + 6049 4167 5807 + 5807 4167 4166 + 4166 5808 5807 + 5813 6048 5814 + 6050 6048 5813 + 6048 6050 6051 + 6051 6049 6048 + 6049 6051 4168 + 4168 4167 6049 + 6050 5813 5812 + 5812 6052 6050 + 6051 6050 6052 + 6052 6053 6051 + 6053 6054 6051 + 6054 6055 6051 + 4168 6051 6055 + 6055 6056 4168 + 4168 6056 4162 + 6057 6052 5812 + 6052 6057 6058 + 6058 6053 6052 + 6059 6053 6058 + 6053 6059 6060 + 6060 6054 6053 + 6057 5812 5811 + 5811 6061 6057 + 6057 6061 6062 + 6062 6058 6057 + 6063 6058 6062 + 6058 6063 6059 + 6059 6063 6064 + 6064 6065 6059 + 6060 6059 6065 + 5818 6061 5811 + 6061 5818 5823 + 5823 6066 6061 + 6061 6066 6062 + 6067 6062 6066 + 6062 6067 6068 + 6068 6069 6062 + 6062 6069 6063 + 6063 6069 6070 + 6070 6064 6063 + 6071 6066 5823 + 6066 6071 6067 + 6072 6067 6071 + 6068 6067 6072 + 6072 6073 6068 + 6068 6073 6074 + 6074 6075 6068 + 6069 6068 6075 + 6075 6070 6069 + 5823 6076 6071 + 6071 6076 6077 + 6077 6078 6071 + 6071 6078 6072 + 6079 6072 6078 + 6072 6079 6080 + 6080 6073 6072 + 6076 5823 5822 + 5822 6081 6076 + 6077 6076 6081 + 6081 6082 6077 + 6083 6077 6082 + 6077 6083 6084 + 6084 6078 6077 + 6078 6084 6079 + 6085 6079 6084 + 6080 6079 6085 + 6081 5822 5821 + 5821 6086 6081 + 6081 6086 6087 + 6087 6082 6081 + 6088 6082 6087 + 6082 6088 6083 + 6089 6083 6088 + 6084 6083 6089 + 6089 6090 6084 + 6084 6090 6085 + 6086 5821 5827 + 5827 6091 6086 + 6087 6086 6091 + 6091 6092 6087 + 6093 6087 6092 + 6087 6093 6088 + 6088 6093 6094 + 6094 6095 6088 + 6088 6095 6089 + 6091 5827 5826 + 5826 6096 6091 + 6091 6096 6097 + 6097 6092 6091 + 6098 6092 6097 + 6092 6098 6093 + 6094 6093 6098 + 6096 5826 5834 + 5834 6099 6096 + 6097 6096 6099 + 6099 6100 6097 + 6101 6097 6100 + 6097 6101 6098 + 6098 6101 6102 + 6102 6103 6098 + 6098 6103 6094 + 6099 5834 5833 + 5833 6104 6099 + 6099 6104 6105 + 6105 6100 6099 + 6106 6100 6105 + 6100 6106 6101 + 6102 6101 6106 + 6104 5833 5855 + 5855 6107 6104 + 6105 6104 6107 + 6107 6108 6105 + 6109 6105 6108 + 6105 6109 6106 + 6106 6109 6110 + 6110 6111 6106 + 6106 6111 6102 + 6107 5855 5854 + 5854 6112 6107 + 6107 6112 6113 + 6113 6108 6107 + 6114 6108 6113 + 6108 6114 6109 + 6110 6109 6114 + 6112 5854 6115 + 6115 6116 6112 + 6113 6112 6116 + 6116 6117 6113 + 6118 6113 6117 + 6113 6118 6114 + 5858 6115 5854 + 6119 6115 5858 + 6116 6115 6119 + 6119 6120 6116 + 6116 6120 6121 + 6121 6117 6116 + 6122 6117 6121 + 6117 6122 6118 + 6123 6118 6122 + 6114 6118 6123 + 5858 6124 6119 + 6125 6119 6124 + 6120 6119 6125 + 6125 6126 6120 + 6121 6120 6126 + 6126 6127 6121 + 6128 6121 6127 + 6121 6128 6122 + 6124 5858 6129 + 6124 6129 6130 + 6130 6131 6124 + 6124 6131 6125 + 6132 6125 6131 + 6126 6125 6132 + 6129 5858 5862 + 5862 6133 6129 + 6129 6133 6134 + 6134 6135 6129 + 6135 6136 6129 + 6136 6137 6129 + 6137 6138 6129 + 6138 6130 6129 + 6133 5862 5861 + 6133 5861 6139 + 6139 6134 6133 + 6134 6139 6140 + 6134 6140 6141 + 6141 6135 6134 + 6135 6141 6142 + 6135 6142 6143 + 6143 6136 6135 + 5866 6139 5861 + 6140 6139 5866 + 5866 6144 6140 + 6141 6140 6144 + 6144 6145 6141 + 6142 6141 6145 + 6145 6146 6142 + 6142 6146 6147 + 6147 6143 6142 + 6148 6143 6147 + 6136 6143 6148 + 6144 5866 5870 + 6144 5870 6149 + 6149 6145 6144 + 6145 6149 6146 + 6146 6149 6150 + 6150 6151 6146 + 6146 6151 6147 + 6152 6147 6151 + 6153 6147 6152 + 6147 6153 6148 + 6150 6149 5870 + 5875 6150 5870 + 6154 6150 5875 + 6151 6150 6154 + 6154 6155 6151 + 6151 6155 6152 + 6152 6155 6156 + 6156 6157 6152 + 6158 6152 6157 + 6152 6158 6153 + 5875 6159 6154 + 6154 6159 6160 + 6160 6161 6154 + 6155 6154 6161 + 6161 6156 6155 + 6162 6156 6161 + 6156 6162 6163 + 6163 6157 6156 + 6164 6159 5875 + 6159 6164 6165 + 6165 6160 6159 + 6166 6160 6165 + 6160 6166 6167 + 6167 6161 6160 + 6161 6167 6162 + 5875 5874 6164 + 6164 5874 6168 + 6168 6169 6164 + 6164 6169 6170 + 6170 6165 6164 + 6171 6165 6170 + 6165 6171 6166 + 5880 6168 5874 + 6172 6168 5880 + 6168 6172 6173 + 6173 6169 6168 + 6169 6173 6174 + 6174 6170 6169 + 6175 6170 6174 + 6170 6175 6171 + 5880 6176 6172 + 6172 6176 6177 + 6177 6178 6172 + 6173 6172 6178 + 6178 6179 6173 + 6173 6179 6180 + 6180 6174 6173 + 5879 6176 5880 + 6176 5879 6181 + 6181 6177 6176 + 6182 6177 6181 + 6177 6182 6183 + 6183 6178 6177 + 6178 6183 6184 + 6184 6179 6178 + 6179 6184 6185 + 6185 6180 6179 + 6181 5879 5884 + 5884 6186 6181 + 6187 6181 6186 + 6181 6187 6182 + 6182 6187 6188 + 6188 6189 6182 + 6183 6182 6189 + 6189 6190 6183 + 6184 6183 6190 + 5892 6186 5884 + 6191 6186 5892 + 6186 6191 6187 + 6188 6187 6191 + 6191 6192 6188 + 6193 6188 6192 + 6188 6193 6194 + 6194 6189 6188 + 6189 6194 6195 + 6195 6190 6189 + 6191 5892 5891 + 5891 6192 6191 + 6196 6192 5891 + 6192 6196 6193 + 6197 6193 6196 + 6194 6193 6197 + 6197 6198 6194 + 6195 6194 6198 + 6198 6199 6195 + 6200 6195 6199 + 6195 6200 6190 + 6190 6200 6184 + 5891 5897 6196 + 6196 5897 6201 + 6201 6202 6196 + 6196 6202 6197 + 6203 6197 6202 + 6198 6197 6203 + 6203 6204 6198 + 6198 6204 6205 + 6205 6199 6198 + 6206 6201 5897 + 6207 6201 6206 + 6207 6202 6201 + 6202 6207 6203 + 6208 6203 6207 + 6204 6203 6208 + 6208 6209 6204 + 6205 6204 6209 + 6210 6206 5897 + 6211 6206 6210 + 6206 6211 6212 + 6212 6213 6206 + 6206 6213 6207 + 6207 6213 6208 + 6214 6208 6213 + 6208 6214 6209 + 5897 5896 6210 + 6215 6210 5896 + 6210 6215 6216 + 6216 6217 6210 + 6210 6217 6211 + 6211 6217 6218 + 6218 6219 6211 + 6212 6211 6219 + 5896 5895 6215 + 6220 6215 5895 + 6216 6215 6220 + 6220 6221 6216 + 6216 6221 6222 + 6222 6223 6216 + 6217 6216 6223 + 6223 6218 6217 + 5895 5901 6220 + 5906 6220 5901 + 5906 6221 6220 + 6221 5906 6224 + 6224 6222 6221 + 6222 6224 6225 + 6222 6225 6226 + 6226 6223 6222 + 6218 6223 6226 + 6226 6227 6218 + 6218 6227 6228 + 6228 6219 6218 + 5905 6224 5906 + 6225 6224 5905 + 5905 6229 6225 + 6226 6225 6229 + 6230 6226 6229 + 6227 6226 6230 + 6230 6231 6227 + 6228 6227 6231 + 6229 5905 5914 + 5914 6232 6229 + 6229 6232 6233 + 6233 6234 6229 + 6229 6234 6230 + 6235 6230 6234 + 6235 6231 6230 + 6232 5914 5918 + 5918 5927 6232 + 6232 5927 5932 + 5932 6233 6232 + 6236 6233 5932 + 6234 6233 6236 + 6236 6237 6234 + 6234 6237 6235 + 6235 6237 6238 + 6238 6239 6235 + 6231 6235 6239 + 6239 6240 6231 + 6231 6240 6228 + 5932 6241 6236 + 6242 6236 6241 + 6237 6236 6242 + 6242 6238 6237 + 6238 6242 6243 + 6243 6244 6238 + 6238 6244 6245 + 6245 6239 6238 + 6240 6239 6245 + 5931 6241 5932 + 6241 5931 6246 + 6246 6247 6241 + 6241 6247 6242 + 6243 6242 6247 + 6247 6248 6243 + 6249 6243 6248 + 6244 6243 6249 + 6249 6250 6244 + 6245 6244 6250 + 6246 5931 5936 + 5936 6251 6246 + 6252 6246 6251 + 6247 6246 6252 + 6252 6248 6247 + 6248 6252 6253 + 6253 6254 6248 + 6248 6254 6249 + 6255 6249 6254 + 6250 6249 6255 + 5946 6251 5936 + 6251 5946 6256 + 6256 6257 6251 + 6251 6257 6252 + 6253 6252 6257 + 6257 6258 6253 + 6259 6253 6258 + 6254 6253 6259 + 6259 6260 6254 + 6254 6260 6255 + 6256 5946 5945 + 5945 5951 6256 + 6261 6256 5951 + 6257 6256 6261 + 6261 6258 6257 + 6258 6261 6262 + 6262 6263 6258 + 6258 6263 6259 + 6264 6259 6263 + 6260 6259 6264 + 5951 6265 6261 + 6262 6261 6265 + 6265 6266 6262 + 6267 6262 6266 + 6263 6262 6267 + 6267 6268 6263 + 6263 6268 6264 + 5950 6265 5951 + 6265 5950 6269 + 6269 6266 6265 + 6266 6269 6270 + 6270 6271 6266 + 6266 6271 6267 + 6272 6267 6271 + 6268 6267 6272 + 6269 5950 6273 + 6273 6274 6269 + 6270 6269 6274 + 6274 6275 6270 + 6276 6270 6275 + 6271 6270 6276 + 6276 6277 6271 + 6271 6277 6272 + 5949 6273 5950 + 5956 6273 5949 + 6274 6273 5956 + 6274 5956 5955 + 5955 6275 6274 + 6278 6275 5955 + 6275 6278 6276 + 6276 6278 6279 + 6279 6280 6276 + 6277 6276 6280 + 6280 6281 6277 + 6277 6281 6282 + 6282 6272 6277 + 5955 5961 6278 + 6278 5961 6283 + 6283 6279 6278 + 6284 6279 6283 + 6279 6284 6285 + 6285 6280 6279 + 6281 6280 6285 + 6285 6286 6281 + 6281 6286 6287 + 6287 6282 6281 + 6283 5961 5960 + 5960 6288 6283 + 6289 6283 6288 + 6283 6289 6284 + 6284 6289 6290 + 6290 6291 6284 + 6284 6291 6292 + 6292 6285 6284 + 6286 6285 6292 + 6293 6288 5960 + 6294 6288 6293 + 6288 6294 6289 + 6289 6294 6295 + 6295 6296 6289 + 6296 6290 6289 + 5960 6297 6293 + 6293 6297 6298 + 6298 6299 6293 + 6300 6293 6299 + 6293 6300 6294 + 6294 6300 6301 + 6301 6295 6294 + 5959 6297 5960 + 6297 5959 5966 + 5966 6298 6297 + 6302 6298 5966 + 6298 6302 6303 + 6303 6299 6298 + 6299 6303 6304 + 6304 6305 6299 + 6299 6305 6300 + 6301 6300 6305 + 5966 5971 6302 + 6302 5971 6306 + 6306 6307 6302 + 6303 6302 6307 + 6307 6308 6303 + 6304 6303 6308 + 6308 6309 6304 + 6310 6304 6309 + 6305 6304 6310 + 5970 6306 5971 + 6311 6306 5970 + 6306 6311 6312 + 6312 6307 6306 + 6307 6312 6313 + 6313 6308 6307 + 6308 6313 6314 + 6314 6309 6308 + 5970 5976 6311 + 6311 5976 6315 + 6315 6316 6311 + 6312 6311 6316 + 6316 6317 6312 + 6313 6312 6317 + 6317 6318 6313 + 6314 6313 6318 + 6319 6315 5976 + 6320 6315 6319 + 6315 6320 6321 + 6321 6316 6315 + 6316 6321 6322 + 6322 6317 6316 + 6317 6322 6323 + 6323 6318 6317 + 5976 5975 6319 + 6324 6319 5975 + 6325 6319 6324 + 6319 6325 6320 + 6320 6325 6326 + 6326 6327 6320 + 6321 6320 6327 + 6327 6328 6321 + 6322 6321 6328 + 5975 5974 6324 + 5985 6324 5974 + 6329 6324 5985 + 6324 6329 6325 + 6325 6329 6330 + 6330 6326 6325 + 6331 6326 6330 + 6326 6331 6332 + 6332 6327 6326 + 6327 6332 6333 + 6333 6328 6327 + 5985 5990 6329 + 6329 5990 6334 + 6334 6330 6329 + 6335 6330 6334 + 6330 6335 6331 + 6336 6331 6335 + 6332 6331 6336 + 6336 6337 6332 + 6333 6332 6337 + 5995 6334 5990 + 6338 6334 5995 + 6334 6338 6335 + 6335 6338 6339 + 6339 6340 6335 + 6335 6340 6336 + 6341 6336 6340 + 6341 6337 6336 + 5995 6000 6338 + 6338 6000 6342 + 6342 6339 6338 + 6343 6339 6342 + 6339 6343 6344 + 6344 6340 6339 + 6340 6344 6341 + 6345 6341 6344 + 6346 6341 6345 + 6341 6346 6337 + 6005 6342 6000 + 6347 6342 6005 + 6342 6347 6343 + 6343 6347 6348 + 6348 6349 6343 + 6344 6343 6349 + 6349 6350 6344 + 6344 6350 6345 + 6005 6351 6347 + 6347 6351 6352 + 6352 6348 6347 + 6353 6348 6352 + 6348 6353 6354 + 6354 6349 6348 + 6349 6354 6350 + 6351 6005 6004 + 6004 6014 6351 + 6351 6014 6355 + 6355 6352 6351 + 6356 6352 6355 + 6352 6356 6353 + 6353 6356 6357 + 6357 6358 6353 + 6354 6353 6358 + 6358 6359 6354 + 6350 6354 6359 + 6360 6355 6014 + 6361 6355 6360 + 6355 6361 6356 + 6356 6361 6362 + 6357 6356 6362 + 6014 6013 6360 + 6363 6360 6013 + 6364 6360 6363 + 6360 6364 6361 + 6361 6364 6365 + 6365 6366 6361 + 6361 6366 6362 + 6013 6018 6363 + 6367 6363 6018 + 6368 6363 6367 + 6363 6368 6364 + 6365 6364 6368 + 6369 6365 6368 + 6366 6365 6369 + 6369 6370 6366 + 6366 6370 6371 + 6371 6362 6366 + 6018 6023 6367 + 6372 6367 6023 + 6373 6367 6372 + 6367 6373 6368 + 6368 6373 6369 + 6374 6369 6373 + 6370 6369 6374 + 6374 6375 6370 + 6371 6370 6375 + 6023 6028 6372 + 6376 6372 6028 + 6377 6372 6376 + 6372 6377 6373 + 6373 6377 6374 + 6378 6374 6377 + 6377 6379 6378 + 6378 6379 6380 + 6381 6378 6380 + 6028 6033 6376 + 6382 6376 6033 + 6379 6376 6382 + 6376 6379 6377 + 6033 6032 6382 + 6383 6382 6032 + 6380 6382 6383 + 6382 6380 6379 + 6032 6038 6383 + 6384 6383 6038 + 6385 6383 6384 + 6383 6385 6380 + 6380 6385 6381 + 6381 6385 6386 + 6386 6387 6381 + 6375 6381 6387 + 6381 6375 6374 + 6038 6042 6384 + 6388 6384 6042 + 6386 6384 6388 + 6384 6386 6385 + 6042 6046 6388 + 6389 6388 6046 + 6390 6388 6389 + 6388 6390 6386 + 6386 6390 6391 + 6391 6387 6386 + 6387 6391 6392 + 6392 6393 6387 + 6387 6393 6375 + 6046 6394 6389 + 6395 6389 6394 + 6396 6389 6395 + 6389 6396 6390 + 6391 6390 6396 + 6392 6391 6396 + 6045 6394 6046 + 6394 6045 6397 + 6397 6398 6394 + 6394 6398 6395 + 6399 6395 6398 + 6400 6395 6399 + 6395 6400 6396 + 6396 6400 6392 + 6397 6045 6044 + 6044 6401 6397 + 6402 6397 6401 + 6398 6397 6402 + 6402 6403 6398 + 6398 6403 6399 + 6404 6399 6403 + 6405 6399 6404 + 6399 6405 6400 + 6392 6400 6405 + 6406 6401 6044 + 6401 6406 6407 + 6407 6408 6401 + 6401 6408 6402 + 6409 6402 6408 + 6403 6402 6409 + 6409 6410 6403 + 6403 6410 6404 + 6044 6043 6406 + 6406 6043 6411 + 6411 6412 6406 + 6407 6406 6412 + 6412 6413 6407 + 6414 6407 6413 + 6408 6407 6414 + 6414 6415 6408 + 6408 6415 6409 + 5786 6411 6043 + 5785 6411 5786 + 6411 5785 6416 + 6416 6412 6411 + 6412 6416 6417 + 6417 6413 6412 + 6413 6417 6418 + 6418 6419 6413 + 6413 6419 6414 + 6420 6414 6419 + 6415 6414 6420 + 6416 5785 5790 + 5790 6421 6416 + 6417 6416 6421 + 6421 6422 6417 + 6418 6417 6422 + 6422 6423 6418 + 6424 6418 6423 + 6419 6418 6424 + 6424 6425 6419 + 6419 6425 6420 + 5795 6421 5790 + 6421 5795 6426 + 6426 6422 6421 + 6422 6426 6427 + 6427 6423 6422 + 6423 6427 6428 + 6428 6429 6423 + 6423 6429 6424 + 6430 6424 6429 + 6425 6424 6430 + 6426 5795 6431 + 6431 6432 6426 + 6427 6426 6432 + 6432 6433 6427 + 6428 6427 6433 + 6433 6434 6428 + 6435 6428 6434 + 6429 6428 6435 + 5794 6431 5795 + 6436 6431 5794 + 6431 6436 6437 + 6437 6432 6431 + 6432 6437 6438 + 6438 6433 6432 + 6433 6438 6439 + 6439 6434 6433 + 5794 5798 6436 + 6436 5798 5797 + 5797 6440 6436 + 6437 6436 6440 + 6440 198 6437 + 6440 5797 6441 + 6440 6441 6442 + 6442 6443 6440 + 6441 5797 5796 + 5796 123 6441 + 5700 123 5796 + 123 5700 3848 + 3848 6444 123 + 6442 6441 6445 + 6438 6437 6446 + 6446 197 6438 + 6439 6438 197 + 197 3918 6439 + 6447 6439 3918 + 6434 6439 6447 + 6447 6448 6434 + 6434 6448 6435 + 3918 6449 6447 + 6450 6447 6449 + 6448 6447 6450 + 6450 6451 6448 + 6448 6451 6452 + 6452 6435 6448 + 6453 6435 6452 + 6435 6453 6429 + 3917 6449 3918 + 6449 3917 3928 + 3928 6454 6449 + 6449 6454 6450 + 6455 6450 6454 + 6451 6450 6455 + 6455 6456 6451 + 6451 6456 6457 + 6457 6452 6451 + 6458 6452 6457 + 6452 6458 6453 + 6454 3928 6459 + 6459 4104 6454 + 6454 4104 6455 + 4103 6455 4104 + 6456 6455 4103 + 4103 4102 6456 + 6456 4102 6460 + 6460 6457 6456 + 6458 6457 6460 + 6459 3928 3927 + 3927 6461 6459 + 6459 6461 6462 + 4105 6459 6462 + 4104 6459 4105 + 3926 6461 3927 + 6461 3926 3933 + 3933 6462 6461 + 3933 6463 6462 + 6462 6463 6464 + 6464 6465 6462 + 6462 6465 4105 + 4099 4105 6465 + 6465 4100 4099 + 6463 3933 6466 + 6466 6467 6463 + 6463 6467 6468 + 6468 6469 6463 + 6469 6464 6463 + 4100 6464 6469 + 4100 6465 6464 + 3932 6466 3933 + 3938 6466 3932 + 6466 3938 6470 + 6470 6467 6466 + 6467 6470 6471 + 6471 6468 6467 + 6468 6471 6472 + 6472 6473 6468 + 6468 6473 6474 + 6474 6469 6468 + 6470 3938 4140 + 4140 6475 6470 + 6471 6470 6475 + 6475 6476 6471 + 6472 6471 6476 + 6476 4397 6472 + 4401 6472 4397 + 6473 6472 4401 + 4401 4405 6473 + 6474 6473 4405 + 4144 6475 4140 + 6475 4144 6477 + 6477 6476 6475 + 6476 6477 4391 + 4391 4397 6476 + 6477 4144 4148 + 4148 4392 6477 + 4391 6477 4392 + 4153 4392 4148 + 4392 4153 4386 + 4386 4153 4387 + 4152 4387 4153 + 4158 4387 4152 + 4387 4158 4382 + 4382 4158 6478 + 6478 4378 4382 + 6479 4378 6478 + 4378 6479 4372 + 4372 6479 6480 + 6480 4373 4372 + 4157 6478 4158 + 6481 6478 4157 + 6478 6481 6479 + 6479 6481 6482 + 6482 6480 6479 + 6480 6482 6054 + 6054 6060 6480 + 6480 6060 4374 + 4374 4373 6480 + 4157 4163 6481 + 6481 4163 6483 + 6483 6482 6481 + 6054 6482 6483 + 6483 6055 6054 + 6483 6056 6055 + 6056 6483 4163 + 4163 4162 6056 + 6065 4374 6060 + 4368 4374 6065 + 6065 6484 4368 + 4368 6484 4369 + 6485 4369 6484 + 6486 4369 6485 + 4369 6486 4364 + 4360 4364 6486 + 6484 6065 6064 + 6064 6487 6484 + 6484 6487 6485 + 6488 6485 6487 + 6489 6485 6488 + 6485 6489 6486 + 6486 6489 6490 + 6490 6491 6486 + 6486 6491 4360 + 4353 4360 6491 + 6487 6064 6070 + 6070 6492 6487 + 6487 6492 6488 + 6493 6488 6492 + 6488 6493 6494 + 6494 6495 6488 + 6488 6495 6489 + 6489 6495 6496 + 6496 6490 6489 + 6497 6492 6070 + 6492 6497 6493 + 6498 6493 6497 + 6494 6493 6498 + 6498 6499 6494 + 6494 6499 6500 + 6500 6501 6494 + 6495 6494 6501 + 6501 6496 6495 + 6070 6075 6497 + 6497 6075 6074 + 6074 6502 6497 + 6497 6502 6498 + 6503 6498 6502 + 6498 6503 6504 + 6504 6499 6498 + 6499 6504 6505 + 6505 6500 6499 + 6506 6502 6074 + 6502 6506 6503 + 6507 6503 6506 + 6504 6503 6507 + 6507 6508 6504 + 6504 6508 6509 + 6509 6505 6504 + 6510 6505 6509 + 6500 6505 6510 + 6074 6511 6506 + 6506 6511 6512 + 6512 6513 6506 + 6506 6513 6507 + 6514 6507 6513 + 6507 6514 6515 + 6515 6508 6507 + 6511 6074 6073 + 6073 6080 6511 + 6512 6511 6080 + 6080 6516 6512 + 6517 6512 6516 + 6512 6517 6518 + 6518 6513 6512 + 6513 6518 6514 + 6519 6514 6518 + 6515 6514 6519 + 6085 6516 6080 + 6520 6516 6085 + 6516 6520 6517 + 6521 6517 6520 + 6518 6517 6521 + 6521 6522 6518 + 6518 6522 6519 + 6085 6523 6520 + 6520 6523 6524 + 6524 6525 6520 + 6520 6525 6521 + 6526 6521 6525 + 6521 6526 6527 + 6527 6522 6521 + 6523 6085 6090 + 6090 6528 6523 + 6524 6523 6528 + 6528 6529 6524 + 6530 6524 6529 + 6524 6530 6531 + 6531 6525 6524 + 6525 6531 6526 + 6532 6526 6531 + 6527 6526 6532 + 6528 6090 6089 + 6089 6533 6528 + 6528 6533 6534 + 6534 6529 6528 + 6535 6529 6534 + 6529 6535 6530 + 6536 6530 6535 + 6531 6530 6536 + 6536 6537 6531 + 6531 6537 6532 + 6533 6089 6095 + 6095 6538 6533 + 6534 6533 6538 + 6538 6539 6534 + 6540 6534 6539 + 6534 6540 6535 + 6535 6540 6541 + 6541 6542 6535 + 6535 6542 6536 + 6538 6095 6094 + 6094 6543 6538 + 6538 6543 6544 + 6544 6539 6538 + 6545 6539 6544 + 6539 6545 6540 + 6541 6540 6545 + 6543 6094 6103 + 6103 6546 6543 + 6544 6543 6546 + 6546 6547 6544 + 6548 6544 6547 + 6544 6548 6545 + 6545 6548 6549 + 6549 6550 6545 + 6545 6550 6541 + 6546 6103 6102 + 6102 6551 6546 + 6546 6551 6552 + 6552 6547 6546 + 6553 6547 6552 + 6547 6553 6548 + 6549 6548 6553 + 6551 6102 6111 + 6111 6554 6551 + 6552 6551 6554 + 6554 6555 6552 + 6556 6552 6555 + 6552 6556 6553 + 6553 6556 6557 + 6557 6558 6553 + 6553 6558 6549 + 6554 6111 6110 + 6110 6559 6554 + 6554 6559 6560 + 6560 6555 6554 + 6561 6555 6560 + 6555 6561 6556 + 6557 6556 6561 + 6559 6110 6562 + 6562 6563 6559 + 6560 6559 6563 + 6563 6564 6560 + 6565 6560 6564 + 6560 6565 6561 + 6114 6562 6110 + 6123 6562 6114 + 6563 6562 6123 + 6123 6566 6563 + 6563 6566 6567 + 6567 6564 6563 + 6568 6564 6567 + 6564 6568 6565 + 6569 6565 6568 + 6561 6565 6569 + 6569 6570 6561 + 6561 6570 6557 + 6566 6123 6571 + 6571 6572 6566 + 6567 6566 6572 + 6572 6573 6567 + 6574 6567 6573 + 6567 6574 6568 + 6122 6571 6123 + 6575 6571 6122 + 6572 6571 6575 + 6575 6576 6572 + 6572 6576 6577 + 6577 6573 6572 + 6578 6573 6577 + 6573 6578 6574 + 6579 6574 6578 + 6568 6574 6579 + 6122 6128 6575 + 6575 6128 6580 + 6580 6581 6575 + 6576 6575 6581 + 6581 6582 6576 + 6577 6576 6582 + 6582 6583 6577 + 6584 6577 6583 + 6577 6584 6578 + 6127 6580 6128 + 6580 6127 6585 + 6585 6586 6580 + 6580 6586 6587 + 6587 6581 6580 + 6582 6581 6587 + 6587 6588 6582 + 6582 6588 6589 + 6589 6583 6582 + 6585 6127 6126 + 6126 6590 6585 + 6585 6590 6591 + 6591 6592 6585 + 6586 6585 6592 + 6592 6593 6586 + 6587 6586 6593 + 6593 6594 6587 + 6588 6587 6594 + 6132 6590 6126 + 6590 6132 6595 + 6595 6591 6590 + 6591 6595 6596 + 6596 6597 6591 + 6591 6597 6598 + 6598 6592 6591 + 6593 6592 6598 + 6599 6595 6132 + 6596 6595 6599 + 6599 6600 6596 + 6596 6600 6601 + 6601 6602 6596 + 6597 6596 6602 + 6602 6603 6597 + 6598 6597 6603 + 6132 6604 6599 + 6138 6599 6604 + 6599 6138 6605 + 6605 6600 6599 + 6600 6605 6606 + 6606 6601 6600 + 6131 6604 6132 + 6130 6604 6131 + 6604 6130 6138 + 6605 6138 6137 + 6137 6607 6605 + 6605 6607 6608 + 6608 6606 6605 + 6609 6606 6608 + 6601 6606 6609 + 6609 6610 6601 + 6601 6610 6611 + 6611 6602 6601 + 6603 6602 6611 + 6607 6137 6612 + 6607 6612 6613 + 6613 6608 6607 + 6608 6613 6614 + 6614 6615 6608 + 6608 6615 6609 + 6616 6609 6615 + 6610 6609 6616 + 6612 6137 6136 + 6136 6148 6612 + 6612 6148 6617 + 6617 6613 6612 + 6614 6613 6617 + 6617 6618 6614 + 6619 6614 6618 + 6615 6614 6619 + 6619 6620 6615 + 6615 6620 6616 + 6148 6153 6617 + 6621 6617 6153 + 6621 6618 6617 + 6618 6621 6622 + 6622 6623 6618 + 6618 6623 6619 + 6624 6619 6623 + 6619 6624 6625 + 6625 6620 6619 + 6153 6158 6621 + 6621 6158 6626 + 6626 6622 6621 + 6627 6622 6626 + 6622 6627 6628 + 6628 6623 6622 + 6623 6628 6624 + 6624 6628 6629 + 6629 6630 6624 + 6625 6624 6630 + 6157 6626 6158 + 6631 6626 6157 + 6626 6631 6627 + 6627 6631 6632 + 6632 6633 6627 + 6628 6627 6633 + 6633 6629 6628 + 6634 6629 6633 + 6629 6634 6635 + 6635 6630 6629 + 6157 6163 6631 + 6631 6163 6636 + 6636 6632 6631 + 6637 6632 6636 + 6632 6637 6638 + 6638 6633 6632 + 6633 6638 6634 + 6634 6638 6639 + 6639 6640 6634 + 6635 6634 6640 + 6641 6636 6163 + 6642 6636 6641 + 6636 6642 6637 + 6637 6642 6643 + 6643 6644 6637 + 6638 6637 6644 + 6644 6639 6638 + 6163 6162 6641 + 6645 6641 6162 + 6646 6641 6645 + 6641 6646 6642 + 6642 6646 6647 + 6647 6643 6642 + 6648 6643 6647 + 6643 6648 6649 + 6649 6644 6643 + 6162 6167 6645 + 6650 6645 6167 + 6651 6645 6650 + 6645 6651 6646 + 6646 6651 6652 + 6652 6647 6646 + 6653 6647 6652 + 6647 6653 6648 + 6167 6166 6650 + 6654 6650 6166 + 6655 6650 6654 + 6650 6655 6651 + 6651 6655 6656 + 6656 6652 6651 + 6657 6652 6656 + 6652 6657 6653 + 6166 6171 6654 + 6658 6654 6171 + 6659 6654 6658 + 6654 6659 6655 + 6655 6659 6660 + 6660 6656 6655 + 6661 6656 6660 + 6656 6661 6657 + 6171 6175 6658 + 6662 6658 6175 + 6663 6658 6662 + 6658 6663 6659 + 6659 6663 6664 + 6664 6660 6659 + 6665 6660 6664 + 6660 6665 6661 + 6175 6666 6662 + 6667 6662 6666 + 6668 6662 6667 + 6662 6668 6663 + 6663 6668 6669 + 6669 6664 6663 + 6670 6664 6669 + 6664 6670 6665 + 6174 6666 6175 + 6666 6174 6180 + 6180 6671 6666 + 6666 6671 6667 + 6672 6667 6671 + 6673 6667 6672 + 6667 6673 6668 + 6668 6673 6674 + 6674 6669 6668 + 6675 6669 6674 + 6669 6675 6670 + 6671 6180 6185 + 6185 6676 6671 + 6671 6676 6672 + 6677 6672 6676 + 6678 6672 6677 + 6672 6678 6673 + 6673 6678 6679 + 6679 6674 6673 + 6680 6674 6679 + 6674 6680 6675 + 6676 6185 6681 + 6681 6682 6676 + 6676 6682 6677 + 6683 6677 6682 + 6684 6677 6683 + 6677 6684 6678 + 6678 6684 6685 + 6685 6679 6678 + 6681 6185 6184 + 6686 6681 6184 + 6687 6681 6686 + 6682 6681 6687 + 6687 6688 6682 + 6682 6688 6683 + 6689 6683 6688 + 6690 6683 6689 + 6683 6690 6684 + 6184 6200 6686 + 6199 6686 6200 + 6691 6686 6199 + 6686 6691 6687 + 6692 6687 6691 + 6688 6687 6692 + 6692 6693 6688 + 6688 6693 6689 + 6694 6689 6693 + 6695 6689 6694 + 6689 6695 6690 + 6199 6205 6691 + 6691 6205 6696 + 6696 6697 6691 + 6691 6697 6698 + 6698 6692 6691 + 6699 6692 6698 + 6693 6692 6699 + 6693 6699 6694 + 6209 6696 6205 + 6700 6696 6209 + 6696 6700 6701 + 6701 6697 6696 + 6697 6701 6702 + 6702 6698 6697 + 6703 6698 6702 + 6698 6703 6699 + 6694 6699 6703 + 6209 6214 6700 + 6700 6214 6212 + 6704 6700 6212 + 6701 6700 6704 + 6704 6705 6701 + 6701 6705 6706 + 6706 6707 6701 + 6707 6702 6701 + 6213 6212 6214 + 6429 6453 6430 + 6708 6430 6453 + 6709 6430 6708 + 6430 6709 6425 + 6425 6709 6710 + 6710 6420 6425 + 6453 6458 6708 + 6458 6711 6708 + 6711 6712 6708 + 6713 6708 6712 + 6714 6708 6713 + 6708 6714 6709 + 6710 6709 6714 + 6460 6711 6458 + 6715 6711 6460 + 6711 6715 6716 + 6716 6712 6711 + 6717 6712 6716 + 6712 6717 6713 + 6715 6460 6718 + 6718 6719 6715 + 6715 6719 6720 + 6720 6716 6715 + 6717 6716 6720 + 6720 6721 6717 + 6717 6721 6722 + 6713 6717 6722 + 6723 6718 6460 + 6724 6718 6723 + 6719 6718 6724 + 6719 6724 6725 + 6725 6720 6719 + 6721 6720 6725 + 6721 6725 6726 + 6726 6722 6721 + 4102 6723 6460 + 6727 6723 4102 + 6728 6723 6727 + 6723 6728 6724 + 6724 6728 6726 + 6726 6725 6724 + 4102 4101 6727 + 6729 6727 4101 + 6728 6727 6729 + 6729 6730 6728 + 6728 6730 6726 + 6730 6731 6726 + 6732 6726 6731 + 6732 6722 6726 + 4101 6733 6729 + 6375 6393 6371 + 6393 6734 6371 + 6734 6735 6371 + 6735 6736 6371 + 6736 6737 6371 + 6737 6738 6371 + 6738 6739 6371 + 6740 6371 6739 + 6371 6740 6741 + 6741 6362 6371 + 6742 6734 6393 + 6743 6734 6742 + 6734 6743 6744 + 6744 6735 6734 + 6393 6392 6742 + 6405 6742 6392 + 6745 6742 6405 + 6742 6745 6743 + 6743 6745 6746 + 6746 6747 6743 + 6743 6747 6748 + 6748 6744 6743 + 6749 6744 6748 + 6744 6749 6750 + 6405 6751 6745 + 6745 6751 6746 + 6752 6746 6751 + 6746 6752 6753 + 6753 6747 6746 + 6747 6753 6754 + 6754 6748 6747 + 6404 6751 6405 + 6751 6404 6752 + 6752 6404 6410 + 6410 6755 6752 + 6753 6752 6755 + 6755 6756 6753 + 6754 6753 6756 + 6756 6757 6754 + 6758 6754 6757 + 6748 6754 6758 + 6758 6759 6748 + 6748 6759 6749 + 6760 6755 6410 + 6755 6760 6761 + 6761 6756 6755 + 6756 6761 6762 + 6762 6757 6756 + 6757 6762 6763 + 6763 6764 6757 + 6757 6764 6758 + 6410 6409 6760 + 6760 6409 6415 + 6415 6765 6760 + 6761 6760 6765 + 6765 6766 6761 + 6762 6761 6766 + 6766 6767 6762 + 6763 6762 6767 + 6767 6768 6763 + 6769 6763 6768 + 6764 6763 6769 + 6420 6765 6415 + 6765 6420 6710 + 6710 6766 6765 + 6766 6710 6770 + 6770 6767 6766 + 6767 6770 6771 + 6771 6768 6767 + 6768 6771 6772 + 6772 6773 6768 + 6768 6773 6769 + 6714 6770 6710 + 6771 6770 6714 + 6714 6713 6771 + 6772 6771 6713 + 6722 6772 6713 + 6774 6772 6722 + 6773 6772 6774 + 6774 6775 6773 + 6773 6775 6776 + 6776 6769 6773 + 6777 6769 6776 + 6769 6777 6764 + 6764 6777 6778 + 6778 6758 6764 + 6722 6732 6774 + 6774 6732 6779 + 6779 6780 6774 + 6775 6774 6780 + 6780 6781 6775 + 6775 6781 6782 + 6782 6776 6775 + 6783 6776 6782 + 6776 6783 6777 + 6732 6784 6779 + 4976 6779 6784 + 4981 6779 4976 + 6779 4981 6785 + 6785 6780 6779 + 6781 6780 6785 + 6731 6784 6732 + 6784 6731 6786 + 6784 6786 4976 + 4976 6786 6787 + 6787 4971 4976 + 4966 4971 6787 + 6787 6788 4966 + 4966 6788 6789 + 6786 6731 6730 + 6730 6787 6786 + 6788 6787 6730 + 6730 6729 6788 + 6788 6729 6790 + 6790 6789 6788 + 4986 6785 4981 + 6791 6785 4986 + 6785 6791 6781 + 6781 6791 6792 + 6792 6782 6781 + 6793 6782 6792 + 6782 6793 6783 + 6783 6793 6794 + 6794 6795 6783 + 6777 6783 6795 + 4986 4991 6791 + 6791 4991 6796 + 6796 6792 6791 + 6797 6792 6796 + 6792 6797 6793 + 6793 6797 6798 + 6798 6794 6793 + 6799 6794 6798 + 6794 6799 6800 + 6800 6795 6794 + 4996 6796 4991 + 6801 6796 4996 + 6796 6801 6797 + 6797 6801 6802 + 6802 6798 6797 + 6736 6798 6802 + 6798 6736 6799 + 6799 6736 6735 + 6735 6750 6799 + 6750 6800 6799 + 4996 6803 6801 + 6801 6803 6804 + 6804 6802 6801 + 6737 6802 6804 + 6802 6737 6736 + 6803 4996 4995 + 4995 6805 6803 + 6803 6805 6806 + 6804 6803 6806 + 6806 6807 6804 + 6808 6804 6807 + 6804 6808 6737 + 6737 6808 6809 + 6809 6738 6737 + 6805 4995 4994 + 6805 4994 4993 + 4993 6806 6805 + 5003 6806 4993 + 6806 5003 6810 + 6810 6807 6806 + 6811 6807 6810 + 6807 6811 6808 + 6808 6811 6812 + 6812 6809 6808 + 6813 6809 6812 + 6809 6813 6814 + 6814 6738 6809 + 5007 6810 5003 + 6815 6810 5007 + 6810 6815 6811 + 6811 6815 6816 + 6816 6812 6811 + 6817 6812 6816 + 6812 6817 6813 + 6813 6817 6818 + 6819 6813 6818 + 6814 6813 6819 + 5007 5011 6815 + 6815 5011 6820 + 6820 6816 6815 + 6821 6816 6820 + 6816 6821 6817 + 6817 6821 6822 + 6822 6818 6817 + 5016 6820 5011 + 6823 6820 5016 + 6820 6823 6821 + 6822 6821 6823 + 6823 6824 6822 + 6825 6822 6824 + 6825 6818 6822 + 6818 6825 6826 + 6826 6827 6818 + 6818 6827 6819 + 5016 5021 6823 + 6823 5021 5026 + 5026 6824 6823 + 6828 6824 5026 + 6824 6828 6825 + 6825 6828 6829 + 6829 6830 6825 + 6830 6826 6825 + 6831 6826 6830 + 6826 6831 6827 + 6827 6831 6832 + 6832 6819 6827 + 5026 6833 6828 + 6828 6833 6834 + 6834 6829 6828 + 6835 6829 6834 + 6829 6835 6836 + 6836 6830 6829 + 6833 5026 5025 + 5025 5031 6833 + 6834 6833 5031 + 5031 6837 6834 + 6838 6834 6837 + 6834 6838 6835 + 6835 6838 6839 + 6839 6840 6835 + 6835 6840 6841 + 6841 6836 6835 + 5035 6837 5031 + 6842 6837 5035 + 6837 6842 6838 + 6839 6838 6842 + 6842 6843 6839 + 6844 6839 6843 + 6839 6844 6845 + 6845 6840 6839 + 6840 6845 6846 + 6846 6841 6840 + 5035 6847 6842 + 6842 6847 6848 + 6848 6843 6842 + 6849 6843 6848 + 6843 6849 6844 + 6850 6844 6849 + 6845 6844 6850 + 6847 5035 5038 + 5038 5043 6847 + 6848 6847 5043 + 5043 6851 6848 + 6852 6848 6851 + 6848 6852 6849 + 6849 6852 6853 + 6853 6854 6849 + 6849 6854 6850 + 5047 6851 5043 + 6855 6851 5047 + 6851 6855 6852 + 6853 6852 6855 + 6855 6856 6853 + 6857 6853 6856 + 6853 6857 6858 + 6858 6854 6853 + 6854 6858 6859 + 6859 6850 6854 + 5047 5055 6855 + 6855 5055 6860 + 6860 6856 6855 + 6861 6856 6860 + 6856 6861 6857 + 6857 6861 6862 + 6862 6863 6857 + 6858 6857 6863 + 6860 5055 5054 + 5054 3408 6860 + 3407 6860 3408 + 6860 3407 6861 + 6861 3407 3406 + 3406 6862 6861 + 3406 6864 6862 + 3409 3408 5054 + 6750 6735 6865 + 6795 6778 6777 + 6866 6778 6795 + 6778 6866 6759 + 6759 6758 6778 + 6795 6800 6866 + 6866 6800 6750 + 6750 6749 6866 + 6749 6759 6866 + 4869 4868 5353 + 5353 4868 4867 + 4867 6867 5353 + 6867 6868 5353 + 5349 5353 6868 + 6868 5343 5349 + 5343 6868 6869 + 6869 5344 5343 + 6870 6867 4867 + 6871 6867 6870 + 6867 6871 6869 + 6869 6868 6867 + 4867 4873 6870 + 6870 4873 4878 + 4878 6872 6870 + 6871 6870 6872 + 6872 6873 6871 + 6869 6871 6873 + 6873 6874 6869 + 6874 6875 6869 + 6875 6876 6869 + 5344 6869 6876 + 4955 6872 4878 + 6872 4955 6877 + 6877 6873 6872 + 6873 6877 6878 + 6878 6874 6873 + 6879 6874 6878 + 6874 6879 6880 + 6880 6875 6874 + 6877 4955 6881 + 6881 6882 6877 + 6878 6877 6882 + 6882 6883 6878 + 6884 6878 6883 + 6878 6884 6879 + 4341 6881 4955 + 4345 6881 4341 + 4345 6882 6881 + 6882 4345 4350 + 4350 6883 6882 + 6883 4350 6885 + 6885 6886 6883 + 6883 6886 6884 + 6887 6884 6886 + 6879 6884 6887 + 6887 6888 6879 + 6879 6888 6889 + 6889 6880 6879 + 6885 4350 4349 + 4349 6890 6885 + 6891 6885 6890 + 6886 6885 6891 + 6891 6892 6886 + 6886 6892 6887 + 6893 6887 6892 + 6887 6893 6894 + 6894 6888 6887 + 6890 4349 4348 + 4348 6895 6890 + 6890 6895 6896 + 6896 6897 6890 + 6890 6897 6891 + 6898 6891 6897 + 6891 6898 6899 + 6899 6892 6891 + 6892 6899 6893 + 6895 4348 6900 + 6900 6901 6895 + 6896 6895 6901 + 6901 6902 6896 + 6903 6896 6902 + 6896 6903 6904 + 6904 6897 6896 + 6897 6904 6898 + 4353 6900 4348 + 6491 6900 4353 + 6900 6491 6490 + 6490 6901 6900 + 6901 6490 6496 + 6496 6902 6901 + 6905 6902 6496 + 6902 6905 6903 + 6906 6903 6905 + 6904 6903 6906 + 6906 6907 6904 + 6904 6907 6908 + 6908 6898 6904 + 6899 6898 6908 + 6496 6501 6905 + 6905 6501 6500 + 6500 6909 6905 + 6905 6909 6906 + 6910 6906 6909 + 6906 6910 6911 + 6911 6907 6906 + 6907 6911 6912 + 6912 6908 6907 + 6510 6909 6500 + 6909 6510 6910 + 6913 6910 6510 + 6911 6910 6913 + 6913 6914 6911 + 6911 6914 6915 + 6915 6912 6911 + 6916 6912 6915 + 6908 6912 6916 + 6916 6917 6908 + 6908 6917 6899 + 6510 6918 6913 + 6919 6913 6918 + 6913 6919 6920 + 6920 6914 6913 + 6914 6920 6921 + 6921 6915 6914 + 6509 6918 6510 + 6922 6918 6509 + 6918 6922 6919 + 6923 6919 6922 + 6920 6919 6923 + 6923 6924 6920 + 6920 6924 6925 + 6925 6921 6920 + 6926 6921 6925 + 6915 6921 6926 + 6509 6927 6922 + 6922 6927 6928 + 6928 6929 6922 + 6922 6929 6923 + 6930 6923 6929 + 6923 6930 6931 + 6931 6924 6923 + 6927 6509 6508 + 6508 6515 6927 + 6928 6927 6515 + 6515 6932 6928 + 6933 6928 6932 + 6928 6933 6934 + 6934 6929 6928 + 6929 6934 6930 + 6935 6930 6934 + 6931 6930 6935 + 6519 6932 6515 + 6936 6932 6519 + 6932 6936 6933 + 6937 6933 6936 + 6934 6933 6937 + 6937 6938 6934 + 6934 6938 6935 + 6519 6939 6936 + 6936 6939 6940 + 6940 6941 6936 + 6936 6941 6937 + 6942 6937 6941 + 6937 6942 6943 + 6943 6938 6937 + 6939 6519 6522 + 6522 6527 6939 + 6940 6939 6527 + 6527 6944 6940 + 6945 6940 6944 + 6940 6945 6946 + 6946 6941 6940 + 6941 6946 6942 + 6947 6942 6946 + 6943 6942 6947 + 6532 6944 6527 + 6948 6944 6532 + 6944 6948 6945 + 6949 6945 6948 + 6946 6945 6949 + 6949 6950 6946 + 6946 6950 6947 + 6951 6947 6950 + 6952 6947 6951 + 6947 6952 6943 + 6532 6953 6948 + 6948 6953 6954 + 6954 6955 6948 + 6948 6955 6949 + 6956 6949 6955 + 6950 6949 6956 + 6956 6957 6950 + 6950 6957 6951 + 6953 6532 6537 + 6537 6958 6953 + 6954 6953 6958 + 6958 6959 6954 + 6960 6954 6959 + 6955 6954 6960 + 6960 6961 6955 + 6955 6961 6956 + 6962 6956 6961 + 6957 6956 6962 + 6958 6537 6536 + 6536 6963 6958 + 6958 6963 6964 + 6964 6959 6958 + 6959 6964 6965 + 6965 6966 6959 + 6959 6966 6960 + 6967 6960 6966 + 6961 6960 6967 + 6963 6536 6542 + 6542 6968 6963 + 6964 6963 6968 + 6968 6969 6964 + 6965 6964 6969 + 6969 6970 6965 + 6971 6965 6970 + 6966 6965 6971 + 6971 6972 6966 + 6966 6972 6967 + 6968 6542 6541 + 6541 6973 6968 + 6968 6973 6974 + 6974 6969 6968 + 6969 6974 6975 + 6975 6970 6969 + 6970 6975 6976 + 6976 6977 6970 + 6970 6977 6971 + 6973 6541 6550 + 6550 6978 6973 + 6974 6973 6978 + 6978 6979 6974 + 6975 6974 6979 + 6979 6980 6975 + 6976 6975 6980 + 6978 6550 6549 + 6549 6981 6978 + 6978 6981 6982 + 6982 6979 6978 + 6982 6980 6979 + 6980 6982 6983 + 6983 6984 6980 + 6980 6984 6976 + 6981 6549 6558 + 6558 6985 6981 + 6982 6981 6985 + 6985 6983 6982 + 6986 6983 6985 + 6983 6986 6987 + 6987 6984 6983 + 6984 6987 6988 + 6988 6989 6984 + 6984 6989 6976 + 6985 6558 6557 + 6557 6990 6985 + 6985 6990 6986 + 6986 6990 6991 + 6991 6992 6986 + 6987 6986 6992 + 6992 6993 6987 + 6988 6987 6993 + 6990 6557 6570 + 6570 6991 6990 + 6991 6570 6569 + 6569 6994 6991 + 6991 6994 6995 + 6995 6992 6991 + 6995 6993 6992 + 6993 6995 6996 + 6996 6997 6993 + 6993 6997 6988 + 6994 6569 6998 + 6998 6999 6994 + 6995 6994 6999 + 6999 6996 6995 + 7000 6996 6999 + 6996 7000 7001 + 7001 6997 6996 + 6568 6998 6569 + 6579 6998 6568 + 6999 6998 6579 + 6579 7002 6999 + 6999 7002 7000 + 7000 7002 7003 + 7003 7004 7000 + 7001 7000 7004 + 7004 7005 7001 + 7006 7001 7005 + 6997 7001 7006 + 7002 6579 7007 + 7007 7003 7002 + 7003 7007 7008 + 7008 7009 7003 + 7003 7009 7010 + 7010 7004 7003 + 7010 7005 7004 + 6578 7007 6579 + 7008 7007 6578 + 6578 6584 7008 + 7008 6584 7011 + 7011 7012 7008 + 7009 7008 7012 + 7012 7013 7009 + 7010 7009 7013 + 7013 7014 7010 + 7005 7010 7014 + 7014 7015 7005 + 7005 7015 7006 + 6583 7011 6584 + 7011 6583 6589 + 6589 7016 7011 + 7011 7016 7017 + 7017 7012 7011 + 7013 7012 7017 + 7017 7018 7013 + 7013 7018 7019 + 7019 7014 7013 + 7014 7019 7020 + 7020 7015 7014 + 7016 6589 7021 + 7021 7022 7016 + 7017 7016 7022 + 7022 7023 7017 + 7018 7017 7023 + 7023 7024 7018 + 7019 7018 7024 + 7024 7025 7019 + 7020 7019 7025 + 7026 7021 6589 + 7027 7021 7026 + 7022 7021 7027 + 7027 7028 7022 + 7022 7028 7029 + 7029 7023 7022 + 7024 7023 7029 + 6589 6588 7026 + 6594 7026 6588 + 7026 6594 7030 + 7030 7031 7026 + 7026 7031 7027 + 7027 7031 7032 + 7032 7033 7027 + 7028 7027 7033 + 7033 7034 7028 + 7029 7028 7034 + 7030 6594 6593 + 6593 7035 7030 + 7030 7035 7036 + 7036 7037 7030 + 7031 7030 7037 + 7037 7032 7031 + 6598 7035 6593 + 7035 6598 7038 + 7038 7036 7035 + 7036 7038 7039 + 7039 7040 7036 + 7036 7040 7041 + 7041 7037 7036 + 7032 7037 7041 + 6603 7038 6598 + 7039 7038 6603 + 6603 7042 7039 + 7039 7042 7043 + 7043 7044 7039 + 7040 7039 7044 + 7044 7045 7040 + 7041 7040 7045 + 6611 7042 6603 + 7042 6611 7046 + 7046 7043 7042 + 7043 7046 7047 + 7047 7048 7043 + 7043 7048 7049 + 7049 7044 7043 + 7045 7044 7049 + 7050 7046 6611 + 7047 7046 7050 + 7050 7051 7047 + 7047 7051 7052 + 7052 7053 7047 + 7048 7047 7053 + 7053 7054 7048 + 7049 7048 7054 + 6611 6610 7050 + 6616 7050 6610 + 7051 7050 6616 + 6616 7055 7051 + 7051 7055 7056 + 7056 7052 7051 + 7057 7052 7056 + 7052 7057 7058 + 7058 7053 7052 + 7054 7053 7058 + 7055 6616 6620 + 6620 6625 7055 + 7055 6625 7059 + 7059 7056 7055 + 7060 7056 7059 + 7056 7060 7057 + 7057 7060 7061 + 7061 7062 7057 + 7058 7057 7062 + 6630 7059 6625 + 7063 7059 6630 + 7059 7063 7060 + 7060 7063 7064 + 7064 7061 7060 + 7065 7061 7064 + 7061 7065 7066 + 7066 7062 7061 + 6630 6635 7063 + 7063 6635 7067 + 7067 7064 7063 + 7068 7064 7067 + 7064 7068 7065 + 7065 7068 7069 + 7069 7070 7065 + 7066 7065 7070 + 6640 7067 6635 + 7071 7067 6640 + 7067 7071 7068 + 7068 7071 7072 + 7072 7069 7068 + 7073 7069 7072 + 7069 7073 7074 + 7074 7070 7069 + 6640 7075 7071 + 7071 7075 7076 + 7076 7072 7071 + 7077 7072 7076 + 7072 7077 7073 + 7073 7077 7078 + 7078 7079 7073 + 7074 7073 7079 + 7075 6640 6639 + 6639 7080 7075 + 7075 7080 7081 + 7081 7076 7075 + 7082 7076 7081 + 7076 7082 7077 + 7077 7082 7083 + 7083 7078 7077 + 7080 6639 6644 + 6644 6649 7080 + 7080 6649 7084 + 7084 7081 7080 + 7085 7081 7084 + 7081 7085 7082 + 7082 7085 7086 + 7086 7083 7082 + 7087 7083 7086 + 7083 7087 7088 + 7088 7078 7083 + 7089 7084 6649 + 7090 7084 7089 + 7084 7090 7085 + 7085 7090 7091 + 7091 7086 7085 + 7092 7086 7091 + 7086 7092 7087 + 6649 6648 7089 + 7093 7089 6648 + 7094 7089 7093 + 7089 7094 7090 + 7090 7094 7095 + 7095 7091 7090 + 7096 7091 7095 + 7091 7096 7092 + 6648 6653 7093 + 7097 7093 6653 + 7098 7093 7097 + 7093 7098 7094 + 7094 7098 7099 + 7099 7095 7094 + 7100 7095 7099 + 7095 7100 7096 + 6653 6657 7097 + 7101 7097 6657 + 7102 7097 7101 + 7097 7102 7098 + 7098 7102 7103 + 7103 7099 7098 + 7104 7099 7103 + 7099 7104 7100 + 6657 6661 7101 + 7105 7101 6661 + 7106 7101 7105 + 7101 7106 7102 + 7102 7106 7107 + 7107 7103 7102 + 7108 7103 7107 + 7103 7108 7104 + 6661 6665 7105 + 7109 7105 6665 + 7110 7105 7109 + 7105 7110 7106 + 7106 7110 7111 + 7111 7107 7106 + 7112 7107 7111 + 7107 7112 7108 + 6665 6670 7109 + 7113 7109 6670 + 7114 7109 7113 + 7109 7114 7110 + 7110 7114 7115 + 7115 7111 7110 + 7116 7111 7115 + 7111 7116 7112 + 6670 6675 7113 + 7117 7113 6675 + 7118 7113 7117 + 7113 7118 7114 + 7114 7118 7119 + 7119 7115 7114 + 7120 7115 7119 + 7115 7120 7116 + 6675 6680 7117 + 7121 7117 6680 + 7122 7117 7121 + 7117 7122 7118 + 7118 7122 7123 + 7123 7119 7118 + 7124 7119 7123 + 7119 7124 7120 + 6680 7125 7121 + 7126 7121 7125 + 7127 7121 7126 + 7121 7127 7122 + 7122 7127 7128 + 7128 7123 7122 + 7129 7123 7128 + 7123 7129 7124 + 6679 7125 6680 + 7125 6679 6685 + 6685 7130 7125 + 7125 7130 7126 + 7131 7126 7130 + 7132 7126 7131 + 7126 7132 7127 + 7127 7132 7133 + 7133 7128 7127 + 7134 7128 7133 + 7128 7134 7129 + 7130 6685 7135 + 7135 7136 7130 + 7130 7136 7131 + 7137 7131 7136 + 7138 7131 7137 + 7131 7138 7132 + 7132 7138 7139 + 7139 7133 7132 + 7135 6685 6684 + 6684 6690 7135 + 7140 7135 6690 + 7136 7135 7140 + 7140 7141 7136 + 7136 7141 7137 + 7142 7137 7141 + 6287 7137 7142 + 7137 6287 7138 + 7138 6287 6286 + 6286 7139 7138 + 6690 6695 7140 + 7143 7140 6695 + 7141 7140 7143 + 7143 7144 7141 + 7141 7144 7142 + 7145 7142 7144 + 6282 7142 7145 + 7142 6282 6287 + 6695 7146 7143 + 7147 7143 7146 + 7144 7143 7147 + 7147 7148 7144 + 7144 7148 7145 + 6268 7145 7148 + 6272 7145 6268 + 7145 6272 6282 + 6694 7146 6695 + 7146 6694 7149 + 7149 7150 7146 + 7146 7150 7147 + 7151 7147 7150 + 7148 7147 7151 + 7151 6264 7148 + 7148 6264 6268 + 6703 7149 6694 + 7152 7149 6703 + 7150 7149 7152 + 7152 7153 7150 + 7150 7153 7151 + 6260 7151 7153 + 6264 7151 6260 + 6703 7154 7152 + 7152 7154 7155 + 7155 7156 7152 + 7153 7152 7156 + 7156 6255 7153 + 7153 6255 6260 + 6702 7154 6703 + 7154 6702 6707 + 6707 7155 7154 + 7155 6707 7157 + 7155 7157 6250 + 6250 7156 7155 + 6255 7156 6250 + 7157 6707 6706 + 6706 6245 7157 + 6250 7157 6245 + 6245 6706 6240 + 6240 6706 6705 + 6705 7158 6240 + 6240 7158 6228 + 7159 6228 7158 + 6228 7159 6219 + 6219 7159 6212 + 6212 7159 6704 + 7158 6705 6704 + 7158 6704 7159 + 6292 7139 6286 + 7139 6292 7160 + 7160 7133 7139 + 7133 7160 7134 + 7134 7160 7161 + 7161 7162 7134 + 7129 7134 7162 + 7160 6292 6291 + 6291 7161 7160 + 7161 6291 6290 + 6290 7163 7161 + 7161 7163 7164 + 7164 7162 7161 + 7165 7162 7164 + 7162 7165 7129 + 7124 7129 7165 + 7165 7166 7124 + 7120 7124 7166 + 7163 6290 6296 + 6296 7167 7163 + 7163 7167 7168 + 7168 7164 7163 + 7169 7164 7168 + 7164 7169 7165 + 7165 7169 7170 + 7170 7166 7165 + 7171 7166 7170 + 7166 7171 7120 + 7116 7120 7171 + 7167 6296 7172 + 7172 7173 7167 + 7167 7173 7174 + 7174 7168 7167 + 7175 7168 7174 + 7168 7175 7169 + 7169 7175 7176 + 7176 7170 7169 + 7172 6296 6295 + 6295 7177 7172 + 7172 7177 7178 + 7178 7179 7172 + 7173 7172 7179 + 7179 7180 7173 + 7174 7173 7180 + 6301 7177 6295 + 7177 6301 7181 + 7181 7178 7177 + 7182 7178 7181 + 7178 7182 7183 + 7183 7179 7178 + 7179 7183 7184 + 7184 7180 7179 + 6305 7181 6301 + 6310 7181 6305 + 7181 6310 7182 + 7182 6310 7185 + 7185 7186 7182 + 7183 7182 7186 + 7186 7187 7183 + 7184 7183 7187 + 7187 7188 7184 + 7189 7184 7188 + 7180 7184 7189 + 6309 7185 6310 + 7190 7185 6309 + 7185 7190 7191 + 7191 7186 7185 + 7186 7191 7192 + 7192 7187 7186 + 7187 7192 7193 + 7193 7188 7187 + 6309 6314 7190 + 7190 6314 7194 + 7194 7195 7190 + 7191 7190 7195 + 7195 7196 7191 + 7192 7191 7196 + 7196 7197 7192 + 7193 7192 7197 + 6318 7194 6314 + 7198 7194 6318 + 7194 7198 7199 + 7199 7195 7194 + 7195 7199 7200 + 7200 7196 7195 + 7196 7200 7201 + 7201 7197 7196 + 6318 6323 7198 + 7198 6323 7202 + 7202 7203 7198 + 7199 7198 7203 + 7203 7204 7199 + 7200 7199 7204 + 7204 7205 7200 + 7201 7200 7205 + 7206 7202 6323 + 7207 7202 7206 + 7202 7207 7208 + 7208 7203 7202 + 7203 7208 7209 + 7209 7204 7203 + 7204 7209 7210 + 7210 7205 7204 + 6323 6322 7206 + 6328 7206 6322 + 7211 7206 6328 + 7206 7211 7207 + 7212 7207 7211 + 7208 7207 7212 + 7212 7213 7208 + 7208 7213 7214 + 7214 7209 7208 + 7210 7209 7214 + 6328 6333 7211 + 7211 6333 7215 + 7215 7216 7211 + 7211 7216 7212 + 7217 7212 7216 + 7213 7212 7217 + 7217 7218 7213 + 7213 7218 7219 + 7219 7214 7213 + 7215 6333 6337 + 6337 7220 7215 + 7221 7215 7220 + 7216 7215 7221 + 7221 7222 7216 + 7216 7222 7217 + 7223 7217 7222 + 7218 7217 7223 + 7223 7224 7218 + 7219 7218 7224 + 7225 7220 6337 + 7220 7225 7226 + 7220 7226 7221 + 7221 7226 7227 + 7227 7228 7221 + 7222 7221 7228 + 7228 7229 7222 + 7222 7229 7223 + 6337 6346 7225 + 7230 7225 6346 + 7226 7225 7230 + 7230 7227 7226 + 7227 7230 7231 + 7227 7231 7232 + 7232 7228 7227 + 7229 7228 7232 + 7232 7233 7229 + 7229 7233 7234 + 7234 7223 7229 + 7224 7223 7234 + 7235 7230 6346 + 7231 7230 7235 + 7235 7236 7231 + 7232 7231 7236 + 7237 7232 7236 + 7233 7232 7237 + 7237 7238 7233 + 7234 7233 7238 + 6345 7235 6346 + 7235 6345 7239 + 7239 7236 7235 + 7236 7239 7240 + 7240 7241 7236 + 7236 7241 7237 + 7242 7237 7241 + 7237 7242 7243 + 7243 7238 7237 + 7239 6345 7244 + 7244 7245 7239 + 7239 7245 7246 + 7246 7240 7239 + 7247 7240 7246 + 7240 7247 7248 + 7248 7241 7240 + 7241 7248 7242 + 7249 7244 6345 + 7250 7244 7249 + 7245 7244 7250 + 7250 7251 7245 + 7245 7251 7252 + 7252 7246 7245 + 7253 7246 7252 + 7246 7253 7247 + 6350 7249 6345 + 6359 7249 6350 + 7249 6359 7254 + 7249 7254 7250 + 7250 7254 7255 + 7255 7256 7250 + 7251 7250 7256 + 7256 7257 7251 + 7252 7251 7257 + 7254 6359 6358 + 6358 7255 7254 + 7255 6358 6357 + 6357 7258 7255 + 7255 7258 7259 + 7259 7256 7255 + 7257 7256 7259 + 7259 7260 7257 + 7257 7260 7261 + 7261 7262 7257 + 7257 7262 7252 + 7258 6357 7263 + 7263 7264 7258 + 7259 7258 7264 + 7264 7265 7259 + 7260 7259 7265 + 7265 7266 7260 + 7261 7260 7266 + 6362 7263 6357 + 7267 7263 6362 + 7264 7263 7267 + 7267 7268 7264 + 7264 7268 7269 + 7269 7265 7264 + 7266 7265 7269 + 6362 6741 7267 + 7267 6741 7270 + 7270 7271 7267 + 7268 7267 7271 + 7271 7272 7268 + 7269 7268 7272 + 7272 7273 7269 + 7274 7269 7273 + 7269 7274 7266 + 7275 7270 6741 + 7270 7275 7276 + 7276 7277 7270 + 7270 7277 7278 + 7278 7271 7270 + 7272 7271 7278 + 6741 6740 7275 + 7275 6740 7279 + 6740 7280 7279 + 6739 7280 6740 + 7281 7280 6739 + 7280 7281 7282 + 7282 7283 7280 + 7280 7283 7284 + 6739 7285 7281 + 7281 7285 7286 + 7286 7287 7281 + 7281 7287 7288 + 7288 7282 7281 + 7289 7282 7288 + 7283 7282 7289 + 7285 6739 6738 + 6738 6814 7285 + 7286 7285 6814 + 6814 7290 7286 + 7291 7286 7290 + 7286 7291 7292 + 7292 7287 7286 + 7287 7292 7293 + 7293 7288 7287 + 6819 7290 6814 + 7294 7290 6819 + 7290 7294 7291 + 7295 7291 7294 + 7292 7291 7295 + 7295 7296 7292 + 7292 7296 7297 + 7297 7293 7292 + 7298 7293 7297 + 7288 7293 7298 + 6819 6832 7294 + 7294 6832 7299 + 7299 7300 7294 + 7294 7300 7295 + 7301 7295 7300 + 7295 7301 7302 + 7302 7296 7295 + 7296 7302 7303 + 7303 7297 7296 + 7299 6832 6831 + 6831 7304 7299 + 7305 7299 7304 + 7299 7305 7306 + 7306 7300 7299 + 7300 7306 7301 + 7307 7301 7306 + 7302 7301 7307 + 7307 7308 7302 + 7303 7302 7308 + 6830 7304 6831 + 7309 7304 6830 + 7304 7309 7305 + 7310 7305 7309 + 7306 7305 7310 + 7310 7311 7306 + 7306 7311 7307 + 7312 7307 7311 + 7312 7308 7307 + 6830 6836 7309 + 7309 6836 6841 + 6841 7313 7309 + 7309 7313 7310 + 7314 7310 7313 + 7310 7314 7315 + 7315 7311 7310 + 7311 7315 7312 + 7316 7313 6841 + 7313 7316 7314 + 7317 7314 7316 + 7315 7314 7317 + 7317 7318 7315 + 7312 7315 7318 + 6841 6846 7316 + 7316 6846 7319 + 7319 7320 7316 + 7316 7320 7317 + 7321 7317 7320 + 7321 7318 7317 + 7318 7321 7322 + 7322 7323 7318 + 7318 7323 7312 + 7319 6846 6845 + 6845 7324 7319 + 7325 7319 7324 + 7319 7325 7326 + 7326 7320 7319 + 7320 7326 7321 + 7321 7326 7327 + 7327 7328 7321 + 7328 7322 7321 + 6850 7324 6845 + 7329 7324 6850 + 7324 7329 7325 + 7330 7325 7329 + 7326 7325 7330 + 7330 7327 7326 + 7331 7327 7330 + 7327 7331 247 + 247 7328 7327 + 7328 247 7332 + 6850 6859 7329 + 7329 6859 7333 + 7333 7334 7329 + 7329 7334 7330 + 7335 7330 7334 + 7330 7335 7331 + 7333 6859 6858 + 6858 7336 7333 + 7337 7333 7336 + 7333 7337 7338 + 7338 7334 7333 + 7334 7338 7335 + 7335 7338 7339 + 7339 7340 7335 + 7331 7335 7340 + 6863 7336 6858 + 7341 7336 6863 + 7336 7341 7337 + 7342 7337 7341 + 7338 7337 7342 + 7342 7339 7338 + 7342 7343 7339 + 7339 7343 7344 + 7344 7340 7339 + 6863 7345 7341 + 7341 7345 3394 + 3394 7346 7341 + 7341 7346 7342 + 7346 7347 7342 + 7343 7342 7347 + 7345 6863 6862 + 6862 3410 7345 + 3394 7345 3410 + 7348 247 7331 + 7331 7349 7348 + 7349 7350 7348 + 7351 7350 7349 + 7340 7349 7331 + 7352 7349 7340 + 7349 7352 7351 + 7353 7351 7352 + 7354 7351 7353 + 7351 7354 7355 + 7355 7354 7356 + 7356 248 7355 + 7340 7344 7352 + 7352 7344 7357 + 7357 7358 7352 + 7352 7358 7359 + 7359 7353 7352 + 7360 7353 7359 + 7360 7361 7353 + 7353 7361 7354 + 7356 7354 7361 + 7357 7344 7343 + 7362 7357 7343 + 7363 7357 7362 + 7358 7357 7363 + 7363 7364 7358 + 7358 7364 7365 + 7365 7359 7358 + 7366 7359 7365 + 7359 7366 7360 + 7343 7367 7362 + 7368 7362 7367 + 7362 7368 7369 + 7369 7370 7362 + 7362 7370 7363 + 7347 7367 7343 + 7371 7367 7347 + 7367 7371 7368 + 7368 7371 7372 + 7372 7373 7368 + 7373 7374 7368 + 7369 7368 7374 + 7371 7347 7346 + 7346 7372 7371 + 7372 7346 3394 + 3394 3393 7372 + 7372 3393 3392 + 3392 7373 7372 + 7373 3392 3399 + 3399 7375 7373 + 7373 7375 7376 + 7376 7374 7373 + 7377 7374 7376 + 7374 7377 7369 + 7369 7377 7378 + 7378 7379 7369 + 7370 7369 7379 + 7375 3399 7380 + 7380 7381 7375 + 7376 7375 7381 + 7381 7382 7376 + 7377 7376 7382 + 7382 7378 7377 + 7383 7378 7382 + 7378 7383 7384 + 7384 7379 7378 + 7380 3399 7385 + 7385 7386 7380 + 7387 7380 7386 + 7380 7387 7388 + 7388 7381 7380 + 7381 7388 7389 + 7389 7382 7381 + 7382 7389 7383 + 3399 3398 7385 + 3397 7385 3398 + 7390 7385 3397 + 7385 7390 7391 + 7391 7386 7385 + 7391 7392 7386 + 7386 7392 7387 + 7393 7387 7392 + 7388 7387 7393 + 7390 3397 7394 + 7394 7395 7390 + 7390 7395 7396 + 7396 7397 7390 + 7397 7391 7390 + 7392 7391 7397 + 7397 7398 7392 + 7392 7398 7393 + 3396 7394 3397 + 7399 7394 3396 + 7395 7394 7399 + 7399 7400 7395 + 7395 7400 7401 + 7401 7396 7395 + 7402 7396 7401 + 7396 7402 7403 + 7403 7397 7396 + 3396 7404 7399 + 7399 7404 7405 + 7405 7406 7399 + 7400 7399 7406 + 7406 7407 7400 + 7401 7400 7407 + 7408 7404 3396 + 7404 7408 7409 + 7409 7405 7404 + 7410 7405 7409 + 7405 7410 7411 + 7411 7406 7405 + 7407 7406 7411 + 7411 7412 7407 + 7407 7412 7413 + 7413 7414 7407 + 7407 7414 7401 + 7410 7409 7415 + 7415 7416 7410 + 7411 7410 7416 + 7416 7417 7411 + 7412 7411 7417 + 7417 7418 7412 + 7413 7412 7418 + 7418 7419 7413 + 7420 7413 7419 + 7413 7420 7421 + 7421 7414 7413 + 7422 7417 7416 + 7418 7417 7422 + 7422 7423 7418 + 7418 7423 7424 + 7424 7419 7418 + 7425 7419 7424 + 7419 7425 7420 + 7426 7420 7425 + 7421 7420 7426 + 7416 7427 7422 + 7428 7422 7427 + 7423 7422 7428 + 7428 7429 7423 + 7424 7423 7429 + 7429 7430 7424 + 7431 7424 7430 + 7424 7431 7425 + 7427 7416 7432 + 7427 7433 7428 + 7434 7428 7433 + 7428 7434 7435 + 7435 7429 7428 + 7429 7435 7436 + 7436 7430 7429 + 7437 7430 7436 + 7430 7437 7431 + 7438 7431 7437 + 7425 7431 7438 + 7433 7439 7434 + 7440 7434 7439 + 7435 7434 7440 + 7440 7441 7435 + 7435 7441 7442 + 7442 7436 7435 + 7443 7436 7442 + 7436 7443 7437 + 7444 7440 7439 + 7445 7440 7444 + 7440 7445 7441 + 7441 7445 7446 + 7446 7442 7441 + 7447 7442 7446 + 7442 7447 7443 + 7448 7443 7447 + 7437 7443 7448 + 7448 7449 7437 + 7437 7449 7438 + 7444 7450 7445 + 7445 7450 1026 + 7446 7445 1026 + 1034 7446 1026 + 1039 7446 1034 + 7446 1039 7447 + 7451 7450 7444 + 7447 1039 1038 + 1038 7452 7447 + 7447 7452 7448 + 7453 7448 7452 + 7448 7453 7454 + 7454 7449 7448 + 7449 7454 7455 + 7455 7438 7449 + 1044 7452 1038 + 7452 1044 7453 + 7456 7453 1044 + 7454 7453 7456 + 7456 7457 7454 + 7454 7457 7458 + 7458 7455 7454 + 7459 7455 7458 + 7438 7455 7459 + 1044 1043 7456 + 1049 7456 1043 + 7456 1049 7460 + 7460 7457 7456 + 7457 7460 7461 + 7461 7458 7457 + 7458 7461 7462 + 7462 7463 7458 + 7458 7463 7459 + 7460 1049 1048 + 1048 7464 7460 + 7460 7464 7465 + 7465 7461 7460 + 7462 7461 7465 + 7465 7466 7462 + 7462 7466 7467 + 7467 7468 7462 + 7463 7462 7468 + 1056 7464 1048 + 7464 1056 7469 + 7469 7465 7464 + 7465 7469 7470 + 7470 7466 7465 + 7466 7470 7471 + 7471 7467 7466 + 7472 7469 1056 + 7470 7469 7472 + 7472 7473 7470 + 7471 7470 7473 + 7473 7474 7471 + 7475 7471 7474 + 7467 7471 7475 + 1056 1060 7472 + 1069 7472 1060 + 7473 7472 1069 + 1069 7476 7473 + 7473 7476 7477 + 7477 7474 7473 + 7478 7474 7477 + 7474 7478 7475 + 7479 7475 7478 + 7480 7475 7479 + 7475 7480 7467 + 7476 1069 7481 + 7481 7482 7476 + 7476 7482 7483 + 7483 7477 7476 + 7484 7477 7483 + 7477 7484 7478 + 1068 7481 1069 + 1074 7481 1068 + 7481 1074 1079 + 1079 7482 7481 + 7482 1079 7485 + 7485 7483 7482 + 7483 7485 7486 + 7486 7487 7483 + 7483 7487 7484 + 7488 7485 1079 + 7486 7485 7488 + 7488 7489 7486 + 7490 7486 7489 + 7487 7486 7490 + 7490 7491 7487 + 7484 7487 7491 + 7492 7488 1079 + 7493 7488 7492 + 7489 7488 7493 + 7493 7494 7489 + 7489 7494 7495 + 7495 7496 7489 + 7489 7496 7490 + 1079 1078 7492 + 7497 7492 1078 + 7492 7497 7498 + 7498 7499 7492 + 7492 7499 7493 + 7493 7499 7500 + 7500 7501 7493 + 7494 7493 7501 + 1078 1077 7497 + 7497 1077 1084 + 1084 7502 7497 + 7498 7497 7502 + 7502 7503 7498 + 7498 7503 7504 + 7504 7505 7498 + 7499 7498 7505 + 7505 7500 7499 + 7506 7502 1084 + 7502 7506 7507 + 7507 7503 7502 + 7503 7507 7508 + 7508 7504 7503 + 7508 7509 7504 + 7504 7509 7510 + 7510 7505 7504 + 7500 7505 7510 + 1084 1083 7506 + 7511 7506 1083 + 7507 7506 7511 + 7511 7512 7507 + 7507 7512 7513 + 7513 7508 7507 + 7509 7508 7513 + 7513 7514 7509 + 7510 7509 7514 + 1083 1088 7511 + 1088 7515 7511 + 7516 7511 7515 + 7512 7511 7516 + 7516 7517 7512 + 7512 7517 7518 + 7518 7513 7512 + 7513 7518 7519 + 7519 7514 7513 + 1093 7515 1088 + 7520 7515 1093 + 7515 7520 7516 + 7516 7520 7521 + 7521 7522 7516 + 7517 7516 7522 + 7522 7523 7517 + 7518 7517 7523 + 7523 7524 7518 + 7519 7518 7524 + 1093 7525 7520 + 7520 7525 7526 + 7526 7521 7520 + 7521 7526 7527 + 7527 7528 7521 + 7521 7528 7529 + 7529 7522 7521 + 7525 1093 1092 + 1092 7530 7525 + 7525 7530 7531 + 7531 7526 7525 + 7527 7526 7531 + 7531 7532 7527 + 7533 7527 7532 + 7528 7527 7533 + 7533 7534 7528 + 7529 7528 7534 + 3288 7530 1092 + 7530 3288 7535 + 7535 7531 7530 + 7532 7531 7535 + 7535 7536 7532 + 7532 7536 7537 + 7537 7538 7532 + 7532 7538 7533 + 7539 7533 7538 + 7534 7533 7539 + 7540 7535 3288 + 7536 7535 7540 + 7540 7541 7536 + 7536 7541 7542 + 7542 7537 7536 + 7543 7537 7542 + 7537 7543 7544 + 7544 7538 7537 + 7538 7544 7539 + 3291 7540 3288 + 3296 7540 3291 + 7541 7540 3296 + 7541 3296 3295 + 3295 7542 7541 + 7545 7542 3295 + 7542 7545 7543 + 7546 7543 7545 + 7544 7543 7546 + 7546 7547 7544 + 7544 7547 7548 + 7548 7539 7544 + 7549 7539 7548 + 7539 7549 7534 + 3295 7550 7545 + 7545 7550 7551 + 7551 7552 7545 + 7545 7552 7546 + 7550 3295 3294 + 3294 3293 7550 + 7551 7550 3293 + 7553 7551 3293 + 7554 7551 7553 + 7552 7551 7554 + 7552 7554 7555 + 7555 7556 7552 + 7552 7556 7546 + 7557 7553 3293 + 7558 7553 7557 + 7558 7559 7553 + 7553 7559 7554 + 7554 7559 7560 + 7555 7554 7560 + 3302 7557 3293 + 7561 7557 3302 + 7562 7557 7561 + 7557 7562 7558 + 3302 7563 7561 + 7561 7563 7564 + 7564 7565 7561 + 7562 7561 7565 + 7565 7566 7562 + 7558 7562 7566 + 7563 3302 3301 + 7563 3301 3300 + 3300 3499 7563 + 7563 3499 7564 + 1027 1026 7450 + 7450 7567 1027 + 1658 1657 5120 + 5120 1657 1656 + 1656 7568 5120 + 5120 7568 5121 + 7569 5121 7568 + 5121 7569 7570 + 7570 7571 5121 + 5121 7571 5113 + 1665 7568 1656 + 7568 1665 7569 + 7569 1665 1669 + 7572 7569 1669 + 7570 7569 7572 + 7572 7573 7570 + 7574 7570 7573 + 7571 7570 7574 + 7574 5110 7571 + 5113 7571 5110 + 1669 7575 7572 + 7576 7572 7575 + 7573 7572 7576 + 7576 353 7573 + 7573 353 352 + 352 7577 7573 + 7573 7577 7574 + 7578 7575 1669 + 7579 7575 7578 + 7575 7579 7576 + 348 7576 7579 + 353 7576 348 + 1669 1668 7578 + 7580 7578 1668 + 7579 7578 7580 + 7580 7581 7579 + 7579 7581 348 + 349 348 7581 + 7581 7582 349 + 345 349 7582 + 1668 1673 7580 + 1678 7580 1673 + 7580 1678 7582 + 7582 7581 7580 + 7582 1678 1677 + 1677 7583 7582 + 7582 7583 345 + 323 345 7583 + 7583 317 323 + 317 7583 1677 + 1677 1682 317 + 317 1682 312 + 7584 312 1682 + 313 312 7584 + 7584 7585 313 + 308 313 7585 + 7586 308 7585 + 7585 559 7586 + 1682 1681 7584 + 7587 7584 1681 + 7585 7584 7587 + 7585 7587 560 + 560 559 7585 + 1681 7588 7587 + 7587 7588 1679 + 1679 561 7587 + 561 560 7587 + 562 561 1679 + 1679 7589 562 + 357 7577 352 + 7577 357 7590 + 7590 7574 7577 + 5110 7574 7590 + 7590 5104 5110 + 5104 7590 5105 + 5105 7590 362 + 7590 357 362 + 5061 7591 5062 + 5075 5062 7591 + 5075 5059 5062 + 5059 5075 7592 + 7592 7593 5059 + 5059 7593 3409 + 3404 3409 7593 + 7591 7594 5075 + 7593 3384 3404 + 7592 3384 7593 + 3384 7592 7595 + 7595 7596 3384 + 7597 7596 7595 + 5073 7595 7592 + 7598 7595 5073 + 5073 7599 7598 + 7600 7598 7599 + 7592 5075 5073 + 5072 7599 5073 + 7599 5072 7601 + 7601 3367 7599 + 7602 3367 7601 + 3367 7602 3361 + 3361 7602 5083 + 5083 3362 3361 + 5079 7601 5072 + 7602 7601 5079 + 5079 5083 7602 + 5087 3362 5083 + 3355 3362 5087 + 5087 7603 3355 + 3355 7603 7604 + 7604 3356 3355 + 7605 3356 7604 + 3356 7605 3349 + 3349 7605 3350 + 7603 5087 5092 + 5092 7606 7603 + 7604 7603 7606 + 7606 7607 7604 + 7608 7604 7607 + 7604 7608 7605 + 7605 7608 7609 + 7609 3350 7605 + 7610 3350 7609 + 3350 7610 1021 + 7606 5092 5091 + 5091 7611 7606 + 7606 7611 7612 + 7612 7607 7606 + 7607 7612 522 + 522 7613 7607 + 7607 7613 7608 + 7608 7613 7614 + 7614 7609 7608 + 7611 5091 7615 + 7615 166 7611 + 7611 166 523 + 523 7612 7611 + 522 7612 523 + 368 523 166 + 166 369 368 + 7616 369 166 + 1021 7610 7617 + 7613 522 521 + 521 7614 7613 + 527 7614 521 + 7614 527 7618 + 7618 7609 7614 + 7609 7618 7610 + 7610 7618 533 + 533 7619 7610 + 533 7618 527 + 5061 5060 7620 + 7620 254 5061 + 4408 4412 7621 + 7621 7622 4408 + 4408 7622 7623 + 7623 4409 4408 + 7624 4409 7623 + 4409 7624 7625 + 4409 7625 4405 + 7621 7626 7622 + 7622 7626 4096 + 4096 7623 7622 + 4096 4095 7623 + 7623 4095 7624 + 7624 4095 4100 + 4100 7627 7624 + 7625 7624 7627 + 7626 7621 4417 + 4417 7628 7626 + 7626 7628 4090 + 4096 7626 4090 + 7629 7628 4417 + 7628 7629 7630 + 7630 4090 7628 + 4091 4090 7630 + 4091 7630 23 + 23 7631 4091 + 6469 7627 4100 + 6474 7627 6469 + 7627 6474 7625 + 4405 7625 6474 + 148 7632 7633 + 7633 7632 7634 + 7634 7635 7633 + 7636 7635 7634 + 7636 7634 7637 + 7637 7638 7636 + 7639 7636 7638 + 7638 7637 7640 + 7641 7642 7643 + 7642 7641 7644 + 7644 7645 7642 + 7645 7646 7642 + 7646 7647 7642 + 7648 7642 7647 + 7647 7649 7648 + 7644 7641 2021 + 7650 7644 2021 + 7651 7644 7650 + 7644 7651 7645 + 7645 7651 7652 + 7652 7646 7645 + 7641 7653 2021 + 2022 2021 7653 + 7653 7654 2022 + 2018 2022 7654 + 7653 7641 7655 + 7656 7653 7655 + 7653 7656 7654 + 7654 7656 7657 + 7657 7658 7654 + 7654 7658 2018 + 7658 7659 2018 + 2013 2018 7659 + 7659 7660 2013 + 2013 7660 1996 + 7658 7657 7661 + 7659 7658 7662 + 7663 7659 7662 + 7660 7659 7663 + 7660 7663 7664 + 7664 1996 7660 + 1996 7664 7665 + 1996 7665 7666 + 7666 1997 1996 + 7664 7663 7667 + 7667 7668 7664 + 7668 7665 7664 + 7665 7668 7669 + 7665 7669 7670 + 7669 7671 7670 + 7672 7670 7671 + 7673 7668 7667 + 7668 7673 7674 + 7674 7669 7668 + 7674 7675 7669 + 7669 7675 7676 + 7676 7671 7669 + 7677 7671 7676 + 7671 7677 7672 + 7678 7673 7667 + 7678 7667 7679 + 7679 7680 7678 + 7678 7680 7681 + 7682 7679 7667 + 7683 7682 7667 + 1997 7666 7672 + 1997 7672 7684 + 7684 1985 1997 + 1985 7684 1976 + 1976 7684 7685 + 7685 1977 1976 + 1973 1977 7685 + 7672 7677 7684 + 7677 7686 7684 + 7686 7685 7684 + 7685 7686 7687 + 7688 7685 7687 + 7685 7688 1973 + 1973 7688 7689 + 7689 7690 1973 + 1973 7690 1967 + 1963 1967 7690 + 7688 7687 7691 + 7689 7688 7691 + 7691 7692 7689 + 7693 7689 7692 + 7693 7690 7689 + 7690 7693 1963 + 1963 7693 1938 + 7692 7691 7694 + 7695 7692 7694 + 7696 7692 7695 + 7692 7696 7693 + 7693 7696 1938 + 7694 7691 3240 + 7650 7697 7651 + 7650 7698 7697 + 7698 7650 7699 + 7650 7700 7699 + 7700 7701 7699 + 7699 7701 7702 + 7702 7703 7699 + 7700 7650 2021 + 7704 7700 2021 + 7701 7700 7704 + 7704 7705 7701 + 7705 7702 7701 + 7706 7702 7705 + 7702 7706 7707 + 7704 2021 2027 + 2027 7708 7704 + 7708 7709 7704 + 7709 7710 7704 + 7710 7711 7704 + 7711 7712 7704 + 7713 7704 7712 + 7704 7713 7705 + 7714 7708 2027 + 7708 7714 7715 + 7708 7715 7716 + 7716 7709 7708 + 7709 7716 7717 + 7709 7717 7718 + 7718 7710 7709 + 2027 7719 7714 + 7720 7714 7719 + 7715 7714 7720 + 7720 7721 7715 + 7715 7721 1523 + 1523 7716 7715 + 7717 7716 1523 + 2027 2030 7719 + 7719 2030 2029 + 2029 7722 7719 + 7719 7722 7720 + 7723 7720 7722 + 7721 7720 7723 + 7723 7724 7721 + 7725 7722 2029 + 7722 7725 7723 + 2029 7726 7725 + 7726 2029 2028 + 2028 7727 7726 + 1523 1522 7717 + 7717 1522 7728 + 7728 7718 7717 + 7729 7718 7728 + 7710 7718 7729 + 7710 7729 7730 + 7730 7711 7710 + 7711 7730 7731 + 1521 7728 1522 + 1529 7728 1521 + 7728 1529 7729 + 7729 1529 7732 + 7730 7729 7732 + 7732 7733 7730 + 7731 7730 7733 + 7733 7734 7731 + 7734 151 7731 + 1529 1528 7732 + 1534 7732 1528 + 7732 1534 7735 + 7732 7735 7736 + 7736 7733 7732 + 7734 7733 7736 + 7734 7736 7737 + 7737 151 7734 + 7738 151 7737 + 151 7738 3432 + 3432 7739 151 + 7735 1534 1533 + 1533 7740 7735 + 7735 7740 382 + 7740 7741 382 + 7741 7742 382 + 1533 7743 7740 + 7740 7743 7744 + 7744 7741 7740 + 7744 7745 7741 + 7741 7745 7746 + 7746 7742 7741 + 7743 1533 1532 + 1532 7747 7743 + 7744 7743 7747 + 7747 7748 7744 + 7745 7744 7748 + 7748 7749 7745 + 7746 7745 7749 + 7749 7750 7746 + 7751 7746 7750 + 7746 7751 7742 + 1531 7747 1532 + 7747 1531 7752 + 7752 7748 7747 + 7749 7748 7752 + 7753 3432 7738 + 374 7753 7738 + 391 374 7738 + 7738 7737 391 + 391 7737 7735 + 7737 7736 7735 + 1517 1523 7721 + 7721 7754 1517 + 7705 7713 7706 + 7755 7706 7713 + 2103 7756 7757 + 2103 7757 7758 + 7758 7759 2103 + 2103 7759 7760 + 7759 7758 7761 + 7759 7761 7694 + 7694 7762 7759 + 7763 7762 7694 + 7761 7758 7764 + 7764 7765 7761 + 7765 7694 7761 + 7765 7695 7694 + 7696 7695 7765 + 7765 1938 7696 + 7764 7758 7766 + 7766 7767 7764 + 1938 7764 7767 + 1938 7765 7764 + 7766 7768 7767 + 7768 7769 7767 + 1939 7767 7769 + 7767 1939 1938 + 1939 7769 7770 + 7770 1930 1939 + 1930 7770 1924 + 1924 7770 1925 + 1925 7770 7769 + 7769 7771 1925 + 7772 7773 7774 + 7774 7775 7772 + 7776 7772 7775 + 7776 7777 7772 + 7777 7778 7772 + 7779 7772 7778 + 7779 7778 7780 + 7775 7774 7781 + 7781 7782 7775 + 7775 7782 7783 + 7783 7776 7775 + 7777 7776 7783 + 7784 7781 7774 + 7781 7784 7785 + 7786 7781 7785 + 7782 7781 7786 + 7786 7787 7782 + 7783 7782 7787 + 7788 7784 7774 + 7789 7784 7788 + 7784 7789 7790 + 7790 7785 7784 + 7790 7791 7785 + 7792 7785 7791 + 7792 7786 7785 + 7788 7774 7793 + 7780 7794 7773 + 7794 7780 7795 + 7795 7796 7794 + 7797 7794 7796 + 7797 7798 7794 + 7798 7799 7794 + 7794 7799 7800 + 7795 7780 7801 + 7802 7795 7801 + 7795 7802 7803 + 7803 7804 7795 + 7804 7796 7795 + 7796 7804 7805 + 7805 7797 7796 + 7798 7797 7805 + 7801 7780 7778 + 7806 7801 7778 + 7801 7806 7807 + 7807 7808 7801 + 7801 7808 7802 + 7809 7802 7808 + 7803 7802 7809 + 7777 7806 7778 + 7807 7806 7777 + 7777 7810 7807 + 7811 7807 7810 + 7808 7807 7811 + 7811 7812 7808 + 7808 7812 7809 + 7783 7810 7777 + 7810 7783 7813 + 7813 7814 7810 + 7810 7814 7811 + 7814 7815 7811 + 7815 7816 7811 + 7816 7817 7811 + 7812 7811 7817 + 7813 7783 7787 + 7787 7818 7813 + 7819 7813 7818 + 7819 7814 7813 + 7814 7819 7820 + 7820 7815 7814 + 7816 7815 7820 + 7818 7787 7821 + 7822 7818 7821 + 7822 7823 7818 + 7818 7823 7819 + 7819 7823 7824 + 7820 7819 7824 + 7787 7786 7821 + 7821 7786 7825 + 7825 7826 7821 + 7821 7826 7827 + 7822 7821 7827 + 7828 7822 7827 + 7823 7822 7828 + 7828 7824 7823 + 7792 7825 7786 + 7829 7825 7792 + 7829 7826 7825 + 7829 7830 7826 + 7826 7830 7831 + 7831 7827 7826 + 7792 7832 7829 + 7833 7829 7832 + 7829 7833 7834 + 7830 7829 7834 + 7831 7830 7834 + 7835 7831 7834 + 7831 7835 7836 + 7836 7827 7831 + 7832 7792 7837 + 7838 7832 7837 + 7832 7838 7833 + 7838 7839 7833 + 7834 7833 7839 + 7839 7840 7834 + 7834 7840 7835 + 7837 7792 7791 + 7841 7837 7791 + 7842 7837 7841 + 7838 7837 7842 + 7843 7838 7842 + 7843 7839 7838 + 7840 7839 7843 + 7843 7844 7840 + 7844 7835 7840 + 7845 7835 7844 + 7835 7845 7836 + 7791 7846 7841 + 7847 7841 7846 + 7841 7847 7848 + 7841 7848 7842 + 7842 7848 7849 + 7850 7842 7849 + 7850 7843 7842 + 7844 7843 7850 + 7846 7791 7790 + 7851 7846 7790 + 7851 7852 7846 + 7846 7852 7847 + 7853 7847 7852 + 7848 7847 7853 + 7853 7849 7848 + 7851 7790 7789 + 7854 7851 7789 + 7852 7851 7854 + 7854 7855 7852 + 7852 7855 7856 + 7856 7853 7852 + 7857 7853 7856 + 7853 7857 7849 + 7789 7858 7854 + 7859 7854 7858 + 7859 7855 7854 + 7855 7859 7860 + 7860 7861 7855 + 7855 7861 7856 + 7789 7862 7858 + 7862 7798 7858 + 7805 7858 7798 + 7858 7805 7859 + 7860 7859 7805 + 7863 7860 7805 + 7864 7860 7863 + 7860 7864 7861 + 7788 7862 7789 + 7862 7788 7800 + 7800 7799 7862 + 7862 7799 7798 + 7805 7804 7863 + 7804 7865 7863 + 7865 7866 7863 + 7867 7863 7866 + 7863 7867 7868 + 7863 7868 7864 + 7869 7865 7804 + 7865 7869 7870 + 7870 7871 7865 + 7865 7871 7872 + 7872 7866 7865 + 7873 7866 7872 + 7866 7873 7867 + 7804 7803 7869 + 7874 7869 7803 + 7870 7869 7874 + 7874 7875 7870 + 7870 7875 7876 + 7876 7877 7870 + 7871 7870 7877 + 7877 7878 7871 + 7872 7871 7878 + 7803 7879 7874 + 7880 7874 7879 + 7874 7880 7881 + 7881 7875 7874 + 7875 7881 7882 + 7882 7876 7875 + 7809 7879 7803 + 7883 7879 7809 + 7879 7883 7880 + 7884 7880 7883 + 7881 7880 7884 + 7884 7885 7881 + 7881 7885 7886 + 7886 7882 7881 + 7887 7882 7886 + 7876 7882 7887 + 7809 7888 7883 + 7883 7888 7889 + 7889 7890 7883 + 7883 7890 7884 + 7891 7884 7890 + 7884 7891 7892 + 7892 7885 7884 + 7888 7809 7893 + 7893 7894 7888 + 7888 7894 7895 + 7895 7889 7888 + 7896 7889 7895 + 7890 7889 7896 + 7896 7897 7890 + 7890 7897 7891 + 7812 7893 7809 + 7898 7893 7812 + 7898 7894 7893 + 7894 7898 7899 + 7899 7895 7894 + 7895 7899 7900 + 7900 7901 7895 + 7895 7901 7896 + 7812 7817 7898 + 7898 7817 7816 + 7898 7816 7899 + 7900 7899 7816 + 7816 7902 7900 + 7900 7902 7903 + 7903 7904 7900 + 7901 7900 7904 + 7904 7905 7901 + 7896 7901 7905 + 7905 7906 7896 + 7897 7896 7906 + 7820 7902 7816 + 7902 7820 7907 + 7907 7903 7902 + 7908 7903 7907 + 7903 7908 7909 + 7909 7904 7903 + 7905 7904 7909 + 7909 7910 7905 + 7905 7910 7911 + 7911 7906 7905 + 7824 7907 7820 + 7908 7907 7824 + 7824 7912 7908 + 7909 7908 7912 + 7912 7913 7909 + 7913 7914 7909 + 7914 7915 7909 + 7910 7909 7915 + 7915 7916 7910 + 7911 7910 7916 + 7912 7824 7828 + 7912 7828 7917 + 7917 7913 7912 + 7918 7913 7917 + 7913 7918 7919 + 7919 7914 7913 + 7920 7914 7919 + 7914 7920 7921 + 7921 7915 7914 + 7916 7915 7921 + 7827 7917 7828 + 7918 7917 7827 + 7827 7836 7918 + 7919 7918 7836 + 7836 7922 7919 + 7920 7919 7922 + 7922 7923 7920 + 7921 7920 7923 + 7923 7924 7921 + 7925 7921 7924 + 7921 7925 7916 + 7926 7922 7836 + 7926 7923 7922 + 7923 7926 7927 + 7927 7924 7923 + 7924 7927 7928 + 7928 7929 7924 + 7924 7929 7925 + 7930 7925 7929 + 7916 7925 7930 + 7836 7845 7926 + 7926 7845 7931 + 7931 7927 7926 + 7928 7927 7931 + 7931 7932 7928 + 7933 7928 7932 + 7929 7928 7933 + 7933 7934 7929 + 7929 7934 7930 + 7845 7935 7931 + 7935 7936 7931 + 7937 7931 7936 + 7931 7937 7938 + 7938 7932 7931 + 7932 7938 7933 + 7938 7939 7933 + 7934 7933 7939 + 7844 7935 7845 + 7850 7935 7844 + 7935 7850 7940 + 7940 7936 7935 + 7940 7941 7936 + 7936 7941 7937 + 7937 7941 7857 + 7857 7942 7937 + 7942 7943 7937 + 7938 7937 7943 + 7940 7850 7849 + 7941 7940 7849 + 7849 7857 7941 + 7856 7942 7857 + 7856 7944 7942 + 7942 7944 7945 + 7945 7943 7942 + 7946 7943 7945 + 7943 7946 7938 + 7938 7946 7947 + 7947 7948 7938 + 7948 7939 7938 + 7934 7939 7948 + 7944 7856 7861 + 7861 7864 7944 + 7945 7944 7864 + 7864 7868 7945 + 7949 7945 7868 + 7945 7949 7946 + 7946 7949 7950 + 7950 7947 7946 + 7947 7950 7951 + 7951 7952 7947 + 7947 7952 7953 + 7953 7948 7947 + 7868 7867 7949 + 7949 7867 7873 + 7873 7950 7949 + 7950 7873 7954 + 7951 7950 7954 + 7951 7954 7955 + 7955 7956 7951 + 7952 7951 7956 + 7956 7957 7952 + 7953 7952 7957 + 7872 7954 7873 + 7954 7872 7958 + 7958 7955 7954 + 7955 7958 7959 + 7959 7960 7955 + 7955 7960 7961 + 7961 7956 7955 + 7957 7956 7961 + 7878 7958 7872 + 7959 7958 7878 + 7878 7962 7959 + 7959 7962 7963 + 7963 7964 7959 + 7960 7959 7964 + 7964 7965 7960 + 7961 7960 7965 + 7966 7962 7878 + 7962 7966 7967 + 7967 7963 7962 + 7963 7967 7968 + 7968 7969 7963 + 7963 7969 7970 + 7970 7964 7963 + 7965 7964 7970 + 7878 7877 7966 + 7966 7877 7876 + 7876 7971 7966 + 7966 7971 7972 + 7972 7967 7966 + 7968 7967 7972 + 7972 7973 7968 + 7968 7973 7974 + 7974 7975 7968 + 7969 7968 7975 + 7887 7971 7876 + 7971 7887 7976 + 7976 7972 7971 + 7972 7976 7977 + 7977 7973 7972 + 7973 7977 7978 + 7978 7974 7973 + 7979 7976 7887 + 7977 7976 7979 + 7979 7980 7977 + 7977 7980 7981 + 7981 7978 7977 + 7982 7978 7981 + 7974 7978 7982 + 7887 7983 7979 + 7984 7979 7983 + 7979 7984 7985 + 7985 7980 7979 + 7980 7985 7986 + 7986 7981 7980 + 7886 7983 7887 + 7987 7983 7886 + 7983 7987 7984 + 7988 7984 7987 + 7985 7984 7988 + 7988 7989 7985 + 7985 7989 7990 + 7990 7986 7985 + 7991 7986 7990 + 7981 7986 7991 + 7886 7992 7987 + 7987 7992 7993 + 7993 7994 7987 + 7987 7994 7988 + 7995 7988 7994 + 7988 7995 7996 + 7996 7989 7988 + 7992 7886 7885 + 7885 7892 7992 + 7993 7992 7892 + 7892 7997 7993 + 7998 7993 7997 + 7993 7998 7999 + 7999 7994 7993 + 7994 7999 7995 + 8000 7995 7999 + 7996 7995 8000 + 8001 7997 7892 + 8002 7997 8001 + 7997 8002 7998 + 8003 7998 8002 + 7999 7998 8003 + 8003 8004 7999 + 7999 8004 8000 + 7892 7891 8001 + 8001 7891 7897 + 7897 8005 8001 + 8006 8001 8005 + 8001 8006 8002 + 8002 8006 8007 + 8007 8008 8002 + 8002 8008 8003 + 7906 8005 7897 + 8005 7906 7911 + 7911 8009 8005 + 8005 8009 8006 + 8007 8006 8009 + 8009 8010 8007 + 8011 8007 8010 + 8007 8011 8012 + 8012 8008 8007 + 8008 8012 8013 + 8013 8003 8008 + 8009 7911 8014 + 8014 8010 8009 + 7930 8010 8014 + 8010 7930 8011 + 8015 8011 7930 + 8012 8011 8015 + 8015 8016 8012 + 8012 8016 8017 + 8017 8013 8012 + 7916 8014 7911 + 7930 8014 7916 + 7934 8015 7930 + 7948 8015 7934 + 8015 7948 7953 + 7953 8016 8015 + 8016 7953 8018 + 8018 8017 8016 + 8017 8018 8019 + 8019 8020 8017 + 8017 8020 8021 + 8021 8013 8017 + 8003 8013 8021 + 8021 8004 8003 + 7957 8018 7953 + 8019 8018 7957 + 7957 8022 8019 + 8019 8022 8023 + 8023 8024 8019 + 8020 8019 8024 + 8024 8025 8020 + 8021 8020 8025 + 8025 8026 8021 + 8004 8021 8026 + 8026 8000 8004 + 7961 8022 7957 + 8022 7961 8027 + 8027 8023 8022 + 8023 8027 8028 + 8028 8029 8023 + 8023 8029 8030 + 8030 8024 8023 + 8025 8024 8030 + 7965 8027 7961 + 8028 8027 7965 + 7965 8031 8028 + 8028 8031 8032 + 8032 8033 8028 + 8029 8028 8033 + 8033 8034 8029 + 8030 8029 8034 + 7970 8031 7965 + 8031 7970 8035 + 8035 8032 8031 + 8032 8035 8036 + 8036 8037 8032 + 8032 8037 8038 + 8038 8033 8032 + 8034 8033 8038 + 8039 8035 7970 + 8036 8035 8039 + 8039 8040 8036 + 8041 8036 8040 + 8037 8036 8041 + 8041 8042 8037 + 8042 8038 8037 + 8043 8038 8042 + 8038 8043 8034 + 7970 7969 8039 + 7975 8039 7969 + 8039 7975 8044 + 8044 8040 8039 + 8040 8044 8045 + 8045 8041 8040 + 8042 8041 8045 + 8045 8046 8042 + 8046 8047 8042 + 8042 8047 8043 + 8048 8043 8047 + 8034 8043 8048 + 8044 7975 7974 + 7974 8049 8044 + 8045 8044 8049 + 8045 8049 7982 + 8046 8045 7982 + 8046 7982 8050 + 8051 8046 8050 + 8047 8046 8051 + 8051 8052 8047 + 8047 8052 8048 + 7982 8049 7974 + 7981 8050 7982 + 7991 8050 7981 + 8051 8050 7991 + 8053 8051 7991 + 8051 8053 8054 + 8054 8052 8051 + 8052 8054 8055 + 8055 8048 8052 + 8048 8055 8056 + 8056 8057 8048 + 8048 8057 8034 + 8053 7991 8058 + 8053 8058 8059 + 8060 8053 8059 + 8053 8060 8054 + 8054 8060 8061 + 8054 8061 8055 + 8056 8055 8061 + 7990 8058 7991 + 8059 8058 7990 + 7990 8062 8059 + 8059 8062 8063 + 8063 8064 8059 + 8060 8059 8064 + 8060 8064 8061 + 8061 8064 8063 + 8063 8065 8061 + 8061 8065 8056 + 8062 7990 7989 + 7989 7996 8062 + 8063 8062 7996 + 7996 8066 8063 + 8065 8063 8066 + 8066 8067 8065 + 8056 8065 8067 + 8067 8068 8056 + 8057 8056 8068 + 8068 8030 8057 + 8034 8057 8030 + 8000 8066 7996 + 8067 8066 8000 + 8000 8026 8067 + 8067 8026 8025 + 8025 8068 8067 + 8030 8068 8025 + 8069 8070 8071 + 8072 8070 8069 + 8070 8072 8073 + 8074 8070 8073 + 8070 8074 8075 + 8069 8076 8072 + 8077 8072 8076 + 8072 8077 8078 + 8073 8072 8078 + 8078 8079 8073 + 8079 8074 8073 + 8069 8080 8076 + 8076 8080 8081 + 8081 8082 8076 + 8082 8083 8076 + 8083 8077 8076 + 8080 8069 8084 + 8084 8085 8080 + 8080 8085 8086 + 8086 8081 8080 + 8081 8086 8087 + 8088 8081 8087 + 8082 8081 8088 + 8084 8069 8075 + 8084 8075 8089 + 8089 8090 8084 + 8091 8084 8090 + 8084 8091 8085 + 8085 8091 8092 + 8092 8086 8085 + 8086 8092 8087 + 8093 8089 8075 + 8094 8089 8093 + 8089 8094 8095 + 8095 8090 8089 + 8096 8090 8095 + 8090 8096 8091 + 8091 8096 8097 + 8092 8091 8097 + 8075 8098 8093 + 8093 8098 8099 + 8099 8100 8093 + 8100 8101 8093 + 8102 8093 8101 + 8093 8102 8094 + 8098 8075 8103 + 8098 8103 8104 + 8104 8099 8098 + 8099 8104 8105 + 8099 8105 8106 + 8106 8100 8099 + 8103 8075 8074 + 8074 8107 8103 + 8103 8107 8108 + 8104 8103 8108 + 8108 8109 8104 + 8105 8104 8109 + 8109 8110 8105 + 8106 8105 8110 + 8107 8074 8079 + 8079 8111 8107 + 8107 8111 8112 + 8112 8108 8107 + 8108 8112 8113 + 8113 8114 8108 + 8108 8114 8115 + 8115 8109 8108 + 8110 8109 8115 + 8111 8079 8116 + 8111 8116 8112 + 8116 8117 8112 + 8113 8112 8117 + 8117 8118 8113 + 8113 8118 8119 + 8113 8119 8120 + 8114 8113 8120 + 8115 8114 8120 + 8079 8078 8116 + 8116 8078 8077 + 8117 8116 8077 + 8083 8117 8077 + 8118 8117 8083 + 8083 8121 8118 + 8118 8121 8122 + 8122 8123 8118 + 8118 8123 8119 + 8124 8119 8123 + 8119 8124 8125 + 8120 8119 8125 + 8121 8083 8082 + 8082 8126 8121 + 8122 8121 8126 + 8127 8122 8126 + 8128 8122 8127 + 8122 8128 8129 + 8129 8123 8122 + 8123 8129 8124 + 8088 8126 8082 + 8126 8088 8130 + 8130 8127 8126 + 8131 8127 8130 + 8131 8132 8127 + 8127 8132 8128 + 8133 8128 8132 + 8133 8134 8128 + 8134 8129 8128 + 8130 8088 8087 + 8135 8130 8087 + 8130 8135 8136 + 8131 8130 8136 + 8131 8136 8137 + 8137 8138 8131 + 8132 8131 8138 + 8138 8139 8132 + 8139 8133 8132 + 8087 8140 8135 + 8141 8135 8140 + 8135 8141 8136 + 8136 8141 8142 + 8142 8143 8136 + 8136 8143 8137 + 8144 8140 8087 + 8140 8144 8145 + 8140 8145 8141 + 8142 8141 8145 + 8146 8142 8145 + 8147 8142 8146 + 8143 8142 8147 + 8137 8143 8147 + 8087 8092 8144 + 8097 8144 8092 + 8145 8144 8097 + 8097 8148 8145 + 8145 8148 8146 + 8149 8146 8148 + 8146 8149 8150 + 8146 8150 8147 + 8147 8150 8151 + 8151 8152 8147 + 8152 8137 8147 + 8153 8148 8097 + 8148 8153 8149 + 8149 8153 8154 + 8155 8149 8154 + 8150 8149 8155 + 8155 8156 8150 + 8150 8156 8151 + 8097 8157 8153 + 8153 8157 8158 + 8158 8154 8153 + 8157 8097 8096 + 8096 8159 8157 + 8157 8159 8160 + 8160 8158 8157 + 8161 8158 8160 + 8154 8158 8161 + 8095 8159 8096 + 8159 8095 8162 + 8162 8160 8159 + 8160 8162 8163 + 8163 8164 8160 + 8160 8164 8161 + 8165 8162 8095 + 8163 8162 8165 + 8165 8166 8163 + 8163 8166 8167 + 8167 8168 8163 + 8164 8163 8168 + 8168 8169 8164 + 8161 8164 8169 + 8095 8094 8165 + 8170 8165 8094 + 8165 8170 8171 + 8171 8166 8165 + 8166 8171 8172 + 8172 8167 8166 + 8094 8102 8170 + 8173 8170 8102 + 8171 8170 8173 + 8173 8174 8171 + 8171 8174 8175 + 8175 8172 8171 + 8176 8172 8175 + 8167 8172 8176 + 8102 8177 8173 + 8178 8173 8177 + 8173 8178 8179 + 8179 8174 8173 + 8174 8179 8180 + 8180 8175 8174 + 8101 8177 8102 + 8177 8101 8181 + 8181 8182 8177 + 8177 8182 8178 + 8183 8178 8182 + 8179 8178 8183 + 8183 8184 8179 + 8179 8184 8185 + 8185 8180 8179 + 8181 8101 8100 + 8100 8186 8181 + 8181 8186 8187 + 8187 8188 8181 + 8182 8181 8188 + 8188 8189 8182 + 8182 8189 8183 + 8106 8186 8100 + 8186 8106 8190 + 8190 8187 8186 + 8187 8190 8191 + 8191 8192 8187 + 8187 8192 8193 + 8193 8188 8187 + 8189 8188 8193 + 8110 8190 8106 + 8191 8190 8110 + 8110 8194 8191 + 8191 8194 8195 + 8195 8196 8191 + 8192 8191 8196 + 8196 8197 8192 + 8193 8192 8197 + 8115 8194 8110 + 8194 8115 8198 + 8198 8195 8194 + 8198 8199 8195 + 8195 8199 8200 + 8200 8196 8195 + 8197 8196 8200 + 8201 8198 8115 + 8201 8202 8198 + 8202 8199 8198 + 8199 8202 8203 + 8200 8199 8203 + 8120 8201 8115 + 8201 8120 8125 + 8204 8201 8125 + 8202 8201 8204 + 8202 8204 8205 + 8205 8203 8202 + 8205 8206 8203 + 8203 8206 8207 + 8207 8208 8203 + 8203 8208 8200 + 8204 8125 8209 + 8204 8209 8205 + 8209 8210 8205 + 8206 8205 8210 + 8210 8211 8206 + 8206 8211 8207 + 8211 8212 8207 + 8213 8207 8212 + 8207 8213 8208 + 8125 8124 8209 + 8124 8214 8209 + 8215 8209 8214 + 8209 8215 8216 + 8216 8210 8209 + 8216 8211 8210 + 8211 8216 8217 + 8217 8212 8211 + 8124 8129 8214 + 8129 8134 8214 + 8215 8214 8134 + 8134 8218 8215 + 8216 8215 8218 + 8218 8217 8216 + 8218 8219 8217 + 8220 8217 8219 + 8212 8217 8220 + 8220 8221 8212 + 8212 8221 8213 + 8218 8134 8133 + 8218 8133 8139 + 8139 8219 8218 + 8222 8219 8139 + 8219 8222 8220 + 8223 8220 8222 + 8221 8220 8223 + 8223 8224 8221 + 8221 8224 8225 + 8213 8221 8225 + 8226 8213 8225 + 8208 8213 8226 + 8139 8138 8222 + 8222 8138 8227 + 8222 8227 8223 + 8151 8223 8227 + 8224 8223 8151 + 8151 8228 8224 + 8224 8228 8229 + 8229 8225 8224 + 8138 8137 8227 + 8137 8152 8227 + 8227 8152 8151 + 8228 8151 8156 + 8156 8230 8228 + 8228 8230 8231 + 8231 8229 8228 + 8232 8229 8231 + 8225 8229 8232 + 8156 8155 8230 + 8230 8155 8233 + 8233 8231 8230 + 8231 8233 8234 + 8234 8235 8231 + 8231 8235 8232 + 8154 8233 8155 + 8234 8233 8154 + 8154 8236 8234 + 8234 8236 8237 + 8237 8238 8234 + 8235 8234 8238 + 8238 8239 8235 + 8232 8235 8239 + 8161 8236 8154 + 8236 8161 8240 + 8240 8237 8236 + 8237 8240 8241 + 8241 8242 8237 + 8237 8242 8243 + 8243 8238 8237 + 8239 8238 8243 + 8169 8240 8161 + 8241 8240 8169 + 8169 8244 8241 + 8241 8244 8245 + 8245 8246 8241 + 8242 8241 8246 + 8246 8247 8242 + 8243 8242 8247 + 8248 8244 8169 + 8244 8248 8249 + 8249 8245 8244 + 8245 8249 8250 + 8250 8251 8245 + 8245 8251 8252 + 8252 8246 8245 + 8247 8246 8252 + 8169 8168 8248 + 8248 8168 8167 + 8167 8253 8248 + 8248 8253 8254 + 8254 8249 8248 + 8250 8249 8254 + 8176 8253 8167 + 8253 8176 8255 + 8255 8254 8253 + 8254 8255 8256 + 8256 8257 8254 + 8254 8257 8250 + 8258 8255 8176 + 8256 8255 8258 + 8258 8259 8256 + 8256 8259 8260 + 8260 8261 8256 + 8257 8256 8261 + 8261 8262 8257 + 8262 8250 8257 + 8176 8263 8258 + 8264 8258 8263 + 8258 8264 8265 + 8265 8259 8258 + 8259 8265 8266 + 8266 8260 8259 + 8175 8263 8176 + 8267 8263 8175 + 8263 8267 8264 + 8268 8264 8267 + 8265 8264 8268 + 8268 8269 8265 + 8265 8269 8270 + 8270 8266 8265 + 8175 8180 8267 + 8267 8180 8185 + 8185 8271 8267 + 8267 8271 8268 + 8272 8268 8271 + 8268 8272 8273 + 8273 8269 8268 + 8269 8273 8274 + 8274 8270 8269 + 8275 8271 8185 + 8271 8275 8272 + 8276 8272 8275 + 8273 8272 8276 + 8276 8277 8273 + 8273 8277 8278 + 8278 8274 8273 + 8185 8279 8275 + 8275 8279 8280 + 8280 8281 8275 + 8275 8281 8276 + 8282 8276 8281 + 8276 8282 8283 + 8283 8277 8276 + 8279 8185 8184 + 8184 8284 8279 + 8280 8279 8284 + 8284 8285 8280 + 8286 8280 8285 + 8280 8286 8287 + 8287 8281 8280 + 8281 8287 8282 + 8288 8282 8287 + 8283 8282 8288 + 8284 8184 8183 + 8183 8289 8284 + 8284 8289 8290 + 8290 8285 8284 + 8291 8285 8290 + 8285 8291 8286 + 8292 8286 8291 + 8287 8286 8292 + 8292 8293 8287 + 8287 8293 8288 + 8289 8183 8189 + 8189 8294 8289 + 8290 8289 8294 + 8294 8295 8290 + 8296 8290 8295 + 8290 8296 8291 + 8291 8296 8297 + 8297 8298 8291 + 8291 8298 8292 + 8193 8294 8189 + 8294 8193 8299 + 8299 8295 8294 + 8299 8300 8295 + 8295 8300 8296 + 8296 8300 8301 + 8301 8297 8296 + 8302 8297 8301 + 8297 8302 8303 + 8303 8298 8297 + 8304 8299 8193 + 8300 8299 8304 + 8304 8305 8300 + 8300 8305 8301 + 8306 8301 8305 + 8307 8301 8306 + 8301 8307 8302 + 8197 8304 8193 + 8308 8304 8197 + 8308 8305 8304 + 8305 8308 8306 + 8309 8306 8308 + 8307 8306 8309 + 8309 8226 8307 + 8302 8307 8226 + 8225 8302 8226 + 8303 8302 8225 + 8197 8310 8308 + 8308 8310 8309 + 8311 8309 8310 + 8226 8309 8311 + 8226 8311 8208 + 8208 8311 8200 + 8310 8200 8311 + 8200 8310 8197 + 8312 8313 8314 + 8315 8314 8313 + 8315 8316 8314 + 8314 8316 8317 + 8317 8318 8314 + 8314 8318 8319 + 8319 8320 8314 + 8320 42 8314 + 8313 8321 8315 + 8315 8321 8322 + 8322 8323 8315 + 8323 8324 8315 + 8316 8315 8324 + 8325 8321 8313 + 8321 8325 8326 + 8326 8322 8321 + 8322 8326 8327 + 8327 8328 8322 + 8322 8328 8329 + 8329 8323 8322 + 8325 8313 8330 + 8330 8331 8325 + 8325 8331 8332 + 8332 8326 8325 + 8327 8326 8332 + 8332 8333 8327 + 8333 8334 8327 + 8334 8335 8327 + 8335 8328 8327 + 8328 8335 8329 + 8330 8336 8331 + 8331 8336 8332 + 8336 8337 8332 + 8333 8332 8337 + 8333 8337 8338 + 8338 8339 8333 + 8333 8339 8334 + 8338 8337 8336 + 8340 8338 8336 + 8341 8338 8340 + 8339 8338 8341 + 8342 8339 8341 + 8339 8342 8334 + 8342 8343 8334 + 8334 8343 8344 + 8344 8335 8334 + 8340 8336 8345 + 8346 8340 8345 + 8347 8340 8346 + 8340 8347 8341 + 8341 8347 8348 + 8348 8349 8341 + 8342 8341 8349 + 42 8345 8336 + 8350 8345 42 + 8345 8350 8346 + 8351 8346 8350 + 8351 8348 8346 + 8348 8347 8346 + 8336 8352 42 + 8353 8354 8355 + 8356 8354 8353 + 8357 8354 8356 + 8357 8358 8354 + 8354 8358 8359 + 8359 46 8354 + 8353 8360 8356 + 8356 8360 8361 + 8361 8362 8356 + 8357 8356 8362 + 8360 8353 8363 + 8363 8364 8360 + 8360 8364 8365 + 8365 8361 8360 + 8363 8353 8366 + 8366 8367 8363 + 8363 8367 8368 + 8369 8363 8368 + 8364 8363 8369 + 8369 8370 8364 + 8365 8364 8370 + 8366 8353 8371 + 8371 8372 8366 + 8373 8366 8372 + 8373 8367 8366 + 8367 8373 8374 + 8374 8368 8367 + 8375 8372 8371 + 8375 8376 8372 + 8372 8376 8373 + 8374 8373 8376 + 8371 8377 8375 + 8375 8377 8378 + 8376 8375 8378 + 8378 8379 8376 + 8376 8379 8374 + 8380 8377 8371 + 8377 8380 8381 + 8381 8382 8377 + 8377 8382 8378 + 8382 8383 8378 + 8384 8378 8383 + 8384 8379 8378 + 8380 8371 8385 + 8385 8386 8380 + 8380 8386 8387 + 8380 8387 8381 + 8388 8381 8387 + 8381 8388 8389 + 8389 8382 8381 + 8383 8382 8389 + 8390 8385 8371 + 8385 8390 8391 + 8392 8385 8391 + 8392 8386 8385 + 8386 8392 8393 + 8393 8387 8386 + 8387 8393 8394 + 8394 8395 8387 + 8387 8395 8388 + 8396 8391 8390 + 8391 8396 8397 + 8397 8398 8391 + 8392 8391 8398 + 8392 8398 8393 + 8398 8399 8393 + 8393 8399 8400 + 8394 8393 8400 + 8401 8396 8390 + 8396 8401 8402 + 8402 8397 8396 + 8402 8403 8397 + 8403 8404 8397 + 8398 8397 8404 + 8398 8404 8405 + 8405 8399 8398 + 46 8401 8390 + 46 8359 8401 + 8401 8359 8406 + 8406 8402 8401 + 8403 8402 8406 + 46 8390 8407 + 8408 8409 8410 + 8411 8408 8410 + 8408 8411 8412 + 8412 8413 8408 + 8408 8413 8414 + 8414 8415 8408 + 8408 8415 8416 + 8417 8411 8410 + 8412 8411 8417 + 8417 8418 8412 + 8419 8412 8418 + 8413 8412 8419 + 8420 8417 8410 + 8421 8417 8420 + 8418 8417 8421 + 8418 8421 8422 + 8422 8423 8418 + 8418 8423 8419 + 8410 8424 8420 + 8425 8420 8424 + 8425 8426 8420 + 8420 8426 8421 + 8422 8421 8426 + 8427 8424 8410 + 8424 8427 8428 + 8424 8428 8425 + 8425 8428 8429 + 8429 8430 8425 + 8426 8425 8430 + 8430 8431 8426 + 8426 8431 8422 + 8410 8432 8427 + 8427 8432 8433 + 8433 8434 8427 + 8428 8427 8434 + 8434 8435 8428 + 8428 8435 8429 + 8432 8410 8436 + 8432 8437 8415 + 8415 8438 8432 + 8432 8438 8433 + 8415 8414 8438 + 8438 8414 8439 + 8439 8440 8438 + 8438 8440 8433 + 8439 8414 8413 + 8441 8439 8413 + 8442 8439 8441 + 8442 8440 8439 + 8440 8442 8443 + 8443 8433 8440 + 8413 8444 8441 + 8444 8445 8441 + 8446 8441 8445 + 8446 8447 8441 + 8441 8447 8442 + 8442 8447 8448 + 8448 8443 8442 + 8419 8444 8413 + 8449 8444 8419 + 8444 8449 8450 + 8450 8445 8444 + 8451 8445 8450 + 8445 8451 8446 + 8446 8451 8452 + 8452 8453 8446 + 8447 8446 8453 + 8449 8419 8454 + 8454 8455 8449 + 8450 8449 8455 + 8455 8456 8450 + 8457 8450 8456 + 8450 8457 8451 + 8451 8457 8458 + 8458 8452 8451 + 8423 8454 8419 + 8459 8454 8423 + 8455 8454 8459 + 8459 8460 8455 + 8455 8460 8461 + 8461 8456 8455 + 8462 8456 8461 + 8456 8462 8457 + 8457 8462 8463 + 8463 8458 8457 + 8423 8464 8459 + 8465 8459 8464 + 8460 8459 8465 + 8465 8466 8460 + 8460 8466 8467 + 8467 8461 8460 + 8468 8461 8467 + 8461 8468 8462 + 8464 8423 8422 + 8422 8469 8464 + 8464 8469 8470 + 8470 8471 8464 + 8464 8471 8465 + 8471 8472 8465 + 8473 8465 8472 + 8466 8465 8473 + 8469 8422 8474 + 8469 8474 8475 + 8475 8470 8469 + 8470 8475 8476 + 8477 8470 8476 + 8471 8470 8477 + 8471 8477 8478 + 8478 8472 8471 + 8422 8431 8474 + 8479 8474 8431 + 8474 8479 8480 + 8480 8475 8474 + 8480 8476 8475 + 8476 8480 8481 + 8481 8482 8476 + 8477 8476 8482 + 8478 8477 8482 + 8431 8430 8479 + 8479 8430 8429 + 8429 8483 8479 + 8479 8483 8484 + 8484 8481 8479 + 8481 8480 8479 + 8485 8483 8429 + 8483 8485 8486 + 8486 8484 8483 + 8484 8486 8487 + 8487 8488 8484 + 8484 8488 8489 + 8489 8481 8484 + 8481 8489 8482 + 8429 8490 8485 + 8485 8490 8491 + 8491 8492 8485 + 8485 8492 8493 + 8493 8486 8485 + 8487 8486 8493 + 8490 8429 8435 + 8435 8494 8490 + 8491 8490 8494 + 8494 8495 8491 + 8496 8491 8495 + 8491 8496 8497 + 8497 8492 8491 + 8492 8497 8498 + 8498 8493 8492 + 8494 8435 8434 + 8434 8499 8494 + 8494 8499 8500 + 8500 8495 8494 + 8495 8500 8501 + 8501 8502 8495 + 8495 8502 8496 + 8499 8434 8433 + 8433 8503 8499 + 8500 8499 8503 + 8501 8500 8503 + 8503 8504 8501 + 8501 8504 8505 + 8505 8506 8501 + 8502 8501 8506 + 8506 8507 8502 + 8496 8502 8507 + 8504 8503 8433 + 8433 8443 8504 + 8504 8443 8448 + 8448 8505 8504 + 8505 8448 8508 + 8508 8509 8505 + 8505 8509 8510 + 8510 8506 8505 + 8507 8506 8510 + 8508 8448 8511 + 8511 8512 8508 + 8508 8512 8513 + 8513 8514 8508 + 8509 8508 8514 + 8514 8515 8509 + 8510 8509 8515 + 8447 8511 8448 + 8453 8511 8447 + 8511 8453 8516 + 8516 8512 8511 + 8512 8516 8517 + 8517 8513 8512 + 8513 8517 8518 + 8518 8519 8513 + 8513 8519 8520 + 8520 8514 8513 + 8515 8514 8520 + 8516 8453 8452 + 8452 8521 8516 + 8516 8521 8522 + 8522 8517 8516 + 8518 8517 8522 + 8522 8523 8518 + 8518 8523 8524 + 8524 8525 8518 + 8519 8518 8525 + 8526 8521 8452 + 8521 8526 8527 + 8527 8522 8521 + 8522 8527 8528 + 8528 8523 8522 + 8523 8528 8529 + 8529 8524 8523 + 8452 8458 8526 + 8526 8458 8463 + 8463 8530 8526 + 8526 8530 8531 + 8531 8527 8526 + 8528 8527 8531 + 8531 8532 8528 + 8528 8532 8533 + 8533 8529 8528 + 8534 8529 8533 + 8524 8529 8534 + 8535 8530 8463 + 8530 8535 8536 + 8536 8531 8530 + 8531 8536 8537 + 8537 8532 8531 + 8532 8537 8538 + 8538 8533 8532 + 8463 8539 8535 + 8535 8539 8540 + 8540 8541 8535 + 8535 8541 8542 + 8542 8536 8535 + 8537 8536 8542 + 8539 8463 8462 + 8462 8468 8539 + 8539 8468 8543 + 8543 8540 8539 + 8544 8540 8543 + 8540 8544 8545 + 8545 8541 8540 + 8541 8545 8546 + 8546 8542 8541 + 8468 8547 8543 + 8548 8543 8547 + 8543 8548 8549 + 8543 8549 8544 + 8544 8549 8550 + 8550 8551 8544 + 8545 8544 8551 + 8467 8547 8468 + 8547 8467 8552 + 8547 8552 8548 + 8548 8552 8473 + 8553 8548 8473 + 8549 8548 8553 + 8553 8554 8549 + 8549 8554 8550 + 8552 8467 8466 + 8466 8473 8552 + 8555 8556 8557 + 8558 8557 8556 + 8557 8558 8559 + 8559 8560 8557 + 8557 8560 8561 + 8561 8562 8557 + 8557 8562 8563 + 8556 8564 8558 + 8565 8566 8567 + 8566 8568 8567 + 8568 8569 8567 + 8567 8569 8559 + 8559 8558 8567 + 8570 8567 8558 + 8568 8566 8571 + 8572 8568 8571 + 8569 8568 8572 + 8572 8573 8569 + 8569 8573 8574 + 8574 8575 8569 + 8575 8559 8569 + 8560 8559 8575 + 8563 8571 8566 + 8576 8571 8563 + 8571 8576 8577 + 8577 8578 8571 + 8571 8578 8572 + 8566 8579 8563 + 8580 8579 8566 + 8581 8582 8583 + 8584 8582 8581 + 8584 8585 8582 + 8582 8585 8586 + 8586 8587 8582 + 8582 8587 8588 + 8581 8589 8584 + 8584 8589 8590 + 8591 8584 8590 + 8585 8584 8591 + 8591 8592 8585 + 8585 8592 8593 + 8593 8586 8585 + 8581 8594 8589 + 8589 8594 8595 + 8595 8590 8589 + 8594 8581 8596 + 8596 8597 8594 + 8594 8597 8598 + 8598 8595 8594 + 8599 8595 8598 + 8590 8595 8599 + 8597 8596 8600 + 8597 8600 8601 + 8601 8602 8597 + 8597 8602 8598 + 8602 8601 8603 + 8602 8603 8604 + 8604 8605 8602 + 8602 8605 8598 + 8606 8604 8603 + 8607 8604 8606 + 8607 8605 8604 + 8605 8607 8608 + 8608 8609 8605 + 8605 8609 8598 + 8606 8610 8607 + 8607 8610 8611 + 8608 8607 8611 + 8612 8608 8611 + 8613 8608 8612 + 8608 8613 8609 + 8609 8613 8614 + 8614 8598 8609 + 8610 8606 8615 + 8610 8615 8616 + 8616 8611 8610 + 8615 8606 8617 + 8617 8618 8615 + 8615 8618 8619 + 8619 8616 8615 + 8620 8616 8619 + 8616 8620 8621 + 8621 8611 8616 + 8622 8617 8606 + 8623 8617 8622 + 8617 8623 8624 + 8624 8618 8617 + 8618 8624 8625 + 8625 8626 8618 + 8626 8625 8627 + 8628 8622 8606 + 8629 8622 8628 + 8622 8629 8630 + 8622 8630 8623 + 8631 8623 8630 + 8624 8623 8631 + 8631 8632 8624 + 8625 8624 8632 + 8628 8633 8629 + 8629 8633 8634 + 8630 8629 8634 + 8634 8635 8630 + 8630 8635 8636 + 8636 8637 8630 + 8637 8631 8630 + 8638 8631 8637 + 8632 8631 8638 + 8633 8639 8634 + 8640 8634 8639 + 8639 58 8640 + 8619 8641 8620 + 8641 8642 8620 + 8642 8643 8620 + 8643 8644 8620 + 8621 8620 8644 + 8644 8645 8621 + 8621 8645 8646 + 8647 8621 8646 + 8611 8621 8647 + 8643 8648 8644 + 8648 8649 8644 + 8648 8650 8649 + 8650 8651 8649 + 8648 8643 8652 + 8652 8650 8648 + 8650 8652 8653 + 8653 8654 8650 + 8651 8650 8654 + 8652 8643 8655 + 8655 8656 8652 + 8652 8656 8657 + 8657 8653 8652 + 8658 8653 8657 + 8653 8658 8654 + 8659 8656 8655 + 8656 8659 8660 + 8660 8661 8656 + 8656 8661 8657 + 8662 8657 8661 + 8663 8657 8662 + 8657 8663 8658 + 8659 8655 8627 + 8627 8625 8659 + 8660 8659 8625 + 8664 8660 8625 + 8665 8660 8664 + 8660 8665 8661 + 8661 8665 8662 + 8666 8662 8665 + 8667 8662 8666 + 8662 8667 8663 + 8632 8664 8625 + 8668 8664 8632 + 8664 8668 8669 + 8664 8669 8665 + 8665 8669 8666 + 8670 8666 8669 + 8671 8666 8670 + 8666 8671 8667 + 8632 8638 8668 + 8668 8638 8672 + 8670 8668 8672 + 8669 8668 8670 + 8637 8672 8638 + 8672 8637 8673 + 8673 8674 8672 + 8672 8674 8675 + 8675 8676 8672 + 8672 8676 8670 + 8677 8670 8676 + 8670 8677 8671 + 8673 8637 8636 + 8636 8678 8673 + 8679 8673 8678 + 8674 8673 8679 + 8679 8680 8674 + 8674 8680 8681 + 8681 8675 8674 + 8682 8678 8636 + 8678 8682 8683 + 8683 8684 8678 + 8678 8684 8679 + 8685 8679 8684 + 8680 8679 8685 + 8636 8686 8682 + 8682 8686 8687 + 8687 8688 8682 + 8683 8682 8688 + 8688 8689 8683 + 8690 8683 8689 + 8684 8683 8690 + 8686 8636 8635 + 8635 8691 8686 + 8687 8686 8691 + 8691 8692 8687 + 8693 8687 8692 + 8687 8693 8694 + 8694 8688 8687 + 8688 8694 8695 + 8695 8689 8688 + 8691 8635 8634 + 8634 57 8691 + 8696 8697 8698 + 8699 8696 8698 + 8700 8696 8699 + 8700 8701 8696 + 8696 8701 61 + 61 8702 8696 + 8703 8699 8698 + 8704 8699 8703 + 8705 8699 8704 + 8699 8705 8700 + 8700 8705 8706 + 8707 8700 8706 + 8701 8700 8707 + 8698 8708 8703 + 8709 8703 8708 + 8710 8703 8709 + 8703 8710 8704 + 8711 8704 8710 + 8712 8704 8711 + 8704 8712 8705 + 8713 8708 8698 + 8708 8713 8714 + 8708 8714 8709 + 8715 8709 8714 + 8716 8709 8715 + 8709 8716 8710 + 8698 8717 8713 + 8718 8713 8717 + 8714 8713 8718 + 8718 8719 8714 + 8714 8719 8715 + 8717 8698 8720 + 8720 8721 8717 + 8717 8721 8722 + 8722 8723 8717 + 8717 8723 8718 + 8720 8698 8724 + 8724 8725 8720 + 8720 8725 8726 + 8726 8727 8720 + 8727 8728 8720 + 8728 8729 8720 + 8721 8720 8729 + 8730 8724 8698 + 8724 8731 8725 + 8725 8731 8732 + 8732 8726 8725 + 8726 8732 8733 + 8726 8733 8734 + 8734 8727 8726 + 8727 8734 8735 + 8727 8735 8736 + 8736 8728 8727 + 8733 8732 8737 + 8737 8738 8733 + 8734 8733 8738 + 8739 8734 8738 + 8735 8734 8739 + 8739 8740 8735 + 8735 8740 8741 + 8741 8736 8735 + 8737 8732 8742 + 8743 8744 8745 + 8744 8746 8745 + 8747 8745 8746 + 8747 8748 8745 + 8745 8748 8749 + 8749 8750 8745 + 8745 8750 8751 + 8751 48 8745 + 8752 8746 8744 + 8752 8753 8746 + 8746 8753 8747 + 8747 8753 8754 + 8754 8755 8747 + 8748 8747 8755 + 8755 8756 8748 + 8749 8748 8756 + 8744 8757 8752 + 8752 8757 8758 + 8758 8759 8752 + 8753 8752 8759 + 8759 8754 8753 + 8760 8754 8759 + 8754 8760 8761 + 8761 8755 8754 + 8762 8757 8744 + 8757 8762 8763 + 8763 8758 8757 + 8764 8758 8763 + 8759 8758 8764 + 8765 8759 8764 + 8759 8765 8760 + 8762 8744 8766 + 8766 8767 8762 + 8762 8767 8768 + 8768 8769 8762 + 8769 8763 8762 + 8764 8763 8769 + 8769 8770 8764 + 8764 8770 8771 + 8765 8764 8771 + 8771 8772 8765 + 8760 8765 8772 + 8767 8773 8768 + 8773 8774 8768 + 8775 8768 8774 + 8768 8775 8776 + 8776 8769 8768 + 8770 8769 8776 + 8770 8776 8777 + 8777 8771 8770 + 8773 8767 8778 + 8773 8778 48 + 48 8779 8773 + 8774 8773 8779 + 8779 8780 8774 + 8775 8774 8780 + 8780 8781 8775 + 8775 8781 8782 + 8776 8775 8782 + 8782 8777 8776 + 8783 8777 8782 + 8771 8777 8783 + 8784 8779 48 + 8779 8784 8780 + 8784 8785 8780 + 8781 8780 8785 + 8785 8786 8781 + 8781 8786 8787 + 8787 8782 8781 + 8788 8782 8787 + 8782 8788 8783 + 8784 48 8751 + 8751 8789 8784 + 8784 8789 8790 + 8790 8791 8784 + 8791 8785 8784 + 8786 8785 8791 + 8791 8792 8786 + 8787 8786 8792 + 8793 8787 8792 + 8787 8793 8788 + 8794 8789 8751 + 8789 8794 8795 + 8795 8796 8789 + 8789 8796 8790 + 8794 8751 8797 + 8797 8798 8794 + 8794 8798 8799 + 8795 8794 8799 + 8800 8797 8751 + 8801 8797 8800 + 8801 8798 8797 + 8798 8801 8802 + 8802 8799 8798 + 8803 8800 8751 + 8804 8800 8803 + 8804 8805 8800 + 8800 8805 8801 + 8801 8805 8806 + 8806 8807 8801 + 8807 8802 8801 + 8808 8803 8751 + 8809 8803 8808 + 8809 8810 8803 + 8803 8810 8804 + 8804 8810 8811 + 8811 8812 8804 + 8805 8804 8812 + 8812 8806 8805 + 8750 8808 8751 + 8813 8808 8750 + 8813 8814 8808 + 8808 8814 8809 + 8809 8814 8815 + 8815 8816 8809 + 8810 8809 8816 + 8816 8811 8810 + 8750 8817 8813 + 8818 8813 8817 + 8814 8813 8818 + 8818 8815 8814 + 8819 8815 8818 + 8815 8819 8820 + 8820 8816 8815 + 8816 8820 8821 + 8821 8811 8816 + 8749 8817 8750 + 8817 8749 8822 + 8822 8823 8817 + 8817 8823 8824 + 8824 8825 8817 + 8825 8818 8817 + 8826 8818 8825 + 8818 8826 8819 + 8822 8749 8756 + 8827 8822 8756 + 8828 8822 8827 + 8823 8822 8828 + 8823 8828 8829 + 8829 8830 8823 + 8823 8830 8824 + 8756 8831 8827 + 8832 8827 8831 + 8827 8832 8833 + 8827 8833 8828 + 8834 8831 8756 + 8831 8834 8835 + 8835 8836 8831 + 8831 8836 8832 + 8837 8832 8836 + 8833 8832 8837 + 8756 8838 8834 + 8834 8838 8839 + 8839 8840 8834 + 8835 8834 8840 + 8840 8841 8835 + 8842 8835 8841 + 8836 8835 8842 + 8838 8756 8755 + 8755 8761 8838 + 8838 8761 8843 + 8843 8839 8838 + 8839 8843 8844 + 8844 8845 8839 + 8839 8845 8846 + 8846 8840 8839 + 8840 8846 8841 + 8847 8843 8761 + 8844 8843 8847 + 8847 8848 8844 + 8844 8848 8849 + 8850 8844 8849 + 8845 8844 8850 + 8761 8760 8847 + 8772 8847 8760 + 8772 8848 8847 + 8848 8772 8771 + 8771 8849 8848 + 8783 8849 8771 + 8849 8783 8851 + 8851 8852 8849 + 8849 8852 8850 + 8853 8850 8852 + 8850 8853 8854 + 8854 8855 8850 + 8850 8855 8845 + 8851 8783 8856 + 8856 8857 8851 + 8858 8851 8857 + 8851 8858 8859 + 8859 8852 8851 + 8852 8859 8853 + 8783 8788 8856 + 8860 8856 8788 + 8861 8856 8860 + 8856 8861 8862 + 8862 8857 8856 + 8863 8857 8862 + 8857 8863 8858 + 8788 8793 8860 + 8860 8793 8864 + 8864 8865 8860 + 8866 8860 8865 + 8860 8866 8861 + 8792 8864 8793 + 8864 8792 8791 + 8864 8791 8790 + 8790 8865 8864 + 8865 8790 8867 + 8867 8868 8865 + 8865 8868 8866 + 8869 8866 8868 + 8861 8866 8869 + 8869 8870 8861 + 8861 8870 8871 + 8862 8861 8871 + 8867 8790 8872 + 8872 8873 8867 + 8874 8867 8873 + 8868 8867 8874 + 8874 8875 8868 + 8868 8875 8869 + 8796 8872 8790 + 8876 8872 8796 + 8873 8872 8876 + 8873 8876 8877 + 8877 8878 8873 + 8873 8878 8879 + 8879 8874 8873 + 8796 8880 8876 + 8876 8880 8881 + 8877 8876 8881 + 8882 8877 8881 + 8883 8877 8882 + 8883 8878 8877 + 8878 8883 8884 + 8884 8879 8878 + 8796 8795 8880 + 8880 8795 8885 + 8885 8881 8880 + 8885 8886 8881 + 8881 8886 8887 + 8887 8888 8881 + 8881 8888 8889 + 8889 8882 8881 + 8890 8885 8795 + 8886 8885 8890 + 8890 8891 8886 + 8887 8886 8891 + 8891 8892 8887 + 8892 8893 8887 + 8894 8887 8893 + 8887 8894 8888 + 8895 8890 8795 + 8896 8890 8895 + 8896 8891 8890 + 8891 8896 8897 + 8897 8892 8891 + 8898 8892 8897 + 8892 8898 8899 + 8899 8893 8892 + 8799 8895 8795 + 8900 8895 8799 + 8901 8895 8900 + 8895 8901 8896 + 8896 8901 8902 + 8902 8897 8896 + 8898 8897 8902 + 8902 8903 8898 + 8899 8898 8903 + 8799 8904 8900 + 8905 8900 8904 + 8901 8900 8905 + 8905 8906 8901 + 8901 8906 8902 + 8907 8902 8906 + 8903 8902 8907 + 8904 8799 8802 + 8904 8802 8807 + 8807 8908 8904 + 8904 8908 8909 + 8909 8905 8904 + 8910 8905 8909 + 8910 8906 8905 + 8906 8910 8907 + 8911 8908 8807 + 8908 8911 8912 + 8912 8909 8908 + 8912 8913 8909 + 8909 8913 8910 + 8910 8913 8914 + 8907 8910 8914 + 8911 8807 8806 + 8806 8915 8911 + 8911 8915 8916 + 8916 8912 8911 + 8913 8912 8916 + 8916 8914 8913 + 8915 8806 8812 + 8812 8917 8915 + 8915 8917 8918 + 8918 8919 8915 + 8915 8919 8916 + 8920 8916 8919 + 8920 8914 8916 + 8917 8812 8811 + 8811 8821 8917 + 8918 8917 8821 + 8821 8921 8918 + 8922 8918 8921 + 8922 8919 8918 + 8919 8922 8920 + 8920 8922 8923 + 8923 8924 8920 + 8924 8925 8920 + 8914 8920 8925 + 8926 8921 8821 + 8927 8921 8926 + 8921 8927 8922 + 8922 8927 8923 + 8928 8923 8927 + 8929 8923 8928 + 8923 8929 8930 + 8930 8924 8923 + 8821 8820 8926 + 8926 8820 8819 + 8819 8928 8926 + 8927 8926 8928 + 8931 8928 8819 + 8928 8931 8929 + 8929 8931 8932 + 8932 8933 8929 + 8929 8933 8934 + 8934 8930 8929 + 8819 8826 8931 + 8931 8826 8935 + 8935 8932 8931 + 8935 8936 8932 + 8936 8937 8932 + 8933 8932 8937 + 8933 8937 8938 + 8938 8939 8933 + 8933 8939 8934 + 8825 8935 8826 + 8935 8825 8936 + 8936 8825 8940 + 8936 8940 8941 + 8937 8936 8941 + 8941 8938 8937 + 8942 8938 8941 + 8939 8938 8942 + 8939 8942 8943 + 8943 8944 8939 + 8939 8944 8934 + 8825 8824 8940 + 8940 8824 8945 + 8940 8945 8946 + 8946 8941 8940 + 8941 8946 8947 + 8947 8948 8941 + 8941 8948 8942 + 8942 8948 8949 + 8949 8943 8942 + 8945 8824 8830 + 8830 8950 8945 + 8946 8945 8950 + 8950 8951 8946 + 8947 8946 8951 + 8951 8952 8947 + 8953 8947 8952 + 8948 8947 8953 + 8953 8949 8948 + 8950 8830 8829 + 8950 8829 8954 + 8954 8951 8950 + 8952 8951 8954 + 8952 8954 8955 + 8955 8956 8952 + 8952 8956 8953 + 8957 8953 8956 + 8949 8953 8957 + 8954 8829 8828 + 8955 8954 8828 + 8958 8955 8828 + 8959 8955 8958 + 8959 8956 8955 + 8956 8959 8957 + 8960 8957 8959 + 8961 8957 8960 + 8957 8961 8949 + 8949 8961 8962 + 8962 8943 8949 + 8828 8833 8958 + 8833 8963 8958 + 8963 8964 8958 + 8965 8958 8964 + 8965 8966 8958 + 8958 8966 8959 + 8959 8966 8960 + 8837 8963 8833 + 8837 8967 8963 + 8963 8967 8968 + 8968 8964 8963 + 8968 8969 8964 + 8964 8969 8965 + 8965 8969 8970 + 8971 8965 8970 + 8966 8965 8971 + 8967 8837 8972 + 8972 8973 8967 + 8968 8967 8973 + 8973 8974 8968 + 8969 8968 8974 + 8974 8970 8969 + 8836 8972 8837 + 8842 8972 8836 + 8972 8842 8975 + 8975 8973 8972 + 8973 8975 8976 + 8976 8974 8973 + 8974 8976 8977 + 8977 8970 8974 + 8975 8842 8978 + 8978 8979 8975 + 8976 8975 8979 + 8979 8980 8976 + 8977 8976 8980 + 8980 8981 8977 + 8982 8977 8981 + 8970 8977 8982 + 8841 8978 8842 + 8983 8978 8841 + 8979 8978 8983 + 8983 8984 8979 + 8979 8984 8985 + 8985 8980 8979 + 8981 8980 8985 + 8841 8846 8983 + 8983 8846 8845 + 8986 8983 8845 + 8984 8983 8986 + 8986 8987 8984 + 8984 8987 8988 + 8988 8985 8984 + 8989 8985 8988 + 8985 8989 8981 + 8845 8855 8986 + 8990 8986 8855 + 8986 8990 8991 + 8991 8987 8986 + 8987 8991 8992 + 8992 8988 8987 + 8988 8992 8993 + 8993 8994 8988 + 8988 8994 8989 + 8855 8854 8990 + 8990 8854 8995 + 8995 8996 8990 + 8991 8990 8996 + 8996 8997 8991 + 8992 8991 8997 + 8997 8998 8992 + 8993 8992 8998 + 8999 8995 8854 + 9000 8995 8999 + 8995 9000 9001 + 9001 8996 8995 + 8996 9001 9002 + 9002 8997 8996 + 8997 9002 9003 + 9003 8998 8997 + 8854 8853 8999 + 9004 8999 8853 + 9005 8999 9004 + 8999 9005 9000 + 9000 9005 9006 + 9006 9007 9000 + 9001 9000 9007 + 9007 9008 9001 + 9002 9001 9008 + 8853 8859 9004 + 9009 9004 8859 + 9010 9004 9009 + 9004 9010 9005 + 9005 9010 9011 + 9011 9006 9005 + 9012 9006 9011 + 9006 9012 9013 + 9013 9007 9006 + 8859 8858 9009 + 9014 9009 8858 + 9015 9009 9014 + 9009 9015 9010 + 9010 9015 9016 + 9016 9011 9010 + 9017 9011 9016 + 9011 9017 9012 + 8858 8863 9014 + 9018 9014 8863 + 9019 9014 9018 + 9014 9019 9015 + 9015 9019 9020 + 9020 9016 9015 + 9021 9016 9020 + 9016 9021 9017 + 8863 9022 9018 + 9023 9018 9022 + 9024 9018 9023 + 9018 9024 9019 + 9019 9024 9025 + 9025 9020 9019 + 9026 9020 9025 + 9020 9026 9021 + 8862 9022 8863 + 9022 8862 9027 + 9027 9028 9022 + 9022 9028 9023 + 9029 9023 9028 + 9030 9023 9029 + 9023 9030 9024 + 9024 9030 9031 + 9031 9025 9024 + 8871 9027 8862 + 9032 9027 8871 + 9028 9027 9032 + 9032 9033 9028 + 9028 9033 9029 + 9034 9029 9033 + 9035 9029 9034 + 9029 9035 9030 + 9030 9035 9036 + 9036 9031 9030 + 8871 9037 9032 + 9032 9037 9038 + 9038 9039 9032 + 9033 9032 9039 + 9039 9040 9033 + 9033 9040 9034 + 9037 8871 9041 + 9041 9042 9037 + 9037 9042 9043 + 9043 9044 9037 + 9037 9044 9038 + 9041 8871 8870 + 8870 9045 9041 + 9041 9045 9046 + 9042 9041 9046 + 9046 9047 9042 + 9043 9042 9047 + 9047 9048 9043 + 9049 9043 9048 + 9049 9044 9043 + 9045 8870 8869 + 9050 9045 8869 + 9045 9050 9046 + 9050 9051 9046 + 9052 9046 9051 + 9046 9052 9053 + 9053 9047 9046 + 9047 9053 9054 + 9054 9048 9047 + 8875 9050 8869 + 8875 8874 9050 + 9050 8874 9051 + 8874 8879 9051 + 8879 8884 9051 + 9051 8884 9052 + 9052 8884 9055 + 9053 9052 9055 + 9055 9056 9053 + 9054 9053 9056 + 8884 8883 9055 + 8882 9055 8883 + 9056 9055 8882 + 9056 8882 8889 + 8889 9057 9056 + 9056 9057 9054 + 9057 9058 9054 + 9058 9059 9054 + 9060 9054 9059 + 9048 9054 9060 + 9060 9061 9048 + 9048 9061 9049 + 9062 9057 8889 + 9057 9062 9063 + 9063 9058 9057 + 9058 9063 9064 + 9058 9064 9065 + 9065 9059 9058 + 9066 9059 9065 + 9059 9066 9060 + 9062 8889 9067 + 9067 9068 9062 + 9062 9068 9069 + 9063 9062 9069 + 9069 9070 9063 + 9064 9063 9070 + 9071 9067 8889 + 9072 9067 9071 + 9072 9068 9067 + 9068 9072 9073 + 9073 9069 9068 + 9074 9069 9073 + 9069 9074 9075 + 9075 9070 9069 + 8888 9071 8889 + 9076 9071 8888 + 9076 9077 9071 + 9071 9077 9072 + 9073 9072 9077 + 9077 9078 9073 + 9078 9079 9073 + 9080 9073 9079 + 9073 9080 9074 + 8888 8894 9076 + 9081 9076 8894 + 9077 9076 9081 + 9081 9078 9077 + 9082 9078 9081 + 9078 9082 9083 + 9083 9079 9078 + 9083 9084 9079 + 9079 9084 9080 + 9085 9081 8894 + 9081 9085 8899 + 9086 9081 8899 + 9081 9086 9082 + 8893 9085 8894 + 8899 9085 8893 + 9086 8899 8903 + 9087 9086 8903 + 9082 9086 9087 + 9087 9088 9082 + 9082 9088 9089 + 9089 9083 9082 + 9084 9083 9089 + 9089 9090 9084 + 9080 9084 9090 + 9091 9087 8903 + 9091 9088 9087 + 9088 9091 9092 + 9092 9089 9088 + 9090 9089 9092 + 9092 9093 9090 + 9090 9093 9094 + 9094 9095 9090 + 9090 9095 9080 + 8903 9096 9091 + 9091 9096 9097 + 9092 9091 9097 + 9097 9098 9092 + 9093 9092 9098 + 9098 9099 9093 + 9093 9099 9100 + 9100 9094 9093 + 8907 9096 8903 + 9096 8907 9101 + 9101 9097 9096 + 9102 9097 9101 + 9097 9102 9103 + 9103 9098 9097 + 9099 9098 9103 + 9099 9103 9104 + 9104 9100 9099 + 9101 8907 8914 + 8914 9105 9101 + 9106 9101 9105 + 9101 9106 9102 + 9102 9106 9107 + 9107 9108 9102 + 9103 9102 9108 + 9104 9103 9108 + 8925 9105 8914 + 9109 9105 8925 + 9105 9109 9106 + 9106 9109 9110 + 9110 9107 9106 + 9111 9107 9110 + 9108 9107 9111 + 8925 9112 9109 + 9109 9112 9113 + 9113 9110 9109 + 9110 9113 9114 + 9114 9115 9110 + 9110 9115 9111 + 9112 8925 8924 + 8924 9116 9112 + 9112 9116 9117 + 9113 9112 9117 + 9117 9118 9113 + 9114 9113 9118 + 9118 9119 9114 + 9120 9114 9119 + 9115 9114 9120 + 9116 8924 8930 + 8930 9121 9116 + 9116 9121 9122 + 9122 9117 9116 + 9117 9122 9123 + 9123 9124 9117 + 9117 9124 9125 + 9125 9118 9117 + 9118 9125 9119 + 9121 8930 8934 + 8934 9126 9121 + 9121 9126 9127 + 9127 9122 9121 + 9123 9122 9127 + 9127 9128 9123 + 9129 9123 9128 + 9124 9123 9129 + 9126 8934 9130 + 9130 9131 9126 + 9126 9131 9132 + 9132 9127 9126 + 9127 9132 9133 + 9133 9128 9127 + 9130 8934 8944 + 8944 9134 9130 + 9130 9134 9135 + 9135 9136 9130 + 9131 9130 9136 + 9136 9137 9131 + 9131 9137 9138 + 9138 9132 9131 + 9133 9132 9138 + 9134 8944 8943 + 8943 8962 9134 + 9134 8962 9139 + 9139 9140 9134 + 9134 9140 9135 + 9141 9135 9140 + 9142 9135 9141 + 9135 9142 9143 + 9143 9136 9135 + 9137 9136 9143 + 9144 9139 8962 + 9145 9139 9144 + 9140 9139 9145 + 9140 9145 9141 + 9141 9145 9146 + 9146 9147 9141 + 9148 9141 9147 + 9141 9148 9142 + 8962 8961 9144 + 8960 9144 8961 + 9144 8960 9149 + 9149 9146 9144 + 9144 9146 9145 + 9149 8960 9150 + 9150 9151 9149 + 9152 9149 9151 + 9146 9149 9152 + 9152 9147 9146 + 9147 9152 9153 + 9153 9154 9147 + 9147 9154 9148 + 9155 9150 8960 + 9156 9150 9155 + 9151 9150 9156 + 9151 9156 9157 + 9157 9158 9151 + 9151 9158 9152 + 9153 9152 9158 + 8966 9155 8960 + 8971 9155 8966 + 9155 8971 9159 + 9155 9159 9156 + 9157 9156 9159 + 9160 9157 9159 + 9161 9157 9160 + 9161 9158 9157 + 9158 9161 9153 + 9162 9153 9161 + 9154 9153 9162 + 9159 8971 9163 + 9163 9164 9159 + 9159 9164 9165 + 9165 9166 9159 + 9166 9167 9159 + 9167 9160 9159 + 9163 8971 8970 + 8970 9168 9163 + 9169 9163 9168 + 9163 9169 9164 + 9164 9169 9170 + 9170 9165 9164 + 9170 9171 9165 + 9165 9171 9172 + 9172 9166 9165 + 8982 9168 8970 + 9173 9168 8982 + 9168 9173 9169 + 9170 9169 9173 + 9173 9174 9170 + 9171 9170 9174 + 9174 9175 9171 + 9172 9171 9175 + 9176 9172 9175 + 9177 9172 9176 + 9172 9177 9166 + 8982 9178 9173 + 9173 9178 9179 + 9179 9174 9173 + 9174 9179 9180 + 9180 9175 9174 + 9178 8982 9181 + 9181 9182 9178 + 9179 9178 9182 + 9182 9183 9179 + 9180 9179 9183 + 9183 9184 9180 + 9185 9180 9184 + 9175 9180 9185 + 8981 9181 8982 + 9186 9181 8981 + 9181 9186 9182 + 9182 9186 9187 + 9187 9183 9182 + 9184 9183 9187 + 9187 9188 9184 + 9184 9188 9189 + 9189 9190 9184 + 9184 9190 9185 + 8981 8989 9186 + 9187 9186 8989 + 9191 9187 8989 + 9188 9187 9191 + 9191 9192 9188 + 9188 9192 9193 + 9193 9189 9188 + 9194 9189 9193 + 9189 9194 9195 + 9195 9190 9189 + 8989 8994 9191 + 9196 9191 8994 + 9191 9196 9197 + 9197 9192 9191 + 9192 9197 9198 + 9198 9193 9192 + 9193 9198 9199 + 9199 9200 9193 + 9193 9200 9194 + 8994 8993 9196 + 9196 8993 9201 + 9201 9202 9196 + 9197 9196 9202 + 9202 9203 9197 + 9198 9197 9203 + 9203 9204 9198 + 9199 9198 9204 + 8998 9201 8993 + 9205 9201 8998 + 9201 9205 9206 + 9206 9202 9201 + 9202 9206 9207 + 9207 9203 9202 + 9203 9207 9208 + 9208 9204 9203 + 8998 9003 9205 + 9205 9003 9209 + 9209 9210 9205 + 9206 9205 9210 + 9210 9211 9206 + 9207 9206 9211 + 9211 9212 9207 + 9208 9207 9212 + 9213 9209 9003 + 9214 9209 9213 + 9209 9214 9215 + 9215 9210 9209 + 9210 9215 9216 + 9216 9211 9210 + 9211 9216 9217 + 9217 9212 9211 + 9003 9002 9213 + 9008 9213 9002 + 9218 9213 9008 + 9213 9218 9214 + 9214 9218 9219 + 9219 9220 9214 + 9215 9214 9220 + 9220 9221 9215 + 9216 9215 9221 + 9221 9222 9216 + 9217 9216 9222 + 9008 9223 9218 + 9218 9223 9224 + 9224 9219 9218 + 9219 9224 9225 + 9225 9226 9219 + 9219 9226 9227 + 9227 9220 9219 + 9221 9220 9227 + 9223 9008 9007 + 9007 9013 9223 + 9223 9013 9228 + 9228 9224 9223 + 9225 9224 9228 + 9228 9229 9225 + 9230 9225 9229 + 9226 9225 9230 + 9230 9231 9226 + 9226 9231 9232 + 9232 9227 9226 + 9233 9228 9013 + 9228 9233 9234 + 9234 9229 9228 + 9229 9234 9235 + 9235 9236 9229 + 9229 9236 9230 + 9013 9012 9233 + 9237 9233 9012 + 9234 9233 9237 + 9237 9238 9234 + 9235 9234 9238 + 9238 9239 9235 + 9240 9235 9239 + 9235 9240 9241 + 9241 9236 9235 + 9012 9017 9237 + 9242 9237 9017 + 9237 9242 9243 + 9243 9238 9237 + 9238 9243 9244 + 9244 9239 9238 + 9245 9239 9244 + 9239 9245 9240 + 9017 9021 9242 + 9246 9242 9021 + 9243 9242 9246 + 9246 9247 9243 + 9244 9243 9247 + 9247 9248 9244 + 9249 9244 9248 + 9244 9249 9245 + 9021 9026 9246 + 9250 9246 9026 + 9246 9250 9251 + 9251 9247 9246 + 9247 9251 9252 + 9252 9248 9247 + 9253 9248 9252 + 9248 9253 9249 + 9026 9254 9250 + 9255 9250 9254 + 9251 9250 9255 + 9255 9256 9251 + 9252 9251 9256 + 9256 9257 9252 + 9258 9252 9257 + 9252 9258 9253 + 9025 9254 9026 + 9254 9025 9031 + 9031 9259 9254 + 9254 9259 9255 + 9260 9255 9259 + 9255 9260 9261 + 9261 9256 9255 + 9256 9261 9262 + 9262 9257 9256 + 9263 9257 9262 + 9257 9263 9258 + 9259 9031 9036 + 9036 9264 9259 + 9259 9264 9260 + 9265 9260 9264 + 9261 9260 9265 + 9265 9266 9261 + 9262 9261 9266 + 9266 9267 9262 + 9268 9262 9267 + 9262 9268 9263 + 9264 9036 9269 + 9269 9270 9264 + 9264 9270 9265 + 9271 9265 9270 + 9265 9271 9272 + 9272 9266 9265 + 9266 9272 9273 + 9273 9267 9266 + 9269 9036 9035 + 9035 9274 9269 + 9275 9269 9274 + 9270 9269 9275 + 9275 9276 9270 + 9270 9276 9271 + 9277 9271 9276 + 9272 9271 9277 + 9277 9278 9272 + 9273 9272 9278 + 9034 9274 9035 + 9274 9034 9279 + 9279 9280 9274 + 9274 9280 9275 + 9281 9275 9280 + 9276 9275 9281 + 9281 9282 9276 + 9276 9282 9277 + 9279 9034 9040 + 9040 9283 9279 + 9284 9279 9283 + 9280 9279 9284 + 9284 9285 9280 + 9280 9285 9281 + 9286 9281 9285 + 9282 9281 9286 + 9287 9283 9040 + 9283 9287 9288 + 9288 9289 9283 + 9283 9289 9284 + 9290 9284 9289 + 9285 9284 9290 + 9290 9291 9285 + 9285 9291 9286 + 9040 9039 9287 + 9287 9039 9038 + 9038 9292 9287 + 9287 9292 9293 + 9293 9288 9287 + 9294 9288 9293 + 9289 9288 9294 + 9294 9295 9289 + 9289 9295 9290 + 9296 9290 9295 + 9291 9290 9296 + 9292 9038 9297 + 9297 9298 9292 + 9292 9298 9299 + 9299 9300 9292 + 9292 9300 9293 + 9297 9038 9044 + 9044 9049 9297 + 9297 9049 9061 + 9061 9301 9297 + 9298 9297 9301 + 9301 9302 9298 + 9299 9298 9302 + 9302 9303 9299 + 9304 9299 9303 + 9304 9300 9299 + 9305 9301 9061 + 9301 9305 9306 + 9306 9302 9301 + 9302 9306 9307 + 9307 9303 9302 + 9303 9307 9308 + 9308 9309 9303 + 9303 9309 9304 + 9061 9060 9305 + 9305 9060 9066 + 9066 9310 9305 + 9306 9305 9310 + 9310 9311 9306 + 9306 9311 9312 + 9307 9306 9312 + 9312 9313 9307 + 9313 9308 9307 + 9314 9310 9066 + 9311 9310 9314 + 9311 9314 9315 + 9315 9312 9311 + 9066 9065 9314 + 9314 9065 9064 + 9315 9314 9064 + 9316 9315 9064 + 9313 9315 9316 + 9313 9317 9315 + 9064 9318 9316 + 9318 9319 9316 + 9319 9320 9316 + 9320 9321 9316 + 9322 9316 9321 + 9322 9323 9316 + 9316 9323 9313 + 9070 9318 9064 + 9070 9075 9318 + 9318 9075 9324 + 9324 9319 9318 + 9324 9325 9319 + 9319 9325 9326 + 9326 9320 9319 + 9326 9327 9320 + 9320 9327 9328 + 9328 9321 9320 + 9324 9075 9074 + 9329 9324 9074 + 9325 9324 9329 + 9329 9330 9325 + 9326 9325 9330 + 9330 9331 9326 + 9327 9326 9331 + 9331 9332 9327 + 9328 9327 9332 + 9074 9333 9329 + 9334 9329 9333 + 9329 9334 9335 + 9335 9330 9329 + 9330 9335 9336 + 9336 9331 9330 + 9331 9336 9337 + 9337 9332 9331 + 9338 9333 9074 + 9339 9333 9338 + 9333 9339 9334 + 9340 9334 9339 + 9335 9334 9340 + 9340 9341 9335 + 9335 9341 9342 + 9342 9336 9335 + 9337 9336 9342 + 9074 9080 9338 + 9095 9338 9080 + 9339 9338 9095 + 9095 9343 9339 + 9339 9343 9340 + 9343 9344 9340 + 9345 9340 9344 + 9341 9340 9345 + 9343 9095 9094 + 9094 9346 9343 + 9343 9346 9347 + 9347 9344 9343 + 9348 9344 9347 + 9344 9348 9345 + 9346 9094 9100 + 9100 9349 9346 + 9346 9349 9350 + 9350 9347 9346 + 9348 9347 9350 + 9350 9351 9348 + 9345 9348 9351 + 9351 9352 9345 + 9353 9345 9352 + 9345 9353 9341 + 9354 9349 9100 + 9349 9354 9355 + 9355 9350 9349 + 9350 9355 9351 + 9351 9355 9356 + 9356 9352 9351 + 9357 9352 9356 + 9352 9357 9353 + 9358 9353 9357 + 9341 9353 9358 + 9100 9104 9354 + 9354 9104 9359 + 9359 9360 9354 + 9355 9354 9360 + 9360 9361 9355 + 9361 9356 9355 + 9362 9356 9361 + 9356 9362 9357 + 9108 9359 9104 + 9363 9359 9108 + 9360 9359 9363 + 9363 9364 9360 + 9360 9364 9365 + 9365 9361 9360 + 9366 9361 9365 + 9361 9366 9362 + 9108 9367 9363 + 9368 9363 9367 + 9364 9363 9368 + 9368 9369 9364 + 9364 9369 9370 + 9370 9371 9364 + 9371 9365 9364 + 9111 9367 9108 + 9367 9111 9372 + 9372 9373 9367 + 9367 9373 9368 + 9374 9368 9373 + 9369 9368 9374 + 9369 9374 9375 + 9375 9370 9369 + 9372 9111 9115 + 9115 9376 9372 + 9377 9372 9376 + 9372 9377 9378 + 9378 9373 9372 + 9373 9378 9374 + 9374 9378 9379 + 9375 9374 9379 + 9120 9376 9115 + 9380 9376 9120 + 9376 9380 9377 + 9377 9380 9381 + 9381 9382 9377 + 9378 9377 9382 + 9382 9379 9378 + 9120 9383 9380 + 9380 9383 9384 + 9384 9381 9380 + 9385 9381 9384 + 9381 9385 9386 + 9386 9382 9381 + 9382 9386 9387 + 9387 9379 9382 + 9383 9120 9388 + 9388 9389 9383 + 9383 9389 9390 + 9390 9384 9383 + 9391 9384 9390 + 9384 9391 9385 + 9119 9388 9120 + 9392 9388 9119 + 9389 9388 9392 + 9392 9393 9389 + 9389 9393 9394 + 9394 9390 9389 + 9395 9390 9394 + 9390 9395 9391 + 9119 9125 9392 + 9392 9125 9124 + 9124 9396 9392 + 9393 9392 9396 + 9396 9397 9393 + 9393 9397 9398 + 9398 9394 9393 + 9399 9394 9398 + 9394 9399 9395 + 9129 9396 9124 + 9397 9396 9129 + 9129 9400 9397 + 9397 9400 9401 + 9401 9398 9397 + 9402 9398 9401 + 9398 9402 9399 + 9399 9402 9403 + 9403 9404 9399 + 9395 9399 9404 + 9400 9129 9405 + 9405 9406 9400 + 9400 9406 9407 + 9407 9401 9400 + 9408 9401 9407 + 9401 9408 9402 + 9402 9408 9409 + 9409 9403 9402 + 9128 9405 9129 + 9410 9405 9128 + 9406 9405 9410 + 9410 9411 9406 + 9406 9411 9412 + 9412 9407 9406 + 9413 9407 9412 + 9407 9413 9408 + 9408 9413 9414 + 9414 9409 9408 + 9128 9133 9410 + 9410 9133 9415 + 9415 9416 9410 + 9411 9410 9416 + 9416 9417 9411 + 9411 9417 9418 + 9418 9412 9411 + 9419 9412 9418 + 9412 9419 9413 + 9138 9415 9133 + 9138 9420 9415 + 9415 9420 9421 + 9421 9416 9415 + 9417 9416 9421 + 9421 9422 9417 + 9417 9422 9423 + 9423 9418 9417 + 9424 9418 9423 + 9418 9424 9419 + 9420 9138 9425 + 9425 9426 9420 + 9420 9426 9427 + 9427 9421 9420 + 9422 9421 9427 + 9427 9428 9422 + 9422 9428 9429 + 9429 9423 9422 + 9137 9425 9138 + 9430 9425 9137 + 9426 9425 9430 + 9430 9431 9426 + 9426 9431 9432 + 9432 9427 9426 + 9428 9427 9432 + 9432 9433 9428 + 9428 9433 9434 + 9434 9429 9428 + 9137 9435 9430 + 9436 9430 9435 + 9431 9430 9436 + 9436 9437 9431 + 9432 9431 9437 + 9437 9438 9432 + 9433 9432 9438 + 9143 9435 9137 + 9435 9143 9439 + 9439 9440 9435 + 9435 9440 9436 + 9441 9436 9440 + 9436 9441 9442 + 9442 9437 9436 + 9437 9442 9443 + 9443 9438 9437 + 9439 9143 9444 + 9444 9445 9439 + 9445 9446 9439 + 9447 9439 9446 + 9440 9439 9447 + 9447 9448 9440 + 9440 9448 9441 + 9143 9142 9444 + 9449 9444 9142 + 9444 9449 9450 + 9444 9450 9451 + 9451 9445 9444 + 9445 9451 9452 + 9445 9452 9453 + 9453 9446 9445 + 9142 9148 9449 + 9449 9148 9154 + 9154 9454 9449 + 9454 9455 9449 + 9450 9449 9455 + 9455 9456 9450 + 9450 9456 9457 + 9457 9451 9450 + 9457 9458 9451 + 9458 9452 9451 + 9162 9454 9154 + 9454 9162 9459 + 9454 9459 9460 + 9460 9455 9454 + 9455 9460 9456 + 9456 9460 9461 + 9461 9462 9456 + 9456 9462 9457 + 9463 9457 9462 + 9458 9457 9463 + 9459 9162 9464 + 9464 9465 9459 + 9459 9465 9461 + 9461 9460 9459 + 9161 9464 9162 + 9160 9464 9161 + 9465 9464 9160 + 9465 9160 9167 + 9167 9466 9465 + 9465 9466 9461 + 9467 9461 9466 + 9462 9461 9467 + 9462 9467 9463 + 9468 9466 9167 + 9466 9468 9467 + 9467 9468 9177 + 9463 9467 9177 + 9177 9469 9463 + 9469 9470 9463 + 9471 9463 9470 + 9463 9471 9458 + 9468 9167 9166 + 9166 9177 9468 + 9176 9469 9177 + 9469 9176 9472 + 9469 9472 9473 + 9473 9470 9469 + 9474 9470 9473 + 9470 9474 9471 + 9475 9471 9474 + 9458 9471 9475 + 9472 9176 9476 + 9476 9477 9472 + 9472 9477 9478 + 9478 9479 9472 + 9479 9480 9472 + 9480 9481 9472 + 9481 9482 9472 + 9482 9483 9472 + 9483 9484 9472 + 9484 9473 9472 + 9476 9176 9175 + 9175 9485 9476 + 9486 9476 9485 + 9476 9486 9477 + 9477 9486 9487 + 9487 9478 9477 + 9487 9488 9478 + 9478 9488 9489 + 9489 9479 9478 + 9185 9485 9175 + 9485 9185 9490 + 9490 9491 9485 + 9485 9491 9486 + 9487 9486 9491 + 9491 9492 9487 + 9488 9487 9492 + 9492 9493 9488 + 9489 9488 9493 + 9490 9185 9190 + 9190 9195 9490 + 9494 9490 9195 + 9491 9490 9494 + 9494 9492 9491 + 9492 9494 9495 + 9495 9493 9492 + 9493 9495 9496 + 9496 9497 9493 + 9493 9497 9498 + 9498 9489 9493 + 9195 9499 9494 + 9495 9494 9499 + 9499 9500 9495 + 9496 9495 9500 + 9500 9501 9496 + 9502 9496 9501 + 9496 9502 9497 + 9497 9502 9503 + 9503 9498 9497 + 9504 9499 9195 + 9499 9504 9500 + 9500 9504 9505 + 9505 9501 9500 + 9506 9501 9505 + 9501 9506 9502 + 9502 9506 9507 + 9503 9502 9507 + 9195 9194 9504 + 9505 9504 9194 + 9508 9505 9194 + 9509 9505 9508 + 9505 9509 9506 + 9506 9509 9510 + 9510 9511 9506 + 9506 9511 9507 + 9194 9200 9508 + 9512 9508 9200 + 9508 9512 9513 + 9513 9514 9508 + 9508 9514 9509 + 9509 9514 9515 + 9515 9510 9509 + 9516 9510 9515 + 9511 9510 9516 + 9200 9199 9512 + 9512 9199 9517 + 9517 9518 9512 + 9513 9512 9518 + 9518 9519 9513 + 9520 9513 9519 + 9514 9513 9520 + 9520 9515 9514 + 9204 9517 9199 + 9521 9517 9204 + 9517 9521 9522 + 9522 9518 9517 + 9518 9522 9523 + 9523 9519 9518 + 9519 9523 9524 + 9524 9525 9519 + 9519 9525 9520 + 9204 9208 9521 + 9521 9208 9526 + 9526 9527 9521 + 9522 9521 9527 + 9527 9528 9522 + 9523 9522 9528 + 9528 9529 9523 + 9524 9523 9529 + 9212 9526 9208 + 9530 9526 9212 + 9526 9530 9531 + 9531 9527 9526 + 9527 9531 9532 + 9532 9528 9527 + 9528 9532 9533 + 9533 9529 9528 + 9212 9217 9530 + 9530 9217 9534 + 9534 9535 9530 + 9531 9530 9535 + 9535 9536 9531 + 9532 9531 9536 + 9536 9537 9532 + 9533 9532 9537 + 9222 9534 9217 + 9534 9222 9538 + 9538 9539 9534 + 9534 9539 9540 + 9540 9535 9534 + 9536 9535 9540 + 9540 9541 9536 + 9536 9541 9542 + 9542 9537 9536 + 9538 9222 9221 + 9221 9543 9538 + 9544 9538 9543 + 9539 9538 9544 + 9544 9545 9539 + 9539 9545 9546 + 9546 9540 9539 + 9541 9540 9546 + 9227 9543 9221 + 9543 9227 9232 + 9232 9547 9543 + 9543 9547 9544 + 9548 9544 9547 + 9544 9548 9549 + 9549 9545 9544 + 9545 9549 9550 + 9550 9546 9545 + 9551 9547 9232 + 9547 9551 9548 + 9548 9551 9552 + 9552 9553 9548 + 9549 9548 9553 + 9553 9554 9549 + 9550 9549 9554 + 9232 9555 9551 + 9551 9555 9556 + 9556 9552 9551 + 9557 9552 9556 + 9552 9557 9558 + 9558 9553 9552 + 9553 9558 9559 + 9559 9554 9553 + 9555 9232 9231 + 9231 9560 9555 + 9555 9560 9561 + 9561 9556 9555 + 9562 9556 9561 + 9556 9562 9557 + 9557 9562 9563 + 9563 9564 9557 + 9558 9557 9564 + 9560 9231 9230 + 9230 9565 9560 + 9560 9565 9566 + 9566 9561 9560 + 9567 9561 9566 + 9561 9567 9562 + 9562 9567 9568 + 9568 9563 9562 + 9565 9230 9236 + 9236 9241 9565 + 9565 9241 9569 + 9569 9566 9565 + 9570 9566 9569 + 9566 9570 9567 + 9567 9570 9571 + 9571 9568 9567 + 9572 9568 9571 + 9568 9572 9573 + 9573 9563 9568 + 9574 9569 9241 + 9575 9569 9574 + 9569 9575 9570 + 9570 9575 9576 + 9576 9571 9570 + 9577 9571 9576 + 9571 9577 9572 + 9241 9240 9574 + 9578 9574 9240 + 9579 9574 9578 + 9574 9579 9575 + 9575 9579 9580 + 9580 9576 9575 + 9581 9576 9580 + 9576 9581 9577 + 9240 9245 9578 + 9582 9578 9245 + 9583 9578 9582 + 9578 9583 9579 + 9579 9583 9584 + 9584 9580 9579 + 9585 9580 9584 + 9580 9585 9581 + 9245 9249 9582 + 9586 9582 9249 + 9587 9582 9586 + 9582 9587 9583 + 9583 9587 9588 + 9588 9584 9583 + 9589 9584 9588 + 9584 9589 9585 + 9249 9253 9586 + 9590 9586 9253 + 9591 9586 9590 + 9586 9591 9587 + 9587 9591 9592 + 9592 9588 9587 + 9593 9588 9592 + 9588 9593 9589 + 9253 9258 9590 + 9594 9590 9258 + 9595 9590 9594 + 9590 9595 9591 + 9591 9595 9596 + 9596 9592 9591 + 9597 9592 9596 + 9592 9597 9593 + 9258 9263 9594 + 9598 9594 9263 + 9599 9594 9598 + 9594 9599 9595 + 9595 9599 9600 + 9600 9596 9595 + 9601 9596 9600 + 9596 9601 9597 + 9263 9268 9598 + 9602 9598 9268 + 9603 9598 9602 + 9598 9603 9599 + 9599 9603 9604 + 9604 9600 9599 + 9605 9600 9604 + 9600 9605 9601 + 9268 9606 9602 + 9607 9602 9606 + 9608 9602 9607 + 9602 9608 9603 + 9603 9608 9609 + 9609 9604 9603 + 9610 9604 9609 + 9604 9610 9605 + 9267 9606 9268 + 9606 9267 9273 + 9273 9611 9606 + 9606 9611 9607 + 9612 9607 9611 + 9613 9607 9612 + 9607 9613 9608 + 9608 9613 9614 + 9614 9609 9608 + 9615 9609 9614 + 9609 9615 9610 + 9611 9273 9616 + 9616 9617 9611 + 9611 9617 9612 + 9618 9612 9617 + 9619 9612 9618 + 9612 9619 9613 + 9613 9619 9620 + 9620 9614 9613 + 9278 9616 9273 + 9621 9616 9278 + 9617 9616 9621 + 9621 9622 9617 + 9617 9622 9618 + 9623 9618 9622 + 9624 9618 9623 + 9618 9624 9619 + 9619 9624 9625 + 9625 9620 9619 + 9278 9626 9621 + 9627 9621 9626 + 9622 9621 9627 + 9627 9628 9622 + 9622 9628 9623 + 9629 9623 9628 + 9630 9623 9629 + 9623 9630 9624 + 9626 9278 9277 + 9277 9631 9626 + 9626 9631 9632 + 9632 9633 9626 + 9626 9633 9627 + 9634 9627 9633 + 9628 9627 9634 + 9634 9635 9628 + 9628 9635 9629 + 9631 9277 9282 + 9282 9636 9631 + 9631 9636 9637 + 9637 9632 9631 + 9638 9632 9637 + 9632 9638 9639 + 9639 9633 9632 + 9633 9639 9634 + 9640 9634 9639 + 9635 9634 9640 + 9286 9636 9282 + 9636 9286 9641 + 9641 9637 9636 + 9637 9641 9642 + 9642 9643 9637 + 9637 9643 9638 + 9638 9643 9644 + 9644 9645 9638 + 9639 9638 9645 + 9641 9286 9291 + 9291 9646 9641 + 9642 9641 9646 + 9646 9647 9642 + 9648 9642 9647 + 9643 9642 9648 + 9648 9644 9643 + 9296 9646 9291 + 9646 9296 9649 + 9649 9647 9646 + 9647 9649 9650 + 9650 9651 9647 + 9647 9651 9648 + 9652 9648 9651 + 9644 9648 9652 + 9649 9296 9653 + 9653 9654 9649 + 9650 9649 9654 + 9654 9655 9650 + 9656 9650 9655 + 9651 9650 9656 + 9656 9657 9651 + 9651 9657 9652 + 9295 9653 9296 + 9658 9653 9295 + 9653 9658 9659 + 9659 9654 9653 + 9654 9659 9660 + 9660 9655 9654 + 9655 9660 9661 + 9661 9662 9655 + 9655 9662 9656 + 9295 9294 9658 + 9658 9294 9663 + 9663 9664 9658 + 9659 9658 9664 + 9664 9665 9659 + 9660 9659 9665 + 9665 9666 9660 + 9661 9660 9666 + 9294 9667 9663 + 9668 9663 9667 + 9669 9663 9668 + 9663 9669 9670 + 9670 9664 9663 + 9665 9664 9670 + 9293 9667 9294 + 9671 9667 9293 + 9667 9671 9668 + 9668 9671 9672 + 9672 9673 9668 + 9669 9668 9673 + 9673 9674 9669 + 9669 9674 9675 + 9675 9670 9669 + 9676 9671 9293 + 9672 9671 9676 + 9677 9672 9676 + 9672 9677 9678 + 9672 9678 9679 + 9679 9673 9672 + 9673 9679 9680 + 9680 9674 9673 + 9676 9293 9681 + 9681 9682 9676 + 9676 9682 9683 + 9683 9684 9676 + 9684 9677 9676 + 9678 9677 9684 + 9685 9681 9293 + 9686 9681 9685 + 9682 9681 9686 + 9682 9686 9687 + 9687 9683 9682 + 9688 9683 9687 + 9683 9688 9689 + 9689 9684 9683 + 9300 9685 9293 + 9690 9685 9300 + 9691 9685 9690 + 9685 9691 9686 + 9686 9691 9692 + 9692 9687 9686 + 9693 9687 9692 + 9687 9693 9688 + 9300 9304 9690 + 9690 9304 9309 + 9309 9694 9690 + 9691 9690 9694 + 9694 9692 9691 + 9695 9692 9694 + 9692 9695 9693 + 9693 9695 9696 + 9696 9697 9693 + 9688 9693 9697 + 9697 9698 9688 + 9689 9688 9698 + 9699 9694 9309 + 9694 9699 9695 + 9695 9699 9700 + 9700 9696 9695 + 9696 9700 9701 + 9696 9701 9702 + 9702 9697 9696 + 9698 9697 9702 + 9309 9308 9699 + 9699 9308 9323 + 9323 9703 9699 + 9703 9700 9699 + 9701 9700 9703 + 9703 9704 9701 + 9701 9704 9705 + 9702 9701 9705 + 9308 9313 9323 + 9474 9473 9484 + 9484 9706 9474 + 9474 9706 9475 + 9707 9475 9706 + 9708 9475 9707 + 9475 9708 9458 + 9452 9458 9708 + 9709 9706 9484 + 9706 9709 9707 + 9710 9707 9709 + 9711 9707 9710 + 9707 9711 9708 + 9708 9711 9712 + 9712 9453 9708 + 9708 9453 9452 + 9709 9484 9483 + 9483 9713 9709 + 9709 9713 9710 + 9714 9710 9713 + 9715 9710 9714 + 9710 9715 9711 + 9712 9711 9715 + 9715 9716 9712 + 9717 9712 9716 + 9453 9712 9717 + 9717 9446 9453 + 9718 9713 9483 + 9713 9718 9714 + 9719 9714 9718 + 9720 9714 9719 + 9714 9720 9715 + 9715 9720 9721 + 9721 9716 9715 + 9722 9716 9721 + 9716 9722 9717 + 9718 9483 9482 + 9482 9723 9718 + 9718 9723 9719 + 9724 9719 9723 + 9725 9719 9724 + 9719 9725 9720 + 9721 9720 9725 + 9725 9726 9721 + 9722 9721 9726 + 9727 9723 9482 + 9723 9727 9724 + 9728 9724 9727 + 9729 9724 9728 + 9724 9729 9725 + 9725 9729 9730 + 9730 9726 9725 + 9731 9726 9730 + 9726 9731 9722 + 9727 9482 9481 + 9481 9732 9727 + 9727 9732 9728 + 9733 9728 9732 + 9734 9728 9733 + 9728 9734 9729 + 9729 9734 9735 + 9730 9729 9735 + 9735 9736 9730 + 9731 9730 9736 + 9737 9732 9481 + 9732 9737 9733 + 9738 9733 9737 + 9734 9733 9738 + 9738 9735 9734 + 9735 9738 9739 + 9735 9739 9740 + 9740 9736 9735 + 9737 9481 9480 + 9480 9741 9737 + 9737 9741 9742 + 9742 9738 9737 + 9739 9738 9742 + 9742 9743 9739 + 9740 9739 9743 + 9743 9744 9740 + 9745 9740 9744 + 9736 9740 9745 + 9746 9741 9480 + 9741 9746 9747 + 9747 9748 9741 + 9741 9748 9742 + 9746 9480 9479 + 9479 9749 9746 + 9746 9749 9750 + 9747 9746 9750 + 9751 9747 9750 + 9752 9747 9751 + 9748 9747 9752 + 9489 9749 9479 + 9749 9489 9498 + 9498 9750 9749 + 9503 9750 9498 + 9750 9503 9753 + 9753 9754 9750 + 9750 9754 9755 + 9755 9751 9750 + 9756 9751 9755 + 9751 9756 9757 + 9751 9757 9752 + 9758 9753 9503 + 9759 9753 9758 + 9759 9754 9753 + 9754 9759 9760 + 9760 9755 9754 + 9760 9761 9755 + 9755 9761 9756 + 9762 9756 9761 + 9757 9756 9762 + 9507 9758 9503 + 9763 9758 9507 + 9763 9764 9758 + 9758 9764 9759 + 9760 9759 9764 + 9764 9765 9760 + 9765 9766 9760 + 9761 9760 9766 + 9766 9767 9761 + 9761 9767 9762 + 9507 9768 9763 + 9769 9763 9768 + 9769 9765 9763 + 9765 9764 9763 + 9768 9507 9770 + 9768 9770 9771 + 9771 9772 9768 + 9768 9772 9769 + 9773 9769 9772 + 9769 9773 9765 + 9765 9773 8740 + 8740 9766 9765 + 9767 9766 8740 + 9770 9507 9511 + 9511 9516 9770 + 9770 9516 9774 + 9774 9775 9770 + 9775 9771 9770 + 9776 9771 9775 + 9771 9776 8741 + 8741 9772 9771 + 9772 8741 9773 + 8740 9773 8741 + 9515 9774 9516 + 9777 9774 9515 + 9774 9777 9778 + 9778 9775 9774 + 9775 9778 9779 + 9779 9780 9775 + 9775 9780 9776 + 9515 9520 9777 + 9777 9520 9525 + 9525 9781 9777 + 9778 9777 9781 + 9781 9782 9778 + 9779 9778 9782 + 9782 9783 9779 + 9784 9779 9783 + 9780 9779 9784 + 9785 9781 9525 + 9781 9785 9786 + 9786 9782 9781 + 9782 9786 9787 + 9787 9783 9782 + 9783 9787 9788 + 9788 9789 9783 + 9783 9789 9784 + 9525 9524 9785 + 9785 9524 9790 + 9790 9791 9785 + 9786 9785 9791 + 9791 9792 9786 + 9787 9786 9792 + 9792 9793 9787 + 9788 9787 9793 + 9529 9790 9524 + 9794 9790 9529 + 9790 9794 9795 + 9795 9791 9790 + 9791 9795 9796 + 9796 9792 9791 + 9792 9796 9797 + 9797 9793 9792 + 9529 9533 9794 + 9798 9794 9533 + 9795 9794 9798 + 9798 9799 9795 + 9796 9795 9799 + 9799 9800 9796 + 9797 9796 9800 + 9533 9801 9798 + 9802 9798 9801 + 9798 9802 9803 + 9803 9799 9798 + 9799 9803 9804 + 9804 9800 9799 + 9805 9800 9804 + 9800 9805 9797 + 9537 9801 9533 + 9801 9537 9542 + 9542 9806 9801 + 9801 9806 9802 + 9802 9806 9807 + 9807 9808 9802 + 9803 9802 9808 + 9808 9809 9803 + 9803 9809 9810 + 9810 9804 9803 + 9806 9542 9811 + 9811 9807 9806 + 9812 9807 9811 + 9807 9812 9813 + 9813 9808 9807 + 9808 9813 9814 + 9814 9809 9808 + 9809 9814 9815 + 9815 9810 9809 + 9811 9542 9541 + 9541 9816 9811 + 9817 9811 9816 + 9811 9817 9812 + 9812 9817 9818 + 9818 9819 9812 + 9813 9812 9819 + 9819 9820 9813 + 9814 9813 9820 + 9546 9816 9541 + 9821 9816 9546 + 9816 9821 9817 + 9817 9821 9822 + 9822 9818 9817 + 9823 9818 9822 + 9818 9823 9824 + 9824 9819 9818 + 9819 9824 9825 + 9825 9820 9819 + 9546 9550 9821 + 9821 9550 9826 + 9826 9822 9821 + 9827 9822 9826 + 9822 9827 9823 + 9823 9827 9828 + 9828 9829 9823 + 9824 9823 9829 + 9829 9830 9824 + 9825 9824 9830 + 9554 9826 9550 + 9831 9826 9554 + 9826 9831 9827 + 9827 9831 9832 + 9832 9828 9827 + 9833 9828 9832 + 9828 9833 9834 + 9834 9829 9828 + 9829 9834 9835 + 9835 9830 9829 + 9554 9559 9831 + 9831 9559 9836 + 9836 9832 9831 + 9837 9832 9836 + 9832 9837 9833 + 9833 9837 9838 + 9838 9839 9833 + 9834 9833 9839 + 9839 9840 9834 + 9835 9834 9840 + 9841 9836 9559 + 9842 9836 9841 + 9836 9842 9837 + 9837 9842 9843 + 9843 9838 9837 + 9844 9838 9843 + 9838 9844 9845 + 9845 9839 9838 + 9559 9558 9841 + 9564 9841 9558 + 9846 9841 9564 + 9841 9846 9842 + 9842 9846 9847 + 9847 9843 9842 + 9848 9843 9847 + 9843 9848 9844 + 9844 9848 9849 + 9849 9850 9844 + 9845 9844 9850 + 9564 9851 9846 + 9846 9851 9852 + 9852 9847 9846 + 9853 9847 9852 + 9847 9853 9848 + 9848 9853 9854 + 9854 9849 9848 + 9851 9564 9563 + 9563 9573 9851 + 9851 9573 9855 + 9855 9852 9851 + 9856 9852 9855 + 9852 9856 9853 + 9853 9856 9857 + 9857 9854 9853 + 9403 9854 9857 + 9854 9403 9409 + 9409 9849 9854 + 9858 9855 9573 + 9859 9855 9858 + 9855 9859 9856 + 9856 9859 9860 + 9860 9857 9856 + 9404 9857 9860 + 9857 9404 9403 + 9573 9572 9858 + 9861 9858 9572 + 9862 9858 9861 + 9858 9862 9859 + 9859 9862 9863 + 9863 9860 9859 + 9864 9860 9863 + 9860 9864 9404 + 9404 9864 9395 + 9391 9395 9864 + 9572 9577 9861 + 9865 9861 9577 + 9866 9861 9865 + 9861 9866 9862 + 9862 9866 9867 + 9867 9863 9862 + 9868 9863 9867 + 9863 9868 9864 + 9864 9868 9391 + 9385 9391 9868 + 9577 9581 9865 + 9869 9865 9581 + 9870 9865 9869 + 9865 9870 9866 + 9866 9870 9871 + 9871 9867 9866 + 9872 9867 9871 + 9867 9872 9868 + 9868 9872 9385 + 9386 9385 9872 + 9581 9585 9869 + 9873 9869 9585 + 9874 9869 9873 + 9869 9874 9870 + 9870 9874 9875 + 9875 9871 9870 + 9876 9871 9875 + 9871 9876 9872 + 9872 9876 9386 + 9387 9386 9876 + 9585 9589 9873 + 9877 9873 9589 + 9878 9873 9877 + 9873 9878 9874 + 9874 9878 9879 + 9879 9875 9874 + 9880 9875 9879 + 9875 9880 9876 + 9876 9880 9387 + 9881 9387 9880 + 9379 9387 9881 + 9589 9593 9877 + 9882 9877 9593 + 9883 9877 9882 + 9877 9883 9878 + 9878 9883 9884 + 9884 9879 9878 + 9885 9879 9884 + 9879 9885 9880 + 9880 9885 9881 + 9593 9597 9882 + 9886 9882 9597 + 9887 9882 9886 + 9882 9887 9883 + 9883 9887 9888 + 9888 9884 9883 + 9889 9884 9888 + 9884 9889 9885 + 9885 9889 9890 + 9890 9881 9885 + 9597 9601 9886 + 9891 9886 9601 + 9892 9886 9891 + 9886 9892 9887 + 9887 9892 9893 + 9893 9888 9887 + 9894 9888 9893 + 9888 9894 9889 + 9889 9894 9895 + 9895 9890 9889 + 9601 9605 9891 + 9896 9891 9605 + 9897 9891 9896 + 9891 9897 9892 + 9892 9897 9898 + 9898 9893 9892 + 9899 9893 9898 + 9893 9899 9894 + 9894 9899 9900 + 9900 9895 9894 + 9605 9610 9896 + 9901 9896 9610 + 9902 9896 9901 + 9896 9902 9897 + 9897 9902 9903 + 9903 9898 9897 + 9904 9898 9903 + 9898 9904 9899 + 9899 9904 9905 + 9905 9900 9899 + 9610 9615 9901 + 9906 9901 9615 + 9907 9901 9906 + 9901 9907 9902 + 9902 9907 9908 + 9908 9903 9902 + 9909 9903 9908 + 9903 9909 9904 + 9904 9909 9910 + 9910 9905 9904 + 9615 9911 9906 + 9912 9906 9911 + 9913 9906 9912 + 9906 9913 9907 + 9907 9913 9914 + 9914 9908 9907 + 9915 9908 9914 + 9908 9915 9909 + 9614 9911 9615 + 9911 9614 9620 + 9620 9916 9911 + 9911 9916 9912 + 9917 9912 9916 + 9918 9912 9917 + 9912 9918 9913 + 9913 9918 9919 + 9919 9914 9913 + 9920 9914 9919 + 9914 9920 9915 + 9916 9620 9625 + 9625 9921 9916 + 9916 9921 9917 + 9922 9917 9921 + 9923 9917 9922 + 9917 9923 9918 + 9918 9923 9924 + 9924 9919 9918 + 9925 9919 9924 + 9919 9925 9920 + 9921 9625 9926 + 9926 9927 9921 + 9921 9927 9922 + 9928 9922 9927 + 9929 9922 9928 + 9922 9929 9923 + 9923 9929 9930 + 9930 9924 9923 + 9926 9625 9624 + 9624 9630 9926 + 9931 9926 9630 + 9927 9926 9931 + 9931 9932 9927 + 9927 9932 9928 + 9933 9928 9932 + 9934 9928 9933 + 9928 9934 9929 + 9929 9934 9935 + 9935 9930 9929 + 9630 9936 9931 + 9937 9931 9936 + 9932 9931 9937 + 9937 9938 9932 + 9932 9938 9933 + 9939 9933 9938 + 9940 9933 9939 + 9933 9940 9934 + 9629 9936 9630 + 9936 9629 9941 + 9941 9942 9936 + 9936 9942 9937 + 9943 9937 9942 + 9938 9937 9943 + 9943 9944 9938 + 9938 9944 9939 + 9941 9629 9635 + 9635 9945 9941 + 9946 9941 9945 + 9942 9941 9946 + 9946 9947 9942 + 9942 9947 9943 + 9943 9947 9948 + 9948 9949 9943 + 9944 9943 9949 + 9640 9945 9635 + 9945 9640 9950 + 9950 9951 9945 + 9945 9951 9946 + 9946 9951 9952 + 9952 9953 9946 + 9947 9946 9953 + 9953 9948 9947 + 9950 9640 9954 + 9954 9955 9950 + 9950 9955 9956 + 9956 9957 9950 + 9951 9950 9957 + 9957 9952 9951 + 9639 9954 9640 + 9645 9954 9639 + 9955 9954 9645 + 9645 9958 9955 + 9955 9958 9959 + 9959 9956 9955 + 9960 9956 9959 + 9956 9960 9961 + 9961 9957 9956 + 9952 9957 9961 + 9958 9645 9644 + 9644 9962 9958 + 9959 9958 9962 + 9962 9963 9959 + 9964 9959 9963 + 9959 9964 9960 + 9652 9962 9644 + 9962 9652 9965 + 9965 9963 9962 + 9963 9965 9966 + 9966 9967 9963 + 9963 9967 9964 + 9964 9967 9968 + 9968 9969 9964 + 9960 9964 9969 + 9970 9965 9652 + 9966 9965 9970 + 9970 9971 9966 + 9966 9971 9972 + 9972 9973 9966 + 9967 9966 9973 + 9973 9968 9967 + 9652 9657 9970 + 9974 9970 9657 + 9970 9974 9975 + 9975 9971 9970 + 9971 9975 9976 + 9976 9972 9971 + 9657 9656 9974 + 9977 9974 9656 + 9975 9974 9977 + 9977 9978 9975 + 9975 9978 9979 + 9979 9976 9975 + 9980 9976 9979 + 9972 9976 9980 + 9656 9662 9977 + 9981 9977 9662 + 9977 9981 9982 + 9982 9978 9977 + 9978 9982 9983 + 9983 9979 9978 + 9979 9983 9984 + 9984 9985 9979 + 9979 9985 9980 + 9662 9661 9981 + 9981 9661 9986 + 9986 9987 9981 + 9982 9981 9987 + 9987 9988 9982 + 9983 9982 9988 + 9989 9983 9988 + 9984 9983 9989 + 9661 9990 9986 + 9991 9986 9990 + 9992 9986 9991 + 9986 9992 9993 + 9993 9987 9986 + 9988 9987 9993 + 9666 9990 9661 + 9990 9666 9994 + 9994 9995 9990 + 9990 9995 9991 + 9991 9995 9996 + 9996 9997 9991 + 9992 9991 9997 + 9994 9666 9665 + 9665 9998 9994 + 9999 9994 9998 + 9995 9994 9999 + 9999 9996 9995 + 10000 9996 9999 + 9996 10000 10001 + 10001 9997 9996 + 9670 9998 9665 + 9998 9670 9675 + 9675 10002 9998 + 9998 10002 9999 + 10003 9999 10002 + 9999 10003 10000 + 10000 10003 10004 + 10004 10005 10000 + 10000 10005 10006 + 10006 10001 10000 + 10007 10002 9675 + 10002 10007 10003 + 10004 10003 10007 + 10008 10004 10007 + 10004 10008 10009 + 10010 10004 10009 + 10010 10005 10004 + 10005 10010 10011 + 10011 10006 10005 + 9675 10012 10007 + 10007 10012 10013 + 10013 10014 10007 + 10007 10014 10008 + 10012 9675 9674 + 9674 9680 10012 + 10012 9680 10015 + 10015 10013 10012 + 10016 10013 10015 + 10014 10013 10016 + 10014 10016 10017 + 10017 10018 10014 + 10014 10018 10008 + 10019 10015 9680 + 10015 10019 10020 + 10015 10020 10016 + 10016 10020 10021 + 10017 10016 10021 + 9680 9679 10019 + 10022 10019 9679 + 10020 10019 10022 + 10022 10021 10020 + 10022 10023 10021 + 10021 10023 10024 + 10024 10025 10021 + 10021 10025 10017 + 9679 9678 10022 + 9678 10026 10022 + 10026 10027 10022 + 10027 10028 10022 + 10023 10022 10028 + 10028 10029 10023 + 10024 10023 10029 + 9684 10026 9678 + 9684 9689 10026 + 10027 10026 9689 + 10030 10027 9689 + 9698 10030 9689 + 10031 10030 9698 + 9698 9702 10031 + 10032 10031 9702 + 10027 10031 10032 + 10027 10033 10031 + 10032 9702 9705 + 9705 10034 10032 + 10034 10035 10032 + 10029 10032 10035 + 10029 10028 10032 + 10032 10028 10027 + 10036 10034 9705 + 10036 10037 10034 + 10034 10037 10038 + 10038 10035 10034 + 10038 10039 10035 + 10035 10039 10029 + 10029 10039 10040 + 10040 10024 10029 + 9705 10041 10036 + 10036 10041 10042 + 10042 10043 10036 + 10037 10036 10043 + 10043 10044 10037 + 10044 10045 10037 + 10045 10038 10037 + 10046 10041 9705 + 10041 10046 10047 + 10047 10042 10041 + 10048 10042 10047 + 10042 10048 10049 + 10049 10043 10042 + 10043 10049 10050 + 10050 10044 10043 + 10046 9705 10051 + 10051 10052 10046 + 10046 10052 10053 + 10053 10047 10046 + 10054 10047 10053 + 10048 10047 10054 + 9704 10051 9705 + 10055 10051 9704 + 10055 10052 10051 + 10052 10055 10056 + 10056 10053 10052 + 10057 10053 10056 + 10053 10057 10054 + 10058 10054 10057 + 10048 10054 10058 + 9704 10059 10055 + 10056 10055 10059 + 10060 10056 10059 + 10061 10056 10060 + 10056 10061 10057 + 10057 10061 10062 + 10062 10063 10057 + 10057 10063 10058 + 9703 10059 9704 + 10059 9703 9323 + 9323 9322 10059 + 10059 9322 10060 + 9322 10064 10060 + 10065 10060 10064 + 10066 10060 10065 + 10060 10066 10061 + 10062 10061 10066 + 10066 10067 10062 + 10068 10062 10067 + 10068 10063 10062 + 9321 10064 9322 + 9328 10064 9321 + 10064 9328 10065 + 9332 10065 9328 + 10069 10065 9332 + 10065 10069 10066 + 10066 10069 10070 + 10070 10067 10066 + 10071 10067 10070 + 10067 10071 10068 + 10068 10071 10072 + 10073 10068 10072 + 10063 10068 10073 + 10073 10058 10063 + 9332 9337 10069 + 10070 10069 9337 + 9337 10074 10070 + 10071 10070 10074 + 10074 10075 10071 + 10071 10075 10072 + 9342 10074 9337 + 10074 9342 10076 + 10076 10075 10074 + 10075 10076 10077 + 10077 10072 10075 + 10076 9342 10078 + 10078 10079 10076 + 10076 10079 10080 + 10080 10077 10076 + 10081 10077 10080 + 10072 10077 10081 + 9341 10078 9342 + 9358 10078 9341 + 10079 10078 9358 + 10079 9358 10082 + 10082 10080 10079 + 10080 10082 10083 + 10083 10084 10080 + 10080 10084 10081 + 10085 10081 10084 + 10086 10081 10085 + 10081 10086 10072 + 9357 10082 9358 + 10083 10082 9357 + 9357 9362 10083 + 10087 10083 9362 + 10084 10083 10087 + 10087 10088 10084 + 10084 10088 10085 + 10089 10085 10088 + 10085 10089 10090 + 10085 10090 10086 + 9362 9366 10087 + 10091 10087 9366 + 10088 10087 10091 + 10091 10092 10088 + 10088 10092 10089 + 10093 10089 10092 + 10090 10089 10093 + 10093 10094 10090 + 10086 10090 10094 + 10094 10095 10086 + 10072 10086 10095 + 9366 10096 10091 + 10097 10091 10096 + 10092 10091 10097 + 10097 10098 10092 + 10092 10098 10099 + 10099 10100 10092 + 10100 10093 10092 + 9365 10096 9366 + 10096 9365 9371 + 9371 10101 10096 + 10096 10101 10097 + 10102 10097 10101 + 10097 10102 10103 + 10103 10098 10097 + 10098 10103 10104 + 10104 10099 10098 + 10105 10101 9371 + 10101 10105 10102 + 10102 10105 10106 + 10106 10107 10102 + 10103 10102 10107 + 10107 10108 10103 + 10104 10103 10108 + 9371 10109 10105 + 10105 10109 10110 + 10110 10106 10105 + 9900 10106 10110 + 10106 9900 9905 + 9905 10107 10106 + 10107 9905 9910 + 9910 10108 10107 + 10109 9371 9370 + 9370 10111 10109 + 10110 10109 10111 + 10111 10112 10110 + 9895 10110 10112 + 10110 9895 9900 + 9370 9375 10111 + 10111 9375 10113 + 10113 10112 10111 + 9890 10112 10113 + 10112 9890 9895 + 9379 10113 9375 + 9881 10113 9379 + 10113 9881 9890 + 10039 10038 10040 + 10038 10045 10040 + 10114 10040 10045 + 10040 10114 10115 + 10115 10116 10040 + 10040 10116 10024 + 10117 10024 10116 + 10024 10117 10025 + 10045 10118 10114 + 10114 10118 10119 + 10119 10120 10114 + 10121 10114 10120 + 10121 10115 10114 + 10118 10045 10044 + 10044 10050 10118 + 10119 10118 10050 + 10050 10122 10119 + 10123 10119 10122 + 10120 10119 10123 + 10123 10124 10120 + 10120 10124 10125 + 10125 10121 10120 + 10126 10122 10050 + 10122 10126 10127 + 10127 10128 10122 + 10122 10128 10123 + 10050 10049 10126 + 10126 10049 10048 + 10048 10129 10126 + 10127 10126 10129 + 10129 10130 10127 + 10131 10127 10130 + 10128 10127 10131 + 10131 10132 10128 + 10128 10132 10133 + 10123 10128 10133 + 10058 10129 10048 + 10129 10058 10073 + 10073 10130 10129 + 10130 10073 10134 + 10134 10135 10130 + 10130 10135 10131 + 10136 10131 10135 + 10131 10136 10137 + 10137 10132 10131 + 10132 10137 10138 + 10138 10133 10132 + 10072 10134 10073 + 10095 10134 10072 + 10135 10134 10095 + 10095 10139 10135 + 10135 10139 10136 + 10136 10139 10140 + 10140 10141 10136 + 10137 10136 10141 + 10141 10142 10137 + 10138 10137 10142 + 10139 10095 10094 + 10094 10140 10139 + 10094 10093 10140 + 10140 10093 10100 + 10100 10141 10140 + 10142 10141 10100 + 10100 10143 10142 + 10142 10143 10144 + 10144 10145 10142 + 10142 10145 10138 + 10146 10138 10145 + 10133 10138 10146 + 10143 10100 10099 + 10099 10147 10143 + 10144 10143 10147 + 10148 10144 10147 + 10149 10144 10148 + 10145 10144 10149 + 10145 10149 10146 + 10146 10149 10150 + 10150 10151 10146 + 10133 10146 10151 + 10152 10147 10099 + 10147 10152 10153 + 10153 10154 10147 + 10147 10154 10148 + 10099 10104 10152 + 10152 10104 10155 + 10155 10156 10152 + 10153 10152 10156 + 10156 10157 10153 + 10158 10153 10157 + 10154 10153 10158 + 10108 10155 10104 + 10159 10155 10108 + 10155 10159 10160 + 10160 10156 10155 + 10156 10160 10161 + 10161 10157 10156 + 10157 10161 10162 + 10162 10163 10157 + 10157 10163 10158 + 10108 9910 10159 + 10159 9910 9909 + 9909 9915 10159 + 10160 10159 9915 + 9915 9920 10160 + 10161 10160 9920 + 9920 9925 10161 + 10162 10161 9925 + 9925 10164 10162 + 10165 10162 10164 + 10163 10162 10165 + 10165 10166 10163 + 10163 10166 10167 + 10167 10158 10163 + 10168 10158 10167 + 10158 10168 10154 + 9924 10164 9925 + 10164 9924 9930 + 9930 10169 10164 + 10164 10169 10165 + 10170 10165 10169 + 10166 10165 10170 + 10170 10171 10166 + 10166 10171 10172 + 10172 10167 10166 + 10173 10167 10172 + 10167 10173 10168 + 10169 9930 9935 + 9935 10174 10169 + 10169 10174 10170 + 10175 10170 10174 + 10171 10170 10175 + 10175 10176 10171 + 10171 10176 10177 + 10177 10172 10171 + 10178 10172 10177 + 10172 10178 10173 + 10174 9935 10179 + 10179 10180 10174 + 10174 10180 10175 + 10181 10175 10180 + 10176 10175 10181 + 10181 10182 10176 + 10176 10182 10183 + 10183 10177 10176 + 10179 9935 9934 + 9934 9940 10179 + 10184 10179 9940 + 10180 10179 10184 + 10184 10185 10180 + 10180 10185 10181 + 10181 10185 10186 + 10186 10187 10181 + 10182 10181 10187 + 10187 10188 10182 + 10183 10182 10188 + 9940 10189 10184 + 10184 10189 10190 + 10190 10191 10184 + 10185 10184 10191 + 10191 10186 10185 + 9939 10189 9940 + 10189 9939 10192 + 10192 10190 10189 + 10190 10192 10193 + 10193 10194 10190 + 10190 10194 10195 + 10195 10191 10190 + 10186 10191 10195 + 10196 10192 9939 + 10193 10192 10196 + 10196 10197 10193 + 10193 10197 10198 + 10198 10199 10193 + 10194 10193 10199 + 10199 10200 10194 + 10195 10194 10200 + 9939 9944 10196 + 9949 10196 9944 + 10196 9949 10201 + 10201 10197 10196 + 10197 10201 10202 + 10202 10198 10197 + 10198 10202 10203 + 10203 10204 10198 + 10198 10204 10205 + 10205 10199 10198 + 10200 10199 10205 + 10201 9949 9948 + 9948 10206 10201 + 10201 10206 10207 + 10207 10202 10201 + 10203 10202 10207 + 10207 10208 10203 + 10203 10208 10209 + 10209 10210 10203 + 10204 10203 10210 + 10211 10206 9948 + 10206 10211 10212 + 10212 10207 10206 + 10207 10212 10213 + 10213 10208 10207 + 10208 10213 10214 + 10214 10209 10208 + 9948 9953 10211 + 10211 9953 9952 + 9952 10215 10211 + 10211 10215 10216 + 10216 10212 10211 + 10213 10212 10216 + 10216 10217 10213 + 10213 10217 10218 + 10218 10214 10213 + 10219 10214 10218 + 10209 10214 10219 + 9961 10215 9952 + 10215 9961 10220 + 10220 10216 10215 + 10216 10220 10221 + 10221 10217 10216 + 10217 10221 10222 + 10222 10218 10217 + 10218 10222 10223 + 10223 10224 10218 + 10218 10224 10219 + 10220 9961 9960 + 9960 10225 10220 + 10221 10220 10225 + 10225 10226 10221 + 10222 10221 10226 + 10226 10227 10222 + 10223 10222 10227 + 10227 10228 10223 + 10229 10223 10228 + 10224 10223 10229 + 9969 10225 9960 + 10226 10225 9969 + 9969 10230 10226 + 10226 10230 10231 + 10231 10227 10226 + 10228 10227 10231 + 10231 10232 10228 + 10228 10232 10233 + 10233 10234 10228 + 10228 10234 10229 + 10230 9969 9968 + 9968 10235 10230 + 10230 10235 10236 + 10236 10231 10230 + 10232 10231 10236 + 10236 10237 10232 + 10232 10237 10238 + 10238 10233 10232 + 10239 10235 9968 + 10235 10239 10240 + 10240 10236 10235 + 10236 10240 10241 + 10241 10237 10236 + 10237 10241 10242 + 10242 10238 10237 + 9968 9973 10239 + 10239 9973 9972 + 9972 10243 10239 + 10239 10243 10244 + 10244 10240 10239 + 10241 10240 10244 + 10244 10245 10241 + 10241 10245 10246 + 10246 10242 10241 + 10247 10242 10246 + 10238 10242 10247 + 9980 10243 9972 + 10243 9980 10248 + 10248 10244 10243 + 10244 10248 10249 + 10249 10245 10244 + 10245 10249 10250 + 10250 10246 10245 + 10246 10250 10251 + 10251 10252 10246 + 10246 10252 10247 + 10253 10248 9980 + 10249 10248 10253 + 10253 10254 10249 + 10249 10254 10255 + 10255 10250 10249 + 10251 10250 10255 + 9980 9985 10253 + 10256 10253 9985 + 10253 10256 10257 + 10257 10254 10253 + 10254 10257 10258 + 10258 10255 10254 + 10255 10258 10259 + 10259 10260 10255 + 10255 10260 10251 + 9985 9984 10256 + 10256 9984 10261 + 10262 10256 10261 + 10257 10256 10262 + 10262 10263 10257 + 10258 10257 10263 + 10263 10264 10258 + 10264 10265 10258 + 10259 10258 10265 + 9989 10261 9984 + 10261 9989 10266 + 10266 10267 10261 + 10261 10267 10268 + 10268 10269 10261 + 10261 10269 10262 + 10270 10262 10269 + 10263 10262 10270 + 10266 9989 10271 + 10271 10272 10266 + 10273 10266 10272 + 10267 10266 10273 + 10273 10274 10267 + 10267 10274 10275 + 10275 10268 10267 + 10276 10271 9989 + 10277 10271 10276 + 10272 10271 10277 + 10278 10272 10277 + 10272 10278 10273 + 10279 10273 10278 + 10273 10279 10280 + 10280 10274 10273 + 10281 10276 9989 + 10282 10276 10281 + 10283 10276 10282 + 10276 10283 10277 + 10284 10277 10283 + 10284 10278 10277 + 10285 10278 10284 + 10278 10285 10279 + 9988 10281 9989 + 10286 10281 9988 + 10287 10281 10286 + 10281 10287 10282 + 10288 10282 10287 + 10283 10282 10288 + 10288 10289 10283 + 10283 10289 10284 + 10290 10284 10289 + 10284 10290 10285 + 9988 10291 10286 + 10292 10286 10291 + 10287 10286 10292 + 10292 10293 10287 + 10287 10293 10288 + 10294 10288 10293 + 10288 10294 10295 + 10295 10289 10288 + 10289 10295 10290 + 9993 10291 9988 + 10291 9993 10296 + 10296 10297 10291 + 10291 10297 10292 + 10297 10298 10292 + 10299 10292 10298 + 10292 10299 10300 + 10300 10293 10292 + 10293 10300 10294 + 10296 9993 9992 + 9992 10301 10296 + 10302 10296 10301 + 10302 10297 10296 + 10297 10302 10298 + 10302 10303 10298 + 10303 10304 10298 + 10298 10304 10299 + 10305 10299 10304 + 10300 10299 10305 + 9997 10301 9992 + 10306 10301 9997 + 10301 10306 10302 + 10303 10302 10306 + 10307 10303 10306 + 10304 10303 10307 + 10307 10308 10304 + 10304 10308 10305 + 9997 10001 10306 + 10306 10001 10006 + 10006 10309 10306 + 10306 10309 10310 + 10310 10307 10306 + 10307 10310 10311 + 10312 10307 10311 + 10312 10313 10307 + 10011 10309 10006 + 10309 10011 10314 + 10314 10315 10309 + 10309 10315 10310 + 10316 10310 10315 + 10311 10310 10316 + 10314 10011 10009 + 10009 10317 10314 + 10317 10318 10314 + 10318 10319 10314 + 10319 10320 10314 + 10320 10321 10314 + 10321 10322 10314 + 10314 10322 10315 + 10011 10010 10009 + 10315 10322 10316 + 10323 10316 10322 + 10311 10316 10323 + 10324 10323 10322 + 10325 10323 10324 + 10326 10323 10325 + 10323 10326 10311 + 10322 10321 10324 + 10321 10327 10324 + 10328 10324 10327 + 10324 10328 10329 + 10329 10330 10324 + 10324 10330 10325 + 10331 10325 10330 + 10326 10325 10331 + 10321 10332 10327 + 10332 10333 10327 + 10334 10327 10333 + 10327 10334 10328 + 10328 10334 10335 + 10335 10336 10328 + 10329 10328 10336 + 10320 10332 10321 + 10332 10320 10319 + 10319 10337 10332 + 10332 10337 10338 + 10333 10332 10338 + 10339 10333 10338 + 10333 10339 10334 + 10334 10339 10340 + 10340 10335 10334 + 10319 10341 10337 + 10337 10341 10342 + 10337 10342 10338 + 10343 10338 10342 + 10344 10338 10343 + 10338 10344 10339 + 10339 10344 10345 + 10345 10340 10339 + 10346 10341 10319 + 10347 10341 10346 + 10341 10347 10342 + 10342 10347 10348 + 10342 10348 10343 + 10343 10348 10349 + 10350 10343 10349 + 10344 10343 10350 + 10350 10345 10344 + 10318 10346 10319 + 10318 10351 10346 + 10346 10351 10352 + 10352 10353 10346 + 10346 10353 10347 + 10348 10347 10353 + 10353 10349 10348 + 10351 10318 10317 + 10317 10354 10351 + 10351 10354 10355 + 10352 10351 10355 + 10355 10356 10352 + 10356 10357 10352 + 10352 10357 10349 + 10349 10353 10352 + 10317 10358 10354 + 10354 10358 10359 + 10359 10355 10354 + 10355 10359 10360 + 10356 10355 10360 + 10358 10317 10009 + 10009 10361 10358 + 10358 10361 10362 + 10363 10358 10362 + 10363 10359 10358 + 10360 10359 10363 + 10009 10008 10361 + 10361 10008 10362 + 10008 10018 10362 + 10362 10018 10017 + 10364 10362 10017 + 10362 10364 10363 + 10364 10365 10363 + 10365 10366 10363 + 10367 10363 10366 + 10363 10367 10360 + 10368 10364 10017 + 10365 10364 10368 + 10365 10368 10369 + 10366 10365 10369 + 10370 10366 10369 + 10371 10366 10370 + 10366 10371 10367 + 10367 10371 10372 + 10372 10360 10367 + 10373 10368 10017 + 10368 10373 10369 + 10374 10369 10373 + 10369 10374 10370 + 10374 10375 10370 + 10376 10370 10375 + 10370 10376 10371 + 10377 10373 10017 + 10374 10373 10377 + 10377 10378 10374 + 10374 10378 10379 + 10379 10375 10374 + 10375 10379 10380 + 10381 10375 10380 + 10375 10381 10376 + 10025 10377 10017 + 10377 10025 10117 + 10382 10377 10117 + 10382 10378 10377 + 10378 10382 10383 + 10383 10379 10378 + 10380 10379 10383 + 10384 10380 10383 + 10380 10384 10385 + 10385 10386 10380 + 10386 10381 10380 + 10382 10117 10387 + 10387 10388 10382 + 10388 10383 10382 + 10388 10384 10383 + 10384 10388 10389 + 10384 10389 10390 + 10390 10391 10384 + 10384 10391 10385 + 10116 10387 10117 + 10387 10116 10115 + 10392 10387 10115 + 10388 10387 10392 + 10389 10388 10392 + 10390 10389 10392 + 10392 10393 10390 + 10394 10390 10393 + 10391 10390 10394 + 10394 10395 10391 + 10391 10395 10396 + 10396 10385 10391 + 10392 10115 10121 + 10121 10393 10392 + 10125 10393 10121 + 10393 10125 10394 + 10394 10125 10124 + 10124 10397 10394 + 10397 10398 10394 + 10395 10394 10398 + 10398 10399 10395 + 10396 10395 10399 + 10399 10400 10396 + 10401 10396 10400 + 10401 10385 10396 + 10402 10397 10124 + 10403 10397 10402 + 10397 10403 10404 + 10404 10398 10397 + 10398 10404 10405 + 10405 10399 10398 + 10399 10405 10406 + 10406 10400 10399 + 10124 10123 10402 + 10407 10402 10123 + 10408 10402 10407 + 10402 10408 10403 + 10403 10408 10409 + 10409 10410 10403 + 10404 10403 10410 + 10410 10411 10404 + 10405 10404 10411 + 10133 10407 10123 + 10151 10407 10133 + 10407 10151 10412 + 10407 10412 10408 + 10408 10412 10413 + 10413 10409 10408 + 10414 10409 10413 + 10409 10414 10410 + 10410 10414 10415 + 10415 10411 10410 + 10416 10411 10415 + 10411 10416 10405 + 10406 10405 10416 + 10412 10151 10150 + 10150 10413 10412 + 10413 10150 10148 + 10413 10148 10414 + 10415 10414 10148 + 10154 10415 10148 + 10417 10415 10154 + 10415 10417 10416 + 10416 10417 10418 + 10418 10419 10416 + 10416 10419 10406 + 10148 10150 10149 + 10154 10168 10417 + 10417 10168 10173 + 10173 10420 10417 + 10420 10418 10417 + 10421 10418 10420 + 10419 10418 10421 + 10419 10421 10422 + 10422 10406 10419 + 10400 10406 10422 + 10423 10420 10173 + 10420 10423 10424 + 10424 10425 10420 + 10420 10425 10421 + 10421 10425 10426 + 10426 10422 10421 + 10427 10422 10426 + 10422 10427 10400 + 10400 10427 10401 + 10173 10178 10423 + 10423 10178 10428 + 10428 10429 10423 + 10424 10423 10429 + 10429 10430 10424 + 10424 10430 10431 + 10431 10432 10424 + 10425 10424 10432 + 10432 10426 10425 + 10177 10428 10178 + 10428 10177 10183 + 10183 10433 10428 + 10428 10433 10434 + 10434 10429 10428 + 10429 10434 10435 + 10435 10430 10429 + 10430 10435 10436 + 10436 10431 10430 + 10433 10183 10437 + 10437 10438 10433 + 10433 10438 10439 + 10434 10433 10439 + 10439 10440 10434 + 10435 10434 10440 + 10440 10441 10435 + 10436 10435 10441 + 10188 10437 10183 + 10442 10437 10188 + 10438 10437 10442 + 10442 10443 10438 + 10438 10443 10444 + 10444 10439 10438 + 10188 10445 10442 + 10442 10445 10446 + 10446 10447 10442 + 10443 10442 10447 + 10448 10445 10188 + 10445 10448 10449 + 10449 10446 10445 + 10446 10449 10450 + 10450 10451 10446 + 10446 10451 10452 + 10452 10447 10446 + 10188 10187 10448 + 10448 10187 10186 + 10186 10453 10448 + 10448 10453 10454 + 10454 10449 10448 + 10450 10449 10454 + 10454 10455 10450 + 10450 10455 10456 + 10456 10457 10450 + 10451 10450 10457 + 10195 10453 10186 + 10453 10195 10458 + 10458 10454 10453 + 10454 10458 10459 + 10459 10455 10454 + 10455 10459 10460 + 10460 10456 10455 + 10200 10458 10195 + 10459 10458 10200 + 10200 10461 10459 + 10459 10461 10462 + 10462 10460 10459 + 10463 10460 10462 + 10456 10460 10463 + 10463 10464 10456 + 10456 10464 10465 + 10465 10457 10456 + 10205 10461 10200 + 10461 10205 10466 + 10466 10462 10461 + 10462 10466 10467 + 10467 10468 10462 + 10462 10468 10463 + 10463 10468 10469 + 10469 10470 10463 + 10464 10463 10470 + 10471 10466 10205 + 10467 10466 10471 + 10471 10472 10467 + 10467 10472 10473 + 10473 10474 10467 + 10468 10467 10474 + 10474 10469 10468 + 10205 10204 10471 + 10210 10471 10204 + 10471 10210 10475 + 10475 10472 10471 + 10472 10475 10476 + 10476 10473 10472 + 10473 10476 10477 + 10477 10478 10473 + 10473 10478 10479 + 10479 10474 10473 + 10469 10474 10479 + 10475 10210 10209 + 10209 10480 10475 + 10475 10480 10481 + 10481 10476 10475 + 10477 10476 10481 + 10481 10482 10477 + 10477 10482 10483 + 10483 10484 10477 + 10478 10477 10484 + 10219 10480 10209 + 10480 10219 10485 + 10485 10481 10480 + 10481 10485 10486 + 10486 10482 10481 + 10482 10486 10487 + 10487 10483 10482 + 10488 10485 10219 + 10486 10485 10488 + 10488 10489 10486 + 10486 10489 10490 + 10490 10487 10486 + 10491 10487 10490 + 10483 10487 10491 + 10219 10224 10488 + 10229 10488 10224 + 10488 10229 10492 + 10492 10489 10488 + 10489 10492 10493 + 10493 10490 10489 + 10490 10493 10494 + 10494 10495 10490 + 10490 10495 10491 + 10492 10229 10234 + 10234 10496 10492 + 10493 10492 10496 + 10496 10497 10493 + 10494 10493 10497 + 10497 10498 10494 + 10499 10494 10498 + 10495 10494 10499 + 10499 10500 10495 + 10491 10495 10500 + 10496 10234 10233 + 10233 10501 10496 + 10496 10501 10502 + 10502 10497 10496 + 10498 10497 10502 + 10502 10503 10498 + 10498 10503 10504 + 10504 10505 10498 + 10498 10505 10499 + 10501 10233 10238 + 10238 10506 10501 + 10501 10506 10507 + 10507 10502 10501 + 10503 10502 10507 + 10507 10508 10503 + 10503 10508 10509 + 10509 10504 10503 + 10247 10506 10238 + 10506 10247 10510 + 10510 10507 10506 + 10507 10510 10511 + 10511 10508 10507 + 10508 10511 10512 + 10512 10509 10508 + 10513 10510 10247 + 10511 10510 10513 + 10513 10514 10511 + 10511 10514 10515 + 10515 10512 10511 + 10516 10512 10515 + 10509 10512 10516 + 10247 10252 10513 + 10517 10513 10252 + 10513 10517 10518 + 10518 10514 10513 + 10514 10518 10519 + 10519 10515 10514 + 10515 10519 10520 + 10520 10521 10515 + 10515 10521 10516 + 10252 10251 10517 + 10522 10517 10251 + 10518 10517 10522 + 10522 10523 10518 + 10518 10523 10524 + 10524 10519 10518 + 10520 10519 10524 + 10251 10260 10522 + 10525 10522 10260 + 10522 10525 10526 + 10526 10523 10522 + 10523 10526 10527 + 10527 10524 10523 + 10524 10527 10528 + 10528 10529 10524 + 10524 10529 10520 + 10260 10259 10525 + 10525 10259 10530 + 10531 10525 10530 + 10526 10525 10531 + 10531 10532 10526 + 10527 10526 10532 + 10532 10533 10527 + 10533 10534 10527 + 10528 10527 10534 + 10265 10530 10259 + 10530 10265 10535 + 10535 10536 10530 + 10530 10536 10537 + 10537 10538 10530 + 10530 10538 10531 + 10539 10531 10538 + 10532 10531 10539 + 10535 10265 10264 + 10264 10540 10535 + 10541 10535 10540 + 10536 10535 10541 + 10541 10542 10536 + 10536 10542 10543 + 10543 10537 10536 + 10543 10544 10537 + 10544 10545 10537 + 10540 10264 10546 + 10540 10546 10547 + 10547 10548 10540 + 10540 10548 10541 + 10549 10541 10548 + 10541 10549 10550 + 10550 10542 10541 + 10546 10264 10263 + 10263 10551 10546 + 10547 10546 10551 + 10552 10547 10551 + 10553 10547 10552 + 10547 10553 10548 + 10548 10553 10549 + 10270 10551 10263 + 10551 10270 10554 + 10554 10555 10551 + 10551 10555 10552 + 10556 10552 10555 + 10552 10556 10557 + 10552 10557 10553 + 10549 10553 10557 + 10554 10270 10558 + 10558 10559 10554 + 10560 10554 10559 + 10554 10560 10561 + 10561 10555 10554 + 10555 10561 10556 + 10269 10558 10270 + 10558 10269 10268 + 10558 10268 10275 + 10275 10559 10558 + 10562 10559 10275 + 10559 10562 10560 + 10563 10560 10562 + 10561 10560 10563 + 10563 10564 10561 + 10561 10564 10556 + 10564 10565 10556 + 10565 10566 10556 + 10566 10557 10556 + 10557 10566 10549 + 10275 10567 10562 + 10562 10567 10568 + 10568 10569 10562 + 10562 10569 10570 + 10570 10571 10562 + 10571 10563 10562 + 10567 10275 10274 + 10274 10280 10567 + 10568 10567 10280 + 10280 10572 10568 + 10573 10568 10572 + 10573 10569 10568 + 10569 10573 10574 + 10574 10570 10569 + 10574 10575 10570 + 10570 10575 10576 + 10576 10571 10570 + 10577 10572 10280 + 10578 10572 10577 + 10572 10578 10573 + 10573 10578 10579 + 10574 10573 10579 + 10580 10574 10579 + 10575 10574 10580 + 10280 10279 10577 + 10577 10279 10285 + 10285 10581 10577 + 10577 10581 10582 + 10578 10577 10582 + 10578 10582 10579 + 10583 10581 10285 + 10285 10290 10583 + 10583 10290 10295 + 10584 10583 10295 + 10582 10583 10584 + 10582 10585 10583 + 10295 10586 10584 + 10586 10587 10584 + 10588 10584 10587 + 10579 10584 10588 + 10584 10579 10582 + 10589 10586 10295 + 10590 10586 10589 + 10586 10590 10591 + 10591 10587 10586 + 10591 10592 10587 + 10587 10592 10588 + 10593 10588 10592 + 10579 10588 10593 + 10295 10294 10589 + 10589 10294 10300 + 10300 10594 10589 + 10590 10589 10594 + 10594 10595 10590 + 10590 10595 10311 + 10591 10590 10311 + 10596 10591 10311 + 10592 10591 10596 + 10305 10594 10300 + 10595 10594 10305 + 10595 10305 10312 + 10595 10312 10311 + 10305 10308 10312 + 10311 10326 10596 + 10326 10597 10596 + 10597 10598 10596 + 10599 10596 10598 + 10596 10599 10600 + 10596 10600 10592 + 10592 10600 10601 + 10601 10593 10592 + 10331 10597 10326 + 10597 10331 10602 + 10597 10602 10603 + 10603 10598 10597 + 10598 10603 10604 + 10598 10604 10599 + 10605 10599 10604 + 10600 10599 10605 + 10605 10606 10600 + 10600 10606 10601 + 10602 10331 10607 + 10607 10608 10602 + 10603 10602 10608 + 10609 10603 10608 + 10604 10603 10609 + 10609 10610 10604 + 10604 10610 10605 + 10607 10331 10330 + 10611 10607 10330 + 10608 10607 10611 + 10612 10608 10611 + 10608 10612 10613 + 10613 10609 10608 + 10609 10613 10614 + 10614 10610 10609 + 10610 10614 10615 + 10615 10605 10610 + 10330 10329 10611 + 10611 10329 10616 + 10616 10617 10611 + 10612 10611 10617 + 10617 10618 10612 + 10613 10612 10618 + 10618 10619 10613 + 10614 10613 10619 + 10619 10620 10614 + 10615 10614 10620 + 10336 10616 10329 + 10616 10336 10621 + 10621 10622 10616 + 10616 10622 10623 + 10623 10617 10616 + 10618 10617 10623 + 10623 10624 10618 + 10618 10624 10625 + 10625 10619 10618 + 10620 10619 10625 + 10621 10336 10335 + 10335 10626 10621 + 10621 10626 10627 + 10628 10621 10627 + 10622 10621 10628 + 10628 10629 10622 + 10622 10629 10630 + 10623 10622 10630 + 10335 10340 10626 + 10626 10340 10345 + 10345 10627 10626 + 10631 10627 10345 + 10627 10631 10632 + 10632 10633 10627 + 10627 10633 10628 + 10634 10628 10633 + 10628 10634 10635 + 10635 10629 10628 + 10345 10350 10631 + 10631 10350 10636 + 10636 10637 10631 + 10632 10631 10637 + 10637 10638 10632 + 10639 10632 10638 + 10632 10639 10640 + 10640 10633 10632 + 10633 10640 10634 + 10636 10350 10349 + 10349 10641 10636 + 10642 10636 10641 + 10637 10636 10642 + 10637 10642 10643 + 10643 10638 10637 + 10644 10638 10643 + 10638 10644 10639 + 10645 10639 10644 + 10640 10639 10645 + 10646 10641 10349 + 10641 10646 10647 + 10641 10647 10642 + 10642 10647 10648 + 10648 10643 10642 + 10649 10643 10648 + 10643 10649 10644 + 10349 10357 10646 + 10646 10357 10356 + 10646 10356 10650 + 10647 10646 10650 + 10650 10651 10647 + 10647 10651 10648 + 10652 10648 10651 + 10436 10648 10652 + 10648 10436 10649 + 10441 10649 10436 + 10644 10649 10441 + 10653 10650 10356 + 10650 10653 10654 + 10654 10651 10650 + 10651 10654 10652 + 10652 10654 10655 + 10655 10656 10652 + 10431 10652 10656 + 10652 10431 10436 + 10356 10360 10653 + 10372 10653 10360 + 10654 10653 10372 + 10372 10655 10654 + 10657 10655 10372 + 10655 10657 10658 + 10658 10656 10655 + 10432 10656 10658 + 10656 10432 10431 + 10372 10659 10657 + 10657 10659 10660 + 10657 10660 10401 + 10658 10657 10401 + 10401 10427 10658 + 10426 10658 10427 + 10658 10426 10432 + 10371 10659 10372 + 10661 10659 10371 + 10659 10661 10660 + 10660 10661 10386 + 10660 10386 10385 + 10385 10401 10660 + 10371 10376 10661 + 10376 10381 10661 + 10381 10386 10661 + 10662 10538 10537 + 10538 10662 10539 + 10663 10539 10662 + 10664 10539 10663 + 10539 10664 10532 + 10532 10664 10665 + 10665 10533 10532 + 10662 10666 10663 + 10666 10667 10663 + 10668 10663 10667 + 10663 10668 10669 + 10663 10669 10664 + 10664 10669 10670 + 10670 10665 10664 + 10671 10666 10662 + 10672 10666 10671 + 10666 10672 10673 + 10673 10667 10666 + 10673 10674 10667 + 10667 10674 10668 + 10662 10545 10671 + 10545 10544 10671 + 10671 10544 10675 + 10676 10671 10675 + 10671 10676 10672 + 10672 10676 10677 + 10677 10678 10672 + 10673 10672 10678 + 10678 10679 10673 + 10674 10673 10679 + 10675 10544 10543 + 10675 10543 10542 + 10542 10550 10675 + 10676 10675 10550 + 10677 10676 10550 + 10680 10677 10550 + 10681 10677 10680 + 10681 10678 10677 + 10679 10678 10681 + 10682 10679 10681 + 10682 10683 10679 + 10679 10683 10674 + 10674 10683 10668 + 10684 10680 10550 + 10685 10680 10684 + 10686 10680 10685 + 10680 10686 10681 + 10682 10681 10686 + 10687 10682 10686 + 10683 10682 10687 + 10687 10688 10683 + 10683 10688 10668 + 10550 10689 10684 + 10690 10684 10689 + 10690 10691 10684 + 10684 10691 10685 + 10685 10691 10692 + 10692 10693 10685 + 10686 10685 10693 + 10694 10689 10550 + 10695 10689 10694 + 10689 10695 10690 + 10690 10695 10696 + 10697 10690 10696 + 10691 10690 10697 + 10697 10698 10691 + 10691 10698 10692 + 10550 10549 10694 + 10566 10694 10549 + 10695 10694 10566 + 10566 10699 10695 + 10695 10699 10696 + 10699 10566 10565 + 10699 10565 10700 + 10699 10700 10696 + 10565 10564 10700 + 10700 10564 10563 + 10700 10563 10571 + 10571 10696 10700 + 10696 10571 10576 + 10696 10576 10701 + 10701 10702 10696 + 10696 10702 10703 + 10703 10697 10696 + 10704 10697 10703 + 10697 10704 10698 + 10705 10701 10576 + 10706 10701 10705 + 10702 10701 10706 + 10702 10706 10707 + 10707 10708 10702 + 10702 10708 10703 + 10576 10575 10705 + 10575 10709 10705 + 10710 10705 10709 + 10705 10710 10711 + 10711 10712 10705 + 10705 10712 10706 + 10707 10706 10712 + 10580 10709 10575 + 10580 10713 10709 + 10709 10713 10710 + 10710 10713 10714 + 10714 10715 10710 + 10715 10716 10710 + 10711 10710 10716 + 10713 10580 10717 + 10717 10714 10713 + 10717 10718 10714 + 10714 10718 10719 + 10719 10715 10714 + 10720 10715 10719 + 10715 10720 10721 + 10721 10716 10715 + 10717 10580 10579 + 10579 10722 10717 + 10722 10723 10717 + 10718 10717 10723 + 10723 10724 10718 + 10719 10718 10724 + 10724 10725 10719 + 10726 10719 10725 + 10719 10726 10720 + 10593 10722 10579 + 10722 10593 10727 + 10722 10727 10728 + 10728 10723 10722 + 10723 10728 10724 + 10724 10728 10729 + 10729 10725 10724 + 10730 10725 10729 + 10725 10730 10726 + 10727 10593 10601 + 10601 10731 10727 + 10728 10727 10731 + 10729 10728 10731 + 10732 10729 10731 + 10729 10732 10730 + 10730 10732 10733 + 10733 10734 10730 + 10726 10730 10734 + 10735 10726 10734 + 10720 10726 10735 + 10736 10731 10601 + 10731 10736 10732 + 10732 10736 10737 + 10737 10733 10732 + 10738 10733 10737 + 10734 10733 10738 + 10601 10739 10736 + 10736 10739 10740 + 10740 10737 10736 + 10737 10740 10741 + 10737 10741 10738 + 10742 10738 10741 + 10743 10738 10742 + 10738 10743 10734 + 10739 10601 10606 + 10606 10744 10739 + 10739 10744 10745 + 10745 10740 10739 + 10740 10745 10746 + 10741 10740 10746 + 10741 10746 10742 + 10744 10606 10605 + 10605 10615 10744 + 10744 10615 10747 + 10747 10745 10744 + 10745 10747 10746 + 10746 10747 10620 + 10620 10748 10746 + 10746 10748 10742 + 10620 10747 10615 + 10625 10748 10620 + 10748 10625 10749 + 10749 10750 10748 + 10748 10750 10742 + 10751 10742 10750 + 10752 10742 10751 + 10742 10752 10743 + 10753 10749 10625 + 10754 10749 10753 + 10750 10749 10754 + 10754 10755 10750 + 10750 10755 10751 + 10625 10624 10753 + 10756 10753 10624 + 10757 10753 10756 + 10753 10757 10754 + 10758 10754 10757 + 10755 10754 10758 + 10758 10759 10755 + 10751 10755 10759 + 10624 10623 10756 + 10630 10756 10623 + 10760 10756 10630 + 10756 10760 10757 + 10757 10760 10761 + 10761 10762 10757 + 10757 10762 10758 + 10763 10758 10762 + 10758 10763 10759 + 10630 10764 10760 + 10761 10760 10764 + 10764 10765 10761 + 10766 10761 10765 + 10762 10761 10766 + 10766 10767 10762 + 10762 10767 10763 + 10768 10763 10767 + 10759 10763 10768 + 10769 10764 10630 + 10764 10769 10770 + 10770 10765 10764 + 10770 10771 10765 + 10765 10771 10766 + 10766 10771 10772 + 10773 10766 10772 + 10767 10766 10773 + 10769 10630 10774 + 10774 10775 10769 + 10769 10775 10776 + 10776 10770 10769 + 10771 10770 10776 + 10776 10772 10771 + 10629 10774 10630 + 10777 10774 10629 + 10777 10775 10774 + 10775 10777 10778 + 10778 10776 10775 + 10772 10776 10778 + 10772 10778 10779 + 10779 10780 10772 + 10772 10780 10443 + 10443 10773 10772 + 10629 10635 10777 + 10778 10777 10635 + 10635 10779 10778 + 10781 10779 10635 + 10781 10780 10779 + 10780 10781 10782 + 10782 10444 10780 + 10780 10444 10443 + 10635 10634 10781 + 10781 10634 10640 + 10640 10782 10781 + 10645 10782 10640 + 10782 10645 10439 + 10439 10444 10782 + 10439 10645 10783 + 10783 10440 10439 + 10441 10440 10783 + 10441 10783 10644 + 10644 10783 10645 + 10447 10773 10443 + 10773 10447 10452 + 10452 10784 10773 + 10773 10784 10767 + 10767 10784 10785 + 10785 10768 10767 + 10784 10452 10786 + 10786 10787 10784 + 10784 10787 10785 + 10788 10786 10452 + 10789 10786 10788 + 10787 10786 10789 + 10789 10790 10787 + 10787 10790 10791 + 10791 10785 10787 + 10452 10451 10788 + 10457 10788 10451 + 10788 10457 10465 + 10465 10792 10788 + 10788 10792 10789 + 10789 10792 10793 + 10793 10794 10789 + 10790 10789 10794 + 10794 10795 10790 + 10790 10795 10796 + 10796 10791 10790 + 10792 10465 10797 + 10797 10793 10792 + 10793 10797 10798 + 10798 10799 10793 + 10793 10799 10800 + 10800 10794 10793 + 10795 10794 10800 + 10801 10797 10465 + 10798 10797 10801 + 10801 10802 10798 + 10798 10802 10803 + 10803 10804 10798 + 10799 10798 10804 + 10465 10464 10801 + 10470 10801 10464 + 10801 10470 10805 + 10805 10802 10801 + 10802 10805 10806 + 10806 10803 10802 + 10803 10806 10807 + 10807 10808 10803 + 10803 10808 10809 + 10809 10804 10803 + 10805 10470 10469 + 10469 10810 10805 + 10805 10810 10811 + 10811 10806 10805 + 10807 10806 10811 + 10811 10812 10807 + 10807 10812 10813 + 10813 10814 10807 + 10808 10807 10814 + 10479 10810 10469 + 10810 10479 10815 + 10815 10811 10810 + 10811 10815 10816 + 10816 10812 10811 + 10812 10816 10817 + 10817 10813 10812 + 10818 10815 10479 + 10816 10815 10818 + 10818 10819 10816 + 10816 10819 10820 + 10820 10817 10816 + 10821 10817 10820 + 10813 10817 10821 + 10479 10478 10818 + 10484 10818 10478 + 10818 10484 10822 + 10822 10819 10818 + 10819 10822 10823 + 10823 10820 10819 + 10820 10823 10824 + 10824 10825 10820 + 10820 10825 10821 + 10822 10484 10483 + 10483 10826 10822 + 10822 10826 10827 + 10827 10823 10822 + 10824 10823 10827 + 10827 10828 10824 + 10824 10828 10829 + 10829 10830 10824 + 10825 10824 10830 + 10491 10826 10483 + 10826 10491 10831 + 10831 10827 10826 + 10827 10831 10832 + 10832 10828 10827 + 10828 10832 10833 + 10833 10829 10828 + 10500 10831 10491 + 10832 10831 10500 + 10500 10834 10832 + 10832 10834 10835 + 10835 10833 10832 + 10836 10833 10835 + 10829 10833 10836 + 10836 10837 10829 + 10829 10837 10838 + 10838 10830 10829 + 10839 10834 10500 + 10834 10839 10840 + 10840 10835 10834 + 10835 10840 10841 + 10841 10842 10835 + 10835 10842 10836 + 10500 10499 10839 + 10839 10499 10505 + 10505 10843 10839 + 10840 10839 10843 + 10843 10844 10840 + 10841 10840 10844 + 10844 10845 10841 + 10846 10841 10845 + 10842 10841 10846 + 10846 10847 10842 + 10836 10842 10847 + 10843 10505 10504 + 10504 10848 10843 + 10843 10848 10849 + 10849 10844 10843 + 10845 10844 10849 + 10849 10850 10845 + 10845 10850 10851 + 10851 10852 10845 + 10845 10852 10846 + 10848 10504 10509 + 10509 10853 10848 + 10848 10853 10854 + 10854 10849 10848 + 10850 10849 10854 + 10854 10855 10850 + 10850 10855 10856 + 10856 10851 10850 + 10516 10853 10509 + 10853 10516 10857 + 10857 10854 10853 + 10854 10857 10858 + 10858 10855 10854 + 10855 10858 10859 + 10859 10856 10855 + 10860 10857 10516 + 10858 10857 10860 + 10860 10861 10858 + 10858 10861 10862 + 10862 10859 10858 + 10863 10859 10862 + 10856 10859 10863 + 10516 10521 10860 + 10864 10860 10521 + 10860 10864 10865 + 10865 10861 10860 + 10861 10865 10866 + 10866 10862 10861 + 10862 10866 10867 + 10867 10868 10862 + 10862 10868 10863 + 10521 10520 10864 + 10869 10864 10520 + 10865 10864 10869 + 10869 10870 10865 + 10865 10870 10871 + 10871 10866 10865 + 10867 10866 10871 + 10520 10529 10869 + 10872 10869 10529 + 10869 10872 10873 + 10873 10870 10869 + 10870 10873 10874 + 10874 10871 10870 + 10871 10874 10875 + 10875 10876 10871 + 10871 10876 10867 + 10529 10528 10872 + 10872 10528 10877 + 10877 10878 10872 + 10878 10879 10872 + 10873 10872 10879 + 10879 10880 10873 + 10874 10873 10880 + 10880 10881 10874 + 10875 10874 10881 + 10534 10877 10528 + 10877 10534 10882 + 10882 10883 10877 + 10877 10883 10884 + 10884 10878 10877 + 10885 10878 10884 + 10878 10885 10886 + 10886 10879 10878 + 10880 10879 10886 + 10882 10534 10533 + 10533 10887 10882 + 10888 10882 10887 + 10883 10882 10888 + 10888 10889 10883 + 10883 10889 10890 + 10890 10884 10883 + 10885 10884 10890 + 10887 10533 10665 + 10887 10665 10670 + 10670 10891 10887 + 10887 10891 10888 + 10892 10888 10891 + 10888 10892 10893 + 10893 10889 10888 + 10889 10893 10894 + 10894 10890 10889 + 10895 10891 10670 + 10891 10895 10892 + 10896 10892 10895 + 10893 10892 10896 + 10896 10897 10893 + 10893 10897 10898 + 10898 10899 10893 + 10899 10894 10893 + 10670 10900 10895 + 10895 10900 10901 + 10901 10902 10895 + 10895 10902 10896 + 10903 10896 10902 + 10903 10897 10896 + 10900 10670 10904 + 10904 10905 10900 + 10901 10900 10905 + 10905 10906 10901 + 10907 10901 10906 + 10907 10902 10901 + 10902 10907 10903 + 10669 10904 10670 + 10908 10904 10669 + 10908 10905 10904 + 10905 10908 10688 + 10688 10906 10905 + 10687 10906 10688 + 10906 10687 10907 + 10907 10687 10686 + 10903 10907 10686 + 10909 10903 10686 + 10897 10903 10909 + 10669 10668 10908 + 10688 10908 10668 + 9849 9409 9414 + 9414 9850 9849 + 9850 9414 10910 + 10910 10911 9850 + 9850 10911 9845 + 10912 9845 10911 + 9839 9845 10912 + 10912 9840 9839 + 10910 9414 9413 + 9413 9419 10910 + 10913 10910 9419 + 10911 10910 10913 + 10913 10914 10911 + 10911 10914 10912 + 10915 10912 10914 + 9840 10912 10915 + 10915 10916 9840 + 9840 10916 9835 + 9419 9424 10913 + 10917 10913 9424 + 10914 10913 10917 + 10917 10918 10914 + 10914 10918 10915 + 10919 10915 10918 + 10916 10915 10919 + 10919 10920 10916 + 10916 10920 10921 + 10921 9835 10916 + 9830 9835 10921 + 9424 10922 10917 + 10923 10917 10922 + 10918 10917 10923 + 10923 10924 10918 + 10918 10924 10919 + 10925 10919 10924 + 10920 10919 10925 + 9423 10922 9424 + 10922 9423 9429 + 9429 10926 10922 + 10922 10926 10923 + 10927 10923 10926 + 10924 10923 10927 + 10927 10928 10924 + 10924 10928 10925 + 10929 10925 10928 + 10930 10925 10929 + 10925 10930 10920 + 10926 9429 9434 + 9434 10931 10926 + 10926 10931 10927 + 10932 10927 10931 + 10928 10927 10932 + 10932 10933 10928 + 10928 10933 10929 + 10934 10929 10933 + 10935 10929 10934 + 10929 10935 10930 + 10931 9434 10936 + 10936 10937 10931 + 10931 10937 10932 + 10938 10932 10937 + 10933 10932 10938 + 10938 10939 10933 + 10933 10939 10934 + 10936 9434 9433 + 9433 10940 10936 + 10941 10936 10940 + 10937 10936 10941 + 10941 10942 10937 + 10937 10942 10938 + 10943 10938 10942 + 10939 10938 10943 + 9438 10940 9433 + 10940 9438 9443 + 9443 10944 10940 + 10940 10944 10941 + 10945 10941 10944 + 10942 10941 10945 + 10945 10946 10942 + 10942 10946 10943 + 10947 10943 10946 + 10948 10943 10947 + 10943 10948 10939 + 10944 9443 10949 + 10949 10950 10944 + 10944 10950 10945 + 10951 10945 10950 + 10946 10945 10951 + 10951 10952 10946 + 10946 10952 10947 + 10953 10949 9443 + 10954 10949 10953 + 10950 10949 10954 + 10954 10955 10950 + 10950 10955 10951 + 10956 10951 10955 + 10952 10951 10956 + 9443 9442 10953 + 10957 10953 9442 + 10953 10957 10958 + 10953 10958 10954 + 10959 10954 10958 + 10955 10954 10959 + 10959 10960 10955 + 10955 10960 10956 + 9442 9441 10957 + 10957 9441 9448 + 9448 10961 10957 + 10961 10962 10957 + 10958 10957 10962 + 10962 10963 10958 + 10958 10963 10964 + 10964 10959 10958 + 10965 10959 10964 + 10960 10959 10965 + 10966 10961 9448 + 10961 10966 10967 + 10967 10968 10961 + 10961 10968 10969 + 10969 10962 10961 + 10963 10962 10969 + 10963 10969 10970 + 10970 10964 10963 + 9448 9447 10966 + 10966 9447 9717 + 10971 10966 9717 + 10967 10966 10971 + 10971 9745 10967 + 10972 10967 9745 + 10968 10967 10972 + 9446 9717 9447 + 9745 10971 9736 + 9736 10971 9731 + 9722 9731 10971 + 9717 9722 10971 + 8740 8739 9767 + 9767 8739 10973 + 10973 9762 9767 + 9762 10973 10974 + 9762 10974 9757 + 9752 9757 10974 + 8738 10973 8739 + 10974 10973 8738 + 8738 10975 10974 + 10974 10975 9752 + 8738 8737 10975 + 10975 8737 10976 + 10976 10977 10975 + 10975 10977 9752 + 10976 8737 10978 + 10978 10979 10976 + 10980 10981 10982 + 10983 10981 10980 + 10981 10983 10984 + 10981 10984 10985 + 10985 10986 10981 + 10981 10986 10987 + 10980 10988 10983 + 10983 10988 10989 + 10989 10990 10983 + 10984 10983 10990 + 10990 10991 10984 + 10984 10991 10992 + 10992 10985 10984 + 10980 10993 10988 + 10988 10993 10994 + 10994 10989 10988 + 10989 10994 10995 + 10989 10995 10996 + 10996 10990 10989 + 10991 10990 10996 + 10993 10980 10997 + 10997 10998 10993 + 10994 10993 10998 + 10999 10994 10998 + 10995 10994 10999 + 10999 11000 10995 + 10996 10995 11000 + 11001 10997 10980 + 11002 10997 11001 + 10998 10997 11002 + 11002 11003 10998 + 10998 11003 11004 + 11004 11005 10998 + 10998 11005 10999 + 11006 10999 11005 + 10999 11006 11000 + 11001 11007 11002 + 11008 11002 11007 + 11003 11002 11008 + 11008 11009 11003 + 11003 11009 11010 + 11004 11003 11010 + 11011 11007 11001 + 11007 11011 11012 + 11012 11013 11007 + 11007 11013 11008 + 11014 11008 11013 + 11009 11008 11014 + 11014 11015 11009 + 11009 11015 11016 + 11016 11010 11009 + 11012 11011 11017 + 11018 11012 11017 + 11019 11012 11018 + 11013 11012 11019 + 11019 11020 11013 + 11013 11020 11014 + 11021 11017 11011 + 11017 11021 11022 + 11017 11022 11023 + 11023 11024 11017 + 11017 11024 11025 + 11025 11018 11017 + 11011 11026 11021 + 11021 11026 11027 + 11027 11028 11021 + 11022 11021 11028 + 11028 11029 11022 + 11022 11029 11030 + 11030 11023 11022 + 53 11026 11011 + 52 11027 11026 + 11026 11001 52 + 11031 11032 11033 + 11032 11034 11033 + 11034 11035 11033 + 11035 11036 11033 + 11037 11033 11036 + 11033 11037 11038 + 11038 11039 11033 + 11033 11039 11040 + 11040 11041 11033 + 11033 11041 11042 + 11043 11034 11032 + 11034 11043 11044 + 11044 11045 11034 + 11034 11045 11046 + 11046 11035 11034 + 11032 11047 11043 + 11048 11043 11047 + 11044 11043 11048 + 11048 11049 11044 + 11050 11044 11049 + 11045 11044 11050 + 11050 11051 11045 + 11046 11045 11051 + 11032 11052 11047 + 11047 11052 11053 + 11053 11054 11047 + 11047 11054 11048 + 11052 11032 11055 + 11055 64 11052 + 11053 11052 64 + 11056 11053 64 + 11057 11053 11056 + 11053 11057 11054 + 11054 11057 11058 + 11058 11059 11054 + 11054 11059 11048 + 64 11060 11056 + 11061 11056 11060 + 11061 11062 11056 + 11056 11062 11057 + 11057 11062 11063 + 11063 11064 11057 + 11064 11058 11057 + 11065 11060 64 + 11066 11060 11065 + 11060 11066 11061 + 11061 11066 11067 + 11068 11061 11067 + 11062 11061 11068 + 11068 11063 11062 + 64 11069 11065 + 11040 11070 11041 + 11070 11040 11071 + 11071 11072 11070 + 11073 11072 11071 + 11072 11073 11074 + 11074 11075 11072 + 11076 11072 11075 + 11071 11040 11039 + 11077 11071 11039 + 11073 11071 11077 + 11077 11078 11073 + 11073 11078 11079 + 11074 11073 11079 + 11079 11080 11074 + 11081 11074 11080 + 11081 11075 11074 + 11082 11077 11039 + 11083 11077 11082 + 11083 11078 11077 + 11078 11083 11084 + 11084 11079 11078 + 11039 11085 11082 + 11086 11082 11085 + 11082 11086 11087 + 11082 11087 11083 + 11083 11087 11088 + 11088 11089 11083 + 11089 11084 11083 + 11090 11085 11039 + 11091 11085 11090 + 11085 11091 11086 + 11092 11086 11091 + 11087 11086 11092 + 11092 11088 11087 + 11093 11088 11092 + 11088 11093 11094 + 11094 11089 11088 + 11039 11038 11090 + 11095 11090 11038 + 11091 11090 11095 + 11095 11096 11091 + 11091 11096 11097 + 11097 11092 11091 + 11098 11092 11097 + 11092 11098 11093 + 11038 11099 11095 + 11100 11095 11099 + 11095 11100 11101 + 11101 11096 11095 + 11096 11101 11102 + 11102 11097 11096 + 11103 11099 11038 + 11104 11099 11103 + 11099 11104 11100 + 11105 11100 11104 + 11101 11100 11105 + 11105 11106 11101 + 11101 11106 11107 + 11107 11102 11101 + 11038 11037 11103 + 11108 11103 11037 + 11109 11103 11108 + 11103 11109 11104 + 11104 11109 11110 + 11110 11111 11104 + 11104 11111 11105 + 11037 11112 11108 + 11113 11108 11112 + 11114 11108 11113 + 11108 11114 11109 + 11110 11109 11114 + 11036 11112 11037 + 11115 11112 11036 + 11112 11115 11113 + 11116 11113 11115 + 11117 11113 11116 + 11113 11117 11114 + 11114 11117 11118 + 11118 11119 11114 + 11114 11119 11110 + 11115 11036 11035 + 11035 11120 11115 + 11115 11120 11116 + 11121 11116 11120 + 11122 11116 11121 + 11116 11122 11117 + 11118 11117 11122 + 11123 11120 11035 + 11120 11123 11121 + 11124 11121 11123 + 11125 11121 11124 + 11121 11125 11122 + 11122 11125 11126 + 11126 11127 11122 + 11122 11127 11118 + 11035 11046 11123 + 11123 11046 11128 + 11128 11129 11123 + 11123 11129 11124 + 11130 11124 11129 + 11131 11124 11130 + 11124 11131 11125 + 11126 11125 11131 + 11051 11128 11046 + 11132 11128 11051 + 11128 11132 11133 + 11133 11129 11128 + 11129 11133 11130 + 11134 11130 11133 + 11135 11130 11134 + 11130 11135 11131 + 11051 11136 11132 + 11132 11136 11137 + 11137 11138 11132 + 11133 11132 11138 + 11138 11139 11133 + 11133 11139 11134 + 11140 11136 11051 + 11136 11140 11141 + 11141 11137 11136 + 11137 11141 11142 + 11142 11143 11137 + 11137 11143 11144 + 11144 11138 11137 + 11051 11050 11140 + 11140 11050 11145 + 11145 11146 11140 + 11140 11146 11147 + 11147 11141 11140 + 11142 11141 11147 + 11049 11145 11050 + 11148 11145 11049 + 11146 11145 11148 + 11146 11148 11149 + 11149 11147 11146 + 11147 11149 11150 + 11150 11151 11147 + 11147 11151 11142 + 11049 11152 11148 + 11149 11148 11152 + 11153 11149 11152 + 11150 11149 11153 + 11153 11154 11150 + 11155 11150 11154 + 11151 11150 11155 + 11155 11156 11151 + 11142 11151 11156 + 11157 11152 11049 + 11152 11157 11158 + 11158 11159 11152 + 11152 11159 11153 + 11160 11153 11159 + 11153 11160 11161 + 11161 11154 11153 + 11049 11048 11157 + 11157 11048 11162 + 11162 11163 11157 + 11157 11163 11164 + 11164 11165 11157 + 11165 11158 11157 + 11059 11162 11048 + 11166 11162 11059 + 11162 11166 11163 + 11163 11166 11167 + 11167 11164 11163 + 11168 11164 11167 + 11164 11168 11169 + 11169 11165 11164 + 11059 11170 11166 + 11167 11166 11170 + 11170 11171 11167 + 11171 11172 11167 + 11173 11167 11172 + 11167 11173 11168 + 11059 11058 11170 + 11170 11058 11064 + 11064 11171 11170 + 11064 11174 11171 + 11171 11174 11175 + 11175 11172 11171 + 11172 11175 11176 + 11172 11176 11173 + 11177 11173 11176 + 11168 11173 11177 + 11174 11064 11063 + 11063 11178 11174 + 11174 11178 11179 + 11179 11180 11174 + 11180 11175 11174 + 11176 11175 11180 + 11180 11181 11176 + 11176 11181 11177 + 11068 11178 11063 + 11178 11068 11182 + 11182 11179 11178 + 11182 11183 11179 + 11179 11183 11184 + 11184 11180 11179 + 11180 11184 11181 + 11181 11184 11185 + 11185 11186 11181 + 11181 11186 11177 + 11182 11068 11067 + 11187 11182 11067 + 11183 11182 11187 + 11187 11188 11183 + 11184 11183 11188 + 11188 11189 11184 + 11189 11185 11184 + 11190 11185 11189 + 11186 11185 11190 + 11186 11190 11191 + 11191 11177 11186 + 11067 11192 11187 + 11193 11187 11192 + 11187 11193 11188 + 11188 11193 11194 + 11194 11189 11188 + 11189 11194 11195 + 11189 11195 11190 + 11191 11190 11195 + 11196 11192 11067 + 11192 11196 11197 + 11192 11197 11193 + 11194 11193 11197 + 11197 11198 11194 + 11195 11194 11198 + 11198 11199 11195 + 11195 11199 11200 + 11200 11191 11195 + 11067 11201 11196 + 11202 11196 11201 + 11197 11196 11202 + 11202 11198 11197 + 11198 11202 11203 + 11203 11199 11198 + 11199 11203 11204 + 11204 11200 11199 + 11067 11205 11201 + 11201 11205 11206 + 11206 11207 11201 + 11201 11207 11202 + 11205 11067 11208 + 11208 11209 11205 + 11205 11209 11210 + 11206 11205 11210 + 11210 11211 11206 + 11212 11206 11211 + 11212 11207 11206 + 11213 11208 11067 + 11214 11208 11213 + 11208 11214 11209 + 11209 11214 11215 + 11215 11216 11209 + 11209 11216 11210 + 11081 11213 11067 + 11080 11213 11081 + 11213 11080 11217 + 11213 11217 11214 + 11215 11214 11217 + 11217 11218 11215 + 11219 11215 11218 + 11216 11215 11219 + 11066 11081 11067 + 11075 11081 11066 + 11066 11065 11075 + 11075 11065 11220 + 11065 11221 11220 + 11217 11080 11079 + 11079 11218 11217 + 11222 11218 11079 + 11218 11222 11219 + 11219 11222 11223 + 11223 11224 11219 + 11224 11225 11219 + 11216 11219 11225 + 11225 11226 11216 + 11216 11226 11210 + 11079 11084 11222 + 11222 11084 11089 + 11089 11223 11222 + 11223 11089 11094 + 11223 11094 11227 + 11227 11224 11223 + 11228 11224 11227 + 11224 11228 11229 + 11229 11225 11224 + 11229 11226 11225 + 11226 11229 11230 + 11230 11210 11226 + 11227 11094 11093 + 11231 11227 11093 + 11228 11227 11231 + 11231 11232 11228 + 11229 11228 11232 + 11230 11229 11232 + 11233 11230 11232 + 11234 11230 11233 + 11234 11210 11230 + 11210 11234 11235 + 11235 11211 11210 + 11236 11231 11093 + 11236 11232 11231 + 11232 11236 11237 + 11237 11238 11232 + 11232 11238 11239 + 11239 11233 11232 + 11093 11098 11236 + 11236 11098 11240 + 11240 11241 11236 + 11241 11237 11236 + 11242 11237 11241 + 11237 11242 11238 + 11238 11242 11243 + 11243 11239 11238 + 11097 11240 11098 + 11244 11240 11097 + 11240 11244 11245 + 11245 11241 11240 + 11241 11245 11246 + 11246 11247 11241 + 11241 11247 11242 + 11243 11242 11247 + 11097 11102 11244 + 11244 11102 11107 + 11107 11248 11244 + 11244 11248 11249 + 11249 11245 11244 + 11246 11245 11249 + 11249 11250 11246 + 11246 11250 11251 + 11251 11252 11246 + 11247 11246 11252 + 11253 11248 11107 + 11248 11253 11254 + 11254 11249 11248 + 11249 11254 11255 + 11255 11250 11249 + 11250 11255 11256 + 11256 11251 11250 + 11107 11257 11253 + 11253 11257 11258 + 11258 11259 11253 + 11253 11259 11260 + 11260 11254 11253 + 11255 11254 11260 + 11257 11107 11106 + 11106 11261 11257 + 11258 11257 11261 + 11261 11262 11258 + 11263 11258 11262 + 11258 11263 11264 + 11264 11259 11258 + 11259 11264 11265 + 11265 11260 11259 + 11261 11106 11105 + 11105 11266 11261 + 11261 11266 11267 + 11267 11262 11261 + 11268 11262 11267 + 11262 11268 11263 + 11263 11268 11269 + 11269 11270 11263 + 11264 11263 11270 + 11266 11105 11111 + 11111 11271 11266 + 11267 11266 11271 + 11271 11272 11267 + 11273 11267 11272 + 11267 11273 11268 + 11268 11273 11274 + 11274 11269 11268 + 11271 11111 11110 + 11110 11275 11271 + 11271 11275 11276 + 11276 11272 11271 + 11277 11272 11276 + 11272 11277 11273 + 11274 11273 11277 + 11277 11278 11274 + 11279 11274 11278 + 11269 11274 11279 + 11275 11110 11119 + 11119 11280 11275 + 11276 11275 11280 + 11280 11281 11276 + 11282 11276 11281 + 11276 11282 11277 + 11277 11282 11283 + 11283 11278 11277 + 11280 11119 11118 + 11118 11284 11280 + 11280 11284 11285 + 11285 11281 11280 + 11286 11281 11285 + 11281 11286 11282 + 11283 11282 11286 + 11286 11287 11283 + 11288 11283 11287 + 11278 11283 11288 + 11284 11118 11127 + 11127 11289 11284 + 11285 11284 11289 + 11289 11290 11285 + 11291 11285 11290 + 11285 11291 11286 + 11286 11291 11292 + 11292 11287 11286 + 11289 11127 11126 + 11126 11293 11289 + 11289 11293 11294 + 11294 11290 11289 + 11295 11290 11294 + 11290 11295 11291 + 11292 11291 11295 + 11295 11296 11292 + 11297 11292 11296 + 11287 11292 11297 + 11293 11126 11298 + 11298 11299 11293 + 11294 11293 11299 + 11299 11300 11294 + 11301 11294 11300 + 11294 11301 11295 + 11295 11301 11302 + 11302 11296 11295 + 11131 11298 11126 + 11303 11298 11131 + 11299 11298 11303 + 11303 11304 11299 + 11299 11304 11305 + 11305 11300 11299 + 11306 11300 11305 + 11300 11306 11301 + 11302 11301 11306 + 11131 11135 11303 + 11303 11135 11307 + 11307 11308 11303 + 11304 11303 11308 + 11308 11309 11304 + 11305 11304 11309 + 11309 11310 11305 + 11311 11305 11310 + 11305 11311 11306 + 11134 11307 11135 + 11307 11134 11312 + 11312 11313 11307 + 11307 11313 11314 + 11314 11308 11307 + 11309 11308 11314 + 11314 11315 11309 + 11309 11315 11316 + 11316 11310 11309 + 11312 11134 11139 + 11139 11317 11312 + 11312 11317 11318 + 11318 11319 11312 + 11313 11312 11319 + 11319 11320 11313 + 11314 11313 11320 + 11320 11321 11314 + 11315 11314 11321 + 11317 11139 11138 + 11138 11144 11317 + 11317 11144 11322 + 11322 11323 11317 + 11317 11323 11318 + 11324 11318 11323 + 11325 11318 11324 + 11318 11325 11326 + 11326 11319 11318 + 11320 11319 11326 + 11327 11322 11144 + 11328 11322 11327 + 11328 11323 11322 + 11323 11328 11324 + 11324 11328 11329 + 11329 11330 11324 + 11331 11324 11330 + 11324 11331 11325 + 11144 11143 11327 + 11332 11327 11143 + 11327 11332 11333 + 11333 11329 11327 + 11327 11329 11328 + 11143 11142 11332 + 11156 11332 11142 + 11333 11332 11156 + 11156 11334 11333 + 11335 11333 11334 + 11329 11333 11335 + 11335 11330 11329 + 11330 11335 11336 + 11336 11337 11330 + 11330 11337 11331 + 11338 11331 11337 + 11325 11331 11338 + 11334 11156 11155 + 11334 11155 11339 + 11339 11340 11334 + 11334 11340 11335 + 11336 11335 11340 + 11340 11341 11336 + 11342 11336 11341 + 11337 11336 11342 + 11342 11343 11337 + 11337 11343 11338 + 11344 11339 11155 + 11341 11339 11344 + 11341 11340 11339 + 11345 11344 11155 + 11346 11344 11345 + 11344 11346 11347 + 11347 11348 11344 + 11344 11348 11341 + 11341 11348 11342 + 11349 11342 11348 + 11343 11342 11349 + 11154 11345 11155 + 11350 11345 11154 + 11345 11350 11351 + 11351 11352 11345 + 11345 11352 11346 + 11154 11161 11350 + 11350 11161 11353 + 11353 11354 11350 + 11351 11350 11354 + 11354 11355 11351 + 11356 11351 11355 + 11352 11351 11356 + 11356 11357 11352 + 11346 11352 11357 + 11161 11358 11353 + 11359 11353 11358 + 11360 11353 11359 + 11353 11360 11361 + 11361 11354 11353 + 11355 11354 11361 + 11362 11358 11161 + 11363 11358 11362 + 11358 11363 11359 + 11359 11363 11364 + 11364 11365 11359 + 11360 11359 11365 + 11161 11160 11362 + 11362 11160 11366 + 11366 11367 11362 + 11368 11362 11367 + 11362 11368 11363 + 11363 11368 11369 + 11369 11364 11363 + 11159 11366 11160 + 11366 11159 11158 + 11158 11370 11366 + 11366 11370 11371 + 11371 11367 11366 + 11367 11371 11372 + 11372 11373 11367 + 11367 11373 11368 + 11368 11373 11374 + 11374 11369 11368 + 11370 11158 11165 + 11165 11375 11370 + 11370 11375 11376 + 11371 11370 11376 + 11376 11377 11371 + 11372 11371 11377 + 11377 11378 11372 + 11379 11372 11378 + 11373 11372 11379 + 11379 11374 11373 + 11375 11165 11169 + 11169 11380 11375 + 11375 11380 11381 + 11381 11376 11375 + 11376 11381 11382 + 11382 11383 11376 + 11376 11383 11384 + 11384 11377 11376 + 11378 11377 11384 + 11380 11169 11385 + 11385 11386 11380 + 11381 11380 11386 + 11386 11387 11381 + 11387 11388 11381 + 11382 11381 11388 + 11389 11385 11169 + 11390 11385 11389 + 11386 11385 11390 + 11390 11391 11386 + 11386 11391 11392 + 11392 11387 11386 + 11169 11168 11389 + 11168 11393 11389 + 11393 11394 11389 + 11395 11389 11394 + 11396 11389 11395 + 11389 11396 11390 + 11177 11393 11168 + 11177 11191 11393 + 11393 11191 11200 + 11200 11394 11393 + 11200 11204 11394 + 11394 11204 11395 + 11395 11204 11203 + 11203 11397 11395 + 11398 11395 11397 + 11395 11398 11396 + 11396 11398 11399 + 11399 11400 11396 + 11396 11400 11401 + 11390 11396 11401 + 11402 11397 11203 + 11397 11402 11403 + 11397 11403 11398 + 11399 11398 11403 + 11403 11404 11399 + 11404 11405 11399 + 11406 11399 11405 + 11399 11406 11400 + 11203 11202 11402 + 11407 11402 11202 + 11403 11402 11407 + 11407 11404 11403 + 11407 11408 11404 + 11404 11408 11409 + 11409 11405 11404 + 11405 11409 11410 + 11410 11411 11405 + 11405 11411 11406 + 11412 11407 11202 + 11408 11407 11412 + 11412 11413 11408 + 11408 11413 11414 + 11414 11409 11408 + 11410 11409 11414 + 11207 11412 11202 + 11415 11412 11207 + 11415 11413 11412 + 11413 11415 11416 + 11416 11414 11413 + 11416 11417 11414 + 11414 11417 11410 + 11410 11417 11418 + 11418 11419 11410 + 11411 11410 11419 + 11207 11212 11415 + 11415 11212 11420 + 11416 11415 11420 + 11421 11416 11420 + 11417 11416 11421 + 11421 11418 11417 + 11421 11422 11418 + 11418 11422 11423 + 11423 11419 11418 + 11424 11419 11423 + 11419 11424 11411 + 11212 11425 11420 + 11425 11426 11420 + 11426 11427 11420 + 11428 11420 11427 + 11420 11428 11429 + 11420 11429 11430 + 11430 11431 11420 + 11420 11431 11421 + 11211 11425 11212 + 11425 11211 11235 + 11425 11235 11432 + 11432 11426 11425 + 11426 11432 11433 + 11426 11433 11434 + 11434 11427 11426 + 11427 11434 11435 + 11427 11435 11428 + 11436 11432 11235 + 11433 11432 11436 + 11436 11437 11433 + 11433 11437 11438 + 11438 11434 11433 + 11435 11434 11438 + 11438 11439 11435 + 11435 11439 11440 + 11428 11435 11440 + 11235 11234 11436 + 11234 11441 11436 + 11442 11436 11441 + 11436 11442 11443 + 11443 11437 11436 + 11437 11443 11444 + 11444 11438 11437 + 11438 11444 11445 + 11445 11439 11438 + 11233 11441 11234 + 11441 11233 11446 + 11441 11446 11442 + 11447 11442 11446 + 11443 11442 11447 + 11447 11448 11443 + 11443 11448 11449 + 11449 11444 11443 + 11445 11444 11449 + 11446 11233 11239 + 11239 11450 11446 + 11446 11450 11447 + 11451 11447 11450 + 11447 11451 11448 + 11448 11451 11452 + 11452 11449 11448 + 11453 11449 11452 + 11449 11453 11445 + 11450 11239 11243 + 11243 11454 11450 + 11450 11454 11451 + 11451 11454 11455 + 11452 11451 11455 + 11455 11456 11452 + 11457 11452 11456 + 11452 11457 11453 + 11454 11243 11458 + 11458 11455 11454 + 11459 11455 11458 + 11455 11459 11460 + 11460 11456 11455 + 11456 11460 11461 + 11461 11462 11456 + 11456 11462 11457 + 11247 11458 11243 + 11252 11458 11247 + 11458 11252 11459 + 11459 11252 11251 + 11251 11463 11459 + 11459 11463 11464 + 11464 11460 11459 + 11461 11460 11464 + 11464 11465 11461 + 11461 11465 11466 + 11466 11467 11461 + 11462 11461 11467 + 11468 11463 11251 + 11463 11468 11469 + 11469 11464 11463 + 11464 11469 11470 + 11470 11465 11464 + 11465 11470 11471 + 11471 11466 11465 + 11251 11256 11468 + 11468 11256 11472 + 11472 11473 11468 + 11468 11473 11474 + 11474 11469 11468 + 11470 11469 11474 + 11474 11475 11470 + 11470 11475 11476 + 11476 11471 11470 + 11472 11256 11255 + 11255 11477 11472 + 11478 11472 11477 + 11472 11478 11479 + 11479 11473 11472 + 11473 11479 11480 + 11480 11474 11473 + 11474 11480 11481 + 11481 11475 11474 + 11260 11477 11255 + 11482 11477 11260 + 11477 11482 11478 + 11478 11482 11483 + 11483 11484 11478 + 11479 11478 11484 + 11484 11485 11479 + 11479 11485 11486 + 11486 11480 11479 + 11481 11480 11486 + 11260 11265 11482 + 11482 11265 11487 + 11487 11483 11482 + 11488 11483 11487 + 11483 11488 11489 + 11489 11484 11483 + 11485 11484 11489 + 11489 11490 11485 + 11485 11490 11491 + 11491 11486 11485 + 11487 11265 11264 + 11264 11492 11487 + 11493 11487 11492 + 11487 11493 11488 + 11488 11493 11494 + 11494 11495 11488 + 11488 11495 11496 + 11496 11489 11488 + 11490 11489 11496 + 11270 11492 11264 + 11492 11270 11497 + 11497 11498 11492 + 11492 11498 11493 + 11493 11498 11499 + 11499 11494 11493 + 11500 11494 11499 + 11494 11500 11501 + 11501 11495 11494 + 11497 11270 11269 + 11269 11502 11497 + 11503 11497 11502 + 11498 11497 11503 + 11503 11499 11498 + 11504 11499 11503 + 11499 11504 11500 + 11505 11500 11504 + 11501 11500 11505 + 11279 11502 11269 + 11502 11279 11506 + 11506 11507 11502 + 11502 11507 11503 + 11508 11503 11507 + 11503 11508 11504 + 11504 11508 11509 + 11509 11510 11504 + 11504 11510 11505 + 11511 11506 11279 + 11512 11506 11511 + 11506 11512 11513 + 11513 11507 11506 + 11507 11513 11508 + 11509 11508 11513 + 11279 11514 11511 + 11515 11511 11514 + 11516 11511 11515 + 11511 11516 11512 + 11517 11512 11516 + 11513 11512 11517 + 11517 11518 11513 + 11513 11518 11509 + 11278 11514 11279 + 11288 11514 11278 + 11514 11288 11515 + 11519 11515 11288 + 11520 11515 11519 + 11515 11520 11516 + 11516 11520 11521 + 11521 11522 11516 + 11516 11522 11517 + 11288 11523 11519 + 11524 11519 11523 + 11525 11519 11524 + 11519 11525 11520 + 11521 11520 11525 + 11287 11523 11288 + 11297 11523 11287 + 11523 11297 11524 + 11526 11524 11297 + 11527 11524 11526 + 11524 11527 11525 + 11525 11527 11528 + 11528 11529 11525 + 11525 11529 11521 + 11297 11530 11526 + 11531 11526 11530 + 11532 11526 11531 + 11526 11532 11527 + 11528 11527 11532 + 11296 11530 11297 + 11533 11530 11296 + 11530 11533 11531 + 11534 11531 11533 + 11535 11531 11534 + 11531 11535 11532 + 11532 11535 11536 + 11536 11537 11532 + 11532 11537 11528 + 11296 11302 11533 + 11533 11302 11538 + 11538 11539 11533 + 11533 11539 11534 + 11540 11534 11539 + 11541 11534 11540 + 11534 11541 11535 + 11536 11535 11541 + 11306 11538 11302 + 11542 11538 11306 + 11538 11542 11543 + 11543 11539 11538 + 11539 11543 11540 + 11544 11540 11543 + 11545 11540 11544 + 11540 11545 11541 + 11306 11311 11542 + 11542 11311 11546 + 11546 11547 11542 + 11543 11542 11547 + 11547 11548 11543 + 11543 11548 11544 + 11549 11544 11548 + 11550 11544 11549 + 11544 11550 11545 + 11310 11546 11311 + 11546 11310 11316 + 11316 11551 11546 + 11546 11551 11552 + 11552 11547 11546 + 11547 11552 11553 + 11553 11548 11547 + 11548 11553 11549 + 11554 11549 11553 + 11555 11549 11554 + 11549 11555 11550 + 11551 11316 11556 + 11556 11557 11551 + 11552 11551 11557 + 11557 11558 11552 + 11553 11552 11558 + 11558 11559 11553 + 11553 11559 11554 + 11560 11556 11316 + 11561 11556 11560 + 11557 11556 11561 + 11561 11562 11557 + 11557 11562 11563 + 11563 11558 11557 + 11558 11563 11564 + 11564 11559 11558 + 11316 11315 11560 + 11321 11560 11315 + 11560 11321 11565 + 11565 11566 11560 + 11560 11566 11561 + 11561 11566 11567 + 11567 11568 11561 + 11562 11561 11568 + 11568 11569 11562 + 11563 11562 11569 + 11565 11321 11320 + 11320 11570 11565 + 11565 11570 11571 + 11571 11572 11565 + 11566 11565 11572 + 11572 11567 11566 + 11326 11570 11320 + 11570 11326 11573 + 11573 11571 11570 + 11571 11573 11574 + 11574 11575 11571 + 11571 11575 11576 + 11576 11572 11571 + 11567 11572 11576 + 11577 11573 11326 + 11574 11573 11577 + 11577 11578 11574 + 11579 11574 11578 + 11575 11574 11579 + 11579 11580 11575 + 11576 11575 11580 + 11326 11325 11577 + 11338 11577 11325 + 11578 11577 11338 + 11338 11581 11578 + 11578 11581 11582 + 11582 11583 11578 + 11578 11583 11584 + 11584 11579 11578 + 11585 11579 11584 + 11580 11579 11585 + 11581 11338 11343 + 11343 11586 11581 + 11581 11586 11587 + 11587 11582 11581 + 11588 11582 11587 + 11588 11583 11582 + 11583 11588 11589 + 11589 11584 11583 + 11590 11584 11589 + 11584 11590 11585 + 11349 11586 11343 + 11586 11349 11591 + 11591 11587 11586 + 11587 11591 11592 + 11592 11593 11587 + 11587 11593 11588 + 11588 11593 11594 + 11594 11589 11588 + 11595 11589 11594 + 11589 11595 11590 + 11591 11349 11347 + 11347 11596 11591 + 11592 11591 11596 + 11596 11597 11592 + 11598 11592 11597 + 11593 11592 11598 + 11598 11594 11593 + 11348 11347 11349 + 11599 8724 11600 + 11600 11601 11599 + 11041 11602 11603 + 11603 11604 11041 + 8644 11605 8651 + 8651 8645 8644 + 8645 8651 11606 + 11606 8646 8645 + 8646 11606 11607 + 8646 11607 11608 + 11608 11609 8646 + 8646 11609 8647 + 11606 8651 8654 + 8654 11610 11606 + 11610 11611 11606 + 11607 11606 11611 + 11611 11612 11607 + 11607 11612 11613 + 11613 11608 11607 + 11614 11608 11613 + 11609 11608 11614 + 11615 11610 8654 + 11616 11610 11615 + 11610 11616 11617 + 11617 11611 11610 + 11617 11612 11611 + 11612 11617 11618 + 11618 11613 11612 + 8654 8658 11615 + 11615 8658 8663 + 8663 11619 11615 + 11616 11615 11619 + 11619 11620 11616 + 11616 11620 11618 + 11617 11616 11618 + 11621 11619 8663 + 11619 11621 11622 + 11622 11620 11619 + 11620 11622 11623 + 11623 11618 11620 + 11613 11618 11623 + 11623 11624 11613 + 11613 11624 11614 + 8663 8667 11621 + 11625 11621 8667 + 11622 11621 11625 + 11625 11626 11622 + 11623 11622 11626 + 11626 11627 11623 + 11624 11623 11627 + 11627 11628 11624 + 11624 11628 11629 + 11629 11614 11624 + 8667 8671 11625 + 11630 11625 8671 + 11625 11630 11631 + 11631 11626 11625 + 11626 11631 11632 + 11632 11627 11626 + 11628 11627 11632 + 11632 11633 11628 + 11628 11633 11634 + 11634 11629 11628 + 8671 8677 11630 + 11635 11630 8677 + 11631 11630 11635 + 11635 11636 11631 + 11632 11631 11636 + 11636 11637 11632 + 11633 11632 11637 + 11637 11638 11633 + 11633 11638 11639 + 11639 11634 11633 + 8677 11640 11635 + 11641 11635 11640 + 11635 11641 11642 + 11642 11636 11635 + 11636 11642 11643 + 11643 11637 11636 + 11638 11637 11643 + 8676 11640 8677 + 11640 8676 8675 + 8675 11644 11640 + 11640 11644 11641 + 11645 11641 11644 + 11642 11641 11645 + 11645 11646 11642 + 11643 11642 11646 + 11646 11647 11643 + 11648 11643 11647 + 11643 11648 11638 + 11644 8675 8681 + 8681 11649 11644 + 11644 11649 11645 + 11650 11645 11649 + 11645 11650 11651 + 11651 11646 11645 + 11646 11651 11652 + 11652 11647 11646 + 11653 11647 11652 + 11647 11653 11648 + 11649 8681 11654 + 11654 11655 11649 + 11649 11655 11650 + 11656 11650 11655 + 11651 11650 11656 + 11656 11657 11651 + 11651 11657 11658 + 11652 11651 11658 + 11654 8681 8680 + 8680 11659 11654 + 11660 11654 11659 + 11655 11654 11660 + 11660 11661 11655 + 11655 11661 11656 + 11662 11656 11661 + 11662 11657 11656 + 11657 11662 11663 + 11663 11658 11657 + 8685 11659 8680 + 11659 8685 11664 + 11664 11665 11659 + 11659 11665 11660 + 11666 11660 11665 + 11661 11660 11666 + 11666 11667 11661 + 11661 11667 11662 + 11663 11662 11667 + 11664 8685 11668 + 11668 11669 11664 + 11670 11664 11669 + 11665 11664 11670 + 11670 11671 11665 + 11665 11671 11666 + 11672 11666 11671 + 11667 11666 11672 + 8684 11668 8685 + 8690 11668 8684 + 11668 8690 11673 + 11673 11669 11668 + 11669 11673 11674 + 11674 11675 11669 + 11669 11675 11670 + 11676 11670 11675 + 11671 11670 11676 + 11676 11677 11671 + 11671 11677 11672 + 11673 8690 11678 + 11678 11679 11673 + 11674 11673 11679 + 11679 11680 11674 + 11681 11674 11680 + 11675 11674 11681 + 11681 11682 11675 + 11675 11682 11676 + 8689 11678 8690 + 11683 11678 8689 + 11678 11683 11684 + 11684 11679 11678 + 11679 11684 11685 + 11685 11680 11679 + 11680 11685 11686 + 11686 11687 11680 + 11680 11687 11681 + 8689 8695 11683 + 11683 8695 11688 + 11688 11689 11683 + 11684 11683 11689 + 11689 11690 11684 + 11685 11684 11690 + 11690 11691 11685 + 11686 11685 11691 + 11692 11688 8695 + 11693 11688 11692 + 11688 11693 11694 + 11694 11689 11688 + 11689 11694 11695 + 11695 11690 11689 + 11690 11695 11696 + 11696 11691 11690 + 8695 8694 11692 + 11697 11692 8694 + 11698 11692 11697 + 11692 11698 11693 + 11693 11698 11699 + 11699 11700 11693 + 11694 11693 11700 + 11700 11701 11694 + 11695 11694 11701 + 8694 8693 11697 + 11697 8693 11702 + 11702 11703 11697 + 11703 11704 11697 + 11705 11697 11704 + 11697 11705 11698 + 11698 11705 11706 + 11706 11699 11698 + 8692 11702 8693 + 11702 8692 11707 + 11707 11708 11702 + 11702 11708 11709 + 11709 11703 11702 + 11703 11709 11710 + 11703 11710 11711 + 11711 11704 11703 + 11707 8692 8691 + 8691 8640 11707 + 8587 11707 8640 + 11708 11707 8587 + 8587 11712 11708 + 11708 11712 11713 + 11713 11714 11708 + 11714 11709 11708 + 11710 11709 11714 + 8586 11712 8587 + 11712 8586 8593 + 8593 11713 11712 + 11715 11713 8593 + 11713 11715 11716 + 11716 11714 11713 + 11716 11717 11714 + 11714 11717 11710 + 11710 11717 11718 + 11718 11719 11710 + 11719 11711 11710 + 11715 8593 8592 + 8592 11720 11715 + 11716 11715 11720 + 11721 11716 11720 + 11717 11716 11721 + 11721 11718 11717 + 11721 11722 11718 + 11718 11722 11723 + 11723 11719 11718 + 11720 8592 8591 + 11720 8591 11724 + 11724 11725 11720 + 11720 11725 11726 + 11726 11727 11720 + 11727 11728 11720 + 11728 11721 11720 + 11722 11721 11728 + 11724 8591 8590 + 11729 11724 8590 + 11730 11724 11729 + 11725 11724 11730 + 11725 11730 11731 + 11731 11726 11725 + 11726 11731 11732 + 11726 11732 11733 + 11733 11727 11726 + 8590 11734 11729 + 11735 11729 11734 + 11729 11735 11736 + 11729 11736 11730 + 11730 11736 11737 + 11731 11730 11737 + 11738 11731 11737 + 11732 11731 11738 + 11739 11734 8590 + 11740 11734 11739 + 11734 11740 11735 + 11741 11735 11740 + 11736 11735 11741 + 11741 11742 11736 + 11736 11742 11737 + 8590 11743 11739 + 11744 11739 11743 + 11745 11739 11744 + 11739 11745 11740 + 8599 11743 8590 + 11743 8599 11746 + 11746 11747 11743 + 11743 11747 11744 + 11748 11744 11747 + 11749 11744 11748 + 11744 11749 11745 + 11750 11746 8599 + 11751 11746 11750 + 11747 11746 11751 + 11751 11752 11747 + 11747 11752 11748 + 11753 11748 11752 + 11754 11748 11753 + 11748 11754 11749 + 8599 11755 11750 + 11756 11750 11755 + 11757 11750 11756 + 11750 11757 11751 + 11758 11751 11757 + 11752 11751 11758 + 11758 11759 11752 + 11752 11759 11753 + 8598 11755 8599 + 11760 11755 8598 + 11755 11760 11756 + 11756 11760 11761 + 11761 11762 11756 + 11762 11763 11756 + 11764 11756 11763 + 11756 11764 11757 + 8598 8614 11760 + 11760 8614 11765 + 11765 11761 11760 + 8612 11761 11765 + 11761 8612 11766 + 11766 11762 11761 + 11766 11767 11762 + 11762 11767 11768 + 11768 11763 11762 + 8614 8613 11765 + 8612 11765 8613 + 11766 8612 8611 + 11769 11766 8611 + 11767 11766 11769 + 11769 11770 11767 + 11767 11770 11771 + 11771 11768 11767 + 11772 11768 11771 + 11763 11768 11772 + 11772 11773 11763 + 11763 11773 11764 + 8611 11774 11769 + 11775 11769 11774 + 11769 11775 11770 + 11770 11775 11776 + 11776 11777 11770 + 11770 11777 11771 + 8647 11774 8611 + 11774 8647 11778 + 11774 11778 11775 + 11776 11775 11778 + 11778 11779 11776 + 11629 11776 11779 + 11776 11629 11634 + 11634 11777 11776 + 11777 11634 11639 + 11639 11771 11777 + 11778 8647 11609 + 11609 11779 11778 + 11614 11779 11609 + 11779 11614 11629 + 11780 11781 11782 + 11783 11780 11782 + 11784 11780 11783 + 11780 11784 11785 + 11780 11785 11786 + 11786 11787 11780 + 11782 11788 11783 + 11788 11789 11783 + 11790 11783 11789 + 11791 11783 11790 + 11783 11791 11784 + 11792 11784 11791 + 11785 11784 11792 + 11793 11788 11782 + 11794 11788 11793 + 11788 11794 11795 + 11795 11789 11788 + 11796 11789 11795 + 11789 11796 11790 + 11782 11797 11793 + 11798 11793 11797 + 11799 11793 11798 + 11793 11799 11794 + 11794 11799 11800 + 11800 11801 11794 + 11795 11794 11801 + 11797 11782 11802 + 11802 11803 11797 + 11797 11803 11804 + 11804 11805 11797 + 11797 11805 11798 + 11802 11782 11787 + 11787 11806 11802 + 11807 11802 11806 + 11807 11808 11802 + 11808 11809 11802 + 11803 11802 11809 + 11809 11810 11803 + 11810 11804 11803 + 11806 11787 11786 + 11806 11786 11811 + 11811 11807 11806 + 11807 11811 11812 + 11807 11812 11808 + 11812 11813 11808 + 11813 11814 11808 + 11808 11814 11815 + 11815 11809 11808 + 11811 11786 11785 + 11816 11811 11785 + 11812 11811 11816 + 11816 11817 11812 + 11813 11812 11817 + 11818 11813 11817 + 11814 11813 11818 + 11818 11819 11814 + 11814 11819 11815 + 11785 11820 11816 + 11821 11816 11820 + 11821 11817 11816 + 11817 11821 11822 + 11822 11823 11817 + 11817 11823 11818 + 11792 11820 11785 + 11792 11824 11820 + 11820 11824 11821 + 11821 11824 11825 + 11822 11821 11825 + 11825 11826 11822 + 11827 11822 11826 + 11822 11827 11828 + 11828 11823 11822 + 11824 11792 11829 + 11829 11825 11824 + 11829 11830 11825 + 11825 11830 11831 + 11831 11826 11825 + 11831 11832 11826 + 11826 11832 11827 + 11833 11827 11832 + 11828 11827 11833 + 11791 11829 11792 + 11830 11829 11791 + 11791 11834 11830 + 11830 11834 11835 + 11831 11830 11835 + 11835 11836 11831 + 11832 11831 11836 + 11836 11837 11832 + 11832 11837 11838 + 11838 11833 11832 + 11790 11834 11791 + 11834 11790 11839 + 11839 11835 11834 + 11835 11839 11840 + 11840 11841 11835 + 11835 11841 11842 + 11842 11836 11835 + 11836 11842 11837 + 11843 11839 11790 + 11840 11839 11843 + 11843 11844 11840 + 11840 11844 11845 + 11845 11846 11840 + 11841 11840 11846 + 11846 11847 11841 + 11842 11841 11847 + 11790 11796 11843 + 11848 11843 11796 + 11843 11848 11849 + 11849 11844 11843 + 11844 11849 11850 + 11850 11845 11844 + 11796 11851 11848 + 11848 11851 11852 + 11852 11853 11848 + 11849 11848 11853 + 11853 11854 11849 + 11850 11849 11854 + 11795 11851 11796 + 11851 11795 11855 + 11855 11852 11851 + 11852 11855 11856 + 11856 11857 11852 + 11852 11857 11858 + 11858 11853 11852 + 11854 11853 11858 + 11801 11855 11795 + 11856 11855 11801 + 11801 11859 11856 + 11860 11856 11859 + 11857 11856 11860 + 11860 11861 11857 + 11857 11861 11862 + 11862 11858 11857 + 11863 11858 11862 + 11858 11863 11854 + 11864 11859 11801 + 11859 11864 11865 + 11865 11866 11859 + 11859 11866 11860 + 11867 11860 11866 + 11861 11860 11867 + 11801 11800 11864 + 11864 11800 11868 + 11868 11869 11864 + 11865 11864 11869 + 11869 11870 11865 + 11871 11865 11870 + 11866 11865 11871 + 11871 11872 11866 + 11866 11872 11867 + 11873 11868 11800 + 11874 11868 11873 + 11869 11868 11874 + 11875 11869 11874 + 11869 11875 11876 + 11876 11870 11869 + 11800 11799 11873 + 11799 11877 11873 + 11878 11873 11877 + 11879 11873 11878 + 11873 11879 11874 + 11874 11879 11880 + 11880 11881 11874 + 11875 11874 11881 + 11798 11877 11799 + 11798 11882 11877 + 11877 11882 11878 + 11878 11882 11883 + 11883 11884 11878 + 11885 11878 11884 + 11878 11885 11879 + 11879 11885 11886 + 11886 11880 11879 + 11882 11798 11805 + 11805 11883 11882 + 11883 11805 11804 + 11804 11887 11883 + 11883 11887 11888 + 11888 11884 11883 + 11888 11889 11884 + 11884 11889 11885 + 11886 11885 11889 + 11889 11890 11886 + 11891 11886 11890 + 11880 11886 11891 + 11887 11804 11810 + 11810 11892 11887 + 11888 11887 11892 + 11893 11888 11892 + 11889 11888 11893 + 11893 11890 11889 + 11894 11890 11893 + 11890 11894 11891 + 11892 11810 11809 + 11809 11815 11892 + 11892 11815 11895 + 11895 11896 11892 + 11892 11896 11893 + 11897 11893 11896 + 11893 11897 11894 + 11819 11895 11815 + 11898 11895 11819 + 11895 11898 11899 + 11899 11896 11895 + 11896 11899 11897 + 11900 11897 11899 + 11894 11897 11900 + 11900 11901 11894 + 11894 11901 11902 + 11891 11894 11902 + 11819 11903 11898 + 11903 11904 11898 + 11904 11905 11898 + 11899 11898 11905 + 11905 11906 11899 + 11899 11906 11900 + 11907 11900 11906 + 11900 11907 11901 + 11903 11819 11818 + 11903 11818 11908 + 11904 11903 11908 + 11909 11904 11908 + 11904 11909 11910 + 11910 11911 11904 + 11905 11904 11911 + 11912 11905 11911 + 11906 11905 11912 + 11908 11818 11823 + 11823 11828 11908 + 11913 11908 11828 + 11913 11909 11908 + 11913 11914 11909 + 11914 11910 11909 + 11910 11914 11915 + 11915 11916 11910 + 11911 11910 11916 + 11916 11917 11911 + 11912 11911 11917 + 11833 11913 11828 + 11913 11833 11918 + 11918 11914 11913 + 11914 11918 11915 + 11918 11919 11915 + 11915 11919 11920 + 11915 11920 11916 + 11920 11921 11916 + 11916 11921 11917 + 11918 11833 11838 + 11838 11922 11918 + 11919 11918 11922 + 11923 11919 11922 + 11920 11919 11923 + 11923 11924 11920 + 11921 11920 11924 + 11925 11921 11924 + 11926 11921 11925 + 11921 11926 11917 + 11927 11922 11838 + 11922 11927 11928 + 11928 11923 11922 + 11923 11928 11929 + 11929 11924 11923 + 11924 11929 11930 + 11930 11925 11924 + 11931 11925 11930 + 11925 11931 11926 + 11838 11932 11927 + 11927 11932 11933 + 11933 11934 11927 + 11927 11934 11935 + 11935 11928 11927 + 11929 11928 11935 + 11935 11936 11929 + 11930 11929 11936 + 11932 11838 11937 + 11937 11938 11932 + 11938 11933 11932 + 11938 11939 11933 + 11939 11940 11933 + 11934 11933 11940 + 11941 11937 11838 + 11942 11937 11941 + 11942 11939 11937 + 11939 11938 11937 + 11837 11941 11838 + 11943 11941 11837 + 11943 11944 11941 + 11941 11944 11942 + 11945 11942 11944 + 11939 11942 11945 + 11945 11946 11939 + 11939 11946 11940 + 11947 11940 11946 + 11940 11947 11934 + 11837 11842 11943 + 11847 11943 11842 + 11944 11943 11847 + 11847 11948 11944 + 11944 11948 11945 + 11949 11945 11948 + 11946 11945 11949 + 11949 11950 11946 + 11946 11950 11947 + 11951 11947 11950 + 11934 11947 11951 + 11951 11935 11934 + 11936 11935 11951 + 11952 11948 11847 + 11948 11952 11949 + 11953 11949 11952 + 11950 11949 11953 + 11953 11954 11950 + 11950 11954 11951 + 11955 11951 11954 + 11951 11955 11936 + 11847 11846 11952 + 11952 11846 11845 + 11845 11956 11952 + 11952 11956 11953 + 11957 11953 11956 + 11953 11957 11958 + 11958 11954 11953 + 11954 11958 11955 + 11959 11955 11958 + 11936 11955 11959 + 11960 11956 11845 + 11956 11960 11957 + 11957 11960 11961 + 11961 11962 11957 + 11958 11957 11962 + 11962 11963 11958 + 11958 11963 11964 + 11964 11959 11958 + 11845 11850 11960 + 11960 11850 11965 + 11965 11961 11960 + 11961 11965 11966 + 11966 11967 11961 + 11961 11967 11968 + 11968 11962 11961 + 11963 11962 11968 + 11854 11965 11850 + 11966 11965 11854 + 11854 11863 11966 + 11969 11966 11863 + 11967 11966 11969 + 11969 11970 11967 + 11967 11970 11971 + 11971 11968 11967 + 11972 11968 11971 + 11968 11972 11963 + 11963 11972 11973 + 11973 11964 11963 + 11863 11974 11969 + 11975 11969 11974 + 11970 11969 11975 + 11975 11976 11970 + 11970 11976 11977 + 11977 11971 11970 + 11978 11971 11977 + 11971 11978 11972 + 11862 11974 11863 + 11974 11862 11979 + 11979 11980 11974 + 11974 11980 11975 + 11981 11975 11980 + 11976 11975 11981 + 11981 11982 11976 + 11977 11976 11982 + 11979 11862 11861 + 11861 11983 11979 + 11984 11979 11983 + 11980 11979 11984 + 11984 11985 11980 + 11980 11985 11981 + 11986 11981 11985 + 11982 11981 11986 + 11867 11983 11861 + 11983 11867 11987 + 11987 11988 11983 + 11983 11988 11984 + 11989 11984 11988 + 11985 11984 11989 + 11989 11990 11985 + 11985 11990 11986 + 11987 11867 11872 + 11872 11991 11987 + 11992 11987 11991 + 11988 11987 11992 + 11992 11993 11988 + 11988 11993 11989 + 11994 11989 11993 + 11989 11994 11995 + 11990 11989 11995 + 11996 11991 11872 + 11991 11996 11997 + 11997 11998 11991 + 11991 11998 11992 + 11992 11998 11999 + 11999 12000 11992 + 11993 11992 12000 + 11872 11871 11996 + 11996 11871 12001 + 12001 12002 11996 + 11997 11996 12002 + 12002 12003 11997 + 12004 11997 12003 + 11998 11997 12004 + 12004 11999 11998 + 11870 12001 11871 + 12005 12001 11870 + 12001 12005 12006 + 12006 12002 12001 + 12002 12006 12007 + 12007 12003 12002 + 12003 12007 12008 + 12008 12009 12003 + 12003 12009 12004 + 11870 11876 12005 + 12005 11876 12010 + 12010 12011 12005 + 12006 12005 12011 + 12011 12012 12006 + 12007 12006 12012 + 12012 12013 12007 + 12008 12007 12013 + 12014 12010 11876 + 12015 12010 12014 + 12010 12015 12016 + 12016 12011 12010 + 12011 12016 12017 + 12017 12012 12011 + 12012 12017 12018 + 12018 12013 12012 + 11876 11875 12014 + 11881 12014 11875 + 12019 12014 11881 + 12014 12019 12015 + 12020 12015 12019 + 12016 12015 12020 + 12020 12021 12016 + 12017 12016 12021 + 12021 12022 12017 + 12018 12017 12022 + 11881 12023 12019 + 12019 12023 12024 + 12024 12025 12019 + 12019 12025 12020 + 12026 12020 12025 + 12020 12026 12027 + 12027 12021 12020 + 12023 11881 11880 + 11880 12028 12023 + 12024 12023 12028 + 12028 12029 12024 + 12030 12024 12029 + 12025 12024 12030 + 12031 12025 12030 + 12025 12031 12026 + 11891 12028 11880 + 12028 11891 12032 + 12032 12029 12028 + 12033 12029 12032 + 12029 12033 12030 + 12030 12033 12034 + 12034 12035 12030 + 12031 12030 12035 + 12035 12036 12031 + 12026 12031 12036 + 11902 12032 11891 + 12037 12032 11902 + 12032 12037 12033 + 12033 12037 12038 + 12038 12039 12033 + 12033 12039 12034 + 11902 12040 12037 + 12038 12037 12040 + 12040 12041 12038 + 12042 12038 12041 + 12038 12042 12039 + 12039 12042 12043 + 12043 12034 12039 + 12040 11902 12044 + 12040 12044 12045 + 12045 12041 12040 + 12046 12041 12045 + 12041 12046 12042 + 12043 12042 12046 + 11936 12043 12046 + 11959 12043 11936 + 11959 12034 12043 + 12044 11902 11901 + 11901 11907 12044 + 12045 12044 11907 + 12047 12045 11907 + 12048 12045 12047 + 12045 12048 12046 + 12046 12048 11931 + 11931 11930 12046 + 12046 11930 11936 + 12049 12047 11907 + 12050 12047 12049 + 12051 12047 12050 + 12047 12051 12048 + 11931 12048 12051 + 12051 11926 11931 + 12051 12050 11926 + 12050 11917 11926 + 11917 12050 11912 + 11906 12049 11907 + 11912 12049 11906 + 12049 11912 12050 + 12034 11959 11964 + 11964 12035 12034 + 12035 11964 11973 + 11973 12036 12035 + 12036 11973 12052 + 12052 12053 12036 + 12036 12053 12026 + 12027 12026 12053 + 12052 11973 11972 + 11972 11978 12052 + 12054 12052 11978 + 12053 12052 12054 + 12054 12055 12053 + 12053 12055 12027 + 12056 12027 12055 + 12021 12027 12056 + 12056 12022 12021 + 11978 12057 12054 + 12058 12054 12057 + 12055 12054 12058 + 12058 12059 12055 + 12055 12059 12056 + 12060 12056 12059 + 12022 12056 12060 + 12060 12061 12022 + 12022 12061 12018 + 11977 12057 11978 + 12057 11977 12062 + 12062 12063 12057 + 12057 12063 12058 + 12064 12058 12063 + 12059 12058 12064 + 12064 12065 12059 + 12059 12065 12060 + 12066 12060 12065 + 12061 12060 12066 + 11982 12062 11977 + 12067 12062 11982 + 12063 12062 12067 + 12067 12068 12063 + 12063 12068 12064 + 12069 12064 12068 + 12065 12064 12069 + 12069 12070 12065 + 12065 12070 12066 + 11982 12071 12067 + 12072 12067 12071 + 12068 12067 12072 + 12072 12073 12068 + 12068 12073 12069 + 12073 12074 12069 + 12074 12075 12069 + 12075 12070 12069 + 11986 12071 11982 + 12071 11986 12076 + 12076 12077 12071 + 12071 12077 12072 + 12078 12072 12077 + 12078 12073 12072 + 12078 12074 12073 + 12074 12078 12079 + 12079 12080 12074 + 12075 12074 12080 + 12076 11986 11990 + 11990 11995 12076 + 12081 12076 11995 + 12081 12077 12076 + 12081 12082 12077 + 12077 12082 12078 + 12079 12078 12082 + 11995 12083 12081 + 12084 12081 12083 + 12084 12079 12081 + 12079 12082 12081 + 12083 11995 11994 + 12085 12083 11994 + 12084 12083 12085 + 12086 12084 12085 + 12084 12086 12087 + 12079 12084 12087 + 12087 12088 12079 + 12088 12080 12079 + 12080 12088 12089 + 12089 12075 12080 + 12075 12089 12070 + 12085 11994 12090 + 12090 12091 12085 + 12086 12085 12091 + 12086 12091 12092 + 12093 12086 12092 + 12086 12093 12087 + 11993 12090 11994 + 12000 12090 11993 + 12091 12090 12000 + 12092 12091 12000 + 12092 12000 11999 + 11999 12094 12092 + 12093 12092 12094 + 12095 12093 12094 + 12093 12095 12087 + 12096 12094 11999 + 12094 12096 12095 + 12095 12096 12097 + 12098 12095 12097 + 12095 12098 12087 + 12096 11999 12004 + 12097 12096 12004 + 12009 12097 12004 + 12099 12097 12009 + 12097 12099 12098 + 12098 12099 12100 + 12098 12100 12101 + 12087 12098 12101 + 12087 12101 12102 + 12087 12102 12103 + 12088 12087 12103 + 12088 12103 12089 + 12070 12089 12103 + 12099 12009 12008 + 12099 12008 12104 + 12104 12100 12099 + 12101 12100 12104 + 12101 12104 12105 + 12101 12105 12106 + 12106 12102 12101 + 12102 12106 12066 + 12103 12102 12066 + 12103 12066 12070 + 12013 12104 12008 + 12105 12104 12013 + 12013 12018 12105 + 12105 12018 12061 + 12061 12106 12105 + 12066 12106 12061 + 12107 12108 12109 + 12110 12109 12108 + 12109 12110 12111 + 12111 12112 12109 + 12109 12112 12113 + 12113 12114 12109 + 12109 12114 12115 + 12115 12116 12109 + 12116 12117 12109 + 12108 12118 12110 + 12119 12110 12118 + 12111 12110 12119 + 12119 12120 12111 + 12111 12120 12121 + 12121 12122 12111 + 12112 12111 12122 + 12108 12123 12118 + 12118 12123 12124 + 12124 12125 12118 + 12118 12125 12119 + 12123 12108 12126 + 12124 12123 12126 + 12126 12127 12124 + 12128 12124 12127 + 12128 12125 12124 + 12125 12128 12129 + 12129 12130 12125 + 12125 12130 12119 + 12108 12117 12126 + 12126 12117 12131 + 12126 12131 12132 + 12132 12127 12126 + 12127 12132 12133 + 12133 12134 12127 + 12127 12134 12128 + 12129 12128 12134 + 12131 12117 12116 + 12116 12135 12131 + 12131 12135 12136 + 12132 12131 12136 + 12136 12137 12132 + 12133 12132 12137 + 12137 12138 12133 + 12139 12133 12138 + 12134 12133 12139 + 12140 12135 12116 + 12135 12140 12141 + 12141 12136 12135 + 12141 12142 12136 + 12136 12142 12143 + 12143 12137 12136 + 12138 12137 12143 + 12140 12116 12115 + 12115 12144 12140 + 12140 12144 12145 + 12141 12140 12145 + 12145 12146 12141 + 12142 12141 12146 + 12146 12147 12142 + 12143 12142 12147 + 12148 12144 12115 + 12144 12148 12149 + 12149 12145 12144 + 12145 12149 12150 + 12150 12151 12145 + 12145 12151 12152 + 12152 12146 12145 + 12147 12146 12152 + 12148 12115 12114 + 12114 12153 12148 + 12148 12153 12154 + 12154 12149 12148 + 12150 12149 12154 + 12154 12155 12150 + 12150 12155 12156 + 12156 12157 12150 + 12151 12150 12157 + 12113 12153 12114 + 12153 12113 12158 + 12158 12159 12153 + 12153 12159 12154 + 12159 12160 12154 + 12161 12154 12160 + 12154 12161 12162 + 12162 12155 12154 + 12156 12155 12162 + 12163 12158 12113 + 12164 12158 12163 + 12158 12164 12159 + 12159 12164 12165 + 12165 12160 12159 + 12165 12166 12160 + 12160 12166 12161 + 12113 12112 12163 + 12122 12163 12112 + 12163 12122 12167 + 12163 12167 12164 + 12164 12167 12168 + 12165 12164 12168 + 12168 12169 12165 + 12166 12165 12169 + 12169 12170 12166 + 12161 12166 12170 + 12170 12171 12161 + 12162 12161 12171 + 12167 12122 12121 + 12121 12168 12167 + 12172 12168 12121 + 12168 12172 12173 + 12173 12169 12168 + 12170 12169 12173 + 12173 12174 12170 + 12170 12174 12175 + 12175 12171 12170 + 12121 12176 12172 + 12172 12176 12177 + 12177 12178 12172 + 12173 12172 12178 + 12178 12179 12173 + 12174 12173 12179 + 12179 12180 12174 + 12175 12174 12180 + 12176 12121 12120 + 12120 12181 12176 + 12176 12181 12182 + 12182 12177 12176 + 12183 12177 12182 + 12177 12183 12178 + 12178 12183 12184 + 12184 12179 12178 + 12180 12179 12184 + 12181 12120 12119 + 12119 12185 12181 + 12181 12185 12186 + 12186 12187 12181 + 12181 12187 12182 + 12185 12119 12130 + 12130 12188 12185 + 12188 12186 12185 + 12188 12189 12186 + 12189 12190 12186 + 12191 12186 12190 + 12186 12191 12192 + 12192 12187 12186 + 12188 12130 12129 + 12188 12129 12193 + 12188 12193 12189 + 12193 12194 12189 + 12189 12194 12195 + 12190 12189 12195 + 12196 12190 12195 + 12197 12190 12196 + 12190 12197 12191 + 12193 12129 12198 + 12198 12199 12193 + 12194 12193 12199 + 12200 12194 12199 + 12195 12194 12200 + 12200 12201 12195 + 12196 12195 12201 + 12198 12129 12134 + 12139 12198 12134 + 12199 12198 12139 + 12139 12202 12199 + 12199 12202 12203 + 12203 12200 12199 + 12200 12203 12204 + 12204 12201 12200 + 12201 12204 12205 + 12205 12206 12201 + 12201 12206 12196 + 12202 12139 12207 + 12207 12208 12202 + 12203 12202 12208 + 12208 12209 12203 + 12204 12203 12209 + 12209 12210 12204 + 12204 12210 12211 + 12211 12205 12204 + 12138 12207 12139 + 12212 12207 12138 + 12208 12207 12212 + 12212 12213 12208 + 12208 12213 12214 + 12214 12209 12208 + 12210 12209 12214 + 12214 12215 12210 + 12210 12215 12216 + 12216 12211 12210 + 12138 12217 12212 + 12212 12217 12218 + 12218 12219 12212 + 12213 12212 12219 + 12219 12220 12213 + 12214 12213 12220 + 12220 12221 12214 + 12215 12214 12221 + 12143 12217 12138 + 12217 12143 12222 + 12222 12218 12217 + 12218 12222 12223 + 12223 12224 12218 + 12218 12224 12225 + 12225 12219 12218 + 12220 12219 12225 + 12147 12222 12143 + 12223 12222 12147 + 12147 12226 12223 + 12223 12226 12227 + 12227 12228 12223 + 12224 12223 12228 + 12228 12229 12224 + 12225 12224 12229 + 12152 12226 12147 + 12226 12152 12230 + 12230 12227 12226 + 12227 12230 12231 + 12231 12232 12227 + 12227 12232 12233 + 12233 12228 12227 + 12229 12228 12233 + 12234 12230 12152 + 12231 12230 12234 + 12234 12235 12231 + 12236 12231 12235 + 12232 12231 12236 + 12236 12237 12232 + 12232 12237 12238 + 12238 12233 12232 + 12152 12151 12234 + 12157 12234 12151 + 12234 12157 12239 + 12239 12235 12234 + 12235 12239 12240 + 12240 12241 12235 + 12235 12241 12236 + 12242 12236 12241 + 12237 12236 12242 + 12239 12157 12156 + 12156 12243 12239 + 12240 12239 12243 + 12243 12244 12240 + 12245 12240 12244 + 12241 12240 12245 + 12245 12246 12241 + 12241 12246 12242 + 12247 12243 12156 + 12243 12247 12248 + 12248 12244 12243 + 12244 12248 12249 + 12249 12250 12244 + 12244 12250 12245 + 12251 12245 12250 + 12246 12245 12251 + 12156 12252 12247 + 12247 12252 12253 + 12253 12254 12247 + 12248 12247 12254 + 12254 12255 12248 + 12249 12248 12255 + 12252 12156 12162 + 12253 12252 12162 + 12162 12256 12253 + 12257 12253 12256 + 12253 12257 12258 + 12258 12254 12253 + 12254 12258 12259 + 12259 12255 12254 + 12171 12256 12162 + 12260 12256 12171 + 12256 12260 12257 + 12261 12257 12260 + 12258 12257 12261 + 12261 12262 12258 + 12259 12258 12262 + 12262 12263 12259 + 12264 12259 12263 + 12255 12259 12264 + 12171 12175 12260 + 12260 12175 12265 + 12265 12266 12260 + 12260 12266 12261 + 12267 12261 12266 + 12261 12267 12268 + 12268 12262 12261 + 12262 12268 12269 + 12269 12263 12262 + 12180 12265 12175 + 12270 12265 12180 + 12266 12265 12270 + 12270 12271 12266 + 12266 12271 12267 + 12272 12267 12271 + 12268 12267 12272 + 12272 12273 12268 + 12269 12268 12273 + 12180 12274 12270 + 12275 12270 12274 + 12271 12270 12275 + 12275 12276 12271 + 12271 12276 12272 + 12277 12272 12276 + 12272 12277 12278 + 12278 12273 12272 + 12184 12274 12180 + 12274 12184 12279 + 12279 12280 12274 + 12274 12280 12275 + 12281 12275 12280 + 12275 12281 12282 + 12282 12276 12275 + 12276 12282 12277 + 12283 12277 12282 + 12278 12277 12283 + 12284 12279 12184 + 12285 12279 12284 + 12280 12279 12285 + 12285 12286 12280 + 12280 12286 12281 + 12281 12286 12287 + 12287 12288 12281 + 12282 12281 12288 + 12184 12183 12284 + 12182 12284 12183 + 12289 12284 12182 + 12284 12289 12285 + 12290 12285 12289 + 12286 12285 12290 + 12290 12287 12286 + 12290 12291 12287 + 12287 12291 12292 + 12292 12288 12287 + 12293 12288 12292 + 12288 12293 12282 + 12282 12293 12283 + 12182 12294 12289 + 12289 12294 12295 + 12295 12296 12289 + 12289 12296 12290 + 12291 12290 12296 + 12296 12297 12291 + 12291 12297 12298 + 12292 12291 12298 + 12294 12182 12187 + 12187 12192 12294 + 12192 12299 12294 + 12299 12295 12294 + 12297 12295 12299 + 12295 12297 12296 + 12300 12299 12192 + 12299 12300 12301 + 12299 12301 12297 + 12297 12301 12298 + 12192 12191 12300 + 12300 12191 12197 + 12197 12302 12300 + 12301 12300 12302 + 12302 12303 12301 + 12303 12302 12304 + 12303 12304 12305 + 12303 12305 12298 + 12304 12302 12197 + 12197 12306 12304 + 12307 12304 12306 + 12304 12307 12305 + 12305 12307 12308 + 12305 12308 12309 + 12309 12298 12305 + 12196 12306 12197 + 12306 12196 12206 + 12206 12310 12306 + 12310 12307 12306 + 12308 12307 12310 + 12310 12311 12308 + 12308 12311 12312 + 12312 12309 12308 + 12313 12309 12312 + 12298 12309 12313 + 12310 12206 12205 + 12205 12311 12310 + 12311 12205 12211 + 12211 12312 12311 + 12216 12312 12211 + 12312 12216 12313 + 12313 12216 12314 + 12315 12313 12314 + 12298 12313 12315 + 12315 12316 12298 + 12298 12316 12292 + 12216 12215 12314 + 12221 12314 12215 + 12314 12221 12317 + 12317 12318 12314 + 12314 12318 12319 + 12319 12320 12314 + 12314 12320 12315 + 12317 12221 12220 + 12220 12321 12317 + 12317 12321 12322 + 12322 12323 12317 + 12318 12317 12323 + 12323 12324 12318 + 12319 12318 12324 + 12225 12321 12220 + 12321 12225 12325 + 12325 12322 12321 + 12322 12325 12326 + 12326 12327 12322 + 12322 12327 12328 + 12328 12323 12322 + 12324 12323 12328 + 12229 12325 12225 + 12326 12325 12229 + 12229 12329 12326 + 12330 12326 12329 + 12327 12326 12330 + 12330 12331 12327 + 12328 12327 12331 + 12331 12332 12328 + 12333 12328 12332 + 12328 12333 12324 + 12233 12329 12229 + 12329 12233 12238 + 12238 12334 12329 + 12329 12334 12330 + 12335 12330 12334 + 12331 12330 12335 + 12335 12336 12331 + 12331 12336 12337 + 12337 12332 12331 + 12338 12332 12337 + 12332 12338 12333 + 12334 12238 12339 + 12339 12340 12334 + 12334 12340 12335 + 12341 12335 12340 + 12336 12335 12341 + 12341 12342 12336 + 12336 12342 12343 + 12343 12337 12336 + 12339 12238 12237 + 12237 12344 12339 + 12345 12339 12344 + 12340 12339 12345 + 12345 12346 12340 + 12340 12346 12341 + 12347 12341 12346 + 12342 12341 12347 + 12242 12344 12237 + 12344 12242 12348 + 12348 12349 12344 + 12344 12349 12345 + 12350 12345 12349 + 12346 12345 12350 + 12350 12351 12346 + 12346 12351 12347 + 12348 12242 12246 + 12246 12352 12348 + 12353 12348 12352 + 12349 12348 12353 + 12353 12354 12349 + 12349 12354 12350 + 12355 12350 12354 + 12351 12350 12355 + 12251 12352 12246 + 12352 12251 12356 + 12356 12357 12352 + 12352 12357 12353 + 12358 12353 12357 + 12354 12353 12358 + 12358 12359 12354 + 12354 12359 12355 + 12356 12251 12360 + 12360 12361 12356 + 12362 12356 12361 + 12357 12356 12362 + 12362 12363 12357 + 12357 12363 12358 + 12364 12358 12363 + 12359 12358 12364 + 12250 12360 12251 + 12365 12360 12250 + 12360 12365 12366 + 12366 12361 12360 + 12361 12366 12367 + 12367 12368 12361 + 12361 12368 12362 + 12369 12362 12368 + 12363 12362 12369 + 12250 12249 12365 + 12365 12249 12370 + 12370 12371 12365 + 12366 12365 12371 + 12371 12372 12366 + 12367 12366 12372 + 12372 12373 12367 + 12374 12367 12373 + 12368 12367 12374 + 12255 12370 12249 + 12264 12370 12255 + 12370 12264 12375 + 12375 12371 12370 + 12371 12375 12376 + 12376 12372 12371 + 12372 12376 12377 + 12377 12373 12372 + 12373 12377 12378 + 12378 12379 12373 + 12373 12379 12374 + 12375 12264 12380 + 12380 12381 12375 + 12376 12375 12381 + 12381 12382 12376 + 12376 12382 12383 + 12383 12377 12376 + 12378 12377 12383 + 12263 12380 12264 + 12384 12380 12263 + 12380 12384 12385 + 12385 12381 12380 + 12381 12385 12386 + 12386 12382 12381 + 12382 12386 12387 + 12387 12383 12382 + 12263 12269 12384 + 12384 12269 12388 + 12388 12389 12384 + 12385 12384 12389 + 12389 12390 12385 + 12386 12385 12390 + 12390 12391 12386 + 12387 12386 12391 + 12273 12388 12269 + 12392 12388 12273 + 12388 12392 12393 + 12393 12389 12388 + 12389 12393 12394 + 12394 12390 12389 + 12390 12394 12395 + 12395 12391 12390 + 12273 12278 12392 + 12392 12278 12396 + 12396 12397 12392 + 12393 12392 12397 + 12397 12398 12393 + 12394 12393 12398 + 12398 12399 12394 + 12395 12394 12399 + 12283 12396 12278 + 12400 12396 12283 + 12396 12400 12401 + 12401 12397 12396 + 12397 12401 12402 + 12402 12398 12397 + 12398 12402 12403 + 12403 12399 12398 + 12283 12404 12400 + 12400 12404 12405 + 12405 12406 12400 + 12401 12400 12406 + 12406 12407 12401 + 12402 12401 12407 + 12404 12283 12293 + 12293 12408 12404 + 12404 12408 12409 + 12405 12404 12409 + 12409 12410 12405 + 12411 12405 12410 + 12405 12411 12412 + 12412 12406 12405 + 12292 12408 12293 + 12408 12292 12316 + 12316 12409 12408 + 12316 12315 12409 + 12409 12315 12413 + 12413 12410 12409 + 12413 12414 12410 + 12410 12414 12411 + 12415 12411 12414 + 12412 12411 12415 + 12415 12416 12412 + 12417 12412 12416 + 12406 12412 12417 + 12417 12407 12406 + 12320 12413 12315 + 12414 12413 12320 + 12320 12418 12414 + 12414 12418 12415 + 12419 12415 12418 + 12415 12419 12420 + 12420 12416 12415 + 12416 12420 12421 + 12421 12422 12416 + 12416 12422 12417 + 12319 12418 12320 + 12418 12319 12419 + 12324 12419 12319 + 12420 12419 12324 + 12324 12333 12420 + 12421 12420 12333 + 12333 12338 12421 + 12423 12421 12338 + 12422 12421 12423 + 12423 12424 12422 + 12422 12424 12425 + 12425 12417 12422 + 12407 12417 12425 + 12425 12426 12407 + 12407 12426 12402 + 12338 12427 12423 + 12428 12423 12427 + 12424 12423 12428 + 12428 12429 12424 + 12424 12429 12430 + 12430 12425 12424 + 12426 12425 12430 + 12430 12431 12426 + 12402 12426 12431 + 12431 12403 12402 + 12337 12427 12338 + 12427 12337 12343 + 12343 12432 12427 + 12427 12432 12428 + 12433 12428 12432 + 12429 12428 12433 + 12433 12434 12429 + 12429 12434 12435 + 12435 12430 12429 + 12431 12430 12435 + 12432 12343 12436 + 12436 12437 12432 + 12432 12437 12433 + 12438 12433 12437 + 12434 12433 12438 + 12438 12439 12434 + 12434 12439 12440 + 12440 12435 12434 + 12436 12343 12342 + 12342 12441 12436 + 12442 12436 12441 + 12437 12436 12442 + 12442 12443 12437 + 12437 12443 12438 + 12444 12438 12443 + 12439 12438 12444 + 12347 12441 12342 + 12441 12347 12445 + 12445 12446 12441 + 12441 12446 12442 + 12447 12442 12446 + 12443 12442 12447 + 12447 12448 12443 + 12443 12448 12444 + 12445 12347 12351 + 12351 12449 12445 + 12450 12445 12449 + 12446 12445 12450 + 12450 12451 12446 + 12446 12451 12447 + 12452 12447 12451 + 12448 12447 12452 + 12355 12449 12351 + 12449 12355 12453 + 12453 12454 12449 + 12449 12454 12450 + 12455 12450 12454 + 12451 12450 12455 + 12455 12456 12451 + 12451 12456 12452 + 12453 12355 12359 + 12359 12457 12453 + 12458 12453 12457 + 12454 12453 12458 + 12458 12459 12454 + 12454 12459 12455 + 12460 12455 12459 + 12456 12455 12460 + 12460 12461 12456 + 12452 12456 12461 + 12364 12457 12359 + 12457 12364 12462 + 12462 12463 12457 + 12457 12463 12458 + 12464 12458 12463 + 12459 12458 12464 + 12464 12465 12459 + 12459 12465 12460 + 12460 12465 12466 + 12461 12460 12466 + 12467 12462 12364 + 12468 12462 12467 + 12462 12468 12469 + 12463 12462 12469 + 12463 12469 12464 + 12464 12469 12470 + 12465 12464 12470 + 12470 12466 12465 + 12364 12471 12467 + 12472 12467 12471 + 12467 12472 12473 + 12473 12474 12467 + 12467 12474 12468 + 12363 12471 12364 + 12369 12471 12363 + 12471 12369 12472 + 12472 12369 12475 + 12475 12476 12472 + 12476 12477 12472 + 12477 12473 12472 + 12473 12477 12478 + 12474 12473 12478 + 12478 12479 12474 + 12468 12474 12479 + 12368 12475 12369 + 12374 12475 12368 + 12475 12374 12480 + 12480 12476 12475 + 12476 12480 12481 + 12481 12477 12476 + 12477 12481 12482 + 12482 12478 12477 + 12478 12482 12483 + 12479 12478 12483 + 12470 12479 12483 + 12468 12479 12470 + 12469 12468 12470 + 12480 12374 12379 + 12379 12484 12480 + 12484 12485 12480 + 12485 12481 12480 + 12481 12485 12482 + 12483 12482 12485 + 12486 12484 12379 + 12484 12486 12487 + 12487 12485 12484 + 12485 12487 12483 + 12379 12378 12486 + 12486 12378 12488 + 12488 12489 12486 + 12489 12490 12486 + 12490 12487 12486 + 12487 12490 12483 + 12383 12488 12378 + 12491 12488 12383 + 12488 12491 12492 + 12492 12489 12488 + 12489 12492 12493 + 12493 12490 12489 + 12490 12493 12494 + 12494 12483 12490 + 12383 12387 12491 + 12491 12387 12495 + 12495 12496 12491 + 12492 12491 12496 + 12496 12497 12492 + 12497 12498 12492 + 12498 12493 12492 + 12493 12498 12494 + 12391 12495 12387 + 12499 12495 12391 + 12495 12499 12500 + 12500 12496 12495 + 12496 12500 12501 + 12501 12497 12496 + 12497 12501 12502 + 12502 12498 12497 + 12498 12502 12494 + 12391 12395 12499 + 12499 12395 12503 + 12503 12504 12499 + 12500 12499 12504 + 12504 12505 12500 + 12501 12500 12505 + 12505 12506 12501 + 12502 12501 12506 + 12399 12503 12395 + 12507 12503 12399 + 12503 12507 12508 + 12508 12504 12503 + 12504 12508 12509 + 12509 12505 12504 + 12505 12509 12510 + 12510 12506 12505 + 12399 12403 12507 + 12507 12403 12431 + 12431 12511 12507 + 12508 12507 12511 + 12511 12512 12508 + 12509 12508 12512 + 12512 12513 12509 + 12510 12509 12513 + 12513 12514 12510 + 12515 12510 12514 + 12506 12510 12515 + 12435 12511 12431 + 12511 12435 12440 + 12440 12512 12511 + 12512 12440 12516 + 12516 12513 12512 + 12513 12516 12517 + 12517 12514 12513 + 12514 12517 12518 + 12518 12519 12514 + 12514 12519 12515 + 12516 12440 12439 + 12439 12520 12516 + 12517 12516 12520 + 12520 12521 12517 + 12521 12522 12517 + 12522 12518 12517 + 12523 12518 12522 + 12518 12523 12524 + 12519 12518 12524 + 12515 12519 12524 + 12444 12520 12439 + 12520 12444 12525 + 12525 12521 12520 + 12521 12525 12526 + 12526 12522 12521 + 12522 12526 12527 + 12527 12523 12522 + 12525 12444 12448 + 12448 12528 12525 + 12528 12529 12525 + 12529 12526 12525 + 12526 12529 12527 + 12530 12527 12529 + 12527 12530 12466 + 12523 12527 12466 + 12452 12528 12448 + 12528 12452 12531 + 12531 12529 12528 + 12529 12531 12530 + 12531 12461 12530 + 12466 12530 12461 + 12531 12452 12461 + 12466 12470 12483 + 12523 12466 12483 + 12483 12494 12523 + 12494 12532 12523 + 12532 12524 12523 + 12524 12532 12533 + 12533 12515 12524 + 12515 12533 12506 + 12506 12533 12502 + 12502 12532 12494 + 12502 12533 12532 + 12534 12535 12536 + 12537 12535 12534 + 12537 12538 12535 + 12538 12539 12535 + 12535 12539 12540 + 12540 12541 12535 + 12535 12541 12542 + 12534 12543 12537 + 12537 12543 12544 + 12544 12545 12537 + 12545 12546 12537 + 12546 12538 12537 + 12547 12538 12546 + 12539 12538 12547 + 12543 12534 12548 + 12543 12548 12549 + 12549 12544 12543 + 12544 12549 12550 + 12550 12551 12544 + 12544 12551 12552 + 12552 12545 12544 + 12552 12546 12545 + 12548 12534 12553 + 12553 12554 12548 + 12548 12554 12555 + 12555 12556 12548 + 12556 12549 12548 + 12550 12549 12556 + 12553 12534 12542 + 12557 12553 12542 + 12558 12553 12557 + 12558 12554 12553 + 12554 12558 12559 + 12559 12555 12554 + 12560 12555 12559 + 12555 12560 12561 + 12561 12556 12555 + 12542 12562 12557 + 12563 12557 12562 + 12564 12557 12563 + 12557 12564 12558 + 12559 12558 12564 + 12564 12565 12559 + 12566 12559 12565 + 12559 12566 12560 + 12567 12562 12542 + 12562 12567 12568 + 12568 12569 12562 + 12562 12569 12563 + 12542 12570 12567 + 12571 12567 12570 + 12568 12567 12571 + 12571 12572 12568 + 12568 12572 12573 + 12573 12574 12568 + 12569 12568 12574 + 12575 12570 12542 + 12570 12575 12576 + 12576 12577 12570 + 12570 12577 12571 + 12578 12571 12577 + 12571 12578 12579 + 12579 12572 12571 + 12575 12542 12580 + 12580 12581 12575 + 12575 12581 12582 + 12576 12575 12582 + 12541 12580 12542 + 12583 12580 12541 + 12583 12581 12580 + 12581 12583 12584 + 12584 12582 12581 + 12541 12585 12583 + 12583 12585 12586 + 12586 12584 12583 + 12587 12584 12586 + 12582 12584 12587 + 12588 12585 12541 + 12585 12588 12589 + 12589 12586 12585 + 12586 12589 12590 + 12590 12591 12586 + 12586 12591 12587 + 12541 12540 12588 + 12588 12540 12592 + 12592 12593 12588 + 12589 12588 12593 + 12593 12594 12589 + 12590 12589 12594 + 12592 12540 12539 + 12539 12595 12592 + 12596 12592 12595 + 12592 12596 12597 + 12597 12593 12592 + 12593 12597 12598 + 12598 12594 12593 + 12547 12595 12539 + 12599 12595 12547 + 12595 12599 12596 + 12600 12596 12599 + 12597 12596 12600 + 12600 12601 12597 + 12597 12601 12602 + 12602 12598 12597 + 12603 12598 12602 + 12594 12598 12603 + 12547 12604 12599 + 12599 12604 12605 + 12605 12606 12599 + 12599 12606 12607 + 12607 12600 12599 + 12604 12547 12608 + 12608 12609 12604 + 12605 12604 12609 + 12609 12610 12605 + 12611 12605 12610 + 12605 12611 12612 + 12612 12606 12605 + 12546 12608 12547 + 12613 12608 12546 + 12609 12608 12613 + 12613 12614 12609 + 12609 12614 12615 + 12615 12610 12609 + 12616 12610 12615 + 12610 12616 12611 + 12617 12611 12616 + 12612 12611 12617 + 12546 12618 12613 + 12619 12613 12618 + 12614 12613 12619 + 12619 12620 12614 + 12615 12614 12620 + 12620 12621 12615 + 12622 12615 12621 + 12615 12622 12616 + 12552 12618 12546 + 12618 12552 12623 + 12623 12624 12618 + 12618 12624 12619 + 12624 12625 12619 + 12625 12626 12619 + 12620 12619 12626 + 12626 12627 12620 + 12621 12620 12627 + 12628 12623 12552 + 12623 12628 12629 + 12630 12623 12629 + 12624 12623 12630 + 12630 12625 12624 + 12625 12630 12631 + 12631 12632 12625 + 12626 12625 12632 + 12552 12551 12628 + 12633 12628 12551 + 12628 12633 12634 + 12634 12629 12628 + 12629 12634 12635 + 12635 12636 12629 + 12630 12629 12636 + 12636 12631 12630 + 12637 12631 12636 + 12637 12632 12631 + 12551 12550 12633 + 12638 12633 12550 + 12634 12633 12638 + 12638 12639 12634 + 12634 12639 12640 + 12640 12635 12634 + 12635 12640 12641 + 12642 12635 12641 + 12642 12636 12635 + 12550 12643 12638 + 12644 12638 12643 + 12638 12644 12645 + 12645 12639 12638 + 12640 12639 12645 + 12646 12640 12645 + 12647 12640 12646 + 12647 12641 12640 + 12556 12643 12550 + 12648 12643 12556 + 12643 12648 12644 + 12649 12644 12648 + 12645 12644 12649 + 12649 12650 12645 + 12646 12645 12650 + 12650 12651 12646 + 12651 12652 12646 + 12652 12647 12646 + 12556 12561 12648 + 12648 12561 12653 + 12653 12654 12648 + 12648 12654 12649 + 12649 12654 12655 + 12656 12649 12655 + 12650 12649 12656 + 12657 12650 12656 + 12651 12650 12657 + 12653 12561 12560 + 12560 12658 12653 + 12659 12653 12658 + 12654 12653 12659 + 12655 12654 12659 + 12655 12659 12660 + 12660 12661 12655 + 12655 12661 12656 + 12661 12662 12656 + 12657 12656 12662 + 12663 12658 12560 + 12664 12658 12663 + 12658 12664 12659 + 12660 12659 12664 + 12664 12665 12660 + 12666 12660 12665 + 12660 12666 12667 + 12667 12661 12660 + 12662 12661 12667 + 12560 12566 12663 + 12663 12566 12668 + 12668 12669 12663 + 12670 12663 12669 + 12663 12670 12664 + 12664 12670 12671 + 12671 12665 12664 + 12672 12665 12671 + 12665 12672 12666 + 12565 12668 12566 + 12668 12565 12673 + 12673 12674 12668 + 12668 12674 12675 + 12675 12669 12668 + 12676 12669 12675 + 12669 12676 12670 + 12671 12670 12676 + 12673 12565 12564 + 12564 12677 12673 + 12673 12677 12678 + 12678 12679 12673 + 12674 12673 12679 + 12679 12680 12674 + 12675 12674 12680 + 12563 12677 12564 + 12677 12563 12681 + 12681 12678 12677 + 12678 12681 12682 + 12682 12683 12678 + 12678 12683 12684 + 12684 12679 12678 + 12679 12684 12685 + 12685 12680 12679 + 12686 12681 12563 + 12682 12681 12686 + 12563 12569 12686 + 12574 12686 12569 + 12686 12574 12687 + 12687 12688 12686 + 12686 12688 12682 + 12687 12574 12573 + 12573 12689 12687 + 12687 12689 12690 + 12690 12691 12687 + 12688 12687 12691 + 12691 12692 12688 + 12682 12688 12692 + 12689 12573 12693 + 12693 12694 12689 + 12689 12694 12695 + 12695 12690 12689 + 12696 12690 12695 + 12690 12696 12697 + 12697 12691 12690 + 12692 12691 12697 + 12693 12573 12572 + 12572 12579 12693 + 12698 12693 12579 + 12694 12693 12698 + 12698 12699 12694 + 12694 12699 12700 + 12700 12701 12694 + 12701 12695 12694 + 12702 12695 12701 + 12702 12696 12695 + 12579 12703 12698 + 12704 12698 12703 + 12698 12704 12705 + 12705 12699 12698 + 12699 12705 12706 + 12706 12700 12699 + 12707 12703 12579 + 12708 12703 12707 + 12703 12708 12704 + 12704 12708 12709 + 12709 12710 12704 + 12705 12704 12710 + 12579 12578 12707 + 12711 12707 12578 + 12712 12707 12711 + 12707 12712 12708 + 12708 12712 12713 + 12713 12714 12708 + 12708 12714 12709 + 12578 12715 12711 + 12716 12711 12715 + 12717 12711 12716 + 12711 12717 12712 + 12712 12717 12718 + 12713 12712 12718 + 12577 12715 12578 + 12715 12577 12576 + 12576 12719 12715 + 12715 12719 12716 + 12716 12719 12720 + 12720 12721 12716 + 12722 12716 12721 + 12716 12722 12717 + 12719 12576 12723 + 12723 12720 12719 + 12720 12723 12724 + 12724 12725 12720 + 12720 12725 12726 + 12726 12721 12720 + 12727 12721 12726 + 12721 12727 12722 + 12582 12723 12576 + 12724 12723 12582 + 12582 12728 12724 + 12724 12728 12729 + 12729 12730 12724 + 12725 12724 12730 + 12730 12731 12725 + 12726 12725 12731 + 12587 12728 12582 + 12728 12587 12732 + 12732 12729 12728 + 12729 12732 12733 + 12733 12734 12729 + 12730 12729 12734 + 12735 12730 12734 + 12731 12730 12735 + 12736 12732 12587 + 12732 12736 12737 + 12733 12732 12737 + 12738 12733 12737 + 12734 12733 12738 + 12738 12739 12734 + 12735 12734 12739 + 12587 12591 12736 + 12740 12736 12591 + 12737 12736 12740 + 12741 12737 12740 + 12742 12737 12741 + 12737 12742 12738 + 12742 12743 12738 + 12743 12744 12738 + 12744 12739 12738 + 12591 12590 12740 + 12745 12740 12590 + 12741 12740 12745 + 12745 12746 12741 + 12741 12746 12747 + 12747 12742 12741 + 12748 12742 12747 + 12748 12743 12742 + 12590 12749 12745 + 12750 12745 12749 + 12745 12750 12751 + 12751 12746 12745 + 12752 12746 12751 + 12746 12752 12747 + 12748 12747 12752 + 12594 12749 12590 + 12603 12749 12594 + 12749 12603 12750 + 12753 12750 12603 + 12751 12750 12753 + 12753 12754 12751 + 12751 12754 12755 + 12755 12752 12751 + 12756 12752 12755 + 12756 12757 12752 + 12752 12757 12748 + 12603 12758 12753 + 12759 12753 12758 + 12754 12753 12759 + 12760 12754 12759 + 12761 12754 12760 + 12754 12761 12755 + 12755 12761 12762 + 12756 12755 12762 + 12602 12758 12603 + 12763 12758 12602 + 12758 12763 12759 + 12764 12759 12763 + 12760 12759 12764 + 12764 12765 12760 + 12760 12765 12766 + 12766 12767 12760 + 12767 12761 12760 + 12602 12768 12763 + 12763 12768 12769 + 12769 12770 12763 + 12763 12770 12764 + 12771 12764 12770 + 12772 12764 12771 + 12772 12765 12764 + 12768 12602 12601 + 12601 12773 12768 + 12769 12768 12773 + 12773 12774 12769 + 12775 12769 12774 + 12769 12775 12776 + 12776 12770 12769 + 12770 12776 12771 + 12773 12601 12600 + 12600 12777 12773 + 12773 12777 12778 + 12778 12774 12773 + 12779 12774 12778 + 12774 12779 12775 + 12727 12775 12779 + 12776 12775 12727 + 12727 12780 12776 + 12771 12776 12780 + 12777 12600 12781 + 12781 12782 12777 + 12782 12778 12777 + 12778 12782 12718 + 12783 12778 12718 + 12778 12783 12779 + 12600 12607 12781 + 12781 12607 12784 + 12784 12785 12781 + 12781 12785 12786 + 12786 12782 12781 + 12718 12782 12786 + 12784 12607 12787 + 12787 12788 12784 + 12784 12788 12789 + 12789 12790 12784 + 12785 12784 12790 + 12790 12791 12785 + 12786 12785 12791 + 12606 12787 12607 + 12606 12612 12787 + 12612 12792 12787 + 12787 12792 12793 + 12793 12788 12787 + 12788 12793 12794 + 12794 12789 12788 + 12792 12612 12795 + 12796 12792 12795 + 12793 12792 12796 + 12796 12797 12793 + 12793 12797 12798 + 12798 12794 12793 + 12799 12794 12798 + 12789 12794 12799 + 12617 12795 12612 + 12800 12795 12617 + 12795 12800 12801 + 12801 12796 12795 + 12802 12796 12801 + 12802 12797 12796 + 12798 12797 12802 + 12803 12798 12802 + 12804 12798 12803 + 12798 12804 12799 + 12617 12805 12800 + 12800 12805 12672 + 12672 12806 12800 + 12800 12806 12807 + 12801 12800 12807 + 12808 12801 12807 + 12802 12801 12808 + 12805 12617 12809 + 12809 12810 12805 + 12805 12810 12666 + 12666 12672 12805 + 12616 12809 12617 + 12811 12809 12616 + 12811 12810 12809 + 12811 12812 12810 + 12810 12812 12667 + 12667 12666 12810 + 12616 12622 12811 + 12811 12622 12813 + 12813 12814 12811 + 12814 12815 12811 + 12815 12812 12811 + 12667 12812 12815 + 12815 12816 12667 + 12816 12662 12667 + 12621 12813 12622 + 12813 12621 12817 + 12817 12818 12813 + 12813 12818 12819 + 12819 12814 12813 + 12819 12820 12814 + 12820 12815 12814 + 12815 12820 12821 + 12821 12816 12815 + 12817 12621 12627 + 12817 12627 12822 + 12822 12823 12817 + 12818 12817 12823 + 12823 12824 12818 + 12819 12818 12824 + 12824 12825 12819 + 12825 12826 12819 + 12826 12820 12819 + 12827 12822 12627 + 12828 12822 12827 + 12828 12829 12822 + 12823 12822 12829 + 12830 12823 12829 + 12830 12824 12823 + 12627 12626 12827 + 12632 12827 12626 + 12827 12632 12831 + 12828 12827 12831 + 12832 12828 12831 + 12829 12828 12832 + 12832 12833 12829 + 12830 12829 12833 + 12833 12834 12830 + 12834 12835 12830 + 12830 12835 12824 + 12637 12831 12632 + 12831 12637 12836 + 12836 12837 12831 + 12832 12831 12837 + 12838 12832 12837 + 12833 12832 12838 + 12838 12834 12833 + 12834 12838 12839 + 12839 12835 12834 + 12824 12835 12839 + 12839 12825 12824 + 12839 12826 12825 + 12637 12840 12836 + 12840 12841 12836 + 12842 12836 12841 + 12836 12842 12843 + 12843 12837 12836 + 12837 12843 12838 + 12844 12838 12843 + 12838 12844 12839 + 12839 12844 12826 + 12636 12840 12637 + 12642 12840 12636 + 12840 12642 12841 + 12642 12845 12841 + 12841 12845 12846 + 12846 12847 12841 + 12841 12847 12842 + 12641 12845 12642 + 12846 12845 12641 + 12641 12647 12846 + 12846 12647 12652 + 12847 12846 12652 + 12652 12848 12847 + 12842 12847 12848 + 12848 12849 12842 + 12842 12849 12850 + 12843 12842 12850 + 12850 12844 12843 + 12850 12851 12844 + 12851 12826 12844 + 12820 12826 12851 + 12848 12652 12651 + 12848 12651 12852 + 12848 12852 12853 + 12853 12849 12848 + 12850 12849 12853 + 12850 12853 12851 + 12851 12853 12821 + 12821 12820 12851 + 12852 12651 12657 + 12657 12854 12852 + 12854 12853 12852 + 12853 12854 12821 + 12821 12854 12816 + 12854 12662 12816 + 12662 12854 12657 + 12671 12806 12672 + 12806 12671 12855 + 12855 12807 12806 + 12676 12855 12671 + 12856 12855 12676 + 12807 12855 12856 + 12856 12857 12807 + 12807 12857 12858 + 12858 12859 12807 + 12807 12859 12808 + 12676 12860 12856 + 12861 12856 12860 + 12857 12856 12861 + 12861 12862 12857 + 12858 12857 12862 + 12675 12860 12676 + 12860 12675 12863 + 12863 12864 12860 + 12860 12864 12861 + 12864 12865 12861 + 12866 12861 12865 + 12862 12861 12866 + 12680 12863 12675 + 12867 12863 12680 + 12863 12867 12868 + 12868 12864 12863 + 12864 12868 12869 + 12869 12865 12864 + 12869 12870 12865 + 12865 12870 12866 + 12680 12685 12867 + 12871 12867 12685 + 12868 12867 12871 + 12871 12872 12868 + 12868 12872 12873 + 12873 12869 12868 + 12870 12869 12873 + 12873 12874 12870 + 12866 12870 12874 + 12875 12866 12874 + 12862 12866 12875 + 12685 12876 12871 + 12877 12871 12876 + 12871 12877 12878 + 12878 12872 12871 + 12872 12878 12879 + 12879 12873 12872 + 12873 12879 12880 + 12880 12874 12873 + 12881 12876 12685 + 12881 12882 12876 + 12876 12882 12877 + 12877 12882 12883 + 12883 12884 12877 + 12878 12877 12884 + 12884 12885 12878 + 12879 12878 12885 + 12685 12684 12881 + 12881 12684 12683 + 12683 12886 12881 + 12882 12881 12886 + 12886 12887 12882 + 12882 12887 12883 + 12888 12883 12887 + 12889 12883 12888 + 12883 12889 12890 + 12890 12884 12883 + 12885 12884 12890 + 12891 12886 12683 + 12887 12886 12891 + 12887 12891 12888 + 12888 12891 12682 + 12892 12888 12682 + 12889 12888 12892 + 12892 12893 12889 + 12893 12894 12889 + 12894 12890 12889 + 12683 12682 12891 + 12892 12895 12893 + 12895 12892 12896 + 12896 12897 12895 + 12895 12897 12898 + 12899 12895 12898 + 12892 12692 12896 + 12697 12896 12692 + 12896 12697 12900 + 12900 12897 12896 + 12897 12900 12901 + 12901 12898 12897 + 12902 12898 12901 + 12692 12892 12682 + 12899 12898 12903 + 12903 12904 12899 + 12893 12899 12904 + 12904 12894 12893 + 12894 12904 12905 + 12894 12905 12890 + 12905 12906 12890 + 12890 12906 12885 + 12905 12904 12903 + 12903 12907 12905 + 12906 12905 12907 + 12907 12908 12906 + 12885 12906 12908 + 12908 12909 12885 + 12885 12909 12879 + 12880 12879 12909 + 12910 12907 12903 + 12907 12910 12911 + 12911 12908 12907 + 12908 12911 12912 + 12912 12909 12908 + 12909 12912 12880 + 12880 12912 12913 + 12913 12914 12880 + 12874 12880 12914 + 12903 12915 12910 + 12910 12915 12916 + 12916 12917 12910 + 12910 12917 12918 + 12918 12911 12910 + 12912 12911 12918 + 12918 12913 12912 + 12919 12915 12903 + 12920 12915 12919 + 12920 12916 12915 + 12921 12916 12920 + 12917 12916 12921 + 12917 12921 12922 + 12922 12923 12917 + 12917 12923 12918 + 12902 12919 12903 + 12924 12919 12902 + 12919 12924 12925 + 12925 12920 12919 + 12926 12920 12925 + 12920 12926 12921 + 12921 12926 12927 + 12927 12922 12921 + 12924 12902 12901 + 12925 12924 12901 + 12901 12928 12925 + 12929 12925 12928 + 12925 12929 12926 + 12926 12929 12927 + 12930 12928 12901 + 12931 12928 12930 + 12928 12931 12929 + 12932 12929 12931 + 12929 12932 12927 + 12901 12900 12930 + 12930 12900 12697 + 12697 12696 12930 + 12933 12930 12696 + 12930 12933 12931 + 12931 12933 12934 + 12931 12934 12932 + 12932 12934 12935 + 12936 12932 12935 + 12932 12936 12927 + 12696 12702 12933 + 12937 12933 12702 + 12933 12937 12934 + 12935 12934 12937 + 12937 12938 12935 + 12935 12938 12939 + 12939 12940 12935 + 12936 12935 12940 + 12702 12941 12937 + 12938 12937 12941 + 12941 12942 12938 + 12938 12942 12943 + 12943 12944 12938 + 12944 12945 12938 + 12945 12939 12938 + 12701 12941 12702 + 12942 12941 12701 + 12942 12701 12700 + 12700 12943 12942 + 12946 12943 12700 + 12943 12946 12947 + 12947 12944 12943 + 12944 12947 12948 + 12948 12949 12944 + 12944 12949 12950 + 12950 12945 12944 + 12700 12706 12946 + 12946 12706 12951 + 12951 12952 12946 + 12946 12952 12953 + 12953 12947 12946 + 12948 12947 12953 + 12954 12951 12706 + 12955 12951 12954 + 12955 12952 12951 + 12952 12955 12956 + 12956 12953 12952 + 12957 12953 12956 + 12953 12957 12948 + 12706 12705 12954 + 12705 12958 12954 + 12959 12954 12958 + 12960 12954 12959 + 12954 12960 12955 + 12960 12961 12955 + 12961 12956 12955 + 12962 12956 12961 + 12956 12962 12957 + 12710 12958 12705 + 12958 12710 12963 + 12958 12963 12959 + 12964 12959 12963 + 12965 12959 12964 + 12959 12965 12960 + 12960 12965 12966 + 12966 12961 12960 + 12963 12710 12709 + 12709 12967 12963 + 12963 12967 12964 + 12967 12709 12968 + 12967 12968 12969 + 12969 12970 12967 + 12967 12970 12964 + 12968 12709 12714 + 12714 12971 12968 + 12968 12971 12972 + 12972 12969 12968 + 12973 12969 12972 + 12973 12970 12969 + 12970 12973 12974 + 12974 12975 12970 + 12970 12975 12964 + 12971 12714 12713 + 12713 12976 12971 + 12971 12976 12977 + 12977 12978 12971 + 12971 12978 12972 + 12979 12972 12978 + 12980 12972 12979 + 12972 12980 12973 + 12974 12973 12980 + 12976 12713 12981 + 12981 12982 12976 + 12977 12976 12982 + 12982 12983 12977 + 12984 12977 12983 + 12977 12984 12985 + 12985 12978 12977 + 12978 12985 12979 + 12718 12981 12713 + 12986 12981 12718 + 12982 12981 12986 + 12986 12987 12982 + 12982 12987 12988 + 12988 12983 12982 + 12989 12983 12988 + 12983 12989 12984 + 12990 12984 12989 + 12985 12984 12990 + 12718 12991 12986 + 12986 12991 12992 + 12992 12993 12986 + 12987 12986 12993 + 12993 12994 12987 + 12988 12987 12994 + 12786 12991 12718 + 12991 12786 12995 + 12995 12992 12991 + 12992 12995 12996 + 12996 12997 12992 + 12992 12997 12998 + 12998 12993 12992 + 12994 12993 12998 + 12791 12995 12786 + 12996 12995 12791 + 12791 12999 12996 + 13000 12996 12999 + 12997 12996 13000 + 13000 13001 12997 + 12998 12997 13001 + 13001 13002 12998 + 13003 12998 13002 + 12998 13003 12994 + 13004 12999 12791 + 12999 13004 13005 + 13005 13006 12999 + 12999 13006 13000 + 13006 13007 13000 + 13007 13008 13000 + 13001 13000 13008 + 12791 12790 13004 + 13004 12790 12789 + 12789 13009 13004 + 13004 13009 13010 + 13010 13005 13004 + 13005 13010 13011 + 13012 13005 13011 + 13006 13005 13012 + 13012 13007 13006 + 12799 13009 12789 + 13009 12799 13013 + 13013 13010 13009 + 13011 13010 13013 + 13014 13011 13013 + 13015 13011 13014 + 13012 13011 13015 + 13015 13016 13012 + 13007 13012 13016 + 13016 13017 13007 + 13008 13007 13017 + 13018 13013 12799 + 13014 13013 13018 + 13018 13019 13014 + 13014 13019 13020 + 13020 13015 13014 + 13021 13015 13020 + 13021 13022 13015 + 13016 13015 13022 + 12799 12804 13018 + 13018 12804 13023 + 13024 13018 13023 + 13019 13018 13024 + 13025 13019 13024 + 13026 13019 13025 + 13019 13026 13020 + 13020 13026 13027 + 13021 13020 13027 + 13023 12804 12803 + 13023 12803 13028 + 13028 13029 13023 + 13023 13029 13030 + 13030 13024 13023 + 13025 13024 13030 + 13030 13031 13025 + 13032 13025 13031 + 13032 13026 13025 + 13028 12803 12802 + 12802 13033 13028 + 13034 13028 13033 + 13028 13034 13035 + 13035 13029 13028 + 13029 13035 13036 + 13036 13030 13029 + 13030 13036 13037 + 13037 13031 13030 + 12808 13033 12802 + 13038 13033 12808 + 13033 13038 13034 + 13034 13038 13039 + 13039 13040 13034 + 13035 13034 13040 + 13040 13041 13035 + 13035 13041 13042 + 13042 13036 13035 + 13037 13036 13042 + 12808 13043 13038 + 13038 13043 12989 + 12989 13039 13038 + 12988 13039 12989 + 13039 12988 13044 + 13044 13040 13039 + 13040 13044 13045 + 13045 13041 13040 + 13043 12808 12859 + 12859 12990 13043 + 12989 13043 12990 + 12990 12859 12858 + 12858 13046 12990 + 12990 13046 12985 + 12979 12985 13046 + 13046 13047 12979 + 13048 12979 13047 + 12979 13048 12980 + 13046 12858 13049 + 13049 13047 13046 + 13047 13049 13050 + 13050 13051 13047 + 13047 13051 13048 + 13048 13051 13052 + 13052 13053 13048 + 12980 13048 13053 + 13049 12858 12862 + 12862 13054 13049 + 13050 13049 13054 + 13054 13055 13050 + 13050 13055 13056 + 13056 13057 13050 + 13057 13058 13050 + 13051 13050 13058 + 12875 13054 12862 + 12875 13055 13054 + 13055 12875 13059 + 13059 13056 13055 + 13060 13056 13059 + 13056 13060 13061 + 13061 13057 13056 + 13062 13057 13061 + 13057 13062 13063 + 13063 13058 13057 + 12874 13059 12875 + 12914 13059 12874 + 13059 12914 13060 + 13060 12914 12913 + 12913 13064 13060 + 13060 13064 13065 + 13065 13061 13060 + 13062 13061 13065 + 13065 13066 13062 + 13062 13066 13067 + 13067 13063 13062 + 13068 13063 13067 + 13068 13058 13063 + 13058 13068 13051 + 13051 13068 13052 + 13064 12913 12918 + 12918 13069 13064 + 13064 13069 13070 + 13070 13065 13064 + 13065 13070 13071 + 13071 13066 13065 + 13066 13071 13072 + 13072 13073 13066 + 13066 13073 13067 + 13069 12918 12923 + 12923 13074 13069 + 13069 13074 13075 + 13075 13076 13069 + 13076 13070 13069 + 13071 13070 13076 + 13076 13077 13071 + 13071 13077 13078 + 13078 13072 13071 + 13074 12923 12922 + 12922 13079 13074 + 13074 13079 13080 + 13080 13081 13074 + 13074 13081 13075 + 13079 12922 12927 + 12927 13082 13079 + 13079 13082 13080 + 13082 13083 13080 + 13084 13080 13083 + 13080 13084 13081 + 13081 13084 13075 + 12936 13082 12927 + 13082 12936 13085 + 13085 13083 13082 + 13083 13085 13086 + 13083 13086 13084 + 13087 13084 13086 + 13084 13087 13075 + 13075 13087 13088 + 13075 13088 13089 + 13089 13076 13075 + 13077 13076 13089 + 13085 12936 12940 + 13090 13085 12940 + 13085 13090 13086 + 13086 13090 13091 + 13086 13091 13087 + 13088 13087 13091 + 13091 13092 13088 + 13088 13092 13093 + 13093 13089 13088 + 13094 13089 13093 + 13089 13094 13077 + 12940 13095 13090 + 13096 13090 13095 + 13090 13096 13091 + 13092 13091 13096 + 13096 13097 13092 + 13092 13097 13098 + 13098 13093 13092 + 13099 13093 13098 + 13093 13099 13094 + 13095 12940 12939 + 13095 12939 13100 + 13100 13096 13095 + 13097 13096 13100 + 13100 12950 13097 + 13098 13097 12950 + 12950 12949 13098 + 13101 13098 12949 + 13098 13101 13099 + 13099 13101 13102 + 13094 13099 13102 + 12939 12945 13100 + 12945 12950 13100 + 12949 12948 13101 + 13103 13101 12948 + 13101 13103 13102 + 13102 13103 13104 + 13105 13102 13104 + 13102 13105 13094 + 13077 13094 13105 + 13105 13078 13077 + 12948 12957 13103 + 13106 13103 12957 + 13103 13106 13104 + 13107 13104 13106 + 13104 13107 13108 + 13108 13109 13104 + 13109 13105 13104 + 13109 13078 13105 + 12957 12962 13106 + 13106 12962 13110 + 13110 13111 13106 + 13111 13107 13106 + 13112 13107 13111 + 13107 13112 13113 + 13113 13108 13107 + 12961 13110 12962 + 13114 13110 12961 + 13110 13114 13115 + 13115 13111 13110 + 13111 13115 13112 + 13112 13115 13116 + 13113 13112 13116 + 13116 13117 13113 + 13118 13113 13117 + 13108 13113 13118 + 12961 12966 13114 + 13114 12966 13119 + 13114 13119 13120 + 13120 13115 13114 + 13115 13120 13116 + 13121 13116 13120 + 13121 13122 13116 + 13116 13122 13123 + 13123 13117 13116 + 12966 13124 13119 + 13124 12964 13119 + 13119 12964 13125 + 13125 13126 13119 + 13119 13126 13120 + 13126 13127 13120 + 13127 13121 13120 + 13124 12966 12965 + 12964 13124 12965 + 13127 13126 13125 + 13127 13125 13128 + 13121 13127 13128 + 13128 13129 13121 + 13122 13121 13129 + 13129 13130 13122 + 13130 13123 13122 + 13131 13123 13130 + 13117 13123 13131 + 13132 13117 13131 + 13117 13132 13118 + 13125 13133 13128 + 13134 13128 13133 + 13128 13134 13135 + 13135 13129 13128 + 13130 13129 13135 + 13136 13130 13135 + 13130 13136 13131 + 13136 13137 13131 + 13132 13131 13137 + 13133 13125 12964 + 13138 13133 12964 + 13134 13133 13138 + 13138 13139 13134 + 13135 13134 13139 + 13139 13140 13135 + 13136 13135 13140 + 13140 13141 13136 + 13136 13141 13137 + 12975 13138 12964 + 13142 13138 12975 + 13139 13138 13142 + 13139 13142 13140 + 13142 13143 13140 + 13140 13143 13141 + 13141 13143 13144 + 13144 13137 13141 + 13145 13137 13144 + 13137 13145 13132 + 13118 13132 13145 + 12975 13146 13142 + 13142 13146 13147 + 13143 13142 13147 + 13147 13144 13143 + 13148 13144 13147 + 13144 13148 13145 + 13145 13148 13149 + 13149 13150 13145 + 13145 13150 13118 + 12975 12974 13146 + 13146 12974 13151 + 13151 13147 13146 + 13147 13151 13152 + 13147 13152 13148 + 13149 13148 13152 + 13153 13151 12974 + 13152 13151 13153 + 13153 13154 13152 + 13152 13154 13149 + 13154 13155 13149 + 13156 13149 13155 + 13149 13156 13157 + 13157 13150 13149 + 12980 13153 12974 + 13053 13153 12980 + 13153 13053 13154 + 13154 13053 13052 + 13052 13155 13154 + 13067 13155 13052 + 13155 13067 13156 + 13073 13156 13067 + 13073 13158 13156 + 13158 13157 13156 + 13157 13158 13159 + 13159 13160 13157 + 13150 13157 13160 + 13160 13118 13150 + 13118 13160 13108 + 13067 13052 13068 + 13108 13160 13159 + 13159 13109 13108 + 13109 13159 13078 + 13078 13159 13158 + 13158 13072 13078 + 13072 13158 13073 + 12994 13044 12988 + 13045 13044 12994 + 12994 13003 13045 + 13045 13003 13161 + 13161 13162 13045 + 13041 13045 13162 + 13162 13042 13041 + 13163 13042 13162 + 13042 13163 13037 + 13002 13161 13003 + 13161 13002 13164 + 13164 13165 13161 + 13162 13161 13165 + 13166 13162 13165 + 13166 13163 13162 + 13167 13163 13166 + 13037 13163 13167 + 13164 13002 13168 + 13164 13168 13169 + 13169 13170 13164 + 13165 13164 13170 + 13170 13171 13165 + 13166 13165 13171 + 13171 13172 13166 + 13172 13167 13166 + 13002 13001 13168 + 13008 13168 13001 + 13168 13008 13173 + 13173 13169 13168 + 13174 13169 13173 + 13174 13175 13169 + 13170 13169 13175 + 13176 13170 13175 + 13176 13171 13170 + 13017 13173 13008 + 13174 13173 13017 + 13017 13177 13174 + 13174 13177 13178 + 13175 13174 13178 + 13178 13179 13175 + 13176 13175 13179 + 13179 13180 13176 + 13180 13181 13176 + 13176 13181 13171 + 13182 13177 13017 + 13177 13182 13183 + 13183 13178 13177 + 13178 13183 13180 + 13180 13179 13178 + 13182 13017 13016 + 13182 13016 13022 + 13183 13182 13022 + 13184 13183 13022 + 13180 13183 13184 + 13184 13185 13180 + 13181 13180 13185 + 13185 13186 13181 + 13171 13181 13186 + 13186 13172 13171 + 13186 13167 13172 + 13022 13187 13184 + 13187 13188 13184 + 13188 13189 13184 + 13184 13189 13185 + 13185 13189 13190 + 13190 13186 13185 + 13186 13190 13167 + 13191 13167 13190 + 13167 13191 13037 + 13187 13022 13021 + 13192 13187 13021 + 13187 13192 13193 + 13193 13188 13187 + 13188 13193 13194 + 13194 13195 13188 + 13189 13188 13195 + 13195 13190 13189 + 13195 13191 13190 + 13195 13196 13191 + 13191 13196 13037 + 13196 13031 13037 + 13021 13027 13192 + 13192 13027 13197 + 13193 13192 13197 + 13197 13194 13193 + 13196 13194 13197 + 13195 13194 13196 + 13197 13027 13026 + 13197 13026 13032 + 13197 13032 13196 + 13031 13196 13032 + 12717 12783 12718 + 12779 12783 12717 + 12717 12722 12779 + 12779 12722 12727 + 12726 12780 12727 + 12780 12726 13198 + 13198 13199 12780 + 12780 13199 12771 + 12772 12771 13199 + 12731 13198 12726 + 13198 12731 13200 + 13201 13198 13200 + 13201 13199 13198 + 13201 13202 13199 + 13199 13202 12772 + 12772 13202 13203 + 13203 13204 12772 + 12765 12772 13204 + 12735 13200 12731 + 13200 12735 13205 + 13205 13206 13200 + 13201 13200 13206 + 13206 13207 13201 + 13207 13203 13201 + 13203 13202 13201 + 12739 13205 12735 + 13205 12739 13208 + 13209 13205 13208 + 13209 13206 13205 + 13209 13210 13206 + 13206 13210 13211 + 13211 13207 13206 + 13211 13203 13207 + 12744 13208 12739 + 13208 12744 13212 + 13212 13213 13208 + 13209 13208 13213 + 13213 13214 13209 + 13214 13210 13209 + 13210 13214 13215 + 13215 13216 13210 + 13216 13211 13210 + 12744 12743 13212 + 13217 13212 12743 + 13212 13217 13214 + 13214 13213 13212 + 12743 12748 13217 + 13218 13217 12748 + 13217 13218 13215 + 13214 13217 13215 + 12748 12757 13218 + 12757 12756 13218 + 12756 13219 13218 + 13215 13218 13219 + 13215 13219 13220 + 13220 13216 13215 + 13221 13216 13220 + 13216 13221 13222 + 13222 13211 13216 + 13211 13222 13203 + 13219 12756 12762 + 12762 13220 13219 + 13220 12762 13223 + 13224 13220 13223 + 13220 13224 13221 + 13221 13224 13225 + 13225 13226 13221 + 13226 13222 13221 + 13203 13222 13226 + 13226 13204 13203 + 13223 12762 12761 + 13223 12761 12767 + 13223 12767 13225 + 13223 13225 13224 + 12767 12766 13225 + 13226 13225 12766 + 13226 12766 13204 + 13204 12766 12765 + 13227 13228 13229 + 13230 13227 13229 + 13230 13229 13231 + 13232 13230 13231 + 13233 13232 13231 + 13231 13234 13233 + 13233 13234 13235 + 13236 13233 13235 + 13237 13234 13231 + 13234 13237 13238 + 13238 13235 13234 + 13239 13235 13238 + 13235 13239 13236 + 13236 13239 13240 + 13240 13241 13236 + 13242 13236 13241 + 13231 13228 13237 + 13237 13228 13243 + 13243 13244 13237 + 13237 13244 13245 + 13245 13238 13237 + 13246 13238 13245 + 13238 13246 13239 + 13239 13246 13247 + 13247 13240 13239 + 13248 13244 13243 + 13244 13248 13249 + 13249 13245 13244 + 13250 13245 13249 + 13245 13250 13246 + 13247 13246 13250 + 13250 13251 13247 + 13252 13247 13251 + 13240 13247 13252 + 13243 13253 13248 + 13248 13253 13254 + 13254 13255 13248 + 13249 13248 13255 + 13255 13256 13249 + 13257 13249 13256 + 13249 13257 13250 + 13253 13243 13258 + 13258 13259 13253 + 13254 13253 13259 + 13259 13260 13254 + 13261 13254 13260 + 13255 13254 13261 + 13227 13258 13243 + 13242 13262 13263 + 13236 13242 13263 + 13233 13236 13263 + 13232 13233 13263 + 13230 13232 13263 + 13227 13230 13263 + 13263 13264 13227 + 13265 13266 13267 + 13266 13268 13267 + 98 13269 2731 + 13269 13270 2731 + 13271 13272 13273 + 13274 13272 13271 + 13272 13274 13275 + 13272 13275 13276 + 13276 13277 13272 + 13271 13278 13274 + 13274 13278 13279 + 13280 13274 13279 + 13275 13274 13280 + 13280 13281 13275 + 13275 13281 13282 + 13282 13276 13275 + 13271 13283 13278 + 13278 13283 13284 + 13284 13279 13278 + 13283 13271 13285 + 13285 13286 13283 + 13284 13283 13286 + 13285 13271 13277 + 13287 13285 13277 + 13288 13285 13287 + 13285 13288 13286 + 13286 13288 13289 + 13289 13290 13286 + 13286 13290 13284 + 13277 13291 13287 + 13292 13287 13291 + 13293 13287 13292 + 13287 13293 13288 + 13288 13293 13294 + 13289 13288 13294 + 13295 13291 13277 + 13291 13295 13296 + 13291 13296 13292 + 13297 13292 13296 + 13298 13292 13297 + 13292 13298 13293 + 13293 13298 13299 + 13299 13294 13293 + 13277 13300 13295 + 13301 13295 13300 + 13296 13295 13301 + 13301 13297 13296 + 13297 13301 13302 + 13302 13303 13297 + 13297 13303 13298 + 13303 13299 13298 + 13304 13300 13277 + 13300 13304 13305 + 13305 13306 13300 + 13277 13276 13304 + 13304 13276 13282 + 13282 13307 13304 + 13307 13305 13304 + 13308 13305 13307 + 13305 13308 13309 + 13309 13310 13305 + 13311 13307 13282 + 13307 13311 13308 + 13312 13308 13311 + 13309 13308 13312 + 13312 13313 13309 + 13302 13309 13313 + 13309 13302 13301 + 13314 13309 13301 + 13282 13315 13311 + 13311 13315 13316 + 13316 13312 13311 + 13313 13312 13316 + 13316 13317 13313 + 13313 13317 13318 + 13318 13319 13313 + 13313 13319 13302 + 13315 13282 13281 + 13281 13320 13315 + 13316 13315 13320 + 13320 13321 13316 + 13317 13316 13321 + 13321 13322 13317 + 13317 13322 13323 + 13323 13318 13317 + 13324 13318 13323 + 13319 13318 13324 + 13320 13281 13280 + 13280 13325 13320 + 13320 13325 13326 + 13326 13321 13320 + 13322 13321 13326 + 13326 13327 13322 + 13322 13327 13328 + 13328 13323 13322 + 13329 13323 13328 + 13323 13329 13324 + 13325 13280 13330 + 13330 13331 13325 + 13326 13325 13331 + 13332 13326 13331 + 13327 13326 13332 + 13330 13280 13279 + 13279 13333 13330 + 13334 13330 13333 + 13334 13331 13330 + 13331 13334 13335 + 13335 13336 13331 + 13331 13336 13337 + 13337 13332 13331 + 13338 13333 13279 + 13338 13339 13333 + 13333 13339 13334 + 13334 13339 13340 + 13335 13334 13340 + 13341 13335 13340 + 13342 13335 13341 + 13335 13342 13336 + 13279 13343 13338 + 13343 13344 13338 + 13339 13338 13344 + 13344 13345 13339 + 13339 13345 13340 + 13279 13284 13343 + 13343 13284 13346 + 13346 13344 13343 + 13344 13346 13345 + 13345 13346 13347 + 13347 13340 13345 + 13347 13348 13340 + 13340 13348 13349 + 13349 13350 13340 + 13340 13350 13341 + 13347 13346 13284 + 13351 13347 13284 + 13348 13347 13351 + 13351 13352 13348 + 13348 13352 13349 + 13352 13353 13349 + 13354 13349 13353 + 13349 13354 13355 + 13355 13350 13349 + 13356 13351 13284 + 13357 13351 13356 + 13357 13352 13351 + 13352 13357 13358 + 13358 13353 13352 + 13359 13356 13284 + 13360 13356 13359 + 13361 13356 13360 + 13356 13361 13357 + 13362 13357 13361 + 13290 13359 13284 + 13363 13359 13290 + 13359 13363 13364 + 13364 13365 13359 + 13359 13365 13360 + 13290 13366 13363 + 13367 13363 13366 + 13290 13289 13366 + 13366 13289 13368 + 13368 13369 13366 + 13366 13369 13370 + 13370 13371 13366 + 13294 13368 13289 + 13372 13368 13294 + 13368 13372 13373 + 13373 13369 13368 + 13369 13373 13374 + 13374 13370 13369 + 13375 13370 13374 + 13370 13375 13376 + 13376 13377 13370 + 13294 13378 13372 + 13372 13378 13324 + 13379 13372 13324 + 13373 13372 13379 + 13379 13380 13373 + 13374 13373 13380 + 13378 13294 13299 + 13299 13381 13378 + 13378 13381 13319 + 13319 13324 13378 + 13381 13299 13303 + 13303 13302 13381 + 13319 13381 13302 + 13300 13382 13301 + 13324 13329 13379 + 13383 13379 13329 + 13380 13379 13383 + 13380 13383 13384 + 13384 13385 13380 + 13380 13385 13374 + 13386 13374 13385 + 13374 13386 13375 + 13329 13387 13383 + 13383 13387 13388 + 13388 13384 13383 + 13389 13384 13388 + 13384 13389 13390 + 13390 13385 13384 + 13385 13390 13386 + 13391 13386 13390 + 13375 13386 13391 + 13328 13387 13329 + 13387 13328 13392 + 13392 13388 13387 + 13393 13388 13392 + 13388 13393 13389 + 13394 13389 13393 + 13390 13389 13394 + 13394 13395 13390 + 13390 13395 13391 + 13392 13328 13327 + 13396 13392 13327 + 13397 13392 13396 + 13392 13397 13393 + 13393 13397 13398 + 13398 13399 13393 + 13393 13399 13394 + 13400 13394 13399 + 13395 13394 13400 + 13327 13401 13396 + 13402 13396 13401 + 13403 13396 13402 + 13396 13403 13397 + 13398 13397 13403 + 13403 13404 13398 + 13405 13398 13404 + 13405 13399 13398 + 13399 13405 13400 + 13332 13401 13327 + 13401 13332 13406 + 13406 13407 13401 + 13401 13407 13402 + 13402 13407 13408 + 13408 13409 13402 + 13410 13402 13409 + 13402 13410 13403 + 13406 13332 13337 + 13337 13411 13406 + 13406 13411 13412 + 13412 13413 13406 + 13407 13406 13413 + 13413 13408 13407 + 13414 13411 13337 + 13411 13414 13415 + 13415 13412 13411 + 13412 13415 13416 + 13416 13417 13412 + 13412 13417 13418 + 13418 13413 13412 + 13408 13413 13418 + 13337 13419 13414 + 13414 13419 13420 + 13420 13421 13414 + 13414 13421 13422 + 13422 13415 13414 + 13416 13415 13422 + 13419 13337 13336 + 13336 13342 13419 + 13420 13419 13342 + 13342 13423 13420 + 13424 13420 13423 + 13420 13424 13425 + 13425 13421 13420 + 13421 13425 13426 + 13426 13422 13421 + 13341 13423 13342 + 13427 13423 13341 + 13423 13427 13424 + 13428 13424 13427 + 13425 13424 13428 + 13428 13429 13425 + 13426 13425 13429 + 13429 13430 13426 + 13431 13426 13430 + 13422 13426 13431 + 13341 13432 13427 + 13427 13432 13433 + 13433 13434 13427 + 13427 13434 13428 + 13432 13341 13350 + 13350 13355 13432 + 13432 13355 13435 + 13435 13433 13432 + 13436 13433 13435 + 13433 13436 13437 + 13437 13434 13433 + 13434 13437 13438 + 13438 13439 13434 + 13434 13439 13428 + 13440 13435 13355 + 13440 13441 13435 + 13435 13441 13436 + 13442 13436 13441 + 13437 13436 13442 + 13442 13443 13437 + 13438 13437 13443 + 13355 13354 13440 + 13440 13354 13444 + 13445 13440 13444 + 13441 13440 13445 + 13445 13446 13441 + 13441 13446 13442 + 13446 13447 13442 + 13448 13442 13447 + 13442 13448 13443 + 13353 13444 13354 + 13449 13444 13353 + 13364 13363 13450 + 13450 13451 13364 + 13452 13364 13451 + 13365 13364 13452 + 13452 13453 13365 + 13360 13365 13453 + 13451 13454 13452 + 13455 13456 13457 + 13458 13455 13457 + 13459 13455 13458 + 13459 13460 13455 + 13455 13460 13461 + 13461 13462 13455 + 13463 13458 13457 + 13464 13458 13463 + 13465 13458 13464 + 13458 13465 13459 + 13466 13459 13465 + 13460 13459 13466 + 13457 13467 13463 + 13468 13463 13467 + 13463 13468 7297 + 7297 7303 13463 + 13463 7303 13464 + 13469 13467 13457 + 13470 13467 13469 + 13467 13470 13468 + 7298 13468 13470 + 7297 13468 7298 + 13457 13471 13469 + 13472 13469 13471 + 13473 13469 13472 + 13469 13473 13470 + 13470 13473 13474 + 13474 13475 13470 + 13470 13475 7298 + 13457 13476 13471 + 13471 13476 13477 + 13477 13478 13471 + 13471 13478 13472 + 13479 13472 13478 + 13480 13472 13479 + 13472 13480 13473 + 13474 13473 13480 + 13476 13457 13481 + 13481 13482 13476 + 13476 13482 13483 + 13483 13484 13476 + 13484 13485 13476 + 13485 13477 13476 + 13486 13477 13485 + 13478 13477 13486 + 13486 13487 13478 + 13478 13487 13479 + 13488 13483 13482 + 13489 13483 13488 + 13483 13489 13490 + 13490 13484 13483 + 13490 13491 13484 + 13484 13491 13492 + 13492 13485 13484 + 13482 13461 13488 + 13488 13461 13460 + 13460 13493 13488 + 13489 13488 13493 + 13461 13482 13494 + 13466 13493 13460 + 13466 13495 13493 + 13493 13495 13489 + 13489 13495 13496 + 13496 13497 13489 + 13497 13498 13489 + 13498 13490 13489 + 13491 13490 13498 + 13495 13466 13499 + 13499 13496 13495 + 13500 13496 13499 + 13496 13500 13501 + 13501 13497 13496 + 13502 13497 13501 + 13497 13502 13503 + 13503 13498 13497 + 13499 13466 13465 + 13504 13499 13465 + 13500 13499 13504 + 13504 13505 13500 + 13501 13500 13505 + 13505 13506 13501 + 13465 13507 13504 + 13508 13504 13507 + 13505 13504 13508 + 13508 13509 13505 + 13505 13509 13510 + 13510 13511 13505 + 13512 13507 13465 + 13513 13507 13512 + 13507 13513 13508 + 13508 13513 7312 + 7323 13508 7312 + 13509 13508 7323 + 13465 13464 13512 + 7308 13512 13464 + 13513 13512 7308 + 7308 7312 13513 + 13464 7303 7308 + 13514 13515 13516 + 13517 13514 13516 + 13518 13514 13517 + 13519 13514 13518 + 13514 13519 13520 + 13520 13521 13514 + 13516 13522 13517 + 13522 13523 13517 + 13524 13517 13523 + 13517 13524 13525 + 13517 13525 13518 + 13526 13522 13516 + 13526 13527 13522 + 13522 13527 13528 + 13528 13523 13522 + 13523 13528 13529 + 13523 13529 13524 + 13530 13524 13529 + 13525 13524 13530 + 13516 13531 13526 + 13532 13526 13531 + 13527 13526 13532 + 13532 13533 13527 + 13528 13527 13533 + 13533 13534 13528 + 13534 13535 13528 + 13529 13528 13535 + 13536 13531 13516 + 13531 13536 13537 + 13537 13538 13531 + 13531 13538 13539 + 13539 13532 13531 + 13536 13516 13521 + 13521 13540 13536 + 13536 13540 13541 + 13541 13542 13536 + 13542 13537 13536 + 13543 13537 13542 + 13543 13538 13537 + 13538 13543 13544 + 13544 13539 13538 + 13540 13521 13520 + 13540 13520 13545 + 13545 13541 13540 + 13541 13545 13546 + 13546 13547 13541 + 13541 13547 13548 + 13548 13542 13541 + 13549 13542 13548 + 13542 13549 13543 + 13544 13543 13549 + 13545 13520 13519 + 13550 13545 13519 + 13546 13545 13550 + 13550 13551 13546 + 13546 13551 13552 + 13552 13553 13546 + 13547 13546 13553 + 13553 13554 13547 + 13548 13547 13554 + 13519 13555 13550 + 13556 13550 13555 + 13550 13556 13557 + 13557 13551 13550 + 13551 13557 13558 + 13558 13552 13551 + 13559 13555 13519 + 13560 13555 13559 + 13555 13560 13556 + 13561 13556 13560 + 13557 13556 13561 + 13561 13562 13557 + 13557 13562 13563 + 13563 13558 13557 + 13519 13518 13559 + 13559 13518 13564 + 13564 13565 13559 + 13566 13559 13565 + 13559 13566 13560 + 13560 13566 13567 + 13567 13568 13560 + 13560 13568 13561 + 13518 13525 13564 + 13530 13564 13525 + 13564 13530 13569 + 13564 13569 13570 + 13570 13565 13564 + 13571 13565 13570 + 13565 13571 13566 + 13567 13566 13571 + 13569 13530 13572 + 13572 13573 13569 + 13569 13573 13574 + 13574 13570 13569 + 13575 13570 13574 + 13570 13575 13571 + 13576 13572 13530 + 13577 13572 13576 + 13573 13572 13577 + 13577 13578 13573 + 13573 13578 13579 + 13579 13574 13573 + 13580 13574 13579 + 13574 13580 13575 + 13529 13576 13530 + 13535 13576 13529 + 13576 13535 13581 + 13581 13582 13576 + 13576 13582 13577 + 13577 13582 13583 + 13583 13584 13577 + 13578 13577 13584 + 13584 13585 13578 + 13579 13578 13585 + 13581 13535 13534 + 13534 13586 13581 + 13581 13586 13587 + 13587 13588 13581 + 13582 13581 13588 + 13588 13583 13582 + 13589 13586 13534 + 13586 13589 13590 + 13590 13587 13586 + 13587 13590 13591 + 13591 13592 13587 + 13587 13592 13593 + 13593 13588 13587 + 13583 13588 13593 + 13534 13594 13589 + 13589 13594 13595 + 13595 13596 13589 + 13589 13596 13597 + 13597 13590 13589 + 13591 13590 13597 + 13594 13534 13533 + 13533 13598 13594 + 13594 13598 13599 + 13599 13595 13594 + 13600 13595 13599 + 13595 13600 13601 + 13601 13596 13595 + 13596 13601 13602 + 13602 13597 13596 + 13598 13533 13532 + 13532 13603 13598 + 13598 13603 13604 + 13604 13599 13598 + 13599 13604 13605 + 13605 13606 13599 + 13599 13606 13600 + 13607 13600 13606 + 13601 13600 13607 + 13603 13532 13539 + 13539 13608 13603 + 13604 13603 13608 + 13608 13609 13604 + 13609 13610 13604 + 13605 13604 13610 + 13608 13539 13544 + 13544 13611 13608 + 13608 13611 13612 + 13612 13609 13608 + 13613 13609 13612 + 13609 13613 13614 + 13614 13610 13609 + 13611 13544 13615 + 13615 13616 13611 + 13612 13611 13616 + 13616 13617 13612 + 216 13612 13617 + 13612 216 13613 + 13549 13615 13544 + 13618 13615 13549 + 13616 13615 13618 + 13618 13619 13616 + 13616 13619 13620 + 13620 13617 13616 + 13621 13617 13620 + 13617 13621 216 + 216 13621 13622 + 13549 13623 13618 + 13618 13623 13624 + 13624 13625 13618 + 13619 13618 13625 + 13625 13626 13619 + 13620 13619 13626 + 13548 13623 13549 + 13623 13548 13627 + 13627 13624 13623 + 13624 13627 13628 + 13628 13629 13624 + 13624 13629 13630 + 13630 13625 13624 + 13626 13625 13630 + 13554 13627 13548 + 13628 13627 13554 + 13554 13631 13628 + 13628 13631 13632 + 13632 13633 13628 + 13629 13628 13633 + 13633 13634 13629 + 13630 13629 13634 + 13635 13631 13554 + 13631 13635 13636 + 13636 13632 13631 + 13632 13636 13637 + 13637 13638 13632 + 13632 13638 13639 + 13639 13633 13632 + 13634 13633 13639 + 13554 13553 13635 + 13635 13553 13552 + 13552 13640 13635 + 13635 13640 13641 + 13641 13636 13635 + 13637 13636 13641 + 13641 13642 13637 + 13637 13642 13643 + 13643 13644 13637 + 13638 13637 13644 + 13645 13640 13552 + 13640 13645 13646 + 13646 13641 13640 + 13641 13646 13647 + 13647 13642 13641 + 13642 13647 13648 + 13648 13643 13642 + 13552 13558 13645 + 13645 13558 13563 + 13563 13649 13645 + 13645 13649 13650 + 13650 13646 13645 + 13647 13646 13650 + 13650 13651 13647 + 13647 13651 13652 + 13652 13648 13647 + 13653 13648 13652 + 13643 13648 13653 + 13654 13649 13563 + 13649 13654 13655 + 13655 13650 13649 + 13650 13655 13656 + 13656 13651 13650 + 13651 13656 13657 + 13657 13652 13651 + 13563 13658 13654 + 13654 13658 13659 + 13659 13660 13654 + 13660 13655 13654 + 13656 13655 13660 + 13660 13661 13656 + 13657 13656 13661 + 13658 13563 13562 + 13562 13662 13658 + 13659 13658 13662 + 13662 13663 13659 + 7284 13659 13663 + 13659 7284 13661 + 13661 13660 13659 + 13662 13562 13561 + 13561 13664 13662 + 13662 13664 13665 + 13665 13663 13662 + 13664 13561 13568 + 13568 13666 13664 + 13665 13664 13666 + 13667 13665 13666 + 13666 13568 13567 + 13567 13668 13666 + 13666 13668 13667 + 13667 13668 13669 + 13669 7276 13667 + 13670 13667 7276 + 13667 13670 13663 + 13663 13670 7284 + 13668 13567 13671 + 13671 13669 13668 + 13669 13671 13672 + 13672 13673 13669 + 13669 13673 7277 + 7277 7276 13669 + 13571 13671 13567 + 13672 13671 13571 + 13571 13575 13672 + 13672 13575 13580 + 13580 13674 13672 + 13673 13672 13674 + 13674 7278 13673 + 7277 13673 7278 + 7272 13674 13580 + 7278 13674 7272 + 13580 7273 7272 + 13579 7273 13580 + 7273 13579 7274 + 13585 7274 13579 + 7266 7274 13585 + 13585 13675 7266 + 7266 13675 7261 + 13676 7261 13675 + 7261 13676 13677 + 13677 7262 7261 + 13678 13675 13585 + 13675 13678 13676 + 13679 13676 13678 + 13677 13676 13679 + 13679 13680 13677 + 13677 13680 13681 + 13681 13682 13677 + 7262 13677 13682 + 13682 7252 7262 + 13585 13584 13678 + 13678 13584 13583 + 13583 13683 13678 + 13678 13683 13679 + 13684 13679 13683 + 13679 13684 13685 + 13685 13680 13679 + 13680 13685 13686 + 13686 13681 13680 + 13593 13683 13583 + 13683 13593 13684 + 13687 13684 13593 + 13685 13684 13687 + 13687 13688 13685 + 13685 13688 13689 + 13689 13686 13685 + 13690 13686 13689 + 13681 13686 13690 + 13593 13592 13687 + 13691 13687 13592 + 13687 13691 13692 + 13692 13688 13687 + 13688 13692 13693 + 13693 13689 13688 + 13689 13693 13694 + 13694 13695 13689 + 13689 13695 13690 + 13592 13591 13691 + 13691 13591 13696 + 13696 13697 13691 + 13692 13691 13697 + 13697 13698 13692 + 13692 13698 13699 + 13699 13693 13692 + 13694 13693 13699 + 13597 13696 13591 + 13597 13602 13696 + 13696 13602 13700 + 13700 13697 13696 + 13697 13700 13698 + 13698 13700 13701 + 13701 13699 13698 + 13699 13701 13702 + 13702 13703 13699 + 13699 13703 13694 + 13701 13700 13602 + 13704 13701 13602 + 13702 13701 13704 + 13704 13705 13702 + 13706 13702 13705 + 13703 13702 13706 + 13706 13707 13703 + 13694 13703 13707 + 13707 13708 13694 + 13695 13694 13708 + 13709 13704 13602 + 13710 13704 13709 + 13705 13704 13710 + 13710 13711 13705 + 13705 13711 13712 + 13712 13713 13705 + 13705 13713 13706 + 13602 13601 13709 + 13607 13709 13601 + 13709 13607 13714 + 13714 13715 13709 + 13709 13715 13710 + 13710 13715 13716 + 13717 13710 13716 + 13711 13710 13717 + 13717 13718 13711 + 13712 13711 13718 + 13714 13607 13719 + 13719 13720 13714 + 13714 13720 13721 + 13721 13722 13714 + 13715 13714 13722 + 13722 13716 13715 + 13719 13607 13606 + 13606 13723 13719 + 13724 13719 13723 + 13720 13719 13724 + 13720 13724 13725 + 13725 13721 13720 + 13721 13725 13726 + 13721 13726 13727 + 13727 13722 13721 + 13716 13722 13727 + 13728 13723 13606 + 13723 13728 13729 + 13729 13730 13723 + 13723 13730 13724 + 13724 13730 13731 + 13731 13725 13724 + 13726 13725 13731 + 13731 13732 13726 + 13727 13726 13732 + 13606 13605 13728 + 13733 13728 13605 + 13729 13728 13733 + 13733 13734 13729 + 13729 13734 13400 + 13735 13729 13400 + 13730 13729 13735 + 13735 13736 13730 + 13730 13736 13731 + 13605 13737 13733 + 13738 13733 13737 + 13733 13738 13739 + 13739 13734 13733 + 13734 13739 13740 + 13740 13400 13734 + 13400 13740 13395 + 13610 13737 13605 + 13741 13737 13610 + 13737 13741 13738 + 13742 13738 13741 + 13739 13738 13742 + 13742 13743 13739 + 13739 13743 13744 + 13744 13740 13739 + 13395 13740 13744 + 13744 13391 13395 + 13610 13614 13741 + 13741 13614 13745 + 13745 13746 13741 + 13741 13746 13742 + 13747 13742 13746 + 13742 13747 13748 + 13748 13743 13742 + 13743 13748 13749 + 13749 13744 13743 + 13750 13745 13614 + 222 13745 13750 + 13745 222 13751 + 13751 13746 13745 + 13746 13751 13747 + 13752 13747 13751 + 13748 13747 13752 + 13752 13753 13748 + 13753 13749 13748 + 13614 13613 13750 + 13754 13750 13613 + 13750 13754 13755 + 13750 13755 222 + 222 13755 13756 + 13613 216 13754 + 13755 13754 13757 + 13757 13758 13755 + 13759 13758 13757 + 13758 13759 13760 + 13760 13761 13758 + 13751 222 13762 + 13762 13763 13751 + 13751 13763 13752 + 13764 13752 13763 + 13752 13764 13753 + 13753 13764 13765 + 13765 13749 13753 + 13744 13749 13765 + 13765 13391 13744 + 13391 13765 13375 + 13763 13762 13766 + 13766 13767 13763 + 13763 13767 13764 + 13764 13767 13376 + 13376 13375 13764 + 13375 13765 13764 + 13766 13762 13768 + 13768 13769 13766 + 13770 13766 13769 + 13767 13766 13770 + 13770 13376 13767 + 13771 13376 13770 + 13768 13772 13769 + 13769 13772 13773 + 13773 13774 13769 + 13769 13774 13770 + 13451 13770 13774 + 13770 13451 13775 + 13772 13768 13761 + 13761 13776 13772 + 13772 13776 13777 + 13777 13778 13772 + 13778 13779 13772 + 13779 13780 13772 + 13780 13773 13772 + 13776 13761 13781 + 13774 13782 13451 + 13773 13782 13774 + 13782 13773 13780 + 13780 13452 13782 + 13780 13453 13452 + 13453 13780 13779 + 13779 13783 13453 + 13453 13783 13784 + 13784 13360 13453 + 13785 13360 13784 + 13360 13785 13361 + 13786 13783 13779 + 13783 13786 13787 + 13787 13784 13783 + 13788 13784 13787 + 13784 13788 13785 + 13789 13785 13788 + 13361 13785 13789 + 13789 13790 13361 + 13361 13790 13791 + 13786 13779 13778 + 13778 13792 13786 + 13786 13792 13793 + 13787 13786 13793 + 13793 13794 13787 + 13795 13787 13794 + 13787 13795 13788 + 13796 13792 13778 + 13792 13796 13797 + 13797 13798 13792 + 13792 13798 13793 + 13796 13778 13777 + 13777 13799 13796 + 13799 13797 13796 + 13800 13797 13799 + 13800 13798 13797 + 13798 13800 13801 + 13801 13793 13798 + 13799 13777 13802 + 13802 13803 13799 + 13799 13803 13800 + 13801 13800 13803 + 13803 13804 13801 + 13805 13801 13804 + 13793 13801 13805 + 13802 13777 13776 + 13776 13806 13802 + 13807 13802 13806 + 13803 13802 13807 + 13807 13804 13803 + 13808 13804 13807 + 13804 13808 13805 + 13809 13805 13808 + 13810 13805 13809 + 13805 13810 13793 + 13811 13806 13776 + 7252 13682 7253 + 7253 13682 13681 + 13681 13812 7253 + 7253 13812 13813 + 13813 7247 7253 + 7248 7247 13813 + 13690 13812 13681 + 13812 13690 13814 + 13814 13813 13812 + 13813 13814 13815 + 13815 13816 13813 + 13813 13816 7248 + 7248 13816 13817 + 13817 7242 7248 + 7243 7242 13817 + 13818 13814 13690 + 13815 13814 13818 + 13818 13819 13815 + 13815 13819 13820 + 13820 13821 13815 + 13816 13815 13821 + 13821 13817 13816 + 13690 13695 13818 + 13708 13818 13695 + 13818 13708 13822 + 13822 13819 13818 + 13819 13822 13823 + 13823 13820 13819 + 13820 13823 13824 + 13824 13825 13820 + 13820 13825 13826 + 13826 13821 13820 + 13817 13821 13826 + 13822 13708 13707 + 13707 13827 13822 + 13822 13827 13828 + 13828 13823 13822 + 13824 13823 13828 + 13828 13829 13824 + 13824 13829 13830 + 13830 13831 13824 + 13825 13824 13831 + 13832 13827 13707 + 13827 13832 13833 + 13833 13828 13827 + 13828 13833 13834 + 13834 13829 13828 + 13829 13834 13835 + 13835 13830 13829 + 13707 13706 13832 + 13832 13706 13713 + 13713 13836 13832 + 13833 13832 13836 + 13836 13837 13833 + 13834 13833 13837 + 13837 13838 13834 + 13834 13838 13839 + 13839 13835 13834 + 13840 13835 13839 + 13830 13835 13840 + 13836 13713 13712 + 13712 13841 13836 + 13836 13841 13842 + 13842 13837 13836 + 13838 13837 13842 + 13842 13843 13838 + 13838 13843 13844 + 13844 13839 13838 + 13845 13839 13844 + 13839 13845 13840 + 13841 13712 13846 + 13846 13847 13841 + 13842 13841 13847 + 13848 13842 13847 + 13843 13842 13848 + 13848 13849 13843 + 13843 13849 13850 + 13850 13844 13843 + 13718 13846 13712 + 13851 13846 13718 + 13847 13846 13851 + 13851 13852 13847 + 13847 13852 13853 + 13853 13854 13847 + 13847 13854 13848 + 13855 13848 13854 + 13849 13848 13855 + 13718 13856 13851 + 13857 13851 13856 + 13852 13851 13857 + 13857 13858 13852 + 13852 13858 13859 + 13859 13853 13852 + 13860 13853 13859 + 13854 13853 13860 + 13854 13860 13855 + 13861 13856 13718 + 13856 13861 13862 + 13862 13863 13856 + 13856 13863 13857 + 13864 13857 13863 + 13857 13864 13865 + 13865 13858 13857 + 13718 13717 13861 + 13861 13717 13866 + 13866 13867 13861 + 13862 13861 13867 + 13867 13868 13862 + 13869 13862 13868 + 13862 13869 13870 + 13870 13863 13862 + 13863 13870 13864 + 13716 13866 13717 + 13871 13866 13716 + 13866 13871 13867 + 13867 13871 13872 + 13872 13868 13867 + 13873 13868 13872 + 13868 13873 13869 + 13874 13869 13873 + 13870 13869 13874 + 13716 13875 13871 + 13872 13871 13875 + 13875 13876 13872 + 13877 13872 13876 + 13872 13877 13873 + 13873 13877 13878 + 13878 13879 13873 + 13873 13879 13874 + 13727 13875 13716 + 13875 13727 13880 + 13880 13876 13875 + 13881 13876 13880 + 13876 13881 13877 + 13878 13877 13881 + 13881 13882 13878 + 13883 13878 13882 + 13878 13883 13884 + 13884 13879 13878 + 13880 13727 13732 + 13732 13885 13880 + 13886 13880 13885 + 13880 13886 13881 + 13881 13886 13887 + 13887 13882 13881 + 13888 13882 13887 + 13882 13888 13883 + 13889 13883 13888 + 13884 13883 13889 + 13890 13885 13732 + 13891 13885 13890 + 13885 13891 13886 + 13887 13886 13891 + 13891 13892 13887 + 13893 13887 13892 + 13887 13893 13888 + 13732 13894 13890 + 13895 13890 13894 + 13896 13890 13895 + 13890 13896 13891 + 13891 13896 13897 + 13897 13892 13891 + 13898 13892 13897 + 13892 13898 13893 + 13732 13731 13894 + 13894 13731 13899 + 13899 13900 13894 + 13894 13900 13895 + 13901 13895 13900 + 13902 13895 13901 + 13895 13902 13896 + 13897 13896 13902 + 13736 13899 13731 + 13903 13899 13736 + 13900 13899 13903 + 13900 13903 13901 + 13901 13903 13904 + 13904 13905 13901 + 13906 13901 13905 + 13901 13906 13902 + 13736 13904 13903 + 13907 13904 13736 + 13904 13907 13908 + 13908 13905 13904 + 13909 13905 13908 + 13905 13909 13906 + 13910 13906 13909 + 13902 13906 13910 + 13910 13911 13902 + 13902 13911 13897 + 13736 13735 13907 + 13907 13735 13912 + 13912 13913 13907 + 13908 13907 13913 + 13913 13410 13908 + 13409 13908 13410 + 13908 13409 13909 + 13912 13735 13400 + 13400 13405 13912 + 13404 13912 13405 + 13912 13404 13913 + 13913 13404 13403 + 13403 13410 13913 + 13909 13409 13408 + 13408 13914 13909 + 13909 13914 13910 + 13915 13910 13914 + 13910 13915 13916 + 13916 13911 13910 + 13911 13916 13917 + 13917 13897 13911 + 13897 13917 13898 + 13418 13914 13408 + 13914 13418 13915 + 13918 13915 13418 + 13916 13915 13918 + 13918 13919 13916 + 13916 13919 13920 + 13920 13917 13916 + 13898 13917 13920 + 13920 13921 13898 + 13898 13921 13922 + 13922 13893 13898 + 13418 13417 13918 + 13923 13918 13417 + 13918 13923 13924 + 13924 13919 13918 + 13919 13924 13925 + 13925 13920 13919 + 13920 13925 13926 + 13926 13921 13920 + 13921 13926 13927 + 13927 13922 13921 + 13417 13416 13923 + 13928 13923 13416 + 13924 13923 13928 + 13928 13929 13924 + 13924 13929 13930 + 13930 13925 13924 + 13926 13925 13930 + 13930 13931 13926 + 13926 13931 13932 + 13932 13927 13926 + 13416 13933 13928 + 13934 13928 13933 + 13928 13934 13935 + 13935 13929 13928 + 13929 13935 13936 + 13936 13930 13929 + 13930 13936 13937 + 13937 13931 13930 + 13422 13933 13416 + 13431 13933 13422 + 13933 13431 13934 + 13934 13431 13938 + 13938 13939 13934 + 13935 13934 13939 + 13939 13940 13935 + 13935 13940 13941 + 13941 13936 13935 + 13937 13936 13941 + 13430 13938 13431 + 13942 13938 13430 + 13938 13942 13943 + 13943 13939 13938 + 13939 13943 13944 + 13944 13940 13939 + 13940 13944 13945 + 13945 13941 13940 + 13946 13941 13945 + 13941 13946 13937 + 13430 13947 13942 + 13942 13947 13948 + 13948 13949 13942 + 13943 13942 13949 + 13949 13950 13943 + 13944 13943 13950 + 13950 13951 13944 + 13945 13944 13951 + 13947 13430 13429 + 13429 13952 13947 + 13947 13952 13953 + 13953 13948 13947 + 13954 13948 13953 + 13949 13948 13954 + 13954 13955 13949 + 13949 13955 13956 + 13956 13950 13949 + 13951 13950 13956 + 13952 13429 13428 + 13428 13957 13952 + 13952 13957 13958 + 13958 13953 13952 + 13953 13958 13959 + 13959 13960 13953 + 13953 13960 13954 + 13961 13954 13960 + 13955 13954 13961 + 13957 13428 13439 + 13439 13962 13957 + 13958 13957 13962 + 13962 13963 13958 + 13959 13958 13963 + 13962 13439 13438 + 13962 13438 13964 + 13964 13963 13962 + 13963 13964 13965 + 13965 13966 13963 + 13963 13966 13959 + 13443 13964 13438 + 13965 13964 13443 + 13443 13448 13965 + 13967 13965 13448 + 13966 13965 13967 + 13967 13968 13966 + 13959 13966 13968 + 13968 13969 13959 + 13969 13970 13959 + 13960 13959 13970 + 13971 13967 13448 + 13972 13967 13971 + 13968 13967 13972 + 13968 13972 13973 + 13973 13969 13968 + 13969 13973 13974 + 13969 13974 13975 + 13975 13970 13969 + 13976 13971 13448 + 13977 13971 13976 + 13971 13977 13978 + 13971 13978 13972 + 13973 13972 13978 + 13978 13979 13973 + 13979 13980 13973 + 13974 13973 13980 + 13981 13976 13448 + 13982 13976 13981 + 13976 13982 13983 + 13983 13984 13976 + 13976 13984 13977 + 13448 13985 13981 + 13986 13981 13985 + 13987 13981 13986 + 13981 13987 13982 + 13988 13982 13987 + 13983 13982 13988 + 13447 13985 13448 + 13989 13985 13447 + 13985 13989 13986 + 13990 13986 13989 + 13987 13986 13990 + 13990 13991 13987 + 13987 13991 13988 + 13989 13447 13446 + 13446 13992 13989 + 13989 13992 13990 + 13993 13990 13992 + 13991 13990 13993 + 13991 13993 13994 + 13994 13988 13991 + 13988 13994 13995 + 13995 13996 13988 + 13988 13996 13983 + 13992 13446 13445 + 13445 13997 13992 + 13992 13997 13993 + 13993 13997 13998 + 13998 13999 13993 + 13999 13994 13993 + 13995 13994 13999 + 13997 13445 14000 + 14000 13998 13997 + 13998 14000 14001 + 13998 14001 13790 + 13790 13999 13998 + 13999 13790 13789 + 13789 14002 13999 + 13999 14002 13995 + 13444 14000 13445 + 14001 14000 13444 + 13444 13358 14001 + 13790 14001 13358 + 13888 13893 13922 + 13922 14003 13888 + 13888 14003 13889 + 14004 13889 14003 + 13889 14004 14005 + 14005 14006 13889 + 13889 14006 13884 + 14007 14003 13922 + 14003 14007 14004 + 14008 14004 14007 + 14005 14004 14008 + 14008 14009 14005 + 14010 14005 14009 + 14006 14005 14010 + 14010 14011 14006 + 13884 14006 14011 + 13922 13927 14007 + 14007 13927 13932 + 13932 14008 14007 + 14008 13932 14012 + 14009 14008 14012 + 14009 14012 14013 + 14013 14014 14009 + 14009 14014 14010 + 14015 14010 14014 + 14011 14010 14015 + 14012 13932 14016 + 14016 14017 14012 + 14012 14017 14018 + 14018 14019 14012 + 14019 14013 14012 + 14020 14013 14019 + 14014 14013 14020 + 14021 14016 13932 + 14022 14016 14021 + 14017 14016 14022 + 14017 14022 14023 + 14023 14018 14017 + 14024 14018 14023 + 14018 14024 14025 + 14025 14019 14018 + 13931 14021 13932 + 14026 14021 13931 + 14026 14027 14021 + 14021 14027 14022 + 14022 14027 14028 + 14028 14023 14022 + 14029 14023 14028 + 14023 14029 14024 + 13931 13937 14026 + 14026 13937 13946 + 13946 14030 14026 + 14027 14026 14030 + 14030 14028 14027 + 14031 14028 14030 + 14028 14031 14029 + 14029 14031 14032 + 14032 14033 14029 + 14024 14029 14033 + 14033 14034 14024 + 14025 14024 14034 + 14035 14030 13946 + 14030 14035 14031 + 14031 14035 14036 + 14036 14032 14031 + 14032 14036 14037 + 14037 14038 14032 + 14032 14038 14039 + 14039 14033 14032 + 14033 14039 14034 + 13946 14040 14035 + 14035 14040 14041 + 14036 14035 14041 + 14041 14042 14036 + 14037 14036 14042 + 14042 14043 14037 + 14044 14037 14043 + 14038 14037 14044 + 13945 14040 13946 + 14040 13945 14045 + 14045 14041 14040 + 14041 14045 14046 + 14046 14047 14041 + 14041 14047 14048 + 14048 14042 14041 + 14042 14048 14043 + 14045 13945 13951 + 13951 14049 14045 + 14046 14045 14049 + 14049 14050 14046 + 14051 14046 14050 + 14047 14046 14051 + 14051 14052 14047 + 14047 14052 14053 + 14053 14048 14047 + 14043 14048 14053 + 14054 14049 13951 + 14049 14054 14050 + 14050 14054 14055 + 14055 14056 14050 + 14050 14056 14051 + 14057 14051 14056 + 14052 14051 14057 + 13951 14058 14054 + 14055 14054 14058 + 14058 14059 14055 + 14060 14055 14059 + 14056 14055 14060 + 14060 14061 14056 + 14056 14061 14057 + 13956 14058 13951 + 14058 13956 14062 + 14062 14059 14058 + 14063 14059 14062 + 14059 14063 14060 + 14060 14063 14064 + 14064 14065 14060 + 14061 14060 14065 + 14065 14066 14061 + 14057 14061 14066 + 14062 13956 13955 + 13955 14067 14062 + 14068 14062 14067 + 14062 14068 14063 + 14063 14068 14069 + 14069 14064 14063 + 13961 14067 13955 + 14070 14067 13961 + 14067 14070 14068 + 14068 14070 14071 + 14071 14069 14068 + 14072 14069 14071 + 14064 14069 14072 + 14072 14073 14064 + 14064 14073 14074 + 14074 14065 14064 + 14066 14065 14074 + 13961 14075 14070 + 14070 14075 14076 + 14076 14071 14070 + 14071 14076 14077 + 14077 14078 14071 + 14071 14078 14072 + 14079 14072 14078 + 14073 14072 14079 + 14075 13961 14080 + 14080 14081 14075 + 14075 14081 14082 + 14076 14075 14082 + 14083 14076 14082 + 14077 14076 14083 + 14080 13961 13960 + 14084 14080 13960 + 14085 14080 14084 + 14081 14080 14085 + 14081 14085 14086 + 14086 14082 14081 + 13960 14087 14084 + 14088 14084 14087 + 14089 14084 14088 + 14084 14089 14085 + 14086 14085 14089 + 13970 14087 13960 + 14087 13970 13975 + 13975 14090 14087 + 14087 14090 14088 + 14088 14090 14091 + 14091 14092 14088 + 14089 14088 14092 + 14092 14093 14089 + 14089 14093 14086 + 14090 13975 14094 + 14094 14095 14090 + 14090 14095 14091 + 14096 14094 13975 + 14097 14094 14096 + 14094 14097 14098 + 14098 14095 14094 + 14095 14098 14099 + 14099 14100 14095 + 14095 14100 14091 + 13975 13974 14096 + 13974 14101 14096 + 14101 14102 14096 + 14103 14096 14102 + 14104 14096 14103 + 14096 14104 14097 + 13980 14101 13974 + 14101 13980 14105 + 14101 14105 14106 + 14106 14102 14101 + 14107 14102 14106 + 14102 14107 14103 + 14108 14103 14107 + 14109 14103 14108 + 14103 14109 14104 + 14105 13980 13979 + 13979 14110 14105 + 14105 14110 14111 + 14106 14105 14111 + 14111 14112 14106 + 14113 14106 14112 + 14106 14113 14107 + 14114 14110 13979 + 14110 14114 14115 + 14115 14116 14110 + 14110 14116 14111 + 14114 13979 13978 + 13978 13977 14114 + 14115 14114 13977 + 13977 13984 14115 + 14117 14115 13984 + 14116 14115 14117 + 14117 14118 14116 + 14116 14118 14119 + 14119 14111 14116 + 13984 13983 14117 + 14117 13983 13996 + 13996 14120 14117 + 14118 14117 14120 + 14120 14121 14118 + 14119 14118 14121 + 14121 14122 14119 + 14123 14119 14122 + 14111 14119 14123 + 14124 14120 13996 + 14124 14121 14120 + 14121 14124 14125 + 14125 14122 14121 + 14126 14122 14125 + 14122 14126 14123 + 13996 13995 14124 + 14125 14124 13995 + 14127 14125 13995 + 14126 14125 14127 + 14127 14128 14126 + 14123 14126 14128 + 14128 14129 14123 + 14130 14123 14129 + 14123 14130 14111 + 14131 14127 13995 + 14132 14127 14131 + 14128 14127 14132 + 14132 14133 14128 + 14128 14133 14134 + 14134 14129 14128 + 13995 14002 14131 + 14135 14131 14002 + 14131 14135 14136 + 14136 14137 14131 + 14131 14137 14132 + 14132 14137 14138 + 14138 14139 14132 + 14133 14132 14139 + 14002 13789 14135 + 13788 14135 13789 + 14136 14135 13788 + 13788 13795 14136 + 14136 13795 14140 + 14140 14141 14136 + 14137 14136 14141 + 14141 14138 14137 + 14138 14141 14142 + 14142 14143 14138 + 14138 14143 14144 + 14144 14139 14138 + 13794 14140 13795 + 14140 13794 14145 + 14145 14146 14140 + 14140 14146 14142 + 14142 14141 14140 + 14145 13794 13793 + 13793 13810 14145 + 14145 13810 14147 + 14147 14148 14145 + 14146 14145 14148 + 14148 14149 14146 + 14142 14146 14149 + 14149 14150 14142 + 14143 14142 14150 + 14150 14151 14143 + 14144 14143 14151 + 13809 14147 13810 + 14152 14147 13809 + 14147 14152 14153 + 14153 14148 14147 + 14149 14148 14153 + 14153 14154 14149 + 14149 14154 14155 + 14155 14150 14149 + 14151 14150 14155 + 13809 14156 14152 + 14152 14156 14157 + 14157 14158 14152 + 14153 14152 14158 + 14158 14159 14153 + 14154 14153 14159 + 14159 14160 14154 + 14155 14154 14160 + 14156 13809 14161 + 14161 14162 14156 + 14157 14156 14162 + 14162 14163 14157 + 14164 14157 14163 + 14157 14164 14165 + 14165 14158 14157 + 13808 14161 13809 + 14166 14161 13808 + 14161 14166 14167 + 14167 14162 14161 + 14162 14167 14168 + 14168 14163 14162 + 14163 14168 14169 + 14169 14170 14163 + 14163 14170 14164 + 13808 13807 14166 + 14166 13807 13806 + 14171 14166 13806 + 14167 14166 14171 + 14171 14172 14167 + 14172 14168 14167 + 14169 14168 14172 + 14172 14173 14169 + 14174 14169 14173 + 14170 14169 14174 + 13806 14175 14171 + 14173 14171 14175 + 14172 14171 14173 + 14176 14175 13806 + 14175 14176 14177 + 14177 14178 14175 + 14175 14178 14173 + 14173 14178 14179 + 14179 14180 14173 + 14180 14174 14173 + 13806 14181 14176 + 14182 14176 14181 + 14177 14176 14182 + 14182 14183 14177 + 7276 7275 13670 + 14184 13670 7275 + 13661 7284 14185 + 14185 14186 13661 + 13661 14186 13657 + 14187 13657 14186 + 13652 13657 14187 + 14187 14188 13652 + 13652 14188 13653 + 14186 14185 14189 + 14189 14190 14186 + 14186 14190 14187 + 14190 14191 14187 + 14188 14187 14191 + 14191 14192 14188 + 13653 14188 14192 + 14189 14185 7283 + 7283 14193 14189 + 14189 14193 14194 + 14190 14189 14194 + 14194 14191 14190 + 14192 14191 14194 + 14194 14195 14192 + 14192 14195 14196 + 14196 14197 14192 + 14192 14197 13653 + 7289 14193 7283 + 14193 7289 14195 + 14195 14194 14193 + 14196 14195 7289 + 7289 14198 14196 + 13475 14196 14198 + 14196 13475 13474 + 13474 14197 14196 + 14197 13474 14199 + 14199 13653 14197 + 13653 14199 13643 + 7288 14198 7289 + 7298 14198 7288 + 14198 7298 13475 + 13480 14199 13474 + 13643 14199 13480 + 13480 13644 13643 + 13479 13644 13480 + 13644 13479 13638 + 13639 13638 13479 + 13479 13487 13639 + 14200 13639 13487 + 13639 14200 13634 + 13634 14200 14201 + 14201 14202 13634 + 13634 14202 13630 + 13487 13486 14200 + 14201 14200 13486 + 13486 14203 14201 + 14204 14201 14203 + 14201 14204 14205 + 14205 14202 14201 + 14202 14205 14206 + 14206 13630 14202 + 13630 14206 13626 + 13485 14203 13486 + 14207 14203 13485 + 14203 14207 14204 + 14208 14204 14207 + 14205 14204 14208 + 14208 14209 14205 + 14205 14209 14210 + 14210 14206 14205 + 13626 14206 14210 + 14210 14211 13626 + 13626 14211 13620 + 13485 13492 14207 + 14207 13492 14212 + 14212 14213 14207 + 14207 14213 14208 + 14214 14208 14213 + 14208 14214 14215 + 14215 14209 14208 + 14209 14215 14216 + 14216 14210 14209 + 14212 13492 13491 + 13491 14217 14212 + 14218 14212 14217 + 14212 14218 14219 + 14219 14213 14212 + 14213 14219 14214 + 14220 14214 14219 + 14215 14214 14220 + 13498 14217 13491 + 14221 14217 13498 + 14217 14221 14218 + 14222 14218 14221 + 14219 14218 14222 + 14222 14223 14219 + 14219 14223 14220 + 14224 14220 14223 + 14223 14225 14224 + 13498 13503 14221 + 14221 13503 14226 + 14226 14227 14221 + 14221 14227 14222 + 14228 14222 14227 + 14227 14229 14228 + 14228 14229 14230 + 14226 13503 13502 + 13502 14231 14226 + 14232 14226 14231 + 14226 14232 14229 + 14229 14227 14226 + 14233 14231 13502 + 14234 14231 14233 + 14231 14234 14232 + 14232 14234 14235 + 14235 14236 14232 + 14229 14232 14236 + 14236 14237 14229 + 14229 14237 14230 + 13502 14238 14233 + 14233 14238 14239 + 14239 14240 14233 + 14241 14233 14240 + 14233 14241 14234 + 13501 14238 13502 + 14238 13501 14242 + 14242 14239 14238 + 14225 14223 14222 + 14222 14243 14225 + 14225 14243 14244 + 14244 14245 14225 + 14246 14225 14245 + 14245 14177 14246 + 14178 14177 14245 + 14247 14244 14243 + 14245 14179 14178 + 14244 14179 14245 + 14179 14244 14230 + 14230 14180 14179 + 14230 14248 14180 + 14180 14248 14249 + 14249 14174 14180 + 14250 14174 14249 + 14174 14250 14170 + 14248 14230 14237 + 14237 14251 14248 + 14248 14251 14252 + 14249 14248 14252 + 14252 14253 14249 + 14254 14249 14253 + 14249 14254 14250 + 14237 14236 14251 + 14251 14236 14235 + 14235 14252 14251 + 14235 14255 14252 + 14252 14255 14256 + 14256 14253 14252 + 14257 14253 14256 + 14253 14257 14254 + 14258 14254 14257 + 14250 14254 14258 + 14255 14235 14259 + 14259 14260 14255 + 14255 14260 14261 + 14261 14262 14255 + 14262 14256 14255 + 14263 14256 14262 + 14256 14263 14257 + 14234 14259 14235 + 14264 14259 14234 + 14260 14259 14264 + 14260 14264 14265 + 14265 14261 14260 + 14261 14265 14266 + 14261 14266 14267 + 14267 14262 14261 + 14268 14262 14267 + 14262 14268 14263 + 14234 14241 14264 + 14264 14241 14269 + 14269 14270 14264 + 14270 14271 14264 + 14271 14265 14264 + 14266 14265 14271 + 14271 14272 14266 + 14266 14272 14273 + 14273 14267 14266 + 14240 14269 14241 + 14269 14240 14274 + 14274 14275 14269 + 14269 14275 14276 + 14276 14270 14269 + 14277 14270 14276 + 14270 14277 14278 + 14278 14271 14270 + 14272 14271 14278 + 14274 14240 14239 + 14239 14279 14274 + 14280 14274 14279 + 14275 14274 14280 + 14280 7356 14275 + 14276 14275 7356 + 7361 14276 7356 + 14277 14276 7361 + 14281 14279 14239 + 14279 14282 14280 + 7361 7360 14277 + 14277 7360 7366 + 14278 14277 7366 + 14283 14278 7366 + 14272 14278 14283 + 14283 14273 14272 + 14284 14273 14283 + 14273 14284 14285 + 14285 14267 14273 + 14267 14285 14268 + 7366 14286 14283 + 14287 14283 14286 + 14283 14287 14284 + 14284 14287 14288 + 14288 14289 14284 + 14284 14289 14290 + 14290 14285 14284 + 14268 14285 14290 + 14291 14286 7366 + 14292 14286 14291 + 14286 14292 14287 + 14288 14287 14292 + 14292 14293 14288 + 14294 14288 14293 + 14288 14294 14295 + 14295 14289 14288 + 7366 7365 14291 + 14296 14291 7365 + 14297 14291 14296 + 14291 14297 14292 + 14292 14297 14298 + 14298 14293 14292 + 14299 14293 14298 + 14293 14299 14294 + 14300 14294 14299 + 14295 14294 14300 + 7365 7364 14296 + 14301 14296 7364 + 14302 14296 14301 + 14296 14302 14297 + 14298 14297 14302 + 14302 14303 14298 + 14304 14298 14303 + 14298 14304 14299 + 7364 7363 14301 + 14305 14301 7363 + 14306 14301 14305 + 14301 14306 14302 + 14302 14306 14307 + 14307 14303 14302 + 14308 14303 14307 + 14303 14308 14304 + 14309 14304 14308 + 14299 14304 14309 + 7363 7370 14305 + 7379 14305 7370 + 14310 14305 7379 + 14305 14310 14306 + 14307 14306 14310 + 14310 14311 14307 + 14312 14307 14311 + 14307 14312 14308 + 14308 14312 14313 + 14313 14314 14308 + 14308 14314 14309 + 7379 7384 14310 + 14310 7384 14315 + 14315 14311 14310 + 14316 14311 14315 + 14311 14316 14312 + 14313 14312 14316 + 14316 14317 14313 + 14318 14313 14317 + 14313 14318 14319 + 14319 14314 14313 + 14315 7384 7383 + 7383 14320 14315 + 14321 14315 14320 + 14315 14321 14316 + 14316 14321 14322 + 14322 14317 14316 + 14323 14317 14322 + 14317 14323 14318 + 14324 14318 14323 + 14319 14318 14324 + 14325 14320 7383 + 14326 14320 14325 + 14320 14326 14321 + 14322 14321 14326 + 14326 14327 14322 + 14328 14322 14327 + 14322 14328 14323 + 7383 7389 14325 + 14325 7389 7388 + 7388 14329 14325 + 14330 14325 14329 + 14325 14330 14326 + 14326 14330 14331 + 14331 14327 14326 + 14332 14327 14331 + 14327 14332 14328 + 14333 14328 14332 + 14323 14328 14333 + 7393 14329 7388 + 14334 14329 7393 + 14329 14334 14330 + 14331 14330 14334 + 14334 14335 14331 + 14336 14331 14335 + 14331 14336 14332 + 14332 14336 14337 + 14337 14338 14332 + 14332 14338 14333 + 7393 14339 14334 + 14334 14339 14340 + 14340 14335 14334 + 14341 14335 14340 + 14335 14341 14336 + 14337 14336 14341 + 14339 7393 7398 + 7398 14342 14339 + 14340 14339 14342 + 14342 14343 14340 + 14344 14340 14343 + 14340 14344 14341 + 14341 14344 14345 + 14345 14346 14341 + 14341 14346 14337 + 14342 7398 7397 + 7397 7403 14342 + 14342 7403 14347 + 14347 14343 14342 + 14348 14343 14347 + 14343 14348 14344 + 14345 14344 14348 + 14348 14349 14345 + 14350 14345 14349 + 14345 14350 14351 + 14351 14346 14345 + 14347 7403 7402 + 7402 14352 14347 + 14353 14347 14352 + 14347 14353 14348 + 14348 14353 14354 + 14354 14349 14348 + 14355 14349 14354 + 14349 14355 14350 + 14356 14350 14355 + 14351 14350 14356 + 14357 14352 7402 + 14358 14352 14357 + 14352 14358 14353 + 14354 14353 14358 + 14358 14359 14354 + 14360 14354 14359 + 14354 14360 14355 + 7402 14361 14357 + 14357 14361 7421 + 7421 14362 14357 + 14363 14357 14362 + 14357 14363 14358 + 14358 14363 171 + 171 14359 14358 + 7401 14361 7402 + 14361 7401 7414 + 7414 7421 14361 + 7426 14362 7421 + 14364 14362 7426 + 14362 14364 14363 + 171 14363 14364 + 14364 14365 171 + 14366 171 14365 + 171 14366 14367 + 7426 14368 14364 + 14364 14368 14369 + 14369 14365 14364 + 14370 14365 14369 + 14365 14370 14366 + 14371 14366 14370 + 14367 14366 14371 + 14368 7426 14372 + 14372 7459 14368 + 14369 14368 7459 + 7459 7463 14369 + 7468 14369 7463 + 14369 7468 14370 + 7425 14372 7426 + 7438 14372 7425 + 7459 14372 7438 + 14370 7468 7467 + 7467 7480 14370 + 14370 7480 14371 + 7479 14371 7480 + 14371 7479 14373 + 14373 14374 14371 + 14371 14374 14367 + 14367 14374 14375 + 14375 14360 14367 + 14359 14367 14360 + 14373 7479 14376 + 14376 14377 14373 + 14373 14377 14378 + 14378 14379 14373 + 14374 14373 14379 + 14379 14375 14374 + 7478 14376 7479 + 14380 14376 7478 + 14380 14377 14376 + 14377 14380 14381 + 14381 14382 14377 + 14377 14382 14378 + 7478 7484 14380 + 14381 14380 7484 + 7491 14381 7484 + 14383 14381 7491 + 14383 14382 14381 + 14382 14383 14384 + 14384 14378 14382 + 14384 14385 14378 + 14378 14385 14386 + 14386 14379 14378 + 14375 14379 14386 + 7491 14387 14383 + 14383 14387 14388 + 14388 14384 14383 + 14385 14384 14388 + 14388 14389 14385 + 14386 14385 14389 + 14389 14390 14386 + 14391 14386 14390 + 14386 14391 14375 + 14392 14387 7491 + 14387 14392 14393 + 14393 14394 14387 + 14387 14394 14388 + 7491 7490 14392 + 14392 7490 7496 + 7496 14395 14392 + 14392 14395 14396 + 14396 14393 14392 + 14397 14393 14396 + 14394 14393 14397 + 14395 7496 7495 + 7495 14398 14395 + 14395 14398 14399 + 14399 14396 14395 + 14396 14399 14400 + 14396 14400 14397 + 14398 7495 14401 + 14401 14402 14398 + 14398 14402 14403 + 14399 14398 14403 + 14403 14404 14399 + 14400 14399 14404 + 14404 14405 14400 + 14397 14400 14405 + 14406 14401 7495 + 14407 14401 14406 + 14401 14407 14402 + 14402 14407 14408 + 14408 14403 14402 + 14403 14408 14409 + 14403 14409 14410 + 14410 14404 14403 + 7495 7494 14406 + 7494 14411 14406 + 14412 14406 14411 + 14412 14413 14406 + 14406 14413 14407 + 14407 14413 14414 + 14408 14407 14414 + 14414 14415 14408 + 14409 14408 14415 + 7501 14411 7494 + 14411 7501 14416 + 14416 14417 14411 + 14411 14417 14412 + 14412 14417 14418 + 14418 14419 14412 + 14413 14412 14419 + 14419 14414 14413 + 14416 7501 7500 + 7500 14420 14416 + 14421 14416 14420 + 14417 14416 14421 + 14421 14422 14417 + 14417 14422 14418 + 7510 14420 7500 + 14420 7510 14423 + 14423 14424 14420 + 14420 14424 14421 + 14424 14425 14421 + 14426 14421 14425 + 14422 14421 14426 + 7514 14423 7510 + 14427 14423 7514 + 14423 14427 14428 + 14428 14424 14423 + 14424 14428 14429 + 14429 14425 14424 + 14425 14429 14430 + 14430 14431 14425 + 14425 14431 14426 + 7514 7519 14427 + 14432 14427 7519 + 14428 14427 14432 + 14432 14433 14428 + 14429 14428 14433 + 14433 14434 14429 + 14430 14429 14434 + 14434 14435 14430 + 14436 14430 14435 + 14431 14430 14436 + 7519 14437 14432 + 14438 14432 14437 + 14432 14438 14439 + 14439 14433 14432 + 14433 14439 14440 + 14440 14434 14433 + 14434 14440 14441 + 14441 14435 14434 + 7524 14437 7519 + 14442 14437 7524 + 14437 14442 14438 + 14438 14442 14443 + 14443 14444 14438 + 14439 14438 14444 + 14444 14445 14439 + 14439 14445 14446 + 14446 14440 14439 + 14441 14440 14446 + 7524 14447 14442 + 14442 14447 14448 + 14448 14443 14442 + 14449 14443 14448 + 14443 14449 14450 + 14450 14444 14443 + 14445 14444 14450 + 14445 14450 14451 + 14451 14446 14445 + 14447 7524 7523 + 7523 14452 14447 + 14447 14452 14453 + 14453 14448 14447 + 14454 14448 14453 + 14448 14454 14449 + 14452 7523 7522 + 7522 7529 14452 + 14452 7529 14455 + 14455 14453 14452 + 14456 14453 14455 + 14453 14456 14454 + 14457 14454 14456 + 14449 14454 14457 + 14457 14458 14449 + 14449 14458 14459 + 14450 14449 14459 + 14459 14451 14450 + 7534 14455 7529 + 14460 14455 7534 + 14455 14460 14456 + 14456 14460 14461 + 14461 14462 14456 + 14456 14462 14457 + 14462 14463 14457 + 14464 14457 14463 + 14458 14457 14464 + 7534 7549 14460 + 14460 7549 14465 + 14465 14466 14460 + 14466 14461 14460 + 14467 14461 14466 + 14462 14461 14467 + 14467 14468 14462 + 14462 14468 14469 + 14469 14463 14462 + 7548 14465 7549 + 7548 14470 14465 + 14465 14470 14471 + 14471 14466 14465 + 14471 14472 14466 + 14466 14472 14467 + 14470 7548 14473 + 14473 14474 14470 + 14470 14474 14475 + 14475 14471 14470 + 14472 14471 14475 + 14475 14476 14472 + 14467 14472 14476 + 14477 14473 7548 + 14478 14473 14477 + 14478 14474 14473 + 14474 14478 14479 + 14479 14480 14474 + 14474 14480 14475 + 14481 14475 14480 + 14475 14481 14476 + 7547 14477 7548 + 14482 14477 7547 + 14482 14483 14477 + 14477 14483 14478 + 14479 14478 14483 + 7547 14484 14482 + 14482 14484 14485 + 14485 14486 14482 + 14486 14487 14482 + 14487 14488 14482 + 14483 14482 14488 + 7546 14484 7547 + 14484 7546 14489 + 14489 14485 14484 + 14490 14485 14489 + 14485 14490 14491 + 14491 14486 14485 + 14492 14486 14491 + 14486 14492 14493 + 14493 14487 14486 + 7556 14489 7546 + 14490 14489 7556 + 7556 14494 14490 + 14491 14490 14494 + 14494 14495 14491 + 14492 14491 14495 + 14495 14496 14492 + 14492 14496 14497 + 14497 14493 14492 + 14498 14493 14497 + 14493 14498 14487 + 7555 14494 7556 + 14494 7555 14499 + 14499 14495 14494 + 14496 14495 14499 + 14496 14499 7560 + 7560 14497 14496 + 14497 7560 14500 + 14497 14500 14498 + 14501 14498 14500 + 14487 14498 14501 + 14501 14488 14487 + 14501 14502 14488 + 14488 14502 14483 + 14483 14502 14479 + 7560 14499 7555 + 14355 14360 14375 + 14375 14391 14355 + 14355 14391 14356 + 14390 14356 14391 + 14356 14390 14503 + 14503 14504 14356 + 14356 14504 14351 + 14351 14504 14505 + 14505 14506 14351 + 14346 14351 14506 + 14503 14390 14389 + 14389 14507 14503 + 14503 14507 14508 + 14508 14509 14503 + 14504 14503 14509 + 14509 14505 14504 + 14507 14389 14388 + 14388 14510 14507 + 14507 14510 14511 + 14511 14508 14507 + 14511 14512 14508 + 14508 14512 14513 + 14513 14509 14508 + 14505 14509 14513 + 14510 14388 14514 + 14514 14515 14510 + 14510 14515 14516 + 14516 14511 14510 + 14512 14511 14516 + 14516 14517 14512 + 14513 14512 14517 + 14394 14514 14388 + 14518 14514 14394 + 14514 14518 14515 + 14515 14518 14519 + 14519 14520 14515 + 14515 14520 14516 + 14394 14521 14518 + 14518 14521 14522 + 14522 14519 14518 + 14523 14519 14522 + 14520 14519 14523 + 14397 14521 14394 + 14521 14397 14524 + 14524 14522 14521 + 14525 14522 14524 + 14522 14525 14523 + 14523 14525 14526 + 14526 14527 14523 + 14528 14523 14527 + 14523 14528 14520 + 14524 14397 14405 + 14529 14524 14405 + 14530 14524 14529 + 14524 14530 14525 + 14525 14530 14531 + 14531 14526 14525 + 14532 14526 14531 + 14526 14532 14533 + 14533 14527 14526 + 14405 14534 14529 + 14535 14529 14534 + 14529 14535 14536 + 14529 14536 14530 + 14530 14536 14537 + 14537 14531 14530 + 14538 14531 14537 + 14531 14538 14532 + 14539 14534 14405 + 14540 14534 14539 + 14534 14540 14535 + 14535 14540 14541 + 14541 14542 14535 + 14536 14535 14542 + 14542 14537 14536 + 14543 14537 14542 + 14537 14543 14538 + 14405 14544 14539 + 14545 14539 14544 + 14546 14539 14545 + 14539 14546 14540 + 14540 14546 14547 + 14547 14541 14540 + 14544 14405 14404 + 14404 14410 14544 + 14544 14410 14548 + 14548 14549 14544 + 14544 14549 14545 + 14550 14545 14549 + 14545 14550 14551 + 14551 14552 14545 + 14545 14552 14546 + 14547 14546 14552 + 14548 14410 14553 + 14553 14554 14548 + 14555 14548 14554 + 14548 14555 14556 + 14556 14549 14548 + 14549 14556 14550 + 14557 14550 14556 + 14551 14550 14557 + 14410 14409 14553 + 14415 14553 14409 + 14558 14553 14415 + 14553 14558 14559 + 14559 14554 14553 + 14554 14559 14560 + 14560 14561 14554 + 14554 14561 14555 + 14562 14555 14561 + 14556 14555 14562 + 14415 14563 14558 + 14558 14563 14564 + 14564 14565 14558 + 14558 14565 14559 + 14560 14559 14565 + 14565 14566 14560 + 14567 14560 14566 + 14561 14560 14567 + 14563 14415 14414 + 14414 14568 14563 + 14564 14563 14568 + 14568 14569 14564 + 14570 14564 14569 + 14565 14564 14570 + 14570 14566 14565 + 14566 14570 14571 + 14571 14572 14566 + 14566 14572 14567 + 14573 14568 14414 + 14568 14573 14574 + 14574 14569 14568 + 14575 14569 14574 + 14569 14575 14570 + 14570 14575 14464 + 14464 14571 14570 + 14463 14571 14464 + 14572 14571 14463 + 14414 14419 14573 + 14573 14419 14418 + 14418 14576 14573 + 14574 14573 14576 + 14576 14577 14574 + 14578 14574 14577 + 14574 14578 14575 + 14579 14576 14418 + 14576 14579 14580 + 14580 14577 14576 + 14581 14577 14580 + 14577 14581 14578 + 14418 14582 14579 + 14579 14582 14583 + 14583 14584 14579 + 14579 14584 14585 + 14585 14580 14579 + 14586 14580 14585 + 14580 14586 14581 + 14582 14418 14587 + 14587 14588 14582 + 14582 14588 14589 + 14589 14583 14582 + 14590 14583 14589 + 14584 14583 14590 + 14584 14590 14591 + 14591 14585 14584 + 14422 14587 14418 + 14592 14587 14422 + 14592 14588 14587 + 14588 14592 14593 + 14593 14589 14588 + 14594 14589 14593 + 14589 14594 14590 + 14590 14594 14595 + 14595 14596 14590 + 14596 14591 14590 + 14597 14591 14596 + 14422 14426 14592 + 14593 14592 14426 + 14426 14431 14593 + 14431 14598 14593 + 14599 14593 14598 + 14593 14599 14594 + 14594 14599 14600 + 14600 14595 14594 + 14436 14598 14431 + 14601 14598 14436 + 14598 14601 14599 + 14600 14599 14601 + 14601 14602 14600 + 14603 14600 14602 + 14595 14600 14603 + 14603 14604 14595 + 14595 14604 14605 + 14605 14596 14595 + 14436 14606 14601 + 14601 14606 14607 + 14607 14602 14601 + 14608 14602 14607 + 14602 14608 14603 + 14603 14608 14609 + 14609 14610 14603 + 14604 14603 14610 + 14606 14436 14611 + 14611 14612 14606 + 14607 14606 14612 + 14612 14613 14607 + 14614 14607 14613 + 14607 14614 14608 + 14435 14611 14436 + 14615 14611 14435 + 14612 14611 14615 + 14615 14616 14612 + 14612 14616 14617 + 14617 14613 14612 + 14618 14613 14617 + 14613 14618 14614 + 14619 14614 14618 + 14608 14614 14619 + 14435 14441 14615 + 14615 14441 14620 + 14620 14621 14615 + 14616 14615 14621 + 14621 14622 14616 + 14617 14616 14622 + 14622 14623 14617 + 14624 14617 14623 + 14617 14624 14618 + 14446 14620 14441 + 14620 14446 14451 + 14451 14625 14620 + 14620 14625 14626 + 14626 14621 14620 + 14626 14622 14621 + 14622 14626 14627 + 14627 14623 14622 + 14623 14627 14628 + 14628 14629 14623 + 14623 14629 14624 + 14625 14451 14459 + 14459 14630 14625 + 14625 14630 14627 + 14627 14626 14625 + 14630 14459 14631 + 14631 14632 14630 + 14630 14632 14633 + 14633 14634 14630 + 14630 14634 14627 + 14634 14635 14627 + 14628 14627 14635 + 14631 14459 14458 + 14458 14636 14631 + 14631 14636 14637 + 14637 14581 14631 + 14632 14631 14581 + 14581 14586 14632 + 14633 14632 14586 + 14464 14636 14458 + 14636 14464 14575 + 14575 14637 14636 + 14605 14604 14638 + 14629 14628 14639 + 14639 14640 14629 + 14624 14629 14640 + 14640 14641 14624 + 14618 14624 14641 + 14641 14642 14618 + 14618 14642 14619 + 14640 14639 14643 + 14643 14644 14640 + 14640 14644 14645 + 14645 14641 14640 + 14641 14645 14646 + 14646 14642 14641 + 14642 14646 14647 + 14647 14619 14642 + 14644 14643 14648 + 14648 14649 14644 + 14644 14649 14650 + 14650 14645 14644 + 14646 14645 14650 + 14650 14651 14646 + 14646 14651 14652 + 14652 14647 14646 + 14653 14648 14643 + 14654 14648 14653 + 14649 14648 14654 + 14654 14655 14649 + 14649 14655 14656 + 14656 14650 14649 + 14651 14650 14656 + 14656 14657 14651 + 14651 14657 14658 + 14658 14652 14651 + 14653 14659 14654 + 14660 14654 14659 + 14655 14654 14660 + 14660 14661 14655 + 14655 14661 14662 + 14662 14656 14655 + 14657 14656 14662 + 14659 14653 14663 + 14663 14664 14659 + 14659 14664 14665 + 14665 14666 14659 + 14659 14666 14667 + 14667 14660 14659 + 14663 14653 14668 + 14668 14669 14663 + 14663 14669 14670 + 14664 14663 14670 + 14671 14668 14653 + 14672 14668 14671 + 14668 14672 14673 + 14673 14669 14668 + 14669 14673 14674 + 14674 14670 14669 + 14675 14670 14674 + 14670 14675 14664 + 14676 14671 14653 + 14677 14671 14676 + 14671 14677 14610 + 14610 14678 14671 + 14671 14678 14672 + 14679 14672 14678 + 14673 14672 14679 + 14679 14680 14673 + 14680 14674 14673 + 14676 14681 14677 + 14604 14677 14681 + 14610 14677 14604 + 14678 14610 14609 + 14609 14682 14678 + 14678 14682 14679 + 14682 14683 14679 + 14683 14684 14679 + 14685 14679 14684 + 14680 14679 14685 + 14682 14609 14686 + 14682 14686 14687 + 14687 14683 14682 + 14683 14687 14688 + 14688 14689 14683 + 14683 14689 14690 + 14690 14684 14683 + 14686 14609 14691 + 14691 14692 14686 + 14687 14686 14692 + 14692 14693 14687 + 14688 14687 14693 + 14608 14691 14609 + 14619 14691 14608 + 14692 14691 14619 + 14619 14647 14692 + 14692 14647 14652 + 14652 14693 14692 + 14652 14658 14693 + 14693 14658 14688 + 14688 14658 14657 + 14657 14694 14688 + 14694 14695 14688 + 14689 14688 14695 + 14695 14696 14689 + 14689 14696 14697 + 14690 14689 14697 + 14662 14694 14657 + 14698 14694 14662 + 14694 14698 14699 + 14699 14695 14694 + 14695 14699 14700 + 14700 14696 14695 + 14696 14700 14701 + 14701 14697 14696 + 14662 14702 14698 + 14698 14702 14703 + 14703 14704 14698 + 14698 14704 14705 + 14705 14699 14698 + 14700 14699 14705 + 14705 14706 14700 + 14701 14700 14706 + 14702 14662 14661 + 14661 14707 14702 + 14703 14702 14707 + 14707 14708 14703 + 14709 14703 14708 + 14703 14709 14710 + 14710 14704 14703 + 14704 14710 14711 + 14711 14705 14704 + 14707 14661 14660 + 14660 14712 14707 + 14707 14712 14151 + 14151 14708 14707 + 14155 14708 14151 + 14708 14155 14709 + 14160 14709 14155 + 14710 14709 14160 + 14712 14660 14667 + 14667 14144 14712 + 14151 14712 14144 + 14144 14667 14713 + 14713 14139 14144 + 14139 14713 14133 + 14133 14713 14714 + 14714 14134 14133 + 14713 14667 14666 + 14666 14714 14713 + 14665 14714 14666 + 14714 14665 14715 + 14715 14134 14714 + 14129 14134 14715 + 14715 14716 14129 + 14129 14716 14130 + 14715 14665 14664 + 14717 14715 14664 + 14716 14715 14717 + 14717 14718 14716 + 14130 14716 14718 + 14718 14719 14130 + 14719 14720 14130 + 14720 14721 14130 + 14111 14130 14721 + 14722 14717 14664 + 14723 14717 14722 + 14723 14718 14717 + 14718 14723 14724 + 14724 14719 14718 + 14724 14725 14719 + 14719 14725 14726 + 14726 14720 14719 + 14664 14675 14722 + 14727 14722 14675 + 14728 14722 14727 + 14722 14728 14723 + 14723 14728 14729 + 14724 14723 14729 + 14730 14724 14729 + 14725 14724 14730 + 14675 14731 14727 + 14727 14731 14732 + 14733 14727 14732 + 14728 14727 14733 + 14733 14729 14728 + 14674 14731 14675 + 14731 14674 14680 + 14680 14732 14731 + 14685 14732 14680 + 14732 14685 14734 + 14734 14735 14732 + 14732 14735 14733 + 14736 14733 14735 + 14729 14733 14736 + 14737 14734 14685 + 14738 14734 14737 + 14738 14735 14734 + 14735 14738 14736 + 14739 14736 14738 + 14729 14736 14739 + 14740 14737 14685 + 14741 14737 14740 + 14737 14741 14742 + 14742 14743 14737 + 14737 14743 14738 + 14738 14743 14739 + 14744 14740 14685 + 14745 14740 14744 + 14740 14745 14746 + 14746 14747 14740 + 14740 14747 14741 + 14685 14748 14744 + 14749 14744 14748 + 14744 14749 14750 + 14744 14750 14745 + 14745 14750 14751 + 14752 14745 14751 + 14746 14745 14752 + 14684 14748 14685 + 14684 14690 14748 + 14748 14690 14749 + 14697 14749 14690 + 14750 14749 14697 + 14697 14751 14750 + 14751 14697 14701 + 14751 14701 14753 + 14753 14754 14751 + 14751 14754 14752 + 14755 14752 14754 + 14752 14755 14756 + 14756 14757 14752 + 14752 14757 14746 + 14706 14753 14701 + 14758 14753 14706 + 14753 14758 14759 + 14759 14754 14753 + 14754 14759 14755 + 14760 14755 14759 + 14756 14755 14760 + 14706 14761 14758 + 14762 14758 14761 + 14759 14758 14762 + 14762 14763 14759 + 14759 14763 14760 + 14761 14706 14705 + 14705 14711 14761 + 14761 14711 14764 + 14764 14765 14761 + 14761 14765 14762 + 14766 14762 14765 + 14762 14766 14767 + 14767 14763 14762 + 14763 14767 14768 + 14768 14760 14763 + 14764 14711 14710 + 14710 14769 14764 + 14770 14764 14769 + 14764 14770 14771 + 14771 14765 14764 + 14765 14771 14766 + 14772 14766 14771 + 14767 14766 14772 + 14772 14773 14767 + 14768 14767 14773 + 14160 14769 14710 + 14774 14769 14160 + 14769 14774 14770 + 14775 14770 14774 + 14771 14770 14775 + 14775 14776 14771 + 14771 14776 14772 + 14777 14772 14776 + 14773 14772 14777 + 14160 14159 14774 + 14774 14159 14158 + 14158 14165 14774 + 14774 14165 14775 + 14778 14775 14165 + 14775 14778 14776 + 14776 14778 14777 + 14777 14778 14164 + 14164 14170 14777 + 14170 14250 14777 + 14250 14779 14777 + 14773 14777 14779 + 14165 14164 14778 + 14258 14779 14250 + 14780 14779 14258 + 14779 14780 14773 + 14773 14780 14768 + 14781 14768 14780 + 14760 14768 14781 + 14781 14782 14760 + 14760 14782 14756 + 14258 14783 14780 + 14780 14783 14781 + 14781 14783 14784 + 14784 14785 14781 + 14782 14781 14785 + 14785 14786 14782 + 14756 14782 14786 + 14786 14787 14756 + 14757 14756 14787 + 14783 14258 14788 + 14788 14784 14783 + 14784 14788 14789 + 14789 14790 14784 + 14784 14790 14791 + 14791 14785 14784 + 14786 14785 14791 + 14257 14788 14258 + 14789 14788 14257 + 14257 14263 14789 + 14789 14263 14268 + 14268 14792 14789 + 14790 14789 14792 + 14792 14793 14790 + 14791 14790 14793 + 14793 14794 14791 + 14795 14791 14794 + 14791 14795 14786 + 14786 14795 14796 + 14796 14787 14786 + 14290 14792 14268 + 14793 14792 14290 + 14290 14797 14793 + 14793 14797 14798 + 14798 14794 14793 + 14799 14794 14798 + 14794 14799 14795 + 14796 14795 14799 + 14799 14800 14796 + 14801 14796 14800 + 14796 14801 14802 + 14797 14290 14289 + 14289 14295 14797 + 14798 14797 14295 + 14295 14803 14798 + 14804 14798 14803 + 14798 14804 14799 + 14799 14804 14805 + 14805 14800 14799 + 14300 14803 14295 + 14806 14803 14300 + 14803 14806 14804 + 14805 14804 14806 + 14806 14807 14805 + 14808 14805 14807 + 14805 14808 14809 + 14300 14810 14806 + 14806 14810 14811 + 14811 14807 14806 + 14812 14807 14811 + 14807 14812 14808 + 14813 14808 14812 + 14809 14808 14813 + 14810 14300 14814 + 14814 14815 14810 + 14811 14810 14815 + 14815 14816 14811 + 14817 14811 14816 + 14811 14817 14812 + 14299 14814 14300 + 14309 14814 14299 + 14815 14814 14309 + 14309 14818 14815 + 14815 14818 14819 + 14819 14816 14815 + 14820 14816 14819 + 14816 14820 14817 + 14821 14817 14820 + 14812 14817 14821 + 14821 14822 14812 + 14812 14822 14813 + 14818 14309 14314 + 14314 14319 14818 + 14819 14818 14319 + 14319 14823 14819 + 14824 14819 14823 + 14819 14824 14820 + 14820 14824 14825 + 14825 14826 14820 + 14820 14826 14821 + 14324 14823 14319 + 14827 14823 14324 + 14823 14827 14824 + 14825 14824 14827 + 14827 14828 14825 + 14829 14825 14828 + 14825 14829 14830 + 14830 14826 14825 + 14826 14830 14831 + 14831 14821 14826 + 14324 14832 14827 + 14832 14324 14833 + 14833 14834 14832 + 14323 14833 14324 + 14333 14833 14323 + 14834 14833 14333 + 14333 14835 14834 + 14834 14835 14836 + 14836 14837 14834 + 14834 14837 14838 + 14838 14839 14834 + 14827 14839 14838 + 14838 14828 14827 + 14835 14333 14338 + 14338 14840 14835 + 14836 14835 14840 + 14840 14841 14836 + 14842 14836 14841 + 14836 14842 14843 + 14843 14837 14836 + 14837 14843 14844 + 14844 14838 14837 + 14840 14338 14337 + 14337 14506 14840 + 14840 14506 14505 + 14505 14841 14840 + 14513 14841 14505 + 14841 14513 14842 + 14517 14842 14513 + 14843 14842 14517 + 14506 14337 14346 + 14800 14809 14801 + 14845 14801 14809 + 14802 14801 14845 + 14845 14846 14802 + 14802 14846 14746 + 14746 14757 14802 + 14787 14802 14757 + 14809 14847 14845 + 14848 14845 14847 + 14845 14848 14849 + 14849 14846 14845 + 14846 14849 14747 + 14747 14746 14846 + 14813 14847 14809 + 14850 14847 14813 + 14847 14850 14848 + 14851 14848 14850 + 14849 14848 14851 + 14851 14852 14849 + 14849 14852 14741 + 14741 14747 14849 + 14813 14853 14850 + 14850 14853 14854 + 14854 14855 14850 + 14850 14855 14851 + 14856 14851 14855 + 14856 14852 14851 + 14852 14856 14742 + 14742 14741 14852 + 14853 14813 14822 + 14822 14857 14853 + 14854 14853 14857 + 14857 14858 14854 + 14859 14854 14858 + 14855 14854 14859 + 14859 14860 14855 + 14855 14860 14856 + 14742 14856 14860 + 14857 14822 14821 + 14821 14831 14857 + 14857 14831 14861 + 14861 14858 14857 + 14858 14861 14862 + 14862 14863 14858 + 14858 14863 14859 + 14859 14863 14864 + 14864 14865 14859 + 14860 14859 14865 + 14861 14831 14830 + 14830 14866 14861 + 14862 14861 14866 + 14866 14867 14862 + 14862 14867 14868 + 14868 14869 14862 + 14863 14862 14869 + 14869 14864 14863 + 14870 14866 14830 + 14866 14870 14871 + 14871 14867 14866 + 14867 14871 14872 + 14872 14868 14867 + 14830 14829 14870 + 14873 14870 14829 + 14871 14870 14873 + 14873 14874 14871 + 14872 14871 14874 + 14874 14875 14872 + 14876 14872 14875 + 14868 14872 14876 + 14829 14877 14873 + 14878 14873 14877 + 14874 14873 14878 + 14878 14879 14874 + 14874 14879 14880 + 14880 14875 14874 + 14828 14877 14829 + 14877 14828 14838 + 14838 14844 14877 + 14877 14844 14878 + 14878 14844 14843 + 14843 14881 14878 + 14879 14878 14881 + 14881 14882 14879 + 14879 14882 14883 + 14883 14880 14879 + 14884 14880 14883 + 14875 14880 14884 + 14884 14885 14875 + 14875 14885 14876 + 14517 14881 14843 + 14881 14517 14516 + 14516 14882 14881 + 14882 14516 14886 + 14886 14883 14882 + 14887 14883 14886 + 14883 14887 14884 + 14884 14887 14888 + 14888 14889 14884 + 14885 14884 14889 + 14889 14890 14885 + 14876 14885 14890 + 14520 14886 14516 + 14891 14886 14520 + 14886 14891 14887 + 14887 14891 14892 + 14892 14888 14887 + 14893 14888 14892 + 14888 14893 14894 + 14894 14889 14888 + 14889 14894 14895 + 14895 14890 14889 + 14520 14528 14891 + 14891 14528 14896 + 14896 14892 14891 + 14897 14892 14896 + 14892 14897 14893 + 14893 14897 14898 + 14898 14899 14893 + 14894 14893 14899 + 14899 14900 14894 + 14895 14894 14900 + 14527 14896 14528 + 14901 14896 14527 + 14896 14901 14897 + 14897 14901 14902 + 14902 14898 14897 + 14903 14898 14902 + 14898 14903 14904 + 14904 14899 14898 + 14899 14904 14905 + 14905 14900 14899 + 14527 14533 14901 + 14901 14533 14906 + 14906 14902 14901 + 14907 14902 14906 + 14902 14907 14903 + 14903 14907 14908 + 14908 14909 14903 + 14904 14903 14909 + 14909 14910 14904 + 14905 14904 14910 + 14911 14906 14533 + 14912 14906 14911 + 14906 14912 14907 + 14907 14912 14913 + 14913 14908 14907 + 14914 14908 14913 + 14908 14914 14915 + 14915 14909 14908 + 14533 14532 14911 + 14916 14911 14532 + 14917 14911 14916 + 14911 14917 14912 + 14912 14917 14918 + 14918 14913 14912 + 14919 14913 14918 + 14913 14919 14914 + 14532 14538 14916 + 14916 14538 14920 + 14920 14921 14916 + 14922 14916 14921 + 14916 14922 14917 + 14917 14922 14923 + 14923 14918 14917 + 14924 14918 14923 + 14918 14924 14919 + 14538 14543 14920 + 14541 14920 14543 + 14925 14920 14541 + 14920 14925 14926 + 14926 14921 14920 + 14927 14921 14926 + 14921 14927 14922 + 14922 14927 14928 + 14928 14923 14922 + 14543 14542 14541 + 14541 14547 14925 + 14925 14547 14929 + 14929 14930 14925 + 14925 14930 14931 + 14931 14926 14925 + 14932 14926 14931 + 14926 14932 14927 + 14927 14932 14933 + 14933 14928 14927 + 14552 14929 14547 + 14934 14929 14552 + 14930 14929 14934 + 14934 14935 14930 + 14930 14935 14936 + 14936 14931 14930 + 14937 14931 14936 + 14931 14937 14932 + 14932 14937 14938 + 14938 14933 14932 + 14552 14551 14934 + 14939 14934 14551 + 14935 14934 14939 + 14939 14940 14935 + 14935 14940 14941 + 14941 14936 14935 + 14942 14936 14941 + 14936 14942 14937 + 14937 14942 14943 + 14943 14938 14937 + 14551 14944 14939 + 14944 14945 14939 + 14946 14939 14945 + 14940 14939 14946 + 14946 14947 14940 + 14940 14947 14948 + 14948 14941 14940 + 14557 14944 14551 + 14949 14944 14557 + 14944 14949 14950 + 14950 14945 14944 + 14945 14950 14951 + 14951 14952 14945 + 14945 14952 14946 + 14953 14946 14952 + 14947 14946 14953 + 14557 14954 14949 + 14949 14954 14955 + 14955 14956 14949 + 14950 14949 14956 + 14956 14957 14950 + 14951 14950 14957 + 14954 14557 14958 + 14958 14959 14954 + 14955 14954 14959 + 14959 14960 14955 + 14961 14955 14960 + 14956 14955 14961 + 14556 14958 14557 + 14562 14958 14556 + 14959 14958 14562 + 14562 14962 14959 + 14959 14962 14963 + 14963 14960 14959 + 14960 14963 14964 + 14964 14965 14960 + 14960 14965 14961 + 14962 14562 14966 + 14966 14967 14962 + 14963 14962 14967 + 14967 14968 14963 + 14968 14969 14963 + 14964 14963 14969 + 14561 14966 14562 + 14567 14966 14561 + 14967 14966 14567 + 14567 14970 14967 + 14967 14970 14971 + 14971 14968 14967 + 14968 14971 14972 + 14972 14973 14968 + 14968 14973 14974 + 14974 14969 14968 + 14970 14567 14572 + 14572 14469 14970 + 14971 14970 14469 + 14469 14468 14971 + 14972 14971 14468 + 14468 14467 14972 + 14975 14972 14467 + 14973 14972 14975 + 14463 14469 14572 + 14476 14975 14467 + 14976 14975 14476 + 14975 14976 14977 + 14977 14978 14975 + 14975 14978 14973 + 14973 14978 14979 + 14979 14974 14973 + 14980 14974 14979 + 14969 14974 14980 + 14476 14481 14976 + 14976 14481 14981 + 14981 14982 14976 + 14977 14976 14982 + 14982 14983 14977 + 14984 14977 14983 + 14978 14977 14984 + 14984 14979 14978 + 14480 14981 14481 + 14985 14981 14480 + 14981 14985 14986 + 14986 14982 14981 + 14982 14986 14987 + 14987 14983 14982 + 14983 14987 14988 + 14988 14989 14983 + 14983 14989 14984 + 14480 14479 14985 + 14985 14479 14990 + 14990 14991 14985 + 14985 14991 14992 + 14992 14986 14985 + 14987 14986 14992 + 14992 14993 14987 + 14988 14987 14993 + 14994 14990 14479 + 14995 14990 14994 + 14995 14991 14990 + 14991 14995 14996 + 14996 14992 14991 + 14996 14993 14992 + 14993 14996 14997 + 14997 14998 14993 + 14993 14998 14988 + 14502 14994 14479 + 14999 14994 14502 + 15000 14994 14999 + 14994 15000 14995 + 14996 14995 15000 + 14502 14501 14999 + 15001 14999 14501 + 15000 14999 15001 + 15001 15002 15000 + 15000 15002 14996 + 15003 15001 14501 + 15004 15001 15003 + 15002 15001 15004 + 15002 15004 15005 + 15005 15006 15002 + 15002 15006 14996 + 15007 15003 14501 + 15008 15003 15007 + 15008 15009 15003 + 15003 15009 15004 + 15004 15009 15010 + 15010 15005 15004 + 15011 15005 15010 + 15006 15005 15011 + 14500 15007 14501 + 15012 15007 14500 + 15013 15007 15012 + 15007 15013 15008 + 15008 15013 1628 + 15014 15008 1628 + 15009 15008 15014 + 15014 15010 15009 + 15014 15015 15010 + 15010 15015 15011 + 14500 7560 15012 + 1629 15012 7560 + 15013 15012 1629 + 1629 1628 15013 + 1624 1629 7560 + 7559 1624 7560 + 15016 1624 7559 + 1624 15016 1620 + 1620 15016 15017 + 15017 15018 1620 + 1620 15018 1615 + 7559 7558 15016 + 15017 15016 7558 + 15019 15017 7558 + 15020 15017 15019 + 15018 15017 15020 + 15018 15020 15021 + 15021 1615 15018 + 1616 1615 15021 + 1616 15021 15022 + 15022 1610 1616 + 7566 15019 7558 + 15023 15019 7566 + 15024 15019 15023 + 15019 15024 15020 + 15020 15024 15025 + 15021 15020 15025 + 15025 15022 15021 + 15026 15022 15025 + 15026 1610 15022 + 1610 15026 1611 + 7566 15027 15023 + 15028 15023 15027 + 15024 15023 15028 + 15028 15029 15024 + 15024 15029 15025 + 15027 7566 7565 + 15027 7565 7564 + 7564 15030 15027 + 15027 15030 15028 + 15025 15031 15026 + 15026 15031 15032 + 1611 15026 15032 + 15032 15033 1611 + 1607 1611 15033 + 15033 15034 1607 + 1607 15034 1602 + 15034 15035 1602 + 15035 15036 1602 + 15036 15037 1602 + 15037 15038 1602 + 15039 15034 15033 + 15034 15039 15040 + 15040 15035 15034 + 15040 15041 15035 + 15035 15041 15042 + 15042 15036 15035 + 15033 15043 15039 + 15039 15043 15044 + 15044 15045 15039 + 15040 15039 15045 + 15045 15046 15040 + 15041 15040 15046 + 15046 15047 15041 + 15042 15041 15047 + 15043 15033 15048 + 15048 15049 15043 + 15043 15049 15050 + 15050 15044 15043 + 15051 15044 15050 + 15045 15044 15051 + 15045 15051 15052 + 15052 15046 15045 + 15047 15046 15052 + 15048 15053 15049 + 15049 15053 15054 + 15054 15050 15049 + 15050 15054 15055 + 15050 15055 15051 + 15051 15055 505 + 15052 15051 505 + 15053 15048 15056 + 15056 15057 15053 + 15054 15053 15057 + 15058 15054 15057 + 15055 15054 15058 + 15058 15059 15055 + 15055 15059 505 + 15057 15056 15060 + 15060 15061 15057 + 15057 15061 15062 + 15062 15058 15057 + 15058 15062 15059 + 15059 15062 15063 + 15063 15064 15059 + 15059 15064 505 + 15061 15060 15065 + 15065 15066 15061 + 15062 15061 15066 + 15063 15062 15066 + 15067 15063 15066 + 15063 15067 15064 + 15064 15067 15068 + 15068 15069 15064 + 15064 15069 505 + 15069 15070 505 + 15070 506 505 + 15065 15071 15066 + 15066 15071 15067 + 15067 15071 15072 + 15068 15067 15072 + 15073 15068 15072 + 15068 15073 15069 + 15069 15073 15074 + 15074 15070 15069 + 15071 15065 15075 + 15075 15072 15071 + 15075 15076 15072 + 15072 15076 15073 + 15073 15076 15077 + 15074 15073 15077 + 15077 15078 15074 + 15079 15074 15078 + 15074 15079 15070 + 15075 15065 15080 + 505 511 15052 + 511 15081 15052 + 15081 15082 15052 + 15047 15052 15082 + 15082 15083 15047 + 15047 15083 15042 + 15084 15081 511 + 15084 15085 15081 + 15081 15085 15086 + 15086 15082 15081 + 15086 15083 15082 + 15042 15083 15086 + 15087 15042 15086 + 15042 15087 15036 + 511 510 15084 + 15084 510 509 + 509 15088 15084 + 15088 15089 15084 + 15085 15084 15089 + 15089 15090 15085 + 15085 15090 15091 + 15086 15085 15091 + 15091 15087 15086 + 15036 15087 15091 + 15091 15037 15036 + 15092 15089 15088 + 15089 15092 15093 + 15093 15090 15089 + 15090 15093 15094 + 15094 15091 15090 + 15091 15094 15037 + 15037 15094 15095 + 15095 15096 15037 + 15088 15097 15092 + 15092 15097 15098 + 14721 14112 14111 + 14721 15099 14112 + 14112 15099 14113 + 15099 15100 14113 + 14107 14113 15100 + 15100 15101 14107 + 14107 15101 14108 + 15099 14721 14720 + 14720 15100 15099 + 15101 15100 14720 + 14720 14726 15101 + 15101 14726 15102 + 15102 14108 15101 + 15103 14108 15102 + 14108 15103 14109 + 14109 15103 15104 + 15104 15105 14109 + 14104 14109 15105 + 15106 15102 14726 + 15107 15102 15106 + 15102 15107 15103 + 15103 15107 15108 + 15108 15104 15103 + 15109 15104 15108 + 15104 15109 15110 + 15110 15105 15104 + 14726 14725 15106 + 14725 15111 15106 + 15112 15106 15111 + 15113 15106 15112 + 15106 15113 15107 + 15107 15113 15114 + 15114 15108 15107 + 15115 15108 15114 + 15108 15115 15109 + 14730 15111 14725 + 14730 15116 15111 + 15111 15116 15112 + 15117 15112 15116 + 15118 15112 15117 + 15112 15118 15113 + 15113 15118 15119 + 15119 15114 15113 + 15120 15114 15119 + 15114 15120 15115 + 15116 14730 15121 + 15121 15122 15116 + 15116 15122 15117 + 15123 15117 15122 + 15124 15117 15123 + 15117 15124 15118 + 15118 15124 15125 + 15125 15119 15118 + 15121 14730 14729 + 15126 15121 14729 + 15127 15121 15126 + 15121 15127 15122 + 15122 15127 15123 + 15128 15123 15127 + 15129 15123 15128 + 15123 15129 15124 + 15124 15129 15130 + 15130 15125 15124 + 14729 15131 15126 + 15132 15126 15131 + 15126 15132 15133 + 15126 15133 15127 + 15127 15133 15128 + 14739 15131 14729 + 15131 14739 15134 + 15131 15134 15132 + 15132 15134 14742 + 15135 15132 14742 + 15133 15132 15135 + 15135 15136 15133 + 15133 15136 15128 + 15134 14739 14743 + 14743 14742 15134 + 14860 15135 14742 + 14865 15135 14860 + 15135 14865 15137 + 15137 15136 15135 + 15136 15137 15138 + 15138 15128 15136 + 15139 15128 15138 + 15128 15139 15129 + 15129 15139 15140 + 15140 15130 15129 + 15137 14865 14864 + 14864 15141 15137 + 15137 15141 15142 + 15142 15138 15137 + 15143 15138 15142 + 15138 15143 15139 + 15139 15143 15144 + 15144 15140 15139 + 15145 15141 14864 + 15141 15145 15146 + 15146 15142 15141 + 15147 15142 15146 + 15142 15147 15143 + 15143 15147 15148 + 15148 15144 15143 + 14864 14869 15145 + 15145 14869 14868 + 14868 15149 15145 + 15145 15149 15150 + 15150 15146 15145 + 15151 15146 15150 + 15146 15151 15147 + 15147 15151 15152 + 15152 15148 15147 + 14876 15149 14868 + 15149 14876 15153 + 15153 15150 15149 + 15154 15150 15153 + 15150 15154 15151 + 15151 15154 15155 + 15155 15152 15151 + 15156 15152 15155 + 15152 15156 15157 + 15157 15148 15152 + 14890 15153 14876 + 15158 15153 14890 + 15153 15158 15154 + 15154 15158 15159 + 15159 15155 15154 + 15160 15155 15159 + 15155 15160 15156 + 15156 15160 15161 + 15161 15162 15156 + 15157 15156 15162 + 14890 14895 15158 + 15158 14895 15163 + 15163 15159 15158 + 15164 15159 15163 + 15159 15164 15160 + 15160 15164 15165 + 15165 15161 15160 + 15166 15161 15165 + 15161 15166 15167 + 15167 15162 15161 + 14900 15163 14895 + 15168 15163 14900 + 15163 15168 15164 + 15164 15168 15169 + 15169 15165 15164 + 15170 15165 15169 + 15165 15170 15166 + 15166 15170 15171 + 15171 15172 15166 + 15167 15166 15172 + 14900 14905 15168 + 15168 14905 15173 + 15173 15169 15168 + 15174 15169 15173 + 15169 15174 15170 + 15170 15174 15175 + 15175 15171 15170 + 15176 15171 15175 + 15171 15176 15177 + 15177 15172 15171 + 14910 15173 14905 + 15178 15173 14910 + 15173 15178 15174 + 15174 15178 15179 + 15179 15175 15174 + 15180 15175 15179 + 15175 15180 15176 + 15176 15180 15181 + 15181 15182 15176 + 15177 15176 15182 + 14910 15183 15178 + 15178 15183 15184 + 15184 15179 15178 + 15185 15179 15184 + 15179 15185 15180 + 15180 15185 15186 + 15186 15181 15180 + 15183 14910 14909 + 14909 14915 15183 + 15183 14915 15187 + 15187 15184 15183 + 15188 15184 15187 + 15184 15188 15185 + 15185 15188 15189 + 15189 15186 15185 + 15190 15186 15189 + 15186 15190 15191 + 15191 15181 15186 + 15192 15187 14915 + 15193 15187 15192 + 15187 15193 15188 + 15188 15193 15194 + 15194 15189 15188 + 15195 15189 15194 + 15189 15195 15190 + 15196 15190 15195 + 15191 15190 15196 + 14915 14914 15192 + 15197 15192 14914 + 15198 15192 15197 + 15192 15198 15193 + 15193 15198 15199 + 15199 15194 15193 + 15200 15194 15199 + 15194 15200 15195 + 14914 14919 15197 + 15201 15197 14919 + 15202 15197 15201 + 15197 15202 15198 + 15198 15202 15203 + 15203 15199 15198 + 15204 15199 15203 + 15199 15204 15200 + 15205 15200 15204 + 15195 15200 15205 + 14919 14924 15201 + 15206 15201 14924 + 15207 15201 15206 + 15201 15207 15202 + 15202 15207 15208 + 15208 15203 15202 + 15209 15203 15208 + 15203 15209 15204 + 14924 15210 15206 + 15211 15206 15210 + 15212 15206 15211 + 15206 15212 15207 + 15207 15212 15213 + 15213 15208 15207 + 15214 15208 15213 + 15208 15214 15209 + 14923 15210 14924 + 15210 14923 14928 + 14928 15215 15210 + 15210 15215 15211 + 15216 15211 15215 + 15217 15211 15216 + 15211 15217 15212 + 15212 15217 15218 + 15218 15213 15212 + 15219 15213 15218 + 15213 15219 15214 + 15215 14928 14933 + 14933 15220 15215 + 15215 15220 15216 + 15221 15216 15220 + 15222 15216 15221 + 15216 15222 15217 + 15217 15222 15223 + 15223 15218 15217 + 15224 15218 15223 + 15218 15224 15219 + 15220 14933 14938 + 14938 15225 15220 + 15220 15225 15221 + 15226 15221 15225 + 15227 15221 15226 + 15221 15227 15222 + 15222 15227 15228 + 15228 15223 15222 + 15229 15223 15228 + 15223 15229 15224 + 15225 14938 14943 + 14943 15230 15225 + 15225 15230 15226 + 15231 15226 15230 + 15232 15226 15231 + 15226 15232 15227 + 15227 15232 15233 + 15233 15228 15227 + 15234 15228 15233 + 15228 15234 15229 + 15230 14943 15235 + 15235 15236 15230 + 15230 15236 15231 + 15237 15231 15236 + 15238 15231 15237 + 15231 15238 15232 + 15232 15238 15239 + 15239 15233 15232 + 15235 14943 14942 + 14942 15240 15235 + 15241 15235 15240 + 15236 15235 15241 + 15241 15242 15236 + 15236 15242 15237 + 15243 15237 15242 + 15244 15237 15243 + 15237 15244 15238 + 14941 15240 14942 + 15240 14941 14948 + 14948 15245 15240 + 15240 15245 15241 + 15246 15241 15245 + 15242 15241 15246 + 15246 15247 15242 + 15242 15247 15243 + 15248 15243 15247 + 15249 15243 15248 + 15243 15249 15244 + 15245 14948 15250 + 15250 15251 15245 + 15245 15251 15246 + 15252 15246 15251 + 15247 15246 15252 + 15252 15253 15247 + 15247 15253 15248 + 15250 14948 14947 + 14947 15254 15250 + 15255 15250 15254 + 15251 15250 15255 + 15255 15256 15251 + 15251 15256 15252 + 15257 15252 15256 + 15253 15252 15257 + 14953 15254 14947 + 15254 14953 15258 + 15258 15259 15254 + 15254 15259 15255 + 15260 15255 15259 + 15256 15255 15260 + 15260 15261 15256 + 15256 15261 15257 + 15258 14953 15262 + 15262 15263 15258 + 15264 15258 15263 + 15259 15258 15264 + 15264 15265 15259 + 15259 15265 15260 + 15266 15260 15265 + 15261 15260 15266 + 14952 15262 14953 + 15267 15262 14952 + 15262 15267 15268 + 15268 15263 15262 + 15263 15268 15269 + 15269 15270 15263 + 15263 15270 15264 + 15271 15264 15270 + 15265 15264 15271 + 14952 14951 15267 + 15267 14951 15272 + 15272 15273 15267 + 15268 15267 15273 + 15273 15274 15268 + 15269 15268 15274 + 14957 15272 14951 + 15272 14957 15275 + 15275 15276 15272 + 15272 15276 15277 + 15277 15273 15272 + 15274 15273 15277 + 15275 14957 14956 + 14956 15278 15275 + 15275 15278 15279 + 15279 15280 15275 + 15276 15275 15280 + 15280 15281 15276 + 15277 15276 15281 + 14961 15278 14956 + 15278 14961 15282 + 15282 15279 15278 + 15279 15282 15283 + 15283 15284 15279 + 15279 15284 15285 + 15285 15280 15279 + 15281 15280 15285 + 15282 14961 14965 + 14965 15286 15282 + 15283 15282 15286 + 15286 15287 15283 + 15288 15283 15287 + 15284 15283 15288 + 15288 15289 15284 + 15284 15289 15290 + 15290 15285 15284 + 15291 15286 14965 + 15287 15286 15291 + 15291 15292 15287 + 15287 15292 15293 + 15293 15294 15287 + 15287 15294 15288 + 14965 14964 15291 + 15291 14964 15295 + 15295 15296 15291 + 15292 15291 15296 + 15296 15297 15292 + 15293 15292 15297 + 14969 15295 14964 + 14980 15295 14969 + 15295 14980 15298 + 15298 15296 15295 + 15297 15296 15298 + 15298 15299 15297 + 15297 15299 15300 + 15300 15301 15297 + 15297 15301 15293 + 15298 14980 15302 + 15302 15303 15298 + 15299 15298 15303 + 15303 15304 15299 + 15300 15299 15304 + 14979 15302 14980 + 15305 15302 14979 + 15302 15305 15306 + 15306 15303 15302 + 15304 15303 15306 + 15306 15307 15304 + 15304 15307 15308 + 15308 15309 15304 + 15304 15309 15300 + 14979 14984 15305 + 15305 14984 14989 + 14989 15310 15305 + 15306 15305 15310 + 15310 15311 15306 + 15307 15306 15311 + 15311 15312 15307 + 15308 15307 15312 + 15313 15310 14989 + 15310 15313 15314 + 15314 15311 15310 + 15312 15311 15314 + 15314 15315 15312 + 15312 15315 15316 + 15316 15317 15312 + 15312 15317 15308 + 14989 14988 15313 + 15313 14988 14998 + 14998 15318 15313 + 15314 15313 15318 + 15318 15319 15314 + 15319 15320 15314 + 15315 15314 15320 + 15320 15321 15315 + 15316 15315 15321 + 14997 15318 14998 + 15318 14997 15322 + 15322 15319 15318 + 15322 15323 15319 + 15319 15323 15324 + 15324 15320 15319 + 15321 15320 15324 + 15322 14997 14996 + 15325 15322 14996 + 15323 15322 15325 + 15325 15326 15323 + 15324 15323 15326 + 15326 15327 15324 + 15327 15328 15324 + 15329 15324 15328 + 15324 15329 15321 + 15330 15325 14996 + 15331 15325 15330 + 15325 15331 15326 + 15326 15331 15332 + 15332 15327 15326 + 15332 15333 15327 + 15327 15333 15334 + 15334 15328 15327 + 15006 15330 14996 + 15335 15330 15006 + 15330 15335 15336 + 15330 15336 15331 + 15332 15331 15336 + 15337 15332 15336 + 15333 15332 15337 + 15337 15338 15333 + 15334 15333 15338 + 15006 15011 15335 + 15339 15335 15011 + 15336 15335 15339 + 15339 15340 15336 + 15336 15340 15337 + 15341 15337 15340 + 15341 15338 15337 + 15338 15341 15342 + 15342 15343 15338 + 15338 15343 15334 + 15344 15339 15011 + 15345 15339 15344 + 15339 15345 15346 + 15346 15340 15339 + 15340 15346 15341 + 15341 15346 15347 + 15347 5158 15341 + 5158 15342 15341 + 15011 15015 15344 + 15348 15344 15015 + 15348 15349 15344 + 15344 15349 15345 + 15345 15349 15350 + 15350 15351 15345 + 15351 15352 15345 + 15346 15345 15352 + 15352 15347 15346 + 15015 15014 15348 + 15348 15014 1628 + 15353 15348 1628 + 15349 15348 15353 + 15353 15350 15349 + 1639 15350 15353 + 15350 1639 5146 + 5146 15351 15350 + 5145 15351 5146 + 15351 5145 15354 + 15354 15352 15351 + 15354 15347 15352 + 1628 1634 15353 + 1639 15353 1634 + 5153 15354 5145 + 15347 15354 5153 + 5153 5158 15347 + 14605 15355 14596 + 14596 15355 14597 + 248 7356 14280 + 248 14280 15356 + 15357 15358 13509 + 15359 15357 13509 + 7328 15357 15359 + 15360 15357 7328 + 7323 15359 13509 + 7322 15359 7323 + 15359 7322 7328 + 7409 15361 3363 + 15362 7409 3363 + 15363 14182 15364 + 15365 14182 15363 + 14182 15365 14220 + 14220 15366 14182 + 15363 15367 15365 + 14215 15365 15367 + 14220 15365 14215 + 15363 15368 15367 + 15367 15368 15369 + 15369 14216 15367 + 15367 14216 14215 + 15368 15363 15370 + 15370 250 15368 + 15369 15368 250 + 250 15371 15369 + 14211 15369 15371 + 15369 14211 14210 + 14210 14216 15369 + 13621 15371 250 + 13620 15371 13621 + 15371 13620 14211 + 250 214 13621 + 13755 15372 15373 + 15372 13761 15373 + 15374 1486 15375 + 1486 1485 15375 + 15376 15375 1485 + 1485 1484 15376 + 15377 15376 1484 + 15378 336 15379 + 15380 336 15378 + 15378 621 15380 + 15381 15382 3773 + 15383 3773 15382 + 3773 15383 3774 + 3774 15383 15384 + 15384 3788 3774 + 15382 15385 15383 + 15383 15385 495 + 495 15384 15383 + 15386 15384 495 + 3788 15384 15386 + 15386 15387 3788 + 3788 15387 3789 + 3819 3789 15387 + 3818 3789 3819 + 3789 3818 229 + 495 15388 15386 + 15386 15388 15389 + 15389 15390 15386 + 15387 15386 15390 + 15390 15391 15387 + 15387 15391 3819 + 3479 3819 15391 + 15392 15390 15389 + 15391 15390 15392 + 15391 15392 3479 + 3479 15392 15393 + 15393 15394 3479 + 15394 3480 3479 + 3481 3480 15394 + 15389 15395 15392 + 15392 15395 15393 + 15077 15393 15395 + 15077 15396 15393 + 15393 15396 15397 + 15397 15394 15393 + 15397 15398 15394 + 15394 15398 3481 + 3481 15398 3470 + 15389 15078 15395 + 15395 15078 15077 + 15078 15389 15079 + 15399 15079 15389 + 15070 15079 15399 + 15399 506 15070 + 15399 507 506 + 507 15399 15400 + 15400 15401 507 + 15402 15399 15389 + 15403 6 15404 + 6 15405 15404 + 15406 15407 15408 + 15409 15408 15407 + 15408 15409 15410 + 15407 15411 15409 + 15409 15411 15412 + 15412 15413 15409 + 15413 15414 15409 + 15414 15415 15409 + 15415 15410 15409 + 15416 15411 15407 + 15411 15416 15417 + 15417 15412 15411 + 15412 15417 442 + 15412 442 449 + 449 15413 15412 + 15416 15407 15418 + 15418 15419 15416 + 15416 15419 15420 + 15420 15417 15416 + 442 15417 15420 + 15420 15421 442 + 442 15421 435 + 15419 15418 15422 + 15419 15422 15423 + 15423 15424 15419 + 15419 15424 15420 + 15425 15420 15424 + 15420 15425 15421 + 15421 15425 15426 + 15426 15427 15421 + 15421 15427 435 + 15428 15424 15423 + 15424 15428 15425 + 15425 15428 15429 + 15426 15425 15429 + 15429 15430 15426 + 15431 15426 15430 + 15426 15431 15427 + 15428 15423 15432 + 15432 15429 15428 + 15433 15429 15432 + 15429 15433 1602 + 1602 15430 15429 + 1602 15434 15430 + 15430 15434 15431 + 15435 15431 15434 + 15427 15431 15435 + 15435 15436 15427 + 15427 15436 435 + 15436 15437 435 + 15437 436 435 + 438 436 15437 + 15434 1602 15096 + 15096 15438 15434 + 15434 15438 15435 + 15439 15435 15438 + 15435 15439 15436 + 15436 15439 15440 + 15440 15437 15436 + 15440 15441 15437 + 15437 15441 438 + 438 15441 15092 + 15093 15092 15441 + 15095 15438 15096 + 15438 15095 15439 + 15439 15095 15094 + 15440 15439 15094 + 15094 15093 15440 + 15441 15440 15093 + 448 15413 449 + 15413 448 15442 + 15442 15414 15413 + 15414 15442 15415 + 15415 15442 15443 + 15443 15444 15415 + 15410 15415 15444 + 15442 448 453 + 453 15443 15442 + 15445 15443 453 + 15444 15443 15445 + 15444 15445 15446 + 15446 15447 15444 + 15444 15447 15410 + 15448 15410 15447 + 15410 15448 15449 + 453 452 15445 + 15445 452 391 + 15446 15445 375 + 7742 15446 375 + 15450 15446 7742 + 15450 15447 15446 + 15447 15450 15448 + 15451 15448 15450 + 15452 15448 15451 + 15451 15453 15452 + 15453 15451 7750 + 7750 15454 15453 + 7742 7751 15450 + 15450 7751 15451 + 7750 15451 7751 + 15454 7750 7749 + 7749 15455 15454 + 15456 15455 7749 + 15457 15458 3030 + 3025 3030 15458 + 15458 186 3025 + 3025 186 15459 + 5800 3909 15460 + 15460 3878 5800 + 15461 15462 15463 + 15464 15462 15461 + 15464 15465 15462 + 15462 15465 15466 + 15466 15467 15462 + 15466 15468 15467 + 15461 15469 15464 + 15468 15466 15470 + 15470 15471 15468 + 15470 2086 15471 + 2086 15472 15471 + 3715 15473 15474 + 3704 15473 3715 + 3715 15475 3704 + 3704 15475 15476 + 15476 15477 3704 + 15477 3705 3704 + 15477 15478 3705 + 15479 15475 3715 + 15475 15479 15480 + 15480 15476 15475 + 3715 15481 15479 + 15479 15481 15482 + 15482 7652 15479 + 15479 7652 7651 + 15480 15479 7651 + 15481 3715 3714 + 3714 15483 15481 + 15483 15484 15481 + 15484 15482 15481 + 7646 15482 15484 + 7646 7652 15482 + 15484 15483 15485 + 7681 15484 15485 + 7647 15484 7681 + 15484 7647 7646 + 7681 7649 7647 + 7649 7681 7680 + 7680 15486 7649 + 7649 15486 15487 + 15488 7649 15487 + 7680 7679 15486 + 7657 15486 7679 + 15486 7657 15487 + 15489 7657 7679 + 15490 38 15491 + 15492 15490 15491 + 15493 15494 7731 + 15494 15495 7731 + 15357 15496 14279 + 14279 15497 15357 + 3442 15498 15499 + 15499 15500 3442 + 15501 1423 1414 + 1414 15502 15501 + 15501 15502 15503 + 15503 1505 15501 + 1504 15501 1505 + 1507 15501 1504 + 15502 1414 1413 + 1413 1419 15502 + 15502 1419 1418 + 1418 15503 15502 + 20 15503 1418 + 15503 20 1506 + 1506 1505 15503 + 15504 1506 20 + 15505 4962 15506 + 15506 15507 15505 + 15508 15509 3705 + 15510 15508 3705 + 15511 15512 15513 + 15514 15513 15512 + 14635 15513 15514 + 15513 14635 14634 + 14634 15515 15513 + 15513 15515 15516 + 15517 15516 15515 + 15512 15518 15514 + 15514 15518 15519 + 15519 14628 15514 + 14635 15514 14628 + 14634 14633 15515 + 15515 14633 15517 + 14586 15517 14633 + 14585 15517 14586 + 15517 14585 14591 + 14591 15520 15517 + 7763 15521 15522 + 15522 15523 7763 + 15523 15522 15524 + 15525 15523 15524 + 15525 15524 7677 + 7677 15526 15525 + 15527 15525 15526 + 15528 15527 15526 + 15526 7676 15528 + 7676 15526 7677 + 15398 15529 3470 + 15530 15529 15398 + 15531 15529 15530 + 15529 15531 3471 + 3471 3470 15529 + 15398 15397 15530 + 15532 15530 15397 + 15531 15530 15532 + 15532 15533 15531 + 3471 15531 15533 + 15534 15532 15397 + 15029 15532 15534 + 15533 15532 15029 + 15397 15396 15534 + 15535 15534 15396 + 15536 15534 15535 + 15534 15536 15029 + 15029 15536 15537 + 15536 15538 15537 + 15076 15538 15536 + 15396 15077 15535 + 15076 15535 15077 + 15536 15535 15076 + 15539 15342 5158 + 15342 15539 15540 + 15540 15343 15342 + 15343 15540 15541 + 15541 15542 15343 + 15343 15542 15334 + 5158 5157 15539 + 15539 5157 5156 + 5156 15543 15539 + 15540 15539 15543 + 15543 15544 15540 + 15541 15540 15544 + 15544 15545 15541 + 15546 15541 15545 + 15541 15546 15547 + 15547 15542 15541 + 5167 15543 5156 + 15544 15543 5167 + 5167 15548 15544 + 15544 15548 15549 + 15549 15545 15544 + 15550 15545 15549 + 15545 15550 15546 + 15551 15546 15550 + 15547 15546 15551 + 15548 5167 15552 + 15552 15553 15548 + 15549 15548 15553 + 15553 15554 15549 + 15555 15549 15554 + 15549 15555 15550 + 5166 15552 5167 + 15556 15552 5166 + 15552 15556 15557 + 15557 15553 15552 + 15553 15557 15558 + 15558 15554 15553 + 15559 15554 15558 + 15554 15559 15555 + 15560 15555 15559 + 15550 15555 15560 + 5166 5165 15556 + 15556 5165 5164 + 5164 15561 15556 + 15557 15556 15561 + 15561 15562 15557 + 15558 15557 15562 + 15562 15563 15558 + 15563 15564 15558 + 15565 15558 15564 + 15558 15565 15559 + 5174 15561 5164 + 15561 5174 15562 + 15562 5174 15566 + 15566 15563 15562 + 15563 15566 15567 + 15567 15568 15563 + 15563 15568 15569 + 15569 15564 15563 + 15570 15564 15569 + 15564 15570 15565 + 5179 15566 5174 + 15567 15566 5179 + 5179 5183 15567 + 15571 15567 5183 + 15568 15567 15571 + 15571 15572 15568 + 15569 15568 15572 + 15572 15573 15569 + 15574 15569 15573 + 15569 15574 15570 + 5183 5182 15571 + 15575 15571 5182 + 15572 15571 15575 + 15575 15576 15572 + 15572 15576 15577 + 15577 15573 15572 + 15578 15573 15577 + 15573 15578 15574 + 15579 15574 15578 + 15570 15574 15579 + 5182 5187 15575 + 15580 15575 5187 + 15576 15575 15580 + 15580 15581 15576 + 15577 15576 15581 + 15581 15582 15577 + 15583 15577 15582 + 15577 15583 15578 + 5187 15584 15580 + 15585 15580 15584 + 15581 15580 15585 + 15585 15586 15581 + 15581 15586 15587 + 15587 15582 15581 + 15588 15582 15587 + 15582 15588 15583 + 5186 15584 5187 + 15589 15584 5186 + 15584 15589 15585 + 15590 15585 15589 + 15586 15585 15590 + 15590 15591 15586 + 15587 15586 15591 + 15591 15592 15587 + 15593 15587 15592 + 15587 15593 15588 + 5186 15594 15589 + 15589 15594 15595 + 15595 15596 15589 + 15589 15596 15590 + 15597 15590 15596 + 15591 15590 15597 + 15594 5186 5191 + 5191 15598 15594 + 15595 15594 15598 + 15598 15599 15595 + 15600 15595 15599 + 15595 15600 15601 + 15601 15596 15595 + 15596 15601 15597 + 15602 15598 5191 + 15598 15602 15603 + 15603 15599 15598 + 15599 15603 15604 + 15604 15605 15599 + 15599 15605 15600 + 15606 15600 15605 + 15601 15600 15606 + 5191 5190 15602 + 15602 5190 15607 + 15607 15608 15602 + 15603 15602 15608 + 15608 15609 15603 + 15604 15603 15609 + 15609 15610 15604 + 15611 15604 15610 + 15605 15604 15611 + 5195 15607 5190 + 15612 15607 5195 + 15607 15612 15613 + 15613 15608 15607 + 15608 15613 15614 + 15614 15609 15608 + 15609 15614 15615 + 15615 15610 15609 + 5195 5200 15612 + 15612 5200 15616 + 15616 15617 15612 + 15613 15612 15617 + 15617 15618 15613 + 15614 15613 15618 + 15618 15619 15614 + 15615 15614 15619 + 5205 15616 5200 + 15620 15616 5205 + 15616 15620 15621 + 15621 15617 15616 + 15617 15621 15622 + 15622 15618 15617 + 15618 15622 15623 + 15623 15619 15618 + 5205 5210 15620 + 15620 5210 15624 + 15624 15625 15620 + 15621 15620 15625 + 15625 15626 15621 + 15622 15621 15626 + 15626 15627 15622 + 15623 15622 15627 + 5215 15624 5210 + 15628 15624 5215 + 15624 15628 15629 + 15629 15625 15624 + 15625 15629 15630 + 15630 15626 15625 + 15626 15630 15631 + 15631 15627 15626 + 5215 15632 15628 + 15628 15632 15633 + 15633 15634 15628 + 15629 15628 15634 + 15634 15635 15629 + 15630 15629 15635 + 15635 15636 15630 + 15631 15630 15636 + 15632 5215 5214 + 5214 15637 15632 + 15632 15637 15638 + 15638 15633 15632 + 15639 15633 15638 + 15633 15639 15640 + 15640 15634 15633 + 15634 15640 15641 + 15641 15635 15634 + 15637 5214 15642 + 15642 15643 15637 + 15638 15637 15643 + 15643 15644 15638 + 15645 15638 15644 + 15638 15645 15639 + 5213 15642 5214 + 5224 15642 5213 + 15643 15642 5224 + 5224 15646 15643 + 15643 15646 15647 + 15647 15644 15643 + 15648 15644 15647 + 15644 15648 15645 + 15649 15645 15648 + 15639 15645 15649 + 15646 5224 15650 + 15650 15651 15646 + 15647 15646 15651 + 15651 15652 15647 + 15653 15647 15652 + 15647 15653 15648 + 5223 15650 5224 + 15654 15650 5223 + 15651 15650 15654 + 15654 15655 15651 + 15651 15655 15656 + 15656 15652 15651 + 15657 15652 15656 + 15652 15657 15653 + 5223 5229 15654 + 15654 5229 15658 + 15658 15659 15654 + 15655 15654 15659 + 15659 15660 15655 + 15656 15655 15660 + 15660 15661 15656 + 15662 15656 15661 + 15656 15662 15657 + 5228 15658 5229 + 15658 5228 5234 + 5234 15663 15658 + 15658 15663 15664 + 15664 15659 15658 + 15660 15659 15664 + 15664 15665 15660 + 15660 15665 15666 + 15666 15661 15660 + 15667 15661 15666 + 15661 15667 15662 + 15663 5234 15668 + 15668 15669 15663 + 15664 15663 15669 + 15669 15670 15664 + 15665 15664 15670 + 15670 15671 15665 + 15666 15665 15671 + 15672 15668 5234 + 15673 15668 15672 + 15669 15668 15673 + 15673 15674 15669 + 15669 15674 15675 + 15675 15670 15669 + 15671 15670 15675 + 5234 5233 15672 + 5239 15672 5233 + 15672 5239 15676 + 15676 15677 15672 + 15672 15677 15673 + 15673 15677 15678 + 15678 15679 15673 + 15674 15673 15679 + 15679 15680 15674 + 15675 15674 15680 + 15676 5239 5238 + 5238 15681 15676 + 15676 15681 15682 + 15682 15683 15676 + 15677 15676 15683 + 15683 15678 15677 + 5243 15681 5238 + 15681 5243 15684 + 15684 15682 15681 + 15682 15684 15685 + 15685 15686 15682 + 15682 15686 15687 + 15687 15683 15682 + 15678 15683 15687 + 5248 15684 5243 + 15685 15684 5248 + 5248 15688 15685 + 15685 15688 15689 + 15689 15690 15685 + 15686 15685 15690 + 15690 15691 15686 + 15687 15686 15691 + 15688 5248 5247 + 5247 15692 15688 + 15688 15692 15693 + 15693 15689 15688 + 15694 15689 15693 + 15689 15694 15695 + 15695 15690 15689 + 15691 15690 15695 + 15692 5247 15696 + 15696 15697 15692 + 15692 15697 15698 + 15698 15693 15692 + 15699 15693 15698 + 15693 15699 15694 + 5252 15696 5247 + 15700 15696 5252 + 15697 15696 15700 + 15700 15701 15697 + 15697 15701 15702 + 15702 15698 15697 + 15703 15698 15702 + 15698 15703 15699 + 5252 5251 15700 + 15704 15700 5251 + 15701 15700 15704 + 15704 15705 15701 + 15701 15705 15706 + 15706 15702 15701 + 15707 15702 15706 + 15702 15707 15703 + 5251 5260 15704 + 15708 15704 5260 + 15704 15708 15709 + 15709 15705 15704 + 15705 15709 15710 + 15710 15706 15705 + 15706 15710 15711 + 15711 15712 15706 + 15706 15712 15707 + 5260 5259 15708 + 15708 5259 15713 + 15713 15714 15708 + 15709 15708 15714 + 15714 15715 15709 + 15710 15709 15715 + 15715 15716 15710 + 15711 15710 15716 + 5264 15713 5259 + 15717 15713 5264 + 15713 15717 15718 + 15718 15714 15713 + 15714 15718 15719 + 15719 15715 15714 + 15715 15719 15720 + 15720 15716 15715 + 5264 5268 15717 + 15717 5268 15721 + 15721 15722 15717 + 15722 15718 15717 + 15719 15718 15722 + 15722 15723 15719 + 15719 15723 15724 + 15720 15719 15724 + 5272 15721 5268 + 15723 15721 5272 + 15722 15721 15723 + 5272 15724 15723 + 5276 15724 5272 + 15724 5276 15725 + 15725 15726 15724 + 15724 15726 15720 + 15727 15720 15726 + 15716 15720 15727 + 15727 15728 15716 + 15716 15728 15711 + 15729 15711 15728 + 15712 15711 15729 + 15725 5276 5275 + 15730 15725 5275 + 15731 15725 15730 + 15731 15726 15725 + 15726 15731 15727 + 15731 15732 15727 + 15728 15727 15732 + 15732 15733 15728 + 15728 15733 15729 + 5275 5285 15730 + 15734 15730 5285 + 15730 15734 15733 + 15733 15732 15730 + 15730 15732 15731 + 5285 5284 15734 + 15734 5284 15735 + 15735 15736 15734 + 15733 15734 15736 + 15736 15729 15733 + 15729 15736 15737 + 15737 15738 15729 + 15729 15738 15712 + 15707 15712 15738 + 15739 15735 5284 + 15735 15739 15740 + 15740 15741 15735 + 15735 15741 15737 + 15737 15736 15735 + 5284 5283 15739 + 5290 15739 5283 + 15740 15739 5290 + 5290 5320 15740 + 15742 15740 5320 + 15741 15740 15742 + 15742 15743 15741 + 15741 15743 15744 + 15744 15737 15741 + 15738 15737 15744 + 15744 15745 15738 + 15738 15745 15707 + 15703 15707 15745 + 5320 5325 15742 + 15746 15742 5325 + 15743 15742 15746 + 15746 15747 15743 + 15743 15747 15748 + 15748 15744 15743 + 15745 15744 15748 + 15748 15749 15745 + 15745 15749 15703 + 15699 15703 15749 + 5325 5324 15746 + 15750 15746 5324 + 15747 15746 15750 + 15750 15751 15747 + 15747 15751 15752 + 15752 15748 15747 + 15749 15748 15752 + 15752 15753 15749 + 15749 15753 15699 + 15694 15699 15753 + 5324 5330 15750 + 15754 15750 5330 + 15750 15754 15755 + 15755 15751 15750 + 15751 15755 15756 + 15756 15752 15751 + 15752 15756 15757 + 15757 15753 15752 + 15753 15757 15694 + 15695 15694 15757 + 5330 5329 15754 + 15758 15754 5329 + 15755 15754 15758 + 15758 15759 15755 + 15755 15759 15760 + 15760 15756 15755 + 15757 15756 15760 + 15760 15761 15757 + 15757 15761 15695 + 15762 15695 15761 + 15695 15762 15691 + 5329 15763 15758 + 15763 15764 15758 + 15765 15758 15764 + 15758 15765 15766 + 15766 15759 15758 + 15759 15766 15767 + 15767 15760 15759 + 5334 15763 5329 + 15768 15763 5334 + 15763 15768 15769 + 15769 15764 15763 + 15770 15764 15769 + 15764 15770 15765 + 15771 15765 15770 + 15766 15765 15771 + 5334 5339 15768 + 15768 5339 15772 + 15772 15773 15768 + 15768 15773 15774 + 15774 15769 15768 + 15775 15769 15774 + 15769 15775 15770 + 5344 15772 5339 + 6876 15772 5344 + 15773 15772 6876 + 6876 15776 15773 + 15773 15776 15777 + 15777 15774 15773 + 15778 15774 15777 + 15774 15778 15775 + 15775 15778 15779 + 15780 15775 15779 + 15770 15775 15780 + 15776 6876 6875 + 6875 15781 15776 + 15776 15781 15782 + 15782 15777 15776 + 15778 15777 15782 + 15782 15779 15778 + 15783 15779 15782 + 15779 15783 15784 + 15784 15785 15779 + 15779 15785 15780 + 6880 15781 6875 + 15781 6880 6889 + 6889 15782 15781 + 15782 6889 15783 + 15783 6889 6888 + 6888 6894 15783 + 15783 6894 15786 + 15786 15784 15783 + 15787 15784 15786 + 15784 15787 15788 + 15788 15785 15784 + 15785 15788 15789 + 15789 15780 15785 + 15790 15786 6894 + 15791 15786 15790 + 15786 15791 15787 + 15792 15787 15791 + 15788 15787 15792 + 15792 15793 15788 + 15788 15793 15794 + 15794 15789 15788 + 6894 6893 15790 + 15790 6893 6899 + 6899 6917 15790 + 15795 15790 6917 + 15790 15795 15791 + 15791 15795 15796 + 15796 15797 15791 + 15791 15797 15792 + 15798 15792 15797 + 15792 15798 15799 + 15799 15793 15792 + 6917 6916 15795 + 15796 15795 6916 + 6916 15800 15796 + 15801 15796 15800 + 15796 15801 15802 + 15802 15797 15796 + 15797 15802 15798 + 15803 15798 15802 + 15799 15798 15803 + 6915 15800 6916 + 6926 15800 6915 + 15800 6926 15801 + 15804 15801 6926 + 15802 15801 15804 + 15804 15805 15802 + 15802 15805 15803 + 15806 15803 15805 + 15803 15806 15807 + 15807 15808 15803 + 15803 15808 15799 + 6926 15809 15804 + 15810 15804 15809 + 15804 15810 15811 + 15811 15805 15804 + 15805 15811 15806 + 15812 15806 15811 + 15807 15806 15812 + 6925 15809 6926 + 15813 15809 6925 + 15809 15813 15810 + 15814 15810 15813 + 15811 15810 15814 + 15814 15815 15811 + 15811 15815 15812 + 6925 15816 15813 + 15813 15816 15817 + 15817 15818 15813 + 15813 15818 15814 + 15819 15814 15818 + 15814 15819 15820 + 15820 15815 15814 + 15816 6925 6924 + 6924 6931 15816 + 15817 15816 6931 + 6931 15821 15817 + 15822 15817 15821 + 15817 15822 15823 + 15823 15818 15817 + 15818 15823 15819 + 15819 15823 15824 + 15824 15825 15819 + 15820 15819 15825 + 6935 15821 6931 + 15826 15821 6935 + 15821 15826 15822 + 15822 15826 15827 + 15827 15828 15822 + 15823 15822 15828 + 15828 15824 15823 + 15824 15828 15829 + 15824 15829 15830 + 15830 15825 15824 + 6935 15831 15826 + 15826 15831 15832 + 15832 15827 15826 + 15827 15832 15833 + 15833 15834 15827 + 15827 15834 15829 + 15829 15828 15827 + 15831 6935 6938 + 6938 6943 15831 + 15831 6943 6952 + 6952 15832 15831 + 15833 15832 6952 + 6952 15835 15833 + 15836 15833 15835 + 15834 15833 15836 + 15836 15837 15834 + 15834 15837 15838 + 15829 15834 15838 + 15838 15830 15829 + 6951 15835 6952 + 15835 6951 15839 + 15839 15840 15835 + 15835 15840 15836 + 15841 15836 15840 + 15836 15841 15837 + 15837 15841 15842 + 15842 15838 15837 + 15839 6951 6957 + 6957 15843 15839 + 15844 15839 15843 + 15840 15839 15844 + 15844 15845 15840 + 15840 15845 15841 + 15841 15845 15846 + 15846 15842 15841 + 6962 15843 6957 + 6962 15847 15843 + 15843 15847 15844 + 15848 15844 15847 + 15845 15844 15848 + 15848 15849 15845 + 15845 15849 15846 + 15847 6962 15850 + 15850 15851 15847 + 15847 15851 15848 + 15851 15852 15848 + 15853 15848 15852 + 15849 15848 15853 + 6961 15850 6962 + 6967 15850 6961 + 15850 6967 15854 + 15854 15851 15850 + 15851 15854 15855 + 15855 15852 15851 + 15852 15855 15856 + 15856 15857 15852 + 15852 15857 15853 + 15854 6967 6972 + 6972 15858 15854 + 15855 15854 15858 + 15858 15859 15855 + 15856 15855 15859 + 15860 15858 6972 + 15858 15860 15861 + 15861 15859 15858 + 15861 15862 15859 + 15859 15862 15856 + 6972 6971 15860 + 15860 6971 6977 + 6977 15863 15860 + 15861 15860 15863 + 15863 15864 15861 + 15862 15861 15864 + 15864 15865 15862 + 15856 15862 15865 + 15865 15866 15856 + 15866 15867 15856 + 15857 15856 15867 + 15868 15863 6977 + 15863 15868 15869 + 15869 15864 15863 + 15864 15869 15870 + 15870 15865 15864 + 15865 15870 15871 + 15871 15866 15865 + 6977 6976 15868 + 15868 6976 6989 + 6989 15872 15868 + 15869 15868 15872 + 15872 15873 15869 + 15870 15869 15873 + 15873 15874 15870 + 15870 15874 15875 + 15875 15871 15870 + 15876 15871 15875 + 15866 15871 15876 + 15877 15872 6989 + 15872 15877 15878 + 15878 15873 15872 + 15873 15878 15879 + 15879 15874 15873 + 15874 15879 15880 + 15880 15875 15874 + 6989 6988 15877 + 15877 6988 15881 + 15881 15882 15877 + 15878 15877 15882 + 15882 15883 15878 + 15879 15878 15883 + 15883 15884 15879 + 15879 15884 15885 + 15885 15880 15879 + 6997 15881 6988 + 7006 15881 6997 + 15881 7006 15886 + 15886 15882 15881 + 15882 15886 15887 + 15887 15883 15882 + 15883 15887 15888 + 15888 15884 15883 + 15884 15888 15889 + 15889 15885 15884 + 15886 7006 15890 + 15890 15891 15886 + 15887 15886 15891 + 15891 15892 15887 + 15888 15887 15892 + 15892 15893 15888 + 15888 15893 15894 + 15894 15889 15888 + 7015 15890 7006 + 15895 15890 7015 + 15890 15895 15896 + 15896 15891 15890 + 15891 15896 15897 + 15897 15892 15891 + 15893 15892 15897 + 15897 15898 15893 + 15893 15898 15899 + 15899 15894 15893 + 7015 7020 15895 + 15895 7020 15900 + 15900 15901 15895 + 15896 15895 15901 + 15901 15902 15896 + 15896 15902 15903 + 15903 15897 15896 + 15898 15897 15903 + 15903 15904 15898 + 15899 15898 15904 + 7025 15900 7020 + 15905 15900 7025 + 15900 15905 15906 + 15906 15901 15900 + 15901 15906 15907 + 15907 15902 15901 + 15902 15907 15908 + 15908 15903 15902 + 15903 15908 15909 + 15909 15904 15903 + 7025 15910 15905 + 15905 15910 15911 + 15911 15912 15905 + 15906 15905 15912 + 15912 15913 15906 + 15907 15906 15913 + 15913 15914 15907 + 15908 15907 15914 + 15910 7025 7024 + 7024 15915 15910 + 15910 15915 15916 + 15916 15911 15910 + 15917 15911 15916 + 15911 15917 15918 + 15918 15912 15911 + 15912 15918 15919 + 15919 15913 15912 + 7029 15915 7024 + 15915 7029 15920 + 15920 15916 15915 + 15916 15920 15921 + 15921 15922 15916 + 15916 15922 15917 + 15917 15922 15923 + 15923 15924 15917 + 15918 15917 15924 + 7034 15920 7029 + 15921 15920 7034 + 7034 15925 15921 + 15921 15925 15926 + 15926 15927 15921 + 15922 15921 15927 + 15927 15923 15922 + 15928 15925 7034 + 15925 15928 15929 + 15929 15926 15925 + 15926 15929 15930 + 15930 15931 15926 + 15926 15931 15932 + 15932 15927 15926 + 15923 15927 15932 + 7034 7033 15928 + 15928 7033 7032 + 7032 15933 15928 + 15928 15933 15934 + 15934 15929 15928 + 15930 15929 15934 + 15934 15935 15930 + 15930 15935 15936 + 15936 15937 15930 + 15931 15930 15937 + 7041 15933 7032 + 15933 7041 15938 + 15938 15934 15933 + 15934 15938 15939 + 15939 15935 15934 + 15935 15939 15940 + 15940 15936 15935 + 7045 15938 7041 + 15939 15938 7045 + 7045 15941 15939 + 15939 15941 15942 + 15942 15940 15939 + 15943 15940 15942 + 15936 15940 15943 + 15943 15944 15936 + 15936 15944 15945 + 15945 15937 15936 + 7049 15941 7045 + 15941 7049 15946 + 15946 15942 15941 + 15942 15946 15947 + 15947 15948 15942 + 15942 15948 15943 + 15943 15948 15949 + 15949 15950 15943 + 15944 15943 15950 + 7054 15946 7049 + 15947 15946 7054 + 7054 15951 15947 + 15947 15951 15952 + 15952 15953 15947 + 15948 15947 15953 + 15953 15949 15948 + 7058 15951 7054 + 15951 7058 15954 + 15954 15952 15951 + 15952 15954 15955 + 15955 15956 15952 + 15952 15956 15957 + 15957 15953 15952 + 15949 15953 15957 + 7062 15954 7058 + 15955 15954 7062 + 7062 7066 15955 + 15955 7066 15958 + 15958 15959 15955 + 15956 15955 15959 + 15959 15960 15956 + 15957 15956 15960 + 15960 15961 15957 + 15962 15957 15961 + 15957 15962 15949 + 7070 15958 7066 + 15963 15958 7070 + 15958 15963 15964 + 15964 15959 15958 + 15960 15959 15964 + 15964 15965 15960 + 15960 15965 15966 + 15966 15961 15960 + 15967 15961 15966 + 15961 15967 15962 + 7070 7074 15963 + 15963 7074 15968 + 15968 15969 15963 + 15964 15963 15969 + 15969 15970 15964 + 15965 15964 15970 + 15970 15971 15965 + 15966 15965 15971 + 7079 15968 7074 + 15972 15968 7079 + 15968 15972 15973 + 15973 15969 15968 + 15969 15973 15974 + 15974 15970 15969 + 15971 15970 15974 + 7079 15975 15972 + 15972 15975 15976 + 15976 15977 15972 + 15973 15972 15977 + 15977 15978 15973 + 15974 15973 15978 + 15975 7079 7078 + 7078 7088 15975 + 15975 7088 15979 + 15979 15976 15975 + 15976 15979 15980 + 15980 15981 15976 + 15976 15981 15982 + 15982 15977 15976 + 15977 15982 15983 + 15983 15978 15977 + 15984 15979 7088 + 15980 15979 15984 + 15984 15985 15980 + 15986 15980 15985 + 15981 15980 15986 + 15986 15987 15981 + 15981 15987 15988 + 15988 15982 15981 + 15983 15982 15988 + 7088 7087 15984 + 15989 15984 7087 + 15984 15989 15990 + 15990 15985 15984 + 15985 15990 15991 + 15991 15992 15985 + 15985 15992 15986 + 7087 7092 15989 + 15993 15989 7092 + 15990 15989 15993 + 15993 15994 15990 + 15991 15990 15994 + 15994 15995 15991 + 15996 15991 15995 + 15991 15996 15997 + 15997 15992 15991 + 7092 7096 15993 + 15998 15993 7096 + 15993 15998 15999 + 15999 15994 15993 + 15994 15999 16000 + 16000 15995 15994 + 16001 15995 16000 + 15995 16001 15996 + 7096 7100 15998 + 16002 15998 7100 + 15999 15998 16002 + 16002 16003 15999 + 15999 16003 16004 + 16000 15999 16004 + 16004 16005 16000 + 16006 16000 16005 + 16000 16006 16001 + 7100 7104 16002 + 16007 16002 7104 + 16002 16007 16008 + 16008 16003 16002 + 16003 16008 16009 + 16009 16004 16003 + 16010 16004 16009 + 16004 16010 16011 + 16011 16005 16004 + 7104 7108 16007 + 16012 16007 7108 + 16008 16007 16012 + 16012 16013 16008 + 16009 16008 16013 + 7108 7112 16012 + 16014 16012 7112 + 16012 16014 16013 + 16013 16014 7171 + 7171 16015 16013 + 16013 16015 16009 + 7112 7116 16014 + 7171 16014 7116 + 7170 16015 7171 + 16015 7170 7176 + 7176 16016 16015 + 16015 16016 16009 + 16016 16017 16009 + 16018 16009 16017 + 16009 16018 16010 + 16016 7176 16019 + 16019 16020 16016 + 16016 16020 16021 + 16021 16017 16016 + 16021 16022 16017 + 16017 16022 16018 + 16019 7176 7175 + 7175 16023 16019 + 16019 16023 16024 + 16024 16025 16019 + 16020 16019 16025 + 16025 16026 16020 + 16021 16020 16026 + 16026 16027 16021 + 16022 16021 16027 + 7174 16023 7175 + 16023 7174 16028 + 16028 16024 16023 + 16029 16024 16028 + 16024 16029 16030 + 16030 16025 16024 + 16025 16030 16031 + 16031 16026 16025 + 16026 16031 16032 + 16032 16027 16026 + 7180 16028 7174 + 7189 16028 7180 + 16028 7189 16029 + 16029 7189 16033 + 16033 16034 16029 + 16030 16029 16034 + 16034 16035 16030 + 16031 16030 16035 + 16035 16036 16031 + 16032 16031 16036 + 7188 16033 7189 + 16037 16033 7188 + 16033 16037 16038 + 16038 16034 16033 + 16034 16038 16039 + 16039 16035 16034 + 16035 16039 16040 + 16040 16036 16035 + 7188 7193 16037 + 16037 7193 16041 + 16041 16042 16037 + 16038 16037 16042 + 16042 16043 16038 + 16039 16038 16043 + 16043 16044 16039 + 16040 16039 16044 + 7197 16041 7193 + 16045 16041 7197 + 16041 16045 16046 + 16046 16042 16041 + 16042 16046 16047 + 16047 16043 16042 + 16043 16047 16048 + 16048 16044 16043 + 7197 7201 16045 + 16045 7201 16049 + 16049 16050 16045 + 16046 16045 16050 + 16050 16051 16046 + 16047 16046 16051 + 16051 16052 16047 + 16048 16047 16052 + 7205 16049 7201 + 16053 16049 7205 + 16049 16053 16054 + 16054 16050 16049 + 16050 16054 16055 + 16055 16051 16050 + 16051 16055 16056 + 16056 16052 16051 + 7205 7210 16053 + 16053 7210 16057 + 16057 16058 16053 + 16054 16053 16058 + 16058 16059 16054 + 16055 16054 16059 + 16059 16060 16055 + 16056 16055 16060 + 7214 16057 7210 + 16057 7214 7219 + 7219 16061 16057 + 16057 16061 16062 + 16062 16058 16057 + 16058 16062 16063 + 16063 16059 16058 + 16059 16063 16064 + 16064 16060 16059 + 16061 7219 16065 + 16065 16066 16061 + 16062 16061 16066 + 16066 16067 16062 + 16063 16062 16067 + 16067 16068 16063 + 16064 16063 16068 + 16069 16065 7219 + 16070 16065 16069 + 16066 16065 16070 + 16067 16066 16070 + 16071 16067 16070 + 16067 16071 16068 + 16069 7219 7224 + 7224 16072 16069 + 16073 16069 16072 + 16074 16069 16073 + 16069 16074 16070 + 16071 16070 16074 + 16074 16075 16071 + 16076 16071 16075 + 16071 16076 16068 + 16077 16072 7224 + 16078 16072 16077 + 16072 16078 16073 + 16073 16078 16079 + 16079 16080 16073 + 16074 16073 16080 + 16080 16075 16074 + 7224 16081 16077 + 16077 16081 16082 + 16082 16083 16077 + 16084 16077 16083 + 16077 16084 16078 + 16078 16084 16085 + 16085 16079 16078 + 7234 16081 7224 + 16081 7234 16086 + 16086 16082 16081 + 16087 16082 16086 + 16082 16087 16088 + 16088 16083 16082 + 16083 16088 16089 + 16089 16090 16083 + 16083 16090 16084 + 7238 16086 7234 + 16091 16086 7238 + 16086 16091 16087 + 16087 16091 16092 + 16092 16093 16087 + 16087 16093 16094 + 16094 16088 16087 + 16089 16088 16094 + 7238 7243 16091 + 16092 16091 7243 + 7243 16095 16092 + 16096 16092 16095 + 16092 16096 16097 + 16097 16093 16092 + 16093 16097 16098 + 16098 16094 16093 + 13817 16095 7243 + 13826 16095 13817 + 16095 13826 16096 + 16099 16096 13826 + 16097 16096 16099 + 16099 16100 16097 + 16097 16100 16101 + 16101 16098 16097 + 16102 16098 16101 + 16094 16098 16102 + 16102 16103 16094 + 16094 16103 16089 + 13826 13825 16099 + 13831 16099 13825 + 16099 13831 16104 + 16104 16100 16099 + 16100 16104 16105 + 16105 16101 16100 + 16101 16105 16106 + 16106 16107 16101 + 16101 16107 16102 + 16104 13831 13830 + 13830 16108 16104 + 16104 16108 16109 + 16109 16105 16104 + 16106 16105 16109 + 16109 16110 16106 + 16106 16110 16111 + 16111 16112 16106 + 16107 16106 16112 + 13840 16108 13830 + 16108 13840 16113 + 16113 16109 16108 + 16109 16113 16114 + 16114 16110 16109 + 16110 16114 16115 + 16115 16111 16110 + 16116 16113 13840 + 16114 16113 16116 + 16116 16117 16114 + 16114 16117 16118 + 16118 16115 16114 + 16119 16115 16118 + 16111 16115 16119 + 13840 13845 16116 + 16120 16116 13845 + 16120 16117 16116 + 16117 16120 16121 + 16121 16118 16117 + 16122 16118 16121 + 16118 16122 16119 + 13845 16123 16120 + 16120 16123 16124 + 16121 16120 16124 + 16124 16125 16121 + 16126 16121 16125 + 16121 16126 16122 + 13844 16123 13845 + 16123 13844 13850 + 13850 16124 16123 + 16124 13850 16127 + 16127 16128 16124 + 16124 16128 16129 + 16129 16125 16124 + 16130 16125 16129 + 16125 16130 16126 + 16131 16126 16130 + 16122 16126 16131 + 16127 13850 13849 + 13849 16132 16127 + 16127 16132 16133 + 16133 16134 16127 + 16128 16127 16134 + 16134 16135 16128 + 16128 16135 16136 + 16136 16129 16128 + 13855 16132 13849 + 16132 13855 16137 + 16137 16133 16132 + 16138 16133 16137 + 16133 16138 16139 + 16139 16134 16133 + 16134 16139 16140 + 16140 16135 16134 + 16135 16140 16141 + 16141 16136 16135 + 16137 13855 13860 + 13860 16142 16137 + 16143 16137 16142 + 16137 16143 16138 + 16138 16143 16144 + 16144 16145 16138 + 16138 16145 16146 + 16146 16139 16138 + 16140 16139 16146 + 13859 16142 13860 + 16147 16142 13859 + 16142 16147 16143 + 16144 16143 16147 + 16147 16148 16144 + 16149 16144 16148 + 16144 16149 16150 + 16150 16145 16144 + 16145 16150 16151 + 16151 16146 16145 + 13859 16152 16147 + 16147 16152 16153 + 16153 16148 16147 + 16154 16148 16153 + 16148 16154 16149 + 16155 16149 16154 + 16150 16149 16155 + 16152 13859 13858 + 13858 13865 16152 + 16153 16152 13865 + 13865 16156 16153 + 16157 16153 16156 + 16153 16157 16154 + 16154 16157 16158 + 16158 16159 16154 + 16154 16159 16155 + 16160 16156 13865 + 16161 16156 16160 + 16156 16161 16157 + 16158 16157 16161 + 16161 16162 16158 + 16163 16158 16162 + 16158 16163 16164 + 16164 16159 16158 + 13865 13864 16160 + 16160 13864 13870 + 13870 16165 16160 + 16166 16160 16165 + 16160 16166 16161 + 16161 16166 16167 + 16167 16162 16161 + 16168 16162 16167 + 16162 16168 16163 + 16169 16163 16168 + 16164 16163 16169 + 13874 16165 13870 + 16170 16165 13874 + 16165 16170 16166 + 16167 16166 16170 + 16170 16171 16167 + 16172 16167 16171 + 16167 16172 16168 + 16168 16172 16173 + 16173 16174 16168 + 16168 16174 16169 + 13874 16175 16170 + 16170 16175 14011 + 14011 16171 16170 + 14015 16171 14011 + 16171 14015 16172 + 16173 16172 14015 + 16175 13874 13879 + 13879 13884 16175 + 14011 16175 13884 + 14015 16176 16173 + 14014 16176 14015 + 14020 16176 14014 + 16176 14020 16177 + 16177 16173 16176 + 16173 16177 16178 + 16178 16174 16173 + 16174 16178 16179 + 16179 16169 16174 + 16169 16179 16180 + 16180 16181 16169 + 16169 16181 16164 + 16177 14020 16182 + 16182 16183 16177 + 16178 16177 16183 + 16183 16184 16178 + 16179 16178 16184 + 16184 16185 16179 + 16180 16179 16185 + 14019 16182 14020 + 14019 14025 16182 + 16182 14025 16186 + 16186 16183 16182 + 16183 16186 16187 + 16187 16184 16183 + 16184 16187 16188 + 16188 16185 16184 + 16185 16188 16189 + 16185 16189 16180 + 16190 16180 16189 + 16181 16180 16190 + 16186 14025 14034 + 14034 16191 16186 + 16187 16186 16191 + 16191 16192 16187 + 16187 16192 16193 + 16188 16187 16193 + 16193 16194 16188 + 16189 16188 16194 + 16194 16195 16189 + 16189 16195 16190 + 16196 16191 14034 + 16196 16192 16191 + 16192 16196 16197 + 16197 16193 16192 + 16198 16193 16197 + 16193 16198 16199 + 16199 16194 16193 + 16195 16194 16199 + 14034 14039 16196 + 16196 14039 14038 + 16197 16196 14038 + 14038 16200 16197 + 16201 16197 16200 + 16197 16201 16198 + 16198 16201 16202 + 16202 16203 16198 + 16199 16198 16203 + 14044 16200 14038 + 16204 16200 14044 + 16200 16204 16201 + 16202 16201 16204 + 16204 16205 16202 + 16206 16202 16205 + 16202 16206 16207 + 16207 16203 16202 + 16204 14044 16208 + 16208 16205 16204 + 16205 16208 14053 + 14053 16209 16205 + 16205 16209 16206 + 16210 16206 16209 + 16207 16206 16210 + 14043 16208 14044 + 14053 16208 14043 + 16209 14053 14052 + 14052 16211 16209 + 16209 16211 16210 + 16212 16210 16211 + 16212 16213 16210 + 16210 16213 16207 + 16207 16213 16214 + 16215 16207 16214 + 16203 16207 16215 + 14057 16211 14052 + 16211 14057 16212 + 14066 16212 14057 + 16213 16212 14066 + 14066 16214 16213 + 14074 16214 14066 + 16214 14074 16216 + 16216 16217 16214 + 16214 16217 16215 + 16218 16215 16217 + 16215 16218 16219 + 16219 16220 16215 + 16215 16220 16203 + 16216 14074 14073 + 14073 16221 16216 + 16222 16216 16221 + 16216 16222 16223 + 16223 16217 16216 + 16217 16223 16218 + 16224 16218 16223 + 16219 16218 16224 + 14079 16221 14073 + 16225 16221 14079 + 16221 16225 16222 + 16226 16222 16225 + 16223 16222 16226 + 16226 16227 16223 + 16223 16227 16224 + 14079 16228 16225 + 16225 16228 16229 + 16229 16230 16225 + 16225 16230 16226 + 16231 16226 16230 + 16226 16231 16232 + 16232 16227 16226 + 16228 14079 16233 + 16233 16234 16228 + 16229 16228 16234 + 16234 16235 16229 + 16236 16229 16235 + 16229 16236 16237 + 16237 16230 16229 + 16230 16237 16231 + 14078 16233 14079 + 16238 16233 14078 + 16234 16233 16238 + 16238 16239 16234 + 16234 16239 16240 + 16240 16235 16234 + 16241 16235 16240 + 16235 16241 16236 + 16242 16236 16241 + 16237 16236 16242 + 14078 14077 16238 + 16238 14077 16243 + 16243 16244 16238 + 16239 16238 16244 + 16244 16245 16239 + 16240 16239 16245 + 16245 16246 16240 + 16247 16240 16246 + 16240 16247 16241 + 14083 16243 14077 + 16248 16243 14083 + 16243 16248 16249 + 16249 16244 16243 + 16245 16244 16249 + 16249 16250 16245 + 16245 16250 16251 + 16251 16246 16245 + 16252 16246 16251 + 16246 16252 16247 + 14083 16253 16248 + 16248 16253 16254 + 16254 16255 16248 + 16249 16248 16255 + 16255 16256 16249 + 16250 16249 16256 + 16256 16257 16250 + 16251 16250 16257 + 16253 14083 16258 + 16258 16259 16253 + 16254 16253 16259 + 14082 16258 14083 + 16260 16258 14082 + 16259 16258 16260 + 16259 16260 16261 + 16261 16262 16259 + 16259 16262 16254 + 14082 16263 16260 + 16261 16260 16263 + 16263 16264 16261 + 16265 16261 16264 + 16262 16261 16265 + 16262 16265 16266 + 16266 16267 16262 + 16262 16267 16254 + 14082 14086 16263 + 16263 14086 16268 + 16268 16264 16263 + 16264 16268 16269 + 16264 16269 16265 + 16265 16269 16270 + 16266 16265 16270 + 16271 16266 16270 + 16272 16266 16271 + 16272 16267 16266 + 14093 16268 14086 + 16269 16268 14093 + 14093 16273 16269 + 16269 16273 16270 + 14093 14092 16273 + 16273 14092 14091 + 14091 16270 16273 + 16270 14091 16274 + 16270 16274 16275 + 16275 16276 16270 + 16270 16276 16277 + 16277 16271 16270 + 16274 14091 14100 + 14100 16278 16274 + 16274 16278 16279 + 16279 16275 16274 + 16280 16275 16279 + 16275 16280 16276 + 16276 16280 16281 + 16281 16277 16276 + 16282 16278 14100 + 16278 16282 16283 + 16283 16279 16278 + 16279 16283 16284 + 16284 16285 16279 + 16279 16285 16280 + 16281 16280 16285 + 14100 14099 16282 + 16282 14099 16286 + 16286 16287 16282 + 16283 16282 16287 + 16287 16288 16283 + 16284 16283 16288 + 16288 16289 16284 + 16290 16284 16289 + 16285 16284 16290 + 16291 16286 14099 + 16292 16286 16291 + 16286 16292 16293 + 16293 16287 16286 + 16287 16293 16294 + 16294 16288 16287 + 16288 16294 16295 + 16295 16289 16288 + 14099 14098 16291 + 16296 16291 14098 + 16297 16291 16296 + 16291 16297 16292 + 16292 16297 16298 + 16298 16299 16292 + 16293 16292 16299 + 16299 16300 16293 + 16294 16293 16300 + 14098 14097 16296 + 16301 16296 14097 + 16302 16296 16301 + 16296 16302 16297 + 16297 16302 16303 + 16303 16298 16297 + 16304 16298 16303 + 16298 16304 16305 + 16305 16299 16298 + 14097 14104 16301 + 15105 16301 14104 + 16306 16301 15105 + 16301 16306 16302 + 16302 16306 16307 + 16307 16303 16302 + 16308 16303 16307 + 16303 16308 16304 + 16304 16308 16309 + 16309 16310 16304 + 16305 16304 16310 + 15105 15110 16306 + 16306 15110 16311 + 16311 16307 16306 + 16312 16307 16311 + 16307 16312 16308 + 16308 16312 16313 + 16313 16309 16308 + 16314 16309 16313 + 16309 16314 16315 + 16315 16310 16309 + 16316 16311 15110 + 16317 16311 16316 + 16311 16317 16312 + 16312 16317 16318 + 16318 16313 16312 + 16319 16313 16318 + 16313 16319 16314 + 15110 15109 16316 + 16320 16316 15109 + 16321 16316 16320 + 16316 16321 16317 + 16317 16321 16322 + 16322 16318 16317 + 16323 16318 16322 + 16318 16323 16319 + 15109 15115 16320 + 16324 16320 15115 + 16325 16320 16324 + 16320 16325 16321 + 16321 16325 16326 + 16326 16322 16321 + 16327 16322 16326 + 16322 16327 16323 + 15115 15120 16324 + 16328 16324 15120 + 16329 16324 16328 + 16324 16329 16325 + 16325 16329 16330 + 16330 16326 16325 + 16331 16326 16330 + 16326 16331 16327 + 15120 16332 16328 + 16333 16328 16332 + 16334 16328 16333 + 16328 16334 16329 + 16329 16334 16335 + 16335 16330 16329 + 16336 16330 16335 + 16330 16336 16331 + 15119 16332 15120 + 16332 15119 15125 + 15125 16337 16332 + 16332 16337 16333 + 16338 16333 16337 + 16339 16333 16338 + 16333 16339 16334 + 16334 16339 16340 + 16340 16335 16334 + 16341 16335 16340 + 16335 16341 16336 + 16337 15125 15130 + 15130 16342 16337 + 16337 16342 16338 + 16343 16338 16342 + 16344 16338 16343 + 16338 16344 16339 + 16339 16344 16345 + 16345 16340 16339 + 16346 16340 16345 + 16340 16346 16341 + 16342 15130 15140 + 15140 16347 16342 + 16342 16347 16343 + 16348 16343 16347 + 16349 16343 16348 + 16343 16349 16344 + 16344 16349 16350 + 16350 16345 16344 + 16351 16345 16350 + 16345 16351 16346 + 16347 15140 15144 + 15144 16352 16347 + 16347 16352 16348 + 16353 16348 16352 + 16354 16348 16353 + 16348 16354 16349 + 16349 16354 16355 + 16355 16350 16349 + 16356 16350 16355 + 16350 16356 16351 + 16352 15144 15148 + 15148 15157 16352 + 16352 15157 16353 + 15162 16353 15157 + 16357 16353 15162 + 16353 16357 16354 + 16354 16357 16358 + 16358 16355 16354 + 16359 16355 16358 + 16355 16359 16356 + 16356 16359 16360 + 16360 16361 16356 + 16351 16356 16361 + 15162 15167 16357 + 16357 15167 16362 + 16362 16358 16357 + 16363 16358 16362 + 16358 16363 16359 + 16359 16363 16364 + 16364 16360 16359 + 16365 16360 16364 + 16360 16365 16366 + 16366 16361 16360 + 15172 16362 15167 + 16367 16362 15172 + 16362 16367 16363 + 16363 16367 16368 + 16368 16364 16363 + 16369 16364 16368 + 16364 16369 16365 + 16365 16369 16370 + 16370 16371 16365 + 16366 16365 16371 + 15172 15177 16367 + 16367 15177 16372 + 16372 16368 16367 + 16373 16368 16372 + 16368 16373 16369 + 16369 16373 16374 + 16374 16370 16369 + 15182 16372 15177 + 16375 16372 15182 + 16372 16375 16373 + 16373 16375 16376 + 16376 16374 16373 + 16377 16374 16376 + 16370 16374 16377 + 16377 16378 16370 + 16370 16378 16379 + 16379 16371 16370 + 15182 16380 16375 + 16375 16380 16381 + 16381 16376 16375 + 16376 16381 16382 + 16382 16383 16376 + 16376 16383 16377 + 16380 15182 15181 + 15181 15191 16380 + 16380 15191 16384 + 16384 16381 16380 + 16382 16381 16384 + 16384 16385 16382 + 16382 16385 16386 + 16386 16387 16382 + 16383 16382 16387 + 16387 16388 16383 + 16377 16383 16388 + 15196 16384 15191 + 16384 15196 16389 + 16389 16385 16384 + 16385 16389 16390 + 16390 16386 16385 + 16386 16390 16391 + 16391 16392 16386 + 16386 16392 16393 + 16393 16387 16386 + 16387 16393 16388 + 16389 15196 16394 + 16394 16395 16389 + 16389 16395 16396 + 16396 16390 16389 + 16391 16390 16396 + 15195 16394 15196 + 15205 16394 15195 + 16394 15205 16397 + 16397 16395 16394 + 16395 16397 16398 + 16398 16396 16395 + 16398 16399 16396 + 16396 16399 16391 + 16391 16399 16400 + 16400 16401 16391 + 16392 16391 16401 + 16397 15205 16402 + 16402 16403 16397 + 16397 16403 16404 + 16404 16398 16397 + 16399 16398 16404 + 16404 16405 16399 + 16399 16405 16400 + 15204 16402 15205 + 16406 16402 15204 + 16403 16402 16406 + 16403 16406 16407 + 16407 16408 16403 + 16403 16408 16404 + 16409 16404 16408 + 16404 16409 16410 + 16410 16405 16404 + 15204 15209 16406 + 16406 15209 15214 + 15214 16407 16406 + 16411 16407 15214 + 16407 16411 16412 + 16412 16408 16407 + 16408 16412 16409 + 16413 16409 16412 + 16410 16409 16413 + 15214 15219 16411 + 16411 15219 15224 + 15224 16414 16411 + 16412 16411 16414 + 16414 16415 16412 + 16412 16415 16413 + 16416 16413 16415 + 16413 16416 16417 + 16417 16418 16413 + 16413 16418 16410 + 16419 16414 15224 + 16414 16419 16420 + 16420 16415 16414 + 16415 16420 16416 + 16421 16416 16420 + 16417 16416 16421 + 15224 15229 16419 + 16419 15229 15234 + 15234 16422 16419 + 16420 16419 16422 + 16422 16423 16420 + 16420 16423 16421 + 16424 16422 15234 + 16423 16422 16424 + 16423 16424 16425 + 16425 16426 16423 + 16423 16426 16421 + 15234 16427 16424 + 16424 16427 16428 + 16428 16425 16424 + 16429 16425 16428 + 16425 16429 16430 + 16430 16426 16425 + 16426 16430 16431 + 16431 16421 16426 + 15233 16427 15234 + 16427 15233 15239 + 15239 16428 16427 + 16428 15239 16432 + 16432 16433 16428 + 16428 16433 16429 + 16429 16433 16434 + 16434 16435 16429 + 16430 16429 16435 + 16432 15239 15238 + 15238 15244 16432 + 16436 16432 15244 + 16433 16432 16436 + 16436 16434 16433 + 16434 16436 16437 + 16437 16438 16434 + 16434 16438 16439 + 16439 16435 16434 + 15244 15249 16436 + 16437 16436 15249 + 15249 16440 16437 + 16441 16437 16440 + 16438 16437 16441 + 16441 16442 16438 + 16439 16438 16442 + 16442 16443 16439 + 16444 16439 16443 + 16435 16439 16444 + 15248 16440 15249 + 16440 15248 16445 + 16445 16446 16440 + 16440 16446 16441 + 16447 16441 16446 + 16442 16441 16447 + 16447 16448 16442 + 16442 16448 16449 + 16449 16443 16442 + 16445 15248 15253 + 15253 16450 16445 + 16451 16445 16450 + 16446 16445 16451 + 16451 16452 16446 + 16446 16452 16447 + 16453 16447 16452 + 16448 16447 16453 + 16453 16454 16448 + 16449 16448 16454 + 15257 16450 15253 + 16450 15257 16455 + 16455 16456 16450 + 16450 16456 16451 + 16457 16451 16456 + 16452 16451 16457 + 16457 16458 16452 + 16452 16458 16453 + 16459 16453 16458 + 16454 16453 16459 + 16455 15257 15261 + 15261 16460 16455 + 16461 16455 16460 + 16456 16455 16461 + 16461 16462 16456 + 16456 16462 16457 + 16463 16457 16462 + 16458 16457 16463 + 16463 16464 16458 + 16458 16464 16459 + 15266 16460 15261 + 16460 15266 16465 + 16465 16466 16460 + 16460 16466 16461 + 16467 16461 16466 + 16462 16461 16467 + 16467 16468 16462 + 16462 16468 16463 + 16469 16463 16468 + 16464 16463 16469 + 16465 15266 16470 + 16470 16471 16465 + 16472 16465 16471 + 16466 16465 16472 + 16472 16473 16466 + 16466 16473 16467 + 16474 16467 16473 + 16468 16467 16474 + 15265 16470 15266 + 15271 16470 15265 + 16470 15271 16475 + 16475 16471 16470 + 16471 16475 16476 + 16476 15611 16471 + 16471 15611 16472 + 15610 16472 15611 + 16473 16472 15610 + 15610 15615 16473 + 16473 15615 16474 + 16475 15271 16477 + 16477 16478 16475 + 16476 16475 16478 + 16478 15606 16476 + 15605 16476 15606 + 15611 16476 15605 + 15270 16477 15271 + 16477 15270 15269 + 15269 16479 16477 + 16477 16479 16480 + 16480 16478 16477 + 15606 16478 16480 + 16480 16481 15606 + 15606 16481 15601 + 15597 15601 16481 + 16479 15269 16482 + 16482 16483 16479 + 16480 16479 16483 + 16483 16484 16480 + 16481 16480 16484 + 16484 16485 16481 + 16481 16485 15597 + 16486 15597 16485 + 15597 16486 15591 + 15274 16482 15269 + 16487 16482 15274 + 16483 16482 16487 + 16487 16488 16483 + 16483 16488 16489 + 16489 16484 16483 + 16485 16484 16489 + 16489 16490 16485 + 16485 16490 16486 + 15274 16491 16487 + 16487 16491 16492 + 16492 16493 16487 + 16488 16487 16493 + 16493 16494 16488 + 16489 16488 16494 + 16494 16495 16489 + 16490 16489 16495 + 15277 16491 15274 + 16491 15277 16496 + 16496 16492 16491 + 16492 16496 16497 + 16497 16498 16492 + 16492 16498 16499 + 16499 16493 16492 + 16493 16499 16500 + 16500 16494 16493 + 15281 16496 15277 + 16497 16496 15281 + 15281 16501 16497 + 16502 16497 16501 + 16498 16497 16502 + 16502 16503 16498 + 16498 16503 16504 + 16504 16499 16498 + 16500 16499 16504 + 15285 16501 15281 + 16501 15285 15290 + 15290 16505 16501 + 16501 16505 16502 + 16506 16502 16505 + 16502 16506 16507 + 16507 16503 16502 + 16503 16507 16508 + 16508 16504 16503 + 16509 16505 15290 + 16505 16509 16506 + 16506 16509 16510 + 16511 16506 16510 + 16507 16506 16511 + 16511 16512 16507 + 16512 16508 16507 + 16513 16508 16512 + 16504 16508 16513 + 15290 16514 16509 + 16509 16514 16515 + 16515 16510 16509 + 16516 16510 16515 + 16510 16516 16517 + 16517 16518 16510 + 16510 16518 16511 + 16514 15290 15289 + 15289 16519 16514 + 16514 16519 16520 + 16520 16515 16514 + 16516 16515 16520 + 16520 16521 16516 + 16517 16516 16521 + 16519 15289 15288 + 15288 16522 16519 + 16519 16522 16523 + 16523 16524 16519 + 16519 16524 16520 + 16525 16520 16524 + 16520 16525 16526 + 16526 16521 16520 + 16522 15288 15294 + 15294 16527 16522 + 16522 16527 16528 + 16528 16523 16522 + 16529 16523 16528 + 16524 16523 16529 + 16529 16530 16524 + 16524 16530 16525 + 16527 15294 15293 + 15293 16531 16527 + 16527 16531 16532 + 16532 16528 16527 + 16528 16532 16533 + 16533 16534 16528 + 16528 16534 16529 + 16535 16529 16534 + 16530 16529 16535 + 16531 15293 15301 + 15301 16536 16531 + 16532 16531 16536 + 16536 16537 16532 + 16537 16538 16532 + 16533 16532 16538 + 16536 15301 15300 + 15300 16539 16536 + 16536 16539 16540 + 16540 16537 16536 + 16537 16540 16541 + 16541 16542 16537 + 16537 16542 16543 + 16543 16538 16537 + 16539 15300 15309 + 15309 16544 16539 + 16540 16539 16544 + 16544 16545 16540 + 16541 16540 16545 + 16545 16546 16541 + 16541 16546 16547 + 16547 16548 16541 + 16542 16541 16548 + 16544 15309 15308 + 15308 16549 16544 + 16544 16549 16550 + 16550 16545 16544 + 16545 16550 16551 + 16551 16546 16545 + 16546 16551 16552 + 16552 16547 16546 + 16549 15308 15317 + 15317 16553 16549 + 16550 16549 16553 + 16551 16550 16553 + 16553 16554 16551 + 16551 16554 16552 + 16555 16552 16554 + 16552 16555 16556 + 16556 16547 16552 + 16547 16556 16557 + 16557 16548 16547 + 16553 15317 15316 + 15316 16554 16553 + 16554 15316 16555 + 15321 16555 15316 + 16556 16555 15321 + 15321 15329 16556 + 16556 15329 16558 + 16558 16557 16556 + 16559 16557 16558 + 16548 16557 16559 + 16559 16560 16548 + 16548 16560 16542 + 16542 16560 16561 + 16561 16543 16542 + 15328 16558 15329 + 16558 15328 15334 + 15334 16562 16558 + 16558 16562 16559 + 16563 16559 16562 + 16560 16559 16563 + 16563 16561 16560 + 16561 16563 15551 + 15551 16564 16561 + 16561 16564 16565 + 16565 16543 16561 + 16543 16565 16538 + 16562 15334 15542 + 15542 15547 16562 + 16562 15547 16563 + 15551 16563 15547 + 16538 16565 16533 + 16533 16565 16564 + 16564 16566 16533 + 16534 16533 16566 + 16566 16567 16534 + 16534 16567 16535 + 16568 16566 16564 + 16566 16568 15560 + 15560 16567 16566 + 16567 15560 16569 + 16569 16535 16567 + 16535 16569 16570 + 16570 16571 16535 + 16535 16571 16530 + 16564 15551 16568 + 15550 16568 15551 + 15560 16568 15550 + 16525 16530 16571 + 16571 16572 16525 + 16526 16525 16572 + 16572 16573 16526 + 16526 16573 16574 + 16521 16526 16574 + 16575 16572 16571 + 16572 16575 15579 + 15579 16573 16572 + 16573 15579 16576 + 16576 16574 16573 + 16574 16576 16577 + 16577 16578 16574 + 16574 16578 16521 + 16571 16570 16575 + 15570 16575 16570 + 15579 16575 15570 + 16570 15565 15570 + 15559 15565 16570 + 16570 16569 15559 + 15559 16569 15560 + 15578 16576 15579 + 16577 16576 15578 + 15578 15583 16577 + 16577 15583 15588 + 15588 16579 16577 + 16578 16577 16579 + 16579 16580 16578 + 16521 16578 16580 + 16580 16517 16521 + 16581 16517 16580 + 16517 16581 16582 + 16582 16518 16517 + 16583 16579 15588 + 16580 16579 16583 + 16583 16584 16580 + 16580 16584 16581 + 16581 16584 16585 + 16585 16586 16581 + 16582 16581 16586 + 15588 15593 16583 + 16583 15593 16587 + 16587 16588 16583 + 16584 16583 16588 + 16588 16585 16584 + 16585 16588 16589 + 16589 16590 16585 + 16585 16590 16591 + 16591 16586 16585 + 15592 16587 15593 + 16587 15592 16592 + 16592 16593 16587 + 16587 16593 16589 + 16589 16588 16587 + 16592 15592 15591 + 15591 16486 16592 + 16594 16592 16486 + 16593 16592 16594 + 16594 16595 16593 + 16589 16593 16595 + 16595 16596 16589 + 16590 16589 16596 + 16596 16597 16590 + 16591 16590 16597 + 16598 16591 16597 + 16598 16586 16591 + 16586 16598 16582 + 16486 16490 16594 + 16495 16594 16490 + 16595 16594 16495 + 16495 16599 16595 + 16595 16599 16600 + 16600 16596 16595 + 16597 16596 16600 + 16600 16601 16597 + 16597 16601 16598 + 16582 16598 16601 + 16599 16495 16494 + 16494 16500 16599 + 16600 16599 16500 + 16500 16602 16600 + 16601 16600 16602 + 16602 16513 16601 + 16601 16513 16582 + 16513 16603 16582 + 16518 16582 16603 + 16603 16511 16518 + 16511 16603 16512 + 16504 16602 16500 + 16513 16602 16504 + 16512 16603 16513 + 15619 16474 15615 + 16604 16474 15619 + 16474 16604 16468 + 16468 16604 16469 + 16605 16469 16604 + 16606 16469 16605 + 16469 16606 16464 + 15619 15623 16604 + 16604 15623 16605 + 15627 16605 15623 + 16607 16605 15627 + 16605 16607 16606 + 16606 16607 16608 + 16608 16609 16606 + 16464 16606 16609 + 16609 16459 16464 + 16610 16459 16609 + 16459 16610 16454 + 15627 15631 16607 + 16607 15631 16611 + 16611 16608 16607 + 16612 16608 16611 + 16608 16612 16613 + 16613 16609 16608 + 16609 16613 16610 + 16614 16610 16613 + 16454 16610 16614 + 16614 16615 16454 + 16454 16615 16449 + 15636 16611 15631 + 16616 16611 15636 + 16611 16616 16612 + 16617 16612 16616 + 16613 16612 16617 + 16617 16618 16613 + 16613 16618 16614 + 16619 16614 16618 + 16615 16614 16619 + 15636 16620 16616 + 16616 16620 16621 + 16621 16622 16616 + 16616 16622 16617 + 16623 16617 16622 + 16618 16617 16623 + 16623 16624 16618 + 16618 16624 16619 + 16620 15636 15635 + 15635 15641 16620 + 16621 16620 15641 + 15641 16625 16621 + 16626 16621 16625 + 16622 16621 16626 + 16626 16627 16622 + 16622 16627 16623 + 16623 16627 16628 + 16628 16629 16623 + 16624 16623 16629 + 16630 16625 15641 + 16625 16630 16631 + 16631 16632 16625 + 16625 16632 16626 + 16626 16632 16633 + 16633 16634 16626 + 16627 16626 16634 + 16634 16628 16627 + 15641 15640 16630 + 16630 15640 15639 + 15639 16635 16630 + 16631 16630 16635 + 16635 16636 16631 + 16637 16631 16636 + 16632 16631 16637 + 16637 16633 16632 + 15649 16635 15639 + 16636 16635 15649 + 15649 16638 16636 + 16636 16638 16639 + 16639 16640 16636 + 16636 16640 16637 + 16641 16637 16640 + 16633 16637 16641 + 16638 15649 16642 + 16642 16643 16638 + 16639 16638 16643 + 16643 16644 16639 + 16645 16639 16644 + 16639 16645 16640 + 16640 16645 16641 + 15648 16642 15649 + 16646 16642 15648 + 16643 16642 16646 + 16646 16647 16643 + 16643 16647 16648 + 16648 16644 16643 + 16648 16649 16644 + 16644 16649 16645 + 16645 16649 16650 + 16650 16641 16645 + 15648 15653 16646 + 16651 16646 15653 + 16647 16646 16651 + 16651 16652 16647 + 16647 16652 16653 + 16653 16648 16647 + 16649 16648 16653 + 16653 16654 16649 + 16649 16654 16650 + 15653 15657 16651 + 16655 16651 15657 + 16651 16655 16656 + 16656 16652 16651 + 16652 16656 16657 + 16657 16653 16652 + 16653 16657 16658 + 16658 16654 16653 + 15657 15662 16655 + 16659 16655 15662 + 16656 16655 16659 + 16659 16660 16656 + 16657 16656 16660 + 16660 16661 16657 + 16658 16657 16661 + 15662 15667 16659 + 16662 16659 15667 + 16659 16662 16663 + 16663 16660 16659 + 16660 16663 16664 + 16664 16661 16660 + 16664 16665 16661 + 16661 16665 16658 + 15667 16666 16662 + 16667 16662 16666 + 16663 16662 16667 + 16667 16668 16663 + 16664 16663 16668 + 16668 16669 16664 + 16665 16664 16669 + 15666 16666 15667 + 16666 15666 16670 + 16670 16671 16666 + 16666 16671 16667 + 16672 16667 16671 + 16667 16672 16673 + 16673 16668 16667 + 16668 16673 16674 + 16674 16669 16668 + 15671 16670 15666 + 16675 16670 15671 + 16671 16670 16675 + 16675 16676 16671 + 16671 16676 16672 + 16677 16672 16676 + 16673 16672 16677 + 16677 16678 16673 + 16674 16673 16678 + 15671 16679 16675 + 16675 16679 16680 + 16680 16681 16675 + 16676 16675 16681 + 16681 16682 16676 + 16676 16682 16677 + 15675 16679 15671 + 16679 15675 16683 + 16683 16680 16679 + 16680 16683 16684 + 16684 16685 16680 + 16680 16685 16686 + 16686 16681 16680 + 16682 16681 16686 + 15680 16683 15675 + 16684 16683 15680 + 15680 16687 16684 + 16684 16687 16688 + 16688 16689 16684 + 16685 16684 16689 + 16689 16690 16685 + 16686 16685 16690 + 16691 16687 15680 + 16687 16691 16692 + 16692 16688 16687 + 16688 16692 16693 + 16693 16694 16688 + 16688 16694 16695 + 16695 16689 16688 + 16690 16689 16695 + 15680 15679 16691 + 16691 15679 15678 + 15678 16696 16691 + 16691 16696 16697 + 16697 16692 16691 + 16693 16692 16697 + 16697 16698 16693 + 16693 16698 16699 + 16699 16700 16693 + 16694 16693 16700 + 15687 16696 15678 + 16696 15687 16701 + 16701 16697 16696 + 16697 16701 16702 + 16702 16698 16697 + 16698 16702 16703 + 16703 16699 16698 + 15691 16701 15687 + 16702 16701 15691 + 15691 15762 16702 + 16702 15762 16704 + 16704 16703 16702 + 16705 16703 16704 + 16699 16703 16705 + 16705 16706 16699 + 16699 16706 16707 + 16707 16700 16699 + 16708 16700 16707 + 16700 16708 16694 + 16695 16694 16708 + 15761 16704 15762 + 16704 15761 15760 + 15760 15767 16704 + 16704 15767 16705 + 16705 15767 15766 + 15766 16709 16705 + 16706 16705 16709 + 16709 16710 16706 + 16707 16706 16710 + 16710 16711 16707 + 16712 16707 16711 + 16707 16712 16708 + 15771 16709 15766 + 16710 16709 15771 + 15771 16713 16710 + 16710 16713 16714 + 16714 16711 16710 + 16715 16711 16714 + 16711 16715 16712 + 16716 16712 16715 + 16708 16712 16716 + 16716 16717 16708 + 16708 16717 16695 + 16713 15771 16718 + 16718 16719 16713 + 16714 16713 16719 + 16719 16720 16714 + 16721 16714 16720 + 16714 16721 16715 + 15770 16718 15771 + 15780 16718 15770 + 16719 16718 15780 + 15780 15789 16719 + 16719 15789 15794 + 15794 16720 16719 + 16722 16720 15794 + 16720 16722 16721 + 16723 16721 16722 + 16715 16721 16723 + 16723 16724 16715 + 16715 16724 16716 + 16725 16716 16724 + 16716 16725 16726 + 16726 16717 16716 + 15794 16727 16722 + 16722 16727 16728 + 16728 16729 16722 + 16722 16729 16723 + 16730 16723 16729 + 16723 16730 16731 + 16731 16724 16723 + 16724 16731 16725 + 16727 15794 15793 + 15793 15799 16727 + 16728 16727 15799 + 15799 15808 16728 + 16732 16728 15808 + 16728 16732 16733 + 16733 16729 16728 + 16729 16733 16730 + 16734 16730 16733 + 16731 16730 16734 + 16734 16735 16731 + 16731 16735 16736 + 16736 16725 16731 + 16726 16725 16736 + 15808 15807 16732 + 16737 16732 15807 + 16733 16732 16737 + 16737 16738 16733 + 16733 16738 16734 + 16739 16734 16738 + 16734 16739 16740 + 16740 16735 16734 + 16735 16740 16741 + 16741 16736 16735 + 15807 16742 16737 + 16743 16737 16742 + 16737 16743 16744 + 16744 16738 16737 + 16738 16744 16739 + 16739 16744 16745 + 16745 16746 16739 + 16740 16739 16746 + 15812 16742 15807 + 16747 16742 15812 + 16742 16747 16743 + 16743 16747 16748 + 16748 16749 16743 + 16744 16743 16749 + 16749 16745 16744 + 16745 16749 16750 + 16745 16750 16751 + 16751 16746 16745 + 15812 16752 16747 + 16747 16752 16753 + 16753 16748 16747 + 16748 16753 16754 + 16754 16755 16748 + 16748 16755 16750 + 16750 16749 16748 + 16752 15812 15815 + 15815 15820 16752 + 16752 15820 16756 + 16756 16753 16752 + 16754 16753 16756 + 16756 16757 16754 + 16758 16754 16757 + 16755 16754 16758 + 16758 16759 16755 + 16755 16759 16760 + 16750 16755 16760 + 16760 16751 16750 + 15825 16756 15820 + 16756 15825 15830 + 15830 16757 16756 + 16757 15830 15838 + 15838 16761 16757 + 16757 16761 16758 + 16762 16758 16761 + 16759 16758 16762 + 16762 16763 16759 + 16759 16763 16764 + 16764 16760 16759 + 16761 15838 15842 + 15842 16765 16761 + 16761 16765 16762 + 16766 16762 16765 + 16763 16762 16766 + 16766 16767 16763 + 16763 16767 16768 + 16768 16764 16763 + 16765 15842 15846 + 15846 16769 16765 + 16765 16769 16766 + 16770 16766 16769 + 16766 16770 16767 + 16767 16770 16771 + 16771 16768 16767 + 16772 16768 16771 + 16768 16772 16773 + 16773 16764 16768 + 16769 15846 16774 + 16774 16775 16769 + 16769 16775 16770 + 16771 16770 16775 + 16774 15846 15849 + 15849 16776 16774 + 16774 16776 16777 + 16777 16778 16774 + 16775 16774 16778 + 16778 16779 16775 + 16775 16779 16771 + 15853 16776 15849 + 16776 15853 16780 + 16780 16777 16776 + 16777 16780 16781 + 16781 16782 16777 + 16777 16782 16783 + 16783 16778 16777 + 16779 16778 16783 + 16784 16780 15853 + 16781 16780 16784 + 16784 16785 16781 + 16781 16785 16786 + 16786 16787 16781 + 16782 16781 16787 + 16787 16788 16782 + 16783 16782 16788 + 15853 15857 16784 + 15867 16784 15857 + 15867 16785 16784 + 16785 15867 15866 + 15866 16789 16785 + 16785 16789 16786 + 16790 16786 16789 + 16786 16790 16791 + 16791 16792 16786 + 16786 16792 16793 + 16793 16787 16786 + 16788 16787 16793 + 15876 16789 15866 + 16789 15876 16790 + 16794 16790 15876 + 16791 16790 16794 + 16794 16795 16791 + 16796 16791 16795 + 16792 16791 16796 + 16796 16797 16792 + 16792 16797 16798 + 16798 16793 16792 + 15876 16799 16794 + 16800 16794 16799 + 16794 16800 16795 + 16795 16800 16801 + 16801 16802 16795 + 16795 16802 16796 + 15875 16799 15876 + 16803 16799 15875 + 16799 16803 16800 + 16801 16800 16803 + 16803 16804 16801 + 16805 16801 16804 + 16801 16805 16806 + 16806 16802 16801 + 15875 15880 16803 + 16803 15880 15885 + 15885 16804 16803 + 16807 16804 15885 + 16804 16807 16805 + 16808 16805 16807 + 16806 16805 16808 + 16808 16809 16806 + 16810 16806 16809 + 16802 16806 16810 + 16810 16811 16802 + 16802 16811 16796 + 15885 15889 16807 + 16807 15889 15894 + 15894 16812 16807 + 16807 16812 16808 + 16813 16808 16812 + 16808 16813 16814 + 16814 16809 16808 + 16809 16814 16815 + 16815 16816 16809 + 16809 16816 16810 + 16817 16812 15894 + 16812 16817 16813 + 16818 16813 16817 + 16814 16813 16818 + 16818 16819 16814 + 16815 16814 16819 + 16819 16820 16815 + 16821 16815 16820 + 16815 16821 16816 + 15894 15899 16817 + 16817 15899 16822 + 16822 16823 16817 + 16817 16823 16818 + 16824 16818 16823 + 16818 16824 16825 + 16825 16819 16818 + 16819 16825 16826 + 16826 16820 16819 + 15904 16822 15899 + 16827 16822 15904 + 16822 16827 16828 + 16828 16823 16822 + 16823 16828 16824 + 16829 16824 16828 + 16825 16824 16829 + 16829 16830 16825 + 16826 16825 16830 + 15904 15909 16827 + 16831 16827 15909 + 16828 16827 16831 + 16831 16832 16828 + 16828 16832 16829 + 16833 16829 16832 + 16829 16833 16834 + 16834 16830 16829 + 15909 16835 16831 + 16836 16831 16835 + 16831 16836 16837 + 16837 16832 16831 + 16832 16837 16833 + 16838 16833 16837 + 16834 16833 16838 + 16839 16835 15909 + 16840 16835 16839 + 16835 16840 16836 + 16841 16836 16840 + 16837 16836 16841 + 16841 16842 16837 + 16837 16842 16838 + 15909 15908 16839 + 15914 16839 15908 + 16843 16839 15914 + 16839 16843 16840 + 16840 16843 16844 + 16844 16845 16840 + 16840 16845 16841 + 16846 16841 16845 + 16841 16846 16847 + 16847 16842 16841 + 15914 16848 16843 + 16843 16848 16849 + 16849 16850 16843 + 16850 16844 16843 + 16851 16844 16850 + 16844 16851 16852 + 16852 16845 16844 + 16845 16852 16846 + 16848 15914 15913 + 15913 15919 16848 + 16848 15919 16853 + 16853 16849 16848 + 16854 16849 16853 + 16849 16854 16855 + 16855 16850 16849 + 16856 16850 16855 + 16850 16856 16851 + 16857 16853 15919 + 16854 16853 16857 + 16857 16858 16854 + 16854 16858 16859 + 16859 16855 16854 + 16860 16855 16859 + 16855 16860 16856 + 16861 16857 15919 + 16862 16857 16861 + 16858 16857 16862 + 16862 16863 16858 + 16858 16863 16864 + 16864 16859 16858 + 16865 16859 16864 + 16859 16865 16860 + 15919 15918 16861 + 15924 16861 15918 + 16866 16861 15924 + 16861 16866 16862 + 16867 16862 16866 + 16863 16862 16867 + 16867 16868 16863 + 16863 16868 16869 + 16869 16864 16863 + 16870 16864 16869 + 16864 16870 16865 + 16866 15924 15923 + 15923 16871 16866 + 16866 16871 16867 + 16872 16867 16871 + 16867 16872 16873 + 16873 16868 16867 + 16868 16873 16874 + 16874 16869 16868 + 15932 16871 15923 + 16871 15932 16872 + 16875 16872 15932 + 16873 16872 16875 + 16875 16876 16873 + 16873 16876 16877 + 16877 16874 16873 + 16878 16874 16877 + 16869 16874 16878 + 16878 16879 16869 + 16869 16879 16870 + 15932 15931 16875 + 15937 16875 15931 + 16875 15937 15945 + 15945 16876 16875 + 16876 15945 16880 + 16880 16877 16876 + 16877 16880 16881 + 16881 16882 16877 + 16877 16882 16878 + 16878 16882 16883 + 16883 16884 16878 + 16879 16878 16884 + 16885 16880 15945 + 16881 16880 16885 + 16885 16886 16881 + 16881 16886 16887 + 16887 16888 16881 + 16882 16881 16888 + 16888 16883 16882 + 15945 15944 16885 + 15950 16885 15944 + 16885 15950 16889 + 16889 16886 16885 + 16886 16889 16890 + 16890 16887 16886 + 16887 16890 16891 + 16891 16892 16887 + 16887 16892 16893 + 16893 16888 16887 + 16883 16888 16893 + 16889 15950 15949 + 15949 15962 16889 + 16889 15962 15967 + 15967 16890 16889 + 16891 16890 15967 + 15967 16894 16891 + 16891 16894 16895 + 16895 16896 16891 + 16892 16891 16896 + 16896 16897 16892 + 16893 16892 16897 + 15966 16894 15967 + 16894 15966 16898 + 16898 16895 16894 + 16895 16898 16899 + 16899 16900 16895 + 16895 16900 16901 + 16901 16896 16895 + 16897 16896 16901 + 15971 16898 15966 + 16899 16898 15971 + 15971 16902 16899 + 16899 16902 16903 + 16903 16904 16899 + 16900 16899 16904 + 16904 16905 16900 + 16901 16900 16905 + 15974 16902 15971 + 16902 15974 16906 + 16906 16903 16902 + 16903 16906 16907 + 16907 16908 16903 + 16903 16908 16909 + 16909 16904 16903 + 16905 16904 16909 + 15978 16906 15974 + 16907 16906 15978 + 15978 15983 16907 + 16907 15983 16910 + 16910 16911 16907 + 16908 16907 16911 + 16911 16912 16908 + 16909 16908 16912 + 16912 16913 16909 + 16914 16909 16913 + 16909 16914 16905 + 15988 16910 15983 + 16915 16910 15988 + 16910 16915 16916 + 16916 16911 16910 + 16912 16911 16916 + 16916 16917 16912 + 16912 16917 16918 + 16918 16913 16912 + 16919 16913 16918 + 16913 16919 16914 + 15988 16920 16915 + 16915 16920 16921 + 16921 16922 16915 + 16916 16915 16922 + 16922 16923 16916 + 16917 16916 16923 + 16923 16924 16917 + 16918 16917 16924 + 16920 15988 15987 + 15987 16925 16920 + 16920 16925 16926 + 16926 16921 16920 + 16927 16921 16926 + 16921 16927 16928 + 16928 16922 16921 + 16922 16928 16929 + 16929 16923 16922 + 16924 16923 16929 + 16925 15987 15986 + 15986 16930 16925 + 16925 16930 16931 + 16931 16926 16925 + 16932 16926 16931 + 16926 16932 16927 + 16927 16932 16933 + 16933 16934 16927 + 16928 16927 16934 + 16930 15986 15992 + 15992 15997 16930 + 16930 15997 16935 + 16935 16931 16930 + 16936 16931 16935 + 16931 16936 16932 + 16932 16936 16937 + 16937 16933 16932 + 16938 16933 16937 + 16933 16938 16939 + 16939 16934 16933 + 16940 16935 15997 + 16941 16935 16940 + 16935 16941 16936 + 16936 16941 16942 + 16942 16937 16936 + 16943 16937 16942 + 16937 16943 16938 + 15997 15996 16940 + 16944 16940 15996 + 16945 16940 16944 + 16940 16945 16941 + 16941 16945 16946 + 16946 16942 16941 + 16947 16942 16946 + 16942 16947 16943 + 15996 16001 16944 + 16948 16944 16001 + 16949 16944 16948 + 16944 16949 16945 + 16945 16949 16950 + 16950 16946 16945 + 16951 16946 16950 + 16946 16951 16947 + 16001 16006 16948 + 16952 16948 16006 + 16953 16948 16952 + 16948 16953 16949 + 16949 16953 16954 + 16954 16950 16949 + 16955 16950 16954 + 16950 16955 16951 + 16006 16956 16952 + 16957 16952 16956 + 16958 16952 16957 + 16952 16958 16953 + 16953 16958 16959 + 16959 16954 16953 + 16960 16954 16959 + 16954 16960 16955 + 16005 16956 16006 + 16956 16005 16011 + 16956 16011 16957 + 16957 16011 16010 + 16010 16961 16957 + 16962 16957 16961 + 16957 16962 16958 + 16958 16962 16963 + 16963 16959 16958 + 16964 16959 16963 + 16959 16964 16960 + 16965 16961 16010 + 16966 16961 16965 + 16961 16966 16962 + 16962 16966 16967 + 16967 16963 16962 + 16968 16963 16967 + 16963 16968 16964 + 16010 16018 16965 + 16969 16965 16018 + 16970 16965 16969 + 16965 16970 16966 + 16966 16970 16971 + 16971 16967 16966 + 16972 16967 16971 + 16967 16972 16968 + 16018 16022 16969 + 16027 16969 16022 + 16973 16969 16027 + 16969 16973 16970 + 16970 16973 16974 + 16974 16971 16970 + 16975 16971 16974 + 16971 16975 16972 + 16972 16975 16976 + 16976 16977 16972 + 16968 16972 16977 + 16027 16032 16973 + 16973 16032 16978 + 16978 16974 16973 + 16979 16974 16978 + 16974 16979 16975 + 16975 16979 16980 + 16980 16976 16975 + 16981 16976 16980 + 16976 16981 16982 + 16982 16977 16976 + 16036 16978 16032 + 16983 16978 16036 + 16978 16983 16979 + 16979 16983 16984 + 16984 16980 16979 + 16985 16980 16984 + 16980 16985 16981 + 16981 16985 16986 + 16986 16987 16981 + 16982 16981 16987 + 16036 16040 16983 + 16983 16040 16988 + 16988 16984 16983 + 16989 16984 16988 + 16984 16989 16985 + 16985 16989 16990 + 16990 16986 16985 + 16991 16986 16990 + 16986 16991 16992 + 16992 16987 16986 + 16044 16988 16040 + 16993 16988 16044 + 16988 16993 16989 + 16989 16993 16994 + 16994 16990 16989 + 16995 16990 16994 + 16990 16995 16991 + 16991 16995 16996 + 16996 16997 16991 + 16992 16991 16997 + 16044 16048 16993 + 16993 16048 16998 + 16998 16994 16993 + 16999 16994 16998 + 16994 16999 16995 + 16995 16999 17000 + 17000 16996 16995 + 17001 16996 17000 + 16996 17001 17002 + 17002 16997 16996 + 16052 16998 16048 + 17003 16998 16052 + 16998 17003 16999 + 16999 17003 17004 + 17004 17000 16999 + 17005 17000 17004 + 17000 17005 17001 + 17001 17005 17006 + 17006 17007 17001 + 17002 17001 17007 + 16052 16056 17003 + 17003 16056 17008 + 17008 17004 17003 + 17009 17004 17008 + 17004 17009 17005 + 17005 17009 17010 + 17010 17006 17005 + 17011 17006 17010 + 17006 17011 17012 + 17012 17007 17006 + 16060 17008 16056 + 17013 17008 16060 + 17008 17013 17009 + 17009 17013 17014 + 17014 17010 17009 + 17015 17010 17014 + 17010 17015 17011 + 17011 17015 17016 + 17016 17017 17011 + 17012 17011 17017 + 16060 16064 17013 + 17013 16064 17018 + 17018 17014 17013 + 17019 17014 17018 + 17014 17019 17015 + 17015 17019 17020 + 17020 17016 17015 + 17021 17016 17020 + 17016 17021 17022 + 17022 17017 17016 + 16068 17018 16064 + 17023 17018 16068 + 17018 17023 17019 + 17019 17023 17024 + 17024 17020 17019 + 17025 17020 17024 + 17020 17025 17021 + 17026 17021 17025 + 17022 17021 17026 + 16068 16076 17023 + 17023 16076 17027 + 17027 17024 17023 + 17028 17024 17027 + 17024 17028 17025 + 17025 17028 17029 + 17029 17030 17025 + 17025 17030 17026 + 16075 17027 16076 + 17031 17027 16075 + 17027 17031 17028 + 17029 17028 17031 + 17031 17032 17029 + 17033 17029 17032 + 17029 17033 17034 + 17034 17030 17029 + 17030 17034 17035 + 17035 17026 17030 + 16075 16080 17031 + 17031 16080 16079 + 16079 17032 17031 + 17036 17032 16079 + 17032 17036 17033 + 17037 17033 17036 + 17034 17033 17037 + 17037 17038 17034 + 17034 17038 17039 + 17039 17035 17034 + 17040 17035 17039 + 17026 17035 17040 + 16079 16085 17036 + 17036 16085 17041 + 17041 17042 17036 + 17036 17042 17037 + 17043 17037 17042 + 17037 17043 17044 + 17044 17038 17037 + 17038 17044 17045 + 17045 17039 17038 + 17041 16085 16084 + 16084 16090 17041 + 17046 17041 16090 + 17041 17046 17047 + 17047 17042 17041 + 17042 17047 17043 + 17048 17043 17047 + 17044 17043 17048 + 17048 17049 17044 + 17044 17049 17050 + 17050 17045 17044 + 16090 16089 17046 + 17051 17046 16089 + 17047 17046 17051 + 17051 17052 17047 + 17047 17052 17048 + 17053 17048 17052 + 17048 17053 17054 + 17054 17049 17048 + 17049 17054 17055 + 17055 17050 17049 + 16089 16103 17051 + 17056 17051 16103 + 17051 17056 17057 + 17057 17052 17051 + 17052 17057 17053 + 17058 17053 17057 + 17054 17053 17058 + 17058 17059 17054 + 17054 17059 17060 + 17060 17055 17054 + 16103 16102 17056 + 17061 17056 16102 + 17057 17056 17061 + 17061 17062 17057 + 17057 17062 17058 + 17063 17058 17062 + 17058 17063 17064 + 17064 17059 17058 + 17059 17064 17065 + 17065 17060 17059 + 16102 16107 17061 + 16112 17061 16107 + 17061 16112 17066 + 17066 17062 17061 + 17062 17066 17063 + 17067 17063 17066 + 17064 17063 17067 + 17067 17068 17064 + 17064 17068 17069 + 17069 17065 17064 + 17070 17065 17069 + 17060 17065 17070 + 17066 16112 16111 + 16111 17071 17066 + 17066 17071 17067 + 17072 17067 17071 + 17067 17072 17073 + 17073 17068 17067 + 17068 17073 17074 + 17074 17069 17068 + 16119 17071 16111 + 17071 16119 17072 + 17075 17072 16119 + 17073 17072 17075 + 17075 17076 17073 + 17073 17076 17077 + 17077 17074 17073 + 17078 17074 17077 + 17069 17074 17078 + 17078 17079 17069 + 17069 17079 17070 + 16119 16122 17075 + 16131 17075 16122 + 17076 17075 16131 + 16131 17080 17076 + 17076 17080 17081 + 17081 17077 17076 + 17082 17077 17081 + 17077 17082 17078 + 17078 17082 17083 + 17083 17084 17078 + 17079 17078 17084 + 17080 16131 17085 + 17085 17086 17080 + 17081 17080 17086 + 17086 17087 17081 + 17088 17081 17087 + 17081 17088 17082 + 17082 17088 17089 + 17089 17083 17082 + 16130 17085 16131 + 17090 17085 16130 + 17086 17085 17090 + 17090 17091 17086 + 17086 17091 17092 + 17092 17087 17086 + 17093 17087 17092 + 17087 17093 17088 + 17088 17093 17094 + 17094 17089 17088 + 16130 17095 17090 + 17096 17090 17095 + 17091 17090 17096 + 17096 17097 17091 + 17091 17097 17098 + 17098 17092 17091 + 17099 17092 17098 + 17092 17099 17093 + 16129 17095 16130 + 17095 16129 16136 + 16136 17100 17095 + 17095 17100 17096 + 17101 17096 17100 + 17096 17101 17102 + 17102 17097 17096 + 17097 17102 17103 + 17103 17098 17097 + 17104 17100 16136 + 17100 17104 17101 + 17105 17101 17104 + 17102 17101 17105 + 17105 17106 17102 + 17102 17106 17107 + 17107 17103 17102 + 17108 17103 17107 + 17098 17103 17108 + 16136 16141 17104 + 17104 16141 17109 + 17109 17110 17104 + 17104 17110 17105 + 17111 17105 17110 + 17105 17111 17112 + 17112 17106 17105 + 17106 17112 17113 + 17113 17107 17106 + 17109 16141 16140 + 16140 17114 17109 + 17115 17109 17114 + 17109 17115 17116 + 17116 17110 17109 + 17110 17116 17111 + 17117 17111 17116 + 17112 17111 17117 + 16146 17114 16140 + 17118 17114 16146 + 17114 17118 17115 + 17119 17115 17118 + 17116 17115 17119 + 17119 17120 17116 + 17116 17120 17117 + 16146 16151 17118 + 17118 16151 17121 + 17121 17122 17118 + 17118 17122 17119 + 17123 17119 17122 + 17119 17123 17124 + 17124 17120 17119 + 17120 17124 17125 + 17125 17117 17120 + 17121 16151 16150 + 16150 17126 17121 + 17127 17121 17126 + 17121 17127 17128 + 17128 17122 17121 + 17122 17128 17123 + 17129 17123 17128 + 17124 17123 17129 + 16155 17126 16150 + 17130 17126 16155 + 17126 17130 17127 + 17131 17127 17130 + 17128 17127 17131 + 17131 17132 17128 + 17128 17132 17129 + 16155 17133 17130 + 17130 17133 17134 + 17134 17135 17130 + 17130 17135 17131 + 17136 17131 17135 + 17131 17136 17137 + 17137 17132 17131 + 17133 16155 16159 + 16159 16164 17133 + 17134 17133 16164 + 16164 16181 17134 + 16190 17134 16181 + 17134 16190 17138 + 17138 17135 17134 + 17135 17138 17136 + 17136 17138 17139 + 17139 17140 17136 + 17137 17136 17140 + 17138 16190 16195 + 16195 17139 17138 + 16199 17139 16195 + 17139 16199 17141 + 17141 17140 17139 + 17140 17141 17142 + 17140 17142 17137 + 17137 17142 16219 + 16219 17143 17137 + 17132 17137 17143 + 17143 17129 17132 + 17141 16199 16203 + 16203 16220 17141 + 17142 17141 16220 + 16220 16219 17142 + 16224 17143 16219 + 17129 17143 16224 + 16224 17144 17129 + 17129 17144 17124 + 17124 17144 16232 + 16232 17125 17124 + 17145 17125 16232 + 17117 17125 17145 + 17144 16224 16227 + 16227 16232 17144 + 16232 16231 17145 + 17145 16231 16237 + 16237 17146 17145 + 17147 17145 17146 + 17145 17147 17117 + 17117 17147 17112 + 17112 17147 17148 + 17148 17113 17112 + 16242 17146 16237 + 17148 17146 16242 + 17146 17148 17147 + 16242 17149 17148 + 17148 17149 17150 + 17150 17113 17148 + 17107 17113 17150 + 17150 17151 17107 + 17107 17151 17108 + 17149 16242 17152 + 17152 17153 17149 + 17150 17149 17153 + 17153 17154 17150 + 17151 17150 17154 + 17154 17155 17151 + 17108 17151 17155 + 16241 17152 16242 + 17156 17152 16241 + 17153 17152 17156 + 17156 17157 17153 + 17153 17157 17158 + 17158 17154 17153 + 17155 17154 17158 + 16241 16247 17156 + 17156 16247 16252 + 16252 17159 17156 + 17157 17156 17159 + 17159 17160 17157 + 17158 17157 17160 + 17160 17161 17158 + 17162 17158 17161 + 17158 17162 17155 + 17163 17159 16252 + 17160 17159 17163 + 17163 17164 17160 + 17160 17164 17165 + 17165 17161 17160 + 17166 17161 17165 + 17161 17166 17162 + 17167 17162 17166 + 17155 17162 17167 + 16252 17168 17163 + 17163 17168 17169 + 17169 17170 17163 + 17164 17163 17170 + 17170 17171 17164 + 17165 17164 17171 + 16251 17168 16252 + 17168 16251 17172 + 17172 17169 17168 + 17169 17172 17173 + 17173 17174 17169 + 17169 17174 17175 + 17175 17170 17169 + 17171 17170 17175 + 16257 17172 16251 + 17173 17172 16257 + 16257 17176 17173 + 17173 17176 17177 + 17177 17178 17173 + 17174 17173 17178 + 17178 17179 17174 + 17175 17174 17179 + 17180 17176 16257 + 17176 17180 17181 + 17181 17177 17176 + 17177 17181 17182 + 17182 17183 17177 + 17177 17183 17184 + 17184 17178 17177 + 17179 17178 17184 + 16257 16256 17180 + 17180 16256 16255 + 16255 17185 17180 + 17180 17185 17186 + 17186 17181 17180 + 17182 17181 17186 + 17186 17187 17182 + 17188 17182 17187 + 17183 17182 17188 + 17188 17189 17183 + 17184 17183 17189 + 17185 16255 16254 + 16254 17190 17185 + 17185 17190 17191 + 17191 17186 17185 + 17191 17187 17186 + 17187 17191 17192 + 17192 17193 17187 + 17187 17193 17188 + 17194 17188 17193 + 17189 17188 17194 + 17190 16254 16267 + 16267 16272 17190 + 17191 17190 16272 + 16272 17195 17191 + 17195 17192 17191 + 17196 17192 17195 + 17192 17196 17197 + 17197 17193 17192 + 17193 17197 17194 + 17198 17194 17197 + 17199 17194 17198 + 17194 17199 17189 + 16271 17195 16272 + 17195 16271 17200 + 17195 17200 17196 + 17196 17200 17201 + 17201 17202 17196 + 17197 17196 17202 + 17202 17203 17197 + 17197 17203 17198 + 17200 16271 16277 + 16277 17201 17200 + 17204 17201 16277 + 17201 17204 17205 + 17205 17202 17201 + 17202 17205 17206 + 17206 17203 17202 + 17203 17206 17207 + 17207 17198 17203 + 17208 17198 17207 + 17198 17208 17199 + 16277 16281 17204 + 17204 16281 17209 + 17209 17210 17204 + 17205 17204 17210 + 17210 17211 17205 + 17206 17205 17211 + 17211 17212 17206 + 17207 17206 17212 + 16285 17209 16281 + 16290 17209 16285 + 17209 16290 17213 + 17213 17210 17209 + 17210 17213 17214 + 17214 17211 17210 + 17211 17214 17215 + 17215 17212 17211 + 17212 17215 17216 + 17216 17217 17212 + 17212 17217 17207 + 17213 16290 17218 + 17218 17219 17213 + 17214 17213 17219 + 17219 17220 17214 + 17215 17214 17220 + 17220 17221 17215 + 17216 17215 17221 + 16289 17218 16290 + 17222 17218 16289 + 17218 17222 17223 + 17223 17219 17218 + 17219 17223 17224 + 17224 17220 17219 + 17220 17224 17225 + 17225 17221 17220 + 16289 16295 17222 + 17222 16295 17226 + 17226 17227 17222 + 17223 17222 17227 + 17227 17228 17223 + 17224 17223 17228 + 17228 17229 17224 + 17225 17224 17229 + 17230 17226 16295 + 17231 17226 17230 + 17226 17231 17232 + 17232 17227 17226 + 17227 17232 17233 + 17233 17228 17227 + 17228 17233 17234 + 17234 17229 17228 + 16295 16294 17230 + 16300 17230 16294 + 17235 17230 16300 + 17230 17235 17231 + 17231 17235 17236 + 17236 17237 17231 + 17232 17231 17237 + 17237 17238 17232 + 17233 17232 17238 + 17238 17239 17233 + 17234 17233 17239 + 16300 17240 17235 + 17235 17240 17241 + 17241 17236 17235 + 17242 17236 17241 + 17236 17242 17243 + 17243 17237 17236 + 17237 17243 17244 + 17244 17238 17237 + 17240 16300 16299 + 16299 16305 17240 + 17240 16305 17245 + 17245 17241 17240 + 17246 17241 17245 + 17241 17246 17242 + 17242 17246 17247 + 17247 17248 17242 + 17243 17242 17248 + 17248 17249 17243 + 17244 17243 17249 + 16310 17245 16305 + 17250 17245 16310 + 17245 17250 17246 + 17246 17250 17251 + 17251 17247 17246 + 17252 17247 17251 + 17247 17252 17253 + 17253 17248 17247 + 17248 17253 17254 + 17254 17249 17248 + 16310 16315 17250 + 17250 16315 17255 + 17255 17251 17250 + 17256 17251 17255 + 17251 17256 17252 + 17252 17256 17257 + 17257 17258 17252 + 17253 17252 17258 + 17258 17259 17253 + 17254 17253 17259 + 17260 17255 16315 + 17261 17255 17260 + 17255 17261 17256 + 17256 17261 17262 + 17262 17257 17256 + 17263 17257 17262 + 17257 17263 17258 + 17258 17263 17264 + 17264 17259 17258 + 16315 16314 17260 + 17265 17260 16314 + 17266 17260 17265 + 17260 17266 17261 + 17261 17266 17267 + 17267 17262 17261 + 17262 17267 17268 + 17268 17269 17262 + 17262 17269 17263 + 16314 16319 17265 + 17270 17265 16319 + 17271 17265 17270 + 17265 17271 17266 + 17266 17271 17272 + 17272 17267 17266 + 17268 17267 17272 + 16319 16323 17270 + 17273 17270 16323 + 17274 17270 17273 + 17270 17274 17271 + 17271 17274 17275 + 17275 17272 17271 + 17275 17276 17272 + 17272 17276 17268 + 16323 16327 17273 + 17277 17273 16327 + 17278 17273 17277 + 17273 17278 17274 + 17274 17278 17279 + 17279 17275 17274 + 17276 17275 17279 + 17279 17280 17276 + 17276 17280 17281 + 17268 17276 17281 + 16327 16331 17277 + 17282 17277 16331 + 17283 17277 17282 + 17277 17283 17278 + 17278 17283 17284 + 17284 17279 17278 + 17279 17284 17285 + 17285 17280 17279 + 17280 17285 17286 + 17286 17281 17280 + 16331 16336 17282 + 17287 17282 16336 + 17288 17282 17287 + 17282 17288 17283 + 17283 17288 17289 + 17289 17284 17283 + 17285 17284 17289 + 17289 17290 17285 + 17285 17290 17291 + 17291 17286 17285 + 16336 16341 17287 + 17292 17287 16341 + 17293 17287 17292 + 17287 17293 17288 + 17288 17293 17294 + 17294 17289 17288 + 17294 17290 17289 + 17290 17294 17295 + 17295 17296 17290 + 17290 17296 17291 + 16341 16346 17292 + 17297 17292 16346 + 17298 17292 17297 + 17292 17298 17293 + 17293 17298 17295 + 17295 17294 17293 + 16346 16351 17297 + 16361 17297 16351 + 17299 17297 16361 + 17297 17299 17298 + 17298 17299 17300 + 17300 17295 17298 + 17295 17300 17301 + 17301 17296 17295 + 17296 17301 17302 + 17302 17291 17296 + 16361 16366 17299 + 17299 16366 17303 + 17303 17300 17299 + 17301 17300 17303 + 17303 17304 17301 + 17301 17304 17305 + 17305 17302 17301 + 17306 17302 17305 + 17291 17302 17306 + 16371 17303 16366 + 17303 16371 16379 + 16379 17304 17303 + 17304 16379 17307 + 17307 17305 17304 + 17305 17307 17308 + 17308 17309 17305 + 17305 17309 17306 + 17310 17307 16379 + 17308 17307 17310 + 17310 17311 17308 + 17308 17311 17312 + 17312 17313 17308 + 17309 17308 17313 + 17313 17314 17309 + 17306 17309 17314 + 16379 16378 17310 + 17315 17310 16378 + 17310 17315 17316 + 17316 17311 17310 + 17311 17316 17317 + 17317 17312 17311 + 16378 16377 17315 + 16388 17315 16377 + 17316 17315 16388 + 16388 16393 17316 + 17316 16393 17318 + 17318 17317 17316 + 17319 17317 17318 + 17312 17317 17319 + 17319 17320 17312 + 17312 17320 17321 + 17321 17313 17312 + 17313 17321 17314 + 16393 16392 17318 + 16401 17318 16392 + 17318 16401 17322 + 17322 17323 17318 + 17318 17323 17319 + 17324 17319 17323 + 17320 17319 17324 + 17322 16401 16400 + 16400 17325 17322 + 17326 17322 17325 + 17323 17322 17326 + 17326 17327 17323 + 17323 17327 17324 + 17328 17324 17327 + 17324 17328 17329 + 17324 17329 17320 + 17330 17325 16400 + 17325 17330 17331 + 17331 17332 17325 + 17325 17332 17326 + 17333 17326 17332 + 17327 17326 17333 + 17333 17334 17327 + 17327 17334 17328 + 16400 17335 17330 + 17330 17335 17336 + 17336 17337 17330 + 17330 17337 17338 + 17331 17330 17338 + 17335 16400 16405 + 16405 16410 17335 + 17336 17335 16410 + 16410 16418 17336 + 17339 17336 16418 + 17339 17337 17336 + 17337 17339 17340 + 17340 17338 17337 + 16418 16417 17339 + 17340 17339 16417 + 16417 17341 17340 + 17342 17340 17341 + 17340 17342 17343 + 17343 17338 17340 + 16421 17341 16417 + 17344 17341 16421 + 17341 17344 17342 + 17345 17342 17344 + 17343 17342 17345 + 17345 17346 17343 + 17347 17343 17346 + 17338 17343 17347 + 16421 16431 17344 + 17344 16431 17348 + 17348 17349 17344 + 17344 17349 17345 + 17349 17350 17345 + 17351 17345 17350 + 17345 17351 17352 + 17352 17346 17345 + 17348 16431 16430 + 16430 17353 17348 + 17354 17348 17353 + 17354 17349 17348 + 17349 17354 17355 + 17355 17350 17349 + 17356 17350 17355 + 17350 17356 17351 + 17357 17351 17356 + 17352 17351 17357 + 16435 17353 16430 + 16444 17353 16435 + 17353 16444 17354 + 17355 17354 16444 + 16444 17358 17355 + 17358 17359 17355 + 17360 17355 17359 + 17355 17360 17356 + 17356 17360 17361 + 17361 17362 17356 + 17356 17362 17357 + 16443 17358 16444 + 16443 16449 17358 + 17358 16449 16615 + 16615 17359 17358 + 16619 17359 16615 + 17359 16619 17360 + 17361 17360 16619 + 16619 16624 17361 + 16629 17361 16624 + 17361 16629 17363 + 17363 17362 17361 + 17362 17363 17364 + 17364 17357 17362 + 17357 17364 17365 + 17365 17366 17357 + 17357 17366 17352 + 17367 17352 17366 + 17346 17352 17367 + 17363 16629 16628 + 16628 17368 17363 + 17364 17363 17368 + 17368 17369 17364 + 17369 17370 17364 + 17365 17364 17370 + 16634 17368 16628 + 17368 16634 16633 + 16633 17369 17368 + 16641 17369 16633 + 17369 16641 16650 + 16650 17370 17369 + 17370 16650 17371 + 17371 17372 17370 + 17370 17372 17365 + 17365 17372 17373 + 17373 17374 17365 + 17366 17365 17374 + 17374 17375 17366 + 17366 17375 17367 + 17371 16650 17376 + 17376 17377 17371 + 17371 17377 17378 + 17378 17379 17371 + 17372 17371 17379 + 17379 17373 17372 + 16654 17376 16650 + 17380 17376 16654 + 17376 17380 17381 + 17381 17377 17376 + 17377 17381 17382 + 17382 17378 17377 + 17382 17383 17378 + 17378 17383 17384 + 17384 17379 17378 + 17379 17384 17373 + 16654 16658 17380 + 17385 17380 16658 + 17381 17380 17385 + 17385 17386 17381 + 17382 17381 17386 + 17386 17387 17382 + 17383 17382 17387 + 17387 17388 17383 + 17383 17388 17389 + 17384 17383 17389 + 16658 16665 17385 + 16665 17390 17385 + 17391 17385 17390 + 17385 17391 17392 + 17392 17386 17385 + 17386 17392 17393 + 17393 17387 17386 + 17387 17393 17394 + 17394 17388 17387 + 16669 17390 16665 + 17395 17390 16669 + 17390 17395 17391 + 17391 17395 17396 + 17396 17397 17391 + 17392 17391 17397 + 17397 17398 17392 + 17392 17398 17399 + 17399 17393 17392 + 17394 17393 17399 + 16669 16674 17395 + 17395 16674 17400 + 17400 17396 17395 + 17401 17396 17400 + 17396 17401 17402 + 17402 17397 17396 + 17397 17402 17403 + 17403 17398 17397 + 17398 17403 17404 + 17404 17399 17398 + 16678 17400 16674 + 17405 17400 16678 + 17400 17405 17401 + 17401 17405 17406 + 17406 17407 17401 + 17402 17401 17407 + 17407 16773 17402 + 16773 16772 17402 + 17403 17402 16772 + 16678 17408 17405 + 17405 17408 17409 + 17409 17410 17405 + 17410 17406 17405 + 17411 17406 17410 + 17411 17407 17406 + 17407 17411 17412 + 17412 16773 17407 + 16764 16773 17412 + 17408 16678 16677 + 16677 17413 17408 + 17408 17413 17414 + 17414 17409 17408 + 17409 17414 17415 + 17409 17415 17416 + 17416 17410 17409 + 17417 17410 17416 + 17410 17417 17411 + 17413 16677 16682 + 16682 17418 17413 + 17414 17413 17418 + 17418 17419 17414 + 17415 17414 17419 + 17419 17420 17415 + 17416 17415 17420 + 17420 17421 17416 + 17422 17416 17421 + 17416 17422 17417 + 16686 17418 16682 + 17418 16686 17423 + 17423 17419 17418 + 17419 17423 17424 + 17424 17420 17419 + 17420 17424 17425 + 17425 17421 17420 + 17421 17425 16736 + 16736 16741 17421 + 17421 16741 17422 + 16690 17423 16686 + 17424 17423 16690 + 16690 17426 17424 + 17424 17426 16726 + 16726 17425 17424 + 16736 17425 16726 + 16695 17426 16690 + 17426 16695 16717 + 16717 16726 17426 + 17412 16760 16764 + 16760 17412 17427 + 17427 16751 16760 + 16751 17427 17428 + 17428 16746 16751 + 16746 17428 16740 + 16741 16740 17428 + 17428 17422 16741 + 17417 17422 17428 + 17427 17412 17411 + 17411 17417 17427 + 17428 17427 17417 + 16772 17429 17403 + 16771 17429 16772 + 17429 16771 17430 + 17430 17431 17429 + 17403 17429 17431 + 17431 17404 17403 + 17432 17404 17431 + 17404 17432 17399 + 17399 17432 17394 + 17433 17430 16771 + 17434 17430 17433 + 17431 17430 17434 + 17434 17435 17431 + 17431 17435 17432 + 17432 17435 17436 + 17394 17432 17436 + 17436 17437 17394 + 17388 17394 17437 + 16779 17433 16771 + 17438 17433 16779 + 17438 17439 17433 + 17433 17439 17434 + 17434 17439 17440 + 17440 17441 17434 + 17435 17434 17441 + 17441 17436 17435 + 16779 17442 17438 + 17438 17442 17443 + 17443 17444 17438 + 17439 17438 17444 + 17444 17440 17439 + 16783 17442 16779 + 17442 16783 17445 + 17445 17443 17442 + 17443 17445 17446 + 17443 17446 17447 + 17447 17444 17443 + 17440 17444 17447 + 17447 17448 17440 + 17440 17448 17449 + 17449 17441 17440 + 17436 17441 17449 + 16788 17445 16783 + 17446 17445 16788 + 16788 17450 17446 + 17446 17450 17451 + 17451 17447 17446 + 17448 17447 17451 + 17451 17452 17448 + 17448 17452 17453 + 17449 17448 17453 + 17454 17449 17453 + 17436 17449 17454 + 17454 17437 17436 + 16793 17450 16788 + 17450 16793 16798 + 16798 17455 17450 + 17450 17455 17451 + 17456 17451 17455 + 17451 17456 17452 + 17452 17456 17457 + 17457 17453 17452 + 16798 17458 17455 + 17455 17458 17456 + 17457 17456 17458 + 17458 16798 16797 + 16797 17459 17458 + 17458 17459 17457 + 16796 17459 16797 + 17459 16796 16811 + 16811 17460 17459 + 17459 17460 17457 + 16810 17460 16811 + 17460 16810 16816 + 16816 16821 17460 + 17460 16821 17457 + 16821 17461 17457 + 17461 17462 17457 + 17462 17463 17457 + 17463 17464 17457 + 17464 17465 17457 + 17465 17466 17457 + 17466 17467 17457 + 17467 17468 17457 + 17468 17469 17457 + 17469 17470 17457 + 17471 17457 17470 + 17453 17457 17471 + 16820 17461 16821 + 16826 17461 16820 + 17461 16826 17472 + 17472 17462 17461 + 17473 17462 17472 + 17462 17473 17474 + 17474 17463 17462 + 17475 17463 17474 + 17463 17475 17476 + 17476 17464 17463 + 16830 17472 16826 + 17473 17472 16830 + 16830 16834 17473 + 17473 16834 17477 + 17477 17478 17473 + 17478 17479 17473 + 17479 17474 17473 + 17475 17474 17479 + 17479 17480 17475 + 17476 17475 17480 + 16838 17477 16834 + 16838 17481 17477 + 17477 17481 17482 + 17482 17478 17477 + 17482 17483 17478 + 17478 17483 17484 + 17484 17479 17478 + 17480 17479 17484 + 17481 16838 16842 + 16842 16847 17481 + 17482 17481 16847 + 16847 17485 17482 + 17485 17486 17482 + 17483 17482 17486 + 17486 17487 17483 + 17483 17487 17488 + 17488 17489 17483 + 17489 17484 17483 + 17490 17485 16847 + 17491 17485 17490 + 17485 17491 17492 + 17492 17486 17485 + 17487 17486 17492 + 17492 17493 17487 + 17487 17493 17494 + 17494 17488 17487 + 16847 16846 17490 + 17490 16846 16852 + 16852 17495 17490 + 17491 17490 17495 + 17495 17496 17491 + 17492 17491 17496 + 17496 17497 17492 + 17493 17492 17497 + 17497 17498 17493 + 17494 17493 17498 + 17499 17495 16852 + 17496 17495 17499 + 17499 17500 17496 + 17496 17500 17501 + 17501 17497 17496 + 17498 17497 17501 + 16852 16851 17499 + 17502 17499 16851 + 17500 17499 17502 + 17502 17503 17500 + 17500 17503 17504 + 17504 17501 17500 + 17505 17501 17504 + 17501 17505 17498 + 16851 16856 17502 + 17506 17502 16856 + 17503 17502 17506 + 17506 17507 17503 + 17503 17507 17508 + 17508 17504 17503 + 17509 17504 17508 + 17504 17509 17505 + 16856 16860 17506 + 17510 17506 16860 + 17507 17506 17510 + 17510 17511 17507 + 17507 17511 17512 + 17512 17513 17507 + 17513 17508 17507 + 17514 17508 17513 + 17508 17514 17509 + 16860 16865 17510 + 17515 17510 16865 + 17511 17510 17515 + 17515 17516 17511 + 17511 17516 17517 + 17517 17512 17511 + 17518 17512 17517 + 17512 17518 17519 + 17519 17513 17512 + 16865 16870 17515 + 17520 17515 16870 + 17516 17515 17520 + 17520 17521 17516 + 17516 17521 17522 + 17522 17517 17516 + 17518 17517 17522 + 17522 17523 17518 + 17518 17523 17524 + 17524 17519 17518 + 16870 16879 17520 + 16884 17520 16879 + 17520 16884 17525 + 17525 17521 17520 + 17521 17525 17526 + 17526 17522 17521 + 17522 17526 17527 + 17527 17523 17522 + 17523 17527 17528 + 17528 17524 17523 + 17525 16884 16883 + 16883 17529 17525 + 17525 17529 17530 + 17530 17526 17525 + 17527 17526 17530 + 17530 17531 17527 + 17527 17531 17532 + 17532 17528 17527 + 17533 17528 17532 + 17524 17528 17533 + 16893 17529 16883 + 17529 16893 17534 + 17534 17530 17529 + 17530 17534 17535 + 17535 17531 17530 + 17531 17535 17536 + 17536 17532 17531 + 17532 17536 17537 + 17537 17538 17532 + 17532 17538 17533 + 16897 17534 16893 + 17535 17534 16897 + 16897 17539 17535 + 17535 17539 17540 + 17540 17536 17535 + 17537 17536 17540 + 17540 17541 17537 + 17537 17541 17542 + 17542 17543 17537 + 17538 17537 17543 + 16901 17539 16897 + 17539 16901 17544 + 17544 17540 17539 + 17540 17544 17545 + 17545 17541 17540 + 17541 17545 17546 + 17546 17542 17541 + 16905 17544 16901 + 17545 17544 16905 + 16905 16914 17545 + 17545 16914 16919 + 16919 17546 17545 + 17547 17546 16919 + 17542 17546 17547 + 17547 17548 17542 + 17542 17548 17549 + 17549 17543 17542 + 17550 17543 17549 + 17543 17550 17538 + 17533 17538 17550 + 16919 17551 17547 + 17547 17551 17552 + 17552 17553 17547 + 17548 17547 17553 + 17553 17554 17548 + 17549 17548 17554 + 16918 17551 16919 + 17551 16918 17555 + 17555 17552 17551 + 17552 17555 17556 + 17556 17557 17552 + 17552 17557 17558 + 17558 17553 17552 + 17554 17553 17558 + 16924 17555 16918 + 17556 17555 16924 + 16924 17559 17556 + 17556 17559 17560 + 17560 17561 17556 + 17557 17556 17561 + 17561 17562 17557 + 17558 17557 17562 + 16929 17559 16924 + 17559 16929 17563 + 17563 17560 17559 + 17560 17563 17564 + 17564 17565 17560 + 17560 17565 17566 + 17566 17561 17560 + 17562 17561 17566 + 17567 17563 16929 + 17564 17563 17567 + 17567 17568 17564 + 17564 17568 17569 + 17569 17570 17564 + 17565 17564 17570 + 17570 17571 17565 + 17566 17565 17571 + 16929 16928 17567 + 16934 17567 16928 + 17568 17567 16934 + 16934 16939 17568 + 17568 16939 17572 + 17572 17569 17568 + 17573 17569 17572 + 17569 17573 17574 + 17574 17570 17569 + 17571 17570 17574 + 17575 17572 16939 + 17576 17572 17575 + 17572 17576 17573 + 17573 17576 17577 + 17577 17578 17573 + 17574 17573 17578 + 16939 16938 17575 + 17579 17575 16938 + 17580 17575 17579 + 17575 17580 17576 + 17576 17580 17581 + 17581 17577 17576 + 17582 17577 17581 + 17578 17577 17582 + 16938 16943 17579 + 17583 17579 16943 + 17584 17579 17583 + 17579 17584 17580 + 17580 17584 17585 + 17585 17581 17580 + 17586 17581 17585 + 17581 17586 17582 + 16943 16947 17583 + 17587 17583 16947 + 17588 17583 17587 + 17583 17588 17584 + 17584 17588 17589 + 17589 17585 17584 + 17590 17585 17589 + 17585 17590 17586 + 16947 16951 17587 + 17591 17587 16951 + 17592 17587 17591 + 17587 17592 17588 + 17588 17592 17593 + 17593 17589 17588 + 17594 17589 17593 + 17589 17594 17590 + 16951 16955 17591 + 17595 17591 16955 + 17596 17591 17595 + 17591 17596 17592 + 17592 17596 17597 + 17597 17593 17592 + 17598 17593 17597 + 17593 17598 17594 + 16955 16960 17595 + 17599 17595 16960 + 17600 17595 17599 + 17595 17600 17596 + 17596 17600 17601 + 17601 17597 17596 + 17602 17597 17601 + 17597 17602 17598 + 16960 16964 17599 + 17603 17599 16964 + 17604 17599 17603 + 17599 17604 17600 + 17600 17604 17605 + 17605 17601 17600 + 17606 17601 17605 + 17601 17606 17602 + 16964 16968 17603 + 16977 17603 16968 + 17607 17603 16977 + 17603 17607 17604 + 17604 17607 17608 + 17608 17605 17604 + 17609 17605 17608 + 17605 17609 17606 + 17606 17609 17610 + 17610 17611 17606 + 17602 17606 17611 + 16977 16982 17607 + 17607 16982 17612 + 17612 17608 17607 + 17613 17608 17612 + 17608 17613 17609 + 17609 17613 17614 + 17614 17610 17609 + 17615 17610 17614 + 17610 17615 17616 + 17616 17611 17610 + 16987 17612 16982 + 17617 17612 16987 + 17612 17617 17613 + 17613 17617 17618 + 17618 17614 17613 + 17619 17614 17618 + 17614 17619 17615 + 17615 17619 17620 + 17620 17621 17615 + 17616 17615 17621 + 16987 16992 17617 + 17617 16992 17622 + 17622 17618 17617 + 17623 17618 17622 + 17618 17623 17619 + 17619 17623 17624 + 17624 17620 17619 + 17625 17620 17624 + 17620 17625 17626 + 17626 17621 17620 + 16997 17622 16992 + 17627 17622 16997 + 17622 17627 17623 + 17623 17627 17628 + 17628 17624 17623 + 17629 17624 17628 + 17624 17629 17625 + 17630 17625 17629 + 17626 17625 17630 + 16997 17002 17627 + 17627 17002 17631 + 17631 17628 17627 + 17632 17628 17631 + 17628 17632 17629 + 17629 17632 17633 + 17633 17634 17629 + 17634 17630 17629 + 17007 17631 17002 + 17635 17631 17007 + 17631 17635 17632 + 17632 17635 17636 + 17636 17633 17632 + 17637 17633 17636 + 17633 17637 17638 + 17638 17634 17633 + 17634 17638 17639 + 17639 17630 17634 + 17007 17012 17635 + 17635 17012 17640 + 17640 17636 17635 + 17641 17636 17640 + 17636 17641 17637 + 17642 17637 17641 + 17638 17637 17642 + 17642 17643 17638 + 17638 17643 17644 + 17644 17639 17638 + 17017 17640 17012 + 17645 17640 17017 + 17640 17645 17641 + 17641 17645 17646 + 17646 17647 17641 + 17641 17647 17642 + 17648 17642 17647 + 17642 17648 17649 + 17649 17643 17642 + 17017 17022 17645 + 17646 17645 17022 + 17022 17650 17646 + 17651 17646 17650 + 17646 17651 17652 + 17652 17647 17646 + 17647 17652 17648 + 17653 17648 17652 + 17649 17648 17653 + 17026 17650 17022 + 17040 17650 17026 + 17650 17040 17651 + 17654 17651 17040 + 17652 17651 17654 + 17654 17655 17652 + 17652 17655 17653 + 17656 17653 17655 + 17653 17656 17657 + 17657 17658 17653 + 17653 17658 17649 + 17040 17659 17654 + 17660 17654 17659 + 17654 17660 17661 + 17661 17655 17654 + 17655 17661 17656 + 17662 17656 17661 + 17657 17656 17662 + 17039 17659 17040 + 17663 17659 17039 + 17659 17663 17660 + 17664 17660 17663 + 17661 17660 17664 + 17664 17665 17661 + 17661 17665 17662 + 17039 17045 17663 + 17663 17045 17050 + 17050 17666 17663 + 17663 17666 17664 + 17667 17664 17666 + 17664 17667 17668 + 17668 17665 17664 + 17665 17668 17669 + 17669 17662 17665 + 17670 17666 17050 + 17666 17670 17667 + 17671 17667 17670 + 17668 17667 17671 + 17671 17672 17668 + 17668 17672 17673 + 17673 17669 17668 + 17674 17669 17673 + 17662 17669 17674 + 17050 17055 17670 + 17670 17055 17060 + 17060 17675 17670 + 17670 17675 17671 + 17676 17671 17675 + 17671 17676 17677 + 17677 17672 17671 + 17672 17677 17678 + 17678 17673 17672 + 17070 17675 17060 + 17675 17070 17676 + 17679 17676 17070 + 17677 17676 17679 + 17679 17680 17677 + 17677 17680 17681 + 17681 17678 17677 + 17682 17678 17681 + 17673 17678 17682 + 17682 17683 17673 + 17673 17683 17674 + 17070 17079 17679 + 17084 17679 17079 + 17679 17084 17684 + 17684 17680 17679 + 17680 17684 17685 + 17685 17681 17680 + 17681 17685 17686 + 17686 17687 17681 + 17681 17687 17682 + 17684 17084 17083 + 17083 17688 17684 + 17684 17688 17689 + 17689 17685 17684 + 17686 17685 17689 + 17689 17690 17686 + 17691 17686 17690 + 17687 17686 17691 + 17691 17692 17687 + 17682 17687 17692 + 17089 17688 17083 + 17688 17089 17094 + 17094 17689 17688 + 17689 17094 17693 + 17693 17690 17689 + 17690 17693 17694 + 17694 17695 17690 + 17690 17695 17691 + 17696 17691 17695 + 17692 17691 17696 + 17693 17094 17697 + 17697 17698 17693 + 17693 17698 17699 + 17699 17700 17693 + 17700 17694 17693 + 17701 17694 17700 + 17695 17694 17701 + 17695 17701 17696 + 17702 17697 17094 + 17703 17697 17702 + 17698 17697 17703 + 17703 17704 17698 + 17698 17704 17705 + 17705 17699 17698 + 17093 17702 17094 + 17706 17702 17093 + 17702 17706 17707 + 17702 17707 17703 + 17708 17703 17707 + 17704 17703 17708 + 17708 17709 17704 + 17704 17709 17710 + 17710 17705 17704 + 17093 17099 17706 + 17711 17706 17099 + 17707 17706 17711 + 17711 17712 17707 + 17707 17712 17708 + 17713 17708 17712 + 17708 17713 17714 + 17714 17709 17708 + 17709 17714 17715 + 17715 17710 17709 + 17099 17716 17711 + 17717 17711 17716 + 17711 17717 17167 + 17167 17712 17711 + 17712 17167 17713 + 17166 17713 17167 + 17714 17713 17166 + 17098 17716 17099 + 17108 17716 17098 + 17716 17108 17717 + 17155 17717 17108 + 17167 17717 17155 + 17166 17718 17714 + 17165 17718 17166 + 17718 17165 17719 + 17719 17720 17718 + 17714 17718 17720 + 17720 17715 17714 + 17721 17715 17720 + 17710 17715 17721 + 17721 17722 17710 + 17710 17722 17723 + 17723 17705 17710 + 17171 17719 17165 + 17724 17719 17171 + 17720 17719 17724 + 17724 17725 17720 + 17720 17725 17721 + 17721 17725 17726 + 17726 17727 17721 + 17722 17721 17727 + 17727 17728 17722 + 17723 17722 17728 + 17171 17729 17724 + 17724 17729 17730 + 17730 17731 17724 + 17725 17724 17731 + 17731 17726 17725 + 17175 17729 17171 + 17729 17175 17732 + 17732 17730 17729 + 17730 17732 17733 + 17733 17734 17730 + 17730 17734 17735 + 17735 17731 17730 + 17726 17731 17735 + 17179 17732 17175 + 17733 17732 17179 + 17179 17736 17733 + 17733 17736 17737 + 17737 17738 17733 + 17734 17733 17738 + 17738 17739 17734 + 17735 17734 17739 + 17184 17736 17179 + 17736 17184 17740 + 17740 17737 17736 + 17737 17740 17741 + 17741 17742 17737 + 17737 17742 17743 + 17743 17738 17737 + 17739 17738 17743 + 17189 17740 17184 + 17741 17740 17189 + 17189 17199 17741 + 17741 17199 17208 + 17208 17744 17741 + 17742 17741 17744 + 17744 17745 17742 + 17743 17742 17745 + 17745 17746 17743 + 17747 17743 17746 + 17743 17747 17739 + 17748 17744 17208 + 17745 17744 17748 + 17748 17749 17745 + 17745 17749 17750 + 17750 17746 17745 + 17751 17746 17750 + 17746 17751 17747 + 17752 17747 17751 + 17739 17747 17752 + 17208 17753 17748 + 17748 17753 17754 + 17754 17755 17748 + 17749 17748 17755 + 17755 17756 17749 + 17750 17749 17756 + 17207 17753 17208 + 17753 17207 17217 + 17217 17754 17753 + 17757 17754 17217 + 17754 17757 17758 + 17758 17755 17754 + 17755 17758 17759 + 17759 17756 17755 + 17756 17759 17760 + 17760 17761 17756 + 17756 17761 17750 + 17217 17216 17757 + 17757 17216 17762 + 17762 17763 17757 + 17758 17757 17763 + 17763 17764 17758 + 17759 17758 17764 + 17764 17765 17759 + 17760 17759 17765 + 17221 17762 17216 + 17766 17762 17221 + 17762 17766 17767 + 17767 17763 17762 + 17763 17767 17768 + 17768 17764 17763 + 17764 17768 17769 + 17769 17765 17764 + 17221 17225 17766 + 17766 17225 17770 + 17770 17771 17766 + 17767 17766 17771 + 17771 17772 17767 + 17768 17767 17772 + 17772 17773 17768 + 17769 17768 17773 + 17229 17770 17225 + 17774 17770 17229 + 17770 17774 17775 + 17775 17771 17770 + 17771 17775 17776 + 17776 17772 17771 + 17772 17776 17777 + 17777 17773 17772 + 17229 17234 17774 + 17774 17234 17778 + 17778 17779 17774 + 17775 17774 17779 + 17779 17780 17775 + 17776 17775 17780 + 17780 17781 17776 + 17777 17776 17781 + 17239 17778 17234 + 17782 17778 17239 + 17778 17782 17783 + 17783 17779 17778 + 17779 17783 17784 + 17784 17780 17779 + 17780 17784 17785 + 17785 17781 17780 + 17239 17786 17782 + 17782 17786 17787 + 17787 17788 17782 + 17783 17782 17788 + 17788 17789 17783 + 17784 17783 17789 + 17789 17790 17784 + 17785 17784 17790 + 17786 17239 17238 + 17238 17244 17786 + 17786 17244 17791 + 17791 17787 17786 + 17792 17787 17791 + 17787 17792 17793 + 17793 17788 17787 + 17788 17793 17794 + 17794 17789 17788 + 17789 17794 17795 + 17795 17790 17789 + 17249 17791 17244 + 17796 17791 17249 + 17791 17796 17792 + 17792 17796 17797 + 17797 17798 17792 + 17793 17792 17798 + 17798 17799 17793 + 17794 17793 17799 + 17799 17800 17794 + 17795 17794 17800 + 17249 17254 17796 + 17796 17254 17801 + 17801 17797 17796 + 17802 17797 17801 + 17798 17797 17802 + 17802 17803 17798 + 17798 17803 17804 + 17804 17799 17798 + 17800 17799 17804 + 17259 17801 17254 + 17801 17259 17264 + 17264 17805 17801 + 17801 17805 17802 + 17802 17805 17806 + 17806 17807 17802 + 17803 17802 17807 + 17807 17808 17803 + 17804 17803 17808 + 17805 17264 17809 + 17809 17806 17805 + 17806 17809 17810 + 17810 17811 17806 + 17806 17811 17812 + 17812 17807 17806 + 17808 17807 17812 + 17813 17809 17264 + 17810 17809 17813 + 17813 17814 17810 + 17810 17814 17815 + 17815 17816 17810 + 17811 17810 17816 + 17264 17263 17813 + 17263 17269 17813 + 17817 17813 17269 + 17813 17817 17818 + 17818 17814 17813 + 17814 17818 17819 + 17819 17815 17814 + 17269 17268 17817 + 17281 17817 17268 + 17818 17817 17281 + 17281 17820 17818 + 17818 17820 17821 + 17821 17819 17818 + 17822 17819 17821 + 17815 17819 17822 + 17822 17823 17815 + 17815 17823 17824 + 17824 17816 17815 + 17825 17820 17281 + 17820 17825 17826 + 17826 17821 17820 + 17821 17826 17827 + 17827 17828 17821 + 17821 17828 17822 + 17829 17822 17828 + 17823 17822 17829 + 17281 17286 17825 + 17825 17286 17291 + 17291 17830 17825 + 17825 17830 17831 + 17831 17826 17825 + 17827 17826 17831 + 17831 17832 17827 + 17833 17827 17832 + 17828 17827 17833 + 17833 17834 17828 + 17828 17834 17829 + 17306 17830 17291 + 17830 17306 17835 + 17835 17831 17830 + 17831 17835 17836 + 17836 17832 17831 + 17832 17836 17837 + 17837 17838 17832 + 17832 17838 17833 + 17839 17833 17838 + 17834 17833 17839 + 17314 17835 17306 + 17836 17835 17314 + 17314 17321 17836 + 17836 17321 17320 + 17837 17836 17320 + 17320 17329 17837 + 17840 17837 17329 + 17838 17837 17840 + 17840 17841 17838 + 17838 17841 17839 + 17842 17839 17841 + 17843 17839 17842 + 17839 17843 17834 + 17834 17843 17844 + 17844 17829 17834 + 17329 17328 17840 + 17845 17840 17328 + 17841 17840 17845 + 17845 17846 17841 + 17841 17846 17842 + 17847 17842 17846 + 17847 17848 17842 + 17842 17848 17843 + 17843 17848 17849 + 17849 17844 17843 + 17328 17334 17845 + 17334 17850 17845 + 17851 17845 17850 + 17846 17845 17851 + 17851 17852 17846 + 17846 17852 17847 + 17847 17852 17853 + 17854 17847 17853 + 17848 17847 17854 + 17854 17849 17848 + 17855 17850 17334 + 17850 17855 17856 + 17856 17857 17850 + 17850 17857 17851 + 17851 17857 17858 + 17858 17859 17851 + 17852 17851 17859 + 17859 17853 17852 + 17334 17333 17855 + 17855 17333 17860 + 17860 17861 17855 + 17856 17855 17861 + 17861 17862 17856 + 17856 17862 17471 + 17471 17863 17856 + 17857 17856 17863 + 17863 17858 17857 + 17332 17860 17333 + 17864 17860 17332 + 17860 17864 17865 + 17865 17861 17860 + 17862 17861 17865 + 17862 17865 17866 + 17866 17867 17862 + 17862 17867 17471 + 17453 17471 17867 + 17332 17331 17864 + 17864 17331 17868 + 17868 17869 17864 + 17865 17864 17869 + 17869 17866 17865 + 17870 17866 17869 + 17866 17870 17871 + 17871 17867 17866 + 17867 17871 17453 + 17868 17331 17338 + 17338 17872 17868 + 17873 17868 17872 + 17868 17873 17869 + 17869 17873 17870 + 17870 17873 17874 + 17874 17875 17870 + 17871 17870 17875 + 17875 17876 17871 + 17453 17871 17876 + 17347 17872 17338 + 17872 17347 17877 + 17877 17874 17872 + 17872 17874 17873 + 17877 17347 17878 + 17878 17879 17877 + 17880 17877 17879 + 17874 17877 17880 + 17880 17875 17874 + 17876 17875 17880 + 17876 17880 17881 + 17881 17882 17876 + 17876 17882 17453 + 17882 17454 17453 + 17346 17878 17347 + 17367 17878 17346 + 17367 17879 17878 + 17879 17367 17375 + 17375 17883 17879 + 17879 17883 17880 + 17883 17881 17880 + 17389 17881 17883 + 17882 17881 17389 + 17882 17389 17884 + 17884 17454 17882 + 17884 17437 17454 + 17437 17884 17388 + 17388 17884 17389 + 17885 17883 17375 + 17883 17885 17389 + 17389 17885 17384 + 17373 17384 17885 + 17885 17374 17373 + 17375 17374 17885 + 17470 17863 17471 + 17863 17470 17858 + 17858 17470 17469 + 17469 17859 17858 + 17859 17469 17853 + 17853 17469 17468 + 17468 17886 17853 + 17853 17886 17854 + 17887 17854 17886 + 17854 17887 17888 + 17888 17849 17854 + 17886 17468 17889 + 17886 17889 17887 + 17890 17887 17889 + 17888 17887 17890 + 17890 17891 17888 + 17892 17888 17891 + 17849 17888 17892 + 17892 17844 17849 + 17889 17468 17467 + 17467 17893 17889 + 17889 17893 17890 + 17894 17890 17893 + 17890 17894 17895 + 17895 17891 17890 + 17891 17895 17896 + 17896 17897 17891 + 17891 17897 17892 + 17893 17467 17898 + 17893 17898 17894 + 17899 17894 17898 + 17895 17894 17899 + 17899 17900 17895 + 17896 17895 17900 + 17900 17901 17896 + 17902 17896 17901 + 17897 17896 17902 + 17898 17467 17466 + 17466 17903 17898 + 17898 17903 17899 + 17904 17899 17903 + 17899 17904 17905 + 17905 17900 17899 + 17900 17905 17906 + 17906 17901 17900 + 17903 17466 17907 + 17903 17907 17904 + 17908 17904 17907 + 17905 17904 17908 + 17908 17909 17905 + 17906 17905 17909 + 17909 17910 17906 + 17911 17906 17910 + 17901 17906 17911 + 17907 17466 17465 + 17465 17912 17907 + 17907 17912 17908 + 17913 17908 17912 + 17908 17913 17914 + 17914 17909 17908 + 17909 17914 17915 + 17915 17910 17909 + 17912 17465 17916 + 17912 17916 17913 + 17917 17913 17916 + 17914 17913 17917 + 17917 17918 17914 + 17915 17914 17918 + 17918 17919 17915 + 17920 17915 17919 + 17910 17915 17920 + 17916 17465 17464 + 17464 17921 17916 + 17916 17921 17922 + 17922 17923 17916 + 17923 17917 17916 + 17924 17917 17923 + 17917 17924 17918 + 17918 17924 17925 + 17925 17919 17918 + 17921 17464 17476 + 17921 17476 17926 + 17926 17922 17921 + 17922 17926 17927 + 17927 17928 17922 + 17922 17928 17929 + 17929 17923 17922 + 17923 17929 17930 + 17923 17930 17924 + 17925 17924 17930 + 17480 17926 17476 + 17927 17926 17480 + 17480 17931 17927 + 17927 17931 17932 + 17932 17933 17927 + 17928 17927 17933 + 17933 17934 17928 + 17929 17928 17934 + 17484 17931 17480 + 17931 17484 17489 + 17489 17932 17931 + 17932 17489 17935 + 17935 17936 17932 + 17932 17936 17937 + 17937 17933 17932 + 17934 17933 17937 + 17935 17489 17488 + 17488 17938 17935 + 17935 17938 17939 + 17939 17940 17935 + 17936 17935 17940 + 17940 17941 17936 + 17936 17941 17942 + 17942 17937 17936 + 17938 17488 17494 + 17938 17494 17943 + 17943 17939 17938 + 17939 17943 17944 + 17944 17945 17939 + 17939 17945 17946 + 17946 17940 17939 + 17941 17940 17946 + 17498 17943 17494 + 17944 17943 17498 + 17498 17505 17944 + 17947 17944 17505 + 17945 17944 17947 + 17947 17948 17945 + 17945 17948 17949 + 17949 17950 17945 + 17950 17951 17945 + 17951 17946 17945 + 17952 17947 17505 + 17953 17947 17952 + 17948 17947 17953 + 17953 17954 17948 + 17948 17954 17955 + 17955 17949 17948 + 17505 17509 17952 + 17956 17952 17509 + 17957 17952 17956 + 17952 17957 17953 + 17958 17953 17957 + 17954 17953 17958 + 17509 17514 17956 + 17959 17956 17514 + 17957 17956 17959 + 17959 17960 17957 + 17957 17960 17958 + 17961 17958 17960 + 17962 17958 17961 + 17958 17962 17954 + 17514 17963 17959 + 17964 17959 17963 + 17960 17959 17964 + 17964 17965 17960 + 17960 17965 17961 + 17966 17961 17965 + 17967 17961 17966 + 17961 17967 17962 + 17513 17963 17514 + 17963 17513 17519 + 17519 17968 17963 + 17963 17968 17964 + 17969 17964 17968 + 17965 17964 17969 + 17969 17970 17965 + 17965 17970 17966 + 17968 17519 17524 + 17524 17971 17968 + 17968 17971 17969 + 17972 17969 17971 + 17969 17972 17973 + 17973 17970 17969 + 17970 17973 17974 + 17974 17966 17970 + 17533 17971 17524 + 17971 17533 17972 + 17550 17972 17533 + 17973 17972 17550 + 17550 17975 17973 + 17973 17975 17976 + 17976 17974 17973 + 17977 17974 17976 + 17966 17974 17977 + 17977 17978 17966 + 17966 17978 17967 + 17549 17975 17550 + 17975 17549 17979 + 17979 17976 17975 + 17976 17979 17980 + 17980 17981 17976 + 17976 17981 17977 + 17977 17981 17982 + 17982 17983 17977 + 17978 17977 17983 + 17554 17979 17549 + 17980 17979 17554 + 17554 17984 17980 + 17980 17984 17985 + 17985 17986 17980 + 17981 17980 17986 + 17986 17982 17981 + 17558 17984 17554 + 17984 17558 17987 + 17987 17985 17984 + 17985 17987 17988 + 17988 17989 17985 + 17985 17989 17990 + 17990 17986 17985 + 17982 17986 17990 + 17562 17987 17558 + 17988 17987 17562 + 17562 17991 17988 + 17988 17991 17992 + 17992 17993 17988 + 17989 17988 17993 + 17993 17994 17989 + 17990 17989 17994 + 17566 17991 17562 + 17991 17566 17995 + 17995 17992 17991 + 17992 17995 17996 + 17996 17997 17992 + 17992 17997 17998 + 17998 17993 17992 + 17994 17993 17998 + 17571 17995 17566 + 17996 17995 17571 + 17571 17999 17996 + 17996 17999 18000 + 18000 18001 17996 + 17997 17996 18001 + 18001 18002 17997 + 17998 17997 18002 + 17574 17999 17571 + 17999 17574 18003 + 18003 18000 17999 + 18000 18003 18004 + 18004 18005 18000 + 18000 18005 18006 + 18006 18001 18000 + 18002 18001 18006 + 17578 18003 17574 + 18004 18003 17578 + 17578 18007 18004 + 18004 18007 18008 + 18008 18009 18004 + 18005 18004 18009 + 18009 18010 18005 + 18006 18005 18010 + 17582 18007 17578 + 18007 17582 18011 + 18011 18008 18007 + 18008 18011 18012 + 18012 18013 18008 + 18008 18013 18014 + 18014 18009 18008 + 18010 18009 18014 + 18015 18011 17582 + 18012 18011 18015 + 18015 18016 18012 + 18012 18016 18017 + 18017 18018 18012 + 18013 18012 18018 + 17582 17586 18015 + 18019 18015 17586 + 18016 18015 18019 + 18019 18020 18016 + 18016 18020 18021 + 18021 18017 18016 + 18022 18017 18021 + 18017 18022 18023 + 18023 18018 18017 + 17586 17590 18019 + 18024 18019 17590 + 18020 18019 18024 + 18024 18025 18020 + 18020 18025 18026 + 18026 18021 18020 + 18027 18021 18026 + 18021 18027 18022 + 17590 17594 18024 + 18028 18024 17594 + 18025 18024 18028 + 18028 18029 18025 + 18025 18029 18030 + 18030 18026 18025 + 18031 18026 18030 + 18026 18031 18027 + 18032 18027 18031 + 18022 18027 18032 + 17594 17598 18028 + 18033 18028 17598 + 18029 18028 18033 + 18033 18034 18029 + 18029 18034 18035 + 18030 18029 18035 + 17598 17602 18033 + 17611 18033 17602 + 18034 18033 17611 + 17611 17616 18034 + 18034 17616 18036 + 18036 118 18034 + 18037 118 18036 + 118 18037 18038 + 18037 18039 18038 + 257 18039 18037 + 17621 18036 17616 + 18040 18036 17621 + 18036 18040 18037 + 18037 18040 257 + 257 18040 17626 + 18041 257 17626 + 18042 257 18041 + 257 18042 18043 + 17621 17626 18040 + 17630 18041 17626 + 18041 17630 17639 + 18044 18041 17639 + 18041 18044 18042 + 18045 18042 18044 + 18043 18042 18045 + 18045 18046 18043 + 18043 18046 18030 + 18047 18030 18046 + 18030 18047 18031 + 18044 17639 17644 + 17644 18048 18044 + 18044 18048 18045 + 18049 18045 18048 + 18045 18049 18050 + 18050 18046 18045 + 18046 18050 18047 + 18051 18047 18050 + 18031 18047 18051 + 18051 18052 18031 + 18031 18052 18032 + 18053 18048 17644 + 18048 18053 18049 + 18054 18049 18053 + 18050 18049 18054 + 18054 18055 18050 + 18050 18055 18051 + 18056 18051 18055 + 18051 18056 18057 + 18057 18052 18051 + 17644 18058 18053 + 18053 18058 18059 + 18059 18060 18053 + 18053 18060 18054 + 18061 18054 18060 + 18054 18061 18062 + 18062 18055 18054 + 18055 18062 18056 + 18058 17644 17643 + 17643 17649 18058 + 18059 18058 17649 + 17649 17658 18059 + 18063 18059 17658 + 18059 18063 18064 + 18064 18060 18059 + 18060 18064 18061 + 18065 18061 18064 + 18062 18061 18065 + 18065 18066 18062 + 18062 18066 18067 + 18067 18056 18062 + 18057 18056 18067 + 17658 17657 18063 + 18068 18063 17657 + 18064 18063 18068 + 18068 18069 18064 + 18064 18069 18065 + 18070 18065 18069 + 18065 18070 18071 + 18071 18066 18065 + 18066 18071 18072 + 18072 18067 18066 + 17657 18073 18068 + 18074 18068 18073 + 18068 18074 18075 + 18075 18069 18068 + 18069 18075 18070 + 18076 18070 18075 + 18071 18070 18076 + 17662 18073 17657 + 17674 18073 17662 + 18073 17674 18074 + 18077 18074 17674 + 18075 18074 18077 + 18077 18078 18075 + 18075 18078 18076 + 18079 18076 18078 + 18076 18079 18080 + 18080 18081 18076 + 18076 18081 18071 + 17674 17683 18077 + 18082 18077 17683 + 18077 18082 18083 + 18083 18078 18077 + 18078 18083 18079 + 18084 18079 18083 + 18080 18079 18084 + 17683 17682 18082 + 17692 18082 17682 + 18083 18082 17692 + 17692 18085 18083 + 18083 18085 18084 + 18086 18084 18085 + 18084 18086 18087 + 18087 18088 18084 + 18084 18088 18080 + 17696 18085 17692 + 18085 17696 18086 + 18089 18086 17696 + 18087 18086 18089 + 18089 18090 18087 + 18087 18090 18091 + 18091 18092 18087 + 18088 18087 18092 + 18092 18093 18088 + 18080 18088 18093 + 17696 17701 18089 + 17700 18089 17701 + 18089 17700 18094 + 18094 18090 18089 + 18090 18094 18095 + 18095 18091 18090 + 18091 18095 18096 + 18096 18097 18091 + 18091 18097 18098 + 18098 18092 18091 + 18093 18092 18098 + 18094 17700 17699 + 17699 18099 18094 + 18095 18094 18099 + 18099 18100 18095 + 18096 18095 18100 + 18100 18101 18096 + 18102 18096 18101 + 18097 18096 18102 + 18102 18103 18097 + 18098 18097 18103 + 18099 17699 17705 + 17705 17723 18099 + 18099 17723 18104 + 18104 18100 18099 + 18101 18100 18104 + 18104 18105 18101 + 18101 18105 18106 + 18106 18107 18101 + 18101 18107 18102 + 18108 18102 18107 + 18103 18102 18108 + 17728 18104 17723 + 18105 18104 17728 + 17728 18109 18105 + 18105 18109 18110 + 18110 18106 18105 + 18111 18106 18110 + 18106 18111 18112 + 18112 18107 18106 + 18107 18112 18108 + 18113 18109 17728 + 18109 18113 18114 + 18114 18110 18109 + 18110 18114 18115 + 18115 18116 18110 + 18110 18116 18111 + 17728 17727 18113 + 18113 17727 17726 + 17726 18117 18113 + 18113 18117 18118 + 18118 18114 18113 + 18115 18114 18118 + 18118 18119 18115 + 18115 18119 18120 + 18120 18121 18115 + 18116 18115 18121 + 17735 18117 17726 + 18117 17735 18122 + 18122 18118 18117 + 18118 18122 17752 + 17752 18119 18118 + 18119 17752 18123 + 18123 18120 18119 + 17739 18122 17735 + 17752 18122 17739 + 17751 18123 17752 + 18124 18123 17751 + 18120 18123 18124 + 18124 18125 18120 + 18120 18125 18126 + 18126 18121 18120 + 18127 18121 18126 + 18121 18127 18116 + 18111 18116 18127 + 18127 18128 18111 + 18112 18111 18128 + 17751 18129 18124 + 18124 18129 18130 + 18130 18131 18124 + 18125 18124 18131 + 18131 18132 18125 + 18126 18125 18132 + 17750 18129 17751 + 18129 17750 17761 + 17761 18130 18129 + 18133 18130 17761 + 18130 18133 18134 + 18134 18131 18130 + 18131 18134 18135 + 18135 18132 18131 + 18132 18135 18136 + 18136 18137 18132 + 18132 18137 18126 + 17761 17760 18133 + 18133 17760 18138 + 18138 18139 18133 + 18134 18133 18139 + 18139 18140 18134 + 18135 18134 18140 + 18140 18141 18135 + 18136 18135 18141 + 17765 18138 17760 + 18142 18138 17765 + 18138 18142 18143 + 18143 18139 18138 + 18139 18143 18144 + 18144 18140 18139 + 18140 18144 18145 + 18145 18141 18140 + 17765 17769 18142 + 18142 17769 18146 + 18146 18147 18142 + 18143 18142 18147 + 18147 18148 18143 + 18144 18143 18148 + 18148 18149 18144 + 18145 18144 18149 + 17773 18146 17769 + 18150 18146 17773 + 18146 18150 18151 + 18151 18147 18146 + 18147 18151 18152 + 18152 18148 18147 + 18148 18152 18153 + 18153 18149 18148 + 17773 17777 18150 + 18150 17777 18154 + 18154 18155 18150 + 18151 18150 18155 + 18155 18156 18151 + 18152 18151 18156 + 18156 18157 18152 + 18153 18152 18157 + 17781 18154 17777 + 18158 18154 17781 + 18154 18158 18159 + 18159 18155 18154 + 18155 18159 18160 + 18160 18156 18155 + 18156 18160 18161 + 18161 18157 18156 + 17781 17785 18158 + 18158 17785 18162 + 18162 18163 18158 + 18159 18158 18163 + 18163 18164 18159 + 18160 18159 18164 + 18164 18165 18160 + 18161 18160 18165 + 17790 18162 17785 + 18166 18162 17790 + 18162 18166 18167 + 18167 18163 18162 + 18163 18167 18168 + 18168 18164 18163 + 18164 18168 18169 + 18169 18165 18164 + 17790 17795 18166 + 18166 17795 18170 + 18170 18171 18166 + 18167 18166 18171 + 18171 18172 18167 + 18168 18167 18172 + 18172 18173 18168 + 18169 18168 18173 + 17800 18170 17795 + 18174 18170 17800 + 18170 18174 18171 + 18171 18174 18175 + 18175 18172 18171 + 18173 18172 18175 + 18175 18176 18173 + 18173 18176 18177 + 18177 18178 18173 + 18173 18178 18169 + 17800 18179 18174 + 18174 18179 18180 + 18175 18174 18180 + 18180 18181 18175 + 18176 18175 18181 + 18181 18182 18176 + 18177 18176 18182 + 17804 18179 17800 + 18179 17804 18183 + 18183 18180 18179 + 18180 18183 18184 + 18184 18185 18180 + 18180 18185 18186 + 18186 18181 18180 + 18181 18186 18182 + 17808 18183 17804 + 18184 18183 17808 + 17808 18187 18184 + 18184 18187 18188 + 18188 18189 18184 + 18185 18184 18189 + 18189 18190 18185 + 18186 18185 18190 + 18191 18186 18190 + 18182 18186 18191 + 17812 18187 17808 + 18187 17812 18192 + 18192 18188 18187 + 18188 18192 18193 + 18193 18194 18188 + 18188 18194 18195 + 18195 18189 18188 + 18190 18189 18195 + 18192 17812 17811 + 17811 18196 18192 + 18193 18192 18196 + 18196 18197 18193 + 18193 18197 17902 + 17902 18198 18193 + 18194 18193 18198 + 17816 18196 17811 + 18197 18196 17816 + 17816 17824 18197 + 18197 17824 18199 + 18199 17902 18197 + 17902 18199 17897 + 17897 18199 18200 + 18200 17892 17897 + 17844 17892 18200 + 18200 17829 17844 + 18199 17824 17823 + 17823 18200 18199 + 17829 18200 17823 + 17901 18198 17902 + 17911 18198 17901 + 18198 17911 18194 + 18194 17911 18201 + 18201 18195 18194 + 18202 18195 18201 + 18195 18202 18190 + 18190 18202 18203 + 18203 18204 18190 + 18190 18204 18191 + 17910 18201 17911 + 17920 18201 17910 + 18201 17920 18202 + 18202 17920 18205 + 18205 18203 18202 + 18206 18203 18205 + 18203 18206 18207 + 18207 18204 18203 + 18204 18207 18208 + 18208 18191 18204 + 17919 18205 17920 + 18209 18205 17919 + 18205 18209 18206 + 18206 18209 18210 + 18210 18211 18206 + 18207 18206 18211 + 18211 18212 18207 + 18207 18212 18213 + 18213 18208 18207 + 17919 17925 18209 + 18209 17925 18214 + 18214 18210 18209 + 18210 18214 18215 + 18210 18215 18216 + 18216 18211 18210 + 18211 18216 18217 + 18217 18212 18211 + 18212 18217 18218 + 18218 18213 18212 + 18214 17925 17930 + 17930 18219 18214 + 18215 18214 18219 + 18219 18220 18215 + 18216 18215 18220 + 18220 18221 18216 + 18217 18216 18221 + 18221 18222 18217 + 18217 18222 18223 + 18223 18218 18217 + 18224 18219 17930 + 18219 18224 18225 + 18225 18220 18219 + 18220 18225 18226 + 18226 18221 18220 + 18221 18226 18227 + 18227 18222 18221 + 18222 18227 18228 + 18228 18223 18222 + 17930 17929 18224 + 18229 18224 17929 + 18225 18224 18229 + 18229 18230 18225 + 18226 18225 18230 + 18230 18231 18226 + 18227 18226 18231 + 17934 18229 17929 + 18232 18229 17934 + 18230 18229 18232 + 18230 18232 18233 + 18233 18231 18230 + 18231 18233 18234 + 18234 18235 18231 + 18231 18235 18227 + 17934 18236 18232 + 18233 18232 18236 + 18236 18237 18233 + 18234 18233 18237 + 17937 18236 17934 + 18236 17937 17942 + 17942 18237 18236 + 18237 17942 18238 + 18238 18239 18237 + 18237 18239 18234 + 18238 17942 17941 + 17941 18240 18238 + 18238 18240 18241 + 18241 18242 18238 + 18242 18243 18238 + 18243 18244 18238 + 18239 18238 18244 + 17946 18240 17941 + 18240 17946 17951 + 17951 18241 18240 + 18241 17951 18245 + 18245 18246 18241 + 18241 18246 18247 + 18247 18242 18241 + 18248 18242 18247 + 18242 18248 18249 + 18249 18243 18242 + 18245 17951 17950 + 17950 18250 18245 + 18251 18245 18250 + 18246 18245 18251 + 18251 18252 18246 + 18246 18252 18253 + 18253 18247 18246 + 18248 18247 18253 + 18253 18254 18248 + 18249 18248 18254 + 18250 17950 18255 + 18250 18255 18256 + 18256 18257 18250 + 18250 18257 18251 + 18258 18251 18257 + 18252 18251 18258 + 18255 17950 17949 + 17949 18259 18255 + 18256 18255 18259 + 18259 18260 18256 + 18261 18256 18260 + 18257 18256 18261 + 18261 18262 18257 + 18257 18262 18258 + 18259 17949 17955 + 18259 17955 18263 + 18263 18260 18259 + 18260 18263 18264 + 18264 18265 18260 + 18260 18265 18261 + 18266 18261 18265 + 18262 18261 18266 + 18263 17955 17954 + 18267 18263 17954 + 18264 18263 18267 + 18267 18268 18264 + 18269 18264 18268 + 18265 18264 18269 + 18269 18270 18265 + 18265 18270 18266 + 17954 17962 18267 + 18271 18267 17962 + 18268 18267 18271 + 18268 18271 18272 + 18272 18273 18268 + 18268 18273 18269 + 18274 18269 18273 + 18269 18274 18275 + 18275 18270 18269 + 17962 17967 18271 + 18272 18271 17967 + 17967 17978 18272 + 17983 18272 17978 + 18272 17983 18276 + 18276 18273 18272 + 18273 18276 18274 + 18277 18274 18276 + 18275 18274 18277 + 18277 18278 18275 + 18275 18278 18279 + 18279 18280 18275 + 18270 18275 18280 + 18280 18266 18270 + 18276 17983 17982 + 17982 18281 18276 + 18276 18281 18277 + 18282 18277 18281 + 18277 18282 18283 + 18283 18278 18277 + 18278 18283 18284 + 18284 18279 18278 + 17990 18281 17982 + 18281 17990 18282 + 17994 18282 17990 + 18283 18282 17994 + 17994 18285 18283 + 18283 18285 18286 + 18286 18284 18283 + 18287 18284 18286 + 18279 18284 18287 + 18287 18288 18279 + 18279 18288 18289 + 18289 18280 18279 + 18266 18280 18289 + 17998 18285 17994 + 18285 17998 18290 + 18290 18286 18285 + 18286 18290 18291 + 18291 18292 18286 + 18286 18292 18287 + 18287 18292 18293 + 18293 18294 18287 + 18288 18287 18294 + 18002 18290 17998 + 18291 18290 18002 + 18002 18295 18291 + 18291 18295 18296 + 18296 18297 18291 + 18292 18291 18297 + 18297 18293 18292 + 18006 18295 18002 + 18295 18006 18298 + 18298 18296 18295 + 18296 18298 18299 + 18299 18300 18296 + 18296 18300 18301 + 18301 18297 18296 + 18293 18297 18301 + 18010 18298 18006 + 18299 18298 18010 + 18010 18302 18299 + 18299 18302 18303 + 18303 18304 18299 + 18300 18299 18304 + 18304 18305 18300 + 18301 18300 18305 + 18014 18302 18010 + 18302 18014 18306 + 18306 18303 18302 + 18303 18306 18307 + 18303 18307 18308 + 18308 18304 18303 + 18305 18304 18308 + 18308 18309 18305 + 18305 18309 18310 + 18310 18311 18305 + 18305 18311 18301 + 18307 18306 18312 + 18312 18313 18307 + 18308 18307 18313 + 18313 18314 18308 + 18309 18308 18314 + 18314 18315 18309 + 18309 18315 18316 + 18316 18310 18309 + 18313 18312 18317 + 18313 18317 18318 + 18318 18314 18313 + 18315 18314 18318 + 18318 18319 18315 + 18315 18319 18320 + 18320 18316 18315 + 18317 18312 18321 + 18321 18322 18317 + 18317 18322 18323 + 18323 18318 18317 + 18319 18318 18323 + 18323 18324 18319 + 18319 18324 18325 + 18325 18320 18319 + 18326 18321 18312 + 18327 18321 18326 + 18322 18321 18327 + 18327 18328 18322 + 18322 18328 18329 + 18329 18323 18322 + 18324 18323 18329 + 18013 18326 18312 + 18018 18326 18013 + 18326 18018 18023 + 18023 18330 18326 + 18326 18330 18327 + 18331 18327 18330 + 18328 18327 18331 + 18014 18013 18312 + 18331 18332 18328 + 18332 18331 18333 + 18333 18334 18332 + 18332 18334 18335 + 18335 18336 18332 + 18328 18332 18336 + 18336 18329 18328 + 18337 18329 18336 + 18329 18337 18324 + 18333 18331 18338 + 18338 18339 18333 + 18340 18333 18339 + 18334 18333 18340 + 18340 18341 18334 + 18334 18341 18342 + 18342 18335 18334 + 18330 18338 18331 + 18343 18338 18330 + 18338 18343 18344 + 18344 18339 18338 + 18339 18344 18345 + 18345 18346 18339 + 18339 18346 18340 + 18347 18340 18346 + 18341 18340 18347 + 18330 18023 18343 + 18343 18023 18022 + 18022 18348 18343 + 18344 18343 18348 + 18348 18349 18344 + 18345 18344 18349 + 18349 18350 18345 + 18351 18345 18350 + 18345 18351 18352 + 18352 18346 18345 + 18346 18352 18347 + 18032 18348 18022 + 18349 18348 18032 + 18032 18353 18349 + 18349 18353 18354 + 18354 18350 18349 + 18355 18350 18354 + 18350 18355 18351 + 18356 18351 18355 + 18352 18351 18356 + 18353 18032 18052 + 18052 18057 18353 + 18354 18353 18057 + 18057 18357 18354 + 18358 18354 18357 + 18354 18358 18355 + 18355 18358 18359 + 18359 18360 18355 + 18355 18360 18356 + 18067 18357 18057 + 18361 18357 18067 + 18357 18361 18358 + 18359 18358 18361 + 18361 18362 18359 + 18363 18359 18362 + 18359 18363 18364 + 18364 18360 18359 + 18360 18364 18365 + 18365 18356 18360 + 18067 18072 18361 + 18361 18072 18366 + 18366 18362 18361 + 18367 18362 18366 + 18362 18367 18363 + 18368 18363 18367 + 18364 18363 18368 + 18368 18369 18364 + 18364 18369 18370 + 18370 18365 18364 + 18366 18072 18071 + 18071 18081 18366 + 18371 18366 18081 + 18366 18371 18367 + 18367 18371 18093 + 18093 18372 18367 + 18367 18372 18368 + 18373 18368 18372 + 18368 18373 18374 + 18374 18369 18368 + 18081 18080 18371 + 18093 18371 18080 + 18098 18372 18093 + 18372 18098 18373 + 18103 18373 18098 + 18374 18373 18103 + 18103 18375 18374 + 18374 18375 18376 + 18376 18377 18374 + 18369 18374 18377 + 18377 18370 18369 + 18108 18375 18103 + 18375 18108 18378 + 18378 18376 18375 + 18376 18378 18379 + 18379 18380 18376 + 18376 18380 18381 + 18381 18377 18376 + 18370 18377 18381 + 18378 18108 18112 + 18112 18382 18378 + 18379 18378 18382 + 18382 18383 18379 + 18379 18383 18384 + 18384 18385 18379 + 18380 18379 18385 + 18385 18386 18380 + 18381 18380 18386 + 18128 18382 18112 + 18382 18128 18387 + 18387 18383 18382 + 18383 18387 18388 + 18388 18384 18383 + 18389 18384 18388 + 18384 18389 18390 + 18390 18385 18384 + 18385 18390 18391 + 18391 18386 18385 + 18387 18128 18127 + 18127 18392 18387 + 18387 18392 18393 + 18393 18388 18387 + 18394 18388 18393 + 18388 18394 18389 + 18389 18394 18395 + 18395 18396 18389 + 18390 18389 18396 + 18126 18392 18127 + 18392 18126 18137 + 18137 18393 18392 + 18397 18393 18137 + 18393 18397 18394 + 18394 18397 18398 + 18398 18395 18394 + 18399 18395 18398 + 18395 18399 18400 + 18400 18396 18395 + 18137 18136 18397 + 18397 18136 18401 + 18401 18398 18397 + 18402 18398 18401 + 18398 18402 18399 + 18399 18402 18403 + 18403 18404 18399 + 18400 18399 18404 + 18141 18401 18136 + 18405 18401 18141 + 18401 18405 18402 + 18402 18405 18406 + 18406 18403 18402 + 18407 18403 18406 + 18403 18407 18408 + 18408 18404 18403 + 18141 18145 18405 + 18405 18145 18409 + 18409 18406 18405 + 18410 18406 18409 + 18406 18410 18407 + 18407 18410 18411 + 18411 18412 18407 + 18408 18407 18412 + 18149 18409 18145 + 18413 18409 18149 + 18409 18413 18410 + 18410 18413 18414 + 18414 18411 18410 + 18415 18411 18414 + 18411 18415 18416 + 18416 18412 18411 + 18149 18153 18413 + 18413 18153 18417 + 18417 18414 18413 + 18418 18414 18417 + 18414 18418 18415 + 18415 18418 18419 + 18419 18420 18415 + 18416 18415 18420 + 18157 18417 18153 + 18421 18417 18157 + 18417 18421 18418 + 18418 18421 18422 + 18422 18419 18418 + 18423 18419 18422 + 18419 18423 18424 + 18424 18420 18419 + 18157 18161 18421 + 18421 18161 18425 + 18425 18422 18421 + 18426 18422 18425 + 18422 18426 18423 + 18423 18426 18427 + 18427 18428 18423 + 18424 18423 18428 + 18165 18425 18161 + 18429 18425 18165 + 18425 18429 18426 + 18426 18429 18430 + 18430 18427 18426 + 18431 18427 18430 + 18428 18427 18431 + 18165 18169 18429 + 18429 18169 18178 + 18178 18430 18429 + 18430 18178 18177 + 18177 18432 18430 + 18430 18432 18431 + 18431 18432 18433 + 18433 18434 18431 + 18435 18431 18434 + 18431 18435 18428 + 18432 18177 18436 + 18436 18433 18432 + 18433 18436 18191 + 18191 18208 18433 + 18433 18208 18213 + 18213 18434 18433 + 18437 18434 18213 + 18434 18437 18435 + 18182 18436 18177 + 18191 18436 18182 + 18213 18218 18437 + 18437 18218 18223 + 18223 18438 18437 + 18437 18438 18439 + 18439 18440 18437 + 18440 18435 18437 + 18428 18435 18440 + 18440 18441 18428 + 18428 18441 18424 + 18442 18438 18223 + 18438 18442 18443 + 18443 18439 18438 + 18439 18443 18444 + 18444 18445 18439 + 18439 18445 18446 + 18446 18440 18439 + 18441 18440 18446 + 18223 18228 18442 + 18442 18228 18447 + 18447 18448 18442 + 18442 18448 18449 + 18449 18443 18442 + 18444 18443 18449 + 18447 18228 18227 + 18450 18447 18227 + 18451 18447 18450 + 18448 18447 18451 + 18448 18451 18452 + 18452 18449 18448 + 18449 18452 18453 + 18453 18454 18449 + 18449 18454 18444 + 18227 18235 18450 + 18455 18450 18235 + 18450 18455 18456 + 18456 18457 18450 + 18450 18457 18451 + 18451 18457 18458 + 18458 18452 18451 + 18453 18452 18458 + 18235 18234 18455 + 18459 18455 18234 + 18456 18455 18459 + 18459 18460 18456 + 18456 18460 18461 + 18461 18462 18456 + 18462 18463 18456 + 18457 18456 18463 + 18463 18458 18457 + 18464 18459 18234 + 18465 18459 18464 + 18460 18459 18465 + 18460 18465 18466 + 18466 18461 18460 + 18467 18464 18234 + 18468 18464 18467 + 18469 18464 18468 + 18464 18469 18465 + 18465 18469 18470 + 18470 18466 18465 + 18471 18466 18470 + 18461 18466 18471 + 18234 18239 18467 + 18244 18467 18239 + 18467 18244 18472 + 18472 18473 18467 + 18467 18473 18468 + 18468 18473 18474 + 18474 18475 18468 + 18469 18468 18475 + 18475 18470 18469 + 18472 18244 18243 + 18243 18476 18472 + 18472 18476 18477 + 18477 18478 18472 + 18473 18472 18478 + 18478 18474 18473 + 18476 18243 18249 + 18476 18249 18479 + 18479 18477 18476 + 18477 18479 18480 + 18480 18481 18477 + 18477 18481 18482 + 18482 18478 18477 + 18474 18478 18482 + 18254 18479 18249 + 18480 18479 18254 + 18254 18483 18480 + 18480 18483 18484 + 18484 18485 18480 + 18481 18480 18485 + 18485 18486 18481 + 18481 18486 18487 + 18487 18482 18481 + 18488 18483 18254 + 18483 18488 18489 + 18489 18484 18483 + 18490 18484 18489 + 18484 18490 18491 + 18491 18485 18484 + 18485 18491 18492 + 18492 18486 18485 + 18254 18253 18488 + 18488 18253 18252 + 18252 18493 18488 + 18488 18493 18494 + 18494 18489 18488 + 18495 18489 18494 + 18489 18495 18490 + 18490 18495 18496 + 18496 18497 18490 + 18491 18490 18497 + 18258 18493 18252 + 18493 18258 18498 + 18498 18494 18493 + 18499 18494 18498 + 18494 18499 18495 + 18496 18495 18499 + 18499 18500 18496 + 18501 18496 18500 + 18496 18501 18502 + 18502 18497 18496 + 18498 18258 18262 + 18262 18503 18498 + 18504 18498 18503 + 18498 18504 18499 + 18499 18504 18505 + 18505 18500 18499 + 18506 18500 18505 + 18500 18506 18501 + 18507 18501 18506 + 18502 18501 18507 + 18266 18503 18262 + 18289 18503 18266 + 18503 18289 18504 + 18505 18504 18289 + 18289 18288 18505 + 18294 18505 18288 + 18505 18294 18506 + 18506 18294 18293 + 18293 18508 18506 + 18506 18508 18507 + 18311 18507 18508 + 18507 18311 18310 + 18310 18509 18507 + 18507 18509 18502 + 18510 18502 18509 + 18497 18502 18510 + 18301 18508 18293 + 18508 18301 18311 + 18509 18310 18316 + 18316 18511 18509 + 18509 18511 18510 + 18512 18510 18511 + 18513 18510 18512 + 18510 18513 18497 + 18497 18513 18491 + 18492 18491 18513 + 18511 18316 18320 + 18320 18514 18511 + 18511 18514 18512 + 18515 18512 18514 + 18516 18512 18515 + 18512 18516 18513 + 18513 18516 18492 + 18517 18492 18516 + 18486 18492 18517 + 18517 18487 18486 + 18514 18320 18325 + 18325 18518 18514 + 18514 18518 18515 + 18519 18515 18518 + 18520 18515 18519 + 18515 18520 18516 + 18516 18520 18517 + 18521 18517 18520 + 18487 18517 18521 + 18518 18325 18522 + 18522 18523 18518 + 18518 18523 18519 + 18524 18519 18523 + 18525 18519 18524 + 18519 18525 18520 + 18520 18525 18521 + 18522 18325 18324 + 18324 18337 18522 + 18526 18522 18337 + 18523 18522 18526 + 18526 18527 18523 + 18523 18527 18524 + 18528 18524 18527 + 18529 18524 18528 + 18524 18529 18525 + 18525 18529 18530 + 18530 18521 18525 + 18337 18531 18526 + 18532 18526 18531 + 18527 18526 18532 + 18532 18533 18527 + 18527 18533 18528 + 18534 18528 18533 + 18535 18528 18534 + 18528 18535 18529 + 18336 18531 18337 + 18531 18336 18335 + 18335 18536 18531 + 18531 18536 18532 + 18537 18532 18536 + 18533 18532 18537 + 18537 18538 18533 + 18533 18538 18534 + 18539 18534 18538 + 18540 18534 18539 + 18534 18540 18535 + 18536 18335 18342 + 18342 18541 18536 + 18536 18541 18537 + 18542 18537 18541 + 18538 18537 18542 + 18542 18543 18538 + 18538 18543 18539 + 18544 18539 18543 + 18545 18539 18544 + 18539 18545 18540 + 18541 18342 18546 + 18546 18547 18541 + 18541 18547 18542 + 18548 18542 18547 + 18543 18542 18548 + 18548 18549 18543 + 18543 18549 18544 + 18546 18342 18341 + 18341 18550 18546 + 18551 18546 18550 + 18547 18546 18551 + 18551 18552 18547 + 18547 18552 18548 + 18553 18548 18552 + 18549 18548 18553 + 18347 18550 18341 + 18550 18347 18554 + 18554 18555 18550 + 18550 18555 18551 + 18556 18551 18555 + 18552 18551 18556 + 18556 18557 18552 + 18552 18557 18553 + 18554 18347 18352 + 18352 18558 18554 + 18559 18554 18558 + 18555 18554 18559 + 18559 18560 18555 + 18555 18560 18556 + 18561 18556 18560 + 18557 18556 18561 + 18356 18558 18352 + 18562 18558 18356 + 18558 18562 18559 + 18563 18559 18562 + 18560 18559 18563 + 18563 18564 18560 + 18560 18564 18561 + 18565 18561 18564 + 18566 18561 18565 + 18561 18566 18557 + 18356 18365 18562 + 18562 18365 18370 + 18370 18567 18562 + 18562 18567 18563 + 18568 18563 18567 + 18564 18563 18568 + 18568 18569 18564 + 18564 18569 18565 + 18570 18565 18569 + 18571 18565 18570 + 18565 18571 18566 + 18381 18567 18370 + 18567 18381 18568 + 18386 18568 18381 + 18569 18568 18386 + 18386 18391 18569 + 18569 18391 18570 + 18572 18570 18391 + 18573 18570 18572 + 18570 18573 18571 + 18571 18573 18574 + 18574 18575 18571 + 18566 18571 18575 + 18575 18576 18566 + 18557 18566 18576 + 18391 18390 18572 + 18396 18572 18390 + 18577 18572 18396 + 18572 18577 18573 + 18573 18577 18578 + 18578 18574 18573 + 18579 18574 18578 + 18574 18579 18580 + 18580 18575 18574 + 18575 18580 18581 + 18581 18576 18575 + 18396 18400 18577 + 18577 18400 18582 + 18582 18578 18577 + 18583 18578 18582 + 18578 18583 18579 + 18579 18583 18584 + 18584 18585 18579 + 18580 18579 18585 + 18585 18586 18580 + 18581 18580 18586 + 18404 18582 18400 + 18587 18582 18404 + 18582 18587 18583 + 18583 18587 18588 + 18588 18584 18583 + 18589 18584 18588 + 18584 18589 18590 + 18590 18585 18584 + 18585 18590 18591 + 18591 18586 18585 + 18404 18408 18587 + 18587 18408 18592 + 18592 18588 18587 + 18593 18588 18592 + 18588 18593 18589 + 18589 18593 18594 + 18594 18595 18589 + 18590 18589 18595 + 18595 18596 18590 + 18591 18590 18596 + 18412 18592 18408 + 18597 18592 18412 + 18592 18597 18593 + 18593 18597 18598 + 18598 18594 18593 + 18599 18594 18598 + 18594 18599 18600 + 18600 18595 18594 + 18595 18600 18601 + 18601 18596 18595 + 18412 18416 18597 + 18597 18416 18602 + 18602 18598 18597 + 18603 18598 18602 + 18598 18603 18599 + 18599 18603 18445 + 18445 18444 18599 + 18600 18599 18444 + 18444 18454 18600 + 18601 18600 18454 + 18420 18602 18416 + 18604 18602 18420 + 18602 18604 18603 + 18603 18604 18446 + 18446 18445 18603 + 18420 18424 18604 + 18604 18424 18441 + 18441 18446 18604 + 18454 18453 18601 + 18605 18601 18453 + 18596 18601 18605 + 18605 18606 18596 + 18596 18606 18591 + 18607 18591 18606 + 18586 18591 18607 + 18453 18608 18605 + 18609 18605 18608 + 18606 18605 18609 + 18609 18610 18606 + 18606 18610 18607 + 18611 18607 18610 + 18612 18607 18611 + 18607 18612 18586 + 18586 18612 18581 + 18458 18608 18453 + 18613 18608 18458 + 18608 18613 18609 + 18614 18609 18613 + 18610 18609 18614 + 18614 18615 18610 + 18610 18615 18611 + 18616 18611 18615 + 18617 18611 18616 + 18611 18617 18612 + 18458 18463 18613 + 18613 18463 18462 + 18462 18618 18613 + 18613 18618 18614 + 18619 18614 18618 + 18615 18614 18619 + 18619 18620 18615 + 18615 18620 18616 + 18545 18616 18620 + 18544 18616 18545 + 18616 18544 18617 + 18618 18462 18621 + 18618 18621 18619 + 18622 18619 18621 + 18620 18619 18622 + 18622 18623 18620 + 18620 18623 18545 + 18540 18545 18623 + 18623 18624 18540 + 18535 18540 18624 + 18621 18462 18461 + 18461 18625 18621 + 18621 18625 18622 + 18626 18622 18625 + 18623 18622 18626 + 18626 18624 18623 + 18624 18626 18627 + 18627 18628 18624 + 18624 18628 18535 + 18529 18535 18628 + 18628 18530 18529 + 18471 18625 18461 + 18625 18471 18626 + 18627 18626 18471 + 18471 18629 18627 + 18630 18627 18629 + 18628 18627 18630 + 18630 18530 18628 + 18530 18630 18631 + 18631 18521 18530 + 18521 18631 18487 + 18470 18629 18471 + 18632 18629 18470 + 18629 18632 18630 + 18631 18630 18632 + 18632 18633 18631 + 18487 18631 18633 + 18633 18482 18487 + 18482 18633 18474 + 18474 18633 18632 + 18632 18475 18474 + 18470 18475 18632 + 18617 18544 18549 + 18549 18634 18617 + 18612 18617 18634 + 18634 18581 18612 + 18576 18581 18634 + 18634 18553 18576 + 18576 18553 18557 + 18553 18634 18549 + 18635 13255 13261 + 13255 18635 18636 + 18636 13256 13255 + 18637 13256 18636 + 13256 18637 13257 + 13261 18638 18635 + 18635 18638 18639 + 18639 18640 18635 + 18636 18635 18640 + 18638 13261 18641 + 18641 18642 18638 + 18638 18642 18643 + 18643 18639 18638 + 18644 18639 18643 + 18639 18644 18645 + 18645 18640 18639 + 13261 18646 18641 + 18647 18641 18646 + 18642 18641 18647 + 18647 18648 18642 + 18642 18648 18649 + 18649 18643 18642 + 18650 18643 18649 + 18643 18650 18644 + 13260 18646 13261 + 18646 13260 18651 + 18651 18652 18646 + 18646 18652 18647 + 18651 13260 13259 + 13259 18653 18651 + 18651 18653 18654 + 18654 18655 18651 + 18652 18651 18655 + 18655 18656 18652 + 18647 18652 18656 + 18657 18653 13259 + 18653 18657 18658 + 18658 18654 18653 + 18654 18658 18659 + 18659 18660 18654 + 18654 18660 18661 + 18661 18655 18654 + 18656 18655 18661 + 13259 13258 18657 + 18657 13258 18662 + 18662 13264 18657 + 13264 18658 18657 + 18659 18658 13264 + 13264 13263 18659 + 13263 18663 18659 + 18660 18659 18663 + 18663 18664 18660 + 18661 18660 18664 + 18664 18665 18661 + 18666 18661 18665 + 18661 18666 18656 + 18667 18663 13263 + 18664 18663 18667 + 18667 18668 18664 + 18664 18668 18669 + 18669 18665 18664 + 18670 18665 18669 + 18665 18670 18666 + 18671 18666 18670 + 18656 18666 18671 + 13263 13262 18667 + 18672 18667 13262 + 18668 18667 18672 + 18672 18673 18668 + 18668 18673 18674 + 18674 18669 18668 + 18675 18669 18674 + 18669 18675 18670 + 18676 18672 13262 + 18673 18672 18676 + 18676 18677 18673 + 18673 18677 18678 + 18678 18674 18673 + 18679 18674 18678 + 18674 18679 18675 + 18680 18675 18679 + 18670 18675 18680 + 13262 13242 18676 + 18681 18676 13242 + 18677 18676 18681 + 18681 18682 18677 + 18678 18677 18682 + 18682 18683 18678 + 18684 18678 18683 + 18678 18684 18679 + 13242 18685 18681 + 18686 18681 18685 + 18682 18681 18686 + 18686 18687 18682 + 18682 18687 18688 + 18688 18683 18682 + 18689 18683 18688 + 18683 18689 18684 + 13241 18685 13242 + 18685 13241 18690 + 18690 18691 18685 + 18685 18691 18686 + 18692 18686 18691 + 18687 18686 18692 + 18692 18693 18687 + 18687 18693 18694 + 18694 18688 18687 + 18690 13241 13240 + 13240 18695 18690 + 18696 18690 18695 + 18691 18690 18696 + 18696 18697 18691 + 18691 18697 18692 + 18698 18692 18697 + 18693 18692 18698 + 13252 18695 13240 + 18695 13252 18699 + 18699 18700 18695 + 18695 18700 18696 + 18701 18696 18700 + 18697 18696 18701 + 18701 18702 18697 + 18697 18702 18698 + 18699 13252 18703 + 18703 18704 18699 + 18705 18699 18704 + 18700 18699 18705 + 18705 18706 18700 + 18700 18706 18701 + 13251 18703 13252 + 18707 18703 13251 + 18703 18707 18708 + 18708 18704 18703 + 18704 18708 18709 + 18709 18710 18704 + 18704 18710 18705 + 18711 18705 18710 + 18706 18705 18711 + 13251 18712 18707 + 18707 18712 18713 + 18713 18714 18707 + 18708 18707 18714 + 18714 18715 18708 + 18709 18708 18715 + 18712 13251 13250 + 13250 13257 18712 + 18713 18712 13257 + 13257 18637 18713 + 18716 18713 18637 + 18713 18716 18717 + 18717 18714 18713 + 18714 18717 18718 + 18718 18715 18714 + 18715 18718 18719 + 18719 18720 18715 + 18715 18720 18709 + 18637 18721 18716 + 18722 18716 18721 + 18717 18716 18722 + 18722 18723 18717 + 18718 18717 18723 + 18723 18724 18718 + 18719 18718 18724 + 18636 18721 18637 + 18721 18636 18725 + 18725 18726 18721 + 18721 18726 18722 + 18727 18722 18726 + 18722 18727 18728 + 18728 18723 18722 + 18723 18728 18729 + 18729 18724 18723 + 18730 18725 18636 + 18731 18725 18730 + 18731 18726 18725 + 18726 18731 18727 + 18727 18731 18732 + 18732 18733 18727 + 18728 18727 18733 + 18733 18734 18728 + 18729 18728 18734 + 18640 18730 18636 + 18735 18730 18640 + 18732 18730 18735 + 18730 18732 18731 + 18640 18645 18735 + 18735 18645 18736 + 18736 18737 18735 + 18738 18735 18737 + 18735 18738 18732 + 18732 18738 18739 + 18739 18733 18732 + 18733 18739 18740 + 18740 18734 18733 + 18741 18736 18645 + 18742 18736 18741 + 18736 18742 18743 + 18743 18737 18736 + 18737 18743 18744 + 18744 18745 18737 + 18737 18745 18738 + 18739 18738 18745 + 18645 18644 18741 + 18741 18644 18650 + 18650 18746 18741 + 18746 18747 18741 + 18748 18741 18747 + 18741 18748 18742 + 18742 18748 18749 + 18749 18750 18742 + 18743 18742 18750 + 18751 18746 18650 + 18746 18751 18752 + 18746 18752 18747 + 18752 18753 18747 + 18753 18754 18747 + 18747 18754 18748 + 18748 18754 18749 + 18755 18749 18754 + 18750 18749 18755 + 18650 18649 18751 + 18756 18751 18649 + 18752 18751 18756 + 18756 18757 18752 + 18753 18752 18757 + 18755 18753 18757 + 18754 18753 18755 + 18758 18756 18649 + 18759 18756 18758 + 18756 18759 18757 + 18757 18759 18760 + 18760 18761 18757 + 18757 18761 18755 + 18762 18755 18761 + 18755 18762 18750 + 18649 18648 18758 + 18763 18758 18648 + 18758 18763 18764 + 18764 18765 18758 + 18758 18765 18759 + 18759 18765 18766 + 18766 18760 18759 + 18767 18760 18766 + 18767 18761 18760 + 18761 18767 18762 + 18648 18647 18763 + 18768 18763 18647 + 18764 18763 18768 + 18768 18769 18764 + 18764 18769 18770 + 18770 18771 18764 + 18765 18764 18771 + 18771 18766 18765 + 18772 18768 18647 + 18773 18768 18772 + 18768 18773 18769 + 18769 18773 18774 + 18774 18770 18769 + 18656 18772 18647 + 18671 18772 18656 + 18772 18671 18775 + 18772 18775 18773 + 18773 18775 18776 + 18776 18774 18773 + 18777 18774 18776 + 18770 18774 18777 + 18777 18778 18770 + 18770 18778 18779 + 18779 18771 18770 + 18766 18771 18779 + 18775 18671 18780 + 18780 18776 18775 + 18776 18780 18680 + 18776 18680 18777 + 18777 18680 18679 + 18781 18777 18679 + 18778 18777 18781 + 18781 18782 18778 + 18779 18778 18782 + 18670 18780 18671 + 18680 18780 18670 + 18782 18783 18779 + 18784 18783 18782 + 18783 18784 18785 + 18785 18786 18783 + 18783 18786 18787 + 18787 18779 18783 + 18779 18787 18766 + 18766 18787 18767 + 18782 18788 18784 + 18784 18788 18789 + 18790 18784 18789 + 18785 18784 18790 + 18782 18781 18788 + 18788 18781 18791 + 18791 18792 18788 + 18788 18792 18789 + 18679 18791 18781 + 18793 18791 18679 + 18791 18793 18792 + 18792 18793 18794 + 18794 18789 18792 + 18679 18684 18793 + 18793 18684 18689 + 18689 18794 18793 + 18795 18794 18689 + 18789 18794 18795 + 18795 18796 18789 + 18789 18796 18797 + 18797 18798 18789 + 18789 18798 18790 + 18689 18799 18795 + 18795 18799 18800 + 18800 18801 18795 + 18796 18795 18801 + 18801 18802 18796 + 18796 18802 18803 + 18803 18797 18796 + 18688 18799 18689 + 18799 18688 18694 + 18694 18800 18799 + 18800 18694 18804 + 18804 18805 18800 + 18800 18805 18806 + 18806 18801 18800 + 18802 18801 18806 + 18806 18807 18802 + 18802 18807 18808 + 18808 18803 18802 + 18804 18694 18693 + 18693 18809 18804 + 18810 18804 18809 + 18805 18804 18810 + 18810 18811 18805 + 18805 18811 18812 + 18812 18806 18805 + 18807 18806 18812 + 18698 18809 18693 + 18809 18698 18813 + 18813 18814 18809 + 18809 18814 18810 + 18815 18810 18814 + 18811 18810 18815 + 18815 18816 18811 + 18811 18816 18817 + 18817 18812 18811 + 18813 18698 18702 + 18702 18818 18813 + 18819 18813 18818 + 18814 18813 18819 + 18819 18820 18814 + 18814 18820 18815 + 18821 18815 18820 + 18816 18815 18821 + 18822 18818 18702 + 18818 18822 18823 + 18823 18824 18818 + 18818 18824 18819 + 18825 18819 18824 + 18820 18819 18825 + 18825 18826 18820 + 18820 18826 18821 + 18702 18701 18822 + 18827 18822 18701 + 18823 18822 18827 + 18827 18828 18823 + 18829 18823 18828 + 18824 18823 18829 + 18829 18830 18824 + 18824 18830 18825 + 18831 18825 18830 + 18826 18825 18831 + 18701 18706 18827 + 18711 18827 18706 + 18827 18711 18832 + 18832 18828 18827 + 18828 18832 18833 + 18833 18834 18828 + 18828 18834 18829 + 18835 18829 18834 + 18830 18829 18835 + 18835 18836 18830 + 18830 18836 18831 + 18832 18711 18837 + 18837 18838 18832 + 18833 18832 18838 + 18838 18839 18833 + 18840 18833 18839 + 18834 18833 18840 + 18840 18841 18834 + 18834 18841 18835 + 18710 18837 18711 + 18842 18837 18710 + 18837 18842 18843 + 18843 18838 18837 + 18838 18843 18844 + 18844 18839 18838 + 18839 18844 18845 + 18845 18846 18839 + 18839 18846 18840 + 18710 18709 18842 + 18842 18709 18720 + 18720 18847 18842 + 18843 18842 18847 + 18847 18848 18843 + 18844 18843 18848 + 18848 18849 18844 + 18845 18844 18849 + 18850 18847 18720 + 18847 18850 18851 + 18851 18848 18847 + 18848 18851 18852 + 18852 18849 18848 + 18849 18852 18853 + 18853 18854 18849 + 18849 18854 18845 + 18720 18719 18850 + 18850 18719 18855 + 18855 18856 18850 + 18851 18850 18856 + 18856 18857 18851 + 18851 18857 18858 + 18858 18852 18851 + 18853 18852 18858 + 18724 18855 18719 + 18859 18855 18724 + 18855 18859 18860 + 18860 18856 18855 + 18856 18860 18861 + 18861 18857 18856 + 18857 18861 18862 + 18862 18858 18857 + 18724 18729 18859 + 18863 18859 18729 + 18860 18859 18863 + 18863 18864 18860 + 18861 18860 18864 + 18864 18865 18861 + 18862 18861 18865 + 18865 18866 18862 + 18867 18862 18866 + 18858 18862 18867 + 18868 18863 18729 + 18869 18863 18868 + 18863 18869 18870 + 18870 18864 18863 + 18864 18870 18871 + 18871 18865 18864 + 18865 18871 18872 + 18872 18866 18865 + 18734 18868 18729 + 18873 18868 18734 + 18868 18873 18869 + 18869 18873 18874 + 18874 18875 18869 + 18870 18869 18875 + 18875 18876 18870 + 18871 18870 18876 + 18876 18877 18871 + 18872 18871 18877 + 18734 18740 18873 + 18873 18740 18878 + 18878 18874 18873 + 18879 18874 18878 + 18874 18879 18880 + 18880 18875 18874 + 18875 18880 18881 + 18881 18876 18875 + 18876 18881 18882 + 18882 18877 18876 + 18883 18878 18740 + 18884 18878 18883 + 18878 18884 18879 + 18879 18884 18885 + 18885 18886 18879 + 18880 18879 18886 + 18886 18887 18880 + 18881 18880 18887 + 18740 18739 18883 + 18745 18883 18739 + 18888 18883 18745 + 18883 18888 18884 + 18884 18888 18889 + 18889 18885 18884 + 18890 18885 18889 + 18885 18890 18891 + 18891 18886 18885 + 18886 18891 18892 + 18892 18887 18886 + 18745 18744 18888 + 18889 18888 18744 + 18744 18893 18889 + 18893 18894 18889 + 18895 18889 18894 + 18889 18895 18890 + 18890 18895 18896 + 18896 18897 18890 + 18891 18890 18897 + 18898 18893 18744 + 18893 18898 18899 + 18899 18900 18893 + 18893 18900 18901 + 18901 18894 18893 + 18901 18902 18894 + 18894 18902 18895 + 18896 18895 18902 + 18744 18743 18898 + 18750 18898 18743 + 18899 18898 18750 + 18750 18762 18899 + 18786 18899 18762 + 18900 18899 18786 + 18786 18785 18900 + 18901 18900 18785 + 18785 18903 18901 + 18902 18901 18903 + 18903 18904 18902 + 18902 18904 18896 + 18762 18767 18786 + 18767 18787 18786 + 18790 18903 18785 + 18903 18790 18904 + 18904 18790 18798 + 18798 18896 18904 + 18896 18798 18797 + 18797 18897 18896 + 18897 18797 18803 + 18803 18905 18897 + 18897 18905 18891 + 18892 18891 18905 + 18905 18906 18892 + 18907 18892 18906 + 18887 18892 18907 + 18905 18803 18808 + 18808 18906 18905 + 18906 18808 18908 + 18908 18909 18906 + 18906 18909 18907 + 18910 18907 18909 + 18911 18907 18910 + 18907 18911 18887 + 18887 18911 18881 + 18882 18881 18911 + 18908 18808 18807 + 18807 18912 18908 + 18913 18908 18912 + 18909 18908 18913 + 18913 18914 18909 + 18909 18914 18910 + 18915 18910 18914 + 18916 18910 18915 + 18910 18916 18911 + 18911 18916 18882 + 18812 18912 18807 + 18912 18812 18817 + 18817 18917 18912 + 18912 18917 18913 + 18918 18913 18917 + 18914 18913 18918 + 18918 18919 18914 + 18914 18919 18915 + 18920 18915 18919 + 18921 18915 18920 + 18915 18921 18916 + 18917 18817 18922 + 18922 18923 18917 + 18917 18923 18918 + 18924 18918 18923 + 18919 18918 18924 + 18924 18925 18919 + 18919 18925 18920 + 18922 18817 18816 + 18816 18926 18922 + 18927 18922 18926 + 18923 18922 18927 + 18927 18928 18923 + 18923 18928 18924 + 18924 18928 18929 + 18929 18930 18924 + 18930 18925 18924 + 18930 18920 18925 + 18821 18926 18816 + 18926 18821 18931 + 18931 18932 18926 + 18926 18932 18927 + 18933 18927 18932 + 18928 18927 18933 + 18933 18929 18928 + 18930 18929 18933 + 18934 18930 18933 + 18930 18934 18935 + 18935 18920 18930 + 18920 18935 18921 + 18931 18821 18826 + 18826 18936 18931 + 18937 18931 18936 + 18932 18931 18937 + 18937 18933 18932 + 18933 18937 18938 + 18938 18939 18933 + 18939 18940 18933 + 18940 18934 18933 + 18831 18936 18826 + 18936 18831 18941 + 18941 18937 18936 + 18937 18941 18938 + 18941 18831 18836 + 18942 18941 18836 + 18941 18942 18938 + 18836 18835 18942 + 18942 18835 18841 + 18942 18841 18840 + 18943 18942 18840 + 18942 18943 18938 + 18943 18944 18938 + 18938 18944 18854 + 18854 18853 18938 + 18938 18853 18945 + 18939 18938 18945 + 18943 18840 18846 + 18943 18846 18845 + 18944 18943 18845 + 18944 18845 18854 + 18858 18945 18853 + 18867 18945 18858 + 18945 18867 18939 + 18939 18867 18946 + 18939 18946 18947 + 18940 18939 18947 + 18940 18947 18948 + 18940 18948 18949 + 18934 18940 18949 + 18934 18949 18935 + 18866 18946 18867 + 18946 18866 18872 + 18947 18946 18872 + 18947 18872 18950 + 18950 18948 18947 + 18949 18948 18950 + 18950 18951 18949 + 18949 18951 18921 + 18921 18935 18949 + 18877 18950 18872 + 18951 18950 18877 + 18877 18882 18951 + 18951 18882 18916 + 18916 18921 18951 + 18952 11771 11639 + 11771 18952 11772 + 11772 18952 18953 + 18953 18954 11772 + 11773 11772 18954 + 11639 18955 18952 + 18952 18955 18956 + 18956 18953 18952 + 18957 18953 18956 + 18953 18957 18958 + 18958 18954 18953 + 18959 18954 18958 + 18954 18959 11773 + 11764 11773 18959 + 18955 11639 11638 + 11638 11648 18955 + 18956 18955 11648 + 11648 11653 18956 + 18960 18956 11653 + 18956 18960 18957 + 18957 18960 18961 + 18961 18962 18957 + 18958 18957 18962 + 18962 18963 18958 + 18964 18958 18963 + 18958 18964 18959 + 11653 18965 18960 + 18960 18965 18966 + 18966 18961 18960 + 18967 18961 18966 + 18961 18967 18962 + 18962 18967 18968 + 18968 18963 18962 + 18969 18963 18968 + 18963 18969 18964 + 11652 18965 11653 + 18965 11652 18970 + 18970 18971 18965 + 18965 18971 18966 + 18972 18966 18971 + 18966 18972 18973 + 18973 18974 18966 + 18966 18974 18967 + 18968 18967 18974 + 11658 18970 11652 + 18975 18970 11658 + 18971 18970 18975 + 18975 18976 18971 + 18971 18976 18972 + 18977 18972 18976 + 18973 18972 18977 + 18977 18978 18973 + 18979 18973 18978 + 18974 18973 18979 + 11658 18980 18975 + 18975 18980 18981 + 18982 18975 18981 + 18976 18975 18982 + 18982 18983 18976 + 18976 18983 18984 + 18984 18977 18976 + 18980 11658 11663 + 11663 18985 18980 + 18980 18985 18986 + 18986 18981 18980 + 18987 18981 18986 + 18981 18987 18988 + 18988 18989 18981 + 18981 18989 18982 + 18985 11663 18990 + 18990 18991 18985 + 18986 18985 18991 + 18991 18992 18986 + 18987 18986 18992 + 18992 18993 18987 + 18987 18993 18994 + 18994 18988 18987 + 11667 18990 11663 + 11672 18990 11667 + 18990 11672 18995 + 18995 18991 18990 + 18991 18995 18996 + 18996 18992 18991 + 18992 18996 18997 + 18997 18993 18992 + 18993 18997 18998 + 18998 18994 18993 + 18995 11672 11677 + 11677 18999 18995 + 18996 18995 18999 + 18999 19000 18996 + 18997 18996 19000 + 19000 19001 18997 + 18998 18997 19001 + 19001 19002 18998 + 19003 18998 19002 + 18994 18998 19003 + 19004 18999 11677 + 18999 19004 19005 + 19005 19000 18999 + 19000 19005 19006 + 19006 19001 19000 + 19001 19006 19007 + 19007 19002 19001 + 11677 11676 19004 + 19004 11676 11682 + 11682 19008 19004 + 19005 19004 19008 + 19008 19009 19005 + 19006 19005 19009 + 19009 19010 19006 + 19007 19006 19010 + 19010 19011 19007 + 19012 19007 19011 + 19002 19007 19012 + 19013 19008 11682 + 19008 19013 19014 + 19014 19009 19008 + 19009 19014 19015 + 19015 19010 19009 + 19010 19015 19016 + 19016 19011 19010 + 11682 11681 19013 + 19013 11681 11687 + 11687 19017 19013 + 19014 19013 19017 + 19017 19018 19014 + 19015 19014 19018 + 19018 19019 19015 + 19016 19015 19019 + 19019 19020 19016 + 19021 19016 19020 + 19011 19016 19021 + 19022 19017 11687 + 19017 19022 19023 + 19023 19018 19017 + 19018 19023 19024 + 19024 19019 19018 + 19019 19024 19025 + 19025 19020 19019 + 11687 11686 19022 + 19022 11686 19026 + 19026 19027 19022 + 19023 19022 19027 + 19027 19028 19023 + 19024 19023 19028 + 19028 19029 19024 + 19025 19024 19029 + 11691 19026 11686 + 19030 19026 11691 + 19026 19030 19031 + 19031 19027 19026 + 19027 19031 19032 + 19032 19028 19027 + 19028 19032 19033 + 19033 19029 19028 + 11691 11696 19030 + 19030 11696 19034 + 19034 19035 19030 + 19031 19030 19035 + 19035 19036 19031 + 19032 19031 19036 + 19036 19037 19032 + 19033 19032 19037 + 19038 19034 11696 + 19039 19034 19038 + 19034 19039 19040 + 19040 19035 19034 + 19035 19040 19041 + 19041 19036 19035 + 19036 19041 19042 + 19042 19037 19036 + 11696 11695 19038 + 11701 19038 11695 + 19043 19038 11701 + 19038 19043 19039 + 19039 19043 19044 + 19044 19045 19039 + 19040 19039 19045 + 19045 19046 19040 + 19041 19040 19046 + 19046 19047 19041 + 19042 19041 19047 + 11701 19048 19043 + 19043 19048 19049 + 19049 19044 19043 + 19050 19044 19049 + 19044 19050 19051 + 19051 19045 19044 + 19045 19051 19052 + 19052 19046 19045 + 19048 11701 11700 + 11700 19053 19048 + 19048 19053 19054 + 19054 19049 19048 + 19055 19049 19054 + 19049 19055 19050 + 19050 19055 19056 + 19056 19057 19050 + 19051 19050 19057 + 19053 11700 11699 + 11699 19058 19053 + 19053 19058 19059 + 19059 19054 19053 + 19060 19054 19059 + 19054 19060 19055 + 19055 19060 19061 + 19061 19056 19055 + 19058 11699 11706 + 11706 19062 19058 + 19058 19062 19063 + 19063 19059 19058 + 19064 19059 19063 + 19059 19064 19060 + 19061 19060 19064 + 19064 19065 19061 + 19066 19061 19065 + 19056 19061 19066 + 19062 11706 19067 + 19067 19068 19062 + 19063 19062 19068 + 19069 19067 11706 + 19070 19067 19069 + 19068 19067 19070 + 19068 19070 19071 + 19071 19072 19068 + 19068 19072 19063 + 19073 19069 11706 + 11719 19069 19073 + 11723 19069 11719 + 19069 11723 19070 + 11706 11705 19073 + 11704 19073 11705 + 11711 19073 11704 + 19073 11711 11719 + 19070 11723 11722 + 11722 19074 19070 + 19074 19075 19070 + 19075 19076 19070 + 19076 19071 19070 + 19077 19071 19076 + 19071 19077 19072 + 11728 19074 11722 + 11728 19078 19074 + 19074 19078 19079 + 19079 19075 19074 + 19080 19075 19079 + 19075 19080 19081 + 19081 19076 19075 + 19082 19076 19081 + 19076 19082 19077 + 19078 11728 11727 + 11727 19083 19078 + 19079 19078 19083 + 19083 19084 19079 + 19080 19079 19084 + 19084 19085 19080 + 19080 19085 19086 + 19086 19081 19080 + 19082 19081 19086 + 11727 11733 19083 + 19083 11733 19087 + 19087 19084 19083 + 19084 19087 19088 + 19088 19085 19084 + 19085 19088 19089 + 19089 19086 19085 + 19086 19089 19090 + 19090 19091 19086 + 19086 19091 19082 + 19087 11733 11732 + 11732 19092 19087 + 19092 19093 19087 + 19088 19087 19093 + 19093 19094 19088 + 19088 19094 19095 + 19095 19089 19088 + 19090 19089 19095 + 11738 19092 11732 + 11738 19096 19092 + 19092 19096 19097 + 19097 19093 19092 + 19094 19093 19097 + 19097 19098 19094 + 19094 19098 19099 + 19099 19095 19094 + 19100 19095 19099 + 19095 19100 19090 + 19096 11738 19101 + 19101 19102 19096 + 19097 19096 19102 + 19102 19103 19097 + 19103 19104 19097 + 19098 19097 19104 + 11737 19101 11738 + 19105 19101 11737 + 19101 19105 19102 + 19102 19105 19106 + 19106 19103 19102 + 19103 19106 19107 + 19103 19107 19108 + 19108 19104 19103 + 19109 19104 19108 + 19104 19109 19098 + 11737 19110 19105 + 19105 19110 19111 + 19106 19105 19111 + 19111 19112 19106 + 19107 19106 19112 + 19112 19113 19107 + 19108 19107 19113 + 11737 19114 19110 + 19110 19114 19115 + 19115 19111 19110 + 19111 19115 19116 + 19111 19116 19117 + 19117 19112 19111 + 19112 19117 19113 + 19114 11737 11742 + 11742 19118 19114 + 19114 19118 19119 + 19119 19115 19114 + 19116 19115 19119 + 19119 19120 19116 + 19117 19116 19120 + 19121 19117 19120 + 19113 19117 19121 + 19121 19122 19113 + 19113 19122 19108 + 11741 19118 11742 + 19118 11741 19123 + 19123 19119 19118 + 19120 19119 19123 + 19123 11741 11740 + 11740 19124 19123 + 19125 19123 19124 + 19123 19125 19120 + 19126 19124 11740 + 19127 19124 19126 + 19124 19127 19125 + 19125 19127 19128 + 19128 19129 19125 + 19120 19125 19129 + 11740 11745 19126 + 19130 19126 11745 + 19131 19126 19130 + 19126 19131 19127 + 19127 19131 19132 + 19132 19128 19127 + 19133 19128 19132 + 19128 19133 19134 + 19134 19129 19128 + 11745 11749 19130 + 19135 19130 11749 + 19136 19130 19135 + 19130 19136 19131 + 19131 19136 19066 + 19066 19132 19131 + 19065 19132 19066 + 19132 19065 19133 + 11749 11754 19135 + 19137 19135 11754 + 19138 19135 19137 + 19135 19138 19136 + 19136 19138 19139 + 19139 19066 19136 + 19066 19139 19056 + 19056 19139 19140 + 19140 19057 19056 + 11754 19141 19137 + 19142 19137 19141 + 19143 19137 19142 + 19137 19143 19138 + 19139 19138 19143 + 19143 19140 19139 + 19144 19140 19143 + 19140 19144 19145 + 19145 19057 19140 + 19057 19145 19051 + 11753 19141 11754 + 19141 11753 19146 + 19146 19147 19141 + 19141 19147 19142 + 19148 19142 19147 + 19149 19142 19148 + 19142 19149 19143 + 19143 19149 19144 + 19150 19144 19149 + 19145 19144 19150 + 19146 11753 11759 + 11759 19151 19146 + 19152 19146 19151 + 19147 19146 19152 + 19152 19153 19147 + 19147 19153 19148 + 19154 19148 19153 + 19155 19148 19154 + 19148 19155 19149 + 19149 19155 19150 + 19156 19151 11759 + 19151 19156 19157 + 19157 19158 19151 + 19151 19158 19152 + 19159 19152 19158 + 19153 19152 19159 + 19159 19160 19153 + 19153 19160 19154 + 11759 11758 19156 + 19156 11758 19161 + 19161 19162 19156 + 19156 19162 19163 + 19163 19157 19156 + 19164 19157 19163 + 19158 19157 19164 + 19164 19165 19158 + 19158 19165 19159 + 11757 19161 11758 + 19166 19161 11757 + 19162 19161 19166 + 19166 19167 19162 + 19162 19167 19168 + 19168 19169 19162 + 19162 19169 19163 + 11757 11764 19166 + 18959 19166 11764 + 19167 19166 18959 + 18959 18964 19167 + 19168 19167 18964 + 18964 18969 19168 + 19170 19168 18969 + 19170 19169 19168 + 19169 19170 19171 + 19171 19163 19169 + 19172 19163 19171 + 19163 19172 19164 + 19173 19164 19172 + 19165 19164 19173 + 18969 19174 19170 + 19171 19170 19174 + 19174 19175 19171 + 19176 19171 19175 + 19171 19176 19172 + 19172 19176 19177 + 19177 19178 19172 + 19172 19178 19173 + 18968 19174 18969 + 19174 18968 19179 + 19179 19175 19174 + 19175 19179 18979 + 18979 19180 19175 + 19175 19180 19176 + 19176 19180 19181 + 19181 19177 19176 + 18974 19179 18968 + 18979 19179 18974 + 19133 19065 19064 + 19064 19182 19133 + 19133 19182 19183 + 19183 19184 19133 + 19184 19185 19133 + 19185 19134 19133 + 19063 19182 19064 + 19182 19063 19186 + 19186 19183 19182 + 19183 19186 19187 + 19187 19188 19183 + 19183 19188 19189 + 19189 19184 19183 + 19190 19186 19063 + 19187 19186 19190 + 19190 19191 19187 + 19187 19191 19192 + 19192 19193 19187 + 19188 19187 19193 + 19072 19190 19063 + 19194 19190 19072 + 19191 19190 19194 + 19191 19194 19195 + 19195 19192 19191 + 19192 19195 19196 + 19192 19196 19197 + 19197 19193 19192 + 19198 19193 19197 + 19193 19198 19188 + 19072 19077 19194 + 19194 19077 19082 + 19082 19091 19194 + 19091 19195 19194 + 19196 19195 19091 + 19091 19090 19196 + 19196 19090 19100 + 19100 19197 19196 + 19199 19197 19100 + 19197 19199 19198 + 19198 19199 19200 + 19200 19201 19198 + 19188 19198 19201 + 19201 19189 19188 + 19202 19189 19201 + 19202 19184 19189 + 19100 19203 19199 + 19200 19199 19203 + 19203 19204 19200 + 19204 19205 19200 + 19206 19200 19205 + 19206 19201 19200 + 19201 19206 19202 + 19099 19203 19100 + 19203 19099 19207 + 19207 19204 19203 + 19204 19207 19208 + 19208 19209 19204 + 19204 19209 19210 + 19210 19205 19204 + 19211 19205 19210 + 19205 19211 19206 + 19207 19099 19098 + 19098 19109 19207 + 19208 19207 19109 + 19109 19212 19208 + 19208 19212 19213 + 19213 19214 19208 + 19209 19208 19214 + 19214 19215 19209 + 19210 19209 19215 + 19215 19216 19210 + 19211 19210 19216 + 19108 19212 19109 + 19212 19108 19122 + 19122 19213 19212 + 19121 19213 19122 + 19213 19121 19217 + 19217 19214 19213 + 19214 19217 19215 + 19215 19217 19218 + 19218 19216 19215 + 19219 19216 19218 + 19216 19219 19211 + 19206 19211 19219 + 19202 19206 19219 + 19219 19220 19202 + 19184 19202 19220 + 19217 19121 19120 + 19218 19217 19120 + 19221 19218 19120 + 19219 19218 19221 + 19221 19220 19219 + 19220 19221 19185 + 19220 19185 19184 + 19120 19222 19221 + 19185 19221 19222 + 19222 19134 19185 + 19222 19129 19134 + 19129 19222 19120 + 19223 19177 19181 + 19177 19223 19224 + 19224 19178 19177 + 19178 19224 19225 + 19225 19173 19178 + 19181 19226 19223 + 19223 19226 19227 + 19227 19228 19223 + 19224 19223 19228 + 19229 19226 19181 + 19226 19229 19230 + 19230 19227 19226 + 19227 19230 19231 + 19231 19232 19227 + 19227 19232 19233 + 19233 19228 19227 + 19181 19234 19229 + 19229 19234 18978 + 18978 19235 19229 + 19229 19235 19236 + 19236 19230 19229 + 19231 19230 19236 + 19234 19181 19180 + 19180 18979 19234 + 18978 19234 18979 + 18977 19235 18978 + 19235 18977 18984 + 18984 19236 19235 + 18984 19237 19236 + 19236 19237 19231 + 19238 19231 19237 + 19232 19231 19238 + 19238 19239 19232 + 19232 19239 19240 + 19240 19233 19232 + 19241 19233 19240 + 19233 19241 19228 + 19228 19241 19224 + 19237 18984 19242 + 19242 19243 19237 + 19237 19243 19238 + 19244 19238 19243 + 19239 19238 19244 + 19244 19245 19239 + 19239 19245 19246 + 19246 19240 19239 + 18983 19242 18984 + 19247 19242 18983 + 19243 19242 19247 + 19247 19248 19243 + 19243 19248 19244 + 19249 19244 19248 + 19245 19244 19249 + 19249 19250 19245 + 19245 19250 19251 + 19251 19246 19245 + 18983 19252 19247 + 19247 19252 19253 + 19253 19254 19247 + 19254 19255 19247 + 19248 19247 19255 + 19255 19256 19248 + 19248 19256 19249 + 19257 19252 18983 + 19252 19257 19258 + 19258 19253 19252 + 19253 19258 19259 + 19259 19260 19253 + 19253 19260 19261 + 19261 19254 19253 + 18983 18982 19257 + 19257 18982 18989 + 18989 19262 19257 + 19258 19257 19262 + 19262 19263 19258 + 19259 19258 19263 + 19263 19264 19259 + 19259 19264 19265 + 19265 19266 19259 + 19260 19259 19266 + 19267 19262 18989 + 19262 19267 19268 + 19268 19263 19262 + 19264 19263 19268 + 19268 19269 19264 + 19264 19269 19270 + 19270 19271 19264 + 19264 19271 19265 + 18989 18988 19267 + 19267 18988 18994 + 18994 19272 19267 + 19267 19272 19273 + 19273 19268 19267 + 19269 19268 19273 + 19273 19274 19269 + 19270 19269 19274 + 19274 19275 19270 + 19276 19270 19275 + 19276 19271 19270 + 19003 19272 18994 + 19272 19003 19277 + 19277 19273 19272 + 19273 19277 19278 + 19278 19274 19273 + 19274 19278 19279 + 19279 19275 19274 + 19275 19279 19280 + 19280 19281 19275 + 19275 19281 19276 + 19277 19003 19282 + 19282 19283 19277 + 19278 19277 19283 + 19283 19284 19278 + 19279 19278 19284 + 19284 19285 19279 + 19280 19279 19285 + 19002 19282 19003 + 19012 19282 19002 + 19282 19012 19286 + 19286 19283 19282 + 19283 19286 19287 + 19287 19284 19283 + 19284 19287 19288 + 19288 19285 19284 + 19285 19288 19289 + 19289 19290 19285 + 19285 19290 19280 + 19286 19012 19291 + 19291 19292 19286 + 19287 19286 19292 + 19292 19293 19287 + 19288 19287 19293 + 19293 19294 19288 + 19289 19288 19294 + 19011 19291 19012 + 19021 19291 19011 + 19291 19021 19295 + 19295 19292 19291 + 19292 19295 19296 + 19296 19293 19292 + 19293 19296 19297 + 19297 19294 19293 + 19294 19297 19298 + 19298 19299 19294 + 19294 19299 19289 + 19295 19021 19300 + 19300 19301 19295 + 19296 19295 19301 + 19301 19302 19296 + 19297 19296 19302 + 19302 19303 19297 + 19298 19297 19303 + 19020 19300 19021 + 19304 19300 19020 + 19300 19304 19305 + 19305 19301 19300 + 19301 19305 19306 + 19306 19302 19301 + 19302 19306 19307 + 19307 19303 19302 + 19020 19025 19304 + 19304 19025 19308 + 19308 19309 19304 + 19305 19304 19309 + 19309 19310 19305 + 19306 19305 19310 + 19310 19311 19306 + 19307 19306 19311 + 19029 19308 19025 + 19312 19308 19029 + 19308 19312 19313 + 19313 19309 19308 + 19309 19313 19314 + 19314 19310 19309 + 19310 19314 19315 + 19315 19311 19310 + 19029 19033 19312 + 19312 19033 19316 + 19316 19317 19312 + 19313 19312 19317 + 19317 19318 19313 + 19314 19313 19318 + 19318 19319 19314 + 19315 19314 19319 + 19037 19316 19033 + 19320 19316 19037 + 19316 19320 19321 + 19321 19317 19316 + 19317 19321 19322 + 19322 19318 19317 + 19318 19322 19323 + 19323 19319 19318 + 19037 19042 19320 + 19320 19042 19324 + 19324 19325 19320 + 19321 19320 19325 + 19325 19326 19321 + 19322 19321 19326 + 19326 19327 19322 + 19323 19322 19327 + 19047 19324 19042 + 19328 19324 19047 + 19324 19328 19329 + 19329 19325 19324 + 19325 19329 19330 + 19330 19326 19325 + 19326 19330 19331 + 19331 19327 19326 + 19047 19332 19328 + 19333 19328 19332 + 19329 19328 19333 + 19333 19334 19329 + 19329 19334 19335 + 19335 19330 19329 + 19331 19330 19335 + 19332 19047 19046 + 19046 19052 19332 + 19332 19052 19336 + 19336 19337 19332 + 19332 19337 19333 + 19338 19333 19337 + 19334 19333 19338 + 19338 19339 19334 + 19334 19339 19340 + 19340 19335 19334 + 19336 19052 19051 + 19051 19145 19336 + 19150 19336 19145 + 19337 19336 19150 + 19150 19341 19337 + 19337 19341 19338 + 19338 19341 19342 + 19342 19343 19338 + 19339 19338 19343 + 19343 19344 19339 + 19340 19339 19344 + 19341 19150 19155 + 19155 19342 19341 + 19154 19342 19155 + 19342 19154 19345 + 19345 19343 19342 + 19343 19345 19346 + 19346 19344 19343 + 19344 19346 19347 + 19347 19348 19344 + 19344 19348 19340 + 19345 19154 19160 + 19160 19349 19345 + 19346 19345 19349 + 19349 19350 19346 + 19347 19346 19350 + 19350 19351 19347 + 19352 19347 19351 + 19348 19347 19352 + 19353 19349 19160 + 19349 19353 19354 + 19354 19350 19349 + 19350 19354 19355 + 19355 19351 19350 + 19351 19355 19356 + 19356 19357 19351 + 19351 19357 19352 + 19160 19159 19353 + 19353 19159 19165 + 19165 19358 19353 + 19354 19353 19358 + 19358 19359 19354 + 19355 19354 19359 + 19359 19360 19355 + 19356 19355 19360 + 19360 19361 19356 + 19362 19356 19361 + 19357 19356 19362 + 19173 19358 19165 + 19358 19173 19225 + 19225 19359 19358 + 19359 19225 19363 + 19363 19360 19359 + 19360 19363 19364 + 19364 19361 19360 + 19361 19364 19365 + 19365 19366 19361 + 19361 19366 19362 + 19363 19225 19224 + 19367 19363 19224 + 19364 19363 19367 + 19367 19368 19364 + 19364 19368 19369 + 19369 19365 19364 + 19370 19365 19369 + 19366 19365 19370 + 19224 19241 19367 + 19240 19367 19241 + 19368 19367 19240 + 19240 19246 19368 + 19368 19246 19251 + 19251 19369 19368 + 19371 19369 19251 + 19369 19371 19370 + 19370 19371 8716 + 8716 19372 19370 + 19373 19370 19372 + 19370 19373 19366 + 19366 19373 19374 + 19374 19362 19366 + 19251 19375 19371 + 19371 19375 8710 + 8710 8716 19371 + 19375 19251 19250 + 19250 8711 19375 + 8710 19375 8711 + 19376 8711 19250 + 8711 19376 8712 + 19377 8712 19376 + 8705 8712 19377 + 19377 8706 8705 + 19250 19249 19376 + 19376 19249 19256 + 19256 19378 19376 + 19376 19378 19377 + 19378 19379 19377 + 19380 19377 19379 + 8706 19377 19380 + 19255 19378 19256 + 19378 19255 19254 + 19254 19379 19378 + 19379 19254 19261 + 19379 19261 19380 + 19380 19261 19260 + 19260 19381 19380 + 19381 19382 19380 + 19383 19380 19382 + 19380 19383 8706 + 8706 19383 19384 + 19384 19385 8706 + 8706 19385 8707 + 19266 19381 19260 + 19381 19266 19386 + 19386 10972 19381 + 19381 10972 19387 + 19387 19382 19381 + 19382 19387 19388 + 19388 19389 19382 + 19382 19389 19383 + 19386 19266 19265 + 19265 19390 19386 + 10968 19386 19390 + 10972 19386 10968 + 19390 19265 19391 + 19391 19392 19390 + 19390 19392 19393 + 19393 10970 19390 + 19390 10970 10969 + 10969 10968 19390 + 19391 19265 19271 + 19271 19276 19391 + 19391 19276 19281 + 19281 19394 19391 + 19392 19391 19394 + 19394 19395 19392 + 19392 19395 10965 + 10965 19393 19392 + 10964 19393 10965 + 10964 10970 19393 + 19396 19394 19281 + 19394 19396 19397 + 19397 19395 19394 + 19395 19397 19398 + 19398 10965 19395 + 10965 19398 10960 + 10960 19398 19399 + 19399 10956 10960 + 19281 19280 19396 + 19396 19280 19290 + 19290 19400 19396 + 19397 19396 19400 + 19400 19401 19397 + 19398 19397 19401 + 19401 19399 19398 + 19402 19399 19401 + 19399 19402 19403 + 19403 10956 19399 + 10956 19403 10952 + 19404 19400 19290 + 19400 19404 19405 + 19405 19401 19400 + 19401 19405 19402 + 19402 19405 19406 + 19406 19407 19402 + 19403 19402 19407 + 19407 19408 19403 + 10952 19403 19408 + 19408 10947 10952 + 19290 19289 19404 + 19404 19289 19299 + 19299 19409 19404 + 19405 19404 19409 + 19409 19406 19405 + 19410 19406 19409 + 19406 19410 19411 + 19411 19407 19406 + 19407 19411 19412 + 19412 19408 19407 + 19408 19412 19413 + 19413 10947 19408 + 10947 19413 10948 + 19414 19409 19299 + 19409 19414 19410 + 19410 19414 19415 + 19415 19416 19410 + 19411 19410 19416 + 19416 19417 19411 + 19412 19411 19417 + 19417 19418 19412 + 19413 19412 19418 + 19299 19298 19414 + 19414 19298 19419 + 19419 19415 19414 + 19420 19415 19419 + 19415 19420 19421 + 19421 19416 19415 + 19416 19421 19422 + 19422 19417 19416 + 19417 19422 19423 + 19423 19418 19417 + 19303 19419 19298 + 19424 19419 19303 + 19419 19424 19420 + 19420 19424 19425 + 19425 19426 19420 + 19421 19420 19426 + 19426 19427 19421 + 19422 19421 19427 + 19427 19428 19422 + 19423 19422 19428 + 19303 19307 19424 + 19424 19307 19429 + 19429 19425 19424 + 19430 19425 19429 + 19425 19430 19431 + 19431 19426 19425 + 19426 19431 19432 + 19432 19427 19426 + 19427 19432 19433 + 19433 19428 19427 + 19311 19429 19307 + 19434 19429 19311 + 19429 19434 19430 + 19430 19434 19435 + 19435 19436 19430 + 19431 19430 19436 + 19436 19437 19431 + 19432 19431 19437 + 19437 19438 19432 + 19433 19432 19438 + 19311 19315 19434 + 19434 19315 19439 + 19439 19435 19434 + 19440 19435 19439 + 19435 19440 19441 + 19441 19436 19435 + 19436 19441 19442 + 19442 19437 19436 + 19437 19442 19443 + 19443 19438 19437 + 19319 19439 19315 + 19444 19439 19319 + 19439 19444 19440 + 19440 19444 19445 + 19445 19446 19440 + 19441 19440 19446 + 19446 19447 19441 + 19442 19441 19447 + 19447 19448 19442 + 19443 19442 19448 + 19319 19323 19444 + 19444 19323 19449 + 19449 19445 19444 + 19450 19445 19449 + 19445 19450 19451 + 19451 19446 19445 + 19446 19451 19452 + 19452 19447 19446 + 19447 19452 19453 + 19453 19448 19447 + 19327 19449 19323 + 19454 19449 19327 + 19449 19454 19450 + 19450 19454 19455 + 19455 19456 19450 + 19450 19456 19457 + 19457 19451 19450 + 19452 19451 19457 + 19327 19331 19454 + 19455 19454 19331 + 19331 19458 19455 + 19459 19455 19458 + 19456 19455 19459 + 19459 19460 19456 + 19456 19460 19461 + 19461 19457 19456 + 19462 19457 19461 + 19457 19462 19452 + 19335 19458 19331 + 19458 19335 19340 + 19340 19463 19458 + 19458 19463 19459 + 19459 19463 19464 + 19464 19465 19459 + 19460 19459 19465 + 19465 19466 19460 + 19461 19460 19466 + 19463 19340 19348 + 19348 19464 19463 + 19352 19464 19348 + 19464 19352 19467 + 19467 19465 19464 + 19465 19467 19468 + 19468 19466 19465 + 19466 19468 19469 + 19469 19470 19466 + 19466 19470 19461 + 19471 19461 19470 + 19461 19471 19462 + 19467 19352 19357 + 19357 19472 19467 + 19468 19467 19472 + 19472 19473 19468 + 19469 19468 19473 + 19473 19474 19469 + 19475 19469 19474 + 19470 19469 19475 + 19475 19476 19470 + 19470 19476 19471 + 19362 19472 19357 + 19472 19362 19374 + 19374 19473 19472 + 19473 19374 19477 + 19477 19474 19473 + 19474 19477 19478 + 19478 19479 19474 + 19474 19479 19475 + 19480 19475 19479 + 19476 19475 19480 + 19477 19374 19373 + 19373 19481 19477 + 19478 19477 19481 + 19481 19482 19478 + 19483 19478 19482 + 19479 19478 19483 + 19483 19484 19479 + 19479 19484 19480 + 19372 19481 19373 + 19481 19372 8715 + 8715 19482 19481 + 19482 8715 8719 + 8719 19485 19482 + 19482 19485 19483 + 19486 19483 19485 + 19484 19483 19486 + 8715 19372 8716 + 19485 8719 8718 + 8718 19487 19485 + 19485 19487 19486 + 19488 19486 19487 + 19489 19486 19488 + 19486 19489 19484 + 19484 19489 19490 + 19490 19480 19484 + 19491 19480 19490 + 19480 19491 19476 + 19487 8718 8723 + 8723 19492 19487 + 19487 19492 19488 + 19493 19488 19492 + 19494 19488 19493 + 19488 19494 19489 + 19489 19494 19495 + 19495 19490 19489 + 19496 19490 19495 + 19490 19496 19491 + 19492 8723 8722 + 8722 19497 19492 + 19492 19497 19493 + 19498 19493 19497 + 19499 19493 19498 + 19493 19499 19494 + 19494 19499 19500 + 19500 19495 19494 + 19501 19495 19500 + 19495 19501 19496 + 19497 8722 19502 + 19502 19503 19497 + 19497 19503 19498 + 9789 19498 19503 + 19504 19498 9789 + 19498 19504 19499 + 19499 19504 19505 + 19505 19500 19499 + 19502 8722 8721 + 8721 19506 19502 + 19507 19502 19506 + 19503 19502 19507 + 19507 9784 19503 + 19503 9784 9789 + 8729 19506 8721 + 19506 8729 19508 + 19506 19508 19507 + 9780 19507 19508 + 9784 19507 9780 + 19508 8729 8728 + 8728 19509 19508 + 19508 19509 9776 + 9776 9780 19508 + 8736 19509 8728 + 19509 8736 8741 + 8741 9776 19509 + 9789 9788 19504 + 19504 9788 19510 + 19510 19505 19504 + 19511 19505 19510 + 19505 19511 19512 + 19512 19500 19505 + 19500 19512 19501 + 19501 19512 19513 + 19513 19514 19501 + 19496 19501 19514 + 9793 19510 9788 + 19515 19510 9793 + 19510 19515 19511 + 19511 19515 19516 + 19516 19517 19511 + 19512 19511 19517 + 19517 19513 19512 + 19518 19513 19517 + 19514 19513 19518 + 9793 9797 19515 + 19516 19515 9797 + 9797 9805 19516 + 19519 19516 9805 + 19517 19516 19519 + 19519 19520 19517 + 19517 19520 19518 + 19521 19518 19520 + 19522 19518 19521 + 19518 19522 19514 + 9805 19523 19519 + 19519 19523 19524 + 19524 19525 19519 + 19520 19519 19525 + 19525 19526 19520 + 19520 19526 19521 + 9804 19523 9805 + 19523 9804 9810 + 9810 19524 19523 + 19527 19524 9810 + 19524 19527 19528 + 19528 19525 19524 + 19525 19528 19529 + 19529 19526 19525 + 19526 19529 19530 + 19530 19521 19526 + 9810 9815 19527 + 19527 9815 19531 + 19531 19532 19527 + 19528 19527 19532 + 19532 19533 19528 + 19529 19528 19533 + 19533 19534 19529 + 19530 19529 19534 + 19535 19531 9815 + 19536 19531 19535 + 19531 19536 19537 + 19537 19532 19531 + 19532 19537 19538 + 19538 19533 19532 + 19533 19538 19539 + 19539 19534 19533 + 9815 9814 19535 + 9820 19535 9814 + 19540 19535 9820 + 19535 19540 19536 + 19536 19540 19541 + 19541 19542 19536 + 19537 19536 19542 + 19542 19543 19537 + 19538 19537 19543 + 19543 19544 19538 + 19539 19538 19544 + 9820 9825 19540 + 19540 9825 19545 + 19545 19541 19540 + 19546 19541 19545 + 19541 19546 19547 + 19547 19542 19541 + 19542 19547 19548 + 19548 19543 19542 + 19543 19548 19549 + 19549 19544 19543 + 9830 19545 9825 + 10921 19545 9830 + 19545 10921 19546 + 19546 10921 10920 + 10920 10930 19546 + 19547 19546 10930 + 10930 10935 19547 + 19548 19547 10935 + 10935 19550 19548 + 19549 19548 19550 + 19550 19551 19549 + 19552 19549 19551 + 19544 19549 19552 + 19552 19553 19544 + 19544 19553 19539 + 19554 19539 19553 + 19534 19539 19554 + 10934 19550 10935 + 19550 10934 19555 + 19555 19551 19550 + 19551 19555 19556 + 19556 19557 19551 + 19551 19557 19552 + 19558 19552 19557 + 19553 19552 19558 + 19558 19559 19553 + 19553 19559 19554 + 19555 10934 10939 + 10939 10948 19555 + 19556 19555 10948 + 10948 19413 19556 + 19418 19556 19413 + 19557 19556 19418 + 19418 19423 19557 + 19557 19423 19558 + 19428 19558 19423 + 19559 19558 19428 + 19428 19433 19559 + 19559 19433 19560 + 19560 19554 19559 + 19561 19554 19560 + 19554 19561 19534 + 19534 19561 19530 + 19562 19530 19561 + 19521 19530 19562 + 19438 19560 19433 + 19563 19560 19438 + 19560 19563 19561 + 19561 19563 19562 + 19564 19562 19563 + 19565 19562 19564 + 19562 19565 19521 + 19521 19565 19522 + 19438 19443 19563 + 19563 19443 19564 + 19448 19564 19443 + 19566 19564 19448 + 19564 19566 19565 + 19522 19565 19566 + 19566 19567 19522 + 19514 19522 19567 + 19567 19568 19514 + 19514 19568 19496 + 19491 19496 19568 + 19448 19453 19566 + 19566 19453 19569 + 19569 19567 19566 + 19567 19569 19570 + 19570 19568 19567 + 19568 19570 19491 + 19476 19491 19570 + 19570 19471 19476 + 19462 19471 19570 + 19569 19453 19452 + 19452 19462 19569 + 19570 19569 19462 + 19387 10972 9745 + 9745 19571 19387 + 19571 19572 19387 + 19388 19387 19572 + 19572 19573 19388 + 19574 19388 19573 + 19389 19388 19574 + 9744 19571 9745 + 19571 9744 19575 + 19571 19575 19576 + 19576 19572 19571 + 19572 19576 19573 + 19573 19576 19577 + 19577 19578 19573 + 19573 19578 19574 + 19575 9744 9743 + 9743 19579 19575 + 19575 19579 19580 + 19580 19577 19575 + 19577 19576 19575 + 19579 9743 9742 + 9742 19581 19579 + 19579 19581 19582 + 19582 19580 19579 + 19580 19582 19583 + 19577 19580 19583 + 19584 19577 19583 + 19577 19584 19578 + 19578 19584 19585 + 19578 19585 19574 + 19581 9742 19586 + 19586 19587 19581 + 19582 19581 19587 + 19587 19588 19582 + 19583 19582 19588 + 19588 19589 19583 + 19584 19583 19589 + 19590 19584 19589 + 19584 19590 19585 + 9748 19586 9742 + 19591 19586 9748 + 19587 19586 19591 + 19587 19591 19592 + 19592 19588 19587 + 19589 19588 19592 + 19589 19592 19593 + 19593 19594 19589 + 19589 19594 19590 + 19595 19590 19594 + 19585 19590 19595 + 9748 9752 19591 + 19592 19591 9752 + 19593 19592 9752 + 19596 19593 9752 + 19597 19593 19596 + 19597 19594 19593 + 19594 19597 19595 + 19598 19595 19597 + 19585 19595 19598 + 19598 19574 19585 + 19574 19598 19599 + 19574 19599 19389 + 19600 19596 9752 + 19601 19596 19600 + 19601 19602 19596 + 19596 19602 19597 + 19597 19602 19603 + 19603 19598 19597 + 19599 19598 19603 + 10977 19600 9752 + 19604 19600 10977 + 19604 19605 19600 + 19600 19605 19601 + 19601 19605 19606 + 19607 19601 19606 + 19602 19601 19607 + 19607 19603 19602 + 19608 19603 19607 + 19603 19608 19599 + 10977 19609 19604 + 19604 19609 61 + 19610 19604 61 + 19605 19604 19610 + 19610 19606 19605 + 10976 19609 10977 + 19609 10976 19611 + 19611 61 19609 + 61 8701 19610 + 8707 19610 8701 + 8707 19606 19610 + 19606 8707 19385 + 19385 19612 19606 + 19606 19612 19607 + 19608 19607 19612 + 19612 19384 19608 + 19608 19384 19383 + 19599 19608 19383 + 19383 19389 19599 + 19384 19612 19385 + 11594 11598 19613 + 19613 11598 19614 + 19614 19615 19613 + 19616 19613 19615 + 19617 19613 19616 + 19613 19617 11594 + 11594 19617 11595 + 11597 19614 11598 + 19618 19614 11597 + 19615 19614 19618 + 19618 19619 19615 + 19615 19619 19620 + 19620 19621 19615 + 19615 19621 19616 + 11597 19622 19618 + 19618 19622 11346 + 11357 19618 11346 + 19619 19618 11357 + 11357 19623 19619 + 19619 19623 19624 + 19624 19620 19619 + 11597 11596 19622 + 19622 11596 11347 + 11347 11346 19622 + 19625 19620 19624 + 19620 19625 19626 + 19626 19621 19620 + 19621 19626 19627 + 19627 19616 19621 + 19628 19616 19627 + 19616 19628 19617 + 19617 19628 19629 + 19629 11595 19617 + 11590 11595 19629 + 19624 19630 19625 + 19625 19630 19631 + 19631 19632 19625 + 19626 19625 19632 + 19633 19630 19624 + 19630 19633 19634 + 19634 19631 19630 + 19631 19634 19635 + 19635 19636 19631 + 19631 19636 19637 + 19637 19632 19631 + 19624 19638 19633 + 19633 19638 19639 + 19639 19640 19633 + 19634 19633 19640 + 19640 19641 19634 + 19635 19634 19641 + 19638 19624 19623 + 19623 19642 19638 + 19638 19642 19643 + 19643 19639 19638 + 19642 19623 11357 + 11357 11356 19642 + 19642 11356 19644 + 19644 19643 19642 + 19643 19644 19645 + 19645 19646 19643 + 19643 19646 19647 + 19647 19648 19643 + 19640 19648 19647 + 19649 19644 11356 + 19645 19644 19649 + 19649 19650 19645 + 19651 19645 19650 + 19646 19645 19651 + 19651 19652 19646 + 19646 19652 19653 + 19653 19647 19646 + 11355 19649 11356 + 19654 19649 11355 + 19650 19649 19654 + 19650 19654 19655 + 19655 19656 19650 + 19650 19656 19651 + 19657 19651 19656 + 19651 19657 19658 + 19658 19652 19651 + 11355 19659 19654 + 19655 19654 19659 + 19659 19660 19655 + 19661 19655 19660 + 19655 19661 19662 + 19662 19656 19655 + 19656 19662 19657 + 19663 19657 19662 + 19658 19657 19663 + 11361 19659 11355 + 19659 11361 19664 + 19664 19660 19659 + 19665 19660 19664 + 19660 19665 19661 + 19666 19661 19665 + 19662 19661 19666 + 19666 19667 19662 + 19662 19667 19663 + 19664 11361 11360 + 11360 19668 19664 + 19669 19664 19668 + 19664 19669 19665 + 19665 19669 19670 + 19670 19671 19665 + 19665 19671 19666 + 11365 19668 11360 + 19672 19668 11365 + 19668 19672 19669 + 19670 19669 19672 + 19672 19673 19670 + 19674 19670 19673 + 19670 19674 19675 + 19675 19671 19670 + 19671 19675 19676 + 19676 19666 19671 + 11365 19677 19672 + 19672 19677 19678 + 19678 19673 19672 + 19679 19673 19678 + 19673 19679 19674 + 19680 19674 19679 + 19675 19674 19680 + 19677 11365 11364 + 11364 19681 19677 + 19678 19677 19681 + 19681 19682 19678 + 19683 19678 19682 + 19678 19683 19679 + 19679 19683 19684 + 19684 19685 19679 + 19679 19685 19680 + 19681 11364 11369 + 11369 19686 19681 + 19681 19686 19687 + 19687 19682 19681 + 19688 19682 19687 + 19682 19688 19683 + 19684 19683 19688 + 19686 11369 11374 + 11374 19689 19686 + 19687 19686 19689 + 19689 19690 19687 + 19691 19687 19690 + 19687 19691 19688 + 19688 19691 19692 + 19692 19693 19688 + 19688 19693 19684 + 19689 11374 11379 + 11379 19694 19689 + 19689 19694 19695 + 19695 19690 19689 + 19696 19690 19695 + 19690 19696 19691 + 19692 19691 19696 + 19694 11379 19697 + 19697 19698 19694 + 19695 19694 19698 + 19698 19699 19695 + 19700 19695 19699 + 19695 19700 19696 + 11378 19697 11379 + 19701 19697 11378 + 19698 19697 19701 + 19701 19702 19698 + 19698 19702 19703 + 19703 19699 19698 + 19704 19699 19703 + 19699 19704 19700 + 19705 19700 19704 + 19696 19700 19705 + 11378 11384 19701 + 19701 11384 11383 + 11383 19706 19701 + 19702 19701 19706 + 19706 19707 19702 + 19703 19702 19707 + 19707 19708 19703 + 19709 19703 19708 + 19703 19709 19704 + 19710 19706 11383 + 19707 19706 19710 + 19710 19711 19707 + 19707 19711 19712 + 19712 19708 19707 + 19713 19708 19712 + 19708 19713 19709 + 19714 19709 19713 + 19704 19709 19714 + 11383 11382 19710 + 19715 19710 11382 + 19711 19710 19715 + 19715 19716 19711 + 19712 19711 19716 + 19716 19717 19712 + 19718 19712 19717 + 19712 19718 19713 + 11382 19719 19715 + 19720 19715 19719 + 19716 19715 19720 + 19720 19721 19716 + 19716 19721 19722 + 19722 19717 19716 + 19723 19717 19722 + 19717 19723 19718 + 11388 19719 11382 + 19719 11388 19724 + 19719 19724 19720 + 19720 19724 19725 + 19725 19726 19720 + 19721 19720 19726 + 19726 19727 19721 + 19722 19721 19727 + 19724 11388 11387 + 11387 19728 19724 + 19724 19728 19725 + 19729 19725 19728 + 19725 19729 19730 + 19725 19730 19731 + 19731 19726 19725 + 19727 19726 19731 + 11387 11392 19728 + 19728 11392 19729 + 19729 11392 11391 + 11391 19732 19729 + 19732 19733 19729 + 19730 19729 19733 + 19733 19734 19730 + 19730 19734 19735 + 19735 19731 19730 + 19736 19731 19735 + 19731 19736 19727 + 19737 19732 11391 + 19732 19737 19738 + 19738 19739 19732 + 19732 19739 19740 + 19740 19733 19732 + 19733 19740 19741 + 19741 19734 19733 + 11391 11390 19737 + 11401 19737 11390 + 19738 19737 11401 + 11401 19742 19738 + 19738 19742 19743 + 19744 19738 19743 + 19739 19738 19744 + 19744 19745 19739 + 19740 19739 19745 + 19745 19746 19740 + 19741 19740 19746 + 19742 11401 19747 + 19747 19748 19742 + 19742 19748 19749 + 19749 19750 19742 + 19742 19750 19743 + 19747 11401 19751 + 19751 19752 19747 + 19747 19752 19753 + 19753 19754 19747 + 19748 19747 19754 + 19754 19755 19748 + 19749 19748 19755 + 11400 19751 11401 + 19756 19751 11400 + 19756 19752 19751 + 19752 19756 11424 + 11424 19753 19752 + 11423 19753 11424 + 19753 11423 19757 + 19757 19754 19753 + 19754 19757 19758 + 19758 19755 19754 + 11400 11406 19756 + 19756 11406 11411 + 19756 11411 11424 + 19759 19755 19758 + 19755 19759 19749 + 19760 19749 19759 + 19749 19760 19750 + 19750 19760 19761 + 19761 19743 19750 + 19762 19759 19758 + 19763 19759 19762 + 19759 19763 19760 + 19760 19763 19764 + 19761 19760 19764 + 19764 19765 19761 + 19766 19761 19765 + 19761 19766 19743 + 19758 19767 19762 + 19767 19768 19762 + 19769 19762 19768 + 19762 19769 19763 + 19763 19769 19770 + 19770 19764 19763 + 19771 19767 19758 + 19772 19767 19771 + 19767 19772 11431 + 11431 19768 19767 + 11431 11430 19768 + 19768 11430 19769 + 19758 19757 19771 + 19771 19757 11423 + 11423 11422 19771 + 19772 19771 11422 + 11422 11421 19772 + 11431 19772 11421 + 19769 11430 11429 + 11429 19773 19769 + 19773 19774 19769 + 19774 19770 19769 + 19775 19770 19774 + 19770 19775 19764 + 19764 19775 19776 + 19776 19765 19764 + 19765 19776 19777 + 19765 19777 19766 + 19778 19773 11429 + 19779 19773 19778 + 19773 19779 19780 + 19780 19774 19773 + 19780 19781 19774 + 19774 19781 19775 + 19775 19781 19782 + 19782 19776 19775 + 11429 11428 19778 + 19778 11428 11440 + 11440 19783 19778 + 19779 19778 19783 + 19784 19783 11440 + 19785 19783 19784 + 19783 19785 19779 + 11440 19786 19784 + 19784 19786 19787 + 19787 19788 19784 + 19785 19784 19788 + 19788 19789 19785 + 19785 19789 19790 + 19779 19785 19790 + 19791 19786 11440 + 19786 19791 19792 + 19792 19787 19786 + 19793 19787 19792 + 19787 19793 19794 + 19794 19788 19787 + 19789 19788 19794 + 19789 19794 19795 + 19795 19790 19789 + 11440 19796 19791 + 19791 19796 19797 + 19797 19798 19791 + 19791 19798 19799 + 19799 19792 19791 + 19800 19792 19799 + 19792 19800 19793 + 19796 11440 11439 + 11439 11445 19796 + 19797 19796 11445 + 11445 11453 19797 + 19801 19797 11453 + 19798 19797 19801 + 19801 19802 19798 + 19798 19802 19803 + 19803 19799 19798 + 19799 19803 19804 + 19799 19804 19800 + 11453 11457 19801 + 19801 11457 11462 + 11462 19805 19801 + 19802 19801 19805 + 19805 19806 19802 + 19802 19806 19807 + 19807 19803 19802 + 19804 19803 19807 + 19807 19808 19804 + 19800 19804 19808 + 19808 19809 19800 + 19793 19800 19809 + 11467 19805 11462 + 19805 11467 19810 + 19810 19806 19805 + 19806 19810 10876 + 10876 10875 19806 + 19806 10875 19807 + 10881 19807 10875 + 19807 10881 19811 + 19811 19808 19807 + 19810 11467 11466 + 11466 19812 19810 + 19810 19812 10867 + 10867 10876 19810 + 19813 19812 11466 + 19812 19813 10868 + 10868 10867 19812 + 11466 11471 19813 + 19813 11471 11476 + 11476 19814 19813 + 19813 19814 10863 + 10863 10868 19813 + 19815 19814 11476 + 19814 19815 19816 + 19816 10863 19814 + 10863 19816 10856 + 10856 19816 19817 + 19817 10851 10856 + 11476 19818 19815 + 19815 19818 19819 + 19819 19820 19815 + 19815 19820 19817 + 19817 19816 19815 + 19818 11476 11475 + 11475 11481 19818 + 19819 19818 11481 + 11481 19821 19819 + 19822 19819 19821 + 19820 19819 19822 + 19822 19823 19820 + 19820 19823 19824 + 19824 19817 19820 + 10851 19817 19824 + 19824 10852 10851 + 11486 19821 11481 + 19821 11486 11491 + 11491 19825 19821 + 19821 19825 19822 + 19822 19825 19826 + 19826 19827 19822 + 19823 19822 19827 + 19827 19828 19823 + 19824 19823 19828 + 19828 19829 19824 + 10852 19824 19829 + 19829 10846 10852 + 19825 11491 19830 + 19830 19826 19825 + 19831 19826 19830 + 19826 19831 19832 + 19832 19827 19826 + 19827 19832 19833 + 19833 19828 19827 + 19828 19833 19834 + 19834 19829 19828 + 19835 19830 11491 + 19836 19830 19835 + 19830 19836 19831 + 19831 19836 19837 + 19837 19838 19831 + 19831 19838 19839 + 19839 19832 19831 + 19833 19832 19839 + 11491 11490 19835 + 11496 19835 11490 + 19840 19835 11496 + 19835 19840 19836 + 19837 19836 19840 + 19840 19841 19837 + 19842 19837 19841 + 19837 19842 19843 + 19843 19838 19837 + 19838 19843 19844 + 19844 19839 19838 + 11496 19845 19840 + 19840 19845 19846 + 19846 19841 19840 + 19847 19841 19846 + 19841 19847 19842 + 19848 19842 19847 + 19843 19842 19848 + 19845 11496 11495 + 11495 11501 19845 + 19846 19845 11501 + 11501 19849 19846 + 19850 19846 19849 + 19846 19850 19847 + 19847 19850 19851 + 19851 19852 19847 + 19847 19852 19848 + 11505 19849 11501 + 19853 19849 11505 + 19849 19853 19850 + 19851 19850 19853 + 19853 19854 19851 + 19855 19851 19854 + 19851 19855 19856 + 19856 19852 19851 + 19852 19856 19857 + 19857 19848 19852 + 11505 19858 19853 + 19853 19858 19859 + 19859 19854 19853 + 19860 19854 19859 + 19854 19860 19855 + 19861 19855 19860 + 19856 19855 19861 + 19858 11505 11510 + 11510 19862 19858 + 19859 19858 19862 + 19862 19863 19859 + 19864 19859 19863 + 19859 19864 19860 + 19860 19864 19865 + 19865 19866 19860 + 19860 19866 19861 + 19862 11510 11509 + 11509 19867 19862 + 19862 19867 19868 + 19868 19863 19862 + 19869 19863 19868 + 19863 19869 19864 + 19865 19864 19869 + 19867 11509 11518 + 11518 19870 19867 + 19868 19867 19870 + 19870 19871 19868 + 19872 19868 19871 + 19868 19872 19869 + 19869 19872 19873 + 19873 19874 19869 + 19869 19874 19865 + 19870 11518 11517 + 11517 19875 19870 + 19870 19875 19876 + 19876 19871 19870 + 19877 19871 19876 + 19871 19877 19872 + 19873 19872 19877 + 19875 11517 11522 + 11522 19878 19875 + 19876 19875 19878 + 19878 19879 19876 + 19880 19876 19879 + 19876 19880 19877 + 19877 19880 19881 + 19881 19882 19877 + 19877 19882 19873 + 19878 11522 11521 + 11521 19883 19878 + 19878 19883 19884 + 19884 19879 19878 + 19885 19879 19884 + 19879 19885 19880 + 19881 19880 19885 + 19883 11521 11529 + 11529 19886 19883 + 19884 19883 19886 + 19886 19887 19884 + 19888 19884 19887 + 19884 19888 19885 + 19885 19888 19889 + 19889 19890 19885 + 19885 19890 19881 + 19886 11529 11528 + 11528 19891 19886 + 19886 19891 19892 + 19892 19887 19886 + 19893 19887 19892 + 19887 19893 19888 + 19889 19888 19893 + 19891 11528 11537 + 11537 19894 19891 + 19892 19891 19894 + 19894 19895 19892 + 19896 19892 19895 + 19892 19896 19893 + 19893 19896 19897 + 19897 19898 19893 + 19893 19898 19889 + 19894 11537 11536 + 11536 19899 19894 + 19894 19899 19900 + 19900 19895 19894 + 19901 19895 19900 + 19895 19901 19896 + 19897 19896 19901 + 19899 11536 19902 + 19902 19903 19899 + 19900 19899 19903 + 19903 19904 19900 + 19905 19900 19904 + 19900 19905 19901 + 11541 19902 11536 + 19906 19902 11541 + 19903 19902 19906 + 19906 19907 19903 + 19903 19907 19908 + 19908 19904 19903 + 19909 19904 19908 + 19904 19909 19905 + 19910 19905 19909 + 19901 19905 19910 + 11541 11545 19906 + 19906 11545 11550 + 11550 19911 19906 + 19907 19906 19911 + 19911 19912 19907 + 19908 19907 19912 + 19912 19913 19908 + 19914 19908 19913 + 19908 19914 19909 + 19915 19911 11550 + 19912 19911 19915 + 19915 19916 19912 + 19912 19916 19917 + 19917 19913 19912 + 19918 19913 19917 + 19913 19918 19914 + 19919 19914 19918 + 19909 19914 19919 + 11550 11555 19915 + 19915 11555 19920 + 19920 19921 19915 + 19916 19915 19921 + 19921 19922 19916 + 19917 19916 19922 + 19922 19923 19917 + 19924 19917 19923 + 19917 19924 19918 + 11554 19920 11555 + 19920 11554 19925 + 19925 19926 19920 + 19920 19926 19927 + 19927 19921 19920 + 19922 19921 19927 + 19927 19928 19922 + 19922 19928 19929 + 19929 19923 19922 + 19925 11554 11559 + 11559 11564 19925 + 19930 19925 11564 + 19926 19925 19930 + 19930 19931 19926 + 19927 19926 19931 + 19931 19932 19927 + 19928 19927 19932 + 19932 19933 19928 + 19929 19928 19933 + 11564 19934 19930 + 19935 19930 19934 + 19931 19930 19935 + 19935 19936 19931 + 19931 19936 19937 + 19937 19932 19931 + 19933 19932 19937 + 19938 19934 11564 + 19939 19934 19938 + 19934 19939 19935 + 19940 19935 19939 + 19936 19935 19940 + 19940 19941 19936 + 19937 19936 19941 + 11564 11563 19938 + 11569 19938 11563 + 19942 19938 11569 + 19938 19942 19939 + 19939 19942 19943 + 19943 19944 19939 + 19939 19944 19940 + 19945 19940 19944 + 19941 19940 19945 + 11569 19946 19942 + 19942 19946 19947 + 19947 19943 19942 + 19948 19943 19947 + 19943 19948 19949 + 19949 19944 19943 + 19944 19949 19945 + 19950 19946 11569 + 19946 19950 19951 + 19951 19947 19946 + 19947 19951 19952 + 19952 19953 19947 + 19947 19953 19948 + 19954 19948 19953 + 19949 19948 19954 + 11569 11568 19950 + 19950 11568 11567 + 11567 19955 19950 + 19950 19955 19956 + 19956 19951 19950 + 19952 19951 19956 + 19956 19957 19952 + 19952 19957 19958 + 19958 19959 19952 + 19953 19952 19959 + 11576 19955 11567 + 19955 11576 19960 + 19960 19956 19955 + 19956 19960 19961 + 19961 19957 19956 + 19957 19961 19962 + 19962 19958 19957 + 11580 19960 11576 + 19961 19960 11580 + 11580 19963 19961 + 19961 19963 19964 + 19964 19962 19961 + 19965 19962 19964 + 19958 19962 19965 + 19965 19966 19958 + 19958 19966 19967 + 19967 19959 19958 + 11585 19963 11580 + 19963 11585 19968 + 19968 19964 19963 + 19964 19968 19969 + 19969 19970 19964 + 19964 19970 19965 + 19965 19970 19971 + 19971 19972 19965 + 19966 19965 19972 + 19973 19968 11585 + 19969 19968 19973 + 19973 19974 19969 + 19975 19969 19974 + 19970 19969 19975 + 19975 19971 19970 + 11585 11590 19973 + 19629 19973 11590 + 19974 19973 19629 + 19629 19976 19974 + 19974 19976 19977 + 19977 19978 19974 + 19974 19978 19975 + 19979 19975 19978 + 19971 19975 19979 + 19976 19629 19628 + 19628 19980 19976 + 19976 19980 19981 + 19981 19982 19976 + 19982 19977 19976 + 19983 19977 19982 + 19978 19977 19983 + 19983 19984 19978 + 19978 19984 19979 + 19627 19980 19628 + 19980 19627 19985 + 19985 19981 19980 + 19981 19985 19986 + 19981 19986 19987 + 19987 19982 19981 + 19988 19982 19987 + 19982 19988 19983 + 19983 19988 19989 + 19984 19983 19989 + 19985 19627 19626 + 19990 19985 19626 + 19986 19985 19990 + 19990 19991 19986 + 19986 19991 19992 + 19987 19986 19992 + 19993 19987 19992 + 19988 19987 19993 + 19993 19989 19988 + 19994 19989 19993 + 19989 19994 19984 + 19626 19995 19990 + 19996 19990 19995 + 19990 19996 19991 + 19991 19996 19997 + 19997 19998 19991 + 19991 19998 19992 + 19632 19995 19626 + 19995 19632 19637 + 19637 19999 19995 + 19995 19999 19996 + 19997 19996 19999 + 19999 20000 19997 + 20001 19997 20000 + 19997 20001 19998 + 19998 20001 20002 + 20002 19992 19998 + 19999 19637 20003 + 20003 20000 19999 + 20000 20003 20004 + 20004 20005 20000 + 20000 20005 20001 + 20001 20005 20006 + 20002 20001 20006 + 20007 20003 19637 + 20004 20003 20007 + 20007 20008 20004 + 20009 20004 20008 + 20005 20004 20009 + 20009 20006 20005 + 19637 19636 20007 + 20010 20007 19636 + 20007 20010 20011 + 20011 20008 20007 + 20008 20011 20012 + 20012 20013 20008 + 20008 20013 20009 + 20014 20009 20013 + 20009 20014 20006 + 19636 19635 20010 + 20010 19635 20015 + 20015 20016 20010 + 20011 20010 20016 + 20016 20017 20011 + 20011 20017 20018 + 20012 20011 20018 + 19641 20015 19635 + 20015 19641 20019 + 20019 20020 20015 + 20015 20020 20021 + 20021 20016 20015 + 20017 20016 20021 + 20021 20022 20017 + 20017 20022 20023 + 20023 20018 20017 + 20019 19641 19640 + 19640 20024 20019 + 20025 20019 20024 + 20020 20019 20025 + 20025 20026 20020 + 20020 20026 20027 + 20027 20021 20020 + 20022 20021 20027 + 20027 20028 20022 + 20023 20022 20028 + 19647 20024 19640 + 20024 19647 19653 + 19653 20029 20024 + 20024 20029 20025 + 20030 20025 20029 + 20025 20030 20031 + 20031 20026 20025 + 20026 20031 20032 + 20032 20027 20026 + 20027 20032 20033 + 20033 20028 20027 + 20034 20029 19653 + 20029 20034 20030 + 20030 20034 20035 + 20036 20030 20035 + 20031 20030 20036 + 20036 20037 20031 + 20031 20037 20038 + 20038 20032 20031 + 20033 20032 20038 + 19653 20039 20034 + 20034 20039 20040 + 20040 20035 20034 + 11018 20035 20040 + 20035 11018 11025 + 11025 20041 20035 + 20035 20041 20036 + 20039 19653 19652 + 19652 19658 20039 + 20040 20039 19658 + 19658 20042 20040 + 20043 20040 20042 + 20040 20043 11018 + 11018 20043 11019 + 11019 20043 20044 + 20044 20045 11019 + 11020 11019 20045 + 19663 20042 19658 + 20044 20042 19663 + 20042 20044 20043 + 19663 20046 20044 + 20044 20046 20047 + 20047 20045 20044 + 20048 20045 20047 + 20045 20048 11020 + 11014 11020 20048 + 20048 20049 11014 + 11015 11014 20049 + 20046 19663 19667 + 19667 20050 20046 + 20047 20046 20050 + 20050 20051 20047 + 20052 20047 20051 + 20047 20052 20048 + 20048 20052 20053 + 20053 20049 20048 + 20054 20049 20053 + 20049 20054 11015 + 11016 11015 20054 + 20050 19667 19666 + 19666 19676 20050 + 20050 19676 20055 + 20055 20051 20050 + 20056 20051 20055 + 20051 20056 20052 + 20053 20052 20056 + 20056 20057 20053 + 20058 20053 20057 + 20053 20058 20054 + 20055 19676 19675 + 19675 20059 20055 + 20060 20055 20059 + 20055 20060 20056 + 20056 20060 20061 + 20061 20057 20056 + 20062 20057 20061 + 20057 20062 20058 + 20063 20058 20062 + 20054 20058 20063 + 19680 20059 19675 + 20064 20059 19680 + 20059 20064 20060 + 20061 20060 20064 + 20064 20065 20061 + 20066 20061 20065 + 20061 20066 20062 + 20062 20066 20067 + 20067 20068 20062 + 20062 20068 20063 + 19680 20069 20064 + 20064 20069 20070 + 20070 20065 20064 + 20071 20065 20070 + 20065 20071 20066 + 20067 20066 20071 + 20069 19680 19685 + 19685 20072 20069 + 20070 20069 20072 + 20072 20073 20070 + 20074 20070 20073 + 20070 20074 20071 + 20071 20074 20075 + 20075 20076 20071 + 20071 20076 20067 + 20072 19685 19684 + 19684 20077 20072 + 20072 20077 20078 + 20078 20073 20072 + 20079 20073 20078 + 20073 20079 20074 + 20075 20074 20079 + 20077 19684 19693 + 19693 20080 20077 + 20078 20077 20080 + 20080 20081 20078 + 20082 20078 20081 + 20078 20082 20079 + 20079 20082 20083 + 20083 20084 20079 + 20079 20084 20075 + 20080 19693 19692 + 19692 20085 20080 + 20080 20085 20086 + 20086 20081 20080 + 20087 20081 20086 + 20081 20087 20082 + 20083 20082 20087 + 20085 19692 20088 + 20088 20089 20085 + 20086 20085 20089 + 20089 20090 20086 + 20091 20086 20090 + 20086 20091 20087 + 19696 20088 19692 + 19705 20088 19696 + 20089 20088 19705 + 19705 20092 20089 + 20089 20092 20093 + 20093 20090 20089 + 19919 20090 20093 + 20090 19919 20091 + 19918 20091 19919 + 20087 20091 19918 + 19918 19924 20087 + 20087 19924 20083 + 20092 19705 20094 + 20094 20095 20092 + 20093 20092 20095 + 20095 20096 20093 + 20097 20093 20096 + 20093 20097 19919 + 19919 20097 19909 + 19909 20097 19910 + 19704 20094 19705 + 19714 20094 19704 + 20095 20094 19714 + 19714 20098 20095 + 20095 20098 20099 + 20099 20096 20095 + 19910 20096 20099 + 20096 19910 20097 + 20098 19714 20100 + 20100 20101 20098 + 20099 20098 20101 + 20101 20102 20099 + 20103 20099 20102 + 20099 20103 19910 + 19910 20103 19901 + 19901 20103 19897 + 19713 20100 19714 + 20104 20100 19713 + 20101 20100 20104 + 20104 20105 20101 + 20101 20105 20106 + 20106 20102 20101 + 19897 20102 20106 + 20102 19897 20103 + 19713 19718 20104 + 20104 19718 19723 + 19723 20107 20104 + 20105 20104 20107 + 20107 20108 20105 + 20106 20105 20108 + 20108 20109 20106 + 19898 20106 20109 + 20106 19898 19897 + 20110 20107 19723 + 20108 20107 20110 + 20110 20111 20108 + 20108 20111 20112 + 20112 20109 20108 + 19889 20109 20112 + 20109 19889 19898 + 19723 20113 20110 + 20110 20113 20114 + 20114 20115 20110 + 20111 20110 20115 + 20115 20116 20111 + 20112 20111 20116 + 19722 20113 19723 + 20113 19722 20117 + 20117 20114 20113 + 20114 20117 20118 + 20118 20119 20114 + 20114 20119 20120 + 20120 20115 20114 + 20116 20115 20120 + 19727 20117 19722 + 20118 20117 19727 + 19727 19736 20118 + 20118 19736 20121 + 20121 20122 20118 + 20119 20118 20122 + 20122 20123 20119 + 20120 20119 20123 + 20123 20124 20120 + 20125 20120 20124 + 20120 20125 20116 + 19735 20121 19736 + 20121 19735 20126 + 20126 20127 20121 + 20121 20127 20128 + 20128 20122 20121 + 20123 20122 20128 + 20128 20129 20123 + 20123 20129 20130 + 20130 20124 20123 + 20126 19735 19734 + 19734 19741 20126 + 20131 20126 19741 + 20127 20126 20131 + 20131 20132 20127 + 20128 20127 20132 + 20132 20133 20128 + 20129 20128 20133 + 20133 20134 20129 + 20130 20129 20134 + 19741 20135 20131 + 20136 20131 20135 + 20132 20131 20136 + 20136 20137 20132 + 20132 20137 20138 + 20138 20133 20132 + 20134 20133 20138 + 19746 20135 19741 + 20135 19746 20139 + 20139 20140 20135 + 20135 20140 20136 + 20136 20140 20141 + 20141 20142 20136 + 20137 20136 20142 + 20142 20143 20137 + 20138 20137 20143 + 20139 19746 19745 + 19745 20144 20139 + 20145 20139 20144 + 20140 20139 20145 + 20145 20141 20140 + 20146 20141 20145 + 20141 20146 20147 + 20147 20142 20141 + 20143 20142 20147 + 20148 20144 19745 + 20144 20148 20149 + 20149 20150 20144 + 20144 20150 20145 + 20150 20151 20145 + 20146 20145 20151 + 19745 19744 20148 + 20148 19744 20152 + 20152 20153 20148 + 20149 20148 20153 + 20154 20149 20153 + 20155 20149 20154 + 20150 20149 20155 + 19743 20152 19744 + 20156 20152 19743 + 20153 20152 20156 + 20156 20157 20153 + 20153 20157 20158 + 20158 20159 20153 + 20153 20159 20154 + 19743 19766 20156 + 20160 20156 19766 + 20157 20156 20160 + 20160 20161 20157 + 20157 20161 20162 + 20162 20158 20157 + 20163 20158 20162 + 20158 20163 20159 + 20159 20163 20164 + 20164 20154 20159 + 19766 19777 20160 + 19777 20165 20160 + 20166 20160 20165 + 20160 20166 20167 + 20167 20161 20160 + 20161 20167 20168 + 20168 20162 20161 + 19777 19776 20165 + 19776 19782 20165 + 19782 20169 20165 + 20165 20169 20166 + 20170 20166 20169 + 20167 20166 20170 + 20170 20171 20167 + 20167 20171 20172 + 20172 20168 20167 + 20173 20168 20172 + 20162 20168 20173 + 20174 20169 19782 + 20169 20174 20170 + 20175 20170 20174 + 20175 20171 20170 + 20171 20175 20176 + 20176 20172 20171 + 20176 20177 20172 + 20172 20177 20173 + 20178 20174 19782 + 20179 20174 20178 + 20174 20179 20175 + 20175 20179 19779 + 20176 20175 19779 + 19790 20176 19779 + 20177 20176 19790 + 19790 20180 20177 + 20173 20177 20180 + 19781 20178 19782 + 20178 19781 19780 + 20179 20178 19780 + 20179 19780 19779 + 19790 19795 20180 + 20180 19795 20181 + 20181 20182 20180 + 20180 20182 20173 + 20182 20183 20173 + 20183 20184 20173 + 20185 20173 20184 + 20173 20185 20162 + 20181 19795 20186 + 20186 20187 20181 + 20188 20181 20187 + 20188 20182 20181 + 20182 20188 20189 + 20189 20183 20182 + 19795 19794 20186 + 19794 19793 20186 + 19809 20186 19793 + 20186 19809 20190 + 20190 20191 20186 + 20186 20191 20192 + 20192 20187 20186 + 20193 20187 20192 + 20187 20193 20188 + 20188 20193 20194 + 20189 20188 20194 + 20190 19809 19808 + 19808 19811 20190 + 20190 19811 20195 + 20195 20196 20190 + 20191 20190 20196 + 20196 20197 20191 + 20192 20191 20197 + 20197 20198 20192 + 20193 20192 20198 + 20198 20199 20193 + 20193 20199 20194 + 10880 20195 19811 + 10886 20195 10880 + 20195 10886 20200 + 20200 20196 20195 + 20197 20196 20200 + 20200 20201 20197 + 20197 20201 20202 + 20202 20198 20197 + 20199 20198 20202 + 19811 10881 10880 + 20200 10886 10885 + 10885 20203 20200 + 20201 20200 20203 + 20203 20204 20201 + 20202 20201 20204 + 20204 20205 20202 + 20199 20202 20205 + 20205 20206 20199 + 20199 20206 20194 + 10890 20203 10885 + 20204 20203 10890 + 10890 10894 20204 + 20204 10894 10899 + 10899 20205 20204 + 20206 20205 10899 + 20206 10899 10898 + 10898 20194 20206 + 20194 10898 20207 + 20194 20207 20208 + 20208 20209 20194 + 20194 20209 20189 + 20207 10898 20210 + 20210 20211 20207 + 20208 20207 20211 + 20212 20208 20211 + 20213 20208 20212 + 20209 20208 20213 + 10897 20210 10898 + 10909 20210 10897 + 10909 20211 20210 + 20211 10909 20214 + 20214 20215 20211 + 20211 20215 20212 + 20214 10909 10686 + 20216 20214 10686 + 20217 20214 20216 + 20214 20217 20215 + 20215 20217 20218 + 20218 20219 20215 + 20215 20219 20212 + 10686 20220 20216 + 20220 20221 20216 + 20222 20216 20221 + 20216 20222 20223 + 20216 20223 20217 + 20218 20217 20223 + 10693 20220 10686 + 20220 10693 20224 + 20220 20224 20225 + 20225 20221 20220 + 20221 20225 20226 + 20221 20226 20222 + 20227 20222 20226 + 20223 20222 20227 + 20227 20228 20223 + 20223 20228 20218 + 20224 10693 10692 + 10692 20229 20224 + 20224 20229 20230 + 20230 20225 20224 + 20226 20225 20230 + 20230 20231 20226 + 20226 20231 20227 + 20232 20227 20231 + 20227 20232 20233 + 20233 20228 20227 + 20229 10692 20234 + 20229 20234 20235 + 20235 20236 20229 + 20229 20236 20230 + 20237 20230 20236 + 20230 20237 20238 + 20238 20231 20230 + 20231 20238 20232 + 20234 10692 20239 + 20239 20240 20234 + 20235 20234 20240 + 20241 20235 20240 + 20242 20235 20241 + 20236 20235 20242 + 20236 20242 20237 + 20243 20237 20242 + 20238 20237 20243 + 20244 20239 10692 + 20245 20239 20244 + 20240 20239 20245 + 20240 20245 20246 + 20246 20247 20240 + 20240 20247 20241 + 10698 20244 10692 + 20248 20244 10698 + 20244 20248 20249 + 20244 20249 20245 + 20245 20249 20250 + 20246 20245 20250 + 20251 20246 20250 + 20252 20246 20251 + 20247 20246 20252 + 10698 10704 20248 + 20248 10704 20253 + 20253 20254 20248 + 20254 20255 20248 + 20249 20248 20255 + 20255 20250 20249 + 20250 20255 20256 + 20250 20256 20257 + 20257 20251 20250 + 10703 20253 10704 + 10703 20258 20253 + 20253 20258 20259 + 20259 20254 20253 + 20254 20259 20260 + 20254 20260 20256 + 20256 20255 20254 + 20258 10703 10708 + 10708 20261 20258 + 20258 20261 20262 + 20259 20258 20262 + 20260 20259 20262 + 20262 20263 20260 + 20260 20263 20264 + 20256 20260 20264 + 20264 20257 20256 + 20265 20257 20264 + 20251 20257 20265 + 10708 10707 20261 + 20261 10707 20266 + 20266 20262 20261 + 20263 20262 20266 + 20266 20267 20263 + 20263 20267 20268 + 20268 20264 20263 + 20264 20268 20269 + 20264 20269 20265 + 20270 20266 10707 + 20270 20271 20266 + 20271 20267 20266 + 20267 20271 20272 + 20272 20268 20267 + 20269 20268 20272 + 20272 20273 20269 + 20265 20269 20273 + 10712 20270 10707 + 20274 20270 10712 + 20270 20274 20271 + 20271 20274 20275 + 20275 20272 20271 + 20272 20275 20276 + 20276 20273 20272 + 10712 10711 20274 + 20275 20274 10711 + 20277 20275 10711 + 20276 20275 20277 + 20277 20278 20276 + 20276 20278 20279 + 20279 20280 20276 + 20273 20276 20280 + 10711 20281 20277 + 20282 20277 20281 + 20277 20282 20283 + 20283 20278 20277 + 20278 20283 20284 + 20284 20279 20278 + 10716 20281 10711 + 20281 10716 10721 + 20281 10721 20282 + 20282 10721 20285 + 20285 20286 20282 + 20283 20282 20286 + 20286 20287 20283 + 20283 20287 20288 + 20288 20284 20283 + 10721 10720 20285 + 10735 20285 10720 + 20285 10735 20289 + 20289 20290 20285 + 20285 20290 20291 + 20291 20286 20285 + 20287 20286 20291 + 20287 20291 20292 + 20292 20288 20287 + 20289 10735 20293 + 20293 20294 20289 + 20295 20289 20294 + 20290 20289 20295 + 20295 20296 20290 + 20290 20296 20292 + 20292 20291 20290 + 10734 20293 10735 + 20297 20293 10734 + 20294 20293 20297 + 20294 20297 20298 + 20298 20299 20294 + 20294 20299 20295 + 20300 20295 20299 + 20296 20295 20300 + 10734 10743 20297 + 20298 20297 10743 + 10743 10752 20298 + 20301 20298 10752 + 20299 20298 20301 + 20301 20302 20299 + 20299 20302 20300 + 20300 20302 20303 + 20303 20304 20300 + 20305 20300 20304 + 20300 20305 20296 + 10752 20306 20301 + 20301 20306 20307 + 20307 20308 20301 + 20302 20301 20308 + 20308 20303 20302 + 10751 20306 10752 + 20306 10751 20309 + 20309 20307 20306 + 20309 10768 20307 + 20307 10768 10785 + 10785 20308 20307 + 20303 20308 10785 + 10785 10791 20303 + 20303 10791 10796 + 10796 20304 20303 + 10759 20309 10751 + 10768 20309 10759 + 20162 20185 20163 + 20164 20163 20185 + 20185 20310 20164 + 20311 20164 20310 + 20164 20311 20312 + 20312 20154 20164 + 20154 20312 20155 + 20184 20310 20185 + 20310 20184 20313 + 20313 20314 20310 + 20310 20314 20311 + 20315 20311 20314 + 20312 20311 20315 + 20315 20316 20312 + 20312 20316 20317 + 20155 20312 20317 + 20313 20184 20183 + 20183 20318 20313 + 20313 20318 20319 + 20319 20320 20313 + 20314 20313 20320 + 20320 20321 20314 + 20314 20321 20315 + 20322 20315 20321 + 20315 20322 20316 + 20189 20318 20183 + 20318 20189 20323 + 20323 20319 20318 + 20323 20324 20319 + 20319 20324 20325 + 20325 20320 20319 + 20321 20320 20325 + 20325 20326 20321 + 20321 20326 20322 + 20209 20323 20189 + 20324 20323 20209 + 20209 20213 20324 + 20324 20213 20327 + 20325 20324 20327 + 20326 20325 20327 + 20327 20328 20326 + 20322 20326 20328 + 20329 20322 20328 + 20316 20322 20329 + 20329 20330 20316 + 20316 20330 20317 + 20212 20327 20213 + 20327 20212 20328 + 20328 20212 20331 + 20331 20332 20328 + 20328 20332 20329 + 20333 20329 20332 + 20329 20333 20330 + 20330 20333 20334 + 20334 20317 20330 + 20219 20331 20212 + 20335 20331 20219 + 20332 20331 20335 + 20332 20335 20333 + 20334 20333 20335 + 20335 20336 20334 + 20337 20334 20336 + 20334 20337 20338 + 20338 20317 20334 + 20219 20336 20335 + 20336 20219 20218 + 20218 20339 20336 + 20336 20339 20337 + 20340 20337 20339 + 20338 20337 20340 + 20340 20341 20338 + 20338 20341 20342 + 20343 20338 20342 + 20317 20338 20343 + 20339 20218 20228 + 20228 20233 20339 + 20339 20233 20340 + 20344 20340 20233 + 20340 20344 20341 + 20341 20344 20345 + 20345 20346 20341 + 20341 20346 20342 + 20233 20232 20344 + 20345 20344 20232 + 20232 20238 20345 + 20243 20345 20238 + 20345 20243 20346 + 20346 20243 20347 + 20347 20342 20346 + 20347 20348 20342 + 20342 20348 20349 + 20349 20350 20342 + 20342 20350 20343 + 20347 20243 20242 + 20242 20351 20347 + 20348 20347 20351 + 20351 20352 20348 + 20348 20352 20353 + 20353 20354 20348 + 20354 20349 20348 + 20241 20351 20242 + 20241 20352 20351 + 20352 20241 20247 + 20247 20252 20352 + 20352 20252 20353 + 20251 20353 20252 + 20265 20353 20251 + 20353 20265 20355 + 20355 20354 20353 + 20356 20354 20355 + 20354 20356 20357 + 20357 20349 20354 + 20349 20357 20358 + 20358 20350 20349 + 20350 20358 20359 + 20359 20343 20350 + 20355 20265 20273 + 20273 20360 20355 + 20361 20355 20360 + 20355 20361 20356 + 20356 20361 20362 + 20362 20363 20356 + 20356 20363 20364 + 20364 20357 20356 + 20358 20357 20364 + 20280 20360 20273 + 20365 20360 20280 + 20360 20365 20361 + 20362 20361 20365 + 20365 20366 20362 + 20366 20367 20362 + 20368 20362 20367 + 20363 20362 20368 + 20365 20280 20279 + 20279 20366 20365 + 20366 20279 20284 + 20284 20369 20366 + 20366 20369 20370 + 20370 20367 20366 + 20367 20370 20371 + 20371 20372 20367 + 20367 20372 20368 + 20369 20284 20288 + 20288 20373 20369 + 20370 20369 20373 + 20374 20370 20373 + 20371 20370 20374 + 20292 20373 20288 + 20373 20292 20296 + 20296 20305 20373 + 20373 20305 20374 + 20304 20374 20305 + 20374 20304 10796 + 10796 20375 20374 + 20374 20375 20371 + 20371 20375 20376 + 20376 20377 20371 + 20377 20378 20371 + 20372 20371 20378 + 20378 20379 20372 + 20368 20372 20379 + 20375 10796 10795 + 10795 20376 20375 + 10800 20376 10795 + 20376 10800 20380 + 20380 20377 20376 + 20380 20381 20377 + 20377 20381 20382 + 20382 20378 20377 + 20382 20379 20378 + 20379 20382 20383 + 20383 20384 20379 + 20379 20384 20368 + 20380 10800 10799 + 10799 20385 20380 + 20381 20380 20385 + 20385 20386 20381 + 20381 20386 20387 + 20387 20383 20381 + 20383 20382 20381 + 10804 20385 10799 + 20385 10804 10809 + 10809 20386 20385 + 20386 10809 20388 + 20388 20387 20386 + 20387 20388 20389 + 20389 20390 20387 + 20387 20390 20391 + 20391 20383 20387 + 20384 20383 20391 + 20392 20388 10809 + 20389 20388 20392 + 20392 20393 20389 + 20389 20393 20394 + 20394 20395 20389 + 20390 20389 20395 + 20395 20396 20390 + 20391 20390 20396 + 10809 10808 20392 + 10814 20392 10808 + 20392 10814 20397 + 20397 20393 20392 + 20393 20397 20398 + 20398 20394 20393 + 20394 20398 20399 + 20399 20400 20394 + 20394 20400 20401 + 20401 20395 20394 + 20396 20395 20401 + 20397 10814 10813 + 10813 20402 20397 + 20397 20402 20403 + 20403 20398 20397 + 20399 20398 20403 + 20403 20404 20399 + 20399 20404 20405 + 20405 20406 20399 + 20400 20399 20406 + 10821 20402 10813 + 20402 10821 20407 + 20407 20403 20402 + 20403 20407 20408 + 20408 20404 20403 + 20404 20408 20409 + 20409 20405 20404 + 20410 20407 10821 + 20408 20407 20410 + 20410 20411 20408 + 20408 20411 20412 + 20412 20409 20408 + 20413 20409 20412 + 20405 20409 20413 + 10821 10825 20410 + 10830 20410 10825 + 20410 10830 10838 + 10838 20411 20410 + 20411 10838 20414 + 20414 20412 20411 + 20412 20414 20415 + 20415 20416 20412 + 20412 20416 20413 + 20417 20414 10838 + 20415 20414 20417 + 20417 20418 20415 + 20415 20418 20419 + 20419 20420 20415 + 20416 20415 20420 + 20420 20421 20416 + 20413 20416 20421 + 10838 10837 20417 + 20422 20417 10837 + 20417 20422 20423 + 20423 20418 20417 + 20418 20423 20424 + 20424 20419 20418 + 10837 10836 20422 + 10847 20422 10836 + 20423 20422 10847 + 10847 19834 20423 + 20423 19834 19833 + 19833 20424 20423 + 19839 20424 19833 + 20419 20424 19839 + 19839 19844 20419 + 20419 19844 20425 + 20425 20420 20419 + 20421 20420 20425 + 19829 19834 10847 + 10847 10846 19829 + 20425 19844 19843 + 19843 20426 20425 + 20427 20425 20426 + 20425 20427 20421 + 20421 20427 20428 + 20428 20429 20421 + 20421 20429 20413 + 19848 20426 19843 + 20430 20426 19848 + 20426 20430 20427 + 20428 20427 20430 + 20430 20431 20428 + 20432 20428 20431 + 20428 20432 20433 + 20433 20429 20428 + 20429 20433 20434 + 20434 20413 20429 + 20413 20434 20405 + 19848 19857 20430 + 20430 19857 20435 + 20435 20431 20430 + 20436 20431 20435 + 20431 20436 20432 + 20437 20432 20436 + 20433 20432 20437 + 20437 20438 20433 + 20433 20438 20439 + 20439 20434 20433 + 20405 20434 20439 + 20439 20406 20405 + 20435 19857 19856 + 19856 20440 20435 + 20441 20435 20440 + 20435 20441 20436 + 20436 20441 20442 + 20442 20443 20436 + 20436 20443 20437 + 19861 20440 19856 + 20444 20440 19861 + 20440 20444 20441 + 20442 20441 20444 + 20444 20445 20442 + 20446 20442 20445 + 20442 20446 20447 + 20447 20443 20442 + 20443 20447 20448 + 20448 20437 20443 + 19861 20449 20444 + 20444 20449 20450 + 20450 20445 20444 + 20451 20445 20450 + 20445 20451 20446 + 20452 20446 20451 + 20447 20446 20452 + 20449 19861 19866 + 19866 20453 20449 + 20450 20449 20453 + 20453 20454 20450 + 20455 20450 20454 + 20450 20455 20451 + 20451 20455 20456 + 20456 20457 20451 + 20451 20457 20452 + 20453 19866 19865 + 19865 20458 20453 + 20453 20458 20459 + 20459 20454 20453 + 20460 20454 20459 + 20454 20460 20455 + 20456 20455 20460 + 20458 19865 19874 + 19874 20461 20458 + 20459 20458 20461 + 20461 20462 20459 + 20463 20459 20462 + 20459 20463 20460 + 20460 20463 20134 + 20134 20464 20460 + 20460 20464 20456 + 20461 19874 19873 + 19873 20465 20461 + 20461 20465 20466 + 20466 20462 20461 + 20130 20462 20466 + 20462 20130 20463 + 20134 20463 20130 + 20465 19873 19882 + 19882 20467 20465 + 20466 20465 20467 + 20467 20125 20466 + 20124 20466 20125 + 20466 20124 20130 + 20467 19882 19881 + 19881 20468 20467 + 20467 20468 20116 + 20116 20125 20467 + 20468 19881 19890 + 19890 20112 20468 + 20116 20468 20112 + 20112 19890 19889 + 20138 20464 20134 + 20464 20138 20469 + 20469 20456 20464 + 20456 20469 20470 + 20470 20457 20456 + 20457 20470 20471 + 20471 20452 20457 + 20143 20469 20138 + 20470 20469 20143 + 20143 20472 20470 + 20470 20472 20473 + 20473 20471 20470 + 20474 20471 20473 + 20452 20471 20474 + 20474 20475 20452 + 20452 20475 20447 + 20147 20472 20143 + 20472 20147 20476 + 20476 20473 20472 + 20473 20476 20477 + 20477 20478 20473 + 20473 20478 20474 + 20474 20478 20479 + 20479 20480 20474 + 20475 20474 20480 + 20476 20147 20146 + 20146 20481 20476 + 20477 20476 20481 + 20481 20482 20477 + 20483 20477 20482 + 20478 20477 20483 + 20483 20479 20478 + 20151 20481 20146 + 20482 20481 20151 + 20151 20484 20482 + 20482 20484 20485 + 20485 20486 20482 + 20482 20486 20483 + 20487 20483 20486 + 20479 20483 20487 + 20484 20151 20150 + 20150 20488 20484 + 20484 20488 20489 + 20489 20485 20484 + 20490 20485 20489 + 20485 20490 20491 + 20491 20486 20485 + 20486 20491 20487 + 20155 20488 20150 + 20488 20155 20492 + 20492 20489 20488 + 20489 20492 20343 + 20343 20359 20489 + 20489 20359 20490 + 20317 20492 20155 + 20343 20492 20317 + 20490 20359 20358 + 20358 20493 20490 + 20493 20494 20490 + 20491 20490 20494 + 20494 20495 20491 + 20491 20495 20496 + 20496 20487 20491 + 20497 20487 20496 + 20487 20497 20479 + 20364 20493 20358 + 20493 20364 20498 + 20498 20499 20493 + 20493 20499 20500 + 20500 20494 20493 + 20500 20495 20494 + 20495 20500 20501 + 20501 20496 20495 + 20502 20496 20501 + 20496 20502 20497 + 20498 20364 20363 + 20363 20503 20498 + 20498 20503 20504 + 20504 20505 20498 + 20499 20498 20505 + 20505 20506 20499 + 20500 20499 20506 + 20506 20501 20500 + 20507 20501 20506 + 20501 20507 20502 + 20368 20503 20363 + 20503 20368 20384 + 20384 20504 20503 + 20391 20504 20384 + 20504 20391 20508 + 20508 20505 20504 + 20505 20508 20509 + 20509 20506 20505 + 20506 20509 20507 + 20510 20507 20509 + 20502 20507 20510 + 20510 20511 20502 + 20502 20511 20512 + 20512 20497 20502 + 20479 20497 20512 + 20512 20480 20479 + 20396 20508 20391 + 20509 20508 20396 + 20396 20513 20509 + 20509 20513 20510 + 20514 20510 20513 + 20510 20514 20515 + 20515 20511 20510 + 20511 20515 20516 + 20516 20512 20511 + 20512 20516 20517 + 20517 20480 20512 + 20480 20517 20475 + 20401 20513 20396 + 20513 20401 20514 + 20518 20514 20401 + 20515 20514 20518 + 20518 20519 20515 + 20515 20519 20520 + 20520 20516 20515 + 20517 20516 20520 + 20520 20448 20517 + 20517 20448 20447 + 20447 20475 20517 + 20401 20400 20518 + 20406 20518 20400 + 20518 20406 20439 + 20439 20519 20518 + 20519 20439 20438 + 20438 20520 20519 + 20520 20438 20437 + 20437 20448 20520 + 19923 20083 19924 + 20083 19923 19929 + 19929 20084 20083 + 20084 19929 20521 + 20521 20075 20084 + 20075 20521 20522 + 20522 20076 20075 + 20076 20522 20523 + 20523 20067 20076 + 19933 20521 19929 + 20522 20521 19933 + 19933 20524 20522 + 20522 20524 20525 + 20525 20523 20522 + 20526 20523 20525 + 20067 20523 20526 + 20526 20068 20067 + 20068 20526 20527 + 20527 20063 20068 + 19937 20524 19933 + 20524 19937 20528 + 20528 20525 20524 + 20525 20528 20529 + 20529 20530 20525 + 20525 20530 20526 + 20526 20530 20531 + 20531 20527 20526 + 20532 20527 20531 + 20063 20527 20532 + 19941 20528 19937 + 20529 20528 19941 + 19941 20533 20529 + 20529 20533 20534 + 20534 20535 20529 + 20530 20529 20535 + 20535 20531 20530 + 20531 20535 20536 + 20536 20537 20531 + 20531 20537 20532 + 19945 20533 19941 + 20533 19945 20538 + 20538 20534 20533 + 20534 20538 20539 + 20539 20540 20534 + 20534 20540 20536 + 20536 20535 20534 + 20541 20538 19945 + 20539 20538 20541 + 20541 20542 20539 + 20543 20539 20542 + 20540 20539 20543 + 20543 20544 20540 + 20536 20540 20544 + 20544 20545 20536 + 20537 20536 20545 + 19945 19949 20541 + 19954 20541 19949 + 20542 20541 19954 + 19954 20546 20542 + 20542 20546 20547 + 20547 20548 20542 + 20542 20548 20543 + 20549 20543 20548 + 20544 20543 20549 + 20546 19954 20550 + 20550 20551 20546 + 20546 20551 20552 + 20552 20547 20546 + 20553 20547 20552 + 20548 20547 20553 + 20553 20554 20548 + 20548 20554 20549 + 19953 20550 19954 + 19959 20550 19953 + 20550 19959 19967 + 19967 20551 20550 + 20551 19967 20555 + 20555 20552 20551 + 20552 20555 20556 + 20556 20557 20552 + 20552 20557 20553 + 20553 20557 20558 + 20558 20559 20553 + 20554 20553 20559 + 20560 20555 19967 + 20556 20555 20560 + 20560 20561 20556 + 20562 20556 20561 + 20557 20556 20562 + 20562 20558 20557 + 19967 19966 20560 + 19972 20560 19966 + 20560 19972 20563 + 20563 20561 20560 + 20561 20563 20564 + 20564 20565 20561 + 20561 20565 20566 + 20566 20562 20561 + 20567 20562 20566 + 20558 20562 20567 + 20563 19972 19971 + 19971 10992 20563 + 20564 20563 10992 + 20568 20564 10992 + 20569 20564 20568 + 20569 20565 20564 + 20565 20569 20570 + 20570 20566 20565 + 20570 20571 20566 + 20566 20571 20567 + 19979 10992 19971 + 10992 19979 20572 + 20572 10985 10992 + 10985 20572 10986 + 10986 20572 20573 + 20573 20574 10986 + 20575 20574 20573 + 20572 19979 19984 + 20573 20572 19984 + 20576 20573 19984 + 20575 20573 20576 + 20576 20577 20575 + 20578 20577 20576 + 20578 20576 20579 + 20579 20580 20578 + 20578 20580 11030 + 20579 20576 19984 + 19984 19994 20579 + 20581 20579 19994 + 20580 20579 20581 + 20580 20581 20582 + 20582 11030 20580 + 20583 11030 20582 + 11030 20583 20584 + 20584 11023 11030 + 11024 11023 20584 + 19994 19993 20581 + 20581 19993 19992 + 19992 20582 20581 + 20583 20582 19992 + 19992 20585 20583 + 20583 20585 20586 + 20586 20584 20583 + 20587 20585 19992 + 20585 20587 20588 + 20588 20586 20585 + 19992 20002 20587 + 20587 20002 20589 + 20589 20590 20587 + 20588 20587 20590 + 20590 20591 20588 + 20591 20592 20588 + 20593 20588 20592 + 20588 20593 20594 + 20006 20589 20002 + 20595 20589 20006 + 20589 20595 20596 + 20596 20590 20589 + 20590 20596 20597 + 20597 20591 20590 + 20006 20014 20595 + 10991 20568 10992 + 20598 20568 10991 + 20599 20568 20598 + 20568 20599 20569 + 20569 20599 20600 + 20600 20570 20569 + 20571 20570 20600 + 10991 10996 20598 + 20601 20598 10996 + 20599 20598 20601 + 20601 20602 20599 + 20599 20602 20600 + 20603 20601 10996 + 20604 20601 20603 + 20604 20602 20601 + 20602 20604 20605 + 20605 20606 20602 + 20602 20606 20600 + 20607 20603 10996 + 20608 20603 20607 + 20608 20609 20603 + 20603 20609 20604 + 20604 20609 20610 + 20605 20604 20610 + 20611 20607 10996 + 20612 20607 20611 + 20612 20613 20607 + 20607 20613 20608 + 20608 20613 20614 + 20614 20615 20608 + 20609 20608 20615 + 20615 20610 20609 + 11000 20611 10996 + 20616 20611 11000 + 20616 20617 20611 + 20611 20617 20612 + 20612 20617 20618 + 20619 20612 20618 + 20613 20612 20619 + 20619 20614 20613 + 11000 11006 20616 + 20616 11006 20620 + 20621 20616 20620 + 20617 20616 20621 + 20621 20622 20617 + 20617 20622 20618 + 11005 20620 11006 + 20620 11005 11004 + 20620 11004 20623 + 20623 20624 20620 + 20620 20624 20621 + 20625 20621 20624 + 20621 20625 20622 + 20622 20625 20626 + 20626 20618 20622 + 11010 20623 11004 + 20627 20623 11010 + 20623 20627 20624 + 20624 20627 20625 + 20625 20627 20628 + 20628 20626 20625 + 20629 20626 20628 + 20618 20626 20629 + 11010 20630 20627 + 20627 20630 20628 + 20631 20628 20630 + 20632 20628 20631 + 20628 20632 20629 + 20629 20632 20633 + 20634 20629 20633 + 20618 20629 20634 + 20630 11010 11016 + 11016 20635 20630 + 20630 20635 20631 + 20631 20635 20532 + 20532 20537 20631 + 20545 20631 20537 + 20631 20545 20632 + 20632 20545 20544 + 20544 20633 20632 + 20635 11016 20636 + 20636 20532 20635 + 20532 20636 20063 + 20063 20636 20054 + 20054 20636 11016 + 20549 20633 20544 + 20633 20549 20637 + 20637 20638 20633 + 20633 20638 20639 + 20639 20634 20633 + 20640 20634 20639 + 20634 20640 20641 + 20634 20641 20618 + 20637 20549 20554 + 20642 20637 20554 + 20643 20637 20642 + 20638 20637 20643 + 20643 20644 20638 + 20638 20644 20645 + 20645 20639 20638 + 20646 20639 20645 + 20639 20646 20640 + 20647 20642 20554 + 20648 20642 20647 + 20649 20642 20648 + 20642 20649 20643 + 20643 20649 20650 + 20650 20651 20643 + 20644 20643 20651 + 20554 20652 20647 + 20653 20647 20652 + 20647 20653 20654 + 20647 20654 20648 + 20648 20654 20655 + 20656 20648 20655 + 20649 20648 20656 + 20656 20650 20649 + 20559 20652 20554 + 20652 20559 20657 + 20652 20657 20653 + 20653 20657 20658 + 20659 20653 20658 + 20654 20653 20659 + 20659 20655 20654 + 20657 20559 20558 + 20558 20658 20657 + 20567 20658 20558 + 20658 20567 20660 + 20660 20661 20658 + 20658 20661 20662 + 20662 20663 20658 + 20663 20659 20658 + 20664 20659 20663 + 20659 20664 20655 + 20665 20660 20567 + 20666 20660 20665 + 20661 20660 20666 + 20661 20666 20667 + 20667 20668 20661 + 20661 20668 20662 + 20567 20571 20665 + 20600 20665 20571 + 20669 20665 20600 + 20665 20669 20666 + 20666 20669 20670 + 20670 20671 20666 + 20671 20667 20666 + 20672 20667 20671 + 20672 20668 20667 + 20668 20672 20673 + 20673 20662 20668 + 20669 20600 20674 + 20674 20670 20669 + 20675 20670 20674 + 20670 20675 20676 + 20676 20671 20670 + 20677 20671 20676 + 20671 20677 20672 + 20672 20677 20678 + 20678 20673 20672 + 20606 20674 20600 + 20675 20674 20606 + 20606 20679 20675 + 20675 20679 20680 + 20676 20675 20680 + 20680 20681 20676 + 20677 20676 20681 + 20681 20678 20677 + 20682 20678 20681 + 20678 20682 20683 + 20683 20673 20678 + 20673 20683 20662 + 20605 20679 20606 + 20679 20605 20684 + 20684 20680 20679 + 20685 20680 20684 + 20680 20685 20686 + 20686 20681 20680 + 20681 20686 20682 + 20682 20686 20687 + 20687 20688 20682 + 20683 20682 20688 + 20610 20684 20605 + 20689 20684 20610 + 20684 20689 20685 + 20685 20689 20690 + 20690 20691 20685 + 20685 20691 20687 + 20687 20686 20685 + 20610 20692 20689 + 20690 20689 20692 + 20692 20693 20690 + 20694 20690 20693 + 20690 20694 20695 + 20695 20691 20690 + 20691 20695 20696 + 20696 20687 20691 + 20697 20692 20610 + 20692 20697 20698 + 20698 20693 20692 + 20693 20698 20699 + 20699 20700 20693 + 20693 20700 20694 + 20610 20615 20697 + 20697 20615 20614 + 20614 20701 20697 + 20698 20697 20701 + 20701 20702 20698 + 20699 20698 20702 + 20702 20703 20699 + 20699 20703 20646 + 20646 20704 20699 + 20700 20699 20704 + 20614 20619 20701 + 20701 20619 20705 + 20705 20702 20701 + 20702 20705 20703 + 20703 20705 20641 + 20641 20640 20703 + 20703 20640 20646 + 20705 20619 20618 + 20618 20641 20705 + 20013 20706 20014 + 20706 20013 20012 + 20707 20706 20012 + 20706 20707 20708 + 20709 20706 20708 + 20708 20710 20709 + 20710 20711 20709 + 20596 20711 20710 + 20018 20707 20012 + 20023 20707 20018 + 20707 20023 20712 + 20712 20708 20707 + 20708 20712 20713 + 20708 20713 20714 + 20714 20710 20708 + 20710 20714 20591 + 20591 20597 20710 + 20710 20597 20596 + 20028 20712 20023 + 20713 20712 20028 + 20028 20033 20713 + 20714 20713 20033 + 20715 20714 20033 + 20591 20714 20715 + 20715 20592 20591 + 20592 20715 20716 + 20592 20716 20593 + 20033 20717 20715 + 20716 20715 20717 + 20717 20718 20716 + 20593 20716 20718 + 20718 20719 20593 + 20719 20720 20593 + 20720 20721 20593 + 20594 20593 20721 + 20038 20717 20033 + 20717 20038 20718 + 20718 20038 20037 + 20037 20719 20718 + 20037 20036 20719 + 20719 20036 20041 + 20041 20720 20719 + 20041 11025 20720 + 20720 11025 11024 + 11024 20721 20720 + 20584 20721 11024 + 20721 20584 20594 + 20704 20722 20700 + 20722 20704 20723 + 20722 20723 20724 + 20724 20725 20722 + 20722 20725 20694 + 20694 20700 20722 + 20723 20704 20646 + 20646 20645 20723 + 20723 20645 20644 + 20644 20724 20723 + 20651 20724 20644 + 20724 20651 20726 + 20726 20725 20724 + 20725 20726 20695 + 20695 20694 20725 + 20726 20651 20650 + 20650 20727 20726 + 20695 20726 20727 + 20696 20695 20727 + 20727 20728 20696 + 20729 20696 20728 + 20687 20696 20729 + 20729 20688 20687 + 20727 20650 20656 + 20727 20656 20730 + 20730 20728 20727 + 20731 20728 20730 + 20728 20731 20729 + 20732 20729 20731 + 20688 20729 20732 + 20732 20733 20688 + 20688 20733 20683 + 20662 20683 20733 + 20655 20730 20656 + 20731 20730 20655 + 20655 20664 20731 + 20731 20664 20732 + 20663 20732 20664 + 20732 20663 20733 + 20733 20663 20662 + 8578 20734 8572 + 20735 20734 8578 + 20736 20734 20735 + 20734 20736 20737 + 20737 8572 20734 + 8573 8572 20737 + 8578 20738 20735 + 20735 20738 20739 + 20740 20735 20739 + 20735 20740 20736 + 20738 8578 8577 + 8577 20741 20738 + 20738 20741 20742 + 20742 20739 20738 + 20739 20742 20743 + 20743 20744 20739 + 20739 20744 20740 + 20741 8577 20745 + 20745 20746 20741 + 20742 20741 20746 + 20746 20747 20742 + 20743 20742 20747 + 20748 20745 8577 + 20749 20745 20748 + 20746 20745 20749 + 20749 20750 20746 + 20746 20750 20751 + 20751 20747 20746 + 20752 20747 20751 + 20747 20752 20743 + 20753 20748 8577 + 20754 20748 20753 + 20748 20754 20755 + 20755 20756 20748 + 20748 20756 20749 + 8577 8576 20753 + 20757 20753 8576 + 20757 20758 20753 + 20753 20758 20754 + 20754 20758 20759 + 20759 20760 20754 + 20755 20754 20760 + 8576 8563 20757 + 8562 20757 8563 + 20757 8562 20759 + 20758 20757 20759 + 20759 8562 8561 + 20759 8561 20761 + 20761 20760 20759 + 20762 20760 20761 + 20760 20762 20755 + 20755 20762 20763 + 20763 20764 20755 + 20756 20755 20764 + 20764 20765 20756 + 20749 20756 20765 + 20766 20761 8561 + 20767 20761 20766 + 20761 20767 20762 + 20762 20767 20768 + 20768 20763 20762 + 20769 20763 20768 + 20763 20769 20770 + 20770 20764 20763 + 20764 20770 20765 + 8561 8560 20766 + 8560 20771 20766 + 20772 20766 20771 + 20766 20772 20773 + 20773 20774 20766 + 20766 20774 20767 + 20767 20774 20775 + 20775 20768 20767 + 20769 20768 20775 + 8575 20771 8560 + 20771 8575 20776 + 20771 20776 20772 + 20777 20772 20776 + 20773 20772 20777 + 20777 20778 20773 + 20779 20773 20778 + 20774 20773 20779 + 20779 20780 20774 + 20774 20780 20775 + 20776 8575 8574 + 8574 20781 20776 + 20776 20781 20777 + 20782 20777 20781 + 20777 20782 20783 + 20783 20778 20777 + 20778 20783 20784 + 20784 20785 20778 + 20778 20785 20779 + 20786 20781 8574 + 20781 20786 20782 + 20782 20786 20787 + 20787 20788 20782 + 20783 20782 20788 + 20788 20789 20783 + 20784 20783 20789 + 8574 20790 20786 + 20786 20790 20791 + 20791 20787 20786 + 20787 20791 20792 + 20792 20793 20787 + 20787 20793 20794 + 20794 20788 20787 + 20789 20788 20794 + 20790 8574 20795 + 20795 20796 20790 + 20790 20796 20797 + 20797 20791 20790 + 20792 20791 20797 + 8573 20795 8574 + 20798 20795 8573 + 20795 20798 20796 + 20796 20798 20799 + 20799 20797 20796 + 20797 20799 20800 + 20800 20801 20797 + 20797 20801 20792 + 8573 20737 20798 + 20798 20737 20736 + 20799 20798 20736 + 20736 20802 20799 + 20800 20799 20802 + 20802 20803 20800 + 20800 20803 20804 + 20804 20805 20800 + 20801 20800 20805 + 20805 20806 20801 + 20792 20801 20806 + 20807 20802 20736 + 20803 20802 20807 + 20808 20803 20807 + 20803 20808 20809 + 20809 20804 20803 + 20736 20740 20807 + 20810 20807 20740 + 20808 20807 20810 + 20810 20811 20808 + 20808 20811 20812 + 20812 20809 20808 + 20813 20809 20812 + 20804 20809 20813 + 20740 20744 20810 + 20814 20810 20744 + 20810 20814 20815 + 20815 20811 20810 + 20811 20815 20816 + 20816 20812 20811 + 20812 20816 20817 + 20817 20818 20812 + 20812 20818 20813 + 20744 20743 20814 + 20819 20814 20743 + 20815 20814 20819 + 20819 20820 20815 + 20815 20820 20821 + 20821 20816 20815 + 20817 20816 20821 + 20743 20752 20819 + 20822 20819 20752 + 20819 20822 20823 + 20823 20820 20819 + 20820 20823 20824 + 20824 20821 20820 + 20821 20824 20825 + 20825 20826 20821 + 20821 20826 20817 + 20752 20827 20822 + 20828 20822 20827 + 20823 20822 20828 + 20828 20829 20823 + 20823 20829 20830 + 20830 20824 20823 + 20825 20824 20830 + 20751 20827 20752 + 20827 20751 20831 + 20831 20832 20827 + 20827 20832 20828 + 20833 20828 20832 + 20828 20833 20834 + 20834 20829 20828 + 20829 20834 20835 + 20835 20830 20829 + 20836 20831 20751 + 20837 20831 20836 + 20831 20837 20832 + 20832 20837 20833 + 20833 20837 20838 + 20839 20833 20838 + 20834 20833 20839 + 20751 20750 20836 + 20840 20836 20750 + 20836 20840 20841 + 20841 20838 20836 + 20836 20838 20837 + 20750 20749 20840 + 20842 20840 20749 + 20841 20840 20842 + 20842 20843 20841 + 20841 20843 20844 + 20844 20845 20841 + 20838 20841 20845 + 20765 20842 20749 + 20846 20842 20765 + 20846 20843 20842 + 20843 20846 20847 + 20847 20844 20843 + 20848 20844 20847 + 20844 20848 20849 + 20849 20845 20844 + 20845 20849 20850 + 20845 20850 20838 + 20765 20770 20846 + 20846 20770 20769 + 20769 20851 20846 + 20851 20847 20846 + 20848 20847 20851 + 20851 20852 20848 + 20848 20852 20853 + 20849 20848 20853 + 20853 20854 20849 + 20850 20849 20854 + 20854 20855 20850 + 20838 20850 20855 + 20855 20839 20838 + 20775 20851 20769 + 20851 20775 20852 + 20852 20775 20780 + 20780 20856 20852 + 20852 20856 20853 + 20785 20853 20856 + 20853 20785 20784 + 20853 20784 20857 + 20857 20854 20853 + 20855 20854 20857 + 20855 20857 20858 + 20858 20839 20855 + 20856 20780 20779 + 20856 20779 20785 + 20858 20857 20784 + 20789 20858 20784 + 20859 20858 20789 + 20839 20858 20859 + 20859 20860 20839 + 20839 20860 20834 + 20834 20860 20861 + 20861 20835 20834 + 20789 20862 20859 + 20859 20862 20863 + 20863 20864 20859 + 20860 20859 20864 + 20864 20861 20860 + 20794 20862 20789 + 20862 20794 20865 + 20865 20863 20862 + 20863 20865 20866 + 20866 20867 20863 + 20863 20867 20868 + 20868 20864 20863 + 20861 20864 20868 + 20869 20865 20794 + 20866 20865 20869 + 20869 20870 20866 + 20866 20870 20871 + 20871 20872 20866 + 20867 20866 20872 + 20872 20873 20867 + 20868 20867 20873 + 20794 20793 20869 + 20874 20869 20793 + 20869 20874 20875 + 20875 20870 20869 + 20870 20875 20876 + 20876 20871 20870 + 20793 20792 20874 + 20806 20874 20792 + 20875 20874 20806 + 20806 20877 20875 + 20875 20877 20878 + 20878 20876 20875 + 20879 20876 20878 + 20871 20876 20879 + 20879 20880 20871 + 20871 20880 20881 + 20881 20872 20871 + 20873 20872 20881 + 20882 20877 20806 + 20877 20882 20883 + 20883 20878 20877 + 20878 20883 20884 + 20884 20885 20878 + 20878 20885 20879 + 20806 20805 20882 + 20882 20805 20804 + 20804 20886 20882 + 20882 20886 20887 + 20887 20883 20882 + 20884 20883 20887 + 20887 20888 20884 + 20884 20888 20889 + 20889 20890 20884 + 20885 20884 20890 + 20813 20886 20804 + 20886 20813 20891 + 20891 20887 20886 + 20887 20891 20892 + 20892 20888 20887 + 20888 20892 20893 + 20893 20889 20888 + 20894 20891 20813 + 20892 20891 20894 + 20894 20895 20892 + 20892 20895 20896 + 20896 20893 20892 + 20897 20893 20896 + 20889 20893 20897 + 20813 20818 20894 + 20898 20894 20818 + 20894 20898 20899 + 20899 20895 20894 + 20895 20899 20900 + 20900 20896 20895 + 20896 20900 20901 + 20901 20902 20896 + 20896 20902 20897 + 20818 20817 20898 + 20903 20898 20817 + 20899 20898 20903 + 20903 20904 20899 + 20899 20904 20905 + 20905 20900 20899 + 20901 20900 20905 + 20905 20906 20901 + 20907 20901 20906 + 20902 20901 20907 + 20817 20826 20903 + 20908 20903 20826 + 20903 20908 20909 + 20909 20904 20903 + 20904 20909 20910 + 20910 20905 20904 + 20906 20905 20910 + 20911 20906 20910 + 20907 20906 20911 + 20826 20825 20908 + 20912 20908 20825 + 20909 20908 20912 + 20912 20913 20909 + 20909 20913 20914 + 20914 20910 20909 + 20911 20910 20914 + 20914 20915 20911 + 20916 20911 20915 + 20916 20907 20911 + 20825 20917 20912 + 20918 20912 20917 + 20912 20918 20919 + 20919 20913 20912 + 20913 20919 20920 + 20920 20914 20913 + 20915 20914 20920 + 20921 20915 20920 + 20916 20915 20921 + 20830 20917 20825 + 20922 20917 20830 + 20917 20922 20918 + 20923 20918 20922 + 20919 20918 20923 + 20923 20924 20919 + 20919 20924 20925 + 20925 20920 20919 + 20921 20920 20925 + 20830 20835 20922 + 20922 20835 20861 + 20861 20926 20922 + 20922 20926 20923 + 20927 20923 20926 + 20923 20927 20928 + 20928 20924 20923 + 20924 20928 20929 + 20929 20925 20924 + 20930 20925 20929 + 20925 20930 20921 + 20868 20926 20861 + 20926 20868 20927 + 20873 20927 20868 + 20928 20927 20873 + 20873 20931 20928 + 20928 20931 20932 + 20932 20929 20928 + 20933 20929 20932 + 20933 20930 20929 + 20934 20930 20933 + 20934 20921 20930 + 20934 20916 20921 + 20907 20916 20934 + 20881 20931 20873 + 20931 20881 20935 + 20935 20932 20931 + 20936 20932 20935 + 20932 20936 20933 + 20933 20936 20937 + 20937 20934 20933 + 20934 20937 20938 + 20938 20907 20934 + 20907 20938 20902 + 20938 20897 20902 + 20939 20935 20881 + 20940 20935 20939 + 20940 20936 20935 + 20937 20936 20940 + 20941 20937 20940 + 20937 20941 20938 + 20881 20880 20939 + 20942 20939 20880 + 20939 20942 20943 + 20943 20944 20939 + 20939 20944 20940 + 20941 20940 20944 + 20945 20941 20944 + 20941 20945 20938 + 20880 20879 20942 + 20946 20942 20879 + 20943 20942 20946 + 20946 20947 20943 + 20945 20943 20947 + 20944 20943 20945 + 20879 20885 20946 + 20890 20946 20885 + 20946 20890 20948 + 20948 20947 20946 + 20947 20948 20949 + 20949 20945 20947 + 20945 20949 20938 + 20938 20949 20950 + 20950 20897 20938 + 20897 20950 20889 + 20889 20950 20948 + 20948 20890 20889 + 20949 20948 20950 + 8554 8487 8550 + 8488 8487 8554 + 8554 20951 8488 + 8489 8488 20951 + 20951 20952 8489 + 8482 8489 20952 + 20952 20953 8482 + 20953 8478 8482 + 8554 8553 20951 + 20951 8553 20954 + 20954 20952 20951 + 20953 20952 20954 + 20953 20954 20955 + 20955 8478 20953 + 20955 8472 8478 + 8472 20955 8473 + 8473 20955 20954 + 20954 8553 8473 + 8493 8550 8487 + 8498 8550 8493 + 8550 8498 20956 + 20956 8551 8550 + 8551 20956 20957 + 20957 20958 8551 + 8551 20958 8545 + 20959 20956 8498 + 20957 20956 20959 + 20959 20960 20957 + 20957 20960 20961 + 20961 20962 20957 + 20958 20957 20962 + 20962 20963 20958 + 8545 20958 20963 + 20963 8546 8545 + 8498 8497 20959 + 20964 20959 8497 + 20959 20964 20965 + 20965 20960 20959 + 20960 20965 20966 + 20966 20961 20960 + 8497 8496 20964 + 8507 20964 8496 + 20965 20964 8507 + 8507 20967 20965 + 20965 20967 20968 + 20968 20966 20965 + 20969 20966 20968 + 20961 20966 20969 + 20969 20970 20961 + 20961 20970 20971 + 20971 20962 20961 + 20963 20962 20971 + 8510 20967 8507 + 20967 8510 20972 + 20972 20968 20967 + 20968 20972 20973 + 20973 20974 20968 + 20968 20974 20969 + 20969 20974 20975 + 20975 20976 20969 + 20970 20969 20976 + 8515 20972 8510 + 20973 20972 8515 + 8515 20977 20973 + 20973 20977 20978 + 20978 20979 20973 + 20974 20973 20979 + 20979 20975 20974 + 8520 20977 8515 + 20977 8520 20980 + 20980 20978 20977 + 20978 20980 20981 + 20981 20982 20978 + 20978 20982 20983 + 20983 20979 20978 + 20975 20979 20983 + 20984 20980 8520 + 20981 20980 20984 + 20984 20985 20981 + 20981 20985 20986 + 20986 20987 20981 + 20982 20981 20987 + 20987 20988 20982 + 20983 20982 20988 + 8520 8519 20984 + 8525 20984 8519 + 20984 8525 20989 + 20989 20985 20984 + 20985 20989 20990 + 20990 20986 20985 + 20986 20990 20991 + 20991 20992 20986 + 20986 20992 20993 + 20993 20987 20986 + 20988 20987 20993 + 20989 8525 8524 + 8524 20994 20989 + 20989 20994 20995 + 20995 20990 20989 + 20991 20990 20995 + 20995 20996 20991 + 20991 20996 20997 + 20991 20997 20998 + 20992 20991 20998 + 20993 20992 20998 + 8534 20994 8524 + 20994 8534 20999 + 20999 20995 20994 + 20995 20999 21000 + 21000 20996 20995 + 20996 21000 20997 + 21000 21001 20997 + 20998 20997 21001 + 21002 20998 21001 + 20993 20998 21002 + 21003 20993 21002 + 20993 21003 20988 + 21004 20999 8534 + 21000 20999 21004 + 21004 21005 21000 + 21000 21005 21001 + 21006 21001 21005 + 21001 21006 21007 + 21007 21002 21001 + 8534 21008 21004 + 21009 21004 21008 + 21004 21009 21010 + 21010 21005 21004 + 21005 21010 21006 + 21006 21010 21011 + 21012 21006 21011 + 21006 21012 21007 + 8533 21008 8534 + 21013 21008 8533 + 21008 21013 21009 + 21014 21009 21013 + 21010 21009 21014 + 21014 21011 21010 + 21015 21011 21014 + 21011 21015 21012 + 21015 21016 21012 + 21007 21012 21016 + 8533 8538 21013 + 21013 8538 21017 + 21017 21018 21013 + 21013 21018 21014 + 21019 21014 21018 + 21014 21019 21015 + 21015 21019 21020 + 21020 21016 21015 + 21021 21016 21020 + 21016 21021 21007 + 21017 8538 8537 + 8537 21022 21017 + 21023 21017 21022 + 21017 21023 21024 + 21024 21018 21017 + 21018 21024 21019 + 21020 21019 21024 + 21024 21025 21020 + 21026 21020 21025 + 21020 21026 21021 + 8542 21022 8537 + 21027 21022 8542 + 21022 21027 21023 + 21028 21023 21027 + 21024 21023 21028 + 21028 21025 21024 + 21029 21025 21028 + 21025 21029 21026 + 21030 21026 21029 + 21021 21026 21030 + 21030 21031 21021 + 21021 21031 21007 + 8542 8546 21027 + 21027 8546 20963 + 20963 21032 21027 + 21027 21032 21028 + 21033 21028 21032 + 21028 21033 21029 + 21029 21033 21034 + 21034 21035 21029 + 21029 21035 21030 + 20971 21032 20963 + 21032 20971 21033 + 21034 21033 20971 + 20971 20970 21034 + 20976 21034 20970 + 21034 20976 21036 + 21036 21035 21034 + 21035 21036 21037 + 21037 21030 21035 + 21030 21037 21038 + 21038 21031 21030 + 21031 21038 21039 + 21039 21007 21031 + 21007 21039 21002 + 21036 20976 20975 + 20975 21040 21036 + 21036 21040 21041 + 21041 21037 21036 + 21038 21037 21041 + 21041 21042 21038 + 21038 21042 21039 + 21042 21043 21039 + 21043 21002 21039 + 21043 21003 21002 + 20988 21003 21043 + 20983 21040 20975 + 21040 20983 21044 + 21044 21041 21040 + 21041 21044 21043 + 21043 21042 21041 + 20988 21044 20983 + 21043 21044 20988 + 21045 8403 8406 + 8403 21045 21046 + 21046 21047 8403 + 8404 8403 21047 + 21047 8405 8404 + 21045 8406 21048 + 21048 21049 21045 + 21045 21049 21050 + 21050 21046 21045 + 21051 21046 21050 + 21047 21046 21051 + 21048 8406 8359 + 8359 8358 21048 + 21048 8358 8357 + 21052 21048 8357 + 21048 21052 21053 + 21053 21049 21048 + 21050 21049 21053 + 21054 21050 21053 + 21050 21054 21055 + 21055 21056 21050 + 21050 21056 21051 + 21057 21052 8357 + 21053 21052 21057 + 21057 21058 21053 + 21053 21058 21059 + 21059 21054 21053 + 21055 21054 21059 + 8362 21057 8357 + 21057 8362 21060 + 21060 21058 21057 + 21058 21060 21061 + 21061 21059 21058 + 21059 21061 21062 + 21062 21063 21059 + 21059 21063 21055 + 21060 8362 8361 + 8361 21064 21060 + 21060 21064 21065 + 21065 21061 21060 + 21062 21061 21065 + 21065 21066 21062 + 21062 21066 21067 + 21067 21068 21062 + 21063 21062 21068 + 21069 21064 8361 + 21064 21069 21070 + 21070 21065 21064 + 21065 21070 21071 + 21071 21066 21065 + 21066 21071 21072 + 21072 21067 21066 + 8361 8365 21069 + 21069 8365 21073 + 21073 21074 21069 + 21070 21069 21074 + 21074 21075 21070 + 21071 21070 21075 + 21075 21076 21071 + 21072 21071 21076 + 8370 21073 8365 + 21077 21073 8370 + 21074 21073 21077 + 21077 21078 21074 + 21074 21078 21079 + 21079 21075 21074 + 21076 21075 21079 + 8370 21080 21077 + 21077 21080 21081 + 21081 21082 21077 + 21078 21077 21082 + 21082 21083 21078 + 21079 21078 21083 + 21084 21080 8370 + 21080 21084 21085 + 21085 21081 21080 + 21081 21085 21086 + 21086 21087 21081 + 21081 21087 21088 + 21088 21082 21081 + 21083 21082 21088 + 8370 8369 21084 + 21084 8369 21089 + 21089 21090 21084 + 21084 21090 21091 + 21091 21085 21084 + 21086 21085 21091 + 8368 21089 8369 + 21092 21089 8368 + 21089 21092 21093 + 21093 21090 21089 + 21090 21093 21094 + 21094 21091 21090 + 21091 21094 21095 + 21095 21096 21091 + 21091 21096 21086 + 8368 21097 21092 + 21092 21097 21098 + 21098 21099 21092 + 21099 21100 21092 + 21093 21092 21100 + 8374 21097 8368 + 21097 8374 21101 + 21101 21098 21097 + 21102 21098 21101 + 21098 21102 21103 + 21103 21099 21098 + 21104 21099 21103 + 21099 21104 21105 + 21105 21100 21099 + 21106 21101 8374 + 21102 21101 21106 + 21106 21107 21102 + 21103 21102 21107 + 21107 21108 21103 + 21108 21109 21103 + 21109 21110 21103 + 21104 21103 21110 + 8379 21106 8374 + 21111 21106 8379 + 21107 21106 21111 + 21107 21111 21112 + 21112 21108 21107 + 21113 21108 21112 + 21108 21113 21114 + 21114 21109 21108 + 8379 8384 21111 + 21111 8384 21115 + 21115 21112 21111 + 21113 21112 21115 + 21115 21116 21113 + 21114 21113 21116 + 21116 21117 21114 + 21117 21118 21114 + 21119 21114 21118 + 21119 21109 21114 + 8384 21120 21115 + 21120 21121 21115 + 21121 21122 21115 + 21123 21115 21122 + 21116 21115 21123 + 21116 21123 21124 + 21124 21117 21116 + 8383 21120 8384 + 21120 8383 21125 + 21120 21125 21121 + 21125 21126 21121 + 21126 21127 21121 + 21122 21121 21127 + 21128 21122 21127 + 21129 21122 21128 + 21122 21129 21123 + 21125 8383 8389 + 21125 8389 21130 + 21130 21126 21125 + 21127 21126 21130 + 21130 21131 21127 + 21128 21127 21131 + 8389 8388 21130 + 8388 21132 21130 + 21131 21130 21132 + 21131 21132 21133 + 21131 21133 21128 + 21133 21134 21128 + 21128 21134 21135 + 21136 21128 21135 + 21128 21136 21129 + 8388 8395 21132 + 8395 21137 21132 + 21132 21137 21133 + 21138 21133 21137 + 21134 21133 21138 + 21139 21134 21138 + 21135 21134 21139 + 21140 21137 8395 + 21137 21140 21138 + 21141 21138 21140 + 21139 21138 21141 + 21141 21142 21139 + 21135 21139 21142 + 21142 21143 21135 + 21135 21143 21144 + 21135 21144 21136 + 8395 8394 21140 + 21145 21140 8394 + 21145 21141 21140 + 21141 21145 21146 + 21147 21141 21146 + 21141 21147 21142 + 21147 21148 21142 + 21143 21142 21148 + 21148 21149 21143 + 21144 21143 21149 + 8394 8400 21145 + 21146 21145 8400 + 8400 21150 21146 + 21151 21146 21150 + 21147 21146 21151 + 21151 21152 21147 + 21148 21147 21152 + 21153 21148 21152 + 21149 21148 21153 + 8400 8399 21150 + 8399 8405 21150 + 21150 8405 21047 + 21047 21154 21150 + 21150 21154 21151 + 21155 21151 21154 + 21151 21155 21156 + 21156 21152 21151 + 21157 21152 21156 + 21152 21157 21153 + 21051 21154 21047 + 21154 21051 21155 + 21155 21051 21056 + 21158 21155 21056 + 21155 21158 21159 + 21156 21155 21159 + 21160 21156 21159 + 21160 21157 21156 + 21160 21161 21157 + 21157 21161 21162 + 21162 21153 21157 + 21056 21055 21158 + 21055 21163 21158 + 21159 21158 21163 + 21164 21159 21163 + 21164 21160 21159 + 21164 21165 21160 + 21165 21161 21160 + 21161 21165 21166 + 21166 21162 21161 + 21167 21163 21055 + 21167 21164 21163 + 21164 21167 21168 + 21168 21165 21164 + 21165 21168 21169 + 21169 21166 21165 + 21166 21169 21170 + 21170 21171 21166 + 21166 21171 21162 + 21172 21167 21055 + 21168 21167 21172 + 21172 21173 21168 + 21168 21173 21174 + 21174 21169 21168 + 21170 21169 21174 + 21055 21063 21172 + 21068 21172 21063 + 21172 21068 21175 + 21175 21173 21172 + 21173 21175 21176 + 21176 21174 21173 + 21174 21176 21177 + 21177 21178 21174 + 21174 21178 21170 + 21175 21068 21067 + 21067 21179 21175 + 21175 21179 21180 + 21180 21176 21175 + 21177 21176 21180 + 21180 21181 21177 + 21177 21181 21182 + 21182 21183 21177 + 21178 21177 21183 + 21184 21179 21067 + 21179 21184 21185 + 21185 21180 21179 + 21180 21185 21186 + 21186 21181 21180 + 21181 21186 21187 + 21187 21182 21181 + 21067 21072 21184 + 21184 21072 21188 + 21188 21189 21184 + 21185 21184 21189 + 21189 21190 21185 + 21186 21185 21190 + 21190 21191 21186 + 21187 21186 21191 + 21076 21188 21072 + 21192 21188 21076 + 21189 21188 21192 + 21192 21193 21189 + 21189 21193 21194 + 21194 21190 21189 + 21191 21190 21194 + 21076 21195 21192 + 21192 21195 21196 + 21196 21197 21192 + 21197 21198 21192 + 21198 21199 21192 + 21193 21192 21199 + 21079 21195 21076 + 21195 21079 21200 + 21200 21196 21195 + 21196 21200 21201 + 21201 21202 21196 + 21196 21202 21203 + 21203 21197 21196 + 21083 21200 21079 + 21201 21200 21083 + 21083 21204 21201 + 21201 21204 21205 + 21205 21206 21201 + 21202 21201 21206 + 21206 21207 21202 + 21203 21202 21207 + 21088 21204 21083 + 21204 21088 21208 + 21208 21205 21204 + 21205 21208 21209 + 21209 21210 21205 + 21205 21210 21211 + 21211 21206 21205 + 21207 21206 21211 + 21212 21208 21088 + 21209 21208 21212 + 21212 21213 21209 + 21209 21213 21214 + 21214 21215 21209 + 21210 21209 21215 + 21215 21216 21210 + 21211 21210 21216 + 21088 21087 21212 + 21217 21212 21087 + 21212 21217 21218 + 21218 21213 21212 + 21213 21218 21219 + 21219 21214 21213 + 21087 21086 21217 + 21220 21217 21086 + 21218 21217 21220 + 21220 21221 21218 + 21218 21221 21222 + 21222 21219 21218 + 21223 21219 21222 + 21214 21219 21223 + 21086 21096 21220 + 21224 21220 21096 + 21220 21224 21225 + 21225 21221 21220 + 21221 21225 21226 + 21226 21222 21221 + 21222 21226 21227 + 21227 21228 21222 + 21222 21228 21223 + 21096 21095 21224 + 21229 21224 21095 + 21225 21224 21229 + 21229 21230 21225 + 21225 21230 21231 + 21231 21226 21225 + 21227 21226 21231 + 21231 21232 21227 + 21227 21232 21233 + 21228 21227 21233 + 21095 21234 21229 + 21235 21229 21234 + 21229 21235 21236 + 21236 21230 21229 + 21230 21236 21237 + 21237 21231 21230 + 21231 21237 21238 + 21238 21232 21231 + 21233 21232 21238 + 21239 21234 21095 + 21240 21234 21239 + 21234 21240 21235 + 21241 21235 21240 + 21236 21235 21241 + 21241 21242 21236 + 21236 21242 21243 + 21243 21237 21236 + 21238 21237 21243 + 21095 21094 21239 + 21239 21094 21093 + 21093 21244 21239 + 21245 21239 21244 + 21239 21245 21240 + 21240 21245 21246 + 21246 21247 21240 + 21240 21247 21241 + 21100 21244 21093 + 21248 21244 21100 + 21244 21248 21245 + 21246 21245 21248 + 21249 21246 21248 + 21250 21246 21249 + 21246 21250 21251 + 21251 21247 21246 + 21247 21251 21252 + 21252 21241 21247 + 21100 21105 21248 + 21248 21105 21253 + 21253 21254 21248 + 21248 21254 21255 + 21255 21249 21248 + 21253 21105 21104 + 21104 21256 21253 + 21257 21253 21256 + 21253 21257 21258 + 21258 21254 21253 + 21254 21258 21259 + 21259 21255 21254 + 21110 21256 21104 + 21256 21110 21260 + 21260 21261 21256 + 21256 21261 21257 + 21257 21261 21262 + 21262 21263 21257 + 21258 21257 21263 + 21260 21110 21109 + 21109 21119 21260 + 21264 21260 21119 + 21261 21260 21264 + 21264 21262 21261 + 21262 21264 21265 + 21265 21266 21262 + 21262 21266 21267 + 21267 21263 21262 + 21119 21268 21264 + 21265 21264 21268 + 21268 21269 21265 + 21265 21269 21270 + 21270 21271 21265 + 21266 21265 21271 + 21271 21272 21266 + 21267 21266 21272 + 21118 21268 21119 + 21269 21268 21118 + 21269 21118 21117 + 21117 21273 21269 + 21269 21273 21270 + 21274 21270 21273 + 21270 21274 21275 + 21270 21275 21276 + 21276 21271 21270 + 21276 21272 21271 + 21273 21117 21124 + 21273 21124 21274 + 21274 21124 21123 + 21277 21274 21123 + 21274 21277 21278 + 21275 21274 21278 + 21275 21278 21279 + 21276 21275 21279 + 21280 21276 21279 + 21272 21276 21280 + 21123 21129 21277 + 21281 21277 21129 + 21278 21277 21281 + 21278 21281 21282 + 21278 21282 21279 + 21129 21283 21281 + 21283 21284 21281 + 21284 21285 21281 + 21281 21285 21282 + 21285 21286 21282 + 21282 21286 21287 + 21287 21279 21282 + 21136 21283 21129 + 21283 21136 21144 + 21144 21284 21283 + 21288 21284 21144 + 21284 21288 21286 + 21286 21285 21284 + 21288 21144 21149 + 21288 21149 21289 + 21287 21288 21289 + 21287 21286 21288 + 21153 21289 21149 + 21290 21289 21153 + 21289 21290 21291 + 21291 21287 21289 + 21287 21291 21279 + 21279 21291 21292 + 21292 21293 21279 + 21279 21293 21280 + 21153 21162 21290 + 21171 21290 21162 + 21290 21171 21292 + 21292 21291 21290 + 21294 21292 21171 + 21292 21294 21295 + 21295 21293 21292 + 21293 21295 21296 + 21296 21280 21293 + 21297 21280 21296 + 21280 21297 21272 + 21171 21170 21294 + 21298 21294 21170 + 21295 21294 21298 + 21298 21299 21295 + 21295 21299 21300 + 21300 21296 21295 + 21301 21296 21300 + 21296 21301 21297 + 21170 21178 21298 + 21183 21298 21178 + 21298 21183 21299 + 21299 21183 21182 + 21182 21300 21299 + 21302 21300 21182 + 21300 21302 21301 + 21301 21302 21303 + 21303 21304 21301 + 21297 21301 21304 + 21304 21305 21297 + 21272 21297 21305 + 21305 21267 21272 + 21187 21302 21182 + 21302 21187 21306 + 21306 21303 21302 + 21303 21306 21307 + 21307 21308 21303 + 21303 21308 21309 + 21309 21304 21303 + 21305 21304 21309 + 21191 21306 21187 + 21307 21306 21191 + 21191 21310 21307 + 21307 21310 21311 + 21311 21312 21307 + 21308 21307 21312 + 21312 21313 21308 + 21309 21308 21313 + 21194 21310 21191 + 21310 21194 21314 + 21314 21311 21310 + 21311 21314 21315 + 21315 21316 21311 + 21311 21316 21317 + 21317 21312 21311 + 21313 21312 21317 + 21318 21314 21194 + 21315 21314 21318 + 21318 21319 21315 + 21315 21319 21320 + 21320 21321 21315 + 21316 21315 21321 + 21321 21322 21316 + 21317 21316 21322 + 21194 21193 21318 + 21199 21318 21193 + 21318 21199 21323 + 21323 21319 21318 + 21319 21323 21324 + 21324 21320 21319 + 21320 21324 21325 + 21325 21326 21320 + 21320 21326 21327 + 21327 21321 21320 + 21322 21321 21327 + 21323 21199 21198 + 21198 21328 21323 + 21323 21328 21329 + 21329 21324 21323 + 21325 21324 21329 + 21329 21330 21325 + 21325 21330 21331 + 21331 21332 21325 + 21326 21325 21332 + 21333 21328 21198 + 21328 21333 21334 + 21334 21329 21328 + 21329 21334 21335 + 21335 21330 21329 + 21330 21335 21336 + 21336 21331 21330 + 21198 21337 21333 + 21333 21337 21338 + 21338 21339 21333 + 21333 21339 21340 + 21340 21334 21333 + 21335 21334 21340 + 21337 21198 21197 + 21197 21341 21337 + 21337 21341 21338 + 21341 21342 21338 + 21343 21338 21342 + 21338 21343 21344 + 21344 21339 21338 + 21339 21344 21345 + 21345 21340 21339 + 21341 21197 21203 + 21203 21346 21341 + 21341 21346 21347 + 21347 21342 21341 + 21348 21342 21347 + 21342 21348 21343 + 21349 21343 21348 + 21344 21343 21349 + 21346 21203 21350 + 21350 21351 21346 + 21347 21346 21351 + 21351 21352 21347 + 21353 21347 21352 + 21347 21353 21348 + 21207 21350 21203 + 21354 21350 21207 + 21351 21350 21354 + 21354 21355 21351 + 21351 21355 21356 + 21356 21352 21351 + 21357 21352 21356 + 21352 21357 21353 + 21251 21353 21357 + 21348 21353 21251 + 21207 21358 21354 + 21354 21358 21359 + 21359 21360 21354 + 21355 21354 21360 + 21360 21361 21355 + 21356 21355 21361 + 21211 21358 21207 + 21358 21211 21362 + 21362 21359 21358 + 21359 21362 21363 + 21363 21364 21359 + 21359 21364 21365 + 21365 21360 21359 + 21361 21360 21365 + 21216 21362 21211 + 21363 21362 21216 + 21216 21366 21363 + 21367 21363 21366 + 21367 21368 21363 + 21368 21364 21363 + 21368 21365 21364 + 21368 21369 21365 + 21369 21370 21365 + 21365 21370 21361 + 21371 21366 21216 + 21366 21371 21372 + 21372 21367 21366 + 21367 21372 21373 + 21368 21367 21373 + 21369 21368 21373 + 21216 21215 21371 + 21371 21215 21214 + 21214 21374 21371 + 21372 21371 21374 + 21373 21372 21374 + 21374 21223 21373 + 21373 21223 21228 + 21233 21373 21228 + 21373 21233 21369 + 21223 21374 21214 + 21251 21250 21348 + 21349 21348 21250 + 21249 21349 21250 + 21375 21349 21249 + 21349 21375 21344 + 21344 21375 21376 + 21376 21345 21344 + 21377 21345 21376 + 21340 21345 21377 + 21378 21375 21249 + 21375 21378 21379 + 21379 21376 21375 + 21380 21376 21379 + 21376 21380 21377 + 21378 21249 21255 + 21255 21381 21378 + 21378 21381 21382 + 21382 21379 21378 + 21383 21379 21382 + 21383 21380 21379 + 21380 21383 21384 + 21384 21385 21380 + 21377 21380 21385 + 21386 21381 21255 + 21381 21386 21387 + 21387 21382 21381 + 21382 21387 21388 + 21388 21389 21382 + 21382 21389 21383 + 21383 21389 21390 + 21390 21384 21383 + 21255 21259 21386 + 21386 21259 21391 + 21391 21392 21386 + 21386 21392 21393 + 21393 21387 21386 + 21388 21387 21393 + 21391 21259 21258 + 21258 21394 21391 + 21395 21391 21394 + 21391 21395 21396 + 21396 21392 21391 + 21392 21396 21397 + 21397 21393 21392 + 21263 21394 21258 + 21398 21394 21263 + 21394 21398 21395 + 21399 21395 21398 + 21396 21395 21399 + 21399 21400 21396 + 21396 21400 21401 + 21401 21397 21396 + 21402 21397 21401 + 21393 21397 21402 + 21263 21267 21398 + 21398 21267 21305 + 21305 21403 21398 + 21398 21403 21399 + 21404 21399 21403 + 21399 21404 21405 + 21405 21400 21399 + 21400 21405 21406 + 21406 21401 21400 + 21309 21403 21305 + 21403 21309 21404 + 21313 21404 21309 + 21405 21404 21313 + 21313 21407 21405 + 21405 21407 21408 + 21408 21406 21405 + 21409 21406 21408 + 21401 21406 21409 + 21409 21410 21401 + 21401 21410 21402 + 21317 21407 21313 + 21407 21317 21411 + 21411 21408 21407 + 21408 21411 21412 + 21412 21413 21408 + 21408 21413 21409 + 21409 21413 21414 + 21414 21415 21409 + 21410 21409 21415 + 21322 21411 21317 + 21412 21411 21322 + 21322 21416 21412 + 21412 21416 21417 + 21417 21418 21412 + 21413 21412 21418 + 21418 21414 21413 + 21327 21416 21322 + 21416 21327 21419 + 21419 21417 21416 + 21417 21419 21420 + 21420 21421 21417 + 21417 21421 21422 + 21422 21418 21417 + 21422 21414 21418 + 21423 21419 21327 + 21420 21419 21423 + 21423 21424 21420 + 21425 21420 21424 + 21421 21420 21425 + 21425 21426 21421 + 21426 21422 21421 + 21327 21326 21423 + 21332 21423 21326 + 21423 21332 21427 + 21427 21424 21423 + 21424 21427 21428 + 21428 21425 21424 + 21425 21428 21429 + 21426 21425 21429 + 21430 21426 21429 + 21426 21430 21422 + 21430 21431 21422 + 21422 21431 21414 + 21427 21332 21331 + 21331 21432 21427 + 21428 21427 21432 + 21429 21428 21432 + 21432 21433 21429 + 21429 21433 21434 + 21435 21429 21434 + 21429 21435 21430 + 21433 21432 21331 + 21331 21336 21433 + 21433 21336 21436 + 21436 21434 21433 + 21437 21434 21436 + 21434 21437 21435 + 21437 21438 21435 + 21435 21438 21439 + 21440 21435 21439 + 21435 21440 21430 + 21436 21336 21335 + 21335 21441 21436 + 21442 21436 21441 + 21436 21442 21437 + 21437 21442 21385 + 21385 21438 21437 + 21439 21438 21385 + 21340 21441 21335 + 21377 21441 21340 + 21441 21377 21442 + 21385 21442 21377 + 21439 21385 21384 + 21439 21384 21390 + 21390 21443 21439 + 21440 21439 21443 + 21440 21443 21444 + 21445 21440 21444 + 21440 21445 21430 + 21444 21443 21390 + 21390 21446 21444 + 21444 21446 21447 + 21447 21448 21444 + 21445 21444 21448 + 21445 21448 21449 + 21450 21445 21449 + 21445 21450 21430 + 21446 21390 21389 + 21389 21388 21446 + 21447 21446 21388 + 21388 21451 21447 + 21452 21447 21451 + 21448 21447 21452 + 21449 21448 21452 + 21449 21452 21453 + 21453 21454 21449 + 21450 21449 21454 + 21430 21450 21454 + 21454 21455 21430 + 21430 21455 21431 + 21393 21451 21388 + 21402 21451 21393 + 21451 21402 21452 + 21453 21452 21402 + 21402 21410 21453 + 21415 21453 21410 + 21453 21415 21455 + 21455 21454 21453 + 21455 21415 21414 + 21414 21431 21455 + 21357 21252 21251 + 21456 21252 21357 + 21241 21252 21456 + 21456 21242 21241 + 21242 21456 21457 + 21457 21243 21242 + 21357 21458 21456 + 21456 21458 21459 + 21459 21457 21456 + 21460 21457 21459 + 21243 21457 21460 + 21460 21461 21243 + 21243 21461 21238 + 21356 21458 21357 + 21458 21356 21462 + 21462 21459 21458 + 21459 21462 21463 + 21463 21464 21459 + 21459 21464 21460 + 21465 21460 21464 + 21465 21466 21460 + 21466 21461 21460 + 21466 21238 21461 + 21466 21233 21238 + 21361 21462 21356 + 21463 21462 21361 + 21361 21370 21463 + 21369 21463 21370 + 21464 21463 21369 + 21369 21465 21464 + 21466 21465 21369 + 21233 21466 21369 + 21467 8348 8351 + 8348 21467 21468 + 21468 8349 8348 + 21469 8349 21468 + 8349 21469 8342 + 8342 21469 8343 + 21470 21467 8351 + 21467 21470 21471 + 21467 21471 21472 + 21472 21473 21467 + 21473 21468 21467 + 21470 8351 21474 + 21474 21475 21470 + 21476 21470 21475 + 21470 21476 21471 + 21477 21471 21476 + 21471 21477 21478 + 21478 21472 21471 + 8350 21474 8351 + 21474 8350 21479 + 21480 21474 21479 + 21474 21480 21475 + 21481 21475 21480 + 21475 21481 21482 + 21476 21475 21482 + 21483 21476 21482 + 21476 21483 21477 + 21479 8350 42 + 42 21484 21479 + 21479 21484 21485 + 21485 21486 21479 + 21486 21487 21479 + 21487 21480 21479 + 21487 21481 21480 + 21488 21481 21487 + 21481 21488 21482 + 21484 42 8320 + 8320 21489 21484 + 21484 21489 21490 + 21485 21484 21490 + 21490 21491 21485 + 21492 21485 21491 + 21486 21485 21492 + 21486 21492 21488 + 21488 21487 21486 + 21489 8320 21493 + 21489 21493 21494 + 21494 21490 21489 + 21490 21494 21495 + 21490 21495 21496 + 21496 21491 21490 + 21497 21491 21496 + 21491 21497 21492 + 21488 21492 21497 + 21493 8320 8319 + 8319 21498 21493 + 21493 21498 21499 + 21499 21494 21493 + 21495 21494 21499 + 21499 21500 21495 + 21496 21495 21500 + 21501 21496 21500 + 21497 21496 21501 + 8319 21502 21498 + 21498 21502 21503 + 21503 21504 21498 + 21498 21504 21499 + 21505 21499 21504 + 21499 21505 21500 + 21502 8319 8318 + 8318 21506 21502 + 21502 21506 21507 + 21507 21503 21502 + 21508 21503 21507 + 21504 21503 21508 + 21504 21508 21505 + 21505 21508 21509 + 21509 21510 21505 + 21500 21505 21510 + 8318 8317 21506 + 21506 8317 21511 + 21511 21512 21506 + 21506 21512 21507 + 21511 8317 8316 + 8316 21513 21511 + 21513 21514 21511 + 21514 21515 21511 + 21516 21511 21515 + 21511 21516 21512 + 8324 21513 8316 + 21517 21513 8324 + 21513 21517 21518 + 21518 21514 21513 + 21518 21519 21514 + 21514 21519 21520 + 21520 21515 21514 + 21520 21521 21515 + 21515 21521 21516 + 21517 8324 8323 + 8323 21522 21517 + 21517 21522 21523 + 21523 21518 21517 + 21519 21518 21523 + 21523 21524 21519 + 21519 21524 21525 + 21525 21526 21519 + 21526 21520 21519 + 21521 21520 21526 + 21522 8323 8329 + 21522 8329 21527 + 21527 21528 21522 + 21522 21528 21523 + 8335 21527 8329 + 21529 21527 8335 + 21528 21527 21529 + 21528 21529 21530 + 21530 21531 21528 + 21528 21531 21523 + 8335 8344 21529 + 8344 21532 21529 + 21532 21533 21529 + 21533 21530 21529 + 21530 21533 21534 + 21535 21530 21534 + 21531 21530 21535 + 21536 21532 8344 + 21532 21536 21537 + 21537 21538 21532 + 21532 21538 21533 + 21538 21539 21533 + 21539 21534 21533 + 8344 8343 21536 + 21469 21536 8343 + 21536 21469 21540 + 21537 21536 21540 + 21537 21540 21541 + 21542 21537 21541 + 21538 21537 21542 + 21542 21543 21538 + 21539 21538 21543 + 21544 21539 21543 + 21534 21539 21544 + 21540 21469 21468 + 21541 21540 21468 + 21473 21541 21468 + 21473 21545 21541 + 21541 21545 21546 + 21546 21542 21541 + 21542 21546 21547 + 21547 21543 21542 + 21543 21547 21548 + 21548 21544 21543 + 21549 21544 21548 + 21544 21549 21534 + 21535 21534 21549 + 21473 21550 21545 + 21545 21550 21551 + 21551 21552 21545 + 21545 21552 21553 + 21553 21546 21545 + 21547 21546 21553 + 21553 21554 21547 + 21548 21547 21554 + 21550 21473 21472 + 21472 21555 21550 + 21551 21550 21555 + 21555 21556 21551 + 21557 21551 21556 + 21557 21552 21551 + 21552 21557 21558 + 21558 21553 21552 + 21553 21558 21559 + 21559 21554 21553 + 21472 21478 21555 + 21555 21478 21560 + 21560 21556 21555 + 21556 21560 21561 + 21562 21556 21561 + 21556 21562 21557 + 21557 21562 21563 + 21558 21557 21563 + 21564 21558 21563 + 21559 21558 21564 + 21560 21478 21565 + 21561 21560 21565 + 21565 21566 21561 + 21567 21561 21566 + 21562 21561 21567 + 21567 21563 21562 + 21568 21563 21567 + 21563 21568 21569 + 21569 21564 21563 + 21478 21477 21565 + 21570 21565 21477 + 21566 21565 21570 + 21570 21571 21566 + 21566 21571 21572 + 21572 21573 21566 + 21566 21573 21567 + 21574 21567 21573 + 21567 21574 21568 + 21477 21483 21570 + 21570 21483 21575 + 21575 21576 21570 + 21571 21570 21576 + 21576 21577 21571 + 21572 21571 21577 + 21482 21575 21483 + 21578 21575 21482 + 21575 21578 21579 + 21579 21576 21575 + 21577 21576 21579 + 21579 21580 21577 + 21577 21580 21581 + 21581 21582 21577 + 21577 21582 21572 + 21488 21578 21482 + 21579 21578 21488 + 21583 21579 21488 + 21580 21579 21583 + 21583 21584 21580 + 21581 21580 21584 + 21584 21585 21581 + 21586 21581 21585 + 21581 21586 21582 + 21582 21586 21587 + 21587 21572 21582 + 21488 21497 21583 + 21497 21588 21583 + 21589 21583 21588 + 21583 21589 21590 + 21590 21584 21583 + 21584 21590 21591 + 21591 21585 21584 + 21592 21585 21591 + 21585 21592 21586 + 21501 21588 21497 + 21501 21593 21588 + 21588 21593 21589 + 21589 21593 21594 + 21595 21589 21594 + 21590 21589 21595 + 21595 21596 21590 + 21591 21590 21596 + 21593 21501 21597 + 21597 21594 21593 + 21594 21597 21510 + 21510 21598 21594 + 21594 21598 21599 + 21599 21600 21594 + 21594 21600 21595 + 21500 21597 21501 + 21510 21597 21500 + 21598 21510 21509 + 21509 21601 21598 + 21599 21598 21601 + 21601 21602 21599 + 21603 21599 21602 + 21600 21599 21603 + 21603 21604 21600 + 21600 21604 21605 + 21605 21595 21600 + 21596 21595 21605 + 21601 21509 21507 + 21507 21606 21601 + 21601 21606 21607 + 21607 21602 21601 + 21602 21607 21608 + 21608 21609 21602 + 21602 21609 21603 + 21507 21509 21508 + 21603 21609 21610 + 21611 21610 21609 + 21610 21611 21612 + 21612 21613 21610 + 21610 21613 21614 + 21614 21615 21610 + 21610 21615 21603 + 21604 21603 21615 + 21609 21608 21611 + 21616 21611 21608 + 21612 21611 21616 + 21616 21617 21612 + 21612 21617 21618 + 21618 21619 21612 + 21613 21612 21619 + 21619 21620 21613 + 21614 21613 21620 + 21621 21616 21608 + 21622 21616 21621 + 21616 21622 21623 + 21623 21617 21616 + 21617 21623 21624 + 21624 21618 21617 + 21625 21621 21608 + 21626 21621 21625 + 21627 21621 21626 + 21621 21627 21622 + 21627 21628 21622 + 21628 21629 21622 + 21623 21622 21629 + 21608 21630 21625 + 21631 21625 21630 + 21625 21631 21632 + 21632 21633 21625 + 21625 21633 21626 + 21634 21630 21608 + 21635 21630 21634 + 21630 21635 21631 + 21636 21631 21635 + 21632 21631 21636 + 21608 21607 21634 + 21634 21607 21606 + 21606 21637 21634 + 21638 21634 21637 + 21634 21638 21635 + 21635 21638 21639 + 21639 21640 21635 + 21635 21640 21636 + 21641 21637 21606 + 21641 21642 21637 + 21637 21642 21638 + 21638 21642 21521 + 21521 21639 21638 + 21526 21639 21521 + 21639 21526 21643 + 21643 21640 21639 + 21606 21507 21641 + 21512 21641 21507 + 21642 21641 21512 + 21512 21516 21642 + 21642 21516 21521 + 21643 21526 21525 + 21525 21644 21643 + 21643 21644 21645 + 21645 21646 21643 + 21640 21643 21646 + 21646 21636 21640 + 21636 21646 21647 + 21647 21648 21636 + 21636 21648 21632 + 21649 21644 21525 + 21644 21649 21650 + 21650 21645 21644 + 21645 21650 21651 + 21651 21652 21645 + 21645 21652 21647 + 21647 21646 21645 + 21525 21653 21649 + 21649 21653 21654 + 21654 21655 21649 + 21649 21655 21656 + 21656 21650 21649 + 21651 21650 21656 + 21653 21525 21524 + 21524 21657 21653 + 21654 21653 21657 + 21657 21658 21654 + 21659 21654 21658 + 21654 21659 21660 + 21660 21655 21654 + 21655 21660 21661 + 21661 21656 21655 + 21657 21524 21523 + 21523 21662 21657 + 21657 21662 21663 + 21663 21658 21657 + 21658 21663 21664 + 21664 21665 21658 + 21658 21665 21659 + 21666 21659 21665 + 21660 21659 21666 + 21662 21523 21667 + 21667 21668 21662 + 21662 21668 21669 + 21669 21663 21662 + 21664 21663 21669 + 21670 21667 21523 + 21671 21667 21670 + 21668 21667 21671 + 21671 21672 21668 + 21668 21672 21673 + 21673 21669 21668 + 21531 21670 21523 + 21674 21670 21531 + 21674 21675 21670 + 21670 21675 21671 + 21671 21675 21676 + 21676 21677 21671 + 21672 21671 21677 + 21677 21678 21672 + 21672 21678 21673 + 21531 21535 21674 + 21674 21535 21549 + 21675 21674 21549 + 21549 21676 21675 + 21676 21549 21548 + 21676 21548 21679 + 21679 21677 21676 + 21678 21677 21679 + 21679 21680 21678 + 21678 21680 21681 + 21681 21673 21678 + 21669 21673 21681 + 21681 21682 21669 + 21669 21682 21664 + 21679 21548 21554 + 21680 21679 21554 + 21554 21559 21680 + 21681 21680 21559 + 21559 21683 21681 + 21682 21681 21683 + 21683 21684 21682 + 21664 21682 21684 + 21684 21685 21664 + 21665 21664 21685 + 21564 21683 21559 + 21684 21683 21564 + 21564 21569 21684 + 21684 21569 21686 + 21686 21685 21684 + 21687 21685 21686 + 21685 21687 21665 + 21665 21687 21666 + 21686 21569 21568 + 21568 21688 21686 + 21689 21686 21688 + 21686 21689 21687 + 21687 21689 21690 + 21690 21666 21687 + 21666 21690 21691 + 21691 21692 21666 + 21666 21692 21660 + 21693 21688 21568 + 21694 21688 21693 + 21688 21694 21689 + 21689 21694 21695 + 21695 21690 21689 + 21691 21690 21695 + 21568 21574 21693 + 21693 21574 21696 + 21696 21697 21693 + 21698 21693 21697 + 21693 21698 21694 + 21694 21698 21699 + 21699 21695 21694 + 21573 21696 21574 + 21696 21573 21572 + 21572 21587 21696 + 21696 21587 21700 + 21700 21697 21696 + 21701 21697 21700 + 21697 21701 21698 + 21698 21701 21702 + 21702 21699 21698 + 21703 21699 21702 + 21695 21699 21703 + 21703 21704 21695 + 21695 21704 21691 + 21700 21587 21586 + 21586 21592 21700 + 21705 21700 21592 + 21700 21705 21701 + 21701 21705 21706 + 21706 21702 21701 + 21702 21706 21707 + 21707 21708 21702 + 21702 21708 21703 + 21592 21709 21705 + 21705 21709 21710 + 21710 21706 21705 + 21707 21706 21710 + 21710 21711 21707 + 21707 21711 21712 + 21712 21713 21707 + 21708 21707 21713 + 21591 21709 21592 + 21709 21591 21714 + 21714 21710 21709 + 21710 21714 21715 + 21715 21711 21710 + 21711 21715 21716 + 21716 21712 21711 + 21596 21714 21591 + 21715 21714 21596 + 21596 21717 21715 + 21715 21717 21718 + 21718 21716 21715 + 21719 21716 21718 + 21712 21716 21719 + 21719 21720 21712 + 21712 21720 21721 + 21721 21713 21712 + 21605 21717 21596 + 21717 21605 21722 + 21722 21718 21717 + 21718 21722 21723 + 21723 21724 21718 + 21718 21724 21719 + 21719 21724 21725 + 21725 21726 21719 + 21720 21719 21726 + 21727 21722 21605 + 21723 21722 21727 + 21727 21728 21723 + 21723 21728 21729 + 21729 21730 21723 + 21724 21723 21730 + 21730 21725 21724 + 21605 21604 21727 + 21615 21727 21604 + 21727 21615 21614 + 21614 21728 21727 + 21728 21614 21731 + 21731 21729 21728 + 21729 21731 21732 + 21732 21733 21729 + 21729 21733 21734 + 21734 21730 21729 + 21725 21730 21734 + 21620 21731 21614 + 21732 21731 21620 + 21620 21735 21732 + 21732 21735 21736 + 21736 21737 21732 + 21733 21732 21737 + 21737 21738 21733 + 21734 21733 21738 + 21739 21735 21620 + 21735 21739 21740 + 21740 21736 21735 + 21736 21740 21741 + 21741 21742 21736 + 21736 21742 21743 + 21743 21737 21736 + 21738 21737 21743 + 21620 21619 21739 + 21739 21619 21618 + 21618 21744 21739 + 21739 21744 21745 + 21745 21740 21739 + 21741 21740 21745 + 21745 21746 21741 + 21741 21746 21747 + 21742 21741 21747 + 21747 21748 21742 + 21743 21742 21748 + 21749 21744 21618 + 21744 21749 21750 + 21750 21745 21744 + 21745 21750 21751 + 21751 21746 21745 + 21746 21751 21752 + 21752 21747 21746 + 21747 21752 21753 + 21748 21747 21753 + 21618 21624 21749 + 21749 21624 21754 + 21754 21755 21749 + 21749 21755 21756 + 21756 21750 21749 + 21751 21750 21756 + 21756 21757 21751 + 21752 21751 21757 + 21758 21752 21757 + 21752 21758 21753 + 21754 21624 21623 + 21623 21759 21754 + 21760 21754 21759 + 21754 21760 21761 + 21761 21755 21754 + 21755 21761 21762 + 21762 21756 21755 + 21756 21762 21763 + 21763 21757 21756 + 21757 21763 21758 + 21629 21759 21623 + 21764 21759 21629 + 21759 21764 21760 + 21765 21760 21764 + 21761 21760 21765 + 21765 21766 21761 + 21761 21766 21767 + 21767 21762 21761 + 21763 21762 21767 + 21767 21768 21763 + 21763 21768 21758 + 21629 21769 21764 + 21764 21769 21770 + 21770 21771 21764 + 21764 21771 21765 + 21772 21765 21771 + 21765 21772 21773 + 21773 21766 21765 + 21774 21769 21629 + 21769 21774 21775 + 21775 21770 21769 + 21776 21770 21775 + 21770 21776 21777 + 21777 21771 21770 + 21771 21777 21772 + 21778 21772 21777 + 21773 21772 21778 + 21628 21774 21629 + 21774 21628 21779 + 21779 21780 21774 + 21774 21780 21781 + 21781 21775 21774 + 21782 21775 21781 + 21775 21782 21776 + 21779 21628 21627 + 21627 21783 21779 + 21779 21783 21784 + 21784 21785 21779 + 21780 21779 21785 + 21785 21786 21780 + 21781 21780 21786 + 21626 21783 21627 + 21783 21626 21787 + 21787 21784 21783 + 21784 21787 21788 + 21788 21789 21784 + 21784 21789 21790 + 21790 21785 21784 + 21786 21785 21790 + 21791 21787 21626 + 21788 21787 21791 + 21791 21792 21788 + 21788 21792 21793 + 21793 21794 21788 + 21789 21788 21794 + 21794 21795 21789 + 21790 21789 21795 + 21626 21633 21791 + 21796 21791 21633 + 21791 21796 21797 + 21797 21792 21791 + 21792 21797 21798 + 21798 21793 21792 + 21633 21632 21796 + 21799 21796 21632 + 21797 21796 21799 + 21799 21800 21797 + 21797 21800 21801 + 21801 21798 21797 + 21802 21798 21801 + 21793 21798 21802 + 21632 21648 21799 + 21803 21799 21648 + 21799 21803 21804 + 21804 21800 21799 + 21800 21804 21805 + 21805 21801 21800 + 21801 21805 21806 + 21806 21807 21801 + 21801 21807 21802 + 21648 21647 21803 + 21808 21803 21647 + 21804 21803 21808 + 21808 21809 21804 + 21804 21809 21810 + 21810 21805 21804 + 21806 21805 21810 + 21810 21811 21806 + 21806 21811 21812 + 21807 21806 21812 + 21647 21652 21808 + 21813 21808 21652 + 21808 21813 21814 + 21814 21809 21808 + 21809 21814 21815 + 21815 21810 21809 + 21810 21815 21816 + 21816 21811 21810 + 21811 21816 21817 + 21817 21812 21811 + 21652 21651 21813 + 21818 21813 21651 + 21814 21813 21818 + 21818 21819 21814 + 21814 21819 21820 + 21820 21815 21814 + 21816 21815 21820 + 21820 21821 21816 + 21816 21821 21817 + 21651 21822 21818 + 21823 21818 21822 + 21818 21823 21824 + 21824 21819 21818 + 21819 21824 21825 + 21825 21820 21819 + 21820 21825 21826 + 21826 21821 21820 + 21656 21822 21651 + 21827 21822 21656 + 21822 21827 21823 + 21828 21823 21827 + 21824 21823 21828 + 21828 21829 21824 + 21824 21829 21830 + 21830 21825 21824 + 21826 21825 21830 + 21656 21661 21827 + 21827 21661 21831 + 21831 21832 21827 + 21827 21832 21828 + 21833 21828 21832 + 21828 21833 21834 + 21834 21829 21828 + 21829 21834 21835 + 21835 21830 21829 + 21831 21661 21660 + 21660 21692 21831 + 21836 21831 21692 + 21831 21836 21837 + 21837 21832 21831 + 21832 21837 21833 + 21838 21833 21837 + 21834 21833 21838 + 21838 21839 21834 + 21834 21839 21840 + 21840 21835 21834 + 21692 21691 21836 + 21836 21691 21841 + 21841 21776 21836 + 21776 21782 21836 + 21837 21836 21782 + 21782 21842 21837 + 21837 21842 21838 + 21691 21704 21841 + 21843 21841 21704 + 21841 21843 21844 + 21844 21845 21841 + 21841 21845 21777 + 21777 21776 21841 + 21704 21703 21843 + 21846 21843 21703 + 21844 21843 21846 + 21846 21847 21844 + 21844 21847 21848 + 21848 21849 21844 + 21845 21844 21849 + 21849 21778 21845 + 21777 21845 21778 + 21703 21708 21846 + 21713 21846 21708 + 21846 21713 21721 + 21721 21847 21846 + 21847 21721 21850 + 21850 21848 21847 + 21848 21850 21851 + 21851 21852 21848 + 21848 21852 21853 + 21853 21849 21848 + 21778 21849 21853 + 21853 21854 21778 + 21778 21854 21773 + 21855 21850 21721 + 21851 21850 21855 + 21855 21856 21851 + 21851 21856 21857 + 21857 21858 21851 + 21852 21851 21858 + 21858 21859 21852 + 21853 21852 21859 + 21721 21720 21855 + 21726 21855 21720 + 21855 21726 21860 + 21860 21856 21855 + 21856 21860 21861 + 21861 21857 21856 + 21857 21861 21862 + 21862 21863 21857 + 21857 21863 21864 + 21864 21858 21857 + 21859 21858 21864 + 21860 21726 21725 + 21725 21865 21860 + 21860 21865 21866 + 21866 21861 21860 + 21862 21861 21866 + 21866 21867 21862 + 21862 21867 21868 + 21863 21862 21868 + 21868 21869 21863 + 21864 21863 21869 + 21734 21865 21725 + 21865 21734 21870 + 21870 21866 21865 + 21866 21870 21871 + 21871 21867 21866 + 21867 21871 21872 + 21872 21868 21867 + 21868 21872 21748 + 21869 21868 21748 + 21873 21869 21748 + 21864 21869 21873 + 21738 21870 21734 + 21871 21870 21738 + 21738 21874 21871 + 21871 21874 21872 + 21748 21872 21874 + 21874 21743 21748 + 21743 21874 21738 + 21753 21873 21748 + 21875 21873 21753 + 21875 21876 21873 + 21876 21864 21873 + 21864 21876 21859 + 21859 21876 21875 + 21875 21877 21859 + 21859 21877 21853 + 21854 21853 21877 + 21878 21875 21753 + 21875 21878 21879 + 21879 21877 21875 + 21877 21879 21854 + 21773 21854 21879 + 21879 21880 21773 + 21766 21773 21880 + 21880 21767 21766 + 21881 21878 21753 + 21879 21878 21881 + 21881 21880 21879 + 21767 21880 21881 + 21881 21768 21767 + 21768 21881 21758 + 21881 21753 21758 + 21781 21842 21782 + 21842 21781 21882 + 21882 21838 21842 + 21838 21882 21883 + 21883 21839 21838 + 21839 21883 21884 + 21884 21840 21839 + 21786 21882 21781 + 21883 21882 21786 + 21786 21885 21883 + 21883 21885 21886 + 21886 21884 21883 + 21887 21884 21886 + 21840 21884 21887 + 21887 21888 21840 + 21840 21888 21889 + 21889 21835 21840 + 21790 21885 21786 + 21885 21790 21890 + 21890 21886 21885 + 21886 21890 21891 + 21891 21892 21886 + 21886 21892 21887 + 21887 21892 21893 + 21888 21887 21893 + 21893 21894 21888 + 21889 21888 21894 + 21795 21890 21790 + 21891 21890 21795 + 21795 21895 21891 + 21891 21895 21896 + 21892 21891 21896 + 21896 21893 21892 + 21894 21893 21896 + 21897 21894 21896 + 21894 21897 21898 + 21898 21889 21894 + 21889 21898 21830 + 21830 21835 21889 + 21899 21895 21795 + 21895 21899 21900 + 21900 21896 21895 + 21896 21900 21817 + 21817 21897 21896 + 21897 21817 21821 + 21821 21826 21897 + 21826 21898 21897 + 21830 21898 21826 + 21795 21794 21899 + 21899 21794 21793 + 21793 21901 21899 + 21899 21901 21900 + 21902 21900 21901 + 21900 21902 21817 + 21902 21812 21817 + 21812 21902 21807 + 21902 21802 21807 + 21802 21901 21793 + 21901 21802 21902 + 8225 21903 8303 + 8232 21903 8225 + 21903 8232 21904 + 21904 21905 21903 + 8303 21903 21905 + 21905 21906 8303 + 8298 8303 21906 + 21906 8292 8298 + 8239 21904 8232 + 21907 21904 8239 + 21905 21904 21907 + 21907 21908 21905 + 21905 21908 21909 + 21909 21906 21905 + 8292 21906 21909 + 21909 8293 8292 + 8293 21909 21910 + 21910 8288 8293 + 8239 21911 21907 + 21907 21911 21912 + 21912 21913 21907 + 21908 21907 21913 + 21913 21914 21908 + 21909 21908 21914 + 21914 21910 21909 + 21915 21910 21914 + 8288 21910 21915 + 8243 21911 8239 + 21911 8243 21916 + 21916 21912 21911 + 21912 21916 21917 + 21917 21918 21912 + 21912 21918 21919 + 21919 21913 21912 + 21914 21913 21919 + 21919 21920 21914 + 21914 21920 21915 + 8247 21916 8243 + 21917 21916 8247 + 8247 21921 21917 + 21917 21921 21922 + 21922 21923 21917 + 21918 21917 21923 + 21923 21924 21918 + 21919 21918 21924 + 21924 21925 21919 + 21920 21919 21925 + 8252 21921 8247 + 21921 8252 21926 + 21926 21922 21921 + 21922 21926 21927 + 21922 21927 21928 + 21928 21923 21922 + 21923 21928 21929 + 21924 21923 21929 + 21924 21929 21930 + 21930 21925 21924 + 21926 8252 8251 + 21931 21926 8251 + 21932 21926 21931 + 21926 21932 21927 + 21927 21932 21933 + 21928 21927 21933 + 21928 21933 21934 + 21929 21928 21934 + 21930 21929 21934 + 21931 8251 8250 + 21935 21931 8250 + 21931 21935 21936 + 21931 21936 21932 + 21932 21936 21937 + 21932 21937 21933 + 21934 21933 21937 + 21938 21934 21937 + 21930 21934 21938 + 21939 21930 21938 + 21925 21930 21939 + 8262 21935 8250 + 21935 8262 21940 + 21941 21935 21940 + 21935 21941 21936 + 21936 21941 21937 + 21941 21942 21937 + 21937 21942 21943 + 21943 21938 21937 + 21944 21940 8262 + 21940 21944 21945 + 21945 21942 21940 + 21941 21940 21942 + 8262 8261 21944 + 21944 8261 21946 + 21945 21944 21946 + 21947 21945 21946 + 21945 21947 21943 + 21942 21945 21943 + 8261 8260 21946 + 21948 21946 8260 + 21946 21948 21947 + 21948 21949 21947 + 21943 21947 21949 + 21949 21950 21943 + 21950 21951 21943 + 21952 21943 21951 + 21943 21952 21938 + 8260 8266 21948 + 21948 8266 21949 + 8266 8270 21949 + 21950 21949 8270 + 8270 8274 21950 + 21950 8274 21951 + 8274 8278 21951 + 21953 21951 8278 + 21951 21953 21952 + 21953 21954 21952 + 21938 21952 21954 + 21954 21955 21938 + 21955 21939 21938 + 8278 21956 21953 + 21953 21956 21954 + 21956 21957 21954 + 21955 21954 21957 + 21957 21958 21955 + 21955 21958 21959 + 21959 21939 21955 + 21959 21925 21939 + 21925 21959 21920 + 21956 8278 8277 + 8277 8283 21956 + 21957 21956 8283 + 8283 21960 21957 + 21958 21957 21960 + 21960 21915 21958 + 21959 21958 21915 + 21915 21920 21959 + 8288 21960 8283 + 21915 21960 8288 + 7712 21961 7713 + 7712 21962 21961 + 21961 21962 3721 + 21961 3721 21963 + 7713 21961 21963 + 21962 7712 7711 + 7711 21964 21962 + 15495 21962 21964 + 21962 15495 3721 + 21965 21966 21967 + 21968 21966 21965 + 21966 21968 21969 + 21969 21970 21966 + 21971 21966 21970 + 21971 21972 21966 + 21967 21973 21965 + 21974 21965 21973 + 21975 21965 21974 + 21965 21975 21976 + 21976 21968 21965 + 21973 21967 21977 + 21978 21973 21977 + 21973 21978 21974 + 21979 21974 21978 + 21980 21974 21979 + 21974 21980 21975 + 21977 21967 21972 + 21972 21981 21977 + 21982 21977 21981 + 21982 21978 21977 + 21982 21983 21978 + 21983 21984 21978 + 21978 21984 21979 + 21981 21972 21985 + 21981 21985 21986 + 21986 21987 21981 + 21987 21982 21981 + 21987 21988 21982 + 21982 21988 21989 + 21983 21982 21989 + 21985 21972 21990 + 21985 21990 21991 + 21986 21985 21991 + 21992 21986 21991 + 21992 21993 21986 + 21994 21986 21993 + 21987 21986 21994 + 21988 21987 21994 + 21972 21971 21990 + 21971 21995 21990 + 21990 21995 21996 + 21996 21991 21990 + 21997 21991 21996 + 21991 21997 21998 + 21998 21992 21991 + 21995 21971 21970 + 21970 21999 21995 + 21996 21995 21999 + 21999 22000 21996 + 22001 21996 22000 + 21996 22001 21997 + 21999 21970 21969 + 21969 22002 21999 + 21999 22002 22003 + 22003 22000 21999 + 22004 22000 22003 + 22000 22004 22001 + 22005 22001 22004 + 21997 22001 22005 + 22002 21969 22006 + 22006 22007 22002 + 22002 22007 22008 + 22003 22002 22008 + 22008 22009 22003 + 22010 22003 22009 + 22003 22010 22004 + 22011 22006 21969 + 22006 22011 22012 + 22013 22006 22012 + 22007 22006 22013 + 22007 22013 22014 + 22014 22008 22007 + 21969 21968 22011 + 22015 22011 21968 + 22012 22011 22015 + 22016 22012 22015 + 22013 22012 22016 + 22013 22016 22014 + 22016 22017 22014 + 22018 22014 22017 + 22008 22014 22018 + 21968 21976 22015 + 22019 22015 21976 + 22019 22016 22015 + 22020 22016 22019 + 22016 22020 22021 + 22021 22017 22016 + 22017 22021 22022 + 22022 22023 22017 + 22017 22023 22018 + 22024 22019 21976 + 22025 22019 22024 + 22019 22025 22020 + 22026 22024 21976 + 22027 22024 22026 + 22024 22027 22025 + 22025 22027 22028 + 22028 22029 22025 + 22020 22025 22029 + 21976 22030 22026 + 22026 22030 22031 + 22031 22032 22026 + 22027 22026 22032 + 22032 22028 22027 + 22028 22032 22033 + 22028 22033 22034 + 22028 22034 22029 + 21975 22030 21976 + 22030 21975 22035 + 22035 22031 22030 + 22036 22031 22035 + 22031 22036 22033 + 22033 22032 22031 + 21975 21980 22035 + 21980 22037 22035 + 22038 22035 22037 + 22035 22038 22036 + 22036 22038 22039 + 22033 22036 22039 + 22040 22033 22039 + 22034 22033 22040 + 22041 22037 21980 + 22037 22041 22042 + 22037 22042 22038 + 22043 22038 22042 + 22038 22043 22039 + 22044 22039 22043 + 22039 22044 22045 + 22045 22040 22039 + 21980 21979 22041 + 22046 22041 21979 + 22047 22041 22046 + 22041 22047 22042 + 22042 22047 22048 + 22042 22048 22043 + 22049 22043 22048 + 22043 22049 22044 + 21984 22046 21979 + 22046 21984 21983 + 22050 22046 21983 + 22046 22050 22051 + 22046 22051 22047 + 22052 22047 22051 + 22047 22052 22048 + 22052 22053 22048 + 22048 22053 22049 + 22054 22049 22053 + 22044 22049 22054 + 21989 22050 21983 + 22051 22050 21989 + 21989 22055 22051 + 22051 22055 22052 + 22053 22052 22055 + 22055 22056 22053 + 22053 22056 22057 + 22054 22053 22057 + 22058 22054 22057 + 22054 22058 22059 + 22054 22059 22044 + 22055 21989 21988 + 22056 22055 21988 + 22056 21988 21994 + 22056 21994 22057 + 21993 22057 21994 + 22057 21993 22060 + 22057 22060 22058 + 22058 22060 22061 + 22061 22062 22058 + 22059 22058 22062 + 22062 22063 22059 + 22059 22063 22064 + 22044 22059 22064 + 22060 21993 21992 + 21992 22065 22060 + 22060 22065 22061 + 22065 22066 22061 + 22067 22061 22066 + 22061 22067 22068 + 22061 22068 22069 + 22069 22062 22061 + 22063 22062 22069 + 22064 22063 22069 + 21992 21998 22065 + 22065 21998 22070 + 22070 22066 22065 + 22066 22070 22071 + 22066 22071 22067 + 22067 22071 22072 + 22073 22067 22072 + 22068 22067 22073 + 22074 22070 21998 + 22071 22070 22074 + 22074 22075 22071 + 22071 22075 22072 + 21998 21997 22074 + 21997 22076 22074 + 22077 22074 22076 + 22074 22077 22075 + 22075 22077 22078 + 22078 22072 22075 + 22005 22076 21997 + 22079 22076 22005 + 22076 22079 22077 + 22077 22079 22080 + 22080 22078 22077 + 22081 22078 22080 + 22072 22078 22081 + 22005 22082 22079 + 22079 22082 22083 + 22083 22080 22079 + 22080 22083 22084 + 22084 22085 22080 + 22080 22085 22081 + 22082 22005 22086 + 22086 22087 22082 + 22082 22087 22088 + 22088 22083 22082 + 22084 22083 22088 + 22004 22086 22005 + 22089 22086 22004 + 22087 22086 22089 + 22089 22090 22087 + 22087 22090 22091 + 22091 22088 22087 + 22088 22091 22092 + 22092 22093 22088 + 22088 22093 22084 + 22004 22010 22089 + 22089 22010 22094 + 22094 22095 22089 + 22090 22089 22095 + 22095 22096 22090 + 22090 22096 22097 + 22097 22091 22090 + 22092 22091 22097 + 22009 22094 22010 + 22094 22009 22098 + 22098 22099 22094 + 22094 22099 22100 + 22100 22095 22094 + 22096 22095 22100 + 22100 22101 22096 + 22096 22101 22102 + 22102 22097 22096 + 22098 22009 22008 + 22008 22103 22098 + 22098 22103 22104 + 22104 22105 22098 + 22099 22098 22105 + 22105 22106 22099 + 22100 22099 22106 + 22106 22107 22100 + 22101 22100 22107 + 22018 22103 22008 + 22103 22018 22108 + 22108 22104 22103 + 22109 22104 22108 + 22104 22109 22110 + 22110 22105 22104 + 22105 22110 22111 + 22111 22106 22105 + 22106 22111 22112 + 22112 22107 22106 + 22113 22108 22018 + 22113 22114 22108 + 22114 22109 22108 + 22109 22114 22115 + 22109 22115 22110 + 22111 22110 22115 + 22115 22116 22111 + 22111 22116 22117 + 22117 22112 22111 + 22018 22023 22113 + 22118 22113 22023 + 22114 22113 22118 + 22114 22118 22119 + 22119 22120 22114 + 22114 22120 22115 + 22121 22115 22120 + 22116 22115 22121 + 22023 22022 22118 + 22022 22122 22118 + 22122 22123 22118 + 22123 22119 22118 + 22123 22124 22119 + 22124 22125 22119 + 22125 22120 22119 + 22120 22125 22121 + 22126 22122 22022 + 22127 22122 22126 + 22122 22127 22128 + 22128 22123 22122 + 22124 22123 22128 + 22022 22021 22126 + 22126 22021 22020 + 22129 22126 22020 + 22129 22130 22126 + 22130 22127 22126 + 22127 22130 22131 + 22131 22128 22127 + 22131 22132 22128 + 22132 22124 22128 + 22020 22133 22129 + 22134 22129 22133 + 22129 22134 22135 + 22130 22129 22135 + 22130 22135 22136 + 22136 22131 22130 + 22132 22131 22136 + 22029 22133 22020 + 22137 22133 22029 + 22133 22137 22134 + 22138 22134 22137 + 22135 22134 22138 + 22138 22139 22135 + 22136 22135 22139 + 22140 22136 22139 + 22132 22136 22140 + 22140 22141 22132 + 22124 22132 22141 + 22137 22029 22142 + 22143 22137 22142 + 22138 22137 22143 + 22143 22144 22138 + 22145 22138 22144 + 22138 22145 22139 + 22139 22145 22146 + 22146 22140 22139 + 22034 22142 22029 + 22142 22034 22147 + 22148 22142 22147 + 22148 22143 22142 + 22149 22143 22148 + 22143 22149 22144 + 22149 22150 22144 + 22144 22150 22151 + 22144 22151 22145 + 22040 22147 22034 + 22152 22147 22040 + 22147 22152 22153 + 22153 22148 22147 + 22148 22153 22149 + 22149 22153 22154 + 22150 22149 22154 + 22154 22155 22150 + 22151 22150 22155 + 22155 22156 22151 + 22145 22151 22156 + 22146 22145 22156 + 22040 22045 22152 + 22152 22045 22064 + 22064 22157 22152 + 22153 22152 22157 + 22158 22153 22157 + 22153 22158 22154 + 22064 22045 22044 + 22121 22125 22124 + 22124 22141 22121 + 22159 22121 22141 + 22121 22159 22116 + 22116 22159 22160 + 22160 22117 22116 + 22141 22161 22159 + 22160 22159 22161 + 22161 22162 22160 + 22162 22163 22160 + 22163 22164 22160 + 22165 22160 22164 + 22117 22160 22165 + 22161 22141 22140 + 22140 22146 22161 + 22161 22146 22166 + 22166 22162 22161 + 22166 22167 22162 + 22162 22167 22168 + 22168 22163 22162 + 22168 22169 22163 + 22163 22169 22170 + 22170 22164 22163 + 22166 22146 22156 + 22167 22166 22156 + 22156 22171 22167 + 22168 22167 22171 + 22171 22172 22168 + 22169 22168 22172 + 22172 22173 22169 + 22169 22173 22174 + 22170 22169 22174 + 22156 22155 22171 + 22155 22175 22171 + 22171 22175 22176 + 22176 22172 22171 + 22173 22172 22176 + 22176 22177 22173 + 22173 22177 22178 + 22178 22174 22173 + 22175 22155 22154 + 22154 22179 22175 + 22176 22175 22179 + 22179 22180 22176 + 22177 22176 22180 + 22180 22181 22177 + 22177 22181 22182 + 22182 22178 22177 + 22183 22178 22182 + 22174 22178 22183 + 22154 22184 22179 + 22180 22179 22184 + 22185 22180 22184 + 22181 22180 22185 + 22181 22185 22186 + 22186 22187 22181 + 22181 22187 22182 + 22154 22158 22184 + 22184 22158 22188 + 22185 22184 22188 + 22188 22186 22185 + 22189 22186 22188 + 22186 22189 22187 + 22187 22189 22190 + 22190 22191 22187 + 22187 22191 22182 + 22158 22157 22188 + 22192 22188 22157 + 22188 22192 22189 + 22189 22192 22069 + 22190 22189 22069 + 22069 22068 22190 + 22068 22193 22190 + 22194 22190 22193 + 22190 22194 22191 + 22157 22064 22192 + 22192 22064 22069 + 22073 22193 22068 + 22193 22073 22195 + 22193 22195 22194 + 22194 22195 22196 + 22196 22197 22194 + 22191 22194 22197 + 22197 22182 22191 + 22182 22197 22198 + 22198 22199 22182 + 22182 22199 22183 + 22195 22073 22200 + 22200 22196 22195 + 22196 22200 22201 + 22201 22202 22196 + 22196 22202 22198 + 22198 22197 22196 + 22072 22200 22073 + 22201 22200 22072 + 22072 22203 22201 + 22201 22203 22204 + 22204 22205 22201 + 22202 22201 22205 + 22205 22206 22202 + 22198 22202 22206 + 22081 22203 22072 + 22203 22081 22207 + 22207 22204 22203 + 22204 22207 22208 + 22208 22209 22204 + 22204 22209 22210 + 22210 22205 22204 + 22206 22205 22210 + 22211 22207 22081 + 22208 22207 22211 + 22211 22212 22208 + 22208 22212 22213 + 22213 22214 22208 + 22209 22208 22214 + 22214 22215 22209 + 22210 22209 22215 + 22081 22085 22211 + 22216 22211 22085 + 22211 22216 22217 + 22217 22212 22211 + 22212 22217 22218 + 22218 22213 22212 + 22085 22084 22216 + 22219 22216 22084 + 22217 22216 22219 + 22219 22220 22217 + 22217 22220 22221 + 22221 22218 22217 + 22222 22218 22221 + 22213 22218 22222 + 22084 22093 22219 + 22223 22219 22093 + 22219 22223 22224 + 22224 22220 22219 + 22220 22224 22225 + 22225 22221 22220 + 22221 22225 22226 + 22226 22227 22221 + 22221 22227 22222 + 22093 22092 22223 + 22228 22223 22092 + 22224 22223 22228 + 22228 22229 22224 + 22224 22229 22230 + 22230 22225 22224 + 22226 22225 22230 + 22231 22228 22092 + 22232 22228 22231 + 22228 22232 22233 + 22233 22229 22228 + 22229 22233 22234 + 22234 22230 22229 + 22235 22231 22092 + 22236 22231 22235 + 22237 22231 22236 + 22231 22237 22232 + 22232 22237 22238 + 22233 22232 22238 + 22092 22239 22235 + 22240 22235 22239 + 22235 22240 22241 + 22241 22242 22235 + 22235 22242 22236 + 22097 22239 22092 + 22243 22239 22097 + 22239 22243 22240 + 22244 22240 22243 + 22241 22240 22244 + 22244 22245 22241 + 22241 22245 22246 + 22246 22247 22241 + 22242 22241 22247 + 22097 22102 22243 + 22243 22102 22248 + 22248 22249 22243 + 22243 22249 22244 + 22250 22244 22249 + 22244 22250 22251 + 22251 22245 22244 + 22245 22251 22252 + 22252 22246 22245 + 22248 22102 22101 + 22101 22253 22248 + 22254 22248 22253 + 22248 22254 22255 + 22255 22249 22248 + 22249 22255 22250 + 22256 22250 22255 + 22251 22250 22256 + 22107 22253 22101 + 22257 22253 22107 + 22253 22257 22254 + 22258 22254 22257 + 22255 22254 22258 + 22258 22259 22255 + 22255 22259 22256 + 22107 22112 22257 + 22257 22112 22117 + 22117 22260 22257 + 22257 22260 22258 + 22261 22258 22260 + 22258 22261 22262 + 22262 22259 22258 + 22259 22262 22263 + 22263 22256 22259 + 22165 22260 22117 + 22260 22165 22261 + 22264 22261 22165 + 22262 22261 22264 + 22264 22265 22262 + 22262 22265 22266 + 22266 22263 22262 + 22267 22263 22266 + 22256 22263 22267 + 22267 22268 22256 + 22256 22268 22251 + 22165 22269 22264 + 22270 22264 22269 + 22264 22270 22271 + 22271 22265 22264 + 22265 22271 22272 + 22272 22266 22265 + 22164 22269 22165 + 22164 22170 22269 + 22269 22170 22270 + 22174 22270 22170 + 22271 22270 22174 + 22174 22273 22271 + 22271 22273 22274 + 22274 22272 22271 + 22275 22272 22274 + 22266 22272 22275 + 22275 22276 22266 + 22266 22276 22267 + 22183 22273 22174 + 22273 22183 22277 + 22277 22274 22273 + 22274 22277 22278 + 22278 22279 22274 + 22274 22279 22275 + 22275 22279 22280 + 22280 22281 22275 + 22276 22275 22281 + 22282 22277 22183 + 22278 22277 22282 + 22282 22283 22278 + 22278 22283 22284 + 22284 22285 22278 + 22279 22278 22285 + 22285 22280 22279 + 22183 22199 22282 + 22286 22282 22199 + 22282 22286 22287 + 22287 22283 22282 + 22283 22287 22288 + 22288 22284 22283 + 22199 22198 22286 + 22289 22286 22198 + 22287 22286 22289 + 22289 22290 22287 + 22287 22290 22291 + 22291 22288 22287 + 22292 22288 22291 + 22284 22288 22292 + 22293 22289 22198 + 22294 22289 22293 + 22289 22294 22295 + 22295 22290 22289 + 22290 22295 22296 + 22296 22291 22290 + 22206 22293 22198 + 22297 22293 22206 + 22298 22293 22297 + 22293 22298 22294 + 22299 22294 22298 + 22295 22294 22299 + 22299 22300 22295 + 22295 22300 22301 + 22301 22296 22295 + 22206 22302 22297 + 22297 22302 22303 + 22303 22304 22297 + 22305 22297 22304 + 22297 22305 22298 + 22210 22302 22206 + 22302 22210 22306 + 22306 22303 22302 + 22303 22306 22307 + 22307 22308 22303 + 22303 22308 22309 + 22309 22304 22303 + 22310 22304 22309 + 22304 22310 22305 + 22215 22306 22210 + 22307 22306 22215 + 22215 22311 22307 + 22307 22311 22312 + 22312 22313 22307 + 22308 22307 22313 + 22313 22314 22308 + 22309 22308 22314 + 22315 22311 22215 + 22311 22315 22316 + 22316 22312 22311 + 22312 22316 22317 + 22317 22318 22312 + 22312 22318 22319 + 22319 22313 22312 + 22314 22313 22319 + 22215 22214 22315 + 22315 22214 22213 + 22213 22320 22315 + 22315 22320 22321 + 22321 22316 22315 + 22317 22316 22321 + 22321 22322 22317 + 22323 22317 22322 + 22318 22317 22323 + 22323 22324 22318 + 22319 22318 22324 + 22222 22320 22213 + 22320 22222 22325 + 22325 22321 22320 + 22321 22325 22326 + 22326 22322 22321 + 22322 22326 22323 + 22326 22327 22323 + 22323 22327 22328 + 22324 22323 22328 + 22329 22325 22222 + 22326 22325 22329 + 22329 22330 22326 + 22326 22330 22327 + 22330 22331 22327 + 22331 22328 22327 + 22222 22227 22329 + 22332 22329 22227 + 22329 22332 22331 + 22331 22330 22329 + 22227 22226 22332 + 22333 22332 22226 + 22331 22332 22333 + 22333 22334 22331 + 22331 22334 22328 + 22334 22335 22328 + 22335 22336 22328 + 22328 22336 22324 + 22226 22337 22333 + 22338 22333 22337 + 22333 22338 22335 + 22335 22334 22333 + 22230 22337 22226 + 22339 22337 22230 + 22337 22339 22338 + 22340 22338 22339 + 22335 22338 22340 + 22340 22341 22335 + 22335 22341 22336 + 22342 22336 22341 + 22336 22342 22324 + 22230 22234 22339 + 22339 22234 22343 + 22343 22344 22339 + 22339 22344 22340 + 22345 22340 22344 + 22340 22345 22346 + 22346 22341 22340 + 22341 22346 22342 + 22343 22234 22233 + 22233 22347 22343 + 22348 22343 22347 + 22343 22348 22349 + 22349 22344 22343 + 22344 22349 22345 + 22350 22345 22349 + 22346 22345 22350 + 22350 22351 22346 + 22346 22351 22342 + 22238 22347 22233 + 22352 22347 22238 + 22347 22352 22348 + 22310 22348 22352 + 22349 22348 22310 + 22310 22353 22349 + 22349 22353 22350 + 22354 22350 22353 + 22350 22354 22355 + 22355 22351 22350 + 22238 22356 22352 + 22352 22356 22298 + 22298 22305 22352 + 22352 22305 22310 + 22356 22238 22357 + 22357 22299 22356 + 22356 22299 22298 + 22237 22357 22238 + 22309 22353 22310 + 22353 22309 22354 + 22314 22354 22309 + 22355 22354 22314 + 22314 22358 22355 + 22355 22358 22359 + 22351 22355 22359 + 22359 22342 22351 + 22342 22359 22324 + 22324 22359 22358 + 22358 22319 22324 + 22319 22358 22314 + 22360 22296 22301 + 22291 22296 22360 + 22360 22361 22291 + 22291 22361 22292 + 22301 22362 22360 + 22360 22362 22363 + 22363 22364 22360 + 22361 22360 22364 + 22364 22365 22361 + 22365 22366 22361 + 22366 22292 22361 + 22367 22362 22301 + 22362 22367 22368 + 22368 22363 22362 + 22363 22368 22369 + 22369 22370 22363 + 22363 22370 22371 + 22371 22364 22363 + 22365 22364 22371 + 22301 22372 22367 + 22367 22372 22373 + 22373 22374 22367 + 22367 22374 22375 + 22375 22368 22367 + 22369 22368 22375 + 22372 22301 22300 + 22300 22376 22372 + 22373 22372 22376 + 22376 22377 22373 + 22378 22373 22377 + 22373 22378 22379 + 22379 22374 22373 + 22374 22379 22380 + 22380 22375 22374 + 22376 22300 22299 + 22299 22381 22376 + 22376 22381 22237 + 22237 22377 22376 + 22236 22377 22237 + 22377 22236 22378 + 22382 22378 22236 + 22379 22378 22382 + 22382 22383 22379 + 22379 22383 22384 + 22384 22380 22379 + 22385 22380 22384 + 22375 22380 22385 + 22385 22386 22375 + 22375 22386 22369 + 22236 22242 22382 + 22247 22382 22242 + 22382 22247 22387 + 22387 22383 22382 + 22383 22387 22388 + 22388 22384 22383 + 22384 22388 22389 + 22389 22390 22384 + 22384 22390 22385 + 22387 22247 22246 + 22246 22391 22387 + 22387 22391 22392 + 22392 22388 22387 + 22389 22388 22392 + 22392 22393 22389 + 22389 22393 22394 + 22389 22394 22395 + 22390 22389 22395 + 22385 22390 22395 + 22396 22391 22246 + 22391 22396 22397 + 22397 22392 22391 + 22392 22397 22398 + 22398 22393 22392 + 22393 22398 22399 + 22399 22394 22393 + 22394 22399 22400 + 22395 22394 22400 + 22246 22252 22396 + 22396 22252 22401 + 22401 22402 22396 + 22396 22402 22403 + 22403 22397 22396 + 22398 22397 22403 + 22403 22404 22398 + 22398 22404 22399 + 22400 22399 22404 + 22401 22252 22251 + 22251 22268 22401 + 22405 22401 22268 + 22401 22405 22406 + 22406 22402 22401 + 22402 22406 22407 + 22407 22403 22402 + 22403 22407 22408 + 22408 22404 22403 + 22404 22408 22400 + 22268 22267 22405 + 22409 22405 22267 + 22406 22405 22409 + 22409 22410 22406 + 22406 22410 22411 + 22411 22407 22406 + 22408 22407 22411 + 22411 22412 22408 + 22408 22412 22400 + 22267 22276 22409 + 22281 22409 22276 + 22409 22281 22413 + 22413 22410 22409 + 22410 22413 22414 + 22414 22411 22410 + 22411 22414 22415 + 22415 22412 22411 + 22412 22415 22416 + 22416 22400 22412 + 22413 22281 22280 + 22280 22417 22413 + 22413 22417 22418 + 22418 22414 22413 + 22415 22414 22418 + 22418 22419 22415 + 22415 22419 22416 + 22420 22416 22419 + 22416 22420 22421 + 22400 22416 22421 + 22422 22417 22280 + 22417 22422 22423 + 22423 22418 22417 + 22418 22423 22424 + 22424 22419 22418 + 22419 22424 22420 + 22420 22424 22425 + 22426 22420 22425 + 22420 22426 22421 + 22280 22285 22422 + 22422 22285 22284 + 22284 22427 22422 + 22422 22427 22428 + 22428 22423 22422 + 22423 22428 22425 + 22424 22423 22425 + 22292 22427 22284 + 22428 22427 22292 + 22366 22428 22292 + 22428 22366 22425 + 22366 22429 22425 + 22425 22429 22426 + 22429 22430 22426 + 22430 22371 22426 + 22371 22421 22426 + 22429 22366 22365 + 22365 22430 22429 + 22371 22430 22365 + 22371 22370 22421 + 22370 22369 22421 + 22369 22431 22421 + 22421 22431 22400 + 22431 22395 22400 + 22385 22395 22431 + 22386 22385 22431 + 22369 22386 22431 + 22432 22433 22434 + 22433 22432 22435 + 22435 22436 22433 + 22437 22433 22436 + 22438 22433 22437 + 22439 22432 22434 + 22432 22439 22440 + 22440 22441 22432 + 22432 22441 22442 + 22442 22435 22432 + 22443 22435 22442 + 22435 22443 22436 + 22439 22434 22444 + 22444 22445 22439 + 22440 22439 22445 + 22445 22446 22440 + 22440 22446 22447 + 22447 22448 22440 + 22441 22440 22448 + 22448 22449 22441 + 22442 22441 22449 + 22445 22444 22450 + 22451 22445 22450 + 22445 22451 22452 + 22452 22446 22445 + 22446 22452 22453 + 22453 22447 22446 + 22450 22444 22454 + 22454 22455 22450 + 22450 22455 22456 + 22456 22457 22450 + 22450 22457 22458 + 22451 22450 22458 + 22454 22444 22438 + 22438 22459 22454 + 22454 22459 22460 + 22460 22461 22454 + 22455 22454 22461 + 22461 22462 22455 + 22456 22455 22462 + 22437 22459 22438 + 22459 22437 22463 + 22463 22460 22459 + 22460 22463 22464 + 22464 22465 22460 + 22460 22465 22466 + 22466 22461 22460 + 22462 22461 22466 + 22467 22463 22437 + 22464 22463 22467 + 22467 22468 22464 + 22464 22468 22469 + 22469 22470 22464 + 22465 22464 22470 + 22470 22471 22465 + 22466 22465 22471 + 22437 22472 22467 + 22473 22467 22472 + 22467 22473 22474 + 22474 22468 22467 + 22468 22474 22475 + 22475 22469 22468 + 22436 22472 22437 + 22476 22472 22436 + 22472 22476 22473 + 22477 22473 22476 + 22474 22473 22477 + 22477 22478 22474 + 22474 22478 22479 + 22479 22475 22474 + 22436 22480 22476 + 22476 22480 22481 + 22481 22482 22476 + 22476 22482 22477 + 22483 22477 22482 + 22477 22483 22484 + 22484 22478 22477 + 22443 22480 22436 + 22480 22443 22485 + 22481 22480 22485 + 22485 22486 22481 + 22487 22481 22486 + 22482 22481 22487 + 22488 22482 22487 + 22482 22488 22483 + 22489 22483 22488 + 22484 22483 22489 + 22443 22490 22485 + 22491 22485 22490 + 22485 22491 22492 + 22492 22493 22485 + 22485 22493 22494 + 22494 22486 22485 + 22495 22490 22443 + 22496 22490 22495 + 22490 22496 22491 + 22497 22491 22496 + 22492 22491 22497 + 22443 22498 22495 + 22495 22498 22499 + 22499 22500 22495 + 22501 22495 22500 + 22495 22501 22496 + 22442 22498 22443 + 22498 22442 22502 + 22502 22499 22498 + 22499 22502 22503 + 22503 22504 22499 + 22499 22504 22505 + 22505 22500 22499 + 22506 22500 22505 + 22500 22506 22501 + 22449 22502 22442 + 22503 22502 22449 + 22449 22507 22503 + 22503 22507 22508 + 22508 22509 22503 + 22504 22503 22509 + 22509 22510 22504 + 22505 22504 22510 + 22511 22507 22449 + 22507 22511 22512 + 22512 22508 22507 + 22508 22512 22513 + 22513 22514 22508 + 22508 22514 22515 + 22515 22509 22508 + 22449 22448 22511 + 22511 22448 22447 + 22447 22516 22511 + 22511 22516 22517 + 22517 22512 22511 + 22513 22512 22517 + 22517 22518 22513 + 22519 22513 22518 + 22519 22520 22513 + 22520 22514 22513 + 22520 22515 22514 + 22521 22516 22447 + 22516 22521 22522 + 22522 22517 22516 + 22517 22522 22523 + 22523 22518 22517 + 22518 22523 22524 + 22524 22519 22518 + 22447 22453 22521 + 22521 22453 22525 + 22525 22526 22521 + 22521 22526 22527 + 22527 22522 22521 + 22523 22522 22527 + 22527 22528 22523 + 22524 22523 22528 + 22529 22524 22528 + 22519 22524 22529 + 22525 22453 22452 + 22452 22530 22525 + 22531 22525 22530 + 22525 22531 22532 + 22532 22526 22525 + 22526 22532 22533 + 22533 22527 22526 + 22527 22533 22534 + 22534 22528 22527 + 22528 22534 22529 + 22535 22530 22452 + 22536 22530 22535 + 22530 22536 22531 + 22537 22531 22536 + 22532 22531 22537 + 22537 22538 22532 + 22532 22538 22539 + 22539 22533 22532 + 22534 22533 22539 + 22452 22451 22535 + 22535 22451 22458 + 22458 22540 22535 + 22541 22535 22540 + 22535 22541 22536 + 22536 22541 22542 + 22542 22543 22536 + 22536 22543 22537 + 22544 22540 22458 + 22545 22540 22544 + 22540 22545 22541 + 22542 22541 22545 + 22545 22546 22542 + 22547 22542 22546 + 22542 22547 22548 + 22548 22543 22542 + 22458 22549 22544 + 22544 22549 22550 + 22550 22551 22544 + 22552 22544 22551 + 22544 22552 22545 + 22545 22552 22553 + 22553 22546 22545 + 22554 22549 22458 + 22549 22554 22555 + 22555 22550 22549 + 22556 22550 22555 + 22550 22556 22557 + 22557 22551 22550 + 22458 22558 22554 + 22554 22558 22559 + 22559 22560 22554 + 22554 22560 22561 + 22561 22555 22554 + 22562 22555 22561 + 22555 22562 22556 + 22558 22458 22457 + 22457 22563 22558 + 22559 22558 22563 + 22563 22564 22559 + 22565 22559 22564 + 22559 22565 22566 + 22566 22560 22559 + 22560 22566 22567 + 22567 22561 22560 + 22563 22457 22456 + 22456 22568 22563 + 22563 22568 22569 + 22569 22564 22563 + 22570 22564 22569 + 22564 22570 22565 + 22571 22565 22570 + 22566 22565 22571 + 22568 22456 22572 + 22572 22573 22568 + 22569 22568 22573 + 22573 22574 22569 + 22575 22569 22574 + 22569 22575 22570 + 22462 22572 22456 + 22576 22572 22462 + 22573 22572 22576 + 22576 22577 22573 + 22573 22577 22578 + 22578 22574 22573 + 22579 22574 22578 + 22574 22579 22575 + 22580 22575 22579 + 22570 22575 22580 + 22462 22581 22576 + 22576 22581 22582 + 22582 22583 22576 + 22577 22576 22583 + 22583 22584 22577 + 22578 22577 22584 + 22466 22581 22462 + 22581 22466 22585 + 22585 22582 22581 + 22582 22585 22586 + 22586 22587 22582 + 22582 22587 22588 + 22588 22583 22582 + 22584 22583 22588 + 22471 22585 22466 + 22586 22585 22471 + 22471 22589 22586 + 22590 22586 22589 + 22587 22586 22590 + 22590 22591 22587 + 22591 22588 22587 + 22592 22588 22591 + 22588 22592 22584 + 22593 22589 22471 + 22589 22593 22594 + 22594 22590 22589 + 22590 22594 22595 + 22591 22590 22595 + 22596 22591 22595 + 22591 22596 22592 + 22596 22597 22592 + 22584 22592 22597 + 22471 22470 22593 + 22593 22470 22469 + 22469 22598 22593 + 22594 22593 22598 + 22595 22594 22598 + 22598 22599 22595 + 22595 22599 22600 + 22595 22600 22601 + 22602 22595 22601 + 22595 22602 22596 + 22599 22598 22469 + 22599 22469 22475 + 22599 22475 22600 + 22475 22479 22600 + 22600 22479 22603 + 22601 22600 22603 + 22601 22603 22604 + 22604 22605 22601 + 22601 22605 22602 + 22602 22605 22606 + 22607 22602 22606 + 22602 22607 22596 + 22603 22479 22478 + 22478 22484 22603 + 22604 22603 22484 + 22484 22608 22604 + 22609 22604 22608 + 22605 22604 22609 + 22606 22605 22609 + 22606 22609 22610 + 22610 22611 22606 + 22607 22606 22611 + 22489 22608 22484 + 22612 22608 22489 + 22608 22612 22609 + 22610 22609 22612 + 22612 22613 22610 + 22614 22610 22613 + 22611 22610 22614 + 22615 22611 22614 + 22607 22611 22615 + 22616 22607 22615 + 22607 22616 22596 + 22489 22617 22612 + 22612 22617 22618 + 22618 22613 22612 + 22619 22613 22618 + 22613 22619 22614 + 22620 22614 22619 + 22615 22614 22620 + 22620 22621 22615 + 22616 22615 22621 + 22617 22489 22622 + 22622 22623 22617 + 22618 22617 22623 + 22623 22624 22618 + 22625 22618 22624 + 22618 22625 22619 + 22488 22622 22489 + 22626 22622 22488 + 22623 22622 22626 + 22626 22627 22623 + 22623 22627 22628 + 22628 22624 22623 + 22629 22624 22628 + 22624 22629 22625 + 22630 22625 22629 + 22619 22625 22630 + 22488 22487 22626 + 22626 22487 22631 + 22631 22632 22626 + 22627 22626 22632 + 22632 22633 22627 + 22628 22627 22633 + 22633 22634 22628 + 22635 22628 22634 + 22628 22635 22629 + 22486 22631 22487 + 22631 22486 22494 + 22494 22636 22631 + 22631 22636 22637 + 22637 22632 22631 + 22633 22632 22637 + 22637 22638 22633 + 22633 22638 22639 + 22639 22634 22633 + 22640 22634 22639 + 22634 22640 22635 + 22636 22494 22641 + 22641 22642 22636 + 22637 22636 22642 + 22642 22643 22637 + 22643 22644 22637 + 22644 22645 22637 + 22638 22637 22645 + 22646 22641 22494 + 22647 22641 22646 + 22642 22641 22647 + 22642 22647 22648 + 22648 22643 22642 + 22643 22648 22649 + 22643 22649 22644 + 22494 22493 22646 + 22650 22646 22493 + 22646 22650 22651 + 22646 22651 22647 + 22648 22647 22651 + 22652 22648 22651 + 22648 22652 22653 + 22649 22648 22653 + 22493 22492 22650 + 22650 22492 22654 + 22654 22655 22650 + 22655 22656 22650 + 22651 22650 22656 + 22656 22657 22651 + 22651 22657 22658 + 22658 22652 22651 + 22492 22659 22654 + 22660 22654 22659 + 22654 22660 22661 + 22654 22661 22662 + 22662 22655 22654 + 22497 22659 22492 + 22663 22659 22497 + 22659 22663 22660 + 22664 22660 22663 + 22661 22660 22664 + 22664 22665 22661 + 22662 22661 22665 + 22666 22662 22665 + 22667 22662 22666 + 22655 22662 22667 + 22497 22668 22663 + 22663 22668 22669 + 22669 22670 22663 + 22663 22670 22664 + 22671 22664 22670 + 22665 22664 22671 + 22668 22497 22672 + 22672 22673 22668 + 22669 22668 22673 + 22673 22547 22669 + 22546 22669 22547 + 22669 22546 22553 + 22553 22670 22669 + 22670 22553 22671 + 22496 22672 22497 + 22674 22672 22496 + 22673 22672 22674 + 22674 22675 22673 + 22673 22675 22548 + 22548 22547 22673 + 22496 22501 22674 + 22674 22501 22506 + 22506 22676 22674 + 22675 22674 22676 + 22676 22677 22675 + 22548 22675 22677 + 22677 22678 22548 + 22543 22548 22678 + 22678 22537 22543 + 22679 22676 22506 + 22677 22676 22679 + 22679 22680 22677 + 22677 22680 22681 + 22681 22678 22677 + 22537 22678 22681 + 22681 22538 22537 + 22538 22681 22682 + 22682 22539 22538 + 22506 22683 22679 + 22679 22683 22684 + 22684 22685 22679 + 22680 22679 22685 + 22685 22686 22680 + 22681 22680 22686 + 22686 22682 22681 + 22687 22682 22686 + 22539 22682 22687 + 22505 22683 22506 + 22683 22505 22688 + 22688 22684 22683 + 22689 22684 22688 + 22684 22689 22690 + 22690 22685 22684 + 22690 22691 22685 + 22691 22686 22685 + 22686 22691 22687 + 22510 22688 22505 + 22692 22688 22510 + 22692 22689 22688 + 22693 22689 22692 + 22693 22690 22689 + 22693 22694 22690 + 22694 22691 22690 + 22687 22691 22694 + 22695 22687 22694 + 22687 22695 22539 + 22539 22695 22534 + 22529 22534 22695 + 22510 22696 22692 + 22697 22692 22696 + 22697 22693 22692 + 22693 22697 22519 + 22529 22693 22519 + 22529 22694 22693 + 22694 22529 22695 + 22696 22510 22509 + 22515 22696 22509 + 22697 22696 22515 + 22520 22697 22515 + 22697 22520 22519 + 22698 22671 22553 + 22699 22671 22698 + 22671 22699 22665 + 22665 22699 22700 + 22700 22701 22665 + 22665 22701 22666 + 22553 22552 22698 + 22551 22698 22552 + 22702 22698 22551 + 22698 22702 22699 + 22700 22699 22702 + 22702 22703 22700 + 22704 22700 22703 + 22700 22704 22705 + 22705 22701 22700 + 22701 22705 22706 + 22706 22666 22701 + 22551 22557 22702 + 22702 22557 22707 + 22707 22703 22702 + 22708 22703 22707 + 22703 22708 22704 + 22709 22704 22708 + 22705 22704 22709 + 22709 22710 22705 + 22705 22710 22706 + 22707 22557 22556 + 22556 22711 22707 + 22712 22707 22711 + 22707 22712 22708 + 22708 22712 22713 + 22713 22714 22708 + 22708 22714 22709 + 22715 22709 22714 + 22710 22709 22715 + 22716 22711 22556 + 22717 22711 22716 + 22711 22717 22712 + 22713 22712 22717 + 22718 22713 22717 + 22719 22713 22718 + 22713 22719 22720 + 22720 22714 22713 + 22714 22720 22715 + 22556 22562 22716 + 22716 22562 22721 + 22721 22722 22716 + 22723 22716 22722 + 22716 22723 22717 + 22717 22723 22724 + 22724 22725 22717 + 22717 22725 22718 + 22561 22721 22562 + 22726 22721 22561 + 22721 22726 22727 + 22727 22722 22721 + 22722 22727 22728 + 22728 22729 22722 + 22722 22729 22723 + 22724 22723 22729 + 22561 22567 22726 + 22726 22567 22730 + 22730 22731 22726 + 22726 22731 22732 + 22732 22727 22726 + 22728 22727 22732 + 22732 22733 22728 + 22728 22733 22734 + 22729 22728 22734 + 22730 22567 22566 + 22566 22735 22730 + 22736 22730 22735 + 22730 22736 22737 + 22737 22731 22730 + 22731 22737 22738 + 22738 22732 22731 + 22733 22732 22738 + 22571 22735 22566 + 22739 22735 22571 + 22735 22739 22736 + 22740 22736 22739 + 22737 22736 22740 + 22740 22741 22737 + 22738 22737 22741 + 22742 22738 22741 + 22743 22738 22742 + 22738 22743 22733 + 22571 22744 22739 + 22739 22744 22640 + 22640 22745 22739 + 22739 22745 22740 + 22746 22740 22745 + 22740 22746 22741 + 22744 22571 22747 + 22747 22748 22744 + 22640 22744 22748 + 22748 22635 22640 + 22629 22635 22748 + 22748 22749 22629 + 22629 22749 22630 + 22570 22747 22571 + 22580 22747 22570 + 22748 22747 22580 + 22580 22749 22748 + 22749 22580 22750 + 22750 22630 22749 + 22630 22750 22751 + 22751 22752 22630 + 22630 22752 22619 + 22619 22752 22620 + 22579 22750 22580 + 22751 22750 22579 + 22579 22753 22751 + 22751 22753 22754 + 22754 22755 22751 + 22752 22751 22755 + 22755 22620 22752 + 22621 22620 22755 + 22756 22621 22755 + 22616 22621 22756 + 22578 22753 22579 + 22753 22578 22757 + 22757 22754 22753 + 22597 22754 22757 + 22597 22758 22754 + 22754 22758 22756 + 22756 22755 22754 + 22584 22757 22578 + 22597 22757 22584 + 22639 22745 22640 + 22745 22639 22746 + 22746 22639 22759 + 22759 22760 22746 + 22741 22746 22760 + 22760 22761 22741 + 22741 22761 22742 + 22639 22638 22759 + 22645 22759 22638 + 22762 22759 22645 + 22759 22762 22763 + 22763 22760 22759 + 22761 22760 22763 + 22761 22763 22764 + 22764 22765 22761 + 22761 22765 22742 + 22645 22766 22762 + 22762 22766 22767 + 22767 22768 22762 + 22762 22768 22763 + 22768 22764 22763 + 22769 22764 22768 + 22765 22764 22769 + 22765 22769 22770 + 22770 22742 22765 + 22766 22645 22771 + 22771 22772 22766 + 22772 22767 22766 + 22767 22772 22773 + 22774 22767 22773 + 22767 22774 22775 + 22768 22767 22775 + 22768 22775 22769 + 22770 22769 22775 + 22645 22644 22771 + 22776 22771 22644 + 22771 22776 22777 + 22777 22772 22771 + 22772 22777 22778 + 22778 22773 22772 + 22773 22778 22779 + 22779 22780 22773 + 22774 22773 22780 + 22649 22776 22644 + 22777 22776 22649 + 22649 22653 22777 + 22778 22777 22653 + 22653 22781 22778 + 22779 22778 22781 + 22781 22782 22779 + 22783 22779 22782 + 22780 22779 22783 + 22781 22653 22652 + 22652 22784 22781 + 22781 22784 22785 + 22785 22782 22781 + 22786 22782 22785 + 22782 22786 22783 + 22787 22783 22786 + 22788 22783 22787 + 22788 22780 22783 + 22784 22652 22658 + 22658 22789 22784 + 22785 22784 22789 + 22790 22785 22789 + 22791 22785 22790 + 22785 22791 22786 + 22786 22791 22792 + 22786 22792 22787 + 22658 22793 22789 + 22789 22793 22794 + 22789 22794 22790 + 22795 22790 22794 + 22795 22796 22790 + 22796 22797 22790 + 22790 22797 22791 + 22793 22658 22657 + 22657 22798 22793 + 22799 22793 22798 + 22793 22799 22794 + 22794 22799 22800 + 22794 22800 22795 + 22801 22795 22800 + 22795 22801 22802 + 22796 22795 22802 + 22657 22656 22798 + 22798 22656 22655 + 22655 22667 22798 + 22667 22803 22798 + 22803 22804 22798 + 22804 22799 22798 + 22804 22805 22799 + 22805 22800 22799 + 22805 22806 22800 + 22806 22801 22800 + 22666 22803 22667 + 22803 22666 22706 + 22803 22706 22807 + 22807 22804 22803 + 22804 22807 22805 + 22805 22807 22808 + 22805 22808 22806 + 22809 22806 22808 + 22810 22806 22809 + 22806 22810 22801 + 22810 22811 22801 + 22802 22801 22811 + 22812 22807 22706 + 22807 22812 22808 + 22808 22812 22813 + 22808 22813 22809 + 22814 22809 22813 + 22815 22809 22814 + 22809 22815 22810 + 22810 22815 22816 + 22810 22816 22811 + 22817 22812 22706 + 22817 22818 22812 + 22818 22813 22812 + 22818 22814 22813 + 22710 22817 22706 + 22819 22817 22710 + 22817 22819 22818 + 22818 22819 22820 + 22818 22820 22814 + 22821 22814 22820 + 22821 22822 22814 + 22822 22823 22814 + 22814 22823 22815 + 22710 22715 22819 + 22824 22819 22715 + 22819 22824 22820 + 22820 22824 22825 + 22820 22825 22821 + 22826 22821 22825 + 22826 22827 22821 + 22827 22822 22821 + 22828 22822 22827 + 22823 22822 22828 + 22829 22824 22715 + 22829 22830 22824 + 22830 22825 22824 + 22830 22826 22825 + 22831 22826 22830 + 22827 22826 22831 + 22827 22831 22832 + 22827 22832 22828 + 22720 22829 22715 + 22833 22829 22720 + 22830 22829 22833 + 22834 22830 22833 + 22834 22835 22830 + 22830 22835 22831 + 22836 22831 22835 + 22831 22836 22832 + 22720 22719 22833 + 22837 22833 22719 + 22837 22838 22833 + 22833 22838 22839 + 22840 22833 22839 + 22833 22840 22834 + 22718 22837 22719 + 22841 22837 22718 + 22837 22841 22842 + 22842 22838 22837 + 22839 22838 22842 + 22839 22842 22843 + 22843 22844 22839 + 22840 22839 22844 + 22844 22845 22840 + 22834 22840 22845 + 22841 22718 22725 + 22725 22846 22841 + 22842 22841 22846 + 22843 22842 22846 + 22846 22847 22843 + 22848 22843 22847 + 22849 22843 22848 + 22849 22844 22843 + 22845 22844 22849 + 22846 22725 22724 + 22724 22850 22846 + 22846 22850 22851 + 22851 22847 22846 + 22851 22852 22847 + 22852 22853 22847 + 22847 22853 22848 + 22850 22724 22854 + 22854 22855 22850 + 22855 22856 22850 + 22856 22851 22850 + 22856 22857 22851 + 22857 22852 22851 + 22729 22854 22724 + 22734 22854 22729 + 22855 22854 22734 + 22855 22734 22858 + 22858 22856 22855 + 22857 22856 22858 + 22857 22858 22859 + 22857 22859 22860 + 22857 22860 22852 + 22860 22861 22852 + 22853 22852 22861 + 22861 22862 22853 + 22853 22862 22848 + 22863 22858 22734 + 22858 22863 22859 + 22859 22863 22864 + 22859 22864 22865 + 22865 22860 22859 + 22866 22860 22865 + 22860 22866 22867 + 22867 22861 22860 + 22862 22861 22867 + 22733 22863 22734 + 22863 22733 22743 + 22864 22863 22743 + 22864 22743 22868 + 22868 22869 22864 + 22869 22865 22864 + 22866 22865 22869 + 22869 22870 22866 + 22866 22870 22867 + 22870 22871 22867 + 22862 22867 22871 + 22871 22872 22862 + 22862 22872 22848 + 22742 22868 22743 + 22868 22742 22770 + 22770 22873 22868 + 22868 22873 22869 + 22873 22874 22869 + 22874 22870 22869 + 22871 22870 22874 + 22875 22871 22874 + 22872 22871 22875 + 22875 22876 22872 + 22877 22872 22876 + 22872 22877 22848 + 22873 22770 22878 + 22878 22879 22873 + 22874 22873 22879 + 22879 22875 22874 + 22879 22880 22875 + 22880 22876 22875 + 22876 22880 22881 + 22881 22882 22876 + 22882 22877 22876 + 22883 22878 22770 + 22880 22878 22883 + 22879 22878 22880 + 22775 22883 22770 + 22884 22883 22775 + 22883 22884 22881 + 22883 22881 22880 + 22775 22774 22884 + 22780 22884 22774 + 22881 22884 22780 + 22780 22788 22881 + 22881 22788 22882 + 22787 22882 22788 + 22877 22882 22787 + 22787 22885 22877 + 22877 22885 22848 + 22885 22849 22848 + 22886 22849 22885 + 22886 22845 22849 + 22887 22845 22886 + 22845 22887 22834 + 22885 22787 22792 + 22792 22888 22885 + 22885 22888 22886 + 22886 22888 22889 + 22887 22886 22889 + 22887 22889 22890 + 22834 22887 22890 + 22834 22890 22891 + 22835 22834 22891 + 22891 22836 22835 + 22889 22888 22792 + 22792 22892 22889 + 22890 22889 22892 + 22893 22890 22892 + 22891 22890 22893 + 22894 22891 22893 + 22891 22894 22836 + 22894 22895 22836 + 22832 22836 22895 + 22791 22892 22792 + 22893 22892 22791 + 22797 22893 22791 + 22894 22893 22797 + 22797 22796 22894 + 22895 22894 22796 + 22802 22895 22796 + 22896 22895 22802 + 22895 22896 22832 + 22828 22832 22896 + 22816 22828 22896 + 22816 22897 22828 + 22828 22897 22823 + 22823 22897 22815 + 22802 22811 22896 + 22816 22896 22811 + 22815 22897 22816 + 22898 22756 22758 + 22898 22616 22756 + 22616 22898 22596 + 22596 22898 22597 + 22898 22758 22597 + 22899 22900 22901 + 22900 22899 22902 + 22903 22899 22901 + 22899 22903 22904 + 22904 22905 22899 + 22906 22899 22905 + 22899 22906 22902 + 22907 22903 22901 + 22903 22907 22908 + 22908 22909 22903 + 22903 22909 22904 + 22910 22904 22909 + 22905 22904 22910 + 22901 22911 22907 + 22907 22911 22912 + 22908 22907 22912 + 22913 22908 22912 + 22909 22908 22913 + 22909 22913 22914 + 22909 22914 22910 + 22911 22901 22915 + 22915 22916 22911 + 22917 22911 22916 + 22911 22917 22912 + 22918 22912 22917 + 22912 22918 22913 + 22915 22901 22919 + 22920 22915 22919 + 22916 22915 22920 + 22916 22920 22921 + 22916 22921 22922 + 22922 22917 22916 + 22917 22922 22923 + 22923 22918 22917 + 22901 22924 22919 + 22924 22925 22919 + 22919 22925 22926 + 22919 22926 22920 + 22927 22920 22926 + 22921 22920 22927 + 22927 22928 22921 + 22921 22928 22929 + 22922 22921 22929 + 22924 22902 22925 + 22930 22925 22902 + 22925 22930 22926 + 22926 22930 22931 + 22931 22932 22926 + 22926 22932 22933 + 22926 22933 22927 + 22934 22927 22933 + 22927 22934 22928 + 22902 22935 22930 + 22931 22930 22935 + 22935 22936 22931 + 22936 22937 22931 + 22937 22938 22931 + 22939 22931 22938 + 22931 22939 22932 + 22902 22906 22935 + 22906 22940 22935 + 22935 22940 22936 + 22940 22941 22936 + 22942 22936 22941 + 22936 22942 22943 + 22943 22937 22936 + 22940 22906 22905 + 22905 22944 22940 + 22941 22940 22944 + 22945 22941 22944 + 22942 22941 22945 + 22945 22946 22942 + 22942 22946 22947 + 22943 22942 22947 + 22905 22910 22944 + 22944 22910 22948 + 22948 22949 22944 + 22944 22949 22945 + 22950 22945 22949 + 22945 22950 22946 + 22946 22950 22951 + 22951 22952 22946 + 22946 22952 22947 + 22953 22948 22910 + 22954 22948 22953 + 22949 22948 22954 + 22949 22954 22950 + 22951 22950 22954 + 22955 22951 22954 + 22956 22951 22955 + 22952 22951 22956 + 22952 22956 22957 + 22957 22947 22952 + 22910 22914 22953 + 22914 22958 22953 + 22959 22953 22958 + 22953 22959 22960 + 22960 22961 22953 + 22953 22961 22954 + 22954 22961 22955 + 22962 22958 22914 + 22963 22958 22962 + 22958 22963 22959 + 22964 22959 22963 + 22960 22959 22964 + 22914 22913 22962 + 22965 22962 22913 + 22963 22962 22965 + 22965 22966 22963 + 22963 22966 22964 + 22967 22964 22966 + 22964 22967 22968 + 22968 22969 22964 + 22964 22969 22960 + 22913 22918 22965 + 22918 22970 22965 + 22971 22965 22970 + 22965 22971 22966 + 22966 22971 22967 + 22972 22967 22971 + 22968 22967 22972 + 22973 22970 22918 + 22974 22970 22973 + 22970 22974 22971 + 22971 22974 22972 + 22975 22972 22974 + 22972 22975 22976 + 22976 22977 22972 + 22972 22977 22968 + 22918 22923 22973 + 22973 22923 22978 + 22978 22979 22973 + 22980 22973 22979 + 22973 22980 22974 + 22974 22980 22975 + 22975 22980 22981 + 22981 22982 22975 + 22976 22975 22982 + 22983 22978 22923 + 22978 22983 22984 + 22984 22985 22978 + 22978 22985 22986 + 22986 22979 22978 + 22981 22979 22986 + 22979 22981 22980 + 22923 22922 22983 + 22929 22983 22922 + 22984 22983 22929 + 22929 22987 22984 + 22984 22987 22988 + 22988 22989 22984 + 22985 22984 22989 + 22989 22990 22985 + 22986 22985 22990 + 22929 22991 22987 + 22991 22992 22987 + 22987 22992 22993 + 22993 22988 22987 + 22991 22929 22994 + 22994 22995 22991 + 22996 22991 22995 + 22992 22991 22996 + 22996 22997 22992 + 22992 22997 22998 + 22998 22993 22992 + 22999 22994 22929 + 23000 22994 22999 + 23000 22995 22994 + 22995 23000 23001 + 23001 23002 22995 + 22995 23002 22996 + 22928 22999 22929 + 23003 22999 22928 + 23003 23004 22999 + 22999 23004 23000 + 23000 23004 23005 + 23005 23001 23000 + 23006 23001 23005 + 23002 23001 23006 + 22928 22934 23003 + 23003 22934 23007 + 23007 23008 23003 + 23008 23009 23003 + 23009 23010 23003 + 23004 23003 23010 + 23010 23005 23004 + 23011 23005 23010 + 23005 23011 23006 + 22933 23007 22934 + 23012 23007 22933 + 23007 23012 23013 + 23013 23008 23007 + 23014 23008 23013 + 23008 23014 23015 + 23015 23009 23008 + 23012 22933 22932 + 22932 22939 23012 + 23012 22939 23013 + 22939 23016 23013 + 23014 23013 23016 + 23016 23017 23014 + 23014 23017 23018 + 23015 23014 23018 + 23018 23019 23015 + 23020 23015 23019 + 23015 23020 23009 + 22938 23016 22939 + 23017 23016 22938 + 22938 23021 23017 + 23021 23022 23017 + 23017 23022 23023 + 23023 23018 23017 + 23023 23024 23018 + 23018 23024 23019 + 23025 23021 22938 + 23021 23025 23026 + 23022 23021 23026 + 23026 23027 23022 + 23022 23027 23023 + 23027 23028 23023 + 23028 23029 23023 + 23023 23029 23024 + 22937 23025 22938 + 23030 23025 22937 + 23025 23030 23031 + 23031 23026 23025 + 23027 23026 23031 + 23028 23027 23031 + 23028 23031 23032 + 23028 23032 23029 + 23032 23033 23029 + 23033 23024 23029 + 22937 22943 23030 + 23030 22943 23034 + 23034 23035 23030 + 23031 23030 23035 + 23031 23035 23032 + 23032 23035 23034 + 23033 23032 23034 + 23034 23036 23033 + 23037 23033 23036 + 23024 23033 23037 + 23038 23024 23037 + 23024 23038 23019 + 22947 23034 22943 + 23036 23034 22947 + 22947 23039 23036 + 23040 23036 23039 + 23040 23037 23036 + 23040 23041 23037 + 23037 23041 23042 + 23042 23043 23037 + 23037 23043 23038 + 22947 22957 23039 + 23039 22957 23044 + 23044 23045 23039 + 23039 23045 23040 + 23041 23040 23045 + 23045 23046 23041 + 23042 23041 23046 + 23046 23047 23042 + 23048 23042 23047 + 23043 23042 23048 + 23044 22957 22956 + 23049 23044 22956 + 23046 23044 23049 + 23045 23044 23046 + 22956 23050 23049 + 23050 23051 23049 + 23052 23049 23051 + 23049 23052 23053 + 23053 23047 23049 + 23049 23047 23046 + 22955 23050 22956 + 22955 23054 23050 + 23050 23054 23055 + 23055 23051 23050 + 23056 23051 23055 + 23051 23056 23052 + 23057 23052 23056 + 23053 23052 23057 + 23054 22955 22961 + 22961 22960 23054 + 23055 23054 22960 + 22960 22969 23055 + 23058 23055 22969 + 23055 23058 23056 + 23056 23058 23059 + 23059 23060 23056 + 23056 23060 23057 + 23061 23057 23060 + 23057 23061 23062 + 23057 23062 23053 + 22969 22968 23058 + 23059 23058 22968 + 22968 22977 23059 + 23063 23059 22977 + 23059 23063 23064 + 23064 23060 23059 + 23060 23064 23061 + 23061 23064 23065 + 23065 23066 23061 + 23062 23061 23066 + 23066 23067 23062 + 23053 23062 23067 + 22977 22976 23063 + 23063 22976 23068 + 23068 23069 23063 + 23064 23063 23069 + 23069 23065 23064 + 23065 23069 23070 + 23070 23071 23065 + 23065 23071 23072 + 23072 23066 23065 + 23067 23066 23072 + 22982 23068 22976 + 23068 22982 23073 + 23073 23074 23068 + 23068 23074 23070 + 23070 23069 23068 + 23073 22982 22981 + 22981 23075 23073 + 23073 23075 23076 + 23076 23077 23073 + 23074 23073 23077 + 23077 23078 23074 + 23070 23074 23078 + 23078 23079 23070 + 23071 23070 23079 + 22986 23075 22981 + 23075 22986 23080 + 23080 23076 23075 + 23076 23080 23081 + 23081 23082 23076 + 23076 23082 23083 + 23083 23077 23076 + 23078 23077 23083 + 22990 23080 22986 + 23081 23080 22990 + 22990 23084 23081 + 23081 23084 23085 + 23085 23086 23081 + 23082 23081 23086 + 23086 23087 23082 + 23083 23082 23087 + 23088 23084 22990 + 23084 23088 23089 + 23089 23085 23084 + 23085 23089 23090 + 23090 23091 23085 + 23085 23091 23092 + 23092 23086 23085 + 23087 23086 23092 + 22990 22989 23088 + 23088 22989 22988 + 22988 23093 23088 + 23088 23093 23094 + 23094 23089 23088 + 23090 23089 23094 + 23094 23095 23090 + 23090 23095 23096 + 23096 23097 23090 + 23091 23090 23097 + 23098 23093 22988 + 23093 23098 23099 + 23099 23094 23093 + 23094 23099 23100 + 23100 23095 23094 + 23095 23100 23101 + 23101 23096 23095 + 22988 22993 23098 + 23098 22993 22998 + 22998 23102 23098 + 23098 23102 23103 + 23103 23099 23098 + 23100 23099 23103 + 23103 23104 23100 + 23100 23104 23105 + 23105 23101 23100 + 23106 23101 23105 + 23096 23101 23106 + 23107 23102 22998 + 23102 23107 23108 + 23108 23103 23102 + 23103 23108 23109 + 23109 23104 23103 + 23104 23109 23110 + 23110 23105 23104 + 22998 23111 23107 + 23107 23111 23112 + 23112 23113 23107 + 23107 23113 23114 + 23114 23108 23107 + 23109 23108 23114 + 23111 22998 22997 + 22997 23115 23111 + 23112 23111 23115 + 23115 23116 23112 + 23117 23112 23116 + 23112 23117 23118 + 23118 23113 23112 + 23113 23118 23119 + 23119 23114 23113 + 23115 22997 22996 + 22996 23120 23115 + 23115 23120 23121 + 23121 23116 23115 + 23122 23116 23121 + 23116 23122 23117 + 23123 23117 23122 + 23118 23117 23123 + 23120 22996 23002 + 23002 23124 23120 + 23120 23124 23125 + 23125 23121 23120 + 23126 23121 23125 + 23121 23126 23122 + 23122 23126 23067 + 23067 23127 23122 + 23122 23127 23123 + 23006 23124 23002 + 23124 23006 23128 + 23128 23129 23124 + 23124 23129 23125 + 23130 23125 23129 + 23125 23130 23131 + 23125 23131 23126 + 23067 23126 23131 + 23131 23048 23067 + 23048 23053 23067 + 23132 23128 23006 + 23133 23128 23132 + 23128 23133 23134 + 23134 23129 23128 + 23129 23134 23130 + 23134 23135 23130 + 23131 23130 23135 + 23135 23048 23131 + 23048 23135 23043 + 23020 23132 23006 + 23019 23132 23020 + 23038 23132 23019 + 23132 23038 23133 + 23043 23133 23038 + 23134 23133 23043 + 23043 23135 23134 + 23006 23011 23020 + 23009 23020 23011 + 23011 23010 23009 + 23047 23053 23048 + 23072 23127 23067 + 23127 23072 23136 + 23136 23123 23127 + 23123 23136 23137 + 23137 23138 23123 + 23123 23138 23118 + 23139 23136 23072 + 23137 23136 23139 + 23139 23140 23137 + 23137 23140 23141 + 23141 23142 23137 + 23138 23137 23142 + 23142 23143 23138 + 23118 23138 23143 + 23143 23119 23118 + 23072 23071 23139 + 23079 23139 23071 + 23139 23079 23144 + 23144 23140 23139 + 23140 23144 23145 + 23145 23141 23140 + 23141 23145 23146 + 23146 23147 23141 + 23141 23147 23148 + 23148 23142 23141 + 23143 23142 23148 + 23144 23079 23078 + 23078 23149 23144 + 23144 23149 23150 + 23150 23145 23144 + 23146 23145 23150 + 23150 23151 23146 + 23146 23151 23152 + 23152 23153 23146 + 23147 23146 23153 + 23083 23149 23078 + 23149 23083 23154 + 23154 23150 23149 + 23150 23154 23155 + 23155 23151 23150 + 23151 23155 23156 + 23156 23152 23151 + 23087 23154 23083 + 23155 23154 23087 + 23087 23157 23155 + 23155 23157 23158 + 23158 23156 23155 + 23159 23156 23158 + 23152 23156 23159 + 23159 23160 23152 + 23152 23160 23161 + 23161 23153 23152 + 23092 23157 23087 + 23157 23092 23162 + 23162 23158 23157 + 23158 23162 23163 + 23163 23164 23158 + 23158 23164 23159 + 23159 23164 23165 + 23165 23166 23159 + 23160 23159 23166 + 23167 23162 23092 + 23163 23162 23167 + 23167 23168 23163 + 23163 23168 23169 + 23164 23163 23169 + 23169 23165 23164 + 23165 23169 23170 + 23170 23171 23165 + 23165 23171 23166 + 23092 23091 23167 + 23097 23167 23091 + 23167 23097 23172 + 23172 23168 23167 + 23168 23172 23169 + 23172 23170 23169 + 23172 23173 23170 + 23173 23106 23170 + 23106 23174 23170 + 23170 23174 23171 + 23172 23097 23096 + 23096 23173 23172 + 23106 23173 23096 + 23175 23171 23174 + 23171 23175 23176 + 23177 23171 23176 + 23171 23177 23166 + 23178 23166 23177 + 23178 23179 23166 + 23166 23179 23160 + 23180 23175 23174 + 23175 23180 23105 + 23105 23110 23175 + 23175 23110 23181 + 23181 23176 23175 + 23182 23176 23181 + 23176 23182 23177 + 23106 23180 23174 + 23105 23180 23106 + 23181 23110 23109 + 23109 23183 23181 + 23184 23181 23183 + 23181 23184 23182 + 23182 23184 23185 + 23185 23186 23182 + 23182 23186 23187 + 23182 23187 23177 + 23177 23187 23178 + 23114 23183 23109 + 23188 23183 23114 + 23183 23188 23184 + 23185 23184 23188 + 23188 23189 23185 + 23190 23185 23189 + 23185 23190 23191 + 23191 23186 23185 + 23186 23191 23178 + 23178 23187 23186 + 23114 23119 23188 + 23188 23119 23143 + 23143 23189 23188 + 23148 23189 23143 + 23189 23148 23190 + 23192 23190 23148 + 23191 23190 23192 + 23192 23193 23191 + 23191 23193 23178 + 23179 23178 23193 + 23193 23161 23179 + 23161 23160 23179 + 23148 23147 23192 + 23153 23192 23147 + 23192 23153 23161 + 23161 23193 23192 + 23194 23195 23196 + 23194 23197 23195 + 23198 23195 23197 + 23199 23194 23196 + 23194 23199 23200 + 23200 23201 23194 + 23194 23201 23202 + 23202 23197 23194 + 23203 23197 23202 + 23197 23203 23198 + 23204 23199 23196 + 23200 23199 23204 + 23204 23205 23200 + 23200 23205 23206 + 23206 23207 23200 + 23201 23200 23207 + 23207 23208 23201 + 23202 23201 23208 + 23204 23196 23209 + 23210 23204 23209 + 23204 23210 23211 + 23211 23205 23204 + 23205 23211 23212 + 23212 23206 23205 + 23209 23196 23213 + 23213 23214 23209 + 23214 23215 23209 + 23216 23209 23215 + 23216 23210 23209 + 23211 23210 23216 + 23216 23217 23211 + 23211 23217 23212 + 23196 23218 23213 + 23218 23198 23213 + 23198 23219 23213 + 23213 23219 23220 + 23220 23221 23213 + 23221 23222 23213 + 23214 23213 23222 + 23219 23198 23223 + 23223 23224 23219 + 23224 23220 23219 + 23224 23225 23220 + 23225 23226 23220 + 23221 23220 23226 + 23203 23223 23198 + 23227 23223 23203 + 23224 23223 23227 + 23227 23225 23224 + 23225 23227 23228 + 23228 23229 23225 + 23226 23225 23229 + 23229 23230 23226 + 23231 23226 23230 + 23226 23231 23221 + 23203 23232 23227 + 23227 23232 23233 + 23233 23228 23227 + 23234 23228 23233 + 23229 23228 23234 + 23234 23235 23229 + 23229 23235 23236 + 23236 23230 23229 + 23202 23232 23203 + 23232 23202 23237 + 23237 23233 23232 + 23233 23237 23238 + 23238 23239 23233 + 23233 23239 23234 + 23234 23239 23240 + 23240 23241 23234 + 23235 23234 23241 + 23208 23237 23202 + 23238 23237 23208 + 23208 23242 23238 + 23238 23242 23243 + 23243 23244 23238 + 23239 23238 23244 + 23244 23240 23239 + 23245 23242 23208 + 23242 23245 23246 + 23246 23243 23242 + 23243 23246 23247 + 23247 23248 23243 + 23243 23248 23249 + 23249 23244 23243 + 23240 23244 23249 + 23208 23207 23245 + 23245 23207 23206 + 23206 23250 23245 + 23245 23250 23251 + 23251 23246 23245 + 23247 23246 23251 + 23251 23252 23247 + 23247 23252 23253 + 23253 23254 23247 + 23248 23247 23254 + 23255 23250 23206 + 23250 23255 23256 + 23256 23251 23250 + 23251 23256 23257 + 23257 23252 23251 + 23252 23257 23258 + 23258 23253 23252 + 23206 23212 23255 + 23255 23212 23259 + 23259 23260 23255 + 23255 23260 23261 + 23261 23256 23255 + 23257 23256 23261 + 23261 23262 23257 + 23257 23262 23263 + 23263 23258 23257 + 23217 23259 23212 + 23264 23259 23217 + 23259 23264 23265 + 23265 23260 23259 + 23260 23265 23266 + 23266 23261 23260 + 23261 23266 23267 + 23267 23262 23261 + 23262 23267 23268 + 23268 23263 23262 + 23217 23269 23264 + 23270 23264 23269 + 23265 23264 23270 + 23270 23271 23265 + 23265 23271 23272 + 23272 23266 23265 + 23267 23266 23272 + 23269 23217 23216 + 23216 23273 23269 + 23269 23273 23274 + 23274 23275 23269 + 23269 23275 23270 + 23276 23270 23275 + 23270 23276 23277 + 23277 23271 23270 + 23273 23216 23215 + 23274 23273 23215 + 23274 23215 23214 + 23278 23274 23214 + 23274 23278 23279 + 23279 23275 23274 + 23275 23279 23276 + 23280 23276 23279 + 23277 23276 23280 + 23214 23281 23278 + 23279 23278 23281 + 23281 23282 23279 + 23279 23282 23280 + 23283 23280 23282 + 23280 23283 23284 + 23284 23285 23280 + 23280 23285 23277 + 23222 23281 23214 + 23281 23222 23286 + 23286 23282 23281 + 23282 23286 23283 + 23287 23283 23286 + 23284 23283 23287 + 23287 23288 23284 + 23284 23288 23289 + 23289 23290 23284 + 23285 23284 23290 + 23286 23222 23221 + 23221 23231 23286 + 23286 23231 23287 + 23230 23287 23231 + 23287 23230 23236 + 23236 23288 23287 + 23288 23236 23291 + 23291 23289 23288 + 23289 23291 23292 + 23292 23293 23289 + 23289 23293 23294 + 23294 23290 23289 + 23295 23290 23294 + 23290 23295 23285 + 23277 23285 23295 + 23296 23291 23236 + 23292 23291 23296 + 23296 23297 23292 + 23292 23297 23298 + 23298 23299 23292 + 23293 23292 23299 + 23299 23300 23293 + 23294 23293 23300 + 23236 23235 23296 + 23241 23296 23235 + 23296 23241 23301 + 23301 23297 23296 + 23297 23301 23302 + 23302 23298 23297 + 23298 23302 23303 + 23303 23304 23298 + 23298 23304 23305 + 23305 23299 23298 + 23301 23241 23240 + 23240 23306 23301 + 23301 23306 23307 + 23307 23302 23301 + 23303 23302 23307 + 23307 23308 23303 + 23303 23308 23309 + 23309 23310 23303 + 23304 23303 23310 + 23249 23306 23240 + 23306 23249 23311 + 23311 23307 23306 + 23307 23311 23312 + 23312 23308 23307 + 23308 23312 23313 + 23313 23314 23308 + 23308 23314 23309 + 23315 23311 23249 + 23312 23311 23315 + 23315 23316 23312 + 23312 23316 23317 + 23317 23313 23312 + 23318 23313 23317 + 23313 23318 23319 + 23319 23314 23313 + 23249 23248 23315 + 23254 23315 23248 + 23315 23254 23320 + 23320 23316 23315 + 23316 23320 23321 + 23321 23317 23316 + 23322 23317 23321 + 23317 23322 23318 + 23323 23318 23322 + 23319 23318 23323 + 23320 23254 23253 + 23253 23324 23320 + 23321 23320 23324 + 23324 23325 23321 + 23326 23321 23325 + 23321 23326 23322 + 23322 23326 23327 + 23327 23328 23322 + 23322 23328 23323 + 23329 23324 23253 + 23324 23329 23330 + 23330 23325 23324 + 23330 23331 23325 + 23325 23331 23326 + 23327 23326 23331 + 23253 23258 23329 + 23332 23329 23258 + 23330 23329 23332 + 23330 23332 23333 + 23331 23330 23333 + 23333 23334 23331 + 23331 23334 23327 + 23263 23332 23258 + 23335 23332 23263 + 23332 23335 23336 + 23336 23333 23332 + 23334 23333 23336 + 23336 23337 23334 + 23334 23337 23338 + 23338 23339 23334 + 23334 23339 23327 + 23263 23268 23335 + 23340 23335 23268 + 23335 23340 23341 + 23341 23336 23335 + 23337 23336 23341 + 23341 23342 23337 + 23338 23337 23342 + 23343 23338 23342 + 23344 23338 23343 + 23338 23344 23339 + 23345 23340 23268 + 23346 23340 23345 + 23340 23346 23347 + 23347 23341 23340 + 23341 23347 23342 + 23345 23268 23267 + 23267 23348 23345 + 23349 23345 23348 + 23345 23349 23346 + 23346 23349 23350 + 23350 23351 23346 + 23347 23346 23351 + 23272 23348 23267 + 23352 23348 23272 + 23348 23352 23349 + 23350 23349 23352 + 23352 23353 23350 + 23354 23350 23353 + 23350 23354 23355 + 23355 23351 23350 + 23272 23356 23352 + 23352 23356 23295 + 23295 23353 23352 + 23294 23353 23295 + 23353 23294 23354 + 23300 23354 23294 + 23355 23354 23300 + 23356 23272 23271 + 23271 23277 23356 + 23295 23356 23277 + 23300 23357 23355 + 23357 23300 23299 + 23305 23357 23299 + 23357 23305 23358 + 23358 23359 23357 + 23357 23359 23360 + 23360 23355 23357 + 23351 23355 23360 + 23360 23361 23351 + 23351 23361 23347 + 23361 23362 23347 + 23342 23347 23362 + 23363 23358 23305 + 23364 23358 23363 + 23358 23364 23365 + 23365 23359 23358 + 23359 23365 23366 + 23366 23360 23359 + 23361 23360 23366 + 23361 23366 23367 + 23367 23362 23361 + 23305 23304 23363 + 23310 23363 23304 + 23363 23310 23368 + 23368 23369 23363 + 23363 23369 23364 + 23370 23364 23369 + 23365 23364 23370 + 23368 23310 23309 + 23309 23371 23368 + 23368 23371 23372 + 23372 23373 23368 + 23369 23368 23373 + 23373 23374 23369 + 23369 23374 23370 + 23309 23375 23371 + 23371 23375 23376 + 23376 23377 23371 + 23371 23377 23372 + 23375 23309 23314 + 23314 23319 23375 + 23376 23375 23319 + 23319 23378 23376 + 23378 23379 23376 + 23380 23376 23379 + 23377 23376 23380 + 23377 23380 23381 + 23377 23381 23372 + 23323 23378 23319 + 23378 23323 23382 + 23378 23382 23383 + 23383 23379 23378 + 23384 23379 23383 + 23379 23384 23380 + 23380 23384 23385 + 23385 23386 23380 + 23380 23386 23381 + 23382 23323 23387 + 23387 23388 23382 + 23383 23382 23388 + 23388 23389 23383 + 23390 23383 23389 + 23383 23390 23384 + 23384 23390 23391 + 23391 23385 23384 + 23328 23387 23323 + 23392 23387 23328 + 23387 23392 23388 + 23389 23388 23392 + 23393 23389 23392 + 23389 23393 23394 + 23389 23394 23390 + 23391 23390 23394 + 23395 23391 23394 + 23396 23391 23395 + 23385 23391 23396 + 23328 23397 23392 + 23393 23392 23397 + 23398 23393 23397 + 23398 23399 23393 + 23399 23394 23393 + 23394 23399 23395 + 23400 23395 23399 + 23395 23400 23401 + 23395 23401 23396 + 23328 23327 23397 + 23397 23327 23402 + 23402 23403 23397 + 23398 23397 23403 + 23398 23403 23404 + 23405 23398 23404 + 23399 23398 23405 + 23399 23405 23400 + 23406 23400 23405 + 23401 23400 23406 + 23339 23402 23327 + 23407 23402 23339 + 23403 23402 23407 + 23407 23404 23403 + 23408 23404 23407 + 23405 23404 23408 + 23408 23406 23405 + 23409 23406 23408 + 23409 23410 23406 + 23406 23410 23401 + 23396 23401 23410 + 23411 23396 23410 + 23385 23396 23411 + 23339 23344 23407 + 23407 23344 23412 + 23412 23413 23407 + 23413 23414 23407 + 23414 23408 23407 + 23408 23414 23415 + 23408 23415 23409 + 23343 23412 23344 + 23416 23412 23343 + 23412 23416 23413 + 23416 23417 23413 + 23413 23417 23418 + 23413 23418 23415 + 23415 23414 23413 + 23416 23343 23419 + 23419 23420 23416 + 23417 23416 23420 + 23420 23421 23417 + 23421 23422 23417 + 23418 23417 23422 + 23422 23423 23418 + 23415 23418 23423 + 23409 23415 23423 + 23419 23343 23342 + 23342 23424 23419 + 23425 23419 23424 + 23420 23419 23425 + 23425 23426 23420 + 23420 23426 23427 + 23427 23421 23420 + 23362 23424 23342 + 23367 23424 23362 + 23424 23367 23425 + 23425 23367 23365 + 23365 23428 23425 + 23426 23425 23428 + 23428 23429 23426 + 23427 23426 23429 + 23429 23430 23427 + 23431 23427 23430 + 23421 23427 23431 + 23367 23366 23365 + 23370 23428 23365 + 23429 23428 23370 + 23370 23432 23429 + 23429 23432 23433 + 23433 23430 23429 + 23430 23433 23434 + 23430 23434 23431 + 23435 23431 23434 + 23421 23431 23435 + 23435 23422 23421 + 23422 23435 23423 + 23432 23370 23374 + 23374 23436 23432 + 23436 23437 23432 + 23437 23433 23432 + 23437 23438 23433 + 23438 23434 23433 + 23434 23438 23439 + 23439 23435 23434 + 23423 23435 23439 + 23439 23440 23423 + 23423 23440 23409 + 23374 23373 23436 + 23436 23373 23372 + 23372 23437 23436 + 23437 23372 23441 + 23438 23437 23441 + 23438 23441 23442 + 23442 23439 23438 + 23442 23440 23439 + 23440 23442 23410 + 23410 23409 23440 + 23441 23372 23381 + 23381 23411 23441 + 23442 23441 23411 + 23410 23442 23411 + 23386 23411 23381 + 23411 23386 23385 + 23443 23444 23445 + 23444 23443 23446 + 23444 23446 23447 + 23444 23447 23448 + 23449 23444 23448 + 23450 23443 23445 + 23443 23450 23451 + 23443 23451 23452 + 23443 23452 23446 + 23446 23452 23453 + 23446 23453 23454 + 23454 23447 23446 + 23448 23447 23454 + 23455 23450 23445 + 23450 23455 23456 + 23450 23456 23457 + 23450 23457 23451 + 23451 23457 23458 + 23451 23458 23459 + 23459 23452 23451 + 23452 23459 23453 + 23460 23455 23445 + 23455 23460 23461 + 23461 23462 23455 + 23462 23463 23455 + 23455 23463 23456 + 23445 23464 23460 + 23464 23465 23460 + 23460 23465 23466 + 23466 23467 23460 + 23460 23467 23461 + 23468 23461 23467 + 23462 23461 23468 + 23465 23464 23469 + 23469 23470 23465 + 23465 23470 23466 + 23470 23471 23466 + 23471 23472 23466 + 23467 23466 23472 + 23472 23473 23467 + 23467 23473 23468 + 23464 23474 23469 + 23475 23469 23474 + 23470 23469 23475 + 23475 23471 23470 + 23471 23475 23476 + 23476 23477 23471 + 23472 23471 23477 + 23477 23478 23472 + 23473 23472 23478 + 23479 23474 23464 + 23474 23479 23480 + 23480 23481 23474 + 23474 23481 23475 + 23475 23481 23482 + 23482 23476 23475 + 23483 23476 23482 + 23477 23476 23483 + 23464 23449 23479 + 23449 23448 23479 + 23480 23479 23448 + 23448 23484 23480 + 23480 23484 23485 + 23485 23486 23480 + 23481 23480 23486 + 23486 23482 23481 + 23482 23486 23487 + 23487 23488 23482 + 23482 23488 23483 + 23454 23484 23448 + 23484 23454 23489 + 23489 23485 23484 + 23485 23489 23490 + 23490 23491 23485 + 23485 23491 23487 + 23487 23486 23485 + 23492 23489 23454 + 23490 23489 23492 + 23492 23493 23490 + 23490 23493 23494 + 23494 23495 23490 + 23491 23490 23495 + 23495 23496 23491 + 23487 23491 23496 + 23454 23453 23492 + 23497 23492 23453 + 23492 23497 23498 + 23498 23493 23492 + 23493 23498 23499 + 23499 23494 23493 + 23453 23459 23497 + 23459 23458 23497 + 23458 23500 23497 + 23498 23497 23500 + 23500 23501 23498 + 23498 23501 23502 + 23502 23499 23498 + 23503 23499 23502 + 23494 23499 23503 + 23504 23500 23458 + 23500 23504 23505 + 23505 23501 23500 + 23501 23505 23506 + 23506 23502 23501 + 23502 23506 23507 + 23507 23508 23502 + 23502 23508 23503 + 23458 23509 23504 + 23510 23504 23509 + 23505 23504 23510 + 23510 23511 23505 + 23505 23511 23512 + 23512 23506 23505 + 23507 23506 23512 + 23457 23509 23458 + 23509 23457 23456 + 23456 23513 23509 + 23509 23513 23510 + 23514 23510 23513 + 23510 23514 23515 + 23515 23511 23510 + 23511 23515 23516 + 23516 23512 23511 + 23456 23463 23513 + 23463 23517 23513 + 23513 23517 23514 + 23518 23514 23517 + 23515 23514 23518 + 23518 23519 23515 + 23515 23519 23520 + 23520 23516 23515 + 23521 23516 23520 + 23512 23516 23521 + 23517 23463 23462 + 23462 23522 23517 + 23517 23522 23518 + 23523 23518 23522 + 23518 23523 23524 + 23524 23519 23518 + 23519 23524 23525 + 23525 23520 23519 + 23468 23522 23462 + 23522 23468 23523 + 23526 23523 23468 + 23524 23523 23526 + 23526 23527 23524 + 23524 23527 23528 + 23528 23525 23524 + 23529 23525 23528 + 23520 23525 23529 + 23529 23530 23520 + 23520 23530 23521 + 23468 23473 23526 + 23478 23526 23473 + 23526 23478 23531 + 23531 23527 23526 + 23527 23531 23532 + 23532 23528 23527 + 23528 23532 23533 + 23533 23534 23528 + 23528 23534 23529 + 23531 23478 23477 + 23477 23535 23531 + 23531 23535 23536 + 23536 23532 23531 + 23533 23532 23536 + 23536 23537 23533 + 23538 23533 23537 + 23538 23539 23533 + 23539 23534 23533 + 23529 23534 23539 + 23483 23535 23477 + 23535 23483 23540 + 23540 23536 23535 + 23536 23540 23541 + 23541 23537 23536 + 23542 23537 23541 + 23542 23538 23537 + 23543 23538 23542 + 23538 23543 23544 + 23539 23538 23544 + 23545 23540 23483 + 23541 23540 23545 + 23545 23546 23541 + 23541 23546 23547 + 23547 23548 23541 + 23548 23542 23541 + 23542 23548 23549 + 23542 23549 23543 + 23483 23488 23545 + 23550 23545 23488 + 23545 23550 23551 + 23551 23546 23545 + 23546 23551 23552 + 23552 23547 23546 + 23547 23552 23553 + 23553 23554 23547 + 23547 23554 23548 + 23488 23487 23550 + 23496 23550 23487 + 23551 23550 23496 + 23496 23555 23551 + 23551 23555 23556 + 23556 23552 23551 + 23553 23552 23556 + 23556 23557 23553 + 23553 23557 23558 + 23558 23559 23553 + 23554 23553 23559 + 23560 23555 23496 + 23555 23560 23561 + 23561 23556 23555 + 23556 23561 23562 + 23562 23557 23556 + 23557 23562 23563 + 23563 23558 23557 + 23496 23495 23560 + 23560 23495 23494 + 23494 23564 23560 + 23560 23564 23565 + 23565 23561 23560 + 23562 23561 23565 + 23565 23566 23562 + 23563 23562 23566 + 23503 23564 23494 + 23564 23503 23567 + 23567 23565 23564 + 23565 23567 23566 + 23567 23568 23566 + 23566 23568 23569 + 23569 23570 23566 + 23566 23570 23563 + 23571 23567 23503 + 23571 23572 23567 + 23572 23568 23567 + 23568 23572 23573 + 23573 23569 23568 + 23574 23569 23573 + 23570 23569 23574 + 23503 23508 23571 + 23575 23571 23508 + 23571 23575 23576 + 23576 23572 23571 + 23572 23576 23577 + 23577 23573 23572 + 23578 23573 23577 + 23573 23578 23574 + 23508 23507 23575 + 23579 23575 23507 + 23579 23580 23575 + 23580 23576 23575 + 23577 23576 23580 + 23580 23581 23577 + 23582 23577 23581 + 23577 23582 23578 + 23507 23583 23579 + 23584 23579 23583 + 23579 23584 23585 + 23585 23580 23579 + 23580 23585 23586 + 23586 23581 23580 + 23587 23581 23586 + 23581 23587 23582 + 23512 23583 23507 + 23521 23583 23512 + 23583 23521 23584 + 23588 23584 23521 + 23585 23584 23588 + 23588 23589 23585 + 23585 23589 23590 + 23590 23586 23585 + 23587 23586 23590 + 23521 23530 23588 + 23591 23588 23530 + 23588 23591 23592 + 23592 23589 23588 + 23589 23592 23593 + 23593 23594 23589 + 23589 23594 23590 + 23530 23529 23591 + 23539 23591 23529 + 23592 23591 23539 + 23539 23544 23592 + 23592 23544 23595 + 23595 23593 23592 + 23596 23593 23595 + 23596 23594 23593 + 23594 23596 23597 + 23597 23590 23594 + 23590 23597 23598 + 23590 23598 23587 + 23599 23595 23544 + 23600 23595 23599 + 23595 23600 23596 + 23597 23596 23600 + 23601 23597 23600 + 23598 23597 23601 + 23601 23602 23598 + 23587 23598 23602 + 23602 23603 23587 + 23603 23582 23587 + 23544 23543 23599 + 23599 23543 23549 + 23549 23604 23599 + 23605 23599 23604 + 23599 23605 23600 + 23600 23605 23606 + 23606 23607 23600 + 23600 23607 23601 + 23604 23549 23608 + 23609 23604 23608 + 23609 23610 23604 + 23604 23610 23605 + 23605 23610 23611 + 23611 23606 23605 + 23612 23606 23611 + 23606 23612 23607 + 23548 23608 23549 + 23554 23608 23548 + 23609 23608 23554 + 23554 23613 23609 + 23610 23609 23613 + 23613 23614 23610 + 23610 23614 23611 + 23559 23613 23554 + 23614 23613 23559 + 23559 23615 23614 + 23614 23615 23616 + 23616 23617 23614 + 23614 23617 23611 + 23615 23559 23558 + 23558 23618 23615 + 23616 23615 23618 + 23619 23616 23618 + 23620 23616 23619 + 23620 23617 23616 + 23617 23620 23621 + 23621 23611 23617 + 23618 23558 23563 + 23563 23622 23618 + 23618 23622 23623 + 23623 23624 23618 + 23618 23624 23619 + 23625 23619 23624 + 23625 23626 23619 + 23619 23626 23620 + 23621 23620 23626 + 23622 23563 23627 + 23627 23628 23622 + 23623 23622 23628 + 23629 23623 23628 + 23630 23623 23629 + 23630 23624 23623 + 23624 23630 23625 + 23631 23625 23630 + 23626 23625 23631 + 23570 23627 23563 + 23632 23627 23570 + 23632 23628 23627 + 23628 23632 23633 + 23633 23634 23628 + 23628 23634 23629 + 23570 23635 23632 + 23632 23635 23636 + 23637 23632 23636 + 23637 23633 23632 + 23638 23633 23637 + 23638 23634 23633 + 23634 23638 23639 + 23639 23629 23634 + 23574 23635 23570 + 23635 23574 23640 + 23640 23636 23635 + 23641 23636 23640 + 23636 23641 23642 + 23642 23643 23636 + 23636 23643 23637 + 23640 23574 23578 + 23578 23644 23640 + 23641 23640 23644 + 23644 23645 23641 + 23642 23641 23645 + 23645 23646 23642 + 23647 23642 23646 + 23642 23647 23648 + 23648 23643 23642 + 23603 23644 23578 + 23645 23644 23603 + 23603 23649 23645 + 23645 23649 23650 + 23650 23646 23645 + 23651 23646 23650 + 23646 23651 23647 + 23578 23582 23603 + 23649 23603 23602 + 23602 23652 23649 + 23650 23649 23652 + 23652 23653 23650 + 23653 23654 23650 + 23654 23651 23650 + 23647 23651 23654 + 23655 23647 23654 + 23648 23647 23655 + 23652 23602 23601 + 23601 23656 23652 + 23652 23656 23657 + 23657 23653 23652 + 23654 23653 23657 + 23654 23657 23658 + 23658 23659 23654 + 23654 23659 23655 + 23656 23601 23660 + 23660 23661 23656 + 23656 23661 23658 + 23658 23657 23656 + 23607 23660 23601 + 23662 23660 23607 + 23660 23662 23661 + 23661 23662 23663 + 23663 23664 23661 + 23661 23664 23658 + 23664 23665 23658 + 23665 23666 23658 + 23666 23659 23658 + 23607 23612 23662 + 23662 23612 23667 + 23667 23663 23662 + 23663 23667 23668 + 23665 23663 23668 + 23665 23664 23663 + 23612 23669 23667 + 23670 23667 23669 + 23668 23667 23670 + 23668 23670 23671 + 23671 23672 23668 + 23665 23668 23672 + 23665 23672 23673 + 23673 23666 23665 + 23659 23666 23673 + 23673 23655 23659 + 23611 23669 23612 + 23674 23669 23611 + 23669 23674 23670 + 23674 23675 23670 + 23675 23676 23670 + 23676 23671 23670 + 23677 23671 23676 + 23671 23677 23672 + 23672 23677 23678 + 23678 23673 23672 + 23655 23673 23678 + 23611 23621 23674 + 23674 23621 23679 + 23679 23675 23674 + 23675 23679 23680 + 23675 23680 23681 + 23681 23676 23675 + 23682 23676 23681 + 23676 23682 23677 + 23678 23677 23682 + 23648 23678 23682 + 23655 23678 23648 + 23683 23679 23621 + 23680 23679 23683 + 23683 23684 23680 + 23680 23684 23685 + 23685 23686 23680 + 23686 23681 23680 + 23682 23681 23686 + 23686 23687 23682 + 23682 23687 23648 + 23626 23683 23621 + 23631 23683 23626 + 23684 23683 23631 + 23684 23631 23688 + 23688 23685 23684 + 23685 23688 23629 + 23629 23639 23685 + 23685 23639 23689 + 23689 23686 23685 + 23687 23686 23689 + 23690 23687 23689 + 23687 23690 23648 + 23643 23648 23690 + 23630 23688 23631 + 23629 23688 23630 + 23690 23637 23643 + 23637 23690 23691 + 23637 23691 23638 + 23691 23639 23638 + 23691 23689 23639 + 23691 23690 23689 + 23692 23693 23694 + 23693 23695 23694 + 23696 23694 23695 + 23697 23694 23696 + 23694 23697 23692 + 23697 23698 23692 + 23699 23692 23698 + 23700 23692 23699 + 23695 23693 23701 + 23702 23695 23701 + 23695 23702 23703 + 23703 23704 23695 + 23695 23704 23696 + 23705 23702 23701 + 23703 23702 23705 + 23705 23706 23703 + 23703 23706 23707 + 23707 23708 23703 + 23704 23703 23708 + 23708 23709 23704 + 23696 23704 23709 + 23705 23701 23710 + 23711 23705 23710 + 23705 23711 23712 + 23712 23706 23705 + 23706 23712 23713 + 23713 23707 23706 + 23710 23701 23699 + 23699 23714 23710 + 23714 23715 23710 + 23715 23716 23710 + 23716 23717 23710 + 23718 23710 23717 + 23718 23711 23710 + 23701 23700 23699 + 23712 23711 23718 + 23718 23719 23712 + 23712 23719 23720 + 23720 23713 23712 + 23721 23713 23720 + 23707 23713 23721 + 23721 23722 23707 + 23707 23722 23723 + 23723 23708 23707 + 23709 23708 23723 + 23724 23719 23718 + 23719 23724 23725 + 23725 23720 23719 + 23720 23725 23726 + 23726 23727 23720 + 23720 23727 23721 + 23718 23728 23724 + 23724 23728 23729 + 23729 23730 23724 + 23724 23730 23731 + 23731 23725 23724 + 23726 23725 23731 + 23728 23718 23717 + 23729 23728 23717 + 23729 23717 23716 + 23732 23729 23716 + 23729 23732 23733 + 23733 23730 23729 + 23730 23733 23734 + 23734 23731 23730 + 23731 23734 23735 + 23735 23736 23731 + 23731 23736 23726 + 23737 23732 23716 + 23733 23732 23737 + 23737 23738 23733 + 23733 23738 23739 + 23739 23734 23733 + 23735 23734 23739 + 23740 23737 23716 + 23737 23740 23741 + 23741 23738 23737 + 23738 23741 23742 + 23742 23739 23738 + 23739 23742 23743 + 23743 23744 23739 + 23739 23744 23735 + 23716 23715 23740 + 23745 23740 23715 + 23741 23740 23745 + 23745 23746 23741 + 23741 23746 23747 + 23747 23742 23741 + 23743 23742 23747 + 23748 23745 23715 + 23745 23748 23749 + 23749 23746 23745 + 23746 23749 23750 + 23750 23747 23746 + 23747 23750 23751 + 23751 23752 23747 + 23747 23752 23743 + 23715 23714 23748 + 23753 23748 23714 + 23749 23748 23753 + 23753 23754 23749 + 23749 23754 23755 + 23755 23750 23749 + 23751 23750 23755 + 23756 23753 23714 + 23753 23756 23757 + 23757 23754 23753 + 23754 23757 23758 + 23758 23755 23754 + 23755 23758 23759 + 23759 23760 23755 + 23755 23760 23751 + 23714 23699 23756 + 23761 23756 23699 + 23757 23756 23761 + 23761 23762 23757 + 23757 23762 23763 + 23763 23758 23757 + 23759 23758 23763 + 23698 23761 23699 + 23761 23698 23764 + 23764 23762 23761 + 23762 23764 23765 + 23765 23763 23762 + 23763 23765 23766 + 23766 23767 23763 + 23763 23767 23759 + 23764 23698 23697 + 23697 23768 23764 + 23764 23768 23769 + 23769 23765 23764 + 23766 23765 23769 + 23769 23770 23766 + 23766 23770 23771 + 23771 23772 23766 + 23767 23766 23772 + 23696 23768 23697 + 23768 23696 23773 + 23773 23769 23768 + 23769 23773 23774 + 23774 23770 23769 + 23770 23774 23775 + 23775 23771 23770 + 23709 23773 23696 + 23774 23773 23709 + 23709 23776 23774 + 23774 23776 23777 + 23777 23775 23774 + 23778 23775 23777 + 23771 23775 23778 + 23778 23779 23771 + 23771 23779 23780 + 23780 23772 23771 + 23723 23776 23709 + 23776 23723 23781 + 23781 23777 23776 + 23777 23781 23782 + 23782 23783 23777 + 23777 23783 23778 + 23778 23783 23784 + 23784 23785 23778 + 23779 23778 23785 + 23786 23781 23723 + 23782 23781 23786 + 23786 23787 23782 + 23782 23787 23788 + 23788 23789 23782 + 23783 23782 23789 + 23789 23784 23783 + 23723 23722 23786 + 23790 23786 23722 + 23786 23790 23791 + 23791 23787 23786 + 23787 23791 23792 + 23792 23788 23787 + 23722 23721 23790 + 23793 23790 23721 + 23791 23790 23793 + 23793 23794 23791 + 23791 23794 23795 + 23795 23792 23791 + 23796 23792 23795 + 23788 23792 23796 + 23721 23727 23793 + 23797 23793 23727 + 23793 23797 23798 + 23798 23794 23793 + 23794 23798 23799 + 23799 23795 23794 + 23795 23799 23800 + 23800 23801 23795 + 23795 23801 23796 + 23727 23726 23797 + 23802 23797 23726 + 23798 23797 23802 + 23802 23803 23798 + 23798 23803 23804 + 23804 23799 23798 + 23800 23799 23804 + 23726 23736 23802 + 23805 23802 23736 + 23802 23805 23806 + 23806 23803 23802 + 23803 23806 23807 + 23807 23804 23803 + 23804 23807 23808 + 23808 23809 23804 + 23804 23809 23800 + 23736 23735 23805 + 23810 23805 23735 + 23806 23805 23810 + 23810 23811 23806 + 23806 23811 23812 + 23812 23807 23806 + 23808 23807 23812 + 23735 23744 23810 + 23813 23810 23744 + 23810 23813 23814 + 23814 23811 23810 + 23811 23814 23815 + 23815 23812 23811 + 23812 23815 23816 + 23816 23817 23812 + 23812 23817 23808 + 23744 23743 23813 + 23818 23813 23743 + 23814 23813 23818 + 23818 23819 23814 + 23814 23819 23820 + 23820 23815 23814 + 23816 23815 23820 + 23743 23752 23818 + 23821 23818 23752 + 23818 23821 23822 + 23822 23819 23818 + 23819 23822 23823 + 23823 23820 23819 + 23820 23823 23824 + 23824 23825 23820 + 23820 23825 23816 + 23752 23751 23821 + 23826 23821 23751 + 23822 23821 23826 + 23826 23827 23822 + 23822 23827 23828 + 23828 23823 23822 + 23824 23823 23828 + 23751 23760 23826 + 23829 23826 23760 + 23826 23829 23830 + 23830 23827 23826 + 23827 23830 23831 + 23831 23828 23827 + 23828 23831 23832 + 23832 23833 23828 + 23828 23833 23824 + 23760 23759 23829 + 23834 23829 23759 + 23830 23829 23834 + 23834 23835 23830 + 23830 23835 23836 + 23836 23831 23830 + 23832 23831 23836 + 23836 23837 23832 + 23838 23832 23837 + 23833 23832 23838 + 23759 23767 23834 + 23772 23834 23767 + 23834 23772 23780 + 23780 23835 23834 + 23835 23780 23839 + 23839 23836 23835 + 23836 23839 23840 + 23840 23837 23836 + 23837 23840 23841 + 23841 23842 23837 + 23837 23842 23838 + 23843 23839 23780 + 23840 23839 23843 + 23843 23844 23840 + 23840 23844 23845 + 23845 23841 23840 + 23846 23841 23845 + 23842 23841 23846 + 23780 23779 23843 + 23785 23843 23779 + 23843 23785 23847 + 23847 23844 23843 + 23844 23847 23848 + 23848 23849 23844 + 23844 23849 23845 + 23850 23845 23849 + 23851 23845 23850 + 23845 23851 23846 + 23847 23785 23784 + 23784 23852 23847 + 23847 23852 23853 + 23853 23848 23847 + 23854 23848 23853 + 23848 23854 23849 + 23849 23854 23850 + 23855 23850 23854 + 23856 23850 23855 + 23850 23856 23851 + 23857 23852 23784 + 23852 23857 23858 + 23858 23853 23852 + 23859 23853 23858 + 23853 23859 23854 + 23854 23859 23855 + 23860 23855 23859 + 23861 23855 23860 + 23855 23861 23856 + 23784 23789 23857 + 23857 23789 23788 + 23788 23862 23857 + 23857 23862 23863 + 23863 23858 23857 + 23864 23858 23863 + 23858 23864 23859 + 23859 23864 23860 + 23796 23862 23788 + 23862 23796 23865 + 23865 23863 23862 + 23866 23863 23865 + 23863 23866 23864 + 23860 23864 23866 + 23866 23867 23860 + 23868 23860 23867 + 23860 23868 23861 + 23869 23865 23796 + 23870 23865 23869 + 23865 23870 23866 + 23866 23870 23871 + 23871 23867 23866 + 23867 23871 23872 + 23867 23872 23868 + 23873 23868 23872 + 23861 23868 23873 + 23796 23801 23869 + 23874 23869 23801 + 23869 23874 23875 + 23875 23876 23869 + 23869 23876 23870 + 23871 23870 23876 + 23877 23871 23876 + 23872 23871 23877 + 23877 23878 23872 + 23872 23878 23873 + 23801 23800 23874 + 23879 23874 23800 + 23875 23874 23879 + 23879 23880 23875 + 23875 23880 23881 + 23882 23875 23881 + 23876 23875 23882 + 23882 23883 23876 + 23876 23883 23877 + 23800 23809 23879 + 23884 23879 23809 + 23879 23884 23885 + 23885 23880 23879 + 23880 23885 23886 + 23886 23881 23880 + 23809 23808 23884 + 23887 23884 23808 + 23885 23884 23887 + 23887 23888 23885 + 23886 23885 23888 + 23889 23886 23888 + 23890 23886 23889 + 23886 23890 23881 + 23808 23817 23887 + 23891 23887 23817 + 23887 23891 23892 + 23892 23888 23887 + 23888 23892 23893 + 23893 23894 23888 + 23888 23894 23889 + 23817 23816 23891 + 23895 23891 23816 + 23892 23891 23895 + 23895 23896 23892 + 23893 23892 23896 + 23896 23897 23893 + 23898 23893 23897 + 23893 23898 23894 + 23894 23898 23899 + 23899 23889 23894 + 23816 23825 23895 + 23900 23895 23825 + 23896 23895 23900 + 23900 23901 23896 + 23896 23901 23902 + 23902 23897 23896 + 23903 23897 23902 + 23897 23903 23898 + 23825 23824 23900 + 23904 23900 23824 + 23901 23900 23904 + 23904 23905 23901 + 23902 23901 23905 + 23906 23902 23905 + 23907 23902 23906 + 23902 23907 23903 + 23824 23833 23904 + 23838 23904 23833 + 23904 23838 23905 + 23905 23838 23908 + 23908 23909 23905 + 23905 23909 23906 + 23910 23906 23909 + 23906 23910 23911 + 23906 23911 23907 + 23912 23907 23911 + 23903 23907 23912 + 23842 23908 23838 + 23913 23908 23842 + 23909 23908 23913 + 23909 23913 23910 + 23910 23913 23914 + 23915 23910 23914 + 23911 23910 23915 + 23915 23916 23911 + 23911 23916 23912 + 23842 23914 23913 + 23846 23914 23842 + 23914 23846 23917 + 23917 23918 23914 + 23914 23918 23915 + 23919 23915 23918 + 23919 23916 23915 + 23916 23919 23920 + 23920 23912 23916 + 23921 23912 23920 + 23912 23921 23903 + 23898 23903 23921 + 23917 23846 23851 + 23851 23922 23917 + 23923 23917 23922 + 23918 23917 23923 + 23923 23924 23918 + 23918 23924 23919 + 23920 23919 23924 + 23924 23925 23920 + 23926 23920 23925 + 23920 23926 23921 + 23927 23922 23851 + 23922 23927 23928 + 23922 23928 23923 + 23923 23928 23929 + 23929 23930 23923 + 23924 23923 23930 + 23930 23925 23924 + 23851 23856 23927 + 23927 23856 23861 + 23861 23931 23927 + 23928 23927 23931 + 23931 23929 23928 + 23932 23929 23931 + 23929 23932 23933 + 23933 23930 23929 + 23925 23930 23933 + 23933 23934 23925 + 23925 23934 23926 + 23935 23926 23934 + 23921 23926 23935 + 23873 23931 23861 + 23931 23873 23932 + 23932 23873 23936 + 23936 23937 23932 + 23932 23937 23938 + 23933 23932 23938 + 23934 23933 23938 + 23938 23939 23934 + 23934 23939 23935 + 23878 23936 23873 + 23936 23878 23940 + 23941 23936 23940 + 23936 23941 23937 + 23937 23941 23942 + 23937 23942 23938 + 23943 23938 23942 + 23938 23943 23944 + 23944 23939 23938 + 23878 23877 23940 + 23940 23877 23883 + 23883 23945 23940 + 23941 23940 23945 + 23945 23946 23941 + 23941 23946 23942 + 23946 23947 23942 + 23942 23947 23943 + 23943 23947 23948 + 23944 23943 23948 + 23949 23945 23883 + 23945 23949 23947 + 23947 23946 23945 + 23883 23882 23949 + 23949 23882 23950 + 23950 23948 23949 + 23947 23949 23948 + 23881 23950 23882 + 23951 23950 23881 + 23950 23951 23948 + 23948 23951 23944 + 23944 23951 23890 + 23952 23944 23890 + 23939 23944 23952 + 23952 23935 23939 + 23953 23935 23952 + 23935 23953 23921 + 23881 23890 23951 + 23921 23953 23898 + 23953 23899 23898 + 23954 23899 23953 + 23889 23899 23954 + 23889 23954 23890 + 23890 23954 23952 + 23953 23952 23954 + 23955 23956 23957 + 23956 23958 23957 + 23958 23959 23957 + 23957 23959 23960 + 23960 23961 23957 + 23957 23961 23962 + 23963 23957 23962 + 23957 23963 23964 + 23964 23955 23957 + 23958 23956 23965 + 23965 23966 23958 + 23958 23966 23967 + 23959 23958 23967 + 23967 23968 23959 + 23959 23968 23960 + 23969 23960 23968 + 23961 23960 23969 + 23956 23970 23965 + 23971 23965 23970 + 23966 23965 23971 + 23971 23972 23966 + 23966 23972 23973 + 23973 23967 23966 + 23968 23967 23973 + 23973 23974 23968 + 23968 23974 23969 + 23975 23970 23956 + 23970 23975 23976 + 23976 23977 23970 + 23970 23977 23971 + 23971 23977 23978 + 23978 23979 23971 + 23972 23971 23979 + 23956 23980 23975 + 23981 23975 23980 + 23976 23975 23981 + 23981 23982 23976 + 23976 23982 23983 + 23983 23984 23976 + 23977 23976 23984 + 23984 23978 23977 + 23980 23964 23981 + 23964 23985 23981 + 23981 23985 23986 + 23986 23982 23981 + 23982 23986 23987 + 23987 23983 23982 + 23964 23988 23985 + 23986 23985 23988 + 23988 23989 23986 + 23986 23989 23990 + 23990 23987 23986 + 23991 23987 23990 + 23983 23987 23991 + 23964 23992 23988 + 23992 23993 23988 + 23988 23993 23989 + 23993 23994 23989 + 23989 23994 23995 + 23995 23990 23989 + 23996 23992 23964 + 23992 23996 23997 + 23992 23997 23993 + 23994 23993 23997 + 23997 23998 23994 + 23994 23998 23999 + 23999 23995 23994 + 24000 23995 23999 + 23990 23995 24000 + 23963 23996 23964 + 23996 23963 24001 + 24001 24002 23996 + 23996 24002 24003 + 23996 24003 23997 + 23997 24003 24004 + 24004 23998 23997 + 23998 24004 24005 + 24005 23999 23998 + 23963 24006 24001 + 24007 24001 24006 + 24002 24001 24007 + 24007 24008 24002 + 24002 24008 24004 + 24004 24003 24002 + 23962 24006 23963 + 24006 23962 24009 + 24009 24010 24006 + 24006 24010 24007 + 24007 24010 24011 + 24011 24012 24007 + 24008 24007 24012 + 24012 24013 24008 + 24004 24008 24013 + 24013 24005 24004 + 24009 23962 23961 + 23961 24014 24009 + 24009 24014 24015 + 24015 24016 24009 + 24010 24009 24016 + 24016 24011 24010 + 23969 24014 23961 + 24014 23969 24017 + 24017 24015 24014 + 24015 24017 24018 + 24018 24019 24015 + 24015 24019 24020 + 24020 24016 24015 + 24011 24016 24020 + 24021 24017 23969 + 24018 24017 24021 + 24021 24022 24018 + 24018 24022 24023 + 24023 24024 24018 + 24019 24018 24024 + 24024 24025 24019 + 24020 24019 24025 + 23969 23974 24021 + 24026 24021 23974 + 24021 24026 24027 + 24027 24022 24021 + 24022 24027 24028 + 24028 24023 24022 + 23974 23973 24026 + 24029 24026 23973 + 24027 24026 24029 + 24029 24030 24027 + 24027 24030 24031 + 24031 24028 24027 + 24032 24028 24031 + 24023 24028 24032 + 23973 23972 24029 + 23979 24029 23972 + 24029 23979 24033 + 24033 24030 24029 + 24030 24033 24034 + 24034 24031 24030 + 24031 24034 24035 + 24035 24036 24031 + 24031 24036 24032 + 24033 23979 23978 + 23978 24037 24033 + 24033 24037 24038 + 24038 24034 24033 + 24035 24034 24038 + 24038 24039 24035 + 24035 24039 24040 + 24040 24041 24035 + 24036 24035 24041 + 24042 24037 23978 + 24037 24042 24043 + 24043 24038 24037 + 24038 24043 24044 + 24044 24039 24038 + 24039 24044 24045 + 24045 24040 24039 + 23978 23984 24042 + 24042 23984 23983 + 23983 24046 24042 + 24042 24046 24047 + 24047 24043 24042 + 24044 24043 24047 + 24047 24048 24044 + 24044 24048 24049 + 24049 24045 24044 + 24050 24045 24049 + 24040 24045 24050 + 23991 24046 23983 + 24046 23991 24051 + 24051 24047 24046 + 24047 24051 24052 + 24052 24048 24047 + 24048 24052 24053 + 24053 24049 24048 + 24049 24053 24054 + 24054 24055 24049 + 24049 24055 24050 + 24056 24051 23991 + 24052 24051 24056 + 24056 24057 24052 + 24052 24057 24058 + 24058 24053 24052 + 24054 24053 24058 + 24058 24059 24054 + 24060 24054 24059 + 24055 24054 24060 + 23991 24061 24056 + 24062 24056 24061 + 24056 24062 24063 + 24063 24057 24056 + 24057 24063 24064 + 24064 24058 24057 + 24058 24064 24065 + 24065 24059 24058 + 23990 24061 23991 + 24000 24061 23990 + 24061 24000 24062 + 24066 24062 24000 + 24063 24062 24066 + 24066 24067 24063 + 24063 24067 24068 + 24068 24064 24063 + 24065 24064 24068 + 24000 24069 24066 + 24070 24066 24069 + 24066 24070 24071 + 24071 24067 24066 + 24067 24071 24072 + 24072 24068 24067 + 23999 24069 24000 + 24073 24069 23999 + 24069 24073 24070 + 24074 24070 24073 + 24071 24070 24074 + 24074 24075 24071 + 24071 24075 24076 + 24076 24072 24071 + 24077 24072 24076 + 24068 24072 24077 + 23999 24005 24073 + 24073 24005 24013 + 24013 24078 24073 + 24073 24078 24074 + 24079 24074 24078 + 24074 24079 24080 + 24080 24075 24074 + 24075 24080 24081 + 24081 24076 24075 + 24082 24078 24013 + 24078 24082 24079 + 24083 24079 24082 + 24080 24079 24083 + 24083 24084 24080 + 24080 24084 24085 + 24085 24081 24080 + 24086 24081 24085 + 24076 24081 24086 + 24013 24012 24082 + 24082 24012 24011 + 24011 24087 24082 + 24082 24087 24083 + 24088 24083 24087 + 24083 24088 24089 + 24089 24084 24083 + 24084 24089 24090 + 24090 24085 24084 + 24020 24087 24011 + 24087 24020 24088 + 24025 24088 24020 + 24089 24088 24025 + 24025 24091 24089 + 24089 24091 24092 + 24092 24090 24089 + 24093 24090 24092 + 24085 24090 24093 + 24093 24094 24085 + 24085 24094 24086 + 24095 24091 24025 + 24091 24095 24096 + 24096 24092 24091 + 24092 24096 24097 + 24097 24098 24092 + 24092 24098 24093 + 24025 24024 24095 + 24095 24024 24023 + 24023 24099 24095 + 24095 24099 24100 + 24100 24096 24095 + 24097 24096 24100 + 24100 24101 24097 + 24097 24101 24102 + 24102 24103 24097 + 24098 24097 24103 + 24032 24099 24023 + 24099 24032 24104 + 24104 24100 24099 + 24100 24104 24105 + 24105 24101 24100 + 24101 24105 24106 + 24106 24102 24101 + 24107 24104 24032 + 24105 24104 24107 + 24107 24108 24105 + 24105 24108 24109 + 24109 24106 24105 + 24110 24106 24109 + 24102 24106 24110 + 24032 24036 24107 + 24041 24107 24036 + 24107 24041 24111 + 24111 24108 24107 + 24108 24111 24112 + 24112 24109 24108 + 24113 24109 24112 + 24109 24113 24110 + 24114 24110 24113 + 24115 24110 24114 + 24110 24115 24102 + 24111 24041 24040 + 24040 24116 24111 + 24111 24116 24117 + 24117 24112 24111 + 24118 24112 24117 + 24112 24118 24113 + 24113 24118 24119 + 24119 24120 24113 + 24113 24120 24114 + 24050 24116 24040 + 24116 24050 24121 + 24121 24117 24116 + 24122 24117 24121 + 24117 24122 24118 + 24119 24118 24122 + 24122 24123 24119 + 24124 24119 24123 + 24124 24120 24119 + 24125 24121 24050 + 24126 24121 24125 + 24121 24126 24122 + 24122 24126 24127 + 24127 24123 24122 + 24128 24123 24127 + 24123 24128 24124 + 24129 24124 24128 + 24120 24124 24129 + 24050 24055 24125 + 24060 24125 24055 + 24060 24130 24125 + 24125 24130 24126 + 24126 24130 24131 + 24131 24127 24126 + 24132 24127 24131 + 24127 24132 24128 + 24130 24060 24133 + 24133 24131 24130 + 24134 24131 24133 + 24131 24134 24132 + 24135 24132 24134 + 24128 24132 24135 + 24135 24136 24128 + 24128 24136 24137 + 24137 24129 24128 + 24138 24133 24060 + 24139 24133 24138 + 24133 24139 24134 + 24134 24139 24140 + 24140 24141 24134 + 24134 24141 24135 + 24142 24135 24141 + 24136 24135 24142 + 24059 24138 24060 + 24143 24138 24059 + 24138 24143 24144 + 24144 24145 24138 + 24138 24145 24139 + 24140 24139 24145 + 24145 24146 24140 + 24147 24140 24146 + 24147 24141 24140 + 24141 24147 24142 + 24059 24065 24143 + 24148 24143 24065 + 24144 24143 24148 + 24148 24149 24144 + 24150 24144 24149 + 24145 24144 24150 + 24150 24146 24145 + 24146 24150 24151 + 24151 24152 24146 + 24146 24152 24147 + 24065 24153 24148 + 24153 24154 24148 + 24155 24148 24154 + 24149 24148 24155 + 24068 24153 24065 + 24077 24153 24068 + 24153 24077 24156 + 24156 24154 24153 + 24157 24154 24156 + 24154 24157 24155 + 24155 24157 24158 + 24159 24155 24158 + 24149 24155 24159 + 24160 24156 24077 + 24157 24156 24160 + 24160 24158 24157 + 24158 24160 24161 + 24161 24162 24158 + 24158 24162 24163 + 24163 24164 24158 + 24158 24164 24159 + 24077 24165 24160 + 24161 24160 24165 + 24165 24086 24161 + 24166 24161 24086 + 24162 24161 24166 + 24166 24167 24162 + 24163 24162 24167 + 24076 24165 24077 + 24086 24165 24076 + 24086 24094 24166 + 24168 24166 24094 + 24166 24168 24169 + 24169 24167 24166 + 24167 24169 24170 + 24170 24171 24167 + 24167 24171 24163 + 24094 24093 24168 + 24172 24168 24093 + 24169 24168 24172 + 24172 24173 24169 + 24170 24169 24173 + 24174 24170 24173 + 24175 24170 24174 + 24170 24175 24171 + 24171 24175 24176 + 24176 24163 24171 + 24093 24098 24172 + 24103 24172 24098 + 24172 24103 24177 + 24177 24173 24172 + 24173 24177 24178 + 24178 24179 24173 + 24173 24179 24174 + 24180 24174 24179 + 24180 24181 24174 + 24174 24181 24175 + 24176 24175 24181 + 24177 24103 24102 + 24102 24115 24177 + 24177 24115 24182 + 24182 24183 24177 + 24183 24178 24177 + 24184 24178 24183 + 24178 24184 24179 + 24179 24184 24180 + 24180 24184 24185 + 24186 24180 24185 + 24181 24180 24186 + 24114 24182 24115 + 24187 24182 24114 + 24182 24187 24188 + 24188 24183 24182 + 24188 24185 24183 + 24183 24185 24184 + 24189 24187 24114 + 24190 24187 24189 + 24188 24187 24190 + 24190 24191 24188 + 24185 24188 24191 + 24191 24192 24185 + 24185 24192 24186 + 24189 24114 24193 + 24193 24194 24189 + 24194 24195 24189 + 24195 24196 24189 + 24196 24190 24189 + 24197 24190 24196 + 24191 24190 24197 + 24120 24193 24114 + 24129 24193 24120 + 24194 24193 24129 + 24194 24129 24137 + 24137 24195 24194 + 24198 24195 24137 + 24195 24198 24197 + 24197 24196 24195 + 24198 24137 24136 + 24136 24199 24198 + 24197 24198 24199 + 24200 24197 24199 + 24200 24191 24197 + 24191 24200 24201 + 24201 24192 24191 + 24192 24201 24202 + 24202 24186 24192 + 24186 24202 24203 + 24186 24203 24181 + 24142 24199 24136 + 24199 24142 24204 + 24204 24205 24199 + 24199 24205 24200 + 24201 24200 24205 + 24205 24206 24201 + 24201 24206 24207 + 24207 24202 24201 + 24203 24202 24207 + 24207 24208 24203 + 24181 24203 24208 + 24208 24176 24181 + 24204 24142 24147 + 24147 24152 24204 + 24209 24204 24152 + 24204 24209 24206 + 24206 24205 24204 + 24152 24151 24209 + 24209 24151 24210 + 24210 24211 24209 + 24206 24209 24211 + 24211 24207 24206 + 24207 24211 24212 + 24212 24208 24207 + 24208 24212 24213 + 24213 24176 24208 + 24163 24176 24213 + 24213 24164 24163 + 24214 24210 24151 + 24214 24215 24210 + 24210 24215 24212 + 24212 24211 24210 + 24151 24150 24214 + 24214 24150 24149 + 24149 24216 24214 + 24215 24214 24216 + 24216 24217 24215 + 24215 24217 24213 + 24213 24212 24215 + 24159 24216 24149 + 24217 24216 24159 + 24217 24159 24164 + 24164 24213 24217 + 24218 24219 24220 + 24218 24221 24219 + 24222 24219 24221 + 24219 24222 24223 + 24220 24224 24218 + 24225 24218 24224 + 24225 24226 24218 + 24226 24221 24218 + 24227 24221 24226 + 24227 24222 24221 + 24228 24224 24220 + 24229 24224 24228 + 24224 24229 24225 + 24230 24225 24229 + 24225 24230 24231 + 24225 24231 24226 + 24228 24220 24232 + 24232 24233 24228 + 24234 24228 24233 + 24234 24229 24228 + 24235 24229 24234 + 24229 24235 24230 + 24236 24230 24235 + 24231 24230 24236 + 24232 24220 24223 + 24237 24232 24223 + 24238 24232 24237 + 24238 24233 24232 + 24233 24238 24239 + 24239 24240 24233 + 24233 24240 24234 + 24241 24234 24240 + 24234 24241 24235 + 24223 24242 24237 + 24242 24243 24237 + 24244 24237 24243 + 24244 24245 24237 + 24237 24245 24238 + 24238 24245 24246 + 24246 24239 24238 + 24247 24242 24223 + 24248 24242 24247 + 24242 24248 24249 + 24249 24243 24242 + 24250 24243 24249 + 24243 24250 24244 + 24251 24244 24250 + 24245 24244 24251 + 24223 24252 24247 + 24253 24247 24252 + 24248 24247 24253 + 24253 24254 24248 + 24249 24248 24254 + 24254 24255 24249 + 24256 24249 24255 + 24249 24256 24250 + 24252 24223 24257 + 24252 24257 24258 + 24258 24259 24252 + 24252 24259 24253 + 24260 24253 24259 + 24254 24253 24260 + 24257 24223 24222 + 24222 24261 24257 + 24257 24261 24262 + 24258 24257 24262 + 24263 24258 24262 + 24258 24263 24264 + 24264 24259 24258 + 24259 24264 24260 + 24222 24227 24261 + 24261 24227 24265 + 24265 24262 24261 + 24266 24262 24265 + 24262 24266 24263 + 24267 24263 24266 + 24264 24263 24267 + 24267 24268 24264 + 24260 24264 24268 + 24265 24227 24226 + 24269 24265 24226 + 24265 24269 24266 + 24266 24269 24270 + 24270 24271 24266 + 24266 24271 24272 + 24272 24267 24266 + 24273 24267 24272 + 24273 24268 24267 + 24226 24231 24269 + 24270 24269 24231 + 24231 24274 24270 + 24274 24275 24270 + 24276 24270 24275 + 24270 24276 24277 + 24277 24271 24270 + 24271 24277 24278 + 24278 24272 24271 + 24236 24274 24231 + 24236 24279 24274 + 24274 24279 24280 + 24280 24275 24274 + 24281 24275 24280 + 24275 24281 24276 + 24281 24282 24276 + 24277 24276 24282 + 24283 24279 24236 + 24279 24283 24284 + 24284 24280 24279 + 24285 24280 24284 + 24280 24285 24281 + 24286 24281 24285 + 24281 24286 24282 + 24287 24283 24236 + 24288 24283 24287 + 24283 24288 24289 + 24289 24284 24283 + 24290 24284 24289 + 24284 24290 24285 + 24235 24287 24236 + 24291 24287 24235 + 24287 24291 24288 + 24288 24291 24292 + 24292 24293 24288 + 24289 24288 24293 + 24293 24294 24289 + 24295 24289 24294 + 24289 24295 24290 + 24235 24241 24291 + 24241 24296 24291 + 24296 24292 24291 + 24246 24292 24296 + 24293 24292 24246 + 24246 24297 24293 + 24293 24297 24298 + 24298 24294 24293 + 24299 24294 24298 + 24294 24299 24295 + 24240 24296 24241 + 24296 24240 24239 + 24296 24239 24246 + 24300 24295 24299 + 24290 24295 24300 + 24300 24301 24290 + 24301 24285 24290 + 24301 24302 24285 + 24302 24286 24285 + 24303 24286 24302 + 24286 24303 24304 + 24286 24304 24282 + 24299 24305 24300 + 24306 24300 24305 + 24301 24300 24306 + 24306 24307 24301 + 24301 24307 24302 + 24307 24303 24302 + 24303 24307 24308 + 24308 24309 24303 + 24303 24309 24304 + 24310 24305 24299 + 24311 24305 24310 + 24305 24311 24306 + 24312 24306 24311 + 24307 24306 24312 + 24312 24308 24307 + 24312 24313 24308 + 24308 24313 24314 + 24314 24309 24308 + 24304 24309 24314 + 24299 24315 24310 + 24310 24315 24316 + 24316 24317 24310 + 24318 24310 24317 + 24310 24318 24311 + 24298 24315 24299 + 24315 24298 24319 + 24319 24316 24315 + 24316 24319 24320 + 24320 24321 24316 + 24316 24321 24322 + 24322 24317 24316 + 24323 24317 24322 + 24317 24323 24318 + 24324 24319 24298 + 24320 24319 24324 + 24324 24325 24320 + 24320 24325 24326 + 24326 24327 24320 + 24321 24320 24327 + 24327 24328 24321 + 24322 24321 24328 + 24298 24297 24324 + 24329 24324 24297 + 24324 24329 24330 + 24330 24325 24324 + 24325 24330 24331 + 24331 24326 24325 + 24297 24246 24329 + 24332 24329 24246 + 24330 24329 24332 + 24332 24333 24330 + 24330 24333 24334 + 24334 24331 24330 + 24335 24331 24334 + 24326 24331 24335 + 24336 24332 24246 + 24337 24332 24336 + 24332 24337 24333 + 24333 24337 24338 + 24338 24334 24333 + 24334 24338 24339 + 24339 24340 24334 + 24334 24340 24335 + 24245 24336 24246 + 24251 24336 24245 + 24251 24341 24336 + 24336 24341 24337 + 24337 24341 24342 + 24342 24338 24337 + 24339 24338 24342 + 24342 24343 24339 + 24344 24339 24343 + 24340 24339 24344 + 24341 24251 24345 + 24345 24342 24341 + 24342 24345 24346 + 24346 24343 24342 + 24343 24346 24347 + 24347 24348 24343 + 24343 24348 24344 + 24345 24251 24250 + 24250 24349 24345 + 24346 24345 24349 + 24349 24350 24346 + 24347 24346 24350 + 24350 24351 24347 + 24352 24347 24351 + 24348 24347 24352 + 24353 24349 24250 + 24349 24353 24354 + 24354 24350 24349 + 24350 24354 24355 + 24355 24351 24350 + 24351 24355 24356 + 24356 24357 24351 + 24351 24357 24352 + 24250 24256 24353 + 24358 24353 24256 + 24354 24353 24358 + 24358 24359 24354 + 24355 24354 24359 + 24359 24360 24355 + 24356 24355 24360 + 24360 24361 24356 + 24362 24356 24361 + 24357 24356 24362 + 24256 24363 24358 + 24364 24358 24363 + 24359 24358 24364 + 24365 24359 24364 + 24359 24365 24366 + 24366 24360 24359 + 24360 24366 24367 + 24367 24361 24360 + 24255 24363 24256 + 24368 24363 24255 + 24363 24368 24364 + 24369 24364 24368 + 24365 24364 24369 + 24369 24370 24365 + 24366 24365 24370 + 24370 24371 24366 + 24367 24366 24371 + 24255 24372 24368 + 24368 24372 24373 + 24373 24374 24368 + 24368 24374 24369 + 24375 24369 24374 + 24369 24375 24376 + 24376 24370 24369 + 24372 24255 24254 + 24254 24377 24372 + 24373 24372 24377 + 24377 24378 24373 + 24379 24373 24378 + 24374 24373 24379 + 24379 24380 24374 + 24374 24380 24375 + 24381 24375 24380 + 24376 24375 24381 + 24260 24377 24254 + 24377 24260 24382 + 24382 24378 24377 + 24378 24382 24383 + 24383 24384 24378 + 24378 24384 24379 + 24379 24384 24385 + 24385 24386 24379 + 24380 24379 24386 + 24268 24382 24260 + 24383 24382 24268 + 24268 24273 24383 + 24383 24273 24387 + 24387 24388 24383 + 24384 24383 24388 + 24388 24385 24384 + 24385 24388 24389 + 24389 24390 24385 + 24385 24390 24391 + 24391 24386 24385 + 24272 24387 24273 + 24392 24387 24272 + 24387 24392 24389 + 24389 24388 24387 + 24272 24278 24392 + 24392 24278 24393 + 24393 24394 24392 + 24389 24392 24394 + 24394 24395 24389 + 24395 24396 24389 + 24390 24389 24396 + 24396 24397 24390 + 24391 24390 24397 + 24393 24278 24277 + 24277 24398 24393 + 24399 24393 24398 + 24394 24393 24399 + 24394 24399 24400 + 24400 24395 24394 + 24401 24395 24400 + 24395 24401 24402 + 24402 24396 24395 + 24402 24397 24396 + 24282 24398 24277 + 24403 24398 24282 + 24398 24403 24399 + 24400 24399 24403 + 24403 24404 24400 + 24401 24400 24404 + 24404 24405 24401 + 24402 24401 24405 + 24282 24406 24403 + 24403 24406 24407 + 24407 24404 24403 + 24407 24405 24404 + 24405 24407 24408 + 24408 24409 24405 + 24405 24409 24402 + 24406 24282 24304 + 24304 24314 24406 + 24407 24406 24314 + 24408 24407 24314 + 24314 24313 24408 + 24313 24410 24408 + 24411 24408 24410 + 24408 24411 24409 + 24409 24411 24412 + 24412 24413 24409 + 24409 24413 24402 + 24413 24414 24402 + 24397 24402 24414 + 24415 24410 24313 + 24410 24415 24416 + 24410 24416 24411 + 24411 24416 24417 + 24417 24412 24411 + 24418 24412 24417 + 24413 24412 24418 + 24313 24312 24415 + 24415 24312 24311 + 24311 24419 24415 + 24416 24415 24419 + 24419 24420 24416 + 24416 24420 24417 + 24421 24417 24420 + 24417 24421 24422 + 24422 24423 24417 + 24417 24423 24418 + 24424 24419 24311 + 24419 24424 24420 + 24420 24424 24421 + 24323 24421 24424 + 24422 24421 24323 + 24323 24425 24422 + 24422 24425 24426 + 24426 24427 24422 + 24423 24422 24427 + 24311 24318 24424 + 24424 24318 24323 + 24322 24425 24323 + 24425 24322 24428 + 24428 24426 24425 + 24426 24428 24429 + 24429 24430 24426 + 24426 24430 24431 + 24431 24427 24426 + 24432 24427 24431 + 24427 24432 24423 + 24418 24423 24432 + 24328 24428 24322 + 24429 24428 24328 + 24328 24433 24429 + 24434 24429 24433 + 24430 24429 24434 + 24434 24435 24430 + 24430 24435 24436 + 24436 24431 24430 + 24437 24431 24436 + 24431 24437 24432 + 24438 24433 24328 + 24433 24438 24439 + 24439 24440 24433 + 24433 24440 24434 + 24441 24434 24440 + 24435 24434 24441 + 24328 24327 24438 + 24438 24327 24326 + 24326 24442 24438 + 24438 24442 24443 + 24443 24439 24438 + 24444 24439 24443 + 24440 24439 24444 + 24444 24445 24440 + 24440 24445 24441 + 24335 24442 24326 + 24442 24335 24446 + 24446 24443 24442 + 24443 24446 24447 + 24447 24448 24443 + 24443 24448 24444 + 24449 24444 24448 + 24445 24444 24449 + 24446 24335 24340 + 24340 24450 24446 + 24447 24446 24450 + 24450 24451 24447 + 24452 24447 24451 + 24448 24447 24452 + 24452 24453 24448 + 24448 24453 24449 + 24344 24450 24340 + 24450 24344 24454 + 24454 24451 24450 + 24451 24454 24455 + 24455 24456 24451 + 24451 24456 24452 + 24457 24452 24456 + 24453 24452 24457 + 24454 24344 24348 + 24348 24458 24454 + 24455 24454 24458 + 24458 24459 24455 + 24460 24455 24459 + 24456 24455 24460 + 24460 24461 24456 + 24456 24461 24457 + 24352 24458 24348 + 24458 24352 24462 + 24462 24459 24458 + 24459 24462 24463 + 24463 24464 24459 + 24459 24464 24460 + 24465 24460 24464 + 24461 24460 24465 + 24466 24462 24352 + 24463 24462 24466 + 24466 24467 24463 + 24468 24463 24467 + 24464 24463 24468 + 24468 24469 24464 + 24464 24469 24465 + 24352 24357 24466 + 24362 24466 24357 + 24466 24362 24470 + 24470 24467 24466 + 24467 24470 24471 + 24471 24472 24467 + 24467 24472 24468 + 24473 24468 24472 + 24469 24468 24473 + 24470 24362 24474 + 24474 24475 24470 + 24471 24470 24475 + 24475 24476 24471 + 24477 24471 24476 + 24472 24471 24477 + 24477 24478 24472 + 24472 24478 24473 + 24361 24474 24362 + 24479 24474 24361 + 24474 24479 24480 + 24480 24475 24474 + 24475 24480 24481 + 24481 24476 24475 + 24476 24481 24482 + 24482 24483 24476 + 24476 24483 24477 + 24361 24367 24479 + 24479 24367 24484 + 24484 24485 24479 + 24480 24479 24485 + 24485 24486 24480 + 24481 24480 24486 + 24486 24487 24481 + 24482 24481 24487 + 24371 24484 24367 + 24488 24484 24371 + 24484 24488 24489 + 24489 24485 24484 + 24485 24489 24490 + 24490 24486 24485 + 24486 24490 24491 + 24491 24487 24486 + 24371 24492 24488 + 24488 24492 24493 + 24493 24494 24488 + 24489 24488 24494 + 24494 24495 24489 + 24490 24489 24495 + 24492 24371 24370 + 24370 24376 24492 + 24492 24376 24496 + 24496 24493 24492 + 24497 24493 24496 + 24493 24497 24498 + 24498 24494 24493 + 24494 24498 24499 + 24499 24495 24494 + 24381 24496 24376 + 24500 24496 24381 + 24496 24500 24497 + 24497 24500 24501 + 24501 24502 24497 + 24498 24497 24502 + 24502 24503 24498 + 24499 24498 24503 + 24381 24504 24500 + 24500 24504 24505 + 24505 24501 24500 + 24506 24501 24505 + 24501 24506 24507 + 24507 24502 24501 + 24502 24507 24508 + 24508 24503 24502 + 24504 24381 24509 + 24509 24510 24504 + 24505 24504 24510 + 24510 24511 24505 + 24512 24505 24511 + 24505 24512 24506 + 24380 24509 24381 + 24386 24509 24380 + 24510 24509 24386 + 24386 24391 24510 + 24510 24391 24513 + 24513 24511 24510 + 24514 24511 24513 + 24511 24514 24512 + 24515 24512 24514 + 24506 24512 24515 + 24515 24516 24506 + 24507 24506 24516 + 24516 24517 24507 + 24508 24507 24517 + 24397 24513 24391 + 24414 24513 24397 + 24513 24414 24514 + 24514 24414 24413 + 24413 24518 24514 + 24514 24518 24515 + 24519 24515 24518 + 24515 24519 24520 + 24520 24516 24515 + 24516 24520 24521 + 24521 24517 24516 + 24418 24518 24413 + 24518 24418 24519 + 24432 24519 24418 + 24520 24519 24432 + 24432 24437 24520 + 24521 24520 24437 + 24437 24522 24521 + 24523 24521 24522 + 24517 24521 24523 + 24523 24524 24517 + 24517 24524 24508 + 24525 24508 24524 + 24503 24508 24525 + 24436 24522 24437 + 24522 24436 24526 + 24526 24527 24522 + 24522 24527 24523 + 24528 24523 24527 + 24524 24523 24528 + 24528 24529 24524 + 24524 24529 24525 + 24526 24436 24435 + 24435 24530 24526 + 24531 24526 24530 + 24527 24526 24531 + 24531 24532 24527 + 24527 24532 24528 + 24533 24528 24532 + 24529 24528 24533 + 24441 24530 24435 + 24530 24441 24534 + 24534 24535 24530 + 24530 24535 24531 + 24536 24531 24535 + 24532 24531 24536 + 24536 24537 24532 + 24532 24537 24533 + 24534 24441 24445 + 24445 24538 24534 + 24539 24534 24538 + 24535 24534 24539 + 24539 24540 24535 + 24535 24540 24536 + 24541 24536 24540 + 24537 24536 24541 + 24449 24538 24445 + 24538 24449 24542 + 24542 24543 24538 + 24538 24543 24539 + 24544 24539 24543 + 24540 24539 24544 + 24544 24545 24540 + 24540 24545 24541 + 24542 24449 24453 + 24453 24546 24542 + 24547 24542 24546 + 24543 24542 24547 + 24547 24548 24543 + 24543 24548 24544 + 24549 24544 24548 + 24545 24544 24549 + 24457 24546 24453 + 24546 24457 24550 + 24550 24551 24546 + 24546 24551 24547 + 24552 24547 24551 + 24548 24547 24552 + 24552 24553 24548 + 24548 24553 24549 + 24550 24457 24461 + 24461 24554 24550 + 24555 24550 24554 + 24551 24550 24555 + 24555 24556 24551 + 24551 24556 24552 + 24557 24552 24556 + 24553 24552 24557 + 24465 24554 24461 + 24554 24465 24558 + 24558 24559 24554 + 24554 24559 24555 + 24560 24555 24559 + 24556 24555 24560 + 24560 24561 24556 + 24556 24561 24557 + 24558 24465 24469 + 24469 24562 24558 + 24563 24558 24562 + 24559 24558 24563 + 24563 24564 24559 + 24559 24564 24560 + 24565 24560 24564 + 24565 24561 24560 + 24473 24562 24469 + 24562 24473 24566 + 24566 24567 24562 + 24562 24567 24563 + 24568 24563 24567 + 24568 24569 24563 + 24569 24564 24563 + 24564 24569 24565 + 24566 24473 24478 + 24478 24570 24566 + 24571 24566 24570 + 24571 24567 24566 + 24571 24572 24567 + 24567 24572 24568 + 24568 24572 24573 + 24573 24574 24568 + 24574 24569 24568 + 24574 24565 24569 + 24575 24570 24478 + 24576 24570 24575 + 24576 24577 24570 + 24570 24577 24571 + 24578 24571 24577 + 24572 24571 24578 + 24578 24573 24572 + 24574 24573 24578 + 24579 24574 24578 + 24574 24579 24565 + 24478 24477 24575 + 24575 24477 24483 + 24483 24580 24575 + 24580 24581 24575 + 24581 24576 24575 + 24582 24576 24581 + 24577 24576 24582 + 24582 24578 24577 + 24583 24580 24483 + 24584 24580 24583 + 24584 24581 24580 + 24581 24584 24585 + 24585 24582 24581 + 24582 24585 24586 + 24578 24582 24586 + 24483 24482 24583 + 24583 24482 24587 + 24587 24588 24583 + 24584 24583 24588 + 24588 24589 24584 + 24585 24584 24589 + 24585 24589 24590 + 24591 24585 24590 + 24585 24591 24586 + 24487 24587 24482 + 24592 24587 24487 + 24587 24592 24593 + 24593 24588 24587 + 24590 24588 24593 + 24590 24589 24588 + 24487 24491 24592 + 24592 24491 24594 + 24594 24595 24592 + 24593 24592 24595 + 24595 24596 24593 + 24590 24593 24596 + 24596 24597 24590 + 24591 24590 24597 + 24594 24491 24490 + 24490 24598 24594 + 24599 24594 24598 + 24594 24599 24600 + 24600 24595 24594 + 24595 24600 24601 + 24601 24596 24595 + 24602 24596 24601 + 24602 24597 24596 + 24591 24597 24602 + 24495 24598 24490 + 24603 24598 24495 + 24598 24603 24599 + 24599 24603 24604 + 24604 24605 24599 + 24600 24599 24605 + 24605 24606 24600 + 24601 24600 24606 + 24606 24607 24601 + 24602 24601 24607 + 24495 24499 24603 + 24603 24499 24608 + 24608 24604 24603 + 24609 24604 24608 + 24604 24609 24610 + 24610 24605 24604 + 24605 24610 24611 + 24611 24606 24605 + 24606 24611 24612 + 24612 24607 24606 + 24503 24608 24499 + 24525 24608 24503 + 24608 24525 24609 + 24609 24525 24529 + 24529 24613 24609 + 24610 24609 24613 + 24613 24614 24610 + 24611 24610 24614 + 24614 24615 24611 + 24612 24611 24615 + 24533 24613 24529 + 24613 24533 24616 + 24616 24614 24613 + 24614 24616 24617 + 24617 24615 24614 + 24615 24617 24618 + 24618 24619 24615 + 24615 24619 24612 + 24616 24533 24537 + 24537 24620 24616 + 24617 24616 24620 + 24620 24621 24617 + 24617 24621 24622 + 24622 24618 24617 + 24622 24623 24618 + 24623 24624 24618 + 24619 24618 24624 + 24541 24620 24537 + 24620 24541 24625 + 24625 24621 24620 + 24621 24625 24626 + 24626 24622 24621 + 24622 24626 24627 + 24627 24623 24622 + 24623 24627 24628 + 24628 24586 24623 + 24586 24624 24623 + 24625 24541 24545 + 24545 24629 24625 + 24626 24625 24629 + 24629 24630 24626 + 24630 24631 24626 + 24631 24627 24626 + 24628 24627 24631 + 24632 24628 24631 + 24628 24632 24578 + 24586 24628 24578 + 24549 24629 24545 + 24629 24549 24633 + 24633 24630 24629 + 24630 24633 24634 + 24634 24631 24630 + 24631 24634 24632 + 24632 24634 24635 + 24579 24632 24635 + 24632 24579 24578 + 24633 24549 24553 + 24553 24636 24633 + 24634 24633 24636 + 24636 24635 24634 + 24637 24635 24636 + 24635 24637 24579 + 24579 24637 24638 + 24579 24638 24565 + 24565 24638 24561 + 24557 24636 24553 + 24637 24636 24557 + 24637 24557 24561 + 24561 24638 24637 + 24639 24624 24586 + 24624 24639 24619 + 24619 24639 24640 + 24640 24612 24619 + 24640 24641 24612 + 24641 24607 24612 + 24586 24642 24639 + 24642 24640 24639 + 24642 24643 24640 + 24643 24641 24640 + 24643 24602 24641 + 24607 24641 24602 + 24643 24642 24586 + 24591 24643 24586 + 24643 24591 24602 + 24644 24645 24646 + 24647 24645 24644 + 24648 24645 24647 + 24645 24648 24649 + 24649 24650 24645 + 24651 24644 24646 + 24652 24644 24651 + 24644 24652 24653 + 24644 24653 24647 + 24654 24647 24653 + 24655 24647 24654 + 24647 24655 24648 + 24646 24656 24651 + 24656 24657 24651 + 24657 24658 24651 + 24658 24659 24651 + 24660 24651 24659 + 24660 24661 24651 + 24651 24661 24652 + 24662 24656 24646 + 24656 24662 24663 + 24657 24656 24663 + 24664 24657 24663 + 24665 24657 24664 + 24657 24665 24666 + 24666 24658 24657 + 24646 24667 24662 + 24668 24662 24667 + 24663 24662 24668 + 24668 24669 24663 + 24663 24669 24664 + 24669 24670 24664 + 24665 24664 24670 + 24670 24671 24665 + 24666 24665 24671 + 24646 24672 24667 + 24667 24672 24673 + 24673 24674 24667 + 24667 24674 24668 + 24675 24672 24646 + 24672 24675 24676 + 24672 24676 24673 + 24676 24677 24673 + 24678 24673 24677 + 24673 24678 24679 + 24679 24674 24673 + 24668 24674 24679 + 24650 24675 24646 + 24675 24650 24649 + 24675 24649 24680 + 24680 24676 24675 + 24676 24680 24681 + 24682 24676 24681 + 24676 24682 24677 + 24682 24683 24677 + 24684 24677 24683 + 24677 24684 24678 + 24648 24680 24649 + 24680 24648 24655 + 24681 24680 24655 + 24685 24681 24655 + 24682 24681 24685 + 24685 24686 24682 + 24683 24682 24686 + 24686 24687 24683 + 24688 24683 24687 + 24688 24684 24683 + 24689 24685 24655 + 24690 24685 24689 + 24686 24685 24690 + 24690 24691 24686 + 24686 24691 24687 + 24691 24692 24687 + 24693 24687 24692 + 24687 24693 24688 + 24654 24689 24655 + 24654 24694 24689 + 24689 24694 24690 + 24695 24690 24694 + 24691 24690 24695 + 24695 24696 24691 + 24691 24696 24697 + 24697 24692 24691 + 24698 24692 24697 + 24692 24698 24693 + 24694 24654 24699 + 24699 24700 24694 + 24694 24700 24695 + 24701 24695 24700 + 24695 24701 24702 + 24702 24696 24695 + 24696 24702 24703 + 24703 24697 24696 + 24699 24654 24653 + 24653 24704 24699 + 24705 24699 24704 + 24699 24705 24706 + 24706 24700 24699 + 24700 24706 24701 + 24707 24701 24706 + 24702 24701 24707 + 24708 24704 24653 + 24709 24704 24708 + 24704 24709 24705 + 24710 24705 24709 + 24706 24705 24710 + 24653 24652 24708 + 24708 24652 24711 + 24711 24712 24708 + 24713 24708 24712 + 24708 24713 24709 + 24652 24661 24711 + 24714 24711 24661 + 24711 24714 24715 + 24715 24716 24711 + 24711 24716 24717 + 24717 24712 24711 + 24718 24712 24717 + 24712 24718 24713 + 24661 24660 24714 + 24719 24714 24660 + 24715 24714 24719 + 24719 24720 24715 + 24715 24720 24721 + 24721 24722 24715 + 24716 24715 24722 + 24660 24723 24719 + 24723 24724 24719 + 24725 24719 24724 + 24719 24725 24726 + 24726 24720 24719 + 24720 24726 24727 + 24727 24721 24720 + 24659 24723 24660 + 24723 24659 24728 + 24723 24728 24729 + 24729 24724 24723 + 24724 24729 24730 + 24730 24731 24724 + 24724 24731 24725 + 24728 24659 24658 + 24658 24732 24728 + 24728 24732 24733 + 24733 24729 24728 + 24730 24729 24733 + 24733 24734 24730 + 24730 24734 24735 + 24735 24736 24730 + 24731 24730 24736 + 24666 24732 24658 + 24732 24666 24737 + 24737 24738 24732 + 24732 24738 24733 + 24739 24733 24738 + 24739 24734 24733 + 24734 24739 24740 + 24740 24741 24734 + 24734 24741 24735 + 24666 24671 24737 + 24671 24742 24737 + 24743 24737 24742 + 24743 24738 24737 + 24738 24743 24739 + 24739 24743 24744 + 24740 24739 24744 + 24744 24745 24740 + 24746 24740 24745 + 24741 24740 24746 + 24742 24671 24747 + 24748 24742 24747 + 24744 24742 24748 + 24742 24744 24743 + 24747 24671 24670 + 24747 24670 24669 + 24669 24749 24747 + 24747 24749 24750 + 24750 24748 24747 + 24748 24750 24751 + 24752 24748 24751 + 24748 24752 24744 + 24744 24752 24753 + 24753 24745 24744 + 24669 24668 24749 + 24668 24754 24749 + 24749 24754 24755 + 24755 24750 24749 + 24750 24755 24751 + 24754 24668 24679 + 24679 24755 24754 + 24755 24679 24678 + 24756 24755 24678 + 24755 24756 24751 + 24751 24756 24757 + 24757 24758 24751 + 24751 24758 24753 + 24753 24752 24751 + 24756 24678 24684 + 24684 24757 24756 + 24759 24757 24684 + 24757 24759 24760 + 24760 24758 24757 + 24758 24760 24761 + 24761 24753 24758 + 24753 24761 24745 + 24761 24762 24745 + 24745 24762 24746 + 24684 24688 24759 + 24763 24759 24688 + 24760 24759 24763 + 24763 24764 24760 + 24760 24764 24765 + 24765 24761 24760 + 24762 24761 24765 + 24765 24766 24762 + 24746 24762 24766 + 24688 24693 24763 + 24767 24763 24693 + 24764 24763 24767 + 24767 24768 24764 + 24764 24768 24765 + 24768 24769 24765 + 24766 24765 24769 + 24770 24766 24769 + 24766 24770 24771 + 24771 24746 24766 + 24741 24746 24771 + 24693 24698 24767 + 24767 24698 24772 + 24772 24773 24767 + 24768 24767 24773 + 24773 24774 24768 + 24769 24768 24774 + 24774 24775 24769 + 24775 24770 24769 + 24697 24772 24698 + 24776 24772 24697 + 24772 24776 24777 + 24777 24773 24772 + 24773 24777 24778 + 24778 24774 24773 + 24774 24778 24779 + 24779 24775 24774 + 24770 24775 24779 + 24776 24697 24703 + 24776 24703 24780 + 24780 24781 24776 + 24781 24777 24776 + 24778 24777 24781 + 24781 24782 24778 + 24778 24782 24783 + 24779 24778 24783 + 24703 24784 24780 + 24780 24784 24785 + 24786 24780 24785 + 24781 24780 24786 + 24787 24781 24786 + 24781 24787 24782 + 24782 24787 24788 + 24788 24783 24782 + 24784 24703 24702 + 24702 24789 24784 + 24789 24790 24784 + 24790 24785 24784 + 24785 24790 24791 + 24791 24792 24785 + 24786 24785 24792 + 24792 24793 24786 + 24787 24786 24793 + 24788 24787 24793 + 24707 24789 24702 + 24790 24789 24707 + 24790 24707 24794 + 24794 24791 24790 + 24794 24795 24791 + 24792 24791 24795 + 24796 24792 24795 + 24793 24792 24796 + 24796 24797 24793 + 24793 24797 24788 + 24797 24798 24788 + 24783 24788 24798 + 24794 24707 24706 + 24799 24794 24706 + 24799 24800 24794 + 24800 24795 24794 + 24795 24800 24801 + 24801 24796 24795 + 24801 24802 24796 + 24802 24797 24796 + 24798 24797 24802 + 24802 24803 24798 + 24783 24798 24803 + 24706 24804 24799 + 24799 24804 24805 + 24806 24799 24805 + 24799 24806 24807 + 24807 24800 24799 + 24800 24807 24808 + 24808 24801 24800 + 24710 24804 24706 + 24710 24805 24804 + 24805 24710 24809 + 24809 24810 24805 + 24805 24810 24811 + 24811 24806 24805 + 24807 24806 24811 + 24811 24812 24807 + 24808 24807 24812 + 24809 24710 24709 + 24709 24813 24809 + 24814 24809 24813 + 24809 24814 24815 + 24815 24810 24809 + 24811 24810 24815 + 24816 24811 24815 + 24812 24811 24816 + 24817 24813 24709 + 24813 24817 24818 + 24818 24819 24813 + 24813 24819 24814 + 24820 24814 24819 + 24815 24814 24820 + 24820 24821 24815 + 24815 24821 24816 + 24709 24713 24817 + 24817 24713 24718 + 24718 24822 24817 + 24818 24817 24822 + 24822 24823 24818 + 24824 24818 24823 + 24819 24818 24824 + 24824 24825 24819 + 24819 24825 24820 + 24826 24820 24825 + 24820 24826 24821 + 24827 24822 24718 + 24823 24822 24827 + 24827 24828 24823 + 24823 24828 24829 + 24829 24830 24823 + 24823 24830 24824 + 24718 24831 24827 + 24832 24827 24831 + 24828 24827 24832 + 24832 24833 24828 + 24829 24828 24833 + 24717 24831 24718 + 24831 24717 24834 + 24834 24835 24831 + 24831 24835 24832 + 24836 24832 24835 + 24833 24832 24836 + 24837 24834 24717 + 24838 24834 24837 + 24835 24834 24838 + 24838 24839 24835 + 24835 24839 24836 + 24717 24716 24837 + 24716 24840 24837 + 24840 24841 24837 + 24842 24837 24841 + 24837 24842 24843 + 24843 24844 24837 + 24837 24844 24838 + 24722 24840 24716 + 24840 24722 24845 + 24845 24846 24840 + 24840 24846 24847 + 24847 24841 24840 + 24848 24841 24847 + 24841 24848 24842 + 24849 24842 24848 + 24843 24842 24849 + 24845 24722 24721 + 24721 24850 24845 + 24845 24850 24851 + 24851 24852 24845 + 24846 24845 24852 + 24852 24853 24846 + 24847 24846 24853 + 24854 24850 24721 + 24850 24854 24855 + 24855 24851 24850 + 24851 24855 24856 + 24856 24857 24851 + 24851 24857 24858 + 24858 24852 24851 + 24853 24852 24858 + 24721 24727 24854 + 24854 24727 24859 + 24859 24860 24854 + 24855 24854 24860 + 24860 24861 24855 + 24856 24855 24861 + 24859 24727 24726 + 24726 24862 24859 + 24863 24859 24862 + 24859 24863 24864 + 24864 24860 24859 + 24860 24864 24865 + 24865 24861 24860 + 24866 24862 24726 + 24867 24862 24866 + 24862 24867 24863 + 24868 24863 24867 + 24864 24863 24868 + 24868 24869 24864 + 24864 24869 24870 + 24870 24865 24864 + 24726 24725 24866 + 24871 24866 24725 + 24872 24866 24871 + 24866 24872 24867 + 24725 24731 24871 + 24736 24871 24731 + 24873 24871 24736 + 24871 24873 24872 + 24874 24872 24873 + 24867 24872 24874 + 24874 24875 24867 + 24867 24875 24876 + 24876 24877 24867 + 24877 24868 24867 + 24736 24878 24873 + 24873 24878 24879 + 24879 24880 24873 + 24873 24880 24874 + 24878 24736 24735 + 24735 24881 24878 + 24879 24878 24881 + 24882 24879 24881 + 24883 24879 24882 + 24880 24879 24883 + 24880 24883 24884 + 24884 24885 24880 + 24880 24885 24874 + 24771 24881 24735 + 24881 24771 24886 + 24886 24887 24881 + 24881 24887 24882 + 24771 24735 24741 + 24770 24886 24771 + 24888 24886 24770 + 24888 24887 24886 + 24887 24888 24889 + 24889 24882 24887 + 24882 24889 24890 + 24890 24891 24882 + 24882 24891 24883 + 24883 24891 24892 + 24892 24884 24883 + 24770 24893 24888 + 24888 24893 24894 + 24894 24889 24888 + 24890 24889 24894 + 24894 24895 24890 + 24890 24895 24896 + 24896 24897 24890 + 24891 24890 24897 + 24779 24893 24770 + 24893 24779 24898 + 24898 24894 24893 + 24895 24894 24898 + 24898 24899 24895 + 24895 24899 24900 + 24900 24896 24895 + 24901 24896 24900 + 24896 24901 24902 + 24902 24897 24896 + 24903 24898 24779 + 24899 24898 24903 + 24903 24904 24899 + 24900 24899 24904 + 24904 24905 24900 + 24905 24906 24900 + 24907 24900 24906 + 24900 24907 24901 + 24783 24903 24779 + 24803 24903 24783 + 24904 24903 24803 + 24803 24908 24904 + 24904 24908 24909 + 24909 24905 24904 + 24909 24910 24905 + 24905 24910 24911 + 24911 24906 24905 + 24912 24906 24911 + 24906 24912 24907 + 24908 24803 24802 + 24802 24913 24908 + 24914 24908 24913 + 24914 24909 24908 + 24909 24914 24915 + 24910 24909 24915 + 24910 24915 24916 + 24916 24911 24910 + 24917 24911 24916 + 24911 24917 24912 + 24913 24802 24801 + 24801 24808 24913 + 24913 24808 24918 + 24918 24914 24913 + 24914 24918 24919 + 24915 24914 24919 + 24915 24919 24916 + 24919 24920 24916 + 24921 24916 24920 + 24916 24921 24917 + 24922 24917 24921 + 24912 24917 24922 + 24918 24808 24812 + 24812 24923 24918 + 24923 24919 24918 + 24919 24923 24924 + 24920 24919 24924 + 24921 24920 24924 + 24924 24925 24921 + 24921 24925 24926 + 24926 24922 24921 + 24923 24812 24816 + 24923 24816 24927 + 24927 24924 24923 + 24925 24924 24927 + 24927 24928 24925 + 24925 24928 24929 + 24929 24926 24925 + 24926 24929 24930 + 24931 24926 24930 + 24922 24926 24931 + 24821 24927 24816 + 24928 24927 24821 + 24821 24932 24928 + 24929 24928 24932 + 24930 24929 24932 + 24932 24826 24930 + 24930 24826 24933 + 24934 24930 24933 + 24931 24930 24934 + 24826 24932 24821 + 24825 24933 24826 + 24933 24825 24824 + 24824 24935 24933 + 24933 24935 24936 + 24936 24937 24933 + 24933 24937 24938 + 24938 24934 24933 + 24935 24824 24830 + 24830 24939 24935 + 24936 24935 24939 + 24939 24940 24936 + 24941 24936 24940 + 24936 24941 24942 + 24942 24937 24936 + 24937 24942 24943 + 24943 24938 24937 + 24939 24830 24829 + 24829 24944 24939 + 24939 24944 24945 + 24945 24940 24939 + 24946 24940 24945 + 24940 24946 24941 + 24947 24941 24946 + 24942 24941 24947 + 24947 24948 24942 + 24943 24942 24948 + 24944 24829 24949 + 24949 24950 24944 + 24944 24950 24951 + 24945 24944 24951 + 24833 24949 24829 + 24952 24949 24833 + 24950 24949 24952 + 24950 24952 24953 + 24953 24951 24950 + 24951 24953 24954 + 24951 24954 24955 + 24955 24956 24951 + 24951 24956 24945 + 24833 24957 24952 + 24952 24957 24958 + 24953 24952 24958 + 24958 24959 24953 + 24954 24953 24959 + 24959 24960 24954 + 24955 24954 24960 + 24836 24957 24833 + 24957 24836 24961 + 24961 24958 24957 + 24958 24961 24962 + 24962 24963 24958 + 24958 24963 24964 + 24964 24959 24958 + 24960 24959 24964 + 24965 24961 24836 + 24962 24961 24965 + 24965 24966 24962 + 24962 24966 24967 + 24967 24968 24962 + 24963 24962 24968 + 24968 24969 24963 + 24964 24963 24969 + 24836 24839 24965 + 24970 24965 24839 + 24965 24970 24971 + 24971 24966 24965 + 24966 24971 24972 + 24972 24967 24966 + 24839 24838 24970 + 24973 24970 24838 + 24971 24970 24973 + 24973 24974 24971 + 24972 24971 24974 + 24974 24975 24972 + 24975 24976 24972 + 24976 24977 24972 + 24967 24972 24977 + 24838 24844 24973 + 24978 24973 24844 + 24973 24978 24979 + 24979 24974 24973 + 24974 24979 24980 + 24980 24975 24974 + 24975 24980 24981 + 24981 24976 24975 + 24976 24981 24982 + 24982 24977 24976 + 24844 24843 24978 + 24983 24978 24843 + 24979 24978 24983 + 24983 24984 24979 + 24985 24979 24984 + 24985 24980 24979 + 24980 24985 24986 + 24981 24980 24986 + 24843 24987 24983 + 24988 24983 24987 + 24983 24988 24989 + 24989 24984 24983 + 24984 24989 24990 + 24990 24985 24984 + 24985 24990 24991 + 24991 24986 24985 + 24849 24987 24843 + 24992 24987 24849 + 24987 24992 24988 + 24993 24988 24992 + 24989 24988 24993 + 24993 24994 24989 + 24989 24994 24995 + 24995 24990 24989 + 24990 24995 24996 + 24991 24990 24996 + 24849 24997 24992 + 24992 24997 24998 + 24998 24999 24992 + 24992 24999 24993 + 25000 24993 24999 + 24993 25000 25001 + 25001 24994 24993 + 24997 24849 25002 + 25002 25003 24997 + 24997 25003 25004 + 24998 24997 25004 + 24848 25002 24849 + 25005 25002 24848 + 25003 25002 25005 + 25005 25006 25003 + 25003 25006 25007 + 25007 25004 25003 + 24848 25008 25005 + 25005 25008 25009 + 25009 25010 25005 + 25006 25005 25010 + 25010 25011 25006 + 25007 25006 25011 + 24847 25008 24848 + 25008 24847 25009 + 24847 25012 25009 + 25009 25012 25013 + 25009 25013 25014 + 25014 25010 25009 + 25011 25010 25014 + 24853 25012 24847 + 25015 25012 24853 + 25012 25015 25013 + 25013 25015 25016 + 25013 25016 25017 + 25017 25014 25013 + 25018 25014 25017 + 25014 25018 25011 + 24853 25019 25015 + 25020 25015 25019 + 25015 25020 25016 + 25016 25020 25021 + 25016 25021 25022 + 25022 25017 25016 + 25023 25017 25022 + 25017 25023 25018 + 24858 25019 24853 + 25019 24858 25024 + 25024 25025 25019 + 25025 25020 25019 + 25026 25020 25025 + 25020 25026 25021 + 25021 25026 25027 + 25027 25028 25021 + 25028 25022 25021 + 25029 25024 24858 + 25030 25024 25029 + 25025 25024 25030 + 25030 25031 25025 + 25025 25031 25026 + 25032 25026 25031 + 25026 25032 25027 + 24858 24857 25029 + 25033 25029 24857 + 25029 25033 25034 + 25034 25035 25029 + 25029 25035 25030 + 24857 24856 25033 + 25036 25033 24856 + 25033 25036 25037 + 25034 25033 25037 + 25038 25034 25037 + 25038 25039 25034 + 25035 25034 25039 + 25039 25040 25035 + 25040 25030 25035 + 24856 25041 25036 + 25042 25036 25041 + 25036 25042 25043 + 25043 25037 25036 + 25037 25043 25044 + 25044 25038 25037 + 24861 25041 24856 + 25045 25041 24861 + 25041 25045 25042 + 25046 25042 25045 + 25042 25046 25047 + 25043 25042 25047 + 25043 25047 25048 + 25044 25043 25048 + 24861 24865 25045 + 25045 24865 24870 + 24870 25049 25045 + 25045 25049 25046 + 25050 25046 25049 + 25046 25050 25051 + 25051 25047 25046 + 25047 25051 25052 + 25052 25048 25047 + 25053 25049 24870 + 25049 25053 25050 + 25054 25050 25053 + 25050 25054 25055 + 25051 25050 25055 + 25056 25051 25055 + 25056 25052 25051 + 25057 25052 25056 + 25048 25052 25057 + 24870 25058 25053 + 25053 25058 25059 + 25059 25060 25053 + 25053 25060 25054 + 25061 25054 25060 + 25054 25061 25062 + 25062 25055 25054 + 25058 24870 24869 + 24869 25063 25058 + 25059 25058 25063 + 25063 25064 25059 + 25065 25059 25064 + 25059 25065 25066 + 25066 25060 25059 + 25060 25066 25061 + 25023 25061 25066 + 25062 25061 25023 + 25063 24869 24868 + 24868 25067 25063 + 25063 25067 25068 + 25068 25064 25063 + 25007 25064 25068 + 25064 25007 25065 + 25011 25065 25007 + 25066 25065 25011 + 25011 25018 25066 + 25066 25018 25023 + 25067 24868 25069 + 25069 25070 25067 + 25070 25068 25067 + 25004 25068 25070 + 25068 25004 25007 + 24868 24877 25069 + 25069 24877 25071 + 25071 25072 25069 + 25069 25072 25073 + 25073 25070 25069 + 25074 25070 25073 + 25070 25074 25004 + 25004 25074 24998 + 25071 24877 24876 + 24876 25075 25071 + 25076 25071 25075 + 25072 25071 25076 + 25076 25077 25072 + 25073 25072 25077 + 25077 25078 25073 + 25079 25073 25078 + 25073 25079 25074 + 25080 25075 24876 + 25075 25080 25081 + 25081 25082 25075 + 25075 25082 25076 + 25083 25076 25082 + 25077 25076 25083 + 24876 25084 25080 + 25080 25084 25085 + 25085 25086 25080 + 25080 25086 25087 + 25087 25081 25080 + 25088 25081 25087 + 25082 25081 25088 + 25084 24876 24875 + 24875 25089 25084 + 25085 25084 25089 + 25089 25090 25085 + 25091 25085 25090 + 25085 25091 25092 + 25092 25086 25085 + 25086 25092 25093 + 25093 25087 25086 + 25089 24875 24874 + 24874 25094 25089 + 25089 25094 25095 + 25095 25090 25089 + 25096 25090 25095 + 25090 25096 25091 + 25097 25091 25096 + 25092 25091 25097 + 25094 24874 24885 + 24885 25098 25094 + 25094 25098 25099 + 25095 25094 25099 + 25099 25100 25095 + 25101 25095 25100 + 25095 25101 25096 + 24884 25098 24885 + 25098 24884 24892 + 24892 25099 25098 + 25099 24892 25102 + 25099 25102 25103 + 25103 25100 25099 + 25100 25103 25104 + 25104 25105 25100 + 25100 25105 25101 + 25106 25101 25105 + 25096 25101 25106 + 25102 24892 25107 + 25107 25108 25102 + 25102 25108 25109 + 25109 25103 25102 + 25104 25103 25109 + 24891 25107 24892 + 24897 25107 24891 + 25107 24897 24902 + 24902 25108 25107 + 25108 24902 25110 + 25110 25109 25108 + 25111 25109 25110 + 25109 25111 25104 + 25104 25111 25112 + 25112 25113 25104 + 25105 25104 25113 + 25113 25114 25105 + 25105 25114 25106 + 25110 24902 24901 + 24901 25115 25110 + 25116 25110 25115 + 25116 25111 25110 + 25111 25116 25112 + 25116 25117 25112 + 25112 25117 25118 + 25112 25118 24948 + 24948 25113 25112 + 25114 25113 24948 + 25119 25115 24901 + 25119 25120 25115 + 25115 25120 25116 + 25117 25116 25120 + 25121 25117 25120 + 25117 25121 24943 + 25118 25117 24943 + 24948 25118 24943 + 24901 24907 25119 + 25119 24907 24912 + 25122 25119 24912 + 25123 25119 25122 + 25119 25123 25120 + 25120 25123 25124 + 25124 25125 25120 + 25120 25125 25121 + 24938 25121 25125 + 24938 24943 25121 + 24922 25122 24912 + 25122 24922 25126 + 25122 25126 25123 + 25124 25123 25126 + 25126 24931 25124 + 24934 25124 24931 + 24934 25125 25124 + 25125 24934 24938 + 25126 24922 24931 + 24948 24947 25114 + 25114 24947 25127 + 25127 25106 25114 + 25106 25127 25128 + 25128 25129 25106 + 25106 25129 25096 + 24946 25127 24947 + 25128 25127 24946 + 24946 25130 25128 + 25128 25130 25131 + 25131 25132 25128 + 25129 25128 25132 + 25132 25097 25129 + 25096 25129 25097 + 24945 25130 24946 + 25130 24945 25133 + 25133 25131 25130 + 25133 25134 25131 + 25131 25134 25135 + 25135 25132 25131 + 25097 25132 25135 + 25135 25136 25097 + 25097 25136 25092 + 25137 25133 24945 + 25134 25133 25137 + 25137 25138 25134 + 25134 25138 25139 + 25135 25134 25139 + 25139 25140 25135 + 25136 25135 25140 + 25140 25141 25136 + 25092 25136 25141 + 25141 25093 25092 + 25142 25137 24945 + 25143 25137 25142 + 25138 25137 25143 + 25138 25143 25144 + 25144 25139 25138 + 24956 25142 24945 + 25142 24956 25145 + 25146 25142 25145 + 25142 25146 25147 + 25147 25148 25142 + 25142 25148 25143 + 25143 25148 25149 + 25149 25144 25143 + 25145 24956 24955 + 24955 25150 25145 + 25145 25150 25151 + 25151 25152 25145 + 25145 25152 25146 + 25152 25153 25146 + 25147 25146 25153 + 25150 24955 25154 + 25154 25155 25150 + 25150 25155 25000 + 25000 25151 25150 + 24999 25151 25000 + 25151 24999 24998 + 24998 25152 25151 + 25153 25152 24998 + 24960 25154 24955 + 25156 25154 24960 + 25155 25154 25156 + 25156 25157 25155 + 25155 25157 25001 + 25001 25000 25155 + 24960 25158 25156 + 25156 25158 25159 + 25159 25160 25156 + 25157 25156 25160 + 25160 25161 25157 + 25001 25157 25161 + 25161 25162 25001 + 24994 25001 25162 + 24964 25158 24960 + 25158 24964 25163 + 25163 25159 25158 + 25159 25163 25164 + 25164 25165 25159 + 25159 25165 25166 + 25166 25160 25159 + 25161 25160 25166 + 25166 25167 25161 + 25162 25161 25167 + 24969 25163 24964 + 25164 25163 24969 + 24969 25168 25164 + 25169 25164 25168 + 25164 25169 25170 + 25165 25164 25170 + 25165 25170 25171 + 25171 25166 25165 + 25167 25166 25171 + 25172 25168 24969 + 25168 25172 25173 + 25173 25169 25168 + 25174 25169 25173 + 25170 25169 25174 + 25174 25175 25170 + 25170 25175 25176 + 25176 25171 25170 + 24969 24968 25172 + 25172 24968 24967 + 24967 25177 25172 + 25178 25172 25177 + 25172 25178 25173 + 25173 25178 25179 + 25179 25180 25173 + 25173 25180 25174 + 24977 25177 24967 + 25177 24977 25181 + 25181 25182 25177 + 25182 25178 25177 + 25178 25182 25183 + 25179 25178 25183 + 25184 25179 25183 + 25180 25179 25184 + 25184 25185 25180 + 25185 25174 25180 + 24982 25181 24977 + 25181 24982 25186 + 25187 25181 25186 + 25182 25181 25187 + 25187 25183 25182 + 25183 25187 25188 + 25183 25188 25184 + 25188 25189 25184 + 25190 25184 25189 + 25185 25184 25190 + 25191 25186 24982 + 25186 25191 25192 + 25192 25187 25186 + 25187 25192 25188 + 25188 25192 25193 + 25193 25194 25188 + 25189 25188 25194 + 24982 25195 25191 + 25191 25195 25196 + 25196 25197 25191 + 25193 25191 25197 + 25191 25193 25192 + 24981 25195 24982 + 25196 25195 24981 + 25196 24981 24986 + 25198 25196 24986 + 25196 25198 25199 + 25199 25197 25196 + 25197 25199 25194 + 25194 25193 25197 + 24986 24991 25198 + 25200 25198 24991 + 25199 25198 25200 + 25200 25201 25199 + 25194 25199 25201 + 25201 25202 25194 + 25202 25189 25194 + 25202 25203 25189 + 25189 25203 25190 + 24991 24996 25200 + 25204 25200 24996 + 25200 25204 25205 + 25205 25201 25200 + 25201 25205 25203 + 25203 25202 25201 + 24996 25206 25204 + 25207 25204 25206 + 25204 25207 25208 + 25205 25204 25208 + 25203 25205 25208 + 25190 25203 25208 + 25208 25176 25190 + 25176 25209 25190 + 25190 25209 25185 + 25206 24996 24995 + 24995 25162 25206 + 25206 25162 25167 + 25206 25167 25207 + 25171 25207 25167 + 25207 25171 25176 + 25176 25208 25207 + 25162 24995 24994 + 25174 25185 25209 + 25175 25174 25209 + 25209 25176 25175 + 25210 25153 24998 + 25153 25210 25211 + 25211 25212 25153 + 25153 25212 25147 + 25074 25210 24998 + 25211 25210 25074 + 25074 25079 25211 + 25211 25079 25213 + 25213 25214 25211 + 25212 25211 25214 + 25214 25215 25212 + 25147 25212 25215 + 25215 25216 25147 + 25148 25147 25216 + 25216 25149 25148 + 25078 25213 25079 + 25213 25078 25217 + 25217 25218 25213 + 25213 25218 25219 + 25219 25214 25213 + 25215 25214 25219 + 25219 25220 25215 + 25215 25220 25221 + 25221 25216 25215 + 25149 25216 25221 + 25217 25078 25077 + 25077 25222 25217 + 25223 25217 25222 + 25223 25224 25217 + 25218 25217 25224 + 25224 25225 25218 + 25219 25218 25225 + 25225 25226 25219 + 25220 25219 25226 + 25083 25222 25077 + 25222 25083 25227 + 25227 25223 25222 + 25223 25227 25228 + 25228 25229 25223 + 25224 25223 25229 + 25230 25224 25229 + 25225 25224 25230 + 25231 25227 25083 + 25227 25231 25232 + 25228 25227 25232 + 25228 25232 25233 + 25233 25234 25228 + 25229 25228 25234 + 25234 25235 25229 + 25235 25230 25229 + 25083 25236 25231 + 25237 25231 25236 + 25231 25237 25238 + 25238 25232 25231 + 25232 25238 25239 + 25239 25233 25232 + 25082 25236 25083 + 25088 25236 25082 + 25236 25088 25237 + 25240 25237 25088 + 25237 25240 25241 + 25238 25237 25241 + 25238 25241 25242 + 25242 25239 25238 + 25239 25242 25243 + 25244 25239 25243 + 25233 25239 25244 + 25088 25245 25240 + 25246 25240 25245 + 25240 25246 25247 + 25247 25241 25240 + 25241 25247 25248 + 25248 25242 25241 + 25242 25248 25249 + 25249 25243 25242 + 25087 25245 25088 + 25250 25245 25087 + 25245 25250 25246 + 25251 25246 25250 + 25246 25251 25252 + 25247 25246 25252 + 25247 25252 25253 + 25248 25247 25253 + 25249 25248 25253 + 25087 25093 25250 + 25250 25093 25141 + 25141 25254 25250 + 25250 25254 25251 + 25255 25251 25254 + 25251 25255 25256 + 25256 25252 25251 + 25252 25256 25257 + 25257 25253 25252 + 25258 25254 25141 + 25254 25258 25255 + 25259 25255 25258 + 25256 25255 25259 + 25259 25260 25256 + 25261 25256 25260 + 25261 25257 25256 + 25262 25257 25261 + 25253 25257 25262 + 25141 25140 25258 + 25258 25140 25139 + 25139 25263 25258 + 25258 25263 25259 + 25264 25259 25263 + 25259 25264 25265 + 25265 25260 25259 + 25260 25265 25261 + 25266 25263 25139 + 25263 25266 25264 + 25267 25264 25266 + 25265 25264 25267 + 25267 25268 25265 + 25269 25265 25268 + 25269 25270 25265 + 25265 25270 25261 + 25139 25144 25266 + 25266 25144 25149 + 25149 25271 25266 + 25266 25271 25267 + 25271 25221 25267 + 25221 25272 25267 + 25267 25272 25268 + 25272 25273 25268 + 25268 25273 25269 + 25221 25271 25149 + 25272 25221 25220 + 25220 25274 25272 + 25273 25272 25274 + 25274 25275 25273 + 25276 25273 25275 + 25273 25276 25269 + 25269 25276 25277 + 25277 25278 25269 + 25270 25269 25278 + 25226 25274 25220 + 25274 25226 25279 + 25279 25275 25274 + 25275 25279 25280 + 25280 25276 25275 + 25277 25276 25280 + 25280 25281 25277 + 25282 25277 25281 + 25277 25282 25283 + 25278 25277 25283 + 25279 25226 25225 + 25225 25284 25279 + 25285 25279 25284 + 25279 25285 25280 + 25280 25285 25286 + 25286 25281 25280 + 25281 25286 25287 + 25281 25287 25282 + 25230 25284 25225 + 25284 25230 25288 + 25288 25285 25284 + 25286 25285 25288 + 25288 25289 25286 + 25290 25286 25289 + 25286 25290 25287 + 25287 25290 25291 + 25291 25292 25287 + 25287 25292 25282 + 25230 25293 25288 + 25288 25293 25294 + 25294 25289 25288 + 25289 25294 25291 + 25291 25290 25289 + 25235 25293 25230 + 25293 25235 25295 + 25294 25293 25295 + 25291 25294 25295 + 25292 25291 25295 + 25295 25296 25292 + 25297 25292 25296 + 25292 25297 25282 + 25282 25297 25298 + 25298 25283 25282 + 25299 25283 25298 + 25283 25299 25278 + 25296 25295 25235 + 25235 25234 25296 + 25296 25234 25233 + 25233 25300 25296 + 25297 25296 25300 + 25298 25297 25300 + 25300 25244 25298 + 25298 25244 25243 + 25243 25301 25298 + 25301 25299 25298 + 25244 25300 25233 + 25301 25243 25249 + 25302 25301 25249 + 25301 25302 25303 + 25303 25299 25301 + 25299 25303 25304 + 25304 25305 25299 + 25299 25305 25278 + 25305 25270 25278 + 25261 25270 25305 + 25249 25306 25302 + 25302 25306 25262 + 25303 25302 25262 + 25304 25303 25262 + 25261 25304 25262 + 25305 25304 25261 + 25253 25306 25249 + 25262 25306 25253 + 25023 25307 25062 + 25022 25307 25023 + 25307 25022 25308 + 25308 25062 25307 + 25308 25309 25062 + 25055 25062 25309 + 25309 25056 25055 + 25022 25028 25308 + 25308 25028 25310 + 25310 25311 25308 + 25308 25311 25312 + 25312 25309 25308 + 25056 25309 25312 + 25312 25313 25056 + 25056 25313 25057 + 25310 25028 25314 + 25315 25310 25314 + 25310 25315 25316 + 25311 25310 25316 + 25311 25316 25317 + 25317 25312 25311 + 25313 25312 25317 + 25317 25318 25313 + 25318 25057 25313 + 25028 25027 25314 + 25319 25314 25027 + 25314 25319 25315 + 25319 25320 25315 + 25316 25315 25320 + 25320 25321 25316 + 25322 25316 25321 + 25316 25322 25317 + 25323 25317 25322 + 25318 25317 25323 + 25027 25032 25319 + 25319 25032 25324 + 25324 25325 25319 + 25320 25319 25325 + 25321 25320 25325 + 25325 25326 25321 + 25321 25326 25327 + 25327 25322 25321 + 25327 25328 25322 + 25322 25328 25323 + 25324 25032 25031 + 25031 25030 25324 + 25030 25329 25324 + 25324 25329 25326 + 25326 25325 25324 + 25040 25329 25030 + 25329 25040 25330 + 25326 25329 25330 + 25326 25330 25327 + 25327 25330 25331 + 25328 25327 25331 + 25328 25331 25332 + 25323 25328 25332 + 25332 25333 25323 + 25333 25334 25323 + 25323 25334 25318 + 25331 25330 25040 + 25040 25039 25331 + 25331 25039 25038 + 25038 25332 25331 + 25333 25332 25038 + 25038 25044 25333 + 25335 25333 25044 + 25334 25333 25335 + 25318 25334 25335 + 25335 25057 25318 + 25057 25335 25048 + 25048 25335 25044 + 25336 25337 25338 + 25339 25337 25336 + 25340 25337 25339 + 25337 25340 25341 + 25341 25342 25337 + 25343 25336 25338 + 25344 25336 25343 + 25345 25336 25344 + 25336 25345 25339 + 25338 25346 25343 + 25347 25343 25346 + 25343 25347 25348 + 25348 25349 25343 + 25343 25349 25344 + 25350 25346 25338 + 25350 25351 25346 + 25346 25351 25347 + 25352 25347 25351 + 25348 25347 25352 + 25352 25353 25348 + 25354 25348 25353 + 25349 25348 25354 + 25338 25355 25350 + 25350 25355 25356 + 25356 25357 25350 + 25351 25350 25357 + 25357 25358 25351 + 25351 25358 25352 + 25355 25338 25359 + 25355 25359 25360 + 25360 25361 25355 + 25355 25361 25356 + 25362 25359 25338 + 25360 25359 25362 + 25363 25360 25362 + 25364 25360 25363 + 25361 25360 25364 + 25361 25364 25365 + 25365 25366 25361 + 25361 25366 25356 + 25342 25362 25338 + 25341 25362 25342 + 25362 25341 25363 + 25341 25367 25363 + 25368 25363 25367 + 25363 25368 25364 + 25364 25368 25369 + 25369 25370 25364 + 25370 25365 25364 + 25367 25341 25340 + 25340 25371 25367 + 25372 25367 25371 + 25367 25372 25368 + 25368 25372 25369 + 25372 25373 25369 + 25374 25369 25373 + 25369 25374 25370 + 25340 25375 25371 + 25375 25376 25371 + 25377 25371 25376 + 25371 25377 25372 + 25373 25372 25377 + 25339 25375 25340 + 25375 25339 25378 + 25378 25379 25375 + 25376 25375 25379 + 25379 25380 25376 + 25380 25381 25376 + 25376 25381 25377 + 25382 25378 25339 + 25383 25378 25382 + 25379 25378 25383 + 25380 25379 25383 + 25380 25383 25384 + 25384 25385 25380 + 25381 25380 25385 + 25386 25381 25385 + 25377 25381 25386 + 25339 25345 25382 + 25387 25382 25345 + 25382 25387 25388 + 25382 25388 25383 + 25383 25388 25389 + 25384 25383 25389 + 25345 25390 25387 + 25391 25387 25390 + 25388 25387 25391 + 25391 25389 25388 + 25390 25345 25344 + 25390 25344 25392 + 25392 25393 25390 + 25390 25393 25391 + 25394 25391 25393 + 25389 25391 25394 + 25395 25392 25344 + 25396 25392 25395 + 25392 25396 25397 + 25397 25393 25392 + 25393 25397 25394 + 25344 25349 25395 + 25354 25395 25349 + 25398 25395 25354 + 25395 25398 25396 + 25396 25398 25399 + 25399 25400 25396 + 25397 25396 25400 + 25400 25401 25397 + 25394 25397 25401 + 25354 25402 25398 + 25398 25402 25403 + 25403 25399 25398 + 25399 25403 25404 + 25404 25405 25399 + 25399 25405 25406 + 25406 25400 25399 + 25401 25400 25406 + 25402 25354 25407 + 25407 25408 25402 + 25402 25408 25409 + 25409 25403 25402 + 25404 25403 25409 + 25409 25410 25404 + 25411 25404 25410 + 25405 25404 25411 + 25353 25407 25354 + 25412 25407 25353 + 25407 25412 25413 + 25413 25408 25407 + 25408 25413 25414 + 25414 25409 25408 + 25409 25414 25415 + 25415 25410 25409 + 25353 25416 25412 + 25412 25416 25417 + 25417 25418 25412 + 25413 25412 25418 + 25418 25419 25413 + 25413 25419 25420 + 25420 25414 25413 + 25415 25414 25420 + 25416 25353 25352 + 25416 25352 25421 + 25421 25422 25416 + 25416 25422 25417 + 25423 25417 25422 + 25424 25417 25423 + 25417 25424 25425 + 25425 25418 25417 + 25419 25418 25425 + 25358 25421 25352 + 25426 25421 25358 + 25426 25422 25421 + 25422 25426 25423 + 25423 25426 25427 + 25428 25423 25427 + 25424 25423 25428 + 25428 25429 25424 + 25425 25424 25429 + 25358 25427 25426 + 25427 25358 25357 + 25427 25357 25356 + 25356 25430 25427 + 25427 25430 25428 + 25431 25428 25430 + 25429 25428 25431 + 25431 25432 25429 + 25429 25432 25433 + 25433 25434 25429 + 25429 25434 25425 + 25435 25430 25356 + 25430 25435 25431 + 25431 25435 25436 + 25436 25437 25431 + 25432 25431 25437 + 25437 25438 25432 + 25433 25432 25438 + 25356 25439 25435 + 25440 25435 25439 + 25435 25440 25436 + 25441 25436 25440 + 25442 25436 25441 + 25436 25442 25443 + 25443 25437 25436 + 25438 25437 25443 + 25439 25356 25366 + 25366 25444 25439 + 25445 25439 25444 + 25445 25446 25439 + 25446 25440 25439 + 25446 25447 25440 + 25440 25447 25441 + 25444 25366 25365 + 25365 25448 25444 + 25444 25448 25449 + 25449 25445 25444 + 25445 25449 25450 + 25445 25450 25447 + 25447 25446 25445 + 25448 25365 25370 + 25370 25451 25448 + 25451 25452 25448 + 25452 25449 25448 + 25452 25453 25449 + 25453 25450 25449 + 25450 25453 25454 + 25454 25441 25450 + 25441 25447 25450 + 25451 25370 25455 + 25451 25455 25456 + 25456 25452 25451 + 25452 25456 25457 + 25457 25453 25452 + 25453 25457 25458 + 25458 25454 25453 + 25374 25455 25370 + 25455 25374 25459 + 25459 25456 25455 + 25456 25459 25460 + 25457 25456 25460 + 25458 25457 25460 + 25460 25461 25458 + 25462 25458 25461 + 25458 25462 25463 + 25463 25454 25458 + 25374 25464 25459 + 25464 25465 25459 + 25459 25465 25460 + 25460 25465 25466 + 25466 25461 25460 + 25466 25467 25461 + 25467 25468 25461 + 25461 25468 25462 + 25373 25464 25374 + 25464 25373 25469 + 25465 25464 25469 + 25466 25465 25469 + 25469 25470 25466 + 25467 25466 25470 + 25470 25471 25467 + 25472 25467 25471 + 25468 25467 25472 + 25472 25473 25468 + 25462 25468 25473 + 25373 25474 25469 + 25469 25474 25386 + 25386 25475 25469 + 25469 25475 25476 + 25476 25470 25469 + 25471 25470 25476 + 25377 25474 25373 + 25386 25474 25377 + 25475 25386 25385 + 25385 25477 25475 + 25476 25475 25477 + 25477 25478 25476 + 25479 25476 25478 + 25476 25479 25471 + 25471 25479 25480 + 25480 25481 25471 + 25471 25481 25472 + 25477 25385 25384 + 25384 25482 25477 + 25477 25482 25483 + 25483 25478 25477 + 25484 25478 25483 + 25478 25484 25479 + 25480 25479 25484 + 25482 25384 25485 + 25485 25486 25482 + 25483 25482 25486 + 25486 25487 25483 + 25488 25483 25487 + 25483 25488 25484 + 25389 25485 25384 + 25489 25485 25389 + 25486 25485 25489 + 25486 25489 25490 + 25490 25487 25486 + 25491 25487 25490 + 25487 25491 25488 + 25492 25488 25491 + 25484 25488 25492 + 25492 25493 25484 + 25484 25493 25480 + 25389 25494 25489 + 25489 25494 25495 + 25495 25490 25489 + 25496 25490 25495 + 25490 25496 25491 + 25491 25496 25497 + 25497 25498 25491 + 25491 25498 25492 + 25394 25494 25389 + 25494 25394 25499 + 25499 25500 25494 + 25494 25500 25495 + 25501 25495 25500 + 25502 25495 25501 + 25495 25502 25496 + 25497 25496 25502 + 25401 25499 25394 + 25503 25499 25401 + 25500 25499 25503 + 25503 25504 25500 + 25500 25504 25501 + 25501 25504 25505 + 25505 25506 25501 + 25507 25501 25506 + 25501 25507 25502 + 25401 25508 25503 + 25503 25508 25509 + 25509 25510 25503 + 25504 25503 25510 + 25510 25505 25504 + 25406 25508 25401 + 25508 25406 25511 + 25511 25509 25508 + 25509 25511 25512 + 25512 25513 25509 + 25509 25513 25514 + 25514 25510 25509 + 25505 25510 25514 + 25515 25511 25406 + 25512 25511 25515 + 25515 25516 25512 + 25512 25516 25517 + 25517 25518 25512 + 25513 25512 25518 + 25406 25405 25515 + 25411 25515 25405 + 25515 25411 25519 + 25519 25516 25515 + 25516 25519 25520 + 25520 25517 25516 + 25517 25520 25521 + 25521 25522 25517 + 25517 25522 25523 + 25523 25518 25517 + 25519 25411 25524 + 25524 25525 25519 + 25519 25525 25526 + 25526 25520 25519 + 25521 25520 25526 + 25410 25524 25411 + 25527 25524 25410 + 25524 25527 25528 + 25528 25525 25524 + 25525 25528 25529 + 25529 25526 25525 + 25526 25529 25530 + 25530 25531 25526 + 25526 25531 25521 + 25410 25415 25527 + 25532 25527 25415 + 25528 25527 25532 + 25532 25533 25528 + 25528 25533 25534 + 25534 25529 25528 + 25530 25529 25534 + 25415 25535 25532 + 25536 25532 25535 + 25532 25536 25537 + 25537 25533 25532 + 25533 25537 25538 + 25538 25534 25533 + 25420 25535 25415 + 25539 25535 25420 + 25535 25539 25536 + 25540 25536 25539 + 25537 25536 25540 + 25420 25541 25539 + 25539 25541 25542 + 25542 25543 25539 + 25539 25543 25540 + 25541 25420 25419 + 25419 25544 25541 + 25542 25541 25544 + 25545 25542 25544 + 25546 25542 25545 + 25542 25546 25547 + 25547 25543 25542 + 25543 25547 25548 + 25548 25540 25543 + 25425 25544 25419 + 25544 25425 25434 + 25434 25549 25544 + 25544 25549 25545 + 25550 25545 25549 + 25551 25545 25550 + 25545 25551 25546 + 25552 25546 25551 + 25547 25546 25552 + 25552 25553 25547 + 25548 25547 25553 + 25434 25433 25549 + 25549 25433 25550 + 25554 25550 25433 + 25551 25550 25554 + 25554 25555 25551 + 25551 25555 25552 + 25556 25552 25555 + 25552 25556 25557 + 25557 25553 25552 + 25438 25554 25433 + 25558 25554 25438 + 25555 25554 25558 + 25558 25559 25555 + 25555 25559 25556 + 25560 25556 25559 + 25557 25556 25560 + 25438 25561 25558 + 25558 25561 25562 + 25562 25563 25558 + 25559 25558 25563 + 25563 25564 25559 + 25559 25564 25560 + 25443 25561 25438 + 25561 25443 25565 + 25565 25562 25561 + 25566 25562 25565 + 25562 25566 25567 + 25567 25563 25562 + 25564 25563 25567 + 25567 25568 25564 + 25564 25568 25569 + 25569 25560 25564 + 25565 25443 25442 + 25442 25570 25565 + 25570 25571 25565 + 25566 25565 25571 + 25571 25572 25566 + 25567 25566 25572 + 25572 25573 25567 + 25568 25567 25573 + 25574 25570 25442 + 25570 25574 25575 + 25575 25576 25570 + 25570 25576 25577 + 25577 25571 25570 + 25577 25572 25571 + 25572 25577 25578 + 25578 25573 25572 + 25442 25579 25574 + 25574 25579 25463 + 25463 25580 25574 + 25575 25574 25580 + 25580 25581 25575 + 25582 25575 25581 + 25576 25575 25582 + 25441 25579 25442 + 25579 25441 25454 + 25454 25463 25579 + 25582 25583 25576 + 25583 25582 25584 + 25583 25584 25585 + 25585 25586 25583 + 25583 25586 25577 + 25577 25576 25583 + 25584 25582 25587 + 25587 25588 25584 + 25584 25588 25589 + 25589 25585 25584 + 25590 25585 25589 + 25586 25585 25590 + 25581 25587 25582 + 25587 25581 25591 + 25592 25587 25591 + 25587 25592 25588 + 25592 25593 25588 + 25588 25593 25594 + 25594 25595 25588 + 25588 25595 25589 + 25596 25591 25581 + 25591 25596 25473 + 25473 25597 25591 + 25592 25591 25597 + 25597 25598 25592 + 25598 25599 25592 + 25599 25593 25592 + 25581 25580 25596 + 25596 25580 25463 + 25463 25462 25596 + 25473 25596 25462 + 25597 25473 25472 + 25598 25597 25472 + 25600 25598 25472 + 25598 25600 25599 + 25599 25600 25481 + 25481 25601 25599 + 25593 25599 25601 + 25601 25594 25593 + 25602 25594 25601 + 25594 25602 25603 + 25603 25595 25594 + 25481 25600 25472 + 25601 25481 25480 + 25480 25604 25601 + 25601 25604 25602 + 25604 25605 25602 + 25603 25602 25605 + 25605 25606 25603 + 25607 25603 25606 + 25595 25603 25607 + 25607 25589 25595 + 25604 25480 25493 + 25493 25605 25604 + 25605 25493 25492 + 25492 25606 25605 + 25606 25492 25498 + 25498 25608 25606 + 25606 25608 25607 + 25609 25607 25608 + 25589 25607 25609 + 25609 25610 25589 + 25589 25610 25590 + 25608 25498 25497 + 25497 25611 25608 + 25608 25611 25609 + 25609 25611 25612 + 25612 25613 25609 + 25610 25609 25613 + 25613 25614 25610 + 25590 25610 25614 + 25611 25497 25615 + 25615 25612 25611 + 25612 25615 25616 + 25616 25617 25612 + 25612 25617 25618 + 25618 25613 25612 + 25614 25613 25618 + 25502 25615 25497 + 25616 25615 25502 + 25502 25507 25616 + 25616 25507 25619 + 25619 25620 25616 + 25617 25616 25620 + 25620 25621 25617 + 25618 25617 25621 + 25621 25622 25618 + 25623 25618 25622 + 25618 25623 25614 + 25506 25619 25507 + 25619 25506 25624 + 25624 25625 25619 + 25619 25625 25626 + 25626 25620 25619 + 25621 25620 25626 + 25626 25627 25621 + 25621 25627 25628 + 25628 25622 25621 + 25624 25506 25505 + 25505 25629 25624 + 25624 25629 25630 + 25630 25631 25624 + 25625 25624 25631 + 25631 25632 25625 + 25625 25632 25633 + 25633 25626 25625 + 25627 25626 25633 + 25514 25629 25505 + 25629 25514 25634 + 25634 25630 25629 + 25635 25630 25634 + 25630 25635 25636 + 25636 25631 25630 + 25632 25631 25636 + 25636 25637 25632 + 25632 25637 25638 + 25638 25633 25632 + 25639 25634 25514 + 25640 25634 25639 + 25640 25635 25634 + 25635 25640 25641 + 25641 25642 25635 + 25636 25635 25642 + 25642 25643 25636 + 25637 25636 25643 + 25644 25639 25514 + 25645 25639 25644 + 25639 25645 25646 + 25646 25647 25639 + 25639 25647 25640 + 25640 25647 25648 + 25648 25641 25640 + 25649 25644 25514 + 25650 25644 25649 + 25651 25644 25650 + 25644 25651 25645 + 25652 25645 25651 + 25646 25645 25652 + 25514 25513 25649 + 25513 25653 25649 + 25654 25649 25653 + 25655 25649 25654 + 25649 25655 25650 + 25518 25653 25513 + 25518 25523 25653 + 25653 25523 25654 + 25654 25523 25522 + 25522 25656 25654 + 25656 25657 25654 + 25655 25654 25657 + 25657 25658 25655 + 25650 25655 25658 + 25658 25659 25650 + 25660 25650 25659 + 25650 25660 25651 + 25661 25656 25522 + 25656 25661 25662 + 25662 25663 25656 + 25656 25663 25664 + 25664 25657 25656 + 25658 25657 25664 + 25522 25521 25661 + 25665 25661 25521 + 25662 25661 25665 + 25665 25666 25662 + 25662 25666 25667 + 25667 25668 25662 + 25663 25662 25668 + 25668 25669 25663 + 25664 25663 25669 + 25521 25531 25665 + 25670 25665 25531 + 25665 25670 25671 + 25671 25666 25665 + 25666 25671 25672 + 25672 25667 25666 + 25531 25530 25670 + 25673 25670 25530 + 25671 25670 25673 + 25673 25674 25671 + 25671 25674 25675 + 25675 25672 25671 + 25676 25672 25675 + 25676 25667 25672 + 25530 25677 25673 + 25678 25673 25677 + 25673 25678 25679 + 25679 25674 25673 + 25674 25679 25680 + 25680 25675 25674 + 25681 25675 25680 + 25675 25681 25676 + 25534 25677 25530 + 25682 25677 25534 + 25677 25682 25678 + 25678 25682 25683 + 25683 25684 25678 + 25679 25678 25684 + 25684 25685 25679 + 25679 25685 25686 + 25686 25680 25679 + 25534 25538 25682 + 25682 25538 25687 + 25687 25683 25682 + 25683 25687 25688 + 25688 25689 25683 + 25683 25689 25690 + 25690 25684 25683 + 25684 25690 25691 + 25691 25685 25684 + 25687 25538 25537 + 25692 25687 25537 + 25688 25687 25692 + 25692 25693 25688 + 25694 25688 25693 + 25689 25688 25694 + 25694 25695 25689 + 25689 25695 25696 + 25696 25690 25689 + 25691 25690 25696 + 25697 25692 25537 + 25698 25692 25697 + 25692 25698 25699 + 25699 25693 25692 + 25693 25699 25700 + 25700 25701 25693 + 25693 25701 25694 + 25537 25702 25697 + 25702 25703 25697 + 25704 25697 25703 + 25705 25697 25704 + 25697 25705 25698 + 25540 25702 25537 + 25706 25702 25540 + 25702 25706 25707 + 25707 25703 25702 + 25707 25708 25703 + 25703 25708 25704 + 25540 25548 25706 + 25706 25548 25709 + 25709 25710 25706 + 25706 25710 25711 + 25711 25707 25706 + 25708 25707 25711 + 25711 25712 25708 + 25704 25708 25712 + 25553 25709 25548 + 25713 25709 25553 + 25709 25713 25714 + 25714 25710 25709 + 25710 25714 25715 + 25715 25711 25710 + 25711 25715 25716 + 25716 25712 25711 + 25553 25557 25713 + 25717 25713 25557 + 25714 25713 25717 + 25717 25718 25714 + 25714 25718 25719 + 25719 25715 25714 + 25716 25715 25719 + 25720 25717 25557 + 25721 25717 25720 + 25717 25721 25722 + 25722 25718 25717 + 25718 25722 25723 + 25723 25719 25718 + 25557 25724 25720 + 25725 25720 25724 + 25726 25720 25725 + 25720 25726 25721 + 25727 25721 25726 + 25722 25721 25727 + 25560 25724 25557 + 25724 25560 25569 + 25724 25569 25725 + 25725 25569 25568 + 25568 25728 25725 + 25729 25725 25728 + 25725 25729 25726 + 25726 25729 25614 + 25614 25623 25726 + 25726 25623 25727 + 25573 25728 25568 + 25730 25728 25573 + 25728 25730 25729 + 25729 25730 25590 + 25614 25729 25590 + 25573 25578 25730 + 25730 25578 25586 + 25586 25590 25730 + 25586 25578 25577 + 25622 25727 25623 + 25731 25727 25622 + 25727 25731 25722 + 25722 25731 25732 + 25732 25723 25722 + 25733 25723 25732 + 25719 25723 25733 + 25733 25734 25719 + 25719 25734 25716 + 25628 25731 25622 + 25731 25628 25735 + 25735 25736 25731 + 25731 25736 25732 + 25736 25737 25732 + 25738 25732 25737 + 25739 25732 25738 + 25732 25739 25733 + 25740 25735 25628 + 25741 25735 25740 + 25736 25735 25741 + 25741 25742 25736 + 25736 25742 25743 + 25743 25737 25736 + 25628 25627 25740 + 25633 25740 25627 + 25740 25633 25638 + 25638 25744 25740 + 25740 25744 25741 + 25741 25744 25745 + 25745 25746 25741 + 25742 25741 25746 + 25746 25747 25742 + 25743 25742 25747 + 25744 25638 25748 + 25748 25745 25744 + 25745 25748 25749 + 25749 25750 25745 + 25745 25750 25751 + 25751 25746 25745 + 25751 25752 25746 + 25752 25747 25746 + 25753 25748 25638 + 25749 25748 25753 + 25753 25754 25749 + 25749 25754 25755 + 25755 25756 25749 + 25750 25749 25756 + 25756 25757 25750 + 25751 25750 25757 + 25638 25637 25753 + 25643 25753 25637 + 25753 25643 25758 + 25758 25754 25753 + 25754 25758 25759 + 25759 25755 25754 + 25760 25755 25759 + 25760 25761 25755 + 25755 25761 25762 + 25762 25756 25755 + 25757 25756 25762 + 25758 25643 25642 + 25642 25763 25758 + 25758 25763 25764 + 25764 25759 25758 + 25759 25764 25765 + 25760 25759 25765 + 25766 25760 25765 + 25766 25767 25760 + 25767 25761 25760 + 25762 25761 25767 + 25768 25763 25642 + 25763 25768 25769 + 25769 25764 25763 + 25770 25764 25769 + 25770 25765 25764 + 25771 25765 25770 + 25765 25771 25766 + 25642 25641 25768 + 25768 25641 25648 + 25648 25772 25768 + 25768 25772 25773 + 25773 25769 25768 + 25770 25769 25773 + 25773 25774 25770 + 25770 25774 25775 + 25775 25771 25770 + 25776 25772 25648 + 25772 25776 25777 + 25777 25773 25772 + 25778 25773 25777 + 25778 25774 25773 + 25779 25774 25778 + 25774 25779 25775 + 25780 25775 25779 + 25780 25771 25775 + 25648 25781 25776 + 25776 25781 25782 + 25782 25783 25776 + 25776 25783 25784 + 25784 25777 25776 + 25778 25777 25784 + 25781 25648 25647 + 25647 25646 25781 + 25781 25646 25785 + 25785 25782 25781 + 25786 25782 25785 + 25782 25786 25787 + 25787 25783 25782 + 25783 25787 25788 + 25788 25784 25783 + 25652 25785 25646 + 25785 25652 25789 + 25789 25790 25785 + 25785 25790 25786 + 25791 25786 25790 + 25787 25786 25791 + 25791 25792 25787 + 25787 25792 25793 + 25793 25788 25787 + 25789 25652 25794 + 25794 25795 25789 + 25789 25795 25796 + 25796 25797 25789 + 25797 25798 25789 + 25798 25799 25789 + 25790 25789 25799 + 25651 25794 25652 + 25800 25794 25651 + 25794 25800 25801 + 25801 25795 25794 + 25795 25801 25802 + 25802 25796 25795 + 25651 25660 25800 + 25800 25660 25803 + 25803 25804 25800 + 25801 25800 25804 + 25804 25805 25801 + 25802 25801 25805 + 25805 25806 25802 + 25695 25802 25806 + 25796 25802 25695 + 25659 25803 25660 + 25803 25659 25807 + 25807 25808 25803 + 25803 25808 25809 + 25809 25804 25803 + 25805 25804 25809 + 25809 25810 25805 + 25805 25810 25811 + 25811 25806 25805 + 25807 25659 25658 + 25658 25812 25807 + 25807 25812 25813 + 25813 25814 25807 + 25808 25807 25814 + 25814 25815 25808 + 25808 25815 25816 + 25816 25809 25808 + 25810 25809 25816 + 25664 25812 25658 + 25812 25664 25817 + 25817 25813 25812 + 25818 25813 25817 + 25818 25819 25813 + 25814 25813 25819 + 25820 25814 25819 + 25815 25814 25820 + 25820 25821 25815 + 25815 25821 25816 + 25669 25817 25664 + 25818 25817 25669 + 25669 25822 25818 + 25818 25822 25823 + 25823 25824 25818 + 25819 25818 25824 + 25824 25825 25819 + 25820 25819 25825 + 25825 25826 25820 + 25821 25820 25826 + 25827 25822 25669 + 25822 25827 25828 + 25828 25823 25822 + 25829 25823 25828 + 25829 25830 25823 + 25824 25823 25830 + 25831 25824 25830 + 25831 25825 25824 + 25669 25668 25827 + 25827 25668 25667 + 25667 25832 25827 + 25828 25827 25832 + 25832 25833 25828 + 25833 25834 25828 + 25834 25829 25828 + 25835 25829 25834 + 25830 25829 25835 + 25835 25836 25830 + 25830 25836 25831 + 25676 25832 25667 + 25833 25832 25676 + 25837 25833 25676 + 25838 25833 25837 + 25838 25834 25833 + 25834 25838 25839 + 25839 25835 25834 + 25835 25839 25840 + 25840 25836 25835 + 25831 25836 25840 + 25841 25831 25840 + 25831 25841 25825 + 25842 25837 25676 + 25837 25842 25843 + 25838 25837 25843 + 25839 25838 25843 + 25839 25843 25844 + 25840 25839 25844 + 25844 25845 25840 + 25841 25840 25845 + 25846 25841 25845 + 25825 25841 25846 + 25676 25681 25842 + 25842 25681 25847 + 25848 25842 25847 + 25849 25842 25848 + 25849 25843 25842 + 25844 25843 25849 + 25850 25844 25849 + 25845 25844 25850 + 25847 25681 25680 + 25847 25680 25686 + 25686 25851 25847 + 25847 25851 25848 + 25851 25852 25848 + 25849 25848 25852 + 25852 25853 25849 + 25849 25853 25850 + 25851 25686 25854 + 25855 25851 25854 + 25852 25851 25855 + 25856 25852 25855 + 25857 25852 25856 + 25857 25853 25852 + 25858 25853 25857 + 25853 25858 25850 + 25854 25686 25685 + 25685 25691 25854 + 25859 25854 25691 + 25855 25854 25859 + 25859 25860 25855 + 25855 25860 25861 + 25861 25856 25855 + 25857 25856 25861 + 25861 25862 25857 + 25857 25862 25863 + 25863 25858 25857 + 25691 25864 25859 + 25865 25859 25864 + 25866 25859 25865 + 25866 25860 25859 + 25861 25860 25866 + 25867 25861 25866 + 25868 25861 25867 + 25868 25862 25861 + 25696 25864 25691 + 25811 25864 25696 + 25864 25811 25865 + 25869 25865 25811 + 25865 25869 25870 + 25866 25865 25870 + 25866 25870 25871 + 25871 25867 25866 + 25867 25871 25872 + 25868 25867 25872 + 25696 25806 25811 + 25806 25696 25695 + 25811 25810 25869 + 25816 25869 25810 + 25869 25816 25873 + 25873 25870 25869 + 25870 25873 25874 + 25874 25871 25870 + 25875 25871 25874 + 25875 25872 25871 + 25872 25875 25876 + 25876 25877 25872 + 25868 25872 25877 + 25862 25868 25877 + 25877 25863 25862 + 25858 25863 25877 + 25821 25873 25816 + 25873 25821 25878 + 25878 25874 25873 + 25874 25878 25879 + 25875 25874 25879 + 25875 25879 25880 + 25880 25876 25875 + 25880 25850 25876 + 25850 25858 25876 + 25877 25876 25858 + 25826 25878 25821 + 25846 25878 25826 + 25846 25879 25878 + 25879 25846 25845 + 25845 25880 25879 + 25850 25880 25845 + 25846 25826 25825 + 25695 25694 25796 + 25796 25694 25701 + 25701 25797 25796 + 25881 25797 25701 + 25797 25881 25882 + 25882 25798 25797 + 25701 25700 25881 + 25881 25700 25883 + 25883 25884 25881 + 25882 25881 25884 + 25884 25885 25882 + 25886 25882 25885 + 25798 25882 25886 + 25887 25883 25700 + 25888 25883 25887 + 25884 25883 25888 + 25888 25889 25884 + 25884 25889 25890 + 25890 25885 25884 + 25891 25885 25890 + 25885 25891 25886 + 25700 25699 25887 + 25892 25887 25699 + 25887 25892 25893 + 25893 25894 25887 + 25887 25894 25888 + 25895 25888 25894 + 25889 25888 25895 + 25895 25896 25889 + 25890 25889 25896 + 25699 25698 25892 + 25897 25892 25698 + 25893 25892 25897 + 25897 25898 25893 + 25893 25898 25899 + 25899 25900 25893 + 25894 25893 25900 + 25900 25901 25894 + 25894 25901 25895 + 25698 25705 25897 + 25902 25897 25705 + 25897 25902 25903 + 25903 25898 25897 + 25899 25898 25903 + 25904 25899 25903 + 25905 25899 25904 + 25905 25906 25899 + 25900 25899 25906 + 25705 25704 25902 + 25907 25902 25704 + 25903 25902 25907 + 25907 25908 25903 + 25903 25908 25909 + 25909 25904 25903 + 25905 25904 25909 + 25712 25907 25704 + 25910 25907 25712 + 25907 25910 25911 + 25911 25908 25907 + 25908 25911 25912 + 25912 25909 25908 + 25909 25912 25913 + 25913 25914 25909 + 25909 25914 25905 + 25712 25716 25910 + 25915 25910 25716 + 25911 25910 25915 + 25915 25916 25911 + 25911 25916 25917 + 25917 25912 25911 + 25913 25912 25917 + 25716 25734 25915 + 25918 25915 25734 + 25915 25918 25919 + 25919 25916 25915 + 25916 25919 25920 + 25920 25917 25916 + 25921 25917 25920 + 25921 25922 25917 + 25917 25922 25913 + 25734 25733 25918 + 25918 25733 25739 + 25739 25923 25918 + 25919 25918 25923 + 25923 25924 25919 + 25919 25924 25925 + 25925 25920 25919 + 25921 25920 25925 + 25926 25923 25739 + 25923 25926 25927 + 25927 25924 25923 + 25924 25927 25928 + 25928 25925 25924 + 25929 25925 25928 + 25929 25930 25925 + 25925 25930 25921 + 25739 25931 25926 + 25891 25926 25931 + 25927 25926 25891 + 25891 25932 25927 + 25927 25932 25933 + 25933 25928 25927 + 25929 25928 25933 + 25738 25931 25739 + 25931 25738 25934 + 25934 25886 25931 + 25931 25886 25891 + 25934 25738 25935 + 25935 25936 25934 + 25798 25934 25936 + 25886 25934 25798 + 25737 25935 25738 + 25937 25935 25737 + 25935 25937 25938 + 25938 25936 25935 + 25936 25938 25939 + 25939 25799 25936 + 25936 25799 25798 + 25737 25743 25937 + 25937 25743 25940 + 25940 25941 25937 + 25938 25937 25941 + 25941 25942 25938 + 25939 25938 25942 + 25942 25791 25939 + 25790 25939 25791 + 25799 25939 25790 + 25747 25940 25743 + 25943 25940 25747 + 25941 25940 25943 + 25943 25944 25941 + 25941 25944 25945 + 25945 25942 25941 + 25791 25942 25945 + 25945 25792 25791 + 25792 25945 25946 + 25946 25793 25792 + 25747 25752 25943 + 25947 25943 25752 + 25944 25943 25947 + 25947 25948 25944 + 25945 25944 25948 + 25948 25946 25945 + 25946 25948 25949 + 25950 25946 25949 + 25950 25793 25946 + 25950 25951 25793 + 25788 25793 25951 + 25752 25952 25947 + 25952 25953 25947 + 25953 25954 25947 + 25954 25948 25947 + 25954 25949 25948 + 25949 25954 25955 + 25955 25956 25949 + 25950 25949 25956 + 25952 25752 25751 + 25957 25952 25751 + 25958 25952 25957 + 25958 25953 25952 + 25953 25958 25959 + 25959 25960 25953 + 25954 25953 25960 + 25960 25955 25954 + 25757 25957 25751 + 25958 25957 25757 + 25757 25961 25958 + 25958 25961 25962 + 25962 25959 25958 + 25963 25959 25962 + 25963 25960 25959 + 25963 25964 25960 + 25955 25960 25964 + 25965 25955 25964 + 25965 25956 25955 + 25762 25961 25757 + 25961 25762 25966 + 25966 25962 25961 + 25967 25962 25966 + 25967 25968 25962 + 25962 25968 25963 + 25963 25968 25969 + 25964 25963 25969 + 25767 25966 25762 + 25966 25767 25970 + 25967 25966 25970 + 25970 25971 25967 + 25967 25971 25972 + 25968 25967 25972 + 25968 25972 25969 + 25973 25970 25767 + 25970 25973 25974 + 25974 25971 25970 + 25972 25971 25974 + 25974 25975 25972 + 25972 25975 25976 + 25976 25969 25972 + 25973 25767 25766 + 25977 25973 25766 + 25974 25973 25977 + 25975 25974 25977 + 25977 25780 25975 + 25975 25780 25978 + 25978 25976 25975 + 25976 25978 25979 + 25980 25976 25979 + 25969 25976 25980 + 25771 25977 25766 + 25780 25977 25771 + 25779 25978 25780 + 25979 25978 25779 + 25979 25779 25981 + 25979 25981 25982 + 25982 25983 25979 + 25979 25983 25980 + 25983 25984 25980 + 25985 25980 25984 + 25980 25985 25969 + 25969 25985 25964 + 25981 25779 25778 + 25982 25981 25778 + 25778 25986 25982 + 25982 25986 25987 + 25988 25982 25987 + 25989 25982 25988 + 25989 25983 25982 + 25984 25983 25989 + 25784 25986 25778 + 25987 25986 25784 + 25987 25784 25788 + 25987 25788 25951 + 25987 25951 25990 + 25990 25988 25987 + 25988 25990 25991 + 25989 25988 25991 + 25989 25991 25992 + 25992 25984 25989 + 25984 25992 25993 + 25993 25994 25984 + 25984 25994 25985 + 25994 25964 25985 + 25994 25965 25964 + 25995 25990 25951 + 25996 25990 25995 + 25996 25991 25990 + 25991 25996 25993 + 25993 25992 25991 + 25951 25950 25995 + 25956 25995 25950 + 25995 25956 25997 + 25996 25995 25997 + 25996 25997 25993 + 25994 25993 25997 + 25997 25965 25994 + 25965 25997 25956 + 25890 25932 25891 + 25932 25890 25998 + 25998 25933 25932 + 25999 25933 25998 + 25999 26000 25933 + 25933 26000 25929 + 25896 25998 25890 + 25999 25998 25896 + 25896 26001 25999 + 25999 26001 26002 + 26002 26003 25999 + 26003 26004 25999 + 26004 26000 25999 + 25929 26000 26004 + 26005 26001 25896 + 26001 26005 26006 + 26006 26002 26001 + 26007 26002 26006 + 26007 26008 26002 + 26002 26008 26009 + 26009 26003 26002 + 26009 26004 26003 + 26005 25896 25895 + 26010 26005 25895 + 26005 26010 26011 + 26011 26006 26005 + 26006 26011 26012 + 26007 26006 26012 + 26007 26012 26013 + 26008 26007 26013 + 26013 26014 26008 + 26009 26008 26014 + 25901 26010 25895 + 26015 26010 25901 + 26010 26015 26016 + 26016 26011 26010 + 26017 26011 26016 + 26017 26012 26011 + 26012 26017 26018 + 26018 26013 26012 + 26013 26018 26019 + 26019 26014 26013 + 26014 26019 26009 + 26015 25901 25900 + 26015 25900 25906 + 26015 25906 26020 + 26020 26016 26015 + 26016 26020 26021 + 26017 26016 26021 + 26018 26017 26021 + 26018 26021 26022 + 26022 26023 26018 + 26019 26018 26023 + 26024 26020 25906 + 26025 26020 26024 + 26025 26021 26020 + 26022 26021 26025 + 26026 26022 26025 + 26022 26026 26027 + 26027 26028 26022 + 26022 26028 26023 + 25906 25905 26024 + 26029 26024 25905 + 26025 26024 26029 + 26029 26030 26025 + 26025 26030 26026 + 26026 26030 26031 + 26027 26026 26031 + 26031 26032 26027 + 26028 26027 26032 + 25905 25914 26029 + 26029 25914 25913 + 26033 26029 25913 + 26031 26029 26033 + 26031 26030 26029 + 26033 25913 25922 + 25922 26034 26033 + 26034 26032 26033 + 26032 26031 26033 + 26034 25922 25921 + 26035 26034 25921 + 26036 26034 26035 + 26036 26032 26034 + 26032 26036 26028 + 26037 26028 26036 + 26028 26037 26023 + 26023 26037 26038 + 26023 26038 26019 + 26039 26035 25921 + 26036 26035 26039 + 26039 26040 26036 + 26036 26040 26037 + 26040 26041 26037 + 26041 26038 26037 + 26038 26041 26042 + 26042 26019 26038 + 26019 26042 26009 + 26009 26042 26004 + 25921 25930 26039 + 26039 25930 25929 + 26043 26039 25929 + 26041 26039 26043 + 26041 26040 26039 + 26004 26043 25929 + 26041 26043 26004 + 26004 26042 26041 + 26044 26045 26046 + 26047 26045 26044 + 26048 26045 26047 + 26045 26048 26049 + 26049 26050 26045 + 26046 26051 26044 + 26052 26044 26051 + 26044 26052 26053 + 26053 26054 26044 + 26044 26054 26047 + 26055 26051 26046 + 26056 26051 26055 + 26051 26056 26052 + 26057 26052 26056 + 26053 26052 26057 + 26057 26058 26053 + 26059 26053 26058 + 26054 26053 26059 + 26046 26060 26055 + 26061 26055 26060 + 26062 26055 26061 + 26055 26062 26056 + 26056 26062 26063 + 26063 26064 26056 + 26056 26064 26057 + 26060 26046 26065 + 26060 26065 26066 + 26066 26067 26060 + 26060 26067 26068 + 26068 26061 26060 + 26069 26065 26046 + 26065 26069 26070 + 26070 26066 26065 + 26071 26066 26070 + 26066 26071 26072 + 26072 26067 26066 + 26067 26072 26073 + 26073 26068 26067 + 26050 26069 26046 + 26050 26049 26069 + 26069 26049 26070 + 26049 26074 26070 + 26075 26070 26074 + 26070 26075 26071 + 26076 26071 26075 + 26072 26071 26076 + 26076 26077 26072 + 26072 26077 26078 + 26073 26072 26078 + 26074 26049 26048 + 26048 26079 26074 + 26080 26074 26079 + 26074 26080 26075 + 26075 26080 26081 + 26081 26082 26075 + 26075 26082 26083 + 26083 26076 26075 + 26079 26048 26084 + 26085 26079 26084 + 26085 26086 26079 + 26079 26086 26080 + 26080 26086 26087 + 26087 26081 26080 + 26088 26081 26087 + 26081 26088 26082 + 26084 26048 26047 + 26084 26047 26089 + 26089 26090 26084 + 26084 26090 26085 + 26090 26091 26085 + 26086 26085 26091 + 26091 26092 26086 + 26086 26092 26087 + 26093 26089 26047 + 26089 26093 26094 + 26095 26089 26094 + 26089 26095 26090 + 26090 26095 26096 + 26096 26091 26090 + 26092 26091 26096 + 26047 26054 26093 + 26059 26093 26054 + 26093 26059 26097 + 26097 26094 26093 + 26094 26097 26098 + 26098 26099 26094 + 26094 26099 26100 + 26096 26094 26100 + 26096 26095 26094 + 26101 26097 26059 + 26097 26101 26102 + 26098 26097 26102 + 26102 26103 26098 + 26104 26098 26103 + 26099 26098 26104 + 26105 26101 26059 + 26101 26105 26106 + 26101 26106 26107 + 26107 26102 26101 + 26108 26102 26107 + 26102 26108 26109 + 26109 26103 26102 + 26058 26105 26059 + 26058 26110 26105 + 26110 26106 26105 + 26107 26106 26110 + 26107 26110 26111 + 26108 26107 26111 + 26111 26112 26108 + 26108 26112 26113 + 26113 26109 26108 + 26114 26109 26113 + 26103 26109 26114 + 26115 26110 26058 + 26110 26115 26116 + 26116 26111 26110 + 26112 26111 26116 + 26117 26112 26116 + 26112 26117 26118 + 26118 26113 26112 + 26119 26113 26118 + 26113 26119 26114 + 26058 26057 26115 + 26115 26057 26064 + 26064 26120 26115 + 26116 26115 26120 + 26120 26121 26116 + 26117 26116 26121 + 26121 26122 26117 + 26117 26122 26123 + 26118 26117 26123 + 26124 26120 26064 + 26120 26124 26125 + 26125 26121 26120 + 26122 26121 26125 + 26122 26125 26126 + 26126 26123 26122 + 26064 26063 26124 + 26124 26063 26127 + 26127 26128 26124 + 26124 26128 26129 + 26125 26124 26129 + 26129 26126 26125 + 26130 26126 26129 + 26130 26123 26126 + 26127 26063 26062 + 26062 26131 26127 + 26131 26132 26127 + 26133 26127 26132 + 26127 26133 26128 + 26128 26133 26134 + 26134 26129 26128 + 26061 26131 26062 + 26135 26131 26061 + 26131 26135 26136 + 26136 26132 26131 + 26132 26136 26137 + 26132 26137 26133 + 26134 26133 26137 + 26137 26138 26134 + 26139 26134 26138 + 26129 26134 26139 + 26061 26140 26135 + 26135 26140 26141 + 26141 26142 26135 + 26135 26142 26143 + 26143 26136 26135 + 26137 26136 26143 + 26143 26138 26137 + 26144 26138 26143 + 26138 26144 26139 + 26140 26061 26068 + 26068 26145 26140 + 26140 26145 26146 + 26146 26141 26140 + 26147 26141 26146 + 26141 26147 26148 + 26148 26142 26141 + 26142 26148 26149 + 26149 26143 26142 + 26143 26149 26144 + 26145 26068 26073 + 26073 26150 26145 + 26145 26150 26151 + 26151 26152 26145 + 26145 26152 26146 + 26153 26146 26152 + 26146 26153 26154 + 26146 26154 26147 + 26150 26073 26155 + 26155 26156 26150 + 26151 26150 26156 + 26156 26157 26151 + 26158 26151 26157 + 26158 26152 26151 + 26152 26158 26153 + 26078 26155 26073 + 26159 26155 26078 + 26155 26159 26156 + 26156 26159 26160 + 26160 26157 26156 + 26161 26157 26160 + 26157 26161 26158 + 26158 26161 26162 + 26153 26158 26162 + 26162 26163 26153 + 26154 26153 26163 + 26078 26164 26159 + 26160 26159 26164 + 26165 26160 26164 + 26166 26160 26165 + 26160 26166 26161 + 26161 26166 26167 + 26167 26162 26161 + 26168 26164 26078 + 26164 26168 26169 + 26169 26170 26164 + 26164 26170 26165 + 26168 26078 26077 + 26077 26171 26168 + 26168 26171 26172 + 26172 26173 26168 + 26173 26169 26168 + 26174 26169 26173 + 26169 26174 26170 + 26170 26174 26175 + 26175 26165 26170 + 26076 26171 26077 + 26171 26076 26083 + 26083 26172 26171 + 26176 26172 26083 + 26172 26176 26177 + 26177 26173 26172 + 26173 26177 26178 + 26178 26179 26173 + 26173 26179 26174 + 26175 26174 26179 + 26176 26083 26180 + 26180 26181 26176 + 26176 26181 26182 + 26177 26176 26182 + 26182 26183 26177 + 26183 26184 26177 + 26178 26177 26184 + 26082 26180 26083 + 26185 26180 26082 + 26185 26181 26180 + 26181 26185 26186 + 26186 26182 26181 + 26182 26186 26187 + 26183 26182 26187 + 26082 26088 26185 + 26185 26088 26188 + 26186 26185 26188 + 26187 26186 26188 + 26188 26189 26187 + 26187 26189 26190 + 26190 26183 26187 + 26183 26190 26191 + 26183 26191 26192 + 26192 26184 26183 + 26087 26188 26088 + 26188 26087 26193 + 26188 26193 26189 + 26194 26189 26193 + 26189 26194 26190 + 26195 26190 26194 + 26190 26195 26191 + 26191 26195 26196 + 26192 26191 26196 + 26193 26087 26092 + 26092 26197 26193 + 26193 26197 26198 + 26198 26199 26193 + 26199 26194 26193 + 26194 26199 26200 + 26200 26201 26194 + 26194 26201 26195 + 26092 26096 26197 + 26197 26096 26100 + 26100 26198 26197 + 26198 26100 26202 + 26202 26203 26198 + 26198 26203 26200 + 26200 26199 26198 + 26202 26100 26099 + 26099 26204 26202 + 26202 26204 26205 + 26205 26206 26202 + 26203 26202 26206 + 26206 26207 26203 + 26200 26203 26207 + 26207 26208 26200 + 26201 26200 26208 + 26104 26204 26099 + 26204 26104 26209 + 26209 26205 26204 + 26205 26209 26210 + 26210 26211 26205 + 26205 26211 26212 + 26212 26206 26205 + 26207 26206 26212 + 26213 26209 26104 + 26210 26209 26213 + 26213 26214 26210 + 26210 26214 26215 + 26215 26216 26210 + 26211 26210 26216 + 26216 26217 26211 + 26212 26211 26217 + 26104 26218 26213 + 26219 26213 26218 + 26213 26219 26220 + 26220 26214 26213 + 26214 26220 26221 + 26221 26215 26214 + 26103 26218 26104 + 26114 26218 26103 + 26218 26114 26219 + 26119 26219 26114 + 26220 26219 26119 + 26119 26222 26220 + 26221 26220 26222 + 26222 26223 26221 + 26224 26221 26223 + 26215 26221 26224 + 26224 26225 26215 + 26215 26225 26226 + 26226 26216 26215 + 26217 26216 26226 + 26118 26222 26119 + 26222 26118 26227 + 26227 26223 26222 + 26223 26227 26228 + 26228 26229 26223 + 26223 26229 26224 + 26224 26229 26230 + 26230 26231 26224 + 26225 26224 26231 + 26123 26227 26118 + 26228 26227 26123 + 26123 26130 26228 + 26228 26130 26232 + 26233 26228 26232 + 26229 26228 26233 + 26233 26230 26229 + 26230 26233 26234 + 26234 26235 26230 + 26230 26235 26236 + 26236 26231 26230 + 26129 26232 26130 + 26139 26232 26129 + 26232 26139 26237 + 26237 26238 26232 + 26232 26238 26233 + 26234 26233 26238 + 26238 26239 26234 + 26234 26239 26240 + 26240 26241 26234 + 26235 26234 26241 + 26242 26237 26139 + 26243 26237 26242 + 26238 26237 26243 + 26243 26239 26238 + 26239 26243 26244 + 26244 26240 26239 + 26139 26144 26242 + 26245 26242 26144 + 26242 26245 26246 + 26242 26246 26243 + 26243 26246 26247 + 26247 26244 26243 + 26248 26244 26247 + 26240 26244 26248 + 26144 26149 26245 + 26249 26245 26149 + 26246 26245 26249 + 26249 26250 26246 + 26246 26250 26247 + 26251 26247 26250 + 26247 26251 26252 + 26252 26253 26247 + 26247 26253 26248 + 26149 26148 26249 + 26254 26249 26148 + 26249 26254 26255 + 26255 26250 26249 + 26250 26255 26251 + 26251 26255 26256 + 26256 26257 26251 + 26252 26251 26257 + 26148 26147 26254 + 26258 26254 26147 + 26255 26254 26258 + 26258 26256 26255 + 26259 26256 26258 + 26256 26259 26260 + 26260 26257 26256 + 26257 26260 26261 + 26261 26262 26257 + 26257 26262 26252 + 26147 26154 26258 + 26163 26258 26154 + 26258 26163 26259 + 26259 26163 26162 + 26162 26263 26259 + 26259 26263 26264 + 26264 26260 26259 + 26261 26260 26264 + 26264 26265 26261 + 26266 26261 26265 + 26262 26261 26266 + 26266 26267 26262 + 26252 26262 26267 + 26268 26263 26162 + 26263 26268 26269 + 26269 26264 26263 + 26264 26269 26270 + 26270 26265 26264 + 26265 26270 26271 + 26271 26272 26265 + 26265 26272 26266 + 26162 26167 26268 + 26268 26167 26273 + 26273 26274 26268 + 26268 26274 26275 + 26275 26269 26268 + 26270 26269 26275 + 26275 26276 26270 + 26270 26276 26277 + 26277 26271 26270 + 26273 26167 26166 + 26166 26278 26273 + 26279 26273 26278 + 26273 26279 26280 + 26280 26274 26273 + 26274 26280 26281 + 26281 26275 26274 + 26275 26281 26282 + 26282 26276 26275 + 26165 26278 26166 + 26283 26278 26165 + 26278 26283 26279 + 26284 26279 26283 + 26280 26279 26284 + 26284 26285 26280 + 26281 26280 26285 + 26285 26286 26281 + 26282 26281 26286 + 26165 26175 26283 + 26283 26175 26287 + 26287 26288 26283 + 26283 26288 26284 + 26289 26284 26288 + 26284 26289 26290 + 26290 26285 26284 + 26285 26290 26291 + 26291 26286 26285 + 26179 26287 26175 + 26292 26287 26179 + 26288 26287 26292 + 26292 26293 26288 + 26288 26293 26289 + 26294 26289 26293 + 26290 26289 26294 + 26294 26295 26290 + 26290 26295 26296 + 26296 26291 26290 + 26179 26178 26292 + 26297 26292 26178 + 26293 26292 26297 + 26297 26298 26293 + 26293 26298 26294 + 26299 26294 26298 + 26294 26299 26300 + 26300 26295 26294 + 26295 26300 26301 + 26301 26296 26295 + 26178 26302 26297 + 26303 26297 26302 + 26298 26297 26303 + 26303 26304 26298 + 26298 26304 26299 + 26305 26299 26304 + 26300 26299 26305 + 26184 26302 26178 + 26302 26184 26192 + 26192 26306 26302 + 26302 26306 26303 + 26303 26306 26307 + 26307 26308 26303 + 26304 26303 26308 + 26308 26309 26304 + 26304 26309 26305 + 26306 26192 26310 + 26310 26307 26306 + 26311 26307 26310 + 26307 26311 26312 + 26312 26308 26307 + 26308 26312 26313 + 26313 26309 26308 + 26309 26313 26314 + 26314 26305 26309 + 26196 26310 26192 + 26196 26315 26310 + 26315 26311 26310 + 26311 26315 26316 + 26316 26312 26311 + 26313 26312 26316 + 26316 26317 26313 + 26314 26313 26317 + 26315 26196 26318 + 26318 26208 26315 + 26315 26208 26207 + 26207 26319 26315 + 26315 26319 26316 + 26320 26316 26319 + 26317 26316 26320 + 26195 26318 26196 + 26318 26195 26201 + 26208 26318 26201 + 26212 26319 26207 + 26319 26212 26320 + 26217 26320 26212 + 26317 26320 26217 + 26217 26321 26317 + 26317 26321 26314 + 26321 26322 26314 + 26323 26314 26322 + 26305 26314 26323 + 26323 26324 26305 + 26305 26324 26300 + 26226 26321 26217 + 26321 26226 26325 + 26325 26322 26321 + 26322 26325 26326 + 26326 26327 26322 + 26322 26327 26323 + 26323 26327 26328 + 26328 26329 26323 + 26324 26323 26329 + 26330 26325 26226 + 26326 26325 26330 + 26330 26331 26326 + 26326 26331 26332 + 26332 26333 26326 + 26327 26326 26333 + 26333 26328 26327 + 26226 26225 26330 + 26231 26330 26225 + 26330 26231 26236 + 26236 26331 26330 + 26331 26236 26334 + 26334 26332 26331 + 26332 26334 26335 + 26335 26336 26332 + 26332 26336 26337 + 26337 26333 26332 + 26328 26333 26337 + 26338 26334 26236 + 26335 26334 26338 + 26338 26339 26335 + 26335 26339 26340 + 26340 26341 26335 + 26336 26335 26341 + 26236 26235 26338 + 26241 26338 26235 + 26338 26241 26342 + 26342 26339 26338 + 26339 26342 26343 + 26343 26340 26339 + 26340 26343 26344 + 26344 26345 26340 + 26340 26345 26346 + 26346 26341 26340 + 26342 26241 26240 + 26240 26347 26342 + 26342 26347 26348 + 26348 26343 26342 + 26344 26343 26348 + 26348 26349 26344 + 26344 26349 26350 + 26350 26351 26344 + 26345 26344 26351 + 26248 26347 26240 + 26347 26248 26352 + 26352 26353 26347 + 26347 26353 26348 + 26353 26354 26348 + 26354 26355 26348 + 26355 26356 26348 + 26349 26348 26356 + 26357 26352 26248 + 26358 26352 26357 + 26353 26352 26358 + 26358 26359 26353 + 26353 26359 26360 + 26360 26354 26353 + 26354 26360 26361 + 26361 26355 26354 + 26248 26253 26357 + 26362 26357 26253 + 26357 26362 26363 + 26363 26364 26357 + 26357 26364 26358 + 26358 26364 26365 + 26365 26366 26358 + 26359 26358 26366 + 26253 26252 26362 + 26267 26362 26252 + 26363 26362 26267 + 26267 26367 26363 + 26363 26367 26368 + 26368 26369 26363 + 26364 26363 26369 + 26369 26365 26364 + 26266 26367 26267 + 26367 26266 26370 + 26370 26371 26367 + 26367 26371 26368 + 26372 26370 26266 + 26373 26370 26372 + 26371 26370 26373 + 26371 26373 26374 + 26374 26368 26371 + 26375 26372 26266 + 26376 26372 26375 + 26377 26372 26376 + 26372 26377 26373 + 26373 26377 26378 + 26378 26374 26373 + 26379 26374 26378 + 26368 26374 26379 + 26272 26375 26266 + 26380 26375 26272 + 26375 26380 26381 + 26381 26382 26375 + 26375 26382 26376 + 26272 26383 26380 + 26384 26380 26383 + 26381 26380 26384 + 26384 26385 26381 + 26386 26381 26385 + 26382 26381 26386 + 26386 26387 26382 + 26376 26382 26387 + 26388 26383 26272 + 26383 26388 26389 + 26389 26390 26383 + 26383 26390 26384 + 26391 26384 26390 + 26385 26384 26391 + 26272 26271 26388 + 26388 26271 26277 + 26277 26392 26388 + 26388 26392 26393 + 26393 26389 26388 + 26394 26389 26393 + 26389 26394 26395 + 26390 26389 26395 + 26390 26395 26391 + 26396 26392 26277 + 26392 26396 26397 + 26397 26393 26392 + 26393 26397 26398 + 26398 26399 26393 + 26393 26399 26394 + 26277 26400 26396 + 26396 26400 26401 + 26401 26402 26396 + 26396 26402 26403 + 26403 26397 26396 + 26398 26397 26403 + 26400 26277 26276 + 26276 26282 26400 + 26401 26400 26282 + 26282 26404 26401 + 26405 26401 26404 + 26401 26405 26406 + 26406 26402 26401 + 26402 26406 26407 + 26407 26403 26402 + 26286 26404 26282 + 26408 26404 26286 + 26404 26408 26405 + 26409 26405 26408 + 26406 26405 26409 + 26409 26410 26406 + 26406 26410 26411 + 26411 26407 26406 + 26412 26407 26411 + 26403 26407 26412 + 26286 26291 26408 + 26408 26291 26296 + 26296 26413 26408 + 26408 26413 26409 + 26414 26409 26413 + 26414 26410 26409 + 26410 26414 26415 + 26415 26416 26410 + 26410 26416 26411 + 26417 26413 26296 + 26413 26417 26414 + 26414 26417 26418 + 26418 26419 26414 + 26419 26420 26414 + 26420 26421 26414 + 26421 26415 26414 + 26296 26301 26417 + 26417 26301 26422 + 26422 26418 26417 + 26423 26418 26422 + 26418 26423 26424 + 26424 26419 26418 + 26422 26301 26300 + 26300 26324 26422 + 26329 26422 26324 + 26422 26329 26423 + 26423 26329 26328 + 26328 26425 26423 + 26423 26425 26426 + 26426 26424 26423 + 26427 26424 26426 + 26419 26424 26427 + 26427 26428 26419 + 26419 26428 26429 + 26429 26420 26419 + 26337 26425 26328 + 26425 26337 26430 + 26430 26426 26425 + 26426 26430 26431 + 26431 26432 26426 + 26426 26432 26427 + 26427 26432 26433 + 26433 26434 26427 + 26428 26427 26434 + 26430 26337 26336 + 26336 26435 26430 + 26431 26430 26435 + 26435 26436 26431 + 26431 26436 26437 + 26437 26438 26431 + 26432 26431 26438 + 26438 26433 26432 + 26341 26435 26336 + 26435 26341 26346 + 26346 26436 26435 + 26436 26346 26439 + 26439 26437 26436 + 26437 26439 26440 + 26440 26441 26437 + 26437 26441 26442 + 26442 26438 26437 + 26433 26438 26442 + 26443 26439 26346 + 26440 26439 26443 + 26443 26444 26440 + 26440 26444 26445 + 26445 26446 26440 + 26441 26440 26446 + 26446 26447 26441 + 26442 26441 26447 + 26346 26345 26443 + 26351 26443 26345 + 26443 26351 26448 + 26448 26444 26443 + 26444 26448 26449 + 26449 26445 26444 + 26445 26449 26450 + 26450 26451 26445 + 26446 26445 26451 + 26452 26446 26451 + 26447 26446 26452 + 26448 26351 26350 + 26350 26453 26448 + 26449 26448 26453 + 26453 26454 26449 + 26450 26449 26454 + 26454 26455 26450 + 26456 26450 26455 + 26450 26456 26457 + 26451 26450 26457 + 26457 26452 26451 + 26458 26453 26350 + 26453 26458 26459 + 26459 26454 26453 + 26454 26459 26460 + 26460 26455 26454 + 26455 26460 26461 + 26455 26461 26456 + 26462 26456 26461 + 26457 26456 26462 + 26350 26463 26458 + 26458 26463 26464 + 26464 26465 26458 + 26466 26458 26465 + 26466 26459 26458 + 26460 26459 26466 + 26463 26350 26349 + 26349 26467 26463 + 26464 26463 26467 + 26467 26468 26464 + 26469 26464 26468 + 26464 26469 26470 + 26470 26465 26464 + 26465 26470 26471 + 26471 26466 26465 + 26356 26467 26349 + 26467 26356 26472 + 26472 26468 26467 + 26468 26472 26473 + 26473 26474 26468 + 26468 26474 26469 + 26475 26469 26474 + 26470 26469 26475 + 26472 26356 26476 + 26476 26477 26472 + 26477 26473 26472 + 26473 26477 26478 + 26479 26473 26478 + 26479 26480 26473 + 26474 26473 26480 + 26356 26355 26476 + 26481 26476 26355 + 26476 26481 26482 + 26482 26477 26476 + 26477 26482 26483 + 26483 26478 26477 + 26355 26361 26481 + 26481 26361 26484 + 26484 26485 26481 + 26482 26481 26485 + 26485 26486 26482 + 26483 26482 26486 + 26486 26487 26483 + 26488 26483 26487 + 26478 26483 26488 + 26489 26484 26361 + 26484 26489 26490 + 26490 26491 26484 + 26484 26491 26492 + 26492 26485 26484 + 26486 26485 26492 + 26361 26360 26489 + 26489 26360 26359 + 26359 26493 26489 + 26490 26489 26493 + 26493 26494 26490 + 26495 26490 26494 + 26495 26496 26490 + 26491 26490 26496 + 26496 26497 26491 + 26497 26492 26491 + 26366 26493 26359 + 26493 26366 26498 + 26498 26494 26493 + 26494 26498 26495 + 26498 26499 26495 + 26495 26499 26500 + 26500 26501 26495 + 26496 26495 26501 + 26502 26496 26501 + 26497 26496 26502 + 26498 26366 26365 + 26365 26503 26498 + 26498 26503 26504 + 26504 26499 26498 + 26500 26499 26504 + 26504 26505 26500 + 26506 26500 26505 + 26501 26500 26506 + 26506 26507 26501 + 26507 26502 26501 + 26508 26503 26365 + 26503 26508 26509 + 26509 26504 26503 + 26504 26509 26510 + 26510 26505 26504 + 26505 26510 26511 + 26511 26512 26505 + 26505 26512 26506 + 26365 26369 26508 + 26508 26369 26368 + 26368 26513 26508 + 26508 26513 26514 + 26514 26509 26508 + 26510 26509 26514 + 26514 26515 26510 + 26516 26510 26515 + 26516 26511 26510 + 26379 26513 26368 + 26513 26379 26517 + 26517 26514 26513 + 26514 26517 26518 + 26518 26515 26514 + 26515 26518 26516 + 26518 26519 26516 + 26516 26519 26520 + 26520 26521 26516 + 26511 26516 26521 + 26522 26517 26379 + 26518 26517 26522 + 26522 26523 26518 + 26524 26518 26523 + 26524 26519 26518 + 26520 26519 26524 + 26524 26525 26520 + 26526 26520 26525 + 26521 26520 26526 + 26522 26379 26527 + 26528 26522 26527 + 26522 26528 26529 + 26529 26523 26522 + 26523 26529 26524 + 26529 26530 26524 + 26524 26530 26531 + 26531 26525 26524 + 26378 26527 26379 + 26532 26527 26378 + 26527 26532 26528 + 26528 26532 26533 + 26533 26534 26528 + 26529 26528 26534 + 26534 26535 26529 + 26536 26529 26535 + 26536 26530 26529 + 26531 26530 26536 + 26378 26537 26532 + 26532 26537 26538 + 26538 26533 26532 + 26539 26533 26538 + 26533 26539 26540 + 26540 26534 26533 + 26534 26540 26541 + 26541 26535 26534 + 26535 26541 26536 + 26537 26378 26377 + 26377 26542 26537 + 26538 26537 26542 + 26542 26488 26538 + 26487 26538 26488 + 26538 26487 26539 + 26376 26542 26377 + 26542 26376 26543 + 26543 26488 26542 + 26488 26543 26478 + 26544 26478 26543 + 26478 26544 26479 + 26543 26376 26387 + 26387 26544 26543 + 26545 26544 26387 + 26544 26545 26546 + 26546 26479 26544 + 26479 26546 26547 + 26547 26548 26479 + 26480 26479 26548 + 26387 26386 26545 + 26545 26386 26549 + 26549 26550 26545 + 26546 26545 26550 + 26550 26551 26546 + 26547 26546 26551 + 26551 26552 26547 + 26553 26547 26552 + 26548 26547 26553 + 26385 26549 26386 + 26554 26549 26385 + 26550 26549 26554 + 26554 26555 26550 + 26550 26555 26556 + 26556 26551 26550 + 26552 26551 26556 + 26385 26557 26554 + 26554 26557 26558 + 26558 26559 26554 + 26555 26554 26559 + 26559 26560 26555 + 26560 26556 26555 + 26391 26557 26385 + 26557 26391 26561 + 26561 26558 26557 + 26558 26561 26562 + 26562 26563 26558 + 26558 26563 26564 + 26564 26559 26558 + 26560 26559 26564 + 26565 26561 26391 + 26561 26565 26566 + 26562 26561 26566 + 26562 26566 26567 + 26567 26568 26562 + 26563 26562 26568 + 26568 26569 26563 + 26569 26564 26563 + 26391 26395 26565 + 26395 26394 26565 + 26394 26570 26565 + 26565 26570 26571 + 26571 26566 26565 + 26566 26571 26572 + 26572 26567 26566 + 26567 26572 26573 + 26573 26574 26567 + 26568 26567 26574 + 26570 26394 26399 + 26575 26570 26399 + 26570 26575 26576 + 26571 26570 26576 + 26577 26571 26576 + 26577 26572 26571 + 26573 26572 26577 + 26577 26578 26573 + 26579 26573 26578 + 26574 26573 26579 + 26580 26575 26399 + 26575 26580 26581 + 26581 26576 26575 + 26576 26581 26582 + 26582 26577 26576 + 26577 26582 26583 + 26583 26578 26577 + 26584 26578 26583 + 26578 26584 26579 + 26399 26398 26580 + 26585 26580 26398 + 26581 26580 26585 + 26585 26586 26581 + 26582 26581 26586 + 26586 26587 26582 + 26583 26582 26587 + 26587 26588 26583 + 26583 26588 26589 + 26589 26584 26583 + 26398 26590 26585 + 26591 26585 26590 + 26585 26591 26592 + 26592 26586 26585 + 26586 26592 26587 + 26592 26593 26587 + 26587 26593 26594 + 26594 26588 26587 + 26589 26588 26594 + 26403 26590 26398 + 26412 26590 26403 + 26590 26412 26591 + 26595 26591 26412 + 26592 26591 26595 + 26595 26596 26592 + 26597 26592 26596 + 26597 26593 26592 + 26594 26593 26597 + 26597 26598 26594 + 26598 26599 26594 + 26599 26589 26594 + 26584 26589 26599 + 26412 26600 26595 + 26601 26595 26600 + 26595 26601 26602 + 26602 26596 26595 + 26596 26602 26597 + 26602 26603 26597 + 26597 26603 26604 + 26604 26598 26597 + 26411 26600 26412 + 26605 26600 26411 + 26600 26605 26601 + 26606 26601 26605 + 26602 26601 26606 + 26606 26607 26602 + 26608 26602 26607 + 26608 26603 26602 + 26603 26608 26609 + 26604 26603 26609 + 26411 26610 26605 + 26605 26610 26611 + 26611 26612 26605 + 26606 26605 26612 + 26612 26613 26606 + 26613 26614 26606 + 26606 26614 26607 + 26610 26411 26416 + 26416 26615 26610 + 26611 26610 26615 + 26615 26616 26611 + 26617 26611 26616 + 26611 26617 26613 + 26613 26612 26611 + 26416 26415 26615 + 26615 26415 26421 + 26421 26616 26615 + 26553 26616 26421 + 26616 26553 26617 + 26552 26617 26553 + 26613 26617 26552 + 26552 26618 26613 + 26614 26613 26618 + 26618 26619 26614 + 26620 26614 26619 + 26614 26620 26607 + 26607 26620 26608 + 26421 26621 26553 + 26553 26621 26548 + 26622 26548 26621 + 26622 26480 26548 + 26623 26480 26622 + 26480 26623 26474 + 26624 26621 26421 + 26621 26624 26622 + 26625 26622 26624 + 26622 26625 26623 + 26623 26625 26626 + 26626 26475 26623 + 26474 26623 26475 + 26420 26624 26421 + 26624 26420 26429 + 26429 26627 26624 + 26624 26627 26625 + 26626 26625 26627 + 26627 26628 26626 + 26629 26626 26628 + 26475 26626 26629 + 26629 26630 26475 + 26475 26630 26470 + 26627 26429 26631 + 26631 26628 26627 + 26628 26631 26632 + 26632 26633 26628 + 26628 26633 26629 + 26634 26629 26633 + 26634 26635 26629 + 26630 26629 26635 + 26636 26631 26429 + 26632 26631 26636 + 26636 26637 26632 + 26638 26632 26637 + 26638 26639 26632 + 26633 26632 26639 + 26639 26634 26633 + 26429 26428 26636 + 26434 26636 26428 + 26636 26434 26640 + 26640 26637 26636 + 26637 26640 26638 + 26640 26641 26638 + 26638 26641 26642 + 26642 26643 26638 + 26639 26638 26643 + 26644 26639 26643 + 26634 26639 26644 + 26640 26434 26433 + 26433 26645 26640 + 26641 26640 26645 + 26646 26641 26645 + 26642 26641 26646 + 26646 26647 26642 + 26648 26642 26647 + 26643 26642 26648 + 26648 26649 26643 + 26644 26643 26649 + 26442 26645 26433 + 26645 26442 26650 + 26650 26646 26645 + 26646 26650 26651 + 26651 26647 26646 + 26647 26651 26652 + 26652 26653 26647 + 26647 26653 26648 + 26654 26648 26653 + 26649 26648 26654 + 26447 26650 26442 + 26651 26650 26447 + 26447 26655 26651 + 26656 26651 26655 + 26656 26652 26651 + 26657 26652 26656 + 26653 26652 26657 + 26657 26658 26653 + 26653 26658 26654 + 26452 26655 26447 + 26655 26452 26656 + 26452 26659 26656 + 26656 26659 26660 + 26660 26661 26656 + 26656 26661 26657 + 26661 26662 26657 + 26662 26663 26657 + 26663 26658 26657 + 26654 26658 26663 + 26457 26659 26452 + 26659 26457 26664 + 26660 26659 26664 + 26665 26660 26664 + 26661 26660 26665 + 26665 26662 26661 + 26662 26665 26666 + 26666 26663 26662 + 26663 26666 26654 + 26666 26667 26654 + 26654 26667 26649 + 26668 26649 26667 + 26649 26668 26644 + 26462 26664 26457 + 26664 26462 26669 + 26669 26665 26664 + 26665 26669 26670 + 26666 26665 26670 + 26667 26666 26670 + 26670 26671 26667 + 26671 26668 26667 + 26672 26668 26671 + 26668 26672 26673 + 26673 26644 26668 + 26644 26673 26634 + 26462 26674 26669 + 26674 26670 26669 + 26674 26675 26670 + 26670 26675 26676 + 26676 26671 26670 + 26671 26676 26672 + 26677 26672 26676 + 26672 26677 26678 + 26672 26678 26673 + 26674 26462 26679 + 26679 26680 26674 + 26680 26681 26674 + 26681 26675 26674 + 26675 26681 26682 + 26675 26682 26676 + 26682 26677 26676 + 26461 26679 26462 + 26683 26679 26461 + 26679 26683 26680 + 26683 26684 26680 + 26680 26684 26685 + 26685 26681 26680 + 26681 26685 26686 + 26686 26682 26681 + 26682 26686 26687 + 26687 26677 26682 + 26461 26688 26683 + 26683 26688 26689 + 26689 26690 26683 + 26684 26683 26690 + 26690 26691 26684 + 26691 26685 26684 + 26685 26691 26686 + 26687 26686 26691 + 26460 26688 26461 + 26689 26688 26460 + 26689 26460 26692 + 26692 26693 26689 + 26693 26694 26689 + 26689 26694 26691 + 26691 26690 26689 + 26466 26692 26460 + 26693 26692 26466 + 26466 26471 26693 + 26693 26471 26695 + 26695 26696 26693 + 26687 26693 26696 + 26687 26694 26693 + 26691 26694 26687 + 26695 26471 26470 + 26695 26470 26630 + 26635 26695 26630 + 26695 26635 26678 + 26678 26696 26695 + 26696 26678 26677 + 26677 26687 26696 + 26678 26635 26673 + 26635 26634 26673 + 26556 26618 26552 + 26618 26556 26619 + 26556 26697 26619 + 26619 26697 26698 + 26619 26698 26620 + 26699 26620 26698 + 26620 26699 26608 + 26560 26697 26556 + 26700 26697 26560 + 26697 26700 26698 + 26698 26700 26701 + 26701 26699 26698 + 26702 26699 26701 + 26608 26699 26702 + 26702 26609 26608 + 26609 26702 26703 + 26703 26604 26609 + 26560 26704 26700 + 26705 26700 26704 + 26705 26706 26700 + 26700 26706 26701 + 26701 26706 26707 + 26707 26708 26701 + 26701 26708 26702 + 26564 26704 26560 + 26704 26564 26709 + 26709 26705 26704 + 26705 26709 26710 + 26710 26711 26705 + 26705 26711 26707 + 26707 26706 26705 + 26569 26709 26564 + 26709 26569 26712 + 26710 26709 26712 + 26713 26710 26712 + 26710 26713 26714 + 26711 26710 26714 + 26714 26707 26711 + 26707 26714 26715 + 26708 26707 26715 + 26708 26715 26716 + 26716 26702 26708 + 26702 26716 26703 + 26717 26712 26569 + 26712 26717 26718 + 26718 26713 26712 + 26713 26718 26715 + 26715 26714 26713 + 26569 26568 26717 + 26717 26568 26574 + 26718 26717 26574 + 26719 26718 26574 + 26715 26718 26719 + 26719 26716 26715 + 26716 26719 26579 + 26716 26579 26703 + 26720 26703 26579 + 26703 26720 26604 + 26598 26604 26720 + 26720 26599 26598 + 26599 26720 26584 + 26579 26719 26574 + 26584 26720 26579 + 26539 26487 26486 + 26486 26721 26539 + 26539 26721 26722 + 26722 26540 26539 + 26540 26722 26723 + 26541 26540 26723 + 26492 26721 26486 + 26721 26492 26724 + 26724 26722 26721 + 26722 26724 26725 + 26725 26723 26722 + 26723 26725 26726 + 26726 26727 26723 + 26727 26541 26723 + 26727 26728 26541 + 26541 26728 26536 + 26497 26724 26492 + 26724 26497 26729 + 26725 26724 26729 + 26730 26725 26729 + 26730 26726 26725 + 26726 26730 26731 + 26732 26726 26731 + 26727 26726 26732 + 26732 26733 26727 + 26728 26727 26733 + 26502 26729 26497 + 26729 26502 26734 + 26734 26730 26729 + 26730 26734 26735 + 26735 26731 26730 + 26731 26735 26736 + 26736 26737 26731 + 26732 26731 26737 + 26738 26732 26737 + 26733 26732 26738 + 26507 26734 26502 + 26734 26507 26739 + 26735 26734 26739 + 26736 26735 26739 + 26740 26736 26739 + 26741 26736 26740 + 26737 26736 26741 + 26737 26741 26738 + 26741 26742 26738 + 26743 26738 26742 + 26738 26743 26733 + 26744 26739 26507 + 26739 26744 26740 + 26744 26745 26740 + 26740 26745 26746 + 26746 26526 26740 + 26740 26526 26741 + 26742 26741 26526 + 26507 26506 26744 + 26744 26506 26512 + 26512 26747 26744 + 26745 26744 26747 + 26746 26745 26747 + 26747 26748 26746 + 26746 26748 26521 + 26526 26746 26521 + 26748 26747 26512 + 26512 26511 26748 + 26748 26511 26521 + 26525 26742 26526 + 26525 26531 26742 + 26531 26749 26742 + 26742 26749 26743 + 26750 26743 26749 + 26743 26750 26733 + 26750 26728 26733 + 26536 26728 26750 + 26749 26531 26751 + 26751 26750 26749 + 26750 26751 26536 + 26536 26751 26531 + 26752 26753 26754 + 26753 26755 26754 + 26756 26754 26755 + 26754 26756 26757 + 26757 26758 26754 + 26754 26758 26752 + 26759 26752 26758 + 26760 26752 26759 + 26761 26755 26753 + 26762 26755 26761 + 26755 26762 26756 + 26756 26762 26763 + 26763 26764 26756 + 26757 26756 26764 + 26753 26765 26761 + 26766 26761 26765 + 26767 26761 26766 + 26761 26767 26762 + 26762 26767 26768 + 26768 26763 26762 + 26769 26763 26768 + 26763 26769 26770 + 26770 26764 26763 + 26771 26766 26765 + 26772 26766 26771 + 26766 26772 26767 + 26768 26767 26772 + 26772 26773 26768 + 26774 26768 26773 + 26768 26774 26769 + 26765 26775 26771 + 26776 26771 26775 + 26777 26771 26776 + 26771 26777 26772 + 26772 26777 26778 + 26778 26773 26772 + 26779 26773 26778 + 26773 26779 26774 + 26780 26774 26779 + 26769 26774 26780 + 26781 26776 26775 + 26782 26776 26781 + 26776 26782 26777 + 26778 26777 26782 + 26782 26783 26778 + 26784 26778 26783 + 26778 26784 26779 + 26775 26785 26781 + 26781 26785 26786 + 26786 26787 26781 + 26788 26781 26787 + 26781 26788 26782 + 26782 26788 26789 + 26789 26783 26782 + 26790 26783 26789 + 26783 26790 26784 + 26791 26786 26785 + 26785 26792 26791 + 26793 26791 26792 + 26792 26794 26793 + 26795 26793 26794 + 26794 26796 26795 + 26797 26795 26796 + 26798 26795 26797 + 26795 26798 26786 + 26786 26798 26799 + 26799 26787 26786 + 26800 26787 26799 + 26787 26800 26788 + 26789 26788 26800 + 26801 26797 26796 + 26797 26801 26802 + 26802 26803 26797 + 26797 26803 26798 + 26799 26798 26803 + 26803 26804 26799 + 26805 26799 26804 + 26799 26805 26800 + 26796 26760 26801 + 26801 26760 26806 + 26806 26807 26801 + 26802 26801 26807 + 26807 26808 26802 + 26802 26808 26809 + 26809 26810 26802 + 26803 26802 26810 + 26810 26804 26803 + 26759 26806 26760 + 26806 26759 26811 + 26811 26812 26806 + 26806 26812 26813 + 26813 26807 26806 + 26808 26807 26813 + 26813 26814 26808 + 26808 26814 26815 + 26815 26809 26808 + 26811 26759 26816 + 26816 26817 26811 + 26818 26811 26817 + 26812 26811 26818 + 26818 26819 26812 + 26812 26819 26820 + 26820 26813 26812 + 26814 26813 26820 + 26758 26816 26759 + 26821 26816 26758 + 26816 26821 26822 + 26822 26817 26816 + 26817 26822 26823 + 26823 26824 26817 + 26817 26824 26818 + 26825 26818 26824 + 26819 26818 26825 + 26758 26757 26821 + 26826 26821 26757 + 26822 26821 26826 + 26826 26827 26822 + 26823 26822 26827 + 26827 26828 26823 + 26829 26823 26828 + 26824 26823 26829 + 26829 26830 26824 + 26824 26830 26825 + 26757 26831 26826 + 26832 26826 26831 + 26826 26832 26833 + 26833 26827 26826 + 26827 26833 26834 + 26834 26828 26827 + 26764 26831 26757 + 26835 26831 26764 + 26831 26835 26832 + 26836 26832 26835 + 26833 26832 26836 + 26836 26837 26833 + 26833 26837 26838 + 26838 26834 26833 + 26839 26834 26838 + 26828 26834 26839 + 26764 26770 26835 + 26835 26770 26840 + 26840 26841 26835 + 26835 26841 26836 + 26842 26836 26841 + 26836 26842 26843 + 26843 26837 26836 + 26837 26843 26844 + 26844 26838 26837 + 26840 26770 26769 + 26845 26840 26769 + 26846 26840 26845 + 26846 26841 26840 + 26841 26846 26842 + 26847 26842 26846 + 26843 26842 26847 + 26847 26848 26843 + 26844 26843 26848 + 26769 26849 26845 + 26849 26850 26845 + 26851 26845 26850 + 26852 26845 26851 + 26845 26852 26846 + 26846 26852 26847 + 26780 26849 26769 + 26849 26780 26853 + 26849 26853 26854 + 26854 26850 26849 + 26855 26850 26854 + 26850 26855 26851 + 26856 26851 26855 + 26852 26851 26856 + 26856 26857 26852 + 26852 26857 26847 + 26853 26780 26858 + 26858 26859 26853 + 26854 26853 26859 + 26859 26860 26854 + 26861 26854 26860 + 26854 26861 26855 + 26779 26858 26780 + 26862 26858 26779 + 26859 26858 26862 + 26859 26862 26863 + 26863 26860 26859 + 26864 26860 26863 + 26860 26864 26861 + 26865 26861 26864 + 26855 26861 26865 + 26865 26866 26855 + 26855 26866 26856 + 26779 26784 26862 + 26862 26784 26790 + 26863 26862 26790 + 26867 26863 26790 + 26864 26863 26867 + 26867 26868 26864 + 26864 26868 26865 + 26869 26865 26868 + 26865 26869 26870 + 26870 26866 26865 + 26866 26870 26871 + 26871 26856 26866 + 26857 26856 26871 + 26790 26872 26867 + 26873 26867 26872 + 26867 26873 26874 + 26874 26868 26867 + 26868 26874 26869 + 26875 26869 26874 + 26870 26869 26875 + 26876 26872 26790 + 26877 26872 26876 + 26872 26877 26873 + 26878 26873 26877 + 26874 26873 26878 + 26878 26879 26874 + 26874 26879 26875 + 26790 26880 26876 + 26876 26880 26881 + 26882 26876 26881 + 26876 26882 26877 + 26877 26882 26883 + 26883 26884 26877 + 26877 26884 26878 + 26789 26880 26790 + 26880 26789 26885 + 26885 26881 26880 + 26886 26881 26885 + 26881 26886 26882 + 26882 26886 26887 + 26887 26883 26882 + 26888 26883 26887 + 26884 26883 26888 + 26800 26885 26789 + 26889 26885 26800 + 26885 26889 26890 + 26890 26886 26885 + 26886 26890 26891 + 26891 26887 26886 + 26892 26887 26891 + 26887 26892 26888 + 26800 26805 26889 + 26893 26889 26805 + 26890 26889 26893 + 26893 26894 26890 + 26890 26894 26895 + 26891 26890 26895 + 26895 26896 26891 + 26897 26891 26896 + 26891 26897 26892 + 26805 26898 26893 + 26899 26893 26898 + 26893 26899 26900 + 26900 26894 26893 + 26894 26900 26901 + 26901 26895 26894 + 26804 26898 26805 + 26902 26898 26804 + 26898 26902 26899 + 26899 26902 26903 + 26903 26904 26899 + 26900 26899 26904 + 26904 26905 26900 + 26901 26900 26905 + 26804 26810 26902 + 26902 26810 26809 + 26809 26903 26902 + 26903 26809 26815 + 26815 26906 26903 + 26903 26906 26907 + 26907 26904 26903 + 26905 26904 26907 + 26907 26908 26905 + 26905 26908 26909 + 26909 26910 26905 + 26905 26910 26901 + 26906 26815 26911 + 26911 26912 26906 + 26906 26912 26913 + 26913 26907 26906 + 26908 26907 26913 + 26913 26914 26908 + 26908 26914 26915 + 26915 26909 26908 + 26911 26815 26814 + 26814 26916 26911 + 26916 26917 26911 + 26917 26918 26911 + 26912 26911 26918 + 26918 26919 26912 + 26912 26919 26920 + 26920 26913 26912 + 26914 26913 26920 + 26820 26916 26814 + 26916 26820 26921 + 26921 26917 26916 + 26917 26921 26922 + 26922 26923 26917 + 26917 26923 26924 + 26924 26918 26917 + 26919 26918 26924 + 26921 26820 26819 + 26819 26925 26921 + 26921 26925 26926 + 26926 26922 26921 + 26927 26922 26926 + 26923 26922 26927 + 26927 26928 26923 + 26923 26928 26929 + 26929 26924 26923 + 26825 26925 26819 + 26925 26825 26930 + 26930 26926 26925 + 26926 26930 26931 + 26931 26932 26926 + 26926 26932 26927 + 26933 26927 26932 + 26928 26927 26933 + 26930 26825 26830 + 26830 26934 26930 + 26931 26930 26934 + 26934 26935 26931 + 26936 26931 26935 + 26932 26931 26936 + 26936 26937 26932 + 26932 26937 26933 + 26938 26934 26830 + 26934 26938 26939 + 26939 26935 26934 + 26935 26939 26940 + 26940 26941 26935 + 26935 26941 26936 + 26942 26936 26941 + 26937 26936 26942 + 26830 26829 26938 + 26938 26829 26943 + 26943 26944 26938 + 26939 26938 26944 + 26944 26945 26939 + 26940 26939 26945 + 26945 26946 26940 + 26947 26940 26946 + 26941 26940 26947 + 26828 26943 26829 + 26839 26943 26828 + 26943 26839 26948 + 26948 26944 26943 + 26944 26948 26949 + 26949 26945 26944 + 26945 26949 26950 + 26950 26946 26945 + 26946 26950 26951 + 26951 26952 26946 + 26946 26952 26947 + 26948 26839 26953 + 26953 26954 26948 + 26949 26948 26954 + 26954 26955 26949 + 26950 26949 26955 + 26955 26956 26950 + 26951 26950 26956 + 26838 26953 26839 + 26957 26953 26838 + 26953 26957 26958 + 26958 26954 26953 + 26954 26958 26959 + 26959 26955 26954 + 26955 26959 26960 + 26960 26956 26955 + 26838 26844 26957 + 26957 26844 26961 + 26961 26962 26957 + 26958 26957 26962 + 26962 26963 26958 + 26959 26958 26963 + 26963 26964 26959 + 26960 26959 26964 + 26848 26961 26844 + 26965 26961 26848 + 26961 26965 26966 + 26966 26962 26961 + 26962 26966 26967 + 26967 26963 26962 + 26963 26967 26968 + 26968 26964 26963 + 26848 26969 26965 + 26965 26969 26970 + 26970 26971 26965 + 26966 26965 26971 + 26971 26972 26966 + 26967 26966 26972 + 26972 26973 26967 + 26968 26967 26973 + 26969 26848 26847 + 26847 26974 26969 + 26969 26974 26975 + 26975 26970 26969 + 26976 26970 26975 + 26970 26976 26977 + 26977 26971 26970 + 26971 26977 26978 + 26978 26972 26971 + 26974 26847 26979 + 26979 26980 26974 + 26975 26974 26980 + 26980 26981 26975 + 26982 26975 26981 + 26975 26982 26976 + 26857 26979 26847 + 26983 26979 26857 + 26980 26979 26983 + 26980 26983 26981 + 26983 26984 26981 + 26985 26981 26984 + 26981 26985 26982 + 26986 26982 26985 + 26976 26982 26986 + 26986 26987 26976 + 26977 26976 26987 + 26857 26988 26983 + 26983 26988 26989 + 26989 26984 26983 + 26985 26984 26989 + 26989 26990 26985 + 26985 26990 26991 + 26991 26986 26985 + 26871 26988 26857 + 26988 26871 26992 + 26992 26989 26988 + 26989 26992 26993 + 26993 26990 26989 + 26990 26993 26994 + 26994 26991 26990 + 26995 26991 26994 + 26991 26995 26996 + 26996 26986 26991 + 26992 26871 26870 + 26870 26997 26992 + 26997 26998 26992 + 26993 26992 26998 + 26998 26999 26993 + 26993 26999 27000 + 27000 26994 26993 + 27001 26994 27000 + 26994 27001 26995 + 26875 26997 26870 + 26875 27002 26997 + 26997 27002 27003 + 27003 26998 26997 + 26998 27003 27004 + 27004 26999 26998 + 26999 27004 27005 + 27005 27000 26999 + 27006 27000 27005 + 27000 27006 27001 + 27002 26875 26879 + 26879 27007 27002 + 27002 27007 27008 + 27008 27003 27002 + 27004 27003 27008 + 27008 27009 27004 + 27004 27009 27005 + 27010 27005 27009 + 27005 27010 27006 + 27007 26879 26878 + 27007 26878 27011 + 27007 27011 27008 + 27012 27008 27011 + 27012 27009 27008 + 27009 27012 27010 + 27010 27012 26888 + 26892 27010 26888 + 27006 27010 26892 + 26892 26897 27006 + 27001 27006 26897 + 26878 27013 27011 + 27011 27013 27014 + 27011 27014 27012 + 27012 27014 26888 + 26884 26888 27014 + 27014 27013 26884 + 26884 27013 26878 + 26897 27015 27001 + 26896 27015 26897 + 27016 27015 26896 + 27015 27016 26995 + 26995 27001 27015 + 26896 27017 27016 + 27016 27017 27018 + 27018 27019 27016 + 27016 27019 26996 + 26996 26995 27016 + 27017 26896 26895 + 26895 27020 27017 + 27018 27017 27020 + 27020 27021 27018 + 27022 27018 27021 + 27019 27018 27022 + 27022 27023 27019 + 27019 27023 27024 + 27024 26996 27019 + 26986 26996 27024 + 26895 26901 27020 + 27020 26901 26910 + 26910 27021 27020 + 27021 26910 26909 + 26909 27025 27021 + 27021 27025 27022 + 27026 27022 27025 + 27023 27022 27026 + 27026 27027 27023 + 27023 27027 27028 + 27028 27024 27023 + 26987 27024 27028 + 27024 26987 26986 + 27025 26909 26915 + 26915 27029 27025 + 27025 27029 27026 + 27030 27026 27029 + 27026 27030 27031 + 27027 27026 27031 + 27027 27031 27032 + 27032 27028 27027 + 27033 27028 27032 + 27028 27033 26987 + 26987 27033 26977 + 27029 26915 27034 + 27034 27035 27029 + 27029 27035 27030 + 27036 27030 27035 + 27031 27030 27036 + 27036 27037 27031 + 27031 27037 27038 + 27038 27032 27031 + 27034 26915 26914 + 26914 27039 27034 + 27040 27034 27039 + 27035 27034 27040 + 27040 27041 27035 + 27035 27041 27036 + 27042 27036 27041 + 27037 27036 27042 + 26920 27039 26914 + 27039 26920 27043 + 27043 27044 27039 + 27039 27044 27040 + 27045 27040 27044 + 27041 27040 27045 + 27045 27046 27041 + 27041 27046 27042 + 27043 26920 26919 + 26919 27047 27043 + 27048 27043 27047 + 27044 27043 27048 + 27048 27049 27044 + 27044 27049 27045 + 27045 27049 27050 + 27050 27051 27045 + 27046 27045 27051 + 26924 27047 26919 + 27047 26924 26929 + 26929 27052 27047 + 27047 27052 27048 + 27053 27048 27052 + 27049 27048 27053 + 27053 27050 27049 + 27050 27053 27054 + 27054 27055 27050 + 27050 27055 27056 + 27056 27051 27050 + 27052 26929 27057 + 27057 27058 27052 + 27052 27058 27053 + 27054 27053 27058 + 27058 27059 27054 + 27054 27059 27060 + 27055 27054 27060 + 27060 27061 27055 + 27056 27055 27061 + 27057 26929 26928 + 26928 27062 27057 + 27063 27057 27062 + 27058 27057 27063 + 27063 27059 27058 + 27059 27063 27064 + 27064 27060 27059 + 27060 27064 27065 + 27061 27060 27065 + 26933 27062 26928 + 27062 26933 27066 + 27066 27067 27062 + 27062 27067 27063 + 27063 27067 27064 + 27068 27064 27067 + 27064 27068 27065 + 27066 26933 26937 + 26937 27069 27066 + 27066 27069 27068 + 27067 27066 27068 + 26942 27069 26937 + 27069 26942 27065 + 27065 27068 27069 + 26942 27070 27065 + 27071 27065 27070 + 27065 27071 27072 + 27072 27073 27065 + 27073 27074 27065 + 27074 27075 27065 + 27075 27061 27065 + 26941 27070 26942 + 26947 27070 26941 + 27070 26947 27071 + 26947 26952 27071 + 26952 26951 27071 + 26951 27076 27071 + 27071 27076 27072 + 27077 27072 27076 + 27072 27077 27078 + 27079 27072 27078 + 27072 27079 27073 + 26951 27080 27076 + 27080 27077 27076 + 27077 27080 26956 + 26956 26960 27077 + 27077 26960 27081 + 27081 27078 27077 + 27082 27078 27081 + 27078 27082 27079 + 26956 27080 26951 + 26964 27081 26960 + 27083 27081 26964 + 27081 27083 27082 + 27082 27083 27084 + 27084 27085 27082 + 27082 27085 27079 + 27073 27079 27085 + 27085 27086 27073 + 27086 27087 27073 + 27074 27073 27087 + 26964 26968 27083 + 27083 26968 27088 + 27088 27084 27083 + 27089 27084 27088 + 27084 27089 27086 + 27086 27085 27084 + 26973 27088 26968 + 27090 27088 26973 + 27088 27090 27089 + 27089 27090 27091 + 27091 27092 27089 + 27086 27089 27092 + 27092 27087 27086 + 27093 27087 27092 + 27087 27093 27074 + 26973 27094 27090 + 27090 27094 27095 + 27095 27091 27090 + 27096 27091 27095 + 27091 27096 27097 + 27097 27092 27091 + 27092 27097 27093 + 27094 26973 26972 + 26972 26978 27094 + 27094 26978 27098 + 27098 27095 27094 + 27038 27095 27098 + 27095 27038 27096 + 27096 27038 27037 + 27037 27099 27096 + 27097 27096 27099 + 27099 27100 27097 + 27093 27097 27100 + 27033 27098 26978 + 27032 27098 27033 + 27098 27032 27038 + 26978 26977 27033 + 27042 27099 27037 + 27099 27042 27101 + 27101 27100 27099 + 27100 27101 27102 + 27102 27103 27100 + 27100 27103 27093 + 27093 27103 27074 + 27075 27074 27103 + 27101 27042 27046 + 27046 27104 27101 + 27102 27101 27104 + 27104 27105 27102 + 27102 27105 27075 + 27103 27102 27075 + 27051 27104 27046 + 27104 27051 27056 + 27056 27105 27104 + 27105 27056 27061 + 27061 27075 27105 + 27106 27107 27108 + 27106 27109 27107 + 27110 27107 27109 + 27107 27110 27111 + 27108 27107 27111 + 27112 27106 27108 + 27106 27112 27113 + 27113 27114 27106 + 27114 27115 27106 + 27115 27116 27106 + 27106 27116 27109 + 27108 27117 27112 + 27112 27117 27118 + 27119 27112 27118 + 27112 27119 27113 + 27120 27117 27108 + 27117 27120 27121 + 27118 27117 27121 + 27118 27121 27122 + 27122 27123 27118 + 27119 27118 27123 + 27124 27119 27123 + 27119 27124 27113 + 27108 27111 27120 + 27120 27111 27125 + 27125 27126 27120 + 27121 27120 27126 + 27126 27127 27121 + 27122 27121 27127 + 27128 27125 27111 + 27125 27128 27129 + 27129 27130 27125 + 27125 27130 27131 + 27131 27126 27125 + 27127 27126 27131 + 27111 27110 27128 + 27132 27128 27110 + 27129 27128 27132 + 27132 27133 27129 + 27129 27133 27134 + 27134 27135 27129 + 27130 27129 27135 + 27135 27136 27130 + 27131 27130 27136 + 27110 27137 27132 + 27138 27132 27137 + 27132 27138 27139 + 27139 27133 27132 + 27133 27139 27140 + 27140 27134 27133 + 27109 27137 27110 + 27109 27141 27137 + 27141 27142 27137 + 27137 27142 27138 + 27143 27138 27142 + 27139 27138 27143 + 27143 27144 27139 + 27139 27144 27145 + 27145 27140 27139 + 27116 27141 27109 + 27116 27146 27141 + 27142 27141 27146 + 27146 27147 27142 + 27142 27147 27143 + 27143 27147 27148 + 27149 27143 27148 + 27143 27149 27150 + 27150 27144 27143 + 27116 27115 27146 + 27115 27151 27146 + 27146 27151 27147 + 27151 27148 27147 + 27148 27151 27152 + 27152 27153 27148 + 27148 27153 27154 + 27148 27154 27149 + 27150 27149 27154 + 27115 27152 27151 + 27115 27114 27152 + 27114 27155 27152 + 27152 27155 27156 + 27152 27156 27153 + 27153 27156 27157 + 27157 27154 27153 + 27154 27157 27158 + 27158 27159 27154 + 27154 27159 27150 + 27114 27160 27155 + 27160 27161 27155 + 27161 27156 27155 + 27156 27161 27162 + 27162 27157 27156 + 27158 27157 27162 + 27163 27160 27114 + 27160 27163 27164 + 27164 27161 27160 + 27161 27164 27165 + 27165 27162 27161 + 27162 27165 27166 + 27166 27167 27162 + 27162 27167 27158 + 27114 27113 27163 + 27113 27168 27163 + 27168 27169 27163 + 27169 27164 27163 + 27164 27169 27170 + 27170 27165 27164 + 27166 27165 27170 + 27171 27168 27113 + 27168 27171 27172 + 27172 27169 27168 + 27169 27172 27173 + 27173 27170 27169 + 27170 27173 27174 + 27174 27175 27170 + 27170 27175 27166 + 27113 27176 27171 + 27176 27177 27171 + 27171 27177 27178 + 27172 27171 27178 + 27172 27178 27179 + 27179 27173 27172 + 27174 27173 27179 + 27124 27176 27113 + 27176 27124 27180 + 27180 27177 27176 + 27177 27180 27181 + 27181 27178 27177 + 27178 27181 27182 + 27182 27179 27178 + 27179 27182 27183 + 27183 27184 27179 + 27179 27184 27174 + 27124 27185 27180 + 27185 27186 27180 + 27186 27181 27180 + 27181 27186 27187 + 27187 27182 27181 + 27183 27182 27187 + 27123 27185 27124 + 27185 27123 27122 + 27122 27186 27185 + 27186 27122 27188 + 27188 27187 27186 + 27187 27188 27189 + 27189 27190 27187 + 27187 27190 27183 + 27183 27190 27191 + 27191 27192 27183 + 27184 27183 27192 + 27127 27188 27122 + 27189 27188 27127 + 27127 27193 27189 + 27189 27193 27194 + 27194 27195 27189 + 27190 27189 27195 + 27195 27191 27190 + 27131 27193 27127 + 27193 27131 27196 + 27196 27194 27193 + 27194 27196 27197 + 27197 27198 27194 + 27194 27198 27199 + 27199 27195 27194 + 27191 27195 27199 + 27136 27196 27131 + 27197 27196 27136 + 27136 27200 27197 + 27197 27200 27201 + 27201 27202 27197 + 27198 27197 27202 + 27202 27203 27198 + 27199 27198 27203 + 27204 27200 27136 + 27200 27204 27205 + 27205 27201 27200 + 27201 27205 27206 + 27206 27207 27201 + 27201 27207 27208 + 27208 27202 27201 + 27203 27202 27208 + 27136 27135 27204 + 27204 27135 27134 + 27134 27209 27204 + 27204 27209 27210 + 27210 27205 27204 + 27206 27205 27210 + 27210 27211 27206 + 27206 27211 27212 + 27212 27213 27206 + 27207 27206 27213 + 27214 27209 27134 + 27209 27214 27215 + 27215 27210 27209 + 27210 27215 27216 + 27216 27211 27210 + 27211 27216 27217 + 27217 27212 27211 + 27134 27140 27214 + 27214 27140 27145 + 27145 27218 27214 + 27214 27218 27219 + 27219 27215 27214 + 27216 27215 27219 + 27219 27220 27216 + 27216 27220 27221 + 27221 27217 27216 + 27222 27218 27145 + 27218 27222 27223 + 27223 27219 27218 + 27219 27223 27224 + 27224 27220 27219 + 27220 27224 27225 + 27225 27221 27220 + 27145 27226 27222 + 27222 27226 27227 + 27227 27228 27222 + 27222 27228 27229 + 27229 27223 27222 + 27224 27223 27229 + 27229 27230 27224 + 27225 27224 27230 + 27226 27145 27144 + 27144 27150 27226 + 27227 27226 27150 + 27150 27159 27227 + 27231 27227 27159 + 27227 27231 27232 + 27232 27228 27227 + 27228 27232 27233 + 27233 27229 27228 + 27229 27233 27234 + 27234 27230 27229 + 27159 27158 27231 + 27235 27231 27158 + 27232 27231 27235 + 27235 27236 27232 + 27232 27236 27237 + 27237 27233 27232 + 27234 27233 27237 + 27237 27238 27234 + 27239 27234 27238 + 27230 27234 27239 + 27158 27167 27235 + 27240 27235 27167 + 27235 27240 27241 + 27241 27236 27235 + 27236 27241 27242 + 27242 27237 27236 + 27237 27242 27243 + 27243 27238 27237 + 27167 27166 27240 + 27244 27240 27166 + 27241 27240 27244 + 27244 27245 27241 + 27241 27245 27246 + 27246 27242 27241 + 27243 27242 27246 + 27166 27175 27244 + 27247 27244 27175 + 27244 27247 27248 + 27248 27245 27244 + 27245 27248 27249 + 27249 27246 27245 + 27246 27249 27250 + 27250 27251 27246 + 27246 27251 27243 + 27175 27174 27247 + 27252 27247 27174 + 27248 27247 27252 + 27252 27253 27248 + 27248 27253 27254 + 27254 27249 27248 + 27250 27249 27254 + 27174 27184 27252 + 27192 27252 27184 + 27252 27192 27255 + 27255 27253 27252 + 27253 27255 27256 + 27256 27254 27253 + 27254 27256 27257 + 27257 27258 27254 + 27254 27258 27250 + 27255 27192 27191 + 27191 27259 27255 + 27255 27259 27260 + 27260 27256 27255 + 27257 27256 27260 + 27260 27261 27257 + 27257 27261 27262 + 27262 27263 27257 + 27258 27257 27263 + 27199 27259 27191 + 27259 27199 27264 + 27264 27260 27259 + 27260 27264 27261 + 27264 27265 27261 + 27261 27265 27266 + 27266 27262 27261 + 27203 27264 27199 + 27265 27264 27203 + 27203 27267 27265 + 27265 27267 27268 + 27268 27266 27265 + 27269 27266 27268 + 27262 27266 27269 + 27269 27270 27262 + 27262 27270 27271 + 27271 27263 27262 + 27208 27267 27203 + 27267 27208 27272 + 27272 27268 27267 + 27273 27268 27272 + 27268 27273 27269 + 27274 27272 27208 + 27275 27272 27274 + 27272 27275 27273 + 27273 27275 27276 + 27276 27277 27273 + 27269 27273 27277 + 27208 27207 27274 + 27213 27274 27207 + 27278 27274 27213 + 27274 27278 27275 + 27276 27275 27278 + 27279 27276 27278 + 27280 27276 27279 + 27280 27277 27276 + 27277 27280 27281 + 27277 27281 27269 + 27213 27282 27278 + 27278 27282 27283 + 27283 27284 27278 + 27278 27284 27279 + 27285 27279 27284 + 27285 27286 27279 + 27279 27286 27280 + 27282 27213 27212 + 27212 27287 27282 + 27283 27282 27287 + 27287 27288 27283 + 27289 27283 27288 + 27284 27283 27289 + 27284 27289 27285 + 27285 27289 27290 + 27290 27291 27285 + 27286 27285 27291 + 27287 27212 27217 + 27217 27292 27287 + 27287 27292 27293 + 27293 27288 27287 + 27290 27288 27293 + 27288 27290 27289 + 27292 27217 27221 + 27221 27294 27292 + 27293 27292 27294 + 27295 27293 27294 + 27296 27293 27295 + 27293 27296 27290 + 27290 27296 27297 + 27297 27291 27290 + 27298 27291 27297 + 27291 27298 27286 + 27280 27286 27298 + 27221 27225 27294 + 27294 27225 27299 + 27299 27300 27294 + 27294 27300 27295 + 27301 27295 27300 + 27302 27295 27301 + 27295 27302 27296 + 27297 27296 27302 + 27299 27225 27230 + 27230 27303 27299 + 27304 27299 27303 + 27300 27299 27304 + 27300 27304 27301 + 27301 27304 27305 + 27305 27306 27301 + 27307 27301 27306 + 27301 27307 27302 + 27239 27303 27230 + 27305 27303 27239 + 27303 27305 27304 + 27305 27239 27308 + 27308 27306 27305 + 27309 27306 27308 + 27306 27309 27307 + 27310 27307 27309 + 27302 27307 27310 + 27310 27311 27302 + 27302 27311 27297 + 27312 27297 27311 + 27297 27312 27298 + 27313 27308 27239 + 27309 27308 27313 + 27313 27314 27309 + 27309 27314 27315 + 27315 27316 27309 + 27316 27310 27309 + 27317 27310 27316 + 27311 27310 27317 + 27311 27317 27312 + 27318 27313 27239 + 27319 27313 27318 + 27314 27313 27319 + 27314 27319 27320 + 27320 27315 27314 + 27315 27320 27321 + 27315 27321 27322 + 27322 27316 27315 + 27323 27318 27239 + 27324 27318 27323 + 27318 27324 27325 + 27325 27326 27318 + 27318 27326 27319 + 27319 27326 27327 + 27327 27320 27319 + 27321 27320 27327 + 27238 27323 27239 + 27328 27323 27238 + 27329 27323 27328 + 27323 27329 27324 + 27330 27324 27329 + 27325 27324 27330 + 27330 27331 27325 + 27332 27325 27331 + 27326 27325 27332 + 27332 27327 27326 + 27238 27243 27328 + 27333 27328 27243 + 27334 27328 27333 + 27328 27334 27329 + 27329 27334 27335 + 27335 27336 27329 + 27336 27330 27329 + 27337 27330 27336 + 27331 27330 27337 + 27243 27251 27333 + 27338 27333 27251 + 27333 27338 27339 + 27333 27339 27334 + 27335 27334 27339 + 27340 27335 27339 + 27341 27335 27340 + 27336 27335 27341 + 27336 27341 27337 + 27251 27250 27338 + 27338 27250 27342 + 27342 27343 27338 + 27339 27338 27343 + 27343 27344 27339 + 27339 27344 27340 + 27345 27340 27344 + 27340 27345 27346 + 27340 27346 27341 + 27337 27341 27346 + 27250 27258 27342 + 27263 27342 27258 + 27347 27342 27263 + 27342 27347 27348 + 27348 27343 27342 + 27344 27343 27348 + 27344 27348 27345 + 27345 27348 27347 + 27349 27345 27347 + 27346 27345 27349 + 27349 27350 27346 + 27346 27350 27351 + 27346 27351 27337 + 27263 27271 27347 + 27347 27271 27352 + 27352 27353 27347 + 27347 27353 27349 + 27354 27349 27353 + 27350 27349 27354 + 27350 27354 27355 + 27355 27351 27350 + 27356 27351 27355 + 27351 27356 27337 + 27352 27271 27270 + 27357 27352 27270 + 27358 27352 27357 + 27353 27352 27358 + 27353 27358 27354 + 27355 27354 27358 + 27358 27359 27355 + 27359 27360 27355 + 27361 27355 27360 + 27355 27361 27356 + 27270 27362 27357 + 27363 27357 27362 + 27359 27357 27363 + 27357 27359 27358 + 27364 27362 27270 + 27365 27362 27364 + 27362 27365 27363 + 27366 27363 27365 + 27359 27363 27366 + 27366 27360 27359 + 27367 27360 27366 + 27360 27367 27361 + 27270 27269 27364 + 27368 27364 27269 + 27365 27364 27368 + 27368 27369 27365 + 27365 27369 27366 + 27370 27366 27369 + 27366 27370 27367 + 27367 27370 27371 + 27367 27371 27372 + 27372 27361 27367 + 27373 27368 27269 + 27368 27373 27374 + 27375 27368 27374 + 27375 27369 27368 + 27369 27375 27370 + 27376 27370 27375 + 27370 27376 27371 + 27281 27373 27269 + 27377 27373 27281 + 27377 27374 27373 + 27374 27377 27378 + 27378 27379 27374 + 27375 27374 27379 + 27379 27376 27375 + 27380 27376 27379 + 27371 27376 27380 + 27371 27380 27381 + 27372 27371 27381 + 27281 27382 27377 + 27377 27382 27378 + 27383 27378 27382 + 27379 27378 27383 + 27379 27383 27380 + 27384 27380 27383 + 27384 27385 27380 + 27385 27381 27380 + 27386 27382 27281 + 27382 27386 27383 + 27383 27386 27384 + 27384 27386 27387 + 27388 27384 27387 + 27384 27388 27389 + 27389 27385 27384 + 27386 27281 27387 + 27280 27387 27281 + 27388 27387 27280 + 27298 27388 27280 + 27389 27388 27298 + 27298 27312 27389 + 27390 27389 27312 + 27385 27389 27390 + 27390 27391 27385 + 27381 27385 27391 + 27391 27392 27381 + 27392 27372 27381 + 27393 27390 27312 + 27394 27390 27393 + 27391 27390 27394 + 27394 27395 27391 + 27391 27395 27392 + 27395 27396 27392 + 27372 27392 27396 + 27397 27372 27396 + 27361 27372 27397 + 27317 27393 27312 + 27316 27393 27317 + 27322 27393 27316 + 27393 27322 27394 + 27394 27322 27321 + 27321 27398 27394 + 27398 27399 27394 + 27395 27394 27399 + 27399 27400 27395 + 27396 27395 27400 + 27400 27401 27396 + 27397 27396 27401 + 27327 27398 27321 + 27398 27327 27332 + 27398 27332 27402 + 27402 27399 27398 + 27400 27399 27402 + 27400 27402 27401 + 27402 27403 27401 + 27404 27401 27403 + 27401 27404 27397 + 27397 27404 27405 + 27356 27397 27405 + 27356 27361 27397 + 27403 27402 27332 + 27331 27403 27332 + 27331 27405 27403 + 27405 27404 27403 + 27337 27405 27331 + 27356 27405 27337 + 27406 27407 27408 + 27407 27406 27409 + 27410 27407 27409 + 27407 27410 27411 + 27411 27412 27407 + 27407 27412 27408 + 27408 27413 27406 + 27413 27414 27406 + 27409 27406 27414 + 27413 27408 27415 + 27415 27416 27413 + 27413 27416 27417 + 27417 27414 27413 + 27418 27414 27417 + 27414 27418 27409 + 27419 27415 27408 + 27415 27419 27420 + 27420 27421 27415 + 27416 27415 27421 + 27421 27422 27416 + 27417 27416 27422 + 27412 27419 27408 + 27423 27419 27412 + 27419 27423 27424 + 27424 27420 27419 + 27420 27424 27425 + 27425 27426 27420 + 27420 27426 27427 + 27427 27421 27420 + 27422 27421 27427 + 27412 27411 27423 + 27423 27411 27428 + 27428 27429 27423 + 27423 27429 27430 + 27430 27424 27423 + 27425 27424 27430 + 27428 27411 27410 + 27431 27428 27410 + 27428 27431 27432 + 27432 27429 27428 + 27429 27432 27433 + 27433 27430 27429 + 27430 27433 27434 + 27434 27435 27430 + 27430 27435 27425 + 27410 27436 27431 + 27437 27431 27436 + 27432 27431 27437 + 27437 27438 27432 + 27432 27438 27439 + 27439 27433 27432 + 27434 27433 27439 + 27436 27410 27409 + 27409 27440 27436 + 27440 27441 27436 + 27441 27442 27436 + 27442 27443 27436 + 27437 27436 27443 + 27440 27409 27444 + 27444 27445 27440 + 27445 27446 27440 + 27446 27447 27440 + 27447 27441 27440 + 27418 27444 27409 + 27448 27444 27418 + 27445 27444 27448 + 27448 27449 27445 + 27445 27449 27450 + 27450 27446 27445 + 27447 27446 27450 + 27418 27451 27448 + 27448 27451 27452 + 27452 27453 27448 + 27449 27448 27453 + 27453 27454 27449 + 27450 27449 27454 + 27417 27451 27418 + 27451 27417 27455 + 27455 27452 27451 + 27452 27455 27456 + 27456 27457 27452 + 27452 27457 27458 + 27458 27453 27452 + 27454 27453 27458 + 27422 27455 27417 + 27456 27455 27422 + 27422 27459 27456 + 27456 27459 27460 + 27460 27461 27456 + 27457 27456 27461 + 27461 27462 27457 + 27458 27457 27462 + 27427 27459 27422 + 27459 27427 27463 + 27463 27460 27459 + 27460 27463 27464 + 27464 27465 27460 + 27460 27465 27466 + 27466 27461 27460 + 27462 27461 27466 + 27467 27463 27427 + 27464 27463 27467 + 27467 27468 27464 + 27464 27468 27469 + 27469 27470 27464 + 27465 27464 27470 + 27470 27471 27465 + 27466 27465 27471 + 27427 27426 27467 + 27472 27467 27426 + 27467 27472 27473 + 27473 27468 27467 + 27468 27473 27474 + 27474 27469 27468 + 27426 27425 27472 + 27475 27472 27425 + 27473 27472 27475 + 27475 27476 27473 + 27473 27476 27477 + 27477 27478 27473 + 27478 27474 27473 + 27479 27474 27478 + 27469 27474 27479 + 27425 27435 27475 + 27480 27475 27435 + 27476 27475 27480 + 27480 27481 27476 + 27476 27481 27482 + 27482 27483 27476 + 27476 27483 27477 + 27435 27434 27480 + 27484 27480 27434 + 27481 27480 27484 + 27484 27485 27481 + 27482 27481 27485 + 27485 27486 27482 + 27487 27482 27486 + 27482 27487 27488 + 27488 27483 27482 + 27434 27489 27484 + 27490 27484 27489 + 27485 27484 27490 + 27490 27491 27485 + 27485 27491 27486 + 27491 27492 27486 + 27493 27486 27492 + 27486 27493 27487 + 27439 27489 27434 + 27494 27489 27439 + 27489 27494 27490 + 27490 27494 27495 + 27495 27496 27490 + 27491 27490 27496 + 27496 27497 27491 + 27492 27491 27497 + 27439 27498 27494 + 27494 27498 27499 + 27499 27495 27494 + 27500 27495 27499 + 27495 27500 27501 + 27501 27496 27495 + 27496 27501 27502 + 27497 27496 27502 + 27498 27439 27438 + 27438 27503 27498 + 27499 27498 27503 + 27503 27504 27499 + 27505 27499 27504 + 27499 27505 27500 + 27503 27438 27437 + 27437 27506 27503 + 27503 27506 27507 + 27507 27504 27503 + 27504 27507 27508 + 27509 27504 27508 + 27504 27509 27505 + 27510 27505 27509 + 27500 27505 27510 + 27506 27437 27443 + 27507 27506 27443 + 27507 27443 27442 + 27508 27507 27442 + 27511 27508 27442 + 27509 27508 27511 + 27511 27512 27509 + 27509 27512 27510 + 27513 27510 27512 + 27510 27513 27514 + 27514 27515 27510 + 27510 27515 27500 + 27511 27442 27441 + 27516 27511 27441 + 27511 27516 27517 + 27517 27512 27511 + 27512 27517 27513 + 27518 27513 27517 + 27514 27513 27518 + 27447 27516 27441 + 27517 27516 27447 + 27447 27519 27517 + 27517 27519 27518 + 27520 27518 27519 + 27518 27520 27521 + 27521 27522 27518 + 27518 27522 27514 + 27450 27519 27447 + 27519 27450 27520 + 27454 27520 27450 + 27521 27520 27454 + 27454 27523 27521 + 27521 27523 27524 + 27524 27525 27521 + 27522 27521 27525 + 27525 27526 27522 + 27514 27522 27526 + 27526 27527 27514 + 27515 27514 27527 + 27458 27523 27454 + 27523 27458 27528 + 27528 27524 27523 + 27524 27528 27529 + 27529 27530 27524 + 27524 27530 27531 + 27531 27525 27524 + 27526 27525 27531 + 27462 27528 27458 + 27529 27528 27462 + 27462 27532 27529 + 27529 27532 27533 + 27533 27534 27529 + 27530 27529 27534 + 27534 27535 27530 + 27531 27530 27535 + 27466 27532 27462 + 27532 27466 27536 + 27536 27533 27532 + 27533 27536 27537 + 27537 27538 27533 + 27533 27538 27539 + 27539 27534 27533 + 27535 27534 27539 + 27471 27536 27466 + 27537 27536 27471 + 27471 27540 27537 + 27541 27537 27540 + 27538 27537 27541 + 27541 27542 27538 + 27538 27542 27543 + 27539 27538 27543 + 27544 27540 27471 + 27540 27544 27545 + 27545 27546 27540 + 27540 27546 27541 + 27547 27541 27546 + 27542 27541 27547 + 27542 27547 27548 + 27548 27543 27542 + 27471 27470 27544 + 27544 27470 27469 + 27469 27549 27544 + 27544 27549 27550 + 27550 27545 27544 + 27551 27545 27550 + 27545 27551 27552 + 27552 27546 27545 + 27546 27552 27547 + 27548 27547 27552 + 27479 27549 27469 + 27549 27479 27553 + 27553 27550 27549 + 27554 27550 27553 + 27550 27554 27551 + 27555 27551 27554 + 27552 27551 27555 + 27555 27556 27552 + 27552 27556 27557 + 27557 27548 27552 + 27558 27553 27479 + 27559 27553 27558 + 27553 27559 27554 + 27554 27559 27560 + 27560 27561 27554 + 27554 27561 27555 + 27479 27562 27558 + 27563 27558 27562 + 27564 27558 27563 + 27558 27564 27559 + 27560 27559 27564 + 27478 27562 27479 + 27565 27562 27478 + 27562 27565 27563 + 27566 27563 27565 + 27567 27563 27566 + 27563 27567 27564 + 27564 27567 27568 + 27568 27569 27564 + 27564 27569 27560 + 27478 27570 27565 + 27565 27570 27571 + 27571 27572 27565 + 27565 27572 27566 + 27573 27566 27572 + 27574 27566 27573 + 27566 27574 27567 + 27568 27567 27574 + 27570 27478 27477 + 27477 27575 27570 + 27571 27570 27575 + 27575 27576 27571 + 27577 27571 27576 + 27571 27577 27578 + 27578 27572 27571 + 27572 27578 27573 + 27575 27477 27579 + 27579 27580 27575 + 27575 27580 27581 + 27581 27576 27575 + 27582 27576 27581 + 27576 27582 27577 + 27583 27577 27582 + 27578 27577 27583 + 27579 27477 27483 + 27483 27488 27579 + 27584 27579 27488 + 27580 27579 27584 + 27584 27585 27580 + 27581 27580 27585 + 27585 27586 27581 + 27587 27581 27586 + 27581 27587 27582 + 27488 27588 27584 + 27589 27584 27588 + 27585 27584 27589 + 27589 27590 27585 + 27585 27590 27591 + 27591 27586 27585 + 27592 27586 27591 + 27586 27592 27587 + 27593 27588 27488 + 27588 27593 27594 + 27594 27595 27588 + 27588 27595 27589 + 27589 27595 27596 + 27596 27597 27589 + 27590 27589 27597 + 27488 27487 27593 + 27593 27487 27493 + 27493 27598 27593 + 27594 27593 27598 + 27598 27599 27594 + 27594 27599 27600 + 27600 27601 27594 + 27595 27594 27601 + 27601 27596 27595 + 27602 27598 27493 + 27598 27602 27603 + 27603 27599 27598 + 27599 27603 27604 + 27604 27600 27599 + 27493 27605 27602 + 27606 27602 27605 + 27603 27602 27606 + 27606 27607 27603 + 27603 27607 27608 + 27608 27604 27603 + 27609 27604 27608 + 27600 27604 27609 + 27492 27605 27493 + 27605 27492 27610 + 27610 27611 27605 + 27605 27611 27606 + 27612 27606 27611 + 27606 27612 27613 + 27613 27607 27606 + 27607 27613 27614 + 27614 27608 27607 + 27492 27497 27610 + 27615 27610 27497 + 27611 27610 27615 + 27615 27616 27611 + 27611 27616 27612 + 27617 27612 27616 + 27613 27612 27617 + 27617 27618 27613 + 27613 27618 27619 + 27619 27614 27613 + 27497 27502 27615 + 27615 27502 27620 + 27621 27615 27620 + 27616 27615 27621 + 27621 27622 27616 + 27616 27622 27617 + 27623 27617 27622 + 27617 27623 27624 + 27624 27618 27617 + 27502 27625 27620 + 27626 27620 27625 + 27620 27626 27627 + 27627 27628 27620 + 27620 27628 27629 + 27629 27630 27620 + 27620 27630 27621 + 27631 27625 27502 + 27632 27625 27631 + 27625 27632 27626 + 27633 27626 27632 + 27627 27626 27633 + 27502 27501 27631 + 27631 27501 27500 + 27500 27515 27631 + 27527 27631 27515 + 27631 27527 27632 + 27632 27527 27526 + 27526 27634 27632 + 27632 27634 27633 + 27635 27633 27634 + 27633 27635 27636 + 27636 27637 27633 + 27633 27637 27627 + 27531 27634 27526 + 27634 27531 27635 + 27535 27635 27531 + 27636 27635 27535 + 27535 27638 27636 + 27636 27638 27639 + 27639 27640 27636 + 27640 27641 27636 + 27637 27636 27641 + 27641 27642 27637 + 27627 27637 27642 + 27539 27638 27535 + 27638 27539 27643 + 27643 27639 27638 + 27639 27643 27644 + 27644 27645 27639 + 27639 27645 27646 + 27646 27640 27639 + 27543 27643 27539 + 27644 27643 27543 + 27543 27647 27644 + 27648 27644 27647 + 27645 27644 27648 + 27648 27649 27645 + 27645 27649 27650 + 27650 27651 27645 + 27651 27646 27645 + 27647 27543 27548 + 27647 27548 27557 + 27557 27652 27647 + 27647 27652 27648 + 27652 27653 27648 + 27654 27648 27653 + 27649 27648 27654 + 27654 27655 27649 + 27649 27655 27656 + 27656 27650 27649 + 27657 27652 27557 + 27652 27657 27658 + 27658 27653 27652 + 27658 27659 27653 + 27653 27659 27654 + 27660 27654 27659 + 27654 27660 27661 + 27655 27654 27661 + 27657 27557 27556 + 27556 27662 27657 + 27657 27662 27663 + 27663 27664 27657 + 27664 27658 27657 + 27664 27665 27658 + 27665 27659 27658 + 27659 27665 27660 + 27666 27660 27665 + 27661 27660 27666 + 27662 27556 27555 + 27555 27667 27662 + 27662 27667 27668 + 27668 27663 27662 + 27668 27669 27663 + 27663 27669 27670 + 27670 27664 27663 + 27665 27664 27670 + 27665 27670 27666 + 27667 27555 27561 + 27561 27671 27667 + 27668 27667 27671 + 27671 27672 27668 + 27673 27668 27672 + 27668 27673 27669 + 27671 27561 27560 + 27560 27674 27671 + 27671 27674 27675 + 27675 27672 27671 + 27676 27672 27675 + 27672 27676 27673 + 27677 27673 27676 + 27669 27673 27677 + 27674 27560 27569 + 27569 27678 27674 + 27675 27674 27678 + 27678 27679 27675 + 27680 27675 27679 + 27675 27680 27676 + 27676 27680 27681 + 27681 27682 27676 + 27676 27682 27677 + 27678 27569 27568 + 27568 27683 27678 + 27678 27683 27684 + 27684 27679 27678 + 27685 27679 27684 + 27679 27685 27680 + 27681 27680 27685 + 27683 27568 27686 + 27686 27687 27683 + 27684 27683 27687 + 27687 27688 27684 + 27689 27684 27688 + 27684 27689 27685 + 27574 27686 27568 + 27690 27686 27574 + 27687 27686 27690 + 27690 27691 27687 + 27687 27691 27692 + 27692 27688 27687 + 27692 27693 27688 + 27693 27694 27688 + 27688 27694 27689 + 27574 27695 27690 + 27690 27695 27696 + 27696 27697 27690 + 27697 27698 27690 + 27691 27690 27698 + 27698 27699 27691 + 27699 27692 27691 + 27573 27695 27574 + 27695 27573 27700 + 27700 27696 27695 + 27696 27700 27701 + 27696 27701 27702 + 27702 27697 27696 + 27703 27697 27702 + 27698 27697 27703 + 27704 27698 27703 + 27699 27698 27704 + 27700 27573 27578 + 27578 27705 27700 + 27701 27700 27705 + 27705 27706 27701 + 27702 27701 27706 + 27707 27702 27706 + 27703 27702 27707 + 27707 27708 27703 + 27704 27703 27708 + 27583 27705 27578 + 27706 27705 27583 + 27583 27709 27706 + 27706 27709 27710 + 27710 27711 27706 + 27706 27711 27712 + 27712 27707 27706 + 27713 27707 27712 + 27708 27707 27713 + 27709 27583 27714 + 27714 27715 27709 + 27710 27709 27715 + 27715 27716 27710 + 27717 27710 27716 + 27710 27717 27718 + 27718 27711 27710 + 27582 27714 27583 + 27719 27714 27582 + 27715 27714 27719 + 27719 27720 27715 + 27715 27720 27721 + 27721 27716 27715 + 27722 27716 27721 + 27716 27722 27717 + 27723 27717 27722 + 27718 27717 27723 + 27582 27587 27719 + 27719 27587 27592 + 27592 27724 27719 + 27720 27719 27724 + 27724 27725 27720 + 27721 27720 27725 + 27725 27726 27721 + 27727 27721 27726 + 27721 27727 27722 + 27728 27724 27592 + 27725 27724 27728 + 27728 27729 27725 + 27725 27729 27730 + 27730 27726 27725 + 27731 27726 27730 + 27726 27731 27727 + 27732 27727 27731 + 27722 27727 27732 + 27592 27733 27728 + 27728 27733 27734 + 27734 27735 27728 + 27729 27728 27735 + 27735 27736 27729 + 27730 27729 27736 + 27591 27733 27592 + 27733 27591 27737 + 27737 27734 27733 + 27734 27737 27738 + 27738 27739 27734 + 27734 27739 27740 + 27740 27735 27734 + 27736 27735 27740 + 27741 27737 27591 + 27738 27737 27741 + 27741 27742 27738 + 27738 27742 27743 + 27738 27743 27744 + 27739 27738 27744 + 27740 27739 27744 + 27591 27590 27741 + 27597 27741 27590 + 27741 27597 27745 + 27745 27742 27741 + 27742 27745 27743 + 27745 27746 27743 + 27743 27746 27747 + 27744 27743 27747 + 27748 27744 27747 + 27740 27744 27748 + 27749 27740 27748 + 27740 27749 27736 + 27745 27597 27596 + 27596 27750 27745 + 27745 27750 27746 + 27750 27751 27746 + 27751 27752 27746 + 27746 27752 27747 + 27751 27750 27596 + 27596 27601 27751 + 27751 27601 27600 + 27600 27753 27751 + 27751 27753 27752 + 27747 27752 27753 + 27753 27609 27747 + 27609 27754 27747 + 27755 27747 27754 + 27747 27755 27748 + 27609 27753 27600 + 27608 27754 27609 + 27756 27754 27608 + 27754 27756 27755 + 27756 27757 27755 + 27758 27755 27757 + 27755 27758 27748 + 27608 27614 27756 + 27756 27614 27757 + 27614 27619 27757 + 27759 27757 27619 + 27757 27759 27758 + 27758 27759 27760 + 27761 27758 27760 + 27758 27761 27748 + 27748 27761 27762 + 27762 27763 27748 + 27763 27749 27748 + 27736 27749 27763 + 27619 27764 27759 + 27759 27764 27765 + 27765 27760 27759 + 27766 27760 27765 + 27760 27766 27761 + 27766 27762 27761 + 27767 27762 27766 + 27763 27762 27767 + 27767 27768 27763 + 27763 27768 27736 + 27736 27768 27730 + 27764 27619 27618 + 27618 27624 27764 + 27765 27764 27624 + 27624 27769 27765 + 27770 27765 27769 + 27765 27770 27766 + 27766 27770 27767 + 27767 27770 27771 + 27771 27772 27767 + 27768 27767 27772 + 27772 27730 27768 + 27730 27772 27731 + 27773 27769 27624 + 27771 27769 27773 + 27769 27771 27770 + 27624 27623 27773 + 27773 27623 27774 + 27774 27775 27773 + 27776 27773 27775 + 27773 27776 27771 + 27771 27776 27731 + 27731 27772 27771 + 27622 27774 27623 + 27774 27622 27621 + 27621 27777 27774 + 27774 27777 27778 + 27778 27775 27774 + 27732 27775 27778 + 27775 27732 27776 + 27731 27776 27732 + 27777 27621 27630 + 27630 27779 27777 + 27778 27777 27779 + 27779 27780 27778 + 27781 27778 27780 + 27778 27781 27732 + 27732 27781 27722 + 27722 27781 27723 + 27779 27630 27629 + 27629 27782 27779 + 27779 27782 27783 + 27783 27780 27779 + 27723 27780 27783 + 27780 27723 27781 + 27782 27629 27784 + 27784 27785 27782 + 27783 27782 27785 + 27785 27786 27783 + 27787 27783 27786 + 27783 27787 27723 + 27723 27787 27718 + 27788 27784 27629 + 27789 27784 27788 + 27784 27789 27790 + 27790 27785 27784 + 27785 27790 27791 + 27791 27786 27785 + 27792 27786 27791 + 27786 27792 27787 + 27629 27628 27788 + 27793 27788 27628 + 27788 27793 27794 + 27794 27795 27788 + 27788 27795 27789 + 27796 27789 27795 + 27790 27789 27796 + 27628 27627 27793 + 27642 27793 27627 + 27794 27793 27642 + 27642 27797 27794 + 27798 27794 27797 + 27795 27794 27798 + 27798 27799 27795 + 27795 27799 27800 + 27800 27796 27795 + 27797 27642 27641 + 27797 27641 27640 + 27640 27801 27797 + 27797 27801 27802 + 27802 27798 27797 + 27803 27798 27802 + 27799 27798 27803 + 27803 27804 27799 + 27799 27804 27805 + 27805 27800 27799 + 27646 27801 27640 + 27801 27646 27651 + 27651 27802 27801 + 27806 27802 27651 + 27802 27806 27803 + 27807 27803 27806 + 27804 27803 27807 + 27806 27651 27650 + 27650 27808 27806 + 27806 27808 27807 + 27809 27807 27808 + 27810 27807 27809 + 27807 27810 27804 + 27811 27808 27650 + 27808 27811 27809 + 27811 27812 27809 + 27812 27813 27809 + 27810 27809 27813 + 27813 27814 27810 + 27804 27810 27814 + 27650 27656 27811 + 27811 27656 27815 + 27815 27812 27811 + 27816 27812 27815 + 27812 27816 27817 + 27817 27813 27812 + 27813 27817 27818 + 27818 27814 27813 + 27819 27815 27656 + 27816 27815 27819 + 27819 27820 27816 + 27816 27820 27821 + 27816 27821 27817 + 27818 27817 27821 + 27821 27822 27818 + 27818 27822 27823 + 27814 27818 27823 + 27824 27819 27656 + 27825 27819 27824 + 27819 27825 27820 + 27820 27825 27826 + 27826 27821 27820 + 27822 27821 27826 + 27826 27827 27822 + 27822 27827 27828 + 27822 27828 27823 + 27824 27656 27655 + 27655 27661 27824 + 27829 27824 27661 + 27824 27829 27830 + 27824 27830 27825 + 27825 27830 27831 + 27831 27826 27825 + 27827 27826 27831 + 27661 27666 27829 + 27829 27666 27669 + 27669 27832 27829 + 27830 27829 27832 + 27832 27831 27830 + 27831 27832 27677 + 27677 27833 27831 + 27831 27833 27827 + 27666 27670 27669 + 27677 27832 27669 + 27833 27677 27682 + 27682 27834 27833 + 27827 27833 27834 + 27835 27827 27834 + 27827 27835 27828 + 27836 27828 27835 + 27828 27836 27837 + 27837 27823 27828 + 27823 27837 27838 + 27823 27838 27814 + 27834 27682 27681 + 27681 27839 27834 + 27840 27834 27839 + 27834 27840 27835 + 27836 27835 27840 + 27840 27841 27836 + 27837 27836 27841 + 27837 27841 27842 + 27838 27837 27842 + 27839 27681 27843 + 27843 27844 27839 + 27845 27839 27844 + 27845 27840 27839 + 27841 27840 27845 + 27845 27846 27841 + 27841 27846 27847 + 27847 27842 27841 + 27685 27843 27681 + 27848 27843 27685 + 27848 27849 27843 + 27849 27844 27843 + 27850 27844 27849 + 27844 27850 27845 + 27846 27845 27850 + 27850 27851 27846 + 27846 27851 27852 + 27847 27846 27852 + 27685 27689 27848 + 27848 27689 27694 + 27694 27853 27848 + 27849 27848 27853 + 27853 27854 27849 + 27855 27849 27854 + 27855 27850 27849 + 27850 27855 27851 + 27851 27855 27856 + 27856 27857 27851 + 27851 27857 27852 + 27853 27694 27693 + 27858 27853 27693 + 27854 27853 27858 + 27858 27859 27854 + 27854 27859 27860 + 27860 27856 27854 + 27854 27856 27855 + 27858 27693 27861 + 27861 27862 27858 + 27859 27858 27862 + 27862 27863 27859 + 27860 27859 27863 + 27864 27860 27863 + 27857 27860 27864 + 27860 27857 27856 + 27861 27693 27692 + 27865 27861 27692 + 27866 27861 27865 + 27862 27861 27866 + 27867 27862 27866 + 27863 27862 27867 + 27699 27865 27692 + 27868 27865 27699 + 27868 27866 27865 + 27866 27868 27869 + 27869 27870 27866 + 27870 27867 27866 + 27863 27867 27870 + 27699 27704 27868 + 27869 27868 27704 + 27708 27869 27704 + 27871 27869 27708 + 27871 27870 27869 + 27870 27871 27863 + 27863 27871 27872 + 27872 27873 27863 + 27873 27864 27863 + 27874 27864 27873 + 27864 27874 27852 + 27864 27852 27857 + 27708 27713 27871 + 27871 27713 27872 + 27713 27875 27872 + 27876 27872 27875 + 27876 27877 27872 + 27872 27877 27878 + 27878 27873 27872 + 27873 27878 27879 + 27873 27879 27874 + 27712 27875 27713 + 27712 27880 27875 + 27875 27880 27876 + 27792 27876 27880 + 27877 27876 27792 + 27792 27881 27877 + 27877 27881 27882 + 27882 27883 27877 + 27883 27878 27877 + 27879 27878 27883 + 27880 27712 27711 + 27711 27718 27880 + 27880 27718 27787 + 27787 27792 27880 + 27791 27881 27792 + 27881 27791 27884 + 27884 27882 27881 + 27882 27884 27885 + 27882 27885 27886 + 27886 27883 27882 + 27883 27886 27887 + 27883 27887 27879 + 27879 27887 27888 + 27874 27879 27888 + 27884 27791 27790 + 27790 27889 27884 + 27885 27884 27889 + 27889 27890 27885 + 27886 27885 27890 + 27890 27891 27886 + 27891 27892 27886 + 27887 27886 27892 + 27892 27888 27887 + 27796 27889 27790 + 27890 27889 27796 + 27890 27796 27800 + 27800 27891 27890 + 27805 27891 27800 + 27891 27805 27893 + 27893 27892 27891 + 27888 27892 27893 + 27888 27893 27894 + 27894 27895 27888 + 27888 27895 27874 + 27852 27874 27895 + 27895 27847 27852 + 27893 27805 27804 + 27894 27893 27804 + 27838 27894 27804 + 27842 27894 27838 + 27894 27842 27847 + 27847 27895 27894 + 27814 27838 27804 + 27896 27897 27898 + 27896 27899 27897 + 27900 27897 27899 + 27897 27900 27901 + 27898 27897 27901 + 27902 27896 27898 + 27896 27902 27903 + 27903 27904 27896 + 27904 27905 27896 + 27905 27906 27896 + 27896 27906 27899 + 27898 27907 27902 + 27902 27907 27908 + 27909 27902 27908 + 27902 27909 27903 + 27910 27907 27898 + 27907 27910 27911 + 27908 27907 27911 + 27908 27911 27912 + 27912 27913 27908 + 27909 27908 27913 + 27898 27901 27910 + 27910 27901 27914 + 27914 27915 27910 + 27911 27910 27915 + 27915 27916 27911 + 27912 27911 27916 + 27917 27914 27901 + 27914 27917 27918 + 27918 27919 27914 + 27914 27919 27920 + 27920 27915 27914 + 27916 27915 27920 + 27901 27900 27917 + 27921 27917 27900 + 27918 27917 27921 + 27921 27922 27918 + 27918 27922 27923 + 27923 27924 27918 + 27919 27918 27924 + 27924 27925 27919 + 27920 27919 27925 + 27900 27926 27921 + 27927 27921 27926 + 27921 27927 27928 + 27928 27922 27921 + 27922 27928 27929 + 27929 27923 27922 + 27899 27926 27900 + 27899 27930 27926 + 27930 27931 27926 + 27926 27931 27927 + 27932 27927 27931 + 27928 27927 27932 + 27932 27933 27928 + 27928 27933 27934 + 27934 27929 27928 + 27906 27930 27899 + 27906 27935 27930 + 27931 27930 27935 + 27935 27936 27931 + 27931 27936 27932 + 27937 27932 27936 + 27932 27937 27938 + 27938 27933 27932 + 27933 27938 27939 + 27939 27934 27933 + 27906 27905 27935 + 27905 27940 27935 + 27935 27940 27941 + 27941 27936 27935 + 27936 27941 27937 + 27942 27937 27941 + 27938 27937 27942 + 27942 27943 27938 + 27938 27943 27944 + 27944 27939 27938 + 27905 27945 27940 + 27941 27940 27945 + 27945 27946 27941 + 27941 27946 27942 + 27947 27942 27946 + 27942 27947 27948 + 27948 27943 27942 + 27943 27948 27949 + 27949 27944 27943 + 27950 27945 27905 + 27945 27950 27951 + 27951 27946 27945 + 27946 27951 27947 + 27952 27947 27951 + 27948 27947 27952 + 27952 27953 27948 + 27948 27953 27954 + 27954 27949 27948 + 27905 27904 27950 + 27904 27955 27950 + 27951 27950 27955 + 27955 27956 27951 + 27951 27956 27952 + 27957 27952 27956 + 27952 27957 27958 + 27958 27953 27952 + 27953 27958 27959 + 27959 27954 27953 + 27960 27955 27904 + 27955 27960 27961 + 27961 27956 27955 + 27956 27961 27957 + 27962 27957 27961 + 27958 27957 27962 + 27962 27963 27958 + 27958 27963 27964 + 27964 27959 27958 + 27904 27903 27960 + 27903 27965 27960 + 27965 27966 27960 + 27966 27961 27960 + 27961 27966 27962 + 27967 27962 27966 + 27962 27967 27968 + 27968 27963 27962 + 27963 27968 27969 + 27969 27964 27963 + 27970 27965 27903 + 27965 27970 27971 + 27971 27966 27965 + 27966 27971 27967 + 27972 27967 27971 + 27968 27967 27972 + 27972 27973 27968 + 27969 27968 27973 + 27903 27974 27970 + 27974 27975 27970 + 27971 27970 27975 + 27975 27976 27971 + 27971 27976 27972 + 27977 27972 27976 + 27972 27977 27978 + 27978 27973 27972 + 27979 27974 27903 + 27974 27979 27980 + 27980 27975 27974 + 27975 27980 27981 + 27981 27976 27975 + 27976 27981 27977 + 27982 27977 27981 + 27978 27977 27982 + 27909 27979 27903 + 27979 27909 27983 + 27979 27983 27980 + 27981 27980 27983 + 27983 27984 27981 + 27981 27984 27982 + 27985 27982 27984 + 27982 27985 27986 + 27986 27987 27982 + 27982 27987 27978 + 27909 27913 27983 + 27983 27913 27912 + 27983 27912 27984 + 27984 27912 27985 + 27916 27985 27912 + 27986 27985 27916 + 27916 27988 27986 + 27986 27988 27989 + 27989 27990 27986 + 27987 27986 27990 + 27990 27991 27987 + 27978 27987 27991 + 27991 27992 27978 + 27973 27978 27992 + 27920 27988 27916 + 27988 27920 27993 + 27993 27989 27988 + 27989 27993 27994 + 27994 27995 27989 + 27989 27995 27996 + 27996 27990 27989 + 27990 27996 27997 + 27997 27991 27990 + 27925 27993 27920 + 27994 27993 27925 + 27925 27998 27994 + 27994 27998 27999 + 27999 28000 27994 + 27995 27994 28000 + 28000 28001 27995 + 27996 27995 28001 + 28002 27996 28001 + 27997 27996 28002 + 28003 27998 27925 + 27998 28003 28004 + 28004 27999 27998 + 27999 28004 28005 + 28005 28006 27999 + 27999 28006 28007 + 28007 28000 27999 + 28001 28000 28007 + 27925 27924 28003 + 28003 27924 27923 + 27923 28008 28003 + 28003 28008 28009 + 28009 28004 28003 + 28005 28004 28009 + 28009 28010 28005 + 28011 28005 28010 + 28006 28005 28011 + 28011 28012 28006 + 28007 28006 28012 + 28013 28008 27923 + 28008 28013 28014 + 28014 28009 28008 + 28009 28014 28015 + 28015 28010 28009 + 28010 28015 28016 + 28016 28017 28010 + 28010 28017 28011 + 27923 27929 28013 + 28013 27929 27934 + 27934 28018 28013 + 28013 28018 28019 + 28019 28014 28013 + 28015 28014 28019 + 28019 28020 28015 + 28016 28015 28020 + 28021 28018 27934 + 28018 28021 28022 + 28022 28019 28018 + 28019 28022 28023 + 28023 28020 28019 + 28020 28023 28024 + 28024 28025 28020 + 28020 28025 28016 + 27934 27939 28021 + 28021 27939 27944 + 27944 28026 28021 + 28021 28026 28027 + 28027 28022 28021 + 28023 28022 28027 + 28027 28028 28023 + 28023 28028 28029 + 28024 28023 28029 + 28030 28026 27944 + 28026 28030 28031 + 28031 28027 28026 + 28027 28031 28032 + 28032 28028 28027 + 28028 28032 28033 + 28033 28029 28028 + 27944 27949 28030 + 28030 27949 27954 + 27954 28034 28030 + 28030 28034 28035 + 28035 28031 28030 + 28032 28031 28035 + 28035 28036 28032 + 28032 28036 28037 + 28037 28033 28032 + 28038 28033 28037 + 28029 28033 28038 + 28039 28034 27954 + 28034 28039 28040 + 28040 28035 28034 + 28035 28040 28041 + 28041 28036 28035 + 28036 28041 28042 + 28042 28037 28036 + 27954 27959 28039 + 28039 27959 27964 + 27964 28043 28039 + 28039 28043 28044 + 28044 28045 28039 + 28045 28040 28039 + 28041 28040 28045 + 28045 28046 28041 + 28041 28046 28047 + 28047 28042 28041 + 28043 27964 27969 + 27969 28048 28043 + 28043 28048 28049 + 28049 28050 28043 + 28043 28050 28044 + 28048 27969 28051 + 28051 28052 28048 + 28049 28048 28052 + 28052 28053 28049 + 28054 28049 28053 + 28049 28054 28055 + 28055 28050 28049 + 27973 28051 27969 + 27992 28051 27973 + 28052 28051 27992 + 27992 28056 28052 + 28052 28056 28057 + 28057 28053 28052 + 28058 28053 28057 + 28053 28058 28054 + 28054 28058 28059 + 28059 28060 28054 + 28055 28054 28060 + 28056 27992 27991 + 27991 27997 28056 + 27997 28061 28056 + 28061 28057 28056 + 28062 28057 28061 + 28057 28062 28058 + 28058 28062 28063 + 28063 28059 28058 + 28002 28061 27997 + 28064 28061 28002 + 28061 28064 28062 + 28063 28062 28064 + 28064 28065 28063 + 28066 28063 28065 + 28059 28063 28066 + 28066 28067 28059 + 28059 28067 28068 + 28068 28060 28059 + 28002 28069 28064 + 28064 28069 28070 + 28070 28065 28064 + 28065 28070 28071 + 28071 28072 28065 + 28065 28072 28066 + 28069 28002 28073 + 28073 28074 28069 + 28070 28069 28074 + 28074 28075 28070 + 28071 28070 28075 + 28073 28002 28001 + 28001 28076 28073 + 28077 28073 28076 + 28073 28077 28078 + 28078 28074 28073 + 28074 28078 28079 + 28079 28075 28074 + 28080 28076 28001 + 28081 28076 28080 + 28076 28081 28077 + 28082 28077 28081 + 28078 28077 28082 + 28082 28083 28078 + 28078 28083 28084 + 28084 28079 28078 + 28001 28085 28080 + 28080 28085 28086 + 28086 28087 28080 + 28088 28080 28087 + 28080 28088 28081 + 28007 28085 28001 + 28085 28007 28089 + 28089 28086 28085 + 28090 28086 28089 + 28086 28090 28091 + 28091 28087 28086 + 28087 28091 28092 + 28092 28093 28087 + 28087 28093 28088 + 28012 28089 28007 + 28094 28089 28012 + 28089 28094 28090 + 28090 28094 28095 + 28095 28096 28090 + 28090 28096 28097 + 28097 28091 28090 + 28092 28091 28097 + 28012 28098 28094 + 28095 28094 28098 + 28098 28099 28095 + 28100 28095 28099 + 28095 28100 28101 + 28101 28096 28095 + 28096 28101 28102 + 28102 28097 28096 + 28098 28012 28011 + 28011 28103 28098 + 28098 28103 28104 + 28104 28099 28098 + 28105 28099 28104 + 28099 28105 28100 + 28106 28100 28105 + 28101 28100 28106 + 28103 28011 28017 + 28017 28107 28103 + 28104 28103 28107 + 28108 28104 28107 + 28109 28104 28108 + 28104 28109 28105 + 28105 28109 28110 + 28110 28111 28105 + 28105 28111 28106 + 28107 28017 28016 + 28107 28016 28112 + 28112 28113 28107 + 28107 28113 28108 + 28114 28108 28113 + 28108 28114 28115 + 28108 28115 28109 + 28116 28109 28115 + 28116 28110 28109 + 28025 28112 28016 + 28117 28112 28025 + 28113 28112 28117 + 28113 28117 28114 + 28118 28114 28117 + 28115 28114 28118 + 28118 28119 28115 + 28115 28119 28116 + 28120 28116 28119 + 28121 28116 28120 + 28116 28121 28110 + 28025 28122 28117 + 28117 28122 28118 + 28122 28123 28118 + 28124 28118 28123 + 28118 28124 28119 + 28119 28124 28120 + 28125 28120 28124 + 28120 28125 28126 + 28121 28120 28126 + 28127 28122 28025 + 28122 28127 28128 + 28128 28123 28122 + 28123 28128 28129 + 28129 28130 28123 + 28123 28130 28124 + 28130 28125 28124 + 28131 28125 28130 + 28126 28125 28131 + 28025 28024 28127 + 28127 28024 28132 + 28132 28133 28127 + 28128 28127 28133 + 28134 28128 28133 + 28134 28135 28128 + 28135 28129 28128 + 28131 28129 28135 + 28130 28129 28131 + 28029 28132 28024 + 28136 28132 28029 + 28132 28136 28133 + 28133 28136 28137 + 28137 28138 28133 + 28133 28138 28134 + 28139 28134 28138 + 28135 28134 28139 + 28029 28038 28136 + 28136 28038 28140 + 28137 28136 28140 + 28140 28141 28137 + 28142 28137 28141 + 28138 28137 28142 + 28138 28142 28139 + 28037 28140 28038 + 28143 28140 28037 + 28140 28143 28144 + 28144 28141 28140 + 28141 28144 28145 + 28145 28146 28141 + 28141 28146 28142 + 28139 28142 28146 + 28037 28042 28143 + 28143 28042 28047 + 28047 28147 28143 + 28144 28143 28147 + 28147 28148 28144 + 28148 28149 28144 + 28145 28144 28149 + 28149 28150 28145 + 28151 28145 28150 + 28146 28145 28151 + 28147 28047 28152 + 28152 28153 28147 + 28147 28153 28154 + 28154 28148 28147 + 28148 28154 28155 + 28148 28155 28156 + 28156 28149 28148 + 28149 28156 28150 + 28152 28047 28046 + 28046 28157 28152 + 28158 28152 28157 + 28153 28152 28158 + 28158 28159 28153 + 28154 28153 28159 + 28159 28160 28154 + 28155 28154 28160 + 28160 28161 28155 + 28156 28155 28161 + 28157 28046 28045 + 28045 28162 28157 + 28157 28162 28163 + 28163 28164 28157 + 28157 28164 28158 + 28165 28158 28164 + 28158 28165 28166 + 28166 28159 28158 + 28162 28045 28044 + 28044 28167 28162 + 28163 28162 28167 + 28167 28168 28163 + 28169 28163 28168 + 28163 28169 28170 + 28170 28164 28163 + 28164 28170 28165 + 28171 28165 28170 + 28166 28165 28171 + 28167 28044 28172 + 28172 28173 28167 + 28167 28173 28174 + 28174 28168 28167 + 28175 28168 28174 + 28168 28175 28169 + 28176 28169 28175 + 28170 28169 28176 + 28172 28044 28050 + 28050 28055 28172 + 28172 28055 28177 + 28177 28178 28172 + 28173 28172 28178 + 28178 28179 28173 + 28174 28173 28179 + 28179 28180 28174 + 28181 28174 28180 + 28174 28181 28175 + 28060 28177 28055 + 28177 28060 28068 + 28068 28182 28177 + 28177 28182 28183 + 28183 28178 28177 + 28179 28178 28183 + 28183 28184 28179 + 28179 28184 28185 + 28185 28180 28179 + 28186 28180 28185 + 28180 28186 28181 + 28182 28068 28187 + 28187 28188 28182 + 28183 28182 28188 + 28188 28189 28183 + 28183 28189 28190 + 28184 28183 28190 + 28185 28184 28190 + 28191 28187 28068 + 28192 28187 28191 + 28192 28193 28187 + 28193 28188 28187 + 28188 28193 28194 + 28194 28189 28188 + 28194 28195 28189 + 28195 28190 28189 + 28068 28067 28191 + 28196 28191 28067 + 28191 28196 28197 + 28197 28198 28191 + 28191 28198 28192 + 28199 28192 28198 + 28199 28200 28192 + 28200 28193 28192 + 28200 28194 28193 + 28067 28066 28196 + 28201 28196 28066 + 28197 28196 28201 + 28201 28202 28197 + 28203 28197 28202 + 28203 28199 28197 + 28199 28198 28197 + 28066 28072 28201 + 28204 28201 28072 + 28201 28204 28205 + 28205 28202 28201 + 28202 28205 28206 + 28206 28203 28202 + 28199 28203 28206 + 28200 28199 28206 + 28207 28200 28206 + 28200 28207 28194 + 28207 28195 28194 + 28208 28195 28207 + 28190 28195 28208 + 28072 28071 28204 + 28209 28204 28071 + 28205 28204 28209 + 28209 28210 28205 + 28206 28205 28210 + 28211 28206 28210 + 28206 28211 28212 + 28212 28207 28206 + 28207 28212 28208 + 28071 28213 28209 + 28214 28209 28213 + 28209 28214 28215 + 28215 28210 28209 + 28210 28215 28211 + 28211 28215 28216 + 28217 28211 28216 + 28211 28217 28212 + 28075 28213 28071 + 28218 28213 28075 + 28213 28218 28214 + 28219 28214 28218 + 28215 28214 28219 + 28219 28216 28215 + 28220 28216 28219 + 28216 28220 28217 + 28217 28220 28221 + 28222 28217 28221 + 28217 28222 28212 + 28075 28079 28218 + 28218 28079 28084 + 28084 28223 28218 + 28218 28223 28219 + 28224 28219 28223 + 28219 28224 28220 + 28220 28224 28225 + 28225 28221 28220 + 28226 28221 28225 + 28221 28226 28222 + 28227 28223 28084 + 28223 28227 28224 + 28225 28224 28227 + 28227 28228 28225 + 28229 28225 28228 + 28225 28229 28226 + 28226 28229 28230 + 28230 28231 28226 + 28222 28226 28231 + 28084 28232 28227 + 28227 28232 28233 + 28233 28228 28227 + 28234 28228 28233 + 28228 28234 28229 + 28230 28229 28234 + 28232 28084 28083 + 28083 28235 28232 + 28233 28232 28235 + 28235 28236 28233 + 28237 28233 28236 + 28233 28237 28234 + 28234 28237 28238 + 28238 28239 28234 + 28234 28239 28230 + 28235 28083 28082 + 28082 28240 28235 + 28235 28240 28241 + 28241 28236 28235 + 28242 28236 28241 + 28236 28242 28237 + 28238 28237 28242 + 28240 28082 28243 + 28243 28244 28240 + 28241 28240 28244 + 28244 28245 28241 + 28246 28241 28245 + 28241 28246 28242 + 28081 28243 28082 + 28247 28243 28081 + 28244 28243 28247 + 28247 28248 28244 + 28244 28248 28249 + 28249 28245 28244 + 28250 28245 28249 + 28245 28250 28246 + 28251 28246 28250 + 28242 28246 28251 + 28081 28088 28247 + 28247 28088 28093 + 28093 28252 28247 + 28248 28247 28252 + 28252 28253 28248 + 28249 28248 28253 + 28253 28254 28249 + 28255 28249 28254 + 28249 28255 28250 + 28256 28252 28093 + 28252 28256 28257 + 28257 28253 28252 + 28253 28257 28258 + 28258 28254 28253 + 28259 28254 28258 + 28254 28259 28255 + 28260 28255 28259 + 28250 28255 28260 + 28093 28092 28256 + 28261 28256 28092 + 28257 28256 28261 + 28261 28262 28257 + 28257 28262 28263 + 28263 28264 28257 + 28264 28258 28257 + 28258 28264 28265 + 28259 28258 28265 + 28092 28266 28261 + 28267 28261 28266 + 28261 28267 28268 + 28268 28262 28261 + 28262 28268 28269 + 28269 28263 28262 + 28097 28266 28092 + 28270 28266 28097 + 28266 28270 28267 + 28271 28267 28270 + 28268 28267 28271 + 28271 28272 28268 + 28268 28272 28273 + 28273 28269 28268 + 28097 28102 28270 + 28270 28102 28274 + 28274 28275 28270 + 28270 28275 28271 + 28276 28271 28275 + 28271 28276 28277 + 28277 28272 28271 + 28272 28277 28278 + 28278 28273 28272 + 28274 28102 28101 + 28101 28279 28274 + 28279 28280 28274 + 28280 28281 28274 + 28274 28281 28275 + 28281 28282 28275 + 28275 28282 28276 + 28106 28279 28101 + 28106 28283 28279 + 28283 28280 28279 + 28280 28283 28284 + 28284 28285 28280 + 28280 28285 28281 + 28285 28286 28281 + 28282 28281 28286 + 28286 28287 28282 + 28282 28287 28276 + 28288 28283 28106 + 28284 28283 28288 + 28288 28289 28284 + 28290 28284 28289 + 28284 28290 28291 + 28291 28285 28284 + 28285 28291 28292 + 28292 28286 28285 + 28286 28292 28287 + 28111 28288 28106 + 28293 28288 28111 + 28288 28293 28294 + 28294 28289 28288 + 28295 28289 28294 + 28289 28295 28290 + 28110 28293 28111 + 28121 28293 28110 + 28294 28293 28121 + 28121 28126 28294 + 28126 28296 28294 + 28297 28294 28296 + 28294 28297 28295 + 28295 28297 28298 + 28298 28299 28295 + 28295 28299 28290 + 28300 28296 28126 + 28301 28296 28300 + 28296 28301 28297 + 28301 28302 28297 + 28302 28298 28297 + 28298 28302 28303 + 28304 28298 28303 + 28304 28299 28298 + 28126 28131 28300 + 28305 28300 28131 + 28301 28300 28305 + 28305 28302 28301 + 28303 28302 28305 + 28306 28303 28305 + 28303 28306 28307 + 28307 28304 28303 + 28308 28304 28307 + 28304 28308 28299 + 28309 28305 28131 + 28309 28306 28305 + 28309 28310 28306 + 28306 28310 28311 + 28311 28307 28306 + 28307 28311 28312 + 28312 28313 28307 + 28307 28313 28308 + 28135 28309 28131 + 28310 28309 28135 + 28135 28314 28310 + 28310 28314 28315 + 28315 28311 28310 + 28312 28311 28315 + 28315 28151 28312 + 28312 28151 28150 + 28316 28312 28150 + 28313 28312 28316 + 28139 28314 28135 + 28314 28139 28317 + 28317 28315 28314 + 28315 28317 28151 + 28151 28317 28146 + 28146 28317 28139 + 28316 28318 28313 + 28316 28319 28318 + 28318 28319 28320 + 28318 28320 28308 + 28308 28313 28318 + 28319 28316 28321 + 28321 28322 28319 + 28323 28319 28322 + 28319 28323 28320 + 28324 28320 28323 + 28320 28324 28299 + 28299 28308 28320 + 28321 28316 28150 + 28150 28325 28321 + 28326 28321 28325 + 28322 28321 28326 + 28326 28327 28322 + 28322 28327 28328 + 28322 28328 28323 + 28323 28328 28329 + 28324 28323 28329 + 28330 28325 28150 + 28325 28330 28331 + 28325 28331 28326 + 28326 28331 28332 + 28333 28326 28332 + 28327 28326 28333 + 28150 28156 28330 + 28334 28330 28156 + 28334 28332 28330 + 28332 28331 28330 + 28161 28334 28156 + 28335 28334 28161 + 28332 28334 28335 + 28332 28335 28336 + 28336 28337 28332 + 28332 28337 28333 + 28338 28333 28337 + 28339 28333 28338 + 28333 28339 28327 + 28161 28340 28335 + 28335 28340 28166 + 28336 28335 28166 + 28166 28341 28336 + 28342 28336 28341 + 28337 28336 28342 + 28337 28342 28338 + 28161 28160 28340 + 28340 28160 28159 + 28159 28166 28340 + 28171 28341 28166 + 28343 28341 28171 + 28341 28343 28342 + 28342 28343 28344 + 28338 28342 28344 + 28345 28338 28344 + 28339 28338 28345 + 28345 28346 28339 + 28339 28346 28347 + 28339 28347 28327 + 28343 28171 28348 + 28348 28344 28343 + 28344 28348 28349 + 28344 28349 28350 + 28350 28351 28344 + 28344 28351 28352 + 28352 28345 28344 + 28353 28348 28171 + 28349 28348 28353 + 28353 28260 28349 + 28349 28260 28259 + 28259 28265 28349 + 28265 28350 28349 + 28354 28350 28265 + 28351 28350 28354 + 28170 28353 28171 + 28176 28353 28170 + 28260 28353 28176 + 28176 28355 28260 + 28260 28355 28250 + 28250 28355 28251 + 28355 28176 28356 + 28356 28251 28355 + 28251 28356 28357 + 28357 28358 28251 + 28251 28358 28242 + 28242 28358 28238 + 28175 28356 28176 + 28357 28356 28175 + 28175 28181 28357 + 28357 28181 28186 + 28186 28359 28357 + 28358 28357 28359 + 28359 28238 28358 + 28238 28359 28360 + 28360 28239 28238 + 28239 28360 28361 + 28361 28230 28239 + 28360 28359 28186 + 28186 28362 28360 + 28360 28362 28363 + 28363 28361 28360 + 28364 28361 28363 + 28230 28361 28364 + 28364 28231 28230 + 28222 28231 28364 + 28212 28222 28364 + 28185 28362 28186 + 28362 28185 28365 + 28365 28363 28362 + 28363 28365 28208 + 28208 28366 28363 + 28363 28366 28364 + 28212 28364 28366 + 28212 28366 28208 + 28190 28365 28185 + 28208 28365 28190 + 28299 28324 28290 + 28324 28329 28290 + 28291 28290 28329 + 28329 28367 28291 + 28291 28367 28292 + 28367 28368 28292 + 28369 28292 28368 + 28292 28369 28287 + 28367 28329 28328 + 28370 28367 28328 + 28368 28367 28370 + 28347 28368 28370 + 28347 28371 28368 + 28368 28371 28369 + 28369 28371 28372 + 28287 28369 28372 + 28372 28373 28287 + 28287 28373 28276 + 28327 28370 28328 + 28347 28370 28327 + 28277 28276 28373 + 28373 28374 28277 + 28277 28374 28278 + 28374 28375 28278 + 28376 28278 28375 + 28273 28278 28376 + 28352 28374 28373 + 28374 28352 28377 + 28377 28375 28374 + 28378 28375 28377 + 28375 28378 28376 + 28373 28372 28352 + 28352 28372 28379 + 28379 28345 28352 + 28379 28346 28345 + 28347 28346 28379 + 28371 28347 28379 + 28371 28379 28372 + 28376 28378 28380 + 28381 28380 28378 + 28382 28380 28381 + 28376 28380 28382 + 28383 28376 28382 + 28376 28383 28273 + 28269 28273 28383 + 28384 28269 28383 + 28384 28263 28269 + 28378 28377 28381 + 28381 28377 28352 + 28351 28381 28352 + 28382 28381 28351 + 28351 28354 28382 + 28382 28354 28385 + 28385 28384 28382 + 28384 28383 28382 + 28265 28385 28354 + 28265 28264 28385 + 28385 28264 28263 + 28263 28384 28385 + 28386 28387 28388 + 28387 28386 28389 + 28390 28387 28389 + 28391 28387 28390 + 28387 28391 28392 + 28392 28388 28387 + 28388 28393 28386 + 28394 28386 28393 + 28386 28394 28395 + 28395 28389 28386 + 28388 28396 28393 + 28396 28397 28393 + 28398 28393 28397 + 28393 28398 28394 + 28399 28394 28398 + 28394 28399 28400 + 28395 28394 28400 + 28401 28396 28388 + 28396 28401 28402 + 28402 28403 28396 + 28397 28396 28403 + 28403 28404 28397 + 28405 28397 28404 + 28397 28405 28398 + 28388 28392 28401 + 28401 28392 28406 + 28402 28401 28406 + 28406 28407 28402 + 28408 28402 28407 + 28403 28402 28408 + 28408 28409 28403 + 28403 28409 28410 + 28410 28404 28403 + 28392 28411 28406 + 28411 28412 28406 + 28412 28413 28406 + 28406 28413 28414 + 28414 28407 28406 + 28411 28392 28391 + 28391 28415 28411 + 28415 28416 28411 + 28416 28412 28411 + 28412 28416 28417 + 28418 28412 28417 + 28413 28412 28418 + 28415 28391 28419 + 28420 28415 28419 + 28420 28416 28415 + 28420 28421 28416 + 28416 28421 28422 + 28422 28417 28416 + 28422 28423 28417 + 28417 28423 28418 + 28390 28419 28391 + 28419 28390 28424 + 28424 28425 28419 + 28420 28419 28425 + 28421 28420 28425 + 28425 28426 28421 + 28422 28421 28426 + 28426 28427 28422 + 28427 28428 28422 + 28422 28428 28423 + 28424 28390 28389 + 28429 28424 28389 + 28427 28424 28429 + 28425 28424 28427 + 28427 28426 28425 + 28389 28430 28429 + 28430 28431 28429 + 28431 28432 28429 + 28429 28432 28433 + 28429 28433 28427 + 28428 28427 28433 + 28433 28434 28428 + 28423 28428 28434 + 28430 28389 28395 + 28435 28430 28395 + 28430 28435 28436 + 28436 28431 28430 + 28431 28436 28437 + 28432 28431 28437 + 28437 28438 28432 + 28438 28434 28432 + 28434 28433 28432 + 28395 28400 28435 + 28435 28400 28439 + 28436 28435 28439 + 28439 28440 28436 + 28436 28440 28437 + 28437 28440 28441 + 28437 28441 28442 + 28442 28438 28437 + 28438 28442 28443 + 28434 28438 28443 + 28434 28443 28423 + 28439 28400 28399 + 28439 28399 28444 + 28439 28444 28445 + 28445 28440 28439 + 28440 28445 28441 + 28441 28445 28446 + 28446 28447 28441 + 28447 28442 28441 + 28442 28447 28448 + 28443 28442 28448 + 28444 28399 28449 + 28449 28450 28444 + 28444 28450 28451 + 28451 28445 28444 + 28445 28451 28446 + 28446 28451 28452 + 28446 28452 28453 + 28453 28447 28446 + 28398 28449 28399 + 28398 28405 28449 + 28405 28454 28449 + 28450 28449 28454 + 28454 28455 28450 + 28450 28455 28451 + 28455 28456 28451 + 28451 28456 28452 + 28454 28405 28457 + 28457 28458 28454 + 28455 28454 28458 + 28458 28459 28455 + 28456 28455 28459 + 28459 28460 28456 + 28452 28456 28460 + 28404 28457 28405 + 28457 28404 28410 + 28410 28461 28457 + 28457 28461 28462 + 28462 28458 28457 + 28459 28458 28462 + 28462 28463 28459 + 28459 28463 28464 + 28464 28460 28459 + 28465 28460 28464 + 28460 28465 28452 + 28461 28410 28466 + 28466 28467 28461 + 28462 28461 28467 + 28467 28468 28462 + 28463 28462 28468 + 28468 28469 28463 + 28464 28463 28469 + 28470 28466 28410 + 28471 28466 28470 + 28467 28466 28471 + 28471 28472 28467 + 28467 28472 28473 + 28473 28468 28467 + 28468 28473 28469 + 28410 28409 28470 + 28474 28470 28409 + 28470 28474 28475 + 28475 28476 28470 + 28470 28476 28471 + 28471 28476 28477 + 28472 28471 28477 + 28409 28408 28474 + 28478 28474 28408 + 28475 28474 28478 + 28478 28479 28475 + 28475 28479 28480 + 28480 28481 28475 + 28481 28482 28475 + 28476 28475 28482 + 28408 28483 28478 + 28484 28478 28483 + 28478 28484 28485 + 28485 28479 28478 + 28486 28479 28485 + 28479 28486 28480 + 28407 28483 28408 + 28487 28483 28407 + 28483 28487 28484 + 28488 28484 28487 + 28485 28484 28488 + 28488 28489 28485 + 28485 28489 28490 + 28490 28486 28485 + 28407 28414 28487 + 28487 28414 28491 + 28491 28492 28487 + 28487 28492 28488 + 28493 28488 28492 + 28488 28493 28494 + 28494 28489 28488 + 28495 28489 28494 + 28489 28495 28490 + 28491 28414 28413 + 28413 28496 28491 + 28496 28497 28491 + 28497 28498 28491 + 28491 28498 28499 + 28499 28492 28491 + 28492 28499 28493 + 28500 28493 28499 + 28494 28493 28500 + 28418 28496 28413 + 28418 28501 28496 + 28501 28497 28496 + 28497 28501 28448 + 28448 28502 28497 + 28498 28497 28502 + 28503 28498 28502 + 28499 28498 28503 + 28503 28504 28499 + 28499 28504 28500 + 28423 28501 28418 + 28501 28423 28443 + 28448 28501 28443 + 28448 28447 28502 + 28447 28453 28502 + 28502 28453 28503 + 28453 28505 28503 + 28503 28505 28504 + 28505 28506 28504 + 28504 28506 28507 + 28507 28500 28504 + 28500 28507 28508 + 28508 28509 28500 + 28500 28509 28494 + 28505 28453 28452 + 28465 28505 28452 + 28506 28505 28465 + 28465 28510 28506 + 28507 28506 28510 + 28510 28511 28507 + 28508 28507 28511 + 28464 28510 28465 + 28510 28464 28512 + 28512 28511 28510 + 28511 28512 28513 + 28513 28514 28511 + 28511 28514 28508 + 28512 28464 28469 + 28469 28515 28512 + 28513 28512 28515 + 28515 28516 28513 + 28513 28516 28517 + 28517 28518 28513 + 28514 28513 28518 + 28518 28519 28514 + 28508 28514 28519 + 28520 28515 28469 + 28516 28515 28520 + 28516 28520 28521 + 28521 28517 28516 + 28517 28521 28522 + 28522 28523 28517 + 28517 28523 28524 + 28524 28518 28517 + 28469 28473 28520 + 28521 28520 28473 + 28525 28521 28473 + 28522 28521 28525 + 28525 28526 28522 + 28522 28526 28527 + 28527 28528 28522 + 28528 28529 28522 + 28523 28522 28529 + 28530 28525 28473 + 28531 28525 28530 + 28531 28526 28525 + 28526 28531 28532 + 28532 28527 28526 + 28533 28527 28532 + 28528 28527 28533 + 28534 28530 28473 + 28535 28530 28534 + 28536 28530 28535 + 28530 28536 28531 + 28531 28536 28537 + 28532 28531 28537 + 28537 28538 28532 + 28533 28532 28538 + 28473 28472 28534 + 28472 28539 28534 + 28539 28540 28534 + 28541 28534 28540 + 28542 28534 28541 + 28534 28542 28535 + 28477 28539 28472 + 28539 28477 28543 + 28543 28544 28539 + 28539 28544 28545 + 28545 28540 28539 + 28546 28540 28545 + 28540 28546 28541 + 28543 28477 28547 + 28547 28548 28543 + 28543 28548 28549 + 28549 28550 28543 + 28544 28543 28550 + 28550 28551 28544 + 28545 28544 28551 + 28476 28547 28477 + 28482 28547 28476 + 28547 28482 28552 + 28552 28548 28547 + 28548 28552 28553 + 28553 28549 28548 + 28549 28553 28554 + 28554 28555 28549 + 28549 28555 28556 + 28556 28550 28549 + 28552 28482 28481 + 28481 28557 28552 + 28553 28552 28557 + 28557 28558 28553 + 28554 28553 28558 + 28559 28557 28481 + 28557 28559 28560 + 28560 28558 28557 + 28558 28560 28561 + 28561 28562 28558 + 28558 28562 28554 + 28481 28563 28559 + 28559 28563 28564 + 28564 28565 28559 + 28559 28565 28566 + 28566 28560 28559 + 28561 28560 28566 + 28563 28481 28480 + 28480 28567 28563 + 28564 28563 28567 + 28567 28568 28564 + 28569 28564 28568 + 28570 28564 28569 + 28570 28565 28564 + 28565 28570 28571 + 28571 28566 28565 + 28567 28480 28572 + 28572 28573 28567 + 28567 28573 28574 + 28574 28568 28567 + 28575 28568 28574 + 28568 28575 28569 + 28572 28480 28486 + 28486 28576 28572 + 28572 28576 28577 + 28577 28578 28572 + 28573 28572 28578 + 28578 28579 28573 + 28574 28573 28579 + 28580 28576 28486 + 28576 28580 28581 + 28581 28577 28576 + 28577 28581 28582 + 28582 28583 28577 + 28577 28583 28584 + 28584 28578 28577 + 28579 28578 28584 + 28486 28490 28580 + 28580 28490 28495 + 28495 28585 28580 + 28580 28585 28586 + 28586 28581 28580 + 28582 28581 28586 + 28586 28587 28582 + 28588 28582 28587 + 28583 28582 28588 + 28588 28589 28583 + 28584 28583 28589 + 28590 28585 28495 + 28585 28590 28591 + 28591 28586 28585 + 28587 28586 28591 + 28592 28587 28591 + 28587 28592 28593 + 28593 28594 28587 + 28587 28594 28588 + 28495 28595 28590 + 28590 28595 28596 + 28596 28597 28590 + 28590 28597 28598 + 28598 28591 28590 + 28592 28591 28598 + 28595 28495 28494 + 28595 28494 28599 + 28596 28595 28599 + 28599 28600 28596 + 28600 28601 28596 + 28602 28596 28601 + 28597 28596 28602 + 28597 28602 28603 + 28603 28598 28597 + 28494 28509 28599 + 28604 28599 28509 + 28599 28604 28605 + 28605 28606 28599 + 28599 28606 28607 + 28607 28600 28599 + 28509 28508 28604 + 28608 28604 28508 + 28605 28604 28608 + 28608 28609 28605 + 28610 28605 28609 + 28606 28605 28610 + 28610 28611 28606 + 28607 28606 28611 + 28519 28608 28508 + 28612 28608 28519 + 28608 28612 28609 + 28609 28612 28613 + 28613 28614 28609 + 28609 28614 28610 + 28615 28610 28614 + 28610 28615 28616 + 28616 28611 28610 + 28519 28617 28612 + 28613 28612 28617 + 28617 28618 28613 + 28619 28613 28618 + 28613 28619 28620 + 28620 28614 28613 + 28614 28620 28615 + 28617 28519 28518 + 28518 28524 28617 + 28617 28524 28621 + 28621 28618 28617 + 28622 28618 28621 + 28618 28622 28619 + 28619 28622 28623 + 28620 28619 28623 + 28623 28624 28620 + 28615 28620 28624 + 28624 28625 28615 + 28616 28615 28625 + 28626 28621 28524 + 28627 28621 28626 + 28621 28627 28622 + 28622 28627 28628 + 28628 28623 28622 + 28623 28628 28629 + 28624 28623 28629 + 28624 28629 28630 + 28630 28625 28624 + 28524 28523 28626 + 28523 28631 28626 + 28632 28626 28631 + 28626 28632 28633 + 28626 28633 28627 + 28628 28627 28633 + 28633 28634 28628 + 28634 28635 28628 + 28635 28629 28628 + 28529 28631 28523 + 28636 28631 28529 + 28631 28636 28632 + 28636 28529 28637 + 28632 28636 28637 + 28637 28638 28632 + 28638 28639 28632 + 28639 28640 28632 + 28640 28641 28632 + 28633 28632 28641 + 28641 28634 28633 + 28529 28528 28637 + 28637 28528 28642 + 28637 28642 28638 + 28642 28643 28638 + 28638 28643 28644 + 28638 28644 28645 + 28645 28639 28638 + 28639 28645 28646 + 28640 28639 28646 + 28642 28528 28533 + 28643 28642 28533 + 28533 28647 28643 + 28644 28643 28647 + 28647 28648 28644 + 28645 28644 28648 + 28649 28645 28648 + 28646 28645 28649 + 28538 28647 28533 + 28647 28538 28650 + 28650 28648 28647 + 28648 28650 28651 + 28651 28649 28648 + 28649 28651 28652 + 28652 28653 28649 + 28649 28653 28646 + 28650 28538 28537 + 28537 28654 28650 + 28650 28654 28655 + 28655 28651 28650 + 28652 28651 28655 + 28655 28656 28652 + 28657 28652 28656 + 28653 28652 28657 + 28657 28658 28653 + 28646 28653 28658 + 28654 28537 28659 + 28654 28659 28660 + 28660 28661 28654 + 28654 28661 28655 + 28662 28655 28661 + 28655 28662 28663 + 28663 28656 28655 + 28659 28537 28536 + 28536 28535 28659 + 28660 28659 28535 + 28535 28542 28660 + 28664 28660 28542 + 28660 28664 28665 + 28665 28661 28660 + 28661 28665 28662 + 28666 28662 28665 + 28663 28662 28666 + 28666 28667 28663 + 28668 28663 28667 + 28656 28663 28668 + 28542 28669 28664 + 28664 28669 28670 + 28670 28671 28664 + 28665 28664 28671 + 28671 28672 28665 + 28665 28672 28666 + 28541 28669 28542 + 28669 28541 28673 + 28673 28670 28669 + 28670 28673 28674 + 28670 28674 28675 + 28675 28671 28670 + 28671 28675 28676 + 28676 28672 28671 + 28672 28676 28677 + 28677 28666 28672 + 28673 28541 28678 + 28678 28679 28673 + 28679 28680 28673 + 28674 28673 28680 + 28680 28681 28674 + 28675 28674 28681 + 28541 28546 28678 + 28682 28678 28546 + 28683 28678 28682 + 28678 28683 28684 + 28684 28679 28678 + 28679 28684 28685 + 28679 28685 28686 + 28686 28680 28679 + 28686 28681 28680 + 28546 28687 28682 + 28682 28687 28688 + 28688 28689 28682 + 28690 28682 28689 + 28682 28690 28683 + 28545 28687 28546 + 28687 28545 28691 + 28691 28688 28687 + 28688 28691 28692 + 28692 28693 28688 + 28688 28693 28694 + 28694 28689 28688 + 28695 28689 28694 + 28689 28695 28690 + 28551 28691 28545 + 28692 28691 28551 + 28551 28696 28692 + 28692 28696 28697 + 28697 28698 28692 + 28693 28692 28698 + 28698 28699 28693 + 28694 28693 28699 + 28696 28551 28550 + 28556 28696 28550 + 28697 28696 28556 + 28700 28697 28556 + 28701 28697 28700 + 28698 28697 28701 + 28702 28698 28701 + 28699 28698 28702 + 28702 28703 28699 + 28704 28699 28703 + 28699 28704 28694 + 28556 28555 28700 + 28555 28705 28700 + 28706 28700 28705 + 28706 28701 28700 + 28707 28701 28706 + 28702 28701 28707 + 28707 28708 28702 + 28703 28702 28708 + 28705 28555 28554 + 28709 28705 28554 + 28710 28705 28709 + 28705 28710 28706 + 28711 28706 28710 + 28711 28707 28706 + 28712 28707 28711 + 28712 28713 28707 + 28708 28707 28713 + 28714 28709 28554 + 28715 28709 28714 + 28715 28710 28709 + 28716 28710 28715 + 28710 28716 28711 + 28712 28711 28716 + 28554 28562 28714 + 28717 28714 28562 + 28718 28714 28717 + 28714 28718 28715 + 28715 28718 28719 + 28719 28716 28715 + 28720 28716 28719 + 28720 28721 28716 + 28716 28721 28712 + 28562 28561 28717 + 28722 28717 28561 + 28723 28717 28722 + 28723 28718 28717 + 28724 28718 28723 + 28718 28724 28719 + 28720 28719 28724 + 28561 28725 28722 + 28726 28722 28725 + 28727 28722 28726 + 28727 28728 28722 + 28722 28728 28723 + 28566 28725 28561 + 28729 28725 28566 + 28725 28729 28726 + 28730 28726 28729 + 28726 28730 28731 + 28727 28726 28731 + 28727 28731 28732 + 28732 28733 28727 + 28728 28727 28733 + 28566 28571 28729 + 28729 28571 28734 + 28734 28735 28729 + 28729 28735 28730 + 28736 28730 28735 + 28737 28730 28736 + 28737 28731 28730 + 28732 28731 28737 + 28738 28734 28571 + 28739 28734 28738 + 28734 28739 28740 + 28740 28735 28734 + 28735 28740 28736 + 28570 28738 28571 + 28741 28738 28570 + 28738 28741 28742 + 28738 28742 28739 + 28695 28739 28742 + 28740 28739 28695 + 28695 28743 28740 + 28736 28740 28743 + 28570 28569 28741 + 28741 28569 28744 + 28744 28745 28741 + 28745 28746 28741 + 28746 28747 28741 + 28742 28741 28747 + 28569 28575 28744 + 28575 28748 28744 + 28749 28744 28748 + 28744 28749 28750 + 28750 28751 28744 + 28744 28751 28752 + 28752 28745 28744 + 28753 28748 28575 + 28754 28748 28753 + 28748 28754 28749 + 28755 28749 28754 + 28750 28749 28755 + 28755 28756 28750 + 28757 28750 28756 + 28751 28750 28757 + 28575 28758 28753 + 28759 28753 28758 + 28760 28753 28759 + 28753 28760 28754 + 28754 28760 28761 + 28761 28762 28754 + 28754 28762 28755 + 28574 28758 28575 + 28758 28574 28763 + 28763 28764 28758 + 28758 28764 28759 + 28765 28759 28764 + 28766 28759 28765 + 28759 28766 28760 + 28761 28760 28766 + 28579 28763 28574 + 28767 28763 28579 + 28764 28763 28767 + 28767 28768 28764 + 28764 28768 28765 + 28765 28768 28769 + 28769 28770 28765 + 28771 28765 28770 + 28765 28771 28766 + 28579 28772 28767 + 28767 28772 28773 + 28773 28774 28767 + 28774 28769 28767 + 28769 28768 28767 + 28584 28772 28579 + 28772 28584 28775 + 28775 28773 28772 + 28773 28775 28776 + 28776 28777 28773 + 28774 28773 28777 + 28778 28774 28777 + 28778 28779 28774 + 28779 28769 28774 + 28589 28775 28584 + 28775 28589 28780 + 28776 28775 28780 + 28776 28780 28781 + 28781 28782 28776 + 28777 28776 28782 + 28782 28783 28777 + 28778 28777 28783 + 28784 28780 28589 + 28780 28784 28785 + 28785 28781 28780 + 28786 28781 28785 + 28786 28787 28781 + 28781 28787 28788 + 28788 28782 28781 + 28788 28783 28782 + 28589 28588 28784 + 28789 28784 28588 + 28784 28789 28790 + 28790 28785 28784 + 28785 28790 28791 + 28786 28785 28791 + 28786 28791 28792 + 28787 28786 28792 + 28792 28793 28787 + 28788 28787 28793 + 28594 28789 28588 + 28794 28789 28594 + 28789 28794 28795 + 28795 28790 28789 + 28796 28790 28795 + 28796 28791 28790 + 28791 28796 28797 + 28797 28792 28791 + 28792 28797 28798 + 28798 28793 28792 + 28793 28798 28788 + 28594 28593 28794 + 28794 28593 28799 + 28799 28800 28794 + 28794 28800 28801 + 28801 28795 28794 + 28796 28795 28801 + 28801 28802 28796 + 28797 28796 28802 + 28803 28797 28802 + 28798 28797 28803 + 28799 28593 28592 + 28592 28804 28799 + 28805 28799 28804 + 28800 28799 28805 + 28806 28800 28805 + 28801 28800 28806 + 28807 28801 28806 + 28808 28801 28807 + 28808 28802 28801 + 28598 28804 28592 + 28809 28804 28598 + 28804 28809 28805 + 28810 28805 28809 + 28806 28805 28810 + 28810 28811 28806 + 28806 28811 28807 + 28811 28812 28807 + 28808 28807 28812 + 28598 28603 28809 + 28809 28603 28813 + 28813 28814 28809 + 28809 28814 28810 + 28815 28810 28814 + 28811 28810 28815 + 28816 28811 28815 + 28812 28811 28816 + 28813 28603 28602 + 28817 28813 28602 + 28818 28813 28817 + 28813 28818 28819 + 28819 28814 28813 + 28814 28819 28815 + 28820 28815 28819 + 28816 28815 28820 + 28602 28821 28817 + 28822 28817 28821 + 28761 28817 28822 + 28817 28761 28818 + 28766 28818 28761 + 28819 28818 28766 + 28766 28771 28819 + 28819 28771 28820 + 28601 28821 28602 + 28823 28821 28601 + 28821 28823 28822 + 28822 28823 28824 + 28825 28822 28824 + 28762 28822 28825 + 28822 28762 28761 + 28823 28601 28600 + 28600 28824 28823 + 28826 28824 28600 + 28824 28826 28827 + 28827 28828 28824 + 28824 28828 28825 + 28756 28825 28828 + 28756 28755 28825 + 28825 28755 28762 + 28600 28607 28826 + 28826 28607 28829 + 28829 28830 28826 + 28826 28830 28831 + 28827 28826 28831 + 28831 28832 28827 + 28833 28827 28832 + 28833 28828 28827 + 28828 28833 28756 + 28834 28829 28607 + 28835 28829 28834 + 28830 28829 28835 + 28830 28835 28836 + 28836 28831 28830 + 28837 28831 28836 + 28831 28837 28838 + 28838 28832 28831 + 28611 28834 28607 + 28839 28834 28611 + 28840 28834 28839 + 28834 28840 28835 + 28836 28835 28840 + 28841 28836 28840 + 28837 28836 28841 + 28841 28842 28837 + 28837 28842 28843 + 28843 28838 28837 + 28611 28616 28839 + 28839 28616 28844 + 28844 28845 28839 + 28840 28839 28845 + 28845 28846 28840 + 28840 28846 28847 + 28847 28841 28840 + 28848 28841 28847 + 28842 28841 28848 + 28625 28844 28616 + 28844 28625 28849 + 28844 28849 28850 + 28850 28845 28844 + 28846 28845 28850 + 28850 28851 28846 + 28846 28851 28852 + 28852 28847 28846 + 28847 28852 28853 + 28847 28853 28848 + 28625 28630 28849 + 28854 28849 28630 + 28849 28854 28855 + 28850 28849 28855 + 28851 28850 28855 + 28855 28856 28851 + 28852 28851 28856 + 28856 28857 28852 + 28853 28852 28857 + 28858 28854 28630 + 28859 28854 28858 + 28854 28859 28860 + 28860 28855 28854 + 28856 28855 28860 + 28860 28861 28856 + 28856 28861 28862 + 28862 28857 28856 + 28858 28630 28629 + 28629 28635 28858 + 28863 28858 28635 + 28858 28863 28859 + 28864 28859 28863 + 28860 28859 28864 + 28864 28865 28860 + 28861 28860 28865 + 28865 28866 28861 + 28862 28861 28866 + 28635 28867 28863 + 28868 28863 28867 + 28868 28864 28863 + 28868 28869 28864 + 28865 28864 28869 + 28658 28865 28869 + 28866 28865 28658 + 28867 28635 28634 + 28634 28641 28867 + 28867 28641 28640 + 28640 28870 28867 + 28867 28870 28868 + 28869 28868 28870 + 28870 28871 28869 + 28869 28871 28646 + 28658 28869 28646 + 28871 28870 28640 + 28871 28640 28646 + 28658 28657 28866 + 28866 28657 28872 + 28872 28873 28866 + 28866 28873 28862 + 28874 28862 28873 + 28862 28874 28875 + 28875 28857 28862 + 28857 28875 28853 + 28656 28872 28657 + 28668 28872 28656 + 28872 28668 28873 + 28668 28876 28873 + 28873 28876 28874 + 28874 28876 28877 + 28877 28878 28874 + 28875 28874 28878 + 28878 28879 28875 + 28853 28875 28879 + 28879 28880 28853 + 28880 28848 28853 + 28876 28668 28881 + 28881 28877 28876 + 28882 28877 28881 + 28877 28882 28883 + 28883 28878 28877 + 28879 28878 28883 + 28883 28884 28879 + 28879 28884 28885 + 28885 28880 28879 + 28881 28668 28667 + 28667 28886 28881 + 28886 28887 28881 + 28887 28882 28881 + 28882 28887 28888 + 28888 28883 28882 + 28884 28883 28888 + 28888 28889 28884 + 28885 28884 28889 + 28890 28886 28667 + 28886 28890 28891 + 28891 28887 28886 + 28887 28891 28892 + 28892 28888 28887 + 28889 28888 28892 + 28667 28893 28890 + 28890 28893 28894 + 28894 28895 28890 + 28895 28896 28890 + 28896 28891 28890 + 28891 28896 28897 + 28897 28892 28891 + 28893 28667 28666 + 28666 28677 28893 + 28893 28677 28898 + 28898 28894 28893 + 28898 28899 28894 + 28894 28899 28900 + 28900 28895 28894 + 28896 28895 28900 + 28896 28900 28901 + 28901 28897 28896 + 28898 28677 28676 + 28676 28902 28898 + 28899 28898 28902 + 28902 28903 28899 + 28899 28903 28904 + 28899 28904 28905 + 28905 28901 28899 + 28901 28900 28899 + 28906 28902 28676 + 28903 28902 28906 + 28903 28906 28907 + 28907 28904 28903 + 28904 28907 28908 + 28904 28908 28909 + 28909 28905 28904 + 28676 28675 28906 + 28907 28906 28675 + 28681 28907 28675 + 28908 28907 28681 + 28681 28686 28908 + 28908 28686 28910 + 28909 28908 28910 + 28910 28911 28909 + 28912 28909 28911 + 28905 28909 28912 + 28905 28912 28913 + 28913 28901 28905 + 28897 28901 28913 + 28897 28913 28914 + 28914 28892 28897 + 28686 28685 28910 + 28685 28915 28910 + 28745 28910 28915 + 28745 28752 28910 + 28910 28752 28916 + 28916 28911 28910 + 28917 28911 28916 + 28911 28917 28912 + 28918 28915 28685 + 28746 28915 28918 + 28915 28746 28745 + 28685 28684 28918 + 28918 28684 28683 + 28683 28919 28918 + 28746 28918 28919 + 28919 28747 28746 + 28919 28920 28747 + 28747 28920 28742 + 28742 28920 28690 + 28742 28690 28695 + 28920 28919 28683 + 28683 28690 28920 + 28916 28752 28751 + 28751 28921 28916 + 28917 28916 28921 + 28921 28922 28917 + 28912 28917 28922 + 28913 28912 28922 + 28914 28913 28922 + 28922 28923 28914 + 28889 28914 28923 + 28892 28914 28889 + 28757 28921 28751 + 28922 28921 28757 + 28922 28757 28924 + 28924 28923 28922 + 28925 28923 28924 + 28923 28925 28889 + 28889 28925 28885 + 28926 28885 28925 + 28926 28880 28885 + 28924 28757 28756 + 28756 28833 28924 + 28833 28927 28924 + 28843 28924 28927 + 28924 28843 28925 + 28925 28843 28926 + 28842 28926 28843 + 28880 28926 28842 + 28842 28848 28880 + 28832 28927 28833 + 28838 28927 28832 + 28927 28838 28843 + 28770 28820 28771 + 28928 28820 28770 + 28820 28928 28816 + 28929 28816 28928 + 28929 28812 28816 + 28930 28928 28770 + 28931 28928 28930 + 28928 28931 28929 + 28931 28932 28929 + 28932 28933 28929 + 28933 28812 28929 + 28933 28934 28812 + 28812 28934 28808 + 28930 28770 28769 + 28769 28779 28930 + 28930 28779 28935 + 28935 28936 28930 + 28936 28931 28930 + 28937 28931 28936 + 28937 28932 28931 + 28932 28937 28938 + 28938 28939 28932 + 28933 28932 28939 + 28935 28779 28778 + 28940 28935 28778 + 28941 28935 28940 + 28941 28942 28935 + 28936 28935 28942 + 28937 28936 28942 + 28937 28942 28943 + 28943 28938 28937 + 28783 28940 28778 + 28941 28940 28783 + 28783 28944 28941 + 28945 28941 28944 + 28941 28945 28943 + 28942 28941 28943 + 28788 28944 28783 + 28798 28944 28788 + 28944 28798 28945 + 28803 28945 28798 + 28803 28943 28945 + 28938 28943 28803 + 28946 28938 28803 + 28939 28938 28946 + 28946 28947 28939 + 28939 28947 28933 + 28947 28934 28933 + 28808 28934 28947 + 28947 28946 28808 + 28946 28802 28808 + 28802 28946 28803 + 28694 28743 28695 + 28743 28694 28704 + 28704 28948 28743 + 28743 28948 28736 + 28948 28949 28736 + 28949 28737 28736 + 28948 28704 28950 + 28950 28949 28948 + 28949 28950 28951 + 28951 28952 28949 + 28737 28949 28952 + 28952 28953 28737 + 28953 28732 28737 + 28950 28704 28703 + 28950 28703 28954 + 28954 28951 28950 + 28951 28954 28955 + 28956 28951 28955 + 28956 28952 28951 + 28956 28957 28952 + 28952 28957 28958 + 28958 28953 28952 + 28958 28732 28953 + 28708 28954 28703 + 28959 28954 28708 + 28959 28955 28954 + 28960 28955 28959 + 28955 28960 28961 + 28961 28962 28955 + 28962 28956 28955 + 28957 28956 28962 + 28962 28963 28957 + 28958 28957 28963 + 28959 28708 28713 + 28959 28713 28964 + 28964 28960 28959 + 28960 28964 28965 + 28965 28966 28960 + 28960 28966 28961 + 28964 28713 28712 + 28965 28964 28712 + 28712 28721 28965 + 28966 28965 28721 + 28721 28720 28966 + 28967 28966 28720 + 28966 28967 28961 + 28961 28967 28968 + 28961 28968 28969 + 28969 28962 28961 + 28963 28962 28969 + 28969 28970 28963 + 28963 28970 28958 + 28970 28971 28958 + 28958 28971 28732 + 28720 28972 28967 + 28972 28973 28967 + 28973 28968 28967 + 28968 28973 28974 + 28974 28969 28968 + 28969 28974 28975 + 28970 28969 28975 + 28975 28971 28970 + 28732 28971 28975 + 28975 28733 28732 + 28724 28972 28720 + 28973 28972 28724 + 28973 28724 28976 + 28973 28976 28974 + 28976 28977 28974 + 28975 28974 28977 + 28975 28977 28733 + 28733 28977 28728 + 28723 28728 28977 + 28977 28976 28723 + 28976 28724 28723 + 28978 28979 28980 + 28979 28978 28981 + 28982 28979 28981 + 28983 28979 28982 + 28979 28983 28984 + 28984 28980 28979 + 28985 28978 28980 + 28986 28978 28985 + 28978 28986 28987 + 28981 28978 28987 + 28981 28987 28988 + 28988 28989 28981 + 28981 28989 28982 + 28980 28990 28985 + 28990 28991 28985 + 28985 28991 28992 + 28985 28992 28986 + 28993 28986 28992 + 28987 28986 28993 + 28993 28994 28987 + 28994 28988 28987 + 28995 28990 28980 + 28990 28995 28996 + 28996 28997 28990 + 28991 28990 28997 + 28998 28991 28997 + 28999 28991 28998 + 28991 28999 28992 + 28984 28995 28980 + 29000 28995 28984 + 28995 29000 29001 + 29001 28996 28995 + 29002 28996 29001 + 28996 29002 29003 + 29003 28997 28996 + 28997 29003 29004 + 29004 28998 28997 + 29005 29000 28984 + 29000 29005 29006 + 29006 29007 29000 + 29000 29007 29008 + 29008 29001 29000 + 29009 29001 29008 + 29001 29009 29002 + 28984 28983 29005 + 28983 29010 29005 + 29006 29005 29010 + 29010 29011 29006 + 29006 29011 29012 + 29012 29013 29006 + 29007 29006 29013 + 29013 29014 29007 + 29008 29007 29014 + 29010 28983 29015 + 29016 29010 29015 + 29010 29016 29017 + 29017 29011 29010 + 29011 29017 29018 + 29018 29012 29011 + 29015 28983 28982 + 29015 28982 29019 + 29019 29020 29015 + 29015 29020 29016 + 29020 29021 29016 + 29017 29016 29021 + 29021 29022 29017 + 29017 29022 29023 + 29023 29018 29017 + 28989 29019 28982 + 29019 28989 29024 + 29025 29019 29024 + 29019 29025 29026 + 29026 29020 29019 + 29020 29026 29027 + 29027 29021 29020 + 29021 29027 29028 + 29028 29022 29021 + 29024 28989 28988 + 28988 29029 29024 + 29024 29029 29030 + 29025 29024 29030 + 29030 29031 29025 + 29026 29025 29031 + 29031 29032 29026 + 29026 29032 29033 + 29033 29027 29026 + 29028 29027 29033 + 29029 28988 28994 + 28994 29034 29029 + 29034 29035 29029 + 29029 29035 29030 + 29036 29030 29035 + 29030 29036 29037 + 29037 29031 29030 + 29031 29037 29038 + 29038 29032 29031 + 29039 29034 28994 + 29034 29039 29040 + 29040 29035 29034 + 29035 29040 29036 + 29041 29036 29040 + 29036 29041 29042 + 29042 29037 29036 + 29042 29043 29037 + 29043 29038 29037 + 28994 28993 29039 + 29039 28993 29044 + 29044 29045 29039 + 29039 29045 29046 + 29039 29046 29040 + 29046 29041 29040 + 29047 29041 29046 + 29041 29047 29048 + 29048 29042 29041 + 29049 29044 28993 + 29044 29049 29050 + 29051 29044 29050 + 29051 29045 29044 + 29045 29051 29052 + 29052 29046 29045 + 29046 29052 29047 + 28992 29049 28993 + 28992 28999 29049 + 28999 29053 29049 + 29049 29053 29054 + 29054 29050 29049 + 29050 29054 29055 + 29055 29056 29050 + 29050 29056 29051 + 29056 29052 29051 + 29056 29057 29052 + 29057 29047 29052 + 29053 28999 29058 + 29058 29059 29053 + 29059 29054 29053 + 29054 29059 29055 + 29059 29004 29055 + 29004 29060 29055 + 29056 29055 29060 + 29060 29057 29056 + 28998 29058 28999 + 29059 29058 28998 + 28998 29004 29059 + 29060 29004 29003 + 29003 29061 29060 + 29057 29060 29061 + 29061 29062 29057 + 29047 29057 29062 + 29062 29048 29047 + 29062 29063 29048 + 29063 29064 29048 + 29042 29048 29064 + 29064 29043 29042 + 29003 29002 29061 + 29002 29065 29061 + 29062 29061 29065 + 29065 29063 29062 + 29063 29065 29066 + 29066 29067 29063 + 29064 29063 29067 + 29067 29068 29064 + 29043 29064 29068 + 29068 29069 29043 + 29038 29043 29069 + 29065 29002 29009 + 29065 29009 29066 + 29070 29066 29009 + 29067 29066 29070 + 29070 29071 29067 + 29067 29071 29072 + 29072 29068 29067 + 29069 29068 29072 + 29009 29073 29070 + 29070 29073 29074 + 29074 29075 29070 + 29071 29070 29075 + 29075 29076 29071 + 29072 29071 29076 + 29008 29073 29009 + 29073 29008 29077 + 29077 29074 29073 + 29074 29077 29078 + 29078 29079 29074 + 29074 29079 29080 + 29080 29075 29074 + 29076 29075 29080 + 29014 29077 29008 + 29078 29077 29014 + 29014 29081 29078 + 29078 29081 29082 + 29083 29078 29082 + 29079 29078 29083 + 29083 29084 29079 + 29080 29079 29084 + 29085 29081 29014 + 29081 29085 29082 + 29014 29013 29085 + 29085 29013 29012 + 29012 29086 29085 + 29087 29085 29086 + 29085 29087 29082 + 29088 29086 29012 + 29086 29088 29089 + 29089 29090 29086 + 29090 29087 29086 + 29091 29087 29090 + 29082 29087 29091 + 29012 29018 29088 + 29088 29018 29023 + 29023 29092 29088 + 29088 29092 29093 + 29089 29088 29093 + 29094 29089 29093 + 29095 29089 29094 + 29090 29089 29095 + 29095 29096 29090 + 29090 29096 29091 + 29097 29092 29023 + 29092 29097 29098 + 29098 29093 29092 + 29097 29023 29022 + 29022 29028 29097 + 29098 29097 29028 + 29099 29098 29028 + 29100 29098 29099 + 29093 29098 29100 + 29028 29101 29099 + 29102 29099 29101 + 29099 29102 29103 + 29103 29104 29099 + 29099 29104 29100 + 29033 29101 29028 + 29105 29101 29033 + 29101 29105 29102 + 29102 29105 29106 + 29106 29107 29102 + 29103 29102 29107 + 29033 29108 29105 + 29105 29108 29069 + 29069 29106 29105 + 29072 29106 29069 + 29106 29072 29109 + 29109 29107 29106 + 29108 29033 29032 + 29032 29038 29108 + 29069 29108 29038 + 29076 29109 29072 + 29110 29109 29076 + 29107 29109 29110 + 29110 29111 29107 + 29107 29111 29103 + 29103 29111 29112 + 29112 29113 29103 + 29113 29114 29103 + 29104 29103 29114 + 29076 29115 29110 + 29110 29115 29116 + 29117 29110 29116 + 29111 29110 29117 + 29117 29112 29111 + 29080 29115 29076 + 29115 29080 29118 + 29118 29119 29115 + 29115 29119 29116 + 29084 29118 29080 + 29120 29118 29084 + 29119 29118 29120 + 29120 29121 29119 + 29119 29121 29122 + 29122 29123 29119 + 29119 29123 29116 + 29084 29124 29120 + 29120 29124 29125 + 29125 29126 29120 + 29121 29120 29126 + 29126 29127 29121 + 29122 29121 29127 + 29128 29124 29084 + 29124 29128 29129 + 29129 29125 29124 + 29125 29129 29130 + 29130 29131 29125 + 29125 29131 29132 + 29132 29126 29125 + 29127 29126 29132 + 29084 29083 29128 + 29128 29083 29133 + 29133 29134 29128 + 29128 29134 29135 + 29135 29129 29128 + 29130 29129 29135 + 29136 29133 29083 + 29133 29136 29137 + 29138 29133 29137 + 29133 29138 29139 + 29139 29134 29133 + 29134 29139 29140 + 29140 29135 29134 + 29082 29136 29083 + 29141 29136 29082 + 29137 29136 29141 + 29141 29142 29137 + 29137 29142 29143 + 29143 29144 29137 + 29137 29144 29145 + 29145 29138 29137 + 29139 29138 29145 + 29082 29146 29141 + 29147 29141 29146 + 29142 29141 29147 + 29147 29148 29142 + 29143 29142 29148 + 29091 29146 29082 + 29146 29091 29149 + 29149 29150 29146 + 29146 29150 29147 + 29151 29147 29150 + 29148 29147 29151 + 29152 29149 29091 + 29153 29149 29152 + 29150 29149 29153 + 29153 29154 29150 + 29150 29154 29151 + 29091 29096 29152 + 29155 29152 29096 + 29152 29155 29156 + 29156 29157 29152 + 29152 29157 29153 + 29153 29157 29158 + 29158 29159 29153 + 29154 29153 29159 + 29096 29095 29155 + 29160 29155 29095 + 29156 29155 29160 + 29160 29161 29156 + 29156 29161 29162 + 29162 29163 29156 + 29157 29156 29163 + 29163 29158 29157 + 29095 29164 29160 + 29165 29160 29164 + 29160 29165 29166 + 29166 29161 29160 + 29161 29166 29167 + 29167 29162 29161 + 29094 29164 29095 + 29168 29164 29094 + 29164 29168 29165 + 29169 29165 29168 + 29166 29165 29169 + 29169 29170 29166 + 29167 29166 29170 + 29171 29167 29170 + 29172 29167 29171 + 29162 29167 29172 + 29094 29173 29168 + 29168 29173 29174 + 29174 29175 29168 + 29168 29175 29169 + 29176 29169 29175 + 29169 29176 29177 + 29177 29170 29169 + 29173 29094 29178 + 29178 29179 29173 + 29173 29179 29180 + 29180 29181 29173 + 29181 29182 29173 + 29182 29174 29173 + 29178 29094 29093 + 29183 29178 29093 + 29184 29178 29183 + 29178 29184 29185 + 29185 29179 29178 + 29179 29185 29186 + 29186 29180 29179 + 29187 29183 29093 + 29188 29183 29187 + 29189 29183 29188 + 29183 29189 29184 + 29184 29189 29190 + 29190 29191 29184 + 29185 29184 29191 + 29093 29192 29187 + 29193 29187 29192 + 29187 29193 29194 + 29187 29194 29188 + 29188 29194 29195 + 29195 29196 29188 + 29189 29188 29196 + 29196 29190 29189 + 29197 29192 29093 + 29192 29197 29198 + 29198 29199 29192 + 29192 29199 29193 + 29093 29100 29197 + 29200 29197 29100 + 29198 29197 29200 + 29200 29201 29198 + 29202 29198 29201 + 29199 29198 29202 + 29202 29203 29199 + 29193 29199 29203 + 29100 29104 29200 + 29114 29200 29104 + 29201 29200 29114 + 29114 29204 29201 + 29201 29204 29205 + 29205 29206 29201 + 29201 29206 29202 + 29206 29207 29202 + 29208 29202 29207 + 29203 29202 29208 + 29204 29114 29113 + 29113 29209 29204 + 29205 29204 29209 + 29209 29210 29205 + 29211 29205 29210 + 29205 29211 29212 + 29212 29206 29205 + 29206 29212 29213 + 29213 29207 29206 + 29214 29209 29113 + 29209 29214 29215 + 29215 29210 29209 + 29216 29210 29215 + 29210 29216 29211 + 29217 29211 29216 + 29211 29217 29218 + 29212 29211 29218 + 29214 29113 29112 + 29112 29219 29214 + 29215 29214 29219 + 29219 29220 29215 + 29221 29215 29220 + 29215 29221 29216 + 29216 29221 29222 + 29222 29217 29216 + 29217 29222 29223 + 29223 29218 29217 + 29224 29219 29112 + 29219 29224 29225 + 29225 29220 29219 + 29226 29220 29225 + 29220 29226 29221 + 29221 29226 29227 + 29227 29222 29221 + 29222 29227 29228 + 29223 29222 29228 + 29112 29117 29224 + 29224 29117 29229 + 29229 29230 29224 + 29224 29230 29231 + 29231 29232 29224 + 29232 29225 29224 + 29233 29225 29232 + 29225 29233 29226 + 29116 29229 29117 + 29234 29229 29116 + 29230 29229 29234 + 29234 29235 29230 + 29230 29235 29236 + 29236 29231 29230 + 29237 29231 29236 + 29231 29237 29238 + 29238 29232 29231 + 29116 29239 29234 + 29240 29234 29239 + 29235 29234 29240 + 29240 29241 29235 + 29236 29235 29241 + 29241 29242 29236 + 29242 29243 29236 + 29237 29236 29243 + 29116 29244 29239 + 29239 29244 29245 + 29245 29246 29239 + 29239 29246 29247 + 29247 29240 29239 + 29248 29240 29247 + 29241 29240 29248 + 29244 29116 29123 + 29123 29249 29244 + 29244 29249 29250 + 29245 29244 29250 + 29250 29251 29245 + 29252 29245 29251 + 29245 29252 29253 + 29253 29246 29245 + 29249 29123 29122 + 29249 29122 29254 + 29254 29250 29249 + 29250 29254 29255 + 29255 29256 29250 + 29250 29256 29257 + 29257 29251 29250 + 29258 29251 29257 + 29251 29258 29252 + 29127 29254 29122 + 29255 29254 29127 + 29127 29259 29255 + 29255 29259 29260 + 29260 29261 29255 + 29256 29255 29261 + 29261 29262 29256 + 29257 29256 29262 + 29132 29259 29127 + 29259 29132 29260 + 29132 29263 29260 + 29260 29263 29264 + 29261 29260 29264 + 29265 29261 29264 + 29262 29261 29265 + 29265 29266 29262 + 29267 29262 29266 + 29262 29267 29257 + 29263 29132 29131 + 29131 29268 29263 + 29269 29263 29268 + 29263 29269 29264 + 29264 29269 29270 + 29270 29265 29264 + 29270 29271 29265 + 29266 29265 29271 + 29272 29268 29131 + 29268 29272 29273 + 29273 29274 29268 + 29268 29274 29269 + 29275 29269 29274 + 29269 29275 29270 + 29131 29130 29272 + 29276 29272 29130 + 29273 29272 29276 + 29276 29277 29273 + 29278 29273 29277 + 29273 29278 29279 + 29274 29273 29279 + 29279 29275 29274 + 29280 29275 29279 + 29270 29275 29280 + 29130 29281 29276 + 29282 29276 29281 + 29276 29282 29283 + 29283 29277 29276 + 29277 29283 29284 + 29284 29278 29277 + 29135 29281 29130 + 29285 29281 29135 + 29281 29285 29282 + 29286 29282 29285 + 29283 29282 29286 + 29286 29287 29283 + 29288 29283 29287 + 29288 29289 29283 + 29283 29289 29284 + 29135 29140 29285 + 29285 29140 29290 + 29290 29291 29285 + 29285 29291 29286 + 29292 29286 29291 + 29286 29292 29293 + 29293 29287 29286 + 29287 29293 29294 + 29294 29288 29287 + 29290 29140 29139 + 29139 29295 29290 + 29296 29290 29295 + 29290 29296 29297 + 29297 29291 29290 + 29291 29297 29292 + 29145 29295 29139 + 29298 29295 29145 + 29295 29298 29296 + 29296 29298 29299 + 29299 29300 29296 + 29297 29296 29300 + 29300 29301 29297 + 29292 29297 29301 + 29145 29302 29298 + 29298 29302 29303 + 29303 29299 29298 + 29304 29299 29303 + 29299 29304 29305 + 29305 29300 29299 + 29300 29305 29306 + 29306 29301 29300 + 29302 29145 29307 + 29302 29307 29308 + 29303 29302 29308 + 29309 29303 29308 + 29310 29303 29309 + 29303 29310 29304 + 29145 29144 29307 + 29307 29144 29143 + 29143 29311 29307 + 29312 29307 29311 + 29307 29312 29308 + 29311 29143 29313 + 29313 29314 29311 + 29314 29315 29311 + 29315 29312 29311 + 29316 29312 29315 + 29312 29316 29317 + 29317 29308 29312 + 29143 29318 29313 + 29313 29318 29319 + 29313 29319 29320 + 29320 29314 29313 + 29321 29314 29320 + 29314 29321 29316 + 29316 29315 29314 + 29148 29318 29143 + 29322 29318 29148 + 29318 29322 29319 + 29319 29322 29323 + 29323 29324 29319 + 29324 29320 29319 + 29320 29324 29325 + 29326 29320 29325 + 29320 29326 29321 + 29148 29327 29322 + 29328 29322 29327 + 29322 29328 29323 + 29323 29328 29329 + 29323 29329 29330 + 29330 29324 29323 + 29325 29324 29330 + 29151 29327 29148 + 29327 29151 29331 + 29331 29332 29327 + 29332 29328 29327 + 29328 29332 29333 + 29334 29328 29333 + 29328 29334 29329 + 29329 29334 29335 + 29335 29330 29329 + 29336 29331 29151 + 29331 29336 29337 + 29338 29331 29337 + 29332 29331 29338 + 29338 29333 29332 + 29333 29338 29339 + 29339 29340 29333 + 29340 29334 29333 + 29151 29154 29336 + 29159 29336 29154 + 29336 29159 29341 + 29341 29337 29336 + 29337 29341 29342 + 29342 29343 29337 + 29338 29337 29343 + 29343 29339 29338 + 29339 29343 29344 + 29345 29339 29344 + 29340 29339 29345 + 29341 29159 29346 + 29341 29346 29347 + 29342 29341 29347 + 29347 29348 29342 + 29348 29349 29342 + 29343 29342 29349 + 29349 29344 29343 + 29344 29349 29350 + 29350 29345 29344 + 29159 29158 29346 + 29351 29346 29158 + 29346 29351 29352 + 29352 29347 29346 + 29347 29352 29353 + 29353 29348 29347 + 29348 29353 29354 + 29354 29355 29348 + 29355 29349 29348 + 29349 29355 29350 + 29158 29163 29351 + 29351 29163 29162 + 29162 29356 29351 + 29352 29351 29356 + 29357 29352 29356 + 29353 29352 29357 + 29357 29358 29353 + 29354 29353 29358 + 29359 29354 29358 + 29354 29359 29350 + 29350 29355 29354 + 29172 29356 29162 + 29356 29172 29357 + 29172 29360 29357 + 29357 29360 29361 + 29361 29358 29357 + 29358 29361 29359 + 29359 29361 29362 + 29362 29363 29359 + 29363 29364 29359 + 29350 29359 29364 + 29360 29172 29365 + 29366 29360 29365 + 29361 29360 29366 + 29366 29362 29361 + 29367 29362 29366 + 29362 29367 29363 + 29171 29365 29172 + 29368 29365 29171 + 29365 29368 29366 + 29368 29369 29366 + 29366 29369 29367 + 29367 29369 29370 + 29371 29367 29370 + 29367 29371 29363 + 29171 29372 29368 + 29368 29372 29325 + 29325 29373 29368 + 29374 29368 29373 + 29374 29369 29368 + 29369 29374 29370 + 29372 29171 29170 + 29170 29177 29372 + 29372 29177 29326 + 29326 29325 29372 + 29321 29326 29177 + 29177 29176 29321 + 29321 29176 29375 + 29375 29317 29321 + 29317 29316 29321 + 29175 29375 29176 + 29375 29175 29174 + 29174 29376 29375 + 29375 29376 29377 + 29377 29317 29375 + 29308 29317 29377 + 29376 29174 29182 + 29182 29378 29376 + 29377 29376 29378 + 29378 29379 29377 + 29308 29377 29379 + 29379 29380 29308 + 29308 29380 29381 + 29381 29309 29308 + 29382 29378 29182 + 29378 29382 29383 + 29383 29379 29378 + 29379 29383 29380 + 29380 29383 29384 + 29384 29381 29380 + 29384 29385 29381 + 29381 29385 29386 + 29386 29309 29381 + 29382 29182 29181 + 29181 29387 29382 + 29382 29387 29388 + 29383 29382 29388 + 29388 29389 29383 + 29389 29390 29383 + 29390 29384 29383 + 29385 29384 29390 + 29181 29391 29387 + 29387 29391 29392 + 29392 29388 29387 + 29388 29392 29393 + 29388 29393 29394 + 29394 29389 29388 + 29391 29181 29180 + 29180 29395 29391 + 29392 29391 29395 + 29396 29392 29395 + 29393 29392 29396 + 29396 29397 29393 + 29393 29397 29398 + 29394 29393 29398 + 29395 29180 29186 + 29395 29186 29399 + 29399 29400 29395 + 29395 29400 29396 + 29401 29396 29400 + 29396 29401 29397 + 29402 29397 29401 + 29397 29402 29398 + 29399 29186 29185 + 29185 29403 29399 + 29404 29399 29403 + 29400 29399 29404 + 29404 29405 29400 + 29400 29405 29401 + 29401 29405 29406 + 29406 29407 29401 + 29407 29402 29401 + 29191 29403 29185 + 29403 29191 29408 + 29408 29409 29403 + 29403 29409 29404 + 29404 29409 29410 + 29410 29411 29404 + 29405 29404 29411 + 29411 29406 29405 + 29408 29191 29190 + 29190 29412 29408 + 29408 29412 29413 + 29413 29414 29408 + 29409 29408 29414 + 29414 29410 29409 + 29190 29196 29412 + 29412 29196 29195 + 29195 29415 29412 + 29412 29415 29413 + 29416 29413 29415 + 29413 29416 29417 + 29417 29418 29413 + 29413 29418 29419 + 29419 29414 29413 + 29410 29414 29419 + 29420 29415 29195 + 29415 29420 29416 + 29420 29421 29416 + 29421 29422 29416 + 29417 29416 29422 + 29195 29423 29420 + 29420 29423 29424 + 29424 29421 29420 + 29421 29424 29425 + 29421 29425 29426 + 29426 29422 29421 + 29427 29422 29426 + 29422 29427 29417 + 29423 29195 29428 + 29428 29429 29423 + 29424 29423 29429 + 29429 29430 29424 + 29425 29424 29430 + 29194 29428 29195 + 29431 29428 29194 + 29428 29431 29429 + 29429 29431 29432 + 29432 29430 29429 + 29430 29432 29433 + 29430 29433 29425 + 29194 29193 29431 + 29432 29431 29193 + 29203 29432 29193 + 29433 29432 29203 + 29203 29208 29433 + 29425 29433 29208 + 29208 29434 29425 + 29434 29435 29425 + 29435 29436 29425 + 29436 29426 29425 + 29427 29426 29436 + 29436 29437 29427 + 29417 29427 29437 + 29207 29434 29208 + 29213 29434 29207 + 29434 29213 29435 + 29213 29438 29435 + 29435 29438 29439 + 29439 29440 29435 + 29435 29440 29436 + 29440 29441 29436 + 29436 29441 29437 + 29442 29437 29441 + 29437 29442 29417 + 29438 29213 29212 + 29212 29218 29438 + 29439 29438 29218 + 29218 29223 29439 + 29439 29223 29443 + 29440 29439 29443 + 29443 29444 29440 + 29440 29444 29445 + 29445 29441 29440 + 29445 29442 29441 + 29223 29228 29443 + 29446 29443 29228 + 29444 29443 29446 + 29446 29447 29444 + 29444 29447 29448 + 29448 29445 29444 + 29448 29442 29445 + 29442 29448 29449 + 29449 29450 29442 + 29442 29450 29417 + 29228 29451 29446 + 29452 29446 29451 + 29447 29446 29452 + 29452 29453 29447 + 29448 29447 29453 + 29449 29448 29453 + 29453 29454 29449 + 29454 29455 29449 + 29449 29455 29450 + 29451 29228 29227 + 29227 29456 29451 + 29451 29456 29457 + 29452 29451 29457 + 29458 29452 29457 + 29452 29458 29454 + 29454 29453 29452 + 29456 29227 29226 + 29226 29233 29456 + 29459 29456 29233 + 29456 29459 29457 + 29457 29459 29460 + 29461 29457 29460 + 29457 29461 29458 + 29462 29458 29461 + 29454 29458 29462 + 29233 29463 29459 + 29460 29459 29463 + 29463 29238 29460 + 29460 29238 29237 + 29464 29460 29237 + 29461 29460 29464 + 29464 29465 29461 + 29461 29465 29462 + 29232 29463 29233 + 29463 29232 29238 + 29330 29373 29325 + 29373 29330 29466 + 29466 29374 29373 + 29374 29466 29467 + 29467 29370 29374 + 29370 29467 29468 + 29468 29371 29370 + 29335 29466 29330 + 29466 29335 29469 + 29467 29466 29469 + 29468 29467 29469 + 29470 29468 29469 + 29468 29470 29363 + 29363 29371 29468 + 29471 29469 29335 + 29469 29471 29470 + 29470 29471 29472 + 29472 29473 29470 + 29473 29364 29470 + 29364 29363 29470 + 29335 29474 29471 + 29471 29474 29340 + 29340 29472 29471 + 29345 29472 29340 + 29472 29345 29475 + 29475 29473 29472 + 29473 29475 29364 + 29364 29475 29350 + 29350 29475 29345 + 29334 29474 29335 + 29340 29474 29334 + 29476 29462 29465 + 29462 29476 29477 + 29477 29478 29462 + 29462 29478 29454 + 29454 29478 29479 + 29479 29455 29454 + 29465 29480 29476 + 29476 29480 29481 + 29481 29482 29476 + 29482 29483 29476 + 29477 29476 29483 + 29480 29465 29464 + 29480 29464 29484 + 29484 29481 29480 + 29481 29484 29485 + 29481 29485 29486 + 29486 29482 29481 + 29487 29482 29486 + 29482 29487 29488 + 29488 29483 29482 + 29489 29484 29464 + 29485 29484 29489 + 29489 29490 29485 + 29485 29490 29491 + 29486 29485 29491 + 29491 29492 29486 + 29487 29486 29492 + 29492 29493 29487 + 29488 29487 29493 + 29237 29489 29464 + 29243 29489 29237 + 29489 29243 29490 + 29490 29243 29242 + 29242 29491 29490 + 29242 29494 29491 + 29491 29494 29495 + 29495 29492 29491 + 29492 29495 29496 + 29496 29493 29492 + 29493 29496 29497 + 29497 29498 29493 + 29493 29498 29488 + 29494 29242 29241 + 29241 29248 29494 + 29494 29248 29499 + 29495 29494 29499 + 29499 29500 29495 + 29496 29495 29500 + 29500 29501 29496 + 29496 29501 29502 + 29497 29496 29502 + 29248 29503 29499 + 29504 29499 29503 + 29386 29499 29504 + 29499 29386 29505 + 29505 29500 29499 + 29500 29505 29501 + 29501 29505 29506 + 29506 29502 29501 + 29247 29503 29248 + 29247 29507 29503 + 29503 29507 29504 + 29504 29507 29253 + 29253 29310 29504 + 29309 29504 29310 + 29504 29309 29386 + 29507 29247 29246 + 29246 29253 29507 + 29304 29310 29253 + 29253 29252 29304 + 29304 29252 29258 + 29258 29305 29304 + 29306 29305 29258 + 29258 29508 29306 + 29509 29306 29508 + 29301 29306 29509 + 29509 29510 29301 + 29510 29292 29301 + 29257 29508 29258 + 29508 29257 29267 + 29267 29511 29508 + 29511 29509 29508 + 29509 29511 29512 + 29513 29509 29512 + 29510 29509 29513 + 29513 29514 29510 + 29292 29510 29514 + 29293 29292 29514 + 29511 29267 29515 + 29515 29512 29511 + 29512 29515 29516 + 29516 29517 29512 + 29513 29512 29517 + 29518 29513 29517 + 29514 29513 29518 + 29518 29519 29514 + 29519 29293 29514 + 29519 29294 29293 + 29515 29267 29266 + 29515 29266 29520 + 29520 29516 29515 + 29516 29520 29521 + 29522 29516 29521 + 29517 29516 29522 + 29522 29523 29517 + 29517 29523 29524 + 29524 29518 29517 + 29519 29518 29524 + 29271 29520 29266 + 29520 29271 29525 + 29525 29521 29520 + 29521 29525 29526 + 29526 29527 29521 + 29527 29522 29521 + 29523 29522 29527 + 29527 29528 29523 + 29528 29524 29523 + 29525 29271 29529 + 29525 29529 29530 + 29530 29526 29525 + 29530 29531 29526 + 29532 29526 29531 + 29527 29526 29532 + 29532 29528 29527 + 29524 29528 29532 + 29533 29524 29532 + 29524 29533 29519 + 29271 29270 29529 + 29280 29529 29270 + 29529 29280 29530 + 29280 29534 29530 + 29530 29534 29535 + 29535 29536 29530 + 29531 29530 29536 + 29537 29531 29536 + 29537 29538 29531 + 29531 29538 29532 + 29532 29538 29533 + 29534 29280 29539 + 29539 29540 29534 + 29540 29535 29534 + 29535 29540 29541 + 29536 29535 29541 + 29541 29542 29536 + 29536 29542 29537 + 29542 29543 29537 + 29538 29537 29543 + 29279 29539 29280 + 29540 29539 29279 + 29279 29278 29540 + 29540 29278 29541 + 29278 29284 29541 + 29542 29541 29284 + 29284 29289 29542 + 29542 29289 29543 + 29289 29288 29543 + 29544 29543 29288 + 29543 29544 29538 + 29538 29544 29533 + 29519 29533 29544 + 29544 29294 29519 + 29288 29294 29544 + 29505 29386 29385 + 29385 29506 29505 + 29390 29506 29385 + 29506 29390 29502 + 29502 29390 29389 + 29389 29545 29502 + 29502 29545 29546 + 29546 29497 29502 + 29547 29497 29546 + 29497 29547 29548 + 29548 29498 29497 + 29545 29389 29394 + 29545 29394 29549 + 29549 29546 29545 + 29546 29549 29550 + 29546 29550 29547 + 29547 29550 29551 + 29551 29552 29547 + 29548 29547 29552 + 29398 29549 29394 + 29550 29549 29398 + 29398 29551 29550 + 29398 29553 29551 + 29551 29553 29554 + 29554 29552 29551 + 29552 29554 29555 + 29556 29552 29555 + 29552 29556 29548 + 29556 29557 29548 + 29498 29548 29557 + 29557 29488 29498 + 29558 29553 29398 + 29553 29558 29559 + 29559 29554 29553 + 29555 29554 29559 + 29402 29558 29398 + 29558 29402 29407 + 29558 29407 29406 + 29406 29559 29558 + 29560 29559 29406 + 29559 29560 29555 + 29555 29560 29561 + 29561 29562 29555 + 29562 29563 29555 + 29556 29555 29563 + 29563 29564 29556 + 29556 29564 29557 + 29406 29411 29560 + 29560 29411 29410 + 29410 29561 29560 + 29419 29561 29410 + 29561 29419 29565 + 29565 29562 29561 + 29562 29565 29479 + 29479 29566 29562 + 29563 29562 29566 + 29567 29563 29566 + 29563 29567 29564 + 29557 29564 29567 + 29568 29557 29567 + 29488 29557 29568 + 29568 29483 29488 + 29565 29419 29418 + 29418 29569 29565 + 29569 29455 29565 + 29455 29479 29565 + 29418 29417 29569 + 29417 29450 29569 + 29455 29569 29450 + 29483 29568 29477 + 29566 29477 29568 + 29478 29477 29566 + 29566 29479 29478 + 29568 29567 29566 + 29570 29571 29572 + 29570 29573 29571 + 29574 29571 29573 + 29571 29574 29575 + 29572 29571 29575 + 29576 29570 29572 + 29570 29576 29577 + 29577 29578 29570 + 29573 29570 29578 + 29579 29573 29578 + 29580 29573 29579 + 29573 29580 29574 + 29572 29581 29576 + 29577 29576 29581 + 29581 29582 29577 + 29583 29577 29582 + 29578 29577 29583 + 29583 29584 29578 + 29578 29584 29585 + 29585 29579 29578 + 29581 29572 29586 + 29587 29581 29586 + 29581 29587 29588 + 29588 29582 29581 + 29582 29588 29589 + 29589 29590 29582 + 29582 29590 29583 + 29591 29586 29572 + 29586 29591 29592 + 29592 29593 29586 + 29593 29587 29586 + 29587 29593 29594 + 29588 29587 29594 + 29589 29588 29594 + 29595 29591 29572 + 29591 29595 29596 + 29596 29597 29591 + 29597 29592 29591 + 29592 29597 29598 + 29599 29592 29598 + 29593 29592 29599 + 29599 29594 29593 + 29575 29595 29572 + 29595 29575 29600 + 29600 29601 29595 + 29601 29596 29595 + 29596 29601 29602 + 29603 29596 29602 + 29597 29596 29603 + 29603 29598 29597 + 29604 29600 29575 + 29600 29604 29605 + 29606 29600 29605 + 29601 29600 29606 + 29606 29602 29601 + 29602 29606 29607 + 29607 29608 29602 + 29603 29602 29608 + 29604 29575 29609 + 29610 29604 29609 + 29604 29610 29611 + 29611 29605 29604 + 29605 29611 29612 + 29612 29613 29605 + 29606 29605 29613 + 29613 29607 29606 + 29614 29609 29575 + 29615 29609 29614 + 29615 29610 29609 + 29611 29610 29615 + 29615 29616 29611 + 29612 29611 29616 + 29616 29617 29612 + 29618 29612 29617 + 29613 29612 29618 + 29574 29614 29575 + 29614 29574 29619 + 29619 29620 29614 + 29620 29621 29614 + 29621 29615 29614 + 29615 29621 29622 + 29622 29616 29615 + 29616 29622 29617 + 29580 29619 29574 + 29580 29623 29619 + 29623 29624 29619 + 29620 29619 29624 + 29624 29625 29620 + 29621 29620 29625 + 29622 29621 29625 + 29626 29622 29625 + 29622 29626 29617 + 29579 29623 29580 + 29623 29579 29585 + 29585 29627 29623 + 29623 29627 29628 + 29628 29624 29623 + 29625 29624 29628 + 29628 29629 29625 + 29625 29629 29626 + 29630 29626 29629 + 29617 29626 29630 + 29630 29631 29617 + 29617 29631 29618 + 29627 29585 29632 + 29632 29633 29627 + 29627 29633 29634 + 29634 29628 29627 + 29629 29628 29634 + 29634 29635 29629 + 29629 29635 29630 + 29636 29630 29635 + 29631 29630 29636 + 29632 29585 29584 + 29584 29637 29632 + 29638 29632 29637 + 29633 29632 29638 + 29638 29639 29633 + 29633 29639 29640 + 29640 29634 29633 + 29635 29634 29640 + 29640 29641 29635 + 29635 29641 29636 + 29642 29637 29584 + 29637 29642 29643 + 29643 29644 29637 + 29637 29644 29638 + 29645 29638 29644 + 29639 29638 29645 + 29584 29583 29642 + 29642 29583 29590 + 29590 29646 29642 + 29643 29642 29646 + 29646 29647 29643 + 29648 29643 29647 + 29644 29643 29648 + 29648 29649 29644 + 29644 29649 29645 + 29650 29646 29590 + 29646 29650 29651 + 29651 29647 29646 + 29647 29651 29652 + 29652 29653 29647 + 29647 29653 29648 + 29654 29648 29653 + 29649 29648 29654 + 29590 29589 29650 + 29650 29589 29655 + 29655 29656 29650 + 29650 29656 29657 + 29657 29651 29650 + 29652 29651 29657 + 29657 29658 29652 + 29659 29652 29658 + 29653 29652 29659 + 29594 29655 29589 + 29660 29655 29594 + 29655 29660 29661 + 29661 29656 29655 + 29656 29661 29662 + 29662 29657 29656 + 29657 29662 29663 + 29663 29658 29657 + 29594 29599 29660 + 29660 29599 29598 + 29598 29664 29660 + 29661 29660 29664 + 29664 29665 29661 + 29662 29661 29665 + 29665 29666 29662 + 29663 29662 29666 + 29666 29667 29663 + 29668 29663 29667 + 29658 29663 29668 + 29669 29664 29598 + 29664 29669 29670 + 29670 29665 29664 + 29665 29670 29671 + 29671 29666 29665 + 29666 29671 29672 + 29672 29667 29666 + 29598 29603 29669 + 29669 29603 29608 + 29670 29669 29608 + 29608 29673 29670 + 29671 29670 29673 + 29673 29674 29671 + 29672 29671 29674 + 29674 29675 29672 + 29676 29672 29675 + 29667 29672 29676 + 29676 29677 29667 + 29667 29677 29668 + 29678 29673 29608 + 29673 29678 29679 + 29679 29674 29673 + 29674 29679 29680 + 29680 29675 29674 + 29675 29680 29681 + 29681 29682 29675 + 29675 29682 29676 + 29608 29607 29678 + 29678 29607 29613 + 29613 29683 29678 + 29679 29678 29683 + 29683 29684 29679 + 29680 29679 29684 + 29684 29685 29680 + 29681 29680 29685 + 29685 29686 29681 + 29687 29681 29686 + 29682 29681 29687 + 29618 29683 29613 + 29683 29618 29688 + 29688 29684 29683 + 29684 29688 29689 + 29689 29685 29684 + 29685 29689 29690 + 29690 29686 29685 + 29686 29690 29691 + 29691 29692 29686 + 29686 29692 29687 + 29688 29618 29631 + 29631 29693 29688 + 29689 29688 29693 + 29693 29694 29689 + 29690 29689 29694 + 29694 29695 29690 + 29691 29690 29695 + 29636 29693 29631 + 29693 29636 29696 + 29696 29694 29693 + 29694 29696 29697 + 29697 29695 29694 + 29695 29697 29698 + 29698 29699 29695 + 29695 29699 29691 + 29696 29636 29641 + 29641 29700 29696 + 29697 29696 29700 + 29700 29701 29697 + 29698 29697 29701 + 29701 29702 29698 + 29703 29698 29702 + 29699 29698 29703 + 29704 29700 29641 + 29700 29704 29705 + 29705 29701 29700 + 29701 29705 29706 + 29706 29702 29701 + 29702 29706 29707 + 29707 29708 29702 + 29702 29708 29703 + 29641 29640 29704 + 29704 29640 29639 + 29639 29709 29704 + 29704 29709 29710 + 29710 29705 29704 + 29706 29705 29710 + 29710 29711 29706 + 29706 29711 29712 + 29712 29707 29706 + 29645 29709 29639 + 29709 29645 29713 + 29713 29710 29709 + 29710 29713 29714 + 29714 29711 29710 + 29711 29714 29715 + 29715 29712 29711 + 29713 29645 29649 + 29649 29716 29713 + 29714 29713 29716 + 29716 29717 29714 + 29714 29717 29718 + 29718 29715 29714 + 29719 29715 29718 + 29712 29715 29719 + 29654 29716 29649 + 29716 29654 29720 + 29720 29717 29716 + 29717 29720 29721 + 29721 29722 29717 + 29717 29722 29718 + 29723 29718 29722 + 29718 29723 29724 + 29718 29724 29719 + 29720 29654 29725 + 29725 29726 29720 + 29720 29726 29727 + 29727 29721 29720 + 29728 29721 29727 + 29728 29722 29721 + 29722 29728 29723 + 29653 29725 29654 + 29659 29725 29653 + 29725 29659 29729 + 29729 29726 29725 + 29726 29729 29730 + 29730 29731 29726 + 29726 29731 29727 + 29729 29659 29732 + 29732 29733 29729 + 29729 29733 29734 + 29734 29730 29729 + 29735 29730 29734 + 29730 29735 29736 + 29736 29731 29730 + 29658 29732 29659 + 29668 29732 29658 + 29732 29668 29737 + 29737 29733 29732 + 29733 29737 29738 + 29738 29734 29733 + 29739 29734 29738 + 29734 29739 29735 + 29740 29735 29739 + 29736 29735 29740 + 29737 29668 29677 + 29677 29741 29737 + 29737 29741 29742 + 29742 29738 29737 + 29743 29738 29742 + 29738 29743 29739 + 29739 29743 29744 + 29744 29745 29739 + 29739 29745 29740 + 29746 29741 29677 + 29741 29746 29747 + 29747 29742 29741 + 29748 29742 29747 + 29742 29748 29743 + 29744 29743 29748 + 29677 29676 29746 + 29746 29676 29682 + 29682 29749 29746 + 29746 29749 29750 + 29750 29747 29746 + 29751 29747 29750 + 29747 29751 29748 + 29748 29751 29752 + 29752 29753 29748 + 29748 29753 29744 + 29687 29749 29682 + 29749 29687 29754 + 29754 29750 29749 + 29750 29754 29755 + 29755 29756 29750 + 29750 29756 29751 + 29752 29751 29756 + 29757 29754 29687 + 29755 29754 29757 + 29687 29692 29757 + 29758 29757 29692 + 29759 29757 29758 + 29757 29759 29755 + 29692 29691 29758 + 29760 29758 29691 + 29761 29758 29760 + 29758 29761 29759 + 29759 29761 29762 + 29762 29763 29759 + 29755 29759 29763 + 29691 29699 29760 + 29699 29764 29760 + 29765 29760 29764 + 29760 29765 29766 + 29760 29766 29761 + 29761 29766 29767 + 29767 29762 29761 + 29768 29762 29767 + 29763 29762 29768 + 29703 29764 29699 + 29764 29703 29769 + 29769 29770 29764 + 29764 29770 29765 + 29765 29770 29771 + 29771 29772 29765 + 29766 29765 29772 + 29772 29767 29766 + 29769 29703 29708 + 29708 29773 29769 + 29769 29773 29774 + 29774 29775 29769 + 29770 29769 29775 + 29775 29771 29770 + 29771 29775 29776 + 29771 29776 29777 + 29777 29772 29771 + 29767 29772 29777 + 29773 29708 29707 + 29707 29778 29773 + 29773 29778 29779 + 29779 29774 29773 + 29774 29779 29780 + 29780 29781 29774 + 29774 29781 29776 + 29776 29775 29774 + 29778 29707 29712 + 29712 29782 29778 + 29778 29782 29783 + 29783 29779 29778 + 29780 29779 29783 + 29783 29784 29780 + 29780 29784 29785 + 29781 29780 29785 + 29785 29786 29781 + 29776 29781 29786 + 29777 29776 29786 + 29719 29782 29712 + 29782 29719 29787 + 29787 29788 29782 + 29782 29788 29783 + 29789 29783 29788 + 29783 29789 29784 + 29784 29789 29790 + 29790 29791 29784 + 29784 29791 29785 + 29792 29787 29719 + 29793 29787 29792 + 29793 29788 29787 + 29788 29793 29789 + 29789 29793 29794 + 29794 29795 29789 + 29795 29790 29789 + 29719 29724 29792 + 29796 29792 29724 + 29792 29796 29797 + 29797 29794 29792 + 29792 29794 29793 + 29724 29723 29796 + 29798 29796 29723 + 29797 29796 29798 + 29798 29799 29797 + 29797 29799 29800 + 29794 29797 29800 + 29800 29795 29794 + 29801 29795 29800 + 29795 29801 29790 + 29802 29798 29723 + 29803 29798 29802 + 29798 29803 29799 + 29799 29803 29804 + 29799 29804 29800 + 29801 29800 29804 + 29804 29805 29801 + 29801 29805 29806 + 29801 29806 29790 + 29807 29802 29723 + 29808 29802 29807 + 29809 29802 29808 + 29802 29809 29803 + 29809 29810 29803 + 29810 29811 29803 + 29803 29811 29804 + 29805 29804 29811 + 29723 29728 29807 + 29727 29807 29728 + 29812 29807 29727 + 29807 29812 29808 + 29808 29812 29813 + 29813 29814 29808 + 29815 29808 29814 + 29808 29815 29809 + 29810 29809 29815 + 29727 29816 29812 + 29812 29816 29817 + 29817 29813 29812 + 29818 29813 29817 + 29813 29818 29819 + 29819 29814 29813 + 29820 29814 29819 + 29814 29820 29815 + 29816 29727 29731 + 29731 29736 29816 + 29817 29816 29736 + 29736 29821 29817 + 29822 29817 29821 + 29817 29822 29818 + 29818 29822 29823 + 29823 29824 29818 + 29819 29818 29824 + 29825 29819 29824 + 29819 29825 29820 + 29740 29821 29736 + 29821 29740 29826 + 29826 29827 29821 + 29821 29827 29822 + 29822 29827 29823 + 29828 29823 29827 + 29824 29823 29828 + 29829 29824 29828 + 29824 29829 29825 + 29830 29825 29829 + 29820 29825 29830 + 29826 29740 29745 + 29745 29831 29826 + 29828 29826 29831 + 29827 29826 29828 + 29831 29745 29744 + 29744 29832 29831 + 29831 29832 29833 + 29833 29834 29831 + 29831 29834 29828 + 29829 29828 29834 + 29832 29744 29753 + 29753 29835 29832 + 29833 29832 29835 + 29835 29836 29833 + 29837 29833 29836 + 29837 29834 29833 + 29834 29837 29829 + 29829 29837 29838 + 29838 29839 29829 + 29839 29830 29829 + 29835 29753 29752 + 29752 29840 29835 + 29835 29840 29841 + 29841 29836 29835 + 29842 29836 29841 + 29836 29842 29837 + 29837 29842 29838 + 29840 29752 29843 + 29843 29844 29840 + 29841 29840 29844 + 29845 29841 29844 + 29842 29841 29845 + 29845 29838 29842 + 29846 29838 29845 + 29838 29846 29847 + 29847 29839 29838 + 29756 29843 29752 + 29848 29843 29756 + 29844 29843 29848 + 29848 29849 29844 + 29844 29849 29850 + 29850 29851 29844 + 29844 29851 29845 + 29846 29845 29851 + 29756 29755 29848 + 29852 29848 29755 + 29849 29848 29852 + 29852 29853 29849 + 29853 29854 29849 + 29854 29850 29849 + 29855 29850 29854 + 29855 29851 29850 + 29851 29855 29846 + 29846 29855 29856 + 29846 29856 29847 + 29857 29852 29755 + 29858 29852 29857 + 29858 29853 29852 + 29853 29858 29859 + 29859 29854 29853 + 29859 29856 29854 + 29854 29856 29855 + 29763 29857 29755 + 29860 29857 29763 + 29861 29857 29860 + 29857 29861 29858 + 29859 29858 29861 + 29861 29862 29859 + 29862 29863 29859 + 29856 29859 29863 + 29863 29864 29856 + 29856 29864 29847 + 29763 29865 29860 + 29860 29865 29866 + 29866 29867 29860 + 29867 29868 29860 + 29861 29860 29868 + 29868 29862 29861 + 29768 29865 29763 + 29865 29768 29869 + 29869 29866 29865 + 29870 29866 29869 + 29866 29870 29871 + 29871 29867 29866 + 29867 29871 29872 + 29867 29872 29873 + 29873 29868 29867 + 29873 29862 29868 + 29768 29874 29869 + 29875 29869 29874 + 29869 29875 29870 + 29870 29875 29786 + 29786 29876 29870 + 29870 29876 29877 + 29877 29871 29870 + 29767 29874 29768 + 29777 29874 29767 + 29874 29777 29875 + 29786 29875 29777 + 29871 29877 29878 + 29879 29878 29877 + 29878 29879 29880 + 29880 29881 29878 + 29872 29878 29881 + 29872 29871 29878 + 29877 29882 29879 + 29879 29882 29883 + 29883 29884 29879 + 29879 29884 29885 + 29880 29879 29885 + 29839 29880 29885 + 29881 29880 29839 + 29882 29877 29876 + 29876 29886 29882 + 29883 29882 29886 + 29886 29887 29883 + 29888 29883 29887 + 29883 29888 29889 + 29884 29883 29889 + 29884 29889 29890 + 29890 29885 29884 + 29886 29876 29786 + 29786 29785 29886 + 29886 29785 29791 + 29791 29887 29886 + 29887 29791 29790 + 29790 29806 29887 + 29887 29806 29888 + 29805 29888 29806 + 29805 29891 29888 + 29891 29889 29888 + 29889 29891 29892 + 29890 29889 29892 + 29893 29890 29892 + 29890 29893 29830 + 29830 29885 29890 + 29885 29830 29839 + 29811 29891 29805 + 29891 29811 29810 + 29810 29892 29891 + 29810 29894 29892 + 29892 29894 29893 + 29893 29894 29815 + 29820 29893 29815 + 29830 29893 29820 + 29894 29810 29815 + 29839 29847 29881 + 29881 29847 29864 + 29864 29895 29881 + 29881 29895 29872 + 29895 29873 29872 + 29862 29873 29895 + 29895 29863 29862 + 29863 29895 29864 + 29896 29897 29898 + 29897 29896 29899 + 29899 29900 29897 + 29897 29900 29901 + 29901 29902 29897 + 29897 29902 29898 + 29898 29903 29896 + 29903 29904 29896 + 29899 29896 29904 + 29904 29905 29899 + 29906 29899 29905 + 29900 29899 29906 + 29903 29898 29907 + 29908 29903 29907 + 29903 29908 29909 + 29909 29904 29903 + 29904 29909 29910 + 29910 29905 29904 + 29907 29898 29902 + 29902 29911 29907 + 29907 29911 29912 + 29913 29907 29912 + 29907 29913 29914 + 29907 29914 29915 + 29915 29916 29907 + 29916 29908 29907 + 29911 29902 29901 + 29901 29917 29911 + 29911 29917 29918 + 29918 29912 29911 + 29919 29912 29918 + 29912 29919 29913 + 29913 29919 29920 + 29921 29913 29920 + 29913 29921 29914 + 29917 29901 29922 + 29922 29923 29917 + 29917 29923 29924 + 29924 29918 29917 + 29925 29918 29924 + 29918 29925 29919 + 29919 29925 29926 + 29926 29920 29919 + 29922 29901 29900 + 29900 29927 29922 + 29928 29922 29927 + 29923 29922 29928 + 29928 29929 29923 + 29923 29929 29930 + 29930 29924 29923 + 29931 29924 29930 + 29924 29931 29925 + 29906 29927 29900 + 29927 29906 29932 + 29932 29933 29927 + 29927 29933 29928 + 29934 29928 29933 + 29929 29928 29934 + 29934 29935 29929 + 29929 29935 29936 + 29936 29930 29929 + 29932 29906 29937 + 29937 29938 29932 + 29939 29932 29938 + 29933 29932 29939 + 29939 29940 29933 + 29933 29940 29934 + 29941 29934 29940 + 29935 29934 29941 + 29905 29937 29906 + 29942 29937 29905 + 29937 29942 29943 + 29943 29938 29937 + 29938 29943 29944 + 29944 29945 29938 + 29938 29945 29939 + 29946 29939 29945 + 29940 29939 29946 + 29905 29910 29942 + 29942 29910 29947 + 29947 29948 29942 + 29943 29942 29948 + 29948 29949 29943 + 29944 29943 29949 + 29949 29950 29944 + 29951 29944 29950 + 29945 29944 29951 + 29952 29947 29910 + 29953 29947 29952 + 29947 29953 29954 + 29954 29948 29947 + 29948 29954 29955 + 29955 29949 29948 + 29949 29955 29956 + 29956 29950 29949 + 29910 29909 29952 + 29908 29952 29909 + 29908 29916 29952 + 29916 29957 29952 + 29952 29957 29953 + 29953 29957 29958 + 29958 29959 29953 + 29954 29953 29959 + 29959 29960 29954 + 29955 29954 29960 + 29960 29961 29955 + 29956 29955 29961 + 29916 29958 29957 + 29916 29915 29958 + 29915 29962 29958 + 29958 29962 29963 + 29963 29959 29958 + 29959 29963 29964 + 29964 29960 29959 + 29960 29964 29965 + 29965 29961 29960 + 29915 29966 29962 + 29963 29962 29966 + 29966 29967 29963 + 29964 29963 29967 + 29967 29968 29964 + 29965 29964 29968 + 29968 29969 29965 + 29970 29965 29969 + 29961 29965 29970 + 29971 29966 29915 + 29966 29971 29972 + 29972 29967 29966 + 29967 29972 29973 + 29973 29968 29967 + 29968 29973 29974 + 29974 29969 29968 + 29915 29975 29971 + 29975 29976 29971 + 29972 29971 29976 + 29976 29977 29972 + 29972 29977 29978 + 29978 29973 29972 + 29974 29973 29978 + 29979 29975 29915 + 29975 29979 29976 + 29979 29980 29976 + 29976 29980 29981 + 29981 29977 29976 + 29977 29981 29982 + 29982 29978 29977 + 29983 29979 29915 + 29979 29983 29984 + 29979 29984 29980 + 29981 29980 29984 + 29984 29985 29981 + 29982 29981 29985 + 29985 29986 29982 + 29987 29982 29986 + 29978 29982 29987 + 29914 29983 29915 + 29983 29914 29988 + 29988 29989 29983 + 29983 29989 29990 + 29983 29990 29984 + 29984 29990 29991 + 29991 29985 29984 + 29985 29991 29992 + 29992 29986 29985 + 29914 29993 29988 + 29994 29988 29993 + 29989 29988 29994 + 29994 29995 29989 + 29989 29995 29991 + 29991 29990 29989 + 29996 29993 29914 + 29993 29996 29997 + 29997 29998 29993 + 29993 29998 29994 + 29999 29994 29998 + 29995 29994 29999 + 29914 29921 29996 + 29921 30000 29996 + 29997 29996 30000 + 30000 30001 29997 + 30002 29997 30001 + 29998 29997 30002 + 30002 30003 29998 + 29998 30003 29999 + 29920 30000 29921 + 30000 29920 29926 + 29926 30001 30000 + 30001 29926 30004 + 30004 30005 30001 + 30001 30005 30002 + 30006 30002 30005 + 30003 30002 30006 + 30006 30007 30003 + 30003 30007 30008 + 30008 29999 30003 + 30004 29926 29925 + 29925 29931 30004 + 30009 30004 29931 + 30005 30004 30009 + 30009 30010 30005 + 30005 30010 30006 + 30011 30006 30010 + 30007 30006 30011 + 30011 30012 30007 + 30008 30007 30012 + 29931 30013 30009 + 30014 30009 30013 + 30010 30009 30014 + 30014 30015 30010 + 30010 30015 30011 + 30016 30011 30015 + 30012 30011 30016 + 29930 30013 29931 + 30013 29930 29936 + 29936 30017 30013 + 30013 30017 30014 + 30018 30014 30017 + 30014 30018 30019 + 30015 30014 30019 + 30015 30019 30016 + 30017 29936 30020 + 30020 30021 30017 + 30017 30021 30018 + 30022 30018 30021 + 30019 30018 30022 + 30022 30023 30019 + 30016 30019 30023 + 30020 29936 29935 + 29935 30024 30020 + 30020 30024 30025 + 30025 30026 30020 + 30021 30020 30026 + 30026 30027 30021 + 30027 30022 30021 + 29941 30024 29935 + 30024 29941 30028 + 30028 30025 30024 + 30025 30028 30029 + 30029 30030 30025 + 30025 30030 30031 + 30031 30026 30025 + 30027 30026 30031 + 30031 30032 30027 + 30027 30032 30022 + 30028 29941 30033 + 30033 30034 30028 + 30029 30028 30034 + 30034 30035 30029 + 30029 30035 30036 + 30036 30037 30029 + 30030 30029 30037 + 29941 30038 30033 + 30039 30033 30038 + 30033 30039 30040 + 30033 30040 30034 + 30040 30041 30034 + 30035 30034 30041 + 30035 30041 30042 + 30042 30036 30035 + 29940 30038 29941 + 29946 30038 29940 + 30038 29946 30039 + 30039 29946 30043 + 30043 30044 30039 + 30040 30039 30044 + 30044 30045 30040 + 30041 30040 30045 + 30042 30041 30045 + 30046 30042 30045 + 30047 30042 30046 + 30036 30042 30047 + 29945 30043 29946 + 29951 30043 29945 + 30043 29951 30048 + 30048 30044 30043 + 30045 30044 30048 + 30048 30049 30045 + 30045 30049 30050 + 30050 30051 30045 + 30045 30051 30046 + 30052 30048 29951 + 30052 30053 30048 + 30053 30049 30048 + 30050 30049 30053 + 29951 30054 30052 + 30055 30052 30054 + 30052 30055 30056 + 30053 30052 30056 + 30053 30056 30057 + 30057 30058 30053 + 30053 30058 30050 + 29950 30054 29951 + 30059 30054 29950 + 30054 30059 30055 + 30060 30055 30059 + 30056 30055 30060 + 30060 30061 30056 + 30056 30061 30062 + 30062 30057 30056 + 30063 30057 30062 + 30058 30057 30063 + 29950 29956 30059 + 30059 29956 30064 + 30064 30065 30059 + 30059 30065 30060 + 30066 30060 30065 + 30060 30066 30067 + 30067 30061 30060 + 30061 30067 30068 + 30068 30062 30061 + 29961 30064 29956 + 29970 30064 29961 + 30064 29970 30069 + 30064 30069 30065 + 30065 30069 30066 + 30070 30066 30069 + 30067 30066 30070 + 30070 30071 30067 + 30067 30071 30072 + 30072 30068 30067 + 30069 29970 30073 + 30073 30074 30069 + 30069 30074 30070 + 30075 30070 30074 + 30070 30075 30076 + 30076 30071 30070 + 30071 30076 30077 + 30077 30072 30071 + 29969 30073 29970 + 30078 30073 29969 + 30073 30078 30079 + 30079 30074 30073 + 30074 30079 30075 + 30080 30075 30079 + 30076 30075 30080 + 30080 30081 30076 + 30077 30076 30081 + 29969 29974 30078 + 30078 29974 30082 + 30082 30083 30078 + 30079 30078 30083 + 30083 30084 30079 + 30079 30084 30080 + 30085 30080 30084 + 30081 30080 30085 + 29978 30082 29974 + 29987 30082 29978 + 30082 29987 30086 + 30086 30083 30082 + 30083 30086 30087 + 30087 30084 30083 + 30084 30087 30085 + 30088 30085 30087 + 30089 30085 30088 + 30085 30089 30081 + 30086 29987 30090 + 30090 30091 30086 + 30087 30086 30091 + 30091 30092 30087 + 30087 30092 30088 + 30093 30088 30092 + 30094 30088 30093 + 30088 30094 30089 + 29986 30090 29987 + 30095 30090 29986 + 30090 30095 30096 + 30096 30091 30090 + 30091 30096 30097 + 30097 30092 30091 + 30092 30097 30093 + 29986 29992 30095 + 30095 29992 30098 + 30098 30099 30095 + 30096 30095 30099 + 30099 30100 30096 + 30097 30096 30100 + 30100 30101 30097 + 30093 30097 30101 + 29995 30098 29992 + 29999 30098 29995 + 30098 29999 30008 + 30008 30099 30098 + 30099 30008 30102 + 30102 30100 30099 + 30100 30102 30103 + 30103 30101 30100 + 29992 29991 29995 + 30012 30102 30008 + 30103 30102 30012 + 30012 30104 30103 + 30103 30104 30105 + 30105 30106 30103 + 30101 30103 30106 + 30106 30107 30101 + 30101 30107 30093 + 30108 30093 30107 + 30093 30108 30094 + 30016 30104 30012 + 30104 30016 30109 + 30109 30110 30104 + 30104 30110 30105 + 30023 30109 30016 + 30109 30023 30111 + 30112 30109 30111 + 30112 30110 30109 + 30110 30112 30113 + 30113 30105 30110 + 30111 30023 30022 + 30032 30111 30022 + 30111 30032 30114 + 30112 30111 30114 + 30114 30113 30112 + 30115 30113 30114 + 30105 30113 30115 + 30115 30116 30105 + 30105 30116 30117 + 30117 30106 30105 + 30106 30117 30118 + 30118 30107 30106 + 30107 30118 30108 + 30119 30114 30032 + 30120 30114 30119 + 30114 30120 30115 + 30121 30115 30120 + 30116 30115 30121 + 30121 30122 30116 + 30116 30122 30123 + 30123 30117 30116 + 30118 30117 30123 + 30032 30031 30119 + 30124 30119 30031 + 30125 30119 30124 + 30119 30125 30120 + 30120 30125 30126 + 30126 30127 30120 + 30120 30127 30128 + 30128 30121 30120 + 30031 30030 30124 + 30037 30124 30030 + 30124 30037 30129 + 30124 30129 30125 + 30125 30129 30130 + 30130 30131 30125 + 30131 30132 30125 + 30132 30126 30125 + 30133 30126 30132 + 30133 30127 30126 + 30129 30037 30036 + 30036 30130 30129 + 30047 30130 30036 + 30130 30047 30134 + 30134 30131 30130 + 30131 30134 30135 + 30135 30136 30131 + 30131 30136 30137 + 30137 30132 30131 + 30137 30138 30132 + 30132 30138 30133 + 30139 30134 30047 + 30135 30134 30139 + 30139 30140 30135 + 30135 30140 30141 + 30141 30142 30135 + 30136 30135 30142 + 30142 30143 30136 + 30137 30136 30143 + 30144 30139 30047 + 30145 30139 30144 + 30145 30140 30139 + 30140 30145 30146 + 30146 30141 30140 + 30047 30147 30144 + 30148 30144 30147 + 30144 30148 30149 + 30149 30150 30144 + 30144 30150 30145 + 30046 30147 30047 + 30046 30151 30147 + 30147 30151 30148 + 30152 30148 30151 + 30152 30153 30148 + 30153 30149 30148 + 30153 30154 30149 + 30150 30149 30154 + 30154 30155 30150 + 30145 30150 30155 + 30151 30046 30051 + 30051 30152 30151 + 30152 30051 30050 + 30153 30152 30050 + 30050 30156 30153 + 30153 30156 30154 + 30156 30157 30154 + 30154 30157 30155 + 30155 30157 30158 + 30158 30159 30155 + 30155 30159 30145 + 30159 30146 30145 + 30160 30146 30159 + 30141 30146 30160 + 30156 30050 30058 + 30058 30161 30156 + 30157 30156 30161 + 30158 30157 30161 + 30162 30158 30161 + 30159 30158 30162 + 30159 30162 30160 + 30163 30160 30162 + 30164 30160 30163 + 30160 30164 30141 + 30063 30161 30058 + 30161 30063 30162 + 30162 30063 30163 + 30062 30163 30063 + 30163 30062 30068 + 30068 30165 30163 + 30163 30165 30164 + 30164 30165 30166 + 30166 30167 30164 + 30141 30164 30167 + 30167 30142 30141 + 30143 30142 30167 + 30165 30068 30072 + 30072 30166 30165 + 30166 30072 30077 + 30077 30168 30166 + 30166 30168 30169 + 30169 30167 30166 + 30167 30169 30143 + 30143 30169 30170 + 30170 30171 30143 + 30143 30171 30137 + 30168 30077 30172 + 30172 30173 30168 + 30168 30173 30174 + 30174 30170 30168 + 30170 30169 30168 + 30081 30172 30077 + 30175 30172 30081 + 30172 30175 30176 + 30176 30173 30172 + 30173 30176 30177 + 30177 30174 30173 + 30081 30089 30175 + 30175 30089 30094 + 30178 30175 30094 + 30176 30175 30178 + 30178 30179 30176 + 30176 30179 30180 + 30180 30177 30176 + 30181 30177 30180 + 30174 30177 30181 + 30094 30182 30178 + 30183 30178 30182 + 30179 30178 30183 + 30179 30183 30184 + 30184 30180 30179 + 30180 30184 30185 + 30180 30185 30181 + 30186 30182 30094 + 30182 30186 30187 + 30187 30188 30182 + 30182 30188 30183 + 30188 30189 30183 + 30189 30184 30183 + 30185 30184 30189 + 30189 30190 30185 + 30181 30185 30190 + 30094 30108 30186 + 30186 30108 30118 + 30118 30191 30186 + 30187 30186 30191 + 30191 30192 30187 + 30187 30192 30193 + 30193 30194 30187 + 30188 30187 30194 + 30194 30189 30188 + 30189 30194 30190 + 30123 30191 30118 + 30191 30123 30192 + 30192 30123 30122 + 30122 30193 30192 + 30193 30122 30121 + 30193 30121 30128 + 30128 30194 30193 + 30194 30128 30190 + 30195 30190 30128 + 30190 30195 30181 + 30196 30181 30195 + 30181 30196 30174 + 30174 30196 30197 + 30197 30170 30174 + 30170 30197 30171 + 30198 30195 30128 + 30199 30195 30198 + 30195 30199 30196 + 30197 30196 30199 + 30199 30133 30197 + 30133 30138 30197 + 30197 30138 30137 + 30171 30197 30137 + 30127 30198 30128 + 30199 30198 30127 + 30127 30133 30199 + 30200 30201 30202 + 30201 30200 30203 + 30201 30203 30204 + 30204 30205 30201 + 30205 30206 30201 + 30206 30207 30201 + 30201 30207 30208 + 30208 30209 30201 + 30201 30209 30202 + 30202 30210 30200 + 30210 30211 30200 + 30212 30200 30211 + 30200 30212 30203 + 30210 30202 30213 + 30213 30214 30210 + 30210 30214 30215 + 30215 30211 30210 + 30216 30211 30215 + 30211 30216 30212 + 30216 30217 30212 + 30203 30212 30217 + 30213 30202 30209 + 30209 30218 30213 + 30219 30213 30218 + 30214 30213 30219 + 30219 30220 30214 + 30214 30220 30221 + 30221 30215 30214 + 30222 30215 30221 + 30215 30222 30216 + 30223 30218 30209 + 30218 30223 30224 + 30224 30225 30218 + 30218 30225 30219 + 30226 30219 30225 + 30220 30219 30226 + 30209 30208 30223 + 30223 30208 30227 + 30227 30228 30223 + 30224 30223 30228 + 30228 30229 30224 + 30230 30224 30229 + 30225 30224 30230 + 30230 30231 30225 + 30225 30231 30226 + 30227 30208 30207 + 30227 30207 30206 + 30232 30227 30206 + 30227 30232 30233 + 30233 30228 30227 + 30228 30233 30234 + 30234 30229 30228 + 30229 30234 30235 + 30235 30236 30229 + 30229 30236 30230 + 30237 30232 30206 + 30233 30232 30237 + 30237 30238 30233 + 30234 30233 30238 + 30238 30239 30234 + 30235 30234 30239 + 30239 30240 30235 + 30241 30235 30240 + 30236 30235 30241 + 30237 30206 30205 + 30242 30237 30205 + 30237 30242 30243 + 30243 30238 30237 + 30238 30243 30244 + 30244 30239 30238 + 30239 30244 30245 + 30245 30240 30239 + 30246 30242 30205 + 30243 30242 30246 + 30246 30247 30243 + 30244 30243 30247 + 30247 30248 30244 + 30245 30244 30248 + 30248 30249 30245 + 30250 30245 30249 + 30240 30245 30250 + 30251 30246 30205 + 30246 30251 30252 + 30252 30247 30246 + 30247 30252 30253 + 30253 30248 30247 + 30248 30253 30254 + 30254 30249 30248 + 30205 30204 30251 + 30255 30251 30204 + 30252 30251 30255 + 30255 30256 30252 + 30253 30252 30256 + 30256 30257 30253 + 30254 30253 30257 + 30258 30255 30204 + 30255 30258 30259 + 30259 30256 30255 + 30256 30259 30260 + 30260 30257 30256 + 30257 30260 30261 + 30261 30262 30257 + 30257 30262 30254 + 30204 30263 30258 + 30264 30258 30263 + 30259 30258 30264 + 30264 30265 30259 + 30260 30259 30265 + 30265 30266 30260 + 30261 30260 30266 + 30267 30263 30204 + 30263 30267 30268 + 30268 30264 30263 + 30264 30268 30269 + 30269 30265 30264 + 30265 30269 30270 + 30270 30266 30265 + 30271 30267 30204 + 30267 30271 30272 + 30272 30273 30267 + 30273 30268 30267 + 30269 30268 30273 + 30273 30274 30269 + 30270 30269 30274 + 30275 30271 30204 + 30271 30275 30276 + 30276 30277 30271 + 30277 30272 30271 + 30278 30272 30277 + 30273 30272 30278 + 30278 30274 30273 + 30203 30275 30204 + 30275 30203 30279 + 30279 30280 30275 + 30280 30276 30275 + 30281 30276 30280 + 30277 30276 30281 + 30281 30282 30277 + 30277 30282 30278 + 30283 30279 30203 + 30284 30279 30283 + 30280 30279 30284 + 30284 30285 30280 + 30280 30285 30281 + 30286 30281 30285 + 30282 30281 30286 + 30286 30287 30282 + 30278 30282 30287 + 30217 30283 30203 + 30283 30217 30288 + 30288 30289 30283 + 30283 30289 30284 + 30290 30284 30289 + 30285 30284 30290 + 30290 30291 30285 + 30285 30291 30286 + 30292 30286 30291 + 30287 30286 30292 + 30288 30217 30216 + 30216 30222 30288 + 30293 30288 30222 + 30289 30288 30293 + 30293 30294 30289 + 30289 30294 30290 + 30295 30290 30294 + 30291 30290 30295 + 30295 30296 30291 + 30291 30296 30292 + 30222 30297 30293 + 30298 30293 30297 + 30294 30293 30298 + 30298 30299 30294 + 30294 30299 30295 + 30300 30295 30299 + 30296 30295 30300 + 30221 30297 30222 + 30297 30221 30301 + 30301 30302 30297 + 30297 30302 30298 + 30303 30298 30302 + 30299 30298 30303 + 30303 30304 30299 + 30299 30304 30300 + 30301 30221 30220 + 30220 30305 30301 + 30306 30301 30305 + 30302 30301 30306 + 30306 30307 30302 + 30302 30307 30303 + 30308 30303 30307 + 30304 30303 30308 + 30226 30305 30220 + 30305 30226 30309 + 30309 30310 30305 + 30305 30310 30306 + 30311 30306 30310 + 30307 30306 30311 + 30311 30312 30307 + 30307 30312 30308 + 30309 30226 30231 + 30231 30313 30309 + 30314 30309 30313 + 30310 30309 30314 + 30314 30315 30310 + 30310 30315 30311 + 30316 30311 30315 + 30312 30311 30316 + 30316 30317 30312 + 30308 30312 30317 + 30318 30313 30231 + 30313 30318 30319 + 30319 30320 30313 + 30313 30320 30314 + 30231 30230 30318 + 30318 30230 30236 + 30236 30321 30318 + 30319 30318 30321 + 30321 30322 30319 + 30319 30322 30323 + 30323 30324 30319 + 30320 30319 30324 + 30324 30325 30320 + 30314 30320 30325 + 30241 30321 30236 + 30321 30241 30326 + 30326 30322 30321 + 30322 30326 30327 + 30327 30323 30322 + 30323 30327 30328 + 30328 30329 30323 + 30323 30329 30330 + 30330 30324 30323 + 30325 30324 30330 + 30326 30241 30331 + 30331 30332 30326 + 30326 30332 30327 + 30332 30333 30327 + 30328 30327 30333 + 30240 30331 30241 + 30250 30331 30240 + 30332 30331 30250 + 30334 30332 30250 + 30332 30334 30333 + 30334 30335 30333 + 30333 30335 30336 + 30333 30336 30328 + 30328 30336 30337 + 30337 30338 30328 + 30329 30328 30338 + 30334 30250 30339 + 30339 30340 30334 + 30335 30334 30340 + 30341 30335 30340 + 30336 30335 30341 + 30341 30342 30336 + 30336 30342 30337 + 30249 30339 30250 + 30343 30339 30249 + 30339 30343 30344 + 30344 30340 30339 + 30340 30344 30345 + 30345 30341 30340 + 30341 30345 30342 + 30342 30345 30346 + 30346 30337 30342 + 30249 30254 30343 + 30347 30343 30254 + 30344 30343 30347 + 30347 30348 30344 + 30345 30344 30348 + 30348 30349 30345 + 30349 30346 30345 + 30254 30262 30347 + 30350 30347 30262 + 30347 30350 30351 + 30351 30348 30347 + 30348 30351 30352 + 30352 30349 30348 + 30353 30349 30352 + 30349 30353 30346 + 30262 30261 30350 + 30350 30261 30354 + 30354 30355 30350 + 30351 30350 30355 + 30355 30356 30351 + 30352 30351 30356 + 30356 30357 30352 + 30358 30352 30357 + 30352 30358 30353 + 30266 30354 30261 + 30359 30354 30266 + 30354 30359 30360 + 30360 30355 30354 + 30355 30360 30361 + 30361 30356 30355 + 30356 30361 30362 + 30362 30357 30356 + 30363 30357 30362 + 30357 30363 30358 + 30266 30270 30359 + 30359 30270 30364 + 30364 30365 30359 + 30360 30359 30365 + 30365 30366 30360 + 30361 30360 30366 + 30366 30367 30361 + 30361 30367 30368 + 30368 30362 30361 + 30274 30364 30270 + 30369 30364 30274 + 30364 30369 30370 + 30370 30365 30364 + 30365 30370 30371 + 30371 30366 30365 + 30366 30371 30372 + 30372 30367 30366 + 30367 30372 30373 + 30373 30368 30367 + 30274 30278 30369 + 30287 30369 30278 + 30370 30369 30287 + 30287 30374 30370 + 30371 30370 30374 + 30374 30375 30371 + 30372 30371 30375 + 30375 30376 30372 + 30372 30376 30377 + 30377 30373 30372 + 30292 30374 30287 + 30374 30292 30378 + 30378 30375 30374 + 30375 30378 30379 + 30379 30376 30375 + 30376 30379 30380 + 30380 30377 30376 + 30378 30292 30296 + 30296 30381 30378 + 30379 30378 30381 + 30381 30382 30379 + 30379 30382 30383 + 30383 30380 30379 + 30384 30380 30383 + 30377 30380 30384 + 30300 30381 30296 + 30381 30300 30385 + 30385 30382 30381 + 30382 30385 30386 + 30386 30383 30382 + 30383 30386 30387 + 30387 30388 30383 + 30383 30388 30384 + 30385 30300 30304 + 30304 30389 30385 + 30385 30389 30390 + 30390 30386 30385 + 30387 30386 30390 + 30390 30391 30387 + 30387 30391 30392 + 30392 30393 30387 + 30388 30387 30393 + 30308 30389 30304 + 30389 30308 30394 + 30394 30390 30389 + 30391 30390 30394 + 30394 30395 30391 + 30391 30395 30396 + 30396 30392 30391 + 30317 30394 30308 + 30395 30394 30317 + 30317 30397 30395 + 30396 30395 30397 + 30397 30398 30396 + 30399 30396 30398 + 30392 30396 30399 + 30399 30400 30392 + 30392 30400 30401 + 30401 30393 30392 + 30397 30317 30316 + 30316 30402 30397 + 30397 30402 30403 + 30403 30398 30397 + 30404 30398 30403 + 30398 30404 30399 + 30399 30404 30405 + 30405 30406 30399 + 30400 30399 30406 + 30402 30316 30407 + 30407 30408 30402 + 30403 30402 30408 + 30315 30407 30316 + 30409 30407 30315 + 30408 30407 30409 + 30408 30409 30410 + 30410 30411 30408 + 30408 30411 30403 + 30315 30314 30409 + 30410 30409 30314 + 30325 30410 30314 + 30412 30410 30325 + 30411 30410 30412 + 30411 30412 30413 + 30413 30414 30411 + 30411 30414 30403 + 30414 30415 30403 + 30416 30403 30415 + 30403 30416 30404 + 30325 30417 30412 + 30412 30417 30418 + 30418 30413 30412 + 30419 30413 30418 + 30414 30413 30419 + 30419 30420 30414 + 30414 30420 30421 + 30421 30415 30414 + 30330 30417 30325 + 30417 30330 30422 + 30422 30418 30417 + 30423 30418 30422 + 30418 30423 30419 + 30419 30423 30424 + 30424 30425 30419 + 30425 30426 30419 + 30420 30419 30426 + 30427 30422 30330 + 30423 30422 30427 + 30427 30428 30423 + 30423 30428 30424 + 30429 30424 30428 + 30424 30429 30430 + 30424 30430 30431 + 30431 30425 30424 + 30330 30329 30427 + 30338 30427 30329 + 30428 30427 30338 + 30338 30432 30428 + 30428 30432 30429 + 30433 30429 30432 + 30429 30433 30434 + 30430 30429 30434 + 30430 30434 30435 + 30435 30436 30430 + 30436 30431 30430 + 30432 30338 30337 + 30337 30437 30432 + 30432 30437 30433 + 30437 30438 30433 + 30438 30439 30433 + 30440 30433 30439 + 30433 30440 30434 + 30434 30440 30441 + 30441 30435 30434 + 30337 30346 30437 + 30346 30442 30437 + 30437 30442 30443 + 30443 30438 30437 + 30438 30443 30444 + 30438 30444 30445 + 30445 30439 30438 + 30446 30439 30445 + 30439 30446 30440 + 30353 30442 30346 + 30353 30447 30442 + 30447 30443 30442 + 30444 30443 30447 + 30447 30448 30444 + 30444 30448 30449 + 30445 30444 30449 + 30445 30449 30450 + 30451 30445 30450 + 30445 30451 30446 + 30452 30447 30353 + 30448 30447 30452 + 30448 30452 30453 + 30453 30449 30448 + 30450 30449 30453 + 30453 30454 30450 + 30450 30454 30455 + 30455 30456 30450 + 30451 30450 30456 + 30353 30358 30452 + 30452 30358 30363 + 30363 30453 30452 + 30454 30453 30363 + 30363 30457 30454 + 30454 30457 30458 + 30455 30454 30458 + 30458 30459 30455 + 30460 30455 30459 + 30456 30455 30460 + 30362 30457 30363 + 30457 30362 30368 + 30368 30458 30457 + 30458 30368 30373 + 30373 30461 30458 + 30458 30461 30462 + 30462 30459 30458 + 30459 30462 30463 + 30463 30464 30459 + 30459 30464 30460 + 30461 30373 30377 + 30377 30465 30461 + 30462 30461 30465 + 30465 30466 30462 + 30463 30462 30466 + 30384 30465 30377 + 30465 30384 30467 + 30467 30466 30465 + 30468 30466 30467 + 30466 30468 30463 + 30463 30468 30469 + 30469 30470 30463 + 30470 30471 30463 + 30464 30463 30471 + 30472 30467 30384 + 30473 30467 30472 + 30467 30473 30468 + 30468 30473 30474 + 30474 30469 30468 + 30384 30388 30472 + 30393 30472 30388 + 30475 30472 30393 + 30472 30475 30473 + 30474 30473 30475 + 30475 30476 30474 + 30477 30474 30476 + 30469 30474 30477 + 30477 30478 30469 + 30469 30478 30479 + 30479 30470 30469 + 30393 30401 30475 + 30475 30401 30480 + 30480 30476 30475 + 30476 30480 30481 + 30481 30482 30476 + 30476 30482 30477 + 30477 30482 30483 + 30483 30484 30477 + 30478 30477 30484 + 30480 30401 30400 + 30400 30485 30480 + 30481 30480 30485 + 30485 30486 30481 + 30481 30486 30487 + 30482 30481 30487 + 30487 30483 30482 + 30488 30483 30487 + 30483 30488 30489 + 30489 30484 30483 + 30406 30485 30400 + 30485 30406 30486 + 30490 30486 30406 + 30486 30490 30487 + 30490 30491 30487 + 30488 30487 30491 + 30491 30492 30488 + 30488 30492 30421 + 30489 30488 30421 + 30405 30490 30406 + 30490 30405 30493 + 30491 30490 30493 + 30494 30491 30493 + 30491 30494 30495 + 30495 30492 30491 + 30492 30495 30496 + 30496 30421 30492 + 30421 30496 30415 + 30415 30496 30416 + 30493 30405 30404 + 30404 30497 30493 + 30494 30493 30497 + 30495 30494 30497 + 30497 30416 30495 + 30496 30495 30416 + 30416 30497 30404 + 30421 30420 30489 + 30426 30489 30420 + 30489 30426 30498 + 30498 30484 30489 + 30484 30498 30478 + 30479 30478 30498 + 30498 30499 30479 + 30436 30479 30499 + 30479 30436 30470 + 30498 30426 30425 + 30425 30499 30498 + 30425 30431 30499 + 30499 30431 30436 + 30470 30436 30435 + 30435 30471 30470 + 30500 30471 30435 + 30471 30500 30464 + 30460 30464 30500 + 30500 30501 30460 + 30456 30460 30501 + 30435 30441 30500 + 30500 30441 30502 + 30502 30501 30500 + 30502 30503 30501 + 30501 30503 30456 + 30456 30503 30451 + 30451 30503 30502 + 30446 30451 30502 + 30440 30446 30502 + 30502 30441 30440 + 30504 30505 30506 + 30505 30504 30507 + 30507 30508 30505 + 30505 30508 30509 + 30509 30510 30505 + 30505 30510 30511 + 30511 30506 30505 + 30506 30512 30504 + 30513 30504 30512 + 30507 30504 30513 + 30513 30514 30507 + 30515 30507 30514 + 30508 30507 30515 + 30516 30512 30506 + 30512 30516 30517 + 30517 30518 30512 + 30512 30518 30519 + 30519 30513 30512 + 30520 30513 30519 + 30514 30513 30520 + 30516 30506 30511 + 30511 30521 30516 + 30516 30521 30522 + 30522 30523 30516 + 30523 30517 30516 + 30524 30517 30523 + 30518 30517 30524 + 30525 30521 30511 + 30521 30525 30526 + 30526 30522 30521 + 30522 30526 30527 + 30522 30527 30528 + 30528 30523 30522 + 30528 30529 30523 + 30523 30529 30524 + 30511 30530 30525 + 30525 30530 30531 + 30531 30532 30525 + 30526 30525 30532 + 30532 30533 30526 + 30527 30526 30533 + 30530 30511 30510 + 30510 30534 30530 + 30530 30534 30535 + 30535 30536 30530 + 30536 30531 30530 + 30537 30531 30536 + 30537 30532 30531 + 30532 30537 30538 + 30538 30533 30532 + 30534 30510 30509 + 30509 30539 30534 + 30534 30539 30540 + 30540 30541 30534 + 30534 30541 30535 + 30539 30509 30542 + 30542 30543 30539 + 30539 30543 30544 + 30544 30540 30539 + 30545 30540 30544 + 30540 30545 30546 + 30546 30541 30540 + 30542 30509 30508 + 30508 30547 30542 + 30548 30542 30547 + 30543 30542 30548 + 30548 30549 30543 + 30543 30549 30550 + 30550 30544 30543 + 30551 30544 30550 + 30544 30551 30545 + 30515 30547 30508 + 30547 30515 30552 + 30552 30553 30547 + 30547 30553 30548 + 30554 30548 30553 + 30549 30548 30554 + 30554 30555 30549 + 30549 30555 30556 + 30556 30550 30549 + 30552 30515 30557 + 30557 30558 30552 + 30552 30558 30559 + 30559 30560 30552 + 30553 30552 30560 + 30560 30561 30553 + 30553 30561 30554 + 30557 30515 30514 + 30514 30562 30557 + 30563 30557 30562 + 30557 30563 30564 + 30564 30558 30557 + 30558 30564 30565 + 30565 30559 30558 + 30566 30562 30514 + 30562 30566 30567 + 30562 30567 30563 + 30563 30567 30568 + 30568 30569 30563 + 30564 30563 30569 + 30569 30570 30564 + 30565 30564 30570 + 30514 30520 30566 + 30566 30520 30571 + 30571 30572 30566 + 30567 30566 30572 + 30572 30573 30567 + 30567 30573 30568 + 30520 30574 30571 + 30574 30575 30571 + 30576 30571 30575 + 30577 30571 30576 + 30571 30577 30578 + 30578 30572 30571 + 30573 30572 30578 + 30519 30574 30520 + 30574 30519 30579 + 30579 30580 30574 + 30574 30580 30581 + 30581 30575 30574 + 30582 30575 30581 + 30575 30582 30576 + 30583 30576 30582 + 30577 30576 30583 + 30579 30519 30518 + 30518 30584 30579 + 30579 30584 30585 + 30585 30586 30579 + 30580 30579 30586 + 30586 30587 30580 + 30581 30580 30587 + 30524 30584 30518 + 30584 30524 30588 + 30588 30585 30584 + 30585 30588 30589 + 30589 30590 30585 + 30585 30590 30591 + 30591 30586 30585 + 30587 30586 30591 + 30592 30588 30524 + 30589 30588 30592 + 30592 30593 30589 + 30589 30593 30594 + 30594 30595 30589 + 30590 30589 30595 + 30595 30596 30590 + 30591 30590 30596 + 30524 30529 30592 + 30597 30592 30529 + 30592 30597 30598 + 30598 30593 30592 + 30593 30598 30599 + 30599 30594 30593 + 30600 30594 30599 + 30594 30600 30601 + 30601 30595 30594 + 30596 30595 30601 + 30529 30528 30597 + 30602 30597 30528 + 30598 30597 30602 + 30602 30603 30598 + 30598 30603 30604 + 30604 30605 30598 + 30605 30599 30598 + 30600 30599 30605 + 30528 30527 30602 + 30527 30606 30602 + 30606 30607 30602 + 30608 30602 30607 + 30602 30608 30603 + 30608 30609 30603 + 30603 30609 30610 + 30610 30604 30603 + 30533 30606 30527 + 30538 30606 30533 + 30607 30606 30538 + 30611 30607 30538 + 30607 30611 30612 + 30607 30612 30608 + 30608 30612 30613 + 30609 30608 30613 + 30613 30614 30609 + 30609 30614 30615 + 30615 30610 30609 + 30611 30538 30616 + 30616 30617 30611 + 30612 30611 30617 + 30617 30618 30612 + 30612 30618 30613 + 30619 30613 30618 + 30614 30613 30619 + 30538 30537 30616 + 30536 30616 30537 + 30536 30620 30616 + 30616 30620 30621 + 30621 30617 30616 + 30618 30617 30621 + 30618 30621 30619 + 30619 30621 30622 + 30622 30623 30619 + 30624 30619 30623 + 30619 30624 30614 + 30620 30536 30535 + 30535 30622 30620 + 30621 30620 30622 + 30622 30535 30625 + 30625 30626 30622 + 30622 30626 30627 + 30627 30623 30622 + 30628 30623 30627 + 30623 30628 30624 + 30625 30535 30541 + 30541 30546 30625 + 30629 30625 30546 + 30626 30625 30629 + 30629 30630 30626 + 30626 30630 30631 + 30631 30627 30626 + 30632 30627 30631 + 30627 30632 30628 + 30546 30633 30629 + 30634 30629 30633 + 30630 30629 30634 + 30634 30635 30630 + 30630 30635 30636 + 30636 30631 30630 + 30637 30631 30636 + 30631 30637 30632 + 30638 30633 30546 + 30639 30633 30638 + 30633 30639 30634 + 30640 30634 30639 + 30635 30634 30640 + 30640 30641 30635 + 30635 30641 30642 + 30642 30636 30635 + 30546 30545 30638 + 30643 30638 30545 + 30644 30638 30643 + 30638 30644 30639 + 30639 30644 30645 + 30645 30646 30639 + 30639 30646 30640 + 30647 30640 30646 + 30640 30647 30641 + 30545 30551 30643 + 30648 30643 30551 + 30649 30643 30648 + 30643 30649 30644 + 30644 30649 30650 + 30650 30645 30644 + 30651 30645 30650 + 30645 30651 30652 + 30652 30646 30645 + 30646 30652 30647 + 30551 30653 30648 + 30654 30648 30653 + 30655 30648 30654 + 30648 30655 30649 + 30649 30655 30656 + 30656 30650 30649 + 30657 30650 30656 + 30650 30657 30651 + 30550 30653 30551 + 30653 30550 30556 + 30556 30658 30653 + 30653 30658 30654 + 30659 30654 30658 + 30660 30654 30659 + 30654 30660 30655 + 30655 30660 30661 + 30661 30656 30655 + 30662 30656 30661 + 30656 30662 30657 + 30658 30556 30663 + 30663 30664 30658 + 30658 30664 30659 + 30665 30659 30664 + 30666 30659 30665 + 30659 30666 30660 + 30660 30666 30667 + 30667 30661 30660 + 30663 30556 30555 + 30555 30668 30663 + 30663 30668 30669 + 30664 30663 30669 + 30669 30665 30664 + 30665 30669 30670 + 30671 30665 30670 + 30665 30671 30666 + 30671 30667 30666 + 30672 30668 30555 + 30668 30672 30670 + 30670 30669 30668 + 30555 30554 30672 + 30672 30554 30561 + 30561 30673 30672 + 30670 30672 30673 + 30674 30670 30673 + 30670 30674 30671 + 30675 30673 30561 + 30673 30675 30674 + 30674 30675 30676 + 30677 30674 30676 + 30674 30677 30671 + 30561 30560 30675 + 30675 30560 30559 + 30559 30676 30675 + 30678 30676 30559 + 30676 30678 30677 + 30677 30678 30679 + 30680 30677 30679 + 30677 30680 30671 + 30559 30565 30678 + 30678 30565 30681 + 30681 30679 30678 + 30682 30679 30681 + 30679 30682 30680 + 30680 30682 30683 + 30684 30680 30683 + 30680 30684 30671 + 30570 30681 30565 + 30685 30681 30570 + 30681 30685 30682 + 30682 30685 30686 + 30686 30683 30682 + 30687 30683 30686 + 30683 30687 30684 + 30684 30687 30688 + 30689 30684 30688 + 30684 30689 30671 + 30570 30690 30685 + 30685 30690 30691 + 30691 30686 30685 + 30692 30686 30691 + 30686 30692 30687 + 30687 30692 30693 + 30693 30688 30687 + 30694 30688 30693 + 30688 30694 30689 + 30690 30570 30569 + 30569 30695 30690 + 30690 30695 30696 + 30696 30691 30690 + 30691 30696 30697 + 30697 30698 30691 + 30691 30698 30692 + 30693 30692 30698 + 30695 30569 30568 + 30568 30699 30695 + 30695 30699 30700 + 30700 30696 30695 + 30697 30696 30700 + 30700 30701 30697 + 30697 30701 30702 + 30702 30703 30697 + 30698 30697 30703 + 30699 30568 30704 + 30704 30705 30699 + 30699 30705 30706 + 30706 30700 30699 + 30701 30700 30706 + 30706 30707 30701 + 30701 30707 30708 + 30708 30702 30701 + 30704 30568 30573 + 30573 30578 30704 + 30709 30704 30578 + 30705 30704 30709 + 30709 30710 30705 + 30706 30705 30710 + 30710 30711 30706 + 30707 30706 30711 + 30711 30712 30707 + 30708 30707 30712 + 30578 30577 30709 + 30577 30713 30709 + 30714 30709 30713 + 30709 30714 30715 + 30715 30710 30709 + 30710 30715 30716 + 30716 30711 30710 + 30711 30716 30717 + 30717 30712 30711 + 30583 30713 30577 + 30718 30713 30583 + 30713 30718 30714 + 30714 30718 30719 + 30719 30720 30714 + 30715 30714 30720 + 30720 30721 30715 + 30716 30715 30721 + 30721 30722 30716 + 30717 30716 30722 + 30718 30583 30723 + 30723 30724 30718 + 30718 30724 30719 + 30725 30719 30724 + 30725 30726 30719 + 30719 30726 30727 + 30727 30720 30719 + 30721 30720 30727 + 30582 30723 30583 + 30582 30728 30723 + 30728 30729 30723 + 30723 30729 30724 + 30729 30730 30724 + 30724 30730 30725 + 30725 30730 30731 + 30731 30732 30725 + 30726 30725 30732 + 30581 30728 30582 + 30728 30581 30733 + 30733 30734 30728 + 30734 30729 30728 + 30730 30729 30734 + 30734 30731 30730 + 30735 30731 30734 + 30731 30735 30736 + 30736 30732 30731 + 30587 30733 30581 + 30735 30733 30587 + 30734 30733 30735 + 30587 30737 30735 + 30735 30737 30738 + 30738 30736 30735 + 30736 30738 30739 + 30740 30736 30739 + 30732 30736 30740 + 30740 30741 30732 + 30732 30741 30726 + 30591 30737 30587 + 30737 30591 30742 + 30742 30738 30737 + 30739 30738 30742 + 30743 30739 30742 + 30739 30743 30744 + 30744 30745 30739 + 30740 30739 30745 + 30745 30746 30740 + 30741 30740 30746 + 30596 30742 30591 + 30742 30596 30747 + 30743 30742 30747 + 30743 30747 30748 + 30748 30744 30743 + 30749 30744 30748 + 30745 30744 30749 + 30749 30750 30745 + 30745 30750 30751 + 30751 30746 30745 + 30601 30747 30596 + 30747 30601 30752 + 30752 30748 30747 + 30748 30752 30753 + 30753 30754 30748 + 30748 30754 30749 + 30755 30749 30754 + 30750 30749 30755 + 30756 30752 30601 + 30753 30752 30756 + 30756 30757 30753 + 30758 30753 30757 + 30754 30753 30758 + 30758 30759 30754 + 30754 30759 30755 + 30601 30600 30756 + 30600 30760 30756 + 30761 30756 30760 + 30756 30761 30762 + 30762 30757 30756 + 30757 30762 30763 + 30763 30758 30757 + 30758 30763 30642 + 30759 30758 30642 + 30605 30760 30600 + 30764 30760 30605 + 30760 30764 30761 + 30765 30761 30764 + 30762 30761 30765 + 30765 30766 30762 + 30763 30762 30766 + 30766 30767 30763 + 30642 30763 30767 + 30767 30636 30642 + 30636 30767 30637 + 30764 30605 30604 + 30604 30768 30764 + 30764 30768 30765 + 30768 30769 30765 + 30770 30765 30769 + 30765 30770 30771 + 30771 30766 30765 + 30766 30771 30637 + 30637 30767 30766 + 30768 30604 30610 + 30768 30610 30615 + 30615 30769 30768 + 30615 30772 30769 + 30769 30772 30770 + 30770 30772 30624 + 30624 30628 30770 + 30771 30770 30628 + 30628 30632 30771 + 30637 30771 30632 + 30772 30615 30614 + 30614 30624 30772 + 30642 30773 30759 + 30773 30642 30774 + 30774 30775 30773 + 30776 30773 30775 + 30759 30773 30776 + 30776 30755 30759 + 30641 30774 30642 + 30777 30774 30641 + 30774 30777 30778 + 30778 30775 30774 + 30775 30778 30712 + 30712 30717 30775 + 30775 30717 30776 + 30722 30776 30717 + 30755 30776 30722 + 30641 30647 30777 + 30777 30647 30652 + 30652 30779 30777 + 30778 30777 30779 + 30779 30708 30778 + 30712 30778 30708 + 30780 30779 30652 + 30708 30779 30780 + 30780 30702 30708 + 30702 30780 30781 + 30781 30703 30702 + 30652 30651 30780 + 30781 30780 30651 + 30651 30657 30781 + 30782 30781 30657 + 30703 30781 30782 + 30782 30783 30703 + 30703 30783 30698 + 30698 30783 30693 + 30784 30693 30783 + 30693 30784 30694 + 30657 30662 30782 + 30784 30782 30662 + 30783 30782 30784 + 30662 30785 30784 + 30694 30784 30785 + 30785 30786 30694 + 30689 30694 30786 + 30671 30689 30786 + 30786 30667 30671 + 30661 30785 30662 + 30785 30661 30667 + 30667 30786 30785 + 30722 30787 30755 + 30787 30722 30721 + 30721 30788 30787 + 30750 30787 30788 + 30755 30787 30750 + 30727 30788 30721 + 30788 30727 30789 + 30789 30751 30788 + 30788 30751 30750 + 30727 30726 30789 + 30726 30741 30789 + 30746 30789 30741 + 30751 30789 30746 + 30790 30791 30792 + 30791 30790 30793 + 30791 30793 30794 + 30794 30795 30791 + 30791 30795 30796 + 30796 30792 30791 + 30792 30797 30790 + 30798 30790 30797 + 30793 30790 30798 + 30798 30799 30793 + 30794 30793 30799 + 30797 30792 30800 + 30800 30801 30797 + 30797 30801 30802 + 30802 30803 30797 + 30797 30803 30804 + 30804 30798 30797 + 30800 30792 30796 + 30796 30805 30800 + 30806 30800 30805 + 30801 30800 30806 + 30806 30807 30801 + 30801 30807 30808 + 30808 30809 30801 + 30809 30802 30801 + 30810 30805 30796 + 30805 30810 30811 + 30811 30812 30805 + 30805 30812 30806 + 30813 30806 30812 + 30807 30806 30813 + 30796 30814 30810 + 30810 30814 30815 + 30815 30816 30810 + 30811 30810 30816 + 30816 30817 30811 + 30818 30811 30817 + 30812 30811 30818 + 30814 30796 30795 + 30795 30819 30814 + 30815 30814 30819 + 30819 30795 30794 + 30794 30820 30819 + 30819 30820 30821 + 30821 30822 30819 + 30819 30822 30815 + 30820 30794 30823 + 30823 30824 30820 + 30820 30824 30825 + 30825 30821 30820 + 30826 30821 30825 + 30822 30821 30826 + 30827 30823 30794 + 30828 30823 30827 + 30828 30824 30823 + 30824 30828 30829 + 30829 30825 30824 + 30825 30829 30830 + 30825 30830 30826 + 30799 30827 30794 + 30831 30827 30799 + 30827 30831 30832 + 30827 30832 30828 + 30828 30832 30833 + 30829 30828 30833 + 30834 30829 30833 + 30830 30829 30834 + 30799 30835 30831 + 30831 30835 30836 + 30836 30837 30831 + 30832 30831 30837 + 30837 30833 30832 + 30838 30835 30799 + 30835 30838 30839 + 30839 30836 30835 + 30836 30839 30840 + 30840 30841 30836 + 30836 30841 30842 + 30842 30837 30836 + 30833 30837 30842 + 30799 30798 30838 + 30838 30798 30804 + 30804 30843 30838 + 30838 30843 30844 + 30844 30839 30838 + 30840 30839 30844 + 30844 30845 30840 + 30840 30845 30846 + 30846 30847 30840 + 30841 30840 30847 + 30848 30843 30804 + 30843 30848 30849 + 30849 30844 30843 + 30844 30849 30850 + 30850 30845 30844 + 30845 30850 30851 + 30851 30846 30845 + 30804 30852 30848 + 30848 30852 30853 + 30853 30854 30848 + 30848 30854 30855 + 30855 30849 30848 + 30850 30849 30855 + 30852 30804 30803 + 30803 30856 30852 + 30853 30852 30856 + 30856 30857 30853 + 30857 30858 30853 + 30858 30859 30853 + 30860 30853 30859 + 30853 30860 30854 + 30856 30803 30802 + 30856 30802 30809 + 30809 30857 30856 + 30861 30857 30809 + 30857 30861 30862 + 30862 30858 30857 + 30863 30858 30862 + 30858 30863 30864 + 30864 30859 30858 + 30865 30859 30864 + 30859 30865 30860 + 30861 30809 30808 + 30808 30866 30861 + 30862 30861 30866 + 30866 30867 30862 + 30867 30868 30862 + 30863 30862 30868 + 30868 30869 30863 + 30863 30869 30870 + 30870 30864 30863 + 30865 30864 30870 + 30866 30808 30871 + 30871 30872 30866 + 30866 30872 30873 + 30873 30867 30866 + 30874 30867 30873 + 30867 30874 30875 + 30875 30868 30867 + 30871 30808 30807 + 30807 30876 30871 + 30871 30876 30877 + 30877 30878 30871 + 30872 30871 30878 + 30878 30879 30872 + 30872 30879 30880 + 30880 30873 30872 + 30813 30876 30807 + 30876 30813 30881 + 30881 30877 30876 + 30877 30881 30882 + 30882 30883 30877 + 30877 30883 30884 + 30884 30878 30877 + 30879 30878 30884 + 30881 30813 30885 + 30885 30886 30881 + 30882 30881 30886 + 30886 30887 30882 + 30882 30887 30888 + 30883 30882 30888 + 30888 30889 30883 + 30884 30883 30889 + 30812 30885 30813 + 30818 30885 30812 + 30885 30818 30890 + 30890 30886 30885 + 30886 30890 30891 + 30891 30887 30886 + 30887 30891 30892 + 30892 30888 30887 + 30889 30888 30892 + 30893 30889 30892 + 30889 30893 30894 + 30894 30884 30889 + 30884 30894 30879 + 30890 30818 30895 + 30895 30896 30890 + 30891 30890 30896 + 30896 30897 30891 + 30892 30891 30897 + 30898 30892 30897 + 30892 30898 30893 + 30817 30895 30818 + 30899 30895 30817 + 30895 30899 30900 + 30900 30896 30895 + 30896 30900 30901 + 30901 30897 30896 + 30897 30901 30898 + 30901 30902 30898 + 30903 30898 30902 + 30898 30903 30893 + 30817 30904 30899 + 30899 30904 30905 + 30905 30906 30899 + 30900 30899 30906 + 30906 30907 30900 + 30901 30900 30907 + 30907 30902 30901 + 30908 30902 30907 + 30902 30908 30903 + 30904 30817 30816 + 30816 30909 30904 + 30904 30909 30910 + 30910 30905 30904 + 30911 30905 30910 + 30905 30911 30912 + 30912 30906 30905 + 30906 30912 30913 + 30913 30907 30906 + 30907 30913 30908 + 30909 30816 30815 + 30815 30914 30909 + 30909 30914 30915 + 30915 30910 30909 + 30916 30910 30915 + 30910 30916 30911 + 30911 30916 30917 + 30917 30918 30911 + 30912 30911 30918 + 30914 30815 30919 + 30919 30920 30914 + 30915 30914 30920 + 30920 30921 30915 + 30922 30915 30921 + 30915 30922 30916 + 30916 30922 30923 + 30923 30917 30916 + 30924 30919 30815 + 30925 30919 30924 + 30919 30925 30926 + 30926 30920 30919 + 30920 30926 30927 + 30927 30921 30920 + 30822 30924 30815 + 30928 30924 30822 + 30928 30929 30924 + 30924 30929 30925 + 30930 30925 30929 + 30926 30925 30930 + 30930 30931 30926 + 30927 30926 30931 + 30822 30826 30928 + 30932 30928 30826 + 30929 30928 30932 + 30932 30933 30929 + 30929 30933 30930 + 30933 30934 30930 + 30935 30930 30934 + 30930 30935 30936 + 30936 30931 30930 + 30826 30830 30932 + 30830 30937 30932 + 30932 30937 30938 + 30939 30932 30938 + 30933 30932 30939 + 30933 30939 30940 + 30940 30934 30933 + 30941 30934 30940 + 30934 30941 30935 + 30834 30937 30830 + 30938 30937 30834 + 30938 30834 30942 + 30942 30943 30938 + 30939 30938 30943 + 30940 30939 30943 + 30940 30943 30944 + 30945 30940 30944 + 30940 30945 30941 + 30833 30942 30834 + 30946 30942 30833 + 30943 30942 30946 + 30946 30944 30943 + 30944 30946 30947 + 30947 30948 30944 + 30948 30949 30944 + 30949 30945 30944 + 30941 30945 30949 + 30949 30950 30941 + 30935 30941 30950 + 30833 30951 30946 + 30946 30951 30952 + 30952 30953 30946 + 30953 30947 30946 + 30954 30947 30953 + 30948 30947 30954 + 30948 30954 30955 + 30955 30949 30948 + 30955 30950 30949 + 30842 30951 30833 + 30951 30842 30956 + 30956 30952 30951 + 30952 30956 30957 + 30952 30957 30958 + 30958 30953 30952 + 30953 30958 30959 + 30953 30959 30954 + 30954 30959 30960 + 30955 30954 30960 + 30961 30956 30842 + 30957 30956 30961 + 30961 30962 30957 + 30957 30962 30963 + 30958 30957 30963 + 30963 30964 30958 + 30959 30958 30964 + 30964 30960 30959 + 30842 30841 30961 + 30847 30961 30841 + 30961 30847 30962 + 30847 30965 30962 + 30962 30965 30966 + 30966 30963 30962 + 30963 30966 30967 + 30967 30968 30963 + 30963 30968 30969 + 30969 30964 30963 + 30960 30964 30969 + 30965 30847 30846 + 30846 30970 30965 + 30965 30970 30971 + 30971 30966 30965 + 30967 30966 30971 + 30971 30972 30967 + 30973 30967 30972 + 30968 30967 30973 + 30973 30974 30968 + 30969 30968 30974 + 30846 30851 30970 + 30851 30975 30970 + 30970 30975 30971 + 30975 30976 30971 + 30971 30976 30977 + 30977 30972 30971 + 30972 30977 30978 + 30978 30979 30972 + 30972 30979 30973 + 30975 30851 30980 + 30980 30981 30975 + 30975 30981 30982 + 30982 30976 30975 + 30977 30976 30982 + 30982 30983 30977 + 30978 30977 30983 + 30980 30851 30850 + 30850 30984 30980 + 30985 30980 30984 + 30980 30985 30981 + 30985 30986 30981 + 30981 30986 30982 + 30986 30987 30982 + 30982 30987 30983 + 30855 30984 30850 + 30988 30984 30855 + 30984 30988 30985 + 30985 30988 30989 + 30989 30990 30985 + 30985 30990 30991 + 30986 30985 30991 + 30986 30991 30992 + 30987 30986 30992 + 30983 30987 30992 + 30855 30993 30988 + 30988 30993 30994 + 30994 30989 30988 + 30995 30989 30994 + 30989 30995 30996 + 30996 30990 30989 + 30996 30991 30990 + 30991 30996 30997 + 30997 30992 30991 + 30993 30855 30854 + 30854 30998 30993 + 30998 30994 30993 + 30999 30994 30998 + 30994 30999 30995 + 30995 30999 31000 + 31000 31001 30995 + 30996 30995 31001 + 30997 30996 31001 + 30860 30998 30854 + 30998 30860 30999 + 30999 30860 30865 + 30865 31000 30999 + 30870 31000 30865 + 31000 30870 31001 + 31001 30870 31002 + 31002 31003 31001 + 31001 31003 30997 + 31004 30997 31003 + 30997 31004 31005 + 31005 30992 30997 + 30992 31005 30983 + 30983 31005 30978 + 30869 31002 30870 + 31006 31002 30869 + 31002 31006 31007 + 31003 31002 31007 + 31003 31007 31004 + 31008 31004 31007 + 31005 31004 31008 + 31008 30978 31005 + 30978 31008 31009 + 31009 30979 30978 + 30869 31010 31006 + 31011 31006 31010 + 31007 31006 31011 + 31011 31012 31007 + 31007 31012 31008 + 31009 31008 31012 + 31012 31013 31009 + 31014 31009 31013 + 30979 31009 31014 + 31014 30973 30979 + 31010 30869 30868 + 30868 30875 31010 + 31010 30875 31015 + 31015 31016 31010 + 31010 31016 31011 + 31017 31011 31016 + 31012 31011 31017 + 31017 31013 31012 + 31013 31017 31018 + 31018 31019 31013 + 31013 31019 31014 + 31020 31015 30875 + 31021 31015 31020 + 31015 31021 31022 + 31022 31016 31015 + 31016 31022 31017 + 31018 31017 31022 + 31022 31023 31018 + 31024 31018 31023 + 31019 31018 31024 + 30875 30874 31020 + 31025 31020 30874 + 31020 31025 31026 + 31026 31027 31020 + 31020 31027 31021 + 31021 31027 31028 + 31028 31029 31021 + 31022 31021 31029 + 31029 31023 31022 + 30874 31030 31025 + 31031 31025 31030 + 31026 31025 31031 + 31031 31032 31026 + 31033 31026 31032 + 31027 31026 31033 + 31033 31028 31027 + 30873 31030 30874 + 31030 30873 30880 + 30880 31034 31030 + 31030 31034 31031 + 31035 31031 31034 + 31032 31031 31035 + 31035 31036 31032 + 31032 31036 31037 + 31037 31038 31032 + 31032 31038 31033 + 31034 30880 31039 + 31039 31040 31034 + 31034 31040 31035 + 31035 31040 31041 + 31036 31035 31041 + 31041 31042 31036 + 31037 31036 31042 + 31039 30880 30879 + 30879 30894 31039 + 31039 30894 30893 + 31040 31039 30893 + 30893 31041 31040 + 31042 31041 30893 + 31043 31042 30893 + 31042 31043 31044 + 31044 31037 31042 + 31037 31044 31045 + 31045 31038 31037 + 31038 31045 31046 + 31046 31033 31038 + 31033 31046 31047 + 31047 31028 31033 + 30903 31043 30893 + 31043 30903 31048 + 31048 31049 31043 + 31049 31044 31043 + 31045 31044 31049 + 31049 31050 31045 + 31046 31045 31050 + 31050 31051 31046 + 31047 31046 31051 + 30908 31048 30903 + 31052 31048 30908 + 31049 31048 31052 + 31052 31050 31049 + 31050 31052 31053 + 31053 31051 31050 + 31051 31053 30918 + 30918 31054 31051 + 31051 31054 31047 + 31055 31047 31054 + 31028 31047 31055 + 31055 31029 31028 + 30908 30913 31052 + 31053 31052 30913 + 30913 30912 31053 + 30918 31053 30912 + 31054 30918 30917 + 30917 31056 31054 + 31054 31056 31055 + 31057 31055 31056 + 31029 31055 31057 + 31057 31023 31029 + 31023 31057 31024 + 31056 30917 30923 + 30923 31058 31056 + 31056 31058 31057 + 31057 31058 31059 + 31059 31024 31057 + 31060 31024 31059 + 31024 31060 31019 + 31019 31060 31061 + 31061 31014 31019 + 31058 30923 31062 + 31062 31059 31058 + 31063 31059 31062 + 31059 31063 31060 + 31060 31063 31064 + 31064 31065 31060 + 31065 31061 31060 + 31066 31061 31065 + 31014 31061 31066 + 31067 31062 30923 + 31063 31062 31067 + 31067 31064 31063 + 31064 31067 30921 + 30921 30927 31064 + 31064 30927 31068 + 31068 31065 31064 + 31069 31065 31068 + 31065 31069 31066 + 30923 30922 31067 + 30921 31067 30922 + 30931 31068 30927 + 31070 31068 30931 + 31068 31070 31069 + 31069 31070 31071 + 31071 31072 31069 + 31069 31072 31073 + 31073 31066 31069 + 30974 31066 31073 + 31066 30974 31014 + 30974 30973 31014 + 30931 30936 31070 + 30936 31071 31070 + 31074 31071 30936 + 31072 31071 31074 + 31074 31075 31072 + 31072 31075 30960 + 30960 31073 31072 + 30969 31073 30960 + 31073 30969 30974 + 30936 30935 31074 + 30950 31074 30935 + 31075 31074 30950 + 30950 30955 31075 + 30960 31075 30955 +} diff --git a/Chapter 19 Normal Mapping/Textures/bricks2.dds b/Chapter 19 Normal Mapping/Textures/bricks2.dds new file mode 100644 index 0000000..a0fb9c3 Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/bricks2.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/bricks2_nmap.dds b/Chapter 19 Normal Mapping/Textures/bricks2_nmap.dds new file mode 100644 index 0000000..d6c5fab Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/bricks2_nmap.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/default_nmap.dds b/Chapter 19 Normal Mapping/Textures/default_nmap.dds new file mode 100644 index 0000000..157c7c1 Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/default_nmap.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/snowcube1024.dds b/Chapter 19 Normal Mapping/Textures/snowcube1024.dds new file mode 100644 index 0000000..c549115 Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/snowcube1024.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/tile.dds b/Chapter 19 Normal Mapping/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/tile.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/tile_nmap.dds b/Chapter 19 Normal Mapping/Textures/tile_nmap.dds new file mode 100644 index 0000000..813cee9 Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/tile_nmap.dds differ diff --git a/Chapter 19 Normal Mapping/Textures/white1x1.dds b/Chapter 19 Normal Mapping/Textures/white1x1.dds new file mode 100644 index 0000000..54df118 Binary files /dev/null and b/Chapter 19 Normal Mapping/Textures/white1x1.dds differ diff --git a/Chapter 19 Normal Mapping/d3dUtil.h b/Chapter 19 Normal Mapping/d3dUtil.h new file mode 100644 index 0000000..5f8a68d --- /dev/null +++ b/Chapter 19 Normal Mapping/d3dUtil.h @@ -0,0 +1,153 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; +// �Ƿ�����׶���޳� +static bool g_openFrustumCull = true; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; // ���������ݶ�Ӧ��������ͼid + UINT NormalSrvHeapIndex = 0; // ���������ݶ�Ӧ������������ͼid + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; + DirectX::XMFLOAT3 TangentU; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void storeVertexAndIndex(std::vector& vertex, std::vector& index) + { + vecVertex = std::move(vertex); + vecIndex = std::move(index); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + + // �洢������������� + std::vector vecVertex; + std::vector vecIndex; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // ����ת��������Ҫ���ڶ����Ӧ���������� + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); // ����������ƾ��󣬱���ͨ�������������̬�ƶ����� + + UINT MaterialIndex = -1; // ����������Ŀ��������Ӧ���������� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� +}; \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/main.cpp b/Chapter 19 Normal Mapping/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 19 Normal Mapping/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 19 Normal Mapping/packages.config b/Chapter 19 Normal Mapping/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 19 Normal Mapping/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj b/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj new file mode 100644 index 0000000..79d08da --- /dev/null +++ b/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj @@ -0,0 +1,576 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {7258C697-EB13-4074-8774-08D812A4A2A6} + Chapter20ShadowMapping + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration);$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + Level3 + Disabled + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + false + + + + + Level3 + MaxSpeed + true + true + true + true + Core;Core\Graphics;Core\Graphics\Command;Core\Graphics\DescriptorHeap;Core\Graphics\Pipeline;Core\Graphics\Resource;Core\Graphics\Texture;Core\Graphics\Renderer;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + + + Compute + + + 5.0 + g_p%(Filename) + + $(SolutionDir)$(Platform)\$(Configuration)\CompiledShaders\%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + Pixel + Pixel + + + + + + + + + + + + + + Pixel + Pixel + + + + + + + + + + + + + Domain + Domain + + + Hull + Hull + + + Pixel + Pixel + + + Vertex + Vertex + + + Geometry + Geometry + + + Pixel + Pixel + + + Vertex + Vertex + + + + + Document + + + + Pixel + Pixel + + + Vertex + Vertex + + + Document + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + 5.1 + 5.1 + + + Vertex + Vertex + + + Pixel + 5.1 + Pixel + 5.1 + + + Vertex + 5.1 + Vertex + 5.1 + + + + Domain + 5.0 + Domain + 5.0 + + + Hull + 5.0 + Hull + 5.0 + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pixel + Pixel + + + + Pixel + Pixel + + + + + + + + + Vertex + Vertex + + + + Pixel + Pixel + + + + + + + + + + + + + + + + + + + Vertex + Vertex + + + Vertex + Vertex + + + Pixel + Pixel + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + Vertex + Vertex + + + Pixel + Pixel + + + Pixel + Pixel + + + + + Pixel + Pixel + + + Pixel + Pixel + + + Vertex + Vertex + + + + + + + + + + + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj.filters b/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj.filters new file mode 100644 index 0000000..8bfa954 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Chapter 20 Shadow Mapping.vcxproj.filters @@ -0,0 +1,994 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {fd9089e2-734c-4bad-b2ce-cc11f04b9f98} + + + {e65cfc36-3851-4498-8574-cdcf5eb08cd8} + + + {851e2de2-3be9-4647-9e52-455dc7ac25b3} + + + {95690c67-5ff5-4e7e-86f5-883b6a3a0c9d} + + + {4f948397-b962-422e-8961-f32a27cb1138} + + + {ff5008d4-492f-4e39-b7aa-56e8ee1bac74} + + + {b70f04e4-27db-4a4d-b50e-28e828ba46c6} + + + {7625424a-4ff6-4d18-b651-1ab84a5e9e68} + + + {8627dfa3-63fa-470d-9804-180a6b32e765} + + + {10dcd126-f793-47b4-acba-b595c4b6893b} + + + {f8b6b402-a15f-425c-ab71-327f2d29e699} + + + {36832ecd-c299-4ebe-8922-f886618a2b02} + + + {b4e50018-5613-4725-9107-4c339b9b2be3} + + + {076b70d3-7a98-46dd-9335-fbf682fe5324} + + + {7f267870-b788-45a3-92bb-f5e421fdc7b2} + + + {faf1b526-7156-408f-b0ae-c58327bc3244} + + + {5f67f26e-5c66-4ca6-894e-c638c064f927} + + + {50ecd7c6-6c78-4cea-ad9b-7ad3dbb9aa10} + + + {deda228d-9175-4e0c-8202-d991d9d112bf} + + + {73236ebe-81f5-4354-ae9b-b66f61f626d6} + + + {6f915565-9b4a-40af-b0eb-818205eefe85} + + + {5a7d369c-0aad-4e98-9906-82afcdfade82} + + + {fd6a59c4-e585-405e-8948-2364bcbac00e} + + + {541991b2-4315-48e2-964d-62a7d440936f} + + + {380c1745-2f14-40a5-a9be-1f803172eaf5} + + + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + 源文件 + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics + + + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core\Math + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core + + + Core + + + Core + + + Core + + + Core + + + 源文件 + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core\Graphics\Texture + + + Core + + + Core\Graphics\Renderer + + + Core\Graphics\Renderer + + + Core + + + Core\Graphics + + + Core\Graphics\Pipeline + + + 源文件 + + + Core\Graphics\Resource + + + Core\Graphics\Resource + + + Core\Graphics + + + + + Core\Math + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Text + + + + Shaders\default + + + Shaders\default + + + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\BitonicSort + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\Dof + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\FXAA + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\GenerateMips + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\HDR + + + Shaders\Misc + + + Shaders\Misc + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\Particles + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\PerfGraph + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\Present + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\SSAO + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Temporal + + + Shaders\Text + + + Shaders\Text + + + Shaders\Text + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\tesseation + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default\bezier + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + Shaders\default + + + + + Core\Graphics\Command + + + Core\Graphics\DescriptorHeap + + + Core\Graphics\Pipeline + + + Core\Graphics\Resource + + + \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/CameraController.cpp b/Chapter 20 Shadow Mapping/Core/CameraController.cpp new file mode 100644 index 0000000..5c5eec6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/CameraController.cpp @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CameraController.h" +#include "Camera.h" +#include "GameInput.h" + +using namespace Math; +using namespace GameCore; + +CameraController::CameraController( Camera& camera, Vector3 worldUp ) : m_TargetCamera( camera ) +{ + m_WorldUp = Normalize(worldUp); + m_WorldNorth = Normalize(Cross(Vector3(kXUnitVector), m_WorldUp)); + m_WorldEast = Cross(m_WorldUp, m_WorldNorth); + + m_HorizontalLookSensitivity = 2.0f; + m_VerticalLookSensitivity = 2.0f; + m_MoveSpeed = 100.0f; + m_StrafeSpeed = 100.0f; + m_MouseSensitivityX = 1.0f; + m_MouseSensitivityY = 1.0f; + + m_CurrentPitch = Sin(Dot(camera.GetForwardVec(), m_WorldUp)); + + Vector3 forward = Normalize(Cross(camera.GetRightVec(), m_WorldUp)); + m_CurrentHeading = ATan2(-Dot(forward, m_WorldEast), Dot(forward, m_WorldNorth)); + + m_FineMovement = true; + m_FineRotation = true; + m_Momentum = true; + + m_LastYaw = 0.0f; + m_LastPitch = 0.0f; + m_LastForward = 0.0f; + m_LastStrafe = 0.0f; + m_LastAscent = 0.0f; +} + +namespace Graphics +{ + extern EnumVar DebugZoom; +} + +void CameraController::Update( float deltaTime ) +{ + (deltaTime); + + float timeScale = Graphics::DebugZoom == 0 ? 1.0f : Graphics::DebugZoom == 1 ? 0.5f : 0.25f; + + if (GameInput::IsFirstPressed(GameInput::kLThumbClick) || GameInput::IsFirstPressed(GameInput::kKey_lshift)) + m_FineMovement = !m_FineMovement; + + if (GameInput::IsFirstPressed(GameInput::kRThumbClick)) + m_FineRotation = !m_FineRotation; + + float speedScale = (m_FineMovement ? 0.1f : 1.0f) * timeScale; + float panScale = (m_FineRotation ? 0.5f : 1.0f) * timeScale; + + float yaw = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickX ) * m_HorizontalLookSensitivity * panScale; + float pitch = GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightStickY ) * m_VerticalLookSensitivity * panScale; + float forward = m_MoveSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickY ) + + (GameInput::IsPressed( GameInput::kKey_w ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_s ) ? -deltaTime : 0.0f) + ); + float strafe = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftStickX ) + + (GameInput::IsPressed( GameInput::kKey_d ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_a ) ? -deltaTime : 0.0f) + ); + float ascent = m_StrafeSpeed * speedScale * ( + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogRightTrigger ) - + GameInput::GetTimeCorrectedAnalogInput( GameInput::kAnalogLeftTrigger ) + + (GameInput::IsPressed( GameInput::kKey_e ) ? deltaTime : 0.0f) + + (GameInput::IsPressed( GameInput::kKey_q ) ? -deltaTime : 0.0f) + ); + + if (m_Momentum) + { + ApplyMomentum(m_LastYaw, yaw, deltaTime); + ApplyMomentum(m_LastPitch, pitch, deltaTime); + ApplyMomentum(m_LastForward, forward, deltaTime); + ApplyMomentum(m_LastStrafe, strafe, deltaTime); + ApplyMomentum(m_LastAscent, ascent, deltaTime); + } + + // ��ס���������Ŵ���ת�� + if (GameInput::IsPressed(GameInput::kMouse0)) + { + yaw += GameInput::GetAnalogInput(GameInput::kAnalogMouseX) * m_MouseSensitivityX; + pitch += GameInput::GetAnalogInput(GameInput::kAnalogMouseY) * m_MouseSensitivityY; + } + + m_CurrentPitch += pitch; + m_CurrentPitch = XMMin( XM_PIDIV2, m_CurrentPitch); + m_CurrentPitch = XMMax(-XM_PIDIV2, m_CurrentPitch); + + m_CurrentHeading -= yaw; + if (m_CurrentHeading > XM_PI) + m_CurrentHeading -= XM_2PI; + else if (m_CurrentHeading <= -XM_PI) + m_CurrentHeading += XM_2PI; + + Matrix3 orientation = Matrix3(m_WorldEast, m_WorldUp, -m_WorldNorth) * Matrix3::MakeYRotation( m_CurrentHeading ) * Matrix3::MakeXRotation( m_CurrentPitch ); + Vector3 position = orientation * Vector3( strafe, ascent, -forward ) + m_TargetCamera.GetPosition(); + m_TargetCamera.SetTransform( AffineTransform( orientation, position ) ); + m_TargetCamera.Update(); +} + +void CameraController::ApplyMomentum( float& oldValue, float& newValue, float deltaTime ) +{ + float blendedValue; + if (Abs(newValue) > Abs(oldValue)) + blendedValue = Lerp(newValue, oldValue, Pow(0.6f, deltaTime * 60.0f)); + else + blendedValue = Lerp(newValue, oldValue, Pow(0.8f, deltaTime * 60.0f)); + oldValue = blendedValue; + newValue = blendedValue; +} diff --git a/Chapter 20 Shadow Mapping/Core/CameraController.h b/Chapter 20 Shadow Mapping/Core/CameraController.h new file mode 100644 index 0000000..171e47f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/CameraController.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" +#include "VectorMath.h" + +namespace Math +{ + class Camera; +} + +namespace GameCore +{ + using namespace Math; + + class CameraController + { + public: + // Assumes worldUp is not the X basis vector + CameraController( Camera& camera, Vector3 worldUp ); + + void Update( float dt ); + + void SlowMovement( bool enable ) { m_FineMovement = enable; } + void SlowRotation( bool enable ) { m_FineRotation = enable; } + + void EnableMomentum( bool enable ) { m_Momentum = enable; } + + Vector3 GetWorldEast() { return m_WorldEast; } + Vector3 GetWorldUp() { return m_WorldUp; } + Vector3 GetWorldNorth() { return m_WorldNorth; } + float GetCurrentHeading() { return m_CurrentHeading; } + float GetCurrentPitch() { return m_CurrentPitch; } + + void SetCurrentHeading(float heading) { m_CurrentHeading = heading; } + void SetCurrentPitch(float pitch) { m_CurrentPitch = pitch; } + + + private: + CameraController& operator=( const CameraController& ) {return *this;} + + void ApplyMomentum( float& oldValue, float& newValue, float deltaTime ); + + Vector3 m_WorldUp; + Vector3 m_WorldNorth; + Vector3 m_WorldEast; + Camera& m_TargetCamera; + float m_HorizontalLookSensitivity; + float m_VerticalLookSensitivity; + float m_MoveSpeed; + float m_StrafeSpeed; + float m_MouseSensitivityX; + float m_MouseSensitivityY; + + float m_CurrentHeading; + float m_CurrentPitch; + + bool m_FineMovement; + bool m_FineRotation; + bool m_Momentum; + + float m_LastYaw; + float m_LastPitch; + float m_LastForward; + float m_LastStrafe; + float m_LastAscent; + }; +} diff --git a/Chapter 20 Shadow Mapping/Core/EngineProfiling.cpp b/Chapter 20 Shadow Mapping/Core/EngineProfiling.cpp new file mode 100644 index 0000000..6d0186a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/EngineProfiling.cpp @@ -0,0 +1,619 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "TextRenderer.h" +#include "GraphRenderer.h" +#include "GameInput.h" +#include "GpuTimeManager.h" +#include "CommandContext.h" +#include +#include +#include + +using namespace Graphics; +using namespace GraphRenderer; +using namespace Math; +using namespace std; + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +namespace EngineProfiling +{ + bool Paused = false; +} + +class StatHistory +{ +public: + StatHistory() + { + for (uint32_t i = 0; i < kHistorySize; ++i) + m_RecentHistory[i] = 0.0f; + for (uint32_t i = 0; i < kExtendedHistorySize; ++i) + m_ExtendedHistory[i] = 0.0f; + m_Average = 0.0f; + m_Minimum = 0.0f; + m_Maximum = 0.0f; + } + + void RecordStat( uint32_t FrameIndex, float Value ) + { + m_RecentHistory[FrameIndex % kHistorySize] = Value; + m_ExtendedHistory[FrameIndex % kExtendedHistorySize] = Value; + m_Recent = Value; + + uint32_t ValidCount = 0; + m_Minimum = FLT_MAX; + m_Maximum = 0.0f; + m_Average = 0.0f; + + for (float val : m_RecentHistory) + { + if (val > 0.0f) + { + ++ValidCount; + m_Average += val; + m_Minimum = min(val, m_Minimum); + m_Maximum = max(val, m_Maximum); + } + } + + if (ValidCount > 0) + m_Average /= (float)ValidCount; + else + m_Minimum = 0.0f; + } + + float GetLast(void) const { return m_Recent; } + float GetMax(void) const { return m_Maximum; } + float GetMin(void) const { return m_Minimum; } + float GetAvg(void) const { return m_Average; } + + const float* GetHistory(void) const { return m_ExtendedHistory; } + uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; } + +private: + static const uint32_t kHistorySize = 64; + static const uint32_t kExtendedHistorySize = 256; + float m_RecentHistory[kHistorySize]; + float m_ExtendedHistory[kExtendedHistorySize]; + float m_Recent; + float m_Average; + float m_Minimum; + float m_Maximum; +}; + +class StatPlot +{ +public: + StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f)) + : m_StatData(Data), m_PlotColor(Col) + { + } + + void SetColor( Color Col ) + { + m_PlotColor = Col; + } + +private: + StatHistory& m_StatData; + Color m_PlotColor; +}; + +class StatGraph +{ +public: + StatGraph(const wstring& Label, D3D12_RECT Window) + : m_Label(Label), m_Window(Window), m_BGColor(0.0f, 0.0f, 0.0f, 0.2f) + { + } + + void SetLabel(const wstring& Label) + { + m_Label = Label; + } + + void SetWindow(D3D12_RECT Window) + { + m_Window = Window; + } + + uint32_t AddPlot( const StatPlot& P ) + { + uint32_t Idx = (uint32_t)m_Stats.size(); + m_Stats.push_back(P); + return Idx; + } + + StatPlot& GetPlot( uint32_t Handle ); + + void Draw( GraphicsContext& Context ); + +private: + wstring m_Label; + D3D12_RECT m_Window; + vector m_Stats; + Color m_BGColor; + float m_PeakValue; +}; + +class GraphManager +{ +public: + +private: + vector m_Graphs; +}; + +class GpuTimer +{ +public: + + GpuTimer() + { + m_TimerIndex = GpuTimeManager::NewTimer(); + } + + void Start(CommandContext& Context) + { + GpuTimeManager::StartTimer(Context, m_TimerIndex); + } + + void Stop(CommandContext& Context) + { + GpuTimeManager::StopTimer(Context, m_TimerIndex); + } + + float GetTime(void) + { + return GpuTimeManager::GetTime(m_TimerIndex); + } + + uint32_t GetTimerIndex(void) + { + return m_TimerIndex; + } +private: + + uint32_t m_TimerIndex; +}; + +class NestedTimingTree +{ +public: + NestedTimingTree( const wstring& name, NestedTimingTree* parent = nullptr ) + : m_Name(name), m_Parent(parent), m_IsExpanded(false), m_IsGraphed(false), m_GraphHandle(PERF_GRAPH_ERROR) {} + + // meng ������������ �޸��ڴ�й© + virtual ~NestedTimingTree() + { + DeleteChildren(); + } + + NestedTimingTree* GetChild( const wstring& name ) + { + auto iter = m_LUT.find(name); + if (iter != m_LUT.end()) + return iter->second; + + NestedTimingTree* node = new NestedTimingTree(name, this); + m_Children.push_back(node); + m_LUT[name] = node; + return node; + } + + NestedTimingTree* NextScope( void ) + { + if (m_IsExpanded && m_Children.size() > 0) + return m_Children[0]; + + return m_Parent->NextChild(this); + } + + NestedTimingTree* PrevScope( void ) + { + NestedTimingTree* prev = m_Parent->PrevChild(this); + return prev == m_Parent ? prev : prev->LastChild(); + } + + NestedTimingTree* FirstChild( void ) + { + return m_Children.size() == 0 ? nullptr : m_Children[0]; + } + + NestedTimingTree* LastChild( void ) + { + if (!m_IsExpanded || m_Children.size() == 0) + return this; + + return m_Children.back()->LastChild(); + } + + NestedTimingTree* NextChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto nextChild = iter; ++nextChild; + if (nextChild != m_Children.end()) + return *nextChild; + } + } + + if (m_Parent != nullptr) + return m_Parent->NextChild(this); + else + return &sm_RootScope; + } + + NestedTimingTree* PrevChild( NestedTimingTree* curChild ) + { + ASSERT(curChild->m_Parent == this); + + if (*m_Children.begin() == curChild) + { + if (this == &sm_RootScope) + return sm_RootScope.LastChild(); + else + return this; + } + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + if (*iter == curChild) + { + auto prevChild = iter; --prevChild; + return *prevChild; + } + } + + ERROR("All attempts to find a previous timing sample failed"); + return nullptr; + } + + void StartTiming( CommandContext* Context ) + { + m_StartTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Start(*Context); + + Context->PIXBeginEvent(m_Name.c_str()); + } + + void StopTiming( CommandContext* Context ) + { + m_EndTick = SystemTime::GetCurrentTick(); + if (Context == nullptr) + return; + + m_GpuTimer.Stop(*Context); + + Context->PIXEndEvent(); + } + + void GatherTimes(uint32_t FrameIndex) + { + if (sm_SelectedScope == this) + { + GraphRenderer::SetSelectedIndex(m_GpuTimer.GetTimerIndex()); + } + if (EngineProfiling::Paused) + { + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + return; + } + m_CpuTime.RecordStat(FrameIndex, 1000.0f * (float)SystemTime::TimeBetweenTicks(m_StartTick, m_EndTick)); + m_GpuTime.RecordStat(FrameIndex, 1000.0f * m_GpuTimer.GetTime()); + + for (auto node : m_Children) + node->GatherTimes(FrameIndex); + + m_StartTick = 0; + m_EndTick = 0; + } + + void SumInclusiveTimes(float& cpuTime, float& gpuTime) + { + cpuTime = 0.0f; + gpuTime = 0.0f; + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + cpuTime += (*iter)->m_CpuTime.GetLast(); + gpuTime += (*iter)->m_GpuTime.GetLast(); + } + } + + static void PushProfilingMarker( const wstring& name, CommandContext* Context ); + static void PopProfilingMarker( CommandContext* Context ); + static void Update( void ); + static void UpdateTimes( void ) + { + uint32_t FrameIndex = (uint32_t)Graphics::GetFrameCount(); + + GpuTimeManager::BeginReadBack(); + sm_RootScope.GatherTimes(FrameIndex); + s_FrameDelta.RecordStat(FrameIndex, GpuTimeManager::GetTime(0)); + GpuTimeManager::EndReadBack(); + + float TotalCpuTime, TotalGpuTime; + sm_RootScope.SumInclusiveTimes(TotalCpuTime, TotalGpuTime); + s_TotalCpuTime.RecordStat(FrameIndex, TotalCpuTime); + s_TotalGpuTime.RecordStat(FrameIndex, TotalGpuTime); + + GraphRenderer::Update(XMFLOAT2(TotalCpuTime, TotalGpuTime), 0, GraphType::Global); + } + + static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); } + static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); } + static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); } + + static void Display( TextContext& Text, float x ) + { + float curX = Text.GetCursorX(); + Text.DrawString(" "); + float indent = Text.GetCursorX() - curX; + Text.SetCursorX(curX); + sm_RootScope.DisplayNode( Text, x - indent, indent ); + sm_RootScope.StoreToGraph(); + } + + void Toggle() + { + //if (m_GraphHandle == PERF_GRAPH_ERROR) + // m_GraphHandle = GraphRenderer::InitGraph(GraphType::Profile); + //m_IsGraphed = GraphRenderer::ManageGraphs(m_GraphHandle, GraphType::Profile); + } + bool IsGraphed(){ return m_IsGraphed;} + +private: + + void DisplayNode( TextContext& Text, float x, float indent ); + void StoreToGraph(void); + void DeleteChildren( void ) + { + for (auto node : m_Children) + delete node; + m_Children.clear(); + } + + wstring m_Name; + NestedTimingTree* m_Parent; + vector m_Children; + unordered_map m_LUT; + int64_t m_StartTick; + int64_t m_EndTick; + StatHistory m_CpuTime; + StatHistory m_GpuTime; + bool m_IsExpanded; + GpuTimer m_GpuTimer; + bool m_IsGraphed; + GraphHandle m_GraphHandle; + static StatHistory s_TotalCpuTime; + static StatHistory s_TotalGpuTime; + static StatHistory s_FrameDelta; + static NestedTimingTree sm_RootScope; + static NestedTimingTree* sm_CurrentNode; + static NestedTimingTree* sm_SelectedScope; + + static bool sm_CursorOnGraph; + +}; + +StatHistory NestedTimingTree::s_TotalCpuTime; +StatHistory NestedTimingTree::s_TotalGpuTime; +StatHistory NestedTimingTree::s_FrameDelta; +NestedTimingTree NestedTimingTree::sm_RootScope(L""); +NestedTimingTree* NestedTimingTree::sm_CurrentNode = &NestedTimingTree::sm_RootScope; +NestedTimingTree* NestedTimingTree::sm_SelectedScope = &NestedTimingTree::sm_RootScope; +bool NestedTimingTree::sm_CursorOnGraph = false; +namespace EngineProfiling +{ + BoolVar DrawFrameRate("Display Frame Rate", true); + BoolVar DrawProfiler("Display Profiler", false); + //BoolVar DrawPerfGraph("Display Performance Graph", false); + const bool DrawPerfGraph = false; + + void Update( void ) + { + if (GameInput::IsFirstPressed( GameInput::kStartButton ) + || GameInput::IsFirstPressed( GameInput::kKey_space )) + { + Paused = !Paused; + } + NestedTimingTree::UpdateTimes(); + } + + void BeginBlock(const wstring& name, CommandContext* Context) + { + NestedTimingTree::PushProfilingMarker(name, Context); + } + + void EndBlock(CommandContext* Context) + { + NestedTimingTree::PopProfilingMarker(Context); + } + + bool IsPaused() + { + return Paused; + } + + void DisplayFrameRate( TextContext& Text ) + { + if (!DrawFrameRate) + return; + + float cpuTime = NestedTimingTree::GetTotalCpuTime(); + float gpuTime = NestedTimingTree::GetTotalGpuTime(); + float frameRate = 1.0f / NestedTimingTree::GetFrameDelta(); + + Text.DrawFormattedString( "CPU %7.3f ms, GPU %7.3f ms, %3u Hz\n", + cpuTime, gpuTime, (uint32_t)(frameRate + 0.5f)); + } + + void DisplayPerfGraph( GraphicsContext& Context ) + { + if (DrawPerfGraph) + GraphRenderer::RenderGraphs(Context, GraphType::Global ); + } + + void Display( TextContext& Text, float x, float y, float /*w*/, float /*h*/ ) + { + Text.ResetCursor(x, y); + + if (DrawProfiler) + { + //Text.GetCommandContext().SetScissor((uint32_t)Floor(x), (uint32_t)Floor(y), (uint32_t)Ceiling(w), (uint32_t)Ceiling(h)); + + NestedTimingTree::Update(); + + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Profiling"); + Text.SetColor(Color(0.8f, 0.8f, 0.8f)); + Text.SetTextSize(20.0f); + Text.DrawString(" CPU GPU"); + Text.SetTextSize(24.0f); + Text.NewLine(); + Text.SetTextSize(20.0f); + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + NestedTimingTree::Display( Text, x ); + } + + Text.GetCommandContext().SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + } + +} // EngineProfiling + +void NestedTimingTree::PushProfilingMarker( const wstring& name, CommandContext* Context ) +{ + sm_CurrentNode = sm_CurrentNode->GetChild(name); + sm_CurrentNode->StartTiming(Context); +} + +void NestedTimingTree::PopProfilingMarker( CommandContext* Context ) +{ + sm_CurrentNode->StopTiming(Context); + sm_CurrentNode = sm_CurrentNode->m_Parent; +} + +void NestedTimingTree::Update( void ) +{ + ASSERT(sm_SelectedScope != nullptr, "Corrupted profiling data structure"); + + if (sm_SelectedScope == &sm_RootScope) + { + sm_SelectedScope = sm_RootScope.FirstChild(); + if (sm_SelectedScope == &sm_RootScope) + return; + } + + if (GameInput::IsFirstPressed( GameInput::kDPadLeft ) + || GameInput::IsFirstPressed( GameInput::kKey_left )) + { + //if still on graphs go back to text + if (sm_CursorOnGraph) + sm_CursorOnGraph = !sm_CursorOnGraph; + else + sm_SelectedScope->m_IsExpanded = false; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadRight ) + || GameInput::IsFirstPressed( GameInput::kKey_right )) + { + if (sm_SelectedScope->m_IsExpanded == true && !sm_CursorOnGraph) + sm_CursorOnGraph = true; + else + sm_SelectedScope->m_IsExpanded = true; + //if already expanded go over to graphs + + } + else if (GameInput::IsFirstPressed( GameInput::kDPadDown ) + || GameInput::IsFirstPressed( GameInput::kKey_down )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->NextScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kDPadUp ) + || GameInput::IsFirstPressed( GameInput::kKey_up )) + { + sm_SelectedScope = sm_SelectedScope ? sm_SelectedScope->PrevScope() : nullptr; + } + else if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedScope->Toggle(); + } + +} + +void NestedTimingTree::DisplayNode( TextContext& Text, float leftMargin, float indent ) +{ + if (this == &sm_RootScope) + { + m_IsExpanded = true; + sm_RootScope.FirstChild()->m_IsExpanded = true; + } + else + { + if (sm_SelectedScope == this && !sm_CursorOnGraph) + Text.SetColor( Color(1.0f, 1.0f, 0.5f) ); + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + if (m_Children.size() == 0) + Text.DrawString(" "); + else if (m_IsExpanded) + Text.DrawString("- "); + else + Text.DrawString("+ "); + + Text.DrawString(m_Name.c_str()); + Text.SetCursorX(leftMargin + 300.0f); + Text.DrawFormattedString("%6.3f %6.3f ", m_CpuTime.GetAvg(), m_GpuTime.GetAvg()); + + if (IsGraphed()) + { + Text.SetColor(GraphRenderer::GetGraphColor(m_GraphHandle, GraphType::Profile)); + Text.DrawString(" []\n"); + } + else + Text.DrawString("\n"); + } + + if (!m_IsExpanded) + return; + + for (auto node : m_Children) + node->DisplayNode(Text, leftMargin + indent, indent); +} + +void NestedTimingTree::StoreToGraph(void) +{ + if (m_GraphHandle != PERF_GRAPH_ERROR) + GraphRenderer::Update( XMFLOAT2(m_CpuTime.GetLast(), m_GpuTime.GetLast()), m_GraphHandle, GraphType::Profile); + + for (auto node : m_Children) + node->StoreToGraph(); +} diff --git a/Chapter 20 Shadow Mapping/Core/EngineProfiling.h b/Chapter 20 Shadow Mapping/Core/EngineProfiling.h new file mode 100644 index 0000000..4fcf92e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/EngineProfiling.h @@ -0,0 +1,61 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include "TextRenderer.h" + +class CommandContext; + +namespace EngineProfiling +{ + void Update(); + + void BeginBlock(const std::wstring& name, CommandContext* Context = nullptr); + void EndBlock(CommandContext* Context = nullptr); + + void DisplayFrameRate(TextContext& Text); + void DisplayPerfGraph(GraphicsContext& Text); + void Display(TextContext& Text, float x, float y, float w, float h); + bool IsPaused(); +} + +#ifdef RELEASE +class ScopedTimer +{ +public: + ScopedTimer(const std::wstring&) {} + ScopedTimer(const std::wstring&, CommandContext&) {} +}; +#else +class ScopedTimer +{ +public: + ScopedTimer( const std::wstring& name ) : m_Context(nullptr) + { + EngineProfiling::BeginBlock(name); + } + ScopedTimer( const std::wstring& name, CommandContext& Context ) : m_Context(&Context) + { + EngineProfiling::BeginBlock(name, m_Context); + } + ~ScopedTimer() + { + EngineProfiling::EndBlock(m_Context); + } + +private: + CommandContext* m_Context; +}; +#endif diff --git a/Chapter 20 Shadow Mapping/Core/EngineTuning.cpp b/Chapter 20 Shadow Mapping/Core/EngineTuning.cpp new file mode 100644 index 0000000..aa8bba5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/EngineTuning.cpp @@ -0,0 +1,708 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "pch.h" +#include "TextRenderer.h" +#include "GameInput.h" +#include "Color.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "GraphRenderer.h" + +using namespace std; +using namespace Math; +using namespace Graphics; + +namespace EngineTuning +{ + // For delayed registration. Some objects are constructed before we can add them to the graph (due + // to unreliable order of initialization.) + enum { kMaxUnregisteredTweaks = 1024 }; + char s_UnregisteredPath[kMaxUnregisteredTweaks][128]; + EngineVar* s_UnregisteredVariable[kMaxUnregisteredTweaks] = { nullptr }; + int32_t s_UnregisteredCount = 0; + + float s_ScrollOffset = 0.0f; + float s_ScrollTopTrigger = 1080.0f * 0.2f; + float s_ScrollBottomTrigger = 1080.0f * 0.8f; + + // Internal functions + void AddToVariableGraph( const string& path, EngineVar& var ); + void RegisterVariable( const string& path, EngineVar& var ); + + EngineVar* sm_SelectedVariable = nullptr; + bool sm_IsVisible = false; +} + +// Not open to the public. Groups are auto-created when a tweaker's path includes the group name. +class VariableGroup : public EngineVar +{ +public: + VariableGroup() : m_IsExpanded(false) {} + + EngineVar* FindChild( const string& name ) + { + auto iter = m_Children.find(name); + return iter == m_Children.end() ? nullptr : iter->second; + } + + void AddChild( const string& name, EngineVar& child ) + { + m_Children[name] = &child; + child.m_GroupPtr = this; + } + + void Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ); + + void SaveToFile( FILE* file, int fileMargin ); + void LoadSettingsFromFile( FILE* file ); + + EngineVar* NextVariable( EngineVar* currentVariable ); + EngineVar* PrevVariable( EngineVar* currentVariable ); + EngineVar* FirstVariable( void ); + EngineVar* LastVariable( void ); + + bool IsExpanded( void ) const { return m_IsExpanded; } + + virtual void Increment( void ) override { m_IsExpanded = true; } + virtual void Decrement( void ) override { m_IsExpanded = false; } + virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; } + + virtual void SetValue( FILE*, const std::string& ) override {} + + static VariableGroup sm_RootGroup; + +private: + bool m_IsExpanded; + std::map m_Children; +}; + +VariableGroup VariableGroup::sm_RootGroup; + +//===================================================================================================================== +// VariableGroup implementation + +void VariableGroup::Display( TextContext& Text, float leftMargin, EngineVar* highlightedTweak ) +{ + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + + if (iter->second == highlightedTweak) + { + Text.SetColor( Color(1.0f, 1.0f, 0.25f) ); + float temp1 = Text.GetCursorY() - EngineTuning::s_ScrollBottomTrigger; + float temp2 = Text.GetCursorY() - EngineTuning::s_ScrollTopTrigger; + if (temp1 > 0.0f) + { + EngineTuning::s_ScrollOffset += 0.2f * temp1; + } + else if (temp2 < 0.0f) + { + EngineTuning::s_ScrollOffset = max(0.0f, EngineTuning::s_ScrollOffset + 0.2f * temp2); + } + } + else + Text.SetColor( Color(1.0f, 1.0f, 1.0f) ); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + + if (subGroup->IsExpanded()) + { + Text.DrawString("- "); + } + else + { + Text.DrawString("+ "); + } + Text.DrawString(iter->first); + Text.DrawString("/...\n"); + + if (subGroup->IsExpanded()) + { + subGroup->Display(Text, leftMargin + 30.0f, highlightedTweak); + Text.SetLeftMargin(leftMargin); + Text.SetCursorX(leftMargin); + } + + } + else + { + + iter->second->DisplayValue(Text); + Text.SetCursorX(leftMargin + 200.0f); + Text.DrawString(iter->first); + Text.NewLine(); + } + + } +} + +void VariableGroup::SaveToFile( FILE* file, int fileMargin ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + const char* buffer = (iter->first).c_str(); + + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + fprintf(file, "%*c + %s ...\r\n", fileMargin, ' ', buffer); + subGroup->SaveToFile(file, fileMargin + 5); + } + else if (dynamic_cast(iter->second) == nullptr) + { + fprintf(file, "%*c %s: %s\r\n", fileMargin, ' ', buffer, iter->second->ToString().c_str()); + } + } +} + +void VariableGroup::LoadSettingsFromFile( FILE* file ) +{ + for (auto iter = m_Children.begin(); iter != m_Children.end(); ++iter) + { + VariableGroup* subGroup = dynamic_cast(iter->second); + if (subGroup != nullptr) + { + char skippedLines[100]; + fscanf_s(file, "%*s %[^\n]", skippedLines, (int)_countof(skippedLines)); + subGroup->LoadSettingsFromFile(file); + } + else + { + iter->second->SetValue(file, iter->first); + } + } +} + +EngineVar* VariableGroup::FirstVariable( void ) +{ + return m_Children.size() == 0 ? nullptr : m_Children.begin()->second; +} + +EngineVar* VariableGroup::LastVariable( void ) +{ + if (m_Children.size() == 0) + return this; + + auto LastVariable = m_Children.end(); + --LastVariable; + + VariableGroup* isGroup = dynamic_cast(LastVariable->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return LastVariable->second; +} + +EngineVar* VariableGroup::NextVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + auto nextIter = iter; + ++nextIter; + + if (nextIter == m_Children.end()) + return m_GroupPtr ? m_GroupPtr->NextVariable(this) : nullptr; + else + return nextIter->second; +} + +EngineVar* VariableGroup::PrevVariable( EngineVar* curVar ) +{ + auto iter = m_Children.begin(); + for (; iter != m_Children.end(); ++iter) + { + if (curVar == iter->second) + break; + } + + ASSERT( iter != m_Children.end(), "Did not find engine variable in its designated group" ); + + if (iter == m_Children.begin()) + return this; + + auto prevIter = iter; + --prevIter; + + VariableGroup* isGroup = dynamic_cast(prevIter->second); + if (isGroup && isGroup->IsExpanded()) + return isGroup->LastVariable(); + + return prevIter->second; +} + +//===================================================================================================================== +// EngineVar implementations + +EngineVar::EngineVar( void ) : m_GroupPtr(nullptr) +{ +} + +EngineVar::EngineVar( const std::string& path ) : m_GroupPtr(nullptr) +{ + EngineTuning::RegisterVariable(path, *this); +} + + +EngineVar* EngineVar::NextVar( void ) +{ + EngineVar* next = nullptr; + VariableGroup* isGroup = dynamic_cast(this); + if (isGroup != nullptr && isGroup->IsExpanded()) + next = isGroup->FirstVariable(); + + if (next == nullptr) + next = m_GroupPtr->NextVariable(this); + + return next != nullptr ? next : this; +} + +EngineVar* EngineVar::PrevVar( void ) +{ + EngineVar* prev = m_GroupPtr->PrevVariable(this); + if (prev != nullptr && prev != m_GroupPtr) + { + VariableGroup* isGroup = dynamic_cast(prev); + if (isGroup != nullptr && isGroup->IsExpanded()) + prev = isGroup->LastVariable(); + } + return prev != nullptr ? prev : this; +} + +BoolVar::BoolVar( const std::string& path, bool val ) + : EngineVar(path) +{ + m_Flag = val; +} + +void BoolVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("[%c]", m_Flag ? 'X' : '-'); +} + +std::string BoolVar::ToString( void ) const +{ + return m_Flag ? "on" : "off"; +} + +void BoolVar::SetValue(FILE* file, const std::string& setting) +{ + std::string pattern = "\n " + setting + ": %s"; + char valstr[6]; + + // Search through the file for an entry that matches this setting's name + fscanf_s(file, pattern.c_str(), valstr, _countof(valstr)); + + // Look for one of the many affirmations + m_Flag = ( + 0 == _stricmp(valstr, "1") || + 0 == _stricmp(valstr, "on") || + 0 == _stricmp(valstr, "yes") || + 0 == _stricmp(valstr, "true") ); +} + +NumVar::NumVar( const std::string& path, float val, float minVal, float maxVal, float stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void NumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", m_Value); +} + +std::string NumVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", m_Value); + return buf; +} + +void NumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +#if _MSC_VER < 1800 +__forceinline float log2( float x ) { return log(x) / log(2.0f); } +__forceinline float exp2( float x ) { return pow(2.0f, x); } +#endif + +ExpVar::ExpVar( const std::string& path, float val, float minExp, float maxExp, float expStepSize ) + : NumVar(path, (float)log2(val), minExp, maxExp, expStepSize) +{ +} + +ExpVar& ExpVar::operator=( float val ) +{ + m_Value = Clamp((float)log2(val)); + return *this; +} + +ExpVar::operator float() const +{ + return (float)exp2(m_Value); +} + +void ExpVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11f", (float)*this); +} + +std::string ExpVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%f", (float)*this); + return buf; +} + +void ExpVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %f"; + float valueRead; + + //If we haven't read correctly, just keep m_Value at default value + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + +IntVar::IntVar( const std::string& path, int32_t val, int32_t minVal, int32_t maxVal, int32_t stepSize ) + : EngineVar(path) +{ + ASSERT(minVal <= maxVal); + m_MinValue = minVal; + m_MaxValue = maxVal; + m_Value = Clamp(val); + m_StepSize = stepSize; +} + +void IntVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawFormattedString("%-11d", m_Value); +} + +std::string IntVar::ToString( void ) const +{ + char buf[128]; + sprintf_s(buf, "%d", m_Value); + return buf; +} + +void IntVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %d"; + int32_t valueRead; + + if (fscanf_s(file, scanString.c_str(), &valueRead)) + *this = valueRead; +} + + +EnumVar::EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ) + : EngineVar(path) +{ + ASSERT(listLength > 0); + m_EnumLength = listLength; + m_EnumLabels = listLabels; + m_Value = Clamp(initialVal); +} + +void EnumVar::DisplayValue( TextContext& Text ) const +{ + Text.DrawString(m_EnumLabels[m_Value]); +} + +std::string EnumVar::ToString( void ) const +{ + return m_EnumLabels[m_Value]; +} + +void EnumVar::SetValue(FILE* file, const std::string& setting) +{ + std::string scanString = "\n" + setting + ": %[^\n]"; + char valueRead[14]; + + if (fscanf_s(file, scanString.c_str(), valueRead, _countof(valueRead)) == 1) + { + std::string valueReadStr = valueRead; + valueReadStr = valueReadStr.substr(0, valueReadStr.length() - 1); + + //if we don't find the string, then leave m_EnumLabes[m_Value] as default + for(int32_t i = 0; i < m_EnumLength; ++i) + { + if (m_EnumLabels[i] == valueReadStr) + { + m_Value = i; + break; + } + } + } + +} + +CallbackTrigger::CallbackTrigger( const std::string& path, std::function callback, void* args ) + : EngineVar(path) +{ + m_Callback = callback; + m_Arguments = args; + m_BangDisplay = 0; +} + +void CallbackTrigger::DisplayValue( TextContext& Text ) const +{ + static const char s_animation[] = { '-', '\\', '|', '/' }; + Text.DrawFormattedString("[%c]", s_animation[(m_BangDisplay >> 3) & 3]); + + if (m_BangDisplay > 0) + --m_BangDisplay; +} + +void CallbackTrigger::SetValue(FILE* file, const std::string& setting) +{ + //Skip over setting without reading anything + std::string scanString = "\n" + setting + ": %[^\n]"; + char skippedLines[100]; + fscanf_s(file, scanString.c_str(), skippedLines, _countof(skippedLines)); +} + +//===================================================================================================================== +// EngineTuning namespace methods + +void EngineTuning::Initialize( void ) +{ + + for (int32_t i = 0; i < s_UnregisteredCount; ++i) + { + ASSERT(strlen(s_UnregisteredPath[i]) > 0, "Register = %d\n", i); + ASSERT(s_UnregisteredVariable[i] != nullptr); + AddToVariableGraph(s_UnregisteredPath[i], *s_UnregisteredVariable[i]); + } + s_UnregisteredCount = -1; + +} + +void HandleDigitalButtonPress( GameInput::DigitalInput button, float timeDelta, std::function action ) +{ + if (!GameInput::IsPressed(button)) + return; + + float durationHeld = GameInput::GetDurationPressed(button); + + // Tick on the first press + if (durationHeld == 0.0f) + { + action(); + return; + } + + // After ward, tick at fixed intervals + float oldDuration = durationHeld - timeDelta; + + // Before 2 seconds, use slow scale (200ms/tick), afterward use fast scale (50ms/tick). + float timeStretch = durationHeld < 2.0f ? 5.0f : 20.0f; + + if (Floor(durationHeld * timeStretch) > Floor(oldDuration * timeStretch)) + action(); +} + +void EngineTuning::Update( float frameTime ) +{ + if (GameInput::IsFirstPressed( GameInput::kBackButton ) + || GameInput::IsFirstPressed( GameInput::kKey_back )) + sm_IsVisible = !sm_IsVisible; + + if (!sm_IsVisible) + return; + + if (sm_SelectedVariable == nullptr || sm_SelectedVariable == &VariableGroup::sm_RootGroup) + sm_SelectedVariable = VariableGroup::sm_RootGroup.FirstVariable(); + + if (sm_SelectedVariable == nullptr) + return; + + // Detect a DPad button press + HandleDigitalButtonPress(GameInput::kDPadRight, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kDPadLeft, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kDPadDown, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kDPadUp, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + HandleDigitalButtonPress(GameInput::kKey_right, frameTime, []{ sm_SelectedVariable->Increment(); } ); + HandleDigitalButtonPress(GameInput::kKey_left, frameTime, []{ sm_SelectedVariable->Decrement(); } ); + HandleDigitalButtonPress(GameInput::kKey_down, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->NextVar(); } ); + HandleDigitalButtonPress(GameInput::kKey_up, frameTime, []{ sm_SelectedVariable = sm_SelectedVariable->PrevVar(); } ); + + if (GameInput::IsFirstPressed( GameInput::kAButton ) + || GameInput::IsFirstPressed( GameInput::kKey_return )) + { + sm_SelectedVariable->Bang(); + } +} + +void StartSave(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "wb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.SaveToFile(settingsFile, 2 ); + fclose(settingsFile); + } +} +std::function StartSaveFunc = StartSave; +static CallbackTrigger Save("Save Settings", StartSaveFunc, nullptr); + +void StartLoad(void*) +{ + FILE* settingsFile; + fopen_s(&settingsFile, "engineTuning.txt", "rb"); + if (settingsFile != nullptr) + { + VariableGroup::sm_RootGroup.LoadSettingsFromFile(settingsFile); + fclose(settingsFile); + } +} +std::function StartLoadFunc = StartLoad; +static CallbackTrigger Load("Load Settings", StartLoadFunc, nullptr); + + +void EngineTuning::Display( GraphicsContext& Context, float x, float y, float w, float h ) +{ + GraphRenderer::RenderGraphs(Context, GraphRenderer::GraphType::Profile); + + TextContext Text(Context); + Text.Begin(); + + EngineProfiling::DisplayFrameRate(Text); + + Text.ResetCursor( x, y ); + + if (!sm_IsVisible) + { + EngineProfiling::Display(Text, x, y, w, h); + return; + } + + s_ScrollTopTrigger = y + h * 0.2f; + s_ScrollBottomTrigger = y + h * 0.8f; + + float hScale = g_DisplayWidth / 1920.0f; + float vScale = g_DisplayHeight / 1080.0f; + + Context.SetScissor((uint32_t)Floor(x * hScale), (uint32_t)Floor(y * vScale), + (uint32_t)Ceiling((x + w) * hScale), (uint32_t)Ceiling((y + h) * vScale)); + + Text.ResetCursor(x, y - s_ScrollOffset ); + Text.SetColor( Color(0.5f, 1.0f, 1.0f) ); + Text.DrawString("Engine Tuning\n"); + Text.SetTextSize(20.0f); + + VariableGroup::sm_RootGroup.Display( Text, x, sm_SelectedVariable ); + + EngineProfiling::DisplayPerfGraph(Context); + + Text.End(); + Context.SetScissor(0, 0, g_DisplayWidth, g_DisplayHeight); +} + +void EngineTuning::AddToVariableGraph( const string& path, EngineVar& var ) +{ + // meng Դ�������ڴ�й©�����޸� + VariableGroup* group = &VariableGroup::sm_RootGroup; + group->AddChild(path, var); + + // ����Դ���� +#if 0 + vector separatedPath; + string leafName; + size_t start = 0, end = 0; + + while (1) + { + end = path.find('/', start); + if (end == string::npos) + { + leafName = path.substr(start); + break; + } + else + { + separatedPath.push_back(path.substr(start, end - start)); + start = end + 1; + } + } + + VariableGroup* group = &VariableGroup::sm_RootGroup; + + for (auto iter = separatedPath.begin(); iter != separatedPath.end(); ++iter ) + { + VariableGroup* nextGroup; + EngineVar* node = group->FindChild(*iter); + if (node == nullptr) + { + nextGroup = new VariableGroup(); + group->AddChild(*iter, *nextGroup); + group = nextGroup; + } + else + { + nextGroup = dynamic_cast(node); + ASSERT(nextGroup != nullptr, "Attempted to trash the tweak graph"); + group = nextGroup; + } + } + + group->AddChild(leafName, var); +#endif +} + +void EngineTuning::RegisterVariable( const std::string& path, EngineVar& var ) +{ + if (s_UnregisteredCount >= 0) + { + int32_t Idx = s_UnregisteredCount++; + strcpy_s(s_UnregisteredPath[Idx], path.c_str()); + s_UnregisteredVariable[Idx] = &var; + } + else + { + AddToVariableGraph( path, var ); + } +} + +bool EngineTuning::IsFocused( void ) +{ + return sm_IsVisible; +} diff --git a/Chapter 20 Shadow Mapping/Core/EngineTuning.h b/Chapter 20 Shadow Mapping/Core/EngineTuning.h new file mode 100644 index 0000000..ad89000 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/EngineTuning.h @@ -0,0 +1,178 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include +#include +#include +#include + +class VariableGroup; +class TextContext; + +class EngineVar +{ +public: + + virtual ~EngineVar() {} + + virtual void Increment( void ) {} // DPad Right + virtual void Decrement( void ) {} // DPad Left + virtual void Bang( void ) {} // A Button + + virtual void DisplayValue( TextContext& ) const {} + virtual std::string ToString( void ) const { return ""; } + virtual void SetValue( FILE* file, const std::string& setting) = 0; //set value read from file + + EngineVar* NextVar( void ); + EngineVar* PrevVar( void ); + +protected: + EngineVar( void ); + EngineVar( const std::string& path ); + +private: + friend class VariableGroup; + VariableGroup* m_GroupPtr; +}; + +class BoolVar : public EngineVar +{ +public: + BoolVar( const std::string& path, bool val ); + BoolVar& operator=( bool val ) { m_Flag = val; return *this; } + operator bool() const { return m_Flag; } + + virtual void Increment( void ) override { m_Flag = true; } + virtual void Decrement( void ) override { m_Flag = false; } + virtual void Bang( void ) override { m_Flag = !m_Flag; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +private: + bool m_Flag; +}; + +class NumVar : public EngineVar +{ +public: + NumVar( const std::string& path, float val, float minValue = -FLT_MAX, float maxValue = FLT_MAX, float stepSize = 1.0f ); + NumVar& operator=( float val ) { m_Value = Clamp(val); return *this; } + operator float() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting) override; + +protected: + float Clamp( float val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + float m_Value; + float m_MinValue; + float m_MaxValue; + float m_StepSize; +}; + +class ExpVar : public NumVar +{ +public: + ExpVar( const std::string& path, float val, float minExp = -FLT_MAX, float maxExp = FLT_MAX, float expStepSize = 1.0f ); + ExpVar& operator=( float val ); // m_Value = log2(val) + operator float() const; // returns exp2(m_Value) + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +}; + +class IntVar : public EngineVar +{ +public: + IntVar( const std::string& path, int32_t val, int32_t minValue = 0, int32_t maxValue = (1 << 24) - 1, int32_t stepSize = 1 ); + IntVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_StepSize); } + virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_StepSize); } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +protected: + int32_t Clamp( int32_t val ) { return val > m_MaxValue ? m_MaxValue : val < m_MinValue ? m_MinValue : val; } + + int32_t m_Value; + int32_t m_MinValue; + int32_t m_MaxValue; + int32_t m_StepSize; +}; + +class EnumVar : public EngineVar +{ +public: + EnumVar( const std::string& path, int32_t initialVal, int32_t listLength, const char** listLabels ); + EnumVar& operator=( int32_t val ) { m_Value = Clamp(val); return *this; } + operator int32_t() const { return m_Value; } + + virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_EnumLength; } + virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLength - 1) % m_EnumLength; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual std::string ToString( void ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + + void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Value = Clamp(m_Value); } + +private: + int32_t Clamp( int32_t val ) { return val < 0 ? 0 : val >= m_EnumLength ? m_EnumLength - 1 : val; } + + int32_t m_Value; + int32_t m_EnumLength; + const char** m_EnumLabels; +}; + +class CallbackTrigger : public EngineVar +{ +public: + CallbackTrigger( const std::string& path, std::function callback, void* args = nullptr ); + + virtual void Bang( void ) override { m_Callback(m_Arguments); m_BangDisplay = 64; } + + virtual void DisplayValue( TextContext& Text ) const override; + virtual void SetValue( FILE* file, const std::string& setting ) override; + +private: + std::function m_Callback; + void* m_Arguments; + mutable uint32_t m_BangDisplay; +}; + +class GraphicsContext; + +namespace EngineTuning +{ + void Initialize( void ); + void Update( float frameTime ); + void Display( GraphicsContext& Context, float x, float y, float w, float h ); + bool IsFocused( void ); + +} // namespace EngineTuning diff --git a/Chapter 20 Shadow Mapping/Core/FileUtility.cpp b/Chapter 20 Shadow Mapping/Core/FileUtility.cpp new file mode 100644 index 0000000..78ee5bf --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/FileUtility.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "FileUtility.h" +#include +#include +#include // From NuGet package + +using namespace std; +using namespace Utility; + +namespace Utility +{ + ByteArray NullFile = make_shared > (vector() ); +} + +ByteArray DecompressZippedFile( wstring& fileName ); + +ByteArray ReadFileHelper(const wstring& fileName) +{ + struct _stat64 fileStat; + int fileExists = _wstat64(fileName.c_str(), &fileStat); + if (fileExists == -1) + return NullFile; + + ifstream file( fileName, ios::in | ios::binary ); + if (!file) + return NullFile; + + Utility::ByteArray byteArray = make_shared >( file.seekg(0, ios::end).tellg() ); + file.seekg(0, ios::beg).read( (char*)byteArray->data(), byteArray->size() ); + file.close(); + + ASSERT(byteArray->size() == (size_t)fileStat.st_size); + + return byteArray; +} + +ByteArray ReadFileHelperEx( shared_ptr fileName) +{ + std::wstring zippedFileName = *fileName + L".gz"; + ByteArray firstTry = DecompressZippedFile(zippedFileName); + if (firstTry != NullFile) + return firstTry; + + return ReadFileHelper(*fileName); +} + +ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSize = 0x100000 ) +{ + // Create a dynamic buffer to hold compressed blocks + vector > blocks; + + z_stream strm = {}; + strm.data_type = Z_BINARY; + strm.total_in = strm.avail_in = (uInt)CompressedSource->size(); + strm.next_in = CompressedSource->data(); + + err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib + + while (err == Z_OK || err == Z_BUF_ERROR) + { + strm.avail_out = ChunkSize; + strm.next_out = (unsigned char*)malloc(ChunkSize); + blocks.emplace_back(strm.next_out); + err = inflate(&strm, Z_NO_FLUSH); + } + + if (err != Z_STREAM_END) + { + inflateEnd(&strm); + return NullFile; + } + + ASSERT(strm.total_out > 0, "Nothing to decompress"); + + Utility::ByteArray byteArray = make_shared >( strm.total_out ); + + // Allocate actual memory for this. + // copy the bits into that RAM. + // Free everything else up!! + void* curDest = byteArray->data(); + size_t remaining = byteArray->size(); + + for (size_t i = 0; i < blocks.size(); ++i) + { + ASSERT(remaining > 0); + + size_t CopySize = min(remaining, (size_t)ChunkSize); + + memcpy(curDest, blocks[i].get(), CopySize); + curDest = (unsigned char*)curDest + CopySize; + remaining -= CopySize; + } + + inflateEnd(&strm); + + return byteArray; +} + +ByteArray DecompressZippedFile( wstring& fileName ) +{ + ByteArray CompressedFile = ReadFileHelper(fileName); + if (CompressedFile == NullFile) + return NullFile; + + int error; + ByteArray DecompressedFile = Inflate(CompressedFile, error); + if (DecompressedFile->size() == 0) + { + Utility::Printf(L"Couldn't unzip file %s: Error = %d\n", fileName.c_str(), error); + return NullFile; + } + + return DecompressedFile; +} + +ByteArray Utility::ReadFileSync( const wstring& fileName) +{ + return ReadFileHelperEx(make_shared(fileName)); +} + +task Utility::ReadFileAsync(const wstring& fileName) +{ + shared_ptr SharedPtr = make_shared(fileName); + return create_task( [=] { return ReadFileHelperEx(SharedPtr); } ); +} diff --git a/Chapter 20 Shadow Mapping/Core/FileUtility.h b/Chapter 20 Shadow Mapping/Core/FileUtility.h new file mode 100644 index 0000000..999b030 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/FileUtility.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include +#include +#include + +namespace Utility +{ + using namespace std; + using namespace concurrency; + + typedef shared_ptr > ByteArray; + extern ByteArray NullFile; + + // Reads the entire contents of a binary file. If the file with the same name except with an additional + // ".gz" suffix exists, it will be loaded and decompressed instead. + // This operation blocks until the entire file is read. + ByteArray ReadFileSync(const wstring& fileName); + + // Same as previous except that it does not block but instead returns a task. + task ReadFileAsync(const wstring& fileName); + +} // namespace Utility diff --git a/Chapter 20 Shadow Mapping/Core/Fonts/consola24.h b/Chapter 20 Shadow Mapping/Core/Fonts/consola24.h new file mode 100644 index 0000000..cd3c52b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Fonts/consola24.h @@ -0,0 +1,7091 @@ +unsigned char g_pconsola24[113408] = +{ + 0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x00, + 0x81,0x01,0xc2,0x01,0xbe,0x00,0x30,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00, + 0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00, + 0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00, + 0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00, + 0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00, + 0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00, + 0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00, + 0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00, + 0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00, + 0x64,0x00,0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6a,0x00,0x6b,0x00, + 0x6c,0x00,0x6d,0x00,0x6e,0x00,0x6f,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00, + 0x74,0x00,0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7a,0x00,0x7b,0x00, + 0x7c,0x00,0x7d,0x00,0x7e,0x00,0xa0,0x00,0xa1,0x00,0xa2,0x00,0xa3,0x00,0xa4,0x00, + 0xa5,0x00,0xa6,0x00,0xa7,0x00,0xa8,0x00,0xa9,0x00,0xaa,0x00,0xab,0x00,0xac,0x00, + 0xad,0x00,0xae,0x00,0xaf,0x00,0xb0,0x00,0xb1,0x00,0xb2,0x00,0xb3,0x00,0xb4,0x00, + 0xb5,0x00,0xb6,0x00,0xb7,0x00,0xb8,0x00,0xb9,0x00,0xba,0x00,0xbb,0x00,0xbc,0x00, + 0xbd,0x00,0xbe,0x00,0xbf,0x00,0xc0,0x00,0xc1,0x00,0xc2,0x00,0xc3,0x00,0xc4,0x00, + 0xc5,0x00,0xc6,0x00,0xc7,0x00,0xc8,0x00,0xc9,0x00,0xca,0x00,0xcb,0x00,0xcc,0x00, + 0xcd,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0xd1,0x00,0xd2,0x00,0xd3,0x00,0xd4,0x00, + 0xd5,0x00,0xd6,0x00,0xd7,0x00,0xd8,0x00,0xd9,0x00,0xda,0x00,0xdb,0x00,0xdc,0x00, + 0xdd,0x00,0xde,0x00,0xdf,0x00,0xe0,0x00,0xe1,0x00,0xe2,0x00,0xe3,0x00,0xe4,0x00, + 0xe5,0x00,0xe6,0x00,0xe7,0x00,0xe8,0x00,0xe9,0x00,0xea,0x00,0xeb,0x00,0xec,0x00, + 0xed,0x00,0xee,0x00,0xef,0x00,0xf0,0x00,0xf1,0x00,0xf2,0x00,0xf3,0x00,0xf4,0x00, + 0xf5,0x00,0xf6,0x00,0xf7,0x00,0xf8,0x00,0xf9,0x00,0xfa,0x00,0xfb,0x00,0xfc,0x00, + 0xfd,0x00,0xfe,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xd3,0x00,0x90,0x00, + 0x30,0x00,0x32,0x00,0x50,0x00,0xd3,0x00,0x30,0x01,0x30,0x00,0x6d,0x00,0x33,0x00, + 0xd3,0x00,0x00,0x02,0x30,0x00,0xc3,0x00,0x08,0x00,0xd3,0x00,0x30,0x03,0x30,0x00, + 0xa8,0x00,0x15,0x00,0xd3,0x00,0x40,0x04,0x30,0x00,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x70,0x05,0x30,0x00,0xc9,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x06,0x30,0x00,0x26,0x00, + 0x57,0x00,0xd3,0x00,0x30,0x07,0x30,0x00,0x6a,0x00,0x38,0x00,0xd3,0x00,0x00,0x08, + 0x30,0x00,0x6a,0x00,0x30,0x00,0xd3,0x00,0xd0,0x08,0x30,0x00,0x97,0x00,0x1e,0x00, + 0xd3,0x00,0xd0,0x09,0x30,0x00,0xb4,0x00,0x10,0x00,0xd3,0x00,0xf0,0x0a,0x30,0x00, + 0x5b,0x00,0x2d,0x00,0xd3,0x00,0xb0,0x0b,0x30,0x00,0x70,0x00,0x31,0x00,0xd3,0x00, + 0x80,0x0c,0x30,0x00,0x3e,0x00,0x49,0x00,0xd3,0x00,0x20,0x0d,0x30,0x00,0xa1,0x00, + 0x15,0x00,0xd3,0x00,0x30,0x0e,0x30,0x00,0xb2,0x00,0x10,0x00,0xd3,0x00,0x50,0x0f, + 0x30,0x00,0xa2,0x00,0x19,0x00,0xd3,0x00,0x60,0x10,0x30,0x00,0xa1,0x00,0x1c,0x00, + 0xd3,0x00,0x70,0x11,0x30,0x00,0x9a,0x00,0x1e,0x00,0xd3,0x00,0x70,0x12,0x30,0x00, + 0xc1,0x00,0x08,0x00,0xd3,0x00,0xa0,0x13,0x30,0x00,0x96,0x00,0x21,0x00,0xd3,0x00, + 0xa0,0x14,0x30,0x00,0xa9,0x00,0x17,0x00,0xd3,0x00,0xb0,0x15,0x30,0x00,0xa6,0x00, + 0x16,0x00,0xd3,0x00,0xc0,0x16,0x30,0x00,0xa6,0x00,0x16,0x00,0xd3,0x00,0xd0,0x17, + 0x30,0x00,0xa9,0x00,0x13,0x00,0xd3,0x00,0xe0,0x18,0x30,0x00,0x3a,0x00,0x4d,0x00, + 0xd3,0x00,0x80,0x19,0x30,0x00,0x5b,0x00,0x2f,0x00,0xd3,0x00,0x40,0x1a,0x30,0x00, + 0x94,0x00,0x19,0x00,0xd3,0x00,0x40,0x1b,0x30,0x00,0xa1,0x00,0x19,0x00,0xd3,0x00, + 0x50,0x1c,0x30,0x00,0x93,0x00,0x27,0x00,0xd3,0x00,0x50,0x1d,0x30,0x00,0x74,0x00, + 0x39,0x00,0xd3,0x00,0x30,0x1e,0x30,0x00,0xce,0x00,0x02,0x00,0xd3,0x00,0x30,0x00, + 0x20,0x02,0xd1,0x00,0x01,0x00,0xd3,0x00,0x70,0x01,0x20,0x02,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x80,0x02,0x20,0x02,0xaa,0x00,0x11,0x00,0xd3,0x00,0x90,0x03,0x20,0x02, + 0xb1,0x00,0x14,0x00,0xd3,0x00,0xb0,0x04,0x20,0x02,0x8c,0x00,0x26,0x00,0xd3,0x00, + 0xa0,0x05,0x20,0x02,0x8a,0x00,0x26,0x00,0xd3,0x00,0x90,0x06,0x20,0x02,0xb1,0x00, + 0x0c,0x00,0xd3,0x00,0xb0,0x07,0x20,0x02,0xaa,0x00,0x15,0x00,0xd3,0x00,0xc0,0x08, + 0x20,0x02,0x93,0x00,0x20,0x00,0xd3,0x00,0xc0,0x09,0x20,0x02,0x83,0x00,0x22,0x00, + 0xd3,0x00,0xb0,0x0a,0x20,0x02,0xa7,0x00,0x1d,0x00,0xd3,0x00,0xc0,0x0b,0x20,0x02, + 0x8d,0x00,0x2c,0x00,0xd3,0x00,0xb0,0x0c,0x20,0x02,0xb5,0x00,0x0f,0x00,0xd3,0x00, + 0xd0,0x0d,0x20,0x02,0xa7,0x00,0x16,0x00,0xd3,0x00,0xe0,0x0e,0x20,0x02,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x00,0x10,0x20,0x02,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x10,0x11, + 0x20,0x02,0xc9,0x00,0x0b,0x00,0xd3,0x00,0x40,0x12,0x20,0x02,0xa6,0x00,0x20,0x00, + 0xd3,0x00,0x50,0x13,0x20,0x02,0xa6,0x00,0x15,0x00,0xd3,0x00,0x60,0x14,0x20,0x02, + 0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x15,0x20,0x02,0xaa,0x00,0x14,0x00,0xd3,0x00, + 0x90,0x16,0x20,0x02,0xd3,0x00,0x00,0x00,0xd3,0x00,0xd0,0x17,0x20,0x02,0xb2,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x18,0x20,0x02,0xcc,0x00,0x03,0x00,0xd3,0x00,0x20,0x1a, + 0x20,0x02,0xd4,0x00,0x00,0x00,0xd3,0x00,0x60,0x1b,0x20,0x02,0xa9,0x00,0x15,0x00, + 0xd3,0x00,0x70,0x1c,0x20,0x02,0x5d,0x00,0x41,0x00,0xd3,0x00,0x30,0x1d,0x20,0x02, + 0xa0,0x00,0x1e,0x00,0xd3,0x00,0x30,0x1e,0x20,0x02,0x5d,0x00,0x36,0x00,0xd3,0x00, + 0xf0,0x1e,0x20,0x02,0xa9,0x00,0x16,0x00,0xd3,0x00,0x30,0x00,0x10,0x04,0xd3,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0x10,0x04,0x7e,0x00,0x00,0x00,0xd3,0x00,0x50,0x02, + 0x10,0x04,0x9b,0x00,0x19,0x00,0xd3,0x00,0x50,0x03,0x10,0x04,0xa1,0x00,0x1e,0x00, + 0xd3,0x00,0x60,0x04,0x10,0x04,0x93,0x00,0x1e,0x00,0xd3,0x00,0x60,0x05,0x10,0x04, + 0xa0,0x00,0x14,0x00,0xd3,0x00,0x60,0x06,0x10,0x04,0xa7,0x00,0x16,0x00,0xd3,0x00, + 0x70,0x07,0x10,0x04,0xc5,0x00,0x00,0x00,0xd3,0x00,0xa0,0x08,0x10,0x04,0xb2,0x00, + 0x12,0x00,0xd3,0x00,0xc0,0x09,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0a, + 0x10,0x04,0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0b,0x10,0x04,0x8b,0x00,0x18,0x00, + 0xd3,0x00,0xb0,0x0c,0x10,0x04,0xa6,0x00,0x22,0x00,0xd3,0x00,0xc0,0x0d,0x10,0x04, + 0x97,0x00,0x20,0x00,0xd3,0x00,0xc0,0x0e,0x10,0x04,0xb1,0x00,0x11,0x00,0xd3,0x00, + 0xe0,0x0f,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00,0xe0,0x10,0x10,0x04,0xb0,0x00, + 0x11,0x00,0xd3,0x00,0xf0,0x11,0x10,0x04,0xa1,0x00,0x1e,0x00,0xd3,0x00,0x00,0x13, + 0x10,0x04,0xa0,0x00,0x14,0x00,0xd3,0x00,0x00,0x14,0x10,0x04,0x9b,0x00,0x26,0x00, + 0xd3,0x00,0x00,0x15,0x10,0x04,0x92,0x00,0x22,0x00,0xd3,0x00,0x00,0x16,0x10,0x04, + 0xaa,0x00,0x0c,0x00,0xd3,0x00,0x10,0x17,0x10,0x04,0x97,0x00,0x1e,0x00,0xd3,0x00, + 0x10,0x18,0x10,0x04,0xba,0x00,0x0c,0x00,0xd3,0x00,0x30,0x19,0x10,0x04,0xc7,0x00, + 0x06,0x00,0xd3,0x00,0x60,0x1a,0x10,0x04,0xbb,0x00,0x0d,0x00,0xd3,0x00,0x80,0x1b, + 0x10,0x04,0xbb,0x00,0x0b,0x00,0xd3,0x00,0xa0,0x1c,0x10,0x04,0x98,0x00,0x1f,0x00, + 0xd3,0x00,0xa0,0x1d,0x10,0x04,0x8b,0x00,0x1e,0x00,0xd3,0x00,0x90,0x1e,0x10,0x04, + 0x1f,0x00,0x5a,0x00,0xd3,0x00,0x10,0x1f,0x10,0x04,0x8a,0x00,0x2b,0x00,0xd3,0x00, + 0x30,0x00,0x00,0x06,0xbb,0x00,0x0c,0x00,0xd3,0x00,0x50,0x01,0x00,0x06,0x00,0x00, + 0x00,0x00,0xd3,0x00,0xb0,0x01,0x00,0x06,0x32,0x00,0x51,0x00,0xd3,0x00,0x50,0x02, + 0x00,0x06,0x93,0x00,0x17,0x00,0xd3,0x00,0x50,0x03,0x00,0x06,0xac,0x00,0x11,0x00, + 0xd3,0x00,0x60,0x04,0x00,0x06,0xb3,0x00,0x10,0x00,0xd3,0x00,0x80,0x05,0x00,0x06, + 0xc0,0x00,0x0a,0x00,0xd3,0x00,0xa0,0x06,0x00,0x06,0x1f,0x00,0x5a,0x00,0xd3,0x00, + 0x20,0x07,0x00,0x06,0x9f,0x00,0x1a,0x00,0xd3,0x00,0x20,0x08,0x00,0x06,0xa8,0x00, + 0xff,0xff,0xd3,0x00,0x30,0x09,0x00,0x06,0xcf,0x00,0x02,0x00,0xd3,0x00,0x60,0x0a, + 0x00,0x06,0x7f,0x00,0x2a,0x00,0xd3,0x00,0x40,0x0b,0x00,0x06,0x9d,0x00,0x1a,0x00, + 0xd3,0x00,0x40,0x0c,0x00,0x06,0xa0,0x00,0x16,0x00,0xd3,0x00,0x40,0x0d,0x00,0x06, + 0x70,0x00,0x31,0x00,0xd3,0x00,0x10,0x0e,0x00,0x06,0xac,0x00,0x14,0x00,0xd3,0x00, + 0x20,0x0f,0x00,0x06,0x9b,0x00,0xff,0xff,0xd3,0x00,0x20,0x10,0x00,0x06,0x83,0x00, + 0x28,0x00,0xd3,0x00,0x10,0x11,0x00,0x06,0xac,0x00,0x13,0x00,0xd3,0x00,0x20,0x12, + 0x00,0x06,0x77,0x00,0x2e,0x00,0xd3,0x00,0x00,0x13,0x00,0x06,0x6f,0x00,0x33,0x00, + 0xd3,0x00,0xd0,0x13,0x00,0x06,0xb3,0x00,0x00,0x00,0xd3,0x00,0xf0,0x14,0x00,0x06, + 0xac,0x00,0x1e,0x00,0xd3,0x00,0x00,0x16,0x00,0x06,0xa7,0x00,0x14,0x00,0xd3,0x00, + 0x10,0x17,0x00,0x06,0x3e,0x00,0x4a,0x00,0xd3,0x00,0xb0,0x17,0x00,0x06,0x2e,0x00, + 0x51,0x00,0xd3,0x00,0x40,0x18,0x00,0x06,0x7b,0x00,0x2a,0x00,0xd3,0x00,0x20,0x19, + 0x00,0x06,0x80,0x00,0x29,0x00,0xd3,0x00,0x00,0x1a,0x00,0x06,0x9c,0x00,0x1d,0x00, + 0xd3,0x00,0x00,0x1b,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00,0x30,0x1c,0x00,0x06, + 0xcd,0x00,0x03,0x00,0xd3,0x00,0x60,0x1d,0x00,0x06,0xcd,0x00,0x03,0x00,0xd3,0x00, + 0x90,0x1e,0x00,0x06,0x74,0x00,0x26,0x00,0xd3,0x00,0x30,0x00,0xf0,0x07,0xd2,0x00, + 0x00,0x00,0xd3,0x00,0x70,0x01,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xb0,0x02, + 0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0xf0,0x03,0xf0,0x07,0xd2,0x00,0x00,0x00, + 0xd3,0x00,0x30,0x05,0xf0,0x07,0xd2,0x00,0x00,0x00,0xd3,0x00,0x70,0x06,0xf0,0x07, + 0xd1,0x00,0x00,0x00,0xd3,0x00,0xb0,0x07,0xf0,0x07,0xd4,0x00,0xf7,0xff,0xd3,0x00, + 0xf0,0x08,0xf0,0x07,0xaa,0x00,0x11,0x00,0xd3,0x00,0x00,0x0a,0xf0,0x07,0xb2,0x00, + 0x00,0x00,0xd3,0x00,0x20,0x0b,0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x40,0x0c, + 0xf0,0x07,0xb2,0x00,0x00,0x00,0xd3,0x00,0x60,0x0d,0xf0,0x07,0xb2,0x00,0x00,0x00, + 0xd3,0x00,0x80,0x0e,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0xa0,0x0f,0xf0,0x07, + 0xb4,0x00,0xff,0xff,0xd3,0x00,0xc0,0x10,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00, + 0xe0,0x11,0xf0,0x07,0xb4,0x00,0xff,0xff,0xd3,0x00,0x00,0x13,0xf0,0x07,0xc5,0x00, + 0x00,0x00,0xd3,0x00,0x30,0x14,0xf0,0x07,0xbe,0x00,0xff,0xff,0xd3,0x00,0x50,0x15, + 0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0x80,0x16,0xf0,0x07,0xc9,0x00,0x00,0x00, + 0xd3,0x00,0xb0,0x17,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00,0xe0,0x18,0xf0,0x07, + 0xc9,0x00,0x00,0x00,0xd3,0x00,0x10,0x1a,0xf0,0x07,0xc9,0x00,0x00,0x00,0xd3,0x00, + 0x40,0x1b,0xf0,0x07,0x9d,0x00,0x1b,0x00,0xd3,0x00,0x40,0x1c,0xf0,0x07,0xbe,0x00, + 0x0b,0x00,0xd3,0x00,0x60,0x1d,0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x80,0x1e, + 0xf0,0x07,0xbf,0x00,0xff,0xff,0xd3,0x00,0x30,0x00,0xe0,0x09,0xbf,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x01,0xe0,0x09,0xbf,0x00,0xff,0xff,0xd3,0x00,0x70,0x02,0xe0,0x09, + 0xd4,0x00,0x00,0x00,0xd3,0x00,0xb0,0x03,0xe0,0x09,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0xc0,0x04,0xe0,0x09,0xa4,0x00,0x1c,0x00,0xd3,0x00,0xd0,0x05,0xe0,0x09,0xb4,0x00, + 0x00,0x00,0xd3,0x00,0xf0,0x06,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x10,0x08, + 0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x30,0x09,0xe0,0x09,0xb4,0x00,0x00,0x00, + 0xd3,0x00,0x50,0x0a,0xe0,0x09,0xb4,0x00,0x00,0x00,0xd3,0x00,0x70,0x0b,0xe0,0x09, + 0xb4,0x00,0x00,0x00,0xd3,0x00,0x90,0x0c,0xe0,0x09,0xc6,0x00,0x06,0x00,0xd3,0x00, + 0xc0,0x0d,0xe0,0x09,0x93,0x00,0x1e,0x00,0xd3,0x00,0xc0,0x0e,0xe0,0x09,0xbd,0x00, + 0x00,0x00,0xd3,0x00,0xe0,0x0f,0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x00,0x11, + 0xe0,0x09,0xbd,0x00,0x00,0x00,0xd3,0x00,0x20,0x12,0xe0,0x09,0xbd,0x00,0x00,0x00, + 0xd3,0x00,0x40,0x13,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0x60,0x14,0xe0,0x09, + 0xb8,0x00,0xff,0xff,0xd3,0x00,0x80,0x15,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00, + 0xa0,0x16,0xe0,0x09,0xb8,0x00,0xff,0xff,0xd3,0x00,0xc0,0x17,0xe0,0x09,0xaa,0x00, + 0x13,0x00,0xd3,0x00,0xd0,0x18,0xe0,0x09,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x19, + 0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x20,0x1b,0xe0,0x09,0xc2,0x00,0xff,0xff, + 0xd3,0x00,0x50,0x1c,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00,0x80,0x1d,0xe0,0x09, + 0xc2,0x00,0xff,0xff,0xd3,0x00,0xb0,0x1e,0xe0,0x09,0xc2,0x00,0xff,0xff,0xd3,0x00, + 0x30,0x00,0xd0,0x0b,0xb4,0x00,0x10,0x00,0xd3,0x00,0x50,0x01,0xd0,0x0b,0xb1,0x00, + 0x11,0x00,0xd3,0x00,0x70,0x02,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0x90,0x03, + 0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xb0,0x04,0xd0,0x0b,0xb5,0x00,0x00,0x00, + 0xd3,0x00,0xd0,0x05,0xd0,0x0b,0xb5,0x00,0x00,0x00,0xd3,0x00,0xf0,0x06,0xd0,0x0b, + 0xc7,0x00,0xff,0xff,0xd3,0x00,0x20,0x08,0xd0,0x0b,0xa1,0x00,0x1e,0x00,0xd3,0x00, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x85,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xb2,0xb2,0xb2,0xa4,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x8e,0x90,0x8d,0x84,0x81,0x81,0x81,0x81,0x87,0x88, + 0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa6,0xad,0xa2,0x89,0x81,0x81,0x81,0x81,0x92, + 0xa8,0xad,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8a,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8f,0x90,0x8e,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xac,0x92,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa6,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc2,0xdc,0xdd,0xdc,0xc4,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x99,0xac,0xb7,0xba,0xb7,0xac,0x99,0x81,0x83,0xa0,0xb1,0xb2, + 0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x99,0xa1,0xa3,0xa0,0x98,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xa4,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xca,0xd7,0xc5,0xa7,0x89,0x81,0x81,0x92,0xb0, + 0xcd,0xd6,0xc1,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb4,0xae,0xa4,0x97,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa0,0xaf,0xb8,0xba,0xb8,0xb0,0xa1,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdb,0xc6,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81, + 0x81,0x83,0x9e,0xaa,0xab,0xaa,0x9e,0xa2,0xab,0xab,0xa8,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x97,0xa6,0xd0,0xfa,0x09,0xfa,0xd0,0xa5,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xbb,0xd2,0xe1,0xe5,0xe1,0xd2,0xbb,0x9d,0x9b,0xbe,0xda,0xdd, + 0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x83,0x9e,0xb3,0xc3,0xcb,0xcd,0xca,0xc0,0xaf, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdc,0xc4,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xaa,0xca,0xe8,0xff,0xe3,0xc5,0xa3,0x81,0x89,0xaf,0xce, + 0xec,0xfb,0xdf,0xbf,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0xb6, + 0xd6,0xdd,0xdd,0xca,0xa6,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xdf,0xdf,0xd9,0xb8,0x90,0x81, + 0x81,0x81,0x81,0x81,0x85,0x99,0xa7,0xb0,0xb2,0xb2,0xaa,0x9d,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9b,0xab,0xad,0xad,0xa6,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9b,0xa8,0xb0,0xb2,0xb2,0xab,0x9d,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0x9f,0xa9,0xb0,0xb2,0xb2,0xaf,0xa6,0x9a,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xab, + 0xaa,0x9f,0x85,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0x9f,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0xa4, + 0xa8,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad, + 0xb2,0xb2,0xb0,0xaa,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9f, + 0xab,0xb2,0xb2,0xb0,0xa7,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdd,0xd7,0xcd,0xbe,0xab,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xb1,0xc7,0xd7,0xe2,0xe5,0xe2,0xd8,0xc7,0xb0,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x09,0x09,0xf5,0xd2,0xfc,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x9b,0xbf,0xd4,0xd5,0xd4,0xbf,0xc6,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x99,0xae,0xbf,0xcc,0xd5,0xff,0x1e,0xf4,0xca,0xc3,0xb3,0x94,0x81, + 0x81,0x81,0x94,0xb9,0xd9,0xf6,0x0a,0x11,0x0a,0xf5,0xd9,0xb7,0xb2,0xd5,0xf9,0x09, + 0x07,0xdf,0xb5,0x8b,0x81,0x81,0x81,0xa1,0xbf,0xd8,0xeb,0xf5,0xf7,0xf4,0xe7,0xd3, + 0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x84,0xa6,0xc7,0xe6,0x06,0x1f,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7, + 0x0b,0x1c,0xfb,0xdc,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x88,0xa6,0xb9,0xb6,0xc0, + 0xea,0x09,0x04,0xd7,0xaf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc7,0xee,0x0b,0x0b,0xe9,0xbf,0x95,0x81, + 0x81,0x81,0x81,0x8e,0xa9,0xbf,0xcf,0xda,0xdd,0xdc,0xd3,0xc5,0xb0,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x99,0xac,0xc0,0xd4,0xd7,0xd7,0xca,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xc1,0xd1,0xda,0xdd,0xdc,0xd3,0xc5,0xaf,0x96, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb8,0xc8,0xd2,0xda,0xdd,0xdd,0xd8,0xcf,0xc0,0xab, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd5, + 0xd5,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0xa6,0xc6,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb5,0xc3,0xcd, + 0xd2,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x85,0xa1,0xb8,0xca,0xd6, + 0xdd,0xdd,0xda,0xd3,0xc6,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb3,0xc6, + 0xd4,0xdc,0xdd,0xda,0xcf,0xbf,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x09,0xff,0xf5,0xe5,0xd0,0xb6,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb8,0xd4,0xec,0xff,0x0b,0x11,0x0b,0xff,0xeb,0xd0,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0xa5,0xd0,0xfa,0xff,0xfa,0xd0,0xdd,0xff,0xff,0xed,0xc2,0x98,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xbb,0xd4,0xe7,0xf5,0xfa,0x06,0x19,0xfa,0xf5,0xec,0xce,0xa6,0x81, + 0x81,0x81,0xa6,0xcd,0xf3,0x16,0x11,0x06,0x14,0x14,0xf1,0xc9,0xc9,0xec,0x10,0x12, + 0xef,0xcc,0xa8,0x82,0x81,0x81,0x95,0xba,0xdd,0xfb,0x12,0x1f,0x23,0x1e,0x0d,0xf3, + 0xd4,0xaf,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xe1,0x04,0x23,0x09,0xe8,0xca,0xa7,0x81,0x8d,0xb4,0xd6, + 0xf5,0x15,0x18,0xf7,0xd5,0xb4,0x91,0x81,0x81,0x81,0x81,0x9e,0xc2,0xe1,0xdb,0xc3, + 0xea,0x16,0xff,0xd5,0xd2,0xe7,0xd3,0xae,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb0,0xd7,0xfc,0x25,0xff,0xd9,0xb2,0x8b,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe3,0xf6,0x04,0x09,0x06,0xfb,0xeb,0xd2,0xb6,0x96,0x81, + 0x81,0x81,0x81,0x82,0x97,0xab,0xbe,0xd2,0xe6,0xf9,0x04,0x04,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x9a,0xb7,0xd1,0xe7,0xf9,0x04,0x09,0x06,0xfb,0xea,0xd2,0xb4, + 0x93,0x81,0x81,0x81,0x82,0xab,0xd4,0xf1,0xfb,0x04,0x09,0x09,0x04,0xf7,0xe6,0xcd, + 0xaf,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0xff,0xff, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x94,0xb0,0xc8,0xdb,0xec,0xf6, + 0xfc,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0xa3,0xc1,0xdc,0xf1,0xff, + 0x06,0x09,0x06,0xfb,0xec,0xd5,0xb8,0x97,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd7,0xed, + 0xfc,0x06,0x09,0x04,0xf6,0xe3,0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x99,0x98,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0x24,0x1d,0x0a,0xf1,0xd5,0xb6,0x94,0x81,0x81, + 0x81,0x81,0x81,0x93,0xb5,0xd5,0xf3,0x0f,0x19,0x09,0x04,0x09,0x1a,0x0d,0xee,0xcb, + 0xa7,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x83,0xaa,0xd5,0xfc,0x21,0xf5,0xcb,0xdf,0x0b,0x14,0xea,0xc0,0x96,0x81,0x81,0x81, + 0x81,0x97,0xba,0xdb,0xf6,0x0d,0x1d,0x24,0x27,0x26,0x24,0x1e,0xfc,0xd2,0xa8,0x81, + 0x81,0x88,0xb2,0xdb,0x04,0x1c,0xf5,0xdc,0xfa,0x23,0xfc,0xd5,0xe0,0x04,0x1f,0xfb, + 0xd9,0xb5,0x91,0x81,0x81,0x81,0xa5,0xcd,0xf4,0x18,0x1c,0xff,0xfa,0x07,0x25,0x0f, + 0xe8,0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0x8e,0xb3,0xd7,0xfa,0x1c,0x0f,0xed,0xcc,0xac,0x8e,0x81,0x81,0x9b,0xb9, + 0xd9,0xfa,0x1c,0x11,0xee,0xcb,0xa7,0x82,0x81,0x81,0x8e,0xb4,0xd8,0xfc,0xfc,0xe6, + 0xea,0x16,0xfc,0xdd,0xf5,0x0d,0xe8,0xc3,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0x9a,0x9b,0x9b,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc1,0xe7,0x0f,0x17,0xef,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0xa5,0xc8,0xe8,0x05,0x1d,0x1f,0x19,0x1d,0x23,0x0f,0xf1,0xd1,0xae,0x8a, + 0x81,0x81,0x81,0xa3,0xbc,0xcf,0xe3,0xf7,0x0b,0x1f,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x8d,0xb4,0xd5,0xf3,0x0c,0x20,0x1e,0x1b,0x20,0x23,0x0d,0xf0,0xce, + 0xaa,0x84,0x81,0x81,0x83,0xad,0xd7,0x04,0x24,0x1c,0x19,0x19,0x22,0x1f,0x09,0xea, + 0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaa,0xce,0xf1,0x15,0x2b,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x90,0xb1,0xd0,0xeb,0xff,0x13,0x20, + 0x23,0x21,0x21,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x97,0xbc,0xdf,0xfc,0x17,0x20, + 0x17,0x16,0x1b,0x24,0x10,0xf3,0xd2,0xad,0x86,0x81,0x81,0x94,0xb8,0xd9,0xf7,0x12, + 0x24,0x18,0x16,0x1e,0x1d,0x05,0xe6,0xc5,0xa1,0x81,0x81,0x81,0x81,0x82,0x93,0x9b, + 0x99,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x94,0x9b,0x98,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xc3,0xc0,0xa7,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbc,0xc4,0xb2,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xf2,0xfb,0x0d,0x25,0x12,0xf1,0xcf,0xab,0x85,0x81, + 0x81,0x81,0x86,0xab,0xce,0xf0,0x12,0x12,0xf5,0xe1,0xd7,0xe1,0xf9,0x1a,0x06,0xe1, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xa0, + 0xad,0xaf,0xd7,0x04,0x1b,0xf1,0xc7,0xe5,0x0f,0x11,0xe5,0xbb,0xac,0x9c,0x81,0x81, + 0x82,0xaa,0xd1,0xf5,0x16,0x1d,0x06,0xfa,0x11,0x0e,0xfa,0x04,0xfc,0xd2,0xa8,0x81, + 0x81,0x8b,0xb5,0xdf,0x0b,0x16,0xea,0xc8,0xf2,0x1e,0x04,0xd7,0xf7,0x1a,0x09,0xe5, + 0xc1,0x9e,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2b,0x04,0xdf,0xd1,0xe9,0x11,0x1e, + 0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x81,0xa2,0xc8,0xed,0x11,0x1a,0xf5,0xd3,0xb2,0x91,0x81,0x81,0x81,0x81,0x9e, + 0xbf,0xe1,0x05,0x28,0x05,0xe0,0xbb,0x95,0x81,0x81,0x95,0xc0,0xea,0x09,0x1b,0x09, + 0xf0,0x16,0xfa,0xff,0x18,0x12,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xb3,0xc5,0xc5,0xc5,0xba,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xaa,0xd1,0xf7,0x1f,0x06,0xdf,0xb8,0x91,0x81,0x81, + 0x81,0x94,0xba,0xdf,0x04,0x25,0x0f,0xf6,0xed,0xf5,0x0b,0x29,0x0c,0xe8,0xc2,0x9c, + 0x81,0x81,0x90,0xb9,0xdf,0xf5,0x0a,0x1d,0x1e,0x0f,0x30,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0x0b,0x1d,0x05,0xf5,0xef,0xf7,0x10,0x2b,0x09,0xe2, + 0xbb,0x93,0x81,0x81,0x83,0xad,0xd7,0x04,0xfa,0xf2,0xed,0xef,0xfa,0x12,0x26,0xff, + 0xda,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc1,0xe5,0x09,0x20,0x07,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd6,0xad,0x82,0x81,0x81,0x82,0xa8,0xcb,0xec,0x0b,0x25,0x11,0xff, + 0xf7,0xf5,0xf5,0xf3,0xce,0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0x0b,0x20,0xfa,0xd0,0xa5,0x81,0x81,0xa6,0xce,0xf5,0x1a,0x14,0xf9, + 0xed,0xea,0xf2,0x07,0x27,0x0b,0xe4,0xbb,0x92,0x81,0x81,0xa8,0xce,0xf3,0x15,0x1a, + 0xfc,0xee,0xeb,0xf6,0x0f,0x22,0xff,0xda,0xb4,0x8d,0x81,0x81,0x89,0xa6,0xbb,0xc5, + 0xc3,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xbd,0xc5,0xc1,0xb1,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0xe3,0xc5,0xa7,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbf,0xdd,0xed,0xd2,0xb7,0x9c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xa7,0xbe,0xc2,0xc8,0xd4,0xea,0x07,0x2b,0x09,0xe3,0xbc,0x94,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x09,0x18,0xf5,0xd5,0xbb,0xad,0xbd,0xdf,0x05,0x19,0xf1, + 0xc9,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x16,0x21,0xf5,0xd2,0xfc,0x29,0x0e,0xe2,0xb8,0x8d,0x81,0x9c,0xc1, + 0xd7,0xd7,0xdd,0x07,0x19,0xed,0xd7,0xe9,0x13,0x0b,0xe1,0xd7,0xd5,0xba,0x95,0x81, + 0x8d,0xb6,0xdf,0x09,0x29,0xff,0xe1,0xed,0x16,0x09,0xdd,0xd9,0xdf,0xc8,0xa2,0x81, + 0x81,0x8a,0xb5,0xde,0x09,0x19,0xef,0xd1,0xf7,0x21,0xff,0xeb,0x0f,0x14,0xf1,0xcd, + 0xaa,0x86,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x29,0xfc,0xd2,0xba,0xe4,0x0e,0x1f, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0xfa,0xd0,0xa5,0x81, + 0x81,0x8e,0xb4,0xdb,0xff,0x27,0x05,0xe0,0xbc,0x99,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa7,0xca,0xee,0x13,0x1a,0xf4,0xce,0xa7,0x81,0x81,0x8d,0xb2,0xcf,0xe2,0xf5,0x09, + 0x12,0x18,0x0c,0x12,0xff,0xec,0xd9,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xee,0xef,0xef,0xd6,0xae,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xba,0xe1,0x09,0x1d,0xf5,0xce,0xa8,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf2,0x19,0x15,0xf1,0xd2,0xc3,0xcf,0xed,0x11,0x21,0xfa,0xd2,0xaa, + 0x82,0x81,0x92,0xbb,0xe4,0x0b,0x21,0x0d,0xf9,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x88,0xad,0xce,0xee,0xfc,0xe1,0xcd,0xc5,0xd4,0xf5,0x1d,0x19,0xef, + 0xc6,0x9d,0x81,0x81,0x81,0xa6,0xca,0xdd,0xd2,0xc8,0xc3,0xc5,0xd6,0xfb,0x24,0x0e, + 0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd8,0xfb,0x1f,0x09,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xbf,0x9e,0x81,0x81,0x81,0x95,0xbb,0xe1,0x06,0x25,0x05,0xec,0xd9, + 0xcf,0xca,0xca,0xca,0xb7,0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xf6,0x1d,0x0f,0xe8,0xc1,0x9b,0x81,0x85,0xaf,0xd9,0x04,0x29,0xff,0xd8, + 0xc3,0xc1,0xcb,0xee,0x18,0x16,0xed,0xc2,0x98,0x81,0x8d,0xb6,0xde,0x06,0x28,0xff, + 0xde,0xc5,0xc2,0xd3,0xf5,0x1b,0x12,0xeb,0xc3,0x9a,0x81,0x81,0xa5,0xc5,0xe0,0xef, + 0xec,0xd7,0xb9,0x97,0x81,0x81,0x81,0x85,0xa9,0xc8,0xe3,0xef,0xe9,0xd4,0xb5,0x93, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xee,0x09,0xff,0xe3,0xc1,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8f,0xb8,0xdb,0xfb,0x0f,0xf3,0xd7,0xbd,0xa1,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0x96,0x98,0x9f,0xaf,0xcc,0xf1,0x19,0x19,0xef,0xc7,0x9d,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0x1e,0xff,0xde,0xba,0xbf,0xc0,0xb8,0xcd,0xf5,0x1e,0xfc, + 0xd4,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x95,0xc0,0xea,0x0e,0x0e,0xf5,0xd2,0xfc,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0xa5,0xd0, + 0xfa,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0x19,0x0a,0x04,0x04,0xf2,0xc8,0x9d,0x81, + 0x90,0xba,0xe5,0x11,0x23,0xf7,0xce,0xf2,0x1c,0x04,0xd7,0xb0,0xb5,0xa8,0x8c,0x81, + 0x81,0x84,0xad,0xd5,0xfc,0x22,0x05,0xf7,0x0d,0x18,0xf1,0xff,0x21,0xfc,0xda,0xb6, + 0x93,0x81,0x81,0x81,0x81,0x86,0xb0,0xda,0x04,0x2c,0x06,0xe0,0xd6,0xf5,0x19,0x13, + 0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0e,0x0e,0xfa,0xd0,0xa5,0x81, + 0x81,0x9c,0xc4,0xec,0x13,0x19,0xf1,0xcc,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb5,0xda,0xff,0x28,0x06,0xde,0xb6,0x8f,0x81,0x81,0xa3,0xbb,0xce,0xe1,0xf3, + 0x06,0x27,0x12,0xfb,0xe8,0xd6,0xc4,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xf1,0x19,0x0c,0xe5,0xbe,0x98,0x81,0x81,0x81, + 0x86,0xaf,0xd8,0xff,0x29,0x04,0xdc,0xb7,0xa9,0xc3,0xdc,0xff,0x29,0x09,0xdf,0xb6, + 0x8d,0x81,0x86,0xad,0xd3,0xfa,0xfb,0xe7,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb3,0xd3,0xda,0xc1,0xa7,0x9c,0xc0,0xea,0x13,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x8e,0xa8,0xb2,0xa9,0x9f,0x99,0xa1,0xca,0xf5,0x21,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x83,0xa7,0xcb,0xee,0x12,0x15,0xf1,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xca,0xa5,0xa3, + 0xa3,0xa3,0xa3,0x9a,0x83,0x81,0x81,0x81,0xa4,0xcd,0xf4,0x1a,0x0f,0xea,0xca,0xb2, + 0xad,0xa8,0xa0,0xa0,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xbe,0xe3,0x0a,0x22,0xfb,0xd5,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x29,0xff,0xd8, + 0xb8,0xa9,0xc6,0xed,0x16,0x16,0xec,0xc2,0x98,0x81,0x95,0xbf,0xe7,0x12,0x1d,0xf3, + 0xca,0xa3,0x98,0xbd,0xe6,0x0e,0x1f,0xf6,0xcd,0xa4,0x81,0x90,0xb8,0xdf,0xff,0x19, + 0x12,0xf5,0xd1,0xa9,0x81,0x81,0x81,0x95,0xbd,0xe3,0x05,0x19,0x0f,0xf1,0xcc,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xee,0xc6,0x9d, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x94, + 0x81,0x81,0x92,0xbc,0xe5,0x04,0x1e,0x13,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x95,0x9b,0x9b,0xbe,0xe7,0x13,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x92,0xba,0xe1,0x0a,0x15,0xef,0xc8,0xdc,0xe9,0xea,0xe0,0xe9,0xeb,0x15,0x06, + 0xdd,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x91,0xb9,0xdb,0xe2,0xe2,0xe0,0xc9,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0xa5,0xd0, + 0xfa,0x13,0x13,0x1c,0x18,0x13,0x13,0x13,0x24,0x13,0x13,0x13,0xf2,0xc8,0x9d,0x81, + 0x8f,0xb8,0xe2,0x0b,0x2b,0x05,0xe7,0xf7,0x22,0xfc,0xd2,0xa9,0x8b,0x82,0x81,0x81, + 0x81,0x81,0x9e,0xc4,0xe7,0x05,0x19,0x1e,0x13,0xfb,0xf5,0x19,0x0a,0xe6,0xc2,0x9f, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xf9,0x12,0x1c,0xfc, + 0xda,0xb4,0x9a,0x8e,0x81,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe1,0xc7,0xa0,0x81, + 0x81,0xa9,0xd2,0xfa,0x22,0x0a,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x19,0x14,0xec,0xc3,0x9b,0x81,0x90,0xb9,0xdf,0xf4,0x07,0x19, + 0x04,0x16,0xfc,0x10,0x0f,0xfc,0xe9,0xcb,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x23,0xfc,0xd5,0xae,0x87,0x81,0x81,0x81, + 0x8e,0xb7,0xe1,0x0b,0x21,0xf7,0xcf,0xb2,0xcc,0xe4,0xfc,0x17,0x33,0x11,0xe7,0xbe, + 0x94,0x81,0x81,0x9c,0xc2,0xdd,0xd6,0xc2,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb1,0xa0,0x85,0x96,0xc0,0xea,0x13,0x1e,0xf4, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba,0xc0,0xd9,0xfc,0x26,0x06, + 0xde,0xb5,0x8c,0x81,0x81,0x81,0x81,0x9a,0xbe,0xe1,0x05,0x22,0xfc,0xdb,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5,0xd0,0xcf,0xca, + 0xc2,0xb5,0xa2,0x8b,0x81,0x81,0x81,0x86,0xb0,0xd9,0xff,0x26,0xfc,0xd6,0xd4,0xd7, + 0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa, + 0xd1,0xf6,0x1d,0x0f,0xe9,0xc4,0x9d,0x81,0x81,0x81,0xaa,0xd3,0xfb,0x22,0x12,0xf3, + 0xdb,0xcc,0xe3,0xff,0x25,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef, + 0xc5,0x9c,0x8b,0xb3,0xdd,0x07,0x29,0xfc,0xd4,0xaa,0x81,0x95,0xc0,0xea,0x15,0x3d, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1a,0x41,0x29,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe8,0xcd,0xb2,0x8f, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xce,0xb3, + 0x8e,0x81,0x86,0xaa,0xc8,0xe3,0xfc,0x19,0x18,0xfc,0xe3,0xc7,0xac,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xbc,0xc5,0xc5,0xcc,0xed,0x16,0x1c,0xf2,0xc8,0x9e,0x81, + 0x81,0x9f,0xc7,0xef,0x18,0x07,0xdf,0xe6,0xff,0x13,0x13,0x09,0x11,0xe6,0x11,0x0b, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xaa,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0xa2,0xc9, + 0xe7,0xe7,0xea,0x13,0x0b,0xe7,0xe7,0xf5,0x21,0xfc,0xe7,0xe7,0xe3,0xc2,0x9a,0x81, + 0x85,0xae,0xd4,0xf9,0x1a,0x23,0x0b,0xfc,0x21,0xf7,0xcd,0xb9,0xa5,0x8d,0x81,0x81, + 0x81,0x81,0x8a,0xac,0xca,0xe1,0xef,0xf2,0xec,0xe8,0x0d,0x16,0xf3,0xcf,0xac,0x89, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x05,0x26,0x13,0x1d,0x12,0xfb,0xdf, + 0xc5,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xb7,0xa9,0x8c,0x81, + 0x8a,0xb3,0xdc,0x06,0x26,0xfc,0xd4,0xac,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xbc,0xe5,0x0e,0x20,0xf7,0xcd,0xa4,0x81,0x92,0xbb,0xe3,0x09,0x0f,0xf7, + 0xea,0x16,0xfc,0xee,0x06,0x18,0xf3,0xcd,0xa4,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9e,0xc5,0xec,0x13,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81, + 0x93,0xbd,0xe7,0x11,0x1b,0xf1,0xc7,0xd4,0xee,0x07,0x20,0x13,0x18,0x18,0xed,0xc2, + 0x98,0x81,0x81,0x86,0xa4,0xb4,0xb0,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x87,0x81,0x89,0xaa,0xce,0xf4,0x1c,0x14,0xec, + 0xc3,0x99,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5,0xe9,0xf9,0x14,0x12,0xf1, + 0xce,0xa8,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd5,0xf9,0x1c,0x0b,0xe7,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xfa,0xfa,0xf9,0xf5, + 0xeb,0xdb,0xc6,0xac,0x8e,0x81,0x81,0x8e,0xb8,0xe2,0x0b,0x1e,0xf5,0xf4,0xfc,0x04, + 0x04,0xfa,0xec,0xd6,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc, + 0xe2,0x09,0x24,0xfc,0xd7,0xb1,0x8b,0x81,0x81,0x81,0x9d,0xc4,0xe8,0x09,0x25,0x15, + 0xff,0xf1,0x07,0x1f,0x10,0xf1,0xd0,0xab,0x84,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7, + 0xd0,0xb6,0xb5,0xbe,0xd8,0x04,0x2c,0x04,0xd7,0xad,0x83,0x93,0xbc,0xe5,0x0b,0x25, + 0x1d,0xfc,0xd6,0xad,0x83,0x81,0x81,0x98,0xc1,0xe9,0x0f,0x27,0x1a,0xf7,0xd1,0xa8, + 0x81,0x81,0x81,0x91,0xac,0xc7,0xe3,0xfc,0x18,0x18,0xfc,0xe3,0xc8,0xac,0x92,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xec,0xc2, + 0x98,0x81,0x81,0x8c,0xa7,0xc2,0xdd,0xf7,0x14,0x1d,0x04,0xe7,0xcc,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x8a,0xb3,0xdb,0xef,0xef,0xf4,0x07,0x26,0x0f,0xe7,0xbf,0x97,0x81, + 0x81,0xa9,0xd2,0xfa,0x23,0xfa,0xde,0xff,0x21,0x05,0x04,0x20,0x09,0xe2,0x0b,0x0f, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x84,0x8d,0x8d,0x8d,0x89,0x81,0x81,0x81,0x8f,0xad, + 0xbd,0xc4,0xed,0x19,0x06,0xdd,0xd0,0xfa,0x24,0xfa,0xd0,0xbd,0xbb,0xa8,0x89,0x81, + 0x81,0x9b,0xbe,0xdd,0xfa,0x12,0x24,0x23,0x1f,0xff,0xf1,0xde,0xc8,0xae,0x90,0x81, + 0x81,0x81,0x81,0x8e,0xa8,0xbb,0xc6,0xc8,0xdc,0xff,0x22,0xff,0xdb,0xbd,0xba,0xaf, + 0x9c,0x83,0x81,0x81,0x81,0x8b,0xae,0xcc,0xe9,0x04,0x1f,0x32,0x0e,0xee,0xd9,0xdb, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x8b,0x8d,0x8d,0x8d,0x83,0x81,0x81, + 0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x89,0xb2,0xdc,0x06,0x29,0xff,0xd5,0xab,0x81,0x85,0xaa,0xcf,0xf4,0xec,0xd4, + 0xea,0x16,0xfc,0xd2,0xe3,0xfb,0xde,0xb9,0x94,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xae,0xd5,0xfc,0x23,0x04,0xdb,0xb4,0x8d,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xf6,0x0f,0x23,0x0b,0xf1,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x8a,0x88,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc5,0xe6,0x09,0x26,0x04,0xdc, + 0xb5,0x8e,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11,0x13,0x1f,0x07,0xf1,0xd5, + 0xbb,0x9d,0x81,0x81,0x81,0x81,0xa4,0xc8,0xec,0x0f,0x17,0xf3,0xd0,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0x26,0x26,0x23,0x1e, + 0x13,0xff,0xe8,0xc9,0xa7,0x83,0x81,0x93,0xbd,0xe7,0x11,0x1c,0x0c,0x1d,0x1b,0x19, + 0x1c,0x23,0x11,0xf5,0xd6,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf, + 0xf5,0x1b,0x12,0xeb,0xc5,0x9f,0x81,0x81,0x81,0x81,0x8a,0xad,0xcc,0xea,0x04,0x18, + 0x26,0x19,0x24,0x07,0xf0,0xd4,0xb6,0x95,0x81,0x81,0x8b,0xb4,0xdc,0x04,0x29,0x0b, + 0xee,0xdf,0xdf,0xe7,0xf5,0x0a,0x2e,0x04,0xd7,0xad,0x83,0x86,0xac,0xd0,0xec,0xfc, + 0xf7,0xe1,0xc2,0x9e,0x81,0x81,0x81,0x8b,0xb1,0xd4,0xef,0xfc,0xf6,0xdd,0xbe,0x99, + 0x81,0x81,0x96,0xb1,0xcc,0xe8,0x04,0x1d,0x12,0xf7,0xdd,0xc2,0xa7,0x8c,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x87,0xa1,0xbd,0xd7,0xf3,0x0f,0x23,0x09,0xec,0xd2,0xb7,0x9b, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0x1e,0x20,0x0f,0xf5,0xd4,0xaf,0x89,0x81, + 0x87,0xb1,0xda,0x04,0x19,0xf1,0xef,0x16,0x0c,0xe6,0xf5,0x1f,0x04,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xbd,0xc8,0xf2,0x1c,0x04,0xd7,0xd4,0xfc,0x21,0xf5,0xcc,0xbd,0xb2,0x95,0x81,0x81, + 0x81,0x83,0xa1,0xbf,0xd8,0xec,0xfc,0x10,0x2a,0x28,0x17,0x04,0xea,0xcc,0xac,0x89, + 0x81,0x81,0x81,0x81,0x82,0x93,0xac,0xd0,0xf3,0x17,0x0b,0xe8,0xe3,0xe7,0xe4,0xd5, + 0xbf,0xa1,0x81,0x81,0x81,0xa1,0xc6,0xe8,0x09,0x25,0x0b,0x12,0x25,0x04,0xe3,0xdf, + 0x0b,0x1b,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe7,0x13,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xab,0xd5,0xff,0x2b,0x04,0xda,0xb0,0x85,0x81,0x96,0xb9,0xd1,0xc9,0xc0, + 0xea,0x16,0xfc,0xd2,0xc0,0xd2,0xc4,0xa4,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbe,0xe6,0x0c,0x19,0xf1,0xcb,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xff,0x18,0x1a,0xff,0xe8,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa3,0xc3,0xe1,0xff,0x21,0x0f,0xec,0xc8, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0e,0x0e,0x0f,0x16,0x1e,0x0f,0xf7, + 0xd9,0xb8,0x94,0x81,0x81,0x97,0xbb,0xdf,0x04,0x23,0xff,0xdc,0xb9,0xda,0x06,0x29, + 0xfc,0xd2,0xa8,0x9e,0x8e,0x81,0x81,0x88,0xb2,0xdc,0xfa,0xfa,0xfa,0xfa,0xfc,0x09, + 0x1a,0x23,0x05,0xe1,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x25,0x0f,0xfc,0xf2,0xed, + 0xf3,0x06,0x23,0x11,0xec,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2, + 0x09,0x25,0xff,0xd9,0xb3,0x8c,0x81,0x81,0x81,0x81,0x91,0xb2,0xd0,0xec,0x05,0x1a, + 0x19,0x17,0x2a,0x14,0xfc,0xe3,0xc4,0xa2,0x81,0x81,0x81,0xa5,0xcb,0xee,0x0f,0x28, + 0x14,0x09,0x09,0x0f,0x1d,0x16,0x2b,0xff,0xd7,0xad,0x83,0x81,0x94,0xb1,0xc7,0xd2, + 0xcf,0xc0,0xa5,0x87,0x81,0x81,0x81,0x81,0x98,0xb4,0xc9,0xd2,0xce,0xbd,0xa1,0x83, + 0x81,0x8b,0xb2,0xd2,0xec,0x09,0x23,0x0d,0xf1,0xd7,0xbc,0xa1,0x86,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe7,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xe9,0xc1, + 0x97,0x81,0x81,0x81,0x81,0x81,0x9c,0xb7,0xd2,0xed,0x09,0x23,0x0d,0xf1,0xd7,0xb8, + 0x93,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xfc,0xf7,0xeb,0xd5,0xb9,0x99,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x13,0xe8,0xfc,0x24,0xfc,0xd5,0xfb,0x26,0xfc,0xdf,0x0b,0x11, + 0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xe7,0xf6,0x21,0xfc,0xe7,0xe7,0x04,0x1c,0xf2,0xe7,0xe7,0xd0,0xa9,0x81,0x81, + 0x81,0x81,0x83,0x9d,0xb3,0xc6,0xe4,0x0e,0x0f,0x06,0x19,0x25,0x09,0xe7,0xc2,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa0,0xc4,0xe7,0x0b,0x18,0xf4,0xf7,0x0b,0x13,0x0d,0xf9, + 0xdd,0xba,0x95,0x81,0x89,0xb2,0xd9,0xff,0x24,0x0b,0xea,0xf7,0x1a,0x1e,0xfc,0xe5, + 0x0e,0x1e,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x99,0xa7,0xa3,0xbf, + 0xe7,0xf5,0xf4,0xd1,0xa7,0xa8,0xa0,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x26,0x26, + 0x26,0x26,0x36,0x26,0x26,0x26,0x26,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8e,0x93,0x90,0x82,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29, + 0x29,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x85,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1d,0x09,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0x13,0x19,0x09,0x21,0x12,0xf9,0xdf,0xc6,0xea,0x16,0x19,0xed,0xc3, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdf,0xff,0x1d,0x12,0xf3,0xd3,0xb1, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xdc,0xe2,0xe2,0xe5,0xee,0xff,0x1c,0x16, + 0xf1,0xcd,0xa5,0x81,0x8a,0xae,0xd2,0xf5,0x19,0x0d,0xe9,0xca,0xca,0xda,0x06,0x29, + 0xfc,0xd2,0xca,0xc7,0xae,0x8b,0x81,0x81,0xa4,0xc4,0xd0,0xd0,0xd0,0xd0,0xd5,0xe1, + 0xf9,0x1d,0x1a,0xf2,0xc9,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xd6,0xc9,0xc2, + 0xcc,0xe8,0x0f,0x24,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5, + 0x1b,0x13,0xed,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0xa6,0xcb,0xee,0x0d,0x25,0x0b, + 0xf3,0xf1,0x05,0x1d,0x1d,0xff,0xdd,0xb8,0x92,0x81,0x81,0x91,0xb3,0xd2,0xee,0x04, + 0x0e,0x13,0x11,0x0a,0xfc,0x06,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8e,0x9f,0xa8, + 0xa6,0x9a,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa1,0xa8,0xa5,0x98,0x82,0x81, + 0x81,0x93,0xbd,0xe7,0x0c,0x27,0x0e,0xee,0xd4,0xb9,0x9d,0x83,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xc9,0xb0, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb2,0xcd,0xe8,0x06,0x2c,0x11,0xef,0xc5, + 0x9b,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xcd,0xc3,0xb2,0x99,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0x11,0x0e,0xe2,0x06,0x1e,0xf5,0xd7,0x04,0x20,0xf5,0xe2,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x23,0x06,0xda,0xb0,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x13,0x28,0x13,0x13,0x13,0x14,0x22,0x13,0x13,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x81,0x83,0x84,0x96,0xc0,0xea,0x13,0x0b,0xdf,0xf5,0x16,0x20,0xf9,0xd1,0xa7, + 0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xfc,0x22,0xff,0xf3,0x16,0x10,0x04,0x11,0x18, + 0xf4,0xcd,0xa5,0x81,0x92,0xbc,0xe6,0x0f,0x1f,0xf7,0xd1,0xde,0xff,0x20,0x18,0xf6, + 0x15,0x16,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0x29,0x04,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x88,0xac, + 0xc6,0xca,0xca,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x26,0x06,0xfa,0xfa,0xfa,0xfa,0xf3,0xca,0xa0,0x81,0x81,0x81,0x81,0x89, + 0xa4,0xb7,0xbd,0xb9,0xa8,0x90,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81,0x99,0xad,0xb8,0xb7,0xab,0x96,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb8,0xdf,0x06,0x1f,0xf7,0xd1,0xaa,0x83,0x81,0x81,0x81,0x81,0x81, + 0x91,0xba,0xe5,0x0f,0x33,0x22,0x09,0xf0,0xd7,0xbd,0xc6,0xef,0x19,0x13,0xe9,0xbf, + 0x95,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1c,0x14,0xf5,0xd6,0xb8,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb5,0xb8,0xb8,0xbb,0xc6,0xe1,0x06,0x2b, + 0x04,0xd8,0xaf,0x85,0x95,0xbf,0xe8,0x0d,0x1a,0xf5,0xf5,0xf5,0xf5,0xf5,0x06,0x29, + 0xfc,0xf5,0xf5,0xe9,0xc1,0x97,0x81,0x81,0x88,0x9e,0xa5,0xa5,0xa5,0xa5,0xab,0xbf, + 0xe6,0x0f,0x24,0xfa,0xd0,0xa5,0x81,0x95,0xbf,0xe8,0x13,0x1e,0xf2,0xc8,0xa0,0x98, + 0xb1,0xda,0x05,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09, + 0x27,0xff,0xda,0xb4,0x8e,0x81,0x81,0x81,0x81,0x8d,0xb6,0xde,0x05,0x29,0x09,0xe8, + 0xcf,0xcb,0xe3,0xff,0x20,0x17,0xef,0xc8,0x9f,0x81,0x81,0x81,0x96,0xb3,0xc9,0xdb, + 0xe5,0xe7,0xe7,0xe1,0xe2,0x0b,0x1e,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x90,0xa2,0xab, + 0xa9,0x9b,0x87,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb7,0xbd,0xb8,0xa8,0x90,0x81, + 0x81,0x8a,0xb0,0xd0,0xeb,0x07,0x21,0x0f,0xf3,0xd9,0xbe,0xa3,0x88,0x81,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xeb,0xc2, + 0x98,0x81,0x81,0x81,0x81,0x82,0x9d,0xb8,0xd3,0xee,0x09,0x23,0x0c,0xf0,0xd5,0xb7, + 0x92,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x1b,0xef,0xc5,0x9b,0x8c,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x0a,0xdf,0x0b,0x19,0xef,0xde,0x09,0x19,0xef,0xe7,0x11,0x09, + 0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x04,0x04,0x04,0x21,0x04,0x04,0x04,0x0c,0x14,0x04,0x04,0x04,0xd7,0xad,0x83,0x81, + 0x81,0x99,0xad,0xad,0xa1,0xc5,0xef,0x19,0x05,0xda,0xdf,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x87,0xab,0xce,0xf1,0x15,0x0d,0xe9,0x04,0x1e,0xf5,0xd8,0xf7,0x1f, + 0xff,0xd7,0xad,0x84,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc3,0xe4,0x06,0x27,0x12, + 0x21,0x0b,0xe2,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xaf,0xd9,0x04,0x29,0xff,0xd5,0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x9d,0xa0,0xa0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0, + 0xd0,0xfa,0x26,0x06,0xda,0xd0,0xd0,0xd0,0xce,0xb7,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xc5,0xdf,0xe7,0xe1,0xcc,0xae,0x8c,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x9b,0xb9,0xd3,0xe2,0xe0,0xd1,0xb6,0x97,0x81,0x81, + 0x81,0x81,0xa1,0xc8,0xef,0x17,0x0f,0xe7,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x07,0x2b,0xff,0xe7,0xce,0xb5,0xab,0xd2,0xfa,0x23,0x0b,0xe1,0xb8, + 0x8e,0x81,0x81,0x81,0x8d,0x95,0x95,0xad,0xd7,0x04,0x2e,0x09,0xdd,0xb2,0x95,0x94, + 0x86,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x1d,0x14,0xf5,0xd7,0xb9,0x9b,0x98, + 0x96,0x87,0x81,0x81,0x81,0x81,0x90,0x92,0x8d,0x8d,0x8d,0x91,0xac,0xd5,0xff,0x2b, + 0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x21,0x21,0x21,0x21,0x21,0x21,0x34, + 0x21,0x21,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x93,0x94,0x8d,0x89,0x8a,0x96,0xbb, + 0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x90,0xba,0xe4,0x0e,0x21,0xf7,0xcf,0xa6,0x87, + 0xb0,0xda,0x04,0x2c,0x04,0xd7,0xad,0x83,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b, + 0x14,0xee,0xc8,0xa2,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe8,0x13,0x1f,0xf5,0xce, + 0xad,0xa7,0xc3,0xe7,0x11,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x90,0xa4,0xb2, + 0xba,0xbd,0xbd,0xce,0xf1,0x18,0x11,0xe9,0xc1,0x98,0x81,0x81,0x94,0xb2,0xc9,0xd5, + 0xd2,0xc1,0xa7,0x88,0x81,0x81,0x81,0x81,0xa5,0xc5,0xde,0xe7,0xe1,0xcc,0xae,0x8b, + 0x81,0x81,0x94,0xb0,0xcb,0xe6,0xff,0x1c,0x14,0xf9,0xdf,0xc3,0xa8,0x8d,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x88,0xa3,0xbd,0xd9,0xf3,0x0f,0x21,0x07,0xec,0xd0,0xb5,0x9a, + 0x81,0x81,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xee,0xc5,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0e,0x19,0xed,0xe5,0x0e,0x13,0xea,0xee,0x18,0xff, + 0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xc7,0xe0,0xea,0xe2,0xca,0xaa,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb4,0xd2, + 0xd7,0xd9,0x04,0x1b,0xf2,0xd7,0xe5,0x11,0x11,0xe5,0xd7,0xd7,0xc7,0xa4,0x81,0x81, + 0x8f,0xb5,0xd4,0xd6,0xca,0xca,0xf5,0x1f,0xff,0xd5,0xe6,0x0d,0x25,0xfc,0xd2,0xa9, + 0x81,0x81,0x81,0x9e,0xc2,0xe5,0x09,0x19,0xf5,0xdd,0x09,0x19,0xed,0xc5,0xef,0x1b, + 0x06,0xda,0xb0,0x85,0x95,0xbf,0xe9,0x13,0x1f,0xf6,0xd0,0xb6,0xca,0xec,0x0d,0x2d, + 0x20,0xfb,0xd4,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb6,0xdf,0x09,0x25,0xfc,0xd3,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb9,0xe1,0x0b,0x21,0xf7,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0xa5,0xa5,0xa4,0x96,0x81,0x81,0x81,0x81,0x90,0xb9, + 0xdf,0xff,0x13,0x07,0xea,0xc6,0x9f,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa5,0x93,0x81,0x8a,0xb1,0xd6,0xf5,0x0b,0x0a,0xf1,0xd2,0xac,0x85,0x81, + 0x81,0x8b,0xb2,0xd9,0xff,0x25,0xfc,0xd7,0xb0,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0xab,0xd3,0xfb,0x23,0x0e,0xe8,0xc5,0xb3,0xc3,0xe4,0x0a,0x25,0xfc,0xd6,0xad, + 0x85,0x81,0x81,0x95,0xb2,0xc0,0xc0,0xc0,0xd7,0x04,0x2e,0x09,0xdd,0xc0,0xc0,0xbd, + 0xa8,0x88,0x81,0x83,0xa5,0xc3,0xe1,0xff,0x1d,0x12,0xf3,0xd7,0xc2,0xc2,0xc2,0xc2, + 0xbf,0xa9,0x87,0x81,0x82,0xa3,0xb9,0xbc,0xb7,0xb3,0xb2,0xb7,0xc5,0xe2,0x09,0x26, + 0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0x29, + 0xff,0xff,0xff,0xed,0xc2,0x98,0x81,0x83,0xa5,0xbc,0xbd,0xb7,0xb3,0xb4,0xbc,0xd1, + 0xf1,0x18,0x18,0xf1,0xc8,0x9f,0x81,0x89,0xb3,0xdc,0x05,0x2b,0x04,0xdc,0xba,0xb1, + 0xc1,0xe5,0x0c,0x22,0xfa,0xd1,0xa8,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x28, + 0x04,0xdc,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf5,0xcd, + 0xb6,0xb4,0xc0,0xe4,0x0e,0x23,0xfa,0xd0,0xa5,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xbd,0xc5,0xd4,0xeb,0x09,0x22,0xfc,0xd9,0xb2,0x8b,0x81,0x87,0xad,0xd0,0xee,0xff, + 0xfa,0xe3,0xc3,0x9f,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x07,0xe9,0xc5,0x9f, + 0x81,0x81,0x81,0x8f,0xaa,0xc5,0xe1,0xfb,0x17,0x1a,0xff,0xe4,0xc8,0xae,0x93,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xec,0xc2, + 0x98,0x81,0x81,0x8d,0xa8,0xc3,0xde,0xf9,0x14,0x1c,0xff,0xe6,0xcb,0xb0,0x94,0x81, + 0x81,0x81,0x81,0x8f,0xb3,0xd2,0xe7,0xea,0xda,0xbd,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x09,0xe2,0x0b,0x19,0xef,0xf3,0x18,0x13,0xe7,0xfa,0x1f,0xf6, + 0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xe0,0x04,0x16,0x07,0xe5,0xbe,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xaa, + 0xb3,0xdd,0x09,0x19,0xed,0xc3,0xea,0x13,0x0b,0xe1,0xb7,0xad,0xa4,0x8b,0x81,0x81, + 0x95,0xc0,0xea,0xfc,0xf3,0xed,0xfa,0x23,0xfa,0xf2,0x04,0x21,0x13,0xee,0xc8,0x9f, + 0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0x04,0xdf,0xdb,0x06,0x1c,0xf2,0xd3,0xf6,0x1f, + 0xff,0xd7,0xad,0x84,0x8e,0xb8,0xe0,0x07,0x2d,0x0b,0xee,0xdf,0xdf,0xed,0x05,0x28, + 0x24,0x04,0xe2,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0xad,0xd6,0xfc,0x26,0x09,0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc5,0xed,0x15,0x16,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x15,0x3c,0x24,0xfc,0xd5,0xac,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7,0x0f,0x32,0x2e,0x0b,0xe2,0xb9,0x8f,0x81, + 0x81,0x9b,0xc2,0xe9,0x11,0x14,0xee,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc5,0xeb,0x11,0x22,0xff,0xe8,0xdd,0xe6,0xff,0x1f,0x10,0xec,0xc6,0x9f, + 0x81,0x81,0x81,0xa8,0xcf,0xea,0xea,0xea,0xea,0x04,0x2e,0x09,0xea,0xea,0xea,0xe4, + 0xc1,0x98,0x81,0x93,0xbc,0xe1,0xff,0x1d,0x12,0xf3,0xed,0xed,0xed,0xed,0xed,0xed, + 0xe4,0xbf,0x96,0x81,0x92,0xbb,0xdf,0xe6,0xe1,0xdd,0xdd,0xe1,0xec,0xff,0x1d,0x12, + 0xed,0xc7,0xa0,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xda,0x06,0x29, + 0xfc,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x93,0xbc,0xe1,0xe7,0xe0,0xdd,0xdd,0xe4,0xf4, + 0x0d,0x25,0x04,0xe0,0xba,0x93,0x81,0x81,0xa7,0xce,0xf5,0x1b,0x16,0xf5,0xe0,0xda, + 0xe5,0xfc,0x1e,0x10,0xeb,0xc4,0x9d,0x81,0x81,0x81,0x84,0xaa,0xcf,0xf5,0x1b,0x17, + 0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0c,0x2b,0x09,0xed, + 0xdf,0xdd,0xe6,0xfb,0x1d,0x17,0xef,0xc8,0x9f,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe7,0xee,0xfa,0x0d,0x25,0x09,0xe7,0xc5,0xa0,0x81,0x81,0x94,0xbd,0xe5,0x0c,0x28, + 0x1f,0xfc,0xd6,0xad,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x3c,0x24,0xfc,0xd5,0xac, + 0x82,0x81,0x81,0x81,0x8a,0xa5,0xc0,0xdb,0xf6,0x12,0x1f,0x05,0xe9,0xce,0xb2,0x8f, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcc,0xb1, + 0x8d,0x81,0x88,0xac,0xc8,0xe3,0xff,0x1a,0x18,0xfb,0xe1,0xc5,0xaa,0x8f,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xee,0x0d,0x13,0xf9,0xd4,0xad,0x84,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0b,0xdf,0x05,0x21,0xfc,0x0b,0xff,0x19,0xfa,0x0f,0x0d,0xe7, + 0xc0,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x3e,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb8,0xe2,0x0b,0x13,0xe9,0xc4,0xed,0x19,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1d,0x18,0x16,0x2a,0x16,0x1c,0x25,0x12,0xf7,0xd9,0xb5,0x8f, + 0x81,0x85,0xa9,0xcd,0xf0,0x13,0x0f,0xec,0xc8,0xd2,0xf9,0x1d,0x0b,0xfc,0x0f,0x17, + 0xf1,0xcc,0xa4,0x81,0x82,0xa9,0xcf,0xf3,0x14,0x29,0x14,0x09,0x09,0x14,0x24,0x0c, + 0x1a,0x1d,0xfc,0xdb,0xbb,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xf1,0x18,0x17,0xef,0xc9,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd5,0xfc,0x24,0x07,0xe0,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbc, + 0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x39,0x35,0x0e,0xe5,0xba,0x90,0x81, + 0x85,0xac,0xd3,0xfa,0x21,0x05,0xde,0xb6,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xb2,0xd6,0xf7,0x17,0x22,0x0f,0x09,0x0e,0x20,0x16,0xf7,0xd5,0xb2,0x8d, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x16,0x16,0x16,0x16,0x33,0x18,0x16,0x16,0x16,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x39,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0b,0x14,0x24,0x11,0xf5, + 0xd6,0xb4,0x8e,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xb0,0xda,0x06,0x29, + 0xfc,0xd2,0xab,0xa8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0x09,0x09,0x0e,0x1a, + 0x1d,0x05,0xe8,0xc8,0xa6,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x21,0x18,0x09,0x06, + 0x0c,0x1e,0x14,0xf6,0xd5,0xb2,0x8c,0x81,0x81,0x81,0x97,0xbc,0xe2,0x09,0x2a,0x04, + 0xde,0xb8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd3,0xf7,0x16,0x27,0x14, + 0x0b,0x09,0x0e,0x1e,0x1a,0xfc,0xdc,0xb8,0x92,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x13,0x18,0x23,0x18,0x04,0xea,0xcc,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x14,0x3c, + 0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x93,0xbc,0xe5,0x0a,0x2b,0x30,0x06,0xda,0xb1, + 0x87,0x81,0x81,0x81,0x81,0x85,0x9f,0xbb,0xd5,0xf1,0x0d,0x25,0x0b,0xee,0xc6,0x9d, + 0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0x92, + 0x81,0x81,0x95,0xbf,0xe7,0x05,0x1f,0x12,0xf6,0xdb,0xc0,0xa5,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xd0,0xfa,0x26,0x32,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe5,0x0e,0x0f,0xe5,0xf3,0x11,0x1b,0x0b,0xf1,0x12,0x1b,0x0f,0xf3,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xe1,0x05,0x19,0x09,0xe6,0xbf,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xbb,0xe5,0x11,0x0f,0xe5,0xc8,0xf2,0x11,0x04,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe8,0xfc,0x06,0x0b,0x11,0x1c,0x0e,0x09,0xfc,0xed,0xd7,0xbb,0x9d,0x81, + 0x81,0x92,0xbb,0xe3,0x07,0x11,0xf7,0xd4,0xb1,0xc0,0xe3,0xff,0x13,0x19,0x0f,0xf9, + 0xdb,0xb9,0x93,0x81,0x81,0x95,0xb7,0xd7,0xf1,0x07,0x13,0x19,0x16,0x0e,0xff,0xe9, + 0xff,0x11,0x11,0xf5,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xb9,0xe0,0x06,0x28,0x04,0xdd,0xb8,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc4,0xe8,0x0f,0x1d,0xf6,0xd0,0xa9,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4, + 0xcd,0xf1,0xf2,0xf2,0xd7,0xaf,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac, + 0xce,0xf1,0x17,0x2f,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xdb,0xfc,0x15,0x13,0xf9,0xd6,0xb1,0x89,0x81, + 0x95,0xbc,0xe3,0x0a,0x1b,0xf4,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x09,0x14,0x19,0x14,0x09,0xf3,0xd9,0xbb,0x9b,0x81, + 0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x16,0x19,0x19,0x14,0x0c,0xff,0xed,0xd5, + 0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x19,0x19,0x12,0x07, + 0xf7,0xe3,0xca,0xac,0x8d,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0e,0x16,0x19, + 0x12,0x05,0xf1,0xd8,0xbb,0x9a,0x81,0x81,0x81,0x81,0xa4,0xce,0xf5,0x11,0x11,0xf1, + 0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf3,0x06,0x12, + 0x18,0x19,0x13,0x09,0xf6,0xdf,0xc3,0xa1,0x81,0x81,0x81,0x98,0xc2,0xed,0x11,0x11, + 0x0e,0x09,0xff,0xf1,0xdf,0xc8,0xae,0x90,0x81,0x81,0x81,0x8f,0xb8,0xde,0xff,0x16, + 0x10,0xf3,0xcf,0xa9,0x81,0x81,0x81,0x86,0xac,0xcf,0xf1,0x16,0x2f,0x06,0xda,0xb0, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb6,0xd0,0xec,0x07,0xff,0xe1,0xc0,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x91,0xb9,0xdb,0xf9,0x0d,0xf1,0xd5,0xbb,0x9f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc9,0xf0,0x0f,0x15,0xfb,0xd6,0xae,0x85,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xde,0x09,0x17,0xed,0xd5,0xeb,0xef,0xe6,0xd7,0xeb,0xef,0xe8,0xd4,0xb8, + 0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8,0xc8,0xe2,0xed,0xe5,0xcc,0xac,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xd7,0xc1,0xe1,0xe5,0xe5,0xcd,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xc9,0xd4,0xdc,0xe2,0x0b,0x13,0xe9,0xde,0xd5,0xc7,0xb4,0x9c,0x81,0x81, + 0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbd,0x99,0xa7,0xc5,0xdb,0xea,0xed,0xe7,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x9b,0xb7,0xce,0xdf,0xea,0xed,0xec,0xe4,0xd8,0xc5, + 0xe2,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa8,0xcd,0xf3,0x18,0x17,0xf3,0xd0,0xae,0x8c,0x81,0x81,0x81,0x81,0x97, + 0xb9,0xdb,0xff,0x22,0x09,0xe3,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xb5,0xc7,0xc8,0xc8,0xbc,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb5, + 0xc3,0xe7,0x13,0x24,0xfb,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xdc,0xec,0xeb,0xda,0xbd,0x9d,0x81,0x81, + 0xa6,0xcd,0xf3,0x1a,0x0b,0xe3,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xea,0xed,0xea,0xe0,0xcf,0xb9,0x9d,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe7,0xea,0xed,0xed,0xea,0xe3,0xd7,0xc7,0xb3, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7, + 0xe7,0xcc,0xa4,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe7,0xed,0xed,0xed,0xe8,0xdf, + 0xd2,0xbf,0xa8,0x8e,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc3,0xd8,0xe5,0xec,0xed, + 0xe8,0xde,0xcd,0xb7,0x9d,0x81,0x81,0x81,0x81,0x81,0xa1,0xc8,0xe4,0xe5,0xe5,0xdb, + 0xb9,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb9,0xce,0xde,0xe7, + 0xed,0xed,0xe9,0xe0,0xd1,0xbd,0xa4,0x87,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xe2,0xdf,0xd6,0xca,0xba,0xa5,0x8d,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xdf,0xed, + 0xe9,0xd5,0xb8,0x96,0x81,0x81,0x9b,0xaf,0xb5,0xc3,0xe7,0x11,0x24,0xfc,0xd3,0xaa, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb0,0xcb,0xe6,0xe1,0xc3,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xbd,0xdb,0xeb,0xd0,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xb5,0xd4,0xe9,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd5,0xfc,0x22,0xfa,0xd3,0xc2,0xc5,0xbf,0xb3,0xc2,0xc5,0xc0,0xaf,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbc,0xc2,0xbd,0xac,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xb6,0xba,0xba,0xb4,0xa6,0xb9,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xab,0xbd,0xe7,0x11,0x0e,0xe2,0xb9,0xac,0x9f,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x89,0xa2,0xb5,0xc0,0xc2,0xbf,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa8,0xb7,0xc0,0xc2,0xc2,0xbb,0xb0,0xa8, + 0xb9,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xb9,0xdd,0xff,0x23,0x0b,0xe8,0xc8,0xa9,0x89,0x81,0x81,0x94,0xb2, + 0xd3,0xf3,0x16,0x14,0xf1,0xce,0xaa,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0x9d,0x9d,0x9d,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdf, + 0xe8,0xff,0x20,0x0f,0xeb,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb6,0xc2,0xc2,0xb4,0x9f,0x81,0x81,0x8e, + 0xb6,0xdc,0x04,0x21,0xfa,0xd3,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xab,0xb9,0xc1,0xc2,0xc0,0xb8,0xaa,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xbd,0xc1,0xc2,0xc2,0xc0,0xba,0xaf,0xa1,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd, + 0xbd,0xaf,0x91,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xbe,0xc2,0xc2,0xc2,0xbf,0xb6, + 0xa9,0x99,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc,0xc2,0xc2, + 0xbf,0xb6,0xa7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xab,0xba,0xba,0xba,0xb6, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xa8,0xb6,0xbf, + 0xc2,0xc2,0xbf,0xb7,0xaa,0x98,0x82,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xba,0xba, + 0xb9,0xb5,0xad,0xa2,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa4,0xb9,0xc2, + 0xc0,0xb2,0x9a,0x81,0x81,0x90,0xb6,0xd6,0xdf,0xe8,0xff,0x1f,0x0f,0xeb,0xc5,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xaa,0xc0,0xbd,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xc2,0xb0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb1,0xc0,0xc2,0xb6,0xa1,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xef,0x17,0x0d,0xe9,0xca,0xb6,0xb4,0xbb,0xc8,0xd9,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x93,0x98,0x94,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x90,0x90,0x8c,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xc2,0xed,0x06,0x06,0xdd,0xb4,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x8d,0x97,0x98,0x95,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x95,0x98,0x98,0x92,0x88,0x84, + 0x8f,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa2,0xc5,0xe8,0x09,0x25,0x05,0xe4,0xc5,0xa2,0x81,0x8c,0xb1,0xd0, + 0xee,0x0f,0x1c,0xfb,0xd9,0xb7,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98,0x98,0x8e,0x81,0x81,0x81,0x92, + 0xbd,0xe7,0xfa,0xfa,0xe9,0xc3,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x97,0x98,0x96,0x8f,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x93,0x97,0x98,0x98,0x95,0x90,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x93,0x93, + 0x93,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x94,0x98,0x98,0x98,0x95,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x92,0x98,0x98, + 0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95, + 0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8f,0x8b,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0x98, + 0x97,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x11,0x21,0x0f,0xf3,0xd4,0xb2,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x97,0x95,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0x98,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x97,0x98,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0x04,0x25,0x05,0xed,0xdf,0xdd,0xe4,0xef,0xff,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb7,0xd5,0xda,0xda,0xcc,0xaa,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xac,0xce,0xee,0x0d,0x21,0xff,0xd7,0xad,0x83,0x95,0xc0,0xea, + 0x0d,0x1f,0xff,0xe1,0xc0,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88, + 0xad,0xc9,0xd0,0xd0,0xcb,0xaf,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x0b,0xfc,0xec,0xd4,0xb8,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xc8,0xe8,0x07,0x1f,0x13,0x09,0x09,0x0e,0x18,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xad,0xb0,0xb0,0xa8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xb2,0xd2,0xf0,0x05,0xe6,0xc8,0xa5,0x81,0x8f,0xb5,0xd5, + 0xf3,0xff,0xe3,0xc5,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xa2,0xa5,0xa5,0xa2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe0,0xd6,0xc6,0xb2,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xac,0xca,0xe5,0xf7,0x06,0x0b,0x0b,0x05,0xfa,0xec,0xd7,0xb3,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x9a,0xb8, + 0xd5,0xe0,0xc5,0xa7,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xb7,0xae,0xa0,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1,0xdc,0xdf,0xdf,0xda,0xd2,0xc5,0xb5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x9a, + 0xb2,0xb7,0xa6,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x8d,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9a,0xa9,0xb2,0xb5,0xb5,0xb1,0xa9,0x9d,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x89,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81, + 0x81,0x81,0x89,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x98,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x96,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x88,0x88,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81, + 0x81,0x9d,0xb2,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xa8,0xc1,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xbe,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa6,0xab,0xab,0xab,0xa8,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0, + 0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f, + 0x95,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa2,0x8c,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x97,0xa4,0xad,0xb2, + 0xb2,0xb0,0xab,0xa1,0x94,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x83,0x9c,0xa8,0xa8,0xa8,0xa0,0x89,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x8c,0xa2,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa7,0x97,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x9b,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa9,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa4,0x8f, + 0x81,0x89,0xa0,0xa8,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8, + 0xa1,0x8a,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xa2,0xad,0xb2,0xb2,0xaf,0xa5,0x95,0x82,0x81,0x81,0x81,0x81,0x81,0x95,0xa8, + 0xab,0xab,0xab,0xab,0xab,0xa8,0xa3,0x99,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0x9f,0xaa,0xb0,0xb0,0xac,0xa2,0x94,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x9f,0x93,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9e,0xa9,0xb0,0xb2,0xb2,0xaf,0xa9,0xa1,0x94, + 0x81,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa7,0x97,0x81,0x81,0x81,0x95,0xa8,0xab,0xab,0xa8,0x96,0x81,0x81,0x85,0x9f, + 0xaa,0xab,0xab,0xa2,0x8b,0x81,0x81,0x93,0xa7,0xab,0xab,0xaa,0x9e,0x83,0x81,0x81, + 0x81,0x81,0x96,0xa8,0xab,0xab,0xa9,0x98,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa3, + 0x8e,0x81,0x81,0x81,0x87,0x9f,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x87,0x9f,0xa8, + 0xa8,0xa8,0xa4,0x91,0x81,0x81,0x81,0x94,0xa6,0xa8,0xa8,0xa7,0x9a,0x81,0x81,0x81, + 0x95,0xa8,0xab,0xab,0xab,0xa1,0x89,0x81,0x81,0x81,0x81,0x99,0xa9,0xab,0xab,0xaa, + 0x9b,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0x9c,0x83,0x81,0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c, + 0x90,0xb8,0xd9,0xdf,0xdf,0xd7,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe4,0xef,0xef,0xef,0xef,0xef,0xef,0xde,0xb6,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x8c,0xa3,0xab,0xab,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xcd,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc1,0xb1, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xad,0xc0,0xce,0xd7,0xda,0xda, + 0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xc8, + 0xbd,0xad,0x9a,0x82,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xc8,0xa8,0x82,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x81,0x81,0x81,0x81,0x94,0xab,0xbe,0xcd,0xd7,0xdd, + 0xdd,0xda,0xd4,0xc9,0xba,0xa3,0x82,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x9c,0xbf,0xd2,0xd2,0xd2,0xc4,0xa3,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x82,0xa8,0xc8,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd2,0xd2,0xd2,0xd0,0xb7,0x93,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x9c,0xbd,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd2,0xb7, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xcb,0xac, + 0x87,0xa3,0xc4,0xd2,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2, + 0xc6,0xa7,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x81,0x81,0x81,0x88,0xa2, + 0xb9,0xca,0xd6,0xdd,0xdd,0xd7,0xcd,0xbb,0xa6,0x8b,0x81,0x81,0x81,0x8d,0xb2,0xcf, + 0xd5,0xd5,0xd5,0xd5,0xd5,0xd2,0xcc,0xc1,0xb1,0x9c,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xa0,0xb6,0xc8,0xd4,0xda,0xda,0xd5,0xcb,0xba,0xa4,0x8a,0x81,0x81,0x81, + 0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd0,0xc8,0xba,0xa8,0x90,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9e,0xb4,0xc6,0xd2,0xda,0xdd,0xdd,0xd9,0xd2,0xcb,0xb7, + 0x96,0x81,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xd0,0xb7,0x93,0x81,0x8d,0xb2,0xcf,0xd5,0xd5,0xd1,0xb5,0x8f,0x81,0x9e,0xc1, + 0xd5,0xd5,0xd5,0xc6,0xa5,0x81,0x8a,0xb0,0xce,0xd5,0xd5,0xd4,0xbf,0x9c,0x81,0x81, + 0x81,0x91,0xb5,0xd1,0xd5,0xd5,0xd2,0xb7,0x92,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xc9, + 0xaa,0x84,0x81,0x81,0xa1,0xc3,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0xa1,0xc3,0xd2, + 0xd2,0xd2,0xcc,0xaf,0x8b,0x81,0x91,0xb4,0xce,0xd2,0xd2,0xd1,0xbb,0x98,0x81,0x8d, + 0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xa2,0x81,0x81,0x81,0x94,0xb9,0xd2,0xd5,0xd5,0xd3, + 0xbb,0x97,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd2,0xbf,0x9c,0x81,0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d, + 0x95,0xbf,0xe8,0x0b,0x0b,0xee,0xc8,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x1b,0x1b,0x1b,0x1b,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x83,0xa8,0xc8,0xd5,0xd5,0xcf,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe7,0xff,0xff,0xff,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xe9,0xd6, + 0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06, + 0xff,0xf7,0xea,0xd1,0xab,0x82,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf1, + 0xe5,0xd3,0xbd,0xa3,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xda,0xb0,0x85,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe3,0xf5,0xff,0x06, + 0x09,0x06,0xfc,0xf1,0xdf,0xbb,0x92,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0x81,0xa8,0xd2,0xfb,0xfc,0xfc,0xda,0xb0,0x85,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x98, + 0xb6,0xd7,0xf9,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xff,0xff,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xe6,0xbd, + 0x96,0xb4,0xdb,0xfc,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc, + 0xe0,0xb9,0x93,0xaa,0xd5,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x81,0x81,0x87,0xa7,0xc3, + 0xdd,0xf1,0xff,0x07,0x09,0xff,0xf4,0xe0,0xc7,0xaa,0x8a,0x81,0x81,0x95,0xc0,0xea, + 0xff,0xff,0xff,0xff,0xff,0xfc,0xf5,0xe9,0xd6,0xbe,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x85,0xa3,0xc1,0xdb,0xef,0xfc,0x05,0x06,0xff,0xf2,0xde,0xc5,0xa9,0x88,0x81,0x81, + 0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfa,0xf1,0xe1,0xcc,0xb0,0x91,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbf,0xd9,0xed,0xfb,0x04,0x09,0x09,0x04,0xfc,0xf3,0xce, + 0xa4,0x81,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xf1,0xc7,0x9d,0x81,0x95,0xc0,0xea,0xff,0xff,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0xff,0xff,0xda,0xb0,0x85,0x93,0xbd,0xe7,0xff,0xff,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x9e,0xc7,0xef,0xff,0xff,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x83,0xad,0xd7,0xfc, + 0xfc,0xfc,0xe9,0xc5,0xa1,0x83,0xa7,0xcb,0xef,0xfc,0xfc,0xf6,0xcd,0xa2,0x81,0x95, + 0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0x92,0x81,0x82,0xa8,0xcd,0xf3,0xff,0xff,0xf5, + 0xca,0xa0,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xff,0xff,0xff,0xff,0xe2,0xb8,0x8d, + 0x8a,0xb1,0xd8,0xff,0x26,0xff,0xd8,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x98,0xbd,0xe1,0xff,0xff,0xee,0xc9,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf4,0x1c,0x2b,0x21,0xf9,0xd1,0xa9,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x26,0x1e,0x0f,0xf9, + 0xdb,0xb8,0x92,0x81,0x81,0x81,0x81,0x97,0xb8,0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e, + 0x23,0x20,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x1a, + 0x0c,0xf7,0xde,0xc1,0xa0,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23, + 0x23,0x23,0x23,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23, + 0x23,0x23,0x06,0xda,0xb0,0x85,0x81,0x81,0x95,0xb6,0xd4,0xf1,0x0a,0x1d,0x27,0x1f, + 0x1e,0x21,0x26,0x16,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x1e,0xf2,0xc8,0x9d,0x81,0x8b,0xb5,0xdf,0x0b,0x26,0x26,0x26, + 0x26,0x26,0x29,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xaf, + 0xd0,0xf1,0x12,0x1d,0xfb,0xdb,0xba,0x94,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x29,0x1b,0xf4,0xcc, + 0xa4,0xc2,0xea,0x11,0x29,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x29,0x18, + 0xf1,0xcc,0xa5,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0xa0,0xc2,0xe3, + 0xff,0x17,0x25,0x1b,0x1c,0x26,0x1a,0x04,0xe6,0xc5,0xa2,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x29,0x21,0x21,0x21,0x24,0x1f,0x0f,0xf9,0xdd,0xbd,0x9a,0x81,0x81,0x81,0x81, + 0x9e,0xc0,0xdf,0xfc,0x14,0x25,0x1e,0x1e,0x28,0x19,0xff,0xe4,0xc4,0xa1,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x29,0x23,0x23,0x23,0x23,0x19,0x06,0xec,0xcc,0xa8,0x82, + 0x81,0x81,0x81,0x98,0xbc,0xdd,0xfb,0x13,0x24,0x1e,0x1b,0x1b,0x1f,0x26,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x23,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x23, + 0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x8d,0xb5,0xdd,0x06,0x2b,0x09,0xe1,0xb8,0x90,0x81, + 0x83,0xab,0xd3,0xfb,0x24,0x0d,0xe5,0xbd,0x95,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0xa5,0xc9,0xed, + 0x11,0x23,0xff,0xdb,0xb7,0x99,0xbd,0xe1,0x05,0x29,0x09,0xe5,0xc2,0x9c,0x81,0x8e, + 0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x81,0x97,0xbb,0xe1,0x07,0x2b,0x07,0xe2, + 0xbd,0x98,0x81,0x8d,0xb8,0xe2,0x0e,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xd5,0xd5,0xd5,0xcb,0xac,0x85, + 0x81,0xa1,0xc8,0xee,0x15,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x88, + 0xad,0xd2,0xf6,0x1b,0x20,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xb1,0xd9,0xff,0x27,0xff,0x28,0x06,0xde,0xb6,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xfc,0x0c,0x27,0x16, + 0xf1,0xca,0xa2,0x81,0x81,0x81,0x88,0xae,0xd2,0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3, + 0xfa,0x06,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x0b, + 0x20,0x1a,0xfc,0xdb,0xb7,0x92,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xf7,0xde,0xb5,0x8a,0x95,0xc0,0xea,0x16,0x1b,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x87,0xac,0xd0,0xf1,0x10,0x29,0x11,0xff,0xf5, + 0xf2,0xf7,0xff,0x0f,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xff, + 0x2b,0x06,0xf7,0xf7,0xf7,0xef,0xc7,0x9d,0x81,0x8b,0xb5,0xdf,0xfa,0xfa,0xfa,0xfa, + 0xfa,0xfa,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xca, + 0xea,0x0c,0x22,0xff,0xe1,0xc1,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x10,0x20,0x04,0xda, + 0xb3,0xd2,0xf9,0x20,0x0c,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x28,0x2a, + 0x04,0xde,0xb7,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xda,0xfc, + 0x1d,0x18,0xfc,0xf1,0xf2,0xff,0x18,0x21,0xff,0xdc,0xb6,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xf5,0xf5,0xf5,0xfb,0x0a,0x22,0x1a,0xf7,0xd3,0xad,0x86,0x81,0x81,0x8d, + 0xb3,0xd9,0xfb,0x1c,0x19,0xff,0xf4,0xf5,0xff,0x1a,0x20,0xff,0xdb,0xb5,0x8f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xf7,0xf7,0xf7,0xff,0x16,0x28,0x07,0xe1,0xba,0x92, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x19,0x1c,0x04,0xf5,0xef,0xf1,0xf5,0xfc,0xfa,0xd0, + 0xa5,0x81,0x81,0x95,0xbf,0xe8,0xf7,0xf7,0xf7,0xf7,0xff,0x2b,0x06,0xf7,0xf7,0xf7, + 0xf7,0xef,0xc7,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa8,0xd0,0xf7,0x20,0x15,0xed,0xc5,0x9d,0x81, + 0x90,0xb8,0xe0,0x09,0x28,0xff,0xd7,0xaf,0x87,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x8d,0x81,0x83,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x8f,0xb3,0xd7, + 0xfb,0x1f,0x15,0xf1,0xcd,0xaf,0xd3,0xf7,0x1b,0x16,0xf1,0xce,0xab,0x87,0x81,0x81, + 0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf,0xf5,0x1a,0x17,0xf1,0xcd, + 0xa8,0x84,0x81,0x8d,0xb8,0xe2,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1e,0x1a, + 0xf6,0xd1,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xab,0xab,0xa5,0x90,0x81, + 0x81,0x90,0xb8,0xde,0x06,0x20,0xf9,0xd2,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xa8,0xab,0xab,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x9e, + 0xc2,0xe7,0x0c,0x0f,0x07,0x19,0xf5,0xd1,0xad,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xbd,0xe7,0x0f,0x1a,0xf3,0x1b,0x14,0xec,0xc3,0x9a,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd,0xd4,0xea,0x0f,0x27, + 0xfc,0xd3,0xaa,0x81,0x81,0x81,0x9b,0xc1,0xe7,0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca, + 0xd1,0xde,0xef,0xd5,0xad,0x84,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xd6,0xe6, + 0xff,0x20,0x15,0xf1,0xcb,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xcd,0xc3,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xcd,0xcd,0xcd, + 0xcd,0xcd,0xcd,0xc0,0xa1,0x81,0x81,0x9a,0xc0,0xe6,0x0b,0x2b,0x0b,0xee,0xd8,0xcb, + 0xc8,0xcd,0xd9,0xe9,0xe4,0xbd,0x94,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x8a,0xae,0xc8,0xcd,0xcd,0xd5,0xff, + 0x2b,0x06,0xda,0xcd,0xcd,0xcb,0xb4,0x91,0x81,0x81,0xa7,0xc5,0xd0,0xd0,0xd0,0xd0, + 0xd0,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3,0xe3, + 0x05,0x26,0x07,0xe6,0xc6,0xa5,0x85,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x14,0x11,0xe8, + 0xc1,0xe0,0x09,0x19,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0x12, + 0x15,0xef,0xc9,0xab,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa0,0xc7,0xee,0x14, + 0x1e,0xfa,0xdb,0xc8,0xc8,0xdd,0xfb,0x20,0x15,0xef,0xc8,0x9f,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xca,0xcb,0xd2,0xe6,0x06,0x2b,0x0c,0xe4,0xbb,0x92,0x81,0x81,0x9e, + 0xc6,0xec,0x12,0x1f,0xfb,0xdd,0xca,0xcb,0xdf,0xfc,0x21,0x14,0xee,0xc7,0x9f,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcd,0xcf,0xdb,0xf7,0x1f,0x17,0xee,0xc5,0x9a, + 0x81,0x81,0x8b,0xb5,0xde,0x07,0x2a,0x04,0xdf,0xcc,0xc5,0xc7,0xcc,0xd4,0xda,0xc2, + 0x9d,0x81,0x81,0x8a,0xae,0xc8,0xcd,0xcd,0xcd,0xd5,0xff,0x2b,0x06,0xda,0xcd,0xcd, + 0xcd,0xcb,0xb4,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x9a,0xc3,0xeb,0x13,0x22,0xfa,0xd2,0xa9,0x81, + 0x9d,0xc5,0xed,0x15,0x19,0xf1,0xc9,0xa2,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0x9f,0xa0,0x9f,0xad,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x9c,0xc0, + 0xe4,0x09,0x2b,0x07,0xe3,0xc5,0xe9,0x0d,0x22,0xff,0xdb,0xb8,0x94,0x81,0x81,0x81, + 0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3,0x09,0x27,0x04,0xde,0xb9, + 0x94,0x81,0x81,0x84,0xaa,0xc9,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xe8,0x0c,0x25,0x04, + 0xdf,0xbc,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xce,0xf5,0x1c,0x09,0xe2,0xbb,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x8e,0xb2, + 0xd7,0xfb,0x1f,0xfa,0xf1,0x17,0x0b,0xe7,0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0e,0xe6,0x0f,0x20,0xf7,0xd0,0xa8,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3,0xb3,0xdd,0x09,0x2b, + 0xff,0xd5,0xab,0x81,0x81,0x81,0xa9,0xd2,0xf9,0x20,0x12,0xed,0xca,0xae,0x9f,0xa0, + 0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xad,0xc3, + 0xe6,0x0b,0x2a,0xff,0xd9,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa3, + 0xa3,0xa3,0xa3,0xa3,0x9d,0x88,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xa3,0xa3, + 0xa3,0xa3,0xa3,0x9b,0x85,0x81,0x81,0xa9,0xd1,0xf7,0x1f,0x15,0xf1,0xce,0xb3,0xa2, + 0x9d,0xa4,0xb2,0xc3,0xc1,0xa8,0x86,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x95,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8e,0xa0,0xa3,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0xa3,0xa1,0x93,0x81,0x81,0x81,0x8a,0x9f,0xa5,0xa5,0xa5,0xa5, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1f,0x0d,0xec,0xcb,0xaa,0x8a,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0x06,0x1f,0xf6, + 0xcf,0xef,0x17,0x0b,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xff, + 0x28,0xff,0xdb,0xb5,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x84,0xad,0xd6,0xfc,0x26, + 0x0c,0xe5,0xc0,0xa0,0xa1,0xc2,0xe7,0x0f,0x25,0xfc,0xd4,0xab,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa1,0xac,0xcc,0xf5,0x1e,0x16,0xec,0xc2,0x98,0x81,0x83,0xac, + 0xd4,0xfc,0x24,0x0c,0xe5,0xc1,0xa2,0xa4,0xc2,0xe8,0x0f,0x24,0xfc,0xd4,0xab,0x82, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa5,0xc2,0xeb,0x16,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x26,0xfa,0xd1,0xb0,0x9c,0x9d,0xa2,0xab,0xb0,0xa2, + 0x87,0x81,0x81,0x81,0x8e,0xa0,0xa3,0xa3,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0xa3, + 0xa3,0xa1,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x07,0xdf,0xb6,0x8e, + 0xa9,0xd2,0xfa,0x23,0x0c,0xe4,0xbc,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xb8,0xc9,0xca,0xc9,0xb4,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0xaa, + 0xce,0xf1,0x15,0x1d,0xf9,0xdb,0xff,0x23,0x0c,0xe8,0xc5,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7,0x1d,0x12,0xee,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x8e,0xa3,0xa8,0xa8,0xa8,0xa8,0xba,0xdd,0xff,0x23,0x0f,0xeb, + 0xc8,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbe,0xe5,0x0b,0x19,0xf2,0xcc,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0xa2,0xc7, + 0xec,0x11,0x0b,0xe6,0xdd,0xff,0x21,0xfc,0xd9,0xb4,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0xff,0xd9,0xff,0x2a,0x06,0xdd,0xb5,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbf,0xc8,0xe7,0x0e,0x21, + 0xf9,0xd0,0xa7,0x81,0x81,0x8b,0xb4,0xdd,0x06,0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81, + 0x81,0x92,0x9b,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x88,0xac, + 0xd4,0xfc,0x26,0x0e,0xe4,0xba,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbd, + 0xbd,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xa3,0x86,0x81,0x8b,0xb4,0xdd,0x06,0x2d,0x05,0xdd,0xb6,0xb1,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0, + 0xc0,0xc0,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf7,0x18, + 0x12,0xf1,0xd0,0xb0,0x90,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xf7,0x20,0x05, + 0xdd,0xfc,0x23,0xfb,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xf1, + 0x18,0x14,0xed,0xc7,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8d,0xb7,0xe0,0x0a,0x29, + 0xff,0xd6,0xae,0x86,0x89,0xb1,0xda,0x04,0x2c,0x06,0xdd,0xb3,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x8c,0xb6, + 0xdf,0x09,0x29,0xff,0xd6,0xae,0x87,0x8a,0xb2,0xda,0x04,0x2d,0x06,0xdd,0xb3,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb4,0xca,0xef,0x19,0x19,0xef,0xc5,0x9c, + 0x81,0x81,0x8c,0xb5,0xdf,0x09,0x2f,0x0b,0xec,0xd4,0xc2,0xb3,0xa2,0x91,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0xa8,0xd0,0xf7,0x20,0x14,0xec,0xc3,0x9b, + 0xb6,0xdf,0x07,0x27,0xff,0xd6,0xaf,0x86,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xc9,0xf0,0xf5,0xf0,0xcb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x94, + 0xb7,0xdb,0xff,0x23,0x0f,0xf1,0x15,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b,0x22,0xfc,0xd9,0xb4,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xae,0xd1,0xf4,0x18,0x1a,0xf6,0xd3, + 0xb0,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04,0xdc,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x93,0xb8,0xdc, + 0xff,0x1c,0xf6,0xd2,0xc8,0xed,0x12,0x12,0xee,0xca,0xa6,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1c,0xf4,0xcd,0xf5,0x1d,0x13,0xeb,0xc2,0x9a, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7,0xef,0x04,0x22,0x0b, + 0xe8,0xc2,0x9b,0x81,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa1, + 0xca,0xf5,0x1e,0x14,0xea,0xc0,0x95,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xdd,0xdd,0xdd, + 0xdd,0xdd,0xdc,0xc2,0x9c,0x81,0x92,0xbb,0xe5,0x0f,0x23,0xfa,0xd1,0xbb,0xd9,0xdd, + 0xdd,0xdd,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea,0xea, + 0xea,0xea,0xea,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x11,0x18, + 0xf7,0xd5,0xb6,0x95,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xe9,0x11,0x14, + 0xec,0x0d,0x13,0xec,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0x07,0x26,0xff,0xd9,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x21, + 0xf7,0xcd,0xa4,0x81,0x81,0xa8,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa7,0xb2,0xd0,0xf7,0x20,0x11,0xe7,0xbe,0x94,0x81,0x92,0xbc, + 0xe6,0x11,0x21,0xf7,0xcd,0xa4,0x81,0x81,0xa9,0xd2,0xfc,0x26,0x0d,0xe2,0xb8,0x8d, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xda,0xdd,0xeb,0x05,0x27,0x0a,0xe3,0xbc,0x93, + 0x81,0x81,0x82,0xaa,0xd2,0xf6,0x19,0x27,0x0f,0xfa,0xe9,0xda,0xc9,0xb8,0xa3,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9a,0xc3,0xeb,0x13,0x21,0xf7,0xd0,0xa8, + 0xc3,0xec,0x14,0x19,0xf1,0xc9,0xa1,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xd8,0xff,0x21,0x04,0xdb,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0d,0x25,0x0a,0x26,0x04,0xdf,0xbb,0x97,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f,0x0f,0xe9,0xc4,0x9f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0c,0x25,0x04,0xdf,0xbc, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x13,0xec,0xc5,0x9e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x82,0xa8,0xcd,0xf1, + 0x16,0x09,0xe2,0xbe,0xb3,0xd8,0xfc,0x21,0x04,0xe0,0xbb,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x0f,0xe7,0xc0,0xe8,0x11,0x1f,0xf7,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13,0x19,0x1a,0xff,0xeb, + 0xce,0xae,0x8f,0x81,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9d, + 0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x13, + 0x13,0x13,0x13,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1d,0x09,0x09,0x09,0x09, + 0x09,0x09,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x14,0x1e,0xf4,0xca,0xc5,0xef,0x09, + 0x09,0x09,0x09,0x09,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x2e,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x1e,0xfc, + 0xdb,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xff,0x21, + 0xf9,0x1a,0x04,0xdc,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xf5,0x1b,0x12,0xec,0xd5,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9f,0x81,0x81,0xa4,0xce,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd1,0xd9,0xec,0x0b,0x25,0xff,0xda,0xb3,0x8b,0x81,0x95,0xc0, + 0xea,0x14,0x1e,0xf2,0xc8,0x9f,0x81,0x81,0xa5,0xcf,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x19,0x06,0x06,0x09,0x11,0x24,0x0d,0xf0,0xcf,0xab,0x85, + 0x81,0x81,0x81,0x99,0xbc,0xdd,0xf9,0x12,0x25,0x20,0x11,0xff,0xef,0xdc,0xc6,0xaa, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8d,0xb5,0xdd,0x06,0x2e,0x06,0xdd,0xb4, + 0xd0,0xf7,0x21,0x0b,0xe3,0xbb,0x93,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xe7,0x0f,0x36,0x11,0xea,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xd3,0xf5,0x1a,0x33,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e,0xf9,0xd4,0xaf,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9,0xdc,0xff,0x23,0x0f,0xeb,0xc8,0xa4, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb4,0xda,0xff,0x24,0xfc,0xd5,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x91,0xba,0xe1,0x06, + 0x16,0xf3,0xce,0xaa,0x9e,0xc2,0xe7,0x0c,0x16,0xf5,0xd1,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xb0,0xd8,0xff,0x29,0x04,0xdb,0xb3,0xdc,0x04,0x2c,0x05,0xdc,0xb4, + 0x8c,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e,0x12,0x1e,0x1a,0x07, + 0xea,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x9b, + 0xc5,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x25,0x19,0x19,0x19,0x19, + 0x19,0x19,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xc5,0xef,0x16, + 0x16,0x16,0x1f,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1d,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0x0b,0x25,0x05, + 0xe3,0xc2,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xf1,0x19, + 0x0c,0x1b,0xf4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xe3,0x0a,0x24,0xfc,0xd7,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xff,0x11,0x26,0x0b,0xea,0xc8,0xa2,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90, + 0x81,0x95,0xc0,0xea,0x16,0x23,0x19,0x19,0x23,0x14,0xfc,0xea,0xd2,0xb4,0x94,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xbe,0xd8,0xed,0xff,0x0f,0x1f,0x28,0x15,0xff,0xe6,0xc8, + 0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0xa8,0xd0,0xf7,0x21,0x12,0xea,0xc2, + 0xdd,0x06,0x26,0xfc,0xd6,0xae,0x85,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0xf5,0x1e,0x0b,0x21,0xfa,0xd7,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xae,0xd1,0xf4,0x18,0x35,0x12,0xee,0xcb,0xa7,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a,0xe5,0xc0,0x9b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xad,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x8d, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xca,0xf1,0x18,0x0d,0xe6,0xbf,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x90,0xb9,0xdf,0xea, + 0xea,0xdf,0xba,0x95,0x89,0xad,0xd2,0xea,0xea,0xea,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbd,0xe6,0x0e,0x1f,0xf6,0xd0,0xd0,0xd0,0xf7,0x1f,0x12,0xea,0xc2, + 0x99,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2,0xe8,0xf6,0x10,0x27, + 0x05,0xdf,0xb7,0x8f,0x81,0x95,0xbf,0xe9,0x13,0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa0, + 0xca,0xf3,0x1e,0x14,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xed,0xed,0xed, + 0xed,0xed,0xeb,0xc9,0xa0,0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcb,0xc1,0xe4,0xea, + 0xea,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xf1,0x13,0x1e, + 0xfc,0xdb,0xba,0x99,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xe2,0x0a, + 0x31,0x0b,0xe4,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xd1,0xf7,0x1e,0x0f,0xe9,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe8,0x13,0x21, + 0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd1,0xfa,0x26,0x0e,0xe2,0xb8,0x8e,0x95,0xc0,0xea, + 0x16,0x2d,0x26,0x26,0x25,0x1f,0x14,0x04,0xeb,0xce,0xaf,0x8d,0x81,0x81,0x95,0xc0, + 0xea,0x13,0x21,0xf5,0xca,0xa1,0x81,0x81,0xa7,0xd0,0xfa,0x26,0x0e,0xe2,0xb8,0x8f, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xef,0xfc,0x1a,0x14,0xf1,0xcf,0xaa,0x85,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9d,0xb3,0xc7,0xd8,0xe8,0xf7,0x0a,0x1f,0x23,0x05,0xe2, + 0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1f,0xf6,0xce, + 0xea,0x12,0x19,0xf1,0xc8,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xe2, + 0x05,0x1d,0xf7,0x20,0x09,0xe1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc5,0xe8,0x0c,0x24,0x0c,0x28,0x05,0xe1,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4,0xd0,0xab,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x25,0x04,0xdf,0xbc,0x99,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xb9,0xe1,0x07,0x1e,0xf6,0xcf,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0xa3,0xbb,0xc0, + 0xc0,0xbb,0xa3,0x81,0x81,0x97,0xb4,0xc0,0xc0,0xc0,0xb2,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xcb,0xf3,0x1b,0x13,0xfa,0xfa,0xfa,0xfa,0xfa,0x13,0x1f,0xf6,0xce, + 0xa6,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xc0,0xd4,0xf7,0x1f, + 0x14,0xea,0xc1,0x97,0x81,0x91,0xba,0xe5,0x0e,0x26,0xfc,0xd4,0xab,0x84,0x81,0x81, + 0x81,0x81,0x88,0x82,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x85,0xab, + 0xd2,0xfb,0x24,0x0e,0xe4,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xb0,0x90,0x81,0x90,0xba,0xe4,0x0e,0x26,0xfc,0xd3,0xaa,0xbd,0xc0, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8, + 0xb8,0xb8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x8e,0x81,0x81,0x93, + 0xbd,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x1b, + 0x18,0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xd3,0xfa, + 0x11,0xfc,0xd5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbf,0xe6,0x0c,0x21,0xfa,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xba,0xe5,0x0f,0x24, + 0xfa,0xd1,0xa8,0x81,0x86,0xaf,0xd7,0xff,0x2b,0x09,0xdd,0xb4,0x8a,0x95,0xc0,0xea, + 0x16,0x19,0xfa,0xfa,0xfa,0xf5,0xec,0xdc,0xc8,0xb0,0x92,0x81,0x81,0x81,0x92,0xbb, + 0xe5,0x11,0x24,0xfa,0xd1,0xa8,0x81,0x85,0xae,0xd7,0xff,0x2a,0x09,0xdd,0xb4,0x8a, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5,0xdf,0x04,0x28,0x09,0xe3,0xbd,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa0,0xb1,0xc1,0xd1,0xe4,0xfc,0x1e,0x1b,0xf4, + 0xcb,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0xa8,0xd2, + 0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2c,0x04,0xdc, + 0xf7,0x1f,0x0b,0xe2,0xbb,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xec, + 0x14,0x11,0xec,0x14,0x19,0xf1,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x95, + 0xb8,0xdc,0xff,0x22,0x0d,0xf3,0x18,0x1b,0xf7,0xd4,0xb1,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0,0xbb,0x96,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xb8,0xdc,0xff,0x22,0x0f,0xeb,0xc8,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0xa9,0xd0,0xf7,0x1e,0x07,0xe0,0xb9,0x92,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x82,0x92,0x95, + 0x95,0x92,0x82,0x81,0x81,0x81,0x8e,0x95,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb0,0xd8,0xff,0x29,0x2b,0x26,0x26,0x26,0x26,0x26,0x2b,0x2c,0x04,0xdc, + 0xb4,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x9c,0xc6,0xef,0x1b, + 0x19,0xed,0xc2,0x98,0x81,0x8a,0xb3,0xdc,0x06,0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90, + 0x98,0xa7,0xb2,0xaa,0x90,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa4,0xc0, + 0xe3,0x09,0x2a,0x04,0xda,0xb1,0x88,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x98, + 0x98,0x98,0x98,0x8c,0x81,0x81,0x89,0xb2,0xdb,0x04,0x2c,0x09,0xe1,0xbc,0x9c,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x8d,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x8e,0x90,0xab,0xd5,0xff, + 0x2b,0x06,0xda,0xb0,0x90,0x8f,0x82,0x81,0x81,0x81,0xa1,0xb7,0xb8,0xa5,0x92,0x94, + 0xbe,0xe7,0x13,0x1e,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe0,0xff, + 0x23,0x10,0xee,0xce,0xac,0x8b,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0x9b,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xc4,0xe2, + 0xe5,0xe2,0xc5,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xd3,0xfa,0x20,0x0b,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x8b,0xb4,0xdd,0x06,0x2d, + 0x05,0xdc,0xb5,0x91,0x99,0xbc,0xe3,0x0b,0x26,0xfc,0xd5,0xac,0x82,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xd0,0xd0,0xcc,0xc3,0xb6,0xa4,0x8e,0x81,0x81,0x81,0x81,0x8c,0xb5, + 0xdf,0x09,0x2d,0x04,0xdc,0xb4,0x90,0x97,0xbb,0xe2,0x0b,0x26,0xfc,0xd5,0xac,0x83, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc9,0xef,0x17,0x1b,0xf5,0xcf,0xaa,0x83, + 0x81,0x81,0x81,0x93,0xa5,0xa6,0x9a,0x92,0x8d,0x9a,0xab,0xc1,0xe5,0x0e,0x26,0xfa, + 0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xef,0xc5,0x9c,0x8a,0xad,0xd6, + 0xff,0x2a,0x04,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x11,0xe7, + 0x04,0x25,0xfc,0xd5,0xad,0x85,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0xfa, + 0x22,0x04,0xde,0x06,0x28,0xff,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x89,0xac, + 0xd0,0xf3,0x16,0x1c,0xf7,0xde,0xff,0x26,0x0f,0xec,0xc8,0xa4,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xac,0xd0,0xf3,0x17,0x1a,0xf6,0xd3,0xb0,0x98,0x98,0x98, + 0x98,0x90,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe7,0x0e,0x17,0xf1,0xc9,0xa2,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe6,0x0e,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x11,0xe9, + 0xc1,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba,0xc1,0xd4,0xf9,0x21, + 0x11,0xe7,0xbf,0x95,0x81,0x81,0xa8,0xd0,0xf7,0x1e,0x1b,0xf7,0xd9,0xc3,0xba,0xba, + 0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xcb,0xdf, + 0xfb,0x1d,0x17,0xf1,0xcc,0xa4,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xce,0xf5,0x1b,0x1a,0xf7,0xd7,0xc1,0xb7, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0xa1,0xb7,0xba,0xba,0xd5,0xff, + 0x2b,0x06,0xda,0xba,0xba,0xb9,0xa6,0x87,0x81,0x92,0xba,0xdd,0xdf,0xc9,0xbb,0xb6, + 0xca,0xf1,0x19,0x17,0xed,0xc4,0x9a,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xe8, + 0x0a,0x2b,0x09,0xe8,0xc6,0xa5,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0xb9, + 0xba,0xb9,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xc1,0xe7,0x0f,0x1d,0xff,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xaa,0xd2,0xfa,0x21, + 0x14,0xee,0xcc,0xb8,0xba,0xd4,0xf6,0x1b,0x16,0xef,0xc8,0xa0,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0xa5,0xa2,0x9b,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd4,0xfb,0x24,0x13,0xee,0xcb,0xb6,0xb8,0xd2,0xf5,0x1a,0x17,0xef,0xc8,0xa0,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb8,0xde,0x04,0x2b,0x09,0xe1,0xbb,0x95, + 0x81,0x81,0x8c,0xb1,0xcd,0xcf,0xc3,0xbb,0xb7,0xb5,0xb9,0xc5,0xe7,0x11,0x21,0xf7, + 0xce,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x91,0xbb,0xe4,0x0e,0x21,0xf7,0xd2,0xb7,0xb3,0xc1,0xe2, + 0x0a,0x23,0xfa,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x14,0x1d,0xf5, + 0x11,0x18,0xef,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x09, + 0x1f,0xf6,0xd0,0xf7,0x20,0x11,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0xa0,0xc3, + 0xe6,0x0a,0x2b,0x06,0xe2,0xc8,0xec,0x10,0x25,0x04,0xde,0xbb,0x97,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x25,0x04,0xdf,0xc2,0xc2,0xc2,0xc2,0xc2, + 0xc2,0xb6,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaf,0xd6,0xfc,0x24,0xff,0xda,0xb3,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xcb,0xf3,0x1b,0x14,0xeb,0xd5,0xd5,0xd5,0xd5,0xd5,0xec,0x14,0x1e,0xf5, + 0xcd,0xa5,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5,0xea,0xf6,0x10,0x22, + 0xff,0xda,0xb3,0x8b,0x81,0x81,0x99,0xbf,0xe5,0x09,0x2a,0x16,0xfb,0xeb,0xe3,0xe3, + 0xea,0xf5,0x05,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7,0xea,0xf2,0x04, + 0x1a,0x1f,0xff,0xdd,0xb9,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbc,0xe2,0x05,0x27,0x14,0xfa,0xe9,0xe1, + 0xe1,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xff, + 0x2b,0x06,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x95,0xc0,0xea,0x04,0xf1,0xe4,0xdf, + 0xea,0x05,0x28,0x0a,0xe2,0xba,0x91,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xce, + 0xf0,0x12,0x23,0xff,0xe1,0xbf,0x9e,0x81,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8f, + 0x90,0x8f,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0xaf,0xd5,0xfc,0x22,0x13,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9c,0xc3,0xe9,0x0f, + 0x29,0x09,0xee,0xe2,0xe2,0xf3,0x10,0x24,0xff,0xdd,0xb8,0x91,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e, + 0xc5,0xeb,0x10,0x28,0x07,0xed,0xdf,0xe1,0xf1,0x0f,0x25,0x04,0xde,0xb8,0x92,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xa6,0xcc,0xf1,0x19,0x1a,0xf4,0xce,0xa8, + 0x81,0x81,0x95,0xc0,0xea,0xf7,0xed,0xe5,0xe1,0xdf,0xe2,0xec,0xff,0x20,0x12,0xec, + 0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x89,0xb1,0xda,0xff,0x27,0x0d,0xf0,0xe1,0xdd,0xe6,0xfb, + 0x1d,0x12,0xec,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xde,0x06,0x2a,0xff, + 0x1e,0x0b,0xe2,0xba,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0e,0x17, + 0x11,0xe9,0xc2,0xea,0x12,0x1f,0x04,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x94,0xb7,0xda, + 0xfc,0x21,0x14,0xf0,0xcc,0xb2,0xd6,0xfa,0x1f,0x19,0xf5,0xd2,0xae,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x90,0xb8,0xdb,0xff,0x22,0x0f,0xed,0xed,0xed,0xed,0xed,0xed,0xed, + 0xed,0xd3,0xab,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc6,0xed,0x14,0x11,0xea,0xc3,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xb0,0xd8,0xff,0x29,0x06,0xde,0xb6,0xab,0xab,0xab,0xb7,0xdf,0x09,0x2b,0x04, + 0xdb,0xb3,0x8b,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11,0x13,0x1e,0x1b,0x04, + 0xe6,0xc5,0xa1,0x81,0x81,0x81,0x86,0xab,0xcd,0xee,0x0b,0x22,0x21,0x14,0x0e,0x0e, + 0x13,0x1e,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x16,0x20,0x13,0x13,0x14,0x1c,0x25, + 0x14,0xfc,0xe3,0xc3,0xa2,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa8,0xca,0xea,0x09,0x20,0x20,0x12,0x0b, + 0x0b,0x11,0x21,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x29,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x2e,0x12,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x95,0xc0,0xea,0x16,0x18,0x0e,0x0b, + 0x11,0x25,0x14,0xf3,0xd0,0xab,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb5, + 0xd6,0xf7,0x1a,0x1c,0xfb,0xd9,0xb8,0x96,0x81,0x95,0xc0,0xea,0x16,0x20,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x16,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7, + 0xbd,0x9e,0xc4,0xe9,0x11,0x37,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x8b,0xb0,0xd4,0xf5, + 0x14,0x29,0x15,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb2,0xd5,0xf7,0x16,0x27,0x13,0x0b,0x0b,0x17,0x24,0x09,0xea,0xc8,0xa5,0x81,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xba,0xe0,0x06,0x2d,0x06,0xe0,0xba, + 0x94,0x81,0x95,0xc0,0xea,0x16,0x16,0x0f,0x0b,0x0b,0x0e,0x14,0x24,0x15,0xf9,0xd8, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8,0xec,0x0d,0x27,0x15,0x0b,0x09,0x0e,0x1e, + 0x17,0xf9,0xd7,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd1,0xf9,0x21,0x1c, + 0x24,0xfc,0xd4,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x24,0x2b, + 0x04,0xdc,0xb4,0xdc,0x04,0x2c,0x21,0x1b,0xef,0xc5,0x9b,0x81,0x86,0xaa,0xcd,0xf1, + 0x14,0x22,0xff,0xda,0xb6,0x9c,0xc0,0xe5,0x09,0x2d,0x0d,0xe8,0xc5,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x37,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xdc,0x04,0x21,0xfa,0xd3,0xad,0x85,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe5,0x0d,0x11,0xfa,0xd1,0xa9,0x81,0x81,0x82,0xaa,0xd2,0xfa,0x11,0x11, + 0xe8,0xbf,0x95,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x0b,0x04,0xf5,0xe1, + 0xc8,0xaa,0x8a,0x81,0x81,0x81,0x81,0x92,0xb2,0xd0,0xe8,0xfc,0x0b,0x14,0x19,0x16, + 0x11,0x07,0xfa,0xd9,0xaf,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x0e,0x09,0xfc, + 0xee,0xdb,0xc3,0xa7,0x88,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95,0xc0,0xea,0x13,0x13,0xef,0xc5,0x9b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xae,0xcc,0xe6,0xfb,0x0b,0x13,0x19, + 0x16,0x11,0x09,0xfb,0xe8,0xc1,0x97,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x81,0xa8,0xd2,0xfc,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf2,0xc8,0x9d,0x81,0x94,0xbe,0xe6,0xff,0x0d,0x16,0x19, + 0x13,0x07,0xf1,0xd7,0xb8,0x96,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x9b, + 0xbd,0xde,0xff,0x11,0x11,0xf3,0xce,0xa4,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x0e,0xe2,0xb8,0x8d,0x95,0xc0,0xea,0x11,0x0b,0xdf,0xb5,0x8b, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xe7, + 0xbd,0x93,0xb2,0xd8,0xfc,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x99,0xb9,0xd7, + 0xf1,0x06,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xca,0xac,0x8c,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf4,0x09,0x16,0x27,0x1b,0x11,0xff,0xe8,0xcc,0xae,0xa0,0x89,0x81, + 0x81,0x95,0xc0,0xea,0x13,0x13,0xed,0xc2,0x98,0xa8,0xce,0xf4,0x13,0x13,0xf3,0xcd, + 0xa4,0x81,0x95,0xc0,0xea,0x07,0x0e,0x13,0x18,0x19,0x16,0x0f,0x04,0xf1,0xd9,0xbd, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x11,0x06,0xda,0xb0,0x85, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb1,0xd0,0xed,0x04,0x11,0x16,0x19,0x13,0x07, + 0xf4,0xdb,0xbd,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xec,0x11,0x11, + 0x11,0xef,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11, + 0xf6,0xce,0xa6,0xce,0xf5,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x92,0xbc,0xe5,0x09, + 0x11,0x0d,0xe8,0xc5,0xa0,0x86,0xab,0xce,0xf3,0x11,0x11,0xff,0xdb,0xb2,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x04,0xd7,0xad,0x83,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcc,0xf3,0x1a,0x0b,0xe3,0xbd,0x96,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x9d,0xc4,0xe2,0xe5,0xe5, + 0xdd,0xba,0x92,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xda,0xcd,0xbc, + 0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xae,0xc5,0xd6,0xe3,0xea,0xed,0xed, + 0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe2,0xde,0xd5, + 0xc8,0xb5,0xa0,0x87,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x92,0xbb,0xdf,0xe7,0xe7,0xe2,0xc0,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xc2,0xd4,0xe1,0xea,0xed, + 0xed,0xe7,0xdf,0xd3,0xc5,0xac,0x8a,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe1,0xc1,0x99,0x81,0x87,0xaa,0xc6,0xd8,0xe4,0xea,0xed, + 0xea,0xe0,0xce,0xb7,0x9b,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xa3,0xc5,0xe2,0xe5,0xe5,0xe4,0xc8,0xa1,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xd7,0xb3,0x8a,0x92,0xba,0xdd,0xe5,0xe5,0xd5,0xb0,0x88, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdb, + 0xb8,0x8f,0xa0,0xc6,0xe3,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x81,0x9b,0xb7, + 0xcd,0xde,0xe9,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x8e,0x81,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xba,0xd0,0xe1,0xef,0x1b,0x0e,0xe7,0xd9,0xc6,0xc1,0xd2,0xc4,0xa4,0x81, + 0x81,0x92,0xbb,0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0x96,0xbc,0xdf,0xe7,0xe7,0xe7,0xc9, + 0xa2,0x81,0x8e,0xb4,0xd2,0xdd,0xe5,0xea,0xed,0xed,0xea,0xe5,0xdb,0xcc,0xb7,0x9e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xe5,0xe5,0xe5,0xd1,0xab,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xb2,0xc9,0xdb,0xe7,0xed,0xed,0xea,0xe0, + 0xcf,0xba,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd9,0xe5,0xe5, + 0xe5,0xdb,0xb9,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5, + 0xe0,0xc0,0x99,0xbf,0xe0,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x8f,0xb8,0xdb,0xe5, + 0xe5,0xe5,0xd2,0xaf,0x8b,0x81,0x94,0xb9,0xdb,0xe5,0xe5,0xe5,0xd3,0xae,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3,0xae,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xcf,0xa9,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x93,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe2,0x0a,0x1b,0xf4,0xcd,0xa6,0x81, + 0x81,0x81,0x90,0x93,0x9d,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba, + 0xb7,0xa1,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xb8,0xb1,0xa5,0x97, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9f,0xaf,0xba,0xc0,0xc2,0xc2, + 0xbd,0xb6,0xaa,0x9b,0x85,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xb9,0xb5,0xac, + 0x9f,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xb3,0x9a,0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xbb,0xa7,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9c,0xad,0xb9,0xc0,0xc2, + 0xc2,0xbe,0xb6,0xab,0x9d,0x8b,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x8f,0xac,0xba,0xba,0xba,0xb1,0x96,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa6,0x87,0x81,0x81,0x8b,0xa0,0xb0,0xbb,0xc1,0xc2, + 0xc0,0xb8,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x89,0xa8,0xb9,0xba,0xba,0xba,0xab,0x8d,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb4,0x9b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb3,0x9a,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb6, + 0x9f,0x81,0x8b,0xa9,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x81,0x94, + 0xa7,0xb6,0xbf,0xc2,0xc2,0xbb,0xaf,0x9e,0x89,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x96,0xab,0xc1,0xea,0x12,0x1e,0xfb,0xe1,0xda,0xe6,0xfb,0xde,0xbb,0x98, + 0x81,0x82,0xa3,0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x83,0xa3,0xb9,0xbd,0xbd,0xbd,0xad, + 0x8f,0x81,0x81,0x97,0xaa,0xb4,0xba,0xc0,0xc2,0xc2,0xc1,0xbc,0xb3,0xa5,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xae,0xba,0xba,0xba,0xb1,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xa4,0xb4,0xbd,0xc2,0xc2,0xc0,0xb7, + 0xa9,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb5,0xba,0xba, + 0xba,0xb6,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba, + 0xb8,0xa5,0x85,0xa5,0xb8,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x9f,0xb6,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xaf,0x94,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd2,0xf9,0x20,0x05,0xde,0xb6,0x90, + 0x82,0xa3,0xb9,0xbd,0xbd,0xc8,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x8d,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x90,0x96,0x98,0x98, + 0x94,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8f,0x96,0x98, + 0x98,0x94,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x87,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x82,0x81,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x98, + 0x96,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x84,0x8f,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8c,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8d,0x95,0x98,0x98,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb3,0xd9,0xfc,0x1d,0x1a,0x0a,0x06,0x0d,0x19,0xf5,0xd2,0xa9, + 0x81,0x81,0x81,0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88, + 0x81,0x81,0x81,0x81,0x82,0x8a,0x90,0x95,0x98,0x98,0x97,0x92,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x90,0x90,0x90,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x94,0x98,0x98,0x95,0x8e, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x8f,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x89,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc2,0xe9,0xfa,0xfa,0xe9,0xbf,0x95, + 0x92,0xbb,0xdf,0xe7,0xe7,0xe7,0xf2,0x1e,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfc,0x0f,0x19,0x1b,0x14,0x05,0xef,0xcf,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xcb,0xaf,0x8b, + 0x95,0xc0,0xea,0x13,0x13,0x13,0x13,0x24,0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xc2,0xd8,0xe7,0xef,0xef,0xea,0xde,0xcc,0xb4,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa2,0xa5,0xa5,0xa2,0x91,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0x9e,0xb1,0xbd,0xc5,0xc5,0xc1,0xb7,0xa6,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd2,0xaf,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x94,0x9b,0x9b,0x97,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xad,0x96,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8b,0x8b, + 0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x8f, + 0x90,0x90,0x8c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89, + 0x8d,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91, + 0x98,0x9b,0x9b,0x95,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81,0x88, + 0x98,0x9b,0x9b,0x96,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb2,0x9d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb2,0xb5,0xb5,0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xb3,0xb5,0xb5, + 0xb2,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa5,0xb2,0xb8, + 0xba,0xba,0xb6,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9f,0xb1, + 0xb8,0xb4,0xa3,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xaa,0xb7,0xb8,0xad,0x97,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xac,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xab,0xba, + 0xc2,0xc5,0xc5,0xbb,0x9e,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x86,0xa8, + 0xc1,0xc5,0xc5,0xc0,0xb5,0xa4,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xd9,0xbb,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x90,0xb8,0xd9,0xdf,0xdf,0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba,0xda,0xdf,0xdf, + 0xd9,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcc,0xdb,0xe2, + 0xe5,0xe4,0xdf,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6, + 0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc1,0xd9, + 0xe2,0xdc,0xc6,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb2,0xce,0xe0,0xe2,0xd3,0xb8,0x96,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x95,0xa1,0xab,0xaf,0xa1,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2, + 0xed,0xef,0xef,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x94,0xbd, + 0xe4,0xef,0xef,0xea,0xdc,0xc9,0xae,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x05,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x0b,0x0b, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xbb,0xd9,0xf1,0x04,0x0d, + 0x11,0x0e,0x0a,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb6,0xdc,0xfc, + 0x0e,0xff,0xe2,0xbd,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2, + 0xc9,0xed,0x09,0x0b,0xf3,0xd0,0xa9,0x81,0x95,0xc0,0xea,0x09,0x09,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xbc,0xca,0xd4,0xd9,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb6,0xd7,0xf4,0x0a, + 0x16,0x1b,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x16,0x19,0x13,0x04,0xea,0xcb,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc9,0xe3,0xfc,0x16,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xae,0xd4,0xf7,0x15,0x22,0x13, + 0x0e,0x11,0x15,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x14, + 0x37,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab, + 0xd5,0xff,0x28,0x2e,0x07,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x22,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0xb3,0xdb,0xf3,0xfc,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x13,0x21, + 0x0b,0xff,0xff,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0xff,0x04,0x12,0x26,0x06,0xe1,0xba,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa8,0xc1,0xdb,0xf3,0x0f,0x16,0xf7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x81,0x88,0x91,0x97,0x9b,0x9b,0x98,0x90,0x84,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x95,0x8e,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8e,0x95,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x87,0x93,0x9a,0x9b,0x98,0x91,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe6,0x0d,0x23,0xff,0xea, + 0xe2,0xe5,0xeb,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x94,0x9a,0x9b, + 0x98,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x94,0xbd,0xe6,0x0d, + 0x25,0x12,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x93,0x93,0x93,0xa9, + 0xd2,0xfa,0x1d,0x21,0xff,0xd9,0xb1,0x87,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x81,0x8b,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x99, + 0x9b,0x95,0x86,0x94,0x9b,0x9a,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8d,0x8d,0x97,0x9b,0x9a,0x93,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x91,0x99,0x9b,0x9a,0x94,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8d,0x8b,0x96,0x9b,0x9b,0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0x8e,0x95,0x98,0x98,0x92,0x90,0x9a,0x98,0x88,0x81,0x81,0x81,0x8e, + 0x90,0x90,0x8d,0x87,0x94,0x9b,0x9b,0x95,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x90,0x98,0x9b,0x9b,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x8e, + 0x90,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x90,0x90,0x90,0x8a,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x91,0x82,0x81,0x81,0x8c,0x93,0x93,0x93,0x89,0x81,0x81,0x81,0x81, + 0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81,0x8c,0x93,0x93,0x93,0x8b,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90, + 0x86,0x81,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x8d,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x92,0x88,0x81,0x81,0x81,0x81, + 0x8b,0x93,0x93,0x93,0x8c,0x81,0x81,0x81,0x81,0x8c,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd6,0xff,0x28,0x06, + 0xe6,0xd7,0xd5,0xc8,0xa7,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x8d,0xb2, + 0xcf,0xd5,0xda,0xf0,0x14,0x19,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x9f,0xb9,0xd3,0xec,0xef,0xef,0xde, + 0xb6,0x8c,0x81,0x81,0x91,0xa4,0xb1,0xba,0xc1,0xc5,0xc5,0xc2,0xb9,0xab,0x96,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4,0xbf,0xc2,0xc2,0xbf,0xb8,0xac, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xa9,0xb7,0xc0,0xc2,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x83,0x9b,0xae,0xbc,0xc4,0xc5,0xc2,0xba,0xab,0x97, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0x1a,0x13,0xeb,0xc5, + 0xb8,0xbb,0xc2,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x85,0x9c,0xaf,0xbd,0xc4,0xc5, + 0xc2,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0xc0,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xd1,0xee, + 0xfa,0xf1,0xd7,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0x93,0xb0,0xbd,0xbd,0xbd,0xbd, + 0xc0,0xe1,0xf6,0xf9,0xe6,0xc6,0xa2,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x98,0xb2,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x97,0xb3,0xbd,0xbd,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb4,0xc3, + 0xc5,0xbd,0xaa,0xbb,0xc5,0xc4,0xb6,0xa1,0x83,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb5,0xb4,0xc1,0xc5,0xc4,0xbc,0xac,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xad,0xba,0xc2,0xc5,0xc4,0xbd,0xb1,0x9f,0x89,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb5,0xb3,0xbf,0xc5,0xc5,0xbd,0xad,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xaa,0xb8,0xc0,0xc2,0xc2,0xbc,0xb9,0xc3,0xc1,0xa8,0x86,0x81,0xa1,0xb7, + 0xba,0xba,0xb5,0xae,0xbd,0xc5,0xc5,0xbe,0xaf,0x9a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x97,0xaa,0xb9,0xc2,0xc5,0xc5,0xc2,0xbf,0xb8,0xa9,0x8c,0x81,0x81,0x81,0xa1,0xb7, + 0xba,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xba,0xba,0xba,0xba,0xb1,0x96,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xba,0xa5,0x84,0x97,0xb3,0xbd,0xbd,0xbd,0xaf,0x91,0x81,0x82,0xa3, + 0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x98,0xb3,0xbd,0xbd,0xbd,0xb2,0x95,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba, + 0xab,0x8d,0x81,0x81,0x9a,0xb3,0xba,0xba,0xba,0xb5,0x9d,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81,0x96, + 0xb2,0xbd,0xbd,0xbd,0xb3,0x97,0x81,0x81,0x9b,0xb4,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x07,0x21,0xf7, + 0xce,0xad,0xab,0xa3,0x8c,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x95, + 0xa8,0xab,0xb5,0xde,0x09,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb1,0xc4,0xc5,0xc5,0xbe, + 0xa2,0x81,0x81,0x8b,0xaf,0xcb,0xd9,0xe4,0xea,0xef,0xef,0xec,0xe1,0xd1,0xb9,0x9b, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc,0xe7,0xed,0xed,0xe9,0xe1,0xd3, + 0xb9,0x94,0x81,0x81,0x81,0x83,0xa1,0xba,0xcf,0xdf,0xea,0xed,0xed,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x87,0xa4,0xbe,0xd4,0xe5,0xed,0xef,0xed,0xe2,0xd1,0xba, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x8b,0x9b,0x9d,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x9d,0x9d,0x9d,0x9a,0x8e,0x81,0x81,0x81,0x81,0x87,0xa5,0xc0,0xd5,0xe5,0xed,0xef, + 0xeb,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xda, + 0xea,0xef,0xed,0xe4,0xd0,0xb6,0x97,0x81,0x81,0x83,0xac,0xd3,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdd,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0xa7,0xce,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xb6,0xd4,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x81,0x8c,0x93,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xec, + 0xef,0xe5,0xca,0xe1,0xef,0xed,0xdc,0xbf,0x9d,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xd9,0xdb,0xea,0xef,0xed,0xe4,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81,0x85,0xa3,0xbd, + 0xd3,0xe3,0xed,0xef,0xed,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xd9,0xda,0xe8,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81,0x81,0x81,0x83, + 0xa1,0xbb,0xcf,0xe0,0xea,0xed,0xec,0xe6,0xe2,0xec,0xe4,0xbd,0x94,0x92,0xba,0xdd, + 0xe5,0xe5,0xd9,0xd4,0xe6,0xef,0xef,0xe7,0xd5,0xbb,0x9d,0x81,0x81,0x81,0x81,0x9f, + 0xba,0xd1,0xe1,0xeb,0xef,0xef,0xed,0xe7,0xe1,0xc7,0xa0,0x81,0x81,0x92,0xba,0xdd, + 0xe5,0xe5,0xe5,0x0b,0x23,0xf7,0xe5,0xe5,0xe5,0xe5,0xe5,0xd1,0xab,0x82,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe0,0xbd,0x95,0xac,0xd3,0xe7,0xe7,0xe7,0xcc,0xa4,0x81,0x92,0xbb, + 0xdf,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x86,0xae,0xd3,0xe7,0xe7,0xe7,0xd0,0xa9,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe4, + 0xc8,0xa1,0x81,0x88,0xb0,0xd5,0xe5,0xe5,0xe5,0xd9,0xb7,0x94,0x9b,0xbe,0xde,0xe5, + 0xe5,0xe4,0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xe7,0xcb,0xa4,0x81,0x84,0xac, + 0xd1,0xe7,0xe7,0xe7,0xd3,0xac,0x83,0x8a,0xb3,0xd7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9a,0x9b,0x9b,0x96, + 0x83,0x81,0x81,0x95,0xbf,0xe9,0xff,0x0d,0x15,0x1a,0x1b,0x15,0x0a,0xf4,0xd7,0xb7, + 0x93,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5, + 0x91,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05,0x11,0x19,0x19,0x13,0x0a,0xf2, + 0xc8,0x9d,0x81,0x81,0x81,0xa0,0xbf,0xdd,0xf5,0x07,0x13,0x19,0x16,0x0f,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0xa1,0xc2,0xdf,0xf9,0x0c,0x18,0x1b,0x16,0x0a,0xf5,0xdb, + 0xbc,0x9a,0x81,0x81,0x81,0x8a,0xac,0xc4,0xc8,0xc8,0xca,0xf5,0x21,0x0e,0xe2,0xc8, + 0xc8,0xc8,0xc8,0xc2,0xa8,0x85,0x81,0x81,0x81,0xa0,0xc2,0xe1,0xfb,0x0d,0x19,0x1b, + 0x14,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xff, + 0x12,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x85,0xb0,0xda,0x06,0x13,0x13,0x13, + 0x13,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb6, + 0xd4,0xf1,0x10,0x11,0x05,0xe6,0xbe,0x94,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x06,0xf7,0x13, + 0x19,0x07,0xe4,0x05,0x19,0x15,0xfb,0xd6,0xb0,0x88,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xe6,0xff,0x13,0x1b,0x19,0x0b,0xf1,0xd3,0xaf,0x8a,0x81,0x81,0x81,0xa1,0xc1,0xdf, + 0xf7,0x0b,0x16,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa8,0x86,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xe6,0xff,0x11,0x19,0x19,0x0c,0xf4,0xd6,0xb5,0x91,0x81,0x81,0x81,0x81,0xa0, + 0xbf,0xdd,0xf5,0x09,0x13,0x19,0x16,0x0f,0x0b,0x15,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xe5,0xf9,0x0d,0x19,0x19,0x0f,0xf7,0xd9,0xb5,0x8f,0x81,0x81,0x99,0xbb, + 0xdb,0xf5,0x09,0x15,0x1b,0x1b,0x19,0x13,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x11,0x11,0x11,0x14,0x27,0x11,0x11,0x11,0x11,0x11,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x13,0x13,0xed,0xc2,0x98,0xb0,0xda,0x06,0x13,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe5,0x0d,0x13,0xff,0xd8,0xb1,0x89,0x95,0xbd,0xe4,0x0c,0x13,0xfc,0xd6,0xac,0x82, + 0x92,0xbd,0xe7,0x11,0x11,0xef,0xc5,0x9b,0x93,0x93,0x90,0xb2,0xdd,0x07,0x11,0xfa, + 0xd0,0xa5,0x81,0x8a,0xb4,0xdc,0xff,0x11,0x11,0xf1,0xcf,0xac,0xb2,0xd5,0xf9,0x11, + 0x11,0xf5,0xd1,0xa7,0x81,0x91,0xbb,0xe2,0x0a,0x13,0x04,0xdb,0xb4,0x8c,0x92,0xba, + 0xe1,0x0a,0x13,0xff,0xd8,0xaf,0x85,0x8d,0xb8,0xe2,0x0e,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0x0b,0x06,0x06,0x11,0x27,0x14,0xf1,0xcb, + 0xa4,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb, + 0xa4,0x81,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26,0x13,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0x93,0xb8,0xdb,0xfb,0x18,0x1a,0x0b,0x06,0x09,0x11,0x23,0x16, + 0xea,0xc0,0x95,0x81,0x94,0xba,0xdd,0xfc,0x1c,0x14,0x04,0xff,0x09,0x1d,0x18,0xf7, + 0xd5,0xaf,0x8a,0x81,0x81,0x97,0xc1,0xe8,0xf2,0xf2,0xf2,0xf5,0x21,0x0e,0xf2,0xf2, + 0xf2,0xf2,0xf2,0xe3,0xbb,0x92,0x81,0x81,0x8e,0xb4,0xda,0xfc,0x1d,0x14,0xff,0xfa, + 0x05,0x1c,0x23,0x0b,0x0b,0xef,0xc5,0x9b,0x81,0x95,0xc0,0xea,0x16,0x16,0x04,0x20, + 0x0c,0x06,0x0f,0x2b,0x0d,0xe8,0xc1,0x99,0x81,0x85,0xb0,0xda,0x06,0x0b,0x0b,0x0b, + 0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x10,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xd2, + 0xf1,0x10,0x23,0x05,0xe6,0xc8,0xaa,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x06,0x11,0x06, + 0x0d,0x1a,0xfa,0x16,0x04,0x1a,0x0e,0xe6,0xbc,0x92,0x81,0x95,0xc0,0xea,0x16,0x11, + 0x07,0x1f,0x0b,0x06,0x11,0x2b,0x0f,0xe8,0xc2,0x99,0x81,0x81,0x94,0xba,0xdd,0xfc, + 0x1a,0x1b,0x0b,0x06,0x0b,0x1a,0x21,0x05,0xe3,0xc0,0x9a,0x81,0x95,0xc0,0xea,0x16, + 0x11,0x05,0x22,0x0f,0x06,0x0d,0x25,0x12,0xef,0xc9,0xa3,0x81,0x81,0x81,0x93,0xb8, + 0xdb,0xfb,0x18,0x18,0x09,0x04,0x06,0x0f,0x23,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x11,0xfc,0x1a,0x11,0x06,0x0b,0x23,0x13,0xee,0xc8,0xa0,0x81,0x83,0xab,0xd2, + 0xf6,0x17,0x1a,0x0a,0x04,0x04,0x09,0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x0e,0x12,0x26,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0xda,0xb0,0x85,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x87,0xaf, + 0xd6,0xfc,0x24,0x0f,0xe7,0xbf,0x98,0xa4,0xcb,0xf3,0x1a,0x15,0xee,0xc7,0x9f,0x81, + 0x8d,0xb7,0xe0,0x0b,0x1e,0xf5,0xca,0xb2,0xbd,0xbd,0xb9,0xb8,0xe2,0x0b,0x1e,0xf3, + 0xca,0xa0,0x81,0x81,0xa3,0xc5,0xe6,0x09,0x2b,0x0a,0xe6,0xc4,0xca,0xed,0x10,0x20, + 0xff,0xdd,0xbb,0x99,0x81,0x84,0xac,0xd3,0xfa,0x22,0x11,0xea,0xc3,0x9b,0xa0,0xc8, + 0xef,0x18,0x18,0xf1,0xc9,0xa2,0x81,0x8d,0xb8,0xe2,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x29,0x1a,0xef,0xc5,0x9b,0x81,0x81,0x81,0x86,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x88,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0xf7,0xeb,0xe1,0xda,0xdd,0xec,0x0b,0x2a,0xff,0xd8, + 0xaf,0x85,0x95,0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda, + 0xb2,0x89,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04,0xec,0xdf,0xdf,0xe5,0xf2,0xf1, + 0xc7,0x9d,0x81,0x81,0xa5,0xcc,0xf1,0x16,0x16,0xf7,0xe2,0xda,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0xa6,0xcd,0xf3,0x18,0x13,0xf1,0xdc,0xd6,0xe2,0xfc,0x1f,0x0f, + 0xe8,0xc0,0x98,0x81,0x81,0x98,0xc2,0xed,0x19,0x1e,0x1e,0x1e,0x2c,0x21,0x1e,0x1e, + 0x1e,0x1e,0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1a,0xf5,0xd9,0xd1, + 0xe0,0xff,0x26,0x07,0xdf,0xdb,0xbc,0x95,0x81,0x95,0xc0,0xea,0x16,0x23,0x1d,0xff, + 0xe5,0xda,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa9,0xce,0xdf,0xdf,0xdf,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf,0xdf,0xdf, + 0xdf,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd2,0xf0, + 0x0f,0x21,0x04,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x0d,0x0b,0xe8, + 0xfc,0x1f,0x0d,0xfc,0xe5,0x0f,0x16,0xec,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1e, + 0x1d,0xff,0xe5,0xdb,0xee,0x13,0x1f,0xf5,0xcc,0xa3,0x81,0x81,0xa6,0xcd,0xf3,0x18, + 0x18,0xf9,0xe2,0xda,0xe2,0xf7,0x16,0x1e,0xf9,0xd2,0xaa,0x82,0x95,0xc0,0xea,0x16, + 0x1c,0x1f,0xff,0xe8,0xda,0xe8,0x09,0x28,0xff,0xda,0xb1,0x89,0x81,0x81,0xa5,0xcc, + 0xf1,0x16,0x15,0xf5,0xe0,0xd7,0xdc,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x14,0x1b,0x07,0xec,0xdc,0xe6,0x0a,0x26,0xfc,0xd4,0xab,0x82,0x8c,0xb6,0xdf, + 0x09,0x23,0xfb,0xe1,0xd9,0xd8,0xdd,0xe5,0xe9,0xcb,0xa2,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xe2,0xe2,0x0b,0x23,0xf7,0xe2,0xe2,0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f, + 0xc7,0xee,0x15,0x1d,0xf5,0xce,0xa6,0xb2,0xda,0xff,0x2a,0x06,0xdf,0xb7,0x90,0x81, + 0x87,0xb1,0xda,0x04,0x23,0xfa,0xd0,0xd0,0xe7,0xe7,0xdd,0xbd,0xe7,0x11,0x17,0xed, + 0xc4,0x9a,0x81,0x81,0x8a,0xac,0xce,0xf0,0x12,0x22,0xff,0xdb,0xe2,0x05,0x27,0x07, + 0xe5,0xc3,0xa1,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x20,0xf9,0xd2,0xaa,0xaf,0xd6, + 0xfc,0x26,0x0a,0xe1,0xba,0x93,0x81,0x89,0xb2,0xd5,0xe2,0xe2,0xe2,0xe2,0xe2,0xea, + 0x0d,0x22,0xff,0xdf,0xbc,0x95,0x81,0x81,0x9b,0xaf,0xb2,0xb7,0xdf,0x09,0x1e,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x05,0x23,0xfa,0xd1,0xb5,0xb2,0xaa,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xb1,0xcd,0xd0,0xc2,0xbf,0xc2,0xc2,0xd3,0xfc,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5, + 0xbb,0x91,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6,0xc8,0xb6,0xb5,0xbc,0xcc,0xd0, + 0xb7,0x93,0x81,0x89,0xb3,0xdb,0x04,0x28,0xff,0xdb,0xbd,0xb0,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8a,0xb3,0xdc,0x04,0x27,0xff,0xd9,0xbd,0xbd,0xc1,0xe7,0x0e,0x1e, + 0xf5,0xcc,0xa2,0x81,0x81,0x98,0xc2,0xed,0xff,0xff,0xff,0xff,0x21,0x0e,0xff,0xff, + 0xff,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0xa0,0xca,0xf5,0x1e,0x0e,0xe5,0xbc,0xa7, + 0xc8,0xf2,0x1b,0x12,0xe7,0xbd,0xa0,0x82,0x81,0x95,0xc0,0xea,0x16,0x20,0xff,0xe1, + 0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x92,0xac,0xb5,0xb5,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf0,0x0f, + 0x21,0x04,0xe4,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf7,0xd2, + 0xfa,0x26,0x0f,0xe8,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x21, + 0xff,0xe1,0xc3,0xb5,0xde,0x09,0x26,0xfc,0xd2,0xa8,0x81,0x8a,0xb3,0xdc,0x04,0x29, + 0xff,0xdd,0xbd,0xb0,0xbc,0xdb,0xff,0x28,0x09,0xdf,0xb6,0x8d,0x95,0xc0,0xea,0x16, + 0x23,0xff,0xe3,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81,0x89,0xb2,0xdb, + 0x04,0x28,0xff,0xdb,0xba,0xad,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x27,0x07,0xe8,0xca,0xb3,0xd4,0xfc,0x29,0x06,0xda,0xb1,0x87,0x8d,0xb8,0xe2, + 0x0e,0x21,0xf9,0xda,0xc8,0xbb,0xb4,0xbb,0xbf,0xaf,0x91,0x81,0x81,0x81,0x9f,0xb4, + 0xb8,0xb8,0xdf,0x0b,0x23,0xf7,0xcd,0xb8,0xb8,0xb8,0xb8,0xae,0x94,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x90, + 0xb7,0xde,0x06,0x2c,0x04,0xdc,0xb5,0xc1,0xe8,0x11,0x1e,0xf6,0xcf,0xa8,0x81,0x81, + 0x81,0xaa,0xd4,0xfc,0x29,0xff,0xd5,0xdf,0x07,0x13,0xef,0xc8,0xea,0x16,0x11,0xe7, + 0xbd,0x94,0x81,0x81,0x81,0x93,0xb5,0xd6,0xf7,0x1a,0x17,0xf3,0xf9,0x1d,0x0f,0xee, + 0xcc,0xaa,0x88,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x09,0xe1,0xb9,0xbd,0xe4, + 0x0c,0x22,0xfa,0xd3,0xab,0x84,0x81,0x81,0x9a,0xb2,0xb8,0xb8,0xb8,0xc2,0xe3,0x05, + 0x26,0x09,0xe6,0xc5,0xa4,0x82,0x81,0x90,0xb6,0xd6,0xdd,0xe1,0xf1,0x13,0x13,0xec, + 0xc3,0x9a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa9,0xd2,0xfb,0x22,0x09,0xeb,0xdf,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xba,0xcf,0xdf,0xe7,0xed,0xed,0xed,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea, + 0xc0,0x97,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2,0xac,0x8e,0x8b,0x94,0xa4,0xa7, + 0x97,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf3,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x92,0xbc,0xe5,0x0f,0x1e,0xf3,0xe7,0xe7,0xe7,0xe7,0xe7,0x06,0x26, + 0xfa,0xd2,0xa8,0x81,0x81,0x8f,0xb5,0xd1,0xd5,0xd5,0xd5,0xf5,0x21,0x0e,0xe2,0xd5, + 0xd5,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x0f,0xe6,0xbe,0xac, + 0xcb,0xf2,0x1c,0x11,0xe7,0xbd,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc5, + 0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x85,0x8b,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b,0x8b,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf0,0x0f,0x21, + 0x04,0xe4,0xc7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd6,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc5,0xa5,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x92,0xbc,0xe5,0x0f,0x1e, + 0xf5,0xcc,0xa3,0x86,0xa2,0xcb,0xf4,0x1e,0x11,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc6,0xa7,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x96,0x81,0x91,0xbb,0xe4, + 0x0e,0x1e,0xf4,0xca,0xa2,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xcb,0xac,0xa5,0xd0,0xfa,0x04,0x04,0xdd,0xb2,0x88,0x89,0xb3,0xdb, + 0x04,0x25,0x14,0xff,0xf1,0xe4,0xd6,0xc7,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0x8b, + 0x8d,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x8d,0x87,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0xa8,0xcf,0xf6,0x1e,0x13,0xec,0xc3,0xcf,0xf7,0x1f,0x0f,0xe7,0xc0,0x99,0x81,0x81, + 0x81,0xa4,0xce,0xf7,0x22,0x04,0xda,0xec,0x14,0x25,0xfc,0xd6,0xef,0x1a,0x0b,0xe1, + 0xb7,0x8d,0x81,0x81,0x81,0x81,0x9b,0xbd,0xdf,0xff,0x23,0x0c,0x11,0x18,0xf5,0xd4, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x17,0xef,0xc8,0xcb,0xf2, + 0x1a,0x13,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x89,0x8d,0x99,0xba,0xdb,0xfc,0x1e, + 0x10,0xee,0xcd,0xac,0x8a,0x81,0x81,0x95,0xc0,0xea,0x09,0x0b,0x15,0x12,0xf9,0xd9, + 0xb4,0x8e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x9d,0xc4,0xe7,0x06,0x18,0x12,0x09,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xdb,0xf5,0x07,0x12,0x17,0x19,0x19,0x19,0x2d,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x22,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x29, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x96,0xa8,0xab,0xab,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0xab,0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x9a,0xc3,0xec,0x13,0x1d,0xf7,0xde,0xd5, + 0xe4,0x04,0x29,0x05,0xdd,0xb5,0x8c,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0x0f,0x2c,0x04, + 0xe4,0xc7,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x14,0x19,0xed,0xc4,0x9a,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x9c,0xc1,0xd7,0xd7,0xd7,0xca,0xa8,0x81,0x81,0xa4,0xc8, + 0xea,0x07,0x1d,0x26,0x19,0x0c,0xff,0xee,0xd8,0xbd,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x98,0xc0,0xe7,0x0f,0x21,0xfa,0xd2,0xde,0x06,0x26,0xff,0xd7,0xb0,0x89,0x81,0x81, + 0x81,0x9e,0xc8,0xf2,0x1c,0x09,0xdf,0xfa,0x1f,0x14,0x0b,0xe4,0xf5,0x1f,0x06,0xdb, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa4,0xc6,0xe8,0x0a,0x2a,0x20,0xff,0xdd,0xbb, + 0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x26,0xff,0xd7,0xd9,0xff, + 0x29,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x17,0x18, + 0xf5,0xd5,0xb3,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x16,0x18,0x09,0xf3,0xd4, + 0xb1,0x8a,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0x98,0xbd,0xdf,0xfb,0x0c,0x19,0x13,0x06,0xda,0xb0,0x85,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xae,0xd4,0xf9,0x18,0x1d,0x0a,0xff,0xff,0xff,0xff,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed, + 0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x95,0xc0,0xea,0x16,0x1c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xb6,0xd9,0xfb,0x23,0x18,0x05,0xff, + 0x0a,0x20,0x10,0xf0,0xcc,0xa7,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xf3,0x14,0x1c, + 0xfc,0xdd,0xbf,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc4,0x9a,0x81,0x9a,0xc4,0xed,0x19,0x14,0xea,0xc0,0x95,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x99,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x85,0xa0,0xad,0xad,0xad,0xa6,0x8e,0x81,0x81,0x8d,0xae, + 0xcb,0xe3,0xf6,0x05,0x11,0x1f,0x26,0x13,0xf9,0xd8,0xb3,0x8c,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x89,0xb0,0xd7,0xff,0x26,0x09,0xe1,0xed,0x14,0x17,0xef,0xc8,0xa1,0x81,0x81,0x81, + 0x81,0x98,0xc2,0xec,0x16,0x0e,0xe4,0x06,0x12,0x05,0x19,0xf1,0xfa,0x23,0xff,0xd5, + 0xab,0x81,0x81,0x81,0x81,0x81,0x85,0xa7,0xc8,0xea,0x0b,0x28,0x20,0xfc,0xdd,0xbb, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x0e,0xe7,0xe7,0x0f, + 0x1c,0xf5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x81,0x8a,0xab,0xcc,0xee,0x0f,0x1f,0xfc, + 0xdc,0xbb,0x99,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xe7,0xec,0xfc,0x1b,0x0f,0xe8, + 0xc1,0x98,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x81,0xa7,0xcf,0xf6,0x1b,0x0b,0xf1,0xe9,0xe7,0xd3,0xac,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x92,0xbb,0xe4,0x0d,0x26,0xff,0xe3,0xd7,0xd5,0xd5,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7, + 0xbd,0x94,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd,0xa6,0x8b,0x8a,0x94,0xa4,0xa6, + 0x96,0x81,0x81,0x94,0xbd,0xe7,0x13,0x1b,0xf1,0xc7,0x9e,0xac,0xcd,0xef,0x19,0x16, + 0xea,0xc0,0x95,0x93,0xbd,0xe7,0x11,0x1e,0xf2,0xda,0xda,0xda,0xda,0xda,0xda,0xda, + 0xda,0xc4,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xcb,0xf0,0x14,0x0f,0x09,0x13,0x16, + 0x11,0x04,0xef,0xd4,0xb5,0x92,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xf9,0x18, + 0x1a,0xfb,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x8d,0x84,0x81,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x93,0xbd,0xe7,0x11,0x1e, + 0xf4,0xcb,0xa2,0x86,0xa4,0xcc,0xf5,0x1e,0x0e,0xe5,0xbb,0x92,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81,0x94,0xbd,0xe7, + 0x13,0x1b,0xf2,0xc8,0x9e,0xac,0xcd,0xef,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x8c,0x9d, + 0xa9,0xbe,0xcf,0xdc,0xe9,0xf7,0x0b,0x27,0x11,0xea,0xc1,0x97,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x88,0x8e,0x95,0x8f,0x81,0x81,0x95,0xc0, + 0xea,0x16,0x19,0xed,0xc2,0x99,0xb8,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0xa1,0xc8,0xef,0x17,0x17,0xef,0xfb,0x23,0x07,0xe0,0xb9,0x91,0x81,0x81,0x81, + 0x81,0x92,0xbc,0xe6,0x11,0x13,0xec,0x14,0x06,0xf7,0x20,0xff,0xfc,0x23,0xf7,0xcf, + 0xa5,0x81,0x81,0x81,0x81,0x81,0x9f,0xc1,0xe3,0x04,0x25,0x07,0x16,0x18,0xf7,0xd5, + 0xb5,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xeb,0x12,0x1d,0xf5,0xf5,0x1d, + 0x0d,0xe6,0xbe,0x97,0x81,0x81,0x81,0x81,0x82,0xa3,0xc5,0xe6,0x07,0x27,0x05,0xe4, + 0xc3,0xa1,0x8d,0x8d,0x85,0x81,0x81,0x82,0xa3,0xb9,0xbd,0xc3,0xe2,0x0b,0x1d,0xf2, + 0xc9,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xaf,0xd9,0x04,0x24,0xfa,0xd2,0xbf,0xbd,0xb3,0x97,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xb4,0xc6,0xde,0xfa,0x26,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc, + 0xb4,0x8b,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0,0xc3,0xb5,0xb5,0xbc,0xcc,0xcf, + 0xb5,0x92,0x81,0x8f,0xb8,0xe2,0x0b,0x23,0xfa,0xd3,0xb4,0xcb,0xe8,0x09,0x2b,0x16, + 0xea,0xc0,0x95,0x8c,0xb6,0xdf,0x07,0x27,0xff,0xdb,0xbf,0xb2,0xb0,0xb5,0xbb,0xc4, + 0xbe,0xa3,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xad,0xd6,0xff,0x26,0xfb,0xe0,0xe8,0xea, + 0xe7,0xdc,0xcb,0xb9,0xa7,0x91,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdd,0xfc, + 0x1d,0x18,0xf7,0xd9,0xb9,0x9a,0x81,0x81,0x81,0x81,0x9f,0xb4,0xb8,0xb8,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0xb8,0xb8,0xaa,0x8e,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8c,0xb6,0xdf,0x07,0x28, + 0xff,0xdb,0xbc,0xb0,0xbd,0xdd,0x04,0x29,0x04,0xdb,0xb3,0x89,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xb0,0xbc,0xda,0xff,0x26,0x05,0xdd,0xb4,0x8c,0x81,0x8f,0xb8,0xe2, + 0x0b,0x23,0xfa,0xd3,0xb4,0xca,0xe8,0x09,0x2b,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xac,0xc6, + 0xc7,0xbd,0xb5,0xb4,0xc1,0xd1,0xed,0x16,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81, + 0x8b,0xb5,0xdf,0x0b,0x24,0xfa,0xd1,0xb3,0xb2,0xb7,0xc0,0xb5,0x99,0x81,0x95,0xc0, + 0xea,0x13,0x1b,0xf1,0xc7,0xba,0xd4,0xf3,0x14,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x92,0xb9,0xe0,0x07,0x25,0xfc,0x09,0x1f,0xf7,0xd1,0xa9,0x82,0x81,0x81,0x81, + 0x81,0x8c,0xb6,0xdf,0x0a,0x19,0xf7,0x20,0xf7,0xea,0x12,0x0e,0x04,0x1d,0xf2,0xc9, + 0x9f,0x81,0x81,0x81,0x81,0x98,0xb9,0xdb,0xfc,0x1d,0x12,0xef,0xfc,0x20,0x11,0xf0, + 0xce,0xae,0x8c,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x2a,0x04,0x04,0x26, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdf,0xff,0x21,0x0d,0xec,0xca, + 0xb8,0xb8,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x90,0x93,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x93,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xbf,0xe7,0x12,0x23,0xfb,0xdf,0xdd,0xeb,0xff,0x1a,0x2e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd, + 0xa6,0x81,0x81,0x81,0xa9,0xd1,0xf7,0x1c,0x1c,0xff,0xe9,0xdf,0xde,0xe5,0xf1,0xf1, + 0xc7,0x9d,0x81,0x86,0xaf,0xd6,0xff,0x26,0x0d,0xec,0xdd,0xed,0x07,0x19,0x13,0x16, + 0xea,0xc0,0x95,0x82,0xaa,0xd2,0xf7,0x1d,0x16,0xf9,0xe5,0xdc,0xda,0xdf,0xe5,0xed, + 0xde,0xb6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2a,0x09,0xf5,0xf2,0xf2, + 0xf2,0xf2,0xec,0xe0,0xcc,0xb2,0x93,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xe1, + 0xff,0x21,0x14,0xf5,0xd5,0xb8,0x98,0x81,0x81,0x91,0xb9,0xdb,0xe2,0xe2,0xe2,0xef, + 0x1b,0x13,0xe7,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa9,0xd1,0xf7,0x1d, + 0x16,0xf7,0xe1,0xda,0xe2,0xf9,0x18,0x16,0xf1,0xcc,0xa5,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xdf,0xda,0xe1,0xf7,0x16,0x18,0xf3,0xcd,0xa7,0x81,0x81,0x86,0xaf,0xd7, + 0xff,0x26,0x0d,0xec,0xdd,0xec,0x07,0x16,0x19,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe7, + 0xef,0xe7,0xdf,0xdb,0xda,0xe1,0xf5,0x1a,0x14,0xec,0xc2,0x99,0x81,0x81,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2b,0x0a,0xea,0xdd,0xdc,0xe1,0xea,0xd4,0xad,0x83,0x91,0xba, + 0xe4,0x0d,0x25,0xff,0xe2,0xe0,0xf4,0x10,0x16,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0xa9,0xd1,0xf7,0x1f,0x0b,0x16,0x0f,0xe8,0xc1,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x86,0xb0,0xda,0x04,0x1e,0x06,0x13,0xeb,0xdc,0x05,0x1b,0x09,0x16,0xed,0xc2, + 0x99,0x81,0x81,0x81,0x90,0xb2,0xd3,0xf4,0x16,0x1c,0xf9,0xd7,0xe5,0x07,0x2b,0x0b, + 0xe8,0xc8,0xa6,0x85,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x1a,0x11,0x12,0x17, + 0xef,0xc8,0xa0,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd7,0xf9,0x1a,0x15,0xf3,0xe2,0xe2, + 0xe2,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0xb5,0xdc,0x04,0x25,0x18,0x09,0x06,0x12,0x1d,0x04,0x1e,0x09,0xdd, + 0xb2,0x88,0x95,0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9, + 0x94,0x81,0x81,0x81,0x99,0xbe,0xe1,0xff,0x1d,0x21,0x11,0x09,0x09,0x0e,0x19,0xf2, + 0xc8,0x9d,0x81,0x81,0xa0,0xc7,0xec,0x0f,0x29,0x11,0x09,0x12,0x1c,0xfc,0x11,0x16, + 0xea,0xc0,0x95,0x81,0x99,0xbf,0xe3,0x04,0x1f,0x1d,0x0e,0x06,0x06,0x09,0x0e,0x0e, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x21,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf1,0x0f,0x2b,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x15,0x06,0xee,0xce,0xab,0x85,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xc5, + 0xe4,0x05,0x25,0x12,0xf3,0xd4,0xb4,0x93,0x81,0x95,0xc0,0xea,0x0e,0x0e,0x0e,0x0e, + 0x1f,0x18,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x16,0x11,0xe5,0xd0, + 0xfa,0x26,0xff,0xd5,0xe2,0x0e,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99,0xbe,0xe2,0x04, + 0x1f,0x1a,0x0b,0x06,0x0b,0x1b,0x18,0xfb,0xdb,0xb8,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdc,0xba,0x94,0x81,0x81,0x81,0xa1,0xc7, + 0xed,0x10,0x29,0x11,0x09,0x12,0x1a,0xfb,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x11,0x09,0x06,0x06,0x0b,0x18,0x1c,0xff,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81, + 0x81,0xa5,0xcd,0xf3,0x16,0x25,0x0f,0x06,0x06,0x0b,0x06,0xda,0xb0,0x85,0x87,0xaf, + 0xd6,0xfc,0x20,0x1c,0x0b,0x0a,0x18,0x10,0xfc,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x9a,0xc1,0xe9,0x11,0x24,0x28,0xff,0xd9,0xb2,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd4,0xfc,0x28,0x22,0x05,0xdc,0xce,0xf6,0x1f,0x1f,0x11,0xe7,0xbd, + 0x92,0x81,0x81,0x86,0xaa,0xcc,0xed,0x0f,0x27,0x04,0xe1,0xbf,0xcd,0xef,0x12,0x24, + 0x04,0xe1,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x95,0xbc,0xe3,0x0b,0x28,0x2a,0x07, + 0xe0,0xb9,0x91,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x33,0x0f,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa4,0xc8,0xe8,0xff,0x12,0x19,0x16,0x0b,0xf9,0xf2,0x11,0x09,0xdd, + 0xb2,0x88,0x94,0xbe,0xe6,0xfa,0x07,0x0f,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0, + 0x81,0x81,0x81,0x81,0x83,0xa6,0xc5,0xe2,0xf9,0x0a,0x13,0x19,0x16,0x11,0x09,0xf1, + 0xc7,0x9d,0x81,0x81,0x8e,0xb2,0xd4,0xf1,0x0a,0x16,0x17,0x0d,0xf9,0xe5,0x0e,0x0e, + 0xea,0xc0,0x95,0x81,0x85,0xa7,0xc7,0xe3,0xfa,0x0b,0x14,0x19,0x19,0x13,0x0e,0x06, + 0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x11,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xab,0xcf,0xf0,0x0f,0x1d,0x06,0x06,0x06, + 0x06,0x09,0x16,0x29,0x09,0xe3,0xbb,0x92,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2, + 0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x89,0x89,0x81,0x81,0x8b, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0xa9, + 0xc8,0xe8,0x09,0x11,0x10,0xf0,0xcb,0xa1,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea,0x11,0x11,0xe5,0xd0, + 0xfa,0x11,0xff,0xd5,0xe2,0x0e,0x11,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x11,0x11, + 0xed,0xc2,0x98,0xb0,0xda,0x06,0x11,0xfc,0xd2,0xa8,0x81,0x81,0x84,0xa7,0xc7,0xe4, + 0xfb,0x0c,0x16,0x19,0x14,0x09,0xf5,0xdd,0xbf,0xa0,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdd,0xbf,0xa1,0x81,0x81,0x81,0x81,0x8e,0xb2, + 0xd4,0xf1,0x0a,0x16,0x16,0x0c,0xf7,0xea,0x16,0x16,0xea,0xc0,0x95,0x95,0xc0,0xea, + 0x11,0x11,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0a,0x11,0x16,0x19,0x19,0x13,0x09,0xf7,0xe0,0xc3,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x94,0xb8,0xd9,0xf5,0x0a,0x14,0x19,0x17,0x13,0x06,0xda,0xb0,0x85,0x81,0x9f, + 0xc3,0xe4,0xff,0x12,0x19,0x14,0x07,0xf0,0xfc,0x0e,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x8b,0xb2,0xd9,0xff,0x11,0x11,0xf1,0xc9,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf7,0x11,0x11,0xf7,0xcf,0xc1,0xe8,0x11,0x11,0x0b,0xe0,0xb7, + 0x8d,0x81,0x81,0x92,0xbc,0xe5,0x07,0x11,0x0f,0xec,0xc9,0xa7,0xb5,0xd7,0xf9,0x11, + 0x11,0xfb,0xd8,0xaf,0x85,0x81,0x81,0x81,0x81,0x85,0xac,0xd3,0xfa,0x22,0x1f,0xf7, + 0xd1,0xa9,0x82,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x94,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xc8,0xdc,0xe8,0xed,0xec,0xe3,0xd4,0xe1,0xe5,0xe5,0xd3, + 0xae,0x85,0x87,0xaa,0xc5,0xd2,0xdd,0xe5,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83, + 0x81,0x81,0x81,0x81,0x81,0x89,0xa7,0xbf,0xd3,0xe1,0xea,0xed,0xed,0xe7,0xdf,0xd2, + 0xb7,0x93,0x81,0x81,0x81,0x98,0xb6,0xcf,0xe2,0xec,0xed,0xe5,0xd5,0xd7,0xe2,0xe2, + 0xdb,0xb9,0x91,0x81,0x81,0x8b,0xa8,0xc1,0xd4,0xe2,0xea,0xed,0xed,0xea,0xe4,0xdc, + 0xcd,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xd7,0xb3, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe2,0x0a,0x26,0xff,0xe1,0xda,0xda, + 0xda,0xdf,0xf6,0x1e,0x17,0xed,0xc2,0x98,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc, + 0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x9d,0xb2,0xb3,0xa3,0x97,0x94, + 0xb9,0xe2,0x0e,0x21,0xf5,0xcc,0xa2,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0xae,0xcd,0xe5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xd9,0xc8, + 0xe4,0xe5,0xe5,0xcd,0xd7,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xbc,0x94,0xab,0xd1,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81,0x81,0x8b,0xa8,0xc2, + 0xd5,0xe4,0xeb,0xed,0xea,0xe1,0xd1,0xbb,0xa1,0x83,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xea,0xea,0xe7,0xdd,0xce,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x98, + 0xb6,0xd0,0xe3,0xed,0xed,0xe4,0xd3,0xea,0x16,0x16,0xea,0xc0,0x95,0x92,0xba,0xdd, + 0xe5,0xe5,0xde,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd4, + 0xe0,0xe7,0xea,0xed,0xed,0xea,0xe0,0xd2,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xba,0xd2,0xe1,0xea,0xed,0xed,0xe9,0xe2,0xce,0xa9,0x81,0x81,0x88, + 0xa9,0xc5,0xdb,0xe8,0xed,0xea,0xe0,0xcd,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc9,0xe4,0xe5,0xe5,0xdd,0xba,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9c,0xc4,0xe2,0xe5,0xe5,0xe1,0xc1,0xb3,0xd7,0xe5,0xe5,0xe5,0xd3,0xae, + 0x85,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xd3,0xb1,0x8e,0x9c,0xbf,0xde,0xe5, + 0xe5,0xe5,0xd1,0xab,0x82,0x81,0x88,0x98,0x9b,0x9b,0xb9,0xdc,0xff,0x27,0x0d,0xe6, + 0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0xf5, + 0xca,0xa0,0x93,0x8d,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81,0x81, + 0x90,0x93,0xb0,0xda,0x06,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa5,0xbc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, + 0xbe,0xaa,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xa3,0xb4,0xbf,0xc2,0xc2,0xba,0xad,0xb9,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x8b,0x9d,0xaa,0xb4,0xbb,0xc0,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9a,0xac,0xb8,0xc0,0xc2,0xc2,0xbe,0xb6,0xaa, + 0x98,0x81,0x81,0x81,0x81,0x81,0x95,0xab,0xba,0xc2,0xc2,0xbc,0xaf,0xb3,0xb8,0xb8, + 0xb4,0x9f,0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc0,0xc2,0xc2,0xc0,0xba,0xb3, + 0xa8,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb4,0x9b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0xba,0xb8, + 0xbc,0xce,0xf3,0x1c,0x15,0xeb,0xc2,0x98,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3, + 0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x90,0xb8,0xd9,0xda,0xcb,0xc1,0xbd, + 0xcd,0xef,0x16,0x17,0xef,0xc6,0x9c,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x92,0xae,0xba,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb5,0xab, + 0xba,0xba,0xba,0xae,0xb4,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0xa1,0xb7,0xba,0xba, + 0xb8,0xa3,0x83,0x96,0xb1,0xba,0xba,0xba,0xac,0x8f,0x81,0x81,0x81,0x81,0x87,0x9c, + 0xaf,0xbb,0xc2,0xc2,0xc0,0xb8,0xaa,0x97,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xab,0xbb,0xc2,0xc2,0xbb,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0xa1,0xb7, + 0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xae, + 0xb7,0xbd,0xc0,0xc2,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xab,0xb9,0xc0,0xc2,0xc2,0xbf,0xb9,0xac,0x92,0x81,0x81,0x81, + 0x8a,0xa2,0xb4,0xbf,0xc2,0xc1,0xb8,0xaa,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xab,0xba,0xba,0xba,0xb7,0xa1,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa8,0xb9,0xba,0xba,0xb9,0xa6,0x9b,0xb4,0xba,0xba,0xba,0xb2,0x98, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xb2,0x98,0x81,0x83,0xa3,0xb8,0xba, + 0xba,0xba,0xb1,0x96,0x81,0x86,0xa8,0xc1,0xc5,0xc4,0xd5,0xf3,0x17,0x1d,0xf9,0xd3, + 0xae,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x87,0xb1,0xda,0x05,0x24,0xfc, + 0xd5,0xc0,0xbd,0xb4,0x99,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82,0xa3, + 0xb9,0xbd,0xc3,0xe3,0x0b,0x1e,0xf5,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x93,0xbc,0xe1,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea, + 0xe6,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0x95,0x98,0x98,0x91,0x85,0x8f,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x92,0x95,0x95,0x93,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x95,0x98,0x98,0x94,0x8d,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x93,0x87,0x8a,0x8d,0x8d, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x96,0x98,0x98,0x95,0x90,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8c,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x25,0xff,0xed,0xe5,0xe2, + 0xe6,0xf1,0x0b,0x29,0x06,0xe0,0xb8,0x90,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x95,0xc0,0xea,0xff,0xf3,0xea,0xe7, + 0xf1,0x09,0x29,0x07,0xe1,0xb9,0x91,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x88,0x90,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8d,0x86, + 0x90,0x90,0x90,0x88,0x8c,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x91,0x98,0x98,0x96,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x92,0x98,0x98,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x8e, + 0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0x8d,0x93,0x96,0x98,0x98,0x95,0x8e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x90,0x96,0x98,0x98,0x95,0x8f,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x95,0x98,0x97,0x8f,0x84,0x8d,0x8d,0x8d,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x90,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x8f,0x90,0x90,0x8f,0x82,0x81,0x8c,0x90,0x90,0x90,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8b,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x90,0x8a,0x81,0x81,0x94,0xbd,0xe4,0xef,0xed,0xf9,0x12,0x25,0x05,0xe2,0xbf, + 0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd2,0xfa,0x20,0x10, + 0xf5,0xea,0xe7,0xd5,0xaf,0x86,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x92,0xbb, + 0xdf,0xe7,0xec,0xfc,0x1d,0x12,0xeb,0xc3,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd8,0xfb,0x16,0x25,0x16,0x0f,0x0e, + 0x11,0x19,0x1f,0x09,0xec,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1c,0x16,0x13, + 0x19,0x24,0x0d,0xee,0xcc,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x20,0x1d,0x05,0xe8,0xc8,0xa7, + 0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x07,0x1f, + 0x1c,0x13,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x13,0x16,0x21,0x18,0xfb,0xd9,0xb4,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xdb,0xf1,0xff,0x09,0x0e,0x0e, + 0x0b,0x04,0xf7,0xe5,0xcd,0xb0,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0xfb,0x06,0x0b,0x0e, + 0x09,0xfc,0xea,0xd0,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x0b,0x0b,0x05,0xf7,0xe3,0xca,0xac,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xca,0xe6,0xf9, + 0x04,0x09,0x09,0xdd,0xb2,0x88,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x95,0xc0, + 0xea,0x09,0x09,0xff,0xf3,0xdd,0xbf,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd, + 0xda,0xbd,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa0,0xb8,0xca,0xd7,0xdf,0xe2,0xe2, + 0xdf,0xda,0xcf,0xc0,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc5,0xd3,0xdd,0xe2,0xe2, + 0xdf,0xd5,0xc5,0xaf,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd7,0xdf,0xdf,0xdb,0xd0,0xbf,0xa8,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc0,0xd1, + 0xda,0xdd,0xdd,0xce,0xab,0x83,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x90,0xb6, + 0xd6,0xdd,0xdd,0xd7,0xcc,0xba,0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xa2,0xad,0xb5,0xb8,0xb8, + 0xb6,0xb1,0xa7,0x99,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x9e,0xaa,0xb3,0xb8,0xb8, + 0xb5,0xac,0x9e,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb2,0xa8,0x99,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x9a,0xa8, + 0xb0,0xb2,0xb2,0xab,0x92,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81,0x9b, + 0xaf,0xb2,0xb2,0xae,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8d,0x8d, + 0x8c,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8d,0x8d, + 0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x83,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81, + 0x86,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x85,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xc9,0xad,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xae,0xb2,0xb2,0xae,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xe7,0xbd,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x8d,0x90,0x90,0x8d,0x89,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x8c,0x8d,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0x90,0x90,0x8c,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x91,0x93,0x90,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x93,0x93,0x8f,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x84,0x88,0x88,0x88,0x88,0x88,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0x8d,0x8d,0x85,0x81,0x81,0x81,0x81,0x87,0x88,0x88,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x86,0x81,0x81,0x81,0x81,0x81,0x86,0x8e,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81, + 0x87,0x88,0x88,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb2,0xd3,0xdd,0xdd,0xd3,0xb2,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x88,0x88,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x8d,0xa0,0xae,0xb7,0xba,0xba,0xb8,0xb2,0xa8,0x90,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x85,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xa1,0xaf,0xb6,0xb8,0xb5,0xab,0x9c,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x92,0x81,0x81,0x81, + 0x81,0x81,0x91,0xa5,0xb3,0xba,0xba,0xb6,0xab,0x9a,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xa4,0xb3,0xbb,0xbd,0xba,0xb1,0xa1,0x8b,0x81,0x81,0x81,0x81,0x92,0xa9, + 0xb4,0xba,0xbd,0xbd,0xb9,0xaf,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9a,0xa6,0xae,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xa6,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x98,0xab,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x91,0xa5,0xb6,0xb8,0xb8,0xac,0x90,0x81,0x83,0xa0,0xb1,0xb2,0xb2,0xac,0x94,0x81, + 0x81,0x81,0x81,0x93,0xa7,0xb9,0xba,0xba,0xae,0x92,0x81,0x84,0xa2,0xb4,0xb5,0xb5, + 0xae,0x96,0x81,0x81,0x81,0x9b,0xaf,0xb8,0xba,0xba,0xb0,0x9f,0x87,0x81,0x83,0xa0, + 0xb1,0xb2,0xb2,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe5,0x09,0x09,0xe5,0xba,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x98,0xa6,0xaf,0xb2,0xb2,0xac,0xa0,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x8d,0x81,0x81,0x81,0x81,0x81,0x8a,0x90, + 0x89,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x81, + 0x9a,0xa7,0xa8,0xa8,0xa4,0x91,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x96,0xb0,0xc6,0xd6,0xe1,0xe5,0xe5,0xe2,0xdc,0xcc,0xaa,0x82,0x81,0x81, + 0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x9b,0xa7,0xae,0xb0,0xae,0xa7,0x9b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9c,0xa7,0xad,0xb0,0xb0,0xaa,0x9d,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xb3,0xc7,0xd7,0xdf,0xe2,0xdf,0xd3,0xc2,0xad,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb3,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xb9,0x9d,0x81,0x81, + 0x81,0x98,0xb5,0xcb,0xdb,0xe4,0xe5,0xdf,0xd3,0xbf,0xa5,0x86,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb3,0xc9,0xdb,0xe5,0xe7,0xe4,0xd9,0xc5,0xaa,0x8c,0x81,0x81,0x86,0xad,0xce, + 0xdd,0xe4,0xe7,0xe7,0xe2,0xd6,0xc1,0xa5,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xaf,0xc2,0xcf,0xd7,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xc6,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x84,0x98,0xab,0xbe,0xd1,0xe3,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0x9c,0xa9,0xb0,0xb0,0xab,0xa0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa2, + 0xb6,0xcb,0xdf,0xe2,0xe2,0xcb,0xa5,0x81,0x9b,0xbe,0xda,0xdd,0xdd,0xd0,0xad,0x85, + 0x81,0x8e,0xa5,0xb9,0xcd,0xe1,0xe5,0xe5,0xcd,0xa6,0x81,0x9c,0xbf,0xdc,0xdf,0xdf, + 0xd2,0xae,0x86,0x81,0x91,0xb7,0xd5,0xe2,0xe5,0xe3,0xd8,0xc3,0xa4,0x81,0x9c,0xbf, + 0xda,0xdd,0xdd,0xd0,0xad,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xea,0x16,0x0b,0xdf,0xb6,0x8c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa8,0xbe,0xce,0xd9,0xdd,0xdd,0xd5,0xc7,0xb5, + 0x9e,0x84,0x81,0x81,0x81,0x94,0xaa,0xba,0xb5,0x9d,0x81,0x81,0x81,0x96,0xb1,0xba, + 0xaf,0x99,0x83,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xbf,0x9e,0x81,0x81,0x99, + 0xbb,0xd1,0xd2,0xd2,0xcc,0xaf,0x89,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x91,0xb2,0xd2,0xeb,0xfc,0x0b,0x11,0x11,0x0c,0x06,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81, + 0x81,0x81,0x81,0x81,0x99,0xaf,0xc2,0xd0,0xd7,0xda,0xd7,0xd0,0xc2,0xaf,0x98,0x81, + 0x81,0x81,0x81,0x81,0x8b,0xac,0xc4,0xd0,0xd7,0xda,0xda,0xd3,0xc5,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xb9,0xd5,0xed,0xff,0x0b,0x0e,0x09,0xfb,0xe8,0xd0,0xb2,0x94,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa6,0xce,0xec,0xed,0xed,0xed,0xed,0xed,0xed,0xd8,0xb0,0x86,0x81, + 0x94,0xb6,0xd4,0xef,0x04,0x0e,0x11,0x09,0xf9,0xe0,0xc2,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0xa8,0xa8,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xb3,0xd4,0xee,0x04,0x0f,0x13,0x0e,0xff,0xe6,0xc8,0xa4,0x81,0x81,0x8d,0xb8,0xe2, + 0x06,0x0e,0x13,0x13,0x0c,0xfb,0xe0,0xbe,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x0a,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd5,0xe8,0xf7,0x04,0x06,0x09,0x09,0x09,0x09,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0xa5,0xbe,0xd1,0xe3,0xf6,0x0a,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x81,0x92,0xad,0xc2,0xd2,0xda,0xda,0xd5,0xc8,0xb3,0x99,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa9,0xc7, + 0xdb,0xef,0x04,0x0e,0xff,0xd5,0xab,0x8e,0xb2,0xd5,0xf9,0x09,0x06,0xdf,0xb5,0x8b, + 0x86,0xab,0xc9,0xde,0xf1,0x06,0x11,0xff,0xd5,0xab,0x8f,0xb2,0xd5,0xf9,0x0b,0x04, + 0xde,0xb5,0x8a,0x81,0x98,0xc2,0xed,0x0b,0x11,0x0e,0xfc,0xdf,0xba,0x93,0xb3,0xd6, + 0xf9,0x09,0x05,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x9c,0xaa,0xc6,0xef,0x1b,0x05,0xda,0xb1,0x90, + 0x81,0x81,0x81,0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa2,0x81,0x81,0xa1,0xb9,0xce,0xe3,0xd9,0xb7,0x94,0x8b,0x8b,0xaf,0xd2,0xe5, + 0xd3,0xbd,0xa6,0x87,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfb,0xd7,0xb2,0x8e,0x89,0xae, + 0xd3,0xf7,0xfc,0xfc,0xe7,0xbd,0x93,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0xa5,0xcb,0xee,0x0d,0x25,0x14,0x0e,0x0e,0x12,0x09,0xdd,0xb2,0x88,0x81,0x81, + 0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd3,0xe8,0xf9,0x04,0x06,0x04,0xf9,0xe8,0xd3,0xb9,0x9b, + 0x81,0x81,0x81,0x81,0x99,0xc3,0xe8,0xf9,0xff,0x06,0x04,0xfb,0xe9,0xcc,0xab,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92, + 0xb6,0xd7,0xf5,0x11,0x0d,0xff,0xfa,0xff,0x12,0x0b,0xee,0xcf,0xac,0x88,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x19,0x19,0x19,0x19,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xcd,0xf1,0x10,0x1a,0x0b,0x09,0x15,0x1c,0xfc,0xd9,0xb4,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd2,0xbd,0x9a,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x0b,0x1e,0x11,0x0e,0x1a,0x23,0x04,0xdc,0xb5,0x8c,0x81,0x8d,0xb8,0xe2, + 0x0e,0x0b,0x09,0x0b,0x1f,0x1c,0xf6,0xce,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd4,0xf1,0x10,0x1b,0xff,0xe8,0xce,0xb4,0x91,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb9, + 0xd9,0xf7,0x0f,0x20,0x2b,0x2c,0x16,0x16,0x17,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xba,0xe0,0xf6,0x0a,0x1d,0x23,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0x8e,0xb0,0xce,0xe8,0xfa,0x04,0x06,0xfc,0xee,0xd5,0xb6,0x94,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe3, + 0xff,0x15,0x17,0x2a,0xff,0xd5,0xab,0xa5,0xc9,0xec,0x0f,0x12,0xef,0xcb,0xa8,0x82, + 0x90,0xba,0xe4,0x04,0x18,0x14,0x28,0xff,0xd5,0xab,0xa6,0xc9,0xed,0x10,0x10,0xed, + 0xc9,0xa6,0x81,0x81,0x98,0xc2,0xed,0x04,0xff,0x17,0x19,0xef,0xc5,0xa6,0xca,0xed, + 0x11,0x12,0xee,0xcb,0xa7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x96,0x9b,0x97,0x88,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xaf,0xc3,0xd2,0xdd,0xf5,0x20,0xff,0xd5,0xc9,0xb2, + 0x8f,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe6,0x05,0x1d,0x1f,0x19,0x1a,0x24,0x13,0xfb, + 0xdc,0xb4,0x8a,0x92,0xba,0xdd,0xf3,0x09,0xf1,0xce,0xb2,0xb5,0xb5,0xc5,0xe8,0x0d, + 0xf7,0xe1,0xc1,0x99,0x81,0x8d,0xb4,0xd9,0xfc,0x21,0x11,0xec,0xc7,0xa3,0x9e,0xc2, + 0xe7,0x0c,0x22,0xfc,0xd9,0xb4,0x8d,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x89,0xb3,0xdb,0x04,0x29,0x05,0xec,0xe3,0xe2,0xe7,0xf1,0xda,0xb1,0x87,0x81,0x81, + 0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81, + 0x81,0x81,0x98,0xb9,0xd7,0xf5,0x0d,0x20,0x14,0x11,0x14,0x20,0x0d,0xf3,0xd7,0xb8, + 0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x12,0x0e,0x12,0x23,0x09,0xe5,0xbd,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6, + 0xcc,0xf1,0x13,0x05,0x04,0x04,0x04,0xfb,0xef,0x0d,0x0b,0xe7,0xc2,0x9b,0x81,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xb2,0x88,0x8e, + 0xb7,0xe0,0x07,0x1e,0xfa,0xe1,0xdf,0xf3,0x17,0x12,0xea,0xc1,0x98,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xf9,0xcf,0xa5,0x81,0x81,0x81,0x81,0x81,0x89, + 0xaf,0xd0,0xf0,0xf9,0xe7,0xe4,0xfb,0x23,0x11,0xe7,0xbd,0x93,0x81,0x8c,0xb5,0xdc, + 0xeb,0xe2,0xdd,0xe3,0x09,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa9,0xd0,0xf1,0x10,0x13,0xf9,0xe0,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x8e,0x90, + 0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x82,0xaa,0xcf, + 0xf4,0x16,0x32,0x47,0x50,0x26,0xfa,0xea,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xbb,0xe2,0x09,0x18,0x05,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81, + 0xa4,0xc8,0xec,0x0b,0x21,0x14,0x14,0x22,0x10,0xf1,0xce,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdb, + 0xff,0x06,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1f,0xfb,0xd8,0xb5,0x91,0x81, + 0x8b,0xb3,0xda,0xff,0x04,0xf7,0x23,0xff,0xd5,0xab,0xbd,0xe0,0x04,0x1d,0xf9,0xd5, + 0xb2,0x8e,0x81,0x81,0x92,0xb9,0xda,0xed,0xee,0x0f,0x15,0xed,0xc4,0xbd,0xe0,0x05, + 0x1e,0xfa,0xd7,0xb4,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x9a,0x9b,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xbe,0xc5,0xbf,0xad,0x92, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd2,0xe8,0xfa,0x06,0x0b,0x26,0x06,0xfc,0xee,0xc6, + 0x9d,0x81,0x81,0x81,0x8b,0xb2,0xd9,0xff,0x22,0x10,0xf7,0xed,0xef,0xfc,0x14,0xf5, + 0xd5,0xb0,0x88,0x94,0xbe,0xe6,0x07,0x29,0x09,0xe5,0xdc,0xdf,0xde,0xdc,0xff,0x23, + 0x0d,0xec,0xc6,0x9c,0x81,0x81,0x9e,0xc2,0xe7,0x0c,0x26,0xff,0xdc,0xb8,0xb2,0xd6, + 0xfb,0x21,0x0c,0xe8,0xc4,0x9f,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xba,0xb9,0xbf,0xc7,0xbd,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea,0xd7,0xb9,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81, + 0x81,0x8a,0xaf,0xd3,0xf5,0x14,0x12,0xfa,0xeb,0xe5,0xec,0xfc,0x16,0x14,0xf3,0xd0, + 0xac,0x87,0x81,0x81,0x9b,0xc5,0xef,0xf4,0xe8,0xe2,0xeb,0x0d,0x1b,0xf1,0xc7,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9e,0x8f,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb4, + 0xdc,0x04,0x0f,0xe9,0x04,0x06,0xfc,0x13,0xfc,0xf3,0x18,0xfa,0xd2,0xaa,0x81,0x81, + 0x81,0x81,0x81,0x9e,0xc1,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xc8,0xa7,0x81,0x95, + 0xbf,0xe9,0x13,0x11,0xe7,0xbf,0xb8,0xe0,0x0a,0x1c,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x81,0x81,0x85,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xb5,0xd3,0xd6,0xc0,0xd2,0xf7,0x21,0x11,0xe7,0xbd,0x92,0x81,0x81,0xa1,0xbb, + 0xd4,0xea,0xea,0xf3,0x11,0x18,0xf4,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0x82, + 0xab,0xd4,0xef,0xef,0xef,0xd8,0xbe,0xa5,0x8b,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba, + 0xba,0xb8,0xa3,0x83,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x8e,0xb8,0xe0, + 0x09,0x2e,0x51,0x6d,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xab,0xd2,0xf7,0xf1,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8b, + 0xb4,0xdb,0x04,0x26,0x04,0xec,0xeb,0xff,0x24,0x06,0xdf,0xb6,0x8d,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x94,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x81,0xa2,0xc8, + 0xe9,0xe0,0xf7,0x23,0xff,0xd5,0xb0,0xd3,0xf7,0x1a,0x07,0xe4,0xc1,0x9d,0x81,0x81, + 0x81,0xa1,0xc7,0xe7,0xde,0xf7,0x23,0xff,0xd5,0xb1,0xd4,0xf7,0x1b,0x05,0xe2,0xbf, + 0x9b,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x19,0x21,0xff,0xec,0xc9,0xd4,0xf7,0x1b, + 0x07,0xe3,0xc0,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb4,0xc4,0xc5,0xb8, + 0xa1,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa9,0xca,0xe5,0xef,0xe7,0xce,0xae, + 0x88,0x81,0x81,0x8e,0xb1,0xd3,0xf1,0x0d,0x21,0x1d,0x16,0x25,0x19,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x94,0xbe,0xe7,0x11,0x1e,0xf6,0xd5,0xc4,0xc7,0xd9,0xef,0xd9, + 0xb9,0x9a,0x81,0x87,0xaa,0xcc,0xee,0x0f,0x20,0xfb,0x05,0x0b,0x09,0xfc,0x17,0x15, + 0xf3,0xd2,0xb1,0x8e,0x81,0x81,0x89,0xad,0xd2,0xf5,0x1a,0x17,0xf1,0xcd,0xc7,0xec, + 0x11,0x1b,0xf6,0xd2,0xae,0x8a,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8c,0xb6,0xdf,0x09,0x2c,0x09,0xec,0xd4,0xbf,0xa9,0x9d,0x97,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x94,0xae,0xbe,0xc0,0xb3,0x9b,0xad,0xbd,0xc0,0xb4,0x9d,0x81,0x81, + 0x81,0x9b,0xc2,0xe8,0x0d,0x16,0xf3,0xd7,0xd5,0xdd,0xdd,0xda,0xf7,0x1a,0x0b,0xe6, + 0xc0,0x99,0x81,0x81,0x92,0xb5,0xcf,0xe3,0xef,0xf5,0xf5,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb5,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xe8,0x0b,0xff,0xe1,0x0b,0x06,0xdd,0xb3,0x89,0x81, + 0x81,0x81,0x81,0x85,0x9f,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xa3,0x8c,0x81,0x95, + 0xc0,0xea,0x15,0x11,0xe7,0xbd,0xb6,0xdf,0x09,0x1b,0xf2,0xc8,0x9d,0x81,0x81,0x81, + 0x8e,0x90,0x90,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x90,0x90,0x8b,0x81,0x81,0x81, + 0x81,0x97,0xac,0xba,0xd4,0xf0,0x0f,0x24,0xff,0xdb,0xb4,0x8b,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x16,0x1b,0x19,0xf7,0xe3,0xc7,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xb8,0xc5,0xc5,0xc5,0xb6,0x9d,0x83,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5, + 0xe5,0xde,0xbc,0x94,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x95,0xbf,0xe9, + 0x13,0x3c,0x66,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xbd,0xd4,0xcd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94, + 0xbd,0xe7,0x11,0x17,0xee,0xc8,0xc5,0xed,0x16,0x13,0xe7,0xbe,0x94,0x81,0x91,0xa5, + 0xba,0xc8,0xbc,0x9e,0xa6,0xb9,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x81,0x8e,0xae, + 0xc1,0xcd,0xf7,0x23,0xff,0xd5,0xc7,0xeb,0x0f,0x14,0xf1,0xcd,0xa9,0x86,0x81,0x81, + 0x81,0x8d,0xac,0xbf,0xcd,0xf7,0x23,0xff,0xd5,0xc8,0xec,0x0f,0x12,0xee,0xcb,0xa7, + 0x84,0x81,0x81,0x81,0x92,0xb5,0xdd,0xf5,0xf5,0x05,0x27,0xff,0xd7,0xec,0x0f,0x13, + 0xf0,0xcc,0xa9,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb9,0xd7,0xec,0xef,0xdd, + 0xbf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8b,0x94,0x95,0x91,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xe2,0x07,0x1b,0x0b,0xe7,0xc0, + 0x98,0x81,0x81,0xa1,0xc7,0xec,0x0f,0x27,0x0b,0xf5,0x06,0x19,0xef,0xfc,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x14,0xea,0xc1,0x9a,0x9f,0xb7,0xc5,0xba, + 0x9d,0x81,0x81,0x81,0x91,0xb2,0xd4,0xf5,0x18,0x21,0x1f,0x16,0x1b,0x26,0x1e,0xfb, + 0xd9,0xb8,0x97,0x81,0x81,0x81,0x81,0x98,0xbc,0xe0,0x05,0x2a,0x07,0xe2,0xdb,0xff, + 0x25,0x05,0xe1,0xbd,0x99,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x94,0xb5,0xd4,0xf1,0x14,0x27,0x0f,0xf9,0xe3,0xcd,0xb5,0x9c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x94,0x95,0x8c,0x81,0x87,0x94,0x95,0x8d,0x81,0x81,0x81, + 0x81,0xaa,0xd2,0xfa,0x21,0xff,0xdb,0xe8,0xfc,0x07,0x07,0xff,0xe4,0x05,0x1e,0xf7, + 0xcf,0xa7,0x81,0x81,0xa7,0xcd,0xee,0x09,0x19,0x16,0x16,0x18,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x81,0x9e,0xc2,0xe6,0xee,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0, + 0xea,0x16,0xfa,0xd7,0x04,0x12,0x11,0x04,0xea,0xda,0x06,0x0b,0xdf,0xb5,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91, + 0xbb,0xe4,0x0c,0x1b,0xf5,0xdc,0xda,0xf1,0x14,0x11,0xe8,0xc0,0x97,0x81,0x81,0xa1, + 0xb7,0xba,0xba,0xba,0xda,0x06,0x26,0xfa,0xd0,0xba,0xba,0xba,0xb3,0x9a,0x81,0x81, + 0x8e,0xa8,0xc2,0xdb,0xf5,0x10,0x22,0x07,0xe8,0xc7,0xa2,0x81,0x81,0x81,0x8a,0xb0, + 0xda,0xff,0xff,0x04,0x12,0x1e,0x04,0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0x9b,0x9b,0x9b,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11, + 0x11,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x95,0xc0,0xea, + 0x16,0x40,0x69,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x81,0x82,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xaa,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x9a,0x84,0x81,0x95, + 0xc0,0xea,0x16,0x13,0xe7,0xbd,0xbd,0xe7,0x13,0x16,0xea,0xc0,0x95,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcc,0xdf,0xf3,0xdd,0xb9,0x96,0x81,0x81,0x81,0x81,0x81,0x8b, + 0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xde,0xff,0x20,0xfc,0xd9,0xb6,0x92,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa3,0xcd,0xf7,0x23,0xff,0xd5,0xdf,0x04,0x1e,0xfb,0xd8,0xb4,0x91, + 0x81,0x81,0x81,0x81,0x9d,0xc7,0xf1,0xf7,0xf5,0x09,0x25,0xff,0xdf,0x04,0x20,0xfc, + 0xd9,0xb5,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xf3,0x13,0x17,0xfa, + 0xd4,0xac,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x88,0xa1,0xb4,0xbe,0xc0,0xbb,0xac,0x97,0x81,0x93,0xa1,0xa3,0xa3,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x15,0x3c,0x1a,0xef,0xc5, + 0x9b,0x81,0x88,0xb0,0xd8,0xff,0x26,0x0d,0xea,0xe2,0x0b,0x13,0xe8,0xd5,0xda,0xbd, + 0x97,0x81,0x81,0x99,0xad,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xb0,0xb0,0xb0,0xad,0x9b, + 0x81,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x19,0x18,0xfa,0xea,0xf4,0x10,0x26,0xff, + 0xd9,0xb1,0x89,0x81,0x81,0x81,0x81,0x82,0xa7,0xcb,0xef,0x14,0x1b,0xf5,0xef,0x14, + 0x14,0xf0,0xcb,0xa7,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x82, + 0xa8,0xcd,0xf1,0x10,0x1c,0x09,0x1e,0x1d,0x07,0xf0,0xd7,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xb5,0xde,0x07,0x19,0xf1,0xe6,0x09,0x21,0x0e,0x0b,0x11,0xe5,0xf5,0x1d,0x04, + 0xdb,0xb2,0x89,0x8a,0xb4,0xdd,0x06,0x23,0xfc,0xec,0xea,0x09,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x91,0xb5,0xd9,0xfc,0x14,0xff,0xdd,0xd5,0xf7,0x13,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbd, + 0xe7,0x11,0xff,0xd7,0x04,0x06,0xfb,0x10,0xeb,0xe1,0x0a,0x07,0xdd,0xb3,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86, + 0xaf,0xd5,0xfa,0x1b,0x14,0x06,0x04,0x11,0x1a,0xfb,0xd7,0xb2,0x8b,0x81,0x92,0xba, + 0xdd,0xe5,0xe5,0xe5,0xe5,0x06,0x26,0xfa,0xe5,0xe5,0xe5,0xe5,0xd5,0xb0,0x88,0x88, + 0xac,0xc9,0xe3,0xfc,0x17,0x1a,0xff,0xe6,0xd0,0xcf,0xbd,0x9b,0x81,0x87,0xaa,0xc3, + 0xc6,0xd5,0xd5,0xda,0xf6,0x21,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x92,0xbc,0xe6, + 0x0f,0x38,0x60,0x7b,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x96,0xaa,0xb5,0xb4,0xa8,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xca,0xca,0xdf,0x0b,0x23,0xf7,0xcd,0xca,0xc0,0xa1,0x81,0x94, + 0xbe,0xe7,0x13,0x16,0xed,0xc7,0xc8,0xef,0x17,0x11,0xe7,0xbd,0x93,0x95,0xbf,0xe9, + 0x04,0x13,0xf0,0xcd,0xe7,0x05,0x18,0xf3,0xd0,0xac,0x89,0x81,0x81,0x81,0x81,0x81, + 0xa3,0xcd,0xf7,0x16,0xff,0xd5,0xf5,0x19,0x09,0xe6,0xc2,0x9e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa3,0xcd,0xf7,0x13,0xff,0xd5,0xf5,0x19,0x07,0xe3,0xc0,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x19,0x1b,0x14,0x05,0xea,0xf5,0x19,0x09,0xe5, + 0xc2,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x28,0x2f,0x06, + 0xda,0xb0,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa7,0xc4,0xda,0xe7,0xea,0xe3,0xd2,0xba,0x9f,0xb4,0xcb,0xcd,0xcd,0xc2, + 0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb9,0xdf,0xff,0x13,0x05,0xe3,0xbd, + 0x95,0x81,0x91,0xba,0xe4,0x0d,0x23,0xfa,0xd3,0xe7,0x11,0x0e,0xe2,0xb9,0xb1,0xa0, + 0x82,0x81,0x8f,0xb5,0xd4,0xda,0xef,0x1b,0x13,0xe7,0xda,0xda,0xda,0xda,0xd5,0xb7, + 0x91,0x81,0x81,0x81,0x88,0xb1,0xda,0x04,0x2c,0x04,0xde,0xc1,0xd4,0xfa,0x23,0x0e, + 0xe5,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x22,0x0a,0x04,0x22, + 0xff,0xda,0xb6,0x92,0x81,0x81,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x8f, + 0xb8,0xe0,0x07,0x24,0xff,0xe3,0xfa,0x0f,0x26,0x12,0xf7,0xda,0xba,0x96,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbc,0xe6,0x11,0x11,0xe7,0xf9,0x20,0x05,0xe7,0xe1,0xed,0xe1,0xea,0x13,0x0d, + 0xe2,0xb9,0x8f,0x8b,0xb5,0xdf,0x0b,0x1e,0xf5,0xe4,0xf5,0x10,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x85,0xa8,0xcc,0xef,0x13,0x15,0xf1,0xce,0xee,0x10,0x17,0xf4,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa2,0x91, + 0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xa8,0x95,0x81,0x8c,0xb5, + 0xdd,0x05,0x0d,0xe8,0x04,0x06,0xe9,0x11,0xfc,0xf1,0x17,0xfb,0xd3,0xab,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9c,0xbf,0xdf,0xf9,0x0b,0x14,0x14,0x0b,0xf7,0xdd,0xbf,0x9d,0x81,0x81,0x95,0xc0, + 0xea,0x11,0x11,0x11,0x11,0x12,0x2a,0x11,0x11,0x11,0x11,0x0b,0xdf,0xb5,0x8b,0x95, + 0xbf,0xe7,0x05,0x1f,0x16,0xfa,0xfa,0xfa,0xfa,0xf9,0xd2,0xa8,0x81,0x94,0xbe,0xe6, + 0xef,0xeb,0xea,0xef,0x04,0x27,0x0c,0xe4,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8a,0xb3,0xdb, + 0xff,0x27,0x47,0x5e,0x50,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x99, + 0xb8,0xd1,0xdf,0xdd,0xce,0xb4,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd3,0xf5,0xf5,0xf5,0x0b,0x23,0xf7,0xf5,0xf5,0xdb,0xb2,0x88,0x8d, + 0xb6,0xdf,0x06,0x25,0x04,0xeb,0xeb,0x04,0x26,0xff,0xdb,0xb3,0x8b,0x90,0xb6,0xda, + 0xfc,0x1f,0x09,0xe5,0xd6,0xf9,0x1d,0x0b,0xe7,0xc3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc8,0xe8,0xea,0xea,0xe8,0x0d,0x15,0xf1,0xce,0xab,0x8b,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc7,0xe6,0xe7,0xe7,0xe9,0x0d,0x14,0xf0,0xcd,0xa9,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xc3,0xe6,0xee,0xef,0xec,0xdf,0xe9,0x0d,0x14,0xf1,0xce, + 0xaa,0x8d,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa2,0xc9,0xef,0x0c,0x0f,0xf5, + 0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc2,0xe3,0xff,0x11,0x16,0x0b,0xf5,0xdb,0xbd,0xc7,0xef,0xf7,0xf7,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc5,0xde,0xe7,0xe0,0xc8,0xa9, + 0x85,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf2,0xc8,0xed,0x17,0x09,0xdd,0xb4,0x8a,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x06,0x06,0x1c,0x14,0x06,0x06,0x06,0x06,0x06,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xfa,0xd0,0xa7,0xc7,0xf1,0x1b,0x14, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x96,0xaf,0xb8,0xc5,0xe8,0x0d,0x1f,0x1a,0x0d, + 0xe8,0xc5,0xb8,0xae,0x94,0x81,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x95, + 0xc0,0xea,0x13,0x16,0xed,0xc5,0xd5,0xec,0x04,0x1f,0x16,0xf4,0xd1,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x15,0x0b,0xe1,0x04,0x1f,0xf5,0xcd,0xb8,0xc6,0xc1,0xe4,0x0e,0x12, + 0xe7,0xbd,0x93,0x86,0xb0,0xd8,0xff,0x21,0x14,0x0e,0x18,0xff,0x1e,0xf2,0xc8,0x9d, + 0x81,0x81,0x9c,0xbf,0xe3,0x06,0x21,0xfc,0xdb,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x97, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xcb,0xaf, + 0x8b,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xcf,0xb2,0x8d,0x81,0xa6, + 0xcd,0xf1,0x14,0x04,0x04,0x04,0xda,0xff,0x04,0x0b,0x0c,0xe8,0xc2,0x9c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xa3,0xbf,0xd4,0xe3,0xea,0xea,0xe2,0xd3,0xbd,0xa1,0x83,0x81,0x81,0x95,0xc0, + 0xea,0x0e,0x0e,0x0e,0x0e,0x0f,0x29,0x0e,0x0e,0x0e,0x0e,0x0b,0xdf,0xb5,0x8b,0x95, + 0xc0,0xea,0x16,0x29,0x29,0x26,0x26,0x26,0x26,0xfc,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x16,0x16,0x16,0x19,0x23,0x11,0xf5,0xd3,0xad,0x86,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa3,0xc8, + 0xec,0x0b,0x25,0x36,0x41,0x26,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x89,0xaf, + 0xd4,0xf3,0x09,0x06,0xf0,0xd0,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xab,0xd5,0xff,0x21,0x21,0x23,0x29,0x21,0x21,0x09,0xdd,0xb2,0x88,0x81, + 0xa8,0xce,0xf1,0x10,0x23,0x14,0x14,0x21,0x0a,0xeb,0xc8,0xa2,0x81,0x81,0x9f,0xc1, + 0xe3,0x06,0x20,0xfc,0xda,0xe3,0x06,0x21,0xfc,0xda,0xb6,0x93,0x81,0x81,0x81,0x81, + 0x8e,0xae,0xbf,0xc0,0xdc,0xff,0x22,0xfc,0xdb,0xb7,0xb5,0xb5,0xa7,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x8d,0xac,0xbc,0xbd,0xdd,0xff,0x20,0xfc,0xd9,0xc0,0xbd,0xb3,0xa0, + 0x85,0x81,0x81,0x81,0x8a,0xaa,0xbe,0xc5,0xc5,0xc2,0xdd,0xff,0x21,0xfc,0xda,0xb8, + 0xb8,0xb7,0xa9,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xb4,0xd2,0xe5,0xe7,0xd6, + 0xb9,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xfb,0x1f,0x14,0x0e,0x1f,0x16,0xf7,0xdb,0xcb,0xf5,0x1f,0x06,0xdc, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0xfa,0xfa,0xda,0xb0, + 0x85,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc9,0xf2,0x1d,0x04,0xd7,0xad,0x84,0x81, + 0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0x25,0x20,0x19,0x19,0x19,0x19,0x19,0xed,0xc2, + 0x98,0x81,0x81,0x81,0x8d,0xb8,0xe2,0x0e,0x23,0xf7,0xcd,0xa4,0xc7,0xf1,0x1b,0x15, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x84,0xad,0xd2,0xe2,0xe2,0xe2,0xf7,0x1d,0x1d,0xf7, + 0xe2,0xe2,0xe2,0xd0,0xaa,0x82,0x81,0x81,0x88,0x98,0x9b,0x9b,0x98,0x86,0x81,0x95, + 0xc0,0xea,0x13,0x19,0xf1,0xcd,0xb1,0xc8,0xe3,0x04,0x26,0x09,0xe1,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x0b,0xdf,0x06,0x1e,0xf2,0xc8,0xa5,0xb4,0xb8,0xe2,0x0e,0x13, + 0xe7,0xbd,0x93,0x81,0xa1,0xc5,0xe4,0xfc,0x06,0x04,0xf4,0xf9,0xfc,0xf1,0xc7,0x9f, + 0x81,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe7,0xd8,0xfa,0x1d,0x09,0xe6,0xc3,0xa1,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xe9,0xbf, + 0x95,0x95,0xc0,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,0xc0,0x95,0x81,0x93, + 0xb7,0xd9,0xf7,0x13,0x0b,0xfc,0xf7,0xff,0x10,0x0d,0xf0,0xd0,0xae,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0x9b,0xae,0xba,0xc0,0xc0,0xb9,0xad,0x9a,0x82,0x81,0x81,0x81,0x91,0xb9, + 0xdb,0xe2,0xe2,0xe2,0xe2,0x06,0x26,0xfa,0xe2,0xe2,0xe2,0xe2,0xd4,0xaf,0x87,0x95, + 0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xd2,0xa8,0x81,0x95,0xc0,0xea, + 0x04,0x06,0x06,0x04,0xfa,0xec,0xd6,0xb9,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8e,0xb0, + 0xce,0xea,0xff,0x0e,0x19,0x1d,0xfa,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x94,0xbd, + 0xe7,0x0f,0x2f,0x2c,0x0a,0xe1,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xaa,0xd5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdd,0xb2,0x88,0x81, + 0x9f,0xb6,0xd4,0xed,0xfc,0x06,0x04,0xfa,0xe7,0xce,0xb7,0xa1,0x81,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xcf,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x81,0x8a,0xac,0xd0,0xf3,0x17,0x0b,0xe7,0xdf,0xdf,0xdf,0xdf,0xc5,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8a,0xad,0xd1,0xf4,0x18,0x09,0xe6,0xe4,0xea,0xe7,0xd9,0xc1, + 0xa3,0x81,0x81,0x81,0x81,0x87,0x95,0x9a,0xad,0xd0,0xf3,0x18,0x0b,0xe6,0xe1,0xe2, + 0xe2,0xe1,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0xfc,0xfc,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x90,0xba,0xe3,0x0c,0x19,0xf3,0xe5,0xfc,0x1c,0x16,0xfb,0xea,0xff,0x25,0xfc,0xd4, + 0xab,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x26,0x06,0xda,0xb0, + 0x85,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf7,0xcf,0xf7,0x23,0xfc,0xd2,0xa8,0xa9,0x99, + 0x81,0x81,0x94,0xbd,0xe3,0xed,0xef,0x1b,0x13,0xed,0xed,0xed,0xed,0xed,0xe4,0xbf, + 0x96,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x09,0x28,0xff,0xd6,0xb6,0xd2,0xf9,0x22,0x0e, + 0xe4,0xbb,0x91,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0e,0x0e,0x0e,0x1d,0x1d,0x0e, + 0x0e,0x0e,0x06,0xda,0xb0,0x85,0x81,0x86,0xa8,0xc1,0xc5,0xc5,0xc0,0xa7,0x84,0x8f, + 0xb7,0xdf,0x05,0x29,0x09,0xeb,0xd2,0xba,0xc8,0xef,0x19,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbd,0xe7,0x13,0x0e,0xe4,0xff,0x23,0xfa,0xd6,0xcf,0xdc,0xd5,0xe7,0x11,0x11, + 0xe5,0xbb,0x91,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdb,0xb8, + 0x8f,0x93,0xbd,0xe7,0x10,0x1e,0xf3,0xd0,0xea,0x12,0x19,0xef,0xcd,0xaa,0x88,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0x16,0x29,0x29,0x29,0x29,0x29,0x16,0xea,0xc0,0x95,0x81,0x81, + 0x9d,0xbb,0xd8,0xef,0x04,0x0d,0x11,0x0b,0xfc,0xea,0xd2,0xb4,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0x90,0x95,0x95,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x9f, + 0xb4,0xb8,0xb8,0xb8,0xda,0x06,0x26,0xfa,0xd0,0xb8,0xb8,0xb8,0xb1,0x98,0x81,0x8c, + 0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xbf,0x9c,0x81,0x8c,0xb1,0xce, + 0xd7,0xda,0xda,0xd7,0xd2,0xc5,0xb3,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x92, + 0xaf,0xc6,0xd8,0xe6,0xed,0xf2,0xf1,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x95,0xc0, + 0xea,0x14,0x3c,0x38,0x0f,0xe5,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc1,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc6,0xa6,0x81,0x8f, + 0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xdd,0xba,0x92,0x81,0x81,0x90, + 0xb3,0xd5,0xf7,0x21,0x0b,0xdf,0xd9,0xfb,0x26,0x07,0xdd,0xb2,0x88,0x81,0x81,0x81, + 0x81,0xa0,0xc4,0xe7,0x0b,0x17,0xf3,0xde,0x04,0x0b,0x0b,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa1,0xc5,0xe8,0x0b,0x15,0xf1,0xf9,0x0d,0x16,0x11,0xfc,0xde, + 0xba,0x94,0x81,0x81,0x81,0x81,0x81,0xa1,0xc4,0xe7,0x0b,0x17,0xf3,0xdf,0x04,0x0e, + 0x0e,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x81,0x88,0x9a,0xba,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x13,0x11,0xe7,0xc2,0xdf,0xfc,0x19,0x1f,0x16,0x20,0x10,0xed,0xc7, + 0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x8d,0xb6,0xdf,0x07,0x2c,0x06,0xe3,0xfc,0x21,0xf5,0xcc,0xce,0xd2,0xb9, + 0x94,0x81,0x85,0xa7,0xbe,0xc5,0xef,0x1b,0x13,0xe7,0xc2,0xc2,0xc2,0xc2,0xbf,0xa9, + 0x87,0x81,0x81,0x81,0x84,0xad,0xd5,0xfc,0x24,0x0f,0xf0,0xdf,0xed,0x0c,0x25,0xff, + 0xd8,0xb1,0x88,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x0b,0x0b,0x0b,0x1b,0x1b,0x0b, + 0x0b,0x0b,0x06,0xda,0xb0,0x85,0x81,0x94,0xbd,0xe4,0xef,0xef,0xe2,0xbb,0x91,0x81, + 0xa6,0xcb,0xee,0x0f,0x27,0x0d,0xf4,0xdf,0xce,0xf3,0x1c,0x0e,0xe5,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb8,0xe2,0x0b,0x15,0xec,0xf4,0x1a,0x12,0xfc,0xf7,0x04,0xe5,0xee,0x17,0x09, + 0xdf,0xb6,0x8c,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xe7,0xbd, + 0x93,0x8b,0xb2,0xd5,0xf9,0x1d,0x0b,0xe6,0xd8,0xfa,0x1d,0x09,0xe5,0xc3,0xa0,0x81, + 0x81,0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x16,0x16,0xea,0xc0, + 0x95,0x95,0xc0,0xea,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xea,0xc0,0x95,0x81,0x81, + 0x81,0x9d,0xb5,0xc9,0xda,0xe2,0xe5,0xe1,0xd6,0xc5,0xaf,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x89,0x81,0x81,0x81, + 0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x9c,0x83,0x81,0x81,0x93,0xa7, + 0xad,0xb0,0xb0,0xaf,0xa8,0x9e,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x8c,0xa0,0xb1,0xbd,0xc4,0xc8,0xc7,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x8f,0xb7, + 0xde,0xff,0x1a,0x18,0xfc,0xd9,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x9e,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa1,0x8a,0x81,0x93, + 0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xea,0xc0,0x95,0x81,0x86,0xa9, + 0xcb,0xee,0x10,0x15,0xf1,0xd0,0xef,0x13,0x14,0xf1,0xcd,0xa8,0x81,0x81,0x81,0x81, + 0x94,0xb7,0xdb,0xfc,0x22,0xff,0xdc,0xf5,0x19,0x04,0x26,0xfa,0xd0,0xa5,0x81,0x81, + 0x81,0x81,0x81,0x94,0xb8,0xdb,0xff,0x22,0xff,0xdb,0xff,0x0a,0xfc,0x0f,0x19,0xf1, + 0xc8,0x9e,0x81,0x81,0x81,0x81,0x94,0xb7,0xdb,0xff,0x22,0xff,0xdc,0xf5,0x1a,0x04, + 0x26,0xfa,0xd0,0xa5,0x81,0x81,0x81,0x81,0x94,0xad,0xc1,0xcd,0xe5,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbe,0xe6,0xf2,0xf2,0xe1,0xb9,0xc1,0xdd,0xf6,0x09,0x0e,0x06,0xf1,0xd4,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0xa9,0xd1,0xf6,0x1a,0x1e,0xff,0x04,0x1b,0xef,0xea,0xf5,0xf2,0xc8, + 0x9d,0x81,0x81,0x86,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x98,0x98,0x98,0x96,0x90, + 0x8a,0x81,0x81,0x81,0x8a,0xac,0xcd,0xee,0x13,0x2b,0x14,0x0b,0x12,0x29,0x19,0xf5, + 0xd4,0xb2,0x91,0x81,0x81,0x81,0x84,0xac,0xd0,0xdf,0xdf,0xdf,0xed,0x19,0x19,0xed, + 0xdf,0xdf,0xdf,0xce,0xa9,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x91,0xb2,0xd2,0xee,0x07,0x1f,0x19,0x04,0xed,0x0a,0x21,0xfc,0xd8,0xb1,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd7,0xff,0x21,0xfa,0xdf,0xfc,0x12,0x1b,0x19,0x0f,0xe5,0xfb,0x23,0xfc, + 0xd5,0xad,0x84,0x95,0xc0,0xea,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xe7,0xbd, + 0x93,0x81,0x9c,0xbf,0xe3,0x07,0x21,0xfc,0xda,0xe3,0x05,0x20,0xfc,0xdb,0xb9,0x96, + 0x81,0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x8c,0xb1,0xcd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcd,0xb1,0x8c,0x81,0x81, + 0x81,0x81,0x91,0xa4,0xb1,0xb9,0xba,0xb7,0xaf,0x9f,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0x8d,0x8d,0xb0,0xda,0x06,0x26,0xfa,0xd0,0xa5,0x8d,0x8d,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x85,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x9a,0xba,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x89,0x94,0x9a,0x9d,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0xa4, + 0xc5,0xe0,0xf1,0xef,0xde,0xc1,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbd,0xe7,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0xea,0xc0,0x95,0x81,0x9e,0xc1, + 0xe3,0x06,0x20,0xfc,0xdb,0xe3,0x06,0x22,0xfc,0xda,0xb7,0x93,0x81,0x81,0x81,0x87, + 0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe8,0x0d,0x0f,0xfc,0x26,0xfa,0xd0,0xaa,0x8e,0x81, + 0x81,0x81,0x88,0xac,0xcf,0xf1,0x16,0x0b,0xe7,0xc4,0xe6,0xe6,0xdb,0x04,0x1f,0xf5, + 0xca,0xa0,0x81,0x81,0x81,0x88,0xab,0xce,0xf1,0x15,0x0c,0xe8,0xe9,0x0d,0x0f,0xfc, + 0x26,0xfa,0xd0,0xaa,0x8e,0x81,0x81,0x91,0xb2,0xd0,0xe7,0xf6,0xfc,0x11,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x87,0xaa,0xc3,0xc8,0xc8,0xc1,0xa6,0xa2,0xbc,0xd1,0xdf,0xe2,0xdd,0xcd,0xb5,0x98, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x98,0xbc,0xdf,0xfc,0x18,0x25,0x19,0x1d,0x0e,0x13,0x1e,0xf2,0xc8, + 0x9d,0x81,0x81,0xa1,0xb7,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x82,0xa4,0xc5,0xe6,0x09,0x23,0x04,0x11,0x16,0x11,0x04,0x1f,0x0f, + 0xee,0xcc,0xaa,0x89,0x81,0x81,0x88,0xb2,0xdc,0xf7,0xf7,0xf7,0xf7,0x19,0x19,0xf7, + 0xf7,0xf7,0xf7,0xd9,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x96,0xb2,0xcd,0xe4,0xfb,0x10,0x25,0x16,0x1d,0x05,0xe6,0xc4,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa2,0xca,0xf1,0x17,0x0d,0xea,0xda,0xea,0xef,0xef,0xe7,0xea,0x0f,0x14,0xee, + 0xc7,0xa0,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0xb4, + 0x8d,0x81,0x85,0xa8,0xcc,0xf0,0x14,0x14,0xf1,0xcd,0xee,0x10,0x16,0xf3,0xd2,0xad, + 0x85,0x81,0x91,0xa2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xc0,0xea,0x16,0x16,0xea,0xc0, + 0x95,0x81,0x93,0xa5,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa5,0x93,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x8f,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94, + 0xae,0xb8,0xb8,0xb8,0xda,0xfa,0xfa,0xf7,0xcf,0xb8,0xb8,0xb8,0xaa,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x1b,0xf1,0xc8,0xb9,0xd5,0xf5,0x18,0x23,0xf7,0xcd,0xae,0x96,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x89, + 0xa6,0xbb,0xc7,0xc6,0xb9,0xa2,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0xb4,0xd5,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd6,0xb6,0x90,0x90,0xb6,0xd9, + 0xfb,0x1f,0x09,0xe6,0xd6,0xf9,0x1d,0x0b,0xe7,0xc4,0xa0,0x81,0x81,0x81,0x81,0x9e, + 0xc2,0xe6,0x09,0x18,0xf5,0xdc,0xff,0x1d,0xf9,0xfc,0x26,0xfa,0xe2,0xc9,0xa3,0x81, + 0x81,0x81,0x9f,0xc2,0xe6,0x0a,0x18,0xf3,0xd0,0xad,0xc6,0xe0,0xfa,0x17,0x0b,0xe8, + 0xc2,0x99,0x81,0x81,0x81,0x9e,0xc2,0xe6,0x09,0x18,0xf4,0xdc,0xff,0x1d,0xf9,0xfc, + 0x26,0xfa,0xe2,0xc9,0xa3,0x81,0x81,0xa6,0xcc,0xee,0x0b,0x1f,0x1d,0x19,0x16,0xea, + 0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x9b,0x9d,0x9d,0x99,0x87,0x81,0x98,0xaa,0xb6,0xb8,0xb4,0xa7,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0xa3,0xc1,0xde,0xf3,0x04,0x14,0x16,0x0f,0x0b,0xff,0xef,0xc7, + 0x9d,0x81,0x92,0xba,0xdd,0xe5,0xef,0x1b,0x13,0xe7,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x92,0xbb,0xdf,0xff,0x22,0x0d,0xe8,0xe7,0xea,0xe7,0xe4,0x07,0x29, + 0x07,0xe6,0xc2,0x9a,0x81,0x81,0x88,0xb2,0xdd,0x09,0x21,0x21,0x21,0x29,0x29,0x21, + 0x21,0x21,0x06,0xda,0xb0,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x81,0x81,0x92,0xa9,0xc1,0xd6,0xec,0x04,0x1c,0x18,0xf9,0xd4,0xae,0x89,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x92,0xb8,0xde,0xff,0x22,0x07,0xec,0xd9,0xd2,0xda,0xec,0x07,0x1f,0xfc,0xdb, + 0xb5,0x8f,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x99, + 0x81,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x15,0xff,0xdd,0xd5,0xf9,0x14,0xff,0xdf,0xb5, + 0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xaa, + 0xd0,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xc9,0xa3,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x25,0xff,0xe2,0xe0,0xf4,0x12,0x11,0x26,0xfc,0xdf,0xd2,0xae,0x86,0x81,0x81,0x81, + 0x85,0x9b,0xa3,0x99,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x81,0x81,0x81, + 0x82,0x95,0x9d,0x9d,0x92,0x81,0x81,0x81,0x81,0x81,0x8c,0x9a,0x9b,0x9b,0x96,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xaf,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xaf,0x9b,0x81,0x95,0xbf,0xe9, + 0x05,0x13,0xf1,0xcd,0xe5,0x06,0x18,0xf4,0xd1,0xad,0x89,0x81,0x81,0x81,0x92,0xb5, + 0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e,0x29,0x0e,0xfc,0xd2,0xa8,0x81, + 0x81,0x93,0xb6,0xda,0xfc,0x20,0xff,0xdd,0xb9,0xcc,0xe7,0xff,0x1c,0x09,0xee,0xd7, + 0xc3,0x9f,0x81,0x81,0x92,0xb5,0xd9,0xfc,0x20,0xff,0xde,0xe7,0x13,0x16,0x0e,0x0e, + 0x29,0x0e,0xfc,0xd2,0xa8,0x81,0x8d,0xb6,0xde,0x05,0x2a,0x0d,0xf5,0xed,0xed,0xe3, + 0xbd,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x8c,0x8d,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x85,0xa2,0xba,0xcd,0xea,0x14,0x0b,0xe5,0xe0,0xd8,0xcc,0xb4, + 0x91,0x81,0x95,0xc0,0xea,0x11,0x11,0x20,0x1a,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x94,0xbd,0xe4,0xfc,0x12,0xf5,0xd2,0xbd,0xc0,0xbd,0xcd,0xf1,0x14, + 0xff,0xea,0xc5,0x9c,0x81,0x81,0x88,0xb2,0xdb,0xf5,0xf5,0xf5,0xf5,0x19,0x19,0xf5, + 0xf5,0xf5,0xf5,0xd8,0xaf,0x85,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x8e,0xa7,0xb0,0xa7,0x9d,0xb2,0xc8,0xe0,0xff,0x26,0x0b,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa3,0xc5,0xe6,0x05,0x1e,0x11,0x04,0xfc,0x04,0x11,0x1c,0xff,0xe3,0xc3, + 0xa0,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc2,0xe6,0xef,0xdb,0xc6,0xbd,0xe0,0xee,0xda,0xc5,0xa7, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xdd,0xba, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x22,0x1c,0x0b,0x0a,0x18,0x0f,0xf9,0x20,0x16,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x81, + 0xa2,0xc0,0xcd,0xbd,0xa6,0x9b,0xb6,0xdf,0x09,0x24,0xfa,0xd0,0xa7,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xae,0xc3,0xc5,0xc5,0xbe,0xa2, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x81,0x81,0x8b,0xaf,0xcb, + 0xdf,0xf2,0xd9,0xb5,0xcd,0xe0,0xf4,0xde,0xba,0x96,0x81,0x81,0x81,0x85,0xa9,0xcd, + 0xf0,0x13,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06,0x26,0x06,0xfc,0xd2,0xa8,0x81, + 0x85,0xaa,0xcd,0xf1,0x14,0x0d,0xe9,0xc6,0xb5,0xdf,0x09,0x23,0x05,0x04,0x04,0xfc, + 0xd2,0xa8,0x81,0x85,0xa9,0xcd,0xf0,0x14,0x0d,0xea,0xc7,0xe7,0x06,0x06,0x06,0x06, + 0x26,0x06,0xfc,0xd2,0xa8,0x81,0x95,0xbf,0xe7,0x12,0x21,0xf6,0xd0,0xc3,0xc2,0xbe, + 0xa7,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x9c,0xc6,0xef,0x1a,0x05,0xda,0xb7,0xaf,0xa4,0x93, + 0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06, + 0xda,0xb0,0x85,0x86,0xa8,0xc2,0xd9,0xee,0xdf,0xbb,0x98,0x95,0x94,0xb6,0xd9,0xef, + 0xdc,0xc6,0xae,0x8d,0x81,0x81,0x81,0xa1,0xc0,0xca,0xca,0xca,0xed,0x13,0x13,0xed, + 0xca,0xca,0xca,0xbe,0x9f,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0xa7,0xca,0xda,0xd0,0xc7,0xc5,0xc8,0xd5,0xfa,0x24,0x0b,0xe1,0xb7,0x8d,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8a,0xaa,0xc8,0xe3,0xfa,0x0b,0x15,0x19,0x14,0x0a,0xf7,0xe1,0xc6,0xa8, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc5,0xc8,0xb6,0xa2,0xa5,0xc0,0xc6,0xb5,0xa1,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb7,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0, + 0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x13,0x07,0x16,0x16,0x07,0xf0,0xe6,0x05,0x13,0x0b,0xdf,0xb5,0x8b,0x81,0x81,0x97, + 0xba,0xdd,0xf7,0xdf,0xcd,0xc5,0xd0,0xee,0x14,0x1a,0xf2,0xc9,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc5,0xea,0xef,0xef,0xde,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xa6, + 0xba,0xc8,0xbc,0x9e,0xa7,0xba,0xca,0xc0,0xa2,0x81,0x81,0x81,0x81,0x92,0xbb,0xe3, + 0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc,0x13,0xfa,0xda,0xc4,0xa0,0x81, + 0x92,0xbb,0xe3,0x09,0x11,0xf5,0xd2,0xaf,0xb5,0xdf,0x0b,0x11,0x11,0x11,0x11,0xfc, + 0xd2,0xa8,0x81,0x92,0xbb,0xe3,0x07,0x13,0xf6,0xd3,0xb3,0xd3,0xda,0xda,0xda,0xfc, + 0x13,0xfa,0xda,0xc4,0xa0,0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc9,0x9f,0x98,0x96, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa2,0xcc,0xf5,0x20,0xff,0xd5,0xab,0x86,0x81,0x81, + 0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xd1,0xab,0x82,0x81,0x88,0x9e,0xb4,0xc6,0xc0,0xa4,0x81,0x81,0x81,0x9e,0xbb,0xc5, + 0xb8,0xa2,0x8c,0x81,0x81,0x81,0x81,0x84,0x9a,0xa0,0xa0,0xbd,0xe0,0xe7,0xe7,0xe0, + 0xbd,0xa0,0xa0,0x99,0x83,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x05,0xf7,0xef,0xef,0xf2,0xfa,0x12,0x1f,0xfc,0xd6,0xaf,0x86,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8c,0xa8,0xc0,0xd4,0xe2,0xea,0xed,0xea,0xe1,0xd2,0xbe,0xa6,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0x9d,0x9f,0x91,0x81,0x85,0x99,0x9d,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xab, + 0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x16,0xea,0xed,0xec,0xe1,0xcd,0xca,0xe0,0xea,0xe8,0xd5,0xb0,0x88,0x81,0x82,0xab, + 0xd2,0xf4,0x18,0x05,0xf5,0xef,0xf6,0x0b,0x29,0x07,0xe2,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x1b,0x06,0xdd,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0x9d,0x96,0x81,0x81,0x95,0xa0,0x9a,0x84,0x81,0x81,0x81,0x81,0x90,0xb9,0xdd, + 0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7,0xe7,0xe7,0xc9,0xa3,0x89,0x81, + 0x8f,0xb8,0xdb,0xe5,0xe5,0xdd,0xbb,0x98,0xb0,0xd5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe4, + 0xcb,0xa4,0x81,0x90,0xb9,0xdd,0xe7,0xe7,0xdd,0xbc,0x99,0xac,0xb0,0xb0,0xcc,0xe7, + 0xe7,0xe7,0xc9,0xa3,0x89,0x81,0x92,0xbc,0xe6,0x0f,0x24,0xfc,0xd7,0xb7,0xa4,0x9d, + 0x9a,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x23,0xf7,0xcf,0xa5,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xb1,0x96,0x81,0x81,0x81,0x81,0x8f,0x9d,0x99,0x85,0x81,0x81,0x81,0x81,0x95,0x9b, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xba,0xbd,0xbd,0xba, + 0xa5,0x84,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xb0,0xda,0x06,0x21,0x1b,0x1b,0x1b,0x23,0x15,0xff,0xe3,0xc2,0x9e,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0x9b,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x99,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96, + 0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xac,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0xc2,0xb9,0xa8,0xa7,0xb8,0xc0,0xbf,0xb4,0x9a,0x81,0x81,0x85,0xaf, + 0xd8,0xf9,0x10,0x22,0x1f,0x1b,0x1f,0x1f,0x0a,0xee,0xcd,0xa9,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd9,0x04,0x23,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb9, + 0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x81, + 0x81,0x9f,0xb6,0xba,0xba,0xb7,0xa1,0x81,0x9a,0xb3,0xba,0xba,0xba,0xba,0xba,0xba, + 0xac,0x8f,0x81,0x81,0xa1,0xb9,0xbd,0xbd,0xb9,0xa1,0x81,0x83,0x85,0x91,0xaf,0xbd, + 0xbd,0xbd,0xad,0x8f,0x81,0x81,0x89,0xb1,0xd9,0xff,0x23,0x12,0xf3,0xdb,0xcd,0xc6, + 0xc4,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x0e,0xf2,0xc9,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x91,0x93,0x93,0x91, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x85, + 0xaf,0xd7,0xf5,0xfc,0x04,0x04,0xff,0xfa,0xef,0xdc,0xc4,0xa7,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x90,0x82,0x81,0x8f,0x95,0x95,0x8d,0x81,0x81,0x81,0x81,0x9f, + 0xbf,0xd6,0xeb,0xfa,0x04,0x06,0x04,0xf7,0xe6,0xce,0xb2,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xb9,0xe2,0x0b,0x17,0xef,0xc6,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93,0x93,0x92,0x88,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x8e,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x90,0x90,0x90, + 0x87,0x81,0x81,0x81,0x81,0x90,0x93,0x93,0x90,0x81,0x81,0x81,0x81,0x81,0x89,0x93, + 0x93,0x92,0x88,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x25,0x15,0x04,0xf5,0xef, + 0xec,0xc8,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x2b,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0xa8,0xcd,0xe2,0xe2,0xde,0xbf,0x98,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xbd,0x93,0x81, + 0x9e,0xbc,0xcc,0xd4,0xd7,0xd7,0xd7,0xd2,0xc7,0xb6,0xa1,0x88,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16, + 0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9c,0xb2,0xc4,0xd1,0xd8,0xda,0xd7,0xcf,0xc0,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xe2,0xba,0x91, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xac,0xcc,0xe9,0x04,0x16,0x24,0x20,0x1b, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x09,0x06,0xda,0xb0, + 0x85,0x81,0x81,0x81,0x81,0x81,0x92,0xad,0xb8,0xb8,0xb6,0xa2,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09,0x09,0xe7,0xbd,0x93,0x81, + 0x81,0x97,0xa3,0xaa,0xad,0xad,0xad,0xa8,0x9f,0x91,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x09, + 0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8c,0x9c,0xa8,0xaf,0xb0,0xad,0xa6,0x9a,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xc5,0xa8,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xae,0xc8,0xde,0xef,0xfb,0x04,0x09, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xdd,0xdd,0xdd,0xcc,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8d,0x8d,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd,0xdd,0xd5,0xb4,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb6,0xd6,0xdd, + 0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x85,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa3,0x9e,0x8a,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa4,0xb8,0xc7,0xd2,0xda,0xdd, + 0xdb,0xc0,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa7,0xb2,0xb2,0xb2,0xaa,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2,0xb2,0xaf,0x99,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xaf,0xb2, + 0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0x9f,0xa9,0xb0,0xb2, + 0xb2,0xa1,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x88,0x88,0x82,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x88, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7,0xda, + 0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa8,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc2,0xbd,0xd7,0xd1,0xb6,0x98,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xc3,0xe3,0xfa,0x04,0xfc,0xe8, + 0xca,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda,0xda,0xda,0xd0,0xae,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc4,0xda,0xda,0xda,0xca,0xac,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda, + 0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xbb,0xd6,0xda,0xda,0xda,0xd1,0xb1,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa7, + 0xc3,0xda,0xda,0xda,0xca,0xae,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8, + 0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2,0xba,0xd6,0xd3,0xb8,0x9a, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc6,0xda,0xda,0xda,0xda,0xc5,0xa5,0x87,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xd7, + 0xda,0xda,0xda,0xce,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5, + 0xda,0xda,0xda,0xca,0xae,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3, + 0xbf,0xd4,0xdf,0xdf,0xd5,0xc2,0xbd,0xd7,0xd1,0xb5,0x98,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb,0xb0,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x94,0x98,0x98,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xc8,0xda,0xda,0xda,0xda,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6, + 0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xbd,0xdb,0xf9,0x06, + 0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xaa,0xc7,0xe4, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xc0,0xdf,0xfa,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd7,0xfc,0x16,0x06,0x11,0x05, + 0xdf,0xb7,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc2,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06,0x06,0x05,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3,0xff,0x06,0x05,0xe8,0xcc,0xb0,0x92, + 0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04, + 0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x06,0x06,0xff,0xe1,0xc3, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb, + 0xd9,0xf7,0x06,0x06,0x06,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc5, + 0xe3,0xff,0x06,0x06,0xea,0xcd,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xbf, + 0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfc,0xe7,0xd6,0xf5,0xf3,0xd5,0xb3, + 0x8b,0x81,0x81,0x81,0x81,0xaa,0xd5,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xdb,0xf9, + 0x06,0x06,0x04,0xdf,0xb5,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xa9,0xc7,0xe3, + 0xff,0x06,0x06,0xea,0xcc,0xb0,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf, + 0xdf,0xf9,0x09,0x09,0xfb,0xe6,0xd8,0xf7,0xf1,0xd4,0xb1,0x89,0x81,0x81,0x81,0x81, + 0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec,0xc8,0xa1,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xbc,0xc2,0xc2,0xbb,0xa1, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0xfc,0x06,0x06,0xff,0xe1,0xc3,0xa5,0x87, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7, + 0x06,0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbd,0xdb,0xf9,0x18,0x14, + 0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xac,0xca,0xe6,0x04, + 0x1f,0x09,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xae, + 0xd6,0xfb,0x1c,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xb5,0xdf,0x0b,0x04,0xdc,0xfa,0x13, + 0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x85,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa1,0xc3,0xdd,0xf6,0x10,0x1d,0xfc,0xdf,0xc1,0xa2,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16,0xfc,0xe3,0xca,0xaa,0x84, + 0x81,0x81,0x81,0x81,0x88,0xaa,0xc8,0xe4,0x04,0x1f,0x0b,0x1f,0x09,0xeb,0xce,0xb2, + 0x91,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26, + 0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdd,0xf5,0x0f,0x1d,0xff,0xe1, + 0xc3,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9, + 0xf7,0x16,0x17,0xfc,0xe4,0xcb,0xac,0x87,0x81,0x81,0x81,0x81,0x88,0xaa,0xc7,0xe4, + 0xff,0x1e,0x0a,0x1e,0x09,0xec,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8, + 0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x82,0xac,0xd5,0xf9,0x1a,0x0d,0x0f,0x21,0x0b,0xff,0x12,0x0b,0xe4,0xba, + 0x90,0x81,0x81,0x81,0x81,0x9f,0xc1,0xdb,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x18, + 0x14,0xfb,0xe2,0xc8,0xa8,0x82,0x81,0x81,0x81,0x81,0x81,0x87,0xaa,0xc8,0xe4,0x04, + 0x1f,0x0a,0x1d,0x09,0xec,0xd0,0xb2,0x90,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5, + 0xfa,0x1b,0x0d,0x0f,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc,0xd2,0xa8,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0xb8,0xde,0xed,0xed,0xdc,0xb5, + 0x8c,0x81,0x81,0x81,0x81,0x81,0xa1,0xc3,0xdc,0xf5,0x0f,0x1d,0xff,0xe1,0xc3,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16, + 0x15,0xfb,0xe3,0xc9,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa1,0xbb,0xd4,0xee,0x07,0x11,0xff,0xdf,0xb6,0x8c,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xac,0xd5,0xf9,0x11,0x0c,0xf1, + 0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xc1,0xe8,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad, + 0xd4,0xf1,0x05,0xe6,0xea,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xb3,0xdc,0x04,0x0f,0xf7,0x09,0x0b, + 0xe3,0xba,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0xa2,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa6,0x96,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0x99,0xa5,0xad,0xb0,0xb0,0xad,0xa5,0x9a,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x89,0xa2,0xbb,0xd5,0xee,0x09,0x13,0xfc,0xde,0xb6,0xa8,0xa6,0x96,0x81,0x81,0x81, + 0x81,0x81,0x89,0xa0,0xa8,0xae,0xd6,0xf7,0x13,0x0d,0xf3,0xdb,0xc1,0xa8,0x96,0x81, + 0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x05,0x13,0xff,0xe7,0xfc,0x13,0x0b,0xee,0xca, + 0xa1,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e, + 0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xbb,0xd4,0xee,0x07,0x13,0xff, + 0xe0,0xb8,0xa8,0xa7,0x99,0x81,0x81,0x81,0x81,0x81,0x91,0xa4,0xa8,0xae,0xd6,0xf7, + 0x13,0x0f,0xf4,0xdb,0xc2,0xa9,0x99,0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0x04, + 0x13,0xff,0xe8,0xfc,0x13,0x0d,0xf0,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81,0x9a,0xc3, + 0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa2,0x99,0x8c,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xaa,0xd2,0xf1,0x06,0xe6,0xe9,0xff,0x11,0x16,0x09,0xee,0xd0,0xac, + 0x8f,0x81,0x81,0x81,0x81,0x85,0xa0,0xba,0xd3,0xed,0x07,0x11,0xff,0xdf,0xb6,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xd9,0xc0,0xa7,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbe,0xe6,0x05,0x11, + 0xff,0xe6,0xfb,0x11,0x0b,0xee,0xc8,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0xaa,0xd2, + 0xf1,0x06,0xe6,0xe9,0xff,0x11,0x15,0x07,0xec,0xcd,0xaa,0x84,0x81,0x81,0x81,0x81, + 0x81,0x9a,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1,0xcd,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa2,0xad,0xb2,0xc4,0xed,0x15,0x07,0xdf,0xb6, + 0x8c,0x81,0x81,0x81,0x81,0x8c,0xa3,0xab,0xba,0xd4,0xed,0x07,0x11,0xff,0xdf,0xb6, + 0xab,0xab,0xa7,0x93,0x81,0x81,0x81,0x8c,0xa3,0xab,0xab,0xac,0xd5,0xf7,0x11,0x0d, + 0xf3,0xda,0xc1,0xab,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x99,0xb2,0xcc,0xe3,0xe5,0xe5,0xd7,0xb5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xac,0xcf,0xe5,0xe5,0xe5,0xd1, + 0xb7,0x9e,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xde,0xe5,0xe5, + 0xde,0xd5,0xda,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99, + 0xb7,0xd4,0xe4,0xcb,0xd5,0xdb,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd5,0xd5,0xd5,0xe1,0xe4,0xd4,0xb7,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa5,0xcb,0xec,0x05,0x11,0x09,0xf1, + 0xd1,0xac,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0xa8, + 0xc8,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81,0x81,0x81,0x81, + 0x96,0xad,0xc0,0xce,0xd7,0xda,0xda,0xd6,0xcf,0xc3,0xb2,0x96,0x81,0x81,0x81,0x81, + 0xa3,0xc4,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7,0xd9,0xd2,0xd2,0xcf,0xb5,0x91,0x81,0x81, + 0x81,0x81,0xa3,0xc4,0xd2,0xd2,0xd3,0xe7,0xe7,0xe7,0xd2,0xd2,0xd2,0xcf,0xb5,0x91, + 0x81,0x81,0x81,0x81,0xa3,0xc4,0xe0,0xe7,0xe7,0xdf,0xd2,0xdb,0xe7,0xe7,0xe6,0xcf, + 0xb5,0x91,0x81,0x81,0x81,0x81,0xa3,0xc4,0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4, + 0xd4,0xcf,0xb5,0x91,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd2,0xe5,0xe7,0xe7, + 0xdb,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xd2,0xd2,0xd3,0xe7, + 0xe7,0xe7,0xd3,0xd2,0xd2,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc,0xe0,0xe7, + 0xe7,0xe0,0xd2,0xdb,0xe7,0xe7,0xe7,0xd1,0xb9,0x95,0x81,0x81,0x81,0x89,0xaf,0xcc, + 0xd2,0xe2,0xe3,0xd2,0xd2,0xd2,0xe1,0xe4,0xd4,0xd1,0xb9,0x95,0x81,0x81,0x81,0x9a, + 0xbd,0xd2,0xd2,0xd2,0xd2,0xd2,0xd1,0xcc,0xc2,0xb4,0xa1,0x8a,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa1,0xc3,0xd2,0xd3,0xe4,0xcf,0xc5,0xda,0xe7,0xea,0xe2,0xd2,0xd2,0xcb, + 0xac,0x87,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xce,0xe3,0xe5,0xe5,0xd7,0xc8,0xb5, + 0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xa9,0xbf,0xcf,0xe5,0xe5,0xe5, + 0xd5,0xc8,0xb5,0x9e,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5, + 0xde,0xdd,0xdc,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6, + 0xd3,0xe4,0xce,0xd9,0xdd,0xe7,0xea,0xe1,0xcd,0xb0,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8b,0xaf,0xce,0xe2,0xe3,0xd9,0xdd,0xdc,0xe1,0xe4,0xd4,0xb7,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0xa2,0xb9,0xca,0xd6,0xdd,0xdd,0xf9,0x21,0xfa,0xd2,0xaa, + 0x81,0x81,0x81,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcb,0xe3,0xe5,0xe5,0xd7,0xd2, + 0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xd4,0xcf,0xe5,0xe5,0xe5, + 0xd2,0xd2,0xd5,0xd5,0xce,0xb0,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee,0xc6,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa3,0xb8,0xbc,0xe4, + 0xff,0xff,0xff,0xee,0xc6,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x98,0xb2,0xbc,0xe4,0xff,0xff,0xff,0xef,0xc6,0xa8,0x92,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xab,0xba,0xe2,0xff,0xff,0xff,0xef,0xc7,0xaf,0x99,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0xff,0xff,0xff,0xee, + 0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xba, + 0xe1,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x9b, + 0xb8,0xd1,0xe6,0xf6,0xff,0x06,0x06,0xff,0xf7,0xea,0xd1,0xab,0x82,0x81,0x81,0x85, + 0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0xfc,0xfc, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf4,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xcf,0xf9,0xfc,0xfc,0xfc,0xfc,0xfa,0xf5,0xea,0xda,0xc5,0xac,0x8e,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0xfc,0xfc,0xfc,0xf1,0xc9,0xb3,0xbe,0xc2,0xec,0xfc,0xfc,0xe4, + 0xba,0x90,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9, + 0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06, + 0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0,0xcc,0xe3,0xf6, + 0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xb0, + 0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81,0x81,0x81,0x81, + 0x81,0x90,0xb0,0xcc,0xe3,0xf6,0x04,0x09,0x06,0xfc,0xee,0xd9,0xbf,0xa0,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa7,0xc3,0xdd,0xf1,0xff,0x07,0x09,0x07,0x17,0xef,0xc7,0xa9, + 0x8a,0x81,0x81,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba,0xc5,0xef, + 0xff,0xff,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xba,0xba,0xba, + 0xc5,0xef,0xff,0xff,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb, + 0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xc9,0xf1, + 0x19,0x2b,0x24,0xfb,0xd3,0xab,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa1,0xc9,0xf1,0x19,0x2b,0x24,0xfb,0xd3,0xab,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x2b,0x24,0xfc,0xd4,0xac,0x84,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x29,0x23,0xfa, + 0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xca, + 0xf1,0x19,0x21,0x29,0x1e,0x1e,0x1e,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x97,0xb8, + 0xd7,0xf3,0x0b,0x1e,0x24,0x1e,0x1e,0x23,0x20,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23,0x1b,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0x23,0x23,0x23,0x23,0x23,0x23, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23,0x29,0x24, + 0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23,0x23,0x23, + 0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0x23, + 0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x13,0x23,0x23,0x23,0x29,0x24,0x23,0x23,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x24,0x23,0x23,0x26,0x1e,0x12,0xff,0xe7,0xca,0xaa,0x88,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x29,0x28,0x04,0xdc,0xb5,0x98,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9, + 0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e, + 0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc,0xec,0x07,0x1e, + 0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81,0x87,0xab,0xcc, + 0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81,0x81,0x81,0x81, + 0x87,0xab,0xcc,0xec,0x07,0x1e,0x21,0x1b,0x1e,0x26,0x14,0xf9,0xdb,0xba,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc2,0xe3,0xff,0x17,0x25,0x1b,0x1c,0x2b,0x1c,0x04,0xe4,0xc5, + 0xa2,0x81,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x90,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09, + 0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xaf,0xd6,0xff, + 0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x86,0xaf,0xd6,0xff,0x27,0xff,0x25,0x09,0xe1,0xb9,0x90,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x04,0x24,0x0a,0xe1,0xb9,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0xff,0x25,0x09, + 0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb3,0xda, + 0xff,0x1e,0x06,0x23,0xf7,0xf2,0xf2,0xf2,0xea,0xc3,0x9a,0x81,0x81,0x88,0xae,0xd2, + 0xf3,0x14,0x25,0x0c,0xfb,0xf2,0xf3,0xfa,0x06,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xed, + 0xc4,0x9a,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xf7,0xf7,0xf7,0xf7,0xf7, + 0xf7,0xed,0xc4,0x9a,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc,0x29,0x09, + 0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7,0xf7,0xfc, + 0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6,0xf7,0xf7, + 0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0x92,0xbc,0xe6, + 0xf7,0xf7,0xf7,0xfc,0x29,0x09,0xf7,0xf7,0xf7,0xf1,0xc9,0x9f,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xf7,0xf7,0xfc,0x06,0x18,0x22,0x07,0xe5,0xc2,0x9c,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x2e,0x23,0x14,0xee,0xc8,0xa1,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18, + 0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5, + 0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6,0x09,0x27,0x0f, + 0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81,0x9b,0xc1,0xe6, + 0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84,0x81,0x81,0x81, + 0x9b,0xc1,0xe6,0x09,0x27,0x0f,0xf9,0xef,0xf5,0x07,0x21,0x18,0xf5,0xd1,0xab,0x84, + 0x81,0x81,0x81,0x89,0xa0,0xa8,0x9c,0x83,0x81,0x81,0x83,0x9a,0xa3,0x9a,0x83,0x81, + 0x81,0x81,0x8f,0xb5,0xda,0xfc,0x1d,0x18,0xff,0xf1,0xf4,0x1c,0x1f,0x21,0xff,0xdc, + 0xb6,0x91,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c,0x1d,0xf5,0x19,0x16, + 0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe4,0x0c, + 0x1d,0xf5,0x19,0x16,0xee,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xbc,0xe4,0x0c,0x1d,0xf5,0x19,0x16,0xee,0xc6,0x9d,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x1e,0xf5,0x18,0x16,0xee,0xc6,0x9e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1d,0xf4,0x19,0x15, + 0xed,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xea, + 0x11,0x0f,0x06,0x23,0xf7,0xcd,0xc8,0xc8,0xc5,0xae,0x8c,0x81,0x81,0x9b,0xc1,0xe7, + 0x0c,0x27,0x07,0xe8,0xd3,0xc9,0xca,0xd1,0xde,0xef,0xd5,0xad,0x84,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca,0xb2,0x8e, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd,0xcd,0xca, + 0xb2,0x8e,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xcd,0xcd,0xcd,0xcd, + 0xcd,0xca,0xb2,0x8e,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc,0x29,0x09, + 0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd,0xd2,0xfc, + 0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7,0xcd,0xcd, + 0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0x87,0xac,0xc7, + 0xcd,0xcd,0xd2,0xfc,0x29,0x09,0xdd,0xcd,0xcd,0xcc,0xb6,0x93,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xcd,0xd2,0xdf,0xf5,0x16,0x20,0xfb,0xd5,0xaf,0x86,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xff,0x26,0xff,0xda,0xb4,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c, + 0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd, + 0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa,0x20,0x12,0xf0, + 0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85,0xad,0xd3,0xfa, + 0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93,0x81,0x81,0x85, + 0xad,0xd3,0xfa,0x20,0x12,0xf0,0xd3,0xc5,0xcd,0xe5,0x07,0x2c,0x0a,0xe2,0xbb,0x93, + 0x81,0x81,0x89,0xa7,0xc4,0xd2,0xbf,0x9f,0x81,0x83,0xa1,0xbf,0xcd,0xbf,0xa1,0x83, + 0x81,0x81,0xa0,0xc7,0xee,0x14,0x1e,0xfa,0xdb,0xd7,0xff,0x1c,0xfc,0x20,0x15,0xef, + 0xc8,0x9f,0x81,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x11,0xe7,0x0c,0x23, + 0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19, + 0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0xa0,0xc9,0xf1,0x19,0x11,0xe7,0x0c,0x23,0xfa,0xd2,0xaa,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x11,0xe9,0x0b,0x24,0xfb,0xd3,0xab,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x0f,0xe7,0x0c,0x23, + 0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xac,0xd3,0xfa, + 0x21,0xff,0x06,0x23,0xf7,0xcd,0xa3,0x9d,0x9c,0x8d,0x81,0x81,0x81,0xa9,0xd2,0xf9, + 0x20,0x12,0xed,0xca,0xae,0x9f,0xa0,0xa8,0xb7,0xc5,0xb8,0x9b,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1,0x91,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3,0xa3,0xa1, + 0x91,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0xa3,0xa3,0xa3, + 0xa3,0xa1,0x91,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f,0xa3,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0x81,0x8d,0x9f, + 0xa3,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0xa3,0xa2,0x94,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0xa9,0xbb,0xdb,0xff,0x27,0x0c,0xe4,0xbb,0x92,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x18,0x12,0xec,0xc6,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b, + 0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa, + 0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b,0x27,0xff,0xd9, + 0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91,0xba,0xe2,0x0b, + 0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e,0x81,0x81,0x91, + 0xba,0xe2,0x0b,0x27,0xff,0xd9,0xb5,0x9c,0xaa,0xcd,0xf3,0x1b,0x19,0xf1,0xc8,0x9e, + 0x81,0x84,0xa7,0xc5,0xe3,0xfb,0xdb,0xbd,0x9f,0xa1,0xbf,0xdd,0xf7,0xdd,0xbf,0xa0, + 0x81,0x84,0xad,0xd6,0xfc,0x26,0x0c,0xe5,0xc0,0xe4,0x0c,0x0f,0xe7,0x0f,0x25,0xfc, + 0xd4,0xab,0x82,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26, + 0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28,0x09,0xe0,0xb8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x05,0xdc,0xff,0x27,0x09,0xe1,0xb8,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x04,0xdb,0xff,0x28, + 0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xbb,0xe2,0x0a, + 0x17,0xef,0x06,0x23,0xf7,0xcd,0xba,0xba,0xb6,0x9f,0x81,0x81,0x8b,0xb4,0xdd,0x06, + 0x2b,0x04,0xdb,0xb4,0x8f,0x81,0x81,0x81,0x92,0x9b,0x93,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6,0x9d,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd,0xbd,0xb6, + 0x9d,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xbd,0xbd,0xbd,0xbd, + 0xbd,0xb6,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x82,0xa3,0xb9, + 0xd0,0xfa,0x26,0x09,0xdd,0xbd,0xbd,0xad,0xc9,0xf1,0x1b,0x18,0xef,0xc5,0x9b,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0x07,0x25,0xfc,0xd8,0xc2,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11, + 0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95, + 0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16,0x1b,0xf2,0xc9, + 0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a,0xc4,0xed,0x16, + 0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6,0x81,0x81,0x9a, + 0xc4,0xed,0x16,0x1b,0xf2,0xc9,0xa1,0x81,0x95,0xbd,0xe7,0x11,0x23,0xfa,0xd0,0xa6, + 0x81,0x91,0xbb,0xe2,0xff,0x18,0xf9,0xdb,0xbd,0xbf,0xdd,0xfb,0x1a,0xfb,0xdb,0xb3, + 0x8a,0x8d,0xb7,0xe0,0x0a,0x29,0xff,0xd6,0xc8,0xef,0x19,0x04,0xdb,0x04,0x2c,0x06, + 0xdd,0xb3,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a, + 0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f, + 0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93, + 0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1a,0x15,0xed,0xc5,0x9d,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x20,0xf7,0xcf,0xf1,0x19,0x15,0xed,0xc5,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x1f,0xf6,0xce,0xf2,0x1b, + 0x14,0xec,0xc4,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x19, + 0x09,0xe1,0x06,0x23,0xf7,0xe5,0xe5,0xe5,0xdb,0xb8,0x8f,0x81,0x92,0xbb,0xe5,0x0f, + 0x23,0xf7,0xcf,0xa6,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9,0xb4,0x8b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xd9, + 0xb4,0x8b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf, + 0xe7,0xfa,0x26,0x09,0xe7,0xe7,0xe7,0xc9,0xc0,0xea,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xf6,0x1d,0x11,0xea,0xc4,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09, + 0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c, + 0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e,0x14,0xea,0xc0, + 0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0,0xca,0xf4,0x1e, + 0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab,0x81,0x81,0xa0, + 0xca,0xf4,0x1e,0x14,0xea,0xc0,0x97,0x81,0x8c,0xb5,0xdf,0x09,0x29,0xff,0xd5,0xab, + 0x81,0x90,0xb9,0xdf,0xfc,0x1c,0x18,0xf9,0xdb,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xb1, + 0x88,0x93,0xbd,0xe7,0x11,0x21,0xf7,0xcd,0xd3,0xfc,0x20,0xf7,0xd2,0xfc,0x26,0x0d, + 0xe2,0xb8,0x8d,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e, + 0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12, + 0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0, + 0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0e,0x22,0xfa,0xd2,0xa9,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x13,0xeb,0xc3,0xe5,0x0d,0x23,0xfa,0xd2,0xaa, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x12,0xea,0xc2,0xe6,0x0f, + 0x22,0xfa,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xb4,0xdb,0x04,0x20, + 0xf9,0xda,0x06,0x27,0x11,0x11,0x11,0x11,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x14, + 0x1e,0xf2,0xc9,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2d,0x13,0x13,0x13,0x13,0x13,0x13, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x13,0x13,0x2b,0x15,0x13,0x13,0xfa,0xd0,0xbb,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xe5,0x0b,0x22,0xfc,0xd5,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88, + 0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xbb, + 0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xbb,0x92,0x81,0x88,0xb2,0xdb,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0xf9,0xfb,0x1a,0x14,0xf5,0xd7,0xb9,0x9b, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xe0,0x09,0x14,0xec,0xce,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff, + 0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06, + 0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81,0x81,0x81,0x85,0xae, + 0xd6,0xfc,0x26,0x06,0xdd,0xb4,0xd9,0xff,0x2a,0x07,0xdf,0xb7,0x8f,0x81,0x81,0x81, + 0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x06,0xde,0xb6,0xd8,0xff,0x29,0x09,0xe0,0xb8, + 0x90,0x81,0x81,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x06,0xdd,0xb5,0xd9,0x04, + 0x2a,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xc4,0xec,0x13,0x11, + 0xe9,0xda,0x06,0x25,0x0b,0x0b,0x0b,0x0b,0xe7,0xbd,0x93,0x81,0x95,0xc0,0xea,0x16, + 0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2,0xb8,0x8d, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0xe2, + 0xb8,0x8d,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x95,0xc0,0xea, + 0x0e,0x0e,0x29,0x11,0x0e,0x0e,0xfa,0xd0,0xba,0xe5,0x11,0x23,0xf7,0xcd,0xa3,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd2,0xf9,0x1f,0x0f,0xe8,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06, + 0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85, + 0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23,0x11,0xe5,0xba, + 0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3,0xcd,0xf7,0x23, + 0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad,0x83,0x81,0xa3, + 0xcd,0xf7,0x23,0x11,0xe5,0xba,0x90,0x81,0x85,0xb0,0xda,0x06,0x2e,0x04,0xd7,0xad, + 0x83,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x1c,0x18,0x1a,0x14,0xf5,0xd7,0xb9,0x9b,0x81, + 0x81,0x95,0xc0,0xea,0x16,0x1e,0xf2,0xc8,0xec,0x14,0x09,0xdf,0xcd,0xf7,0x23,0x11, + 0xe5,0xba,0x90,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4, + 0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5, + 0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9, + 0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9b,0x81,0x81,0x81,0x81,0x81,0x93,0xbb, + 0xe3,0x0b,0x21,0xf9,0xd0,0xd0,0xd0,0xf5,0x1d,0x14,0xec,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x92,0xba,0xe2,0x0b,0x22,0xfa,0xd2,0xd0,0xd0,0xf4,0x1c,0x15,0xed,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x21,0xf9,0xd1,0xd0,0xd0,0xf5, + 0x1e,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x81,0x81,0x86,0xad,0xd4,0xfb,0x22,0x04, + 0xda,0xda,0x06,0x23,0xf7,0xdf,0xdf,0xdf,0xd7,0xb5,0x8e,0x81,0x95,0xbf,0xe9,0x13, + 0x21,0xf5,0xcc,0xa2,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5,0xb2,0x89, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xd5, + 0xb2,0x89,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe2,0xe2,0xe2,0xe2,0xe2, + 0xe2,0xd5,0xb2,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x91,0xb9,0xdb, + 0xe2,0xfa,0x26,0x09,0xe2,0xe2,0xe1,0xc7,0xbf,0xe8,0x13,0x1f,0xf5,0xca,0xa0,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xe7,0x0d,0x20,0xfa,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09, + 0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a, + 0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21,0x13,0xe7,0xbd, + 0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2,0xcc,0xf5,0x21, + 0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab,0x81,0x81,0xa2, + 0xcc,0xf5,0x21,0x13,0xe7,0xbd,0x94,0x81,0x8a,0xb4,0xdd,0x09,0x2b,0xff,0xd5,0xab, + 0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x26,0x21,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x95,0xbf,0xe8,0x13,0x21,0xf5,0xcf,0xf7,0x20,0xfb,0xd3,0xd1,0xfa,0x26,0x0e, + 0xe2,0xb8,0x8f,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1, + 0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xfa, + 0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81,0x81,0x81,0xa0,0xc8, + 0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x21,0xf9,0xd1,0xa9,0x81,0x81,0x81, + 0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xfa,0xfa,0xfa,0xfa,0xfa,0x11,0x22,0xfa,0xd2, + 0xa9,0x81,0x81,0x81,0x81,0x81,0x9f,0xc8,0xf1,0x19,0x16,0xfa,0xfa,0xfa,0xfa,0xfa, + 0x11,0x21,0xf9,0xd1,0xa8,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0x0b,0x1a,0xf2, + 0xef,0xef,0x06,0x23,0xf7,0xcd,0xb5,0xb5,0xb1,0x9b,0x81,0x81,0x91,0xba,0xe5,0x0e, + 0x26,0xfc,0xd4,0xab,0x84,0x81,0x81,0x81,0x81,0x88,0x82,0x81,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2,0x9a,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8,0xb8,0xb2, + 0x9a,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xb8,0xb8,0xb8,0xb8, + 0xb8,0xb2,0x9a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x9f,0xb4, + 0xd0,0xfa,0x26,0x09,0xdd,0xb8,0xb7,0xa9,0xc8,0xf1,0x19,0x19,0xef,0xc5,0x9c,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xd4,0xfb,0x21,0x0b,0xed,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e, + 0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92, + 0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c,0x18,0xed,0xc4, + 0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e,0xc8,0xf2,0x1c, + 0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7,0x81,0x81,0x9e, + 0xc8,0xf2,0x1c,0x18,0xed,0xc4,0x9b,0x81,0x92,0xbb,0xe4,0x0e,0x24,0xfa,0xd1,0xa7, + 0x81,0x81,0x83,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0x1c,0x18,0xf9,0xdb,0xbd,0x9f,0x81, + 0x81,0x91,0xba,0xe5,0x0f,0x24,0xfa,0xdc,0x04,0x19,0xef,0xc8,0xd7,0xff,0x2b,0x09, + 0xdd,0xb4,0x8a,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef, + 0x1b,0x13,0xe7,0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b, + 0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde, + 0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6,0xfc,0x26,0x2b,0x26, + 0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81,0x81,0x85,0xae,0xd6, + 0xfc,0x26,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2e,0x06,0xde,0xb6,0x8e,0x81,0x81, + 0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26,0x2a,0x2f,0x07,0xdf, + 0xb7,0x8f,0x81,0x81,0x81,0x85,0xad,0xd5,0xfc,0x25,0x2b,0x26,0x26,0x26,0x26,0x26, + 0x2a,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x81,0x81,0x81,0xa6,0xcd,0xf4,0x1b,0x23,0x1b, + 0x1b,0x1b,0x1c,0x23,0xf7,0xcd,0xa3,0x8d,0x8d,0x81,0x81,0x81,0x8a,0xb3,0xdc,0x06, + 0x2e,0x09,0xe2,0xbd,0x9e,0x90,0x90,0x98,0xa7,0xb2,0xaa,0x90,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xa8,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc,0x29,0x09, + 0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8,0xd2,0xfc, + 0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0xa8, + 0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0xa8,0xd2,0xfc,0x29,0x09,0xdd,0xb2,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xb2,0x9e,0xb6,0xd9,0xfc,0x25,0x0d,0xe5,0xbd,0x94,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xc2,0xe9,0x0f,0x1d,0xf5,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18, + 0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3, + 0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13,0x20,0xf7,0xd0, + 0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98,0xc1,0xea,0x13, + 0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f,0x81,0x81,0x98, + 0xc1,0xea,0x13,0x20,0xf7,0xd0,0xaa,0x8c,0xa3,0xc8,0xef,0x18,0x19,0xf1,0xc8,0x9f, + 0x81,0x81,0xa1,0xbf,0xdd,0xfb,0x1a,0x14,0xf5,0xfc,0x1c,0x18,0xf9,0xdb,0xbd,0x9f, + 0x81,0x8b,0xb4,0xdd,0x06,0x2c,0x04,0xe7,0x11,0x0c,0xe4,0xbc,0xe3,0x0b,0x26,0xfc, + 0xd5,0xac,0x83,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2, + 0x1e,0x11,0xe5,0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0, + 0xc9,0xf2,0x1e,0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec, + 0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3,0x0b,0x23,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81,0x81,0x93,0xbb,0xe3, + 0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x14,0xec,0xc3,0x9b,0x81,0x81, + 0x81,0x91,0xba,0xe2,0x0b,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x14,0xec, + 0xc4,0x9b,0x81,0x81,0x81,0x92,0xba,0xe2,0x0b,0x23,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1f,0x13,0xeb,0xc3,0x9a,0x81,0x81,0x81,0x8e,0xb5,0xdc,0x04,0x24,0x04,0x04, + 0x04,0x04,0x07,0x23,0xf7,0xcd,0xb8,0xb8,0xb7,0xa6,0x88,0x81,0x81,0xa8,0xd0,0xf7, + 0x1e,0x1b,0xf9,0xd9,0xc3,0xba,0xba,0xc1,0xcd,0xdd,0xcc,0xa8,0x81,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xd2,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc,0x29,0x09, + 0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xd2,0xfc, + 0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xd2,0xfc,0x29,0x09,0xdd,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xdd,0xbf,0xc6,0xd6,0xf1,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xb1,0xd6,0xfc,0x24,0x06,0x19,0x11,0xe5, + 0xba,0x90,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27, + 0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1, + 0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07,0x2e,0x09,0xe3, + 0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e,0xb7,0xdf,0x07, + 0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94,0x81,0x81,0x8e, + 0xb7,0xdf,0x07,0x2e,0x09,0xe3,0xc4,0xb6,0xc1,0xde,0xff,0x27,0x0a,0xe3,0xbb,0x94, + 0x81,0x8e,0xb7,0xdd,0xfb,0x1a,0x14,0xf5,0xd7,0xdf,0xfc,0x1c,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0xa9,0xd2,0xfa,0x21,0x13,0xf4,0x1c,0xff,0xd7,0xd4,0xf6,0x1b,0x17,0xef, + 0xc8,0xa0,0x81,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc, + 0x25,0x07,0xdf,0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9, + 0xd7,0xfc,0x25,0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7, + 0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1,0x19,0x16,0xed,0xd5, + 0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81,0x81,0xa0,0xc8,0xf1, + 0x19,0x16,0xed,0xd5,0xd5,0xd5,0xd5,0xd5,0xea,0x12,0x21,0xf7,0xd0,0xa8,0x81,0x81, + 0x81,0x9f,0xc7,0xef,0x17,0x17,0xef,0xd5,0xd5,0xd5,0xd5,0xd5,0xe9,0x11,0x21,0xf9, + 0xd1,0xa9,0x81,0x81,0x81,0x9f,0xc8,0xef,0x18,0x16,0xee,0xd5,0xd5,0xd5,0xd5,0xd5, + 0xea,0x13,0x20,0xf7,0xd0,0xa8,0x81,0x81,0x81,0x9e,0xc6,0xed,0x14,0x14,0xec,0xd7, + 0xd7,0xda,0x06,0x23,0xf7,0xe2,0xe2,0xe2,0xe0,0xc2,0x9b,0x81,0x81,0x99,0xbf,0xe5, + 0x09,0x2b,0x16,0xfc,0xeb,0xe3,0xe3,0xea,0xf5,0x05,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x29,0xfc,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc,0x29,0x09, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xfc, + 0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xfc,0x29,0x09,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x09,0xe7,0xe7,0xef,0xfc,0x12,0x27,0x09,0xe7,0xc4,0x9e,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xc5,0xeb,0x12,0x1a,0x20,0x11,0xe5, + 0xba,0x90,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a, + 0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7, + 0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5,0x1a,0x1f,0xff, + 0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81,0xa8,0xcf,0xf5, + 0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85,0x81,0x81,0x81, + 0xa8,0xcf,0xf5,0x1a,0x1f,0xff,0xe9,0xdf,0xe7,0xfb,0x1a,0x1a,0xf6,0xd2,0xac,0x85, + 0x81,0x8f,0xb8,0xe0,0xff,0x14,0xf5,0xd7,0xb9,0xc1,0xdf,0xff,0x18,0xf9,0xda,0xb3, + 0x89,0x81,0x9c,0xc3,0xe9,0x0f,0x28,0x0b,0x1d,0xf4,0xe2,0xf3,0x10,0x25,0xff,0xde, + 0xb8,0x91,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12, + 0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2, + 0xf3,0x12,0x1d,0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06, + 0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4, + 0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc,0x26,0x09,0xe1,0xb9, + 0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81,0x85,0xad,0xd6,0xfc, + 0x26,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x06,0x2e,0x06,0xdd,0xb5,0x8d,0x81, + 0x84,0xac,0xd4,0xfc,0x24,0x0a,0xe1,0xb9,0xab,0xab,0xab,0xb4,0xdc,0x05,0x2d,0x06, + 0xde,0xb6,0x8e,0x81,0x85,0xad,0xd5,0xfc,0x25,0x09,0xe1,0xb9,0xab,0xab,0xab,0xb5, + 0xdd,0x06,0x2d,0x05,0xdc,0xb4,0x8c,0x81,0x87,0xae,0xd5,0xfc,0x24,0x05,0xdd,0xb6, + 0xb0,0xda,0x06,0x26,0x0e,0x0e,0x0e,0x0e,0xf5,0xca,0xa0,0x81,0x81,0x86,0xaa,0xcd, + 0xee,0x0b,0x24,0x21,0x14,0x0e,0x0e,0x13,0x1e,0x06,0xda,0xb0,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x2c,0x13, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x2c,0x13,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x26,0x15,0x13,0x13,0x19,0x23,0x1b,0x06,0xec,0xcd,0xac,0x89,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x26,0xfa,0xd0,0xa5,0xb3,0xd9,0xff,0x26,0x3b,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc, + 0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f, + 0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde,0xff,0x1c,0x22, + 0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81,0x97,0xbb,0xde, + 0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81,0x81,0x81,0x81, + 0x97,0xbb,0xde,0xff,0x1c,0x22,0x11,0x0b,0x0f,0x1f,0x1a,0xfc,0xde,0xbc,0x98,0x81, + 0x81,0x81,0xa5,0xc3,0xe1,0xf5,0xd7,0xb9,0x9b,0xa3,0xc3,0xe1,0xf9,0xdb,0xbd,0x9f, + 0x81,0x81,0x8b,0xb0,0xd4,0xf5,0x14,0x2c,0x1a,0x0b,0x0c,0x19,0x22,0x07,0xe8,0xc7, + 0xa4,0x81,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f, + 0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b, + 0x18,0x1f,0x04,0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11, + 0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8, + 0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd3,0xab, + 0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81,0x8f,0xb9,0xe2,0x0b, + 0x11,0xfc,0xd3,0xab,0x83,0x81,0x81,0xa8,0xd0,0xf7,0x11,0x11,0xeb,0xc2,0x98,0x81, + 0x8f,0xb9,0xe1,0x0a,0x11,0xfc,0xd5,0xac,0x84,0x81,0x81,0xa7,0xcf,0xf7,0x11,0x11, + 0xec,0xc3,0x9a,0x81,0x8f,0xb9,0xe2,0x0b,0x11,0xfc,0xd4,0xac,0x84,0x81,0x81,0xa8, + 0xd1,0xf9,0x11,0x11,0xea,0xc1,0x97,0x81,0x92,0xbc,0xe6,0x0d,0x11,0xf5,0xce,0xa7, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x92,0xb2, + 0xd0,0xe9,0xfc,0x0c,0x20,0x1d,0x17,0x11,0x07,0xfa,0xd9,0xaf,0x85,0x81,0x81,0x85, + 0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b,0x81,0x81, + 0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef,0xc5,0x9b, + 0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xef, + 0xc5,0x9b,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xef,0xc5,0x9b,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x93,0xbd,0xe7, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa5, + 0xd0,0xfa,0x11,0x11,0x11,0x0f,0x0b,0x04,0xf4,0xe2,0xcb,0xb0,0x92,0x81,0x81,0x81, + 0x81,0x83,0xad,0xd7,0x04,0x11,0xfa,0xd0,0xa5,0xa1,0xc7,0xed,0x11,0x11,0x11,0xe5, + 0xba,0x90,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf, + 0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14, + 0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b, + 0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc3, + 0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x15,0x19,0x14,0x09,0xf6,0xdf,0xc1,0xa3,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc2,0xcc,0xb9,0x9b,0x81,0x87,0xa5,0xc2,0xcf,0xbd,0x9f,0x81, + 0x81,0x81,0x81,0x99,0xb9,0xd7,0xf1,0x19,0x13,0x19,0x16,0x0d,0xfc,0xe6,0xcc,0xac, + 0x8c,0x81,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb, + 0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16, + 0x0c,0xfb,0xe3,0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a, + 0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f, + 0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8d,0xb5,0xd9,0xe5, + 0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81, + 0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9a,0xc1,0xe1,0xe5,0xe5, + 0xe0,0xbf,0x97,0x81,0x8d,0xb5,0xd9,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x9b, + 0xc2,0xe1,0xe5,0xe5,0xde,0xbc,0x94,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe0,0xbf,0x98, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x94, + 0xaf,0xc5,0xd6,0xf7,0x20,0x09,0xed,0xe7,0xdf,0xd2,0xc0,0xa1,0x81,0x81,0x81,0x82, + 0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97,0x81,0x81, + 0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0,0xbf,0x97, + 0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe0, + 0xbf,0x97,0x81,0x81,0x81,0x82,0xab,0xd1,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe0,0xbf,0x97,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x8f,0xb8,0xdb, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0xa1, + 0xc8,0xe4,0xe5,0xe5,0xe5,0xe5,0xe0,0xd9,0xcd,0xbc,0xa8,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa9,0xcf,0xe5,0xe5,0xe4,0xc8,0xa1,0x8f,0xb5,0xd9,0xe5,0xe5,0xe5,0xd9, + 0xb5,0x8d,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd, + 0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea, + 0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe2, + 0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5, + 0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xbe,0xd3,0xe2,0xea,0xed,0xea,0xe1,0xd1,0xbd,0xa3,0x85,0x81,0x81, + 0x81,0x81,0x81,0x86,0x9c,0xa2,0x97,0x81,0x81,0x81,0x87,0x9d,0xa5,0x9a,0x81,0x81, + 0x81,0x81,0x81,0x82,0xaa,0xd3,0xfb,0x21,0xf7,0xed,0xec,0xe4,0xd6,0xc4,0xac,0x90, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5, + 0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea, + 0xe3,0xd5,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b, + 0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9d,0xb5,0xba, + 0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81, + 0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x87,0xa6,0xb9,0xba,0xba, + 0xb8,0xa5,0x85,0x81,0x81,0x9d,0xb5,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x88, + 0xa6,0xb9,0xba,0xba,0xb8,0xa3,0x83,0x81,0x81,0x9f,0xb6,0xba,0xba,0xb8,0xa5,0x85, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xae,0xd7,0xff,0x25,0xfc,0xd4,0xbe,0xb6,0xaa,0x9b,0x85,0x81,0x81,0x81,0x81, + 0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85,0x81,0x81, + 0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8,0xa5,0x85, + 0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb8, + 0xa5,0x85,0x81,0x81,0x81,0x81,0x96,0xb1,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xb8,0xa5,0x85,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x9f,0xb6, + 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x8d, + 0xab,0xba,0xba,0xba,0xba,0xba,0xb7,0xaf,0xa4,0x96,0x84,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xaf,0xba,0xba,0xba,0xab,0x8d,0x81,0x9d,0xb5,0xba,0xba,0xba,0xb5, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98, + 0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0, + 0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83, + 0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0x9a,0xad,0xb9,0xc1,0xc2,0xc0,0xb8,0xab,0x98,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8e,0xb6,0xdf,0x09,0x15,0xec,0xc4,0xc2,0xbb,0xaf,0x9f,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae, + 0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1, + 0xba,0xae,0x9c,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90, + 0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x82,0x8f,0x90,0x90, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81, + 0x82,0x8f,0x90,0x90,0x8e,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0xb7,0xe0,0x0a,0x19,0xf1,0xc8,0x9f,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d, + 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81, + 0x86,0x90,0x90,0x90,0x90,0x90,0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x89,0x90,0x90,0x90,0x86,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x8d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x8f,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x92,0xbd,0xe7,0xfa,0xfa,0xe1,0xb8,0x98,0x92,0x87,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97, + 0x91,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xbd,0xe7,0xfa,0xfa,0xe5,0xbc,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x88,0xad,0xc9,0xd0,0xd0,0xc5,0xa7,0x82,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0xad,0xc9,0xd0,0xd0,0xc8,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8f,0xa2,0xa5,0xa5,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xa2,0xa5,0xa5,0xa1,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa7,0xc5,0xda,0xda,0xda,0xcb,0xae,0x92,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc5,0xd8,0xd9,0xc8,0xac,0xc2,0xd6,0xda,0xcb, + 0xb0,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd6,0xda, + 0xda,0xda,0xd0,0xae,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xaa,0xc7,0xe3,0xff,0x06,0x06,0xea,0xce,0xb1,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe3,0xff,0xff,0xe8,0xc4,0xdf,0xfc,0x04,0xec, + 0xc8,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd9,0xf7,0x06, + 0x06,0x05,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8c, + 0x90,0x90,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b, + 0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81,0x81,0x85,0x82,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa2,0xb1,0xb5,0xb2,0xa5, + 0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b, + 0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85,0x81, + 0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x8b,0x8b, + 0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0x88,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x8b,0x8b,0x8b,0x8a,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0x8b,0x8b,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x8b,0x84,0x81, + 0x81,0x84,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x85, + 0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xac,0xc8,0xe6,0x04,0x1f,0x0a,0x1d,0x0a,0xec,0xd0,0xb4,0x93, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1d,0x21,0xf7,0xcd,0xed,0x18,0x26,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf7,0x16,0x16, + 0xfc,0xe3,0xca,0xaa,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0x9d,0xac,0xb6, + 0xba,0xba,0xb6,0xac,0x9b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5, + 0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9a,0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c,0x9e,0xaf,0xab,0x96,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc7,0xd9,0xdf,0xdc,0xcb, + 0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8a,0xa1,0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5, + 0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa2,0xb4,0xb5,0xb5, + 0xa9,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0,0xa5, + 0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xa9,0xb5,0xb5, + 0xb5,0xb3,0x9f,0x91,0x9a,0xa0,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x99, + 0xaa,0xb2,0xb2,0xaa,0x99,0x9d,0xac,0xa9,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xaf,0xb5,0xb5,0xb5,0xb3,0xa0,0x82, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4,0xb4,0xb5,0xb5,0xa9,0x8e,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x9b,0xac,0xb5,0xb5,0xad,0x9c, + 0x9c,0xae,0xac,0x97,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x89,0xa0,0xaf,0xb0, + 0xa5,0x8f,0x9f,0xae,0xb0,0xa6,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8c,0xa3,0xc1,0xe8,0x05,0x11,0xff,0xe6,0xfb,0x11,0x0d,0xf0,0xcb,0xa7, + 0x93,0x81,0x81,0x81,0x8c,0xa3,0xc3,0xe9,0x0a,0x0b,0xee,0xc8,0xe5,0x07,0x0e,0xf1, + 0xcd,0xa7,0x93,0x81,0x81,0x95,0xa8,0xab,0xab,0xab,0xae,0xd6,0xf7,0x13,0x0f,0xf4, + 0xdb,0xc2,0xab,0xab,0xaa,0x9b,0x81,0x81,0x81,0x93,0xa5,0xa8,0xa8,0xa6,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xac,0xc3,0xd4,0xdf, + 0xe5,0xe5,0xdf,0xd4,0xc1,0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf, + 0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xb6,0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81, + 0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0xa3,0xbf,0xd4,0xdf,0xdf,0xd4,0xc1,0xbd,0xd7,0xd1,0xb4,0x96, + 0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca, + 0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa6,0xca,0xe8,0xff,0x0b,0x04,0xee, + 0xd0,0xad,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf, + 0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x86,0xa8,0xc6,0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81, + 0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf, + 0xdf,0xdc,0xbf,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdc,0xdf,0xdf, + 0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda,0xca, + 0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0xa4,0xca,0xdf,0xdf, + 0xdf,0xda,0xbc,0xbb,0xc4,0xca,0xbb,0x9b,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbd, + 0xd2,0xdd,0xdd,0xd2,0xbf,0xbd,0xd6,0xcf,0xb2,0x94,0x81,0x81,0x81,0x81,0x8b,0xb3, + 0xd5,0xdf,0xdf,0xdf,0xda,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xdf,0xdf,0xdf,0xdb,0xbc,0x95, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xdd,0xdf,0xdf,0xca,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xa1,0xbe,0xd3,0xdf,0xdf,0xd5,0xc2, + 0xbb,0xd6,0xd3,0xb6,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa7,0xc4,0xd7,0xda, + 0xca,0xae,0xc3,0xd6,0xda,0xcb,0xb0,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa7,0xc8,0xd5,0xde,0xe5,0xe5,0xde,0xc5,0xd9,0xe5,0xe5,0xe3,0xd5,0xce, + 0xb0,0x8a,0x81,0x81,0xa7,0xc8,0xd5,0xd5,0xe2,0xe3,0xd1,0xb3,0xca,0xe1,0xe4,0xd5, + 0xd5,0xce,0xb0,0x8a,0x8d,0xb2,0xcf,0xd5,0xd5,0xd5,0xc5,0xd3,0xe7,0xe7,0xe7,0xd3, + 0xb9,0xd2,0xd5,0xd5,0xd3,0xbb,0x97,0x81,0x8c,0xb1,0xcd,0xd2,0xd2,0xce,0xb3,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0xad,0xcc,0xe7,0xfb,0x09, + 0x11,0x11,0x09,0xfa,0xe4,0xc7,0xa4,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04, + 0x0b,0x0b,0xf9,0xdb,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xdf,0xf9,0x09,0x09,0xfa,0xe5,0xd9,0xf9,0xf0,0xd2,0xaf, + 0x88,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea, + 0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb7,0xdf,0x05,0x12,0xff,0x0f,0x0b, + 0xe6,0xbe,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b, + 0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81, + 0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x81,0x99,0xc0,0xe4,0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81, + 0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b, + 0x0b,0xef,0xc7,0x9d,0x81,0x81,0x81,0x81,0x81,0x85,0xa3,0xc1,0xdf,0xfc,0x0b,0x07, + 0xe8,0xca,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04,0xea, + 0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x85,0xaa,0xd4,0xfb,0x0b, + 0x0b,0xf7,0xdc,0xe4,0xed,0xf5,0xd3,0xaa,0x81,0x81,0x81,0x81,0x81,0x9c,0xbe,0xdd, + 0xf7,0x06,0x06,0xf7,0xe3,0xd7,0xf7,0xee,0xd0,0xae,0x87,0x81,0x81,0x81,0x90,0xba, + 0xe3,0x04,0x0b,0x0b,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4,0xf1,0x0b,0x0b,0x09,0xed,0xc4,0x9a, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1,0xff,0x0b,0x07,0xe8,0xca,0xac, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xdd,0xf9,0x09,0x09,0xfb,0xe6, + 0xd8,0xf6,0xf1,0xd4,0xb2,0x8b,0x81,0x81,0x81,0x81,0x81,0x96,0xbe,0xe2,0xff,0x04, + 0xea,0xc7,0xe0,0xfc,0x04,0xec,0xc9,0xa3,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xb8,0xa3,0xb5,0xc5,0xef,0xff,0xff,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0xff,0xff,0xfa,0xd0,0xad,0x96,0xa8,0xc5,0xef,0xff, + 0xff,0xe7,0xbd,0x93,0x95,0xc0,0xea,0xff,0xff,0xff,0xdb,0xb6,0xbd,0xbd,0xbd,0xb0, + 0xcd,0xf3,0xff,0xff,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0xfc,0xfc,0xec,0xc2,0x9d, + 0x9b,0x96,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc5,0xe8,0x09,0x21,0x14, + 0x0b,0x0d,0x19,0x1f,0x04,0xdf,0xb9,0x91,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1, + 0xfb,0x14,0x16,0xf7,0xd9,0xbb,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81, + 0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81, + 0x81,0x81,0x84,0xae,0xd6,0xfa,0x1c,0x0f,0x12,0x20,0x0a,0xff,0x14,0x09,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc, + 0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xbd,0xe7,0x13,0xfc,0xd7,0xf5,0x1a, + 0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb, + 0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e,0x81,0x81,0x81,0x81, + 0x86,0xa7,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81, + 0x81,0x81,0xa0,0xca,0xf5,0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81, + 0x81,0x81,0x81,0x87,0xac,0xc8,0xe1,0xfb,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04, + 0xe9,0xd0,0xb4,0x91,0x81,0x81,0x81,0x81,0x82,0xa3,0xc1,0xdf,0xfc,0x1c,0x0c,0x1f, + 0x07,0xe8,0xca,0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25,0xfc, + 0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x9c,0xc1,0xd9,0xe2,0xff, + 0x22,0x12,0x06,0x0e,0x16,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9, + 0x1a,0x12,0x14,0x1d,0x07,0xfc,0x12,0x0b,0xe2,0xb8,0x8d,0x81,0x81,0x81,0x85,0xa9, + 0xc8,0xe1,0xfa,0x14,0x18,0xf9,0xdb,0xbd,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1,0x10,0x1a,0xff,0xe7,0xce,0xb2,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff,0x1d,0x0a,0x1f,0x07,0xe8,0xca, + 0xac,0x8d,0x81,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf9,0x1a,0x0f,0x12,0x20,0x0b, + 0xff,0x13,0x0b,0xe4,0xba,0x90,0x81,0x81,0x81,0x81,0x81,0x9d,0xc8,0xf2,0x1c,0x25, + 0xfc,0xd2,0xef,0x19,0x27,0xff,0xd5,0xab,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x8e,0xb4,0xd9,0xfc,0x22,0x15,0xf0,0xcb,0xa6,0x93,0x97,0xbb, + 0xe1,0x07,0x2b,0x07,0xe2,0xbd,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc8,0xc8, + 0xc5,0xbf,0xb4,0xa4,0x8f,0x81,0x81,0x81,0x81,0x88,0xb1,0xd8,0xff,0x23,0x0a,0xed, + 0xe1,0xe2,0xf5,0x19,0x17,0xee,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0, + 0xd9,0xf3,0x0d,0x16,0xf7,0xd9,0xb4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf7,0xdf,0xc5,0xac,0x92,0x81,0x81,0x81,0x81, + 0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81, + 0x81,0x81,0x83,0xad,0xd4,0xf3,0x07,0xe8,0xec,0x04,0x14,0x18,0x0a,0xee,0xce,0xab, + 0x84,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4, + 0xcd,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x91,0xba,0xe3,0x0b,0x09,0xf2,0x04,0x12, + 0xeb,0xc2,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0x90,0x98,0x9b,0x9a,0x92,0x85, + 0x94,0x9b,0x9b,0x94,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8c, + 0x95,0x98,0x98,0x95,0x8e,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9, + 0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81,0x81,0x81,0x81,0x81, + 0x98,0xc0,0xe3,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xc6,0xed,0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xa6,0xc0,0xd9,0xf3,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1, + 0xc8,0xae,0x94,0x81,0x81,0x81,0x81,0x81,0x92,0xbb,0xdf,0xfc,0x1b,0x06,0xea,0xff, + 0x1a,0x07,0xe8,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12,0xf4, + 0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x0b,0x14, + 0x27,0x2e,0x22,0x0f,0x06,0xfc,0xd5,0xaa,0x81,0x81,0x81,0x81,0x84,0xad,0xd5,0xf5, + 0x09,0xea,0xee,0x05,0x17,0x1a,0x0b,0xf0,0xcf,0xac,0x85,0x81,0x81,0x81,0x81,0x8c, + 0xa6,0xbf,0xd9,0xf1,0x0d,0x18,0xf9,0xdb,0xb6,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x83,0xac,0xd3,0xf1,0x10,0x12,0xf9,0xdf,0xc6,0xac,0x93,0x81, + 0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b,0x04,0xe8,0xff,0x1a,0x07,0xe8, + 0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd4,0xf1,0x07,0xe8,0xec,0x04,0x14, + 0x18,0x0b,0xf0,0xcf,0xac,0x87,0x81,0x81,0x81,0x81,0x81,0x9b,0xc3,0xeb,0x0d,0x12, + 0xf4,0xcd,0xe8,0x0b,0x13,0xf6,0xd0,0xa8,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x9f,0xc4,0xe8,0x0d,0x2a,0x04,0xdf,0xba,0x94,0xab,0xcf, + 0xf5,0x1a,0x17,0xf1,0xcd,0xa8,0x84,0x81,0x95,0xc0,0xea,0x16,0x19,0xf2,0xf2,0xf2, + 0xef,0xe7,0xdb,0xc9,0xb2,0x96,0x81,0x81,0x81,0x92,0xbb,0xe5,0x0e,0x1e,0xf5,0xcf, + 0xb7,0xbb,0xe5,0x11,0x1e,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xa9, + 0xb7,0xd1,0xeb,0xef,0xef,0xde,0xb6,0xa2,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9a,0xa9,0xb5,0xd6,0xef,0xef,0xef,0xd6,0xbd,0xa3,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x97,0xc0,0xe6,0xef,0xef,0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0x9e,0x81,0x81, + 0x81,0x81,0x81,0x99,0xb8,0xd4,0xe7,0xcc,0xc8,0xde,0xea,0xed,0xe3,0xce,0xb2,0x93, + 0x81,0x81,0x81,0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7, + 0xb9,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xac,0xd2,0xf3,0x0d,0x19,0x11,0xf7, + 0xd8,0xb3,0x8d,0x81,0x81,0x81,0x81,0x81,0x9a,0xab,0xb9,0xc2,0xc5,0xc3,0xba,0xab, + 0xbc,0xc5,0xc5,0xbd,0xac,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x93,0xa6,0xb4, + 0xbf,0xc2,0xc2,0xbf,0xb8,0xac,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x9e,0xb7, + 0xd1,0xea,0xef,0xef,0xe0,0xb8,0x9f,0x89,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x92,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x99,0xc3,0xe8,0xef,0xef,0xe3,0xc8,0xde,0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81, + 0x81,0x81,0x8e,0xb3,0xd2,0xe7,0xe9,0xd5,0xc5,0xd0,0xe7,0xea,0xd7,0xb9,0x95,0x81, + 0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd1,0xea,0xef,0xef,0xe0,0xb8,0x8f,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xbd,0xbd,0xd4,0xef,0xef,0xef,0xd9,0xc0, + 0xa6,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe4,0xef,0xef,0xe6,0xca,0xdf, + 0xef,0xef,0xed,0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x95,0xb2,0xd0,0xe7,0xea,0xd7, + 0xbd,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0xa5,0xd0,0xfa,0x13,0x0a, + 0xff,0x11,0x23,0xff,0xde,0xd5,0xc1,0x9f,0x81,0x81,0x81,0x81,0x85,0xa5,0xb9,0xd7, + 0xea,0xcd,0xcb,0xe0,0xed,0xef,0xe6,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9e,0xb7,0xd0,0xea,0xef,0xef,0xe0,0xb8,0xa1,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x97,0xae,0xd6,0xef,0xef,0xef,0xd7,0xbe,0xa4,0x8b,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x97,0xc0,0xe6,0xef,0xef,0xe4,0xc8,0xde,0xef,0xef,0xed, + 0xca,0xa1,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb7,0xd4,0xe7,0xcc,0xc8,0xdc,0xea, + 0xed,0xe4,0xd0,0xb4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd0,0xe7,0xea, + 0xd7,0xc5,0xce,0xe6,0xea,0xd9,0xbb,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x8b,0xaf,0xd4,0xf9,0x1e,0x18,0xf3,0xce,0xa9,0xbe,0xe3, + 0x09,0x27,0x04,0xde,0xb9,0x94,0x81,0x81,0x95,0xc0,0xea,0x16,0x27,0x1e,0x1e,0x1e, + 0x19,0x11,0x04,0xed,0xd2,0xb3,0x91,0x81,0x81,0x95,0xc0,0xea,0x15,0x19,0xed,0xc4, + 0xc0,0xd9,0xf5,0x19,0x14,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2, + 0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b, + 0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x81, + 0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xb0,0x8f,0x81,0x81, + 0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7,0xdb,0xc7,0xac,0x8e, + 0x81,0x81,0x81,0x81,0x81,0x9e,0xbf,0xd2,0xde,0xe7,0xed,0xef,0xee,0xe7,0xdb,0xc7, + 0xac,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xbd,0xd2,0xde,0xe7,0xed,0xef,0xef,0xe7, + 0xdb,0xc7,0xac,0x8e,0x81,0x81,0x81,0x99,0xbb,0xd2,0xe1,0xec,0xef,0xed,0xe2,0xce, + 0xe3,0xef,0xef,0xe5,0xd0,0xb2,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb7,0xcc,0xdc, + 0xe7,0xed,0xed,0xe9,0xe1,0xd3,0xb9,0x94,0x81,0x81,0x81,0x81,0x81,0x9a,0xb5,0xcd, + 0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xac,0xc3,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc4,0xb2,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9a,0xb5,0xcd,0xdf,0xeb,0xef,0xee,0xe7,0xd8,0xc3,0xaa,0x8c,0x81, + 0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb,0x92,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xdf,0xbb, + 0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, + 0xdf,0xc5,0xc4,0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0xa9,0xd0,0xe7,0xe7,0xe7,0xe7, + 0xe7,0xe7,0xdf,0xc0,0xb4,0x9d,0x81,0x81,0x81,0x81,0x81,0xa4,0xcd,0xee,0xe9,0xe1, + 0xea,0xf9,0x1b,0x18,0xf4,0xd1,0xac,0x88,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xd5,0xde,0xeb,0xef,0xed,0xe2,0xce,0xb2,0x94,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81, + 0x81,0x81,0x81,0x81,0x81,0x88,0xaa,0xc2,0xd1,0xe1,0xec,0xef,0xef,0xe7,0xda,0xc6, + 0xb2,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1,0xec,0xef,0xef, + 0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9f,0xba,0xd1,0xe1, + 0xec,0xef,0xef,0xe7,0xda,0xc6,0xae,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x9a,0xbf,0xe3,0x09,0x2d,0x07,0xe2,0xbd,0xd2,0xf7, + 0x1d,0x12,0xee,0xc8,0xa4,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xff,0xff,0xff, + 0x06,0x15,0x27,0x0f,0xee,0xcb,0xa6,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xdf,0xfb,0x14,0x1a,0xfc,0xdb,0xb5,0x8f,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9, + 0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7,0x82,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11,0xff,0xe8,0xca,0xa7, + 0x82,0x81,0x81,0x81,0x81,0xaa,0xd4,0xfa,0x07,0x11,0x19,0x1b,0x19,0x11,0xff,0xe8, + 0xca,0xa7,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xf9,0x07,0x11,0x18,0x1b,0x19,0x11, + 0xff,0xe8,0xca,0xa7,0x82,0x81,0x81,0xa5,0xcf,0xf7,0x09,0x15,0x1b,0x17,0x09,0xee, + 0x09,0x19,0x19,0x0b,0xee,0xcd,0xa8,0x82,0x81,0x81,0x81,0x9c,0xbb,0xd9,0xf1,0x05, + 0x11,0x19,0x19,0x13,0x0a,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x95,0xb6,0xd5,0xf0, + 0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81,0x95,0xb6, + 0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81,0x81,0x81, + 0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84,0x81,0x81, + 0x81,0x81,0x95,0xb6,0xd5,0xf0,0x06,0x14,0x1b,0x19,0x0f,0xfc,0xe6,0xc8,0xa7,0x84, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13,0x13,0x13, + 0xea,0xc0,0x9a,0x8e,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x13,0x13,0x13, + 0x13,0x13,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x9e,0xbd,0xdb,0xf4,0x09, + 0x14,0x19,0x1d,0x2f,0x0b,0xe6,0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x0b,0xea,0x04,0x14,0x1b,0x17,0x09,0xee,0xcf,0xab,0x85,0x81,0x81,0x81,0x81,0x9d, + 0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81, + 0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19,0x11,0xff,0xe8, + 0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09,0x15,0x1b,0x19, + 0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x9d,0xbd,0xdb,0xf5,0x09, + 0x15,0x1b,0x19,0x11,0xff,0xe8,0xcc,0xac,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x86,0xab,0xcf,0xf4,0x19,0x1b,0xf6,0xd2,0xe6,0x0b, + 0x22,0xfc,0xd9,0xb4,0x8f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd5,0xd5, + 0xdd,0xf1,0x0f,0x29,0x05,0xde,0xb6,0x8e,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd8, + 0xfc,0x1c,0x12,0xf7,0xdf,0xc1,0xa0,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc, + 0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba,0x92,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19,0x25,0x05,0xe1,0xba, + 0x92,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0x19,0x0f,0x09,0x06,0x0a,0x19,0x24,0x05, + 0xe0,0xba,0x92,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x19,0x0f,0x09,0x06,0x0a,0x19, + 0x25,0x05,0xe1,0xba,0x92,0x81,0x81,0xa5,0xd0,0xfa,0x12,0x06,0xff,0x0a,0x25,0x0b, + 0x1c,0x04,0x06,0x21,0x07,0xe1,0xba,0x92,0x81,0x81,0x91,0xb5,0xd7,0xf7,0x14,0x26, + 0x13,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x86,0xac,0xd0,0xf1,0x10, + 0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86,0xac,0xd0, + 0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81,0x81,0x86, + 0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98,0x81,0x81, + 0x81,0x86,0xac,0xd0,0xf1,0x10,0x1d,0x09,0xff,0x04,0x14,0x21,0x04,0xe2,0xbe,0x98, + 0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b,0x1b,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xad,0xd7,0x04,0x0b,0x0b,0x0b, + 0x1b,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x91,0xb5,0xd9,0xf9,0x17,0x1c, + 0x0b,0x06,0x09,0x12,0x20,0xfa,0xd4,0xae,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x0b,0x0b,0x1c,0x0a,0x06,0x13,0x2b,0x0a,0xe3,0xbd,0x94,0x81,0x81,0x81,0x8f,0xb5, + 0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81, + 0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f, + 0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09,0x18,0x24,0x09, + 0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e,0x0c,0x06,0x09, + 0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x8f,0xb5,0xd9,0xf9,0x18,0x1e, + 0x0c,0x06,0x09,0x18,0x24,0x09,0xe8,0xc4,0x9f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x95,0xba,0xdf,0x04,0x29,0x0b,0xe5,0xf9,0x1f, + 0x0f,0xe9,0xc4,0x9f,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xac, + 0xb6,0xd3,0xf9,0x21,0x13,0xea,0xc0,0x96,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe6, + 0x0f,0x1e,0xf6,0xd7,0xbd,0xa3,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb, + 0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8, + 0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81,0x81,0x81, + 0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6,0x9d,0x81, + 0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7,0x1b,0x18,0xef,0xc6, + 0x9d,0x81,0x81,0x81,0x81,0xab,0xd5,0xff,0xf1,0xe5,0xdd,0xda,0xe1,0xf7,0x1b,0x18, + 0xef,0xc6,0x9d,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfb,0xf1,0xe6,0xdd,0xda,0xe1,0xf7, + 0x1a,0x18,0xef,0xc6,0x9d,0x81,0x81,0xa5,0xcf,0xf7,0xeb,0xdc,0xd5,0xe9,0x11,0x2a, + 0x04,0xdf,0xe7,0x0e,0x18,0xef,0xc6,0x9c,0x81,0x81,0xa3,0xc9,0xef,0x12,0x22,0x04, + 0xec,0xdf,0xdf,0xe5,0xf2,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x97,0xbe,0xe5,0x0b,0x20, + 0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97,0xbe,0xe5, + 0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81,0x81,0x97, + 0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7,0x81,0x81, + 0x81,0x97,0xbe,0xe5,0x0b,0x20,0xff,0xe3,0xd5,0xdc,0xf1,0x12,0x1d,0xf6,0xcf,0xa7, + 0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa7,0xcc,0xdf,0xdf,0xdf,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0xa3,0xc9,0xef,0x14,0x18,0xf9, + 0xe3,0xda,0xdd,0xfb,0x21,0x0c,0xe6,0xbe,0x96,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1b,0x18,0xfb,0xe2,0xdc,0xf3,0x18,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa1,0xc8, + 0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81, + 0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf, + 0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0,0xf3,0x12,0x22, + 0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb,0xe4,0xda,0xe0, + 0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0xa1,0xc8,0xee,0x13,0x1c,0xfb, + 0xe4,0xda,0xe0,0xf3,0x12,0x22,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0xa6,0xcb,0xef,0x14,0x1e,0xf7,0x0c,0x1e, + 0xf9,0xd4,0xaf,0x8b,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0x9c,0xc6,0xef,0x1b,0x19,0xed,0xc2,0x98,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe7, + 0x12,0x1c,0xf4,0xd4,0xb9,0xa0,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2, + 0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c, + 0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xc9,0xbd,0xc0,0xc2,0xc2,0xe5,0x0f,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x9c,0xbf,0xd2,0xc9,0xbd,0xc0,0xc2,0xc2,0xe4, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x99,0xbb,0xcf,0xc5,0xbc,0xc0,0xdf,0x09,0x20, + 0xf5,0xcd,0xda,0x04,0x21,0xf7,0xcd,0xa3,0x81,0x89,0xb2,0xda,0xff,0x28,0x0b,0xe6, + 0xc8,0xb6,0xb5,0xbc,0xcc,0xd0,0xb7,0x93,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1d,0x0e, + 0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4,0xcd,0xf5, + 0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81,0x81,0xa4, + 0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2,0x88,0x81, + 0x81,0xa4,0xcd,0xf5,0x1d,0x0e,0xe7,0xc3,0xbd,0xbd,0xd8,0xff,0x28,0x04,0xdb,0xb2, + 0x88,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90,0xab,0xb5,0xb5,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x88,0xb1,0xd9,0xff,0x28,0x04,0xde, + 0xbe,0xb1,0xc3,0xea,0x11,0x1c,0xf4,0xcc,0xa2,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x1d,0xfc,0xdd,0xbf,0xba,0xe3,0x0e,0x21,0xf7,0xcd,0xa3,0x81,0x81,0x85,0xae,0xd6, + 0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81, + 0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb, + 0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9,0xd7,0xfc,0x23, + 0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1,0xc1,0xb1,0xb9, + 0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x85,0xae,0xd6,0xff,0x27,0x06,0xe1, + 0xc1,0xb1,0xb9,0xd7,0xfc,0x23,0x0d,0xe4,0xbb,0x92,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x91,0xb5,0xda,0xff,0x24,0x0b,0x20,0x0a, + 0xe5,0xc0,0x9b,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98, + 0xa3,0xca,0xf3,0x1e,0x14,0xea,0xc1,0x97,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0x05,0x27,0x10,0xf3,0xdb,0xc2,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5, + 0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e, + 0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x81,0x8e,0xac,0xc5,0xd7,0xe4,0xea,0xed,0xed,0xed, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x8a,0xa9,0xc4,0xd9,0xe5,0xea,0xea,0x09,0x1b, + 0xef,0xea,0xea,0xff,0x26,0xfa,0xd0,0xa5,0x81,0x91,0xbb,0xe5,0x0e,0x22,0xfa,0xd2, + 0xac,0x8e,0x8b,0x94,0xa4,0xa7,0x97,0x81,0x81,0x81,0x82,0xac,0xd6,0xff,0x29,0x04, + 0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac,0xd6,0xff, + 0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81,0x82,0xac, + 0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7,0x8d,0x81, + 0x82,0xac,0xd6,0xff,0x29,0x04,0xe7,0xe7,0xe7,0xe7,0xe7,0xf7,0x21,0x0b,0xe1,0xb7, + 0x8d,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x8b,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x90,0xba,0xe4,0x0e,0x1e,0xf5,0xcc, + 0xa4,0x8c,0xb4,0xdc,0x06,0x28,0xff,0xd5,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xc1,0xa1,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb7,0xe0, + 0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81, + 0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2, + 0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e,0xc6,0xef,0x19, + 0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1,0xa8,0x87,0x9e, + 0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x8d,0xb7,0xe0,0x0b,0x23,0xfa,0xd1, + 0xa8,0x87,0x9e,0xc6,0xef,0x19,0x16,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0xa1,0xc6,0xeb,0x0f,0x31,0x1a,0xf4, + 0xd0,0xab,0x86,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xbc, + 0xc6,0xdf,0xff,0x28,0x09,0xe1,0xb8,0x8f,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xcb, + 0xec,0x0b,0x25,0x16,0xfc,0xe1,0xc3,0xa1,0x81,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8, + 0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa, + 0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19,0x1d,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x86,0xaa,0xca,0xe8,0xfc,0x0d,0x15,0x19,0x19,0x19, + 0x1d,0x21,0xf5,0xca,0xa0,0x81,0x81,0xa1,0xc5,0xe4,0xff,0x0e,0x16,0x16,0x18,0x23, + 0x16,0x16,0x16,0x16,0x26,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x14,0x1b,0xf1,0xc7, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2f,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x26,0x0e,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0xaa,0xd5,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe7,0x13, + 0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe7,0x13,0x1b,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfa,0xd0,0xa5,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0x81,0x81,0x81,0x81,0x81,0x8c,0xb1,0xd5,0xfc,0x29,0x09,0xe0, + 0xbb,0x96,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe6, + 0xee,0xff,0x1a,0x18,0xf5,0xd1,0xaa,0x83,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xce,0xea,0x04,0x1d,0x1d,0xff,0xdc,0xb6,0x90,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07, + 0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf, + 0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x99,0xbf,0xe5,0x07,0x22,0x13,0x05,0xff,0xff,0xff, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x8a,0xb2,0xda,0xff,0x21,0x0f,0xff,0xff,0x09,0x1b, + 0xff,0xff,0xff,0xff,0xff,0xfa,0xd0,0xa5,0x81,0x95,0xc0,0xea,0x16,0x1b,0xef,0xc6, + 0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xb0,0xda,0x06,0x2c,0x06, + 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0,0xda,0x06, + 0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81,0x85,0xb0, + 0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8,0x8d,0x81, + 0x85,0xb0,0xda,0x06,0x2c,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xe2,0xb8, + 0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc3, + 0x99,0x81,0xaa,0xd3,0xfc,0x29,0x06,0xda,0xb0,0x85,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x90,0xba,0xe5, + 0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81, + 0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5, + 0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95,0xbf,0xe8,0x13, + 0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9,0x9f,0x81,0x95, + 0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x90,0xba,0xe5,0x11,0x1e,0xf2,0xc9, + 0x9f,0x81,0x95,0xbf,0xe8,0x13,0x19,0xef,0xc5,0x9b,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e,0x11,0xe5, + 0xbc,0x92,0x81,0x88,0xb2,0xdd,0x09,0x26,0xfc,0xd2,0xa9,0x89,0xa0,0xc9,0xf2,0x1e, + 0x11,0xe5,0xbc,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x16,0x25,0x13,0xf9,0xdb,0xba,0x97,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xae,0xc8,0xe1,0xfc,0x1e,0x15,0xee,0xc6,0x9c,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e, + 0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd, + 0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa4,0xcd,0xf6,0x1e,0x14,0xf1,0xdc,0xd5,0xd5,0xe2, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x92,0xbc,0xe6,0x0f,0x19,0xf3,0xd7,0xdd,0x09,0x1c, + 0xf2,0xd5,0xd5,0xd5,0xd5,0xd4,0xbf,0x9b,0x81,0x93,0xbd,0xe7,0x11,0x20,0xf6,0xcd, + 0xa6,0x8b,0x8a,0x94,0xa4,0xa6,0x96,0x81,0x81,0x81,0x83,0xad,0xd7,0xff,0x2b,0x04, + 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad,0xd7,0xff, + 0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81,0x83,0xad, + 0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae,0x87,0x81, + 0x83,0xad,0xd7,0xff,0x2b,0x04,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xd0,0xae, + 0x87,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0,0x95,0x8d, + 0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x8b,0x8d,0x98,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0x95,0x8d,0x85,0x81,0x81,0x93,0xbd,0xe7,0x11,0x1d,0xf3,0xca, + 0xa2,0x89,0xb1,0xda,0x04,0x29,0xff,0xd6,0xac,0x82,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8d,0xb8,0xe2, + 0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81, + 0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1, + 0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f,0xc6,0xef,0x19, + 0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0,0xa7,0x87,0x9f, + 0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x8d,0xb8,0xe2,0x0b,0x23,0xf9,0xd0, + 0xa7,0x87,0x9f,0xc6,0xef,0x19,0x13,0xea,0xc1,0x97,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25,0x07,0xdf, + 0xb5,0x8c,0x81,0x84,0xae,0xd7,0xff,0x2a,0x05,0xde,0xbd,0xb2,0xb9,0xd7,0xfc,0x25, + 0x07,0xdf,0xb5,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x1e,0x11,0x11,0x11, + 0x0b,0xff,0xee,0xd9,0xbd,0x9f,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2, + 0xba,0xb2,0xc1,0xe5,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29, + 0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2, + 0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xea,0x0e,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x0b,0xe0,0xb7,0xba,0xd0,0xe9, + 0x0e,0x21,0xf5,0xca,0xa0,0x81,0x95,0xc0,0xea,0x16,0x13,0xe7,0xc0,0xe2,0x09,0x23, + 0xf9,0xd1,0xb0,0xb6,0xc2,0xc1,0xa8,0x86,0x81,0x8d,0xb6,0xdf,0x07,0x2b,0x05,0xe0, + 0xc3,0xb5,0xb5,0xbc,0xcc,0xcf,0xb5,0x92,0x81,0x81,0x81,0xa6,0xcf,0xf7,0x21,0x0f, + 0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6,0xcf,0xf7, + 0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81,0x81,0xa6, + 0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94,0x81,0x81, + 0x81,0xa6,0xcf,0xf7,0x21,0x0f,0xe8,0xc8,0xb5,0xb0,0xb2,0xb8,0xc1,0xc3,0xae,0x94, + 0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0,0xb8,0xb8, + 0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16,0xea,0xc0, + 0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed,0x19,0x16, + 0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x81,0x81,0x81,0x9d,0xb4,0xb8,0xb8,0xc2,0xed, + 0x19,0x16,0xea,0xc0,0xb8,0xb8,0xac,0x90,0x81,0x8d,0xb6,0xdf,0x09,0x28,0xff,0xdb, + 0xbb,0xb1,0xc5,0xe7,0x0f,0x1e,0xf5,0xcd,0xa4,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x87,0xb1,0xda, + 0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81, + 0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8, + 0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba,0xd9,0xfc,0x24, + 0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0,0xbf,0xb1,0xba, + 0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x87,0xb1,0xda,0x04,0x2a,0x06,0xe0, + 0xbf,0xb1,0xba,0xd9,0xfc,0x24,0x09,0xe0,0xb8,0x8f,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d,0xf7,0xd2, + 0xa9,0x81,0x81,0x81,0xa4,0xcd,0xf5,0x1b,0x18,0xf7,0xe3,0xdd,0xe2,0xf3,0x12,0x1d, + 0xf7,0xd2,0xa9,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xe5,0xe5, + 0xe1,0xd7,0xc8,0xb5,0x9e,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xdf, + 0xe2,0xdd,0xdf,0xf0,0x13,0x19,0xf1,0xc7,0x9e,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24, + 0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1, + 0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b,0x24,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0xa7,0xd1,0xfa,0x24,0x11,0xec,0xdb,0xe1,0xf3,0x0b, + 0x24,0x21,0xf5,0xca,0xa0,0x81,0x95,0xbf,0xe9,0x13,0x16,0xed,0xe0,0xfb,0x1c,0x21, + 0x09,0xe8,0xda,0xdf,0xe9,0xe4,0xbd,0x94,0x81,0x81,0xa9,0xd1,0xf6,0x1c,0x1c,0xff, + 0xe9,0xdf,0xde,0xe5,0xf1,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x9b,0xc3,0xe9,0x0f,0x23, + 0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b,0xc3,0xe9, + 0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81,0x81,0x9b, + 0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c,0x81,0x81, + 0x81,0x9b,0xc3,0xe9,0x0f,0x23,0x04,0xeb,0xde,0xda,0xdd,0xe2,0xea,0xea,0xc5,0x9c, + 0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2,0xe2,0xe2, + 0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16,0xea,0xe2, + 0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed,0x19,0x16, + 0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x81,0x81,0x8f,0xb6,0xd9,0xe2,0xe2,0xe2,0xed, + 0x19,0x16,0xea,0xe2,0xe2,0xe2,0xcb,0xa5,0x81,0x82,0xaa,0xd2,0xf9,0x1e,0x16,0xf5, + 0xe1,0xda,0xe6,0xff,0x22,0x0c,0xe6,0xc0,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa4,0xcc, + 0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81, + 0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa, + 0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0,0xf5,0x14,0x1a, + 0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb,0xe3,0xda,0xe0, + 0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0xa4,0xcc,0xf3,0x18,0x1a,0xfb, + 0xe3,0xda,0xe0,0xf5,0x14,0x1a,0xf6,0xd1,0xaa,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04,0xe2,0xbf, + 0x99,0x81,0x81,0x81,0x97,0xbc,0xe1,0x04,0x20,0x1b,0x0d,0x09,0x0b,0x18,0x1f,0x04, + 0xe2,0xbf,0x99,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x29,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xc2,0xba, + 0xb7,0xaf,0xa2,0x8f,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xea, + 0x0b,0x09,0x0b,0x14,0x22,0x05,0xe1,0xbb,0x94,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12, + 0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7, + 0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12,0x06,0x21, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x9f,0xc7,0xed,0x12,0x29,0x0f,0x06,0x0b,0x19,0x12, + 0x06,0x21,0xf5,0xca,0xa0,0x81,0x8f,0xb8,0xe1,0x09,0x27,0x0b,0x09,0x1b,0x04,0x0d, + 0x23,0x0d,0x06,0x09,0x12,0xea,0xc0,0x95,0x81,0x81,0x98,0xbe,0xe1,0xff,0x1d,0x21, + 0x11,0x09,0x09,0x0e,0x19,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5,0xf7,0x15, + 0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b,0xb1,0xd5, + 0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x8b, + 0xb1,0xd5,0xf7,0x15,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x8b,0xb1,0xd5,0xf7,0x16,0x25,0x12,0x09,0x06,0x09,0x0b,0x13,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e,0x0e,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a,0x0e,0x0e, + 0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e,0x1d,0x1a, + 0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x0e,0x0e,0x0e,0x0e, + 0x1d,0x1a,0x0e,0x0e,0x0e,0xff,0xd5,0xab,0x81,0x81,0x9a,0xc0,0xe3,0x05,0x21,0x19, + 0x09,0x06,0x0d,0x20,0x12,0xf3,0xd2,0xad,0x87,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x94,0xba, + 0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81, + 0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98, + 0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09,0x18,0x1c,0xff, + 0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d,0x0b,0x06,0x09, + 0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x94,0xba,0xde,0xff,0x1c,0x1d, + 0x0b,0x06,0x09,0x18,0x1c,0xff,0xdf,0xbd,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3,0xc7,0xa7, + 0x84,0x81,0x81,0x81,0x83,0xa7,0xc7,0xe4,0xfc,0x0d,0x16,0x19,0x16,0x0c,0xfb,0xe3, + 0xc7,0xa7,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa8,0xd2,0xfc,0x11,0x09,0xdd, + 0xb2,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xc2,0x98, + 0x8d,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x11,0x11,0xed,0xea, + 0x11,0x16,0x14,0x0e,0xfc,0xe6,0xc9,0xa7,0x82,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4, + 0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4, + 0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81,0x81,0x81, + 0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca,0xa0,0x81, + 0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11,0xf5,0xca, + 0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0,0x06,0x11, + 0xf5,0xca,0xa0,0x81,0x81,0x81,0x8e,0xb4,0xd7,0xf4,0x0a,0x16,0x19,0x12,0x05,0xf0, + 0x06,0x11,0xf5,0xca,0xa0,0x81,0x82,0xaa,0xce,0xf0,0x0b,0x17,0x14,0xff,0xe6,0xf1, + 0x0a,0x16,0x19,0x13,0x09,0xea,0xc0,0x95,0x81,0x81,0x83,0xa6,0xc5,0xe1,0xf9,0x0a, + 0x18,0x23,0x19,0x12,0x09,0xf1,0xc7,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb,0xd9,0xf3, + 0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81,0x9b,0xbb, + 0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81,0x81,0x81, + 0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d,0x81,0x81, + 0x81,0x81,0x9b,0xbb,0xd9,0xf3,0x06,0x11,0x18,0x19,0x16,0x11,0x09,0xf2,0xc8,0x9d, + 0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff, + 0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x81,0x93,0xbd,0xe7,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0xff,0xd5,0xab,0x81,0x81,0x86,0xa8,0xc8,0xe6,0xfc,0x0e, + 0x16,0x19,0x13,0x06,0xf1,0xd7,0xb8,0x97,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x11, + 0x11,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x11,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa2, + 0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81, + 0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82, + 0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15,0x0b,0xf7,0xe0, + 0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b,0x15,0x19,0x15, + 0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0xa2,0xc3,0xe1,0xf9,0x0b, + 0x15,0x19,0x15,0x0b,0xf7,0xe0,0xc3,0xa4,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1,0xa8,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x8b,0xa9,0xc2,0xd6,0xe4,0xea,0xed,0xea,0xe3,0xd5,0xc1, + 0xa8,0x8b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xcb,0xe4,0xe5,0xe5,0xd3, + 0xae,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xbc,0x94, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xba,0xdd,0xe5,0xe5,0xde,0xdd, + 0xe7,0xea,0xea,0xe4,0xd8,0xc5,0xab,0x8e,0x81,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1, + 0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b, + 0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x81, + 0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4,0x9c,0x81, + 0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5,0xe2,0xc4, + 0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1,0xe5,0xe5, + 0xe2,0xc4,0x9c,0x81,0x81,0x81,0x81,0x9b,0xb9,0xd1,0xe2,0xeb,0xed,0xe9,0xdd,0xd1, + 0xe5,0xe5,0xe2,0xc4,0x9c,0x81,0x81,0x94,0xb4,0xd1,0xe4,0xed,0xeb,0xdc,0xc6,0xd0, + 0xe3,0xed,0xed,0xe8,0xe0,0xd2,0xb4,0x8e,0x81,0x81,0x81,0x89,0xa6,0xbf,0xd3,0xed, + 0x16,0x12,0xed,0xe7,0xdf,0xd2,0xb7,0x93,0x81,0x81,0x81,0x81,0x81,0x9d,0xb8,0xcd, + 0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81,0x81,0x9d, + 0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81,0x81,0x81, + 0x81,0x9d,0xb8,0xcd,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95,0x81,0x81, + 0x81,0x81,0x81,0x9d,0xb8,0xce,0xde,0xe7,0xed,0xed,0xea,0xe7,0xdf,0xd5,0xba,0x95, + 0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8f,0xb8,0xdb,0xe5,0xe5,0xe5,0xe5, + 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xcd,0xa6,0x81,0x81,0x81,0x8c,0xaa,0xc3,0xd8,0xe5, + 0xed,0xed,0xe9,0xde,0xcd,0xb6,0x9b,0x81,0x81,0x81,0x81,0x81,0x97,0xbf,0xe0,0xe5, + 0xe5,0xdb,0xb8,0x8f,0xb0,0xd5,0xe5,0xe5,0xe3,0xc6,0x9f,0x81,0x81,0x81,0x81,0x87, + 0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81, + 0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81, + 0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea,0xe2,0xd3,0xbe, + 0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2,0xea,0xed,0xea, + 0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xbf,0xd3,0xe2, + 0xea,0xed,0xea,0xe2,0xd3,0xbe,0xa5,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xaf,0xbb,0xc1,0xc2,0xc1,0xba,0xae,0x9c, + 0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0xac,0xba,0xba,0xba,0xb2, + 0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xa3,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa1,0xb7,0xba,0xba,0xb8,0xb7, + 0xbd,0xc0,0xc0,0xbb,0xb0,0x9f,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xac, + 0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81, + 0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81, + 0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8,0x89,0x81, + 0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba,0xb9,0xa8, + 0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1,0xba,0xba, + 0xb9,0xa8,0x89,0x81,0x81,0x81,0x81,0x81,0x97,0xac,0xba,0xc2,0xc2,0xbf,0xb5,0xb1, + 0xba,0xba,0xb9,0xa8,0x89,0x81,0x81,0x81,0x96,0xac,0xbc,0xc2,0xc2,0xb6,0xa3,0xab, + 0xbb,0xc2,0xc2,0xbf,0xb7,0xaa,0x97,0x81,0x81,0x81,0x81,0x81,0x84,0xa3,0xcc,0xf5, + 0x1f,0x06,0xde,0xbf,0xb6,0xaa,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x94,0xa7, + 0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x94,0xa7,0xb5,0xbe,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xa7,0xb5,0xbf,0xc2,0xc2,0xc0,0xbd,0xb6,0xad,0x9c,0x81, + 0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x9f,0xb6,0xba,0xba,0xba,0xba, + 0xba,0xba,0xba,0xba,0xba,0xba,0xae,0x92,0x81,0x81,0x81,0x81,0x89,0x9f,0xb0,0xbc, + 0xc2,0xc2,0xbf,0xb6,0xa7,0x93,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0xa5,0xb8,0xba, + 0xba,0xb6,0x9f,0x81,0x9a,0xb3,0xba,0xba,0xba,0xa9,0x8b,0x81,0x81,0x81,0x81,0x81, + 0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1,0xb9,0xac,0x9a, + 0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9,0xc1,0xc2,0xc1, + 0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x9a,0xad,0xb9, + 0xc1,0xc2,0xc1,0xb9,0xac,0x9a,0x83,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x91,0x97,0x98,0x97,0x91,0x86,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0x90,0x90,0x90,0x8b, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x90,0x90,0x8e,0x8e, + 0x93,0x95,0x95,0x91,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84, + 0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90,0x8f,0x84, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a,0x90,0x90, + 0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x98,0x98,0x95,0x8d,0x8a, + 0x90,0x90,0x8f,0x84,0x81,0x81,0x81,0x81,0x81,0x86,0x93,0x98,0x98,0x8f,0x81,0x85, + 0x92,0x98,0x98,0x95,0x8e,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x83,0xac,0xd6,0xff, + 0x23,0xfa,0xd2,0xa9,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0x94,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x95,0x98,0x98,0x97,0x92,0x8c,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x93, + 0x98,0x98,0x95,0x8d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8f,0x90, + 0x90,0x8d,0x81,0x81,0x81,0x8b,0x90,0x90,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97,0x90,0x85,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90,0x97,0x98,0x97, + 0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x90, + 0x97,0x98,0x97,0x90,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0xb2,0xdc,0xfa, + 0xfa,0xee,0xc6,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa4,0xc4,0xd0, + 0xd0,0xcd,0xb3,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x9e,0xa5, + 0xa5,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x88,0x8b,0x8b,0x8b,0x89,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x88,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8a,0x8b,0x8b,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x85,0x85,0x81,0x81,0x81,0x85,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x86,0x8b,0x8b,0x8b,0x8a,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9b,0xb1,0xb5,0xb5,0xb5,0xb3,0x9f,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a, + 0xb0,0xb5,0xb5,0xb5,0xb3,0xa0,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa4, + 0xb4,0xb5,0xb5,0xa8,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a,0xa1, + 0xaf,0xaf,0xa4,0x8d,0xa0,0xaf,0xb0,0xa5,0x8f,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x96,0xae,0xb5,0xb5,0xb5,0xb4,0xa2,0x84,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xaf,0x9b,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0xb5,0xd7,0xdf,0xdf,0xdf,0xda,0xbc,0x9d,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xb8, + 0xd5,0xdf,0xdf,0xdf,0xdb,0xbc,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3, + 0xdd,0xdf,0xdf,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x86,0xa8,0xc6, + 0xd8,0xd9,0xc8,0xac,0xc4,0xd7,0xda,0xca,0xae,0x8d,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x96,0xb4,0xd2,0xdf,0xdf,0xdf,0xdc,0xbf,0x98,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd6,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x87,0xa0,0xab,0xab,0xa9,0x99, + 0x81,0x81,0x81,0x81,0x81,0x81,0x92,0xbc,0xe6,0x04,0x0b,0x0b,0xf7,0xd9,0xbb,0x9d, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x98,0xb6,0xd4, + 0xf3,0x0b,0x0b,0x09,0xed,0xc4,0x9a,0x81,0x81,0x81,0x81,0x81,0x87,0xa5,0xc3,0xe1, + 0xff,0x0b,0x05,0xe6,0xc8,0xaa,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xc0,0xe4, + 0xff,0x04,0xe8,0xc5,0xe2,0xff,0x04,0xea,0xc7,0xa0,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x96,0xb4,0xd2,0xf0,0x0b,0x0b,0x0b,0xef,0xc7,0x9d,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xc3,0xd5,0xd5,0xd2,0xb9, + 0x94,0x81,0x81,0x81,0x81,0x81,0x87,0xac,0xc8,0xe2,0xfb,0x14,0x16,0xf7,0xd9,0xbb, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x97,0xb6,0xd4,0xf1, + 0x10,0x1a,0xff,0xe6,0xcd,0xb2,0x8e,0x81,0x81,0x81,0x81,0x84,0xa5,0xc3,0xe1,0xff, + 0x1d,0x09,0x1f,0x05,0xe6,0xc8,0xaa,0x8b,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x1f,0x23,0xfa,0xd0,0xf2,0x1c,0x25,0xfc,0xd2,0xa8,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x95,0xb4,0xd2,0xf0,0x0f,0x1d,0x04,0xe9,0xd0,0xb4,0x91,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x95,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x92,0x99,0xaf,0xd7,0xff,0xff,0xf2,0xc8, + 0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa7,0xc0,0xd9,0xf3,0x0d,0x16,0xf7,0xd9, + 0xb4,0x93,0x92,0x87,0x81,0x81,0x81,0x81,0x81,0x84,0x91,0x93,0xac,0xd3,0xf1,0x10, + 0x12,0xf7,0xde,0xc5,0xab,0x92,0x81,0x81,0x81,0x81,0x81,0x95,0xbd,0xe1,0xff,0x1b, + 0x04,0xe7,0xff,0x1b,0x05,0xe6,0xc5,0x9d,0x81,0x81,0x81,0x81,0x81,0x9d,0xc6,0xed, + 0x0f,0x10,0xf1,0xcb,0xeb,0x0d,0x12,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x85,0x92, + 0x93,0x93,0xa9,0xd0,0xf0,0x0f,0x14,0xfb,0xe1,0xc8,0xae,0x95,0x88,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0x96,0x9b,0x9b,0x94,0x88,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x83,0x9a,0xad,0xbb,0xc2,0xc5,0xe5,0x0d,0x0f,0xe7,0xbf, + 0x97,0x81,0x81,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd2,0xeb,0xef,0xef,0xde, + 0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xbd,0xbd,0xd6,0xef,0xef, + 0xee,0xd6,0xbd,0xbd,0xbc,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xc0,0xe6,0xef,0xef, + 0xe3,0xc8,0xdf,0xef,0xef,0xec,0xc8,0xac,0x8d,0x81,0x81,0x81,0x86,0xa7,0xbb,0xd2, + 0xe7,0xe9,0xd5,0xb7,0xd0,0xe7,0xea,0xd7,0xbc,0xac,0x8d,0x81,0x81,0x89,0xa8,0xbb, + 0xbd,0xbd,0xbb,0xd4,0xef,0xef,0xef,0xd9,0xc0,0xbd,0xbd,0xbd,0xad,0x8f,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xc0,0xbf,0xc5,0xc5,0xbd,0xae,0x99,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xf9,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x87,0xa5,0xbe,0xd3,0xe3,0xed,0xef,0xf2,0x1a,0x04,0xda,0xb2, + 0x8e,0x81,0x81,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc3,0xc5,0xc5,0xd7, + 0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd,0xc5,0xc5, + 0xc5,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7,0xe7,0xdd, + 0xc0,0xa8,0xbe,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x81,0x98,0xc0,0xe2,0xe7, + 0xe7,0xdd,0xb9,0x9a,0xb1,0xd7,0xe7,0xe7,0xe6,0xc7,0x9f,0x81,0x81,0x9a,0xc2,0xe3, + 0xe7,0xe7,0xe2,0xc1,0xc5,0xc5,0xc5,0xb7,0xd9,0xe7,0xe7,0xe7,0xc9,0xa2,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xd9,0xe7,0xef,0xef,0xe6,0xd3,0xb9,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0xa3,0xc3,0xe0,0xf9,0x0b,0x16,0x1b,0x19,0x21,0xfc,0xe6,0xca, + 0xaa,0x87,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b,0xb5,0xdf, + 0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7,0xbd,0x9b, + 0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x13, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x13,0xf7,0xcd,0xa3,0x81,0x81,0x9c,0xc5,0xec, + 0x13,0x13,0xf7,0xd1,0xa9,0x9b,0x9c,0xc4,0xec,0x13,0x13,0xf5,0xce,0xa4,0x81,0x95, + 0xc0,0xea,0x16,0x16,0xea,0xfc,0x0f,0x19,0x19,0x0d,0xf5,0xd7,0xb5,0x91,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0x95,0xbb,0xde,0xff,0x1c,0x18,0x09,0x04,0x12,0x21,0x22,0x05,0xe5, + 0xc1,0x9b,0x81,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x8e,0xb5,0xdd, + 0x05,0x2c,0x07,0xe0,0xb9,0x91,0xaa,0xd2,0xfa,0x22,0x0f,0xe7,0xbf,0x98,0x81,0x95, + 0xc0,0xea,0x16,0x16,0x04,0x20,0x0f,0x06,0x0d,0x25,0x12,0xef,0xcb,0xa4,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x81,0xa7,0xce,0xf4,0x19,0x16,0xf5,0xdf,0xf2,0x1a,0x04,0x13,0x20,0xfa, + 0xd4,0xad,0x85,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0xa6,0xcd, + 0xf5,0x1c,0x17,0xef,0xc8,0xa0,0xb9,0xe0,0x09,0x27,0xff,0xd8,0xb0,0x89,0x81,0x95, + 0xc0,0xea,0x16,0x21,0x1d,0xff,0xe8,0xda,0xe8,0x09,0x29,0x04,0xda,0xb2,0x89,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x8b,0xb4,0xdd,0x06,0x28,0xff,0xdb,0xd7,0xff,0x1d,0xf5,0xfc,0x25,0x0b, + 0xe2,0xb9,0x8f,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x97,0xbe, + 0xe5,0x0c,0x26,0xfc,0xd6,0xaf,0xc7,0xee,0x16,0x18,0xf1,0xc9,0xa1,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x22,0xff,0xe1,0xc5,0xb1,0xcf,0xf7,0x20,0x0e,0xe5,0xbb,0x91,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x92,0xbc,0xe6,0x11,0x1e,0xf4,0xcb,0xe5,0x0d,0x0f,0xe7,0xf1,0x1b,0x13, + 0xea,0xc0,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x87,0xae, + 0xd5,0xfc,0x24,0x0d,0xe6,0xbe,0xd5,0xfc,0x24,0x09,0xe1,0xba,0x92,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc6,0xa6,0x9b,0xc5,0xef,0x19,0x16,0xea,0xc0,0x97,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xc0,0xea,0x16,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x21,0xf5,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xca,0xf2,0x1a,0x04,0xda,0xea,0x16,0x19, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x9e, + 0xc6,0xed,0x14,0x1d,0xf5,0xcd,0xe2,0x0b,0x21,0xfa,0xd2,0xab,0x83,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x96,0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x95,0xbf,0xe9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf3,0xca, + 0xa0,0x81,0x95,0xc0,0xea,0x16,0x19,0xed,0xd7,0xff,0x1d,0xf5,0xcd,0xec,0x16,0x18, + 0xed,0xc2,0x98,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93,0xb5,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x93, + 0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x93,0xb5,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x8f, + 0xb6,0xdd,0x05,0x2c,0x04,0xdc,0xf1,0x19,0x12,0xeb,0xc3,0x9c,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x98,0xc2,0xec,0x16,0x16,0xed,0xc2,0x98,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8b,0xaf,0xcb,0xd0,0xd0,0xd0,0xd0,0xd0,0xd2,0xd0,0xd0,0xd0,0xd0,0xd0,0xce,0xb7, + 0x94,0x81,0x93,0xbd,0xe7,0x11,0x1e,0xf4,0xe5,0x0d,0x11,0xe7,0xc9,0xf2,0x1b,0x11, + 0xe7,0xbf,0x95,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d,0xbd,0xdf, + 0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7,0xbd,0x9d, + 0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b,0x13,0xe7, + 0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x1b, + 0x13,0xe7,0xbd,0x9d,0xbd,0xdf,0x0b,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0xa6,0xcd,0xf5,0x1c,0x13,0xec,0xff,0x27,0x04,0xdc,0xb4,0x8d,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0xa1,0xc9,0xf2,0x1b,0x11,0xe7,0xbd,0x94,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x91,0xa2,0xa5,0xa5,0xaf,0xd3,0xf0,0xfc,0xf3,0xd7,0xb4,0xa5,0xa5,0xa4,0x96, + 0x81,0x81,0x8c,0xb6,0xde,0x07,0x28,0xff,0xf2,0x1a,0x04,0xdb,0xda,0xff,0x26,0x06, + 0xde,0xb6,0x8d,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd,0xd8,0xf7, + 0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec,0xc2,0xbd, + 0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19,0x16,0xec, + 0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x9b,0xc5,0xef,0x19, + 0x16,0xec,0xc2,0xbd,0xd8,0xf7,0x18,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x97,0xbe,0xe5,0x0c,0x21,0xf9,0x0d,0x1b,0xf4,0xcd,0xa5,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xb0,0xbb,0xda,0xff,0x26,0x05,0xdc,0xb4,0x8b,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbe,0xe7,0x0f,0x28,0x12,0xec,0xc3,0x9a,0x81,0x81,0x81, + 0x81,0x81,0x81,0xa9,0xd1,0xf6,0x1b,0x16,0xff,0x1e,0xf5,0xe1,0xf5,0x14,0x1a,0xf5, + 0xcf,0xa9,0x81,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1,0xf7,0x14, + 0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb,0xe0,0xe1, + 0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12,0x20,0xfb, + 0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x96,0xbf,0xe9,0x12, + 0x20,0xfb,0xe0,0xe1,0xf7,0x14,0x16,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x87,0xae,0xd5,0xfc,0x24,0x06,0x1c,0x0d,0xe5,0xbd,0x96,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xdf,0xda,0xe2,0xf6,0x15,0x17,0xf3,0xcd,0xa6,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x95,0xc0,0xea,0x12,0x2f,0x17,0xef,0xc5,0x9b,0x81,0x81,0x81, + 0x81,0x81,0x81,0x98,0xbd,0xe0,0xff,0x1d,0x23,0x14,0x06,0x0a,0x19,0x1c,0xff,0xdf, + 0xbc,0x97,0x81,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b,0x1a,0x0d, + 0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19,0x0a,0x0b, + 0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff,0x25,0x19, + 0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x8c,0xb4,0xdc,0xff, + 0x25,0x19,0x0a,0x0b,0x1a,0x0d,0x04,0x23,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x9e,0xc6,0xed,0x14,0x24,0x25,0xfc,0xd6,0xaf,0x87,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x25,0x13,0x09,0x06,0x0b,0x1a,0x18,0xfb,0xdb,0xb9,0x94,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8c,0xb3,0xd9,0xf6,0x06,0xfa,0xdd,0xb8,0x91,0x81,0x81,0x81, + 0x81,0x81,0x81,0x83,0xa5,0xc5,0xe2,0xfa,0x1b,0x16,0x19,0x14,0x0a,0xf7,0xe0,0xc3, + 0xa4,0x81,0x81,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13,0x04,0xec, + 0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13,0x19,0x13, + 0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8,0x04,0x13, + 0x19,0x13,0x04,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0xa3,0xc8,0xe8, + 0x04,0x13,0x19,0x13,0x05,0xec,0x04,0x0e,0xf7,0xcd,0xa3,0x81,0x81,0x81,0x81,0x81, + 0x81,0x8f,0xb6,0xdd,0x05,0x2c,0x15,0xee,0xc7,0x9f,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x1b,0x0e,0x14,0x16,0x11,0x06,0xf4,0xdc,0xbf,0xa0,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x9d,0xbb,0xd2,0xda,0xd4,0xbf,0xa1,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x89,0xaf,0xd6,0xff,0x1d,0xf5,0xed,0xea,0xe1,0xd3,0xbe,0xa5, + 0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea,0xde,0xcd, + 0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea,0xed,0xea, + 0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8,0xdd,0xea, + 0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x81,0x8c,0xac,0xc8, + 0xdd,0xea,0xed,0xea,0xde,0xcd,0xe2,0xe2,0xe1,0xc5,0x9e,0x81,0x81,0x81,0x8d,0x9a, + 0x9a,0xa1,0xc2,0xe5,0x0b,0x28,0x04,0xdc,0xb6,0x90,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xea,0xea,0xe7,0xde,0xce,0xba,0xa1,0x83,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x99,0xaa,0xb0,0xab,0x9b,0x83,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x94,0xbc,0xe4,0x0c,0x0f,0xe7,0xc2,0xc0,0xb9,0xac,0x9a,0x83, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0,0xb6,0xad, + 0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0,0xc2,0xc0, + 0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5,0xb6,0xc0, + 0xc2,0xc0,0xb6,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x81,0x81,0x81,0x8d,0xa5, + 0xb6,0xc0,0xc2,0xc0,0xb7,0xad,0xb8,0xb8,0xb7,0xa7,0x8a,0x81,0x81,0x8f,0xb0,0xc4, + 0xc4,0xc6,0xdd,0xfc,0x20,0x14,0xef,0xcb,0xa5,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0xc0,0xbd,0xb5,0xa8,0x95,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x85,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x98,0xc2,0xec,0xfa,0xfa,0xda,0xb2,0x97,0x90,0x84,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97,0x8e,0x86, + 0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96,0x98,0x97, + 0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8e,0x96, + 0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x8e,0x96,0x98,0x97,0x8e,0x86,0x8d,0x8d,0x8d,0x82,0x81,0x81,0x81,0x9e,0xc8,0xec, + 0xed,0xef,0xff,0x1a,0x1d,0xfb,0xd9,0xb5,0x91,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x93,0x8c,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x8d,0xb1,0xcc,0xd0,0xd0,0xc2,0xa2,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x19,0x19,0x24,0x18,0xff,0xe1,0xc1,0x9e,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x16,0x19,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x92,0xa3,0xa5,0xa5,0x9d,0x87,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0xa0,0xca,0xf5, + 0x0b,0x09,0x04,0xf3,0xdd,0xc3,0xa5,0x85,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x95, + 0xc0,0xea,0x09,0x09,0xed,0xc2,0x98,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x9a,0xc0,0xdc, + 0xdf,0xdf,0xd9,0xcc,0xba,0xa2,0x87,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x90, + 0xb6,0xd6,0xdd,0xdd,0xd8,0xb9,0x92,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0xa2,0xb4, + 0xb5,0xb5,0xaf,0xa4,0x94,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x9b,0xaf,0xb2,0xb2,0xb0,0x9d,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8a, + 0x8b,0x8b,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x86,0x88,0x88,0x86,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81 +}; diff --git a/Chapter 20 Shadow Mapping/Core/GameCore.cpp b/Chapter 20 Shadow Mapping/Core/GameCore.cpp new file mode 100644 index 0000000..8ac190f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/GameCore.cpp @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "SystemTime.h" +#include "GameInput.h" +#include "BufferManager.h" +#include "CommandContext.h" +// #include "PostEffects.h" + +#pragma comment(lib, "runtimeobject.lib") + +namespace Graphics +{ + extern ColorBuffer g_GenMipsBuffer; +} + +namespace GameCore +{ + using namespace Graphics; + const bool TestGenerateMips = false; + + bool InitializeApplication(IGameApp& game) + { + if (!Graphics::Initialize()) + return false; + + SystemTime::Initialize(); + GameInput::Initialize(); + EngineTuning::Initialize(); + + game.Startup(); + + return true; + } + + void TerminateApplication( IGameApp& game ) + { + game.Cleanup(); + + GameInput::Shutdown(); + } + + void UpdateApplication(IGameApp& game) + { + EngineProfiling::Update(); + + float DeltaTime = Graphics::GetFrameTime(); + + GameInput::Update(DeltaTime); + EngineTuning::Update(DeltaTime); + + game.Update(DeltaTime); + game.RenderScene(); + +// PostEffects::Render(); +// +// if (TestGenerateMips) +// { +// GraphicsContext& MipsContext = GraphicsContext::Begin(); +// +// // Exclude from timings this copy necessary to setup the test +// MipsContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); +// MipsContext.TransitionResource(g_GenMipsBuffer, D3D12_RESOURCE_STATE_COPY_DEST); +// MipsContext.CopySubresource(g_GenMipsBuffer, 0, g_SceneColorBuffer, 0); +// +// EngineProfiling::BeginBlock(L"GenerateMipMaps()", &MipsContext); +// g_GenMipsBuffer.GenerateMipMaps(MipsContext); +// EngineProfiling::EndBlock(&MipsContext); +// +// MipsContext.Finish(); +// } + + GraphicsContext& UiContext = GraphicsContext::Begin(L"Render UI"); + UiContext.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + UiContext.ClearColor(g_OverlayBuffer); + UiContext.SetRenderTarget(g_OverlayBuffer.GetRTV()); + UiContext.SetViewportAndScissor(0, 0, g_OverlayBuffer.GetWidth(), g_OverlayBuffer.GetHeight()); + game.RenderUI(UiContext); + + EngineTuning::Display( UiContext, 10.0f, 40.0f, 1900.0f, 1040.0f ); + + UiContext.Finish(); + + Graphics::Present(); + } + + + HWND g_hWnd = nullptr; + + LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className) + { + //ASSERT_SUCCEEDED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED)); + Microsoft::WRL::Wrappers::RoInitializeWrapper InitializeWinRT(RO_INIT_MULTITHREADED); + ASSERT_SUCCEEDED(InitializeWinRT); + + + // Register class + WNDCLASSEX wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, IDI_APPLICATION); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = nullptr; + wcex.lpszClassName = className; + wcex.hIconSm = LoadIcon(hInst, IDI_APPLICATION); + ASSERT(0 != RegisterClassEx(&wcex), "Unable to register a window"); + + // Create window + RECT rc = { 0, 0, (LONG)g_DisplayWidth, (LONG)g_DisplayHeight }; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + + g_hWnd = CreateWindow(className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInst, nullptr); + + ASSERT(g_hWnd != 0); + + if (!InitializeApplication(app)) + return; + + ShowWindow( g_hWnd, SW_SHOWDEFAULT ); + + MSG msg = {}; + while (msg.message != WM_QUIT) + { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + UpdateApplication(app); + } + } + + Graphics::Terminate(); + TerminateApplication(app); + Graphics::Shutdown(); + } + + //-------------------------------------------------------------------------------------- + // Called every time the application receives a message + //-------------------------------------------------------------------------------------- + LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) + { + switch( message ) + { + case WM_SIZE: + Graphics::Resize(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_MOUSEMOVE: + GameInput::OnMouseMove(wParam, LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc( hWnd, message, wParam, lParam ); + } + + return 0; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/GameCore.h b/Chapter 20 Shadow Mapping/Core/GameCore.h new file mode 100644 index 0000000..37abf73 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/GameCore.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace GameCore +{ + class IGameApp + { + public: + // This function can be used to initialize application state and will run after essential + // hardware resources are allocated. Some state that does not depend on these resources + // should still be initialized in the constructor such as pointers and flags. + virtual void Startup(void) = 0; + virtual void Cleanup(void) = 0; + + // The update method will be invoked once per frame. Both state updating and scene + // rendering should be handled by this method. + virtual void Update(float deltaT) = 0; + + // Official rendering pass + virtual void RenderScene(void) = 0; + + // Optional UI (overlay) rendering pass. This is LDR. The buffer is already cleared. + virtual void RenderUI(class GraphicsContext&) {}; + }; + + void RunApplication(IGameApp& app, HINSTANCE hInst, const wchar_t* className); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/GameInput.cpp b/Chapter 20 Shadow Mapping/Core/GameInput.cpp new file mode 100644 index 0000000..733b0a1 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/GameInput.cpp @@ -0,0 +1,595 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GameCore.h" +#include "GameInput.h" + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#define USE_XINPUT +#include +#pragma comment(lib, "xinput9_1_0.lib") + +#define USE_KEYBOARD_MOUSE +#define DIRECTINPUT_VERSION 0x0800 +#include +#pragma comment(lib, "dinput8.lib") +#pragma comment(lib, "dxguid.lib") + +namespace GameCore +{ + extern HWND g_hWnd; +} + +#else + +using namespace Windows::Gaming::Input; +using namespace Windows::Foundation::Collections; + +#define USE_KEYBOARD_MOUSE + +struct DIMOUSESTATE2 +{ + LONG lX, lY, lZ; + BYTE rgbButtons[8]; +}; + +#endif + +namespace +{ + bool s_Buttons[2][GameInput::kNumDigitalInputs]; + float s_HoldDuration[GameInput::kNumDigitalInputs] = { 0.0f }; + float s_Analogs[GameInput::kNumAnalogInputs]; + float s_AnalogsTC[GameInput::kNumAnalogInputs]; + + int s_Mouse_X; + int s_Mouse_Y; + +#ifdef USE_KEYBOARD_MOUSE + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + IDirectInput8A* s_DI; + IDirectInputDevice8A* s_Keyboard; + IDirectInputDevice8A* s_Mouse; +#endif + + DIMOUSESTATE2 s_MouseState; + unsigned char s_Keybuffer[256]; + unsigned char s_DXKeyMapping[GameInput::kNumKeys]; // map DigitalInput enum to DX key codes + +#endif + +#ifdef USE_XINPUT + float FilterAnalogInput( int val, int deadZone ) + { + if (val < 0) + { + if (val > -deadZone) + return 0.0f; + else + return (val + deadZone) / (32768.0f - deadZone); + } + else + { + if (val < deadZone) + return 0.0f; + else + return (val - deadZone) / (32767.0f - deadZone); + } + } +#else + float FilterAnalogInput( float val, float deadZone ) + { + if (val < -deadZone) + return (val + deadZone) / (1.0f - deadZone); + else if (val > deadZone) + return (val - deadZone) / (1.0f - deadZone); + else + return 0.0f; + } +#endif + +#ifdef USE_KEYBOARD_MOUSE + void KbmBuildKeyMapping() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_DXKeyMapping[GameInput::kKey_escape] = 1; + s_DXKeyMapping[GameInput::kKey_1] = 2; + s_DXKeyMapping[GameInput::kKey_2] = 3; + s_DXKeyMapping[GameInput::kKey_3] = 4; + s_DXKeyMapping[GameInput::kKey_4] = 5; + s_DXKeyMapping[GameInput::kKey_5] = 6; + s_DXKeyMapping[GameInput::kKey_6] = 7; + s_DXKeyMapping[GameInput::kKey_7] = 8; + s_DXKeyMapping[GameInput::kKey_8] = 9; + s_DXKeyMapping[GameInput::kKey_9] = 10; + s_DXKeyMapping[GameInput::kKey_0] = 11; + s_DXKeyMapping[GameInput::kKey_minus] = 12; + s_DXKeyMapping[GameInput::kKey_equals] = 13; + s_DXKeyMapping[GameInput::kKey_back] = 14; + s_DXKeyMapping[GameInput::kKey_tab] = 15; + s_DXKeyMapping[GameInput::kKey_q] = 16; + s_DXKeyMapping[GameInput::kKey_w] = 17; + s_DXKeyMapping[GameInput::kKey_e] = 18; + s_DXKeyMapping[GameInput::kKey_r] = 19; + s_DXKeyMapping[GameInput::kKey_t] = 20; + s_DXKeyMapping[GameInput::kKey_y] = 21; + s_DXKeyMapping[GameInput::kKey_u] = 22; + s_DXKeyMapping[GameInput::kKey_i] = 23; + s_DXKeyMapping[GameInput::kKey_o] = 24; + s_DXKeyMapping[GameInput::kKey_p] = 25; + s_DXKeyMapping[GameInput::kKey_lbracket] = 26; + s_DXKeyMapping[GameInput::kKey_rbracket] = 27; + s_DXKeyMapping[GameInput::kKey_return] = 28; + s_DXKeyMapping[GameInput::kKey_lcontrol] = 29; + s_DXKeyMapping[GameInput::kKey_a] = 30; + s_DXKeyMapping[GameInput::kKey_s] = 31; + s_DXKeyMapping[GameInput::kKey_d] = 32; + s_DXKeyMapping[GameInput::kKey_f] = 33; + s_DXKeyMapping[GameInput::kKey_g] = 34; + s_DXKeyMapping[GameInput::kKey_h] = 35; + s_DXKeyMapping[GameInput::kKey_j] = 36; + s_DXKeyMapping[GameInput::kKey_k] = 37; + s_DXKeyMapping[GameInput::kKey_l] = 38; + s_DXKeyMapping[GameInput::kKey_semicolon] = 39; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 40; + s_DXKeyMapping[GameInput::kKey_grave] = 41; + s_DXKeyMapping[GameInput::kKey_lshift] = 42; + s_DXKeyMapping[GameInput::kKey_backslash] = 43; + s_DXKeyMapping[GameInput::kKey_z] = 44; + s_DXKeyMapping[GameInput::kKey_x] = 45; + s_DXKeyMapping[GameInput::kKey_c] = 46; + s_DXKeyMapping[GameInput::kKey_v] = 47; + s_DXKeyMapping[GameInput::kKey_b] = 48; + s_DXKeyMapping[GameInput::kKey_n] = 49; + s_DXKeyMapping[GameInput::kKey_m] = 50; + s_DXKeyMapping[GameInput::kKey_comma] = 51; + s_DXKeyMapping[GameInput::kKey_period] = 52; + s_DXKeyMapping[GameInput::kKey_slash] = 53; + s_DXKeyMapping[GameInput::kKey_rshift] = 54; + s_DXKeyMapping[GameInput::kKey_multiply] = 55; + s_DXKeyMapping[GameInput::kKey_lalt] = 56; + s_DXKeyMapping[GameInput::kKey_space] = 57; + s_DXKeyMapping[GameInput::kKey_capital] = 58; + s_DXKeyMapping[GameInput::kKey_f1] = 59; + s_DXKeyMapping[GameInput::kKey_f2] = 60; + s_DXKeyMapping[GameInput::kKey_f3] = 61; + s_DXKeyMapping[GameInput::kKey_f4] = 62; + s_DXKeyMapping[GameInput::kKey_f5] = 63; + s_DXKeyMapping[GameInput::kKey_f6] = 64; + s_DXKeyMapping[GameInput::kKey_f7] = 65; + s_DXKeyMapping[GameInput::kKey_f8] = 66; + s_DXKeyMapping[GameInput::kKey_f9] = 67; + s_DXKeyMapping[GameInput::kKey_f10] = 68; + s_DXKeyMapping[GameInput::kKey_numlock] = 69; + s_DXKeyMapping[GameInput::kKey_scroll] = 70; + s_DXKeyMapping[GameInput::kKey_numpad7] = 71; + s_DXKeyMapping[GameInput::kKey_numpad8] = 72; + s_DXKeyMapping[GameInput::kKey_numpad9] = 73; + s_DXKeyMapping[GameInput::kKey_subtract] = 74; + s_DXKeyMapping[GameInput::kKey_numpad4] = 75; + s_DXKeyMapping[GameInput::kKey_numpad5] = 76; + s_DXKeyMapping[GameInput::kKey_numpad6] = 77; + s_DXKeyMapping[GameInput::kKey_add] = 78; + s_DXKeyMapping[GameInput::kKey_numpad1] = 79; + s_DXKeyMapping[GameInput::kKey_numpad2] = 80; + s_DXKeyMapping[GameInput::kKey_numpad3] = 81; + s_DXKeyMapping[GameInput::kKey_numpad0] = 82; + s_DXKeyMapping[GameInput::kKey_decimal] = 83; + s_DXKeyMapping[GameInput::kKey_f11] = 87; + s_DXKeyMapping[GameInput::kKey_f12] = 88; + s_DXKeyMapping[GameInput::kKey_numpadenter] = 156; + s_DXKeyMapping[GameInput::kKey_rcontrol] = 157; + s_DXKeyMapping[GameInput::kKey_divide] = 181; + s_DXKeyMapping[GameInput::kKey_sysrq] = 183; + s_DXKeyMapping[GameInput::kKey_ralt] = 184; + s_DXKeyMapping[GameInput::kKey_pause] = 197; + s_DXKeyMapping[GameInput::kKey_home] = 199; + s_DXKeyMapping[GameInput::kKey_up] = 200; + s_DXKeyMapping[GameInput::kKey_pgup] = 201; + s_DXKeyMapping[GameInput::kKey_left] = 203; + s_DXKeyMapping[GameInput::kKey_right] = 205; + s_DXKeyMapping[GameInput::kKey_end] = 207; + s_DXKeyMapping[GameInput::kKey_down] = 208; + s_DXKeyMapping[GameInput::kKey_pgdn] = 209; + s_DXKeyMapping[GameInput::kKey_insert] = 210; + s_DXKeyMapping[GameInput::kKey_delete] = 211; + s_DXKeyMapping[GameInput::kKey_lwin] = 219; + s_DXKeyMapping[GameInput::kKey_rwin] = 220; + s_DXKeyMapping[GameInput::kKey_apps] = 221; +#else +#define WinRTKey(name) (unsigned char)Windows::System::VirtualKey::name + s_DXKeyMapping[GameInput::kKey_escape] = WinRTKey(Escape); + s_DXKeyMapping[GameInput::kKey_1] = WinRTKey(Number1); + s_DXKeyMapping[GameInput::kKey_2] = WinRTKey(Number2); + s_DXKeyMapping[GameInput::kKey_3] = WinRTKey(Number3); + s_DXKeyMapping[GameInput::kKey_4] = WinRTKey(Number4); + s_DXKeyMapping[GameInput::kKey_5] = WinRTKey(Number5); + s_DXKeyMapping[GameInput::kKey_6] = WinRTKey(Number6); + s_DXKeyMapping[GameInput::kKey_7] = WinRTKey(Number7); + s_DXKeyMapping[GameInput::kKey_8] = WinRTKey(Number8); + s_DXKeyMapping[GameInput::kKey_9] = WinRTKey(Number9); + s_DXKeyMapping[GameInput::kKey_0] = WinRTKey(Number0); + s_DXKeyMapping[GameInput::kKey_minus] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_equals] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_back] = WinRTKey(Back); + s_DXKeyMapping[GameInput::kKey_tab] = WinRTKey(Tab); + s_DXKeyMapping[GameInput::kKey_q] = WinRTKey(Q); + s_DXKeyMapping[GameInput::kKey_w] = WinRTKey(W); + s_DXKeyMapping[GameInput::kKey_e] = WinRTKey(E); + s_DXKeyMapping[GameInput::kKey_r] = WinRTKey(R); + s_DXKeyMapping[GameInput::kKey_t] = WinRTKey(T); + s_DXKeyMapping[GameInput::kKey_y] = WinRTKey(Y); + s_DXKeyMapping[GameInput::kKey_u] = WinRTKey(U); + s_DXKeyMapping[GameInput::kKey_i] = WinRTKey(I); + s_DXKeyMapping[GameInput::kKey_o] = WinRTKey(O); + s_DXKeyMapping[GameInput::kKey_p] = WinRTKey(P); + s_DXKeyMapping[GameInput::kKey_lbracket] = 219; + s_DXKeyMapping[GameInput::kKey_rbracket] = 221; + s_DXKeyMapping[GameInput::kKey_return] = WinRTKey(Enter); + s_DXKeyMapping[GameInput::kKey_lcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_a] = WinRTKey(A); + s_DXKeyMapping[GameInput::kKey_s] = WinRTKey(S); + s_DXKeyMapping[GameInput::kKey_d] = WinRTKey(D); + s_DXKeyMapping[GameInput::kKey_f] = WinRTKey(F); + s_DXKeyMapping[GameInput::kKey_g] = WinRTKey(G); + s_DXKeyMapping[GameInput::kKey_h] = WinRTKey(H); + s_DXKeyMapping[GameInput::kKey_j] = WinRTKey(J); + s_DXKeyMapping[GameInput::kKey_k] = WinRTKey(K); + s_DXKeyMapping[GameInput::kKey_l] = WinRTKey(L); + s_DXKeyMapping[GameInput::kKey_semicolon] = 186; + s_DXKeyMapping[GameInput::kKey_apostrophe] = 222; + s_DXKeyMapping[GameInput::kKey_grave] = 192; // ` or ~ + s_DXKeyMapping[GameInput::kKey_lshift] = WinRTKey(LeftShift); + s_DXKeyMapping[GameInput::kKey_backslash] = 220; + s_DXKeyMapping[GameInput::kKey_z] = WinRTKey(Z); + s_DXKeyMapping[GameInput::kKey_x] = WinRTKey(X); + s_DXKeyMapping[GameInput::kKey_c] = WinRTKey(C); + s_DXKeyMapping[GameInput::kKey_v] = WinRTKey(V); + s_DXKeyMapping[GameInput::kKey_b] = WinRTKey(B); + s_DXKeyMapping[GameInput::kKey_n] = WinRTKey(N); + s_DXKeyMapping[GameInput::kKey_m] = WinRTKey(M); + s_DXKeyMapping[GameInput::kKey_comma] = 188; + s_DXKeyMapping[GameInput::kKey_period] = 190; + s_DXKeyMapping[GameInput::kKey_slash] = 191; + s_DXKeyMapping[GameInput::kKey_rshift] = WinRTKey(RightShift); + s_DXKeyMapping[GameInput::kKey_multiply] = WinRTKey(Multiply); + s_DXKeyMapping[GameInput::kKey_lalt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_space] = WinRTKey(Space); + s_DXKeyMapping[GameInput::kKey_capital] = WinRTKey(CapitalLock); + s_DXKeyMapping[GameInput::kKey_f1] = WinRTKey(F1); + s_DXKeyMapping[GameInput::kKey_f2] = WinRTKey(F2); + s_DXKeyMapping[GameInput::kKey_f3] = WinRTKey(F3); + s_DXKeyMapping[GameInput::kKey_f4] = WinRTKey(F4); + s_DXKeyMapping[GameInput::kKey_f5] = WinRTKey(F5); + s_DXKeyMapping[GameInput::kKey_f6] = WinRTKey(F6); + s_DXKeyMapping[GameInput::kKey_f7] = WinRTKey(F7); + s_DXKeyMapping[GameInput::kKey_f8] = WinRTKey(F8); + s_DXKeyMapping[GameInput::kKey_f9] = WinRTKey(F9); + s_DXKeyMapping[GameInput::kKey_f10] = WinRTKey(F10); + s_DXKeyMapping[GameInput::kKey_numlock] = WinRTKey(NumberKeyLock); + s_DXKeyMapping[GameInput::kKey_scroll] = WinRTKey(Scroll); + s_DXKeyMapping[GameInput::kKey_numpad7] = WinRTKey(NumberPad7); + s_DXKeyMapping[GameInput::kKey_numpad8] = WinRTKey(NumberPad8); + s_DXKeyMapping[GameInput::kKey_numpad9] = WinRTKey(NumberPad9); + s_DXKeyMapping[GameInput::kKey_subtract] = WinRTKey(Subtract); + s_DXKeyMapping[GameInput::kKey_numpad4] = WinRTKey(NumberPad4); + s_DXKeyMapping[GameInput::kKey_numpad5] = WinRTKey(NumberPad5); + s_DXKeyMapping[GameInput::kKey_numpad6] = WinRTKey(NumberPad6); + s_DXKeyMapping[GameInput::kKey_add] = WinRTKey(Add); + s_DXKeyMapping[GameInput::kKey_numpad1] = WinRTKey(NumberPad1); + s_DXKeyMapping[GameInput::kKey_numpad2] = WinRTKey(NumberPad2); + s_DXKeyMapping[GameInput::kKey_numpad3] = WinRTKey(NumberPad3); + s_DXKeyMapping[GameInput::kKey_numpad0] = WinRTKey(NumberPad0); + s_DXKeyMapping[GameInput::kKey_decimal] = WinRTKey(Decimal); + s_DXKeyMapping[GameInput::kKey_f11] = WinRTKey(F11); + s_DXKeyMapping[GameInput::kKey_f12] = WinRTKey(F12); + s_DXKeyMapping[GameInput::kKey_numpadenter] = WinRTKey(Enter); // No distinction + s_DXKeyMapping[GameInput::kKey_rcontrol] = WinRTKey(Control); // No L/R + s_DXKeyMapping[GameInput::kKey_divide] = WinRTKey(Divide); + s_DXKeyMapping[GameInput::kKey_sysrq] = 255; // Ignored + s_DXKeyMapping[GameInput::kKey_ralt] = 255; // Only a modifier + s_DXKeyMapping[GameInput::kKey_pause] = WinRTKey(Pause); + s_DXKeyMapping[GameInput::kKey_home] = WinRTKey(Home); + s_DXKeyMapping[GameInput::kKey_up] = WinRTKey(Up); + s_DXKeyMapping[GameInput::kKey_pgup] = WinRTKey(PageUp); + s_DXKeyMapping[GameInput::kKey_left] = WinRTKey(Left); + s_DXKeyMapping[GameInput::kKey_right] = WinRTKey(Right); + s_DXKeyMapping[GameInput::kKey_end] = WinRTKey(End); + s_DXKeyMapping[GameInput::kKey_down] = WinRTKey(Down); + s_DXKeyMapping[GameInput::kKey_pgdn] = WinRTKey(PageDown); + s_DXKeyMapping[GameInput::kKey_insert] = WinRTKey(Insert); + s_DXKeyMapping[GameInput::kKey_delete] = WinRTKey(Delete); + s_DXKeyMapping[GameInput::kKey_lwin] = WinRTKey(LeftWindows); + s_DXKeyMapping[GameInput::kKey_rwin] = WinRTKey(RightWindows); + s_DXKeyMapping[GameInput::kKey_apps] = WinRTKey(Application); +#endif + } + + void KbmZeroInputs() + { + memset(&s_MouseState, 0, sizeof(DIMOUSESTATE2)); + memset(s_Keybuffer, 0, sizeof(s_Keybuffer)); + } + + void KbmInitialize() + { + KbmBuildKeyMapping(); + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&s_DI, nullptr))) + ASSERT(false, "DirectInput8 initialization failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysKeyboard, &s_Keyboard, nullptr))) + ASSERT(false, "Keyboard CreateDevice failed."); + if (FAILED(s_Keyboard->SetDataFormat(&c_dfDIKeyboard))) + ASSERT(false, "Keyboard SetDataFormat failed."); + if (FAILED(s_Keyboard->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Keyboard SetCooperativeLevel failed."); + + DIPROPDWORD dipdw; + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10; + if (FAILED(s_Keyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) + ASSERT(false, "Keyboard set buffer size failed."); + + if (FAILED(s_DI->CreateDevice(GUID_SysMouse, &s_Mouse, nullptr))) + ASSERT(false, "Mouse CreateDevice failed."); + if (FAILED(s_Mouse->SetDataFormat(&c_dfDIMouse2))) + ASSERT(false, "Mouse SetDataFormat failed."); + if (FAILED(s_Mouse->SetCooperativeLevel(GameCore::g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) + ASSERT(false, "Mouse SetCooperativeLevel failed."); +#endif + + KbmZeroInputs(); + } + + void KbmShutdown() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (s_Keyboard) + { + s_Keyboard->Unacquire(); + s_Keyboard->Release(); + s_Keyboard = nullptr; + } + if (s_Mouse) + { + s_Mouse->Unacquire(); + s_Mouse->Release(); + s_Mouse = nullptr; + } + if (s_DI) + { + s_DI->Release(); + s_DI = nullptr; + } +#endif + } + + void KbmUpdate() + { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + HWND foreground = GetForegroundWindow(); + bool visible = IsWindowVisible(foreground) != 0; + + if (foreground != GameCore::g_hWnd // wouldn't be able to acquire + || !visible) + { + KbmZeroInputs(); + } + else + { + s_Mouse->Acquire(); + s_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2), &s_MouseState); + s_Keyboard->Acquire(); + s_Keyboard->GetDeviceState(sizeof(s_Keybuffer), s_Keybuffer); + } +#endif + } + +#endif + +} + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_TV_TITLE) +void GameInput::SetKeyState(Windows::System::VirtualKey key, bool IsDown) +{ + s_Keybuffer[(unsigned char)key] = IsDown ? 0x80 : 0x00; + //DEBUGPRINT("%d key is %s", (unsigned int)key, IsDown ? "down" : "up"); +} +#endif + +void GameInput::Initialize() +{ + // For Windows 8 + // XInputEnable(TRUE); + + ZeroMemory( s_Buttons, sizeof(s_Buttons) ); + ZeroMemory( s_Analogs, sizeof(s_Analogs) ); + +#ifdef USE_KEYBOARD_MOUSE + KbmInitialize(); +#endif +} + +void GameInput::Shutdown() +{ +#ifdef USE_KEYBOARD_MOUSE + KbmShutdown(); +#endif +} + +void GameInput::Update( float frameDelta ) +{ + memcpy(s_Buttons[1], s_Buttons[0], sizeof(s_Buttons[0])); + memset(s_Buttons[0], 0, sizeof(s_Buttons[0])); + memset(s_Analogs, 0, sizeof(s_Analogs)); + +#ifdef USE_XINPUT + XINPUT_STATE newInputState; + if (ERROR_SUCCESS == XInputGetState( 0, &newInputState )) + { + if (newInputState.Gamepad.wButtons & (1 << 0)) s_Buttons[0][kDPadUp] = true; + if (newInputState.Gamepad.wButtons & (1 << 1)) s_Buttons[0][kDPadDown] = true; + if (newInputState.Gamepad.wButtons & (1 << 2)) s_Buttons[0][kDPadLeft] = true; + if (newInputState.Gamepad.wButtons & (1 << 3)) s_Buttons[0][kDPadRight] = true; + if (newInputState.Gamepad.wButtons & (1 << 4)) s_Buttons[0][kStartButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 5)) s_Buttons[0][kBackButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 6)) s_Buttons[0][kLThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 7)) s_Buttons[0][kRThumbClick] = true; + if (newInputState.Gamepad.wButtons & (1 << 8)) s_Buttons[0][kLShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 9)) s_Buttons[0][kRShoulder] = true; + if (newInputState.Gamepad.wButtons & (1 << 12)) s_Buttons[0][kAButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 13)) s_Buttons[0][kBButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 14)) s_Buttons[0][kXButton] = true; + if (newInputState.Gamepad.wButtons & (1 << 15)) s_Buttons[0][kYButton] = true; + + s_Analogs[ kAnalogLeftTrigger ] = newInputState.Gamepad.bLeftTrigger / 255.0f; + s_Analogs[ kAnalogRightTrigger ] = newInputState.Gamepad.bRightTrigger / 255.0f; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbLX, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbLY, XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput(newInputState.Gamepad.sThumbRX, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput(newInputState.Gamepad.sThumbRY, XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ); + } +#else + + IVectorView^ gamepads = Gamepad::Gamepads; + if (gamepads->Size != 0) + { + IGamepad^ gamepad = gamepads->GetAt(0); + GamepadReading reading = gamepad->GetCurrentReading(); + uint32_t Buttons = (uint32_t)reading.Buttons; + if (Buttons & (uint32_t)GamepadButtons::DPadUp) s_Buttons[0][kDPadUp] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadDown) s_Buttons[0][kDPadDown] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadLeft) s_Buttons[0][kDPadLeft] = true; + if (Buttons & (uint32_t)GamepadButtons::DPadRight) s_Buttons[0][kDPadRight] = true; + if (Buttons & (uint32_t)GamepadButtons::Menu) s_Buttons[0][kStartButton] = true; + if (Buttons & (uint32_t)GamepadButtons::View) s_Buttons[0][kBackButton] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftThumbstick) s_Buttons[0][kLThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::RightThumbstick) s_Buttons[0][kRThumbClick] = true; + if (Buttons & (uint32_t)GamepadButtons::LeftShoulder) s_Buttons[0][kLShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::RightShoulder) s_Buttons[0][kRShoulder] = true; + if (Buttons & (uint32_t)GamepadButtons::A) s_Buttons[0][kAButton] = true; + if (Buttons & (uint32_t)GamepadButtons::B) s_Buttons[0][kBButton] = true; + if (Buttons & (uint32_t)GamepadButtons::X) s_Buttons[0][kXButton] = true; + if (Buttons & (uint32_t)GamepadButtons::Y) s_Buttons[0][kYButton] = true; + + static const float kAnalogStickDeadZone = 0.18f; + + s_Analogs[ kAnalogLeftTrigger ] = (float)reading.LeftTrigger; + s_Analogs[ kAnalogRightTrigger ] = (float)reading.RightTrigger; + s_Analogs[ kAnalogLeftStickX ] = FilterAnalogInput((float)reading.LeftThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogLeftStickY ] = FilterAnalogInput((float)reading.LeftThumbstickY, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickX ] = FilterAnalogInput((float)reading.RightThumbstickX, kAnalogStickDeadZone ); + s_Analogs[ kAnalogRightStickY ] = FilterAnalogInput((float)reading.RightThumbstickY, kAnalogStickDeadZone ); + } + +#endif + +#ifdef USE_KEYBOARD_MOUSE + KbmUpdate(); + + for (uint32_t i = 0; i < kNumKeys; ++i) + { + s_Buttons[0][i] = (s_Keybuffer[s_DXKeyMapping[i]] & 0x80) != 0; + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (s_MouseState.rgbButtons[i] > 0) s_Buttons[0][kMouse0 + i] = true; + } + + s_Analogs[kAnalogMouseX] = (float)s_MouseState.lX * .0018f; + s_Analogs[kAnalogMouseY] = (float)s_MouseState.lY * -.0018f; + + if (s_MouseState.lZ > 0) + s_Analogs[kAnalogMouseScroll] = 1.0f; + else if (s_MouseState.lZ < 0) + s_Analogs[kAnalogMouseScroll] = -1.0f; +#endif + + // Update time duration for buttons pressed + for (uint32_t i = 0; i < kNumDigitalInputs; ++i) + { + if (s_Buttons[0][i]) + { + if (!s_Buttons[1][i]) + s_HoldDuration[i] = 0.0f; + else + s_HoldDuration[i] += frameDelta; + } + } + + for (uint32_t i = 0; i < kNumAnalogInputs; ++i) + { + s_AnalogsTC[i] = s_Analogs[i] * frameDelta; + } + +} + +void GameInput::OnMouseMove(WPARAM btnState, int x, int y) +{ + s_Mouse_X = x; + s_Mouse_Y = y; +} + +bool GameInput::IsAnyPressed( void ) +{ + return s_Buttons[0] != 0; +} + +bool GameInput::IsPressed( DigitalInput di ) +{ + return s_Buttons[0][di]; +} + +bool GameInput::IsFirstPressed( DigitalInput di ) +{ + return s_Buttons[0][di] && !s_Buttons[1][di]; +} + +bool GameInput::IsReleased( DigitalInput di ) +{ + return !s_Buttons[0][di]; +} + +bool GameInput::IsFirstReleased( DigitalInput di ) +{ + return !s_Buttons[0][di] && s_Buttons[1][di]; +} + +float GameInput::GetDurationPressed( DigitalInput di ) +{ + return s_HoldDuration[di]; +} + +float GameInput::GetAnalogInput( AnalogInput ai ) +{ + return s_Analogs[ai]; +} + +float GameInput::GetTimeCorrectedAnalogInput( AnalogInput ai ) +{ + return s_AnalogsTC[ai]; +} + +POINT GameInput::GetCurPos() +{ + return { s_Mouse_X, s_Mouse_Y }; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/GameInput.h b/Chapter 20 Shadow Mapping/Core/GameInput.h new file mode 100644 index 0000000..649b1df --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/GameInput.h @@ -0,0 +1,198 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace GameInput +{ + void Initialize(); + void Shutdown(); + void Update( float frameDelta ); + void OnMouseMove(WPARAM btnState, int x, int y); + + enum DigitalInput + { + // keyboard + // kKey must start at zero, see s_DXKeyMapping + kKey_escape = 0, + kKey_1, + kKey_2, + kKey_3, + kKey_4, + kKey_5, + kKey_6, + kKey_7, + kKey_8, + kKey_9, + kKey_0, + kKey_minus, + kKey_equals, + kKey_back, + kKey_tab, + kKey_q, + kKey_w, + kKey_e, + kKey_r, + kKey_t, + kKey_y, + kKey_u, + kKey_i, + kKey_o, + kKey_p, + kKey_lbracket, + kKey_rbracket, + kKey_return, + kKey_lcontrol, + kKey_a, + kKey_s, + kKey_d, + kKey_f, + kKey_g, + kKey_h, + kKey_j, + kKey_k, + kKey_l, + kKey_semicolon, + kKey_apostrophe, + kKey_grave, + kKey_lshift, + kKey_backslash, + kKey_z, + kKey_x, + kKey_c, + kKey_v, + kKey_b, + kKey_n, + kKey_m, + kKey_comma, + kKey_period, + kKey_slash, + kKey_rshift, + kKey_multiply, + kKey_lalt, + kKey_space, + kKey_capital, + kKey_f1, + kKey_f2, + kKey_f3, + kKey_f4, + kKey_f5, + kKey_f6, + kKey_f7, + kKey_f8, + kKey_f9, + kKey_f10, + kKey_numlock, + kKey_scroll, + kKey_numpad7, + kKey_numpad8, + kKey_numpad9, + kKey_subtract, + kKey_numpad4, + kKey_numpad5, + kKey_numpad6, + kKey_add, + kKey_numpad1, + kKey_numpad2, + kKey_numpad3, + kKey_numpad0, + kKey_decimal, + kKey_f11, + kKey_f12, + kKey_numpadenter, + kKey_rcontrol, + kKey_divide, + kKey_sysrq, + kKey_ralt, + kKey_pause, + kKey_home, + kKey_up, + kKey_pgup, + kKey_left, + kKey_right, + kKey_end, + kKey_down, + kKey_pgdn, + kKey_insert, + kKey_delete, + kKey_lwin, + kKey_rwin, + kKey_apps, + + kNumKeys, + + // gamepad + kDPadUp = kNumKeys, + kDPadDown, + kDPadLeft, + kDPadRight, + kStartButton, + kBackButton, + kLThumbClick, + kRThumbClick, + kLShoulder, + kRShoulder, + kAButton, + kBButton, + kXButton, + kYButton, + + // mouse + kMouse0, + kMouse1, + kMouse2, + kMouse3, + kMouse4, + kMouse5, + kMouse6, + kMouse7, + + kNumDigitalInputs + }; + + enum AnalogInput + { + // gamepad + kAnalogLeftTrigger, + kAnalogRightTrigger, + kAnalogLeftStickX, + kAnalogLeftStickY, + kAnalogRightStickX, + kAnalogRightStickY, + + // mouse + kAnalogMouseX, + kAnalogMouseY, + kAnalogMouseScroll, + + kNumAnalogInputs + }; + + bool IsAnyPressed( void ); + + bool IsPressed( DigitalInput di ); + bool IsFirstPressed( DigitalInput di ); + bool IsReleased( DigitalInput di ); + bool IsFirstReleased( DigitalInput di ); + + float GetDurationPressed( DigitalInput di ); + + float GetAnalogInput( AnalogInput ai ); + float GetTimeCorrectedAnalogInput( AnalogInput ai ); + + POINT GetCurPos(); + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE | WINAPI_PARTITION_DESKTOP) + void SetKeyState(Windows::System::VirtualKey key, bool IsDown); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Camera.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Camera.cpp new file mode 100644 index 0000000..422744f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Camera.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Camera.h" +#include + +using namespace Math; + +// meng �����޸�Ϊ��������ϵ +void BaseCamera::SetLookDirection( Vector3 forward, Vector3 up ) +{ + // ����ǰ�� + Scalar forwardLenSq = LengthSquare(forward); + forward = Select(forward * RecipSqrt(forwardLenSq), Vector3(kZUnitVector), forwardLenSq < Scalar(0.000001f)); + + // �����ṩ���Ϻ�ǰ���������ҷ� + Vector3 right = Cross(up, forward); + Scalar rightLenSq = LengthSquare(right); + right = Select(right * RecipSqrt(rightLenSq), Cross(Vector3(kYUnitVector), forward), rightLenSq < Scalar(0.000001f)); + + // ������������ʵ�ʵ��Ϸ� + up = Cross(forward, right); + + // �����������ת������ + m_Basis = Matrix3(right, up, forward); + m_CameraToWorld.SetRotation(Quaternion(m_Basis)); +} + +void BaseCamera::Update() +{ + // �����ӽDZ任��������� + m_ViewMatrix = Matrix4(~m_CameraToWorld); + + // Matrix4�е�*���أ����ⷴ��д�ġ��������ﷴ�ų� + // �����ӽ�ͶӰת�����������õ���������ٳ������ֵ�Ϳ���������յ�ͶӰ������ + m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; +} + +void Camera::Update() +{ + BaseCamera::Update(); + + m_FrustumVS = Frustum(m_ProjMatrix, m_NearClip / m_FarClip); + m_FrustumWS = m_CameraToWorld * m_FrustumVS; +} + +void Camera::UpdateProjMatrix( void ) +{ + DirectX::XMMATRIX mat = XMMatrixPerspectiveFovLH(m_VerticalFOV, m_AspectRatio, m_NearClip, m_FarClip); + + SetProjMatrix(Matrix4(mat)); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Camera.h b/Chapter 20 Shadow Mapping/Core/Graphics/Camera.h new file mode 100644 index 0000000..240ccde --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Camera.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" +#include "Math/Frustum.h" + +namespace Math +{ + class BaseCamera + { + public: + + // Call this function once per frame and after you've changed any state. This + // regenerates all matrices. Calling it more or less than once per frame will break + // temporal effects and cause unpredictable results. + virtual void Update(); + + // Public functions for controlling where the camera is and its orientation + void SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ); + void SetLookDirection( Vector3 forward, Vector3 up ); + void SetRotation( Quaternion basisRotation ); + void SetPosition( Vector3 worldPos ); + void SetTransform( const AffineTransform& xform ); + void SetTransform( const OrthogonalTransform& xform ); + + const Quaternion GetRotation() const { return m_CameraToWorld.GetRotation(); } + const Vector3 GetRightVec() const { return m_Basis.GetX(); } + const Vector3 GetUpVec() const { return m_Basis.GetY(); } + // �޸ĸú�����ԭ�ȵ��Ƿ��� + const Vector3 GetForwardVec() const { return m_Basis.GetZ(); } + const Vector3 GetPosition() const { return m_CameraToWorld.GetTranslation(); } + + // Accessors for reading the various matrices and frusta + const Matrix4& GetViewMatrix() const { return m_ViewMatrix; } + const Matrix4& GetProjMatrix() const { return m_ProjMatrix; } + const Matrix4& GetViewProjMatrix() const { return m_ViewProjMatrix; } + const Frustum& GetViewSpaceFrustum() const { return m_FrustumVS; } + const Frustum& GetWorldSpaceFrustum() const { return m_FrustumWS; } + + protected: + + BaseCamera() : m_CameraToWorld(kIdentity), m_Basis(kIdentity) {} + + void SetProjMatrix( const Matrix4& ProjMat ) { m_ProjMatrix = ProjMat; } + + OrthogonalTransform m_CameraToWorld; + + // Redundant data cached for faster lookups. + Matrix3 m_Basis; + + // meng + // 0 ����任 + // 1. ��ȾĿ���ģ������ϵת����������ϵ--->����任���� + // 2. �ٴ���������ϵת���ӽ�����ϵ--->�ӽDZ任���� m_ViewMatrix + // 3. ���ӽ�����ϵת����ͶӰ����ϵ--->ͶӰ�任���� m_ProjMatrix + + // ��������ϵת�����ӽ�����ϵ + Matrix4 m_ViewMatrix; // i.e. "World-to-View" matrix + + // �ӽ�����ϵת��ͶӰ����ϵ + Matrix4 m_ProjMatrix; // i.e. "View-to-Projection" matrix + + // ����������ϵֱ��ת����ͶӰ����ϵ + Matrix4 m_ViewProjMatrix; // i.e. "World-To-Projection" matrix. + + // ��׶����� + Frustum m_FrustumVS; // View-space view frustum + Frustum m_FrustumWS; // World-space view frustum + }; + + class Camera : public BaseCamera + { + public: + Camera(); + + virtual void Update() override; + + // Controls the view-to-projection matrix + void SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ); + void SetFOV( float verticalFovInRadians ) { m_VerticalFOV = verticalFovInRadians; UpdateProjMatrix(); } + void SetAspectRatio( float widthOverHeight) { m_AspectRatio = widthOverHeight; UpdateProjMatrix(); } + void SetZRange( float nearZ, float farZ) { m_NearClip = nearZ; m_FarClip = farZ; UpdateProjMatrix(); } + + float GetFOV() const { return m_VerticalFOV; } + float GetNearClip() const { return m_NearClip; } + float GetFarClip() const { return m_FarClip; } + + private: + + void UpdateProjMatrix( void ); + + float m_VerticalFOV; // Field of view angle in radians + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + }; + + inline void BaseCamera::SetEyeAtUp( Vector3 eye, Vector3 at, Vector3 up ) + { + SetLookDirection(at - eye, up); + SetPosition(eye); + } + + inline void BaseCamera::SetPosition( Vector3 worldPos ) + { + m_CameraToWorld.SetTranslation( worldPos ); + } + + inline void BaseCamera::SetTransform( const AffineTransform& xform ) + { + // By using these functions, we rederive an orthogonal transform. + SetLookDirection(-xform.GetZ(), xform.GetY()); + SetPosition(xform.GetTranslation()); + } + + inline void BaseCamera::SetRotation( Quaternion basisRotation ) + { + m_CameraToWorld.SetRotation(Normalize(basisRotation)); + m_Basis = Matrix3(m_CameraToWorld.GetRotation()); + } + + inline Camera::Camera() + { + SetPerspectiveMatrix( XM_PIDIV4, 16.0f / 9.0f, 1.0f, 1000.0f ); + } + + inline void Camera::SetPerspectiveMatrix( float verticalFovRadians, float aspectWidthOverHeight, float nearZClip, float farZClip ) + { + m_VerticalFOV = verticalFovRadians; + m_AspectRatio = aspectWidthOverHeight; + m_NearClip = nearZClip; + m_FarClip = farZClip; + + UpdateProjMatrix(); + } + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Color.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Color.cpp new file mode 100644 index 0000000..47fba84 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Color.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Color.h" + +using DirectX::XMVECTORU32; + +uint32_t Color::R11G11B10F(bool RoundToEven) const +{ +#if 1 + static const float kMaxVal = float(1 << 16); + static const float kF32toF16 = (1.0 / (1ull << 56)) * (1.0 / (1ull << 56)); + + union { float f; uint32_t u; } R, G, B; + + R.f = Math::Clamp(m_value.f[0], 0.0f, kMaxVal) * kF32toF16; + G.f = Math::Clamp(m_value.f[1], 0.0f, kMaxVal) * kF32toF16; + B.f = Math::Clamp(m_value.f[2], 0.0f, kMaxVal) * kF32toF16; + + if (RoundToEven) + { + // Bankers rounding: 2.5 -> 2.0 ; 3.5 -> 4.0 + R.u += 0x0FFFF + ((R.u >> 16) & 1); + G.u += 0x0FFFF + ((G.u >> 16) & 1); + B.u += 0x1FFFF + ((B.u >> 17) & 1); + } + else + { + // Default rounding: 2.5 -> 3.0 ; 3.5 -> 4.0 + R.u += 0x00010000; + G.u += 0x00010000; + B.u += 0x00020000; + } + + R.u &= 0x0FFE0000; + G.u &= 0x0FFE0000; + B.u &= 0x0FFC0000; + + return R.u >> 17 | G.u >> 6 | B.u << 4; + +#else // SSE + + static XMVECTORU32 Scale = { 0x07800000, 0x07800000, 0x07800000, 0 }; // 2^-112 + static XMVECTORU32 Round1 = { 0x00010000, 0x00010000, 0x00020000, 0 }; + static XMVECTORU32 Round2 = { 0x0000FFFF, 0x0000FFFF, 0x0001FFFF, 0 }; + static XMVECTORU32 Mask = { 0x0FFE0000, 0x0FFE0000, 0x0FFC0000, 0 }; + + // Treat the values like integers as we clamp to [0, +Inf]. This translates 32-bit specials + // to 16-bit specials (while also turning anything greater than MAX_HALF into +INF). + __m128i ti = _mm_max_epi32(_mm_castps_si128(m_value), _mm_setzero_si128()); + ti = _mm_min_epi32(ti, _mm_set1_epi32(0x47800000)); // 2^16 = 65536.0f = INF + + // Bias the exponent by -112 (-127 + 15) to denormalize values < 2^-14 + ti = _mm_castps_si128(_mm_mul_ps(_mm_castsi128_ps(ti), Scale)); + + if (RoundToEven) + { + // Add 0x10000 when odd, 0x0FFFF when even (before truncating bits) + ti = _mm_add_epi32(ti, _mm_max_epi32(_mm_and_si128(_mm_srli_epi32(ti, 1), Round1), Round2)); + } + else //if (RoundToNearest) + { + ti = _mm_add_epi32(ti, Round1); + } + + XMVECTORU32 ret; + ret.v = _mm_castsi128_ps(_mm_and_si128(ti, Mask)); + return ret.u[0] >> 17 | ret.u[1] >> 6 | ret.u[2] << 4; + +#endif +} + +uint32_t Color::R9G9B9E5() const +{ +#if 1 + static const float kMaxVal = float(0x1FF << 7); + static const float kMinVal = float(1.f / (1 << 16)); + + // Clamp RGB to [0, 1.FF*2^16] + float r = Math::Clamp(m_value.f[0], 0.0f, kMaxVal); + float g = Math::Clamp(m_value.f[1], 0.0f, kMaxVal); + float b = Math::Clamp(m_value.f[2], 0.0f, kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + float MaxChannel = Math::Max(Math::Max(r, g), Math::Max(b, kMinVal)); + + // Take the exponent of the maximum channel (rounding up the 9th bit) and + // add 15 to it. When added to the channels, it causes the implicit '1.0' + // bit and the first 8 mantissa bits to be shifted down to the low 9 bits + // of the mantissa, rounding the truncated bits. + union { float f; int32_t i; } R, G, B, E; + E.f = MaxChannel; + E.i += 0x07804000; // Add 15 to the exponent and 0x4000 to the mantissa + E.i &= 0x7F800000; // Zero the mantissa + + // This shifts the 9-bit values we need into the lowest bits, rounding as + // needed. Note that if the channel has a smaller exponent than the max + // channel, it will shift even more. This is intentional. + R.f = r + E.f; + G.f = g + E.f; + B.f = b + E.f; + + // Convert the Bias to the correct exponent in the upper 5 bits. + E.i <<= 4; + E.i += 0x10000000; + + // Combine the fields. RGB floats have unwanted data in the upper 9 + // bits. Only red needs to mask them off because green and blue shift + // it out to the left. + return E.i | B.i << 18 | G.i << 9 | R.i & 511; + +#else // SSE + + // Clamp RGB to [0, 1.FF*2^16] + __m128 kMaxVal = _mm_castsi128_ps(_mm_set1_epi32(0x477F8000)); + __m128 rgb = _mm_min_ps(_mm_max_ps(m_value, _mm_setzero_ps()), kMaxVal); + + // Compute the maximum channel, no less than 1.0*2^-15 + __m128 kMinVal = _mm_castsi128_ps(_mm_set1_epi32(0x37800000)); + __m128 MaxChannel = _mm_max_ps(rgb, kMinVal); + MaxChannel = _mm_max_ps( _mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 1, 0, 2)), + _mm_max_ps(_mm_permute_ps(MaxChannel, _MM_SHUFFLE(3, 0, 2, 1)), MaxChannel) ); + + // Add 15 to the exponent and 0x4000 to the mantissa + __m128i kBias15 = _mm_set1_epi32(0x07804000); + __m128i kExpMask = _mm_set1_epi32(0x7F800000); + __m128i Bias = _mm_and_si128(_mm_add_epi32(_mm_castps_si128(MaxChannel), kBias15), kExpMask); + + // rgb += Bias + rgb = _mm_add_ps(rgb, _mm_castsi128_ps(Bias)); + + // Exp = (Bias << 4) + 0x10000000; + __m128i Exp = _mm_add_epi32(_mm_slli_epi32(Bias, 4), _mm_set1_epi32(0x10000000)); + + // Combine words + XMVECTORU32 ret; + ret.v = _mm_insert_ps(rgb, _mm_castsi128_ps(Exp), 0x30); + return ret.u[3] | ret.u[2] << 18 | ret.u[1] << 9 | ret.u[0] & 511; + +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Color.h b/Chapter 20 Shadow Mapping/Core/Graphics/Color.h new file mode 100644 index 0000000..3b96a65 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Color.h @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include + +using namespace DirectX; + +class Color +{ +public: + Color( ) : m_value(g_XMOne) {} + Color( FXMVECTOR vec ); + Color( const XMVECTORF32& vec ); + Color( float r, float g, float b, float a = 1.0f ); + Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a = 255, uint16_t bitDepth = 8 ); + explicit Color( uint32_t rgbaLittleEndian ); + + float R() const { return XMVectorGetX(m_value); } + float G() const { return XMVectorGetY(m_value); } + float B() const { return XMVectorGetZ(m_value); } + float A() const { return XMVectorGetW(m_value); } + + bool operator==( const Color& rhs ) const { return XMVector4Equal(m_value, rhs.m_value); } + bool operator!=( const Color& rhs ) const { return !XMVector4Equal(m_value, rhs.m_value); } + + void SetR( float r ) { m_value.f[0] = r; } + void SetG( float g ) { m_value.f[1] = g; } + void SetB( float b ) { m_value.f[2] = b; } + void SetA( float a ) { m_value.f[3] = a; } + + float* GetPtr( void ) { return reinterpret_cast(this); } + float& operator[]( int idx ) { return GetPtr()[idx]; } + + void SetRGB( float r, float g, float b ) { m_value.v = XMVectorSelect( m_value, XMVectorSet(r, g, b, b), g_XMMask3 ); } + + Color ToSRGB() const; + Color FromSRGB() const; + Color ToREC709() const; + Color FromREC709() const; + + // Probably want to convert to sRGB or Rec709 first + uint32_t R10G10B10A2() const; + uint32_t R8G8B8A8() const; + + // Pack an HDR color into 32-bits + uint32_t R11G11B10F(bool RoundToEven=false) const; + uint32_t R9G9B9E5() const; + + operator XMVECTOR() const { return m_value; } + +private: + XMVECTORF32 m_value; +}; + +INLINE Color Max( Color a, Color b ) { return Color(XMVectorMax(a, b)); } +INLINE Color Min( Color a, Color b ) { return Color(XMVectorMin(a, b)); } +INLINE Color Clamp( Color x, Color a, Color b ) { return Color(XMVectorClamp(x, a, b)); } + + +inline Color::Color( FXMVECTOR vec ) +{ + m_value.v = vec; +} + +inline Color::Color( const XMVECTORF32& vec ) +{ + m_value = vec; +} + +inline Color::Color( float r, float g, float b, float a ) +{ + m_value.v = XMVectorSet(r, g, b, a); +} + +inline Color::Color( uint16_t r, uint16_t g, uint16_t b, uint16_t a, uint16_t bitDepth ) +{ + m_value.v = XMVectorScale(XMVectorSet(r, g, b, a), 1.0f / ((1 << bitDepth) - 1)); +} + +inline Color::Color( uint32_t u32 ) +{ + float r = (float)((u32 >> 0) & 0xFF); + float g = (float)((u32 >> 8) & 0xFF); + float b = (float)((u32 >> 16) & 0xFF); + float a = (float)((u32 >> 24) & 0xFF); + m_value.v = XMVectorScale( XMVectorSet(r, g, b, a), 1.0f / 255.0f ); +} + +inline Color Color::ToSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(1.0f / 2.4f)), 1.055f), XMVectorReplicate(0.055f)); + result = XMVectorSelect(result, XMVectorScale(T, 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromSRGB( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.055f)), 1.0f / 1.055f), XMVectorReplicate(2.4f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 12.92f), XMVectorLess(T, XMVectorReplicate(0.0031308f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::ToREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorSubtract(XMVectorScale(XMVectorPow(T, XMVectorReplicate(0.45f)), 1.099f), XMVectorReplicate(0.099f)); + result = XMVectorSelect(result, XMVectorScale(T, 4.5f), XMVectorLess(T, XMVectorReplicate(0.0018f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline Color Color::FromREC709( void ) const +{ + XMVECTOR T = XMVectorSaturate(m_value); + XMVECTOR result = XMVectorPow(XMVectorScale(XMVectorAdd(T, XMVectorReplicate(0.099f)), 1.0f / 1.099f), XMVectorReplicate(1.0f / 0.45f)); + result = XMVectorSelect(result, XMVectorScale(T, 1.0f / 4.5f), XMVectorLess(T, XMVectorReplicate(0.0081f))); + return XMVectorSelect(T, result, g_XMSelect1110); +} + +inline uint32_t Color::R10G10B10A2( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorSet(1023.0f, 1023.0f, 1023.0f, 3.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result) >> 8; + return a << 30 | b << 20 | g << 10 | r; +} + +inline uint32_t Color::R8G8B8A8( void ) const +{ + XMVECTOR result = XMVectorRound(XMVectorMultiply(XMVectorSaturate(m_value), XMVectorReplicate(255.0f))); + result = _mm_castsi128_ps(_mm_cvttps_epi32(result)); + uint32_t r = XMVectorGetIntX(result); + uint32_t g = XMVectorGetIntY(result); + uint32_t b = XMVectorGetIntZ(result); + uint32_t a = XMVectorGetIntW(result); + return a << 24 | b << 16 | g << 8 | r; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp new file mode 100644 index 0000000..26d7a8b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandAllocatorPool.h" + +CommandAllocatorPool::CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type) : + m_cCommandListType(Type), + m_Device(nullptr) +{ +} + +CommandAllocatorPool::~CommandAllocatorPool() +{ + Shutdown(); +} + +void CommandAllocatorPool::Create(ID3D12Device * pDevice) +{ + m_Device = pDevice; +} + +void CommandAllocatorPool::Shutdown() +{ + for (size_t i = 0; i < m_AllocatorPool.size(); ++i) + m_AllocatorPool[i]->Release(); + + m_AllocatorPool.clear(); +} + +ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t CompletedFenceValue) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + ID3D12CommandAllocator* pAllocator = nullptr; + + // ����Ѿ���ִ���˵Ķ��У��ж��Ƿ���ִ����� + if (!m_ReadyAllocators.empty()) + { + std::pair& AllocatorPair = m_ReadyAllocators.front(); + + // CompletedFenceValue����ǰ�Ѿ�ִ�н�����Χ��ֵ + // ���Χ��ֵԽ������ô�죿���Կ�CommandQueue::ExecuteCommandList�еĽ��� + if (AllocatorPair.first <= CompletedFenceValue) + { + pAllocator = AllocatorPair.second; + ASSERT_SUCCEEDED(pAllocator->Reset()); + m_ReadyAllocators.pop(); + } + } + + // If no allocator's were ready to be reused, create a new one + if (pAllocator == nullptr) + { + ASSERT_SUCCEEDED(m_Device->CreateCommandAllocator(m_cCommandListType, MY_IID_PPV_ARGS(&pAllocator))); + wchar_t AllocatorName[32]; + swprintf(AllocatorName, 32, L"CommandAllocator %zu", m_AllocatorPool.size()); + pAllocator->SetName(AllocatorName); + m_AllocatorPool.push_back(pAllocator); + } + + return pAllocator; +} + +void CommandAllocatorPool::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator * Allocator) +{ + std::lock_guard LockGuard(m_AllocatorMutex); + + // That fence value indicates we are free to reset the allocator + m_ReadyAllocators.push(std::make_pair(FenceValue, Allocator)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.h b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.h new file mode 100644 index 0000000..37419f5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandAllocatorPool.h @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ����������ء� + ���ڹ������������������ + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include + +class CommandAllocatorPool +{ +public: + // ������������ص����� + CommandAllocatorPool(D3D12_COMMAND_LIST_TYPE Type); + ~CommandAllocatorPool(); + + // ��ʼ������������� + void Create(ID3D12Device* pDevice); + // �ر������������ + void Shutdown(); + + // ���ݵ�ǰ�Ѿ�ִ�����Χ��ֵ����ȡһ�������� + ID3D12CommandAllocator* RequestAllocator(uint64_t CompletedFenceValue); + // ���÷�������Ӧ�������б��Ѿ���ExecuteCommandLists����ã���Ҫ���뵱ǰ�����б���Χ��ֵ + void DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator); + + inline size_t Size() { return m_AllocatorPool.size(); } + +private: + const D3D12_COMMAND_LIST_TYPE m_cCommandListType; + + ID3D12Device* m_Device; + std::vector m_AllocatorPool; + std::queue> m_ReadyAllocators; + std::mutex m_AllocatorMutex; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.cpp new file mode 100644 index 0000000..ef38fe6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.cpp @@ -0,0 +1,623 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandContext.h" +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "DescriptorHeap.h" +#include "EngineProfiling.h" + +#ifndef RELEASE +#include +#endif + +using namespace Graphics; + + +void ContextManager::DestroyAllContexts(void) +{ + for (uint32_t i = 0; i < 4; ++i) + sm_ContextPool[i].clear(); +} + +CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE Type) +{ + std::lock_guard LockGuard(sm_ContextAllocationMutex); + + auto& AvailableContexts = sm_AvailableContexts[Type]; + + CommandContext* ret = nullptr; + if (AvailableContexts.empty()) + { + ret = new CommandContext(Type); + sm_ContextPool[Type].emplace_back(ret); + ret->Initialize(); + } + else + { + ret = AvailableContexts.front(); + AvailableContexts.pop(); + ret->Reset(); + } + ASSERT(ret != nullptr); + + ASSERT(ret->m_Type == Type); + + return ret; +} + +void ContextManager::FreeContext(CommandContext* UsedContext) +{ + ASSERT(UsedContext != nullptr); + std::lock_guard LockGuard(sm_ContextAllocationMutex); + sm_AvailableContexts[UsedContext->m_Type].push(UsedContext); +} + +void CommandContext::DestroyAllContexts(void) +{ + LinearAllocator::DestroyAll(); + DynamicDescriptorHeap::DestroyAll(); + g_ContextManager.DestroyAllContexts(); +} + +CommandContext& CommandContext::Begin( const std::wstring ID ) +{ + CommandContext* NewContext = g_ContextManager.AllocateContext(D3D12_COMMAND_LIST_TYPE_DIRECT); + NewContext->SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, NewContext); + return *NewContext; +} + +uint64_t CommandContext::Flush(bool WaitForCompletion) +{ + FlushResourceBarriers(); + + ASSERT(m_CurrentAllocator != nullptr); + + uint64_t FenceValue = g_CommandManager.GetQueue(m_Type).ExecuteCommandList(m_CommandList); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + // + // Reset the command list and restore previous state + // + + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + if (m_CurGraphicsRootSignature) + { + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature); + m_CommandList->SetPipelineState(m_CurGraphicsPipelineState); + } + if (m_CurComputeRootSignature) + { + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature); + m_CommandList->SetPipelineState(m_CurComputePipelineState); + } + + BindDescriptorHeaps(); + + return FenceValue; +} + +uint64_t CommandContext::Finish( bool WaitForCompletion ) +{ + ASSERT(m_Type == D3D12_COMMAND_LIST_TYPE_DIRECT || m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE); + + FlushResourceBarriers(); + + if (m_ID.length() > 0) + EngineProfiling::EndBlock(this); + + ASSERT(m_CurrentAllocator != nullptr); + + CommandQueue& Queue = g_CommandManager.GetQueue(m_Type); + + uint64_t FenceValue = Queue.ExecuteCommandList(m_CommandList); + Queue.DiscardAllocator(FenceValue, m_CurrentAllocator); + m_CurrentAllocator = nullptr; + + m_CpuLinearAllocator.CleanupUsedPages(FenceValue); + m_GpuLinearAllocator.CleanupUsedPages(FenceValue); + m_DynamicViewDescriptorHeap.CleanupUsedHeaps(FenceValue); + m_DynamicSamplerDescriptorHeap.CleanupUsedHeaps(FenceValue); + + if (WaitForCompletion) + g_CommandManager.WaitForFence(FenceValue); + + g_ContextManager.FreeContext(this); + + return FenceValue; +} + +CommandContext::CommandContext(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_DynamicViewDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV), + m_DynamicSamplerDescriptorHeap(*this, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER), + m_CpuLinearAllocator(kCpuWritable), + m_GpuLinearAllocator(kGpuExclusive) +{ + m_OwningManager = nullptr; + m_CommandList = nullptr; + m_CurrentAllocator = nullptr; + ZeroMemory(m_CurrentDescriptorHeaps, sizeof(m_CurrentDescriptorHeaps)); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; +} + +CommandContext::~CommandContext( void ) +{ + if (m_CommandList != nullptr) + m_CommandList->Release(); +} + +void CommandContext::Initialize(void) +{ + g_CommandManager.CreateNewCommandList(m_Type, &m_CommandList, &m_CurrentAllocator); +} + +void CommandContext::Reset( void ) +{ + // We only call Reset() on previously freed contexts. The command list persists, but we must + // request a new allocator. + ASSERT(m_CommandList != nullptr && m_CurrentAllocator == nullptr); + m_CurrentAllocator = g_CommandManager.GetQueue(m_Type).RequestAllocator(); + m_CommandList->Reset(m_CurrentAllocator, nullptr); + + m_CurGraphicsRootSignature = nullptr; + m_CurGraphicsPipelineState = nullptr; + m_CurComputeRootSignature = nullptr; + m_CurComputePipelineState = nullptr; + m_NumBarriersToFlush = 0; + + BindDescriptorHeaps(); +} + +void CommandContext::BindDescriptorHeaps( void ) +{ + UINT NonNullHeaps = 0; + ID3D12DescriptorHeap* HeapsToBind[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + for (UINT i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + ID3D12DescriptorHeap* HeapIter = m_CurrentDescriptorHeaps[i]; + if (HeapIter != nullptr) + HeapsToBind[NonNullHeaps++] = HeapIter; + } + + if (NonNullHeaps > 0) + m_CommandList->SetDescriptorHeaps(NonNullHeaps, HeapsToBind); +} + +void CommandContext::CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex) +{ + FlushResourceBarriers(); + + D3D12_TEXTURE_COPY_LOCATION DestLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + DestSubIndex + }; + + D3D12_TEXTURE_COPY_LOCATION SrcLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SrcSubIndex + }; + + m_CommandList->CopyTextureRegion(&DestLocation, 0, 0, 0, &SrcLocation, nullptr); +} + +void CommandContext::InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]) +{ + UINT64 uploadBufferSize = GetRequiredIntermediateSize(Dest.GetResource(), 0, NumSubresources); + + CommandContext& InitContext = CommandContext::Begin(); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + DynAlloc mem = InitContext.ReserveUploadMemory(uploadBufferSize); + UpdateSubresources(InitContext.m_CommandList, Dest.GetResource(), mem.Buffer.GetResource(), 0, 0, NumSubresources, SubData); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeBuffer(GpuResource& Dest, const void* BufferData, size_t NumBytes, size_t Offset) +{ + CommandContext& InitContext = CommandContext::Begin(); + + DynAlloc mem = InitContext.ReserveUploadMemory(NumBytes); + SIMDMemCopy(mem.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + + // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default texture + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST, true); + InitContext.m_CommandList->CopyBufferRegion(Dest.GetResource(), Offset, mem.Buffer.GetResource(), 0, NumBytes); + InitContext.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ, true); + + // Execute the command list and wait for it to finish so we can release the upload buffer + InitContext.Finish(true); +} + +void CommandContext::InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src) +{ + CommandContext& Context = CommandContext::Begin(); + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + Context.FlushResourceBarriers(); + + const D3D12_RESOURCE_DESC& DestDesc = Dest.GetResource()->GetDesc(); + const D3D12_RESOURCE_DESC& SrcDesc = Src.GetResource()->GetDesc(); + + ASSERT(SliceIndex < DestDesc.DepthOrArraySize && + SrcDesc.DepthOrArraySize == 1 && + DestDesc.Width == SrcDesc.Width && + DestDesc.Height == SrcDesc.Height && + DestDesc.MipLevels <= SrcDesc.MipLevels + ); + + UINT SubResourceIndex = SliceIndex * DestDesc.MipLevels; + + for (UINT i = 0; i < DestDesc.MipLevels; ++i) + { + D3D12_TEXTURE_COPY_LOCATION destCopyLocation = + { + Dest.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + SubResourceIndex + i + }; + + D3D12_TEXTURE_COPY_LOCATION srcCopyLocation = + { + Src.GetResource(), + D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, + i + }; + + Context.m_CommandList->CopyTextureRegion(&destCopyLocation, 0, 0, 0, &srcCopyLocation, nullptr); + } + + Context.TransitionResource(Dest, D3D12_RESOURCE_STATE_GENERIC_READ); + Context.Finish(true); +} + +void CommandContext::ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer) +{ + // The footprint may depend on the device of the resource, but we assume there is only one device. + D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; + g_Device->GetCopyableFootprints(&SrcBuffer.GetResource()->GetDesc(), 0, 1, 0, &PlacedFootprint, nullptr, nullptr, nullptr); + + // This very short command list only issues one API call and will be synchronized so we can immediately read + // the buffer contents. + CommandContext& Context = CommandContext::Begin(L"Copy texture to memory"); + + Context.TransitionResource(SrcBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, true); + + Context.m_CommandList->CopyTextureRegion( + &CD3DX12_TEXTURE_COPY_LOCATION(ReadbackBuffer.GetResource(), PlacedFootprint), 0, 0, 0, + &CD3DX12_TEXTURE_COPY_LOCATION(SrcBuffer.GetResource(), 0), nullptr); + + Context.Finish(true); +} + +void CommandContext::WriteBuffer(GpuResource & Dest, size_t DestOffset, const void* BufferData, size_t NumBytes) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + SIMDMemCopy(TempSpace.DataPtr, BufferData, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::FillBuffer(GpuResource & Dest, size_t DestOffset, DWParam Value, size_t NumBytes) +{ + DynAlloc TempSpace = m_CpuLinearAllocator.Allocate(NumBytes, 512); + __m128 VectorValue = _mm_set1_ps(Value.Float); + SIMDMemFill(TempSpace.DataPtr, VectorValue, Math::DivideByMultiple(NumBytes, 16)); + CopyBufferRegion(Dest, DestOffset, TempSpace.Buffer, TempSpace.Offset, NumBytes); +} + +void CommandContext::TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (m_Type == D3D12_COMMAND_LIST_TYPE_COMPUTE) + { + ASSERT((OldState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == OldState); + ASSERT((NewState & VALID_COMPUTE_QUEUE_RESOURCE_STATES) == NewState); + } + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + // Check to see if we already started the transition + if (NewState == Resource.m_TransitioningState) + { + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_END_ONLY; + Resource.m_TransitioningState = (D3D12_RESOURCE_STATES)-1; + } + else + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + + Resource.m_UsageState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::BeginResourceTransition(GpuResource & Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate) +{ + // If it's already transitioning, finish that transition + if (Resource.m_TransitioningState != (D3D12_RESOURCE_STATES)-1) + TransitionResource(Resource, Resource.m_TransitioningState); + + D3D12_RESOURCE_STATES OldState = Resource.m_UsageState; + + if (OldState != NewState) + { + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + BarrierDesc.Transition.pResource = Resource.GetResource(); + BarrierDesc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + BarrierDesc.Transition.StateBefore = OldState; + BarrierDesc.Transition.StateAfter = NewState; + + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY; + + Resource.m_TransitioningState = NewState; + } + + if (FlushImmediate || m_NumBarriersToFlush == 16) + FlushResourceBarriers(); +} + +void CommandContext::InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.UAV.pResource = Resource.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate) +{ + ASSERT(m_NumBarriersToFlush < 16, "Exceeded arbitrary limit on buffered barriers"); + D3D12_RESOURCE_BARRIER& BarrierDesc = m_ResourceBarrierBuffer[m_NumBarriersToFlush++]; + + BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + BarrierDesc.Aliasing.pResourceBefore = Before.GetResource(); + BarrierDesc.Aliasing.pResourceAfter = After.GetResource(); + + if (FlushImmediate) + FlushResourceBarriers(); +} + +void CommandContext::PIXBeginEvent(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXBeginEvent(m_CommandList, 0, label); +#endif +} + +void CommandContext::PIXEndEvent(void) +{ +#ifndef RELEASE + ::PIXEndEvent(m_CommandList); +#endif +} + +void CommandContext::PIXSetMarker(const wchar_t* label) +{ +#ifdef RELEASE + (label); +#else + ::PIXSetMarker(m_CommandList, 0, label); +#endif +} + +void GraphicsContext::SetRenderTargets( UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV ) +{ + m_CommandList->OMSetRenderTargets( NumRTVs, RTVs, FALSE, &DSV ); +} + +void GraphicsContext::SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]) +{ + m_CommandList->OMSetRenderTargets(NumRTVs, RTVs, FALSE, nullptr); +} + +void GraphicsContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void GraphicsContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} + +void GraphicsContext::ClearColor( ColorBuffer& Target ) +{ + m_CommandList->ClearRenderTargetView(Target.GetRTV(), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearColor(ColorCubeBuffer& Target) +{ + for (int i = 0; i < 6; ++i) + m_CommandList->ClearRenderTargetView(Target.GetRTV(i), Target.GetClearColor().GetPtr(), 0, nullptr); +} + +void GraphicsContext::ClearDepth( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr ); +} + +void GraphicsContext::ClearStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::ClearDepthAndStencil( DepthBuffer& Target ) +{ + m_CommandList->ClearDepthStencilView(Target.GetDSV(), D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, Target.GetClearDepth(), Target.GetClearStencil(), 0, nullptr); +} + +void GraphicsContext::BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->BeginQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex) +{ + m_CommandList->EndQuery(QueryHeap, Type, HeapIndex); +} + +void GraphicsContext::ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset) +{ + m_CommandList->ResolveQueryData(QueryHeap, Type, StartIndex, NumQueries, DestinationBuffer, DestinationBufferOffset); +} + +void GraphicsContext::SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetViewports( 1, &vp ); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetViewport( const D3D12_VIEWPORT& vp ) +{ + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth, FLOAT maxDepth ) +{ + D3D12_VIEWPORT vp; + vp.Width = w; + vp.Height = h; + vp.MinDepth = minDepth; + vp.MaxDepth = maxDepth; + vp.TopLeftX = x; + vp.TopLeftY = y; + m_CommandList->RSSetViewports( 1, &vp ); +} + +void GraphicsContext::SetScissor( const D3D12_RECT& rect ) +{ + ASSERT(rect.left < rect.right && rect.top < rect.bottom); + m_CommandList->RSSetScissorRects( 1, &rect ); +} + +void GraphicsContext::SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VertexData) +{ + ASSERT(VertexData != nullptr && Math::IsAligned(VertexData, 16)); + + size_t BufferSize = Math::AlignUp(NumVertices * VertexStride, 16); + DynAlloc vb = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(vb.DataPtr, VertexData, BufferSize >> 4); + + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = vb.GpuAddress; + VBView.SizeInBytes = (UINT)BufferSize; + VBView.StrideInBytes = (UINT)VertexStride; + + m_CommandList->IASetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetDynamicIB(size_t IndexCount, const uint16_t * IndexData) +{ + ASSERT(IndexData != nullptr && Math::IsAligned(IndexData, 16)); + + size_t BufferSize = Math::AlignUp(IndexCount * sizeof(uint16_t), 16); + DynAlloc ib = m_CpuLinearAllocator.Allocate(BufferSize); + + SIMDMemCopy(ib.DataPtr, IndexData, BufferSize >> 4); + + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = ib.GpuAddress; + IBView.SizeInBytes = (UINT)(IndexCount * sizeof(uint16_t)); + IBView.Format = DXGI_FORMAT_R16_UINT; + + m_CommandList->IASetIndexBuffer(&IBView); +} + + + +ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async) +{ + ComputeContext& NewContext = g_ContextManager.AllocateContext( + Async ? D3D12_COMMAND_LIST_TYPE_COMPUTE : D3D12_COMMAND_LIST_TYPE_DIRECT)->GetComputeContext(); + NewContext.SetID(ID); + if (ID.length() > 0) + EngineProfiling::BeginBlock(ID, &NewContext); + return NewContext; +} + +void ComputeContext::ClearUAV(GpuBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + const UINT ClearColor[4] = {}; + m_CommandList->ClearUnorderedAccessViewUint(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 0, nullptr); +} + +void ComputeContext::ClearUAV(ColorBuffer& Target) +{ + // After binding a UAV, we can get a GPU handle that is required to clear it as a UAV (because it essentially runs + // a shader to set all of the values). + D3D12_GPU_DESCRIPTOR_HANDLE GpuVisibleHandle = m_DynamicViewDescriptorHeap.UploadDirect(Target.GetUAV()); + CD3DX12_RECT ClearRect(0, 0, (LONG)Target.GetWidth(), (LONG)Target.GetHeight()); + + //TODO: My Nvidia card is not clearing UAVs with either Float or Uint variants. + const float* ClearColor = Target.GetClearColor().GetPtr(); + m_CommandList->ClearUnorderedAccessViewFloat(GpuVisibleHandle, Target.GetUAV(), Target.GetResource(), ClearColor, 1, &ClearRect); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.h b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.h new file mode 100644 index 0000000..722c7bf --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandContext.h @@ -0,0 +1,763 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "CommandListManager.h" +#include "Color.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "TextureManager.h" +#include "PixelBuffer.h" +#include "DynamicDescriptorHeap.h" +#include "LinearAllocator.h" +#include "CommandSignature.h" +#include "GraphicsCore.h" +#include + +class ColorBuffer; +class ColorCubeBuffer; +class DepthBuffer; +class Texture; +class GraphicsContext; +class ComputeContext; + +struct DWParam +{ + DWParam( FLOAT f ) : Float(f) {} + DWParam( UINT u ) : Uint(u) {} + DWParam( INT i ) : Int(i) {} + + void operator= ( FLOAT f ) { Float = f; } + void operator= ( UINT u ) { Uint = u; } + void operator= ( INT i ) { Int = i; } + + union + { + FLOAT Float; + UINT Uint; + INT Int; + }; +}; + +#define VALID_COMPUTE_QUEUE_RESOURCE_STATES \ + ( D3D12_RESOURCE_STATE_UNORDERED_ACCESS \ + | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE \ + | D3D12_RESOURCE_STATE_COPY_DEST \ + | D3D12_RESOURCE_STATE_COPY_SOURCE ) + +class ContextManager +{ +public: + ContextManager(void) {} + + CommandContext* AllocateContext(D3D12_COMMAND_LIST_TYPE Type); + void FreeContext(CommandContext*); + void DestroyAllContexts(); + +private: + std::vector > sm_ContextPool[4]; + std::queue sm_AvailableContexts[4]; + std::mutex sm_ContextAllocationMutex; +}; + +struct NonCopyable +{ + NonCopyable() = default; + NonCopyable(const NonCopyable&) = delete; + NonCopyable & operator=(const NonCopyable&) = delete; +}; + +class CommandContext : NonCopyable +{ + friend ContextManager; +private: + + CommandContext(D3D12_COMMAND_LIST_TYPE Type); + + void Reset( void ); + +public: + + ~CommandContext(void); + + // �ݻ���������� + static void DestroyAllContexts(void); + + // ��ʼһ������� + static CommandContext& Begin(const std::wstring ID = L""); + + // Flush existing commands to the GPU but keep the context alive + uint64_t Flush( bool WaitForCompletion = false ); + + // Flush existing commands and release the current context + uint64_t Finish( bool WaitForCompletion = false ); + + // Prepare to render by reserving a command list and command allocator + void Initialize(void); + + // ͼ�����������Ļ��� + GraphicsContext& GetGraphicsContext() { + ASSERT(m_Type != D3D12_COMMAND_LIST_TYPE_COMPUTE, "Cannot convert async compute context to graphics"); + return reinterpret_cast(*this); + } + + // �������������Ļ��� + ComputeContext& GetComputeContext() { + return reinterpret_cast(*this); + } + + // ��ȡ�����б� + ID3D12GraphicsCommandList* GetCommandList() { + return m_CommandList; + } + + // ��src��Դ�п������ݵ�Dest��Դ�� + void CopyBuffer(GpuResource& Dest, GpuResource& Src); + void CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes); + void CopySubresource(GpuResource& Dest, UINT DestSubIndex, GpuResource& Src, UINT SrcSubIndex); + void CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src); + void ResetCounter(StructuredBuffer& Buf, uint32_t Value = 0); + + // ׼���ϴ������� + DynAlloc ReserveUploadMemory(size_t SizeInBytes) + { + return m_CpuLinearAllocator.Allocate(SizeInBytes); + } + + static void InitializeTexture(GpuResource& Dest, UINT NumSubresources, D3D12_SUBRESOURCE_DATA SubData[]); + static void InitializeBuffer(GpuResource& Dest, const void* Data, size_t NumBytes, size_t Offset = 0); + static void InitializeTextureArraySlice(GpuResource& Dest, UINT SliceIndex, GpuResource& Src); + static void ReadbackTexture2D(GpuResource& ReadbackBuffer, PixelBuffer& SrcBuffer); + + // ������д�������Dest��Դ�� + void WriteBuffer(GpuResource& Dest, size_t DestOffset, const void* Data, size_t NumBytes); + // ��������䵽������Dest��Դ�� + void FillBuffer(GpuResource& Dest, size_t DestOffset, DWParam Value, size_t NumBytes); + + // �޸�һ����Դ��״̬ + void TransitionResource(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void BeginResourceTransition(GpuResource& Resource, D3D12_RESOURCE_STATES NewState, bool FlushImmediate = false); + void InsertUAVBarrier(GpuResource& Resource, bool FlushImmediate = false); + void InsertAliasBarrier(GpuResource& Before, GpuResource& After, bool FlushImmediate = false); + // �޸���Դ״̬ʵ�����Ƿ�����һ�����У�����ǰ���Դ״̬���޸�ֱ�ӷ��͸�gpu + inline void FlushResourceBarriers(void); + + void InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx); + void ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries); + void PIXBeginEvent(const wchar_t* label); + void PIXEndEvent(void); + void PIXSetMarker(const wchar_t* label); + + // ������������ + void SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ); + void SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ); + + void SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op); + +protected: + + void BindDescriptorHeaps( void ); + + CommandListManager* m_OwningManager; + ID3D12GraphicsCommandList* m_CommandList; + ID3D12CommandAllocator* m_CurrentAllocator; + + ID3D12RootSignature* m_CurGraphicsRootSignature; + ID3D12PipelineState* m_CurGraphicsPipelineState; + ID3D12RootSignature* m_CurComputeRootSignature; + ID3D12PipelineState* m_CurComputePipelineState; + + DynamicDescriptorHeap m_DynamicViewDescriptorHeap; // HEAP_TYPE_CBV_SRV_UAV + DynamicDescriptorHeap m_DynamicSamplerDescriptorHeap; // HEAP_TYPE_SAMPLER + + D3D12_RESOURCE_BARRIER m_ResourceBarrierBuffer[16]; + UINT m_NumBarriersToFlush; + + ID3D12DescriptorHeap* m_CurrentDescriptorHeaps[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + + LinearAllocator m_CpuLinearAllocator; + LinearAllocator m_GpuLinearAllocator; + + std::wstring m_ID; + void SetID(const std::wstring& ID) { m_ID = ID; } + + D3D12_COMMAND_LIST_TYPE m_Type; +}; + +class GraphicsContext : public CommandContext +{ +public: + + static GraphicsContext& Begin(const std::wstring& ID = L"") + { + return CommandContext::Begin(ID).GetGraphicsContext(); + } + + // ������ͼ + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + void ClearColor( ColorBuffer& Target ); + void ClearColor(ColorCubeBuffer& Target); + void ClearDepth( DepthBuffer& Target ); + void ClearStencil( DepthBuffer& Target ); + void ClearDepthAndStencil( DepthBuffer& Target ); + + void BeginQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void EndQuery(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT HeapIndex); + void ResolveQueryData(ID3D12QueryHeap* QueryHeap, D3D12_QUERY_TYPE Type, UINT StartIndex, UINT NumQueries, ID3D12Resource* DestinationBuffer, UINT64 DestinationBufferOffset); + + // ���ø�ǩ�� + void SetRootSignature(const RootSignature& RootSig); + + // ������ȾĿ����ͼ + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[]); + void SetRenderTargets(UINT NumRTVs, const D3D12_CPU_DESCRIPTOR_HANDLE RTVs[], D3D12_CPU_DESCRIPTOR_HANDLE DSV); + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTargets(1, &RTV); } + void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(1, &RTV, DSV); } + void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRenderTargets(0, nullptr, DSV); } + + // �����ӿڡ��ü����� + void SetViewport( const D3D12_VIEWPORT& vp ); + void SetViewport( FLOAT x, FLOAT y, FLOAT w, FLOAT h, FLOAT minDepth = 0.0f, FLOAT maxDepth = 1.0f ); + void SetScissor( const D3D12_RECT& rect ); + void SetScissor( UINT left, UINT top, UINT right, UINT bottom ); + void SetViewportAndScissor( const D3D12_VIEWPORT& vp, const D3D12_RECT& rect ); + void SetViewportAndScissor( UINT x, UINT y, UINT w, UINT h ); + void SetStencilRef(UINT StencilRef); + void SetBlendFactor(Color BlendFactor); + void SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology); + + // ������ˮ��״̬ + void SetPipelineState(const GraphicsPSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + // ���������� + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + // ���ò��� + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + // ����������ͼ��������ͼ + void SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView); + void SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView); + void SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]); + // ��̬���ö�����ͼ + void SetDynamicVB(UINT Slot, size_t NumVertices, size_t VertexStride, const void* VBData); + // ��̬����������ͼ + void SetDynamicIB(size_t IndexCount, const uint16_t* IBData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + + // ���ݶ������ + void Draw(UINT VertexCount, UINT VertexStartOffset = 0); + // ������������ + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation = 0, INT BaseVertexLocation = 0); + // ���ݶ������ + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation = 0, UINT StartInstanceLocation = 0); + // ������������ + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +class ComputeContext : public CommandContext +{ +public: + + static ComputeContext& Begin(const std::wstring& ID = L"", bool Async = false); + + void ClearUAV(GpuBuffer& Target); + void ClearUAV(ColorBuffer& Target); + + void SetRootSignature(const RootSignature& RootSig); + + void SetPipelineState(const ComputePSO& PSO); + void SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset = 0); + void SetConstant(UINT RootIndex, DWParam Val, UINT Offset = 0); + void SetConstants(UINT RootIndex, DWParam X); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z); + void SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W); + void SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV); + void SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData); + void SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset = 0); + void SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset = 0); + void SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle); + + void SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + void SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle); + void SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]); + + void Dispatch(size_t GroupCountX = 1, size_t GroupCountY = 1, size_t GroupCountZ = 1); + void Dispatch1D(size_t ThreadCountX, size_t GroupSizeX = 64); + void Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX = 8, size_t GroupSizeY = 8); + void Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ); + void DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset = 0); + void ExecuteIndirect(CommandSignature& CommandSig, GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset = 0, + uint32_t MaxCommands = 1, GpuBuffer * CommandCounterBuffer = nullptr, uint64_t CounterOffset = 0); + +private: +}; + +// ====================== CommandContext ====================== +inline void CommandContext::CopyBuffer(GpuResource& Dest, GpuResource& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyResource(Dest.GetResource(), Src.GetResource()); +} + +inline void CommandContext::CopyBufferRegion(GpuResource& Dest, size_t DestOffset, GpuResource& Src, size_t SrcOffset, size_t NumBytes) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + //TransitionResource(Src, D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetResource(), SrcOffset, NumBytes); +} + +inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOffset, StructuredBuffer& Src) +{ + TransitionResource(Dest, D3D12_RESOURCE_STATE_COPY_DEST); + TransitionResource(Src.GetCounterBuffer(), D3D12_RESOURCE_STATE_COPY_SOURCE); + FlushResourceBarriers(); + m_CommandList->CopyBufferRegion(Dest.GetResource(), DestOffset, Src.GetCounterBuffer().GetResource(), 0, 4); +} + +inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t Value) +{ + FillBuffer(Buf.GetCounterBuffer(), 0, Value, sizeof(uint32_t)); + TransitionResource(Buf.GetCounterBuffer(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS); +} + +inline void CommandContext::FlushResourceBarriers( void ) +{ + if (m_NumBarriersToFlush > 0) + { + m_CommandList->ResourceBarrier(m_NumBarriersToFlush, m_ResourceBarrierBuffer); + m_NumBarriersToFlush = 0; + } +} + +inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap, uint32_t QueryIdx) +{ + m_CommandList->EndQuery(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, QueryIdx); +} + +inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackHeap, ID3D12QueryHeap* pQueryHeap, uint32_t NumQueries) +{ + m_CommandList->ResolveQueryData(pQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, 0, NumQueries, pReadbackHeap, 0); +} + +inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, ID3D12DescriptorHeap* HeapPtr ) +{ + if (m_CurrentDescriptorHeaps[Type] != HeapPtr) + { + m_CurrentDescriptorHeaps[Type] = HeapPtr; + BindDescriptorHeaps(); + } +} + +inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DESCRIPTOR_HEAP_TYPE Type[], ID3D12DescriptorHeap* HeapPtrs[] ) +{ + bool AnyChanged = false; + + for (UINT i = 0; i < HeapCount; ++i) + { + if (m_CurrentDescriptorHeaps[Type[i]] != HeapPtrs[i]) + { + m_CurrentDescriptorHeaps[Type[i]] = HeapPtrs[i]; + AnyChanged = true; + } + } + + if (AnyChanged) + BindDescriptorHeaps(); +} + +inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT64 BufferOffset, D3D12_PREDICATION_OP Op) +{ + m_CommandList->SetPredication(Buffer, BufferOffset, Op); +} + +// ====================== GraphicsContext ====================== +inline void GraphicsContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurGraphicsRootSignature) + return; + + m_CommandList->SetGraphicsRootSignature(m_CurGraphicsRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseGraphicsRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseGraphicsRootSignature(RootSig); +} + +inline void GraphicsContext::SetViewportAndScissor(UINT x, UINT y, UINT w, UINT h) +{ + SetViewport((float)x, (float)y, (float)w, (float)h); + SetScissor(x, y, x + w, y + h); +} + +inline void GraphicsContext::SetScissor(UINT left, UINT top, UINT right, UINT bottom) +{ + SetScissor(CD3DX12_RECT(left, top, right, bottom)); +} + +inline void GraphicsContext::SetStencilRef(UINT ref) +{ + m_CommandList->OMSetStencilRef(ref); +} + +inline void GraphicsContext::SetBlendFactor(Color BlendFactor) +{ + m_CommandList->OMSetBlendFactor(BlendFactor.GetPtr()); +} + +inline void GraphicsContext::SetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY Topology) +{ + m_CommandList->IASetPrimitiveTopology(Topology); +} + +inline void GraphicsContext::SetPipelineState(const GraphicsPSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurGraphicsPipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurGraphicsPipelineState = PipelineState; +} + +inline void GraphicsContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetGraphicsRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void GraphicsContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); +} + +inline void GraphicsContext::SetConstants(UINT RootIndex, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, X.Uint, 0); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Y.Uint, 1); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, Z.Uint, 2); + m_CommandList->SetGraphicsRoot32BitConstant(RootIndex, W.Uint, 3); +} + +inline void GraphicsContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, CBV); +} + +inline void GraphicsContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetGraphicsRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)) != 0); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetBufferUAV(UINT RootIndex, const GpuBuffer & UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetGraphicsRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void GraphicsContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetGraphicsRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void GraphicsContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} +inline void GraphicsContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void GraphicsContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetGraphicsDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void GraphicsContext::SetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW& IBView) +{ + m_CommandList->IASetIndexBuffer(&IBView); +} + +inline void GraphicsContext::SetVertexBuffer(UINT Slot, const D3D12_VERTEX_BUFFER_VIEW& VBView) +{ + SetVertexBuffers(Slot, 1, &VBView); +} + +inline void GraphicsContext::SetVertexBuffers(UINT StartSlot, UINT Count, const D3D12_VERTEX_BUFFER_VIEW VBViews[]) +{ + m_CommandList->IASetVertexBuffers(StartSlot, Count, VBViews); +} + +inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetGraphicsRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset) +{ + DrawInstanced(VertexCount, 1, VertexStartOffset, 0); +} + +inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) +{ + DrawIndexedInstanced(IndexCount, 1, StartIndexLocation, BaseVertexLocation, 0); +} + +inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, + UINT StartVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawInstanced(VertexCountPerInstance, InstanceCount, StartVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, + INT BaseVertexLocation, UINT StartInstanceLocation) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitGraphicsRootDescriptorTables(m_CommandList); + m_CommandList->DrawIndexedInstanced(IndexCountPerInstance, InstanceCount, StartIndexLocation, BaseVertexLocation, StartInstanceLocation); +} + +inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DrawIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} + +// ====================== ComputeContext ====================== +inline void ComputeContext::SetRootSignature(const RootSignature& RootSig) +{ + if (RootSig.GetSignature() == m_CurComputeRootSignature) + return; + + m_CommandList->SetComputeRootSignature(m_CurComputeRootSignature = RootSig.GetSignature()); + + m_DynamicViewDescriptorHeap.ParseComputeRootSignature(RootSig); + m_DynamicSamplerDescriptorHeap.ParseComputeRootSignature(RootSig); +} + +inline void ComputeContext::SetPipelineState(const ComputePSO& PSO) +{ + ID3D12PipelineState* PipelineState = PSO.GetPipelineStateObject(); + if (PipelineState == m_CurComputePipelineState) + return; + + m_CommandList->SetPipelineState(PipelineState); + m_CurComputePipelineState = PipelineState; +} + +inline void ComputeContext::SetConstantArray(UINT RootIndex, UINT NumConstants, const void* pConstants, UINT Offset /* = 0 */) +{ + m_CommandList->SetComputeRoot32BitConstants(RootIndex, NumConstants, pConstants, Offset); +} + +inline void ComputeContext::SetConstant(UINT RootEntry, DWParam Val, UINT Offset) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Val.Uint, Offset); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); +} + +inline void ComputeContext::SetConstants(UINT RootEntry, DWParam X, DWParam Y, DWParam Z, DWParam W) +{ + m_CommandList->SetComputeRoot32BitConstant(RootEntry, X.Uint, 0); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Y.Uint, 1); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, Z.Uint, 2); + m_CommandList->SetComputeRoot32BitConstant(RootEntry, W.Uint, 3); +} + +inline void ComputeContext::SetConstantBuffer(UINT RootIndex, D3D12_GPU_VIRTUAL_ADDRESS CBV) +{ + m_CommandList->SetComputeRootConstantBufferView(RootIndex, CBV); +} + +inline void ComputeContext::SetDynamicConstantBufferView(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + //SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + memcpy(cb.DataPtr, BufferData, BufferSize); + m_CommandList->SetComputeRootConstantBufferView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferSize, const void* BufferData) +{ + ASSERT(BufferData != nullptr && Math::IsAligned(BufferData, 16)); + DynAlloc cb = m_CpuLinearAllocator.Allocate(BufferSize); + SIMDMemCopy(cb.DataPtr, BufferData, Math::AlignUp(BufferSize, 16) >> 4); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, cb.GpuAddress); +} + +inline void ComputeContext::SetBufferSRV(UINT RootIndex, const GpuBuffer& SRV, UINT64 Offset) +{ + ASSERT((SRV.m_UsageState & D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE) != 0); + m_CommandList->SetComputeRootShaderResourceView(RootIndex, SRV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::SetBufferUAV(UINT RootIndex, const GpuBuffer& UAV, UINT64 Offset) +{ + ASSERT((UAV.m_UsageState & D3D12_RESOURCE_STATE_UNORDERED_ACCESS) != 0); + m_CommandList->SetComputeRootUnorderedAccessView(RootIndex, UAV.GetGpuVirtualAddress() + Offset); +} + +inline void ComputeContext::Dispatch(size_t GroupCountX, size_t GroupCountY, size_t GroupCountZ) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->Dispatch((UINT)GroupCountX, (UINT)GroupCountY, (UINT)GroupCountZ); +} + +inline void ComputeContext::Dispatch1D(size_t ThreadCountX, size_t GroupSizeX) +{ + Dispatch(Math::DivideByMultiple(ThreadCountX, GroupSizeX), 1, 1); +} + +inline void ComputeContext::Dispatch2D(size_t ThreadCountX, size_t ThreadCountY, size_t GroupSizeX, size_t GroupSizeY) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), 1); +} + +inline void ComputeContext::Dispatch3D(size_t ThreadCountX, size_t ThreadCountY, size_t ThreadCountZ, size_t GroupSizeX, size_t GroupSizeY, size_t GroupSizeZ) +{ + Dispatch( + Math::DivideByMultiple(ThreadCountX, GroupSizeX), + Math::DivideByMultiple(ThreadCountY, GroupSizeY), + Math::DivideByMultiple(ThreadCountZ, GroupSizeZ)); +} + +inline void ComputeContext::SetDynamicDescriptor(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicDescriptors(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicDescriptors(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicViewDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDynamicSampler(UINT RootIndex, UINT Offset, D3D12_CPU_DESCRIPTOR_HANDLE Handle) +{ + SetDynamicSamplers(RootIndex, Offset, 1, &Handle); +} + +inline void ComputeContext::SetDynamicSamplers(UINT RootIndex, UINT Offset, UINT Count, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[]) +{ + m_DynamicSamplerDescriptorHeap.SetComputeDescriptorHandles(RootIndex, Offset, Count, Handles); +} + +inline void ComputeContext::SetDescriptorTable(UINT RootIndex, D3D12_GPU_DESCRIPTOR_HANDLE FirstHandle) +{ + m_CommandList->SetComputeRootDescriptorTable(RootIndex, FirstHandle); +} + +inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig, + GpuBuffer& ArgumentBuffer, uint64_t ArgumentStartOffset, + uint32_t MaxCommands, GpuBuffer* CommandCounterBuffer, uint64_t CounterOffset) +{ + FlushResourceBarriers(); + m_DynamicViewDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_DynamicSamplerDescriptorHeap.CommitComputeRootDescriptorTables(m_CommandList); + m_CommandList->ExecuteIndirect(CommandSig.GetSignature(), MaxCommands, + ArgumentBuffer.GetResource(), ArgumentStartOffset, + CommandCounterBuffer == nullptr ? nullptr : CommandCounterBuffer->GetResource(), CounterOffset); +} + +inline void ComputeContext::DispatchIndirect(GpuBuffer& ArgumentBuffer, uint64_t ArgumentBufferOffset) +{ + ExecuteIndirect(Graphics::DispatchIndirectCommandSignature, ArgumentBuffer, ArgumentBufferOffset); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.cpp new file mode 100644 index 0000000..339abe2 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandListManager.h" + +namespace Graphics +{ + extern CommandListManager g_CommandManager; +} + +CommandQueue::CommandQueue(D3D12_COMMAND_LIST_TYPE Type) : + m_Type(Type), + m_CommandQueue(nullptr), + m_pFence(nullptr), + m_NextFenceValue((uint64_t)Type << 56 | 1), + m_LastCompletedFenceValue((uint64_t)Type << 56), + m_AllocatorPool(Type) +{ +} + +CommandQueue::~CommandQueue() +{ + Shutdown(); +} + +void CommandQueue::Shutdown() +{ + if (m_CommandQueue == nullptr) + return; + + m_AllocatorPool.Shutdown(); + + CloseHandle(m_FenceEventHandle); + + m_pFence->Release(); + m_pFence = nullptr; + + m_CommandQueue->Release(); + m_CommandQueue = nullptr; +} + +void CommandQueue::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + ASSERT(!IsReady()); + ASSERT(m_AllocatorPool.Size() == 0); + + // ����������� + D3D12_COMMAND_QUEUE_DESC QueueDesc = {}; + QueueDesc.Type = m_Type; + QueueDesc.NodeMask = 1; + pDevice->CreateCommandQueue(&QueueDesc, MY_IID_PPV_ARGS(&m_CommandQueue)); + m_CommandQueue->SetName(L"CommandListManager::m_CommandQueue"); + + // ����Χ���������õ�ǰΧ��ֵ + ASSERT_SUCCEEDED(pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, MY_IID_PPV_ARGS(&m_pFence))); + m_pFence->SetName(L"CommandListManager::m_pFence"); + m_pFence->Signal((uint64_t)m_Type << 56); + + // ע��Χ���¼� + m_FenceEventHandle = CreateEvent(nullptr, false, false, nullptr); + ASSERT(m_FenceEventHandle != INVALID_HANDLE_VALUE); + + // ��������������� + m_AllocatorPool.Create(pDevice); + + ASSERT(IsReady()); +} + +uint64_t CommandQueue::ExecuteCommandList( ID3D12CommandList* List ) +{ + std::lock_guard LockGuard(m_FenceMutex); + + ASSERT_SUCCEEDED(((ID3D12GraphicsCommandList*)List)->Close()); + + // ��list�е��������gpu����������� + // Kickoff the command list + m_CommandQueue->ExecuteCommandLists(1, &List); + + // �����൱�ڸ�gpu���������������һ���ض���Χ��ֵ����Listִ�н�������ִ����һ��������m_pFence�����µ����Χ��ֵ + // ���ݳ�ʼ��������Կ�����3�ֶ��У�ÿ������ʼΧ��ֵ�Dz�ͬ�� + // �����Χ��ֵ�᲻��Խ���� + // ����0����˵��������ʼΧ��ֵ=1,����Χ��ֵΪ (1<<56) + // ����1��100֡ + // Խ��ʱ��Ϊ (1<<56)/100/3600/24/365=22849313�� + // ���Բ���Խ�� + // Signal the next fence value (with the GPU) + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + + // Χ��ֵ+1 + // And increment the fence value. + return m_NextFenceValue++; +} + +uint64_t CommandQueue::IncrementFence(void) +{ + // ����Χ��ֵ + std::lock_guard LockGuard(m_FenceMutex); + m_CommandQueue->Signal(m_pFence, m_NextFenceValue); + return m_NextFenceValue++; +} + +bool CommandQueue::IsFenceComplete(uint64_t FenceValue) +{ + // �ж�ijΧ��ֵ�Ƿ���ִ�� + // Avoid querying the fence value by testing against the last one seen. + // The max() is to protect against an unlikely race condition that could cause the last + // completed fence value to regress. + if (FenceValue > m_LastCompletedFenceValue) + m_LastCompletedFenceValue = std::max(m_LastCompletedFenceValue, m_pFence->GetCompletedValue()); + + return FenceValue <= m_LastCompletedFenceValue; +} + +void CommandQueue::StallForFence(uint64_t FenceValue) +{ + // �ȴ���Χ��ִֵ�н��� + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + m_CommandQueue->Wait(Producer.m_pFence, FenceValue); +} + +void CommandQueue::StallForProducer(CommandQueue & Producer) +{ + // �ȴ����������ִ�н��� + // ע������������н����洢���Ѿ�ִ�й���Χ������һ�ε�Χ���� + // ��ǰִ�е����Χ������m_NextFenceValue - 1 + ASSERT(Producer.m_NextFenceValue > 0); + m_CommandQueue->Wait(Producer.m_pFence, Producer.m_NextFenceValue - 1); +} + +void CommandQueue::WaitForFence(uint64_t FenceValue) +{ + // �ȴ�ij��Χ��ֵ����������ڼ����� + if (IsFenceComplete(FenceValue)) + return; + + // TODO: Think about how this might affect a multi-threaded situation. Suppose thread A + // wants to wait for fence 100, then thread B comes along and wants to wait for 99. If + // the fence can only have one event set on completion, then thread B has to wait for + // 100 before it knows 99 is ready. Maybe insert sequential events? + { + std::lock_guard LockGuard(m_EventMutex); + + m_pFence->SetEventOnCompletion(FenceValue, m_FenceEventHandle); + WaitForSingleObject(m_FenceEventHandle, INFINITE); + m_LastCompletedFenceValue = FenceValue; + } +} + +ID3D12CommandAllocator* CommandQueue::RequestAllocator() +{ + // ����һ����������е���������� + uint64_t CompletedFence = m_pFence->GetCompletedValue(); + + return m_AllocatorPool.RequestAllocator(CompletedFence); +} + +void CommandQueue::DiscardAllocator(uint64_t FenceValue, ID3D12CommandAllocator* Allocator) +{ + // ��Ҫ�����������������һ��Χ��ֵ��Ȼ��ִ��������������Ƕ�Ӧ�������������Χ��ֵ�������ж��Ƿ�ɸ��� + m_AllocatorPool.DiscardAllocator(FenceValue, Allocator); +} + +CommandListManager::CommandListManager() : + m_Device(nullptr), + m_GraphicsQueue(D3D12_COMMAND_LIST_TYPE_DIRECT), + m_ComputeQueue(D3D12_COMMAND_LIST_TYPE_COMPUTE), + m_CopyQueue(D3D12_COMMAND_LIST_TYPE_COPY) +{ +} + +CommandListManager::~CommandListManager() +{ + Shutdown(); +} + +void CommandListManager::Shutdown() +{ + m_GraphicsQueue.Shutdown(); + m_ComputeQueue.Shutdown(); + m_CopyQueue.Shutdown(); +} + +void CommandListManager::Create(ID3D12Device* pDevice) +{ + ASSERT(pDevice != nullptr); + + m_Device = pDevice; + + m_GraphicsQueue.Create(pDevice); + m_ComputeQueue.Create(pDevice); + m_CopyQueue.Create(pDevice); +} + +void CommandListManager::CreateNewCommandList(D3D12_COMMAND_LIST_TYPE Type, ID3D12GraphicsCommandList * *List, ID3D12CommandAllocator * *Allocator) +{ + ASSERT(Type != D3D12_COMMAND_LIST_TYPE_BUNDLE, "Bundles are not yet supported"); + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_DIRECT: *Allocator = m_GraphicsQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_BUNDLE: break; + case D3D12_COMMAND_LIST_TYPE_COMPUTE: *Allocator = m_ComputeQueue.RequestAllocator(); break; + case D3D12_COMMAND_LIST_TYPE_COPY: *Allocator = m_CopyQueue.RequestAllocator(); break; + } + + ASSERT_SUCCEEDED(m_Device->CreateCommandList(1, Type, *Allocator, nullptr, MY_IID_PPV_ARGS(List))); + (*List)->SetName(L"CommandList"); +} + +void CommandListManager::WaitForFence(uint64_t FenceValue) +{ + CommandQueue& Producer = Graphics::g_CommandManager.GetQueue((D3D12_COMMAND_LIST_TYPE)(FenceValue >> 56)); + Producer.WaitForFence(FenceValue); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.h b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.h new file mode 100644 index 0000000..c519c2e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/CommandListManager.h @@ -0,0 +1,149 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + CommandQueue����������� + CommandListManager: �����б������� + + �������readme.txt +*/ + +#pragma once + +#include +#include +#include +#include +#include "CommandAllocatorPool.h" + +class CommandQueue +{ + friend class CommandListManager; + friend class CommandContext; + +public: + CommandQueue(D3D12_COMMAND_LIST_TYPE Type); + ~CommandQueue(); + + // ����������� + void Create(ID3D12Device* pDevice); + void Shutdown(); + + inline bool IsReady() + { + return m_CommandQueue != nullptr; + } + + uint64_t IncrementFence(void); + + // ��Χ���Ƿ���� + bool IsFenceComplete(uint64_t FenceValue); + // �ȴ�Χ����������Ҫȷ����ʱ��Χ���ض���û�н��� + void StallForFence(uint64_t FenceValue); + // �ȴ����������ȫ�����ݽ�������Ҫȷ����ʱ��������бض���û�н��� + void StallForProducer(CommandQueue& Producer); + // �ȴ�Χ������ + void WaitForFence(uint64_t FenceValue); + // ���������������һ��Χ��ֵ���ȴ����� + void WaitForIdle(void) { WaitForFence(IncrementFence()); } + + ID3D12CommandQueue* GetCommandQueue() { return m_CommandQueue; } + + uint64_t GetNextFenceValue() { return m_NextFenceValue; } + +private: + // �������б������ݲ���gpu��������� + uint64_t ExecuteCommandList(ID3D12CommandList* List); + // ����һ�����õĸ�������е���������� + ID3D12CommandAllocator* RequestAllocator(void); + // ��һ���������ִ����ExecuteCommandList�󣬲���һ��Χ��ֵ�������ñ�������¼�����������key + void DiscardAllocator(uint64_t FenceValueForReset, ID3D12CommandAllocator* Allocator); + + ID3D12CommandQueue* m_CommandQueue; // ������� + + const D3D12_COMMAND_LIST_TYPE m_Type; // ������������� + + CommandAllocatorPool m_AllocatorPool; // ����������أ�����m_Type + std::mutex m_FenceMutex; + std::mutex m_EventMutex; + + // Lifetime of these objects is managed by the descriptor cache + ID3D12Fence* m_pFence; // Χ�������Ի�ȡ�Ѿ�ִ�����Χ��ֵ�����жϵ�ǰ������ж�Ӧ������������Ƿ���Ը��� + uint64_t m_NextFenceValue; + uint64_t m_LastCompletedFenceValue; + HANDLE m_FenceEventHandle; + +}; + +class CommandListManager +{ + friend class CommandContext; + +public: + CommandListManager(); + ~CommandListManager(); + + void Create(ID3D12Device* pDevice); + void Shutdown(); + + CommandQueue& GetGraphicsQueue(void) { return m_GraphicsQueue; } + CommandQueue& GetComputeQueue(void) { return m_ComputeQueue; } + CommandQueue& GetCopyQueue(void) { return m_CopyQueue; } + + CommandQueue& GetQueue(D3D12_COMMAND_LIST_TYPE Type = D3D12_COMMAND_LIST_TYPE_DIRECT) + { + switch (Type) + { + case D3D12_COMMAND_LIST_TYPE_COMPUTE: return m_ComputeQueue; + case D3D12_COMMAND_LIST_TYPE_COPY: return m_CopyQueue; + default: return m_GraphicsQueue; + } + } + + ID3D12CommandQueue* GetCommandQueue() + { + return m_GraphicsQueue.GetCommandQueue(); + } + + // �������ʹ���һ�������б��Լ���Ӧ����������� + void CreateNewCommandList( + D3D12_COMMAND_LIST_TYPE Type, + ID3D12GraphicsCommandList** List, + ID3D12CommandAllocator** Allocator); + + // Test to see if a fence has already been reached + bool IsFenceComplete(uint64_t FenceValue) + { + return GetQueue(D3D12_COMMAND_LIST_TYPE(FenceValue >> 56)).IsFenceComplete(FenceValue); + } + + // The CPU will wait for a fence to reach a specified value + void WaitForFence(uint64_t FenceValue); + + // The CPU will wait for all command queues to empty (so that the GPU is idle) + void IdleGPU(void) + { + m_GraphicsQueue.WaitForIdle(); + m_ComputeQueue.WaitForIdle(); + m_CopyQueue.WaitForIdle(); + } + +private: + + ID3D12Device* m_Device; + + // Χ��3��������� + CommandQueue m_GraphicsQueue; + CommandQueue m_ComputeQueue; + CommandQueue m_CopyQueue; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Command/readme_command.txt b/Chapter 20 Shadow Mapping/Core/Graphics/Command/readme_command.txt new file mode 100644 index 0000000..0aa2cfc --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Command/readme_command.txt @@ -0,0 +1,51 @@ + +�ӿ�˵���� +--������У�ID3D12CommandQueue +--�����б���ID3D12CommandList +--�����������ID3D12CommandAllocator +--Χ����ID3D12Fence + +�ļ�˵���� +--CommandAllocatorPool +--����������أ���Ҫ��ʼ��Ϊһ���ض����͡�ͨ��Χ�����ƿ����������������� + +--CommandListManager +--ά��������С������б���Χ���� + +--CommandContext +--������������װ������ʹ�� + +����GPUִ����������: +1. �����Ѿ�����ID3D12Device + +2. ����һ��Χ��ID3D12Fence + ID3D12Device->CreateFence + +3. ������Ը��豸���������: ID3D12CommandQueue + ID3D12Device->CreateCommandQueue + +4. ����һ�����������:ID3D12CommandAllocator����Ӧ����Ҫִ�е��������ͣ� + ID3D12Device->CreateCommandAllocator + +5. ʹ�ø��������������һ�������б�: ID3D12CommandList + ID3D12Device->CreateCommandList + +6. �������б��в������� + ID3D12CommandList->xxx // �������� + ID3D12CommandList->xxx // �������� + CreateCommandList->close(); // �ر� + +7. ���͸�GPUִ������ + ID3D12CommandQueue->ExecuteCommandLists + +8. ����Χ��ֵ + ID3D12CommandQueue-Signal + +9. ���������������������ȣ�����������Ĺ��� + +˵�����£� +1. ����3��4��5�DZر��ļ��������� +2. ����6��ʵ���ǰ��������������������� +3. ����7�������Ǹ���GPU��ʼִ�У�GPU���ȡ����������е���������ִ�� +4. ����8����ΪGPUά������һ�����У����ζ��У���ֻ����ִ�����ϱߵ������Ż�ִ�е����Χ�� + ִ�е����Χ��ʱ������������õ�Χ��ֵ���µ�Χ�������У�ʹ��Χ���������֪������7�������Ƿ�ִ���� \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp new file mode 100644 index 0000000..b91ce28 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DescriptorHeap.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" + +using namespace Graphics; + +// +// DescriptorAllocator implementation +// +std::mutex DescriptorAllocator::sm_AllocationMutex; +std::vector> DescriptorAllocator::sm_DescriptorHeapPool; + +void DescriptorAllocator::DestroyAll(void) +{ + sm_DescriptorHeapPool.clear(); +} + +ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPTOR_HEAP_TYPE Type) +{ + std::lock_guard LockGuard(sm_AllocationMutex); + + D3D12_DESCRIPTOR_HEAP_DESC Desc; + Desc.Type = Type; + Desc.NumDescriptors = sm_NumDescriptorsPerHeap; + Desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + Desc.NodeMask = 1; + + Microsoft::WRL::ComPtr pHeap; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&Desc, MY_IID_PPV_ARGS(&pHeap))); + sm_DescriptorHeapPool.emplace_back(pHeap); + return pHeap.Get(); +} + +D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count ) +{ + if (m_CurrentHeap == nullptr || m_RemainingFreeHandles < Count) + { + m_CurrentHeap = RequestNewHeap(m_Type); + m_CurrentHandle = m_CurrentHeap->GetCPUDescriptorHandleForHeapStart(); + m_RemainingFreeHandles = sm_NumDescriptorsPerHeap; + + if (m_DescriptorSize == 0) + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_Type); + } + + D3D12_CPU_DESCRIPTOR_HANDLE ret = m_CurrentHandle; + m_CurrentHandle.ptr += Count * m_DescriptorSize; + m_RemainingFreeHandles -= Count; + return ret; +} + +// +// UserDescriptorHeap implementation +// + +void UserDescriptorHeap::Create( const std::wstring& DebugHeapName ) +{ + ASSERT_SUCCEEDED(Graphics::g_Device->CreateDescriptorHeap(&m_HeapDesc, MY_IID_PPV_ARGS(m_Heap.ReleaseAndGetAddressOf()))); +#ifdef RELEASE + (void)DebugHeapName; +#else + m_Heap->SetName(DebugHeapName.c_str()); +#endif + + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(m_HeapDesc.Type); + m_NumFreeDescriptors = m_HeapDesc.NumDescriptors; + m_FirstHandle = DescriptorHandle( m_Heap->GetCPUDescriptorHandleForHeapStart(), m_Heap->GetGPUDescriptorHandleForHeapStart() ); + m_NextFreeHandle = m_FirstHandle; +} + +DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count ) +{ + ASSERT(HasAvailableSpace(Count), "Descriptor Heap out of space. Increase heap size."); + DescriptorHandle ret = m_NextFreeHandle; + m_NextFreeHandle += Count * m_DescriptorSize; + return ret; +} + +bool UserDescriptorHeap::ValidateHandle( const DescriptorHandle& DHandle ) const +{ + if (DHandle.GetCpuHandle().ptr < m_FirstHandle.GetCpuHandle().ptr || + DHandle.GetCpuHandle().ptr >= m_FirstHandle.GetCpuHandle().ptr + m_HeapDesc.NumDescriptors * m_DescriptorSize) + return false; + + if (DHandle.GetGpuHandle().ptr - m_FirstHandle.GetGpuHandle().ptr != + DHandle.GetCpuHandle().ptr - m_FirstHandle.GetCpuHandle().ptr) + return false; + + return true; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h new file mode 100644 index 0000000..a9760a3 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DescriptorHeap.h @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + �������ѹ����� +*/ + +#pragma once + +#include +#include +#include +#include + + +// This is an unbounded resource descriptor allocator. It is intended to provide space for CPU-visible resource descriptors +// as resources are created. For those that need to be made shader-visible, they will need to be copied to a UserDescriptorHeap +// or a DynamicDescriptorHeap. +class DescriptorAllocator +{ +public: + DescriptorAllocator(D3D12_DESCRIPTOR_HEAP_TYPE Type) : m_Type(Type), m_CurrentHeap(nullptr) {} + + // ����Count�������������ص�һ���ľ�� + D3D12_CPU_DESCRIPTOR_HANDLE Allocate( uint32_t Count ); + + // ���������������� + static void DestroyAll(void); + +protected: + + static const uint32_t sm_NumDescriptorsPerHeap = 256; + static std::mutex sm_AllocationMutex; + static std::vector> sm_DescriptorHeapPool; + static ID3D12DescriptorHeap* RequestNewHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type ); + + // ������������ + D3D12_DESCRIPTOR_HEAP_TYPE m_Type; + // ��ǰ����������ָ�� + ID3D12DescriptorHeap* m_CurrentHeap; + // ��ǰ����������� + D3D12_CPU_DESCRIPTOR_HANDLE m_CurrentHandle; + // �������������ṹ���С + uint32_t m_DescriptorSize; + // �ù�����ʣ��ɷ�������������� + uint32_t m_RemainingFreeHandles; +}; + + +class DescriptorHandle +{ +public: + DescriptorHandle() + { + m_CpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle ) + : m_CpuHandle(CpuHandle) + { + m_GpuHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + DescriptorHandle( D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle, D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle ) + : m_CpuHandle(CpuHandle), m_GpuHandle(GpuHandle) + { + } + + DescriptorHandle operator+ ( INT OffsetScaledByDescriptorSize ) const + { + DescriptorHandle ret = *this; + ret += OffsetScaledByDescriptorSize; + return ret; + } + + void operator += ( INT OffsetScaledByDescriptorSize ) + { + if (m_CpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_CpuHandle.ptr += OffsetScaledByDescriptorSize; + if (m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_GpuHandle.ptr += OffsetScaledByDescriptorSize; + } + + D3D12_CPU_DESCRIPTOR_HANDLE GetCpuHandle() const { return m_CpuHandle; } + + D3D12_GPU_DESCRIPTOR_HANDLE GetGpuHandle() const { return m_GpuHandle; } + + bool IsNull() const { return m_CpuHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + bool IsShaderVisible() const { return m_GpuHandle.ptr != D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE m_GpuHandle; +}; + + +class UserDescriptorHeap +{ +public: + + UserDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t MaxCount ) + { + m_HeapDesc.Type = Type; + m_HeapDesc.NumDescriptors = MaxCount; + m_HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + m_HeapDesc.NodeMask = 1; + } + + void Create( const std::wstring& DebugHeapName ); + + bool HasAvailableSpace( uint32_t Count ) const { return Count <= m_NumFreeDescriptors; } + DescriptorHandle Alloc( uint32_t Count = 1 ); + + DescriptorHandle GetHandleAtOffset( uint32_t Offset ) const { return m_FirstHandle + Offset * m_DescriptorSize; } + + bool ValidateHandle( const DescriptorHandle& DHandle ) const; + + ID3D12DescriptorHeap* GetHeapPointer() const { return m_Heap.Get(); } + +private: + + Microsoft::WRL::ComPtr m_Heap; + D3D12_DESCRIPTOR_HEAP_DESC m_HeapDesc; + uint32_t m_DescriptorSize; + uint32_t m_NumFreeDescriptors; + DescriptorHandle m_FirstHandle; + DescriptorHandle m_NextFreeHandle; +}; \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp new file mode 100644 index 0000000..dac1373 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.cpp @@ -0,0 +1,346 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DynamicDescriptorHeap.h" +#include "CommandContext.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include "RootSignature.h" + +using namespace Graphics; + +// +// DynamicDescriptorHeap Implementation +// + +std::mutex DynamicDescriptorHeap::sm_Mutex; +std::vector> DynamicDescriptorHeap::sm_DescriptorHeapPool[2]; +std::queue> DynamicDescriptorHeap::sm_RetiredDescriptorHeaps[2]; +std::queue DynamicDescriptorHeap::sm_AvailableDescriptorHeaps[2]; + +ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType) +{ + std::lock_guard LockGuard(sm_Mutex); + + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + + while (!sm_RetiredDescriptorHeaps[idx].empty() && g_CommandManager.IsFenceComplete(sm_RetiredDescriptorHeaps[idx].front().first)) + { + sm_AvailableDescriptorHeaps[idx].push(sm_RetiredDescriptorHeaps[idx].front().second); + sm_RetiredDescriptorHeaps[idx].pop(); + } + + if (!sm_AvailableDescriptorHeaps[idx].empty()) + { + ID3D12DescriptorHeap* HeapPtr = sm_AvailableDescriptorHeaps[idx].front(); + sm_AvailableDescriptorHeaps[idx].pop(); + return HeapPtr; + } + else + { + D3D12_DESCRIPTOR_HEAP_DESC HeapDesc = {}; + HeapDesc.Type = HeapType; + HeapDesc.NumDescriptors = kNumDescriptorsPerHeap; + HeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + HeapDesc.NodeMask = 1; + Microsoft::WRL::ComPtr HeapPtr; + ASSERT_SUCCEEDED(g_Device->CreateDescriptorHeap(&HeapDesc, MY_IID_PPV_ARGS(&HeapPtr))); + sm_DescriptorHeapPool[idx].emplace_back(HeapPtr); + return HeapPtr.Get(); + } +} + +void DynamicDescriptorHeap::DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValue, const std::vector& UsedHeaps ) +{ + uint32_t idx = HeapType == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? 1 : 0; + std::lock_guard LockGuard(sm_Mutex); + for (auto iter = UsedHeaps.begin(); iter != UsedHeaps.end(); ++iter) + sm_RetiredDescriptorHeaps[idx].push(std::make_pair(FenceValue, *iter)); +} + +void DynamicDescriptorHeap::RetireCurrentHeap( void ) +{ + // Don't retire unused heaps. + if (m_CurrentOffset == 0) + { + ASSERT(m_CurrentHeapPtr == nullptr); + return; + } + + ASSERT(m_CurrentHeapPtr != nullptr); + m_RetiredHeaps.push_back(m_CurrentHeapPtr); + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; +} + +void DynamicDescriptorHeap::RetireUsedHeaps( uint64_t fenceValue ) +{ + DiscardDescriptorHeaps(m_DescriptorType, fenceValue, m_RetiredHeaps); + m_RetiredHeaps.clear(); +} + +DynamicDescriptorHeap::DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType) + : m_OwningContext(OwningContext), m_DescriptorType(HeapType) +{ + m_CurrentHeapPtr = nullptr; + m_CurrentOffset = 0; + m_DescriptorSize = Graphics::g_Device->GetDescriptorHandleIncrementSize(HeapType); +} + +DynamicDescriptorHeap::~DynamicDescriptorHeap() +{ +} + +void DynamicDescriptorHeap::CleanupUsedHeaps( uint64_t fenceValue ) +{ + RetireCurrentHeap(); + RetireUsedHeaps(fenceValue); + m_GraphicsHandleCache.ClearCache(); + m_ComputeHandleCache.ClearCache(); +} + +inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer() +{ + if (m_CurrentHeapPtr == nullptr) + { + ASSERT(m_CurrentOffset == 0); + m_CurrentHeapPtr = RequestDescriptorHeap(m_DescriptorType); + m_FirstDescriptor = DescriptorHandle( + m_CurrentHeapPtr->GetCPUDescriptorHandleForHeapStart(), + m_CurrentHeapPtr->GetGPUDescriptorHandleForHeapStart()); + } + + return m_CurrentHeapPtr; +} + +uint32_t DynamicDescriptorHeap::DescriptorHandleCache::ComputeStagedSize() +{ + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t NeededSpace = 0; + uint32_t RootIndex; + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + } + return NeededSpace; +} + +void DynamicDescriptorHeap::DescriptorHandleCache::CopyAndBindStaleTables( + D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, + DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t StaleParamCount = 0; + uint32_t TableSize[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t RootIndices[DescriptorHandleCache::kMaxNumDescriptorTables]; + uint32_t NeededSpace = 0; + uint32_t RootIndex; + + // Sum the maximum assigned offsets of stale descriptor tables to determine total needed space. + uint32_t StaleParams = m_StaleRootParamsBitMap; + while (_BitScanForward((unsigned long*)&RootIndex, StaleParams)) + { + RootIndices[StaleParamCount] = RootIndex; + StaleParams ^= (1 << RootIndex); + + uint32_t MaxSetHandle; + ASSERT(TRUE == _BitScanReverse((unsigned long*)&MaxSetHandle, m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap), + "Root entry marked as stale but has no stale descriptors"); + + NeededSpace += MaxSetHandle + 1; + TableSize[StaleParamCount] = MaxSetHandle + 1; + + ++StaleParamCount; + } + + ASSERT(StaleParamCount <= DescriptorHandleCache::kMaxNumDescriptorTables, + "We're only equipped to handle so many descriptor tables"); + + m_StaleRootParamsBitMap = 0; + + static const uint32_t kMaxDescriptorsPerCopy = 16; + UINT NumDestDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pDestDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pDestDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + UINT NumSrcDescriptorRanges = 0; + D3D12_CPU_DESCRIPTOR_HANDLE pSrcDescriptorRangeStarts[kMaxDescriptorsPerCopy]; + UINT pSrcDescriptorRangeSizes[kMaxDescriptorsPerCopy]; + + for (uint32_t i = 0; i < StaleParamCount; ++i) + { + RootIndex = RootIndices[i]; + (CmdList->*SetFunc)(RootIndex, DestHandleStart.GetGpuHandle()); + + DescriptorTableCache& RootDescTable = m_RootDescriptorTable[RootIndex]; + + D3D12_CPU_DESCRIPTOR_HANDLE* SrcHandles = RootDescTable.TableStart; + uint64_t SetHandles = (uint64_t)RootDescTable.AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE CurDest = DestHandleStart.GetCpuHandle(); + DestHandleStart += TableSize[i] * DescriptorSize; + + unsigned long SkipCount; + while (_BitScanForward64(&SkipCount, SetHandles)) + { + // Skip over unset descriptor handles + SetHandles >>= SkipCount; + SrcHandles += SkipCount; + CurDest.ptr += SkipCount * DescriptorSize; + + unsigned long DescriptorCount; + _BitScanForward64(&DescriptorCount, ~SetHandles); + SetHandles >>= DescriptorCount; + + // If we run out of temp room, copy what we've got so far + if (NumSrcDescriptorRanges + DescriptorCount > kMaxDescriptorsPerCopy) + { + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); + + NumSrcDescriptorRanges = 0; + NumDestDescriptorRanges = 0; + } + + // Setup destination range + pDestDescriptorRangeStarts[NumDestDescriptorRanges] = CurDest; + pDestDescriptorRangeSizes[NumDestDescriptorRanges] = DescriptorCount; + ++NumDestDescriptorRanges; + + // Setup source ranges (one descriptor each because we don't assume they are contiguous) + for (uint32_t j = 0; j < DescriptorCount; ++j) + { + pSrcDescriptorRangeStarts[NumSrcDescriptorRanges] = SrcHandles[j]; + pSrcDescriptorRangeSizes[NumSrcDescriptorRanges] = 1; + ++NumSrcDescriptorRanges; + } + + // Move the destination pointer forward by the number of descriptors we will copy + SrcHandles += DescriptorCount; + CurDest.ptr += DescriptorCount * DescriptorSize; + } + } + + g_Device->CopyDescriptors( + NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, + NumSrcDescriptorRanges, pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, + Type); +} + +void DynamicDescriptorHeap::CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)) +{ + uint32_t NeededSize = HandleCache.ComputeStagedSize(); + if (!HasSpace(NeededSize)) + { + RetireCurrentHeap(); + UnbindAllValid(); + NeededSize = HandleCache.ComputeStagedSize(); + } + + // This can trigger the creation of a new heap + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + HandleCache.CopyAndBindStaleTables(m_DescriptorType, m_DescriptorSize, Allocate(NeededSize), CmdList, SetFunc); +} + +void DynamicDescriptorHeap::UnbindAllValid( void ) +{ + m_GraphicsHandleCache.UnbindAllValid(); + m_ComputeHandleCache.UnbindAllValid(); +} + +D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handle ) +{ + if (!HasSpace(1)) + { + RetireCurrentHeap(); + UnbindAllValid(); + } + + m_OwningContext.SetDescriptorHeap(m_DescriptorType, GetHeapPointer()); + + DescriptorHandle DestHandle = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += 1; + + g_Device->CopyDescriptorsSimple(1, DestHandle.GetCpuHandle(), Handle, m_DescriptorType); + + return DestHandle.GetGpuHandle(); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::UnbindAllValid() +{ + m_StaleRootParamsBitMap = 0; + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + if (m_RootDescriptorTable[RootIndex].AssignedHandlesBitMap != 0) + m_StaleRootParamsBitMap |= (1 << RootIndex); + } +} + +void DynamicDescriptorHeap::DescriptorHandleCache::StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) +{ + ASSERT(((1 << RootIndex) & m_RootDescriptorTablesBitMap) != 0, "Root parameter is not a CBV_SRV_UAV descriptor table"); + ASSERT(Offset + NumHandles <= m_RootDescriptorTable[RootIndex].TableSize); + + DescriptorTableCache& TableCache = m_RootDescriptorTable[RootIndex]; + D3D12_CPU_DESCRIPTOR_HANDLE* CopyDest = TableCache.TableStart + Offset; + for (UINT i = 0; i < NumHandles; ++i) + CopyDest[i] = Handles[i]; + TableCache.AssignedHandlesBitMap |= ((1 << NumHandles) - 1) << Offset; + m_StaleRootParamsBitMap |= (1 << RootIndex); +} + +void DynamicDescriptorHeap::DescriptorHandleCache::ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ) +{ + UINT CurrentOffset = 0; + + ASSERT(RootSig.m_NumParameters <= 16, "Maybe we need to support something greater"); + + m_StaleRootParamsBitMap = 0; + m_RootDescriptorTablesBitMap = (Type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER ? + RootSig.m_SamplerTableBitMap : RootSig.m_DescriptorTableBitMap); + + unsigned long TableParams = m_RootDescriptorTablesBitMap; + unsigned long RootIndex; + while (_BitScanForward(&RootIndex, TableParams)) + { + TableParams ^= (1 << RootIndex); + + UINT TableSize = RootSig.m_DescriptorTableSize[RootIndex]; + ASSERT(TableSize > 0); + + DescriptorTableCache& RootDescriptorTable = m_RootDescriptorTable[RootIndex]; + RootDescriptorTable.AssignedHandlesBitMap = 0; + RootDescriptorTable.TableStart = m_HandleCache + CurrentOffset; + RootDescriptorTable.TableSize = TableSize; + + CurrentOffset += TableSize; + } + + m_MaxCachedDescriptors = CurrentOffset; + + ASSERT(m_MaxCachedDescriptors <= kMaxNumDescriptors, "Exceeded user-supplied maximum cache size"); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h new file mode 100644 index 0000000..9a36aa6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/DynamicDescriptorHeap.h @@ -0,0 +1,169 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include +#include + +namespace Graphics +{ + extern ID3D12Device* g_Device; +} + +// This class is a linear allocation system for dynamically generated descriptor tables. It internally caches +// CPU descriptor handles so that when not enough space is available in the current heap, necessary descriptors +// can be re-copied to the new heap. +class DynamicDescriptorHeap +{ +public: + DynamicDescriptorHeap(CommandContext& OwningContext, D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + ~DynamicDescriptorHeap(); + + static void DestroyAll(void) + { + sm_DescriptorHeapPool[0].clear(); + sm_DescriptorHeapPool[1].clear(); + } + + void CleanupUsedHeaps( uint64_t fenceValue ); + + // Copy multiple handles into the cache area reserved for the specified root parameter. + void SetGraphicsDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_GraphicsHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + void SetComputeDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ) + { + m_ComputeHandleCache.StageDescriptorHandles(RootIndex, Offset, NumHandles, Handles); + } + + // Bypass the cache and upload directly to the shader-visible heap + D3D12_GPU_DESCRIPTOR_HANDLE UploadDirect( D3D12_CPU_DESCRIPTOR_HANDLE Handles ); + + // Deduce cache layout needed to support the descriptor tables needed by the root signature. + void ParseGraphicsRootSignature( const RootSignature& RootSig ) + { + m_GraphicsHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + void ParseComputeRootSignature( const RootSignature& RootSig ) + { + m_ComputeHandleCache.ParseRootSignature(m_DescriptorType, RootSig); + } + + // Upload any new descriptors in the cache to the shader-visible heap. + inline void CommitGraphicsRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_GraphicsHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_GraphicsHandleCache, CmdList, &ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable); + } + + inline void CommitComputeRootDescriptorTables( ID3D12GraphicsCommandList* CmdList ) + { + if (m_ComputeHandleCache.m_StaleRootParamsBitMap != 0) + CopyAndBindStagedTables(m_ComputeHandleCache, CmdList, &ID3D12GraphicsCommandList::SetComputeRootDescriptorTable); + } + +private: + + // Static members + static const uint32_t kNumDescriptorsPerHeap = 1024; + static std::mutex sm_Mutex; + static std::vector> sm_DescriptorHeapPool[2]; + static std::queue> sm_RetiredDescriptorHeaps[2]; + static std::queue sm_AvailableDescriptorHeaps[2]; + + // Static methods + static ID3D12DescriptorHeap* RequestDescriptorHeap(D3D12_DESCRIPTOR_HEAP_TYPE HeapType); + static void DiscardDescriptorHeaps( D3D12_DESCRIPTOR_HEAP_TYPE HeapType, uint64_t FenceValueForReset, const std::vector& UsedHeaps ); + + // Non-static members + CommandContext& m_OwningContext; + ID3D12DescriptorHeap* m_CurrentHeapPtr; + const D3D12_DESCRIPTOR_HEAP_TYPE m_DescriptorType; + uint32_t m_DescriptorSize; + uint32_t m_CurrentOffset; + DescriptorHandle m_FirstDescriptor; + std::vector m_RetiredHeaps; + + // Describes a descriptor table entry: a region of the handle cache and which handles have been set + struct DescriptorTableCache + { + DescriptorTableCache() : AssignedHandlesBitMap(0) {} + uint32_t AssignedHandlesBitMap; + D3D12_CPU_DESCRIPTOR_HANDLE* TableStart; + uint32_t TableSize; + }; + + struct DescriptorHandleCache + { + DescriptorHandleCache() + { + ClearCache(); + } + + void ClearCache() + { + m_RootDescriptorTablesBitMap = 0; + m_MaxCachedDescriptors = 0; + } + + uint32_t m_RootDescriptorTablesBitMap; + uint32_t m_StaleRootParamsBitMap; + uint32_t m_MaxCachedDescriptors; + + static const uint32_t kMaxNumDescriptors = 256; + static const uint32_t kMaxNumDescriptorTables = 16; + + uint32_t ComputeStagedSize(); + void CopyAndBindStaleTables( D3D12_DESCRIPTOR_HEAP_TYPE Type, uint32_t DescriptorSize, DescriptorHandle DestHandleStart, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE)); + + DescriptorTableCache m_RootDescriptorTable[kMaxNumDescriptorTables]; + D3D12_CPU_DESCRIPTOR_HANDLE m_HandleCache[kMaxNumDescriptors]; + + void UnbindAllValid(); + void StageDescriptorHandles( UINT RootIndex, UINT Offset, UINT NumHandles, const D3D12_CPU_DESCRIPTOR_HANDLE Handles[] ); + void ParseRootSignature( D3D12_DESCRIPTOR_HEAP_TYPE Type, const RootSignature& RootSig ); + }; + + DescriptorHandleCache m_GraphicsHandleCache; + DescriptorHandleCache m_ComputeHandleCache; + + bool HasSpace( uint32_t Count ) + { + return (m_CurrentHeapPtr != nullptr && m_CurrentOffset + Count <= kNumDescriptorsPerHeap); + } + + void RetireCurrentHeap(void); + void RetireUsedHeaps( uint64_t fenceValue ); + ID3D12DescriptorHeap* GetHeapPointer(); + + DescriptorHandle Allocate( UINT Count ) + { + DescriptorHandle ret = m_FirstDescriptor + m_CurrentOffset * m_DescriptorSize; + m_CurrentOffset += Count; + return ret; + } + + void CopyAndBindStagedTables( DescriptorHandleCache& HandleCache, ID3D12GraphicsCommandList* CmdList, + void (STDMETHODCALLTYPE ID3D12GraphicsCommandList::*SetFunc)(UINT, D3D12_GPU_DESCRIPTOR_HANDLE) ); + + // Mark all descriptors in the cache as stale and in need of re-uploading. + void UnbindAllValid( void ); + +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt new file mode 100644 index 0000000..4463984 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/DescriptorHeap/readme_descriptorHeap.txt @@ -0,0 +1,17 @@ + +�ӿ�˵���� +--�������ѣ�ID3D12DescriptorHeap +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--DescriptorHeap +--�������ѹ����أ���Ҫ��ʼ��Ϊһ���ض����ͣ����Է������Ӧ���������� + +--DynamicDescriptorHeap +--��̬�������������� + +��GPU������Դ(ID3D12Resource)ʱ����Ҫ֪������Դ��ʲô��ʽ +�����Ҫ��������ָ����Ҳ����D3D12_CPU_DESCRIPTOR_HANDLEָ������Դ�ĸ�ʽ��Ϣ + +�������Ѿ������ڹ�������������ģ�һ�����͵��������ѿ������ɶ�Ӧ�������� +���������ѹ����أ����������µ��������ѣ����ļ�ÿ������Ĭ��֧��256���ѣ������˾��ٴ�����256���������� \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.cpp new file mode 100644 index 0000000..35e5eea --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuTimeManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "CommandListManager.h" + +namespace +{ + ID3D12QueryHeap* sm_QueryHeap = nullptr; + ID3D12Resource* sm_ReadBackBuffer = nullptr; + uint64_t* sm_TimeStampBuffer = nullptr; + uint64_t sm_Fence = 0; + uint32_t sm_MaxNumTimers = 0; + uint32_t sm_NumTimers = 1; + uint64_t sm_ValidTimeStart = 0; + uint64_t sm_ValidTimeEnd = 0; + double sm_GpuTickDelta = 0.0; +} + +void GpuTimeManager::Initialize(uint32_t MaxNumTimers) +{ + uint64_t GpuFrequency; + Graphics::g_CommandManager.GetCommandQueue()->GetTimestampFrequency(&GpuFrequency); + sm_GpuTickDelta = 1.0 / static_cast(GpuFrequency); + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC BufferDesc; + BufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + BufferDesc.Alignment = 0; + BufferDesc.Width = sizeof(uint64_t) * MaxNumTimers * 2; + BufferDesc.Height = 1; + BufferDesc.DepthOrArraySize = 1; + BufferDesc.MipLevels = 1; + BufferDesc.Format = DXGI_FORMAT_UNKNOWN; + BufferDesc.SampleDesc.Count = 1; + BufferDesc.SampleDesc.Quality = 0; + BufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + BufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED(Graphics::g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &BufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&sm_ReadBackBuffer) )); + sm_ReadBackBuffer->SetName(L"GpuTimeStamp Buffer"); + + D3D12_QUERY_HEAP_DESC QueryHeapDesc; + QueryHeapDesc.Count = MaxNumTimers * 2; + QueryHeapDesc.NodeMask = 1; + QueryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + ASSERT_SUCCEEDED(Graphics::g_Device->CreateQueryHeap(&QueryHeapDesc, MY_IID_PPV_ARGS(&sm_QueryHeap))); + sm_QueryHeap->SetName(L"GpuTimeStamp QueryHeap"); + + sm_MaxNumTimers = (uint32_t)MaxNumTimers; +} + +void GpuTimeManager::Shutdown() +{ + if (sm_ReadBackBuffer != nullptr) + sm_ReadBackBuffer->Release(); + + if (sm_QueryHeap != nullptr) + sm_QueryHeap->Release(); +} + +uint32_t GpuTimeManager::NewTimer(void) +{ + return sm_NumTimers++; +} + +void GpuTimeManager::StartTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2); +} + +void GpuTimeManager::StopTimer(CommandContext& Context, uint32_t TimerIdx) +{ + Context.InsertTimeStamp(sm_QueryHeap, TimerIdx * 2 + 1); +} + +void GpuTimeManager::BeginReadBack(void) +{ + Graphics::g_CommandManager.WaitForFence(sm_Fence); + + // ���������������������shader�����˵��µ� + D3D12_RANGE Range; + Range.Begin = 0; + Range.End = (sm_NumTimers * 2) * sizeof(uint64_t); + ASSERT_SUCCEEDED(sm_ReadBackBuffer->Map(0, &Range, reinterpret_cast(&sm_TimeStampBuffer))); + + sm_ValidTimeStart = sm_TimeStampBuffer[0]; + sm_ValidTimeEnd = sm_TimeStampBuffer[1]; + + // On the first frame, with random values in the timestamp query heap, we can avoid a misstart. + if (sm_ValidTimeEnd < sm_ValidTimeStart) + { + sm_ValidTimeStart = 0ull; + sm_ValidTimeEnd = 0ull; + } +} + +void GpuTimeManager::EndReadBack(void) +{ + // Unmap with an empty range to indicate nothing was written by the CPU + D3D12_RANGE EmptyRange = {}; + sm_ReadBackBuffer->Unmap(0, &EmptyRange); + sm_TimeStampBuffer = nullptr; + + CommandContext& Context = CommandContext::Begin(); + Context.InsertTimeStamp(sm_QueryHeap, 1); + Context.ResolveTimeStamps(sm_ReadBackBuffer, sm_QueryHeap, sm_NumTimers * 2); + Context.InsertTimeStamp(sm_QueryHeap, 0); + sm_Fence = Context.Finish(); +} + +float GpuTimeManager::GetTime(uint32_t TimerIdx) +{ + ASSERT(sm_TimeStampBuffer != nullptr, "Time stamp readback buffer is not mapped"); + ASSERT(TimerIdx < sm_NumTimers, "Invalid GPU timer index"); + + uint64_t TimeStamp1 = sm_TimeStampBuffer[TimerIdx * 2]; + uint64_t TimeStamp2 = sm_TimeStampBuffer[TimerIdx * 2 + 1]; + + if (TimeStamp1 < sm_ValidTimeStart || TimeStamp2 > sm_ValidTimeEnd || TimeStamp2 <= TimeStamp1 ) + return 0.0f; + + return static_cast(sm_GpuTickDelta * (TimeStamp2 - TimeStamp1)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.h b/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.h new file mode 100644 index 0000000..4260277 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GpuTimeManager.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GameCore.h" + +class CommandContext; + +namespace GpuTimeManager +{ + void Initialize( uint32_t MaxNumTimers = 4096 ); + void Shutdown(); + + // Reserve a unique timer index + uint32_t NewTimer(void); + + // Write start and stop time stamps on the GPU timeline + void StartTimer(CommandContext& Context, uint32_t TimerIdx); + void StopTimer(CommandContext& Context, uint32_t TimerIdx); + + // Bookend all calls to GetTime() with Begin/End which correspond to Map/Unmap. This + // needs to happen either at the very start or very end of a frame. + void BeginReadBack(void); + void EndReadBack(void); + + // Returns the time in milliseconds between start and stop queries + float GetTime(uint32_t TimerIdx); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.cpp new file mode 100644 index 0000000..d961220 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.cpp @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCommon.h" +#include "SamplerManager.h" +#include "CommandSignature.h" +//#include "BitonicSort.h" + +namespace Graphics +{ + SamplerDesc SamplerLinearWrapDesc; + SamplerDesc SamplerAnisoWrapDesc; + SamplerDesc SamplerShadowDesc; + SamplerDesc SamplerLinearClampDesc; + SamplerDesc SamplerVolumeWrapDesc; + SamplerDesc SamplerPointClampDesc; + SamplerDesc SamplerPointBorderDesc; + SamplerDesc SamplerLinearBorderDesc; + + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + D3D12_RASTERIZER_DESC RasterizerDefault; // Counter-clockwise + D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + D3D12_RASTERIZER_DESC RasterizerDefaultCw; // Clockwise winding + D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + D3D12_RASTERIZER_DESC RasterizerTwoSided; + D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + D3D12_RASTERIZER_DESC RasterizerShadow; + D3D12_RASTERIZER_DESC RasterizerShadowCW; + D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + D3D12_BLEND_DESC BlendNoColorWrite; + D3D12_BLEND_DESC BlendDisable; + D3D12_BLEND_DESC BlendPreMultiplied; + D3D12_BLEND_DESC BlendTraditional; + D3D12_BLEND_DESC BlendAdditive; + D3D12_BLEND_DESC BlendTraditionalAdditive; + + D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + D3D12_DEPTH_STENCIL_DESC StencilStateTest; + D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + CommandSignature DispatchIndirectCommandSignature(1); + CommandSignature DrawIndirectCommandSignature(1); +} + +// namespace BitonicSort +// { +// void Initialize(void); +// void Shutdown(void); +// } + +void Graphics::InitializeCommonState(void) +{ + SamplerLinearWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearWrap = SamplerLinearWrapDesc.CreateDescriptor(); + + SamplerAnisoWrapDesc.MaxAnisotropy = 4; + SamplerAnisoWrap = SamplerAnisoWrapDesc.CreateDescriptor(); + + SamplerShadowDesc.Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT; + SamplerShadowDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + SamplerShadowDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerShadow = SamplerShadowDesc.CreateDescriptor(); + + SamplerLinearClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerLinearClamp = SamplerLinearClampDesc.CreateDescriptor(); + + SamplerVolumeWrapDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerVolumeWrap = SamplerVolumeWrapDesc.CreateDescriptor(); + + SamplerPointClampDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointClampDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_CLAMP); + SamplerPointClamp = SamplerPointClampDesc.CreateDescriptor(); + + SamplerLinearBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + SamplerLinearBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerLinearBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerLinearBorder = SamplerLinearBorderDesc.CreateDescriptor(); + + SamplerPointBorderDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + SamplerPointBorderDesc.SetTextureAddressMode(D3D12_TEXTURE_ADDRESS_MODE_BORDER); + SamplerPointBorderDesc.SetBorderColor(Color(0.0f, 0.0f, 0.0f, 0.0f)); + SamplerPointBorder = SamplerPointBorderDesc.CreateDescriptor(); + + // Default rasterizer states + RasterizerDefault.FillMode = D3D12_FILL_MODE_SOLID; + RasterizerDefault.CullMode = D3D12_CULL_MODE_BACK; + RasterizerDefault.FrontCounterClockwise = TRUE; + RasterizerDefault.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + RasterizerDefault.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + RasterizerDefault.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + RasterizerDefault.DepthClipEnable = TRUE; + RasterizerDefault.MultisampleEnable = FALSE; + RasterizerDefault.AntialiasedLineEnable = FALSE; + RasterizerDefault.ForcedSampleCount = 0; + RasterizerDefault.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + + RasterizerDefaultMsaa = RasterizerDefault; + RasterizerDefaultMsaa.MultisampleEnable = TRUE; + + RasterizerDefaultCw = RasterizerDefault; + RasterizerDefaultCw.FrontCounterClockwise = FALSE; + + RasterizerDefaultCwMsaa = RasterizerDefaultCw; + RasterizerDefaultCwMsaa.MultisampleEnable = TRUE; + + RasterizerTwoSided = RasterizerDefault; + RasterizerTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + RasterizerTwoSidedMsaa = RasterizerTwoSided; + RasterizerTwoSidedMsaa.MultisampleEnable = TRUE; + + // Shadows need their own rasterizer state so we can reverse the winding of faces + RasterizerShadow = RasterizerDefault; + //RasterizerShadow.CullMode = D3D12_CULL_FRONT; // Hacked here rather than fixing the content + RasterizerShadow.SlopeScaledDepthBias = 1.5f; + RasterizerShadow.DepthBias = 100; + + RasterizerShadowTwoSided = RasterizerShadow; + RasterizerShadowTwoSided.CullMode = D3D12_CULL_MODE_NONE; + + // �޸��������������������ϵ + // [TODO] Ҫ�Ż�������Ľṹ�壬ȥ����������ϵ��صĶ��� + RasterizerShadowCW = RasterizerShadow; + RasterizerShadowCW.FrontCounterClockwise = FALSE; + + DepthStateDisabled.DepthEnable = FALSE; + DepthStateDisabled.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + DepthStateDisabled.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.StencilEnable = FALSE; + DepthStateDisabled.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + DepthStateDisabled.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + DepthStateDisabled.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; + DepthStateDisabled.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP; + DepthStateDisabled.BackFace = DepthStateDisabled.FrontFace; + + DepthStateReadWrite = DepthStateDisabled; + DepthStateReadWrite.DepthEnable = TRUE; + DepthStateReadWrite.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthStateReadWrite.DepthFunc = D3D12_COMPARISON_FUNC_LESS; + + DepthStateReadOnly = DepthStateReadWrite; + DepthStateReadOnly.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO; + + DepthStateTestEqual = DepthStateReadOnly; + DepthStateTestEqual.DepthFunc = D3D12_COMPARISON_FUNC_EQUAL; + + StencilStateTest = DepthStateReadOnly; + StencilStateTest.StencilEnable = TRUE; + StencilStateTest.FrontFace.StencilPassOp = D3D12_STENCIL_OP_REPLACE; + StencilStateTest.BackFace = StencilStateTest.FrontFace; + + StencilStateTestEqual = DepthStateReadWrite; + StencilStateTestEqual.StencilEnable = TRUE; + StencilStateTestEqual.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_EQUAL; + StencilStateTestEqual.BackFace = StencilStateTestEqual.FrontFace; + + D3D12_BLEND_DESC alphaBlend = {}; + alphaBlend.IndependentBlendEnable = FALSE; + alphaBlend.RenderTarget[0].BlendEnable = FALSE; + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_ONE; + alphaBlend.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; + alphaBlend.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; + alphaBlend.RenderTarget[0].RenderTargetWriteMask = 0; + BlendNoColorWrite = alphaBlend; + + alphaBlend.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + BlendDisable = alphaBlend; + + alphaBlend.RenderTarget[0].BlendEnable = TRUE; + BlendTraditional = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_ONE; + BlendPreMultiplied = alphaBlend; + + alphaBlend.RenderTarget[0].DestBlend = D3D12_BLEND_ONE; + BlendAdditive = alphaBlend; + + alphaBlend.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; + BlendTraditionalAdditive = alphaBlend; + + DispatchIndirectCommandSignature[0].Dispatch(); + DispatchIndirectCommandSignature.Finalize(); + + DrawIndirectCommandSignature[0].Draw(); + DrawIndirectCommandSignature.Finalize(); +// +// BitonicSort::Initialize(); +} + +void Graphics::DestroyCommonState(void) +{ + DispatchIndirectCommandSignature.Destroy(); + DrawIndirectCommandSignature.Destroy(); + +// BitonicSort::Shutdown(); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.h b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.h new file mode 100644 index 0000000..904cc39 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCommon.h @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class SamplerDesc; +class CommandSignature; + +namespace Graphics +{ + extern SamplerDesc SamplerLinearWrapDesc; + extern SamplerDesc SamplerAnisoWrapDesc; + extern SamplerDesc SamplerShadowDesc; + extern SamplerDesc SamplerLinearClampDesc; + extern SamplerDesc SamplerVolumeWrapDesc; + extern SamplerDesc SamplerPointClampDesc; + extern SamplerDesc SamplerPointBorderDesc; + extern SamplerDesc SamplerLinearBorderDesc; + + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerAnisoWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerShadow; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerVolumeWrap; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointClamp; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerPointBorder; + extern D3D12_CPU_DESCRIPTOR_HANDLE SamplerLinearBorder; + + extern D3D12_RASTERIZER_DESC RasterizerDefault; + extern D3D12_RASTERIZER_DESC RasterizerDefaultMsaa; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCw; + extern D3D12_RASTERIZER_DESC RasterizerDefaultCwMsaa; + extern D3D12_RASTERIZER_DESC RasterizerTwoSided; + extern D3D12_RASTERIZER_DESC RasterizerTwoSidedMsaa; + extern D3D12_RASTERIZER_DESC RasterizerShadow; + extern D3D12_RASTERIZER_DESC RasterizerShadowCW; + extern D3D12_RASTERIZER_DESC RasterizerShadowTwoSided; + + extern D3D12_BLEND_DESC BlendNoColorWrite; // XXX + extern D3D12_BLEND_DESC BlendDisable; // 1, 0 + extern D3D12_BLEND_DESC BlendPreMultiplied; // 1, 1-SrcA + extern D3D12_BLEND_DESC BlendTraditional; // SrcA, 1-SrcA + extern D3D12_BLEND_DESC BlendAdditive; // 1, 1 + extern D3D12_BLEND_DESC BlendTraditionalAdditive;// SrcA, 1 + + extern D3D12_DEPTH_STENCIL_DESC DepthStateDisabled; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadWrite; + extern D3D12_DEPTH_STENCIL_DESC DepthStateReadOnly; + extern D3D12_DEPTH_STENCIL_DESC DepthStateTestEqual; + // ģ����ԡ���ֹ���д�룬ֻ��ͨ������Ȳ���+ģ����ԵIJ�д��ֵ + extern D3D12_DEPTH_STENCIL_DESC StencilStateTest; + // ģ����ԡ�ֻ��ģ��ֵ��ͬ������д�� + extern D3D12_DEPTH_STENCIL_DESC StencilStateTestEqual; + + extern CommandSignature DispatchIndirectCommandSignature; + extern CommandSignature DrawIndirectCommandSignature; + + void InitializeCommonState(void); + void DestroyCommonState(void); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.cpp new file mode 100644 index 0000000..c439374 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.cpp @@ -0,0 +1,784 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "GameCore.h" +#include "BufferManager.h" +#include "GpuTimeManager.h" +// #include "PostEffects.h" +// #include "SSAO.h" +#include "TextRenderer.h" +#include "ColorBuffer.h" +#include "SystemTime.h" +#include "SamplerManager.h" +#include "DescriptorHeap.h" +#include "CommandContext.h" +#include "CommandListManager.h" +#include "RootSignature.h" +#include "CommandSignature.h" +// #include "ParticleEffectManager.h" +#include "GraphRenderer.h" +// #include "TemporalEffects.h" + +// This macro determines whether to detect if there is an HDR display and enable HDR10 output. +// Currently, with HDR display enabled, the pixel magnfication functionality is broken. +#define CONDITIONALLY_ENABLE_HDR_OUTPUT 1 + +// Uncomment this to enable experimental support for the new shader compiler, DXC.exe +//#define DXIL + +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #include +#endif + +#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + #include +#else + #include // For WARP +#endif +#include // To read the registry + +#include "CompiledShaders/ScreenQuadVS.h" +#include "CompiledShaders/BufferCopyPS.h" +#include "CompiledShaders/PresentSDRPS.h" +#include "CompiledShaders/PresentHDRPS.h" +#include "CompiledShaders/MagnifyPixelsPS.h" +#include "CompiledShaders/BilinearUpsamplePS.h" +#include "CompiledShaders/BicubicHorizontalUpsamplePS.h" +#include "CompiledShaders/BicubicVerticalUpsamplePS.h" +#include "CompiledShaders/SharpeningUpsamplePS.h" +#include "CompiledShaders/GenerateMipsLinearCS.h" +#include "CompiledShaders/GenerateMipsLinearOddCS.h" +#include "CompiledShaders/GenerateMipsLinearOddXCS.h" +#include "CompiledShaders/GenerateMipsLinearOddYCS.h" +#include "CompiledShaders/GenerateMipsGammaCS.h" +#include "CompiledShaders/GenerateMipsGammaOddCS.h" +#include "CompiledShaders/GenerateMipsGammaOddXCS.h" +#include "CompiledShaders/GenerateMipsGammaOddYCS.h" + +#define SWAP_CHAIN_BUFFER_COUNT 3 + +DXGI_FORMAT SwapChainFormat = DXGI_FORMAT_R10G10B10A2_UNORM; + +#ifndef SAFE_RELEASE +#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; } +#endif + +using namespace Math; + +namespace GameCore +{ +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + extern HWND g_hWnd; +#else + extern Platform::Agile g_window; +#endif +} + +namespace +{ + // ֡����� + float s_FrameTime = 0.0f; + uint64_t s_FrameIndex = 0; + int64_t s_FrameStartTick = 0; + + BoolVar s_LimitTo30Hz("Timing/Limit To 30Hz", false); + BoolVar s_DropRandomFrames("Timing/Drop Random Frames", false); +} + +namespace Graphics +{ + void PreparePresentLDR(); + void PreparePresentHDR(); + void CompositeOverlays( GraphicsContext& Context ); + +// #ifndef RELEASE +// const GUID WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, { 0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00 } }; +// #endif +// + const uint32_t kMaxNativeWidth = 3840; + const uint32_t kMaxNativeHeight = 2160; + const uint32_t kNumPredefinedResolutions = 6; + + const char* ResolutionLabels[] = {"1280x720", "1600x900", "1920x1080", "2560x1440", "3200x1800", "3840x2160" }; + EnumVar TargetResolution("Graphics/Display/Native Resolution", k1080p, kNumPredefinedResolutions, ResolutionLabels); + // ��ֱͬ�� + BoolVar s_EnableVSync("Timing/VSync", false); + + bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT = false; + bool g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = false; + bool g_bEnableHDROutput = false; + NumVar g_HDRPaperWhite("Graphics/Display/Paper White (nits)", 200.0f, 100.0f, 500.0f, 50.0f); + NumVar g_MaxDisplayLuminance("Graphics/Display/Peak Brightness (nits)", 1000.0f, 500.0f, 10000.0f, 100.0f); + const char* HDRModeLabels[] = { "HDR", "SDR", "Side-by-Side" }; + EnumVar HDRDebugMode("Graphics/Display/HDR Debug Mode", 0, 3, HDRModeLabels); + + uint32_t g_NativeWidth = 0; + uint32_t g_NativeHeight = 0; + uint32_t g_DisplayWidth = 1920; + uint32_t g_DisplayHeight = 1080; + ColorBuffer g_PreDisplayBuffer; + + void SetNativeResolution(void) + { + uint32_t NativeWidth, NativeHeight; + + switch (eResolution((int)TargetResolution)) + { + default: + case k720p: + NativeWidth = 1280; + NativeHeight = 720; + break; + case k900p: + NativeWidth = 1600; + NativeHeight = 900; + break; + case k1080p: + NativeWidth = 1920; + NativeHeight = 1080; + break; + case k1440p: + NativeWidth = 2560; + NativeHeight = 1440; + break; + case k1800p: + NativeWidth = 3200; + NativeHeight = 1800; + break; + case k2160p: + NativeWidth = 3840; + NativeHeight = 2160; + break; + } + + if (g_NativeWidth == NativeWidth && g_NativeHeight == NativeHeight) + return; + + DEBUGPRINT("Changing native resolution to %ux%u", NativeWidth, NativeHeight); + + g_NativeWidth = NativeWidth; + g_NativeHeight = NativeHeight; + + g_CommandManager.IdleGPU(); + + InitializeRenderingBuffers(NativeWidth, NativeHeight); + } + + ID3D12Device* g_Device = nullptr; + + CommandListManager g_CommandManager; + ContextManager g_ContextManager; +// +// D3D_FEATURE_LEVEL g_D3DFeatureLevel = D3D_FEATURE_LEVEL_11_0; + + ColorBuffer g_DisplayPlane[SWAP_CHAIN_BUFFER_COUNT]; + UINT g_CurrentBuffer = 0; + + IDXGISwapChain1* s_SwapChain1 = nullptr; + + DescriptorAllocator g_DescriptorAllocator[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES] = + { + D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + D3D12_DESCRIPTOR_HEAP_TYPE_RTV, + D3D12_DESCRIPTOR_HEAP_TYPE_DSV, + }; + + RootSignature s_PresentRS; + GraphicsPSO s_BlendUIPSO; + GraphicsPSO PresentSDRPS; + GraphicsPSO PresentHDRPS; + GraphicsPSO MagnifyPixelsPS; + GraphicsPSO SharpeningUpsamplePS; + GraphicsPSO BicubicHorizontalUpsamplePS; + GraphicsPSO BicubicVerticalUpsamplePS; + GraphicsPSO BilinearUpsamplePS; + + RootSignature g_GenerateMipsRS; + ComputePSO g_GenerateMipsLinearPSO[4]; + ComputePSO g_GenerateMipsGammaPSO[4]; + + enum { kBilinear, kBicubic, kSharpening, kFilterCount }; + const char* FilterLabels[] = { "Bilinear", "Bicubic", "Sharpening" }; + EnumVar UpsampleFilter("Graphics/Display/Upsample Filter", kFilterCount - 1, kFilterCount, FilterLabels); + NumVar BicubicUpsampleWeight("Graphics/Display/Bicubic Filter Weight", -0.75f, -1.0f, -0.25f, 0.25f); + NumVar SharpeningSpread("Graphics/Display/Sharpness Sample Spread", 1.0f, 0.7f, 2.0f, 0.1f); + NumVar SharpeningRotation("Graphics/Display/Sharpness Sample Rotation", 45.0f, 0.0f, 90.0f, 15.0f); + NumVar SharpeningStrength("Graphics/Display/Sharpness Strength", 0.10f, 0.0f, 1.0f, 0.01f); + + enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebugZoom8x, kDebugZoom16x, kDebugZoomCount }; + const char* DebugZoomLabels[] = { "Off", "2x Zoom", "4x Zoom", "8x Zoom", "16x Zoom" }; + EnumVar DebugZoom("Graphics/Display/Magnify Pixels", kDebugZoomOff, kDebugZoomCount, DebugZoomLabels); +} + +void Graphics::Resize(uint32_t width, uint32_t height) +{ + ASSERT(s_SwapChain1 != nullptr); + + // Check for invalid window dimensions + if (width == 0 || height == 0) + return; + + // Check for an unneeded resize + if (width == g_DisplayWidth && height == g_DisplayHeight) + return; + + g_CommandManager.IdleGPU(); + + g_DisplayWidth = width; + g_DisplayHeight = height; + + DEBUGPRINT("Changing display resolution to %ux%u", width, height); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", width, height, 1, SwapChainFormat); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + ASSERT_SUCCEEDED(s_SwapChain1->ResizeBuffers(SWAP_CHAIN_BUFFER_COUNT, width, height, SwapChainFormat, 0)); + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + g_CurrentBuffer = 0; + + g_CommandManager.IdleGPU(); + + ResizeDisplayDependentBuffers(g_NativeWidth, g_NativeHeight); +} + +// Initialize the DirectX resources required to run. +bool Graphics::Initialize(void) +{ + ASSERT(s_SwapChain1 == nullptr, "Graphics has already been initialized"); + + Microsoft::WRL::ComPtr pDevice; + + // ����debug�� +#if _DEBUG + Microsoft::WRL::ComPtr debugInterface; + if (SUCCEEDED(D3D12GetDebugInterface(MY_IID_PPV_ARGS(&debugInterface)))) + debugInterface->EnableDebugLayer(); + else + Utility::Print("WARNING: Unable to enable D3D12 debug validation layer\n"); +#endif + + // Obtain the DXGI factory + Microsoft::WRL::ComPtr dxgiFactory; + ASSERT_SUCCEEDED(CreateDXGIFactory2(0, MY_IID_PPV_ARGS(&dxgiFactory))); + + // Create the D3D graphics device + Microsoft::WRL::ComPtr pAdapter; + + // ��ȡ֧��dx12���Դ������Կ� + SIZE_T MaxSize = 0; + for (uint32_t Idx = 0; DXGI_ERROR_NOT_FOUND != dxgiFactory->EnumAdapters1(Idx, &pAdapter); ++Idx) + { + DXGI_ADAPTER_DESC1 desc; + pAdapter->GetDesc1(&desc); + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + continue; + + if (desc.DedicatedVideoMemory > MaxSize && SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), D3D_FEATURE_LEVEL_12_0, MY_IID_PPV_ARGS(&pDevice)))) + { + pAdapter->GetDesc1(&desc); + Utility::Printf(L"D3D12-capable hardware found: %s (%u MB)\n", desc.Description, desc.DedicatedVideoMemory >> 20); + MaxSize = desc.DedicatedVideoMemory; + } + } + + if (MaxSize > 0) + g_Device = pDevice.Detach(); + + // �Ҳ����ͳ�ʼ��ʧ�� + if (g_Device == nullptr) + { + Utility::Print("Failed to find a hardware adapter. Falling back to WARP.\n"); + + MessageBoxW(GameCore::g_hWnd, L"�Ҳ���֧��dx12���Կ��豸", L"ʧ��", MB_OK); + + return false; + } + + // ����һЩ�����ڴ��� +#if _DEBUG + ID3D12InfoQueue* pInfoQueue = nullptr; + if (SUCCEEDED(g_Device->QueryInterface(MY_IID_PPV_ARGS(&pInfoQueue)))) + { + // Suppress whole categories of messages + //D3D12_MESSAGE_CATEGORY Categories[] = {}; + + // Suppress messages based on their severity level + D3D12_MESSAGE_SEVERITY Severities[] = + { + D3D12_MESSAGE_SEVERITY_INFO + }; + + // Suppress individual messages by their ID + D3D12_MESSAGE_ID DenyIds[] = + { + // This occurs when there are uninitialized descriptors in a descriptor table, even when a + // shader does not access the missing descriptors. I find this is common when switching + // shader permutations and not wanting to change much code to reorder resources. + D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE, + + // Triggered when a shader does not export all color components of a render target, such as + // when only writing RGB to an R10G10B10A2 buffer, ignoring alpha. + D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH, + + // This occurs when a descriptor table is unbound even when a shader does not access the missing + // descriptors. This is common with a root signature shared between disparate shaders that + // don't all need the same types of resources. + D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET, + + // ������̨�����������õ���ɫֵ��Ĭ��ֵ��ͬ���ᱨ�����������������ʱ������ + D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE, + // �������/ģ�建���������õ�ֵ��Ĭ��ֵ��ͬ���ᱨ������� + D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE, + + // RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS + (D3D12_MESSAGE_ID)1008, + }; + + D3D12_INFO_QUEUE_FILTER NewFilter = {}; + //NewFilter.DenyList.NumCategories = _countof(Categories); + //NewFilter.DenyList.pCategoryList = Categories; + NewFilter.DenyList.NumSeverities = _countof(Severities); + NewFilter.DenyList.pSeverityList = Severities; + NewFilter.DenyList.NumIDs = _countof(DenyIds); + NewFilter.DenyList.pIDList = DenyIds; + + pInfoQueue->PushStorageFilter(&NewFilter); + pInfoQueue->Release(); + } +#endif + + // We like to do read-modify-write operations on UAVs during post processing. To support that, we + // need to either have the hardware do typed UAV loads of R11G11B10_FLOAT or we need to manually + // decode an R32_UINT representation of the same buffer. This code determines if we get the hardware + // load support. + D3D12_FEATURE_DATA_D3D12_OPTIONS FeatureData = {}; + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &FeatureData, sizeof(FeatureData)))) + { + if (FeatureData.TypedUAVLoadAdditionalFormats) + { + D3D12_FEATURE_DATA_FORMAT_SUPPORT Support = + { + DXGI_FORMAT_R11G11B10_FLOAT, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE + }; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R11G11B10_FLOAT = true; + } + + Support.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + + if (SUCCEEDED(g_Device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &Support, sizeof(Support))) && + (Support.Support2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0) + { + g_bTypedUAVLoadSupport_R16G16B16A16_FLOAT = true; + } + } + } + + // ����������С������б������������ + g_CommandManager.Create(g_Device); + + // ���������� + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; + swapChainDesc.Width = g_DisplayWidth; + swapChainDesc.Height = g_DisplayHeight; + swapChainDesc.Format = SwapChainFormat; + swapChainDesc.Scaling = DXGI_SCALING_NONE; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = SWAP_CHAIN_BUFFER_COUNT; + swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + + ASSERT_SUCCEEDED(dxgiFactory->CreateSwapChainForHwnd(g_CommandManager.GetCommandQueue(), GameCore::g_hWnd, &swapChainDesc, nullptr, nullptr, &s_SwapChain1)); + +#if CONDITIONALLY_ENABLE_HDR_OUTPUT && defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2) + { + IDXGISwapChain4* swapChain = (IDXGISwapChain4*)s_SwapChain1; + ComPtr output; + ComPtr output6; + DXGI_OUTPUT_DESC1 outputDesc; + UINT colorSpaceSupport; + + // Query support for ST.2084 on the display and set the color space accordingly + if (SUCCEEDED(swapChain->GetContainingOutput(&output)) && + SUCCEEDED(output.As(&output6)) && + SUCCEEDED(output6->GetDesc1(&outputDesc)) && + outputDesc.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 && + SUCCEEDED(swapChain->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, &colorSpaceSupport)) && + (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT) && + SUCCEEDED(swapChain->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020))) + { + g_bEnableHDROutput = true; + } + } +#endif + + for (uint32_t i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + { + ComPtr DisplayPlane; + ASSERT_SUCCEEDED(s_SwapChain1->GetBuffer(i, MY_IID_PPV_ARGS(&DisplayPlane))); + g_DisplayPlane[i].CreateFromSwapChain(L"Primary SwapChain Buffer", DisplayPlane.Detach()); + } + + // Common state was moved to GraphicsCommon.* + InitializeCommonState(); + + s_PresentRS.Reset(4, 2); + s_PresentRS[0].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 2); + s_PresentRS[1].InitAsConstants(0, 6, D3D12_SHADER_VISIBILITY_ALL); + s_PresentRS[2].InitAsBufferSRV(2, D3D12_SHADER_VISIBILITY_PIXEL); + s_PresentRS[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1); + s_PresentRS.InitStaticSampler(0, SamplerLinearClampDesc); + s_PresentRS.InitStaticSampler(1, SamplerPointClampDesc); + s_PresentRS.Finalize(L"Present"); + + // Initialize PSOs + s_BlendUIPSO.SetRootSignature(s_PresentRS); + s_BlendUIPSO.SetRasterizerState( RasterizerTwoSided ); + s_BlendUIPSO.SetBlendState( BlendPreMultiplied ); + s_BlendUIPSO.SetDepthStencilState( DepthStateDisabled ); + s_BlendUIPSO.SetSampleMask(0xFFFFFFFF); + s_BlendUIPSO.SetInputLayout(0, nullptr); + s_BlendUIPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_BlendUIPSO.SetVertexShader( g_pScreenQuadVS, sizeof(g_pScreenQuadVS) ); + s_BlendUIPSO.SetPixelShader( g_pBufferCopyPS, sizeof(g_pBufferCopyPS) ); + s_BlendUIPSO.SetRenderTargetFormat(SwapChainFormat, DXGI_FORMAT_UNKNOWN); + s_BlendUIPSO.Finalize(); + +#define CreatePSO( ObjName, ShaderByteCode ) \ + ObjName = s_BlendUIPSO; \ + ObjName.SetBlendState( BlendDisable ); \ + ObjName.SetPixelShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(PresentSDRPS, g_pPresentSDRPS); + CreatePSO(MagnifyPixelsPS, g_pMagnifyPixelsPS); + CreatePSO(BilinearUpsamplePS, g_pBilinearUpsamplePS); + CreatePSO(BicubicHorizontalUpsamplePS, g_pBicubicHorizontalUpsamplePS); + CreatePSO(BicubicVerticalUpsamplePS, g_pBicubicVerticalUpsamplePS); + CreatePSO(SharpeningUpsamplePS, g_pSharpeningUpsamplePS); + +#undef CreatePSO + + BicubicHorizontalUpsamplePS = s_BlendUIPSO; + BicubicHorizontalUpsamplePS.SetBlendState( BlendDisable ); + BicubicHorizontalUpsamplePS.SetPixelShader(g_pBicubicHorizontalUpsamplePS, sizeof(g_pBicubicHorizontalUpsamplePS) ); + BicubicHorizontalUpsamplePS.SetRenderTargetFormat(DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); + BicubicHorizontalUpsamplePS.Finalize(); + + PresentHDRPS = PresentSDRPS; + PresentHDRPS.SetPixelShader(g_pPresentHDRPS, sizeof(g_pPresentHDRPS)); + DXGI_FORMAT SwapChainFormats[2] = { DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM }; + PresentHDRPS.SetRenderTargetFormats(2, SwapChainFormats, DXGI_FORMAT_UNKNOWN ); + PresentHDRPS.Finalize(); + + g_GenerateMipsRS.Reset(3, 1); + g_GenerateMipsRS[0].InitAsConstants(0, 4); + g_GenerateMipsRS[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1); + g_GenerateMipsRS[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4); + g_GenerateMipsRS.InitStaticSampler(0, SamplerLinearClampDesc); + g_GenerateMipsRS.Finalize(L"Generate Mips"); + +#define CreatePSO(ObjName, ShaderByteCode ) \ + ObjName.SetRootSignature(g_GenerateMipsRS); \ + ObjName.SetComputeShader(ShaderByteCode, sizeof(ShaderByteCode) ); \ + ObjName.Finalize(); + + CreatePSO(g_GenerateMipsLinearPSO[0], g_pGenerateMipsLinearCS); + CreatePSO(g_GenerateMipsLinearPSO[1], g_pGenerateMipsLinearOddXCS); + CreatePSO(g_GenerateMipsLinearPSO[2], g_pGenerateMipsLinearOddYCS); + CreatePSO(g_GenerateMipsLinearPSO[3], g_pGenerateMipsLinearOddCS); + CreatePSO(g_GenerateMipsGammaPSO[0], g_pGenerateMipsGammaCS); + CreatePSO(g_GenerateMipsGammaPSO[1], g_pGenerateMipsGammaOddXCS); + CreatePSO(g_GenerateMipsGammaPSO[2], g_pGenerateMipsGammaOddYCS); + CreatePSO(g_GenerateMipsGammaPSO[3], g_pGenerateMipsGammaOddCS); + + g_PreDisplayBuffer.Create(L"PreDisplay Buffer", g_DisplayWidth, g_DisplayHeight, 1, SwapChainFormat); +// + GpuTimeManager::Initialize(4096); + SetNativeResolution(); +// TemporalEffects::Initialize(); +// PostEffects::Initialize(); +// SSAO::Initialize(); + TextRenderer::Initialize(); + GraphRenderer::Initialize(); +// ParticleEffects::Initialize(kMaxNativeWidth, kMaxNativeHeight); + + s_FrameStartTick = SystemTime::GetCurrentTick();; + return true; +} + +void Graphics::Terminate( void ) +{ + g_CommandManager.IdleGPU(); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + s_SwapChain1->SetFullscreenState(FALSE, nullptr); +#endif +} + +void Graphics::Shutdown( void ) +{ + CommandContext::DestroyAllContexts(); + g_CommandManager.Shutdown(); + GpuTimeManager::Shutdown(); + s_SwapChain1->Release(); + PSO::DestroyAll(); + RootSignature::DestroyAll(); + DescriptorAllocator::DestroyAll(); + + DestroyCommonState(); + DestroyRenderingBuffers(); +// TemporalEffects::Shutdown(); +// PostEffects::Shutdown(); +// SSAO::Shutdown(); + TextRenderer::Shutdown(); + GraphRenderer::Shutdown(); +// ParticleEffects::Shutdown(); + TextureManager::Shutdown(); + + for (UINT i = 0; i < SWAP_CHAIN_BUFFER_COUNT; ++i) + g_DisplayPlane[i].Destroy(); + + g_PreDisplayBuffer.Destroy(); + +#if defined(_DEBUG) + ID3D12DebugDevice* debugInterface; + if (SUCCEEDED(g_Device->QueryInterface(&debugInterface))) + { + debugInterface->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL | D3D12_RLDO_IGNORE_INTERNAL); + debugInterface->Release(); + } +#endif + + SAFE_RELEASE(g_Device); +} + +void Graphics::PreparePresentHDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + Context.SetDynamicDescriptor(0, 1, g_OverlayBuffer.GetSRV()); + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[] = + { + g_DisplayPlane[g_CurrentBuffer].GetRTV() + }; + + Context.SetPipelineState(PresentHDRPS); + Context.SetRenderTargets(_countof(RTVs), RTVs); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + struct Constants + { + float RcpDstWidth; + float RcpDstHeight; + float PaperWhite; + float MaxBrightness; + int32_t DebugMode; + }; + Constants consts = { 1.0f / g_NativeWidth, 1.0f / g_NativeHeight, + (float)g_HDRPaperWhite, (float)g_MaxDisplayLuminance, (int32_t)HDRDebugMode }; + Context.SetConstantArray(1, sizeof(Constants) / 4, (float*)&consts); + Context.Draw(3); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::CompositeOverlays( GraphicsContext& Context ) +{ + // Blend (or write) the UI overlay + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetDynamicDescriptor(0, 0, g_OverlayBuffer.GetSRV()); + Context.SetPipelineState(s_BlendUIPSO); + Context.SetConstants(1, 1.0f / g_NativeWidth, 1.0f / g_NativeHeight); + Context.Draw(3); +} + +void Graphics::PreparePresentLDR(void) +{ + GraphicsContext& Context = GraphicsContext::Begin(L"Present"); + + // We're going to be reading these buffers to write to the swap chain buffer(s) + Context.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + + Context.SetRootSignature(s_PresentRS); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + // Copy (and convert) the LDR buffer to the back buffer + + Context.SetDynamicDescriptor(0, 0, g_SceneColorBuffer.GetSRV()); + + ColorBuffer& UpsampleDest = (DebugZoom == kDebugZoomOff ? g_DisplayPlane[g_CurrentBuffer] : g_PreDisplayBuffer); + + if (g_NativeWidth == g_DisplayWidth && g_NativeHeight == g_DisplayHeight) + { + Context.SetPipelineState(PresentSDRPS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_NativeWidth, g_NativeHeight); + Context.Draw(3); + } + else if (UpsampleFilter == kBicubic) + { + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_HorizontalBuffer.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_NativeHeight); + Context.SetPipelineState(BicubicHorizontalUpsamplePS); + Context.SetConstants(1, g_NativeWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.Draw(3); + + Context.TransitionResource(g_HorizontalBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetPipelineState(BicubicVerticalUpsamplePS); + Context.SetConstants(1, g_DisplayWidth, g_NativeHeight, (float)BicubicUpsampleWeight); + Context.SetDynamicDescriptor(0, 0, g_HorizontalBuffer.GetSRV()); + Context.Draw(3); + } + else if (UpsampleFilter == kSharpening) + { + Context.SetPipelineState(SharpeningUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + float TexelWidth = 1.0f / g_NativeWidth; + float TexelHeight = 1.0f / g_NativeHeight; + float X = Math::Cos((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + float Y = Math::Sin((float)SharpeningRotation / 180.0f * 3.14159f) * (float)SharpeningSpread; + const float WA = (float)SharpeningStrength; + const float WB = 1.0f + 4.0f * WA; + float Constants[] = { X * TexelWidth, Y * TexelHeight, Y * TexelWidth, -X * TexelHeight, WA, WB }; + Context.SetConstantArray(1, _countof(Constants), Constants); + Context.Draw(3); + } + else if (UpsampleFilter == kBilinear) + { + Context.SetPipelineState(BilinearUpsamplePS); + Context.TransitionResource(UpsampleDest, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(UpsampleDest.GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.Draw(3); + } + + if (DebugZoom != kDebugZoomOff) + { + Context.TransitionResource(g_PreDisplayBuffer, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + Context.SetPipelineState(MagnifyPixelsPS); + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_DisplayPlane[g_CurrentBuffer].GetRTV()); + Context.SetViewportAndScissor(0, 0, g_DisplayWidth, g_DisplayHeight); + Context.SetConstants(1, 1.0f / ((int)DebugZoom + 1.0f)); + Context.SetDynamicDescriptor(0, 0, g_PreDisplayBuffer.GetSRV()); + Context.Draw(3); + } + + CompositeOverlays(Context); + + Context.TransitionResource(g_DisplayPlane[g_CurrentBuffer], D3D12_RESOURCE_STATE_PRESENT); + + // Close the final context to be executed before frame present. + Context.Finish(); +} + +void Graphics::Present(void) +{ + if (g_bEnableHDROutput) + PreparePresentHDR(); + else + PreparePresentLDR(); + + g_CurrentBuffer = (g_CurrentBuffer + 1) % SWAP_CHAIN_BUFFER_COUNT; + + UINT PresentInterval = s_EnableVSync ? std::min(4, (int)Round(s_FrameTime * 60.0f)) : 0; + + s_SwapChain1->Present(PresentInterval, 0); + + // Test robustness to handle spikes in CPU time + //if (s_DropRandomFrames) + //{ + // if (std::rand() % 25 == 0) + // BusyLoopSleep(0.010); + //} + + int64_t CurrentTick = SystemTime::GetCurrentTick(); + + if (s_EnableVSync) + { + // With VSync enabled, the time step between frames becomes a multiple of 16.666 ms. We need + // to add logic to vary between 1 and 2 (or 3 fields). This delta time also determines how + // long the previous frame should be displayed (i.e. the present interval.) + s_FrameTime = (s_LimitTo30Hz ? 2.0f : 1.0f) / 60.0f; + if (s_DropRandomFrames) + { + if (std::rand() % 50 == 0) + s_FrameTime += (1.0f / 60.0f); + } + } + else + { + // When running free, keep the most recent total frame time as the time step for + // the next frame simulation. This is not super-accurate, but assuming a frame + // time varies smoothly, it should be close enough. + s_FrameTime = (float)SystemTime::TimeBetweenTicks(s_FrameStartTick, CurrentTick); + } + + s_FrameStartTick = CurrentTick; + + ++s_FrameIndex; +// TemporalEffects::Update((uint32_t)s_FrameIndex); + + SetNativeResolution(); +} + +uint64_t Graphics::GetFrameCount(void) +{ + return s_FrameIndex; +} + +float Graphics::GetFrameTime(void) +{ + return s_FrameTime; +} + +float Graphics::GetFrameRate(void) +{ + return s_FrameTime == 0.0f ? 0.0f : 1.0f / s_FrameTime; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.h b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.h new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/GraphicsCore.h @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "PipelineState.h" +#include "DescriptorHeap.h" +#include "RootSignature.h" +#include "SamplerManager.h" +#include "GraphicsCommon.h" + +class ColorBuffer; +class DepthBuffer; +class GraphicsPSO; +class CommandContext; +class CommandListManager; +class CommandSignature; +class ContextManager; + +namespace Graphics +{ +#ifndef RELEASE + extern const GUID WKPDID_D3DDebugObjectName; +#endif + + using namespace Microsoft::WRL; + + bool Initialize(void); + void Resize(uint32_t width, uint32_t height); + void Terminate(void); + void Shutdown(void); + void Present(void); + + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; + + // Returns the number of elapsed frames since application start + uint64_t GetFrameCount(void); + + // The amount of time elapsed during the last completed frame. The CPU and/or + // GPU may be idle during parts of the frame. The frame time measures the time + // between calls to present each frame. + float GetFrameTime(void); + + // The total number of frames per second + float GetFrameRate(void); + + extern ID3D12Device* g_Device; + extern CommandListManager g_CommandManager; + extern ContextManager g_ContextManager; + + extern D3D_FEATURE_LEVEL g_D3DFeatureLevel; + extern bool g_bTypedUAVLoadSupport_R11G11B10_FLOAT; + extern bool g_bEnableHDROutput; + + extern DescriptorAllocator g_DescriptorAllocator[]; + inline D3D12_CPU_DESCRIPTOR_HANDLE AllocateDescriptor( D3D12_DESCRIPTOR_HEAP_TYPE Type, UINT Count = 1 ) + { + return g_DescriptorAllocator[Type].Allocate(Count); + } + + extern RootSignature g_GenerateMipsRS; + extern ComputePSO g_GenerateMipsLinearPSO[4]; + extern ComputePSO g_GenerateMipsGammaPSO[4]; + + enum eResolution { k600p, k720p, k900p, k1080p, k1440p, k1800p, k2160p }; + + extern BoolVar s_EnableVSync; + extern EnumVar TargetResolution; + extern uint32_t g_DisplayWidth; + extern uint32_t g_DisplayHeight; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.cpp new file mode 100644 index 0000000..78dfe34 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "CommandSignature.h" +#include "RootSignature.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void CommandSignature::Finalize( const RootSignature* RootSignature ) +{ + if (m_Finalized) + return; + + UINT ByteStride = 0; + bool RequiresRootSignature = false; + + for (UINT i = 0; i < m_NumParameters; ++i) + { + switch (m_ParamArray[i].GetDesc().Type) + { + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW: + ByteStride += sizeof(D3D12_DRAW_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: + ByteStride += sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + ByteStride += sizeof(D3D12_DISPATCH_ARGUMENTS); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT: + ByteStride += m_ParamArray[i].GetDesc().Constant.Num32BitValuesToSet * 4; + RequiresRootSignature = true; + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_VERTEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW: + ByteStride += sizeof(D3D12_INDEX_BUFFER_VIEW); + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW: + case D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW: + ByteStride += 8; + RequiresRootSignature = true; + break; + } + } + + D3D12_COMMAND_SIGNATURE_DESC CommandSignatureDesc; + CommandSignatureDesc.ByteStride = ByteStride; + CommandSignatureDesc.NumArgumentDescs = m_NumParameters; + CommandSignatureDesc.pArgumentDescs = (const D3D12_INDIRECT_ARGUMENT_DESC*)m_ParamArray.get(); + CommandSignatureDesc.NodeMask = 1; + + Microsoft::WRL::ComPtr pOutBlob, pErrorBlob; + + ID3D12RootSignature* pRootSig = RootSignature ? RootSignature->GetSignature() : nullptr; + if (RequiresRootSignature) + { + ASSERT(pRootSig != nullptr); + } + else + { + pRootSig = nullptr; + } + + ASSERT_SUCCEEDED( g_Device->CreateCommandSignature(&CommandSignatureDesc, pRootSig, + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(L"CommandSignature"); + + m_Finalized = TRUE; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.h b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.h new file mode 100644 index 0000000..2436259 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/CommandSignature.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#pragma once + +#include "pch.h" + +class RootSignature; + +class IndirectParameter +{ + friend class CommandSignature; +public: + + IndirectParameter() + { + m_IndirectParam.Type = (D3D12_INDIRECT_ARGUMENT_TYPE)0xFFFFFFFF; + } + + void Draw(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + } + + void DrawIndexed(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + } + + void Dispatch(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + } + + void VertexBufferView(UINT Slot) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW; + m_IndirectParam.VertexBuffer.Slot = Slot; + } + + void IndexBufferView(void) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW; + } + + void Constant(UINT RootParameterIndex, UINT DestOffsetIn32BitValues, UINT Num32BitValuesToSet) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT; + m_IndirectParam.Constant.RootParameterIndex = RootParameterIndex; + m_IndirectParam.Constant.DestOffsetIn32BitValues = DestOffsetIn32BitValues; + m_IndirectParam.Constant.Num32BitValuesToSet = Num32BitValuesToSet; + } + + void ConstantBufferView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; + m_IndirectParam.ConstantBufferView.RootParameterIndex = RootParameterIndex; + } + + void ShaderResourceView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW; + m_IndirectParam.ShaderResourceView.RootParameterIndex = RootParameterIndex; + } + + void UnorderedAccessView(UINT RootParameterIndex) + { + m_IndirectParam.Type = D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW; + m_IndirectParam.UnorderedAccessView.RootParameterIndex = RootParameterIndex; + } + + const D3D12_INDIRECT_ARGUMENT_DESC& GetDesc( void ) const { return m_IndirectParam; } + +protected: + + D3D12_INDIRECT_ARGUMENT_DESC m_IndirectParam; +}; + +class CommandSignature +{ +public: + + CommandSignature( UINT NumParams = 0 ) : m_Finalized(FALSE), m_NumParameters(NumParams) + { + Reset(NumParams); + } + + void Destroy( void ) + { + m_Signature = nullptr; + m_ParamArray = nullptr; + } + + void Reset( UINT NumParams ) + { + if (NumParams > 0) + m_ParamArray.reset(new IndirectParameter[NumParams]); + else + m_ParamArray = nullptr; + + m_NumParameters = NumParams; + } + + IndirectParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const IndirectParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + void Finalize( const RootSignature* RootSignature = nullptr ); + + ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + std::unique_ptr m_ParamArray; + Microsoft::WRL::ComPtr m_Signature; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.cpp new file mode 100644 index 0000000..341be81 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.cpp @@ -0,0 +1,192 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "pch.h" +#include "GraphicsCore.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "Hash.h" +#include +#include +#include + +using Math::IsAligned; +using namespace Graphics; +using Microsoft::WRL::ComPtr; +using namespace std; + +static map< size_t, ComPtr > s_GraphicsPSOHashMap; +static map< size_t, ComPtr > s_ComputePSOHashMap; + +void PSO::DestroyAll(void) +{ + s_GraphicsPSOHashMap.clear(); + s_ComputePSOHashMap.clear(); +} + + +GraphicsPSO::GraphicsPSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; + m_PSODesc.SampleMask = 0xFFFFFFFFu; + m_PSODesc.SampleDesc.Count = 1; + m_PSODesc.InputLayout.NumElements = 0; +} + +void GraphicsPSO::SetBlendState( const D3D12_BLEND_DESC& BlendDesc ) +{ + m_PSODesc.BlendState = BlendDesc; +} + +void GraphicsPSO::SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ) +{ + m_PSODesc.RasterizerState = RasterizerDesc; +} + +void GraphicsPSO::SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ) +{ + m_PSODesc.DepthStencilState = DepthStencilDesc; +} + +void GraphicsPSO::SetSampleMask( UINT SampleMask ) +{ + m_PSODesc.SampleMask = SampleMask; +} + +void GraphicsPSO::SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ) +{ + ASSERT(TopologyType != D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED, "Can't draw with undefined topology"); + m_PSODesc.PrimitiveTopologyType = TopologyType; +} + +void GraphicsPSO::SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ) +{ + m_PSODesc.IBStripCutValue = IBProps; +} + +void GraphicsPSO::SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + SetRenderTargetFormats(1, &RTVFormat, DSVFormat, MsaaCount, MsaaQuality ); +} + +void GraphicsPSO::SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount, UINT MsaaQuality ) +{ + ASSERT(NumRTVs == 0 || RTVFormats != nullptr, "Null format array conflicts with non-zero length"); + for (UINT i = 0; i < NumRTVs; ++i) + m_PSODesc.RTVFormats[i] = RTVFormats[i]; + for (UINT i = NumRTVs; i < m_PSODesc.NumRenderTargets; ++i) + m_PSODesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN; + m_PSODesc.NumRenderTargets = NumRTVs; + m_PSODesc.DSVFormat = DSVFormat; + m_PSODesc.SampleDesc.Count = MsaaCount; + m_PSODesc.SampleDesc.Quality = MsaaQuality; +} + +void GraphicsPSO::SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ) +{ + m_PSODesc.InputLayout.NumElements = NumElements; + + if (NumElements > 0) + { + D3D12_INPUT_ELEMENT_DESC* NewElements = (D3D12_INPUT_ELEMENT_DESC*)malloc(sizeof(D3D12_INPUT_ELEMENT_DESC) * NumElements); + memcpy(NewElements, pInputElementDescs, NumElements * sizeof(D3D12_INPUT_ELEMENT_DESC)); + m_InputLayouts.reset((const D3D12_INPUT_ELEMENT_DESC*)NewElements); + } + else + m_InputLayouts = nullptr; +} + +void GraphicsPSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + m_PSODesc.InputLayout.pInputElementDescs = nullptr; + size_t HashCode = Utility::HashState(&m_PSODesc); + HashCode = Utility::HashState(m_InputLayouts.get(), m_PSODesc.InputLayout.NumElements, HashCode); + m_PSODesc.InputLayout.pInputElementDescs = m_InputLayouts.get(); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_GraphicsPSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_GraphicsPSOHashMap.end()) + { + firstCompile = true; + PSORef = s_GraphicsPSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateGraphicsPipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_GraphicsPSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +void ComputePSO::Finalize() +{ + // Make sure the root signature is finalized first + m_PSODesc.pRootSignature = m_RootSignature->GetSignature(); + ASSERT(m_PSODesc.pRootSignature != nullptr); + + size_t HashCode = Utility::HashState(&m_PSODesc); + + ID3D12PipelineState** PSORef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_ComputePSOHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_ComputePSOHashMap.end()) + { + firstCompile = true; + PSORef = s_ComputePSOHashMap[HashCode].GetAddressOf(); + } + else + PSORef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ASSERT_SUCCEEDED( g_Device->CreateComputePipelineState(&m_PSODesc, MY_IID_PPV_ARGS(&m_PSO)) ); + s_ComputePSOHashMap[HashCode].Attach(m_PSO); + } + else + { + while (*PSORef == nullptr) + this_thread::yield(); + m_PSO = *PSORef; + } +} + +ComputePSO::ComputePSO() +{ + ZeroMemory(&m_PSODesc, sizeof(m_PSODesc)); + m_PSODesc.NodeMask = 1; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.h b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.h new file mode 100644 index 0000000..392db4c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/PipelineState.h @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class CommandContext; +class RootSignature; +class VertexShader; +class GeometryShader; +class HullShader; +class DomainShader; +class PixelShader; +class ComputeShader; + +class PSO +{ +public: + + PSO() : m_RootSignature(nullptr) {} + + static void DestroyAll( void ); + + void SetRootSignature( const RootSignature& BindMappings ) + { + m_RootSignature = &BindMappings; + } + + const RootSignature& GetRootSignature( void ) const + { + ASSERT(m_RootSignature != nullptr); + return *m_RootSignature; + } + + ID3D12PipelineState* GetPipelineStateObject( void ) const { return m_PSO; } + +protected: + + const RootSignature* m_RootSignature; + + ID3D12PipelineState* m_PSO; +}; + +class GraphicsPSO : public PSO +{ + friend class CommandContext; + +public: + + // Start with empty state + GraphicsPSO(); + + void SetBlendState( const D3D12_BLEND_DESC& BlendDesc ); + void SetRasterizerState( const D3D12_RASTERIZER_DESC& RasterizerDesc ); + void SetDepthStencilState( const D3D12_DEPTH_STENCIL_DESC& DepthStencilDesc ); + void SetSampleMask( UINT SampleMask ); + void SetPrimitiveTopologyType( D3D12_PRIMITIVE_TOPOLOGY_TYPE TopologyType ); + void SetRenderTargetFormat( DXGI_FORMAT RTVFormat, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetRenderTargetFormats( UINT NumRTVs, const DXGI_FORMAT* RTVFormats, DXGI_FORMAT DSVFormat, UINT MsaaCount = 1, UINT MsaaQuality = 0 ); + void SetInputLayout( UINT NumElements, const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs ); + void SetPrimitiveRestart( D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBProps ); + + // These const_casts shouldn't be necessary, but we need to fix the API to accept "const void* pShaderBytecode" + void SetVertexShader( const void* Binary, size_t Size ) { m_PSODesc.VS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetPixelShader( const void* Binary, size_t Size ) { m_PSODesc.PS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetGeometryShader( const void* Binary, size_t Size ) { m_PSODesc.GS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetHullShader( const void* Binary, size_t Size ) { m_PSODesc.HS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetDomainShader( const void* Binary, size_t Size ) { m_PSODesc.DS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + + void SetVertexShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.VS = Binary; } + void SetPixelShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.PS = Binary; } + void SetGeometryShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.GS = Binary; } + void SetHullShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.HS = Binary; } + void SetDomainShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.DS = Binary; } + + // Perform validation and compute a hash value for fast state block comparisons + void Finalize(); + +private: + + D3D12_GRAPHICS_PIPELINE_STATE_DESC m_PSODesc; + std::shared_ptr m_InputLayouts; +}; + + +class ComputePSO : public PSO +{ + friend class CommandContext; + +public: + ComputePSO(); + + void SetComputeShader( const void* Binary, size_t Size ) { m_PSODesc.CS = CD3DX12_SHADER_BYTECODE(const_cast(Binary), Size); } + void SetComputeShader( const D3D12_SHADER_BYTECODE& Binary ) { m_PSODesc.CS = Binary; } + + void Finalize(); + +private: + + D3D12_COMPUTE_PIPELINE_STATE_DESC m_PSODesc; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.cpp new file mode 100644 index 0000000..d9160da --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "RootSignature.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include +#include +#include + +using namespace Graphics; +using namespace std; +using Microsoft::WRL::ComPtr; + +static std::map< size_t, ComPtr > s_RootSignatureHashMap; + +void RootSignature::DestroyAll(void) +{ + s_RootSignatureHashMap.clear(); +} + +void RootSignature::InitStaticSampler( + UINT Register, + const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility ) +{ + ASSERT(m_NumInitializedStaticSamplers < m_NumSamplers); + D3D12_STATIC_SAMPLER_DESC& StaticSamplerDesc = m_SamplerArray[m_NumInitializedStaticSamplers++]; + + StaticSamplerDesc.Filter = NonStaticSamplerDesc.Filter; + StaticSamplerDesc.AddressU = NonStaticSamplerDesc.AddressU; + StaticSamplerDesc.AddressV = NonStaticSamplerDesc.AddressV; + StaticSamplerDesc.AddressW = NonStaticSamplerDesc.AddressW; + StaticSamplerDesc.MipLODBias = NonStaticSamplerDesc.MipLODBias; + StaticSamplerDesc.MaxAnisotropy = NonStaticSamplerDesc.MaxAnisotropy; + StaticSamplerDesc.ComparisonFunc = NonStaticSamplerDesc.ComparisonFunc; + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + StaticSamplerDesc.MinLOD = NonStaticSamplerDesc.MinLOD; + StaticSamplerDesc.MaxLOD = NonStaticSamplerDesc.MaxLOD; + StaticSamplerDesc.ShaderRegister = Register; + StaticSamplerDesc.RegisterSpace = 0; + StaticSamplerDesc.ShaderVisibility = Visibility; + + if (StaticSamplerDesc.AddressU == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressV == D3D12_TEXTURE_ADDRESS_MODE_BORDER || + StaticSamplerDesc.AddressW == D3D12_TEXTURE_ADDRESS_MODE_BORDER) + { + WARN_ONCE_IF_NOT( + // Transparent Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 0.0f || + // Opaque Black + NonStaticSamplerDesc.BorderColor[0] == 0.0f && + NonStaticSamplerDesc.BorderColor[1] == 0.0f && + NonStaticSamplerDesc.BorderColor[2] == 0.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f || + // Opaque White + NonStaticSamplerDesc.BorderColor[0] == 1.0f && + NonStaticSamplerDesc.BorderColor[1] == 1.0f && + NonStaticSamplerDesc.BorderColor[2] == 1.0f && + NonStaticSamplerDesc.BorderColor[3] == 1.0f, + "Sampler border color does not match static sampler limitations"); + + if (NonStaticSamplerDesc.BorderColor[3] == 1.0f) + { + if (NonStaticSamplerDesc.BorderColor[0] == 1.0f) + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE; + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK; + } + else + StaticSamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + } +} + +void RootSignature::Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags) +{ + if (m_Finalized) + return; + + ASSERT(m_NumInitializedStaticSamplers == m_NumSamplers); + + D3D12_ROOT_SIGNATURE_DESC RootDesc; + RootDesc.NumParameters = m_NumParameters; + RootDesc.pParameters = (const D3D12_ROOT_PARAMETER*)m_ParamArray.get(); + RootDesc.NumStaticSamplers = m_NumSamplers; + RootDesc.pStaticSamplers = (const D3D12_STATIC_SAMPLER_DESC*)m_SamplerArray.get(); + RootDesc.Flags = Flags; + + m_DescriptorTableBitMap = 0; + m_SamplerTableBitMap = 0; + + size_t HashCode = Utility::HashState(&RootDesc.Flags); + HashCode = Utility::HashState( RootDesc.pStaticSamplers, m_NumSamplers, HashCode ); + + for (UINT Param = 0; Param < m_NumParameters; ++Param) + { + const D3D12_ROOT_PARAMETER& RootParam = RootDesc.pParameters[Param]; + m_DescriptorTableSize[Param] = 0; + + if (RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + ASSERT(RootParam.DescriptorTable.pDescriptorRanges != nullptr); + + HashCode = Utility::HashState( RootParam.DescriptorTable.pDescriptorRanges, + RootParam.DescriptorTable.NumDescriptorRanges, HashCode ); + + // We keep track of sampler descriptor tables separately from CBV_SRV_UAV descriptor tables + if (RootParam.DescriptorTable.pDescriptorRanges->RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) + m_SamplerTableBitMap |= (1 << Param); + else + m_DescriptorTableBitMap |= (1 << Param); + + for (UINT TableRange = 0; TableRange < RootParam.DescriptorTable.NumDescriptorRanges; ++TableRange) + m_DescriptorTableSize[Param] += RootParam.DescriptorTable.pDescriptorRanges[TableRange].NumDescriptors; + } + else + HashCode = Utility::HashState( &RootParam, 1, HashCode ); + } + + ID3D12RootSignature** RSRef = nullptr; + bool firstCompile = false; + { + static mutex s_HashMapMutex; + lock_guard CS(s_HashMapMutex); + auto iter = s_RootSignatureHashMap.find(HashCode); + + // Reserve space so the next inquiry will find that someone got here first. + if (iter == s_RootSignatureHashMap.end()) + { + RSRef = s_RootSignatureHashMap[HashCode].GetAddressOf(); + firstCompile = true; + } + else + RSRef = iter->second.GetAddressOf(); + } + + if (firstCompile) + { + ComPtr pOutBlob, pErrorBlob; + + ASSERT_SUCCEEDED( D3D12SerializeRootSignature(&RootDesc, D3D_ROOT_SIGNATURE_VERSION_1, + pOutBlob.GetAddressOf(), pErrorBlob.GetAddressOf())); + + ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), + MY_IID_PPV_ARGS(&m_Signature)) ); + + m_Signature->SetName(name.c_str()); + + s_RootSignatureHashMap[HashCode].Attach(m_Signature); + ASSERT(*RSRef == m_Signature); + } + else + { + while (*RSRef == nullptr) + this_thread::yield(); + m_Signature = *RSRef; + } + + m_Finalized = TRUE; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.h b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.h new file mode 100644 index 0000000..4fef0ce --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/RootSignature.h @@ -0,0 +1,186 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +class DescriptorCache; + +class RootParameter +{ + friend class RootSignature; +public: + + RootParameter() + { + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + ~RootParameter() + { + Clear(); + } + + void Clear() + { + if (m_RootParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + delete [] m_RootParam.DescriptorTable.pDescriptorRanges; + + m_RootParam.ParameterType = (D3D12_ROOT_PARAMETER_TYPE)0xFFFFFFFF; + } + + // ���� + void InitAsConstants( UINT Register, UINT NumDwords, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Constants.Num32BitValues = NumDwords; + m_RootParam.Constants.ShaderRegister = Register; + m_RootParam.Constants.RegisterSpace = 0; + } + + // ������������ͼ + void InitAsConstantBuffer( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // shader��ͼ + void InitAsBufferSRV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + void InitAsBufferUAV( UINT Register, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.Descriptor.ShaderRegister = Register; + m_RootParam.Descriptor.RegisterSpace = 0; + } + + // ������ + void InitAsDescriptorRange( D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + InitAsDescriptorTable(1, Visibility); + SetTableRange(0, Type, Register, Count); + } + + // �������� + void InitAsDescriptorTable( UINT RangeCount, D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ) + { + m_RootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + m_RootParam.ShaderVisibility = Visibility; + m_RootParam.DescriptorTable.NumDescriptorRanges = RangeCount; + m_RootParam.DescriptorTable.pDescriptorRanges = new D3D12_DESCRIPTOR_RANGE[RangeCount]; + } + + void SetTableRange( UINT RangeIndex, D3D12_DESCRIPTOR_RANGE_TYPE Type, UINT Register, UINT Count, UINT Space = 0 ) + { + D3D12_DESCRIPTOR_RANGE* range = const_cast(m_RootParam.DescriptorTable.pDescriptorRanges + RangeIndex); + range->RangeType = Type; + range->NumDescriptors = Count; + range->BaseShaderRegister = Register; + range->RegisterSpace = Space; + range->OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND; + } + + const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootParam; } + + +protected: + + D3D12_ROOT_PARAMETER m_RootParam; +}; + +// Maximum 64 DWORDS divied up amongst all root parameters. +// Root constants = 1 DWORD * NumConstants +// Root descriptor (CBV, SRV, or UAV) = 2 DWORDs each +// Descriptor table pointer = 1 DWORD +// Static samplers = 0 DWORDS (compiled into shader) +class RootSignature +{ + friend class DynamicDescriptorHeap; + +public: + + RootSignature( UINT NumRootParams = 0, UINT NumStaticSamplers = 0 ) : m_Finalized(FALSE), m_NumParameters(NumRootParams) + { + Reset(NumRootParams, NumStaticSamplers); + } + + ~RootSignature() + { + } + + static void DestroyAll(void); + + // NumRootParams����ͨ��ǩ�� NumStaticSamplers��������ǩ�� + void Reset( UINT NumRootParams, UINT NumStaticSamplers = 0 ) + { + if (NumRootParams > 0) + m_ParamArray.reset(new RootParameter[NumRootParams]); + else + m_ParamArray = nullptr; + m_NumParameters = NumRootParams; + + if (NumStaticSamplers > 0) + m_SamplerArray.reset(new D3D12_STATIC_SAMPLER_DESC[NumStaticSamplers]); + else + m_SamplerArray = nullptr; + m_NumSamplers = NumStaticSamplers; + m_NumInitializedStaticSamplers = 0; + } + + // �����������ֱ��ʹ��[]��ȡ����Ӧ����ͨ��ǩ����Ȼ�����RootParameter�еĺ�����ʼ�� + RootParameter& operator[] ( size_t EntryIndex ) + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + const RootParameter& operator[] ( size_t EntryIndex ) const + { + ASSERT(EntryIndex < m_NumParameters); + return m_ParamArray.get()[EntryIndex]; + } + + // ��ʼ��������ǩ�� + void InitStaticSampler( UINT Register, const D3D12_SAMPLER_DESC& NonStaticSamplerDesc, + D3D12_SHADER_VISIBILITY Visibility = D3D12_SHADER_VISIBILITY_ALL ); + + // ������ǩ�� + void Finalize(const std::wstring& name, D3D12_ROOT_SIGNATURE_FLAGS Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE); + + ID3D12RootSignature* GetSignature() const { return m_Signature; } + +protected: + + BOOL m_Finalized; + UINT m_NumParameters; + UINT m_NumSamplers; + UINT m_NumInitializedStaticSamplers; + uint32_t m_DescriptorTableBitMap; // One bit is set for root parameters that are non-sampler descriptor tables + uint32_t m_SamplerTableBitMap; // One bit is set for root parameters that are sampler descriptor tables + uint32_t m_DescriptorTableSize[16]; // Non-sampler descriptor tables need to know their descriptor count + std::unique_ptr m_ParamArray; + std::unique_ptr m_SamplerArray; + ID3D12RootSignature* m_Signature; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.cpp new file mode 100644 index 0000000..da7a673 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "SamplerManager.h" +#include "GraphicsCore.h" +#include "Hash.h" +#include + +using namespace std; +using namespace Graphics; + +namespace +{ + map< size_t, D3D12_CPU_DESCRIPTOR_HANDLE > s_SamplerCache; +} + +D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor() +{ + size_t hashValue = Utility::HashState(this); + auto iter = s_SamplerCache.find(hashValue); + if (iter != s_SamplerCache.end()) + { + return iter->second; + } + + D3D12_CPU_DESCRIPTOR_HANDLE Handle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + g_Device->CreateSampler(this, Handle); + return Handle; +} + +void SamplerDesc::CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ) +{ + g_Device->CreateSampler(this, Handle); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.h b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.h new file mode 100644 index 0000000..2094a92 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/SamplerManager.h @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "Color.h" + +class SamplerDesc : public D3D12_SAMPLER_DESC +{ +public: + // These defaults match the default values for HLSL-defined root + // signature static samplers. So not overriding them here means + // you can safely not define them in HLSL. + SamplerDesc() + { + Filter = D3D12_FILTER_ANISOTROPIC; + AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; + MipLODBias = 0.0f; + MaxAnisotropy = 16; + ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + BorderColor[0] = 1.0f; + BorderColor[1] = 1.0f; + BorderColor[2] = 1.0f; + BorderColor[3] = 1.0f; + MinLOD = 0.0f; + MaxLOD = D3D12_FLOAT32_MAX; + } + + void SetTextureAddressMode( D3D12_TEXTURE_ADDRESS_MODE AddressMode ) + { + AddressU = AddressMode; + AddressV = AddressMode; + AddressW = AddressMode; + } + + void SetBorderColor( Color Border ) + { + BorderColor[0] = Border.R(); + BorderColor[1] = Border.G(); + BorderColor[2] = Border.B(); + BorderColor[3] = Border.A(); + } + + // Allocate new descriptor as needed; return handle to existing descriptor when possible + D3D12_CPU_DESCRIPTOR_HANDLE CreateDescriptor( void ); + + // Create descriptor in place (no deduplication) + void CreateDescriptor( D3D12_CPU_DESCRIPTOR_HANDLE& Handle ); +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/readme_pipeline.txt b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/readme_pipeline.txt new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Pipeline/readme_pipeline.txt @@ -0,0 +1,14 @@ +��Ⱦ��ˮ�� + +�ӿ�˵���� +--��ǩ��: ID3D12RootSignature + + +����װ�����׶Σ���GPU�Դ�����䶥�㡢���� +ʣ�µIJ����м����ɱ�̽׶���ɣ���Ҫ��ͨ��һЩshader������Ⱦ +�������Ӧ�׶Σ�����һ��shaderʱ�����shader������ɡ���ǩ�������ṩ + +�ļ�˵���� +--RootSignature ��ǩ�� +--CommandSignature ����ǩ�� +--PipelineState ��ˮ��״̬�� \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.cpp new file mode 100644 index 0000000..15a5f54 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.cpp @@ -0,0 +1,588 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "pch.h" +#include "GraphRenderer.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "GameInput.h" +#include "SystemTime.h" +#include "EngineProfiling.h" + +#include "CompiledShaders/PerfGraphBackgroundVS.h" +#include "CompiledShaders/PerfGraphVS.h" +#include "CompiledShaders/PerfGraphPS.h" + +#define PERF_GRAPH_ERROR uint32_t(0xFFFFFFFF) +#define MAX_GLOBAL_GRAPHS 2 +#define MAX_PROFILE_GRAPHS 32 +#define MAX_ACTIVE_PROFILE_GRAPHS 4 +#define PROFILE_NODE_COUNT 256 +#define GLOBAL_NODE_COUNT 512 +#define PROFILE_DEBUG_VAR_COUNT 2 + +using namespace Graphics; +using namespace std; +using namespace GraphRenderer; +using namespace Math; + +__declspec(align(16)) struct CBGraph +{ + float RGB[3]; + float RcpXScale; + uint32_t NodeCount; + uint32_t FrameID; +}; + +class GraphVector; + +class PerfGraph +{ +friend GraphVector; +public: + PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = Color(1.0f, 0.0f, 0.5f), bool IsGraphed = false ) : m_IsGraphed(IsGraphed), + m_NodeCount(NodeCount), m_Color(color), m_DebugVarCount(debugVarCount) + { + for (uint32_t i = 0; i < debugVarCount; ++i) + m_PerfTimesCPUBuffer.emplace_back(new float[NodeCount]); + } + + ~PerfGraph() + { + Clear(); + } + + void Clear(){ m_PerfTimesCPUBuffer.clear();} + bool IsGraphed(){ return m_IsGraphed; } + Color GetColor(){ return m_Color; } + void SetColor(Color color){m_Color = color;} + void UpdateGraph( float* timeStamps, uint32_t frameID ) + { + for(uint32_t i = 0; i < m_DebugVarCount; i++) + m_PerfTimesCPUBuffer[i][frameID % m_NodeCount] = timeStamps[i]; + } + + //RenderGraph renders both graph backgrounds and line graphs + // + //To render backgrounds, set s_GraphBackgroundPSO, set primitive topology to triangle strip, + //call RenderGraph without an object and with MaxArray = nullptr. + // + //To render line graph, set s_RenderPerfGraphPSO, set primitive topology to line strip, + //call RenderGraph on an associated PerfGraph object, and pass in MaxArray + static void RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, float MaxValue, uint32_t frameID); + + void RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, + uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID); + +private: + std::vector> m_PerfTimesCPUBuffer; + uint32_t m_NodeCount; + bool m_IsGraphed; + Color m_Color; + uint32_t m_ColorKey; + uint32_t m_DebugVarCount; +}; + + +class GraphVector +{ +public: + GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxActiveGraphs(MaxActiveGraphs), + m_ActiveGraphs(0), m_DebugVarCount(DebugVarCount), m_MinAbs((float)PERF_GRAPH_ERROR), + m_MaxAbs(0.0f), m_FrameOfMinAbs(0), m_FrameOfMaxAbs(0) + { + // Fill color array with set of possible graph colors (up to 8 different colors) + m_ColorArray.reset(new Color[MaxActiveGraphs]); + for (uint32_t i = 0; i < m_MaxActiveGraphs; ++i) + { + m_ColorKeyStack.push_back(i); + uint32_t colorKey = i + 1; + float R = (float)(colorKey & 1); + float G = (float)((colorKey >> 1) & 1) + 0.3f; + float B = (float)((colorKey >> 2) & 1) + 0.3f; + m_ColorArray[i] = Color(R, G, B); + } + + m_Max.reset(new float[DebugVarCount]); + m_Min.reset(new float[DebugVarCount]); + m_FrameOfMax.reset(new uint32_t[DebugVarCount]); + m_FrameOfMin.reset(new uint32_t[DebugVarCount]); + m_PresetMax.reset(new float[DebugVarCount]); + + for (uint32_t i = 0; i < DebugVarCount; ++i) + { + m_Max[i] = 0.0f; + m_Min[i] = (float)PERF_GRAPH_ERROR; + m_FrameOfMax[i] = m_FrameOfMin[i] = 0; + m_PresetMax[i] = 30.0f; + } + + } + + void Clear() + { + m_Graphs.clear(); + } + + GraphHandle AddGraph(PerfGraph* graph) + { + GraphHandle ret = (GraphHandle)m_Graphs.size(); + m_Graphs.emplace_back(graph); + return ret; + } + + bool Toggle(GraphHandle GraphID) + { + if (m_ActiveGraphs < m_MaxActiveGraphs && !m_Graphs[GraphID]->m_IsGraphed) + { + //add to active list + m_Graphs[GraphID]->m_IsGraphed = true; + ++m_ActiveGraphs; + //set color + m_Graphs[GraphID]->m_ColorKey = m_ColorKeyStack.back(); + m_ColorKeyStack.pop_back(); + m_Graphs[GraphID]->m_Color = m_ColorArray[m_Graphs[GraphID]->m_ColorKey]; + } + else if (m_Graphs[GraphID]->m_IsGraphed) + { + //take it off of active list + m_ColorKeyStack.push_back(m_Graphs[GraphID]->m_ColorKey); + m_Graphs[GraphID]->m_IsGraphed = false; + --m_ActiveGraphs; + } + return m_Graphs[GraphID]->m_IsGraphed; + } + + + Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;} + uint32_t Size(){return (uint32_t)m_Graphs.size();} + uint32_t GetActiveGraphCount(){return m_ActiveGraphs;} + + float* GetPresetMax(){return m_PresetMax.get();} + float GetGlobalPresetMax() + { + float max = 0.0f; + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + if (m_PresetMax[i] > max) + max = m_PresetMax[i]; + } + return max; + } + float* GetMaxAbs(){return &m_MaxAbs;} + float* GetMinAbs(){return &m_MinAbs;} + float* GetMax(){return m_Max.get();} + float* GetMin(){return m_Min.get();} + + void PresetMax(const float* maxArray) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + m_PresetMax[i] = maxArray[i]; + } + + void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID) + { + for (uint32_t i = 0; i < m_DebugVarCount; ++i) + { + //Absolute min max + if (FrameID - m_FrameOfMinAbs > nodeCount) + m_MinAbs = (float)PERF_GRAPH_ERROR; + + if (FrameID - m_FrameOfMaxAbs > nodeCount) + m_MaxAbs = 0.0f; + + if (InputNode[i] > m_MaxAbs) + { + m_MaxAbs = InputNode[i]; + m_FrameOfMaxAbs = FrameID; + } + + if (InputNode[i] < m_MinAbs) + { + m_MinAbs = InputNode[i]; + m_FrameOfMinAbs = FrameID; + } + + //Relative min max + if (FrameID - m_FrameOfMax[i] > nodeCount) + m_Max[i] = 0.0f; + + if (FrameID - m_FrameOfMin[i] > nodeCount) + m_Min[i] = (float)PERF_GRAPH_ERROR; + + if (InputNode[i] > m_Max[i]) + { + m_Max[i] = InputNode[i]; + m_FrameOfMax[i] = FrameID; + } + if (InputNode[i] < m_Min[i]) + { + m_Min[i] = InputNode[i]; + m_FrameOfMin[i] = FrameID; + } + } + + } + + std::vector> m_Graphs; // this should be private + +private: + + uint32_t m_ActiveGraphs; + uint32_t m_MaxActiveGraphs; + uint32_t m_DebugVarCount; + std::unique_ptr m_ColorArray; + std::vector m_ColorKeyStack; + + float m_MaxAbs; + float m_MinAbs; + uint32_t m_FrameOfMaxAbs; + uint32_t m_FrameOfMinAbs; + + std::unique_ptr m_PresetMax; + std::unique_ptr m_Max; + std::unique_ptr m_Min; + std::unique_ptr m_FrameOfMax; + std::unique_ptr m_FrameOfMin; +}; + +namespace +{ + RootSignature s_RootSignature; + GraphicsPSO s_RenderPerfGraphPSO; + GraphicsPSO s_GraphBackgroundPSO; + uint32_t s_FrameID; + GraphVector GlobalGraphs = GraphVector(2, 1); + GraphVector ProfileGraphs = GraphVector(MAX_ACTIVE_PROFILE_GRAPHS, PROFILE_DEBUG_VAR_COUNT); + uint32_t s_NumStamps = 0; + uint32_t s_SelectedTimerIndex; +} // {anonymous} namespace + + + +//--------------------------------------------------------------------- +// +// GraphRenderer Methods +// +//--------------------------------------------------------------------- + +static void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]); + + +void GraphRenderer::Initialize( void ) +{ + s_RootSignature.Reset(4); + s_RootSignature[0].InitAsConstantBuffer(0); + s_RootSignature[1].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 2); + s_RootSignature[2].InitAsBufferSRV(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[3].InitAsConstants(1, 3); + s_RootSignature.Finalize(L"Graph Renderer"); + + s_RenderPerfGraphPSO.SetRootSignature(s_RootSignature); + s_RenderPerfGraphPSO.SetRasterizerState(RasterizerDefault); + s_RenderPerfGraphPSO.SetBlendState(BlendTraditional); + s_RenderPerfGraphPSO.SetDepthStencilState(Graphics::DepthStateReadOnly); + s_RenderPerfGraphPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE); + s_RenderPerfGraphPSO.SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), g_OverlayBuffer.GetFormat()); + s_RenderPerfGraphPSO.SetVertexShader(g_pPerfGraphVS, sizeof(g_pPerfGraphVS)); + s_RenderPerfGraphPSO.SetPixelShader(g_pPerfGraphPS, sizeof(g_pPerfGraphPS)); + s_RenderPerfGraphPSO.Finalize(); + + s_GraphBackgroundPSO = s_RenderPerfGraphPSO; + s_GraphBackgroundPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_GraphBackgroundPSO.SetVertexShader(g_pPerfGraphBackgroundVS, sizeof(g_pPerfGraphBackgroundVS)); + s_GraphBackgroundPSO.Finalize(); + + s_FrameID = 0; + + // Preset max for global and profile graphs + float profilePresetMax[PROFILE_DEBUG_VAR_COUNT] = {15.0f, 1.0f}; //improve this + ProfileGraphs.PresetMax(profilePresetMax); + + // Create global CPU and GPU graphs + for (uint32_t i = 0; i < 2; ++i) + { + InitGraph( GraphType::Global ); + GlobalGraphs.m_Graphs[i]->SetColor(Color((float)i, 0.5, 0.5)); + } + + float globalPresetMax[1] = {15.0f}; + GlobalGraphs.PresetMax(globalPresetMax); +} + +void GraphRenderer::Shutdown(void) +{ + ProfileGraphs.Clear(); + GlobalGraphs.Clear(); +} + +GraphHandle GraphRenderer::InitGraph( GraphType type) +{ + if (type == GraphType::Profile) + return ProfileGraphs.AddGraph(new PerfGraph(PROFILE_NODE_COUNT, 2)); + else if (type == GraphType::Global) + return GlobalGraphs.AddGraph(new PerfGraph(GLOBAL_NODE_COUNT, 1)); + else + return PERF_GRAPH_ERROR; +} + +bool GraphRenderer::ManageGraphs( GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return false; + + if (Type == GraphType::Profile) + return ProfileGraphs.Toggle(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.Toggle(GraphID); +} + +//This is used to set the text color +Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type) +{ + if (Type == GraphType::Profile) + return ProfileGraphs.GetColor(GraphID); + else // Type == GraphType::Global + return GlobalGraphs.GetColor(GraphID); +} + +void GraphRenderer::Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type) +{ + if (GraphID == PERF_GRAPH_ERROR) + return; + + if (Type == GraphType::Profile) + { + float input[2] = {InputNode.x, InputNode.y}; + ProfileGraphs.m_Graphs[GraphID]->UpdateGraph(input, s_FrameID); + if (ProfileGraphs.m_Graphs[GraphID]->IsGraphed()) + { + float times[4] = {InputNode.x, InputNode.y}; + ProfileGraphs.ManageMax(times, PROFILE_NODE_COUNT, s_FrameID); + } + } + else // Type == PerfGraph::Global + { + GlobalGraphs.m_Graphs[0]->UpdateGraph(&InputNode.x, s_FrameID); + GlobalGraphs.m_Graphs[1]->UpdateGraph(&InputNode.y, s_FrameID); + GlobalGraphs.ManageMax(&InputNode.x, GLOBAL_NODE_COUNT, s_FrameID); + //GlobalGraphs.ManageMax(&InputNode.y, GLOBAL_NODE_COUNT, s_FrameID); + } +} + +void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMargin, float offsetY, float graphHeight, float* MinArray, + float* MaxArray, float* PresetMaxArray, bool GlobalScale, uint32_t numDebugVar, std::string graphTitles[]) +{ + XMFLOAT2 textSpaceY = XMFLOAT2(0.02f * graphHeight, 0.067f * graphHeight); //top and bottom text space + textSpaceY.y = graphHeight - topMargin - textSpaceY.x * 3.0f; // make this better + float textSpaceX = 45.f; + Text.SetColor(Color(1.0f, 1.0f, 1.0f)); + Text.SetTextSize(12.0f); + + float min = MinArray[0]; + float max = MaxArray[0]; + float presetMax = PresetMaxArray[0]; + + for (uint32_t i = 0; i < numDebugVar; i++) + { + if (!GlobalScale) + { + min = MinArray[i]; + max = MaxArray[i]; + presetMax = PresetMaxArray[i]; + } + + Text.SetCursorY(topMargin / 2.0f + (i * graphHeight) + offsetY); // division needs to be a factor + Text.SetCursorX(leftMargin + (0.4f * textSpaceX)); + Text.DrawString(graphTitles[i]); + Text.DrawFormattedString("Min:%3.3f Max:%3.3f", min, max); + + Text.SetCursorX(leftMargin - textSpaceX); + float topText = topMargin + (i * graphHeight); + Text.SetCursorY(topText + textSpaceY.x + offsetY); + Text.DrawFormattedString("%3.3f", presetMax); + + Text.SetCursorX(leftMargin - textSpaceX); + Text.SetCursorY(topText + textSpaceY.y + offsetY); + Text.DrawString("0.000"); + } +} + +void GraphRenderer::RenderGraphs(GraphicsContext& Context, GraphType Type) +{ + if (Type == GraphType::Global && GlobalGraphs.Size() == 0 || + Type == GraphType::Profile && ProfileGraphs.Size() == 0) + { + s_FrameID++; // probably need to reset this after time = uint32_t max val + return; + } + + TextContext Text(Context); + Text.Begin(); + + if (Type == GraphType::Profile && ProfileGraphs.GetActiveGraphCount() > 0) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 1.3525f; + viewport.TopLeftY = 0.0f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / (PROFILE_DEBUG_VAR_COUNT + 1); + viewport.MinDepth = 0.0; + viewport.MaxDepth = 1.0; + + std::string graphTitles[PROFILE_DEBUG_VAR_COUNT] = {"Inclusive CPU ", "Inclusive GPU "}; + float blankSpace = viewport.Height / (PROFILE_DEBUG_VAR_COUNT + 1); + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + DrawGraphHeaders(Text, (viewport.TopLeftX), blankSpace, 0.0f, (viewport.Height + blankSpace), ProfileGraphs.GetMin(), + ProfileGraphs.GetMax(), ProfileGraphs.GetPresetMax(), false, PROFILE_DEBUG_VAR_COUNT, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render backgrounds + PerfGraph::RenderGraph(Context, 4, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + viewport.TopLeftY = 0.0f; + + for (auto iter = ProfileGraphs.m_Graphs.begin(); iter != ProfileGraphs.m_Graphs.end(); ++iter) + { + if ((*iter)->IsGraphed()) + { + (*iter)->RenderGraph(Context, 256, viewport, PROFILE_DEBUG_VAR_COUNT, blankSpace, ProfileGraphs.GetPresetMax(), s_FrameID); + viewport.TopLeftY = 0.0f; + } + } + } + else if (Type == GraphType::Global) + { + D3D12_VIEWPORT viewport; + viewport.TopLeftX = (float)g_OverlayBuffer.GetWidth() / 4.0f; + viewport.TopLeftY = (float)g_OverlayBuffer.GetHeight() / 1.3f; + viewport.Width = (float)g_OverlayBuffer.GetWidth() / 2.0f; + viewport.Height = (float)g_OverlayBuffer.GetHeight() / 8.0f; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + float blankSpace = viewport.Height / 8.0f; + XMFLOAT2 textSpace = XMFLOAT2(45.0f, 5.0f); + std::string graphTitles[] = { "CPU - GPU " }; + DrawGraphHeaders( Text, (viewport.TopLeftX), blankSpace, (viewport.TopLeftY - blankSpace - textSpace.y), (viewport.Height + blankSpace), + GlobalGraphs.GetMinAbs(), GlobalGraphs.GetMaxAbs(), GlobalGraphs.GetPresetMax(), true, 1, graphTitles); + + Context.SetRootSignature(s_RootSignature); + Context.TransitionResource(g_OverlayBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); + Context.SetRenderTarget(g_OverlayBuffer.GetRTV()); + Context.SetPipelineState(s_GraphBackgroundPSO); + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + + // Render background + PerfGraph::RenderGraph(Context, 4, viewport, 1, 0.0f); + + // Render graphs + Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_LINESTRIP); + for (auto iter = GlobalGraphs.m_Graphs.begin(); iter != GlobalGraphs.m_Graphs.end(); ++iter) + { + (*iter)->RenderGraph(Context, 512, viewport, 1, 0.0f, GlobalGraphs.GetPresetMax(), s_FrameID); + } + } + s_FrameID++; + Text.End(); + Context.SetViewport(0, 0, 1920, 1080); +} + +void GraphRenderer::SetSelectedIndex(uint32_t selectedIndex) +{ + s_SelectedTimerIndex = selectedIndex; +} + +//--------------------------------------------------------------------- +// +// PerfGraph Methods +// +//--------------------------------------------------------------------- + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin) +{ + viewport.TopLeftY += topMargin; + + Context.SetConstants(3, 0, 20.0f); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph(GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, float YScale, uint32_t frameID) +{ + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / YScale); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} + +void PerfGraph::RenderGraph( GraphicsContext& Context, uint32_t vertexCount, D3D12_VIEWPORT& viewport, uint32_t debugVarCount, float topMargin, const float* MaxArray, uint32_t frameID) +{ + ASSERT(MaxArray != nullptr); + viewport.TopLeftY += topMargin; + + CBGraph graphConstants; + graphConstants.RGB[0] = m_Color.R(); + graphConstants.RGB[1] = m_Color.G(); + graphConstants.RGB[2] = m_Color.B(); + graphConstants.RcpXScale = 2.0f / m_NodeCount; + graphConstants.NodeCount = m_NodeCount; + graphConstants.FrameID = frameID; + Context.SetDynamicConstantBufferView(0, sizeof(CBGraph), &graphConstants); + Context.SetPipelineState(s_RenderPerfGraphPSO); + + for (uint32_t i = 0; i < debugVarCount; ++i) + { + Context.SetDynamicSRV(2, sizeof(float) * m_NodeCount, m_PerfTimesCPUBuffer[i].get()); + Context.SetConstants(3, i, 1.0f / MaxArray[i]); + Context.SetViewport(viewport); + Context.Draw(vertexCount); + if (debugVarCount > 1) + viewport.TopLeftY += viewport.Height + topMargin; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.h new file mode 100644 index 0000000..c8509be --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/GraphRenderer.h @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "GraphicsCore.h" + +namespace GraphRenderer +{ + void Initialize(); + void Shutdown(); + + enum class GraphType { Global, Profile }; + typedef uint32_t GraphHandle; + + bool ManageGraphs( GraphHandle graphID, GraphType Type ); + GraphHandle InitGraph( GraphType Type ); + Color GetGraphColor( GraphHandle GraphID, GraphType Type); + XMFLOAT4 GetMaxAvg( GraphType Type ); + void Update( XMFLOAT2 InputNode, GraphHandle GraphID, GraphType Type); + void RenderGraphs( GraphicsContext& Context, GraphType Type ); + + void SetSelectedIndex(uint32_t selectedIndex); + +} // namespace GraphRenderer diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.cpp new file mode 100644 index 0000000..0e925b8 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "TextRenderer.h" +#include "FileUtility.h" +#include "TextureManager.h" +#include "SystemTime.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "PipelineState.h" +#include "RootSignature.h" +#include "BufferManager.h" +#include "CompiledShaders/TextVS.h" +#include "CompiledShaders/TextAntialiasPS.h" +#include "CompiledShaders/TextShadowPS.h" +#include "Fonts/consola24.h" +#include +#include +#include +#include +#include + +using namespace Graphics; +using namespace Math; +using namespace std; + +namespace TextRenderer +{ + class Font + { + public: + Font() + { + m_NormalizeXCoord = 0.0f; + m_NormalizeYCoord = 0.0f; + m_FontLineSpacing = 0.0f; + m_AntialiasRange = 0.0f; + m_FontHeight = 0; + m_BorderSize = 0; + m_TextureWidth = 0; + m_TextureHeight = 0; + } + + ~Font() + { + m_Dictionary.clear(); + } + + void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary, const size_t binarySize ) + { + (fontName); + + // We should at least use this to assert that we have a complete file + (binarySize); + + struct FontHeader + { + char FileDescriptor[8]; // "SDFFONT\0" + uint8_t majorVersion; // '1' + uint8_t minorVersion; // '0' + uint16_t borderSize; // Pixel empty space border width + uint16_t textureWidth; // Width of texture buffer + uint16_t textureHeight; // Height of texture buffer + uint16_t fontHeight; // Font height in 12.4 + uint16_t advanceY; // Line height in 12.4 + uint16_t numGlyphs; // Glyph count in texture + uint16_t searchDist; // Range of search space 12.4 + }; + + FontHeader* header = (FontHeader*)pBinary; + m_NormalizeXCoord = 1.0f / (header->textureWidth * 16); + m_NormalizeYCoord = 1.0f / (header->textureHeight * 16); + m_FontHeight = header->fontHeight; + m_FontLineSpacing = (float)header->advanceY / (float)header->fontHeight; + m_BorderSize = header->borderSize * 16; + m_AntialiasRange = (float)header->searchDist / header->fontHeight; + uint16_t textureWidth = header->textureWidth; + uint16_t textureHeight = header->textureHeight; + uint16_t NumGlyphs = header->numGlyphs; + + const wchar_t* wcharList = (wchar_t*)(pBinary + sizeof(FontHeader)); + const Glyph* glyphData = (Glyph*)(wcharList + NumGlyphs); + const void* texelData = glyphData + NumGlyphs; + + for (uint16_t i = 0; i < NumGlyphs; ++i) + m_Dictionary[wcharList[i]] = glyphData[i]; + + m_Texture.Create( textureWidth, textureHeight, DXGI_FORMAT_R8_SNORM, texelData ); + + DEBUGPRINT( "Loaded SDF font: %ls (ver. %d.%d)", fontName, header->majorVersion, header->minorVersion); + } + + bool Load( const wstring& fileName ) + { + Utility::ByteArray ba = Utility::ReadFileSync( fileName ); + + if (ba->size() == 0) + { + ERROR( "Cannot open file %ls", fileName.c_str() ); + return false; + } + + LoadFromBinary( fileName.c_str(), ba->data(), ba->size() ); + + return true; + } + + // Each character has an XY start offset, a width, and they all share the same height + struct Glyph + { + uint16_t x, y, w; + int16_t bearing; + uint16_t advance; + }; + + const Glyph* GetGlyph( wchar_t ch ) const + { + auto it = m_Dictionary.find( ch ); + return it == m_Dictionary.end() ? nullptr : &it->second; + } + + // Get the texel height of the font in 12.4 fixed point + uint16_t GetHeight( void ) const { return m_FontHeight; } + + // Get the size of the border in 12.4 fixed point + uint16_t GetBorderSize( void ) const { return m_BorderSize; } + + // Get the line advance height given a certain font size + float GetVerticalSpacing( float size ) const { return size * m_FontLineSpacing; } + + // Get the texture object + const Texture& GetTexture( void ) const { return m_Texture; } + + float GetXNormalizationFactor() const { return m_NormalizeXCoord; } + float GetYNormalizationFactor() const { return m_NormalizeYCoord; } + + // Get the range in terms of height values centered on the midline that represents a pixel + // in screen space (according to the specified font size.) + // The pixel alpha should range from 0 to 1 over the height range 0.5 +/- 0.5 * aaRange. + float GetAntialiasRange( float size ) const { return Max( 1.0f, size * m_AntialiasRange ); } + + private: + float m_NormalizeXCoord; + float m_NormalizeYCoord; + float m_FontLineSpacing; + float m_AntialiasRange; + uint16_t m_FontHeight; + uint16_t m_BorderSize; + uint16_t m_TextureWidth; + uint16_t m_TextureHeight; + Texture m_Texture; + map m_Dictionary; + }; + + map< wstring, unique_ptr > LoadedFonts; + + const Font* GetOrLoadFont(const wstring& filename) + { + auto fontIter = LoadedFonts.find( filename ); + if (fontIter != LoadedFonts.end()) + return fontIter->second.get(); + + Font* newFont = new Font(); + if (filename == L"default") + newFont->LoadFromBinary(L"default", g_pconsola24, sizeof(g_pconsola24)); + else + newFont->Load(L"Fonts/" + filename + L".fnt"); + LoadedFonts[filename].reset(newFont); + return newFont; + } + + RootSignature s_RootSignature; + GraphicsPSO s_TextPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + GraphicsPSO s_ShadowPSO[2]; // 0: R8G8B8A8_UNORM 1: R11G11B10_FLOAT + + +} // namespace TextRenderer + +void TextRenderer::Initialize( void ) +{ + s_RootSignature.Reset(3, 1); + s_RootSignature.InitStaticSampler(0, SamplerLinearClampDesc, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX); + s_RootSignature[1].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature[2].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 1, D3D12_SHADER_VISIBILITY_PIXEL); + s_RootSignature.Finalize(L"TextRenderer", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // The glyph vertex description. One vertex will correspond to a single character. + D3D12_INPUT_ELEMENT_DESC vertElem[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT , 0, 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }, + { "TEXCOORD", 0, DXGI_FORMAT_R16G16B16A16_UINT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 } + }; + + s_TextPSO[0].SetRootSignature(s_RootSignature); + s_TextPSO[0].SetRasterizerState( Graphics::RasterizerTwoSided ); + s_TextPSO[0].SetBlendState( Graphics::BlendPreMultiplied ); + s_TextPSO[0].SetDepthStencilState( Graphics::DepthStateDisabled ); + s_TextPSO[0].SetInputLayout(_countof(vertElem), vertElem); + s_TextPSO[0].SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + s_TextPSO[0].SetVertexShader( g_pTextVS, sizeof(g_pTextVS) ); + s_TextPSO[0].SetPixelShader( g_pTextAntialiasPS, sizeof(g_pTextAntialiasPS) ); + s_TextPSO[0].SetRenderTargetFormats(1, &g_OverlayBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[0].Finalize(); + + s_TextPSO[1] = s_TextPSO[0]; + s_TextPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_TextPSO[1].Finalize(); + + s_ShadowPSO[0] = s_TextPSO[0]; + s_ShadowPSO[0].SetPixelShader(g_pTextShadowPS, sizeof(g_pTextShadowPS) ); + s_ShadowPSO[0].Finalize(); + + s_ShadowPSO[1] = s_ShadowPSO[0]; + s_ShadowPSO[1].SetRenderTargetFormats(1, &g_SceneColorBuffer.GetFormat(), DXGI_FORMAT_UNKNOWN); + s_ShadowPSO[1].Finalize(); +} + +void TextRenderer::Shutdown( void ) +{ + LoadedFonts.clear(); +} + +TextContext::TextContext( GraphicsContext& CmdContext, float ViewWidth, float ViewHeight ) + : m_Context(CmdContext) +{ + m_HDR = FALSE; + m_CurrentFont = nullptr; + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + // Transform from text view space to clip space. + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + + // The font texture dimensions are still unknown + m_VSParams.NormalizeX = 1.0f; + m_VSParams.NormalizeY = 1.0f; + + ResetSettings(); +} + +void TextContext::ResetSettings( void ) +{ + m_EnableShadow = true; + ResetCursor(0.0f, 0.0f); + m_ShadowOffsetX = 0.05f; + m_ShadowOffsetY = 0.05f; + m_PSParams.ShadowHardness = 0.5f; + m_PSParams.ShadowOpacity = 1.0f; + m_PSParams.TextColor = Color(1.0f, 1.0f, 1.0f, 1.0f); + + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; + + SetFont( L"default", 24.0f ); +} + +void TextContext::SetLeftMargin( float x ) { m_LeftMargin = x; } +void TextContext::SetCursorX( float x ) { m_TextPosX = x; } +void TextContext::SetCursorY( float y ) { m_TextPosY = y; } +void TextContext::NewLine( void ) { m_TextPosX = m_LeftMargin; m_TextPosY += m_LineHeight; } +float TextContext::GetLeftMargin( void ) { return m_LeftMargin; } +float TextContext::GetCursorX( void ) { return m_TextPosX; } +float TextContext::GetCursorY( void ) { return m_TextPosY; } + + +void TextContext::ResetCursor(float x, float y) +{ + m_LeftMargin = x; + m_TextPosX = x; + m_TextPosY = y; +} + +void TextContext::EnableDropShadow(bool enable) +{ + if (m_EnableShadow == enable) + return; + + m_EnableShadow = enable; + + m_Context.SetPipelineState( m_EnableShadow ? TextRenderer::s_ShadowPSO[m_HDR] : TextRenderer::s_TextPSO[m_HDR] ); +} + +void TextContext::SetShadowOffset(float xPercent, float yPercent) +{ + m_ShadowOffsetX = xPercent; + m_ShadowOffsetY = yPercent; + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetShadowParams(float opacity, float width) +{ + m_PSParams.ShadowHardness = 1.0f / width; + m_PSParams.ShadowOpacity = opacity; + m_PSConstantBufferIsStale = true; +} + +void TextContext::SetColor( Color c ) +{ + m_PSParams.TextColor = c; + m_PSConstantBufferIsStale = true; +} + +float TextContext::GetVerticalSpacing( void ) +{ + return m_LineHeight; +} + +void TextContext::Begin( bool EnableHDR ) +{ + ResetSettings(); + + m_HDR = (BOOL)EnableHDR; + + m_Context.SetRootSignature(TextRenderer::s_RootSignature); + m_Context.SetPipelineState(TextRenderer::s_ShadowPSO[m_HDR]); + m_Context.SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); +} + +void TextContext::SetFont( const wstring& fontName, float size ) +{ + // If that font is already set or doesn't exist, return. + const TextRenderer::Font* NextFont = TextRenderer::GetOrLoadFont( fontName ); + if (NextFont == m_CurrentFont || NextFont == nullptr) + { + if (size > 0.0f) + SetTextSize(size); + + return; + } + + m_CurrentFont = NextFont; + + // Check to see if a new size was specified + if (size > 0.0f) + m_VSParams.TextSize = size; + + // Update constants directly tied to the font or the font size + m_LineHeight = NextFont->GetVerticalSpacing( m_VSParams.TextSize ); + m_VSParams.NormalizeX = m_CurrentFont->GetXNormalizationFactor(); + m_VSParams.NormalizeY = m_CurrentFont->GetYNormalizationFactor(); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_VSParams.SrcBorder = m_CurrentFont->GetBorderSize(); + m_PSParams.ShadowOffsetX = m_CurrentFont->GetHeight() * m_ShadowOffsetX * m_VSParams.NormalizeX; + m_PSParams.ShadowOffsetY = m_CurrentFont->GetHeight() * m_ShadowOffsetY * m_VSParams.NormalizeY; + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetTextSize( float size ) +{ + if (m_VSParams.TextSize == size) + return; + + m_VSParams.TextSize = size; + m_VSConstantBufferIsStale = true; + + if (m_CurrentFont != nullptr) + { + m_PSParams.HeightRange = m_CurrentFont->GetAntialiasRange( m_VSParams.TextSize ); + m_VSParams.Scale = m_VSParams.TextSize / m_CurrentFont->GetHeight(); + m_VSParams.DstBorder = m_CurrentFont->GetBorderSize() * m_VSParams.Scale; + m_PSConstantBufferIsStale = true; + m_LineHeight = m_CurrentFont->GetVerticalSpacing( size ); + } + else + m_LineHeight = 0.0f; +} + +void TextContext::SetViewSize( float ViewWidth, float ViewHeight ) +{ + m_ViewWidth = ViewWidth; + m_ViewHeight = ViewHeight; + + const float vpX = 0.0f; + const float vpY = 0.0f; + const float twoDivW = 2.0f / ViewWidth; + const float twoDivH = 2.0f / ViewHeight; + + // Essentially transform from screen coordinates to to clip space with W = 1. + m_VSParams.ViewportTransform = Vector4(twoDivW, -twoDivH, -vpX * twoDivW - 1.0f, vpY * twoDivH + 1.0f); + m_VSConstantBufferIsStale = true; +} + +void TextContext::End( void ) +{ + m_VSConstantBufferIsStale = true; + m_PSConstantBufferIsStale = true; + m_TextureIsStale = true; +} + +void TextContext::SetRenderState( void ) +{ + WARN_ONCE_IF(nullptr == m_CurrentFont, "Attempted to draw text without a font"); + + if (m_VSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(0, sizeof(m_VSParams), &m_VSParams); + m_VSConstantBufferIsStale = false; + } + + if (m_PSConstantBufferIsStale) + { + m_Context.SetDynamicConstantBufferView(1, sizeof(m_PSParams), &m_PSParams); + m_PSConstantBufferIsStale = false; + } + + if (m_TextureIsStale) + { + m_Context.SetDynamicDescriptors(2, 0, 1, &m_CurrentFont->GetTexture().GetSRV()); + m_TextureIsStale = false; + } +} + +// These are made with templates to handle char and wchar_t simultaneously. +UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ) +{ + UINT charsDrawn = 0; + + const float UVtoPixel = m_VSParams.Scale; + + float curX = m_TextPosX; + float curY = m_TextPosY; + + const uint16_t texelHeight = m_CurrentFont->GetHeight(); + + const char* iter = str; + for (size_t i = 0; i < slen; ++i) + { + wchar_t wc = (stride == 2 ? *(wchar_t*)iter : *iter); + iter += stride; + + // Terminate on null character (this really shouldn't happen with string or wstring) + if (wc == L'\0') + break; + + // Handle newlines by inserting a carriage return and line feed + if (wc == L'\n') + { + curX = m_LeftMargin; + curY += m_LineHeight; + continue; + } + + const TextRenderer::Font::Glyph* gi = m_CurrentFont->GetGlyph(wc); + + // Ignore missing characters + if (nullptr == gi) + continue; + + verts->X = curX + (float)gi->bearing * UVtoPixel; + verts->Y = curY; + verts->U = gi->x; + verts->V = gi->y; + verts->W = gi->w; + verts->H = texelHeight; + ++verts; + + // Advance the cursor position + curX += (float)gi->advance * UVtoPixel; + ++charsDrawn; + } + + m_TextPosX = curX; + m_TextPosY = curY; + + return charsDrawn; +} + +void TextContext::DrawString( const std::wstring& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 2, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawString( const std::string& str ) +{ + SetRenderState(); + + void* stackMem = _malloca((str.size() + 1) * 16); + TextVert* vbPtr = Math::AlignUp((TextVert*)stackMem, 16); + UINT primCount = FillVertexBuffer(vbPtr, (char*)str.c_str(), 1, str.size()); + + if (primCount > 0) + { + m_Context.SetDynamicVB(0, primCount, sizeof(TextVert), vbPtr); + m_Context.DrawInstanced( 4, primCount ); + } + + _freea(stackMem); +} + +void TextContext::DrawFormattedString( const wchar_t* format, ... ) +{ + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf( buffer, 256, format, ap ); + DrawString( wstring(buffer) ); +} + +void TextContext::DrawFormattedString( const char* format, ... ) +{ + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s( buffer, 256, format, ap ); + DrawString( string(buffer) ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.h new file mode 100644 index 0000000..39d0fb4 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Renderer/TextRenderer.h @@ -0,0 +1,151 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Color.h" +#include "Math/Vector.h" +#include + +class Color; +class GraphicsContext; + +namespace TextRenderer +{ + // Initialize the text renderer's resources and designate the dimensions of the drawable + // view space. These dimensions do not have to match the actual pixel width and height of + // the viewport. Instead they create a coordinate space for placing text within the + // viewport. For instance, if you specify a ViewWidth of 2.0f, then CursorX = 1.0f marks + // the middle of the viewport. + void Initialize( void ); + void Shutdown( void ); + + class Font; +} + +class TextContext +{ +public: + TextContext( GraphicsContext& CmdContext, float CanvasWidth = 1920.0f, float CanvasHeight = 1080.0f ); + + GraphicsContext& GetCommandContext() const { return m_Context; } + + // Put settings back to the defaults. + void ResetSettings( void ); + + // + // Control various text properties + // + + // Choose a font from the Fonts folder. Previously loaded fonts are cached in memory. + void SetFont( const std::wstring& fontName, float TextSize = 0.0f ); + + // Resize the view space. This determines the coordinate space of the cursor position and font size. You can always + // set the view size to the same dimensions regardless of actual display resolution. It is assumed, however, that the + // aspect ratio of this virtual coordinate system matches the actual display aspect ratio. + void SetViewSize( float ViewWidth, float ViewHeight ); + + // Set the size of the text relative to the ViewHeight. The aspect of the text is preserved from + // the TTF as long as the aspect ratio of the view space is the same as the actual viewport. + void SetTextSize( float PixelHeight ); + + // Move the cursor position--the upper-left anchor for the text. + void ResetCursor( float x, float y ); + void SetLeftMargin( float x ); + void SetCursorX( float x ); + void SetCursorY( float y ); + void NewLine( void ); + float GetLeftMargin( void ); + float GetCursorX( void ); + float GetCursorY( void ); + + // Turn on or off drop shadow. + void EnableDropShadow( bool enable ); + + // Adjust shadow parameters. + void SetShadowOffset( float xPercent, float yPercent ); + void SetShadowParams( float opacity, float width ); + + // Set the color and transparency of text. + void SetColor( Color color ); + + // Get the amount to advance the Y position to begin a new line + float GetVerticalSpacing( void ); + + // + // Rendering commands + // + + // Begin and end drawing commands + void Begin( bool EnableHDR = false ); + void End( void ); + + // Draw a string + void DrawString( const std::wstring& str ); + void DrawString( const std::string& str ); + + // A more powerful function which formats text like printf(). Very slow by comparison, so use it + // only if you're going to format text anyway. + void DrawFormattedString( const wchar_t* format, ... ); + void DrawFormattedString( const char* format, ... ); + +private: + + __declspec(align(16)) struct VertexShaderParams + { + Math::Vector4 ViewportTransform; + float NormalizeX, NormalizeY, TextSize; + float Scale, DstBorder; + uint32_t SrcBorder; + }; + + __declspec(align(16)) struct PixelShaderParams + { + Color TextColor; + float ShadowOffsetX, ShadowOffsetY; + float ShadowHardness; // More than 1 will cause aliasing + float ShadowOpacity; // Should make less opaque when making softer + float HeightRange; + }; + + void SetRenderState(void); + + // 16 Byte structure to represent an entire glyph in the text vertex buffer + __declspec(align(16)) struct TextVert + { + float X, Y; // Upper-left glyph position in screen space + uint16_t U, V, W, H; // Upper-left glyph UV and the width in texture space + }; + + UINT FillVertexBuffer( TextVert volatile* verts, const char* str, size_t stride, size_t slen ); + void DrawStringInternal( const std::string& str ); + void DrawStringInternal( const std::wstring& str ); + + GraphicsContext& m_Context; + const TextRenderer::Font* m_CurrentFont; + VertexShaderParams m_VSParams; + PixelShaderParams m_PSParams; + bool m_VSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_PSConstantBufferIsStale; // Tracks when the CB needs updating + bool m_TextureIsStale; + bool m_EnableShadow; + float m_LeftMargin; + float m_TextPosX; + float m_TextPosY; + float m_LineHeight; + float m_ViewWidth; // Width of the drawable area + float m_ViewHeight; // Height of the drawable area + float m_ShadowOffsetX; // Percentage of the font's TextSize should the shadow be offset + float m_ShadowOffsetY; // Percentage of the font's TextSize should the shadow be offset + BOOL m_HDR; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.cpp new file mode 100644 index 0000000..ea11a4d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.cpp @@ -0,0 +1,195 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "BufferManager.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +namespace Graphics +{ + DepthBuffer g_SceneDepthBuffer; + ColorBuffer g_SceneColorBuffer; + ColorCubeBuffer g_SceneCubeBuff; + ColorBuffer g_OverlayBuffer; + ColorBuffer g_HorizontalBuffer; + + ShadowBuffer g_ShadowBuffer; + + DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT; +} + +#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM +#define HDR_MOTION_FORMAT DXGI_FORMAT_R16G16B16A16_FLOAT +#define DSV_FORMAT DXGI_FORMAT_D24_UNORM_S8_UINT + +void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight ) +{ + GraphicsContext& InitContext = GraphicsContext::Begin(); + +// const uint32_t bufferWidth1 = (bufferWidth + 1) / 2; +// const uint32_t bufferWidth2 = (bufferWidth + 3) / 4; +// const uint32_t bufferWidth3 = (bufferWidth + 7) / 8; +// const uint32_t bufferWidth4 = (bufferWidth + 15) / 16; +// const uint32_t bufferWidth5 = (bufferWidth + 31) / 32; +// const uint32_t bufferWidth6 = (bufferWidth + 63) / 64; +// const uint32_t bufferHeight1 = (bufferHeight + 1) / 2; +// const uint32_t bufferHeight2 = (bufferHeight + 3) / 4; +// const uint32_t bufferHeight3 = (bufferHeight + 7) / 8; +// const uint32_t bufferHeight4 = (bufferHeight + 15) / 16; +// const uint32_t bufferHeight5 = (bufferHeight + 31) / 32; +// const uint32_t bufferHeight6 = (bufferHeight + 63) / 64; + + EsramAllocator esram; + + esram.PushStack(); + + g_SceneColorBuffer.Create(L"Main Color Buffer", bufferWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); +// g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); +// g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT); + + esram.PushStack(); // Render HDR image + +// g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM); +// g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram); +// g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram); + + g_SceneDepthBuffer.Create(L"Scene Depth Buffer", bufferWidth, bufferHeight, DSV_FORMAT, esram); + +// esram.PushStack(); // Begin opaque geometry +// +// esram.PushStack(); // Begin Shading +// +// g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM); +// +// esram.PushStack(); // Begin generating SSAO +// g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram); +// g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram); +// g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram); +// esram.PopStack(); // End generating SSAO +// + g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram); +// +// esram.PopStack(); // End Shading +// +// esram.PushStack(); // Begin depth of field +// g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT); +// +// g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram); +// g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram); +// esram.PopStack(); // End depth of field +// +// g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT); +// TemporalEffects::ClearHistory(InitContext); +// +// esram.PushStack(); // Begin motion blur +// g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram); +// esram.PopStack(); // End motion blur +// +// esram.PopStack(); // End opaque geometry +// +// esram.PopStack(); // End HDR image +// +// esram.PushStack(); // Begin post processing +// +// // This is useful for storing per-pixel weights such as motion strength or pixel luminance +// g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram); +// g_Histogram.Create(L"Histogram", 256, 4, esram); +// +// // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom +// // dimensions must be at least 1/4 native resolution to avoid undersampling. +// //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640; +// //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384; +// uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640; +// uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384; +// +// esram.PushStack(); // Begin bloom and tone mapping +// g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram); +// g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram); +// esram.PopStack(); // End tone mapping +// +// esram.PushStack(); // Begin antialiasing +// const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128; +// g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram); +// g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t)); +// InitContext.ClearUAV(g_FXAAWorkCounters); +// esram.PopStack(); // End antialiasing +// +// esram.PopStack(); // End post processing +// +// esram.PushStack(); // GenerateMipMaps() test +// g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram); +// esram.PopStack(); + + g_SceneCubeBuff.Create(L"scene cube buffer", 1024, 1024, 1, DefaultHdrColorFormat); + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM, esram); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, bufferHeight, 1, DefaultHdrColorFormat, esram); + + esram.PopStack(); // End final image + + InitContext.Finish(); +} + +void Graphics::ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight) +{ + g_OverlayBuffer.Create(L"UI Overlay", g_DisplayWidth, g_DisplayHeight, 1, DXGI_FORMAT_R8G8B8A8_UNORM); + g_HorizontalBuffer.Create(L"Bicubic Intermediate", g_DisplayWidth, NativeHeight, 1, DefaultHdrColorFormat); +} + +void Graphics::DestroyRenderingBuffers() +{ + g_SceneDepthBuffer.Destroy(); + g_SceneColorBuffer.Destroy(); + g_SceneCubeBuff.Destroy(); + g_OverlayBuffer.Destroy(); + g_HorizontalBuffer.Destroy(); + g_ShadowBuffer.Destroy(); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.h new file mode 100644 index 0000000..d53e491 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/BufferManager.h @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "ColorBuffer.h" +#include "ColorCubeBuffer.h" +#include "DepthBuffer.h" +#include "ShadowBuffer.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" + +namespace Graphics +{ + extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT + extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT + extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM + extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling + extern ColorCubeBuffer g_SceneCubeBuff; // ��պ�6��RTV��colorbuffer + + extern ShadowBuffer g_ShadowBuffer; + + void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight ); + void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight); + void DestroyRenderingBuffers(); + +} // namespace Graphics diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.cpp new file mode 100644 index 0000000..ddd3f34 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.cpp @@ -0,0 +1,222 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ColorBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + + +void ColorBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ASSERT(ArraySize == 1 || NumMips == 1, "We don't support auto-mips on texture arrays"); + + m_NumMipMaps = NumMips - 1; + + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + + RTVDesc.Format = Format; + UAVDesc.Format = GetUAVFormat(Format); + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (ArraySize > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = 0; + RTVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + UAVDesc.Texture2DArray.MipSlice = 0; + UAVDesc.Texture2DArray.FirstArraySlice = 0; + UAVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = NumMips; + SRVDesc.Texture2DArray.MostDetailedMip = 0; + SRVDesc.Texture2DArray.FirstArraySlice = 0; + SRVDesc.Texture2DArray.ArraySize = (UINT)ArraySize; + } + else if (m_FragmentCount > 1) + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + else + { + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + RTVDesc.Texture2D.MipSlice = 0; + + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + UAVDesc.Texture2D.MipSlice = 0; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = NumMips; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + } + + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the render target view + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle); + + // Create the shader resource view + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + if (m_FragmentCount > 1) + return; + + // Create the UAVs for each mip level (RWTexture2D) + for (uint32_t i = 0; i < NumMips; ++i) + { + if (m_UAVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateUnorderedAccessView(Resource, nullptr, &UAVDesc, m_UAVHandle[i]); + + UAVDesc.Texture2D.MipSlice++; + } +} + +void ColorBuffer::CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ) +{ + AssociateWithResource(Graphics::g_Device, Name, BaseResource, D3D12_RESOURCE_STATE_PRESENT); + + //m_UAVHandle[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + //Graphics::g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, nullptr, m_UAVHandle[0]); + + m_RTVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + Graphics::g_Device->CreateRenderTargetView(m_pResource.Get(), nullptr, m_RTVHandle); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + NumMips = (NumMips == 0 ? ComputeNumMips(Width, Height) : NumMips); + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, NumMips, Format, Flags); + + ResourceDesc.SampleDesc.Count = m_FragmentCount; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 1, NumMips); +} + +void ColorBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator&) +{ + Create(Name, Width, Height, NumMips, Format); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem ) +{ + D3D12_RESOURCE_FLAGS Flags = CombineResourceFlags(); + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, ArrayCount, 1, Format, Flags); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, ArrayCount, 1); +} + +void ColorBuffer::CreateArray( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& ) +{ + CreateArray(Name, Width, Height, ArrayCount, Format); +} + +void ColorBuffer::GenerateMipMaps(CommandContext& BaseContext) +{ + if (m_NumMipMaps == 0) + return; + + ComputeContext& Context = BaseContext.GetComputeContext(); + + Context.SetRootSignature(Graphics::g_GenerateMipsRS); + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + Context.SetDynamicDescriptor(1, 0, m_SRVHandle); + + for (uint32_t TopMip = 0; TopMip < m_NumMipMaps; ) + { + uint32_t SrcWidth = m_Width >> TopMip; + uint32_t SrcHeight = m_Height >> TopMip; + uint32_t DstWidth = SrcWidth >> 1; + uint32_t DstHeight = SrcHeight >> 1; + + // Determine if the first downsample is more than 2:1. This happens whenever + // the source width or height is odd. + uint32_t NonPowerOfTwo = (SrcWidth & 1) | (SrcHeight & 1) << 1; + if (m_Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + Context.SetPipelineState(Graphics::g_GenerateMipsGammaPSO[NonPowerOfTwo]); + else + Context.SetPipelineState(Graphics::g_GenerateMipsLinearPSO[NonPowerOfTwo]); + + // We can downsample up to four times, but if the ratio between levels is not + // exactly 2:1, we have to shift our blend weights, which gets complicated or + // expensive. Maybe we can update the code later to compute sample weights for + // each successive downsample. We use _BitScanForward to count number of zeros + // in the low bits. Zeros indicate we can divide by two without truncating. + uint32_t AdditionalMips; + _BitScanForward((unsigned long*)&AdditionalMips, + (DstWidth == 1 ? DstHeight : DstWidth) | (DstHeight == 1 ? DstWidth : DstHeight)); + uint32_t NumMips = 1 + (AdditionalMips > 3 ? 3 : AdditionalMips); + if (TopMip + NumMips > m_NumMipMaps) + NumMips = m_NumMipMaps - TopMip; + + // These are clamped to 1 after computing additional mips because clamped + // dimensions should not limit us from downsampling multiple times. (E.g. + // 16x1 -> 8x1 -> 4x1 -> 2x1 -> 1x1.) + if (DstWidth == 0) + DstWidth = 1; + if (DstHeight == 0) + DstHeight = 1; + + Context.SetConstants(0, TopMip, NumMips, 1.0f / DstWidth, 1.0f / DstHeight); + Context.SetDynamicDescriptors(2, 0, NumMips, m_UAVHandle + TopMip + 1); + Context.Dispatch2D(DstWidth, DstHeight); + + Context.InsertUAVBarrier(*this); + + TopMip += NumMips; + } + + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.h new file mode 100644 index 0000000..d376dae --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorBuffer.h @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle: ��ȾĿ����ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + m_UAVHandle[12]: ���������ͼ ����ͨ��Create�����Ļ������Żᴴ������ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorBuffer : public PixelBuffer +{ +public: + ColorBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor), m_NumMipMaps(0), m_FragmentCount(1), m_SampleCount(1) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_RTVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_UAVHandle, 0xFF, sizeof(m_UAVHandle)); + } + + // Create a color buffer from a swap chain buffer. Unordered access is restricted. + void CreateFromSwapChain( const std::wstring& Name, ID3D12Resource* BaseResource ); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Create a color buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void CreateArray(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t ArrayCount, + DXGI_FORMAT Format, EsramAllocator& Allocator); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(void) const { return m_RTVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAVHandle[0]; } + + void SetClearColor( Color ClearColor ) { m_ClearColor = ClearColor; } + + void SetMsaaMode( uint32_t NumColorSamples, uint32_t NumCoverageSamples ) + { + ASSERT(NumCoverageSamples >= NumColorSamples); + m_FragmentCount = NumColorSamples; + m_SampleCount = NumCoverageSamples; + } + + Color GetClearColor(void) const { return m_ClearColor; } + + // This will work for all texture sizes, but it's recommended for speed and quality + // that you use dimensions with powers of two (but not necessarily square.) Pass + // 0 for ArrayCount to reserve space for mips at creation time. + void GenerateMipMaps(CommandContext& Context); + +protected: + + D3D12_RESOURCE_FLAGS CombineResourceFlags( void ) const + { + D3D12_RESOURCE_FLAGS Flags = D3D12_RESOURCE_FLAG_NONE; + + if (Flags == D3D12_RESOURCE_FLAG_NONE && m_FragmentCount == 1) + Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + + return D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | Flags; + } + + // Compute the number of texture levels needed to reduce to 1x1. This uses + // _BitScanReverse to find the highest set bit. Each dimension reduces by + // half and truncates bits. The dimension 256 (0x100) has 9 mip levels, same + // as the dimension 511 (0x1FF). + static inline uint32_t ComputeNumMips(uint32_t Width, uint32_t Height) + { + uint32_t HighBit; + _BitScanReverse((unsigned long*)&HighBit, Width | Height); + return HighBit + 1; + } + + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_UAVHandle[12]; + uint32_t m_NumMipMaps; // number of texture sublevels + uint32_t m_FragmentCount; + uint32_t m_SampleCount; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp new file mode 100644 index 0000000..927b1cd --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.cpp @@ -0,0 +1,60 @@ +#include "pch.h" +#include "ColorCubeBuffer.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "EsramAllocator.h" + +using namespace Graphics; + +void ColorCubeBuffer::CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = Format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = 1; + + if (m_SRVHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRVHandle = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + Device->CreateShaderResourceView(Resource, &SRVDesc, m_SRVHandle); + + // Create the render target view + for (int i = 0; i < 6; ++i) + { + D3D12_RENDER_TARGET_VIEW_DESC RTVDesc = {}; + RTVDesc.Format = Format; + RTVDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY; + RTVDesc.Texture2DArray.MipSlice = 0; + RTVDesc.Texture2DArray.PlaneSlice = 0; + RTVDesc.Texture2DArray.FirstArraySlice = i; + RTVDesc.Texture2DArray.ArraySize = 1; + + if (m_RTVHandle[i].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_RTVHandle[i] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + + Device->CreateRenderTargetView(Resource, &RTVDesc, m_RTVHandle[i]); + } +} + +void ColorCubeBuffer::Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMem) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 6, NumMips, Format, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET); + + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + ClearValue.Color[0] = m_ClearColor.R(); + ClearValue.Color[1] = m_ClearColor.G(); + ClearValue.Color[2] = m_ClearColor.B(); + ClearValue.Color[3] = m_ClearColor.A(); + + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMem); + CreateDerivedViews(Graphics::g_Device, Format, 6, NumMips); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.h new file mode 100644 index 0000000..7e5e869 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ColorCubeBuffer.h @@ -0,0 +1,53 @@ +/* + ��պ���ɫ������ + �����ػ�������һ����װ�����ÿ�������д洢������ɫֵ + + ά����ͼ�� + m_SRVHandle: ��ɫ����Դ��ͼ + m_RTVHandle[6]: ��ȾĿ����ͼ + + CreateFromSwapChain�� ��װ�������Ļ�����(����) + Create: ֱ�Ӵ��������� +*/ + +#pragma once + +#include "PixelBuffer.h" +#include "Color.h" + +class EsramAllocator; + +class ColorCubeBuffer : public PixelBuffer +{ +public: + ColorCubeBuffer( Color ClearColor = Color(0.0f, 0.0f, 0.0f, 0.0f) ) + : m_ClearColor(ClearColor) + { + m_SRVHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + std::memset(m_RTVHandle, 0xFF, sizeof(m_RTVHandle)); + } + + // Create a color buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumMips, + DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRVHandle; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetRTV(int idx = 0) const { + if (idx < 0 || idx > 5) + idx = 0; + + return m_RTVHandle[idx]; + } + + Color GetClearColor(void) const { return m_ClearColor; } + +protected: + void CreateDerivedViews(ID3D12Device* Device, DXGI_FORMAT Format, uint32_t ArraySize, uint32_t NumMips = 1); + + Color m_ClearColor; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRVHandle; + D3D12_CPU_DESCRIPTOR_HANDLE m_RTVHandle[6]; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.cpp new file mode 100644 index 0000000..67f7e28 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.cpp @@ -0,0 +1,139 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "DepthBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "DescriptorHeap.h" + +using namespace Graphics; + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + D3D12_RESOURCE_DESC ResourceDesc = DescribeTex2D(Width, Height, 1, 1, Format, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL); + ResourceDesc.SampleDesc.Count = Samples; + + D3D12_CLEAR_VALUE ClearValue = {}; + ClearValue.Format = Format; + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + ClearValue.DepthStencil.Depth = 1.0f; + ClearValue.DepthStencil.Stencil = 0; + CreateTextureResource(Graphics::g_Device, Name, ResourceDesc, ClearValue, VidMemPtr); + CreateDerivedViews(Graphics::g_Device, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Format); +} + +void DepthBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t Samples, DXGI_FORMAT Format, EsramAllocator& ) +{ + Create(Name, Width, Height, Samples, Format); +} + +void DepthBuffer::CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ) +{ + ID3D12Resource* Resource = m_pResource.Get(); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = GetDSVFormat(Format); + if (Resource->GetDesc().SampleDesc.Count == 1) + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + } + else + { + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS; + } + + if (m_hDSV[0].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[0] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[1] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_NONE; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[0]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[1]); + + DXGI_FORMAT stencilReadFormat = GetStencilFormat(Format); + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hDSV[2].ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + { + m_hDSV[2] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + m_hDSV[3] = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + } + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[2]); + + dsvDesc.Flags = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL; + Device->CreateDepthStencilView(Resource, &dsvDesc, m_hDSV[3]); + } + else + { + m_hDSV[2] = m_hDSV[0]; + m_hDSV[3] = m_hDSV[1]; + } + + if (m_hDepthSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hDepthSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + // Create the shader resource view + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = GetDepthFormat(Format); + if (dsvDesc.ViewDimension == D3D12_DSV_DIMENSION_TEXTURE2D) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = 1; + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + } + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hDepthSRV ); + + if (stencilReadFormat != DXGI_FORMAT_UNKNOWN) + { + if (m_hStencilSRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hStencilSRV = Graphics::AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + SRVDesc.Format = stencilReadFormat; + + // meng �޸�ģ�建����Ч��bug + // https://github.com/Microsoft/DirectX-Graphics-Samples/issues/281 + SRVDesc.Texture2D.PlaneSlice = 1; + + Device->CreateShaderResourceView( Resource, &SRVDesc, m_hStencilSRV ); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.h new file mode 100644 index 0000000..380b779 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DepthBuffer.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���/ģ�建���� + + ά����ͼ�� + m_hDSV[4]����Ȼ�������ͼ + m_hDepthSRV����ɫ����Դ��ͼ + m_hStencilSRV����ɫ����Դ��ͼ���ϱ���ȸ�ʽ��ͬ +*/ + +#pragma once + +#include "PixelBuffer.h" + +class EsramAllocator; + +class DepthBuffer : public PixelBuffer +{ +public: + // meng ��Ϊ��������ϵ�����Ĭ��ֵΪ��Ϊ1.0f + DepthBuffer( float ClearDepth = 1.0f, uint8_t ClearStencil = 0 ) + : m_ClearDepth(ClearDepth), m_ClearStencil(ClearStencil) + { + m_hDSV[0].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[1].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[2].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDSV[3].ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hDepthSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_hStencilSRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + // Create a depth buffer. If an address is supplied, memory will not be allocated. + // The vmem address allows you to alias buffers (which can be especially useful for + // reusing ESRAM across a frame.) + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + + // Create a depth buffer. Memory will be allocated in ESRAM (on Xbox One). On Windows, + // this functions the same as Create() without a video address. + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + void Create(const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, uint32_t NumSamples, DXGI_FORMAT Format, + EsramAllocator& Allocator ); + + // Get pre-created CPU-visible descriptor handles + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV() const { return m_hDSV[0]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_DepthReadOnly() const { return m_hDSV[1]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_StencilReadOnly() const { return m_hDSV[2]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDSV_ReadOnly() const { return m_hDSV[3]; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetDepthSRV() const { return m_hDepthSRV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetStencilSRV() const { return m_hStencilSRV; } + + float GetClearDepth() const { return m_ClearDepth; } + uint8_t GetClearStencil() const { return m_ClearStencil; } + +private: + + void CreateDerivedViews( ID3D12Device* Device, DXGI_FORMAT Format ); + + float m_ClearDepth; + uint8_t m_ClearStencil; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDSV[4]; + D3D12_CPU_DESCRIPTOR_HANDLE m_hDepthSRV; + D3D12_CPU_DESCRIPTOR_HANDLE m_hStencilSRV; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp new file mode 100644 index 0000000..51db6e0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GraphicsCore.h" +#include "DynamicUploadBuffer.h" + +using namespace Graphics; + +void DynamicUploadBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Width = NumElements * ElementSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_pResource->SetName(name.c_str()); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_CpuVirtualAddress = nullptr; +} + +void DynamicUploadBuffer::Destroy( void ) +{ + if (m_pResource.Get() != nullptr) + { + if (m_CpuVirtualAddress != nullptr) + Unmap(); + + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + } +} + +void* DynamicUploadBuffer::Map( void ) +{ + ASSERT(m_CpuVirtualAddress == nullptr, "Buffer is already locked"); + ASSERT_SUCCEEDED(m_pResource->Map(0, nullptr, &m_CpuVirtualAddress)); + return m_CpuVirtualAddress; +} + +void DynamicUploadBuffer::Unmap( void ) +{ + ASSERT(m_CpuVirtualAddress != nullptr, "Buffer is not locked"); + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; +} + +D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset ) const +{ + D3D12_VERTEX_BUFFER_VIEW vbv; + vbv.BufferLocation = m_GpuVirtualAddress + Offset; + vbv.SizeInBytes = NumVertices * Stride; + vbv.StrideInBytes = Stride; + return vbv; +} + +D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset ) const +{ + D3D12_INDEX_BUFFER_VIEW ibv; + ibv.BufferLocation = m_GpuVirtualAddress + Offset; + ibv.Format = _32bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + ibv.SizeInBytes = NumIndices * (_32bit ? 4 : 2); + return ibv; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h new file mode 100644 index 0000000..01cc7ed --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/DynamicUploadBuffer.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +class DynamicUploadBuffer +{ +public: + DynamicUploadBuffer() : m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), m_CpuVirtualAddress(nullptr) {} + ~DynamicUploadBuffer() { Destroy(); } + + void Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize); + void Destroy(void); + + // Map a CPU-visible pointer to the buffer memory. You probably don't want to leave a lot of + // memory (100s of MB) mapped this way, so you have the option of unmapping it. + void* Map(void); + void Unmap(void); + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(uint32_t NumVertices, uint32_t Stride, uint32_t Offset = 0) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(uint32_t NumIndices, bool _32bit, uint32_t Offset = 0) const; + D3D12_GPU_VIRTUAL_ADDRESS GetGpuPointer(uint32_t Offset = 0) const + { + return m_GpuVirtualAddress + Offset; + } + +private: + Microsoft::WRL::ComPtr m_pResource; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + void* m_CpuVirtualAddress; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/EsramAllocator.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/EsramAllocator.h new file mode 100644 index 0000000..10e427b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/EsramAllocator.h @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ��ʱûʲô�ã���֪���Dz��ǻ�û�� +*/ + +#pragma once + +#include "pch.h" + +class EsramAllocator +{ +public: + EsramAllocator() {} + + void PushStack() {} + void PopStack() {} + + D3D12_GPU_VIRTUAL_ADDRESS Alloc( size_t size, size_t align, const std::wstring& bufferName ) + { + (size); (align); (bufferName); + return D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + intptr_t SizeOfFreeSpace( void ) const + { + return 0; + } + +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.cpp new file mode 100644 index 0000000..1f2ef45 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "GpuBuffer.h" +#include "GraphicsCore.h" +#include "EsramAllocator.h" +#include "CommandContext.h" +#include "BufferManager.h" + +using namespace Graphics; + +void GpuBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, const void* initialData ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED( + g_Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); +} + +// Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. +void GpuBuffer::CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData) +{ + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + + D3D12_RESOURCE_DESC ResourceDesc = DescribeBuffer(); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + + ASSERT_SUCCEEDED(g_Device->CreatePlacedResource(pBackingHeap, HeapOffset, &ResourceDesc, m_UsageState, nullptr, MY_IID_PPV_ARGS(&m_pResource))); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + + if (initialData) + CommandContext::InitializeBuffer(*this, initialData, m_BufferSize); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif + + CreateDerivedViews(); + +} + +void GpuBuffer::Create(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator&, const void* initialData) +{ + Create(name, NumElements, ElementSize, initialData); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t Offset, uint32_t Size) const +{ + ASSERT(Offset + Size <= m_BufferSize); + + Size = Math::AlignUp(Size, 16); + + D3D12_CONSTANT_BUFFER_VIEW_DESC CBVDesc; + CBVDesc.BufferLocation = m_GpuVirtualAddress + (size_t)Offset; + CBVDesc.SizeInBytes = Size; + + D3D12_CPU_DESCRIPTOR_HANDLE hCBV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateConstantBufferView(&CBVDesc, hCBV); + return hCBV; +} + +D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void) +{ + ASSERT(m_BufferSize != 0); + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = 1; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + Desc.Flags = m_ResourceFlags; + Desc.Format = DXGI_FORMAT_UNKNOWN; + Desc.Height = 1; + Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + Desc.MipLevels = 1; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)m_BufferSize; + return Desc; +} + +void ByteAddressBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_R32_TYPELESS; + UAVDesc.Buffer.NumElements = (UINT)m_BufferSize / 4; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView( m_pResource.Get(), nullptr, &UAVDesc, m_UAV ); +} + +void StructuredBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = DXGI_FORMAT_UNKNOWN; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.StructureByteStride = m_ElementSize; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = DXGI_FORMAT_UNKNOWN; + UAVDesc.Buffer.CounterOffsetInBytes = 0; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.StructureByteStride = m_ElementSize; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + m_CounterBuffer.Create(L"StructuredBuffer::Counter", 1, 4); + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), m_CounterBuffer.GetResource(), &UAVDesc, m_UAV); +} + +void TypedBuffer::CreateDerivedViews(void) +{ + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + SRVDesc.Format = m_DataFormat; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + SRVDesc.Buffer.NumElements = m_ElementCount; + SRVDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + + if (m_SRV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_SRV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), &SRVDesc, m_SRV); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAVDesc = {}; + UAVDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + UAVDesc.Format = m_DataFormat; + UAVDesc.Buffer.NumElements = m_ElementCount; + UAVDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + + if (m_UAV.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_UAV = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateUnorderedAccessView(m_pResource.Get(), nullptr, &UAVDesc, m_UAV); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_GENERIC_READ); + return m_CounterBuffer.GetSRV(); +} + +const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(CommandContext& Context) +{ + Context.TransitionResource(m_CounterBuffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + return m_CounterBuffer.GetUAV(); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.h new file mode 100644 index 0000000..65a3ecf --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuBuffer.h @@ -0,0 +1,146 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" + +class CommandContext; +class EsramAllocator; + +class GpuBuffer : public GpuResource +{ +public: + virtual ~GpuBuffer() { Destroy(); } + + // Create a buffer. If initial data is provided, it will be copied into the buffer using the default command context. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr ); + + // Create a buffer in ESRAM. On Windows, ESRAM is not used. + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + EsramAllocator& Allocator, const void* initialData = nullptr); + + // Sub-Allocate a buffer out of a pre-allocated heap. If initial data is provided, it will be copied into the buffer using the default command context. + void CreatePlaced(const std::wstring& name, ID3D12Heap* pBackingHeap, uint32_t HeapOffset, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr); + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; } + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; } + + D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_GpuVirtualAddress; } + + D3D12_CPU_DESCRIPTOR_HANDLE CreateConstantBufferView( uint32_t Offset, uint32_t Size ) const; + + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const; + D3D12_VERTEX_BUFFER_VIEW VertexBufferView(size_t BaseVertexIndex = 0) const + { + size_t Offset = BaseVertexIndex * m_ElementSize; + return VertexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize); + } + + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit = false) const; + D3D12_INDEX_BUFFER_VIEW IndexBufferView(size_t StartIndex = 0) const + { + size_t Offset = StartIndex * m_ElementSize; + return IndexBufferView(Offset, (uint32_t)(m_BufferSize - Offset), m_ElementSize == 4); + } + + size_t GetBufferSize() const { return m_BufferSize; } + uint32_t GetElementCount() const { return m_ElementCount; } + uint32_t GetElementSize() const { return m_ElementSize; } + +protected: + + GpuBuffer(void) : m_BufferSize(0), m_ElementCount(0), m_ElementSize(0) + { + m_ResourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + m_UAV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + m_SRV.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; + } + + D3D12_RESOURCE_DESC DescribeBuffer(void); + virtual void CreateDerivedViews(void) = 0; + + D3D12_CPU_DESCRIPTOR_HANDLE m_UAV; + D3D12_CPU_DESCRIPTOR_HANDLE m_SRV; + + size_t m_BufferSize; + uint32_t m_ElementCount; + uint32_t m_ElementSize; + D3D12_RESOURCE_FLAGS m_ResourceFlags; +}; + +inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offset, uint32_t Size, uint32_t Stride) const +{ + D3D12_VERTEX_BUFFER_VIEW VBView; + VBView.BufferLocation = m_GpuVirtualAddress + Offset; + VBView.SizeInBytes = Size; + VBView.StrideInBytes = Stride; + return VBView; +} + +inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset, uint32_t Size, bool b32Bit) const +{ + D3D12_INDEX_BUFFER_VIEW IBView; + IBView.BufferLocation = m_GpuVirtualAddress + Offset; + IBView.Format = b32Bit ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT; + IBView.SizeInBytes = Size; + return IBView; +} + +class ByteAddressBuffer : public GpuBuffer +{ +public: + virtual void CreateDerivedViews(void) override; +}; + +class IndirectArgsBuffer : public ByteAddressBuffer +{ +public: + IndirectArgsBuffer(void) + { + } +}; + +class StructuredBuffer : public GpuBuffer +{ +public: + virtual void Destroy(void) override + { + m_CounterBuffer.Destroy(); + GpuBuffer::Destroy(); + } + + virtual void CreateDerivedViews(void) override; + + ByteAddressBuffer& GetCounterBuffer(void) { return m_CounterBuffer; } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterSRV(CommandContext& Context); + const D3D12_CPU_DESCRIPTOR_HANDLE& GetCounterUAV(CommandContext& Context); + +private: + ByteAddressBuffer m_CounterBuffer; +}; + +class TypedBuffer : public GpuBuffer +{ +public: + TypedBuffer( DXGI_FORMAT Format ) : m_DataFormat(Format) {} + virtual void CreateDerivedViews(void) override; + +protected: + DXGI_FORMAT m_DataFormat; +}; + diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuResource.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuResource.h new file mode 100644 index 0000000..cee0f4b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/GpuResource.h @@ -0,0 +1,78 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ID3D12Resource��Դ��װ���� +*/ + +#pragma once + +class GpuResource +{ + friend class CommandContext; + friend class GraphicsContext; + friend class ComputeContext; + +public: + GpuResource() : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_UsageState(D3D12_RESOURCE_STATE_COMMON), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + {} + + GpuResource(ID3D12Resource* pResource, D3D12_RESOURCE_STATES CurrentState) : + m_GpuVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS_NULL), + m_UserAllocatedMemory(nullptr), + m_pResource(pResource), + m_UsageState(CurrentState), + m_TransitioningState((D3D12_RESOURCE_STATES)-1) + { + } + + // �ͷŸ���Դ + virtual void Destroy() + { + m_pResource = nullptr; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + if (m_UserAllocatedMemory != nullptr) + { + VirtualFree(m_UserAllocatedMemory, 0, MEM_RELEASE); + m_UserAllocatedMemory = nullptr; + } + } + + // ���ز�����-> + // GpuResource a; + // ����'a->'���൱��'m_pResource.Get()->' + ID3D12Resource* operator->() { return m_pResource.Get(); } + const ID3D12Resource* operator->() const { return m_pResource.Get(); } + + // ��ȡ��Դָ�� + ID3D12Resource* GetResource() { return m_pResource.Get(); } + const ID3D12Resource* GetResource() const { return m_pResource.Get(); } + + // ��ȡgpu�����ڴ��ַ + D3D12_GPU_VIRTUAL_ADDRESS GetGpuVirtualAddress() const { return m_GpuVirtualAddress; } + +protected: + + Microsoft::WRL::ComPtr m_pResource; + D3D12_RESOURCE_STATES m_UsageState; + D3D12_RESOURCE_STATES m_TransitioningState; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; + + // When using VirtualAlloc() to allocate memory directly, record the allocation here so that it can be freed. The + // GpuVirtualAddress may be offset from the true allocation start. + void* m_UserAllocatedMemory; +}; \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.cpp new file mode 100644 index 0000000..cf8e846 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.cpp @@ -0,0 +1,193 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "LinearAllocator.h" +#include "GraphicsCore.h" +#include "CommandListManager.h" +#include + +using namespace Graphics; +using namespace std; + +LinearAllocatorType LinearAllocatorPageManager::sm_AutoType = kGpuExclusive; + +LinearAllocatorPageManager::LinearAllocatorPageManager() +{ + m_AllocationType = sm_AutoType; + sm_AutoType = (LinearAllocatorType)(sm_AutoType + 1); + ASSERT(sm_AutoType <= kNumAllocatorTypes); +} + +LinearAllocatorPageManager LinearAllocator::sm_PageManager[2]; + +LinearAllocationPage* LinearAllocatorPageManager::RequestPage() +{ + lock_guard LockGuard(m_Mutex); + + while (!m_RetiredPages.empty() && g_CommandManager.IsFenceComplete(m_RetiredPages.front().first)) + { + m_AvailablePages.push(m_RetiredPages.front().second); + m_RetiredPages.pop(); + } + + LinearAllocationPage* PagePtr = nullptr; + + if (!m_AvailablePages.empty()) + { + PagePtr = m_AvailablePages.front(); + m_AvailablePages.pop(); + } + else + { + PagePtr = CreateNewPage(); + m_PagePool.emplace_back(PagePtr); + } + + return PagePtr; +} + +void LinearAllocatorPageManager::DiscardPages( uint64_t FenceValue, const vector& UsedPages ) +{ + lock_guard LockGuard(m_Mutex); + for (auto iter = UsedPages.begin(); iter != UsedPages.end(); ++iter) + m_RetiredPages.push(make_pair(FenceValue, *iter)); +} + +void LinearAllocatorPageManager::FreeLargePages( uint64_t FenceValue, const vector& LargePages ) +{ + lock_guard LockGuard(m_Mutex); + + while (!m_DeletionQueue.empty() && g_CommandManager.IsFenceComplete(m_DeletionQueue.front().first)) + { + delete m_DeletionQueue.front().second; + m_DeletionQueue.pop(); + } + + for (auto iter = LargePages.begin(); iter != LargePages.end(); ++iter) + { + (*iter)->Unmap(); + m_DeletionQueue.push(make_pair(FenceValue, *iter)); + } +} + +LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t PageSize ) +{ + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Alignment = 0; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + + D3D12_RESOURCE_STATES DefaultUsage; + + if (m_AllocationType == kGpuExclusive) + { + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + ResourceDesc.Width = PageSize == 0 ? kGpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + DefaultUsage = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + HeapProps.Type = D3D12_HEAP_TYPE_UPLOAD; + ResourceDesc.Width = PageSize == 0 ? kCpuAllocatorPageSize : PageSize; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + DefaultUsage = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + ID3D12Resource* pBuffer; + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, DefaultUsage, nullptr, MY_IID_PPV_ARGS(&pBuffer)) ); + + pBuffer->SetName(L"LinearAllocator Page"); + + return new LinearAllocationPage(pBuffer, DefaultUsage); +} + +void LinearAllocator::CleanupUsedPages( uint64_t FenceID ) +{ + if (m_CurPage == nullptr) + return; + + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + m_CurOffset = 0; + + sm_PageManager[m_AllocationType].DiscardPages(FenceID, m_RetiredPages); + m_RetiredPages.clear(); + + sm_PageManager[m_AllocationType].FreeLargePages(FenceID, m_LargePageList); + m_LargePageList.clear(); +} + +DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes) +{ + LinearAllocationPage* OneOff = sm_PageManager[m_AllocationType].CreateNewPage(SizeInBytes); + m_LargePageList.push_back(OneOff); + + DynAlloc ret(*OneOff, 0, SizeInBytes); + ret.DataPtr = OneOff->m_CpuVirtualAddress; + ret.GpuAddress = OneOff->m_GpuVirtualAddress; + + return ret; +} + +DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment) +{ + const size_t AlignmentMask = Alignment - 1; + + // Assert that it's a power of two. + ASSERT((AlignmentMask & Alignment) == 0); + + // Align the allocation + const size_t AlignedSize = Math::AlignUpWithMask(SizeInBytes, AlignmentMask); + + if (AlignedSize > m_PageSize) + return AllocateLargePage(AlignedSize); + + m_CurOffset = Math::AlignUp(m_CurOffset, Alignment); + + if (m_CurOffset + AlignedSize > m_PageSize) + { + ASSERT(m_CurPage != nullptr); + m_RetiredPages.push_back(m_CurPage); + m_CurPage = nullptr; + } + + if (m_CurPage == nullptr) + { + m_CurPage = sm_PageManager[m_AllocationType].RequestPage(); + m_CurOffset = 0; + } + + DynAlloc ret(*m_CurPage, m_CurOffset, AlignedSize); + ret.DataPtr = (uint8_t*)m_CurPage->m_CpuVirtualAddress + m_CurOffset; + ret.GpuAddress = m_CurPage->m_GpuVirtualAddress + m_CurOffset; + + m_CurOffset += AlignedSize; + + return ret; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.h new file mode 100644 index 0000000..bb8c837 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/LinearAllocator.h @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: This is a dynamic graphics memory allocator for DX12. It's designed to work in concert +// with the CommandContext class and to do so in a thread-safe manner. There may be many command contexts, +// each with its own linear allocators. They act as windows into a global memory pool by reserving a +// context-local memory page. Requesting a new page is done in a thread-safe manner by guarding accesses +// with a mutex lock. +// +// When a command context is finished, it will receive a fence ID that indicates when it's safe to reclaim +// used resources. The CleanupUsedPages() method must be invoked at this time so that the used pages can be +// scheduled for reuse after the fence has cleared. + +#pragma once + +#include "GpuResource.h" +#include +#include +#include + +// Constant blocks must be multiples of 16 constants @ 16 bytes each +#define DEFAULT_ALIGN 256 + +// �������յ��ϴ���������Դ��ά��CPU��GPU�ɶ��ĵ�ַ +// Various types of allocations may contain NULL pointers. Check before dereferencing if you are unsure. +struct DynAlloc +{ + DynAlloc(GpuResource& BaseResource, size_t ThisOffset, size_t ThisSize) + : Buffer(BaseResource), Offset(ThisOffset), Size(ThisSize) {} + + GpuResource& Buffer; // The D3D buffer associated with this memory. + size_t Offset; // Offset from start of buffer resource + size_t Size; // Reserved size of this allocation + void* DataPtr; // The CPU-writeable address + D3D12_GPU_VIRTUAL_ADDRESS GpuAddress; // The GPU-visible address +}; + +// �ϴ������� +class LinearAllocationPage : public GpuResource +{ +public: + LinearAllocationPage(ID3D12Resource* pResource, D3D12_RESOURCE_STATES Usage) : GpuResource() + { + m_pResource.Attach(pResource); + m_UsageState = Usage; + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + + ~LinearAllocationPage() + { + Unmap(); + } + + void Map(void) + { + if (m_CpuVirtualAddress == nullptr) + { + m_pResource->Map(0, nullptr, &m_CpuVirtualAddress); + } + } + + void Unmap(void) + { + if (m_CpuVirtualAddress != nullptr) + { + m_pResource->Unmap(0, nullptr); + m_CpuVirtualAddress = nullptr; + } + } + + void* m_CpuVirtualAddress; + D3D12_GPU_VIRTUAL_ADDRESS m_GpuVirtualAddress; +}; + +enum LinearAllocatorType +{ + kInvalidAllocator = -1, + + kGpuExclusive = 0, // DEFAULT GPU-writeable (via UAV) + kCpuWritable = 1, // UPLOAD CPU-writeable (but write combined) + + kNumAllocatorTypes +}; + +enum +{ + kGpuAllocatorPageSize = 0x10000, // 64K + kCpuAllocatorPageSize = 0x200000 // 2MB +}; + +// �ϴ������������� +class LinearAllocatorPageManager +{ +public: + + LinearAllocatorPageManager(); + LinearAllocationPage* RequestPage( void ); + LinearAllocationPage* CreateNewPage( size_t PageSize = 0 ); + + // Discarded pages will get recycled. This is for fixed size pages. + void DiscardPages( uint64_t FenceID, const std::vector& Pages ); + + // Freed pages will be destroyed once their fence has passed. This is for single-use, + // "large" pages. + void FreeLargePages( uint64_t FenceID, const std::vector& Pages ); + + void Destroy( void ) { m_PagePool.clear(); } + +private: + + static LinearAllocatorType sm_AutoType; + + LinearAllocatorType m_AllocationType; + std::vector > m_PagePool; + std::queue > m_RetiredPages; + std::queue > m_DeletionQueue; + std::queue m_AvailablePages; + std::mutex m_Mutex; +}; + +// �ϴ������������� +class LinearAllocator +{ +public: + + LinearAllocator(LinearAllocatorType Type) : m_AllocationType(Type), m_PageSize(0), m_CurOffset(~(size_t)0), m_CurPage(nullptr) + { + ASSERT(Type > kInvalidAllocator && Type < kNumAllocatorTypes); + m_PageSize = (Type == kGpuExclusive ? kGpuAllocatorPageSize : kCpuAllocatorPageSize); + } + + DynAlloc Allocate( size_t SizeInBytes, size_t Alignment = DEFAULT_ALIGN ); + + void CleanupUsedPages( uint64_t FenceID ); + + static void DestroyAll( void ) + { + sm_PageManager[0].Destroy(); + sm_PageManager[1].Destroy(); + } + +private: + + DynAlloc AllocateLargePage( size_t SizeInBytes ); + + static LinearAllocatorPageManager sm_PageManager[2]; + + LinearAllocatorType m_AllocationType; + size_t m_PageSize; + size_t m_CurOffset; + LinearAllocationPage* m_CurPage; + std::vector m_RetiredPages; + std::vector m_LargePageList; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.cpp new file mode 100644 index 0000000..4569572 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.cpp @@ -0,0 +1,403 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "PixelBuffer.h" +#include "EsramAllocator.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "ReadbackBuffer.h" +#include + +using namespace Graphics; + +DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32G8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_TYPELESS; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24G8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_TYPELESS; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + +#ifdef _DEBUG + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + + ASSERT(false, "Requested a UAV format for a depth stencil format."); +#endif + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_D32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_D24_UNORM_S8_UINT; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_D16_UNORM; + + default: + return defaultFormat; + } +} + +DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + + // No Stencil + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + return DXGI_FORMAT_R32_FLOAT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + + // 16-bit Z w/o Stencil + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + return DXGI_FORMAT_R16_UNORM; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat ) +{ + switch (defaultFormat) + { + // 32-bit Z w/ Stencil + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; + + // 24-bit Z + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return DXGI_FORMAT_X24_TYPELESS_G8_UINT; + + default: + return DXGI_FORMAT_UNKNOWN; + } +} + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t PixelBuffer::BytesPerPixel( DXGI_FORMAT Format ) +{ + switch( Format ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 16; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 12; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return 8; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return 4; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 2; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_P8: + return 1; + + default: + return 0; + } +} +void PixelBuffer::AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ) +{ + (Device); // Unused until we support multiple adapters + + ASSERT(Resource != nullptr); + D3D12_RESOURCE_DESC ResourceDesc = Resource->GetDesc(); + + m_pResource.Attach(Resource); + m_UsageState = CurrentState; + + m_Width = (uint32_t)ResourceDesc.Width; // We don't care about large virtual textures yet + m_Height = ResourceDesc.Height; + m_ArraySize = ResourceDesc.DepthOrArraySize; + m_Format = ResourceDesc.Format; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, + uint32_t NumMips, DXGI_FORMAT Format, UINT Flags) +{ + m_Width = Width; + m_Height = Height; + m_ArraySize = DepthOrArraySize; + m_Format = Format; + + D3D12_RESOURCE_DESC Desc = {}; + Desc.Alignment = 0; + Desc.DepthOrArraySize = (UINT16)DepthOrArraySize; + Desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + Desc.Flags = (D3D12_RESOURCE_FLAGS)Flags; + Desc.Format = GetBaseFormat(Format); + Desc.Height = (UINT)Height; + Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + Desc.MipLevels = (UINT16)NumMips; + Desc.SampleDesc.Count = 1; + Desc.SampleDesc.Quality = 0; + Desc.Width = (UINT64)Width; + return Desc; +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS /*VidMemPtr*/ ) +{ + Destroy(); + + CD3DX12_HEAP_PROPERTIES HeapProps(D3D12_HEAP_TYPE_DEFAULT); + ASSERT_SUCCEEDED( Device->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, + &ResourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearValue, MY_IID_PPV_ARGS(&m_pResource) )); + + m_UsageState = D3D12_RESOURCE_STATE_COMMON; + m_GpuVirtualAddress = D3D12_GPU_VIRTUAL_ADDRESS_NULL; + +#ifndef RELEASE + m_pResource->SetName(Name.c_str()); +#else + (Name); +#endif +} + +void PixelBuffer::CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, + const D3D12_RESOURCE_DESC& ResourceDesc, D3D12_CLEAR_VALUE ClearValue, EsramAllocator& /*Allocator*/ ) +{ + CreateTextureResource(Device, Name, ResourceDesc, ClearValue); +} + +void PixelBuffer::ExportToFile( const std::wstring& FilePath ) +{ + // Create the buffer. We will release it after all is done. + ReadbackBuffer TempBuffer; + TempBuffer.Create(L"Temporary Readback Buffer", m_Width * m_Height, (uint32_t)BytesPerPixel(m_Format)); + + CommandContext::ReadbackTexture2D(TempBuffer, *this); + + // Retrieve a CPU-visible pointer to the buffer memory. Map the whole range for reading. + void* Memory = TempBuffer.Map(); + + // Open the file and write the header followed by the texel data. + std::ofstream OutFile(FilePath, std::ios::out | std::ios::binary); + OutFile.write((const char*)&m_Format, 4); + OutFile.write((const char*)&m_Width, 4); // Pitch + OutFile.write((const char*)&m_Width, 4); + OutFile.write((const char*)&m_Height, 4); + OutFile.write((const char*)Memory, TempBuffer.GetBufferSize()); + OutFile.close(); + + // No values were written to the buffer, so use a null range when unmapping. + TempBuffer.Unmap(); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.h new file mode 100644 index 0000000..edc9e68 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/PixelBuffer.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +/* + ���ػ����� + + ��ʵ��Դ����һ���ڴ��ַ��Ҳ���Գ�Ϊ��buff����������\ + + ��������ٷ�װһ�㣬��Ҫ�����������ػ��������͵���Դ + + ������Ҫʵ���˸���һЩ��ʽֱ��������Դ�����߰�ij����Դ�������ػ������������� +*/ + +#pragma once + +#include "GpuResource.h" + +class EsramAllocator; + +class PixelBuffer : public GpuResource +{ +public: + PixelBuffer() : m_Width(0), m_Height(0), m_ArraySize(0), m_Format(DXGI_FORMAT_UNKNOWN), m_BankRotation(0) {} + + uint32_t GetWidth(void) const { return m_Width; } + uint32_t GetHeight(void) const { return m_Height; } + uint32_t GetDepth(void) const { return m_ArraySize; } + const DXGI_FORMAT& GetFormat(void) const { return m_Format; } + + // Has no effect on Windows + void SetBankRotation( uint32_t RotationAmount ) { m_BankRotation = RotationAmount; } + + // Write the raw pixel buffer contents to a file + // Note that data is preceded by a 16-byte header: { DXGI_FORMAT, Pitch (in pixels), Width (in pixels), Height } + void ExportToFile( const std::wstring& FilePath ); + +protected: + + // ��������2d�����Ľṹ + D3D12_RESOURCE_DESC DescribeTex2D(uint32_t Width, uint32_t Height, uint32_t DepthOrArraySize, uint32_t NumMips, DXGI_FORMAT Format, UINT Flags); + + // ���ֳɵ�Resource�������� + void AssociateWithResource( ID3D12Device* Device, const std::wstring& Name, ID3D12Resource* Resource, D3D12_RESOURCE_STATES CurrentState ); + + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + // ����һ��������Դ + void CreateTextureResource( ID3D12Device* Device, const std::wstring& Name, const D3D12_RESOURCE_DESC& ResourceDesc, + D3D12_CLEAR_VALUE ClearValue, EsramAllocator& Allocator ); + + // ������Ҫ�ǶԵ�ǰ���ػ����������ظ�ʽ��һЩת��������һЩ���� + static DXGI_FORMAT GetBaseFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetUAVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDSVFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetDepthFormat( DXGI_FORMAT Format ); + static DXGI_FORMAT GetStencilFormat( DXGI_FORMAT Format ); + // ���ÿ�������ж��ٸ��ֽ� + static size_t BytesPerPixel( DXGI_FORMAT Format ); + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_ArraySize; + DXGI_FORMAT m_Format; + uint32_t m_BankRotation; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp new file mode 100644 index 0000000..c23c35b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ReadbackBuffer.h" +#include "GraphicsCore.h" + +using namespace Graphics; + +void ReadbackBuffer::Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ) +{ + Destroy(); + + m_ElementCount = NumElements; + m_ElementSize = ElementSize; + m_BufferSize = NumElements * ElementSize; + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + // Create a readback buffer large enough to hold all texel data + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_READBACK; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + // Readback buffers must be 1-dimensional, i.e. "buffer" not "texture2d" + D3D12_RESOURCE_DESC ResourceDesc = {}; + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + ResourceDesc.Width = m_BufferSize; + ResourceDesc.Height = 1; + ResourceDesc.DepthOrArraySize = 1; + ResourceDesc.MipLevels = 1; + ResourceDesc.Format = DXGI_FORMAT_UNKNOWN; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + ASSERT_SUCCEEDED( g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&m_pResource)) ); + + m_GpuVirtualAddress = m_pResource->GetGPUVirtualAddress(); + +#ifdef RELEASE + (name); +#else + m_pResource->SetName(name.c_str()); +#endif +} + + +void* ReadbackBuffer::Map(void) +{ + void* Memory; + m_pResource->Map(0, &CD3DX12_RANGE(0, m_BufferSize), &Memory); + return Memory; +} + +void ReadbackBuffer::Unmap(void) +{ + m_pResource->Unmap(0, &CD3DX12_RANGE(0, 0)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.h new file mode 100644 index 0000000..81f3aa6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ReadbackBuffer.h @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "GpuBuffer.h" + +class ReadbackBuffer : public GpuBuffer +{ +public: + virtual ~ReadbackBuffer() { Destroy(); } + + void Create( const std::wstring& name, uint32_t NumElements, uint32_t ElementSize ); + + void* Map(void); + void Unmap(void); + +protected: + + void CreateDerivedViews(void) {} + +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.cpp new file mode 100644 index 0000000..033dbef --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.cpp @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ShadowBuffer.h" +#include "EsramAllocator.h" +#include "CommandContext.h" + +void ShadowBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr ) +{ + DepthBuffer::Create( Name, Width, Height, DXGI_FORMAT_D16_UNORM, VidMemPtr ); + + m_Viewport.TopLeftX = 0.0f; + m_Viewport.TopLeftY = 0.0f; + m_Viewport.Width = (float)Width; + m_Viewport.Height = (float)Height; + m_Viewport.MinDepth = 0.0f; + m_Viewport.MaxDepth = 1.0f; + + // Prevent drawing to the boundary pixels so that we don't have to worry about shadows stretching + m_Scissor.left = 1; + m_Scissor.top = 1; + m_Scissor.right = (LONG)Width - 2; + m_Scissor.bottom = (LONG)Height - 2; +} + +void ShadowBuffer::Create( const std::wstring& Name, uint32_t Width, uint32_t Height, EsramAllocator& Allocator ) +{ + DepthBuffer::Create( Name, Width, Height, DXGI_FORMAT_D16_UNORM, Allocator ); + + m_Viewport.TopLeftX = 0.0f; + m_Viewport.TopLeftY = 0.0f; + m_Viewport.Width = (float)Width; + m_Viewport.Height = (float)Height; + m_Viewport.MinDepth = 0.0f; + m_Viewport.MaxDepth = 1.0f; + + // Prevent drawing to the boundary pixels so that we don't have to worry about shadows stretching + m_Scissor.left = 1; + m_Scissor.top = 1; + m_Scissor.right = (LONG)Width - 2; + m_Scissor.bottom = (LONG)Height - 2; +} + +void ShadowBuffer::BeginRendering( GraphicsContext& Context ) +{ + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + Context.ClearDepth(*this); + Context.SetDepthStencilTarget(GetDSV()); + Context.SetViewportAndScissor(m_Viewport, m_Scissor); +} + +void ShadowBuffer::EndRendering( GraphicsContext& Context ) +{ + Context.TransitionResource(*this, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.h b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.h new file mode 100644 index 0000000..43c906d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/ShadowBuffer.h @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "DepthBuffer.h" + +class EsramAllocator; + +class GraphicsContext; + +class ShadowBuffer : public DepthBuffer +{ +public: + ShadowBuffer() {} + + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, + D3D12_GPU_VIRTUAL_ADDRESS VidMemPtr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ); + void Create( const std::wstring& Name, uint32_t Width, uint32_t Height, EsramAllocator& Allocator ); + + D3D12_CPU_DESCRIPTOR_HANDLE GetSRV() const { return GetDepthSRV(); } + + void BeginRendering( GraphicsContext& context ); + void EndRendering( GraphicsContext& context ); + +private: + D3D12_VIEWPORT m_Viewport; + D3D12_RECT m_Scissor; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Resource/readme_resource.txt b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/readme_resource.txt new file mode 100644 index 0000000..95c87c0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Resource/readme_resource.txt @@ -0,0 +1,87 @@ + +�ӿ�˵���� +--��Դ��ID3D12Resource +--�����������D3D12_CPU_DESCRIPTOR_HANDLE + +�ļ�˵���� +--EsramAllocator +--�����࣬Ҳ����΢����ʱ��û��ʵ�� + +--GpuResource +--��ID3D12Resource�ļ򵥷�װ + +/********************************************************************** + 2D���� D3D12_RESOURCE_DIMENSION_TEXTURE2D DescribeTex2D() +**********************************************************************/ +--PixelBuffer -> GpuResource +--���ػ����� +--������Դ��˵���ܶ����gpu�е�һ���ڴ棬���Խ�buff���������� +--����ʵ�ֵľ������ػ��������涨��buff���ṹ���������ͣ��涨��ÿ�����صĸ�ʽ + +--ColorBuffer -> PixelBuffer -> GpuResource +--��ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����3������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle: ��ȾĿ����ͼ ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ +----m_UAVHandle[12]: ���������ͼ��� ����ͨ��Create�����Ļ������Żᴴ������ͼ + +--ColorCubeBuffer -> PixelBuffer -> GpuResource +--��պ���ɫ������ +--��һ���涨��ÿ�����صĽṹ����ɫ��ʽ +--��ά����2������������� +----m_SRVHandle: ��ɫ����Դ��ͼ��� +----m_RTVHandle[6]: ��ȾĿ����ͼ��� + +--DepthBuffer -> PixelBuffer -> GpuResource +--���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + +--ShadowBuffer -> DepthBuffer -> PixelBuffer -> GpuResource +--��Ӱ ���/ģ�建���� +--ά����3������������� +----m_hDSV[4]: 4�ֲ�ͬ����������ͼ��� +----m_hDepthSRV: �����ɫ����Դ��ͼ��� +----m_hStencilSRV: ģ����ɫ����Դ��ͼ��� + + +/********************************************************************** + ������ D3D12_RESOURCE_DIMENSION_BUFFER +**********************************************************************/ +--GpuBuffer +--�Ƚϻ����Ļ������� + +--ReadbackBuffer +--��д�������� + +--LinearAllocator +--buff���֣�D3D12_TEXTURE_LAYOUT_ROW_MAJOR +--���Դ���GPU�ɶ���Ĭ�ϻ�������CPU\GPU�ɶ����ϴ������� +--����ʵ������CommandAllocator +--����ʹ���ࣺLinearAllocator +----���͵�ʹ�þ��Ǵ���һ���ϴ�������������������ȥ��Ȼ��ͨ�������gpu��Ӧ�ĵ�ַ��ָ��д�� +----����Ҳ��ͨ��Χ�������ƻ������Ƿ��Ѿ�ʹ����ϵ� + +--DynamicUploadBuffer +--��̬�Ĵ���һ���ϴ������� + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!�����ϴ������������ǿ��Կ���d3d12book��ʵ������!!!! +--1. ����һ��Ĭ�ϻ����� +--2. ����һ���ϴ������� +--3. �Ѵ�������ݵ����ϴ�����������ת��Ĭ�ϻ�������������api:UpdateSubresources +����miniEngine�п��Կ���Ҳ�ṩ�����ƵĽӿ� +--1. ����Ĭ�ϻ����� DescriptorAllocator��ʵ�֣�����û�ж��Ⱪ¶���� +--2. �����ϴ������� LinearAllocator +--3. ����->�ϴ�������->Ĭ�ϻ����� �����ṩ�������� +----1) CommandContext::WriteBuffer д���������Դ�У������d3d12bookһ�� +--------ͨ�����ص���Դ������Ӧ��ͼ +--------Ȼ����ͨ��GraphicsContext::SetIndexBuffer\SetVertexBuffer���ö��㻺����������� +----2��GraphicsContext::SetDynamicVB\SetDynamicIB ֱ�����ö��㻺����������壬���ϱߵ��������û�б���Ĭ�ϻ����� +--------��ô���ַ�ʽ������ +--------��������Ǿʹ����ϴ�����������CPU��GPU��˵���ǿ��Է��ʵģ�ֻ������Ե��ڴ��ַ��ͬ��DynAlloc����������ַ +--------���������ǿ��еģ�������룺 diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.cpp new file mode 100644 index 0000000..2de233e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.cpp @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "ShadowCamera.h" + +using namespace Math; + +void GameCore::ShadowCamera::UpdateMatrix( + Vector3 LightDirection, Vector3 ShadowCenter, Vector3 ShadowBounds, + uint32_t BufferWidth, uint32_t BufferHeight, uint32_t BufferPrecision ) +{ + SetLookDirection(LightDirection, Vector3(kYUnitVector) ); + + // Converts world units to texel units so we can quantize the camera position to whole texel units + Vector3 RcpDimensions = Recip(ShadowBounds); + Vector3 QuantizeScale = Vector3((float)BufferWidth, (float)BufferHeight, (float)((1 << BufferPrecision) - 1)) * RcpDimensions; + + SetPosition(-LightDirection * ShadowBounds.GetX() / 2.0f); + + // ������ԭ�ȵĴ���ʲô��˼�� ������ʱֱ�Ӹij������� +// // Transform to view space +// ShadowCenter = ~GetRotation() * ShadowCenter; +// // Scale to texel units, truncate fractional part, and scale back to world units +// ShadowCenter = Floor(ShadowCenter * QuantizeScale) / QuantizeScale; +// // Transform back into world space +// ShadowCenter = GetRotation() * ShadowCenter; +// +// SetPosition(ShadowCenter); + + SetProjMatrix( Matrix4::MakeScale(Vector3(2.0f, 2.0f, 1.0f) * RcpDimensions) ); + + Update(); + + // Transform from clip space to texture space + m_ShadowMatrix = Matrix4( AffineTransform( Matrix3::MakeScale( 0.5f, -0.5f, 1.0f ), Vector3(0.5f, 0.5f, 0.0f) ) ) * m_ViewProjMatrix; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.h b/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.h new file mode 100644 index 0000000..af51576 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/ShadowCamera.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Camera.h" + +namespace GameCore +{ + using namespace Math; + + class ShadowCamera : public BaseCamera + { + public: + + ShadowCamera() {} + + void UpdateMatrix( + Vector3 LightDirection, // ���շ��򣨵�λ������ + Vector3 ShadowCenter, // ��ӰĿ������ĵ� + Vector3 ShadowBounds, // ��Ӱ׵��Ŀ����� + uint32_t BufferWidth, // Shadow buffer width + uint32_t BufferHeight, // Shadow buffer height--usually same as width + uint32_t BufferPrecision // Bit depth of shadow buffer--usually 16 or 24 + ); + + // Used to transform world space to texture space for shadow sampling + const Matrix4& GetShadowMatrix() const { return m_ShadowMatrix; } + + private: + + Matrix4 m_ShadowMatrix; + }; + +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp new file mode 100644 index 0000000..097ae16 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.cpp @@ -0,0 +1,1347 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#include "pch.h" + +#include "DDSTextureLoader.h" + +#include "dds.h" +#include "GpuResource.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include "Utility.h" + +struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; +typedef public std::unique_ptr ScopedHandle; +inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALUE) ? 0 : h; } + + +//-------------------------------------------------------------------------------------- +static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName, + std::unique_ptr& ddsData, + DDS_HEADER** header, + uint8_t** bitData, + size_t* bitSize + ) +{ + if (!header || !bitData || !bitSize) + { + return E_POINTER; + } + + // open the file +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile( safe_handle( CreateFile2( fileName, + GENERIC_READ, + FILE_SHARE_READ, + OPEN_EXISTING, + nullptr ) ) ); +#else + ScopedHandle hFile( safe_handle( CreateFileW( fileName, + GENERIC_READ, + FILE_SHARE_READ, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr ) ) ); +#endif + + if ( !hFile ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + // Get the file size + LARGE_INTEGER FileSize = { 0 }; + +#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + FILE_STANDARD_INFO fileInfo; + if ( !GetFileInformationByHandleEx( hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo) ) ) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + FileSize = fileInfo.EndOfFile; +#else + GetFileSizeEx( hFile.get(), &FileSize ); +#endif + + // File is too big for 32-bit allocation, so reject read + if (FileSize.HighPart > 0) + { + return E_FAIL; + } + + // Need at least enough data to fill the header and magic number to be a valid DDS + if (FileSize.LowPart < ( sizeof(DDS_HEADER) + sizeof(uint32_t) ) ) + { + return E_FAIL; + } + + // create enough space for the file data + ddsData.reset( new (std::nothrow) uint8_t[ FileSize.LowPart ] ); + if (!ddsData) + { + return E_OUTOFMEMORY; + } + + // read the data in + DWORD BytesRead = 0; + if (!ReadFile( hFile.get(), + ddsData.get(), + FileSize.LowPart, + &BytesRead, + nullptr + )) + { + return HRESULT_FROM_WIN32( GetLastError() ); + } + + if (BytesRead < FileSize.LowPart) + { + return E_FAIL; + } + + // DDS files always start with the same magic number ("DDS ") + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData.get() ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto hdr = reinterpret_cast( ddsData.get() + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (hdr->size != sizeof(DDS_HEADER) || + hdr->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof( uint32_t ) + sizeof( DDS_HEADER ); + + // Check for extensions + if (hdr->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == hdr->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (FileSize.LowPart < offset) + return E_FAIL; + + // setup the pointers in the process request + *header = hdr; + *bitData = ddsData.get() + offset; + *bitSize = FileSize.LowPart - offset; + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Return the BPP for a particular format +//-------------------------------------------------------------------------------------- +size_t BitsPerPixel( _In_ DXGI_FORMAT fmt ) +{ + switch( fmt ) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 8; + + default: + return 0; + } +} + + +//-------------------------------------------------------------------------------------- +// Get surface information for a particular format +//-------------------------------------------------------------------------------------- +static void GetSurfaceInfo( _In_ size_t width, + _In_ size_t height, + _In_ DXGI_FORMAT fmt, + _Out_opt_ size_t* outNumBytes, + _Out_opt_ size_t* outRowBytes, + _Out_opt_ size_t* outNumRows ) +{ + size_t numBytes = 0; + size_t rowBytes = 0; + size_t numRows = 0; + + bool bc = false; + bool packed = false; + bool planar = false; + size_t bpe = 0; + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + bc=true; + bpe = 8; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + bc = true; + bpe = 16; + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + packed = true; + bpe = 4; + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + packed = true; + bpe = 8; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + planar = true; + bpe = 2; + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + planar = true; + bpe = 4; + break; + + } + + if (bc) + { + size_t numBlocksWide = 0; + if (width > 0) + { + numBlocksWide = std::max( 1, (width + 3) / 4 ); + } + size_t numBlocksHigh = 0; + if (height > 0) + { + numBlocksHigh = std::max( 1, (height + 3) / 4 ); + } + rowBytes = numBlocksWide * bpe; + numRows = numBlocksHigh; + numBytes = rowBytes * numBlocksHigh; + } + else if (packed) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numRows = height; + numBytes = rowBytes * height; + } + else if ( fmt == DXGI_FORMAT_NV11 ) + { + rowBytes = ( ( width + 3 ) >> 2 ) * 4; + numRows = height * 2; // Direct3D makes this simplifying assumption, although it is larger than the 4:1:1 data + numBytes = rowBytes * numRows; + } + else if (planar) + { + rowBytes = ( ( width + 1 ) >> 1 ) * bpe; + numBytes = ( rowBytes * height ) + ( ( rowBytes * height + 1 ) >> 1 ); + numRows = height + ( ( height + 1 ) >> 1 ); + } + else + { + size_t bpp = BitsPerPixel( fmt ); + rowBytes = ( width * bpp + 7 ) / 8; // round up to nearest byte + numRows = height; + numBytes = rowBytes * height; + } + + if (outNumBytes) + { + *outNumBytes = numBytes; + } + if (outRowBytes) + { + *outRowBytes = rowBytes; + } + if (outNumRows) + { + *outNumRows = numRows; + } +} + + +//-------------------------------------------------------------------------------------- +#define ISBITMASK( r,g,b,a ) ( ddpf.RBitMask == r && ddpf.GBitMask == g && ddpf.BBitMask == b && ddpf.ABitMask == a ) + +static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf ) +{ + if (ddpf.flags & DDS_RGB) + { + // Note that sRGB formats are written using the "DX10" extended header + + switch (ddpf.RGBBitCount) + { + case 32: + if (ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0xff000000)) + { + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0xff000000)) + { + return DXGI_FORMAT_B8G8R8A8_UNORM; + } + + if (ISBITMASK(0x00ff0000,0x0000ff00,0x000000ff,0x00000000)) + { + return DXGI_FORMAT_B8G8R8X8_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000000ff,0x0000ff00,0x00ff0000,0x00000000) aka D3DFMT_X8B8G8R8 + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // For 'correct' writers, this should be 0x000003ff,0x000ffc00,0x3ff00000 for RGB data + if (ISBITMASK(0x3ff00000,0x000ffc00,0x000003ff,0xc0000000)) + { + return DXGI_FORMAT_R10G10B10A2_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x000003ff,0x000ffc00,0x3ff00000,0xc0000000) aka D3DFMT_A2R10G10B10 + + if (ISBITMASK(0x0000ffff,0xffff0000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16G16_UNORM; + } + + if (ISBITMASK(0xffffffff,0x00000000,0x00000000,0x00000000)) + { + // Only 32-bit color channel format in D3D9 was R32F + return DXGI_FORMAT_R32_FLOAT; // D3DX writes this out as a FourCC of 114 + } + break; + + case 24: + // No 24bpp DXGI formats aka D3DFMT_R8G8B8 + break; + + case 16: + if (ISBITMASK(0x7c00,0x03e0,0x001f,0x8000)) + { + return DXGI_FORMAT_B5G5R5A1_UNORM; + } + if (ISBITMASK(0xf800,0x07e0,0x001f,0x0000)) + { + return DXGI_FORMAT_B5G6R5_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x7c00,0x03e0,0x001f,0x0000) aka D3DFMT_X1R5G5B5 + + if (ISBITMASK(0x0f00,0x00f0,0x000f,0xf000)) + { + return DXGI_FORMAT_B4G4R4A4_UNORM; + } + + // No DXGI format maps to ISBITMASK(0x0f00,0x00f0,0x000f,0x0000) aka D3DFMT_X4R4G4B4 + + // No 3:3:2, 3:3:2:8, or paletted DXGI formats aka D3DFMT_A8R3G3B2, D3DFMT_R3G3B2, D3DFMT_P8, D3DFMT_A8P8, etc. + break; + } + } + else if (ddpf.flags & DDS_LUMINANCE) + { + if (8 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + + // No DXGI format maps to ISBITMASK(0x0f,0x00,0x00,0xf0) aka D3DFMT_A4L4 + } + + if (16 == ddpf.RGBBitCount) + { + if (ISBITMASK(0x0000ffff,0x00000000,0x00000000,0x00000000)) + { + return DXGI_FORMAT_R16_UNORM; // D3DX10/11 writes this out as DX10 extension + } + if (ISBITMASK(0x000000ff,0x00000000,0x00000000,0x0000ff00)) + { + return DXGI_FORMAT_R8G8_UNORM; // D3DX10/11 writes this out as DX10 extension + } + } + } + else if (ddpf.flags & DDS_ALPHA) + { + if (8 == ddpf.RGBBitCount) + { + return DXGI_FORMAT_A8_UNORM; + } + } + else if (ddpf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', 'T', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC1_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '3' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '5' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + // While pre-mulitplied alpha isn't directly supported by the DXGI formats, + // they are basically the same as these BC formats so they can be mapped + if (MAKEFOURCC( 'D', 'X', 'T', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC2_UNORM; + } + if (MAKEFOURCC( 'D', 'X', 'T', '4' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC3_UNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '1' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '4', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC4_SNORM; + } + + if (MAKEFOURCC( 'A', 'T', 'I', '2' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'U' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_UNORM; + } + if (MAKEFOURCC( 'B', 'C', '5', 'S' ) == ddpf.fourCC) + { + return DXGI_FORMAT_BC5_SNORM; + } + + // BC6H and BC7 are written using the "DX10" extended header + + if (MAKEFOURCC( 'R', 'G', 'B', 'G' ) == ddpf.fourCC) + { + return DXGI_FORMAT_R8G8_B8G8_UNORM; + } + if (MAKEFOURCC( 'G', 'R', 'G', 'B' ) == ddpf.fourCC) + { + return DXGI_FORMAT_G8R8_G8B8_UNORM; + } + + if (MAKEFOURCC('Y','U','Y','2') == ddpf.fourCC) + { + return DXGI_FORMAT_YUY2; + } + + // Check for D3DFORMAT enums being set here + switch( ddpf.fourCC ) + { + case 36: // D3DFMT_A16B16G16R16 + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case 110: // D3DFMT_Q16W16V16U16 + return DXGI_FORMAT_R16G16B16A16_SNORM; + + case 111: // D3DFMT_R16F + return DXGI_FORMAT_R16_FLOAT; + + case 112: // D3DFMT_G16R16F + return DXGI_FORMAT_R16G16_FLOAT; + + case 113: // D3DFMT_A16B16G16R16F + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case 114: // D3DFMT_R32F + return DXGI_FORMAT_R32_FLOAT; + + case 115: // D3DFMT_G32R32F + return DXGI_FORMAT_R32G32_FLOAT; + + case 116: // D3DFMT_A32B32G32R32F + return DXGI_FORMAT_R32G32B32A32_FLOAT; + } + } + + return DXGI_FORMAT_UNKNOWN; +} + + +//-------------------------------------------------------------------------------------- +static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format ) +{ + switch( format ) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return format; + } +} + + +//-------------------------------------------------------------------------------------- +static HRESULT FillInitData( _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ size_t maxsize, + _In_ size_t bitSize, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _Out_ size_t& twidth, + _Out_ size_t& theight, + _Out_ size_t& tdepth, + _Out_ size_t& skipMip, + _Out_writes_(mipCount*arraySize) D3D12_SUBRESOURCE_DATA* initData ) +{ + if ( !bitData || !initData ) + { + return E_POINTER; + } + + skipMip = 0; + twidth = 0; + theight = 0; + tdepth = 0; + + size_t NumBytes = 0; + size_t RowBytes = 0; + const uint8_t* pSrcBits = bitData; + const uint8_t* pEndBits = bitData + bitSize; + + size_t index = 0; + for( size_t j = 0; j < arraySize; j++ ) + { + size_t w = width; + size_t h = height; + size_t d = depth; + for( size_t i = 0; i < mipCount; i++ ) + { + GetSurfaceInfo( w, + h, + format, + &NumBytes, + &RowBytes, + nullptr + ); + + if ( (mipCount <= 1) || !maxsize || (w <= maxsize && h <= maxsize && d <= maxsize) ) + { + if ( !twidth ) + { + twidth = w; + theight = h; + tdepth = d; + } + + assert(index < mipCount * arraySize); + _Analysis_assume_(index < mipCount * arraySize); + initData[index].pData = ( const void* )pSrcBits; + initData[index].RowPitch = static_cast( RowBytes ); + initData[index].SlicePitch = static_cast( NumBytes ); + ++index; + } + else if ( !j ) + { + // Count number of skipped mipmaps (first item only) + ++skipMip; + } + + if (pSrcBits + (NumBytes*d) > pEndBits) + { + return HRESULT_FROM_WIN32( ERROR_HANDLE_EOF ); + } + + pSrcBits += NumBytes * d; + + w = w >> 1; + h = h >> 1; + d = d >> 1; + if (w == 0) + { + w = 1; + } + if (h == 0) + { + h = 1; + } + if (d == 0) + { + d = 1; + } + } + } + + return (index > 0) ? S_OK : E_FAIL; +} + + +//-------------------------------------------------------------------------------------- +static HRESULT CreateD3DResources( _In_ ID3D12Device* d3dDevice, + _In_ uint32_t resDim, + _In_ size_t width, + _In_ size_t height, + _In_ size_t depth, + _In_ size_t mipCount, + _In_ size_t arraySize, + _In_ DXGI_FORMAT format, + _In_ bool forceSRGB, + _In_ bool isCubeMap, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + if ( !d3dDevice ) + return E_POINTER; + + HRESULT hr = E_FAIL; + + if ( forceSRGB ) + { + format = MakeSRGB( format ); + } + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + D3D12_RESOURCE_DESC ResourceDesc; + ResourceDesc.Alignment = 0; + ResourceDesc.Width = static_cast( width ); + ResourceDesc.Height = static_cast( height ); + ResourceDesc.DepthOrArraySize = static_cast( arraySize ); + ResourceDesc.MipLevels = static_cast( mipCount ); + ResourceDesc.Format = format; + ResourceDesc.SampleDesc.Count = 1; + ResourceDesc.SampleDesc.Quality = 0; + ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + ResourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE1D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture1DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != 0) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + if ( isCubeMap ) + { + if (arraySize > 6) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + + // Earlier we set arraySize to (NumCubes * 6) + SRVDesc.TextureCubeArray.NumCubes = static_cast( arraySize / 6 ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + } + } + else if (arraySize > 1) + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2DArray.ArraySize = static_cast( arraySize ); + } + else + { + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture2D.MostDetailedMip = 0; + } + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDSTextureLoader"); + tex->Release(); + } + } + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + ResourceDesc.DepthOrArraySize = static_cast( depth ); + + ID3D12Resource* tex = nullptr; + hr = d3dDevice->CreateCommittedResource( &HeapProps, D3D12_HEAP_FLAG_NONE, &ResourceDesc, + D3D12_RESOURCE_STATE_COPY_DEST, nullptr, MY_IID_PPV_ARGS(&tex)); + + if (SUCCEEDED( hr ) && tex != nullptr) + { + D3D12_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + SRVDesc.Format = format; + SRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + SRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = (!mipCount) ? -1 : ResourceDesc.MipLevels; + SRVDesc.Texture3D.MostDetailedMip = 0; + + d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); + + if (texture != nullptr) + { + *texture = tex; + } + else + { + tex->SetName(L"DDS Texture (3D)"); + tex->Release(); + } + } + } + break; + } + + return hr; +} + +//-------------------------------------------------------------------------------------- +static HRESULT CreateTextureFromDDS( _In_ ID3D12Device* d3dDevice, + _In_ const DDS_HEADER* header, + _In_reads_bytes_(bitSize) const uint8_t* bitData, + _In_ size_t bitSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView ) +{ + HRESULT hr = S_OK; + + UINT width = header->width; + UINT height = header->height; + UINT depth = header->depth; + + uint32_t resDim = D3D12_RESOURCE_DIMENSION_UNKNOWN; + UINT arraySize = 1; + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + bool isCubeMap = false; + + size_t mipCount = header->mipMapCount; + if (0 == mipCount) + { + mipCount = 1; + } + + if ((header->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC )) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + + arraySize = d3d10ext->arraySize; + if (arraySize == 0) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + switch( d3d10ext->dxgiFormat ) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + + default: + if ( BitsPerPixel( d3d10ext->dxgiFormat ) == 0 ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + + format = d3d10ext->dxgiFormat; + + switch ( d3d10ext->resourceDimension ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + // D3DX writes 1D textures with a fixed Height of 1 + if ((header->flags & DDS_HEIGHT) && height != 1) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + height = depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + arraySize *= 6; + isCubeMap = true; + } + depth = 1; + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if (!(header->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); + } + + if (arraySize > 1) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + resDim = d3d10ext->resourceDimension; + } + else + { + format = GetDXGIFormat( header->ddspf ); + + if (format == DXGI_FORMAT_UNKNOWN) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + if (header->flags & DDS_HEADER_FLAGS_VOLUME) + { + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE3D; + } + else + { + if (header->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((header->caps2 & DDS_CUBEMAP_ALLFACES ) != DDS_CUBEMAP_ALLFACES) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + arraySize = 6; + isCubeMap = true; + } + + depth = 1; + resDim = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + } + + assert( BitsPerPixel( format ) != 0 ); + } + + // Bound sizes (for security purposes we don't trust DDS file metadata larger than the D3D 11.x hardware requirements) + if (mipCount > D3D12_REQ_MIP_LEVELS) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + switch ( resDim ) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE1D_U_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + if ( isCubeMap ) + { + // This is the right bound because we set arraySize to (NumCubes*6) above + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURECUBE_DIMENSION) || + (height > D3D12_REQ_TEXTURECUBE_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + } + else if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) || + (width > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) || + (height > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + if ((arraySize > 1) || + (width > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (height > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) || + (depth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) ) + { + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + break; + + default: + return HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED ); + } + + { + // Create the texture + UINT subresourceCount = static_cast(mipCount) * arraySize; + std::unique_ptr initData( new (std::nothrow) D3D12_SUBRESOURCE_DATA[subresourceCount] ); + if ( !initData ) + { + return E_OUTOFMEMORY; + } + + size_t skipMip = 0; + size_t twidth = 0; + size_t theight = 0; + size_t tdepth = 0; + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + + if ( FAILED(hr) && !maxsize && (mipCount > 1) ) + { + // Retry with a maxsize determined by feature level + maxsize = (resDim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 2048 /*D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION*/ + : 8192 /*D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION*/; + + hr = FillInitData( width, height, depth, mipCount, arraySize, format, maxsize, bitSize, bitData, + twidth, theight, tdepth, skipMip, initData.get() ); + if ( SUCCEEDED(hr) ) + { + hr = CreateD3DResources( d3dDevice, resDim, twidth, theight, tdepth, mipCount - skipMip, arraySize, + format, forceSRGB, + isCubeMap, texture, textureView ); + } + } + } + + if (SUCCEEDED(hr)) + { + GpuResource DestTexture(*texture, D3D12_RESOURCE_STATE_COPY_DEST); + CommandContext::InitializeTexture(DestTexture, subresourceCount, initData.get()); + } + } + + return hr; +} + + +//-------------------------------------------------------------------------------------- +static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header ) +{ + if ( header->ddspf.flags & DDS_FOURCC ) + { + if ( MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC ) + { + auto d3d10ext = reinterpret_cast( (const char*)header + sizeof(DDS_HEADER) ); + auto mode = static_cast( d3d10ext->miscFlags2 & DDS_MISC_FLAGS2_ALPHA_MODE_MASK ); + switch( mode ) + { + case DDS_ALPHA_MODE_STRAIGHT: + case DDS_ALPHA_MODE_PREMULTIPLIED: + case DDS_ALPHA_MODE_OPAQUE: + case DDS_ALPHA_MODE_CUSTOM: + return mode; + } + } + else if ( ( MAKEFOURCC( 'D', 'X', 'T', '2' ) == header->ddspf.fourCC ) + || ( MAKEFOURCC( 'D', 'X', 'T', '4' ) == header->ddspf.fourCC ) ) + { + return DDS_ALPHA_MODE_PREMULTIPLIED; + } + } + + return DDS_ALPHA_MODE_UNKNOWN; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromMemory( + ID3D12Device* d3dDevice, + const uint8_t* ddsData, + size_t ddsDataSize, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !ddsData) + { + return E_INVALIDARG; + } + + // Validate DDS file in memory + if (ddsDataSize < (sizeof(uint32_t) + sizeof(DDS_HEADER))) + { + return E_FAIL; + } + + uint32_t dwMagicNumber = *( const uint32_t* )( ddsData ); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto header = reinterpret_cast( ddsData + sizeof( uint32_t ) ); + + // Verify header to validate DDS file + if (header->size != sizeof(DDS_HEADER) || + header->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return E_FAIL; + } + + size_t offset = sizeof(DDS_HEADER) + sizeof(uint32_t); + + // Check for extensions + if (header->ddspf.flags & DDS_FOURCC) + { + if (MAKEFOURCC( 'D', 'X', '1', '0' ) == header->ddspf.fourCC) + offset += sizeof(DDS_HEADER_DXT10); + } + + // Must be long enough for all headers and magic value + if (ddsDataSize < offset) + return E_FAIL; + + HRESULT hr = CreateTextureFromDDS( d3dDevice, + header, ddsData + offset, ddsDataSize - offset, maxsize, + forceSRGB, texture, textureView ); + if ( SUCCEEDED(hr) ) + { + if (texture != nullptr && *texture != nullptr) + { + (*texture)->SetName(L"DDSTextureLoader"); + } + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + } + + return hr; +} + + +_Use_decl_annotations_ +HRESULT CreateDDSTextureFromFile( + ID3D12Device* d3dDevice, + const wchar_t* fileName, + size_t maxsize, + bool forceSRGB, + ID3D12Resource** texture, + D3D12_CPU_DESCRIPTOR_HANDLE textureView, + DDS_ALPHA_MODE* alphaMode ) +{ + if ( texture ) + { + *texture = nullptr; + } + + if ( alphaMode ) + { + *alphaMode = DDS_ALPHA_MODE_UNKNOWN; + } + + if (!d3dDevice || !fileName) + { + return E_INVALIDARG; + } + + DDS_HEADER* header = nullptr; + uint8_t* bitData = nullptr; + size_t bitSize = 0; + + std::unique_ptr ddsData; + HRESULT hr = LoadTextureDataFromFile( fileName, ddsData, &header, &bitData, &bitSize ); + if (FAILED(hr)) + { + return hr; + } + + hr = CreateTextureFromDDS( d3dDevice, + header, bitData, bitSize, maxsize, + forceSRGB, texture, textureView ); + + if ( alphaMode ) + *alphaMode = GetAlphaMode( header ); + + return hr; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.h b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.h new file mode 100644 index 0000000..7812cb5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/DDSTextureLoader.h @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//-------------------------------------------------------------------------------------- +// +// Functions for loading a DDS texture and creating a Direct3D runtime resource for it +// +// Note these functions are useful as a light-weight runtime loader for DDS files. For +// a full-featured DDS file reader, writer, and texture processing pipeline see +// the 'Texconv' sample and the 'DirectXTex' library. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +enum DDS_ALPHA_MODE +{ + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, +}; + +HRESULT __cdecl CreateDDSTextureFromMemory( _In_ ID3D12Device* d3dDevice, + _In_reads_bytes_(ddsDataSize) const uint8_t* ddsData, + _In_ size_t ddsDataSize, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +HRESULT __cdecl CreateDDSTextureFromFile( _In_ ID3D12Device* d3dDevice, + _In_z_ const wchar_t* szFileName, + _In_ size_t maxsize, + _In_ bool forceSRGB, + _Outptr_opt_ ID3D12Resource** texture, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE textureView, + _Out_opt_ DDS_ALPHA_MODE* alphaMode = nullptr + ); + +size_t BitsPerPixel(_In_ DXGI_FORMAT fmt); diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.cpp b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.cpp new file mode 100644 index 0000000..34f5b20 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "pch.h" +#include "TextureManager.h" +#include "FileUtility.h" +#include "DDSTextureLoader.h" +#include "GraphicsCore.h" +#include "CommandContext.h" +#include +#include + +using namespace std; +using namespace Graphics; + +static UINT BytesPerPixel( DXGI_FORMAT Format ) +{ + return (UINT)BitsPerPixel(Format) / 8; +}; + +void Texture::Create( size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitialData ) +{ + m_UsageState = D3D12_RESOURCE_STATE_COPY_DEST; + + D3D12_RESOURCE_DESC texDesc = {}; + texDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + texDesc.Width = Width; + texDesc.Height = (UINT)Height; + texDesc.DepthOrArraySize = 1; + texDesc.MipLevels = 1; + texDesc.Format = Format; + texDesc.SampleDesc.Count = 1; + texDesc.SampleDesc.Quality = 0; + texDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + texDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + + D3D12_HEAP_PROPERTIES HeapProps; + HeapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + HeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + HeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + HeapProps.CreationNodeMask = 1; + HeapProps.VisibleNodeMask = 1; + + ASSERT_SUCCEEDED(g_Device->CreateCommittedResource(&HeapProps, D3D12_HEAP_FLAG_NONE, &texDesc, + m_UsageState, nullptr, MY_IID_PPV_ARGS(m_pResource.ReleaseAndGetAddressOf()))); + + m_pResource->SetName(L"Texture"); + + D3D12_SUBRESOURCE_DATA texResource; + texResource.pData = InitialData; + texResource.RowPitch = Pitch * BytesPerPixel(Format); + texResource.SlicePitch = texResource.RowPitch * Height; + + CommandContext::InitializeTexture(*this, 1, &texResource); + + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + g_Device->CreateShaderResourceView(m_pResource.Get(), nullptr, m_hCpuDescriptorHandle); +} + +void Texture::CreateTGAFromMemory( const void* _filePtr, size_t, bool sRGB ) +{ + const uint8_t* filePtr = (const uint8_t*)_filePtr; + + // Skip first two bytes + filePtr += 2; + + /*uint8_t imageTypeCode =*/ *filePtr++; + + // Ignore another 9 bytes + filePtr += 9; + + uint16_t imageWidth = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint16_t imageHeight = *(uint16_t*)filePtr; + filePtr += sizeof(uint16_t); + uint8_t bitCount = *filePtr++; + + // Ignore another byte + filePtr++; + + uint32_t* formattedData = new uint32_t[imageWidth * imageHeight]; + uint32_t* iter = formattedData; + + uint8_t numChannels = bitCount / 8; + uint32_t numBytes = imageWidth * imageHeight * numChannels; + + switch (numChannels) + { + default: + break; + case 3: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 3) + { + *iter++ = 0xff000000 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 3; + } + break; + case 4: + for (uint32_t byteIdx = 0; byteIdx < numBytes; byteIdx += 4) + { + *iter++ = filePtr[3] << 24 | filePtr[0] << 16 | filePtr[1] << 8 | filePtr[2]; + filePtr += 4; + } + break; + } + + Create( imageWidth, imageHeight, sRGB ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM, formattedData ); + + delete [] formattedData; +} + +bool Texture::CreateDDSFromMemory( const void* filePtr, size_t fileSize, bool sRGB ) +{ + if (m_hCpuDescriptorHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN) + m_hCpuDescriptorHandle = AllocateDescriptor(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + HRESULT hr = CreateDDSTextureFromMemory( Graphics::g_Device, + (const uint8_t*)filePtr, fileSize, 0, sRGB, &m_pResource, m_hCpuDescriptorHandle ); + + return SUCCEEDED(hr); +} + +void Texture::CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ) +{ + struct Header + { + DXGI_FORMAT Format; + uint32_t Pitch; + uint32_t Width; + uint32_t Height; + }; + const Header& header = *(Header*)memBuffer; + + ASSERT(fileSize >= header.Pitch * BytesPerPixel(header.Format) * header.Height + sizeof(Header), + "Raw PIX image dump has an invalid file size"); + + Create(header.Pitch, header.Width, header.Height, header.Format, (uint8_t*)memBuffer + sizeof(Header)); +} + +namespace TextureManager +{ + wstring s_RootPath = L""; + map< wstring, unique_ptr > s_TextureCache; + + void Initialize( const std::wstring& TextureLibRoot ) + { + s_RootPath = TextureLibRoot; + } + + void Shutdown( void ) + { + s_TextureCache.clear(); + } + + pair FindOrLoadTexture( const wstring& fileName ) + { + static mutex s_Mutex; + lock_guard Guard(s_Mutex); + + auto iter = s_TextureCache.find(fileName); + + // If it's found, it has already been loaded or the load process has begun + if (iter != s_TextureCache.end()) + return make_pair(iter->second.get(), false); + + ManagedTexture* NewTexture = new ManagedTexture(fileName); + s_TextureCache[fileName].reset( NewTexture ); + + // This was the first time it was requested, so indicate that the caller must read the file + return make_pair(NewTexture, true); + } + + const Texture& GetBlackTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultBlackTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t BlackPixel = 0; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &BlackPixel); + return *ManTex; + } + + const Texture& GetWhiteTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultWhiteTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t WhitePixel = 0xFFFFFFFFul; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &WhitePixel); + return *ManTex; + } + + const Texture& GetMagentaTex2D(void) + { + auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return *ManTex; + } + + uint32_t MagentaPixel = 0x00FF00FF; + ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); + return *ManTex; + } + +} // namespace TextureManager + +void ManagedTexture::WaitForLoad( void ) const +{ + volatile D3D12_CPU_DESCRIPTOR_HANDLE& VolHandle = (volatile D3D12_CPU_DESCRIPTOR_HANDLE&)m_hCpuDescriptorHandle; + volatile bool& VolValid = (volatile bool&)m_IsValid; + while (VolHandle.ptr == D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN && VolValid) + this_thread::yield(); +} + +void ManagedTexture::SetToInvalidTexture( void ) +{ + m_hCpuDescriptorHandle = TextureManager::GetMagentaTex2D().GetSRV(); + m_IsValid = false; +} + +const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& fileName, bool sRGB ) +{ + std::wstring CatPath = fileName; + + const ManagedTexture* Tex = LoadDDSFromFile( CatPath + L".dds", sRGB ); + if (!Tex->IsValid()) + Tex = LoadTGAFromFile( CatPath + L".tga", sRGB ); + + return Tex; +} + +const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() == 0 || !ManTex->CreateDDSFromMemory( ba->data(), ba->size(), sRGB )) + ManTex->SetToInvalidTexture(); + else + ManTex->GetResource()->SetName(fileName.c_str()); + + return ManTex; +} + +const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstring& fileName, bool sRGB ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreateTGAFromMemory( ba->data(), ba->size(), sRGB ); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} + + +const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::wstring& fileName ) +{ + auto ManagedTex = FindOrLoadTexture(fileName); + + ManagedTexture* ManTex = ManagedTex.first; + const bool RequestsLoad = ManagedTex.second; + + if (!RequestsLoad) + { + ManTex->WaitForLoad(); + return ManTex; + } + + Utility::ByteArray ba = Utility::ReadFileSync( s_RootPath + fileName ); + if (ba->size() > 0) + { + ManTex->CreatePIXImageFromMemory(ba->data(), ba->size()); + ManTex->GetResource()->SetName(fileName.c_str()); + } + else + ManTex->SetToInvalidTexture(); + + return ManTex; +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.h b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.h new file mode 100644 index 0000000..ad2df91 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/TextureManager.h @@ -0,0 +1,107 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#pragma once + +#include "pch.h" +#include "GpuResource.h" +#include "Utility.h" + +class Texture : public GpuResource +{ + friend class CommandContext; + +public: + + Texture() { m_hCpuDescriptorHandle.ptr = D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN; } + Texture(D3D12_CPU_DESCRIPTOR_HANDLE Handle) : m_hCpuDescriptorHandle(Handle) {} + + // Create a 1-level 2D texture + void Create(size_t Pitch, size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ); + void Create(size_t Width, size_t Height, DXGI_FORMAT Format, const void* InitData ) + { + Create(Width, Width, Height, Format, InitData); + } + + void CreateTGAFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + bool CreateDDSFromMemory( const void* memBuffer, size_t fileSize, bool sRGB ); + void CreatePIXImageFromMemory( const void* memBuffer, size_t fileSize ); + + virtual void Destroy() override + { + GpuResource::Destroy(); + // This leaks descriptor handles. We should really give it back to be reused. + m_hCpuDescriptorHandle.ptr = 0; + } + + const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV() const { return m_hCpuDescriptorHandle; } + + bool operator!() { return m_hCpuDescriptorHandle.ptr == 0; } + +protected: + + D3D12_CPU_DESCRIPTOR_HANDLE m_hCpuDescriptorHandle; +}; + +class ManagedTexture : public Texture +{ +public: + ManagedTexture( const std::wstring& FileName ) : m_MapKey(FileName), m_IsValid(true) {} + + void operator= ( const Texture& Texture ); + + void WaitForLoad(void) const; + void Unload(void); + + void SetToInvalidTexture(void); + bool IsValid(void) const { return m_IsValid; } + +private: + std::wstring m_MapKey; // For deleting from the map later + bool m_IsValid; +}; + +namespace TextureManager +{ + void Initialize( const std::wstring& TextureLibRoot ); + void Shutdown(void); + + const ManagedTexture* LoadFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadDDSFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadTGAFromFile( const std::wstring& fileName, bool sRGB = false ); + const ManagedTexture* LoadPIXImageFromFile( const std::wstring& fileName ); + + inline const ManagedTexture* LoadFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadDDSFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadDDSFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadTGAFromFile( const std::string& fileName, bool sRGB = false ) + { + return LoadTGAFromFile(MakeWStr(fileName), sRGB); + } + + inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fileName ) + { + return LoadPIXImageFromFile(MakeWStr(fileName)); + } + + const Texture& GetBlackTex2D(void); + const Texture& GetWhiteTex2D(void); +} diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/Texture/dds.h b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/dds.h new file mode 100644 index 0000000..7fdf5a9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/Texture/dds.h @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +//-------------------------------------------------------------------------------------- + +#if defined(_MSC_VER) +#pragma once +#endif + +#include + +// VS 2010's stdint.h conflicts with intsafe.h +#pragma warning(push) +#pragma warning(disable : 4005) +#include +#pragma warning(pop) + +namespace DirectX +{ + +#pragma pack(push,1) + +const uint32_t DDS_MAGIC = 0x20534444; // "DDS " + +struct DDS_PIXELFORMAT +{ + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; +}; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ + ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) +#endif /* defined(MAKEFOURCC) */ + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; + +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) +extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION +enum DDS_RESOURCE_DIMENSION +{ + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, +}; + +// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG +enum DDS_RESOURCE_MISC_FLAG +{ + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, +}; + +enum DDS_MISC_FLAGS2 +{ + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, +}; + +struct DDS_HEADER +{ + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; +}; + +struct DDS_HEADER_DXT10 +{ + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 +} ; + +#pragma pack(pop) + +static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); +static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + +}; // namespace diff --git a/Chapter 20 Shadow Mapping/Core/Graphics/d3dx12.h b/Chapter 20 Shadow Mapping/Core/Graphics/d3dx12.h new file mode 100644 index 0000000..449e2a1 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Graphics/d3dx12.h @@ -0,0 +1,3436 @@ +//********************************************************* +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//********************************************************* + +#ifndef __D3DX12_H__ +#define __D3DX12_H__ + +#include "d3d12.h" + +#if defined( __cplusplus ) + +struct CD3DX12_DEFAULT {}; +extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ + return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && + l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RECT : public D3D12_RECT +{ + CD3DX12_RECT() = default; + explicit CD3DX12_RECT( const D3D12_RECT& o ) : + D3D12_RECT( o ) + {} + explicit CD3DX12_RECT( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + right = Right; + bottom = Bottom; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT +{ + CD3DX12_VIEWPORT() = default; + explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) : + D3D12_VIEWPORT( o ) + {} + explicit CD3DX12_VIEWPORT( + FLOAT topLeftX, + FLOAT topLeftY, + FLOAT width, + FLOAT height, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = width; + Height = height; + MinDepth = minDepth; + MaxDepth = maxDepth; + } + explicit CD3DX12_VIEWPORT( + _In_ ID3D12Resource* pResource, + UINT mipSlice = 0, + FLOAT topLeftX = 0.0f, + FLOAT topLeftY = 0.0f, + FLOAT minDepth = D3D12_MIN_DEPTH, + FLOAT maxDepth = D3D12_MAX_DEPTH ) + { + auto Desc = pResource->GetDesc(); + const UINT64 SubresourceWidth = Desc.Width >> mipSlice; + const UINT64 SubresourceHeight = Desc.Height >> mipSlice; + switch (Desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_BUFFER: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = Desc.Width - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + TopLeftX = topLeftX; + TopLeftY = 0.0f; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = 1.0f; + break; + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + TopLeftX = topLeftX; + TopLeftY = topLeftY; + Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX; + Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY; + break; + default: break; + } + + MinDepth = minDepth; + MaxDepth = maxDepth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BOX : public D3D12_BOX +{ + CD3DX12_BOX() = default; + explicit CD3DX12_BOX( const D3D12_BOX& o ) : + D3D12_BOX( o ) + {} + explicit CD3DX12_BOX( + LONG Left, + LONG Right ) + { + left = Left; + top = 0; + front = 0; + right = Right; + bottom = 1; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Right, + LONG Bottom ) + { + left = Left; + top = Top; + front = 0; + right = Right; + bottom = Bottom; + back = 1; + } + explicit CD3DX12_BOX( + LONG Left, + LONG Top, + LONG Front, + LONG Right, + LONG Bottom, + LONG Back ) + { + left = Left; + top = Top; + front = Front; + right = Right; + bottom = Bottom; + back = Back; + } +}; +inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) +{ + return l.left == r.left && l.top == r.top && l.front == r.front && + l.right == r.right && l.bottom == r.bottom && l.back == r.back; +} +inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC +{ + CD3DX12_DEPTH_STENCIL_DESC() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) : + D3D12_DEPTH_STENCIL_DESC( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + } + explicit CD3DX12_DEPTH_STENCIL_DESC( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 +{ + CD3DX12_DEPTH_STENCIL_DESC1() = default; + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) : + D3D12_DEPTH_STENCIL_DESC1( o ) + {} + explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) + { + DepthEnable = o.DepthEnable; + DepthWriteMask = o.DepthWriteMask; + DepthFunc = o.DepthFunc; + StencilEnable = o.StencilEnable; + StencilReadMask = o.StencilReadMask; + StencilWriteMask = o.StencilWriteMask; + FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; + FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; + FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; + FrontFace.StencilFunc = o.FrontFace.StencilFunc; + BackFace.StencilFailOp = o.BackFace.StencilFailOp; + BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; + BackFace.StencilPassOp = o.BackFace.StencilPassOp; + BackFace.StencilFunc = o.BackFace.StencilFunc; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT ) + { + DepthEnable = TRUE; + DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; + DepthFunc = D3D12_COMPARISON_FUNC_LESS; + StencilEnable = FALSE; + StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK; + StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK; + const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = + { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS }; + FrontFace = defaultStencilOp; + BackFace = defaultStencilOp; + DepthBoundsTestEnable = FALSE; + } + explicit CD3DX12_DEPTH_STENCIL_DESC1( + BOOL depthEnable, + D3D12_DEPTH_WRITE_MASK depthWriteMask, + D3D12_COMPARISON_FUNC depthFunc, + BOOL stencilEnable, + UINT8 stencilReadMask, + UINT8 stencilWriteMask, + D3D12_STENCIL_OP frontStencilFailOp, + D3D12_STENCIL_OP frontStencilDepthFailOp, + D3D12_STENCIL_OP frontStencilPassOp, + D3D12_COMPARISON_FUNC frontStencilFunc, + D3D12_STENCIL_OP backStencilFailOp, + D3D12_STENCIL_OP backStencilDepthFailOp, + D3D12_STENCIL_OP backStencilPassOp, + D3D12_COMPARISON_FUNC backStencilFunc, + BOOL depthBoundsTestEnable ) + { + DepthEnable = depthEnable; + DepthWriteMask = depthWriteMask; + DepthFunc = depthFunc; + StencilEnable = stencilEnable; + StencilReadMask = stencilReadMask; + StencilWriteMask = stencilWriteMask; + FrontFace.StencilFailOp = frontStencilFailOp; + FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; + FrontFace.StencilPassOp = frontStencilPassOp; + FrontFace.StencilFunc = frontStencilFunc; + BackFace.StencilFailOp = backStencilFailOp; + BackFace.StencilDepthFailOp = backStencilDepthFailOp; + BackFace.StencilPassOp = backStencilPassOp; + BackFace.StencilFunc = backStencilFunc; + DepthBoundsTestEnable = depthBoundsTestEnable; + } + operator D3D12_DEPTH_STENCIL_DESC() const + { + D3D12_DEPTH_STENCIL_DESC D; + D.DepthEnable = DepthEnable; + D.DepthWriteMask = DepthWriteMask; + D.DepthFunc = DepthFunc; + D.StencilEnable = StencilEnable; + D.StencilReadMask = StencilReadMask; + D.StencilWriteMask = StencilWriteMask; + D.FrontFace.StencilFailOp = FrontFace.StencilFailOp; + D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp; + D.FrontFace.StencilPassOp = FrontFace.StencilPassOp; + D.FrontFace.StencilFunc = FrontFace.StencilFunc; + D.BackFace.StencilFailOp = BackFace.StencilFailOp; + D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp; + D.BackFace.StencilPassOp = BackFace.StencilPassOp; + D.BackFace.StencilFunc = BackFace.StencilFunc; + return D; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC +{ + CD3DX12_BLEND_DESC() = default; + explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) : + D3D12_BLEND_DESC( o ) + {} + explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) + { + AlphaToCoverageEnable = FALSE; + IndependentBlendEnable = FALSE; + const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = + { + FALSE,FALSE, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD, + D3D12_LOGIC_OP_NOOP, + D3D12_COLOR_WRITE_ENABLE_ALL, + }; + for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + RenderTarget[ i ] = defaultRenderTargetBlendDesc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC +{ + CD3DX12_RASTERIZER_DESC() = default; + explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) : + D3D12_RASTERIZER_DESC( o ) + {} + explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) + { + FillMode = D3D12_FILL_MODE_SOLID; + CullMode = D3D12_CULL_MODE_BACK; + FrontCounterClockwise = FALSE; + DepthBias = D3D12_DEFAULT_DEPTH_BIAS; + DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; + SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; + DepthClipEnable = TRUE; + MultisampleEnable = FALSE; + AntialiasedLineEnable = FALSE; + ForcedSampleCount = 0; + ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + explicit CD3DX12_RASTERIZER_DESC( + D3D12_FILL_MODE fillMode, + D3D12_CULL_MODE cullMode, + BOOL frontCounterClockwise, + INT depthBias, + FLOAT depthBiasClamp, + FLOAT slopeScaledDepthBias, + BOOL depthClipEnable, + BOOL multisampleEnable, + BOOL antialiasedLineEnable, + UINT forcedSampleCount, + D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + FillMode = fillMode; + CullMode = cullMode; + FrontCounterClockwise = frontCounterClockwise; + DepthBias = depthBias; + DepthBiasClamp = depthBiasClamp; + SlopeScaledDepthBias = slopeScaledDepthBias; + DepthClipEnable = depthClipEnable; + MultisampleEnable = multisampleEnable; + AntialiasedLineEnable = antialiasedLineEnable; + ForcedSampleCount = forcedSampleCount; + ConservativeRaster = conservativeRaster; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO +{ + CD3DX12_RESOURCE_ALLOCATION_INFO() = default; + explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) : + D3D12_RESOURCE_ALLOCATION_INFO( o ) + {} + CD3DX12_RESOURCE_ALLOCATION_INFO( + UINT64 size, + UINT64 alignment ) + { + SizeInBytes = size; + Alignment = alignment; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES +{ + CD3DX12_HEAP_PROPERTIES() = default; + explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) : + D3D12_HEAP_PROPERTIES(o) + {} + CD3DX12_HEAP_PROPERTIES( + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = D3D12_HEAP_TYPE_CUSTOM; + CPUPageProperty = cpuPageProperty; + MemoryPoolPreference = memoryPoolPreference; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + explicit CD3DX12_HEAP_PROPERTIES( + D3D12_HEAP_TYPE type, + UINT creationNodeMask = 1, + UINT nodeMask = 1 ) + { + Type = type; + CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + CreationNodeMask = creationNodeMask; + VisibleNodeMask = nodeMask; + } + bool IsCPUAccessible() const + { + return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM && + (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK)); + } +}; +inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ + return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && + l.MemoryPoolPreference == r.MemoryPoolPreference && + l.CreationNodeMask == r.CreationNodeMask && + l.VisibleNodeMask == r.VisibleNodeMask; +} +inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC +{ + CD3DX12_HEAP_DESC() = default; + explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) : + D3D12_HEAP_DESC(o) + {} + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_PROPERTIES properties, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = properties; + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_HEAP_TYPE type, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + UINT64 size, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + UINT64 alignment = 0, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = size; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_PROPERTIES properties, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = properties; + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_HEAP_TYPE type, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( type ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + CD3DX12_HEAP_DESC( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_CPU_PAGE_PROPERTY cpuPageProperty, + D3D12_MEMORY_POOL memoryPoolPreference, + D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) + { + SizeInBytes = resAllocInfo.SizeInBytes; + Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); + Alignment = resAllocInfo.Alignment; + Flags = flags; + } + bool IsCPUAccessible() const + { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } +}; +inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ + return l.SizeInBytes == r.SizeInBytes && + l.Properties == r.Properties && + l.Alignment == r.Alignment && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE +{ + CD3DX12_CLEAR_VALUE() = default; + explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) : + D3D12_CLEAR_VALUE(o) + {} + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + const FLOAT color[4] ) + { + Format = format; + memcpy( Color, color, sizeof( Color ) ); + } + CD3DX12_CLEAR_VALUE( + DXGI_FORMAT format, + FLOAT depth, + UINT8 stencil ) + { + Format = format; + /* Use memcpy to preserve NAN values */ + memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); + DepthStencil.Stencil = stencil; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE : public D3D12_RANGE +{ + CD3DX12_RANGE() = default; + explicit CD3DX12_RANGE(const D3D12_RANGE &o) : + D3D12_RANGE(o) + {} + CD3DX12_RANGE( + SIZE_T begin, + SIZE_T end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 +{ + CD3DX12_RANGE_UINT64() = default; + explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) : + D3D12_RANGE_UINT64(o) + {} + CD3DX12_RANGE_UINT64( + UINT64 begin, + UINT64 end ) + { + Begin = begin; + End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 +{ + CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; + explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) : + D3D12_SUBRESOURCE_RANGE_UINT64(o) + {} + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + const D3D12_RANGE_UINT64& range ) + { + Subresource = subresource; + Range = range; + } + CD3DX12_SUBRESOURCE_RANGE_UINT64( + UINT subresource, + UINT64 begin, + UINT64 end ) + { + Subresource = subresource; + Range.Begin = begin; + Range.End = end; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE +{ + CD3DX12_SHADER_BYTECODE() = default; + explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) : + D3D12_SHADER_BYTECODE(o) + {} + CD3DX12_SHADER_BYTECODE( + _In_ ID3DBlob* pShaderBlob ) + { + pShaderBytecode = pShaderBlob->GetBufferPointer(); + BytecodeLength = pShaderBlob->GetBufferSize(); + } + CD3DX12_SHADER_BYTECODE( + const void* _pShaderBytecode, + SIZE_T bytecodeLength ) + { + pShaderBytecode = _pShaderBytecode; + BytecodeLength = bytecodeLength; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE +{ + CD3DX12_TILED_RESOURCE_COORDINATE() = default; + explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) : + D3D12_TILED_RESOURCE_COORDINATE(o) + {} + CD3DX12_TILED_RESOURCE_COORDINATE( + UINT x, + UINT y, + UINT z, + UINT subresource ) + { + X = x; + Y = y; + Z = z; + Subresource = subresource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE +{ + CD3DX12_TILE_REGION_SIZE() = default; + explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) : + D3D12_TILE_REGION_SIZE(o) + {} + CD3DX12_TILE_REGION_SIZE( + UINT numTiles, + BOOL useBox, + UINT width, + UINT16 height, + UINT16 depth ) + { + NumTiles = numTiles; + UseBox = useBox; + Width = width; + Height = height; + Depth = depth; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING +{ + CD3DX12_SUBRESOURCE_TILING() = default; + explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) : + D3D12_SUBRESOURCE_TILING(o) + {} + CD3DX12_SUBRESOURCE_TILING( + UINT widthInTiles, + UINT16 heightInTiles, + UINT16 depthInTiles, + UINT startTileIndexInOverallResource ) + { + WidthInTiles = widthInTiles; + HeightInTiles = heightInTiles; + DepthInTiles = depthInTiles; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE +{ + CD3DX12_TILE_SHAPE() = default; + explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) : + D3D12_TILE_SHAPE(o) + {} + CD3DX12_TILE_SHAPE( + UINT widthInTexels, + UINT heightInTexels, + UINT depthInTexels ) + { + WidthInTexels = widthInTexels; + HeightInTexels = heightInTexels; + DepthInTexels = depthInTexels; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER +{ + CD3DX12_RESOURCE_BARRIER() = default; + explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) : + D3D12_RESOURCE_BARRIER(o) + {} + static inline CD3DX12_RESOURCE_BARRIER Transition( + _In_ ID3D12Resource* pResource, + D3D12_RESOURCE_STATES stateBefore, + D3D12_RESOURCE_STATES stateAfter, + UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, + D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + result.Flags = flags; + barrier.Transition.pResource = pResource; + barrier.Transition.StateBefore = stateBefore; + barrier.Transition.StateAfter = stateAfter; + barrier.Transition.Subresource = subresource; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER Aliasing( + _In_ ID3D12Resource* pResourceBefore, + _In_ ID3D12Resource* pResourceAfter) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING; + barrier.Aliasing.pResourceBefore = pResourceBefore; + barrier.Aliasing.pResourceAfter = pResourceAfter; + return result; + } + static inline CD3DX12_RESOURCE_BARRIER UAV( + _In_ ID3D12Resource* pResource) + { + CD3DX12_RESOURCE_BARRIER result = {}; + D3D12_RESOURCE_BARRIER &barrier = result; + result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrier.UAV.pResource = pResource; + return result; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO +{ + CD3DX12_PACKED_MIP_INFO() = default; + explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) : + D3D12_PACKED_MIP_INFO(o) + {} + CD3DX12_PACKED_MIP_INFO( + UINT8 numStandardMips, + UINT8 numPackedMips, + UINT numTilesForPackedMips, + UINT startTileIndexInOverallResource ) + { + NumStandardMips = numStandardMips; + NumPackedMips = numPackedMips; + NumTilesForPackedMips = numTilesForPackedMips; + StartTileIndexInOverallResource = startTileIndexInOverallResource; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT +{ + CD3DX12_SUBRESOURCE_FOOTPRINT() = default; + explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) : + D3D12_SUBRESOURCE_FOOTPRINT(o) + {} + CD3DX12_SUBRESOURCE_FOOTPRINT( + DXGI_FORMAT format, + UINT width, + UINT height, + UINT depth, + UINT rowPitch ) + { + Format = format; + Width = width; + Height = height; + Depth = depth; + RowPitch = rowPitch; + } + explicit CD3DX12_SUBRESOURCE_FOOTPRINT( + const D3D12_RESOURCE_DESC& resDesc, + UINT rowPitch ) + { + Format = resDesc.Format; + Width = UINT( resDesc.Width ); + Height = resDesc.Height; + Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1); + RowPitch = rowPitch; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION +{ + CD3DX12_TEXTURE_COPY_LOCATION() = default; + explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) : + D3D12_TEXTURE_COPY_LOCATION(o) + {} + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + PlacedFootprint = {}; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + PlacedFootprint = Footprint; + } + CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) + { + pResource = pRes; + Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + SubresourceIndex = Sub; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE +{ + CD3DX12_DESCRIPTOR_RANGE() = default; + explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) : + D3D12_DESCRIPTOR_RANGE(o) + {} + CD3DX12_DESCRIPTOR_RANGE( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) : + D3D12_ROOT_DESCRIPTOR_TABLE(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS +{ + CD3DX12_ROOT_CONSTANTS() = default; + explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) : + D3D12_ROOT_CONSTANTS(o) + {} + CD3DX12_ROOT_CONSTANTS( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(num32BitValues, shaderRegister, registerSpace); + } + + inline void Init( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, num32BitValues, shaderRegister, registerSpace); + } + + static inline void Init( + _Out_ D3D12_ROOT_CONSTANTS &rootConstants, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0) + { + rootConstants.Num32BitValues = num32BitValues; + rootConstants.ShaderRegister = shaderRegister; + rootConstants.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR +{ + CD3DX12_ROOT_DESCRIPTOR() = default; + explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) : + D3D12_ROOT_DESCRIPTOR(o) + {} + CD3DX12_ROOT_DESCRIPTOR( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(shaderRegister, registerSpace); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0) + { + Init(*this, shaderRegister, registerSpace); + } + + static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER +{ + CD3DX12_ROOT_PARAMETER() = default; + explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) : + D3D12_ROOT_PARAMETER(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC +{ + CD3DX12_STATIC_SAMPLER_DESC() = default; + explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) : + D3D12_STATIC_SAMPLER_DESC(o) + {} + CD3DX12_STATIC_SAMPLER_DESC( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + + static inline void Init( + _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc, + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + samplerDesc.ShaderRegister = shaderRegister; + samplerDesc.Filter = filter; + samplerDesc.AddressU = addressU; + samplerDesc.AddressV = addressV; + samplerDesc.AddressW = addressW; + samplerDesc.MipLODBias = mipLODBias; + samplerDesc.MaxAnisotropy = maxAnisotropy; + samplerDesc.ComparisonFunc = comparisonFunc; + samplerDesc.BorderColor = borderColor; + samplerDesc.MinLOD = minLOD; + samplerDesc.MaxLOD = maxLOD; + samplerDesc.ShaderVisibility = shaderVisibility; + samplerDesc.RegisterSpace = registerSpace; + } + inline void Init( + UINT shaderRegister, + D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC, + D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + FLOAT mipLODBias = 0, + UINT maxAnisotropy = 16, + D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, + FLOAT minLOD = 0.f, + FLOAT maxLOD = D3D12_FLOAT32_MAX, + D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + UINT registerSpace = 0) + { + Init( + *this, + shaderRegister, + filter, + addressU, + addressV, + addressW, + mipLODBias, + maxAnisotropy, + comparisonFunc, + borderColor, + minLOD, + maxLOD, + shaderVisibility, + registerSpace); + } + +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC +{ + CD3DX12_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) : + D3D12_ROOT_SIGNATURE_DESC(o) + {} + CD3DX12_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.NumParameters = numParameters; + desc.pParameters = _pParameters; + desc.NumStaticSamplers = numStaticSamplers; + desc.pStaticSamplers = _pStaticSamplers; + desc.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1 +{ + CD3DX12_DESCRIPTOR_RANGE1() = default; + explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) : + D3D12_DESCRIPTOR_RANGE1(o) + {} + CD3DX12_DESCRIPTOR_RANGE1( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + inline void Init( + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart); + } + + static inline void Init( + _Out_ D3D12_DESCRIPTOR_RANGE1 &range, + D3D12_DESCRIPTOR_RANGE_TYPE rangeType, + UINT numDescriptors, + UINT baseShaderRegister, + UINT registerSpace = 0, + D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE, + UINT offsetInDescriptorsFromTableStart = + D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND) + { + range.RangeType = rangeType; + range.NumDescriptors = numDescriptors; + range.BaseShaderRegister = baseShaderRegister; + range.RegisterSpace = registerSpace; + range.Flags = flags; + range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1 +{ + CD3DX12_ROOT_DESCRIPTOR_TABLE1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) : + D3D12_ROOT_DESCRIPTOR_TABLE1(o) + {} + CD3DX12_ROOT_DESCRIPTOR_TABLE1( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(numDescriptorRanges, _pDescriptorRanges); + } + + inline void Init( + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + Init(*this, numDescriptorRanges, _pDescriptorRanges); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable, + UINT numDescriptorRanges, + _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) + { + rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; + rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 +{ + CD3DX12_ROOT_DESCRIPTOR1() = default; + explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) : + D3D12_ROOT_DESCRIPTOR1(o) + {} + CD3DX12_ROOT_DESCRIPTOR1( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(shaderRegister, registerSpace, flags); + } + + inline void Init( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + Init(*this, shaderRegister, registerSpace, flags); + } + + static inline void Init( + _Out_ D3D12_ROOT_DESCRIPTOR1 &table, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) + { + table.ShaderRegister = shaderRegister; + table.RegisterSpace = registerSpace; + table.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 +{ + CD3DX12_ROOT_PARAMETER1() = default; + explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) : + D3D12_ROOT_PARAMETER1(o) + {} + + static inline void InitAsDescriptorTable( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges); + } + + static inline void InitAsConstants( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace); + } + + static inline void InitAsConstantBufferView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsShaderResourceView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + static inline void InitAsUnorderedAccessView( + _Out_ D3D12_ROOT_PARAMETER1 &rootParam, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; + rootParam.ShaderVisibility = visibility; + CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags); + } + + inline void InitAsDescriptorTable( + UINT numDescriptorRanges, + _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); + } + + inline void InitAsConstants( + UINT num32BitValues, + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); + } + + inline void InitAsConstantBufferView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsShaderResourceView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility); + } + + inline void InitAsUnorderedAccessView( + UINT shaderRegister, + UINT registerSpace = 0, + D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE, + D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) + { + InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC +{ + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) : + D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) + {} + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + Desc_1_0 = o; + } + explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) + { + Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + Desc_1_1 = o; + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) + { + Init_1_1(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE); + } + + inline void Init_1_0( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_0( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0; + desc.Desc_1_0.NumParameters = numParameters; + desc.Desc_1_0.pParameters = _pParameters; + desc.Desc_1_0.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_0.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_0.Flags = flags; + } + + inline void Init_1_1( + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); + } + + static inline void Init_1_1( + _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc, + UINT numParameters, + _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters, + UINT numStaticSamplers = 0, + _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = nullptr, + D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) + { + desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1; + desc.Desc_1_1.NumParameters = numParameters; + desc.Desc_1_1.pParameters = _pParameters; + desc.Desc_1_1.NumStaticSamplers = numStaticSamplers; + desc.Desc_1_1.pStaticSamplers = _pStaticSamplers; + desc.Desc_1_1.Flags = flags; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE +{ + CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) : + D3D12_CPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +{ + CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; + explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) : + D3D12_GPU_DESCRIPTOR_HANDLE(o) + {} + CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) + { + InitOffsetted(other, offsetScaledByIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) + { + ptr += INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize); + return *this; + } + CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) + { + ptr += offsetScaledByIncrementSize; + return *this; + } + inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr == other.ptr); + } + inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const + { + return (ptr != other.ptr); + } + CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) + { + ptr = other.ptr; + return *this; + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + InitOffsetted(*this, base, offsetScaledByIncrementSize); + } + + inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) + { + handle.ptr = base.ptr + offsetScaledByIncrementSize; + } + + static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) + { + handle.ptr = static_cast(base.ptr + INT64(offsetInDescriptors) * UINT64(descriptorIncrementSize)); + } +}; + +//------------------------------------------------------------------------------------------------ +inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) +{ + return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; +} + +//------------------------------------------------------------------------------------------------ +template +inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) +{ + MipSlice = static_cast(Subresource % MipLevels); + ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); + PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); +} + +//------------------------------------------------------------------------------------------------ +inline UINT8 D3D12GetFormatPlaneCount( + _In_ ID3D12Device* pDevice, + DXGI_FORMAT Format + ) +{ + D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; + if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo)))) + { + return 0; + } + return formatInfo.PlaneCount; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC +{ + CD3DX12_RESOURCE_DESC() = default; + explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) : + D3D12_RESOURCE_DESC( o ) + {} + CD3DX12_RESOURCE_DESC( + D3D12_RESOURCE_DIMENSION dimension, + UINT64 alignment, + UINT64 width, + UINT height, + UINT16 depthOrArraySize, + UINT16 mipLevels, + DXGI_FORMAT format, + UINT sampleCount, + UINT sampleQuality, + D3D12_TEXTURE_LAYOUT layout, + D3D12_RESOURCE_FLAGS flags ) + { + Dimension = dimension; + Alignment = alignment; + Width = width; + Height = height; + DepthOrArraySize = depthOrArraySize; + MipLevels = mipLevels; + Format = format; + SampleDesc.Count = sampleCount; + SampleDesc.Quality = sampleQuality; + Layout = layout; + Flags = flags; + } + static inline CD3DX12_RESOURCE_DESC Buffer( + const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, + 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Buffer( + UINT64 width, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, + DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex1D( + DXGI_FORMAT format, + UINT64 width, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, + mipLevels, format, 1, 0, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex2D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 arraySize = 1, + UINT16 mipLevels = 0, + UINT sampleCount = 1, + UINT sampleQuality = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, + mipLevels, format, sampleCount, sampleQuality, layout, flags ); + } + static inline CD3DX12_RESOURCE_DESC Tex3D( + DXGI_FORMAT format, + UINT64 width, + UINT height, + UINT16 depth, + UINT16 mipLevels = 0, + D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, + D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN, + UINT64 alignment = 0 ) + { + return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, + mipLevels, format, 1, 0, layout, flags ); + } + inline UINT16 Depth() const + { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT16 ArraySize() const + { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); } + inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const + { return D3D12GetFormatPlaneCount(pDevice, Format); } + inline UINT Subresources(_In_ ID3D12Device* pDevice) const + { return MipLevels * ArraySize() * PlaneCount(pDevice); } + inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) + { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } +}; +inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ + return l.Dimension == r.Dimension && + l.Alignment == r.Alignment && + l.Width == r.Width && + l.Height == r.Height && + l.DepthOrArraySize == r.DepthOrArraySize && + l.MipLevels == r.MipLevels && + l.Format == r.Format && + l.SampleDesc.Count == r.SampleDesc.Count && + l.SampleDesc.Quality == r.SampleDesc.Quality && + l.Layout == r.Layout && + l.Flags == r.Flags; +} +inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) +{ return !( l == r ); } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC +{ + CD3DX12_VIEW_INSTANCING_DESC() = default; + explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) : + D3D12_VIEW_INSTANCING_DESC( o ) + {} + explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) + { + ViewInstanceCount = 0; + pViewInstanceLocations = nullptr; + Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; + } + explicit CD3DX12_VIEW_INSTANCING_DESC( + UINT InViewInstanceCount, + const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, + D3D12_VIEW_INSTANCING_FLAGS InFlags) + { + ViewInstanceCount = InViewInstanceCount; + pViewInstanceLocations = InViewInstanceLocations; + Flags = InFlags; + } +}; + +//------------------------------------------------------------------------------------------------ +// Row-by-row memcpy +inline void MemcpySubresource( + _In_ const D3D12_MEMCPY_DEST* pDest, + _In_ const D3D12_SUBRESOURCE_DATA* pSrc, + SIZE_T RowSizeInBytes, + UINT NumRows, + UINT NumSlices) +{ + for (UINT z = 0; z < NumSlices; ++z) + { + BYTE* pDestSlice = reinterpret_cast(pDest->pData) + pDest->SlicePitch * z; + const BYTE* pSrcSlice = reinterpret_cast(pSrc->pData) + pSrc->SlicePitch * z; + for (UINT y = 0; y < NumRows; ++y) + { + memcpy(pDestSlice + pDest->RowPitch * y, + pSrcSlice + pSrc->RowPitch * y, + RowSizeInBytes); + } + } +} + +//------------------------------------------------------------------------------------------------ +// Returns required size of a buffer to be used for data upload +inline UINT64 GetRequiredIntermediateSize( + _In_ ID3D12Resource* pDestinationResource, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources) +{ + auto Desc = pDestinationResource->GetDesc(); + UINT64 RequiredSize = 0; + + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize); + pDevice->Release(); + + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// All arrays must be populated (e.g. by calling GetCopyableFootprints) +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 RequiredSize, + _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, + _In_reads_(NumSubresources) const UINT* pNumRows, + _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes, + _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData) +{ + // Minor validation + auto IntermediateDesc = pIntermediate->GetDesc(); + auto DestinationDesc = pDestinationResource->GetDesc(); + if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || + IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || + RequiredSize > SIZE_T(-1) || + (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && + (FirstSubresource != 0 || NumSubresources != 1))) + { + return 0; + } + + BYTE* pData; + HRESULT hr = pIntermediate->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + return 0; + } + + for (UINT i = 0; i < NumSubresources; ++i) + { + if (pRowSizesInBytes[i] > SIZE_T(-1)) return 0; + D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; + MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); + } + pIntermediate->Unmap(0, nullptr); + + if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) + { + pCmdList->CopyBufferRegion( + pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); + } + else + { + for (UINT i = 0; i < NumSubresources; ++i) + { + CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); + CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); + pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); + } + } + return RequiredSize; +} + +//------------------------------------------------------------------------------------------------ +// Heap-allocating UpdateSubresources implementation +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + UINT64 MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; + if (MemToAlloc > SIZE_MAX) + { + return 0; + } + void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); + if (pMem == nullptr) + { + return 0; + } + auto pLayouts = reinterpret_cast(pMem); + UINT64* pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); + UINT* pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); + pDevice->Release(); + + UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); + HeapFree(GetProcessHeap(), 0, pMem); + return Result; +} + +//------------------------------------------------------------------------------------------------ +// Stack-allocating UpdateSubresources implementation +template +inline UINT64 UpdateSubresources( + _In_ ID3D12GraphicsCommandList* pCmdList, + _In_ ID3D12Resource* pDestinationResource, + _In_ ID3D12Resource* pIntermediate, + UINT64 IntermediateOffset, + _In_range_(0, MaxSubresources) UINT FirstSubresource, + _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources, + _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData) +{ + UINT64 RequiredSize = 0; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; + UINT NumRows[MaxSubresources]; + UINT64 RowSizesInBytes[MaxSubresources]; + + auto Desc = pDestinationResource->GetDesc(); + ID3D12Device* pDevice = nullptr; + pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast(&pDevice)); + pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); + pDevice->Release(); + + return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData); +} + +//------------------------------------------------------------------------------------------------ +inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) +{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } + +//------------------------------------------------------------------------------------------------ +template +inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) +{ + // This cast is useful for passing strongly typed command list pointers into + // ExecuteCommandLists. + // This cast is valid as long as the const-ness is respected. D3D12 APIs do + // respect the const-ness of their arguments. + return reinterpret_cast(pp); +} + +//------------------------------------------------------------------------------------------------ +// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update. +// To help enable root signature 1.1 features when they are available and not require maintaining +// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when +// 1.1 is not supported. +inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, + D3D_ROOT_SIGNATURE_VERSION MaxVersion, + _Outptr_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob) +{ + if (ppErrorBlob != nullptr) + { + *ppErrorBlob = nullptr; + } + + switch (MaxVersion) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + switch (pRootSignatureDesc->Version) + { + case D3D_ROOT_SIGNATURE_VERSION_1_0: + return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + { + HRESULT hr = S_OK; + const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; + + const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters; + void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr; + if (ParametersSize > 0 && pParameters == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pParameters_1_0 = reinterpret_cast(pParameters); + + if (SUCCEEDED(hr)) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters); + pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType; + pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility; + + switch (desc_1_1.pParameters[n].ParameterType) + { + case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: + pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues; + pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace; + pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_CBV: + case D3D12_ROOT_PARAMETER_TYPE_SRV: + case D3D12_ROOT_PARAMETER_TYPE_UAV: + pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace; + pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister; + break; + + case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; + + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) + { + hr = E_OUTOFMEMORY; + } + auto pDescriptorRanges_1_0 = reinterpret_cast(pDescriptorRanges); + + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + } + } + + if (SUCCEEDED(hr)) + { + CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags); + hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); + } + + if (pParameters) + { + for (UINT n = 0; n < desc_1_1.NumParameters; n++) + { + if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) + { + HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pParameters_1_0[n].DescriptorTable.pDescriptorRanges))); + } + } + HeapFree(GetProcessHeap(), 0, pParameters); + } + return hr; + } + } + break; + + case D3D_ROOT_SIGNATURE_VERSION_1_1: + return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + } + + return E_INVALIDARG; +} + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY +{ + CD3DX12_RT_FORMAT_ARRAY() = default; + explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) + : D3D12_RT_FORMAT_ARRAY(o) + {} + explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) + { + NumRenderTargets = NumFormats; + memcpy(RTFormats, pFormats, sizeof(RTFormats)); + // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) + } +}; + +//------------------------------------------------------------------------------------------------ +// Pipeline State Stream Helpers +//------------------------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------------------------ +// Stream Subobjects, i.e. elements of a stream + +struct DefaultSampleMask { operator UINT() { return UINT_MAX; } }; +struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() { return DXGI_SAMPLE_DESC{1, 0}; } }; + +template +class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT +{ +private: + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type; + InnerStructType _Inner; +public: + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : _Type(Type), _Inner(DefaultArg()) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {} + CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; } + operator InnerStructType() const { return _Inner; } + operator InnerStructType&() { return _Inner; } +}; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; + +//------------------------------------------------------------------------------------------------ +// Stream Parser Helpers + +struct ID3DX12PipelineParserCallbacks +{ + // Subobject Callbacks + virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {} + virtual void NodeMaskCb(UINT) {} + virtual void RootSignatureCb(ID3D12RootSignature*) {} + virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {} + virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {} + virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {} + virtual void VSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void GSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {} + virtual void HSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void DSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void PSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void CSCb(const D3D12_SHADER_BYTECODE&) {} + virtual void BlendStateCb(const D3D12_BLEND_DESC&) {} + virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {} + virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {} + virtual void DSVFormatCb(DXGI_FORMAT) {} + virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} + virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} + virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} + virtual void SampleMaskCb(UINT) {} + virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} + virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} + + // Error Callbacks + virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} + virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} + virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} + + virtual ~ID3DX12PipelineParserCallbacks() = default; +}; + +// CD3DX12_PIPELINE_STATE_STREAM1 Works on RS3+ (where there is a new view instancing subobject). +// Use CD3DX12_PIPELINE_STATE_STREAM for RS2+ support. +struct CD3DX12_PIPELINE_STATE_STREAM1 +{ + CD3DX12_PIPELINE_STATE_STREAM1() = default; + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + {} + CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +// CD3DX12_PIPELINE_STATE_STREAM works on RS2+ but does not support new subobject(s) added in RS3+. +// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. +struct CD3DX12_PIPELINE_STATE_STREAM +{ + CD3DX12_PIPELINE_STATE_STREAM() = default; + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + {} + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; + +struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept + : SeenDSS(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} + void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} + void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} + void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} + void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} + void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} + void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} + void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override + { + PipelineStream.DSVFormat = DSVFormat; + if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} + void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} + +private: + bool SeenDSS; +}; + +inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) +{ + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + default: + return SubobjectType; + } +} + +inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) +{ + if (pCallbacks == nullptr) + { + return E_INVALIDARG; + } + + if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) + { + pCallbacks->ErrorBadInputParameter(1); // first parameter issue + return E_INVALIDARG; + } + + bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; + for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) + { + BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; + auto SubobjectType = *reinterpret_cast(pStream); + if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID) + { + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + } + if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)]) + { + pCallbacks->ErrorDuplicateSubobject(SubobjectType); + return E_INVALIDARG; // disallow subobject duplicates in a stream + } + SubobjectSeen[SubobjectType] = true; + switch (SubobjectType) + { + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: + pCallbacks->RootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: + pCallbacks->VSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: + pCallbacks->PSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: + pCallbacks->DSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: + pCallbacks->HSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: + pCallbacks->GSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: + pCallbacks->CSCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: + pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: + pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: + pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: + pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: + pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: + pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: + pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: + pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: + pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: + pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: + pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: + pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: + pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: + pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: + pCallbacks->FlagsCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); + break; + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: + pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); + break; + default: + pCallbacks->ErrorUnknownSubobject(SubobjectType); + return E_INVALIDARG; + break; + } + } + + return S_OK; +} + +//------------------------------------------------------------------------------------------------ +inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) +{ + if (a.Format != b.Format) return false; + if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT + || a.Format == DXGI_FORMAT_D16_UNORM + || a.Format == DXGI_FORMAT_D32_FLOAT + || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) + { + return (a.DepthStencil.Depth == b.DepthStencil.Depth) && + (a.DepthStencil.Stencil == b.DepthStencil.Stencil); + } else { + return (a.Color[0] == b.Color[0]) && + (a.Color[1] == b.Color[1]) && + (a.Color[2] == b.Color[2]) && + (a.Color[3] == b.Color[3]); + } +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) +{ + return a.ClearValue == b.ClearValue; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) +{ + if (a.pSrcResource != b.pSrcResource) return false; + if (a.pDstResource != b.pDstResource) return false; + if (a.SubresourceCount != b.SubresourceCount) return false; + if (a.Format != b.Format) return false; + if (a.ResolveMode != b.ResolveMode) return false; + if (a.PreserveResolveSource != b.PreserveResolveSource) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR && !(a.Clear == b.Clear)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS &a, const D3D12_RENDER_PASS_ENDING_ACCESS &b) +{ + if (a.Type != b.Type) return false; + if (a.Type == D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE && !(a.Resolve == b.Resolve)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.BeginningAccess == b.BeginningAccess)) return false; + if (!(a.EndingAccess == b.EndingAccess)) return false; + return true; +} +inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) +{ + if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; + if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.StencilBeginningAccess == b.DepthBeginningAccess)) return false; + if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; + if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; + return true; +} + + +#ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +//================================================================================================ +// D3DX12 State Object Creation Helpers +// +// Helper classes for creating new style state objects out of an arbitrary set of subobjects. +// Uses STL +// +// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see it's public methods). +// One of its methods is CreateSubobject(), which has a comment showing a couple of options for +// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT +// etc.). The subobject helpers each have methods specific to the subobject for configuring it's +// contents. +// +//================================================================================================ +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_DESC +{ +public: + CD3DX12_STATE_OBJECT_DESC() + { + Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); + } + CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) + { + Init(Type); + } + void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) { m_Desc.Type = Type; } + operator const D3D12_STATE_OBJECT_DESC&() + { + // Do final preparation work + m_RepointedAssociations.clear(); + m_SubobjectArray.clear(); + m_SubobjectArray.reserve(m_Desc.NumSubobjects); + // Flatten subobjects into an array (each flattened subobject still has a + // member that's a pointer to it's desc that's not flattened) + for (auto Iter = m_SubobjectList.begin(); + Iter != m_SubobjectList.end(); Iter++) + { + m_SubobjectArray.push_back(*Iter); + // Store new location in array so we can redirect pointers contained in subobjects + Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); + } + // For subobjects with pointer fields, create a new copy of those subobject definitions + // with fixed pointers + for (UINT i = 0; i < m_Desc.NumSubobjects; i++) + { + if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) + { + auto pOriginalSubobjectAssociation = + reinterpret_cast(m_SubobjectArray[i].pDesc); + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; + auto pWrapper = + static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); + Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; + m_RepointedAssociations.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); + } + } + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; + return m_Desc; + } + operator const D3D12_STATE_OBJECT_DESC*() + { + // Cast calls the above final preparation work + return &static_cast(*this); + } + + // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) + // whose lifetime is owned by this class. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); + // auto Lib0 = Collection1.CreateSubobject(); + // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); + // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be + // // data/engine driven + // etc. + // + // Alternatively, users can instantiate sububject helpers explicitly, such as via local + // variables instead, passing the state object desc that should point to it into the helper + // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). + // In this alternative scenario, the user must keep the subobject alive as long as the state + // object it is associated with is alive, else it's pointer references will be stale. + // e.g. + // + // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); + // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); + // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports + // // - meaning all exports in the libraries + // // are exported + // etc. + + template + T* CreateSubobject() + { + T* pSubobject = new T(*this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + +private: + D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) + { + SUBOBJECT_WRAPPER Subobject; + Subobject.pSubobjectArrayLocation = nullptr; + Subobject.Type = Type; + Subobject.pDesc = pDesc; + m_SubobjectList.push_back(Subobject); + m_Desc.NumSubobjects++; + return &m_SubobjectList.back(); + } + void Init(D3D12_STATE_OBJECT_TYPE Type) + { + SetStateObjectType(Type); + m_Desc.pSubobjects = nullptr; + m_Desc.NumSubobjects = 0; + m_SubobjectList.clear(); + m_SubobjectArray.clear(); + m_RepointedAssociations.clear(); + } + typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT + { + D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array + // for repointing pointers in subobjects + } SUBOBJECT_WRAPPER; + D3D12_STATE_OBJECT_DESC m_Desc; + std::list m_SubobjectList; // Pointers to list nodes handed out so + // these can be edited live + std::vector m_SubobjectArray; // Built at the end, copying list contents + + std::list + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array + + class StringContainer + { + public: + LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + { + if (string) + { + if (bSingleString) + { + m_Strings.clear(); + m_Strings.push_back(string); + } + else + { + m_Strings.push_back(string); + } + return m_Strings.back().c_str(); + } + else + { + return nullptr; + } + } + void clear() { m_Strings.clear(); } + private: + std::list m_Strings; + }; + + class SUBOBJECT_HELPER_BASE + { + public: + SUBOBJECT_HELPER_BASE() { Init(); }; + virtual ~SUBOBJECT_HELPER_BASE() {}; + virtual D3D12_STATE_SUBOBJECT_TYPE Type() const = 0; + void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); + } + protected: + virtual void* Data() = 0; + void Init() { m_pSubobject = nullptr; } + D3D12_STATE_SUBOBJECT* m_pSubobject; + }; + +#if(__cplusplus >= 201103L) + std::list> m_OwnedSubobjectHelpers; +#else + class OWNED_HELPER + { + public: + OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) { m_pHelper = pHelper; } + ~OWNED_HELPER() { delete m_pHelper; } + const SUBOBJECT_HELPER_BASE* m_pHelper; + }; + + std::list m_OwnedSubobjectHelpers; +#endif + + friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; + friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + friend class CD3DX12_HIT_GROUP_SUBOBJECT; + friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; + friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; + friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; + friend class CD3DX12_NODE_MASK_SUBOBJECT; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_LIBRARY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_LIBRARY_SUBOBJECT() + { + Init(); + } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDXILLibrary(D3D12_SHADER_BYTECODE*pCode) + { + static const D3D12_SHADER_BYTECODE Default = {}; + m_Desc.DXILLibrary = pCode ? *pCode : Default; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_LIBRARY_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_LIBRARY_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_SUBOBJECT() + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetExistingCollection(ID3D12StateObject*pExistingCollection) + { + m_Desc.pExistingCollection = pExistingCollection; + m_CollectionRef = pExistingCollection; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_EXISTING_COLLECTION_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_CollectionRef = nullptr; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_EXISTING_COLLECTION_DESC m_Desc; + Microsoft::WRL::ComPtr m_CollectionRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() + { + Init(); + } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) + { + m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() + { + Init(); + } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) + { + m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); + } + void AddExport(LPCWSTR Export) + { + m_Desc.NumExports++; + m_Exports.push_back(m_Strings.LocalCopy(Export)); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + } + template + void AddExports(LPCWSTR (&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + void AddExports(LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + AddExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_SubobjectName.clear(); + m_Exports.clear(); + } + void* Data() { return &m_Desc; } + D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + std::vector m_Exports; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_HIT_GROUP_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_HIT_GROUP_SUBOBJECT() + { + Init(); + } + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetHitGroupExport(LPCWSTR exportName) + { + m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); + } + void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) { m_Desc.Type = Type; } + void SetAnyHitShaderImport(LPCWSTR importName) + { + m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); + } + void SetClosestHitShaderImport(LPCWSTR importName) + { + m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); + } + void SetIntersectionShaderImport(LPCWSTR importName) + { + m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_HIT_GROUP_DESC&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + for (UINT i = 0; i < m_NumStrings; i++) + { + m_Strings[i].clear(); + } + } + void* Data() { return &m_Desc; } + D3D12_HIT_GROUP_DESC m_Desc; + static const UINT m_NumStrings = 4; + CD3DX12_STATE_OBJECT_DESC::StringContainer + m_Strings[m_NumStrings]; // one string for every entrypoint name +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) + { + m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; + m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_SHADER_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_SHADER_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void Config(UINT MaxTraceRecursionDepth) + { + m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() + { + Init(); + } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetRootSignature(ID3D12RootSignature* pRootSig) + { + m_pRootSig = pRootSig; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator ID3D12RootSignature*() const { return m_pRootSig.Get(); } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_pRootSig = nullptr; + } + void* Data() { return m_pRootSig.GetAddressOf(); } + Microsoft::WRL::ComPtr m_pRootSig; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) + { + m_Desc.Flags = Flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_STATE_OBJECT_CONFIG&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_STATE_OBJECT_CONFIG m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_NODE_MASK_SUBOBJECT() + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNodeMask(UINT NodeMask) + { + m_Desc.NodeMask = NodeMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const + { + return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; + } + operator const D3D12_STATE_SUBOBJECT&() const { return *m_pSubobject; } + operator const D3D12_NODE_MASK&() const { return m_Desc; } +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#endif // #ifndef D3DX12_NO_STATE_OBJECT_HELPERS + +#endif // defined( __cplusplus ) + +#endif //__D3DX12_H__ + + + diff --git a/Chapter 20 Shadow Mapping/Core/Hash.h b/Chapter 20 Shadow Mapping/Core/Hash.h new file mode 100644 index 0000000..11adf02 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Hash.h @@ -0,0 +1,66 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#pragma once + +#include "Math/Common.h" + +// This requires SSE4.2 which is present on Intel Nehalem (Nov. 2008) +// and AMD Bulldozer (Oct. 2011) processors. I could put a runtime +// check for this, but I'm just going to assume people playing with +// DirectX 12 on Windows 10 have fairly recent machines. +#ifdef _M_X64 +#define ENABLE_SSE_CRC32 1 +#else +#define ENABLE_SSE_CRC32 0 +#endif + +#if ENABLE_SSE_CRC32 +#pragma intrinsic(_mm_crc32_u32) +#pragma intrinsic(_mm_crc32_u64) +#endif + +namespace Utility +{ + inline size_t HashRange(const uint32_t* const Begin, const uint32_t* const End, size_t Hash) + { +#if ENABLE_SSE_CRC32 + const uint64_t* Iter64 = (const uint64_t*)Math::AlignUp(Begin, 8); + const uint64_t* const End64 = (const uint64_t* const)Math::AlignDown(End, 8); + + // If not 64-bit aligned, start with a single u32 + if ((uint32_t*)Iter64 > Begin) + Hash = _mm_crc32_u32((uint32_t)Hash, *Begin); + + // Iterate over consecutive u64 values + while (Iter64 < End64) + Hash = _mm_crc32_u64((uint64_t)Hash, *Iter64++); + + // If there is a 32-bit remainder, accumulate that + if ((uint32_t*)Iter64 < End) + Hash = _mm_crc32_u32((uint32_t)Hash, *(uint32_t*)Iter64); +#else + // An inexpensive hash for CPUs lacking SSE4.2 + for (const uint32_t* Iter = Begin; Iter < End; ++Iter) + Hash = 16777619U * Hash ^ *Iter; +#endif + + return Hash; + } + + template inline size_t HashState( const T* StateDesc, size_t Count = 1, size_t Hash = 2166136261U ) + { + static_assert((sizeof(T) & 3) == 0 && alignof(T) >= 4, "State object is not word-aligned"); + return HashRange((uint32_t*)StateDesc, (uint32_t*)(StateDesc + Count), Hash); + } + +} // namespace Utility diff --git a/Chapter 20 Shadow Mapping/Core/Math/BoundingPlane.h b/Chapter 20 Shadow Mapping/Core/Math/BoundingPlane.h new file mode 100644 index 0000000..12c611c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/BoundingPlane.h @@ -0,0 +1,89 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingPlane + { + public: + + BoundingPlane() {} + BoundingPlane( Vector3 normalToPlane, float distanceFromOrigin ) : m_repr(normalToPlane, distanceFromOrigin) {} + BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ); + BoundingPlane( float A, float B, float C, float D ) : m_repr(A, B, C, D) {} + BoundingPlane( const BoundingPlane& plane ) : m_repr(plane.m_repr) {} + explicit BoundingPlane( Vector4 plane ) : m_repr(plane) {} + + INLINE operator Vector4() const { return m_repr; } + + // Returns the direction the plane is facing. (Warning: might not be normalized.) + Vector3 GetNormal( void ) const { return Vector3(XMVECTOR(m_repr)); } + + // Returns the point on the plane closest to the origin + Vector3 GetPointOnPlane( void ) const { return -GetNormal() * m_repr.GetW(); } + + // Distance from 3D point + Scalar DistanceFromPoint( Vector3 point ) const + { + return Dot(point, GetNormal()) + m_repr.GetW(); + } + + // Distance from homogeneous point + Scalar DistanceFromPoint(Vector4 point) const + { + return Dot(point, m_repr); + } + + // Most efficient way to transform a plane. (Involves one quaternion-vector rotation and one dot product.) + friend BoundingPlane operator* ( const OrthogonalTransform& xform, BoundingPlane plane ) + { + Vector3 normalToPlane = xform.GetRotation() * plane.GetNormal(); + float distanceFromOrigin = plane.m_repr.GetW() - Dot(normalToPlane, xform.GetTranslation()); + return BoundingPlane(normalToPlane, distanceFromOrigin); + } + + // Less efficient way to transform a plane (but handles affine transformations.) + friend BoundingPlane operator* ( const Matrix4& mat, BoundingPlane plane ) + { + return BoundingPlane( Transpose(Invert(mat)) * plane.m_repr ); + } + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 normalToPlane ) + { + // Guarantee a normal. This constructor isn't meant to be called frequently, but if it is, we can change this. + normalToPlane = Normalize(normalToPlane); + m_repr = Vector4(normalToPlane, -Dot(pointOnPlane, normalToPlane)); + } + + //======================================================================================================= + // Functions operating on planes + // + inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C ) + { + return BoundingPlane( A, Cross(B - A, C - A) ); + } + + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Math/BoundingSphere.h b/Chapter 20 Shadow Mapping/Core/Math/BoundingSphere.h new file mode 100644 index 0000000..f619775 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/BoundingSphere.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "VectorMath.h" + +namespace Math +{ + class BoundingSphere + { + public: + BoundingSphere() {} + BoundingSphere( Vector3 center, Scalar radius ); + explicit BoundingSphere( Vector4 sphere ); + + Vector3 GetCenter( void ) const; + Scalar GetRadius( void ) const; + + private: + + Vector4 m_repr; + }; + + //======================================================================================================= + // Inline implementations + // + + inline BoundingSphere::BoundingSphere( Vector3 center, Scalar radius ) + { + m_repr = Vector4(center); + m_repr.SetW(radius); + } + + inline BoundingSphere::BoundingSphere( Vector4 sphere ) + : m_repr(sphere) + { + } + + inline Vector3 BoundingSphere::GetCenter( void ) const + { + return Vector3(m_repr); + } + + inline Scalar BoundingSphere::GetRadius( void ) const + { + return m_repr.GetW(); + } + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Math/Common.h b/Chapter 20 Shadow Mapping/Core/Math/Common.h new file mode 100644 index 0000000..2637fa8 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Common.h @@ -0,0 +1,171 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include +#include + +#define INLINE __forceinline + +namespace Math +{ + template __forceinline T AlignUpWithMask( T value, size_t mask ) + { + return (T)(((size_t)value + mask) & ~mask); + } + + template __forceinline T AlignDownWithMask( T value, size_t mask ) + { + return (T)((size_t)value & ~mask); + } + + template __forceinline T AlignUp( T value, size_t alignment ) + { + return AlignUpWithMask(value, alignment - 1); + } + + template __forceinline T AlignDown( T value, size_t alignment ) + { + return AlignDownWithMask(value, alignment - 1); + } + + template __forceinline bool IsAligned( T value, size_t alignment ) + { + return 0 == ((size_t)value & (alignment - 1)); + } + + template __forceinline T DivideByMultiple( T value, size_t alignment ) + { + return (T)((value + alignment - 1) / alignment); + } + + template __forceinline bool IsPowerOfTwo(T value) + { + return 0 == (value & (value - 1)); + } + + template __forceinline bool IsDivisible(T value, T divisor) + { + return (value / divisor) * divisor == value; + } + + __forceinline uint8_t Log2(uint64_t value) + { + unsigned long mssb; // most significant set bit + unsigned long lssb; // least significant set bit + + // If perfect power of two (only one set bit), return index of bit. Otherwise round up + // fractional log by adding 1 to most signicant set bit's index. + if (_BitScanReverse64(&mssb, value) > 0 && _BitScanForward64(&lssb, value) > 0) + return uint8_t(mssb + (mssb == lssb ? 0 : 1)); + else + return 0; + } + + template __forceinline T AlignPowerOfTwo(T value) + { + return value == 0 ? 0 : 1 << Log2(value); + } + + using namespace DirectX; + + INLINE XMVECTOR SplatZero() + { + return XMVectorZero(); + } + +#if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) + + INLINE XMVECTOR SplatOne( XMVECTOR zero = SplatZero() ) + { + __m128i AllBits = _mm_castps_si128(_mm_cmpeq_ps(zero, zero)); + return _mm_castsi128_ps(_mm_slli_epi32(_mm_srli_epi32(AllBits, 25), 23)); // return 0x3F800000 + //return _mm_cvtepi32_ps(_mm_srli_epi32(SetAllBits(zero), 31)); // return (float)1; (alternate method) + } + +#if defined(_XM_SSE4_INTRINSICS_) + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0E); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0D); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x0B); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_insert_ps(one, one, 0x07); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + return _mm_insert_ps(vec, vec, 0x08); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_blend_ps(vec, SplatOne(), 0x8); + } +#else + INLINE XMVECTOR CreateXUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR CreateYUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 4)); + } + INLINE XMVECTOR CreateZUnitVector( XMVECTOR one = SplatOne() ) + { + XMVECTOR unitx = CreateXUnitVector(one); + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(unitx), 8)); + } + INLINE XMVECTOR CreateWUnitVector( XMVECTOR one = SplatOne() ) + { + return _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(one), 12)); + } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) + { + __m128i MaskOffW = _mm_srli_si128(_mm_castps_si128(_mm_cmpeq_ps(vec, vec)), 4); + return _mm_and_ps(vec, _mm_castsi128_ps(MaskOffW)); + } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) + { + return _mm_movelh_ps(vec, _mm_unpackhi_ps(vec, SplatOne())); + } +#endif + +#else // !_XM_SSE_INTRINSICS_ + + INLINE XMVECTOR SplatOne() { return XMVectorSplatOne(); } + INLINE XMVECTOR CreateXUnitVector() { return g_XMIdentityR0; } + INLINE XMVECTOR CreateYUnitVector() { return g_XMIdentityR1; } + INLINE XMVECTOR CreateZUnitVector() { return g_XMIdentityR2; } + INLINE XMVECTOR CreateWUnitVector() { return g_XMIdentityR3; } + INLINE XMVECTOR SetWToZero( FXMVECTOR vec ) { return XMVectorAndInt( vec, g_XMMask3 ); } + INLINE XMVECTOR SetWToOne( FXMVECTOR vec ) { return XMVectorSelect( g_XMIdentityR3, vec, g_XMMask3 ); } + +#endif + + enum EZeroTag { kZero, kOrigin }; + enum EIdentityTag { kOne, kIdentity }; + enum EXUnitVector { kXUnitVector }; + enum EYUnitVector { kYUnitVector }; + enum EZUnitVector { kZUnitVector }; + enum EWUnitVector { kWUnitVector }; + +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Frustum.cpp b/Chapter 20 Shadow Mapping/Core/Math/Frustum.cpp new file mode 100644 index 0000000..c38f478 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Frustum.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Frustum.h" +#include "Camera.h" + +using namespace Math; + +void Frustum::ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ) +{ + // �Ѹ�Ϊ��������ϵ + const float NearX = HTan * NearClip; + const float NearY = VTan * NearClip; + const float FarX = HTan * FarClip; + const float FarY = VTan * FarClip; + + // ��׶�壬�����Զ�������4������ + m_FrustumCorners[ kNearLowerLeft ] = Vector3(-NearX, -NearY, NearClip); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(-NearX, NearY, NearClip); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3( NearX, -NearY, NearClip); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3( NearX, NearY, NearClip); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3( -FarX, -FarY, FarClip); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3( -FarX, FarY, FarClip); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3( FarX, -FarY, FarClip); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3( FarX, FarY, FarClip); // Far upper right + + const float NHx = RecipSqrt( 1.0f + HTan * HTan ); + const float NHz = NHx * HTan; + const float NVy = RecipSqrt( 1.0f + VTan * VTan ); + const float NVz = NVy * VTan; + + // ������׶���6���棬�洢���Ƿ������Լ����ϵ�һ���� + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, NearClip ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, FarClip ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -NHx, 0.0f, NHz, 0.0f ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -NVy, NVz, 0.0f ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, NVy, NVz, 0.0f ); +} + +void Frustum::ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float Front, float Back ) +{ + // TODO ���޸�Ϊ��������ϵ + // Define the frustum corners + m_FrustumCorners[ kNearLowerLeft ] = Vector3(Left, Bottom, -Front); // Near lower left + m_FrustumCorners[ kNearUpperLeft ] = Vector3(Left, Top, -Front); // Near upper left + m_FrustumCorners[ kNearLowerRight ] = Vector3(Right, Bottom, -Front); // Near lower right + m_FrustumCorners[ kNearUpperRight ] = Vector3(Right, Top, -Front); // Near upper right + m_FrustumCorners[ kFarLowerLeft ] = Vector3(Left, Bottom, -Back); // Far lower left + m_FrustumCorners[ kFarUpperLeft ] = Vector3(Left, Top, -Back); // Far upper left + m_FrustumCorners[ kFarLowerRight ] = Vector3(Right, Bottom, -Back); // Far lower right + m_FrustumCorners[ kFarUpperRight ] = Vector3(Right, Top, -Back); // Far upper right + + // Define the bounding planes + m_FrustumPlanes[kNearPlane] = BoundingPlane( 0.0f, 0.0f, -1.0f, -Front ); + m_FrustumPlanes[kFarPlane] = BoundingPlane( 0.0f, 0.0f, 1.0f, Back ); + m_FrustumPlanes[kLeftPlane] = BoundingPlane( 1.0f, 0.0f, 0.0f, -Left ); + m_FrustumPlanes[kRightPlane] = BoundingPlane( -1.0f, 0.0f, 0.0f, Right ); + m_FrustumPlanes[kTopPlane] = BoundingPlane( 0.0f, -1.0f, 0.0f, Bottom ); + m_FrustumPlanes[kBottomPlane] = BoundingPlane( 0.0f, 1.0f, 0.0f, -Top ); +} + + +Frustum::Frustum(const Matrix4& ProjMat, float NearDivFar) +{ + const float* ProjMatF = (const float*)&ProjMat; + + const float RcpXX = 1.0f / ProjMatF[ 0]; + const float RcpYY = 1.0f / ProjMatF[ 5]; + const float RcpZZ = 1.0f / NearDivFar; + + // Identify if the projection is perspective or orthographic by looking at the 4th row. + if (ProjMatF[3] == 0.0f && ProjMatF[7] == 0.0f && ProjMatF[11] == 0.0f && ProjMatF[15] == 1.0f) + { + // TODO ���޸�Ϊ��������ϵ + // Orthographic + float Left = (-1.0f - ProjMatF[12]) * RcpXX; + float Right = ( 1.0f - ProjMatF[12]) * RcpXX; + float Top = ( 1.0f - ProjMatF[13]) * RcpYY; + float Bottom = (-1.0f - ProjMatF[13]) * RcpYY; + float Front = ( 0.0f - ProjMatF[14]) * RcpZZ; + float Back = ( 1.0f - ProjMatF[14]) * RcpZZ; + + // Check for reverse Z here. The bounding planes need to point into the frustum. + if (Front < Back) + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Front, Back ); + else + ConstructOrthographicFrustum( Left, Right, Top, Bottom, Back, Front ); + } + else + { + // ���޸�Ϊ��������ϵ + // Perspective + float NearClip, FarClip; + + FarClip = -ProjMatF[14] * RcpZZ; + NearClip = FarClip / (RcpZZ + 1.0f); + + ConstructPerspectiveFrustum( RcpXX, RcpYY, NearClip, FarClip ); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Frustum.h b/Chapter 20 Shadow Mapping/Core/Math/Frustum.h new file mode 100644 index 0000000..86211a8 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Frustum.h @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "BoundingPlane.h" +#include "BoundingSphere.h" + +namespace Math +{ + class Frustum + { + public: + Frustum() {} + + Frustum( const Matrix4& ProjectionMatrix, float NearDivFar); + + enum CornerID + { + kNearLowerLeft, kNearUpperLeft, kNearLowerRight, kNearUpperRight, + kFarLowerLeft, kFarUpperLeft, kFarLowerRight, kFarUpperRight + }; + + enum PlaneID + { + kNearPlane, kFarPlane, kLeftPlane, kRightPlane, kTopPlane, kBottomPlane + }; + + Vector3 GetFrustumCorner( CornerID id ) const { return m_FrustumCorners[id]; } + BoundingPlane GetFrustumPlane( PlaneID id ) const { return m_FrustumPlanes[id]; } + + // Test whether the bounding sphere intersects the frustum. Intersection is defined as either being + // fully contained in the frustum, or by intersecting one or more of the planes. + bool IntersectSphere( BoundingSphere sphere ) const; + + // We don't officially have a BoundingBox class yet, but let's assume it's forthcoming. (There is a + // simple struct in the Model project.) + bool IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const; + + friend Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ); // Fast + friend Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ); // Slow + friend Frustum operator* ( const Matrix4& xform, const Frustum& frustum ); // Slowest (and most general) + + private: + + // Perspective frustum constructor (for pyramid-shaped frusta) + void ConstructPerspectiveFrustum( float HTan, float VTan, float NearClip, float FarClip ); + + // Orthographic frustum constructor (for box-shaped frusta) + void ConstructOrthographicFrustum( float Left, float Right, float Top, float Bottom, float NearClip, float FarClip ); + + Vector3 m_FrustumCorners[8]; // the corners of the frustum + BoundingPlane m_FrustumPlanes[6]; // the bounding planes + }; + + //======================================================================================================= + // Inline implementations + // + + inline bool Frustum::IntersectSphere( BoundingSphere sphere ) const + { + float radius = sphere.GetRadius(); + for (int i = 0; i < 6; ++i) + { + if (m_FrustumPlanes[i].DistanceFromPoint(sphere.GetCenter()) + radius < 0.0f) + return false; + } + return true; + } + + inline bool Frustum::IntersectBoundingBox(const Vector3 minBound, const Vector3 maxBound) const + { + for (int i = 0; i < 6; ++i) + { + BoundingPlane p = m_FrustumPlanes[i]; + Vector3 farCorner = Select(minBound, maxBound, p.GetNormal() > Vector3(kZero)); + if (p.DistanceFromPoint(farCorner) < 0.0f) + return false; + } + + return true; + } + + inline Frustum operator* ( const OrthogonalTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = xform * frustum.m_FrustumPlanes[i]; + + return result; + } + + inline Frustum operator* ( const AffineTransform& xform, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = xform * frustum.m_FrustumCorners[i]; + + Matrix4 XForm = Transpose(Invert(Matrix4(xform))); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + + inline Frustum operator* ( const Matrix4& mtx, const Frustum& frustum ) + { + Frustum result; + + for (int i = 0; i < 8; ++i) + result.m_FrustumCorners[i] = Vector3( mtx * frustum.m_FrustumCorners[i] ); + + Matrix4 XForm = Transpose(Invert(mtx)); + + for (int i = 0; i < 6; ++i) + result.m_FrustumPlanes[i] = BoundingPlane(XForm * Vector4(frustum.m_FrustumPlanes[i])); + + return result; + } + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Math/Functions.inl b/Chapter 20 Shadow Mapping/Core/Math/Functions.inl new file mode 100644 index 0000000..f0ac229 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Functions.inl @@ -0,0 +1,123 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +namespace Math +{ + // To allow floats to implicitly construct Scalars, we need to clarify these operators and suppress + // upconversion. + INLINE bool operator< ( Scalar lhs, float rhs ) { return (float)lhs < rhs; } + INLINE bool operator<= ( Scalar lhs, float rhs ) { return (float)lhs <= rhs; } + INLINE bool operator> ( Scalar lhs, float rhs ) { return (float)lhs > rhs; } + INLINE bool operator>= ( Scalar lhs, float rhs ) { return (float)lhs >= rhs; } + INLINE bool operator== ( Scalar lhs, float rhs ) { return (float)lhs == rhs; } + INLINE bool operator< ( float lhs, Scalar rhs ) { return lhs < (float)rhs; } + INLINE bool operator<= ( float lhs, Scalar rhs ) { return lhs <= (float)rhs; } + INLINE bool operator> ( float lhs, Scalar rhs ) { return lhs > (float)rhs; } + INLINE bool operator>= ( float lhs, Scalar rhs ) { return lhs >= (float)rhs; } + INLINE bool operator== ( float lhs, Scalar rhs ) { return lhs == (float)rhs; } + +#define CREATE_SIMD_FUNCTIONS( TYPE ) \ + INLINE TYPE Sqrt( TYPE s ) { return TYPE(XMVectorSqrt(s)); } \ + INLINE TYPE Recip( TYPE s ) { return TYPE(XMVectorReciprocal(s)); } \ + INLINE TYPE RecipSqrt( TYPE s ) { return TYPE(XMVectorReciprocalSqrt(s)); } \ + INLINE TYPE Floor( TYPE s ) { return TYPE(XMVectorFloor(s)); } \ + INLINE TYPE Ceiling( TYPE s ) { return TYPE(XMVectorCeiling(s)); } \ + INLINE TYPE Round( TYPE s ) { return TYPE(XMVectorRound(s)); } \ + INLINE TYPE Abs( TYPE s ) { return TYPE(XMVectorAbs(s)); } \ + INLINE TYPE Exp( TYPE s ) { return TYPE(XMVectorExp(s)); } \ + INLINE TYPE Pow( TYPE b, TYPE e ) { return TYPE(XMVectorPow(b, e)); } \ + INLINE TYPE Log( TYPE s ) { return TYPE(XMVectorLog(s)); } \ + INLINE TYPE Sin( TYPE s ) { return TYPE(XMVectorSin(s)); } \ + INLINE TYPE Cos( TYPE s ) { return TYPE(XMVectorCos(s)); } \ + INLINE TYPE Tan( TYPE s ) { return TYPE(XMVectorTan(s)); } \ + INLINE TYPE ASin( TYPE s ) { return TYPE(XMVectorASin(s)); } \ + INLINE TYPE ACos( TYPE s ) { return TYPE(XMVectorACos(s)); } \ + INLINE TYPE ATan( TYPE s ) { return TYPE(XMVectorATan(s)); } \ + INLINE TYPE ATan2( TYPE y, TYPE x ) { return TYPE(XMVectorATan2(y, x)); } \ + INLINE TYPE Lerp( TYPE a, TYPE b, TYPE t ) { return TYPE(XMVectorLerpV(a, b, t)); } \ + INLINE TYPE Max( TYPE a, TYPE b ) { return TYPE(XMVectorMax(a, b)); } \ + INLINE TYPE Min( TYPE a, TYPE b ) { return TYPE(XMVectorMin(a, b)); } \ + INLINE TYPE Clamp( TYPE v, TYPE a, TYPE b ) { return Min(Max(v, a), b); } \ + INLINE BoolVector operator< ( TYPE lhs, TYPE rhs ) { return XMVectorLess(lhs, rhs); } \ + INLINE BoolVector operator<= ( TYPE lhs, TYPE rhs ) { return XMVectorLessOrEqual(lhs, rhs); } \ + INLINE BoolVector operator> ( TYPE lhs, TYPE rhs ) { return XMVectorGreater(lhs, rhs); } \ + INLINE BoolVector operator>= ( TYPE lhs, TYPE rhs ) { return XMVectorGreaterOrEqual(lhs, rhs); } \ + INLINE BoolVector operator== ( TYPE lhs, TYPE rhs ) { return XMVectorEqual(lhs, rhs); } \ + INLINE TYPE Select( TYPE lhs, TYPE rhs, BoolVector mask ) { return TYPE(XMVectorSelect(lhs, rhs, mask)); } + + + CREATE_SIMD_FUNCTIONS(Scalar) + CREATE_SIMD_FUNCTIONS(Vector3) + CREATE_SIMD_FUNCTIONS(Vector4) + +#undef CREATE_SIMD_FUNCTIONS + + INLINE float Sqrt( float s ) { return Sqrt(Scalar(s)); } + INLINE float Recip( float s ) { return Recip(Scalar(s)); } + INLINE float RecipSqrt( float s ) { return RecipSqrt(Scalar(s)); } + INLINE float Floor( float s ) { return Floor(Scalar(s)); } + INLINE float Ceiling( float s ) { return Ceiling(Scalar(s)); } + INLINE float Round( float s ) { return Round(Scalar(s)); } + INLINE float Abs( float s ) { return s < 0.0f ? -s : s; } + INLINE float Exp( float s ) { return Exp(Scalar(s)); } + INLINE float Pow( float b, float e ) { return Pow(Scalar(b), Scalar(e)); } + INLINE float Log( float s ) { return Log(Scalar(s)); } + INLINE float Sin( float s ) { return Sin(Scalar(s)); } + INLINE float Cos( float s ) { return Cos(Scalar(s)); } + INLINE float Tan( float s ) { return Tan(Scalar(s)); } + INLINE float ASin( float s ) { return ASin(Scalar(s)); } + INLINE float ACos( float s ) { return ACos(Scalar(s)); } + INLINE float ATan( float s ) { return ATan(Scalar(s)); } + INLINE float ATan2( float y, float x ) { return ATan2(Scalar(y), Scalar(x)); } + INLINE float Lerp( float a, float b, float t ) { return a + (b - a) * t; } + INLINE float Max( float a, float b ) { return a > b ? a : b; } + INLINE float Min( float a, float b ) { return a < b ? a : b; } + INLINE float Clamp( float v, float a, float b ) { return Min(Max(v, a), b); } + + INLINE Scalar Length( Vector3 v ) { return Scalar(XMVector3Length(v)); } + INLINE Scalar LengthSquare( Vector3 v ) { return Scalar(XMVector3LengthSq(v)); } + INLINE Scalar LengthRecip( Vector3 v ) { return Scalar(XMVector3ReciprocalLength(v)); } + INLINE Scalar Dot( Vector3 v1, Vector3 v2 ) { return Scalar(XMVector3Dot(v1, v2)); } + INLINE Scalar Dot( Vector4 v1, Vector4 v2 ) { return Scalar(XMVector4Dot(v1, v2)); } + INLINE Vector3 Cross( Vector3 v1, Vector3 v2 ) { return Vector3(XMVector3Cross(v1, v2)); } + INLINE Vector3 Normalize( Vector3 v ) { return Vector3(XMVector3Normalize(v)); } + INLINE Vector4 Normalize( Vector4 v ) { return Vector4(XMVector4Normalize(v)); } + INLINE Quaternion Normalize( Quaternion q ) { return Quaternion(XMQuaternionNormalize(q)); } + + INLINE Matrix3 Transpose( const Matrix3& mat ) { return Matrix3(XMMatrixTranspose(mat)); } + + // inline Matrix3 Inverse( const Matrix3& mat ) { TBD } + // inline Transform Inverse( const Transform& mat ) { TBD } + + // This specialized matrix invert assumes that the 3x3 matrix is orthogonal (and normalized). + INLINE AffineTransform OrthoInvert( const AffineTransform& xform ) + { + Matrix3 basis = Transpose(xform.GetBasis()); + return AffineTransform( basis, basis * -xform.GetTranslation() ); + } + + INLINE OrthogonalTransform Invert( const OrthogonalTransform& xform ) { return ~xform; } + + INLINE Matrix4 Transpose( const Matrix4& mat ) { return Matrix4(XMMatrixTranspose(mat)); } + INLINE Matrix4 Invert( const Matrix4& mat ) { return Matrix4(XMMatrixInverse(nullptr, mat)); } + + INLINE Matrix4 OrthoInvert( const Matrix4& xform ) + { + Matrix3 basis = Transpose(xform.Get3x3()); + Vector3 translate = basis * -Vector3(xform.GetW()); + return Matrix4( basis, translate ); + } + +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Math/Matrix3.h b/Chapter 20 Shadow Mapping/Core/Math/Matrix3.h new file mode 100644 index 0000000..7ea3c81 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Matrix3.h @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Quaternion.h" + +namespace Math +{ + // Represents a 3x3 matrix while occuping a 4x4 memory footprint. The unused row and column are undefined but implicitly + // (0, 0, 0, 1). Constructing a Matrix4 will make those values explicit. + __declspec(align(16)) class Matrix3 + { + public: + INLINE Matrix3() {} + INLINE Matrix3( Vector3 x, Vector3 y, Vector3 z ) { m_mat[0] = x; m_mat[1] = y; m_mat[2] = z; } + INLINE Matrix3( const Matrix3& m ) { m_mat[0] = m.m_mat[0]; m_mat[1] = m.m_mat[1]; m_mat[2] = m.m_mat[2]; } + INLINE Matrix3( Quaternion q ) { *this = Matrix3(XMMatrixRotationQuaternion(q)); } + INLINE explicit Matrix3( const XMMATRIX& m ) { m_mat[0] = Vector3(m.r[0]); m_mat[1] = Vector3(m.r[1]); m_mat[2] = Vector3(m.r[2]); } + INLINE explicit Matrix3( EIdentityTag ) { m_mat[0] = Vector3(kXUnitVector); m_mat[1] = Vector3(kYUnitVector); m_mat[2] = Vector3(kZUnitVector); } + INLINE explicit Matrix3( EZeroTag ) { m_mat[0] = m_mat[1] = m_mat[2] = Vector3(kZero); } + + INLINE void SetX(Vector3 x) { m_mat[0] = x; } + INLINE void SetY(Vector3 y) { m_mat[1] = y; } + INLINE void SetZ(Vector3 z) { m_mat[2] = z; } + + INLINE Vector3 GetX() const { return m_mat[0]; } + INLINE Vector3 GetY() const { return m_mat[1]; } + INLINE Vector3 GetZ() const { return m_mat[2]; } + + static INLINE Matrix3 MakeXRotation( float angle ) { return Matrix3(XMMatrixRotationX(angle)); } + static INLINE Matrix3 MakeYRotation( float angle ) { return Matrix3(XMMatrixRotationY(angle)); } + static INLINE Matrix3 MakeZRotation( float angle ) { return Matrix3(XMMatrixRotationZ(angle)); } + static INLINE Matrix3 MakeScale( float scale ) { return Matrix3(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix3 MakeScale( float sx, float sy, float sz ) { return Matrix3(XMMatrixScaling(sx, sy, sz)); } + static INLINE Matrix3 MakeScale( Vector3 scale ) { return Matrix3(XMMatrixScalingFromVector(scale)); } + + INLINE operator XMMATRIX() const { return (const XMMATRIX&)m_mat; } + + INLINE Vector3 operator* ( Vector3 vec ) const { return Vector3( XMVector3TransformNormal(vec, *this) ); } + INLINE Matrix3 operator* ( const Matrix3& mat ) const { return Matrix3( *this * mat.GetX(), *this * mat.GetY(), *this * mat.GetZ() ); } + + private: + Vector3 m_mat[3]; + }; + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Math/Matrix4.h b/Chapter 20 Shadow Mapping/Core/Math/Matrix4.h new file mode 100644 index 0000000..e9f7c49 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Matrix4.h @@ -0,0 +1,76 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Transform.h" + +namespace Math +{ + __declspec(align(16)) class Matrix4 + { + public: + INLINE Matrix4() {} + INLINE Matrix4( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + { + m_mat.r[0] = SetWToZero(x); m_mat.r[1] = SetWToZero(y); + m_mat.r[2] = SetWToZero(z); m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( Vector4 x, Vector4 y, Vector4 z, Vector4 w ) { m_mat.r[0] = x; m_mat.r[1] = y; m_mat.r[2] = z; m_mat.r[3] = w; } + INLINE Matrix4( const Matrix4& mat ) { m_mat = mat.m_mat; } + INLINE Matrix4( const Matrix3& mat ) + { + m_mat.r[0] = SetWToZero(mat.GetX()); + m_mat.r[1] = SetWToZero(mat.GetY()); + m_mat.r[2] = SetWToZero(mat.GetZ()); + m_mat.r[3] = CreateWUnitVector(); + } + INLINE Matrix4( const Matrix3& xyz, Vector3 w ) + { + m_mat.r[0] = SetWToZero(xyz.GetX()); + m_mat.r[1] = SetWToZero(xyz.GetY()); + m_mat.r[2] = SetWToZero(xyz.GetZ()); + m_mat.r[3] = SetWToOne(w); + } + INLINE Matrix4( const AffineTransform& xform ) { *this = Matrix4( xform.GetBasis(), xform.GetTranslation()); } + INLINE Matrix4( const OrthogonalTransform& xform ) { *this = Matrix4( Matrix3(xform.GetRotation()), xform.GetTranslation() ); } + INLINE explicit Matrix4( const XMMATRIX& mat ) { m_mat = mat; } + INLINE explicit Matrix4( EIdentityTag ) { m_mat = XMMatrixIdentity(); } + INLINE explicit Matrix4( EZeroTag ) { m_mat.r[0] = m_mat.r[1] = m_mat.r[2] = m_mat.r[3] = SplatZero(); } + + INLINE const Matrix3& Get3x3() const { return (const Matrix3&)*this; } + + INLINE Vector4 GetX() const { return Vector4(m_mat.r[0]); } + INLINE Vector4 GetY() const { return Vector4(m_mat.r[1]); } + INLINE Vector4 GetZ() const { return Vector4(m_mat.r[2]); } + INLINE Vector4 GetW() const { return Vector4(m_mat.r[3]); } + + INLINE void SetX(Vector4 x) { m_mat.r[0] = x; } + INLINE void SetY(Vector4 y) { m_mat.r[1] = y; } + INLINE void SetZ(Vector4 z) { m_mat.r[2] = z; } + INLINE void SetW(Vector4 w) { m_mat.r[3] = w; } + + INLINE operator XMMATRIX() const { return m_mat; } + + INLINE Vector4 operator* ( Vector3 vec ) const { return Vector4(XMVector3Transform(vec, m_mat)); } + INLINE Vector4 operator* ( Vector4 vec ) const { return Vector4(XMVector4Transform(vec, m_mat)); } + INLINE Matrix4 operator* ( const Matrix4& mat ) const { return Matrix4(XMMatrixMultiply(mat, m_mat)); } + + static INLINE Matrix4 MakeScale( float scale ) { return Matrix4(XMMatrixScaling(scale, scale, scale)); } + static INLINE Matrix4 MakeScale( Vector3 scale ) { return Matrix4(XMMatrixScalingFromVector(scale)); } + + + private: + XMMATRIX m_mat; + }; +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Quaternion.h b/Chapter 20 Shadow Mapping/Core/Math/Quaternion.h new file mode 100644 index 0000000..83727d3 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Vector.h" + +namespace Math +{ + class Quaternion + { + public: + INLINE Quaternion() { m_vec = XMQuaternionIdentity(); } + INLINE Quaternion( const Vector3& axis, const Scalar& angle ) { m_vec = XMQuaternionRotationAxis( axis, angle ); } + INLINE Quaternion( float pitch, float yaw, float roll) { m_vec = XMQuaternionRotationRollPitchYaw(pitch, yaw, roll); } + INLINE explicit Quaternion( const XMMATRIX& matrix ) { m_vec = XMQuaternionRotationMatrix( matrix ); } + INLINE explicit Quaternion( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Quaternion( EIdentityTag ) { m_vec = XMQuaternionIdentity(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Quaternion operator~ ( void ) const { return Quaternion(XMQuaternionConjugate(m_vec)); } + INLINE Quaternion operator- ( void ) const { return Quaternion(XMVectorNegate(m_vec)); } + + INLINE Quaternion operator* ( Quaternion rhs ) const { return Quaternion(XMQuaternionMultiply(rhs, m_vec)); } + INLINE Vector3 operator* ( Vector3 rhs ) const { return Vector3(XMVector3Rotate(rhs, m_vec)); } + + INLINE Quaternion& operator= ( Quaternion rhs ) { m_vec = rhs; return *this; } + INLINE Quaternion& operator*= ( Quaternion rhs ) { *this = *this * rhs; return *this; } + + protected: + XMVECTOR m_vec; + }; + +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Random.cpp b/Chapter 20 Shadow Mapping/Core/Math/Random.cpp new file mode 100644 index 0000000..efec931 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Random.cpp @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Random.h" + +namespace Math +{ + RandomNumberGenerator g_RNG; +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Random.h b/Chapter 20 Shadow Mapping/Core/Math/Random.h new file mode 100644 index 0000000..92e2f81 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Random.h @@ -0,0 +1,67 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" +#include + +namespace Math +{ + class RandomNumberGenerator + { + public: + RandomNumberGenerator() : m_gen(m_rd()) + { + } + + // Default int range is [MIN_INT, MAX_INT]. Max value is included. + int32_t NextInt( void ) + { + return std::uniform_int_distribution(0x80000000, 0x7FFFFFFF)(m_gen); + } + + int32_t NextInt( int32_t MaxVal ) + { + return std::uniform_int_distribution(0, MaxVal)(m_gen); + } + + int32_t NextInt( int32_t MinVal, int32_t MaxVal ) + { + return std::uniform_int_distribution(MinVal, MaxVal)(m_gen); + } + + // Default float range is [0.0f, 1.0f). Max value is excluded. + float NextFloat( float MaxVal = 1.0f ) + { + return std::uniform_real_distribution(0.0f, MaxVal)(m_gen); + } + + float NextFloat( float MinVal, float MaxVal ) + { + return std::uniform_real_distribution(MinVal, MaxVal)(m_gen); + } + + void SetSeed( UINT s ) + { + m_gen.seed(s); + } + + private: + + std::random_device m_rd; + std::minstd_rand m_gen; + }; + + extern RandomNumberGenerator g_RNG; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Math/Scalar.h b/Chapter 20 Shadow Mapping/Core/Math/Scalar.h new file mode 100644 index 0000000..d34b843 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Scalar.h @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Common.h" + +namespace Math +{ + class Scalar + { + public: + INLINE Scalar() {} + INLINE Scalar( const Scalar& s ) { m_vec = s; } + INLINE Scalar( float f ) { m_vec = XMVectorReplicate(f); } + INLINE explicit Scalar( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Scalar( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Scalar( EIdentityTag ) { m_vec = SplatOne(); } + + INLINE operator XMVECTOR() const { return m_vec; } + INLINE operator float() const { return XMVectorGetX(m_vec); } + + private: + XMVECTOR m_vec; + }; + + INLINE Scalar operator- ( Scalar s ) { return Scalar(XMVectorNegate(s)); } + INLINE Scalar operator+ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorAdd(s1, s2)); } + INLINE Scalar operator- ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorSubtract(s1, s2)); } + INLINE Scalar operator* ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorMultiply(s1, s2)); } + INLINE Scalar operator/ ( Scalar s1, Scalar s2 ) { return Scalar(XMVectorDivide(s1, s2)); } + INLINE Scalar operator+ ( Scalar s1, float s2 ) { return s1 + Scalar(s2); } + INLINE Scalar operator- ( Scalar s1, float s2 ) { return s1 - Scalar(s2); } + INLINE Scalar operator* ( Scalar s1, float s2 ) { return s1 * Scalar(s2); } + INLINE Scalar operator/ ( Scalar s1, float s2 ) { return s1 / Scalar(s2); } + INLINE Scalar operator+ ( float s1, Scalar s2 ) { return Scalar(s1) + s2; } + INLINE Scalar operator- ( float s1, Scalar s2 ) { return Scalar(s1) - s2; } + INLINE Scalar operator* ( float s1, Scalar s2 ) { return Scalar(s1) * s2; } + INLINE Scalar operator/ ( float s1, Scalar s2 ) { return Scalar(s1) / s2; } + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Math/Transform.h b/Chapter 20 Shadow Mapping/Core/Math/Transform.h new file mode 100644 index 0000000..ea3c4cd --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Transform.h @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Matrix3.h" + +namespace Math +{ + // This transform strictly prohibits non-uniform scale. Scale itself is barely tolerated. + __declspec(align(16)) class OrthogonalTransform + { + public: + INLINE OrthogonalTransform() : m_rotation(kIdentity), m_translation(kZero) {} + INLINE OrthogonalTransform( Quaternion rotate ) : m_rotation(rotate), m_translation(kZero) {} + INLINE OrthogonalTransform( Vector3 translate ) : m_rotation(kIdentity), m_translation(translate) {} + INLINE OrthogonalTransform( Quaternion rotate, Vector3 translate ) : m_rotation(rotate), m_translation(translate) {} + INLINE OrthogonalTransform( const Matrix3& mat ) : m_rotation(mat), m_translation(kZero) {} + INLINE OrthogonalTransform( const Matrix3& mat, Vector3 translate ) : m_rotation(mat), m_translation(translate) {} + INLINE OrthogonalTransform( EIdentityTag ) : m_rotation(kIdentity), m_translation(kZero) {} + INLINE explicit OrthogonalTransform( const XMMATRIX& mat ) { *this = OrthogonalTransform( Matrix3(mat), Vector3(mat.r[3]) ); } + + INLINE void SetRotation( Quaternion q ) { m_rotation = q; } + INLINE void SetTranslation( Vector3 v ) { m_translation = v; } + + INLINE Quaternion GetRotation() const { return m_rotation; } + INLINE Vector3 GetTranslation() const { return m_translation; } + + static INLINE OrthogonalTransform MakeXRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kXUnitVector), angle)); } + static INLINE OrthogonalTransform MakeYRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kYUnitVector), angle)); } + static INLINE OrthogonalTransform MakeZRotation( float angle ) { return OrthogonalTransform(Quaternion(Vector3(kZUnitVector), angle)); } + static INLINE OrthogonalTransform MakeTranslation( Vector3 translate ) { return OrthogonalTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_rotation * vec + m_translation; } + INLINE Vector4 operator* ( Vector4 vec ) const { return + Vector4(SetWToZero(m_rotation * Vector3((XMVECTOR)vec))) + + Vector4(SetWToOne(m_translation)) * vec.GetW(); + } + INLINE OrthogonalTransform operator* ( const OrthogonalTransform& xform ) const { + return OrthogonalTransform( m_rotation * xform.m_rotation, m_rotation * xform.m_translation + m_translation ); + } + + INLINE OrthogonalTransform operator~ () const { Quaternion invertedRotation = ~m_rotation; + return OrthogonalTransform( invertedRotation, invertedRotation * -m_translation ); + } + + private: + + Quaternion m_rotation; + Vector3 m_translation; + }; + + // A AffineTransform is a 3x4 matrix with an implicit 4th row = [0,0,0,1]. This is used to perform a change of + // basis on 3D points. An affine transformation does not have to have orthonormal basis vectors. + __declspec(align(64)) class AffineTransform + { + public: + INLINE AffineTransform() + {} + INLINE AffineTransform( Vector3 x, Vector3 y, Vector3 z, Vector3 w ) + : m_basis(x, y, z), m_translation(w) {} + INLINE AffineTransform( Vector3 translate ) + : m_basis(kIdentity), m_translation(translate) {} + INLINE AffineTransform( const Matrix3& mat, Vector3 translate = Vector3(kZero) ) + : m_basis(mat), m_translation(translate) {} + INLINE AffineTransform( Quaternion rot, Vector3 translate = Vector3(kZero) ) + : m_basis(rot), m_translation(translate) {} + INLINE AffineTransform( const OrthogonalTransform& xform ) + : m_basis(xform.GetRotation()), m_translation(xform.GetTranslation()) {} + INLINE AffineTransform( EIdentityTag ) + : m_basis(kIdentity), m_translation(kZero) {} + INLINE explicit AffineTransform( const XMMATRIX& mat ) + : m_basis(mat), m_translation(mat.r[3]) {} + + INLINE operator XMMATRIX() const { return (XMMATRIX&)*this; } + + INLINE void SetX(Vector3 x) { m_basis.SetX(x); } + INLINE void SetY(Vector3 y) { m_basis.SetY(y); } + INLINE void SetZ(Vector3 z) { m_basis.SetZ(z); } + INLINE void SetTranslation(Vector3 w) { m_translation = w; } + + INLINE Vector3 GetX() const { return m_basis.GetX(); } + INLINE Vector3 GetY() const { return m_basis.GetY(); } + INLINE Vector3 GetZ() const { return m_basis.GetZ(); } + INLINE Vector3 GetTranslation() const { return m_translation; } + INLINE const Matrix3& GetBasis() const { return (const Matrix3&)*this; } + + static INLINE AffineTransform MakeXRotation( float angle ) { return AffineTransform(Matrix3::MakeXRotation(angle)); } + static INLINE AffineTransform MakeYRotation( float angle ) { return AffineTransform(Matrix3::MakeYRotation(angle)); } + static INLINE AffineTransform MakeZRotation( float angle ) { return AffineTransform(Matrix3::MakeZRotation(angle)); } + static INLINE AffineTransform MakeScale( float scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeScale( Vector3 scale ) { return AffineTransform(Matrix3::MakeScale(scale)); } + static INLINE AffineTransform MakeTranslation( Vector3 translate ) { return AffineTransform(translate); } + + INLINE Vector3 operator* ( Vector3 vec ) const { return m_basis * vec + m_translation; } + INLINE AffineTransform operator* ( const AffineTransform& mat ) const { + return AffineTransform( m_basis * mat.m_basis, *this * mat.GetTranslation() ); + } + + private: + Matrix3 m_basis; + Vector3 m_translation; + }; +} diff --git a/Chapter 20 Shadow Mapping/Core/Math/Vector.h b/Chapter 20 Shadow Mapping/Core/Math/Vector.h new file mode 100644 index 0000000..6f52301 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Math/Vector.h @@ -0,0 +1,140 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "Scalar.h" + +namespace Math +{ + class Vector4; + + // A 3-vector with an unspecified fourth component. Depending on the context, the W can be 0 or 1, but both are implicit. + // The actual value of the fourth component is undefined for performance reasons. + class Vector3 + { + public: + + INLINE Vector3() {} + INLINE Vector3( float x, float y, float z ) { m_vec = XMVectorSet(x, y, z, z); } + INLINE Vector3( const XMFLOAT3& v ) { m_vec = XMLoadFloat3(&v); } + INLINE Vector3( const Vector3& v ) { m_vec = v; } + INLINE Vector3( Scalar s ) { m_vec = s; } + INLINE explicit Vector3( Vector4 v ); + INLINE explicit Vector3( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector3( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector3( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector3( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector3( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector3( EZUnitVector ) { m_vec = CreateZUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + + INLINE Vector3 operator- () const { return Vector3(XMVectorNegate(m_vec)); } + INLINE Vector3 operator+ ( Vector3 v2 ) const { return Vector3(XMVectorAdd(m_vec, v2)); } + INLINE Vector3 operator- ( Vector3 v2 ) const { return Vector3(XMVectorSubtract(m_vec, v2)); } + INLINE Vector3 operator* ( Vector3 v2 ) const { return Vector3(XMVectorMultiply(m_vec, v2)); } + INLINE Vector3 operator/ ( Vector3 v2 ) const { return Vector3(XMVectorDivide(m_vec, v2)); } + INLINE Vector3 operator* ( Scalar v2 ) const { return *this * Vector3(v2); } + INLINE Vector3 operator/ ( Scalar v2 ) const { return *this / Vector3(v2); } + INLINE Vector3 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector3 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE Vector3& operator += ( Vector3 v ) { *this = *this + v; return *this; } + INLINE Vector3& operator -= ( Vector3 v ) { *this = *this - v; return *this; } + INLINE Vector3& operator *= ( Vector3 v ) { *this = *this * v; return *this; } + INLINE Vector3& operator /= ( Vector3 v ) { *this = *this / v; return *this; } + + INLINE friend Vector3 operator* ( Scalar v1, Vector3 v2 ) { return Vector3(v1) * v2; } + INLINE friend Vector3 operator/ ( Scalar v1, Vector3 v2 ) { return Vector3(v1) / v2; } + INLINE friend Vector3 operator* ( float v1, Vector3 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector3 operator/ ( float v1, Vector3 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + // A 4-vector, completely defined. + class Vector4 + { + public: + INLINE Vector4() {} + INLINE Vector4( float x, float y, float z, float w ) { m_vec = XMVectorSet(x, y, z, w); } + INLINE Vector4( Vector3 xyz, float w ) { m_vec = XMVectorSetW(xyz, w); } + INLINE Vector4( const Vector4& v ) { m_vec = v; } + INLINE Vector4( const Scalar& s ) { m_vec = s; } + INLINE explicit Vector4( Vector3 xyz ) { m_vec = SetWToOne(xyz); } + INLINE explicit Vector4( FXMVECTOR vec ) { m_vec = vec; } + INLINE explicit Vector4( EZeroTag ) { m_vec = SplatZero(); } + INLINE explicit Vector4( EIdentityTag ) { m_vec = SplatOne(); } + INLINE explicit Vector4( EXUnitVector ) { m_vec = CreateXUnitVector(); } + INLINE explicit Vector4( EYUnitVector ) { m_vec = CreateYUnitVector(); } + INLINE explicit Vector4( EZUnitVector ) { m_vec = CreateZUnitVector(); } + INLINE explicit Vector4( EWUnitVector ) { m_vec = CreateWUnitVector(); } + + INLINE operator XMVECTOR() const { return m_vec; } + + INLINE Scalar GetX() const { return Scalar(XMVectorSplatX(m_vec)); } + INLINE Scalar GetY() const { return Scalar(XMVectorSplatY(m_vec)); } + INLINE Scalar GetZ() const { return Scalar(XMVectorSplatZ(m_vec)); } + INLINE Scalar GetW() const { return Scalar(XMVectorSplatW(m_vec)); } + INLINE void SetX( Scalar x ) { m_vec = XMVectorPermute<4,1,2,3>(m_vec, x); } + INLINE void SetY( Scalar y ) { m_vec = XMVectorPermute<0,5,2,3>(m_vec, y); } + INLINE void SetZ( Scalar z ) { m_vec = XMVectorPermute<0,1,6,3>(m_vec, z); } + INLINE void SetW( Scalar w ) { m_vec = XMVectorPermute<0,1,2,7>(m_vec, w); } + + INLINE Vector4 operator- () const { return Vector4(XMVectorNegate(m_vec)); } + INLINE Vector4 operator+ ( Vector4 v2 ) const { return Vector4(XMVectorAdd(m_vec, v2)); } + INLINE Vector4 operator- ( Vector4 v2 ) const { return Vector4(XMVectorSubtract(m_vec, v2)); } + INLINE Vector4 operator* ( Vector4 v2 ) const { return Vector4(XMVectorMultiply(m_vec, v2)); } + INLINE Vector4 operator/ ( Vector4 v2 ) const { return Vector4(XMVectorDivide(m_vec, v2)); } + INLINE Vector4 operator* ( Scalar v2 ) const { return *this * Vector4(v2); } + INLINE Vector4 operator/ ( Scalar v2 ) const { return *this / Vector4(v2); } + INLINE Vector4 operator* ( float v2 ) const { return *this * Scalar(v2); } + INLINE Vector4 operator/ ( float v2 ) const { return *this / Scalar(v2); } + + INLINE void operator*= ( float v2 ) { *this = *this * Scalar(v2); } + INLINE void operator/= ( float v2 ) { *this = *this / Scalar(v2); } + + INLINE friend Vector4 operator* ( Scalar v1, Vector4 v2 ) { return Vector4(v1) * v2; } + INLINE friend Vector4 operator/ ( Scalar v1, Vector4 v2 ) { return Vector4(v1) / v2; } + INLINE friend Vector4 operator* ( float v1, Vector4 v2 ) { return Scalar(v1) * v2; } + INLINE friend Vector4 operator/ ( float v1, Vector4 v2 ) { return Scalar(v1) / v2; } + + protected: + XMVECTOR m_vec; + }; + + INLINE Vector3::Vector3( Vector4 v ) + { + Scalar W = v.GetW(); + m_vec = XMVectorSelect( XMVectorDivide(v, W), v, XMVectorEqual(W, SplatZero()) ); + } + + class BoolVector + { + public: + INLINE BoolVector( FXMVECTOR vec ) { m_vec = vec; } + INLINE operator XMVECTOR() const { return m_vec; } + protected: + XMVECTOR m_vec; + }; + +} // namespace Math diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AdaptExposureCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AdaptExposureCS.hlsl new file mode 100644 index 0000000..96a792b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AdaptExposureCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" +#include "ShaderUtility.hlsli" + +ByteAddressBuffer Histogram : register(t0); +RWStructuredBuffer Exposure : register(u0); + +cbuffer cb0 : register(b1) +{ + float TargetLuminance; + float AdaptationRate; + float MinExposure; + float MaxExposure; + uint PixelCount; +} + +groupshared float gs_Accum[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex ) +{ + float WeightedSum = (float)GI * (float)Histogram.Load(GI * 4); + + [unroll] + for (uint i = 1; i < 256; i *= 2) + { + gs_Accum[GI] = WeightedSum; // Write + GroupMemoryBarrierWithGroupSync(); // Sync + WeightedSum += gs_Accum[(GI + i) % 256]; // Read + GroupMemoryBarrierWithGroupSync(); // Sync + } + + float MinLog = Exposure[4]; + float MaxLog = Exposure[5]; + float LogRange = Exposure[6]; + float RcpLogRange = Exposure[7]; + + // Average histogram value is the weighted sum of all pixels divided by the total number of pixels + // minus those pixels which provided no weight (i.e. black pixels.) + float weightedHistAvg = WeightedSum / (max(1, PixelCount - Histogram.Load(0))) - 1.0; + float logAvgLuminance = exp2(weightedHistAvg / 254.0 * LogRange + MinLog); + float targetExposure = TargetLuminance / logAvgLuminance; + //float targetExposure = -log2(1 - TargetLuminance) / logAvgLuminance; + + float exposure = Exposure[0]; + exposure = lerp(exposure, targetExposure, AdaptationRate); + exposure = clamp(exposure, MinExposure, MaxExposure); + + if (GI == 0) + { + Exposure[0] = exposure; + Exposure[1] = 1.0 / exposure; + Exposure[2] = exposure; + Exposure[3] = weightedHistAvg; + + // First attempt to recenter our histogram around the log-average. + float biasToCenter = (floor(weightedHistAvg) - 128.0) / 255.0; + if (abs(biasToCenter) > 0.1) + { + MinLog += biasToCenter * RcpLogRange; + MaxLog += biasToCenter * RcpLogRange; + } + + // TODO: Increase or decrease the log range to better fit the range of values. + // (Idea) Look at intermediate log-weighted sums for under- or over-represented + // extreme bounds. I.e. break the for loop into two pieces to compute the sum of + // groups of 16, check the groups on each end, then finish the recursive summation. + + Exposure[4] = MinLog; + Exposure[5] = MaxLog; + Exposure[6] = LogRange; + Exposure[7] = 1.0 / LogRange; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli new file mode 100644 index 0000000..47c4cd0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurAndUpsampleCS.hlsli @@ -0,0 +1,224 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D LoResDB : register(t0); +Texture2D HiResDB : register(t1); +Texture2D LoResAO1 : register(t2); +#ifdef COMBINE_LOWER_RESOLUTIONS +Texture2D LoResAO2 : register(t3); +#endif +#ifdef BLEND_WITH_HIGHER_RESOLUTION +Texture2D HiResAO : register(t4); +#endif + +RWTexture2D AoResult : register(u0); + +SamplerState LinearSampler : register(s0); + +cbuffer CB1 : register(b1) +{ + float2 InvLowResolution; + float2 InvHighResolution; + float NoiseFilterStrength; + float StepSize; + float kBlurTolerance; + float kUpsampleTolerance; +} + +groupshared float DepthCache[256]; +groupshared float AOCache1[256]; +groupshared float AOCache2[256]; + +void PrefetchData( uint index, float2 uv ) +{ + float4 AO1 = LoResAO1.Gather( LinearSampler, uv ); + +#ifdef COMBINE_LOWER_RESOLUTIONS + AO1 = min(AO1, LoResAO2.Gather( LinearSampler, uv )); +#endif + + AOCache1[index ] = AO1.w; + AOCache1[index+ 1] = AO1.z; + AOCache1[index+16] = AO1.x; + AOCache1[index+17] = AO1.y; + + float4 ID = 1.0 / LoResDB.Gather( LinearSampler, uv ); + DepthCache[index ] = ID.w; + DepthCache[index+ 1] = ID.z; + DepthCache[index+16] = ID.x; + DepthCache[index+17] = ID.y; +} + +float SmartBlur( float a, float b, float c, float d, float e, bool Left, bool Middle, bool Right ) +{ + b = Left | Middle ? b : c; + a = Left ? a : b; + d = Right | Middle ? d : c; + e = Right ? e : d; + return ((a + e) / 2.0 + b + c + d) / 4.0; +} + +bool CompareDeltas( float d1, float d2, float l1, float l2 ) +{ + float temp = d1 * d2 + StepSize; + return temp * temp > l1 * l2 * kBlurTolerance; +} + +void BlurHorizontally( uint leftMostIndex ) +{ + float a0 = AOCache1[leftMostIndex ]; + float a1 = AOCache1[leftMostIndex+1]; + float a2 = AOCache1[leftMostIndex+2]; + float a3 = AOCache1[leftMostIndex+3]; + float a4 = AOCache1[leftMostIndex+4]; + float a5 = AOCache1[leftMostIndex+5]; + float a6 = AOCache1[leftMostIndex+6]; + + float d0 = DepthCache[leftMostIndex ]; + float d1 = DepthCache[leftMostIndex+1]; + float d2 = DepthCache[leftMostIndex+2]; + float d3 = DepthCache[leftMostIndex+3]; + float d4 = DepthCache[leftMostIndex+4]; + float d5 = DepthCache[leftMostIndex+5]; + float d6 = DepthCache[leftMostIndex+6]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + float d56 = d6 - d5; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + float l56 = d56 * d56 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + bool c46 = CompareDeltas( d45, d56, l45, l56 ); + + AOCache2[leftMostIndex ] = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + AOCache2[leftMostIndex+1] = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + AOCache2[leftMostIndex+2] = SmartBlur( a2, a3, a4, a5, a6, c24, c35, c46 ); +} + +void BlurVertically( uint topMostIndex ) +{ + float a0 = AOCache2[topMostIndex ]; + float a1 = AOCache2[topMostIndex+16]; + float a2 = AOCache2[topMostIndex+32]; + float a3 = AOCache2[topMostIndex+48]; + float a4 = AOCache2[topMostIndex+64]; + float a5 = AOCache2[topMostIndex+80]; + + float d0 = DepthCache[topMostIndex+ 2]; + float d1 = DepthCache[topMostIndex+18]; + float d2 = DepthCache[topMostIndex+34]; + float d3 = DepthCache[topMostIndex+50]; + float d4 = DepthCache[topMostIndex+66]; + float d5 = DepthCache[topMostIndex+82]; + + float d01 = d1 - d0; + float d12 = d2 - d1; + float d23 = d3 - d2; + float d34 = d4 - d3; + float d45 = d5 - d4; + + float l01 = d01 * d01 + StepSize; + float l12 = d12 * d12 + StepSize; + float l23 = d23 * d23 + StepSize; + float l34 = d34 * d34 + StepSize; + float l45 = d45 * d45 + StepSize; + + bool c02 = CompareDeltas( d01, d12, l01, l12 ); + bool c13 = CompareDeltas( d12, d23, l12, l23 ); + bool c24 = CompareDeltas( d23, d34, l23, l34 ); + bool c35 = CompareDeltas( d34, d45, l34, l45 ); + + float aoResult1 = SmartBlur( a0, a1, a2, a3, a4, c02, c13, c24 ); + float aoResult2 = SmartBlur( a1, a2, a3, a4, a5, c13, c24, c35 ); + + AOCache1[topMostIndex ] = aoResult1; + AOCache1[topMostIndex+16] = aoResult2; +} + +// We essentially want 5 weights: 4 for each low-res pixel and 1 to blend in when none of the 4 really +// match. The filter strength is 1 / DeltaZTolerance. So a tolerance of 0.01 would yield a strength of 100. +// Note that a perfect match of low to high depths would yield a weight of 10^6, completely superceding any +// noise filtering. The noise filter is intended to soften the effects of shimmering when the high-res depth +// buffer has a lot of small holes in it causing the low-res depth buffer to inaccurately represent it. +float BilateralUpsample( float HiDepth, float HiAO, float4 LowDepths, float4 LowAO ) +{ + float4 weights = float4(9, 3, 1, 3) / ( abs(HiDepth - LowDepths) + kUpsampleTolerance ); + float TotalWeight = dot(weights, 1) + NoiseFilterStrength; + float WeightedSum = dot(LowAO, weights) + NoiseFilterStrength;// * HiAO; + return HiAO * WeightedSum / TotalWeight; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS to fill the 16x16 LDS cache with depth and AO + // + PrefetchData( GTid.x << 1 | GTid.y << 5, int2(DTid.xy + GTid.xy - 2) * InvLowResolution ); + GroupMemoryBarrierWithGroupSync(); + + // Goal: End up with a 9x9 patch that is blurred so we can upsample. Blur radius is 2 pixels, so start with 13x13 area. + + // + // Horizontally blur the pixels. 13x13 -> 9x13 + // + if (GI < 39) + BlurHorizontally((GI / 3) * 16 + (GI % 3) * 3); + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels. 9x13 -> 9x9 + // + if (GI < 45) + BlurVertically((GI / 9) * 32 + GI % 9); + GroupMemoryBarrierWithGroupSync(); + + // + // Bilateral upsample + // + uint Idx0 = GTid.x + GTid.y * 16; + float4 LoSSAOs = float4( AOCache1[Idx0+16], AOCache1[Idx0+17], AOCache1[Idx0+1], AOCache1[Idx0] ); + + // We work on a quad of pixels at once because then we can gather 4 each of high and low-res depth values + float2 UV0 = DTid.xy * InvLowResolution; + float2 UV1 = DTid.xy * 2 * InvHighResolution; + +#ifdef BLEND_WITH_HIGHER_RESOLUTION + float4 HiSSAOs = HiResAO.Gather(LinearSampler, UV1); +#else + float4 HiSSAOs = 1.0; +#endif + float4 LoDepths = LoResDB.Gather(LinearSampler, UV0); + float4 HiDepths = HiResDB.Gather(LinearSampler, UV1); + + int2 OutST = DTid.xy << 1; + AoResult[OutST + int2(-1, 0)] = BilateralUpsample( HiDepths.x, HiSSAOs.x, LoDepths.xyzw, LoSSAOs.xyzw ); + AoResult[OutST + int2( 0, 0)] = BilateralUpsample( HiDepths.y, HiSSAOs.y, LoDepths.yzwx, LoSSAOs.yzwx ); + AoResult[OutST + int2( 0, -1)] = BilateralUpsample( HiDepths.z, HiSSAOs.z, LoDepths.zwxy, LoSSAOs.zwxy ); + AoResult[OutST + int2(-1, -1)] = BilateralUpsample( HiDepths.w, HiSSAOs.w, LoDepths.wxyz, LoSSAOs.wxyz ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl new file mode 100644 index 0000000..c711049 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleBlendOutCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl new file mode 100644 index 0000000..5629c14 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsampleCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl new file mode 100644 index 0000000..e4fa497 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinBlendOutCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS +#define BLEND_WITH_HIGHER_RESOLUTION + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl new file mode 100644 index 0000000..0d0642c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoBlurUpsamplePreMinCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define COMBINE_LOWER_RESOLUTIONS + +#include "AoBlurAndUpsampleCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl new file mode 100644 index 0000000..c330810 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers1CS.hlsl @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +RWTexture2D DS2x : register(u1); +RWTexture2DArray DS2xAtlas : register(u2); +RWTexture2D DS4x : register(u3); +RWTexture2DArray DS4xAtlas : register(u4); +cbuffer CB0 : register(b0) +{ + float ZMagic; +} + +Texture2D Depth : register(t0); + +float Linearize( uint2 st ) +{ + float depth = Depth[st]; + float dist = 1.0 / (ZMagic * depth + 1.0); + LinearZ[st] = dist; + return dist; +} + +groupshared float g_CacheW[256]; + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 startST = Gid.xy << 4 | GTid.xy; + uint destIdx = GTid.y << 4 | GTid.x; + g_CacheW[ destIdx + 0 ] = Linearize(startST | uint2(0, 0)); + g_CacheW[ destIdx + 8 ] = Linearize(startST | uint2(8, 0)); + g_CacheW[ destIdx + 128 ] = Linearize(startST | uint2(0, 8)); + g_CacheW[ destIdx + 136 ] = Linearize(startST | uint2(8, 8)); + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x << 1) | (GTid.y << 5); + + float w1 = g_CacheW[ldsIndex]; + + uint2 st = DTid.xy; + uint slice = (st.x & 3) | ((st.y & 3) << 2); + DS2x[st] = w1; + DS2xAtlas[uint3(st >> 2, slice)] = w1; + + if ((GI & 011) == 0) + { + st = DTid.xy >> 1; + slice = (st.x & 3) | ((st.y & 3) << 2); + DS4x[st] = w1; + DS4xAtlas[uint3(st >> 2, slice)] = w1; + } + +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl new file mode 100644 index 0000000..0f381ba --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoPrepareDepthBuffers2CS.hlsl @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D DS4x : register(t0); +RWTexture2D DS8x : register(u0); +RWTexture2DArray DS8xAtlas : register(u1); +RWTexture2D DS16x : register(u2); +RWTexture2DArray DS16xAtlas : register(u3); + +cbuffer CB0 : register(b0) +{ + float2 InvSourceDimension; +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float m1 = DS4x[DTid.xy << 1]; + + uint2 st = DTid.xy; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS8x[st] = m1; + DS8xAtlas[uint3(stAtlas, stSlice)] = m1; + + if ((GI & 011) == 0) + { + uint2 st = DTid.xy >> 1; + uint2 stAtlas = st >> 2; + uint stSlice = (st.x & 3) | ((st.y & 3) << 2); + DS16x[st] = m1; + DS16xAtlas[uint3(stAtlas, stSlice)] = m1; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoRender1CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoRender1CS.hlsl new file mode 100644 index 0000000..65ca2aa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoRender1CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define INTERLEAVE_RESULT +#include "AoRenderCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoRender2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AoRender2CS.hlsl new file mode 100644 index 0000000..8377ae2 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoRender2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + + +#include "AoRenderCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AoRenderCS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/AoRenderCS.hlsli new file mode 100644 index 0000000..e790a08 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AoRenderCS.hlsli @@ -0,0 +1,172 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +#ifndef INTERLEAVE_RESULT +#define WIDE_SAMPLING 1 +#endif + +#ifdef INTERLEAVE_RESULT +Texture2DArray DepthTex : register(t0); +#else +Texture2D DepthTex : register(t0); +#endif +RWTexture2D Occlusion : register(u0); +SamplerState LinearBorderSampler : register(s1); +cbuffer CB1 : register(b1) +{ + float4 gInvThicknessTable[3]; + float4 gSampleWeightTable[3]; + float2 gInvSliceDimension; + float gRejectFadeoff; + float gRcpAccentuation; +} + +#if WIDE_SAMPLING + // 32x32 cache size: the 16x16 in the center forms the area of focus with the 8-pixel perimeter used for wide gathering. + #define TILE_DIM 32 + #define THREAD_COUNT_X 16 + #define THREAD_COUNT_Y 16 +#else + // 16x16 cache size: the 8x8 in the center forms the area of focus with the 4-pixel perimeter used for gathering. + #define TILE_DIM 16 + #define THREAD_COUNT_X 8 + #define THREAD_COUNT_Y 8 +#endif + +groupshared float DepthSamples[TILE_DIM * TILE_DIM]; + +float TestSamplePair( float frontDepth, float invRange, uint base, int offset ) +{ + // "Disocclusion" measures the penetration distance of the depth sample within the sphere. + // Disocclusion < 0 (full occlusion) -> the sample fell in front of the sphere + // Disocclusion > 1 (no occlusion) -> the sample fell behind the sphere + float disocclusion1 = DepthSamples[base + offset] * invRange - frontDepth; + float disocclusion2 = DepthSamples[base - offset] * invRange - frontDepth; + + float pseudoDisocclusion1 = saturate(gRejectFadeoff * disocclusion1); + float pseudoDisocclusion2 = saturate(gRejectFadeoff * disocclusion2); + + return + clamp(disocclusion1, pseudoDisocclusion2, 1.0) + + clamp(disocclusion2, pseudoDisocclusion1, 1.0) - + pseudoDisocclusion1 * pseudoDisocclusion2; +} + +float TestSamples( uint centerIdx, uint x, uint y, float invDepth, float invThickness ) +{ +#if WIDE_SAMPLING + x <<= 1; + y <<= 1; +#endif + + float invRange = invThickness * invDepth; + float frontDepth = invThickness - 0.5; + + if (y == 0) + { + // Axial + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM)); + } + else if (x == y) + { + // Diagonal + return 0.5 * ( + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + x)); + } + else + { + // L-Shaped + return 0.25 * ( + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM + x) + + TestSamplePair(frontDepth, invRange, centerIdx, y * TILE_DIM - x) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM + y) + + TestSamplePair(frontDepth, invRange, centerIdx, x * TILE_DIM - y)); + } +} + +[RootSignature(SSAO_RootSig)] +#if WIDE_SAMPLING +[numthreads( 16, 16, 1 )] +#else +[numthreads( 8, 8, 1 )] +#endif +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#if WIDE_SAMPLING + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 7) * gInvSliceDimension; +#else + float2 QuadCenterUV = int2(DTid.xy + GTid.xy - 3) * gInvSliceDimension; +#endif + + // Fetch four depths and store them in LDS +#ifdef INTERLEAVE_RESULT + float4 depths = DepthTex.Gather(LinearBorderSampler, float3(QuadCenterUV, DTid.z)); +#else + float4 depths = DepthTex.Gather(LinearBorderSampler, QuadCenterUV); +#endif + int destIdx = GTid.x * 2 + GTid.y * 2 * TILE_DIM; + DepthSamples[destIdx] = depths.w; + DepthSamples[destIdx + 1] = depths.z; + DepthSamples[destIdx + TILE_DIM] = depths.x; + DepthSamples[destIdx + TILE_DIM + 1] = depths.y; + + GroupMemoryBarrierWithGroupSync(); + +#if WIDE_SAMPLING + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 8 * TILE_DIM + 8; +#else + uint thisIdx = GTid.x + GTid.y * TILE_DIM + 4 * TILE_DIM + 4; +#endif + const float invThisDepth = 1.0 / DepthSamples[thisIdx]; + + float ao = 0.0; + +//#define SAMPLE_EXHAUSTIVELY + +#ifdef SAMPLE_EXHAUSTIVELY + // 68 samples: sample all cells in *within* a circular radius of 5 + ao += gSampleWeightTable[0].x * TestSamples(thisIdx, 1, 0, invThisDepth, gInvThicknessTable[0].x); + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].z * TestSamples(thisIdx, 3, 0, invThisDepth, gInvThicknessTable[0].z); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].y * TestSamples(thisIdx, 1, 2, invThisDepth, gInvThicknessTable[1].y); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[1].w * TestSamples(thisIdx, 1, 4, invThisDepth, gInvThicknessTable[1].w); + ao += gSampleWeightTable[2].y * TestSamples(thisIdx, 2, 3, invThisDepth, gInvThicknessTable[2].y); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#else // SAMPLE_CHECKER + // 36 samples: sample every-other cell in a checker board pattern + ao += gSampleWeightTable[0].y * TestSamples(thisIdx, 2, 0, invThisDepth, gInvThicknessTable[0].y); + ao += gSampleWeightTable[0].w * TestSamples(thisIdx, 4, 0, invThisDepth, gInvThicknessTable[0].w); + ao += gSampleWeightTable[1].x * TestSamples(thisIdx, 1, 1, invThisDepth, gInvThicknessTable[1].x); + ao += gSampleWeightTable[2].x * TestSamples(thisIdx, 2, 2, invThisDepth, gInvThicknessTable[2].x); + ao += gSampleWeightTable[2].w * TestSamples(thisIdx, 3, 3, invThisDepth, gInvThicknessTable[2].w); + ao += gSampleWeightTable[1].z * TestSamples(thisIdx, 1, 3, invThisDepth, gInvThicknessTable[1].z); + ao += gSampleWeightTable[2].z * TestSamples(thisIdx, 2, 4, invThisDepth, gInvThicknessTable[2].z); +#endif + +#ifdef INTERLEAVE_RESULT + uint2 OutPixel = DTid.xy << 2 | uint2(DTid.z & 3, DTid.z >> 2); +#else + uint2 OutPixel = DTid.xy; +#endif + Occlusion[OutPixel] = ao * gRcpAccentuation; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloom2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloom2CS.hlsl new file mode 100644 index 0000000..9cfe97b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloom2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ApplyBloomCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloomCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloomCS.hlsl new file mode 100644 index 0000000..bcecd8c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ApplyBloomCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register( u0 ); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = ldrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(ldrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(ldrColor); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/AverageLumaCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/AverageLumaCS.hlsl new file mode 100644 index 0000000..8cadcef --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/AverageLumaCS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWStructuredBuffer Result : register( u0 ); + +groupshared float buffer[64]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float sumThisThread = InputBuf[DTid.xy]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 32]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 16]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 8]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 4]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 2]; + buffer[GI] = sumThisThread; + GroupMemoryBarrierWithGroupSync(); + + sumThisThread += buffer[GI + 1]; + + if (GI == 0) + Result[Gid.x + Gid.y * 5] = sumThisThread / 64.0f; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl new file mode 100644 index 0000000..2a66f4f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicHorizontalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t.x, position.y); + + uint MaxWidth = TextureSize.x - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + float4 W = GetWeights(f.x); + float3 Color = + W.x * GetColor(s0, st.y) + + W.y * GetColor(s1, st.y) + + W.z * GetColor(s2, st.y) + + W.w * GetColor(s3, st.y); + + return Color; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl new file mode 100644 index 0000000..0accb95 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "BicubicUpsamplePS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsamplePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsamplePS.hlsl new file mode 100644 index 0000000..b973f5e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicUpsamplePS.hlsl @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 Cubic(float4 w, float3 c0, float3 c1, float3 c2, float3 c3) +{ + return c0 * w.x + c1 * w.y + c2 * w.z + c3 * w.w; +} + +float3 GetColor(uint s, uint t) +{ +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(ColorTex[uint2(s, t)], DISPLAY_PLANE_FORMAT); +#else + return ColorTex[uint2(s, t)]; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(t); + + uint MaxWidth = TextureSize.x - 1; + uint MaxHeight = TextureSize.y - 1; + + uint s0 = max(st.x - 2, 0); + uint s1 = max(st.x - 1, 0); + uint s2 = min(st.x + 0, MaxWidth); + uint s3 = min(st.x + 1, MaxWidth); + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 Weights = GetWeights(f.x); + float3 c0 = Cubic(Weights, GetColor(s0, t0), GetColor(s1, t0), GetColor(s2, t0), GetColor(s3, t0)); + float3 c1 = Cubic(Weights, GetColor(s0, t1), GetColor(s1, t1), GetColor(s2, t1), GetColor(s3, t1)); + float3 c2 = Cubic(Weights, GetColor(s0, t2), GetColor(s1, t2), GetColor(s2, t2), GetColor(s3, t2)); + float3 c3 = Cubic(Weights, GetColor(s0, t3), GetColor(s1, t3), GetColor(s2, t3), GetColor(s3, t3)); + float3 Color = Cubic(GetWeights(f.y), c0, c1, c2, c3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl new file mode 100644 index 0000000..c609bcf --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BicubicVerticalUpsamplePS.hlsl @@ -0,0 +1,79 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +cbuffer Constants : register(b0) +{ + uint2 TextureSize; + float A; +} + +float W1(float x) +{ + return x * x * ((A + 2) * x - (A + 3)) + 1.0; +} + +float W2(float x) +{ + return A * (x * (x * (x - 5) + 8) - 4); +} + +float4 GetWeights(float d1) +{ + return float4(W2(1.0 + d1), W1(d1), W1(1.0 - d1), W2(2.0 - d1)); +} + +float3 GetColor(uint s, uint t) +{ + return ColorTex[uint2(s, t)]; +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float2 t = uv * TextureSize + 0.5; + float2 f = frac(t); + int2 st = int2(position.x, t.y); + + uint MaxHeight = TextureSize.y - 1; + + uint t0 = max(st.y - 2, 0); + uint t1 = max(st.y - 1, 0); + uint t2 = min(st.y + 0, MaxHeight); + uint t3 = min(st.y + 1, MaxHeight); + + float4 W = GetWeights(f.y); + float3 Color = + W.x * GetColor(st.x, t0) + + W.y * GetColor(st.x, t1) + + W.z * GetColor(st.x, t2) + + W.w * GetColor(st.x, t3); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BilinearUpsamplePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BilinearUpsamplePS.hlsl new file mode 100644 index 0000000..b154adc --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BilinearUpsamplePS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +SamplerState BilinearFilter : register(s0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex.SampleLevel(BilinearFilter, uv, 0), LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl new file mode 100644 index 0000000..0bbd98f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32InnerSortCS.hlsl @@ -0,0 +1,114 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: The bitonic sort works by sorting groups of size k, +// starting with k=2 and doubling until k>=NumItems. To sort the +// group, keys are compared with a distance of j, which starts at half +// of k and continues halving down to 1. When j is 1024 and less, the +// compare and swap can happen in LDS, and these iterations form the +// "inner sort". Inner sorting happens in LDS and loops. Outer sorting +// happens in memory and does not loop. (Looping happens on the CPU by +// issuing sequential dispatches and barriers.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 +}; + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortKeys[2048]; +groupshared uint gs_SortIndices[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + uint2 KeyIndex = Element < ListCount ? g_SortBuffer.Load2(Element * 8) : NullItem; + gs_SortIndices[Element & 2047] = KeyIndex.x; + gs_SortKeys[Element & 2047] = KeyIndex.y; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void LoadKeyIndexPair( uint Element, uint ListCount ) +{ + gs_SortKeys[Element & 2047] = Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem; +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Load from memory into LDS to prepare sort + LoadKeyIndexPair(GroupStart + GI, ListCount); + LoadKeyIndexPair(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (uint j = 1024; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl new file mode 100644 index 0000000..4723533 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32OuterSortCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint k; // k >= 4096 + uint j; // j >= 2048 && j < k +}; + +#ifdef BITONICSORT_64BIT + #define Element uint2 + #define LoadElement(idx) g_SortBuffer.Load2(idx * 8) + #define StoreElement(idx, elem) g_SortBuffer.Store2(idx * 8, elem) +#else + #define Element uint + #define LoadElement(idx) g_SortBuffer.Load(idx * 4) + #define StoreElement(idx, elem) g_SortBuffer.Store(idx * 4, elem) +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint Index2 = InsertOneBit(DTid.x, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + if (Index2 >= ListCount) + return; + + Element A = LoadElement(Index1); + Element B = LoadElement(Index2); + + if (ShouldSwap(A, B)) + { + StoreElement(Index1, B); + StoreElement(Index2, A); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl new file mode 100644 index 0000000..d6832ba --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic32PreSortCS.hlsl @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A bitonic sort must eventually sort the power-of-two +// ceiling of items. E.g. 391 items -> 512 items. Because of this +// "null items" must be used as padding at the end of the list so that +// they can participate in the sort but remain at the end of the list. +// +// The pre-sort does two things. It appends null items as need, and +// it does the initial sort for k values up to 2048. This is because +// we can run 1024 threads, each of of which can compare and swap two +// elements without contention. And because we can always fit 2048 +// keys & indices in LDS with occupancy greater than one. (A single +// thread group can use as much as 32KB of LDS.) + + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_SortBuffer : register(u0); + +#ifdef BITONICSORT_64BIT + +groupshared uint gs_SortIndices[2048]; +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + if (Element < ListCount) + { + uint2 KeyIndexPair = g_SortBuffer.Load2(Element * 8); + gs_SortKeys[Element & 2047] = KeyIndexPair.y; + gs_SortIndices[Element & 2047] = KeyIndexPair.x; + } + else + { + gs_SortKeys[Element & 2047] = NullItem; + } +} + +void StoreKeyIndexPair( uint Element, uint ListCount) +{ + if (Element < ListCount) + g_SortBuffer.Store2(Element * 8, uint2(gs_SortIndices[Element & 2047], gs_SortKeys[Element & 2047])); +} + +#else // 32-bit packed key/index pairs + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint Element, uint ListCount ) +{ + // Unused elements must sort to the end + gs_SortKeys[Element & 2047] = (Element < ListCount ? g_SortBuffer.Load(Element * 4) : NullItem); +} + +void StoreKeyIndexPair( uint Element, uint ListCount ) +{ + if (Element < ListCount) + g_SortBuffer.Store(Element * 4, gs_SortKeys[Element & 2047]); +} + +#endif + +[RootSignature(BitonicSort_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + // Item index of the start of this group + const uint GroupStart = Gid.x * 2048; + + // Actual number of items that need sorting + const uint ListCount = g_CounterBuffer.Load(CounterOffset); + + FillSortKey(GroupStart + GI, ListCount); + FillSortKey(GroupStart + GI + 1024, ListCount); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + // This is better unrolled because it reduces ALU and because some + // architectures can load/store two LDS items in a single instruction + // as long as their separation is a compile-time constant. + [unroll] + for (k = 2; k <= 2048; k <<= 1) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index2 = InsertOneBit(GI, j); + uint Index1 = Index2 ^ (k == 2 * j ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (ShouldSwap(A, B)) + { + // Swap the keys + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + +#ifdef BITONICSORT_64BIT + // Then swap the indices (for 64-bit sorts) + A = gs_SortIndices[Index1]; + B = gs_SortIndices[Index2]; + gs_SortIndices[Index1] = B; + gs_SortIndices[Index2] = A; +#endif + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreKeyIndexPair(GroupStart + GI, ListCount); + StoreKeyIndexPair(GroupStart + GI + 1024, ListCount); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl new file mode 100644 index 0000000..c181966 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64InnerSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32InnerSortCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl new file mode 100644 index 0000000..7289898 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64OuterSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32OuterSortCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl new file mode 100644 index 0000000..3396e7f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/Bitonic64PreSortCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BITONICSORT_64BIT +#include "Bitonic32PreSortCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BitonicIndirectArgsCS.hlsl @@ -0,0 +1,62 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "BitonicSortCommon.hlsli" + +RWByteAddressBuffer g_IndirectArgsBuffer : register(u0); + +cbuffer Constants : register(b0) +{ + uint MaxIterations; +} + +uint NextPow2( uint Val ) +{ + uint Mask = (1 << firstbithigh(Val)) - 1; + return (Val + Mask) & ~Mask; +} + +[RootSignature(BitonicSort_RootSig)] +[numthreads(22, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + if (GI >= MaxIterations) + return; + + uint ListCount = g_CounterBuffer.Load(CounterOffset); + uint k = 2048 << GI; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((ListCount + 2047) & ~2047)) + ListCount = 0; + + uint PrevDispatches = GI * (GI + 1) / 2; + uint Offset = 12 * PrevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint CompleteGroups = (ListCount & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint PartialGroups = ((uint)max(int(ListCount - CompleteGroups * 2048 - j), 0) + 1023) / 1024; + + g_IndirectArgsBuffer.Store3(Offset, uint3(CompleteGroups + PartialGroups, 1, 1)); + + Offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + g_IndirectArgsBuffer.Store3(Offset, uint3((ListCount + 2047) / 2048, 1, 1)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BitonicSortCommon.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/BitonicSortCommon.hlsli new file mode 100644 index 0000000..d7a93aa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BitonicSortCommon.hlsli @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define BitonicSort_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 2)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 1))," \ + "RootConstants(b1, num32BitConstants = 2)" + +ByteAddressBuffer g_CounterBuffer : register(t0); + +cbuffer CB1 : register(b1) +{ + // Offset into counter buffer where this list's item count is stored + uint CounterOffset; + + // A sort key that will end up at the end of the list; to be used to pad + // lists in LDS (always 2048 items). + // Descending: 0x00000000 + // Ascending: 0xffffffff + // Also used by the ShouldSwap() function to invert ordering. + uint NullItem; +} + +// Takes Value and widens it by one bit at the location of the bit +// in the mask. A one is inserted in the space. OneBitMask must +// have one and only one bit set. +uint InsertOneBit( uint Value, uint OneBitMask ) +{ + uint Mask = OneBitMask - 1; + return (Value & ~Mask) << 1 | (Value & Mask) | OneBitMask; +} + +// Determines if two sort keys should be swapped in the list. NullItem is +// either 0 or 0xffffffff. XOR with the NullItem will either invert the bits +// (effectively a negation) or leave the bits alone. When the the NullItem is +// 0, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, ~A < ~B should swap. +bool ShouldSwap(uint A, uint B) +{ + return (A ^ NullItem) < (B ^ NullItem); +} + +// Same as above, but only compares the upper 32-bit word. +bool ShouldSwap(uint2 A, uint2 B) +{ + return (A.y ^ NullItem) < (B.y ^ NullItem); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl new file mode 100644 index 0000000..d2a30b3 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleHdrCS.hlsl @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D BloomResult : register( u0 ); +RWTexture2D LumaResult : register( u1 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold * Exposure[1]; // BloomThreshold / Exposure + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; + + float luma = (luma1 + luma2 + luma3 + luma4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl new file mode 100644 index 0000000..3c0714e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BloomExtractAndDownsampleLdrCS.hlsl @@ -0,0 +1,70 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and downsampling them to an unblurred bloom buffer. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +RWTexture2D BloomResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; + float g_bloomThreshold; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = (DTid.xy + 0.5) * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + float luma1 = RGBToLuminance(color1); + float luma2 = RGBToLuminance(color2); + float luma3 = RGBToLuminance(color3); + float luma4 = RGBToLuminance(color4); + + const float kSmallEpsilon = 0.0001; + + float ScaledThreshold = g_bloomThreshold; + + // We perform a brightness filter pass, where lone bright pixels will contribute less. + color1 *= max(kSmallEpsilon, luma1 - ScaledThreshold) / (luma1 + kSmallEpsilon); + color2 *= max(kSmallEpsilon, luma2 - ScaledThreshold) / (luma2 + kSmallEpsilon); + color3 *= max(kSmallEpsilon, luma3 - ScaledThreshold) / (luma3 + kSmallEpsilon); + color4 *= max(kSmallEpsilon, luma4 - ScaledThreshold) / (luma4 + kSmallEpsilon); + + // The shimmer filter helps remove stray bright pixels from the bloom buffer by inversely weighting + // them by their luminance. The overall effect is to shrink bright pixel regions around the border. + // Lone pixels are likely to dissolve completely. This effect can be tuned by adjusting the shimmer + // filter inverse strength. The bigger it is, the less a pixel's luminance will matter. + const float kShimmerFilterInverseStrength = 1.0f; + float weight1 = 1.0f / (luma1 + kShimmerFilterInverseStrength); + float weight2 = 1.0f / (luma2 + kShimmerFilterInverseStrength); + float weight3 = 1.0f / (luma3 + kShimmerFilterInverseStrength); + float weight4 = 1.0f / (luma4 + kShimmerFilterInverseStrength); + float weightSum = weight1 + weight2 + weight3 + weight4; + + BloomResult[DTid.xy] = (color1 * weight1 + color2 * weight2 + color3 * weight3 + color4 * weight4) / weightSum; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BlurCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BlurCS.hlsl new file mode 100644 index 0000000..863a851 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BlurCS.hlsl @@ -0,0 +1,131 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for guassian blurring a single RGB buffer. +// +// For the intended bloom blurring algorithm, this shader is expected to be used only on +// the lowest resolution bloom buffer before starting the series of upsample-and-blur +// passes. + +#include "PostEffectsRS.hlsli" + +Texture2D InputBuf : register( t0 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 BlurPixels( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights[0]*e + Weights[1]*(d+f) + Weights[2]*(c+g) + Weights[3]*(b+h) + Weights[4]*(a+i); +} + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint rr = CacheR[index]; + uint gg = CacheG[index]; + uint bb = CacheB[index]; + pixel1 = float3( f16tof32(rr ), f16tof32(gg ), f16tof32(bb ) ); + pixel2 = float3( f16tof32(rr >> 16), f16tof32(gg >> 16), f16tof32(bb >> 16) ); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 unblurred pixels in LDS + // + int destIdx = GTid.x + (GTid.y << 4); + Store2Pixels(destIdx+0, InputBuf[ThreadUL + uint2(0, 0)], InputBuf[ThreadUL + uint2(1, 0)]); + Store2Pixels(destIdx+8, InputBuf[ThreadUL + uint2(0, 1)], InputBuf[ThreadUL + uint2(1, 1)]); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl new file mode 100644 index 0000000..37a9bea --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BoundNeighborhoodCS.hlsl @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" + +Texture2D InputColor : register(t0); +RWTexture2D OutMin : register(u0); +RWTexture2D OutMax : register(u1); + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_MinR[TILE_PIXEL_COUNT]; +groupshared float gs_MinG[TILE_PIXEL_COUNT]; +groupshared float gs_MinB[TILE_PIXEL_COUNT]; +groupshared float gs_MaxR[TILE_PIXEL_COUNT]; +groupshared float gs_MaxG[TILE_PIXEL_COUNT]; +groupshared float gs_MaxB[TILE_PIXEL_COUNT]; + +void ConvolveH( uint Idx ) +{ + gs_MinR[Idx] = min(min(gs_MinR[Idx - 1], gs_MinR[Idx]), gs_MinR[Idx + 1]); + gs_MinG[Idx] = min(min(gs_MinG[Idx - 1], gs_MinG[Idx]), gs_MinG[Idx + 1]); + gs_MinB[Idx] = min(min(gs_MinB[Idx - 1], gs_MinB[Idx]), gs_MinB[Idx + 1]); + gs_MaxR[Idx] = max(max(gs_MaxR[Idx - 1], gs_MaxR[Idx]), gs_MaxR[Idx + 1]); + gs_MaxG[Idx] = max(max(gs_MaxG[Idx - 1], gs_MaxG[Idx]), gs_MaxG[Idx + 1]); + gs_MaxB[Idx] = max(max(gs_MaxB[Idx - 1], gs_MaxB[Idx]), gs_MaxB[Idx + 1]); +} + +void ConvolveV( uint Idx, uint2 st ) +{ + float minR = min(min(gs_MinR[Idx - TILE_SIZE_X], gs_MinR[Idx]), gs_MinR[Idx + TILE_SIZE_X]); + float minG = min(min(gs_MinG[Idx - TILE_SIZE_X], gs_MinG[Idx]), gs_MinG[Idx + TILE_SIZE_X]); + float minB = min(min(gs_MinB[Idx - TILE_SIZE_X], gs_MinB[Idx]), gs_MinB[Idx + TILE_SIZE_X]); + OutMin[st] = float3(minR, minG, minB); + + float maxR = max(max(gs_MaxR[Idx - TILE_SIZE_X], gs_MaxR[Idx]), gs_MaxR[Idx + TILE_SIZE_X]); + float maxG = max(max(gs_MaxG[Idx - TILE_SIZE_X], gs_MaxG[Idx]), gs_MaxG[Idx + TILE_SIZE_X]); + float maxB = max(max(gs_MaxB[Idx - TILE_SIZE_X], gs_MaxB[Idx]), gs_MaxB[Idx + TILE_SIZE_X]); + OutMax[st] = float3(maxR, maxG, maxB); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + // Load tile pixels + + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + float3 Color = InputColor[GroupUL + uint2(i % TILE_SIZE_X, i / TILE_SIZE_X)]; + gs_MinR[i] = gs_MaxR[i] = Color.r; + gs_MinG[i] = gs_MaxG[i] = Color.g; + gs_MinB[i] = gs_MaxB[i] = Color.b; + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float R0 = gs_MinR[Idx], R1 = gs_MinR[Idx - 1], R2 = gs_MinR[Idx + 1], R3 = gs_MinR[Idx - TILE_SIZE_X], R4 = gs_MinR[Idx + TILE_SIZE_X]; + float minR = min(min(R0, R1), min(min(R2, R3), R4)); + float maxR = max(max(R0, R1), max(max(R2, R3), R4)); + + float G0 = gs_MinG[Idx], G1 = gs_MinG[Idx - 1], G2 = gs_MinG[Idx + 1], G3 = gs_MinG[Idx - TILE_SIZE_X], G4 = gs_MinG[Idx + TILE_SIZE_X]; + float minG = min(min(G0, G1), min(min(G2, G3), G4)); + float maxG = max(max(G0, G1), max(max(G2, G3), G4)); + + float B0 = gs_MinB[Idx], B1 = gs_MinB[Idx - 1], B2 = gs_MinB[Idx + 1], B3 = gs_MinB[Idx - TILE_SIZE_X], B4 = gs_MinB[Idx + TILE_SIZE_X]; + float minB = min(min(B0, B1), min(min(B2, B3), B4)); + float maxB = max(max(B0, B1), max(max(B2, B3), B4)); + + OutMin[DTid.xy] = float3(minR, minG, minB); + OutMax[DTid.xy] = float3(maxR, maxG, maxB); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/BufferCopyPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/BufferCopyPS.hlsl new file mode 100644 index 0000000..2fe00f1 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/BufferCopyPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearSampler : register(s0); + +cbuffer Constants : register(b0) +{ + float2 RcpDestDim; +} + +[RootSignature(Present_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + //float2 UV = saturate(RcpDestDim * position.xy); + //return ColorTex.SampleLevel(BilinearSampler, UV, 0); + return ColorTex[(int2)position.xy]; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..c6bb64c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. + +//#define USE_LINEAR_Z + +Texture2D ColorBuffer : register(t0); +Texture2D DepthBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); +RWTexture2D VelocityBuffer : register(u1); + +cbuffer CB1 : register(b1) +{ + matrix CurToPrevXForm; +} + +float4 GetSampleData( uint2 st ) +{ + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + float3 Velocity = PrevHPos.xyz - float3(CurPixel, Depth); + + VelocityBuffer[st] = PackVelocity(Velocity); + + // Clamp speed at 4 pixels and normalize it. + return float4(ColorBuffer[st], 1.0) * saturate(length(Velocity.xy) / 4); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl new file mode 100644 index 0000000..6f51751 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/CameraMotionBlurPrePassLinearZCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define USE_LINEAR_Z +#include "CameraMotionBlurPrePassCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/CameraVelocityCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/CameraVelocityCS.hlsl new file mode 100644 index 0000000..e4787da --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/CameraVelocityCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +// We can use the original depth buffer or a linearized one. In this case, we use linear Z because +// we have discarded the 32-bit depth buffer but still retain a 16-bit linear buffer (previously +// used by SSAO.) Note that hyperbolic Z is reversed by default (TBD) for increased precision, so +// its Z=0 maps to the far plane. With linear Z, Z=0 maps to the eye position. Both extend to Z=1. +#define USE_LINEAR_Z + +Texture2D DepthBuffer : register(t0); +RWTexture2D VelocityBuffer : register(u0); + +cbuffer CBuffer : register(b1) +{ + matrix CurToPrevXForm; +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 CurPixel = st + 0.5; + float Depth = DepthBuffer[st]; +#ifdef USE_LINEAR_Z + float4 HPos = float4( CurPixel * Depth, 1.0, Depth ); +#else + float4 HPos = float4( CurPixel, Depth, 1.0 ); +#endif + float4 PrevHPos = mul( CurToPrevXForm, HPos ); + + PrevHPos.xyz /= PrevHPos.w; + +#ifdef USE_LINEAR_Z + PrevHPos.z = PrevHPos.w; +#endif + + VelocityBuffer[st] = PackVelocity(PrevHPos.xyz - float3(CurPixel, Depth)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ColorSpaceUtility.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ColorSpaceUtility.hlsli new file mode 100644 index 0000000..b5b6ae9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ColorSpaceUtility.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma warning( disable : 3571 ) + +#ifndef __COLOR_SPACE_UTILITY_HLSLI__ +#define __COLOR_SPACE_UTILITY_HLSLI__ + +// +// Gamma ramps and encoding transfer functions +// +// Orthogonal to color space though usually tightly coupled. For instance, sRGB is both a +// color space (defined by three basis vectors and a white point) and a gamma ramp. Gamma +// ramps are designed to reduce perceptual error when quantizing floats to integers with a +// limited number of bits. More variation is needed in darker colors because our eyes are +// more sensitive in the dark. The way the curve helps is that it spreads out dark values +// across more code words allowing for more variation. Likewise, bright values are merged +// together into fewer code words allowing for less variation. +// +// The sRGB curve is not a true gamma ramp but rather a piecewise function comprising a linear +// section and a power function. When sRGB-encoded colors are passed to an LCD monitor, they +// look correct on screen because the monitor expects the colors to be encoded with sRGB, and it +// removes the sRGB curve to linearize the values. When textures are encoded with sRGB--as many +// are--the sRGB curve needs to be removed before involving the colors in linear mathematics such +// as physically based lighting. + +float3 ApplySRGBCurve( float3 x ) +{ + // Approximately pow(x, 1.0 / 2.2) + return x < 0.0031308 ? 12.92 * x : 1.055 * pow(x, 1.0 / 2.4) - 0.055; +} + +float3 RemoveSRGBCurve( float3 x ) +{ + // Approximately pow(x, 2.2) + return x < 0.04045 ? x / 12.92 : pow( (x + 0.055) / 1.055, 2.4 ); +} + +// These functions avoid pow() to efficiently approximate sRGB with an error < 0.4%. +float3 ApplySRGBCurve_Fast( float3 x ) +{ + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(x - 0.00228) - 0.13448 * x + 0.005719; +} + +float3 RemoveSRGBCurve_Fast( float3 x ) +{ + return x < 0.04045 ? x / 12.92 : -7.43605 * x - 31.24297 * sqrt(-0.53792 * x + 1.279924) + 35.34864; +} + +// The OETF recommended for content shown on HDTVs. This "gamma ramp" may increase contrast as +// appropriate for viewing in a dark environment. Always use this curve with Limited RGB as it is +// used in conjunction with HDTVs. +float3 ApplyREC709Curve( float3 x ) +{ + return x < 0.0181 ? 4.5 * x : 1.0993 * pow(x, 0.45) - 0.0993; +} + +float3 RemoveREC709Curve( float3 x ) +{ + return x < 0.08145 ? x / 4.5 : pow((x + 0.0993) / 1.0993, 1.0 / 0.45); +} + +// This is the new HDR transfer function, also called "PQ" for perceptual quantizer. Note that REC2084 +// does not also refer to a color space. REC2084 is typically used with the REC2020 color space. +float3 ApplyREC2084Curve(float3 L) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Lp = pow(L, m1); + return pow((c1 + c2 * Lp) / (1 + c3 * Lp), m2); +} + +float3 RemoveREC2084Curve(float3 N) +{ + float m1 = 2610.0 / 4096.0 / 4; + float m2 = 2523.0 / 4096.0 * 128; + float c1 = 3424.0 / 4096.0; + float c2 = 2413.0 / 4096.0 * 32; + float c3 = 2392.0 / 4096.0 * 32; + float3 Np = pow(N, 1 / m2); + return pow(max(Np - c1, 0) / (c2 - c3 * Np), 1 / m1); +} + +// +// Color space conversions +// +// These assume linear (not gamma-encoded) values. A color space conversion is a change +// of basis (like in Linear Algebra). Since a color space is defined by three vectors-- +// the basis vectors--changing space involves a matrix-vector multiplication. Note that +// changing the color space may result in colors that are "out of bounds" because some +// color spaces have larger gamuts than others. When converting some colors from a wide +// gamut to small gamut, negative values may result, which are inexpressible in that new +// color space. +// +// It would be ideal to build a color pipeline which never throws away inexpressible (but +// perceivable) colors. This means using a color space that is as wide as possible. The +// XYZ color space is the neutral, all-encompassing color space, but it has the unfortunate +// property of having negative values (specifically in X and Z). To correct this, a further +// transformation can be made to X and Z to make them always positive. They can have their +// precision needs reduced by dividing by Y, allowing X and Z to be packed into two UNORM8s. +// This color space is called YUV for lack of a better name. +// + +// Note: Rec.709 and sRGB share the same color primaries and white point. Their only difference +// is the transfer curve used. + +float3 REC709toREC2020( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.627402, 0.329292, 0.043306, + 0.069095, 0.919544, 0.011360, + 0.016394, 0.088028, 0.895578 + }; + return mul(ConvMat, RGB709); +} + +float3 REC2020toREC709(float3 RGB2020) +{ + static const float3x3 ConvMat = + { + 1.660496, -0.587656, -0.072840, + -0.124547, 1.132895, -0.008348, + -0.018154, -0.100597, 1.118751 + }; + return mul(ConvMat, RGB2020); +} + +float3 REC709toDCIP3( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 0.822458, 0.177542, 0.000000, + 0.033193, 0.966807, 0.000000, + 0.017085, 0.072410, 0.910505 + }; + return mul(ConvMat, RGB709); +} + +float3 DCIP3toREC709( float3 RGB709 ) +{ + static const float3x3 ConvMat = + { + 1.224947, -0.224947, 0.000000, + -0.042056, 1.042056, 0.000000, + -0.019641, -0.078651, 1.098291 + }; + return mul(ConvMat, RGB709); +} + +#endif // __COLOR_SPACE_UTILITY_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl new file mode 100644 index 0000000..7480afe --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/CopyBackPostBufferCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +RWTexture2D SceneColor : register( u0 ); +Texture2D PostBuffer : register( t0 ); + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + SceneColor[DTid.xy] = Unpack_R11G11B10_FLOAT(PostBuffer[DTid.xy]); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl new file mode 100644 index 0000000..a9813fa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugDrawHistogramCS.hlsl @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "PostEffectsRS.hlsli" + +ByteAddressBuffer Histogram : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D ColorBuffer : register( u0 ); + +groupshared uint gs_hist[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 256, 1, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + uint histValue = Histogram.Load(GI * 4); + + // Compute the maximum histogram value, but don't include the black pixel + gs_hist[GI] = GI == 0 ? 0 : histValue; + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 128) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 64) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 32) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 16) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 8) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 4) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 2) % 256]); + GroupMemoryBarrierWithGroupSync(); + gs_hist[GI] = max(gs_hist[GI], gs_hist[(GI + 1) % 256]); + GroupMemoryBarrierWithGroupSync(); + + uint maxHistValue = gs_hist[GI]; + + uint2 BufferDim; + ColorBuffer.GetDimensions(BufferDim.x, BufferDim.y); + + const uint2 RectCorner = uint2(BufferDim.x / 2 - 512, BufferDim.y - 256); + const uint2 GroupCorner = RectCorner + DTid.xy * 4; + + uint height = 127 - DTid.y * 4; + uint threshold = histValue * 128 / max(1, maxHistValue); + + float3 OutColor = (GI == (uint)Exposure[3]) ? float3(1.0, 1.0, 0.0) : float3(0.5, 0.5, 0.5); + + for (uint i = 0; i < 4; ++i) + { + float3 MaskedColor = (height - i) < threshold ? OutColor : float3(0, 0, 0); + + // 4-wide column with 2 pixels for the histogram bar and 2 for black spacing + ColorBuffer[GroupCorner + uint2(0, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(1, i)] = MaskedColor; + ColorBuffer[GroupCorner + uint2(2, i)] = float3(0, 0, 0); + ColorBuffer[GroupCorner + uint2(3, i)] = float3(0, 0, 0); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl new file mode 100644 index 0000000..98f5679 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceHdrCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl new file mode 100644 index 0000000..182961a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceHdrCS.hlsl @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register(t0); +Texture2D Bloom : register(t1); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom + float3 hdrColor = SrcColor[DTid.xy] + g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Tone map to LDR and convert to greyscale + float luma = ToneMapLuma(RGBToLuminance(hdrColor) * Exposure[0]); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl new file mode 100644 index 0000000..de910e0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdr2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DebugLuminanceLdrCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl new file mode 100644 index 0000000..9701288 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugLuminanceLdrCS.hlsl @@ -0,0 +1,56 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Bloom : register( t0 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D SrcColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +Texture2D SrcColor : register(t2); +#endif +RWTexture2D OutLuma : register(u1); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load LDR and bloom + float3 ldrColor = SrcColor[DTid.xy]; + + ldrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + + // Load LDR value from HDR buffer + float luma = RGBToLuminance( ldrColor ); + + float logLuma = LinearToLogLuminance(luma); + +#if SUPPORT_TYPED_UAV_LOADS + SrcColor[DTid.xy] = luma.xxx; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(luma.xxx); +#endif + OutLuma[DTid.xy] = logLuma; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DebugSSAOCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DebugSSAOCS.hlsl new file mode 100644 index 0000000..8d4c8cb --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DebugSSAOCS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +Texture2D SsaoBuffer : register( t0 ); +RWTexture2D OutColor : register( u0 ); + +[RootSignature(SSAO_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + OutColor[DTid.xy] = SsaoBuffer[DTid.xy].xxx; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombine2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombine2CS.hlsl new file mode 100644 index 0000000..2fc6354 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombine2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFast2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFast2CS.hlsl new file mode 100644 index 0000000..50744bd --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "DoFCombineFastCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFastCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFastCS.hlsl new file mode 100644 index 0000000..322084a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCombineFastCS.hlsl @@ -0,0 +1,51 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" +#include "PixelPacking.hlsli" + +Texture2D DoFColorBuffer : register(t0); +Texture2D DoFAlphaBuffer : register(t1); +Texture2D TileClass : register(t2); +Texture2D LNFullDepth : register(t3); +StructuredBuffer WorkQueue : register(t4); +#if SUPPORT_TYPED_UAV_LOADS + RWTexture2D DstColor : register(u0); +#else + RWTexture2D DstColor : register(u0); +#endif + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + float2 UV = (st + 0.5) * RcpBufferDim; + float Depth = LNFullDepth[st]; + float3 DoFColor = DoFColorBuffer.SampleLevel(BilinearSampler, UV, 0); + float FgAlpha = DoFAlphaBuffer.SampleLevel(BilinearSampler, UV, 0); + + float TileMinDepth = TileClass[Tile].y; + float BgPercent = BackgroundPercent(Depth, TileMinDepth); + float PixelBlurriness = saturate((ComputeCoC(Depth) - 1.0) / 1.5); + float CombinedFactor = lerp(PixelBlurriness, lerp(FgAlpha, 1.0, PixelBlurriness), BgPercent); + +#if SUPPORT_TYPED_UAV_LOADS + DstColor[st] = lerp(DstColor[st], DoFColor, CombinedFactor); +#else + DstColor[st] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[st]), DoFColor, CombinedFactor)); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFCommon.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCommon.hlsli new file mode 100644 index 0000000..f8ee046 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFCommon.hlsli @@ -0,0 +1,164 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFRS.hlsli" + +#define USE_LINEAR_Z 1 + +SamplerState PointSampler : register(s0); +SamplerState ClampSampler : register(s1); +SamplerState BilinearSampler: register(s2); + +cbuffer CB0 : register(b0) +{ + float FocusCenter; + float FocalSpread; + float FocalMinDist; // Closer than this is max blurriness + float FocalMaxDist; // Farther than this is also max blurriness + float2 RcpBufferDim; + uint2 FullDimension; + int2 HalfDimensionMinusOne; + uint2 TiledDimension; + float2 InvTiledDimension; + uint DebugMode; + uint DisablePreFilter; + float ForegroundRange; + float RcpForegroundRange; + float AntiSparkleFilterStrength; +} + +#define DEPTH_FOREGROUND_RANGE 0.01 +#define MATH_CONST_PI 3.1415926535897 +#define MAX_COC_RADIUS 16.0 +#define RING1_THRESHOLD 1.0 +#define RING2_THRESHOLD 6.0 +#define RING3_THRESHOLD 11.0 + +float Max3( float a, float b, float c) { return max(max(a, b), c); } +float Min3( float a, float b, float c) { return min(min(a, b), c); } +float Med3( float a, float b, float c) { return clamp(a, min(b, c), max(b, c)); } +float Max4( float a, float b, float c, float d) { return Max3(a, b, max(c, d)); } +float Min4( float a, float b, float c, float d) { return Min3(a, b, min(c, d)); } +float Max4( float4 vec ) { return Max4( vec.x, vec.y, vec.z, vec.w ); } +float Min4( float4 vec ) { return Min4( vec.x, vec.y, vec.z, vec.w ); } + +float ComputeCoC( float Depth ) +{ + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( abs(Depth - FocusCenter) * FocalSpread )); +} + +float ComputeSignedCoC( float Depth ) +{ + return ComputeCoC(Depth) * sign(Depth - FocusCenter); +} + +float BackgroundPercent( float Depth, float TileMinDepth ) +{ + return saturate((Depth - TileMinDepth) * RcpForegroundRange - 1.0); +} + +float ForegroundPercent( float Depth, float TileMinDepth ) +{ + return 1.0 - BackgroundPercent(Depth, TileMinDepth); +} + +float2 DepthCmp2( float Depth, float TileMinDepth ) +{ + float depthCmp = BackgroundPercent(Depth, TileMinDepth); + return float2(depthCmp, 1.0 - depthCmp); +} + +float SampleAlpha( float CoC ) +{ + return rcp(MATH_CONST_PI * CoC * CoC); +} + +float ComputeRenormalizationFactor( float ForegroundDepth, float MaxCoC ) +{ + float FgCoC = ComputeCoC(ForegroundDepth); + float Rings = (FgCoC - 1) / 5; + float NumSamples = 1 + saturate(Rings) * 8 + saturate(Rings - 1) * 16 + saturate(Rings - 2) * 24; + return 2.0 * MATH_CONST_PI * FgCoC * FgCoC / NumSamples; +} + +static const float2 s_Ring1[8] = +{ + { 6.000000, 0.000000 }, { -6.000000, -0.000000 }, + { 4.242641, 4.242641 }, { -4.242641, -4.242641 }, + { 0.000000, 6.000000 }, { -0.000000, -6.000000 }, + { -4.242641, 4.242641 }, { 4.242641, -4.242641 }, +}; // s_Ring1 + +static const float2 s_Ring2[16] = +{ + { 11.000000, 0.000000 }, { -11.000000, -0.000000 }, + { 10.162675, 4.209518 }, { -10.162675, -4.209518 }, + { 7.778175, 7.778175 }, { -7.778175, -7.778175 }, + { 4.209518, 10.162675 }, { -4.209518, -10.162675 }, + { 0.000000, 11.000000 }, { -0.000000, -11.000000 }, + { -4.209518, 10.162675 }, { 4.209518, -10.162675 }, + { -7.778175, 7.778175 }, { 7.778175, -7.778175 }, + { -10.162675, 4.209518 }, { 10.162675, -4.209518 }, +}; // s_Ring2 + +static const float2 s_Ring3[24] = +{ + { 16.000000, 0.000000 }, { -16.000000, -0.000000 }, + { 15.454813, 4.141105 }, { -15.454813, -4.141105 }, + { 13.856406, 8.000000 }, { -13.856406, -8.000000 }, + { 11.313708, 11.313708 }, { -11.313708, -11.313708 }, + { 8.000000, 13.856406 }, { -8.000000, -13.856406 }, + { 4.141105, 15.454813 }, { -4.141105, -15.454813 }, + { 0.000000, 16.000000 }, { -0.000000, -16.000000 }, + { -4.141105, 15.454813 }, { 4.141105, -15.454813 }, + { -8.000000, 13.856406 }, { 8.000000, -13.856406 }, + { -11.313708, 11.313708 }, { 11.313708, -11.313708 }, + { -13.856406, 8.000000 }, { 13.856406, -8.000000 }, + { -15.454813, 4.141105 }, { 15.454813, -4.141105 }, +}; // s_Ring3 + +static const int s_Ring1Q[8] = +{ + 3, -3, + 50, -50, + 72, -72, + 46, -46, +}; // s_Ring1Q + +static const int s_Ring2Q[16] = +{ + 6, -6, + 53, -53, + 100, -100, + 122, -122, + 144, -144, + 118, -118, + 92, -92, + 43, -43, +}; // s_Ring2Q + +static const int s_Ring3Q[24] = +{ + 8, -8, + 56, -56, + 103, -103, + 150, -150, + 172, -172, + 194, -194, + 192, -192, + 190, -190, + 164, -164, + 138, -138, + 89, -89, + 40, -40, +}; // s_Ring3Q diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugBlueCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugBlueCS.hlsl new file mode 100644 index 0000000..4977549 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugBlueCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 0, 1); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugGreenCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugGreenCS.hlsl new file mode 100644 index 0000000..609ca8a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugGreenCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(0, 1, 0); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugRedCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugRedCS.hlsl new file mode 100644 index 0000000..201694d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFDebugRedCS.hlsl @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +StructuredBuffer WorkQueue : register(t5); +RWTexture2D DstColor : register(u0); + +[RootSignature(DoF_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 16 + GTid.xy; + + DstColor[st] = float3(1, 0, 0); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterCS.hlsl new file mode 100644 index 0000000..d5ca9eb --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterCS.hlsl @@ -0,0 +1,120 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +// This define will run a 3x3 median filter an all four channels separately. This is +// the slowest and probably not the most correct way to do things. +//#define PER_CHANNEL_MEDIAN + +// This enables separate 3x3 median filters on the luminance of the color and the alpha +// buffer. The color brightness is rescaled to the median luminance. This is faster +// than doing a median four separate channels, and it's potentially more correct because +// filtering R, G, and B separately will cause color shifts. +//#define LUMA_ALPHA_MEDIAN + +// The fastest and default option is to filter only the luminance. The four components +// will be selected from the pixel that had the median luminance. Luminance is not +// rescaled. The other code paths have been left in until it has been fully decided +// that they are unnecessary or wrong. + +groupshared uint gs_RG[100]; +groupshared float gs_L[100]; +#ifdef SEPARATE_ALPHA_MEDIAN +groupshared float gs_B[100]; +groupshared float gs_A[100]; +#else +groupshared uint gs_BA[100]; +#endif + +float Med9( float x0, float x1, float x2, + float x3, float x4, float x5, + float x6, float x7, float x8 ) +{ + float A = Max3(Min3(x0, x1, x2), Min3(x3, x4, x5), Min3(x6, x7, x8)); + float B = Min3(Max3(x0, x1, x2), Max3(x3, x4, x5), Max3(x6, x7, x8)); + float C = Med3(Med3(x0, x1, x2), Med3(x3, x4, x5), Med3(x6, x7, x8)); + return Med3(A, B, C); +} + +void StoreColor( uint idx, float R, float G, float B, float A ) +{ + gs_RG[idx] = f32tof16(R) << 16 | f32tof16(G); +#ifdef SEPARATE_ALPHA_MEDIAN + gs_A[idx] = A; + gs_B[idx] = B; +#else + gs_BA[idx] = f32tof16(B) << 16 | f32tof16(A); +#endif + + float Luma = dot(float3(R, G, B), float3(0.212671, 0.715160, 0.072169)) + 1.0; + gs_L[idx] = asfloat((asuint(Luma) & ~0xFF) | idx); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = 2 * (st + GTid.xy) * RcpBufferDim; + float4 R = InputColor.GatherRed( ClampSampler, PrefetchUV); + float4 G = InputColor.GatherGreen(ClampSampler, PrefetchUV); + float4 B = InputColor.GatherBlue( ClampSampler, PrefetchUV); + float4 A = InputAlpha.GatherRed( ClampSampler, PrefetchUV); + uint destIdx = GTid.x * 2 + GTid.y * 2 * 10; + StoreColor(destIdx , R.w, G.w, B.w, A.w); + StoreColor(destIdx+ 1, R.z, G.z, B.z, A.z); + StoreColor(destIdx+10, R.x, G.x, B.x, A.x); + StoreColor(destIdx+11, R.y, G.y, B.y, A.y); + } + + GroupMemoryBarrierWithGroupSync(); + + uint ulIdx = GTid.x + GTid.y * 10; + + float MedL = Med9( + gs_L[ulIdx ], gs_L[ulIdx+ 1], gs_L[ulIdx+ 2], + gs_L[ulIdx+10], gs_L[ulIdx+11], gs_L[ulIdx+12], + gs_L[ulIdx+20], gs_L[ulIdx+21], gs_L[ulIdx+22]); + + uint cIdx = asuint(MedL) & 0xFF; + uint RG = gs_RG[cIdx]; +#ifdef SEPARATE_ALPHA_MEDIAN + float Blue = gs_B[cIdx]; +#else + uint BA = gs_BA[cIdx]; + float Blue = f16tof32(BA >> 16); +#endif + OutputColor[st] = float3( f16tof32(RG >> 16), f16tof32(RG), Blue ); + +#ifdef SEPARATE_ALPHA_MEDIAN + OutputAlpha[st] = Med9( + gs_A[ulIdx ], gs_A[ulIdx+ 1], gs_A[ulIdx+ 2], + gs_A[ulIdx+10], gs_A[ulIdx+11], gs_A[ulIdx+12], + gs_A[ulIdx+20], gs_A[ulIdx+21], gs_A[ulIdx+22]); +#else + OutputAlpha[st] = f16tof32(BA); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl new file mode 100644 index 0000000..d1e44bf --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterFixupCS.hlsl @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputColor : register(t0); +Texture2D InputAlpha : register(t1); +StructuredBuffer WorkQueue : register(t2); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + OutputColor[st] = InputColor[st]; + OutputAlpha[st] = InputAlpha[st]; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl new file mode 100644 index 0000000..0330043 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFMedianFilterSepAlphaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SEPARATE_ALPHA_MEDIAN +#include "DoFMedianFilterCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass1CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass1CS.hlsl new file mode 100644 index 0000000..657565f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass1CS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); // Linear/normalized depth buffer +RWTexture2D TileClass : register(u0); + +groupshared float gs_ClosestDepthSearch[64]; +groupshared float gs_FarthestDepthSearch[64]; +groupshared float gs_MaximumCoC[64]; + +float MaxCoC( float4 Depths ) +{ + float MaxDepthRelativeToFocus = Max4(abs(Depths - FocusCenter.xxxx)); + return max(1.0 / sqrt(MATH_CONST_PI), MAX_COC_RADIUS * saturate( MaxDepthRelativeToFocus * FocalSpread )); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + float2 uv = (DTid.xy * 2 + 1) * RcpBufferDim; + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + + float TileMinDepth = Min4(Depths); + float TileMaxDepth = Max4(Depths); + float TileMaxCoC = MaxCoC(Depths); + + for (uint i = 32; i > 0; i >>= 1) + { + // Write and sync + gs_ClosestDepthSearch[GI] = TileMinDepth; + gs_FarthestDepthSearch[GI] = TileMaxDepth; + gs_MaximumCoC[GI] = TileMaxCoC; + GroupMemoryBarrierWithGroupSync(); + + // Read and sync + TileMinDepth = min(TileMinDepth, gs_ClosestDepthSearch[(GI + i) % 64]); + TileMaxDepth = max(TileMaxDepth, gs_FarthestDepthSearch[(GI + i) % 64]); + TileMaxCoC = max(TileMaxCoC, gs_MaximumCoC[(GI + i) % 64]); + GroupMemoryBarrierWithGroupSync(); + } + + if (GI == 0) + TileClass[Gid.xy] = float3(TileMaxCoC, TileMinDepth, TileMaxDepth); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2CS.hlsl new file mode 100644 index 0000000..9192376 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2CS.hlsl @@ -0,0 +1,156 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RG[24 * 24]; // Red, Green +groupshared uint gs_BW[24 * 24]; // Blue, Weight +groupshared uint gs_CF[24 * 24]; // CoC, FG Weight + +void PrefetchPixel(int2 Corner, uint2 Offset, float FgRenormFactor, float TileMinDepth) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 PreSortData = PresortBuffer[st]; + float SampleAlpha = PreSortData.y; + float4 Color = float4(ColorBuffer[st], 1) * SampleAlpha * FgRenormFactor; + gs_RG[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.g) << 16; + gs_BW[ldsIdx] = f32tof16(Color.b) | f32tof16(Color.w) << 16; + float NumRings = PreSortData.x; + float FgPercent = ForegroundPercent(PreSortData.z, TileMinDepth); + gs_CF[ldsIdx] = f32tof16(NumRings) | f32tof16(FgPercent) << 16; +} + +void AccumulateSample( uint ldsIdx, float SampleRadius, inout float4 BackgroundAccum, inout float4 ForegroundAccum ) +{ + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 SampleColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + uint CF = gs_CF[ldsIdx]; + float CoC = f16tof32(CF); + float Fg = f16tof32(CF >> 16); + + float Weight = saturate(1.0 - (SampleRadius - CoC)); + BackgroundAccum += SampleColor * (1 - Fg) * Weight; + ForegroundAccum += SampleColor * Fg * Weight; +} + +void AccumulateOneRing( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 8; ++i) + AccumulateSample(ldsIdx + s_Ring1Q[i], 1, Background, Foreground); +} + +void AccumulateTwoRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 16; ++i) + AccumulateSample(ldsIdx + s_Ring2Q[i], 2, Background, Foreground); +} + +void AccumulateThreeRings( uint ldsIdx, inout float4 Background, inout float4 Foreground ) +{ + [unroll] + for (uint i = 0; i < 24; ++i) + AccumulateSample(ldsIdx + s_Ring3Q[i], 3, Background, Foreground); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + float TileMinDepth = TileClass[Tile].y; + float FgRenormFactor = TileClass[Tile].z; + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8), FgRenormFactor, TileMinDepth); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16), FgRenormFactor, TileMinDepth); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float RingCount = (TileClass[Tile].x - 1.0) / 5.0; + + uint RG = gs_RG[ldsIdx]; + uint BW = gs_BW[ldsIdx]; + float4 CenterColor = float4(f16tof32(RG), f16tof32(RG >> 16), f16tof32(BW), f16tof32(BW >> 16)); + float Fg = f16tof32(gs_CF[ldsIdx] >> 16); + + float4 Background = CenterColor * (1.01 - Fg); + float4 Foreground = CenterColor * Fg; + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 4) + { + float Rings = clamp(RingCount, 0.0, 2.99999); + OutputColor[st] = frac(float3(saturate(Rings), saturate(Rings - 1.0), saturate(Rings - 2.0))); + OutputAlpha[st] = 1.0; + return; + } +#endif + + AccumulateOneRing(ldsIdx, Background, Foreground); + + if (RingCount > 1.0) + AccumulateTwoRings(ldsIdx, Background, Foreground); + + if (RingCount > 2.0) + AccumulateThreeRings(ldsIdx, Background, Foreground); + + Background.rgb /= (Background.a + 0.00001); + Foreground.rgb /= (Foreground.a + 0.00001); + + float Alpha = saturate(Foreground.a); + +#ifdef SUPPORT_DEBUGGING + if (DebugMode == 1) + { + OutputColor[st] = Foreground.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 2) + { + OutputColor[st] = Background.rgb; + OutputAlpha[st] = 1.0; + } + else if (DebugMode == 3) + { + OutputColor[st] = Alpha.xxx; + OutputAlpha[st] = 1.0; + } + else +#endif + { + OutputColor[st] = lerp(Background.rgb, Foreground.rgb, Alpha); + OutputAlpha[st] = lerp(Alpha, 1.0, 0.5); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2DebugCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2DebugCS.hlsl new file mode 100644 index 0000000..ffc1245 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2DebugCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_DEBUGGING +#include "DoFPass2CS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FastCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FastCS.hlsl new file mode 100644 index 0000000..0a84a8f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FastCS.hlsl @@ -0,0 +1,105 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D TileClass : register(t2); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +groupshared uint gs_RB[24 * 24]; +groupshared float gs_Gr[24 * 24]; + +void PrefetchPixel(int2 Corner, uint2 Offset) +{ + uint ldsIdx = Offset.x + Offset.y * 24; + uint2 st = clamp(Corner + Offset, 0, HalfDimensionMinusOne); + float3 Color = ColorBuffer[st]; + gs_RB[ldsIdx] = f32tof16(Color.r) | f32tof16(Color.b) << 16; + gs_Gr[ldsIdx] = Color.g; +} + +float3 LoadColor( uint ldsIdx ) +{ + uint RB = gs_RB[ldsIdx]; + return float3( f16tof32(RB), gs_Gr[ldsIdx], f16tof32(RB >> 16) ); +} + +float4 AccumulateOneRing( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 8; i++) + RingSamples += LoadColor(ldsIdx + s_Ring1Q[i]); + return float4(RingSamples, 8); +} + +float4 AccumulateTwoRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 16; i++) + RingSamples += LoadColor(ldsIdx + s_Ring2Q[i]); + return float4(RingSamples, 16); +} + +float4 AccumulateThreeRings( uint ldsIdx ) +{ + float3 RingSamples = 0; + [unroll] + for (uint i = 0; i < 24; i++) + RingSamples += LoadColor(ldsIdx + s_Ring3Q[i]); + return float4(RingSamples, 24); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + int2 TileUL = Tile * 8 - 8; + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 0, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2( 8, 16)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 0)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 8)); + PrefetchPixel(TileUL, GTid.xy + uint2(16, 16)); + GroupMemoryBarrierWithGroupSync(); + + uint2 st = Tile * 8 + GTid.xy; + uint ldsIdx = GTid.x + GTid.y * 24 + 25 * 8; + + float3 CenterColor = LoadColor(ldsIdx); + float TileCoC = TileClass[Tile].x; + float RingCount = (TileCoC - 1.0) / 5.0; + + float4 Foreground = float4(CenterColor, 1); + + Foreground += saturate(RingCount) * AccumulateOneRing(ldsIdx); + + if (RingCount > 1.0) + Foreground += saturate(RingCount - 1.0) * AccumulateTwoRings(ldsIdx); + + if (RingCount > 2.0) + Foreground += saturate(RingCount - 2.0) * AccumulateThreeRings(ldsIdx); + + OutputColor[st] = Foreground.rgb / Foreground.w; + OutputAlpha[st] = 1.0; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FixupCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FixupCS.hlsl new file mode 100644 index 0000000..30d5e14 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPass2FixupCS.hlsl @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D PresortBuffer : register(t1); +StructuredBuffer WorkQueue : register(t3); +RWTexture2D OutputColor : register(u0); +RWTexture2D OutputAlpha : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + + uint2 st = Tile * 8 + GTid.xy; + + float Alpha = saturate(PresortBuffer[st].z); + + OutputColor[st] = ColorBuffer[st]; + OutputAlpha[st] = 1.0;//lerp(Alpha, 1.0, 0.75); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterCS.hlsl new file mode 100644 index 0000000..5c148d9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterCS.hlsl @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float ComputeSampleWeight( float SampleDepth, float CmpDepth ) +{ + return 1.0 - saturate(abs(CmpDepth - SampleDepth) * RcpForegroundRange - 1.0); +} + +float4 GetWeightedSample( uint LsIdx, float CenterDepth ) +{ + float4 Color; float SampleDepth; + LoadSample(Color, SampleDepth, LsIdx); + return Color * ComputeSampleWeight(SampleDepth, CenterDepth); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetWeightedSample(LsIdx - 1, CenterDepth) + + GetWeightedSample(LsIdx + 1, CenterDepth) + + GetWeightedSample(LsIdx - 10, CenterDepth) + + GetWeightedSample(LsIdx + 10, CenterDepth); + + AccumColor += 0.75 * ( + GetWeightedSample(LsIdx - 9, CenterDepth) + + GetWeightedSample(LsIdx - 11, CenterDepth) + + GetWeightedSample(LsIdx + 9, CenterDepth) + + GetWeightedSample(LsIdx + 11, CenterDepth) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + float4 Reds = ColorBuffer.GatherRed(ClampSampler, uv); + float4 Greens = ColorBuffer.GatherGreen(ClampSampler, uv); + float4 Blues = ColorBuffer.GatherBlue(ClampSampler, uv); + + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; + + float WeightX = ComputeSampleWeight(Depths.x, MaxDepth); + float WeightY = ComputeSampleWeight(Depths.y, MaxDepth); + float WeightZ = ComputeSampleWeight(Depths.z, MaxDepth); + float WeightW = ComputeSampleWeight(Depths.w, MaxDepth); + + float3 Color = ( + WeightX * float3(Reds.x, Greens.x, Blues.x) + + WeightY * float3(Reds.y, Greens.y, Blues.y) + + WeightZ * float3(Reds.z, Greens.z, Blues.z) + + WeightW * float3(Reds.w, Greens.w, Blues.w) + ) / (WeightX + WeightY + WeightZ + WeightW); + + float4 WeightedColor = WeightByInverseLuminance(Color); + RGBuffer[lsIdx] = f32tof16(WeightedColor.r) << 16 | f32tof16(WeightedColor.g); + BWBuffer[lsIdx] = f32tof16(WeightedColor.b) << 16 | f32tof16(WeightedColor.w); +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3(max(0, (CoC - 1.0) / 5.0), SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl new file mode 100644 index 0000000..2469ae8 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFastCS.hlsl @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +groupshared uint RGBuffer[100]; +groupshared uint BWBuffer[100]; +groupshared float DepthBuffer[100]; + +void LoadSample( out float4 Color, out float Depth, uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + Color.r = f16tof32(RG >> 16); + Color.g = f16tof32(RG); + Color.b = f16tof32(BW >> 16); + Color.w = f16tof32(BW); + Depth = DepthBuffer[LsIdx]; +} + +float4 WeightByInverseLuminance( float3 Color ) +{ + float Luminance = dot(Color, float3(0.212671, 0.715160, 0.072169)); + return float4(Color, 1) * rcp(Luminance * AntiSparkleFilterStrength + 1.0); +} + +float4 GetSample( uint LsIdx ) +{ + uint RG = RGBuffer[LsIdx]; + uint BW = BWBuffer[LsIdx]; + return float4(f16tof32(RG >> 16), f16tof32(RG), f16tof32(BW >> 16), f16tof32(BW)); +} + +float4 AccumulateOneRing( uint LsIdx, float CenterDepth ) +{ + float4 AccumColor = + GetSample(LsIdx - 1) + + GetSample(LsIdx + 1) + + GetSample(LsIdx - 10) + + GetSample(LsIdx + 10); + + AccumColor += 0.75 * ( + GetSample(LsIdx - 9) + + GetSample(LsIdx - 11) + + GetSample(LsIdx + 9) + + GetSample(LsIdx + 11) + ); + + return AccumColor; +} + +void LoadBlurriestSample( uint lsIdx, int2 st ) +{ + float2 uv = st * RcpBufferDim; + + float4 Color = WeightByInverseLuminance(ColorBuffer.SampleLevel(BilinearSampler, uv, 0)); + RGBuffer[lsIdx] = f32tof16(Color.r) << 16 | f32tof16(Color.g); + BWBuffer[lsIdx] = f32tof16(Color.b) << 16 | f32tof16(Color.a); + + float4 Depths = LNDepthBuffer.Gather(ClampSampler, uv); + Depths = clamp(Depths, FocalMinDist, FocalMaxDist); + float MaxDepth = Max4(Depths); + DepthBuffer[lsIdx] = MaxDepth; +} + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + int2 TileCorner = Tile * 16 - 1; + + LoadBlurriestSample(GI, TileCorner + uint2((GI % 10) * 2, (GI / 10) * 2)); + if (GI < 36) + { + uint idx = GI + 64; + LoadBlurriestSample(idx, TileCorner + uint2((idx % 10) * 2, (idx / 10) * 2)); + } + GroupMemoryBarrierWithGroupSync(); + + uint LsIdx = GTid.x + GTid.y * 10 + 11; + float4 Color; float Depth; + LoadSample(Color, Depth, LsIdx); + + float CoC = ComputeCoC(Depth); + + PresortBuffer[st] = float3((CoC - 1.0) / 5.0, SampleAlpha(CoC), Depth); + + if (CoC >= 1.0 && DisablePreFilter == 0) + Color += saturate(CoC - 1.0) * AccumulateOneRing(LsIdx, Depth); + + OutputBuffer[st] = Color.rgb / Color.w; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl new file mode 100644 index 0000000..26f6b49 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFPreFilterFixupCS.hlsl @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D LNDepthBuffer : register(t0); +Texture2D TileClass : register(t1); +Texture2D ColorBuffer : register(t2); +StructuredBuffer WorkQueue : register(t3); + +// Half res +RWTexture2D PresortBuffer : register(u0); +RWTexture2D OutputBuffer : register(u1); + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint TileCoord = WorkQueue[Gid.x]; + uint2 Tile = uint2(TileCoord & 0xFFFF, TileCoord >> 16); + uint2 st = Tile * 8 + GTid.xy; + + float2 uv = (2 * st + 1) * RcpBufferDim; + + OutputBuffer[st] = ColorBuffer.SampleLevel(BilinearSampler, uv, 0); + float Depth = LNDepthBuffer.SampleLevel(PointSampler, uv, 0); + PresortBuffer[st] = float3(0.0, 1.0, Depth); + +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/DoFRS.hlsli new file mode 100644 index 0000000..963cd45 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFRS.hlsli @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DoF_RootSig \ + "RootFlags(0), " \ + "CBV(b0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "DescriptorTable(UAV(u0, numDescriptors = 3))," \ + "RootConstants(b1, num32BitConstants = 1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)," \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassCS.hlsl new file mode 100644 index 0000000..21694f7 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassCS.hlsl @@ -0,0 +1,85 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWTexture2D TileClass : register(u0); +RWStructuredBuffer WorkQueue : register(u1); +RWStructuredBuffer FastQueue : register(u2); + +groupshared float gs_MaxCoC[100]; +groupshared float gs_MinDepth[100]; +groupshared float gs_MaxDepth[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + float4 MinDepths = InputClass.GatherGreen(ClampSampler, PrefetchUV); + float4 MaxDepths = InputClass.GatherBlue(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + gs_MinDepth[destIdx ] = MinDepths.w; + gs_MinDepth[destIdx+ 1] = MinDepths.z; + gs_MinDepth[destIdx+10] = MinDepths.x; + gs_MinDepth[destIdx+11] = MinDepths.y; + gs_MaxDepth[destIdx ] = MaxDepths.w; + gs_MaxDepth[destIdx+ 1] = MaxDepths.z; + gs_MaxDepth[destIdx+10] = MaxDepths.x; + gs_MaxDepth[destIdx+11] = MaxDepths.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = Max3(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+11], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float FinalMaxCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + float MinDepth0 = Min3(gs_MinDepth[ulIdx ], gs_MinDepth[ulIdx+ 1], gs_MinDepth[ulIdx+ 2]); + float MinDepth1 = Min3(gs_MinDepth[ulIdx+10], gs_MinDepth[ulIdx+11], gs_MinDepth[ulIdx+12]); + float MinDepth2 = Min3(gs_MinDepth[ulIdx+20], gs_MinDepth[ulIdx+21], gs_MinDepth[ulIdx+22]); + float FinalMinDepth = Min3(MinDepth0, MinDepth1, MinDepth2); + FinalMinDepth = clamp(FinalMinDepth, FocalMinDist, FocalMaxDist); + + float MaxDepth0 = Max3(gs_MaxDepth[ulIdx ], gs_MaxDepth[ulIdx+ 1], gs_MaxDepth[ulIdx+ 2]); + float MaxDepth1 = Max3(gs_MaxDepth[ulIdx+10], gs_MaxDepth[ulIdx+11], gs_MaxDepth[ulIdx+12]); + float MaxDepth2 = Max3(gs_MaxDepth[ulIdx+20], gs_MaxDepth[ulIdx+21], gs_MaxDepth[ulIdx+22]); + float FinalMaxDepth = Max3(MaxDepth0, MaxDepth1, MaxDepth2); + FinalMaxDepth = clamp(FinalMaxDepth, FocalMinDist, FocalMaxDist); + + float FgAlphaNormalizationTerm = ComputeRenormalizationFactor( FinalMinDepth, FinalMaxCoC ); + + TileClass[DTid.xy] = float3(FinalMaxCoC, FinalMinDepth, FgAlphaNormalizationTerm); + + if (FinalMaxCoC >= 1.0) + { + if (FinalMaxDepth - FinalMinDepth > ForegroundRange) + WorkQueue[WorkQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + else + FastQueue[FastQueue.IncrementCounter()] = DTid.x | DTid.y << 16; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl new file mode 100644 index 0000000..ea97142 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DoFTilePassFixupCS.hlsl @@ -0,0 +1,52 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "DoFCommon.hlsli" + +Texture2D InputClass : register(t0); +RWStructuredBuffer FixupQueue : register(u0); + +groupshared float gs_MaxCoC[100]; + +[RootSignature(DoF_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + if (GTid.x < 5 && GTid.y < 5) + { + float2 PrefetchUV = (DTid.xy + GTid.xy) * InvTiledDimension; + float4 MaxCoCs = InputClass.GatherRed(ClampSampler, PrefetchUV); + int destIdx = GTid.x * 2 + GTid.y * 2 * 10; + gs_MaxCoC[destIdx ] = MaxCoCs.w; + gs_MaxCoC[destIdx+ 1] = MaxCoCs.z; + gs_MaxCoC[destIdx+10] = MaxCoCs.x; + gs_MaxCoC[destIdx+11] = MaxCoCs.y; + } + + GroupMemoryBarrierWithGroupSync(); + + if (any(DTid.xy >= TiledDimension)) + return; + + uint ulIdx = GTid.x + GTid.y * 10; + + float TileMaxCoC = gs_MaxCoC[ulIdx+11]; + + float MaxCoC0 = Max3(gs_MaxCoC[ulIdx ], gs_MaxCoC[ulIdx+ 1], gs_MaxCoC[ulIdx+ 2]); + float MaxCoC1 = max(gs_MaxCoC[ulIdx+10], gs_MaxCoC[ulIdx+12]); + float MaxCoC2 = Max3(gs_MaxCoC[ulIdx+20], gs_MaxCoC[ulIdx+21], gs_MaxCoC[ulIdx+22]); + float MaxNeighborCoC = Max3(MaxCoC0, MaxCoC1, MaxCoC2); + + if (TileMaxCoC < 1.0 && MaxNeighborCoC >= 1.0) + FixupQueue[FixupQueue.IncrementCounter()] = DTid.x | DTid.y << 16; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl new file mode 100644 index 0000000..5687006 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomAllCS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 8x8, 4x4, 2x2, and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +RWTexture2D Result3 : register( u2 ); +RWTexture2D Result4 : register( u3 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = DTid.x | DTid.y; + + // Downsample and store the 8x8 block + float2 centerUV = (float2(DTid.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + Result1[DTid.xy] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 4x4 block + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result2[DTid.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 2x2 block + if ((parity & 3) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]); + g_Tile[GI] = avgPixel; + Result3[DTid.xy >> 2] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + // Downsample and store the 1x1 block + if ((parity & 7) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result4[DTid.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomCS.hlsl new file mode 100644 index 0000000..0d6a90f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/DownsampleBloomCS.hlsl @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for downsampling 16x16 blocks of pixels down to 4x4 and 1x1 blocks. + +#include "PostEffectsRS.hlsli" + +Texture2D BloomBuf : register( t0 ); +RWTexture2D Result1 : register( u0 ); +RWTexture2D Result2 : register( u1 ); +SamplerState BiLinearClamp : register( s0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; +} + +groupshared float3 g_Tile[64]; // 8x8 input pixels + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 Did : SV_DispatchThreadID ) +{ + // You can tell if both x and y are divisible by a power of two with this value + uint parity = Did.x | Did.y; + + // Store the first downsampled quad per thread + float2 centerUV = (float2(Did.xy) * 2.0f + 1.0f) * g_inverseDimensions; + float3 avgPixel = BloomBuf.SampleLevel(BiLinearClamp, centerUV, 0.0f); + g_Tile[GI] = avgPixel; + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 1) == 0) + { + avgPixel = 0.25f * (avgPixel + g_Tile[GI+1] + g_Tile[GI+8] + g_Tile[GI+9]); + g_Tile[GI] = avgPixel; + Result1[Did.xy >> 1] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 3) == 0) + { + avgPixel = avgPixel + g_Tile[GI+2] + g_Tile[GI+16] + g_Tile[GI+18]; + g_Tile[GI] = avgPixel; + } + + GroupMemoryBarrierWithGroupSync(); + + if ((parity & 7) == 0) + { + avgPixel = 0.0625f * (avgPixel + g_Tile[GI+4] + g_Tile[GI+32] + g_Tile[GI+36]); + Result2[Did.xy >> 3] = avgPixel; + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ExtractLumaCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ExtractLumaCS.hlsl new file mode 100644 index 0000000..05f2960 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ExtractLumaCS.hlsl @@ -0,0 +1,59 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for extracting bright pixels and saving a log-luminance map (quantized to 8 bits). This +// is then used to generate an 8-bit histogram. + +#include "ShaderUtility.hlsli" +#include "PostEffectsRS.hlsli" + +SamplerState BiLinearClamp : register( s0 ); +Texture2D SourceTex : register( t0 ); +StructuredBuffer Exposure : register( t1 ); +RWTexture2D LumaResult : register( u0 ); + +cbuffer cb0 +{ + float2 g_inverseOutputSize; +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // We need the scale factor and the size of one pixel so that our four samples are right in the middle + // of the quadrant they are covering. + float2 uv = DTid.xy * g_inverseOutputSize; + float2 offset = g_inverseOutputSize * 0.25f; + + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + float3 color1 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, -offset.y), 0 ); + float3 color2 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, -offset.y), 0 ); + float3 color3 = SourceTex.SampleLevel( BiLinearClamp, uv + float2(-offset.x, offset.y), 0 ); + float3 color4 = SourceTex.SampleLevel( BiLinearClamp, uv + float2( offset.x, offset.y), 0 ); + + // Compute average luminance + float luma = RGBToLuminance(color1 + color2 + color3 + color4) * 0.25; + + // Prevent log(0) and put only pure black pixels in Histogram[0] + if (luma == 0.0) + { + LumaResult[DTid.xy] = 0; + } + else + { + const float MinLog = Exposure[4]; + const float RcpLogRange = Exposure[7]; + float logLuma = saturate((log2(luma) - MinLog) * RcpLogRange); // Rescale to [0.0, 1.0] + LumaResult[DTid.xy] = logLuma * 254.0 + 1.0; // Rescale to [1, 255] + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1CS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1CS.hlsli new file mode 100644 index 0000000..0115a3f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1CS.hlsli @@ -0,0 +1,194 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Description: A Compute-optimized implementation of FXAA 3.11 (PC Quality). The +// improvements take advantage of work queues (RWStructuredBuffer with atomic counters) +// for these benefits: +// +// 1) Split horizontal and vertical edge searches into separate dispatches to reduce +// shader complexity and incoherent branching. +// 2) Delay writing new pixel colors until after the source buffer has been fully +// analyzed. This avoids the write-after-scattered-read hazard. +// 3) Modify source buffer in-place rather than ping-ponging buffers, which reduces +// bandwidth and memory demands. +// +// In addition to the above-mentioned benefits of using UAVs, the first pass also +// takes advantage of groupshared memory for storing luma values, further reducing +// fetches and bandwidth. +// +// Another optimization is in the generation of perceived brightness (luma) of pixels. +// The original implementation used sRGB as a good approximation of log-luminance. A +// more precise representation of log-luminance allows the algorithm to operate with a +// higher threshold value while still finding perceivable edges across the full range +// of brightness. The approximation used here is (1 - 2^(-4L)) * 16/15, where L = +// dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ). A threshold of 0.2 is +// recommended with log-luminance computed this way. +// + +// Original Boilerplate: +// +/*============================================================================ + + + NVIDIA FXAA 3.11 by TIMOTHY LOTTES + + +------------------------------------------------------------------------------ +COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. +------------------------------------------------------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR +LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, +OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE +THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +*/ + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer WorkCount : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWBuffer ColorQueue : register(u2); +#if SUPPORT_TYPED_UAV_LOADS + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Color[st]; } +#else + #include "PixelPacking.hlsli" + Texture2D Color : register(t0); + float3 FetchColor( int2 st ) { return Unpack_R11G11B10_FLOAT(Color[st]); } +#endif +SamplerState LinearSampler : register(s0); + +#define BOUNDARY_SIZE 1 +#define ROW_WIDTH (8 + BOUNDARY_SIZE * 2) +groupshared float gs_LumaCache[ROW_WIDTH * ROW_WIDTH]; + +// If pre-computed, source luminance as a texture, otherwise write it out for Pass2 +#ifdef USE_LUMA_INPUT_BUFFER + Texture2D Luma : register(t1); +#else + RWTexture2D Luma : register(u3); +#endif + +// +// Helper functions +// +float RGBToLogLuminance( float3 LinearRGB ) +{ + float Luma = dot( LinearRGB, float3(0.212671, 0.715160, 0.072169) ); + return log2(1 + Luma * 15) / 4; +} + +[RootSignature(FXAA_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCoord = DTid.xy + StartPixel; + +#ifdef USE_LUMA_INPUT_BUFFER + // Load 4 lumas per thread into LDS (but only those needed to fill our pixel cache) + if (max(GTid.x, GTid.y) < ROW_WIDTH / 2) + { + int2 ThreadUL = PixelCoord + GTid.xy - (BOUNDARY_SIZE - 1); + float4 Luma4 = Luma.Gather(LinearSampler, ThreadUL * RcpTextureSize); + uint LoadIndex = (GTid.x + GTid.y * ROW_WIDTH) * 2; + gs_LumaCache[LoadIndex ] = Luma4.w; + gs_LumaCache[LoadIndex + 1 ] = Luma4.z; + gs_LumaCache[LoadIndex + ROW_WIDTH ] = Luma4.x; + gs_LumaCache[LoadIndex + ROW_WIDTH + 1] = Luma4.y; + } +#else + // Because we can't use Gather() on RGB, we make each thread read two pixels (but only those needed). + if (GI < ROW_WIDTH * ROW_WIDTH / 2) + { + uint LdsCoord = GI; + int2 UavCoord = StartPixel + uint2(GI % ROW_WIDTH, GI / ROW_WIDTH) + Gid.xy * 8 - BOUNDARY_SIZE; + float Luma1 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma1; + gs_LumaCache[LdsCoord] = Luma1; + + LdsCoord += ROW_WIDTH * ROW_WIDTH / 2; + UavCoord += int2(0, ROW_WIDTH / 2); + float Luma2 = RGBToLogLuminance(FetchColor(UavCoord)); + Luma[UavCoord] = Luma2; + gs_LumaCache[LdsCoord] = Luma2; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + + uint CenterIdx = (GTid.x + BOUNDARY_SIZE) + (GTid.y + BOUNDARY_SIZE) * ROW_WIDTH; + + // Load the ordinal and center luminances + float lumaN = gs_LumaCache[CenterIdx - ROW_WIDTH]; + float lumaW = gs_LumaCache[CenterIdx - 1]; + float lumaM = gs_LumaCache[CenterIdx]; + float lumaE = gs_LumaCache[CenterIdx + 1]; + float lumaS = gs_LumaCache[CenterIdx + ROW_WIDTH]; + + // Contrast threshold test + float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM))); + float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM))); + float range = rangeMax - rangeMin; + if (range < ContrastThreshold) + return; + + // Load the corner luminances + float lumaNW = gs_LumaCache[CenterIdx - ROW_WIDTH - 1]; + float lumaNE = gs_LumaCache[CenterIdx - ROW_WIDTH + 1]; + float lumaSW = gs_LumaCache[CenterIdx + ROW_WIDTH - 1]; + float lumaSE = gs_LumaCache[CenterIdx + ROW_WIDTH + 1]; + + // Pre-sum a few terms so the results can be reused + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float lumaNWSW = lumaNW + lumaSW; + float lumaNESE = lumaNE + lumaSE; + float lumaSWSE = lumaSW + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + + // Compute horizontal and vertical contrast; see which is bigger + float edgeHorz = abs(lumaNWSW - 2.0 * lumaW) + abs(lumaNS - 2.0 * lumaM) * 2.0 + abs(lumaNESE - 2.0 * lumaE); + float edgeVert = abs(lumaSWSE - 2.0 * lumaS) + abs(lumaWE - 2.0 * lumaM) * 2.0 + abs(lumaNWNE - 2.0 * lumaN); + + // Also compute local contrast in the 3x3 region. This can identify standalone pixels that alias. + float avgNeighborLuma = ((lumaNS + lumaWE) * 2.0 + lumaNWSW + lumaNESE) / 12.0; + float subpixelShift = saturate(pow(smoothstep(0, 1, abs(avgNeighborLuma - lumaM) / range), 2) * SubpixelRemoval * 2); + + float NegGrad = (edgeHorz >= edgeVert ? lumaN : lumaW) - lumaM; + float PosGrad = (edgeHorz >= edgeVert ? lumaS : lumaE) - lumaM; + uint GradientDir = abs(PosGrad) >= abs(NegGrad) ? 1 : 0; + uint Subpix = uint(subpixelShift * 254.0) & 0xFE; + + // Packet header: [ 12 bits Y | 12 bits X | 7 bit Subpix | 1 bit dir(Grad) ] + uint WorkHeader = PixelCoord.y << 20 | PixelCoord.x << 8 | Subpix | GradientDir; + + if (edgeHorz >= edgeVert) + { + uint WorkIdx; + WorkCount.InterlockedAdd(0, 1, WorkIdx); + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(0, 2 * GradientDir - 1)); + } + else + { + uint WorkIdx; + WorkCount.InterlockedAdd(4, 1, WorkIdx); + WorkIdx = LastQueueIndex - WorkIdx; + WorkQueue.Store(WorkIdx*4, WorkHeader); + ColorQueue[WorkIdx] = FetchColor(PixelCoord + uint2(2 * GradientDir - 1, 0)); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl new file mode 100644 index 0000000..10e0f1a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma2_CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl new file mode 100644 index 0000000..33b4c82 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_Luma_CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define USE_LUMA_INPUT_BUFFER +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl new file mode 100644 index 0000000..9b0567e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB2_CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl new file mode 100644 index 0000000..b69ac82 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass1_RGB_CS.hlsl @@ -0,0 +1,13 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "FXAAPass1CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2CS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2CS.hlsli new file mode 100644 index 0000000..743f13c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2CS.hlsli @@ -0,0 +1,136 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAARootSignature.hlsli" +#include "PixelPacking.hlsli" + +Texture2D Luma : register(t0); +ByteAddressBuffer WorkQueue : register(t1); +Buffer ColorQueue : register(t2); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D DstColor : register(u0); +#else +RWTexture2D DstColor : register(u0); +#endif +SamplerState LinearSampler : register(s0); + + +// Note that the number of samples in each direction is one less than the number of sample distances. The last +// is the maximum distance that should be used, but whether that sample is "good" or "bad" doesn't affect the result, +// so we don't need to load it. +#ifdef FXAA_EXTREME_QUALITY + #define NUM_SAMPLES 11 + static const float s_SampleDistances[12] = // FXAA_QUALITY__PRESET == 39 + { + 1.0, 2.0, 3.0, 4.0, 5.0, 6.5, 8.5, 10.5, 12.5, 14.5, 18.5, 36.5, + }; +#else + #define NUM_SAMPLES 7 + static const float s_SampleDistances[8] = // FXAA_QUALITY__PRESET == 25 + { + 1.0, 2.5, 4.5, 6.5, 8.5, 10.5, 14.5, 22.5 + }; +#endif + +[RootSignature(FXAA_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ +#ifdef VERTICAL_ORIENTATION + uint ItemIdx = LastQueueIndex - DTid.x; +#else + uint ItemIdx = DTid.x; +#endif + uint WorkHeader = WorkQueue.Load(ItemIdx * 4); + uint2 ST = uint2(WorkHeader >> 8, WorkHeader >> 20) & 0xFFF; + uint GradientDir = WorkHeader & 1; // Determines which side of the pixel has the highest contrast + float Subpix = (WorkHeader & 0xFE) / 254.0 * 0.5; // 7-bits to encode [0, 0.5] + +#ifdef VERTICAL_ORIENTATION + float NextLuma = Luma[ST + int2(GradientDir * 2 - 1, 0)]; + float2 StartUV = (ST + float2(GradientDir, 0.5)) * RcpTextureSize; +#else + float NextLuma = Luma[ST + int2(0, GradientDir * 2 - 1)]; + float2 StartUV = (ST + float2(0.5, GradientDir)) * RcpTextureSize; +#endif + float ThisLuma = Luma[ST]; + float CenterLuma = (NextLuma + ThisLuma) * 0.5; // Halfway between this and next; center of the contrasting edge + float GradientSgn = sign(NextLuma - ThisLuma); // Going down in brightness or up? + float GradientMag = abs(NextLuma - ThisLuma) * 0.25; // How much contrast? When can we stop looking? + + float NegDist = s_SampleDistances[NUM_SAMPLES]; + float PosDist = s_SampleDistances[NUM_SAMPLES]; + bool NegGood = false; + bool PosGood = false; + + for (uint iter = 0; iter < NUM_SAMPLES; ++iter) + { + const float Distance = s_SampleDistances[iter]; + +#ifdef VERTICAL_ORIENTATION + float2 NegUV = StartUV - float2(0, RcpTextureSize.y) * Distance; + float2 PosUV = StartUV + float2(0, RcpTextureSize.y) * Distance; +#else + float2 NegUV = StartUV - float2(RcpTextureSize.x, 0) * Distance; + float2 PosUV = StartUV + float2(RcpTextureSize.x, 0) * Distance; +#endif + + // Check for a negative endpoint + float NegGrad = Luma.SampleLevel(LinearSampler, NegUV, 0) - CenterLuma; + if (abs(NegGrad) >= GradientMag && Distance < NegDist) + { + NegDist = Distance; + NegGood = sign(NegGrad) == GradientSgn; + } + + // Check for a positive endpoint + float PosGrad = Luma.SampleLevel(LinearSampler, PosUV, 0) - CenterLuma; + if (abs(PosGrad) >= GradientMag && Distance < PosDist) + { + PosDist = Distance; + PosGood = sign(PosGrad) == GradientSgn; + } + } + + // Ranges from 0.0 to 0.5 + float PixelShift = 0.5 - min(NegDist, PosDist) / (PosDist + NegDist); + bool GoodSpan = NegDist < PosDist ? NegGood : PosGood; + PixelShift = max(Subpix, GoodSpan ? PixelShift : 0.0); + + if (PixelShift > 0.01) + { +#ifdef DEBUG_OUTPUT + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(2.0 * PixelShift, 1.0 - 2.0 * PixelShift, 0)); + #endif +#else + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = lerp(DstColor[ST], ColorQueue[ItemIdx], PixelShift); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(lerp(Unpack_R11G11B10_FLOAT(DstColor[ST]), ColorQueue[ItemIdx], PixelShift)); + #endif +#endif + } +#ifdef DEBUG_OUTPUT + else + { + #if SUPPORT_TYPED_UAV_LOADS + DstColor[ST] = float3(0, 0, 0.25); + #else + DstColor[ST] = Pack_R11G11B10_FLOAT(float3(0, 0, 0.25)); + #endif + } +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2H2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2H2CS.hlsl new file mode 100644 index 0000000..ffc4bf2 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2H2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HCS.hlsl new file mode 100644 index 0000000..d12eb12 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl new file mode 100644 index 0000000..1726b02 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2HDebugCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl new file mode 100644 index 0000000..45b2452 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2HDebugCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2V2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2V2CS.hlsl new file mode 100644 index 0000000..0c1f117 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2V2CS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define SUPPORT_TYPED_UAV_LOADS 1 + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VCS.hlsl new file mode 100644 index 0000000..cb47a88 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl new file mode 100644 index 0000000..26101ea --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebug2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "FXAAPass2VDebugCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl new file mode 100644 index 0000000..e3d664d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAPass2VDebugCS.hlsl @@ -0,0 +1,17 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define VERTICAL_ORIENTATION +#define DEBUG_OUTPUT + +#include "FXAAPass2CS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl new file mode 100644 index 0000000..2cb5fe5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAAResolveWorkQueueCS.hlsl @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Used with FXAA to resolve the lengths of the two work queues and to generate DispatchIndirect parameters. +// The work queues are also padded out to a multiple of 64 with dummy work items. +// + +#include "FXAARootSignature.hlsli" + +RWByteAddressBuffer IndirectParams : register(u0); +RWByteAddressBuffer WorkQueue : register(u1); +RWByteAddressBuffer WorkCounts : register(u2); + +[RootSignature(FXAA_RootSig)] +[numthreads( 64, 1, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 PixelCounts = WorkCounts.Load2(0); + + // Write out padding to the buffer + uint PixelCountH = PixelCounts.x; + uint PaddedCountH = (PixelCountH + 63) & ~63; + if (GI + PixelCountH < PaddedCountH) + WorkQueue.Store(PixelCountH + GI, 0xffffffff); + + // Write out padding to the buffer + uint PixelCountV = PixelCounts.y; + uint PaddedCountV = (PixelCountV + 63) & ~63; + if (GI + PixelCountV < PaddedCountV) + WorkQueue.Store(LastQueueIndex - PixelCountV - GI, 0xffffffff); + + DeviceMemoryBarrierWithGroupSync(); + + if (GI == 0) + { + IndirectParams.Store(0 , PaddedCountH >> 6); + IndirectParams.Store(12, PaddedCountV >> 6); + WorkCounts.Store2(0, 0); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/FXAARootSignature.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/FXAARootSignature.hlsli new file mode 100644 index 0000000..837d86c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/FXAARootSignature.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define FXAA_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants=7), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 6))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +cbuffer CB0 : register(b0) +{ + float2 RcpTextureSize; + float ContrastThreshold; // default = 0.2, lower is more expensive + float SubpixelRemoval; // default = 0.75, lower blurs less + uint LastQueueIndex; + uint2 StartPixel; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateHistogramCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateHistogramCS.hlsl new file mode 100644 index 0000000..431ba3b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateHistogramCS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The group size is 16x16, but one group iterates over an entire 16-wide column of pixels (384 pixels tall) +// Assuming the total workspace is 640x384, there will be 40 thread groups computing the histogram in parallel. +// The histogram measures logarithmic luminance ranging from 2^-12 up to 2^4. This should provide a nice window +// where the exposure would range from 2^-4 up to 2^4. + +#include "PostEffectsRS.hlsli" + +Texture2D LumaBuf : register( t0 ); +RWByteAddressBuffer Histogram : register( u0 ); + +groupshared uint g_TileHistogram[256]; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + g_TileHistogram[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // Loop 24 times until the entire column has been processed + for (uint TopY = 0; TopY < 384; TopY += 16) + { + uint QuantizedLogLuma = LumaBuf[DTid.xy + uint2(0, TopY)]; + InterlockedAdd( g_TileHistogram[QuantizedLogLuma], 1 ); + } + + GroupMemoryBarrierWithGroupSync(); + + Histogram.InterlockedAdd( GI * 4, g_TileHistogram[GI] ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsCS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsCS.hlsli new file mode 100644 index 0000000..9c8907b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsCS.hlsli @@ -0,0 +1,185 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(SRV(t0, numDescriptors = 1))," \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" + +#ifndef NON_POWER_OF_TWO +#define NON_POWER_OF_TWO 0 +#endif + +RWTexture2D OutMip1 : register(u0); +RWTexture2D OutMip2 : register(u1); +RWTexture2D OutMip3 : register(u2); +RWTexture2D OutMip4 : register(u3); +Texture2D SrcMip : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer CB0 : register(b0) +{ + uint SrcMipLevel; // Texture level of source mip + uint NumMipLevels; // Number of OutMips to write: [1, 4] + float2 TexelSize; // 1.0 / OutMip1.Dimensions +} + +// The reason for separating channels is to reduce bank conflicts in the +// local data memory controller. A large stride will cause more threads +// to collide on the same memory bank. +groupshared float gs_R[64]; +groupshared float gs_G[64]; +groupshared float gs_B[64]; +groupshared float gs_A[64]; + +void StoreColor( uint Index, float4 Color ) +{ + gs_R[Index] = Color.r; + gs_G[Index] = Color.g; + gs_B[Index] = Color.b; + gs_A[Index] = Color.a; +} + +float4 LoadColor( uint Index ) +{ + return float4( gs_R[Index], gs_G[Index], gs_B[Index], gs_A[Index]); +} + +float3 ApplySRGBCurve(float3 x) +{ + // This is exactly the sRGB curve + //return x < 0.0031308 ? 12.92 * x : 1.055 * pow(abs(x), 1.0 / 2.4) - 0.055; + + // This is cheaper but nearly equivalent + return x < 0.0031308 ? 12.92 * x : 1.13005 * sqrt(abs(x - 0.00228)) - 0.13448 * x + 0.005719; +} + +float4 PackColor(float4 Linear) +{ +#ifdef CONVERT_TO_SRGB + return float4(ApplySRGBCurve(Linear.rgb), Linear.a); +#else + return Linear; +#endif +} + +[RootSignature(RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // One bilinear sample is insufficient when scaling down by more than 2x. + // You will slightly undersample in the case where the source dimension + // is odd. This is why it's a really good idea to only generate mips on + // power-of-two sized textures. Trying to handle the undersampling case + // will force this shader to be slower and more complicated as it will + // have to take more source texture samples. +#if NON_POWER_OF_TWO == 0 + float2 UV = TexelSize * (DTid.xy + 0.5); + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV, SrcMipLevel); +#elif NON_POWER_OF_TWO == 1 + // > 2:1 in X dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // horizontally. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.5)); + float2 Off = TexelSize * float2(0.5, 0.0); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 2 + // > 2:1 in Y dimension + // Use 2 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // vertically. + float2 UV1 = TexelSize * (DTid.xy + float2(0.5, 0.25)); + float2 Off = TexelSize * float2(0.0, 0.5); + float4 Src1 = 0.5 * (SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel) + + SrcMip.SampleLevel(BilinearClamp, UV1 + Off, SrcMipLevel)); +#elif NON_POWER_OF_TWO == 3 + // > 2:1 in in both dimensions + // Use 4 bilinear samples to guarantee we don't undersample when downsizing by more than 2x + // in both directions. + float2 UV1 = TexelSize * (DTid.xy + float2(0.25, 0.25)); + float2 O = TexelSize * 0.5; + float4 Src1 = SrcMip.SampleLevel(BilinearClamp, UV1, SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, 0.0), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(0.0, O.y), SrcMipLevel); + Src1 += SrcMip.SampleLevel(BilinearClamp, UV1 + float2(O.x, O.y), SrcMipLevel); + Src1 *= 0.25; +#endif + + OutMip1[DTid.xy] = PackColor(Src1); + + // A scalar (constant) branch can exit all threads coherently. + if (NumMipLevels == 1) + return; + + // Without lane swizzle operations, the only way to share data with other + // threads is through LDS. + StoreColor(GI, Src1); + + // This guarantees all LDS writes are complete and that all threads have + // executed all instructions so far (and therefore have issued their LDS + // write instructions.) + GroupMemoryBarrierWithGroupSync(); + + // With low three bits for X and high three bits for Y, this bit mask + // (binary: 001001) checks that X and Y are even. + if ((GI & 0x9) == 0) + { + float4 Src2 = LoadColor(GI + 0x01); + float4 Src3 = LoadColor(GI + 0x08); + float4 Src4 = LoadColor(GI + 0x09); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip2[DTid.xy / 2] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 2) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask (binary: 011011) checks that X and Y are multiples of four. + if ((GI & 0x1B) == 0) + { + float4 Src2 = LoadColor(GI + 0x02); + float4 Src3 = LoadColor(GI + 0x10); + float4 Src4 = LoadColor(GI + 0x12); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip3[DTid.xy / 4] = PackColor(Src1); + StoreColor(GI, Src1); + } + + if (NumMipLevels == 3) + return; + + GroupMemoryBarrierWithGroupSync(); + + // This bit mask would be 111111 (X & Y multiples of 8), but only one + // thread fits that criteria. + if (GI == 0) + { + float4 Src2 = LoadColor(GI + 0x04); + float4 Src3 = LoadColor(GI + 0x20); + float4 Src4 = LoadColor(GI + 0x24); + Src1 = 0.25 * (Src1 + Src2 + Src3 + Src4); + + OutMip4[DTid.xy / 8] = PackColor(Src1); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl new file mode 100644 index 0000000..3ed1ca5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl new file mode 100644 index 0000000..4545115 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl new file mode 100644 index 0000000..010e98d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddXCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl new file mode 100644 index 0000000..6bc0d7d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsGammaOddYCS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define CONVERT_TO_SRGB +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl new file mode 100644 index 0000000..19d1d90 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl new file mode 100644 index 0000000..8641651 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 3 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl new file mode 100644 index 0000000..ede7b44 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddXCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 1 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl new file mode 100644 index 0000000..afd17ad --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/GenerateMipsLinearOddYCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define NON_POWER_OF_TWO 2 +#include "GenerateMipsCS.hlsli" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/LinearizeDepthCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/LinearizeDepthCS.hlsl new file mode 100644 index 0000000..0dfdc93 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/LinearizeDepthCS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "SSAORS.hlsli" + +RWTexture2D LinearZ : register(u0); +Texture2D Depth : register(t0); + +cbuffer CB0 : register(b0) +{ + float ZMagic; // (zFar - zNear) / zNear +} + +[RootSignature(SSAO_RootSig)] +[numthreads( 16, 16, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + LinearZ[DTid.xy] = 1.0 / (ZMagic * Depth[DTid.xy] + 1.0); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/MagnifyPixelsPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/MagnifyPixelsPS.hlsl new file mode 100644 index 0000000..8ac34ff --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/MagnifyPixelsPS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState PointSampler : register(s1); + +cbuffer Constants : register(b0) +{ + float ScaleFactor; +} + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position, float2 uv : TexCoord0 ) : SV_Target0 +{ + float2 ScaledUV = ScaleFactor * (uv - 0.5) + 0.5; + return ColorTex.SampleLevel(PointSampler, ScaledUV, 0); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl new file mode 100644 index 0000000..7f2459c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassCS.hlsl @@ -0,0 +1,82 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +RWTexture2D DstColor : register(u0); // final output color (blurred and temporally blended) +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 st = DTid.xy; + float2 position = st + 0.5; + float2 uv = position * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + float3 thisColor = DstColor[st]; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + [branch] + if (Speed >= 4.0) + { + float4 accum = float4(thisColor, 1); + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + thisColor = lerp(thisColor, accum.rgb / accum.a, saturate(Speed / 32.0)); + } + + DstColor[st] = thisColor; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl new file mode 100644 index 0000000..a405841 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurFinalPassPS.hlsl @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +#define MAX_SAMPLE_COUNT 10 +#define STEP_SIZE 3.0 + +Texture2D VelocityBuffer : register(t0); // full resolution motion vectors +Texture2D PrepBuffer : register(t1); // 1/4 resolution pre-weighted blurred color samples +SamplerState LinearSampler : register(s0); + +cbuffer c0 : register(b0) +{ + float2 RcpBufferDim; // 1 / width, 1 / height +} + +[RootSignature(MotionBlur_RootSig)] +float4 main( float4 position : SV_Position ) : SV_Target0 +{ + uint2 st = uint2(position.xy); + float2 uv = position.xy * RcpBufferDim; + + float2 Velocity = UnpackVelocity(VelocityBuffer[st]).xy; + + // Computing speed in this way will set the step size to two-pixel increments in the dominant + // direction. + float Speed = length(Velocity); + + if (Speed < 4.0) + discard; + + float4 accum = 0; + + // Half of the speed goes in each direction + float halfSampleCount = min(MAX_SAMPLE_COUNT * 0.5, Speed * 0.5 / STEP_SIZE); + + // Accumulate low-res, pre-weighted samples, summing their weights in alpha. + // The center sample is skipped because we are alpha blending onto it in the + // destination buffer. Only its weight is considered. Accumulating low-res + // samples is not so egregious because the center weight is still high res. + // Also, each of the low res samples is comprised of four pre-weighted high- + // res samples, so they are effectively masked at full resolution. + float2 deltaUV = Velocity / Speed * RcpBufferDim * STEP_SIZE; + float2 uv1 = uv; + float2 uv2 = uv; + + // First accumulate the whole samples + for (float i = halfSampleCount - 1.0; i > 0.0; i -= 1.0) + { + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 += deltaUV, 0); + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 -= deltaUV, 0); + } + + // This is almost the same as 'frac(halfSampleCount)' replaces 0 with 1. + float remainder = 1 + halfSampleCount - ceil(halfSampleCount); + + // Then accumulate the fractional samples + deltaUV *= remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv1 + deltaUV, 0) * remainder; + accum += PrepBuffer.SampleLevel(LinearSampler, uv2 - deltaUV, 0) * remainder; + + return accum * (saturate(Speed / 32.0) / (accum.a + 1.0)); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl new file mode 100644 index 0000000..edb025d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurPrePassCS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "MotionBlurRS.hlsli" +#include "PixelPacking_Velocity.hlsli" + +Texture2D ColorBuffer : register(t0); +Texture2D VelocityBuffer : register(t1); +RWTexture2D PrepBuffer : register(u0); + +float4 GetSampleData( uint2 st ) +{ + float Speed = length(UnpackVelocity(VelocityBuffer[st]).xy); + return float4(ColorBuffer[st], 1.0) * saturate(Speed * 32.0 / 4.0); +} + +[RootSignature(MotionBlur_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + uint2 corner = DTid.xy << 1; + float4 sample0 = GetSampleData( corner + uint2(0, 0) ); + float4 sample1 = GetSampleData( corner + uint2(1, 0) ); + float4 sample2 = GetSampleData( corner + uint2(0, 1) ); + float4 sample3 = GetSampleData( corner + uint2(1, 1) ); + + float combinedMotionWeight = sample0.a + sample1.a + sample2.a + sample3.a + 0.0001; + PrepBuffer[DTid.xy] = floor(0.25 * combinedMotionWeight * 3.0) / 3.0 * float4( + (sample0.rgb + sample1.rgb + sample2.rgb + sample3.rgb) / combinedMotionWeight, 1.0 ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurRS.hlsli new file mode 100644 index 0000000..7e79dd5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/MotionBlurRS.hlsli @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define MotionBlur_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 8))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleBinCullingCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleBinCullingCS.hlsl new file mode 100644 index 0000000..a08ec99 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleBinCullingCS.hlsl @@ -0,0 +1,83 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define THREAD_GROUP_SIZE 256 + +StructuredBuffer g_VisibleParticles : register( t0 ); +StructuredBuffer g_LargeBinParticles : register( t1 ); +ByteAddressBuffer g_LargeBinCounters : register( t2 ); +RWStructuredBuffer g_BinParticles : register( u0 ); +RWByteAddressBuffer g_BinCounters : register( u1 ); + +groupshared uint gs_BinCounters[16]; + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(4, THREAD_GROUP_SIZE / 4, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint ParticlesPerLargeBin = MAX_PARTICLES_PER_BIN * 16; + + uint LargeBinIndex = Gid.y * LargeBinsPerRow + Gid.x; + uint ParticleCountInLargeBin = min(g_LargeBinCounters.Load(LargeBinIndex * 4), ParticlesPerLargeBin); + + // Get the start location for particles in this bin + uint LargeBinStart = LargeBinIndex * ParticlesPerLargeBin; + uint2 FirstBin = Gid.xy * 4; + + if (GI < 16) + gs_BinCounters[GI] = 0; + + GroupMemoryBarrierWithGroupSync(); + + for (uint idx = GI; idx < ParticleCountInLargeBin; idx += THREAD_GROUP_SIZE) + { + uint SortKey = g_LargeBinParticles[LargeBinStart + idx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + uint2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + uint2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + uint2 MinBin = max(MinTile >> LogTilesPerBin, FirstBin); + uint2 MaxBin = min(MaxTile >> LogTilesPerBin, FirstBin + 3); + + for (uint y = MinBin.y; y <= MaxBin.y; ++y) + { + for (uint x = MinBin.x; x <= MaxBin.x; ++x) + { + uint CounterIdx = (x & 3) | (y & 3) << 2; + uint BinOffset = (x + y * gBinsPerRow) * MAX_PARTICLES_PER_BIN; + uint AllocIdx; + InterlockedAdd(gs_BinCounters[CounterIdx], 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_BIN - 1); + g_BinParticles[BinOffset + AllocIdx] = SortKey; + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (GI < 16) + { + uint2 OutBin = FirstBin + GTid.xy; + g_BinCounters.Store((OutBin.x + OutBin.y * gBinsPerRow) * 4, gs_BinCounters[GI]); + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl new file mode 100644 index 0000000..4894ace --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDepthBoundsCS.hlsl @@ -0,0 +1,101 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Alex Nankervis +// + +#include "ParticleUtility.hlsli" + +Texture2D g_Input : register(t0); +RWTexture2D g_Output8 : register(u0); +RWTexture2D g_Output16 : register(u1); +RWTexture2D g_Output32 : register(u2); + +groupshared uint gs_Buffer[128]; + +void Max4( uint This, uint Dx ) +{ + uint MM1 = gs_Buffer[This + 1 * Dx]; + uint MM2 = gs_Buffer[This + 8 * Dx]; + uint MM3 = gs_Buffer[This + 9 * Dx]; + GroupMemoryBarrierWithGroupSync(); + InterlockedMax(gs_Buffer[This], max(MM1, max(MM2, MM3))); + GroupMemoryBarrierWithGroupSync(); +} + +uint PackMinMax( uint This ) +{ + float Min = asfloat(~gs_Buffer[This + 64]); + float Max = asfloat(gs_Buffer[This]); + return f32tof16(Max) << 16 | f32tof16(saturate(Min - 0.001)); +} + +[RootSignature(Particle_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 DTid : SV_DispatchThreadID ) +{ + // Load 4x4 depth values (per thread) and compute the min and max of each + float2 UV1 = (DTid.xy * 4 + 1) * gRcpBufferDim; + float2 UV2 = UV1 + float2(2, 0) * gRcpBufferDim; + float2 UV3 = UV1 + float2(0, 2) * gRcpBufferDim; + float2 UV4 = UV1 + float2(2, 2) * gRcpBufferDim; + + float4 ZQuad1 = g_Input.Gather(gSampPointClamp, UV1); + float4 ZQuad2 = g_Input.Gather(gSampPointClamp, UV2); + float4 ZQuad3 = g_Input.Gather(gSampPointClamp, UV3); + float4 ZQuad4 = g_Input.Gather(gSampPointClamp, UV4); + + float4 MaxQuad = max(max(ZQuad1, ZQuad2), max(ZQuad3, ZQuad4)); + float4 MinQuad = min(min(ZQuad1, ZQuad2), min(ZQuad3, ZQuad4)); + + float maxZ = max(max(MaxQuad.x, MaxQuad.y), max(MaxQuad.z, MaxQuad.w)); + float minZ = min(min(MinQuad.x, MinQuad.y), min(MinQuad.z, MinQuad.w)); + + // Parallel reduction will reduce 4:1 per iteration. This reduces LDS loads and stores + // and can take advantage of min3 and max3 instructions when available. + + // Because each iteration puts 3/4 of active threads to sleep, threads are quickly wasted. + // Rather than have each active thread compute both a min and a max, it would be nice if + // we could wake up sleeping threads to share the burden. It turns out this is possible! + // We can have all threads performing Max4() reductions, and by applying it to negative + // min values, we can find the min depth. E.g. min(a, b) = -max(-a, -b) + + // Max values to first 64, Min values to last 64 + gs_Buffer[GI] = asuint(maxZ); + gs_Buffer[GI + 64] = ~asuint(minZ); + GroupMemoryBarrierWithGroupSync(); + + // We don't need odd numbered threads, but we could utilize more threads + const uint This = GI * 2; + + Max4(This, 1); + + // if (X % 2 == 0 && Y % 2 == 0 && Y < 8) + if ((This & 0x49) == 0) + { + uint2 SubTile = uint2(This >> 1, This >> 4) & 3; + g_Output8[Gid.xy * 4 + SubTile] = PackMinMax(This); + } + + Max4(This, 2); + + // if (X % 4 == 0 && Y % 4 == 0 && Y < 8) + if ((This & 0x5B) == 0) + { + uint2 SubTile = uint2(This >> 2, This >> 5) & 1; + g_Output16[Gid.xy * 2 + SubTile] = PackMinMax(This); + } + + Max4(This, 4); + + if (This == 0) + g_Output32[Gid.xy] = PackMinMax(This); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..be78ba9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleDispatchIndirectArgsCS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleRS.hlsli" + +ByteAddressBuffer g_ParticleInstance : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + g_NumThreadGroups.Store(0, ( g_ParticleInstance.Load(0) + 63) / 64); + +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl new file mode 100644 index 0000000..862e717 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleFinalDispatchIndirectArgsCS.hlsl @@ -0,0 +1,27 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "ParticleUtility.hlsli" + +ByteAddressBuffer g_FinalInstanceCounter : register( t0 ); +RWByteAddressBuffer g_NumThreadGroups : register( u0 ); +RWByteAddressBuffer g_DrawIndirectArgs : register ( u1 ); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint particleCount = g_FinalInstanceCounter.Load(0); + g_NumThreadGroups.Store3(0, uint3((particleCount + 63) / 64, 1, 1)); + g_DrawIndirectArgs.Store(4, particleCount); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl new file mode 100644 index 0000000..a436952 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleLargeBinCullingCS.hlsl @@ -0,0 +1,106 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +#define MAX_PARTICLES_PER_LARGE_BIN (16 * MAX_PARTICLES_PER_BIN) + +StructuredBuffer g_VertexBuffer : register(t0); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_LargeBinParticles : register(u0); +RWByteAddressBuffer g_LargeBinCounters : register(u1); +RWStructuredBuffer g_VisibleParticles : register( u2 ); + +cbuffer CB0 : register(b0) +{ + uint2 LogTilesPerLargeBin; +}; + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint VertexIdx = DTid.x; + + if (VertexIdx >= g_VertexCount.Load(0)) + return; + + // + // Transform and cull the sprite + // + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Technically, we should check for HPos.z > 0 because this is D3D. But there is only a tiny + // window of space between the eye and the near plane where this could be true. + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) > HPos.w) + return; + + // + // Generate tile-relevant draw data + // + + ParticleScreenData Particle; + + float RcpW = 1.0 / HPos.w; + + // Compute texture LOD for this sprite + float ScreenSize = Height * RcpW * gBufferDim.y; + float TextureLevel = (float)firstbithigh(MaxTextureSize) - log2(ScreenSize); + + Particle.Corner = float2(HPos.x - Width, -HPos.y - Height) * RcpW * 0.5 + 0.5; + Particle.RcpSize = HPos.w / float2(Width, Height); + Particle.Depth = saturate(HPos.w * gRcpFarZ); + Particle.Color = Sprite.Color; + Particle.TextureIndex = (float)Sprite.TextureID; + Particle.TextureLevel = TextureLevel; + + float2 TopLeft = max(Particle.Corner * gBufferDim, 0.0); + float2 BottomRight = max(TopLeft + gBufferDim / Particle.RcpSize, 0.0); + uint2 EdgeTile = uint2(gTilesPerRow, gTilesPerCol) - 1; + uint2 MinTile = uint2(TopLeft) / TILE_SIZE; + uint2 MaxTile = min(EdgeTile, uint2(BottomRight) / TILE_SIZE); + Particle.Bounds = MinTile.x | MinTile.y << 8 | MaxTile.x << 16 | MaxTile.y << 24; + + uint GlobalIdx = g_VisibleParticles.IncrementCounter(); + + g_VisibleParticles[GlobalIdx] = Particle; + + // + // Insert the particle into all large bins it occupies + // + + uint LargeBinsPerRow = (gBinsPerRow + 3) / 4; + uint2 MinLargeBin = MinTile >> LogTilesPerLargeBin; + uint2 MaxLargeBin = MaxTile >> LogTilesPerLargeBin; + + uint SortKey = f32tof16(Particle.Depth) << 18 | GlobalIdx; + + for (uint y = MinLargeBin.y; y <= MaxLargeBin.y; y++) + { + for (uint x = MinLargeBin.x; x <= MaxLargeBin.x; x++) + { + uint LargeBinIndex = y * LargeBinsPerRow + x; + uint AllocIdx; + g_LargeBinCounters.InterlockedAdd(LargeBinIndex * 4, 1, AllocIdx); + AllocIdx = min(AllocIdx, MAX_PARTICLES_PER_LARGE_BIN - 1); + g_LargeBinParticles[LargeBinIndex * MAX_PARTICLES_PER_LARGE_BIN + AllocIdx] = SortKey; + } + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleNoSortVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleNoSortVS.hlsl new file mode 100644 index 0000000..33f83f4 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleNoSortVS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#define DISABLE_PARTICLE_SORT 1 +#include "ParticleVS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePS.hlsl new file mode 100644 index 0000000..7b04a43 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePS.hlsl @@ -0,0 +1,29 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +Texture2DArray ColorTex : register(t1); +Texture2D LinearDepthTex : register(t2); + +[RootSignature(Particle_RootSig)] +float4 main(ParticleVertexOutput input ) : SV_Target0 +{ + float3 uv = float3(input.TexCoord.xy, input.TexID); + float4 TextureColor = ColorTex.Sample( gSampLinearBorder, uv ); + TextureColor.a *= saturate(1000.0 * (LinearDepthTex[(uint2)input.Pos.xy] - input.LinearZ)); + TextureColor.rgb *= TextureColor.a; + return TextureColor * input.Color; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePreSortCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePreSortCS.hlsl new file mode 100644 index 0000000..ea5ab1e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticlePreSortCS.hlsl @@ -0,0 +1,104 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +ByteAddressBuffer g_VertexCount : register(t1); +RWStructuredBuffer g_SortBuffer : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +groupshared uint gs_SortKeys[2048]; + +void FillSortKey( uint GroupStart, uint Offset, uint VertexCount ) +{ + if (GroupStart + Offset >= VertexCount) + { + gs_SortKeys[Offset] = 0; // Z = 0 will sort to the end of the list (back to front) + return; + } + + uint VertexIdx = GroupStart + Offset; + ParticleVertex Sprite = g_VertexBuffer[VertexIdx]; + + // Frustum cull before adding this particle to list of visible particles (for rendering) + float4 HPos = mul( gViewProj, float4(Sprite.Position, 1) ); + float Height = Sprite.Size * gVertCotangent; + float Width = Height * gAspectRatio; + float3 Extent = abs(HPos.xyz) - float3(Width, Height, 0); + + // Frustum cull rather than sorting and rendering every particle + if (max(max(0.0, Extent.x), max(Extent.y, Extent.z)) <= HPos.w) + { + // Encode depth as 14 bits because we only need [0, 1] at half precision. + // This gives us 18-bit indices--up to 256k particles. + float Depth = saturate(HPos.w * gRcpFarZ); + gs_SortKeys[Offset] = f32tof16(Depth) << 18 | VertexIdx; + + // Increment the visible instance counter + g_DrawIndirectArgs.InterlockedAdd(4, 1); + } + else + { + // Cull particle index by sorting it to the end and not incrementing the visible instance counter + gs_SortKeys[Offset] = 0; + } +} + +[RootSignature(Particle_RootSig)] +[numthreads(1024, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex ) +{ + uint VisibleParticles = g_VertexCount.Load(0); + + uint GroupStart = Gid.x * 2048; + + if (GroupStart > VisibleParticles) + { + g_SortBuffer[GroupStart + GI] = 0; + g_SortBuffer[GroupStart + GI + 1024] = 0; + return; + } + + FillSortKey(GroupStart, GI, VisibleParticles); + FillSortKey(GroupStart, GI + 1024, VisibleParticles); + + GroupMemoryBarrierWithGroupSync(); + + uint k; + + [unroll] + for (k = 2; k <= 2048; k *= 2) + { + [unroll] + for (uint j = k / 2; j > 0; j /= 2) + { + uint Index1 = InsertZeroBit(GI, j); + uint Index2 = Index1 ^ (k == j * 2 ? k - 1 : j); + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if (A < B) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + g_SortBuffer[GroupStart + GI] = gs_SortKeys[GI]; + g_SortBuffer[GroupStart + GI + 1024] = gs_SortKeys[GI + 1024]; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleRS.hlsli new file mode 100644 index 0000000..cb0b7fa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleRS.hlsli @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Particle_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 3)," \ + "CBV(b1)," \ + "CBV(b2)," \ + "DescriptorTable(UAV(u0, numDescriptors = 8))," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT), " \ + "StaticSampler(s2," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl new file mode 100644 index 0000000..4a1c5d3 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSortIndirectArgsCS.hlsl @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ParticleUtility.hlsli" + +RWByteAddressBuffer g_DispatchIndirectArgs : register(u0); +RWByteAddressBuffer g_DrawIndirectArgs : register(u1); + +[RootSignature(Particle_RootSig)] +[numthreads(1, 1, 1)] +void main( uint GI : SV_GroupIndex ) +{ + uint InstanceCount = g_DrawIndirectArgs.Load(4); + uint ThreadGroupCount = (InstanceCount + 2047) / 2048; + + g_DispatchIndirectArgs.Store3(0, uint3(ThreadGroupCount, 1, 1)); + + // Reset instance count so we can cull and determine how many we need to actually draw + g_DrawIndirectArgs.Store(4, 0); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSpawnCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSpawnCS.hlsl new file mode 100644 index 0000000..147b996 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleSpawnCS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// James Stanard +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + uint ResetDataIndex = RandIndex[DTid.x].x; + ParticleSpawnData rd = g_ResetData[ResetDataIndex]; + + float3 emitterVelocity = EmitPosW - LastEmitPosW; + float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW; + float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir; + float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset; + + ParticleMotion newParticle; + newParticle.Position = adjustedPosition; + newParticle.Rotation = 0.0; + newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed; + newParticle.Mass = rd.Mass; + newParticle.Age = 0.0; + newParticle.ResetDataIndex = ResetDataIndex; + g_OutputBuffer[index] = newParticle; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileCullingCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileCullingCS.hlsl new file mode 100644 index 0000000..3ba984d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileCullingCS.hlsl @@ -0,0 +1,225 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard +// Julia Careaga +// + +#include "ParticleUtility.hlsli" + +StructuredBuffer g_BinParticles : register(t0); +ByteAddressBuffer g_BinCounters : register(t1); +Texture2D g_DepthBounds : register(t2); +StructuredBuffer g_VisibleParticles : register(t3); + +RWStructuredBuffer g_SortedParticles : register(u0); +RWByteAddressBuffer g_TileHitMasks : register(u1); +RWStructuredBuffer g_DrawPackets : register(u2); +RWStructuredBuffer g_FastDrawPackets : register(u3); +RWByteAddressBuffer g_DrawPacketCount : register(u4); + +#if TILES_PER_BIN < 64 +#define GROUP_THREAD_COUNT 64 +#else +#define GROUP_THREAD_COUNT TILES_PER_BIN +#endif +#define GROUP_SIZE_X TILES_PER_BIN_X +#define GROUP_SIZE_Y (GROUP_THREAD_COUNT / GROUP_SIZE_X) +#define MASK_WORDS_PER_ITER (GROUP_THREAD_COUNT / 32) + +groupshared uint gs_SortKeys[MAX_PARTICLES_PER_BIN]; +groupshared uint gs_IntersectionMasks[TILES_PER_BIN * MASK_WORDS_PER_ITER]; +groupshared uint gs_TileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_SlowTileParticleCounts[TILES_PER_BIN]; +groupshared uint gs_MinMaxDepth[TILES_PER_BIN]; + +void BitonicSort(uint GI, uint NumElements, uint NextPow2, uint NumThreads) +{ + for (uint k = 2; k <= NextPow2; k *= 2) + { + // Align NumElements to the next multiple of k + NumElements = (NumElements + k - 1) & ~(k - 1); + + for (uint j = k / 2; j > 0; j /= 2) + { + // Loop over all N/2 unique element pairs + for (uint i = GI; i < NumElements / 2; i += NumThreads) + { + uint Index1 = InsertZeroBit(i, j); + uint Index2 = Index1 | j; + + uint A = gs_SortKeys[Index1]; + uint B = gs_SortKeys[Index2]; + + if ((A < B) != ((Index1 & k) == 0)) + { + gs_SortKeys[Index1] = B; + gs_SortKeys[Index2] = A; + } + } + + GroupMemoryBarrierWithGroupSync(); + } + } +} + +uint ComputeMaskOffset( uint2 Gid, uint2 GTid ) +{ + // Sometimes we have more threads than tiles per bin. + uint2 OutTileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + uint2(GTid.x, GTid.y % TILES_PER_BIN_Y); + uint OutTileIdx = OutTileCoord.x + OutTileCoord.y * gTileRowPitch; + return OutTileIdx * MAX_PARTICLES_PER_BIN / 8 + GTid.y / TILES_PER_BIN_Y * 4; +} + +[RootSignature(Particle_RootSig)] +[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + // Each group is assigned a bin + uint BinIndex = Gid.y * gBinsPerRow + Gid.x; + + uint ParticleCountInBin = g_BinCounters.Load(BinIndex * 4); + if (ParticleCountInBin == 0) + return; + + // Get the start location for particles in this bin + uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + // Each thread is assigned a tile + uint2 TileCoord = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y) + GTid.xy; + + if (GI < TILES_PER_BIN) + { + gs_TileParticleCounts[GI] = 0; + gs_SlowTileParticleCounts[GI] = 0; + gs_MinMaxDepth[GI] = g_DepthBounds[TileCoord] << 2; + } + + // Sometimes the counter value exceeds the actual storage size + ParticleCountInBin = min(MAX_PARTICLES_PER_BIN, ParticleCountInBin); + + // Compute the next power of two for the bitonic sort + uint NextPow2 = countbits(ParticleCountInBin) <= 1 ? ParticleCountInBin : (2 << firstbithigh(ParticleCountInBin)); + + // Fill in the sort key array. Each sort key has passenger data (in the least signficant + // bits, so that as the sort keys are moved around, they retain a pointer to the particle + // they refer to. + for (uint k = GI; k < NextPow2; k += GROUP_THREAD_COUNT) + gs_SortKeys[k] = k < ParticleCountInBin ? g_BinParticles[BinStart + k] : 0xffffffff; + + GroupMemoryBarrierWithGroupSync(); + + // Sort the particles from front to back. + BitonicSort(GI, ParticleCountInBin, NextPow2, GROUP_THREAD_COUNT); + + // Upper-left tile coord and lower-right coord, clamped to the screen + const int2 StartTile = Gid.xy * uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + + // Each thread writes the hit mask for one tile + uint OutOffsetInBytes = ComputeMaskOffset(Gid.xy, GTid.xy); + + // Loop over all sorted particles, group-size count at a time + for (uint Iter = 0; Iter < ParticleCountInBin; Iter += GROUP_THREAD_COUNT) + { + // Reset temporary particle intersection masks. There are two words (64-bits) per thread. + [unroll] + for (uint C = GI; C < TILES_PER_BIN * MASK_WORDS_PER_ITER; C += GROUP_THREAD_COUNT) + gs_IntersectionMasks[C] = 0; + + GroupMemoryBarrierWithGroupSync(); + + // The array index of the particle this thread will test + uint SortIdx = Iter + GI; + + // Compute word and bit to set (from thread index) + uint WordOffset = GI >> 5; + uint BitOffset = GI & 31; + + // Only do the loads and stores if this is a valid index (see constant number of iterations comment above) + if (SortIdx < ParticleCountInBin) + { + uint SortKey = gs_SortKeys[SortIdx]; + uint GlobalIdx = SortKey & 0x3FFFF; + + // After this phase, all we care about is its global index + g_SortedParticles[BinStart + SortIdx] = SortKey; + + uint Bounds = g_VisibleParticles[GlobalIdx].Bounds; + int2 MinTile = uint2(Bounds >> 0, Bounds >> 8) & 0xFF; + int2 MaxTile = uint2(Bounds >> 16, Bounds >> 24) & 0xFF; + MinTile = max(MinTile - StartTile, 0); + MaxTile = min(MaxTile - StartTile, int2(TILES_PER_BIN_X, TILES_PER_BIN_Y) - 1); + + for (int y = MinTile.y; y <= MaxTile.y; y++) + { + for (int x = MinTile.x; x <= MaxTile.x; x++) + { + uint TileIndex = y * TILES_PER_BIN_X + x; + uint TileMaxZ = gs_MinMaxDepth[TileIndex]; + uint Inside = SortKey < TileMaxZ ? 1 : 0; + uint SlowPath = SortKey > (TileMaxZ << 16) ? Inside : 0; + InterlockedAdd(gs_SlowTileParticleCounts[TileIndex], SlowPath); + InterlockedOr(gs_IntersectionMasks[TileIndex * MASK_WORDS_PER_ITER + WordOffset], Inside << BitOffset); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + +#if TILES_PER_BIN < GROUP_THREAD_COUNT + // Copy the hit masks from LDS to the output buffer. Here, each thread copies a single word + if (GI < TILES_PER_BIN * MASK_WORDS_PER_ITER) + { + uint TileIndex = GI % TILES_PER_BIN; + uint Offset = TileIndex * MASK_WORDS_PER_ITER + (GI / TILES_PER_BIN); + uint Mask = gs_IntersectionMasks[Offset]; + InterlockedAdd(gs_TileParticleCounts[TileIndex], countbits(Mask)); + g_TileHitMasks.Store(OutOffsetInBytes, Mask); + OutOffsetInBytes += 8; + } +#else + // Copy the hit masks from LDS to the output buffer. Here, each thread is assigned a tile. + uint Offset = GI * MASK_WORDS_PER_ITER; + [unroll] + for (uint O = 0; O < MASK_WORDS_PER_ITER; O += 2) + { + uint Mask0 = gs_IntersectionMasks[Offset+O]; + uint Mask1 = gs_IntersectionMasks[Offset+O+1]; + InterlockedAdd(gs_TileParticleCounts[GI], countbits(Mask0) + countbits(Mask1)); + g_TileHitMasks.Store2( OutOffsetInBytes, uint2(Mask0, Mask1) ); + OutOffsetInBytes += 8; + } +#endif + + GroupMemoryBarrierWithGroupSync(); + } + + if (GI >= TILES_PER_BIN) + return; + + uint ParticleCountInThisThreadsTile = gs_TileParticleCounts[GI]; + if (ParticleCountInThisThreadsTile > 0) + { + uint SlowParticlesInThisThreadsTile = gs_SlowTileParticleCounts[GI]; + uint Packet = TileCoord.x << 16 | TileCoord.y << 24 | ParticleCountInThisThreadsTile; + + uint NewPacketIndex; + if (SlowParticlesInThisThreadsTile > 0) + { + g_DrawPacketCount.InterlockedAdd(0, 1, NewPacketIndex); + g_DrawPackets[NewPacketIndex] = Packet; + } + else + { + g_DrawPacketCount.InterlockedAdd(12, 1, NewPacketIndex); + g_FastDrawPackets[NewPacketIndex] = Packet; + } + } +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRender2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRender2CS.hlsl new file mode 100644 index 0000000..7f86e85 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRender2CS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderCS.hlsl new file mode 100644 index 0000000..91ce95b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderCS.hlsl @@ -0,0 +1,219 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Alex Nankervis +// Julia Careaga +// + +#include "ParticleUtility.hlsli" +#include "PixelPacking.hlsli" + +//#define DEBUG_LOW_RES + +#define ALPHA_THRESHOLD (252.0 / 255.0) + +cbuffer CB0 : register(b0) +{ + float gDynamicResLevel; + float gMipBias; +}; + +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D g_OutputColorBuffer : register(u0); +#else +RWTexture2D g_OutputColorBuffer : register(u0); +#endif + +StructuredBuffer g_VisibleParticles : register(t0); +ByteAddressBuffer g_HitMask : register(t1); +Texture2DArray g_TexArray : register(t2); +StructuredBuffer g_SortedParticles : register(t4); +#ifndef DISABLE_DEPTH_TESTS +Texture2D g_InputDepthBuffer : register(t3); +StructuredBuffer g_DrawPackets : register(t5); +Texture2D g_TileDepthBounds : register(t7); +#else +StructuredBuffer g_DrawPackets : register(t6); +#endif + +float4 SampleParticleColor( ParticleScreenData Particle, SamplerState Sampler, float2 UV, float LevelBias ) +{ + float LOD = Particle.TextureLevel + LevelBias; + + float4 Color = g_TexArray.SampleLevel( Sampler, float3(UV, Particle.TextureIndex), LOD); + + // Multiply texture RGB with alpha. Pre-multiplied alpha blending also permits additive blending. + Color.rgb *= Color.a; + + return Color * Particle.Color; +} + +void BlendPixel( inout float4 Dst, float4 Src, float Mask ) +{ + Dst += Src * (1.0 - Dst.a) * Mask; +} + +void BlendHighRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float2 dUV = 0.5 * gRcpBufferDim * Particle.RcpSize; + float2 UV1 = UV - dUV; + float2 UV2 = UV + dUV; + +#if defined(DYNAMIC_RESOLUTION) + // Use point sampling for high-res rendering because this implies we're not rendering + // with the most detailed mip level anyway. + SamplerState Sampler = gSampPointBorder; + float LevelBias = gMipBias; +#else + SamplerState Sampler = gSampLinearBorder; + float LevelBias = 0.0; +#endif + + BlendPixel(Quad[0], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV2.y), LevelBias), Mask.x); + BlendPixel(Quad[1], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV2.y), LevelBias), Mask.y); + BlendPixel(Quad[2], SampleParticleColor(Particle, Sampler, float2(UV2.x, UV1.y), LevelBias), Mask.z); + BlendPixel(Quad[3], SampleParticleColor(Particle, Sampler, float2(UV1.x, UV1.y), LevelBias), Mask.w); +} + +void BlendLowRes( inout float4x4 Quad, ParticleScreenData Particle, float2 PixelCoord, float4 Mask = 1 ) +{ + float2 UV = (PixelCoord - Particle.Corner) * Particle.RcpSize; + float4 Color = SampleParticleColor(Particle, gSampLinearBorder, UV, 1.0); +#ifdef DEBUG_LOW_RES + Color.g *= 0.5; +#endif + BlendPixel(Quad[0], Color, Mask.x); + BlendPixel(Quad[1], Color, Mask.y); + BlendPixel(Quad[2], Color, Mask.z); + BlendPixel(Quad[3], Color, Mask.w); +} + +void WriteBlendedColor( uint2 ST, float4 Color ) +{ +#if SUPPORT_TYPED_UAV_LOADS + float3 DestColor = g_OutputColorBuffer[ST]; + g_OutputColorBuffer[ST] = Color.rgb + DestColor * (1.0 - Color.a); +#else + float3 DestColor = Unpack_R11G11B10_FLOAT(g_OutputColorBuffer[ST]); + g_OutputColorBuffer[ST] = Pack_R11G11B10_FLOAT(Color.rgb + DestColor * (1.0 - Color.a)); +#endif +} + +void WriteBlendedQuad( uint2 ST, float4x4 Quad ) +{ + WriteBlendedColor(ST + uint2(0, 0), Quad[3]); + WriteBlendedColor(ST + uint2(1, 0), Quad[2]); + WriteBlendedColor(ST + uint2(1, 1), Quad[1]); + WriteBlendedColor(ST + uint2(0, 1), Quad[0]); +} + +float4x4 RenderParticles( uint2 TileCoord, uint2 ST, uint NumParticles, uint HitMaskStart, uint BinStart ) +{ +#ifndef DISABLE_DEPTH_TESTS + const uint TileNearZ = g_TileDepthBounds[TileCoord] << 18; + float4 Depths = g_InputDepthBuffer.Gather(gSampPointClamp, (ST + 1) * gRcpBufferDim); +#endif + + // VGPR + float4x4 Quad = 0.0; + const float2 PixelCoord = (ST + 1) * gRcpBufferDim; + + uint BlendedParticles = 0; + + while (BlendedParticles < NumParticles) + { + for (uint ParticleMask = g_HitMask.Load(HitMaskStart); ParticleMask != 0; ++BlendedParticles) + { + // Get the next bit and then clear it + uint SubIdx = firstbitlow(ParticleMask); + ParticleMask ^= 1 << SubIdx; + + // Get global particle index from sorted buffer and then load the particle + uint SortKey = g_SortedParticles[BinStart + SubIdx]; + uint ParticleIdx = SortKey & 0x3FFFF; + ParticleScreenData Particle = g_VisibleParticles[ParticleIdx]; + +#if defined(DYNAMIC_RESOLUTION) + bool DoFullRes = (Particle.TextureLevel > gDynamicResLevel); +#elif defined(LOW_RESOLUTION) + static const bool DoFullRes = false; +#else + static const bool DoFullRes = true; +#endif + + if (DoFullRes) + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendHighRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendHighRes(Quad, Particle, PixelCoord); + } + } + else + { +#ifndef DISABLE_DEPTH_TESTS + if (SortKey > TileNearZ) + { + float4 DepthMask = saturate(1000.0 * (Depths - Particle.Depth)); + BlendLowRes(Quad, Particle, PixelCoord, DepthMask); + } + else +#endif + { + BlendLowRes(Quad, Particle, PixelCoord); + } + } + + //if (all(float4(Quad[0].a, Quad[1].a, Quad[2].a, Quad[3].a) > ALPHA_THRESHOLD)) + //{ + // Quad[0].a = Quad[1].a = Quad[2].a = Quad[3].a = 1.0; + // return Quad; + //} + + } // for + + // Every outer loop iteration traverses 32 entries in the sorted particle list + HitMaskStart += 4; + BinStart += 32; + + } // while + + return Quad; +} + +[RootSignature(Particle_RootSig)] +[numthreads(TILE_SIZE / 2, TILE_SIZE / 2, 1)] +void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID ) +{ + const uint DrawPacket = g_DrawPackets[Gid.x]; + uint2 TileCoord = uint2(DrawPacket >> 16, DrawPacket >> 24) & 0xFF; + const uint ParticleCount = DrawPacket & 0xFFFF; + + const uint HitMaskSizeInBytes = MAX_PARTICLES_PER_BIN / 8; + const uint TileIndex = TileCoord.x + TileCoord.y * gTileRowPitch; + const uint HitMaskStart = TileIndex * HitMaskSizeInBytes; + const uint2 BinCoord = TileCoord / uint2(TILES_PER_BIN_X, TILES_PER_BIN_Y); + const uint BinIndex = BinCoord.x + BinCoord.y * gBinsPerRow; + const uint BinStart = BinIndex * MAX_PARTICLES_PER_BIN; + + const uint2 ST = TileCoord * TILE_SIZE + 2 * GTid.xy; + + float4x4 Quad = RenderParticles( TileCoord, ST, ParticleCount, HitMaskStart, BinStart ); + + WriteBlendedQuad(ST, Quad); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl new file mode 100644 index 0000000..ec9767e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFast2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl new file mode 100644 index 0000000..5443133 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl new file mode 100644 index 0000000..46590c5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamic2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl new file mode 100644 index 0000000..7677754 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastDynamicCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl new file mode 100644 index 0000000..ceeb45f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowRes2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl new file mode 100644 index 0000000..3372807 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderFastLowResCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define DISABLE_DEPTH_TESTS +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl new file mode 100644 index 0000000..c458a4e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamic2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl new file mode 100644 index 0000000..4e4532a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowDynamicCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define DYNAMIC_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl new file mode 100644 index 0000000..99eb99b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowRes2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl new file mode 100644 index 0000000..59562ec --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleTileRenderSlowLowResCS.hlsl @@ -0,0 +1,14 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#define LOW_RESOLUTION +#include "ParticleTileRenderCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCS.hlsl new file mode 100644 index 0000000..9d5b342 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCS.hlsl @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// Julia Careaga +// + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +cbuffer CB0 : register(b0) +{ + float gElapsedTime; +}; + +StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 ); +StructuredBuffer< ParticleMotion > g_InputBuffer : register( t1 ); +RWStructuredBuffer< ParticleVertex > g_VertexBuffer : register( u0 ); +RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 ); + +[RootSignature(Particle_RootSig)] +[numthreads(64, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + if (DTid.x >= MaxParticles) + return; + + ParticleMotion ParticleState = g_InputBuffer[ DTid.x ]; + ParticleSpawnData rd = g_ResetData[ ParticleState.ResetDataIndex ]; + + // Update age. If normalized age exceeds 1, the particle does not renew its lease on life. + ParticleState.Age += gElapsedTime * rd.AgeRate; + if (ParticleState.Age >= 1.0) + return; + + // Update position. Compute two deltas to support rebounding off the ground plane. + float StepSize = (ParticleState.Position.y > 0.0 && ParticleState.Velocity.y < 0.0) ? + min(gElapsedTime, ParticleState.Position.y / -ParticleState.Velocity.y) : gElapsedTime; + + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + + // Rebound off the ground if we didn't consume all of the elapsed time + StepSize = gElapsedTime - StepSize; + if (StepSize > 0.0) + { + ParticleState.Velocity = reflect(ParticleState.Velocity, float3(0, 1, 0)) * Restitution; + ParticleState.Position += ParticleState.Velocity * StepSize; + ParticleState.Velocity += Gravity * ParticleState.Mass * StepSize; + } + + // The spawn dispatch will be simultaneously adding particles as well. It's possible to overflow. + uint index = g_OutputBuffer.IncrementCounter(); + if (index >= MaxParticles) + return; + + g_OutputBuffer[index] = ParticleState; + + // + // Generate a sprite vertex + // + + ParticleVertex Sprite; + + Sprite.Position = ParticleState.Position; + Sprite.TextureID = TextureID; + + // Update size and color + Sprite.Size = lerp(rd.StartSize, rd.EndSize, ParticleState.Age); + Sprite.Color = lerp(rd.StartColor, rd.EndColor, ParticleState.Age); + + // ...Originally from Reflex... + // Use a trinomial to smoothly fade in a particle at birth and fade it out at death. + Sprite.Color *= ParticleState.Age * (1.0 - ParticleState.Age) * (1.0 - ParticleState.Age) * 6.7; + + g_VertexBuffer[ g_VertexBuffer.IncrementCounter() ] = Sprite; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCommon.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCommon.hlsli new file mode 100644 index 0000000..658a1fa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUpdateCommon.hlsli @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +cbuffer EmissionProperties : register(b2) +{ + float3 LastEmitPosW; + float EmitSpeed; + float3 EmitPosW; + float FloorHeight; + float3 EmitDirW; + float Restitution; + float3 EmitRightW; + float EmitterVelocitySensitivity; + float3 EmitUpW; + uint MaxParticles; + float3 Gravity; + uint TextureID; + float3 EmissiveColor; + float pad; + uint4 RandIndex[64]; +}; + +struct ParticleSpawnData +{ + float AgeRate; + float RotationSpeed; + float StartSize; + float EndSize; + float3 Velocity; + float Mass; + float3 SpreadOffset; + float Random; + float4 StartColor; + float4 EndColor; +}; + +struct ParticleMotion +{ + float3 Position; + float Mass; + float3 Velocity; + float Age; + float Rotation; + uint ResetDataIndex; +}; + +struct ParticleVertexOutput +{ + float4 Pos : SV_POSITION; + float2 TexCoord : TEXCOORD0; + nointerpolation uint TexID : TEXCOORD1; + nointerpolation float4 Color : TEXCOORD2; + nointerpolation float LinearZ : TEXCOORD3; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUtility.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUtility.hlsli new file mode 100644 index 0000000..236ed1f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleUtility.hlsli @@ -0,0 +1,75 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): Julia Careaga +// James Stanard +// + +#include "ParticleRS.hlsli" + +#define MAX_PARTICLES_PER_BIN 1024 +#define BIN_SIZE_X 128 +#define BIN_SIZE_Y 64 +#define TILE_SIZE 16 + +#define TILES_PER_BIN_X (BIN_SIZE_X / TILE_SIZE) +#define TILES_PER_BIN_Y (BIN_SIZE_Y / TILE_SIZE) +#define TILES_PER_BIN (TILES_PER_BIN_X * TILES_PER_BIN_Y) + +#define MaxTextureSize 64 + +SamplerState gSampLinearBorder : register(s0); +SamplerState gSampPointBorder : register(s1); +SamplerState gSampPointClamp : register(s2); + +cbuffer CBChangesPerView : register(b1) +{ + float4x4 gInvView; + float4x4 gViewProj; + + float gVertCotangent; + float gAspectRatio; + float gRcpFarZ; + float gInvertZ; + + float2 gBufferDim; + float2 gRcpBufferDim; + + uint gBinsPerRow; + uint gTileRowPitch; + uint gTilesPerRow; + uint gTilesPerCol; +}; + +struct ParticleVertex +{ + float3 Position; + float4 Color; + float Size; + uint TextureID; +}; + +// Intentionally left unpacked to allow scalar register loads and ops +struct ParticleScreenData +{ + float2 Corner; // Top-left location + float2 RcpSize; // 1/width, 1/height + float4 Color; + float Depth; + float TextureIndex; + float TextureLevel; + uint Bounds; +}; + +uint InsertZeroBit( uint Value, uint BitIdx ) +{ + uint Mask = BitIdx - 1; + return (Value & ~Mask) << 1 | (Value & Mask); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ParticleVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleVS.hlsl new file mode 100644 index 0000000..75e383b --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ParticleVS.hlsl @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author(s): James Stanard + +#include "ParticleUpdateCommon.hlsli" +#include "ParticleUtility.hlsli" + +StructuredBuffer g_VertexBuffer : register( t0 ); +StructuredBuffer g_IndexBuffer : register( t3 ); + +[RootSignature(Particle_RootSig)] +ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID ) +{ +#ifdef DISABLE_PARTICLE_SORT + ParticleVertex In = g_VertexBuffer[ InstanceId ]; +#else + ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ]; +#endif + ParticleVertexOutput Out; + + Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1); + Out.Color = In.Color; + Out.TexID = In.TextureID; + + float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord ); + float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position; + + Out.Pos = mul( gViewProj, float4(Position, 1) ); + Out.LinearZ = Out.Pos.w * gRcpFarZ; + + return Out; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl new file mode 100644 index 0000000..d6f0c11 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphBackgroundVS.hlsl @@ -0,0 +1,46 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +cbuffer CB1 : register(b1) +{ + float RecSize; +} + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint vertexID : SV_VertexID, uint instanceID : SV_InstanceID ) +{ + //VSOutput Output; + //float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + //float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, RecSize), uv ); + //Corner.y -= 0.45f * instanceID; + //Output.pos = float4(Corner.xy, 1.0,1); + //Output.col = float3(0.0, 0.0, 0.0); + //return Output; + + VSOutput Output; + float2 uv = float2( (vertexID >> 1) & 1, vertexID & 1 ); + float2 Corner = lerp( float2(-1.0f, 1.0f), float2(1.0f, -1), uv ); + Output.pos = float4(Corner.xy, 1.0,1); + Output.col = float3(0.0, 0.0, 0.0); + return Output; + +} + diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphPS.hlsl new file mode 100644 index 0000000..3dd5f5c --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphPS.hlsl @@ -0,0 +1,26 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +[RootSignature(PerfGraph_RootSig)] +float4 main( VSOutput input ) : SV_TARGET +{ + return float4(input.col, 0.75); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphRS.hlsli new file mode 100644 index 0000000..ae42d71 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphRS.hlsli @@ -0,0 +1,19 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PerfGraph_RootSig \ + "RootFlags(0), " \ + "CBV(b0)," \ + "DescriptorTable(UAV(u0, numDescriptors = 2))," \ + "SRV(t0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "RootConstants(b1, num32BitConstants = 3)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphVS.hlsl new file mode 100644 index 0000000..3e0c7ae --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PerfGraphVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: Julia Careaga +// + +#include "PerfGraphRS.hlsli" + +cbuffer CBGraphColor : register(b0) +{ + float3 Color; + float RcpXScale; + uint NodeCount; + uint FrameID; +}; + +cbuffer constants : register(b1) +{ + uint Instance; + float RcpYScale; +} + +struct VSOutput +{ + float4 pos : SV_POSITION; + float3 col : COLOR; +}; + +StructuredBuffer PerfTimes : register(t0); + +[RootSignature(PerfGraph_RootSig)] +VSOutput main( uint VertexID : SV_VertexID ) +{ + // Assume NodeCount is a power of 2 + uint offset = (FrameID + VertexID) & (NodeCount - 1); + + // TODO: Stop interleaving data + float perfTime = saturate(PerfTimes[offset] * RcpYScale) * 2.0 - 1.0; + float frame = VertexID * RcpXScale - 1.0; + + VSOutput output; + output.pos = float4(frame, perfTime, 1, 1); + output.col = Color; + return output; + +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking.hlsli new file mode 100644 index 0000000..86cd26e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking.hlsli @@ -0,0 +1,22 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_HLSLI__ +#define __PIXEL_PACKING_HLSLI__ + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking_RGBE.hlsli" +#include "PixelPacking_RGBM.hlsli" +#include "PixelPacking_R11G11B10.hlsli" + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_LUV.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_LUV.hlsli new file mode 100644 index 0000000..acf23f1 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_LUV.hlsli @@ -0,0 +1,135 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_LUV_HLSLI__ +#define __PIXEL_PACKING_LUV_HLSLI__ + +// This is the CIELUV color space which separates luminance from chrominance (like xyY) and rotates +// chroma to be more perceptually uniform. The intention is to be able to pack this triplet into a +// custom 32-bit encoding that maximizes luminance precision (better than 12-bit PQ) while leaving +// enough precision for chrominance to express all visible colors without (negligible) banding. + +/* +// This describes the process of converting RGB to LUV. + +// Start with the right RGBtoXYZ matrix for your color space (this one is sRGB D65) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + +static const float3x3 RGBtoXYZ = +{ + 0.412387, 0.357591, 0.180450, + 0.212637, 0.715183, 0.072180, <--The luminance dot product + 0.019331, 0.119197, 0.950373 +}; + +// Compute u' and v'. UV is a two dimensional term describing the pixel's +// chrominance (hue & saturation without brightness). In this space (CIELUV), +// chrominance is fairly perceptually uniform. +// u' = 4X / (X + 15Y + 3Z) +// v' = 9Y / (X + 15Y + 3Z) + +// Because all visible colors will be within the bounds of u':[0.00, 0.62], v':[0.01, 0.59], +// we can normalize the values (for unorm representation). +// U = u' / 0.62 +// V = v' / 0.59 + +// If we compute these two values... +// A = 4 / 9 * 0.59 / 0.62 * X +// B = (X + 15 * Y + 3 * Z) * 0.59 / 9 + +// ...we can derive our final LUV from A, Y, and B +// L = Y +// U = A / B +// V = Y / B + +// We can compute (A, Y, B) by multiplying XYZ by this matrix +static const float3x3 FixupMatrix = +{ + 4.0 / 9.0 * 0.59 / 0.62, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.59 / 9.0, 15.0 * 0.59 / 9.0, 3.0 * 0.59 / 9.0 +}; + +// But we should just concatenate the two matrices... +static const float3x3 EncodeMatrix = mul(FixupMatrix, RGBtoXYZ); +*/ + +float3 Rec709toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.174414, 0.151239, 0.076320, + 0.212637, 0.715183, 0.072180, + 0.239929, 0.750147, 0.269713 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec709(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 8.056027, 0.955680, -2.535335, + -2.324391, 1.668159, 0.211293, + -0.701623, -5.489756, 5.375334 + }; + + return mul(DecodeMatrix, AYB); +} + +float3 Rec2020toLUV(float3 RGB) +{ + static const float3x3 EncodeMatrix = + { + 0.269393, 0.061165, 0.071416, + 0.262698, 0.678009, 0.059293, + 0.300076, 0.681710, 0.278003 + }; + + // Returns [A, Y, B], from which we can easily compress to LUV32 + return mul(EncodeMatrix, RGB); +} + +float3 LUVtoRec2020(float3 AYB) +{ + static const float3x3 DecodeMatrix = + { + 4.258579, 0.911167, -1.288312, + -1.588716, 1.537614, 0.080178, + -0.700901, -4.753993, 4.791068 + }; + + return mul(DecodeMatrix, AYB); +} + +uint PackLUV(float3 AYB) +{ + if (AYB.y < 0.00005) + return 0; + + uint L = (f32tof16(AYB.y) + 1) >> 1; + uint2 UV = saturate(AYB.xy / AYB.z) * 511.0 + 0.5; + return L | UV.x << 14 | UV.y << 23; +} + +float3 UnpackLUV(uint LUV) +{ + float L = f16tof32((LUV << 1) & 0x7FFE); + float2 UV = (uint2(LUV >> 14, LUV >> 23) & 0x1FF) / 511.0; + float B = L / max(UV.y, 1e-6); + return float3(UV.x * B, L, B); +} + +#endif // __PIXEL_PACKING_LUV_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli new file mode 100644 index 0000000..a924970 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_R11G11B10.hlsli @@ -0,0 +1,127 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_R11G11B10_HLSLI__ +#define __PIXEL_PACKING_R11G11B10_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// The standard 32-bit HDR color format. Each float has a 5-bit exponent and no sign bit. +uint Pack_R11G11B10_FLOAT( float3 rgb ) +{ + // Clamp upper bound so that it doesn't accidentally round up to INF + // Exponent=15, Mantissa=1.11111 + rgb = min(rgb, asfloat(0x477C0000)); + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 4 ) & 0x7FF0); + float g = f16tof32((rgb >> 7 ) & 0x7FF0); + float b = f16tof32((rgb >> 17) & 0x7FE0); + return float3(r, g, b); +} + +// An improvement to float is to store the mantissa in logarithmic form. This causes a +// smooth and continuous change in precision rather than having jumps in precision every +// time the exponent increases by whole amounts. +uint Pack_R11G11B10_FLOAT_LOG( float3 rgb ) +{ + float3 flat_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 curved_mantissa = min(log2(flat_mantissa) + 1.0, asfloat(0x3FFFFFFF)); + rgb = asfloat(asuint(rgb) & 0xFF800000 | asuint(curved_mantissa) & 0x7FFFFF); + + uint r = ((f32tof16(rgb.x) + 8) >> 4) & 0x000007FF; + uint g = ((f32tof16(rgb.y) + 8) << 7) & 0x003FF800; + uint b = ((f32tof16(rgb.z) + 16) << 17) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_FLOAT_LOG( uint p ) +{ + float3 rgb = f16tof32(uint3(p << 4, p >> 7, p >> 17) & uint3(0x7FF0, 0x7FF0, 0x7FE0)); + float3 curved_mantissa = asfloat(asuint(rgb) & 0x7FFFFF | 0x3F800000); + float3 flat_mantissa = exp2(curved_mantissa - 1.0); + return asfloat(asuint(rgb) & 0xFF800000 | asuint(flat_mantissa) & 0x7FFFFF); +} + +// As an alternative to floating point, we can store the log2 of a value in fixed point notation. +// The 11-bit fields store 5.6 fixed point notation for log2(x) with an exponent bias of 15. The +// 10-bit field uses 5.5 fixed point. The disadvantage here is we don't handle underflow. Instead +// we use the extra two exponent values to extend the range down through two more exponents. +// Range = [2^-16, 2^16) +uint Pack_R11G11B10_FIXED_LOG(float3 rgb) +{ + uint3 p = clamp((log2(rgb) + 16.0) * float3(64, 64, 32) + 0.5, 0.0, float3(2047, 2047, 1023)); + return p.b << 22 | p.g << 11 | p.r; +} + +float3 Unpack_R11G11B10_FIXED_LOG(uint p) +{ + return exp2((uint3(p, p >> 11, p >> 21) & uint3(2047, 2047, 2046)) / 64.0 - 16.0); +} + +// These next two encodings are great for LDR data. By knowing that our values are [0.0, 1.0] +// (or [0.0, 2.0), incidentally), we can reduce how many bits we need in the exponent. We can +// immediately eliminate all postive exponents. By giving more bits to the mantissa, we can +// improve precision at the expense of range. The 8E3 format goes one bit further, quadrupling +// mantissa precision but increasing smallest exponent from -14 to -6. The smallest value of 8E3 +// is 2^-14, while the smallest value of 7E4 is 2^-21. Both are smaller than the smallest 8-bit +// sRGB value, which is close to 2^-12. + +// This is like R11G11B10_FLOAT except that it moves one bit from each exponent to each mantissa. +uint Pack_R11G11B10_E4_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). The magic number is 1.FFFFF x 2^0. (We can't represent hex floats in HLSL.) + // This trick works because clamping your exponent to 0 reduces the number of bits needed by 1. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ); + uint r = ((f32tof16(rgb.r) + 4) >> 3 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 4) << 8 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 8) << 18) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E4_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 3 ) & 0x3FF8); + float g = f16tof32((rgb >> 8 ) & 0x3FF8); + float b = f16tof32((rgb >> 18) & 0x3FF0); + return float3(r, g, b); +} + +// This is like R11G11B10_FLOAT except that it moves two bits from each exponent to each mantissa. +uint Pack_R11G11B10_E3_FLOAT( float3 rgb ) +{ + // Clamp to [0.0, 2.0). Divide by 256 to bias the exponent by -8. This shifts it down to use one + // fewer bit while still taking advantage of the denormalization hardware. In half precision, + // the exponent of 0 is 0xF. Dividing by 256 makes the max exponent 0x7--one fewer bit. + rgb = clamp( rgb, 0.0, asfloat(0x3FFFFFFF) ) / 256.0; + uint r = ((f32tof16(rgb.r) + 2) >> 2 ) & 0x000007FF; + uint g = ((f32tof16(rgb.g) + 2) << 9 ) & 0x003FF800; + uint b = ((f32tof16(rgb.b) + 4) << 19) & 0xFFC00000; + return r | g | b; +} + +float3 Unpack_R11G11B10_E3_FLOAT( uint rgb ) +{ + float r = f16tof32((rgb << 2 ) & 0x1FFC); + float g = f16tof32((rgb >> 9 ) & 0x1FFC); + float b = f16tof32((rgb >> 19) & 0x1FF8); + return float3(r, g, b) * 256.0; +} + +#endif // __PIXEL_PACKING_R11G11B10_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBE.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBE.hlsli new file mode 100644 index 0000000..c0c08eb --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBE.hlsli @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBE_HLSLI__ +#define __PIXEL_PACKING_RGBE_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +// RGBE, aka R9G9B9E5_SHAREDEXP, is an unsigned float HDR pixel format where red, green, +// and blue all share the same exponent. The color channels store a 9-bit value ranging +// from [0/512, 511/512] which multiplies by 2^Exp and Exp ranges from [-16, 15]. +// Floating point specials are not encoded. +uint PackRGBE(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477F8000); // 1.FF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.00 x 2^-16 + + // Non-negative and <= kMaxVal + rgb = clamp(rgb, 0, kMaxVal); + + // From the maximum channel we will determine the exponent. We clamp to a min value + // so that the exponent is within the valid 5-bit range. + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // 'Bias' has to have the biggest exponent plus 15 (and nothing in the mantissa). When + // added to the three channels, it shifts the explicit '1' and the 8 most significant + // mantissa bits into the low 9 bits. IEEE rules of float addition will round rather + // than truncate the discarded bits. Channels with smaller natural exponents will be + // shifted further to the right (discarding more bits). + float Bias = asfloat((asuint(MaxChannel) + 0x07804000) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = asuint(rgb + Bias); + uint E = (asuint(Bias) << 4) + 0x10000000; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r & 0x1FF; +} + +float3 UnpackRGBE(uint p) +{ + float3 rgb = uint3(p, p >> 9, p >> 18) & 0x1FF; + return ldexp(rgb, (int)(p >> 27) - 24); +} + +// This non-standard variant applies a non-linear ramp to the mantissa to get better precision +// with bright and saturated colors. These colors tend to have one or two channels that prop +// up the shared exponent, leaving little to no information in the dark channels. +uint PackRGBE_sqrt(float3 rgb) +{ + // To determine the shared exponent, we must clamp the channels to an expressible range + const float kMaxVal = asfloat(0x477FFFFF); // 1.FFFFFF x 2^+15 + const float kMinVal = asfloat(0x37800000); // 1.000000 x 2^-16 + + rgb = clamp(rgb, 0, kMaxVal); + + float MaxChannel = max(max(kMinVal, rgb.r), max(rgb.g, rgb.b)); + + // Scaling the maximum channel puts it into the range [0, 1). It does this by negating + // and subtracting one from the max exponent. + float Scale = asfloat((0x7EFFFFFF - asuint(MaxChannel)) & 0x7F800000); + + // Shift bits into the right places + uint3 RGB = sqrt(rgb * Scale) * 511.0 + 0.5; + uint E = (0x47000000 - asuint(Scale)) << 4; + return E | RGB.b << 18 | RGB.g << 9 | RGB.r; +} + +float3 UnpackRGBE_sqrt(uint p) +{ + float3 rgb = (uint3(p, p >> 9, p >> 18) & 0x1FF) / 511.0; + return ldexp(rgb * rgb, (int)(p >> 27) - 15); +} + +#endif // __PIXEL_PACKING_RGBE_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBM.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBM.hlsli new file mode 100644 index 0000000..a5c7f29 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_RGBM.hlsli @@ -0,0 +1,50 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_RGBM_HLSLI__ +#define __PIXEL_PACKING_RGBM_HLSLI__ + +#include "ColorSpaceUtility.hlsli" + +float4 ToRGBM( float3 rgb, float PeakValue = 255.0 / 16.0 ) +{ + rgb = saturate(rgb / PeakValue); + float maxVal = max(max(1e-6, rgb.x), max(rgb.y, rgb.z)); + maxVal = ceil(maxVal * 255.0) / 255.0; + return float4(rgb / maxVal, maxVal); +} + +float3 FromRGBM(float4 rgbm, float PeakValue = 255.0 / 16.0 ) +{ + return rgbm.rgb * rgbm.a * PeakValue; +} + +// RGBM is a good way to pack HDR values into R8G8B8A8_UNORM +uint PackRGBM( float4 rgbm, bool sRGB = true ) +{ + if (sRGB) + rgbm.rgb = ApplySRGBCurve(rgbm.rgb); + rgbm = rgbm * 255.0 + 0.5; + return (uint)rgbm.a << 24 | (uint)rgbm.b << 16 | (uint)rgbm.g << 8 | (uint)rgbm.r; +} + +float4 UnpackRGBM( uint p, bool sRGB = true ) +{ + float4 rgbm = float4(uint4(p, p >> 8, p >> 16, p >> 24) & 0xFF); + rgbm /= 255.0; + if (sRGB) + rgbm.rgb = RemoveSRGBCurve(rgbm.rgb); + return rgbm; +} + +#endif // __PIXEL_PACKING_RGBM_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_Velocity.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_Velocity.hlsli new file mode 100644 index 0000000..d28c020 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PixelPacking_Velocity.hlsli @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __PIXEL_PACKING_VELOCITY_HLSLI__ +#define __PIXEL_PACKING_VELOCITY_HLSLI__ + +#if 1 +// This is a custom packing that devotes 10 bits each to X and Y velocity but 12 bits to Z velocity. Floats +// are used instead of SNORM to increase precision around small deltas, which are the majority of deltas. +// With TAA and Motion Blur, velocities are clamped, giving little reason to express them precisely in terms +// of the size of the screen. +#define packed_velocity_t uint + +// Designed to compress (-256.0, +256.0) with a signed 6e3 float +uint PackXY( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 32768.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 8) >> 4 | signbit << 9; +} + +float UnpackXY( uint x ) +{ + return f16tof32((x & 0x1FF) << 4 | (x >> 9) << 15) * 32768.0; +} + +// Designed to compress (-1.0, 1.0) with a signed 8e3 float +uint PackZ( float x ) +{ + uint signbit = asuint(x) >> 31; + x = clamp(abs(x / 128.0), 0, asfloat(0x3BFFE000)); + return (f32tof16(x) + 2) >> 2 | signbit << 11; +} + +float UnpackZ( uint x ) +{ + return f16tof32((x & 0x7FF) << 2 | (x >> 11) << 15) * 128.0; +} + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return PackXY(Velocity.x) | PackXY(Velocity.y) << 10 | PackZ(Velocity.z) << 20; +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return float3(UnpackXY(Velocity & 0x3FF), UnpackXY((Velocity >> 10) & 0x3FF), UnpackZ(Velocity >> 20)); +} + +#elif 1 +#define packed_velocity_t float4 + +// Pack the velocity to write to R10G10B10A2_UNORM +packed_velocity_t PackVelocity( float3 Velocity ) +{ + // Stretch dx,dy from [-64, 63.875] to [-512, 511] to [-0.5, 0.5) to [0, 1) + // Velocity.xy = (0,0) must be representable. + return float4(Velocity * float3(8, 8, 4096) / 1024.0 + 512 / 1023.0, 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return (Velocity.xyz - 512.0 / 1023.0) * float3(1024, 1024, 2) / 8.0; +} +#else +#define packed_velocity_t float4 + +// Pack the velocity to write to R16G16B16A16_FLOAT +packed_velocity_t PackVelocity( float3 Velocity ) +{ + return float4(Velocity * float3(16, 16, 32*1024), 0); +} + +// Unpack the velocity from R10G10B10A2_UNORM +float3 UnpackVelocity( packed_velocity_t Velocity ) +{ + return Velocity.xyz / float3(16, 16, 32*1024); +} + +#endif + +#endif // __PIXEL_PACKING_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PostEffectsRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PostEffectsRS.hlsli new file mode 100644 index 0000000..53c0832 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PostEffectsRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define PostEffects_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "DescriptorTable(UAV(u0, numDescriptors = 4))," \ + "DescriptorTable(SRV(t0, numDescriptors = 4))," \ + "CBV(b1)," \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PresentHDRPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/PresentHDRPS.hlsl new file mode 100644 index 0000000..7de7a62 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PresentHDRPS.hlsl @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +Texture2D Overlay : register(t1); + +SamplerState BilinearClamp : register(s0); + +struct PS_OUT +{ + float3 HdrOutput : SV_Target0; +}; + +cbuffer CB0 : register(b0) +{ + float2 RcpDstSize; + float PaperWhite; + float MaxBrightness; + uint DebugMode; +} + +[RootSignature(Present_RootSig)] +PS_OUT main( float4 position : SV_Position ) +{ + PS_OUT Out; + + float4 UI = Overlay.SampleLevel(BilinearClamp, position.xy * RcpDstSize, 0); + float3 HDR = ColorTex[(int2)position.xy]; + float3 SDR = TM_Stanard(HDR); + + // Better to blend in linear space (unlike the hardware compositor) + UI.rgb = RemoveSRGBCurve(UI.rgb); + + // SDR was not explicitly clamped to [0, 1] on input, but it will be on output + SDR = saturate(SDR) * (1 - UI.a) + UI.rgb; + + HDR = REC709toREC2020(HDR); + UI.rgb = REC709toREC2020(UI.rgb) * PaperWhite; + SDR = REC709toREC2020(SDR) * PaperWhite; + + // Tone map while in Rec.2020. This allows values to taper to the maximum of the display. + HDR = TM_Stanard(HDR * PaperWhite / MaxBrightness) * MaxBrightness; + + // Composite HDR buffer with UI + HDR = HDR * (1 - UI.a) + UI.rgb; + + float3 FinalOutput; + switch (DebugMode) + { + case 0: FinalOutput = HDR; break; + case 1: FinalOutput = SDR; break; + default: FinalOutput = (position.x * RcpDstSize.x < 0.5 ? HDR : SDR); break; + } + + // Current values are specified in nits. Normalize to max specified brightness. + Out.HdrOutput = ApplyREC2084Curve(FinalOutput / 10000.0); + + return Out; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PresentRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/PresentRS.hlsli new file mode 100644 index 0000000..c35e6f4 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PresentRS.hlsli @@ -0,0 +1,30 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Present_RootSig \ + "RootFlags(0), " \ + "DescriptorTable(SRV(t0, numDescriptors = 2))," \ + "RootConstants(b0, num32BitConstants = 6), " \ + "SRV(t2, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(UAV(u0, numDescriptors = 1)), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/PresentSDRPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/PresentSDRPS.hlsl new file mode 100644 index 0000000..2405f53 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/PresentSDRPS.hlsl @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); + +[RootSignature(Present_RootSig)] +float3 main( float4 position : SV_Position ) : SV_Target0 +{ + float3 LinearRGB = RemoveDisplayProfile(ColorTex[(int2)position.xy], LDR_COLOR_FORMAT); + return ApplyDisplayProfile(LinearRGB, DISPLAY_PLANE_FORMAT); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ResolveTAACS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ResolveTAACS.hlsl new file mode 100644 index 0000000..14c5483 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ResolveTAACS.hlsl @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +[RootSignature(Temporal_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Color = TemporalColor[DTid.xy]; + OutColor[DTid.xy] = Color.rgb / max(Color.w, 1e-6); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/SSAORS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/SSAORS.hlsli new file mode 100644 index 0000000..9d433f6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/SSAORS.hlsli @@ -0,0 +1,31 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SSAO_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4), " \ + "CBV(b1), " \ + "DescriptorTable(UAV(u0, numDescriptors = 5))," \ + "DescriptorTable(SRV(t0, numDescriptors = 5))," \ + "SRV(t5), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ScreenQuadVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ScreenQuadVS.hlsl new file mode 100644 index 0000000..aadbec6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ScreenQuadVS.hlsl @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// A vertex shader for full-screen effects without a vertex buffer. The +// intent is to output an over-sized triangle that encompasses the entire +// screen. By doing so, we avoid rasterization inefficiency that could +// result from drawing two triangles with a shared edge. +// +// Use null input layout +// Draw(3) + +#include "PresentRS.hlsli" + +[RootSignature(Present_RootSig)] +void main( + in uint VertID : SV_VertexID, + out float4 Pos : SV_Position, + out float2 Tex : TexCoord0 +) +{ + // Texture coordinates range [0, 2], but only [0, 1] appears on screen. + Tex = float2(uint2(VertID, VertID << 1) & 2); + Pos = float4(lerp(float2(-1, 1), float2(1, -1), Tex), 0, 1); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ShaderUtility.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ShaderUtility.hlsli new file mode 100644 index 0000000..4d3f68e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ShaderUtility.hlsli @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __SHADER_UTILITY_HLSLI__ +#define __SHADER_UTILITY_HLSLI__ + +#pragma warning( disable : 3571 ) + +#include "ColorSpaceUtility.hlsli" +#include "PixelPacking.hlsli" + +// Encodes a smooth logarithmic gradient for even distribution of precision natural to vision +float LinearToLogLuminance( float x, float gamma = 4.0 ) +{ + return log2(lerp(1, exp2(gamma), x)) / gamma; +} + +// This assumes the default color gamut found in sRGB and REC709. The color primaries determine these +// coefficients. Note that this operates on linear values, not gamma space. +float RGBToLuminance( float3 x ) +{ + return dot( x, float3(0.212671, 0.715160, 0.072169) ); // Defined by sRGB/Rec.709 gamut +} + +float MaxChannel(float3 x) +{ + return max(x.x, max(x.y, x.z)); +} + +// This is the same as above, but converts the linear luminance value to a more subjective "perceived luminance", +// which could be called the Log-Luminance. +float RGBToLogLuminance( float3 x, float gamma = 4.0 ) +{ + return LinearToLogLuminance( RGBToLuminance(x), gamma ); +} + +// A fast invertible tone map that preserves color (Reinhard) +float3 TM( float3 rgb ) +{ + return rgb / (1 + RGBToLuminance(rgb)); +} + +// Inverse of preceding function +float3 ITM( float3 rgb ) +{ + return rgb / (1 - RGBToLuminance(rgb)); +} + +// 8-bit should range from 16 to 235 +float3 RGBFullToLimited8bit( float3 x ) +{ + return saturate(x) * 219.0 / 255.0 + 16.0 / 255.0; +} + +float3 RGBLimitedToFull8bit( float3 x ) +{ + return saturate((x - 16.0 / 255.0) * 255.0 / 219.0); +} + +// 10-bit should range from 64 to 940 +float3 RGBFullToLimited10bit( float3 x ) +{ + return saturate(x) * 876.0 / 1023.0 + 64.0 / 1023.0; +} + +float3 RGBLimitedToFull10bit( float3 x ) +{ + return saturate((x - 64.0 / 1023.0) * 1023.0 / 876.0); +} + +#define COLOR_FORMAT_LINEAR 0 +#define COLOR_FORMAT_sRGB_FULL 1 +#define COLOR_FORMAT_sRGB_LIMITED 2 +#define COLOR_FORMAT_Rec709_FULL 3 +#define COLOR_FORMAT_Rec709_LIMITED 4 +#define COLOR_FORMAT_HDR10 5 +#define COLOR_FORMAT_TV_DEFAULT COLOR_FORMAT_Rec709_LIMITED +#define COLOR_FORMAT_PC_DEFAULT COLOR_FORMAT_sRGB_FULL + +#define HDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define LDR_COLOR_FORMAT COLOR_FORMAT_LINEAR +#define DISPLAY_PLANE_FORMAT COLOR_FORMAT_PC_DEFAULT + +float3 ApplyDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return ApplySRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RGBFullToLimited10bit(ApplySRGBCurve(x)); + case COLOR_FORMAT_Rec709_FULL: + return ApplyREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RGBFullToLimited10bit(ApplyREC709Curve(x)); + case COLOR_FORMAT_HDR10: + return ApplyREC2084Curve(REC709toREC2020(x)); + }; +} + +float3 RemoveDisplayProfile( float3 x, int DisplayFormat ) +{ + switch (DisplayFormat) + { + default: + case COLOR_FORMAT_LINEAR: + return x; + case COLOR_FORMAT_sRGB_FULL: + return RemoveSRGBCurve(x); + case COLOR_FORMAT_sRGB_LIMITED: + return RemoveSRGBCurve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_Rec709_FULL: + return RemoveREC709Curve(x); + case COLOR_FORMAT_Rec709_LIMITED: + return RemoveREC709Curve(RGBLimitedToFull10bit(x)); + case COLOR_FORMAT_HDR10: + return REC2020toREC709(RemoveREC2084Curve(x)); + }; +} + +float3 ConvertColor( float3 x, int FromFormat, int ToFormat ) +{ + if (FromFormat == ToFormat) + return x; + + return ApplyDisplayProfile(RemoveDisplayProfile(x, FromFormat), ToFormat); +} + +#endif // __SHADER_UTILITY_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/SharpenTAACS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/SharpenTAACS.hlsl new file mode 100644 index 0000000..ddea8b2 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/SharpenTAACS.hlsl @@ -0,0 +1,77 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard + +#include "ShaderUtility.hlsli" +#include "TemporalRS.hlsli" + +Texture2D TemporalColor : register(t0); +RWTexture2D OutColor : register(u0); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +cbuffer InlineConstants : register(b0) +{ + float WA, WB; +} + +#define BORDER_SIZE 1 +#define GROUP_SIZE_X 8 +#define GROUP_SIZE_Y 8 +#define GROUP_SIZE (GROUP_SIZE_X * GROUP_SIZE_Y) +#define TILE_SIZE_X (GROUP_SIZE_X + 2 * BORDER_SIZE) +#define TILE_SIZE_Y (GROUP_SIZE_Y + 2 * BORDER_SIZE) +#define TILE_PIXEL_COUNT (TILE_SIZE_X * TILE_SIZE_Y) + +groupshared float gs_R[TILE_PIXEL_COUNT]; +groupshared float gs_G[TILE_PIXEL_COUNT]; +groupshared float gs_B[TILE_PIXEL_COUNT]; +groupshared float gs_W[TILE_PIXEL_COUNT]; + +float3 LoadSample(uint ldsIndex) +{ + return float3(gs_R[ldsIndex], gs_G[ldsIndex], gs_B[ldsIndex]); +} + +[RootSignature(Temporal_RootSig)] +[numthreads( GROUP_SIZE_X, GROUP_SIZE_Y, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex ) +{ + int2 GroupUL = Gid.xy * uint2(GROUP_SIZE_X, GROUP_SIZE_Y) - BORDER_SIZE; + for (uint i = GI; i < TILE_PIXEL_COUNT; i += GROUP_SIZE) + { + int2 ST = GroupUL + int2(i % TILE_SIZE_X, i / TILE_SIZE_X); + float4 Color = TemporalColor[ST]; + Color.rgb = log2(1.0 + Color.rgb / max(Color.w, 1e-6)); + gs_R[i] = Color.r; + gs_G[i] = Color.g; + gs_B[i] = Color.b; + gs_W[i] = Color.w; + } + + GroupMemoryBarrierWithGroupSync(); + + uint ldsIndex = (GTid.x + BORDER_SIZE) + (GTid.y + BORDER_SIZE) * TILE_SIZE_X; + + float3 Center = LoadSample(ldsIndex); + float3 Neighbors = LoadSample(ldsIndex - 1) + LoadSample(ldsIndex + 1) + + LoadSample(ldsIndex - TILE_SIZE_X) + LoadSample(ldsIndex + TILE_SIZE_X); + + // If the temporal weight is less than 0.5, it might be a brand new pixel. Brand new pixels + // have not been antialiased at all and can be jarring. Here we change the weights to actually + // blur rather than sharpen those pixels. + float TemporalWeight = gs_W[ldsIndex]; + float CenterWeight = TemporalWeight <= 0.5 ? 0.5 : WA; + float LateralWeight = TemporalWeight <= 0.5 ? 0.125 : WB; + + OutColor[DTid.xy] = exp2(max(0, WA * Center - WB * Neighbors)) - 1.0; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl new file mode 100644 index 0000000..220a4c5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsampleGammaPS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define GAMMA_SPACE +#include "SharpeningUpsamplePS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl new file mode 100644 index 0000000..dc20346 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/SharpeningUpsamplePS.hlsl @@ -0,0 +1,57 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +//-------------------------------------------------------------------------------------- +// Simple bicubic filter +// +// http://en.wikipedia.org/wiki/Bicubic_interpolation +// http://http.developer.nvidia.com/GPUGems/gpugems_ch24.html +// +//-------------------------------------------------------------------------------------- + +#include "ShaderUtility.hlsli" +#include "PresentRS.hlsli" + +Texture2D ColorTex : register(t0); +SamplerState BilinearClamp : register(s0); + +cbuffer Constants : register(b0) +{ + float2 UVOffset0; + float2 UVOffset1; + float WA, WB; +} + +float3 GetColor(float2 UV) +{ + float3 Color = ColorTex.SampleLevel(BilinearClamp, UV, 0); +#ifdef GAMMA_SPACE + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#else + return Color; +#endif +} + +[RootSignature(Present_RootSig)] +float3 main(float4 position : SV_Position, float2 uv : TexCoord0) : SV_Target0 +{ + float3 Color = WB * GetColor(uv) - WA * ( + GetColor(uv + UVOffset0) + GetColor(uv - UVOffset0) + + GetColor(uv + UVOffset1) + GetColor(uv - UVOffset1)); + +#ifdef GAMMA_SPACE + return Color; +#else + return ApplyDisplayProfile(Color, DISPLAY_PLANE_FORMAT); +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TemporalBlendCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/TemporalBlendCS.hlsl new file mode 100644 index 0000000..165124e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TemporalBlendCS.hlsl @@ -0,0 +1,207 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TemporalRS.hlsli" +#include "ShaderUtility.hlsli" +#include "PixelPacking_Velocity.hlsli" + +static const uint kLdsPitch = 18; +static const uint kLdsRows = 10; + +RWTexture2D OutTemporal : register(u0); + +Texture2D VelocityBuffer : register(t0); +Texture2D InColor : register(t1); +Texture2D InTemporal : register(t2); +Texture2D CurDepth : register(t3); +Texture2D PreDepth : register(t4); + +SamplerState LinearSampler : register(s0); +SamplerState PointSampler : register(s1); + +groupshared float ldsDepth[kLdsPitch * kLdsRows]; +groupshared float ldsR[kLdsPitch * kLdsRows]; +groupshared float ldsG[kLdsPitch * kLdsRows]; +groupshared float ldsB[kLdsPitch * kLdsRows]; + + +cbuffer CB1 : register(b1) +{ + float2 RcpBufferDim; // 1 / width, 1 / height + float TemporalBlendFactor; + float RcpSpeedLimiter; + float2 ViewportJitter; +} + +void StoreRGB(uint ldsIdx, float3 RGB) +{ + ldsR[ldsIdx] = RGB.r; + ldsG[ldsIdx] = RGB.g; + ldsB[ldsIdx] = RGB.b; +} + +float3 LoadRGB(uint ldsIdx) +{ + return float3(ldsR[ldsIdx], ldsG[ldsIdx], ldsB[ldsIdx]); +} + +float2 STtoUV(float2 ST) +{ + return (ST + 0.5) * RcpBufferDim; +} + +float3 ClipColor(float3 Color, float3 BoxMin, float3 BoxMax, float Dilation = 1.0) +{ + float3 BoxCenter = (BoxMax + BoxMin) * 0.5; + float3 HalfDim = (BoxMax - BoxMin) * 0.5 * Dilation + 0.001; + float3 Displacement = Color - BoxCenter; + float3 Units = abs(Displacement / HalfDim); + float MaxUnit = max(max(Units.x, Units.y), max(Units.z, 1.0)); + return BoxCenter + Displacement / MaxUnit; +} + +void GetBBoxForPair(uint fillIdx, uint holeIdx, out float3 boxMin, out float3 boxMax) +{ + boxMin = boxMax = LoadRGB(fillIdx); + float3 a = LoadRGB(fillIdx - kLdsPitch - 1); + float3 b = LoadRGB(fillIdx - kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(fillIdx + kLdsPitch - 1); + b = LoadRGB(fillIdx + kLdsPitch + 1); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); + a = LoadRGB(holeIdx); + b = LoadRGB(holeIdx - fillIdx + holeIdx); + boxMin = min(boxMin, min(a, b)); + boxMax = max(boxMax, max(a, b)); +} + +float MaxOf(float4 Depths) { return max(max(Depths.x, Depths.y), max(Depths.z, Depths.w)); } + +int2 GetClosestPixel(uint Idx, out float ClosestDepth) +{ + float DepthO = ldsDepth[Idx]; + float DepthW = ldsDepth[Idx - 1]; + float DepthE = ldsDepth[Idx + 1]; + float DepthN = ldsDepth[Idx - kLdsPitch]; + float DepthS = ldsDepth[Idx + kLdsPitch]; + + ClosestDepth = min(DepthO, min(min(DepthW, DepthE), min(DepthN, DepthS))); + + if (DepthN == ClosestDepth) + return int2(0, -1); + else if (DepthS == ClosestDepth) + return int2(0, +1); + else if (DepthW == ClosestDepth) + return int2(-1, 0); + else if (DepthE == ClosestDepth) + return int2(+1, 0); + + return int2(0, 0); +} + +void ApplyTemporalBlend(uint2 ST, uint ldsIdx, float3 BoxMin, float3 BoxMax) +{ + float3 CurrentColor = LoadRGB(ldsIdx); + + float CompareDepth; + + // Get the velocity of the closest pixel in the '+' formation + float3 Velocity = UnpackVelocity(VelocityBuffer[ST + GetClosestPixel(ldsIdx, CompareDepth)]); + + CompareDepth += Velocity.z; + + // The temporal depth is the actual depth of the pixel found at the same reprojected location. + float TemporalDepth = MaxOf(PreDepth.Gather(LinearSampler, STtoUV(ST + Velocity.xy + ViewportJitter))) + 1e-3; + + // Fast-moving pixels cause motion blur and probably don't need TAA + float SpeedFactor = saturate(1.0 - length(Velocity.xy) * RcpSpeedLimiter); + + // Fetch temporal color. Its "confidence" weight is stored in alpha. + float4 Temp = InTemporal.SampleLevel(LinearSampler, STtoUV(ST + Velocity.xy), 0); + float3 TemporalColor = Temp.rgb; + float TemporalWeight = Temp.w; + + // Pixel colors are pre-multiplied by their weight to enable bilinear filtering. Divide by weight to recover color. + TemporalColor /= max(TemporalWeight, 1e-6); + + // Clip the temporal color to the current neighborhood's bounding box. Increase the size of the bounding box for + // stationary pixels to avoid rejecting noisy specular highlights. + TemporalColor = ClipColor(TemporalColor, BoxMin, BoxMax, lerp(1.0, 4.0, SpeedFactor * SpeedFactor)); + + // Update the confidence term based on speed and disocclusion + TemporalWeight *= SpeedFactor * step(CompareDepth, TemporalDepth); + + // Blend previous color with new color based on confidence. Confidence steadily grows with each iteration + // until it is broken by movement such as through disocclusion, color changes, or moving beyond the resolution + // of the velocity buffer. + TemporalColor = ITM(lerp(TM(CurrentColor), TM(TemporalColor), TemporalWeight)); + + // Update weight + TemporalWeight = saturate(rcp(2.0 - TemporalWeight)); + + // Quantize weight to what is representable + TemporalWeight = f16tof32(f32tof16(TemporalWeight)); + + // Breaking this up into two buffers means it can be 40 bits instead of 64. + OutTemporal[ST] = float4(TemporalColor, 1) * TemporalWeight; +} + +[RootSignature(Temporal_RootSig)] +[numthreads(8, 8, 1)] +void main(uint3 DTid : SV_DispatchThreadID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 Gid : SV_GroupID) +{ + const uint ldsHalfPitch = kLdsPitch / 2; + + // Prefetch an 16x8 tile of pixels (8x8 colors) including a 1 pixel border + // 10x18 IDs with 4 IDs per thread = 45 threads + for (uint i = GI; i < 45; i += 64) + { + uint X = (i % ldsHalfPitch) * 2; + uint Y = (i / ldsHalfPitch) * 2; + uint TopLeftIdx = X + Y * kLdsPitch; + int2 TopLeftST = Gid.xy * uint2(8, 8) - 1 + uint2(X / 2, Y); + float2 UV = RcpBufferDim * (TopLeftST * float2(2, 1) + float2(2, 1)); + + float4 Depths = CurDepth.Gather(LinearSampler, UV); + ldsDepth[TopLeftIdx + 0] = Depths.w; + ldsDepth[TopLeftIdx + 1] = Depths.z; + ldsDepth[TopLeftIdx + kLdsPitch] = Depths.x; + ldsDepth[TopLeftIdx + 1 + kLdsPitch] = Depths.y; + + float4 R4 = InColor.GatherRed(LinearSampler, UV); + float4 G4 = InColor.GatherGreen(LinearSampler, UV); + float4 B4 = InColor.GatherBlue(LinearSampler, UV); + StoreRGB(TopLeftIdx, float3(R4.w, G4.w, B4.w)); + StoreRGB(TopLeftIdx + 1, float3(R4.z, G4.z, B4.z)); + StoreRGB(TopLeftIdx + kLdsPitch, float3(R4.x, G4.x, B4.x)); + StoreRGB(TopLeftIdx + 1 + kLdsPitch, float3(R4.y, G4.y, B4.y)); + } + + GroupMemoryBarrierWithGroupSync(); + + uint Idx0 = GTid.x * 2 + GTid.y * kLdsPitch + kLdsPitch + 1; + uint Idx1 = Idx0 + 1; + + GroupMemoryBarrierWithGroupSync(); + + float3 BoxMin, BoxMax; + GetBBoxForPair(Idx0, Idx1, BoxMin, BoxMax); + + uint2 ST0 = DTid.xy * uint2(2, 1); + ApplyTemporalBlend(ST0, Idx0, BoxMin, BoxMax); + + uint2 ST1 = ST0 + uint2(1, 0); + ApplyTemporalBlend(ST1, Idx1, BoxMin, BoxMax); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TemporalRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/TemporalRS.hlsli new file mode 100644 index 0000000..88981dd --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TemporalRS.hlsli @@ -0,0 +1,32 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Temporal_RootSig \ + "RootFlags(0), " \ + "RootConstants(b0, num32BitConstants = 4)," \ + "DescriptorTable(SRV(t0, numDescriptors = 10))," \ + "DescriptorTable(UAV(u0, numDescriptors = 10))," \ + "CBV(b1), " \ + "StaticSampler(s0," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)," \ + "StaticSampler(s1," \ + "addressU = TEXTURE_ADDRESS_BORDER," \ + "addressV = TEXTURE_ADDRESS_BORDER," \ + "addressW = TEXTURE_ADDRESS_BORDER," \ + "borderColor = STATIC_BORDER_COLOR_TRANSPARENT_BLACK," \ + "filter = FILTER_MIN_MAG_MIP_POINT)" + diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TextAntialiasPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/TextAntialiasPS.hlsl new file mode 100644 index 0000000..b346a1e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TextAntialiasPS.hlsl @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * HeightRange + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + return float4(Color.rgb, 1) * GetAlpha(Input.uv) * Color.a; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TextRS.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/TextRS.hlsli new file mode 100644 index 0000000..e02f042 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TextRS.hlsli @@ -0,0 +1,23 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define Text_RootSig \ + "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \ + "CBV(b0, visibility = SHADER_VISIBILITY_VERTEX)," \ + "CBV(b0, visibility = SHADER_VISIBILITY_PIXEL)," \ + "DescriptorTable(SRV(t0, numDescriptors = 1), visibility = SHADER_VISIBILITY_PIXEL)," \ + "StaticSampler(s0, visibility = SHADER_VISIBILITY_PIXEL," \ + "addressU = TEXTURE_ADDRESS_CLAMP," \ + "addressV = TEXTURE_ADDRESS_CLAMP," \ + "addressW = TEXTURE_ADDRESS_CLAMP," \ + "filter = FILTER_MIN_MAG_MIP_LINEAR)" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TextShadowPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/TextShadowPS.hlsl new file mode 100644 index 0000000..4226362 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TextShadowPS.hlsl @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float4 Color; + float2 ShadowOffset; + float ShadowHardness; + float ShadowOpacity; + float HeightRange; // The range of the signed distance field. +} + +Texture2D SignedDistanceFieldTex : register( t0 ); +SamplerState LinearSampler : register( s0 ); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +float GetAlpha( float2 uv, float range ) +{ + return saturate(SignedDistanceFieldTex.Sample(LinearSampler, uv) * range + 0.5); +} + +[RootSignature(Text_RootSig)] +float4 main( PS_INPUT Input ) : SV_Target +{ + float alpha1 = GetAlpha(Input.uv, HeightRange) * Color.a; + float alpha2 = GetAlpha(Input.uv - ShadowOffset, HeightRange * ShadowHardness) * ShadowOpacity * Color.a; + return float4( Color.rgb * alpha1, lerp(alpha2, 1, alpha1) ); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/TextVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/TextVS.hlsl new file mode 100644 index 0000000..e43bc3a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/TextVS.hlsl @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "TextRS.hlsli" + +cbuffer cbFontParams : register(b0) +{ + float2 Scale; // Scale and offset for transforming coordinates + float2 Offset; + float2 InvTexDim; // Normalizes texture coordinates + float TextSize; // Height of text in destination pixels + float TextScale; // TextSize / FontHeight + float DstBorder; // Extra space around a glyph measured in screen space coordinates + uint SrcBorder; // Extra spacing around glyphs to avoid sampling neighboring glyphs +} + +struct VS_INPUT +{ + float2 ScreenPos : POSITION; // Upper-left position in screen pixel coordinates + uint4 Glyph : TEXCOORD; // X, Y, Width, Height in texel space +}; + +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; // Upper-left and lower-right coordinates in clip space + float2 Tex : TEXCOORD0; // Upper-left and lower-right normalized UVs +}; + +[RootSignature(Text_RootSig)] +VS_OUTPUT main( VS_INPUT input, uint VertID : SV_VertexID ) +{ + const float2 xy0 = input.ScreenPos - DstBorder; + const float2 xy1 = input.ScreenPos + DstBorder + float2(TextScale * input.Glyph.z, TextSize); + const uint2 uv0 = input.Glyph.xy - SrcBorder; + const uint2 uv1 = input.Glyph.xy + SrcBorder + input.Glyph.zw; + + float2 uv = float2( VertID & 1, (VertID >> 1) & 1 ); + + VS_OUTPUT output; + output.Pos = float4( lerp(xy0, xy1, uv) * Scale + Offset, 0, 1 ); + output.Tex = lerp(uv0, uv1, uv) * InvTexDim; + return output; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ToneMap2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMap2CS.hlsl new file mode 100644 index 0000000..ea10d02 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMap2CS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapCS.hlsl new file mode 100644 index 0000000..a3150d7 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapCS.hlsl @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "ToneMappingUtility.hlsli" +#include "PostEffectsRS.hlsli" +#include "PixelPacking.hlsli" + +StructuredBuffer Exposure : register( t0 ); +Texture2D Bloom : register( t1 ); +#if SUPPORT_TYPED_UAV_LOADS +RWTexture2D ColorRW : register( u0 ); +#else +RWTexture2D DstColor : register( u0 ); +Texture2D SrcColor : register( t2 ); +#endif +RWTexture2D OutLuma : register( u1 ); +SamplerState LinearSampler : register( s0 ); + +cbuffer CB0 : register(b0) +{ + float2 g_RcpBufferDim; + float g_BloomStrength; +}; + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float2 TexCoord = (DTid.xy + 0.5) * g_RcpBufferDim; + + // Load HDR and bloom +#if SUPPORT_TYPED_UAV_LOADS + float3 hdrColor = ColorRW[DTid.xy]; +#else + float3 hdrColor = SrcColor[DTid.xy]; +#endif + + hdrColor += g_BloomStrength * Bloom.SampleLevel(LinearSampler, TexCoord, 0); + hdrColor *= Exposure[0]; + +#if ENABLE_HDR_DISPLAY_MAPPING + + // Write the HDR color as-is and defer display mapping until we composite with UI +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = hdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(hdrColor); +#endif + OutLuma[DTid.xy] = LinearToLogLuminance(ToneMapLuma(RGBToLuminance(hdrColor))); + +#else + + // Tone map to SDR + float3 sdrColor = TM_Stanard(hdrColor); + +#if SUPPORT_TYPED_UAV_LOADS + ColorRW[DTid.xy] = sdrColor; +#else + DstColor[DTid.xy] = Pack_R11G11B10_FLOAT(sdrColor); +#endif + OutLuma[DTid.xy] = RGBToLogLuminance(sdrColor); + +#endif +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDR2CS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDR2CS.hlsl new file mode 100644 index 0000000..df502ce --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDR2CS.hlsl @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#define SUPPORT_TYPED_UAV_LOADS 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDRCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDRCS.hlsl new file mode 100644 index 0000000..bd4cb27 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMapHDRCS.hlsl @@ -0,0 +1,15 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#define ENABLE_HDR_DISPLAY_MAPPING 1 +#include "ToneMapCS.hlsl" diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/ToneMappingUtility.hlsli b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMappingUtility.hlsli new file mode 100644 index 0000000..e193236 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/ToneMappingUtility.hlsli @@ -0,0 +1,130 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#ifndef __TONE_MAPPING_UTILITY_HLSLI__ +#define __TONE_MAPPING_UTILITY_HLSLI__ + +#include "ShaderUtility.hlsli" + +// +// Reinhard +// + +// The Reinhard tone operator. Typically, the value of k is 1.0, but you can adjust exposure by 1/k. +// I.e. TM_Reinhard(x, 0.5) == TM_Reinhard(x * 2.0, 1.0) +float3 TM_Reinhard(float3 hdr, float k = 1.0) +{ + return hdr / (hdr + k); +} + +// The inverse of Reinhard +float3 ITM_Reinhard(float3 sdr, float k = 1.0) +{ + return k * sdr / (k - sdr); +} + +// +// Reinhard-Squared +// + +// This has some nice properties that improve on basic Reinhard. Firstly, it has a "toe"--that nice, +// parabolic upswing that enhances contrast and color saturation in darks. Secondly, it has a long +// shoulder giving greater detail in highlights and taking longer to desaturate. It's invertible, scales +// to HDR displays, and is easy to control. +// +// The default constant of 0.25 was chosen for two reasons. It maps closely to the effect of Reinhard +// with a constant of 1.0. And with a constant of 0.25, there is an inflection point at 0.25 where the +// curve touches the line y=x and then begins the shoulder. +// +// Note: If you are currently using ACES and you pre-scale by 0.6, then k=0.30 looks nice as an alternative +// without any other adjustments. + +float3 TM_ReinhardSq(float3 hdr, float k = 0.25) +{ + float3 reinhard = hdr / (hdr + k); + return reinhard * reinhard; +} + +float3 ITM_ReinhardSq(float3 sdr, float k = 0.25) +{ + return k * (sdr + sqrt(sdr)) / (1.0 - sdr); +} + +// +// Stanard (New) +// + +// This is the new tone operator. It resembles ACES in many ways, but it is simpler to evaluate with ALU. One +// advantage it has over Reinhard-Squared is that the shoulder goes to white more quickly and gives more overall +// brightness and contrast to the image. + +float3 TM_Stanard(float3 hdr) +{ + return TM_Reinhard(hdr * sqrt(hdr), sqrt(4.0 / 27.0)); +} + +float3 ITM_Stanard(float3 sdr) +{ + return pow(ITM_Reinhard(sdr, sqrt(4.0 / 27.0)), 2.0 / 3.0); +} + +// +// Stanard (Old) +// + +// This is the old tone operator first used in HemiEngine and then MiniEngine. It's simplistic, efficient, +// invertible, and gives nice results, but it has no toe, and the shoulder goes to white fairly quickly. +// +// Note that I removed the distinction between tone mapping RGB and tone mapping Luma. Philosophically, I +// agree with the idea of trying to remap brightness to displayable values while preserving hue. But you +// run into problems where one or more color channels end up brighter than 1.0 and get clipped. + +float3 ToneMap( float3 hdr ) +{ + return 1 - exp2(-hdr); +} + +float3 InverseToneMap(float3 sdr) +{ + return -log2(max(1e-6, 1 - sdr)); +} + +float ToneMapLuma( float luma ) +{ + return 1 - exp2(-luma); +} + +float InverseToneMapLuma(float luma) +{ + return -log2(max(1e-6, 1 - luma)); +} + +// +// ACES +// + +// The next generation of filmic tone operators. + +float3 ToneMapACES( float3 hdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return saturate((hdr * (A * hdr + B)) / (hdr * (C * hdr + D) + E)); +} + +float3 InverseToneMapACES( float3 sdr ) +{ + const float A = 2.51, B = 0.03, C = 2.43, D = 0.59, E = 0.14; + return 0.5 * (D * sdr - sqrt(((D*D - 4*C*E) * sdr + 4*A*E-2*B*D) * sdr + B*B) - B) / (A - C * sdr); +} + +#endif // __TONE_MAPPING_UTILITY_HLSLI__ diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl new file mode 100644 index 0000000..07402aa --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/UpsampleAndBlurCS.hlsl @@ -0,0 +1,158 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// The CS for combining a lower resolution bloom buffer with a higher resolution buffer +// (via bilinear upsampling) and then guassian blurring the resultant buffer. +// +// For the intended bloom blurring algorithm, it is expected that this shader will be +// used repeatedly to upsample and blur successively higher resolutions until the final +// bloom buffer is the destination. +// + +#include "PostEffectsRS.hlsli" + +Texture2D HigherResBuf : register( t0 ); +Texture2D LowerResBuf : register( t1 ); +SamplerState LinearBorder : register( s1 ); +RWTexture2D Result : register( u0 ); + +cbuffer cb0 : register(b0) +{ + float2 g_inverseDimensions; + float g_upsampleBlendFactor; +} + +// The guassian blur weights (derived from Pascal's triangle) +static const float Weights5[3] = { 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f }; +static const float Weights7[4] = { 20.0f / 64.0f, 15.0f / 64.0f, 6.0f / 64.0f, 1.0f / 64.0f }; +static const float Weights9[5] = { 70.0f / 256.0f, 56.0f / 256.0f, 28.0f / 256.0f, 8.0f / 256.0f, 1.0f / 256.0f }; + +float3 Blur5( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights5[0]*e + Weights5[1]*(d+f) + Weights5[2]*(c+g); +} + +float3 Blur7( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights7[0]*e + Weights7[1]*(d+f) + Weights7[2]*(c+g) + Weights7[3]*(b+h); +} + +float3 Blur9( float3 a, float3 b, float3 c, float3 d, float3 e, float3 f, float3 g, float3 h, float3 i ) +{ + return Weights9[0]*e + Weights9[1]*(d+f) + Weights9[2]*(c+g) + Weights9[3]*(b+h) + Weights9[4]*(a+i); +} + +#define BlurPixels Blur9 + +// 16x16 pixels with an 8x8 center that we will be blurring writing out. Each uint is two color channels packed together +groupshared uint CacheR[128]; +groupshared uint CacheG[128]; +groupshared uint CacheB[128]; + +void Store2Pixels( uint index, float3 pixel1, float3 pixel2 ) +{ + CacheR[index] = f32tof16(pixel1.r) | f32tof16(pixel2.r) << 16; + CacheG[index] = f32tof16(pixel1.g) | f32tof16(pixel2.g) << 16; + CacheB[index] = f32tof16(pixel1.b) | f32tof16(pixel2.b) << 16; +} + +void Load2Pixels( uint index, out float3 pixel1, out float3 pixel2 ) +{ + uint3 RGB = uint3(CacheR[index], CacheG[index], CacheB[index]); + pixel1 = f16tof32(RGB); + pixel2 = f16tof32(RGB >> 16); +} + +void Store1Pixel( uint index, float3 pixel ) +{ + CacheR[index] = asuint(pixel.r); + CacheG[index] = asuint(pixel.g); + CacheB[index] = asuint(pixel.b); +} + +void Load1Pixel( uint index, out float3 pixel ) +{ + pixel = asfloat( uint3(CacheR[index], CacheG[index], CacheB[index]) ); +} + +// Blur two pixels horizontally. This reduces LDS reads and pixel unpacking. +void BlurHorizontally( uint outIndex, uint leftMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + Load2Pixels( leftMostIndex + 0, s0, s1 ); + Load2Pixels( leftMostIndex + 1, s2, s3 ); + Load2Pixels( leftMostIndex + 2, s4, s5 ); + Load2Pixels( leftMostIndex + 3, s6, s7 ); + Load2Pixels( leftMostIndex + 4, s8, s9 ); + + Store1Pixel(outIndex , BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8)); + Store1Pixel(outIndex+1, BlurPixels(s1, s2, s3, s4, s5, s6, s7, s8, s9)); +} + +void BlurVertically( uint2 pixelCoord, uint topMostIndex ) +{ + float3 s0, s1, s2, s3, s4, s5, s6, s7, s8; + Load1Pixel( topMostIndex , s0 ); + Load1Pixel( topMostIndex+ 8, s1 ); + Load1Pixel( topMostIndex+16, s2 ); + Load1Pixel( topMostIndex+24, s3 ); + Load1Pixel( topMostIndex+32, s4 ); + Load1Pixel( topMostIndex+40, s5 ); + Load1Pixel( topMostIndex+48, s6 ); + Load1Pixel( topMostIndex+56, s7 ); + Load1Pixel( topMostIndex+64, s8 ); + + Result[pixelCoord] = BlurPixels(s0, s1, s2, s3, s4, s5, s6, s7, s8); +} + +[RootSignature(PostEffects_RootSig)] +[numthreads( 8, 8, 1 )] +void main( uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID ) +{ + // + // Load 4 pixels per thread into LDS + // + int2 GroupUL = (Gid.xy << 3) - 4; // Upper-left pixel coordinate of group read location + int2 ThreadUL = (GTid.xy << 1) + GroupUL; // Upper-left pixel coordinate of quad that this thread will read + + // + // Store 4 blended-but-unblurred pixels in LDS + // + float2 uvUL = (float2(ThreadUL) + 0.5) * g_inverseDimensions; + float2 uvLR = uvUL + g_inverseDimensions; + float2 uvUR = float2(uvLR.x, uvUL.y); + float2 uvLL = float2(uvUL.x, uvLR.y); + int destIdx = GTid.x + (GTid.y << 4); + + float3 pixel1a = lerp(HigherResBuf[ThreadUL + uint2(0, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUL, 0.0f), g_upsampleBlendFactor); + float3 pixel1b = lerp(HigherResBuf[ThreadUL + uint2(1, 0)], LowerResBuf.SampleLevel(LinearBorder, uvUR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+0, pixel1a, pixel1b); + + float3 pixel2a = lerp(HigherResBuf[ThreadUL + uint2(0, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLL, 0.0f), g_upsampleBlendFactor); + float3 pixel2b = lerp(HigherResBuf[ThreadUL + uint2(1, 1)], LowerResBuf.SampleLevel(LinearBorder, uvLR, 0.0f), g_upsampleBlendFactor); + Store2Pixels(destIdx+8, pixel2a, pixel2b); + + GroupMemoryBarrierWithGroupSync(); + + // + // Horizontally blur the pixels in Cache + // + uint row = GTid.y << 4; + BlurHorizontally(row + (GTid.x << 1), row + GTid.x + (GTid.x & 4)); + + GroupMemoryBarrierWithGroupSync(); + + // + // Vertically blur the pixels and write the result to memory + // + BlurVertically(DTid.xy, (GTid.y << 3) + GTid.x); +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/LightingUtil.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/LightingUtil.hlsl new file mode 100644 index 0000000..e3d0b9d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/LightingUtil.hlsl @@ -0,0 +1,182 @@ +//*************************************************************************************** +// LightingUtil.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Contains API for shader lighting. +//*************************************************************************************** + +#define MaxLights 16 + +struct Light +{ + float3 Strength; + float FalloffStart; // point/spot light only + float3 Direction; // directional/spot light only + float FalloffEnd; // point/spot light only + float3 Position; // point light only + float SpotPower; // spot light only +}; + +struct Material +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Shininess; +}; + +float CalcAttenuation(float d, float falloffStart, float falloffEnd) +{ + // Linear falloff. + return saturate((falloffEnd-d) / (falloffEnd - falloffStart)); +} + +// Schlick gives an approximation to Fresnel reflectance (see pg. 233 "Real-Time Rendering 3rd Ed."). +// R0 = ( (n-1)/(n+1) )^2, where n is the index of refraction. +float3 SchlickFresnel(float3 R0, float3 normal, float3 lightVec) +{ + float cosIncidentAngle = saturate(dot(normal, lightVec)); + + float f0 = 1.0f - cosIncidentAngle; + float3 reflectPercent = R0 + (1.0f - R0)*(f0*f0*f0*f0*f0); + + return reflectPercent; +} + +float3 BlinnPhong(float3 lightStrength, float3 lightVec, float3 normal, float3 toEye, Material mat) +{ + const float m = mat.Shininess * 256.0f; + float3 halfVec = normalize(toEye + lightVec); + + float roughnessFactor = (m + 8.0f)*pow(max(dot(halfVec, normal), 0.0f), m) / 8.0f; + + // ��ͨ�� +// if (roughnessFactor <= 0.1) roughnessFactor = 0.0; +// else if (roughnessFactor <= 0.8) roughnessFactor = 0.5; +// else roughnessFactor = 0.8; + + float3 fresnelFactor = SchlickFresnel(mat.FresnelR0, halfVec, lightVec); + + float3 specAlbedo = fresnelFactor*roughnessFactor; + + // Our spec formula goes outside [0,1] range, but we are + // doing LDR rendering. So scale it down a bit. + specAlbedo = specAlbedo / (specAlbedo + 1.0f); + + return (mat.DiffuseAlbedo.rgb + specAlbedo) * lightStrength; +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for directional lights. +//--------------------------------------------------------------------------------------- +float3 ComputeDirectionalLight(Light L, Material mat, float3 normal, float3 toEye) +{ + // The light vector aims opposite the direction the light rays travel. + float3 lightVec = -L.Direction; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + + // ��ͨ�� +// if (ndotl <= 0.0) ndotl = 0.4; +// else if (ndotl <= 0.5) ndotl = 0.6; +// else ndotl = 1.0; + + float3 lightStrength = L.Strength * ndotl; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for point lights. +//--------------------------------------------------------------------------------------- +float3 ComputePointLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +//--------------------------------------------------------------------------------------- +// Evaluates the lighting equation for spot lights. +//--------------------------------------------------------------------------------------- +float3 ComputeSpotLight(Light L, Material mat, float3 pos, float3 normal, float3 toEye) +{ + // The vector from the surface to the light. + float3 lightVec = L.Position - pos; + + // The distance from surface to light. + float d = length(lightVec); + + // Range test. + if(d > L.FalloffEnd) + return 0.0f; + + // Normalize the light vector. + lightVec /= d; + + // Scale light down by Lambert's cosine law. + float ndotl = max(dot(lightVec, normal), 0.0f); + float3 lightStrength = L.Strength * ndotl; + + // Attenuate light by distance. + float att = CalcAttenuation(d, L.FalloffStart, L.FalloffEnd); + lightStrength *= att; + + // Scale by spotlight + float spotFactor = pow(max(dot(-lightVec, L.Direction), 0.0f), L.SpotPower); + lightStrength *= spotFactor; + + return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); +} + +float4 ComputeLighting(Light gLights[MaxLights], Material mat, + float3 pos, float3 normal, float3 toEye, + float3 shadowFactor) +{ + float3 result = 0.0f; + + int i = 0; + +#if (NUM_DIR_LIGHTS > 0) + for(i = 0; i < NUM_DIR_LIGHTS; ++i) + { + result += shadowFactor[i] * ComputeDirectionalLight(gLights[i], mat, normal, toEye); + } +#endif + +#if (NUM_POINT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS+NUM_POINT_LIGHTS; ++i) + { + result += ComputePointLight(gLights[i], mat, pos, normal, toEye); + } +#endif + +#if (NUM_SPOT_LIGHTS > 0) + for(i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i) + { + result += ComputeSpotLight(gLights[i], mat, pos, normal, toEye); + } +#endif + + return float4(result, 0.0f); +} + + diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierDS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierDS.hlsl new file mode 100644 index 0000000..012a15e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierDS.hlsl @@ -0,0 +1,87 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 16�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 16 + +float4 BernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(invT * invT * invT, + 3.0f * t * invT * invT, + 3.0f * t * t * invT, + t * t * t); +} + +float3 CubicBezierSum(const OutputPatch bezpatch, float4 basisU, float4 basisV) +{ + float3 sum = float3(0.0f, 0.0f, 0.0f); + sum = basisV.x * (basisU.x * bezpatch[0].vPosition + basisU.y * bezpatch[1].vPosition + basisU.z * bezpatch[2].vPosition + basisU.w * bezpatch[3].vPosition); + sum += basisV.y * (basisU.x * bezpatch[4].vPosition + basisU.y * bezpatch[5].vPosition + basisU.z * bezpatch[6].vPosition + basisU.w * bezpatch[7].vPosition); + sum += basisV.z * (basisU.x * bezpatch[8].vPosition + basisU.y * bezpatch[9].vPosition + basisU.z * bezpatch[10].vPosition + basisU.w * bezpatch[11].vPosition); + sum += basisV.w * (basisU.x * bezpatch[12].vPosition + basisU.y * bezpatch[13].vPosition + basisU.z * bezpatch[14].vPosition + basisU.w * bezpatch[15].vPosition); + + return sum; +} + +float4 dBernsteinBasis(float t) +{ + float invT = 1.0f - t; + + return float4(-3 * invT * invT, + 3 * invT * invT - 6 * t * invT, + 6 * t * invT - 3 * t * t, + 3 * t * t); +} + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��16���� +{ + DS_OUTPUT Output; + + float4 basisU = BernsteinBasis(domain.x); + float4 basisV = BernsteinBasis(domain.y); + + float3 p = CubicBezierSum(patch, basisU, basisV); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierHS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierHS.hlsl new file mode 100644 index 0000000..65732da --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierHS.hlsl @@ -0,0 +1,58 @@ +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = 25; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(16)] // ���16������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/bezierVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardGS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardGS.hlsl new file mode 100644 index 0000000..b7c9591 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardGS.hlsl @@ -0,0 +1,92 @@ +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float3 CenterW : POSITION; + float2 SizeW : SIZE; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +[maxvertexcount(4)] +void main( + point VertexOut gin[1], + uint primID : SV_PrimitiveID, + inout TriangleStream< GeoOut > triStream +) +{ + // ����up���� + float3 up = float3(0.0f, 1.0f, 0.0f); + // ����Ŀ��㵽�۲������� + float3 look = gEyePosW - gin[0].CenterW; + // ��֤Ŀ���͹۲����ͨһ��xzƽ�� + look.y = 0.0f; + // ��׼�� + look = normalize(look); + // ���������� + float3 right = cross(up, look); + + // ���㹫������Ŀ��͸� + float halfWidth = 0.5f * gin[0].SizeW.x; + float halfHeight = 0.5f * gin[0].SizeW.y; + + // ��������4������ + float4 v[4]; + v[0] = float4(gin[0].CenterW + halfWidth * right - halfHeight * up, 1.0f); + v[1] = float4(gin[0].CenterW + halfWidth * right + halfHeight * up, 1.0f); + v[2] = float4(gin[0].CenterW - halfWidth * right - halfHeight * up, 1.0f); + v[3] = float4(gin[0].CenterW - halfWidth * right + halfHeight * up, 1.0f); + + // �ĸ����Ӧ���������� + float2 texC[4] = + { + float2(0.0f, 1.0f), + float2(0.0f, 0.0f), + float2(1.0f, 1.0f), + float2(1.0f, 0.0f) + }; + + // ���ͼԴ + GeoOut gout; + [unroll] + for (int i = 0; i < 4; ++i) + { + gout.PosH = mul(v[i], gViewProj); // ��������������ϵת��ͶӰ����ϵ + gout.PosW = v[i].xyz; // ������������� + gout.NormalW = look; // ����ķ����� + gout.TexC = texC[i]; // ��������� + gout.PrimID = primID; // �ö�������ɵ����ID + + triStream.Append(gout); + } +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardPS.hlsl new file mode 100644 index 0000000..3d90bd6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardPS.hlsl @@ -0,0 +1,108 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2DArray gTreeMapArray : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + +struct GeoOut +{ + float4 PosH : SV_POSITION; // ������������ + float3 PosW : POSITION; // ������������� + float3 NormalW : NORMAL; // ��������編���� + float2 TexC : TEXCOORD; // ������������� + uint PrimID : SV_PrimitiveID; // ����ID +}; + +float4 main(GeoOut pin) : SV_Target0 +{ + float3 uvw = float3(pin.TexC, pin.PrimID % 3); + float4 diffuseAlbedo = gTreeMapArray.Sample(gsamAnisotropicWrap, uvw) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardVS.hlsl new file mode 100644 index 0000000..7d58ca0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/billboardVS.hlsl @@ -0,0 +1,22 @@ +struct VertexIn +{ + float3 PosW : POSITION; // ������������� + float2 SizeW : SIZE; // ����Ŀ��� +}; + +struct VertexOut +{ + float3 CenterW : POSITION; // ���ĵ���������� + float2 SizeW : SIZE; // ���� +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout; + + // ����ֱ�Ӵ���������ɫ�� + vout.CenterW = vin.PosW; + vout.SizeW = vin.SizeW; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/blurHorzCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/blurHorzCS.hlsl new file mode 100644 index 0000000..d1466cc --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/blurHorzCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(N, 1, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.x < gBlurRadius) + { + // ���������磬�Ͳ��ñ�Ե��ֵ��� + int x = max(dispatchThreadID.x - gBlurRadius, 0); + gCache[groupThreadID.x] = gInput[int2(x, dispatchThreadID.y)]; + } + if (groupThreadID.x >= N - gBlurRadius) + { + // �ұ�������磬�Ͳ��ñ�Ե��ֵ��� + int x = min(dispatchThreadID.x + gBlurRadius, gInput.Length.x - 1); + gCache[groupThreadID.x + 2 * gBlurRadius] = gInput[int2(x, dispatchThreadID.y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.x + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.x + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/blurVertCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/blurVertCS.hlsl new file mode 100644 index 0000000..ab2798f --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/blurVertCS.hlsl @@ -0,0 +1,74 @@ +//============================================================================= +// Performs a separable Guassian blur with a blur radius up to 5 pixels. +//============================================================================= + +cbuffer cbSettings : register(b0) +{ + // ģ���뾶 + int gBlurRadius; + + // ���֧��һ��11������Ȩ�� + float w0; + float w1; + float w2; + float w3; + float w4; + float w5; + float w6; + float w7; + float w8; + float w9; + float w10; +}; + +// ���֧�ֵ�ģ���뾶=5 +static const int gMaxBlurRadius = 5; + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +// Ϊ�˱�֤����������ͳһ��Ҳ����ÿ�ζ��ܼ���gBlurRadius*2+1��Ȩ�� +// gCache�ij�����Ҫλ���߳�������������+gBlurRadius*2 +// ������Ե��ģ��Ҳ��ͳһ���� +#define N 256 +#define CacheSize (N + 2*gMaxBlurRadius) +groupshared float4 gCache[CacheSize]; + +[numthreads(1, N, 1)] +void main(int3 groupThreadID : SV_GroupThreadID, + int3 dispatchThreadID : SV_DispatchThreadID) +{ + // ��¼Ȩ��ֵ + float weights[11] = { w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10 }; + + if (groupThreadID.y < gBlurRadius) + { + // �ϱ߱�������磬�Ͳ��ñ�Ե��ֵ��� + int y = max(dispatchThreadID.y - gBlurRadius, 0); + gCache[groupThreadID.y] = gInput[int2(dispatchThreadID.x, y)]; + } + if (groupThreadID.y >= N - gBlurRadius) + { + // �±�������磬�Ͳ��ñ�Ե��ֵ��� + int y = min(dispatchThreadID.y + gBlurRadius, gInput.Length.y - 1); + gCache[groupThreadID.y + 2 * gBlurRadius] = gInput[int2(dispatchThreadID.x, y)]; + } + + // ÿ���߳���̶�����N���̣߳�����N�����أ��п������ز���������Ҳ��Ҫ������ + gCache[groupThreadID.y + gBlurRadius] = gInput[min(dispatchThreadID.xy, gInput.Length.xy - 1)]; + + // �ȴ������߳̽�����Ҳ����gCache����˶�Ӧ������ + GroupMemoryBarrierWithGroupSync(); + + // ���ݴ����Ȩ�أ��������ֵ + float4 blurColor = float4(0, 0, 0, 0); + + for (int i = -gBlurRadius; i <= gBlurRadius; ++i) + { + int k = groupThreadID.y + gBlurRadius + i; + + blurColor += weights[i + gBlurRadius] * gCache[k]; + } + + gOutput[dispatchThreadID.xy] = blurColor; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/common.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/common.hlsl new file mode 100644 index 0000000..40e4570 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/common.hlsl @@ -0,0 +1,20 @@ +//--------------------------------------------------------------------------------------- +// Transforms a normal map sample to world space. +//--------------------------------------------------------------------------------------- +float3 NormalSampleToWorldSpace(float3 normalMapSample, float3 unitNormalW, float3 tangentW) +{ + // Uncompress each component from [0,1] to [-1,1]. + float3 normalT = 2.0f * normalMapSample - 1.0f; + + // Build orthonormal basis. + float3 N = unitNormalW; + float3 T = normalize(tangentW - dot(tangentW, N) * N); + float3 B = cross(N, T); + + float3x3 TBN = float3x3(T, B, N); + + // Transform from tangent space to world space. + float3 bumpedNormalW = mul(normalT, TBN); + + return bumpedNormalW; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/compositeCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/compositeCS.hlsl new file mode 100644 index 0000000..aa64420 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/compositeCS.hlsl @@ -0,0 +1,9 @@ +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +[numthreads(256, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // ������� + gOutput[DTid.xy] = gOutput[DTid.xy] * gInput[DTid.xy]; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultPS.hlsl new file mode 100644 index 0000000..74503dd --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultPS.hlsl @@ -0,0 +1,107 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" + +Texture2D gDiffuseMap : register(t0); + +SamplerState gsamAnisotropicWrap : register(s0); + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +// Constant data that varies per material. +cbuffer cbMaterial : register(b2) +{ + float4 gDiffuseAlbedo; + float3 gFresnelR0; + float gPad; + float gRoughness; +}; + + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo; + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Interpolating normal can unnormalize it, so renormalize it. + pin.NormalW = normalize(pin.NormalW); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + const float shininess = 1.0f - gRoughness; + Material mat = { diffuseAlbedo, gFresnelR0, shininess }; + float3 shadowFactor = 1.0f; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + pin.NormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultVS.hlsl new file mode 100644 index 0000000..4033797 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/defaultVS.hlsl @@ -0,0 +1,47 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl new file mode 100644 index 0000000..a18d881 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultPS.hlsl @@ -0,0 +1,187 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +// Defaults for number of lights. +#ifndef NUM_DIR_LIGHTS +#define NUM_DIR_LIGHTS 3 +#endif + +#ifndef NUM_POINT_LIGHTS +#define NUM_POINT_LIGHTS 0 +#endif + +#ifndef NUM_SPOT_LIGHTS +#define NUM_SPOT_LIGHTS 0 +#endif + +// Include structures and functions for lighting. +#include "LightingUtil.hlsl" +#include "common.hlsl" + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; // ����ID + uint NormalMapIndex; // ������ͼ��ID + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t0); + +// ռ��t1-t7 +Texture2D gTextureMaps[6] : register(t1); +// gTextureMapsռ�ݵ���t1-t7������պ����������Ƿ���t4λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t7); +// ��Ӱ���� +Texture2D gShadowMap : register(t8); + +SamplerState gsamLinearWrap : register(s0); +SamplerState gsamAnisotropicWrap : register(s1); +SamplerComparisonState gsamShadow : register(s2); + +float CalcShadowFactor(float4 shadowPosH) +{ + // Complete projection by doing division by w. + shadowPosH.xyz /= shadowPosH.w; + + // Depth in NDC space. + float depth = shadowPosH.z; + + uint width, height, numMips; + gShadowMap.GetDimensions(0, width, height, numMips); + + // Texel size. + float dx = 1.0f / (float)width; + + float percentLit = 0.0f; + const float2 offsets[9] = + { + float2(-dx, -dx), float2(0.0f, -dx), float2(dx, -dx), + float2(-dx, 0.0f), float2(0.0f, 0.0f), float2(dx, 0.0f), + float2(-dx, +dx), float2(0.0f, +dx), float2(dx, +dx) + }; + + [unroll] + for (int i = 0; i < 9; ++i) + { + percentLit += gShadowMap.SampleCmpLevelZero(gsamShadow, + shadowPosH.xy + offsets[i], depth).r; + } + + return percentLit / 9.0f; +} + +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; + uint vPad0; // ռλ�� + uint vPad1; // ռλ�� + uint vPad2; // ռλ�� +}; + +// Constant data that varies per frame. +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float4x4 gModelToShadow; + float3 gEyePosW; + float pad; + float4 gAmbientLight; + + // Allow application to change fog parameters once per frame. + // For example, we may only use fog for certain times of day. + float4 gFogColor; + float gFogStart; + float gFogRange; + float2 pad2; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light gLights[MaxLights]; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float4 ShadowPosH : POSITION0; + float3 PosW : POSITION1; + float3 NormalW : NORMAL; + float3 TangentW : TANGENT; // ���ߵ��������� + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[gMaterialIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + float3 fresnelR0 = matData.FresnelR0; + float roughness = matData.Roughness; + uint diffuseTexIndex = matData.DiffuseMapIndex; + uint normalMapIndex = matData.NormalMapIndex; + + // �������淶�� + pin.NormalW = normalize(pin.NormalW); + + // ȡ�÷������� + float4 normalMapSample = gTextureMaps[normalMapIndex].Sample(gsamAnisotropicWrap, pin.TexC); + // ������õ��ʵ�ʷ��� ȡ��pin.NormalW + float3 bumpedNormalW = NormalSampleToWorldSpace(normalMapSample.rgb, pin.NormalW, pin.TangentW); + + //bumpedNormalW = pin.NormalW; + + diffuseAlbedo *= gTextureMaps[diffuseTexIndex].Sample(gsamAnisotropicWrap, pin.TexC); + + // ͸�����ص��޳� + // Discard pixel if texture alpha < 0.1. We do this test as soon + // as possible in the shader so that we can potentially exit the + // shader early, thereby skipping the rest of the shader code. + clip(diffuseAlbedo.a - 0.1f); + + // Vector from point being lit to eye. + float3 toEyeW = gEyePosW - pin.PosW; + float distToEye = length(toEyeW); + toEyeW /= distToEye; // normalize + + // Indirect lighting. + float4 ambient = gAmbientLight * diffuseAlbedo; + + float3 shadowFactor = float3(1.0f, 1.0f, 1.0f); + shadowFactor[0] = CalcShadowFactor(pin.ShadowPosH); + + const float shininess = (1.0f - roughness) * normalMapSample.a; + Material mat = { diffuseAlbedo, fresnelR0, shininess }; + float4 directLight = ComputeLighting(gLights, mat, pin.PosW, + bumpedNormalW, toEyeW, shadowFactor); + + float4 litColor = ambient + directLight; + + // �������������ɫalphaΪ0���򲻴��� + if (gFogColor.a > 0.01) + { + float fogAmount = saturate((distToEye - gFogStart) / gFogRange); + litColor = lerp(litColor, gFogColor, fogAmount); + } + + // ���淴�� + float3 r = reflect(-toEyeW, bumpedNormalW); + float4 reflectionColor = gCubeMap.Sample(gsamLinearWrap, r); + float3 fresnelFactor = SchlickFresnel(fresnelR0, bumpedNormalW, r); + litColor.rgb += shininess * fresnelFactor * reflectionColor.rgb; + + // Common convention to take alpha from diffuse material. + litColor.a = diffuseAlbedo.a; + + return litColor; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl new file mode 100644 index 0000000..6e6f0a2 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexDefaultVS.hlsl @@ -0,0 +1,58 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; + float4x4 gModelToShadow; + // ... �� +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; + float3 TangentU : TANGENT; // �������� +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float4 ShadowPosH : POSITION0; + float3 PosW : POSITION1; + float3 NormalW : NORMAL; + float3 TangentW : TANGENT; // ���ߵ��������� + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ��������ת������������ϵ + vout.TangentW = mul(vin.TangentU, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + vout.ShadowPosH = mul(posW, gModelToShadow); + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl new file mode 100644 index 0000000..4add4f5 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLinePS.hlsl @@ -0,0 +1,4 @@ +float4 main() : SV_Target0 +{ + return float4(0.0f, 1.0f, 0.0f, 0.1f); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl new file mode 100644 index 0000000..936a286 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/dynamicIndexOutLineVS.hlsl @@ -0,0 +1,74 @@ + +// ÿ������Ľṹ������ +struct InstanceData +{ + float4x4 World; + float4x4 TexTransform; + float4x4 MatTransform; + uint MaterialIndex; + uint InstPad0; + uint InstPad1; + uint InstPad2; +}; + +// ���ж���Ľṹ������ +StructuredBuffer gInstanceData : register(t0); + +// ���������� +cbuffer cbPass : register(b0) +{ + float4x4 gViewProj; +}; + +cbuffer cbPass1 : register(b1) +{ + int gDrawObjs[128]; // �����е�ÿ��Ԫ�ض��ᱻ��װΪfloat4��d3d12����727ҳ +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; + + // �������۸ģ���ֵ + nointerpolation uint MatIndex : MATINDEX; +}; + +VertexOut main(VertexIn vin, uint instanceID : SV_InstanceID) +{ + VertexOut vout = (VertexOut)0.0f; + + InstanceData instData = gInstanceData[gDrawObjs[instanceID]]; + float4x4 modelToWorld = instData.World; + float4x4 texTransform = instData.TexTransform; + float4x4 matTransform = instData.MatTransform; + vout.MatIndex = instData.MaterialIndex; + + // �Ѷ������ŷ�����ƫ��һ�� + float3 viPos = vin.PosL + vin.NormalL * 0.2; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(viPos, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), texTransform); + vout.TexC = mul(texC, matTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugPS.hlsl new file mode 100644 index 0000000..d171324 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugPS.hlsl @@ -0,0 +1,15 @@ + +Texture2D gShadowMap : register(t8); + +SamplerState gsamLinearWrap : register(s0); + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float2 TexC : TEXCOORD; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + return float4(gShadowMap.Sample(gsamLinearWrap, pin.TexC).rrr, 1.0f); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugVS.hlsl new file mode 100644 index 0000000..6b7d9c0 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowDebugVS.hlsl @@ -0,0 +1,24 @@ + +struct VertexIn +{ + float3 PosL : POSITION; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Already in homogeneous clip space. + vout.PosH = float4(vin.PosL, 1.0f); + + vout.TexC = vin.TexC; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowPS.hlsl new file mode 100644 index 0000000..b86feb6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowPS.hlsl @@ -0,0 +1,54 @@ +//*************************************************************************************** +// Default.hlsl by Frank Luna (C) 2015 All Rights Reserved. +// +// Default shader, currently supports lighting. +//*************************************************************************************** + +struct MaterialData +{ + float4 DiffuseAlbedo; + float3 FresnelR0; + float Mpad0; // ռλ�� + float Roughness; + uint DiffuseMapIndex; // ����ID + uint NormalMapIndex; // ������ͼ��ID + float Mpad2; // ռλ�� +}; + +StructuredBuffer gMaterialData : register(t0); + +// ռ��t1-t7 +Texture2D gTextureMaps[7] : register(t1); + +SamplerState gsamAnisotropicWrap : register(s1); + +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; + uint vPad0; // ռλ�� + uint vPad1; // ռλ�� + uint vPad2; // ռλ�� +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float2 TexC : TEXCOORD; +}; + +void main(VertexOut pin) +{ + // ��ȡ�������IJ��� + MaterialData matData = gMaterialData[gMaterialIndex]; + float4 diffuseAlbedo = matData.DiffuseAlbedo; + uint diffuseTexIndex = matData.DiffuseMapIndex; + + diffuseAlbedo *= gTextureMaps[diffuseTexIndex].Sample(gsamAnisotropicWrap, pin.TexC); + + // ���������Ϊ���޳�һЩ���� + // ͸�����ص��޳� + //clip(diffuseAlbedo.a - 0.1f); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowVS.hlsl new file mode 100644 index 0000000..a6232a3 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/shadowVS.hlsl @@ -0,0 +1,41 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxPS.hlsl new file mode 100644 index 0000000..1b1703d --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxPS.hlsl @@ -0,0 +1,17 @@ + +// Texture2D gDiffuseMap[7] : register(t1); +// gDiffuseMapռ�ݵ���t1-t7������պ����������Ƿ���t7λ�ã�����ת��cube���� +TextureCube gCubeMap : register(t7); + +SamplerState gsamLinearWrap : register(s0); + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +float4 main(VertexOut pin) : SV_Target0 +{ + return gCubeMap.Sample(gsamLinearWrap, pin.PosL); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxVS.hlsl new file mode 100644 index 0000000..2b3fa24 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/skyboxVS.hlsl @@ -0,0 +1,48 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + uint gMaterialIndex; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; + float pad; + // ... +}; + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // ʹ��ģ������ϵ + vout.PosL = vin.PosL; + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + + // ������պе�����ʼ�����������λ�� + posW.xyz += gEyePosW; + + // ����ת����ͶӰ����ϵ + // ʹ��z=w������ʼ������Զ��ƽ�� + vout.PosH = mul(posW, gViewProj).xyww; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/sobelCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/sobelCS.hlsl new file mode 100644 index 0000000..3c7b084 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/sobelCS.hlsl @@ -0,0 +1,37 @@ + +Texture2D gInput : register(t0); +RWTexture2D gOutput : register(u0); + +float CalcLuminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + // �Ե�ǰ�������ĵ㣬���в��� + float4 c[3][3]; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int2 xy = DTid.xy + int2(-1 + j, -1 + i); + c[i][j] = gInput[xy]; + } + } + + // For each color channel, estimate partial x derivative using Sobel scheme. + float4 Gx = -1.0f * c[0][0] - 2.0f * c[1][0] - 1.0f * c[2][0] + 1.0f * c[0][2] + 2.0f * c[1][2] + 1.0f * c[2][2]; + + // For each color channel, estimate partial y derivative using Sobel scheme. + float4 Gy = -1.0f * c[2][0] - 2.0f * c[2][1] - 1.0f * c[2][1] + 1.0f * c[0][0] + 2.0f * c[0][1] + 1.0f * c[0][2]; + + // Gradient is (Gx, Gy). For each color channel, compute magnitude to get maximum rate of change. + float4 mag = sqrt(Gx * Gx + Gy * Gy); + + // Make edges black, and nonedges white. + mag = 1.0f - saturate(CalcLuminance(mag.rgb)); + + gOutput[DTid.xy] = mag; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/tessDS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessDS.hlsl new file mode 100644 index 0000000..ee5e319 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessDS.hlsl @@ -0,0 +1,60 @@ + +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +struct DS_OUTPUT +{ + float4 vPosition : SV_POSITION; +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +[domain("quad")] +DS_OUTPUT main( + HS_CONSTANT_DATA_OUTPUT input, // ����ϸ������ + float2 domain : SV_DomainLocation, // �²��붥���uv����(������Ƭ�ڲ�) + const OutputPatch patch) // ԭʼ��Ƭ��4���� +{ + DS_OUTPUT Output; + + // ˫���Բ�ֵ lerp(x, y, s) = x + s(y - x) + float3 v1 = lerp(patch[0].vPosition, patch[1].vPosition, domain.x); + float3 v2 = lerp(patch[2].vPosition, patch[3].vPosition, domain.x); + // ����ö����ʵ��λ��(ģ������ϵ) + float3 p = lerp(v1, v2, domain.y); + + // �ʵ��޸�y���Ա�ߵ���� + p.y = 0.3f * (p.z * sin(p.x) + p.x * cos(p.z)); + + // ת��������ϵ + float4 posW = mul(float4(p, 1.0f), gWorld); + + // ת�۲�����ϵ + Output.vPosition = mul(posW, gViewProj); + + return Output; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/tessHS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessHS.hlsl new file mode 100644 index 0000000..241ab50 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessHS.hlsl @@ -0,0 +1,85 @@ +// ����������b0 +cbuffer cbPerObject : register(b0) +{ + float4x4 gWorld; +}; + +// ����������b1 +cbuffer cbPass : register(b1) +{ + float4x4 gViewProj; + float3 gEyePosW; +}; + +// ������Ƶ� +struct VS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ��Ƭ�Ķ���(ģ������ϵ����) +}; + +// ������Ƶ� +struct HS_CONTROL_POINT_OUTPUT +{ + float3 vPosition : POSITION; // ����Ķ���(ģ������ϵ����) +}; + +// ����޲����������ݡ� +struct HS_CONSTANT_DATA_OUTPUT +{ + float EdgeTessFactor[4] : SV_TessFactor; // ���磬�����������򣬽�Ϊ [4] + float InsideTessFactor[2] : SV_InsideTessFactor; // ���磬�����������򣬽�Ϊ Inside[2] + // TODO: ����/������������ +}; + +// 4�����Ƶ����Ƭ +#define NUM_CONTROL_POINTS 4 + +// �޲����������� +HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( + InputPatch ip, + uint PatchID : SV_PrimitiveID) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + // ������Ƭ���ĵ� + float3 centerL = 0.25f * (ip[0].vPosition + ip[1].vPosition + ip[2].vPosition + ip[3].vPosition); + // ���ĵ�ת����������ϵ�ĵ� + float3 centerW = mul(float4(centerL, 1.0f), gWorld).xyz; + + // ������������ľ��� + float d = distance(centerW, gEyePosW); + + // ���ݾ������ϸ�ֵ����������� + const float d0 = 20.0f; + const float d1 = 100.0f; + // saturate����޶���[0.0, 1.0]�� + float tess = 64.0f * saturate((d1 - d) / (d1 - d0)); + + // �ڴ˴���������Լ������ + Output.EdgeTessFactor[0] = + Output.EdgeTessFactor[1] = + Output.EdgeTessFactor[2] = + Output.EdgeTessFactor[3] = + Output.InsideTessFactor[0] = + Output.InsideTessFactor[1] = tess; // ���磬�ɸ�Ϊ���㶯̬�ָ����� + + return Output; +} + +[domain("quad")] // �ı�����Ƭ +[partitioning("integer")] // ϸ��ģʽ fractional_even fractional_odd +[outputtopology("triangle_cw")] // ͨ��ϸ�ִ����������ζ����� +[outputcontrolpoints(4)] // ���4������ +[patchconstantfunc("CalcHSPatchConstants")] // ���������ɫ�������� +HS_CONTROL_POINT_OUTPUT main( + InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONTROL_POINT_OUTPUT Output; + + // �ڴ˴���������Լ������ + Output.vPosition = ip[i].vPosition; + + return Output; +} diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/tessPS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessPS.hlsl new file mode 100644 index 0000000..ce75573 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessPS.hlsl @@ -0,0 +1,5 @@ +float4 main() : SV_TARGET +{ + // do nothing + return float4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/tessVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessVS.hlsl new file mode 100644 index 0000000..7301732 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/tessVS.hlsl @@ -0,0 +1,19 @@ +struct VertexIn +{ + float3 PosL : POSITION; +}; + +struct VertexOut +{ + float3 PosL : POSITION; +}; + +VertexOut main(VertexIn vin) +{ + // do nothing + VertexOut vout; + + vout.PosL = vin.PosL; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/vecAdd.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/vecAdd.hlsl new file mode 100644 index 0000000..8548380 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/vecAdd.hlsl @@ -0,0 +1,17 @@ +struct Data +{ + float3 v1; + float3 v2; +}; + +StructuredBuffer gInputA : register(t0); +StructuredBuffer gInputB : register(t1); +RWStructuredBuffer gOutput : register(u0); + +// �ܹ���32�����ݣ���������ÿ���32*1���߳� +[numthreads(32, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + gOutput[DTid.x].v1 = gInputA[DTid.x].v1 + gInputB[DTid.x].v1; + gOutput[DTid.x].v2 = gInputA[DTid.x].v2 + gInputB[DTid.x].v2; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/waveDisturbCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveDisturbCS.hlsl new file mode 100644 index 0000000..a1dc5b9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveDisturbCS.hlsl @@ -0,0 +1,26 @@ + +cbuffer cbUpdateSettings : register(b0) +{ + float gDisturbMag; // �˵ĸ߶� + int2 gDisturbIndex; // ����xy���� +}; + +// �洢����߶�y��һά���� +RWTexture2D gOutput : register(u0); + +[numthreads(1, 1, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = gDisturbIndex.x; + int y = gDisturbIndex.y; + + float halfMag = 0.5f * gDisturbMag; + + // �����������gDisturbMag + gOutput[int2(x, y)] += gDisturbMag; + // ��Χ�������gDisturbMag/2 + gOutput[int2(x + 1, y)] += halfMag; + gOutput[int2(x - 1, y)] += halfMag; + gOutput[int2(x, y + 1)] += halfMag; + gOutput[int2(x, y - 1)] += halfMag; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/waveUpdateCS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveUpdateCS.hlsl new file mode 100644 index 0000000..6765d28 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveUpdateCS.hlsl @@ -0,0 +1,27 @@ +cbuffer cbUpdateSettings : register(b0) +{ + float gWaveConstant0; + float gWaveConstant1; + float gWaveConstant2; +}; + +RWTexture2D gPrevSolInput : register(u0); +RWTexture2D gCurrSolInput : register(u1); +RWTexture2D gOutput : register(u2); + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + int x = DTid.x; + int y = DTid.y; + + // �������ֵ��Ҳ���Dz��˵�ʵ��ֵ + gOutput[int2(x, y)] = + gWaveConstant0 * gPrevSolInput[int2(x, y)].r + + gWaveConstant1 * gCurrSolInput[int2(x, y)].r + + gWaveConstant2 * ( + gCurrSolInput[int2(x, y + 1)].r + + gCurrSolInput[int2(x, y - 1)].r + + gCurrSolInput[int2(x + 1, y)].r + + gCurrSolInput[int2(x - 1, y)].r); +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/Shaders/default/waveVS.hlsl b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveVS.hlsl new file mode 100644 index 0000000..17aca2a --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Shaders/default/waveVS.hlsl @@ -0,0 +1,66 @@ +cbuffer VSConstants : register(b0) +{ + float4x4 modelToWorld; + float4x4 gTexTransform; + float4x4 gMatTransform; + float2 gDisplacementMapTexelSize; + float gGridSpatialStep; + float cbPerObjectPad1; +}; + +cbuffer PassConstants : register(b1) +{ + float4x4 gViewProj; +}; + +Texture2D gDisplacementMap : register(t1); +SamplerState gsamLinearWrap : register(s1); +SamplerState gsamPointClamp : register(s2); + +struct VertexIn +{ + float3 PosL : POSITION; + float3 NormalL : NORMAL; + float2 TexC : TEXCOORD; +}; + +struct VertexOut +{ + float4 PosH : SV_POSITION; + float3 PosW : POSITION; + float3 NormalW : NORMAL; + float2 TexC : TEXCOORD; +}; + +VertexOut main(VertexIn vin) +{ + VertexOut vout = (VertexOut)0.0f; + + // Sample the displacement map using non-transformed [0,1]^2 tex-coords. + vin.PosL.y += gDisplacementMap.SampleLevel(gsamLinearWrap, vin.TexC, 1.0f).r; + + // Estimate normal using finite difference. + float du = gDisplacementMapTexelSize.x; + float dv = gDisplacementMapTexelSize.y; + float l = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(du, 0.0f), 0.0f).r; + float r = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(du, 0.0f), 0.0f).r; + float t = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC - float2(0.0f, dv), 0.0f).r; + float b = gDisplacementMap.SampleLevel(gsamPointClamp, vin.TexC + float2(0.0f, dv), 0.0f).r; + vin.NormalL = normalize(float3(-r + l, 2.0f * gGridSpatialStep, b - t)); + + // �Ѷ���ת������������ϵ + float4 posW = mul(float4(vin.PosL, 1.0f), modelToWorld); + vout.PosW = posW.xyz; + + // ������ת������������ϵ + vout.NormalW = mul(vin.NormalL, (float3x3)modelToWorld); + + // ����ת����ͶӰ����ϵ + vout.PosH = mul(posW, gViewProj); + + // ֱ�ӷ������� + float4 texC = mul(float4(vin.TexC, 0.0f, 1.0f), gTexTransform); + vout.TexC = mul(texC, gMatTransform).xy; + + return vout; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/Core/SystemTime.cpp b/Chapter 20 Shadow Mapping/Core/SystemTime.cpp new file mode 100644 index 0000000..3379c91 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/SystemTime.cpp @@ -0,0 +1,39 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "SystemTime.h" + +double SystemTime::sm_CpuTickDelta = 0.0; + +// Query the performance counter frequency +void SystemTime::Initialize( void ) +{ + LARGE_INTEGER frequency; + ASSERT(TRUE == QueryPerformanceFrequency(&frequency), "Unable to query performance counter frequency"); + sm_CpuTickDelta = 1.0 / static_cast(frequency.QuadPart); +} + +// Query the current value of the performance counter +int64_t SystemTime::GetCurrentTick( void ) +{ + LARGE_INTEGER currentTick; + ASSERT(TRUE == QueryPerformanceCounter(¤tTick), "Unable to query performance counter value"); + return static_cast(currentTick.QuadPart); +} + +void SystemTime::BusyLoopSleep( float SleepTime ) +{ + int64_t finalTick = (int64_t)((double)SleepTime / sm_CpuTickDelta) + GetCurrentTick(); + while (GetCurrentTick() < finalTick); +} diff --git a/Chapter 20 Shadow Mapping/Core/SystemTime.h b/Chapter 20 Shadow Mapping/Core/SystemTime.h new file mode 100644 index 0000000..18b35e7 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/SystemTime.h @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// Contains classes needed to time executing code. +// + +#pragma once + +class SystemTime +{ +public: + + // Query the performance counter frequency + static void Initialize( void ); + + // Query the current value of the performance counter + static int64_t GetCurrentTick( void ); + + static void BusyLoopSleep( float SleepTime ); + + static inline double TicksToSeconds( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta; + } + + static inline double TicksToMillisecs( int64_t TickCount ) + { + return TickCount * sm_CpuTickDelta * 1000.0; + } + + static inline double TimeBetweenTicks( int64_t tick1, int64_t tick2 ) + { + return TicksToSeconds(tick2 - tick1); + } + +private: + + // The amount of time that elapses between ticks of the performance counter + static double sm_CpuTickDelta; +}; + + +class CpuTimer +{ +public: + + CpuTimer() + { + m_StartTick = 0ll; + m_ElapsedTicks = 0ll; + } + + void Start() + { + if (m_StartTick == 0ll) + m_StartTick = SystemTime::GetCurrentTick(); + } + + void Stop() + { + if (m_StartTick != 0ll) + { + m_ElapsedTicks += SystemTime::GetCurrentTick() - m_StartTick; + m_StartTick = 0ll; + } + } + + void Reset() + { + m_ElapsedTicks = 0ll; + m_StartTick = 0ll; + } + + double GetTime() const + { + return SystemTime::TicksToSeconds(m_ElapsedTicks); + } + +private: + + int64_t m_StartTick; + int64_t m_ElapsedTicks; +}; diff --git a/Chapter 20 Shadow Mapping/Core/Utility.cpp b/Chapter 20 Shadow Mapping/Core/Utility.cpp new file mode 100644 index 0000000..59779b6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Utility.cpp @@ -0,0 +1,141 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#include "pch.h" +#include "Utility.h" +#include + +// A faster version of memcopy that uses SSE instructions. TODO: Write an ARM variant if necessary. +void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + ASSERT(Math::IsAligned(_Source, 16)); + + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + const __m128i* __restrict Source = (const __m128i* __restrict)_Source; + + // Discover how many quadwords precede a cache line boundary. Copy them separately. + size_t InitialQuadwordCount = (4 - ((size_t)Source >> 4) & 3) & 3; + if (InitialQuadwordCount > NumQuadwords) + InitialQuadwordCount = NumQuadwords; + + switch (InitialQuadwordCount) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + if (NumQuadwords == InitialQuadwordCount) + return; + + Dest += InitialQuadwordCount; + Source += InitialQuadwordCount; + NumQuadwords -= InitialQuadwordCount; + + size_t CacheLines = NumQuadwords >> 2; + + switch (CacheLines) + { + default: + case 10: _mm_prefetch((char*)(Source + 36), _MM_HINT_NTA); // Fall through + case 9: _mm_prefetch((char*)(Source + 32), _MM_HINT_NTA); // Fall through + case 8: _mm_prefetch((char*)(Source + 28), _MM_HINT_NTA); // Fall through + case 7: _mm_prefetch((char*)(Source + 24), _MM_HINT_NTA); // Fall through + case 6: _mm_prefetch((char*)(Source + 20), _MM_HINT_NTA); // Fall through + case 5: _mm_prefetch((char*)(Source + 16), _MM_HINT_NTA); // Fall through + case 4: _mm_prefetch((char*)(Source + 12), _MM_HINT_NTA); // Fall through + case 3: _mm_prefetch((char*)(Source + 8 ), _MM_HINT_NTA); // Fall through + case 2: _mm_prefetch((char*)(Source + 4 ), _MM_HINT_NTA); // Fall through + case 1: _mm_prefetch((char*)(Source + 0 ), _MM_HINT_NTA); // Fall through + + // Do four quadwords per loop to minimize stalls. + for (size_t i = CacheLines; i > 0; --i) + { + // If this is a large copy, start prefetching future cache lines. This also prefetches the + // trailing quadwords that are not part of a whole cache line. + if (i >= 10) + _mm_prefetch((char*)(Source + 40), _MM_HINT_NTA); + + _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); + _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); + _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); + _mm_stream_si128(Dest + 3, _mm_load_si128(Source + 3)); + + Dest += 4; + Source += 4; + } + + case 0: // No whole cache lines to read + break; + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest + 2, _mm_load_si128(Source + 2)); // Fall through + case 2: _mm_stream_si128(Dest + 1, _mm_load_si128(Source + 1)); // Fall through + case 1: _mm_stream_si128(Dest + 0, _mm_load_si128(Source + 0)); // Fall through + default: + break; + } + + _mm_sfence(); +} + +void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQuadwords ) +{ + ASSERT(Math::IsAligned(_Dest, 16)); + + register const __m128i Source = _mm_castps_si128(FillVector); + __m128i* __restrict Dest = (__m128i* __restrict)_Dest; + + switch (((size_t)Dest >> 4) & 3) + { + case 1: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 2: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + case 3: _mm_stream_si128(Dest++, Source); --NumQuadwords; // Fall through + default: + break; + } + + size_t WholeCacheLines = NumQuadwords >> 2; + + // Do four quadwords per loop to minimize stalls. + while (WholeCacheLines--) + { + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + _mm_stream_si128(Dest++, Source); + } + + // Copy the remaining quadwords + switch (NumQuadwords & 3) + { + case 3: _mm_stream_si128(Dest++, Source); // Fall through + case 2: _mm_stream_si128(Dest++, Source); // Fall through + case 1: _mm_stream_si128(Dest++, Source); // Fall through + default: + break; + } + + _mm_sfence(); +} + +std::wstring MakeWStr( const std::string& str ) +{ + return std::wstring(str.begin(), str.end()); +} diff --git a/Chapter 20 Shadow Mapping/Core/Utility.h b/Chapter 20 Shadow Mapping/Core/Utility.h new file mode 100644 index 0000000..25eb687 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/Utility.h @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#include "pch.h" + +namespace Utility +{ + inline void Print( const char* msg ) { printf("%s", msg); } + inline void Print( const wchar_t* msg ) { wprintf(L"%ws", msg); } + + inline void Printf( const char* format, ... ) + { + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + } + + inline void Printf( const wchar_t* format, ... ) + { + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + } + +#ifndef RELEASE + inline void PrintSubMessage( const char* format, ... ) + { + Print("--> "); + char buffer[256]; + va_list ap; + va_start(ap, format); + vsprintf_s(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( const wchar_t* format, ... ) + { + Print("--> "); + wchar_t buffer[256]; + va_list ap; + va_start(ap, format); + vswprintf(buffer, 256, format, ap); + Print(buffer); + Print("\n"); + } + inline void PrintSubMessage( void ) + { + } +#endif + +} // namespace Utility + +#ifdef ERROR +#undef ERROR +#endif +#ifdef ASSERT +#undef ASSERT +#endif +#ifdef HALT +#undef HALT +#endif + +#define HALT( ... ) ERROR( __VA_ARGS__ ) __debugbreak(); + +#ifdef RELEASE + + #define ASSERT( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF( isTrue, ... ) (void)(isTrue) + #define WARN_ONCE_IF_NOT( isTrue, ... ) (void)(isTrue) + #define ERROR( msg, ... ) + #define DEBUGPRINT( msg, ... ) do {} while(0) + #define ASSERT_SUCCEEDED( hr, ... ) (void)(hr) + +#else // !RELEASE + + #define STRINGIFY(x) #x + #define STRINGIFY_BUILTIN(x) STRINGIFY(x) + #define ASSERT( isFalse, ... ) \ + if (!(bool)(isFalse)) { \ + Utility::Print("\nAssertion failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isFalse "\' is false"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + #define ASSERT_SUCCEEDED( hr, ... ) \ + if (FAILED(hr)) { \ + Utility::Print("\nHRESULT failed in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("hr = 0x%08X", hr); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + __debugbreak(); \ + } + + + #define WARN_ONCE_IF( isTrue, ... ) \ + { \ + static bool s_TriggeredWarning = false; \ + if ((bool)(isTrue) && !s_TriggeredWarning) { \ + s_TriggeredWarning = true; \ + Utility::Print("\nWarning issued in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage("\'" #isTrue "\' is true"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); \ + } \ + } + + #define WARN_ONCE_IF_NOT( isTrue, ... ) WARN_ONCE_IF(!(isTrue), __VA_ARGS__) + + #define ERROR( ... ) \ + Utility::Print("\nError reported in " STRINGIFY_BUILTIN(__FILE__) " @ " STRINGIFY_BUILTIN(__LINE__) "\n"); \ + Utility::PrintSubMessage(__VA_ARGS__); \ + Utility::Print("\n"); + + #define DEBUGPRINT( msg, ... ) \ + Utility::Printf( msg "\n", ##__VA_ARGS__ ); + +#endif + +#define BreakIfFailed( hr ) if (FAILED(hr)) __debugbreak() + +void SIMDMemCopy( void* __restrict Dest, const void* __restrict Source, size_t NumQuadwords ); +void SIMDMemFill( void* __restrict Dest, __m128 FillVector, size_t NumQuadwords ); + +std::wstring MakeWStr( const std::string& str ); diff --git a/Chapter 20 Shadow Mapping/Core/VectorMath.h b/Chapter 20 Shadow Mapping/Core/VectorMath.h new file mode 100644 index 0000000..e0d59af --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/VectorMath.h @@ -0,0 +1,60 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// +// This is a system of classes that wrap DirectXMath in a more object-oriented and concise (readable) way. While these +// classes are not designed to maximize throughput on the instruction level, they are designed to be easily understood. +// I believe that the source of most math library inefficiency is in their being too confusing and not making the preferred +// way of doing things obvious. This leaves programmers constantly finding usage patterns that "work for them" but are +// ultimately inefficient and don't use the API the "way it was intended". The goal of this wrapper is to be cogent and +// familiar. +// +// Note that DirectXMath treats vectors like [1x4] matrices (rows) rather than [4x1] matrices (columns). Likewise, it +// treats matrices like they are transposed, so that you would multiply a vector and a matrix like so: +// +// Vector [1x4] = Vector [1x4] * Matrix [4x4] +// +// Applying multiple transforms to a vector involves concatenating on the outside, or right of the previous transform: +// +// ProjectedPosition = ModelPosition * ModelToWorld * WorldToView * ViewToProj +// +// This is *not* how this API works because it is needlessly contrary to Math textbooks. It's not "wrong", per se, +// but it's a paradigm I'd like to see changed. A vector is four floats. A matrix is four consecutive vectors. Whether +// you think of them as row or column vectors of a matrix is just a matter of perspective. In this library, you will see: +// +// Vector [4x1] = Matrix4 [4x4] * Vector [4x1] +// +// and +// +// ProjectedPosition = ViewToProj * WorldToView * ModelToWorld * ModelPosition +// +// One very happy result of this is that you can stop transposing every matrix you set in a shader constant buffer. They +// were always in the right format, you were just multiplying them backwards. In the shader you should have been calling +// mul( matrix, vector ) rather than mul( vector, matrix ). Then you wouldn't have needed to transpose the matrix. +// +// It's possible to work in a transposed space: (B*A*x)ᵀ = xᵀ*Aᵀ*Bᵀ but why would you want to? +// +// Oh, and we use right-handed coordinate systems because that's what you learned in your Linear Algebra, Calculus, and +// Physics classes. +// +// Peace, +// James + + +#pragma once + +#include "Math/Scalar.h" +#include "Math/Vector.h" +#include "Math/Quaternion.h" +#include "Math/Matrix3.h" +#include "Math/Transform.h" +#include "Math/Matrix4.h" +#include "Math/Functions.inl" diff --git a/Chapter 20 Shadow Mapping/Core/pch.cpp b/Chapter 20 Shadow Mapping/Core/pch.cpp new file mode 100644 index 0000000..97b544e --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/Chapter 20 Shadow Mapping/Core/pch.h b/Chapter 20 Shadow Mapping/Core/pch.h new file mode 100644 index 0000000..2114ec9 --- /dev/null +++ b/Chapter 20 Shadow Mapping/Core/pch.h @@ -0,0 +1,53 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the MIT License (MIT). +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +// Developed by Minigraph +// +// Author: James Stanard +// + +#pragma once + +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#pragma warning(disable:4238) // nonstandard extension used : class rvalue used as lvalue +#pragma warning(disable:4324) // structure was padded due to __declspec(align()) + +#ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX + #define NOMINMAX +#endif +#include + +#include + +#pragma comment(lib, "d3d12.lib") +#pragma comment(lib, "dxgi.lib") + +#define MY_IID_PPV_ARGS IID_PPV_ARGS +#define D3D12_GPU_VIRTUAL_ADDRESS_NULL ((D3D12_GPU_VIRTUAL_ADDRESS)0) +#define D3D12_GPU_VIRTUAL_ADDRESS_UNKNOWN ((D3D12_GPU_VIRTUAL_ADDRESS)-1) + +#include "d3dx12.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "Utility.h" +#include "VectorMath.h" +#include "EngineTuning.h" +#include "EngineProfiling.h" diff --git a/Chapter 20 Shadow Mapping/GameApp.cpp b/Chapter 20 Shadow Mapping/GameApp.cpp new file mode 100644 index 0000000..3815a22 --- /dev/null +++ b/Chapter 20 Shadow Mapping/GameApp.cpp @@ -0,0 +1,790 @@ +#include "GameApp.h" +#include "GameCore.h" +#include "GraphicsCore.h" +#include "BufferManager.h" +#include "CommandContext.h" +#include "TextureManager.h" +#include "GameInput.h" + +#include +#include +#include "GeometryGenerator.h" +#include + +#include "CompiledShaders/dynamicIndexDefaultPS.h" +#include "CompiledShaders/dynamicIndexDefaultVS.h" +#include "CompiledShaders/skyboxPS.h" +#include "CompiledShaders/skyboxVS.h" +#include "CompiledShaders/shadowVS.h" +#include "CompiledShaders/shadowPS.h" +#include "CompiledShaders/shadowDebugVS.h" +#include "CompiledShaders/shadowDebugPS.h" + +void GameApp::Startup(void) +{ + buildPSO(); + buildGeo(); + buildMaterials(); + buildRenderItem(); + buildCubeCamera(0.0f, 2.0f, 0.0f); + + m_Camera.SetEyeAtUp({ 0.0f, 5.0f, -10.0f }, { 0.0f, 0.0f, 0.0f }, Math::Vector3(Math::kYUnitVector)); + m_CameraController.reset(new GameCore::CameraController(m_Camera, Math::Vector3(Math::kYUnitVector))); +} + +void GameApp::Cleanup(void) +{ + m_mapPSO.clear(); + + m_mapGeometries.clear(); + m_vecAll.clear(); + + for (auto& v : m_vecRenderItems) + v.clear(); + + m_mats.Destroy(); +} + +void GameApp::Update(float deltaT) +{ + //cameraUpdate(); + m_CameraController->Update(deltaT); + + // skull ����������һֱ�仯 + static float fAllTime = 0; + fAllTime += deltaT; + using namespace Math; + Matrix4 skullScale = Matrix4::MakeScale(0.2f); + Matrix4 skullOffset = Matrix4(Matrix3(kIdentity), { 3.0f, 2.0f, 0.0f }); + Matrix4 skullLocalRotate = Matrix3::MakeYRotation(2.0f * fAllTime); + Matrix4 skullGlobalRotate = Matrix3::MakeYRotation(0.5f * fAllTime); + // ע�ⷴ�� + m_SkullRItem->modeToWorld = Transpose(skullGlobalRotate * skullOffset * skullLocalRotate * skullScale); + + // �ӿ� + m_MainViewport.Width = (float)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainViewport.Height = (float)Graphics::g_SceneColorBuffer.GetHeight(); + m_MainViewport.MinDepth = 0.0f; + m_MainViewport.MaxDepth = 1.0f; + + // �ü����� + m_MainScissor.left = 0; + m_MainScissor.top = 0; + m_MainScissor.right = (LONG)Graphics::g_SceneColorBuffer.GetWidth(); + m_MainScissor.bottom = (LONG)Graphics::g_SceneColorBuffer.GetHeight(); + + // ��̬��Դ + mLightRotationAngle += 0.1f * deltaT; + + XMMATRIX R = XMMatrixRotationY(mLightRotationAngle); + for (int i = 0; i < 3; ++i) + { + XMVECTOR lightDir = XMLoadFloat3(&mBaseLightDirections[i]); + lightDir = XMVector3TransformNormal(lightDir, R); + XMStoreFloat3(&mRotatedLightDirections[i], lightDir); + } + + m_CameraShadow.UpdateMatrix(mRotatedLightDirections[0], { 0.0f, 0.0f, 0.0f }, + { 30, 30, 60 }, (uint32_t)Graphics::g_ShadowBuffer.GetWidth(), (uint32_t)Graphics::g_ShadowBuffer.GetHeight(), 16); +} + +void GameApp::RenderScene(void) +{ + GraphicsContext& gfxContext = GraphicsContext::Begin(L"Scene Render"); + + // һЩͨ�õ���� + // ���ø�ǩ�� + gfxContext.SetRootSignature(m_RootSignature); + + // ����ȫ������������ + gfxContext.SetBufferSRV(2, m_mats); + + // ����ȫ����������Դ + gfxContext.SetDynamicDescriptors(3, 0, 7, &m_srvs[0]); + + // ��Ⱦ��Ӱͼ + DrawShadow(gfxContext); + + // ����Ӱ + gfxContext.SetDynamicDescriptors(4, 0, 1, &Graphics::g_ShadowBuffer.GetSRV()); + + // ��̬��պ���Ⱦ�� => g_SceneCubeBuffer + DrawSceneToCubeMap(gfxContext); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + gfxContext.ClearColor(Graphics::g_SceneColorBuffer); + + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + + gfxContext.SetRenderTarget(Graphics::g_SceneColorBuffer.GetRTV(), Graphics::g_SceneDepthBuffer.GetDSV()); + + gfxContext.SetViewportAndScissor(m_MainViewport, m_MainScissor); + + // ����ͨ�õij��������� + PassConstants psc; + updatePassConstants(psc, m_Camera); + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ��Ⱦ�м��ˮ���������������ϱ߶�̬���ɵ���պ� + // ���ö�̬����պ���Դ + gfxContext.SetDynamicDescriptors(3, 6, 1, &Graphics::g_SceneCubeBuff.GetSRV()); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + // ����ԭʼ����պ���Դ + gfxContext.SetDynamicDescriptors(3, 6, 1, &m_srvs[6]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + + // ������Ӱ��debug���� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SHADOW_DEBUG]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::shadowDebug]); + + gfxContext.TransitionResource(Graphics::g_SceneColorBuffer, D3D12_RESOURCE_STATE_PRESENT); + + gfxContext.Finish(); +} + +void GameApp::DrawShadow(GraphicsContext& gfxContext) +{ + Graphics::g_ShadowBuffer.BeginRendering(gfxContext); + { + // ����ͨ�õij��������� + PassConstants psc; + updatePassConstants(psc, m_CameraShadow); + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ���������������Ӱͼ��g_ShadowBuffer�� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SHADOW]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::allButSky]); + } + Graphics::g_ShadowBuffer.EndRendering(gfxContext); +} + +void GameApp::DrawSceneToCubeMap(GraphicsContext& gfxContext) +{ + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_RENDER_TARGET, true); + + // �������ģ�建�� + gfxContext.TransitionResource(Graphics::g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); + + // ��������ɫ + gfxContext.ClearColor(Graphics::g_SceneCubeBuff); + + // �����ӿںͲü����� + auto width = Graphics::g_SceneCubeBuff.GetWidth(); + auto height = Graphics::g_SceneCubeBuff.GetHeight(); + D3D12_VIEWPORT mViewport = { 0.0f, 0.0f, (float)width, (float)height, 0.0f, 1.0f }; + D3D12_RECT mScissorRect = { 0, 0, (LONG)width, (LONG)height }; + gfxContext.SetViewportAndScissor(mViewport, mScissorRect); + + for (int i = 0; i < 6; ++i) + { + gfxContext.ClearDepthAndStencil(Graphics::g_SceneDepthBuffer); + // ����Ϊ��ȾĿ�� + gfxContext.SetRenderTarget(Graphics::g_SceneCubeBuff.GetRTV(i), Graphics::g_SceneDepthBuffer.GetDSV()); + + // ����ͨ�õij��������� + PassConstants psc; + updatePassConstants(psc, m_CameraCube[i]); + gfxContext.SetDynamicConstantBufferView(1, sizeof(psc), &psc); + + // ��ʼ���� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_DEFAULT]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Opaque]); + + // ������պ� + gfxContext.SetPipelineState(m_mapPSO[E_EPT_SKY]); + drawRenderItems(gfxContext, m_vecRenderItems[(int)RenderLayer::Sky]); + } + + // �ı仺������ + gfxContext.TransitionResource(Graphics::g_SceneCubeBuff, D3D12_RESOURCE_STATE_GENERIC_READ, true); +} + +void GameApp::RenderUI(class GraphicsContext& gfxContext) +{ + +} + +void GameApp::drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems) +{ + for (auto& item : ritems) + { + // ���ö��� + gfxContext.SetVertexBuffer(0, item->geo->vertexView); + + // �������� + gfxContext.SetIndexBuffer(item->geo->indexView); + + // ���ö������˽ṹ + gfxContext.SetPrimitiveTopology(item->PrimitiveType); + + // ������ȾĿ���ת���������������������ƾ��� + ObjectConstants obc; + obc.World = item->modeToWorld; + obc.texTransform = item->texTransform; + obc.matTransform = item->matTransform; + obc.MaterialIndex = item->MaterialIndex; + gfxContext.SetDynamicConstantBufferView(0, sizeof(obc), &obc); + + gfxContext.DrawIndexed(item->IndexCount, item->StartIndexLocation, item->BaseVertexLocation); + } +} + +void GameApp::buildPSO() +{ + // ������ǩ�� + m_RootSignature.Reset(5, 3); + m_RootSignature.InitStaticSampler(0, Graphics::SamplerLinearWrapDesc); + m_RootSignature.InitStaticSampler(1, Graphics::SamplerAnisoWrapDesc); + m_RootSignature.InitStaticSampler(2, Graphics::SamplerShadowDesc); + m_RootSignature[0].InitAsConstantBuffer(0); + m_RootSignature[1].InitAsConstantBuffer(1); + m_RootSignature[2].InitAsBufferSRV(0); + m_RootSignature[3].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1, 7); + m_RootSignature[4].InitAsDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 8, 1); + m_RootSignature.Finalize(L"18 RS", D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + + // ����PSO + D3D12_INPUT_ELEMENT_DESC mInputLayout[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 } + }; + + DXGI_FORMAT ColorFormat = Graphics::g_SceneColorBuffer.GetFormat(); + DXGI_FORMAT DepthFormat = Graphics::g_SceneDepthBuffer.GetFormat(); + + GraphicsPSO defaultPSO; + defaultPSO.SetRootSignature(m_RootSignature); + defaultPSO.SetRasterizerState(Graphics::RasterizerDefaultCw); + defaultPSO.SetBlendState(Graphics::BlendDisable); + defaultPSO.SetDepthStencilState(Graphics::DepthStateReadWrite); + defaultPSO.SetInputLayout(_countof(mInputLayout), mInputLayout); + defaultPSO.SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE); + defaultPSO.SetRenderTargetFormat(ColorFormat, DepthFormat); + defaultPSO.SetVertexShader(g_pdynamicIndexDefaultVS, sizeof(g_pdynamicIndexDefaultVS)); + defaultPSO.SetPixelShader(g_pdynamicIndexDefaultPS, sizeof(g_pdynamicIndexDefaultPS)); + defaultPSO.Finalize(); + + // Ĭ��PSO + m_mapPSO[E_EPT_DEFAULT] = defaultPSO; + + // ��պ�PSO + auto ras = Graphics::RasterizerDefaultCw; + ras.CullMode = D3D12_CULL_MODE_NONE; + auto dep = Graphics::DepthStateReadWrite; + dep.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; + GraphicsPSO skyPSO = defaultPSO; + skyPSO.SetRasterizerState(ras); + skyPSO.SetDepthStencilState(dep); + skyPSO.SetVertexShader(g_pskyboxVS, sizeof(g_pskyboxVS)); + skyPSO.SetPixelShader(g_pskyboxPS, sizeof(g_pskyboxPS)); + skyPSO.Finalize(); + m_mapPSO[E_EPT_SKY] = skyPSO; + + // shadow PSO + GraphicsPSO shadowPSO = defaultPSO; + shadowPSO.SetBlendState(Graphics::BlendNoColorWrite); + shadowPSO.SetRasterizerState(Graphics::RasterizerShadowCW); + shadowPSO.SetRenderTargetFormats(0, nullptr, Graphics::g_ShadowBuffer.GetFormat()); + shadowPSO.SetVertexShader(g_pshadowVS, sizeof(g_pshadowVS)); + shadowPSO.SetPixelShader(g_pshadowPS, sizeof(g_pshadowPS)); + shadowPSO.Finalize(); + + m_mapPSO[E_EPT_SHADOW] = shadowPSO; + + // shadow debug PSO + GraphicsPSO shadowDebugPSO = defaultPSO; + shadowDebugPSO.SetVertexShader(g_pshadowDebugVS, sizeof(g_pshadowDebugVS)); + shadowDebugPSO.SetPixelShader(g_pshadowDebugPS, sizeof(g_pshadowDebugPS)); + shadowDebugPSO.Finalize(); + m_mapPSO[E_EPT_SHADOW_DEBUG] = shadowDebugPSO; +} + +void GameApp::buildGeo() +{ + buildShapeGeo(); + buildSkullGeo(); +} + +void GameApp::buildShapeGeo() +{ + // ������״���� + GeometryGenerator geoGen; + GeometryGenerator::MeshData box = geoGen.CreateBox(1.0f, 1.0f, 1.0f, 3); + GeometryGenerator::MeshData grid = geoGen.CreateGrid(20.0f, 30.0f, 60, 40); + GeometryGenerator::MeshData sphere = geoGen.CreateSphere(0.5f, 20, 20); + GeometryGenerator::MeshData cylinder = geoGen.CreateCylinder(0.5f, 0.3f, 3.0f, 20, 20); + GeometryGenerator::MeshData quad = geoGen.CreateQuad(0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + + // + // We are concatenating all the geometry into one big vertex/index buffer. So + // define the regions in the buffer each submesh covers. + // + + // Cache the vertex offsets to each object in the concatenated vertex buffer. + UINT boxVertexOffset = 0; + UINT gridVertexOffset = (UINT)box.Vertices.size(); + UINT sphereVertexOffset = gridVertexOffset + (UINT)grid.Vertices.size(); + UINT cylinderVertexOffset = sphereVertexOffset + (UINT)sphere.Vertices.size(); + UINT quadVertexOffset = cylinderVertexOffset + (UINT)cylinder.Vertices.size(); + + // Cache the starting index for each object in the concatenated index buffer. + UINT boxIndexOffset = 0; + UINT gridIndexOffset = (UINT)box.Indices32.size(); + UINT sphereIndexOffset = gridIndexOffset + (UINT)grid.Indices32.size(); + UINT cylinderIndexOffset = sphereIndexOffset + (UINT)sphere.Indices32.size(); + UINT quadIndexOffset = cylinderIndexOffset + (UINT)cylinder.Indices32.size(); + + SubmeshGeometry boxSubmesh; + boxSubmesh.IndexCount = (UINT)box.Indices32.size(); + boxSubmesh.StartIndexLocation = boxIndexOffset; + boxSubmesh.BaseVertexLocation = boxVertexOffset; + + SubmeshGeometry gridSubmesh; + gridSubmesh.IndexCount = (UINT)grid.Indices32.size(); + gridSubmesh.StartIndexLocation = gridIndexOffset; + gridSubmesh.BaseVertexLocation = gridVertexOffset; + + SubmeshGeometry sphereSubmesh; + sphereSubmesh.IndexCount = (UINT)sphere.Indices32.size(); + sphereSubmesh.StartIndexLocation = sphereIndexOffset; + sphereSubmesh.BaseVertexLocation = sphereVertexOffset; + + SubmeshGeometry cylinderSubmesh; + cylinderSubmesh.IndexCount = (UINT)cylinder.Indices32.size(); + cylinderSubmesh.StartIndexLocation = cylinderIndexOffset; + cylinderSubmesh.BaseVertexLocation = cylinderVertexOffset; + + SubmeshGeometry quadSubmesh; + quadSubmesh.IndexCount = (UINT)quad.Indices32.size(); + quadSubmesh.StartIndexLocation = quadIndexOffset; + quadSubmesh.BaseVertexLocation = quadVertexOffset; + + // + // Extract the vertex elements we are interested in and pack the + // vertices of all the meshes into one vertex buffer. + // + + auto totalVertexCount = + box.Vertices.size() + + grid.Vertices.size() + + sphere.Vertices.size() + + cylinder.Vertices.size() + + quad.Vertices.size(); + + std::vector vertices(totalVertexCount); + + UINT k = 0; + for (size_t i = 0; i < box.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = box.Vertices[i].Position; + vertices[k].Normal = box.Vertices[i].Normal; + vertices[k].TexC = box.Vertices[i].TexC; + vertices[k].TangentU = box.Vertices[i].TangentU; + } + + for (size_t i = 0; i < grid.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = grid.Vertices[i].Position; + vertices[k].Normal = grid.Vertices[i].Normal; + vertices[k].TexC = grid.Vertices[i].TexC; + vertices[k].TangentU = grid.Vertices[i].TangentU; + } + + for (size_t i = 0; i < sphere.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = sphere.Vertices[i].Position; + vertices[k].Normal = sphere.Vertices[i].Normal; + vertices[k].TexC = sphere.Vertices[i].TexC; + vertices[k].TangentU = sphere.Vertices[i].TangentU; + } + + for (size_t i = 0; i < cylinder.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = cylinder.Vertices[i].Position; + vertices[k].Normal = cylinder.Vertices[i].Normal; + vertices[k].TexC = cylinder.Vertices[i].TexC; + vertices[k].TangentU = cylinder.Vertices[i].TangentU; + } + + for (int i = 0; i < quad.Vertices.size(); ++i, ++k) + { + vertices[k].Pos = quad.Vertices[i].Position; + vertices[k].Normal = quad.Vertices[i].Normal; + vertices[k].TexC = quad.Vertices[i].TexC; + vertices[k].TangentU = quad.Vertices[i].TangentU; + } + + std::vector indices; + indices.insert(indices.end(), std::begin(box.GetIndices16()), std::end(box.GetIndices16())); + indices.insert(indices.end(), std::begin(grid.GetIndices16()), std::end(grid.GetIndices16())); + indices.insert(indices.end(), std::begin(sphere.GetIndices16()), std::end(sphere.GetIndices16())); + indices.insert(indices.end(), std::begin(cylinder.GetIndices16()), std::end(cylinder.GetIndices16())); + indices.insert(indices.end(), std::begin(quad.GetIndices16()), std::end(quad.GetIndices16())); + + auto geo = std::make_unique(); + geo->name = "shapeGeo"; + + // GPUBuff�࣬�Զ��Ѷ���ͨ���ϴ������������˶�Ӧ��Ĭ�϶��� + geo->createVertex(L"vertex buff", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"index buff", (UINT)indices.size(), sizeof(std::uint16_t), indices.data()); + + geo->geoMap["box"] = boxSubmesh; + geo->geoMap["grid"] = gridSubmesh; + geo->geoMap["sphere"] = sphereSubmesh; + geo->geoMap["cylinder"] = cylinderSubmesh; + geo->geoMap["quad"] = quadSubmesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildSkullGeo() +{ + std::ifstream fin("Models/skull.txt"); + + if (!fin) + { + MessageBox(0, L"Models/skull.txt not found.", 0, 0); + return; + } + + UINT vcount = 0; + UINT tcount = 0; + std::string ignore; + + fin >> ignore >> vcount; + fin >> ignore >> tcount; + fin >> ignore >> ignore >> ignore >> ignore; + + std::vector vertices(vcount); + for (UINT i = 0; i < vcount; ++i) + { + fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; + fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; + + XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); + + // ������������ + XMFLOAT3 spherePos; + XMStoreFloat3(&spherePos, XMVector3Normalize(P)); + + float theta = atan2f(spherePos.z, spherePos.x); + + // Put in [0, 2pi]. + if (theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(spherePos.y); + + float u = theta / (2.0f * XM_PI); + float v = phi / XM_PI; + + vertices[i].TexC = { u, v }; + } + + fin >> ignore; + fin >> ignore; + fin >> ignore; + + std::vector indices(3 * tcount); + for (UINT i = 0; i < tcount; ++i) + { + fin >> indices[i * 3 + 0] >> indices[i * 3 + 1] >> indices[i * 3 + 2]; + } + + fin.close(); + + auto geo = std::make_unique(); + geo->name = "skullGeo"; + + geo->createVertex(L"skullGeo vertex", (UINT)vertices.size(), sizeof(Vertex), vertices.data()); + geo->createIndex(L"skullGeo index", (UINT)indices.size(), sizeof(std::int32_t), indices.data()); + geo->storeVertexAndIndex(vertices, indices); + + SubmeshGeometry submesh; + submesh.IndexCount = 3 * tcount; + submesh.StartIndexLocation = 0; + submesh.BaseVertexLocation = 0; + + geo->geoMap["skull"] = submesh; + + m_mapGeometries[geo->name] = std::move(geo); +} + +void GameApp::buildMaterials() +{ + // 5���������� + std::vector v = { + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 0.3f, 0, 1}, // bricks + { { 0.9f, 0.9f, 0.9f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.1f, 2, 3}, // tile + { { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.98f, 0.97f, 0.95f }, 0.1f, 4, 5}, // mirror + { { 0.8f, 0.8f, 0.8f, 1.0f }, { 0.20f, 0.20f, 0.20f }, 0.2f, 4, 5}, // skull + { { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.10f, 0.10f, 0.10f }, 1.0f, 6, 6}, // sky + }; + + // ���������������� + m_mats.Create(L"materials", (UINT)v.size(), sizeof(MaterialConstants), v.data()); + + // 7������ + m_srvs.resize(7); + TextureManager::Initialize(L"Textures/"); + m_srvs[0] = TextureManager::LoadFromFile(L"bricks2", true)->GetSRV(); + m_srvs[1] = TextureManager::LoadFromFile(L"bricks2_nmap", false)->GetSRV(); + m_srvs[2] = TextureManager::LoadFromFile(L"tile", true)->GetSRV(); + m_srvs[3] = TextureManager::LoadFromFile(L"tile_nmap", false)->GetSRV(); + m_srvs[4] = TextureManager::LoadFromFile(L"white1x1", true)->GetSRV(); + m_srvs[5] = TextureManager::LoadFromFile(L"default_nmap", false)->GetSRV(); + m_srvs[6] = TextureManager::LoadFromFile(L"snowcube1024", true)->GetSRV(); +} + +void GameApp::buildRenderItem() +{ + using namespace Math; + auto skyRitem = std::make_unique(); + skyRitem->modeToWorld = Transpose(Matrix4::MakeScale(5000.0f)); + skyRitem->texTransform = Transpose(Matrix4(kIdentity)); + skyRitem->matTransform = Transpose(Matrix4(kIdentity)); + skyRitem->MaterialIndex = eMaterialType::sky; + skyRitem->geo = m_mapGeometries["shapeGeo"].get(); + skyRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skyRitem->IndexCount = skyRitem->geo->geoMap["sphere"].IndexCount; + skyRitem->StartIndexLocation = skyRitem->geo->geoMap["sphere"].StartIndexLocation; + skyRitem->BaseVertexLocation = skyRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Sky].push_back(skyRitem.get()); + m_vecAll.push_back(std::move(skyRitem)); + + auto quadRitem = std::make_unique(); + quadRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + quadRitem->texTransform = Transpose(Matrix4(kIdentity)); + quadRitem->matTransform = Transpose(Matrix4(kIdentity)); + quadRitem->MaterialIndex = eMaterialType::bricks; + quadRitem->geo = m_mapGeometries["shapeGeo"].get(); + quadRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + quadRitem->IndexCount = quadRitem->geo->geoMap["quad"].IndexCount; + quadRitem->StartIndexLocation = quadRitem->geo->geoMap["quad"].StartIndexLocation; + quadRitem->BaseVertexLocation = quadRitem->geo->geoMap["quad"].BaseVertexLocation; + + m_vecRenderItems[(int)RenderLayer::shadowDebug].push_back(quadRitem.get()); + m_vecAll.push_back(std::move(quadRitem)); + + auto boxRitem = std::make_unique(); + boxRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 1.0f, 2.0f), Vector3(0.0f, 0.5f, 0.0f)))); + boxRitem->texTransform = Transpose(Matrix4(kIdentity)); + boxRitem->matTransform = Transpose(Matrix4(kIdentity)); + boxRitem->MaterialIndex = eMaterialType::bricks; + boxRitem->geo = m_mapGeometries["shapeGeo"].get(); + boxRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + boxRitem->IndexCount = boxRitem->geo->geoMap["box"].IndexCount; + boxRitem->StartIndexLocation = boxRitem->geo->geoMap["box"].StartIndexLocation; + boxRitem->BaseVertexLocation = boxRitem->geo->geoMap["box"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(boxRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(boxRitem.get()); + m_vecAll.push_back(std::move(boxRitem)); + + auto globeRitem = std::make_unique(); + globeRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Matrix3::MakeScale(2.0f, 2.0f, 2.0f), Vector3(0.0f, 2.0f, 0.0f)))); + globeRitem->texTransform = Transpose(Matrix4::MakeScale(1.0f)); + globeRitem->matTransform = Transpose(Matrix4(kIdentity)); + globeRitem->MaterialIndex = eMaterialType::mirror; + globeRitem->geo = m_mapGeometries["shapeGeo"].get(); + globeRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + globeRitem->IndexCount = globeRitem->geo->geoMap["sphere"].IndexCount; + globeRitem->StartIndexLocation = globeRitem->geo->geoMap["sphere"].StartIndexLocation; + globeRitem->BaseVertexLocation = globeRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::OpaqueDynamicReflectors].push_back(globeRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(globeRitem.get()); + m_vecAll.push_back(std::move(globeRitem)); + + auto skullRitem = std::make_unique(); + skullRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + skullRitem->texTransform = Transpose(Matrix4(kIdentity)); + skullRitem->matTransform = Transpose(Matrix4(kIdentity)); + skullRitem->MaterialIndex = eMaterialType::skull; + skullRitem->geo = m_mapGeometries["skullGeo"].get(); + skullRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + skullRitem->IndexCount = skullRitem->geo->geoMap["skull"].IndexCount; + skullRitem->StartIndexLocation = skullRitem->geo->geoMap["skull"].StartIndexLocation; + skullRitem->BaseVertexLocation = skullRitem->geo->geoMap["skull"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(skullRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(skullRitem.get()); + m_SkullRItem = skullRitem.get(); + m_vecAll.push_back(std::move(skullRitem)); + + auto gridRitem = std::make_unique(); + gridRitem->modeToWorld = Transpose(Matrix4(kIdentity)); + gridRitem->texTransform = Transpose(Matrix4::MakeScale({ 8.0f, 8.0f, 1.0f })); + gridRitem->matTransform = Transpose(Matrix4(kIdentity)); + gridRitem->MaterialIndex = eMaterialType::tile; + gridRitem->geo = m_mapGeometries["shapeGeo"].get(); + gridRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + gridRitem->IndexCount = gridRitem->geo->geoMap["grid"].IndexCount; + gridRitem->StartIndexLocation = gridRitem->geo->geoMap["grid"].StartIndexLocation; + gridRitem->BaseVertexLocation = gridRitem->geo->geoMap["grid"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(gridRitem.get()); + m_vecAll.push_back(std::move(gridRitem)); + + for (int i = 0; i < 5; ++i) + { + auto leftCylRitem = std::make_unique(); + leftCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 1.5f, -10.0f + i * 5.0f)))); + leftCylRitem->texTransform = Transpose(Matrix4::MakeScale({ 1.5f, 2.0f, 1.0f })); + leftCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftCylRitem->MaterialIndex = eMaterialType::bricks; + leftCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftCylRitem->IndexCount = leftCylRitem->geo->geoMap["cylinder"].IndexCount; + leftCylRitem->StartIndexLocation = leftCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + leftCylRitem->BaseVertexLocation = leftCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftCylRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(leftCylRitem.get()); + m_vecAll.push_back(std::move(leftCylRitem)); + + auto rightCylRitem = std::make_unique(); + rightCylRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 1.5f, -10.0f + i * 5.0f)))); + rightCylRitem->texTransform = Transpose(Matrix4::MakeScale({ 1.5f, 2.0f, 1.0f })); + rightCylRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightCylRitem->MaterialIndex = eMaterialType::bricks; + rightCylRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightCylRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightCylRitem->IndexCount = rightCylRitem->geo->geoMap["cylinder"].IndexCount; + rightCylRitem->StartIndexLocation = rightCylRitem->geo->geoMap["cylinder"].StartIndexLocation; + rightCylRitem->BaseVertexLocation = rightCylRitem->geo->geoMap["cylinder"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightCylRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(rightCylRitem.get()); + m_vecAll.push_back(std::move(rightCylRitem)); + + auto leftSphereRitem = std::make_unique(); + leftSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(+5.0f, 3.5f, -10.0f + i * 5.0f)))); + leftSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + leftSphereRitem->MaterialIndex = eMaterialType::mirror; + leftSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + leftSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + leftSphereRitem->IndexCount = leftSphereRitem->geo->geoMap["sphere"].IndexCount; + leftSphereRitem->StartIndexLocation = leftSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + leftSphereRitem->BaseVertexLocation = leftSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(leftSphereRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(leftSphereRitem.get()); + m_vecAll.push_back(std::move(leftSphereRitem)); + + auto rightSphereRitem = std::make_unique(); + rightSphereRitem->modeToWorld = Transpose(Matrix4(AffineTransform(Vector3(-5.0f, 3.5f, -10.0f + i * 5.0f)))); + rightSphereRitem->texTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->matTransform = Transpose(Matrix4(kIdentity)); + rightSphereRitem->MaterialIndex = eMaterialType::mirror; + rightSphereRitem->geo = m_mapGeometries["shapeGeo"].get(); + rightSphereRitem->PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + rightSphereRitem->IndexCount = rightSphereRitem->geo->geoMap["sphere"].IndexCount; + rightSphereRitem->StartIndexLocation = rightSphereRitem->geo->geoMap["sphere"].StartIndexLocation; + rightSphereRitem->BaseVertexLocation = rightSphereRitem->geo->geoMap["sphere"].BaseVertexLocation; + m_vecRenderItems[(int)RenderLayer::Opaque].push_back(rightSphereRitem.get()); + m_vecRenderItems[(int)RenderLayer::allButSky].push_back(rightSphereRitem.get()); + m_vecAll.push_back(std::move(rightSphereRitem)); + } +} + +void GameApp::cameraUpdate() +{ + // ��������ת + if (GameInput::IsPressed(GameInput::kMouse0)) { + // Make each pixel correspond to a quarter of a degree. + float dx = GameInput::GetAnalogInput(GameInput::kAnalogMouseX) - m_xLast; + float dy = GameInput::GetAnalogInput(GameInput::kAnalogMouseY) - m_yLast; + + if (GameInput::IsPressed(GameInput::kMouse0)) + { + // Update angles based on input to orbit camera around box. + m_xRotate += (dx - m_xDiff); + m_yRotate += (dy - m_yDiff); + m_yRotate = (std::max)(-0.0f + 0.1f, m_yRotate); + m_yRotate = (std::min)(XM_PIDIV2 - 0.1f, m_yRotate); + } + + m_xDiff = dx; + m_yDiff = dy; + + m_xLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseX); + m_yLast += GameInput::GetAnalogInput(GameInput::kAnalogMouseY); + } + else + { + m_xDiff = 0.0f; + m_yDiff = 0.0f; + m_xLast = 0.0f; + m_yLast = 0.0f; + } + + // ������Ϣ���Ŵ���С + if (float fl = GameInput::GetAnalogInput(GameInput::kAnalogMouseScroll)) + { + if (fl > 0) + m_radius -= 5; + else + m_radius += 5; + } + + // ���������λ�� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + float x = m_radius * cosf(m_yRotate) * sinf(m_xRotate); + float y = m_radius * sinf(m_yRotate); + float z = -m_radius * cosf(m_yRotate) * cosf(m_xRotate); + + m_Camera.SetEyeAtUp({ x, y, z }, Math::Vector3(Math::kZero), Math::Vector3(Math::kYUnitVector)); + m_Camera.Update(); +} + +void GameApp::buildCubeCamera(float x, float y, float z) +{ + // �������� + Math::Vector3 targets[6] = + { + { x + 1.0f, y, z }, // +X + { x - 1.0f, y, z }, // -X + { x, y + 1.0f, z }, // +Y + { x, y - 1.0f, z }, // -Y + { x, y, z + 1.0f }, // +Z + { x, y, z - 1.0f } // -Z + }; + + // ��������Ϸ� + Math::Vector3 ups[6] = + { + { +0.0f, +1.0f, +0.0f }, // +X + { +0.0f, +1.0f, +0.0f }, // -X + { +0.0f, +0.0f, -1.0f }, // +Y + { +0.0f, +0.0f, +1.0f }, // -Y + { +0.0f, +1.0f, +0.0f }, // +Z + { +0.0f, +1.0f, +0.0f } // -Z + }; + + for (int i = 0; i < 6; ++i) + { + m_CameraCube[i].SetEyeAtUp({ x, y, z }, targets[i], ups[i]); + m_CameraCube[i].SetPerspectiveMatrix(Math::XM_PIDIV2, 1.0f, 0.1f, 1000.0f); + m_CameraCube[i].Update(); + } +} + +void GameApp::updatePassConstants(PassConstants& psc, Math::BaseCamera& camera) +{ + psc.viewProj = Transpose(camera.GetViewProjMatrix()); + psc.modelToShadow = Transpose(m_CameraShadow.GetShadowMatrix()); + psc.eyePosW = camera.GetPosition(); + psc.ambientLight = { 0.25f, 0.25f, 0.35f, 1.0f }; + psc.Lights[0].Direction = mRotatedLightDirections[0]; + psc.Lights[0].Strength = { 0.9f, 0.8f, 0.7f }; + psc.Lights[1].Direction = mRotatedLightDirections[1]; + psc.Lights[1].Strength = { 0.4f, 0.4f, 0.4f }; + psc.Lights[2].Direction = mRotatedLightDirections[2]; + psc.Lights[2].Strength = { 0.2f, 0.2f, 0.2f }; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/GameApp.h b/Chapter 20 Shadow Mapping/GameApp.h new file mode 100644 index 0000000..ae337b6 --- /dev/null +++ b/Chapter 20 Shadow Mapping/GameApp.h @@ -0,0 +1,129 @@ +#pragma once + +#include +#include "GameCore.h" +#include "RootSignature.h" +#include "GpuBuffer.h" +#include "PipelineState.h" +#include "Camera.h" +#include "ShadowCamera.h" +#include "d3dUtil.h" +#include "CameraController.h" + +class RootSignature; +class GraphicsPSO; +class GameApp : public GameCore::IGameApp +{ +public: + + GameApp(void) {} + + virtual void Startup(void) override; + virtual void Cleanup(void) override; + + virtual void Update(float deltaT) override; + virtual void RenderScene(void) override; + virtual void RenderUI(class GraphicsContext& gfxContext) override; + +private: + void cameraUpdate(); // camera���� + +private: + void buildPSO(); + void buildGeo(); + void buildMaterials(); + void buildRenderItem(); + void drawRenderItems(GraphicsContext& gfxContext, std::vector& ritems); + + void buildCubeCamera(float x, float y, float z); + void DrawShadow(GraphicsContext& gfxContext); + void DrawSceneToCubeMap(GraphicsContext& gfxContext); + +private: + void buildShapeGeo(); + void buildSkullGeo(); + + void updatePassConstants(PassConstants& psc, Math::BaseCamera& camera); + +private: + // ���νṹmap + std::unordered_map> m_mapGeometries; + + // ��Ⱦ���� + enum class RenderLayer : int + { + Opaque = 0, + OpaqueDynamicReflectors, + Sky, + allButSky, + shadowDebug, + Count + }; + std::vector m_vecRenderItems[(int)RenderLayer::Count]; + std::vector> m_vecAll; + + enum eMaterialType + { + bricks = 0, + tile, + mirror, + skull, + sky + }; + StructuredBuffer m_mats; // t1 �洢���е��������� + std::vector m_srvs; // �洢���е�������Դ + +private: + // ��ǩ�� + RootSignature m_RootSignature; + + // ��Ⱦ��ˮ�� + enum ePSOType + { + E_EPT_DEFAULT = 1, + E_EPT_SKY, + E_EPT_SHADOW, + E_EPT_SHADOW_DEBUG, + }; + std::unordered_map m_mapPSO; + + RenderItem* m_SkullRItem = nullptr; + + // ��պ������ + Math::Camera m_CameraCube[6]; + + // ��Ӱ����� + GameCore::ShadowCamera m_CameraShadow; + + // ��Դ + float mLightRotationAngle = 0.0f; + XMFLOAT3 mBaseLightDirections[3] = { + XMFLOAT3(0.57735f, -0.57735f, 0.57735f), + XMFLOAT3(-0.57735f, -0.57735f, 0.57735f), + XMFLOAT3(0.0f, -0.707f, -0.707f) + }; + XMFLOAT3 mRotatedLightDirections[3]; + + // ����� + // ��(0, 0, -m_radius) Ϊ��ʼλ�� + Math::Camera m_Camera; + D3D12_VIEWPORT m_MainViewport; + D3D12_RECT m_MainScissor; + + // ����������� + std::unique_ptr m_CameraController; + + // �뾶 + float m_radius = 10.0f; + + // x���򻡶ȣ��������x�������ӣ���m_xRotate���� + float m_xRotate = -Math::XM_PIDIV4 / 2.0f; + float m_xLast = 0.0f; + float m_xDiff = 0.0f; + + // y���򻡶ȣ������y�������ӣ���m_yRotate���� + // m_yRotate��Χ [-XM_PIDIV2 + 0.1f, XM_PIDIV2 - 0.1f] + float m_yRotate = Math::XM_PIDIV4 / 2.0f; + float m_yLast = 0.0f; + float m_yDiff = 0.0f; +}; \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/GeometryGenerator.cpp b/Chapter 20 Shadow Mapping/GeometryGenerator.cpp new file mode 100644 index 0000000..ddfc83c --- /dev/null +++ b/Chapter 20 Shadow Mapping/GeometryGenerator.cpp @@ -0,0 +1,657 @@ +//*************************************************************************************** +// GeometryGenerator.cpp by Frank Luna (C) 2011 All Rights Reserved. +//*************************************************************************************** + +#include "GeometryGenerator.h" +#include + +using namespace DirectX; + +GeometryGenerator::MeshData GeometryGenerator::CreateBox(float width, float height, float depth, uint32 numSubdivisions) +{ + MeshData meshData; + + // + // Create the vertices. + // + + Vertex v[24]; + + float w2 = 0.5f*width; + float h2 = 0.5f*height; + float d2 = 0.5f*depth; + + // Fill in the front face vertex data. + v[0] = Vertex(-w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[1] = Vertex(-w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[2] = Vertex(+w2, +h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[3] = Vertex(+w2, -h2, -d2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the back face vertex data. + v[4] = Vertex(-w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[5] = Vertex(+w2, -h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[6] = Vertex(+w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[7] = Vertex(-w2, +h2, +d2, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the top face vertex data. + v[8] = Vertex(-w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[9] = Vertex(-w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[10] = Vertex(+w2, +h2, +d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + v[11] = Vertex(+w2, +h2, -d2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + + // Fill in the bottom face vertex data. + v[12] = Vertex(-w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f); + v[13] = Vertex(+w2, -h2, -d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + v[14] = Vertex(+w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + v[15] = Vertex(-w2, -h2, +d2, 0.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + // Fill in the left face vertex data. + v[16] = Vertex(-w2, -h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f); + v[17] = Vertex(-w2, +h2, +d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); + v[18] = Vertex(-w2, +h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f); + v[19] = Vertex(-w2, -h2, -d2, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f); + + // Fill in the right face vertex data. + v[20] = Vertex(+w2, -h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + v[21] = Vertex(+w2, +h2, -d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + v[22] = Vertex(+w2, +h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f); + v[23] = Vertex(+w2, -h2, +d2, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + + meshData.Vertices.assign(&v[0], &v[24]); + + // + // Create the indices. + // + + uint32 i[36]; + + // Fill in the front face index data + i[0] = 0; i[1] = 1; i[2] = 2; + i[3] = 0; i[4] = 2; i[5] = 3; + + // Fill in the back face index data + i[6] = 4; i[7] = 5; i[8] = 6; + i[9] = 4; i[10] = 6; i[11] = 7; + + // Fill in the top face index data + i[12] = 8; i[13] = 9; i[14] = 10; + i[15] = 8; i[16] = 10; i[17] = 11; + + // Fill in the bottom face index data + i[18] = 12; i[19] = 13; i[20] = 14; + i[21] = 12; i[22] = 14; i[23] = 15; + + // Fill in the left face index data + i[24] = 16; i[25] = 17; i[26] = 18; + i[27] = 16; i[28] = 18; i[29] = 19; + + // Fill in the right face index data + i[30] = 20; i[31] = 21; i[32] = 22; + i[33] = 20; i[34] = 22; i[35] = 23; + + meshData.Indices32.assign(&i[0], &i[36]); + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateSphere(float radius, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Compute the vertices stating at the top pole and moving down the stacks. + // + + // Poles: note that there will be texture coordinate distortion as there is + // not a unique point on the texture map to assign to the pole when mapping + // a rectangular texture onto a sphere. + Vertex topVertex(0.0f, +radius, 0.0f, 0.0f, +1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f); + Vertex bottomVertex(0.0f, -radius, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + + meshData.Vertices.push_back( topVertex ); + + float phiStep = XM_PI/stackCount; + float thetaStep = 2.0f*XM_PI/sliceCount; + + // Compute vertices for each stack ring (do not count the poles as rings). + for(uint32 i = 1; i <= stackCount-1; ++i) + { + float phi = i*phiStep; + + // Vertices of ring. + for(uint32 j = 0; j <= sliceCount; ++j) + { + float theta = j*thetaStep; + + Vertex v; + + // spherical to cartesian + v.Position.x = radius*sinf(phi)*cosf(theta); + v.Position.y = radius*cosf(phi); + v.Position.z = radius*sinf(phi)*sinf(theta); + + // Partial derivative of P with respect to theta + v.TangentU.x = -radius*sinf(phi)*sinf(theta); + v.TangentU.y = 0.0f; + v.TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&v.TangentU); + XMStoreFloat3(&v.TangentU, XMVector3Normalize(T)); + + XMVECTOR p = XMLoadFloat3(&v.Position); + XMStoreFloat3(&v.Normal, XMVector3Normalize(p)); + + v.TexC.x = theta / XM_2PI; + v.TexC.y = phi / XM_PI; + + meshData.Vertices.push_back( v ); + } + } + + meshData.Vertices.push_back( bottomVertex ); + + // + // Compute indices for top stack. The top stack was written first to the vertex buffer + // and connects the top pole to the first ring. + // + + for(uint32 i = 1; i <= sliceCount; ++i) + { + meshData.Indices32.push_back(0); + meshData.Indices32.push_back(i+1); + meshData.Indices32.push_back(i); + } + + // + // Compute indices for inner stacks (not connected to poles). + // + + // Offset the indices to the index of the first vertex in the first ring. + // This is just skipping the top pole vertex. + uint32 baseIndex = 1; + uint32 ringVertexCount = sliceCount + 1; + for(uint32 i = 0; i < stackCount-2; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j); + meshData.Indices32.push_back(baseIndex + i*ringVertexCount + j+1); + meshData.Indices32.push_back(baseIndex + (i+1)*ringVertexCount + j+1); + } + } + + // + // Compute indices for bottom stack. The bottom stack was written last to the vertex buffer + // and connects the bottom pole to the bottom ring. + // + + // South pole vertex was added last. + uint32 southPoleIndex = (uint32)meshData.Vertices.size()-1; + + // Offset the indices to the index of the first vertex in the last ring. + baseIndex = southPoleIndex - ringVertexCount; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(southPoleIndex); + meshData.Indices32.push_back(baseIndex+i); + meshData.Indices32.push_back(baseIndex+i+1); + } + + return meshData; +} + +void GeometryGenerator::Subdivide(MeshData& meshData) +{ + // Save a copy of the input geometry. + MeshData inputCopy = meshData; + + + meshData.Vertices.resize(0); + meshData.Indices32.resize(0); + + // v1 + // * + // / \ + // / \ + // m0*-----*m1 + // / \ / \ + // / \ / \ + // *-----*-----* + // v0 m2 v2 + + uint32 numTris = (uint32)inputCopy.Indices32.size()/3; + for(uint32 i = 0; i < numTris; ++i) + { + Vertex v0 = inputCopy.Vertices[ inputCopy.Indices32[i*3+0] ]; + Vertex v1 = inputCopy.Vertices[ inputCopy.Indices32[i*3+1] ]; + Vertex v2 = inputCopy.Vertices[ inputCopy.Indices32[i*3+2] ]; + + // + // Generate the midpoints. + // + + Vertex m0 = MidPoint(v0, v1); + Vertex m1 = MidPoint(v1, v2); + Vertex m2 = MidPoint(v0, v2); + + // + // Add new geometry. + // + + meshData.Vertices.push_back(v0); // 0 + meshData.Vertices.push_back(v1); // 1 + meshData.Vertices.push_back(v2); // 2 + meshData.Vertices.push_back(m0); // 3 + meshData.Vertices.push_back(m1); // 4 + meshData.Vertices.push_back(m2); // 5 + + meshData.Indices32.push_back(i*6+0); + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+5); + + meshData.Indices32.push_back(i*6+5); + meshData.Indices32.push_back(i*6+4); + meshData.Indices32.push_back(i*6+2); + + meshData.Indices32.push_back(i*6+3); + meshData.Indices32.push_back(i*6+1); + meshData.Indices32.push_back(i*6+4); + } +} + +GeometryGenerator::Vertex GeometryGenerator::MidPoint(const Vertex& v0, const Vertex& v1) +{ + XMVECTOR p0 = XMLoadFloat3(&v0.Position); + XMVECTOR p1 = XMLoadFloat3(&v1.Position); + + XMVECTOR n0 = XMLoadFloat3(&v0.Normal); + XMVECTOR n1 = XMLoadFloat3(&v1.Normal); + + XMVECTOR tan0 = XMLoadFloat3(&v0.TangentU); + XMVECTOR tan1 = XMLoadFloat3(&v1.TangentU); + + XMVECTOR tex0 = XMLoadFloat2(&v0.TexC); + XMVECTOR tex1 = XMLoadFloat2(&v1.TexC); + + // Compute the midpoints of all the attributes. Vectors need to be normalized + // since linear interpolating can make them not unit length. + XMVECTOR pos = 0.5f*(p0 + p1); + XMVECTOR normal = XMVector3Normalize(0.5f*(n0 + n1)); + XMVECTOR tangent = XMVector3Normalize(0.5f*(tan0+tan1)); + XMVECTOR tex = 0.5f*(tex0 + tex1); + + Vertex v; + XMStoreFloat3(&v.Position, pos); + XMStoreFloat3(&v.Normal, normal); + XMStoreFloat3(&v.TangentU, tangent); + XMStoreFloat2(&v.TexC, tex); + + return v; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGeosphere(float radius, uint32 numSubdivisions) +{ + MeshData meshData; + + // Put a cap on the number of subdivisions. + numSubdivisions = std::min(numSubdivisions, 6u); + + // Approximate a sphere by tessellating an icosahedron. + + const float X = 0.525731f; + const float Z = 0.850651f; + + XMFLOAT3 pos[12] = + { + XMFLOAT3(-X, 0.0f, Z), XMFLOAT3(X, 0.0f, Z), + XMFLOAT3(-X, 0.0f, -Z), XMFLOAT3(X, 0.0f, -Z), + XMFLOAT3(0.0f, Z, X), XMFLOAT3(0.0f, Z, -X), + XMFLOAT3(0.0f, -Z, X), XMFLOAT3(0.0f, -Z, -X), + XMFLOAT3(Z, X, 0.0f), XMFLOAT3(-Z, X, 0.0f), + XMFLOAT3(Z, -X, 0.0f), XMFLOAT3(-Z, -X, 0.0f) + }; + + uint32 k[60] = + { + 1,4,0, 4,9,0, 4,5,9, 8,5,4, 1,8,4, + 1,10,8, 10,3,8, 8,3,5, 3,2,5, 3,7,2, + 3,10,7, 10,6,7, 6,11,7, 6,0,11, 6,1,0, + 10,1,6, 11,0,9, 2,11,9, 5,2,9, 11,2,7 + }; + + meshData.Vertices.resize(12); + meshData.Indices32.assign(&k[0], &k[60]); + + for(uint32 i = 0; i < 12; ++i) + meshData.Vertices[i].Position = pos[i]; + + for(uint32 i = 0; i < numSubdivisions; ++i) + Subdivide(meshData); + + // Project vertices onto sphere and scale. + for(uint32 i = 0; i < meshData.Vertices.size(); ++i) + { + // Project onto unit sphere. + XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&meshData.Vertices[i].Position)); + + // Project onto sphere. + XMVECTOR p = radius*n; + + XMStoreFloat3(&meshData.Vertices[i].Position, p); + XMStoreFloat3(&meshData.Vertices[i].Normal, n); + + // Derive texture coordinates from spherical coordinates. + float theta = atan2f(meshData.Vertices[i].Position.z, meshData.Vertices[i].Position.x); + + // Put in [0, 2pi]. + if(theta < 0.0f) + theta += XM_2PI; + + float phi = acosf(meshData.Vertices[i].Position.y / radius); + + meshData.Vertices[i].TexC.x = theta/XM_2PI; + meshData.Vertices[i].TexC.y = phi/XM_PI; + + // Partial derivative of P with respect to theta + meshData.Vertices[i].TangentU.x = -radius*sinf(phi)*sinf(theta); + meshData.Vertices[i].TangentU.y = 0.0f; + meshData.Vertices[i].TangentU.z = +radius*sinf(phi)*cosf(theta); + + XMVECTOR T = XMLoadFloat3(&meshData.Vertices[i].TangentU); + XMStoreFloat3(&meshData.Vertices[i].TangentU, XMVector3Normalize(T)); + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount) +{ + MeshData meshData; + + // + // Build Stacks. + // + + float stackHeight = height / stackCount; + + // Amount to increment radius as we move up each stack level from bottom to top. + float radiusStep = (topRadius - bottomRadius) / stackCount; + + uint32 ringCount = stackCount+1; + + // Compute vertices for each stack ring starting at the bottom and moving up. + for(uint32 i = 0; i < ringCount; ++i) + { + float y = -0.5f*height + i*stackHeight; + float r = bottomRadius + i*radiusStep; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 j = 0; j <= sliceCount; ++j) + { + Vertex vertex; + + float c = cosf(j*dTheta); + float s = sinf(j*dTheta); + + vertex.Position = XMFLOAT3(r*c, y, r*s); + + vertex.TexC.x = (float)j/sliceCount; + vertex.TexC.y = 1.0f - (float)i/stackCount; + + // Cylinder can be parameterized as follows, where we introduce v + // parameter that goes in the same direction as the v tex-coord + // so that the bitangent goes in the same direction as the v tex-coord. + // Let r0 be the bottom radius and let r1 be the top radius. + // y(v) = h - hv for v in [0,1]. + // r(v) = r1 + (r0-r1)v + // + // x(t, v) = r(v)*cos(t) + // y(t, v) = h - hv + // z(t, v) = r(v)*sin(t) + // + // dx/dt = -r(v)*sin(t) + // dy/dt = 0 + // dz/dt = +r(v)*cos(t) + // + // dx/dv = (r0-r1)*cos(t) + // dy/dv = -h + // dz/dv = (r0-r1)*sin(t) + + // This is unit length. + vertex.TangentU = XMFLOAT3(-s, 0.0f, c); + + float dr = bottomRadius-topRadius; + XMFLOAT3 bitangent(dr*c, -height, dr*s); + + XMVECTOR T = XMLoadFloat3(&vertex.TangentU); + XMVECTOR B = XMLoadFloat3(&bitangent); + XMVECTOR N = XMVector3Normalize(XMVector3Cross(T, B)); + XMStoreFloat3(&vertex.Normal, N); + + meshData.Vertices.push_back(vertex); + } + } + + // Add one because we duplicate the first and last vertex per ring + // since the texture coordinates are different. + uint32 ringVertexCount = sliceCount+1; + + // Compute indices for each stack. + for(uint32 i = 0; i < stackCount; ++i) + { + for(uint32 j = 0; j < sliceCount; ++j) + { + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + + meshData.Indices32.push_back(i*ringVertexCount + j); + meshData.Indices32.push_back((i+1)*ringVertexCount + j+1); + meshData.Indices32.push_back(i*ringVertexCount + j+1); + } + } + + BuildCylinderTopCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + BuildCylinderBottomCap(bottomRadius, topRadius, height, sliceCount, stackCount, meshData); + + return meshData; +} + +void GeometryGenerator::BuildCylinderTopCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + uint32 baseIndex = (uint32)meshData.Vertices.size(); + + float y = 0.5f*height; + float dTheta = 2.0f*XM_PI/sliceCount; + + // Duplicate cap ring vertices because the texture coordinates and normals differ. + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = topRadius*cosf(i*dTheta); + float z = topRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i+1); + meshData.Indices32.push_back(baseIndex + i); + } +} + +void GeometryGenerator::BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, + uint32 sliceCount, uint32 stackCount, MeshData& meshData) +{ + // + // Build bottom cap. + // + + uint32 baseIndex = (uint32)meshData.Vertices.size(); + float y = -0.5f*height; + + // vertices of ring + float dTheta = 2.0f*XM_PI/sliceCount; + for(uint32 i = 0; i <= sliceCount; ++i) + { + float x = bottomRadius*cosf(i*dTheta); + float z = bottomRadius*sinf(i*dTheta); + + // Scale down by the height to try and make top cap texture coord area + // proportional to base. + float u = x/height + 0.5f; + float v = z/height + 0.5f; + + meshData.Vertices.push_back( Vertex(x, y, z, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, u, v) ); + } + + // Cap center vertex. + meshData.Vertices.push_back( Vertex(0.0f, y, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f) ); + + // Cache the index of center vertex. + uint32 centerIndex = (uint32)meshData.Vertices.size()-1; + + for(uint32 i = 0; i < sliceCount; ++i) + { + meshData.Indices32.push_back(centerIndex); + meshData.Indices32.push_back(baseIndex + i); + meshData.Indices32.push_back(baseIndex + i+1); + } +} + +GeometryGenerator::MeshData GeometryGenerator::CreateGrid(float width, float depth, uint32 m, uint32 n) +{ + MeshData meshData; + + uint32 vertexCount = m*n; + uint32 faceCount = (m-1)*(n-1)*2; + + // + // Create the vertices. + // + + float halfWidth = 0.5f*width; + float halfDepth = 0.5f*depth; + + float dx = width / (n-1); + float dz = depth / (m-1); + + float du = 1.0f / (n-1); + float dv = 1.0f / (m-1); + + meshData.Vertices.resize(vertexCount); + for(uint32 i = 0; i < m; ++i) + { + float z = halfDepth - i*dz; + for(uint32 j = 0; j < n; ++j) + { + float x = -halfWidth + j*dx; + + meshData.Vertices[i*n+j].Position = XMFLOAT3(x, 0.0f, z); + meshData.Vertices[i*n+j].Normal = XMFLOAT3(0.0f, 1.0f, 0.0f); + meshData.Vertices[i*n+j].TangentU = XMFLOAT3(1.0f, 0.0f, 0.0f); + + // Stretch texture over grid. + meshData.Vertices[i*n+j].TexC.x = j*du; + meshData.Vertices[i*n+j].TexC.y = i*dv; + } + } + + // + // Create the indices. + // + + meshData.Indices32.resize(faceCount*3); // 3 indices per face + + // Iterate over each quad and compute indices. + uint32 k = 0; + for(uint32 i = 0; i < m-1; ++i) + { + for(uint32 j = 0; j < n-1; ++j) + { + meshData.Indices32[k] = i*n+j; + meshData.Indices32[k+1] = i*n+j+1; + meshData.Indices32[k+2] = (i+1)*n+j; + + meshData.Indices32[k+3] = (i+1)*n+j; + meshData.Indices32[k+4] = i*n+j+1; + meshData.Indices32[k+5] = (i+1)*n+j+1; + + k += 6; // next quad + } + } + + return meshData; +} + +GeometryGenerator::MeshData GeometryGenerator::CreateQuad(float x, float y, float w, float h, float depth) +{ + MeshData meshData; + + meshData.Vertices.resize(4); + meshData.Indices32.resize(6); + + // Position coordinates specified in NDC space. + meshData.Vertices[0] = Vertex( + x, y - h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f); + + meshData.Vertices[1] = Vertex( + x, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f); + + meshData.Vertices[2] = Vertex( + x+w, y, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f); + + meshData.Vertices[3] = Vertex( + x+w, y-h, depth, + 0.0f, 0.0f, -1.0f, + 1.0f, 0.0f, 0.0f, + 1.0f, 1.0f); + + meshData.Indices32[0] = 0; + meshData.Indices32[1] = 1; + meshData.Indices32[2] = 2; + + meshData.Indices32[3] = 0; + meshData.Indices32[4] = 2; + meshData.Indices32[5] = 3; + + return meshData; +} diff --git a/Chapter 20 Shadow Mapping/GeometryGenerator.h b/Chapter 20 Shadow Mapping/GeometryGenerator.h new file mode 100644 index 0000000..db4944e --- /dev/null +++ b/Chapter 20 Shadow Mapping/GeometryGenerator.h @@ -0,0 +1,119 @@ +//*************************************************************************************** +// GeometryGenerator.h by Frank Luna (C) 2011 All Rights Reserved. +// +// Defines a static class for procedurally generating the geometry of +// common mathematical objects. +// +// All triangles are generated "outward" facing. If you want "inward" +// facing triangles (for example, if you want to place the camera inside +// a sphere to simulate a sky), you will need to: +// 1. Change the Direct3D cull mode or manually reverse the winding order. +// 2. Invert the normal. +// 3. Update the texture coordinates and tangent vectors. +//*************************************************************************************** + +#pragma once + +#include +#include +#include + +class GeometryGenerator +{ +public: + + using uint16 = std::uint16_t; + using uint32 = std::uint32_t; + + struct Vertex + { + Vertex(){} + Vertex( + const DirectX::XMFLOAT3& p, + const DirectX::XMFLOAT3& n, + const DirectX::XMFLOAT3& t, + const DirectX::XMFLOAT2& uv) : + Position(p), + Normal(n), + TangentU(t), + TexC(uv){} + Vertex( + float px, float py, float pz, + float nx, float ny, float nz, + float tx, float ty, float tz, + float u, float v) : + Position(px,py,pz), + Normal(nx,ny,nz), + TangentU(tx, ty, tz), + TexC(u,v){} + + DirectX::XMFLOAT3 Position; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT3 TangentU; + DirectX::XMFLOAT2 TexC; + }; + + struct MeshData + { + std::vector Vertices; + std::vector Indices32; + + std::vector& GetIndices16() + { + if(mIndices16.empty()) + { + mIndices16.resize(Indices32.size()); + for(size_t i = 0; i < Indices32.size(); ++i) + mIndices16[i] = static_cast(Indices32[i]); + } + + return mIndices16; + } + + private: + std::vector mIndices16; + }; + + /// + /// Creates a box centered at the origin with the given dimensions, where each + /// face has m rows and n columns of vertices. + /// + MeshData CreateBox(float width, float height, float depth, uint32 numSubdivisions); + + /// + /// Creates a sphere centered at the origin with the given radius. The + /// slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateSphere(float radius, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates a geosphere centered at the origin with the given radius. The + /// depth controls the level of tessellation. + /// + MeshData CreateGeosphere(float radius, uint32 numSubdivisions); + + /// + /// Creates a cylinder parallel to the y-axis, and centered about the origin. + /// The bottom and top radius can vary to form various cone shapes rather than true + // cylinders. The slices and stacks parameters control the degree of tessellation. + /// + MeshData CreateCylinder(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount); + + /// + /// Creates an mxn grid in the xz-plane with m rows and n columns, centered + /// at the origin with the specified width and depth. + /// + MeshData CreateGrid(float width, float depth, uint32 m, uint32 n); + + /// + /// Creates a quad aligned with the screen. This is useful for postprocessing and screen effects. + /// + MeshData CreateQuad(float x, float y, float w, float h, float depth); + +private: + void Subdivide(MeshData& meshData); + Vertex MidPoint(const Vertex& v0, const Vertex& v1); + void BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); + void BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32 sliceCount, uint32 stackCount, MeshData& meshData); +}; + diff --git a/Chapter 20 Shadow Mapping/Models/skull.txt b/Chapter 20 Shadow Mapping/Models/skull.txt new file mode 100644 index 0000000..5e0f3ce --- /dev/null +++ b/Chapter 20 Shadow Mapping/Models/skull.txt @@ -0,0 +1,91423 @@ +VertexCount: 31076 +TriangleCount: 60339 +VertexList (pos, normal) +{ + 0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907 + 0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907 + 0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907 + 1.12127 1.64042 -1.94785 -0.0941668 0.904117 0.416779 + 1.04654 1.60198 -1.86107 0.0955379 0.877073 0.47076 + 1.06964 1.60894 -1.87873 0.0955378 0.877073 0.47076 + 1.151 1.65245 -1.7697 -0.378509 0.925514 -0.01241 + 1.11866 1.63277 -1.6602 -0.373131 0.92607 0.0562804 + 1.13374 1.64126 -1.6999 -0.373131 0.92607 0.0562804 + -1.55433 1.51188 0.462787 -0.650629 -0.723091 0.231995 + -1.58157 1.5563 0.524846 -0.650628 -0.723091 0.231995 + -1.63136 1.61203 0.558918 -0.189662 0.407906 -0.893108 + -0.948906 1.69815 -1.06444 0.06309 -0.586398 -0.807562 + -0.883508 1.6865 -1.05088 0.333777 -0.941824 -0.0394929 + -0.901206 1.61571 -1.00085 0.06309 -0.586398 -0.807562 + -0.698766 2.11852 0.21365 0.449339 0.0647742 -0.89101 + -0.800745 2.16722 0.143497 0.233569 0.963598 0.130093 + -0.757773 2.14908 0.186115 0.510221 0.846084 -0.154329 + -0.026884 2.45107 -1.11594 0.569732 0.569877 -0.592153 + -0.026893 2.5207 -1.04894 0.569732 0.569877 -0.592153 + -0.00861 2.52374 -1.02842 -0.412524 0.686678 0.59858 + -0.925082 1.67623 0.632925 0.327682 0.790395 0.517591 + -1.02369 1.81801 0.51875 0.764479 0.632399 0.12507 + -1.07771 1.88665 0.501859 0.768834 0.630814 0.104728 + -1.21447 1.45124 0.759218 -0.977394 0.0525264 0.204796 + -1.24213 1.58922 0.591819 -0.977394 0.0525264 0.204796 + -1.25585 1.60974 0.521077 -0.977394 0.0525264 0.204796 + -1.46174 1.30584 0.581853 0.864067 -0.492757 0.102851 + -1.46161 1.25622 0.403406 0.828898 0.539105 -0.149312 + -1.49721 1.30268 0.373529 0.828898 0.539105 -0.149312 + -1.14801 1.74733 -2.15642 0.627914 0.700696 0.338748 + -1.14244 1.71124 -2.06432 0.928712 0.127139 -0.348326 + -1.11856 1.68698 -2.02151 0.312969 0.890586 0.330011 + -1.0984 1.63391 -1.92098 0.487942 -0.510099 -0.708315 + -1.04635 1.60183 -1.86122 0.772868 0.0817976 -0.629273 + -1.12108 1.64027 -1.948 0.772868 0.0817976 -0.629273 + -1.13384 1.64128 -1.69995 0.359386 0.931225 0.060508 + -1.11876 1.63288 -1.66019 0.359386 0.931225 0.060508 + -1.1511 1.65248 -1.76974 0.66363 0.744796 -0.0698237 + -1.18233 1.23731 -1.58105 -0.922929 -0.0737541 -0.37784 + -1.17721 1.24002 -1.59409 -0.922929 -0.073754 -0.37784 + -1.16328 1.23237 -1.62663 -0.922929 -0.073754 -0.37784 + -0.91314 1.26874 -2.12118 -0.105577 0.815147 0.569551 + -0.898511 1.25175 -2.09719 -0.887193 -0.36437 0.283061 + -0.883033 1.24766 -2.05395 -0.887193 -0.36437 0.283061 + 1.04301 1.16262 -1.8932 0.397469 0.0978369 -0.912385 + 1.01556 1.17173 -1.90419 0.0633285 0.952548 -0.297727 + 0.980129 1.18837 -1.91784 0.397469 0.0978369 -0.912385 + 0.800364 1.32241 -2.89805 0.629678 0.750854 -0.199307 + 0.806559 1.32541 -2.88944 0.823409 -0.271908 -0.49806 + 0.831275 1.27798 -2.82269 0.823409 -0.271908 -0.49806 + -2.04759 1.79087 -0.419645 -0.988527 -0.10864 0.104937 + -2.05701 1.81152 -0.487006 -0.997315 -0.0537478 0.0497454 + -2.05691 1.78848 -0.509912 -0.980777 -0.193847 -0.0223518 + -0.692099 1.2342 -2.95767 -0.573742 0.803924 -0.156607 + -0.695861 1.23354 -2.94732 -0.573742 0.803924 -0.156607 + -0.697976 1.23713 -2.92113 -0.573742 0.803924 -0.156607 + 2.05691 1.78848 -0.509912 0.998191 -0.0583625 -0.0144192 + 2.05701 1.81152 -0.487006 0.997306 -0.0538525 0.0498041 + 2.04758 1.79087 -0.419637 0.988507 -0.108734 0.105031 + 1.24544 1.07804 -1.44958 0.649224 -0.0182511 -0.760378 + 1.21165 1.0146 -1.47691 0.166265 0.745609 -0.645308 + 1.1173 1.02629 -1.55774 0.649224 -0.0182511 -0.760378 + -1.11728 1.02629 -1.55775 -0.649255 -0.0183743 -0.760349 + -1.21163 1.0146 -1.47691 -0.166337 0.745526 -0.645385 + -1.24542 1.07804 -1.44959 -0.649255 -0.0183743 -0.760349 + -0.806332 1.74827 -2.76421 -0.434612 0.209157 0.875994 + -0.814274 1.75317 -2.76932 -0.434612 0.209157 0.875994 + -0.839872 1.7517 -2.78167 -0.434612 0.209157 0.875994 + 0.821988 1.74942 -2.77501 0.329372 -0.519014 0.788757 + 0.814274 1.75317 -2.76932 0.329372 -0.519014 0.788757 + 0.785028 1.76407 -2.74993 0.329372 -0.519014 0.788757 + 0.888762 1.33938 -1.5282 0.00961599 0.997143 0.0749256 + 0.915406 1.33821 -1.5161 0.00961599 0.997143 0.0749256 + 0.921874 1.33846 -1.52023 0.00961599 0.997143 0.0749256 + -0.886486 1.45631 -2.24676 -0.396142 0.917961 0.0204671 + -0.902475 1.44951 -2.25152 -0.396142 0.917961 0.0204671 + -0.927139 1.43888 -2.25177 -0.396142 0.917961 0.0204671 + 1.04271 1.37679 -2.1176 0.2494 -0.0437617 0.967411 + 1.07451 1.36833 -2.12618 0.2494 -0.0437617 0.967411 + 1.08487 1.3765 -2.12848 0.2494 -0.0437617 0.967411 + -0.943902 1.36906 -1.86388 0.166581 0.42439 0.890025 + -0.967246 1.38002 -1.86474 0.166581 0.42439 0.890025 + -0.996414 1.38162 -1.86005 0.166581 0.42439 0.890025 + -0.909016 1.37928 -1.86229 -0.0199364 0.651776 0.75815 + -0.935798 1.39002 -1.87222 -0.0199364 0.651776 0.75815 + -0.977897 1.39575 -1.87826 -0.0199364 0.651776 0.75815 + -0.049274 1.91604 -3.38694 -0.350601 -0.899629 -0.26028 + -0.00609 1.89928 -3.38721 -0.369168 -0.892749 -0.258289 + 0 1.88767 -3.35525 -0.350601 -0.899629 -0.26028 + -0.00609 1.93619 -3.35816 -1 0 0 + -0.00609 1.92264 -3.37029 -1 0 0 + -0.011004 2.20909 -0.926224 0.999938 0.00708208 -0.00860211 + -0.011004 1.92279 -1.16193 0.999938 0.00708208 -0.00860211 + -0.014777 2.65435 -0.998232 0.995471 -0.0158419 0.0937386 + -0.011004 1.92279 -1.16193 0.785848 -0.421049 0.452946 + 0.031727 1.84797 -1.26694 0.686473 -0.714394 -0.13563 + 0.031727 1.84797 -1.26694 -0.882422 -0.413073 0.225172 + 0.064756 1.84625 -1.22456 -0.869915 -0.210535 0.446008 + -0.014777 2.65435 -0.998232 -0.770175 -0.241181 0.590477 + 0.161362 1.08963 0.567937 0.195338 0.92057 0.338221 + 0.15157 1.06403 0.643287 0.195338 0.92057 0.33822 + 0.202299 1.02452 0.721508 0.195338 0.92057 0.33822 + 1.13441 1.64513 -1.92742 0.664039 -0.745121 -0.0620253 + 1.12127 1.64042 -1.94785 0.577008 -0.794899 -0.187611 + 1.15142 1.68191 -2.03092 0.577008 -0.794899 -0.187611 + 1.14237 1.66056 -1.98515 -0.181527 0.904501 0.385909 + 1.15142 1.68191 -2.03092 -0.181527 0.904501 0.385909 + 0.173526 2.0323 -3.02581 0.421532 0.687881 -0.590873 + 0.164996 2.02874 -3.03604 0.421532 0.687881 -0.590873 + 0.156435 2.02905 -3.04178 0.421532 0.687881 -0.590873 + -0.018207 2.29242 -0.86875 -0.16113 0.133196 0.977904 + -0.011004 2.20909 -0.926224 -0.329358 -0.555228 0.763704 + 0.016514 2.25648 -0.879903 -0.329358 -0.555228 0.763704 + -0.011004 2.20909 -0.926224 0.902381 -0.119202 -0.414126 + 0.014767 2.65435 -0.998232 0.630835 -0.424023 -0.649809 + 0.016514 2.25648 -0.879903 0.902381 -0.119202 -0.414126 + -0.042206 0.01602 3.24589 0 0.626778 0.779198 + -0.001795 0.003301 3.25612 -0.369989 -0.0689123 0.926477 + 0.001808 0.003301 3.25612 0 0.626778 0.779198 + -0.972324 1.71963 0.59555 0.307586 0.790657 0.529389 + -0.848978 1.62264 0.668739 0.307586 0.790657 0.529389 + -1.237 1.53076 0.60848 -0.417096 0.181801 0.890494 + -1.26298 1.58624 0.584985 -0.819253 -0.356714 0.448976 + -1.33145 1.63145 0.543685 -0.417096 0.181801 0.890494 + -1.30863 1.42333 0.768356 -0.275156 -0.302959 -0.912417 + -1.35441 1.57088 0.718197 -0.944445 -0.205966 0.256128 + -1.37295 1.58577 0.661806 -0.944445 -0.205966 0.256128 + -0.995136 1.68804 -1.12174 0.696565 0.353522 -0.624355 + -0.971002 1.70035 -1.08785 0.696565 0.353522 -0.624355 + -0.948906 1.69815 -1.06444 0.696565 0.353522 -0.624355 + -0.686108 1.69237 -1.37664 -0.112009 0.079852 0.990494 + -0.668868 1.74969 -1.37931 0.942787 -0.288834 0.166514 + -0.692772 1.67708 -1.37616 -0.112009 0.079852 0.990494 + -0.991592 1.54803 -1.21183 -0.598015 -0.458623 -0.657299 + -0.955511 1.48158 -1.19533 -0.725065 -0.232811 0.648136 + -0.922127 1.44708 -1.17038 -0.725065 -0.232811 0.648136 + -1.02216 1.67959 -1.28351 0.554421 -0.0861091 -0.82777 + -1.00886 1.67572 -1.2742 0.686154 -0.0106421 -0.727379 + -0.994441 1.63158 -1.25995 0.554421 -0.0861091 -0.82777 + 0.02884 1.8545 -1.31386 0.209354 -0.97749 0.0261592 + -0.011004 1.92279 -1.16193 -0.876146 -0.481864 -0.0131942 + -0.566524 1.95757 -2.62998 0.80872 -0.586442 0.0453573 + -0.592266 1.91999 -2.61288 0.735678 -0.623871 -0.263747 + -0.593047 1.92413 -2.62486 0.731705 -0.641824 -0.229498 + -1.14934 1.85886 -1.621 -0.748231 -0.0628384 0.660455 + -1.18042 1.92842 -1.63808 0.695388 0.448556 0.561456 + -1.22327 1.99607 -1.63906 0.695388 0.448556 0.561456 + -0.848896 1.59106 -1.29936 0.0547428 0.991271 -0.119936 + -0.862195 1.59124 -1.28868 -0.607286 0.231798 -0.759916 + -0.906036 1.59329 -1.25302 -0.240133 -0.963498 -0.118355 + 0.040846 2.03476 -3.07187 0.32524 -0.797022 -0.508895 + 0.021963 2.02879 -3.08313 0.412098 0.310944 -0.856439 + -0.030826 2.04626 -3.10218 0.412098 0.310944 -0.856439 + 0.016514 2.25648 -0.879903 0.361972 0.492241 0.791628 + 0.036031 2.2728 -0.898977 0.854781 0.134694 0.501205 + 0.026896 2.5207 -1.04894 0.89138 0.34194 0.297521 + 0.342526 0.826727 1.0007 0.953858 0.107937 0.280186 + 0.321893 0.815854 1.07513 0.953858 0.107937 0.280186 + 0.312155 0.767184 1.12703 0.953858 0.107937 0.280186 + -0.280438 0.691045 1.20391 -0.945571 0.12964 0.298478 + -0.28423 0.755168 1.16405 -0.945571 0.12964 0.298478 + -0.293968 0.803753 1.11209 -0.945571 0.12964 0.298478 + 1.02368 1.78898 0.51143 0.89627 -0.163857 0.41213 + 0.939812 1.7023 0.659358 0.89627 -0.163857 0.41213 + 0.972324 1.71963 0.595543 0.89627 -0.163857 0.41213 + 0.639283 1.82867 -0.742512 0.949949 -0.265038 0.165381 + 0.641212 1.80309 -0.633011 -0.155079 -0.962606 -0.222129 + 0.588889 1.81998 -0.669658 -0.576988 -0.694303 0.430148 + 0.996149 2.87607 -0.646464 0.195019 -0.66248 0.723248 + 0.779571 2.78279 -0.673504 0.195019 -0.66248 0.723249 + 0.739695 2.74565 -0.696773 0.694051 -0.493486 -0.524181 + 2.01559 2.518 -0.205467 -0.398232 -0.638181 0.65889 + 1.85647 2.54302 -0.277405 -0.398232 -0.638181 0.65889 + 1.78909 2.52885 -0.331856 -0.398232 -0.638181 0.65889 + 2.06551 2.37554 -0.14513 0.209248 0.739158 0.640203 + 1.98115 2.45802 -0.212777 0.209248 0.739158 0.640203 + 1.90735 2.49937 -0.236397 0.209248 0.739158 0.640203 + 0.701621 1.59347 -1.07093 -0.310767 -0.590351 -0.744923 + 0.795773 1.58717 -1.10522 -0.407193 -0.681904 -0.607618 + 0.857639 1.53971 -1.09341 -0.310767 -0.59035 -0.744923 + 0.700579 1.79093 -2.19915 0.794599 0.593925 -0.125957 + 0.750666 1.75461 -2.12943 0.145023 -0.880776 -0.45078 + 0.719806 1.76903 -2.18362 0.813011 0.475148 -0.336522 + -0.92271 1.96082 -0.624798 0.172164 -0.446348 0.878142 + -0.929869 1.89636 -0.656157 0.172164 -0.446348 0.878142 + -0.915918 1.85125 -0.681822 0.892288 -0.365755 0.26466 + -1.25705 3.37972 -1.68482 -0.110911 -0.983827 0.14065 + -1.14214 3.39251 -1.50476 -0.110911 -0.983827 0.14065 + -1.11887 3.39705 -1.45464 -0.110911 -0.983827 0.14065 + -0.010689 2.2749 -0.3052 0.629784 0.648282 0.427905 + -0.009414 2.2992 -0.343893 0.629784 0.648282 0.427905 + -0.048528 2.35557 -0.371727 0.629784 0.648282 0.427905 + -1.07094 1.86141 0.481375 -0.876493 -0.32002 0.359647 + -0.972324 1.71963 0.59555 -0.876493 -0.32002 0.359647 + -0.939812 1.7023 0.659365 -0.876493 -0.32002 0.359647 + -1.25585 1.60974 0.521077 0.204306 -0.604269 -0.770141 + -1.18554 1.48162 0.722401 -0.0429436 -0.669492 -0.741577 + -1.21447 1.45124 0.759218 0.24249 -0.645061 -0.724634 + -1.70723 0.427067 1.15213 -0.205891 0.970178 -0.12792 + -1.70775 0.443486 1.2775 -0.205891 0.970178 -0.12792 + -1.7011 0.453737 1.34454 -0.205891 0.970178 -0.12792 + -0.609115 1.90933 -2.58583 -0.554437 0.827813 0.0855872 + -0.571293 1.94331 -2.66948 -0.554437 0.827813 0.0855872 + -0.593047 1.92413 -2.62486 -0.554437 0.827813 0.0855872 + -0.729379 1.60414 -1.84242 -0.735368 0.676003 -0.0474693 + -0.696971 1.63682 -1.87903 -0.82698 -0.194483 -0.527522 + -0.692433 1.63726 -1.94318 -0.735368 0.676003 -0.0474693 + -1.0984 1.63391 -1.92098 -0.244409 0.749525 0.615204 + -1.06945 1.6088 -1.87888 -0.244409 0.749526 0.615204 + -1.04635 1.60183 -1.86122 -0.244409 0.749525 0.615204 + 0.036031 2.2728 -0.898977 -0.996262 0.014774 0.0851082 + 0.03663 2.30385 -0.897355 -0.996262 0.014774 0.0851082 + 0.026896 2.5207 -1.04894 -0.996262 0.014774 0.0851082 + 1.21543 1.25463 0.632758 -0.912708 0.113447 -0.392548 + 1.20241 1.08491 0.659711 -0.928512 0.0122976 -0.371098 + 1.1661 0.918671 0.745052 -0.286635 -0.61351 -0.73583 + 1.33145 1.63145 0.543685 0.417147 0.181782 0.890474 + 1.26299 1.58624 0.584984 0.417147 0.181782 0.890474 + 1.23701 1.53076 0.60848 0.417147 0.181782 0.890474 + 1.37295 1.58577 0.661806 0.944445 -0.205962 0.256133 + 1.35441 1.57088 0.718196 0.944445 -0.205962 0.256133 + 1.30863 1.42333 0.768356 0.275663 -0.291308 -0.916051 + 0.792052 1.49776 -1.24696 -0.0135992 0.985387 0.169787 + 0.828512 1.49337 -1.21855 0.221899 0.853284 -0.471877 + 0.874389 1.49643 -1.23266 -0.449359 0.864271 0.226078 + 0.922122 1.44708 -1.17038 -0.238096 -0.602308 0.761929 + 0.955513 1.48149 -1.19538 0.725133 -0.232945 0.648011 + 0.991592 1.54803 -1.21183 0.601275 -0.451223 -0.659444 + 0.592978 1.92413 -2.62486 -0.733794 -0.641747 -0.222951 + 0.592234 1.92008 -2.61283 -0.738748 -0.623481 -0.255977 + 0.566529 1.95757 -2.62998 -0.805241 -0.592217 0.0294389 + 1.22327 1.99606 -1.63905 -0.695663 0.448589 0.56109 + 1.18043 1.92842 -1.63808 -0.695663 0.448589 0.56109 + 1.14935 1.85886 -1.621 0.743443 -0.0685493 0.665277 + -1.59486 1.39116 0.355271 -0.0661124 0.295114 -0.953172 + -1.51069 1.33656 0.353853 -0.384054 -0.573208 -0.723834 + -1.49721 1.30268 0.373529 -0.328928 -0.706901 -0.626177 + -1.49586 2.56716 -0.58981 -0.607194 -0.445574 -0.65786 + -1.58602 2.58657 -0.536845 -0.516028 -0.066654 -0.853974 + -1.72019 2.70443 -0.464969 -0.717703 -0.338326 -0.608637 + 0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.017312 0.102744 3.76948 0 0.702478 -0.711705 + -0.069411 0.149083 3.81521 0 0.702478 -0.711705 + -1.13431 1.77915 -2.24394 0.748987 0.576371 0.326825 + -1.15072 1.77302 -2.19552 0.796931 0.528217 0.293067 + 1.02369 1.81801 0.518748 -0.769296 0.630583 0.102705 + 1.0777 1.88665 0.501858 -0.548412 -0.0230373 -0.835891 + 1.18729 2.0375 0.396588 -0.788918 0.537794 0.297298 + 1.21543 1.25463 0.632758 -0.943445 0.0893122 -0.319273 + 1.21129 1.35382 0.672741 -0.659387 -0.123053 -0.741665 + 1.26299 1.58624 0.584984 -0.943445 0.0893122 -0.319273 + 0.757834 2.14915 0.186202 -0.510264 0.846046 -0.154393 + 0.800807 2.16729 0.143582 -0.510264 0.846046 -0.154393 + 0.698828 2.11859 0.213736 -0.448671 0.0631055 -0.891466 + 0.001808 0.003301 3.25612 1 0 0 + 0.001808 -0.013762 3.24667 1 0 0 + 0.001808 -0.005483 3.17033 0.46511 -0.884971 -0.0223388 + 0.74827 1.58102 -1.31758 0.185978 0.978799 -0.085815 + 0.748333 1.58493 -1.27294 0.139582 0.986432 -0.0864167 + 0.848893 1.59105 -1.29935 -0.083259 0.992753 -0.0866547 + 0.711042 1.59463 -1.33315 0.839186 0.541675 -0.0485298 + 0.711105 1.59853 -1.28851 0.687275 0.724916 -0.0463682 + 0.699505 1.64767 -1.36081 0.956663 0.288108 0.0423007 + 0.686132 1.69228 -1.37669 0.936448 0.341179 0.0816172 + 0.697732 1.64315 -1.30438 0.94884 0.310267 0.0586247 + 0.656563 1.77702 -1.40086 0.932306 0.350624 0.0887014 + 1.00885 1.67572 -1.27419 0.670214 -0.693233 -0.265032 + 0.977919 1.61141 -1.18422 -0.548297 -0.595979 -0.586669 + 0.946949 1.61536 -1.27285 0.462875 -0.884401 -0.059845 + 0.937006 1.58934 -1.16439 0.0125529 -0.640481 -0.767871 + 0.906036 1.59329 -1.25302 0.240627 -0.963412 -0.118054 + 0.85677 1.58823 -1.32627 0.043441 -0.986395 0.158547 + 0.960259 1.61924 -1.28217 -0.0511243 -0.433055 0.899916 + 1.00885 1.67572 -1.27419 0.578205 -0.561083 0.592339 + 0.963515 1.56736 -1.16991 -0.691064 0.46106 -0.556646 + 0.917637 1.56429 -1.1558 0.00972007 0.191642 -0.981417 + 0.845353 1.58744 -1.19488 0.17914 -0.851587 -0.492654 + 0.801509 1.58539 -1.23054 -0.335613 -0.85461 0.396239 + 0.862192 1.59116 -1.28874 0.0295432 -0.9993 0.0229327 + 0.994443 1.63158 -1.25994 -0.925431 0.375615 -0.0498965 + 1.00885 1.67572 -1.27419 -0.953877 0.267096 -0.137033 + 0.75894 1.61619 -1.24569 -0.790815 -0.347 0.504184 + 0.761569 1.58122 -1.30691 -0.242761 -0.955401 0.168154 + 0.848893 1.59105 -1.29935 0.0612642 -0.998073 0.00988391 + 0.718999 1.61201 -1.32205 -0.802857 -0.23298 0.548763 + 0.74827 1.58102 -1.31758 -0.492294 -0.557249 0.66867 + 0.699021 1.70327 -1.32391 -0.803778 -0.594448 0.0239307 + 0.707462 1.66505 -1.34971 -0.935553 -0.137607 0.325277 + 0.699505 1.64767 -1.36081 -0.840344 0.0395603 0.540607 + 0.711042 1.59463 -1.33315 -0.686943 -0.140715 0.712958 + 0.76871 1.61927 -1.22983 -0.829319 -0.146584 0.539206 + 0.708791 1.70626 -1.3081 -0.838716 -0.095275 0.53617 + 0.789525 1.56678 -1.21471 -0.823792 -0.170977 0.540493 + 0.686132 1.69228 -1.37669 -0.866756 -0.211662 0.45159 + 0.668871 1.74969 -1.37931 -0.92902 -0.312853 0.197597 + 0.656563 1.77702 -1.40086 -0.944761 -0.140863 0.295946 + 0.639302 1.83442 -1.40348 -0.945695 -0.302329 0.119408 + 0.600297 1.9196 -1.45941 -0.935523 -0.35319 -0.00734592 + 0.636604 1.83901 -1.44743 -0.909434 -0.393561 -0.134309 + 0.697732 1.64315 -1.30438 -0.904037 0.0293146 0.426448 + 0.66043 1.78791 -1.35351 -0.858241 -0.478347 0.186029 + 0.626051 1.87036 -1.31612 -0.909292 -0.346445 -0.230571 + 0.599786 1.94895 -1.30965 -0.875446 -0.276772 -0.39622 + 0.613037 1.91293 -1.39706 -0.951128 -0.301862 0.0650784 + 0.654263 1.77702 -1.32405 -0.751583 -0.211272 -0.624889 + 0.619884 1.85947 -1.28666 -0.501873 -0.163251 -0.849396 + 0.589443 1.89582 -1.28503 -0.0798705 -0.0211582 -0.996581 + 0.572223 2.03146 -1.30735 -0.650346 -0.512783 -0.56045 + 0.657449 1.71478 -1.31545 -0.182016 -0.375202 -0.908897 + 0.628195 1.74036 -1.30896 -0.284599 -0.0806566 -0.955247 + 0.597753 1.77671 -1.30732 0.190494 0.01163 -0.981619 + 0.548924 1.83147 -1.32837 0.353545 0.0467009 -0.934251 + 0.56188 1.97841 -1.28267 -0.148599 -0.106591 -0.983136 + 0.684132 1.6989 -1.29475 -0.0788835 -0.724345 -0.68491 + 0.631718 1.61943 -1.2503 0.0298424 -0.668702 -0.742932 + 0.631381 1.67812 -1.30036 0.0169822 -0.488516 -0.87239 + 0.590278 1.68513 -1.29089 -0.376297 -0.43088 -0.820209 + 0.708791 1.70626 -1.3081 -0.0330505 -0.848193 -0.528656 + 0.726242 1.62827 -1.2706 -0.311936 -0.689434 -0.65374 + 0.658401 1.60355 -1.2296 0.185007 -0.812766 -0.552434 + 0.636545 1.55107 -1.1577 0.30473 -0.846636 -0.436287 + 0.605073 1.57287 -1.20325 0.0408359 -0.779023 -0.625664 + 0.604736 1.63147 -1.25336 -0.219954 -0.619859 -0.753257 + 0.750901 1.63563 -1.28395 -0.352328 -0.550117 -0.757123 + 0.770083 1.58651 -1.24989 -0.862131 -0.476999 -0.170882 + 0.711337 1.62078 -1.18883 -0.05394 -0.934159 -0.352757 + 0.689481 1.5683 -1.11694 0.330974 -0.873629 -0.356691 + 0.622039 1.51561 -1.08948 -0.117519 -0.919616 -0.374827 + 0.590567 1.53741 -1.13503 -0.335536 -0.906502 -0.256262 + 0.771717 1.58314 -1.26884 -0.950377 -0.309946 -0.0267693 + 0.790419 1.50113 -1.22799 -0.805017 -0.546168 0.231621 + 0.755178 1.57902 -1.16811 -0.517039 -0.830337 -0.207874 + 0.704378 1.56692 -1.09036 0.112455 -0.869528 -0.480911 + 0.635703 1.4879 -1.04188 -0.0054858 -0.928742 -0.370685 + 0.792052 1.49776 -1.24696 -0.872426 -0.488606 0.0116762 + 0.840998 1.46202 -1.20765 -0.327813 -0.943636 -0.045711 + 0.809256 1.55981 -1.16444 -0.507047 -0.838293 0.200418 + 0.758457 1.54772 -1.08669 -0.29294 -0.824332 -0.484419 + 0.6506 1.48652 -1.0153 -0.164864 -0.611883 -0.773575 + 0.859835 1.52061 -1.14415 -0.563628 -0.7081 0.425344 + 0.6506 1.48652 -1.0153 0.282589 -0.936699 -0.206731 + 0.612757 1.47847 -0.963546 -0.195089 -0.933803 0.29992 + 0.599093 1.50618 -1.01114 -0.791459 -0.597956 -0.126651 + 0.579459 1.54475 -1.05154 -0.850008 -0.526332 0.0214585 + 0.556701 1.56805 -1.18832 -0.580403 -0.7039 -0.409458 + 0.586667 1.54747 -0.91427 -0.844742 -0.444083 0.298665 + 0.567033 1.58604 -0.954669 -0.977182 -0.203594 0.0605327 + 0.567352 1.65255 -1.00526 -0.990658 -0.0825064 0.108583 + 0.545593 1.57539 -1.10483 -0.891632 -0.434143 0.128501 + 0.6172 1.53206 -0.889972 0.030182 -0.796937 0.603307 + 0.612248 1.60182 -0.819792 -0.496877 -0.648056 0.57718 + 0.581715 1.61732 -0.84404 -0.875442 -0.341842 0.341681 + 0.565407 1.66919 -0.887485 -0.990111 -0.0742072 0.119056 + 0.629692 1.50131 -0.961109 0.862344 -0.383833 0.330206 + 0.634135 1.5549 -0.887535 0.907243 -0.352565 0.229366 + 0.630172 1.5876 -0.82637 0.539158 -0.579954 0.610706 + 0.601719 1.6529 -0.769478 -0.577694 -0.438679 0.688353 + 0.6506 1.48652 -1.0153 0.916919 -0.109968 0.383624 + 0.643397 1.56889 -0.998153 0.953583 -0.111151 0.279865 + 0.643726 1.61889 -0.917968 0.983699 -0.140621 0.112079 + 0.639763 1.6516 -0.856812 0.979198 -0.0845448 0.184455 + 0.619643 1.63869 -0.776057 0.471726 -0.542211 0.695329 + 0.664305 1.55402 -1.0524 0.699612 -0.0272337 0.714004 + 0.701621 1.59347 -1.07093 0.503858 0.0379935 0.862951 + 0.658945 1.63178 -1.03008 0.875368 -0.124851 0.467058 + 0.659274 1.68187 -0.949849 0.978211 -0.107128 0.177839 + 0.646938 1.71515 -0.867495 0.982201 -0.0753932 0.172038 + 0.626818 1.70224 -0.78674 0.973819 -0.11088 0.198448 + 0.616518 1.72023 -0.715886 0.952295 -0.110975 0.284286 + 0.795773 1.58717 -1.10522 0.43991 0.00564992 0.898024 + 0.758457 1.54772 -1.08669 0.384658 0.112744 0.916148 + 0.6506 1.48652 -1.0153 0.337107 0.400058 0.85224 + 0.133271 1.97001 -3.02272 0.0154635 -0.521531 -0.853092 + 0.093994 2.00582 -3.01375 -0.0964595 -0.529434 -0.842849 + 0.156435 2.02905 -3.04178 -0.329619 -0.159169 -0.9306 + 0.122012 1.95733 -3.01055 -0.0762406 -0.997074 0.00553609 + 0.082735 1.99305 -3.00163 -0.423956 -0.745927 -0.513667 + 0.080404 2.00707 -3.02371 0.31784 -0.784906 -0.531884 + 0.141832 1.9697 -3.01698 0.779898 -0.625712 0.0155829 + 0.128453 1.99899 -2.99251 0.691133 -0.559822 0.457094 + 0.108633 1.98662 -2.9861 0.501486 -0.407871 0.762989 + 0.156435 2.02905 -3.04178 0.475826 -0.443846 -0.759335 + 0.164996 2.02874 -3.03604 0.4903 -0.436023 -0.754645 + 0.164996 2.02874 -3.03604 0.80018 -0.124512 0.586693 + 0.108633 1.98662 -2.9861 -0.49426 -0.678915 0.542938 + 0.284568 2.00427 -2.96887 0.56808 -0.247494 -0.784877 + 0.261295 1.99188 -2.9818 0.187019 0.265387 -0.94583 + 0.2203 2.03343 -3.02458 -0.0508619 -0.991931 0.116125 + 0.240299 1.98703 -2.9834 -0.0571379 -0.00710554 -0.998341 + 0.199304 2.0285 -3.02623 0.0826115 -0.771611 -0.630708 + 0.156435 2.02905 -3.04178 -0.105135 -0.719327 -0.686669 + 0.263765 1.97714 -2.99568 -0.119907 0.938453 -0.323926 + 0.22481 1.97654 -2.98743 -0.0130644 0.94052 -0.339487 + 0.201344 1.98642 -2.97515 -0.0161998 0.130523 -0.991313 + 0.175566 1.99014 -2.97478 -0.121146 -0.768017 -0.628867 + 0.173526 2.0323 -3.02581 0.0509812 -0.987473 -0.149324 + 0.156435 2.02905 -3.04178 -0.132375 -0.934101 0.33156 + 0.286899 1.98164 -2.99787 -0.241542 0.932903 -0.267114 + 0.293134 1.98928 -3.0755 -0.0133371 0.983189 0.182106 + 0.268182 1.99335 -3.07676 0.253084 0.874727 0.413281 + 0.199857 1.98061 -2.98869 0.204668 0.977909 -0.0424764 + 0.175566 1.99014 -2.97478 0.287814 0.946572 -0.145479 + 0.284568 2.00427 -2.96887 -0.0733668 0.783513 -0.617028 + 0.310171 1.99395 -2.98499 -0.173813 0.973152 -0.150879 + 0.316268 1.99369 -3.07773 -0.223476 0.972495 0.0656668 + 0.319848 1.99731 -3.11521 -0.0681588 0.981479 0.179032 + 0.295996 1.99739 -3.09994 0.460292 -0.348579 0.81647 + 0.24433 1.99334 -3.06154 0.124711 0.929926 0.345956 + 0.161274 1.99295 -2.99625 0.215005 0.976527 0.0129801 + 0.136983 2.00247 -2.98234 0.170644 0.951116 -0.257408 + 0.322326 1.99302 -3.04417 0.00197971 0.999987 -0.00458595 + 0.325906 1.99664 -3.08165 -0.267212 0.961274 0.0674538 + 0.332804 1.99775 -3.02017 0.191921 0.950702 -0.24358 + 0.320649 1.99868 -2.96098 -0.564124 0.814722 0.134134 + 0.32929 2.00113 -2.94802 -0.154741 0.954427 0.255193 + 0.343366 1.99505 -2.9427 0.310494 0.919074 -0.242686 + 0.34688 1.99167 -3.01484 0.425132 0.903039 -0.0615074 + 0.313291 2.00102 -3.03582 0.492869 0.738373 -0.46031 + 0.320286 1.98989 -2.94595 -0.828572 0.0466269 0.557938 + 0.328927 1.99242 -2.93294 -0.700958 0.624826 0.343874 + 0.295702 1.99981 -2.96814 0.373223 0.927739 -0.00221117 + 0.284568 2.00427 -2.96887 0.372151 0.928166 -0.00327953 + 0.365691 1.98304 -2.9843 0.421741 0.906473 0.0210214 + 0.371161 1.97686 -2.92739 0.518874 0.766784 -0.377906 + 0.397432 1.96751 -2.92599 0.320663 0.923046 -0.21251 + 0.391961 1.97369 -2.9829 0.274841 0.958349 0.0776548 + 0.436121 1.96422 -2.97889 0.18569 0.97975 0.0748887 + 0.423477 1.96208 -2.9154 0.25171 0.923845 -0.288363 + 0.462167 1.9588 -2.9683 0.0456098 0.998736 -0.0211222 + 0.356671 2.00434 -2.92579 0.528511 -0.481743 -0.698999 + 0.384466 1.98607 -2.91054 0.263444 -0.0453287 -0.963609 + 0.406745 1.97654 -2.90444 0.373114 0.765192 -0.524659 + 0.348135 2.00185 -2.93868 0.745781 -0.658126 0.103347 + 0.39795 2.0237 -2.97152 0.719518 -0.692725 -0.0492576 + 0.406486 2.02619 -2.95862 0.19985 -0.78305 -0.588976 + 0.428765 2.01675 -2.95248 -0.153313 -0.745058 -0.649141 + 0.406745 1.97654 -2.90444 -0.132424 -0.729384 -0.671166 + 0.44583 1.96623 -2.90117 -0.151335 -0.750736 -0.643034 + 0.350242 1.97577 -2.9623 0.49825 -0.830182 0.250088 + 0.35437 1.97828 -2.99445 0.386881 -0.907121 -0.165695 + 0.402078 2.0262 -3.00365 0.856346 -0.503661 -0.114005 + 0.418264 2.08128 -3.01025 0.7548 -0.317299 -0.574106 + 0.328927 1.99242 -2.93294 0.479015 -0.567757 0.669476 + 0.331034 1.96634 -2.95656 -0.0169217 -0.972696 0.231465 + 0.30645 1.97627 -2.97876 -0.454314 -0.880803 0.133358 + 0.313322 1.9798 -3.00647 -0.180227 -0.93728 -0.298371 + 0.364508 2.01202 -3.06709 0.474649 -0.715071 -0.513208 + 0.36865 2.03918 -3.08753 0.68518 -0.346518 -0.640667 + 0.40622 2.05345 -3.02404 0.881552 -0.238116 -0.407635 + 0.295702 1.99981 -2.96814 -0.65275 -0.623705 0.430011 + 0.231434 2.02898 -3.02386 -0.328901 -0.943378 -0.043141 + 0.238306 2.0325 -3.05156 -0.238856 -0.842117 -0.483514 + 0.32346 2.01354 -3.07911 -0.0808887 -0.797601 -0.597737 + 0.328927 1.99242 -2.93294 -0.649816 -0.538453 0.536477 + 0.156435 2.02905 -3.04178 0.0275726 -0.992469 -0.119352 + 0.284568 2.00427 -2.96887 -0.367788 -0.927873 -0.061516 + 0.156435 2.02905 -3.04178 -0.214287 -0.391188 0.895016 + 0.44583 1.96623 -2.90117 0.249323 0.75169 -0.610573 + 0.462562 1.95177 -2.91213 0.30346 0.951695 -0.0467856 + 0.49606 1.95866 -2.97745 0.0813961 0.993522 0.0793004 + 0.483244 1.9587 -2.99094 0.004039 0.999992 -0.000346849 + 0.517137 1.95856 -3.00009 0.092826 0.992272 0.0823419 + 0.517922 1.95242 -2.95825 0.13078 0.978736 0.158024 + 0.484424 1.94553 -2.89293 0.171707 0.980794 0.092513 + 0.508552 1.94894 -2.92703 0.0423027 0.990757 0.128884 + 0.52042 1.93869 -2.87167 0.428624 0.900379 0.0748257 + 0.44583 1.96623 -2.90117 0.499743 0.810446 -0.305669 + 0.328927 1.99242 -2.93294 -0.026466 0.974304 0.223678 + 0.348135 2.00185 -2.93868 -0.494815 0.672304 -0.550605 + 0.267677 2.00019 -3.0754 0.259724 -0.874459 0.409713 + 0.297587 1.99953 -3.05706 -0.126168 -0.988859 0.0789889 + 0.213992 2.01165 -3.01764 -0.035651 -0.947964 0.316375 + 0.243514 1.99815 -3.05565 0.329877 -0.864645 0.378905 + 0.221579 1.99604 -3.06701 0.0763245 -0.997034 -0.00985793 + 0.197416 1.994 -3.04727 -0.547475 -0.434681 -0.715069 + 0.138523 1.99564 -3.00172 -0.590193 -0.29206 -0.752577 + 0.325906 1.99664 -3.08165 -0.082742 -0.996488 -0.0128938 + 0.322326 1.99302 -3.04417 -0.353591 -0.912555 0.205467 + 0.313291 2.00102 -3.03582 -0.30181 -0.929701 0.21111 + 0.319848 1.99731 -3.11521 -0.0142549 -0.999747 -0.0174161 + 0.332804 1.99775 -3.02017 -0.419856 -0.838005 0.348523 + 0.136983 2.00247 -2.98234 0.245324 -0.883155 -0.399817 + 0.164996 2.02874 -3.03604 0.519605 -0.842885 -0.13984 + 0.76871 1.61927 -1.22983 0.919224 0.339172 -0.199975 + 0.750901 1.63563 -1.28395 0.890788 0.423336 -0.165177 + 0.708791 1.70626 -1.3081 0.870879 0.469742 -0.144616 + 0.789525 1.56678 -1.21471 0.779198 0.138322 -0.611325 + 0.771717 1.58314 -1.26884 0.93754 0.261539 -0.229383 + 0.792052 1.49776 -1.24696 0.747982 0.303256 -0.590389 + 0.825985 1.56239 -1.1863 0.433016 -0.0171771 -0.901222 + 0.874389 1.49643 -1.23266 -0.227826 0.78994 -0.569289 + 0.75894 1.61619 -1.24569 0.465107 -0.328062 -0.822223 + 0.568883 1.86808 -2.71898 -0.52045 0.793298 0.315928 + 0.596791 1.8903 -2.71226 -0.637409 0.710444 0.298294 + 0.56253 1.89213 -2.78983 -0.70778 0.526266 0.471265 + 0.554398 1.87296 -2.73802 0.755214 0.513528 -0.407359 + 0.548045 1.897 -2.80887 0.412423 0.871442 0.265511 + 0.539499 1.90956 -2.78862 0.925239 -0.210193 -0.315836 + 0.56062 1.92182 -2.78625 0.348483 -0.763202 -0.544135 + 0.575518 1.88522 -2.73566 0.394795 -0.738155 -0.54705 + 0.568883 1.86808 -2.71898 0.467932 -0.702741 -0.535906 + 0.540993 1.91304 -2.85124 0.887587 0.458544 0.0439012 + 0.532448 1.92559 -2.83099 0.952967 -0.290272 -0.0871579 + 0.556381 1.93513 -2.81012 0.43379 -0.829295 -0.352272 + 0.63233 1.9467 -2.79915 0.224633 -0.819026 -0.527955 + 0.646581 1.94192 -2.78008 0.121137 -0.906707 -0.403989 + 0.58977 1.88043 -2.71657 0.456878 -0.852569 0.253748 + 0.568883 1.86808 -2.71898 0.47583 -0.7011 -0.531078 + 0.534839 1.92882 -2.85178 0.926069 -0.287059 -0.244934 + 0.558772 1.93836 -2.83091 0.386607 -0.913901 -0.123772 + 0.628091 1.96002 -2.82302 0.325178 -0.872606 -0.364443 + 0.52297 1.93907 -2.90713 0.56514 0.824394 0.0314878 + 0.508552 1.94894 -2.92703 0.519872 0.852978 0.04649 + 0.857639 1.53971 -1.09341 0.209745 0.209288 0.955095 + 0.734627 1.66052 -1.09287 0.272265 -0.276923 0.921513 + 0.691951 1.69874 -1.05208 0.72977 -0.187247 0.657551 + 0.666266 1.73981 -0.991201 0.918423 -0.181836 0.351332 + 0.653929 1.77309 -0.908846 0.980147 -0.0816021 0.180704 + 0.801719 1.66092 -1.09516 -0.0503109 -0.227895 0.972385 + 0.727067 1.74912 -1.07274 0.276988 -0.481855 0.83132 + 0.701382 1.79018 -1.01185 0.770398 -0.17425 0.613289 + 0.665803 1.85544 -0.942675 0.951726 -0.0417351 0.304099 + 0.649583 1.8106 -0.813416 0.981967 -0.133608 0.133752 + 0.924731 1.54019 -1.09564 0.122894 -0.206633 0.97067 + 0.956135 1.59387 -1.09764 0.135844 -0.186392 0.973039 + 0.872103 1.65857 -1.07749 -0.104962 -0.498 0.860801 + 0.797451 1.74686 -1.05501 -0.282399 -0.438527 0.853197 + 0.857639 1.53971 -1.09341 0.0284716 -0.108768 0.993659 + 0.976813 1.48683 -1.12362 0.493183 -0.54229 0.680214 + 1.00822 1.5406 -1.12556 0.817988 -0.259632 0.513309 + 0.989639 1.62409 -1.09438 0.525123 -0.0615618 0.848797 + 0.905607 1.68879 -1.07423 0.279292 -0.713321 0.642783 + 0.883508 1.6865 -1.05088 -0.333675 -0.941855 -0.0396204 + 0.921701 1.47324 -1.1323 -0.217656 -0.728071 0.650029 + 0.977234 1.46075 -1.16166 0.561699 -0.820421 -0.106785 + 1.00584 1.5264 -1.17677 0.909123 -0.355602 -0.216894 + 1.0114 1.59751 -1.17953 0.997605 -0.014321 -0.0676686 + 1.01377 1.61179 -1.12827 0.964203 0.0650206 0.257071 + 0.971005 1.70035 -1.08785 0.673212 0.0295699 0.738858 + 0.922122 1.44708 -1.17038 -0.182077 -0.811392 0.55542 + 0.857639 1.53971 -1.09341 -0.618596 -0.743815 0.253138 + 0.547729 2.0507 -1.40088 -0.559879 -0.824023 0.086733 + 0.531356 2.07762 -1.31671 -0.0112687 -0.95303 0.302666 + 0.474402 2.06298 -1.36495 0.239511 -0.909373 -0.340109 + 0.474158 2.07625 -1.40354 -0.0695818 -0.980446 -0.184076 + 0.465143 2.07809 -1.44612 -0.119267 -0.985195 -0.123147 + 0.538714 2.05245 -1.44351 -0.55642 -0.798752 0.228893 + 0.588596 2.00453 -1.39151 -0.898385 -0.436873 0.0452392 + 0.531356 2.07762 -1.31671 -0.753587 -0.654347 0.062748 + 0.400545 2.05461 -1.39905 0.360664 -0.803443 -0.47371 + 0.400301 2.06788 -1.43764 0.354171 -0.892785 -0.278385 + 0.426899 2.08626 -1.47047 0.106958 -0.971244 -0.212707 + 0.47773 2.07946 -1.47809 -0.393151 -0.918755 0.0363416 + 0.445089 2.02378 -1.34266 0.518758 -0.456248 -0.723 + 0.388764 1.99841 -1.35531 0.279624 -0.388313 -0.87808 + 0.319803 2.01877 -1.40457 0.315089 -0.808891 -0.496401 + 0.359019 2.06661 -1.50784 0.373913 -0.898965 -0.228146 + 0.385616 2.08499 -1.54067 0.255332 -0.966667 0.0189735 + 0.502044 2.03843 -1.29442 0.201838 -0.365986 -0.908469 + 0.412598 1.90184 -1.34124 0.301508 0.0049376 -0.953451 + 0.356273 1.87655 -1.35384 -0.242239 -0.43785 -0.865799 + 0.289944 1.91605 -1.33405 -0.186541 -0.539196 -0.821261 + 0.308022 1.96257 -1.36083 0.10913 -0.57836 -0.80845 + 0.531356 2.07762 -1.31671 0.565559 -0.684525 -0.459966 + 0.575856 2.0112 -1.45386 -0.800007 -0.554324 0.229596 + 0.580338 1.98159 -1.50598 -0.856886 -0.50255 0.114844 + 0.63432 1.85705 -1.49726 -0.944821 -0.325087 0.0403969 + 0.697732 1.64315 -1.30438 -0.768268 -0.612395 -0.186378 + 0.514872 2.03813 -1.48851 -0.659248 -0.721121 0.213018 + 0.497177 2.05931 -1.52979 -0.565527 -0.824655 0.011116 + 0.562643 2.00285 -1.54721 -0.787953 -0.614582 0.037663 + 0.62704 1.86132 -1.54027 -0.920635 -0.387396 0.0485341 + 0.695448 1.66118 -1.35421 -0.862039 -0.496172 -0.103452 + 0.75621 1.58202 -1.2999 -0.267214 -0.962764 -0.0410026 + 0.439282 2.08334 -1.53762 -0.191282 -0.974035 0.121109 + 0.51533 2.05069 -1.57487 -0.607573 -0.792174 -0.0575836 + 0.555363 2.00713 -1.59022 -0.81299 -0.582006 0.0177664 + 0.439486 2.08755 -1.50251 -0.115273 -0.992837 0.031416 + 0.385413 2.08078 -1.57577 0.138568 -0.981181 0.134473 + 0.457435 2.07473 -1.5827 -0.229298 -0.967001 0.111045 + 0.515561 2.0499 -1.62109 -0.53729 -0.841135 0.0617415 + 0.555594 2.00625 -1.63649 -0.827284 -0.561476 0.0185904 + 0.297377 2.03902 -1.49545 0.35498 -0.912076 -0.205198 + 0.29011 2.04489 -1.55221 0.393179 -0.915676 -0.0833482 + 0.3657 2.07343 -1.60525 0.177192 -0.980202 0.0883553 + 0.359616 2.06797 -1.64419 0.124811 -0.987634 0.0948761 + 0.451351 2.06927 -1.62164 -0.148316 -0.980866 0.12611 + 0.258161 1.99109 -1.39224 0.259526 -0.876804 -0.404798 + 0.166984 1.95299 -1.35484 0.273097 -0.880025 -0.388553 + 0.140569 1.94325 -1.36118 0.523372 -0.83758 -0.156656 + 0.270961 2.02929 -1.5018 0.437071 -0.889907 -0.130519 + 0.239043 1.95976 -1.34897 -0.00762572 -0.667344 -0.74471 + 0.147866 1.92165 -1.31156 -0.00968685 -0.754085 -0.656706 + 0.112991 1.89426 -1.27811 0.0651212 -0.828291 -0.556502 + 0.078295 1.88988 -1.28734 0.486043 -0.831921 -0.267713 + 0.152396 1.95209 -1.41768 0.604537 -0.796573 -0.00249135 + 0.220964 1.91315 -1.32224 -0.1379 -0.589326 -0.796039 + 0.186089 1.88576 -1.28879 -0.161239 -0.700465 -0.695234 + 0.099451 1.85062 -1.21534 0.121784 -0.827132 -0.548655 + 0.064756 1.84625 -1.22456 0.345297 -0.803886 -0.48429 + 0.307145 1.88639 -1.30329 -0.0763115 -0.738844 -0.669542 + 0.090122 1.89871 -1.34383 0.601238 -0.796726 -0.0611623 + 0.171544 1.96768 -1.46809 0.512808 -0.85304 -0.0966938 + 0.270397 2.03754 -1.58169 0.41276 -0.904147 -0.110213 + 0.087235 1.90525 -1.39075 0.549947 -0.825664 -0.125846 + 0.171197 1.97345 -1.51008 0.481269 -0.865152 -0.14104 + 0.162867 1.97594 -1.54879 0.44374 -0.873146 -0.20177 + 0.262067 2.04011 -1.62035 0.38276 -0.920835 -0.0745459 + 0.02884 1.85513 -1.35635 0.327307 -0.941844 -0.0761579 + 0.086888 1.91102 -1.43274 0.567938 -0.815084 -0.114392 + 0.089782 1.91973 -1.48143 0.561941 -0.812529 -0.154978 + 0.173147 1.99886 -1.61009 0.431061 -0.885795 -0.171911 + 0.249812 2.03641 -1.65153 0.357099 -0.930957 -0.0761602 + -0.028838 1.8545 -1.31385 -0.210111 -0.977045 0.0351617 + -0.028838 1.85513 -1.35634 -0.348063 -0.934808 -0.0706067 + 0.031734 1.86393 -1.40499 0.337605 -0.933536 -0.120551 + 0.031734 1.86779 -1.44848 0.31907 -0.935751 -0.150211 + 0.100061 1.94265 -1.54273 0.566829 -0.807746 -0.162021 + -0.011004 1.92279 -1.16193 0.000143575 -0.91209 0.409991 + 0.994443 1.63158 -1.25994 0.451141 -0.445626 -0.773233 + 0.955513 1.48149 -1.19538 0.278587 -0.55692 -0.782451 + 0.874389 1.49643 -1.23266 0.306049 -0.442079 -0.843149 + 1.03052 1.69812 -1.27639 0.843935 -0.181655 0.504752 + 1.03288 1.78952 -1.25311 0.91013 -0.0638198 0.409378 + 1.00885 1.67572 -1.27419 0.305529 -0.381384 -0.872467 + 1.03288 1.78952 -1.25311 -0.216746 -0.128378 -0.96775 + 1.0202 1.61368 -1.22695 0.72889 -0.16296 -0.664954 + 0.922122 1.44708 -1.17038 0.256915 -0.513074 -0.818993 + 1.01446 1.69188 -1.20979 0.889155 0.0632542 0.453214 + 0.995087 1.68693 -1.18041 0.934164 0.201385 0.294589 + 0.995136 1.68804 -1.12174 0.938642 0.210084 0.273524 + 1.02713 1.86772 -1.23595 0.827111 -0.0210253 0.561645 + 0.992933 1.94976 -1.19305 0.708781 -0.0524788 0.703473 + 1.05983 1.83094 -1.29605 0.866174 -0.109213 0.487663 + 1.06221 1.92259 -1.27918 0.77134 -0.13212 0.622558 + 1.05748 1.73954 -1.31934 0.844177 -0.0109204 0.535954 + 1.09515 1.77972 -1.37113 0.936955 -0.161103 0.310098 + 1.09753 1.87136 -1.35425 0.820421 -0.209637 0.531942 + 1.12102 1.97158 -1.32344 0.747078 -0.25842 0.612448 + 1.02801 2.00471 -1.23623 0.730534 -0.171177 0.661073 + 1.05056 1.6794 -1.29078 0.719179 0.30666 0.623491 + 1.08036 1.67959 -1.33931 0.952271 0.0121125 0.305014 + 1.08457 1.69014 -1.39597 0.843293 -0.337756 -0.418065 + 1.09936 1.79026 -1.42779 0.817456 -0.444766 -0.365991 + 1.14099 1.87746 -1.41543 0.895959 -0.360931 0.258815 + 1.02216 1.67959 -1.28351 0.305812 0.00347126 0.952086 + 1.05968 1.62708 -1.22854 0.517828 0.615892 0.593744 + 1.07345 1.61946 -1.31076 0.942933 0.332733 -0.0129195 + 1.04813 1.6359 -1.39004 0.636789 -0.437044 -0.635211 + 1.03903 1.79188 -1.47559 0.66187 -0.559084 -0.499352 + 1.03127 1.62727 -1.22128 -0.294471 0.350689 0.88899 + 1.04195 1.61112 -1.2181 -0.0172773 -0.558898 0.829056 + 1.07094 1.61182 -1.22433 0.55557 0.69889 0.450437 + 1.08471 1.6042 -1.30653 -0.344203 0.874207 0.342471 + 1.06697 1.60458 -1.35498 0.910741 0.180925 -0.371236 + 0.970943 1.60308 -1.27899 -0.246095 -0.831474 0.498084 + 1.0649 1.61489 -1.27083 0.065591 -0.996733 -0.0471223 + 1.09389 1.61568 -1.277 -0.931783 -0.287204 -0.222022 + 1.07094 1.61182 -1.22433 0.0094432 -0.997581 -0.0688635 + 0.974214 1.60453 -1.30429 0.153899 -0.967906 0.198678 + 1.06817 1.61633 -1.29612 0.0398838 -0.998653 -0.0331873 + 1.07614 1.61597 -1.3255 -0.632925 -0.737396 0.235907 + 0.958138 1.59199 -1.32117 0.0683383 -0.826753 0.558399 + 1.05513 1.61691 -1.31914 0.149368 -0.986403 0.0685423 + 1.06311 1.61647 -1.34857 -0.252598 -0.914244 0.316782 + 1.06697 1.60458 -1.35498 -0.715491 -0.465826 0.520653 + 0.916015 1.58052 -1.33811 -0.0512089 -0.880662 0.470969 + 1.0045 1.56971 -1.36039 0.384251 -0.865048 0.322558 + 1.03906 1.60429 -1.33608 0.42292 -0.860697 0.283443 + 1.04445 1.60833 -1.36107 0.66917 -0.639706 -0.378136 + 0.999675 1.61762 -1.41156 0.577824 -0.513928 -0.634032 + 0.874885 1.58171 -1.35816 -0.155836 -0.935521 0.317042 + 0.869803 1.55489 -1.40731 -0.117366 -0.951148 0.285557 + 0.962381 1.55824 -1.37732 0.0737749 -0.961406 0.265058 + 0.962586 1.55538 -1.43136 0.16705 -0.984224 -0.0582934 + 1.00391 1.56712 -1.43049 0.500222 -0.861933 -0.0827651 + 1.00949 1.57435 -1.40242 0.746686 -0.664781 0.0229117 + 0.797842 1.56298 -1.45753 -0.373286 -0.8553 0.359333 + 0.828673 1.55607 -1.42736 -0.435269 -0.785725 0.439519 + 0.779727 1.56951 -1.42564 -0.419993 -0.901678 0.102872 + 0.764601 1.55928 -1.50431 -0.560087 -0.819925 0.118428 + 0.795433 1.55237 -1.47414 -0.408857 -0.847247 0.339128 + 0.718965 1.64867 -1.47995 -0.833241 -0.547865 -0.0745153 + 0.709268 1.66856 -1.55219 -0.910085 -0.336092 0.242461 + 0.741883 1.56683 -1.54499 -0.772004 -0.538919 0.337011 + 0.748333 1.58493 -1.27294 -0.168059 -0.98413 0.0569621 + 0.711105 1.59853 -1.28851 -0.392707 -0.580329 -0.713442 + 0.697732 1.64315 -1.30438 -0.36092 -0.406732 -0.839229 + 0.999675 1.61762 -1.41156 -0.606195 -0.520986 0.600917 + 0.617342 1.88121 -1.61252 -0.90865 -0.416987 0.0218258 + 0.614695 1.88295 -1.65654 -0.924023 -0.346765 0.161047 + 0.68655 1.67611 -1.59288 -0.899378 -0.247155 0.360602 + 0.735827 1.56272 -1.57048 -0.763838 -0.554399 0.330445 + 0.789377 1.54835 -1.49958 -0.338769 -0.907886 0.246939 + 0.552946 2.00791 -1.68057 -0.798235 -0.598307 0.069638 + 0.550943 2.00401 -1.7274 -0.801423 -0.589201 0.10278 + 0.602854 1.87946 -1.70009 -0.934379 -0.315812 0.16492 + 0.674709 1.67271 -1.63638 -0.903988 -0.220834 0.366111 + 0.510269 2.04669 -1.66974 -0.477782 -0.872512 0.102211 + 0.508265 2.04278 -1.71657 -0.476349 -0.872615 0.107861 + 0.550714 1.99679 -1.7715 -0.802137 -0.589271 0.0966212 + 0.602625 1.87233 -1.74413 -0.95172 -0.27653 0.13327 + 0.446058 2.06606 -1.67028 -0.136581 -0.986829 0.0866803 + 0.440412 2.06276 -1.71117 -0.132052 -0.985838 0.103375 + 0.507865 2.03663 -1.76551 -0.457713 -0.86867 0.189502 + 0.514368 2.02202 -1.8028 -0.577323 -0.808095 0.11696 + 0.557217 1.98227 -1.80875 -0.824748 -0.543819 0.155086 + 0.34736 2.06418 -1.67543 0.140809 -0.988981 0.0457112 + 0.341714 2.06088 -1.71631 0.118041 -0.992768 0.0218711 + 0.338668 2.061 -1.74972 0.081344 -0.996683 0.00225337 + 0.440012 2.0566 -1.76011 -0.176853 -0.979986 0.091382 + 0.251153 2.04122 -1.70027 0.319286 -0.94645 -0.0478393 + 0.248108 2.04134 -1.73368 0.381642 -0.924035 -0.022558 + 0.264373 2.05085 -1.77315 0.314288 -0.945223 -0.0881893 + 0.339247 2.05993 -1.79147 0.030166 -0.998423 -0.0473315 + 0.174488 2.00368 -1.65883 0.538045 -0.842662 0.0206794 + 0.189027 2.00479 -1.72437 0.501598 -0.864757 -0.0243829 + 0.205292 2.0143 -1.76384 0.356518 -0.923188 -0.143591 + 0.265035 2.05477 -1.80713 0.228708 -0.956795 -0.179543 + 0.339909 2.06385 -1.82546 -0.000285224 -0.995065 -0.0992229 + 0.111065 1.95909 -1.59961 0.587067 -0.809264 -0.0210554 + 0.125604 1.96012 -1.66519 0.335336 -0.92672 -0.169525 + 0.187894 2.01719 -1.79183 0.169331 -0.918047 -0.358491 + 0.247637 2.05774 -1.83508 0.26027 -0.935877 -0.237474 + 0.042738 1.88424 -1.50536 0.33673 -0.88782 -0.313669 + 0.042738 1.90673 -1.53852 0.0774374 -0.866322 -0.493446 + 0.040862 1.9282 -1.58431 -0.118476 -0.798496 -0.590226 + 0.123728 1.98159 -1.71098 -0.161344 -0.893084 -0.419963 + -0.031751 1.86788 -1.44843 -0.348314 -0.926419 -0.142913 + -0.042737 1.88423 -1.50535 -0.331087 -0.895377 -0.297794 + -0.042737 1.90673 -1.53852 0.13453 -0.849144 -0.510741 + -0.040873 1.9282 -1.58431 0.125077 -0.810713 -0.571926 + 0.040862 1.96688 -1.60749 -0.334689 -0.645822 -0.68622 + -0.031751 1.86393 -1.40499 -0.339445 -0.932228 -0.12541 + -0.100078 1.94265 -1.54273 -0.565744 -0.808957 -0.159757 + -0.111065 1.95909 -1.5996 -0.672005 -0.740429 0.0132315 + -0.125604 1.96012 -1.66519 -0.338467 -0.924021 -0.177833 + -0.12374 1.98159 -1.71098 0.0467623 -0.904869 -0.423113 + -0.089799 1.91981 -1.48138 -0.52149 -0.834869 -0.176187 + -0.162859 1.97594 -1.54879 -0.446653 -0.870728 -0.205752 + -0.173139 1.99886 -1.61009 -0.464722 -0.872677 -0.149894 + -0.174485 2.00368 -1.65883 -0.534945 -0.844501 0.0255376 + -0.086886 1.91101 -1.43273 -0.566541 -0.816399 -0.111913 + -0.171197 1.97345 -1.51008 -0.483083 -0.864242 -0.140419 + -0.262059 2.04011 -1.62035 -0.357959 -0.930292 -0.0801356 + -0.249804 2.03641 -1.65153 -0.348048 -0.935789 -0.0562269 + -0.25115 2.04123 -1.70028 -0.346664 -0.937405 -0.033101 + -0.087233 1.90524 -1.39074 -0.527614 -0.838987 -0.13313 + -0.171544 1.96768 -1.46809 -0.512997 -0.852862 -0.0972679 + -0.290109 2.04489 -1.55221 -0.392271 -0.916058 -0.0834259 + -0.270397 2.03754 -1.58169 -0.4122 -0.904524 -0.109213 + -0.031728 1.84797 -1.26694 0.437367 -0.897671 -0.0538279 + -0.090123 1.89872 -1.34384 -0.6065 -0.791501 -0.0753859 + -0.152415 1.95209 -1.41768 -0.604237 -0.7968 -0.0028008 + -0.064756 1.84625 -1.22456 0.0618531 -0.984561 0.163748 + -0.078296 1.88988 -1.28734 -0.788453 -0.592911 -0.163702 + -0.140588 1.94325 -1.36118 -0.523398 -0.837579 -0.156575 + -0.270981 2.02929 -1.5018 -0.437137 -0.889871 -0.130543 + -0.044032 1.92098 -1.1196 -0.0115868 -0.707289 0.706829 + -0.055769 1.94427 -1.11555 -0.910722 -0.180195 0.371638 + -0.099451 1.85062 -1.21534 -0.0480097 -0.996661 -0.0660425 + -0.112991 1.89426 -1.27811 -0.0651286 -0.828299 -0.556488 + -0.166982 1.95299 -1.35484 -0.273241 -0.880027 -0.388448 + -0.011004 2.20909 -0.926224 0.7156 -0.443972 0.539263 + -0.186089 1.88576 -1.28879 0.161232 -0.700466 -0.695235 + -0.220969 1.91315 -1.32224 0.137791 -0.589257 -0.796109 + -0.147871 1.92165 -1.31156 0.00972485 -0.754059 -0.656734 + -0.258158 1.99109 -1.39224 -0.259558 -0.876762 -0.404868 + -0.297374 2.03902 -1.49545 -0.35527 -0.91204 -0.204857 + -0.385413 2.08078 -1.57577 -0.138565 -0.981181 0.134478 + -0.289946 1.91605 -1.33405 0.277019 -0.573605 -0.770868 + -0.239048 1.95976 -1.34897 0.00738439 -0.667543 -0.744535 + -0.319803 2.01877 -1.40457 -0.317686 -0.806755 -0.498218 + -0.359019 2.06661 -1.50784 -0.374431 -0.899556 -0.224946 + -0.385615 2.08499 -1.54067 -0.255338 -0.966666 0.0189713 + -0.307158 1.88639 -1.30328 0.0762721 -0.738896 -0.669489 + 1.04089 1.60615 -1.42989 0.816785 -0.57681 -0.0123572 + 1.03531 1.59883 -1.45802 0.720083 -0.692699 -0.0406009 + 1.07254 1.68849 -1.48572 0.460321 0.326474 0.825542 + 0.958147 1.58084 -1.55326 0.318838 -0.928762 -0.189058 + 0.974159 1.59288 -1.59131 0.252233 -0.962968 -0.0952475 + 1.05132 1.61087 -1.49608 0.251025 -0.956782 -0.146815 + 1.09371 1.62534 -1.52933 0.734313 -0.600706 0.316129 + 1.11344 1.68017 -1.5459 0.899975 -0.129682 0.416207 + 0.91682 1.56909 -1.55411 0.230899 -0.95778 -0.171298 + 0.854296 1.57472 -1.65427 0.127203 -0.985126 -0.115527 + 0.984777 1.59709 -1.6334 0.217578 -0.976041 0.00205133 + 1.06806 1.61524 -1.58263 0.280751 -0.959757 -0.00679284 + 1.11045 1.62969 -1.61588 0.571944 -0.818042 0.0607276 + 0.870008 1.5521 -1.46128 0.102568 -0.994519 -0.0203004 + 0.835008 1.54712 -1.48826 0.0904825 -0.992795 0.0785595 + 0.88182 1.56411 -1.58109 0.333728 -0.928299 -0.163972 + 0.822507 1.53543 -1.53941 0.195749 -0.97751 0.0784601 + 0.808802 1.53514 -1.5703 0.149093 -0.97645 -0.15594 + 0.868116 1.5639 -1.61192 0.561916 -0.744045 -0.361451 + 0.776876 1.53665 -1.55073 -0.327038 -0.918534 0.222127 + 0.766598 1.5343 -1.58024 -0.239272 -0.970949 0.00269664 + 0.780273 1.54606 -1.61161 0.13826 -0.915184 -0.378579 + 0.765583 1.55312 -1.63144 0.167659 -0.857169 -0.486982 + 0.853425 1.57097 -1.63176 -0.00466186 -0.959275 -0.282436 + 0.708811 1.56323 -1.62117 -0.773408 -0.51719 0.366543 + 0.698533 1.56096 -1.65062 -0.690655 -0.685795 0.229522 + 0.738069 1.5453 -1.62151 -0.133907 -0.977187 -0.164845 + 0.710916 1.55531 -1.66445 0.00711219 -0.924414 -0.381325 + 0.750306 1.56372 -1.6498 0.234349 -0.853668 -0.465114 + 0.647693 1.67322 -1.68706 -0.924547 -0.16637 0.342832 + 0.67138 1.57105 -1.69351 -0.72205 -0.660574 0.205637 + 0.594177 1.86686 -1.79246 -0.96086 -0.237148 0.143211 + 0.639244 1.66784 -1.73534 -0.965609 -0.220461 0.137828 + 0.66662 1.5694 -1.74905 -0.563861 -0.822548 -0.0739995 + 0.695639 1.56591 -1.6828 0.0581625 -0.941151 -0.332944 + 0.751176 1.56747 -1.67231 0.050207 -0.994112 -0.096026 + 0.594023 1.85066 -1.8352 -0.96658 -0.252292 0.0455186 + 0.634484 1.66618 -1.79088 -0.959732 -0.279773 0.0253176 + 0.67391 1.57456 -1.78639 -0.470853 -0.849224 -0.238989 + 0.702929 1.57108 -1.72015 0.0412472 -0.996137 -0.0775247 + 0.768767 1.56808 -1.72116 0.0530425 -0.996764 -0.060392 + 0.557063 1.96606 -1.85148 -0.883195 -0.456076 0.109363 + 0.552771 1.96938 -1.88103 -0.887925 -0.459138 -0.0279655 + 0.594288 1.85134 -1.88378 -0.959408 -0.277764 -0.0488163 + 0.634749 1.66686 -1.83946 -0.927225 -0.358029 -0.10986 + 0.510076 2.02542 -1.8323 -0.604471 -0.796521 -0.0129642 + 0.555563 1.97222 -1.92336 -0.894779 -0.431104 -0.116272 + 0.59708 1.85427 -1.92606 -0.943277 -0.295349 -0.151648 + 0.638298 1.6843 -1.89185 -0.883089 -0.410002 -0.228147 + 0.677459 1.59199 -1.83878 -0.51054 -0.791386 -0.336239 + 0.44059 2.05553 -1.80185 -0.227041 -0.973863 0.00660674 + 0.516572 2.02379 -1.88107 -0.665881 -0.737829 -0.110502 + 0.520779 2.02929 -1.92639 -0.654446 -0.741409 -0.148369 + 0.55977 1.97772 -1.96868 -0.890791 -0.400217 -0.215214 + 0.603326 1.86842 -1.97277 -0.92247 -0.311388 -0.228225 + 0.447086 2.0539 -1.85062 -0.268111 -0.961703 -0.0569544 + 0.449094 2.05791 -1.89177 -0.280381 -0.951832 -0.124101 + 0.522501 2.03545 -1.97427 -0.612652 -0.773905 -0.160398 + 0.565518 1.9927 -2.01062 -0.860653 -0.477821 -0.175963 + 0.609074 1.8834 -2.01471 -0.891675 -0.341021 -0.297691 + 0.341917 2.06786 -1.86661 -0.0445563 -0.984371 -0.170377 + 0.340549 2.07585 -1.89925 -0.0944188 -0.969281 -0.227112 + 0.450816 2.06408 -1.93966 -0.300418 -0.939814 -0.16278 + 0.522957 2.04655 -2.01909 -0.582695 -0.798623 -0.150557 + 0.565974 2.00379 -2.05543 -0.830559 -0.50032 -0.244648 + 0.246269 2.06574 -1.86774 0.12086 -0.933249 -0.338289 + 0.259559 2.08354 -1.90636 0.0402131 -0.940388 -0.337718 + 0.338979 2.08419 -1.93909 -0.142759 -0.958185 -0.247996 + 0.449246 2.07242 -1.9795 -0.302975 -0.937516 -0.171086 + 0.17614 2.05015 -1.86073 0.0867517 -0.912287 -0.400258 + 0.18943 2.06804 -1.89932 0.143896 -0.918931 -0.367231 + 0.261 2.09316 -1.93783 -0.00387187 -0.955782 -0.294049 + 0.34042 2.09381 -1.97056 -0.162819 -0.948114 -0.273074 + 0.111974 2.01456 -1.77988 -0.27701 -0.859301 -0.429962 + 0.171277 2.07515 -1.92282 -0.0161006 -0.916453 -0.399819 + 0.242848 2.10027 -1.96134 0.0538339 -0.947297 -0.315802 + 0.337427 2.1054 -2.00943 -0.182357 -0.934912 -0.304442 + 0.437442 2.0831 -2.0248 -0.318361 -0.928611 -0.190599 + 0.035854 1.99695 -1.65639 -0.258966 -0.831457 -0.491545 + 0.106966 2.04463 -1.82877 -0.320906 -0.852873 -0.411858 + 0.158061 2.0999 -1.9735 -0.0158891 -0.920281 -0.390935 + 0.247097 2.11101 -1.99235 -0.0366604 -0.920525 -0.38896 + 0.341676 2.11606 -2.04048 -0.225425 -0.924514 -0.30734 + -0.040873 1.96688 -1.60749 0.447342 -0.605901 -0.657852 + -0.035869 1.99695 -1.65639 0.259909 -0.833199 -0.488085 + 0.035854 2.01767 -1.68967 -0.294139 -0.83197 -0.470434 + 0.093749 2.06938 -1.87943 -0.259546 -0.892635 -0.368563 + -0.111985 2.01456 -1.77988 0.275051 -0.855166 -0.43936 + -0.106981 2.04463 -1.82877 0.292868 -0.860237 -0.417396 + -0.093765 2.06929 -1.87949 0.2604 -0.89144 -0.370846 + -0.035869 2.01767 -1.68967 0.365537 -0.808481 -0.461239 + 0.025987 2.03612 -1.72583 -0.168121 -0.904856 -0.391115 + -0.187894 2.01719 -1.79183 -0.174317 -0.913408 -0.36783 + -0.17614 2.05015 -1.86073 -0.108508 -0.915471 -0.387478 + -0.171277 2.07515 -1.92282 0.011308 -0.913346 -0.407028 + -0.189024 2.00479 -1.72437 -0.486474 -0.872838 -0.0386927 + -0.205292 2.0143 -1.76384 -0.356607 -0.923126 -0.143773 + -0.247637 2.05774 -1.83508 -0.185314 -0.943872 -0.273431 + -0.248104 2.04134 -1.73368 -0.394612 -0.918022 -0.0389338 + -0.264373 2.05085 -1.77315 -0.314272 -0.94523 -0.088168 + -0.265035 2.05477 -1.80713 -0.228408 -0.956859 -0.179586 + -0.341714 2.06088 -1.71631 -0.105217 -0.993904 0.0329194 + -0.338669 2.061 -1.74972 -0.0692507 -0.997581 -0.00607547 + -0.339247 2.05993 -1.79147 -0.0202501 -0.999058 -0.0383757 + -0.339909 2.06385 -1.82546 0.0163608 -0.993846 -0.109556 + -0.34736 2.06418 -1.67543 -0.143915 -0.988425 0.0480109 + -0.440412 2.06276 -1.71117 0.12431 -0.986141 0.109878 + -0.440012 2.0566 -1.76011 0.162983 -0.983239 0.0817146 + -0.44059 2.05553 -1.80185 0.215503 -0.976374 0.0158792 + -0.447086 2.0539 -1.85062 0.262667 -0.962886 -0.0621016 + -0.359616 2.06797 -1.64419 -0.133723 -0.987247 0.0863842 + -0.446058 2.06606 -1.67028 0.140596 -0.985975 0.0899251 + -0.508265 2.04278 -1.71657 0.474703 -0.873774 0.105713 + -0.507865 2.03663 -1.76551 0.482399 -0.865182 0.136935 + -0.510076 2.02542 -1.8323 0.61025 -0.792073 0.0146968 + -0.3657 2.07343 -1.60525 -0.177184 -0.980204 0.088356 + -0.451351 2.06927 -1.62164 0.150486 -0.980798 0.124052 + -0.515571 2.0499 -1.62109 0.543541 -0.836332 0.0714971 + -0.510278 2.04669 -1.66974 0.492073 -0.865777 0.0910711 + -0.550943 2.00401 -1.7274 0.804281 -0.585967 0.0988655 + -0.457435 2.07473 -1.5827 0.229321 -0.966998 0.111025 + -0.515322 2.05069 -1.57487 0.576369 -0.816993 -0.0179433 + -0.555603 2.00625 -1.63649 0.817199 -0.575558 0.0303213 + -0.552956 2.00791 -1.68057 0.793023 -0.606439 0.0578475 + -0.439282 2.08334 -1.53762 0.191301 -0.974031 0.121108 + -0.497169 2.05931 -1.52979 0.558127 -0.829746 0.00398275 + -0.562635 2.00285 -1.54721 0.80071 -0.598515 0.0253719 + -0.555354 2.00713 -1.59022 0.821027 -0.569684 0.0370653 + -0.439484 2.08755 -1.50251 0.115367 -0.992835 0.0311252 + -0.47773 2.07946 -1.47809 0.392774 -0.91892 0.0362546 + -0.514858 2.03812 -1.4885 0.692738 -0.691325 0.205385 + -0.580324 1.98159 -1.50598 0.814622 -0.560088 -0.15064 + -0.63432 1.85705 -1.49726 0.921812 -0.387524 0.00933292 + -0.426897 2.08626 -1.47047 -0.106515 -0.971316 -0.212603 + -0.465143 2.07809 -1.44612 0.1193 -0.985214 -0.122965 + -0.538714 2.05245 -1.44351 0.55632 -0.798899 0.228624 + -0.575842 2.0112 -1.45386 0.771179 -0.440403 0.459704 + -0.600283 1.9196 -1.4594 0.922073 -0.387009 0.00237487 + -0.400301 2.06788 -1.43764 -0.317224 -0.909285 -0.269389 + -0.474158 2.07625 -1.40354 -0.000841495 -0.994941 -0.100453 + -0.547729 2.0507 -1.40088 0.595961 -0.794513 0.116533 + -0.588591 2.00453 -1.39152 0.893102 -0.445823 0.0600933 + -0.400545 2.05461 -1.39905 -0.351901 -0.801865 -0.482884 + -0.474401 2.06298 -1.36495 -0.445921 -0.790117 -0.420558 + -0.531356 2.07762 -1.31671 0.190772 -0.863539 -0.466805 + -0.572218 2.03154 -1.3073 0.643406 -0.517911 -0.563734 + -0.308024 1.96257 -1.36083 0.0454341 -0.434275 -0.899634 + -0.388766 1.99849 -1.35526 -0.301134 -0.3669 -0.880172 + -0.445089 2.02378 -1.34266 -0.518481 -0.45634 -0.72314 + -0.502044 2.03843 -1.29442 -0.201851 -0.365996 -0.908462 + -0.516749 1.9941 -1.29365 -0.16422 -0.00214567 -0.986421 + -0.356275 1.87655 -1.35384 0.209898 -0.484645 -0.849154 + -0.412598 1.90184 -1.34124 -0.301528 0.00494521 -0.953444 + -0.427303 1.85751 -1.34046 -0.0279439 -0.123754 -0.991919 + -0.307158 1.88639 -1.30328 0.544734 -0.814191 -0.200894 + -0.373487 1.84689 -1.32308 0.417849 -0.900289 -0.12199 + -0.436509 1.85922 -1.26723 0.429557 -0.543335 0.721296 + -0.49098 1.81562 -1.26952 0.751295 -0.349062 0.5601 + -0.427958 1.8033 -1.32537 0.457793 -0.606249 0.650299 + -0.475914 1.89309 -1.2211 0.782113 -0.491869 0.382575 + -0.500833 1.82957 -1.20268 0.939012 -0.332084 0.0893095 + -0.51418 1.75007 -1.25658 0.840412 -0.540167 0.0438927 + -0.427958 1.8033 -1.32537 0.652006 -0.0819838 0.753769 + -0.422755 1.953 -1.21965 0.844536 0.00795385 0.535439 + -0.45742 1.9356 -1.16112 0.9233 -0.216313 0.317374 + -0.482339 1.87208 -1.1427 0.945903 -0.307456 0.103623 + -0.506073 1.81232 -1.1118 0.958146 -0.27496 0.0797017 + -0.524033 1.76402 -1.18974 0.942365 -0.331354 0.0464063 + -0.38335 1.9192 -1.26572 0.640686 0.0840649 0.763187 + -0.406668 2.21423 -1.56392 0.802703 0.471233 0.365524 + -0.458864 2.00335 -1.18766 0.948296 0.193561 0.251535 + -0.470622 2.07197 -1.13612 0.989595 0.086953 0.114639 + -0.469178 2.00413 -1.10962 0.972673 0.00364498 0.232153 + -0.307158 1.88639 -1.30328 0.314201 -0.301025 0.900367 + -0.427958 1.8033 -1.32537 0.102436 -0.26789 -0.957988 + -0.503793 1.84717 -1.33935 -0.120804 0.0310537 -0.992191 + -0.548917 1.83148 -1.32838 -0.357764 0.0485685 -0.932548 + -0.561873 1.97841 -1.28268 0.147875 -0.106814 -0.983221 + -0.504448 1.79296 -1.32426 0.174015 -0.517839 -0.837593 + -0.541439 1.73998 -1.3119 0.364933 -0.463747 -0.807318 + -0.597746 1.77671 -1.30732 -0.189676 0.012338 -0.981769 + -0.589436 1.89582 -1.28503 0.103275 -0.0258392 -0.994317 + -0.599781 1.94896 -1.30966 0.87307 -0.263721 -0.410122 + -0.551171 1.69718 -1.24416 0.991708 -0.118923 0.0487045 + -0.542234 1.62171 -1.22585 0.780819 -0.375076 -0.499639 + -0.590268 1.68522 -1.29085 0.221149 -0.440923 -0.869873 + -0.631381 1.67812 -1.30036 -0.0164012 -0.488553 -0.87238 + -0.628198 1.74036 -1.30896 0.284703 -0.080724 -0.955211 + -0.541192 1.70115 -1.16484 0.992566 -0.116392 -0.0355904 + -0.532254 1.62568 -1.14653 0.996308 -0.0840098 0.0176845 + -0.556701 1.56805 -1.18832 0.482479 -0.752529 -0.448235 + -0.427958 1.8033 -1.32537 0.106893 -0.846721 -0.521189 + 0.998147 1.78121 -1.21072 0.176721 0.0027352 0.984257 + 0.973831 1.76895 -1.17167 0.931008 0.205379 0.301735 + 0.97388 1.77014 -1.11294 0.962471 0.214047 0.166836 + 0.948906 1.69815 -1.06444 0.65038 -0.758601 -0.0391053 + 0.97091 1.85955 -1.1818 0.645793 0.0168485 0.763327 + 0.947908 1.85511 -1.16152 0.872688 0.225909 0.432875 + 0.950398 1.84448 -1.0949 0.955143 0.277036 0.104658 + 0.940618 1.79502 -1.02983 0.988135 0.0332332 0.149946 + 0.9641 1.72068 -1.04788 0.953665 -0.172208 0.246715 + 0.901206 1.61571 -1.00085 0.845814 -0.530776 -0.0536267 + 0.965696 2.02809 -1.16413 0.73215 -0.09829 0.674014 + 0.937612 2.10506 -1.11184 0.459765 -0.284535 0.841223 + 0.944987 1.94571 -1.17164 0.118054 -0.164887 0.979222 + 0.914823 2.0173 -1.13822 0.454341 -0.170611 0.874338 + 0.918321 1.93126 -1.14001 0.856898 0.2115 0.470099 + 1.01448 2.0909 -1.18991 0.62502 -0.268693 0.732908 + 0.986391 2.16787 -1.13762 0.613835 -0.297592 0.731194 + 0.964182 2.25192 -1.0832 0.515252 -0.329734 0.791069 + 0.907448 2.17665 -1.07843 0.507999 -0.269674 0.818054 + 1.01446 1.69188 -1.20979 -0.601831 -0.101663 0.792126 + 1.10748 2.05776 -1.27712 0.655601 -0.30825 0.689325 + 1.09549 2.15062 -1.22155 0.636267 -0.307186 0.707673 + 1.07328 2.23468 -1.16714 0.605909 -0.333226 0.722381 + 1.16448 1.97777 -1.38457 0.876606 -0.270515 0.397974 + 1.17192 2.06806 -1.34315 0.851429 -0.241055 0.465792 + 1.15993 2.16082 -1.28762 0.792213 -0.25469 0.554556 + 1.15643 2.2665 -1.23506 0.773664 -0.244587 0.584483 + 1.05397 2.32482 -1.10727 0.575139 -0.330183 0.748462 + 1.17722 1.95109 -1.46175 0.928746 -0.342127 0.142757 + 1.18692 2.03124 -1.42838 0.943336 -0.220648 0.247853 + 1.19436 2.12152 -1.38695 0.912291 -0.221821 0.344267 + 1.20373 2.19955 -1.34889 0.87031 -0.266113 0.41442 + 1.20022 2.30514 -1.29638 0.823583 -0.222867 0.521576 + 1.13559 1.86389 -1.47411 0.772915 -0.587424 -0.239867 + 1.16166 1.92269 -1.53557 0.773735 -0.633217 -0.0192284 + 1.20451 1.99043 -1.53648 0.924552 -0.348469 0.154186 + 1.2142 2.0705 -1.50317 0.940541 -0.271985 0.203488 + 1.23862 2.16438 -1.46977 0.926123 -0.269104 0.264348 + 1.0651 1.85068 -1.53704 0.803781 -0.572182 0.162926 + 1.18043 1.92842 -1.63808 0.800181 -0.549045 0.24137 + 1.22327 1.99606 -1.63905 0.930457 -0.325114 0.168969 + 1.24255 2.08485 -1.60643 0.943292 -0.286116 0.168336 + 1.26697 2.17874 -1.57305 0.900717 -0.375908 0.217721 + 1.00259 1.73764 -1.46965 0.911143 -0.354519 -0.210083 + 1.03402 1.78122 -1.51992 0.819924 -0.155853 0.550849 + 0.98083 1.64894 -1.44662 0.914052 0.402404 0.0507898 + 1.01227 1.69252 -1.49689 0.506191 0.324629 0.798991 + 1.19025 1.85053 -1.68118 0.923312 -0.229289 0.308094 + 0.999675 1.61762 -1.41156 0.0173156 0.75015 0.661041 + 0.9164 1.63825 -0.984295 0.740895 -0.606086 0.289368 + 0.943193 1.68178 -0.955688 0.87374 -0.484211 0.0460162 + 0.912573 1.69183 -0.920301 -0.500376 -0.688659 0.52476 + 0.885779 1.6483 -0.948908 -0.301474 -0.649747 0.697812 + 0.901206 1.61571 -1.00085 0.425495 -0.704292 0.568267 + 0.942229 1.8297 -1.0013 0.994588 0.102939 0.0140512 + 0.944804 1.71646 -0.927156 0.999425 -0.0305215 -0.0147637 + 0.942828 1.68755 -0.866894 0.998141 -0.0411194 0.0449861 + 0.945445 1.76854 -0.856961 0.99584 0.0460406 0.0786322 + 0.934322 1.71336 -0.760589 0.598627 -0.707114 0.376344 + 0.920811 1.92063 -1.0734 0.925506 0.374322 0.0576395 + 0.930003 1.89001 -1.01636 0.953451 0.300533 0.0246987 + 0.947421 1.79745 -0.917232 0.994185 0.101218 0.0367644 + 0.882867 2.01003 -1.11103 0.861614 0.220036 0.457389 + 0.886784 1.98825 -1.04451 0.909922 0.407703 0.0762849 + 0.895976 1.95763 -0.987472 0.920109 0.390461 0.030656 + 0.935195 1.85775 -0.932285 0.962104 0.265439 0.0624326 + 0.879369 2.09615 -1.1092 0.321053 -0.253941 0.912381 + 0.845327 2.17518 -1.06869 0.448241 -0.259466 0.855428 + 0.849735 2.0802 -1.07638 0.878367 0.198379 0.434876 + 0.853651 2.05842 -1.00985 0.91679 0.398687 0.0233236 + 0.881246 1.99862 -0.951473 0.926245 0.376605 -0.0154823 + 0.879442 2.25536 -1.02896 0.267248 -0.391944 0.880317 + 0.845399 2.33448 -0.9884 0.0790563 -0.382344 0.920632 + 0.809396 2.42101 -0.952472 0.270372 -0.321581 0.90746 + 0.808738 2.24592 -1.02162 0.612162 -0.17746 0.770562 + 0.813146 2.15103 -1.02926 0.916703 0.217531 0.335167 + 0.936176 2.33064 -1.03375 0.491946 -0.322704 0.80861 + 0.91135 2.41981 -0.9836 0.385384 -0.286813 0.87705 + 0.875347 2.50634 -0.947673 0.339144 -0.271432 0.900725 + 0.84901 2.5959 -0.908795 0.348091 -0.260138 0.900645 + 0.776939 2.49672 -0.913018 0.150996 -0.336835 0.929377 + 1.02915 2.41408 -1.05708 0.530968 -0.318174 0.785391 + 1.01347 2.5095 -1.00474 0.499452 -0.26853 0.823674 + 0.987138 2.59905 -0.965853 0.474369 -0.204146 0.856328 + 1.11549 2.42714 -1.11729 0.705029 -0.262086 0.658972 + 1.09981 2.52255 -1.06495 0.684773 -0.222131 0.694077 + 1.10261 2.61414 -1.04439 0.712006 -0.102851 0.6946 + 0.958832 2.696 -0.930375 0.47887 -0.227707 0.84784 + 1.13711 2.35673 -1.17514 0.751653 -0.263745 0.60453 + 1.17913 2.52014 -1.17458 0.827472 -0.163829 0.537075 + 1.18193 2.61173 -1.15402 0.747321 -0.218951 0.627353 + 1.0743 2.71118 -1.00886 0.634746 -0.167597 0.754326 + 1.20076 2.44965 -1.23248 0.806375 -0.215933 0.550575 + 1.26461 2.50664 -1.301 0.707621 -0.297575 0.640876 + 1.25061 2.61971 -1.22144 0.662115 -0.340955 0.667348 + 1.17847 2.75048 -1.09314 0.681459 -0.21774 0.698715 + 1.26406 2.36205 -1.36495 0.827636 -0.300358 0.474135 + 1.33952 2.57633 -1.3355 0.677111 -0.40554 0.61405 + 1.32552 2.6894 -1.25595 0.644429 -0.334869 0.68744 + 1.24715 2.75846 -1.16056 0.64424 -0.279807 0.711802 + 1.15569 2.85747 -1.04705 0.643262 -0.174932 0.745394 + 1.24798 2.24232 -1.43177 0.885961 -0.32003 0.33564 + 1.33449 2.41726 -1.46819 0.768124 -0.41294 0.489354 + 1.4176 2.48106 -1.51169 0.562564 -0.550139 0.617146 + 1.42262 2.64013 -1.379 0.606178 -0.441856 0.661295 + 1.35603 2.76998 -1.24792 0.598128 -0.363393 0.714275 + 1.31841 2.29753 -1.535 0.812886 -0.464384 0.351518 + 1.43417 2.38079 -1.61921 0.552759 -0.682558 0.478092 + 1.53345 2.52886 -1.54308 0.396722 -0.594562 0.699363 + 1.49076 2.72627 -1.3838 0.454796 -0.502434 0.735337 + 1.42417 2.85621 -1.25266 0.47138 -0.451471 0.757611 + 1.28924 2.1782 -1.66811 0.884098 -0.433425 0.174684 + 1.34068 2.29708 -1.63003 0.761071 -0.612964 0.212241 + 1.38679 2.33015 -1.6615 0.589487 -0.744131 0.314283 + 1.52086 2.36081 -1.75201 0.317471 -0.810465 0.492299 + 1.55002 2.42859 -1.6506 0.319272 -0.73415 0.59924 + 1.26074 2.09963 -1.71582 0.932064 -0.343325 0.115697 + 1.31454 2.19299 -1.78813 0.81329 -0.555462 0.173264 + 1.36065 2.22605 -1.8196 0.626467 -0.72319 0.290751 + 1.47347 2.31008 -1.79434 0.436712 -0.833116 0.339412 + 1.24146 2.01092 -1.74839 0.965315 -0.257614 0.0424489 + 1.24278 2.03662 -1.8647 0.939585 -0.338999 -0.0475287 + 1.28605 2.1145 -1.83579 0.901687 -0.431892 0.0207403 + 1.29907 2.1611 -1.92471 0.807038 -0.545618 -0.225813 + 1.39568 2.23147 -1.89478 0.597069 -0.780679 -0.184524 + 1.21483 1.91541 -1.79335 0.978002 -0.208562 -0.0036083 + 1.21616 1.94119 -1.90961 0.974387 -0.219436 -0.0491665 + 1.20434 1.9139 -1.99994 0.980805 -0.158822 -0.113129 + 1.21327 1.99216 -2.01029 0.96728 -0.169182 -0.189066 + 1.25581 2.08331 -1.95357 0.909478 -0.351334 -0.222294 + 1.20517 1.85808 -1.77485 0.977937 -0.203172 0.048575 + 1.18278 1.76785 -1.93897 0.9789 -0.193564 -0.0654797 + 1.17096 1.74047 -2.02934 0.959981 -0.25989 -0.104377 + 1.16752 1.80589 -2.15486 0.954694 -0.207466 -0.213347 + 1.17645 1.88415 -2.16522 0.942118 -0.0382446 -0.333092 + 1.17745 1.71176 -1.83562 0.936087 -0.350697 0.0274444 + 1.17311 1.71051 -1.92046 0.938578 -0.339105 -0.0638635 + 1.15142 1.68191 -2.03092 0.968679 -0.207435 -0.1365 + 1.16252 1.70413 -1.742 0.944067 -0.305173 0.124926 + 1.13874 1.64637 -1.84257 0.698468 -0.714866 -0.0333007 + 1.15142 1.68191 -2.03092 0.913985 -0.383838 -0.131527 + 1.1428 1.64929 -1.72542 0.852678 -0.512774 0.100018 + 1.11866 1.63277 -1.6602 0.472415 -0.881191 -0.0180574 + 1.151 1.65245 -1.7697 0.728805 -0.680928 0.0719691 + 1.07868 1.61952 -1.62466 0.260139 -0.963641 -0.0610206 + 1.13374 1.64126 -1.6999 0.395596 -0.91711 0.0491234 + 1.09376 1.62793 -1.66441 0.262589 -0.964091 -0.0396832 + 1.13429 1.63956 -1.72157 0.593647 -0.799579 0.0908634 + 1.15155 1.65076 -1.79137 0.575327 -0.817291 -0.0321529 + 0.983657 1.59513 -1.65601 0.235754 -0.962681 0.132913 + 1.09264 1.62597 -1.68702 0.356762 -0.92549 0.12724 + 1.11412 1.62372 -1.75273 0.461114 -0.886532 0.0378739 + 1.10131 1.61933 -1.80392 0.429413 -0.899486 -0.0808002 + 1.05968 1.60678 -1.84059 0.378753 -0.924359 -0.0458907 + 0.962638 1.58518 -1.67937 0.158432 -0.978443 0.132473 + 1.07247 1.61012 -1.71818 0.354357 -0.923003 0.149987 + 1.05145 1.60017 -1.74154 0.307079 -0.949714 0.0612074 + 1.00982 1.58762 -1.7782 0.172976 -0.98369 -0.0493352 + 1.04654 1.60198 -1.86107 0.174137 -0.96499 -0.19614 + 0.862281 1.57804 -1.67641 0.0931563 -0.990595 -0.100212 + 0.90641 1.58098 -1.68711 0.0536302 -0.99854 -0.00642122 + 0.776752 1.5714 -1.74331 0.194425 -0.953838 -0.228891 + 0.783099 1.58057 -1.76098 0.174883 -0.95598 -0.235623 + 0.827227 1.58351 -1.77167 0.0109612 -0.984911 -0.172712 + 0.953589 1.58342 -1.78594 0.0390918 -0.990586 -0.131189 + 0.733873 1.5759 -1.7889 0.119775 -0.950791 -0.285747 + 0.740219 1.58506 -1.80657 0.219833 -0.880022 -0.420994 + 0.729381 1.60414 -1.84241 0.272837 -0.748053 -0.604961 + 0.782992 1.61007 -1.84089 -0.0277679 -0.867597 -0.496492 + 0.835885 1.59909 -1.83347 -0.0936769 -0.928144 -0.360239 + 0.72052 1.57168 -1.769 -0.00286543 -0.990885 -0.134677 + 0.690812 1.59621 -1.85868 -0.135229 -0.854711 -0.50118 + 0.679974 1.61528 -1.89451 0.377307 -0.765326 -0.521455 + 0.644544 1.69845 -1.93856 -0.850646 -0.419864 -0.316411 + 0.679974 1.61528 -1.89451 -0.933281 -0.34537 0.0985241 + 0.657005 1.72042 -1.98722 -0.799496 -0.443119 -0.405526 + 0.692435 1.63725 -1.94316 -0.716957 -0.539359 -0.441661 + 0.679974 1.61528 -1.89451 -0.726925 -0.53663 -0.428494 + 0.618961 1.9043 -2.05851 -0.866897 -0.378982 -0.323825 + 0.666892 1.74132 -2.03102 -0.734983 -0.471582 -0.487248 + 0.702546 1.66783 -1.99233 -0.0219185 -0.890527 -0.454403 + 0.628127 1.91379 -2.10014 -0.854525 -0.417905 -0.308451 + 0.680883 1.77302 -2.07412 -0.744353 -0.48553 -0.458475 + 0.716537 1.69952 -2.03542 -0.0872129 -0.839277 -0.536664 + 0.575139 2.01336 -2.097 -0.774972 -0.609114 -0.168518 + 0.575473 2.02009 -2.14067 -0.70299 -0.708263 -0.0645623 + 0.637969 1.92843 -2.1431 -0.846333 -0.47816 -0.234698 + 0.690725 1.78757 -2.11712 -0.788109 -0.507852 -0.347807 + 0.729336 1.72366 -2.08744 -0.192497 -0.878335 -0.437576 + 0.511152 2.05723 -2.06439 -0.485559 -0.867525 -0.107859 + 0.511486 2.06396 -2.10805 -0.547314 -0.820497 -0.16502 + 0.58823 2.00932 -2.18261 -0.751994 -0.654913 -0.0747964 + 0.650726 1.91757 -2.18509 -0.872408 -0.471314 -0.129487 + 0.434449 2.09469 -2.06367 -0.372701 -0.893503 -0.250493 + 0.506492 2.07895 -2.15301 -0.544495 -0.829369 -0.125188 + 0.508242 2.08118 -2.19707 -0.544658 -0.837964 -0.0341302 + 0.589979 2.01155 -2.22667 -0.746194 -0.657017 -0.107346 + 0.429455 2.10959 -2.10868 -0.372252 -0.89973 -0.227848 + 0.426015 2.12053 -2.14762 -0.374498 -0.918667 -0.125708 + 0.499475 2.08507 -2.24461 -0.506715 -0.861706 0.0265007 + 0.594652 2.01541 -2.26976 -0.708885 -0.703051 -0.0565841 + 0.338236 2.127 -2.07943 -0.267992 -0.909635 -0.317403 + 0.33785 2.1411 -2.11065 -0.303875 -0.90752 -0.289944 + 0.417248 2.12441 -2.19516 -0.410398 -0.908732 -0.0760271 + 0.48074 2.09326 -2.3066 -0.558767 -0.82853 0.0362838 + 0.510478 2.07515 -2.28504 -0.570969 -0.817278 0.07779 + 0.264106 2.12716 -2.02732 -0.114793 -0.897597 -0.425608 + 0.263721 2.14117 -2.05859 -0.136458 -0.902535 -0.408423 + 0.25955 2.15094 -2.07891 -0.144676 -0.906434 -0.396794 + 0.326549 2.15319 -2.1476 -0.3484 -0.901596 -0.256404 + 0.405947 2.13659 -2.23205 -0.483291 -0.867556 -0.117372 + 0.17507 2.11596 -2.00852 0.00177045 -0.90716 -0.420782 + 0.170899 2.12573 -2.02884 0.0719704 -0.910264 -0.407725 + 0.248157 2.16615 -2.10865 -0.108761 -0.934486 -0.33898 + 0.315156 2.1684 -2.17734 -0.35421 -0.900309 -0.252939 + 0.159007 2.13113 -2.04539 0.120753 -0.926079 -0.357487 + 0.236265 2.17147 -2.12526 0.0254303 -0.970293 -0.240592 + 0.295471 2.1831 -2.2082 -0.188415 -0.975883 -0.110237 + 0.38386 2.15237 -2.27137 -0.476518 -0.87343 -0.100257 + 0.458653 2.10904 -2.34592 -0.60858 -0.793344 0.0153674 + 0.127671 2.12562 -2.04185 -0.054145 -0.936223 -0.34721 + 0.211459 2.17238 -2.14525 0.139326 -0.979542 -0.145211 + 0.270665 2.18392 -2.22823 -0.0497684 -0.993653 -0.100876 + 0.364174 2.16698 -2.30229 -0.502063 -0.845702 -0.18089 + 0.426257 2.13531 -2.39723 -0.677894 -0.732475 -0.062769 + 0.083882 2.08784 -1.9156 -0.264595 -0.900368 -0.345436 + 0.100328 2.13502 -2.05032 -0.104897 -0.948047 -0.300338 + 0.146993 2.16015 -2.15325 0.0947447 -0.974619 -0.202835 + 0.180123 2.16687 -2.14169 0.186481 -0.962434 -0.197349 + 0.025987 2.05142 -1.76373 -0.208507 -0.901287 -0.379745 + 0.056539 2.09723 -1.92407 -0.239743 -0.91712 -0.318456 + 0.072668 2.13843 -2.06243 -0.0528516 -0.962844 -0.264835 + 0.119333 2.16347 -2.1654 -0.0430622 -0.975191 -0.217137 + 0.206692 2.18146 -2.25856 0.148823 -0.987598 -0.0500119 + -0.025977 2.03612 -1.72583 0.168117 -0.905339 -0.389998 + -0.025977 2.05142 -1.76373 0.276984 -0.88459 -0.375207 + 0.011625 2.06196 -1.78159 -0.138052 -0.892613 -0.429166 + 0.042178 2.10776 -1.94192 -0.197782 -0.939715 -0.278958 + -0.083873 2.08784 -1.9156 0.263369 -0.899651 -0.348231 + -0.05653 2.09723 -1.92407 0.240676 -0.915964 -0.321068 + -0.042178 2.10776 -1.94192 0.183491 -0.938271 -0.293221 + -0.011625 2.06196 -1.78159 0.1385 -0.894316 -0.42546 + 0.011625 2.08203 -1.81914 -0.45952 -0.767627 -0.446756 + -0.127671 2.12562 -2.04185 0.0642568 -0.920803 -0.384698 + -0.100328 2.13502 -2.05032 0.0741297 -0.945151 -0.31811 + -0.072668 2.13843 -2.06243 0.0536213 -0.962334 -0.266531 + -0.020866 2.11114 -1.94717 0.410788 -0.874217 -0.258839 + -0.011625 2.08203 -1.81914 0.647897 -0.649197 -0.398462 + -0.158061 2.0999 -1.9735 0.0038983 -0.923565 -0.383421 + -0.17507 2.11596 -2.00852 -0.0538746 -0.910176 -0.410704 + -0.170899 2.12573 -2.02884 -0.0814251 -0.902378 -0.423182 + -0.159006 2.13113 -2.04539 -0.119246 -0.927615 -0.353993 + -0.180123 2.16687 -2.14169 -0.164198 -0.968946 -0.184887 + -0.242848 2.10027 -1.96134 -0.0138784 -0.941603 -0.336439 + -0.247097 2.11101 -1.99235 0.0460035 -0.92402 -0.379565 + -0.264106 2.12716 -2.02732 0.114963 -0.897662 -0.425426 + -0.263721 2.14117 -2.05859 0.136896 -0.902412 -0.408549 + -0.25955 2.15094 -2.07891 0.144677 -0.906435 -0.396793 + -0.189428 2.06804 -1.89932 -0.143543 -0.918847 -0.367581 + -0.260998 2.09316 -1.93783 0.0038661 -0.955783 -0.294049 + -0.340421 2.09381 -1.97056 0.182245 -0.942206 -0.281131 + -0.337429 2.1054 -2.00943 0.185472 -0.93537 -0.301135 + -0.341678 2.11606 -2.04048 0.242006 -0.918396 -0.313022 + -0.259557 2.08354 -1.90636 -0.0403483 -0.940346 -0.337817 + -0.33898 2.08419 -1.93909 0.148525 -0.959011 -0.241326 + -0.437442 2.0831 -2.0248 0.314833 -0.928536 -0.196729 + -0.43445 2.09469 -2.06367 0.365523 -0.89702 -0.248491 + -0.429457 2.10959 -2.10868 0.370975 -0.899499 -0.230824 + -0.246269 2.06574 -1.86774 -0.0986639 -0.945306 -0.310905 + -0.340548 2.07585 -1.89925 0.106115 -0.966711 -0.23283 + -0.449247 2.07242 -1.9795 0.294349 -0.940763 -0.168298 + -0.341916 2.06786 -1.86661 0.0503669 -0.985137 -0.164218 + -0.450815 2.06408 -1.93966 0.29727 -0.94016 -0.166522 + -0.522957 2.04655 -2.01909 0.596232 -0.793401 -0.122566 + -0.511152 2.05723 -2.06439 0.516766 -0.847458 -0.121522 + -0.511485 2.06396 -2.10805 0.538179 -0.823708 -0.178514 + -0.449093 2.05791 -1.89177 0.272106 -0.954851 -0.119236 + -0.520794 2.02929 -1.92639 0.661218 -0.737992 -0.134754 + -0.522516 2.03537 -1.97433 0.643903 -0.743746 -0.179529 + -0.565974 2.00379 -2.05543 0.796459 -0.564439 -0.216935 + -0.516572 2.02379 -1.88107 0.665865 -0.737832 -0.110575 + -0.559785 1.97772 -1.96868 0.876198 -0.436896 -0.203467 + -0.565533 1.99261 -2.01067 0.854261 -0.482859 -0.192575 + -0.552771 1.96938 -1.88103 0.887936 -0.459114 -0.027991 + -0.555563 1.97222 -1.92336 0.89484 -0.430939 -0.116422 + -0.597085 1.85418 -1.9261 0.942802 -0.298046 -0.149304 + -0.603334 1.86842 -1.97277 0.916039 -0.322945 -0.237864 + -0.609082 1.88331 -2.01476 0.890919 -0.346005 -0.294184 + -0.514372 2.02202 -1.8028 0.761433 -0.638277 0.113238 + -0.557067 1.96606 -1.85148 0.883078 -0.456279 0.109467 + -0.594023 1.85066 -1.8352 0.966753 -0.251769 0.0447406 + -0.594293 1.85134 -1.88378 0.957728 -0.282989 -0.0517112 + -0.557221 1.98226 -1.80874 0.824846 -0.543675 0.155067 + -0.594177 1.86686 -1.79246 0.960993 -0.23646 0.143457 + -0.634484 1.66618 -1.79088 0.959525 -0.280525 0.024858 + -0.634754 1.66686 -1.83946 0.92789 -0.356015 -0.110789 + -0.638303 1.68421 -1.8919 0.885992 -0.405678 -0.224598 + -0.550714 1.99679 -1.7715 0.803544 -0.587014 0.0986484 + -0.602625 1.87233 -1.74413 0.958586 -0.260788 0.114468 + -0.639244 1.66784 -1.73534 0.965476 -0.220812 0.138194 + -0.602854 1.87955 -1.70004 0.941382 -0.286731 0.177721 + -0.647692 1.67322 -1.68706 0.924954 -0.195323 0.32605 + -0.671382 1.57105 -1.69351 0.771201 -0.603015 0.204014 + -0.666623 1.5694 -1.74905 0.571741 -0.81744 -0.0700294 + -0.673911 1.57456 -1.78639 0.290986 -0.911775 -0.289815 + -0.614695 1.88295 -1.65654 0.929028 -0.337637 0.151352 + -0.674709 1.67271 -1.63638 0.897458 -0.23081 0.375893 + -0.735823 1.56272 -1.57048 0.766215 -0.550049 0.332204 + -0.708806 1.56324 -1.62117 0.765484 -0.520409 0.378429 + -0.617342 1.88121 -1.61252 0.917994 -0.395065 0.0347914 + -0.68655 1.67611 -1.59288 0.89776 -0.278795 0.341028 + -0.741883 1.56683 -1.54499 0.771661 -0.539409 0.337011 + -0.789372 1.54835 -1.49959 0.339912 -0.907341 0.247369 + -0.62704 1.86132 -1.54027 0.913981 -0.400713 0.0637825 + -0.709268 1.66856 -1.55219 0.905355 -0.343962 0.249045 + -0.764601 1.55928 -1.50431 0.55999 -0.819957 0.11867 + -0.795433 1.55237 -1.47414 0.40947 -0.846557 0.34011 + -0.718965 1.64867 -1.47995 0.840284 -0.537683 -0.0694279 + -0.779727 1.56951 -1.42564 0.418519 -0.902479 0.101849 + -0.797832 1.56316 -1.45743 0.371349 -0.856028 0.359604 + -0.828664 1.55625 -1.42726 0.438238 -0.782213 0.442821 + -0.869795 1.5549 -1.40733 0.118829 -0.950683 0.286499 + -0.695448 1.66118 -1.35421 0.863235 -0.492792 -0.109461 + -0.75621 1.58202 -1.2999 0.267065 -0.962814 -0.0408011 + -0.85677 1.58823 -1.32627 -0.0438062 -0.986232 0.15946 + -0.874876 1.58179 -1.35811 0.155722 -0.935971 0.315768 + -0.916007 1.58053 -1.33812 0.0515232 -0.880915 0.470462 + -0.636581 1.83901 -1.44743 0.909857 -0.392923 -0.133311 + -0.697709 1.64323 -1.30433 0.731193 -0.604022 -0.317039 + -0.711105 1.59853 -1.28851 0.392562 -0.579307 -0.714351 + -0.748335 1.58493 -1.27294 0.167833 -0.984176 0.0568265 + -0.65654 1.77702 -1.40086 0.946832 -0.314013 0.0700285 + -0.686108 1.69237 -1.37664 0.937616 -0.343276 -0.0551146 + -0.639299 1.83442 -1.40348 0.940583 -0.311006 0.136304 + -0.686108 1.69237 -1.37664 0.942462 -0.274508 0.190815 + -0.660427 1.78791 -1.35351 0.938143 -0.341573 -0.0567117 + -0.684331 1.71531 -1.35037 0.936451 -0.275172 0.217579 + -0.692772 1.67708 -1.37616 0.942 -0.303974 0.142255 + -0.613032 1.91293 -1.39706 0.952444 -0.29688 0.0686564 + -0.626048 1.87036 -1.31612 0.906816 -0.350627 -0.233978 + -0.619887 1.85947 -1.28666 0.501903 -0.163292 -0.849369 + -0.654266 1.77702 -1.32406 0.757721 -0.206092 -0.619181 + -0.699814 1.69538 -1.32206 0.673289 -0.67932 -0.291902 + -0.657449 1.71478 -1.31545 0.192012 -0.364222 -0.911303 + -0.699814 1.69538 -1.32206 0.216656 -0.144532 -0.96549 + -0.631718 1.61943 -1.2503 -0.0311826 -0.668894 -0.742703 + -0.658401 1.60355 -1.2296 -0.332418 -0.729388 -0.597906 + -0.684132 1.6989 -1.29475 0.278865 -0.794212 -0.539872 + -0.741925 1.62467 -1.29797 0.704304 -0.653188 -0.278033 + -0.604736 1.63147 -1.25336 0.224865 -0.62885 -0.7443 + -0.605073 1.57287 -1.20325 0.380604 -0.709631 -0.592929 + -0.636539 1.55107 -1.1577 -0.297041 -0.837696 -0.458292 + -0.711337 1.62078 -1.18883 0.101616 -0.871829 -0.479154 + -0.726242 1.62827 -1.2706 0.71587 -0.651824 -0.250309 + -0.590567 1.53741 -1.13503 0.339035 -0.899062 -0.277024 + -0.622033 1.51561 -1.08948 0.343836 -0.87628 -0.337507 + -0.635697 1.4879 -1.04188 0.00751525 -0.934855 -0.35495 + -0.689475 1.5683 -1.11694 -0.350767 -0.863784 -0.361717 + -0.755178 1.57902 -1.16811 0.378852 -0.869663 -0.316478 + -0.545593 1.57539 -1.10483 0.897589 -0.433879 0.0779912 + -0.579459 1.54475 -1.05154 0.767467 -0.641044 -0.00753826 + -0.599094 1.50618 -1.01114 0.793352 -0.600673 -0.0989179 + -0.612758 1.47846 -0.963537 0.279977 -0.883991 0.374396 + -0.650522 1.48642 -1.01532 -0.715281 -0.68983 0.111835 + -0.567352 1.65255 -1.00526 0.992325 -0.0191993 0.122159 + -0.567033 1.58604 -0.954669 0.970839 -0.211109 0.113597 + -0.586668 1.54747 -0.914262 0.806259 -0.525457 0.271736 + -0.617201 1.53206 -0.889963 -0.00423025 -0.831079 0.556138 + -0.554013 1.70283 -1.04696 0.961291 -0.182841 0.206127 + -0.553473 1.76406 -0.988607 0.948561 -0.222102 0.225614 + -0.565723 1.7357 -0.938079 0.992174 -0.124417 -0.0104999 + -0.565405 1.66919 -0.887485 0.988102 -0.0941568 0.121607 + -0.581715 1.61732 -0.84404 0.850924 -0.310676 0.423567 + -0.523232 1.74945 -1.0869 0.932527 -0.334931 0.134959 + -0.522692 1.81068 -1.02855 0.920143 -0.237118 0.311627 + -0.534472 1.87048 -0.966136 0.95338 -0.223758 0.20248 + -0.546722 1.84212 -0.915617 0.977181 -0.159196 0.14062 + -0.503299 1.87251 -1.05165 0.938181 -0.206877 0.277522 + -0.515079 1.9324 -0.989183 0.951914 -0.111092 0.285516 + -0.536851 1.93903 -0.89247 0.976825 -0.131189 0.16912 + -0.567757 1.78059 -0.839841 0.976729 -0.119337 0.178214 + -0.584067 1.72863 -0.796446 0.968529 -0.167063 0.184503 + -0.479565 1.93227 -1.08255 0.963501 -0.125677 0.23637 + -0.492001 2.01237 -1.04649 0.948521 -0.0337905 0.314907 + -0.496957 2.08891 -1.01227 0.973452 -0.0328019 0.226527 + -0.520036 2.00887 -0.955024 0.974866 -0.0986475 0.199762 + -0.481613 2.08432 -1.07351 0.923746 -0.0504893 0.379664 + -0.505886 2.17583 -0.98122 0.992226 0.0217894 0.122524 + -0.509794 2.09676 -0.93526 0.988415 -0.0781303 0.130122 + -0.52661 2.02693 -0.872705 0.98329 -0.138406 0.118259 + -0.490542 2.17132 -1.0424 0.978338 0.0821304 0.190023 + -0.49373 2.54348 -1.26601 0.999342 0.00589675 0.0357823 + -0.506727 2.26545 -0.910037 0.999197 -0.0214141 0.033875 + -0.510635 2.18637 -0.864076 0.996615 -0.0523124 0.0634119 + -0.467295 2.31933 -1.42137 0.985123 0.123665 0.119328 + -0.487215 2.4186 -1.32771 0.995357 0.0661781 0.0698997 + -0.442777 2.26449 -1.53198 0.929293 0.282405 0.238039 + -0.456831 2.73908 -1.99399 0.986106 0.134142 0.0979889 + -0.470319 2.85022 -1.94529 0.9968 0.0652334 0.0461988 + -0.476834 2.9751 -1.88358 0.999986 -0.00210731 0.00484943 + -0.432314 2.68433 -2.10455 0.971987 0.199479 0.124294 + -0.443245 2.88386 -2.37756 0.830384 0.52645 -0.182517 + -0.46452 2.95675 -2.31301 0.896288 0.33638 -0.288992 + -0.478007 3.06789 -2.2643 0.924597 0.171125 -0.340349 + -0.406533 2.64024 -2.2384 0.884267 0.411198 0.221333 + -0.417465 2.83978 -2.51141 0.364933 0.765226 -0.530333 + -0.469929 2.87812 -2.40661 0.14398 0.810099 -0.56834 + -0.491204 2.95109 -2.34201 0.375426 0.547034 -0.748204 + -0.349571 2.16502 -1.59929 0.637748 0.619766 0.457348 + -0.349436 2.59104 -2.27377 0.512443 0.750513 0.417292 + -0.361948 2.7581 -2.62793 0.359333 0.854852 0.374311 + -0.409998 2.77346 -2.58234 0.765625 0.602423 0.225621 + -0.273379 2.13212 -1.6369 0.254902 0.790299 0.557182 + -0.257731 2.58286 -2.30601 0.0841082 0.86008 0.503178 + -0.270242 2.74992 -2.66017 0.578968 0.745126 0.331033 + -0.307158 1.88639 -1.30328 0.267175 0.762781 0.588883 + -0.186089 1.88576 -1.28879 -0.121253 0.80607 0.579265 + -0.182064 2.14381 -1.64916 -0.111481 0.80854 0.577784 + -0.166416 2.59446 -2.3183 -0.2985 0.80161 0.517996 + -0.138812 2.83607 -2.68899 -0.742492 0.669326 -0.0266218 + -0.164632 2.7747 -2.71669 -0.800169 0.471337 -0.370906 + -0.230933 2.71078 -2.69637 -0.569766 0.606267 -0.554803 + -0.095427 2.10859 -1.57575 -0.531619 0.696565 0.481848 + -0.062398 2.67037 -2.31079 -0.395123 0.831159 0.39122 + -0.034794 2.91207 -2.68142 -0.284627 0.948242 0.1408 + -0.034794 2.88076 -2.79778 -0.297152 0.744523 -0.597817 + -0.060614 2.81939 -2.82549 -0.541063 0.486951 -0.68566 + -0.099451 1.85062 -1.21534 -0.795101 0.497334 0.347093 + -0.046205 2.12026 -1.46977 -0.910752 0.371934 0.179433 + -0.013176 2.68204 -2.2048 -0.445739 0.883173 0.14602 + 0.062399 2.67037 -2.31079 0.399386 0.826521 0.396678 + 0.034794 2.91207 -2.68142 0.284652 0.948231 0.140826 + 0.034794 2.88076 -2.79778 0.30504 0.779772 -0.546723 + -0.031447 2.23142 -1.4257 -0.995398 0.0920102 0.0267833 + -0.013176 2.64772 -1.98235 -0.871707 0.443988 -0.207369 + 0.013176 2.64772 -1.98235 0.872058 0.435194 -0.223876 + 0.013176 2.68204 -2.2048 0.445656 0.883314 0.145421 + -0.04101 2.05543 -1.07148 -0.944183 0.197634 -0.263551 + -0.030452 2.20762 -1.25668 -0.998651 0.0512888 -0.00810898 + -0.012182 2.62392 -1.81333 -0.999068 0.0418518 -0.0105813 + 0.00729 2.80633 -1.93447 -0.992372 0.121137 0.0228938 + -0.041014 2.1598 -1.00965 -0.998697 0.0508875 -0.00390431 + -0.04101 2.12203 -1.03943 -0.999756 0.00996567 -0.0197393 + -0.030452 2.27413 -1.22468 -0.998667 -0.00298986 -0.0515299 + -0.02556 2.45654 -1.34582 -0.999583 0.0134728 -0.0255595 + -0.00729 2.80633 -1.93447 -0.610295 -0.0995614 -0.785893 + 0.00729 2.80633 -1.93447 0 -0.553235 -0.833025 + -0.051236 2.00431 -1.06212 -0.685473 -0.375545 0.623773 + -0.036481 2.21983 -0.956232 -0.99162 -0.0178171 0.127951 + -0.026884 2.45107 -1.11594 -0.997671 0.0651839 0.020107 + -0.025563 2.49432 -1.31605 -0.99952 0.0292854 -0.0100625 + -0.03649 2.28937 -0.889273 -0.878614 -0.0850716 0.469894 + -0.026893 2.5207 -1.04894 -0.931517 0.231986 0.280105 + -0.011004 2.20909 -0.926224 0.0760722 -0.561671 0.823856 + 0.00729 2.80633 -1.93447 0 0.314016 -0.949418 + -0.230933 2.71078 -2.69637 0.787045 0.5682 0.240225 + 1.12127 1.64042 -1.94785 -0.317944 -0.790147 -0.524004 + 1.15142 1.68191 -2.03092 0.948434 -0.3157 -0.0284066 + 0.016514 2.25648 -0.879903 0.776853 -0.00706368 0.629642 + -0.409998 2.77346 -2.58234 -0.740481 0.341366 -0.578928 + -0.462462 2.81189 -2.4775 -0.568156 0.516505 -0.640641 + -0.531689 2.93747 -2.3582 0.065333 0.57323 -0.816786 + -0.50897 3.07022 -2.29494 0.46853 0.315402 -0.825228 + -0.413206 2.61819 -2.66241 -0.497029 0.532658 -0.685009 + -0.449813 2.61727 -2.64002 -0.32977 0.609351 -0.721071 + -0.499068 2.81097 -2.45511 -0.21711 0.587325 -0.779687 + -0.361948 2.7581 -2.62793 -0.452281 0.416146 -0.788837 + -0.365156 2.60283 -2.70801 -0.350217 0.538606 -0.766324 + -0.446128 2.39177 -2.86763 -0.414887 0.721435 -0.554437 + -0.475367 2.54895 -2.68768 -0.38227 0.612555 -0.691842 + -0.556401 2.77007 -2.49266 -0.129048 0.635654 -0.761111 + -0.589022 2.89656 -2.39575 -0.194771 0.579782 -0.791149 + -0.270242 2.74992 -2.66017 -0.281987 0.456403 -0.843907 + -0.325847 2.56369 -2.74422 -0.25929 0.594643 -0.761031 + -0.204709 2.60208 -2.77249 -0.525392 0.541078 -0.656656 + -0.230387 2.49807 -2.86374 -0.494574 0.656453 -0.569619 + -0.351525 2.45968 -2.83546 -0.313763 0.705908 -0.635017 + -0.138408 2.666 -2.79281 -0.659639 0.374018 -0.65191 + -0.201101 2.45831 -2.94429 -0.366786 0.729211 -0.577685 + -0.333607 2.29487 -3.0612 -0.368372 0.72948 -0.576334 + -0.38881 2.23339 -3.1151 -0.0893524 0.680593 -0.727193 + -0.406728 2.39811 -2.88941 -0.342595 0.774223 -0.532172 + -0.033806 2.75669 -2.8853 -0.591287 0.455811 -0.665294 + -0.1116 2.60339 -2.85257 -0.551518 0.451658 -0.701307 + -0.145455 2.47997 -2.93701 -0.269226 0.663349 -0.698202 + -0.234477 2.30039 -3.15796 -0.372612 0.690146 -0.62037 + -0.304321 2.25512 -3.14175 -0.593571 0.591758 -0.545431 + -0.350353 2.16381 -3.16919 -0.639689 0.438702 -0.631141 + -0.007876 2.73617 -2.92294 -0.350781 0.468796 -0.810668 + -0.057432 2.52427 -2.95573 -0.592475 0.432198 -0.679837 + -0.091287 2.40085 -3.04016 -0.122002 0.711941 -0.69156 + -0.178832 2.32205 -3.15067 -0.0637383 0.737679 -0.672136 + 0.007879 2.73617 -2.92294 0.345702 0.452125 -0.822237 + -0.007876 2.52092 -3.00333 -0.298719 0.397261 -0.867727 + -0.031502 2.50374 -2.99337 -0.62924 0.354526 -0.691642 + -0.031473 2.38415 -3.06184 -0.22481 0.603237 -0.765223 + -0.047726 2.34737 -3.09734 -0.000692336 0.730375 -0.683046 + 0.033806 2.75669 -2.8853 0.677335 0.354392 -0.644688 + 0.031505 2.50374 -2.99337 0.629258 0.354532 -0.691622 + 0.007879 2.52092 -3.00333 0.298718 0.397264 -0.867726 + -0.007848 2.40133 -3.07179 -0.324993 0.542027 -0.774975 + 0.060613 2.81939 -2.82549 0.635719 0.439739 -0.634422 + 0.1116 2.60339 -2.85257 0.551519 0.451666 -0.701302 + 0.057432 2.52427 -2.95573 0.592496 0.432196 -0.67982 + 0.03148 2.38415 -3.06184 0.224564 0.603292 -0.765251 + 0.007854 2.40133 -3.07179 0.324986 0.542032 -0.774974 + 0.164631 2.7747 -2.71669 0.800169 0.471334 -0.37091 + 0.138407 2.666 -2.79281 0.659627 0.374025 -0.651918 + 0.145455 2.47997 -2.93701 0.268966 0.662206 -0.699386 + 0.091287 2.40085 -3.04016 0.153104 0.703494 -0.694014 + 0.047727 2.34738 -3.09734 0.000404965 0.730374 -0.683048 + 0.138812 2.83607 -2.68899 0.74248 0.669341 -0.0265605 + 0.257731 2.58286 -2.30601 -0.0876816 0.863071 0.497414 + 0.230933 2.71078 -2.69637 0.569748 0.606277 -0.55481 + 0.166417 2.59446 -2.3183 0.288668 0.797265 0.530132 + 0.095427 2.10859 -1.57575 0.527492 0.690172 0.495393 + 0.182065 2.14381 -1.64916 0.0843685 0.821569 0.563832 + 0.273379 2.13212 -1.6369 -0.261582 0.783301 0.563928 + 0.046205 2.12026 -1.46977 0.948433 0.25557 0.187506 + 0.064756 1.84625 -1.22456 0.855419 0.376344 0.355841 + 0.031447 2.23142 -1.4257 0.995229 0.0931339 0.0290761 + 0.036018 2.0989 -1.02776 0.988156 0.106063 -0.110896 + 0.049543 1.96837 -1.07328 0.995808 0.0878904 0.0253151 + 0.064756 1.84625 -1.22456 0.995484 0.091141 0.0265352 + 0.012182 2.62392 -1.81333 0.99935 0.03588 -0.00343977 + 0.030452 2.20762 -1.25668 0.99872 0.050545 -0.00164767 + 0.036617 2.12995 -1.02614 0.999934 -0.0106089 -0.0044382 + 0.00729 2.80633 -1.93447 0.999369 0.0338723 0.0106468 + -0.350353 2.16381 -3.16919 0.0529504 0.631009 -0.773966 + 0.03663 2.30385 -0.897355 0.999827 0.0135726 -0.0127152 + 0.036617 2.19646 -0.99414 0.999907 0.00717034 -0.0116362 + 0.03662 2.23423 -0.964364 0.999869 0.0120505 -0.0108013 + 0.026886 2.45107 -1.11594 0.999407 0.0327774 -0.0105639 + 0.030452 2.27413 -1.22468 0.999662 0.0113855 -0.02336 + 0.025561 2.45654 -1.34582 0.999656 0.0133546 -0.0225628 + 0.025564 2.49432 -1.31605 0.999591 0.0268187 -0.00991077 + 0.008613 2.95866 -1.66912 0.653216 0.699 0.291048 + 0.008613 2.52374 -1.02842 0.354026 0.619904 0.700275 + 0.00729 2.80633 -1.93447 0.999643 0.00881096 -0.0252111 + 0.00729 2.80633 -1.93447 0.999638 0.0166024 -0.0211621 + -0.318018 2.1931 -3.18552 -0.64503 0.530517 -0.54999 + -0.248174 2.23837 -3.20173 -0.409537 0.584682 -0.700304 + -0.191271 2.24886 -3.2109 -0.0693939 0.625955 -0.776766 + -0.129043 2.23586 -3.21559 -0.0403564 0.638843 -0.768278 + -0.116604 2.30914 -3.15531 0.0698724 0.722511 -0.68782 + -0.073042 2.25566 -3.21249 0.0214699 0.603984 -0.796707 + -0.0241 2.22116 -3.23232 0.223686 0.468088 -0.854903 + -0.032099 2.17756 -3.24701 -0.300288 -0.158146 -0.940647 + -0.081041 2.21207 -3.22718 -0.450354 -0.271353 -0.850617 + -0.129043 2.23586 -3.21559 -0.0643849 0.329374 -0.942002 + -0.007848 2.25785 -3.19687 -0.0128833 0.626788 -0.779083 + 0.009784 2.14998 -3.24683 0.286438 -0.361634 -0.887229 + -0.009793 2.14998 -3.24684 -0.283293 -0.388088 -0.877002 + -0.057733 2.16318 -3.18711 -0.683371 -0.50201 -0.530085 + -0.088709 2.19606 -3.17486 -0.599271 -0.631342 -0.492222 + 0.007854 2.25785 -3.19687 0.0135554 0.620051 -0.784445 + 0.024101 2.22116 -3.23232 -0.321714 0.432609 -0.842229 + 0.032099 2.17755 -3.247 0.285428 -0.160409 -0.944881 + 0.035418 2.1356 -3.18694 0.682134 -0.458799 -0.569383 + 0.009784 2.10533 -3.19671 0.312958 -0.725233 -0.613266 + -0.009793 2.10534 -3.19672 -0.312869 -0.724859 -0.613752 + 0.073043 2.25567 -3.2125 -0.0214286 0.603882 -0.796786 + 0.081041 2.21207 -3.22718 0.461091 -0.235483 -0.855537 + 0.057733 2.16318 -3.1871 0.674272 -0.535415 -0.508613 + 0.083967 2.13643 -3.14198 0.599704 -0.300238 -0.741763 + 0.06521 2.11575 -3.14935 0.594944 -0.265207 -0.758753 + 0.116604 2.30914 -3.15531 -0.0651908 0.729148 -0.681244 + 0.129042 2.23586 -3.21559 0.0403984 0.638798 -0.768313 + 0.19127 2.24886 -3.2109 0.0694461 0.62592 -0.776789 + 0.178832 2.32205 -3.15067 0.0561378 0.742644 -0.667329 + 0.234475 2.30039 -3.15796 0.372622 0.690143 -0.620367 + 0.248177 2.23837 -3.20173 0.409587 0.58472 -0.700244 + 0.201098 2.45831 -2.94429 0.366757 0.729216 -0.577696 + 0.304318 2.25512 -3.14175 0.593548 0.591756 -0.545459 + 0.31802 2.1931 -3.18552 0.645089 0.530539 -0.549899 + 0.230391 2.49807 -2.86374 0.494556 0.656466 -0.56962 + 0.333611 2.29487 -3.0612 0.368457 0.72947 -0.576292 + 0.350348 2.16381 -3.16919 0.704639 0.505005 -0.498452 + 0.204709 2.60208 -2.77249 0.525397 0.541079 -0.656651 + 0.351529 2.45968 -2.83546 0.313768 0.705906 -0.635017 + 0.406727 2.39811 -2.88941 0.342517 0.774218 -0.53223 + 0.388809 2.23339 -3.1151 0.0915615 0.6895 -0.718475 + 0.350348 2.16381 -3.16919 -0.088849 0.641514 -0.761949 + 0.393486 2.18026 -3.16149 -0.112469 0.647904 -0.753373 + 0.325847 2.56369 -2.74422 0.259282 0.594632 -0.761043 + 0.446128 2.39177 -2.86763 0.414807 0.721467 -0.554455 + 0.451255 2.25163 -3.07989 0.33271 0.695687 -0.636651 + 0.455932 2.1985 -3.12628 0.402806 0.621866 -0.671588 + 0.393486 2.18026 -3.16149 0.218372 0.652678 -0.725483 + 0.270244 2.74992 -2.66017 0.281983 0.456419 -0.8439 + 0.365158 2.60283 -2.70801 0.350234 0.5386 -0.76632 + 0.36195 2.7581 -2.62793 0.452291 0.416145 -0.788833 + 0.409998 2.77346 -2.58234 0.74047 0.341373 -0.578938 + 0.413206 2.61819 -2.66241 0.497038 0.532655 -0.685005 + 0.462462 2.81189 -2.4775 0.568235 0.516443 -0.640621 + 0.499068 2.81097 -2.45511 0.217087 0.587319 -0.779698 + 0.449813 2.61727 -2.64002 0.329823 0.609345 -0.721052 + 0.417464 2.83978 -2.5114 -0.365156 0.765216 -0.530194 + 0.469928 2.87812 -2.40661 -0.144009 0.810101 -0.568329 + 0.531689 2.93747 -2.3582 -0.169709 0.517115 -0.838923 + 0.556401 2.77007 -2.49266 0.129042 0.635644 -0.76112 + 0.58196 2.70165 -2.54037 0.34765 0.562426 -0.750211 + 0.475371 2.54895 -2.68768 0.382261 0.612566 -0.691837 + 0.443244 2.88386 -2.37756 -0.830348 0.526504 -0.182523 + 0.464522 2.95676 -2.31302 -0.897812 0.3331 -0.288058 + 0.491206 2.9511 -2.34202 -0.374928 0.545713 -0.749418 + 0.549455 3.05667 -2.31108 0.169685 0.422691 -0.890247 + 0.589022 2.89656 -2.39575 0.202176 0.561392 -0.802473 + 0.40654 2.64024 -2.2384 -0.883762 0.41017 0.225221 + 0.43232 2.68433 -2.10455 -0.974885 0.184017 0.125449 + 0.456831 2.73908 -1.99399 -0.986289 0.134004 0.096312 + 0.478009 3.06797 -2.26425 -0.924978 0.172248 -0.338744 + 0.508972 3.07022 -2.29494 -0.467015 0.317391 -0.825324 + 0.409998 2.77346 -2.58234 -0.765625 0.602418 0.225635 + 0.36195 2.7581 -2.62793 -0.359337 0.854849 0.374314 + 0.349436 2.59104 -2.27377 -0.505605 0.758477 0.411187 + 0.406675 2.21423 -1.56392 -0.798571 0.482637 0.359648 + 0.442784 2.26449 -1.53198 -0.932561 0.282969 0.224186 + 0.467295 2.31933 -1.42137 -0.985252 0.122309 0.119664 + 0.470319 2.85022 -1.94529 -0.996754 0.0662457 0.0457528 + 0.349571 2.16502 -1.59929 -0.634105 0.617943 0.46482 + 0.383337 1.9192 -1.26572 -0.672311 -0.00124287 0.740268 + 0.422755 1.95308 -1.2196 -0.704806 -0.0179974 0.709172 + 0.458864 2.00335 -1.18766 -0.964596 0.108898 0.240199 + 0.270244 2.74992 -2.66017 -0.578955 0.745135 0.331035 + 0.230933 2.71078 -2.69637 -0.78703 0.568219 0.24023 + 0.129042 2.23586 -3.21559 0.0644217 0.328979 -0.942137 + 0.307145 1.88639 -1.30329 -0.542571 0.649074 0.533217 + 0.480623 2.19749 -3.09233 0.362943 0.566643 -0.739722 + 0.490656 2.24529 -3.05811 0.520403 0.650578 -0.553108 + 0.509415 2.1894 -3.09931 0.455896 0.622136 -0.636479 + 0.565038 2.15256 -3.06872 0.803158 0.503868 -0.317891 + 0.546279 2.20846 -3.02752 0.677107 0.566185 -0.470064 + 0.576688 2.13834 -3.04387 -0.0601419 -0.217417 -0.974224 + 0.473219 2.43685 -2.79011 0.507879 0.605489 -0.612733 + 0.57337 2.25345 -2.95005 0.345375 0.698932 -0.626266 + 0.599183 2.42489 -2.7486 0.286103 0.68804 -0.666892 + 0.65657 2.36347 -2.79322 0.437725 0.675891 -0.592932 + 0.630757 2.19211 -2.99461 0.225267 0.600956 -0.766881 + 0.601336 2.53699 -2.64617 0.393818 0.578579 -0.714251 + 0.677919 2.54619 -2.58509 0.592926 0.503555 -0.628388 + 0.700677 2.34287 -2.76293 0.705752 0.55509 -0.440216 + 0.702641 2.19183 -2.96792 0.457771 0.586314 -0.668342 + 0.658544 2.71084 -2.47928 0.55527 0.483449 -0.676722 + 0.733518 2.69688 -2.4195 0.668498 0.43335 -0.604416 + 0.751342 2.50776 -2.52614 0.69828 0.443283 -0.562054 + 0.783212 2.34884 -2.62608 0.718171 0.489483 -0.494607 + 0.709789 2.38727 -2.68504 0.779784 0.45942 -0.425288 + 0.636617 2.85949 -2.39415 0.507461 0.494197 -0.70587 + 0.711591 2.84553 -2.33437 0.630863 0.447285 -0.633994 + 0.802339 2.68845 -2.3385 0.726678 0.391408 -0.56457 + 0.820163 2.49925 -2.44519 0.789892 0.356433 -0.499026 + 0.638357 3.03011 -2.26808 0.541585 0.45227 -0.708617 + 0.697201 3.05442 -2.19217 0.576616 0.386934 -0.71958 + 0.770435 2.86984 -2.25847 0.680048 0.405366 -0.610911 + 0.894426 2.68315 -2.21772 0.770299 0.277584 -0.574097 + 0.590762 3.06718 -2.26968 0.476981 0.368642 -0.797867 + 0.588448 3.23589 -2.21229 0.669453 0.211068 -0.712238 + 0.634906 3.22009 -2.17392 0.615188 0.257919 -0.744998 + 0.776695 3.07793 -2.1311 0.493319 0.256638 -0.831128 + 0.862523 2.86462 -2.13763 0.583459 0.34318 -0.736073 + 0.547142 3.22538 -2.25369 0.453372 0.180983 -0.872753 + 0.542813 3.40623 -2.23413 0.578812 0.159623 -0.799686 + 0.57015 3.42786 -2.18299 0.757566 0.203239 -0.620312 + 0.616608 3.41206 -2.14463 0.663809 0.235384 -0.709895 + 0.7144 3.24369 -2.1128 0.581099 0.269512 -0.767911 + 0.513561 3.21526 -2.26297 -0.269929 0.156558 -0.950067 + 0.509232 3.39612 -2.24342 -0.170948 0.0590479 -0.983509 + 0.510975 3.56567 -2.21989 0.668912 0.223092 -0.709075 + 0.538313 3.58721 -2.1688 0.794228 0.304578 -0.52577 + 0.619672 3.48872 -2.11141 0.750214 0.310856 -0.583565 + 0.482598 3.21302 -2.23229 -0.92284 0.0444947 -0.382604 + 0.47536 3.38339 -2.21817 -0.871412 -0.068937 -0.485684 + 0.448788 3.53384 -2.21555 -0.774776 -0.247451 -0.581799 + 0.48266 3.54656 -2.24079 0.00278559 0.0256981 -0.999666 + 0.463356 3.69601 -2.21324 0.670272 0.279488 -0.687475 + 0.476834 2.9751 -1.88358 -0.99997 -0.00143462 0.00754503 + 0.469596 3.14547 -1.86948 -0.994934 -0.0858837 -0.0522469 + 0.451787 3.26083 -1.83669 -0.952288 -0.261039 -0.158135 + 0.399831 3.66393 -2.24569 -0.875164 -0.403234 -0.267377 + 0.49373 2.54348 -1.26601 -0.999343 0.00816976 0.0353259 + 0.494948 2.63292 -1.14452 -0.996782 -0.076722 -0.0232157 + 0.477139 2.7482 -1.11179 -0.987412 -0.143962 -0.0655108 + 0.465519 2.78306 -1.02856 -0.96844 -0.225712 -0.105725 + 0.40283 3.39093 -1.86683 -0.896832 -0.3773 -0.230949 + 0.487215 2.41869 -1.32766 -0.995291 0.0660846 0.0709138 + 0.490541 2.17124 -1.04245 -0.978541 0.0811493 0.189399 + 0.505886 2.17583 -0.98122 -0.992248 0.0075929 0.124039 + 0.506727 2.26545 -0.910037 -0.999323 -0.0209609 0.0302518 + 0.507945 2.3548 -0.788592 -0.998115 -0.0605284 0.010089 + 0.470621 2.07197 -1.13612 -0.988659 0.0860481 0.123083 + 0.481612 2.08431 -1.0735 -0.975834 0.0184801 0.217731 + 0.496957 2.08883 -1.01232 -0.958089 -0.0243643 0.285432 + 0.469177 2.00413 -1.10962 -0.97259 0.00594725 0.232449 + 0.479563 1.93218 -1.0826 -0.949778 -0.124338 0.28716 + 0.491999 2.01237 -1.04649 -0.947713 -0.046703 0.315689 + 0.520036 2.00887 -0.955024 -0.976567 -0.0859685 0.197299 + 0.45742 1.9356 -1.16112 -0.980677 -0.160428 0.111959 + 0.482339 1.87208 -1.1427 -0.947319 -0.302591 0.105005 + 0.503297 1.87252 -1.05166 -0.941491 -0.186516 0.280725 + 0.515077 1.93232 -0.989242 -0.958975 -0.109645 0.261429 + 0.475913 1.89309 -1.2211 -0.806349 -0.425524 0.410767 + 0.500832 1.82957 -1.20268 -0.941159 -0.328798 0.078175 + 0.524033 1.76402 -1.18974 -0.941246 -0.334725 0.0448846 + 0.506073 1.81232 -1.1118 -0.957115 -0.276476 0.0865558 + 0.436496 1.8593 -1.26718 -0.466891 -0.530503 0.707517 + 0.490999 1.81553 -1.26956 -0.75349 -0.555674 0.351396 + 0.514199 1.75007 -1.25657 -0.875709 -0.482828 -0.00331005 + 0.551181 1.69709 -1.24422 -0.903034 -0.323384 -0.282757 + 0.54119 1.70115 -1.16484 -0.985668 -0.0840994 -0.14624 + 0.373475 1.84698 -1.32303 -0.460123 -0.887518 -0.0244592 + 0.427977 1.80321 -1.32542 -0.38086 -0.714159 0.587301 + 0.504467 1.79287 -1.32431 -0.373739 -0.60172 -0.70587 + 0.541449 1.73998 -1.3119 -0.352566 -0.515199 -0.781196 + 0.307145 1.88639 -1.30329 -0.126312 -0.605969 0.785396 + -0.7043 1.56683 -1.09039 -0.0579134 -0.910528 -0.40937 + -0.809256 1.55981 -1.16444 0.621692 -0.782816 0.0264271 + -0.770083 1.58651 -1.24989 0.822565 -0.56759 -0.0350532 + -0.771717 1.58314 -1.26884 0.902702 -0.430264 -0.00125148 + -0.792052 1.49776 -1.24696 0.795663 -0.604491 0.0388702 + -0.758379 1.54753 -1.08676 0.319953 -0.8652 -0.386082 + -0.85984 1.52061 -1.14415 0.578219 -0.689216 0.436628 + -0.790419 1.50113 -1.22799 0.764077 -0.599054 0.239417 + -0.828509 1.49337 -1.21855 -0.171815 0.0361979 -0.984464 + -0.664227 1.55392 -1.05243 0.250962 -0.804405 -0.538471 + -0.841003 1.46202 -1.20765 0.108578 -0.364707 -0.92477 + -0.874387 1.49643 -1.23266 -0.00756757 0.0824023 -0.99657 + -0.917635 1.56429 -1.1558 -0.00963629 0.191667 -0.981413 + -0.825982 1.56239 -1.1863 -0.436581 -0.0238436 -0.899349 + -0.789525 1.56678 -1.21471 -0.764503 0.151685 -0.626519 + -0.792052 1.49776 -1.24696 -0.748 0.303248 -0.590369 + -0.771717 1.58314 -1.26884 -0.889854 0.42572 -0.164081 + -0.963513 1.56736 -1.16992 0.617042 0.228292 -0.753089 + -0.937006 1.58934 -1.16439 -0.0124739 -0.64044 -0.767907 + -0.845353 1.58744 -1.19488 -0.188978 -0.851268 -0.489521 + -0.759733 1.60831 -1.24384 -0.872302 0.409161 -0.267726 + -0.741925 1.62467 -1.29797 -0.865477 0.481194 -0.139294 + -0.699814 1.69538 -1.32206 -0.871046 0.469408 -0.144688 + -0.955511 1.48158 -1.19533 -0.387509 -0.241353 -0.889711 + -0.841003 1.46202 -1.20765 -0.193037 -0.691838 -0.695771 + -0.922127 1.44708 -1.17038 -0.19297 -0.690765 -0.696855 + -0.841003 1.46202 -1.20765 0.592124 -0.497074 0.634277 + -0.921706 1.47324 -1.1323 0.172693 -0.711149 0.681502 + -0.795782 1.58707 -1.10525 0.0980888 -0.358145 0.928499 + -0.857648 1.5397 -1.0934 0.332808 -0.489426 0.80604 + -0.976804 1.48683 -1.12362 -0.443535 -0.546361 0.710469 + -0.922127 1.44708 -1.17038 0.177745 -0.812123 0.555755 + -0.841003 1.46202 -1.20765 0.380096 -0.764325 0.520896 + -0.758379 1.54753 -1.08676 -0.38932 0.061382 0.919055 + -0.701631 1.59346 -1.07091 -0.537525 0.014305 0.843127 + -0.734637 1.66043 -1.09291 -0.280765 -0.308062 0.908993 + -0.801723 1.66092 -1.09515 0.066854 -0.221603 0.972842 + -0.924734 1.54009 -1.09569 -0.129045 -0.237832 0.962696 + -0.664227 1.55392 -1.05243 -0.755839 -0.041935 0.653413 + -0.643397 1.56889 -0.998153 -0.951572 -0.112991 0.285908 + -0.658945 1.63178 -1.03008 -0.874385 -0.0773671 0.479026 + -0.691951 1.69874 -1.05208 -0.677794 -0.20054 0.707375 + -0.727078 1.74912 -1.07274 -0.355439 -0.221842 0.907992 + -0.872106 1.65856 -1.07748 0.0821934 -0.374116 0.923732 + -0.629692 1.50131 -0.961109 -0.864165 -0.378523 0.331571 + -0.643726 1.61889 -0.917968 -0.983074 -0.146316 0.110257 + -0.659274 1.68178 -0.9499 -0.987941 -0.0967153 0.120911 + -0.666266 1.73981 -0.991201 -0.909565 -0.25308 0.32961 + -0.701392 1.79019 -1.01186 -0.871963 -0.165792 0.460644 + -0.634135 1.5549 -0.887535 -0.909793 -0.351305 0.221046 + -0.630176 1.5876 -0.82637 -0.539263 -0.579913 0.610651 + -0.639767 1.6515 -0.856854 -0.97921 -0.0845585 0.184384 + -0.7043 1.56683 -1.09039 -0.60997 0.283033 0.740155 + -0.612248 1.60182 -0.819792 0.555118 -0.578507 0.59764 + -0.619647 1.6386 -0.776098 -0.470889 -0.542769 0.695461 + -0.626818 1.70224 -0.78674 -0.976858 -0.102375 0.187796 + -0.646938 1.71515 -0.867495 -0.977445 -0.0104043 0.210932 + -0.653929 1.77309 -0.908846 -0.976016 -0.0883579 0.19896 + -0.601719 1.6529 -0.769478 0.65135 -0.467801 0.597415 + -0.590095 1.7375 -0.728603 0.841118 -0.367801 0.396539 + -0.616529 1.72023 -0.715886 0.612314 -0.474959 0.632048 + -0.5889 1.81998 -0.669658 0.627277 -0.499679 0.597365 + -0.641223 1.8031 -0.63302 0.587385 -0.566776 0.577706 + -0.572443 1.81332 -0.755521 0.983876 -0.17622 0.0305689 + -0.562466 1.83725 -0.682375 0.896986 -0.323236 0.301553 + -0.552602 1.93633 -0.620381 0.962293 -0.195013 0.189635 + -0.584926 1.90744 -0.569742 0.73605 -0.465421 0.491542 + -0.637249 1.89055 -0.533104 0.00908 -0.757238 0.653076 + -0.557886 1.8775 -0.816694 0.982529 -0.143459 0.118557 + -0.55954 1.90423 -0.743586 0.992212 -0.122825 0.0206999 + -0.549676 2.00331 -0.6816 0.993608 -0.103677 0.0446549 + -0.559972 2.04854 -0.520547 0.940104 -0.248689 0.233148 + -0.592296 2.01965 -0.469899 0.62371 -0.553381 0.552046 + -0.544982 1.96833 -0.804808 0.982153 -0.148528 0.115387 + -0.537917 2.06141 -0.743632 0.983455 -0.155479 0.0929626 + -0.5417 2.10455 -0.577354 0.980999 -0.170093 0.0933201 + -0.540315 2.19079 -0.463918 0.973147 -0.202817 0.108859 + -0.558588 2.13478 -0.407112 0.927606 -0.318897 0.194556 + -0.519544 2.12001 -0.811529 0.989764 -0.116048 0.0830708 + -0.529941 2.16265 -0.639385 0.990571 -0.126732 0.0520317 + -0.522905 2.24451 -0.524367 0.986944 -0.150328 0.0578225 + -0.536521 2.25412 -0.344224 0.959709 -0.274802 0.058674 + -0.557372 2.19883 -0.281854 0.899123 -0.402624 0.171671 + -0.522444 2.21458 -0.698937 0.994634 -0.0896011 0.0517238 + -0.515408 2.29635 -0.583968 0.986639 -0.162866 0.00419181 + -0.519111 2.30785 -0.404672 0.957907 -0.282892 0.0488582 + -0.497717 2.37589 -0.348125 0.914707 -0.39995 -0.057882 + -0.516823 2.31852 -0.290163 0.905928 -0.409674 -0.107056 + -0.513535 2.28095 -0.751484 0.996512 -0.0753354 0.035887 + -0.507187 2.34934 -0.641333 0.991345 -0.128146 -0.0285081 + -0.49643 2.3586 -0.468174 0.954609 -0.297862 -0.000882352 + -0.475036 2.42664 -0.411626 0.941501 -0.331841 -0.058804 + -0.507945 2.35488 -0.788542 0.997951 -0.0633102 0.00921731 + -0.501598 2.42318 -0.678441 0.991835 -0.117823 -0.0487934 + -0.488209 2.41158 -0.525539 0.976829 -0.193367 -0.09173 + -0.466466 2.48194 -0.471415 0.950986 -0.268709 -0.153042 + -0.494948 2.63292 -1.14452 0.996798 -0.076866 -0.0220273 + -0.477139 2.7482 -1.11179 0.985375 -0.15794 -0.063955 + -0.489977 2.45804 -0.595212 0.98076 -0.163975 -0.105934 + -0.468234 2.52849 -0.541039 0.957523 -0.235423 -0.166511 + -0.469596 3.14547 -1.86948 0.994976 -0.0851184 -0.0527081 + -0.451787 3.26083 -1.83669 0.948527 -0.265786 -0.172206 + -0.40283 3.39093 -1.86683 0.897252 -0.375317 -0.232542 + -0.465519 2.78306 -1.02856 0.968669 -0.226854 -0.10108 + -0.452473 2.74238 -0.853301 0.958597 -0.254835 -0.127084 + -0.482601 3.21302 -2.23229 0.920849 0.0522264 -0.386405 + -0.475363 3.3834 -2.21818 0.867229 -0.0766204 -0.491978 + -0.448792 3.53384 -2.21555 0.778464 -0.294577 -0.554272 + -0.513564 3.21526 -2.26297 0.274215 0.163424 -0.947681 + -0.509235 3.39612 -2.24342 0.174029 0.0527565 -0.983326 + -0.482664 3.54656 -2.24079 -0.0558913 -0.0151413 -0.998322 + -0.399835 3.66393 -2.24569 0.433788 -0.242433 -0.867787 + -0.54714 3.22538 -2.25369 -0.459696 0.194748 -0.86646 + -0.542811 3.40624 -2.23414 -0.600675 0.135025 -0.788009 + -0.510975 3.56567 -2.21989 -0.669435 0.227458 -0.707191 + -0.435045 3.67681 -2.2342 -0.398752 0.149052 -0.904865 + -0.393058 3.77165 -2.24425 -0.449267 0.107329 -0.886927 + -0.357848 3.75877 -2.25574 -0.299592 0.0315814 -0.953544 + -0.549455 3.05667 -2.31108 -0.263344 0.31596 -0.911493 + -0.588446 3.23589 -2.21229 -0.654255 0.229934 -0.720472 + -0.570148 3.42786 -2.18299 -0.75517 0.192317 -0.626684 + -0.538313 3.58721 -2.1688 -0.790129 0.308344 -0.529736 + -0.590762 3.06718 -2.26968 -0.460774 0.344314 -0.818007 + -0.638357 3.03011 -2.26808 -0.541586 0.452267 -0.708617 + -0.6349 3.2201 -2.17393 -0.615206 0.257916 -0.744984 + -0.616602 3.41206 -2.14463 -0.663813 0.23537 -0.709897 + -0.619672 3.48872 -2.11141 -0.750212 0.310852 -0.58357 + -0.636617 2.85949 -2.39415 -0.507461 0.494196 -0.705871 + -0.711591 2.84553 -2.33437 -0.630863 0.447285 -0.633993 + -0.770435 2.86984 -2.25847 -0.686712 0.432042 -0.584608 + -0.697201 3.05442 -2.19217 -0.618691 0.351899 -0.702417 + -0.714394 3.24369 -2.1128 -0.581069 0.269497 -0.767939 + -0.581956 2.70165 -2.54037 -0.347692 0.562429 -0.750189 + -0.658544 2.71084 -2.47928 -0.564727 0.471622 -0.677241 + -0.733518 2.69688 -2.4195 -0.664314 0.42752 -0.613118 + -0.802339 2.68845 -2.3385 -0.736232 0.376285 -0.56247 + -0.862522 2.86462 -2.13764 -0.56203 0.360548 -0.744398 + -0.601332 2.537 -2.64618 -0.39382 0.578568 -0.714259 + -0.67792 2.54619 -2.58509 -0.598892 0.509756 -0.617638 + -0.751343 2.50776 -2.52614 -0.692542 0.452599 -0.56173 + -0.820163 2.49925 -2.44519 -0.799046 0.36698 -0.47629 + -0.473219 2.43685 -2.79011 -0.507862 0.605494 -0.612743 + -0.599183 2.42489 -2.7486 -0.286101 0.688043 -0.666891 + -0.65657 2.36347 -2.79322 -0.437782 0.67589 -0.59289 + -0.700677 2.34287 -2.76293 -0.705758 0.555088 -0.440207 + -0.709787 2.38727 -2.68504 -0.7798 0.459401 -0.42528 + -0.57337 2.25345 -2.95005 -0.345234 0.69896 -0.626314 + -0.630757 2.19211 -2.99461 -0.225273 0.600944 -0.766889 + -0.702641 2.19183 -2.96792 -0.457773 0.586308 -0.668346 + -0.746748 2.17122 -2.93763 -0.726054 0.505952 -0.465681 + -0.546279 2.20846 -3.02752 -0.677085 0.566198 -0.47008 + -0.576693 2.13834 -3.04387 0.0911394 -0.189261 -0.977688 + -0.640043 2.12566 -3.02751 -0.475565 -0.117881 -0.871746 + -0.711928 2.12546 -3.00077 -0.456863 0.445075 -0.770185 + -0.745388 2.12484 -2.9707 -0.652627 0.418267 -0.631768 + -0.490656 2.24529 -3.05811 -0.520412 0.65057 -0.553109 + -0.50941 2.1894 -3.09931 -0.455886 0.622112 -0.63651 + -0.565033 2.15256 -3.06872 -0.803082 0.503888 -0.318051 + -0.451256 2.25163 -3.07989 -0.332721 0.695688 -0.636643 + -0.480623 2.19749 -3.09233 -0.36293 0.566636 -0.739733 + -0.393484 2.18027 -3.1615 0.309983 0.609779 -0.729438 + -0.45593 2.1985 -3.12628 -0.402882 0.621838 -0.671568 + -0.372272 2.1636 -3.15483 -0.515333 -0.430193 -0.741192 + -0.7722 2.09951 -2.95763 -0.794376 0.407612 -0.450356 + -0.807259 2.10921 -2.87383 -0.829615 0.434968 -0.35006 + -0.816369 2.15362 -2.79594 -0.75658 0.503765 -0.416902 + -0.78321 2.34884 -2.62608 -0.718184 0.489468 -0.494603 + -0.832711 2.03751 -2.89384 -0.796911 0.429894 -0.424411 + -0.851231 2.13087 -2.76174 -0.766625 0.493754 -0.410479 + -0.818072 2.32609 -2.59188 -0.808241 0.418749 -0.413999 + -0.879773 2.05483 -2.80203 -0.745883 0.479179 -0.462651 + -0.849238 2.29637 -2.54819 -0.807388 0.432161 -0.401698 + -0.85133 2.46952 -2.4015 -0.855075 0.291833 -0.42858 + -0.894426 2.68315 -2.21772 -0.768031 0.274872 -0.578423 + -0.891264 1.98563 -2.84077 -0.593613 -0.298406 -0.74738 + -0.932252 2.02172 -2.75308 -0.791953 0.450271 -0.412391 + -0.877781 2.22032 -2.58847 -0.801371 0.474694 -0.363964 + -0.891187 2.40223 -2.36215 -0.887686 0.261363 -0.379083 + -0.934283 2.61586 -2.17837 -0.808242 0.18417 -0.559309 + -0.975074 2.89702 -2.06695 -0.80171 0.0435097 -0.596128 + -0.943743 1.95252 -2.79183 -0.829521 0.35162 -0.433887 + -0.957339 2.00159 -2.71642 -0.883227 0.374803 -0.281839 + -0.902867 2.20019 -2.5518 -0.867896 0.409687 -0.280915 + -0.902565 2.25588 -2.45786 -0.942132 0.269094 -0.199938 + -0.944732 2.3707 -2.24494 -0.850126 0.222032 -0.47748 + -0.961467 1.93615 -2.75448 -0.85944 0.29645 -0.41651 + -0.976679 1.92511 -2.73795 -0.887227 0.318337 -0.333901 + -0.980083 1.97465 -2.65517 -0.926228 0.326448 -0.188502 + -0.97978 2.03034 -2.56122 -0.892225 0.38394 -0.237748 + -0.95611 2.22434 -2.34064 -0.886865 0.336692 -0.3164 + -1.02199 2.18508 -2.21343 -0.778211 0.262492 -0.570513 + -0.996492 2.4102 -2.17036 -0.660322 0.207774 -0.721668 + -0.999423 1.89818 -2.6767 -0.564249 -0.59868 -0.568512 + -1.01974 1.93901 -2.55022 -0.927356 0.298486 -0.225649 + -0.996071 2.13301 -2.32965 -0.909622 0.327295 -0.255863 + -1.03285 1.85781 -2.57419 -0.797408 -0.476615 -0.370107 + -1.06243 1.89044 -2.4139 -0.936067 0.272282 -0.222802 + -1.08587 1.87405 -2.34371 -0.929636 0.244839 -0.275375 + -1.01952 2.11653 -2.25951 -0.885086 0.279309 -0.372304 + -0.999951 1.87606 -2.63399 0.128967 -0.841571 -0.524525 + -0.988363 1.85496 -2.62205 -0.546797 -0.72186 -0.424183 + -0.992294 1.85263 -2.60982 -0.460463 -0.839095 -0.289642 + -1.01338 1.85759 -2.5856 -0.163371 -0.986546 -0.00610426 + -1.04854 1.80823 -2.42551 -0.0165023 -0.946948 -0.320961 + -1.07554 1.80925 -2.43787 -0.684384 -0.584851 -0.435394 + -0.986254 1.88944 -2.63897 0.382906 -0.823668 -0.418275 + -0.986783 1.86741 -2.59621 0.655489 -0.487962 -0.576392 + -0.972097 1.83359 -2.56863 0.758818 -0.0740781 -0.647076 + -0.988363 1.85496 -2.62205 0.887672 0.45272 -0.0841598 + -0.960509 1.81249 -2.55669 0.775684 0.275018 -0.568049 + -0.940727 1.79069 -2.54593 0.6882 0.706349 0.165686 + -0.977312 1.90902 -2.67488 0.326318 -0.881797 -0.340516 + -0.942907 1.89832 -2.63916 0.0931135 -0.887607 -0.451091 + -0.95185 1.87874 -2.60324 0.204543 -0.79365 -0.572959 + -0.949697 1.86099 -2.5821 0.127297 -0.684584 -0.717733 + -0.935011 1.82717 -2.55452 0.156906 -0.518131 -0.840786 + -0.976679 1.92511 -2.73795 0.408287 -0.885504 -0.221777 + -0.961467 1.93615 -2.75448 0.285962 -0.921694 -0.262116 + -0.9621 1.92007 -2.69142 0.233567 -0.9203 -0.313836 + -0.932709 1.90732 -2.65595 0.0517874 -0.902264 -0.428063 + -0.854408 1.8762 -2.59584 0.0677582 -0.832606 -0.549705 + -0.852255 1.85836 -2.57475 0.0738102 -0.65499 -0.752024 + -0.941467 1.92742 -2.70595 0.119757 -0.936985 -0.328203 + -0.912075 1.91468 -2.67049 -0.113951 -0.929047 -0.351975 + -0.844209 1.88512 -2.61269 -0.0876091 -0.961355 -0.261001 + -0.731115 1.88176 -2.57266 0.240312 -0.969697 -0.0440154 + -0.840742 1.83956 -2.56178 0.175113 -0.652347 -0.737414 + -0.943743 1.95252 -2.79183 0.294881 -0.912308 -0.284147 + -0.923743 1.94387 -2.74325 0.0231523 -0.935339 -0.352995 + -0.892881 1.92997 -2.73397 -0.370541 -0.850887 -0.372411 + -0.881181 1.90619 -2.68198 -0.379758 -0.903856 -0.197049 + -0.813314 1.87664 -2.6242 -0.200225 -0.971413 0.127542 + -0.860402 1.97181 -2.83144 -0.281652 -0.817224 -0.50281 + -0.819887 1.8968 -2.75452 -0.33971 -0.8377 -0.427617 + -0.808187 1.87303 -2.70255 -0.247318 -0.952387 -0.178306 + -0.756234 1.86791 -2.70108 0.0602364 -0.982106 -0.178436 + -0.761362 1.87152 -2.62273 0.0199043 -0.991865 0.125726 + -0.839839 1.97294 -2.84319 0.439026 -0.435866 -0.78567 + -0.799324 1.89793 -2.76628 0.0703518 -0.696227 -0.714366 + -0.768363 1.89362 -2.75541 0.0197245 -0.740419 -0.671856 + -0.736661 1.88587 -2.74199 0.166587 -0.850358 -0.49914 + -0.67396 1.88607 -2.67533 0.224113 -0.970805 -0.0855009 + -0.846348 1.99907 -2.85285 0.424848 -0.589848 -0.68672 + -0.81119 1.93752 -2.78025 0.689812 -0.0718933 -0.72041 + -0.780228 1.9332 -2.76937 0.00172394 -0.355061 -0.934842 + -0.714993 1.95113 -2.79983 -0.0688085 -0.542818 -0.837027 + -0.683291 1.9433 -2.78645 0.134201 -0.766003 -0.628673 + -0.832711 2.03751 -2.89384 0.537891 -0.763711 -0.356958 + -0.825596 1.99728 -2.80676 0.601099 -0.451418 -0.659471 + -0.817699 1.96365 -2.78991 0.654127 -0.16328 -0.738551 + -0.787041 1.95828 -2.78001 -0.00779252 -0.408731 -0.912622 + -0.811959 2.03572 -2.84774 0.589355 -0.663873 -0.460362 + -0.794939 1.99191 -2.79686 0.0151458 -0.52397 -0.851602 + -0.721806 1.97612 -2.81051 -0.173775 -0.479595 -0.860111 + -0.63233 1.9467 -2.79915 -0.226831 -0.830723 -0.508376 + -0.646625 1.94192 -2.78008 -0.135315 -0.895651 -0.423674 + -0.7722 2.09951 -2.95763 0.719673 -0.694112 0.0166993 + -0.793107 2.08309 -2.88218 0.780176 -0.587641 -0.214486 + -0.771598 2.06407 -2.84745 0.0991126 -0.629943 -0.770291 + -0.79045 2.01671 -2.81301 0.17133 -0.576187 -0.799158 + -0.717317 2.00101 -2.82661 -0.193824 -0.528686 -0.826392 + -0.745388 2.12484 -2.9707 0.105438 -0.985176 -0.135318 + -0.766295 2.10833 -2.8953 0.322422 -0.881794 -0.344214 + -0.754926 2.08123 -2.86297 -0.088241 -0.669275 -0.737756 + -0.734795 2.11178 -2.90688 -0.18419 -0.897889 -0.399835 + -0.723426 2.08469 -2.87455 -0.317962 -0.661377 -0.679323 + -0.700645 2.01817 -2.84213 -0.322437 -0.570899 -0.755055 + -0.711928 2.12546 -3.00077 -0.0942479 -0.978302 -0.184505 + -0.701335 2.1124 -2.93695 -0.434316 -0.827924 -0.354839 + -0.70669 2.08199 -2.88367 -0.556543 -0.624325 -0.548159 + -0.683909 2.01546 -2.85125 -0.63762 -0.589122 -0.496363 + -0.679138 2.09519 -2.95214 -0.650221 -0.572981 -0.498904 + -0.684493 2.06486 -2.89881 -0.738842 -0.498467 -0.453479 + -0.671611 2.04896 -2.90707 -0.824363 -0.360687 -0.436269 + -0.671027 1.99965 -2.85946 -0.832657 -0.514013 -0.206091 + -0.619337 2.10537 -3.02358 -0.774776 -0.598747 -0.203037 + -0.658431 2.07491 -2.94821 -0.719512 -0.476982 -0.504768 + -0.656267 2.01889 -2.91698 -0.847577 -0.345666 -0.402651 + -0.645456 2.00311 -2.92446 -0.796217 -0.434369 -0.421144 + -0.660216 1.98387 -2.86694 -0.694732 -0.681264 -0.230709 + -0.610102 2.09214 -3.03065 -0.648038 -0.417286 -0.637118 + -0.643087 2.04483 -2.95812 -0.82228 -0.283918 -0.4932 + -0.633852 2.0316 -2.96519 -0.787272 -0.336108 -0.516947 + -0.632333 1.99251 -2.93589 -0.523645 -0.703772 -0.480105 + -0.598376 2.08982 -3.03804 -0.0216755 -0.397058 -0.917537 + -0.620729 2.02099 -2.97662 -0.599586 -0.548391 -0.582892 + -0.588531 2.10963 -3.04154 0.33991 -0.205779 -0.917669 + -0.588059 2.02391 -2.99407 0.0558765 -0.592923 -0.803318 + -0.609004 2.01859 -2.98406 -0.354576 -0.67891 -0.642928 + -0.582176 1.97927 -2.93717 -0.146671 -0.864848 -0.48013 + -0.568856 2.10302 -2.9977 0.676745 -0.220017 -0.702573 + -0.578214 2.04372 -2.99759 0.511444 -0.27269 -0.814902 + -0.534166 2.00115 -2.96645 0.120555 -0.661453 -0.740234 + -0.561231 1.9846 -2.94719 -0.0037534 -0.81851 -0.57448 + -0.557018 2.13173 -3.00002 0.53759 -0.49929 -0.679489 + -0.540525 2.08938 -2.98327 0.193884 -0.095052 -0.976409 + -0.549883 2.03016 -2.98311 0.22911 -0.262468 -0.937347 + -0.532865 2.15391 -3.00765 0.237224 -0.777528 -0.582387 + -0.505218 2.1392 -2.99357 -0.0178397 -0.464766 -0.885254 + -0.529371 2.1171 -2.98589 0.108102 -0.267392 -0.957505 + -0.476331 2.05192 -2.98459 0.113045 -0.24789 -0.96217 + -0.460613 2.02282 -2.96798 0.248829 -0.520817 -0.816599 + -0.565033 2.15256 -3.06872 0.484069 -0.846474 -0.221718 + -0.521205 2.16814 -3.0325 0.358025 -0.861725 -0.35951 + -0.492418 2.17623 -3.02551 0.15063 -0.831792 -0.534259 + -0.483079 2.14953 -3.00127 -0.129771 -0.496484 -0.858291 + -0.465177 2.07955 -2.98726 -0.0437703 -0.249576 -0.967365 + -0.50941 2.1894 -3.09931 0.368776 -0.902609 -0.222038 + -0.480623 2.19749 -3.09233 0.05889 -0.976603 -0.206831 + -0.449959 2.18494 -3.04079 -0.257076 -0.853096 -0.454026 + -0.440619 2.15824 -3.01654 -0.398102 -0.517548 -0.757403 + -0.443037 2.08988 -2.99495 -0.353468 -0.3979 -0.846603 + -0.406483 2.02619 -2.95862 -0.232996 -0.809607 -0.538749 + -0.428765 2.01675 -2.95248 0.138018 -0.68137 -0.718809 + -0.45593 2.1985 -3.12628 -0.241834 -0.966007 -0.0913623 + -0.425266 2.18595 -3.07474 -0.394178 -0.887344 -0.239257 + -0.404054 2.16929 -3.06809 -0.679295 -0.628527 -0.378831 + -0.415846 2.14963 -3.03183 -0.674938 -0.397921 -0.621384 + -0.418264 2.08128 -3.01025 -0.753756 -0.316226 -0.576067 + -0.393484 2.18027 -3.1615 -0.501108 -0.855941 -0.127496 + -0.371147 2.13183 -3.0994 -0.713108 -0.487069 -0.504223 + -0.38294 2.11217 -3.06315 -0.812176 -0.21162 -0.543679 + -0.370886 2.08425 -3.07699 -0.813072 0.0218246 -0.581754 + -0.406211 2.05336 -3.02409 -0.891624 -0.241537 -0.382971 + -0.350353 2.16381 -3.16919 -0.29822 -0.830397 -0.470644 + -0.349228 2.13195 -3.11381 -0.462097 -0.573419 -0.676503 + -0.35431 2.09602 -3.09818 -0.713984 -0.0871747 -0.694714 + -0.368641 2.03918 -3.08753 -0.684455 -0.346635 -0.641378 + -0.364508 2.01202 -3.06709 -0.474709 -0.715003 -0.513247 + -0.402078 2.0262 -3.00365 -0.84527 -0.509436 -0.161223 + -0.334436 2.13338 -3.1253 0.199361 -0.454001 -0.868411 + -0.339518 2.09737 -3.10972 -0.288629 -0.190774 -0.938242 + -0.352065 2.05095 -3.10872 -0.394263 -0.244131 -0.885978 + -0.323458 2.01354 -3.07911 0.0809718 -0.797337 -0.598077 + -0.35437 1.97828 -2.99445 -0.405852 -0.893079 -0.194152 + -0.310485 2.08449 -3.1044 0.277689 -0.115665 -0.953683 + -0.323032 2.03799 -3.10346 0.139075 -0.466517 -0.87351 + -0.238304 2.0325 -3.05156 0.339023 -0.780841 -0.524738 + -0.31332 1.9798 -3.00647 0.180299 -0.937267 -0.298366 + -0.302064 2.11371 -3.10301 0.450584 -0.0484366 -0.891419 + -0.237878 2.05695 -3.07591 0.529582 -0.39172 -0.752395 + -0.289754 2.15123 -3.09701 0.371972 -0.235149 -0.897965 + -0.229457 2.08617 -3.07451 0.104246 -0.0261088 -0.994209 + -0.208237 2.10715 -3.07546 0.0272764 -0.330273 -0.943491 + -0.322126 2.17091 -3.1193 0.589221 -0.493477 -0.639764 + -0.289791 2.2002 -3.13563 0.407427 -0.790579 -0.457153 + -0.268534 2.17222 -3.09796 0.235879 -0.484311 -0.842498 + -0.350353 2.16381 -3.16919 0.863495 -0.209925 -0.458593 + -1.10664 1.77992 -2.31808 -0.839459 -0.448712 -0.306541 + -1.11354 1.8732 -2.26963 -0.921075 0.202699 -0.332465 + -1.11601 1.94174 -2.22355 -0.733331 0.272861 -0.622714 + -1.08037 1.78631 -2.37834 -0.268936 -0.87116 -0.410797 + -1.06729 1.76693 -2.35678 -0.529537 -0.799574 -0.283322 + -1.07252 1.76395 -2.33541 -0.49166 -0.841967 -0.222176 + -1.0932 1.74848 -2.21302 -0.467606 -0.868302 -0.165517 + -1.12955 1.76009 -2.17713 -0.388941 -0.899444 -0.199311 + -1.13431 1.77915 -2.24394 -0.823167 -0.455097 -0.339533 + -1.05337 1.7853 -2.36599 0.113347 -0.884727 -0.452117 + -1.05223 1.76606 -2.33606 0.501433 -0.546948 -0.670382 + -1.06729 1.76693 -2.35678 0.812098 -0.0785088 -0.578215 + -1.03915 1.74659 -2.31455 0.693161 -0.0985847 -0.714009 + -1.00204 1.70979 -2.2786 -0.0834123 -0.861284 -0.50123 + -1.01319 1.78128 -2.35383 0.00959363 -0.905434 -0.424379 + -1.01205 1.76204 -2.32391 0.0818213 -0.780047 -0.620349 + -0.999293 1.74336 -2.30196 0.114434 -0.668815 -0.734568 + -0.962187 1.70664 -2.26596 0.125684 -0.873764 -0.46983 + -1.00727 1.7068 -2.25724 -0.314082 -0.929948 -0.191178 + -1.02907 1.808 -2.43692 -0.246026 -0.92968 -0.274166 + -1.0031 1.78788 -2.37926 -0.1156 -0.967138 -0.226452 + -0.919578 1.77053 -2.32961 0.0250614 -0.878133 -0.477759 + -0.906824 1.75185 -2.30766 0.150893 -0.811615 -0.564369 + -0.997619 1.80835 -2.48351 -0.424834 -0.870825 -0.247343 + -0.971655 1.78821 -2.42584 -0.241776 -0.964547 -0.105801 + -0.909494 1.77704 -2.35508 -0.0565466 -0.993731 -0.0964449 + -0.809792 1.77706 -2.32613 0.188447 -0.982079 0.00278942 + -0.863841 1.74856 -2.26716 0.367874 -0.886781 -0.279799 + -0.976528 1.80348 -2.50768 -0.503138 -0.838327 -0.209903 + -0.950965 1.78361 -2.44946 -0.350992 -0.93597 -0.0276399 + -0.888804 1.77243 -2.3787 -0.0913196 -0.992784 0.0777251 + -0.944658 1.78837 -2.53371 -0.350349 -0.905888 -0.237954 + -0.919094 1.7685 -2.47549 -0.180214 -0.977904 -0.105958 + -0.875386 1.76883 -2.46366 0.142442 -0.977915 -0.152948 + -0.845095 1.77276 -2.36687 0.0609837 -0.997089 0.0457605 + -0.940727 1.79069 -2.54593 -0.0728904 -0.727367 -0.682366 + -0.903717 1.78657 -2.5308 0.125959 -0.787047 -0.603897 + -0.864548 1.78519 -2.5062 0.291836 -0.861078 -0.416385 + -0.777425 1.78562 -2.40034 0.261389 -0.949915 -0.171279 + -0.743873 1.78945 -2.37079 0.203337 -0.961421 -0.185268 + -0.811544 1.77651 -2.33737 0.111896 -0.993688 -0.00792463 + -0.923498 1.80837 -2.54156 0.18622 -0.36191 -0.913424 + -0.801573 1.83818 -2.53719 0.379027 -0.799878 -0.465332 + -0.766587 1.80198 -2.44288 0.420044 -0.840084 -0.343253 + -0.731199 1.88017 -2.54571 0.395795 -0.903312 -0.165451 + -0.750759 1.86051 -2.52226 0.460266 -0.799169 -0.386632 + -0.715772 1.8243 -2.42795 0.417089 -0.773367 -0.477431 + -0.693494 1.82274 -2.41123 0.357652 -0.725317 -0.588219 + -0.710576 1.80419 -2.39672 0.346268 -0.851554 -0.393642 + -0.63728 1.90316 -2.52174 0.181397 -0.976218 -0.118719 + -0.64211 1.89408 -2.4698 0.165093 -0.924706 -0.343022 + -0.66167 1.87441 -2.44634 0.405501 -0.773259 -0.487483 + -0.639392 1.87276 -2.42967 0.272619 -0.792925 -0.54493 + -0.637196 1.90475 -2.54868 0.227812 -0.973699 -0.00349911 + -0.603434 1.90976 -2.54397 -0.748915 -0.614656 -0.247638 + -0.608264 1.9006 -2.4921 0.0412206 -0.974082 -0.222408 + -0.621012 1.88748 -2.46078 -0.0896543 -0.892265 -0.442522 + -0.642098 1.90017 -2.57856 0.254049 -0.963444 0.0850545 + -0.609115 1.90933 -2.58583 0.475288 -0.879233 0.0324001 + -0.604214 1.91391 -2.55595 -0.156328 -0.973167 -0.168841 + -0.592266 1.91999 -2.61288 -0.640771 -0.737514 -0.213273 + -0.593047 1.92413 -2.62486 -0.640765 -0.737519 -0.213273 + -0.733381 1.87888 -2.59848 0.193993 -0.977533 0.0824332 + -0.644363 1.8973 -2.60438 0.290735 -0.953812 0.0756082 + -0.594698 1.91353 -2.65769 0.610895 -0.78464 0.105579 + -0.571293 1.94331 -2.66948 0.796323 -0.587156 0.145317 + -0.645979 1.89343 -2.65109 0.285741 -0.957429 0.0410105 + -0.596314 1.90958 -2.70445 0.488558 -0.803174 0.340916 + -0.562054 1.91149 -2.78196 0.892178 -0.327389 0.311183 + -0.556875 1.94742 -2.7414 0.783711 -0.595774 0.175642 + -0.596777 1.8903 -2.71226 0.732716 -0.270747 0.624358 + -0.562516 1.89213 -2.78983 0.707667 0.552525 0.440367 + -0.540993 1.91304 -2.85124 0.948403 -0.138484 0.285227 + -1.15743 1.91745 -2.19529 -0.765219 0.152997 -0.625325 + -1.09573 2.14878 -2.15916 -0.644858 0.242609 -0.724775 + -1.10695 2.28195 -2.11301 -0.632824 0.155424 -0.758537 + -1.0332 2.31833 -2.16724 -0.609489 0.191343 -0.769358 + -1.17645 1.88416 -2.16522 -0.942099 -0.0382322 -0.333148 + -1.18765 2.08689 -2.10077 -0.750283 0.168071 -0.639396 + -1.13716 2.12449 -2.13089 -0.641379 0.256433 -0.723101 + -1.14179 2.21318 -2.0973 -0.651842 0.19096 -0.733918 + -1.14109 2.34193 -2.07631 -0.522511 0.0925126 -0.847599 + -1.16752 1.8059 -2.15487 -0.9547 -0.207369 -0.213416 + -1.21327 1.99216 -2.01029 -0.967286 -0.169126 -0.189087 + -1.20666 2.0536 -2.07071 -0.916515 -0.0594466 -0.395557 + -1.2492 2.14475 -2.01399 -0.773145 -0.235086 -0.589051 + -1.19228 2.17558 -2.06719 -0.60126 0.120367 -0.789936 + -1.14801 1.74733 -2.15642 -0.9288 -0.303759 -0.212278 + -1.17096 1.74047 -2.02934 -0.960066 -0.259605 -0.104302 + -1.20434 1.9139 -1.99994 -0.980805 -0.158871 -0.113052 + -1.24278 2.03662 -1.8647 -0.931278 -0.35514 -0.0812146 + -1.2558 2.08331 -1.95357 -0.901063 -0.375583 -0.216848 + -1.15145 1.6819 -2.03091 -0.486241 -0.794128 -0.364597 + -1.18277 1.76785 -1.93897 -0.978926 -0.193431 -0.0654877 + -1.21615 1.94119 -1.90961 -0.974374 -0.219508 -0.0491093 + -1.24146 2.01092 -1.74839 -0.952108 -0.298057 0.0682104 + -1.28605 2.1145 -1.83579 -0.918882 -0.3945 -0.00512896 + -1.29906 2.16111 -1.92472 -0.830483 -0.540358 -0.135319 + -1.17311 1.71051 -1.92046 -0.935592 -0.34672 -0.0667287 + -1.21483 1.91541 -1.79335 -0.97801 -0.208528 -0.0036615 + -1.22327 1.99607 -1.63906 -0.930147 -0.329843 0.161339 + -1.26074 2.09963 -1.71582 -0.933772 -0.32675 0.145961 + -1.14237 1.66056 -1.98515 -0.402532 -0.874839 -0.26949 + -1.12108 1.64027 -1.948 -0.818254 -0.565399 -0.103853 + -1.13441 1.64513 -1.92742 -0.699975 -0.6896 -0.185703 + -1.17745 1.71176 -1.83562 -0.93609 -0.350689 0.0274534 + -1.20517 1.85808 -1.77485 -0.97794 -0.203166 0.0485556 + -1.10948 1.66565 -1.97575 0.135518 -0.874943 -0.464877 + -1.11968 1.6542 -1.95812 0.352141 -0.739179 -0.574118 + -1.12108 1.64027 -1.948 0.595698 -0.510438 -0.620159 + -1.08136 1.64392 -1.93812 -0.00774151 -0.862955 -0.505221 + -1.06945 1.6088 -1.87888 0.00737978 -0.880066 -0.474794 + -1.11856 1.68698 -2.02151 0.237111 -0.830548 -0.503953 + -1.0775 1.66753 -1.97561 -0.00641392 -0.852507 -0.522676 + -1.08771 1.65608 -1.95799 0.0123477 -0.848293 -0.529384 + -1.0079 1.65625 -1.96487 0.024702 -0.857507 -0.513879 + -1.05241 1.61881 -1.89603 -0.00116581 -0.870749 -0.491726 + -1.14801 1.74733 -2.15642 0.258762 -0.859452 -0.440889 + -0.649583 1.8106 -0.813416 -0.980869 -0.14873 0.125599 + -0.661456 1.89294 -0.847236 -0.993982 -0.0438529 0.100377 + -0.665803 1.85544 -0.942675 -0.953548 -0.102119 0.283404 + -0.723908 1.85085 -1.04912 -0.280782 -0.340263 0.897431 + -0.616529 1.72023 -0.715886 -0.981363 -0.163407 0.101122 + -0.639294 1.82867 -0.742512 -0.97765 -0.198828 0.0683203 + -0.656365 1.90801 -0.744739 -0.997035 -0.0769454 0.0010585 + -0.65719 1.99449 -0.872528 -0.921122 -0.271916 0.278562 + -0.688318 1.91609 -0.979938 -0.818349 -0.264622 0.510176 + -0.641223 1.8031 -0.63302 -0.976983 -0.213048 0.0106765 + -0.658294 1.88243 -0.635237 -0.980913 -0.193882 0.0148055 + -0.66404 1.99448 -0.668502 -0.992128 -0.0802442 -0.0961359 + -0.652099 2.00947 -0.770073 -0.995772 -0.0882967 0.0253457 + -0.690586 2.04601 -0.869965 -0.651675 -0.578504 0.490564 + -0.721714 1.96762 -0.977374 -0.0653536 -0.61846 0.783094 + -0.670984 1.91222 -0.532224 -0.785764 -0.522623 0.330819 + -0.67673 2.02426 -0.56549 -0.98629 -0.109726 -0.123255 + -0.675378 2.08841 -0.670391 -0.993583 -0.0114219 -0.112528 + -0.663437 2.10349 -0.771912 -0.857258 -0.417236 0.3017 + -0.745918 2.11019 -0.834725 0.0945999 -0.771066 0.629688 + -0.677353 2.07043 -0.42066 0.168401 -0.700289 0.693712 + -0.719851 2.09289 -0.351357 0.732537 -0.37235 0.569864 + -0.643618 2.04868 -0.42158 -0.110878 -0.720557 0.684473 + -0.642861 2.13821 -0.297858 -0.0476366 -0.950944 0.305674 + -0.683856 2.1495 -0.235005 0.0157995 -0.967238 0.253381 + -0.719851 2.09289 -0.351357 0.159494 -0.906225 0.391558 + -0.726354 2.17204 -0.165652 -0.245095 -0.965109 0.0921618 + -0.591539 2.1091 -0.346226 0.525479 -0.738011 0.423335 + -0.632028 2.15113 -0.149236 0.301249 -0.929363 0.213385 + -0.673023 2.1625 -0.086333 -0.0360688 -0.990365 0.133701 + -0.694818 2.17955 -0.003062 -0.0667867 -0.990247 0.122268 + -0.590323 2.17315 -0.220969 0.797921 -0.567165 0.204074 + -0.559074 2.21804 -0.16272 0.742297 -0.669738 -0.0210964 + -0.600778 2.19602 -0.090987 0.508197 -0.861075 0.0168798 + -0.617838 2.17332 -0.016465 0.151545 -0.987773 -0.0365742 + -0.537674 2.26323 -0.227793 0.874435 -0.483853 -0.0353454 + -0.519612 2.28057 -0.179638 0.688921 -0.661905 -0.295414 + -0.525803 2.23951 -0.112705 0.565716 -0.803141 -0.186895 + -0.542863 2.21689 -0.038133 0.336101 -0.869336 -0.362343 + -0.498212 2.32577 -0.24471 0.77181 -0.582199 -0.255642 + -0.442832 2.38537 -0.239753 0.598936 -0.611056 -0.517577 + -0.445415 2.33028 -0.186529 0.430497 -0.680179 -0.59332 + -0.451606 2.2893 -0.119546 0.345365 -0.810414 -0.473235 + -0.481643 2.38683 -0.29747 0.783133 -0.529422 -0.326214 + -0.426263 2.44644 -0.292521 0.63061 -0.577187 -0.518833 + -0.361921 2.4423 -0.221354 0.219892 -0.676355 -0.702987 + -0.364504 2.38729 -0.16808 0.179872 -0.620493 -0.763305 + -0.35169 2.32451 -0.12374 0.0690669 -0.742476 -0.666302 + -0.462537 2.44419 -0.355431 0.850651 -0.481766 -0.210462 + -0.415492 2.50481 -0.344625 0.694633 -0.557192 -0.454996 + -0.3606 2.49977 -0.271703 0.259769 -0.658679 -0.70616 + -0.266055 2.51805 -0.310551 -0.407732 -0.602135 -0.686432 + -0.267376 2.46057 -0.260203 -0.371141 -0.620333 -0.690971 + -0.446736 2.50631 -0.40663 0.859747 -0.425557 -0.282376 + -0.39969 2.56693 -0.395823 0.677224 -0.54382 -0.495609 + -0.349828 2.55815 -0.323807 0.250919 -0.68534 -0.683629 + -0.271304 2.57523 -0.3564 -0.387972 -0.617953 -0.683821 + -0.438166 2.56162 -0.466418 0.879113 -0.365454 -0.305947 + -0.392707 2.62786 -0.447353 0.688569 -0.493727 -0.531137 + -0.340044 2.61075 -0.377513 0.230001 -0.691242 -0.685044 + -0.26152 2.62783 -0.410106 -0.387313 -0.649707 -0.654117 + -0.439425 2.6232 -0.51988 0.884767 -0.352439 -0.304915 + -0.393966 2.68945 -0.500823 0.718516 -0.526767 -0.454148 + -0.333061 2.67159 -0.4291 0.150934 -0.612573 -0.775869 + -0.26243 2.671 -0.458472 -0.448585 -0.573961 -0.685084 + -0.423663 2.83709 -0.832142 0.899465 -0.382728 -0.210906 + -0.383908 2.96572 -0.936345 0.754844 -0.569141 -0.326019 + -0.328671 2.73479 -0.471964 0.182213 -0.686864 -0.703574 + -0.258041 2.73411 -0.501386 -0.532705 -0.599616 -0.597232 + -0.389784 3.35025 -1.69157 0.907022 -0.377863 -0.185823 + -0.350029 3.47889 -1.79577 0.865349 -0.438158 -0.243288 + -0.31586 3.53684 -1.79416 0.787117 -0.529784 -0.315874 + -0.318614 3.01098 -0.907536 0.688474 -0.621364 -0.374046 + -0.26365 3.18553 -1.08067 0.535459 -0.631209 -0.561124 + -0.357848 3.75877 -2.25574 0.870537 -0.413683 -0.266518 + -0.357848 3.75877 -2.25574 0.824205 -0.477442 -0.304524 + -0.323679 3.81672 -2.25412 0.515322 -0.433265 -0.739408 + -0.260896 3.7114 -1.9673 0.784248 -0.525438 -0.329954 + -0.287798 3.87878 -2.26541 0.547926 -0.423239 -0.721558 + -0.226921 3.78392 -1.9845 0.744677 -0.555421 -0.370085 + -0.320441 3.88862 -2.27345 -0.237887 -0.0412594 -0.970416 + -0.280552 3.9586 -2.28646 -0.248078 0.0220471 -0.968489 + -0.253823 3.9513 -2.28262 0.464591 -0.392343 -0.793865 + -0.201838 4.02314 -2.28604 0.437655 -0.340648 -0.832116 + -0.170029 3.8391 -1.98008 0.612836 -0.657875 -0.437759 + -0.356322 3.82656 -2.26216 -0.260274 -0.0890776 -0.961417 + -0.335666 3.91617 -2.25556 -0.681655 0.292058 -0.670857 + -0.295777 3.98606 -2.26862 -0.686428 0.385977 -0.61631 + -0.238178 4.05334 -2.27375 -0.537741 0.499111 -0.679502 + -0.228567 4.03034 -2.28992 -0.183981 0.171153 -0.967914 + -0.414938 3.79883 -2.22034 -0.720113 0.272106 -0.638275 + -0.378202 3.85375 -2.23826 -0.701246 0.273284 -0.658461 + -0.342256 3.96762 -2.21109 -0.748213 0.449247 -0.488216 + -0.289296 4.02531 -2.231 -0.722365 0.526344 -0.448499 + -0.357848 3.75877 -2.25574 -0.247884 0.172693 -0.953274 + -0.463356 3.69601 -2.21324 -0.678449 0.274489 -0.681441 + -0.429885 3.82907 -2.17531 -0.813272 0.379751 -0.440883 + -0.384793 3.90521 -2.19379 -0.801508 0.391873 -0.451686 + -0.378565 3.95873 -2.14769 -0.829334 0.460094 -0.317047 + -0.335829 4.02806 -2.14717 -0.776441 0.524639 -0.349133 + -0.478303 3.72625 -2.16821 -0.803751 0.342748 -0.486321 + -0.504429 3.73987 -2.11361 -0.82587 0.397715 -0.399702 + -0.423657 3.88259 -2.12921 -0.833771 0.440712 -0.332565 + -0.365999 4.02351 -2.06529 -0.824745 0.498463 -0.267076 + -0.323263 4.09292 -2.06472 -0.806498 0.507759 -0.302889 + -0.564439 3.60092 -2.11415 -0.794199 0.36304 -0.487289 + -0.591852 3.63862 -2.04383 -0.653269 0.433813 -0.620521 + -0.549484 3.70203 -2.04408 -0.757982 0.467353 -0.455021 + -0.501226 3.80578 -2.03256 -0.773217 0.383494 -0.505042 + -0.456171 3.84361 -2.1021 -0.831653 0.446748 -0.329801 + -0.647085 3.52642 -2.0411 -0.496292 0.278787 -0.822175 + -0.700534 3.60249 -2.02207 0.0222737 0.125976 -0.991783 + -0.619137 3.65463 -2.00676 -0.208829 0.341478 -0.916397 + -0.576769 3.71804 -2.007 -0.317497 0.22297 -0.921672 + -0.532606 3.80752 -1.99978 -0.343624 0.303519 -0.888706 + -0.427697 3.95708 -2.04764 -0.0749504 0.101348 -0.992024 + -0.717464 3.32035 -2.07958 -0.430209 0.27129 -0.861 + -0.770078 3.30759 -2.07469 0.18806 0.182001 -0.965147 + -0.6997 3.51375 -2.03617 0.0713413 0.171735 -0.982557 + -0.776695 3.07793 -2.1311 -0.479383 0.210897 -0.851889 + -0.816951 3.26181 -2.10819 0.367657 -0.000813715 -0.929961 + -0.830246 3.43662 -2.09196 0.337313 0.152628 -0.928937 + -0.831081 3.52536 -2.07787 0.0343598 0.437928 -0.898353 + -0.934467 2.91554 -2.08703 -0.430684 0.111011 -0.895649 + -0.84864 3.12885 -2.08049 -0.353126 -0.0253951 -0.935231 + -0.843466 3.22363 -2.09885 -0.166718 -0.253941 -0.952743 + -0.887219 3.33249 -2.16981 0.36213 0.079671 -0.928716 + -0.877119 3.39084 -2.12547 0.415215 0.373389 -0.829564 + -0.988181 3.1422 -2.07001 -0.230553 -0.116348 -0.966079 + -0.983007 3.23697 -2.08837 -0.25442 -0.358061 -0.898367 + -0.913734 3.29439 -2.16042 -0.0756926 -0.44545 -0.892101 + -0.971944 3.33475 -2.15372 -0.454421 -0.144641 -0.878966 + -0.945597 3.3738 -2.16275 -0.139378 0.337716 -0.930872 + -1.02879 3.12367 -2.04993 -0.567989 -0.356446 -0.741845 + -1.13992 3.1959 -2.03623 -0.229918 -0.177834 -0.956824 + -1.04122 3.27733 -2.08166 -0.430465 -0.205168 -0.87898 + -1.0767 3.38613 -2.07192 -0.431981 -0.0467594 -0.90067 + -1.05036 3.42518 -2.08095 -0.347645 0.418403 -0.839096 + -1.01116 3.05512 -1.99999 -0.827572 -0.310506 -0.467665 + -1.06198 3.0943 -1.98165 -0.214445 -0.482203 -0.849407 + -1.07961 3.16294 -2.03154 -0.414817 -0.837076 -0.356693 + -0.975289 2.85138 -2.0535 -0.951523 0.238084 -0.19473 + -1.01137 3.00939 -1.98658 -0.65421 0.00718047 -0.756279 + -1.06208 3.04749 -1.96857 -0.144276 -0.111882 -0.983192 + -1.17824 3.0538 -1.99369 0.0675386 -0.279717 -0.957704 + -1.23855 3.08685 -1.99834 -0.09158 -0.143726 -0.985371 + -1.00064 2.76627 -2.06269 -0.64153 0.199236 -0.740772 + -1.02943 2.93831 -1.99707 -0.35258 0.213584 -0.911081 + -1.08014 2.97632 -1.97911 -0.0795743 0.149333 -0.98558 + -1.17835 3.00699 -1.98062 0.0720652 -0.065211 -0.995266 + -1.31949 3.00873 -1.98584 -0.0162973 -0.0208787 -0.999649 + -0.986043 2.65546 -2.10375 -0.655297 0.19743 -0.729114 + -1.11286 2.67152 -2.02258 -0.301424 0.261841 -0.916833 + -1.05478 2.85312 -2.00632 -0.362516 0.201705 -0.909889 + -1.10555 2.89233 -1.98803 -0.0906678 0.125675 -0.987919 + -1.20375 2.92299 -1.98954 0.0203355 0.0750271 -0.996974 + -1.09827 2.56071 -2.06364 -0.416537 0.204287 -0.885869 + -1.24444 2.67947 -2.00494 -0.0963287 0.107055 -0.989576 + -1.16363 2.71074 -2.0043 -0.108192 0.175012 -0.978604 + -1.28456 2.89182 -1.99014 -0.0221535 0.0461543 -0.998689 + -1.13497 2.46883 -2.06051 -0.43348 0.143259 -0.889703 + -1.24701 2.56134 -2.01134 -0.227772 0.0698009 -0.971209 + -1.42874 2.76685 -1.99049 -0.0696272 0.0429395 -0.996648 + -1.46366 2.88377 -1.98619 -0.0932224 0.0330562 -0.995096 + -1.25313 2.43444 -2.02713 -0.270164 0.073252 -0.960024 + -1.376 2.51822 -1.99585 -0.114477 0.0144164 -0.993321 + -1.43131 2.64864 -1.99695 -0.075487 0.0136572 -0.997053 + -1.63719 2.8068 -1.96728 -0.093509 0.133554 -0.98662 + -1.23734 2.32035 -2.03312 -0.343442 0.0366645 -0.938458 + -1.36021 2.40413 -2.00184 -0.216379 -0.0373293 -0.975596 + -1.53882 2.55361 -1.98375 -0.0473551 -0.0389049 -0.99812 + -1.59413 2.68402 -1.98483 -0.0448303 0.0564439 -0.997399 + -1.17593 2.27307 -2.06064 -0.473531 0.0996804 -0.875119 + -1.25369 2.22285 -2.03966 -0.502976 -0.0939219 -0.859182 + -1.33576 2.3177 -2.00015 -0.399315 -0.189006 -0.89712 + -1.46842 2.37095 -1.97597 -0.223438 -0.345836 -0.911303 + -1.49287 2.45738 -1.97767 -0.116185 -0.0937373 -0.988794 + -1.33127 2.23969 -1.97442 -0.646114 -0.420912 -0.636687 + -1.42789 2.30996 -1.94454 -0.446572 -0.617113 -0.647878 + -1.62731 2.40409 -1.94996 -0.235512 -0.634903 -0.735821 + -1.66729 2.45157 -1.98061 -0.106977 -0.338737 -0.93478 + -1.71324 2.5478 -1.98668 -0.0974185 -0.0390775 -0.994476 + -1.39568 2.23147 -1.89478 -0.626229 -0.755703 -0.191702 + -1.50851 2.3155 -1.86953 -0.340965 -0.935321 -0.0944317 + -1.58678 2.34309 -1.91852 -0.260574 -0.815644 -0.516552 + -1.73092 2.37115 -1.88572 -0.131401 -0.848915 -0.511934 + -1.781 2.40746 -1.9224 -0.142853 -0.706798 -0.692842 + -1.31454 2.19299 -1.78813 -0.813264 -0.555502 0.173263 + -1.36065 2.22605 -1.8196 -0.626462 -0.723195 0.290748 + -1.47348 2.31008 -1.79434 -0.436618 -0.833227 0.339262 + -1.65265 2.34347 -1.83677 -0.127858 -0.990665 0.0472872 + -1.28924 2.1782 -1.66811 -0.884102 -0.433411 0.174695 + -1.34068 2.29708 -1.63003 -0.761031 -0.612996 0.212291 + -1.38679 2.33015 -1.6615 -0.589409 -0.744175 0.314326 + -1.43417 2.38079 -1.61921 -0.55271 -0.682526 0.478193 + -1.52085 2.36072 -1.75206 -0.317515 -0.81048 0.492246 + -1.26697 2.17874 -1.57305 -0.900365 -0.390708 0.19155 + -1.31841 2.29754 -1.53501 -0.823395 -0.449967 0.345761 + -1.24255 2.08486 -1.60644 -0.947869 -0.274829 0.161286 + -1.23862 2.16438 -1.46977 -0.905292 -0.313672 0.286453 + -1.24799 2.24232 -1.43177 -0.8767 -0.305355 0.371694 + -1.26407 2.36213 -1.3649 -0.841359 -0.267282 0.469762 + -1.33449 2.41726 -1.46819 -0.756846 -0.403412 0.51424 + -1.2045 1.99043 -1.53649 -0.917416 -0.362814 0.163444 + -1.2142 2.0705 -1.50317 -0.940018 -0.267209 0.212052 + -1.18692 2.03124 -1.42837 -0.941062 -0.229075 0.248849 + -1.19436 2.12152 -1.38695 -0.92791 -0.233749 0.290421 + -1.20373 2.19955 -1.3489 -0.87935 -0.241729 0.410257 + -1.18042 1.92842 -1.63808 -0.800197 -0.54896 0.241512 + -1.16165 1.92269 -1.53557 -0.773768 -0.633174 -0.0193038 + -1.17722 1.95109 -1.46175 -0.925285 -0.338291 0.171486 + -1.14099 1.87746 -1.41543 -0.897996 -0.356174 0.258347 + -1.16448 1.97777 -1.38457 -0.885871 -0.279823 0.370041 + -1.17192 2.06806 -1.34315 -0.844979 -0.263254 0.465519 + -1.0651 1.85069 -1.53705 -0.803826 -0.572122 0.162914 + -1.03903 1.79188 -1.47559 -0.62161 -0.56532 -0.542231 + -1.13558 1.86389 -1.47411 -0.784048 -0.569633 -0.246549 + -1.03402 1.78121 -1.51991 -0.745892 0.00624042 0.666037 + -1.00259 1.73764 -1.46965 -0.911133 -0.354543 -0.210087 + -1.08457 1.69014 -1.39597 -0.841294 -0.353496 -0.408982 + -1.09935 1.79026 -1.42779 -0.913192 -0.136649 0.383938 + -1.07254 1.68849 -1.48572 -0.493736 0.219424 0.841474 + -1.01226 1.69252 -1.49689 -0.433205 0.25784 0.863627 + -0.98083 1.64894 -1.44662 -0.999595 -0.0181607 0.0219353 + -1.04813 1.6359 -1.39004 -0.63553 -0.439626 -0.634689 + -1.19025 1.85053 -1.68118 -0.923306 -0.229262 0.308131 + -1.11344 1.68017 -1.5459 -0.899984 -0.129642 0.416199 + -1.03534 1.59892 -1.45797 -0.720565 -0.692201 -0.0405528 + -1.04089 1.60615 -1.4299 -0.816759 -0.576836 -0.0128116 + -1.00949 1.57435 -1.40242 -0.72558 -0.687312 0.0336929 + -1.00394 1.56712 -1.43049 -0.480069 -0.87658 -0.0337773 + -1.16252 1.70413 -1.742 -0.944069 -0.305172 0.124916 + -1.1428 1.64929 -1.72542 -0.853456 -0.511329 0.100777 + -1.09371 1.62534 -1.52933 -0.734295 -0.600879 0.315842 + -1.05132 1.61087 -1.49608 -0.25206 -0.956804 -0.144884 + -0.958178 1.58084 -1.55326 -0.318905 -0.928741 -0.189051 + -1.13874 1.64637 -1.84257 -0.734216 -0.678743 -0.0152977 + -1.10131 1.61933 -1.80392 -0.427943 -0.902582 -0.0470206 + -1.11409 1.62372 -1.75273 -0.461266 -0.886452 0.037892 + -1.15152 1.65076 -1.79137 -0.574764 -0.817688 -0.032139 + -1.13426 1.63956 -1.72157 -0.589242 -0.802918 0.0900953 + -1.1511 1.65248 -1.76974 -0.722256 -0.688154 0.069209 + -1.13384 1.64128 -1.69995 -0.387328 -0.920801 0.0458632 + -1.05968 1.60678 -1.84059 -0.360312 -0.931784 -0.0441978 + -1.00982 1.58762 -1.7782 -0.172767 -0.983746 -0.0489417 + -1.05145 1.60017 -1.74154 -0.306909 -0.949764 0.0612722 + -1.07246 1.61012 -1.71817 -0.354464 -0.922949 0.150067 + -1.09263 1.62597 -1.68702 -0.359884 -0.924163 0.128086 + -1.12108 1.64027 -1.948 -0.409749 -0.910838 -0.0498061 + -1.04635 1.60183 -1.86122 -0.390813 -0.919916 -0.0319293 + -1.04089 1.60615 -1.4299 0.101406 0.631667 0.768579 + -0.980616 1.61008 -1.44111 -0.759623 0.365778 0.537754 + -0.981012 1.60939 -1.42411 -0.943301 0.0838024 -0.321186 + -0.999654 1.61778 -1.41144 -0.58114 -0.451522 -0.677056 + -1.00949 1.57435 -1.40242 0.0864199 0.698891 0.709988 + -1.06695 1.60474 -1.35485 -0.911111 0.180789 -0.370394 + -1.07344 1.61946 -1.31076 -0.94261 0.333636 -0.0131445 + -1.08036 1.67959 -1.33931 -0.953034 -0.0079723 0.30276 + -1.09514 1.77971 -1.37112 -0.952395 -0.141753 0.269905 + -1.0847 1.60428 -1.30646 0.344914 0.873386 0.343847 + -1.05967 1.62708 -1.22854 -0.517706 0.616087 0.593648 + -1.05056 1.6794 -1.29078 -0.623353 0.434418 0.650163 + -1.05747 1.73953 -1.31933 -0.608519 -0.141346 0.78085 + -1.05982 1.83094 -1.29605 -0.863655 -0.0959455 0.494869 + -1.07093 1.61181 -1.2243 -0.555215 0.698731 0.451122 + -1.04195 1.61112 -1.2181 0.0177145 -0.558759 0.829141 + -1.03127 1.62727 -1.22128 0.294438 0.350709 0.888993 + -1.02216 1.67959 -1.28351 -0.163998 0.766711 0.620693 + -1.09388 1.61566 -1.27697 0.931842 -0.292028 -0.215386 + -1.07612 1.61612 -1.32537 0.630763 -0.740881 0.230724 + -1.0649 1.61489 -1.27083 -0.0609777 -0.997269 -0.0416578 + -1.07093 1.61181 -1.2243 -0.0100838 -0.997679 -0.0673415 + -0.970943 1.60308 -1.27899 0.24613 -0.83141 0.498173 + -0.960261 1.61924 -1.28217 0.0509955 -0.433233 0.899838 + -1.02216 1.67959 -1.28351 0.562905 0.590162 0.578659 + -1.06695 1.60474 -1.35485 0.715576 -0.465775 0.52058 + -1.06309 1.61663 -1.34844 0.250124 -0.915138 0.316164 + -1.05514 1.61691 -1.31914 -0.152138 -0.986159 0.0659096 + -1.06817 1.61632 -1.29611 0.151025 -0.985457 -0.0778796 + -0.974216 1.60452 -1.30428 -0.15388 -0.967894 0.198749 + -0.999654 1.61778 -1.41144 0.606177 -0.521017 0.600908 + -1.02216 1.67959 -1.28351 -0.230206 0.395678 0.889069 + -1.03906 1.60437 -1.33602 -0.423485 -0.860589 0.282926 + -0.958142 1.59198 -1.32116 -0.0682836 -0.826814 0.558315 + -1.04444 1.60832 -1.36106 -0.674257 -0.633505 -0.379538 + -1.00451 1.56971 -1.36038 -0.38392 -0.868722 0.312933 + -0.962374 1.55825 -1.37734 -0.0735577 -0.961427 0.265043 + -1.00989 1.57366 -1.38542 -0.7333 -0.633382 -0.247181 + -0.962586 1.55538 -1.43136 -0.177867 -0.982673 -0.052131 + -0.870008 1.5521 -1.46128 -0.103584 -0.994415 -0.020232 + -0.834993 1.54703 -1.48831 -0.0902 -0.99277 0.0791909 + -1.00949 1.57435 -1.40242 -0.773667 0.633547 0.00764688 + -1.00949 1.57435 -1.40242 -0.365035 -0.930807 0.0186478 + -0.91682 1.56909 -1.55411 -0.231713 -0.95774 -0.170419 + -0.881805 1.56411 -1.58109 -0.266134 -0.960008 -0.0869348 + -0.822492 1.53543 -1.53941 -0.1957 -0.977601 0.0774421 + -0.776871 1.53666 -1.55074 0.326105 -0.918971 0.221692 + -0.854296 1.57473 -1.65427 -0.126971 -0.986502 -0.103406 + -0.853425 1.57096 -1.63175 -0.183366 -0.937702 -0.295113 + -0.868117 1.5639 -1.61192 -0.556573 -0.663322 -0.500231 + -0.808803 1.53514 -1.5703 -0.14933 -0.976427 -0.155857 + -0.766598 1.5343 -1.58024 0.238431 -0.971158 0.00170524 + -0.97416 1.59288 -1.59131 -0.252404 -0.962905 -0.0954239 + -0.984773 1.59709 -1.6334 -0.217725 -0.976008 0.00221638 + -0.983652 1.59513 -1.65601 -0.23537 -0.962867 0.132239 + -0.962637 1.58526 -1.67932 -0.159118 -0.978441 0.131661 + -0.90641 1.58098 -1.68711 -0.0566384 -0.997395 -0.0446586 + -0.862303 1.57804 -1.67641 -0.0813725 -0.990691 -0.109134 + -0.768767 1.56808 -1.72116 -0.0529709 -0.996773 -0.060315 + -0.751176 1.56748 -1.67232 -0.0502469 -0.994098 -0.0961447 + -0.750306 1.56371 -1.64979 -0.234412 -0.853581 -0.465242 + -1.06806 1.61523 -1.58262 -0.280695 -0.959771 -0.00704812 + -1.07867 1.61952 -1.62466 -0.260978 -0.963437 -0.0606632 + -1.09376 1.62793 -1.66441 -0.262901 -0.963972 -0.0405197 + -1.11045 1.62969 -1.61588 -0.571358 -0.81851 0.0599255 + -1.11876 1.63288 -1.66019 -0.474541 -0.880086 -0.0161062 + -0.95359 1.58342 -1.78594 -0.0391885 -0.990612 -0.130963 + -0.827228 1.58351 -1.77167 -0.0109673 -0.98491 -0.172719 + -0.783121 1.58057 -1.76098 -0.174831 -0.955985 -0.235641 + -0.776774 1.5714 -1.74331 -0.194397 -0.953847 -0.228879 + -0.962247 1.59901 -1.84773 0.0180731 -0.944338 -0.32848 + -0.835885 1.59909 -1.83347 0.0936741 -0.928146 -0.360237 + -0.782991 1.61007 -1.84089 0.0279097 -0.867559 -0.49655 + -0.729379 1.60414 -1.84242 -0.230313 -0.788832 -0.569824 + -0.740212 1.58506 -1.80657 -0.219807 -0.880026 -0.420997 + -1.01211 1.60125 -1.8584 0.0253295 -0.951035 -0.308043 + -0.940837 1.64332 -1.93428 0.0752452 -0.864885 -0.496299 + -0.887944 1.6543 -1.9417 0.134328 -0.844154 -0.518999 + -0.750584 1.64268 -1.87757 0.0117227 -0.799987 -0.599903 + -1.04635 1.60183 -1.86122 0.00874517 -0.947906 -0.318429 + -1.03521 1.60812 -1.87612 0.0296281 -0.902393 -0.429895 + -0.990703 1.64564 -1.9449 0.0524718 -0.871027 -0.488424 + -0.891333 1.6773 -1.97893 0.153092 -0.871262 -0.466332 + -0.753973 1.66567 -1.91479 0.0224135 -0.87181 -0.489332 + -0.707074 1.6674 -1.92818 -0.566941 -0.767826 -0.298363 + -0.692433 1.63726 -1.94318 -0.910186 -0.408722 -0.0671495 + -1.01425 1.66841 -1.98473 0.0153449 -0.852979 -0.52172 + -1.01888 1.6804 -2.0049 0.0210473 -0.855876 -0.516753 + -1.02739 1.69411 -2.02766 -0.0805906 -0.92199 -0.378735 + -1.01531 1.69599 -2.04791 -0.265431 -0.96072 -0.0810168 + -0.985795 1.68354 -2.06893 -0.213297 -0.97662 0.0267923 + -0.937936 1.68407 -2.04925 0.176096 -0.979275 -0.100049 + -0.906403 1.69126 -2.01231 0.475863 -0.795416 -0.375323 + -0.796615 1.70206 -1.98982 0.055276 -0.895607 -0.441399 + -1.08214 1.67944 -1.99584 0.0674367 -0.855493 -0.513404 + -1.10601 1.7037 -2.03866 0.112258 -0.830651 -0.545359 + -1.11452 1.7175 -2.06136 0.160372 -0.807428 -0.567751 + -1.11534 1.73461 -2.08659 -0.0194852 -0.90383 -0.427449 + -1.10326 1.7364 -2.1069 -0.313409 -0.931672 -0.183744 + -1.14514 1.73694 -2.10343 0.788842 -0.485393 -0.376992 + -1.14596 1.75405 -2.12866 0.537945 -0.790808 -0.291955 + -1.06691 1.72479 -2.14278 -0.420761 -0.901761 -0.0989347 + -1.03739 1.71233 -2.1638 -0.453159 -0.888195 -0.0758787 + -1.14801 1.74733 -2.15642 0.998327 0.0327699 -0.0476409 + -1.05909 1.73242 -2.2304 -0.48969 -0.858861 -0.150206 + -0.985578 1.68671 -2.19063 -0.186364 -0.973788 -0.1304 + -0.937719 1.68725 -2.17096 0.199297 -0.973203 -0.114701 + -0.845878 1.71426 -2.08535 0.311308 -0.944806 -0.102125 + -0.814345 1.72146 -2.04842 0.197049 -0.971279 -0.133371 + -0.919204 1.70335 -2.22546 0.319808 -0.906084 -0.277009 + -0.827363 1.73046 -2.13981 0.418124 -0.89073 -0.178248 + -0.780045 1.75154 -2.13453 0.273036 -0.904565 -0.327434 + -0.750666 1.75461 -2.12943 -0.109871 -0.895508 -0.431271 + -0.765201 1.73346 -2.0804 -0.0347549 -0.962335 -0.269637 + -0.816523 1.76973 -2.26183 0.376997 -0.908085 -0.182357 + -0.729958 1.78796 -2.20421 0.253118 -0.927286 -0.275812 + -0.700579 1.79093 -2.19915 -0.743828 -0.298767 -0.597879 + -0.804428 1.78088 -2.30394 0.335722 -0.941955 -0.00349396 + -0.717864 1.79902 -2.24636 0.371396 -0.923487 -0.0961088 + -0.693261 1.81091 -2.24576 -0.233866 -0.954053 -0.187325 + -0.685856 1.80393 -2.25027 -0.984765 -0.124044 -0.121863 + -0.705589 1.77883 -2.23698 -0.781478 0.616823 -0.093918 + -0.750666 1.75461 -2.12943 -0.696716 0.704855 -0.133289 + -0.731575 1.796 -2.30292 0.322661 -0.946137 0.0267417 + -0.706973 1.80789 -2.30233 -0.477063 -0.826336 0.299298 + -0.709495 1.8001 -2.31164 -0.0983555 -0.908419 0.406326 + -0.689605 1.80637 -2.26988 -0.208619 -0.976405 0.0557856 + -0.685589 1.8085 -2.33898 -0.349439 -0.935665 -0.0492316 + -0.689338 1.81093 -2.35859 0.66566 -0.72292 -0.185157 + -0.736939 1.79227 -2.32506 0.100539 -0.889494 0.445749 + -0.739461 1.78448 -2.33438 0.20031 -0.942322 0.268152 + -0.705839 1.79564 -2.33571 0.454571 -0.89069 0.00599458 + -0.741214 1.78393 -2.34563 0.217153 -0.971784 -0.0920932 + -0.707916 1.79867 -2.37156 0.466936 -0.869884 -0.158975 + -0.676915 1.83214 -2.40552 0.77628 -0.628439 -0.0495339 + -0.678992 1.83517 -2.44137 0.699189 -0.706441 -0.109891 + -0.625186 1.8998 -2.49551 0.836443 -0.481083 0.26253 + -0.645874 1.8849 -2.45391 0.899239 -0.353088 0.258259 + -0.658297 1.8637 -2.40698 0.896016 -0.436693 0.0803439 + -0.67171 1.85164 -2.3627 0.933788 -0.343174 0.101344 + -0.685589 1.8085 -2.33898 0.886894 -0.406265 -0.219929 + -0.601053 1.95609 -2.44482 0.761608 -0.602336 0.239047 + -0.623155 1.94846 -2.40779 0.806442 -0.557092 0.198242 + -0.636569 1.9364 -2.36351 0.851163 -0.477634 0.217687 + -0.580364 1.971 -2.48643 0.774992 -0.596831 0.207798 + -0.534165 2.03217 -2.44998 0.710168 -0.694223 0.117115 + -0.539496 2.03274 -2.40997 0.665053 -0.728829 0.162829 + -0.561598 2.0251 -2.37295 0.643269 -0.738155 0.203301 + -0.600397 1.91406 -2.54321 0.837195 -0.502207 0.216549 + -0.555263 1.99129 -2.51618 0.778008 -0.605523 0.167467 + -0.509064 2.05246 -2.47973 0.713234 -0.691458 0.114813 + -0.453323 2.10837 -2.38597 0.689644 -0.720919 0.068306 + -0.458653 2.10904 -2.34592 0.599352 -0.800315 0.0164888 + -0.643531 1.86852 -2.48694 0.854673 -0.416059 0.31053 + -0.618742 1.88277 -2.53462 0.860034 -0.428077 0.277654 + -0.605994 1.89588 -2.56593 0.853302 -0.506708 0.122973 + -0.580252 1.93347 -2.58302 0.835735 -0.54771 0.0394952 + -0.661911 1.8537 -2.45587 0.855295 -0.417418 0.306975 + -0.690866 1.79182 -2.28809 -0.917138 0.398523 -0.00612391 + -0.685589 1.8085 -2.33898 -0.93944 0.342393 0.0148036 + -1.15072 1.77302 -2.19552 -0.347946 -0.908119 -0.232924 + -0.702535 1.66783 -1.99233 -0.883527 -0.463758 -0.0656402 + -0.716526 1.69944 -2.03547 0.0796162 -0.864748 -0.495855 + -0.749716 1.7037 -2.00326 -0.218345 -0.913923 -0.342155 + -0.762541 1.72793 -2.05523 -0.160226 -0.946201 -0.281124 + -0.729351 1.72366 -2.08744 0.19206 -0.878248 -0.437942 + -0.680883 1.77302 -2.07412 0.766567 -0.468225 -0.439476 + -0.702535 1.66783 -1.99233 0.656057 -0.561386 -0.504416 + -0.811685 1.71602 -2.0232 0.119001 -0.934931 -0.334279 + -0.734341 1.74788 -2.13459 0.138231 -0.865202 -0.481993 + -0.695709 1.8117 -2.16432 0.854791 -0.478307 -0.201384 + -0.690719 1.78757 -2.11712 0.789548 -0.503589 -0.35073 + -0.719806 1.76903 -2.18362 0.677607 -0.735353 0.0102454 + -0.698701 1.8166 -2.21121 0.923499 -0.37738 0.0688019 + -0.65072 1.91757 -2.18509 0.869658 -0.479051 -0.119186 + -0.637963 1.92843 -2.1431 0.841574 -0.48477 -0.238224 + -0.628127 1.91379 -2.10014 0.852506 -0.428285 -0.299677 + -0.705589 1.77883 -2.23698 0.927225 -0.331085 0.175035 + -0.684484 1.8263 -2.26462 0.93937 -0.324291 0.111438 + -0.653712 1.92238 -2.23203 0.881598 -0.461787 -0.0976589 + -0.589979 2.01155 -2.22668 0.732055 -0.674682 -0.0943325 + -0.588229 2.00932 -2.18261 0.757157 -0.649671 -0.0681215 + -0.575472 2.02009 -2.14067 0.732037 -0.674041 -0.0989495 + -0.676987 1.83497 -2.31182 0.960058 -0.274072 0.0563378 + -0.658385 1.92633 -2.27507 0.913671 -0.405278 -0.0308882 + -0.594651 2.01542 -2.26977 0.701129 -0.709864 -0.0671595 + -0.690866 1.79182 -2.28809 0.961302 -0.21348 0.174139 + -0.650887 1.9349 -2.32232 0.889135 -0.429839 0.15709 + -0.605655 2.0055 -2.31019 0.727177 -0.679353 0.0984513 + -0.499475 2.08507 -2.24461 0.519983 -0.85397 0.0187846 + -0.685589 1.8085 -2.33898 0.951615 -0.307286 -0.00203496 + -0.591336 2.007 -2.35139 0.682898 -0.660177 0.312756 + -0.510478 2.07515 -2.28504 0.570976 -0.817267 0.077858 + -0.48074 2.09326 -2.3066 0.555463 -0.8312 0.0238116 + -0.417248 2.12441 -2.19516 0.405727 -0.909644 -0.0890718 + -0.508241 2.08118 -2.19707 0.553133 -0.83281 -0.0217055 + -0.38386 2.15237 -2.27137 0.475121 -0.873301 -0.107726 + -0.405947 2.13659 -2.23205 0.470782 -0.87426 -0.118463 + -0.33785 2.1411 -2.11065 0.374059 -0.877031 -0.30149 + -0.338236 2.127 -2.07943 0.277855 -0.912856 -0.29915 + -0.426015 2.12053 -2.14762 0.3304 -0.936474 -0.117699 + -0.426257 2.13531 -2.39723 0.677107 -0.732586 -0.0696004 + -0.364172 2.16698 -2.30229 0.546318 -0.820226 -0.169608 + -0.315156 2.1684 -2.17734 0.375775 -0.891915 -0.251557 + -0.326549 2.15319 -2.1476 0.351074 -0.903235 -0.246807 + -0.481998 2.07939 -2.49098 0.734128 -0.678113 0.0349072 + -0.407235 2.16024 -2.42981 0.587936 -0.808522 -0.0249545 + -0.34515 2.19191 -2.33487 0.37602 -0.920074 -0.109878 + -0.295469 2.1831 -2.2082 0.186945 -0.969252 -0.160008 + -0.535117 2.0107 -2.556 0.793361 -0.603424 0.0803571 + -0.465729 2.09545 -2.52819 0.729711 -0.68172 0.052724 + -0.460517 2.0966 -2.57438 0.675915 -0.725058 0.13202 + -0.402023 2.16139 -2.476 0.480139 -0.866346 0.137519 + -0.36698 2.17379 -2.47308 0.181389 -0.959584 0.215165 + -0.518848 2.02675 -2.59321 0.777784 -0.623559 0.0789044 + -0.501167 2.04318 -2.63445 0.722833 -0.674191 0.151589 + -0.440632 2.10339 -2.61014 0.43435 -0.824677 0.362282 + -0.405589 2.11579 -2.60722 0.267636 -0.902011 0.338745 + -0.592266 1.91999 -2.61288 0.809897 -0.583216 -0.0626508 + -0.398513 3.98461 -2.03812 -0.535311 0.490147 -0.687894 + -0.30799 4.16202 -1.9874 -0.790491 0.519779 -0.323965 + -0.276587 4.16497 -2.0711 -0.739835 0.556714 -0.377773 + -0.282869 4.08583 -2.16703 -0.712881 0.566542 -0.413317 + -0.326369 4.14841 -1.97002 -0.611097 0.596423 -0.520423 + -0.250851 4.29974 -1.89373 -0.693572 0.66508 -0.276816 + -0.261313 4.23416 -1.99374 -0.730399 0.592907 -0.339084 + -0.21748 4.22262 -2.07876 -0.574808 0.683907 -0.449296 + -0.355553 4.12096 -1.97949 -0.460189 0.563263 -0.686266 + -0.292218 4.25662 -1.87365 -0.722555 0.559325 -0.406287 + -0.26923 4.28621 -1.8763 -0.723482 0.579816 -0.374683 + -0.205029 4.34236 -1.89375 -0.550503 0.718014 -0.425915 + -0.215492 4.27678 -1.99376 -0.549715 0.717863 -0.427183 + -0.401211 4.07733 -1.95971 -0.733835 0.549341 -0.399638 + -0.337876 4.21298 -1.85386 -0.72149 0.581723 -0.375568 + -0.285288 4.38676 -1.73806 -0.698805 0.489042 -0.522025 + -0.237996 4.41396 -1.75877 -0.641133 0.550732 -0.534455 + -0.501226 3.80578 -2.03256 0.573652 -0.352441 -0.739398 + -0.719851 2.09289 -0.351357 -0.980183 -0.11691 -0.159915 + -0.733426 2.16917 -0.325479 -0.422968 -0.872168 0.245806 + -0.690305 2.10063 -0.539561 -0.985224 -0.00356063 -0.171232 + -0.665292 2.18573 -0.653752 -0.867224 -0.469909 0.164646 + -0.718769 2.16766 -0.736671 -0.248566 -0.784045 0.56876 + -0.680219 2.19795 -0.522923 -0.979217 -0.152937 -0.133212 + -0.708907 2.22741 -0.610553 -0.547199 -0.797935 0.25273 + -0.762384 2.20935 -0.693472 0.197273 -0.844076 0.498618 + -0.797269 2.10626 -0.78912 0.578752 -0.634939 0.51176 + -0.775359 1.95469 -0.938779 0.588975 -0.498634 0.635982 + -0.77872 2.17722 -0.248824 -0.694277 -0.696737 -0.180378 + -0.796669 2.22433 -0.213417 -0.94676 -0.136116 -0.291749 + -0.698169 2.24505 -0.487516 -0.871912 -0.48212 -0.0856091 + -0.754293 2.27651 -0.547195 0.0832475 -0.964228 0.251662 + -0.830699 2.16795 -0.637373 0.744345 -0.603115 0.286709 + -0.865584 2.06487 -0.733021 0.828694 -0.431946 0.355933 + -0.829931 2.21614 -0.096232 -0.996534 -0.0432626 -0.071053 + -0.743554 2.29407 -0.424208 -0.314497 -0.942117 -0.116222 + -0.776816 2.28588 -0.307023 0.582122 -0.808527 0.0861305 + -0.793376 2.25035 -0.483283 0.723206 -0.681119 0.114231 + -0.806663 2.18697 -0.024113 -0.319221 -0.938301 -0.133004 + -0.833448 2.18638 0.014919 -0.787728 -0.608449 -0.096299 + -0.830529 2.21353 -0.017905 -0.998984 -0.0415037 -0.0175808 + -0.776816 2.28588 -0.307023 -0.968634 -0.196423 -0.152207 + -0.761369 2.17901 -0.100718 -0.104107 -0.994115 0.0299452 + -0.764288 2.1663 0.096893 0.0609571 -0.994559 -0.0844741 + -0.791073 2.16562 0.135874 -0.0875311 -0.989017 -0.119097 + -0.834045 2.18376 0.093254 -0.844415 0.116963 0.522764 + -0.729833 2.18652 0.061879 0.227542 -0.970325 -0.0818157 + -0.690305 2.10063 -0.539561 0.45234 -0.818888 0.353285 + -0.719851 2.09289 -0.351357 -0.980593 -0.190385 0.0468075 + -0.639633 2.19037 0.066806 -0.0936961 -0.995599 -0.0018826 + -0.649184 2.18275 0.132395 0.050891 -0.975688 -0.213172 + -0.683639 2.16254 0.167409 -0.136421 -0.956444 0.258077 + -0.67044 2.19247 0.209165 0.33403 -0.919375 0.207781 + -0.757773 2.14908 0.186115 0.485313 -0.695055 -0.530443 + -0.69311 2.17527 0.216759 0.527183 -0.447327 -0.722479 + -0.544957 2.17091 0.038111 0.107141 -0.970295 -0.216904 + -0.554508 2.1632 0.10366 0.00154227 -0.998902 0.0468303 + -0.556535 2.1815 0.171369 0.115546 -0.918586 0.377952 + -0.543336 2.21135 0.213068 0.0632389 -0.718486 0.692661 + -0.450826 2.24422 -0.055273 0.222567 -0.824429 -0.520366 + -0.452919 2.19833 0.021021 0.28435 -0.89334 -0.347977 + -0.452089 2.18241 0.091793 0.274449 -0.961493 -0.0144336 + -0.454116 2.2007 0.159503 0.179526 -0.951409 0.250184 + -0.35091 2.27944 -0.059467 0.124402 -0.87549 -0.46695 + -0.346556 2.25176 0.008467 0.169659 -0.931193 -0.322639 + -0.345726 2.23594 0.079281 0.245021 -0.955129 -0.166414 + -0.351772 2.22323 0.157091 0.26965 -0.958692 0.0905479 + -0.237927 2.33918 -0.172751 -0.370569 -0.680571 -0.632061 + -0.248223 2.30299 -0.114056 -0.209345 -0.868011 -0.450256 + -0.24387 2.27531 -0.046122 -0.364768 -0.565263 -0.739879 + -0.211494 2.26453 -0.064842 -0.471636 -0.774043 -0.422395 + -0.247164 2.25438 0.014126 -0.0198724 -0.992017 -0.124527 + -0.25074 2.40196 -0.217091 -0.402341 -0.603263 -0.688618 + -0.086589 2.32683 -0.287961 -0.549091 -0.661287 -0.511075 + -0.096886 2.29063 -0.229258 -0.489414 -0.719265 -0.493084 + -0.06451 2.27976 -0.248027 -0.42926 -0.740469 -0.517148 + -0.125703 2.38312 -0.315846 -0.585852 -0.625718 -0.515029 + -0.048528 2.35557 -0.371727 -0.710127 -0.64505 -0.282189 + -0.009414 2.2992 -0.343893 -0.586879 -0.685003 -0.431676 + -0.142339 2.44172 -0.358958 -0.649364 -0.575581 -0.497024 + -0.061399 2.38566 -0.424453 -0.783583 -0.558522 -0.272122 + -0.010689 2.2915 -0.381352 -0.456529 -0.844607 -0.279678 + -0.010689 2.2749 -0.3052 -0.635906 -0.734806 -0.235975 + -0.162727 2.49951 -0.404448 -0.677746 -0.547546 -0.490769 + -0.081787 2.44345 -0.469944 -0.817378 -0.506353 -0.274773 + -0.02356 2.3215 -0.43412 -0.580548 -0.800358 -0.149635 + 0.02356 2.3215 -0.43412 0.564381 -0.814872 -0.132127 + 0.010678 2.29141 -0.381402 0.488746 -0.844055 -0.220678 + -0.167976 2.5567 -0.450297 -0.717515 -0.45609 -0.526455 + -0.089769 2.48429 -0.520287 -0.85363 -0.409796 -0.321533 + -0.02356 2.31923 -0.513395 -0.481353 -0.837175 -0.259687 + 0.02356 2.31923 -0.513395 0.472986 -0.838855 -0.269458 + -0.180935 2.62069 -0.484529 -0.69222 -0.512026 -0.508587 + -0.102728 2.54819 -0.55457 -0.840253 -0.434519 -0.324297 + -0.031542 2.36016 -0.563687 -0.5556 -0.662305 -0.502654 + 0.031537 2.36008 -0.563737 0.554929 -0.662304 -0.503396 + -0.181846 2.66385 -0.532888 -0.725622 -0.652622 -0.218076 + -0.100078 2.57141 -0.606185 -0.823751 -0.557597 -0.102567 + -0.031542 2.40605 -0.616164 -0.56558 -0.684565 -0.459881 + 0.031537 2.40605 -0.616164 0.566461 -0.684378 -0.459075 + -0.154947 2.62717 -0.609756 -0.800089 -0.579183 -0.156221 + -0.073179 2.53464 -0.683094 -0.88261 -0.41589 -0.219168 + -0.028892 2.42927 -0.667781 -0.542946 -0.77979 -0.31167 + 0.02889 2.42927 -0.667781 0.543045 -0.779693 -0.311739 + -0.211292 2.9129 -0.796651 -0.738777 -0.513833 -0.436101 + -0.108198 2.80586 -0.905062 -0.843288 -0.391336 -0.368404 + -0.059065 2.74121 -0.955474 -0.878553 -0.347436 -0.327769 + -0.028892 2.44778 -0.725853 -0.752265 -0.65779 -0.0375527 + 0.02889 2.44778 -0.725853 0.762213 -0.647315 0.00380121 + -0.196517 3.1695 -1.0593 -0.560707 -0.505592 -0.655732 + -0.06391 3.39357 -1.63559 -0.849924 -0.334386 -0.407204 + -0.014777 3.32891 -1.68601 -0.390802 -0.120575 -0.912544 + -0.014777 2.65435 -0.998232 -0.936183 -0.257571 -0.239202 + 0.016514 2.25648 -0.879903 -0.982725 -0.119354 -0.14144 + -0.214432 3.22701 -1.07951 -0.116923 -0.655085 -0.746454 + -0.049135 3.83237 -1.95563 -0.465604 -0.380007 -0.799254 + -0.049135 3.65017 -1.89825 -0.594469 -0.345198 -0.726254 + 0.014767 3.32891 -1.68601 0.348821 -0.516646 -0.781921 + -0.014777 2.65435 -0.998232 0 -0.46053 -0.887644 + -0.120811 3.88058 -1.97892 0.38784 -0.755631 -0.527827 + -0.067051 3.88988 -1.97584 -0.0901157 -0.735746 -0.671236 + 0.049134 3.83237 -1.95562 0.497791 -0.480955 -0.721725 + 0.049134 3.65017 -1.89824 0.594319 -0.342208 -0.72779 + -0.084071 4.11489 -2.27757 0.139527 -0.330621 -0.933393 + -0.030311 4.12419 -2.27447 0.0489921 -0.443205 -0.89508 + 0.030311 4.1242 -2.27448 -0.0201643 -0.424243 -0.905324 + 0.067051 3.88988 -1.97584 0.388566 -0.705807 -0.592329 + 0.196516 3.1695 -1.0593 0.560764 -0.505454 -0.65579 + -0.144946 4.07823 -2.28167 0.276653 -0.300278 -0.912851 + -0.0953 4.14486 -2.27287 -0.104897 0.290836 -0.951005 + -0.030311 4.15293 -2.27666 -0.0222827 0.197133 -0.980124 + 0.030311 4.15293 -2.27666 0.0390194 0.181315 -0.982651 + -0.156175 4.10828 -2.27693 -0.175556 0.314576 -0.932857 + -0.096826 4.17112 -2.26095 -0.224933 0.570322 -0.790024 + -0.031836 4.17919 -2.26473 -0.0592718 0.561371 -0.825439 + 0.031829 4.17919 -2.26474 0.0604002 0.562218 -0.824781 + 0.095301 4.14486 -2.27287 0.0884889 0.282878 -0.955065 + -0.165785 4.13128 -2.26075 -0.413641 0.56131 -0.716821 + -0.094081 4.1974 -2.23568 -0.268107 0.738435 -0.618735 + -0.031836 4.20574 -2.23932 -0.0690251 0.755118 -0.651945 + 0.031829 4.20566 -2.23938 0.0701433 0.754455 -0.652593 + -0.163041 4.15757 -2.23549 -0.498186 0.665898 -0.555329 + -0.155107 4.20838 -2.17409 -0.489497 0.72553 -0.483735 + -0.090118 4.23945 -2.17751 -0.274891 0.810832 -0.516707 + -0.027872 4.2477 -2.1812 -0.0695179 0.832476 -0.549683 + 0.027872 4.2477 -2.1812 0.0698179 0.832529 -0.549564 + -0.231697 4.09259 -2.23614 -0.633747 0.603666 -0.483686 + -0.223763 4.1434 -2.17474 -0.629403 0.628153 -0.457467 + -0.142402 4.26511 -2.08456 -0.427982 0.781915 -0.453255 + -0.077413 4.2961 -2.08803 -0.270787 0.838045 -0.473661 + 0.016514 2.25648 -0.879903 0 -0.627193 0.778864 + -0.140414 4.31927 -1.99955 -0.381968 0.809692 -0.445532 + -0.077222 4.33603 -2.01459 -0.240827 0.869099 -0.432053 + -0.027872 4.30445 -2.0877 -0.070864 0.86523 -0.496341 + 0.027872 4.30445 -2.0877 0.0711782 0.865085 -0.49655 + -0.149779 4.33989 -1.94548 -0.343558 0.828861 -0.44154 + -0.086587 4.35656 -1.96056 -0.253029 0.849795 -0.462412 + -0.027682 4.3443 -2.01431 -0.0764981 0.897563 -0.434198 + 0.027676 4.34431 -2.01432 0.0734926 0.896408 -0.437094 + -0.191334 4.41115 -1.80271 -0.408517 0.694829 -0.591884 + -0.136083 4.4086 -1.85448 -0.373955 0.758172 -0.534166 + -0.090758 4.42195 -1.861 -0.243877 0.790964 -0.561159 + -0.027682 4.36549 -1.96582 -0.0864853 0.875305 -0.475774 + 0.027676 4.3655 -1.96584 0.0836663 0.876806 -0.473509 + -0.215009 4.44355 -1.76142 -0.516817 0.680783 -0.519071 + -0.135694 4.54426 -1.67186 -0.238937 0.724962 -0.646018 + -0.090369 4.55762 -1.67839 -0.247756 0.783397 -0.570005 + -0.031852 4.43088 -1.86627 -0.0892357 0.813982 -0.573994 + 0.031855 4.43088 -1.86627 0.0878237 0.813034 -0.575554 + -0.159369 4.57666 -1.63058 0.0128266 0.522972 -0.852254 + -0.144635 4.68977 -1.56729 0.330427 0.354524 -0.874717 + -0.088188 4.69572 -1.55799 0.0258261 0.351729 -0.935746 + -0.078099 4.62054 -1.59598 0.0842606 0.606381 -0.790698 + -0.031852 4.51372 -1.75675 -0.104115 0.793682 -0.599357 + -0.209419 4.58301 -1.66818 0.0254648 0.475088 -0.87957 + -0.194686 4.69612 -1.60488 0.10529 0.409634 -0.906153 + -0.147078 4.80597 -1.54415 0.121547 0.297353 -0.946999 + -0.090631 4.812 -1.5348 0.0247308 0.225096 -0.974023 + -0.256711 4.55582 -1.64747 -0.70818 0.409758 -0.57496 + -0.237951 4.66941 -1.59862 -0.620995 0.363117 -0.69463 + -0.203348 4.79753 -1.55013 -0.131802 0.363286 -0.922308 + -0.310484 4.52313 -1.57026 -0.802408 0.376124 -0.463327 + -0.291724 4.63672 -1.52141 -0.748005 0.226768 -0.62375 + -0.246614 4.77073 -1.54392 -0.517528 0.212484 -0.828864 + -0.31653 4.85085 -1.50488 -0.300161 0.0195752 -0.953688 + -0.231399 4.89724 -1.51704 -0.0665514 0.275791 -0.958911 + -0.336983 4.39134 -1.6486 -0.765878 0.441601 -0.467353 + -0.388448 4.37418 -1.57967 -0.742577 0.461037 -0.485823 + -0.361948 4.50597 -1.50133 -0.717274 0.342467 -0.606823 + -0.328191 4.64972 -1.48851 -0.549166 0.0699804 -0.832778 + -0.283081 4.78373 -1.51102 -0.575292 -0.107422 -0.810864 + -0.31438 4.29125 -1.78103 -0.86387 0.436561 -0.251282 + -0.366075 4.29584 -1.69158 -0.73677 0.496339 -0.459149 + -0.417436 4.27618 -1.63193 -0.731863 0.493108 -0.470341 + -0.447268 4.41163 -1.46274 -0.705631 0.34455 -0.619169 + -0.382639 4.23564 -1.74191 -0.710522 0.567209 -0.416452 + -0.434 4.21608 -1.68223 -0.776324 0.51782 -0.359422 + -0.484016 4.13257 -1.67439 -0.891224 0.375442 -0.254486 + -0.476256 4.31372 -1.51495 -0.859402 0.39074 -0.329773 + -0.406135 4.15745 -1.81468 -0.72814 0.576172 -0.371265 + -0.463537 4.10564 -1.77914 -0.785553 0.522746 -0.331123 + -0.513553 4.02222 -1.77126 -0.876295 0.4747 -0.0822618 + -0.534289 3.94934 -1.71543 -0.909097 0.267691 0.319193 + -0.508511 4.08163 -1.62556 -0.994447 0.0968672 -0.0411247 + -0.461047 4.0245 -1.90301 -0.753345 0.554199 -0.354027 + -0.518448 3.97269 -1.86747 -0.686953 0.644963 -0.33484 + -0.574631 3.9544 -1.82219 -0.746063 0.661437 -0.0767546 + -0.595367 3.88153 -1.76637 -0.744993 0.460924 0.482217 + -0.459077 3.95874 -2.0149 -0.71835 0.447079 -0.533005 + -0.518913 3.90592 -1.95821 -0.654694 0.517844 -0.550647 + -0.581128 3.8813 -1.91798 -0.593882 0.653541 -0.469243 + -0.63731 3.86293 -1.87275 -0.717521 0.660918 -0.219889 + -0.664799 3.81544 -1.7985 -0.745189 0.551675 0.374632 + -0.57649 3.82336 -2.00542 -0.199712 0.443968 -0.873503 + -0.638704 3.79866 -1.96524 -0.571018 0.687658 -0.448404 + -0.705771 3.78952 -1.8924 -0.674436 0.721331 -0.157537 + -0.733259 3.74194 -1.8182 -0.63824 0.657479 0.400462 + -0.620652 3.73389 -2.01265 -0.0117598 0.101754 -0.99474 + -0.705245 3.728 -1.99306 -0.441691 0.630195 -0.638563 + -0.772312 3.71886 -1.92022 -0.594243 0.758329 -0.267978 + -0.834258 3.66848 -1.83855 -0.566494 0.73125 0.379945 + -0.702049 3.68176 -2.02795 -0.0868603 0.26937 -0.959112 + -0.846738 3.62203 -1.9957 -0.435314 0.661417 -0.610761 + -0.910701 3.59059 -1.97905 -0.431854 0.726968 -0.533872 + -0.836274 3.68742 -1.90357 -0.502088 0.861533 -0.0752853 + -0.843542 3.57578 -2.0306 -0.215124 0.570767 -0.792431 + -0.948754 3.51836 -2.04094 -0.304793 0.657604 -0.688955 + -0.969458 3.54005 -2.00651 -0.349924 0.726273 -0.591677 + -0.96066 3.60365 -1.92487 -0.49498 0.849033 -0.184763 + -0.958644 3.58479 -1.8598 -0.478888 0.77011 0.421423 + -0.936293 3.46802 -2.08816 -0.271233 0.618736 -0.737291 + -1.05115 3.46115 -2.05065 -0.260596 0.671883 -0.693299 + -1.07186 3.48275 -2.01626 -0.307229 0.760497 -0.572062 + -1.01942 3.5531 -1.95232 -0.42653 0.804003 -0.414309 + -1.10742 3.52012 -1.86978 -0.317231 0.863952 0.39109 + -0.935497 3.43206 -2.11846 -0.067642 0.560242 -0.825562 + -1.21528 3.4251 -2.03881 -0.132946 0.343208 -0.929803 + -1.15462 3.4633 -1.99157 -0.297732 0.841876 -0.450112 + -1.10218 3.53356 -1.92768 -0.301341 0.938192 -0.170265 + -1.15429 3.37695 -2.03582 -0.298708 -0.215492 -0.929697 + -1.21141 3.39853 -2.0294 -0.114029 -0.2606 -0.958689 + -1.35098 3.38002 -2.02933 -0.0591391 -0.279084 -0.958444 + -1.35475 3.42672 -2.04083 -0.132516 0.383609 -0.913939 + -1.35795 3.44244 -2.01504 -0.114242 0.947434 -0.298861 + -1.21849 3.44081 -2.01302 -0.103024 0.899356 -0.424906 + -1.1188 3.26806 -2.04562 -0.341523 -0.0244298 -0.939556 + -1.28209 3.29816 -2.00954 -0.181955 -0.0719586 -0.98067 + -1.33921 3.31983 -2.00308 -0.0693361 -0.282772 -0.956678 + -1.34711 3.35337 -2.01998 0.010529 -0.386072 -0.922409 + -1.30321 3.226 -2.00016 -0.179517 -0.0636078 -0.981696 + -1.48786 3.25512 -1.9694 -0.125144 -0.239845 -0.962711 + -1.49576 3.28867 -1.9863 -0.131868 -0.287625 -0.948622 + -1.49195 3.33784 -1.99188 -0.265667 -0.144179 -0.953223 + -1.38414 3.14797 -1.98761 -0.127415 -0.00609528 -0.991831 + -1.4767 3.16306 -1.97075 -0.206201 0.0169054 -0.978363 + -1.70089 3.16095 -1.91709 -0.215306 -0.118051 -0.969385 + -1.68929 3.21364 -1.93175 -0.244063 -0.141248 -0.959418 + -1.68549 3.26274 -1.93739 -0.373132 0.133625 -0.918105 + -1.55622 2.89886 -1.96934 -0.187411 0.102336 -0.976936 + -1.68973 3.06898 -1.9184 -0.229259 0.0713814 -0.970745 + -1.8276 3.12336 -1.88178 -0.236696 -0.000425215 -0.971584 + -1.816 3.17597 -1.8965 -0.319094 0.0325694 -0.947163 + -1.81518 3.23462 -1.87768 -0.419443 0.33053 -0.845469 + -1.7707 2.97684 -1.9164 -0.133249 0.200992 -0.970488 + -1.84137 3.0456 -1.89209 -0.156951 0.206904 -0.96569 + -1.90588 3.15745 -1.86043 -0.444964 0.201379 -0.872613 + -1.90506 3.21602 -1.84167 -0.588689 0.37704 -0.715043 + -1.80062 2.79505 -1.96253 -0.133814 0.152216 -0.979247 + -1.8713 2.86373 -1.93829 -0.294856 0.185338 -0.937395 + -1.91965 3.07969 -1.87075 -0.373913 0.193058 -0.907148 + -1.98323 3.03521 -1.84151 -0.656245 0.193747 -0.729249 + -1.75757 2.67228 -1.98008 -0.124107 0.0468761 -0.991161 + -1.90627 2.66502 -1.94612 -0.391631 0.041007 -0.919208 + -1.93488 2.81925 -1.90905 -0.537433 0.129762 -0.833263 + -1.86195 2.54063 -1.95267 -0.284155 -0.0919722 -0.954357 + -1.98576 2.53832 -1.90667 -0.4989 -0.0543889 -0.864951 + -2.03739 2.64602 -1.85741 -0.635439 0.0875217 -0.767175 + -2.066 2.80025 -1.82034 -0.686532 0.126833 -0.715952 + -2.03558 3.02965 -1.78487 -0.723429 0.249492 -0.643743 + -1.82098 2.45495 -1.95305 -0.228883 -0.375661 -0.898049 + -1.94479 2.45264 -1.90706 -0.350374 -0.327981 -0.877307 + -2.05358 2.41321 -1.84278 -0.494072 -0.300003 -0.816021 + -2.1144 2.48689 -1.80179 -0.669233 -0.0502481 -0.741352 + -1.91748 2.39915 -1.88422 -0.207774 -0.650334 -0.730681 + -2.02627 2.35974 -1.81995 -0.176308 -0.659126 -0.731074 + -2.11269 2.29131 -1.74084 -0.260374 -0.68608 -0.679338 + -2.14522 2.32336 -1.74013 -0.58607 -0.341166 -0.734934 + -2.20604 2.39694 -1.69919 -0.702351 -0.10835 -0.703536 + -1.86741 2.36285 -1.84754 -0.0723934 -0.865948 -0.494868 + -1.99787 2.33884 -1.79176 0.0342845 -0.875306 -0.482353 + -2.0843 2.27043 -1.71266 0.357818 -0.920097 -0.159338 + -2.22028 2.2444 -1.62197 -0.315277 -0.83798 -0.44541 + -2.25281 2.27635 -1.62132 -0.622178 -0.432474 -0.652581 + -1.82591 2.34578 -1.80238 0.0589825 -0.99629 -0.0626645 + -1.95637 2.32169 -1.74665 0.180869 -0.983194 -0.0248368 + -2.07981 2.29329 -1.66846 0.498506 -0.787628 0.362124 + -2.19142 2.26339 -1.55927 0.585489 -0.685228 0.433203 + -2.19591 2.24044 -1.60352 0.265559 -0.960946 0.0778554 + -1.62473 2.36295 -1.77832 -0.0650082 -0.893835 0.443659 + -1.79798 2.36518 -1.74398 0.170597 -0.813671 0.55573 + -1.92422 2.34637 -1.7204 0.339186 -0.744728 0.574745 + -2.04766 2.31797 -1.64221 0.368669 -0.738623 0.564374 + -2.09623 2.36604 -1.57067 0.571067 -0.625583 0.531534 + -1.65389 2.43073 -1.67692 -0.124636 -0.739206 0.661847 + -1.78809 2.42361 -1.69979 0.111038 -0.647294 0.754109 + -1.91434 2.40472 -1.67626 0.369514 -0.597183 0.711922 + -1.96291 2.45279 -1.60472 0.453011 -0.483146 0.749234 + -1.55002 2.42859 -1.6506 -0.319291 -0.734046 0.599359 + -1.6553 2.55664 -1.57659 -0.235761 -0.578077 0.781181 + -1.7895 2.54952 -1.59947 0.049477 -0.51376 0.856506 + -1.98412 2.60114 -1.53767 0.425468 -0.355264 0.832325 + -2.19343 2.3614 -1.44902 0.658474 -0.437393 0.612454 + -1.4176 2.48106 -1.51169 -0.572434 -0.533142 0.62296 + -1.53345 2.52886 -1.54308 -0.381702 -0.58713 0.71385 + -1.61261 2.75404 -1.41731 -0.341463 -0.526345 0.778694 + -1.81071 2.69787 -1.53241 -0.0531796 -0.461109 0.885749 + -1.42262 2.64013 -1.379 -0.646269 -0.448759 0.617213 + -1.49076 2.72627 -1.3838 -0.450147 -0.516117 0.728692 + -1.42417 2.85621 -1.25266 -0.456849 -0.454836 0.764469 + -1.6557 2.9089 -1.34153 -0.371355 -0.448269 0.813112 + -1.8538 2.85272 -1.45663 -0.0043441 -0.48191 0.87621 + -1.33952 2.57633 -1.3355 -0.665193 -0.432081 0.608954 + -1.32552 2.6894 -1.25595 -0.644431 -0.334877 0.687435 + -1.35603 2.76998 -1.24792 -0.596201 -0.342642 0.726044 + -1.26461 2.50664 -1.301 -0.751112 -0.319782 0.577556 + -1.25061 2.61971 -1.22144 -0.662114 -0.340955 0.66735 + -1.24715 2.75846 -1.16056 -0.644224 -0.279814 0.711814 + -1.27766 2.83913 -1.15248 -0.656332 -0.213873 0.723524 + -1.26369 2.93221 -1.11991 -0.543691 -0.377198 0.749748 + -1.20022 2.30514 -1.29638 -0.829237 -0.227693 0.510413 + -1.20076 2.44973 -1.23243 -0.807709 -0.211129 0.550483 + -1.18193 2.61173 -1.15402 -0.757177 -0.231489 0.610816 + -1.17847 2.75048 -1.09314 -0.697503 -0.188561 0.691328 + -1.15569 2.85747 -1.04705 -0.648235 -0.178146 0.740307 + -1.15642 2.2665 -1.23506 -0.768634 -0.25871 0.585039 + -1.13711 2.35673 -1.17514 -0.742867 -0.261386 0.6163 + -1.11549 2.42714 -1.11729 -0.705038 -0.26208 0.658965 + -1.17913 2.52014 -1.17457 -0.82744 -0.163809 0.537131 + -1.10261 2.61414 -1.04439 -0.678291 -0.162712 0.716552 + -1.15994 2.16083 -1.28762 -0.779226 -0.245919 0.576481 + -1.07329 2.23459 -1.16719 -0.602811 -0.330372 0.726273 + -1.05398 2.32482 -1.10727 -0.562054 -0.346554 0.750996 + -1.02917 2.41408 -1.05708 -0.520297 -0.309529 0.795916 + -1.09981 2.52255 -1.06495 -0.684803 -0.222119 0.694052 + -1.10748 2.05776 -1.27712 -0.653928 -0.306117 0.691861 + -1.09549 2.15062 -1.22155 -0.626568 -0.318646 0.711251 + -0.964186 2.25183 -1.08325 -0.534239 -0.306893 0.787658 + -0.93618 2.33064 -1.03375 -0.49618 -0.325829 0.804761 + -0.911368 2.41982 -0.983609 -0.422087 -0.240743 0.874005 + -1.12102 1.97167 -1.3234 -0.710353 -0.293973 0.639515 + -1.01448 2.0909 -1.18991 -0.641829 -0.247052 0.725962 + -0.986391 2.16787 -1.13762 -0.615956 -0.299513 0.728622 + -0.937618 2.10507 -1.11184 -0.461012 -0.290509 0.838494 + -0.907448 2.17665 -1.07843 -0.347757 -0.346562 0.871183 + -1.09753 1.87136 -1.35425 -0.816195 -0.192413 0.544796 + -1.02801 2.00471 -1.23623 -0.738019 -0.181504 0.649911 + -0.992937 1.94976 -1.19306 -0.70954 -0.0574575 0.702319 + -0.965703 2.0281 -1.16413 -0.618031 -0.17955 0.765375 + -1.06221 1.92259 -1.27918 -0.889397 0.073742 0.451149 + -1.02713 1.86773 -1.23596 -0.792379 -0.0446357 0.608394 + -0.99815 1.78121 -1.21072 -0.679744 0.0880096 0.72815 + -0.970916 1.85955 -1.1818 -0.64461 0.0236216 0.764147 + -0.944993 1.94571 -1.17164 -0.49636 -0.0377188 0.867297 + -1.03288 1.78952 -1.25311 -0.915521 -0.0604097 0.397709 + -1.01446 1.69188 -1.20979 -0.879753 0.0666659 0.470735 + -1.0114 1.59751 -1.17953 -0.998089 -0.00594584 -0.061504 + -0.995087 1.68693 -1.18041 -0.933843 0.191168 0.30231 + -0.973838 1.76895 -1.17167 -0.930113 0.206864 0.303474 + -1.03052 1.69812 -1.27639 -0.955703 -0.268696 0.120138 + -1.0202 1.61368 -1.22695 -0.951187 -0.250823 -0.179811 + -1.00583 1.52632 -1.17682 -0.909522 -0.337774 -0.242235 + -1.01377 1.61179 -1.12827 -0.966765 0.0807322 0.242585 + -0.995136 1.68804 -1.12174 -0.936915 0.198063 0.288029 + -1.02216 1.67959 -1.28351 -0.884993 -0.448046 0.126656 + -0.994441 1.63158 -1.25995 -0.884773 -0.448254 0.127458 + -0.800745 2.16722 0.143497 -0.266488 -0.953999 -0.13737 + -0.757773 2.14908 0.186115 -0.266484 -0.954 -0.137366 + -0.977225 1.46075 -1.16166 -0.540388 -0.833129 -0.117799 + -1.00821 1.5406 -1.12556 -0.819157 -0.235047 0.523196 + -0.922127 1.44708 -1.17038 -0.25698 -0.513093 -0.818961 + -0.956138 1.59387 -1.09763 -0.188993 -0.184014 0.964583 + -0.989636 1.62409 -1.09438 -0.525167 -0.061513 0.848773 + -0.905604 1.68879 -1.07423 -0.27887 -0.713951 0.642266 + -0.971002 1.70035 -1.08785 -0.509734 -0.180965 0.841084 + -0.948906 1.69815 -1.06444 -0.61871 -0.785323 -0.0216053 + -0.797461 1.74686 -1.05502 0.348302 -0.398457 0.84848 + -0.837016 1.7382 -1.03661 0.775411 -0.49829 0.387873 + -0.901206 1.61571 -1.00085 0.715941 -0.513326 -0.473208 + -0.854714 1.6674 -0.986595 0.88732 -0.454064 0.080551 + -0.763463 1.84218 -1.03071 0.515865 -0.435311 0.737826 + -0.817107 1.82925 -0.992113 0.72016 -0.382189 0.579052 + -0.848173 1.81015 -0.954435 0.831705 -0.250724 0.495383 + -0.88578 1.6483 -0.948908 0.29959 -0.669645 0.679574 + -0.901206 1.61571 -1.00085 0.693105 -0.685132 0.224053 + -0.826709 1.95084 -0.893124 0.736538 -0.417882 0.531871 + -0.882893 1.77276 -0.908069 0.867289 -0.280717 0.411106 + -0.912574 1.69183 -0.92031 0.393387 -0.722894 0.568042 + -0.943193 1.68178 -0.955688 -0.850662 -0.47655 0.22198 + -0.9164 1.63825 -0.984295 -0.695892 -0.656655 0.290755 + -0.901206 1.61571 -1.00085 -0.425502 -0.704292 0.568261 + -0.861429 1.91345 -0.846758 0.889291 -0.274612 0.365719 + -0.893682 1.87478 -0.783184 0.952703 -0.194267 0.233706 + -0.901912 1.77293 -0.848373 0.938045 -0.280433 0.203542 + -0.931592 1.69201 -0.860605 0.617175 -0.764469 0.186231 + -0.942828 1.68755 -0.866885 0.286173 -0.949441 0.129099 + -0.897836 2.0262 -0.669447 0.954947 -0.251594 0.157406 + -0.906177 1.85878 -0.71386 0.857558 -0.509565 0.0702668 + -0.914407 1.75692 -0.77904 0.971355 -0.133928 0.196298 + -0.923086 1.71773 -0.754359 0.624715 -0.644696 0.440565 + -0.934322 1.71336 -0.760589 -0.598461 -0.707358 0.376152 + -0.869782 2.14179 -0.573461 0.888404 -0.447224 0.103582 + -0.910296 1.95936 -0.588676 0.961004 -0.229764 0.153884 + -0.882242 2.07495 -0.492681 0.941447 -0.330552 0.0664271 + -0.915054 2.03059 -0.423643 0.703566 -0.688659 0.175335 + -0.833842 2.20954 -0.4174 0.843498 -0.529591 0.0896856 + -0.866654 2.16518 -0.348362 0.884182 -0.453976 0.110124 + -0.779985 2.29664 -0.306655 0.78012 -0.618285 0.0955808 + -0.820451 2.25574 -0.240823 0.775963 -0.622929 0.0992019 + -0.84198 2.23368 -0.221018 0.82061 -0.563294 0.0964302 + -0.899356 2.11045 -0.280376 0.81514 -0.559007 0.151852 + -0.848062 2.25593 0.053241 0.726813 -0.686831 -0.00237746 + -0.86959 2.23379 0.072996 0.867972 -0.492529 -0.0635625 + -0.874682 2.17887 -0.153082 0.93638 -0.34992 0.0273723 + -0.872962 2.20626 0.169881 0.949076 -0.200427 -0.243071 + -0.878053 2.15134 -0.056197 0.966319 -0.249561 -0.0628171 + -0.892074 2.13502 -0.102131 0.440964 -0.893313 0.0868521 + -0.923579 2.11023 -0.208393 0.514534 -0.830556 0.213148 + -0.9677 2.00174 -0.371486 0.504991 -0.852363 0.135872 + -0.828119 2.24167 0.237951 0.389455 -0.912287 -0.12672 + -0.822356 2.22867 0.269664 0.624984 -0.414468 -0.661522 + -0.855557 2.12347 0.166472 0.95707 0.0074767 -0.289759 + -0.869578 2.10715 0.120537 0.52764 -0.815524 -0.237731 + -0.928957 2.14091 -0.013939 0.514104 -0.828587 -0.221675 + -0.960462 2.11612 -0.120201 0.114763 -0.949988 0.290435 + -0.689714 2.22859 0.3148 -0.221485 -0.916279 0.333731 + -0.645114 2.2745 0.37449 -0.197541 -0.70019 0.686084 + -0.549107 2.2493 0.375134 -0.182217 -0.884402 0.429687 + -0.504507 2.2952 0.434824 -0.249365 -0.967644 -0.0384942 + -0.695478 2.2415 0.283037 -0.290957 -0.953189 0.0823044 + -0.656684 2.21392 0.282414 -0.340352 -0.706998 0.619931 + -0.570774 2.244 0.324112 0.0107686 -0.880301 0.474292 + -0.451134 2.24204 0.399915 -0.239691 -0.85309 -0.463449 + -0.414515 2.17767 0.436803 -0.770046 -0.633828 -0.0727464 + -0.813755 2.21001 0.167176 -0.653682 -0.725331 0.215857 + -0.774962 2.18234 0.16651 -0.662782 -0.387812 0.640564 + -0.672983 2.13364 0.236662 -0.234453 -0.678889 0.695803 + -0.587072 2.16372 0.27836 0.433978 -0.883631 0.17567 + -0.4728 2.23674 0.348895 -0.0690611 -0.964036 -0.256641 + -0.848062 2.25593 0.053241 -0.899549 -0.436635 0.0126956 + -0.833698 2.22428 -0.017537 -0.972286 -0.201425 -0.118696 + -0.800745 2.16722 0.143497 -0.673742 0.668008 0.31597 + -0.779985 2.29664 -0.306655 -0.961153 -0.268991 -0.0618751 + -0.793376 2.25035 -0.483283 -0.94756 -0.284124 0.146298 + -0.905691 2.11918 0.074307 0.960751 -0.0657779 -0.269501 + -0.927779 1.73612 -0.733023 -0.0606392 -0.762523 0.644113 + -0.910296 1.95936 -0.588676 0.99301 -0.0738874 0.0920415 + -0.800745 2.16722 0.143497 -0.607963 -0.149967 0.779673 + -0.698766 2.11852 0.21365 -0.562192 -0.244004 0.790191 + -0.634104 2.14471 0.244295 0.483673 -0.72715 -0.487148 + -0.49705 2.29366 0.303292 0.132551 -0.898236 -0.419048 + -0.417636 2.26287 0.309421 -0.558912 -0.726121 -0.400456 + -0.393386 2.20586 0.354973 -0.751536 -0.583386 -0.307984 + -0.368257 2.13837 0.383673 -0.842988 -0.492074 -0.217336 + -0.544082 2.27465 0.269227 0.636425 -0.625105 -0.451892 + -0.521412 2.29176 0.261582 0.198375 -0.913628 0.354868 + -0.436632 2.29198 0.270599 -0.349242 -0.918979 0.183051 + -0.341659 2.14994 0.304622 -0.590922 -0.461859 -0.661436 + -0.323066 2.06909 0.320072 -0.787551 -0.396245 -0.471969 + -0.458556 2.21157 0.222087 -0.0816158 -0.864391 0.496151 + -0.360655 2.17914 0.26585 -0.594786 -0.739531 -0.315156 + -0.757773 2.14908 0.186115 0.425881 0.00712076 -0.904751 + -0.356213 2.23418 0.219722 -0.0791444 -0.906976 -0.413679 + -0.255573 2.2155 0.158679 -0.472097 -0.709327 -0.523431 + -0.260015 2.16046 0.204812 -0.546939 -0.531354 -0.646932 + -0.25963 2.10261 0.248802 -0.628203 -0.369867 -0.684514 + -0.25321 2.24159 0.091878 -0.182373 -0.952253 -0.244857 + -0.159262 2.21968 0.033037 -0.309951 -0.870516 -0.382272 + -0.154596 2.18535 0.100294 -0.405122 -0.706198 -0.580655 + -0.154212 2.12742 0.144235 -0.42478 -0.510078 -0.747918 + -0.156899 2.24578 -0.033764 -0.155742 -0.968762 -0.192988 + -0.082695 2.24703 -0.071537 -0.022138 -0.989172 -0.145084 + -0.081395 2.22044 -0.002884 0.0259693 -0.913436 -0.406154 + -0.07673 2.18603 0.064323 -0.0808295 -0.830636 -0.550918 + -0.154394 2.249 -0.110343 -0.250281 -0.94924 -0.190531 + -0.08019 2.25017 -0.148166 0.0928859 -0.990571 -0.100701 + -0.02725 2.24172 -0.024536 0.105285 -0.945042 -0.309532 + -0.02595 2.21513 0.044117 0.183362 -0.83223 -0.523231 + -0.02595 2.16442 0.105158 0.126649 -0.73229 -0.669112 + -0.118724 2.25914 -0.189312 -0.644393 -0.505473 -0.573807 + -0.070071 2.25744 -0.21357 -0.0346311 -0.950151 -0.309862 + -0.02725 2.26148 -0.094764 0.204235 -0.958795 -0.197484 + 0.02725 2.26148 -0.094764 -0.112465 -0.980759 -0.159571 + 0.02725 2.24172 -0.024536 -0.0973461 -0.940416 -0.325793 + -0.015856 2.27806 -0.272286 -0.692326 -0.674947 -0.255208 + -0.017131 2.26876 -0.160169 0.132692 -0.991072 -0.0129884 + 0.017132 2.26876 -0.160169 -0.0970983 -0.995025 0.0222771 + 0.08019 2.25017 -0.148166 -0.0992598 -0.991427 -0.0849676 + 0.082695 2.24703 -0.071537 -0.0676404 -0.980529 -0.184354 + -0.017131 2.25377 -0.233603 -0.672001 -0.739387 -0.0414943 + -0.017131 2.26876 -0.160169 -0.999184 0.0395704 -0.00807802 + 0.010678 2.2749 -0.3052 0.640246 -0.728935 -0.24236 + 0.017132 2.25377 -0.233603 0.12652 -0.980525 -0.150209 + 0.070072 2.25744 -0.21357 0.131999 -0.946954 -0.293008 + 0.118717 2.25914 -0.18932 0.644411 -0.505444 -0.573813 + 0.154394 2.249 -0.110343 0.248355 -0.948936 -0.194524 + 0.009403 2.2992 -0.343893 0.907328 -0.39374 -0.147391 + 0.015857 2.27806 -0.272286 0.680649 -0.659772 -0.318463 + 0.064503 2.27977 -0.248036 0.429281 -0.740471 -0.517127 + 0.211487 2.26453 -0.064851 0.47178 -0.773808 -0.422663 + 0.247164 2.25439 0.014118 0.0696504 -0.988172 -0.136617 + 0.048517 2.35557 -0.371727 0.704882 -0.656029 -0.269754 + 0.125703 2.38312 -0.315846 0.581502 -0.618836 -0.528107 + 0.086589 2.32683 -0.287961 0.542128 -0.665705 -0.512771 + 0.061399 2.38566 -0.424453 0.808042 -0.548472 -0.215049 + 0.142328 2.44172 -0.358949 0.638228 -0.585929 -0.499351 + 0.25074 2.40196 -0.217091 0.412862 -0.596397 -0.688372 + 0.237927 2.33919 -0.172759 0.374804 -0.684412 -0.625381 + 0.081787 2.44345 -0.469944 0.821557 -0.498454 -0.276745 + 0.162716 2.49951 -0.404439 0.672959 -0.54307 -0.502196 + 0.267365 2.46057 -0.260203 0.376942 -0.624658 -0.683899 + 0.364503 2.38729 -0.16808 -0.147701 -0.662525 -0.734333 + 0.089764 2.48429 -0.520287 0.852656 -0.40991 -0.323962 + 0.167976 2.5567 -0.450297 0.720992 -0.452007 -0.525223 + 0.266044 2.51805 -0.310551 0.425678 -0.588121 -0.687686 + 0.360602 2.49977 -0.271703 -0.252078 -0.667705 -0.700447 + 0.361923 2.4423 -0.221354 -0.200971 -0.667831 -0.716667 + 0.102723 2.54819 -0.55457 0.84008 -0.434995 -0.324106 + 0.180935 2.62069 -0.484529 0.693794 -0.514081 -0.504352 + 0.271304 2.57523 -0.3564 0.386137 -0.616703 -0.685986 + 0.100077 2.57141 -0.606185 0.823852 -0.557405 -0.102796 + 0.181855 2.66385 -0.532888 0.313529 -0.948602 0.0430502 + 0.26152 2.62783 -0.410106 0.378469 -0.656392 -0.652618 + 0.340041 2.61075 -0.377513 -0.233545 -0.687877 -0.687228 + 0.349826 2.55815 -0.323807 -0.258667 -0.689309 -0.676716 + 0.073178 2.53464 -0.683094 0.882518 -0.416255 -0.218848 + 0.154956 2.62717 -0.609756 0.790133 -0.588326 -0.171937 + 0.262439 2.671 -0.458472 0.481221 -0.592234 -0.646286 + 0.059054 2.74121 -0.955474 0.878544 -0.347442 -0.327789 + 0.108192 2.80586 -0.905062 0.84321 -0.391443 -0.368469 + 0.25805 2.7342 -0.501336 0.575171 -0.552291 -0.603451 + 0.016514 2.25648 -0.879903 0.997942 -0.0142128 -0.0625224 + -0.9191 1.77532 -0.757703 0.863215 -0.272616 0.424901 + -0.927779 1.73612 -0.733023 0.965021 -0.051872 0.256989 + -0.994441 1.63158 -1.25995 -0.485316 -0.448721 -0.750412 + -0.699814 1.69538 -1.32206 0.90454 -0.205812 0.373428 + -0.704309 1.62413 -1.34845 0.818599 -0.454673 -0.350952 + -0.692772 1.67708 -1.37616 0.976357 -0.216071 -0.00636239 + -0.699505 1.64767 -1.36081 0.120086 -0.480725 -0.86861 + -0.711042 1.59463 -1.33315 0.233098 -0.489048 -0.840534 + -0.719793 1.60413 -1.3202 0.761892 -0.349214 0.5455 + -0.711042 1.59463 -1.33315 0.751826 -0.174539 0.63584 + -0.748272 1.58103 -1.31759 0.447718 -0.677802 0.58321 + -0.761571 1.58121 -1.3069 0.188617 -0.973236 0.131283 + -0.848896 1.59106 -1.29936 -0.0676339 -0.997591 0.015436 + -0.862195 1.59124 -1.28868 -0.0867424 -0.995577 -0.036101 + -0.759733 1.60831 -1.24384 0.640418 -0.650066 0.408998 + -0.801512 1.58539 -1.23054 0.285219 -0.890828 0.353661 + -0.977933 1.61141 -1.18422 0.548729 -0.595782 -0.586464 + -0.946964 1.61536 -1.27285 -0.462913 -0.884374 -0.059952 + -0.994441 1.63158 -1.25995 0.956751 0.248319 -0.151541 + -0.955511 1.48158 -1.19533 0.963046 0.15508 -0.22021 + -1.00886 1.67572 -1.2742 -0.651743 -0.660064 0.373559 + -1.02216 1.67959 -1.28351 -0.574611 -0.57638 0.581041 + -0.710918 1.55531 -1.66445 -0.0168882 -0.92895 -0.369821 + -0.698533 1.56096 -1.65062 0.562251 -0.808668 0.173002 + -0.738069 1.5453 -1.62151 0.133805 -0.977218 -0.164746 + -0.765583 1.55311 -1.63143 -0.167649 -0.857189 -0.48695 + -0.695642 1.56591 -1.6828 -0.777786 -0.411159 -0.475391 + -0.666623 1.5694 -1.74905 -0.761908 0.572093 -0.303654 + -0.780274 1.54606 -1.61161 -0.137724 -0.915593 -0.377784 + -0.70293 1.57108 -1.72015 -0.0398422 -0.994837 -0.0933409 + -0.67746 1.59199 -1.83878 0.508764 -0.797592 -0.324047 + -0.72052 1.57168 -1.769 0.0946379 -0.986478 -0.133807 + -0.733866 1.5759 -1.7889 -0.119709 -0.950796 -0.285755 + -0.690805 1.59621 -1.85868 0.135136 -0.854781 -0.501087 + -0.644552 1.69844 -1.93855 0.851291 -0.416087 -0.319648 + -0.679972 1.61529 -1.89452 0.529116 -0.808327 -0.258155 + -0.657013 1.72041 -1.98721 0.807873 -0.434723 -0.397941 + -0.666892 1.74132 -2.03102 0.736366 -0.464695 -0.491755 + -0.618961 1.9043 -2.05851 0.853878 -0.396202 -0.337516 + -0.692433 1.63726 -1.94318 -0.180185 -0.91296 -0.366112 + -0.692433 1.63726 -1.94318 0.717053 -0.53926 -0.441625 + -0.575139 2.01336 -2.097 0.763209 -0.617583 -0.190008 + -0.506492 2.07895 -2.15301 0.531751 -0.838599 -0.118292 + -0.248157 2.16615 -2.10865 0.108474 -0.934503 -0.339024 + -0.236264 2.17147 -2.12526 -0.0254974 -0.970204 -0.240943 + -0.211458 2.17238 -2.14524 -0.139532 -0.979493 -0.14534 + -0.270663 2.18392 -2.22823 -0.00269414 -0.99329 -0.115618 + -0.239822 2.18818 -2.24701 -0.081898 -0.992073 -0.095312 + -0.146993 2.16015 -2.15325 -0.104751 -0.980314 -0.16737 + -0.119333 2.16347 -2.1654 0.0441472 -0.975183 -0.216954 + -0.314309 2.19617 -2.35364 0.0538928 -0.997682 0.0415453 + -0.268684 2.19336 -2.36638 -0.0585484 -0.995402 0.0758044 + -0.206692 2.18146 -2.25856 -0.157522 -0.986015 -0.0544196 + -0.321355 2.17099 -2.48582 0.0353566 -0.964084 0.263235 + -0.27985 2.16796 -2.50339 -0.0479251 -0.958592 0.280722 + -0.230059 2.1897 -2.37884 -0.128191 -0.98699 0.0970404 + -0.168067 2.17779 -2.27101 -0.0113098 -0.996495 -0.082884 + -0.364216 2.11959 -2.62621 0.160657 -0.921714 0.353033 + -0.322711 2.11657 -2.64377 0.113074 -0.942002 0.315985 + -0.236111 2.15775 -2.5155 -0.0391953 -0.964627 0.260688 + -0.18632 2.17957 -2.3909 -0.0550696 -0.992989 0.104592 + -0.450585 2.06243 -2.70541 0.449636 -0.837078 0.311654 + -0.409212 2.06633 -2.72435 0.292901 -0.8983 0.327514 + -0.370329 2.07271 -2.7538 0.271262 -0.917557 0.2907 + -0.290031 2.11226 -2.67471 0.0813537 -0.955006 0.285209 + -0.481281 2.05005 -2.67016 0.609404 -0.753512 0.246668 + -0.496392 2.00565 -2.75105 0.653384 -0.714778 0.249365 + -0.458077 2.02381 -2.7897 0.484304 -0.818918 0.307934 + -0.419195 2.03027 -2.8191 0.380277 -0.876176 0.29615 + -0.527088 1.99318 -2.71585 0.787791 -0.442397 0.428567 + -0.526564 1.96599 -2.80317 0.736628 -0.61928 0.271795 + -0.48825 1.98423 -2.84176 0.610204 -0.76504 0.205827 + -0.548842 1.974 -2.67123 0.795435 -0.593333 0.123447 + -0.593047 1.92413 -2.62486 0.794315 -0.596341 0.115931 + -0.531743 1.92998 -2.84378 0.823273 -0.5396 0.176218 + -0.51372 1.95601 -2.89967 0.730385 -0.667414 0.145246 + -0.481219 1.9705 -2.93378 0.455656 -0.873991 0.168869 + -0.455748 1.99864 -2.87592 0.439666 -0.871288 0.218064 + -0.374755 2.03635 -2.85183 0.282487 -0.906706 0.313186 + -0.540993 1.91304 -2.85124 0.841803 -0.521316 0.139993 + -0.52297 1.93907 -2.90713 0.825938 -0.544307 0.146821 + -0.508552 1.94894 -2.92703 0.636434 -0.757467 0.145582 + -0.507767 1.95508 -2.96886 0.213725 -0.97544 -0.0532826 + -0.456696 1.97413 -2.95585 0.286324 -0.869506 0.402465 + -0.411309 2.00472 -2.90865 0.31193 -0.904832 0.28979 + -0.334863 2.03597 -2.88316 0.261405 -0.917724 0.299082 + -0.337649 2.06849 -2.78469 0.191887 -0.933404 0.30321 + -0.517922 1.95242 -2.95826 0.1088 -0.983819 -0.14235 + -0.517137 1.95856 -3.00009 0.053763 -0.990498 -0.126585 + -0.483244 1.9587 -2.99094 0.0992161 -0.983626 0.150452 + -0.462167 1.9588 -2.9683 -0.337711 -0.517515 0.786212 + -0.436121 1.96423 -2.9789 0.412128 -0.537216 0.7359 + -0.418222 1.97945 -2.97868 0.274929 -0.612696 0.740957 + -0.372835 2.01005 -2.93147 0.285233 -0.913547 0.289955 + -0.288907 2.03914 -2.91625 0.185164 -0.93607 0.299144 + -0.297757 2.06811 -2.81603 0.14378 -0.946268 0.289663 + -0.391961 1.97369 -2.9829 0.119732 -0.155226 0.980596 + -0.374062 1.98892 -2.98267 0.245697 -0.527914 0.812982 + -0.326879 2.01322 -2.96456 0.261368 -0.902153 0.343229 + -0.243345 2.03958 -2.93603 0.0675455 -0.943215 0.325244 + -0.262208 2.06183 -2.84155 0.0815764 -0.958129 0.27447 + -0.3657 1.98304 -2.9843 0.0994869 -0.131514 0.986309 + -0.26893 2.09855 -2.72197 0.0653673 -0.954627 0.29054 + -0.21501 2.14395 -2.5628 0.0811233 -0.956504 0.280212 + -0.176994 2.15529 -2.54404 0.154638 -0.964924 0.212152 + -0.233381 2.09228 -2.74749 0.0991773 -0.957212 0.271862 + -0.195365 2.10352 -2.72877 0.199717 -0.947145 0.251056 + -0.216646 2.06227 -2.86133 0.164678 -0.944947 0.282767 + -0.151773 2.11226 -2.73851 0.288032 -0.927812 0.237069 + -0.128718 2.16379 -2.55436 0.256177 -0.952474 0.164822 + -0.098774 2.18937 -2.41326 0.121431 -0.991376 0.0492831 + -0.14705 2.18087 -2.40294 0.118078 -0.990372 0.072249 + -0.188123 2.03604 -2.94528 0.166006 -0.932256 0.321465 + -0.173054 2.07101 -2.87106 0.255078 -0.916478 0.308226 + -0.126505 2.07915 -2.88576 0.384142 -0.869572 0.310288 + -0.120238 2.11383 -2.78023 0.435674 -0.869701 0.231964 + -0.284915 2.01668 -2.98715 0.139171 -0.854689 0.500138 + -0.229693 2.01313 -2.99641 0.110544 -0.955673 0.272891 + -0.21399 2.01164 -3.01763 0.0319108 -0.947525 0.318084 + -0.141573 2.04417 -2.95997 0.285424 -0.888593 0.359076 + -0.332098 1.99229 -3.00532 0.233097 -0.965953 0.112253 + -0.313287 2.00102 -3.03582 0.278906 -0.951632 0.12887 + -0.297585 1.99953 -3.05705 0.107263 -0.990981 0.0803216 + -0.3657 1.98304 -2.9843 0.418968 0.366156 0.8309 + 1.14799 1.74733 -2.15643 0.928722 -0.304044 -0.212207 + 1.13429 1.77906 -2.24399 0.815696 -0.46777 -0.34034 + 1.15743 1.91745 -2.19529 0.765258 0.153009 -0.625275 + 1.20667 2.0536 -2.0707 0.916496 -0.0594858 -0.395597 + 1.24921 2.14475 -2.01399 0.800373 -0.233246 -0.552267 + 1.11601 1.94174 -2.22355 0.73333 0.272877 -0.622708 + 1.13715 2.12449 -2.13089 0.641395 0.256459 -0.723077 + 1.18765 2.08689 -2.10077 0.750226 0.168115 -0.639451 + 1.11354 1.8732 -2.26963 0.921117 0.202597 -0.332413 + 1.02199 2.18507 -2.21342 0.778208 0.262519 -0.570505 + 1.09573 2.14878 -2.15916 0.644863 0.242643 -0.724759 + 1.10694 2.28195 -2.11301 0.632316 0.157299 -0.758573 + 1.14176 2.21318 -2.09731 0.651887 0.190926 -0.733887 + 1.08587 1.87405 -2.34371 0.92966 0.244765 -0.275358 + 1.01952 2.11653 -2.25951 0.885084 0.279305 -0.372311 + 1.10662 1.77992 -2.31807 0.836646 -0.450327 -0.311815 + 1.07554 1.80925 -2.43787 0.952325 0.203261 -0.227515 + 1.06243 1.89044 -2.4139 0.936046 0.272328 -0.222833 + 0.996072 2.13292 -2.3297 0.909632 0.327286 -0.255837 + 1.09318 1.74847 -2.21301 0.471848 -0.865716 -0.167019 + 1.05909 1.73242 -2.2304 0.489568 -0.858959 -0.150045 + 1.07252 1.76395 -2.33541 0.512921 -0.821206 -0.250063 + 1.07554 1.80925 -2.43787 0.574721 -0.75459 -0.316684 + 1.06729 1.76693 -2.35678 0.655905 -0.708823 -0.259536 + 1.00205 1.70979 -2.27861 0.093853 -0.847204 -0.522913 + 1.12953 1.76009 -2.17713 0.386969 -0.900022 -0.200537 + 1.10326 1.7364 -2.1069 0.313372 -0.931716 -0.183587 + 1.0669 1.72478 -2.14277 0.420731 -0.901772 -0.0989536 + 1.03738 1.71233 -2.1638 0.453112 -0.888217 -0.0758886 + 1.00727 1.7068 -2.25724 0.400765 -0.898458 -0.179334 + 1.15072 1.77302 -2.19552 0.351682 -0.906842 -0.232286 + 1.14596 1.75405 -2.12866 -0.537992 -0.790792 -0.291912 + 1.11534 1.73461 -2.08659 0.0192434 -0.903832 -0.427454 + 1.01531 1.69599 -2.04791 0.265646 -0.96066 -0.0810202 + 0.985789 1.68354 -2.06893 0.213289 -0.976622 0.0267796 + 0.985572 1.68671 -2.19063 0.186134 -0.974207 -0.127576 + 1.14514 1.73694 -2.10343 -0.789833 -0.484626 -0.375901 + 1.11452 1.7175 -2.06136 -0.12554 -0.820661 -0.557454 + 1.02739 1.69411 -2.02766 0.0801468 -0.921829 -0.379221 + 0.891333 1.6773 -1.97893 -0.153091 -0.871265 -0.466327 + 0.937936 1.68407 -2.04925 -0.17611 -0.979272 -0.100057 + 1.15072 1.77302 -2.19552 -0.797612 0.527641 0.292252 + 1.14799 1.74733 -2.15643 -0.997747 0.0634496 -0.0217945 + 1.14241 1.71125 -2.06434 -0.547246 -0.706409 -0.448896 + 1.10601 1.7037 -2.03866 -0.111 -0.830124 -0.546418 + 1.01888 1.6804 -2.0049 -0.0208503 -0.856074 -0.516433 + 1.13429 1.77906 -2.24399 -0.749858 0.575728 0.32596 + 1.15142 1.68191 -2.03092 -0.798592 -0.54239 -0.260892 + 0.942828 1.68755 -0.866894 -0.285676 -0.949615 0.128919 + 0.931592 1.69201 -0.860605 -0.621255 -0.759147 0.194263 + 0.882892 1.77276 -0.908069 -0.880223 -0.330703 0.340357 + 0.848172 1.81015 -0.954435 -0.824321 -0.264242 0.50067 + 0.923086 1.71773 -0.754359 -0.637496 -0.643845 0.423158 + 0.914407 1.75692 -0.77904 -0.972244 -0.178628 0.151107 + 0.901911 1.77293 -0.848373 -0.941113 -0.262454 0.213132 + 0.8945 1.86096 -0.814435 -0.929991 -0.202739 0.306616 + 0.86143 1.91345 -0.846758 -0.854838 -0.322911 0.406178 + 0.927778 1.73612 -0.733014 0.0604344 -0.762729 0.643888 + 0.927778 1.73612 -0.733014 -0.965046 -0.0519368 0.256883 + 0.919099 1.77531 -0.757695 -0.925774 -0.160899 0.342131 + 0.906995 1.84494 -0.745102 -0.979667 0.0247327 0.199099 + 0.920946 1.88997 -0.719496 -0.948819 -0.13377 0.286092 + 0.898654 2.01237 -0.70069 -0.907191 -0.265216 0.326595 + 0.865585 2.06487 -0.733021 -0.784253 -0.448947 0.428245 + 0.79727 2.10626 -0.78912 -0.590938 -0.620716 0.515271 + 0.82671 1.95084 -0.893124 -0.749553 -0.431167 0.502261 + 0.817107 1.82925 -0.992113 -0.690958 -0.284297 0.664644 + 0.925346 1.94468 -0.654843 -0.963054 -0.202689 0.177324 + 0.903054 2.06699 -0.636095 -0.915931 -0.375406 0.141917 + 0.830701 2.16795 -0.637364 -0.676618 -0.678194 0.286777 + 0.762385 2.20934 -0.693463 -0.222679 -0.898963 0.3772 + 0.718762 2.16758 -0.736722 0.409235 -0.743795 0.528485 + 0.745911 2.11019 -0.834725 -0.0881068 -0.750393 0.655093 + 0.915514 2.00015 -0.555323 -0.951565 -0.30599 -0.0298895 + 0.882244 2.07495 -0.492681 -0.908861 -0.416316 0.0255637 + 0.869784 2.14179 -0.573461 -0.861026 -0.508257 0.0175657 + 0.754295 2.27651 -0.547195 -0.0862156 -0.942741 0.322189 + 0.708909 2.2274 -0.610544 0.357385 -0.884183 0.300825 + 0.665285 2.18573 -0.653752 0.875837 -0.408195 0.257462 + 0.915054 2.03059 -0.423643 -0.703805 -0.6802 0.204906 + 0.833844 2.20954 -0.4174 -0.845466 -0.51177 0.152574 + 0.793378 2.25035 -0.483283 -0.754844 -0.646424 0.111117 + 0.776758 2.28597 -0.306972 -0.581938 -0.808646 0.0862505 + 0.743554 2.29407 -0.424208 0.314961 -0.941988 -0.116012 + 0.866654 2.16518 -0.348362 -0.868133 -0.483363 0.11272 + 0.820451 2.25574 -0.240823 -0.737043 -0.674493 0.0427327 + 0.779985 2.29664 -0.306655 -0.766011 -0.638531 0.0741976 + 0.833698 2.22428 -0.017537 -0.652667 -0.754624 -0.0675919 + 0.9677 2.00174 -0.371486 -0.540538 -0.829977 0.137682 + 0.899356 2.11045 -0.280376 -0.814365 -0.571365 0.101739 + 0.874688 2.17887 -0.153082 -0.936324 -0.350063 0.0274422 + 0.841986 2.2336 -0.221068 -0.821032 -0.56268 0.0964225 + 0.848062 2.25593 0.053241 -0.724839 -0.688894 -0.00578605 + 0.948408 2.01676 -0.468093 -0.440186 -0.896435 -0.0513962 + 1.00105 1.98792 -0.415936 0.491473 -0.781639 -0.384051 + 0.991919 2.0016 -0.299444 0.192013 -0.869892 0.454333 + 0.923575 2.11031 -0.208334 -0.463531 -0.855419 0.231077 + 0.878053 2.15134 -0.056197 -0.966034 -0.250109 -0.0649895 + 0.869596 2.23379 0.072996 -0.867958 -0.492548 -0.0635955 + 0.872962 2.20626 0.169881 -0.949061 -0.200448 -0.243111 + 0.828111 2.24166 0.237958 -0.389069 -0.912578 -0.125804 + 1.018 2.02083 -0.35915 0.968861 -0.247604 0.000397428 + 0.983368 2.07331 -0.217248 0.314194 -0.839755 0.442825 + 0.960458 2.11612 -0.120201 -0.11602 -0.95524 0.272131 + 0.928955 2.14092 -0.013948 -0.514095 -0.828573 -0.221749 + 0.892072 2.13503 -0.10214 -0.74989 -0.652426 -0.109573 + 1.00554 2.1554 -0.369826 0.985544 -0.0256754 -0.167462 + 1.00945 2.09254 -0.276952 0.976226 -0.185235 0.112561 + 1.02436 2.14526 -0.215457 0.965487 -0.257281 -0.0405055 + 1.0088 2.10705 -0.139885 0.60466 -0.750663 0.266256 + 0.985888 2.14995 -0.042786 0.480837 -0.872258 0.0892287 + 0.905681 2.11917 0.074324 0.559914 -0.810846 0.170369 + 0.988594 2.12248 -0.426613 0.930138 -0.0321563 -0.365798 + 1.00756 2.25448 -0.396038 0.97163 -0.0942255 -0.216926 + 1.01462 2.2153 -0.323177 0.987623 -0.0737678 -0.138414 + 1.02953 2.26801 -0.26168 0.872103 -0.363405 -0.327677 + 0.948408 2.01676 -0.468093 0.706343 0.00922063 -0.70781 + 0.905681 2.11917 0.074324 -0.960751 -0.0657405 -0.269511 + 0.855557 2.12347 0.166472 -0.957056 0.00752283 -0.289806 + 0.804931 2.14597 0.266304 -0.707835 0.102181 -0.698948 + 0.822335 2.22876 0.269713 -0.583502 -0.399815 -0.706876 + 0.869576 2.10715 0.120537 -0.527845 -0.815367 -0.237815 + 0.846302 2.08541 0.208805 -0.87344 0.292854 -0.389023 + 0.738914 2.12985 0.32183 -0.655032 -0.00053789 -0.755601 + 0.645094 2.2745 0.37449 -0.445687 -0.88854 -0.108906 + 0.689694 2.22859 0.3148 -0.137128 -0.987659 0.07567 + 0.905681 2.11917 0.074324 -0.107938 -0.933078 -0.343096 + 0.901206 1.61571 -1.00085 -0.0630899 -0.586398 -0.807562 + 0.605962 1.89597 -2.56588 0.923388 0.373922 -0.0868155 + 0.592234 1.92008 -2.61283 0.936869 0.334412 -0.102206 + 0.603401 1.90985 -2.54392 0.747603 -0.617252 -0.245134 + 0.608231 1.90077 -2.492 0.809966 0.583106 -0.0627855 + 0.621039 1.88748 -2.46078 0.657496 0.752541 -0.0371633 + 0.618769 1.88277 -2.53462 0.757364 0.649774 -0.06475 + 0.643558 1.86843 -2.48698 0.630719 0.773953 -0.0564912 + 0.63938 1.87276 -2.42967 0.651434 0.758661 0.00822009 + 0.661899 1.8537 -2.45587 0.813414 0.547971 -0.195155 + 0.672911 1.83834 -2.44066 0.882328 0.221354 -0.415332 + 0.693482 1.82274 -2.41123 0.75964 0.643992 -0.0906696 + 0.678992 1.83517 -2.44137 0.773457 0.623367 -0.114794 + 0.710576 1.80419 -2.39672 0.773541 0.623246 -0.114885 + 0.719806 1.76903 -2.18362 0.780362 0.618151 -0.0944661 + 0.705589 1.77883 -2.23698 0.799448 0.594769 -0.0844562 + 0.690866 1.79182 -2.28809 0.917138 0.398523 -0.00611514 + 0.685856 1.80393 -2.25027 0.826716 0.558339 -0.0692761 + 0.685589 1.8085 -2.33898 0.93944 0.342393 0.0148036 + 0.05808 2.02101 -3.09945 0.166767 0.877209 0.450214 + 0.021963 2.02879 -3.08313 0.255024 0.96108 0.106246 + 0.052011 2.01575 -3.03735 0.774316 0.344201 -0.530999 + 0.080404 2.00707 -3.02371 0.242811 0.966685 0.08101 + 0.086472 2.01224 -3.08588 0.0147812 0.897971 0.439807 + 0.074256 2.02532 -3.10312 -0.0780005 0.745662 0.661743 + 0.048257 2.03376 -3.11254 -0.0341371 -0.0290121 0.998996 + 0.021963 2.02879 -3.08313 0.290487 0.785079 0.547054 + 0.012141 2.04154 -3.09621 0.192698 0.296144 0.935503 + -0.030826 2.04626 -3.10218 -0.0202983 0.708357 0.705563 + 0.128187 1.99744 -3.05683 -0.0637266 0.896948 0.437519 + 0.11597 2.01052 -3.07408 -0.257645 0.673376 0.692953 + 0.106302 2.00064 -3.00818 0.00746884 0.959279 0.282363 + 0.138523 1.99564 -3.00172 0.126377 0.984305 -0.123176 + 0.160408 1.99253 -3.05032 0.0651072 0.828602 0.556039 + 0.145789 2.00213 -3.05075 -0.323149 -0.629332 0.706764 + 0.128453 1.99899 -2.99251 0.00105117 0.997997 -0.0632477 + 0.221579 1.99604 -3.06701 0.0740882 0.981615 0.175904 + 0.267677 2.00019 -3.0754 -0.000177651 0.896667 0.442706 + 0.108633 1.98662 -2.9861 -0.317524 0.785011 0.531917 + 0.197416 1.994 -3.04727 -0.0632734 0.805886 0.588679 + 0.170471 1.99605 -3.05282 -0.124991 -0.154432 0.980065 + 0.153275 2.0171 -3.00969 -0.210018 -0.876372 0.433433 + 0.107118 2.02426 -3.03748 -0.429885 -0.846334 0.314512 + 0.0773 2.03273 -3.06076 -0.503356 -0.823811 0.260709 + 0.11597 2.01052 -3.07408 -0.429506 -0.876949 0.215605 + 0.074256 2.02532 -3.10312 -0.471371 -0.846677 0.246875 + 0.20748 1.99752 -3.04977 0.122771 -0.442068 0.88854 + 0.177958 2.01102 -3.01176 0.0449212 -0.473426 0.879687 + 0.141569 2.04417 -2.95997 -0.302838 -0.880115 0.365633 + 0.988445 1.85505 -2.622 -0.878003 0.477838 -0.0279526 + 0.940809 1.79078 -2.54588 -0.688319 0.706263 0.165561 + 0.96059 1.81258 -2.55664 -0.776608 0.270433 -0.568987 + 0.972108 1.83344 -2.56877 -0.761714 -0.0722076 -0.643877 + 0.999963 1.87599 -2.63407 -0.993306 -0.0704394 -0.0915477 + 0.99941 1.89818 -2.6767 -0.74186 0.590827 0.317122 + 0.93501 1.82717 -2.55451 -0.157193 -0.519338 -0.839987 + 0.986794 1.86725 -2.59635 -0.68801 -0.439859 -0.577205 + 0.986241 1.88944 -2.63897 -0.388349 -0.825609 -0.409335 + 0.99941 1.89818 -2.6767 -0.46223 -0.835078 -0.298311 + 0.977299 1.90902 -2.67488 -0.320458 -0.883482 -0.341711 + 0.976666 1.92511 -2.73795 -0.411386 -0.884875 -0.218535 + 0.923497 1.80836 -2.54154 -0.185011 -0.362747 -0.913337 + 0.852254 1.85836 -2.57474 -0.0736101 -0.654922 -0.752103 + 0.949696 1.86099 -2.58209 -0.114851 -0.669024 -0.734314 + 0.95185 1.87874 -2.60324 -0.0989063 -0.833448 -0.543675 + 0.940809 1.79078 -2.54588 0.0827279 -0.710166 -0.699157 + 0.903715 1.78656 -2.53079 -0.136504 -0.783727 -0.60592 + 0.840741 1.83956 -2.56177 -0.175085 -0.652354 -0.737414 + 0.731119 1.88176 -2.57267 -0.242526 -0.967617 -0.0699833 + 0.854408 1.8762 -2.59584 -0.0676272 -0.832852 -0.549348 + 0.942908 1.89832 -2.63916 -0.0937025 -0.889475 -0.447274 + 0.919104 1.7685 -2.47549 0.179908 -0.978183 -0.103879 + 0.864548 1.78519 -2.5062 -0.291845 -0.861076 -0.416382 + 0.801573 1.83818 -2.53719 -0.374448 -0.802298 -0.464873 + 0.944645 1.78837 -2.53371 0.4061 -0.883839 -0.232188 + 0.950974 1.78361 -2.44946 0.351076 -0.935938 -0.0276754 + 0.888813 1.77243 -2.3787 0.0895855 -0.99265 0.0813651 + 0.845095 1.77276 -2.36687 -0.0551768 -0.996462 0.0633942 + 0.875385 1.76883 -2.46366 -0.142435 -0.977914 -0.152959 + 0.992281 1.85263 -2.60982 0.581792 -0.736947 -0.344131 + 0.976516 1.80348 -2.50768 0.503351 -0.838155 -0.210082 + 0.971656 1.78821 -2.42584 0.241772 -0.964544 -0.10583 + 0.909495 1.77704 -2.35508 0.0545723 -0.993792 -0.0969456 + 0.988445 1.85505 -2.622 0.665404 -0.663961 -0.341165 + 0.99941 1.89818 -2.6767 0.538185 -0.7392 -0.404895 + 1.01338 1.85759 -2.5856 0.401176 -0.839211 -0.367129 + 0.997619 1.80835 -2.48351 0.424748 -0.870826 -0.247491 + 1.00311 1.78787 -2.37925 0.115823 -0.967061 -0.226668 + 1.03285 1.85781 -2.57419 0.784597 -0.47881 -0.393889 + 1.02907 1.808 -2.43692 0.246043 -0.929671 -0.274179 + 1.01319 1.78128 -2.35383 -0.00934356 -0.905481 -0.424285 + 0.919578 1.77053 -2.32961 -0.0249025 -0.878239 -0.477573 + 0.809791 1.777 -2.32622 -0.184381 -0.982652 -0.0199646 + 0.811545 1.77651 -2.33737 -0.0737089 -0.997265 0.00539728 + 1.04854 1.80823 -2.42551 0.0164932 -0.946946 -0.320968 + 1.05337 1.7853 -2.36599 -0.113349 -0.884727 -0.452118 + 1.01205 1.76204 -2.32391 -0.0818345 -0.780033 -0.620364 + 0.999293 1.74336 -2.30196 -0.114029 -0.669421 -0.73408 + 0.906824 1.75185 -2.30766 -0.150546 -0.811826 -0.564158 + 1.07554 1.80925 -2.43787 -0.112449 -0.939684 -0.32303 + 1.08037 1.78631 -2.37835 -0.967737 -0.200749 -0.152265 + 1.05223 1.76606 -2.33607 -0.501349 -0.547009 -0.670396 + 1.03915 1.7466 -2.31456 -0.693142 -0.0989139 -0.713982 + 0.962187 1.70664 -2.26596 -0.139371 -0.869368 -0.474104 + 0.919208 1.70335 -2.22546 -0.319646 -0.906121 -0.277076 + 0.863845 1.74856 -2.26716 -0.36381 -0.889022 -0.277997 + 1.06729 1.76693 -2.35678 -0.858027 0.0242464 -0.513031 + 0.937719 1.68725 -2.17096 -0.199332 -0.973195 -0.114711 + 0.827367 1.73037 -2.13986 -0.4184 -0.89074 -0.177551 + 1.07554 1.80925 -2.43787 -0.56335 0.754606 0.336462 + 0.845878 1.71427 -2.08536 -0.311218 -0.944863 -0.101862 + 0.780043 1.75154 -2.13453 -0.273662 -0.904408 -0.327346 + 0.816521 1.76973 -2.26183 -0.384722 -0.908388 -0.16377 + 0.906401 1.69126 -2.01231 -0.475823 -0.795449 -0.375304 + 0.814343 1.72146 -2.04842 -0.196403 -0.971376 -0.133618 + 0.765186 1.73346 -2.0804 0.0346962 -0.962277 -0.269849 + 0.729957 1.78796 -2.20421 -0.226103 -0.93998 -0.255567 + 0.811683 1.71602 -2.0232 -0.118898 -0.935009 -0.334098 + 0.762526 1.72793 -2.05523 0.15969 -0.946325 -0.28101 + 0.734326 1.74788 -2.13459 -0.13896 -0.86526 -0.481679 + 0.719806 1.76903 -2.18362 0.458204 -0.758763 -0.462956 + 0.796615 1.70206 -1.98982 -0.0554451 -0.895639 -0.441312 + 0.749727 1.7037 -2.00326 0.277602 -0.893677 -0.352531 + 0.753973 1.66567 -1.91479 -0.0225075 -0.871666 -0.489584 + 0.707085 1.6674 -1.92819 0.566041 -0.774363 -0.282772 + 0.696973 1.63682 -1.87902 0.588237 -0.579241 -0.564319 + 0.692435 1.63725 -1.94316 0.895204 -0.440702 -0.0662708 + 0.679974 1.61528 -1.89451 0.841999 -0.437785 -0.315249 + 0.887944 1.6543 -1.9417 -0.134328 -0.844154 -0.518998 + 0.750584 1.64268 -1.87757 -0.0114864 -0.799686 -0.600308 + 0.940837 1.64332 -1.93428 -0.0750667 -0.864966 -0.496185 + 0.990703 1.64564 -1.9449 -0.0530004 -0.871056 -0.488316 + 0.962247 1.59901 -1.84773 -0.0179635 -0.944272 -0.328675 + 1.0079 1.65625 -1.96487 -0.0247148 -0.857414 -0.514033 + 1.03521 1.60812 -1.87612 -0.0262762 -0.904125 -0.42646 + 1.01211 1.60125 -1.8584 -0.0235787 -0.951236 -0.307562 + 1.01425 1.66841 -1.98473 -0.0150394 -0.85289 -0.521874 + 1.08136 1.64392 -1.93812 0.0100114 -0.864092 -0.503234 + 1.05241 1.61881 -1.89603 0.00499999 -0.871903 -0.489654 + 1.06964 1.60894 -1.87873 -0.0283936 -0.873847 -0.485371 + 1.07751 1.66753 -1.97561 0.0187494 -0.846229 -0.532489 + 1.08771 1.65608 -1.95798 -0.0123419 -0.848289 -0.529389 + 1.11968 1.6542 -1.95813 -0.345921 -0.745367 -0.569882 + 1.09859 1.63405 -1.92082 -0.389466 -0.658427 -0.644042 + 1.12127 1.64042 -1.94785 -0.697529 -0.292428 -0.65417 + 1.08214 1.67944 -1.99584 -0.0257029 -0.871891 -0.489025 + 1.10948 1.66565 -1.97575 -0.146814 -0.867404 -0.475453 + 1.14237 1.66056 -1.98515 -0.297753 -0.833052 -0.466227 + 1.11854 1.68699 -2.02152 -0.243061 -0.815177 -0.525745 + 1.15142 1.68191 -2.03092 -0.260626 -0.854212 -0.449885 + 1.15142 1.68191 -2.03092 -0.285007 -0.757116 -0.587832 + 0.695715 1.8117 -2.16432 -0.84513 -0.49006 -0.213534 + 0.698705 1.81652 -2.21126 -0.929584 -0.364112 0.0574169 + 0.719806 1.76903 -2.18362 -0.932769 -0.329769 0.145584 + 0.705589 1.77883 -2.23698 -0.937332 -0.295927 0.183946 + 0.653716 1.92238 -2.23203 -0.861246 -0.493111 -0.122864 + 0.658388 1.92625 -2.27512 -0.904402 -0.426575 -0.00949785 + 0.684488 1.8263 -2.26462 -0.946262 -0.290834 0.141437 + 0.676987 1.83497 -2.31182 -0.954873 -0.289287 0.0673056 + 0.690866 1.79182 -2.28809 -0.961303 -0.213477 0.174136 + 0.685589 1.8085 -2.33898 -0.531176 -0.840559 -0.106357 + 0.605655 2.0055 -2.31019 -0.727267 -0.679278 0.0983055 + 0.650887 1.9349 -2.32232 -0.898501 -0.396874 0.187583 + 0.636569 1.9364 -2.36351 -0.866627 -0.457012 0.200243 + 0.67171 1.85164 -2.3627 -0.9307 -0.356629 0.081325 + 0.591336 2.007 -2.35139 -0.682898 -0.660177 0.312756 + 0.561598 2.0251 -2.37295 -0.632528 -0.746887 0.205107 + 0.623155 1.94846 -2.40779 -0.818553 -0.516234 0.25194 + 0.658297 1.8637 -2.40698 -0.888783 -0.449241 0.0908186 + 0.688957 1.80989 -2.34959 -0.729614 -0.672942 -0.121705 + 0.689224 1.80532 -2.26088 -0.00198846 -0.99766 -0.0683426 + 0.685856 1.80393 -2.25027 -0.14933 -0.973203 -0.174861 + 0.539496 2.03274 -2.40997 -0.662498 -0.733775 0.150567 + 0.601053 1.95609 -2.44482 -0.781668 -0.581461 0.225607 + 0.645874 1.8849 -2.45391 -0.858388 -0.493948 0.13851 + 0.672911 1.83834 -2.44066 -0.686624 -0.701432 -0.191157 + 0.685333 1.81714 -2.39374 -0.669002 -0.728987 -0.144962 + 0.453322 2.10837 -2.38597 -0.689794 -0.720783 0.0682383 + 0.534164 2.03217 -2.44998 -0.71007 -0.694369 0.116843 + 0.58036 1.97108 -2.48638 -0.776028 -0.592062 0.217355 + 0.625181 1.8998 -2.49552 -0.833791 -0.481988 0.269221 + 0.643558 1.86843 -2.48698 -0.859723 -0.427569 0.279395 + 0.618769 1.88277 -2.53462 -0.859778 -0.428671 0.277529 + 0.509063 2.05246 -2.47973 -0.713164 -0.691593 0.114444 + 0.555258 1.99137 -2.51613 -0.779658 -0.603485 0.16715 + 0.600393 1.91406 -2.54321 -0.836679 -0.504813 0.212445 + 0.605962 1.89597 -2.56588 -0.853097 -0.507039 0.123034 + 0.580257 1.93347 -2.58302 -0.829106 -0.557465 0.0426112 + 0.592234 1.92008 -2.61283 -0.809492 -0.583738 -0.0630373 + 0.481998 2.07939 -2.49098 -0.726315 -0.686515 0.0341247 + 0.535122 2.0107 -2.556 -0.797876 -0.594102 0.102163 + 0.518853 2.02675 -2.59321 -0.787628 -0.611561 0.0750756 + 0.465729 2.09545 -2.52819 -0.729191 -0.682697 0.0469641 + 0.407234 2.16024 -2.42981 -0.594599 -0.803673 -0.0237138 + 0.402023 2.16139 -2.476 -0.480142 -0.866346 0.137509 + 0.460517 2.0966 -2.57438 -0.675891 -0.725099 0.131919 + 0.501171 2.04318 -2.63445 -0.726673 -0.664823 0.173081 + 0.548847 1.974 -2.67123 -0.785996 -0.60498 0.127312 + 0.592978 1.92413 -2.62486 -0.795144 -0.59506 0.116829 + 0.345152 2.19191 -2.33487 -0.373347 -0.917638 -0.136206 + 0.36698 2.17379 -2.47308 -0.186296 -0.961549 0.201787 + 0.440632 2.10339 -2.61014 -0.434183 -0.824771 0.362268 + 0.481286 2.05005 -2.67016 -0.629525 -0.738069 0.242801 + 0.239822 2.18818 -2.24701 0.0848382 -0.993234 -0.0793073 + 0.314309 2.19617 -2.35364 -0.0478683 -0.998108 0.0385948 + 0.321355 2.17099 -2.48582 -0.0239328 -0.966633 0.255046 + 0.364216 2.11959 -2.62621 -0.156134 -0.917783 0.365098 + 0.405589 2.11579 -2.60722 -0.28078 -0.895119 0.346302 + 0.268684 2.19336 -2.36638 0.0556852 -0.996435 0.0633834 + 0.27985 2.16797 -2.5034 0.0425746 -0.963081 0.265825 + 0.322711 2.11657 -2.64377 -0.14093 -0.934372 0.327243 + 0.409211 2.06633 -2.72435 -0.33009 -0.881896 0.336599 + 0.450584 2.06243 -2.70541 -0.43858 -0.811436 0.386289 + 0.168068 2.17779 -2.27101 0.00387069 -0.992617 -0.121228 + 0.23006 2.1897 -2.37884 0.110104 -0.988137 0.107063 + 0.236111 2.15775 -2.51551 0.0530436 -0.966552 0.250924 + 0.290031 2.11226 -2.67471 -0.0791806 -0.951862 0.296123 + 0.136501 2.18334 -2.28403 -0.0499216 -0.994533 -0.0917138 + 0.186321 2.17957 -2.3909 0.0636485 -0.988647 0.13611 + 0.176997 2.15529 -2.54403 -0.153803 -0.964792 0.213357 + 0.21501 2.14396 -2.56281 -0.0813519 -0.956509 0.280129 + 0.087766 2.16911 -2.17837 -0.0710534 -0.972233 -0.222967 + 0.06815 2.17549 -2.20082 -0.0365212 -0.98288 -0.180591 + 0.09723 2.18464 -2.29607 -0.0302796 -0.998604 -0.0432892 + 0.14705 2.18087 -2.40294 -0.112111 -0.991343 0.0683447 + 0.051356 2.1418 -2.06767 -0.0580746 -0.96413 -0.258999 + 0.031741 2.14827 -2.09007 -0.108783 -0.964701 -0.239829 + 0.035064 2.17725 -2.21087 -0.0455962 -0.988311 -0.145476 + 0.064144 2.1864 -2.30612 -0.0394146 -0.997158 -0.0642082 + 0.020866 2.11114 -1.94717 -0.403464 -0.881483 -0.245368 + 0.011392 2.12379 -1.95869 -0.715407 -0.675197 -0.179729 + 0.014718 2.14764 -2.07438 -0.473125 -0.860291 -0.189876 + 0.018041 2.17662 -2.19519 -0.20174 -0.961301 -0.187621 + 0.029223 2.18812 -2.31711 -0.150187 -0.984385 -0.0918098 + 0.002151 2.0946 -1.83072 -0.349107 -0.783439 -0.514147 + 0.002151 2.1184 -1.86854 -0.59547 -0.742069 -0.307814 + 0.002151 2.13624 -1.96643 -0.419138 -0.889477 -0.182082 + 0.005477 2.16008 -2.08213 -0.418278 -0.89195 -0.171661 + 0.005477 2.17994 -2.19533 -0.132208 -0.979458 -0.15226 + -0.002113 2.09469 -1.83067 0.328957 -0.789289 -0.518468 + -0.002113 2.11848 -1.86849 -0.0235515 -0.931561 -0.36282 + -0.002113 2.13632 -1.96638 0.402711 -0.894165 -0.195686 + -0.005484 2.16008 -2.08213 0.395542 -0.897507 -0.195008 + -0.011354 2.12388 -1.95864 0.692403 -0.690699 -0.208595 + -0.002113 2.11848 -1.86849 1 0 0 + -0.031741 2.14827 -2.09007 0.1092 -0.964707 -0.239615 + -0.014725 2.14764 -2.07438 0.475505 -0.857196 -0.197762 + -0.018048 2.17662 -2.19519 0.21306 -0.961856 -0.171577 + -0.005484 2.17994 -2.19533 0.12258 -0.982895 -0.137449 + -0.051356 2.1418 -2.06767 0.0567394 -0.963986 -0.259828 + -0.06815 2.17549 -2.20082 0.0365345 -0.98286 -0.180698 + -0.035064 2.17725 -2.21087 0.0456091 -0.988311 -0.145471 + -0.087766 2.16911 -2.17837 0.0702526 -0.972457 -0.222241 + -0.1365 2.18334 -2.28403 0.0793184 -0.993959 -0.0758595 + -0.097229 2.18464 -2.29606 0.0346223 -0.997773 -0.0570121 + -0.064143 2.1864 -2.30612 0.0292856 -0.997033 -0.0711883 + -0.029223 2.18812 -2.31711 0.125127 -0.991131 -0.0447426 + -0.063854 2.19118 -2.4242 -0.00484698 -0.998882 0.0470204 + -0.016659 2.18512 -2.41971 -0.0572962 -0.99722 0.0476374 + -0.016659 2.19144 -2.31725 0.13125 -0.991112 -0.021707 + 0.01666 2.19144 -2.31725 -0.105249 -0.993016 -0.0533088 + -0.066816 2.18306 -2.56814 0.136549 -0.986821 0.0868206 + -0.019621 2.17709 -2.5636 -0.0644406 -0.997621 0.0244778 + 0.019625 2.17709 -2.5636 0.0423929 -0.997362 0.0589169 + 0.01666 2.18512 -2.41971 0.0660385 -0.996058 0.0592181 + -0.097183 2.16536 -2.59609 0.350658 -0.914514 0.201749 + -0.051781 2.15049 -2.76553 0.546643 -0.818045 0.178838 + -0.019621 2.17927 -2.78057 0.345269 -0.928424 0.137175 + 0.019625 2.17927 -2.78057 -0.362621 -0.926028 0.10478 + -0.082149 2.13271 -2.79353 0.430533 -0.87808 0.208848 + -0.049759 2.11734 -2.9173 0.617215 -0.735984 0.27816 + -0.017598 2.14611 -2.93234 0.369743 -0.864803 0.339713 + 0.017596 2.14611 -2.93234 -0.358336 -0.873881 0.328523 + 0.051785 2.15049 -2.76553 -0.512599 -0.848531 0.131292 + -0.088416 2.09802 -2.89905 0.52097 -0.798956 0.300432 + -0.056759 2.07064 -3.00603 0.557569 -0.760354 0.333136 + -0.017598 2.09191 -3.02626 0.309954 -0.849749 0.426445 + 0.017596 2.09191 -3.02626 -0.302777 -0.850348 0.430388 + -0.095416 2.05133 -2.98778 0.46486 -0.813286 0.349959 + -0.10711 2.02426 -3.03749 0.429799 -0.846141 0.315149 + -0.077283 2.03273 -3.06076 0.507711 -0.837308 0.20284 + -0.038122 2.054 -3.08099 0.428458 -0.836678 0.341166 + 0.012141 2.06244 -3.09041 -0.0630865 -0.724519 0.686361 + -0.153267 2.01711 -3.0097 0.263286 -0.879889 0.395571 + -0.14578 2.00214 -3.05077 0.322576 -0.62977 0.706635 + -0.115954 2.01052 -3.07408 0.44436 -0.870199 0.212834 + -0.177958 2.01103 -3.01177 0.0229328 -0.886177 0.462778 + -0.170472 1.99605 -3.05282 0.126099 -0.162419 0.978631 + -0.16041 1.99245 -3.05039 -0.0634353 0.826033 0.560041 + -0.128186 1.99744 -3.05683 0.0508681 0.898799 0.4354 + -0.115954 2.01052 -3.07408 0.2578 0.673148 0.693117 + -0.20748 1.99752 -3.04978 -0.122397 -0.442876 0.888189 + -0.197418 1.99401 -3.04728 0.0639059 0.805355 0.589337 + -0.138525 1.99565 -3.00174 -0.126523 0.98429 -0.12315 + -0.106301 2.00065 -3.00819 -0.0107928 0.95537 0.295214 + -0.086472 2.01224 -3.08588 -0.0123343 0.900004 0.435707 + -0.074239 2.02532 -3.10312 0.0780137 0.745587 0.661826 + -0.243512 1.99814 -3.05565 -0.0650774 -0.980629 0.184748 + -0.267675 2.00019 -3.07539 -0.278348 -0.901611 0.331088 + -0.221581 1.99605 -3.06703 -0.0759167 -0.99706 -0.0103557 + -0.197418 1.99401 -3.04728 0.547496 -0.434578 -0.715116 + -0.138525 1.99565 -3.00174 0.590231 -0.291836 -0.752635 + -0.325906 1.99664 -3.08165 0.0820147 -0.996547 -0.0129895 + -0.295996 1.99739 -3.09994 -0.460867 -0.349252 0.815858 + -0.244328 1.99334 -3.06154 -0.124772 0.929909 0.345979 + -0.322338 1.99302 -3.04417 0.367126 -0.90602 0.210586 + -0.346889 1.99167 -3.01484 0.193866 -0.973581 -0.120645 + -0.3657 1.98304 -2.9843 0.155747 -0.971517 -0.178596 + -0.319848 1.99731 -3.11521 0.0142549 -0.999747 -0.0174161 + -0.080403 2.00708 -3.02372 -0.206357 0.973241 0.101089 + -0.052009 2.01575 -3.03735 -0.774373 0.343769 -0.531196 + -0.058077 2.02101 -3.09945 -0.166707 0.877136 0.450379 + -0.048219 2.03375 -3.11253 0.0336214 -0.0285343 0.999027 + -0.021961 2.02879 -3.08313 -0.338109 0.882253 0.327586 + -0.012102 2.04153 -3.0962 -0.289705 0.0301424 0.956641 + -0.012102 2.06243 -3.0904 0.013743 -0.970612 0.240255 + -0.074239 2.02532 -3.10312 0.465547 -0.827793 0.313089 + 0.038139 2.05391 -3.08104 -0.476639 -0.807923 0.34652 + 0.056757 2.07064 -3.00603 -0.569344 -0.747539 0.342102 + 0.049757 2.11734 -2.9173 -0.625374 -0.735515 0.260626 + 0.095412 2.05133 -2.98777 -0.460017 -0.811154 0.361127 + 0.088411 2.09802 -2.89905 -0.507649 -0.811172 0.290333 + 0.082143 2.1327 -2.79352 -0.430592 -0.878062 0.2088 + 0.06682 2.18306 -2.56814 -0.107911 -0.986458 0.123515 + 0.1265 2.07915 -2.88575 -0.394793 -0.871917 0.289652 + 0.120232 2.11383 -2.78023 -0.435596 -0.869733 0.231995 + 0.097178 2.16536 -2.59608 -0.350573 -0.914514 0.201899 + 0.128721 2.16379 -2.55435 -0.257283 -0.951991 0.165884 + 0.063855 2.19118 -2.4242 -0.000975231 -0.998607 0.0527618 + 0.188124 2.03604 -2.94528 -0.150306 -0.925153 0.348569 + 0.173055 2.07101 -2.87106 -0.22875 -0.929199 0.290281 + 0.151776 2.11226 -2.73851 -0.288771 -0.927944 0.23565 + 0.229697 2.01313 -2.99641 -0.0932213 -0.95808 0.270912 + 0.243346 2.03958 -2.93603 -0.0896241 -0.936437 0.339196 + 0.216647 2.06227 -2.86133 -0.184957 -0.952038 0.243752 + 0.195368 2.10352 -2.72876 -0.198373 -0.947702 0.25002 + 0.284919 2.01668 -2.98715 -0.149152 -0.942242 0.299888 + 0.326879 2.01322 -2.96456 -0.268307 -0.900392 0.3425 + 0.288908 2.03914 -2.91625 -0.189532 -0.940151 0.283185 + 0.262209 2.06183 -2.84155 -0.116807 -0.950909 0.286581 + 0.332102 1.99229 -3.00532 -0.291332 -0.951267 0.101077 + 0.374062 1.98892 -2.98267 -0.273677 -0.581606 0.766052 + 0.372835 2.01005 -2.93147 -0.283981 -0.909524 0.303515 + 0.334864 2.03597 -2.88316 -0.238648 -0.925878 0.292913 + 0.34688 1.99167 -3.01484 -0.156409 -0.971258 -0.179428 + 0.365691 1.98304 -2.9843 -0.155845 -0.971513 -0.178535 + 0.365691 1.98304 -2.9843 -0.418863 0.366701 0.830713 + 0.098775 2.18937 -2.41326 -0.12522 -0.99134 0.0395571 + 0.233381 2.09228 -2.74749 -0.0990519 -0.957195 0.271969 + 0.26893 2.09856 -2.72197 -0.065376 -0.954634 0.290517 + 0.33765 2.06849 -2.78469 -0.215051 -0.92693 0.307496 + 0.297758 2.06811 -2.81603 -0.139598 -0.940116 0.310956 + 0.374756 2.03635 -2.85183 -0.28497 -0.910517 0.299585 + 0.419196 2.03027 -2.8191 -0.367728 -0.882284 0.293855 + 0.37033 2.07271 -2.7538 -0.270668 -0.913019 0.305181 + 0.411303 2.00472 -2.90865 -0.30848 -0.906146 0.289377 + 0.455743 1.99864 -2.87592 -0.440521 -0.871775 0.214361 + 0.48825 1.98423 -2.84176 -0.544509 -0.815323 0.19687 + 0.458077 2.02381 -2.7897 -0.48864 -0.831724 0.263563 + 0.496391 2.00565 -2.75105 -0.626191 -0.738698 0.249418 + 0.45669 1.97413 -2.95585 -0.285572 -0.866724 0.408949 + 0.481213 1.9705 -2.93378 -0.414682 -0.893845 0.170531 + 0.51372 1.95601 -2.89967 -0.735211 -0.660761 0.151195 + 0.526564 1.96599 -2.80317 -0.749502 -0.626188 0.214791 + 0.418222 1.97945 -2.97868 -0.268608 -0.616232 0.740343 + 0.436121 1.96422 -2.97889 -0.412185 -0.536924 0.736082 + 0.462167 1.9588 -2.9683 0.337973 -0.517308 0.786236 + 0.483244 1.9587 -2.99094 -0.099222 -0.98363 0.150426 + 0.507767 1.95508 -2.96886 -0.21824 -0.9754 -0.0310735 + 0.508552 1.94894 -2.92703 -0.919444 0.386207 0.0739347 + 0.391961 1.97369 -2.9829 -0.119741 -0.155146 0.980608 + 0.365691 1.98304 -2.9843 -0.0994297 -0.131447 0.986324 + 0.517137 1.95856 -3.00009 -0.0538259 -0.990492 -0.126603 + 0.517922 1.95242 -2.95825 -0.109137 -0.98378 -0.142361 + 0.508552 1.94894 -2.92703 -0.109161 -0.98378 -0.142338 + 0.571224 1.94331 -2.66948 -0.79599 -0.587679 0.145031 + 0.527093 1.99318 -2.71585 -0.791332 -0.451765 0.411949 + 0.556864 1.94751 -2.74135 -0.744495 -0.641418 0.185232 + 0.609047 1.90942 -2.58578 -0.474647 -0.879605 0.0317055 + 0.700579 1.79093 -2.19915 -0.144659 -0.952667 -0.267395 + 0.717862 1.79902 -2.24636 -0.19776 -0.9714 -0.131429 + 0.804427 1.78079 -2.30399 -0.407845 -0.913024 -0.00711501 + 0.731574 1.796 -2.30293 -0.220019 -0.974287 0.0485341 + 0.736939 1.79212 -2.32521 -0.171861 -0.901383 0.397458 + 0.739461 1.78442 -2.33447 -0.183961 -0.938257 0.292972 + 0.741214 1.78393 -2.34562 -0.189176 -0.976166 -0.106364 + 0.702936 1.8023 -2.31744 0.536282 -0.760112 0.366922 + 0.705458 1.7946 -2.32671 -0.346331 -0.913361 0.214073 + 0.707916 1.79867 -2.37156 -0.373513 -0.908516 -0.187316 + 0.743874 1.78945 -2.37079 -0.203501 -0.961387 -0.185264 + 0.777424 1.78561 -2.40034 -0.261454 -0.949836 -0.171622 + 0.701834 1.80185 -2.37086 -0.531235 -0.834439 -0.146633 + 0.678992 1.83517 -2.44137 -0.470099 -0.831225 -0.296768 + 0.710576 1.80419 -2.39672 -0.346261 -0.851567 -0.39362 + 0.661899 1.8537 -2.45587 -0.45384 -0.76975 -0.448903 + 0.693482 1.82274 -2.41123 -0.357646 -0.724737 -0.588936 + 0.715772 1.8243 -2.42795 -0.417218 -0.773273 -0.477471 + 0.766587 1.80198 -2.44288 -0.420047 -0.840071 -0.343281 + 0.66167 1.87441 -2.44634 -0.405396 -0.773493 -0.487199 + 0.750759 1.86051 -2.52226 -0.472392 -0.813009 -0.340386 + 0.63938 1.87276 -2.42967 -0.272151 -0.793003 -0.545051 + 0.64211 1.89408 -2.4698 -0.166273 -0.924298 -0.343551 + 0.731199 1.88017 -2.54571 -0.474357 -0.869574 -0.137207 + 0.621039 1.88748 -2.46078 0.0885132 -0.891278 -0.444735 + 0.608231 1.90077 -2.492 -0.04725 -0.973987 -0.221623 + 0.63728 1.90316 -2.52174 -0.182826 -0.975969 -0.118569 + 0.6372 1.90475 -2.54868 -0.228304 -0.973585 -0.00300028 + 0.604146 1.91391 -2.55595 0.150155 -0.974546 -0.166474 + 0.642102 1.90017 -2.57856 -0.254315 -0.963386 0.0849251 + 0.592234 1.92008 -2.61283 0.629907 -0.746916 -0.212916 + 0.592978 1.92413 -2.62486 0.629913 -0.746911 -0.212917 + 0.980616 1.61008 -1.44111 0.759422 0.366883 0.537284 + 1.00949 1.57435 -1.40242 -0.0864719 0.698867 0.710005 + 1.04089 1.60615 -1.42989 -0.101678 0.632006 0.768264 + 0.981022 1.60948 -1.42407 0.946317 -0.023956 -0.322352 + 1.00949 1.57435 -1.40242 0.775835 0.630926 0.00358046 + 1.0099 1.57375 -1.38538 0.755706 -0.609669 -0.239191 + 1.00949 1.57435 -1.40242 0.465199 -0.884194 -0.0423172 + -0.915918 1.85125 -0.681822 -0.971441 -0.2338 -0.0405009 + -0.920037 1.95183 -0.55663 -0.995019 -0.0961423 0.0263379 + -0.92271 1.96082 -0.624798 -0.999424 -0.0187193 0.028308 + -0.924635 2.00506 -0.519026 -0.954455 0.0669949 -0.290736 + -0.927308 2.01413 -0.587145 -0.994889 -0.081764 -0.0592547 + -0.927079 2.0888 -0.602681 -0.978241 0.0251031 -0.205949 + -0.920312 2.0305 -0.651286 -0.994058 0.0651446 -0.087207 + -0.929869 1.89636 -0.656157 -0.997049 -0.0766943 -0.00330807 + -0.940043 2.06386 -0.530873 -0.954912 -0.151628 -0.255248 + -0.939814 2.13853 -0.546399 -0.945401 -0.0122623 -0.325679 + -0.917013 2.20864 -0.606034 -0.919853 0.121785 -0.37288 + -0.910245 2.15041 -0.65459 -0.938109 0.168784 -0.302428 + -0.948391 2.01676 -0.468093 -0.468949 -0.844946 -0.257204 + -0.963799 2.07547 -0.479989 -0.884744 -0.118253 -0.450826 + -0.964867 2.1885 -0.493562 -0.913728 -0.0286139 -0.405318 + -0.936145 2.27055 -0.554076 -0.878188 0.0606318 -0.474457 + -0.910296 1.95936 -0.588676 -0.757762 0.463024 -0.459788 + -1.42465 1.65393 0.554738 0.158651 -0.348461 -0.923799 + -1.33145 1.63145 0.543685 -0.0662636 -0.755799 -0.651442 + -1.36103 1.64833 0.656244 -0.44662 -0.894571 0.0165496 + -1.42107 1.71157 0.51291 -0.341219 -0.537438 -0.771187 + -1.32788 1.68917 0.501908 -0.499495 -0.749325 -0.43476 + -1.24213 1.58922 0.591819 0.152189 -0.58564 -0.796156 + -1.4907 1.74001 0.544657 -0.49971 -0.517585 -0.694547 + -1.47947 1.78026 0.487332 -0.513283 -0.578693 -0.633763 + -1.3416 1.70969 0.431165 -0.247209 -0.720373 -0.648036 + -1.25585 1.60974 0.521077 -0.733074 -0.677962 -0.0544878 + -1.24213 1.58922 0.591819 -0.733074 -0.677962 -0.0544896 + -1.55876 1.75007 0.57343 -0.274106 0.0021195 -0.961697 + -1.55474 1.7939 0.567707 -0.574034 -0.467154 -0.672497 + -1.5491 1.8087 0.519079 -0.558101 -0.675418 -0.48201 + -1.48119 1.81453 0.465381 -0.403333 -0.407991 -0.819064 + -1.34332 1.74387 0.409165 0.172048 -0.0571056 -0.983432 + -1.54673 1.70181 0.56561 -0.125475 0.235197 -0.963815 + -1.72344 1.78891 0.607946 0.0614365 0.200849 -0.977694 + -1.73866 1.86406 0.624396 -0.0594945 -0.0861165 -0.994507 + -1.62279 1.80396 0.596478 -0.258931 -0.0251385 -0.965569 + -1.63474 1.85424 0.577997 -0.531421 -0.600955 -0.597029 + -1.5057 1.64402 0.533103 0.00407243 0.4744 -0.8803 + -1.67239 1.66973 0.591376 -0.0118551 0.3349 -0.942179 + -1.71141 1.74066 0.600128 -0.0154851 0.123927 -0.99217 + -1.84873 1.84604 0.584596 0.346673 0.132744 -0.928545 + -1.55433 1.51188 0.462787 0.0783771 0.182104 -0.98015 + -1.78626 1.7063 0.586033 0.116068 0.148598 -0.982063 + -1.82528 1.77714 0.594734 0.284094 0.125119 -0.950598 + -1.47328 1.52179 0.484423 0.576575 0.04319 -0.815902 + -1.4852 1.45922 0.489986 0.674998 0.159123 -0.720457 + -1.6279 1.51032 0.455686 -0.361603 -0.319779 -0.875777 + -1.58157 1.5563 0.524846 0.0200238 0.749896 -0.661252 + -1.36103 1.64833 0.656244 0.718026 -0.156207 -0.678261 + -1.37295 1.58577 0.661806 0.906335 -0.102093 -0.410041 + -1.4117 1.40588 0.573584 0.890971 0.0662854 -0.449195 + -1.44611 1.34345 0.496517 0.862761 0.182988 -0.471338 + -1.51962 1.39679 0.412919 0.598471 0.554336 -0.578398 + -1.60378 1.4514 0.414339 0.252118 0.685964 -0.682561 + -1.6785 1.53268 0.464751 -0.0695768 0.427526 -0.901321 + -1.35441 1.57088 0.718197 0.895974 -0.14791 -0.418751 + -1.39315 1.39099 0.629975 0.925882 -0.376372 0.0329614 + -1.43263 1.30966 0.516243 0.751217 -0.630082 -0.196646 + -1.51069 1.33656 0.353853 0.736424 0.451479 -0.503832 + -1.42226 1.38717 0.695585 0.901474 -0.432822 -0.00318933 + -1.37611 1.46992 0.725658 0.613776 -0.264279 -0.743933 + -1.38745 1.42682 0.758114 0.291409 -0.549019 -0.783364 + -1.43361 1.34407 0.72804 0.871131 -0.370591 -0.322169 + -1.4716 1.28252 0.647242 0.807773 -0.588772 0.0291533 + -1.46161 1.25622 0.403406 0.971141 -0.229602 0.0645576 + -1.47147 1.2329 0.468794 0.970547 -0.240874 -0.0042273 + -1.33033 1.32237 0.775818 -0.0139062 -0.260345 -0.965415 + -1.36663 1.3271 0.796625 -0.0331493 -0.312713 -0.949269 + -1.40545 1.33244 0.772376 0.608169 -0.300587 -0.734696 + -1.42922 1.26703 0.791681 0.265653 -0.4725 -0.84034 + -1.45738 1.27865 0.747345 0.628655 -0.713754 -0.308783 + -1.30379 1.01935 0.842075 -0.701042 -0.274019 -0.658372 + -1.3401 1.02416 0.862932 -0.26384 -0.291012 -0.91962 + -1.39111 1.13398 0.83733 0.120392 -0.243485 -0.962404 + -1.38463 1.23273 0.810888 0.449948 -0.263087 -0.853424 + -1.25658 1.00816 0.761047 -0.816984 -0.227274 -0.529984 + -1.23493 0.81986 0.848598 -0.3394 -0.739154 -0.581773 + -1.28214 0.831044 0.929626 -0.572969 -0.185011 -0.798422 + -1.34743 0.893034 0.898256 0.0404228 -0.329513 -0.943285 + -1.27955 1.43341 0.724495 -0.787108 -0.264702 -0.55713 + -1.2275 1.01816 0.717136 -0.668107 -0.322756 -0.670419 + -1.19119 0.851915 0.802477 0.177938 -0.726068 -0.664201 + -1.19143 0.74391 1.06795 0.121434 -0.810634 -0.572823 + -1.32722 0.760374 0.965028 -0.103016 -0.722529 -0.683622 + -1.37295 1.58577 0.661806 -0.603513 -0.590461 -0.535843 + -1.49721 1.30268 0.373529 0.902449 0.118537 -0.414167 + -1.26058 1.67037 0.479465 0.748008 -0.111949 -0.654179 + -1.27974 1.74305 0.504183 0.532834 -0.346579 -0.771991 + -1.19027 1.54224 0.680788 0.641162 -0.279753 -0.714598 + -1.25585 1.60974 0.521077 0.855809 -0.245671 -0.455232 + -1.36248 1.81655 0.433883 0.428058 0.603827 -0.672428 + -1.40002 1.84843 0.43166 0.645561 0.762778 0.0376799 + -1.51874 1.84632 0.463109 -0.371993 -0.682685 -0.628937 + -1.40002 1.84843 0.43166 -0.31818 -0.808407 -0.495216 + -1.6096 1.89578 0.469648 -0.532898 -0.672036 -0.514185 + -1.49371 1.87369 0.4009 -0.342336 -0.911483 -0.228044 + -1.45697 1.86202 0.356314 -0.354889 -0.929502 0.100401 + -1.36329 1.83676 0.387075 -0.505364 -0.851676 0.138762 + -1.26813 1.77022 0.467517 -0.65214 -0.740768 -0.161171 + -1.62911 1.86903 0.52937 -0.601119 -0.697692 -0.389719 + -1.71663 1.98444 0.482682 -0.280927 -0.831833 -0.47868 + -1.70041 2.01636 0.421399 -0.302824 -0.874058 -0.379895 + -1.58458 1.92315 0.407439 -0.55551 -0.750692 -0.357589 + -1.4805 1.86989 0.323886 -0.530858 -0.844972 -0.0649066 + -1.73614 1.95778 0.542455 -0.386941 -0.789641 -0.476177 + -1.85217 2.01488 0.387354 -0.221925 -0.975061 -0.0020898 + -1.82237 2.0239 0.372136 0.209587 -0.926501 -0.312521 + -1.80615 2.05582 0.310853 0.260895 -0.927769 -0.266794 + -1.68151 2.01991 0.357853 -0.516562 -0.856238 0.00441094 + -1.75061 1.91433 0.605915 -0.198178 -0.546767 -0.813493 + -1.86303 1.97649 0.569659 0.0790728 -0.655159 -0.751342 + -1.84856 2.01994 0.506199 -0.282637 -0.901608 -0.327445 + -1.86395 1.92119 0.601046 0.292483 -0.153384 -0.943889 + -1.9859 2.03839 0.470843 0.378025 -0.690931 -0.616208 + -1.97685 2.07276 0.415306 0.134482 -0.934255 -0.330275 + -1.98985 2.08774 0.344357 -0.133822 -0.991001 -0.00308779 + -1.86155 2.03492 0.43525 -0.59574 -0.802765 0.0257306 + -1.97939 1.91008 0.527281 0.55678 -0.0870311 -0.826088 + -1.98682 1.983 0.502179 0.573622 -0.319895 -0.754073 + -2.10785 2.01579 0.369994 0.72488 -0.523015 -0.448336 + -2.09749 2.04099 0.300132 0.612565 -0.7504 -0.248322 + -2.08845 2.07545 0.244645 0.631907 -0.753134 -0.18298 + -1.95594 1.84118 0.537418 0.318832 -0.267833 -0.909182 + -2.11899 1.92745 0.436187 0.487515 -0.601926 -0.632466 + -2.10042 1.94287 0.395095 0.480734 -0.688386 -0.543158 + -2.21448 1.97213 0.146212 0.340431 -0.938293 -0.0609351 + -2.20412 1.99725 0.076298 0.422197 -0.904346 -0.0625178 + -1.92435 1.7883 0.580401 0.0339354 -0.222883 -0.974254 + -2.0874 1.87467 0.479219 0.111452 -0.663774 -0.739582 + -2.25096 1.97584 0.273977 -0.0299687 -0.985607 -0.166376 + -2.23239 1.99125 0.232885 -0.118591 -0.992596 -0.026269 + -1.73074 1.64424 0.584322 0.0741838 0.316941 -0.94554 + -1.86882 1.72633 0.57874 0.513882 0.526135 -0.677574 + -1.84301 1.69247 0.546183 0.315118 0.669452 -0.672706 + -1.89362 1.71493 0.555299 0.0694684 0.222082 -0.97255 + -2.06103 1.82402 0.535744 0.404489 -0.204117 -0.891474 + -1.68095 1.58851 0.550251 0.225784 0.686037 -0.691647 + -1.65514 1.55474 0.517745 0.280253 0.801447 -0.528338 + -2.11446 1.66752 0.536 -0.668628 -0.425153 0.610067 + -2.07944 1.69408 0.561203 -0.540933 -0.521962 0.659506 + -2.17596 1.71816 0.505099 -0.520638 -0.116165 0.845838 + -2.06416 1.6055 0.555424 -0.736878 -0.396759 0.547351 + -2.02915 1.63206 0.580626 -0.619384 -0.25349 0.743038 + -1.99323 1.67405 0.641699 -0.679049 -0.496245 0.540956 + -2.03536 1.72045 0.660326 -0.396191 -0.82836 0.396045 + -2.09294 1.7091 0.57958 -0.341504 -0.883916 0.31948 + -2.17596 1.71816 0.505099 -0.49317 -0.804002 0.33221 + -2.05331 1.58948 0.539777 -0.539813 -0.340268 -0.769948 + -2.03335 1.52095 0.551873 -0.928457 -0.2446 0.279532 + -1.97254 1.54083 0.602234 -0.716622 -0.156022 0.679787 + -1.93662 1.58282 0.663307 -0.960484 -0.0456554 0.274564 + -2.08416 1.6346 0.53063 -0.525064 -0.671323 -0.5231 + -1.92623 1.52555 0.55051 -0.171319 -0.160066 -0.972126 + -2.0225 1.50484 0.536176 -0.468757 -0.0323017 -0.882736 + -2.02235 1.43909 0.554258 -0.978711 -0.187128 0.084304 + -1.96154 1.45906 0.604668 -0.93673 0.228917 0.264827 + -2.14566 1.68514 0.49968 -0.472258 -0.603201 -0.642744 + -1.95708 1.57075 0.541413 -0.064221 -0.166665 -0.98392 + -1.81379 1.44762 0.531278 -0.346612 -0.0335845 -0.937407 + -1.87226 1.48096 0.546936 -0.240218 -0.125874 -0.962523 + -0.798114 2.04695 0.249812 0.582907 -0.482716 -0.653609 + -0.905691 2.11918 0.074307 0.678748 0.724874 -0.117722 + -0.846312 2.08542 0.208784 0.87355 0.292197 -0.38927 + -0.738912 2.12985 0.321833 0.667648 0.0013291 -0.744476 + -0.690714 2.09138 0.362861 0.713596 -0.0775135 -0.696256 + -0.675598 2.02754 0.398431 0.658085 -0.394429 -0.641366 + -0.815225 2.03678 0.260635 0.448631 -0.71777 -0.532481 + -0.905691 2.11918 0.074307 0.10775 -0.933094 -0.343112 + -0.804951 2.14597 0.266304 0.718092 0.128867 -0.683913 + -0.579075 2.25846 0.43007 0.496331 -0.498872 -0.71048 + -0.547216 2.19947 0.491447 0.522684 -0.400135 -0.75279 + -0.5321 2.13554 0.526966 0.50735 -0.165553 -0.845688 + -0.645114 2.2745 0.37449 0.588502 -0.17204 -0.789979 + -0.4687 2.2542 0.479834 -0.365837 -0.796584 -0.481267 + -0.9191 1.77532 -0.757703 -0.921344 0.26709 0.282469 + -0.938901 1.7913 -0.829386 -0.967888 0.120528 0.220604 + -0.927779 1.73612 -0.733023 -0.859058 0.395144 0.325392 + -0.919516 1.81726 -0.779352 -0.970921 0.0678472 0.229586 + -0.939318 1.83324 -0.851034 -0.993218 0.116063 0.00684519 + -0.945445 1.76854 -0.856961 -0.99584 0.0460393 0.0786314 + -0.927779 1.73612 -0.733023 -0.982974 0.0857149 0.162529 + -0.942828 1.68755 -0.866885 -0.998141 -0.0411133 0.04499 + -0.906177 1.85878 -0.71386 -0.977632 -0.0166357 0.209664 + -0.914713 1.86018 -0.745692 -0.99153 -0.0836206 0.0993798 + -0.926983 1.90829 -0.818027 -0.993211 0.112422 0.0299023 + -0.908131 1.97388 -0.863228 -0.94228 0.295835 -0.156816 + -0.920465 1.89883 -0.896237 -0.96343 0.259979 -0.0649091 + -0.935194 1.85775 -0.932285 -0.962114 0.265406 0.0624215 + -0.947421 1.79744 -0.917223 -0.994183 0.101227 0.0367764 + -0.92218 1.95121 -0.784367 -0.991157 0.125322 0.0436205 + -0.889057 2.0438 -0.824329 -0.920411 0.323342 -0.219759 + -0.853357 2.06532 -0.916001 -0.904602 0.40171 -0.142567 + -0.881246 1.99862 -0.951473 -0.921489 0.379427 -0.0830305 + -0.895974 1.95763 -0.987472 -0.920106 0.390474 0.0305702 + -0.911212 2.02207 -0.740895 -0.968058 0.180607 -0.17391 + -0.87809 2.11465 -0.780856 -0.905549 0.336539 -0.258307 + -0.834284 2.13524 -0.87711 -0.877909 0.411532 -0.244781 + -0.794945 2.19464 -0.931195 -0.908282 0.409743 -0.0844633 + -0.825763 2.12504 -0.97444 -0.912184 0.409762 -0.00392631 + -0.928664 1.90521 -0.720078 -0.967429 -0.0535973 -0.247402 + -0.927471 1.96604 -0.682646 -0.995367 0.0887608 -0.0369671 + -0.910019 2.0829 -0.703454 -0.948029 0.185944 -0.258197 + -0.867241 2.18075 -0.73473 -0.861721 0.329599 -0.385748 + -0.808844 2.2017 -0.834823 -0.854692 0.437788 -0.279004 + -0.867467 2.24817 -0.685917 -0.821212 0.306916 -0.481055 + -0.797996 2.26779 -0.788689 -0.816448 0.413034 -0.403504 + -0.742346 2.33211 -0.841297 -0.895377 0.381106 -0.230344 + -0.769506 2.2611 -0.8889 -0.896867 0.427295 -0.114234 + -0.879963 2.30651 -0.635553 -0.798769 0.254947 -0.544951 + -0.790321 2.32833 -0.73795 -0.783134 0.401007 -0.475284 + -0.734671 2.39274 -0.790508 -0.835662 0.436833 -0.332934 + -0.723082 2.36367 -0.89277 -0.952793 0.234904 0.19237 + -0.750241 2.29266 -0.940374 -0.93994 0.240587 0.242137 + -0.899095 2.36842 -0.583594 -0.744534 0.122759 -0.6562 + -0.802816 2.38658 -0.687645 -0.712985 0.287553 -0.639504 + -0.724962 2.45691 -0.737052 -0.775946 0.283106 -0.563701 + -0.683658 2.44041 -0.844285 -0.952871 0.272195 0.133969 + -0.943494 2.41256 -0.535238 -0.757947 0.0332098 -0.65147 + -0.843535 2.43289 -0.63406 -0.688584 0.153698 -0.708681 + -0.76568 2.50322 -0.683475 -0.628235 0.296858 -0.719164 + -0.673949 2.50458 -0.790829 -0.965184 0.246424 -0.0877197 + -0.961197 2.32062 -0.501188 -0.859715 -0.0457565 -0.50872 + -0.98843 2.44837 -0.481262 -0.618629 -0.390629 -0.681694 + -0.887934 2.47711 -0.585654 -0.605344 -0.0538717 -0.794139 + -0.798624 2.54457 -0.643083 -0.510764 0.1197 -0.851347 + -0.640952 2.57393 -0.734741 -0.958912 0.202906 -0.198285 + -0.989645 2.23551 -0.440186 -0.916228 -0.0672446 -0.394974 + -1.00613 2.35642 -0.447203 -0.88277 -0.081908 -0.46261 + -1.02405 2.3753 -0.403114 -0.918116 -0.253661 -0.304499 + -1.04836 2.45826 -0.454405 -0.665428 -0.475437 -0.575469 + -0.960276 2.50357 -0.553475 -0.434735 -0.480003 -0.761972 + -0.988577 2.12248 -0.426613 -0.934876 -0.0052776 -0.354934 + -1.00756 2.25448 -0.396038 -0.971597 -0.094175 -0.217095 + -1.01663 2.3143 -0.349446 -0.951964 -0.210719 -0.222177 + -1.03504 2.35087 -0.329394 -0.815363 -0.303482 -0.493033 + -1.04245 2.41196 -0.383011 -0.765655 -0.543822 -0.343555 + -1.00104 1.98792 -0.415936 -0.496606 -0.799198 -0.338622 + -1.018 2.02083 -0.35915 -0.965877 -0.258968 -0.00407133 + -1.00554 2.1554 -0.369826 -0.967887 0.00481509 -0.251339 + -0.991923 2.00152 -0.299495 -0.195315 -0.878073 0.436853 + -1.00945 2.09254 -0.276952 -0.968933 -0.19708 0.149428 + -1.01462 2.2153 -0.323177 -0.989167 -0.0561285 -0.135639 + -0.910296 1.95936 -0.588676 -0.140828 -0.910463 0.388876 + -0.983372 2.07331 -0.217248 -0.868739 -0.417688 0.266137 + -1.02436 2.14526 -0.215457 -0.94804 -0.314095 -0.0506466 + -1.02953 2.26801 -0.26168 -0.851984 -0.313542 -0.419303 + -1.06899 2.33969 -0.284833 -0.692449 -0.464131 -0.552355 + -1.08109 2.40086 -0.315784 -0.531204 -0.658702 -0.532855 + -0.985891 2.14995 -0.042786 -0.0406279 -0.98201 0.184409 + -1.0088 2.10705 -0.139893 -0.602097 -0.76224 0.237632 + -1.03829 2.21156 -0.143494 -0.863502 -0.504267 -0.00885052 + -1.08053 2.27656 -0.209287 -0.748895 -0.537308 -0.387887 + -1.11999 2.34824 -0.23243 -0.550238 -0.587228 -0.593635 + -0.905691 2.11918 0.074307 -0.559876 -0.810866 0.170398 + -0.939812 1.7023 0.659365 0.856444 0.472057 -0.208964 + -1.02368 1.78898 0.511438 0.875293 0.159408 -0.456564 + -1.07094 1.86141 0.481375 0.853731 0.506002 -0.122905 + -1.07689 1.85796 0.419351 0.895538 0.126612 -0.426592 + -1.12415 1.9304 0.389289 0.870411 0.488948 0.0575688 + -1.17438 2.06327 0.257947 0.900989 0.163297 -0.401936 + -1.18352 2.10173 0.282137 0.975216 0.190671 -0.112247 + -1.1333 1.96885 0.413481 0.869201 0.494442 0.00400529 + -1.07094 1.86141 0.481375 0.466296 -0.263077 -0.844606 + -1.08471 1.76643 0.448892 0.644822 -0.371989 -0.667704 + -1.19886 1.96262 0.243077 0.696707 -0.225157 -0.681105 + -1.26321 2.0167 0.155611 0.652707 -0.227057 -0.722786 + -1.23873 2.11735 0.170481 0.741797 -0.0562659 -0.66826 + -0.963729 1.67169 0.607384 0.748538 -0.209375 -0.629168 + -1.08988 1.68747 0.501654 0.334339 -0.70916 -0.620733 + -1.20667 1.87117 0.272668 0.581034 -0.372146 -0.723814 + -1.30139 1.91958 0.191021 0.260718 -0.473027 -0.841588 + -0.879863 1.58501 0.755312 0.511077 -0.277831 -0.813394 + -0.897106 1.49916 0.727805 0.499125 -0.113589 -0.859053 + -0.9689 1.59273 0.660146 0.26412 -0.489588 -0.83099 + -1.11069 1.64926 0.56604 -0.104398 -0.871487 -0.479177 + -1.25634 1.77205 0.302146 0.280348 -0.705549 -0.65085 + -0.939812 1.7023 0.659365 0.88661 0.080599 -0.455441 + -1.02369 1.81801 0.51875 0.389526 -0.319725 -0.863739 + -2.01921 2.08801 0.063897 0.891652 -0.363071 -0.270437 + -2.05462 2.14025 -0.122982 0.706738 -0.521509 -0.478068 + -2.02297 2.22611 -0.133903 0.307269 -0.652945 -0.692278 + -2.11 2.13872 -0.166128 -0.0225143 -0.134814 -0.990615 + -2.07834 2.22467 -0.176999 -0.234222 -0.0311514 -0.971684 + -1.99525 2.25385 -0.159755 0.368819 -0.473768 -0.799698 + -2.00431 2.06925 -0.007613 -0.435439 -0.782534 -0.445009 + -2.01921 2.08801 0.063897 -0.963397 -0.228058 -0.140913 + -2.1564 2.07049 -0.153557 0.272909 -0.420879 -0.86509 + -2.21245 2.05771 -0.140023 -0.285395 0.204076 -0.936431 + -2.15347 2.13098 -0.122723 -0.474097 0.330843 -0.81595 + -2.11643 2.21115 -0.126387 -0.731772 0.290711 -0.616439 + -2.0413 2.30484 -0.180664 -0.33293 -0.033589 -0.942353 + -2.08449 2.10682 -0.082678 0.622944 -0.738172 -0.258925 + -2.20285 2.00328 -0.128748 0.393814 -0.715142 -0.577479 + -2.25885 1.98948 -0.127453 0.0654146 -0.410799 -0.909376 + -2.28707 2.03025 -0.12807 0.0726322 0.0373063 -0.996661 + -2.22809 2.10343 -0.110819 -0.108063 0.451365 -0.885772 + -2.04908 2.05457 0.10421 -0.394549 -0.904236 -0.163367 + -2.01921 2.08801 0.063897 0.445365 -0.822987 -0.352623 + -1.96677 2.0257 0.223427 -0.477639 -0.864623 0.155847 + -1.97616 2.04573 0.271322 -0.576478 -0.770909 0.270873 + -2.06277 2.09659 0.177242 -0.0374822 -0.993785 0.104814 + -2.08449 2.10682 -0.082678 -0.913318 -0.402732 0.0604703 + -2.13094 2.03961 -0.057868 0.669738 -0.722122 -0.173179 + -1.95187 2.00685 0.151865 -0.29087 -0.949658 -0.116377 + -1.92207 2.01587 0.136647 0.26746 -0.928651 -0.257044 + -1.90933 2.03896 0.068049 0.0729942 -0.964419 -0.254103 + -2.01921 2.08801 0.063897 -0.772591 -0.634878 0.00569207 + -1.9766 2.09699 -0.033465 -0.181133 -0.798418 -0.574212 + -1.96385 2.12008 -0.10206 -0.502451 -0.590536 -0.631514 + -1.88992 2.05432 0.003641 0.175826 -0.91176 -0.371186 + -1.78673 2.07109 0.246399 -0.195834 -0.98047 0.0180721 + -1.95888 2.33143 -0.179713 -0.160192 -0.365857 -0.916781 + -1.91703 2.39073 -0.221035 -0.199487 -0.259334 -0.944961 + -1.922 2.17939 -0.143383 -0.0811221 -0.538241 -0.838878 + -1.84277 2.10366 -0.031417 0.0408099 -0.879235 -0.474636 + -2.00493 2.38241 -0.200621 -0.402876 -0.110237 -0.908591 + -1.98115 2.45802 -0.212777 -0.401571 0.0593372 -0.913904 + -1.84323 2.43208 -0.244655 -0.338361 -0.225106 -0.913695 + -1.87485 2.22873 -0.178439 -0.194052 -0.47996 -0.855559 + -2.08929 2.29985 -0.133025 -0.702724 0.137258 -0.698097 + -2.06551 2.37554 -0.14513 -0.649134 -0.0154919 -0.760516 + -2.06646 2.47435 -0.164459 -0.589917 -0.069556 -0.804463 + -1.90735 2.49937 -0.236397 -0.324489 -0.273372 -0.905524 + -1.78377 2.48357 -0.285444 -0.551084 -0.389166 -0.738144 + -2.18137 2.18104 -0.066045 -0.610975 0.487603 -0.623661 + -2.15423 2.26975 -0.072682 -0.746867 0.132608 -0.651617 + -2.14124 2.36422 -0.079906 -0.739422 -0.0379092 -0.672174 + -2.1422 2.46302 -0.099236 -0.724802 -0.136636 -0.675272 + -2.01558 2.518 -0.205467 -0.451924 -0.352835 -0.819312 + -2.22713 2.13299 -0.089216 -0.106504 0.701112 -0.705052 + -2.23721 2.19597 -0.019299 -0.401947 0.577828 -0.710319 + -2.20792 2.29565 0.00465 -0.754194 0.195071 -0.627008 + -2.19493 2.39012 -0.002574 -0.82334 -0.045999 -0.565681 + -2.19766 2.49044 -0.027537 -0.819587 -0.122525 -0.559701 + -2.34943 2.14379 -0.120915 0.20603 0.815703 -0.540537 + -2.28297 2.148 -0.04242 0.0294366 0.754191 -0.655995 + -2.39238 2.16494 -0.055148 0.0178468 0.996255 -0.0846045 + -2.29868 2.23092 0.067564 -0.715059 0.543131 -0.440113 + -2.26939 2.33052 0.091463 -0.780482 0.159953 -0.60437 + -2.35039 2.11423 -0.142518 0.187993 0.291966 -0.937771 + -2.45884 2.16073 -0.133652 0.464929 0.746119 -0.4766 + -2.34741 1.98765 -0.137876 0.0395935 -0.34346 -0.938332 + -2.41073 2.07162 -0.152324 0.417677 0.0289103 -0.908135 + -2.47436 2.13853 -0.208818 0.692414 0.4631 -0.553264 + -2.57149 2.19664 -0.189667 0.368222 0.929039 -0.0360333 + -2.41388 1.93289 -0.102239 0.117337 -0.726642 -0.676922 + -2.46026 1.99781 -0.192677 0.407568 -0.490041 -0.770551 + -2.52389 2.06472 -0.24917 0.562199 -0.435811 -0.702852 + -2.57622 2.1621 -0.327435 0.864073 0.345566 -0.366008 + -2.58701 2.17446 -0.264832 0.691813 0.691644 -0.20742 + -2.32532 1.93473 -0.091815 0.282242 -0.835506 -0.471454 + -2.4752 1.90394 -0.065482 -0.184357 -0.928635 -0.321946 + -2.52159 1.96885 -0.155921 -0.216449 -0.819189 -0.531112 + -2.57747 2.04533 -0.243775 -0.224516 -0.830237 -0.510195 + -2.55172 2.0625 -0.290718 0.351439 -0.666144 -0.657832 + -2.26235 1.96594 -0.076878 0.466506 -0.883362 -0.0452016 + -2.38482 1.89739 -0.039944 0.229607 -0.969668 -0.0838089 + -2.52786 1.90878 0.011527 -0.324616 -0.940898 -0.0966134 + -2.59692 1.97242 -0.081094 -0.513403 -0.812734 -0.275465 + -2.6528 2.0488 -0.168998 -0.570032 -0.742784 -0.351191 + -2.15662 2.01839 0.009485 0.535389 -0.844412 -0.0181095 + -2.30984 1.9448 -0.010065 0.423462 -0.896017 0.133542 + -2.43748 1.90232 0.037117 0.135359 -0.982911 0.124752 + -2.56208 1.9173 0.096568 -0.446336 -0.893011 0.0575868 + -2.33788 1.95024 0.068513 0.304299 -0.936248 0.175618 + -2.46552 1.90768 0.115641 0.123459 -0.980982 0.149772 + -2.56497 1.93226 0.183856 -0.439401 -0.891893 0.107025 + -2.63114 1.98094 0.00394 -0.683884 -0.726283 -0.0693862 + -2.69489 2.06219 -0.099988 -0.756224 -0.640445 -0.133998 + -2.35579 1.96937 0.155186 0.250707 -0.952246 0.174281 + -2.46841 1.92264 0.20293 0.153463 -0.981928 0.110753 + -2.55743 1.93752 0.279154 -0.486431 -0.868117 0.0987784 + -2.63891 1.99185 0.10725 -0.72968 -0.682228 0.0461766 + -2.70266 2.07318 0.003376 -0.822254 -0.56912 0.000746165 + -2.35464 1.97552 0.240132 0.23627 -0.968858 0.0740969 + -2.46726 1.92879 0.287876 0.171688 -0.98125 -0.0875881 + -2.51789 1.91892 0.360977 -0.36936 -0.927258 -0.061358 + -2.63136 1.99719 0.2026 -0.729722 -0.675936 0.103038 + -2.69203 2.06454 0.153948 -0.832593 -0.545824 0.0941518 + -2.36393 1.98662 0.325503 0.306812 -0.943564 -0.124715 + -2.42772 1.91018 0.369699 0.270018 -0.903994 -0.331491 + -2.49455 1.90443 0.452073 -0.465108 -0.883359 -0.0578806 + -2.62208 2.00313 0.305904 -0.721649 -0.685928 0.0934048 + -2.68276 2.07057 0.257303 -0.869396 -0.482955 0.104423 + -2.26025 1.98694 0.35935 -0.217413 -0.94835 -0.231006 + -2.3478 1.96087 0.399315 0.250601 -0.780095 -0.573281 + -2.4116 1.88434 0.44346 0.0186851 -0.913316 -0.406823 + -2.45006 1.8742 0.527831 -0.396996 -0.895642 -0.20055 + -2.59874 1.98865 0.397 -0.680365 -0.732865 -0.00338486 + -2.23387 1.93629 0.415874 -0.0206697 -0.684186 -0.729015 + -2.3475 1.89328 0.451581 0.0304835 -0.718822 -0.694525 + -2.36711 1.85411 0.519218 -0.263996 -0.881681 -0.39108 + -2.02509 1.75372 0.534509 0.226373 0.0154897 -0.973918 + -2.23356 1.86879 0.468189 -0.0801071 -0.518449 -0.851348 + -2.29796 1.84198 0.496837 -0.316115 -0.638518 -0.701687 + -2.31758 1.80281 0.564476 -0.530786 -0.824015 -0.198154 + -2.32775 1.80176 0.638488 -0.354247 -0.932081 -0.0757208 + -1.85767 1.64454 0.554014 0.00223835 0.344011 -0.938963 + -1.78295 1.56325 0.503601 -0.316717 0.174407 -0.932348 + -1.98656 1.67634 0.551519 0.0121252 -0.0451675 -0.998906 + -2.19504 1.79142 0.4852 -0.00539201 -0.199273 -0.979929 + -2.25122 1.76773 0.50923 -0.496109 -0.710724 -0.498746 + -1.60429 1.36788 0.3626 -0.552506 -0.452338 -0.700091 + -1.79238 1.54006 0.510978 -0.361389 -0.0101552 -0.93236 + -1.95973 1.60279 0.539327 0.0337568 0.0391626 -0.998662 + -2.1483 1.71718 0.497593 -0.00359493 -0.103174 -0.994657 + -2.17596 1.71816 0.505099 -0.258826 -0.316883 -0.912466 + -1.49721 1.30268 0.373529 -0.0689533 -0.274035 -0.959245 + -1.3001 2.61612 -0.639218 -0.198498 -0.763167 0.614959 + -1.49586 2.56716 -0.58981 0.325213 -0.813204 0.482634 + -1.42854 2.55889 -0.649095 -0.261824 -0.953626 -0.148479 + -1.29075 2.53949 -0.6781 -0.273143 -0.946443 0.17216 + -1.25085 2.53548 -0.642347 -0.422825 -0.891601 0.162072 + -1.2602 2.61211 -0.603465 -0.817925 -0.562122 -0.122549 + -1.39026 2.63554 -0.586252 0.138319 -0.9763 0.166454 + -1.49586 2.56716 -0.58981 0.331158 -0.551235 0.765817 + -1.58602 2.58657 -0.536845 0.286573 -0.582008 0.761014 + -1.38815 2.56513 -0.686901 -0.36841 -0.647767 -0.666838 + -1.25037 2.54573 -0.715897 0.0747647 -0.674029 -0.734912 + -1.20705 2.52844 -0.663145 0.369842 -0.921393 -0.119382 + -1.3163 2.56033 -0.481979 0.0779208 -0.994226 -0.073779 + -1.38229 2.53653 -0.460558 -0.203936 -0.811828 -0.547124 + -1.57837 2.67193 -0.59068 -0.656773 -0.297396 -0.692968 + -1.51214 2.66684 -0.652472 -0.609066 -0.322124 -0.724758 + -1.33797 2.62379 -0.735296 -0.205029 -0.183532 -0.961394 + -1.1783 2.60536 -0.717774 0.255144 -0.437048 -0.862491 + -1.13498 2.58814 -0.664965 0.32786 -0.884544 -0.331798 + -1.6457 2.68019 -0.531396 -0.674609 -0.346892 -0.65159 + -1.68768 2.91119 -0.517889 -0.673386 -0.0672369 -0.736228 + -1.62145 2.9061 -0.57968 -0.722778 -0.104964 -0.683063 + -1.55545 2.87743 -0.65243 -0.700632 -0.122339 -0.702957 + -1.46196 2.7255 -0.700868 -0.532933 -0.234319 -0.813066 + -1.47007 2.61951 -0.553496 0.0691955 -0.996045 0.0557275 + -1.65093 2.62757 -0.481455 -0.442259 -0.871965 -0.209962 + -1.49939 2.62158 -0.514475 -0.182048 -0.886402 -0.425618 + -1.68026 2.62964 -0.442434 -0.511415 -0.808471 -0.291254 + -1.85563 2.74393 -0.352592 -0.687383 -0.376163 -0.621293 + -1.7851 2.74542 -0.40958 -0.653868 -0.154463 -0.740674 + -1.58602 2.58657 -0.536845 -0.714862 -0.552201 -0.429008 + -1.40544 2.59553 -0.522956 -0.091748 -0.826615 -0.555239 + -1.47385 2.56861 -0.483731 -0.0671506 -0.742373 -0.666613 + -1.56168 2.57668 -0.468498 -0.327449 -0.502145 -0.800392 + -1.74718 2.65567 -0.375326 -0.601375 -0.450839 -0.659615 + -1.92255 2.76996 -0.285484 -0.596367 -0.140757 -0.790275 + -1.32563 2.61155 -0.555713 -0.313955 -0.768675 -0.557289 + -1.5158 2.50943 -0.384024 0.0381157 -0.825219 -0.563525 + -1.58421 2.4825 -0.34479 -0.184095 -0.722046 -0.666902 + -1.64313 2.46622 -0.302775 0.153892 -0.89812 -0.411943 + -1.53614 2.52362 -0.437803 0.285919 -0.873028 -0.395059 + -1.44772 2.53598 -0.412815 -0.0344637 -0.87907 -0.475444 + -1.50702 2.42195 -0.279312 0.11945 -0.724956 -0.678359 + -1.5751 2.3954 -0.250513 0.00538386 -0.670113 -0.742239 + -1.58602 2.58657 -0.536845 0.299558 -0.910718 0.284354 + -1.44638 2.46044 -0.300165 0.15228 -0.780961 -0.605731 + -1.51313 2.29001 -0.149574 0.379767 -0.632734 -0.674852 + -1.56252 2.23009 -0.131389 0.175666 -0.618888 -0.765584 + -1.614 2.19748 -0.106921 0.3588 -0.532128 -0.766878 + -1.62659 2.3628 -0.226055 -0.187271 -0.599717 -0.777991 + -1.38039 2.48423 -0.321586 0.103289 -0.850498 -0.515738 + -1.45249 2.32849 -0.170436 0.265634 -0.6968 -0.666265 + -1.40673 2.26514 -0.0839 0.343748 -0.632489 -0.694114 + -1.44143 2.21733 -0.061887 0.333725 -0.500521 -0.798816 + -1.49081 2.1574 -0.043692 0.26466 -0.454164 -0.8507 + -1.31783 2.50633 -0.353252 -0.269259 -0.818702 -0.507175 + -1.39437 2.37983 -0.191359 0.22857 -0.761374 -0.606684 + -1.3486 2.31648 -0.104823 0.153892 -0.768012 -0.621671 + -1.27698 2.27543 -0.022522 0.241215 -0.849161 -0.469831 + -1.31168 2.22762 -0.000509 0.502434 -0.358478 -0.7868 + -1.27251 2.55328 -0.502778 -0.321253 -0.926771 -0.194658 + -1.25834 2.48932 -0.404594 -0.393215 -0.82417 -0.407585 + -1.33181 2.40193 -0.223025 -0.0107838 -0.804446 -0.593928 + -1.30396 2.34659 -0.149771 -0.0339501 -0.780982 -0.62363 + -1.27338 2.29774 -0.092373 -0.0574718 -0.892647 -0.447077 + -1.21302 2.53636 -0.55407 -0.309272 -0.769486 -0.558786 + -1.19745 2.49031 -0.447509 -0.345417 -0.851623 -0.394239 + -1.26661 2.4303 -0.253176 -0.0271631 -0.888749 -0.457588 + -1.23877 2.37488 -0.179981 -0.192944 -0.740977 -0.643214 + -1.22874 2.32785 -0.137321 -0.201154 -0.804231 -0.55924 + -1.05893 2.61404 -0.683015 0.33478 -0.768482 -0.545305 + -1.13696 2.56225 -0.572121 -0.211886 -0.806495 -0.55197 + -1.14564 2.48276 -0.502629 -0.408862 -0.780114 -0.473555 + -1.20572 2.43121 -0.29614 -0.257861 -0.878056 -0.403144 + -1.18009 2.38412 -0.225178 -0.357684 -0.725287 -0.588235 + -1.10129 2.65799 -0.720933 0.176528 -0.169503 -0.969591 + -0.952736 2.65753 -0.671346 0.117545 -0.543568 -0.831094 + -1.08515 2.55479 -0.6272 -0.418655 -0.25149 -0.872629 + -1.09197 2.49324 -0.547582 0.0035975 -0.881634 -0.471921 + -1.14067 2.43669 -0.342226 -0.187104 -0.904363 -0.383561 + -1.26096 2.67633 -0.738513 0.0744521 0.00752472 -0.997196 + -1.18748 2.72607 -0.714866 0.137809 0.221193 -0.965444 + -0.995101 2.70139 -0.709312 0.178388 -0.0654426 -0.981781 + -0.875328 2.66696 -0.670681 0.0796277 -0.327457 -0.941505 + -1.00774 2.56423 -0.626535 0.199668 -0.711624 -0.67359 + -1.40656 2.74411 -0.750897 -0.221084 -0.407019 -0.88626 + -1.33308 2.79385 -0.727258 0.214473 -0.218816 -0.951904 + -1.11543 2.77194 -0.693708 0.168783 0.248755 -0.953747 + -0.923048 2.74734 -0.688105 0.121206 0.193536 -0.973577 + -0.778789 2.66576 -0.665798 -0.0887103 -0.34113 -0.935821 + -1.50006 2.89604 -0.702459 -0.797797 -0.284566 -0.531547 + -1.45443 2.86248 -0.801524 -0.454077 -0.405666 -0.793252 + -1.38219 2.88944 -0.808829 0.0923162 -0.461446 -0.882352 + -1.26083 2.82082 -0.734563 0.285119 -0.354411 -0.890562 + -1.04309 2.83942 -0.656181 0.167087 0.185379 -0.968358 + -1.61028 3.04066 -0.617947 -0.802366 -0.119512 -0.584743 + -1.56896 3.04128 -0.69341 -0.884303 -0.226945 -0.408048 + -1.52334 3.00771 -0.792474 -0.838766 -0.279602 -0.467219 + -1.46456 2.96133 -0.856744 -0.43366 -0.509505 -0.743198 + -1.30813 2.92966 -0.807285 0.338312 -0.37687 -0.862273 + -1.67628 3.06941 -0.545148 -0.726891 -0.05382 -0.684641 + -1.65569 3.23792 -0.566404 -0.787428 -0.254808 -0.561275 + -1.61437 3.23854 -0.641875 -0.890128 -0.183726 -0.417033 + -1.54549 3.15754 -0.791375 -0.887836 -0.374175 -0.267844 + -1.48671 3.11124 -0.855596 -0.59334 -0.175434 -0.785602 + -1.74535 3.11365 -0.478972 -0.678771 -0.0264612 -0.733873 + -1.72475 3.28224 -0.500178 -0.735128 -0.0979724 -0.670812 + -1.65737 3.38525 -0.628392 -0.881319 -0.268854 -0.388581 + -1.82338 3.13348 -0.411117 -0.65923 -0.00961781 -0.75188 + -1.85704 3.26162 -0.378462 -0.66499 -0.035641 -0.746001 + -1.89281 3.42958 -0.364967 -0.677891 -0.0988322 -0.728488 + -1.76052 3.45011 -0.486733 -0.764736 -0.153269 -0.625849 + -1.72596 3.52404 -0.570377 -0.877418 -0.287079 -0.384348 + -1.76571 2.93101 -0.450025 -0.66997 -0.0674115 -0.739321 + -1.93094 3.12032 -0.315717 -0.688146 -0.03703 -0.724626 + -1.9646 3.24846 -0.283062 -0.656972 -0.0300507 -0.753316 + -1.8402 2.95534 -0.383558 -0.688682 -0.0853769 -0.720019 + -2.00248 3.10753 -0.242768 -0.647973 -0.0453044 -0.760315 + -1.49586 2.56716 -0.58981 -0.637179 -0.585839 -0.500795 + -1.91174 2.94255 -0.310608 -0.665606 -0.0556807 -0.744223 + -1.98227 2.94105 -0.25362 -0.558639 0.0198152 -0.829174 + -2.08849 3.05709 -0.174005 -0.576015 0.0573106 -0.815428 + -2.09573 3.21649 -0.178093 -0.630168 -0.0245891 -0.776069 + -2.06155 2.88877 -0.219268 -0.513809 0.0245556 -0.857553 + -2.16776 3.0049 -0.139603 -0.622669 0.148497 -0.768265 + -2.24769 3.06839 -0.04557 -0.709019 0.0349271 -0.704324 + -2.18174 3.16605 -0.10933 -0.657452 0.0110682 -0.753415 + -1.97577 2.71731 -0.247687 -0.45761 -0.00880304 -0.889109 + -2.11477 2.83612 -0.18147 -0.621534 -0.0347292 -0.782617 + -2.22059 2.91037 -0.085081 -0.735021 -0.0397142 -0.67688 + -2.30052 2.97378 0.008902 -0.789742 -0.0420709 -0.611995 + -2.31727 3.15669 0.028492 -0.770474 0.0286842 -0.636825 + -1.83669 2.6434 -0.321467 -0.457957 -0.0221103 -0.8887 + -2.03681 2.65629 -0.224989 -0.534364 -0.0485526 -0.843859 + -2.13665 2.73934 -0.144843 -0.698631 -0.0887716 -0.709954 + -2.24246 2.81351 -0.048503 -0.769853 -0.107974 -0.629022 + -2.3405 2.85857 0.084852 -0.82496 -0.0994869 -0.556366 + -1.6512 2.5644 -0.41463 -0.440221 -0.305126 -0.844455 + -1.72545 2.55667 -0.373052 -0.428378 -0.256508 -0.866427 + -1.89774 2.58237 -0.29876 -0.438942 -0.111462 -0.891575 + -2.07411 2.58682 -0.186068 -0.605043 -0.161246 -0.779694 + -1.59495 2.48724 -0.400794 0.137899 -0.839391 -0.525744 + -1.66919 2.47952 -0.359216 -0.366408 -0.44297 -0.818243 + -1.78908 2.52885 -0.331856 -0.470619 -0.492298 -0.732229 + -1.96138 2.55454 -0.257564 -0.430506 -0.382153 -0.817694 + -1.70194 2.42975 -0.265816 0.645164 -0.737215 -0.200693 + -1.73553 2.35858 -0.256944 0.332164 -0.651797 -0.681783 + -1.78273 2.34838 -0.237672 0.538597 -0.692638 -0.479756 + -1.71639 2.46932 -0.339945 -0.371202 -0.410771 -0.832752 + -1.85647 2.54302 -0.277405 -0.311587 -0.843734 -0.437065 + -1.68551 2.34651 -0.184032 -0.0935676 -0.609139 -0.787525 + -1.71628 2.29053 -0.14388 0.347864 -0.548168 -0.760593 + -1.74988 2.21936 -0.135015 0.186513 -0.612087 -0.76848 + -1.77436 2.17638 -0.08636 0.271163 -0.665157 -0.695728 + -1.8154 2.28022 -0.219228 0.137216 -0.472127 -0.870786 + -1.71639 2.46932 -0.339945 0.907551 -0.4055 0.10918 + -1.63216 2.1283 -0.077687 0.0192926 -0.498098 -0.866906 + -1.66293 2.07241 -0.037486 -0.40343 -0.597529 -0.692967 + -1.68409 2.03939 0.025701 -0.273643 -0.713378 -0.645145 + -1.70857 1.99641 0.074348 -0.572156 -0.73765 -0.358484 + -1.53196 2.1008 -0.030862 0.279885 -0.438283 -0.85415 + -1.55011 2.03162 -0.001628 0.22981 -0.584972 -0.777814 + -1.57347 1.98018 0.03807 -0.00642807 -0.773817 -0.633377 + -1.59463 1.94725 0.1013 -0.107748 -0.887259 -0.448511 + -1.38042 2.10717 0.002718 0.411046 -0.67189 -0.616121 + -1.43484 2.0693 0.0235 0.399968 -0.680769 -0.613661 + -1.4582 2.01786 0.063199 0.345951 -0.577204 -0.739699 + -1.47766 1.95416 0.101329 0.153002 -0.790946 -0.592447 + -1.33928 2.16376 -0.010112 0.468369 -0.342054 -0.814635 + -1.27263 2.16069 0.057417 0.641721 -0.744093 -0.185796 + -1.32704 2.12282 0.078207 0.703728 -0.633441 -0.321744 + -1.37329 2.02361 0.083435 0.334338 -0.352658 -0.873985 + -1.1922 2.27055 0.073518 0.450513 -0.681699 -0.576476 + -1.21979 2.20679 0.063957 0.723967 -0.575963 -0.379656 + -1.19121 2.27081 0.18087 0.69421 -0.717527 -0.056813 + -1.17331 2.26835 0.009938 -0.0378973 -0.999281 0.00106347 + -1.0976 2.3003 0.121208 -0.224908 -0.973844 -0.0323156 + -1.13837 2.31692 0.187409 0.0824058 -0.986284 -0.143015 + -1.12303 2.27615 0.261829 -0.480785 -0.673812 -0.561091 + -1.14682 2.27224 0.275606 0.251423 -0.717666 -0.649417 + -1.17764 2.27532 0.212466 -0.871159 -0.266775 0.412206 + -1.16971 2.29075 -0.059863 -0.283283 -0.931787 -0.226987 + -1.0774 2.23682 -0.044042 -0.552576 -0.818903 0.155106 + -1.07871 2.29809 0.057626 -0.262194 -0.942435 0.207535 + -1.05384 2.25235 0.14565 -0.840032 -0.35726 -0.408303 + -1.08226 2.25953 0.195622 -0.848131 -0.337051 -0.408742 + -1.17186 2.29449 -0.122738 -0.437185 -0.854362 -0.280954 + -1.07955 2.24064 -0.106867 -0.580085 -0.801537 -0.14505 + -1.02273 2.17336 -0.067931 -0.929554 -0.368633 0.00620746 + -1.03478 2.21398 -0.011292 -0.862637 -0.46737 0.193452 + -1.12179 2.30564 -0.172649 -0.512935 -0.728255 -0.454469 + -1.17866 2.339 -0.187233 -0.388309 -0.697699 -0.602023 + -1.11505 2.38959 -0.271264 -0.467927 -0.676145 -0.569097 + -1.087 2.44716 -0.387179 -0.287327 -0.868946 -0.402959 + -1.02021 2.51347 -0.526628 -0.0238733 -0.821431 -0.569808 + -0.935985 2.58446 -0.605581 0.104523 -0.764177 -0.636481 + -0.870966 2.57111 -0.610862 -0.297528 -0.270653 -0.915546 + -0.713771 2.65233 -0.67113 -0.475959 -0.188093 -0.859118 + -0.673895 2.61527 -0.694348 -0.745561 -0.0926619 -0.659964 + -1.02167 2.1516 0.035751 -0.740981 -0.667115 -0.0768413 + -1.03372 2.19214 0.092341 -0.979933 -0.0172478 -0.19858 + -1.0361 2.27517 0.090327 -0.763857 -0.624151 -0.164187 + -0.922802 2.10901 0.085129 -0.0730675 -0.940762 -0.331101 + -0.958577 2.11066 0.163666 -0.403519 -0.847821 -0.344053 + -1.05147 2.16932 0.147664 -0.741176 -0.418416 -0.524963 + -1.10586 2.12196 0.209692 -0.660401 -0.396373 -0.637777 + -1.13427 2.12922 0.259715 -0.902301 -0.177056 -0.39307 + -0.810344 1.97817 0.320542 0.252569 -0.775443 -0.578703 + -0.833391 1.94058 0.379053 0.383086 -0.588722 -0.711794 + -0.981624 2.07298 0.222127 -0.165579 -0.749026 -0.641516 + -1.03601 2.02571 0.284205 -0.172602 -0.721006 -0.671088 + -1.05697 1.97337 0.346654 -0.456815 -0.712095 -0.533142 + -0.670717 1.96894 0.458339 0.5406 -0.452775 -0.709046 + -0.667906 1.89635 0.48865 0.486931 -0.350594 -0.799989 + -0.815929 1.8798 0.41873 0.196764 -0.638051 -0.744429 + -0.836881 1.82746 0.481179 0.137446 -0.657438 -0.740867 + -0.538643 2.04431 0.522979 0.487738 -0.177435 -0.854768 + -0.535832 1.97165 0.553241 0.337731 -0.287496 -0.896261 + -0.544717 1.8913 0.575002 0.281666 -0.394091 -0.874846 + -0.650445 1.83549 0.528277 0.448517 -0.508229 -0.735211 + -0.427416 2.11128 0.562994 -0.244922 -0.165181 -0.955368 + -0.433959 2.01996 0.558956 0.0292519 -0.0334085 -0.999014 + -0.456382 1.94003 0.566206 -0.125882 -0.107125 -0.986244 + -0.465268 1.85968 0.587968 -0.578016 -0.164181 -0.799339 + -0.570279 1.82633 0.611336 0.204365 -0.59909 -0.774161 + -0.436841 2.19521 0.541212 -0.404992 -0.582201 -0.704999 + -0.353586 1.97298 0.525926 -0.695918 -0.130636 -0.706139 + -0.378271 1.89349 0.544613 -0.439686 -0.00325801 -0.898145 + -0.400694 1.81364 0.551913 -0.2421 0.06829 -0.967845 + -0.446909 1.74023 0.544275 -0.46875 0.0966612 -0.878026 + -0.363011 2.05692 0.504144 -0.819735 -0.279144 -0.500113 + -0.301749 1.91849 0.465723 -0.963012 -0.158057 -0.218232 + -0.308399 1.84823 0.493806 -0.830271 -0.0286213 -0.556625 + -0.333084 1.76874 0.512494 -0.586746 -0.028627 -0.809265 + -0.348014 1.70073 0.530483 -0.396609 0.0165682 -0.917838 + -0.378708 2.13667 0.481814 -0.726258 -0.499145 -0.472655 + -0.317446 1.99815 0.443342 -0.914962 -0.251027 -0.31596 + -0.290161 1.78861 0.420064 -0.877068 -0.0629937 -0.476218 + -0.296811 1.71836 0.448148 -0.944697 -0.204777 -0.256153 + -0.280895 1.6451 0.472234 -0.74401 -0.151147 -0.650848 + -0.331639 2.07409 0.420611 -0.910034 -0.398997 -0.112426 + -0.26363 1.85203 0.385818 -0.792137 -0.143332 -0.593275 + -0.206389 1.80208 0.32754 -0.640929 -0.246385 -0.726983 + -0.23292 1.73866 0.361786 -0.617796 -0.251387 -0.745072 + -0.235821 1.6716 0.395736 -0.601231 -0.361446 -0.712655 + -0.277823 1.92789 0.363036 -0.862772 -0.299925 -0.407025 + -0.21079 1.87381 0.301308 -0.693584 -0.301411 -0.654288 + -0.14511 1.84072 0.259615 -0.45794 -0.377817 -0.804702 + -0.135439 1.77259 0.295815 -0.40197 -0.420262 -0.813511 + -0.13834 1.70553 0.329765 -0.409917 -0.406786 -0.816391 + -0.297938 2.00159 0.348771 -0.796957 -0.359634 -0.485306 + -0.230905 1.94743 0.286993 -0.694517 -0.305071 -0.651597 + -0.149511 1.91236 0.233334 -0.432045 -0.321497 -0.842601 + -0.084582 1.92307 0.212986 0.0414754 -0.299385 -0.953231 + -0.081362 1.84769 0.230549 -0.0483851 -0.284384 -0.957489 + -0.241038 2.02176 0.264251 -0.650004 -0.31712 -0.690601 + -0.1517 1.98683 0.207735 -0.424964 -0.322893 -0.845663 + -0.086772 1.99754 0.187387 0.124605 -0.352569 -0.927453 + -0.028371 1.90395 0.240101 0.206269 -0.20136 -0.957553 + -0.025151 1.82848 0.257614 0.208168 -0.0754405 -0.975179 + -0.161833 2.06108 0.184943 -0.470986 -0.361832 -0.804518 + -0.086495 2.06566 0.157802 0.0707083 -0.471308 -0.87913 + -0.028371 1.98169 0.227848 0.262455 -0.257919 -0.929836 + 0.028384 1.98169 0.227848 -0.232164 -0.281559 -0.931034 + 0.028384 1.90395 0.240102 -0.196088 -0.186512 -0.962685 + -0.078873 2.13192 0.117042 0.0419019 -0.640991 -0.766404 + -0.028094 2.04981 0.198263 0.223948 -0.456923 -0.860853 + 0.028086 2.04981 0.198263 -0.223684 -0.456645 -0.86107 + 0.086785 1.99754 0.187387 -0.133314 -0.365728 -0.921125 + 0.084595 1.92307 0.212986 -0.080155 -0.2709 -0.959264 + -0.028094 2.11031 0.157878 0.182796 -0.60551 -0.77456 + 0.028086 2.11031 0.157878 -0.180857 -0.606177 -0.774494 + 0.086487 2.06566 0.157802 -0.0716737 -0.470248 -0.879619 + 0.151697 1.98684 0.207726 0.42598 -0.325174 -0.844276 + 0.025953 2.16442 0.105158 -0.119504 -0.723437 -0.679969 + 0.078865 2.13201 0.117092 -0.0420762 -0.641547 -0.765929 + 0.154209 2.12742 0.144226 0.421737 -0.506752 -0.751891 + 0.16183 2.06108 0.184937 0.445027 -0.38063 -0.8106 + 0.025953 2.21513 0.044117 -0.1192 -0.857985 -0.499653 + 0.076732 2.18603 0.064323 -0.016313 -0.804925 -0.593153 + 0.154605 2.18535 0.100294 0.309959 -0.754485 -0.578513 + 0.259627 2.10262 0.248796 0.637108 -0.363523 -0.679665 + 0.241035 2.02176 0.264245 0.652543 -0.322855 -0.685531 + 0.081398 2.22044 -0.002884 -0.0330055 -0.918829 -0.393273 + 0.15927 2.21967 0.033045 0.303564 -0.865301 -0.398877 + 0.260023 2.16046 0.204816 0.556213 -0.540992 -0.630836 + 0.341669 2.14994 0.304624 0.739955 -0.480742 -0.470482 + 0.156899 2.24578 -0.033764 0.108098 -0.977051 -0.183538 + 0.255581 2.21549 0.158688 0.548452 -0.659496 -0.514068 + 0.35622 2.23418 0.219711 0.302315 -0.925348 -0.228772 + 0.360662 2.17915 0.265841 0.672493 -0.639137 -0.373172 + 0.25321 2.24159 0.091878 0.183784 -0.952974 -0.240965 + 0.351766 2.22323 0.157082 -0.226873 -0.972716 0.0485016 + 0.458563 2.21157 0.222077 -0.0542141 -0.822172 0.566652 + 0.436639 2.29199 0.27059 0.256662 -0.960627 0.106399 + 0.417646 2.26287 0.309422 0.549386 -0.735699 -0.396135 + 0.345719 2.23594 0.079281 -0.218538 -0.965642 -0.140629 + 0.454109 2.20062 0.159444 -0.222399 -0.951529 0.212441 + 0.543356 2.21135 0.213069 -0.063121 -0.718424 0.692736 + 0.521432 2.29176 0.261583 -0.19864 -0.913644 0.354677 + 0.346555 2.25176 0.008467 -0.188592 -0.932179 -0.308991 + 0.452082 2.18241 0.091785 -0.317062 -0.948202 0.0195966 + 0.554508 2.1632 0.10366 -0.0359045 -0.999279 0.0123136 + 0.556535 2.1815 0.171369 -0.161488 -0.896338 0.412916 + 0.67046 2.19247 0.209166 -0.334003 -0.919569 0.206967 + 0.243867 2.27531 -0.046122 0.364803 -0.565114 -0.739976 + 0.350908 2.27944 -0.059467 -0.134923 -0.868025 -0.477838 + 0.452918 2.19833 0.021021 -0.277137 -0.898218 -0.341173 + 0.096883 2.29063 -0.229258 0.489284 -0.71954 -0.492812 + 0.24822 2.30299 -0.114056 0.209344 -0.868014 -0.450252 + 0.35169 2.32451 -0.12374 0.00205613 -0.713908 -0.700236 + 0.450824 2.24422 -0.055273 -0.205456 -0.820718 -0.533113 + 0.451606 2.2893 -0.119546 -0.37794 -0.779885 -0.498939 + 0.542863 2.2168 -0.038182 -0.292597 -0.904761 -0.309508 + 0.544957 2.17091 0.038111 0.019762 -0.948674 -0.315637 + 0.649184 2.18275 0.132395 0.124707 -0.893937 -0.430494 + 0.683639 2.16253 0.167417 0.179414 -0.94545 0.27191 + 0.445414 2.33028 -0.186529 -0.496531 -0.687819 -0.529491 + 0.519611 2.28058 -0.179647 -0.673012 -0.687869 -0.271828 + 0.525802 2.23951 -0.112714 -0.4558 -0.834679 -0.309124 + 0.617838 2.17332 -0.016465 -0.310813 -0.943415 0.115597 + 0.639633 2.19037 0.066806 0.047314 -0.997631 -0.0499374 + 0.442834 2.38537 -0.239753 -0.604136 -0.603835 -0.520003 + 0.4982 2.32577 -0.24471 -0.727964 -0.601011 -0.32993 + 0.559073 2.21804 -0.162728 -0.814487 -0.558261 0.157976 + 0.600777 2.19603 -0.090996 -0.527749 -0.8494 -0.000225221 + 0.673023 2.1625 -0.086333 0.0349253 -0.990374 0.133937 + 0.426266 2.44644 -0.292521 -0.647424 -0.580264 -0.4941 + 0.481631 2.38683 -0.29747 -0.780826 -0.534269 -0.323833 + 0.537662 2.26323 -0.227793 -0.876742 -0.479452 -0.0380599 + 0.590327 2.17315 -0.220969 -0.681039 -0.714986 0.158051 + 0.632032 2.15113 -0.149236 -0.309219 -0.932848 0.184872 + 0.415489 2.50481 -0.344625 -0.692527 -0.560435 -0.454223 + 0.46255 2.44419 -0.355431 -0.810433 -0.503731 -0.299087 + 0.516811 2.31852 -0.290163 -0.919632 -0.389169 -0.0531396 + 0.536521 2.25412 -0.344224 -0.960938 -0.27025 0.0596881 + 0.557372 2.19883 -0.281854 -0.898655 -0.402766 0.173778 + 0.399688 2.56693 -0.395823 -0.670596 -0.542369 -0.5061 + 0.446749 2.50631 -0.40663 -0.856737 -0.433576 -0.279309 + 0.49773 2.37589 -0.348125 -0.917936 -0.391819 -0.0622153 + 0.333062 2.67159 -0.4291 -0.139327 -0.605185 -0.783798 + 0.392709 2.62786 -0.447361 -0.691659 -0.487732 -0.532659 + 0.438169 2.56162 -0.466418 -0.861458 -0.375875 -0.341481 + 0.475049 2.42664 -0.411635 -0.950012 -0.312144 -0.0066024 + 0.328673 2.73479 -0.471964 -0.178235 -0.691386 -0.700156 + 0.393967 2.68945 -0.500823 -0.723978 -0.527399 -0.444641 + 0.439427 2.62312 -0.519938 -0.882883 -0.35938 -0.302263 + 0.466469 2.48194 -0.471415 -0.952664 -0.260561 -0.156651 + 0.49643 2.3586 -0.468174 -0.964303 -0.26474 0.00566451 + 0.26365 3.18553 -1.08067 -0.535437 -0.631319 -0.56102 + 0.318613 3.01098 -0.907536 -0.690458 -0.621868 -0.369523 + 0.383908 2.96572 -0.936345 -0.752941 -0.57307 -0.323527 + 0.423656 2.83709 -0.832142 -0.899409 -0.382795 -0.211024 + 0.468237 2.52849 -0.541048 -0.96266 -0.227596 -0.146579 + 0.211286 2.9128 -0.796693 0.73924 -0.513497 -0.435713 + 0.214432 3.22701 -1.07952 0.11691 -0.655131 -0.746415 + 0.170029 3.8391 -1.98009 -0.624127 -0.64204 -0.445253 + 0.260896 3.7114 -1.9673 -0.741447 -0.559738 -0.370066 + 0.315859 3.53684 -1.79416 -0.788261 -0.526422 -0.318629 + 0.063904 3.39356 -1.63558 0.881494 -0.32128 -0.346047 + -0.011004 2.20909 -0.926224 0 -0.159648 -0.987174 + 0.120811 3.88058 -1.97892 -0.387844 -0.755631 -0.527825 + 0.084072 4.11489 -2.27757 -0.161473 -0.305658 -0.938349 + 0.144953 4.07833 -2.28164 -0.302697 -0.298767 -0.905049 + 0.226921 3.78392 -1.9845 -0.651826 -0.488595 -0.579998 + 0.156182 4.10829 -2.27694 0.172708 0.322697 -0.930612 + 0.228575 4.03035 -2.28994 0.194202 0.166993 -0.966643 + 0.201845 4.02314 -2.28606 -0.43519 -0.372215 -0.819796 + 0.253826 3.95131 -2.28264 -0.471122 -0.386856 -0.792708 + 0.096818 4.17112 -2.26096 0.223833 0.571077 -0.789791 + 0.165782 4.13128 -2.26075 0.419336 0.561333 -0.713486 + 0.238175 4.05342 -2.2737 0.537699 0.500127 -0.678787 + 0.280556 3.95861 -2.28647 0.250303 0.033792 -0.967578 + 0.094074 4.19741 -2.23569 0.266597 0.738094 -0.619793 + 0.163038 4.15765 -2.23543 0.498966 0.664795 -0.55595 + 0.231694 4.09268 -2.23609 0.630681 0.60432 -0.486866 + 0.289297 4.02531 -2.231 0.713252 0.542923 -0.443289 + 0.295778 3.98606 -2.26862 0.639188 0.38878 -0.663542 + 0.090118 4.23945 -2.17751 0.274533 0.810976 -0.516672 + 0.155107 4.20838 -2.17409 0.522863 0.726506 -0.445873 + 0.223763 4.1434 -2.17474 0.622931 0.639694 -0.450276 + 0.282864 4.08583 -2.16703 0.702945 0.566731 -0.429749 + 0.342257 3.96762 -2.21109 0.771023 0.445835 -0.454702 + 0.077413 4.2961 -2.08803 0.270437 0.838046 -0.47386 + 0.142402 4.26511 -2.08456 0.440203 0.76892 -0.463664 + 0.21748 4.22262 -2.07876 0.550759 0.681972 -0.481225 + 0.276581 4.16497 -2.0711 0.73689 0.562623 -0.374763 + 0.335824 4.02814 -2.14711 0.780547 0.516235 -0.352488 + 0.077217 4.33595 -2.01465 0.243611 0.866787 -0.435125 + 0.140414 4.31927 -1.99955 0.393913 0.810496 -0.433508 + 0.215492 4.27678 -1.99376 0.544849 0.723776 -0.423425 + 0.261316 4.23416 -1.99374 0.730379 0.592927 -0.339092 + 0.323258 4.09292 -2.06472 0.818049 0.503243 -0.278464 + 0.086582 4.35657 -1.96057 0.255164 0.850071 -0.460729 + 0.149779 4.33989 -1.94548 0.387382 0.798444 -0.460892 + 0.205029 4.34236 -1.89375 0.547656 0.716354 -0.432332 + 0.250854 4.29974 -1.89373 0.693542 0.665126 -0.276779 + 0.307993 4.16202 -1.9874 0.790539 0.519727 -0.323931 + 0.090761 4.42195 -1.861 0.2451 0.789811 -0.56225 + 0.136076 4.4086 -1.85449 0.374044 0.758101 -0.534203 + 0.191327 4.41115 -1.80271 0.408515 0.694799 -0.591921 + 0.269232 4.28621 -1.8763 0.72102 0.584076 -0.372806 + 0.031855 4.51372 -1.75675 0.0975426 0.796003 -0.597381 + 0.090371 4.55762 -1.67839 0.24802 0.783585 -0.569632 + 0.135687 4.54427 -1.67187 0.238956 0.72497 -0.646002 + 0.159375 4.57666 -1.63058 -0.0272755 0.539777 -0.841366 + 0.215015 4.44355 -1.76142 0.410891 0.620843 -0.667625 + 0.019581 4.57673 -1.67429 0.0822428 0.808915 -0.582145 + 0.078097 4.62054 -1.59598 -0.084314 0.606392 -0.790683 + 0.088187 4.69572 -1.55799 -0.0242987 0.349665 -0.93656 + 0.144635 4.68969 -1.56734 -0.284522 0.404217 -0.869285 + 0.209426 4.5831 -1.66813 0.00589629 0.524071 -0.851654 + -0.019583 4.57673 -1.67429 -0.0824503 0.808871 -0.582176 + 0.019581 4.62602 -1.60127 0.0626536 0.656613 -0.751621 + 0.02967 4.70111 -1.56333 0.0582603 0.322479 -0.944782 + 0.09063 4.812 -1.5348 -0.0225725 0.227466 -0.973524 + 0.147078 4.80597 -1.54415 -0.0877212 0.2508 -0.964056 + -0.019583 4.62602 -1.60127 -0.0626653 0.656621 -0.751613 + -0.029672 4.70111 -1.56333 -0.0602841 0.324572 -0.943938 + 0.02967 4.82222 -1.5379 0.0436184 0.230337 -0.972133 + 0.031893 4.92248 -1.51155 0.0302154 0.302891 -0.952546 + 0.092852 4.91217 -1.5085 0.0337277 0.271666 -0.9618 + -0.029672 4.82222 -1.5379 -0.0449098 0.228458 -0.972517 + -0.031893 4.92248 -1.51155 -0.0509479 0.321189 -0.945643 + 0.031893 5.00159 -1.47878 -0.0240052 0.367767 -0.929608 + 0.098094 4.99545 -1.48494 -0.0148726 0.330447 -0.943707 + -0.092852 4.91218 -1.50851 -0.0203891 0.288639 -0.957221 + -0.031893 5.00159 -1.47878 0.0112348 0.353127 -0.935508 + 0.058347 5.10813 -1.43912 -0.0236694 0.362587 -0.931649 + 0.124549 5.10199 -1.44528 -0.0222974 0.367918 -0.929591 + 0.180374 4.98905 -1.48744 -0.0034224 0.321428 -0.946928 + -0.175129 4.90577 -1.51101 0.0222455 0.304884 -0.95213 + -0.098094 4.99545 -1.48495 0.0330762 0.314555 -0.948663 + -0.124545 5.10199 -1.44528 0.0183492 0.360004 -0.93277 + -0.058344 5.10813 -1.43912 0.028584 0.358655 -0.933033 + -0.314178 4.96879 -1.49417 -0.121927 0.239438 -0.963226 + -0.180371 4.98905 -1.48744 -0.000528955 0.316294 -0.948661 + -0.245024 5.10121 -1.44312 -0.0136319 0.356406 -0.934232 + -0.212368 5.21916 -1.39982 -0.00446196 0.457778 -0.889055 + -0.058344 5.22547 -1.39355 0.0103232 0.465922 -0.884765 + -0.39931 4.92231 -1.48206 -0.256635 0.0693434 -0.964018 + -0.378831 5.08096 -1.44984 -0.101233 0.314973 -0.943686 + -0.332847 5.21829 -1.39771 -0.0324007 0.446595 -0.89415 + -0.229843 5.34087 -1.31843 -0.00111754 0.603123 -0.797648 + -0.47304 4.8423 -1.45428 -0.331432 -0.132738 -0.934095 + -0.575158 4.91974 -1.42141 -0.337859 -0.0384835 -0.94041 + -0.501428 4.99984 -1.44914 -0.271212 0.121322 -0.954843 + -0.506441 5.13501 -1.41247 -0.174721 0.307506 -0.935368 + -0.457463 5.29863 -1.35106 -0.0300837 0.480176 -0.876656 + -0.417519 4.7888 -1.46101 -0.347509 -0.161835 -0.923605 + -0.497081 4.70961 -1.41125 -0.43423 -0.196027 -0.879214 + -0.552602 4.7632 -1.40447 -0.392368 -0.270892 -0.879014 + -0.62043 4.83545 -1.39461 -0.398448 -0.216285 -0.891325 + -0.384069 4.72168 -1.46716 -0.402101 -0.0752056 -0.912501 + -0.44761 4.64259 -1.43078 -0.484941 -0.112088 -0.867334 + -0.567514 4.62001 -1.34906 -0.599506 -0.251952 -0.759679 + -0.61531 4.69129 -1.34531 -0.528167 -0.361802 -0.768205 + -0.683138 4.76353 -1.33545 -0.574009 -0.391888 -0.718984 + -0.391732 4.57063 -1.45213 -0.585631 0.101293 -0.804224 + -0.518043 4.55291 -1.36864 -0.607452 -0.0769277 -0.790623 + -0.569416 4.48354 -1.31309 -0.835857 -0.167358 -0.522814 + -0.605012 4.56017 -1.27502 -0.846825 -0.297333 -0.440999 + -0.652807 4.63153 -1.27122 -0.760136 -0.493465 -0.422712 + -0.477052 4.4763 -1.41354 -0.683593 0.171459 -0.709438 + -0.528424 4.40693 -1.35799 -0.848818 0.0960515 -0.519887 + -0.583852 4.43159 -1.2419 -0.918135 -0.134537 -0.372731 + -0.619448 4.5083 -1.20378 -0.914321 -0.206562 -0.34835 + -0.650159 4.59414 -1.17185 -0.846763 -0.404485 -0.345519 + -0.500752 4.26279 -1.46613 -0.903235 0.254771 -0.345339 + -0.562038 4.35849 -1.3121 -0.922541 0.102806 -0.371952 + -0.627602 4.1418 -1.07658 -0.974118 0.051195 -0.220165 + -0.649416 4.21499 -1.00634 -0.975156 -0.0115375 -0.221218 + -0.654169 4.28647 -0.963151 -0.968055 -0.0879768 -0.234795 + -0.534365 4.21435 -1.42024 -0.937499 0.100705 -0.333097 + -0.6201 4.04521 -1.17587 -0.963158 0.0446895 -0.265197 + -0.768658 3.74322 -0.619611 -0.943966 0.320068 -0.080525 + -0.737398 3.80817 -0.584916 -0.963018 0.236611 -0.128882 + -0.74215 3.87974 -0.541678 -0.966102 0.153859 -0.207302 + -0.484063 4.0017 -1.55352 -0.999533 0.013755 -0.0272776 + -0.569798 3.83247 -1.3092 -0.950406 0.195093 -0.242211 + -0.761156 3.64662 -0.718893 -0.919456 0.351286 -0.176633 + -0.91 3.44794 -0.45138 -0.552901 0.70962 -0.436738 + -0.859614 3.51785 -0.392463 -0.607293 0.649221 -0.457938 + -0.509841 3.86933 -1.64343 -0.912811 0.33702 0.230639 + -0.599227 3.72037 -1.38404 -0.858173 0.510049 -0.0582163 + -0.806855 3.56984 -0.807711 -0.847204 0.510248 -0.147961 + -0.955699 3.37117 -0.540198 -0.592616 0.760361 -0.265814 + -0.588362 3.78145 -1.68063 -0.746333 0.566857 0.348799 + -0.677748 3.63249 -1.42123 -0.699057 0.710278 0.0826107 + -0.836284 3.45774 -0.882547 -0.787825 0.599044 -0.143101 + -1.00753 3.3111 -0.661758 -0.561087 0.818899 -0.120772 + -1.043 3.33197 -0.549702 0.127586 0.78626 -0.60458 + -0.657794 3.71536 -1.71276 -0.663381 0.641159 0.385798 + -0.7262 3.6026 -1.49185 -0.613381 0.77274 0.163206 + -0.858807 3.44275 -0.997782 -0.63744 0.768601 0.0540593 + -1.03005 3.29611 -0.776992 -0.502932 0.863789 0.0304564 + -0.732849 3.66746 -1.731 -0.575377 0.718392 0.390965 + -0.801256 3.55478 -1.51003 -0.515467 0.841093 0.163879 + -0.907259 3.41294 -1.06835 -0.420587 0.882242 0.211555 + -1.03338 3.30779 -0.868825 -0.457397 0.866819 0.198527 + -1.16827 3.23591 -0.834932 -0.032081 0.992397 -0.118825 + -0.833848 3.59399 -1.75135 -0.565725 0.732274 0.379118 + -0.863759 3.53291 -1.58534 -0.523009 0.83752 0.158182 + -0.925856 3.45071 -1.17737 -0.216647 0.945458 0.243255 + -1.05197 3.34555 -0.977836 -0.391998 0.868885 0.302286 + -1.1716 3.24768 -0.926706 -0.409463 0.893203 0.185815 + -0.969964 3.5092 -1.77767 -0.46573 0.78007 0.417836 + -0.999875 3.44811 -1.61167 -0.459858 0.87967 0.121289 + -0.98836 3.42883 -1.25267 -0.4556 0.882473 0.116919 + -1.09283 3.34785 -1.08122 -0.505851 0.842624 0.18466 + -1.21245 3.24989 -1.03014 -0.282424 0.945185 0.163895 + -1.11874 3.44462 -1.78761 -0.278944 0.832069 0.479428 + -1.09957 3.413 -1.67885 -0.315615 0.93014 0.187688 + -1.01918 3.43216 -1.38745 -0.295156 0.951244 0.0895472 + -1.12364 3.35118 -1.21599 -0.5044 0.851531 0.143092 + -1.23216 3.2789 -1.20999 -0.304035 0.93962 0.157086 + -1.30519 3.45113 -1.84669 -0.181255 0.884041 0.430835 + -1.27622 3.41134 -1.79357 -0.162275 0.853107 0.495859 + -1.25705 3.37972 -1.68482 -0.218171 0.956111 0.195583 + -1.11887 3.39705 -1.45464 -0.412461 0.904531 0.108162 + -1.13075 3.36642 -1.32257 -0.526437 0.837185 0.148276 + -1.29995 3.46466 -1.90454 -0.265125 0.959469 -0.0955401 + -1.46391 3.41461 -1.81744 -0.0341149 0.923737 0.381506 + -1.43494 3.37481 -1.76431 -0.0350859 0.889098 0.456369 + -1.35307 3.35536 -1.67502 -0.1563 0.96949 0.188839 + -1.14214 3.39251 -1.50476 -0.284377 0.946908 0.149986 + -1.36382 3.44217 -1.92598 -0.179917 0.982134 -0.0551585 + -1.48277 3.42564 -1.88494 -0.0776707 0.993122 0.0876163 + -1.59004 3.40451 -1.78076 0.119371 0.935239 0.333285 + -1.55599 3.35431 -1.7118 0.113256 0.920255 0.374572 + -1.47412 3.33477 -1.62255 -0.0691088 0.97927 0.190408 + -1.47691 3.4259 -1.974 -0.318429 0.873374 -0.368538 + -1.6089 3.41555 -1.84827 -0.211726 0.960048 -0.182973 + -1.69671 3.41036 -1.72967 0.207314 0.955132 0.211528 + -1.66266 3.36006 -1.66077 0.314831 0.922706 0.222475 + -1.54073 3.32302 -1.56781 0.133456 0.990554 -0.0314893 + -1.49571 3.38455 -2.00338 -0.405016 0.220916 -0.887219 + -1.64401 3.36864 -1.89082 -0.437396 0.700827 -0.563494 + -1.76033 3.36363 -1.82314 -0.364025 0.684239 -0.631905 + -1.72522 3.41054 -1.78059 -0.167285 0.931208 -0.323833 + -1.79723 3.42649 -1.65382 0.258902 0.962067 0.0860093 + -1.66281 3.32729 -1.92019 -0.440612 0.485897 -0.754828 + -1.79251 3.29908 -1.86053 -0.454315 0.47498 -0.753652 + -1.83363 3.39129 -1.76046 -0.398294 0.735366 -0.548269 + -1.82574 3.42676 -1.70469 -0.214448 0.93276 -0.289776 + -1.86581 3.32674 -1.79784 -0.554988 0.533983 -0.637849 + -1.94243 3.33731 -1.68535 -0.700685 0.562802 -0.438514 + -1.92308 3.40147 -1.61709 -0.656105 0.661208 -0.363773 + -1.9152 3.43695 -1.56133 -0.422771 0.883772 -0.200529 + -1.88163 3.43962 -1.53096 0.195688 0.978016 0.0720413 + -1.98168 3.22658 -1.72917 -0.709701 0.412668 -0.57099 + -2.03403 3.22111 -1.67248 -0.706009 0.479468 -0.521212 + -2.04657 3.34112 -1.43756 -0.651581 0.64886 -0.392967 + -2.02722 3.40521 -1.36935 -0.544128 0.69565 -0.469036 + -1.98072 3.43541 -1.38007 -0.294537 0.906434 -0.302696 + -2.14444 3.08049 -1.62792 -0.776127 0.289602 -0.560141 + -2.12598 3.21637 -1.55647 -0.669219 0.556196 -0.492739 + -2.13852 3.33638 -1.32155 -0.395261 0.725467 -0.563442 + -2.08324 3.49396 -1.20809 -0.390149 0.567836 -0.724808 + -2.17485 2.85109 -1.6634 -0.79539 0.200263 -0.572057 + -2.31866 3.01833 -1.37227 -0.833806 0.237462 -0.498376 + -2.27807 3.12168 -1.39247 -0.815392 0.298196 -0.4962 + -2.25962 3.25755 -1.32101 -0.789205 0.330252 -0.517772 + -2.25356 3.33286 -1.28524 -0.579242 0.519918 -0.627825 + -2.24194 2.72805 -1.6143 -0.782503 0.209447 -0.586362 + -2.38575 2.89521 -1.32322 -0.8413 0.23941 -0.484662 + -2.38694 3.07967 -1.2155 -0.899898 0.422306 0.108813 + -2.34636 3.18301 -1.2357 -0.933782 0.248663 -0.25733 + -2.33018 3.2656 -1.21775 -0.914582 0.240842 -0.32486 + -2.16603 2.59459 -1.75254 -0.709151 0.137168 -0.691585 + -2.3903 2.63865 -1.45183 -0.801119 0.225301 -0.554479 + -2.43603 2.83347 -1.26568 -0.824146 0.297454 -0.481979 + -2.46885 2.93672 -1.12491 -0.621371 0.73428 0.273368 + -2.41857 2.99846 -1.18245 -0.859254 0.509805 -0.0422177 + -2.31438 2.50519 -1.59007 -0.763846 0.0744398 -0.641092 + -2.49329 2.5927 -1.31286 -0.825116 0.215545 -0.522229 + -2.53903 2.78753 -1.1267 -0.849247 0.332748 -0.40995 + -2.28302 2.33097 -1.61352 -0.694635 -0.170568 -0.698848 + -2.39136 2.43913 -1.50445 -0.790298 0.0546029 -0.610284 + -2.49452 2.4665 -1.34626 -0.838856 0.0752713 -0.539124 + -2.64128 2.60297 -1.06884 -0.869722 0.227182 -0.438146 + -2.58184 2.76009 -1.05317 -0.831745 0.384051 -0.400879 + -2.40166 2.32341 -1.48662 -0.790425 -0.196533 -0.580176 + -2.50482 2.35078 -1.32843 -0.857148 -0.168307 -0.486795 + -2.64251 2.47677 -1.10226 -0.897715 -0.0294658 -0.439589 + -2.74077 2.4962 -0.832505 -0.979981 0.0277292 -0.197152 + -2.6903 2.62741 -0.943175 -0.924 0.242128 -0.29597 + -2.37144 2.26879 -1.49442 -0.664562 -0.534611 -0.522061 + -2.48835 2.28339 -1.31431 -0.764429 -0.523551 -0.376221 + -2.62715 2.384 -1.08077 -0.882861 -0.275063 -0.380653 + -2.7039 2.38727 -0.910439 -0.880312 -0.385573 -0.276377 + -2.71926 2.48005 -0.931931 -0.882633 0.335294 -0.32945 + -2.34168 2.2341 -1.47373 -0.3536 -0.899385 -0.257049 + -2.45859 2.24861 -1.29367 -0.380601 -0.919034 -0.102559 + -2.58583 2.29395 -1.05661 -0.39012 -0.920493 -0.0223533 + -2.61069 2.3166 -1.06664 -0.789673 -0.549192 -0.273503 + -2.68906 2.3493 -0.878472 -0.772178 -0.619099 -0.143034 + -2.31731 2.23023 -1.45523 0.206065 -0.963579 0.170449 + -2.43314 2.249 -1.27375 0.222823 -0.937244 0.268184 + -2.56038 2.29426 -1.03674 0.234198 -0.930731 0.280876 + -2.62978 2.32533 -0.864149 0.254835 -0.934433 0.248787 + -2.66421 2.32665 -0.868442 -0.39123 -0.919039 0.0480244 + -2.28861 2.25875 -1.43763 0.594899 -0.647939 0.475679 + -2.40444 2.27752 -1.25615 0.675387 -0.554943 0.485686 + -2.52836 2.321 -1.03146 0.717266 -0.534882 0.446576 + -2.59777 2.35215 -0.858812 0.772203 -0.567406 0.285925 + -2.38166 2.37619 -1.23645 0.780595 -0.270465 0.563489 + -2.50558 2.41975 -1.0117 0.85921 -0.219896 0.461956 + -2.57205 2.442 -0.857433 0.944664 -0.2284 0.235463 + -2.60291 2.36298 -0.752564 0.7427 -0.653014 0.14822 + -2.6482 2.34852 -0.75112 0.146052 -0.983998 0.102065 + -2.25441 2.49434 -1.34129 0.691931 -0.254839 0.675491 + -2.41966 2.65186 -1.08493 0.812118 -0.190609 0.551482 + -2.44962 2.72882 -0.999425 0.903561 -0.118441 0.411763 + -2.53554 2.49671 -0.9262 0.904866 -0.172492 0.389185 + -2.0451 2.73408 -1.42993 0.523529 -0.337583 0.782276 + -2.29241 2.76992 -1.18981 0.705283 -0.207141 0.677988 + -2.43195 2.81345 -1.02221 0.731419 0.224719 0.643838 + -2.50149 2.68375 -0.894552 0.912299 -0.144821 0.383062 + -2.538 2.62912 -0.825736 0.870357 -0.0740285 0.486825 + -2.11149 2.90972 -1.33014 0.529617 -0.258764 0.807804 + -2.14282 3.05528 -1.26346 0.49627 -0.218821 0.840139 + -2.32373 2.91548 -1.12313 0.587956 0.0175165 0.808703 + -1.92019 3.02836 -1.35684 0.0963612 -0.429583 0.897872 + -1.99462 3.17363 -1.27045 0.107677 -0.521472 0.846447 + -2.09605 3.15024 -1.26755 0.263202 -0.305561 0.915072 + -2.2651 3.05915 -1.17558 0.53726 -0.0839273 0.83923 + -1.76545 3.0591 -1.32967 -0.245598 -0.431619 0.867978 + -1.83988 3.20445 -1.24323 -0.220652 -0.682028 0.697245 + -2.03489 3.3184 -1.1424 0.0322312 -0.624419 0.780424 + -2.13633 3.2951 -1.13945 0.266788 -0.551032 0.790688 + -2.21834 3.15412 -1.17966 0.500302 -0.335962 0.798015 + -1.49485 2.94623 -1.23198 -0.444425 -0.532135 0.720637 + -1.6046 3.09642 -1.22012 -0.511415 -0.617923 0.597181 + -1.69808 3.18616 -1.16996 -0.45118 -0.748657 0.485746 + -1.91688 3.30486 -1.13415 -0.2609 -0.720263 0.642769 + -1.33436 3.02223 -1.09923 -0.30023 -0.772109 0.560098 + -1.45654 3.06137 -1.05041 -0.388008 -0.800663 0.456496 + -1.55002 3.15102 -1.0003 -0.547426 -0.777128 0.310478 + -1.59496 3.20381 -0.955135 -0.634939 -0.727498 0.259998 + -1.77508 3.28657 -1.06087 -0.486594 -0.717848 0.497916 + -1.14172 2.95056 -1.01449 -0.600859 -0.406927 0.688026 + -1.18623 3.02234 -0.981609 -0.408484 -0.830733 0.378184 + -1.30841 3.06147 -0.932784 -0.210476 -0.97115 0.112102 + -1.43413 3.09074 -0.915481 -0.503019 -0.851738 -0.146679 + -1.05152 2.81816 -0.962764 -0.612905 -0.173159 0.77095 + -1.02259 2.92278 -0.922776 -0.601848 -0.392151 0.695699 + -1.06711 2.99456 -0.889893 -0.490929 -0.751292 0.441077 + -1.0743 2.71117 -1.00885 -0.612019 -0.152118 0.776075 + -0.95884 2.696 -0.930375 -0.480876 -0.224871 0.847461 + -0.946305 2.78767 -0.892355 -0.521581 -0.255388 0.814082 + -0.917374 2.89238 -0.852317 -0.647176 -0.384337 0.658368 + -0.953604 2.96515 -0.807556 -0.554282 -0.75766 0.344562 + -0.987146 2.59906 -0.965861 -0.475489 -0.204962 0.855512 + -0.825757 2.68506 -0.875432 -0.369797 -0.28638 0.883876 + -0.813222 2.77682 -0.837363 -0.574381 -0.474245 0.667217 + -0.842561 2.85913 -0.788723 -0.721909 -0.524633 0.451228 + -0.87879 2.93189 -0.743953 -0.691349 -0.722272 0.0189484 + -1.01349 2.5095 -1.00474 -0.475416 -0.298697 0.827502 + -0.849018 2.5959 -0.908795 -0.345662 -0.263008 0.900747 + -0.77694 2.49672 -0.913018 -0.301612 -0.29547 0.906492 + -0.753679 2.58589 -0.879656 -0.486869 -0.271014 0.830367 + -0.732766 2.65292 -0.837963 -0.772046 -0.394459 0.498345 + -0.875364 2.50634 -0.947682 -0.352174 -0.279786 0.893137 + -0.809399 2.42101 -0.952472 -0.269808 -0.318405 0.908747 + -0.776282 2.32164 -0.982164 -0.598309 -0.179432 0.780917 + -0.744195 2.39376 -0.936474 -0.731219 -0.145468 0.666452 + -0.723282 2.4607 -0.894831 -0.7267 -0.123874 0.675694 + -0.845402 2.33448 -0.9884 -0.194417 -0.344254 0.918527 + -0.808741 2.24592 -1.02162 -0.541358 -0.225661 0.809943 + -0.813146 2.15103 -1.02926 -0.914109 0.232175 0.332415 + -0.782328 2.22055 -0.986063 -0.932343 0.232615 0.276813 + -0.879442 2.25536 -1.02896 -0.267778 -0.395307 0.878651 + -0.84533 2.17518 -1.06869 -0.449074 -0.263539 0.853745 + -0.849735 2.0802 -1.07638 -0.883195 0.195516 0.426309 + -0.879369 2.09615 -1.1092 -0.434824 -0.200162 0.877988 + -0.882867 2.01003 -1.11103 -0.862044 0.212673 0.460055 + -0.853651 2.05842 -1.00985 -0.922479 0.384975 0.028763 + -0.914823 2.0173 -1.13822 -0.453696 -0.16657 0.875451 + -0.918321 1.93126 -1.14001 -0.853472 0.214328 0.475026 + -0.886784 1.98825 -1.04451 -0.9117 0.404844 0.0700266 + -0.930002 1.89001 -1.01636 -0.953447 0.300546 0.0247175 + -0.947915 1.85511 -1.16152 -0.872664 0.223746 0.434046 + -0.920811 1.92063 -1.0734 -0.922426 0.382505 0.0531098 + -0.942229 1.8297 -1.0013 -0.994587 0.102947 0.0140837 + -0.944804 1.71646 -0.927156 -0.999425 -0.0305201 -0.0147665 + -0.950406 1.84448 -1.0949 -0.955758 0.275624 0.102749 + -0.940618 1.79502 -1.02983 -0.987349 0.0696285 0.142455 + -0.973888 1.77006 -1.11299 -0.963183 0.21098 0.166631 + -0.9641 1.72068 -1.04788 -0.981482 -0.172416 0.0834631 + -0.901206 1.61571 -1.00085 -0.845823 -0.530761 -0.0536288 + -0.948906 1.69815 -1.06444 -0.78258 0.137988 0.607064 + -0.683858 2.53744 -0.846346 -0.858172 -0.164745 0.48621 + -0.762105 2.73523 -0.789314 -0.726278 -0.478221 0.493786 + -0.683088 2.60532 -0.795705 -0.77092 -0.263774 0.579747 + -0.761334 2.80318 -0.738623 -0.756367 -0.644287 0.113148 + -0.953552 2.97745 -0.695252 -0.356628 -0.71408 -0.602417 + -0.650091 2.67466 -0.739618 -0.919101 -0.389863 -0.0570955 + -0.836096 2.84874 -0.689923 -0.658549 -0.621486 -0.424344 + -1.04074 2.97995 -0.685998 0.0895136 -0.695155 -0.713265 + -1.02738 3.01237 -0.781739 -0.292768 -0.955866 -0.0246249 + -1.14089 3.04178 -0.864075 -0.270503 -0.946077 0.178231 + -0.739713 2.74565 -0.696773 -0.70068 -0.487566 -0.520891 + -0.925718 2.91973 -0.647078 -0.402639 -0.651497 -0.642987 + -1.11119 2.9363 -0.685384 0.323845 -0.433356 -0.841027 + -1.11457 3.01479 -0.772534 0.135978 -0.865108 -0.482802 + -0.779589 2.78279 -0.673504 -0.509753 -0.442289 -0.737924 + -0.996167 2.87607 -0.646464 0.0903809 -0.00983747 -0.995859 + -1.18849 2.88821 -0.697087 0.428702 -0.204449 -0.880009 + -1.23083 2.97775 -0.795581 0.363353 -0.589363 -0.721544 + -0.82651 2.74605 -0.683273 0.0443094 0.0475857 -0.997884 + -1.19572 3.04732 -0.839083 0.082926 -0.901285 -0.425216 + -1.36324 3.06702 -0.907792 -0.154665 -0.833665 -0.530172 + -1.38286 3.03392 -0.869869 -0.260885 -0.545611 -0.796397 + -1.47907 3.14352 -0.870306 -0.666419 -0.700017 -0.256636 + -1.31198 3.01028 -0.86213 0.148443 -0.670087 -0.727288 + -1.3905 3.00163 -0.85515 0.0343783 -0.33501 -0.941587 + -1.68164 3.35355 -0.865289 -0.685426 -0.54663 0.481027 + -1.19064 2.1133 0.362099 -0.418103 -0.373553 -0.828039 + -1.16685 2.11721 0.348321 -0.60143 -0.400633 -0.691213 + -1.18731 2.03749 0.39659 -0.115408 -0.520295 -0.846153 + -1.08955 1.96145 0.43531 -0.461465 -0.678634 -0.571407 + -1.07771 1.88665 0.501859 -0.404213 -0.649958 -0.643558 + -0.895428 1.6969 0.571713 -0.247759 -0.720322 -0.647882 + -0.925082 1.67623 0.632925 -0.404549 -0.767018 -0.498019 + -0.907269 1.77161 0.505114 -0.110171 -0.644206 -0.756875 + -0.765246 1.66905 0.611158 0.342274 -0.476751 -0.809665 + -0.819324 1.64323 0.607476 -0.00636929 -0.705998 -0.708186 + -0.848978 1.62264 0.668739 -0.231957 -0.826573 -0.512809 + -0.676006 1.77051 0.564613 0.418287 -0.677524 -0.604977 + -0.746393 1.71475 0.588597 0.374677 -0.594613 -0.711374 + -0.632869 1.72466 0.683228 0.2201 -0.242516 -0.94485 + -0.667674 1.64144 0.666177 0.168601 0.0796185 -0.982463 + -0.721751 1.61571 0.662546 -0.0557991 -0.603254 -0.795595 + -0.614016 1.77037 0.660667 0.215028 -0.643981 -0.734201 + -0.537044 1.73605 0.661114 -0.466283 -0.187858 -0.864459 + -0.560694 1.66274 0.668891 -0.345965 0.14876 -0.92638 + -0.595499 1.57951 0.651842 -0.089707 0.299817 -0.94977 + -0.609086 1.49934 0.623102 -0.358854 0.284633 -0.888936 + -0.493306 1.79201 0.611783 -0.563764 -0.158282 -0.810627 + -0.470814 1.59102 0.579113 -0.679126 0.00141297 -0.73402 + -0.494464 1.51771 0.586891 -0.523104 0.173738 -0.834372 + -0.523226 1.45056 0.587791 -0.352038 0.295744 -0.888034 + -0.536813 1.37039 0.559051 -0.0712238 0.434175 -0.898008 + -0.474948 1.67246 0.56804 -0.82181 -0.0489156 -0.567658 + -0.403462 1.55309 0.519801 -0.360455 -0.0122598 -0.932696 + -0.399328 1.47156 0.530822 -0.567327 0.0898514 -0.818576 + -0.430158 1.4069 0.519009 -0.425503 0.281932 -0.859919 + -0.45892 1.33984 0.519959 -0.488517 0.273818 -0.828477 + -0.394229 1.62731 0.522845 -0.176745 0.0650789 -0.982103 + -0.293227 1.44316 0.523598 0.0487424 0.282895 -0.957911 + -0.337539 1.38741 0.477964 -0.087005 0.380719 -0.920589 + -0.36837 1.32276 0.46615 -0.23837 0.353237 -0.904656 + -0.404201 1.26275 0.450694 -0.376759 0.322577 -0.86833 + -0.283994 1.51739 0.526643 -0.34297 -0.183991 -0.921151 + -0.18183 1.41074 0.48616 -0.522886 0.0774162 -0.84888 + -0.221171 1.38548 0.495105 -0.176352 0.438397 -0.881311 + -0.265483 1.32973 0.44947 -0.101295 0.515548 -0.850853 + -0.283711 1.28422 0.428496 -0.164203 0.363246 -0.917109 + -0.295824 1.5771 0.490223 -0.781044 -0.294882 -0.550468 + -0.210234 1.5283 0.447544 -0.526203 -0.426964 -0.735399 + -0.198404 1.46867 0.484013 -0.579941 -0.320817 -0.748829 + -0.219905 1.59834 0.419821 -0.525719 -0.339941 -0.779782 + -0.127071 1.56688 0.393913 -0.431722 -0.304748 -0.848967 + -0.124814 1.48874 0.411456 -0.529382 -0.237627 -0.814425 + -0.10824 1.43089 0.413652 -0.531732 -0.145506 -0.834319 + -0.136742 1.63693 0.36619 -0.403456 -0.404359 -0.820803 + -0.067915 1.63866 0.328985 -0.480558 -0.398719 -0.78108 + -0.066978 1.57055 0.359558 -0.463832 -0.329064 -0.822543 + -0.064721 1.49241 0.377102 -0.23782 -0.23073 -0.943507 + -0.069513 1.70727 0.292561 -0.454163 -0.354367 -0.81741 + -0.022973 1.60797 0.312956 -0.27179 -0.415256 -0.868155 + -0.022036 1.53985 0.343528 -0.275752 -0.443021 -0.853049 + -0.022036 1.47459 0.381172 -0.0526471 -0.342582 -0.938012 + -0.071691 1.77956 0.266749 -0.428516 -0.420676 -0.799628 + -0.022973 1.67413 0.279962 -0.241002 -0.389383 -0.888987 + 0.022972 1.67413 0.279957 0.249451 -0.394279 -0.884488 + 0.022972 1.60797 0.312951 0.273966 -0.41155 -0.869235 + 0.022033 1.53986 0.34352 0.211773 -0.401878 -0.890868 + -0.025151 1.74642 0.25415 -0.168328 -0.228454 -0.958892 + 0.025152 1.74642 0.25415 0.195837 -0.179824 -0.964008 + 0.069512 1.70727 0.292556 0.452452 -0.357785 -0.81687 + 0.067914 1.63867 0.32898 0.473636 -0.395008 -0.78717 + 0.066975 1.57056 0.359551 0.478287 -0.302429 -0.824487 + 0.025152 1.82848 0.257614 -0.094793 -0.165363 -0.981667 + 0.071692 1.77956 0.266749 0.267132 -0.321371 -0.908494 + 0.138335 1.70553 0.329772 0.406794 -0.402298 -0.820168 + 0.136737 1.63693 0.366197 0.382705 -0.417345 -0.824233 + 0.127071 1.56688 0.393913 0.444677 -0.326375 -0.834111 + 0.081363 1.84769 0.230549 0.0179551 -0.328724 -0.944255 + 0.145096 1.84073 0.259605 0.451012 -0.366014 -0.814016 + 0.135424 1.7726 0.295804 0.358816 -0.44562 -0.820167 + 0.235816 1.6716 0.395743 0.612861 -0.352643 -0.707138 + 0.2199 1.59834 0.419828 0.528765 -0.346037 -0.775026 + 0.149508 1.91236 0.233325 0.441942 -0.315568 -0.839705 + 0.206375 1.80209 0.327529 0.727398 -0.140786 -0.671618 + 0.232905 1.73867 0.361775 0.624394 -0.258729 -0.737015 + 0.29681 1.71836 0.448149 0.860846 -0.209775 -0.463615 + 0.210787 1.87381 0.301299 0.692924 -0.298311 -0.656404 + 0.263629 1.85203 0.385818 0.838912 -0.128431 -0.528897 + 0.29016 1.78861 0.420064 0.877701 -0.0393647 -0.477589 + 0.230902 1.94743 0.286985 0.689676 -0.308795 -0.654975 + 0.297934 2.00159 0.348771 0.860567 -0.371393 -0.348555 + 0.277819 1.92789 0.363036 0.865623 -0.292029 -0.406712 + 0.317445 1.99815 0.443342 0.910565 -0.26615 -0.316283 + 0.301748 1.91849 0.465723 0.901525 -0.16344 -0.400674 + 0.323077 2.06909 0.320073 0.791825 -0.387351 -0.472199 + 0.368253 2.13837 0.383673 0.838894 -0.499458 -0.216328 + 0.331635 2.07409 0.420611 0.89681 -0.407382 -0.172546 + 0.378705 2.13667 0.481815 0.845794 -0.477248 -0.238469 + 0.393396 2.20586 0.354975 0.708447 -0.591826 -0.384506 + 0.451134 2.24204 0.399915 0.582689 -0.812491 0.0182176 + 0.414515 2.17767 0.436803 0.791461 -0.605465 -0.0836763 + 0.497044 2.29366 0.303292 -0.0509846 -0.944861 -0.32348 + 0.472794 2.23674 0.348895 0.168552 -0.932217 -0.320253 + 0.549107 2.2493 0.375134 0.127075 -0.879058 0.459466 + 0.504507 2.2952 0.434824 0.161504 -0.978919 -0.125037 + 0.468697 2.2542 0.479835 0.351181 -0.809393 -0.470696 + 0.544082 2.27465 0.269227 -0.636557 -0.624973 -0.45189 + 0.587066 2.16372 0.27836 -0.50263 -0.835519 0.221971 + 0.570767 2.244 0.324112 -0.311043 -0.907562 0.282104 + 0.656683 2.21392 0.282416 0.340378 -0.706974 0.619944 + 0.69311 2.17527 0.216759 -0.526058 -0.447447 -0.723224 + 0.634104 2.14471 0.244295 -0.483446 -0.727164 -0.487352 + 0.672982 2.13364 0.236664 0.233829 -0.679581 0.695337 + 0.757834 2.14915 0.186202 -0.484517 -0.697017 -0.528593 + 0.791075 2.16562 0.135865 0.0890415 -0.989088 -0.117375 + 0.764288 2.1663 0.096893 -0.0659463 -0.990531 -0.120415 + 0.83345 2.18638 0.01491 0.788276 -0.607753 -0.0962156 + 0.834047 2.18376 0.093245 0.846173 0.115969 0.520137 + 0.800807 2.16729 0.143582 0.269573 -0.9536 -0.134083 + 0.757834 2.14915 0.186202 0.269567 -0.953602 -0.134076 + 0.729833 2.18652 0.061879 -0.13134 -0.983256 -0.126323 + 0.806663 2.18697 -0.024105 0.225126 -0.968103 -0.109977 + 0.829873 2.21614 -0.096232 0.996469 -0.0440814 -0.0714557 + 0.83047 2.21361 -0.017854 0.998851 -0.0444163 -0.0179958 + 0.800807 2.16729 0.143582 0.583007 0.746251 0.321266 + 0.774961 2.18234 0.16651 0.662776 -0.386191 0.641549 + 0.694818 2.17955 -0.003062 0.0667963 -0.990243 0.122303 + 0.761369 2.179 -0.100709 0.105361 -0.993434 0.0445938 + 0.733426 2.16917 -0.325479 0.836294 -0.526484 -0.153056 + 0.77872 2.17723 -0.248833 0.689654 -0.697818 -0.19346 + 0.726354 2.17204 -0.165652 0.245391 -0.965046 0.0920265 + 0.719845 2.09289 -0.351357 0.623882 -0.756021 0.197997 + 0.690305 2.10063 -0.539561 0.988101 -0.00750337 -0.153625 + 0.680219 2.19795 -0.522923 0.979196 -0.169943 -0.110879 + 0.683856 2.1495 -0.235005 -0.0153914 -0.967276 0.25326 + 0.677348 2.07035 -0.42071 0.267895 -0.841857 0.468519 + 0.676724 2.02426 -0.56549 0.989777 -0.124688 -0.0692404 + 0.675371 2.08841 -0.670391 0.991742 -0.125312 -0.0272947 + 0.642865 2.13821 -0.29785 -0.133497 -0.911534 0.388954 + 0.643619 2.04868 -0.42158 0.113588 -0.714654 0.690194 + 0.670978 1.91222 -0.532224 0.796404 -0.496356 0.3455 + 0.658296 1.88243 -0.635237 0.982107 -0.188133 0.00841582 + 0.664042 1.99448 -0.668502 0.988357 -0.1008 -0.113968 + 0.591543 2.1091 -0.346226 -0.51506 -0.725892 0.455844 + 0.592297 2.01965 -0.469899 -0.665171 -0.505269 0.549773 + 0.63725 1.89055 -0.533104 0.00704404 -0.770106 0.637877 + 0.641212 1.80309 -0.633011 0.956379 -0.199951 0.212975 + 0.558588 2.13478 -0.407112 -0.926325 -0.323327 0.193344 + 0.559973 2.04854 -0.520547 -0.93419 -0.245391 0.258983 + 0.584927 1.90744 -0.569742 -0.741954 -0.471341 0.476804 + 0.641212 1.80309 -0.633011 -0.572073 -0.628236 0.527306 + 0.540315 2.19079 -0.463918 -0.973453 -0.202623 0.106453 + 0.5417 2.10455 -0.577354 -0.984898 -0.144494 0.095384 + 0.552602 1.93633 -0.620381 -0.958182 -0.216193 0.187479 + 0.562467 1.83725 -0.682375 -0.90242 -0.332575 0.27392 + 0.616518 1.72023 -0.715886 -0.614284 -0.476627 0.628874 + 0.519111 2.30785 -0.404672 -0.956811 -0.283568 0.064045 + 0.522905 2.24451 -0.524367 -0.981203 -0.186234 0.050573 + 0.52994 2.16265 -0.639385 -0.991032 -0.12787 0.0387863 + 0.549676 2.00322 -0.681651 -0.994271 -0.105033 0.0198208 + 0.559541 1.90423 -0.743586 -0.991122 -0.131 0.0227111 + 0.515408 2.29635 -0.583968 -0.986721 -0.16194 -0.0125587 + 0.522443 2.21458 -0.698937 -0.993023 -0.106653 0.0502947 + 0.537916 2.06141 -0.743632 -0.98551 -0.14134 0.0937756 + 0.488206 2.41158 -0.525548 -0.976745 -0.193347 -0.0926653 + 0.507184 2.34934 -0.641333 -0.991555 -0.126623 -0.0280074 + 0.513535 2.28095 -0.751484 -0.996295 -0.075932 0.0403803 + 0.519544 2.12001 -0.811529 -0.988874 -0.115325 0.0939528 + 0.489974 2.45804 -0.595221 -0.98003 -0.167869 -0.106592 + 0.501595 2.42327 -0.678391 -0.991855 -0.118328 -0.047128 + 0.510635 2.18637 -0.864076 -0.996516 -0.0549294 0.0627552 + 0.526611 2.02693 -0.872705 -0.983096 -0.139465 0.118621 + 0.452466 2.74238 -0.853301 -0.958588 -0.254863 -0.127098 + 0.389777 3.35025 -1.69156 -0.90702 -0.377863 -0.185833 + 0.350028 3.47889 -1.79577 -0.86164 -0.439859 -0.253183 + 0.357852 3.75867 -2.25577 -0.378537 -0.320033 -0.868498 + 0.323683 3.81663 -2.25415 -0.55997 -0.402122 -0.724384 + 0.356326 3.82647 -2.2622 0.27545 0.00164683 -0.961314 + 0.393062 3.77164 -2.24423 0.48678 0.0899744 -0.868879 + 0.435041 3.67681 -2.2342 0.383895 0.0863823 -0.919327 + 0.399831 3.66393 -2.24569 0.318722 -0.0261144 -0.947488 + 0.287801 3.87879 -2.26543 -0.54885 -0.430104 -0.71678 + 0.320444 3.88863 -2.27347 0.243756 -0.044005 -0.968838 + 0.335666 3.91617 -2.25556 0.685093 0.277404 -0.673569 + 0.3782 3.85375 -2.23826 0.704552 0.273052 -0.655018 + 0.414936 3.79883 -2.22034 0.719672 0.274838 -0.637602 + 0.38479 3.90521 -2.19379 0.80188 0.390519 -0.452198 + 0.429882 3.82916 -2.17526 0.8114 0.380702 -0.443504 + 0.478303 3.72625 -2.16821 0.803247 0.346498 -0.484492 + 0.378568 3.95873 -2.14769 0.829358 0.460048 -0.31705 + 0.42366 3.88259 -2.12921 0.833792 0.440717 -0.332505 + 0.504429 3.73987 -2.11361 0.832936 0.388421 -0.39414 + 0.366002 4.02351 -2.06529 0.824725 0.498538 -0.266999 + 0.398513 3.98461 -2.03812 0.52043 0.513402 -0.682328 + 0.456171 3.84361 -2.1021 0.829315 0.425742 -0.361911 + 0.549484 3.70203 -2.04408 0.750844 0.413037 -0.515395 + 0.564439 3.60092 -2.11415 0.792874 0.379289 -0.476961 + 0.326371 4.14841 -1.97002 0.575364 0.583458 -0.573178 + 0.427696 3.95708 -2.04764 0.452818 0.461964 -0.762591 + 0.501226 3.80578 -2.03256 0.774085 0.369589 -0.514 + 0.355555 4.12096 -1.97949 0.462404 0.559329 -0.687992 + 0.401214 4.07733 -1.95971 0.738456 0.554933 -0.383056 + 0.459072 3.95874 -2.0149 0.701962 0.46593 -0.538664 + 0.532601 3.80743 -1.99983 0.315249 0.148063 -0.937388 + 0.29222 4.25662 -1.87364 0.736924 0.565396 -0.3705 + 0.337879 4.21298 -1.85387 0.726191 0.575107 -0.376695 + 0.46105 4.0245 -1.90301 0.747877 0.561824 -0.353602 + 0.518908 3.90592 -1.95821 0.685419 0.610261 -0.39722 + 0.576484 3.82328 -2.00548 0.305577 0.375593 -0.874958 + 0.238003 4.41405 -1.75872 0.654101 0.523305 -0.546171 + 0.285288 4.38676 -1.73806 0.697759 0.485415 -0.526787 + 0.314373 4.29125 -1.78103 0.863923 0.436556 -0.251108 + 0.406139 4.15745 -1.81468 0.721169 0.569685 -0.394177 + 0.256711 4.55582 -1.64747 0.702959 0.417535 -0.575772 + 0.336983 4.39134 -1.6486 0.775187 0.429336 -0.463416 + 0.366068 4.29584 -1.69158 0.736767 0.496379 -0.45911 + 0.382632 4.23573 -1.74186 0.710506 0.567284 -0.416377 + 0.463537 4.10564 -1.77914 0.777978 0.536105 -0.327629 + 0.194685 4.69612 -1.60488 -0.137093 0.456697 -0.878995 + 0.237949 4.66941 -1.59862 0.621001 0.363116 -0.694625 + 0.310484 4.52313 -1.57026 0.805047 0.380646 -0.454982 + 0.203348 4.79744 -1.55017 0.0744521 0.312668 -0.94694 + 0.246611 4.77073 -1.54392 0.517578 0.212346 -0.828868 + 0.291722 4.63672 -1.52141 0.747856 0.226739 -0.62394 + 0.361952 4.50588 -1.50138 0.717337 0.342523 -0.606716 + 0.175131 4.90577 -1.51101 -0.0329069 0.297754 -0.954075 + 0.231401 4.89724 -1.51704 0.0738258 0.254109 -0.964354 + 0.316543 4.85085 -1.50488 0.308706 0.0200356 -0.950946 + 0.283094 4.78372 -1.51101 0.575219 -0.107421 -0.810915 + 0.328204 4.64963 -1.48855 0.549114 0.0701608 -0.832797 + 0.314181 4.96879 -1.49417 0.124741 0.240233 -0.962667 + 0.399322 4.9224 -1.48201 0.25692 0.0540487 -0.96492 + 0.417531 4.7888 -1.46101 0.345654 -0.139805 -0.927889 + 0.384082 4.72168 -1.46715 0.402205 -0.0750398 -0.912469 + 0.245031 5.10121 -1.44312 0.0210488 0.360268 -0.932611 + 0.378838 5.08096 -1.44984 0.0946743 0.327072 -0.940245 + 0.501443 4.99974 -1.44918 0.250674 0.122408 -0.960301 + 0.473052 4.8423 -1.45428 0.314939 -0.132493 -0.939819 + 0.332854 5.21829 -1.39771 0.10649 0.373271 -0.92159 + 0.45747 5.29863 -1.35106 0.0276865 0.477643 -0.878118 + 0.585074 5.3526 -1.31374 0.106686 0.475025 -0.873481 + 0.506442 5.13492 -1.41252 0.175392 0.308239 -0.935001 + 0.212371 5.21916 -1.39982 0.00301754 0.457123 -0.889398 + 0.229843 5.34087 -1.31843 -0.00131149 0.605226 -0.796053 + 0.36618 5.37449 -1.29245 -0.0418319 0.616756 -0.786042 + 0.490796 5.45483 -1.24581 -0.0808134 0.665567 -0.74195 + 0.058347 5.22547 -1.39355 -0.0082534 0.463639 -0.885986 + 0.075818 5.34727 -1.31211 -0.000853593 0.607026 -0.794681 + 0.221985 5.48645 -1.18898 -0.00177469 0.661158 -0.750245 + 0.358322 5.52015 -1.16295 0.00660434 0.6685 -0.743683 + 0.482726 5.58027 -1.10407 -0.0234419 0.705847 -0.707976 + -0.075818 5.34727 -1.31211 0.00394171 0.604507 -0.79659 + 0.075818 5.48662 -1.19328 0.0115321 0.655618 -0.755005 + 0.072429 5.69616 -1.00801 0.0122119 0.663558 -0.748025 + 0.218596 5.69599 -1.00371 0.0213943 0.668653 -0.743267 + 0.355916 5.71389 -0.98212 0.0243196 0.675759 -0.736721 + -0.075818 5.48662 -1.19328 -0.00852906 0.658008 -0.752962 + -0.072429 5.69616 -1.00801 -0.0113551 0.662747 -0.748757 + 0.072429 5.97501 -0.760987 0.0188381 0.661816 -0.74943 + 0.216766 5.96896 -0.759101 0.0332929 0.663227 -0.747678 + 0.354086 5.98686 -0.737507 0.0320341 0.666046 -0.745223 + -0.221985 5.48645 -1.18898 -0.00105603 0.663519 -0.748159 + -0.218595 5.69599 -1.00371 -0.0222974 0.667812 -0.743996 + -0.072429 5.97501 -0.760987 -0.0179775 0.66265 -0.748714 + 0.069681 6.1512 -0.605952 0.0212353 0.649818 -0.759793 + 0.214018 6.14506 -0.604125 0.0402827 0.658258 -0.751713 + -0.366178 5.37449 -1.29246 0.0466732 0.608305 -0.79233 + -0.35832 5.52015 -1.16296 0.0333867 0.68461 -0.728144 + -0.355915 5.71389 -0.98212 -0.0243469 0.675759 -0.73672 + -0.216766 5.96896 -0.759101 -0.0342174 0.664055 -0.746901 + -0.490794 5.45483 -1.24581 0.0400022 0.650851 -0.758151 + -0.482724 5.58027 -1.10407 0.0180154 0.713899 -0.700017 + -0.480319 5.77401 -0.923245 -0.0259058 0.676964 -0.73556 + -0.354086 5.98686 -0.737507 -0.0319879 0.666052 -0.745219 + -0.214024 6.14514 -0.604066 -0.0427082 0.656454 -0.753156 + -0.585073 5.3526 -1.31374 -0.101309 0.480809 -0.870953 + -0.625152 5.50066 -1.20399 -0.0437619 0.671224 -0.739962 + -0.617082 5.6261 -1.06225 -0.00699847 0.715133 -0.698953 + -0.621968 5.79243 -0.899559 -0.0313346 0.682893 -0.729846 + -0.498003 5.99299 -0.726127 -0.0340916 0.667247 -0.744056 + -0.648565 5.23973 -1.34765 -0.207584 0.314417 -0.92631 + -0.729833 5.37582 -1.27596 -0.176161 0.459542 -0.87051 + -0.769912 5.52379 -1.16626 -0.116869 0.659197 -0.742833 + -0.763907 5.64422 -1.03944 -0.0865878 0.710005 -0.698853 + -0.768794 5.81046 -0.876784 -0.0847802 0.679394 -0.728859 + -0.643552 5.10455 -1.38431 -0.260173 0.191913 -0.946298 + -0.75869 5.15924 -1.34083 -0.280034 0.219362 -0.934592 + -0.790913 5.27267 -1.2991 -0.268294 0.295482 -0.916902 + -0.87218 5.40876 -1.22741 -0.246897 0.452568 -0.856869 + -0.916419 5.52384 -1.13374 -0.242149 0.635748 -0.732932 + -0.693761 4.99564 -1.38867 -0.278328 0.0317936 -0.95996 + -0.808899 5.05033 -1.34519 -0.318793 0.117759 -0.940481 + -0.874585 5.17472 -1.29805 -0.283043 0.22411 -0.932556 + -0.906808 5.28823 -1.25626 -0.291465 0.29207 -0.910903 + -0.739033 4.91135 -1.36187 -0.380542 -0.250171 -0.890282 + -0.834022 4.97093 -1.34046 -0.349652 -0.150342 -0.924738 + -0.897439 5.07519 -1.31066 -0.287299 0.119157 -0.9504 + -1.06721 5.0593 -1.27034 -0.20662 0.178672 -0.961969 + -1.04436 5.15892 -1.25768 -0.262494 0.256333 -0.930263 + -0.753886 4.85831 -1.3304 -0.518264 -0.445583 -0.729971 + -0.848875 4.91789 -1.309 -0.381662 -0.546568 -0.745384 + -0.935001 4.94725 -1.30045 -0.250948 -0.435305 -0.864601 + -0.922562 4.99579 -1.30592 -0.275955 0.0117628 -0.961099 + -0.707743 4.71343 -1.26267 -0.754112 -0.523825 -0.396135 + -0.778492 4.80821 -1.25762 -0.64273 -0.597651 -0.479281 + -0.858119 4.86914 -1.24797 -0.464162 -0.728206 -0.504251 + -0.705095 4.67604 -1.1633 -0.743944 -0.564044 -0.358332 + -0.778795 4.75395 -1.16045 -0.63737 -0.635574 -0.435665 + -0.858422 4.81498 -1.15075 -0.529484 -0.706651 -0.469351 + -0.946564 4.86002 -1.13477 -0.283752 -0.834323 -0.472642 + -0.944245 4.89859 -1.23938 -0.233714 -0.834893 -0.498328 + -0.68488 4.37231 -0.931225 -0.920786 -0.226122 -0.31784 + -0.713711 4.4393 -0.891461 -0.81785 -0.409644 -0.40412 + -0.787411 4.51721 -0.888613 -0.715847 -0.531571 -0.452764 + -0.840733 4.59343 -0.868419 -0.660605 -0.603681 -0.446284 + -0.735201 3.93699 -0.506827 -0.952922 0.0327594 -0.301441 + -0.764032 4.00398 -0.467072 -0.944732 -0.0579927 -0.322673 + -0.773668 4.10225 -0.429669 -0.892892 -0.220631 -0.392511 + -0.826991 4.17847 -0.409485 -0.848911 -0.359368 -0.387562 + -0.866016 3.63627 -0.323968 -0.515665 0.355658 -0.779485 + -0.859066 3.69351 -0.289117 -0.590769 0.434929 -0.67958 + -0.839342 3.77394 -0.251423 -0.670237 0.351858 -0.653436 + -0.848979 3.8722 -0.21402 -0.626161 0.265036 -0.733266 + -0.828354 3.58281 -0.357777 -0.719455 0.350056 -0.599871 + -0.973384 3.56342 -0.355589 0.229455 0.551609 -0.801921 + -1.05349 3.68378 -0.282855 0.311257 0.603251 -0.734308 + -1.03377 3.76411 -0.245203 -0.0755589 0.395936 -0.915164 + -0.935722 3.50996 -0.389398 -0.0210866 0.595645 -0.802971 + -0.986107 3.44005 -0.448314 0.224153 0.608274 -0.761419 + -1.26445 3.5853 -0.576089 0.596143 0.344512 -0.725207 + -1.25245 3.70489 -0.517631 0.646656 0.477446 -0.594879 + -1.32135 3.47721 -0.677476 0.552852 0.389911 -0.736427 + -1.77462 3.94002 -0.880283 0.564184 0.175329 -0.806818 + -1.76261 4.05962 -0.821833 0.608472 0.144961 -0.780223 + -1.73801 4.16008 -0.797641 0.67549 0.120899 -0.72739 + -1.33256 3.82517 -0.444947 0.69554 0.437485 -0.569939 + -1.09483 3.2719 -0.671261 0.0498391 0.926215 -0.373688 + -1.34655 3.34276 -0.768394 0.487895 0.648745 -0.584027 + -1.74741 3.72033 -0.871373 0.512495 0.196337 -0.835943 + -1.99585 3.86673 -1.01114 0.535749 0.141729 -0.832397 + -2.02305 4.08633 -1.0201 0.705316 -0.031425 -0.708196 + -1.41999 3.30677 -0.932065 0.451377 0.807032 -0.380733 + -1.77261 3.58579 -0.962341 0.541556 0.459701 -0.703841 + -1.97489 3.67645 -1.06076 0.563931 0.390834 -0.727483 + -2.05102 3.88745 -1.04243 0.414272 0.14586 -0.898389 + -1.41563 3.25271 -1.08502 0.203698 0.977548 -0.0539174 + -1.74752 3.40461 -1.07452 0.484354 0.706031 -0.516644 + -1.9498 3.49535 -1.17289 0.620114 0.63803 -0.456482 + -2.03006 3.69726 -1.092 0.419035 0.403192 -0.813539 + -1.43534 3.28172 -1.26488 0.122931 0.985309 0.118547 + -1.74317 3.35054 -1.22748 0.350866 0.931439 -0.0965076 + -1.90418 3.40747 -1.31688 0.490889 0.868698 -0.0662685 + -1.99278 3.52588 -1.20576 0.477286 0.704185 -0.525662 + -1.39002 3.28857 -1.38414 0.0142937 0.966325 0.256926 + -1.68608 3.35453 -1.39578 0.238921 0.963974 0.11692 + -1.84709 3.41146 -1.48519 0.379312 0.912703 0.151973 + -1.94716 3.43808 -1.3497 0.401155 0.905302 -0.139654 + -1.23927 3.29413 -1.31657 -0.307173 0.932089 0.191976 + -1.34359 3.3214 -1.449 -0.0746816 0.97037 0.229792 + -1.64076 3.36138 -1.51505 0.238689 0.970394 0.0369177 + -1.76269 3.39842 -1.608 0.378296 0.915542 0.136654 + -1.19284 3.32696 -1.38142 -0.497938 0.817225 0.290175 + -1.27698 3.33323 -1.50369 -0.379465 0.771364 0.510885 + -1.15402 3.36187 -1.3727 -0.562822 0.788342 0.248492 + -1.23816 3.36814 -1.49496 -0.420223 0.846644 0.326506 + -2.03674 3.52417 -1.2188 -0.20668 0.680349 -0.703142 + -2.07403 3.69546 -1.10509 -0.133465 0.406055 -0.90405 + -2.10814 3.70056 -1.08372 -0.352327 0.320457 -0.879303 + -2.12779 3.92912 -1.0268 -0.48189 0.0725509 -0.873223 + -2.09368 3.92411 -1.04812 -0.217651 0.0481205 -0.97484 + -2.04662 4.10856 -1.05841 0.496568 -0.0961534 -0.862655 + -2.15277 3.49152 -1.19185 -0.22057 0.530183 -0.818691 + -2.17767 3.69811 -1.06748 -0.0261827 0.395142 -0.918247 + -2.1757 3.92894 -1.00148 -0.214309 0.168308 -0.962156 + -2.14407 4.18355 -1.03649 -0.495373 -0.0225646 -0.868387 + -2.08927 4.14522 -1.0641 -0.251775 -0.0967016 -0.962943 + -2.26781 3.48799 -1.15554 -0.433034 0.399989 -0.807769 + -2.25717 3.7201 -1.07276 -0.214088 0.338873 -0.91615 + -2.2552 3.95093 -1.00678 -0.348059 0.285967 -0.892792 + -2.21741 4.1759 -0.951634 -0.817518 0.18664 -0.544821 + -2.19198 4.18327 -1.01121 -0.747521 0.0392026 -0.66308 + -2.32413 3.3409 -1.18198 -0.938841 0.218272 -0.266337 + -2.31998 3.49107 -1.12188 -0.882703 0.171152 -0.437655 + -2.30934 3.72318 -1.0391 -0.768542 0.237593 -0.594048 + -2.28632 3.94674 -0.972512 -0.850108 0.265913 -0.45454 + -2.33304 3.25212 -1.1848 -0.986146 0.0807105 0.144923 + -2.31988 3.32512 -1.13384 -0.988285 -0.00159184 0.152614 + -2.31574 3.47529 -1.07374 -0.86991 -0.154588 0.468359 + -2.32832 3.70336 -0.997166 -0.954095 -0.0450388 0.296099 + -2.30531 3.92699 -0.930517 -0.974764 0.122282 0.186768 + -2.34921 3.16953 -1.20275 -0.971452 0.0462548 0.232685 + -2.3288 3.19885 -1.17333 -0.915978 0.0124456 0.401035 + -2.31564 3.27193 -1.12231 -0.667049 -0.196994 0.718498 + -2.27542 3.46653 -1.04677 -0.276034 -0.323147 0.905197 + -2.28801 3.69459 -0.970183 -0.42858 -0.27725 0.859914 + -2.34791 3.10641 -1.19963 -0.754527 0.288436 0.589486 + -2.3275 3.13582 -1.17016 -0.693225 0.0636203 0.717908 + -2.30229 3.14979 -1.15956 -0.459799 -0.0169939 0.887861 + -2.26361 3.19658 -1.1378 0.108022 -0.319313 0.941473 + -2.27696 3.31872 -1.10056 -0.0500991 -0.323178 0.945011 + -2.37953 3.0253 -1.16654 -0.441648 0.523007 0.72898 + -2.34848 3.02759 -1.15571 -0.466432 0.427424 0.774435 + -2.32327 3.04155 -1.14509 -0.037935 0.189986 0.981054 + -2.1816 3.33755 -1.09758 0.132213 -0.416153 0.899631 + -2.42194 2.92441 -1.12279 -0.0872067 0.584255 0.806871 + -2.39088 2.92679 -1.11191 -0.244572 0.547449 0.800302 + -2.3819 2.89788 -1.09264 0.18471 0.505911 0.842577 + -2.51375 2.87948 -1.06177 -0.497057 0.85052 0.171903 + -2.46684 2.86717 -1.05965 0.204828 0.729196 0.652931 + -2.44093 2.84227 -1.04153 0.239355 0.672351 0.700466 + -2.55656 2.85204 -0.988248 -0.341542 0.926441 0.158288 + -2.51101 2.82575 -0.98151 0.345405 0.755607 0.556554 + -2.48511 2.80086 -0.963391 0.302031 0.775501 0.554414 + -2.48381 2.76838 -0.917348 0.708668 0.414782 0.570742 + -2.63086 2.78461 -0.927457 -0.806476 0.566714 -0.168617 + -2.59755 2.8118 -0.900746 -0.18606 0.933011 0.308013 + -2.55199 2.7856 -0.893959 0.430014 0.725366 0.537524 + -2.52567 2.7659 -0.891038 0.370613 0.735319 0.567407 + -2.52438 2.73342 -0.844986 0.64503 0.432435 0.630028 + -2.66066 2.74987 -0.83028 -0.82744 0.561399 0.0132083 + -2.62735 2.77706 -0.803569 -0.0493439 0.873465 0.484379 + -2.60067 2.72773 -0.789934 0.531507 0.589788 0.607988 + -2.57435 2.70811 -0.786954 0.64034 0.39903 0.656308 + -2.58797 2.60381 -0.767704 0.834478 0.0537793 0.548411 + -2.72259 2.56669 -0.860208 -0.956183 0.231627 -0.179062 + -2.69296 2.68907 -0.747364 -0.889107 0.457443 -0.0153327 + -2.67426 2.71354 -0.70516 -0.838971 0.541086 0.0579133 + -2.74137 2.56587 -0.553589 -0.880493 0.457054 0.125831 + -2.76006 2.54148 -0.595733 -0.936866 0.349607 0.00749561 + -2.79322 2.40892 -0.417933 -0.938189 0.337526 0.076671 + -2.77823 2.47099 -0.568038 -0.987795 0.139993 -0.0682804 + -2.77526 2.41856 -0.604634 -0.952243 -0.234386 -0.195694 + -2.79025 2.35658 -0.454487 -0.94422 -0.283216 -0.16804 + -2.79322 2.40892 -0.417933 -0.994755 -0.0682202 -0.0762121 + -2.7775 2.26562 -0.336527 -0.835773 -0.475701 -0.274212 + -2.80481 2.30012 -0.301482 -0.875531 -0.403008 -0.266514 + -2.75386 2.42636 -0.691736 -0.900818 -0.381683 -0.206991 + -2.7346 2.37815 -0.659845 -0.715397 -0.677388 -0.171325 + -2.75601 2.37036 -0.572744 -0.677809 -0.67288 -0.296322 + -2.7551 2.32544 -0.485146 -0.630155 -0.673156 -0.386995 + -2.73235 2.41021 -0.791162 -0.935062 -0.318862 -0.154873 + -2.71751 2.37223 -0.759195 -0.751532 -0.656511 -0.0647519 + -2.69972 2.35576 -0.656064 -0.34996 -0.931197 -0.101984 + -2.69724 2.3427 -0.584036 -0.326262 -0.894569 -0.305449 + -2.69634 2.29778 -0.49643 -0.379151 -0.778764 -0.499771 + -2.68263 2.34984 -0.755413 -0.31506 -0.946747 0.0663902 + -2.65726 2.35028 -0.663776 0.0794665 -0.994686 -0.0654554 + -2.65478 2.33722 -0.591748 0.131387 -0.942476 -0.307371 + -2.65599 2.29595 -0.515472 0.0694266 -0.82843 -0.555773 + -2.61197 2.36466 -0.665269 0.863419 -0.495081 0.0969687 + -2.6308 2.34821 -0.587988 0.891864 -0.44596 -0.0754884 + -2.63201 2.30695 -0.511721 0.664362 -0.626642 -0.407362 + -2.64478 2.22857 -0.436561 -0.115513 -0.725978 -0.677948 + -2.68512 2.23031 -0.417578 -0.422456 -0.720006 -0.550566 + -2.62188 2.43396 -0.655106 0.915079 0.129608 0.38188 + -2.64071 2.41751 -0.577825 0.838624 0.42812 0.336785 + -2.62464 2.29899 -0.474341 0.965654 0.235955 0.108801 + -2.62827 2.23067 -0.436606 0.624547 -0.494214 -0.604726 + -2.57719 2.45282 -0.751176 0.950076 -0.121724 0.287295 + -2.63265 2.58495 -0.671634 0.792221 0.187362 0.580759 + -2.72643 2.48661 -0.533697 0.706814 0.384221 0.593959 + -2.75702 2.40792 -0.417813 0.326771 0.734124 0.595216 + -2.6713 2.33883 -0.461941 0.66829 0.595627 0.445665 + -2.64759 2.66422 -0.691526 0.617413 0.408156 0.672465 + -2.74137 2.56587 -0.553589 0.678726 0.311166 0.665212 + -2.79322 2.40892 -0.417933 0.730069 0.292584 0.617571 + -2.67426 2.71354 -0.70516 0.585618 0.494254 0.642468 + -2.79322 2.40892 -0.417933 0.0190187 0.771061 0.636477 + -2.76861 2.29912 -0.301354 0.184847 0.822265 0.538249 + -2.67835 2.27482 -0.324272 0.509222 0.781928 0.359558 + -2.63169 2.23507 -0.336622 0.773302 0.630507 0.066812 + -2.6209 2.22272 -0.399226 0.922044 0.387 0.00812664 + -2.80481 2.30012 -0.301482 0.0150156 0.836221 0.548187 + -2.7715 2.24308 -0.168698 0.0686574 0.941178 0.330863 + -2.68124 2.21887 -0.191567 0.252826 0.926529 0.27861 + -2.78894 2.21716 -0.116009 -0.974741 0.183439 0.127398 + -2.75434 2.21575 -0.014957 -0.119126 0.968143 0.220248 + -2.68391 2.19877 -0.072337 0.281741 0.943273 0.175662 + -2.57417 2.17654 -0.070437 0.116701 0.976384 0.181812 + -2.77177 2.18983 0.037742 -0.897126 0.328558 0.295322 + -2.74515 2.15659 0.136712 -0.87528 0.266124 0.40381 + -2.72403 2.18317 0.102277 -0.0532834 0.948269 0.312964 + -2.65361 2.16627 0.044948 0.275911 0.940453 0.198549 + -2.56437 2.16259 -0.001088 0.107395 0.964623 0.240768 + -2.71866 2.09769 0.054926 -0.847469 -0.529968 0.0304928 + -2.69974 2.11281 0.241532 -0.931868 0.263087 0.249814 + -2.67862 2.13939 0.207101 -0.129672 0.955035 0.266634 + -2.59974 2.13291 0.120721 0.151966 0.981231 0.11871 + -2.77295 2.19257 -0.167609 -0.871961 -0.47949 -0.0988584 + -2.74563 2.15807 -0.202654 -0.779736 -0.586112 -0.220195 + -2.70354 2.14469 -0.271672 -0.605016 -0.69265 -0.392673 + -2.64631 2.14052 -0.322056 -0.461534 -0.735068 -0.49665 + -2.62056 2.15769 -0.36899 -0.20352 -0.722511 -0.660725 + -2.74235 2.23447 -0.367186 -0.644679 -0.653046 -0.397391 + -2.60405 2.15979 -0.369034 0.495254 -0.455903 -0.739511 + -2.66377 2.05986 0.383058 -0.862399 -0.504179 0.0455193 + -2.68075 2.1021 0.367288 -0.98935 0.0869814 0.116705 + -2.65377 2.14535 0.367786 -0.625829 0.779616 -0.0231731 + -2.63115 2.14083 0.289608 -0.263948 0.955437 -0.132179 + -2.65958 2.04483 0.483687 -0.902284 -0.425122 -0.0718033 + -2.66952 2.10925 0.515707 -0.970708 0.234125 0.0539545 + -2.64254 2.15241 0.516154 -0.753836 0.65417 -0.0615804 + -2.54722 2.20302 0.444684 -0.44355 0.878741 -0.176288 + -2.52459 2.1986 0.366555 -0.328891 0.92046 -0.211148 + -2.59455 1.97362 0.497629 -0.62556 -0.767548 -0.139802 + -2.66026 2.01101 0.590262 -0.915908 -0.309181 -0.255968 + -2.6702 2.07543 0.622282 -0.99197 0.016934 -0.125338 + -2.64937 2.17764 0.618454 -0.823647 0.470607 -0.316441 + -2.44827 1.85895 0.591642 -0.425711 -0.871234 -0.24438 + -2.59276 1.95846 0.561489 -0.547416 -0.780403 -0.30217 + -2.64805 1.97062 0.596026 -0.673337 -0.516994 -0.52852 + -2.68163 1.94816 0.724126 -0.947784 -0.158946 -0.27648 + -2.40772 1.82859 0.626028 -0.309207 -0.916334 -0.254408 + -2.56371 1.90541 0.638774 -0.421108 -0.815377 -0.397277 + -2.619 1.91757 0.673311 -0.408098 -0.789303 -0.458755 + -2.66943 1.90768 0.72984 -0.835491 -0.540317 -0.100059 + -2.43108 1.83731 0.699726 -0.285353 -0.920983 -0.265262 + -2.52315 1.87505 0.673161 -0.311142 -0.876903 -0.366377 + -2.58025 1.85702 0.72798 -0.337728 -0.737034 -0.585424 + -2.63068 1.84713 0.784507 -0.467577 -0.587057 -0.66086 + -2.35111 1.81048 0.712186 -0.226399 -0.936499 -0.267794 + -2.48818 1.81928 0.754544 -0.155314 -0.723602 -0.672516 + -2.58267 1.73848 0.824504 -0.27478 -0.546245 -0.791273 + -2.62966 1.70621 0.870192 -0.482056 -0.492275 -0.724767 + -2.67768 1.81487 0.830195 -0.561067 -0.484789 -0.670957 + -2.24022 1.7703 0.672387 -0.216768 -0.97406 0.0649485 + -2.25326 1.7895 0.740333 -0.0978414 -0.986684 -0.129931 + -2.32032 1.74681 0.80888 0.0655626 -0.739591 -0.669855 + -2.41817 1.76788 0.780783 -0.0811627 -0.701237 -0.708293 + -2.23005 1.77135 0.598375 -0.39503 -0.914604 0.0863156 + -2.16063 1.76303 0.711379 -0.179924 -0.950519 0.253259 + -2.17367 1.78214 0.779274 0.0584101 -0.993014 -0.102523 + -2.23175 1.7483 0.824294 0.202526 -0.806138 -0.55599 + -2.18945 1.73318 0.523476 -0.468713 -0.850047 0.240265 + -2.16828 1.73679 0.612622 -0.375291 -0.901582 0.215189 + -2.11071 1.74814 0.693367 -0.186954 -0.927475 0.323787 + -2.07002 1.79113 0.816904 -0.136102 -0.976311 -0.168207 + -2.1281 1.7572 0.861874 0.191651 -0.750324 -0.63268 + -1.96398 1.75787 0.800715 -0.61827 -0.765524 -0.178085 + -2.0201 1.77624 0.798892 -0.299101 -0.953547 0.0358793 + -2.07482 1.75424 0.87501 -0.0678023 -0.603834 -0.794221 + -2.39266 1.62727 0.890711 0.178703 -0.409148 -0.894798 + -2.48123 1.62578 0.875297 -0.0509209 -0.564103 -0.824133 + -1.92184 1.71138 0.78204 -0.919863 -0.383005 -0.0846055 + -2.0322 1.70732 0.876675 -0.371098 0.230403 -0.899556 + -2.0187 1.73586 0.876834 -0.549696 -0.251992 -0.796451 + -2.33938 1.62431 0.903847 0.0807427 -0.234473 -0.968764 + -2.35287 1.59576 0.903688 -0.0285176 -0.0623737 -0.997645 + -1.95162 1.54327 0.695609 -0.893541 0.362483 -0.264936 + -1.93684 1.67183 0.814342 -0.742547 0.171886 -0.647363 + -2.1287 1.64025 0.874234 -0.273124 0.369562 -0.888159 + -1.99576 1.4709 0.701758 -0.629161 0.535672 -0.563215 + -2.03334 1.60485 0.811951 -0.363201 0.503872 -0.783708 + -2.09902 1.5652 0.821238 -0.367398 0.493523 -0.788324 + -2.22983 1.57812 0.886249 -0.261304 0.298129 -0.918063 + -2.00568 1.3866 0.610768 -0.776792 0.47007 -0.41908 + -2.10772 1.36445 0.683333 -0.383125 0.545403 -0.745487 + -2.06144 1.43125 0.711045 -0.395991 0.556382 -0.7305 + -2.1753 1.4964 0.804189 -0.355822 0.535242 -0.766099 + -2.30612 1.50933 0.869199 -0.425902 0.407795 -0.807658 + -2.01091 1.34499 0.547637 -0.82101 0.187108 -0.539382 + -2.04117 1.26221 0.547429 -0.823187 0.0125159 -0.567633 + -2.03594 1.30382 0.610558 -0.706906 0.399197 -0.583889 + -1.99104 1.3952 0.534271 -0.362261 -0.0715226 -0.929329 + -1.9796 1.30111 0.52765 -0.0896282 0.0114549 -0.995909 + -1.96357 1.2312 0.53693 0.0409232 -0.119397 -0.992003 + -2.03364 1.17372 0.55069 -0.275874 0.116181 -0.954146 + -1.93628 1.39256 0.520656 -0.356412 -0.348423 -0.866932 + -1.84257 1.26513 0.553172 -0.0791193 -0.224305 -0.971302 + -1.82655 1.19522 0.562451 0.213439 -0.479395 -0.851249 + -1.87035 1.14444 0.593405 0.422897 -0.30261 -0.854158 + -1.95604 1.14272 0.540192 0.24263 -0.00450295 -0.970108 + -1.9422 1.42049 0.512666 -0.241462 0.0906465 -0.966167 + -1.76075 1.29119 0.47323 -0.475316 -0.348325 -0.807926 + -1.78781 1.26248 0.539557 -0.424987 -0.579908 -0.695048 + -1.75005 1.18048 0.619175 0.229811 -0.875825 -0.424403 + -1.96852 1.46025 0.532603 0.279973 0.455906 -0.844846 + -1.81121 1.37251 0.505971 0.110625 0.597934 -0.793875 + -1.76668 1.31913 0.465241 -0.110583 0.0740392 -0.991105 + -1.73453 1.32555 0.469519 -0.598576 -0.0676313 -0.798206 + -1.69201 1.22698 0.438445 -0.849049 -0.159216 -0.503752 + -1.83753 1.41219 0.525857 0.0165979 0.379719 -0.924953 + -1.77906 1.37893 0.510249 -0.454201 0.20119 -0.867885 + -1.77486 1.40457 0.487045 -0.498039 0.350622 -0.793109 + -1.6956 1.2825 0.425286 -0.827926 -0.190966 -0.527323 + -1.66144 1.21731 0.386586 -0.829269 0.00101613 -0.558849 + -1.66855 1.1534 0.384091 -0.927191 -0.0580284 -0.370067 + -1.71907 1.19827 0.504771 -0.799903 -0.540106 -0.261613 + -1.73841 1.37974 0.466652 0.0308051 0.628342 -0.777327 + -1.6236 1.20702 0.333423 -0.510988 0.289906 -0.809225 + -1.58944 1.14192 0.294773 -0.959969 -0.236139 -0.150657 + -1.63799 1.14373 0.332232 -0.71601 0.258553 -0.648444 + -1.72334 1.39731 0.482822 -0.304943 0.269619 -0.913409 + -1.55 1.18402 0.345047 0.372253 0.60795 -0.701302 + -1.58715 1.1821 0.312979 0.214456 0.648658 -0.730241 + -1.54797 1.02022 0.202565 -0.230462 0.523247 -0.820427 + -1.76554 1.46641 0.498735 -0.467581 -0.105256 -0.877661 + -1.52648 1.25231 0.376564 0.193148 0.279237 -0.940596 + -1.53493 1.20159 0.361217 0.208956 0.424488 -0.880992 + -1.47932 1.00796 0.269591 0.943581 -0.0354123 0.329243 + -1.47344 1.01536 0.236374 0.884015 0.398156 -0.244927 + -1.56869 1.32141 0.392476 -0.483494 -0.419662 -0.768191 + -1.46161 1.25622 0.403406 0.33007 0.398658 -0.855643 + -2.17596 1.71816 0.505099 -0.263738 -0.0843385 -0.9609 + -1.54797 1.02022 0.202565 -0.521385 -0.621049 0.585197 + -1.46161 1.25622 0.403406 -0.349121 -0.681257 -0.643431 + -1.59651 1.02203 0.240025 -0.671117 0.289821 -0.682353 + -1.61359 1.00509 0.256167 -0.914185 0.0015515 -0.405295 + -1.67449 1.15068 0.422399 -0.893056 -0.436931 -0.107439 + -1.50234 0.79014 0.055474 -0.353134 0.453329 -0.818406 + -1.51852 0.785997 0.06025 -0.57868 0.344038 -0.739437 + -1.53559 0.768969 0.076342 -0.833049 0.124216 -0.539072 + -1.61953 1.00237 0.294474 -0.954233 -0.297303 -0.0324203 + -1.51479 0.962226 0.156811 0.157683 0.565378 -0.809619 + -1.46917 0.732146 0.009719 0.122346 0.494524 -0.86051 + -1.46578 0.650271 -0.032268 0.197986 -0.209541 -0.957546 + -1.48196 0.646043 -0.027542 -0.427993 -0.309191 -0.849249 + -1.54581 0.757617 0.093804 -0.960131 -0.201784 -0.193471 + -1.51058 1.01353 0.204357 0.382254 0.59817 -0.704326 + -1.4571 0.731029 0.019659 0.786894 0.350643 -0.507787 + -1.45372 0.649152 -0.02233 0.65373 -0.308235 -0.691106 + -1.49218 0.634691 -0.010081 -0.609276 -0.697937 -0.376386 + -1.54175 0.759102 0.133231 -0.736178 -0.58669 0.337397 + -1.44014 0.777232 0.086428 0.965795 0.207333 -0.155736 + -1.45289 0.782328 0.067205 0.737273 0.43294 -0.518644 + -1.44451 0.644244 -0.008829 0.693537 -0.376036 -0.614495 + -1.48298 0.629783 0.00342 -0.32377 -0.946123 0.00487623 + -1.44603 0.769833 0.119646 0.78951 -0.28675 0.542631 + -1.43177 0.639149 0.010395 0.876247 -0.479596 -0.0466862 + -1.46019 0.624934 0.016618 0.112789 -0.969363 0.218207 + -1.51896 0.754167 0.14638 -0.162587 -0.788857 0.59268 + -1.47445 0.755618 0.125869 0.437179 -0.55398 0.708506 + -1.52288 0.986717 0.329392 0.770085 -0.334956 0.542931 + -1.5559 1.0049 0.38149 0.696801 -0.40086 0.594794 + -1.50747 0.773805 0.177967 0.216367 -0.70042 0.680145 + -1.48532 1.13277 0.359413 0.993469 0.0522243 -0.101446 + -1.52888 1.11144 0.419164 0.790188 -0.492035 0.365383 + -1.55706 1.1107 0.472043 0.537579 -0.644801 0.54336 + -1.59401 1.11498 0.500825 0.536835 -0.562131 0.62914 + -1.58579 1.01846 0.423404 0.193689 -0.684936 0.702387 + -1.47688 1.18341 0.374709 0.864777 0.066944 -0.497674 + -1.48993 1.15558 0.452516 0.820847 -0.554378 0.137388 + -1.51811 1.15484 0.505396 0.488966 -0.785006 0.380365 + -1.58083 1.16838 0.550743 0.217533 -0.881851 0.418353 + -1.61778 1.17257 0.579474 0.16423 -0.937898 0.305574 + -1.48452 1.20507 0.546602 0.923418 -0.323581 0.206383 + -1.51974 1.17783 0.595377 0.475071 -0.84225 0.254797 + -1.58246 1.19137 0.640725 0.24207 -0.97019 -0.0115609 + -1.61781 1.15953 0.666276 0.117909 -0.964051 -0.238124 + -1.46161 1.25622 0.403406 0.182702 -0.934433 -0.305706 + -2.22158 1.4297 0.776526 -0.399677 0.576859 -0.712385 + -2.3626 1.4335 0.884137 -0.499741 0.383233 -0.776783 + -2.51607 1.4707 0.967903 -0.314174 -0.156043 -0.936453 + -2.18905 1.30173 0.668175 -0.377341 0.480985 -0.79137 + -2.29883 1.35653 0.762461 -0.457124 0.527599 -0.716015 + -2.43985 1.36033 0.870072 -0.679531 0.528154 -0.509207 + -2.55795 1.29515 1.00677 -0.777668 -0.0362123 -0.627631 + -2.57256 1.39479 0.98279 -0.468191 -0.191573 -0.86261 + -2.11727 1.24109 0.5954 -0.375559 0.364049 -0.852305 + -2.13899 1.16138 0.587867 -0.405973 0.198356 -0.892099 + -2.24957 1.22143 0.65906 -0.461721 0.312796 -0.830044 + -2.35935 1.27623 0.753346 -0.568282 0.37039 -0.734756 + -2.45962 1.2704 0.860231 -0.758861 0.275312 -0.590197 + -2.05536 1.09401 0.543158 -0.24911 0.0975772 -0.963547 + -2.03337 1.0074 0.527763 -0.112446 0.228181 -0.967103 + -2.17506 1.07656 0.587571 -0.391157 0.198376 -0.89869 + -2.28565 1.13661 0.658765 -0.483454 0.248239 -0.839434 + -1.95709 1.06466 0.54279 0.280709 0.104229 -0.954117 + -1.9351 0.978054 0.527395 0.359277 0.250944 -0.898859 + -2.02185 0.925852 0.501813 -0.026173 0.362291 -0.931698 + -2.16355 0.995014 0.561621 -0.30587 0.316225 -0.898023 + -1.87139 1.06639 0.596003 0.608294 0.0443129 -0.792474 + -1.86447 0.985962 0.583301 0.638048 0.223832 -0.736746 + -1.84667 0.90357 0.570806 0.69828 0.0693767 -0.712455 + -1.9173 0.895663 0.514903 0.473333 0.342722 -0.811478 + -1.9978 0.845877 0.461334 0.0371751 0.462423 -0.88588 + -1.79385 1.1297 0.650129 0.586702 -0.485353 -0.648239 + -1.80259 1.06251 0.667518 0.768497 -0.0722046 -0.635767 + -1.79567 0.982171 0.654866 0.808225 0.144551 -0.570857 + -1.78401 0.905763 0.660809 0.837957 0.0601161 -0.542415 + -1.8293 0.835938 0.596148 0.817203 0.0901419 -0.569258 + -1.73359 1.12172 0.728554 0.495678 -0.494808 -0.713771 + -1.74233 1.05453 0.745943 0.680259 -0.162053 -0.714833 + -1.7404 0.972385 0.752615 0.761869 0.0278333 -0.647133 + -1.72873 0.895891 0.758508 0.806428 0.0939876 -0.583815 + -1.72804 1.18235 0.68035 0.285053 -0.847523 -0.447716 + -1.6787 1.12832 0.732518 0.160881 -0.579655 -0.798822 + -1.68426 1.0677 0.780721 -0.0431545 -0.437108 -0.898373 + -1.67503 0.993074 0.804182 0.151432 -0.226414 -0.962187 + -1.67309 0.910845 0.810805 0.535372 -0.088663 -0.83995 + -1.71513 1.18513 0.556936 -0.568156 -0.821054 -0.0554042 + -1.69311 1.18699 0.618111 -0.135757 -0.989895 0.0409699 + -1.66467 1.16989 0.715122 0.133919 -0.807543 -0.574404 + -1.62616 1.00956 0.800619 0.743316 -0.0441051 -0.667485 + -1.60738 0.938321 0.794815 0.196255 -0.0880708 -0.97659 + -1.67055 1.13745 0.474514 -0.813186 -0.578851 0.0604995 + -1.65237 1.13251 0.532479 -0.526637 -0.776519 0.345934 + -1.6239 1.12854 0.542738 0.18189 -0.757081 0.627491 + -1.66465 1.18294 0.628321 -0.202455 -0.976883 0.0686345 + -1.61546 1.00377 0.333852 -0.881271 -0.444839 0.159623 + -1.59728 0.998827 0.391816 -0.626495 -0.653323 0.425057 + -1.61213 1.05113 0.783223 0.555339 -0.294414 -0.777765 + -1.5683 0.988202 0.841219 0.547399 0.0488385 -0.835445 + -1.5629 0.938744 0.837082 0.558675 0.180516 -0.809504 + -1.54412 0.867502 0.831277 0.432244 -0.111071 -0.89489 + -1.59815 0.863693 0.818274 -0.21058 -0.422443 -0.881588 + -1.60952 1.13005 0.79013 0.773799 -0.44207 -0.453661 + -1.56569 1.06712 0.848126 0.525555 -0.0998693 -0.844878 + -1.48094 0.947401 0.878488 0.109901 0.0457181 -0.992891 + -1.47554 0.897944 0.874352 0.555507 -0.0448609 -0.8303 + -1.57418 1.16189 0.764578 0.643914 -0.687121 -0.33651 + -1.54296 1.11265 0.844866 0.306169 -0.354462 -0.883525 + -1.45821 0.993018 0.875278 0.0809339 -0.209781 -0.974393 + -1.4594 0.843428 0.897777 0.648958 -0.222243 -0.727641 + -1.52797 0.812986 0.854702 0.377584 -0.371614 -0.848135 + -1.54804 1.22667 0.747174 0.814744 -0.57145 -0.0981658 + -1.51682 1.17743 0.827461 0.325364 -0.412496 -0.850873 + -1.45391 1.09575 0.847134 -0.0822618 -0.301143 -0.950024 + -1.51282 1.25382 0.698348 0.686531 -0.7209 0.0947574 + -1.4986 1.24995 0.798452 0.370037 -0.665066 -0.64866 + -1.43569 1.16827 0.818123 0.0269922 -0.299273 -0.953786 + -1.39844 1.00285 0.872655 -0.0319888 -0.264807 -0.963771 + -1.40273 0.900111 0.9008 -0.0964257 -0.330437 -0.938889 + -1.42705 0.810131 0.938248 0.268959 -0.383339 -0.883579 + -1.48115 0.749575 0.933935 0.590757 -0.414201 -0.692418 + -1.52058 0.751028 0.891216 0.493563 -0.401586 -0.771443 + -1.59075 0.801736 0.854789 0.124545 -0.357172 -0.925698 + -1.3925 0.822363 0.933659 0.0203045 -0.444787 -0.895406 + -1.41682 0.732299 0.971057 0.277714 -0.437923 -0.855043 + -1.4488 0.716278 0.974406 0.313028 -0.499471 -0.807801 + -1.49687 0.688112 0.95859 0.596314 -0.520787 -0.610893 + -1.33489 0.693301 1.0436 0.393503 -0.576032 -0.716479 + -1.42433 0.648578 1.01686 0.201754 -0.557455 -0.805319 + -1.45478 0.596872 1.05422 -0.0269332 -0.686943 -0.726212 + -1.47925 0.664574 1.01176 0.20294 -0.750257 -0.62923 + -1.50627 0.652275 0.987461 0.678628 -0.670131 -0.300646 + -1.1991 0.676835 1.14652 0.449861 -0.632005 -0.631027 + -1.3424 0.60958 1.08941 0.40311 -0.549624 -0.731721 + -1.45688 0.548566 1.10849 -0.0682584 -0.740357 -0.668739 + -1.54082 0.606679 1.08404 0.0652579 -0.800728 -0.595463 + -1.14769 0.775965 1.02182 0.425913 -0.790026 -0.440974 + -1.07025 0.74551 1.15717 0.460718 -0.742964 -0.485534 + -1.05089 0.714986 1.22064 0.473928 -0.645433 -0.599006 + -1.17527 0.617705 1.20894 0.499067 -0.508761 -0.701495 + -1.1661 0.918671 0.745052 0.286612 -0.613039 -0.736231 + -1.14172 0.8227 0.960676 0.697446 -0.567514 -0.437603 + -1.06428 0.792159 1.09598 0.406018 -0.801647 -0.438761 + -0.948354 0.796696 1.19172 0.380433 -0.849613 -0.36528 + -0.928998 0.766172 1.25519 0.432385 -0.795523 -0.424483 + -1.20241 1.08491 0.659711 -0.821727 -0.175557 -0.542167 + -1.29256 1.60304 0.697494 -0.812119 -0.563741 -0.15053 + -1.21542 1.25462 0.632759 -0.0031453 -0.00839504 -0.99996 + -1.587 0.730286 0.874144 0.0665804 -0.448761 -0.891168 + -1.66934 0.839396 0.83016 0.573369 -0.0696163 -0.816334 + -1.71192 0.812042 0.755739 0.804134 0.0394228 -0.593139 + -1.53629 0.689567 0.915871 0.436515 -0.5196 -0.734486 + -1.59718 0.672544 0.915154 0.449715 -0.429837 -0.782941 + -1.65253 0.75546 0.827341 0.824798 -0.0082988 -0.565367 + -1.69959 0.744897 0.780836 0.756707 -0.0979742 -0.646371 + -1.76663 0.838045 0.6861 0.810457 -0.0213166 -0.58541 + -1.54647 0.631827 0.956881 0.40973 -0.619083 -0.669969 + -1.55587 0.595988 0.985752 0.578711 -0.615123 -0.53546 + -1.59539 0.606046 0.942334 0.438197 -0.540751 -0.718033 + -1.65074 0.688961 0.854519 0.773858 -0.154545 -0.614215 + -1.57421 0.54596 1.0314 0.73269 -0.637314 -0.238741 + -1.61372 0.556018 0.987985 0.602529 -0.590915 -0.53645 + -1.6368 0.619564 0.87692 0.787817 -0.316406 -0.528424 + -1.68565 0.675413 0.803186 0.387969 -0.471947 -0.791673 + -1.7543 0.770899 0.711198 0.769803 -0.295818 -0.565593 + -1.51022 0.651849 1.0122 0.607161 -0.79105 -0.074804 + -1.57817 0.545448 1.05609 0.901714 -0.375559 0.214166 + -1.60585 0.49996 1.10848 0.834642 -0.550431 0.0199433 + -1.62122 0.504521 1.03438 0.342927 -0.836223 -0.42794 + -1.5718 0.593954 1.08447 0.724252 -0.6792 -0.118936 + -1.59948 0.548467 1.13686 0.723504 -0.659554 -0.203789 + -1.62677 0.468698 1.16843 0.780966 -0.620852 -0.0680772 + -1.64214 0.473346 1.09438 0.513707 -0.815679 -0.26603 + -1.6443 0.568153 0.923365 0.467164 -0.655206 -0.593686 + -1.54292 0.558373 1.13831 -0.0577527 -0.810044 -0.583519 + -1.60355 0.505276 1.20727 0.517044 -0.801543 -0.300325 + -1.62257 0.484198 1.25658 0.529428 -0.846497 -0.0561147 + -1.64579 0.44762 1.21774 0.402664 -0.90742 0.120211 + -1.66103 0.442873 1.15136 -0.04617 -0.980104 -0.19304 + -1.54699 0.515182 1.20871 -0.0749877 -0.809016 -0.582983 + -1.52479 0.464575 1.26937 -0.31232 -0.874101 -0.372026 + -1.59744 0.481079 1.30738 -0.0259835 -0.972897 -0.229774 + -1.6726 0.458265 1.2863 0.383771 -0.917937 -0.100556 + -1.68784 0.453432 1.21987 0.295227 -0.952111 0.0795293 + -1.44043 0.486339 1.17467 -0.111137 -0.760384 -0.639894 + -1.41823 0.435732 1.23532 -0.147158 -0.788088 -0.597713 + -1.44873 0.417293 1.32726 -0.541541 -0.783838 -0.303861 + -1.52138 0.433797 1.36528 -0.365322 -0.895546 -0.254041 + -1.32655 0.544633 1.1463 0.351928 -0.596813 -0.721083 + -1.31011 0.482406 1.21249 0.297737 -0.662763 -0.687093 + -1.26219 0.434609 1.27727 0.349234 -0.582392 -0.734068 + -1.27731 0.371808 1.32425 0.240972 -0.661891 -0.709811 + -1.40647 0.371246 1.30042 -0.406111 -0.755673 -0.513841 + -1.15942 0.552757 1.26583 0.500775 -0.466544 -0.729082 + -1.13583 0.493105 1.31715 0.470839 -0.494101 -0.730872 + -1.08792 0.445309 1.38194 0.44709 -0.495578 -0.744656 + -0.987842 0.616329 1.33052 0.433735 -0.464773 -0.771919 + -0.964256 0.556677 1.38184 0.377966 -0.474035 -0.795256 + -0.958075 0.487541 1.42119 0.352676 -0.486815 -0.799144 + -1.06737 0.38742 1.4322 0.417652 -0.529008 -0.738726 + -1.02706 0.655854 1.28306 0.483618 -0.479365 -0.732341 + -0.815221 0.742389 1.35778 0.313595 -0.419724 -0.851757 + -0.79827 0.664136 1.38552 0.264558 -0.375585 -0.888226 + -0.792089 0.594913 1.42482 0.195617 -0.419154 -0.886591 + -0.854442 0.781914 1.31032 0.433389 -0.680396 -0.590962 + -0.695028 0.820486 1.34571 -0.0541374 -0.660398 -0.748961 + -0.708286 0.770455 1.36997 0.016561 -0.390295 -0.920541 + -0.691335 0.692288 1.39776 -0.312427 -0.389432 -0.866448 + -0.812578 0.820227 1.26856 0.348052 -0.885531 -0.307726 + -0.738021 0.83597 1.32369 0.20944 -0.86485 -0.456255 + -0.618769 0.825268 1.31523 -0.701038 -0.67658 -0.225354 + -0.640121 0.757806 1.35788 -0.480281 -0.300874 -0.823896 + -0.653379 0.707775 1.38213 -0.453169 -0.246801 -0.856579 + -0.811583 0.827076 1.2515 0.343971 -0.810517 -0.474075 + -0.661762 0.840666 1.29316 -0.0297325 -0.936742 -0.348755 + -0.660767 0.847515 1.2761 -0.255366 -0.947414 0.192862 + -0.59698 0.776022 1.30872 -0.911292 -0.297893 -0.284263 + -0.862432 0.824007 1.21941 0.406876 -0.822885 -0.396626 + -0.734307 0.862237 1.2566 -0.094028 -0.87659 -0.471962 + -0.864203 0.836358 1.14702 0.425711 -0.872347 -0.240376 + -0.785156 0.85908 1.22446 0.365456 -0.848031 -0.383778 + -0.78827 0.875179 1.17438 -0.0730326 -0.996704 0.0353108 + -0.712689 0.835707 1.21915 -0.655829 -0.635822 0.406962 + -0.687961 0.839972 1.25976 -0.474731 -0.542775 0.692839 + -0.614421 0.825336 1.27931 -0.362325 -0.173236 0.915811 + -0.950125 0.809046 1.11933 0.269323 -0.921694 -0.279185 + -0.867317 0.852369 1.09689 0.477885 -0.790046 -0.383997 + -0.865264 0.89818 1.02414 0.242881 -0.890796 -0.384045 + -1.04637 0.825001 1.03549 0.234761 -0.86554 -0.442411 + -0.932214 0.841889 1.05884 0.331304 -0.843882 -0.42202 + -0.930161 0.8877 0.986093 0.397391 -0.824751 -0.402326 + -0.860678 0.922089 0.953931 0.198095 -0.896026 -0.397361 + -0.826398 0.869631 1.10659 -0.830173 -0.520502 0.199724 + -1.11972 0.886319 0.929887 0.502918 -0.673538 -0.541683 + -0.988034 0.855089 0.986578 0.212904 -0.869801 -0.445105 + -0.960444 0.897098 0.922215 0.218833 -0.770023 -0.599314 + -0.902572 0.92971 0.921729 0.279728 -0.855884 -0.434988 + -1.1441 0.982289 0.714262 0.570624 -0.289262 -0.768581 + -1.13996 1.08149 0.754245 0.881795 -0.00266715 -0.471624 + -1.06139 0.916319 0.880924 0.169801 -0.549543 -0.818028 + -1.05187 0.99702 0.888545 0.28604 -0.290561 -0.913102 + -0.928793 0.949374 0.86747 -0.0679236 -0.763173 -0.642614 + -1.21128 1.35382 0.672742 0.426411 -0.042953 -0.903509 + -1.1853 1.29834 0.696237 0.835049 0.0870797 -0.54324 + -1.13045 1.1621 0.761815 0.894394 0.152379 -0.420523 + -1.20241 1.08491 0.659711 0.928462 0.0122208 -0.371226 + -1.29256 1.60304 0.697494 0.437824 -0.105642 -0.892832 + -2.55227 2.13444 0.203282 -0.144941 0.975208 -0.167216 + -2.46869 2.13569 0.121704 -0.206607 0.964036 -0.167178 + -2.5105 2.12924 0.074687 0.0104376 0.989857 0.141682 + -2.4744 2.21408 0.359739 -0.617388 0.685529 -0.385852 + -2.50208 2.14992 0.196466 -0.336006 0.889614 -0.309334 + -2.39707 2.18859 0.187288 -0.578816 0.703306 -0.412714 + -2.34077 2.15746 0.061211 -0.648427 0.76038 -0.0369516 + -2.38258 2.151 0.014202 -0.200623 0.963665 0.176352 + -2.55404 2.22825 0.546984 -0.691729 0.636677 -0.340814 + -2.54716 2.2602 0.573062 -0.858596 0.267177 -0.437526 + -2.51401 2.31498 0.503967 -0.910698 0.032595 -0.411784 + -2.46937 2.34416 0.416232 -0.868306 0.0381956 -0.494556 + -2.44543 2.27979 0.37632 -0.718041 0.275045 -0.639349 + -2.43045 2.20281 0.26205 -0.612632 0.694204 -0.37784 + -2.68135 2.24606 0.776546 -0.81152 0.410326 -0.416014 + -2.67447 2.278 0.802623 -0.720618 0.411119 -0.558293 + -2.62183 2.30578 0.72291 -0.87712 0.0831844 -0.473013 + -2.58868 2.36048 0.653765 -0.895234 -0.0565549 -0.441993 + -2.69067 2.14011 0.697649 -0.968115 0.0605135 -0.243087 + -2.72265 2.20853 0.85574 -0.939291 0.0748139 -0.334867 + -2.73841 2.35365 0.931195 -0.907184 0.0635316 -0.41591 + -2.68577 2.38143 0.851482 -0.878298 0.0280821 -0.477288 + -2.64802 2.47483 0.752112 -0.90022 -0.0899189 -0.426051 + -2.6886 2.09026 0.768796 -0.968818 -0.0878022 -0.231693 + -2.73772 2.11713 0.89106 -0.940948 0.00987779 -0.338408 + -2.78481 2.16824 1.04533 -0.949733 0.0332333 -0.311293 + -2.76975 2.25965 1.01001 -0.94575 0.0366028 -0.322828 + -2.66813 2.02558 0.693429 -0.997575 0.0600019 -0.0352705 + -2.71138 1.98324 0.833166 -0.941642 0.0235637 -0.33579 + -2.7605 2.01002 0.95538 -0.936041 0.0429695 -0.349257 + -2.72489 1.90573 0.863813 -0.922793 -0.0425729 -0.382938 + -2.81001 1.8243 1.04305 -0.925878 -0.0272132 -0.376842 + -2.86532 1.87272 1.20998 -0.952521 0.000752998 -0.304472 + -2.81581 2.05844 1.12231 -0.944092 0.0713675 -0.321864 + -2.72178 1.82364 0.876602 -0.80842 -0.285164 -0.514916 + -2.8069 1.74221 1.05584 -0.890098 -0.21666 -0.400979 + -2.72186 1.72568 0.947274 -0.734147 -0.372987 -0.567371 + -2.71597 1.64793 0.986144 -0.712937 -0.337375 -0.614735 + -2.80101 1.66446 1.09471 -0.864067 -0.233578 -0.445902 + -2.67776 1.71691 0.900867 -0.615568 -0.460027 -0.639884 + -2.65143 1.66036 0.922402 -0.540757 -0.461793 -0.703086 + -2.66111 1.61844 0.948007 -0.54897 -0.341838 -0.762744 + -2.69851 1.5131 1.03227 -0.708767 -0.344801 -0.615436 + -2.60333 1.64967 0.891728 -0.390486 -0.520427 -0.759392 + -2.5719 1.58847 0.916332 -0.242246 -0.493655 -0.835237 + -2.58158 1.54655 0.941937 -0.266086 -0.418532 -0.868348 + -2.64365 1.48362 0.994138 -0.522657 -0.378444 -0.763943 + -2.51266 1.68707 0.850743 -0.116092 -0.518464 -0.847182 + -2.45401 1.53363 0.915703 -0.112405 -0.304601 -0.945824 + -2.71043 1.46155 1.07875 -0.739514 -0.310717 -0.597138 + -2.81293 1.61291 1.14119 -0.870545 -0.246686 -0.42579 + -2.69582 1.36191 1.10273 -0.749938 -0.445746 -0.488778 + -2.83411 1.59996 1.19782 -0.920479 -0.256511 -0.294823 + -2.92455 1.84272 1.39255 -0.973138 -0.0687242 -0.219724 + -2.90337 1.85575 1.33597 -0.94824 0.0143974 -0.317229 + -2.69088 1.31879 1.16603 -0.83262 -0.488595 -0.260803 + -2.82917 1.55684 1.26112 -0.911736 -0.404557 -0.0712168 + -2.88132 1.67507 1.38653 -0.916345 -0.399691 -0.0236408 + -2.63789 1.20703 1.1818 -0.924112 -0.302307 -0.233726 + -2.73704 1.3818 1.34469 -0.898637 -0.438456 0.0144213 + -2.75066 1.43318 1.4467 -0.893538 -0.394871 0.213698 + -2.8428 1.60821 1.36313 -0.856803 -0.490194 0.159995 + -2.61381 1.14019 1.11437 -0.978571 -0.0727289 -0.192639 + -2.61716 1.10996 1.32433 -0.934912 -0.354656 -0.0126379 + -2.68404 1.27004 1.36046 -0.912307 -0.409137 -0.0174159 + -2.68566 1.28041 1.4271 -0.833467 -0.458792 0.307965 + -2.57772 1.20514 0.996875 -0.904527 0.147861 -0.39996 + -2.60092 1.04733 1.08021 -0.985106 -0.145394 -0.0917945 + -2.59308 1.04304 1.25684 -0.950259 -0.311364 0.00781739 + -2.61877 1.12024 1.39092 -0.928899 -0.346585 0.130485 + -2.56484 1.11228 0.962714 -0.919465 0.105989 -0.378616 + -2.58618 0.98852 1.00507 -0.969967 -0.190865 -0.150778 + -2.58243 1.00189 1.14671 -0.945154 -0.323487 0.0451764 + -2.54816 0.916788 1.24551 -0.924532 -0.377052 0.0554235 + -2.55881 0.957931 1.35565 -0.925182 -0.375946 0.0519808 + -2.50194 1.17043 0.851593 -0.821886 0.309601 -0.478173 + -2.49899 1.08753 0.812577 -0.810373 0.197348 -0.551679 + -2.56188 1.02929 0.923648 -0.93213 0.0344602 -0.36048 + -2.55869 0.93982 0.946217 -0.96478 -0.129222 -0.229133 + -2.56768 0.943084 1.07156 -0.945993 -0.321485 0.0417764 + -2.40168 1.17625 0.744709 -0.619436 0.298552 -0.726062 + -2.41419 1.08425 0.721255 -0.61971 0.265996 -0.738381 + -2.49104 0.990875 0.771388 -0.824036 0.158811 -0.543823 + -2.5344 0.980593 0.864797 -0.924585 0.0233744 -0.380258 + -2.29816 1.04453 0.635261 -0.448085 0.294329 -0.844151 + -2.27494 0.963113 0.591875 -0.410539 0.358633 -0.838355 + -2.40624 0.987598 0.680065 -0.617791 0.253472 -0.744369 + -2.14033 0.913598 0.518236 -0.231781 0.399618 -0.886895 + -2.24601 0.882803 0.540174 -0.375682 0.422097 -0.825044 + -2.37731 0.907288 0.628365 -0.566056 0.310739 -0.763559 + -2.45752 0.899734 0.695248 -0.762946 0.183049 -0.620005 + -2.48473 0.934199 0.747354 -0.875126 0.0847596 -0.476414 + -1.96912 0.765755 0.420306 0.136233 0.291685 -0.946763 + -2.11165 0.833479 0.477208 -0.146208 0.497451 -0.855082 + -2.20315 0.817744 0.481859 -0.324 0.470537 -0.820743 + -2.33615 0.828191 0.564767 -0.558406 0.286279 -0.778606 + -2.41636 0.820637 0.631649 -0.735722 0.114228 -0.667582 + -1.89324 0.815688 0.474423 0.617393 0.322612 -0.717459 + -1.88089 0.74382 0.478903 0.783604 0.124291 -0.608701 + -1.96103 0.67472 0.399785 0.449127 0.333875 -0.828741 + -2.06879 0.768334 0.418843 0.209192 0.663968 -0.717904 + -1.81695 0.764071 0.600627 0.86766 -0.183795 -0.461937 + -1.81262 0.720615 0.663493 0.876135 -0.325717 -0.355382 + -1.87281 0.652784 0.458382 0.832041 0.0362028 -0.553532 + -1.91603 0.534961 0.413056 0.789759 -0.279424 -0.546079 + -1.96117 0.623916 0.370181 0.582356 0.309594 -0.751673 + -1.74998 0.727445 0.774065 0.26545 -0.746467 -0.610183 + -1.80877 0.671025 0.710185 0.86313 -0.426725 -0.270022 + -1.86896 0.60328 0.505124 0.945919 -0.196669 -0.257988 + -1.68642 0.623923 0.855168 -0.0045126 -0.708756 -0.705439 + -1.75074 0.675868 0.825996 0.214467 -0.785796 -0.580112 + -1.8218 0.634855 0.772834 0.833828 -0.514777 -0.199338 + -1.85867 0.560345 0.575091 0.957778 -0.223931 -0.180319 + -1.90574 0.492112 0.483073 0.829766 -0.421959 -0.365293 + -1.69254 0.569577 0.911698 -0.158111 -0.733039 -0.661554 + -1.76377 0.639697 0.888646 0.105377 -0.842898 -0.527655 + -1.82642 0.59689 0.838591 0.7945 -0.584643 -0.1642 + -1.86328 0.522381 0.640847 0.966507 -0.214487 -0.140924 + -1.65042 0.513721 0.979845 0.525468 -0.716742 -0.458436 + -1.70803 0.526187 0.970451 -0.238842 -0.749552 -0.617355 + -1.77926 0.596395 0.94745 0.0728766 -0.840701 -0.536573 + -1.85124 0.55914 0.898178 0.809196 -0.579714 -0.0955744 + -1.66931 0.483248 1.03682 0.266847 -0.854562 -0.445551 + -1.72604 0.479952 1.02813 -0.222569 -0.779222 -0.585898 + -1.80409 0.558557 1.00699 0.0564278 -0.87805 -0.475231 + -1.86902 0.523285 0.957278 0.84407 -0.530537 -0.0779501 + -1.85602 0.483439 0.700495 0.962704 -0.259133 -0.0777881 + -1.68732 0.437013 1.09451 0.485507 -0.842984 -0.231648 + -1.74607 0.451085 1.08933 -0.400766 -0.840026 -0.36571 + -1.82411 0.52969 1.06819 0.0629603 -0.912948 -0.40319 + -1.88128 0.493809 1.02393 0.757383 -0.64941 -0.0680977 + -1.87381 0.447584 0.759596 0.806986 -0.589472 0.036005 + -1.70775 0.443486 1.2775 0.372705 -0.927857 -0.0131178 + -1.70723 0.427067 1.15213 0.206735 -0.977373 -0.0447376 + -1.77727 0.448527 1.15856 -0.429328 -0.85716 -0.284526 + -1.83637 0.500213 1.13484 0.00218417 -0.947644 -0.319322 + -1.64747 0.455233 1.33715 0.287165 -0.957778 0.0140231 + -1.7011 0.453737 1.34454 0.320589 -0.944677 0.0693361 + -1.64082 0.465398 1.40414 -0.00173264 -0.981346 -0.192241 + -1.70716 0.451032 1.41863 0.746003 -0.553233 -0.370692 + -1.73843 0.424595 1.22141 0.0774129 -0.99613 -0.0416256 + -1.48839 0.408059 1.43006 -0.449636 -0.874282 -0.182915 + -1.60783 0.439747 1.46897 -0.101088 -0.935032 -0.339847 + -1.67675 0.424968 1.47897 0.194083 -0.932887 -0.303405 + -1.74448 0.42189 1.2955 0.226335 -0.973954 -0.0136437 + -1.7944 0.430866 1.22575 -0.355016 -0.914442 -0.194316 + -1.417 0.365191 1.40291 -0.655971 -0.738087 -0.157892 + -1.46206 0.367494 1.51932 -0.475959 -0.842572 -0.252063 + -1.57742 0.413598 1.52926 -0.208755 -0.932572 -0.294502 + -1.67259 0.411655 1.55043 0.289223 -0.867086 -0.4056 + -1.76926 0.424379 1.37059 0.07764 -0.991337 -0.105937 + -1.37475 0.319144 1.37606 -0.432593 -0.810749 -0.394397 + -1.39068 0.324625 1.49217 -0.770867 -0.619188 -0.149566 + -1.38133 0.290225 1.57975 -0.80906 -0.568873 -0.147665 + -1.43898 0.324733 1.62698 -0.483201 -0.844856 -0.229641 + -1.46494 0.348315 1.57954 -0.318927 -0.898098 -0.302829 + -1.2514 0.260562 1.46153 0.119277 -0.827592 -0.548511 + -1.36742 0.271559 1.45088 -0.587021 -0.731977 -0.345856 + -1.35807 0.237154 1.53847 -0.627426 -0.748182 -0.215778 + -1.38355 0.264554 1.67781 -0.780556 -0.606511 -0.151251 + -1.44119 0.299154 1.72508 -0.4835 -0.852908 -0.196913 + -1.26555 0.307234 1.38929 0.20303 -0.746738 -0.633372 + -1.03236 0.181381 1.67547 0.111045 -0.884332 -0.453459 + -1.01916 0.153671 1.75087 0.0721301 -0.93162 -0.356205 + -1.24407 0.212977 1.53635 0.0391076 -0.894326 -0.445704 + -1.23482 0.182879 1.61828 -0.0921612 -0.951509 -0.293492 + -1.04651 0.228051 1.60324 0.241731 -0.787234 -0.5673 + -0.878998 0.208596 1.69633 0.14939 -0.785803 -0.600164 + -0.858484 0.160513 1.75982 0.0567368 -0.871973 -0.486255 + -0.845283 0.132889 1.83526 -0.0105737 -0.911851 -0.410385 + -1.00992 0.123663 1.83285 0.0085355 -0.954924 -0.296728 + -1.06378 0.27098 1.53688 0.263569 -0.738922 -0.620101 + -0.896263 0.251439 1.62993 0.203733 -0.725197 -0.65771 + -0.771005 0.252727 1.6505 -0.00640396 -0.731077 -0.682265 + -0.750491 0.20473 1.71403 -0.0403855 -0.772602 -0.633605 + -0.72341 0.149105 1.77358 -0.0860938 -0.840909 -0.534285 + -1.24913 0.397413 1.31329 0.361401 -0.602578 -0.71154 + -1.0356 0.296588 1.52593 0.350375 -0.646162 -0.678021 + -0.912573 0.310585 1.57489 0.271502 -0.633978 -0.724126 + -0.793357 0.317255 1.59913 0.0353987 -0.640977 -0.766743 + -1.05431 0.350224 1.46823 0.383147 -0.593471 -0.707806 + -0.93128 0.364226 1.51718 0.310855 -0.586365 -0.748028 + -0.809666 0.376401 1.54409 0.0933004 -0.592463 -0.800177 + -0.703249 0.385732 1.53053 -0.17649 -0.557519 -0.811186 + -0.673794 0.323089 1.57323 -0.223171 -0.642032 -0.733478 + -0.937526 0.429652 1.47146 0.339301 -0.527993 -0.778523 + -0.810899 0.450873 1.5015 0.117863 -0.513104 -0.850196 + -0.704481 0.460204 1.48794 -0.227218 -0.464816 -0.855756 + -0.574079 0.336989 1.51655 -0.356712 -0.633116 -0.686965 + -0.544624 0.274352 1.55925 -0.322191 -0.722232 -0.612024 + -0.817145 0.516216 1.45572 0.204672 -0.489189 -0.847823 + -0.719093 0.531891 1.45677 -0.106355 -0.390648 -0.914376 + -0.62273 0.398818 1.48366 -0.502321 -0.597337 -0.62519 + -0.513597 0.336729 1.48201 -0.539356 -0.746407 -0.389835 + -0.464946 0.27499 1.51494 -0.272045 -0.728313 -0.628929 + -0.694037 0.610589 1.42586 -0.185737 -0.324988 -0.9273 + -0.637341 0.470503 1.4525 -0.425363 -0.39714 -0.813232 + -0.556858 0.379338 1.4482 -0.387109 -0.551252 -0.739099 + -0.411498 0.244197 1.49247 -0.500021 -0.860111 0.100936 + -0.344818 0.220911 1.52321 -0.278767 -0.909458 -0.308503 + -0.66784 0.546321 1.43458 -0.824893 -0.380433 -0.418118 + -0.587357 0.455156 1.43028 -0.713086 -0.493871 -0.497594 + -0.454759 0.286808 1.45867 -0.542028 -0.820163 -0.183132 + -0.378843 0.25661 1.45817 -0.0156217 -0.773723 -0.633332 + -0.316716 0.227436 1.4939 0.0254412 -0.781327 -0.623603 + -0.665138 0.627934 1.40642 -0.480783 -0.237754 -0.843991 + -0.620104 0.518944 1.3988 -0.643216 -0.356192 -0.67779 + -0.506451 0.320803 1.41179 -0.673958 -0.726159 -0.135919 + -0.430534 0.290693 1.41134 -0.0206024 -0.743793 -0.668092 + -0.608345 0.598784 1.37451 -0.895837 -0.231059 -0.37959 + -0.539198 0.384677 1.38036 -0.758753 -0.614424 -0.216279 + -0.475534 0.339011 1.37125 -0.0499525 -0.602305 -0.796701 + -0.359348 0.340435 1.42019 0.321289 -0.322209 -0.89048 + -0.311006 0.293472 1.45073 0.260868 -0.434924 -0.861852 + -0.617936 0.632074 1.35425 -0.959442 -0.174028 -0.221776 + -0.585745 0.435954 1.33994 -0.852909 -0.519024 -0.0562139 + -0.522081 0.390288 1.33083 -0.172224 -0.660943 -0.730406 + -0.404348 0.388668 1.38004 0.378828 -0.364832 -0.850521 + -0.618333 0.70856 1.35137 -0.695973 -0.0389876 -0.717009 + -0.607887 0.547783 1.32225 -0.921173 -0.209015 -0.328258 + -0.595336 0.469246 1.31968 -0.853359 -0.256599 -0.453802 + -0.553227 0.446257 1.2989 -0.225587 -0.371602 -0.900568 + -0.438301 0.447908 1.33823 0.348344 -0.377143 -0.858149 + -0.608283 0.624181 1.31932 -0.972663 0.0112533 -0.231947 + -0.604949 0.61793 1.29995 -0.942718 -0.0709479 -0.325958 + -0.579984 0.587683 1.26814 -0.649754 -0.342972 -0.678372 + -0.565778 0.524706 1.30142 -0.373989 -0.315839 -0.871997 + -0.469447 0.503789 1.30625 0.214758 -0.460341 -0.861374 + -0.593646 0.769686 1.2893 -0.926238 -0.201482 0.318573 + -0.604988 0.683732 1.27398 -0.973907 -0.224224 0.0350467 + -0.580023 0.653486 1.24217 -0.753327 -0.396395 -0.524757 + -0.52019 0.609442 1.22065 -0.28038 -0.542816 -0.791667 + -0.505983 0.546464 1.25393 -0.0549415 -0.64068 -0.76584 + -0.614421 0.825336 1.27931 -0.019841 -0.183826 -0.982758 + -0.625762 0.739297 1.26394 -0.675628 -0.202438 0.708904 + -0.65049 0.735117 1.22337 -0.742742 -0.665145 0.0769174 + -0.583397 0.700325 1.18764 -0.578078 -0.706451 -0.408353 + -0.524591 0.665486 1.16738 -0.266571 -0.722343 -0.638092 + -0.750817 0.830245 1.15141 -0.594226 -0.793715 0.130048 + -0.656362 0.772864 1.1512 -0.50883 -0.812218 -0.285295 + -0.589269 0.73807 1.11546 -0.475727 -0.802918 -0.359176 + -0.527966 0.712325 1.11285 -0.231629 -0.835416 -0.498426 + -0.761403 0.847206 1.07903 -0.478168 -0.862449 -0.165942 + -0.666948 0.789911 1.07887 -0.427857 -0.882308 -0.196139 + -0.58677 0.76533 1.04744 -0.384727 -0.868118 -0.313617 + -0.528096 0.742561 1.04268 -0.172658 -0.91587 -0.362452 + -0.865264 0.89818 1.02414 -0.863132 0.183568 0.470432 + -2.40148 2.26853 0.27863 -0.855898 0.261633 -0.446079 + -2.35498 2.26205 0.193641 -0.818023 0.283417 -0.500513 + -2.38615 2.4128 0.262939 -0.879792 -0.0017056 -0.475355 + -2.33965 2.40641 0.178006 -0.814221 -0.000115831 -0.580555 + -2.41009 2.47716 0.302859 -0.871212 -0.0786176 -0.48457 + -2.40968 2.60772 0.270929 -0.856088 -0.135507 -0.498749 + -2.33398 2.58486 0.15232 -0.826289 -0.139883 -0.545599 + -2.31542 2.48829 0.153996 -0.689462 -0.100011 -0.717384 + -2.24517 2.41248 0.067503 -0.806713 -0.0430281 -0.589375 + -2.49718 2.52572 0.438165 -0.866028 -0.0962787 -0.490637 + -2.49677 2.65627 0.406242 -0.870145 -0.128671 -0.4757 + -2.43035 2.76938 0.249128 -0.859047 -0.138095 -0.492918 + -2.35465 2.74652 0.130519 -0.833927 -0.147293 -0.531856 + -2.54182 2.49645 0.525851 -0.888186 -0.0924913 -0.450078 + -2.58091 2.74515 0.544287 -0.888185 -0.120127 -0.443505 + -2.49429 2.81905 0.355288 -0.87711 -0.114313 -0.466488 + -2.47963 2.97629 0.295346 -0.872185 -0.0770665 -0.483067 + -2.41569 2.92662 0.189185 -0.854615 -0.0783679 -0.513314 + -2.60116 2.6108 0.624196 -0.89595 -0.110302 -0.43024 + -2.68695 2.89679 0.71864 -0.900823 -0.106143 -0.421013 + -2.66019 3.0171 0.63406 -0.896377 -0.086915 -0.434689 + -2.57843 2.90803 0.493386 -0.885997 -0.104187 -0.451834 + -2.54816 3.04584 0.411292 -0.880319 -0.0648228 -0.469933 + -2.7072 2.76244 0.798549 -0.908201 -0.119095 -0.401231 + -2.76845 3.07492 0.860518 -0.915771 -0.081857 -0.393273 + -2.74168 3.19523 0.775939 -0.910102 -0.0631682 -0.409541 + -2.70095 3.29493 0.677653 -0.893609 -0.0381599 -0.447222 + -2.62992 3.15491 0.551967 -0.885189 -0.04706 -0.462846 + -2.72096 2.63579 0.876315 -0.912156 -0.104979 -0.396169 + -2.81207 2.84551 1.03226 -0.921891 -0.106169 -0.372619 + -2.79831 2.97216 0.954499 -0.924879 -0.10066 -0.366696 + -2.84357 3.31723 0.997227 -0.933814 -0.0304933 -0.356456 + -2.80086 3.39498 0.886163 -0.924031 -0.0232215 -0.381612 + -2.75872 2.54239 0.975684 -0.913895 -0.0672549 -0.400341 + -2.837 2.73734 1.12262 -0.919997 -0.0929037 -0.380755 + -2.90994 3.12542 1.19425 -0.93675 -0.0493234 -0.346507 + -2.87343 3.21447 1.09121 -0.935326 -0.0433438 -0.351122 + -2.89598 3.56679 1.14817 -0.953682 0.0275757 -0.299551 + -2.78123 2.41982 1.05658 -0.931449 -0.0280248 -0.362791 + -2.85952 2.61477 1.20352 -0.925594 -0.0867182 -0.36845 + -2.93487 3.01725 1.2846 -0.941858 -0.0638603 -0.329887 + -2.96473 3.39293 1.3569 -0.962692 0.0326232 -0.268627 + -2.92822 3.48207 1.25391 -0.957043 0.0321749 -0.288154 + -2.81256 2.32573 1.13535 -0.939687 -0.0201803 -0.34144 + -2.88121 2.50385 1.29123 -0.934029 -0.0814847 -0.347778 + -2.96272 2.92172 1.38686 -0.947394 -0.0625004 -0.313907 + -3.02043 3.20382 1.55945 -0.976259 0.0130221 -0.216214 + -2.99258 3.29926 1.45715 -0.969218 0.0229619 -0.245131 + -2.84567 2.22835 1.24362 -0.941299 -0.00359974 -0.337555 + -2.91431 2.40647 1.3995 -0.948569 -0.0835005 -0.305359 + -2.98441 2.8109 1.47462 -0.955763 -0.0713432 -0.285355 + -2.87667 2.11855 1.3206 -0.952512 0.0394207 -0.30194 + -2.93623 2.33865 1.51157 -0.961664 -0.0740546 -0.264042 + -2.99463 2.69059 1.5504 -0.962682 -0.0881337 -0.255882 + -3.05017 2.98744 1.73523 -0.989332 -0.0291787 -0.142728 + -3.03994 3.10766 1.65941 -0.98569 -0.00413942 -0.16852 + -2.91676 2.11445 1.45989 -0.959711 0.0316562 -0.279202 + -2.97632 2.33456 1.65087 -0.978085 -0.0789315 -0.192666 + -3.01655 2.62285 1.66252 -0.980868 -0.105634 -0.163521 + -2.95481 2.09748 1.58589 -0.972261 0.0237855 -0.232688 + -2.99255 2.32319 1.78795 -0.986442 -0.0465786 -0.15736 + -3.01529 2.55297 1.78236 -0.990024 -0.106132 -0.0926679 + -3.0561 2.83204 1.959 -0.996434 -0.0761684 -0.0362971 + -3.05736 2.90192 1.83917 -0.99577 -0.0602179 -0.0693919 + -2.98303 2.14159 1.73209 -0.989139 -0.039658 -0.141534 + -3.02077 2.3673 1.93415 -0.994754 -0.0769954 -0.0673586 + -3.03153 2.54161 1.91944 -0.994429 -0.079158 -0.0696074 + -2.93726 1.8551 1.51631 -0.982642 -0.154902 -0.10208 + -2.99574 2.15389 1.85579 -0.989668 -0.143212 0.00682483 + -3.01987 2.36333 2.07983 -0.987959 -0.142507 0.0602385 + -3.02892 2.52052 2.06117 -0.996994 -0.0773228 0.00494252 + -2.96054 1.88031 1.66985 -0.978932 -0.204185 -0.000654397 + -2.97736 2.1481 2.00502 -0.959616 -0.245991 0.136477 + -3.00149 2.35754 2.22905 -0.970838 -0.212374 0.111225 + -3.02802 2.51664 2.20689 -0.992721 -0.112198 0.0437818 + -3.05121 2.75296 2.22377 -0.994911 -0.0964525 0.0291278 + -2.9046 1.70027 1.54007 -0.866205 -0.499639 0.00702912 + -2.92564 1.84141 1.81123 -0.890258 -0.401248 0.215501 + -2.94247 2.1092 2.14639 -0.939378 -0.310889 0.14463 + -2.97441 2.31554 2.36321 -0.958614 -0.251129 0.134142 + -3.01751 2.4999 2.34988 -0.982392 -0.159453 0.097373 + -2.78394 1.59132 1.59758 -0.787785 -0.605424 0.113386 + -2.75872 1.58567 1.72018 -0.831279 -0.534721 0.151817 + -2.87938 1.69462 1.66267 -0.793194 -0.584787 0.169904 + -2.82662 1.79901 2.02526 -0.876113 -0.44198 0.192559 + -2.74542 1.52447 1.57417 -0.864803 -0.467161 0.184059 + -2.70084 1.45524 1.60888 -0.870726 -0.459715 0.174635 + -2.68044 1.42697 1.65945 -0.904854 -0.420712 0.0651221 + -2.67129 1.41559 1.73735 -0.91534 -0.397516 0.0642925 + -2.67396 1.43037 1.80435 -0.919041 -0.39083 0.0511448 + -2.69898 1.49683 1.84245 -0.910748 -0.407124 0.0692 + -2.70609 1.36395 1.48141 -0.791284 -0.472552 0.388026 + -2.66486 1.33239 1.50287 -0.812307 -0.468514 0.347351 + -2.64446 1.30412 1.55343 -0.939658 -0.326793 0.101235 + -2.62412 1.24978 1.68276 -0.954804 -0.291127 0.05995 + -2.61496 1.2384 1.76067 -0.948755 -0.301912 0.0933429 + -2.64442 1.24894 1.44861 -0.814684 -0.398577 0.421219 + -2.6239 1.22028 1.49886 -0.951316 -0.279558 0.129792 + -2.60356 1.16593 1.62819 -0.958683 -0.274484 0.0747332 + -2.57155 1.11526 1.79054 -0.947149 -0.301288 0.110158 + -2.60791 1.25902 1.86534 -0.939972 -0.329724 0.0879468 + -2.59824 1.09167 1.44121 -0.950671 -0.246932 0.187746 + -2.56943 1.00822 1.47854 -0.935792 -0.340606 0.0909984 + -2.57475 1.08248 1.66552 -0.949045 -0.301088 0.0930595 + -2.52548 0.975537 1.80256 -0.912902 -0.377776 0.15458 + -2.5645 1.13589 1.89522 -0.938668 -0.307645 0.155745 + -2.52091 0.910412 1.57756 -0.911048 -0.401822 0.092363 + -2.52867 0.942755 1.67753 -0.917669 -0.388548 0.0831501 + -2.45901 0.838753 1.79127 -0.815526 -0.553404 0.169296 + -2.45238 0.870138 1.88291 -0.831487 -0.506998 0.227117 + -2.51609 1.00412 1.90324 -0.902943 -0.38792 0.184963 + -2.51029 0.860121 1.45466 -0.898337 -0.434165 0.0670126 + -2.45187 0.773464 1.59656 -0.867058 -0.486056 0.109362 + -2.45124 0.806408 1.69129 -0.872684 -0.466425 0.144465 + -2.35716 0.768187 1.95149 -0.82638 -0.469243 0.3113 + -2.35053 0.799572 2.04313 -0.757813 -0.613114 0.223182 + -2.49949 0.828385 1.35403 -0.890069 -0.450992 0.0661992 + -2.44107 0.741642 1.49587 -0.857665 -0.509839 0.0668962 + -2.37738 0.689151 1.77499 -0.824916 -0.540635 0.165009 + -2.37676 0.722098 1.86973 -0.877664 -0.387375 0.282216 + -2.53911 0.88031 1.14569 -0.92035 -0.384449 0.071797 + -2.49044 0.791906 1.25421 -0.888431 -0.451782 0.0811384 + -2.42665 0.707026 1.40663 -0.863806 -0.497431 0.0800094 + -2.37651 0.663807 1.68489 -0.822636 -0.554232 0.126872 + -2.53166 0.838905 1.05261 -0.91301 -0.40319 0.0620577 + -2.48424 0.761973 1.15306 -0.875184 -0.477214 0.0795046 + -2.42046 0.677093 1.30547 -0.829327 -0.55385 0.0739398 + -2.36209 0.629193 1.59564 -0.780686 -0.619751 0.0802384 + -2.56023 0.901679 0.978482 -0.973021 -0.223459 -0.0574181 + -2.54015 0.858694 0.912934 -0.935028 -0.312015 -0.168429 + -2.51634 0.799821 0.971907 -0.894208 -0.446819 -0.0272932 + -2.46893 0.722889 1.07235 -0.856475 -0.511347 0.0705366 + -2.39861 0.638763 1.21626 -0.814999 -0.574484 0.0757926 + -2.53861 0.896836 0.880669 -0.960877 -0.111013 -0.253756 + -2.51454 0.823445 0.866386 -0.919587 -0.373631 -0.12149 + -2.49074 0.764572 0.925359 -0.887821 -0.454023 -0.0750764 + -2.45263 0.684515 0.975821 -0.851662 -0.523362 0.0276422 + -2.38231 0.600476 1.11978 -0.78982 -0.609055 0.0723661 + -2.52809 0.923916 0.840764 -0.942134 0.0156036 -0.334874 + -2.52028 0.852697 0.830319 -0.955498 -0.204132 -0.212964 + -2.49906 0.810617 0.786604 -0.941473 -0.221403 -0.254182 + -2.49332 0.781365 0.822671 -0.927539 -0.364063 -0.0844333 + -2.48104 0.747248 0.863964 -0.914465 -0.403719 -0.0276527 + -2.50975 0.879778 0.790414 -0.921391 -0.0226009 -0.387978 + -2.48254 0.845314 0.738309 -0.899068 -0.0321586 -0.436625 + -2.47901 0.76723 0.747753 -0.921246 -0.263998 -0.285677 + -2.47308 0.737895 0.783763 -0.903785 -0.408652 -0.127182 + -2.4608 0.703778 0.825056 -0.890975 -0.450108 -0.0597247 + -2.4625 0.80184 0.699408 -0.879635 -0.0610529 -0.471714 + -2.45367 0.732083 0.713031 -0.869966 -0.371918 -0.323783 + -2.44773 0.702748 0.74904 -0.819459 -0.524584 -0.230865 + -2.43712 0.665621 0.797747 -0.850379 -0.495211 -0.177827 + -2.44294 0.667191 0.914427 -0.870124 -0.492801 -0.00557889 + -2.40083 0.774758 0.610516 -0.726129 -0.024312 -0.687128 + -2.44697 0.756048 0.678323 -0.864056 -0.192797 -0.465013 + -2.42472 0.700478 0.684772 -0.78797 -0.521589 -0.327182 + -2.41327 0.679273 0.7131 -0.734305 -0.631986 -0.247767 + -2.40265 0.642147 0.761806 -0.808713 -0.441402 -0.388778 + -2.36064 0.744002 0.573184 -0.72022 -0.10465 -0.685807 + -2.41802 0.724444 0.650064 -0.791102 -0.314027 -0.524923 + -2.39664 0.676451 0.657788 -0.753974 -0.552474 -0.35538 + -2.38518 0.655246 0.686115 -0.781181 -0.571712 -0.2508 + -2.29095 0.754305 0.50994 -0.591253 0.155886 -0.791277 + -2.29897 0.667007 0.517945 -0.74976 -0.244727 -0.614791 + -2.3376 0.653831 0.596767 -0.74753 -0.434721 -0.502211 + -2.37782 0.693687 0.612733 -0.711692 -0.378537 -0.591781 + -2.35641 0.636681 0.641871 -0.759225 -0.502721 -0.413339 + -2.15795 0.743773 0.426982 -0.358854 0.368239 -0.857685 + -2.13163 0.660542 0.387545 -0.441128 0.14915 -0.884964 + -2.22928 0.677311 0.4547 -0.605838 0.0213153 -0.795302 + -2.19049 0.596965 0.432463 -0.654034 -0.283244 -0.701436 + -2.25055 0.615227 0.490032 -0.718078 -0.437556 -0.541211 + -2.06893 0.717615 0.389289 -0.0168169 0.44988 -0.89293 + -2.04261 0.634297 0.349801 -0.0356685 0.264495 -0.963727 + -2.03077 0.576074 0.342247 -0.0478531 -0.0217802 -0.998617 + -2.09283 0.580194 0.365307 -0.450414 -0.079126 -0.889307 + -1.94933 0.565779 0.362676 0.617395 -0.0383686 -0.785717 + -2.0216 0.483798 0.359073 0.03749 -0.57505 -0.817259 + -2.08366 0.48792 0.382134 -0.501791 -0.444887 -0.74181 + -2.13465 0.524988 0.431131 -0.724638 -0.520652 -0.451466 + -2.19471 0.54325 0.4887 -0.681666 -0.526662 -0.507896 + -1.9883 0.45298 0.409452 0.417605 -0.705126 -0.573065 + -2.06513 0.433022 0.407219 -0.264069 -0.739561 -0.619126 + -2.11612 0.470089 0.456215 -0.721532 -0.570265 -0.39267 + -1.89848 0.453085 0.542671 0.793456 -0.534458 -0.291174 + -1.91972 0.415229 0.60264 0.571507 -0.803509 -0.166594 + -2.00954 0.415124 0.469421 0.202572 -0.93421 -0.293626 + -2.08196 0.418872 0.489529 -0.407875 -0.873911 -0.26442 + -1.95867 0.386642 0.672753 0.371757 -0.922483 -0.104025 + -2.02637 0.400974 0.55173 0.016649 -0.980646 -0.195081 + -2.05472 0.382269 0.629927 -0.0656474 -0.97698 -0.202979 + -2.11198 0.414983 0.555663 -0.52412 -0.81267 -0.254686 + -2.14614 0.466201 0.522352 -0.628522 -0.668658 -0.397311 + -1.91275 0.418999 0.82971 0.693866 -0.719589 0.0272241 + -1.98702 0.367937 0.750949 0.331112 -0.939201 -0.0909184 + -2.02519 0.351912 0.827106 0.188981 -0.979275 -0.0728461 + -2.07224 0.36711 0.717184 -0.12392 -0.976833 -0.174473 + -2.12951 0.399824 0.64292 -0.396362 -0.887535 -0.234903 + -1.90422 0.465659 1.09489 0.82056 -0.557494 -0.126022 + -1.9357 0.390763 0.900615 0.652078 -0.757994 0.0154749 + -1.97387 0.374737 0.976771 0.532508 -0.844279 -0.0602339 + -2.04494 0.342123 0.90966 0.25723 -0.959014 -0.118847 + -2.092 0.357321 0.799737 -0.324932 -0.943242 -0.0686484 + -1.8535 0.482553 1.20203 0.205393 -0.902307 -0.379019 + -1.90727 0.422201 1.15736 0.796622 -0.575877 -0.183737 + -1.92036 0.393833 1.2301 0.775941 -0.59943 -0.196465 + -1.98696 0.346454 1.04956 0.585345 -0.799063 -0.137366 + -2.05528 0.326128 0.991967 -0.126362 -0.987207 -0.0972343 + -1.81918 0.433355 1.30084 -0.0277061 -0.977844 -0.207493 + -1.85654 0.439093 1.2645 0.513435 -0.79257 -0.328965 + -1.87002 0.41583 1.3378 0.528912 -0.806925 -0.262914 + -1.92652 0.351051 1.2894 0.706499 -0.678503 -0.20123 + -1.9973 0.330459 1.13187 0.387721 -0.911763 -0.135499 + -1.83267 0.410092 1.37414 0.0622999 -0.986552 -0.151107 + -1.84235 0.406737 1.45075 0.396169 -0.916194 -0.0603194 + -1.87618 0.373049 1.39709 0.738808 -0.658861 -0.141651 + -1.93117 0.334753 1.36423 0.335112 -0.942016 0.0174829 + -1.76511 0.411152 1.4421 0.132338 -0.981785 -0.13633 + -1.7748 0.407712 1.51866 -0.0291195 -0.993767 -0.107607 + -1.85045 0.398633 1.52138 0.425075 -0.904203 -0.0415591 + -1.88427 0.364945 1.46773 0.483536 -0.871073 0.0861698 + -1.65583 0.378339 1.60973 -0.0143902 -0.950904 -0.30915 + -1.65108 0.366233 1.6813 -0.134821 -0.972098 -0.191959 + -1.77005 0.395607 1.59022 -0.0856149 -0.99261 -0.0860006 + -1.85122 0.398926 1.59928 0.155597 -0.985889 0.0617382 + -1.58031 0.394507 1.58953 -0.163262 -0.903683 -0.395856 + -1.56355 0.361189 1.64884 -0.21887 -0.914201 -0.341076 + -1.53758 0.337601 1.69629 -0.246375 -0.942465 -0.225963 + -1.64358 0.352119 1.74875 -0.24884 -0.961295 -0.11828 + -1.77082 0.395987 1.66817 -0.194979 -0.98054 -0.0229125 + -1.53008 0.323491 1.76373 -0.269889 -0.945882 -0.180189 + -1.53293 0.308826 1.84893 -0.293583 -0.952625 -0.0794605 + -1.64093 0.345863 1.82318 -0.306584 -0.950613 -0.048381 + -1.76818 0.389645 1.74255 -0.183639 -0.979459 -0.0832907 + -1.85945 0.40399 1.6747 0.194425 -0.980656 -0.0226389 + -1.44405 0.284483 1.8103 -0.501312 -0.847054 -0.176596 + -1.53307 0.306576 1.92143 -0.37376 -0.920959 -0.110176 + -1.64107 0.343527 1.89563 -0.283628 -0.956871 -0.0628742 + -1.771 0.382386 1.81952 -0.197358 -0.977344 -0.0764759 + -1.86227 0.396732 1.75168 -0.060034 -0.998192 0.00308328 + -1.38511 0.244046 1.77334 -0.795532 -0.578955 -0.178715 + -1.45856 0.269326 1.90935 -0.542716 -0.823284 -0.166318 + -1.46891 0.259892 1.99509 -0.49757 -0.851334 -0.166296 + -1.54342 0.297141 2.00717 -0.394842 -0.906355 -0.150401 + -1.64148 0.337272 1.96966 -0.270629 -0.954985 -0.121503 + -1.35462 0.194096 1.72325 -0.634296 -0.754835 -0.16701 + -1.39962 0.228884 1.8724 -0.709918 -0.687838 -0.151312 + -1.39166 0.208942 1.93914 -0.703805 -0.706451 -0.0747323 + -1.40439 0.215415 2.01313 -0.633085 -0.761753 -0.137605 + -1.35305 0.21461 1.62772 -0.622323 -0.765293 -0.164442 + -1.2298 0.160337 1.70752 -0.152031 -0.962783 -0.223464 + -1.22831 0.141582 1.79381 -0.177832 -0.965211 -0.191688 + -1.34899 0.176277 1.81411 -0.554387 -0.819961 -0.142548 + -1.34103 0.156335 1.88086 -0.523057 -0.840986 -0.1384 + -1.01064 0.104507 1.91102 -0.0511396 -0.973439 -0.223163 + -1.00914 0.085758 1.9973 -0.0735815 -0.977959 -0.195401 + -1.0238 0.072506 2.07605 -0.103697 -0.982693 -0.153494 + -1.22268 0.123849 1.88472 -0.17623 -0.96992 -0.167921 + -0.828999 0.095944 1.90606 -0.083087 -0.935663 -0.342975 + -0.829722 0.076875 1.98428 -0.116355 -0.965344 -0.233608 + -0.833452 0.058511 2.06169 -0.0812208 -0.97989 -0.182262 + -0.848105 0.045259 2.14045 -0.0470974 -0.992081 -0.116435 + -1.02656 0.061384 2.16131 -0.143608 -0.985868 -0.0862618 + -0.707126 0.112246 1.84442 -0.10426 -0.876729 -0.469548 + -0.685094 0.06822 1.91427 -0.102666 -0.928156 -0.357752 + -0.688824 0.049855 1.99168 -0.0446493 -0.992636 -0.112609 + -0.70527 0.051219 2.07712 0.0129491 -0.999305 -0.0349546 + -0.594742 0.15241 1.74105 -0.0968202 -0.826016 -0.555269 + -0.573582 0.116783 1.81176 -0.0538481 -0.892294 -0.448233 + -0.55155 0.072756 1.88162 0.0649407 -0.921598 -0.382675 + -0.549722 0.058582 1.96297 0.0975851 -0.991879 -0.0815633 + -0.621823 0.208035 1.68151 -0.180549 -0.784136 -0.593745 + -0.450434 0.140476 1.73692 -0.0949033 -0.904495 -0.41579 + -0.429275 0.104849 1.80763 -0.0286014 -0.96104 -0.274927 + -0.42024 0.092654 1.88995 0.0786705 -0.97761 -0.195165 + -0.418412 0.078475 1.97131 0.123636 -0.988986 -0.0813699 + -0.651443 0.258561 1.6246 -0.18797 -0.717513 -0.670703 + -0.475349 0.171371 1.66461 -0.195166 -0.877559 -0.437951 + -0.325697 0.165847 1.65678 -0.00118046 -0.927848 -0.372958 + -0.300782 0.134952 1.72909 0.0606308 -0.935267 -0.348712 + -0.289261 0.11663 1.80043 0.0949077 -0.971575 -0.216876 + -0.504969 0.221988 1.60774 -0.245306 -0.762138 -0.599142 + -0.372127 0.188644 1.6019 -0.0691583 -0.825454 -0.560216 + -0.172667 0.169411 1.65301 0.0849025 -0.946659 -0.310851 + -0.140145 0.15994 1.71921 0.135867 -0.958466 -0.250766 + -0.128624 0.141613 1.79056 0.163049 -0.953283 -0.254294 + -0.411782 0.241094 1.55345 -0.280466 -0.850581 -0.444803 + -0.219097 0.192294 1.59817 0.0299338 -0.97964 -0.198516 + -0.077383 0.188657 1.64287 0.293998 -0.882087 -0.368085 + -0.044861 0.179094 1.70903 0.399989 -0.873307 -0.278107 + -0.291654 0.187008 1.56173 -0.247922 -0.960947 0.122945 + -0.185978 0.19434 1.55923 0.213793 -0.883714 -0.416344 + -0.113421 0.19954 1.59562 0.26995 -0.830748 -0.48681 + -0.023065 0.212553 1.65228 0.253661 -0.949396 -0.18521 + -0.250036 0.204145 1.52465 0.117748 -0.750248 -0.650587 + -0.108752 0.245665 1.55153 0.421344 -0.548282 -0.722396 + -0.059102 0.223437 1.60503 0.443465 -0.633577 -0.63397 + 0.023071 0.212553 1.65228 -0.232932 -0.931158 -0.280512 + -0.023065 0.214616 1.66891 0.49486 -0.868783 -0.0181345 + -0.17281 0.255556 1.517 0.31142 -0.477568 -0.821552 + -0.094316 0.306883 1.5237 0.490621 -0.118273 -0.863309 + -0.066104 0.284205 1.55838 0.622683 -0.326266 -0.711208 + -0.016455 0.26198 1.61187 0.347317 -0.362888 -0.864687 + -0.24888 0.264298 1.48646 0.270889 -0.499393 -0.822937 + -0.170386 0.315624 1.49316 0.336756 -0.410803 -0.847252 + -0.044666 0.359282 1.56194 0.40639 -0.713754 -0.57044 + -0.016455 0.33661 1.59661 0.298498 -0.480461 -0.824655 + -0.224871 0.336079 1.46153 0.290301 -0.375165 -0.880328 + -0.044666 0.372658 1.50717 0.175735 -0.837016 -0.518191 + 0.044666 0.372658 1.50717 -0.244256 -0.774419 -0.583622 + 0.044666 0.359282 1.56194 -0.486855 -0.713556 -0.503796 + 0.016455 0.33661 1.59661 -0.298489 -0.480461 -0.824658 + -0.273213 0.382957 1.43094 0.31134 -0.226667 -0.92287 + -0.099152 0.393027 1.47549 0.170834 -0.570332 -0.803454 + 0.044471 0.592403 1.28836 -0.0305786 -0.70551 -0.70804 + -0.338859 0.425044 1.39604 0.398628 -0.302546 -0.865772 + -0.214573 0.417707 1.45135 0.176207 -0.273014 -0.945735 + -0.171573 0.58754 1.30419 0.0149532 -0.710869 -0.703165 + -0.056152 0.56286 1.32833 -0.04853 -0.678418 -0.733072 + -0.372812 0.484198 1.35418 0.452908 -0.369414 -0.811423 + -0.28022 0.459794 1.41645 0.243815 -0.448458 -0.859907 + -0.222009 0.62574 1.26182 0.00246949 -0.699496 -0.714633 + -0.056152 0.989814 0.876228 -0.0716674 -0.711215 -0.699312 + 0.044471 1.01944 0.836308 -0.251443 -0.770222 -0.586118 + -0.405591 0.540158 1.30665 0.424081 -0.468904 -0.77478 + -0.330656 0.497994 1.37408 0.300375 -0.501479 -0.811353 + -0.280438 0.691045 1.20391 -0.191637 -0.620482 -0.760446 + -0.114581 1.05512 0.818315 0.0988504 -0.841224 -0.531573 + -0.442128 0.582833 1.25434 0.42768 -0.547012 -0.71963 + -0.363435 0.553954 1.32656 0.257175 -0.53453 -0.805071 + -0.28423 0.755168 1.16405 0.0341988 -0.690832 -0.722206 + -0.367227 0.618077 1.2867 0.124615 -0.557305 -0.820903 + -0.380763 0.667435 1.2396 0.311923 -0.630579 -0.710686 + -0.293968 0.803753 1.11209 0.0529057 -0.772095 -0.633301 + -0.455664 0.632193 1.20725 0.328751 -0.596318 -0.732344 + -0.460065 0.688236 1.15398 0.354125 -0.721347 -0.595193 + -0.468769 0.724255 1.09359 0.28326 -0.843411 -0.456533 + -0.3905 0.71602 1.18765 0.350846 -0.698669 -0.623513 + -0.399204 0.752039 1.12726 0.432839 -0.791565 -0.431365 + -0.30355 0.842645 1.03113 0.46646 -0.822832 -0.324598 + -0.468899 0.754491 1.02342 0.212639 -0.948744 -0.233814 + -0.462394 0.767838 0.951901 0.0608051 -0.973128 -0.222091 + -0.419837 0.762911 1.05283 0.40376 -0.89112 -0.207083 + -0.324183 0.853516 0.956702 0.213502 -0.976913 0.00758949 + -0.305268 0.847475 0.879167 0.729367 -0.676845 0.0995277 + -0.124163 1.09392 0.737303 0.388621 -0.907413 -0.159923 + -0.525597 0.769822 0.974665 -0.243091 -0.908593 -0.339655 + -0.436888 0.782429 0.890828 -0.118575 -0.980616 -0.155989 + -0.413333 0.776258 0.981316 0.431472 -0.900803 -0.0488351 + -0.58699 0.789665 0.976497 -0.337743 -0.894964 -0.291494 + -0.500091 0.784326 0.913543 -0.186117 -0.94779 -0.258949 + -0.405465 0.790071 0.823591 -0.165292 -0.977783 -0.128911 + -0.394417 0.770217 0.903782 0.213678 -0.975171 0.0581723 + -0.667167 0.814158 1.00787 -0.381927 -0.881872 -0.276467 + -0.566088 0.802553 0.906574 -0.288792 -0.926904 -0.239682 + -0.479189 0.797301 0.843669 -0.191591 -0.965331 -0.177281 + -0.357763 0.788004 0.755173 0.0895674 -0.964573 -0.248148 + -0.362994 0.777859 0.836545 0.310881 -0.950424 0.00686539 + -0.754306 0.855908 0.997757 -0.475686 -0.857574 -0.195679 + -0.74951 0.875033 0.919634 -0.471692 -0.831234 -0.294206 + -0.662371 0.833281 0.929749 -0.378801 -0.892376 -0.245307 + -0.554784 0.816955 0.832629 -0.302037 -0.918025 -0.256912 + -0.431487 0.795234 0.775251 -0.188452 -0.962806 -0.193622 + -0.821812 0.89354 1.03638 -0.296111 -0.916493 -0.268996 + -0.814715 0.902242 0.955106 -0.670643 -0.703059 -0.236528 + -0.800184 0.935 0.882766 -0.58176 -0.723686 -0.37126 + -0.75087 0.903341 0.841204 -0.535807 -0.785773 -0.308985 + -0.651067 0.847683 0.855804 -0.395862 -0.870878 -0.291316 + -0.838622 0.960135 0.881234 -0.166581 -0.88348 -0.437852 + -0.824091 0.992893 0.808894 0.0105744 -0.763329 -0.645923 + -0.796283 1.05165 0.751717 -0.464893 -0.547181 -0.696037 + -0.801544 0.963308 0.804335 -0.893126 -0.344565 -0.289137 + -0.738356 0.929695 0.768755 -0.514745 -0.696352 -0.500132 + -0.880516 0.967757 0.849032 0.0764414 -0.84054 -0.53633 + -0.864227 1.02491 0.785246 -0.0796097 -0.684865 -0.724308 + -0.836419 1.08358 0.728018 -0.177641 -0.52834 -0.830241 + -0.775011 1.09626 0.700851 0.219363 -0.404125 -0.888011 + -0.780272 1.008 0.75352 -0.739608 -0.361515 -0.567703 + -0.912504 1.00652 0.803684 -0.229923 -0.662436 -0.712961 + -0.925344 1.0704 0.75084 -0.381783 -0.518897 -0.764844 + -0.908048 1.13717 0.722007 -0.292062 -0.270252 -0.917422 + -0.819123 1.15034 0.699185 -0.115459 -0.125561 -0.985344 + -0.735288 1.17414 0.702162 -0.574918 -0.0112688 -0.818134 + -1.02022 1.0493 0.8338 -0.420134 -0.335859 -0.843022 + -1.0018 1.08846 0.824958 -0.490644 -0.316394 -0.811889 + -1.01464 1.15234 0.772115 -0.69356 -0.413412 -0.589971 + -1.00783 1.21606 0.740161 -0.498853 -0.246026 -0.831034 + -0.899154 1.20921 0.706027 -0.175162 -0.039471 -0.983748 + -1.15449 1.25662 0.841506 0.565143 0.0883656 -0.820247 + -1.13607 1.2957 0.832614 -0.18194 -0.360993 -0.914649 + -1.10714 1.32608 0.795797 -0.534369 -0.406833 -0.740903 + -1.10033 1.38979 0.763843 -0.296152 -0.327334 -0.897299 + -1.20934 1.39286 0.775928 0.847249 0.0204626 -0.530802 + -1.237 1.53076 0.60848 0.714429 -0.153688 -0.68262 + -1.24213 1.58922 0.591819 0.565643 -0.179735 -0.804825 + -1.21447 1.45124 0.759218 0.991328 0.0526531 -0.1204 + -1.33145 1.63145 0.543685 -0.543737 -0.839083 -0.0170354 + -1.33145 1.63145 0.543685 0.378768 -0.222766 -0.898282 + -1.21447 1.45124 0.759218 -0.379993 -0.544417 -0.747807 + -1.09286 1.46508 0.743649 0.0027724 -0.227357 -0.973807 + -0.998936 1.2881 0.724181 -0.320784 -0.129488 -0.938259 + -1.18281 1.61753 0.660593 0.275143 -0.564068 -0.77854 + -1.06473 1.5217 0.727976 -0.27238 -0.469576 -0.839826 + -0.970805 1.34472 0.708509 -0.0359701 -0.0326016 -0.998821 + -0.894772 1.27125 0.713167 -0.0207977 0.145216 -0.989181 + -0.7794 1.22822 0.700495 -0.199746 0.0276441 -0.979458 + -1.1712 1.6447 0.623927 -0.24367 -0.832528 -0.497517 + -1.00422 1.52625 0.67009 -0.00280247 -0.480093 -0.877213 + -0.932428 1.43269 0.737749 0.381381 -0.0696506 -0.92179 + -0.856396 1.35913 0.742356 0.168024 0.308933 -0.936124 + -0.775018 1.29018 0.707586 -0.0104874 0.387028 -0.922008 + -1.27714 1.73384 0.366533 -0.374423 -0.912398 -0.165342 + -0.799592 1.37863 0.763184 0.241643 0.326155 -0.91391 + -1.3723 1.80029 0.286041 -0.627611 -0.711864 0.315205 + -1.39582 1.80824 0.253663 -0.46484 -0.795354 -0.389019 + -1.45718 1.86782 0.25627 -0.503789 -0.747313 -0.433266 + -1.41241 1.88004 0.223108 -0.297405 -0.475482 -0.827929 + -1.35106 1.82046 0.2205 -0.0313051 -0.583739 -0.811338 + -1.56568 1.92661 0.343843 -0.551292 -0.823554 -0.133553 + -1.54235 1.92454 0.276228 -0.472824 -0.880222 -0.040572 + -1.52271 1.90991 0.211972 -0.234054 -0.95291 -0.192823 + -1.42618 1.90793 0.206006 -0.0561791 -0.788695 -0.612213 + -1.66635 1.9747 0.290952 -0.535822 -0.817738 0.210239 + -1.64671 1.96007 0.226696 -0.464553 -0.880411 0.095215 + -1.61945 1.92603 0.158052 -0.33048 -0.940355 -0.0807135 + -1.50248 1.93303 0.158131 0.00728966 -0.929354 -0.369119 + -1.40595 1.93105 0.152166 0.15712 -0.870197 -0.466981 + -1.77158 2.02597 0.179548 -0.621402 -0.783101 -0.0247466 + -1.73583 2.03045 0.142996 -0.460332 -0.859672 -0.221492 + -1.80703 2.10814 -0.067965 0.195607 -0.7968 -0.571706 + -2.12832 2.55027 -0.13397 -0.689854 -0.160919 -0.705838 + -2.17394 2.66979 -0.105973 -0.750962 -0.0705465 -0.656566 + -2.25662 2.70147 -0.002845 -0.79765 -0.14991 -0.584194 + -2.18378 2.5777 -0.062271 -0.804477 -0.150715 -0.574545 + -2.26645 2.60929 0.040805 -0.813158 -0.171333 -0.556254 + -2.2479 2.5128 0.042531 -0.820598 -0.153481 -0.550511 + -2.37571 3.04191 0.113286 -0.832983 -0.0400175 -0.55185 + -2.38088 3.25584 0.119155 -0.810771 0.0473385 -0.583446 + -2.25132 3.25444 -0.035226 -0.721731 0.0259835 -0.691686 + -2.43932 3.14098 0.203898 -0.84968 -0.0239841 -0.526753 + -2.44382 3.3279 0.219741 -0.842178 0.0874708 -0.532058 + -2.28491 3.35096 0.002008 -0.765119 0.0445854 -0.642344 + -2.17411 3.43345 -0.107079 -0.704157 0.035426 -0.70916 + -2.14052 3.33694 -0.144314 -0.664055 0.0142197 -0.747548 + -2.50785 3.21052 0.319844 -0.873912 0.00319087 -0.486073 + -2.51801 3.37872 0.359921 -0.851918 0.0551105 -0.520766 + -2.44711 3.46454 0.261678 -0.830247 0.0761797 -0.552166 + -2.34785 3.42302 0.102595 -0.819047 0.111565 -0.562775 + -2.26119 3.51529 -0.00802 -0.771448 0.0498969 -0.634333 + -2.58204 3.26134 0.460024 -0.873316 -0.00277948 -0.487147 + -2.59962 3.50006 0.490758 -0.846954 0.00289049 -0.531659 + -2.52873 3.58587 0.392516 -0.832929 -0.00277913 -0.553372 + -2.47465 3.68253 0.300103 -0.840098 -0.0532368 -0.539816 + -2.36046 3.55681 0.151055 -0.830931 0.00181216 -0.556373 + -2.65306 3.40136 0.58571 -0.871641 -0.0167948 -0.489857 + -2.66362 3.68599 0.593915 -0.867821 -0.00513404 -0.49685 + -2.61641 3.79249 0.510856 -0.857105 -0.0178233 -0.514833 + -2.56234 3.88914 0.418443 -0.853785 -0.0404341 -0.519052 + -2.71706 3.58728 0.688875 -0.893354 -0.0102524 -0.449236 + -2.73856 3.90859 0.73135 -0.907438 2.0857e-005 -0.420185 + -2.69136 4.01509 0.648292 -0.887157 -0.00997291 -0.461361 + -2.64914 4.11155 0.555025 -0.884528 -0.0275563 -0.465673 + -2.51631 3.99197 0.330737 -0.859935 -0.0475704 -0.508182 + -2.76012 3.49468 0.787875 -0.91455 -0.016034 -0.404154 + -2.81888 3.72601 0.929804 -0.940141 0.00992018 -0.340642 + -2.77582 3.81861 0.830804 -0.928393 0.00401201 -0.371577 + -2.80241 4.17046 0.902182 -0.94793 0.00487846 -0.318442 + -2.77019 4.2544 0.796595 -0.932733 0.00112957 -0.360565 + -2.85327 3.64454 1.03711 -0.947445 0.0200021 -0.319293 + -2.86699 4.00351 1.11354 -0.965229 0.0167854 -0.260867 + -2.83967 4.08039 1.00158 -0.956757 0.00987816 -0.29072 + -2.83456 4.40331 1.01987 -0.964107 0.0603643 -0.258562 + -2.90137 3.92205 1.22085 -0.96863 0.0299047 -0.246702 + -2.89466 4.25686 1.24234 -0.975151 0.0444389 -0.217036 + -2.86733 4.33374 1.13038 -0.972457 0.0521519 -0.227171 + -2.92656 3.84275 1.33099 -0.972578 0.0410079 -0.228934 + -2.9469 4.10375 1.46152 -0.978346 0.0458449 -0.201833 + -2.92172 4.18305 1.35138 -0.978451 0.0445725 -0.201611 + -2.89572 4.50276 1.32343 -0.974935 0.149329 -0.164933 + -2.8645 4.56131 1.20821 -0.969388 0.161899 -0.184596 + -2.95881 3.75803 1.43673 -0.973203 0.0538567 -0.22355 + -2.97224 4.01901 1.5641 -0.979032 0.0505875 -0.197327 + -2.94816 4.34934 1.53556 -0.981947 0.124941 -0.14202 + -2.92278 4.42895 1.43246 -0.980037 0.133249 -0.147557 + -2.85402 4.73817 1.43067 -0.949257 0.295463 -0.10776 + -2.98331 3.6646 1.53557 -0.977377 0.0574731 -0.203548 + -2.99674 3.92558 1.66294 -0.97907 0.0488919 -0.197565 + -2.9735 4.26459 1.63814 -0.981855 0.125075 -0.142537 + -2.90846 4.59979 1.64576 -0.967813 0.247346 -0.046447 + -2.88307 4.67932 1.54261 -0.961713 0.263951 -0.0737469 + -3.01117 3.57084 1.63576 -0.979552 0.0589202 -0.192371 + -3.0208 3.83789 1.76322 -0.981289 0.0477542 -0.186525 + -2.99948 4.17727 1.73478 -0.982301 0.120258 -0.143604 + -2.95514 4.4525 1.85547 -0.970935 0.235756 -0.0412756 + -2.92916 4.53973 1.75878 -0.96645 0.254427 -0.0352258 + -3.03359 3.47522 1.73278 -0.985593 0.0485326 -0.162024 + -3.04323 3.74227 1.86023 -0.985333 0.0410416 -0.165636 + -3.02354 4.08968 1.8351 -0.98447 0.117686 -0.130267 + -3.0531 3.37906 1.83273 -0.990131 0.0334703 -0.136087 + -3.06252 3.66391 1.96755 -0.990077 0.0307512 -0.137123 + -3.04636 4.01302 1.94028 -0.98691 0.115826 -0.112223 + -2.99596 4.31437 2.09793 -0.971905 0.23494 -0.0142546 + -2.97314 4.39094 1.99271 -0.970877 0.237901 -0.0283056 + -3.06928 3.30294 1.94597 -0.995183 0.00961897 -0.097564 + -3.0787 3.58771 2.08074 -0.995121 0.0150453 -0.0975064 + -3.06565 3.93467 2.04759 -0.990221 0.104895 -0.0919771 + -3.07647 3.21742 2.04991 -0.997908 -0.0162816 -0.0625671 + -3.08895 3.52185 2.21422 -0.998323 -0.000920435 -0.0578908 + -3.0818 3.87102 2.16324 -0.993673 0.0951125 -0.0597268 + -3.0344 4.15634 2.33024 -0.974326 0.223808 0.0244825 + -3.01826 4.2199 2.21454 -0.973043 0.230585 -0.00422352 + -3.08109 3.14025 2.16597 -0.99861 -0.0419668 -0.0319002 + -3.09356 3.44468 2.33028 -0.999739 -0.0187587 -0.0130365 + -3.09204 3.80515 2.29671 -0.996723 0.0797864 -0.0133175 + -3.05381 2.77414 2.08209 -0.996405 -0.084485 -0.00629648 + -3.0788 3.08234 2.28906 -0.997644 -0.0664127 0.0172218 + -3.08929 3.3725 2.4613 -0.998404 -0.0420702 0.037683 + -3.09588 3.72791 2.47051 -0.997261 0.0645251 0.0361433 + -3.06812 3.01108 2.40629 -0.994893 -0.0861612 0.0525723 + -3.07861 3.30131 2.57859 -0.994863 -0.05994 0.0815805 + -3.09161 3.65564 2.60148 -0.995924 0.0343002 0.0834155 + -3.04793 4.00287 2.62426 -0.976937 0.187824 0.101568 + -3.04409 4.0802 2.45051 -0.977306 0.203266 0.059628 + -3.03966 2.71913 2.35896 -0.992734 -0.104479 0.0596978 + -3.05657 2.97725 2.54149 -0.990005 -0.0999076 0.0995394 + -3.0629 3.26618 2.70544 -0.989233 -0.0753762 0.125446 + -3.07773 3.62876 2.73185 -0.99218 0.0308193 0.120949 + -3.02916 2.70248 2.502 -0.985016 -0.130322 0.112954 + -3.03511 2.96217 2.67901 -0.981701 -0.116037 0.150994 + -3.04144 3.2511 2.84297 -0.98389 -0.0914496 0.153614 + -3.06202 3.59362 2.8587 -0.990392 0.018643 0.137027 + -3.02245 3.93634 2.89569 -0.971203 0.17576 0.160849 + -2.99042 2.45789 2.48404 -0.965662 -0.205132 0.159428 + -3.00339 2.67289 2.63705 -0.970397 -0.162974 0.178237 + -3.00934 2.93258 2.81406 -0.97263 -0.138556 0.186526 + -3.01648 3.21906 2.97146 -0.974828 -0.114358 0.191399 + -3.04423 3.55852 2.9869 -0.986437 0.00130627 0.164133 + -2.93387 2.23435 2.47923 -0.94443 -0.28361 0.166182 + -2.9537 2.39974 2.60716 -0.950611 -0.233367 0.204643 + -2.96667 2.61474 2.76017 -0.954502 -0.196147 0.224615 + -2.97642 2.9104 2.94847 -0.956968 -0.16692 0.237381 + -2.98356 3.19688 3.10587 -0.963389 -0.139286 0.229087 + -2.90194 2.0281 2.26247 -0.92667 -0.353867 0.126728 + -2.83818 1.92807 2.39192 -0.922833 -0.360306 0.136231 + -2.88684 2.14071 2.57242 -0.931236 -0.309609 0.192202 + -2.90666 2.30602 2.7003 -0.934106 -0.263819 0.240509 + -2.92343 2.55214 2.87299 -0.93494 -0.22638 0.273201 + -2.76286 1.69898 2.15471 -0.925325 -0.372706 0.0697392 + -2.70903 1.55131 2.28208 -0.92923 -0.35873 0.0885699 + -2.78184 1.79753 2.44243 -0.922195 -0.356699 0.149407 + -2.83049 2.01008 2.62288 -0.920057 -0.332534 0.207163 + -2.72062 1.56338 1.99899 -0.923537 -0.378857 0.0595535 + -2.66678 1.41571 2.12635 -0.930263 -0.361337 0.0636041 + -2.59055 1.28583 2.30111 -0.882091 -0.442249 0.162268 + -2.63475 1.40743 2.3743 -0.892844 -0.411875 0.182176 + -2.70756 1.65364 2.53465 -0.904637 -0.381123 0.190729 + -2.78036 1.65222 1.87671 -0.844322 -0.508604 0.168649 + -2.65077 1.36379 2.06668 -0.930127 -0.363955 0.0489987 + -2.57454 1.23391 2.24143 -0.869265 -0.472003 0.146941 + -2.62574 1.29734 2.02858 -0.905831 -0.423349 0.015689 + -2.57253 1.20236 2.14269 -0.874843 -0.477347 0.0824048 + -2.49688 1.14894 2.35241 -0.797846 -0.577688 0.172392 + -2.47789 1.15753 2.47854 -0.801425 -0.551778 0.230782 + -2.52209 1.27912 2.55174 -0.844095 -0.454112 0.285106 + -2.61058 1.2738 1.93234 -0.91332 -0.407003 0.013949 + -2.55736 1.17874 2.0464 -0.89168 -0.449123 0.0565332 + -2.49804 1.0787 2.15467 -0.845913 -0.49919 0.187725 + -2.49487 1.11739 2.25366 -0.811537 -0.547891 0.203034 + -2.3746 1.0412 2.47782 -0.737199 -0.640993 0.213693 + -2.54855 1.13661 1.98176 -0.923823 -0.352456 0.149419 + -2.48922 1.03649 2.08999 -0.867064 -0.450973 0.211715 + -2.3982 0.9821 2.26839 -0.763188 -0.589093 0.265543 + -2.39503 1.02079 2.36737 -0.778268 -0.575211 0.251857 + -2.50013 1.00485 1.98979 -0.886277 -0.414869 0.205907 + -2.42456 0.923891 2.07661 -0.818905 -0.496968 0.287082 + -2.41365 0.955533 2.1768 -0.774064 -0.567695 0.280263 + -2.26307 0.891843 2.39772 -0.675971 -0.708013 0.204404 + -2.24738 0.891026 2.48613 -0.692788 -0.696211 0.187975 + -2.44299 0.898732 1.98359 -0.831434 -0.499844 0.242637 + -2.31965 0.836749 2.22674 -0.825006 -0.373394 0.424195 + -2.27852 0.865364 2.30618 -0.762481 -0.50065 0.409844 + -2.17378 0.795248 2.41202 -0.706789 -0.56219 0.429408 + -2.14557 0.806572 2.49401 -0.640421 -0.739745 0.206492 + -2.33809 0.811585 2.13373 -0.774895 -0.582227 0.246066 + -2.24336 0.743201 2.25177 -0.697289 -0.652148 0.297474 + -2.21492 0.766726 2.33263 -0.734153 -0.481645 0.478578 + -2.08783 0.74786 2.47611 -0.730279 -0.512078 0.452181 + -2.05961 0.759091 2.55805 -0.647539 -0.745887 0.156029 + -2.2558 0.73119 2.16118 -0.735008 -0.629485 0.252016 + -2.15809 0.695136 2.32363 -0.73305 -0.570873 0.369785 + -2.12965 0.71866 2.40448 -0.748755 -0.436536 0.498801 + -2.04338 0.641992 2.48507 -0.808803 -0.352878 0.470442 + -2.00156 0.671104 2.55665 -0.828498 -0.321208 0.458713 + -2.26814 0.703118 2.0762 -0.789196 -0.499355 0.357509 + -2.17751 0.671424 2.24169 -0.752863 -0.576913 0.316809 + -2.09016 0.602344 2.32814 -0.763927 -0.578689 0.285542 + -2.07074 0.626055 2.41008 -0.79726 -0.480614 0.365221 + -2.28774 0.657029 1.99443 -0.73705 -0.571119 0.361359 + -2.18985 0.643355 2.15671 -0.711715 -0.641943 0.285256 + -2.10681 0.59144 2.24863 -0.729728 -0.642076 0.235023 + -1.99277 0.524004 2.43263 -0.735676 -0.640561 0.220141 + -1.97127 0.522689 2.50491 -0.780389 -0.54591 0.304918 + -2.29048 0.621709 1.9102 -0.667492 -0.702247 0.247594 + -2.18733 0.613612 2.07243 -0.620495 -0.73439 0.27506 + -2.1043 0.561692 2.16436 -0.701603 -0.679374 0.214952 + -2.00942 0.513183 2.35318 -0.71777 -0.668456 0.194866 + -2.28961 0.596452 1.82015 -0.687799 -0.695352 0.208371 + -2.19008 0.578291 1.98821 -0.628913 -0.714082 0.307498 + -2.11079 0.542994 2.08414 -0.708206 -0.657741 0.256555 + -2.03023 0.518534 2.27931 -0.65453 -0.739604 0.156767 + -2.28026 0.562414 1.73771 -0.679328 -0.714799 0.166061 + -2.18691 0.539241 1.90664 -0.6342 -0.724581 0.269764 + -2.10762 0.50394 2.00259 -0.640231 -0.724305 0.255904 + -2.03672 0.499833 2.1991 -0.65951 -0.726239 0.193967 + -2.24905 0.521653 1.65891 -0.684254 -0.716505 0.135709 + -2.17756 0.505198 1.82421 -0.630668 -0.737194 0.242493 + -2.10575 0.4792 1.92564 -0.631569 -0.735123 0.246405 + -2.05096 0.495578 2.12347 -0.484012 -0.859925 0.162056 + -2.33088 0.588432 1.51684 -0.744028 -0.663789 0.0762042 + -2.22442 0.481562 1.57934 -0.694638 -0.708134 0.126589 + -2.17066 0.469328 1.74214 -0.635417 -0.740743 0.218051 + -2.09886 0.44333 1.84357 -0.486876 -0.838458 0.244825 + -2.0491 0.470745 2.04648 -0.495894 -0.846812 0.19235 + -2.30903 0.550103 1.42763 -0.750388 -0.655746 0.0831516 + -2.18976 0.4357 1.50058 -0.672905 -0.732342 0.104283 + -2.14603 0.429243 1.66256 -0.598331 -0.778142 0.191037 + -2.08491 0.41771 1.76634 -0.472304 -0.848543 0.238546 + -2.04536 0.459435 1.97107 -0.214931 -0.962309 0.16663 + -2.27437 0.504326 1.34892 -0.723764 -0.685416 0.0798187 + -2.16101 0.400339 1.41963 -0.643431 -0.761764 0.0755844 + -2.12044 0.391848 1.58513 -0.560477 -0.810525 0.170045 + -2.05932 0.380315 1.68891 -0.289083 -0.92232 0.256431 + -2.03142 0.433901 1.89389 -0.251125 -0.944618 0.211263 + -2.3602 0.564961 1.02569 -0.78062 -0.621002 0.0706385 + -2.25227 0.468723 1.25478 -0.697441 -0.713735 0.0644751 + -2.13629 0.374728 1.33399 -0.611773 -0.79012 0.037991 + -2.09168 0.356484 1.50419 -0.52082 -0.840147 0.151325 + -2.03896 0.35597 1.61188 -0.262853 -0.931513 0.251379 + -2.41926 0.62912 0.887167 -0.834734 -0.550042 0.0259435 + -2.33831 0.524184 0.926321 -0.72016 -0.693218 0.0286187 + -2.22755 0.443112 1.16914 -0.636467 -0.77051 0.0349839 + -2.11923 0.35999 1.24832 -0.541833 -0.839667 -0.0370968 + -2.06554 0.327366 1.42382 -0.458538 -0.882794 0.102062 + -2.39736 0.588431 0.787844 -0.834602 -0.523427 -0.171649 + -2.30226 0.493857 0.894251 -0.593066 -0.804758 -0.0252384 + -2.19151 0.412783 1.13707 -0.558935 -0.828683 -0.0295925 + -2.10625 0.362893 1.15849 -0.572301 -0.81804 -0.0572907 + -2.04848 0.312717 1.33819 -0.402113 -0.914284 0.0488823 + -2.36268 0.60947 0.695201 -0.835358 -0.403851 -0.372937 + -2.35739 0.555668 0.72119 -0.776904 -0.546223 -0.313146 + -2.3056 0.499838 0.79589 -0.61471 -0.786615 -0.0580366 + -2.17853 0.415688 1.04724 -0.503147 -0.861923 -0.0627045 + -2.33391 0.590818 0.650907 -0.78666 -0.467235 -0.403555 + -2.28997 0.514976 0.652872 -0.713512 -0.619832 -0.326663 + -2.23818 0.459146 0.727572 -0.593176 -0.802481 -0.0645463 + -2.18187 0.421669 0.948884 -0.550253 -0.834858 -0.0153152 + -2.2873 0.572308 0.595769 -0.741835 -0.45959 -0.48832 + -2.24336 0.496377 0.597683 -0.680646 -0.579164 -0.448654 + -2.19667 0.44916 0.60447 -0.539142 -0.767248 -0.347357 + -2.20274 0.435055 0.681698 -0.580149 -0.805973 -0.117619 + -0.713836 1.20864 0.668001 -0.550473 0.327647 -0.767872 + -0.76307 1.05071 0.687555 -0.865885 -0.130153 -0.483015 + -0.721154 0.972399 0.702789 -0.591722 -0.587199 -0.552325 + -0.718215 1.30967 0.728414 0.224483 0.627249 -0.745766 + -0.687688 1.26297 0.695711 0.126179 0.626822 -0.768878 + -0.703623 1.13731 0.60416 -0.764048 0.101558 -0.637116 + -0.741618 1.08512 0.653345 -0.824341 -0.0358251 -0.564958 + -0.667994 1.35128 0.798747 -0.0132149 0.405154 -0.914153 + -0.637467 1.30458 0.766045 -0.553887 0.636284 -0.536984 + -0.677474 1.19172 0.63192 -0.755109 0.497765 -0.426661 + -0.793653 1.40654 0.767637 0.0632094 -0.107809 -0.99216 + -0.662055 1.37911 0.803149 -0.456809 -0.424754 -0.781607 + -0.631551 1.33229 0.770247 -0.955349 -0.0691095 -0.287285 + -0.671558 1.21943 0.636123 -0.987962 0.15401 -0.01459 + -0.664457 1.19884 0.575777 -0.801503 0.195911 -0.564988 + -0.831875 1.44489 0.765211 0.345372 0.232124 -0.909305 + -0.694071 1.41874 0.7437 -0.588084 -0.77514 -0.230902 + -0.663568 1.37192 0.710797 -0.897815 -0.419413 0.134243 + -0.656467 1.35125 0.650401 -0.909617 0.1083 -0.401084 + -0.814632 1.53065 0.792667 -0.0193719 -0.0446855 -0.998813 + -0.732294 1.45709 0.741273 -0.556268 -0.16247 -0.814966 + -0.797789 1.57132 0.771423 -0.486179 -0.653187 -0.580497 + -0.715451 1.49768 0.71998 -0.61024 -0.151298 -0.777635 + -0.649712 1.43033 0.669226 -0.703279 0.12038 -0.700647 + -0.60316 1.24951 0.528621 -0.626123 0.163761 -0.762333 + -0.939812 1.7023 0.659365 0.0514114 -0.616467 -0.7857 + -0.097276 1.11213 0.652366 0.640076 -0.765317 -0.0677761 + -0.05827 1.15812 0.604717 0.522918 -0.597341 -0.608063 + -0.069667 1.21195 0.547068 0.540397 -0.65274 -0.530944 + -0.037458 1.25754 0.527104 0.277973 -0.849107 -0.449164 + 0.037461 1.25754 0.527104 -0.287828 -0.866197 -0.408483 + 0.069674 1.21195 0.547068 -0.617967 -0.651894 -0.439489 + 0.106297 0.963787 0.855306 -0.302552 -0.778666 -0.549675 + 0.159893 0.617168 1.26427 -0.00018195 -0.723562 -0.690259 + -0.278381 0.865595 0.794182 0.793877 -0.57517 0.19733 + -0.196947 0.932788 0.689999 0.825396 -0.522807 0.213058 + -0.157942 0.978861 0.642399 0.827801 -0.522574 0.204111 + -0.241614 0.889583 0.738233 0.791228 -0.560691 0.244097 + -0.288895 0.827734 0.717356 0.635839 -0.771518 -0.0216514 + -0.244228 0.870942 0.669121 0.68001 -0.727993 -0.0872503 + -0.219008 0.907592 0.615839 0.652838 -0.737088 -0.174652 + -0.121262 1.0174 0.600437 0.971148 -0.221631 -0.0880376 + -0.120096 1.10255 0.623764 0.401105 -0.241361 -0.883663 + -0.326227 0.801761 0.780547 0.626899 -0.775722 0.0724724 + -0.320431 0.813893 0.691933 0.276914 -0.917187 -0.286508 + -0.309675 0.843907 0.623746 0.234508 -0.872709 -0.428234 + -0.284455 0.880559 0.570464 0.325062 -0.838464 -0.437394 + -0.405103 0.809844 0.705145 -0.138438 -0.935576 -0.324859 + -0.394347 0.839772 0.636909 -0.157283 -0.878174 -0.451743 + -0.376098 0.87127 0.570549 -0.117394 -0.848915 -0.515327 + -0.268356 0.921192 0.510285 0.314855 -0.672168 -0.670117 + -0.182329 0.946137 0.573879 0.682998 -0.663204 -0.306064 + -0.5284 0.831478 0.762472 -0.344344 -0.878752 -0.330487 + -0.50752 0.852181 0.689413 -0.351198 -0.839542 -0.414523 + -0.489271 0.88368 0.623056 -0.383332 -0.760798 -0.523682 + -0.464 0.918458 0.559421 -0.396583 -0.667741 -0.629955 + -0.359999 0.911817 0.510322 -0.120931 -0.733906 -0.668399 + -0.638553 0.874038 0.783357 -0.419054 -0.821211 -0.387307 + -0.617673 0.894655 0.710248 -0.459057 -0.761781 -0.457118 + -0.593 0.932484 0.647928 -0.475582 -0.645681 -0.597426 + -0.56773 0.967259 0.584292 -0.516091 -0.555809 -0.651711 + -0.44088 0.967001 0.506741 -0.420403 -0.499455 -0.7575 + -0.696481 1.01014 0.64042 -0.563423 -0.467338 -0.681285 + -0.658486 1.06232 0.591236 -0.555324 -0.366803 -0.746371 + -0.623498 1.11123 0.54193 -0.55144 -0.212606 -0.806668 + -0.532742 1.01616 0.534987 -0.477022 -0.399104 -0.783049 + -0.562201 1.16198 0.494825 -0.467206 -0.0966409 -0.878851 + -0.508158 1.07115 0.493348 -0.449762 -0.267959 -0.852005 + -0.416295 1.0219 0.465053 -0.416386 -0.309639 -0.854837 + -0.336879 0.960448 0.457692 -0.0367639 -0.638476 -0.768764 + -0.248564 0.979545 0.481016 0.439468 -0.591959 -0.675613 + -0.568156 1.31347 0.519837 -0.248861 0.375811 -0.892656 + -0.520369 1.21784 0.473467 -0.0513135 0.205582 -0.977294 + -0.466326 1.12701 0.471992 -0.371089 -0.0715025 -0.92584 + -0.390225 1.08754 0.441956 -0.417755 -0.14868 -0.896312 + -0.312808 1.02384 0.415092 -0.0392679 -0.411501 -0.910563 + -0.596406 1.32859 0.547445 -0.713339 0.233785 -0.660675 + -0.489027 1.27485 0.512732 -0.189612 0.389764 -0.901183 + -0.637336 1.51437 0.650661 -0.734374 -0.0989793 -0.671489 + -0.703075 1.58181 0.701465 -0.470371 -0.510864 -0.719561 + -0.830301 1.58874 0.707658 -0.532356 -0.805434 -0.260524 + -0.972324 1.71963 0.59555 -0.71085 -0.698134 0.0854449 + -0.939812 1.7023 0.659365 -0.746828 -0.631325 0.208988 + -0.434308 1.19784 0.443518 -0.520866 0.0958387 -0.848242 + -0.358207 1.15828 0.413431 -0.286541 0.00440085 -0.958058 + -0.286738 1.0894 0.391946 0.0889776 -0.153882 -0.984075 + -0.194616 1.1096 0.436545 0.700968 -0.218571 -0.678875 + -0.224494 1.04294 0.438416 0.561182 -0.37126 -0.739757 + -0.319542 1.22421 0.413041 -0.147284 0.193216 -0.970039 + -0.258145 1.16068 0.410479 0.18777 0.0261342 -0.981865 + -0.166023 1.18089 0.455079 0.656369 -0.481118 -0.581124 + -0.131493 1.15639 0.566116 0.652731 -0.576033 -0.492066 + -0.161371 1.08963 0.567937 0.866261 -0.13673 -0.480518 + -0.21948 1.22669 0.410138 0.0613259 -0.0554027 -0.996579 + -0.133813 1.22648 0.435115 0.465124 -0.553232 -0.691082 + -0.160933 1.28092 0.40182 0.0291503 0.0203809 -0.999367 + -0.075267 1.2807 0.426797 0.352949 -0.536901 -0.766267 + -0.142705 1.32643 0.422794 -0.375198 0.498522 -0.781475 + -0.103364 1.35168 0.413848 -0.347091 0.0392415 -0.93701 + -0.058157 1.3369 0.399255 0.187623 -0.214952 -0.958433 + -0.037458 1.26966 0.460324 0.0588953 -0.872721 -0.484653 + 0.037461 1.26966 0.460324 -0.29007 -0.794245 -0.533886 + -0.063033 1.41611 0.399059 -0.142519 -0.196359 -0.970119 + -0.020348 1.32586 0.432783 0.231741 -0.401437 -0.886084 + 0.020343 1.32585 0.43279 -0.252983 -0.437843 -0.862724 + 0.07527 1.2807 0.426797 -0.330844 -0.437348 -0.836223 + 0.133816 1.22648 0.435115 -0.443435 -0.563743 -0.696821 + -0.020348 1.3982 0.403079 -0.0271822 -0.33499 -0.94183 + 0.020343 1.3982 0.403087 -0.0815778 -0.250729 -0.964614 + 0.058152 1.3369 0.399263 -0.100473 -0.294318 -0.950412 + 0.103371 1.35168 0.413852 0.347001 0.0392828 -0.937042 + 0.160933 1.28092 0.40182 -0.0430296 0.0255672 -0.998747 + 0.022033 1.47459 0.381164 0.0315029 -0.376409 -0.925918 + 0.063028 1.41611 0.399067 0.169006 -0.152092 -0.973809 + 0.108247 1.43089 0.413656 0.531612 -0.145584 -0.834382 + 0.064718 1.49242 0.377094 0.317126 -0.287932 -0.903618 + 0.124814 1.48874 0.411456 0.582193 -0.194188 -0.789521 + 0.181837 1.41074 0.486163 0.522952 0.0773544 -0.848844 + 0.221193 1.38548 0.495113 0.176339 0.438415 -0.881304 + 0.142727 1.32642 0.422802 0.375128 0.498526 -0.781505 + 0.198404 1.46867 0.484013 0.565244 -0.297728 -0.769323 + 0.283988 1.51739 0.52664 0.324128 -0.22821 -0.918075 + 0.293227 1.44316 0.523606 0.0526546 0.28335 -0.95757 + 0.265505 1.32973 0.449478 0.101272 0.515591 -0.850829 + 0.283711 1.28422 0.428496 0.193634 0.407203 -0.892576 + 0.210234 1.5283 0.447544 0.45081 -0.475953 -0.755142 + 0.295818 1.5771 0.490221 0.573441 -0.301096 -0.76191 + 0.394222 1.62731 0.522844 0.282031 0.0675666 -0.957023 + 0.403461 1.553 0.51976 0.345415 -0.0507179 -0.937078 + 0.280894 1.6451 0.472234 0.739166 -0.170683 -0.651538 + 0.348007 1.70073 0.530481 0.400072 0.060822 -0.914463 + 0.400693 1.81364 0.551913 0.370849 0.089959 -0.924326 + 0.446908 1.74023 0.544275 0.466976 0.122535 -0.875739 + 0.474947 1.67246 0.56804 0.728444 -0.0387595 -0.684008 + 0.333083 1.76874 0.512495 0.694432 -0.0192365 -0.719301 + 0.378274 1.89349 0.544616 0.438766 -0.0111476 -0.898532 + 0.456381 1.94003 0.566206 0.123192 -0.129377 -0.983913 + 0.465267 1.85968 0.587968 0.345129 -0.159922 -0.92483 + 0.493306 1.79201 0.611783 0.563225 -0.139724 -0.814404 + 0.308398 1.84823 0.493807 0.831084 -0.0086162 -0.556081 + 0.353588 1.97298 0.525929 0.663916 -0.133579 -0.73578 + 0.433961 2.01996 0.558959 0.0721653 -0.0444385 -0.996402 + 0.535835 1.97165 0.553246 -0.334563 -0.292087 -0.895965 + 0.363007 2.05692 0.504145 0.824621 -0.263804 -0.500408 + 0.427419 2.11128 0.562997 0.246753 -0.158179 -0.956082 + 0.532117 2.13554 0.526962 -0.490472 -0.188304 -0.850869 + 0.538659 2.04423 0.522924 -0.400579 -0.128175 -0.907253 + 0.436838 2.19521 0.541213 0.324947 -0.561984 -0.760647 + 0.547218 2.19947 0.491443 -0.535375 -0.40146 -0.743104 + 0.675615 2.02754 0.398427 -0.688805 -0.400184 -0.604484 + 0.670734 1.96894 0.458334 -0.572778 -0.40382 -0.71334 + 0.667909 1.89627 0.488606 -0.493779 -0.352755 -0.794825 + 0.579077 2.25846 0.430067 -0.509442 -0.476457 -0.71656 + 0.690716 2.09138 0.362858 -0.705055 -0.124379 -0.698159 + 0.798104 2.04702 0.249884 -0.583926 -0.481146 -0.653857 + 0.815225 2.03678 0.260635 -0.217635 -0.802835 -0.555059 + 0.905681 2.11917 0.074324 -0.677792 0.725881 -0.117028 + -0.157942 0.978861 0.642399 -0.231013 -0.0754603 -0.97002 + -0.162537 1.00449 0.54461 0.784285 -0.254138 -0.565959 + -2.09165 3.45262 -1.04988 -0.0543093 -0.45732 0.887643 + -2.18006 3.48536 -1.04378 -0.0209092 -0.388401 0.921253 + -2.2058 3.68529 -0.95188 -0.2531 -0.394922 0.883163 + -1.97364 3.439 -1.04168 -0.297213 -0.583841 0.755509 + -2.1174 3.65256 -0.957993 -0.258198 -0.660296 0.705225 + -1.86176 3.43631 -0.971036 -0.505425 -0.593745 0.626109 + -2.00552 3.64988 -0.887349 -0.44918 -0.5374 0.71375 + -2.07039 3.82545 -0.818837 -0.506927 -0.317155 0.801522 + -2.14037 3.9084 -0.844915 -0.519915 -0.226356 0.823682 + -2.20152 3.88538 -0.885033 -0.363834 -0.250587 0.897124 + -1.79986 3.5921 -0.782469 -0.625921 -0.509609 0.590357 + -1.86474 3.76767 -0.713957 -0.683507 -0.470865 0.557767 + -1.97612 3.9831 -0.709897 -0.76075 -0.338078 0.554042 + -2.04609 4.06606 -0.735983 -0.608563 -0.297325 0.735697 + -1.58849 3.30425 -0.777901 -0.914295 -0.357266 0.190855 + -1.70671 3.54272 -0.695131 -0.871353 -0.468831 0.144714 + -1.77531 3.6815 -0.637106 -0.88567 -0.455344 0.090835 + -1.92994 3.90122 -0.673683 -0.853646 -0.465011 0.234633 + -1.82364 3.76664 -0.537178 -0.861739 -0.387494 -0.327496 + -1.84051 3.81505 -0.596833 -0.856313 -0.512053 0.0672991 + -1.94943 4.01591 -0.560924 -0.910745 -0.404165 -0.0848185 + -1.99561 4.09788 -0.597096 -0.909061 -0.406266 0.0925032 + -2.03906 4.19652 -0.66155 -0.785931 -0.500045 0.363687 + -1.8582 3.6928 -0.453484 -0.761729 -0.209058 -0.61324 + -1.93577 3.88299 -0.4305 -0.791942 -0.415927 -0.447026 + -1.95263 3.9314 -0.490156 -0.828293 -0.436161 -0.351701 + -2.03259 4.06293 -0.415175 -0.885005 -0.287457 -0.366244 + -2.03936 4.18336 -0.499351 -0.906514 -0.379454 -0.185058 + -1.93562 3.58438 -0.343901 -0.717892 -0.114539 -0.686668 + -2.05642 3.6944 -0.238661 -0.731413 -0.124679 -0.67044 + -1.979 3.80282 -0.348244 -0.727421 -0.218734 -0.650396 + -2.10697 3.8933 -0.246166 -0.759824 -0.172866 -0.626725 + -2.0358 3.97843 -0.344406 -0.821546 -0.21935 -0.526259 + -2.00939 3.36899 -0.249225 -0.661383 -0.0449468 -0.7487 + -2.0522 3.5238 -0.228167 -0.703479 -0.0532264 -0.70872 + -2.13928 3.60563 -0.129109 -0.740915 -0.0352635 -0.670672 + -2.2237 3.73838 -0.061223 -0.757445 -0.109574 -0.643639 + -2.15021 3.81314 -0.163911 -0.761943 -0.159675 -0.627652 + -2.30656 3.64969 0.04838 -0.8004 -0.0724007 -0.595079 + -2.36788 3.86899 0.100744 -0.817208 -0.0760076 -0.571309 + -2.29439 3.94375 -0.001943 -0.790675 -0.0926866 -0.605179 + -2.24075 4.03992 -0.09271 -0.79328 -0.097494 -0.601 + -2.42075 3.77541 0.197428 -0.843604 -0.0850079 -0.530194 + -2.46344 4.08564 0.234104 -0.870739 -0.0700197 -0.486734 + -2.42688 4.18807 0.142888 -0.852323 -0.075422 -0.517549 + -2.37324 4.28423 0.052122 -0.834333 -0.0749794 -0.546139 + -2.55816 4.3135 0.378037 -0.886111 -0.0396392 -0.461775 + -2.5216 4.41592 0.286831 -0.893206 -0.0227285 -0.449073 + -2.47784 4.52184 0.207375 -0.884018 -0.0024716 -0.467446 + -2.34308 4.40835 -0.01565 -0.845198 -0.0911075 -0.52663 + -2.16957 4.12504 -0.190949 -0.795887 -0.110816 -0.595218 + -2.60312 4.21438 0.46731 -0.874776 -0.0297995 -0.483611 + -2.64047 4.54202 0.519619 -0.88904 0.0479407 -0.455313 + -2.586 4.64014 0.436469 -0.893476 0.0723779 -0.443241 + -2.54224 4.74606 0.357013 -0.898797 0.10193 -0.426349 + -2.68542 4.4429 0.6089 -0.906215 0.0169883 -0.422476 + -2.66822 4.75083 0.630958 -0.911901 0.157781 -0.37887 + -2.61376 4.84895 0.547808 -0.900977 0.177215 -0.396023 + -2.55713 4.93932 0.463279 -0.900637 0.193606 -0.389062 + -2.48569 4.84565 0.275923 -0.900593 0.129705 -0.414859 + -2.72797 4.35094 0.703387 -0.915186 0.0102556 -0.402902 + -2.76089 4.56788 0.813234 -0.941275 0.103216 -0.321478 + -2.71834 4.65994 0.718789 -0.9311 0.130438 -0.340644 + -2.65025 4.94789 0.708834 -0.920467 0.267033 -0.285365 + -2.59492 5.03463 0.622196 -0.909378 0.282126 -0.305673 + -2.80234 4.48734 0.914338 -0.958409 0.0835529 -0.272894 + -2.74932 4.77044 0.885785 -0.940867 0.225482 -0.252838 + -2.70037 4.857 0.796664 -0.931207 0.250401 -0.264863 + -2.61138 5.14084 0.817034 -0.911251 0.354851 -0.209049 + -2.79077 4.6899 0.98689 -0.951738 0.206352 -0.227187 + -2.7084 4.97785 0.998734 -0.931745 0.32956 -0.152452 + -2.65944 5.06441 0.909622 -0.921912 0.338252 -0.188848 + -2.83173 4.63089 1.0977 -0.959075 0.189566 -0.210331 + -2.78712 4.84956 1.20634 -0.930227 0.338752 -0.141156 + -2.74616 4.90857 1.09554 -0.931493 0.333064 -0.146247 + -2.63199 5.20228 1.15381 -0.918214 0.393414 -0.0459125 + -2.60005 5.27246 1.05447 -0.912686 0.399923 -0.0840546 + -2.8228 4.79673 1.31545 -0.93772 0.326351 -0.119063 + -2.69677 5.07788 1.34668 -0.905787 0.420403 -0.0530262 + -2.66975 5.13291 1.25057 -0.912907 0.404943 -0.0512024 + -2.53978 5.40978 1.32602 -0.898035 0.439922 0.00130757 + -2.73246 5.02505 1.45579 -0.888433 0.44311 -0.11975 + -2.59562 5.29916 1.50761 -0.885355 0.464805 -0.0101343 + -2.5686 5.35419 1.4115 -0.894304 0.447457 0.00138431 + -2.42323 5.62676 1.5194 -0.818219 0.574298 0.0264345 + -2.50784 5.47996 1.22667 -0.873247 0.486304 -0.0307972 + -2.77865 4.97933 1.56458 -0.901265 0.419155 -0.109685 + -2.66938 5.20707 1.70372 -0.856494 0.513361 -0.0536392 + -2.62319 5.25279 1.59493 -0.859418 0.506552 -0.0693241 + -2.46568 5.52634 1.67394 -0.85751 0.509483 0.071438 + -2.45206 5.57117 1.60488 -0.859907 0.502524 0.0896057 + -2.80769 4.92047 1.67653 -0.93074 0.365679 0.00157322 + -2.68816 5.16972 1.81502 -0.881842 0.468562 0.0529564 + -2.50869 5.45074 1.83768 -0.820295 0.570351 0.0426088 + -2.49325 5.47997 1.76125 -0.837623 0.544791 0.0398699 + -2.31828 5.7211 1.80079 -0.784604 0.580258 0.218397 + -2.82122 4.86942 1.79256 -0.933617 0.35671 0.0334293 + -2.70169 5.11875 1.9311 -0.89055 0.44423 0.0978837 + -2.55329 5.34863 2.07074 -0.8275 0.544612 0.136531 + -2.52747 5.41347 1.94903 -0.816856 0.569034 0.0945872 + -2.30026 5.70265 1.96015 -0.742642 0.655494 0.137152 + -2.84193 4.80944 1.90563 -0.928767 0.37057 -0.00836971 + -2.71208 5.05683 2.09695 -0.866553 0.493758 0.0727193 + -2.56369 5.28679 2.23664 -0.82575 0.527754 0.199031 + -2.36036 5.57092 2.18392 -0.739523 0.637411 0.21636 + -2.33453 5.63576 2.06221 -0.745054 0.642313 0.1798 + -2.86009 4.78554 2.03663 -0.923899 0.382483 -0.010808 + -2.73024 5.03293 2.22795 -0.788939 0.610517 0.0696004 + -2.58513 5.13559 2.48833 -0.790199 0.568266 0.229475 + -2.41336 5.32076 2.59061 -0.745234 0.597703 0.295596 + -2.39192 5.47197 2.33891 -0.74202 0.614454 0.268054 + -2.87809 4.72406 2.17391 -0.940136 0.337211 0.0493238 + -2.78208 4.9222 2.33093 -0.869903 0.475428 0.13129 + -2.63696 5.02486 2.59132 -0.788866 0.56382 0.244535 + -2.89948 4.61338 2.36022 -0.944468 0.318925 0.079168 + -2.80347 4.81152 2.51723 -0.87635 0.438099 0.200202 + -2.77926 4.7781 2.66272 -0.853893 0.462914 0.237861 + -2.61275 4.99135 2.73675 -0.777742 0.562653 0.280247 + -2.92178 4.51901 2.47688 -0.941396 0.320807 0.104194 + -2.7918 4.70423 2.76488 -0.857363 0.466237 0.218063 + -2.6075 4.91344 2.9007 -0.769537 0.556362 0.313487 + -2.39793 5.14652 2.96539 -0.715766 0.609412 0.341021 + -2.40318 5.22443 2.80145 -0.727052 0.607832 0.319273 + -2.93431 4.44513 2.57904 -0.93877 0.321731 0.123289 + -2.944 4.36891 2.69926 -0.942316 0.300852 0.146728 + -2.82734 4.60859 2.84251 -0.878694 0.435094 0.196444 + -2.64304 4.81781 2.97834 -0.78528 0.53861 0.305343 + -2.93668 4.31809 2.81409 -0.941943 0.287876 0.172833 + -2.82002 4.55769 2.95729 -0.865309 0.411778 0.285796 + -2.76831 4.56016 3.08241 -0.833603 0.455824 0.31198 + -2.59133 4.8202 3.1034 -0.761178 0.551585 0.341118 + -3.03633 3.96322 2.76533 -0.974454 0.17874 0.135982 + -2.92508 4.27844 2.95516 -0.930415 0.302307 0.207214 + -2.75332 4.51485 3.20068 -0.829055 0.476306 0.292917 + -2.56165 4.72498 3.30773 -0.746222 0.550401 0.374448 + -2.91008 4.23313 3.07343 -0.923007 0.310234 0.227627 + -2.89556 4.19064 3.19443 -0.921938 0.304481 0.239418 + -2.77868 4.4125 3.29715 -0.850802 0.436808 0.292122 + -2.58701 4.62271 3.40426 -0.75346 0.533149 0.384772 + -2.35703 4.93946 3.37123 -0.688603 0.6029 0.402911 + -3.00792 3.89376 3.01664 -0.969872 0.166385 0.177947 + -2.99013 3.85874 3.14489 -0.964628 0.158448 0.21068 + -2.88356 4.12758 3.30345 -0.920057 0.276043 0.27802 + -2.76669 4.34953 3.40622 -0.83521 0.402747 0.37446 + -3.01927 3.52656 3.11545 -0.978264 -0.0181472 0.206569 + -2.9702 3.80311 3.25965 -0.957509 0.127008 0.258931 + -2.86364 4.07195 3.41821 -0.903613 0.265969 0.335775 + -2.71835 4.34324 3.50512 -0.804391 0.419175 0.421007 + -2.53868 4.61643 3.50315 -0.738434 0.544643 0.39759 + -2.99093 3.47223 3.23235 -0.966858 -0.0510364 0.250161 + -2.94185 3.7487 3.3765 -0.946037 0.0993097 0.308467 + -2.84152 4.00321 3.52207 -0.890499 0.243175 0.384549 + -2.69623 4.2745 3.60898 -0.813905 0.382305 0.437495 + -2.52007 4.5369 3.64849 -0.73621 0.513257 0.441092 + -2.94526 3.14078 3.22244 -0.947246 -0.168592 0.272583 + -2.95263 3.41614 3.34891 -0.950557 -0.0799189 0.300089 + -2.9106 3.68128 3.48288 -0.930175 0.0592283 0.362306 + -2.81027 3.93579 3.62845 -0.882242 0.215088 0.418791 + -2.65982 4.2023 3.73764 -0.802569 0.364417 0.472316 + -2.93318 2.84781 3.06129 -0.941533 -0.196948 0.273363 + -2.8961 3.06982 3.33155 -0.933504 -0.194095 0.301493 + -2.91085 3.34236 3.45169 -0.934533 -0.111482 0.337964 + -2.86882 3.6075 3.58566 -0.918938 0.0248867 0.393616 + -2.86976 2.44501 2.95194 -0.918618 -0.255853 0.301133 + -2.88402 2.77684 3.17041 -0.922545 -0.225435 0.313192 + -2.82897 2.67436 3.24551 -0.90573 -0.254176 0.339188 + -2.84745 2.98667 3.42657 -0.912453 -0.222497 0.343402 + -2.86219 3.25922 3.54671 -0.929621 -0.13405 0.343271 + -2.85299 2.1988 2.7792 -0.915081 -0.292864 0.277233 + -2.79381 2.07464 2.83085 -0.901153 -0.318168 0.294435 + -2.81471 2.34254 3.02704 -0.900527 -0.281915 0.331021 + -2.77132 1.88583 2.67448 -0.901379 -0.35691 0.245216 + -2.70523 1.74766 2.70259 -0.885211 -0.384821 0.261368 + -2.73262 1.95246 2.88208 -0.885417 -0.343054 0.31361 + -2.75351 2.22044 3.07832 -0.887788 -0.302792 0.346627 + -2.64147 1.51538 2.56272 -0.886635 -0.444319 0.12829 + -2.5387 1.40196 2.66698 -0.848709 -0.455277 0.269102 + -2.63705 1.62676 2.7512 -0.880864 -0.41533 0.227113 + -2.66443 1.83164 2.93074 -0.8636 -0.371295 0.341079 + -2.41932 1.16569 2.65599 -0.757829 -0.486036 0.435274 + -2.27515 1.08933 2.76686 -0.72349 -0.621395 0.300717 + -2.46649 1.2873 2.72756 -0.766638 -0.630721 -0.120241 + -2.56484 1.51211 2.81178 -0.860239 -0.431404 0.271809 + -2.35561 1.04979 2.60395 -0.672192 -0.68579 0.279017 + -2.21144 0.973508 2.71487 -0.721084 -0.577432 0.382898 + -2.10981 0.896364 2.79808 -0.823418 -0.512403 0.243772 + -2.20762 1.03299 2.84985 -0.750614 -0.657077 0.0694844 + -2.39897 1.23088 2.81048 -0.781194 -0.591803 0.198757 + -2.22695 0.911439 2.59657 -0.735958 -0.599618 0.314362 + -2.12532 0.8343 2.67978 -0.71394 -0.635401 0.294203 + -2.07563 0.857085 2.85552 -0.763329 -0.605712 0.224595 + -2.17345 0.993706 2.90729 -0.753335 -0.643149 0.13728 + -2.12988 0.805667 2.58238 -0.656956 -0.733925 0.172516 + -2.03971 0.774912 2.74105 -0.707772 -0.662453 0.245387 + -1.97094 0.723982 2.81546 -0.73055 -0.638569 0.241921 + -2.00686 0.806154 2.92993 -0.72925 -0.638309 0.246488 + -2.04427 0.746279 2.64364 -0.66514 -0.737012 0.120011 + -1.96054 0.673768 2.71784 -0.679722 -0.724682 0.113197 + -1.89341 0.665197 2.89428 -0.741697 -0.621265 0.252815 + -1.92394 0.74449 3.01254 -0.725632 -0.639517 0.253921 + -1.97589 0.68658 2.63224 -0.799499 -0.561566 0.213177 + -1.88301 0.61507 2.7967 -0.813589 -0.496025 0.303368 + -1.82403 0.563674 2.87752 -0.86339 -0.39021 0.319833 + -1.83081 0.619075 2.95577 -0.786076 -0.550375 0.281375 + -1.89952 0.575276 2.72663 -0.856007 -0.363034 0.368046 + -1.84054 0.52388 2.80745 -0.804464 -0.46877 0.364817 + -1.78991 0.540926 2.95392 -0.745189 -0.581831 0.325831 + -1.79669 0.59624 3.03212 -0.765077 -0.50521 0.399274 + -1.9252 0.559805 2.65102 -0.844864 -0.386319 0.370083 + -1.84902 0.490325 2.73637 -0.777631 -0.520484 0.352684 + -1.78719 0.502876 2.88203 -0.665964 -0.658825 0.349917 + -1.73148 0.480153 2.93659 -0.569271 -0.725555 0.386653 + -1.73421 0.51829 3.00853 -0.538427 -0.714791 0.446285 + -1.94391 0.538627 2.57991 -0.804422 -0.471355 0.361564 + -1.86774 0.469151 2.66524 -0.750918 -0.572214 0.329686 + -1.79567 0.469321 2.81095 -0.670839 -0.645173 0.365685 + -1.73252 0.44352 2.86664 -0.572203 -0.725371 0.382648 + -1.88031 0.447599 2.59177 -0.688693 -0.683989 0.240544 + -1.80017 0.435389 2.73712 -0.637175 -0.694699 0.333767 + -1.73702 0.409586 2.79281 -0.552377 -0.75448 0.354455 + -1.66489 0.41602 2.90367 -0.500535 -0.772213 0.391346 + -1.66385 0.452739 2.97367 -0.526799 -0.734419 0.427915 + -1.9018 0.448913 2.5195 -0.717192 -0.665489 0.206787 + -1.81274 0.413835 2.66365 -0.642262 -0.696881 0.319151 + -1.74226 0.381653 2.72039 -0.546807 -0.76448 0.341427 + -1.66729 0.385132 2.83637 -0.458282 -0.815868 0.352615 + -1.91665 0.442788 2.4447 -0.706371 -0.685974 0.174582 + -1.82285 0.386233 2.58806 -0.648848 -0.715846 0.257994 + -1.75237 0.35405 2.6448 -0.477941 -0.833239 0.278003 + -1.67252 0.357199 2.76395 -0.401829 -0.861335 0.310861 + -1.93747 0.448141 2.37083 -0.66322 -0.74147 0.101789 + -1.8377 0.380114 2.51326 -0.618341 -0.771339 0.150635 + -1.75667 0.33829 2.5721 -0.410896 -0.898397 0.155073 + -1.67697 0.338785 2.69304 -0.318146 -0.917909 0.237122 + -1.94748 0.45034 2.29522 -0.652028 -0.747666 0.125917 + -1.84167 0.373013 2.43696 -0.570074 -0.81826 0.0739376 + -1.76064 0.33119 2.4958 -0.392025 -0.916909 0.0747872 + -1.68127 0.323023 2.62034 -0.292781 -0.938828 0.181332 + -1.96172 0.44608 2.2196 -0.545545 -0.835137 0.070196 + -1.85169 0.375125 2.3613 -0.511168 -0.859007 -0.0285292 + -1.75908 0.327635 2.42095 -0.31491 -0.947448 -0.0563375 + -1.68045 0.311597 2.54813 -0.290844 -0.950306 0.111036 + -1.96598 0.448469 2.14407 -0.483277 -0.87237 0.0735853 + -1.84948 0.386313 2.28472 -0.413375 -0.907028 -0.0801349 + -1.75687 0.338735 2.34433 -0.36352 -0.926843 -0.0938897 + -1.67889 0.30813 2.47334 -0.303308 -0.952342 0.0323784 + -1.96224 0.437152 2.06866 -0.373598 -0.925468 0.0627102 + -1.85374 0.388701 2.20919 -0.404561 -0.913232 -0.0483561 + -1.75317 0.342798 2.27029 -0.368158 -0.925502 -0.0889166 + -1.67281 0.301677 2.40131 -0.371055 -0.928604 0.0036374 + -1.9619 0.434756 1.99342 -0.320484 -0.943178 0.0877777 + -1.85671 0.399638 2.13244 -0.326285 -0.943416 -0.0591966 + -1.75615 0.353735 2.19355 -0.37183 -0.923184 -0.0973329 + -1.66911 0.305741 2.32728 -0.361023 -0.930197 -0.0662937 + -1.94478 0.420302 1.91885 -0.242144 -0.966171 0.0887686 + -1.85638 0.397241 2.05719 -0.34773 -0.937278 0.0243521 + -1.75483 0.359828 2.1202 -0.403427 -0.91483 -0.0182605 + -1.66021 0.306524 2.25632 -0.390768 -0.918382 -0.0622521 + -2.01429 0.419449 1.81933 0.000201078 -0.976165 0.217028 + -1.9407 0.415079 1.8431 -0.193123 -0.974072 0.117843 + -1.86792 0.40068 1.98044 -0.27893 -0.960268 0.00916281 + -1.76638 0.363265 2.04344 -0.323562 -0.944997 -0.0478489 + -1.65889 0.312522 2.18293 -0.363883 -0.924314 -0.115032 + -1.99393 0.39519 1.74235 -0.000629854 -0.96888 0.247529 + -1.92829 0.401439 1.76872 -0.0227849 -0.993839 0.108469 + -1.86385 0.395455 1.90469 -0.241658 -0.970327 0.00815342 + -1.76647 0.37023 1.97018 -0.282978 -0.957349 -0.0583555 + -1.64877 0.321744 2.11336 -0.305524 -0.942695 -0.134089 + -2.01282 0.326938 1.53156 -0.00306389 -0.969994 0.243107 + -1.98152 0.381463 1.66792 0.303052 -0.928114 0.216248 + -1.92178 0.39673 1.69228 0.0234258 -0.988778 0.147541 + -1.86879 0.401352 1.82807 -0.0709514 -0.996959 -0.0322347 + -1.77141 0.376127 1.89356 -0.228292 -0.970658 -0.075535 + -1.99759 0.31104 1.4545 0.258246 -0.955681 0.14136 + -1.9663 0.36556 1.59087 0.268162 -0.931293 0.24654 + -1.90934 0.379825 1.61676 0.2331 -0.960014 0.15504 + -1.9927 0.303234 1.36722 0.217083 -0.971962 0.0903619 + -1.95386 0.34866 1.51534 0.303079 -0.937723 0.169764 + -1.90111 0.374766 1.54132 0.321714 -0.936831 0.137285 + -2.04358 0.304913 1.25091 -0.408087 -0.912941 0.00203094 + -1.98685 0.299232 1.28975 0.583597 -0.804124 -0.113135 + -1.94801 0.344573 1.43782 0.417967 -0.900173 0.122445 + -2.10656 0.366408 1.0692 -0.619418 -0.784896 -0.0160926 + -2.04389 0.308428 1.16162 -0.165263 -0.976137 -0.140874 + -2.00195 0.314246 1.20675 0.46818 -0.863876 -0.18581 + -2.10102 0.361741 0.977082 -0.600154 -0.799549 -0.0231476 + -2.05899 0.323441 1.07862 -0.287557 -0.956446 -0.0502304 + -2.17633 0.417002 0.856766 -0.574413 -0.818565 -0.00089604 + -2.14088 0.392912 0.810892 -0.573654 -0.819044 0.00939378 + -2.0973 0.364427 0.890429 -0.593997 -0.804343 -0.0141689 + -2.13557 0.385806 0.720198 -0.454311 -0.884817 -0.103444 + -2.19283 0.513421 0.515565 -0.613024 -0.568446 -0.5487 + -2.28918 0.60205 0.568854 -0.744975 -0.480878 -0.462352 + -1.64886 0.328703 2.0401 -0.300308 -0.947308 -0.111459 + -1.5508 0.28849 2.07756 -0.417531 -0.896406 -0.148742 + -1.56516 0.281293 2.16402 -0.421362 -0.892018 -0.163578 + -1.48961 0.249849 2.09508 -0.498856 -0.852899 -0.153969 + -1.50396 0.242652 2.18155 -0.438085 -0.889565 -0.129441 + -1.57528 0.272073 2.23359 -0.416914 -0.904021 -0.0944887 + -1.58532 0.274212 2.32089 -0.414239 -0.909138 -0.0432954 + -1.42509 0.205372 2.11312 -0.552619 -0.830091 -0.0745739 + -1.43347 0.208092 2.21021 -0.466861 -0.88171 -0.0680356 + -1.52169 0.24162 2.28234 -0.431556 -0.901287 -0.0379507 + -1.53174 0.243759 2.36963 -0.375807 -0.925829 0.040131 + -1.59423 0.273517 2.39189 -0.362183 -0.931812 0.0234357 + -1.34864 0.1531 2.04626 -0.536426 -0.843531 -0.0265117 + -1.34554 0.158488 2.14013 -0.456358 -0.889265 0.0307576 + -1.35392 0.161294 2.23726 -0.422963 -0.905377 0.0373347 + -1.4512 0.206969 2.31095 -0.400125 -0.915105 0.0498191 + -1.45679 0.220878 2.40706 -0.333336 -0.934438 0.125353 + -1.33591 0.146628 1.97227 -0.52148 -0.851632 -0.052743 + -1.22032 0.103022 2.0614 -0.252562 -0.966088 -0.0537253 + -1.22021 0.101478 2.14847 -0.321263 -0.94675 0.0213059 + -1.21711 0.106865 2.24234 -0.342811 -0.938572 0.0395335 + -1.22545 0.112729 1.96998 -0.211424 -0.971177 -0.110067 + -1.02737 0.056695 2.24564 -0.164359 -0.98576 -0.0355564 + -1.02726 0.055147 2.33272 -0.192495 -0.981253 -0.00936353 + -1.02824 0.056105 2.41526 -0.227889 -0.973438 0.0220352 + -0.867153 0.039802 2.2227 -0.0501389 -0.99665 -0.064616 + -0.867964 0.035107 2.30703 -0.0566004 -0.996033 -0.068656 + -0.879902 0.028684 2.38955 -0.124479 -0.990823 -0.0526654 + -0.880885 0.029725 2.47215 -0.202916 -0.976444 -0.0733684 + -1.03752 0.060968 2.49944 -0.198429 -0.976019 -0.0895106 + -0.724318 0.045762 2.15937 0.0411721 -0.997937 -0.0492575 + -0.756667 0.040633 2.24066 0.0373009 -0.997558 -0.0590538 + -0.768605 0.034296 2.32323 -0.0148463 -0.988781 -0.148635 + -0.787987 0.016661 2.40498 -0.0765398 -0.986346 -0.145821 + -0.566167 0.059859 2.04836 0.095351 -0.995418 0.00718027 + -0.583467 0.056534 2.13152 0.0920215 -0.995314 -0.0296966 + -0.615817 0.051409 2.21279 0.0697268 -0.993691 -0.0878428 + -0.637802 0.036659 2.29194 0.0172544 -0.979085 -0.202718 + -0.4243 0.077633 2.05497 0.118094 -0.992988 -0.00533023 + -0.4416 0.074308 2.13813 0.0911641 -0.993795 -0.0637168 + -0.456349 0.065611 2.21919 0.0690841 -0.989662 -0.12568 + -0.478334 0.050861 2.29834 0.0362249 -0.963091 -0.266728 + -0.285543 0.092543 1.96235 0.082683 -0.99299 -0.0844699 + -0.291431 0.091702 2.046 0.0472788 -0.996903 -0.062845 + -0.301232 0.081181 2.12422 -0.00713135 -0.990435 -0.137798 + -0.315981 0.072491 2.20528 -0.0564023 -0.978318 -0.199279 + -0.280226 0.104435 1.88275 0.0850947 -0.984963 -0.150357 + -0.154552 0.107445 1.94174 0.130729 -0.981449 -0.140239 + -0.161487 0.095491 2.01744 0.0906738 -0.986474 -0.136554 + -0.171288 0.084975 2.09565 0.0223911 -0.979078 -0.202248 + -0.183179 0.063995 2.16679 -0.0165967 -0.964244 -0.264497 + -0.149236 0.119336 1.86214 0.144734 -0.970682 -0.191909 + -0.065459 0.122525 1.94562 0.333935 -0.934339 -0.12449 + -0.072394 0.110565 2.02133 0.332738 -0.928511 -0.16478 + -0.079232 0.091678 2.08985 0.304363 -0.929804 -0.206948 + -0.039051 0.157157 1.80163 0.364521 -0.907556 -0.208488 + -0.059663 0.134967 1.87326 0.331259 -0.92966 -0.161244 + -0.023052 0.142337 1.9765 0.252548 -0.958922 -0.129184 + -0.023052 0.132783 2.05185 0.240554 -0.952935 -0.184525 + -0.029889 0.113896 2.12036 0.33783 -0.907215 -0.250663 + -0.029835 0.176438 1.74344 0.509049 -0.819146 -0.264328 + -0.017255 0.16442 1.82885 0.265666 -0.945975 -0.185886 + -0.017255 0.15478 1.90415 0.244123 -0.960376 -0.134465 + 0.023052 0.142337 1.9765 -0.257471 -0.957182 -0.132328 + 0.023052 0.132783 2.05185 -0.243841 -0.954338 -0.172574 + -0.008039 0.211872 1.70326 0.273746 -0.921409 -0.275806 + -0.008039 0.183616 1.7706 0.275276 -0.912485 -0.302645 + 0.00804 0.183611 1.77061 -0.275861 -0.912252 -0.302816 + 0.017255 0.16442 1.82885 -0.252688 -0.950749 -0.179513 + 0.017255 0.15478 1.90415 -0.243275 -0.960318 -0.136405 + 0.00804 0.211867 1.70327 -0.273303 -0.921494 -0.275959 + 0.029836 0.176433 1.74344 -0.508916 -0.819128 -0.264638 + 0.039051 0.157157 1.80163 -0.364626 -0.908268 -0.205173 + 0.059663 0.134967 1.87326 -0.335117 -0.927885 -0.16348 + 0.065459 0.122525 1.94562 -0.333115 -0.93439 -0.126292 + 0.023071 0.214616 1.66891 -0.301299 -0.948176 -0.100904 + 0.044867 0.179094 1.70903 -0.402852 -0.866191 -0.295675 + 0.128624 0.141618 1.79055 -0.156189 -0.955816 -0.249038 + 0.149236 0.119336 1.86214 -0.127307 -0.969749 -0.208277 + 0.077389 0.188657 1.64287 -0.310978 -0.880171 -0.358597 + 0.172667 0.169411 1.65301 -0.111582 -0.9323 -0.344043 + 0.140145 0.15994 1.71921 -0.151988 -0.95824 -0.24223 + 0.289262 0.11663 1.80043 -0.104833 -0.972077 -0.209945 + 0.280227 0.104435 1.88275 -0.0934368 -0.982816 -0.15919 + 0.059101 0.223437 1.60503 -0.492994 -0.625485 -0.604753 + 0.113419 0.19954 1.59562 -0.266812 -0.844287 -0.464748 + 0.219097 0.192294 1.59817 -0.0519375 -0.979975 -0.19223 + 0.325697 0.165847 1.65678 0.0170248 -0.924096 -0.381781 + 0.300782 0.134952 1.72909 -0.0412717 -0.944205 -0.326763 + 0.016455 0.26198 1.61187 -0.33597 -0.439832 -0.832869 + 0.10875 0.245665 1.55153 -0.421674 -0.543614 -0.725724 + 0.185977 0.19434 1.55923 -0.212517 -0.883403 -0.417654 + 0.291654 0.187008 1.56173 0.0826667 -0.965876 -0.245459 + 0.372127 0.188644 1.6019 0.151304 -0.872841 -0.463957 + 0.066104 0.284205 1.55838 -0.622691 -0.326218 -0.711222 + 0.094316 0.306883 1.5237 -0.491361 -0.423392 -0.76112 + 0.172807 0.255556 1.517 -0.31558 -0.476786 -0.820418 + 0.250034 0.204145 1.52465 -0.117479 -0.764324 -0.63404 + 0.170386 0.315624 1.49316 -0.311988 -0.415864 -0.854237 + 0.248877 0.264298 1.48646 -0.26823 -0.470975 -0.840378 + 0.316714 0.227436 1.4939 -0.019341 -0.781214 -0.623964 + 0.411496 0.244192 1.49248 0.389863 -0.898825 -0.200303 + 0.344816 0.220906 1.52322 0.26835 -0.913575 -0.305565 + 0.099147 0.393027 1.47549 -0.178478 -0.571875 -0.80069 + 0.224866 0.336079 1.46153 -0.302939 -0.321099 -0.897287 + 0.311003 0.293472 1.45073 -0.2287 -0.433422 -0.871689 + 0.378839 0.25661 1.45817 0.00399699 -0.732972 -0.680247 + 0.214568 0.417707 1.45135 -0.175932 -0.405625 -0.896948 + 0.273208 0.382957 1.43094 -0.341688 -0.22859 -0.91159 + 0.359344 0.340435 1.42019 -0.313158 -0.371842 -0.87388 + 0.234373 0.595155 1.2896 0.00199342 -0.695913 -0.718123 + 0.280223 0.459798 1.41644 -0.229196 -0.456427 -0.859735 + 0.338862 0.425048 1.39603 -0.39924 -0.299754 -0.866461 + 0.404353 0.388668 1.38004 -0.383904 -0.36497 -0.848183 + 0.430531 0.290693 1.41134 -0.00866732 -0.74897 -0.662547 + 0.180778 0.941774 0.880636 0.0874276 -0.796584 -0.598172 + 0.288601 0.697477 1.20737 0.13617 -0.706496 -0.694494 + 0.284809 0.633355 1.24723 -0.0167387 -0.565796 -0.824375 + 0.330659 0.497998 1.37408 -0.296662 -0.512839 -0.805597 + 0.202299 1.02452 0.721508 -0.237914 -0.808776 -0.537846 + 0.1315 1.15639 0.566116 -0.683273 -0.674188 -0.280372 + 0.194623 1.1096 0.436545 -0.675886 -0.241239 -0.696407 + 0.224485 1.04294 0.438416 -0.60556 -0.420037 -0.675919 + 0.161362 1.08963 0.567937 -0.941146 -0.271414 -0.201444 + 0.202299 1.02452 0.721508 -0.881071 -0.357353 0.30986 + 0.166029 1.18089 0.455079 -0.604039 -0.362134 -0.709926 + 0.258117 1.16069 0.410469 -0.140426 -0.00502579 -0.990078 + 0.286711 1.0894 0.391936 -0.0190481 -0.0590518 -0.998073 + 0.312808 1.02384 0.415092 0.0412183 -0.413174 -0.909719 + 0.248556 0.979544 0.481017 -0.514629 -0.534366 -0.67053 + 0.21948 1.22669 0.410138 -0.111188 -0.156652 -0.981375 + 0.35818 1.15829 0.413422 0.201108 -0.118426 -0.972384 + 0.390198 1.08755 0.441946 0.384308 -0.126856 -0.914448 + 0.416295 1.0219 0.465053 0.410432 -0.317729 -0.854748 + 0.319542 1.22421 0.413041 0.165406 0.183347 -0.969033 + 0.4343 1.19784 0.443514 0.384609 0.101531 -0.917479 + 0.466318 1.12702 0.471987 0.364306 -0.134856 -0.921463 + 0.508152 1.07115 0.493346 0.414522 -0.272607 -0.868249 + 0.44088 0.967001 0.506741 0.418383 -0.49861 -0.759173 + 0.368359 1.32276 0.466147 0.296338 0.350691 -0.888369 + 0.40419 1.26275 0.450692 0.37819 0.34222 -0.86015 + 0.489019 1.27485 0.512728 0.195126 0.447301 -0.872839 + 0.520361 1.21793 0.473514 0.304285 0.210338 -0.929069 + 0.562195 1.16198 0.494822 0.465224 -0.0802301 -0.881549 + 0.337539 1.38741 0.477972 0.094197 0.434565 -0.895701 + 0.430147 1.4069 0.519008 0.423498 0.262598 -0.867001 + 0.458909 1.33976 0.519908 0.437379 0.280545 -0.854397 + 0.536813 1.37039 0.559051 0.0712872 0.434187 -0.897998 + 0.568156 1.31347 0.519837 0.248883 0.375791 -0.892658 + 0.399327 1.47155 0.530832 0.29048 0.1643 -0.94267 + 0.494464 1.51771 0.586891 0.48701 0.173572 -0.855975 + 0.523226 1.45056 0.587791 0.351529 0.285556 -0.891563 + 0.609086 1.49934 0.623102 0.358834 0.284674 -0.888931 + 0.470813 1.59102 0.579113 0.677248 -0.0090501 -0.735699 + 0.560694 1.66274 0.668891 0.346754 0.156162 -0.924865 + 0.595499 1.57951 0.651842 0.130183 0.301985 -0.944382 + 0.537043 1.73605 0.661113 0.489452 -0.183572 -0.852489 + 0.63287 1.72467 0.683221 -0.220073 -0.242601 -0.944835 + 0.667675 1.64153 0.666221 -0.168833 0.0794248 -0.982439 + 0.570279 1.82633 0.611337 -0.200123 -0.601636 -0.773295 + 0.614016 1.77037 0.660667 -0.208448 -0.636527 -0.742552 + 0.765247 1.66905 0.611151 -0.342337 -0.4768 -0.809609 + 0.819324 1.64323 0.607476 0.00663408 -0.706049 -0.708132 + 0.721752 1.61571 0.662546 0.0554567 -0.602927 -0.795867 + 0.544721 1.8913 0.575008 -0.270023 -0.387148 -0.881592 + 0.676006 1.77051 0.564613 -0.42849 -0.691888 -0.581109 + 0.746393 1.71475 0.588597 -0.377476 -0.592926 -0.711302 + 0.907269 1.77161 0.505114 0.119378 -0.583327 -0.803417 + 0.895425 1.6969 0.571711 0.228782 -0.725119 -0.649508 + 0.650448 1.83548 0.528282 -0.454389 -0.500496 -0.736909 + 0.836882 1.82746 0.481179 -0.0777549 -0.654659 -0.751914 + 1.08955 1.96145 0.43531 0.388775 -0.706283 -0.591623 + 1.02369 1.81801 0.518748 -0.557543 0.243408 -0.793661 + 0.833391 1.94058 0.379053 -0.226783 -0.656655 -0.719287 + 0.815929 1.8798 0.41873 -0.190316 -0.630613 -0.752401 + 1.05697 1.97337 0.346654 0.442259 -0.750163 -0.491592 + 0.810344 1.97817 0.320542 -0.246073 -0.765187 -0.594926 + 0.981624 2.07298 0.222127 0.163624 -0.758487 -0.630813 + 1.03601 2.02571 0.284205 0.150126 -0.724684 -0.672529 + 1.10585 2.12196 0.209687 0.660096 -0.396582 -0.637963 + 1.13428 2.12922 0.259715 0.882049 -0.226791 -0.412984 + 0.958577 2.11066 0.163666 0.343393 -0.87323 -0.345759 + 1.05147 2.16932 0.147664 0.741189 -0.418469 -0.524902 + 1.05384 2.25235 0.14565 0.840021 -0.357247 -0.408338 + 1.08226 2.25953 0.195622 0.842923 -0.32878 -0.425892 + 0.922802 2.10901 0.085129 0.0690286 -0.949442 -0.306259 + 1.02166 2.1516 0.03576 0.735983 -0.668118 -0.109302 + 1.03372 2.19214 0.092341 0.979928 -0.0173254 -0.198597 + 1.18729 2.0375 0.396588 0.11454 -0.51983 -0.846556 + 1.16686 2.1173 0.348371 0.604834 -0.408006 -0.683891 + 1.19065 2.1133 0.362098 0.415425 -0.374356 -0.829023 + 1.14683 2.27224 0.275606 -0.251369 -0.703331 -0.664935 + 1.12304 2.27624 0.261878 0.518217 -0.639739 -0.567614 + 1.17763 2.27532 0.212466 -0.466835 -0.86589 -0.179719 + 1.18686 2.17753 0.247647 -0.923615 -0.216732 -0.316169 + 1.19065 2.1133 0.362098 -0.99948 -0.00159498 0.0322018 + 1.1835 2.10173 0.282136 -0.975206 0.190751 -0.112197 + 1.09759 2.3003 0.121208 0.319193 -0.947526 -0.0176331 + 1.13837 2.31692 0.187409 -0.0712604 -0.976293 -0.204385 + 1.19122 2.27081 0.18087 -0.696198 -0.715946 -0.05225 + 1.31347 2.12724 0.109754 -0.793508 -0.28562 -0.53737 + 1.21766 2.18061 0.184504 -0.765389 -0.119618 -0.632354 + 1.07871 2.29808 0.057635 0.297169 -0.94411 0.142642 + 1.19219 2.27055 0.073518 -0.564576 -0.798629 -0.208438 + 1.21979 2.20679 0.063957 -0.756811 -0.543957 -0.362418 + 1.27264 2.16069 0.057417 -0.641701 -0.744126 -0.185731 + 1.32705 2.12282 0.078207 -0.703711 -0.633417 -0.321828 + 1.0361 2.27517 0.090327 0.763837 -0.624206 -0.164072 + 1.0774 2.23681 -0.044033 0.620122 -0.757082 0.20561 + 1.1697 2.29075 -0.059863 0.207982 -0.969606 -0.128869 + 1.17331 2.26835 0.009938 -0.173367 -0.977501 -0.120148 + 1.03478 2.21398 -0.011292 0.862466 -0.467678 0.193468 + 1.02272 2.17335 -0.067922 0.805969 -0.584621 0.0929153 + 1.03829 2.21156 -0.143494 0.865686 -0.486219 -0.119077 + 1.07955 2.24064 -0.106867 0.58024 -0.801442 -0.144955 + 1.08053 2.27656 -0.209287 0.652902 -0.643199 -0.400017 + 1.12179 2.30564 -0.172649 0.512942 -0.728268 -0.454441 + 1.17186 2.29449 -0.122738 0.43716 -0.854415 -0.280829 + 1.22873 2.32785 -0.137321 0.168746 -0.879145 -0.445678 + 1.27338 2.29774 -0.092373 -0.0457302 -0.865845 -0.498218 + 1.06901 2.33969 -0.284824 0.678377 -0.47301 -0.562197 + 1.12 2.34824 -0.23243 0.539317 -0.683937 -0.491291 + 1.17866 2.339 -0.187233 0.356476 -0.702752 -0.615682 + 1.30396 2.34659 -0.149771 0.0614656 -0.782636 -0.619438 + 1.3486 2.31648 -0.104823 -0.0978227 -0.653546 -0.750538 + 1.01663 2.3143 -0.349446 0.951981 -0.210593 -0.22222 + 1.03503 2.35088 -0.329403 0.815209 -0.303388 -0.493346 + 1.11506 2.38959 -0.271264 0.468928 -0.602128 -0.64618 + 1.18011 2.38412 -0.225178 0.373677 -0.721976 -0.582337 + 1.23876 2.37488 -0.179972 0.212932 -0.626427 -0.749833 + 1.02405 2.3753 -0.403114 0.918254 -0.253542 -0.304181 + 1.04244 2.41197 -0.383019 0.765658 -0.543893 -0.343436 + 1.08108 2.40086 -0.315784 0.531257 -0.658405 -0.533169 + 1.14067 2.43669 -0.342226 0.226085 -0.885337 -0.40628 + 0.989653 2.23551 -0.440186 0.936124 -0.103942 -0.335957 + 1.00614 2.35642 -0.447203 0.887363 -0.0667328 -0.456216 + 0.98841 2.44837 -0.48127 0.649857 -0.398456 -0.647239 + 1.04836 2.45826 -0.454405 0.323119 -0.802898 -0.500947 + 1.087 2.44716 -0.387179 0.2938 -0.87552 -0.383597 + 0.964875 2.1885 -0.493562 0.910786 -0.0428506 -0.410649 + 0.961205 2.32061 -0.501179 0.840011 -0.0187463 -0.542245 + 0.943474 2.41256 -0.535247 0.749377 -0.0817093 -0.657083 + 0.960257 2.50357 -0.553484 0.479821 -0.380069 -0.790772 + 1.02021 2.51347 -0.526628 -0.0167753 -0.797881 -0.602581 + 0.963816 2.07556 -0.479939 0.928115 -0.193392 -0.318122 + 0.940043 2.06386 -0.530873 0.954931 -0.151602 -0.255193 + 0.939814 2.13853 -0.546399 0.95328 -0.025994 -0.300968 + 0.936145 2.27055 -0.554076 0.878685 0.0654387 -0.472895 + 0.948408 2.01676 -0.468093 0.903603 -0.298642 -0.307108 + 0.924635 2.00506 -0.519026 0.394429 -0.91787 0.0440384 + 0.927308 2.01413 -0.587145 0.903983 -0.407302 -0.130075 + 0.927079 2.0888 -0.602681 0.977534 0.0101431 -0.210532 + 0.917013 2.20864 -0.606034 0.905177 0.136502 -0.40252 + 0.879951 2.30643 -0.635612 0.803202 0.237296 -0.546404 + 0.899083 2.36834 -0.583653 0.759423 0.123513 -0.638765 + 0.915514 2.00015 -0.555323 0.67694 -0.732603 -0.0710247 + 0.918187 2.00922 -0.623443 0.99943 -0.0337012 -0.00200876 + 0.92031 2.03058 -0.651237 0.999368 0.0300102 0.0190617 + 0.910244 2.15041 -0.65459 0.937828 0.171801 -0.301602 + 0.867467 2.24817 -0.685917 0.809552 0.305848 -0.501082 + 0.802804 2.38658 -0.687645 0.702115 0.288865 -0.650839 + 0.843523 2.4329 -0.634069 0.684831 0.18255 -0.705465 + 0.927469 1.96604 -0.682646 0.997563 0.0666929 -0.0205148 + 0.910018 2.0829 -0.703454 0.939819 0.193352 -0.281702 + 0.867241 2.18075 -0.73473 0.857674 0.340548 -0.385255 + 0.790321 2.32833 -0.73795 0.788343 0.389661 -0.476108 + 0.724965 2.45691 -0.737052 0.73263 0.406756 -0.545712 + 0.925346 1.94468 -0.654843 0.995348 0.00755878 0.0960458 + 0.928663 1.90521 -0.720078 0.978418 -0.199941 0.0521718 + 0.911212 2.02207 -0.740895 0.965652 0.195 -0.171732 + 0.87809 2.11465 -0.780856 0.893804 0.336039 -0.296971 + 0.797996 2.26779 -0.788689 0.827154 0.412986 -0.38113 + 0.915514 2.00015 -0.555323 0.995032 0.0858065 0.050475 + 0.920946 1.88997 -0.719496 0.859532 -0.424604 0.284458 + 0.914712 1.86018 -0.745692 0.941118 -0.259361 0.216859 + 0.922179 1.95121 -0.784367 0.988399 0.142361 -0.0529256 + 0.889057 2.0438 -0.824337 0.91589 0.335957 -0.219723 + 0.808844 2.2017 -0.834823 0.8605 0.426274 -0.278981 + 0.742346 2.33211 -0.841297 0.871273 0.430974 -0.234829 + 0.906995 1.84494 -0.745102 0.843147 -0.274478 0.462347 + 0.919515 1.81725 -0.779344 0.959868 0.0716058 0.271157 + 0.926982 1.90829 -0.818027 0.993211 0.11242 0.0298957 + 0.908131 1.97388 -0.863228 0.929556 0.294501 -0.221798 + 0.834284 2.13524 -0.87711 0.889457 0.411568 -0.198689 + 0.919099 1.77531 -0.757695 0.906247 0.289663 0.307916 + 0.939316 1.83324 -0.851034 0.993216 0.116079 0.00686109 + 0.920465 1.89883 -0.896237 0.959648 0.2734 -0.0657916 + 0.853357 2.06532 -0.916001 0.910547 0.388286 -0.14191 + 0.794945 2.19464 -0.931195 0.904049 0.418535 -0.0867431 + 0.769505 2.2611 -0.8889 0.896928 0.42444 -0.123978 + 0.9389 1.79129 -0.829378 0.967886 0.120559 0.220597 + 0.927778 1.73612 -0.733014 0.859051 0.395155 0.325397 + 0.825763 2.12504 -0.97444 0.914092 0.405114 -0.017842 + 0.782328 2.22055 -0.986063 0.929348 0.23474 0.284974 + 0.750241 2.29266 -0.940374 0.941732 0.232421 0.243149 + 0.723081 2.36367 -0.89277 0.939013 0.244247 0.242068 + 0.776281 2.32164 -0.982164 0.597743 -0.176709 0.78197 + 0.744194 2.39376 -0.936474 0.768441 -0.113274 0.629815 + 0.723281 2.4607 -0.894831 0.728022 -0.132818 0.672565 + 0.683658 2.44041 -0.844285 0.960032 0.245488 0.134442 + 0.753678 2.58589 -0.879656 0.487133 -0.273232 0.829485 + 0.732765 2.65292 -0.837963 0.984934 -0.161452 0.0619613 + 0.762104 2.73531 -0.789264 0.728586 -0.471099 0.49722 + 0.683857 2.53744 -0.846346 0.808967 -0.215405 0.546967 + 0.825749 2.68506 -0.875424 0.371184 -0.287287 0.882999 + 0.813222 2.77682 -0.837363 0.615377 -0.42938 0.661018 + 0.842561 2.85913 -0.788723 0.748743 -0.554919 0.362558 + 0.87879 2.93189 -0.743953 0.694823 -0.718947 0.0183238 + 0.761325 2.80318 -0.738623 0.889461 -0.424716 -0.168745 + 0.946305 2.78767 -0.892355 0.491148 -0.233846 0.8391 + 0.917374 2.89238 -0.852317 0.596918 -0.454373 0.661236 + 0.953604 2.96515 -0.807556 0.55331 -0.751557 0.359179 + 1.05152 2.81816 -0.962764 0.617008 -0.165531 0.76935 + 1.02259 2.92278 -0.922776 0.605181 -0.394181 0.691648 + 1.0671 2.99456 -0.889893 0.509886 -0.741533 0.436055 + 1.02738 3.01237 -0.781739 0.288641 -0.957141 -0.0238343 + 1.14171 2.95065 -1.01444 0.594889 -0.414362 0.688775 + 1.18623 3.02234 -0.981609 0.400739 -0.804318 0.438725 + 1.14088 3.04178 -0.864075 0.278975 -0.957474 0.0736036 + 1.11456 3.01479 -0.772534 -0.128487 -0.875975 -0.464928 + 0.953552 2.97745 -0.695252 0.352744 -0.709932 -0.609564 + 1.27766 2.83913 -1.15248 0.595693 -0.258769 0.760387 + 1.26369 2.93221 -1.11991 0.538965 -0.36915 0.757129 + 1.33436 3.02223 -1.09923 0.374899 -0.757695 0.53418 + 1.30841 3.06147 -0.932784 0.199208 -0.97344 0.112829 + 1.49484 2.94614 -1.23203 0.431399 -0.450109 0.781855 + 1.60459 3.09642 -1.22012 0.46498 -0.637982 0.613818 + 1.45654 3.06128 -1.05046 0.380886 -0.87477 0.299507 + 1.65571 2.9089 -1.34153 0.402663 -0.434872 0.805449 + 1.76546 3.0591 -1.32967 0.273189 -0.5078 0.817011 + 1.69808 3.18616 -1.16996 0.451621 -0.749236 0.484443 + 1.55002 3.15102 -1.0003 0.545271 -0.778457 0.310942 + 1.61261 2.75404 -1.41731 0.335411 -0.520052 0.785522 + 1.8538 2.85272 -1.45663 -0.00908349 -0.450488 0.892736 + 1.9202 3.02836 -1.35684 -0.141619 -0.448079 0.882706 + 1.99461 3.17363 -1.27045 -0.0990468 -0.535452 0.838738 + 1.83988 3.20445 -1.24323 0.20631 -0.689934 0.69385 + 1.6553 2.55664 -1.57659 0.200426 -0.611083 0.765772 + 1.7895 2.54952 -1.59947 -0.0247822 -0.543034 0.839345 + 1.81071 2.69787 -1.53241 0.0930443 -0.437005 0.894634 + 1.98412 2.60123 -1.53762 -0.416579 -0.37579 0.827794 + 2.0451 2.73408 -1.42993 -0.499449 -0.334107 0.799327 + 1.65389 2.43073 -1.67692 0.0984026 -0.720387 0.686557 + 1.78809 2.42361 -1.69979 -0.0579976 -0.613869 0.787274 + 1.91434 2.40472 -1.67626 -0.369532 -0.597193 0.711904 + 1.96291 2.45279 -1.60472 -0.393898 -0.47166 0.788911 + 1.62473 2.36295 -1.77831 0.0484259 -0.900565 0.432015 + 1.79798 2.36518 -1.74398 -0.129398 -0.833912 0.536514 + 1.92422 2.34637 -1.7204 -0.339189 -0.744819 0.574626 + 2.04766 2.31797 -1.64221 -0.368673 -0.738629 0.564365 + 2.09623 2.36604 -1.57067 -0.602334 -0.510557 0.613617 + 1.65265 2.34347 -1.83677 0.130695 -0.990335 0.0464219 + 1.82591 2.34578 -1.80238 -0.0669262 -0.994633 -0.0789024 + 1.95638 2.32169 -1.74666 -0.248998 -0.968228 -0.0231163 + 2.07981 2.29329 -1.66846 -0.462743 -0.781348 0.418765 + 1.50851 2.3155 -1.86953 0.405143 -0.898496 0.169011 + 1.73092 2.37115 -1.88572 0.13724 -0.857311 -0.496168 + 1.86741 2.36285 -1.84754 0.0661882 -0.867166 -0.493601 + 1.99788 2.33885 -1.79177 -0.0445374 -0.841804 -0.537942 + 2.0843 2.27043 -1.71266 -0.227093 -0.959056 -0.169234 + 1.58678 2.34309 -1.91852 0.29018 -0.803058 -0.520474 + 1.62731 2.40409 -1.94996 0.152462 -0.552871 -0.8192 + 1.781 2.40746 -1.9224 0.155324 -0.70291 -0.694113 + 1.91748 2.39915 -1.88422 0.193242 -0.633388 -0.749318 + 2.02626 2.35974 -1.81995 0.190851 -0.658213 -0.728239 + 1.42789 2.30996 -1.94454 0.365639 -0.567879 -0.737442 + 1.46842 2.37095 -1.97597 0.247474 -0.328742 -0.911419 + 1.49287 2.45738 -1.97767 0.159663 -0.138554 -0.9774 + 1.66729 2.45157 -1.98061 0.0760049 -0.35324 -0.93244 + 1.82098 2.45494 -1.95305 0.24581 -0.39973 -0.883059 + 1.33128 2.23969 -1.97442 0.638914 -0.433309 -0.635635 + 1.33576 2.3177 -2.00015 0.510398 -0.249068 -0.823079 + 1.36021 2.40413 -2.00185 0.223148 -0.0276724 -0.974392 + 1.53882 2.55361 -1.98375 0.0424011 -0.0418811 -0.998222 + 1.71324 2.5478 -1.98668 0.104952 -0.049717 -0.993234 + 1.25368 2.22285 -2.03966 0.497939 -0.106475 -0.860651 + 1.23734 2.32035 -2.03313 0.301296 0.0518492 -0.95212 + 1.25312 2.43435 -2.02718 0.262671 0.0598724 -0.963026 + 1.37599 2.51822 -1.99585 0.20468 -0.053114 -0.977387 + 1.59413 2.68402 -1.98483 0.0373841 0.0674627 -0.997021 + 1.19226 2.17559 -2.0672 0.601184 0.120441 -0.789982 + 1.17591 2.27308 -2.06065 0.473602 0.0994598 -0.875105 + 1.14108 2.34184 -2.07636 0.518574 0.0935959 -0.849894 + 1.247 2.56125 -2.01139 0.190673 0.0908362 -0.977442 + 1.4313 2.64864 -1.99694 0.082035 0.0206508 -0.996415 + 1.13496 2.46875 -2.06056 0.43331 0.14307 -0.889816 + 1.24444 2.67947 -2.00494 0.0962112 0.107172 -0.989574 + 1.42874 2.76685 -1.99049 0.0697176 0.0429018 -0.996644 + 1.63719 2.8068 -1.96728 0.0934946 0.133542 -0.986623 + 1.75757 2.67228 -1.98008 0.129854 0.0505806 -0.990242 + 1.03319 2.31833 -2.16724 0.60999 0.191388 -0.76895 + 0.996497 2.4102 -2.17036 0.660312 0.207757 -0.721682 + 1.09827 2.56071 -2.06364 0.416426 0.204381 -0.885899 + 0.944732 2.3707 -2.24494 0.850122 0.222017 -0.477494 + 0.986048 2.65546 -2.10375 0.65528 0.197438 -0.729127 + 1.00064 2.76627 -2.06269 0.641548 0.199214 -0.740763 + 1.11286 2.67152 -2.02258 0.301432 0.261851 -0.916827 + 0.956106 2.22434 -2.34064 0.886879 0.336654 -0.316401 + 0.891187 2.40223 -2.36215 0.887693 0.261349 -0.379075 + 0.934283 2.61586 -2.17837 0.808235 0.184166 -0.55932 + 0.975073 2.89702 -2.06695 0.80162 0.0435633 -0.596244 + 0.979776 2.03034 -2.56122 0.892278 0.383864 -0.237672 + 0.902561 2.25588 -2.45786 0.942154 0.269055 -0.199891 + 1.01974 1.93892 -2.55027 0.927369 0.298454 -0.225638 + 0.99941 1.89818 -2.6767 0.931517 0.290391 -0.218971 + 0.980083 1.97465 -2.65517 0.926274 0.326345 -0.188453 + 0.902867 2.20019 -2.5518 0.867913 0.40967 -0.280888 + 0.927778 1.73612 -0.733014 0.982974 0.0857146 0.162528 + 0.509794 2.09676 -0.93526 -0.995136 -0.0926188 0.0335534 + 0.536853 1.93903 -0.89247 -0.976427 -0.130032 0.172286 + 0.557887 1.87741 -0.816744 -0.982702 -0.142523 0.118253 + 0.544984 1.96833 -0.804808 -0.982382 -0.149969 0.111508 + 0.546724 1.84212 -0.915617 -0.973415 -0.176739 0.145692 + 0.567759 1.7805 -0.83989 -0.981761 -0.131877 0.136946 + 0.572445 1.81332 -0.755521 -0.977391 -0.160809 0.137288 + 0.534472 1.87048 -0.966136 -0.95337 -0.223907 0.202362 + 0.565725 1.7357 -0.938079 -0.991994 -0.100695 0.0762124 + 0.584067 1.72863 -0.796446 -0.971245 -0.148662 0.185966 + 0.522692 1.81068 -1.02855 -0.920148 -0.237118 0.311613 + 0.553473 1.76406 -0.988607 -0.948559 -0.222105 0.225623 + 0.52323 1.74945 -1.08691 -0.955974 -0.247696 0.157356 + 0.554011 1.70283 -1.04696 -0.943987 -0.18619 0.272435 + 0.532253 1.62568 -1.14653 -0.992083 -0.125579 0.0011034 + 0.542243 1.62171 -1.22585 -0.779024 -0.341375 -0.525913 + 0.50379 1.84717 -1.33935 0.121064 0.0314344 -0.992147 + 0.516746 1.9941 -1.29365 0.16402 -0.00232964 -0.986454 + 0.531356 2.07762 -1.31671 -0.202793 -0.227498 -0.952428 + 0.4273 1.85751 -1.34046 0.027498 -0.123479 -0.991966 + 0.427977 1.80321 -1.32542 -0.102736 -0.26681 -0.958258 + 0.307145 1.88639 -1.30329 -0.553259 -0.732472 -0.396724 + 0.590096 1.7375 -0.728603 -0.843983 -0.360656 0.397015 + 0.698828 2.11859 0.213736 0.561962 -0.240564 0.791408 + 0.813747 2.21001 0.167185 0.653596 -0.725447 0.215729 + 0.695469 2.2415 0.283044 0.290899 -0.953211 0.0822541 + 0.800807 2.16729 0.143582 0.607242 -0.146729 0.780851 + 0.833698 2.22428 -0.017537 0.954621 -0.287115 -0.0791371 + 0.848062 2.25593 0.053241 0.880113 -0.473604 0.0331692 + 0.820451 2.25574 -0.240823 0.967446 -0.236273 -0.0906826 + 0.779985 2.29664 -0.306655 0.956183 -0.287545 -0.0550654 + 0.776758 2.28597 -0.306972 0.968082 -0.19913 -0.152197 + 0.793378 2.25035 -0.483283 0.94545 -0.290324 0.147773 + 0.796669 2.22433 -0.213417 0.947011 -0.135195 -0.291364 + 0.698168 2.24505 -0.487516 0.871803 -0.482344 -0.0854645 + 0.66343 2.1034 -0.771961 0.850608 -0.481138 0.212067 + 0.690579 2.04601 -0.869965 0.530727 -0.599501 0.599105 + 0.775351 1.95469 -0.938787 -0.535531 -0.562834 0.629622 + 0.652101 2.00956 -0.770023 0.994828 -0.0958681 0.0335539 + 0.65719 1.99449 -0.872528 0.917711 -0.294289 0.266834 + 0.721707 1.96762 -0.977374 0.0359111 -0.684208 0.728403 + 0.763463 1.84218 -1.03071 -0.548072 -0.408358 0.729973 + 0.854714 1.6674 -0.986595 -0.874925 -0.476245 0.0877331 + 0.656367 1.90801 -0.744739 0.998217 -0.05561 0.0216843 + 0.661456 1.89294 -0.847236 0.998215 -0.0245201 0.0544646 + 0.688318 1.91609 -0.979938 0.791239 -0.269277 0.549027 + 0.723897 1.85084 -1.04911 0.281007 -0.228072 0.932211 + 0.641212 1.80309 -0.633011 0.975034 -0.211814 -0.0666538 + 0.588889 1.81998 -0.669658 0.82384 -0.0340243 0.5658 + 0.901206 1.61571 -1.00085 -0.693109 -0.685132 0.224039 + 0.837016 1.7382 -1.03661 -0.749239 -0.647207 0.140586 + 0.901206 1.61571 -1.00085 -0.715932 -0.513342 -0.473204 + 0.757834 2.14915 0.186202 -0.425153 0.00538387 -0.905105 + -1.17764 2.27532 0.212466 0.843377 -0.296139 -0.44835 + -1.31347 2.12724 0.109754 0.793546 -0.285467 -0.537395 + -1.33453 2.06406 0.095774 0.606277 -0.214905 -0.765666 + -1.30196 1.97625 0.143271 0.467733 -0.51259 -0.720054 + -1.39275 1.95991 0.121567 0.251253 -0.663219 -0.704991 + -1.21767 2.18061 0.184507 0.765395 -0.119622 -0.632346 + -1.31516 1.94747 0.173919 -0.0441729 -0.69767 -0.715056 + -1.18685 2.17753 0.247647 0.923516 -0.216905 -0.316341 + -1.19064 2.1133 0.362099 0.999487 -0.00202297 0.0319622 + -1.18731 2.03749 0.39659 0.788496 0.538188 0.297704 + -1.02369 1.81801 0.51875 0.769241 0.630648 0.102723 + -0.748335 1.58493 -1.27294 -0.139546 0.986449 -0.086292 + -0.748272 1.58103 -1.31759 -0.185898 0.978822 -0.0857284 + -0.711105 1.59853 -1.28851 -0.687442 0.724761 -0.0463128 + -0.711042 1.59463 -1.33315 -0.839139 0.541748 -0.0485361 + -0.699505 1.64767 -1.36081 -0.954206 0.293462 0.0580593 + -0.697709 1.64323 -1.30433 -0.948507 0.311161 0.059277 + -0.686108 1.69237 -1.37664 -0.928851 0.353046 0.112224 + -0.692772 1.67708 -1.37616 -0.851335 0.382325 0.359245 + -0.636581 1.83901 -1.44743 -0.928226 0.359568 0.0954311 + -0.220308 2.03334 -3.02461 -0.0801513 -0.938798 -0.335013 + -0.261303 1.99187 -2.98179 -0.187502 0.265591 -0.945677 + -0.284575 2.00426 -2.96885 -0.568285 -0.248324 -0.784466 + -0.199306 2.0285 -3.02623 0.045883 -0.866926 -0.49632 + -0.240301 1.98703 -2.9834 0.0570533 -0.00749639 -0.998343 + -0.263765 1.97714 -2.99568 0.119604 0.938579 -0.323671 + -0.28691 1.98164 -2.99787 0.221935 0.934964 -0.276743 + -0.284575 2.00426 -2.96885 0.0737328 0.783795 -0.616627 + -0.310183 1.99395 -2.98499 0.176062 0.959149 -0.221438 + -0.173526 2.0323 -3.02582 -0.133698 -0.964241 -0.228831 + -0.201346 1.98642 -2.97515 0.0163988 0.130809 -0.991272 + -0.22481 1.97654 -2.98743 0.0130636 0.940518 -0.339493 + -0.231446 2.02897 -3.02385 0.407855 -0.903828 -0.129423 + -0.306462 1.97626 -2.97875 0.483915 -0.866438 0.122931 + -0.284575 2.00426 -2.96885 0.366653 -0.928229 -0.0628972 + -0.295713 1.99981 -2.96814 0.652643 -0.62387 0.429933 + -0.320303 1.98989 -2.94595 0.796372 0.0261013 0.604244 + -0.331051 1.96634 -2.95656 0.0622725 -0.929419 0.363734 + -0.350253 1.97577 -2.9623 -0.583802 -0.743936 0.32517 + -0.39796 2.02379 -2.97147 -0.488138 -0.872068 0.0348973 + -0.328944 1.99242 -2.93294 0.649816 -0.538453 0.536477 + -0.328944 1.99242 -2.93294 -0.479139 -0.567698 0.669435 + -0.348145 2.00185 -2.93868 -0.745905 -0.657938 0.103655 + -0.356668 2.00434 -2.92579 -0.528691 -0.481318 -0.699156 + -0.384464 1.98607 -2.91054 -0.263055 -0.0453457 -0.963715 + -0.406745 1.97654 -2.90444 0.132234 -0.729845 -0.670702 + -0.343375 1.99505 -2.9427 -0.310433 0.919121 -0.242588 + -0.371171 1.97686 -2.92739 -0.5188 0.766889 -0.377794 + -0.397431 1.96752 -2.926 -0.320649 0.923092 -0.212335 + -0.406745 1.97654 -2.90444 -0.373183 0.765303 -0.524448 + -0.423478 1.96208 -2.9154 -0.262391 0.919116 -0.293898 + -0.44583 1.96623 -2.90117 0.0398298 0.040284 -0.998394 + -0.3657 1.98304 -2.9843 -0.421775 0.906457 0.0210142 + -0.391961 1.97369 -2.9829 -0.274839 0.958352 0.0776163 + -0.436121 1.96423 -2.9789 -0.185733 0.979741 0.0749052 + -0.462167 1.9588 -2.9683 -0.107238 0.990077 0.0908189 + -0.462562 1.95177 -2.91213 -0.169802 0.837056 -0.520101 + -0.346889 1.99167 -3.01484 -0.431965 0.897309 -0.0907949 + -0.329296 2.00112 -2.94802 0.155097 0.954334 0.255325 + -0.33281 1.99774 -3.02016 -0.15277 0.971756 -0.179863 + -0.322338 1.99302 -3.04417 0.20789 0.978012 -0.016584 + -0.328944 1.99242 -2.93294 0.0265057 0.974311 0.223643 + -0.348145 2.00185 -2.93868 0.494962 0.672361 -0.550403 + -0.477678 1.9723 -2.91668 0.0749566 -0.666881 -0.741385 + -0.504744 1.95583 -2.89736 -0.102313 -0.786442 -0.609132 + -0.484424 1.94554 -2.89294 -0.26841 -0.643287 -0.717034 + -0.52042 1.93869 -2.87167 -0.247113 -0.751105 -0.61219 + -0.54074 1.94898 -2.8761 -0.210205 -0.847566 -0.487284 + -0.573469 1.94957 -2.85811 -0.305937 -0.909683 -0.280856 + -0.614905 1.97986 -2.91918 -0.288926 -0.901819 -0.321317 + -0.534839 1.92882 -2.85178 -0.180211 -0.946202 -0.26875 + -0.558772 1.93836 -2.83091 -0.386603 -0.913903 -0.12377 + -0.642788 1.97122 -2.85022 -0.298621 -0.904674 -0.303957 + -0.532448 1.92559 -2.83099 -0.948828 -0.290266 -0.124383 + -0.556381 1.93513 -2.81012 -0.433795 -0.829294 -0.352268 + -0.628091 1.96002 -2.82302 -0.0925388 -0.917999 -0.385634 + -0.175566 1.99014 -2.97479 0.120543 -0.767637 -0.629447 + -0.136983 2.00247 -2.98235 -0.245385 -0.883166 -0.399754 + -0.128457 1.99899 -2.99252 -0.691513 -0.559645 0.456735 + -0.165001 2.02874 -3.03604 -0.37203 -0.914019 -0.16175 + -0.141836 1.9697 -3.01698 -0.780814 -0.624578 0.0152173 + -0.122047 1.95724 -3.0106 0.074926 -0.997181 0.00405767 + -0.108668 1.98654 -2.98615 -0.502205 -0.407388 0.762774 + -0.156423 2.02915 -3.04175 -0.116466 -0.596074 -0.794438 + -0.133259 1.97002 -3.02274 -0.0161232 -0.519196 -0.854503 + -0.082769 1.99305 -3.00163 0.425325 -0.744893 -0.514035 + -0.108668 1.98654 -2.98615 0.495081 -0.678801 0.542331 + -0.175985 2.10943 -3.08141 -0.278335 -0.390708 -0.877426 + -0.150816 2.0951 -3.08878 -0.523344 -0.335971 -0.783093 + -0.132025 2.07441 -3.09614 -0.524532 -0.425441 -0.737473 + -0.123316 2.05662 -3.08433 -0.260741 -0.778195 -0.571338 + -0.133336 2.04513 -3.05403 0.18847 -0.879113 -0.437768 + -0.093982 2.00583 -3.01377 0.0960676 -0.528986 -0.843176 + -0.185473 2.19701 -3.11309 -0.204291 -0.571278 -0.794925 + -0.140105 2.18376 -3.12234 -0.396297 -0.501788 -0.768868 + -0.114936 2.16933 -3.12975 -0.540457 -0.385614 -0.747802 + -0.083959 2.13644 -3.14199 -0.599683 -0.300588 -0.741639 + -0.065169 2.11575 -3.14936 -0.595133 -0.265103 -0.758641 + -0.217725 2.19464 -3.10718 0.00753708 -0.589024 -0.80808 + -0.182079 2.23311 -3.15402 -0.14078 -0.881711 -0.450296 + -0.136711 2.21986 -3.16327 -0.38733 -0.796874 -0.463646 + -0.238982 2.22262 -3.14485 0.191657 -0.861874 -0.469512 + -0.191271 2.24886 -3.2109 -0.0616488 -0.957934 -0.280289 + -0.129043 2.23586 -3.21559 -0.216743 -0.924201 -0.314443 + -0.248174 2.23837 -3.20173 0.268604 -0.92598 -0.265356 + -0.318018 2.1931 -3.18552 0.556114 -0.806754 -0.199714 + -0.350353 2.16381 -3.16919 0.590012 -0.775904 -0.223291 + -0.035427 2.13561 -3.18694 -0.682214 -0.458894 -0.56921 + -0.039535 2.08549 -3.15914 -0.379286 -0.54305 -0.749159 + -0.030826 2.06779 -3.14729 -0.13509 -0.749882 -0.647632 + -0.030826 2.04626 -3.10218 -0.0590464 -0.87446 -0.48149 + 0.039576 2.08557 -3.15907 0.379912 -0.542272 -0.749405 + 0.030828 2.06779 -3.14728 0.135537 -0.748663 -0.648948 + 0.030828 2.04626 -3.10218 0.081593 -0.911789 -0.402473 + 0.132066 2.0744 -3.09612 0.526476 -0.445916 -0.723866 + 0.123318 2.05662 -3.08433 0.411402 -0.759432 -0.503996 + 0.133336 2.04513 -3.05403 -0.0332632 -0.814664 -0.578979 + 0.070894 2.02181 -3.02604 0.351005 -0.486734 -0.799928 + 0.021963 2.02879 -3.08313 0.527441 -0.660561 -0.534289 + 0.150823 2.095 -3.08881 0.524743 -0.335332 -0.78243 + 0.175985 2.10953 -3.08138 0.278799 -0.389795 -0.877685 + 0.208237 2.10715 -3.07546 -0.0254115 -0.317133 -0.94804 + 0.114943 2.16932 -3.12973 0.540321 -0.3855 -0.747959 + 0.140105 2.18376 -3.12235 0.396281 -0.501989 -0.768744 + 0.185474 2.19702 -3.11311 0.204268 -0.571453 -0.794805 + 0.217725 2.19464 -3.10718 -0.00740461 -0.58899 -0.808106 + 0.088709 2.19606 -3.17486 0.617181 -0.628128 -0.47386 + 0.136709 2.21986 -3.16327 0.403162 -0.780595 -0.477631 + 0.182078 2.23311 -3.15402 0.126937 -0.876067 -0.465181 + 0.238985 2.22262 -3.14485 -0.222732 -0.863119 -0.453228 + 0.268534 2.17222 -3.09796 -0.236088 -0.484316 -0.842437 + 0.129042 2.23586 -3.21559 0.442592 -0.837313 -0.320967 + 0.080404 2.00707 -3.02371 0.558278 0.234857 -0.795718 + -0.129043 2.23586 -3.21559 -0.481621 -0.815823 -0.320117 + -0.080403 2.00708 -3.02372 -0.318263 -0.784542 -0.532167 + -0.596777 1.8903 -2.71226 0.637413 0.71044 0.298295 + -0.568869 1.86808 -2.71897 0.520562 0.793228 0.315919 + -0.554396 1.87296 -2.73803 -0.755406 0.513444 -0.407108 + -0.548043 1.89701 -2.80889 -0.412445 0.871443 0.265473 + -0.540993 1.91304 -2.85124 0.186979 0.908097 0.374698 + -0.539497 1.90957 -2.78863 -0.925256 -0.210189 -0.315789 + -0.540993 1.91304 -2.85124 -0.837668 0.545976 0.0149386 + -0.52297 1.93907 -2.90713 -0.555133 0.830707 0.0418757 + -0.575518 1.88522 -2.73566 -0.394493 -0.738218 -0.547184 + -0.56062 1.92182 -2.78625 -0.348486 -0.763191 -0.544148 + -0.568869 1.86808 -2.71897 -0.485676 -0.739604 -0.465945 + -0.589813 1.88044 -2.71658 -0.456706 -0.852813 0.253238 + -0.596777 1.8903 -2.71226 -0.205753 -0.510838 0.834691 + -0.61772 1.90266 -2.70986 -0.369921 -0.770768 -0.518724 + -0.654387 1.90403 -2.71624 0.15042 -0.886631 -0.437332 + -0.596777 1.8903 -2.71226 -0.363154 -0.457952 -0.811418 + 0.700788 1.60693 -3.09201 -0.935445 0.353103 0.0161381 + 0.700286 1.60496 -3.09226 -0.953977 0.189685 0.232263 + 0.713785 1.62766 -3.06485 -0.678695 0.713623 -0.173537 + 0.714287 1.62963 -3.06459 -0.919041 0.367061 0.143628 + 0.719965 1.63784 -3.07821 -0.830357 0.549801 -0.0906978 + 0.721527 1.63887 -3.08342 -0.817532 0.567644 -0.097067 + 0.702351 1.60795 -3.09721 -0.830406 0.556598 -0.0249845 + 0.700286 1.60496 -3.09226 -0.895389 0.430489 -0.113827 + 0.698218 1.60237 -3.10074 -0.935982 0.331597 -0.118238 + 0.735808 1.65866 -3.01872 -0.666743 0.734097 -0.128668 + 0.740829 1.67833 -3.01615 -0.863698 0.403629 0.301843 + 0.746507 1.68655 -3.02977 -0.771492 0.635909 -0.0205227 + 0.723359 1.65031 -3.03058 0.138716 0.819181 -0.556508 + 0.726764 1.6649 -3.00715 -0.0995092 0.980206 -0.171155 + 0.762929 1.68282 -2.988 -0.638984 0.39098 0.662445 + 0.76795 1.70249 -2.98543 -0.594273 0.5275 0.607111 + 0.701336 1.61931 -3.07671 0.328939 0.679388 -0.655921 + 0.683112 1.63959 -3.07115 -0.224761 0.653228 -0.723032 + 0.686517 1.65418 -3.04772 -0.11062 0.929914 -0.350747 + 0.710988 1.66406 -2.99897 -0.186712 0.974499 0.124456 + 0.744332 1.65545 -2.97188 -0.17084 0.85622 0.487546 + 0.700286 1.60496 -3.09226 0.159707 0.720202 -0.675132 + 0.697173 1.59291 -3.09688 -0.813514 0.116336 -0.56979 + 0.695999 1.5703 -3.11698 -0.986078 0.14171 -0.0869993 + 0.694954 1.56084 -3.11312 -0.978094 0.0883813 -0.188468 + 0.689663 1.57411 -3.09402 -0.741581 0.095203 -0.664074 + 0.688751 1.58509 -3.09346 -0.48378 0.0783975 -0.871671 + 0.696261 1.60389 -3.09632 -0.180911 0.450164 -0.874428 + 0.700286 1.60496 -3.09226 0.546028 0.497951 -0.67372 + 0.710325 1.62074 -3.11096 -0.879374 0.475627 -0.0219122 + 0.699405 1.57794 -3.14714 -0.888559 0.212688 -0.406482 + 0.694389 1.50268 -3.15615 -0.90074 0.0799559 -0.426936 + 0.68896 1.48336 -3.10853 -0.982827 0.0246061 -0.182883 + 0.683668 1.49664 -3.08943 -0.944176 -0.0217137 -0.328724 + 0.714458 1.62632 -3.10743 -0.825696 0.563977 0.0124751 + 0.755063 1.6842 -3.10586 -0.76741 0.630373 -0.117099 + 0.713731 1.62839 -3.14112 -0.831432 0.433017 -0.348163 + 0.724048 1.56911 -3.1729 -0.410332 0.178925 -0.894211 + 0.762133 1.69675 -3.08184 -0.736743 0.668983 -0.0983438 + 0.773682 1.70236 -3.1145 -0.399395 0.788765 -0.467262 + 0.73235 1.64655 -3.14976 -0.520148 0.581192 -0.625829 + 0.77521 1.71429 -3.01999 -0.440014 0.893548 0.0892177 + 0.790836 1.72448 -3.07206 -0.25334 0.960429 -0.115734 + 0.80354 1.71436 -3.10247 0.135789 0.848434 -0.511588 + 0.805723 1.6918 -3.12458 0.128472 0.662692 -0.73779 + 0.775865 1.6798 -3.13661 -0.0676384 0.598624 -0.798169 + 0.784145 1.71184 -2.99598 -0.230467 0.940921 0.248098 + 0.818774 1.72266 -3.0542 0.157211 0.987058 -0.0316526 + 0.831478 1.71254 -3.0846 0.385266 0.855034 -0.347111 + 0.810379 1.70534 -2.96548 -0.260932 0.717954 0.645334 + 0.826574 1.71469 -2.97603 0.12208 0.899702 0.419085 + 0.827708 1.72022 -3.03019 0.140143 0.986952 0.0792875 + 0.8513 1.71244 -3.03504 0.561292 0.827393 -0.0192898 + 0.76146 1.66694 -2.97721 -0.365876 0.625914 0.688743 + 0.80891 1.68947 -2.95469 -0.526387 0.535264 0.660613 + 0.819506 1.67489 -2.93533 -0.0602987 0.583959 0.80954 + 0.850166 1.70692 -2.98088 0.568615 0.745217 0.348323 + 0.767406 1.65093 -2.95128 -0.464066 0.686456 0.559841 + 0.772151 1.65318 -2.94903 -0.503024 0.628014 0.593772 + 0.782747 1.63861 -2.92967 -0.368758 0.557467 0.743806 + 0.750278 1.63944 -2.94596 0.0209299 0.823393 0.567086 + 0.759055 1.63552 -2.94107 -0.235389 0.788655 0.567992 + 0.7638 1.63777 -2.93882 -0.437651 0.643943 0.627535 + 0.780306 1.6323 -2.92608 -0.288204 0.647061 0.705868 + 0.815706 1.62228 -2.90612 0.124878 0.479006 0.868883 + 0.728557 1.65461 -2.9637 -0.00793514 0.907688 0.419572 + 0.750129 1.63638 -2.94029 0.18042 0.860595 0.476262 + 0.758906 1.63246 -2.93541 0.0561691 0.788152 0.612912 + 0.76136 1.63146 -2.93523 -0.0293958 0.697708 0.715779 + 0.70868 1.65059 -2.96396 -0.341861 0.822352 0.454827 + 0.742838 1.62485 -2.91521 -0.0152496 0.78271 0.6222 + 0.760134 1.62211 -2.92016 0.272579 0.828643 0.488929 + 0.762588 1.62112 -2.91999 0.0550852 0.817751 0.572931 + 0.795101 1.61183 -2.89945 -0.0469307 0.49094 0.869929 + 0.695763 1.65722 -2.99638 -0.454934 0.8663 0.206297 + 0.678778 1.63089 -2.96438 -0.758219 0.422261 0.496789 + 0.722961 1.62083 -2.91547 -0.40496 0.522384 0.750415 + 0.727908 1.5947 -2.90265 -0.623075 0.124454 0.772197 + 0.752843 1.61059 -2.89508 -0.094553 0.654026 0.75054 + 0.671291 1.64734 -3.04513 -0.759618 0.620622 -0.194444 + 0.665861 1.63752 -2.9968 -0.852983 0.476924 0.212044 + 0.683725 1.60477 -2.95156 -0.787319 0.0556653 0.614028 + 0.666173 1.60744 -3.06324 -0.955854 0.117315 -0.269407 + 0.660742 1.59762 -3.01491 -0.998913 0.0453507 0.0107923 + 0.670611 1.58683 -2.96985 -0.881131 -0.00980823 0.47277 + 0.72847 1.54609 -2.91265 -0.675457 -0.182414 0.714481 + 0.674551 1.60644 -3.08384 -0.623596 0.24512 -0.742324 + 0.67529 1.49763 -3.06883 -0.955341 -0.109941 -0.274294 + 0.675092 1.47307 -3.05471 -0.978055 -0.0556893 -0.200764 + 0.660545 1.57306 -3.00079 -0.991605 -0.0224113 0.127348 + 0.697311 1.61823 -3.08077 0.197968 0.57859 -0.791229 + 0.679223 1.43047 -3.06729 -0.978327 -0.0415076 -0.202863 + 0.665383 1.50919 -3.00677 -0.978842 -0.141584 0.147721 + 0.68851 1.41049 -3.11426 -0.989145 -0.0619066 -0.133268 + 0.686728 1.39615 -3.08333 -0.976048 -0.109724 -0.187857 + 0.677067 1.40267 -3.05111 -0.965029 -0.234309 0.117556 + 0.669514 1.46659 -3.01935 -0.966267 -0.184369 0.179824 + 0.693939 1.4298 -3.16189 -0.896329 -0.00861553 -0.443306 + 0.69819 1.36955 -3.16113 -0.898081 -0.0640788 -0.435136 + 0.694726 1.36325 -3.12214 -0.991672 -0.0822054 -0.0991424 + 0.692944 1.34892 -3.0912 -0.989454 -0.142851 -0.0239792 + 0.684572 1.36835 -3.06714 -0.954512 -0.289552 0.0711758 + 0.716485 1.43006 -3.18433 -0.41442 0.0047709 -0.910073 + 0.720736 1.36981 -3.18358 -0.373408 -0.0469636 -0.926478 + 0.719922 1.28898 -3.17817 -0.383264 -0.0664205 -0.921248 + 0.70197 1.28763 -3.1606 -0.897244 -0.0481392 -0.438902 + 0.698506 1.28133 -3.1216 -0.997817 -0.0432214 -0.0499371 + 0.719033 1.49384 -3.18192 -0.392002 0.0949836 -0.915048 + 0.76129 1.40878 -3.18738 -0.0326972 -0.0248075 -0.999157 + 0.757219 1.36651 -3.18369 -0.0128779 -0.0681832 -0.99759 + 0.756405 1.28568 -3.17829 0.016686 -0.0727226 -0.997213 + 0.763838 1.47256 -3.18497 -0.0105868 0.0574224 -0.998294 + 0.801582 1.39762 -3.18654 0.0371262 -0.0345071 -0.998715 + 0.797511 1.35535 -3.18285 0.0453096 -0.0904423 -0.994871 + 0.788812 1.28247 -3.17667 0.063947 -0.0823329 -0.994551 + 0.750995 1.17563 -3.16969 0.0160812 -0.061235 -0.997994 + 0.769195 1.54989 -3.17987 -0.0249877 0.120279 -0.992426 + 0.813673 1.53427 -3.17938 0.135486 0.108803 -0.984787 + 0.808316 1.45694 -3.18447 0.0694908 0.0581577 -0.995886 + 0.845832 1.38144 -3.18374 0.354266 -0.143398 -0.924085 + 0.833141 1.35149 -3.17915 0.320905 -0.185374 -0.928793 + 0.733622 1.62154 -3.16383 -0.453746 0.321119 -0.831263 + 0.778768 1.60233 -3.1708 0.028152 0.253517 -0.966921 + 0.813206 1.60082 -3.16797 0.137868 0.242546 -0.960294 + 0.857387 1.52845 -3.17019 0.451533 0.117568 -0.884475 + 0.852566 1.44075 -3.18167 0.38889 0.0403665 -0.9204 + 0.777137 1.65479 -3.15069 0.0154395 0.445613 -0.895093 + 0.811574 1.65329 -3.14786 0.0838981 0.451101 -0.88852 + 0.846504 1.64373 -3.14987 0.395785 0.395273 -0.828923 + 0.85692 1.595 -3.15879 0.495367 0.203617 -0.844483 + 0.840653 1.68224 -3.12658 0.376947 0.648321 -0.661506 + 0.863912 1.67388 -3.10907 0.737494 0.536513 -0.41019 + 0.874516 1.63969 -3.12224 0.81587 0.337792 -0.469312 + 0.884932 1.59097 -3.13117 0.835199 0.198623 -0.512827 + 0.886875 1.52234 -3.145 0.822874 0.0787617 -0.562739 + 0.854737 1.70418 -3.06709 0.646513 0.730064 -0.221421 + 0.88195 1.67248 -3.04744 0.888013 0.448523 -0.101287 + 0.892555 1.63829 -3.06061 0.964454 0.25371 -0.0738963 + 0.9003 1.5916 -3.08948 0.971079 0.174759 -0.162678 + 0.902243 1.52298 -3.10331 0.984157 0.0188288 -0.176299 + 0.878514 1.68074 -3.01539 0.886186 0.445666 0.126712 + 0.876869 1.66136 -2.98761 0.895263 0.283128 0.344008 + 0.883256 1.63656 -2.98772 0.932162 0.174993 0.316941 + 0.892188 1.60638 -3.01517 0.978727 0.081796 0.188154 + 0.899933 1.55969 -3.04404 0.986329 -0.0091884 0.164535 + 0.848521 1.68754 -2.95309 0.492205 0.602971 0.627822 + 0.844721 1.63493 -2.92389 0.598312 0.288512 0.747518 + 0.851108 1.61012 -2.92401 0.745631 0.174029 0.643232 + 0.874069 1.58832 -2.95356 0.882402 -0.00570791 0.470462 + 0.883002 1.55814 -2.981 0.923409 -0.11779 0.365297 + 0.833524 1.59783 -2.90054 0.519677 0.0550165 0.85259 + 0.856485 1.57603 -2.93009 0.743148 -0.15405 0.651153 + 0.853575 1.52989 -2.94193 0.746095 -0.207528 0.632672 + 0.874246 1.48103 -2.99973 0.894297 -0.167073 0.415113 + 0.812919 1.58737 -2.89387 0.217734 -0.0105637 0.975951 + 0.810009 1.54124 -2.90571 0.519032 -0.208213 0.829007 + 0.805551 1.45534 -2.91908 0.568426 -0.228602 0.790337 + 0.844819 1.45278 -2.96066 0.768549 -0.257066 0.585874 + 0.876418 1.43272 -3.02103 0.869527 -0.188582 0.456465 + 0.781249 1.53134 -2.89374 0.151456 -0.184957 0.971006 + 0.776791 1.44544 -2.90711 -0.328562 -0.252617 0.910072 + 0.792961 1.41006 -2.92624 0.171971 -0.606728 0.776085 + 0.832229 1.40751 -2.96782 0.673481 -0.419816 0.608422 + 0.777383 1.60064 -2.89336 0.200314 0.424396 0.883042 + 0.775356 1.57809 -2.88406 0.480751 0.039515 0.875966 + 0.75727 1.49267 -2.90546 -0.343978 -0.301939 0.889108 + 0.768564 1.43061 -2.9253 -0.541749 -0.438385 0.717166 + 0.784733 1.39524 -2.94443 -0.0485043 -0.694091 0.718251 + 0.750816 1.58804 -2.88577 -0.300059 0.114674 0.947003 + 0.751378 1.53942 -2.89578 -0.395611 -0.215859 0.892691 + 0.715355 1.52815 -2.93095 -0.702633 -0.207871 0.680512 + 0.728331 1.47624 -2.93836 -0.6625 -0.305273 0.684033 + 0.675449 1.52296 -2.97583 -0.831941 -0.184289 0.523365 + 0.688425 1.47104 -2.98324 -0.771179 -0.302461 0.560179 + 0.739624 1.41418 -2.9582 -0.654186 -0.363178 0.663433 + 0.746833 1.36701 -2.97759 -0.511635 -0.444488 0.735296 + 0.786007 1.36963 -2.96497 0.141565 -0.554925 0.819767 + 0.695978 1.40712 -3.015 -0.773997 -0.350969 0.527019 + 0.703187 1.35996 -3.03439 -0.784807 -0.400852 0.472648 + 0.715481 1.33661 -3.03751 -0.813503 -0.266747 0.516778 + 0.744527 1.32767 -3.00042 -0.587356 -0.254346 0.768323 + 0.783702 1.33029 -2.9878 0.120904 -0.3648 0.923203 + 0.696866 1.34501 -3.07027 -0.914946 -0.298987 0.271072 + 0.70283 1.27277 -3.07349 -0.940969 -0.060861 0.332976 + 0.717646 1.267 -3.04741 -0.837119 -0.0682182 0.54275 + 0.746692 1.25807 -3.01032 -0.555269 -0.103092 0.825256 + 0.698909 1.27668 -3.09442 -0.99453 -0.0551595 0.0887001 + 0.701586 1.16723 -3.09375 -0.993417 -0.0329606 0.109707 + 0.705499 1.16387 -3.07604 -0.935535 -0.0353781 0.351458 + 0.720315 1.1581 -3.04997 -0.833832 -0.0353227 0.550887 + 0.701184 1.17188 -3.12093 -0.998571 -0.0322023 -0.0426532 + 0.705125 1.06853 -3.11732 -0.997987 -0.050053 -0.038954 + 0.705752 1.06448 -3.09411 -0.992409 -0.0495043 0.112581 + 0.709665 1.06112 -3.07641 -0.940536 -0.0444678 0.336771 + 0.703946 1.17691 -3.15202 -0.905141 -0.0426522 -0.422967 + 0.707888 1.07356 -3.14842 -0.924691 -0.0569793 -0.376429 + 0.713241 0.976547 -3.1442 -0.925466 -0.0642167 -0.373347 + 0.710884 0.972315 -3.11638 -0.997643 -0.0566793 -0.0386713 + 0.711511 0.968265 -3.09316 -0.991721 -0.0556331 0.115734 + 0.721898 1.17826 -3.1696 -0.37877 -0.0602308 -0.923529 + 0.72109 1.07123 -3.16464 -0.444997 -0.0453588 -0.894383 + 0.726443 0.974225 -3.16042 -0.580861 -0.0676771 -0.811184 + 0.726527 0.875771 -3.15145 -0.634698 -0.105587 -0.765512 + 0.718143 0.880408 -3.13907 -0.941296 -0.073221 -0.329545 + 0.750186 1.0686 -3.16473 0.00844807 -0.0177461 -0.999807 + 0.745035 0.958311 -3.16628 -0.162641 -0.0515508 -0.985338 + 0.745119 0.859859 -3.15731 -0.234301 -0.1429 -0.961604 + 0.775266 1.06278 -3.16408 0.066902 -0.0214768 -0.997528 + 0.770114 0.952483 -3.16563 0.12031 -0.0438588 -0.991767 + 0.762232 0.852825 -3.15737 0.0680338 -0.151879 -0.986055 + 0.741544 0.769971 -3.13812 -0.229043 -0.313945 -0.9214 + 0.783401 1.17241 -3.16807 0.0703857 -0.0614228 -0.995627 + 0.803682 1.05969 -3.16112 0.403698 -0.0536019 -0.913321 + 0.794329 0.950801 -3.16004 0.448426 -0.070075 -0.891069 + 0.786447 0.851142 -3.15179 0.445215 -0.1548 -0.881941 + 0.811817 1.16932 -3.16512 0.379728 -0.0883243 -0.920872 + 0.821023 1.05585 -3.14529 0.832958 -0.0870153 -0.546451 + 0.81167 0.946961 -3.14421 0.831544 -0.1018 -0.54605 + 0.79914 0.848498 -3.14022 0.814522 -0.168242 -0.555201 + 0.772999 0.76158 -3.13749 0.3191 -0.328354 -0.889021 + 0.824442 1.2786 -3.17296 0.37599 -0.116431 -0.91928 + 0.845429 1.27364 -3.155 0.805996 -0.155493 -0.571132 + 0.832804 1.16437 -3.14715 0.821373 -0.116734 -0.558319 + 0.829853 1.05014 -3.11636 0.987854 -0.100336 -0.118644 + 0.819573 0.942088 -3.11833 0.985848 -0.111342 -0.125325 + 0.859534 1.34392 -3.15667 0.764696 -0.290696 -0.575096 + 0.856502 1.26648 -3.11872 0.976875 -0.167397 -0.133013 + 0.841635 1.15865 -3.11822 0.984171 -0.123086 -0.127505 + 0.82755 1.04513 -3.0913 0.963053 -0.112741 0.244577 + 0.872225 1.37387 -3.16127 0.786749 -0.240202 -0.568621 + 0.870607 1.33676 -3.1204 0.940795 -0.305928 -0.145988 + 0.85376 1.26113 -3.08574 0.959641 -0.168593 0.225091 + 0.838893 1.1533 -3.08524 0.962827 -0.122529 0.240728 + 0.882054 1.43465 -3.15648 0.83209 -0.0378242 -0.553349 + 0.886844 1.37081 -3.11415 0.952646 -0.281034 -0.116129 + 0.883944 1.37025 -3.07144 0.917392 -0.326949 0.226926 + 0.867707 1.3362 -3.07768 0.917191 -0.337814 0.211289 + 0.896673 1.43159 -3.10936 0.982078 -0.104648 -0.156752 + 0.896536 1.41999 -3.07138 0.969828 -0.170033 0.174707 + 0.863826 1.38298 -3.02108 0.785117 -0.292005 0.546191 + 0.850533 1.33146 -3.04056 0.798927 -0.312346 0.513961 + 0.836586 1.25639 -3.04862 0.825092 -0.166957 0.539767 + 0.902105 1.51138 -3.06534 0.985669 -0.0539359 0.159834 + 0.833503 1.38189 -2.98836 0.630331 -0.412928 0.657399 + 0.82021 1.33037 -3.00783 0.585936 -0.318945 0.744952 + 0.812463 1.25423 -3.02293 0.611503 -0.165467 0.773747 + 0.775955 1.25415 -3.0029 0.109863 -0.155232 0.98175 + 0.771958 1.1473 -3.01397 0.127433 -0.105463 0.986224 + 0.801073 1.14736 -3.02995 0.608752 -0.121245 0.784041 + 0.825197 1.14953 -3.05563 0.828094 -0.122487 0.547044 + 0.742695 1.15122 -3.02139 -0.556495 -0.059617 0.82871 + 0.742493 1.04514 -3.02834 -0.503241 -0.0782431 0.860597 + 0.764642 1.03836 -3.02585 0.173733 -0.123124 0.977066 + 0.793758 1.03842 -3.04183 0.603302 -0.134541 0.786082 + 0.813854 1.04135 -3.06169 0.816734 -0.131012 0.561945 + 0.720112 1.05203 -3.05692 -0.845027 -0.0437517 0.532931 + 0.725672 0.955581 -3.05743 -0.855401 -0.0455373 0.515961 + 0.737453 0.933047 -3.04199 -0.535915 -0.0780239 0.840659 + 0.759602 0.926263 -3.03951 0.239594 -0.123193 0.963025 + 0.715225 0.964675 -3.07691 -0.940826 -0.0548141 0.334429 + 0.720464 0.869428 -3.07741 -0.946526 -0.0502731 0.318686 + 0.726842 0.85972 -3.0645 -0.874596 -0.0557324 0.481638 + 0.738623 0.837186 -3.04907 -0.49374 -0.0934459 0.864574 + 0.716751 0.87302 -3.09366 -0.990353 -0.0518002 0.128522 + 0.721533 0.778315 -3.0923 -0.980171 -0.096369 0.173143 + 0.72532 0.775814 -3.08118 -0.934154 -0.102162 0.341935 + 0.731699 0.766105 -3.06827 -0.892646 -0.112527 0.436486 + 0.715786 0.876178 -3.11125 -0.998312 -0.0529804 -0.0237958 + 0.720568 0.781473 -3.10989 -0.994763 -0.0961929 -0.0345456 + 0.727586 0.728534 -3.09845 -0.753101 -0.657734 -0.0149931 + 0.731373 0.726032 -3.08733 -0.896027 -0.413148 0.162615 + 0.73793 0.755901 -3.05943 -0.54205 -0.217014 0.811841 + 0.721855 0.783783 -3.12507 -0.940259 -0.127966 -0.315497 + 0.728872 0.730843 -3.11363 -0.753535 -0.485996 -0.442711 + 0.740176 0.721669 -3.11429 -0.43502 -0.711477 -0.551867 + 0.737605 0.715827 -3.07849 -0.610775 -0.681908 0.402436 + 0.752399 0.748231 -3.05953 0.131267 -0.282889 0.950128 + 0.73024 0.779145 -3.13746 -0.562717 -0.215037 -0.798191 + 0.758657 0.762938 -3.13818 -0.0637806 -0.337891 -0.939022 + 0.755709 0.715314 -3.11404 -0.172974 -0.796798 -0.578958 + 0.753137 0.709472 -3.07824 -0.0550107 -0.868767 0.492156 + 0.770051 0.713956 -3.11335 0.358864 -0.751013 -0.554252 + 0.767678 0.70932 -3.08482 0.434262 -0.824148 0.363588 + 0.76694 0.74808 -3.06611 0.533913 -0.219183 0.816637 + 0.778414 0.831733 -3.06725 0.635848 -0.103489 0.764845 + 0.753092 0.829517 -3.04917 0.274375 -0.12115 0.953961 + 0.785692 0.758936 -3.12592 0.779881 -0.303731 -0.547296 + 0.790005 0.756277 -3.1118 0.946459 -0.280706 -0.159434 + 0.774364 0.711295 -3.09923 0.611396 -0.790103 -0.0439523 + 0.78164 0.750508 -3.07983 0.799905 -0.22335 0.557016 + 0.807043 0.843624 -3.11434 0.978606 -0.1607 -0.128475 + 0.805363 0.839829 -3.09679 0.935664 -0.144888 0.321777 + 0.788325 0.752482 -3.09424 0.941537 -0.257519 0.217237 + 0.793113 0.83416 -3.08097 0.749946 -0.104536 0.653187 + 0.81727 0.937079 -3.09327 0.933411 -0.10991 0.341561 + 0.80502 0.931409 -3.07746 0.764571 -0.123691 0.632559 + 0.784924 0.928477 -3.05759 0.64749 -0.138817 0.749324 + -0.891883 1.52196 -2.6212 -0.22609 0.561287 0.796141 + -0.906756 1.51837 -2.62531 0.10449 0.994419 -0.0145637 + -0.93052 1.51733 -2.62797 0.0584756 0.636585 -0.768986 + -0.892392 1.53419 -2.64619 -0.365591 0.808455 0.461241 + -0.900577 1.5312 -2.64834 0.139518 0.805828 0.575479 + -0.912714 1.52633 -2.6262 0.242418 0.388341 0.889058 + -0.93052 1.51733 -2.62797 -0.419363 0.0396953 0.90695 + -0.877519 1.53779 -2.64208 -0.301602 0.825908 0.476352 + -0.890007 1.54021 -2.65338 -0.225765 0.663121 0.713653 + -0.898192 1.53722 -2.65553 0.107253 0.322486 0.940478 + -0.906535 1.53917 -2.64923 0.655018 0.201444 0.728266 + -0.841083 1.54559 -2.63191 -0.102775 0.670841 0.734445 + -0.818326 1.56307 -2.64951 -0.0447733 0.804111 0.59279 + -0.854762 1.55527 -2.65968 -0.231459 0.809545 0.539503 + -0.875344 1.55504 -2.66534 -0.0540791 0.707923 0.704217 + -0.876163 1.50957 -2.61646 -0.0435633 0.0331228 0.998501 + -0.825363 1.5332 -2.62717 0.190283 0.303543 0.933624 + -0.801154 1.54689 -2.63927 0.39546 0.427512 0.812923 + -0.779329 1.56435 -2.66489 0.592562 0.485385 0.642862 + -0.796501 1.58053 -2.67512 0.103071 0.837004 0.537402 + -0.928499 1.44977 -2.64188 -0.393582 -0.269532 0.878889 + -0.88467 1.4419 -2.63615 -0.0961734 -0.303545 0.947951 + -0.814638 1.48823 -2.62312 0.295047 -0.124756 0.947303 + -0.79043 1.50192 -2.63522 0.601685 0.0229928 0.798403 + -0.969471 1.43614 -2.67626 -0.647472 -0.201327 0.735015 + -0.910615 1.32677 -2.68468 -0.221259 -0.330885 0.917365 + -0.866786 1.3189 -2.67895 0.106557 -0.392402 0.913601 + -0.823145 1.42055 -2.64281 0.267356 -0.355809 0.8955 + -0.788958 1.41557 -2.6663 0.656989 -0.353273 0.666006 + -0.971492 1.50371 -2.66235 -0.693407 -0.0525904 0.718624 + -0.983836 1.51751 -2.67543 -0.75654 0.03766 0.652862 + -0.999264 1.50315 -2.6968 -0.879837 -0.0303789 0.474304 + -0.998304 1.44441 -2.70876 -0.876009 -0.114088 0.468606 + -0.964992 1.35018 -2.68955 -0.491557 -0.234337 0.838724 + -0.940298 1.55651 -2.64549 -0.447077 0.350576 0.822933 + -0.952642 1.57031 -2.65857 -0.461898 0.419921 0.781228 + -0.979896 1.57252 -2.68028 -0.721434 0.400796 0.564708 + -0.995324 1.55816 -2.70165 -0.897094 0.288711 0.334466 + -0.922492 1.56551 -2.64372 0.0630064 0.524095 0.849326 + -0.911465 1.58928 -2.66198 0.190243 0.574209 0.796299 + -0.937803 1.59891 -2.67516 -0.243033 0.734408 0.633703 + -0.965057 1.60113 -2.69687 -0.559648 0.733901 0.384946 + -0.905557 1.54438 -2.64776 0.354318 -0.0592797 0.933244 + -0.894531 1.56815 -2.66602 0.48239 0.337818 0.808195 + -0.867746 1.59585 -2.69256 0.474283 0.485573 0.734353 + -0.885343 1.61232 -2.69242 0.267523 0.705233 0.656565 + -0.911681 1.62195 -2.7056 -0.10586 0.910048 0.400757 + -0.897214 1.54243 -2.65405 0.345225 0.077066 0.93535 + -0.882551 1.55726 -2.66602 0.234796 0.498919 0.834237 + -0.855766 1.58495 -2.69256 0.28742 0.637788 0.714574 + -0.849924 1.60828 -2.71679 0.566754 0.663429 0.488521 + -0.867521 1.62475 -2.71665 0.380702 0.828308 0.411063 + -0.849585 1.5812 -2.68906 -0.0353293 0.798288 0.601239 + -0.828368 1.59373 -2.71497 0.146724 0.943731 0.296383 + -0.834549 1.59748 -2.71847 0.444904 0.799796 0.402973 + -0.834941 1.60577 -2.74159 0.591739 0.774122 0.224898 + -0.864122 1.6263 -2.73181 0.423915 0.889071 0.172767 + -0.829003 1.58143 -2.6834 -0.121484 0.851511 0.510069 + -0.811174 1.5928 -2.7105 -0.0214423 0.983216 0.181182 + -0.811027 1.59247 -2.74355 0.153523 0.985513 0.072074 + -0.819566 1.59496 -2.74326 0.424025 0.889941 0.16795 + -0.778672 1.5919 -2.70222 0.35084 0.880319 0.319296 + -0.772282 1.59501 -2.73269 0.302944 0.940593 0.153327 + -0.793833 1.59155 -2.73908 -0.060727 0.998063 -0.0134772 + -0.803196 1.59435 -2.77524 0.186314 0.976174 0.111227 + -0.811736 1.59684 -2.77495 0.409385 0.900436 0.147034 + -0.760085 1.57115 -2.69963 0.825939 0.432965 0.361061 + -0.753695 1.57426 -2.7301 0.817051 0.471931 0.331223 + -0.751357 1.59298 -2.76679 0.446724 0.879992 0.161407 + -0.769096 1.59685 -2.77483 0.0491148 0.998454 -0.0260182 + -0.790647 1.59339 -2.78122 0.0213143 0.998105 0.0577178 + -0.765915 1.5493 -2.67958 0.848401 0.161521 0.504109 + -0.741668 1.50855 -2.71809 0.880022 0.19405 0.433481 + -0.733332 1.50676 -2.73257 0.956958 0.0327701 0.288369 + -0.745359 1.57248 -2.74458 0.735298 0.470937 0.487396 + -0.777016 1.48688 -2.64992 0.750565 -0.115649 0.650598 + -0.747498 1.4867 -2.69804 0.889495 -0.0654025 0.45224 + -0.738473 1.45156 -2.73762 0.969209 -0.219454 0.111688 + -0.726742 1.56403 -2.75754 0.931474 0.259925 0.25455 + -0.75944 1.41539 -2.71442 0.855891 -0.307935 0.415485 + -0.765923 1.35168 -2.76479 0.958521 -0.283734 0.0270655 + -0.731883 1.50883 -2.76259 0.984025 -0.112073 -0.138327 + -0.746557 1.53971 -2.81573 0.906447 0.0021148 -0.422314 + -0.73274 1.58453 -2.77975 0.824529 0.558302 -0.0919244 + -0.78689 1.3155 -2.7416 0.805312 -0.353729 0.47576 + -0.799393 1.24551 -2.7692 0.854398 -0.260015 0.449884 + -0.773356 1.3433 -2.78776 0.966381 -0.20482 -0.155421 + -0.739316 1.50045 -2.78555 0.945678 -0.13106 -0.297517 + -0.814154 1.31359 -2.71211 0.593899 -0.404248 0.695606 + -0.826657 1.2436 -2.73972 0.661291 -0.338552 0.669385 + -0.848341 1.31858 -2.68862 0.446106 -0.406151 0.797515 + -0.848495 1.23947 -2.7224 0.513131 -0.362928 0.777805 + -0.823961 1.19951 -2.76147 0.67794 -0.307272 0.667818 + -0.86694 1.2398 -2.71272 0.162325 -0.417997 0.893828 + -0.862939 1.19246 -2.73746 0.15102 -0.452062 0.879109 + -0.8458 1.19538 -2.74415 0.512286 -0.367034 0.776434 + -0.901155 1.24515 -2.71393 -0.189097 -0.424621 0.885403 + -0.897154 1.19781 -2.73866 -0.202264 -0.474083 0.856933 + -0.885064 1.11308 -2.78374 -0.203041 -0.486904 0.849529 + -0.857895 1.11402 -2.77952 0.139952 -0.469199 0.871932 + -0.840756 1.11695 -2.78622 0.510101 -0.386238 0.768516 + -0.955531 1.26856 -2.7188 -0.496144 -0.396083 0.772632 + -0.944055 1.19838 -2.75499 -0.510399 -0.452603 0.731193 + -0.931966 1.11365 -2.80007 -0.484807 -0.470809 0.737089 + -0.983141 1.28138 -2.74361 -0.889107 -0.279328 0.36258 + -0.971665 1.21119 -2.77979 -0.893401 -0.307535 0.327502 + -0.95616 1.11954 -2.82119 -0.868557 -0.330632 0.369177 + -0.908684 1.00316 -2.85679 -0.470362 -0.462925 0.751306 + -0.993825 1.35845 -2.72205 -0.905694 -0.185731 0.381081 + -0.988035 1.29495 -2.78707 -0.984831 -0.167623 0.0448501 + -0.975929 1.22491 -2.81432 -0.982278 -0.183621 0.0376019 + -0.960425 1.13325 -2.85572 -0.985402 -0.165077 0.0416373 + -1.01339 1.45412 -2.75603 -0.984817 -0.0887633 0.149187 + -0.998719 1.37202 -2.76552 -0.984029 -0.169562 0.0541816 + -0.990991 1.30479 -2.82818 -0.985617 -0.167175 0.0247397 + -0.978886 1.23475 -2.85543 -0.984693 -0.174093 0.00843553 + -0.963241 1.14511 -2.88537 -0.986167 -0.165736 -0.00230545 + -1.01435 1.51286 -2.74407 -0.987585 0.0792685 0.135622 + -1.0123 1.53068 -2.77243 -0.972831 0.230619 -0.0203678 + -1.01708 1.46156 -2.80018 -0.997232 -0.0441868 -0.0598019 + -1.0024 1.37945 -2.80967 -0.988283 -0.151019 0.0221316 + -0.993265 1.57599 -2.73001 -0.864745 0.486161 0.125953 + -0.983454 1.59551 -2.77394 -0.806544 0.588438 -0.0568123 + -1.00644 1.53931 -2.8072 -0.930646 0.307611 -0.198176 + -1.01122 1.47018 -2.83495 -0.978063 0.0583339 -0.199974 + -0.955245 1.62066 -2.7408 -0.48232 0.859587 0.168754 + -0.946612 1.62905 -2.77789 -0.340305 0.936351 -0.086251 + -0.967775 1.60432 -2.81096 -0.657293 0.687269 -0.309236 + -0.990762 1.54811 -2.84422 -0.836216 0.402474 -0.372502 + -0.903047 1.63034 -2.7427 -0.0882662 0.99462 0.0542233 + -0.925879 1.62295 -2.81582 -0.168011 0.937725 -0.304048 + -0.947043 1.59822 -2.84888 -0.427489 0.715085 -0.553088 + -0.887393 1.63128 -2.73602 0.00295766 0.9891 0.147214 + -0.910225 1.62389 -2.80914 0.102165 0.974336 -0.200577 + -0.905845 1.6127 -2.8457 0.0248469 0.874337 -0.484684 + -0.883994 1.63283 -2.75118 -0.0178476 0.999277 -0.0335799 + -0.879614 1.62164 -2.78774 0.168309 0.947439 -0.272085 + -0.869875 1.58653 -2.88225 -0.0578116 0.809356 -0.584467 + -0.863711 1.54912 -2.92 -0.268314 0.380988 -0.884791 + -0.89968 1.5753 -2.88344 -0.271146 0.550918 -0.789284 + -0.85349 1.62504 -2.76183 0.379809 0.925062 0.00223308 + -0.859971 1.62019 -2.79007 0.0168362 0.970605 -0.240088 + -0.850232 1.58508 -2.88458 0.0153005 0.804867 -0.593257 + -0.835818 1.55511 -2.91418 0.278561 0.479645 -0.832072 + -0.854955 1.47201 -2.93872 -0.063711 0.182406 -0.981157 + -0.824309 1.60451 -2.7716 0.574778 0.802247 0.161339 + -0.82079 1.61174 -2.82678 0.344894 0.935113 -0.0813088 + -0.827271 1.60687 -2.85503 0.149029 0.890965 -0.428919 + -0.812857 1.57691 -2.88462 0.373274 0.661785 -0.650159 + -0.808217 1.60406 -2.83014 0.314385 0.944017 -0.0999674 + -0.795668 1.6031 -2.83612 0.258166 0.929567 -0.263164 + -0.792252 1.56646 -2.87796 0.662158 0.402325 -0.632204 + -0.827063 1.478 -2.93291 0.468141 0.172441 -0.866665 + -0.775063 1.59265 -2.82945 0.473812 0.80152 -0.364785 + -0.77114 1.54396 -2.85738 0.817065 0.136911 -0.560053 + -0.805951 1.4555 -2.91233 0.808165 0.0559644 -0.586291 + -0.824235 1.37254 -2.94607 0.613753 0.122473 -0.77994 + -0.872747 1.46842 -2.93547 -0.0893839 0.29444 -0.951481 + -0.757324 1.58878 -2.8214 0.614111 0.647935 -0.450609 + -0.775446 1.45734 -2.85964 0.898803 -0.0613154 -0.434044 + -0.79373 1.37437 -2.89337 0.912884 0.00115234 -0.408217 + -0.768206 1.41808 -2.82947 0.948323 -0.136453 -0.286467 + -0.780405 1.34771 -2.8475 0.977473 -0.0739796 -0.197671 + -0.800511 1.2866 -2.91908 0.906474 0.0521904 -0.419024 + -0.785555 1.27293 -2.80579 0.983717 -0.124474 0.129641 + -0.785618 1.23892 -2.82147 0.989766 -0.0798494 0.118267 + -0.787186 1.25993 -2.87321 0.988089 -0.00621435 -0.153757 + -0.799455 1.2115 -2.78489 0.864258 -0.211996 0.456198 + -0.798572 1.13536 -2.82202 0.873662 -0.215576 0.436168 + -0.789111 1.14932 -2.85386 0.992109 -0.0734903 0.101584 + -0.79068 1.17034 -2.9056 0.982825 0.0193546 -0.183523 + -0.823078 1.12337 -2.79861 0.67682 -0.321418 0.662273 + -0.8192 1.01195 -2.85771 0.67275 -0.318662 0.667729 + -0.801549 1.02036 -2.87402 0.8689 -0.214634 0.446032 + -0.792088 1.03432 -2.90586 0.995083 -0.0613204 0.0777778 + -0.836878 1.00552 -2.84532 0.476401 -0.389876 0.78806 + -0.830536 0.893194 -2.90304 0.470886 -0.372882 0.799515 + -0.818915 0.897514 -2.9108 0.664699 -0.307494 0.680898 + -0.801264 0.905924 -2.92711 0.874166 -0.203711 0.440836 + -0.848297 1.00313 -2.84221 0.107195 -0.464102 0.879272 + -0.841954 0.890798 -2.89992 0.0966079 -0.440808 0.892387 + -0.833718 0.777782 -2.95507 0.095437 -0.399929 0.911564 + -0.826877 0.779219 -2.95694 0.466962 -0.338023 0.817121 + -0.815256 0.783538 -2.96471 0.665399 -0.278073 0.692762 + -0.875466 1.00218 -2.84643 -0.198566 -0.479279 0.854905 + -0.859798 0.890231 -2.90282 -0.202535 -0.45191 0.868767 + -0.893016 0.891206 -2.91318 -0.444824 -0.444226 0.777685 + -0.871462 0.777799 -2.96418 -0.445752 -0.408124 0.796706 + -0.851562 0.777212 -2.95797 -0.210514 -0.411461 0.886783 + -0.91125 0.894913 -2.92662 -0.755978 -0.381665 0.531816 + -0.889696 0.781507 -2.97762 -0.762165 -0.364953 0.53471 + -0.872875 0.707806 -3.00101 -0.774018 -0.304332 0.555228 + -0.861211 0.705433 -2.99241 -0.469271 -0.289304 0.834319 + -0.841311 0.704848 -2.9862 -0.220981 -0.267276 0.93794 + -0.932878 1.00905 -2.87791 -0.77868 -0.387517 0.493445 + -0.923644 0.903215 -2.94988 -0.945361 -0.269203 0.183908 + -0.897121 0.78648 -2.99155 -0.943409 -0.276693 0.18281 + -0.8803 0.712776 -3.01494 -0.944125 -0.288983 0.158481 + -0.945272 1.01735 -2.90117 -0.952154 -0.248534 0.177858 + -0.925618 0.910994 -2.96936 -0.976745 -0.152146 -0.151068 + -0.899094 0.794259 -3.01104 -0.970179 -0.17407 -0.168677 + -0.881562 0.717753 -3.02741 -0.947249 -0.24901 -0.201775 + -0.948089 1.0292 -2.93081 -0.984171 -0.107365 -0.140996 + -0.918159 0.922154 -2.99485 -0.910556 -0.0551202 -0.409694 + -0.894626 0.800945 -3.02631 -0.902355 -0.0911458 -0.421246 + -0.877095 0.72444 -3.04267 -0.859735 -0.20941 -0.465836 + -0.94063 1.04036 -2.9563 -0.944878 -0.0718342 -0.319445 + -0.910284 0.928679 -3.0089 -0.769099 0.0239422 -0.63868 + -0.886751 0.807467 -3.04036 -0.75314 -0.0109761 -0.657769 + -0.872057 0.728612 -3.05166 -0.701856 -0.167027 -0.692459 + -0.965306 1.15935 -2.92069 -0.973982 -0.126356 -0.18813 + -0.957508 1.16939 -2.94333 -0.886139 -0.0530251 -0.460376 + -0.932832 1.0504 -2.97894 -0.810818 0.000326564 -0.585298 + -0.898042 0.933835 -3.01856 -0.471304 0.125816 -0.872951 + -0.879417 0.810558 -3.04614 -0.465475 0.084202 -0.881046 + -0.98095 1.249 -2.89075 -0.980846 -0.153496 -0.119916 + -0.973979 1.25621 -2.92398 -0.908819 -0.0870864 -0.408 + -0.94395 1.17894 -2.96344 -0.635531 0.0442598 -0.770806 + -0.920591 1.05555 -2.98861 -0.53069 0.0996473 -0.841688 + -0.880745 0.937452 -3.02325 -0.197101 0.180046 -0.963709 + -0.991593 1.30264 -2.87929 -0.983016 -0.1495 -0.106435 + -0.984621 1.30985 -2.91253 -0.91517 -0.0696551 -0.397003 + -0.960421 1.26577 -2.94409 -0.657008 0.0139924 -0.753753 + -0.916401 1.18623 -2.97462 -0.328534 0.116524 -0.937277 + -0.893041 1.06284 -2.99979 -0.242959 0.152349 -0.957998 + -1.003 1.3773 -2.86079 -0.990521 -0.0897947 -0.103947 + -0.994655 1.36584 -2.89536 -0.927406 -0.0223782 -0.373387 + -0.967627 1.31704 -2.93891 -0.662031 0.0267576 -0.748999 + -0.930838 1.33198 -2.95569 -0.323075 0.100271 -0.941046 + -0.923632 1.28072 -2.96087 -0.343138 0.0765542 -0.93616 + -1.00287 1.45872 -2.86952 -0.91665 0.0707902 -0.393373 + -0.977661 1.37303 -2.92174 -0.735059 0.0779156 -0.673512 + -0.942147 1.39065 -2.9436 -0.374008 0.15113 -0.915029 + -0.867606 1.36449 -2.96342 0.0916473 0.176359 -0.98005 + -0.870262 1.29124 -2.97378 0.0425137 0.1387 -0.989422 + -0.996841 1.49407 -2.87139 -0.875051 0.214786 -0.433765 + -0.971629 1.40838 -2.92362 -0.655032 0.127388 -0.744786 + -0.941046 1.48951 -2.92284 -0.281737 0.277741 -0.918414 + -0.878915 1.42316 -2.95133 0.0809528 0.247303 -0.965551 + -0.970527 1.50724 -2.90286 -0.6206 0.297853 -0.725354 + -0.934877 1.53478 -2.90699 -0.140902 0.493199 -0.858429 + -0.964448 1.56129 -2.87568 -0.553006 0.556796 -0.619809 + -0.917472 1.57171 -2.88019 -0.191852 0.567192 -0.800928 + -0.898511 1.25175 -2.09719 0.892978 0.346908 -0.286786 + -0.893679 1.25709 -2.07569 0.456797 0.847666 -0.269812 + -0.883033 1.24766 -2.05395 0.832686 0.550594 0.0589866 + -0.896025 1.26076 -1.99076 0.631475 0.700116 0.333281 + -0.87489 1.21524 -1.98255 0.885859 0.24839 0.391863 + -0.866728 1.19559 -2.00045 0.974383 -0.00889473 0.22472 + -0.874871 1.22801 -2.07185 0.952748 0.274217 0.130675 + -0.871571 1.24751 -2.11555 0.864158 0.412797 0.2878 + -0.88557 1.27604 -2.1347 0.391807 0.787321 0.476039 + -0.906671 1.27018 -2.01251 0.324928 0.94425 -0.0530492 + -0.919716 1.27212 -2.00414 0.0949342 0.98965 0.107614 + -0.930917 1.25764 -1.96193 0.041314 0.776417 0.628863 + -0.91676 1.24203 -1.95501 0.407149 0.495529 0.767255 + -0.917472 1.25296 -2.06952 -0.14029 0.958992 -0.246279 + -0.930517 1.25489 -2.06115 0.0215812 0.955997 -0.292583 + -0.93684 1.25535 -2.06139 0.0257109 0.946378 -0.322037 + -0.941049 1.27345 -2.01668 0.00362017 0.997321 -0.0730553 + -0.95225 1.25897 -1.97446 -0.272476 0.840383 0.468522 + -0.898511 1.25175 -2.09719 -0.201253 0.971477 -0.125416 + -0.922304 1.24762 -2.09102 -0.146563 0.989199 0.00198903 + -0.932343 1.24639 -2.08904 -0.0239433 0.997775 -0.0622208 + -0.938666 1.24684 -2.08927 0.0369946 0.996177 -0.0791387 + -0.956727 1.2527 -2.06544 -0.04595 0.963301 -0.264462 + -0.960936 1.27081 -2.02073 -0.272243 0.959653 -0.0703551 + -0.926001 1.24885 -2.0985 -0.0964539 0.902875 0.418943 + -0.93604 1.24762 -2.09652 -0.0170284 0.960047 0.27932 + -0.950931 1.24801 -2.0982 -0.00550002 0.955936 0.293523 + -0.953558 1.24724 -2.09095 0.0209443 0.998688 -0.0467285 + -0.952937 1.25444 -2.11069 -0.0586869 0.834614 0.5477 + -0.978095 1.2481 -2.099 0.0441309 0.958969 0.280053 + -0.979279 1.24761 -2.09173 0.0563735 0.996304 -0.0648139 + -0.982449 1.25307 -2.06622 -0.0417126 0.989159 -0.140798 + -0.987106 1.25807 -2.02339 -0.273993 0.961183 0.0324747 + -0.940629 1.26583 -2.12249 -0.114706 0.774715 0.62182 + -0.975395 1.27283 -2.13765 -9.02355e-005 0.779726 0.626121 + -0.980101 1.25453 -2.11149 0.10135 0.862903 0.495103 + -0.991501 1.26042 -2.1175 0.265802 0.787418 0.556167 + -0.994803 1.24965 -2.09998 0.293211 0.90135 0.318739 + -0.963088 1.28421 -2.14945 -0.11339 0.75338 0.647735 + -0.986795 1.27872 -2.14366 0.209386 0.77013 0.602542 + -0.898511 1.25175 -2.09719 -0.111811 0.777643 0.618684 + 1.05117 1.12715 -1.90057 0.0662268 -0.171641 0.982931 + 1.04301 1.16262 -1.8932 -0.138049 -0.0522402 0.989047 + 0.980129 1.18837 -1.91784 -0.447262 -0.27944 0.849629 + 1.1199 1.17478 -1.91371 0.473942 0.0978725 0.8751 + 1.08924 1.19869 -1.90469 0.378253 0.22797 0.897193 + 1.06864 1.19787 -1.89697 0.107883 0.209246 0.971894 + 1.04118 1.20698 -1.90796 -0.452956 0.493767 0.742311 + 1.12806 1.13932 -1.92108 0.477789 -0.115971 0.870786 + 1.17441 1.14361 -1.95867 0.801182 0.0679804 0.594547 + 1.15065 1.19284 -1.94371 0.707235 0.395257 0.586166 + 1.07232 1.09107 -1.91115 0.115185 -0.388734 0.914122 + 1.13452 1.09271 -1.93472 0.483907 -0.298475 0.822646 + 1.18087 1.097 -1.97232 0.776563 -0.162315 0.608773 + 0.989426 1.13764 -1.89975 -0.246098 -0.111477 0.962813 + 1.01057 1.10156 -1.91032 -0.255411 -0.553567 0.792672 + 1.00457 1.08538 -1.93131 -0.418346 -0.632369 0.651994 + 1.07934 1.04655 -1.93878 0.0810999 -0.591904 0.801918 + 1.14155 1.04819 -1.96235 0.443516 -0.50213 0.742401 + 0.980129 1.18837 -1.91784 0.134531 0.540413 0.830575 + 0.965973 1.17276 -1.91092 -0.227417 0.232093 0.945735 + 0.919078 1.1614 -1.93562 -0.60827 -0.306227 0.732279 + 0.913074 1.14522 -1.9566 -0.686922 -0.514411 0.513342 + 0.91676 1.24203 -1.95501 -0.407155 0.495529 0.767252 + 0.895625 1.19651 -1.94679 -0.726461 0.0217994 0.686862 + 0.930917 1.25764 -1.96193 -0.041317 0.776415 0.628866 + 0.896025 1.26076 -1.99076 -0.631476 0.700117 0.333279 + 0.87489 1.21524 -1.98255 -0.888637 0.207783 0.408842 + 0.95225 1.25897 -1.97446 0.272492 0.840374 0.468529 + 0.941049 1.27345 -2.01668 0.00364353 0.997716 -0.0674545 + 0.919716 1.27212 -2.00414 -0.0962171 0.989277 0.109874 + 0.906671 1.27018 -2.01251 -0.324939 0.944246 -0.0530534 + 0.883033 1.24766 -2.05395 -0.832981 0.550264 0.0578914 + 0.995964 1.18457 -1.9229 0.354686 0.701349 0.61831 + 0.968084 1.25517 -1.97953 0.38769 0.803675 0.451446 + 0.960936 1.27081 -2.02073 0.244574 0.969016 -0.0345248 + 0.93684 1.25535 -2.06139 -0.0150176 0.941578 -0.33646 + 0.930517 1.25489 -2.06115 -0.0327555 0.950541 -0.308867 + 1.00645 1.17926 -1.92269 -0.070925 0.843162 0.532962 + 1.00474 1.23713 -1.98197 0.164995 0.700408 0.69441 + 0.994254 1.24243 -1.98218 0.308637 0.761385 0.570119 + 0.987106 1.25807 -2.02339 0.260051 0.96521 0.0272653 + 0.982449 1.25307 -2.06622 0.0808846 0.977999 -0.19229 + 0.956727 1.2527 -2.06544 0.00781325 0.953414 -0.301562 + 1.01002 1.23395 -1.97869 -0.313765 0.690069 0.652194 + 1.01179 1.25355 -1.99836 -0.302507 0.6774 0.670536 + 1.00651 1.25674 -2.00165 -0.136821 0.917672 0.373039 + 1.00371 1.25545 -2.02439 0.0084103 0.996068 -0.0881855 + 0.999056 1.25046 -2.06722 0.00821282 0.996386 -0.0845421 + 1.01913 1.22641 -1.96018 -0.62756 0.583376 0.515598 + 1.02713 1.2549 -1.9832 -0.604268 0.609424 0.513286 + 1.02889 1.25904 -1.98622 -0.58748 0.689504 0.423616 + 1.01355 1.2577 -2.00138 -0.396477 0.847567 0.352755 + 1.01075 1.25642 -2.02412 -0.391076 0.919622 -0.0368149 + 1.04919 1.23547 -1.93097 -0.53378 0.63185 0.562001 + 0.980129 1.18837 -1.91784 0.353085 0.914284 0.198533 + -0.265027 1.74133 -3.37072 0.608582 0.176412 0.773632 + -0.261467 1.75486 -3.37977 0.405413 0.43226 0.805476 + -0.286397 1.7575 -3.36864 0.37424 0.926179 -0.046233 + -0.289957 1.74398 -3.35959 0.454078 0.191852 0.870061 + -0.290079 1.69202 -3.35677 0.531317 0.0558839 0.845328 + -0.263388 1.66691 -3.37811 0.721112 -0.0194369 0.692546 + -0.250973 1.65474 -3.39333 0.941656 -0.0536991 0.332266 + -0.252611 1.72917 -3.38594 0.965166 0.24466 -0.0927086 + -0.261467 1.75486 -3.37977 0.821733 0.151318 0.549415 + -0.311519 1.7617 -3.35095 0.347925 0.550309 0.759018 + -0.311641 1.70974 -3.34812 0.366798 0.103597 0.924514 + -0.298838 1.64784 -3.34424 0.595801 0.192498 0.779721 + -0.319147 1.76774 -3.36248 0.229633 0.931589 -0.281798 + -0.337551 1.76806 -3.34796 0.2119 0.658287 0.722327 + -0.363175 1.76019 -3.33739 0.202236 0.59766 0.775824 + -0.337265 1.70187 -3.33755 0.372538 0.188176 0.908738 + -0.302376 1.7471 -3.37552 0.0828534 0.576953 -0.812564 + -0.342152 1.73389 -3.39425 -0.0644843 0.58809 -0.806221 + -0.345179 1.7741 -3.35949 -0.0419621 0.979265 -0.198189 + -0.278095 1.69156 -3.41165 0.165581 0.444574 -0.880305 + -0.325381 1.71326 -3.40729 0.0546254 0.531179 -0.845497 + -0.373982 1.66906 -3.42415 -0.270237 0.446519 -0.85299 + -0.36635 1.72855 -3.39056 -0.288517 0.550972 -0.783063 + -0.369377 1.76876 -3.3558 -0.258623 0.940838 -0.218947 + -0.262116 1.70196 -3.40477 0.256435 0.427005 -0.867126 + -0.265668 1.59394 -3.44147 0.665034 0.156589 -0.730212 + -0.285878 1.6439 -3.43792 0.360814 0.369512 -0.856314 + -0.333165 1.6656 -3.43356 -0.0260002 0.439998 -0.897622 + -0.261467 1.75486 -3.37977 -0.336333 0.405795 -0.84983 + -0.261467 1.75486 -3.37977 0.508502 0.36284 -0.78088 + -0.25326 1.67627 -3.41094 0.757799 0.207451 -0.618631 + -0.251006 1.6008 -3.4046 0.985798 -0.00604765 0.167825 + -0.253294 1.62233 -3.42221 0.907878 0.0770128 -0.412101 + -0.254886 1.56206 -3.39721 0.93169 -0.0672253 0.35698 + -0.252745 1.5134 -3.43101 0.971276 -0.0195466 -0.237152 + -0.26512 1.48501 -3.45027 0.719997 0.00756946 -0.693936 + -0.272148 1.62272 -3.36558 0.792666 0.0339366 0.608711 + -0.275901 1.5648 -3.36241 0.824765 -0.0536535 0.562925 + -0.268812 1.46739 -3.39265 0.89524 -0.119957 0.429134 + -0.256625 1.47467 -3.42362 0.987255 -0.12629 0.0968424 + -0.267812 1.42086 -3.44995 0.835022 -0.127189 -0.535314 + -0.312908 1.59752 -3.31389 0.635482 0.133297 0.760522 + -0.316661 1.5396 -3.31073 0.701162 -0.0253243 0.712552 + -0.289828 1.47013 -3.35786 0.830505 -0.0954493 0.548773 + -0.29734 1.40521 -3.35865 0.844437 -0.131489 0.519265 + -0.275158 1.41654 -3.39595 0.903332 -0.150612 0.401632 + -0.332826 1.64955 -3.32398 0.443863 0.315853 0.838584 + -0.346895 1.59923 -3.29364 0.408375 0.217354 0.886559 + -0.352689 1.52951 -3.28365 0.441666 0.0273881 0.896761 + -0.326163 1.45287 -3.30861 0.718472 -0.0810191 0.690821 + -0.333676 1.38795 -3.30941 0.697126 -0.11975 0.706877 + -0.393265 1.6544 -3.30009 0.323102 0.306307 0.895422 + -0.377439 1.60125 -3.28521 0.286481 0.228842 0.930355 + -0.383233 1.53154 -3.27522 0.206028 0.01021 0.978493 + -0.362191 1.44278 -3.28154 0.320038 -0.0850304 0.943581 + -0.367138 1.38005 -3.28699 0.280995 -0.151444 0.947685 + -0.397704 1.70673 -3.31366 0.366105 0.188659 0.911249 + -0.423719 1.64686 -3.28781 0.262929 0.284979 0.921768 + -0.407894 1.59371 -3.27293 0.248335 0.179211 0.951952 + -0.407762 1.54644 -3.27043 0.198923 0.00279423 0.980011 + -0.398662 1.44285 -3.2826 -0.0962749 -0.153384 0.983466 + -0.387798 1.75425 -3.32289 0.356258 0.527686 0.771121 + -0.418806 1.75845 -3.31183 0.162655 0.640958 0.750144 + -0.428712 1.71092 -3.3026 0.303439 0.181344 0.935435 + -0.437086 1.67696 -3.29285 0.260686 0.234293 0.936563 + -0.438935 1.59252 -3.26779 -0.238769 0.0619927 0.969096 + -0.393999 1.76282 -3.34131 -0.18787 0.973892 -0.127437 + -0.419446 1.76383 -3.32485 -0.140627 0.986581 -0.0829547 + -0.453626 1.75346 -3.31585 -0.603686 0.793128 -0.0806886 + -0.452985 1.74807 -3.30283 -0.393021 0.548496 0.738029 + -0.461359 1.71412 -3.29308 -0.361702 0.314179 0.87776 + -0.405828 1.73146 -3.37114 -0.413503 0.563814 -0.714932 + -0.431275 1.73247 -3.35469 -0.483916 0.569356 -0.664575 + -0.443239 1.71002 -3.36003 -0.612301 0.366396 -0.7006 + -0.46559 1.73101 -3.32119 -0.900693 0.383894 -0.203414 + -0.413459 1.67197 -3.40473 -0.526387 0.42897 -0.734099 + -0.443485 1.65151 -3.38545 -0.702603 0.314714 -0.638204 + -0.421977 1.58169 -3.44311 -0.531918 0.323934 -0.782387 + -0.452003 1.56124 -3.42383 -0.794192 0.255368 -0.551404 + -0.473777 1.52375 -3.39233 -0.94315 0.132378 -0.304867 + -0.467549 1.61552 -3.37163 -0.874239 0.167728 -0.455603 + -0.467302 1.67403 -3.34621 -0.90584 0.185067 -0.381056 + -0.387188 1.59292 -3.45548 -0.302176 0.349149 -0.887009 + -0.392478 1.51526 -3.47722 -0.2913 0.202795 -0.934889 + -0.427267 1.50404 -3.46484 -0.502611 0.155071 -0.850491 + -0.451868 1.50135 -3.44542 -0.758451 0.141644 -0.636152 + -0.346372 1.58946 -3.46489 -0.0950784 0.336429 -0.936897 + -0.356547 1.51892 -3.48286 -0.0839514 0.180585 -0.97997 + -0.392487 1.43292 -3.48973 -0.33083 0.0638047 -0.941531 + -0.42669 1.44214 -3.46954 -0.549193 0.0463773 -0.834408 + -0.451292 1.43946 -3.45012 -0.760532 -0.0217099 -0.648938 + -0.304657 1.58899 -3.46638 0.209098 0.325753 -0.922043 + -0.314833 1.51845 -3.48435 0.19791 0.0728223 -0.977511 + -0.323541 1.44968 -3.48392 0.346154 0.0167443 -0.938028 + -0.356556 1.43658 -3.49537 0.0757598 0.0630933 -0.995128 + -0.284447 1.53902 -3.46994 0.677107 0.0315538 -0.735207 + -0.293155 1.47025 -3.46951 0.528596 -0.0304665 -0.848327 + -0.295847 1.40611 -3.46918 0.543833 -0.0629988 -0.836826 + -0.323849 1.39324 -3.48339 0.405857 -0.054603 -0.912304 + -0.356864 1.38014 -3.49484 0.111892 -0.0929572 -0.989363 + -0.276146 1.37933 -3.44706 0.879099 -0.128788 -0.45891 + -0.290122 1.36875 -3.46237 0.644369 -0.0930436 -0.759034 + -0.318124 1.35588 -3.47658 0.420436 -0.128133 -0.898229 + -0.26297 1.42381 -3.42693 0.985584 -0.15623 0.0649388 + -0.271304 1.38229 -3.42404 0.987079 -0.140247 0.0774975 + -0.278449 1.29525 -3.41344 0.992734 -0.0508365 0.109065 + -0.281624 1.29572 -3.43696 0.913391 -0.110583 -0.391776 + -0.295601 1.28513 -3.45226 0.648705 -0.135066 -0.748958 + -0.281762 1.37604 -3.39747 0.904234 -0.0957594 0.416163 + -0.288907 1.28901 -3.38686 0.889855 0.0141175 0.456024 + -0.293574 1.15781 -3.36481 0.923363 -0.00195039 0.383922 + -0.287422 1.16036 -3.39442 0.996868 -0.0725267 0.0315257 + -0.290597 1.16082 -3.41794 0.920458 -0.13103 -0.368224 + -0.303945 1.36472 -3.36017 0.849301 -0.0899559 0.520188 + -0.307281 1.28333 -3.3581 0.824663 0.0103439 0.565529 + -0.311948 1.15213 -3.33605 0.694553 0.0583915 0.717068 + -0.317682 1.04499 -3.32682 0.684034 0.017217 0.729247 + -0.303511 1.04582 -3.34643 0.915049 -0.042819 0.401063 + -0.333694 1.3502 -3.31774 0.711332 -0.0949383 0.696415 + -0.33703 1.26882 -3.31568 0.63988 -0.0218807 0.768163 + -0.339085 1.15273 -3.31962 0.486193 0.0284324 0.873389 + -0.344819 1.04559 -3.31039 0.36838 0.0573657 0.927904 + -0.367156 1.34229 -3.29532 0.287706 -0.143707 0.946876 + -0.365862 1.26606 -3.30244 0.209757 -0.0547727 0.976218 + -0.367918 1.14997 -3.30638 0.122155 -0.0125416 0.992432 + -0.367929 1.04705 -3.30553 0.0293487 0.0568498 0.997951 + -0.348894 0.95487 -3.30343 0.37192 0.0454904 0.927149 + -0.398451 1.34236 -3.29623 -0.348792 -0.155851 0.924151 + -0.397157 1.26612 -3.30336 -0.320237 -0.0827486 0.943716 + -0.395067 1.15279 -3.31141 -0.377308 -0.0158285 0.925952 + -0.395078 1.04987 -3.31056 -0.337019 0.0398671 0.940654 + -0.403609 1.38012 -3.28805 -0.351364 -0.195463 0.915608 + -0.435699 1.3942 -3.31337 -0.791835 -0.244577 0.559624 + -0.43054 1.35643 -3.32155 -0.783858 -0.151577 0.602155 + -0.422927 1.27418 -3.32113 -0.733292 -0.0584317 0.677398 + -0.439204 1.43827 -3.29809 -0.703119 -0.257571 0.662783 + -0.468309 1.42442 -3.36681 -0.956274 -0.17538 0.234055 + -0.458523 1.38237 -3.36741 -0.946108 -0.159846 0.281653 + -0.450909 1.30012 -3.36699 -0.942399 -0.0715862 0.32674 + -0.423191 1.45776 -3.27781 -0.265779 -0.304789 0.914585 + -0.454815 1.52576 -3.28556 -0.817729 -0.140938 0.558082 + -0.471814 1.4685 -3.35154 -0.951706 -0.172839 0.253736 + -0.473642 1.46386 -3.41391 -0.958757 -0.00928643 -0.284076 + -0.473075 1.42713 -3.40846 -0.978893 -0.117253 -0.167392 + -0.438802 1.54524 -3.26529 -0.356851 -0.0418794 0.933222 + -0.463609 1.56642 -3.29648 -0.895441 -0.0418163 0.443212 + -0.480608 1.50917 -3.36245 -0.997003 -0.0356092 0.0686778 + 0.302376 1.7471 -3.37552 0.605009 0.546625 0.578934 + 0.286397 1.7575 -3.36864 -0.0282659 0.550726 0.834208 + 0.289957 1.74398 -3.35959 -0.378524 0.394632 0.837249 + 0.265027 1.74133 -3.37072 -0.592574 0.151185 0.791201 + 0.263388 1.66691 -3.37811 -0.712373 0.0100714 0.701729 + 0.290079 1.69202 -3.35677 -0.572382 0.0871925 0.815338 + 0.311641 1.70974 -3.34812 -0.376733 0.12915 0.917274 + 0.311519 1.7617 -3.35095 -0.518698 0.59519 0.61376 + 0.302376 1.7471 -3.37552 -0.251226 0.674389 -0.694324 + 0.261467 1.75486 -3.37977 -0.405413 0.43226 0.805476 + 0.261467 1.75486 -3.37977 -0.508502 0.36284 -0.78088 + 0.262116 1.70196 -3.40477 -0.255932 0.424602 -0.868454 + 0.252611 1.72917 -3.38594 -0.965163 0.244672 -0.0927199 + 0.25326 1.67627 -3.41094 -0.722976 0.175062 -0.668325 + 0.250973 1.65474 -3.39333 -0.960679 -0.00159407 0.277656 + 0.261467 1.75486 -3.37977 -0.821733 0.151318 0.549415 + 0.278095 1.69156 -3.41165 -0.176609 0.433651 -0.883604 + 0.253294 1.62233 -3.42221 -0.856372 0.149487 -0.494248 + 0.251006 1.6008 -3.4046 -0.985186 -0.0272702 0.169307 + 0.275901 1.5648 -3.36241 -0.826746 -0.0530138 0.560071 + 0.272148 1.62272 -3.36558 -0.763999 0.0393004 0.64402 + 0.325381 1.71326 -3.40729 -0.0754329 0.536348 -0.840619 + 0.333165 1.6656 -3.43356 0.0310609 0.447888 -0.89355 + 0.285878 1.6439 -3.43792 -0.356144 0.377426 -0.854816 + 0.286397 1.7575 -3.36864 0.142721 0.49512 -0.857022 + 0.261467 1.75486 -3.37977 0.336333 0.405795 -0.84983 + 2.04758 1.79087 -0.419637 -0.249284 0.966606 0.0594206 + 2.06611 1.79246 -0.363198 -0.316726 0.945977 0.0693761 + 2.05691 1.78848 -0.509912 -0.00432426 0.999631 -0.0268118 + 2.03494 1.76178 -0.21826 -0.450717 0.892185 -0.0293273 + 2.0868 1.79252 -0.279496 -0.396395 0.918036 0.00894935 + 2.10728 1.79865 -0.302325 0.225013 0.960324 -0.164764 + 2.08659 1.79868 -0.385977 0.450068 0.868791 -0.206496 + 2.05691 1.78848 -0.509912 -0.298098 0.954508 -0.00716793 + 2.01641 1.76019 -0.274698 -0.646056 0.744558 0.168059 + 1.99292 1.73621 -0.301369 -0.834937 0.550078 0.0171822 + 2.05739 1.77861 -0.145405 -0.149682 0.942619 -0.298437 + 2.10924 1.80934 -0.206632 -0.48522 0.868103 -0.104686 + 2.13002 1.81455 -0.230656 0.10985 0.941445 -0.31877 + 2.01201 1.78593 -0.505683 -0.647752 0.745353 0.157689 + 1.98853 1.76195 -0.532355 -0.808373 0.563605 0.169948 + 2.05701 1.81152 -0.487006 -0.605781 0.768424 0.206288 + 2.02145 1.80658 -0.573053 -0.684981 0.658453 0.311834 + 1.95822 1.80145 -0.69817 -0.902349 0.239872 0.358089 + 1.95457 1.72805 -0.596037 -0.882649 0.420461 0.210103 + 2.05368 1.84205 -0.544286 -0.816998 0.44394 0.368009 + 2.04962 1.87449 -0.581082 -0.807561 0.34688 0.47699 + 2.01739 1.83903 -0.60986 -0.801433 0.276898 0.530125 + 2.04145 1.94214 -0.633857 -0.509342 0.297551 0.807486 + 1.99541 2.02753 -0.68675 -0.451245 0.240122 0.859488 + 1.97135 1.9245 -0.662693 -0.66393 0.110395 0.739601 + 1.99534 2.10094 -0.703895 0.0674122 0.297012 0.952491 + 1.86547 2.21636 -0.792618 -0.671514 0.080592 0.736596 + 1.84979 2.19327 -0.819613 -0.869377 -0.115087 0.480561 + 1.95567 1.90131 -0.689739 -0.912574 -0.0905374 0.398763 + 1.86541 2.28977 -0.809761 -0.103607 0.135346 0.985366 + 1.83866 2.42426 -0.82771 -0.676891 -0.0164193 0.7359 + 1.81648 2.20599 -0.877656 -0.814349 -0.118305 0.56819 + 1.93269 1.9349 -0.794719 -0.938157 -0.168725 0.302311 + 1.93524 1.83504 -0.80315 -0.745945 0.469677 0.472197 + 1.97011 2.21519 -0.731785 -0.441618 0.0311642 0.896662 + 1.94336 2.34968 -0.749733 -0.608066 -0.0518974 0.792188 + 2.02648 2.0249 -0.695197 0.977184 0.208644 0.0397491 + 2.00125 2.13916 -0.723096 0.869589 0.265344 0.416423 + 1.9866 2.29243 -0.724362 -0.495486 -0.0100094 0.868559 + 1.92042 2.52582 -0.743409 -0.584158 8.24479e-005 0.81164 + 1.86427 2.60485 -0.810302 -0.717714 0.0241957 0.695918 + 2.04085 1.94543 -0.658947 0.97875 0.0890772 -0.184696 + 2.00071 1.93192 -0.74635 0.907332 -0.018104 -0.420025 + 1.9952 2.15733 -0.756969 0.955995 0.0692947 -0.285084 + 1.98055 2.3106 -0.758235 0.964562 0.107044 -0.241166 + 1.9866 2.29243 -0.724362 0.987131 0.106805 -0.119018 + 1.96367 2.46847 -0.718087 0.967344 0.154519 -0.200921 + 2.04145 1.94214 -0.633857 0.986129 0.165973 -0.00186748 + 2.04902 1.87778 -0.606172 0.989278 -0.00254245 -0.14602 + 2.01508 1.85244 -0.710092 0.952747 -0.0137097 -0.303456 + 1.97115 1.95368 -0.81144 0.928207 0.0460719 -0.3692 + 1.96563 2.17909 -0.822059 0.910113 0.0404235 -0.412383 + 2.04962 1.87449 -0.581082 0.996867 0.0760077 -0.0218788 + 2.05358 1.81893 -0.567241 0.987726 -0.0195535 -0.154965 + 2.01964 1.79368 -0.671101 0.979189 -0.00273165 -0.202932 + 2.01547 1.73294 -0.734101 0.969893 0.14779 -0.193558 + 1.9663 1.86477 -0.850038 0.956227 0.138399 -0.257828 + 1.9045 2.14994 -0.949971 0.922767 0.0635816 -0.380076 + 2.05368 1.84205 -0.544286 0.997817 0.044314 -0.048968 + 2.05691 1.78848 -0.509912 0.984295 0.0710033 -0.161622 + 1.96367 2.46847 -0.718087 -0.561329 -0.0588435 0.825498 + 1.94728 2.53942 -0.740764 -0.15 0.105041 0.98309 + 1.93692 2.63864 -0.741815 0.92548 -0.00228058 0.37879 + 1.93078 2.6463 -0.737484 -0.10585 0.0512121 0.993062 + 1.87462 2.72542 -0.804329 -0.601269 0.302205 0.739694 + 1.84108 2.75625 -0.85193 -0.678126 0.368373 0.635961 + 1.81909 2.66232 -0.855642 -0.752589 0.108002 0.649574 + 1.93854 2.71913 -0.745837 0.949914 0.201573 0.238813 + 1.93239 2.72679 -0.741506 0.819548 0.497016 0.28516 + 1.90746 2.75606 -0.820608 0.903148 0.362832 -0.229514 + 1.90131 2.76364 -0.816327 0.21572 0.852988 0.475263 + 1.91067 2.6755 -0.81607 0.927014 0.037004 -0.373197 + 1.88433 2.6978 -0.875887 0.907588 0.0219838 -0.419285 + 1.88111 2.77836 -0.880432 0.891321 0.337764 -0.302427 + 1.94728 2.53942 -0.740764 0.955538 0.142827 -0.257968 + 1.92103 2.57619 -0.81506 0.933266 0.123653 -0.337229 + 1.8688 2.6436 -0.913422 0.901446 0.0778739 -0.42583 + 1.84788 2.75571 -0.943395 0.84028 0.151041 -0.520688 + 1.96416 2.38154 -0.780912 0.945128 0.137359 -0.296422 + 1.94617 2.36492 -0.83112 0.907722 0.112059 -0.404332 + 1.90304 2.55966 -0.865218 0.903324 0.130819 -0.408524 + 1.84113 2.55759 -0.989435 0.879284 0.090636 -0.467594 + 1.83235 2.70152 -0.98093 0.841532 0.127519 -0.52494 + 1.94017 2.29025 -0.862401 0.903979 0.0835848 -0.419328 + 1.87537 2.47364 -0.941231 0.8806 0.111494 -0.460556 + 1.82428 2.46175 -1.03645 0.878147 0.110511 -0.465451 + 1.8116 2.64031 -1.02712 0.812591 0.13374 -0.567282 + 1.87904 2.26111 -0.990322 0.876491 0.0896242 -0.473002 + 1.86936 2.39898 -0.972522 0.873941 0.123227 -0.470151 + 1.83396 2.32389 -1.05426 0.836788 0.118065 -0.534646 + 1.79476 2.54448 -1.07413 0.771538 0.117822 -0.625177 + 1.89966 2.06103 -0.988568 0.933014 0.14294 -0.330233 + 1.97308 1.77805 -0.900439 0.956211 0.154462 -0.2486 + 1.90809 1.96695 -1.02102 0.929627 0.168928 -0.3275 + 1.84003 2.13082 -1.11226 0.842112 0.187269 -0.505745 + 1.8316 2.22491 -1.07981 0.875838 0.165954 -0.453175 + 1.77241 2.45597 -1.10923 0.711894 0.120935 -0.691796 + 2.02224 1.64622 -0.784511 0.954705 0.186192 -0.232099 + 1.96957 1.69115 -0.948727 0.945285 0.131515 -0.298563 + 1.90458 1.88014 -1.06926 0.898545 0.12779 -0.419866 + 1.83533 2.04015 -1.14441 0.814819 0.165328 -0.555641 + 2.05874 1.57734 -0.692196 0.955637 0.220504 -0.195282 + 2.06228 1.48826 -0.746906 0.959337 0.133581 -0.248655 + 2.02579 1.55705 -0.839262 0.947982 0.153683 -0.278768 + 1.96564 1.60198 -0.996678 0.927121 0.126419 -0.352796 + 2.04671 1.65056 -0.619819 0.961811 0.219504 -0.163514 + 2.0836 1.60426 -0.499617 0.944556 0.227231 -0.237024 + 2.09564 1.53103 -0.571994 0.962523 0.206975 -0.175247 + 2.09122 1.45139 -0.640447 0.975894 0.0889762 -0.199283 + 2.06073 1.38864 -0.790966 0.960789 0.118105 -0.250872 + 2.05087 1.7113 -0.556819 0.97071 0.08963 -0.222909 + 2.08045 1.67933 -0.46125 0.941754 0.153503 -0.299225 + 2.13379 1.6011 -0.367149 0.923814 0.167903 -0.34406 + 2.12301 1.50724 -0.430988 0.935587 0.191822 -0.296449 + 2.11859 1.42768 -0.499382 0.982869 0.038253 -0.180294 + 1.30253 1.11291 -1.43659 -0.820237 0.429347 0.377985 + 1.24544 1.07804 -1.44958 -0.173027 -0.082297 0.981473 + 1.26037 1.02438 -1.45144 -0.700595 -0.0458828 0.712082 + 1.3426 1.16556 -1.41618 -0.820964 0.52714 0.219409 + 1.3456 1.16561 -1.50585 -0.810721 0.564313 -0.155826 + 1.26874 1.04947 -1.46391 -0.478295 0.655899 -0.583979 + 1.24544 1.07804 -1.44958 -0.0479991 0.416655 -0.907797 + 1.33891 1.09936 -1.36652 -0.778355 0.197498 0.595952 + 1.39323 1.22173 -1.37206 -0.831872 0.518805 0.197055 + 1.38567 1.21834 -1.48539 -0.718961 0.690609 -0.078447 + 1.40949 1.225 -1.56412 -0.608212 0.750192 -0.259402 + 1.35337 1.16552 -1.5321 -0.822267 0.493318 -0.28375 + 1.31526 1.03417 -1.3908 -0.737079 -0.00556368 0.675784 + 1.38245 1.00039 -1.32068 -0.741638 0.0431278 0.669412 + 1.38954 1.15545 -1.32246 -0.800763 0.189376 0.568257 + 1.42804 1.26844 -1.32856 -0.874294 0.46343 0.144372 + 1.42592 1.25813 -1.43972 -0.71915 0.690669 -0.0761482 + 1.31912 0.885883 -1.39596 -0.743856 -0.0551313 0.666062 + 1.3588 0.935104 -1.34501 -0.759096 -0.0387793 0.649823 + 1.43222 0.938435 -1.25338 -0.792483 -0.0251114 0.609377 + 1.41032 1.07485 -1.29766 -0.756665 0.0477295 0.652058 + 1.26424 0.876179 -1.45655 -0.712912 -0.0276757 0.700707 + 1.36481 0.824607 -1.35122 -0.73417 -0.1549 0.66106 + 1.40449 0.873828 -1.30028 -0.767333 -0.0822381 0.635953 + 1.15338 0.931117 -1.57811 -0.750803 -0.0925044 0.654017 + 1.20752 0.861958 -1.50692 -0.735522 0.00278936 0.677495 + 1.26447 0.772444 -1.46028 -0.702389 -0.306301 0.642518 + 1.32119 0.786574 -1.40995 -0.694927 -0.0859872 0.713921 + 1.22106 1.06807 -1.48272 -0.270686 -0.808357 0.522769 + 1.11407 0.974727 -1.60944 -0.586119 -0.266673 0.765082 + 1.05745 0.968945 -1.65383 -0.630711 -0.550673 0.546775 + 1.05439 0.957346 -1.67294 -0.687817 -0.547951 0.476085 + 1.08013 0.917146 -1.67951 -0.745556 -0.464935 0.477475 + 1.10835 0.891593 -1.64305 -0.853496 -0.242545 0.461212 + 1.24544 1.07804 -1.44958 -0.749579 -0.230172 0.620607 + 1.09292 1.01632 -1.59089 -0.442721 -0.5433 0.713318 + 1.03631 1.01054 -1.63527 -0.630817 -0.110333 0.768048 + 0.994771 1.04413 -1.66085 -0.78387 0.19825 0.588425 + 0.99171 1.03263 -1.67992 -0.876001 -0.285815 0.3885 + 1.0238 0.965114 -1.71099 -0.78903 -0.517803 0.330622 + 1.04954 0.924914 -1.71756 -0.744273 -0.545269 0.385667 + 1.05009 1.03581 -1.64904 -0.0977583 0.735303 0.670651 + 1.00856 1.06949 -1.67458 -0.238031 0.660262 0.712317 + 0.969315 1.06119 -1.7084 -0.895747 -0.067017 0.439483 + 1.00141 0.993682 -1.73947 -0.883995 -0.467468 0.00506182 + 1.03953 0.916941 -1.75575 -0.845507 -0.492238 0.206931 + 1.09292 1.01632 -1.59089 -0.526645 0.609847 0.592227 + 0.806559 1.32541 -2.88944 -0.558204 0.564681 0.607901 + 0.806972 1.30427 -2.86942 -0.220093 0.648024 0.729126 + 0.831275 1.27798 -2.82269 -0.239099 0.870245 0.430704 + 0.815389 1.28112 -2.84272 -0.396157 0.70014 0.594023 + 0.812282 1.24475 -2.75953 -0.423957 0.774806 0.468974 + 0.829082 1.2376 -2.73315 -0.299861 0.753459 0.585134 + 0.855869 1.243 -2.7345 -0.191148 0.859784 0.473533 + 0.858063 1.28346 -2.82399 -0.122556 0.90488 0.407643 + 0.81342 1.32127 -2.91208 0.211659 0.926348 0.311577 + 0.765252 1.25011 -2.81322 -0.382628 0.700336 0.602599 + 0.796396 1.24789 -2.77957 -0.449154 0.757355 0.473998 + 0.781786 1.22053 -2.76578 -0.686583 0.412622 0.59862 + 0.802751 1.21632 -2.7361 -0.700208 0.441925 0.560724 + 0.819551 1.20909 -2.70976 -0.648239 0.537428 0.539405 + 0.756835 1.27327 -2.83993 -0.167237 0.642949 0.747428 + 0.740141 1.25385 -2.8313 -0.857479 0.332431 0.392708 + 0.750642 1.22267 -2.79949 -0.816389 0.242884 0.523943 + 0.767105 1.18344 -2.77254 -0.824546 0.0466552 0.563868 + 0.78807 1.17924 -2.74286 -0.819109 0.139 0.556543 + 0.762815 1.34027 -2.88619 -0.0796048 0.626757 0.775138 + 0.746121 1.32086 -2.87756 -0.629411 0.51735 0.579819 + 0.740144 1.22732 -2.83495 -0.942062 0.0918383 0.322623 + 0.750645 1.19614 -2.80314 -0.901227 -0.0012949 0.433346 + 0.806559 1.32541 -2.88944 0.277143 0.663466 0.694985 + 0.762402 1.36142 -2.90621 0.399341 0.900846 0.170304 + 0.743612 1.36243 -2.90876 -0.346555 0.794944 0.49796 + 0.740452 1.32252 -2.89143 -0.730302 0.393102 0.558686 + 0.734475 1.22898 -2.84882 -0.875732 0.197576 0.44052 + 0.723961 1.18408 -2.85365 -0.889039 0.00510389 0.457803 + 0.744275 1.16953 -2.81506 -0.892096 -0.0712825 0.446188 + 0.753638 1.36216 -2.9173 0.381278 0.849204 -0.365348 + 0.734848 1.36318 -2.91986 -0.569972 0.815532 -0.100198 + 0.722285 1.30336 -2.90405 -0.837144 0.290727 0.463323 + 0.719125 1.26344 -2.88671 -0.835075 0.246424 0.491858 + 0.708611 1.21854 -2.89154 -0.884514 0.135836 0.4463 + 0.806559 1.32541 -2.88944 0.644271 0.471065 -0.602504 + 0.747443 1.35908 -2.92595 0.241799 0.709465 -0.661961 + 0.723498 1.34021 -2.93208 -0.826675 0.559168 -0.0627738 + 0.710935 1.28039 -2.91626 -0.938589 0.231137 0.256177 + 0.697968 1.23703 -2.92117 -0.93935 0.23392 0.250806 + 0.686418 1.1672 -2.92422 -0.870361 0.079408 0.48597 + 0.739216 1.34428 -2.94413 -0.163885 0.944227 -0.285616 + 0.715271 1.32541 -2.95025 -0.82395 0.547343 -0.146702 + 0.70882 1.27688 -2.94239 -0.972672 0.20551 0.108054 + 0.695853 1.23354 -2.94732 -0.926637 0.334136 0.172329 + 0.675775 1.18578 -2.9538 -0.814374 0.323878 0.481558 + 0.752272 1.34314 -2.95816 -0.0644487 0.976553 0.205405 + 0.690081 1.32223 -2.99214 -0.707555 0.426026 0.563797 + 0.710462 1.31384 -2.964 -0.868745 0.257874 0.422828 + 0.704011 1.26531 -2.95615 -0.936897 0.25001 0.244376 + 0.692091 1.2342 -2.95767 -0.832678 0.327486 0.446542 + 0.799768 1.35538 -2.98155 0.107882 0.95339 0.281796 + 0.777883 1.36636 -3.02257 0.0510507 0.987437 0.149539 + 0.730388 1.35412 -2.99916 -0.288904 0.894992 0.339889 + 0.850375 1.31449 -2.91732 0.271329 0.876976 0.396602 + 0.836722 1.34868 -2.98676 0.296147 0.940715 0.165382 + 0.846376 1.34513 -3.0218 0.399249 0.901544 -0.166789 + 0.877136 1.30123 -2.90596 0.240545 0.961887 0.130045 + 0.899954 1.31617 -2.97904 0.441076 0.886789 0.13805 + 0.909608 1.31262 -3.01408 0.576954 0.801029 -0.159614 + 0.882594 1.29958 -2.8801 0.154256 0.985508 0.070555 + 0.943709 1.29575 -2.94127 0.33275 0.942986 -0.0074522 + 0.926715 1.30291 -2.96768 0.404418 0.914238 0.0247991 + 0.949318 1.28643 -2.99374 0.662062 0.702712 -0.260518 + 0.933412 1.29065 -3.02023 0.658798 0.675252 -0.331691 + 0.880748 1.29581 -2.84857 0.00134481 0.960866 0.277012 + 0.948567 1.29623 -2.86431 0.221952 0.974397 0.0358988 + 0.949168 1.29402 -2.91547 0.27578 0.961148 -0.0118441 + 0.98106 1.27856 -2.92569 0.794983 0.59719 -0.106617 + 0.966312 1.27927 -2.96733 0.745938 0.617867 -0.248628 + 0.941826 1.27882 -2.78935 0.141964 0.885366 0.442689 + 0.94672 1.29238 -2.83283 0.161147 0.960719 0.225943 + 0.988214 1.27832 -2.83389 0.526555 0.833225 0.168746 + 0.980459 1.28078 -2.87453 0.531262 0.843032 -0.084012 + 0.91914 1.26648 -2.76477 -0.0257045 0.917182 0.397638 + 0.983319 1.26477 -2.79041 0.361393 0.848285 0.387051 + 1.01994 1.25288 -2.85401 0.681815 0.720368 -0.127269 + 1.01218 1.25533 -2.89466 0.720218 0.629439 -0.291707 + 0.986984 1.24749 -2.93948 0.842663 0.395526 -0.365346 + 0.878192 1.22829 -2.69583 -0.202904 0.896 0.394987 + 0.941463 1.25178 -2.72611 -0.0217896 0.928727 0.370124 + 1.0015 1.25512 -2.76769 0.171379 0.98227 -0.0759961 + 1.00108 1.25237 -2.77993 0.335067 0.941782 0.0278619 + 1.0373 1.24602 -2.83274 0.59118 0.795722 -0.131652 + 0.862039 1.21597 -2.67048 -0.353989 0.860613 0.366111 + 0.94738 1.22467 -2.66936 -0.0527854 0.921491 0.384797 + 0.986856 1.22901 -2.68127 0.106088 0.863739 0.492647 + 0.98094 1.25611 -2.73802 0.0255142 0.986986 0.158767 + 0.835042 1.19344 -2.67006 -0.74745 0.498613 0.43898 + 0.876853 1.2022 -2.62483 -0.346184 0.878847 0.328306 + 0.931226 1.21225 -2.64405 -0.0962557 0.94093 0.324631 + 0.82485 1.16142 -2.67061 -0.895127 0.240871 0.375138 + 0.834107 1.13159 -2.62274 -0.899956 0.25666 0.352427 + 0.849856 1.17976 -2.62437 -0.76307 0.514633 0.390995 + 0.883468 1.19496 -2.5945 -0.413403 0.867205 0.277585 + 0.80936 1.17716 -2.71027 -0.851487 0.194764 0.486864 + 0.798097 1.1421 -2.72174 -0.884447 0.0911255 0.457656 + 0.814874 1.13507 -2.68037 -0.920936 0.169296 0.351021 + 0.824131 1.10524 -2.6325 -0.941854 0.0956495 0.322121 + 0.846683 1.11699 -2.58144 -0.850833 0.157033 0.501421 + 0.776807 1.14418 -2.75434 -0.852351 -0.114855 0.510201 + 0.762373 1.12165 -2.79273 -0.893641 -0.0200451 0.448335 + 0.791705 1.10019 -2.72515 -0.910796 0.0867619 0.403637 + 0.808482 1.09317 -2.68378 -0.932208 0.0815051 0.352626 + 0.760734 1.15684 -2.78447 -0.883749 -0.0639518 0.463571 + 0.7463 1.13431 -2.82285 -0.896797 -0.147159 0.417252 + 0.725986 1.14877 -2.86149 -0.873084 -0.0543001 0.484537 + 0.758251 0.991941 -2.78005 -0.907306 0.0560661 0.416715 + 0.686176 1.06194 -2.9165 -0.78003 0.0929665 0.618797 + 0.725744 1.0435 -2.85377 -0.873127 0.0417324 0.485704 + 0.763945 0.810468 -2.75313 -0.950184 0.00335823 0.311672 + 0.784835 0.713102 -2.65509 -0.955928 0.0222523 0.292757 + 0.787583 0.970479 -2.71248 -0.910953 0.083724 0.403924 + 0.647707 1.18379 -2.99095 -0.728875 0.242059 0.640429 + 0.636951 1.07292 -2.96692 -0.694806 0.166539 0.69965 + 0.691375 0.908283 -2.88575 -0.756229 0.0722199 0.650309 + 0.731438 0.862037 -2.82686 -0.863858 0.0379043 0.502307 + 0.664024 1.23221 -2.99482 -0.723184 0.293507 0.625187 + 0.596155 1.19695 -3.04635 -0.673594 0.289111 0.68021 + 0.585399 1.08609 -3.02232 -0.667304 0.215735 0.712857 + 0.642151 0.919266 -2.93618 -0.575568 0.139635 0.805744 + 0.70025 1.26598 -2.9665 -0.839475 0.242667 0.486205 + 0.679869 1.27438 -2.99465 -0.749496 0.213944 0.626485 + 0.619842 1.24071 -3.04454 -0.695664 0.306045 0.649913 + 0.646435 1.3151 -3.04898 -0.703495 0.439975 0.558137 + 0.635687 1.28288 -3.04437 -0.711662 0.302413 0.6341 + 0.595684 1.25431 -3.07788 -0.749735 0.353766 0.559238 + 0.571997 1.21055 -3.0797 -0.599589 0.478256 0.641689 + 0.539081 1.20411 -3.10155 -0.588134 0.349215 0.729484 + 0.700087 1.3477 -3.01025 -0.44719 0.793062 0.413609 + 0.65644 1.34066 -3.06706 -0.487157 0.766258 0.418959 + 0.620873 1.3181 -3.08259 -0.722537 0.40748 0.558481 + 0.610125 1.28579 -3.07802 -0.767265 0.342722 0.542076 + 0.695376 1.35868 -3.08727 -0.190913 0.952482 0.23734 + 0.681277 1.36645 -3.11213 -0.00826762 0.927968 0.372568 + 0.642341 1.34843 -3.09191 -0.327128 0.66882 0.667583 + 0.620269 1.32826 -3.09077 -0.689576 0.437648 0.577018 + 0.725677 1.3651 -3.07618 -0.152684 0.988161 0.0150318 + 0.748237 1.36493 -3.10089 0.0761242 0.996453 -0.0358613 + 0.663343 1.37105 -3.12769 0.0609541 0.975168 0.212913 + 0.644497 1.37624 -3.10808 0.00601558 0.829783 0.558054 + 0.622425 1.35607 -3.10695 -0.496327 0.447925 0.743655 + 0.800443 1.36619 -3.04727 0.297307 0.947271 0.119521 + 0.820561 1.35346 -3.09762 0.331798 0.939532 -0.0847929 + 0.822392 1.35025 -3.13007 0.374969 0.924829 -0.0639524 + 0.750068 1.36172 -3.13333 0.190851 0.981604 0.00546958 + 0.665156 1.37844 -3.1423 -0.0203897 0.8774 0.479326 + 0.828296 1.3515 -3.05063 0.6188 0.741501 0.25935 + 0.848414 1.33877 -3.10098 0.805762 0.588042 0.070385 + 0.850536 1.32721 -3.13796 0.842903 0.519016 -0.141902 + 0.842038 1.33793 -3.14952 0.74284 0.660398 -0.109829 + 0.807773 1.35332 -3.17718 0.344728 0.936776 -0.0601094 + 0.836077 1.34062 -3.04639 0.604754 0.788035 -0.11521 + 0.859362 1.30741 -3.11426 0.91799 0.389819 -0.0730424 + 0.861484 1.29584 -3.15123 0.961286 0.169616 -0.217163 + 0.83701 1.30443 -3.1987 0.873634 0.162979 -0.458477 + 0.828512 1.31515 -3.21027 0.75927 0.18011 -0.625355 + 0.879112 1.29481 -3.08344 0.728265 0.590416 -0.347906 + 0.867142 1.29652 -3.11001 0.798194 0.500449 -0.335318 + 0.860707 1.25354 -3.15315 0.892924 0.028105 -0.449329 + 0.836233 1.26212 -3.20062 0.782612 -0.115591 -0.611683 + 0.889411 1.29932 -3.05886 0.549736 0.69309 -0.466278 + 0.892395 1.25566 -3.09584 0.842981 0.215754 -0.492781 + 0.880425 1.25738 -3.12241 0.85511 0.189574 -0.482544 + 0.871592 1.18768 -3.12529 0.826093 -0.0241988 -0.563014 + 0.913215 1.27735 -3.065 0.517098 0.497921 -0.696193 + 0.906593 1.25503 -3.07875 0.672367 0.222181 -0.706087 + 0.891311 1.19161 -3.0945 0.821475 0.0304554 -0.56943 + 0.940599 1.25994 -3.04386 0.782028 0.31206 -0.539492 + 0.933976 1.23772 -3.05755 0.724393 0.0474008 -0.687756 + 0.905509 1.19098 -3.0774 0.736723 -0.0626343 -0.673287 + 0.924853 1.16125 -3.05211 0.757926 0.092378 -0.645767 + 0.956505 1.25574 -3.01736 0.845158 0.315706 -0.431321 + 0.953321 1.20799 -3.03226 0.76822 -0.0603313 -0.637336 + 0.972236 1.24811 -2.98116 0.901768 0.285438 -0.324561 + 0.983819 1.212 -2.97801 0.900292 0.21221 -0.380053 + 0.968088 1.21962 -3.01421 0.840211 0.113884 -0.530165 + 0.986052 1.14559 -2.97619 0.802296 0.138504 -0.580635 + 0.997624 1.21503 -2.94985 0.843359 0.255684 -0.472622 + 1.00082 1.15722 -2.95813 0.852129 -0.0160561 -0.523085 + 1.04075 1.13677 -2.8959 0.805804 0.287854 -0.517514 + 1.06735 1.08183 -2.90755 0.720687 0.549714 -0.422402 + 1.00278 1.09979 -2.98406 0.711893 0.501873 -0.491254 + 1.02282 1.22287 -2.90504 0.844313 0.311891 -0.435729 + 1.01462 1.16025 -2.92998 0.854996 0.182781 -0.485358 + 1.04895 1.19939 -2.87097 0.81289 0.314196 -0.490399 + 1.09691 1.11595 -2.82104 0.799905 0.313031 -0.512019 + 1.1235 1.06101 -2.83269 0.698799 0.586245 -0.409874 + 1.06631 1.19254 -2.84971 0.784574 0.301124 -0.542004 + 1.0807 1.1925 -2.82743 0.779574 0.356129 -0.515206 + 1.1113 1.11582 -2.79883 0.772065 0.249808 -0.58439 + 1.1847 1.04322 -2.75687 0.678877 0.638404 -0.36272 + 1.05505 1.23363 -2.82227 0.652053 0.745352 -0.138843 + 1.06865 1.22229 -2.81203 0.601831 0.737651 -0.306056 + 1.0943 1.18108 -2.81725 0.665882 0.147786 -0.731274 + 1.10832 1.18096 -2.80125 0.812738 0.211133 -0.543028 + 1.12532 1.1158 -2.78279 0.809449 0.228221 -0.541025 + 1.06907 1.22495 -2.79984 0.367358 0.878654 -0.304985 + 1.10091 1.21132 -2.79184 0.684034 0.566983 -0.458941 + 1.12906 1.16266 -2.76575 0.890237 0.221544 -0.397991 + 1.153 1.14253 -2.72549 0.880135 0.277413 -0.385233 + 1.14926 1.09558 -2.74257 0.83547 0.384426 -0.392692 + 1.05669 1.24472 -2.77308 0.276617 0.938121 -0.208355 + 1.08853 1.23109 -2.76508 0.445763 0.880753 -0.159903 + 1.11572 1.21894 -2.74322 0.682791 0.714263 -0.153706 + 1.12164 1.19301 -2.75633 0.889767 0.334273 -0.310767 + 1.13784 1.18449 -2.71436 0.893461 0.379847 -0.239673 + 1.03613 1.2458 -2.74336 0.212104 0.949005 0.23324 + 1.06359 1.23826 -2.73789 0.240886 0.954662 0.174915 + 1.09078 1.2261 -2.71603 0.235643 0.96309 0.130119 + 1.13191 1.21041 -2.70125 0.770303 0.634702 -0.0615336 + 1.01432 1.22146 -2.67579 0.0882708 0.964511 0.24885 + 1.02305 1.21805 -2.64968 -0.0348986 0.987771 0.151954 + 1.09952 1.22269 -2.68993 0.187654 0.98196 0.023254 + 1.13078 1.21224 -2.64523 0.590672 0.806697 -0.0186057 + 0.990116 1.20637 -2.60766 -0.0839998 0.956858 0.27815 + 1.09838 1.22452 -2.6339 0.133558 0.981804 0.134998 + 1.14095 1.20304 -2.60229 0.560528 0.825679 0.0637312 + 1.15267 1.18141 -2.66743 0.839699 0.516898 -0.166499 + 1.16783 1.13946 -2.67856 0.864399 0.43995 -0.243429 + 0.937842 1.20493 -2.61377 -0.0585684 0.963529 0.261115 + 0.948539 1.19817 -2.59145 -0.0251799 0.950696 0.309101 + 0.967912 1.176 -2.52145 -0.158938 0.929052 0.334067 + 1.06545 1.21285 -2.59188 -0.0449399 0.973614 0.22373 + 0.888448 1.18672 -2.54942 -0.422628 0.850001 0.314456 + 0.899145 1.17995 -2.5271 -0.25357 0.831593 0.494121 + 0.926335 1.16779 -2.50524 0.0118262 0.734204 0.678827 + 0.91171 1.13684 -2.48263 -0.594806 0.556296 0.580294 + 0.982868 1.16997 -2.4862 -0.272244 0.949284 0.157298 + 0.862432 1.16515 -2.58306 -0.843803 0.424433 0.32841 + 0.867412 1.15699 -2.53792 -0.891763 0.293355 0.34453 + 0.88452 1.14899 -2.50448 -0.688939 0.341354 0.639406 + 0.867952 1.10422 -2.55012 -0.888783 0.00310142 0.458318 + 0.885061 1.09631 -2.51663 -0.911197 0.0305639 0.410835 + 0.90077 1.09393 -2.4795 -0.894608 0.159997 0.417226 + 0.834743 1.0821 -2.60222 -0.891384 -0.190872 0.411099 + 0.856012 1.06933 -2.5709 -0.882663 0.107983 0.457434 + 0.876887 1.05242 -2.51521 -0.889029 0.231324 0.395115 + 0.892596 1.05004 -2.47808 -0.906558 0.266655 0.32718 + 0.91422 1.0936 -2.44394 -0.947581 0.260035 0.185669 + 0.819094 1.07002 -2.65349 -0.937619 0.0156662 0.347312 + 0.842512 1.04608 -2.58462 -0.910644 0.16722 0.377843 + 0.863387 1.02917 -2.52894 -0.913336 0.175327 0.367529 + 0.813708 0.928872 -2.64202 -0.924804 0.0743181 0.373113 + 0.837126 0.904844 -2.5732 -0.934105 0.0506815 0.353383 + 0.862232 0.8689 -2.50514 -0.94576 0.0402809 0.322359 + 0.882186 1.00437 -2.45918 -0.948184 0.169656 0.268635 + 0.81096 0.671494 -2.58463 -0.884844 0.0459353 0.463618 + 0.843492 0.617564 -2.52622 -0.916776 -0.0154819 0.399102 + 0.868597 0.581615 -2.45815 -0.939481 -0.0542891 0.338273 + 0.895077 0.562532 -2.3843 -0.94922 -0.0924291 0.300729 + 0.881031 0.844101 -2.43539 -0.959831 0.0229515 0.279638 + 0.79294 0.560906 -2.64128 -0.964058 -0.194843 0.180632 + 0.83036 0.496081 -2.5744 -0.916484 -0.257982 0.30578 + 0.862892 0.442151 -2.51599 -0.888344 -0.401692 0.22246 + 0.904768 0.409989 -2.44929 -0.843064 -0.467362 0.26611 + 0.77205 0.658362 -2.73928 -0.947906 -0.0393929 0.316105 + 0.820585 0.480402 -2.67264 -0.918146 -0.32715 0.223562 + 0.858005 0.415578 -2.60577 -0.845312 -0.436601 0.307939 + 0.910705 0.378083 -2.54642 -0.788636 -0.563118 0.246883 + 0.95258 0.345927 -2.47973 -0.717796 -0.629482 0.297525 + 0.736264 0.710197 -2.81106 -0.863871 0.00460857 0.503692 + 0.77928 0.535043 -2.72769 -0.877255 -0.146152 0.457235 + 0.81956 0.390287 -2.77676 -0.846957 -0.394571 0.35634 + 0.860865 0.33565 -2.72173 -0.84238 -0.459432 0.281633 + 0.911098 0.308272 -2.65471 -0.765361 -0.534496 0.358521 + 0.696201 0.756447 -2.86997 -0.789895 0.0132344 0.613099 + 0.743494 0.586878 -2.79947 -0.898543 -0.126245 0.420337 + 0.771455 0.415147 -2.84922 -0.854741 -0.354118 0.379497 + 0.873381 0.196486 -2.86869 -0.750353 -0.520508 0.407482 + 0.930101 0.177676 -2.79671 -0.746588 -0.556319 0.364849 + 0.650257 0.756918 -2.92238 -0.542823 0.0236162 0.839515 + 0.701816 0.617653 -2.86977 -0.822584 -0.154655 0.547208 + 0.729778 0.44592 -2.91952 -0.828065 -0.328785 0.454102 + 0.825276 0.221345 -2.94114 -0.789122 -0.464703 0.401669 + 0.592856 0.721468 -2.93838 -0.499686 -0.0680936 0.863526 + 0.655872 0.618129 -2.92219 -0.684809 -0.242747 0.687103 + 0.682178 0.444467 -2.9922 -0.710059 -0.376243 0.595196 + 0.772757 0.219313 -3.03282 -0.742349 -0.477129 0.470389 + 0.58475 0.88381 -2.95217 -0.50823 0.150182 0.848026 + 0.542083 0.679823 -2.98485 -0.612835 -0.169475 0.771824 + 0.607761 0.585761 -2.98813 -0.565869 -0.370678 0.736471 + 0.634068 0.412018 -3.0582 -0.638313 -0.416062 0.647649 + 0.725157 0.217773 -3.10556 -0.701475 -0.491603 0.516004 + 0.531513 1.06108 -3.0644 -0.625987 0.244037 0.740667 + 0.530865 0.858806 -2.99426 -0.704745 0.0984981 0.70259 + 0.494928 0.617412 -3.03835 -0.574625 -0.195356 0.794759 + 0.556988 0.544116 -3.0346 -0.399929 -0.435911 0.806249 + 0.582788 0.389107 -3.12352 -0.468106 -0.495807 0.731473 + 0.470823 1.0643 -3.11199 -0.632253 0.192894 0.750366 + 0.48371 0.796392 -3.04775 -0.713334 0.0518902 0.698901 + 0.440181 0.567976 -3.08593 -0.514652 -0.195692 0.834768 + 0.505421 0.495836 -3.08818 -0.369874 -0.45455 0.810295 + 0.531221 0.340828 -3.17709 -0.408243 -0.546315 0.731353 + 0.478391 1.20726 -3.14919 -0.548683 0.279114 0.788062 + 0.411206 1.20736 -3.19318 -0.520528 0.281555 0.806087 + 0.413563 1.03519 -3.15817 -0.588014 0.157852 0.793298 + 0.42645 0.767278 -3.09393 -0.644101 0.0580872 0.762732 + 0.550071 1.24921 -3.12146 -0.519171 0.346405 0.781323 + 0.508176 1.25605 -3.1455 -0.506641 0.261836 0.821436 + 0.477073 1.2723 -3.17425 -0.587973 0.245212 0.770817 + 0.447288 1.22359 -3.17789 -0.531353 0.351651 0.770718 + 0.582987 1.25574 -3.09956 -0.674543 0.373596 0.636724 + 0.571491 1.29953 -3.12541 -0.507356 0.253325 0.82366 + 0.529596 1.30636 -3.14945 -0.481966 0.213162 0.849865 + 0.484204 1.31017 -3.17625 -0.550425 0.128092 0.825 + 0.441119 1.27996 -3.20792 -0.542797 0.227698 0.808409 + 0.597427 1.28713 -3.09974 -0.7191 0.364049 0.591914 + 0.596824 1.29737 -3.10787 -0.628685 0.382611 0.677026 + 0.597092 1.35823 -3.12449 -0.481094 0.399942 0.780125 + 0.540536 1.34948 -3.15254 -0.452757 0.341733 0.823547 + 0.495144 1.35338 -3.17928 -0.367877 0.431313 0.823793 + 0.626563 1.38075 -3.12369 -0.14922 0.981271 0.121821 + 0.570007 1.37209 -3.15169 -0.326274 0.763485 0.557347 + 0.57182 1.37949 -3.16631 -0.243952 0.853876 0.459764 + 0.535893 1.3848 -3.19771 -0.279474 0.862132 0.422637 + 0.501026 1.37766 -3.19754 -0.156716 0.805888 0.57095 + 0.45252 1.35984 -3.19848 -0.478666 0.263273 0.837595 + 0.44825 1.31783 -3.20992 -0.624181 0.036017 0.780449 + 0.633806 1.40745 -3.18594 -0.0523282 0.941843 0.331954 + 0.597879 1.41285 -3.21729 -0.0988632 0.983253 0.153097 + 0.521536 1.39995 -3.26795 -0.0862199 0.988228 0.126376 + 0.486669 1.39281 -3.26778 -0.0158785 0.905248 0.424587 + 0.458403 1.38412 -3.21674 -0.0611349 0.828436 0.556737 + 0.700704 1.3806 -3.14983 0.250097 0.725419 0.641263 + 0.669354 1.40969 -3.19342 0.176446 0.978852 0.103515 + 0.661598 1.4 -3.24124 0.286453 0.924849 -0.250197 + 0.618248 1.4097 -3.25283 0.145553 0.969154 -0.198883 + 0.730432 1.36816 -3.14988 0.2606 0.938643 0.225912 + 0.714159 1.38846 -3.19644 0.406331 0.913714 0.00464153 + 0.706403 1.37868 -3.24431 0.491951 0.764685 -0.416222 + 0.660643 1.36268 -3.328 0.50912 0.763275 -0.397754 + 0.617293 1.37238 -3.33959 0.229824 0.91507 -0.331403 + 0.788137 1.35976 -3.19374 0.343841 0.933367 -0.102948 + 0.743887 1.37593 -3.19654 0.374091 0.927254 -0.0159809 + 0.759644 1.36237 -3.21786 0.387649 0.740591 -0.548865 + 0.734897 1.36508 -3.22996 0.517085 0.301449 -0.801094 + 0.695527 1.3494 -3.28519 0.733434 0.436486 -0.521109 + 0.803894 1.3462 -3.21505 0.433349 0.670951 -0.601692 + 0.775423 1.33123 -3.23053 0.314749 0.335889 -0.887756 + 0.750676 1.33395 -3.24263 0.569269 0.372345 -0.733002 + 0.724021 1.3358 -3.27084 0.611058 0.356967 -0.706528 + 0.827419 1.341 -3.19664 0.711096 0.602111 -0.363049 + 0.804987 1.32035 -3.22868 0.406684 0.242789 -0.880717 + 0.81049 1.2834 -3.23168 0.467265 -0.0275923 -0.883687 + 0.780926 1.29429 -3.23354 0.308523 0.0410823 -0.950329 + 0.758508 1.28489 -3.24767 0.632447 0.0881508 -0.769572 + 0.731854 1.28674 -3.27587 0.743752 0.149028 -0.651632 + 0.798461 1.22376 -3.22077 0.579906 -0.132253 -0.803877 + 0.776043 1.21436 -3.2349 0.635483 -0.0263831 -0.771664 + 0.74007 1.21133 -3.26986 0.755918 0.0101932 -0.654586 + 0.711436 1.20857 -3.31008 0.83955 0.00589757 -0.543251 + 0.70322 1.28398 -3.31609 0.874413 0.145166 -0.462957 + 0.824204 1.20238 -3.18975 0.7643 -0.100354 -0.637004 + 0.831356 1.13163 -3.18461 0.732241 -0.0189649 -0.680782 + 0.792498 1.14151 -3.21772 0.668946 -0.0403856 -0.742213 + 0.756525 1.13848 -3.25267 0.719142 -0.0116432 -0.694766 + 0.729949 1.09364 -3.2816 0.792301 -0.0141198 -0.609967 + 0.878744 1.11684 -3.12019 0.692636 0.2474 -0.677532 + 0.844468 1.01909 -3.16388 0.461867 0.136264 -0.876419 + 0.805611 1.02897 -3.19699 0.673932 0.0307018 -0.738155 + 0.779035 0.984124 -3.22592 0.675871 0.0635502 -0.734275 + 0.941584 1.11545 -3.05998 0.680165 0.47123 -0.561531 + 0.906005 1.05988 -3.15032 0.331442 0.398504 -0.855185 + 0.924277 0.952189 -3.16241 0.39304 0.121718 -0.91143 + 0.862741 0.911406 -3.17596 0.374121 0.163141 -0.912918 + 0.968845 1.05849 -3.09012 0.674047 0.449019 -0.586552 + 0.981885 0.970858 -3.11574 0.682698 0.185786 -0.706687 + 0.924354 0.819293 -3.17382 0.552254 0.13559 -0.822576 + 1.03934 1.04783 -3.00726 0.702325 0.486809 -0.519381 + 1.05238 0.960199 -3.03288 0.733141 0.228749 -0.640452 + 1.04096 0.835847 -3.07489 0.691687 0.109127 -0.713905 + 0.981962 0.837958 -3.12715 0.636854 0.0708287 -0.767724 + 1.1039 1.02987 -2.93075 0.705609 0.53323 -0.46667 + 1.14424 0.938086 -2.94017 0.730665 0.282997 -0.621322 + 1.10361 0.92803 -2.98836 0.712472 0.205664 -0.670884 + 1.09219 0.803672 -3.03036 0.669875 0.166967 -0.723457 + 1.03949 0.728479 -3.08773 0.5943 0.106962 -0.797099 + 1.171 1.00422 -2.86553 0.681395 0.559318 -0.472085 + 1.21134 0.912432 -2.87494 0.719467 0.23453 -0.653729 + 1.24475 0.789843 -2.86081 0.760583 0.196185 -0.61889 + 1.1949 0.799574 -2.92747 0.76117 0.227231 -0.607443 + 1.15427 0.789519 -2.97565 0.701597 0.205424 -0.682322 + 1.23221 0.986422 -2.7897 0.675687 0.613269 -0.409082 + 1.26662 0.915059 -2.81249 0.725456 0.341597 -0.597516 + 1.30003 0.792556 -2.79831 0.599488 0.116832 -0.791811 + 1.2762 0.695953 -2.85739 0.73175 0.312722 -0.605597 + 1.23602 1.03286 -2.68113 0.655973 0.688321 -0.309698 + 1.30144 0.975091 -2.69707 0.660996 0.64522 -0.383112 + 1.33585 0.903728 -2.71987 0.695777 0.480519 -0.53385 + 1.34461 0.824924 -2.77497 0.613318 0.243218 -0.751456 + 1.20058 1.08523 -2.66683 0.805471 0.497716 -0.321706 + 1.2355 1.07169 -2.57379 0.715248 0.670455 -0.197257 + 1.28515 1.0287 -2.58513 0.612554 0.759543 -0.218797 + 1.35057 0.970939 -2.60108 0.628319 0.718758 -0.297661 + 1.38363 0.891352 -2.67423 0.716143 0.510962 -0.475455 + 1.18088 1.1429 -2.63392 0.839339 0.518009 -0.164855 + 1.21363 1.08867 -2.62219 0.867228 0.446428 -0.220494 + 1.212 1.11193 -2.53548 0.756913 0.637373 -0.144352 + 1.27318 1.0645 -2.46373 0.664414 0.731832 -0.151576 + 1.32283 1.02151 -2.47507 0.533209 0.816656 -0.22082 + 1.16285 1.17229 -2.62444 0.834291 0.544902 -0.0839092 + 1.19013 1.12891 -2.58389 0.826729 0.554336 -0.0960763 + 1.1721 1.15831 -2.57441 0.856889 0.512622 -0.0543991 + 1.18127 1.14826 -2.52601 0.805008 0.590456 -0.0576533 + 1.22233 1.10923 -2.49381 0.716509 0.684521 -0.134333 + 1.16169 1.17928 -2.56753 0.757527 0.651927 0.0338273 + 1.11981 1.21108 -2.56861 0.168116 0.985702 0.0113623 + 1.14055 1.18741 -2.53381 0.432184 0.87621 0.213246 + 1.17086 1.16932 -2.51908 0.735448 0.676211 0.043078 + 1.16543 1.17131 -2.46853 0.570611 0.821127 -0.0123467 + 1.1916 1.14556 -2.48434 0.701022 0.707854 -0.0866668 + 1.0804 1.20673 -2.55668 -0.0678785 0.981014 0.181669 + 1.08928 1.18644 -2.47874 0.0821197 0.965555 0.2469 + 1.09447 1.1792 -2.45001 0.0182652 0.997846 0.0630083 + 1.14574 1.18017 -2.50508 0.301642 0.948149 0.100127 + 1.04987 1.18209 -2.46681 -0.127035 0.980773 0.148146 + 1.09184 1.17938 -2.4269 0.0142783 0.999779 -0.0154023 + 1.14031 1.18208 -2.45458 0.148682 0.988638 -0.0221078 + 1.16158 1.17478 -2.43814 0.537232 0.841689 0.0542304 + 0.952427 1.16044 -2.45231 -0.437754 0.897693 -0.0501898 + 1.01943 1.17257 -2.43291 -0.190886 0.981002 0.0346086 + 1.01558 1.17032 -2.39601 -0.0987706 0.990661 0.0939989 + 1.04735 1.17306 -2.38357 -0.1449 0.987065 0.0686003 + 1.08819 1.18004 -2.40846 -0.0644724 0.997895 0.00699668 + 0.925161 1.13651 -2.44707 -0.836032 0.519219 0.177373 + 0.95903 1.1691 -2.4199 -0.3522 0.933655 -0.0651455 + 0.955185 1.16677 -2.38307 -0.358833 0.930344 0.0754888 + 0.93663 1.15101 -2.30578 -0.420606 0.880546 0.21847 + 0.9684 1.15384 -2.29328 -0.202692 0.955332 0.215076 + 0.931764 1.14517 -2.41466 -0.82712 0.562025 -0.000698458 + 0.932578 1.14581 -2.36357 -0.849154 0.528143 -0.00128994 + 0.914023 1.12997 -2.28633 -0.930181 0.367025 -0.00748337 + 0.974547 1.14311 -2.24689 -0.146146 0.96026 0.237787 + 1.08239 1.17791 -2.33317 -0.0478934 0.985577 0.162311 + 0.919198 1.10644 -2.39597 -0.956791 0.290327 0.0161777 + 0.920013 1.10707 -2.34487 -0.944296 0.268242 0.19066 + 0.929803 1.09339 -2.29977 -0.997613 -0.0684833 -0.00881137 + 0.904511 1.05753 -2.44045 -0.951047 0.272972 0.144897 + 0.909489 1.07044 -2.39242 -0.975029 0.202737 0.0906424 + 0.914026 1.05165 -2.35327 -0.971286 0.111476 0.210184 + 0.923815 1.03796 -2.30816 -0.980843 0.0810049 0.177156 + 0.926824 1.07678 -2.2384 -0.974239 -0.198443 -0.107135 + 0.894101 1.01186 -2.42156 -0.94737 0.25029 0.199614 + 0.898638 0.993068 -2.38241 -0.972827 0.0846928 0.215486 + 0.913802 0.9689 -2.31155 -0.976611 0.0558439 0.207637 + 0.923286 0.9505 -2.24968 -0.989984 -0.0133627 0.140548 + 0.9333 1.01948 -2.24635 -0.999525 0.0138456 0.027546 + 0.900385 0.845177 -2.37266 -0.967859 0.00332926 0.251472 + 0.915549 0.821097 -2.30175 -0.970909 -0.0303687 0.237513 + 0.936049 0.81885 -2.23186 -0.968691 -0.0553289 0.242026 + 0.940327 0.92798 -2.17827 -0.974351 -0.13064 0.183231 + 0.92678 0.999707 -2.18871 -0.995003 -0.0861782 0.0504268 + 0.914431 0.563609 -2.32156 -0.899239 -0.120208 0.420618 + 0.934239 0.615486 -2.27582 -0.930408 -0.1012 0.352278 + 0.954739 0.613244 -2.20594 -0.932294 -0.187961 0.309028 + 0.9812 0.627521 -2.12066 -0.931412 -0.205704 0.300262 + 0.953089 0.796417 -2.1604 -0.965353 -0.0840891 0.247028 + 0.931247 0.390906 -2.37543 -0.784739 -0.550677 0.284497 + 0.9674 0.395445 -2.30669 -0.684164 -0.517101 0.514322 + 0.987209 0.44724 -2.26101 -0.744546 -0.366499 0.557969 + 1.00997 0.477562 -2.19773 -0.764592 -0.47245 0.438394 + 1.00436 0.330429 -2.40948 -0.629916 -0.706063 0.323543 + 1.04052 0.334882 -2.34079 -0.603828 -0.723666 0.334215 + 1.07843 0.337759 -2.25998 -0.631622 -0.624216 0.459791 + 1.10119 0.368082 -2.1967 -0.595181 -0.528881 0.605015 + 1.01351 0.260159 -2.51977 -0.696086 -0.611783 0.375747 + 1.06529 0.244662 -2.44953 -0.694796 -0.608913 0.382731 + 1.11078 0.244901 -2.36655 -0.698305 -0.61152 0.37204 + 1.14869 0.247773 -2.28572 -0.680572 -0.612644 0.401857 + 0.963798 0.270777 -2.59536 -0.747005 -0.570387 0.341529 + 1.08132 0.139613 -2.57138 -0.66432 -0.646582 0.374982 + 1.12487 0.148312 -2.48305 -0.66486 -0.644521 0.377562 + 1.17036 0.148551 -2.40006 -0.665451 -0.645935 0.37409 + 1.21585 0.15262 -2.31431 -0.643736 -0.653095 0.398837 + 1.03161 0.150229 -2.64697 -0.682573 -0.623963 0.38048 + 1.0949 0.063421 -2.70421 -0.499715 -0.814254 0.295424 + 1.14295 0.067705 -2.61003 -0.488574 -0.817523 0.30488 + 1.1865 0.076404 -2.5217 -0.51608 -0.800222 0.305461 + 1.23065 0.082109 -2.42798 -0.526274 -0.793275 0.306186 + 0.980334 0.150298 -2.72969 -0.700203 -0.606399 0.376824 + 1.04362 0.063489 -2.78693 -0.506161 -0.812992 0.287829 + 1.10235 0.025305 -2.8486 -0.341774 -0.92234 0.180219 + 1.15152 0.028616 -2.74833 -0.3442 -0.917666 0.198531 + 1.19957 0.032899 -2.65415 -0.372208 -0.898997 0.230793 + 0.989418 0.068168 -2.87763 -0.549534 -0.791573 0.267254 + 1.04815 0.029898 -2.93935 -0.357127 -0.918277 0.17096 + 1.13541 0.009312 -2.87949 0.114029 -0.990566 -0.0760006 + 1.18457 0.012616 -2.77921 -0.215265 -0.968517 0.125045 + 1.23162 0.013941 -2.67851 -0.244951 -0.957156 0.154439 + 0.932698 0.086978 -2.94961 -0.570699 -0.758707 0.314113 + 0.989046 0.03358 -3.04213 -0.366431 -0.909163 0.197867 + 1.02346 0.014294 -3.08632 -0.0908701 -0.992946 0.0761693 + 1.08256 0.010615 -2.98355 0.121831 -0.988497 -0.0896097 + 0.87449 0.089578 -3.03132 -0.57292 -0.734133 0.364433 + 0.930838 0.036182 -3.12383 -0.287014 -0.91081 0.296731 + 0.963492 0.009705 -3.17978 -0.0451712 -0.988402 0.144984 + 1.04045 0.016546 -3.10162 0.331272 -0.932238 -0.145572 + 1.09387 0.020379 -2.98946 0.509725 -0.817379 -0.268464 + 0.821971 0.08746 -3.12305 -0.603842 -0.679487 0.416741 + 0.863394 0.02385 -3.19867 -0.344298 -0.873396 0.344439 + 0.896048 -0.002625 -3.25462 -0.0205348 -0.996729 0.0781625 + 0.980486 0.012045 -3.19503 0.340731 -0.926335 -0.160643 + 0.763439 0.084031 -3.20171 -0.57675 -0.68164 0.450251 + 0.804862 0.020423 -3.27734 -0.407896 -0.860627 0.304863 + 0.835807 -0.002219 -3.32752 -0.0700688 -0.997515 0.00733986 + 0.925137 0.007863 -3.27798 0.360889 -0.898524 -0.249827 + 0.711511 0.081249 -3.27089 -0.558544 -0.696653 0.450226 + 0.741351 0.027227 -3.35152 -0.403801 -0.866071 0.294731 + 0.772297 0.004586 -3.40171 -0.0598842 -0.996163 -0.0638226 + 0.864896 0.00827 -3.35089 0.316588 -0.892167 -0.322197 + 0.67323 0.214898 -3.17478 -0.624533 -0.531767 0.571998 + 0.652094 0.083546 -3.34127 -0.523599 -0.723974 0.449117 + 0.681935 0.029526 -3.4219 -0.386268 -0.885552 0.25806 + 0.704692 0.015375 -3.47239 -0.0465797 -0.993761 -0.101337 + 0.798552 0.018302 -3.42467 0.295475 -0.867659 -0.399828 + 0.62195 0.191992 -3.2401 -0.530702 -0.61379 0.584481 + 0.596305 0.078852 -3.40994 -0.468465 -0.77211 0.429403 + 0.614264 0.039505 -3.49159 -0.34018 -0.90857 0.242441 + 0.637021 0.02535 -3.54207 0.0214712 -0.97588 -0.21725 + 0.730947 0.029087 -3.49534 0.281707 -0.855416 -0.434631 + 0.56616 0.187379 -3.30871 -0.488216 -0.658847 0.572333 + 0.528555 0.085339 -3.47517 -0.411344 -0.815162 0.407807 + 0.546514 0.045994 -3.55683 -0.337205 -0.92125 0.193882 + 0.563558 0.039291 -3.60282 0.0269834 -0.966717 -0.254422 + 0.656432 0.045461 -3.56171 0.296049 -0.784103 -0.54547 + 0.468641 0.323794 -3.23039 -0.279337 -0.626816 0.727374 + 0.50358 0.170259 -3.36206 -0.344741 -0.750712 0.563547 + 0.458603 0.088549 -3.53054 -0.294802 -0.880461 0.371322 + 0.473631 0.061026 -3.62246 -0.23212 -0.960076 0.15612 + 0.490675 0.054324 -3.66846 0.172489 -0.783244 -0.597307 + 0.450674 0.446399 -3.13575 -0.230695 -0.52117 0.821682 + 0.39922 0.297007 -3.26859 -0.227283 -0.67582 0.701149 + 0.433628 0.173555 -3.41737 -0.319599 -0.785446 0.53003 + 0.373358 0.097524 -3.56988 -0.200434 -0.905933 0.372976 + 0.388386 0.070091 -3.66177 -0.147227 -0.978731 0.142862 + 0.38411 0.510512 -3.131 -0.416219 -0.219768 0.882306 + 0.381253 0.419616 -3.17396 -0.229077 -0.521411 0.821982 + 0.320793 0.288955 -3.30525 -0.144923 -0.73143 0.666338 + 0.355201 0.165506 -3.45403 -0.169198 -0.832435 0.527659 + 0.370379 0.709814 -3.139 -0.580902 0.043998 0.812784 + 0.316229 0.474584 -3.16837 -0.38356 -0.201283 0.901314 + 0.313372 0.383687 -3.21133 -0.138834 -0.582747 0.800706 + 0.238392 0.271757 -3.33506 -0.0800217 -0.759537 0.645523 + 0.346861 1.02945 -3.19722 -0.519687 0.140874 0.842663 + 0.282676 1.00031 -3.23375 -0.457483 0.123581 0.880589 + 0.306194 0.680591 -3.17558 -0.504488 0.0540576 0.861725 + 0.251104 0.432437 -3.20417 -0.258066 -0.23745 0.936493 + 0.230971 0.366491 -3.24114 -0.100362 -0.594957 0.797467 + 0.344504 1.20162 -3.23223 -0.463287 0.20697 0.861701 + 0.261176 1.19278 -3.27112 -0.408149 0.202499 0.890173 + 0.212322 0.988001 -3.26123 -0.330996 0.134717 0.933966 + 0.241069 0.63853 -3.21133 -0.379493 0.0552298 0.923544 + 0.159293 0.409373 -3.22522 -0.0779895 -0.249167 0.965315 + 0.405038 1.26374 -3.22322 -0.349371 0.231071 0.908045 + 0.380499 1.26393 -3.22596 -0.28359 0.114307 0.952108 + 0.360752 1.27625 -3.24029 -0.609799 0.256532 0.749891 + 0.324758 1.21402 -3.24652 -0.463511 0.269363 0.844157 + 0.417691 1.33543 -3.23319 -0.441942 0.0954144 0.891954 + 0.393152 1.33563 -3.23594 -0.341058 0.246031 0.907275 + 0.374771 1.3332 -3.24893 -0.65165 0.251949 0.715453 + 0.351967 1.277 -3.25119 -0.612715 0.290973 0.734789 + 0.421961 1.37743 -3.22175 -0.597949 0.288871 0.74767 + 0.401225 1.40643 -3.25577 -0.436917 0.487309 0.756065 + 0.382844 1.404 -3.26876 -0.639616 0.467118 0.610485 + 0.363138 1.38292 -3.27385 -0.545824 0.525512 0.652621 + 0.365986 1.33394 -3.25982 -0.59251 0.215319 0.776254 + 0.437347 1.39596 -3.23444 0.0327572 0.815414 0.57795 + 0.416611 1.42487 -3.26852 0.212195 0.785863 0.580855 + 0.403286 1.43616 -3.27807 -0.12814 0.756958 0.640776 + 0.38358 1.415 -3.28322 -0.67523 0.732613 -0.0856932 + 0.465614 1.40456 -3.28554 0.0890856 0.757408 0.646836 + 0.452289 1.41586 -3.2951 0.217186 0.976129 -0.00175134 + 0.455867 1.41022 -3.31814 0.218478 0.97298 0.0746824 + 0.403286 1.43616 -3.27807 -0.162617 0.373302 -0.913346 + 0.541905 1.39688 -3.30343 0.104012 0.971656 -0.212286 + 0.526225 1.38861 -3.34211 0.228445 0.958278 -0.171801 + 0.497237 1.3962 -3.34946 0.347955 0.936135 -0.0507878 + 0.475313 1.40955 -3.34178 0.539652 0.814042 0.214736 + 0.418215 1.43963 -3.35968 0.112036 0.971377 0.209461 + 0.387158 1.40937 -3.30626 -0.228393 0.946287 0.228862 + 0.601613 1.36411 -3.37827 0.321798 0.901763 -0.288566 + 0.555249 1.37678 -3.40721 0.334122 0.913865 -0.230681 + 0.526261 1.38436 -3.41455 0.235829 0.923571 -0.302325 + 0.485753 1.39471 -3.40748 0.312397 0.898944 -0.307094 + 0.463829 1.40797 -3.39984 0.534539 0.784976 -0.313178 + 0.619329 1.34505 -3.40407 0.474979 0.713402 -0.51522 + 0.572965 1.35764 -3.43306 0.437896 0.663495 -0.606647 + 0.528327 1.36562 -3.44609 0.194917 0.688982 -0.698077 + 0.487819 1.37588 -3.43906 0.152479 0.721684 -0.67522 + 0.657265 1.34065 -3.37004 0.593032 0.666855 -0.451241 + 0.630083 1.32452 -3.4159 0.589529 0.23171 -0.7738 + 0.569569 1.32693 -3.45287 0.434248 0.14585 -0.888908 + 0.524932 1.33491 -3.4659 0.146665 0.230935 -0.961851 + 0.490004 1.34003 -3.46416 0.0897001 0.32474 -0.94154 + 0.692149 1.32736 -3.32722 0.863762 0.366736 -0.345571 + 0.668019 1.32011 -3.38187 0.737632 0.273871 -0.617167 + 0.631042 1.25434 -3.39814 0.489285 -0.235391 -0.839756 + 0.570529 1.25675 -3.43512 0.435845 -0.298502 -0.84908 + 0.516745 1.26462 -3.46175 0.127914 -0.274834 -0.952945 + 0.679089 1.27673 -3.37073 0.759658 -0.00281797 -0.650317 + 0.65761 1.23795 -3.38175 0.477493 -0.192601 -0.857266 + 0.606513 1.1171 -3.35144 0.448723 -0.257495 -0.855771 + 0.685681 1.19519 -3.35049 0.745618 -0.0818122 -0.661333 + 0.664201 1.1564 -3.36151 0.162401 -0.204653 -0.965268 + 0.633081 1.10071 -3.33505 0.0239507 -0.220876 -0.975008 + 0.704194 1.08025 -3.32202 0.731503 -0.0652825 -0.678706 + 0.667664 1.07883 -3.34755 0.0803001 -0.161119 -0.983663 + 0.636544 1.02322 -3.32103 -0.0319817 -0.127823 -0.991281 + 0.613294 0.983224 -3.32556 0.396543 0.075697 -0.91489 + 0.583599 1.12337 -3.3677 0.413698 -0.306237 -0.857364 + 0.708008 0.92919 -3.30037 0.642857 0.0275413 -0.765491 + 0.671478 0.927766 -3.3259 0.305039 0.0231653 -0.952058 + 0.648228 0.887856 -3.33038 0.2457 0.150311 -0.957621 + 0.590379 0.98949 -3.34181 0.474715 0.033359 -0.879507 + 0.55476 1.09691 -3.36786 0.190968 -0.237163 -0.952515 + 0.807312 0.8757 -3.21712 0.561123 0.201085 -0.802936 + 0.736285 0.820761 -3.29156 0.579098 0.206179 -0.788756 + 0.669651 0.802808 -3.33947 0.476023 0.214456 -0.852884 + 0.592546 0.886392 -3.36024 0.44205 0.197623 -0.874949 + 0.833049 0.737981 -3.25239 0.538082 0.232332 -0.81024 + 0.770918 0.732946 -3.30046 0.565695 0.275949 -0.777072 + 0.704285 0.714901 -3.34841 0.44325 0.319158 -0.837656 + 0.613969 0.801339 -3.36932 0.45534 0.205917 -0.866177 + 0.888478 0.773687 -3.21123 0.567982 0.183687 -0.802282 + 0.853694 0.663423 -3.25465 0.650339 -0.0904432 -0.754241 + 0.791563 0.65847 -3.30267 0.763411 0.200832 -0.613897 + 0.784197 0.647313 -3.32094 0.656346 0.549182 -0.51731 + 0.729674 0.650131 -3.36422 0.41197 0.49529 -0.764832 + 0.92887 0.716168 -3.1782 0.664848 -0.0383567 -0.745993 + 0.892994 0.670479 -3.21567 0.76955 -0.160969 -0.617967 + 0.842585 0.617559 -3.24441 0.7351 0.113864 -0.668329 + 0.835219 0.606485 -3.26263 0.801096 0.461663 -0.380937 + 0.980501 0.730595 -3.13999 0.629372 -0.0288895 -0.776567 + 0.920828 0.628098 -3.16606 0.651729 0.0909913 -0.752974 + 0.881886 0.624614 -3.20543 0.722501 0.0317045 -0.690642 + 0.891832 0.577881 -3.21908 0.534798 0.638518 -0.553431 + 0.972459 0.64252 -3.12784 0.520016 0.054793 -0.852397 + 0.994589 0.583223 -3.13074 0.327934 0.629721 -0.704209 + 0.930774 0.581364 -3.17972 0.454383 0.666697 -0.590806 + 1.05871 0.662694 -3.09238 0.458811 0.203702 -0.864869 + 1.08084 0.603397 -3.09528 0.501695 0.29678 -0.812542 + 1.03412 0.56884 -3.14922 0.422113 0.632248 -0.649679 + 0.97031 0.566982 -3.19821 0.381049 0.774132 -0.505491 + 0.917456 0.547772 -3.26173 0.483719 0.717608 -0.501054 + 1.10836 0.726897 -3.03779 0.624903 0.218848 -0.749401 + 1.12758 0.661112 -3.04244 0.623997 0.248429 -0.740885 + 1.14228 0.592282 -3.05423 0.620139 0.26761 -0.737437 + 1.09371 0.52643 -3.11337 0.625206 0.325646 -0.709276 + 1.17045 0.71283 -2.98302 0.695398 0.235141 -0.679065 + 1.18938 0.64572 -2.98918 0.689498 0.263844 -0.674521 + 1.20408 0.57689 -3.00097 0.681756 0.268097 -0.680685 + 1.15514 0.515313 -3.07231 0.618157 0.259105 -0.742123 + 1.22635 0.705679 -2.92404 0.75791 0.250957 -0.602157 + 1.24529 0.638654 -2.93015 0.723852 0.298555 -0.622016 + 1.26352 0.578902 -2.93805 0.71217 0.281597 -0.643052 + 1.21596 0.512611 -3.01483 0.687582 0.257546 -0.678897 + 1.30118 0.653066 -2.85931 0.708234 0.351445 -0.612284 + 1.31942 0.593315 -2.86721 0.748489 0.29479 -0.594023 + 1.2754 0.514542 -2.95198 0.713026 0.240679 -0.658534 + 1.29227 0.447821 -2.95441 0.729493 0.204651 -0.652655 + 1.23276 0.442429 -3.02388 0.710127 0.232011 -0.664748 + 1.32933 0.706247 -2.79182 0.557873 0.252084 -0.790715 + 1.35431 0.66336 -2.79374 0.747785 0.210929 -0.629545 + 1.37088 0.599904 -2.79263 0.809278 0.248619 -0.532219 + 1.32947 0.522163 -2.88898 0.750871 0.252577 -0.610243 + 1.34634 0.455443 -2.89141 0.778821 0.172184 -0.60315 + 1.37391 0.738612 -2.76848 0.655395 0.0481836 -0.753748 + 1.39956 0.667331 -2.71382 0.82527 0.0249825 -0.564186 + 1.41613 0.603874 -2.71271 0.81195 0.247132 -0.528831 + 1.38094 0.528752 -2.81439 0.805896 0.25281 -0.535367 + 1.40063 0.465663 -2.81112 0.821897 0.181855 -0.539828 + 1.39239 0.812546 -2.72934 0.742928 0.323868 -0.585805 + 1.41427 0.75751 -2.72101 0.809959 0.0538787 -0.584006 + 1.43992 0.686233 -2.66636 0.722784 -0.0417284 -0.689813 + 1.46558 0.611347 -2.63985 0.645131 0.159636 -0.74721 + 1.43291 0.53521 -2.72537 0.820223 0.247739 -0.515616 + 1.43613 0.819446 -2.65289 0.798975 0.36091 -0.481023 + 1.45802 0.764408 -2.64456 0.784234 0.188934 -0.591 + 1.48718 0.714298 -2.63396 0.693372 0.122475 -0.710095 + 1.51284 0.639411 -2.60746 0.765854 0.0194789 -0.64272 + 1.48236 0.542768 -2.65247 0.808971 0.129818 -0.573335 + 1.40873 0.912972 -2.60628 0.716328 0.577249 -0.391992 + 1.46124 0.841065 -2.58493 0.769079 0.473773 -0.429017 + 1.50327 0.780374 -2.57541 0.775586 0.379359 -0.504532 + 1.53243 0.730259 -2.56481 0.823798 0.213562 -0.525117 + 1.55426 0.652742 -2.53995 0.866902 0.0218731 -0.497998 + 1.45178 0.922027 -2.49836 0.691849 0.611657 -0.383694 + 1.50043 0.854552 -2.50769 0.740065 0.514944 -0.432593 + 1.54246 0.793947 -2.49812 0.779228 0.437461 -0.448811 + 1.57515 0.749187 -2.48239 0.852548 0.264386 -0.450846 + 1.59698 0.67167 -2.45753 0.909424 0.0398459 -0.413958 + 1.39361 0.979989 -2.49315 0.543362 0.783952 -0.300293 + 1.48815 0.946809 -2.39809 0.641728 0.657973 -0.394026 + 1.53679 0.879339 -2.40742 0.737068 0.533261 -0.415166 + 1.57527 0.815265 -2.41484 0.776954 0.467845 -0.421265 + 1.35937 1.0365 -2.36624 0.420685 0.87693 -0.232417 + 1.43015 0.994892 -2.38437 0.473087 0.818023 -0.32715 + 1.52471 0.991998 -2.27056 0.611797 0.678336 -0.406895 + 1.56388 0.906056 -2.3267 0.727361 0.544335 -0.417906 + 1.60236 0.841891 -2.33416 0.82618 0.428335 -0.365998 + 1.27743 1.06971 -2.41596 0.600584 0.795858 -0.0768686 + 1.28157 1.06511 -2.39559 0.484029 0.874865 0.0181271 + 1.30015 1.05879 -2.37105 0.420067 0.895238 -0.148635 + 1.37522 1.05238 -2.28095 0.312883 0.896626 -0.313314 + 1.46671 1.04008 -2.25684 0.378151 0.848294 -0.370673 + 1.22658 1.11436 -2.44609 0.686137 0.724526 -0.0654051 + 1.23658 1.10612 -2.40041 0.660108 0.750974 0.0171641 + 1.24072 1.1016 -2.37999 0.668683 0.737594 0.093909 + 1.24393 1.09531 -2.36529 0.613106 0.789782 -0.0186014 + 1.2625 1.08908 -2.3407 0.503436 0.835522 -0.220125 + 1.18775 1.14912 -2.45389 0.684302 0.728927 0.0199044 + 1.19962 1.13794 -2.44374 0.660533 0.750396 0.0245554 + 1.20963 1.1297 -2.39806 0.655957 0.754313 0.0270673 + 1.2086 1.12749 -2.36263 0.659315 0.741602 0.123811 + 1.21181 1.12119 -2.34793 0.620873 0.783802 0.0130641 + 1.15943 1.1735 -2.41832 0.50957 0.85734 0.0728458 + 1.1713 1.16232 -2.40817 0.656824 0.753402 0.0311189 + 1.15925 1.17136 -2.38481 0.512867 0.857249 0.0457278 + 1.19758 1.13864 -2.37475 0.649799 0.756277 0.0762025 + 1.16163 1.16328 -2.33763 0.508381 0.823473 0.251873 + 1.13768 1.18233 -2.43142 0.129183 0.990719 0.0422811 + 1.13552 1.18105 -2.41161 0.152814 0.987582 0.0364712 + 1.13186 1.18171 -2.39315 0.173294 0.984571 -0.0242587 + 1.15061 1.17453 -2.34971 0.392002 0.873585 0.288417 + 1.12323 1.18489 -2.35805 0.117122 0.976248 0.182271 + 1.08854 1.16718 -2.28678 0.0116818 0.95891 0.283469 + 1.13451 1.168 -2.2984 0.256328 0.949696 0.179927 + 1.18562 1.14149 -2.33268 0.566389 0.816278 0.113548 + 1.07193 1.13042 -2.19791 0.0266725 0.945007 0.32596 + 1.1179 1.13115 -2.20958 0.172195 0.89986 0.400751 + 1.1585 1.1462 -2.29345 0.466686 0.831772 0.300598 + 1.20242 1.13319 -2.31351 0.395237 0.914411 -0.0874055 + 0.937486 1.13191 -2.21189 -0.332083 0.928381 0.166821 + 1.03487 1.11922 -2.16291 0.0351643 0.953752 0.298532 + 1.04583 1.10626 -2.12786 -0.0446316 0.94583 0.32158 + 1.06895 1.10064 -2.09712 -0.18693 0.960553 0.205902 + 1.10267 1.10541 -2.0876 0.00300693 0.990756 0.135622 + 1.13199 1.10347 -2.11343 0.229389 0.968709 0.0947763 + 1.14066 1.10399 -2.14793 0.244749 0.951117 0.188347 + 1.14071 1.11475 -2.17696 0.163689 0.920856 0.353879 + 1.13323 1.12325 -2.19868 0.129903 0.935574 0.328368 + 0.911044 1.11345 -2.22492 -0.963276 0.268069 0.0154602 + 0.940285 1.12247 -2.14673 -0.328392 0.894372 0.303738 + 0.951245 1.1095 -2.11167 -0.256759 0.809431 0.528107 + 0.9813 1.08014 -2.07162 -0.294401 0.784818 0.545334 + 1.00443 1.07461 -2.04084 -0.398733 0.888064 0.228809 + 0.920305 1.05709 -2.18069 -0.987307 -0.158592 0.00863486 + 0.913844 1.10391 -2.1598 -0.917789 0.344785 0.196943 + 0.924854 1.08378 -2.10833 -0.840551 0.253402 0.478814 + 0.95491 1.05443 -2.06828 -0.765272 0.297479 0.570846 + 0.931315 1.03687 -2.12927 -0.964255 -0.171283 0.202173 + 0.950425 1.01243 -2.07954 -0.927932 -0.106069 0.357339 + 0.969659 0.993571 -2.03348 -0.947 -0.0449968 0.318066 + 0.974144 1.03556 -2.02221 -0.914344 0.118798 0.387119 + 0.988982 1.05418 -2.00106 -0.745034 0.568496 0.348907 + 0.9335 0.994386 -2.14149 -0.970841 -0.132049 0.200078 + 0.952611 0.969858 -2.09181 -0.945439 -0.126386 0.300288 + 0.969799 0.949883 -2.04361 -0.950464 -0.104315 0.292807 + 0.99163 0.99924 -1.9591 -0.934978 0.102049 0.339709 + 1.00647 1.01785 -1.93794 -0.877015 0.331856 0.347444 + 0.947047 0.922664 -2.13107 -0.924332 -0.349831 0.152411 + 0.964235 0.902602 -2.08292 -0.957746 -0.130321 0.256397 + 0.991771 0.955552 -1.96923 -0.952357 -0.101618 0.287559 + 1.014 0.959053 -1.88549 -0.974349 -0.199628 0.103885 + 0.977004 0.797029 -2.08306 -0.954093 -0.100056 0.282305 + 0.986775 0.88534 -2.01142 -0.947548 -0.118233 0.29694 + 1.006 0.870142 -1.95989 -0.932876 -0.157087 0.324139 + 1.011 0.940273 -1.91776 -0.937037 -0.216011 0.274408 + 1.00511 0.628134 -2.04333 -0.896041 -0.25459 0.363722 + 1.03454 0.654822 -1.96195 -0.884102 -0.259336 0.388726 + 0.999544 0.779769 -2.01156 -0.939958 -0.13009 0.315523 + 1.02907 0.790633 -1.93678 -0.917207 -0.137907 0.373782 + 1.03466 0.865062 -1.88869 -0.939729 -0.188265 0.285423 + 1.03643 0.491839 -2.11245 -0.718326 -0.579297 0.385256 + 1.06777 0.515248 -2.0376 -0.669479 -0.593515 0.446697 + 1.09719 0.541936 -1.95623 -0.68675 -0.591894 0.421944 + 1.06407 0.665688 -1.88717 -0.849345 -0.26081 0.458903 + 1.13094 0.40575 -2.14854 -0.575993 -0.604141 0.550678 + 1.16228 0.429159 -2.07369 -0.60288 -0.671368 0.431046 + 1.19008 0.455437 -1.98781 -0.616682 -0.672129 0.409812 + 1.2211 0.481229 -1.89808 -0.663714 -0.67197 0.328541 + 1.12821 0.567733 -1.86651 -0.702856 -0.544659 0.457537 + 1.18918 0.259384 -2.20843 -0.64749 -0.532737 0.54493 + 1.21894 0.297052 -2.16027 -0.659153 -0.474784 0.583179 + 1.2501 0.32239 -2.08156 -0.736925 -0.521878 0.429634 + 1.2779 0.348663 -1.99567 -0.754168 -0.531704 0.385385 + 1.25634 0.164224 -2.23701 -0.670172 -0.628885 0.394174 + 1.29498 0.176688 -2.14659 -0.702887 -0.557584 0.441643 + 1.32614 0.201938 -2.06793 -0.75443 -0.510301 0.41283 + 1.36476 0.21381 -1.97769 -0.768286 -0.518039 0.375996 + 1.27614 0.086092 -2.34228 -0.55246 -0.772458 0.313204 + 1.31981 0.091549 -2.24473 -0.583983 -0.742856 0.327306 + 1.35845 0.104011 -2.15432 -0.634402 -0.692185 0.344113 + 1.39973 0.110487 -2.05993 -0.663337 -0.659972 0.352734 + 1.29001 0.043919 -2.45923 -0.420708 -0.874545 0.241196 + 1.33236 0.04906 -2.35634 -0.450329 -0.860929 0.236654 + 1.37603 0.054431 -2.25884 -0.47066 -0.846477 0.248911 + 1.42215 0.052258 -2.15928 -0.512005 -0.821614 0.250602 + 1.46343 0.05873 -2.06489 -0.505815 -0.81703 0.276792 + 1.24586 0.0383 -2.5529 -0.40197 -0.885474 0.233143 + 1.32447 0.025344 -2.47006 -0.270454 -0.946848 0.174167 + 1.36682 0.030486 -2.36717 -0.197779 -0.972139 0.125815 + 1.4169 0.033245 -2.26275 -0.202524 -0.973683 0.104526 + 1.27791 0.019255 -2.57732 -0.259785 -0.950946 0.167969 + 1.33261 0.023419 -2.47613 0.196222 -0.980274 -0.0236396 + 1.37851 0.030783 -2.37168 0.264077 -0.960865 -0.0836729 + 1.42859 0.03363 -2.26721 0.22163 -0.96943 -0.105291 + 1.28605 0.01733 -2.58338 0.196201 -0.980105 -0.0300053 + 1.31177 0.039233 -2.61412 0.542821 -0.818054 -0.190087 + 1.35501 0.043626 -2.51033 0.539472 -0.821016 -0.186823 + 1.4009 0.050985 -2.40587 0.516667 -0.832304 -0.200813 + 1.24117 0.011804 -2.68801 0.196778 -0.978806 -0.0567286 + 1.26688 0.033708 -2.71875 0.524446 -0.823346 -0.216925 + 1.35264 0.084103 -2.67244 0.679295 -0.68754 -0.256607 + 1.39589 0.088496 -2.56864 0.6508 -0.720002 -0.240951 + 1.43552 0.089799 -2.4631 0.614271 -0.747486 -0.252853 + 1.19412 0.010571 -2.78867 0.200901 -0.974925 -0.0957104 + 1.21938 0.0345 -2.82152 0.489494 -0.828939 -0.27066 + 1.30804 0.080062 -2.77604 0.657698 -0.697242 -0.285109 + 1.3159 0.131596 -2.85429 0.762123 -0.507885 -0.401523 + 1.3605 0.135637 -2.75069 0.78718 -0.513423 -0.34168 + 1.14672 0.019074 -2.8854 0.48808 -0.823107 -0.290298 + 1.17197 0.043004 -2.91825 0.467872 -0.839717 -0.27563 + 1.26054 0.08085 -2.8788 0.651794 -0.680302 -0.335192 + 1.2627 0.132812 -2.9466 0.784661 -0.43852 -0.438187 + 1.11726 0.04216 -3.01339 0.50675 -0.825445 -0.248687 + 1.20361 0.082894 -2.98534 0.615799 -0.705182 -0.35144 + 1.20578 0.134944 -3.05309 0.750552 -0.411881 -0.516745 + 1.23257 0.198224 -3.0411 0.832212 -0.134002 -0.538022 + 1.28577 0.197006 -2.94879 0.82367 -0.270193 -0.498562 + 1.06385 0.038414 -3.1255 0.546693 -0.778636 -0.307982 + 1.14891 0.082051 -3.08048 0.672507 -0.628995 -0.389999 + 1.14272 0.132298 -3.13651 0.762568 -0.319812 -0.562326 + 1.17071 0.195576 -3.11291 0.767707 -0.146829 -0.623753 + 1.00439 0.03507 -3.21691 0.560201 -0.758229 -0.333561 + 1.08511 0.074678 -3.15911 0.657542 -0.599452 -0.456395 + 1.07893 0.12484 -3.21519 0.7338 -0.31935 -0.599628 + 1.10766 0.192935 -3.19634 0.772763 -0.050199 -0.632706 + 0.949043 0.030887 -3.29986 0.549324 -0.724851 -0.415733 + 1.02565 0.071333 -3.25052 0.724519 -0.497494 -0.477045 + 1.0167 0.11971 -3.28931 0.77394 -0.199875 -0.600888 + 1.04185 0.188535 -3.26612 0.744788 -0.0415938 -0.666004 + 0.887218 0.033712 -3.37595 0.504073 -0.713261 -0.487 + 0.966535 0.072591 -3.32869 0.687346 -0.472205 -0.551886 + 0.957584 0.120966 -3.36748 0.753851 -0.176111 -0.633003 + 0.979623 0.183405 -3.34023 0.76658 0.0446406 -0.640595 + 0.820874 0.04374 -3.44972 0.452365 -0.720547 -0.525526 + 0.90471 0.07541 -3.40478 0.655355 -0.46554 -0.594797 + 0.891333 0.117574 -3.44041 0.717991 -0.186819 -0.670513 + 0.916497 0.168037 -3.41381 0.74106 0.043587 -0.670023 + 0.749319 0.051972 -3.51798 0.401379 -0.722141 -0.56339 + 0.834662 0.079343 -3.47739 0.5872 -0.508025 -0.630164 + 0.821285 0.121507 -3.51302 0.665907 -0.201872 -0.718203 + 0.850245 0.164647 -3.48674 0.712563 0.0526355 -0.699631 + 0.674804 0.068439 -3.5843 0.32359 -0.758158 -0.566114 + 0.763107 0.087575 -3.54565 0.533237 -0.526078 -0.662495 + 0.747396 0.126027 -3.58025 0.629351 -0.217549 -0.746049 + 0.779473 0.166045 -3.55116 0.67338 0.0539229 -0.737328 + 0.587938 0.081027 -3.64191 0.273497 -0.725732 -0.631278 + 0.682155 0.090917 -3.60984 0.430722 -0.612291 -0.663007 + 0.666445 0.129282 -3.64449 0.534465 -0.343079 -0.772427 + 0.705585 0.170568 -3.6184 0.661444 0.00572989 -0.749972 + 0.582969 0.059404 -3.62245 0.328086 -0.719442 -0.612178 + 0.495604 0.097005 -3.69178 0.195581 -0.695335 -0.691561 + 0.595289 0.103505 -3.66744 0.321267 -0.631731 -0.705481 + 0.584202 0.141342 -3.69718 0.3921 -0.431442 -0.812475 + 0.636835 0.183147 -3.68218 0.595842 -0.0951547 -0.797445 + 0.490635 0.07538 -3.67233 0.31935 -0.443692 -0.837349 + 0.392792 0.111121 -3.72923 0.153326 -0.651705 -0.742814 + 0.499956 0.118466 -3.71255 0.219973 -0.623153 -0.750528 + 0.488869 0.156304 -3.74229 0.245794 -0.494677 -0.833595 + 0.554592 0.195121 -3.73492 0.445141 -0.198265 -0.873236 + 0.389211 0.068004 -3.70975 0.0901472 -0.756543 -0.647701 + 0.389172 0.088973 -3.71367 0.206662 -0.414812 -0.886127 + 0.285338 0.121152 -3.7546 0.0858579 -0.616796 -0.782426 + 0.397144 0.132582 -3.75 0.172042 -0.581549 -0.795111 + 0.389831 0.172658 -3.77302 0.177267 -0.471326 -0.863961 + 0.280005 0.078806 -3.72246 -0.0160651 -0.903159 -0.429006 + 0.281718 0.099004 -3.73904 0.0738285 -0.616244 -0.784087 + 0.174334 0.128605 -3.76831 0.00536578 -0.681278 -0.732005 + 0.290328 0.147155 -3.77605 0.0913476 -0.556444 -0.825848 + 0.283016 0.187238 -3.79907 0.0716524 -0.397154 -0.914951 + 0.27918 0.080809 -3.67453 -0.0947214 -0.983147 0.156365 + 0.168313 0.087526 -3.72896 -0.0809119 -0.887337 -0.453968 + 0.170026 0.107717 -3.74554 -0.0386115 -0.700158 -0.712943 + 0.059143 0.132298 -3.76991 -0.00293313 -0.707647 -0.70656 + 0.179324 0.15461 -3.78975 0.0395974 -0.518969 -0.853875 + 0.279441 0.105189 -3.59316 -0.115536 -0.91874 0.377582 + 0.174324 0.110026 -3.60193 -0.0329214 -0.934406 0.354685 + 0.174064 0.085731 -3.68326 -0.0660142 -0.990614 0.119694 + 0.054835 0.097839 -3.71703 -0.0334079 -0.971145 -0.236139 + 0.054835 0.111412 -3.74713 -0.00920017 -0.833823 -0.551956 + 0.261284 0.173084 -3.47735 -0.107452 -0.844954 0.523934 + 0.165895 0.160955 -3.49994 0.00289706 -0.861474 0.507794 + 0.060586 0.098942 -3.61633 0.0324895 -0.968829 0.24559 + 0.060586 0.096136 -3.67128 -0.0153833 -0.999194 0.0370713 + -0.054834 0.097839 -3.71703 0.0538067 -0.973959 -0.220247 + 0.143003 0.259629 -3.35765 0.0364686 -0.779498 0.625342 + 0.052156 0.233569 -3.37552 0.0421687 -0.802373 0.595331 + 0.052156 0.149869 -3.51435 0.0120491 -0.876828 0.480654 + -0.052156 0.149869 -3.51435 -0.0193578 -0.8719 0.489301 + -0.060586 0.098947 -3.61634 0.000757084 -0.962699 0.270575 + 0.13916 0.343427 -3.2622 0.0232743 -0.636446 0.77097 + 0.048313 0.317362 -3.28005 0.0248013 -0.66934 0.742542 + -0.052156 0.233564 -3.37551 -0.0603506 -0.81052 0.582593 + 0.048313 0.39542 -3.22765 -0.00128654 -0.283842 0.95887 + -0.048316 0.39542 -3.22765 -0.00859111 -0.291272 0.956602 + -0.048316 0.317362 -3.28005 -0.0297717 -0.664647 0.746564 + -0.143003 0.259629 -3.35765 -0.0297728 -0.78688 0.616388 + 0.159773 0.610328 -3.23008 -0.150103 0.081427 0.985312 + 0.048793 0.596376 -3.23252 -0.016907 0.0980659 0.995036 + -0.048793 0.596376 -3.23252 0.0219971 0.0903335 0.995669 + -0.159296 0.409373 -3.22522 0.0840981 -0.254132 0.963506 + -0.139163 0.343427 -3.2622 -0.00319524 -0.623154 0.782092 + 0.131025 0.959799 -3.27998 -0.229988 0.129924 0.964482 + 0.048793 0.941243 -3.29465 -0.0959883 0.14968 0.984064 + -0.048793 0.941243 -3.29465 0.106681 0.161356 0.981113 + -0.131025 0.959799 -3.27998 0.224561 0.140295 0.964308 + -0.159772 0.610328 -3.23008 0.142823 0.073393 0.987023 + 0.153945 1.1952 -3.31131 -0.174267 0.175552 0.968923 + 0.114166 1.17597 -3.31341 -0.154999 0.130972 0.979194 + 0.031933 1.15733 -3.32813 -0.0904492 0.105169 0.990332 + -0.031937 1.15732 -3.32811 0.09557 0.0980074 0.990586 + 0.190822 1.18046 -3.29858 -0.316954 0.180388 0.931128 + 0.160899 1.2621 -3.32539 -0.0991105 0.23849 0.966074 + 0.11631 1.26212 -3.32542 -0.0824543 0.192453 0.977836 + 0.076531 1.24281 -3.32756 -0.131371 0.153666 0.979351 + 0.197776 1.24736 -3.31266 -0.249331 0.293441 0.92289 + 0.177853 1.30956 -3.33679 -0.049485 0.280975 0.958439 + 0.153964 1.31145 -3.33627 0.0298063 0.229923 0.972752 + 0.109375 1.31139 -3.33635 -0.0939241 0.170043 0.98095 + 0.062433 1.31188 -3.34561 -0.19475 0.221675 0.955475 + 0.203355 1.25836 -3.31571 -0.26872 0.299404 0.915504 + 0.183432 1.32056 -3.33984 -0.0685056 0.292341 0.953857 + 0.170708 1.37497 -3.35408 0.0321088 0.35861 0.932935 + 0.146819 1.37676 -3.35359 0.0127079 0.474305 0.880269 + 0.100607 1.34927 -3.34237 -0.101084 0.327527 0.939419 + 0.280732 1.22028 -3.26996 -0.408561 0.234757 0.882024 + 0.222911 1.28587 -3.31456 -0.402411 0.211562 0.890678 + 0.211256 1.33662 -3.33106 -0.454471 0.24275 0.857046 + 0.186303 1.34668 -3.34808 -0.15653 0.291956 0.943536 + 0.308595 1.21723 -3.25627 -0.428268 0.279597 0.859309 + 0.26534 1.28981 -3.29397 -0.43334 0.192196 0.880498 + 0.253685 1.34056 -3.31048 -0.50602 0.109472 0.855546 + 0.214499 1.40225 -3.35213 -0.47451 0.399363 0.784443 + 0.189546 1.41231 -3.36916 -0.0726872 0.392406 0.916916 + 0.335804 1.2802 -3.26094 -0.416463 0.221702 0.881707 + 0.293203 1.28675 -3.28029 -0.400339 0.192104 0.896005 + 0.296609 1.33174 -3.28701 -0.43812 0.0485444 0.897605 + 0.258705 1.38294 -3.30408 -0.547454 0.241454 0.801245 + 0.33921 1.32519 -3.26767 -0.329269 0.164307 0.929831 + 0.301628 1.37404 -3.28067 -0.244839 0.289297 0.925398 + 0.294955 1.40256 -3.30208 -0.0987777 0.800415 0.591252 + 0.268466 1.40904 -3.31769 -0.178262 0.829259 0.529672 + 0.22426 1.42835 -3.36575 -0.0703497 0.858586 0.50782 + 0.336362 1.37408 -3.28175 -0.125644 0.498092 0.857973 + 0.329689 1.40261 -3.30316 0.0753393 0.797063 0.599178 + 0.291361 1.41354 -3.36028 -0.0218483 0.986369 0.163091 + 0.264872 1.42001 -3.37589 0.223335 0.970896 0.086503 + 0.351495 1.41275 -3.32132 -0.141962 0.868005 0.475829 + 0.313167 1.42367 -3.37844 -0.32941 0.93576 0.125867 + 0.29845 1.41438 -3.42715 -0.0514491 0.977812 -0.203066 + 1.17383 1.1383 -2.28255 0.194613 0.970105 0.14499 + 1.22424 1.13141 -2.28583 0.413817 0.904967 -0.0989409 + 1.22861 1.11298 -2.32871 0.528261 0.821847 -0.213325 + 1.19565 1.13651 -2.25487 0.109195 0.982264 0.152424 + 1.2357 1.12492 -2.25118 0.541182 0.808211 0.2322 + 1.2456 1.11119 -2.3016 0.564608 0.807396 -0.171257 + 1.27949 1.08729 -2.3136 0.475525 0.854761 -0.207989 + 1.20313 1.12802 -2.23314 0.239668 0.884039 0.401291 + 1.2362 1.1012 -2.2137 0.137806 0.951148 0.276272 + 1.25706 1.10469 -2.26695 0.495192 0.86841 -0.0254913 + 1.27976 1.09644 -2.26906 0.372953 0.917345 -0.139225 + 1.316 1.07477 -2.28571 0.385327 0.893984 -0.228726 + 1.20362 1.1043 -2.19567 0.238304 0.889581 0.389688 + 1.24091 1.09246 -2.16535 -0.071895 0.977773 0.196955 + 1.26129 1.10663 -2.2153 0.0715909 0.995352 0.0644136 + 1.28399 1.0983 -2.21747 0.327265 0.944682 -0.0217718 + 1.31627 1.08384 -2.24124 0.347565 0.927761 -0.135862 + 1.20357 1.09346 -2.1667 0.126448 0.954904 0.268644 + 1.24051 1.08368 -2.11575 -0.126674 0.989325 0.0720449 + 1.26601 1.0978 -2.167 -0.0723418 0.989714 0.12342 + 1.29085 1.09788 -2.18675 0.18714 0.982137 -0.019651 + 1.20317 1.08477 -2.11704 0.127915 0.98607 0.106317 + 1.22956 1.08229 -2.07395 -0.133262 0.984262 -0.116057 + 1.28135 1.09502 -2.12479 -0.137151 0.990519 0.00790676 + 1.3062 1.0951 -2.14453 0.0604684 0.995696 -0.0702398 + 1.32313 1.08342 -2.21051 -0.0672484 0.997689 0.0097306 + 1.1945 1.08434 -2.08249 0.164639 0.986353 -0.00122404 + 1.20388 1.08947 -2.01999 0.0502951 0.903703 -0.425196 + 1.27041 1.09363 -2.08299 -0.27621 0.955386 -0.104625 + 1.28695 1.09954 -2.07262 -0.17438 0.976454 -0.127 + 1.3294 1.10126 -2.095 -0.0517155 0.987727 -0.147377 + 1.16882 1.09152 -2.02854 0.0959799 0.994324 -0.0458997 + 1.22043 1.09538 -2.00962 -0.138517 0.979629 -0.145398 + 1.29729 1.10744 -2.02971 -0.135188 0.984822 -0.108855 + 1.33975 1.10917 -2.0521 -0.0840485 0.98392 -0.157597 + 1.1395 1.09346 -2.0027 0.0166381 0.997789 0.0643516 + 1.21825 1.09746 -1.98082 -0.117738 0.992968 0.0123341 + 1.29512 1.10951 -2.0009 -0.169237 0.97886 -0.114858 + 1.33864 1.11785 -1.99854 -0.118338 0.982547 -0.143519 + 1.38558 1.11758 -2.01527 -0.0404582 0.978936 -0.200118 + 1.0773 1.09187 -1.97934 -0.139717 0.980491 0.138261 + 1.08885 1.08668 -1.91054 -0.0543864 0.997953 -0.0336387 + 1.15105 1.08818 -1.93396 -0.0322639 0.997527 0.0624434 + 1.04358 1.08718 -1.98882 -0.335124 0.920743 0.199811 + 1.02814 1.06684 -1.94899 -0.656876 0.724309 0.2095 + 1.04704 1.09328 -1.87537 -0.0568165 0.973459 -0.221696 + 1.14875 1.08447 -1.81252 0.0166636 0.99893 0.0431429 + 1.01312 1.00698 -1.8999 -0.865874 0.464506 0.185732 + 1.03479 1.05596 -1.91095 -0.999783 -0.00282248 0.0206327 + 1.02131 1.08018 -1.88689 -0.783526 0.443773 -0.434916 + 0.983915 1.11468 -1.79325 -0.102163 0.983633 -0.148422 + 1.10695 1.09107 -1.77734 0.193433 0.980445 0.036208 + 1.00757 0.9871 -1.87747 -0.999527 0.0279341 0.0128563 + 1.01754 1.01435 -1.84748 -0.980148 0.0821281 -0.180456 + 1.00406 1.03856 -1.82341 -0.881742 -0.332062 -0.33506 + 0.958184 1.10158 -1.80475 -0.844795 0.338915 -0.414075 + 0.969238 1.11357 -1.74933 -0.426329 0.859398 0.282274 + 1.01144 0.973013 -1.82287 -0.992641 -0.100177 0.0680311 + 1.01199 0.994478 -1.82505 -0.999822 -0.0137948 0.0128437 + 1.01533 0.98769 -1.79489 -0.983281 -0.180019 -0.0274183 + 0.996084 1.02283 -1.77676 -0.852529 -0.450039 -0.265817 + 0.950205 1.08585 -1.75811 -0.997753 0.00627019 0.0667073 + 1.01787 0.944963 -1.83089 -0.948448 -0.308782 0.0714167 + 1.01477 0.966219 -1.79271 -0.977988 -0.167108 0.124954 + 1.03766 0.883841 -1.85642 -0.936011 -0.29024 0.199107 + 1.05344 0.863585 -1.81634 -0.869877 -0.456995 0.185658 + 1.03365 0.924709 -1.79081 -0.918624 -0.378818 0.11237 + 1.02065 0.95854 -1.7576 -0.920918 -0.382938 -0.0725823 + 1.05773 0.785549 -1.86557 -0.899163 -0.216533 0.380289 + 1.09745 0.79464 -1.78372 -0.871335 -0.271412 0.408793 + 1.08484 0.863034 -1.74498 -0.811353 -0.472962 0.34353 + 1.10162 0.703111 -1.81219 -0.838781 -0.265915 0.475117 + 1.14134 0.7122 -1.73033 -0.842879 -0.285457 0.456146 + 1.19672 0.711416 -1.63137 -0.832189 -0.330822 0.444992 + 1.12885 0.794089 -1.71237 -0.849674 -0.358839 0.386378 + 1.16576 0.605239 -1.79147 -0.747742 -0.443804 0.493882 + 1.19759 0.632303 -1.70194 -0.770217 -0.466625 0.434772 + 1.25297 0.631515 -1.60298 -0.718975 -0.531517 0.447844 + 1.24 0.709635 -1.55049 -0.78085 -0.247533 0.573585 + 1.2434 0.501544 -1.78166 -0.723235 -0.581448 0.372624 + 1.27523 0.528608 -1.69214 -0.720071 -0.51528 0.464741 + 1.30463 0.57125 -1.6108 -0.679335 -0.545572 0.490771 + 1.35822 0.581842 -1.52854 -0.656583 -0.539662 0.526938 + 1.30656 0.642111 -1.52073 -0.660908 -0.507948 0.55244 + 1.3082 0.368428 -1.9001 -0.776223 -0.545595 0.315918 + 1.3305 0.388747 -1.78369 -0.756266 -0.57022 0.320797 + 1.36581 0.406463 -1.68898 -0.730104 -0.523775 0.438872 + 1.39521 0.449102 -1.60763 -0.723074 -0.48696 0.489932 + 1.39505 0.233576 -1.88213 -0.767191 -0.520094 0.375393 + 1.4351 0.243462 -1.79225 -0.74423 -0.554587 0.37223 + 1.47042 0.261177 -1.69754 -0.73133 -0.564573 0.38264 + 1.51087 0.270411 -1.60753 -0.737571 -0.529534 0.419025 + 1.48207 0.129597 -1.87343 -0.683504 -0.633734 0.362221 + 1.52211 0.139485 -1.78356 -0.684904 -0.628296 0.368986 + 1.56892 0.142187 -1.69044 -0.68261 -0.632699 0.365698 + 1.43834 0.12236 -1.9697 -0.68387 -0.636318 0.356961 + 1.54867 0.072714 -1.86511 -0.541253 -0.786384 0.297733 + 1.60296 0.071117 -1.76894 -0.548631 -0.785206 0.287151 + 1.64978 0.073826 -1.67583 -0.594865 -0.743055 0.306601 + 1.60938 0.151428 -1.60044 -0.69843 -0.62922 0.340994 + 1.50495 0.06539 -1.96142 -0.529744 -0.799468 0.283236 + 1.55544 0.042441 -1.96028 -0.128213 -0.985428 0.111771 + 1.60319 0.045063 -1.86662 -0.144472 -0.985996 0.0833079 + 1.65748 0.043559 -1.77041 -0.154326 -0.987293 0.0378994 + 1.70933 0.036278 -1.6716 -0.220039 -0.974594 0.0418279 + 1.51392 0.035693 -2.06379 -0.118869 -0.987129 0.106985 + 1.59725 0.050773 -1.9709 0.28735 -0.952473 -0.101115 + 1.645 0.053394 -1.87724 0.255373 -0.957105 -0.136877 + 1.69304 0.049387 -1.7757 0.224058 -0.959964 -0.168126 + 1.74489 0.042194 -1.67685 0.200715 -0.952112 -0.230643 + 1.46302 0.031072 -2.16318 -0.151168 -0.984575 0.0880925 + 1.5377 0.03982 -2.07013 0.281672 -0.956024 -0.0817188 + 1.5584 0.054865 -2.10739 0.448973 -0.873183 -0.189669 + 1.61795 0.065818 -2.00816 0.470416 -0.858163 -0.205585 + 1.67244 0.068455 -1.90453 0.409726 -0.884014 -0.225042 + 1.4868 0.035107 -2.16957 0.295092 -0.946694 -0.129194 + 1.50602 0.052899 -2.20699 0.438454 -0.869963 -0.225661 + 1.58162 0.083373 -2.16217 0.614934 -0.74329 -0.263392 + 1.62722 0.088345 -2.05878 0.60824 -0.742768 -0.279892 + 1.68171 0.091068 -1.9551 0.594195 -0.735021 -0.326614 + 1.44781 0.051335 -2.30468 0.449054 -0.862328 -0.233966 + 1.52924 0.081407 -2.26176 0.526251 -0.802257 -0.281857 + 1.5361 0.121257 -2.34579 0.669314 -0.663609 -0.334129 + 1.5781 0.118879 -2.24587 0.790392 -0.519879 -0.324048 + 1.6237 0.123939 -2.14243 0.808366 -0.48473 -0.334038 + 1.48243 0.090151 -2.36191 0.53415 -0.794824 -0.287989 + 1.48929 0.129995 -2.44592 0.631937 -0.699259 -0.334204 + 1.51576 0.167229 -2.46501 0.774431 -0.511087 -0.37289 + 1.55775 0.164852 -2.3651 0.858598 -0.397825 -0.323334 + 1.59089 0.16895 -2.26439 0.878137 -0.345949 -0.330448 + 1.44616 0.135233 -2.545 0.720464 -0.622236 -0.306194 + 1.47405 0.177061 -2.55984 0.774775 -0.505775 -0.379361 + 1.461 0.248108 -2.6577 0.826048 -0.357328 -0.435846 + 1.50271 0.238276 -2.56287 0.84771 -0.346865 -0.401339 + 1.5414 0.229123 -2.47201 0.854706 -0.369007 -0.365118 + 1.40652 0.13393 -2.65054 0.744357 -0.583335 -0.325043 + 1.43091 0.182214 -2.65897 0.840434 -0.388022 -0.378298 + 1.41123 0.246872 -2.74796 0.8547 -0.287013 -0.432564 + 1.44686 0.33257 -2.73139 0.84968 -0.199013 -0.4883 + 1.49747 0.340717 -2.6479 0.883143 -0.175278 -0.435127 + 1.38632 0.185582 -2.7542 0.834678 -0.375493 -0.402887 + 1.36663 0.250236 -2.84319 0.825653 -0.28402 -0.487473 + 1.39708 0.331328 -2.82164 0.857538 -0.116913 -0.500959 + 1.37354 0.397061 -2.86469 0.823809 0.0155686 -0.566653 + 1.42783 0.407363 -2.78434 0.844701 -0.0024908 -0.535233 + 1.34029 0.187375 -2.85431 0.865257 -0.252638 -0.433018 + 1.31287 0.247542 -2.92752 0.841424 -0.178422 -0.510069 + 1.33473 0.319051 -2.90858 0.822832 -0.0951803 -0.560258 + 1.31119 0.384784 -2.95163 0.773205 0.0210807 -0.633806 + 1.25835 0.25717 -3.02199 0.787327 -0.172088 -0.592032 + 1.28097 0.316272 -2.99296 0.821111 0.0322024 -0.569859 + 1.25167 0.379392 -3.02109 0.757663 0.120298 -0.641464 + 1.19801 0.257929 -3.09751 0.775382 -0.0560858 -0.628996 + 1.22401 0.308672 -3.0596 0.761525 0.0677958 -0.64458 + 1.19471 0.371712 -3.08779 0.701771 0.120874 -0.702074 + 1.13615 0.255278 -3.16932 0.724929 -0.0724772 -0.685 + 1.16367 0.309433 -3.13512 0.744582 0.136117 -0.653506 + 1.13457 0.383945 -3.14298 0.699053 0.226511 -0.678246 + 1.17194 0.445132 -3.08136 0.662967 0.274658 -0.696446 + 1.07432 0.25742 -3.23383 0.73092 0.0408514 -0.68124 + 1.10446 0.320445 -3.19199 0.70577 0.158678 -0.690442 + 1.07535 0.395043 -3.1998 0.681112 0.252963 -0.687093 + 1.11179 0.457364 -3.13654 0.668815 0.333525 -0.664415 + 1.00851 0.253025 -3.30362 0.718451 0.0519048 -0.693639 + 1.04262 0.322675 -3.25645 0.706391 0.17828 -0.685003 + 1.01994 0.404621 -3.25099 0.681459 0.277771 -0.677094 + 1.05221 0.499857 -3.17234 0.645736 0.378265 -0.66328 + 0.944428 0.249624 -3.37032 0.732425 0.115271 -0.671019 + 0.980638 0.325053 -3.31757 0.697502 0.190228 -0.690872 + 0.957952 0.406999 -3.31211 0.678046 0.278316 -0.68029 + 0.996791 0.50944 -3.22354 0.632031 0.444915 -0.634498 + 0.881302 0.234337 -3.44385 0.706798 0.126796 -0.695959 + 0.916559 0.321651 -3.38428 0.696719 0.206907 -0.686856 + 0.899258 0.399787 -3.37301 0.672912 0.279736 -0.68479 + 0.943938 0.490236 -3.28708 0.646297 0.409179 -0.644106 + 0.876258 0.541468 -3.31861 0.473963 0.683883 -0.554674 + 0.817145 0.232554 -3.50676 0.68057 0.157737 -0.715502 + 0.853666 0.326434 -3.44337 0.669238 0.237034 -0.704227 + 0.836365 0.404575 -3.43211 0.633331 0.301495 -0.712736 + 0.885244 0.483021 -3.34798 0.629417 0.379515 -0.678087 + 0.746372 0.233952 -3.57118 0.669883 0.156931 -0.725692 + 0.789509 0.324651 -3.50627 0.662242 0.263051 -0.701598 + 0.769752 0.39896 -3.49018 0.629927 0.332175 -0.702034 + 0.826932 0.46533 -3.40914 0.598605 0.39314 -0.697935 + 0.817946 0.523864 -3.37972 0.648699 0.355459 -0.672933 + 0.680662 0.232892 -3.63234 0.679381 0.154297 -0.71738 + 0.724944 0.323717 -3.56626 0.646391 0.269001 -0.714014 + 0.705187 0.397941 -3.55022 0.552641 0.451557 -0.700488 + 0.760318 0.459718 -3.46722 0.525491 0.431257 -0.733401 + 0.763341 0.514662 -3.43259 0.527047 0.380368 -0.759962 + 0.611912 0.245471 -3.69613 0.608378 0.150566 -0.779235 + 0.659234 0.322565 -3.62746 0.632226 0.313554 -0.708501 + 0.633228 0.392851 -3.6094 0.524499 0.509453 -0.682172 + 0.686246 0.450249 -3.51362 0.447668 0.54437 -0.709404 + 0.689269 0.50519 -3.47898 0.451928 0.465408 -0.761023 + 0.53144 0.25276 -3.74876 0.483301 0.0969158 -0.870073 + 0.592167 0.301591 -3.69274 0.568567 0.318986 -0.758274 + 0.566161 0.371871 -3.67466 0.523248 0.454411 -0.720918 + 0.614287 0.445155 -3.57279 0.526912 0.546538 -0.650891 + 0.608234 0.503811 -3.53379 0.556263 0.458323 -0.69319 + 0.44283 0.266892 -3.78923 0.322154 0.0675238 -0.944276 + 0.511694 0.308967 -3.74531 0.474516 0.321334 -0.819499 + 0.494656 0.378376 -3.71793 0.459761 0.460824 -0.759119 + 0.541237 0.456002 -3.63058 0.527577 0.509415 -0.679823 + 0.535184 0.51466 -3.59158 0.537571 0.473167 -0.697947 + 0.465982 0.209252 -3.7754 0.3021 -0.258712 -0.917498 + 0.355308 0.284864 -3.81136 0.19792 0.0967771 -0.975429 + 0.431191 0.33672 -3.77258 0.354235 0.346198 -0.868714 + 0.414152 0.406132 -3.74521 0.36191 0.489554 -0.79332 + 0.469732 0.4625 -3.67384 0.430857 0.527184 -0.73242 + 0.366945 0.225613 -3.80614 0.181632 -0.242402 -0.953022 + 0.252434 0.307248 -3.82213 0.0817809 0.081911 -0.993279 + 0.343669 0.354777 -3.79466 0.231617 0.325292 -0.916809 + 0.328062 0.418079 -3.7713 0.241082 0.47718 -0.845091 + 0.389347 0.471242 -3.70698 0.340012 0.549087 -0.763475 + 0.26407 0.248002 -3.81692 0.0603427 -0.160659 -0.985164 + 0.147688 0.318304 -3.82488 -0.00684758 0.108863 -0.994033 + 0.248549 0.359507 -3.81045 0.124471 0.288709 -0.949291 + 0.232942 0.422812 -3.7871 0.176342 0.414317 -0.892885 + 0.303257 0.483193 -3.73308 0.279063 0.525115 -0.803977 + 0.176903 0.195293 -3.80722 0.0407228 -0.336927 -0.94065 + 0.157958 0.255972 -3.82512 0.0188621 -0.12006 -0.992587 + 0.046452 0.314111 -3.81882 -0.0291123 0.0995672 -0.994605 + 0.143803 0.370477 -3.81325 -0.00485322 0.230677 -0.973018 + 0.145096 0.431693 -3.79748 0.047996 0.336661 -0.940402 + 0.056722 0.196941 -3.80987 -0.00373321 -0.291163 -0.956666 + 0.056722 0.251864 -3.81901 -0.0298785 -0.0846121 -0.995966 + -0.046453 0.314111 -3.81882 0.0302387 0.0984484 -0.994683 + 0.046452 0.391079 -3.80313 -0.0262006 0.226635 -0.973627 + 0.047745 0.452294 -3.78736 0.0110155 0.228217 -0.973548 + 0.059143 0.156342 -3.79236 0.00529499 -0.546063 -0.837727 + -0.056722 0.196941 -3.80987 -0.00851193 -0.281138 -0.95963 + -0.056722 0.251864 -3.81901 0.0163078 -0.0953417 -0.995311 + -0.147688 0.318304 -3.82488 0.00542591 0.107405 -0.994201 + -0.046453 0.391079 -3.80313 0.0270779 0.227553 -0.973389 + -0.059144 0.132308 -3.76993 0.00680413 -0.70964 -0.704532 + -0.059144 0.156351 -3.79237 -0.00182354 -0.543587 -0.839351 + -0.176904 0.195293 -3.80722 -0.0322481 -0.331945 -0.942747 + -0.157958 0.255972 -3.82512 -0.00591289 -0.134356 -0.990915 + -0.054834 0.111412 -3.74713 0.0307269 -0.824498 -0.56503 + -0.174334 0.128615 -3.76833 -0.00914269 -0.683778 -0.729633 + -0.179325 0.154625 -3.78978 -0.0428574 -0.516867 -0.854992 + -0.290328 0.147155 -3.77605 -0.094679 -0.559306 -0.823537 + -0.283017 0.187238 -3.79907 -0.114784 -0.36001 -0.925861 + -0.168312 0.087521 -3.72895 0.0496754 -0.898873 -0.435385 + -0.170024 0.107717 -3.74554 0.0118117 -0.687459 -0.726127 + -0.281723 0.098999 -3.73903 -0.0584176 -0.603617 -0.795131 + -0.285337 0.121152 -3.7546 -0.091184 -0.614501 -0.783629 + -0.060586 0.096136 -3.67128 0.0466666 -0.998847 0.0113056 + -0.174064 0.085736 -3.68326 0.048937 -0.993376 0.103972 + -0.27918 0.080809 -3.67453 0.0927764 -0.98278 0.159801 + -0.28001 0.078715 -3.7225 0.0430148 -0.907461 -0.417929 + -0.174324 0.110026 -3.60193 0.0166475 -0.929162 0.369299 + -0.279441 0.105189 -3.59316 0.111749 -0.920389 0.374694 + -0.388386 0.070091 -3.66177 0.149617 -0.978069 0.144895 + -0.389216 0.067999 -3.70974 -0.117379 -0.768087 -0.629496 + -0.165895 0.16095 -3.49994 0.00834939 -0.856492 0.516093 + -0.261283 0.173084 -3.47735 0.0987227 -0.837787 0.536998 + -0.373358 0.097524 -3.56988 0.202337 -0.906663 0.370164 + -0.238391 0.271757 -3.33506 0.0595084 -0.770229 0.634984 + -0.320792 0.288955 -3.30525 0.151164 -0.739532 0.655928 + -0.3552 0.165506 -3.45403 0.181601 -0.824866 0.535366 + -0.433629 0.173555 -3.41737 0.311265 -0.773587 0.551976 + -0.458605 0.088544 -3.53053 0.331167 -0.862598 0.382431 + -0.230969 0.366491 -3.24114 0.0995276 -0.594179 0.798151 + -0.31337 0.383687 -3.21133 0.141697 -0.58093 0.801525 + -0.381253 0.419616 -3.17396 0.228272 -0.520139 0.823011 + -0.399221 0.297007 -3.26859 0.174258 -0.706702 0.685717 + -0.251102 0.432437 -3.20417 0.250327 -0.243591 0.937016 + -0.316227 0.474584 -3.16837 0.38403 -0.20214 0.900922 + -0.384109 0.510512 -3.131 0.406972 -0.225809 0.88509 + -0.241066 0.63853 -3.21133 0.377262 0.0614409 0.924066 + -0.306191 0.680596 -3.17559 0.514185 0.0625139 0.855398 + -0.370374 0.709814 -3.139 0.578864 0.0521354 0.813756 + -0.44018 0.567976 -3.08593 0.515034 -0.19669 0.834298 + -0.212319 0.988087 -3.26118 0.324308 0.127323 0.937344 + -0.282673 1.00032 -3.23376 0.461718 0.114725 0.879576 + -0.346856 1.02945 -3.19722 0.511971 0.130633 0.849011 + -0.413558 1.03519 -3.15817 0.595967 0.142712 0.790226 + -0.426445 0.767278 -3.09393 0.659974 0.0706526 0.747959 + -0.153945 1.1952 -3.31132 0.174574 0.17545 0.968887 + -0.190816 1.18047 -3.29859 0.316914 0.180531 0.931114 + -0.26117 1.19278 -3.27112 0.410115 0.201215 0.889561 + -0.344489 1.20163 -3.23224 0.477331 0.195364 0.856731 + -0.114169 1.17588 -3.31345 0.14803 0.126719 0.980831 + -0.11631 1.26212 -3.32543 0.0820971 0.192741 0.977809 + -0.160899 1.2621 -3.32539 0.0995642 0.238302 0.966074 + -0.19777 1.24737 -3.31267 0.249493 0.293113 0.922951 + -0.031937 1.24305 -3.33199 0.0637637 0.156528 0.985613 + -0.076534 1.2428 -3.32755 0.115328 0.181314 0.976639 + -0.062427 1.31189 -3.34562 0.140711 0.170437 0.97527 + -0.109376 1.31139 -3.33635 0.0787367 0.190525 0.97852 + 0.031933 1.24315 -3.33196 -0.0516016 0.145085 0.988073 + -0.017829 1.31214 -3.35006 0.0988941 0.340303 0.935101 + -0.053659 1.34977 -3.35164 0.270054 0.404265 0.873865 + -0.100608 1.34927 -3.34237 0.0763008 0.317099 0.945318 + 0.017835 1.31214 -3.35006 -0.0417941 0.393612 0.918326 + -0.017829 1.37905 -3.39174 0.160566 0.585753 0.794426 + -0.02584 1.40636 -3.41205 -0.00505257 0.861277 0.50811 + -0.061669 1.37709 -3.37195 0.172867 0.766493 0.618551 + -0.088954 1.37642 -3.3624 0.206618 0.720412 0.662054 + 0.017835 1.37904 -3.39173 -0.164955 0.59249 0.788508 + -0.013819 1.41482 -3.4315 -0.0556168 0.987237 0.149232 + -0.055307 1.40668 -3.44081 -0.117956 0.987172 -0.107599 + -0.067327 1.39831 -3.4213 -0.0216331 0.915 0.402873 + -0.094612 1.39773 -3.41171 0.27398 0.870181 0.409537 + 0.053665 1.34977 -3.35164 -0.480395 0.253956 0.83948 + 0.061669 1.37709 -3.37195 -0.172497 0.766738 0.618351 + 0.02584 1.40636 -3.41205 0.0097644 0.844262 0.535842 + 0.088951 1.37642 -3.3624 -0.206806 0.720557 0.661837 + 0.067327 1.39831 -3.4213 0.000186073 0.906139 0.42298 + 0.055319 1.40667 -3.44079 0.0784006 0.992009 -0.0988484 + 0.013832 1.41481 -3.43149 0.0804617 0.993241 0.083655 + 0.135162 1.40392 -3.37363 -0.171998 0.757538 0.629724 + 0.094609 1.39773 -3.41171 -0.26881 0.865612 0.422443 + 0.111364 1.41296 -3.42808 -0.363813 0.900301 0.238952 + 0.151917 1.41924 -3.38996 -0.307755 0.812301 0.495433 + 0.156277 1.43764 -3.42784 -0.285621 0.938718 0.19295 + 0.15292 1.43718 -3.44704 -0.206158 0.926448 -0.314948 + 0.108007 1.4125 -3.44729 -0.321138 0.911293 -0.257713 + 0.173579 1.40108 -3.36231 -0.254519 0.382566 0.88818 + 0.187502 1.42533 -3.37352 -0.0976133 0.863239 0.495267 + 0.184397 1.42224 -3.38296 -0.0686834 0.997477 0.0179669 + 0.188757 1.44073 -3.42079 -0.0162508 0.987682 0.155629 + 0.203469 1.43657 -3.38037 -0.0886693 0.716164 0.692276 + 0.244081 1.42822 -3.39051 0.285648 0.935309 -0.208812 + 0.240976 1.42512 -3.39995 0.171851 0.985119 -0.00276594 + 0.203469 1.43657 -3.38037 -0.273932 -0.186205 -0.943551 + 0.273714 1.41652 -3.42925 0.202362 0.965394 -0.164512 + 0.251959 1.4259 -3.4201 0.374003 0.924182 0.0775175 + 0.289238 1.40217 -3.48199 0.140981 0.891409 -0.430714 + 0.248195 1.41737 -3.46932 0.190556 0.89119 -0.411666 + 0.22644 1.42675 -3.46018 0.170376 0.876864 -0.449534 + 0.19974 1.44151 -3.44094 -0.121399 0.958384 -0.258385 + 0.190844 1.42436 -3.46183 -0.0614585 0.718917 -0.692374 + 0.313974 1.40012 -3.47984 0.0742122 0.891002 -0.447893 + 0.330946 1.38218 -3.50197 0.182925 0.670616 -0.718897 + 0.288755 1.38388 -3.50732 0.0512786 0.653434 -0.755245 + 0.247711 1.399 -3.4947 -0.0481689 0.666744 -0.743729 + 0.217544 1.4096 -3.48106 -0.204916 0.6054 -0.769091 + 0.346548 1.40927 -3.45969 0.00868479 0.878648 -0.477391 + 0.36352 1.39142 -3.48178 0.247026 0.695938 -0.674276 + 0.336869 1.3615 -3.51435 0.221369 0.391135 -0.893314 + 0.294678 1.3632 -3.5197 0.0467424 0.372107 -0.927012 + 0.25492 1.35791 -3.51993 -0.146598 0.337282 -0.929919 + 0.316487 1.42576 -3.40806 -0.338962 0.928199 -0.153462 + 0.364585 1.42065 -3.44061 -0.0226793 0.85014 -0.526069 + 0.389512 1.40048 -3.46206 0.323625 0.674508 -0.663556 + 0.375559 1.35026 -3.50649 0.38076 0.350827 -0.855536 + 0.385872 1.44511 -3.40436 0.212699 0.963748 -0.161084 + 0.410798 1.42493 -3.42582 0.28736 0.811221 -0.509259 + 0.401551 1.3594 -3.48672 0.374962 0.47191 -0.797938 + 0.38448 1.29631 -3.51504 0.269127 0.0632948 -0.961022 + 0.382552 1.44302 -3.37474 -0.0412554 0.987495 0.152158 + 0.431014 1.42252 -3.41704 0.349737 0.802369 -0.48362 + 0.420168 1.36919 -3.47308 0.324627 0.555358 -0.765634 + 0.428869 1.32363 -3.49155 0.49583 0.268433 -0.825891 + 0.410252 1.31375 -3.50525 0.346747 0.223354 -0.910977 + 0.437661 1.43887 -3.38337 0.217246 0.955316 -0.200436 + 0.457182 1.39153 -3.43356 0.356417 0.694627 -0.624868 + 0.440384 1.36678 -3.4643 0.431359 0.501611 -0.749877 + 0.44041 1.31497 -3.48615 0.462112 0.198961 -0.864214 + 0.428342 1.24897 -3.49684 0.418722 -0.0477808 -0.906857 + 0.459366 1.35568 -3.45866 0.298453 0.473778 -0.828529 + 0.459392 1.30386 -3.48052 0.447459 0.0877752 -0.889986 + 0.439884 1.24031 -3.49145 0.443513 -0.11501 -0.888858 + 0.45177 1.11419 -3.4558 0.628216 -0.197709 -0.7525 + 0.402571 1.23153 -3.50663 0.36982 -0.111089 -0.922438 + 0.481817 1.26982 -3.45996 0.35386 -0.164402 -0.920736 + 0.462308 1.20627 -3.47089 0.659232 -0.158976 -0.734942 + 0.500979 1.14196 -3.4007 0.548185 -0.309852 -0.776843 + 0.490441 1.04989 -3.38562 0.673376 -0.0727248 -0.735715 + 0.54169 1.23037 -3.43524 0.316975 -0.420198 -0.850271 + 0.525924 1.10772 -3.37419 0.350719 -0.259242 -0.899883 + 0.523947 1.00931 -3.36355 0.410235 0.0254605 -0.911624 + 0.483309 0.9457 -3.40716 0.38816 0.0450427 -0.920491 + 0.552783 0.998588 -3.35717 0.311503 0.0379845 -0.949486 + 0.554949 0.895571 -3.37554 0.353821 0.217668 -0.909632 + 0.516815 0.905132 -3.3851 0.440698 0.168369 -0.881724 + 0.478449 0.842041 -3.41942 0.343439 0.347188 -0.872645 + 0.453938 0.960764 -3.40646 0.18714 -0.143293 -0.971826 + 0.549585 0.807847 -3.4032 0.369654 0.20877 -0.905412 + 0.51145 0.817408 -3.41276 0.415847 0.319928 -0.851303 + 0.452226 0.777477 -3.47419 0.218744 0.143885 -0.965116 + 0.449078 0.857014 -3.41876 0.182208 0.338376 -0.923202 + 0.562027 0.731222 -3.41288 0.517741 0.338327 -0.785799 + 0.485227 0.752929 -3.46748 0.511071 0.425893 -0.746607 + 0.429639 0.78645 -3.47633 0.315643 0.499265 -0.80691 + 0.426491 0.865992 -3.42091 0.311218 0.263877 -0.912969 + 0.415375 0.969923 -3.43112 0.442703 -0.16193 -0.881925 + 0.62641 0.7248 -3.37895 0.434195 0.284204 -0.854812 + 0.57491 0.667283 -3.44113 0.539399 0.479631 -0.6921 + 0.498111 0.688905 -3.49578 0.533051 0.479051 -0.6974 + 0.419446 0.698937 -3.53976 0.36682 0.526179 -0.767189 + 0.401327 0.760889 -3.50386 0.311133 0.534954 -0.785507 + 0.6518 0.659947 -3.39483 0.434262 0.444228 -0.783632 + 0.608552 0.602889 -3.4668 0.524961 0.515402 -0.677331 + 0.526324 0.622523 -3.52641 0.530705 0.514742 -0.673344 + 0.447658 0.632468 -3.57043 0.410001 0.521637 -0.748194 + 0.685442 0.595548 -3.42048 0.398138 0.516228 -0.758284 + 0.700774 0.548617 -3.4434 0.37111 0.523403 -0.767024 + 0.619739 0.547326 -3.49816 0.532904 0.471288 -0.702781 + 0.53751 0.56696 -3.55777 0.541562 0.467465 -0.698704 + 0.769571 0.623474 -3.37065 0.414621 0.619307 -0.666744 + 0.784903 0.576636 -3.39353 0.514389 0.398737 -0.759218 + 0.824094 0.620744 -3.32732 0.689605 0.667044 -0.281952 + 0.839508 0.585837 -3.34066 0.880302 0.234367 -0.412481 + 0.850633 0.571579 -3.27597 0.691401 0.624303 -0.363607 + 0.202863 1.37775 -3.4871 -0.246237 0.390109 -0.887233 + 0.18102 1.37515 -3.48979 0.284148 0.480033 -0.829957 + 0.169001 1.42167 -3.46457 0.0410484 0.663436 -0.747106 + 0.135567 1.41214 -3.47266 -0.214545 0.785278 -0.580783 + 0.224753 1.36843 -3.50635 -0.415741 0.338208 -0.84426 + 0.23124 1.30733 -3.52613 -0.410462 0.0793803 -0.908416 + 0.20935 1.31665 -3.50687 -0.216845 0.232952 -0.948004 + 0.186503 1.33698 -3.50528 0.399705 0.319828 -0.859038 + 0.265468 1.30618 -3.52993 -0.0489671 0.0972229 -0.994057 + 0.240546 1.23784 -3.52937 -0.139411 -0.0449392 -0.989214 + 0.205617 1.25386 -3.52612 0.0793408 0.0959397 -0.99222 + 0.18277 1.27427 -3.52447 0.278017 0.213043 -0.936653 + 0.305226 1.31147 -3.52969 0.0808413 0.105789 -0.991097 + 0.313998 1.23121 -3.52948 0.11317 -0.0763665 -0.990636 + 0.274773 1.23669 -3.53318 -0.00492439 -0.0564707 -0.998392 + 0.34579 1.30755 -3.5229 0.210507 0.0991929 -0.972547 + 0.354562 1.22729 -3.52269 0.246926 -0.0850897 -0.965291 + 0.328106 1.12278 -3.50867 0.171585 -0.230828 -0.957746 + 0.288882 1.12826 -3.51238 0.130659 -0.194822 -0.972097 + 0.271159 1.09806 -3.51045 0.223639 -0.178084 -0.958265 + 0.413208 1.12335 -3.48046 0.413676 -0.219259 -0.883627 + 0.365199 1.1191 -3.49651 0.305335 -0.240667 -0.921331 + 0.340683 0.972804 -3.45911 0.350587 -0.134777 -0.926782 + 0.321531 0.967345 -3.46626 0.266288 -0.123788 -0.955912 + 0.303809 0.937137 -3.46433 0.208122 -0.0170007 -0.977955 + 0.377776 0.969135 -3.44696 0.340925 -0.160459 -0.926295 + 0.388892 0.865204 -3.43674 0.435932 0.24891 -0.864874 + 0.36058 0.839644 -3.46427 0.336231 0.355347 -0.872168 + 0.341428 0.834182 -3.47141 0.253304 0.3868 -0.886692 + 0.324119 0.755671 -3.53462 0.313321 0.54734 -0.776047 + 0.291475 0.778169 -3.53319 0.408725 0.542398 -0.733994 + 0.308783 0.856679 -3.46998 0.308499 0.272868 -0.911247 + 0.273883 0.94721 -3.48018 0.347105 -0.0545972 -0.936236 + 0.342238 0.693626 -3.57056 0.278259 0.543769 -0.791762 + 0.276321 0.788484 -3.53466 0.0526014 0.542389 -0.838479 + 0.278858 0.866753 -3.48582 0.432091 0.310496 -0.846694 + 0.263704 0.877155 -3.48724 0.0778299 0.264969 -0.961111 + 0.258453 0.951896 -3.4843 0.000965101 -0.07946 -0.996838 + 0.366268 0.635173 -3.60391 0.295469 0.53815 -0.789362 + 0.283918 0.635585 -3.63123 0.275975 0.569554 -0.774239 + 0.259889 0.694043 -3.59788 0.204008 0.580512 -0.78828 + 0.459741 0.576667 -3.60318 0.422799 0.504339 -0.752917 + 0.37835 0.579463 -3.63662 0.319651 0.54525 -0.774936 + 0.295794 0.585203 -3.66637 0.295661 0.573611 -0.763908 + 0.19882 0.638771 -3.65915 0.19567 0.613711 -0.7649 + 0.457415 0.524364 -3.63699 0.426486 0.501637 -0.752642 + 0.37703 0.533192 -3.67008 0.33887 0.534265 -0.774421 + 0.294473 0.538852 -3.69988 0.299305 0.539182 -0.787209 + 0.210359 0.547039 -3.72446 0.243693 0.54762 -0.800454 + 0.210696 0.588303 -3.69433 0.234628 0.586332 -0.775348 + 0.219143 0.491294 -3.75771 0.226493 0.465643 -0.855499 + 0.125856 0.550614 -3.74385 0.164237 0.519415 -0.83859 + 0.126193 0.591881 -3.71373 0.161139 0.615806 -0.771244 + 0.121754 0.635303 -3.67714 0.13727 0.643985 -0.752622 + 0.177596 0.693464 -3.61488 0.148772 0.64176 -0.752337 + 0.131297 0.500173 -3.76809 0.116093 0.402432 -0.908059 + 0.042305 0.554897 -3.75507 0.0635508 0.528745 -0.846398 + 0.042305 0.592503 -3.72521 0.0562201 0.633567 -0.771642 + 0.037866 0.635925 -3.68862 0.0399128 0.675958 -0.735859 + 0.10053 0.689996 -3.63287 0.0719798 0.673846 -0.735357 + 0.047745 0.504458 -3.77931 0.0729337 0.299081 -0.951436 + -0.042299 0.554897 -3.75507 -0.067407 0.531543 -0.844345 + -0.042299 0.592503 -3.72521 -0.0608131 0.630536 -0.773774 + -0.037866 0.635925 -3.68862 -0.0506536 0.684472 -0.727278 + 0.037866 0.679163 -3.64331 -0.00267406 0.708749 -0.705456 + -0.047746 0.452294 -3.78736 0.0304382 0.197922 -0.979745 + -0.047746 0.504458 -3.77931 -0.0424475 0.326367 -0.94429 + -0.125851 0.550614 -3.74385 -0.160109 0.522816 -0.837274 + -0.126187 0.591881 -3.71373 -0.157705 0.613615 -0.773696 + -0.121754 0.635303 -3.67714 -0.12676 0.65031 -0.749018 + -0.145096 0.431693 -3.79748 -0.0623385 0.323363 -0.94422 + -0.131297 0.500178 -3.7681 -0.145146 0.428246 -0.891929 + -0.219143 0.491294 -3.75771 -0.209934 0.478385 -0.852687 + -0.210358 0.547039 -3.72446 -0.244548 0.548124 -0.799848 + -0.210694 0.588303 -3.69433 -0.23583 0.585459 -0.775643 + -0.143803 0.370477 -3.81325 0.00251031 0.232517 -0.972589 + -0.248561 0.359502 -3.81044 -0.121637 0.291314 -0.948863 + -0.232942 0.422812 -3.7871 -0.158052 0.39551 -0.90476 + -0.252446 0.307248 -3.82213 -0.0774734 0.0785539 -0.993895 + -0.35532 0.284859 -3.81135 -0.199613 0.0952325 -0.975236 + -0.343681 0.354772 -3.79465 -0.23448 0.327842 -0.915171 + -0.328062 0.418079 -3.7713 -0.254814 0.466885 -0.846811 + -0.264071 0.247997 -3.81691 -0.0745682 -0.171886 -0.98229 + -0.366946 0.225613 -3.80614 -0.132483 -0.290398 -0.947691 + -0.46598 0.209252 -3.7754 -0.303117 -0.259466 -0.91695 + -0.442819 0.266897 -3.78924 -0.331122 0.0754069 -0.94057 + -0.43118 0.336725 -3.77259 -0.359 0.341411 -0.868653 + -0.389832 0.172658 -3.77302 -0.164427 -0.462954 -0.870998 + -0.488867 0.156299 -3.74228 -0.250614 -0.490366 -0.834706 + -0.5842 0.141337 -3.69717 -0.391415 -0.430963 -0.813059 + -0.55459 0.195116 -3.73491 -0.440772 -0.204233 -0.874076 + -0.531429 0.25276 -3.74876 -0.478224 0.101717 -0.872327 + -0.397143 0.132582 -3.75 -0.165876 -0.58462 -0.794169 + -0.499958 0.118466 -3.71255 -0.223329 -0.626162 -0.747024 + -0.595291 0.103505 -3.66744 -0.313826 -0.635406 -0.70553 + -0.682147 0.090917 -3.60984 -0.426149 -0.606739 -0.671018 + -0.666436 0.129377 -3.64445 -0.515866 -0.36769 -0.773748 + -0.392791 0.111121 -3.72923 -0.149574 -0.648977 -0.74596 + -0.495606 0.097005 -3.69178 -0.205233 -0.691502 -0.692607 + -0.58794 0.081027 -3.64191 -0.270917 -0.723488 -0.634956 + -0.674795 0.068439 -3.5843 -0.302017 -0.766649 -0.5666 + -0.389177 0.088968 -3.71366 -0.237191 -0.396388 -0.886914 + -0.490638 0.07538 -3.67233 -0.347933 -0.472663 -0.80965 + -0.582971 0.059404 -3.62245 -0.295983 -0.729356 -0.616794 + -0.656429 0.045461 -3.56171 -0.300589 -0.794469 -0.527698 + -0.74931 0.051972 -3.51798 -0.404311 -0.725625 -0.556778 + -0.490677 0.054324 -3.66846 -0.271277 -0.764678 -0.584531 + -0.56356 0.039286 -3.60281 -0.0151808 -0.956663 -0.290801 + -0.637018 0.02535 -3.54207 -0.0474612 -0.975787 -0.213512 + -0.704689 0.015375 -3.47239 0.0497116 -0.991183 -0.12282 + -0.730944 0.029087 -3.49534 -0.262881 -0.859505 -0.438343 + -0.473633 0.061026 -3.62246 0.236519 -0.960869 0.144188 + -0.546516 0.045994 -3.55683 0.304335 -0.934442 0.184926 + -0.614262 0.039505 -3.49159 0.342227 -0.909834 0.234698 + -0.681933 0.029531 -3.42191 0.368968 -0.893535 0.255847 + -0.772297 0.004586 -3.40171 0.0500294 -0.996834 -0.0617984 + -0.528557 0.085339 -3.47517 0.405513 -0.811049 0.421613 + -0.596303 0.078852 -3.40994 0.494828 -0.754489 0.431152 + -0.652092 0.083551 -3.34128 0.521612 -0.720876 0.456354 + -0.711505 0.081249 -3.27089 0.568741 -0.688788 0.44956 + -0.741345 0.027227 -3.35152 0.404557 -0.867117 0.290587 + -0.503581 0.170259 -3.36206 0.382646 -0.723755 0.574248 + -0.56616 0.187379 -3.30871 0.483675 -0.646985 0.589464 + -0.62195 0.191992 -3.2401 0.566958 -0.581271 0.583681 + -0.67323 0.214898 -3.17478 0.622908 -0.5263 0.578787 + -0.468642 0.323794 -3.23039 0.287651 -0.643127 0.709679 + -0.531221 0.340828 -3.17709 0.323101 -0.596325 0.734848 + -0.582788 0.389107 -3.12352 0.470962 -0.508368 0.720942 + -0.634068 0.412018 -3.0582 0.618481 -0.435186 0.654289 + -0.450673 0.446399 -3.13575 0.234921 -0.518637 0.822087 + -0.505423 0.495836 -3.08818 0.369441 -0.453015 0.811351 + -0.55699 0.544116 -3.0346 0.409437 -0.430524 0.80437 + -0.60776 0.585761 -2.98813 0.557687 -0.34303 0.755854 + -0.682178 0.444467 -2.9922 0.711149 -0.381336 0.590635 + -0.49493 0.617412 -3.03835 0.563081 -0.203271 0.801013 + -0.542085 0.679823 -2.98485 0.613253 -0.170892 0.771178 + -0.592855 0.721468 -2.93838 0.391013 -0.158552 0.906626 + -0.650256 0.756918 -2.92238 0.560709 -0.0199546 0.827772 + -0.655871 0.618124 -2.92219 0.749676 -0.176908 0.637722 + -0.483712 0.796392 -3.04775 0.710443 0.0649358 0.700752 + -0.530867 0.858801 -2.99425 0.728672 0.117238 0.674754 + -0.584755 0.88381 -2.95217 0.515703 0.130637 0.846749 + -0.470825 1.0643 -3.11199 0.622835 0.17802 0.76183 + -0.531515 1.06107 -3.06439 0.644572 0.214255 0.733909 + -0.585403 1.08609 -3.02232 0.67448 0.232207 0.700826 + -0.636956 1.07292 -2.96692 0.67064 0.202604 0.713578 + -0.642155 0.919266 -2.93618 0.538513 0.108757 0.835569 + -0.411191 1.20737 -3.19319 0.503364 0.263393 0.822951 + -0.478377 1.20727 -3.14921 0.561896 0.270668 0.781673 + -0.539068 1.20412 -3.10156 0.564598 0.326131 0.7582 + -0.571991 1.21055 -3.0797 0.641148 0.346885 0.684544 + -0.596152 1.19696 -3.04635 0.701851 0.271422 0.658586 + -0.380483 1.26394 -3.22597 0.349973 0.242226 0.904901 + -0.405022 1.26374 -3.22323 0.282333 0.308878 0.90823 + -0.441117 1.27996 -3.20793 0.54275 0.227806 0.80841 + -0.447286 1.2236 -3.1779 0.531465 0.351648 0.770641 + -0.508162 1.25605 -3.14551 0.52243 0.305436 0.7961 + -0.324758 1.21402 -3.24652 0.480054 0.237997 0.844337 + -0.360752 1.27625 -3.24029 0.609766 0.256482 0.749935 + -0.393174 1.33562 -3.23593 0.412858 0.166265 0.895491 + -0.417713 1.33543 -3.23319 0.36587 -0.0340581 0.930042 + -0.448258 1.31784 -3.20993 0.587047 0.0656499 0.806886 + -0.308602 1.21724 -3.25628 0.396627 0.337141 0.853828 + -0.351967 1.277 -3.25119 0.613052 0.290892 0.73454 + -0.374757 1.3333 -3.24891 0.66002 0.269898 0.701091 + -0.401247 1.40643 -3.25577 0.458557 0.565264 0.685712 + -0.421983 1.37743 -3.22175 0.479854 0.342175 0.807872 + -0.280751 1.22028 -3.26996 0.415013 0.246145 0.875886 + -0.29321 1.28676 -3.2803 0.400311 0.192049 0.896029 + -0.335811 1.28021 -3.26095 0.416642 0.221769 0.881605 + -0.365972 1.33396 -3.25985 0.570043 0.250602 0.782464 + -0.38283 1.40402 -3.26879 0.617982 0.481989 0.621115 + -0.22293 1.28596 -3.31451 0.403117 0.211752 0.890313 + -0.265359 1.28981 -3.29397 0.432818 0.192407 0.880709 + -0.296601 1.33175 -3.28702 0.389387 0.0914541 0.916523 + -0.339203 1.3252 -3.26767 0.356037 0.195876 0.913712 + -0.363124 1.38293 -3.27388 0.434251 0.348162 0.830788 + -0.203349 1.25836 -3.31571 0.268914 0.296926 0.916253 + -0.21125 1.33662 -3.33106 0.472873 0.215991 0.854248 + -0.253679 1.34056 -3.31048 0.454215 0.0415636 0.889922 + -0.301621 1.37405 -3.28068 0.184177 0.216919 0.958658 + -0.336355 1.37418 -3.28171 0.216154 0.405705 0.888077 + -0.177853 1.30966 -3.33677 0.046587 0.281948 0.958298 + -0.183432 1.32058 -3.33987 0.184337 0.273368 0.944081 + -0.186302 1.34668 -3.34808 0.163969 0.306378 0.937682 + -0.214493 1.40225 -3.35213 0.483943 0.417706 0.768974 + -0.258698 1.38294 -3.30408 0.492748 0.276341 0.825127 + -0.153965 1.31145 -3.33627 -0.0179711 0.23833 0.971018 + -0.170708 1.37498 -3.3541 -0.0879593 0.279533 0.956098 + -0.173578 1.40108 -3.36231 -0.00961449 0.393126 0.919434 + -0.189545 1.41231 -3.36916 0.0731095 0.393161 0.916558 + -0.224264 1.42835 -3.36575 0.0706971 0.86016 0.505101 + -0.146819 1.37676 -3.35359 0.0449542 0.416268 0.90813 + -0.187495 1.4252 -3.37349 0.259943 0.850018 0.458148 + -0.203462 1.43643 -3.38034 0.0906212 0.718171 0.689941 + -0.135165 1.40392 -3.37363 0.262243 0.744137 0.614401 + -0.184397 1.42224 -3.38296 0.271134 0.927153 0.258599 + -0.240976 1.42512 -3.39995 -0.0953237 0.995206 0.0218627 + -0.244074 1.42809 -3.39048 -0.282114 0.937571 -0.203402 + -0.203462 1.43643 -3.38034 0.273906 -0.186256 -0.943549 + -0.111356 1.41296 -3.42808 0.411951 0.891038 0.190648 + -0.15191 1.41924 -3.38996 0.294832 0.849487 0.437546 + -0.188757 1.44073 -3.42079 0.00273671 0.9709 0.239468 + -0.059856 1.40067 -3.4512 -0.0651882 0.889861 -0.451551 + -0.075108 1.39564 -3.46168 0.0534032 0.927157 -0.370848 + -0.094483 1.39846 -3.46257 0.263931 0.905424 -0.332488 + -0.108024 1.41251 -3.4473 0.594 0.795571 -0.119289 + -0.152937 1.43718 -3.44704 0.134764 0.951098 -0.277942 + -0.15627 1.43764 -3.42784 0.245363 0.960705 0.129784 + -0.199714 1.44152 -3.44096 -0.0491463 0.962796 -0.265722 + -0.190848 1.42427 -3.46188 0.0699882 0.706934 -0.703808 + -0.226414 1.42676 -3.46019 -0.169941 0.876752 -0.449919 + -0.251933 1.42591 -3.42012 -0.191869 0.97744 -0.0883005 + -0.169 1.42167 -3.46457 -0.0414682 0.663814 -0.746748 + -0.202867 1.37775 -3.4871 0.281507 0.355621 -0.891228 + -0.224757 1.36843 -3.50635 0.411895 0.33284 -0.848269 + -0.217548 1.4096 -3.48106 0.16487 0.63056 -0.758428 + -0.248204 1.41737 -3.46932 -0.190634 0.891346 -0.411292 + -0.135584 1.41214 -3.47267 0.214519 0.78425 -0.58218 + -0.151647 1.39662 -3.49018 -0.174491 0.673595 -0.718208 + -0.181019 1.37515 -3.48979 -0.284144 0.480028 -0.829961 + -0.186503 1.33698 -3.50528 -0.399625 0.319892 -0.859051 + -0.209365 1.31665 -3.50687 0.237464 0.274236 -0.931882 + -0.122043 1.39809 -3.48794 0.148184 0.822446 -0.549203 + -0.126074 1.37867 -3.50889 -0.012152 0.668185 -0.743896 + -0.153831 1.37137 -3.51385 -0.335538 0.546428 -0.767353 + -0.159315 1.33329 -3.52929 -0.386848 0.284674 -0.877103 + -0.099131 1.38335 -3.5078 0.0769065 0.841667 -0.534492 + -0.117655 1.38251 -3.50654 -0.114319 0.666873 -0.73635 + -0.08848 1.33753 -3.53403 0.096666 0.317675 -0.943259 + -0.128258 1.35342 -3.53255 -0.0913116 0.443083 -0.891818 + -0.135059 1.31346 -3.53994 -0.170567 0.144479 -0.974696 + -0.079756 1.38052 -3.5069 0.187132 0.841228 -0.507263 + -0.094743 1.36776 -3.5264 -0.316799 0.300163 -0.899745 + -0.080061 1.34137 -3.53168 0.0987366 0.286026 -0.953121 + -0.058754 1.33893 -3.52826 0.372046 0.284184 -0.883641 + -0.095281 1.29757 -3.54142 0.078685 0.123629 -0.989204 + -0.046942 1.38944 -3.47895 0.106689 0.861233 -0.496885 + -0.040622 1.37433 -3.49498 0.332874 0.638963 -0.693485 + -0.073436 1.36542 -3.52293 0.299095 0.53609 -0.789398 + -0.03169 1.39448 -3.46848 -0.0312237 0.779153 -0.626056 + -0.020389 1.38216 -3.47973 0.176764 0.613621 -0.769561 + -0.022016 1.35661 -3.49828 0.457628 0.376069 -0.805698 + -0.04225 1.34878 -3.51353 0.457271 0.395466 -0.796561 + -0.018368 1.40455 -3.46031 -0.0775444 0.795788 -0.60059 + -0.007067 1.39222 -3.47157 0.0127303 0.600312 -0.799664 + -0.007067 1.36636 -3.48576 0.180249 0.415998 -0.891322 + -0.013819 1.41047 -3.44996 -0.0705546 0.930499 -0.359435 + 0.013832 1.41055 -3.4499 0.05415 0.915858 -0.397834 + 0.007074 1.39222 -3.47157 -0.0157734 0.626372 -0.779365 + 0.01834 1.40455 -3.46031 -0.0100483 0.803799 -0.594816 + 0.031661 1.39457 -3.46843 0.0321566 0.7794 -0.625701 + 0.020396 1.38225 -3.47968 -0.176175 0.613781 -0.769568 + 0.007074 1.36644 -3.48571 -0.179221 0.416617 -0.891241 + 0.059827 1.40067 -3.4512 0.0313504 0.880414 -0.473169 + 0.046942 1.38944 -3.47895 -0.105918 0.860726 -0.497928 + 0.040618 1.37425 -3.49503 -0.335451 0.641835 -0.68958 + 0.022024 1.35669 -3.49822 -0.457355 0.376553 -0.805626 + 0.006906 1.32209 -3.4975 -0.282331 0.204947 -0.937169 + 0.075108 1.39564 -3.46168 -0.086145 0.896469 -0.434653 + 0.079756 1.38052 -3.5069 -0.187833 0.840961 -0.507448 + 0.073432 1.36533 -3.52298 -0.288449 0.539421 -0.791089 + 0.042246 1.34869 -3.51357 -0.496431 0.365892 -0.787197 + 0.094483 1.39846 -3.46257 -0.231166 0.863868 -0.447543 + 0.099131 1.38335 -3.5078 -0.0774568 0.841973 -0.53393 + 0.094713 1.36778 -3.52642 0.316134 0.300896 -0.899734 + 0.080031 1.34138 -3.53171 -0.0996003 0.274027 -0.956551 + 0.05875 1.33893 -3.52826 -0.37021 0.273795 -0.887683 + 0.122043 1.39809 -3.48794 -0.155638 0.822449 -0.547133 + 0.117625 1.38252 -3.50657 0.115323 0.666777 -0.736281 + 0.088466 1.33752 -3.53402 -0.0944428 0.320119 -0.942658 + 0.066479 1.28183 -3.53956 -0.298008 0.0248699 -0.954239 + 0.051653 1.3072 -3.5327 -0.435792 0.115722 -0.892577 + 0.151647 1.39662 -3.49018 0.176984 0.67318 -0.717987 + 0.12606 1.37867 -3.50889 0.0129282 0.667218 -0.744751 + 0.128244 1.35342 -3.53255 0.0910695 0.443035 -0.891867 + 0.135067 1.31345 -3.53993 0.159501 0.111153 -0.98092 + 0.095289 1.29747 -3.54145 -0.0440092 0.106649 -0.993322 + 0.153831 1.37137 -3.51385 0.335495 0.546419 -0.767378 + 0.159315 1.33329 -3.52929 0.386712 0.284775 -0.87713 + 0.158522 1.25435 -3.53517 0.258226 0.00560321 -0.966068 + 0.122837 1.23369 -3.54737 0.1603 -0.0281909 -0.986666 + 0.094027 1.21796 -3.54554 -0.197356 -0.128487 -0.971875 + 0.2026 1.15117 -3.50946 -0.0385232 -0.237621 -0.970594 + 0.17446 1.14901 -3.5117 0.261492 -0.223895 -0.938879 + 0.138775 1.12834 -3.52391 0.281318 -0.20583 -0.93728 + 0.101669 1.11634 -3.52693 -0.122127 -0.208053 -0.970463 + 0.049246 1.23504 -3.52671 -0.460089 -0.109814 -0.881056 + 0.237529 1.13524 -3.51266 -0.300422 -0.19243 -0.934193 + 0.199765 0.994883 -3.45615 -0.287079 -0.149053 -0.946239 + 0.171624 0.99271 -3.45839 0.4724 -0.128666 -0.871942 + 0.153737 0.971674 -3.47695 0.424746 -0.0277147 -0.904888 + 0.116631 0.959679 -3.47998 0.100339 -0.0814759 -0.991612 + 0.255729 1.10274 -3.51457 -0.0779485 -0.151425 -0.985391 + 0.224304 0.9899 -3.47912 -0.551881 -0.114408 -0.826038 + 0.234171 0.879942 -3.47827 -0.562222 0.116394 -0.818755 + 0.209632 0.884925 -3.4553 -0.123649 0.201072 -0.971741 + 0.188623 0.8582 -3.47441 0.319617 0.414404 -0.852123 + 0.242504 0.9574 -3.48103 -0.169874 -0.0526683 -0.984057 + 0.247755 0.882659 -3.48397 -0.282803 0.165282 -0.94483 + 0.262738 0.785681 -3.529 -0.288017 0.565391 -0.772903 + 0.241729 0.758958 -3.54812 -0.00934317 0.620757 -0.783948 + 0.170736 0.837166 -3.49298 0.137954 0.507563 -0.850499 + 0.159436 0.758378 -3.56511 0.111522 0.648325 -0.753152 + 0.116505 0.772062 -3.55781 0.0292675 0.639227 -0.768461 + 0.127805 0.850848 -3.48568 -0.00138549 0.334279 -0.942473 + 0.085191 0.749427 -3.57601 -0.010711 0.681014 -0.732192 + 0.078727 0.845574 -3.49134 0.111025 0.389887 -0.914145 + 0.067553 0.954492 -3.48559 -0.0841475 -0.0805331 -0.993194 + 0.022527 0.738598 -3.58645 -0.0021121 0.70788 -0.706329 + 0.022527 0.824989 -3.49509 -0.205911 0.446642 -0.870696 + 0.047413 0.822939 -3.50954 -0.213885 0.473741 -0.854297 + 0.035048 0.945606 -3.4772 -0.352676 0.0103365 -0.935688 + 0.056888 1.13333 -3.50816 -0.321801 -0.170372 -0.931352 + -0.037866 0.679168 -3.64332 -0.0184305 0.697304 -0.716538 + -0.022528 0.738598 -3.58645 0.0101019 0.698287 -0.715747 + -0.022528 0.824989 -3.49509 0.22356 0.465964 -0.856095 + -0.010165 0.947661 -3.46276 0.244268 0.00352737 -0.969701 + 0.010163 0.947656 -3.46275 -0.235267 0.0157254 -0.971803 + -0.100529 0.689996 -3.63287 -0.061335 0.66172 -0.747238 + -0.085191 0.749427 -3.57601 -0.00416693 0.672755 -0.739853 + -0.047413 0.822939 -3.50954 0.152378 0.551159 -0.820368 + -0.03505 0.945606 -3.4772 0.345375 -0.00167197 -0.938463 + -0.198824 0.638771 -3.65915 -0.209035 0.627992 -0.74962 + -0.177599 0.693464 -3.61488 -0.164666 0.632744 -0.756651 + -0.159444 0.758378 -3.56511 -0.108944 0.645719 -0.755763 + -0.116506 0.772062 -3.55781 -0.029263 0.639229 -0.768459 + -0.078728 0.845574 -3.49134 -0.110972 0.389815 -0.914182 + -0.283922 0.635585 -3.63123 -0.261182 0.578932 -0.772413 + -0.259892 0.694038 -3.59787 -0.188098 0.563649 -0.804313 + -0.241737 0.759039 -3.54806 -0.0548734 0.61744 -0.784702 + -0.295792 0.585203 -3.66637 -0.295008 0.573145 -0.76451 + -0.378347 0.579463 -3.63662 -0.327201 0.538748 -0.776331 + -0.366271 0.635173 -3.60391 -0.301963 0.546706 -0.78098 + -0.294472 0.538846 -3.69987 -0.298325 0.540013 -0.787012 + -0.377027 0.533192 -3.67008 -0.343154 0.53723 -0.770473 + -0.457412 0.524364 -3.63699 -0.420185 0.50786 -0.752012 + -0.459738 0.576753 -3.60313 -0.419189 0.501755 -0.756653 + -0.447662 0.632468 -3.57043 -0.403088 0.526571 -0.748494 + -0.303257 0.483193 -3.73308 -0.296881 0.543916 -0.784868 + -0.38935 0.471242 -3.70698 -0.348059 0.542941 -0.764245 + -0.469735 0.4625 -3.67384 -0.424179 0.519869 -0.741491 + -0.541235 0.456002 -3.63058 -0.514318 0.520291 -0.681743 + -0.535185 0.51466 -3.59158 -0.538157 0.473573 -0.69722 + -0.414155 0.406132 -3.74521 -0.373511 0.500378 -0.781097 + -0.494659 0.378376 -3.71793 -0.454684 0.466169 -0.758913 + -0.566159 0.371876 -3.67467 -0.519093 0.44633 -0.728925 + -0.511684 0.308967 -3.74531 -0.460029 0.306354 -0.833379 + -0.592165 0.301591 -3.69274 -0.579007 0.31238 -0.753107 + -0.633226 0.392851 -3.6094 -0.550613 0.490718 -0.675294 + -0.614285 0.445155 -3.57279 -0.535048 0.557665 -0.634612 + -0.608234 0.503811 -3.53379 -0.554614 0.460293 -0.693205 + -0.61191 0.245383 -3.69618 -0.617183 0.164426 -0.769447 + -0.68066 0.232892 -3.63234 -0.674761 0.159253 -0.72065 + -0.659232 0.322565 -3.62746 -0.629497 0.306615 -0.713947 + -0.724942 0.323717 -3.56626 -0.645886 0.269511 -0.71428 + -0.705186 0.397941 -3.55022 -0.566836 0.471824 -0.675336 + -0.636826 0.183152 -3.68219 -0.592698 -0.0935264 -0.799976 + -0.705576 0.170573 -3.61841 -0.679548 0.0578139 -0.731349 + -0.779496 0.166131 -3.55111 -0.676408 0.052661 -0.734642 + -0.74637 0.233952 -3.57118 -0.669501 0.156098 -0.726224 + -0.747388 0.126032 -3.58026 -0.631936 -0.219128 -0.743397 + -0.821308 0.121588 -3.51296 -0.685282 -0.159372 -0.710626 + -0.891356 0.117655 -3.44035 -0.715784 -0.185291 -0.673291 + -0.850268 0.164728 -3.48668 -0.701302 0.0115068 -0.712771 + -0.817142 0.232554 -3.50676 -0.680946 0.157225 -0.715257 + -0.763098 0.087575 -3.54565 -0.543683 -0.518915 -0.659648 + -0.834658 0.079343 -3.47739 -0.586614 -0.506409 -0.632008 + -0.904706 0.07541 -3.40478 -0.65785 -0.463285 -0.593802 + -0.966542 0.072591 -3.32869 -0.691116 -0.479752 -0.540552 + -0.957584 0.120966 -3.36748 -0.768471 -0.136347 -0.62519 + -0.82087 0.04374 -3.44972 -0.448737 -0.722323 -0.526198 + -0.887214 0.033712 -3.37595 -0.504798 -0.713993 -0.485173 + -0.94905 0.030974 -3.29981 -0.569094 -0.712661 -0.410178 + -0.798552 0.018302 -3.42467 -0.296489 -0.871084 -0.391543 + -0.864896 0.00827 -3.35089 -0.308312 -0.89423 -0.324494 + -0.925134 0.007858 -3.27797 -0.362021 -0.900442 -0.241133 + -1.0044 0.03507 -3.21691 -0.558394 -0.753938 -0.346083 + -0.835807 -0.002219 -3.32752 0.0706723 -0.997497 -0.00213926 + -0.896045 -0.00263 -3.25461 0.0113316 -0.996675 0.0806855 + -0.963489 0.009705 -3.17978 0.0460634 -0.990561 0.129104 + -0.980483 0.012045 -3.19503 -0.323737 -0.931545 -0.165586 + -0.804855 0.020423 -3.27734 0.400169 -0.864293 0.304734 + -0.863391 0.02385 -3.19867 0.341767 -0.865227 0.366849 + -0.930835 0.036187 -3.12384 0.332217 -0.895097 0.297376 + -1.02345 0.014294 -3.08632 0.11366 -0.991258 0.0669937 + -1.04045 0.016546 -3.10162 -0.330771 -0.929967 -0.160475 + -0.763432 0.084119 -3.20166 0.576011 -0.679436 0.454508 + -0.821968 0.087465 -3.12306 0.556768 -0.713211 0.425839 + -0.874487 0.089583 -3.03133 0.574691 -0.741456 0.346371 + -0.932695 0.086978 -2.94961 0.555391 -0.769562 0.315143 + -0.989043 0.03358 -3.04213 0.366423 -0.907486 0.205433 + -0.725157 0.217773 -3.10556 0.71214 -0.4788 0.513427 + -0.772757 0.219313 -3.03282 0.74329 -0.482304 0.463577 + -0.825276 0.221345 -2.94114 0.779225 -0.477597 0.405844 + -0.873382 0.196486 -2.86869 0.752954 -0.532971 0.386008 + -0.729778 0.44592 -2.91952 0.833864 -0.316914 0.451926 + -0.771455 0.415147 -2.84922 0.852014 -0.346097 0.392797 + -0.819561 0.390287 -2.77676 0.854515 -0.378972 0.355225 + -0.701812 0.617653 -2.86977 0.818919 -0.148005 0.554496 + -0.743489 0.586878 -2.79947 0.899891 -0.122892 0.418443 + -0.779279 0.535043 -2.72769 0.92705 -0.224895 0.300002 + -0.860866 0.33565 -2.72173 0.835946 -0.441921 0.325424 + -0.696197 0.756447 -2.86997 0.788908 0.0101232 0.614427 + -0.736259 0.710197 -2.81106 0.870703 -0.0053864 0.49178 + -0.772049 0.658362 -2.73928 0.950574 -0.0242424 0.309549 + -0.792939 0.560906 -2.64128 0.945914 -0.168161 0.277431 + -0.820584 0.480402 -2.67264 0.901959 -0.363881 0.23251 + -0.691375 0.908283 -2.88575 0.764759 0.0617762 0.641348 + -0.731438 0.862037 -2.82686 0.863204 0.0356039 0.503599 + -0.76395 0.810468 -2.75313 0.937546 0.0290762 0.346643 + -0.686176 1.06194 -2.9165 0.78134 0.0960812 0.616665 + -0.725744 1.0435 -2.85377 0.869827 0.0488439 0.490933 + -0.758256 0.991941 -2.78005 0.905073 0.0472874 0.422619 + -0.787588 0.970479 -2.71248 0.919307 0.063206 0.388433 + -0.78484 0.713096 -2.65508 0.956327 0.0252929 0.291203 + -0.647704 1.1838 -2.99096 0.730735 0.247443 0.636238 + -0.686414 1.1672 -2.92421 0.862902 0.0838233 0.498371 + -0.725982 1.14876 -2.86148 0.882645 -0.0251462 0.469367 + -0.746306 1.13431 -2.82284 0.889112 -0.0362587 0.456251 + -0.76236 1.12166 -2.79273 0.897618 -0.0208858 0.440279 + -0.619839 1.24072 -3.04455 0.693616 0.2983 0.655679 + -0.664021 1.23222 -2.99483 0.72792 0.289704 0.621453 + -0.692099 1.2342 -2.95767 0.857161 0.331456 0.394224 + -0.675783 1.18578 -2.9538 0.816407 0.320006 0.480704 + -0.708607 1.21854 -2.89153 0.884636 0.108438 0.453498 + -0.595678 1.25431 -3.07789 0.74964 0.353486 0.559542 + -0.635705 1.28287 -3.04436 0.731787 0.285136 0.619019 + -0.679887 1.27437 -2.99464 0.74163 0.19584 0.641586 + -0.70025 1.26598 -2.9665 0.839518 0.242642 0.486143 + -0.704011 1.26531 -2.95615 0.936856 0.249922 0.244623 + -0.695861 1.23354 -2.94732 0.935366 0.302221 0.18372 + -0.582981 1.25574 -3.09956 0.671599 0.364336 0.645146 + -0.597425 1.28722 -3.0997 0.742004 0.376349 0.55479 + -0.610123 1.2858 -3.07803 0.766642 0.342624 0.543017 + -0.646453 1.31519 -3.04893 0.709055 0.458261 0.535946 + -0.6901 1.32223 -2.99213 0.70561 0.434965 0.559392 + -0.550057 1.24921 -3.12147 0.486541 0.372525 0.790255 + -0.596822 1.29737 -3.10788 0.671906 0.327617 0.664235 + -0.620871 1.31811 -3.08259 0.754948 0.366346 0.543915 + -0.529577 1.30636 -3.14945 0.480931 0.214275 0.850171 + -0.571472 1.29953 -3.12542 0.496228 0.240126 0.834324 + -0.622424 1.35607 -3.10695 0.496206 0.448015 0.743681 + -0.620268 1.32826 -3.09078 0.698394 0.445526 0.560137 + -0.477071 1.2723 -3.17425 0.588087 0.245457 0.770652 + -0.484212 1.31017 -3.17625 0.574634 0.175209 0.799436 + -0.540517 1.34949 -3.15255 0.452004 0.340472 0.824482 + -0.597073 1.35823 -3.12449 0.481182 0.399079 0.780513 + -0.495152 1.35338 -3.17929 0.417314 0.402569 0.814732 + -0.570031 1.37209 -3.15169 0.326319 0.76413 0.556436 + -0.626587 1.38075 -3.12369 0.149002 0.981322 0.121681 + -0.644495 1.37625 -3.1081 -0.00598481 0.829881 0.557908 + -0.642339 1.34843 -3.09192 0.327896 0.663587 0.672411 + -0.452528 1.35984 -3.19848 0.447026 0.208104 0.869977 + -0.458403 1.38412 -3.21673 0.0612236 0.828206 0.557069 + -0.501026 1.37766 -3.19754 0.156714 0.805843 0.571014 + -0.535893 1.3848 -3.19771 0.279328 0.862153 0.422691 + -0.57182 1.37949 -3.16631 0.24394 0.854031 0.459483 + -0.437333 1.39596 -3.23444 -0.0313357 0.815458 0.577967 + -0.486669 1.39281 -3.26778 -0.00487984 0.951158 0.308667 + -0.521536 1.39995 -3.26795 0.105452 0.987283 0.118962 + -0.597879 1.41285 -3.21729 0.0989004 0.983156 0.153695 + -0.633806 1.40745 -3.18594 0.0527407 0.941863 0.331833 + -0.416597 1.42487 -3.26851 -0.130774 0.790754 0.598002 + -0.4656 1.40456 -3.28554 -0.464568 0.870663 0.161624 + -0.455866 1.41022 -3.31814 -0.231533 0.963696 0.132973 + -0.541909 1.39688 -3.30343 -0.104008 0.971629 -0.212412 + -0.403292 1.43617 -3.27808 0.126301 0.67881 0.723371 + -0.452295 1.41595 -3.29506 -0.375708 0.925981 -0.037452 + -0.383586 1.41509 -3.28317 0.59724 0.801426 -0.0319518 + -0.387157 1.40937 -3.30626 0.172799 0.967918 0.182413 + -0.403292 1.43617 -3.27808 0.162657 0.372724 -0.913575 + -0.329689 1.40261 -3.30316 0.051933 0.813752 0.578887 + -0.351495 1.41275 -3.32132 0.148803 0.913498 0.378656 + -0.418215 1.43963 -3.35968 -0.121709 0.945761 0.301203 + -0.294955 1.40256 -3.30208 0.0990731 0.800527 0.591051 + -0.291361 1.41354 -3.36028 0.0241639 0.962897 0.268787 + -0.313167 1.42367 -3.37844 0.166527 0.962278 0.215151 + -0.382552 1.44302 -3.37474 0.0783278 0.982132 0.17112 + -0.437666 1.43887 -3.38337 -0.365385 0.916094 -0.165124 + -0.268469 1.40904 -3.31769 0.178235 0.829284 0.529641 + -0.264876 1.42001 -3.37589 -0.255714 0.965837 0.0420664 + -0.316495 1.42576 -3.40805 0.129876 0.970776 -0.201809 + -0.273723 1.41652 -3.42925 -0.187884 0.911902 -0.364877 + -0.29845 1.41438 -3.42715 -0.0248339 0.910229 -0.41336 + -0.364593 1.42073 -3.44055 0.0226781 0.850136 -0.526074 + -0.38588 1.4451 -3.40435 -0.101595 0.975382 -0.195727 + -0.431022 1.42252 -3.41704 -0.385412 0.76951 -0.509227 + -0.289247 1.40217 -3.48199 -0.142651 0.89036 -0.432332 + -0.313974 1.40012 -3.47984 -0.0724862 0.889387 -0.451372 + -0.346548 1.40927 -3.45969 -0.0084214 0.878237 -0.478152 + -0.389518 1.40048 -3.46206 -0.273068 0.69308 -0.667139 + -0.410805 1.42493 -3.42582 -0.274452 0.761445 -0.587262 + -0.247715 1.39909 -3.49465 0.0476116 0.667443 -0.743138 + -0.288758 1.38388 -3.50732 -0.0524574 0.654239 -0.754467 + -0.330949 1.38218 -3.50197 -0.181435 0.671538 -0.718414 + -0.363523 1.39142 -3.48178 -0.246849 0.696206 -0.674064 + -0.254924 1.35791 -3.51993 0.146615 0.337262 -0.929924 + -0.294682 1.3632 -3.5197 -0.046744 0.372108 -0.927012 + -0.336873 1.3615 -3.51435 -0.220808 0.39067 -0.893656 + -0.375563 1.35026 -3.50649 -0.380891 0.350707 -0.855527 + -0.401558 1.3594 -3.48672 -0.370166 0.45785 -0.808301 + -0.231255 1.30733 -3.52613 0.326247 0.168402 -0.930163 + -0.265471 1.30618 -3.52993 0.0573695 0.104924 -0.992824 + -0.305229 1.31147 -3.52969 -0.0866864 0.114666 -0.989615 + -0.345791 1.30755 -3.52291 -0.20309 0.107999 -0.973186 + -0.384481 1.29631 -3.51505 -0.291074 0.0906114 -0.9524 + -0.205632 1.25386 -3.52612 -0.00186938 0.03479 -0.999393 + -0.240561 1.23784 -3.52937 0.121702 -0.0731405 -0.989868 + -0.274776 1.23669 -3.53318 0.0149927 -0.0686066 -0.997531 + -0.314001 1.23121 -3.52948 -0.11862 -0.0827736 -0.989483 + -0.354563 1.22729 -3.52269 -0.238059 -0.0971919 -0.966376 + -0.18277 1.27427 -3.52447 -0.27771 0.213127 -0.936725 + -0.158514 1.25436 -3.53517 -0.294021 -0.0103963 -0.955742 + -0.202594 1.15117 -3.50946 0.0477741 -0.219127 -0.974526 + -0.237523 1.13524 -3.51266 0.155527 -0.159038 -0.974945 + -0.271166 1.09805 -3.51044 -0.205029 -0.157363 -0.966023 + -0.122829 1.2337 -3.54739 -0.151469 -0.0569415 -0.986821 + -0.138765 1.12834 -3.52391 -0.303527 -0.224051 -0.926106 + -0.17445 1.14901 -3.5117 -0.255493 -0.237549 -0.937173 + -0.199758 0.994971 -3.4561 0.305179 -0.173767 -0.936307 + -0.224297 0.9899 -3.47912 0.536828 -0.146619 -0.830854 + -0.066486 1.28184 -3.53957 0.297325 0.0274514 -0.954382 + -0.094034 1.21797 -3.54555 0.197254 -0.128294 -0.971922 + -0.10167 1.11635 -3.52693 0.159304 -0.252449 -0.954406 + -0.153727 0.971674 -3.47695 -0.428914 -0.00879569 -0.903303 + -0.171614 0.99271 -3.45839 -0.439955 -0.101958 -0.892213 + -0.051677 1.3072 -3.53271 0.431915 0.117217 -0.894265 + -0.049252 1.23504 -3.52672 0.467704 -0.10956 -0.877069 + -0.056889 1.13333 -3.50816 0.306545 -0.195787 -0.931503 + -0.116632 0.959679 -3.47998 -0.0723335 -0.0508205 -0.996085 + -0.170744 0.837161 -3.49297 -0.0807517 0.532283 -0.842706 + -0.035173 1.31697 -3.51802 0.570229 0.154511 -0.806824 + -0.034443 1.26032 -3.51991 0.518682 -0.0327048 -0.854341 + -0.024385 1.12445 -3.49976 0.0705888 -0.125775 -0.989544 + -0.067554 0.954492 -3.48559 0.0622058 -0.0461901 -0.996994 + -0.021855 1.31235 -3.51002 0.535864 0.139557 -0.83269 + -0.021125 1.2557 -3.5119 0.249718 -0.0230944 -0.968043 + -0.010165 1.11387 -3.50005 -0.035103 -0.135426 -0.990165 + -0.006905 1.3221 -3.49751 0.288907 0.219125 -0.931943 + -0.006905 1.24513 -3.51219 -0.00634015 0.00313263 -0.999975 + 0.006906 1.24504 -3.51223 0.0128487 0.0201976 -0.999713 + 0.010163 1.11387 -3.50005 0.0763811 -0.167599 -0.982892 + 0.021126 1.2557 -3.51189 -0.318241 0.0319158 -0.947472 + 0.024383 1.12445 -3.49976 -0.0754617 -0.140816 -0.987156 + 0.021855 1.31234 -3.51001 -0.570926 0.103883 -0.814403 + 0.034419 1.26032 -3.5199 -0.517014 -0.0240446 -0.855639 + 0.035149 1.31696 -3.51801 -0.570615 0.154536 -0.806546 + -0.697976 1.23713 -2.92113 0.938193 0.224392 0.263518 + -0.719127 1.26344 -2.8867 0.833935 0.245431 0.494284 + -0.723957 1.18398 -2.85369 0.91868 -0.0162691 0.394666 + -0.744281 1.16962 -2.81501 0.892174 -0.0710925 0.446063 + -0.710942 1.28047 -2.91621 0.941252 0.24797 0.229252 + -0.722284 1.30336 -2.90405 0.83628 0.292019 0.46407 + -0.740454 1.32251 -2.89142 0.720709 0.416755 0.55398 + -0.734477 1.22897 -2.84881 0.874796 0.188329 0.446391 + -0.750635 1.19613 -2.80312 0.875663 0.0328588 0.481803 + -0.708827 1.27688 -2.94239 0.967793 0.222699 0.117393 + -0.723505 1.34021 -2.93208 0.833721 0.548095 -0.0670915 + -0.734848 1.36318 -2.91986 0.56904 0.816208 -0.0999884 + -0.743611 1.36243 -2.90876 0.304418 0.772023 0.557952 + -0.710462 1.31384 -2.964 0.897196 0.00296292 0.441624 + -0.715278 1.32541 -2.95025 0.874164 0.40786 0.263606 + -0.73922 1.34428 -2.94413 0.14817 0.94997 -0.274959 + -0.747447 1.35908 -2.92595 -0.241704 0.710506 -0.660878 + -0.753688 1.36208 -2.91735 -0.384206 0.846995 -0.367404 + -0.752272 1.34314 -2.95816 0.0644246 0.97649 0.205708 + -0.800368 1.32232 -2.8981 -0.339659 0.877823 -0.337725 + -0.806609 1.32532 -2.88949 -0.660117 0.706291 0.255732 + -0.762452 1.36133 -2.90626 -0.346835 0.906606 0.240358 + -0.730388 1.35412 -2.99916 0.288946 0.894964 0.339927 + -0.799767 1.35538 -2.98155 -0.107673 0.953461 0.281634 + -0.81342 1.32127 -2.91208 -0.219553 0.93154 0.289879 + -0.806973 1.30427 -2.86942 -0.426794 0.67748 0.599056 + -0.762816 1.34027 -2.88619 0.14582 0.670579 0.727365 + -0.700092 1.3477 -3.01025 0.447027 0.793116 0.413684 + -0.725677 1.3651 -3.07618 0.109228 0.985576 0.129264 + -0.777884 1.36636 -3.02257 -0.0277869 0.987041 0.158041 + -0.846376 1.34513 -3.0218 -0.451253 0.88407 -0.12162 + -0.836724 1.34868 -2.98676 -0.296305 0.940721 0.165069 + -0.656446 1.34066 -3.06706 0.487509 0.768067 0.41522 + -0.695381 1.35868 -3.08727 0.301383 0.889776 0.342734 + -0.665156 1.37845 -3.1423 0.0397632 0.884147 0.465514 + -0.748238 1.36493 -3.10089 -0.118587 0.99198 -0.0437333 + -0.800445 1.36619 -3.04728 -0.235835 0.97156 0.0212905 + -0.681275 1.36646 -3.11215 0.446156 0.694746 0.564156 + -0.663367 1.37105 -3.12769 -0.0320323 0.975216 0.218923 + -0.66935 1.40969 -3.19342 -0.176412 0.978892 0.103199 + -0.7007 1.3806 -3.14983 -0.21487 0.863985 0.45537 + -0.750069 1.36172 -3.13333 -0.201581 0.979425 0.00952228 + -0.820562 1.35346 -3.09763 -0.330672 0.939886 -0.0852659 + -0.661605 1.4 -3.24124 -0.310781 0.908952 -0.277889 + -0.714155 1.38846 -3.19644 -0.406761 0.91352 0.00523802 + -0.743885 1.37593 -3.19654 -0.373163 0.926866 -0.040853 + -0.73043 1.36816 -3.14988 -0.344936 0.934734 0.0853891 + -0.618252 1.40969 -3.25282 -0.145747 0.969107 -0.198969 + -0.66065 1.36268 -3.328 -0.51932 0.766937 -0.376981 + -0.695535 1.34931 -3.28524 -0.665785 0.556929 -0.496548 + -0.70641 1.37868 -3.24431 -0.449078 0.762527 -0.465705 + -0.617297 1.37237 -3.33958 -0.229767 0.915119 -0.331306 + -0.601612 1.36411 -3.37827 -0.321734 0.901716 -0.288782 + -0.619326 1.34505 -3.40407 -0.490089 0.726922 -0.481037 + -0.657254 1.34065 -3.37004 -0.592836 0.667174 -0.451025 + -0.526224 1.38862 -3.34212 -0.238401 0.955782 -0.172177 + -0.555248 1.37678 -3.40721 -0.334303 0.913785 -0.230734 + -0.572962 1.35764 -3.43306 -0.415488 0.680636 -0.603411 + -0.63008 1.32452 -3.4159 -0.607219 0.215558 -0.764735 + -0.668008 1.3202 -3.38182 -0.737567 0.274932 -0.616772 + -0.475318 1.40955 -3.34178 -0.449008 0.8872 0.106145 + -0.497237 1.3962 -3.34946 -0.358989 0.89945 -0.249232 + -0.526261 1.38436 -3.41455 -0.235587 0.923559 -0.302551 + -0.528327 1.36562 -3.44609 -0.187363 0.686163 -0.702905 + -0.569567 1.32693 -3.45287 -0.422742 0.138622 -0.895585 + -0.463834 1.40797 -3.39984 -0.534547 0.785011 -0.313077 + -0.485753 1.39471 -3.40748 -0.31293 0.898748 -0.307128 + -0.487819 1.37588 -3.43906 -0.155624 0.718995 -0.677368 + -0.524932 1.33491 -3.4659 -0.141916 0.236938 -0.961104 + -0.457189 1.39153 -3.43356 -0.280674 0.68233 -0.675017 + -0.490004 1.34003 -3.46416 -0.0970424 0.330048 -0.938963 + -0.48183 1.26982 -3.45996 -0.27983 0.00130047 -0.960049 + -0.516758 1.26462 -3.46175 -0.229068 -0.185606 -0.955551 + -0.570524 1.25675 -3.43512 -0.435926 -0.298686 -0.848973 + -0.459374 1.35568 -3.45866 -0.287349 0.491665 -0.822007 + -0.459392 1.30386 -3.48052 -0.447396 0.0878286 -0.890013 + -0.462321 1.20627 -3.47089 -0.551825 -0.213002 -0.8063 + -0.440392 1.36678 -3.4643 -0.456044 0.517094 -0.724319 + -0.44041 1.31497 -3.48615 -0.461842 0.199007 -0.864348 + -0.439884 1.24031 -3.49145 -0.443041 -0.115054 -0.889088 + -0.451774 1.11419 -3.4558 -0.631497 -0.21112 -0.746083 + -0.500992 1.14196 -3.4007 -0.551265 -0.324636 -0.768582 + -0.420175 1.36919 -3.47308 -0.368042 0.526619 -0.766301 + -0.428884 1.32362 -3.49154 -0.495725 0.268344 -0.825983 + -0.428357 1.24896 -3.49682 -0.418738 -0.0476719 -0.906855 + -0.410267 1.31374 -3.50523 -0.347302 0.223187 -0.910807 + -0.402571 1.23154 -3.50665 -0.378505 -0.11856 -0.917975 + -0.365196 1.11911 -3.49652 -0.303239 -0.238381 -0.922616 + -0.413205 1.12335 -3.48047 -0.415682 -0.21607 -0.883472 + -0.453942 0.960764 -3.40646 -0.344691 0.00182879 -0.938714 + -0.490445 1.04989 -3.38562 -0.596686 -0.127539 -0.792275 + -0.328109 1.12278 -3.50867 -0.162214 -0.24417 -0.956069 + -0.377773 0.969135 -3.44696 -0.338157 -0.164971 -0.926517 + -0.415372 0.969923 -3.43112 -0.444899 -0.164805 -0.880286 + -0.288884 1.12826 -3.51238 -0.135813 -0.201475 -0.970032 + -0.340686 0.972809 -3.45912 -0.334685 -0.119372 -0.934738 + -0.388887 0.865204 -3.43674 -0.435817 0.248918 -0.86493 + -0.426486 0.865992 -3.42091 -0.311655 0.264027 -0.912776 + -0.321534 0.967345 -3.46626 -0.274533 -0.103264 -0.956017 + -0.341429 0.834182 -3.47141 -0.223318 0.416186 -0.88143 + -0.360581 0.839731 -3.46422 -0.345501 0.373164 -0.861033 + -0.429634 0.78645 -3.47633 -0.288984 0.544585 -0.787347 + -0.303815 0.937131 -3.46432 -0.207943 -0.0169981 -0.977993 + -0.308784 0.856679 -3.46998 -0.308517 0.272904 -0.91123 + -0.32412 0.755671 -3.53462 -0.325248 0.548037 -0.770629 + -0.401328 0.760889 -3.50386 -0.310948 0.529622 -0.789184 + -0.452223 0.777477 -3.47419 -0.383998 0.440329 -0.811576 + -0.27389 0.947205 -3.48017 -0.34731 -0.0545515 -0.936162 + -0.278858 0.866753 -3.48582 -0.432233 0.310528 -0.846609 + -0.291475 0.778083 -3.53324 -0.519863 0.734893 -0.435517 + -0.276334 0.788484 -3.53466 -0.0196673 0.522402 -0.852472 + -0.342242 0.693626 -3.57056 -0.287546 0.537936 -0.792428 + -0.255729 1.10274 -3.51457 0.00763824 -0.0249272 -0.99966 + -0.258453 0.951896 -3.4843 -0.000998641 -0.0796473 -0.996822 + -0.263717 0.877155 -3.48724 -0.0774602 0.265318 -0.961044 + -0.242504 0.9574 -3.48103 0.170447 -0.0531088 -0.983935 + -0.247767 0.882745 -3.48392 0.282547 0.164616 -0.945023 + -0.234171 0.879942 -3.47827 0.561333 0.116954 -0.819285 + -0.262738 0.785681 -3.529 0.260835 0.509604 -0.81992 + -0.209632 0.884925 -3.4553 0.123735 0.201055 -0.971734 + -0.188632 0.858195 -3.4744 -0.3209 0.421017 -0.848391 + -0.127806 0.850848 -3.48568 0.0012032 0.334229 -0.942491 + -0.419449 0.698937 -3.53976 -0.361202 0.517912 -0.775435 + -0.485231 0.752929 -3.46748 -0.501751 0.414547 -0.759208 + -0.526323 0.622523 -3.52641 -0.529495 0.513142 -0.675514 + -0.498111 0.688905 -3.49578 -0.531749 0.480195 -0.697607 + -0.537511 0.56696 -3.55777 -0.542696 0.466241 -0.698642 + -0.608552 0.602889 -3.4668 -0.526246 0.514464 -0.677046 + -0.57491 0.667283 -3.44113 -0.5409 0.481648 -0.689523 + -0.56203 0.731222 -3.41288 -0.536445 0.315892 -0.782585 + -0.619739 0.547326 -3.49816 -0.532272 0.470982 -0.703464 + -0.700775 0.548705 -3.44335 -0.414279 0.487641 -0.768491 + -0.685445 0.59546 -3.42053 -0.393888 0.506739 -0.766856 + -0.651803 0.659947 -3.39483 -0.426033 0.449402 -0.785197 + -0.626387 0.724717 -3.37901 -0.44313 0.29615 -0.846127 + -0.68927 0.50519 -3.47898 -0.458667 0.470756 -0.753667 + -0.763342 0.514662 -3.43259 -0.498172 0.412364 -0.762746 + -0.784905 0.576636 -3.39353 -0.510376 0.394981 -0.763876 + -0.769575 0.623479 -3.37066 -0.42582 0.615554 -0.663152 + -0.686245 0.450249 -3.51362 -0.488393 0.515967 -0.70374 + -0.760317 0.459718 -3.46722 -0.509769 0.409101 -0.756817 + -0.826931 0.46533 -3.40914 -0.606798 0.386306 -0.694668 + -0.817946 0.523864 -3.37972 -0.627834 0.33238 -0.703809 + -0.769751 0.39896 -3.49018 -0.594744 0.365778 -0.715882 + -0.836365 0.404575 -3.43211 -0.636286 0.305727 -0.708288 + -0.899257 0.399787 -3.37301 -0.668785 0.284345 -0.686931 + -0.885243 0.483021 -3.34798 -0.627994 0.376449 -0.681109 + -0.876258 0.541468 -3.31861 -0.653415 0.557851 -0.511715 + -0.789506 0.324651 -3.50627 -0.662559 0.263873 -0.70099 + -0.85367 0.326434 -3.44337 -0.675102 0.23173 -0.700385 + -0.916562 0.321651 -3.38428 -0.689992 0.189181 -0.698657 + -0.980646 0.325053 -3.31757 -0.699639 0.188527 -0.689175 + -0.957952 0.406999 -3.31211 -0.677412 0.277269 -0.681347 + -0.881306 0.234342 -3.44386 -0.710566 0.136038 -0.690355 + -0.944432 0.24971 -3.37027 -0.72634 0.120221 -0.67674 + -1.00852 0.253025 -3.30362 -0.721009 0.0577907 -0.690512 + -0.916497 0.168037 -3.41381 -0.744195 0.042118 -0.666633 + -0.979623 0.183405 -3.34023 -0.761718 0.0222245 -0.647528 + -1.04184 0.18854 -3.26613 -0.74849 -0.043733 -0.661703 + -1.07433 0.25742 -3.23383 -0.72919 0.0423298 -0.683 + -1.0167 0.11971 -3.28931 -0.771749 -0.198337 -0.604207 + -1.07892 0.124845 -3.2152 -0.749588 -0.288555 -0.595697 + -1.14271 0.132217 -3.13657 -0.759696 -0.318452 -0.566966 + -1.10765 0.192935 -3.19634 -0.761872 -0.0869551 -0.641865 + -1.02566 0.071333 -3.25052 -0.707459 -0.51346 -0.485655 + -1.08511 0.074678 -3.15911 -0.663352 -0.609216 -0.434534 + -1.14891 0.082051 -3.08048 -0.646054 -0.652184 -0.396573 + -1.20362 0.082894 -2.98534 -0.615211 -0.704137 -0.354551 + -1.20577 0.134949 -3.0531 -0.808709 -0.308618 -0.500744 + -1.06385 0.038414 -3.1255 -0.583036 -0.756388 -0.296557 + -1.11726 0.04216 -3.01339 -0.5059 -0.822782 -0.259027 + -1.17198 0.043004 -2.91825 -0.455321 -0.845817 -0.277984 + -1.09386 0.020379 -2.98946 -0.5307 -0.808432 -0.25455 + -1.14672 0.019074 -2.8854 -0.487059 -0.830987 -0.268763 + -1.21938 0.0345 -2.82152 -0.489515 -0.830114 -0.266994 + -1.26054 0.08085 -2.8788 -0.659247 -0.674555 -0.33222 + -1.2627 0.132817 -2.94661 -0.781702 -0.435847 -0.446071 + -1.08255 0.010615 -2.98355 -0.120284 -0.990917 -0.0601254 + -1.13542 0.009312 -2.87949 -0.137101 -0.988634 -0.0616938 + -1.18458 0.012616 -2.77921 0.214938 -0.971133 0.103456 + -1.19413 0.010571 -2.78867 -0.162578 -0.980218 -0.112874 + -1.04814 0.029898 -2.93935 0.37529 -0.911531 0.168135 + -1.10234 0.025305 -2.8486 0.341399 -0.922831 0.178407 + -1.15151 0.028616 -2.74833 0.34072 -0.918739 0.199571 + -1.23162 0.013941 -2.67851 0.243915 -0.95739 0.154625 + -1.24117 0.011804 -2.68801 -0.19652 -0.978881 -0.0563109 + -0.989415 0.068168 -2.87763 0.550681 -0.795727 0.252129 + -1.04361 0.063489 -2.78693 0.509476 -0.811212 0.287 + -1.09489 0.063421 -2.70421 0.499826 -0.813227 0.298052 + -1.14295 0.067705 -2.61003 0.499514 -0.812636 0.300181 + -1.19957 0.032899 -2.65415 0.371172 -0.901168 0.223891 + -0.930102 0.177676 -2.79671 0.731444 -0.573901 0.368276 + -0.980336 0.150298 -2.72969 0.700095 -0.612051 0.367777 + -1.03161 0.150143 -2.64702 0.672089 -0.633023 0.384159 + -1.08132 0.139613 -2.57138 0.664147 -0.647134 0.374336 + -0.9111 0.308272 -2.65471 0.77121 -0.526868 0.357275 + -0.963799 0.270777 -2.59536 0.745057 -0.560169 0.36208 + -1.01351 0.260159 -2.51977 0.696839 -0.611076 0.375501 + -0.858011 0.415583 -2.60577 0.85481 -0.461343 0.23762 + -0.910711 0.378083 -2.54642 0.76891 -0.587098 0.253167 + -0.952577 0.345927 -2.47973 0.71597 -0.65084 0.252577 + -1.06529 0.244662 -2.44953 0.694772 -0.608019 0.384192 + -0.830366 0.496 -2.57446 0.92631 -0.230387 0.298113 + -0.862898 0.442151 -2.51599 0.873814 -0.374449 0.31022 + -0.904765 0.409989 -2.44929 0.864552 -0.436537 0.248969 + -0.931244 0.390993 -2.37538 0.785399 -0.527753 0.323458 + -1.00436 0.330429 -2.40948 0.608251 -0.720988 0.331974 + -0.810958 0.671494 -2.58463 0.899464 0.0199178 0.436541 + -0.84349 0.617564 -2.52622 0.915709 -0.0203555 0.401326 + -0.868595 0.581615 -2.45815 0.940753 -0.0604942 0.333654 + -0.813706 0.928877 -2.64202 0.925978 0.0806582 0.368861 + -0.837125 0.904849 -2.57321 0.928137 0.0676635 0.366038 + -0.862229 0.8689 -2.50514 0.946262 0.0429775 0.320532 + -0.881028 0.844101 -2.43539 0.957894 0.0304208 0.285505 + -0.895074 0.562532 -2.3843 0.948378 -0.0950314 0.30257 + -0.791692 1.10011 -2.72521 0.906639 0.0671882 0.416523 + -0.80848 1.09317 -2.68379 0.933675 0.0740411 0.350385 + -0.819086 1.07003 -2.65352 0.941812 0.0150642 0.335802 + -0.842504 1.04609 -2.58464 0.909114 0.0981918 0.404809 + -0.863389 1.02916 -2.52893 0.915619 0.173593 0.36264 + -0.776795 1.14418 -2.75435 0.878355 0.0212247 0.477538 + -0.798085 1.14211 -2.72175 0.869721 0.108442 0.481483 + -0.814873 1.13508 -2.68038 0.920951 0.169147 0.351054 + -0.82413 1.10525 -2.63251 0.941899 0.0956513 0.321988 + -0.834735 1.08211 -2.60224 0.910544 0.00363815 0.413396 + -0.76074 1.15692 -2.78442 0.883719 -0.0639152 0.463633 + -0.788046 1.17924 -2.74286 0.817161 0.141228 0.55884 + -0.809336 1.17707 -2.71031 0.852518 0.198846 0.483398 + -0.824851 1.16142 -2.6706 0.891979 0.243592 0.380837 + -0.767094 1.18343 -2.77253 0.833324 0.082408 0.546607 + -0.802728 1.21624 -2.73615 0.70089 0.437004 0.56372 + -0.819528 1.20909 -2.70976 0.66716 0.513197 0.539931 + -0.835043 1.19344 -2.67006 0.747953 0.495711 0.441404 + -0.781776 1.22044 -2.76582 0.704393 0.400478 0.586044 + -0.812288 1.24475 -2.75953 0.424592 0.774234 0.469343 + -0.829088 1.2376 -2.73315 0.362487 0.775994 0.516175 + -0.878192 1.2283 -2.69584 0.188865 0.89445 0.405327 + -0.862039 1.21597 -2.67048 0.353578 0.860882 0.365876 + -0.750632 1.22266 -2.79948 0.803947 0.203722 0.558718 + -0.765252 1.25011 -2.81322 0.381514 0.700577 0.603025 + -0.796396 1.24789 -2.77957 0.4494 0.75685 0.474572 + -0.831281 1.27798 -2.82269 0.235721 0.879753 0.412881 + -0.740139 1.2274 -2.83489 0.949084 0.061087 0.309042 + -0.740136 1.25394 -2.83125 0.856419 0.333671 0.393968 + -0.756836 1.27327 -2.83993 0.164245 0.643231 0.747848 + -0.815389 1.28112 -2.84272 0.244358 0.818869 0.519368 + -0.746116 1.32094 -2.8775 0.628467 0.519046 0.579328 + -0.858062 1.28346 -2.82399 0.122449 0.904965 0.407486 + 1.45261 0.472207 -2.72205 0.846829 0.216699 -0.485719 + 1.47845 0.415515 -2.70086 0.8709 0.0420003 -0.489662 + 1.53616 0.331475 -2.5571 0.877718 -0.231189 -0.419718 + 1.49924 0.468028 -2.63601 0.861062 0.164256 -0.481241 + 1.52509 0.411336 -2.61482 0.889471 -0.00556116 -0.456957 + 1.57127 0.306457 -2.47256 0.896678 -0.249413 -0.365734 + 1.57454 0.233221 -2.37131 0.898987 -0.317792 -0.301381 + 1.54396 0.462983 -2.55687 0.903801 0.104927 -0.41489 + 1.56019 0.386316 -2.53028 0.914206 -0.0691379 -0.399309 + 1.60575 0.310399 -2.37859 0.922365 -0.252243 -0.292603 + 1.60902 0.237071 -2.27738 0.913262 -0.262684 -0.311367 + 1.63386 0.173251 -2.16504 0.893975 -0.285388 -0.345489 + 1.52708 0.537637 -2.57338 0.871701 0.00847439 -0.489964 + 1.5792 0.459677 -2.47515 0.908337 0.0209943 -0.417711 + 1.59543 0.383098 -2.44851 0.924195 -0.103934 -0.367507 + 1.63363 0.327312 -2.28708 0.923524 -0.232254 -0.305224 + 1.56851 0.550967 -2.50587 0.881095 -0.0502244 -0.470264 + 1.61732 0.461668 -2.39239 0.931579 -0.0370847 -0.361642 + 1.62331 0.400016 -2.35701 0.945922 -0.114288 -0.303595 + 1.66959 0.336595 -2.19856 0.89974 -0.255241 -0.354006 + 1.64677 0.245073 -2.17824 0.90529 -0.260687 -0.335399 + 1.60662 0.552958 -2.42312 0.921648 -0.0287569 -0.386961 + 1.64523 0.478729 -2.32075 0.947218 -0.0449714 -0.317419 + 1.65123 0.417072 -2.28535 0.927974 -0.115325 -0.35435 + 1.6967 0.352746 -2.14414 0.880801 -0.27371 -0.386359 + 1.68272 0.254356 -2.08972 0.891986 -0.248242 -0.377805 + 1.62548 0.694368 -2.38345 0.946686 0.0697107 -0.314524 + 1.63512 0.575662 -2.34904 0.946435 0.00129848 -0.322891 + 1.66055 0.507282 -2.271 0.942295 -0.00223324 -0.334775 + 1.67833 0.43314 -2.23098 0.918481 -0.0835185 -0.386545 + 1.60796 0.770499 -2.39911 0.885756 0.282469 -0.368303 + 1.64705 0.719534 -2.29283 0.958266 0.100971 -0.267453 + 1.65044 0.604129 -2.29935 0.953504 0.0396657 -0.298758 + 1.68726 0.517667 -2.19919 0.943339 0.0539296 -0.327419 + 1.62954 0.79567 -2.3085 0.921323 0.258183 -0.290698 + 1.66896 0.729781 -2.21098 0.966131 0.108195 -0.234274 + 1.67234 0.614464 -2.21745 0.957262 0.0796398 -0.278042 + 1.71697 0.522975 -2.10938 0.944673 0.0817996 -0.317651 + 1.70504 0.443523 -2.15917 0.939808 0.00288297 -0.34169 + 1.62358 0.866281 -2.2448 0.869465 0.372424 -0.324547 + 1.65077 0.820142 -2.21909 0.931695 0.251491 -0.262099 + 1.68803 0.731209 -2.11905 0.95566 0.14238 -0.257763 + 1.70205 0.619774 -2.12764 0.945033 0.117978 -0.304949 + 1.59304 0.919411 -2.25863 0.775834 0.500474 -0.384196 + 1.63942 0.904651 -2.16327 0.895177 0.344165 -0.283212 + 1.66984 0.821567 -2.12716 0.949787 0.213068 -0.229142 + 1.71475 0.731724 -2.02935 0.947246 0.171256 -0.270919 + 1.55387 1.00544 -2.20244 0.617275 0.669127 -0.413812 + 1.60888 0.957783 -2.17709 0.788335 0.493296 -0.367678 + 1.65644 0.92519 -2.07784 0.918725 0.29385 -0.263812 + 1.68686 0.842111 -2.04174 0.940862 0.22969 -0.249038 + 1.4908 1.0756 -2.14036 0.26001 0.889867 -0.374875 + 1.54839 1.05144 -2.14471 0.489667 0.728006 -0.479827 + 1.6034 1.00377 -2.11935 0.690615 0.596978 -0.408249 + 1.62395 1.00397 -2.08508 0.80265 0.47478 -0.361021 + 1.6628 0.974096 -1.99975 0.912035 0.303283 -0.276063 + 1.39932 1.0879 -2.16447 0.132861 0.961096 -0.242161 + 1.43855 1.1159 -2.01876 -0.0386831 0.95426 -0.296464 + 1.51379 1.12676 -2.02398 0.0638906 0.914765 -0.398903 + 1.57138 1.1026 -2.02832 0.518408 0.729382 -0.44638 + 1.59193 1.10279 -1.99405 0.673292 0.595965 -0.437611 + 1.34634 1.0895 -2.16103 0.0369523 0.987302 -0.154498 + 1.46346 1.16028 -1.89442 -0.23982 0.942984 -0.230797 + 0.988349 1.08892 -1.69963 -0.36581 0.683973 0.631161 + 1.09227 1.08996 -1.73342 0.261129 0.915849 0.305012 + 1.11248 1.07053 -1.70838 0.166592 0.90663 0.387645 + 1.09541 1.02064 -1.61357 -0.023803 0.962626 0.269788 + 1.15779 1.05545 -1.67285 -0.195693 0.924334 0.327584 + 1.09292 1.01632 -1.59089 -0.354268 0.925022 0.137218 + 1.1173 1.02629 -1.55774 -0.499264 0.859587 0.10884 + -2.0866 1.79868 -0.385969 -0.450143 0.868692 -0.206751 + -2.06612 1.79246 -0.363198 0.317015 0.945894 0.0691808 + -2.05691 1.78848 -0.509912 0.297877 0.954577 -0.00716328 + -2.08681 1.79252 -0.279496 0.39676 0.917871 0.00967817 + -2.03495 1.76178 -0.21826 0.450823 0.892131 -0.029331 + -2.01642 1.76019 -0.274707 0.646245 0.744378 0.168134 + -2.04759 1.79087 -0.419645 0.249125 0.966647 0.0594145 + -2.05691 1.78848 -0.509912 0.00397707 0.999632 -0.0268333 + -2.10728 1.79874 -0.302267 -0.224544 0.960517 -0.164277 + -2.13006 1.81445 -0.230689 -0.110625 0.941329 -0.318846 + -2.10924 1.80934 -0.206632 0.484039 0.86867 -0.105443 + -2.05739 1.77861 -0.145405 0.14963 0.942622 -0.298453 + -1.99295 1.73621 -0.301369 0.83562 0.549196 0.0110664 + -2.11821 1.78343 -0.31315 -0.843627 0.437169 -0.311732 + -2.14098 1.79923 -0.241522 -0.524124 0.721479 -0.452506 + -2.17594 1.86452 -0.096405 0.0643315 0.957873 -0.279893 + -2.15513 1.8594 -0.07235 0.32547 0.872805 -0.363703 + -2.08649 1.7566 -0.414291 -0.938982 0.156244 -0.306431 + -2.1181 1.74126 -0.341513 -0.90115 0.18041 -0.394184 + -2.17356 1.80731 -0.204712 -0.475464 0.696599 -0.537293 + -2.20852 1.87268 -0.059546 -0.019154 0.925532 -0.378184 + -2.05691 1.78848 -0.509912 -0.982277 0.0686332 -0.17442 + -2.08045 1.67933 -0.46125 -0.941302 0.152532 -0.301138 + -2.13064 1.67626 -0.328739 -0.909521 0.135366 -0.392998 + -2.17854 1.69863 -0.236073 -0.852201 0.021149 -0.522787 + -2.16601 1.76363 -0.248856 -0.814249 0.229287 -0.533316 + -2.26032 1.84742 -0.082585 -0.339492 0.733317 -0.589059 + -2.05087 1.7113 -0.556828 -0.967225 0.114483 -0.22665 + -2.08361 1.60417 -0.499667 -0.91313 0.305299 -0.270159 + -2.13379 1.6011 -0.367149 -0.928556 0.176043 -0.326792 + -2.17994 1.62481 -0.232215 -0.826142 0.179614 -0.534067 + -2.01964 1.79368 -0.67111 -0.981152 -0.00407053 -0.193195 + -2.01547 1.73294 -0.734101 -0.972584 0.133596 -0.190349 + -2.04671 1.65056 -0.619819 -0.959585 0.218274 -0.177633 + -2.09564 1.53103 -0.571994 -0.960136 0.200244 -0.19504 + -2.12301 1.50724 -0.430988 -0.952883 0.135384 -0.271449 + -2.16916 1.53095 -0.296056 -0.966723 -0.0486957 -0.25115 + -2.01507 1.85244 -0.710092 -0.952732 -0.0137144 -0.303503 + -1.9663 1.86477 -0.850038 -0.954697 0.138719 -0.263267 + -2.02224 1.64622 -0.784511 -0.958662 0.189841 -0.211963 + -2.05874 1.57734 -0.692196 -0.950602 0.23948 -0.197496 + -2.04901 1.87769 -0.606221 -0.98889 -0.00170281 -0.148637 + -2.04084 1.94534 -0.658996 -0.978647 0.0887841 -0.185384 + -2.02648 2.0249 -0.695197 -0.972804 0.231595 -0.00389074 + -2.00071 1.93192 -0.74635 -0.907793 -0.0136759 -0.419195 + -1.97115 1.95368 -0.81144 -0.928221 0.0460678 -0.369167 + -2.05358 1.81893 -0.567241 -0.978176 -0.129611 -0.162394 + -2.05367 1.84205 -0.544286 -0.998185 0.0436692 -0.0414662 + -2.04962 1.87449 -0.581074 -0.993561 0.11288 -0.0097189 + -2.04145 1.94214 -0.633849 -0.986185 0.165622 -0.00283097 + -1.9953 2.10086 -0.703953 -0.0654755 0.296776 0.9527 + -1.24542 1.07804 -1.44959 0.173142 -0.0822395 0.981457 + -1.30253 1.11291 -1.43659 0.82029 0.42927 0.377958 + -1.26037 1.02438 -1.45144 0.697685 -0.0379477 0.715399 + -1.3426 1.16556 -1.41618 0.818352 0.531273 0.219201 + -1.33891 1.09937 -1.36652 0.779628 0.197893 0.594154 + -1.31527 1.03417 -1.3908 0.737068 -0.00548835 0.675796 + -1.26424 0.876179 -1.45655 0.69155 -0.0476274 0.720756 + -1.20752 0.862044 -1.50687 0.74719 -0.0679487 0.661127 + -1.15338 0.931117 -1.57811 0.759355 -0.0907354 0.644319 + -1.11406 0.974813 -1.60939 0.586011 -0.267587 0.764845 + -1.22105 1.06807 -1.48272 0.27089 -0.808143 0.522995 + -1.24542 1.07804 -1.44959 0.749546 -0.230328 0.620588 + -1.38567 1.21834 -1.48539 0.731757 0.678101 -0.0686348 + -1.42592 1.25813 -1.43972 0.72592 0.685023 -0.0615047 + -1.39323 1.22173 -1.37206 0.833855 0.518408 0.189573 + -1.38954 1.15545 -1.32246 0.800471 0.190871 0.568167 + -1.3456 1.16561 -1.50585 0.807646 0.56773 -0.159343 + -1.42313 1.24458 -1.54323 0.599116 0.767823 -0.226954 + -1.46338 1.28437 -1.49756 0.652605 0.726901 -0.213829 + -1.46073 1.30484 -1.39622 0.812452 0.5688 -0.128014 + -1.42804 1.26844 -1.32856 0.881324 0.448974 0.147277 + -1.26875 1.04947 -1.46391 0.478371 0.656019 -0.583781 + -1.27651 1.04939 -1.49016 0.700866 0.708303 -0.0842194 + -1.35337 1.16552 -1.5321 0.818574 0.503214 -0.27697 + -1.24542 1.07804 -1.44959 0.0475818 0.416344 -0.907961 + -1.24022 1.02623 -1.52285 0.478502 0.862283 0.165843 + -1.33367 1.11258 -1.54161 0.772216 0.605052 -0.19389 + -1.36149 1.14219 -1.57689 0.863292 0.418384 -0.282279 + -1.38119 1.19504 -1.56743 0.798107 0.567022 -0.203743 + -1.18975 1.00904 -1.53268 0.062907 0.995546 0.0702265 + -1.20826 1.07264 -1.66304 0.415145 0.859062 0.299445 + -1.29738 1.08942 -1.5743 0.562487 0.792297 0.236376 + -1.31783 1.10964 -1.60512 0.369622 0.927123 0.0618199 + -1.35577 1.12264 -1.59423 0.659886 0.737977 -0.141213 + -1.09541 1.02064 -1.61357 0.0237913 0.962556 0.270036 + -1.15779 1.05545 -1.67285 0.195469 0.924385 0.327572 + -1.14875 1.08447 -1.81252 -0.0166731 0.99893 0.043146 + -1.22871 1.09286 -1.69385 0.3051 0.943457 0.129627 + -1.11728 1.02629 -1.55775 -0.295542 0.931926 -0.210163 + -1.09291 1.01632 -1.59089 0.442612 -0.543432 0.713286 + -1.05745 0.968945 -1.65383 0.630685 -0.550842 0.546635 + -1.0363 1.01054 -1.63527 0.630821 -0.110549 0.768013 + -0.994768 1.04414 -1.66086 0.655605 0.0954371 0.749048 + -1.00856 1.06949 -1.67458 0.16273 0.701066 0.694281 + -1.05009 1.03582 -1.64905 0.0974265 0.735369 0.670627 + -1.09291 1.01632 -1.59089 0.526572 0.61002 0.592113 + -1.0544 0.957346 -1.67294 0.687805 -0.548067 0.47597 + -0.991716 1.03263 -1.67992 0.815287 -0.473244 0.333686 + -0.969312 1.06119 -1.7084 0.926927 -0.0756831 0.36753 + -0.988349 1.08892 -1.69963 0.365777 0.683989 0.631163 + -1.11248 1.07053 -1.70838 -0.166583 0.90673 0.387415 + -1.08014 0.917146 -1.67951 0.74554 -0.464936 0.477498 + -1.02381 0.965114 -1.71099 0.79491 -0.521387 0.310281 + -1.0014 0.993682 -1.73947 0.892418 -0.451204 -0.00241486 + -1.10836 0.891593 -1.64305 0.853521 -0.242521 0.461178 + -1.09486 0.870919 -1.70684 0.801495 -0.493602 0.337582 + -1.04955 0.924909 -1.71755 0.744193 -0.545299 0.38578 + -1.03953 0.916936 -1.75575 0.824881 -0.548452 0.137012 + -1.02065 0.95854 -1.7576 0.915138 -0.400652 0.0447345 + -1.16249 0.822434 -1.57186 0.836226 -0.343911 0.427143 + -1.12307 0.845368 -1.67038 0.836454 -0.447241 0.316734 + -1.08484 0.863034 -1.74498 0.824632 -0.459995 0.329221 + -1.03365 0.924709 -1.79081 0.894405 -0.425211 0.138694 + -1.01477 0.966219 -1.79271 0.97713 -0.191171 0.0931124 + -1.21154 0.769462 -1.53291 0.787037 -0.409205 0.461653 + -1.17212 0.792308 -1.63148 0.836245 -0.441014 0.325886 + -1.12885 0.794089 -1.71237 0.857283 -0.316273 0.406248 + -1.05344 0.863585 -1.81634 0.872638 -0.440905 0.210011 + -1.26447 0.772444 -1.46028 0.695533 -0.308164 0.649052 + -1.29789 0.714715 -1.48249 0.673517 -0.48752 0.555608 + -1.24 0.709635 -1.55049 0.754407 -0.437563 0.489294 + -1.19672 0.711416 -1.63137 0.830035 -0.332251 0.447941 + -1.32119 0.786574 -1.40995 0.688698 -0.190326 0.699622 + -1.35082 0.717703 -1.40986 0.675227 -0.414784 0.609937 + -1.36445 0.647105 -1.45278 0.645421 -0.514315 0.564723 + -1.30656 0.642106 -1.52072 0.658748 -0.509325 0.55375 + -1.25297 0.631515 -1.60298 0.721021 -0.506995 0.472319 + -1.36481 0.824607 -1.35122 0.724988 -0.153365 0.67147 + -1.39914 0.743891 -1.34262 0.667865 -0.338687 0.662757 + -1.4656 0.683465 -1.31776 0.658023 -0.446382 0.606423 + -1.41728 0.657188 -1.38505 0.61585 -0.508591 0.601717 + -1.31913 0.885966 -1.3959 0.743944 -0.0553597 0.665945 + -1.40449 0.873828 -1.30028 0.755522 -0.134008 0.641271 + -1.44277 0.781924 -1.2839 0.71458 -0.284723 0.63899 + -1.35881 0.935192 -1.34496 0.759032 -0.0386245 0.649907 + -1.43222 0.93844 -1.25339 0.76997 -0.0115449 0.637976 + -1.47412 0.841002 -1.21862 0.738598 -0.213192 0.639548 + -1.53037 0.782376 -1.18348 0.766098 -0.300331 0.568238 + -1.49902 0.723384 -1.2487 0.676639 -0.391776 0.623436 + -1.38245 1.00039 -1.32068 0.741655 0.0422017 0.669453 + -1.46009 1.01299 -1.23031 0.82379 0.000647658 0.566895 + -1.50185 0.905609 -1.17173 0.817054 -0.146961 0.557517 + -1.41032 1.07485 -1.29766 0.752916 0.0473755 0.656409 + -1.48367 1.07867 -1.18368 0.868379 0.0439774 0.493946 + -1.51686 0.973193 -1.12178 0.860304 -0.103619 0.499139 + -1.56396 0.914514 -1.06795 0.816421 -0.169329 0.552073 + -1.54895 0.846931 -1.11789 0.805782 -0.2504 0.53667 + -1.42778 1.21479 -1.28065 0.857926 0.159448 0.488405 + -1.44856 1.13419 -1.25584 0.8129 0.0627485 0.579014 + -1.51747 1.13409 -1.13427 0.895261 0.081783 0.437973 + -1.54043 1.03896 -1.07509 0.875969 -0.085484 0.474732 + -1.45892 1.26563 -1.2397 0.866108 0.153312 0.475766 + -1.48237 1.18961 -1.20643 0.839119 0.0558851 0.541069 + -1.54824 1.19931 -1.08523 0.892584 0.202536 0.402832 + -1.55596 1.11245 -1.01639 0.896302 -0.0196309 0.443009 + -1.45918 1.31928 -1.28762 0.907493 0.396119 0.139806 + -1.482 1.36422 -1.25526 0.905756 0.377442 0.192728 + -1.49134 1.31266 -1.19896 0.837718 0.160443 0.522003 + -1.51478 1.23655 -1.16574 0.833717 0.119872 0.539024 + -1.47664 1.34482 -1.35347 0.858846 0.499496 -0.11352 + -1.49947 1.38977 -1.32112 0.888233 0.452212 -0.0809087 + -1.5168 1.43611 -1.29238 0.904034 0.425647 -0.0393292 + -1.50491 1.40026 -1.23249 0.901912 0.36012 0.238472 + -1.51425 1.3487 -1.17618 0.838207 0.16343 0.520289 + -1.48146 1.32614 -1.4323 0.742308 0.629793 -0.228778 + -1.49738 1.36613 -1.38956 0.781875 0.537231 -0.316314 + -1.5245 1.42932 -1.36002 0.831078 0.470068 -0.29723 + -1.51048 1.35755 -1.41971 0.785497 0.565423 -0.251577 + -1.5376 1.42074 -1.39016 0.809508 0.487 -0.327915 + -1.58824 1.56145 -1.33468 0.864036 0.442911 -0.239315 + -1.54182 1.47566 -1.33128 0.878835 0.438414 -0.18826 + -1.4924 1.31578 -1.48496 0.682665 0.667858 -0.296536 + -1.55899 1.44397 -1.42699 0.863564 0.435221 -0.254636 + -1.60964 1.58459 -1.37157 0.944732 0.322602 -0.0583826 + -1.60153 1.60372 -1.30009 0.914593 0.385592 -0.121815 + -1.55511 1.51792 -1.29669 0.893597 0.437526 -0.100283 + -1.46548 1.23855 -1.61559 0.572906 0.758523 -0.310517 + -1.50726 1.26305 -1.64863 0.644095 0.695631 -0.318179 + -1.53418 1.34028 -1.51799 0.753159 0.579994 -0.310417 + -1.59651 1.47515 -1.4948 0.835756 0.42398 -0.34893 + -1.61771 1.62371 -1.39571 0.917012 0.326939 -0.228471 + -1.4019 1.21062 -1.58843 0.646922 0.697115 -0.309069 + -1.44425 1.20459 -1.66078 0.638012 0.737988 -0.219804 + -1.4398 1.18462 -1.73799 0.48088 0.852271 -0.205886 + -1.48964 1.19978 -1.76384 0.491435 0.835547 -0.245667 + -1.40843 1.18278 -1.6526 0.633276 0.732962 -0.24845 + -1.40398 1.16281 -1.72981 0.522368 0.846345 -0.104075 + -1.41362 1.14503 -1.86862 0.320512 0.934897 -0.152442 + -1.46347 1.16028 -1.89442 0.27376 0.926384 -0.258589 + -1.38772 1.1672 -1.63161 0.825308 0.510224 -0.241945 + -1.38199 1.14774 -1.6489 0.835776 0.54096 -0.0940225 + -1.38227 1.15146 -1.69034 0.556547 0.827417 0.0750823 + -1.37664 1.14592 -1.80136 0.36247 0.928366 -0.0821708 + -1.36011 1.12005 -1.63475 0.592442 0.803189 -0.0624442 + -1.36038 1.12376 -1.67618 0.770781 0.632918 0.0728784 + -1.35493 1.13465 -1.76184 0.683378 0.728207 0.0520413 + -1.35051 1.13019 -1.85951 0.260086 0.96343 -0.0644806 + -1.32217 1.10706 -1.64564 0.220286 0.973971 -0.053426 + -1.32173 1.1061 -1.68638 0.21761 0.975953 -0.0127332 + -1.35104 1.11445 -1.69885 0.586982 0.807809 0.0538187 + -1.34559 1.12525 -1.78456 0.898268 0.432898 0.0755937 + -1.22827 1.0919 -1.73459 0.114962 0.993313 -0.0106827 + -1.31574 1.10599 -1.7686 0.212411 0.976995 0.0190527 + -1.34506 1.11426 -1.78112 0.77047 0.632282 0.0812103 + -1.33747 1.11615 -1.8326 0.837045 0.520751 0.167849 + -1.33801 1.12714 -1.83603 0.692712 0.706621 0.144346 + -1.21204 1.08971 -1.78439 0.116011 0.993232 -0.00562076 + -1.29951 1.1038 -1.8184 0.195488 0.980549 0.0175863 + -1.32299 1.11005 -1.85383 0.418816 0.900976 0.113291 + -1.32052 1.12088 -1.90499 0.453739 0.888132 0.0730834 + -1.33303 1.12393 -1.92846 0.210548 0.975773 -0.0594717 + -1.18366 1.08628 -1.81346 0.0817664 0.996602 -0.00990603 + -1.25696 1.09743 -1.88518 0.169439 0.98513 0.0284454 + -1.28043 1.1036 -1.92066 0.277512 0.95671 0.0877068 + -1.30604 1.11478 -1.92621 0.347487 0.935136 0.0690866 + -1.18596 1.09 -1.9349 0.0767218 0.994352 0.0733329 + -1.22858 1.09393 -1.9143 0.137355 0.989622 0.0422201 + -1.26087 1.10138 -1.96022 0.223457 0.973129 0.0555531 + -1.28648 1.11256 -1.96577 0.319311 0.946757 -0.0411404 + -1.33 1.12081 -1.96347 0.159355 0.984233 -0.0767621 + -1.15105 1.08818 -1.93396 0.0325011 0.997528 0.0623048 + -1.21825 1.09746 -1.98082 0.111722 0.993739 0.000589359 + -1.29512 1.10951 -2.0009 0.184854 0.977755 -0.0991183 + -1.33863 1.11785 -1.99855 0.117618 0.982567 -0.143972 + -1.08885 1.08668 -1.91054 0.0542806 0.997954 -0.0337843 + -1.0773 1.09187 -1.97934 0.13935 0.980498 0.138586 + -1.1395 1.09346 -2.0027 -0.0165511 0.99778 0.0645019 + -1.10695 1.09107 -1.77734 -0.193431 0.980445 0.0362127 + -1.04704 1.09328 -1.87537 0.0569004 0.973453 -0.221701 + -1.02812 1.06684 -1.94899 0.656839 0.724231 0.209884 + -1.04358 1.08719 -1.98883 0.334814 0.920845 0.199859 + -1.10267 1.10541 -2.0876 -0.00308561 0.990809 0.135235 + -1.09227 1.08996 -1.73342 -0.261124 0.915849 0.305016 + -0.983915 1.11468 -1.79325 0.102135 0.983635 -0.148429 + -0.958179 1.10158 -1.80475 0.844946 0.338635 -0.413995 + -1.02131 1.08017 -1.88688 0.783676 0.443465 -0.434961 + -0.969238 1.11357 -1.74933 0.425771 0.859656 0.282329 + -0.950201 1.08593 -1.75806 0.99664 -0.0195232 0.0795413 + -1.00406 1.03856 -1.82341 0.881778 -0.332204 -0.334826 + -1.09291 1.01632 -1.59089 0.354243 0.925053 0.137072 + -1.11728 1.02629 -1.55775 0.499307 0.859589 0.108618 + -0.996081 1.02292 -1.77671 0.876835 -0.433937 -0.207024 + -1.01533 0.98769 -1.79489 0.983354 -0.179662 -0.0271248 + -1.012 0.994478 -1.82505 0.999829 -0.0134116 0.0127323 + -1.01756 1.01435 -1.84748 0.980127 0.0823714 -0.18046 + -1.03481 1.05596 -1.91095 0.999773 -0.00306452 0.0210607 + -1.01144 0.973099 -1.82282 0.987951 -0.128609 0.086098 + -1.00757 0.987186 -1.87742 0.995834 0.0198532 -0.0889959 + -1.01314 1.00706 -1.89985 0.966596 0.238096 0.094885 + -1.00645 1.01785 -1.93794 0.875372 0.325751 0.357224 + -1.01786 0.945051 -1.83084 0.950162 -0.293284 0.10572 + -1.01399 0.959138 -1.88544 0.979392 -0.176513 0.0981545 + -0.99163 0.99924 -1.9591 0.935095 0.101867 0.339441 + -0.988968 1.05418 -2.00106 0.745405 0.568094 0.348771 + -1.00443 1.07461 -2.04084 0.398694 0.888189 0.228391 + -1.03765 0.883927 -1.85637 0.93604 -0.290251 0.198955 + -1.03466 0.865062 -1.88869 0.939733 -0.188261 0.285413 + -1.011 0.940273 -1.91776 0.937055 -0.215974 0.27438 + -0.991771 0.955552 -1.96923 0.9521 -0.101055 0.288605 + -1.09745 0.79464 -1.78372 0.875019 -0.268242 0.402973 + -1.05773 0.785549 -1.86557 0.899101 -0.167006 0.404632 + -1.006 0.870142 -1.95989 0.932887 -0.157103 0.324099 + -0.986775 0.88534 -2.01142 0.946685 -0.121602 0.29833 + -1.14134 0.712286 -1.73028 0.840727 -0.314113 0.441034 + -1.10162 0.703111 -1.81219 0.830778 -0.270314 0.486557 + -1.06407 0.665688 -1.88717 0.847717 -0.277697 0.451952 + -1.02908 0.790633 -1.93678 0.921692 -0.131475 0.364963 + -1.19759 0.632303 -1.70194 0.778508 -0.460176 0.426806 + -1.16577 0.605239 -1.79147 0.737381 -0.493769 0.460935 + -1.12821 0.567733 -1.86651 0.647001 -0.573674 0.502283 + -1.09718 0.541941 -1.95623 0.685948 -0.594715 0.419274 + -1.03454 0.654822 -1.96195 0.879723 -0.263726 0.395646 + -1.27522 0.528608 -1.69214 0.715921 -0.530846 0.453497 + -1.2434 0.501544 -1.78166 0.755033 -0.560987 0.339438 + -1.22111 0.481229 -1.89808 0.675259 -0.644874 0.357998 + -1.19008 0.455437 -1.98781 0.621183 -0.669827 0.406773 + -1.30462 0.57125 -1.6108 0.653371 -0.55673 0.512989 + -1.39521 0.449102 -1.60763 0.720441 -0.496904 0.483789 + -1.36581 0.406463 -1.68898 0.71644 -0.532194 0.451092 + -1.33049 0.388747 -1.78369 0.761052 -0.5572 0.332157 + -1.35822 0.581842 -1.52854 0.656139 -0.535145 0.532073 + -1.43477 0.463087 -1.52806 0.71188 -0.458388 0.532079 + -1.51087 0.270411 -1.60753 0.745923 -0.523087 0.412285 + -1.47041 0.261263 -1.69749 0.734902 -0.55189 0.394128 + -1.4351 0.243462 -1.79225 0.731062 -0.564496 0.383267 + -1.41888 0.576279 -1.46511 0.646976 -0.496289 0.578895 + -1.49543 0.45761 -1.46457 0.752044 -0.40799 0.517661 + -1.55043 0.284485 -1.52791 0.770437 -0.476393 0.423646 + -1.64693 0.158135 -1.50386 0.728119 -0.599991 0.331442 + -1.60938 0.151428 -1.60044 0.702056 -0.62076 0.348962 + -1.47171 0.58636 -1.39737 0.693619 -0.45853 0.555556 + -1.52999 0.476495 -1.38248 0.801063 -0.349192 0.486172 + -1.57685 0.307882 -1.43463 0.806349 -0.444788 0.389828 + -1.67335 0.181532 -1.41058 0.771124 -0.541297 0.33521 + -1.51673 0.601888 -1.32347 0.73258 -0.394978 0.554364 + -1.57501 0.491937 -1.30862 0.854505 -0.282919 0.435635 + -1.6114 0.326762 -1.35253 0.840761 -0.412313 0.350883 + -1.69386 0.205535 -1.30996 0.793536 -0.536675 0.286845 + -1.77078 0.075799 -1.37565 0.68536 -0.682119 0.254942 + -1.55015 0.641811 -1.25441 0.790138 -0.360605 0.495628 + -1.59402 0.539542 -1.22688 0.908984 -0.237773 0.342362 + -1.61983 0.365541 -1.2569 0.889323 -0.339409 0.306442 + -1.70229 0.244309 -1.21432 0.79847 -0.50459 0.328383 + -1.56162 0.702814 -1.18007 0.854852 -0.28339 0.434648 + -1.60549 0.60055 -1.15255 0.907737 -0.230313 0.35067 + -1.63884 0.413152 -1.17517 0.883781 -0.29005 0.367153 + -1.71489 0.294507 -1.11826 0.805347 -0.440134 0.397113 + -1.80779 0.132344 -1.16719 0.711517 -0.611219 0.346634 + -1.58019 0.76737 -1.11449 0.85704 -0.244885 0.453336 + -1.61581 0.67097 -1.08032 0.914331 -0.19806 0.35323 + -1.65143 0.480345 -1.09594 0.885192 -0.269321 0.379343 + -1.72749 0.361699 -1.03904 0.815727 -0.38333 0.433182 + -1.59302 0.838534 -1.04755 0.857829 -0.170253 0.484916 + -1.62864 0.74213 -1.01337 0.907813 -0.148264 0.392291 + -1.66176 0.550679 -1.02377 0.894996 -0.253189 0.367256 + -1.73373 0.435792 -0.954179 0.834671 -0.365902 0.411632 + -1.8313 0.24669 -0.970242 0.726684 -0.513273 0.456597 + -1.58681 0.989069 -1.01928 0.832526 -0.176992 0.524952 + -1.61587 0.913088 -0.998879 0.718302 -0.054998 0.693554 + -1.64391 0.823498 -0.957905 0.803516 0.0356972 0.594212 + -1.66647 0.634013 -0.954109 0.893489 -0.196039 0.404038 + -1.73844 0.519127 -0.884519 0.853437 -0.31061 0.418528 + -1.60233 1.06256 -0.96058 0.600196 -0.284741 0.747454 + -1.66335 0.996747 -0.978581 0.469243 -0.157034 0.868995 + -1.69139 0.907156 -0.937606 0.867169 0.145639 0.476243 + -1.68175 0.715383 -0.898643 0.930508 -0.137929 0.339309 + -1.58673 1.17767 -0.967345 0.866091 0.107659 0.488155 + -1.63217 1.13485 -0.91298 0.53935 -0.251011 0.8038 + -1.69319 1.06903 -0.930981 0.685085 -0.268883 0.677023 + -1.71302 0.976869 -0.880152 0.966357 0.102141 0.236053 + -1.67673 0.798432 -0.840487 0.984347 -0.021866 0.174878 + -1.58645 1.25696 -1.04068 0.88288 0.265888 0.387073 + -1.62401 1.25131 -0.923105 0.859705 0.163754 0.483831 + -1.66946 1.2085 -0.86874 0.731817 -0.180123 0.657267 + -1.71522 1.12579 -0.863086 0.849517 -0.178815 0.496333 + -1.73504 1.03363 -0.812257 0.964998 0.122164 0.232066 + -1.553 1.29421 -1.1212 0.826732 0.142832 0.544163 + -1.59609 1.36052 -1.07345 0.84029 0.142386 0.523106 + -1.62539 1.32331 -0.995411 0.891507 0.26432 0.3679 + -1.66295 1.31767 -0.877832 0.880105 0.197236 0.431872 + -1.69943 1.27083 -0.806712 0.748984 -0.100641 0.654901 + -1.53056 1.3972 -1.16099 0.861567 0.170934 0.477999 + -1.56931 1.3428 -1.10596 0.786053 0.0714698 0.614014 + -1.58452 1.45584 -1.09935 0.816287 0.170745 0.551835 + -1.63139 1.42106 -1.02992 0.841445 0.168355 0.513447 + -1.66069 1.38386 -0.951877 0.886274 0.275812 0.372083 + -1.52672 1.44195 -1.2025 0.908297 0.340478 0.243046 + -1.55774 1.43811 -1.13185 0.825473 0.220466 0.519604 + -1.55391 1.48278 -1.17341 0.886322 0.332952 0.321834 + -1.57536 1.52092 -1.14547 0.884572 0.293971 0.362097 + -1.60743 1.48643 -1.07733 0.81361 0.189247 0.549749 + -1.5386 1.4778 -1.26239 0.91024 0.410397 0.0551191 + -1.55989 1.52355 -1.22323 0.909299 0.401645 0.108891 + -1.5764 1.56368 -1.25754 0.903344 0.42881 -0.00961589 + -1.58134 1.56168 -1.19528 0.92928 0.348741 0.121733 + -1.59512 1.59787 -1.17855 0.918722 0.344777 0.19256 + -1.59827 1.55151 -1.12345 0.85495 0.291415 0.429112 + -1.63962 1.53551 -1.04434 0.80926 0.215384 0.546542 + -1.61323 1.63106 -1.28145 0.950067 0.307948 0.0504122 + -1.5881 1.59102 -1.23889 0.923268 0.383847 -0.015392 + -1.60188 1.6272 -1.22216 0.943095 0.332503 -0.00366988 + -1.61773 1.64263 -1.16089 0.921459 0.298711 0.248366 + -1.62087 1.59636 -1.10574 0.850282 0.294279 0.436372 + -1.63079 1.69475 -1.26975 0.965671 0.259755 -0.00262169 + -1.64063 1.746 -1.29753 0.981808 0.18736 -0.0308098 + -1.65095 1.83516 -1.20736 0.987992 0.134976 0.0751928 + -1.64342 1.75405 -1.19387 0.968595 0.192593 0.157261 + -1.61944 1.69088 -1.21046 0.949872 0.31088 0.033105 + -1.64171 1.70581 -1.14431 0.904836 0.277634 0.322786 + -1.6487 1.78512 -1.32169 0.958587 0.199575 -0.203176 + -1.67051 1.94782 -1.27149 0.967009 0.168724 -0.190856 + -1.66079 1.88642 -1.23514 0.988287 0.139971 -0.0608062 + -1.6578 1.70994 -1.38728 0.685234 0.393604 -0.612805 + -1.65962 1.79027 -1.34981 0.801938 0.270827 -0.532492 + -1.68143 1.95297 -1.29961 0.704724 0.300802 -0.642559 + -1.68429 2.08831 -1.22682 0.967528 0.102554 -0.231025 + -1.67457 2.027 -1.19043 0.99549 0.0922849 0.0219888 + -1.64283 1.63651 -1.43129 0.642264 0.483408 -0.594822 + -1.67945 1.64718 -1.44516 -0.139892 0.500138 -0.854571 + -1.68468 1.72955 -1.40063 -0.00451575 0.429118 -0.903237 + -1.6865 1.80988 -1.36317 0.0242019 0.391968 -0.91966 + -1.62162 1.48795 -1.53037 0.66687 0.527203 -0.526633 + -1.66448 1.57375 -1.48918 -0.128547 0.52756 -0.839736 + -1.72826 1.47856 -1.47591 -0.748902 0.314693 -0.583193 + -1.72777 1.56512 -1.43703 -0.708755 0.288441 -0.643792 + -1.5717 1.37146 -1.5858 0.745003 0.560257 -0.362053 + -1.61248 1.3985 -1.60823 0.581359 0.5953 -0.554652 + -1.65498 1.50123 -1.54717 -0.108795 0.619411 -0.777492 + -1.71876 1.40596 -1.53395 -0.754409 0.329249 -0.567858 + -1.56679 1.29244 -1.68874 0.601428 0.674473 -0.428218 + -1.60758 1.31948 -1.71117 0.326133 0.720529 -0.611944 + -1.63912 1.34099 -1.68663 -0.382134 0.670327 -0.636109 + -1.64584 1.41169 -1.62508 -0.153842 0.639864 -0.752932 + -1.71504 1.32517 -1.58463 -0.798321 0.327842 -0.505176 + -1.54917 1.22917 -1.80395 0.260681 0.875349 -0.407196 + -1.60006 1.21441 -1.83039 -0.172425 0.799119 -0.575915 + -1.60983 1.26131 -1.77081 -0.355723 0.662634 -0.659073 + -1.64137 1.28281 -1.74627 -0.499421 0.596737 -0.628079 + -1.70833 1.25447 -1.64618 -0.826482 0.323048 -0.461051 + -1.53871 1.17114 -1.89964 0.0665979 0.897041 -0.436901 + -1.5896 1.15638 -1.92608 -0.397037 0.790209 -0.466831 + -1.62797 1.10647 -1.93902 -0.765356 0.504198 -0.400018 + -1.62972 1.16616 -1.86822 -0.640316 0.563034 -0.522483 + -1.63948 1.21306 -1.80864 -0.639744 0.540692 -0.546242 + -1.43855 1.1159 -2.01876 0.0727262 0.966674 -0.245464 + -1.51379 1.12676 -2.02398 -0.0953847 0.923993 -0.370322 + -1.57138 1.1026 -2.02832 -0.51876 0.729184 -0.446295 + -1.59193 1.1027 -1.9941 -0.673649 0.595491 -0.437708 + -1.38557 1.11758 -2.01527 0.041107 0.979143 -0.198972 + -1.39932 1.0879 -2.16447 -0.115984 0.958613 -0.260017 + -1.4908 1.0756 -2.14036 -0.301435 0.856809 -0.418347 + -1.54839 1.05144 -2.14471 -0.489676 0.727995 -0.479833 + -1.38749 1.1293 -1.92677 0.203054 0.973422 -0.105919 + -1.38446 1.12618 -1.96176 -0.235509 0.964317 -0.120943 + -1.33975 1.10917 -2.0521 0.0800733 0.983705 -0.160977 + -1.34634 1.0895 -2.16103 -0.0357518 0.987175 -0.155588 + -1.29729 1.10744 -2.02971 0.135192 0.984821 -0.108859 + -1.3294 1.10126 -2.095 0.0444298 0.988207 -0.146535 + -1.30621 1.0951 -2.14454 -0.058199 0.996153 -0.0655115 + -1.32314 1.08343 -2.21052 -0.17548 0.979131 -0.102519 + -1.31599 1.07477 -2.28572 -0.385102 0.894613 -0.226635 + -1.22043 1.09538 -2.00962 0.228125 0.966454 -0.118005 + -1.28695 1.09954 -2.07262 0.178507 0.97375 -0.141231 + -1.27041 1.09363 -2.08299 0.250065 0.960632 -0.121053 + -1.28136 1.09502 -2.12479 0.0811391 0.9951 0.0565034 + -1.29086 1.09788 -2.18676 -0.187011 0.982159 -0.0197482 + -1.20388 1.08947 -2.01999 0.0361177 0.983928 -0.174876 + -1.22956 1.08229 -2.07395 0.133266 0.984258 -0.116087 + -1.24051 1.08368 -2.11575 0.128339 0.988893 0.0749617 + -1.24092 1.09246 -2.16535 0.0765288 0.978473 0.19166 + -1.26601 1.0978 -2.167 0.0684345 0.990901 0.115898 + -1.16882 1.09152 -2.02854 -0.103222 0.993759 -0.0422805 + -1.19449 1.08434 -2.08249 -0.164808 0.986325 -0.00108854 + -1.20317 1.08477 -2.11703 -0.127966 0.986048 0.106457 + -1.13199 1.10347 -2.11344 -0.2288 0.968857 0.0946935 + -1.14066 1.10399 -2.14793 -0.244385 0.951314 0.187826 + -1.20358 1.09346 -2.16669 -0.125805 0.955117 0.268189 + -1.20362 1.1043 -2.19567 -0.238142 0.889549 0.38986 + -1.23619 1.1012 -2.2137 -0.0647689 0.923384 0.378375 + -1.07193 1.13033 -2.19796 -0.024249 0.945075 0.325953 + -1.14071 1.11474 -2.17695 -0.167989 0.918081 0.359036 + -1.20313 1.12802 -2.23314 -0.239696 0.884025 0.401305 + -1.2357 1.12492 -2.25118 -0.444914 0.880695 0.162567 + -1.26129 1.10663 -2.2153 -0.169965 0.971981 0.162373 + -1.06896 1.10064 -2.09713 0.187102 0.960629 0.205391 + -1.04583 1.10626 -2.12786 0.0440734 0.9459 0.321452 + -1.03487 1.11922 -2.16291 -0.0361829 0.953847 0.298104 + -0.974548 1.14311 -2.24689 0.145567 0.960289 0.238026 + -1.08854 1.16718 -2.28678 -0.0115867 0.958846 0.283689 + -1.13452 1.168 -2.2984 -0.256421 0.949666 0.179949 + -1.11791 1.13115 -2.20958 -0.173721 0.914506 0.365375 + -0.9813 1.08014 -2.07162 0.294152 0.784897 0.545355 + -0.951245 1.1095 -2.11168 0.257384 0.809139 0.52825 + -0.940285 1.12247 -2.14673 0.328488 0.894388 0.303587 + -0.937486 1.13191 -2.21189 0.332247 0.928216 0.167415 + -0.954909 1.05443 -2.06828 0.804878 0.278694 0.523929 + -0.924853 1.0837 -2.10838 0.84013 0.22087 0.495377 + -0.913843 1.10392 -2.15981 0.926368 0.335705 0.17072 + -0.911044 1.11345 -2.22492 0.973042 0.225081 0.0502845 + -0.914023 1.13006 -2.28628 0.918688 0.389675 0.0645338 + -0.974143 1.03556 -2.02221 0.914424 0.118565 0.387003 + -0.950424 1.01234 -2.07959 0.936629 -0.07147 0.342955 + -0.931314 1.03687 -2.12927 0.957038 -0.156572 0.244057 + -0.920304 1.05709 -2.18069 0.992451 -0.122179 -0.010626 + -0.926823 1.07678 -2.2384 0.980467 -0.183094 -0.0718396 + -0.969659 0.993571 -2.03348 0.947023 -0.0449454 0.318006 + -0.952612 0.969858 -2.09181 0.945446 -0.12635 0.300279 + -0.933501 0.994386 -2.14149 0.970845 -0.132088 0.200033 + -0.926781 0.999793 -2.18866 0.987968 -0.15197 -0.0287218 + -0.969799 0.949883 -2.04361 0.952234 -0.0972612 0.289467 + -0.947048 0.922664 -2.13107 0.967483 -0.155459 0.199522 + -0.940327 0.928066 -2.17822 0.982403 -0.103286 0.155618 + -0.9333 1.01957 -2.2463 0.998326 -0.0233835 0.052892 + -0.964235 0.902602 -2.08292 0.951822 -0.118642 0.282771 + -0.977004 0.797029 -2.08306 0.955386 -0.097933 0.27865 + -0.953089 0.796417 -2.1604 0.963165 -0.0675538 0.260289 + -0.923287 0.9505 -2.24968 0.979987 0.0275919 0.19714 + -0.999544 0.779769 -2.01156 0.937617 -0.10709 0.330765 + -1.00511 0.628134 -2.04333 0.895379 -0.263211 0.359189 + -0.9812 0.627521 -2.12066 0.92832 -0.210969 0.306128 + -0.954739 0.613244 -2.20594 0.932296 -0.195628 0.304228 + -0.936049 0.81885 -2.23186 0.969981 -0.0499561 0.237994 + -1.06776 0.515253 -2.03761 0.665001 -0.596063 0.44998 + -1.03642 0.491844 -2.11246 0.727047 -0.546295 0.41589 + -1.00996 0.477562 -2.19773 0.794171 -0.449285 0.40919 + -0.987213 0.44724 -2.26101 0.735311 -0.410456 0.539299 + -0.934241 0.615491 -2.27583 0.918927 -0.11539 0.377172 + -1.16227 0.429164 -2.0737 0.603788 -0.668898 0.433607 + -1.13093 0.405755 -2.14855 0.504108 -0.629814 0.590939 + -1.10118 0.368082 -2.1967 0.581672 -0.573917 0.576434 + -1.07843 0.337759 -2.25998 0.66629 -0.604275 0.436931 + -1.2779 0.348663 -1.99567 0.754261 -0.531393 0.385631 + -1.2501 0.32239 -2.08156 0.73718 -0.521743 0.42936 + -1.21894 0.297052 -2.16027 0.650316 -0.512833 0.560439 + -1.18919 0.259384 -2.20843 0.579813 -0.564258 0.587732 + -1.14869 0.247773 -2.28572 0.681187 -0.608254 0.407444 + -1.3082 0.368428 -1.9001 0.787299 -0.536785 0.30335 + -1.36476 0.21381 -1.97769 0.768104 -0.518164 0.376194 + -1.32614 0.201938 -2.06793 0.754365 -0.510653 0.412513 + -1.29498 0.176688 -2.14659 0.725484 -0.542638 0.423339 + -1.25635 0.164224 -2.23701 0.677059 -0.602807 0.422155 + -1.39505 0.233576 -1.88213 0.76082 -0.542501 0.356153 + -1.48207 0.129597 -1.87343 0.682624 -0.634174 0.363108 + -1.43835 0.122355 -1.96969 0.68794 -0.625107 0.368754 + -1.39973 0.110482 -2.05993 0.670276 -0.656216 0.34657 + -1.35845 0.104011 -2.15432 0.639467 -0.678156 0.362197 + -1.52211 0.139485 -1.78356 0.684211 -0.630122 0.367153 + -1.54867 0.072714 -1.86511 0.542206 -0.784721 0.300376 + -1.50496 0.06539 -1.96142 0.523912 -0.80173 0.287656 + -1.46343 0.05873 -2.06489 0.500826 -0.823959 0.265075 + -1.42215 0.052258 -2.15928 0.501515 -0.825834 0.257838 + -1.56892 0.142187 -1.69044 0.686286 -0.630615 0.362403 + -1.60296 0.071117 -1.76894 0.549244 -0.785052 0.286397 + -1.65748 0.043559 -1.77041 0.153631 -0.987522 0.0346111 + -1.60319 0.045063 -1.86662 0.143323 -0.986081 0.0842797 + -1.55544 0.042446 -1.96028 0.12878 -0.985175 0.113338 + -1.70267 0.06714 -1.57905 0.598631 -0.750262 0.280621 + -1.64978 0.073826 -1.67583 0.589737 -0.751714 0.29519 + -1.70933 0.036278 -1.6716 0.206748 -0.977039 0.0514759 + -1.69304 0.049387 -1.7757 -0.22278 -0.96006 -0.169277 + -1.645 0.053394 -1.87724 -0.25473 -0.957594 -0.134631 + -1.74022 0.073933 -1.48242 0.644235 -0.729187 0.230752 + -1.76223 0.029679 -1.57477 0.337237 -0.937576 0.0849903 + -1.74489 0.042194 -1.67685 -0.191787 -0.960279 -0.202689 + -1.72049 0.064447 -1.80299 -0.35515 -0.905699 -0.231467 + -1.83471 0.025187 -1.36499 0.436433 -0.8833 0.171193 + -1.80415 0.023321 -1.47176 0.381871 -0.917714 0.109436 + -1.79512 0.025566 -1.58045 -0.0922438 -0.985356 -0.143401 + -1.82149 0.041109 -1.60877 -0.442671 -0.849374 -0.287412 + -1.77126 0.05782 -1.70511 -0.296105 -0.915917 -0.270956 + -1.86011 0.040048 -1.25573 0.447953 -0.849213 0.279599 + -1.86908 0.015865 -1.36964 -0.120348 -0.991968 0.0389295 + -1.83704 0.019212 -1.47744 -0.121295 -0.989967 -0.0724768 + -1.79129 0.099711 -1.27507 0.710707 -0.63697 0.298606 + -1.87661 0.072682 -1.14785 0.490809 -0.791054 0.365158 + -1.89448 0.030728 -1.26038 -0.0224925 -0.981886 0.188132 + -1.89584 0.031306 -1.39999 -0.544022 -0.826537 -0.14449 + -1.8638 0.034655 -1.50779 -0.533683 -0.81644 -0.220474 + -1.8892 0.11967 -1.04724 0.491107 -0.73462 0.468132 + -1.91654 0.057357 -1.15051 -0.0664251 -0.937121 0.342626 + -1.94594 0.060274 -1.18596 -0.424581 -0.887641 0.178394 + -1.92388 0.03373 -1.29579 -0.512177 -0.858808 -0.0111148 + -1.82039 0.18254 -1.07113 0.715962 -0.563761 0.411792 + -1.90011 0.183815 -0.946342 0.40796 -0.714354 0.568566 + -1.92914 0.104254 -1.04994 -0.0017037 -0.859972 0.510339 + -1.90442 0.264828 -0.848658 0.407666 -0.684278 0.604626 + -1.93193 0.175895 -0.951423 -0.126213 -0.782923 0.609182 + -1.96125 0.164999 -0.98295 -0.4823 -0.704669 0.520412 + -1.95845 0.09336 -1.08147 -0.445979 -0.814433 0.371216 + -1.83755 0.320778 -0.885367 0.743809 -0.490286 0.454277 + -1.90238 0.345574 -0.758916 0.252848 -0.654547 0.712486 + -1.93624 0.256906 -0.853739 -0.186993 -0.718289 0.670145 + -1.83552 0.40161 -0.795576 0.757055 -0.449723 0.473937 + -1.9005 0.439095 -0.683499 0.22376 -0.574554 0.787286 + -1.93979 0.349147 -0.769904 -0.397779 -0.591454 0.701395 + -1.96402 0.330959 -0.803601 -0.719051 -0.454278 0.525925 + -1.96047 0.238717 -0.887436 -0.529062 -0.635927 0.561863 + -1.73691 0.605799 -0.81344 0.879357 -0.306427 0.364464 + -1.83398 0.488196 -0.724546 0.757838 -0.400816 0.514809 + -1.89473 0.542755 -0.617445 0.266518 -0.504582 0.821198 + -1.9379 0.44258 -0.694537 -0.441434 -0.515706 0.734291 + -1.73189 0.688842 -0.755276 0.882044 -0.271597 0.385011 + -1.82821 0.591858 -0.658491 0.746126 -0.372853 0.551613 + -1.89444 0.652219 -0.557439 0.223468 -0.454549 0.862234 + -1.93576 0.547198 -0.624538 -0.425058 -0.461598 0.778622 + -1.69835 0.868144 -0.783033 0.971882 0.0827049 0.220466 + -1.73465 0.775569 -0.692687 0.899378 -0.205636 0.385789 + -1.83097 0.678666 -0.59585 0.702944 -0.354677 0.616502 + -1.89441 0.764101 -0.504826 0.211403 -0.429864 0.877796 + -1.93547 0.65666 -0.564533 -0.489309 -0.39302 0.778532 + -1.72244 0.926738 -0.699321 0.969121 0.0967503 0.226811 + -1.75873 0.834162 -0.608975 0.856447 -0.241278 0.456381 + -1.83094 0.790462 -0.543286 0.675589 -0.349146 0.649366 + -1.90827 0.87039 -0.446126 0.0923059 -0.552086 0.828662 + -1.94212 0.77194 -0.513802 -0.504601 -0.426751 0.750508 + -1.76018 1.08757 -0.733287 0.979458 0.113183 0.166886 + -1.74758 0.980684 -0.62036 0.954768 0.111829 0.275521 + -1.78124 0.914346 -0.53626 0.856383 -0.147809 0.494732 + -1.85344 0.870648 -0.470571 0.553392 -0.437721 0.708631 + -1.74518 1.18812 -0.801049 0.879133 -0.139851 0.455596 + -1.77403 1.13592 -0.650637 0.969242 0.107163 0.221555 + -1.78834 1.03441 -0.536214 0.936855 0.102752 0.334281 + -1.822 0.968071 -0.452114 0.79048 -0.269115 0.550198 + -1.88088 0.964924 -0.39846 0.502809 -0.456807 0.733832 + -1.74325 1.34093 -0.758132 0.887192 0.0441054 0.459288 + -1.75903 1.23639 -0.718449 0.962019 -0.0014114 0.272979 + -1.78886 1.28967 -0.649536 0.944103 0.0596126 0.324217 + -1.80398 1.18699 -0.568694 0.962772 0.0990288 0.251521 + -1.81829 1.08548 -0.45427 0.932449 0.0646542 0.35547 + -1.70677 1.38786 -0.829211 0.871686 0.241045 0.426687 + -1.7464 1.44765 -0.780767 0.896455 0.259433 0.359254 + -1.77308 1.39422 -0.689219 0.904058 0.108271 0.41347 + -1.70032 1.44373 -0.903383 0.876662 0.307219 0.370242 + -1.74034 1.49789 -0.858394 0.866347 0.341449 0.364492 + -1.78704 1.49931 -0.716844 0.874499 0.342764 0.343167 + -1.81373 1.44579 -0.625345 0.924458 0.191136 0.329916 + -1.66357 1.47014 -0.99693 0.838241 0.195143 0.509187 + -1.70359 1.5243 -0.951933 0.829102 0.26667 0.491403 + -1.78188 1.54323 -0.805916 0.828395 0.447641 0.336719 + -1.82859 1.54464 -0.664366 0.848237 0.439456 0.295589 + -1.66809 1.57701 -1.02522 0.792729 0.263704 0.549583 + -1.68527 1.62043 -1.02003 0.763601 0.279338 0.582137 + -1.72078 1.56773 -0.946754 0.786063 0.263578 0.559135 + -1.74954 1.58263 -0.912958 0.807513 0.344869 0.478527 + -1.83001 1.59114 -0.762101 0.826915 0.459996 0.323443 + -1.64934 1.63786 -1.08662 0.833499 0.27127 0.481344 + -1.67123 1.69079 -1.07069 0.812778 0.251001 0.525729 + -1.70927 1.65192 -1.00797 0.766288 0.2652 0.585211 + -1.73804 1.66673 -0.974226 0.80212 0.212312 0.558147 + -1.79767 1.63046 -0.8692 0.811469 0.339352 0.475772 + -1.6636 1.75882 -1.12833 0.940747 0.158885 0.299585 + -1.67721 1.82691 -1.10747 0.904157 0.104037 0.414339 + -1.69524 1.72227 -1.05862 0.791299 0.191216 0.58076 + -1.71156 1.78375 -1.0419 0.836549 0.109677 0.536802 + -1.75646 1.70307 -0.956964 0.800844 0.182837 0.57028 + -1.65796 1.81516 -1.16071 0.960048 0.102709 0.260307 + -1.67156 1.88334 -1.1398 0.949171 0.0938131 0.300456 + -1.69353 1.88847 -1.0907 0.908299 0.0581232 0.414264 + 1.09292 1.01632 -1.59089 0.36811 -0.929741 0.00873225 + 1.24544 1.07804 -1.44958 0.368108 -0.929742 0.00873484 + 1.1173 1.02629 -1.55774 0.36811 -0.929741 0.00873143 + -1.09291 1.01632 -1.59089 -0.367616 -0.92993 0.00940683 + -1.11728 1.02629 -1.55775 -0.367616 -0.92993 0.00940681 + -1.24542 1.07804 -1.44959 -0.367617 -0.92993 0.00940625 + 1.93239 2.72679 -0.741506 -0.916 0.0382739 0.399347 + 1.86777 2.79456 -0.863879 0.112702 0.880319 0.4608 + 1.82515 2.77478 -0.886633 -0.729584 0.436691 0.526317 + 1.80133 2.74089 -0.909921 -0.892707 0.165894 0.41899 + 1.81726 2.72235 -0.875219 -0.845523 0.175199 0.504377 + 1.86198 2.8063 -0.896229 0.50297 0.83669 -0.216727 + 1.85923 2.80544 -0.885537 -0.0592395 0.92662 0.371303 + 1.81661 2.78567 -0.908291 -0.743352 0.45415 0.491097 + 1.79003 2.7526 -0.944002 -0.907992 0.158258 0.38795 + 1.78061 2.68483 -0.955633 -0.949351 0.137416 0.282574 + 1.82875 2.78366 -0.959199 0.561422 0.544702 -0.62298 + 1.80795 2.79902 -0.949217 -0.187596 0.917246 -0.35138 + 1.8052 2.79816 -0.938525 -0.646271 0.729673 0.223407 + 1.77862 2.76509 -0.974238 -0.905423 0.40769 0.118315 + 1.80458 2.75174 -1.00111 0.472688 0.47962 -0.739278 + 1.78378 2.76702 -0.991191 -0.396033 0.746265 -0.535019 + 1.78383 2.69045 -1.04735 0.444954 0.377498 -0.812103 + 1.76305 2.71127 -1.03682 -0.47726 0.585845 -0.654987 + 1.75789 2.70925 -1.01992 -0.963661 0.259097 0.0650122 + 1.7693 2.69654 -0.989714 -0.936065 0.056336 0.347288 + 1.76503 2.61621 -1.08778 0.330892 0.303752 -0.893446 + 1.74425 2.63695 -1.0773 -0.626099 0.41643 -0.659232 + 1.74104 2.63256 -1.0577 -0.984457 0.129693 0.118423 + 1.75246 2.61995 -1.02745 -0.950653 0.0442371 0.307086 + 1.76075 2.60809 -0.991314 -0.972834 0.0960788 0.210627 + 1.74268 2.5277 -1.12287 0.0477392 0.320426 -0.94607 + 1.7312 2.54263 -1.10692 -0.809607 0.320956 -0.491452 + 1.728 2.53824 -1.08732 -0.985972 0.104142 0.130439 + 1.73941 2.52038 -1.0578 -0.950493 0.0418529 0.307916 + 1.7477 2.50862 -1.02162 -0.978792 0.0827069 0.187419 + 1.72818 2.43651 -1.15392 0.0810189 0.330372 -0.940367 + 1.7167 2.45152 -1.13792 -0.854077 0.287388 -0.433546 + 1.7122 2.432 -1.11812 -0.981024 0.0939114 0.169625 + 1.72362 2.41406 -1.08864 -0.950572 0.0560772 0.305399 + 1.73003 2.38788 -1.0561 -0.974624 0.0962894 0.202078 + 1.77005 2.3569 -1.13484 0.713429 0.144014 -0.685769 + 1.72075 2.34607 -1.17588 0.391001 0.21588 -0.894714 + 1.70418 2.37334 -1.1703 -0.650951 0.280336 -0.70546 + 1.69969 2.35382 -1.15051 -0.990737 0.111569 0.0774106 + 1.76262 2.26646 -1.1568 0.658389 0.163777 -0.734643 + 1.71276 2.24476 -1.2068 0.388641 0.245919 -0.887965 + 1.6962 2.27211 -1.20117 -0.564513 0.2812 -0.776049 + 1.68711 2.23536 -1.18593 -0.993446 0.0838867 -0.0776394 + 1.70018 2.27691 -1.12029 -0.973089 0.0769613 0.217197 + 1.75792 2.17579 -1.18895 0.667364 0.202865 -0.716569 + 1.7067 2.15597 -1.23461 0.23055 0.28228 -0.931217 + 1.69337 2.12496 -1.24211 -0.648277 0.243186 -0.721525 + 1.68429 2.08831 -1.22682 -0.981199 0.119198 -0.151789 + 1.68761 2.15846 -1.15573 -0.995449 0.0538875 0.0785941 + 1.8141 1.95582 -1.19674 0.771757 0.171607 -0.612325 + 1.75186 2.08692 -1.21682 0.642961 0.212671 -0.73578 + 1.70639 2.07934 -1.25929 0.253922 0.304421 -0.918069 + 1.69305 2.04842 -1.26673 -0.0811285 0.336144 -0.93831 + 1.68143 1.95297 -1.29961 -0.704906 0.297907 -0.643707 + 1.88335 1.79572 -1.12164 0.871595 0.126337 -0.473668 + 1.80276 1.87013 -1.23573 0.775056 0.188371 -0.603162 + 1.74052 2.00132 -1.25576 0.665366 0.235785 -0.708303 + 1.70175 1.99203 -1.29306 0.152272 0.337195 -0.929039 + 1.69013 1.89658 -1.32594 0.0329159 0.343605 -0.938537 + 1.95992 1.51335 -1.04196 0.932547 0.176951 -0.314714 + 1.87763 1.70717 -1.16687 0.873451 0.157859 -0.460612 + 1.7962 1.78133 -1.27253 0.774396 0.200558 -0.600073 + 1.73589 1.91402 -1.28954 0.632478 0.238087 -0.737079 + 2.02186 1.46779 -0.887253 0.94337 0.137798 -0.301768 + 2.02129 1.37888 -0.937849 0.946085 0.178483 -0.27031 + 1.96479 1.42748 -1.09262 0.919534 0.202505 -0.33682 + 1.87107 1.61838 -1.20367 0.859476 0.181911 -0.477713 + 1.79399 1.69277 -1.30653 0.783743 0.223034 -0.579657 + 2.06017 1.29964 -0.841612 0.963235 0.135786 -0.231821 + 2.05816 1.21379 -0.905509 0.966162 0.135598 -0.219419 + 2.02617 1.29301 -0.988521 0.949195 0.178161 -0.2594 + 1.96847 1.33642 -1.13131 0.913559 0.196022 -0.356349 + 1.87474 1.52722 -1.2424 0.870186 0.218854 -0.441452 + 2.08967 1.35177 -0.684508 0.980638 0.0678055 -0.183716 + 2.08309 1.26324 -0.753163 0.982409 0.074765 -0.171124 + 2.08108 1.17739 -0.817061 0.988014 0.0492373 -0.146304 + 2.05549 1.1299 -0.964603 0.971445 0.0808971 -0.223049 + 2.02351 1.20911 -1.04761 0.945827 0.155188 -0.285182 + 2.10357 1.35566 -0.589833 0.985757 0.040358 -0.163258 + 2.09699 1.26712 -0.658488 0.993712 -0.000132064 -0.111969 + 2.08871 1.18155 -0.736669 0.996009 -0.00997451 -0.0886932 + 2.07962 1.08929 -0.804875 0.995133 -0.077164 -0.0612927 + 2.07198 1.08521 -0.885208 0.990669 -0.0184381 -0.135034 + 2.14132 1.44162 -0.358728 0.979014 -0.170212 -0.112072 + 2.1263 1.3696 -0.449178 0.990215 -0.0964402 -0.100859 + 2.10602 1.28468 -0.5331 0.987303 -0.156358 -0.0280198 + 2.09775 1.19911 -0.611281 0.994332 -0.105224 -0.0152324 + 2.16917 1.53095 -0.296056 0.970738 -0.0371363 -0.237253 + 2.17486 1.49982 -0.209326 0.956756 -0.283565 -0.064881 + 2.14119 1.40637 -0.285263 0.974198 -0.217438 -0.0604918 + 2.12091 1.32145 -0.369194 0.967122 -0.253942 0.0137075 + 2.09766 1.23015 -0.449251 0.979001 -0.202001 0.0274191 + 2.17995 1.62481 -0.232215 0.924273 -0.00134944 -0.381731 + 2.2027 1.58923 -0.146599 0.946364 -0.21384 -0.242214 + 2.23459 1.63726 -0.042976 0.871473 -0.480251 0.0994638 + 2.18673 1.53689 -0.099744 0.89042 -0.438547 0.121769 + 2.15307 1.44336 -0.175734 0.923469 -0.377588 0.0680578 + 2.13064 1.67626 -0.328739 0.908047 0.137683 -0.395594 + 2.17853 1.69854 -0.236123 0.852335 0.0211165 -0.52257 + 2.20713 1.69783 -0.193899 0.838437 -0.0222997 -0.544542 + 2.25308 1.68695 -0.118641 0.913854 -0.256464 -0.314797 + 2.28498 1.73488 -0.015069 0.863761 -0.501686 -0.0472033 + 2.08649 1.75651 -0.414333 0.941138 0.149615 -0.303108 + 2.1181 1.74126 -0.341513 0.899235 0.173892 -0.401419 + 2.166 1.76363 -0.248856 0.814259 0.2293 -0.533295 + 2.25276 1.80374 -0.126729 0.74387 0.255286 -0.617646 + 2.28136 1.80294 -0.084555 0.80767 -0.122768 -0.576712 + 2.1182 1.78343 -0.313159 0.84332 0.437863 -0.311589 + 2.14095 1.79924 -0.241539 0.524803 0.72091 -0.452627 + 2.17356 1.80731 -0.204712 0.475833 0.696268 -0.537395 + 2.17591 1.86453 -0.096423 -0.0647697 0.957956 -0.27951 + 2.20852 1.87268 -0.059546 0.0192487 0.925546 -0.378146 + 2.26032 1.84742 -0.082585 0.339512 0.733387 -0.588961 + 2.30147 1.86921 -0.036331 0.147606 0.602991 -0.783973 + 2.31679 1.83824 -0.046093 0.406966 0.180917 -0.895348 + 2.15513 1.8594 -0.07235 -0.325661 0.872809 -0.363523 + 2.24968 1.89447 -0.013292 0.0940125 0.61456 -0.783248 + 2.33587 1.87955 -0.031042 0.497156 0.502094 -0.707628 + 2.35118 1.84867 -0.040755 0.740308 0.0524998 -0.670215 + 2.04625 1.81044 -0.084535 -0.29816 0.796579 -0.525892 + 2.14399 1.89124 -0.011488 -0.426955 0.672222 -0.604836 + 2.15986 1.95106 0.0341 -0.269385 0.585088 -0.764921 + 2.19351 1.9624 0.028866 -0.19832 0.533223 -0.822401 + 2.23918 1.92694 0.002671 0.000354123 0.505196 -0.863005 + 1.98549 1.76989 -0.0955 -0.587841 0.68839 -0.424925 + 2.06493 1.93633 0.036612 -0.195793 0.646177 -0.737644 + 2.08081 1.99615 0.0822 -0.248424 0.504436 -0.82694 + 2.10964 2.04865 0.097671 -0.238838 0.542146 -0.805627 + 2.14329 2.05998 0.092438 -0.250881 0.672396 -0.696378 + 1.96656 1.69425 -0.164895 -0.762686 0.585145 -0.275527 + 1.90108 1.7297 -0.05469 -0.416517 0.642807 -0.642894 + 2.00417 1.89569 0.025602 -0.345405 0.624199 -0.700765 + 1.9399 1.94676 0.091551 -0.284117 0.614465 -0.73601 + 2.03839 2.02387 0.109794 -0.271635 0.449645 -0.850902 + 1.95085 1.65504 -0.247183 -0.878572 0.446154 -0.170463 + 1.88215 1.65406 -0.124082 -0.780122 0.366224 -0.507238 + 1.85621 1.7471 -0.020024 -0.479762 0.468106 -0.742095 + 1.95931 1.91309 0.060267 -0.320211 0.539667 -0.778604 + 1.97722 1.697 -0.383658 -0.947737 0.305239 0.0928613 + 1.94178 1.60443 -0.321116 -0.898011 0.439216 -0.0257884 + 1.90366 1.58585 -0.184941 -0.92423 0.210981 -0.318253 + 1.92188 1.68619 -0.662742 -0.868341 0.413427 0.273975 + 1.94453 1.65515 -0.450362 -0.889792 0.427568 0.15955 + 1.90903 1.55894 -0.395126 -0.91421 0.39655 0.0834777 + 1.89458 1.53524 -0.258873 -0.954281 0.295487 -0.045118 + 1.88155 1.734 -0.804341 -0.794698 0.347802 0.497482 + 1.87312 1.63301 -0.700431 -0.829292 0.472889 0.297742 + 1.91178 1.60975 -0.524332 -0.903729 0.362156 0.228289 + 1.88306 1.51248 -0.474651 -0.891369 0.404275 0.204997 + 1.88468 1.48434 -0.340922 -0.971865 0.229913 0.0511796 + 1.92426 1.76755 -0.761852 -0.854154 0.29644 0.427252 + 1.81558 1.806 -0.914846 -0.740293 0.142317 0.657048 + 1.8328 1.68082 -0.84203 -0.808046 0.323488 0.492359 + 1.83001 1.59114 -0.762101 -0.826089 0.462812 0.321531 + 1.86867 1.56779 -0.586052 -0.844081 0.45369 0.285819 + 1.85829 1.83954 -0.872349 -0.723624 0.176787 0.667169 + 1.82242 1.95205 -0.922019 -0.597101 0.00831807 0.802123 + 1.78843 2.05003 -0.946326 -0.823241 -0.0835126 0.561516 + 1.77205 1.97564 -0.98287 -0.795458 0.0273482 0.605391 + 1.79158 1.75343 -0.929793 -0.779573 0.181061 0.599569 + 1.89937 1.94763 -0.852761 -0.777405 -0.0751455 0.624496 + 1.78249 2.30397 -0.901962 -0.855789 -0.0775616 0.511478 + 1.76337 2.3391 -0.950211 -0.922985 -0.04299 0.382427 + 1.74699 2.26462 -0.986805 -0.885803 -0.0371201 0.462575 + 1.77868 2.43366 -0.894787 -0.862155 -0.034492 0.505469 + 1.75957 2.4688 -0.943045 -0.945401 0.024567 0.324983 + 1.73501 2.3795 -1.01098 -0.96367 0.0425334 0.263687 + 1.72145 2.09212 -1.04902 -0.872722 -0.00981404 0.488119 + 1.74805 1.92307 -0.997825 -0.782443 0.0616857 0.61966 + 1.79348 2.48173 -0.873041 -0.788227 0.0169487 0.615151 + 1.77315 2.56887 -0.917576 -0.924316 0.0714179 0.374887 + 1.76627 2.60023 -0.951096 -0.966713 0.117521 0.227277 + 1.75268 2.50015 -0.976557 -0.977098 0.084948 0.195096 + 1.78795 2.61693 -0.89583 -0.881208 0.0900346 0.464075 + 1.78612 2.67697 -0.915407 -0.917066 0.240604 0.317962 + -0.978323 1.56018 -2.29297 -0.735672 0.0373439 0.676308 + -0.957668 1.56216 -2.26916 -0.0867878 0.996198 -0.00755631 + -0.921928 1.56547 -2.2434 -0.595457 -0.177077 0.783629 + -0.995792 1.57698 -2.3158 -0.762851 -0.148632 0.629259 + -1.02102 1.49003 -2.36325 -0.778307 -0.263573 0.569883 + -0.986659 1.48947 -2.32574 -0.652615 -0.40069 0.643071 + -0.966005 1.49145 -2.30192 -0.660713 -0.427226 0.6172 + -0.957668 1.56216 -2.26916 -0.662956 -0.188835 0.724452 + -0.924466 1.62071 -2.22722 -0.605303 -0.230266 0.761962 + -0.987141 1.64227 -2.27943 -0.709784 -0.236276 0.663611 + -1.05303 1.60998 -2.37494 -0.902174 -0.190409 0.387074 + -1.03849 1.50683 -2.38608 -0.952761 -0.158236 0.259244 + -1.02274 1.45627 -2.3887 -0.703906 -0.528012 0.475099 + -0.849891 1.58028 -2.18976 -0.503663 -0.297231 0.811158 + -0.928917 1.65604 -2.22124 -0.63435 -0.211001 0.743692 + -0.991591 1.6776 -2.27344 -0.718364 -0.167692 0.675153 + -1.04438 1.67527 -2.33857 -0.839388 -0.127089 0.528465 + -0.847353 1.52504 -2.20593 -0.332792 -0.401038 0.853474 + -0.803225 1.55777 -2.17385 0.0172905 -0.462384 0.886511 + -0.84721 1.6801 -2.14508 -0.474003 -0.234857 0.848624 + -0.843826 1.74823 -2.12572 -0.536354 -0.115995 0.835984 + -0.925533 1.72417 -2.20189 -0.656415 -0.142547 0.74081 + -0.902662 1.50126 -2.24224 -0.434564 -0.472666 0.766642 + -0.858232 1.50344 -2.22114 -0.267051 -0.57633 0.772352 + -0.820847 1.48452 -2.22826 0.0749807 -0.772945 0.630027 + -0.809967 1.50612 -2.21306 0.117651 -0.606083 0.786652 + -0.938402 1.49795 -2.268 -0.586322 -0.401596 0.703525 + -0.929985 1.47636 -2.28303 -0.154777 -0.895837 0.416557 + -0.916757 1.47828 -2.28659 -0.0562905 -0.980846 0.186472 + -0.895943 1.47159 -2.27488 -0.362217 -0.866165 0.344319 + -0.851514 1.47378 -2.25377 -0.152115 -0.848139 0.507466 + -0.957587 1.46986 -2.31696 -0.242345 -0.862889 0.443499 + -0.923997 1.47581 -2.32931 0.213766 -0.956467 0.198684 + -0.91077 1.47773 -2.33286 0.146659 -0.98545 0.0858982 + -0.904677 1.47752 -2.33118 -0.127075 -0.988903 -0.0769603 + -0.883863 1.47083 -2.31947 -0.463197 -0.878129 -0.11974 + -0.965733 1.4575 -2.3428 -0.0335626 -0.810173 0.585229 + -0.932143 1.46345 -2.35515 0.405092 -0.850522 0.33543 + -0.892145 1.48023 -2.36953 0.239076 -0.968836 0.0648013 + -0.886052 1.48002 -2.36785 -0.267837 -0.943374 -0.195724 + -0.988383 1.4557 -2.35119 -0.419168 -0.648732 0.635173 + -0.962566 1.42692 -2.38639 0.211574 -0.901396 0.377786 + -0.945631 1.42706 -2.41825 0.440494 -0.889389 0.122277 + -0.915207 1.4636 -2.38701 0.523848 -0.807688 0.270598 + -0.985216 1.42513 -2.39478 -0.259437 -0.888376 0.378788 + -0.9951 1.42087 -2.41695 -0.331484 -0.919492 0.211313 + -0.978751 1.41416 -2.43431 -0.00302993 -0.999401 0.0344635 + -0.934111 1.43808 -2.46427 0.461561 -0.883787 -0.076694 + -0.88349 1.46958 -2.43114 0.521108 -0.845238 0.118399 + -1.03263 1.45201 -2.41087 -0.884312 -0.430984 0.17957 + -1.02792 1.43867 -2.43989 -0.804007 -0.571435 -0.164423 + -1.01157 1.43196 -2.45725 -0.557874 -0.766235 -0.318841 + -0.967231 1.42517 -2.48034 0.0462574 -0.893403 -0.446869 + -0.908384 1.45247 -2.48527 0.477693 -0.810585 -0.338766 + -1.03378 1.49348 -2.41509 -0.991537 -0.129274 0.011892 + -1.04434 1.51289 -2.45419 -0.974827 -0.205479 -0.0865535 + -1.02199 1.45065 -2.47566 -0.771623 -0.543072 -0.331165 + -0.977657 1.44386 -2.49875 -0.2131 -0.728745 -0.650784 + -0.918406 1.46792 -2.50923 0.456538 -0.66701 -0.588788 + -1.06358 1.62938 -2.41404 -0.995578 -0.0855496 -0.0388107 + -1.05483 1.64907 -2.44998 -0.93666 0.0643339 -0.344282 + -1.04279 1.55116 -2.48648 -0.930687 -0.0742056 -0.35821 + -1.02045 1.48892 -2.50796 -0.762795 -0.378169 -0.52453 + -1.06608 1.70247 -2.37884 -0.987975 0.0566257 0.143871 + -1.05732 1.72216 -2.41478 -0.929807 0.242186 -0.277137 + -1.0388 1.73244 -2.44884 -0.752109 0.349376 -0.55881 + -1.03766 1.66368 -2.47911 -0.738379 0.212933 -0.639887 + -1.02563 1.56577 -2.51562 -0.787121 0.064665 -0.6134 + -1.05047 1.74166 -2.34976 -0.934652 0.113055 0.337112 + -1.05161 1.76093 -2.37974 -0.934433 0.345113 -0.0879335 + -1.0331 1.77121 -2.41381 -0.791675 0.467505 -0.393306 + -1.02877 1.71446 -2.30948 -0.818322 -0.0733619 0.570059 + -1.01603 1.77596 -2.28519 -0.818803 -0.0235674 0.573591 + -1.03164 1.79677 -2.31524 -0.929254 0.133601 0.344439 + -1.03278 1.81604 -2.34523 -0.936369 0.35019 -0.0241015 + -0.978848 1.7391 -2.24915 -0.709422 -0.115477 0.695259 + -0.965064 1.835 -2.2212 -0.730807 -0.0905793 0.676548 + -0.989996 1.85156 -2.25103 -0.828143 0.0130016 0.560365 + -1.0056 1.87237 -2.28108 -0.929679 0.204244 0.306564 + -0.911749 1.82007 -2.17394 -0.640784 -0.149391 0.753046 + -0.931095 1.93246 -2.16816 -0.732297 -0.11865 0.670569 + -0.956027 1.94903 -2.19799 -0.846892 0.010513 0.531661 + -0.965719 1.96289 -2.21997 -0.932072 0.218976 0.288601 + -1.00478 1.88291 -2.30544 -0.908991 0.414745 -0.0414974 + -0.842307 1.78971 -2.12691 -0.559307 -0.0968779 0.82328 + -0.822741 1.87667 -2.09111 -0.526007 -0.246633 0.813934 + -0.892183 1.90702 -2.13813 -0.64141 -0.186451 0.744197 + -0.887574 2.04071 -2.0992 -0.731235 -0.129121 0.669793 + -0.794844 1.75036 -2.09994 -0.0264171 -0.202189 0.97899 + -0.793324 1.79183 -2.10113 -0.0250974 -0.145366 0.98906 + -0.785415 1.86019 -2.07757 -0.00816341 -0.370813 0.928672 + -0.803301 1.97889 -2.0436 -0.537974 -0.279342 0.795331 + -0.848662 2.01527 -2.06917 -0.64428 -0.211466 0.734973 + -0.78226 1.67854 -2.13192 0.250986 -0.265461 0.93088 + -0.770512 1.76357 -2.10983 0.579467 -0.0807575 0.810985 + -0.772874 1.7934 -2.11132 0.600408 -0.105542 0.792698 + -0.764965 1.86176 -2.08775 0.593107 -0.374126 0.71292 + -0.800543 1.65759 -2.12917 0.00205592 -0.182778 0.983152 + -0.760813 1.57338 -2.19175 0.562037 -0.405248 0.721033 + -0.757929 1.69175 -2.14181 0.651087 -0.240095 0.720028 + -0.733084 1.70668 -2.17051 0.817202 -0.157824 0.554322 + -0.742735 1.77732 -2.13783 0.766605 -0.038325 0.640974 + -0.779096 1.55243 -2.18899 0.50512 -0.496959 0.70561 + -0.785838 1.50078 -2.2282 0.411992 -0.688119 0.59729 + -0.763128 1.50201 -2.24492 0.481373 -0.692752 0.537005 + -0.729885 1.58097 -2.2126 0.696314 -0.353577 0.624604 + -0.705041 1.5959 -2.2413 0.917405 -0.187347 0.351096 + -0.81444 1.45243 -2.30017 0.178553 -0.918884 0.35181 + -0.79173 1.45366 -2.31689 0.393858 -0.891762 0.222792 + -0.732201 1.5096 -2.26577 0.71652 -0.593496 0.366554 + -0.727552 1.50758 -2.29468 0.80966 -0.579632 0.0920732 + -0.697095 1.60853 -2.27505 0.970974 -0.149193 0.186951 + -0.845107 1.44169 -2.32568 -0.230677 -0.965962 0.11707 + -0.787081 1.45164 -2.3458 0.470087 -0.880941 0.0544246 + -0.719606 1.52022 -2.32843 0.817049 -0.561168 0.132371 + -0.869282 1.46545 -2.36408 -0.595181 -0.753412 -0.279517 + -0.830525 1.43631 -2.3703 -0.164754 -0.969015 -0.184027 + -0.77798 1.45808 -2.36581 0.548944 -0.83444 0.0486847 + -0.838544 1.47036 -2.40602 -0.475844 -0.68906 -0.546598 + -0.821425 1.44275 -2.39031 -0.140088 -0.908503 -0.393697 + -0.772387 1.45834 -2.39081 0.45948 -0.888067 0.0146243 + -0.714012 1.52048 -2.35343 0.769923 -0.622796 0.139081 + -0.696508 1.54728 -2.34911 0.957258 -0.288905 0.0138323 + -0.855315 1.48492 -2.40979 -0.309046 -0.880299 -0.359949 + -0.837786 1.48875 -2.43245 -0.0879896 -0.845276 -0.527035 + -0.819265 1.478 -2.42592 -0.202526 -0.646646 -0.735413 + -0.802146 1.45039 -2.41021 0.00245151 -0.858773 -0.512351 + -0.739204 1.4759 -2.4068 0.691214 -0.710953 -0.129494 + -0.860427 1.48621 -2.41366 0.200966 -0.979055 -0.032627 + -0.842899 1.49004 -2.43632 0.260622 -0.942107 -0.210977 + -0.839337 1.49281 -2.43923 0.298526 -0.896703 -0.326812 + -0.833691 1.49043 -2.4341 -0.00796357 -0.763876 -0.645313 + -0.815169 1.47968 -2.42758 -0.105872 -0.607902 -0.786922 + -0.857762 1.48397 -2.45214 0.511881 -0.858352 -0.0347629 + -0.8542 1.48674 -2.45505 0.515106 -0.849605 -0.113297 + -0.829639 1.49942 -2.45521 0.302403 -0.935282 -0.183849 + -0.821802 1.49881 -2.44856 0.105673 -0.922353 -0.371616 + -0.816156 1.49644 -2.44343 -0.0263318 -0.810131 -0.585658 + -0.852274 1.49029 -2.4762 0.49115 -0.793029 -0.360384 + -0.827713 1.50296 -2.47636 0.420363 -0.700806 -0.576338 + -0.799746 1.50878 -2.47087 0.361619 -0.634493 -0.683118 + -0.791909 1.50818 -2.46422 0.280423 -0.689507 -0.667789 + -0.862296 1.50574 -2.50017 0.449318 -0.395313 -0.80115 + -0.823302 1.53265 -2.48298 0.410897 -0.153139 -0.898728 + -0.795335 1.53847 -2.47749 0.307128 -0.0294234 -0.951213 + -0.775175 1.53447 -2.46828 0.392769 -0.102806 -0.913873 + -0.783568 1.50665 -2.4605 0.132566 -0.583799 -0.801002 + -0.873375 1.55246 -2.51634 0.601034 -0.153906 -0.784265 + -0.834381 1.57937 -2.49915 0.524368 -0.0215471 -0.851219 + -0.787825 1.60187 -2.46326 0.475107 0.090796 -0.875231 + -0.767666 1.59787 -2.45405 0.634915 0.211303 -0.743124 + -0.766835 1.53293 -2.46456 0.568836 -0.0943859 -0.817017 + -0.898718 1.51097 -2.53465 0.750577 -0.39981 -0.526104 + -0.906936 1.54814 -2.54853 0.666973 -0.145621 -0.730713 + -0.881593 1.58963 -2.53022 0.624693 0.0651682 -0.778146 + -0.856116 1.63222 -2.50569 0.509991 0.178057 -0.841549 + -0.80956 1.65472 -2.4698 0.570199 0.200911 -0.79656 + -0.94644 1.46103 -2.5276 0.198247 -0.852294 -0.484038 + -0.926752 1.50408 -2.55302 0.524936 -0.451182 -0.721718 + -0.938077 1.51208 -2.56524 0.223468 -0.262323 -0.938749 + -0.91826 1.55614 -2.56075 0.399215 0.0428475 -0.915856 + -0.969331 1.45617 -2.51773 -0.152062 -0.801907 -0.577774 + -0.965799 1.50478 -2.56146 -0.191097 -0.30805 -0.93198 + -1.01213 1.50124 -2.52694 -0.737201 -0.30711 -0.601845 + -0.988691 1.49992 -2.55159 -0.499773 -0.35886 -0.788319 + -0.971973 1.56406 -2.55641 -0.321586 0.181791 -0.929265 + -0.944251 1.57137 -2.56018 -0.0446945 0.23323 -0.971394 + -0.911747 1.64053 -2.53192 0.30084 0.302379 -0.904468 + -1.00219 1.56445 -2.54027 -0.600184 0.143902 -0.786811 + -0.972498 1.66507 -2.51892 -0.339214 0.34905 -0.873555 + -0.937738 1.65575 -2.53135 -0.0166662 0.352514 -0.935658 + -0.886271 1.68311 -2.50739 0.35738 0.274521 -0.892702 + -1.00271 1.66546 -2.50279 -0.500502 0.310935 -0.807971 + -0.964559 1.72626 -2.49555 -0.276415 0.374294 -0.885155 + -0.929799 1.71694 -2.50798 0.0111196 0.449004 -0.893461 + -0.862776 1.70508 -2.49231 0.432013 0.303466 -0.849278 + -1.00386 1.73423 -2.47251 -0.489415 0.318101 -0.811963 + -0.962286 1.76365 -2.48349 -0.200547 0.42083 -0.884694 + -0.906304 1.73891 -2.4929 0.207584 0.432738 -0.877295 + -0.827699 1.73417 -2.4562 0.525142 0.363281 -0.76958 + -1.00159 1.77161 -2.46045 -0.540087 0.462084 -0.703409 + -0.987716 1.82698 -2.4258 -0.574031 0.540817 -0.614822 + -0.95015 1.82306 -2.44983 -0.17298 0.542358 -0.822147 + -0.894168 1.79832 -2.45924 0.261396 0.454127 -0.851728 + -0.833309 1.79061 -2.43007 0.507059 0.401788 -0.762534 + -1.01923 1.82657 -2.37916 -0.805096 0.481279 -0.346685 + -0.99123 1.89345 -2.33937 -0.814683 0.50723 -0.281085 + -0.968212 1.90539 -2.37411 -0.614985 0.575999 -0.538534 + -0.930646 1.90147 -2.39814 -0.214773 0.59214 -0.776687 + -0.954505 1.98373 -2.26926 -0.808143 0.543176 -0.227737 + -0.931487 1.99567 -2.304 -0.615686 0.644897 -0.452812 + -0.904952 1.99817 -2.32179 -0.254399 0.684437 -0.683247 + -0.890894 1.89819 -2.40346 0.176766 0.528986 -0.830016 + -0.830036 1.89047 -2.37428 0.530299 0.447076 -0.720351 + -0.964897 1.97343 -2.24433 -0.902333 0.430659 -0.0181286 + -0.901535 2.09321 -2.17986 -0.786094 0.58543 -0.198312 + -0.885057 2.10202 -2.20443 -0.598458 0.68725 -0.411746 + -0.858522 2.10453 -2.22223 -0.212597 0.734758 -0.644153 + -0.8652 1.99489 -2.32711 0.225469 0.599496 -0.767964 + -0.91318 2.07301 -2.13887 -0.921443 0.240205 0.30536 + -0.911928 2.08291 -2.15493 -0.888448 0.45875 0.0144434 + -0.846882 2.19034 -2.0862 -0.757821 0.633696 -0.155358 + -0.830403 2.19916 -2.11077 -0.558099 0.738657 -0.378035 + -0.903487 2.05914 -2.11689 -0.839413 0.0153026 0.543278 + -0.855559 2.1726 -2.05312 -0.901624 0.272233 0.336101 + -0.854308 2.1825 -2.06918 -0.861094 0.50607 0.0490848 + -0.784599 2.27812 -1.99735 -0.723949 0.679316 -0.120111 + -0.833506 2.14229 -2.0213 -0.7259 -0.122689 0.676769 + -0.849419 2.16073 -2.03899 -0.828673 0.0347784 0.558651 + -0.79287 2.26359 -1.96948 -0.87785 0.31294 0.362557 + -0.792025 2.27028 -1.98033 -0.831938 0.548371 0.084665 + -0.807843 2.11933 -2.00318 -0.645171 -0.210074 0.73459 + -0.775984 2.23927 -1.94341 -0.714757 -0.0973061 0.692571 + -0.78673 2.25172 -1.95535 -0.811373 0.0620697 0.581224 + -0.753638 2.31157 -1.92174 -0.735604 0.484882 0.47305 + -0.752792 2.31826 -1.93259 -0.680276 0.703568 0.205468 + -0.762482 2.08295 -1.97761 -0.537501 -0.292838 0.790783 + -0.719688 2.19174 -1.90802 -0.530579 -0.273299 0.802368 + -0.75032 2.21631 -1.92529 -0.633662 -0.191531 0.749525 + -0.721864 2.27609 -1.88848 -0.530824 0.00852193 0.847439 + -0.738832 2.29127 -1.90046 -0.603796 0.0915941 0.791859 + -0.765975 1.96241 -2.03005 -0.0227249 -0.454939 0.890233 + -0.737599 2.0674 -1.97035 -0.0462216 -0.50535 0.861676 + -0.694806 2.17619 -1.90076 -0.0208488 -0.497499 0.867214 + -0.691231 2.25153 -1.8712 -0.399405 -0.0527992 0.915253 + -0.751927 1.96167 -2.03831 0.57048 -0.469926 0.673589 + -0.723551 2.06666 -1.9786 0.54645 -0.554354 0.62776 + -0.685319 2.17569 -1.90633 0.545468 -0.553316 0.629529 + -0.665293 2.24074 -1.87198 0.616946 -0.229921 0.752671 + -0.67478 2.24124 -1.86641 0.0906377 -0.201489 0.975288 + -0.743434 1.86794 -2.11017 0.771105 -0.326619 0.546551 + -0.730396 1.96785 -2.06072 0.757156 -0.414665 0.504745 + -0.708674 2.0705 -1.99447 0.730836 -0.504805 0.459402 + -0.670442 2.17954 -1.9222 0.731534 -0.50667 0.456228 + -0.745097 1.80715 -2.13932 0.782187 -0.101768 0.614676 + -0.713282 1.88189 -2.15177 0.919165 -0.215541 0.329664 + -0.708922 1.97778 -2.09036 0.904023 -0.306665 0.297823 + -0.687199 2.08044 -2.0241 0.885236 -0.395453 0.244895 + -0.65594 2.18625 -1.94222 0.8797 -0.405933 0.247681 + -0.714945 1.8211 -2.18093 0.908057 0.0103445 0.418719 + -0.705524 1.89749 -2.18565 0.999195 0.00369994 -0.0399548 + -0.701163 1.99338 -2.12423 0.99554 -0.0675015 -0.0658986 + -0.681391 2.09276 -2.04693 0.981635 -0.155672 -0.110267 + -0.706562 1.80358 -2.18817 0.901448 0.0921141 0.422974 + -0.696663 1.81764 -2.23517 0.96056 0.278069 0.00165307 + -0.705046 1.83516 -2.22793 0.973749 0.22752 -0.00694964 + -0.718511 1.91654 -2.22502 0.886919 0.240021 -0.39467 + -0.708769 2.01287 -2.1491 0.898348 0.18185 -0.399876 + -0.696911 1.73294 -2.22085 0.936618 -0.0934312 0.337665 + -0.690782 1.74648 -2.26215 0.996843 0.0634328 -0.0477425 + -0.710402 1.81461 -2.29184 0.862524 0.32148 -0.390772 + -0.718033 1.85421 -2.2673 0.862475 0.331309 -0.382586 + -0.690965 1.62207 -2.31635 0.998923 -0.0164482 -0.0433782 + -0.704521 1.74345 -2.31883 0.910927 0.204912 -0.358082 + -0.748398 1.76289 -2.37486 0.682017 0.34605 -0.644284 + -0.754009 1.81933 -2.34872 0.681665 0.404008 -0.610008 + -0.761639 1.85892 -2.32418 0.695985 0.433864 -0.572159 + -0.696827 1.64032 -2.34079 0.954217 0.102061 -0.281164 + -0.711705 1.63495 -2.37702 0.851026 0.138091 -0.506642 + -0.719399 1.73808 -2.35506 0.802015 0.338053 -0.492434 + -0.70237 1.56553 -2.37354 0.921939 -0.00122586 -0.387333 + -0.719395 1.57264 -2.40035 0.810744 0.0651058 -0.581769 + -0.745485 1.659 -2.4139 0.723251 0.197655 -0.661695 + -0.774483 1.6838 -2.4337 0.635835 0.256915 -0.72781 + -0.721699 1.50269 -2.40248 0.885695 -0.348526 -0.306716 + -0.738725 1.5098 -2.42928 0.774464 -0.152584 -0.613941 + -0.753175 1.59668 -2.43723 0.744829 0.155501 -0.648883 + -0.756482 1.47811 -2.43653 0.416224 -0.613345 -0.671242 + -0.752344 1.53175 -2.44773 0.778281 -0.026552 -0.627355 + -0.768963 1.46795 -2.4262 0.166699 -0.821156 -0.545816 + -0.802688 1.48985 -2.43791 -0.105407 -0.689741 -0.716343 + -0.770101 1.50006 -2.45498 0.286894 -0.491131 -0.822485 + -0.820298 1.97496 -2.31063 0.563242 0.456573 -0.688694 + -0.751901 1.94341 -2.26053 0.733487 0.358551 -0.577441 + -0.78673 2.07714 -2.21228 0.592425 0.450911 -0.667617 + -0.742159 2.03974 -2.18461 0.74734 0.340538 -0.57054 + -0.688997 2.11225 -2.0718 0.893224 0.123075 -0.432439 + -0.831632 2.09707 -2.22876 0.256402 0.629752 -0.733261 + -0.75542 2.17348 -2.12149 0.60167 0.431034 -0.67246 + -0.710849 2.13608 -2.09381 0.750729 0.296103 -0.590532 + -0.655268 2.21173 -1.98184 0.897818 0.111921 -0.425907 + -0.650131 2.19857 -1.96504 0.980032 -0.161755 -0.11564 + -0.812239 2.19972 -2.1238 -0.187112 0.768747 -0.611569 + -0.785349 2.19226 -2.13034 0.282734 0.632751 -0.720894 + -0.707219 2.26081 -2.02254 0.612771 0.434798 -0.659896 + -0.67712 2.23555 -2.00384 0.750541 0.302056 -0.587751 + -0.64225 2.2713 -1.93437 0.917244 0.28733 -0.275871 + -0.755307 2.28464 -2.02698 -0.157226 0.801736 -0.576628 + -0.737148 2.2796 -2.03139 0.292386 0.657328 -0.694573 + -0.686797 2.31231 -1.96761 0.634707 0.572917 -0.518568 + -0.656699 2.28706 -1.94892 0.783717 0.435912 -0.442458 + -0.773471 2.28407 -2.01394 -0.529881 0.778732 -0.335862 + -0.724745 2.32977 -1.96905 -0.072796 0.913511 -0.400248 + -0.706586 2.32474 -1.97346 0.349314 0.770202 -0.533637 + -0.701295 2.32979 -1.95471 0.407993 0.909048 -0.0846973 + -0.681506 2.31737 -1.94886 0.622813 0.776928 -0.0921282 + -0.747882 2.32345 -1.94384 -0.580374 0.81407 0.0213808 + -0.736754 2.3294 -1.96044 -0.394038 0.90037 -0.184573 + -0.712922 2.33301 -1.95189 0.152201 0.98824 0.0147047 + -0.702805 2.32088 -1.92498 0.27044 0.870804 0.410564 + -0.691178 2.31766 -1.92781 0.413452 0.840047 0.351253 + -0.732056 2.32883 -1.93265 -0.165332 0.941457 0.293808 + -0.724931 2.33264 -1.94327 -0.0686573 0.982872 0.171023 + -0.736966 2.32364 -1.92139 -0.244051 0.874902 0.418313 + -0.70993 2.31707 -1.91436 0.201495 0.844749 0.495781 + -0.737508 2.31936 -1.91445 -0.294043 0.749937 0.592564 + -0.710472 2.31279 -1.90741 0.164396 0.784888 0.597431 + -0.668617 2.29306 -1.90509 0.481994 0.723886 0.493629 + -0.671906 2.30149 -1.91584 0.479355 0.787921 0.386522 + -0.662234 2.30119 -1.93689 0.700092 0.712291 -0.0501296 + -0.749578 2.30373 -1.9124 -0.689121 0.259375 0.676637 + -0.733448 2.31151 -1.9051 -0.284337 0.59437 0.752248 + -0.726568 2.30354 -1.89746 -0.241862 0.496269 0.833798 + -0.703591 2.30482 -1.89977 0.188003 0.735029 0.65145 + -0.709599 2.28836 -1.88548 -0.18386 0.433298 0.882297 + -0.683977 2.28909 -1.88871 0.261307 0.695252 0.669585 + -0.689985 2.27263 -1.87442 -0.112013 0.404329 0.907729 + -0.673534 2.26235 -1.86962 0.222924 0.348046 0.910587 + -0.677903 2.28876 -1.89228 0.417893 0.701664 0.57709 + -0.66746 2.26203 -1.87319 0.563196 0.358057 0.744718 + -0.657623 2.26457 -1.88368 0.65981 0.377538 0.649705 + -0.648337 2.26887 -1.89649 0.740199 0.40184 0.5391 + -0.644497 2.27701 -1.91159 0.813221 0.500292 0.297287 + -0.647785 2.28544 -1.92234 0.783983 0.614324 0.0893147 + -0.655456 2.24329 -1.88247 0.77951 -0.194699 0.595363 + -0.640954 2.24999 -1.90248 0.914357 -0.116579 0.387764 + -0.637114 2.25814 -1.91758 0.996337 0.0638149 0.0569169 + 0.836968 1.58108 -2.53408 -0.529244 -0.278961 -0.8013 + 0.849002 1.58689 -2.54405 -0.231101 -0.923839 -0.305145 + 0.870453 1.57278 -2.5533 -0.161916 -0.811215 0.561883 + 0.858967 1.55925 -2.59536 -0.480914 -0.834799 0.268014 + 0.892878 1.52828 -2.6236 -0.3311 -0.925079 0.186016 + 0.907121 1.53929 -2.58384 -0.0693211 -0.836373 0.54376 + 0.917493 1.56796 -2.55886 0.40571 -0.477343 0.77945 + 0.880826 1.60145 -2.52833 0.306076 -0.477655 0.823507 + 0.853085 1.62012 -2.50619 0.44327 -0.399519 0.802432 + 0.82717 1.59283 -2.50967 0.356478 -0.630121 0.689834 + 0.836968 1.58108 -2.53408 0.300681 -0.889637 0.34371 + 0.837516 1.57337 -2.58611 -0.143927 -0.947201 0.286522 + 0.846625 1.56037 -2.63923 -0.487877 -0.87038 0.0664382 + 0.880536 1.52939 -2.66746 -0.376819 -0.916215 -0.136225 + 0.920106 1.53063 -2.67928 0.25347 -0.92227 -0.291841 + 0.920658 1.52071 -2.64289 0.146261 -0.984981 -0.0917605 + 0.831839 1.57414 -2.58139 0.293109 -0.940601 0.171338 + 0.825704 1.57004 -2.59471 0.15939 -0.987205 0.00451157 + 0.831381 1.56927 -2.59942 -0.046646 -0.987739 0.148982 + 0.819805 1.56833 -2.57142 0.461567 -0.886976 0.0151249 + 0.800317 1.56093 -2.58798 0.33693 -0.920816 -0.196407 + 0.824463 1.57049 -2.59732 0.065448 -0.989332 -0.130146 + 0.819686 1.57149 -2.61797 0.0288438 -0.996895 -0.0732735 + 0.826604 1.57027 -2.62008 -0.291709 -0.956182 0.0249299 + 0.78938 1.55013 -2.54623 0.299884 -0.920252 0.251408 + 0.769892 1.54273 -2.56278 0.119963 -0.989273 0.083352 + 0.73635 1.54179 -2.59341 -0.00512646 -0.999904 -0.012889 + 0.799076 1.56137 -2.59059 0.274611 -0.92913 -0.247601 + 0.779582 1.56188 -2.52182 0.125974 -0.800099 0.586491 + 0.749654 1.56542 -2.51827 -0.173842 -0.78436 0.595448 + 0.725127 1.55751 -2.54698 -0.31064 -0.85028 0.424883 + 0.691584 1.55657 -2.57761 -0.497564 -0.834238 0.237648 + 0.721856 1.54442 -2.62195 -0.088708 -0.988174 -0.125074 + 0.780614 1.61533 -2.47378 0.161607 -0.480563 0.861941 + 0.750687 1.61887 -2.47023 -0.113863 -0.503501 0.856459 + 0.707459 1.60697 -2.49548 -0.482508 -0.520281 0.704623 + 0.682931 1.59906 -2.52419 -0.5862 -0.583065 0.562499 + 0.806529 1.64262 -2.4703 0.324654 -0.309088 0.893904 + 0.808238 1.67943 -2.46158 0.405139 -0.269722 0.873563 + 0.753714 1.67357 -2.44263 -0.0881242 -0.288874 0.953303 + 0.710487 1.66167 -2.46787 -0.423221 -0.374537 0.824989 + 0.883239 1.67101 -2.50788 0.520974 -0.222013 0.824194 + 0.884948 1.70783 -2.49917 0.520417 -0.0886289 0.849301 + 0.885501 1.73942 -2.50075 0.57843 -0.174445 0.796861 + 0.825457 1.74618 -2.44792 0.484661 -0.335141 0.80795 + 0.770933 1.74032 -2.42897 0.206856 -0.404116 0.891011 + 0.91098 1.65235 -2.53002 0.593177 -0.208412 0.777628 + 0.932378 1.72366 -2.53138 0.622406 -0.100417 0.776226 + 0.932931 1.75525 -2.53296 0.557635 -0.103001 0.823671 + 0.930384 1.78543 -2.5186 0.663167 -0.368326 0.651572 + 0.890599 1.77759 -2.4862 0.595131 -0.436902 0.674489 + 0.937477 1.56351 -2.58027 0.750783 -0.325756 0.574637 + 0.930964 1.6479 -2.55143 0.743431 -0.188964 0.641563 + 0.93984 1.68266 -2.55103 0.721776 -0.21694 0.657249 + 0.96552 1.74357 -2.55903 0.760425 -0.111008 0.639868 + 0.952752 1.77705 -2.54377 0.731841 -0.131457 0.668676 + 0.9349 1.53172 -2.60313 0.49009 -0.786692 0.375403 + 0.960761 1.58365 -2.61395 0.923558 -0.230741 0.306268 + 0.969637 1.61842 -2.61355 0.847841 -0.275641 0.452976 + 0.972983 1.70257 -2.57868 0.819259 -0.171981 0.547026 + 0.958184 1.55185 -2.63682 0.885324 -0.463885 0.0318226 + 0.957632 1.56178 -2.6732 0.80879 -0.587373 -0.0291866 + 0.986209 1.61679 -2.64923 0.910859 -0.341267 0.232106 + 0.989555 1.70095 -2.61435 0.906179 -0.182344 0.381562 + 0.987338 1.76658 -2.58585 0.858615 -0.0559184 0.509562 + 0.96237 1.56839 -2.71456 0.676905 -0.694211 -0.244687 + 0.990947 1.6234 -2.69058 0.952436 -0.304419 -0.0139587 + 1.00914 1.71738 -2.65557 0.97822 -0.14128 0.152072 + 1.00693 1.78301 -2.62707 0.966659 0.0356724 0.253569 + 0.907131 1.55762 -2.73451 0.0904279 -0.865588 -0.492524 + 0.912271 1.57791 -2.76563 0.193799 -0.752384 -0.629572 + 0.967511 1.58868 -2.74568 0.686138 -0.576451 -0.443755 + 0.990624 1.64064 -2.72722 0.944689 -0.219302 -0.243862 + 1.00882 1.73461 -2.6922 0.971831 0.0351207 -0.233048 + 0.867561 1.55638 -2.72269 -0.333967 -0.869329 -0.364325 + 0.886801 1.59359 -2.78687 0.0484448 -0.69519 -0.717192 + 0.96149 1.61897 -2.77657 0.631099 -0.349328 -0.692592 + 0.984603 1.67093 -2.75811 0.85292 -0.0351305 -0.520858 + 0.835961 1.56237 -2.67765 -0.422165 -0.899461 -0.112901 + 0.821584 1.58909 -2.72284 -0.577195 -0.741375 -0.342358 + 0.853184 1.5831 -2.76788 -0.337355 -0.796361 -0.501998 + 0.815939 1.57227 -2.6585 -0.281784 -0.95886 -0.0344407 + 0.80924 1.57376 -2.67852 0.0286495 -0.967249 -0.252208 + 0.806055 1.59391 -2.7076 -0.388355 -0.778758 -0.492663 + 0.812135 1.63108 -2.78261 -0.707527 -0.461325 -0.535336 + 0.828764 1.61901 -2.79522 -0.524726 -0.545668 -0.653383 + 0.808282 1.57371 -2.65728 0.0102338 -0.997671 -0.0674312 + 0.801583 1.5752 -2.67731 0.0205262 -0.985793 -0.166709 + 0.801867 1.57579 -2.67967 0.00979677 -0.909811 -0.414907 + 0.798681 1.59594 -2.70875 0.0660528 -0.814171 -0.576856 + 0.796606 1.6359 -2.76737 -0.555843 -0.550282 -0.62308 + 0.784583 1.564 -2.61912 0.258324 -0.950155 -0.174565 + 0.773179 1.56623 -2.65844 0.224088 -0.959351 -0.171553 + 0.772061 1.57169 -2.68612 0.196159 -0.958583 -0.206494 + 0.772345 1.57227 -2.68849 0.26389 -0.891924 -0.367198 + 0.710069 1.55321 -2.66353 -0.148991 -0.973818 -0.171698 + 0.708951 1.55867 -2.69122 -0.245517 -0.893039 -0.377098 + 0.727387 1.56891 -2.7187 -0.0782791 -0.839603 -0.537531 + 0.734684 1.58857 -2.74297 -0.0566682 -0.63082 -0.773857 + 0.779641 1.59193 -2.71276 0.340283 -0.759882 -0.553884 + 0.671648 1.56884 -2.61368 -0.625943 -0.778312 0.0492529 + 0.659861 1.57763 -2.65526 -0.737212 -0.640644 -0.214694 + 0.667228 1.59578 -2.68959 -0.752914 -0.411699 -0.513443 + 0.685665 1.60601 -2.71707 -0.68077 -0.34087 -0.648352 + 0.706759 1.60945 -2.73933 -0.543492 -0.296008 -0.785491 + 0.627933 1.62419 -2.59563 -0.911088 -0.408095 0.0581156 + 0.628581 1.65253 -2.63233 -0.947183 -0.205286 -0.246379 + 0.635948 1.67068 -2.66666 -0.883542 -0.122301 -0.452101 + 0.658122 1.69592 -2.69818 -0.766696 0.0031688 -0.642002 + 0.679217 1.69936 -2.72044 -0.60579 0.089137 -0.790615 + 0.647869 1.61192 -2.55956 -0.765996 -0.521087 0.376455 + 0.632771 1.68983 -2.52035 -0.78935 -0.323772 0.52163 + 0.607579 1.71319 -2.55455 -0.966156 -0.189301 0.175234 + 0.608227 1.74153 -2.59125 -0.991388 -0.088012 -0.096973 + 0.612124 1.75432 -2.62735 -0.939314 -0.00908203 -0.342937 + 0.667834 1.67697 -2.48499 -0.618388 -0.348957 0.704149 + 0.690167 1.76568 -2.43545 -0.52172 -0.358107 0.774317 + 0.635957 1.81583 -2.45391 -0.735904 -0.295343 0.609276 + 0.610765 1.83919 -2.48811 -0.915532 -0.185415 0.356964 + 0.732821 1.75039 -2.41834 -0.17546 -0.43856 0.881407 + 0.743447 1.80265 -2.39067 -0.177277 -0.554538 0.813056 + 0.697106 1.83315 -2.39531 -0.522479 -0.473941 0.708799 + 0.642895 1.8833 -2.41377 -0.734475 -0.356784 0.57728 + 0.78156 1.79259 -2.4013 0.24011 -0.578732 0.779369 + 0.783061 1.81933 -2.37746 0.237475 -0.558674 0.794663 + 0.744899 1.82951 -2.36703 -0.169312 -0.551006 0.817145 + 0.698558 1.86001 -2.37167 -0.518317 -0.457142 0.722751 + 0.830554 1.78436 -2.43336 0.469313 -0.50653 0.723307 + 0.832056 1.8111 -2.40953 0.481788 -0.512384 0.710875 + 0.78561 1.86204 -2.35542 0.304196 -0.392347 0.86806 + 0.747448 1.87221 -2.34499 -0.0968603 -0.380952 0.919507 + 0.703661 1.89229 -2.35301 -0.443742 -0.315421 0.83881 + 0.891714 1.80518 -2.46391 0.584491 -0.464796 0.665083 + 0.890927 1.85616 -2.43603 0.625132 -0.338618 0.703241 + 0.831269 1.86208 -2.38165 0.535945 -0.351631 0.76754 + 0.786437 1.92585 -2.33228 0.317231 -0.374022 0.871477 + 0.931499 1.81302 -2.49631 0.685991 -0.419362 0.594602 + 0.927125 1.86591 -2.46471 0.676861 -0.311731 0.666846 + 0.884337 1.94192 -2.39379 0.623156 -0.304589 0.720349 + 0.832096 1.92589 -2.35851 0.537725 -0.320904 0.779661 + 0.951119 1.83526 -2.50792 0.815294 -0.309731 0.489247 + 0.946745 1.88814 -2.47632 0.799019 -0.214216 0.561854 + 0.933809 1.95831 -2.43594 0.814003 -0.175048 0.553857 + 0.920535 1.95166 -2.42247 0.698709 -0.268539 0.663093 + 0.871366 2.01493 -2.35083 0.614805 -0.326722 0.717821 + 0.950205 1.80722 -2.5294 0.806295 -0.292485 0.514141 + 0.967303 1.83543 -2.5493 0.906405 -0.180151 0.382067 + 0.968217 1.86347 -2.52782 0.918564 -0.192238 0.345377 + 0.960645 1.90798 -2.49709 0.905291 -0.092692 0.414555 + 0.974569 1.80005 -2.57059 0.84144 -0.0289492 0.539574 + 0.982019 1.86931 -2.57694 0.974105 -0.0520607 0.22002 + 0.982453 1.8984 -2.55738 0.978268 -0.059994 0.198475 + 0.97488 1.94291 -2.52665 0.959882 0.0580655 0.274326 + 0.989285 1.83393 -2.59822 0.949207 0.0791123 0.304544 + 0.984638 1.89665 -2.60977 0.994851 0.0930935 -0.0400536 + 0.985072 1.92573 -2.59022 0.992818 0.117399 -0.0230152 + 0.976227 1.96522 -2.5583 0.968177 0.245205 0.050083 + 0.956177 1.99368 -2.48517 0.961038 0.109783 0.253678 + 1.00836 1.80441 -2.66154 0.964083 0.230153 -0.132563 + 0.99072 1.85533 -2.63269 0.977796 0.209208 -0.0120721 + 0.975678 1.9163 -2.64574 0.938999 0.220034 -0.264322 + 0.975559 1.9466 -2.6284 0.934168 0.263886 -0.240196 + 0.966714 1.98608 -2.59648 0.907218 0.393033 -0.149937 + 0.98876 1.82 -2.69461 0.856976 0.286266 -0.428536 + 0.98176 1.87498 -2.66866 0.911828 0.264892 -0.313692 + 0.960655 1.93025 -2.67183 0.763613 0.325428 -0.557666 + 0.960536 1.96055 -2.6545 0.773513 0.411801 -0.481766 + 0.989218 1.75021 -2.72527 0.836597 0.193717 -0.512424 + 0.967167 1.83358 -2.72033 0.682186 0.333391 -0.650748 + 0.960167 1.88856 -2.69438 0.71344 0.349019 -0.60761 + 0.939981 1.93761 -2.6864 0.449762 0.420299 -0.788076 + 0.939594 1.96849 -2.67014 0.428185 0.548653 -0.718079 + 0.959759 1.68877 -2.78486 0.66902 0.0857639 -0.73828 + 0.964374 1.76805 -2.75202 0.665187 0.286628 -0.689471 + 0.930033 1.84529 -2.73959 0.356475 0.425539 -0.831771 + 0.939493 1.89591 -2.70895 0.426344 0.422212 -0.79998 + 0.894775 1.92671 -2.70593 0.193933 0.417535 -0.887724 + 0.93602 1.63465 -2.79782 0.474063 -0.30298 -0.826721 + 0.92314 1.70255 -2.80862 0.416158 0.195859 -0.887948 + 0.92724 1.77977 -2.77129 0.407635 0.381528 -0.82962 + 0.895508 1.7952 -2.77479 0.0612267 0.434692 -0.898496 + 0.886814 1.83889 -2.75243 -0.0258629 0.491093 -0.870723 + 0.899401 1.64843 -2.82158 0.219461 -0.216447 -0.951308 + 0.891408 1.71798 -2.81212 0.0331725 0.35334 -0.934907 + 0.853578 1.78375 -2.77168 -0.274737 0.406796 -0.871227 + 0.844884 1.82745 -2.74932 -0.141503 0.332949 -0.932267 + 0.896273 1.88951 -2.72178 0.120896 0.43092 -0.894255 + 0.862381 1.6295 -2.81421 -0.150587 -0.418167 -0.895801 + 0.840681 1.667 -2.81473 -0.305041 0.0662291 -0.950034 + 0.877702 1.68593 -2.82211 -0.053599 0.177384 -0.982681 + 0.839872 1.7517 -2.78167 -0.333201 0.384723 -0.860793 + 0.785028 1.76407 -2.74993 -0.352535 0.220555 -0.909436 + 0.822798 1.66471 -2.80807 -0.511128 -0.0265206 -0.859095 + 0.806169 1.67678 -2.79547 -0.583979 0.0337159 -0.811068 + 0.821988 1.74942 -2.77501 -0.391889 0.391583 -0.832518 + 0.798455 1.68053 -2.78978 -0.573549 0.0465163 -0.81785 + 0.814274 1.75317 -2.76932 -0.550827 0.26096 -0.792773 + 0.791942 1.67972 -2.78532 -0.57781 0.0178925 -0.815975 + 0.806332 1.74827 -2.76421 -0.558725 0.207544 -0.802964 + 0.790093 1.63509 -2.76291 -0.0450581 -0.654894 -0.754376 + 0.783999 1.67483 -2.78021 -0.520899 0.00297168 -0.853613 + 0.766685 1.66096 -2.76934 -0.45916 0.0390612 -0.887495 + 0.745381 1.67676 -2.75506 -0.413751 0.191193 -0.890087 + 0.771053 1.63108 -2.76692 -0.0260312 -0.453194 -0.891032 + 0.753738 1.61722 -2.75605 -0.3947 -0.145953 -0.907144 + 0.725814 1.6381 -2.75241 -0.413907 -0.0494596 -0.908974 + 0.698784 1.73801 -2.7231 -0.482258 0.193695 -0.854347 + 0.634298 1.77956 -2.65887 -0.803022 0.0927684 -0.588685 + 0.70475 1.77673 -2.71907 -0.465112 0.121587 -0.876862 + 0.790993 1.80279 -2.74591 -0.195927 0.110458 -0.974377 + 0.602519 1.85409 -2.57044 -0.989775 -0.0171107 -0.141611 + 0.60743 1.84952 -2.60037 -0.940452 -0.0136382 -0.339653 + 0.625217 1.86462 -2.62128 -0.741903 0.261455 -0.617432 + 0.652085 1.79466 -2.67979 -0.690009 0.0510876 -0.721996 + 0.598621 1.84131 -2.53434 -0.993402 -0.0891303 0.0721672 + 0.599069 1.91403 -2.49513 -0.991341 0.0147544 0.130479 + 0.59704 1.91508 -2.53562 -0.994661 0.0833361 -0.0608726 + 0.601951 1.91051 -2.56554 -0.917656 0.185892 -0.351216 + 0.611212 1.91192 -2.4489 -0.902772 -0.222533 0.368078 + 0.611993 1.94024 -2.42795 -0.930858 -0.0550729 0.361208 + 0.606495 1.95083 -2.4826 -0.975055 0.202647 0.0905612 + 0.604467 1.95189 -2.52309 -0.957179 0.280245 -0.072603 + 0.643676 1.91163 -2.39283 -0.727034 -0.314237 0.610472 + 0.620815 1.96969 -2.40936 -0.905041 0.145275 0.399743 + 0.615318 1.98028 -2.46401 -0.950925 0.289127 0.110213 + 0.616228 1.99017 -2.50007 -0.906227 0.416864 -0.070542 + 0.609082 1.94796 -2.55421 -0.851563 0.370101 -0.371302 + 0.64878 1.9439 -2.37416 -0.698782 -0.156308 0.698048 + 0.632582 1.99022 -2.39685 -0.935138 0.0330864 0.352735 + 0.63063 2.01243 -2.43561 -0.979628 0.181901 0.0850901 + 0.631541 2.02232 -2.47167 -0.948994 0.311316 -0.0499301 + 0.620843 1.98625 -2.53119 -0.79502 0.509016 -0.329918 + 0.710074 1.94569 -2.33546 -0.440496 -0.369597 0.818145 + 0.660547 1.96443 -2.36165 -0.676542 -0.246812 0.693811 + 0.635489 2.025 -2.36662 -0.945593 -0.235756 0.224217 + 0.633538 2.0472 -2.40539 -0.999492 -0.0199863 -0.0248049 + 0.63553 2.06394 -2.43221 -0.985003 0.0954169 -0.143749 + 0.753861 1.92561 -2.32744 -0.0779226 -0.387061 0.918756 + 0.70905 1.98909 -2.30845 -0.435597 -0.536 0.723159 + 0.659523 2.00784 -2.33464 -0.696934 -0.465806 0.545259 + 0.62777 2.06848 -2.32943 -0.934597 -0.315599 0.16409 + 0.779803 1.98534 -2.30028 0.304596 -0.458945 0.83462 + 0.747227 1.9851 -2.29544 -0.0902986 -0.542122 0.835434 + 0.694494 2.04529 -2.26765 -0.417284 -0.624472 0.660234 + 0.651803 2.05132 -2.29745 -0.671476 -0.553332 0.492893 + 0.819125 1.9989 -2.31556 0.526806 -0.375013 0.762785 + 0.760585 2.04989 -2.25375 0.304931 -0.525779 0.794087 + 0.732671 2.0413 -2.25464 -0.0799034 -0.619927 0.78058 + 0.677505 2.12639 -2.19846 -0.387856 -0.640766 0.662561 + 0.844465 2.09285 -2.29092 0.616114 -0.364898 0.698035 + 0.799907 2.06345 -2.26903 0.527434 -0.416829 0.740315 + 0.739134 2.13566 -2.18479 0.30962 -0.55993 0.768514 + 0.711221 2.12707 -2.18568 -0.0512291 -0.642287 0.76475 + 0.901706 2.03045 -2.37084 0.692787 -0.27321 0.667385 + 0.874805 2.10837 -2.31093 0.690601 -0.304851 0.655847 + 0.817902 2.18362 -2.21486 0.618527 -0.413089 0.668418 + 0.773344 2.15422 -2.19296 0.527377 -0.464518 0.711405 + 0.711712 2.24639 -2.09058 0.293885 -0.529355 0.795874 + 0.91498 2.03709 -2.3843 0.829221 -0.138502 0.541489 + 0.886092 2.11841 -2.32031 0.829745 -0.162649 0.533919 + 0.855504 2.2129 -2.23729 0.836434 -0.202743 0.509189 + 0.844218 2.20286 -2.22791 0.693456 -0.35549 0.626695 + 0.785192 2.29349 -2.11126 0.582077 -0.399666 0.708134 + 0.947709 1.97814 -2.45671 0.920878 -0.0304977 0.388655 + 0.925 2.04957 -2.40284 0.922237 0.0109609 0.38647 + 0.896112 2.13089 -2.33884 0.92254 -0.00589091 0.385856 + 0.86421 2.22607 -2.25259 0.929283 -0.0420559 0.366965 + 0.821654 2.32176 -2.13275 0.82778 -0.171743 0.53412 + 0.933468 2.06511 -2.43129 0.96132 0.145756 0.233706 + 0.903163 2.14858 -2.36166 0.962891 0.133979 0.234287 + 0.871261 2.24376 -2.27541 0.969106 0.108601 0.221447 + 0.836699 2.35083 -2.16856 0.957603 0.144605 0.249171 + 0.83036 2.33492 -2.14804 0.919974 -0.00651825 0.391925 + 0.957524 2.01599 -2.51681 0.956234 0.283177 0.073668 + 0.933667 2.08186 -2.45844 0.953969 0.293753 0.0604318 + 0.903362 2.16533 -2.38881 0.955816 0.289075 0.0534023 + 0.871323 2.25969 -2.29903 0.96095 0.272592 0.047626 + 0.949723 2.03387 -2.54718 0.895743 0.430067 -0.112632 + 0.925867 2.09974 -2.48881 0.896787 0.427097 -0.115588 + 0.896442 2.1812 -2.41575 0.897696 0.424396 -0.118452 + 0.864403 2.27556 -2.32598 0.897656 0.422454 -0.125483 + 0.952981 1.9998 -2.62055 0.750634 0.546339 -0.371566 + 0.93599 2.04759 -2.57125 0.749261 0.58059 -0.318627 + 0.914418 2.11119 -2.50936 0.753502 0.571078 -0.325739 + 0.884993 2.19264 -2.4363 0.735171 0.582479 -0.346759 + 0.932038 2.00774 -2.6362 0.426825 0.672039 -0.605131 + 0.919314 2.05575 -2.58333 0.446381 0.707449 -0.54796 + 0.897743 2.11935 -2.52144 0.466568 0.68746 -0.556518 + 0.870596 2.19652 -2.4491 0.446092 0.693783 -0.565391 + 0.894387 1.95759 -2.68967 0.181568 0.543906 -0.819267 + 0.893074 2.0071 -2.65126 0.173788 0.671227 -0.720591 + 0.88035 2.0551 -2.5984 0.201658 0.732872 -0.649795 + 0.865733 2.12251 -2.53207 0.222487 0.711071 -0.666991 + 0.828318 1.93192 -2.71699 -0.00385911 0.42863 -0.903472 + 0.827004 1.98142 -2.67858 -0.0542592 0.638747 -0.767501 + 0.828179 2.06209 -2.6036 -0.00900196 0.702534 -0.711593 + 0.813562 2.1295 -2.53728 0.00371492 0.70896 -0.705239 + 0.821635 1.89349 -2.72653 -0.0379539 0.320115 -0.946618 + 0.76261 1.88185 -2.72064 -0.348699 0.31201 -0.883775 + 0.769293 1.92029 -2.7111 -0.3462 0.413572 -0.842083 + 0.774611 1.97526 -2.67192 -0.323512 0.605061 -0.72749 + 0.823133 1.85629 -2.74238 -0.0656082 0.302468 -0.950899 + 0.769243 1.83163 -2.73897 -0.273363 0.176144 -0.945646 + 0.747032 1.84454 -2.72582 -0.444234 0.262938 -0.856458 + 0.717728 1.89175 -2.68815 -0.529601 0.361514 -0.767353 + 0.717287 1.92276 -2.6721 -0.528112 0.448408 -0.72113 + 0.682539 1.78964 -2.70592 -0.608635 -0.0405407 -0.792414 + 0.70215 1.85444 -2.69333 -0.548166 0.326985 -0.769802 + 0.672159 1.89904 -2.64849 -0.609067 0.349716 -0.711854 + 0.671718 1.93004 -2.63245 -0.569186 0.447479 -0.689775 + 0.722605 1.97773 -2.63292 -0.487543 0.574136 -0.657776 + 0.671696 1.85946 -2.66719 -0.608519 0.336563 -0.71863 + 0.62568 1.9042 -2.60259 -0.722428 0.309389 -0.618366 + 0.63281 1.94165 -2.59125 -0.660744 0.428873 -0.616024 + 0.64224 1.9879 -2.56041 -0.582087 0.593427 -0.555895 + 0.681147 1.97629 -2.60161 -0.512187 0.576299 -0.636824 + 0.659411 2.03466 -2.52058 -0.61816 0.581069 -0.529374 + 0.695002 2.04605 -2.54545 -0.546413 0.578407 -0.605704 + 0.73646 2.04749 -2.57676 -0.479866 0.595033 -0.64472 + 0.775786 2.05593 -2.59694 -0.318106 0.643455 -0.696258 + 0.638015 2.03301 -2.49136 -0.83395 0.455184 -0.311985 + 0.66146 2.08837 -2.47088 -0.675343 0.495717 -0.546055 + 0.697051 2.09976 -2.49575 -0.574924 0.544827 -0.61043 + 0.731765 2.11448 -2.51369 -0.505128 0.568826 -0.649063 + 0.771091 2.12291 -2.53387 -0.314378 0.638417 -0.70256 + 0.642004 2.07463 -2.4519 -0.876969 0.321684 -0.356995 + 0.652663 2.13298 -2.42409 -0.702558 0.432981 -0.564747 + 0.683014 2.15348 -2.43972 -0.597597 0.501115 -0.625909 + 0.717728 2.16819 -2.45766 -0.533156 0.535886 -0.654653 + 0.627798 2.10689 -2.38942 -0.981431 0.00851246 -0.191625 + 0.633207 2.11924 -2.40512 -0.886673 0.233692 -0.398998 + 0.635474 2.21187 -2.34328 -0.711483 0.422248 -0.561693 + 0.665825 2.23238 -2.35891 -0.607682 0.499412 -0.617502 + 0.696182 2.2509 -2.37159 -0.548256 0.535068 -0.642742 + 0.625806 2.09016 -2.36259 -0.991313 -0.107273 -0.0761004 + 0.613089 2.18393 -2.31271 -0.980987 0.00471444 -0.194014 + 0.618498 2.19627 -2.32841 -0.889052 0.225481 -0.398428 + 0.614047 2.32153 -2.23386 -0.715106 0.444629 -0.539377 + 0.613417 2.14609 -2.25635 -0.928504 -0.329442 0.171316 + 0.611454 2.16777 -2.28951 -0.990872 -0.109273 -0.0789475 + 0.592208 2.29483 -2.20487 -0.985199 0.0431024 -0.165906 + 0.597071 2.30593 -2.21899 -0.893656 0.252396 -0.371046 + 0.634814 2.13241 -2.22826 -0.662188 -0.563703 0.493706 + 0.592338 2.25919 -2.15187 -0.936909 -0.28433 0.203364 + 0.590573 2.27868 -2.18168 -0.996486 -0.067872 -0.0490905 + 0.588996 2.36206 -2.14054 -0.966485 0.256697 0.00363897 + 0.652901 2.23799 -2.10415 -0.364571 -0.609089 0.704343 + 0.613735 2.24551 -2.12377 -0.641395 -0.534826 0.550066 + 0.589485 2.32996 -2.09262 -0.917093 -0.00982676 0.398553 + 0.587719 2.34945 -2.12243 -0.977948 0.174287 0.115074 + 0.686618 2.23868 -2.09138 -0.0588529 -0.605251 0.793856 + 0.645524 2.31131 -2.05263 -0.380565 -0.298017 0.875417 + 0.606357 2.31883 -2.07225 -0.655361 -0.211977 0.72496 + 0.604448 2.36293 -2.08553 -0.692656 0.468093 0.54874 + 0.603302 2.37558 -2.10487 -0.725614 0.571432 0.383341 + 0.697108 2.3191 -2.04342 0.177742 -0.255731 0.950268 + 0.672013 2.31139 -2.04422 -0.120665 -0.304798 0.944742 + 0.646734 2.34692 -2.05243 -0.341751 0.279793 0.897174 + 0.62132 2.3518 -2.06515 -0.491925 0.326545 0.80708 + 0.653081 2.39392 -2.08458 -0.336742 0.695034 0.635242 + 0.72364 2.33405 -2.04824 0.350697 -0.196004 0.915748 + 0.689506 2.352 -2.04349 -0.0490756 0.28227 0.958079 + 0.673224 2.347 -2.04401 -0.195474 0.259964 0.945626 + 0.678495 2.38904 -2.07185 -0.226056 0.627679 0.744928 + 0.745921 2.26495 -2.09875 0.490999 -0.450093 0.745879 + 0.762911 2.36258 -2.06075 0.441742 -0.145001 0.885347 + 0.741521 2.38546 -2.05643 0.0821967 0.349115 0.933468 + 0.716039 2.36695 -2.04832 0.0397241 0.315208 0.948191 + 0.811507 2.31273 -2.12431 0.685079 -0.325964 0.651471 + 0.783282 2.37806 -2.06938 0.551221 -0.0486067 0.832942 + 0.761891 2.40094 -2.06506 0.175504 0.445567 0.877877 + 0.72026 2.41256 -2.07945 -0.25585 0.724551 0.639974 + 0.694778 2.39405 -2.07133 -0.215268 0.649897 0.728899 + 0.793428 2.38709 -2.07782 0.701245 0.119224 0.70288 + 0.768476 2.4068 -2.07054 0.274707 0.563677 0.778976 + 0.726844 2.41842 -2.08492 -0.129791 0.777026 0.615943 + 0.730957 2.42874 -2.09823 -0.128335 0.815768 0.563961 + 0.800224 2.39736 -2.08975 0.779302 0.271967 0.564555 + 0.775271 2.41707 -2.08247 0.313588 0.665203 0.677619 + 0.806563 2.41327 -2.11027 0.808623 0.411992 0.419991 + 0.779384 2.4274 -2.09579 0.330316 0.736389 0.590442 + 0.836761 2.36676 -2.19219 0.94666 0.313168 0.0758933 + 0.806611 2.42571 -2.12871 0.791962 0.554152 0.256344 + 0.779433 2.43983 -2.11423 0.312905 0.820975 0.477588 + 0.830539 2.38103 -2.21641 0.881532 0.462728 -0.0937213 + 0.800389 2.43997 -2.15293 0.723763 0.684221 0.0894924 + 0.775395 2.44909 -2.12994 0.274214 0.883376 0.38007 + 0.72692 2.43799 -2.11395 -0.146258 0.857057 0.494026 + 0.854282 2.28493 -2.34484 0.731351 0.588777 -0.344192 + 0.820418 2.3904 -2.23527 0.713449 0.628588 -0.309623 + 0.792489 2.44729 -2.16766 0.577168 0.808929 -0.111855 + 0.767495 2.4564 -2.14467 0.187435 0.952813 0.23878 + 0.839885 2.28881 -2.35764 0.422638 0.712098 -0.560619 + 0.807475 2.39389 -2.24678 0.409071 0.746315 -0.525047 + 0.779546 2.45078 -2.17917 0.307423 0.891575 -0.332545 + 0.759097 2.45867 -2.15214 0.0370589 0.995453 0.0877453 + 0.838586 2.19968 -2.45973 0.18498 0.717368 -0.671689 + 0.811783 2.28762 -2.36961 0.162041 0.734636 -0.658826 + 0.779373 2.3927 -2.25875 0.148816 0.764298 -0.627457 + 0.75761 2.44985 -2.18851 0.0810486 0.891237 -0.446238 + 0.79379 2.19329 -2.47214 -0.0312491 0.70472 -0.708797 + 0.766986 2.28123 -2.38203 -0.0604195 0.713955 -0.69758 + 0.739101 2.38695 -2.26991 -0.0684724 0.739944 -0.669175 + 0.717338 2.4441 -2.19967 -0.122586 0.855898 -0.502405 + 0.751319 2.1867 -2.46873 -0.349591 0.620235 -0.702208 + 0.729772 2.26941 -2.38266 -0.367233 0.626148 -0.687808 + 0.701887 2.37513 -2.27055 -0.373887 0.648146 -0.663411 + 0.688289 2.43487 -2.20017 -0.392067 0.765045 -0.510871 + 0.711029 2.45401 -2.16872 -0.212971 0.975971 -0.0460893 + 0.671689 2.35849 -2.26059 -0.553376 0.556712 -0.619553 + 0.658091 2.41823 -2.19021 -0.568242 0.670692 -0.476731 + 0.662386 2.43398 -2.16276 -0.510846 0.858764 -0.0395079 + 0.68198 2.44478 -2.16922 -0.410419 0.909116 -0.0711663 + 0.641333 2.33997 -2.24791 -0.611848 0.519942 -0.596073 + 0.634396 2.40377 -2.18031 -0.621311 0.639083 -0.453371 + 0.63869 2.41953 -2.15286 -0.547701 0.836432 -0.0201219 + 0.672795 2.42573 -2.1222 -0.342466 0.844668 0.411403 + 0.69239 2.43653 -2.12866 -0.295278 0.872108 0.390179 + 0.60711 2.38534 -2.16626 -0.723069 0.575599 -0.381913 + 0.620986 2.40756 -2.14374 -0.601163 0.798868 0.0203085 + 0.655091 2.41377 -2.11308 -0.376575 0.818915 0.433092 + 0.593858 2.37316 -2.15465 -0.882743 0.422708 -0.205139 + 0.607734 2.39539 -2.13214 -0.694391 0.703013 0.153605 + 0.651936 2.40657 -2.10392 -0.381509 0.775641 0.502824 + 0.604579 2.38819 -2.12298 -0.728042 0.614623 0.303635 + 0.718521 2.44026 -2.12142 -0.210033 0.878992 0.428087 + 0.737161 2.45774 -2.16148 -0.1006 0.994919 0.00386093 + -0.861683 1.78372 -1.68945 0.542942 0.676105 -0.498092 + -0.844417 1.76425 -1.68043 0.295676 0.853413 0.429257 + -0.795989 1.7501 -1.67675 0.0704556 0.470165 0.879762 + -0.896655 1.82743 -1.63648 0.819838 0.570199 -0.0523411 + -0.893836 1.82196 -1.6254 0.891577 0.305086 0.334685 + -0.875973 1.76755 -1.63771 0.527652 0.752673 0.393784 + -0.859869 1.76859 -1.6341 -0.509809 0.758022 -0.406813 + -0.828313 1.76528 -1.67683 -0.0515056 0.57841 -0.814119 + -0.795989 1.7501 -1.67675 0.619461 0.360333 -0.697444 + -0.913921 1.84691 -1.6455 0.628337 0.660206 -0.411486 + -0.938856 1.89544 -1.61696 0.553402 0.538562 -0.635372 + -0.921707 1.88933 -1.60415 0.819835 0.433994 -0.373524 + -0.918888 1.88385 -1.59307 0.976606 0.173526 0.127003 + -0.914592 1.82073 -1.59468 0.849752 0.0515985 0.524652 + -0.950332 1.85538 -1.66374 0.228995 0.62174 -0.749 + -0.975267 1.90391 -1.6352 0.215899 0.562513 -0.798102 + -0.973509 1.9577 -1.59711 0.256444 0.558221 -0.789067 + -0.946743 1.95147 -1.58371 0.553459 0.488953 -0.674246 + -0.929595 1.94537 -1.5709 0.841358 0.358801 -0.404202 + -0.874571 1.76401 -1.70684 0.24176 0.499863 -0.831678 + -0.96322 1.83567 -1.68111 -0.00269435 0.560421 -0.828204 + -1.00872 1.84191 -1.66855 -0.371559 0.465291 -0.803398 + -1.0025 1.90419 -1.63537 -0.304839 0.519388 -0.798316 + -0.862319 1.70005 -1.74151 0.254402 0.500152 -0.827724 + -0.965472 1.76805 -1.71504 -0.0500905 0.458199 -0.887437 + -1.01097 1.77429 -1.70247 -0.384834 0.445536 -0.808332 + -1.03461 1.83407 -1.65072 -0.650961 0.392859 -0.649547 + -1.02839 1.89634 -1.61754 -0.678934 0.423899 -0.599466 + -0.798428 1.69134 -1.71503 0.627613 0.409576 -0.66208 + -0.860608 1.62202 -1.78844 0.252982 0.439702 -0.861778 + -0.95322 1.70409 -1.74971 -0.00297674 0.504452 -0.863435 + -1.01937 1.70534 -1.74027 -0.363104 0.497155 -0.788031 + -1.04663 1.76377 -1.67854 -0.648101 0.399675 -0.648248 + -0.76879 1.67356 -1.67546 0.87792 0.252431 -0.406859 + -0.763945 1.5997 -1.71449 0.881476 0.206488 -0.424691 + -0.796717 1.61331 -1.76195 0.639402 0.337439 -0.690869 + -0.766351 1.73233 -1.63718 0.89385 0.216533 -0.392615 + -0.752199 1.66051 -1.6355 0.97648 0.136311 -0.167049 + -0.747354 1.58665 -1.67453 0.979245 0.0889351 -0.182123 + -0.753606 1.5029 -1.71989 0.965301 -0.0427322 -0.25762 + -0.770913 1.51923 -1.75069 0.861404 0.0973666 -0.498501 + -0.769426 1.80185 -1.60854 0.861362 0.282283 -0.42234 + -0.759348 1.79972 -1.57636 0.97648 0.155311 -0.149549 + -0.756274 1.73021 -1.60501 0.980811 0.115874 -0.156792 + -0.750401 1.64607 -1.60312 0.989386 0.00195389 0.145294 + -0.74596 1.57993 -1.63403 0.992367 -0.0378516 0.117364 + -0.805752 1.77556 -1.67281 0.296163 0.483039 -0.823991 + -0.779188 1.82732 -1.60459 0.686472 0.456702 -0.565844 + -0.777499 1.87088 -1.56637 0.735772 0.439402 -0.51533 + -0.805421 1.83416 -1.62143 0.239147 0.611648 -0.754119 + -0.803731 1.87773 -1.5832 0.384125 0.590126 -0.71007 + -0.827982 1.82389 -1.62545 -0.212933 0.608359 -0.764564 + -0.82617 1.87946 -1.58753 -0.0574496 0.608425 -0.791529 + -0.806134 1.92987 -1.54242 0.381638 0.58766 -0.713448 + -0.853077 1.821 -1.61849 -0.558502 0.456633 -0.692504 + -0.851265 1.87658 -1.58058 -0.511802 0.514498 -0.688004 + -0.84702 1.92949 -1.54163 -0.501892 0.544839 -0.671755 + -0.828572 1.93161 -1.54674 -0.04566 0.622728 -0.781105 + -0.884962 1.76516 -1.6048 -0.471562 0.844265 -0.254649 + -0.87817 1.81756 -1.5892 -0.841018 0.311302 -0.442469 + -0.867427 1.86948 -1.56556 -0.823135 0.372758 -0.428369 + -0.896729 1.76634 -1.60699 0.532001 0.687299 0.494565 + -0.91404 1.75833 -1.57116 -0.425466 0.881673 0.204038 + -0.890048 1.80422 -1.56183 -0.945887 0.308043 -0.102017 + -0.879305 1.85613 -1.5382 -0.976116 0.203773 -0.0753241 + -0.925807 1.75951 -1.57334 0.416597 0.58701 0.694166 + -0.913283 1.74562 -1.54745 -0.293624 0.672019 0.679835 + -0.889292 1.79151 -1.53811 -0.883087 0.204614 0.422245 + -0.877897 1.84482 -1.5174 -0.941031 0.000393014 0.33832 + -0.871914 1.91258 -1.5065 -0.980782 0.170719 -0.0944559 + -0.927912 1.80841 -1.56914 0.748761 -0.0563014 0.660444 + -0.955781 1.8022 -1.55238 0.356948 -0.15968 0.920375 + -0.953676 1.75329 -1.55657 0.10946 0.503488 0.85704 + -0.923794 1.74036 -1.53732 0.371164 0.92692 -0.0552796 + -0.923481 1.87607 -1.57706 0.931412 -0.00718635 0.363897 + -0.936802 1.86374 -1.55152 0.768744 -0.134296 0.625297 + -0.955874 1.85768 -1.53792 0.418948 -0.262017 0.869384 + -0.986097 1.80064 -1.54679 0.0576717 -0.220796 0.973614 + -0.988572 1.74562 -1.55695 -0.150924 0.398619 0.904613 + -0.932115 1.93356 -1.54674 0.936475 -0.0628728 0.345052 + -0.941907 1.9245 -1.52797 0.78366 -0.194031 0.590109 + -0.96098 1.91842 -1.51437 0.409649 -0.33383 0.848967 + -0.98619 1.85613 -1.53234 0.0389872 -0.292569 0.955449 + -1.01567 1.7933 -1.55082 -0.297138 -0.14412 0.943895 + -0.927522 1.94134 -1.56276 0.992671 0.10416 0.0612771 + -0.937515 1.98613 -1.51921 0.940351 -0.096075 0.326359 + -0.947307 1.97706 -1.50044 0.781325 -0.248362 0.57258 + -0.96172 1.97249 -1.49016 0.41677 -0.397877 0.817311 + -0.983264 1.91729 -1.51026 0.038501 -0.37452 0.926419 + -0.936118 1.99604 -1.53943 0.837471 0.369266 -0.402846 + -0.934046 1.99201 -1.53129 0.995022 0.0836096 0.0542295 + -0.938812 2.03584 -1.50142 0.990397 0.117413 0.0729926 + -0.942281 2.02995 -1.48935 0.936737 -0.072848 0.342369 + -0.950006 2.02281 -1.47453 0.783275 -0.227616 0.578508 + -0.949082 2.00065 -1.54913 0.554014 0.512331 -0.65619 + -0.95341 2.04363 -1.51755 0.54609 0.555685 -0.626898 + -0.940447 2.03902 -1.50785 0.838202 0.404192 -0.366124 + -0.946611 2.0652 -1.48899 0.766284 0.605202 -0.215731 + -0.944975 2.06202 -1.48256 0.906873 0.366954 0.207187 + -0.975847 2.00687 -1.56253 0.2442 0.588885 -0.770442 + -0.974527 2.04854 -1.52813 0.253542 0.62928 -0.734659 + -0.976944 2.0734 -1.50646 0.216557 0.78221 -0.584167 + -0.955827 2.06849 -1.4959 0.5129 0.716682 -0.472546 + -0.954597 2.07248 -1.48133 0.501042 0.862294 0.0735273 + -0.99642 2.00708 -1.56267 -0.296677 0.590083 -0.750856 + -0.995099 2.04874 -1.52825 -0.305563 0.630162 -0.713812 + -0.991595 2.07352 -1.50661 -0.261439 0.781612 -0.566332 + -0.990813 2.07877 -1.49456 -0.23599 0.934454 -0.266656 + -0.976162 2.07864 -1.49442 0.209394 0.939152 -0.272302 + -1.00074 1.95798 -1.5973 -0.309319 0.560863 -0.767955 + -1.01545 2.00132 -1.54956 -0.671264 0.479027 -0.565631 + -1.01011 2.04419 -1.51791 -0.662031 0.520583 -0.539174 + -1.00661 2.06898 -1.49627 -0.61735 0.681379 -0.393195 + -0.999594 2.0761 -1.48852 -0.449988 0.882143 -0.139047 + -1.01978 1.9522 -1.58419 -0.672114 0.459341 -0.580748 + -1.02503 1.99671 -1.53925 -0.881109 0.341643 -0.326996 + -1.01969 2.03959 -1.5076 -0.87834 0.3744 -0.297227 + -1.01336 2.06577 -1.48866 -0.80597 0.568286 -0.165721 + -1.00634 2.0729 -1.48091 -0.568024 0.818663 0.0844981 + -1.04108 1.89025 -1.60387 -0.878394 0.332351 -0.343462 + -1.03246 1.94612 -1.57052 -0.884638 0.332088 -0.327313 + -1.03476 1.94165 -1.56062 -0.989207 0.14568 0.0157156 + -1.02733 1.99224 -1.52935 -0.991211 0.1318 0.0113462 + -1.02151 2.03608 -1.49979 -0.98602 0.164408 0.0271031 + -1.05554 1.82437 -1.63257 -0.868041 0.324169 -0.376057 + -1.0442 1.88418 -1.5904 -0.984005 0.175679 0.0295085 + -1.04226 1.87778 -1.57615 -0.959584 0.0712467 0.272255 + -1.03281 1.93526 -1.54636 -0.966121 0.00840258 0.257954 + -1.02586 1.98743 -1.51856 -0.969797 -0.0168192 0.243333 + -1.06756 1.75407 -1.66038 -0.735671 0.414641 -0.535594 + -1.05867 1.81829 -1.61909 -0.968395 0.248755 -0.0182061 + -1.05823 1.80894 -1.59774 -0.94289 0.188163 0.27487 + -1.03468 1.86924 -1.55703 -0.861852 -0.0367449 0.505827 + -1.02724 1.92897 -1.53232 -0.875806 -0.108841 0.470232 + -1.05503 1.69481 -1.71634 -0.573101 0.490184 -0.656715 + -1.084 1.69714 -1.68879 -0.674157 0.490231 -0.552437 + -1.08388 1.74579 -1.64166 -0.91784 0.360949 -0.165182 + -1.08344 1.73643 -1.6203 -0.931969 0.222139 0.286508 + -1.05065 1.80039 -1.57863 -0.818814 0.0811334 0.568297 + -1.02788 1.62315 -1.79044 -0.289454 0.509889 -0.81008 + -1.0696 1.63577 -1.75368 -0.520732 0.518179 -0.678476 + -1.09857 1.6381 -1.72614 -0.556987 0.539667 -0.631289 + -1.10032 1.68885 -1.67007 -0.840847 0.477293 -0.25528 + -0.961734 1.6219 -1.79988 -0.010275 0.458752 -0.888505 + -0.964636 1.5442 -1.83363 0.0835684 0.379133 -0.921561 + -1.03632 1.56513 -1.82489 -0.228865 0.492134 -0.839896 + -1.07804 1.57775 -1.78813 -0.498248 0.49233 -0.713695 + -0.86351 1.54431 -1.82219 0.259389 0.267042 -0.92812 + -0.878343 1.44646 -1.8412 0.326135 0.179794 -0.928068 + -0.9756 1.49514 -1.85648 0.186908 0.35741 -0.915054 + -1.04729 1.51607 -1.84774 -0.25159 0.480981 -0.839857 + -1.0753 1.52508 -1.82485 -0.497551 0.457676 -0.736869 + -0.803685 1.53284 -1.79816 0.625118 0.186471 -0.757928 + -0.796508 1.42312 -1.80198 0.74657 -0.0126133 -0.665187 + -0.818518 1.43499 -1.81718 0.496852 0.0713508 -0.864897 + -0.779201 1.40679 -1.77117 0.858954 -0.0209808 -0.511623 + -0.814222 1.33839 -1.80653 0.640426 -0.322429 -0.697061 + -0.829046 1.35425 -1.82431 0.553095 -0.229478 -0.80089 + -0.851056 1.36611 -1.83951 0.440722 -0.141564 -0.88641 + -0.752212 1.49618 -1.6794 0.994201 -0.107525 -0.00179019 + -0.76183 1.39164 -1.74576 0.953425 -0.106439 -0.282224 + -0.79685 1.32324 -1.78111 0.788249 -0.426068 -0.443992 + -0.864718 1.29753 -1.81167 0.346095 -0.613927 -0.709445 + -0.879542 1.31338 -1.82945 0.258197 -0.505559 -0.823252 + -0.757383 1.48395 -1.636 0.944214 -0.153962 0.291127 + -0.767001 1.37943 -1.70236 0.95799 -0.27371 0.0856636 + -0.792378 1.31083 -1.73172 0.819668 -0.570517 -0.0515171 + -0.805334 1.30464 -1.76866 0.690927 -0.647656 -0.321188 + -0.86489 1.28634 -1.80025 0.319797 -0.674995 -0.664915 + -0.758081 1.56626 -1.59838 0.901097 -0.153857 0.405404 + -0.785969 1.473 -1.59462 0.820348 -0.134906 0.555724 + -0.777832 1.37883 -1.62356 0.905003 -0.270068 0.328684 + -0.80321 1.31023 -1.65291 0.785106 -0.58282 0.209593 + -0.762522 1.6324 -1.56747 0.890223 -0.112723 0.441356 + -0.786667 1.5553 -1.557 0.737383 -0.231265 0.634651 + -0.844632 1.49219 -1.52469 0.573965 -0.0973955 0.813067 + -0.814774 1.46235 -1.54842 0.74533 0.0523511 0.664638 + -0.765889 1.69882 -1.54682 0.877079 -0.106486 0.468395 + -0.787836 1.60928 -1.53775 0.698236 -0.180004 0.692868 + -0.837401 1.59422 -1.50277 0.538881 -0.204098 0.817283 + -0.836232 1.54024 -1.52202 0.541309 -0.204292 0.815628 + -0.754476 1.71575 -1.57263 0.983949 -0.010114 0.178165 + -0.769974 1.77104 -1.52429 0.803068 -0.111664 0.585331 + -0.791203 1.67569 -1.51711 0.566783 -0.134394 0.812831 + -0.832232 1.66576 -1.50159 0.583904 0.209753 0.784258 + -0.758561 1.78796 -1.55009 0.983459 0.00664217 0.181008 + -0.764901 1.85098 -1.52125 0.973265 0.0260329 0.228204 + -0.774543 1.8401 -1.50329 0.78652 -0.153738 0.598122 + -0.79282 1.75793 -1.50947 0.432875 -0.146761 0.889427 + -0.765688 1.86275 -1.54751 0.950277 0.239754 -0.198725 + -0.77504 1.9167 -1.51119 0.947341 0.270981 -0.17063 + -0.774462 1.90805 -1.49188 0.973254 0.024937 0.228373 + -0.784104 1.89718 -1.47393 0.785585 -0.20298 0.584513 + -0.797389 1.827 -1.48848 0.457099 -0.276565 0.845324 + -0.786851 1.92484 -1.53005 0.711075 0.476506 -0.517025 + -0.79177 1.97231 -1.49268 0.712307 0.491471 -0.501073 + -0.782852 1.96615 -1.47846 0.944844 0.27537 -0.177317 + -0.782274 1.95751 -1.45914 0.975602 -0.00478825 0.219495 + -0.811053 1.97734 -1.50506 0.371627 0.616783 -0.693881 + -0.812841 2.01759 -1.46816 0.372689 0.654804 -0.657522 + -0.797628 2.01363 -1.45839 0.700356 0.532257 -0.475609 + -0.78871 2.00747 -1.44416 0.942368 0.30002 -0.148092 + -0.828013 1.97864 -1.50834 -0.0387738 0.652543 -0.756759 + -0.829801 2.0189 -1.47144 -0.0453624 0.693058 -0.719453 + -0.816785 2.04146 -1.44513 0.326457 0.793863 -0.513038 + -0.801572 2.03748 -1.43537 0.647661 0.688267 -0.32684 + -0.84646 1.97652 -1.50322 -0.504384 0.566943 -0.651285 + -0.844355 2.01723 -1.4674 -0.493983 0.609319 -0.620251 + -0.828873 2.04234 -1.44754 -0.0306886 0.823086 -0.567087 + -0.829989 2.04737 -1.43556 -0.0497992 0.968762 -0.24294 + -0.817901 2.04647 -1.43316 0.25941 0.937266 -0.232892 + -0.858672 1.97117 -1.49188 -0.825384 0.387134 -0.410937 + -0.856566 2.01188 -1.45606 -0.825313 0.417327 -0.38039 + -0.843427 2.04067 -1.44351 -0.465512 0.753488 -0.464278 + -0.8385 2.04639 -1.43321 -0.312177 0.937369 -0.154544 + -0.863182 1.92239 -1.52662 -0.831654 0.370901 -0.413261 + -0.867404 1.96136 -1.47176 -0.982855 0.158866 -0.0935788 + -0.863455 2.00413 -1.44018 -0.978324 0.192189 -0.0771096 + -0.852103 2.03688 -1.43541 -0.754099 0.607915 -0.248543 + -0.86634 1.95281 -1.45605 -0.952865 -0.103577 0.285166 + -0.862391 1.99558 -1.42447 -0.946617 -0.0891164 0.309796 + -0.858992 2.02914 -1.41954 -0.910348 0.40723 0.0736918 + -0.851204 2.03807 -1.41583 -0.644971 0.725994 0.238632 + -0.847176 2.0426 -1.42511 -0.551467 0.833621 0.0309861 + -0.870505 1.90126 -1.4857 -0.947568 -0.0761338 0.310353 + -0.855242 1.94359 -1.44121 -0.718738 -0.328704 0.612674 + -0.853636 1.98831 -1.41276 -0.719562 -0.311967 0.620409 + -0.85823 2.02307 -1.40831 -0.880551 0.187933 0.435099 + -0.850442 2.032 -1.4046 -0.616316 0.552086 0.561565 + -0.859408 1.89205 -1.47086 -0.719033 -0.273932 0.638712 + -0.84165 1.93848 -1.43341 -0.378928 -0.454768 0.805977 + -0.840044 1.98319 -1.40497 -0.370014 -0.445191 0.815411 + -0.839799 2.01216 -1.39104 -0.346252 -0.125076 0.929766 + -0.849475 2.0158 -1.3966 -0.653254 -0.0181182 0.756922 + -0.8628 1.83228 -1.49721 -0.700578 -0.188892 0.688121 + -0.844815 1.82551 -1.48689 -0.365152 -0.299583 0.881427 + -0.841422 1.88527 -1.46055 -0.36923 -0.390232 0.843439 + -0.8225 1.93631 -1.43091 0.0673759 -0.486757 0.870935 + -0.824935 1.98148 -1.40299 0.0594858 -0.479681 0.875424 + -0.874195 1.77897 -1.51791 -0.631738 -0.0953256 0.769299 + -0.84636 1.76001 -1.5058 -0.325903 -0.246802 0.91262 + -0.818764 1.82256 -1.48349 0.0664525 -0.32836 0.942212 + -0.822272 1.88311 -1.45804 0.0592593 -0.417445 0.906768 + -0.884407 1.72657 -1.53545 -0.153748 0.309262 0.938466 + -0.856572 1.70761 -1.52333 -0.168963 0.220004 0.960755 + -0.820309 1.75707 -1.50241 0.02009 -0.215358 0.976329 + -0.800897 1.88754 -1.46304 0.47293 -0.349431 0.808848 + -0.894918 1.72132 -1.52531 0.600347 0.793044 0.103276 + -0.870112 1.69854 -1.51488 0.573723 0.789857 0.216722 + -0.818692 1.67483 -1.51004 0.131552 0.29778 0.945527 + -0.925882 1.77462 -1.50761 0.502066 0.602654 -0.620273 + -0.903651 1.76204 -1.48842 0.699505 0.533594 -0.475362 + -0.878845 1.73927 -1.47799 0.858185 0.486475 -0.163891 + -0.952938 1.74542 -1.54417 -0.0222476 0.995374 -0.0934673 + -0.955026 1.77968 -1.51447 0.0120528 0.665044 -0.746707 + -0.952568 1.8216 -1.47601 0.0382501 0.685138 -0.727409 + -0.931047 1.81741 -1.4704 0.518223 0.597492 -0.611922 + -0.908816 1.80483 -1.45121 0.764668 0.482294 -0.427406 + -0.987834 1.73775 -1.54454 -0.288217 0.951613 -0.106601 + -0.982022 1.77671 -1.5081 -0.244803 0.672643 -0.6983 + -0.979564 1.81863 -1.46965 -0.337055 0.650955 -0.680185 + -1.01815 1.73827 -1.56097 -0.310807 0.264974 0.912791 + -1.01475 1.72657 -1.54594 -0.445772 0.894263 -0.0397493 + -1.00893 1.76552 -1.50949 -0.55517 0.628102 -0.545229 + -0.994451 1.81507 -1.46328 -0.610959 0.590116 -0.527724 + -0.97368 1.8672 -1.42555 -0.331486 0.667198 -0.667056 + -1.05153 1.72021 -1.57018 -0.678542 0.247599 0.691574 + -1.04813 1.70852 -1.55514 -0.794529 0.488288 0.360968 + -1.01599 1.76034 -1.50129 -0.903596 0.415545 -0.104097 + -1.00151 1.80988 -1.45507 -0.930384 0.336381 -0.145717 + -0.988567 1.86364 -1.41917 -0.628021 0.570687 -0.529061 + -1.0327 1.79865 -1.56084 -0.620006 -0.0294021 0.784046 + -1.06948 1.72195 -1.58796 -0.793704 0.0978317 0.600385 + -1.08878 1.67161 -1.60646 -0.855911 0.180056 0.484764 + -1.04836 1.68864 -1.53604 -0.890805 0.13957 0.43242 + -1.0069 1.85779 -1.53428 -0.33282 -0.248125 0.909761 + -1.02393 1.86315 -1.54429 -0.675669 -0.151786 0.72141 + -1.00397 1.91895 -1.51221 -0.346819 -0.336182 0.875613 + -1.01649 1.92288 -1.51957 -0.680799 -0.233301 0.694322 + -0.984005 1.97135 -1.48604 0.0314484 -0.444111 0.895419 + -0.999619 1.97261 -1.48749 -0.344846 -0.403809 0.84736 + -1.01214 1.97655 -1.49485 -0.686794 -0.286449 0.668028 + -1.0203 1.98114 -1.50452 -0.877307 -0.151552 0.455372 + -0.964419 2.01823 -1.46426 0.407492 -0.389519 0.825969 + -0.982001 2.01733 -1.46101 0.0373872 -0.434607 0.899844 + -0.997615 2.0186 -1.46245 -0.34794 -0.391279 0.851962 + -1.00749 2.02171 -1.46826 -0.680776 -0.273483 0.679523 + -1.01565 2.02629 -1.47792 -0.875941 -0.130227 0.464509 + -0.955171 2.05069 -1.45916 0.720065 0.0675929 0.690606 + -0.965424 2.04743 -1.45186 0.402204 -0.0619828 0.913449 + -0.983006 2.04653 -1.44862 0.0337902 -0.108413 0.993531 + -0.994161 2.04743 -1.44967 -0.306286 -0.0729372 0.949141 + -1.00404 2.05053 -1.45548 -0.635883 0.0332925 0.771067 + -0.947446 2.05783 -1.47398 0.867983 0.213795 0.448215 + -0.956111 2.06645 -1.46899 0.610177 0.586505 0.532631 + -0.960629 2.06227 -1.46033 0.546666 0.49236 0.677302 + -0.970882 2.059 -1.45302 0.286682 0.355062 0.8898 + -0.953641 2.07063 -1.47757 0.593337 0.72326 0.353335 + -0.967214 2.07131 -1.46621 0.265496 0.845889 0.462584 + -0.971731 2.06713 -1.45755 0.221329 0.705967 0.672773 + -0.982013 2.06661 -1.45565 -0.00177327 0.712973 0.701189 + -0.981163 2.05847 -1.45113 0.0549696 0.337265 0.939804 + -0.970723 2.07549 -1.47471 0.179435 0.915809 0.3593 + -0.969766 2.07362 -1.47095 0.15416 0.909084 0.387041 + -0.987789 2.06842 -1.45905 -0.153577 0.806631 0.570754 + -0.992319 2.05937 -1.45218 -0.229001 0.414255 0.880881 + -0.963814 2.07577 -1.48824 0.367629 0.919463 -0.139413 + -0.972252 2.07813 -1.48049 0.234788 0.943636 0.233294 + -0.992911 2.07364 -1.47028 -0.174837 0.875338 0.450795 + -0.990342 2.07074 -1.46379 -0.163391 0.857355 0.488104 + -0.998095 2.06118 -1.45558 -0.422733 0.510091 0.749069 + -0.984601 2.08101 -1.48667 -0.0231295 0.998052 0.0579329 + -0.993381 2.07834 -1.48062 -0.216603 0.949029 0.228971 + -0.99444 2.07629 -1.47606 -0.207986 0.89141 0.402654 + -1.0074 2.07084 -1.47634 -0.605436 0.731746 0.313041 + -1.00647 2.06735 -1.46898 -0.589308 0.661583 0.463707 + -1.00391 2.06445 -1.46249 -0.541286 0.599912 0.589165 + -1.00985 2.05379 -1.4624 -0.810502 0.145974 0.567255 + -1.01517 2.06224 -1.48085 -0.908251 0.392521 0.144941 + -1.01424 2.05876 -1.47348 -0.897053 0.265032 0.353631 + -1.02004 2.03125 -1.48901 -0.965931 0.00602489 0.258728 + -1.10274 1.68609 -1.6388 -0.928522 0.286858 0.235709 + -1.12121 1.65122 -1.66364 -0.900856 0.39323 0.183924 + -1.1061 1.64277 -1.62382 -0.852629 0.243119 0.462511 + -1.08274 1.6196 -1.57935 -0.803775 0.207646 0.55752 + -1.06543 1.64843 -1.56198 -0.836344 0.0856898 0.541467 + -1.11879 1.65398 -1.69492 -0.724962 0.575102 -0.379063 + -1.14137 1.61459 -1.68087 -0.902482 0.424152 0.07497 + -1.12625 1.60613 -1.64105 -0.84108 0.30273 0.448261 + -1.10805 1.58706 -1.76083 -0.511412 0.5276 -0.678303 + -1.12827 1.60294 -1.7296 -0.649726 0.528113 -0.546766 + -1.14801 1.59761 -1.70914 -0.78781 0.5466 -0.283872 + -1.16836 1.5483 -1.68293 -0.938686 0.291499 0.184111 + -1.10532 1.53438 -1.79755 -0.484818 0.473429 -0.735402 + -1.13309 1.54353 -1.7746 -0.606646 0.44187 -0.660857 + -1.15283 1.53819 -1.75413 -0.794711 0.347706 -0.497529 + -1.17501 1.53132 -1.71119 -0.992373 0.118036 -0.0355381 + -1.09534 1.48847 -1.83271 -0.515778 0.38929 -0.763169 + -1.12311 1.49763 -1.80977 -0.609845 0.349881 -0.711107 + -1.15272 1.49406 -1.77795 -0.807926 0.224801 -0.54472 + -1.17489 1.48719 -1.73501 -0.957577 0.110455 -0.266168 + -1.17284 1.51873 -1.66879 -0.9567 0.181032 0.227931 + -1.07225 1.49111 -1.84717 -0.506229 0.397058 -0.765557 + -1.06557 1.4637 -1.86328 -0.488367 0.259635 -0.833119 + -1.11164 1.45681 -1.83562 -0.643574 0.189797 -0.741478 + -1.14125 1.45325 -1.8038 -0.765504 0.0850554 -0.637784 + -1.16209 1.43471 -1.77781 -0.893668 -0.0357329 -0.447304 + -1.04423 1.48211 -1.87005 -0.218264 0.443524 -0.86928 + -1.04247 1.46635 -1.87773 -0.272638 0.0838189 -0.958458 + -1.00107 1.43371 -1.88308 0.105073 0.110682 -0.988286 + -1.05129 1.43838 -1.87943 -0.24013 0.267479 -0.933163 + -1.09737 1.43149 -1.85176 -0.630431 0.0146473 -0.776107 + -1.00247 1.46289 -1.8726 0.202006 0.383679 -0.901101 + -1.00071 1.44711 -1.88027 0.207208 0.318562 -0.924977 + -0.905572 1.40079 -1.86012 0.273116 0.129672 -0.953202 + -1.00389 1.40927 -1.88379 0.091356 -0.043122 -0.994884 + -1.05412 1.41394 -1.88015 -0.361046 -0.127194 -0.923833 + -0.905215 1.41419 -1.85732 0.302473 0.209436 -0.929864 + -0.879577 1.38728 -1.85458 0.391346 0.0133918 -0.920146 + -0.977897 1.39575 -1.87826 0.162585 -0.14137 -0.976515 + -1.03086 1.39979 -1.88477 -0.114306 -0.409271 -0.905225 + -0.909016 1.37928 -1.86229 0.219388 -0.203368 -0.954207 + -0.880494 1.35811 -1.84722 0.260736 -0.32044 -0.910678 + -0.91712 1.35833 -1.85396 0.0698016 -0.443323 -0.89364 + -0.943902 1.36906 -1.86388 -0.0627396 -0.52475 -0.848941 + -0.935798 1.39002 -1.87222 0.0335625 -0.449008 -0.892897 + -0.916168 1.3136 -1.83618 -0.0729311 -0.532352 -0.843375 + -0.960586 1.34898 -1.84185 -0.287512 -0.601493 -0.745347 + -0.967246 1.38002 -1.86474 -0.232559 -0.636904 -0.73503 + -0.996414 1.38162 -1.86005 -0.0993971 -0.755664 -0.647373 + -0.988765 1.39406 -1.87874 0.0326634 -0.61536 -0.787569 + -1.05268 1.39308 -1.8694 -0.307762 -0.665633 -0.679864 + -1.07593 1.40723 -1.86478 -0.539408 -0.326004 -0.776377 + -1.06033 1.38065 -1.85071 -0.252805 -0.744048 -0.618452 + -1.09939 1.39036 -1.83797 -0.549298 -0.490807 -0.676299 + -1.12082 1.41464 -1.82495 -0.717299 -0.125166 -0.685431 + -1.06981 1.35429 -1.81241 -0.23753 -0.775376 -0.585125 + -1.10887 1.36402 -1.79966 -0.471611 -0.630467 -0.616518 + -1.14166 1.3961 -1.79896 -0.72833 -0.303682 -0.614257 + -1.1536 1.37329 -1.7689 -0.797641 -0.374192 -0.473022 + -1.16897 1.41515 -1.74191 -0.967478 -0.131729 -0.215948 + -1.02125 1.36435 -1.83674 -0.175971 -0.734549 -0.655341 + -1.01555 1.35052 -1.81807 -0.107532 -0.847897 -0.519141 + -1.06411 1.34048 -1.79374 -0.130243 -0.877904 -0.460783 + -1.12081 1.34121 -1.76961 -0.391113 -0.683013 -0.616866 + -0.99208 1.36275 -1.84143 -0.224003 -0.731134 -0.644411 + -0.993649 1.35055 -1.82362 -0.224075 -0.842317 -0.490196 + -1.00441 1.33839 -1.79689 -0.0287457 -0.936412 -0.349722 + -1.01752 1.33057 -1.77356 0.129109 -0.99008 -0.0554308 + -1.07722 1.33266 -1.77041 -0.118343 -0.865469 -0.486783 + -0.98393 1.35994 -1.8427 -0.31843 -0.674411 -0.666162 + -0.985499 1.34774 -1.8249 -0.414596 -0.790654 -0.450529 + -0.98251 1.3384 -1.80245 -0.215971 -0.95673 -0.194997 + -0.974722 1.33694 -1.78108 -0.0578647 -0.982442 0.17737 + -0.963161 1.32996 -1.82532 -0.533246 -0.708516 -0.462226 + -0.975116 1.33601 -1.80524 -0.504604 -0.860644 -0.0683099 + -0.918743 1.29457 -1.81965 -0.224243 -0.692597 -0.685583 + -0.952777 1.31823 -1.80566 -0.666774 -0.741382 -0.0759341 + -0.967328 1.33454 -1.78386 -0.495941 -0.83553 0.2365 + -0.918915 1.28339 -1.80822 -0.344704 -0.832042 -0.434609 + -0.94631 1.31106 -1.78594 -0.7073 -0.680454 0.191596 + -0.941823 1.32009 -1.7633 -0.742413 -0.612218 0.27205 + -0.962841 1.34356 -1.76123 -0.45567 -0.809372 0.370515 + -0.912448 1.27623 -1.78851 -0.464107 -0.851731 -0.243226 + -0.905776 1.26502 -1.76626 -0.525256 -0.844972 -0.100638 + -0.908231 1.27295 -1.75308 -0.852086 -0.513351 0.102083 + -0.944279 1.32802 -1.75012 -0.77189 -0.60442 0.197136 + -0.873374 1.26773 -1.7878 0.120622 -0.762145 -0.63607 + -0.866702 1.25654 -1.76555 0.179958 -0.967861 -0.175672 + -0.853746 1.26272 -1.72861 0.36219 -0.930236 -0.0589842 + -0.902844 1.26036 -1.73079 -0.455028 -0.882391 -0.119733 + -0.906507 1.2704 -1.74915 -0.906012 -0.423252 -0.000438769 + -0.854407 1.25904 -1.69102 0.400661 -0.916198 0.00725012 + -0.903505 1.25667 -1.6932 -0.427851 -0.898359 -0.0994688 + -0.943571 1.31249 -1.6796 -0.81202 -0.569409 -0.128053 + -0.933747 1.30773 -1.71638 -0.830983 -0.537681 -0.142713 + -0.93741 1.31778 -1.73474 -0.82851 -0.538919 -0.152109 + -0.824142 1.30322 -1.61679 0.635607 -0.656789 0.40575 + -0.875339 1.25203 -1.6549 0.218927 -0.960509 0.171738 + -0.906429 1.25446 -1.66273 -0.443213 -0.896406 -0.00427416 + -0.828588 1.32435 -1.58429 0.604075 -0.563931 0.563094 + -0.893779 1.26871 -1.61192 0.138584 -0.882422 0.449584 + -0.924869 1.27115 -1.61975 -0.561155 -0.82311 0.0871518 + -0.946496 1.31028 -1.64912 -0.801549 -0.580988 -0.14132 + -0.806637 1.36818 -1.57736 0.752837 -0.299582 0.586078 + -0.888762 1.33938 -1.5282 0.446472 -0.501837 0.740826 + -0.898225 1.28984 -1.57942 0.236675 -0.79988 0.551522 + -0.931525 1.27846 -1.59554 -0.446088 -0.86093 0.244549 + -0.944885 1.30645 -1.6432 -0.818586 -0.564125 -0.108075 + -0.866811 1.38322 -1.52127 0.533514 -0.259367 0.805041 + -0.915406 1.33821 -1.5161 0.146542 -0.625799 0.766095 + -0.898161 1.30431 -1.5557 0.548481 -0.695978 0.463447 + -0.931461 1.29292 -1.57181 -0.134422 -0.885844 0.444084 + -0.89667 1.41305 -1.49754 0.483713 -0.132438 0.865149 + -0.926071 1.48754 -1.48244 0.363866 -0.0126134 0.931366 + -0.958812 1.47239 -1.46701 0.222013 0.168505 0.960373 + -0.929411 1.3979 -1.48212 0.464505 -0.134078 0.875361 + -0.917671 1.53559 -1.47976 0.320139 -0.170836 0.93184 + -0.992002 1.49626 -1.47072 -0.106889 0.113836 0.987733 + -0.975596 1.43157 -1.46301 0.148548 0.0180906 0.98874 + -0.985385 1.40246 -1.46142 0.133275 0.00861454 0.991042 + -0.9392 1.36879 -1.48052 0.529687 -0.136329 0.837166 + -0.909642 1.57166 -1.47418 0.323231 -0.241514 0.914982 + -0.967667 1.5725 -1.4625 -0.132686 -0.192944 0.972197 + -0.975695 1.53644 -1.46807 -0.0810722 -0.07865 0.9936 + -1.02872 1.5178 -1.48609 -0.506208 0.164417 0.846594 + -1.00879 1.45545 -1.46672 -0.239736 0.115339 0.963962 + -0.849331 1.64797 -1.4825 0.606455 -0.0838512 0.790684 + -0.921571 1.62542 -1.45391 0.311314 -0.261905 0.913504 + -0.96191 1.62178 -1.44692 -0.148253 -0.293165 0.944497 + -0.99954 1.58436 -1.4781 -0.583804 -0.0313831 0.811288 + -1.01241 1.55797 -1.48345 -0.520782 0.112509 0.846243 + -0.89595 1.71482 -1.44879 0.651254 -0.120181 0.749283 + -0.924839 1.70033 -1.42998 0.425196 -0.289024 0.857714 + -0.965178 1.6967 -1.42299 -0.10667 -0.376135 0.920404 + -0.993784 1.63365 -1.46253 -0.644593 -0.203386 0.736976 + -1.03451 1.61165 -1.51412 -0.76567 0.0762977 0.638692 + -0.878852 1.73262 -1.46788 0.867103 0.180607 0.464234 + -0.899094 1.78978 -1.42827 0.925539 -0.0306324 0.377411 + -0.911742 1.78053 -1.41565 0.698934 -0.269162 0.662603 + -0.940631 1.76602 -1.39685 0.447424 -0.394469 0.802624 + -0.899087 1.79644 -1.43839 0.936939 0.327141 -0.122981 + -0.906243 1.84754 -1.39768 0.951956 0.259521 -0.16257 + -0.906249 1.84265 -1.39025 0.942178 -0.120714 0.312617 + -0.918897 1.8334 -1.37762 0.707862 -0.371766 0.600601 + -0.915972 1.85595 -1.4105 0.774524 0.461932 -0.432125 + -0.911958 1.89358 -1.35878 0.950607 0.262781 -0.165201 + -0.911964 1.88869 -1.35134 0.943951 -0.153564 0.292189 + -0.921495 1.8817 -1.34177 0.713127 -0.417147 0.563417 + -0.940133 1.82274 -1.3638 0.475995 -0.476833 0.738959 + -0.932314 1.86519 -1.42462 0.52505 0.602032 -0.601564 + -0.935626 1.90917 -1.38255 0.514935 0.630654 -0.580618 + -0.919284 1.89993 -1.36844 0.773918 0.477572 -0.415903 + -0.923294 1.9384 -1.32966 0.767415 0.509108 -0.389721 + -0.915968 1.93204 -1.31999 0.95007 0.28164 -0.134336 + -0.953835 1.86938 -1.43022 0.0313139 0.700647 -0.712821 + -0.95189 1.91233 -1.3868 0.0400432 0.730366 -0.681882 + -0.952452 1.94884 -1.34504 0.0329559 0.76326 -0.645251 + -0.936187 1.94568 -1.34079 0.520211 0.657447 -0.545109 + -0.971735 1.91015 -1.38211 -0.330231 0.696033 -0.637562 + -0.968108 1.94712 -1.34135 -0.322806 0.729585 -0.602911 + -0.950922 1.97011 -1.31884 0.0509809 0.857286 -0.512311 + -0.939359 1.96785 -1.31586 0.480082 0.770957 -0.418506 + -0.926466 1.96057 -1.30472 0.729153 0.6365 -0.251403 + -0.982981 1.90748 -1.37727 -0.620831 0.594702 -0.510782 + -0.979354 1.94445 -1.3365 -0.620038 0.623844 -0.475785 + -0.966579 1.96839 -1.31515 -0.302998 0.828806 -0.470397 + -0.96174 1.9735 -1.30556 -0.206415 0.96463 -0.163957 + -0.952584 1.9745 -1.30772 0.0363779 0.986315 -0.16081 + -0.993755 1.85983 -1.41314 -0.93619 0.299033 -0.184735 + -0.988169 1.90367 -1.37124 -0.936612 0.299991 -0.181005 + -0.983448 1.94144 -1.33175 -0.932314 0.326099 -0.156365 + -0.974644 1.9664 -1.31195 -0.572853 0.746425 -0.338658 + -0.969805 1.9715 -1.30236 -0.434444 0.89926 -0.0509001 + -1.00188 1.79872 -1.4398 -0.984069 0.0783702 0.159582 + -0.994129 1.84866 -1.39787 -0.99149 0.0328186 0.125979 + -0.988447 1.89522 -1.35972 -0.993575 0.0199373 0.111409 + -0.983726 1.933 -1.32021 -0.990769 0.0350772 0.130948 + -0.978738 1.9634 -1.30719 -0.874648 0.484746 -0.00345629 + -1.01623 1.74048 -1.4822 -0.948702 0.168944 0.26725 + -0.995673 1.77835 -1.41304 -0.914287 -0.11021 0.389786 + -0.989565 1.83369 -1.3782 -0.927134 -0.14191 0.346821 + -0.983883 1.88026 -1.34004 -0.927613 -0.177096 0.328893 + -0.980124 1.92119 -1.3047 -0.926822 -0.161084 0.339194 + -1.01002 1.72012 -1.45543 -0.884363 -0.0721925 0.461183 + -0.986358 1.70191 -1.42978 -0.597492 -0.306496 0.740988 + -0.983694 1.76718 -1.39836 -0.637187 -0.33585 0.693684 + -0.977586 1.82251 -1.36353 -0.632741 -0.390838 0.668494 + -0.974832 1.87181 -1.32896 -0.641643 -0.441238 0.627378 + -1.01744 1.65185 -1.48818 -0.816826 -0.104458 0.567348 + -0.962515 1.76197 -1.39159 -0.0408746 -0.466521 0.883565 + -0.962017 1.81868 -1.35854 -0.0486911 -0.536721 0.842354 + -1.04738 1.58525 -1.51946 -0.709079 0.214903 0.671583 + -1.06727 1.53607 -1.52473 -0.704163 0.22816 0.672382 + -1.04955 1.45545 -1.48666 -0.551179 0.162455 0.818419 + -1.10264 1.57041 -1.58462 -0.773551 0.281002 0.568029 + -1.1312 1.49015 -1.58202 -0.801776 0.204968 0.561376 + -1.0881 1.47372 -1.5253 -0.70442 0.195132 0.682434 + -1.08911 1.40826 -1.51204 -0.745394 0.0500508 0.664743 + -1.06464 1.41698 -1.4888 -0.596013 0.102991 0.796342 + -1.13073 1.57656 -1.62691 -0.802559 0.333469 0.494669 + -1.15929 1.49629 -1.62432 -0.877949 0.0822719 0.471633 + -1.16822 1.44519 -1.65465 -0.962054 -0.0510071 0.26805 + -1.16132 1.42747 -1.62544 -0.952895 -0.0187484 0.30272 + -1.14646 1.44239 -1.58743 -0.886167 0.0826178 0.455941 + -1.18177 1.46764 -1.69911 -0.999475 -0.00395709 0.0321609 + -1.16971 1.38401 -1.71198 -0.980138 -0.195089 -0.0356455 + -1.16281 1.36629 -1.68276 -0.954273 -0.243047 0.174045 + -1.15087 1.38488 -1.61849 -0.902374 -0.258588 0.344752 + -1.13601 1.3998 -1.58048 -0.859078 -0.156505 0.487331 + -1.15435 1.34214 -1.73898 -0.838713 -0.427998 -0.336717 + -1.15551 1.33786 -1.69304 -0.908353 -0.40434 0.106789 + -1.14358 1.35647 -1.62877 -0.842491 -0.434269 0.318779 + -1.12177 1.38211 -1.56183 -0.849258 -0.147795 0.50687 + -1.10336 1.42596 -1.53069 -0.776559 0.0606686 0.627116 + -1.14122 1.31857 -1.73434 -0.532018 -0.776227 -0.338274 + -1.14238 1.31428 -1.68841 -0.53909 -0.8226 0.180862 + -1.13185 1.33538 -1.63701 -0.478529 -0.805413 0.349743 + -1.123 1.3416 -1.60631 -0.49341 -0.837358 0.235324 + -1.13473 1.36269 -1.59807 -0.932562 -0.184748 0.310156 + -1.09764 1.31002 -1.73515 -0.0600342 -0.968137 -0.24312 + -1.08148 1.30923 -1.71925 0.173325 -0.957252 -0.231574 + -1.09911 1.30895 -1.69599 0.0262624 -0.986821 0.159673 + -1.08858 1.33004 -1.64459 0.0642073 -0.951029 0.302361 + -1.08388 1.33706 -1.61943 0.00117658 -0.99386 0.110644 + -1.01234 1.33979 -1.75085 0.268562 -0.959749 0.0821983 + -0.998055 1.34162 -1.73825 0.217022 -0.957711 -0.188919 + -1.08335 1.31185 -1.72254 0.428468 -0.728845 -0.534041 + -0.969543 1.34615 -1.75837 0.0101574 -0.956433 0.291774 + -0.965886 1.35 -1.74384 -0.0307256 -0.999527 -0.00144084 + -0.995594 1.34006 -1.73234 0.173426 -0.844825 -0.506155 + -0.959184 1.34741 -1.74669 -0.5284 -0.828906 0.183597 + -0.963425 1.34844 -1.73791 -0.140448 -0.919039 -0.368294 + -0.99372 1.33744 -1.72904 0.0845933 -0.640538 -0.763253 + -0.990595 1.33114 -1.72509 0.13701 -0.886124 -0.442733 + -1.00822 1.33085 -1.70182 0.19308 -0.964863 0.17821 + -0.95694 1.34591 -1.74022 -0.612021 -0.784068 -0.103283 + -0.960751 1.3446 -1.73259 -0.203137 -0.7347 -0.647264 + -0.957626 1.33829 -1.72863 -0.22033 -0.861657 -0.457167 + -0.960991 1.33745 -1.70855 -0.107104 -0.993787 0.0302585 + -1.01772 1.33528 -1.66846 0.135129 -0.971788 0.19331 + -0.942035 1.32651 -1.74363 -0.811014 -0.581756 0.0617796 + -0.954266 1.34206 -1.73489 -0.641603 -0.690389 -0.334229 + -0.951365 1.33587 -1.72993 -0.6809 -0.684109 -0.261477 + -0.95473 1.33503 -1.70984 -0.621785 -0.775724 -0.107869 + -0.970486 1.34187 -1.67517 -0.0865242 -0.99325 0.0772496 + -0.940311 1.32397 -1.7397 -0.825138 -0.555887 -0.100681 + -0.964555 1.33979 -1.67305 -0.588996 -0.805096 -0.070021 + -0.975047 1.343 -1.65421 -0.106749 -0.994286 0.000790287 + -0.969116 1.34092 -1.65209 -0.563581 -0.810951 -0.15727 + -0.975156 1.34222 -1.6462 -0.256534 -0.918018 -0.302379 + -1.01302 1.3423 -1.6433 0.0684837 -0.994645 0.0774064 + -0.967505 1.3371 -1.64616 -0.647959 -0.704487 -0.289564 + -0.972093 1.32925 -1.62651 -0.345998 -0.785019 -0.513839 + -1.00627 1.33112 -1.61759 -0.16015 -0.833879 -0.528202 + -1.01313 1.34151 -1.63528 -0.0436079 -0.956924 -0.287044 + -0.95154 1.31375 -1.61899 -0.655142 -0.70744 -0.265174 + -0.964442 1.32413 -1.62648 -0.415925 -0.775437 -0.475083 + -0.966954 1.3028 -1.59418 -0.0525192 -0.818805 -0.571665 + -1.00113 1.30466 -1.58525 -0.226532 -0.810941 -0.539497 + -0.946222 1.29217 -1.58454 -0.386929 -0.921374 -0.0368235 + -0.959124 1.30255 -1.59204 -0.133294 -0.838926 -0.52767 + -0.965185 1.29072 -1.57667 0.00321453 -0.875983 -0.482332 + -0.99787 1.29022 -1.56055 -0.215064 -0.876743 -0.430197 + -1.05856 1.31114 -1.56816 -0.34662 -0.865903 -0.360648 + -0.939566 1.30239 -1.55634 -0.38153 -0.701608 0.601815 + -0.957355 1.29046 -1.57453 -0.0240168 -0.983625 0.178618 + -0.961993 1.29199 -1.57414 0.182617 -0.817752 0.545832 + -0.964165 1.28973 -1.57497 0.433743 -0.878655 -0.199582 + -0.996851 1.28924 -1.55885 -0.0132995 -0.987392 -0.157734 + -0.924805 1.30314 -1.54361 -0.13515 -0.744394 0.65392 + -0.921874 1.33846 -1.52023 -0.14568 -0.778188 0.610901 + -0.946034 1.30264 -1.56046 -0.34344 -0.565627 0.749743 + -0.950673 1.30417 -1.56006 0.0581413 -0.778074 0.625476 + -0.95556 1.31203 -1.54408 0.373475 -0.801729 0.466634 + -0.977756 1.2971 -1.54699 0.516219 -0.732936 0.443085 + -0.979928 1.29485 -1.54782 0.413325 -0.843953 0.341914 + -1.03297 1.28272 -1.52354 -0.189174 -0.978299 0.084523 + -1.05531 1.2967 -1.54347 -0.565358 -0.794439 -0.221892 + -0.926761 1.34633 -1.50425 -0.144246 -0.947473 0.285463 + -0.965624 1.33399 -1.49664 0.395119 -0.790783 0.467486 + -0.987821 1.31907 -1.49956 0.489562 -0.730359 0.476345 + -1.01605 1.28833 -1.51252 0.288612 -0.884435 0.366711 + -1.04665 1.2969 -1.50157 -0.532196 -0.687789 0.493673 + -0.936756 1.35346 -1.48437 0.581016 -0.413242 0.701179 + -0.975619 1.34114 -1.47677 0.380523 -0.763947 0.52114 + -0.99798 1.32681 -1.47853 0.436767 -0.698445 0.566931 + -1.02621 1.29607 -1.4915 0.0172932 -0.790759 0.611884 + -0.995526 1.34064 -1.46447 0.2745 -0.432883 0.85864 + -1.01789 1.32631 -1.46624 -0.0142333 -0.495639 0.868412 + -1.03833 1.32715 -1.47631 -0.540477 -0.35733 0.761708 + -1.06899 1.31088 -1.52149 -0.716384 -0.627478 0.305066 + -0.99797 1.35597 -1.46064 0.141579 -0.118927 0.982757 + -1.02708 1.35498 -1.46118 -0.341749 -0.06788 0.937337 + -1.06688 1.337 -1.49782 -0.713885 -0.278871 0.642339 + -1.09143 1.34996 -1.52572 -0.79421 -0.296403 0.530449 + -1.09355 1.32383 -1.54939 -0.716845 -0.681378 0.147839 + -1.01449 1.40147 -1.46196 -0.216498 0.182084 0.959153 + -1.05562 1.36483 -1.48268 -0.632206 -0.0377527 0.77388 + -1.02388 1.41698 -1.46886 -0.355908 0.101447 0.928998 + -1.06501 1.38033 -1.48959 -0.620866 -0.0466155 0.78253 + -1.08948 1.37162 -1.51283 -0.725051 -0.191942 0.661406 + -1.12372 1.36045 -1.57473 -0.840676 -0.361587 0.403136 + -1.10928 1.33905 -1.57589 -0.644088 -0.754409 0.12656 + -1.12029 1.3413 -1.59924 -0.509695 -0.845123 0.161175 + -1.08116 1.33676 -1.61236 -0.137504 -0.971094 -0.195111 + -1.0743 1.32636 -1.59466 -0.288154 -0.882814 -0.370955 + -0.942731 1.87105 -1.32796 0.470613 -0.53673 0.700317 + -0.959263 1.86798 -1.32398 -0.0407287 -0.603519 0.796307 + -0.971073 1.91275 -1.29362 -0.629854 -0.437929 0.641484 + -0.925505 1.92119 -1.30457 0.708799 -0.410987 0.573318 + -0.942258 1.91278 -1.29366 0.474868 -0.529428 0.702998 + -0.95879 1.90972 -1.28968 -0.0502332 -0.596344 0.801156 + -0.968843 1.93965 -1.27537 -0.59362 -0.156437 0.789394 + -0.915973 1.92818 -1.31413 0.9417 -0.13543 0.307993 + -0.921247 1.95218 -1.29197 0.878811 0.0971569 0.467175 + -0.928037 1.94721 -1.28517 0.67805 -0.143793 0.720813 + -0.94479 1.9388 -1.27427 0.429764 -0.253191 0.866716 + -0.956559 1.93662 -1.27144 -0.0317741 -0.296374 0.954543 + -0.921242 1.95604 -1.29783 0.888691 0.458377 0.0109046 + -0.928256 1.96346 -1.29133 0.661668 0.710279 0.240207 + -0.928259 1.9612 -1.2879 0.651468 0.469038 0.596316 + -0.935049 1.95622 -1.2811 0.489499 0.261265 0.831944 + -0.93348 1.96797 -1.29823 0.54589 0.837766 0.0123134 + -0.937365 1.96768 -1.28845 0.270531 0.86261 0.427454 + -0.937368 1.96542 -1.28502 0.262033 0.698448 0.665965 + -0.947165 1.96051 -1.27864 0.140392 0.633998 0.760485 + -0.944847 1.95131 -1.27473 0.337241 0.215795 0.916352 + -0.94102 1.97224 -1.30474 0.383802 0.918964 -0.0905595 + -0.944905 1.97195 -1.29496 0.10464 0.94009 0.324471 + -0.951054 1.97051 -1.29305 0.0350931 0.868002 0.495319 + -0.953314 1.95908 -1.27673 0.0168759 0.606118 0.795196 + -0.956616 1.94912 -1.2719 -0.0406626 0.213546 0.976086 + -0.954131 1.97383 -1.29744 0.236857 0.933192 0.270279 + -0.963575 1.96415 -1.28342 -0.26646 0.715367 0.645948 + -0.960497 1.96084 -1.27902 -0.193969 0.652721 0.732347 + -0.963799 1.9509 -1.2742 -0.405418 0.292556 0.866053 + -0.975262 1.94566 -1.28323 -0.861922 0.0563489 0.5039 + -0.963287 1.97281 -1.29528 -0.1506 0.940355 0.305045 + -0.965681 1.97106 -1.2925 -0.311302 0.810207 0.496644 + -0.972324 1.96381 -1.29113 -0.71808 0.511063 0.472415 + -0.970218 1.95691 -1.28205 -0.654836 0.419876 0.628405 + -0.978864 1.95746 -1.29875 -0.932867 0.239561 0.269016 + -0.972199 1.96974 -1.29958 -0.659069 0.721789 0.211303 + -0.789559 1.94929 -1.44557 0.797223 -0.245734 0.551407 + -0.806352 1.93965 -1.43468 0.475559 -0.412121 0.777174 + -0.788254 2.00064 -1.42894 0.972321 0.0246218 0.23235 + -0.795539 1.99244 -1.41536 0.787449 -0.233208 0.57056 + -0.808788 1.98483 -1.40677 0.478136 -0.401277 0.781257 + -0.813198 2.01283 -1.39175 0.406694 -0.104484 0.90757 + -0.82469 2.01045 -1.38907 0.0617445 -0.165163 0.984332 + -0.795223 2.03311 -1.42523 0.855236 0.517339 -0.0305339 + -0.794767 2.02627 -1.40999 0.883444 0.28071 0.375139 + -0.799949 2.02044 -1.40034 0.713175 0.0680769 0.697673 + -0.809004 2.04415 -1.42744 0.459793 0.881303 -0.109063 + -0.802656 2.03978 -1.4173 0.609237 0.770695 0.186706 + -0.802389 2.03578 -1.4084 0.586213 0.66012 0.469675 + -0.807571 2.02994 -1.39874 0.454208 0.468879 0.757527 + -0.822531 2.04825 -1.42455 0.0694523 0.991485 0.110152 + -0.813634 2.04593 -1.41883 0.246162 0.940865 0.232762 + -0.813367 2.04193 -1.40993 0.219155 0.818463 0.531121 + -0.819485 2.04025 -1.40646 0.0644264 0.872314 0.484683 + -0.817687 2.0367 -1.40026 0.173607 0.754034 0.633477 + -0.831042 2.04727 -1.42219 -0.0937982 0.973253 0.209717 + -0.837159 2.04559 -1.41873 -0.214142 0.939507 0.26734 + -0.841188 2.04106 -1.40945 -0.283642 0.856168 0.431883 + -0.83939 2.03751 -1.40323 -0.243246 0.769416 0.590619 + -0.825435 2.03225 -1.39523 0.0387021 0.597015 0.801296 + -0.815319 2.0255 -1.39372 0.278633 0.332372 0.901051 + -0.845322 2.02775 -1.39775 -0.484795 0.411847 0.771593 + -0.83427 2.03325 -1.39638 -0.146429 0.66012 0.73675 + -0.835646 2.02411 -1.39219 -0.227252 0.297854 0.927167 + -0.826811 2.02311 -1.39104 0.022814 0.272858 0.961784 + 0 1.88767 -3.35525 0.954836 0.139621 -0.262288 + -0.00609 1.89928 -3.38721 0.73586 0.391916 -0.552188 + -0.00609 1.92264 -3.37029 0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 0.995304 0.0615783 -0.0746866 + -0.00609 1.93619 -3.35816 0.804944 0.379203 -0.456367 + 0 1.92457 -3.32621 0.995095 0.069045 -0.0708434 + 0 1.97685 -3.27268 0.992394 0.102252 -0.0685482 + -0.00609 1.98847 -3.30463 0.876866 0.357759 -0.321114 + -0.014034 2.05323 -3.24402 0.847172 0.410905 -0.336834 + 0 2.00459 -3.23674 0.987841 0.135558 -0.0761145 + -0.036542 2.02576 -3.30766 0.469584 0.580569 -0.665154 + -0.044486 2.09052 -3.24705 0.596458 0.635622 -0.490125 + -0.014034 2.08098 -3.20808 0.881133 0.428775 -0.199391 + -0.023387 2.12143 -3.14955 0.815642 0.528358 -0.235726 + -0.011587 2.09962 -3.13161 0.964855 0.259286 -0.0427265 + 0 1.98306 -3.19152 0.996986 -0.00648198 0.0773058 + -0.049274 1.91604 -3.38694 0.229826 0.457821 -0.858825 + -0.079725 2.04251 -3.30739 0.188988 0.587024 -0.787202 + -0.0805 2.12506 -3.23831 0.409341 0.71635 -0.565051 + -0.03972 2.11125 -3.19831 0.626549 0.689362 -0.363617 + -0.049073 2.1517 -3.13979 0.618566 0.697315 -0.362115 + -0.136609 2.08013 -3.29146 0.0487676 0.600445 -0.798177 + -0.137384 2.16267 -3.22238 0.22175 0.733824 -0.642129 + -0.075734 2.14578 -3.18957 0.547429 0.728775 -0.411349 + -0.075698 2.17553 -3.13363 0.573402 0.726165 -0.379335 + -0.070733 2.20765 -3.06834 0.585511 0.678113 -0.444229 + -0.128582 1.91321 -3.39442 0.0116184 0.419262 -0.907791 + -0.194055 1.90173 -3.39661 -0.116477 0.390591 -0.913166 + -0.202082 2.06864 -3.29366 -0.12001 0.562741 -0.817876 + -0.183074 2.18144 -3.21184 -0.0442381 0.828972 -0.557538 + -0.106772 2.17875 -3.1773 0.434574 0.770525 -0.4663 + -0.033943 1.8295 -3.41372 0.518421 -0.283289 -0.806837 + -0.113252 1.82668 -3.4212 0.061524 -0.295893 -0.953238 + -0.168645 1.82333 -3.42097 -0.0308865 -0.303605 -0.952297 + -0.232151 1.89626 -3.39129 -0.253492 0.360478 -0.897662 + 0 1.9393 -3.21829 0.982047 -0.14436 0.121427 + 0 1.88998 -3.27556 0.964815 -0.232589 0.122617 + 0 1.86404 -3.32057 0.952614 -0.300232 0.0488543 + 0.00609 1.89928 -3.38721 1 0 0 + 0.00609 1.92264 -3.37029 1 0 0 + 0.00609 1.98847 -3.30463 1 0 0 + 0.00609 1.93619 -3.35816 1 0 0 + 0.049543 1.96837 -1.07328 -0.995507 -0.0901895 -0.0288196 + 0.016514 2.25648 -0.879903 -0.99532 -0.0892786 -0.0369856 + 1.6236 1.20702 0.333423 0.510365 0.290661 -0.809348 + 1.58944 1.14183 0.294724 0.959968 -0.235533 -0.151609 + 1.54797 1.02022 0.202565 0.523282 -0.620808 0.583757 + 1.66144 1.21731 0.386587 0.829473 0.000741546 -0.558546 + 1.63799 1.14373 0.332233 0.716039 0.258524 -0.648423 + 1.59651 1.02203 0.240025 0.672063 0.290901 -0.680961 + 1.54797 1.02022 0.202565 0.226642 0.528293 -0.818254 + 1.6956 1.2825 0.425286 0.827912 -0.190931 -0.527359 + 1.73453 1.32555 0.469515 0.59851 -0.0676555 -0.798253 + 1.692 1.22698 0.438445 0.845628 -0.195696 -0.496605 + 1.66855 1.1534 0.384091 0.935831 -0.0489318 -0.349036 + 1.61359 1.00509 0.256167 0.913109 0.016752 -0.40737 + 1.77486 1.40457 0.487045 0.498028 0.350576 -0.793136 + 1.81379 1.44763 0.531275 0.346877 -0.0339696 -0.937295 + 1.58713 1.18209 0.312985 -0.214621 0.648706 -0.73015 + 1.73839 1.37974 0.466657 -0.0308607 0.628315 -0.777347 + 1.51058 1.01353 0.204356 -0.374377 0.604993 -0.702727 + 1.54999 1.18402 0.345052 -0.372224 0.60787 -0.701387 + 1.53494 1.20168 0.361265 -0.208387 0.42428 -0.881227 + 1.72335 1.39731 0.482819 0.304993 0.269628 -0.913389 + 1.51479 0.962226 0.156811 -0.157681 0.565375 -0.809622 + 1.45289 0.782328 0.067205 -0.72597 0.439872 -0.528659 + 1.47344 1.01536 0.236373 -0.883827 0.40215 -0.239009 + 1.47932 1.00805 0.26964 -0.944953 -0.0140928 0.326903 + 1.46916 0.732146 0.009719 0.102647 0.384459 -0.917418 + 1.4571 0.731029 0.019659 -0.6994 0.421026 -0.57756 + 1.43836 0.646562 -0.011843 -0.689147 -0.261958 -0.675614 + 1.44014 0.777232 0.086428 -0.967332 0.207528 -0.145603 + 1.44603 0.769833 0.119645 -0.805823 -0.299857 0.510622 + 1.50234 0.79014 0.055474 0.350218 0.433111 -0.830519 + 1.45043 0.647681 -0.021782 -0.393666 -0.207783 -0.895463 + 1.45404 0.627251 0.013604 -0.290697 -0.932272 0.215325 + 1.42562 0.641468 0.007382 -0.886585 -0.459955 -0.0490732 + 1.51852 0.785997 0.06025 0.577753 0.321199 -0.750355 + 1.48511 0.641076 -0.02074 0.425259 -0.331964 -0.841994 + 1.46893 0.645218 -0.025515 0.351453 0.393669 -0.849415 + 1.5356 0.768969 0.076342 0.826409 0.117779 -0.550615 + 1.49533 0.629724 -0.003278 0.636739 -0.730776 -0.246027 + 1.47254 0.624788 0.009871 0.0761257 -0.98873 0.128911 + 1.46893 0.645218 -0.025515 -0.0765132 -0.866848 -0.492667 + 1.54581 0.757617 0.093804 0.960075 -0.197828 -0.197786 + 1.54175 0.759103 0.13323 0.734959 -0.571755 0.364598 + 1.51896 0.754167 0.146379 0.402359 -0.716633 0.569687 + 1.46893 0.645218 -0.025515 -0.20936 -0.855931 -0.472811 + 1.61953 1.00237 0.294474 0.955052 -0.29502 -0.0289627 + 1.61547 1.00377 0.333851 0.872187 -0.461668 0.16172 + 1.59729 0.998827 0.391816 0.627257 -0.656573 0.418881 + 1.58579 1.01838 0.423353 -0.192795 -0.685146 0.702428 + 1.50747 0.773805 0.177967 -0.206319 -0.667966 0.715021 + 1.67448 1.15068 0.422399 0.94249 -0.303089 -0.140891 + 1.67055 1.13745 0.474519 0.812658 -0.580282 0.0534738 + 1.65236 1.1325 0.532484 0.499967 -0.79345 0.347087 + 1.6239 1.12854 0.542745 -0.22435 -0.727669 0.648201 + 1.5559 1.00482 0.38144 -0.696829 -0.400836 0.594778 + 1.71906 1.19827 0.504771 0.795508 -0.541855 -0.27122 + 1.71512 1.18512 0.556941 0.593966 -0.802384 -0.0581649 + 1.69311 1.18699 0.618116 0.136508 -0.989503 0.0474213 + 1.66465 1.18294 0.628327 0.200871 -0.977265 0.0678582 + 1.59401 1.11498 0.500832 -0.536172 -0.561187 0.630547 + 1.76075 1.29119 0.47323 0.475269 -0.3485 -0.807878 + 1.78781 1.26248 0.539557 0.424672 -0.579949 -0.695207 + 1.75006 1.18048 0.619176 -0.225521 -0.899222 -0.374887 + 1.7667 1.31913 0.465227 0.11062 0.0739337 -0.991109 + 1.93628 1.39256 0.520656 0.356604 -0.348769 -0.866714 + 1.99104 1.3952 0.534275 0.362224 -0.0715316 -0.929342 + 1.84258 1.26504 0.553125 0.0784366 -0.223787 -0.971477 + 1.82655 1.19522 0.562452 -0.2759 -0.454501 -0.84694 + 1.81123 1.37244 0.505908 -0.110928 0.598447 -0.793445 + 1.94223 1.4205 0.512653 0.241929 0.0903826 -0.966075 + 2.0225 1.50484 0.536169 0.469032 -0.0321816 -0.882595 + 2.02235 1.43909 0.554254 0.998357 -0.0372874 -0.0434996 + 1.9796 1.30111 0.527655 0.0897314 0.0114527 -0.9959 + 1.77906 1.37894 0.510245 0.454176 0.201232 -0.867888 + 1.83752 1.41218 0.525862 -0.0167261 0.380014 -0.924829 + 1.96852 1.46025 0.532606 -0.280149 0.456054 -0.844708 + 1.87225 1.48096 0.54694 0.239515 -0.124146 -0.962923 + 1.92623 1.52564 0.550554 0.172475 -0.161453 -0.971692 + 2.05331 1.58948 0.539771 0.54734 -0.332092 -0.768202 + 2.06414 1.60558 0.55548 0.780939 -0.375439 0.49918 + 2.03333 1.52095 0.551879 0.927057 -0.258818 0.271255 + 1.95708 1.57075 0.541413 0.0655887 -0.168645 -0.983492 + 2.08416 1.6346 0.53063 0.567752 -0.724193 -0.391411 + 2.11451 1.66753 0.53599 0.666764 -0.427903 0.610184 + 2.02913 1.63205 0.580633 0.618854 -0.235073 0.749506 + 1.97252 1.54083 0.60224 0.710247 -0.160271 0.685465 + 1.95975 1.6027 0.539277 -0.0294818 0.0429675 -0.998641 + 2.14566 1.68514 0.49968 0.471094 -0.603399 -0.643414 + 2.17601 1.71808 0.505039 0.493545 -0.803153 0.333705 + 1.76554 1.46641 0.498737 0.555026 -0.166265 -0.815048 + 1.98658 1.67634 0.551519 0.0189887 -0.0624135 -0.99787 + 2.14832 1.71718 0.497593 -0.0606716 -0.0515479 -0.996826 + 2.17601 1.71808 0.505039 0.261306 -0.0843447 -0.961564 + 1.56869 1.32141 0.392478 0.470856 -0.431441 -0.769515 + 1.60429 1.36788 0.362601 0.509988 -0.43286 -0.743333 + 1.79238 1.54006 0.510979 0.368331 -0.00141475 -0.929694 + 1.52649 1.25232 0.376561 -0.192984 0.279094 -0.940672 + 1.46161 1.25622 0.403405 -0.330055 0.398679 -0.85564 + 1.48532 1.13277 0.359413 -0.976364 -0.00819381 -0.215976 + 1.47688 1.18341 0.374709 -0.843832 0.154716 -0.51382 + 1.47147 1.2329 0.468794 -0.970484 -0.240582 -0.016795 + 1.46161 1.25622 0.403405 -0.182658 -0.93444 -0.30571 + 1.52888 1.11144 0.419164 -0.746584 -0.541723 0.386197 + 1.48992 1.15558 0.452516 -0.822669 -0.532214 0.19991 + 1.48452 1.20507 0.546602 -0.87594 -0.449635 0.174809 + 1.4716 1.28252 0.647242 -0.84839 -0.525813 0.0612872 + 1.46174 1.30584 0.581852 -0.861665 -0.490563 0.12993 + 1.46161 1.25622 0.403405 -0.971142 -0.229598 0.0645564 + 1.52288 0.986717 0.329392 -0.765954 -0.330527 0.551422 + 1.55706 1.1107 0.47205 -0.537589 -0.644784 0.543371 + 1.5181 1.15484 0.505402 -0.489018 -0.784974 0.380363 + 1.47445 0.755618 0.125868 -0.576922 -0.479247 0.661425 + 1.46893 0.645218 -0.025515 -0.105967 0.503593 -0.857417 + 1.58083 1.16837 0.550749 -0.21705 -0.88192 0.418456 + 1.58246 1.19137 0.640725 -0.43872 -0.885924 0.150543 + 1.51974 1.17783 0.595377 -0.45268 -0.838773 0.302557 + 1.51282 1.25382 0.698348 -0.681814 -0.722766 0.11287 + 1.61778 1.17266 0.579532 -0.145801 -0.943844 0.296481 + 1.61781 1.15953 0.666276 -0.0959474 -0.982855 -0.15745 + 1.57418 1.16189 0.764578 -0.656618 -0.640319 -0.398554 + 1.54804 1.22667 0.747174 -0.744862 -0.641889 -0.182097 + 1.4986 1.24995 0.798455 -0.203004 -0.719298 -0.664379 + 1.66467 1.16989 0.715122 -0.293473 -0.835617 -0.464346 + 1.60952 1.13005 0.79013 -0.62645 -0.479115 -0.614824 + 1.54296 1.11265 0.844866 -0.310264 -0.353472 -0.882493 + 1.51682 1.17743 0.827462 -0.325504 -0.413572 -0.850297 + 1.6787 1.12823 0.732476 -0.163096 -0.590504 -0.790383 + 1.61213 1.05113 0.783223 -0.548869 -0.241584 -0.800238 + 1.5683 0.988111 0.841178 -0.547422 0.0486342 -0.835442 + 1.56569 1.06703 0.848084 -0.525994 -0.0993635 -0.844664 + 1.45821 0.993018 0.875279 -0.0813083 -0.209352 -0.974454 + 1.72804 1.18235 0.680351 -0.155506 -0.879822 -0.449146 + 1.68426 1.0677 0.780728 -0.125696 -0.429738 -0.894162 + 1.62616 1.00947 0.800577 -0.440865 -0.10875 -0.890961 + 1.56293 0.938751 0.83707 -0.558799 0.180336 -0.809458 + 1.48094 0.947396 0.878496 -0.109455 0.0458741 -0.992932 + 1.79385 1.1297 0.65013 -0.628969 -0.456384 -0.629374 + 1.73359 1.12172 0.728555 -0.484665 -0.476802 -0.733321 + 1.74233 1.05453 0.745943 -0.701051 -0.139494 -0.699335 + 1.67503 0.993074 0.804182 -0.147553 -0.213552 -0.965724 + 1.60738 0.938317 0.794822 -0.189863 -0.0721526 -0.979156 + 1.87035 1.14444 0.593406 -0.490213 -0.410335 -0.768971 + 1.8714 1.0663 0.595953 -0.6176 0.0565013 -0.78446 + 1.80259 1.06251 0.667518 -0.756807 -0.0514879 -0.651608 + 1.95605 1.14271 0.540193 -0.166259 -0.0730329 -0.983374 + 1.9571 1.06466 0.54279 -0.26905 0.113571 -0.956407 + 1.93511 0.978054 0.527395 -0.350577 0.23699 -0.906053 + 1.86448 0.985962 0.583301 -0.651692 0.209617 -0.728944 + 1.79567 0.982171 0.654865 -0.797821 0.127589 -0.589238 + 1.96358 1.2312 0.53693 -0.005607 -0.0794771 -0.996821 + 2.04117 1.26221 0.547429 0.52779 0.198538 -0.825846 + 2.03364 1.17372 0.55069 0.254421 0.0580307 -0.965351 + 2.05537 1.09401 0.543158 0.214348 0.118331 -0.969563 + 2.01091 1.34499 0.547634 0.81624 0.127041 -0.563572 + 2.03594 1.30382 0.610558 0.68583 0.48723 -0.540595 + 2.11727 1.24118 0.595449 0.471294 0.349728 -0.809674 + 2.139 1.16138 0.587867 0.408253 0.205988 -0.889325 + 2.00568 1.3866 0.610764 0.8956 0.389303 -0.215274 + 2.10772 1.36445 0.683332 0.390779 0.544198 -0.742388 + 2.18905 1.30173 0.668173 0.378002 0.493255 -0.783462 + 2.24957 1.22143 0.659059 0.45356 0.315919 -0.833354 + 2.17508 1.07656 0.587571 0.400354 0.195079 -0.895355 + 1.96154 1.45906 0.604665 0.906871 0.294318 0.3016 + 1.95162 1.54327 0.695611 0.848633 0.372677 -0.375412 + 1.99576 1.4709 0.701759 0.63831 0.508945 -0.577525 + 1.93662 1.58282 0.663307 0.960497 -0.0456671 0.274518 + 1.93684 1.67183 0.814343 0.739532 0.196784 -0.643714 + 2.03334 1.60485 0.811952 0.408198 0.516888 -0.752463 + 2.09902 1.56519 0.821239 0.367379 0.493529 -0.788328 + 2.06144 1.43124 0.711046 0.395982 0.556402 -0.73049 + 1.99323 1.67405 0.641699 0.67895 -0.496368 0.540967 + 1.92184 1.71138 0.78204 0.919819 -0.383088 -0.0847195 + 2.03223 1.70722 0.876638 0.371309 0.231117 -0.899285 + 2.12873 1.64024 0.874247 0.273064 0.369404 -0.888244 + 2.0795 1.694 0.561142 0.541121 -0.520916 0.660178 + 2.03537 1.72045 0.660322 0.397973 -0.822373 0.406595 + 1.96398 1.75787 0.800712 0.625753 -0.757657 -0.185443 + 2.0187 1.73586 0.876834 0.549683 -0.251798 -0.796522 + 2.35291 1.59576 0.903702 0.0285107 -0.0624801 -0.997639 + 2.17601 1.71808 0.505039 0.52057 -0.115346 0.845992 + 1.46161 1.25622 0.403405 0.349143 -0.681253 -0.643423 + 1.49721 1.30268 0.373527 -0.37272 -0.374124 -0.849182 + 1.59486 1.39116 0.355271 0.0661859 0.295105 -0.95317 + 1.78295 1.56325 0.503601 0.316794 0.174222 -0.932356 + 1.51069 1.33656 0.353853 0.384043 -0.57319 -0.723854 + 0.671558 1.21943 0.636123 0.983072 0.18314 0.00534615 + 0.677479 1.19172 0.631921 0.799627 0.0806201 0.595061 + 0.703623 1.13731 0.604161 0.7663 0.0905741 -0.636067 + 0.664457 1.19876 0.575727 0.786868 0.20078 -0.583546 + 0.663568 1.37192 0.710797 0.897814 -0.419412 0.134249 + 0.631551 1.33229 0.770247 0.955351 -0.0690554 -0.287291 + 0.637472 1.30458 0.766046 0.553653 0.636433 -0.537048 + 0.677479 1.19172 0.631921 0.973251 0.187902 0.132193 + 0.623492 1.11123 0.541927 0.564488 -0.20943 -0.798431 + 0.60316 1.24951 0.528621 0.62607 0.163866 -0.762354 + 0.656467 1.35125 0.650401 0.909619 0.108296 -0.40108 + 0.694071 1.41874 0.7437 0.588084 -0.775142 -0.230894 + 0.658484 1.06232 0.591236 0.561809 -0.332218 -0.757629 + 0.532736 1.01616 0.534984 0.473469 -0.412744 -0.77812 + 0.696479 1.01014 0.640421 0.599495 -0.459591 -0.655273 + 0.567728 0.967259 0.584293 0.476373 -0.563204 -0.675182 + 0.741618 1.08512 0.653345 0.824359 -0.0358048 -0.564934 + 0.721161 0.972399 0.702789 0.600172 -0.566654 -0.564532 + 0.592998 0.932483 0.647929 0.46096 -0.676248 -0.574633 + 0.489273 0.883681 0.623055 0.38148 -0.760402 -0.525607 + 0.464003 0.918458 0.55942 0.387628 -0.676796 -0.625853 + 0.713836 1.20864 0.668001 0.550632 0.327563 -0.767793 + 0.735281 1.17415 0.702152 0.570207 0.00791372 -0.821463 + 0.763063 1.05071 0.687546 0.771286 -0.231551 -0.592876 + 0.738363 0.929695 0.768755 0.54624 -0.689676 -0.475361 + 0.61768 0.894655 0.710248 0.432531 -0.766956 -0.47402 + 0.677479 1.19172 0.631921 0.432823 0.565969 -0.701671 + 0.687693 1.26305 0.695763 -0.126491 0.626772 -0.768867 + 0.718215 1.30967 0.728414 -0.224358 0.627313 -0.745749 + 0.775011 1.29018 0.707583 0.0104317 0.38707 -0.921991 + 0.77941 1.22822 0.700495 0.213732 0.0171579 -0.976742 + 0.775003 1.09627 0.700841 0.393209 -0.12387 -0.911067 + 0.780265 1.00801 0.753511 0.74184 -0.378022 -0.553871 + 0.667994 1.35128 0.798747 0.0131407 0.405127 -0.914166 + 0.799592 1.37863 0.763184 -0.24156 0.326181 -0.913923 + 0.856388 1.35922 0.742404 -0.168118 0.308778 -0.936159 + 0.894765 1.27125 0.713165 0.0208732 0.145352 -0.98916 + 0.899164 1.20921 0.706027 0.134098 -0.077727 -0.987915 + 0.662054 1.37911 0.803149 0.456739 -0.424743 -0.781654 + 0.677479 1.19172 0.631921 -0.388276 0.644804 -0.658384 + 0.793652 1.40654 0.767637 -0.0631322 -0.107736 -0.992173 + 0.831874 1.44489 0.765213 -0.345299 0.232157 -0.909325 + 0.897125 1.49917 0.7278 -0.489156 -0.074926 -0.868972 + 0.932428 1.43269 0.737749 -0.189256 -0.0589247 -0.980158 + 0.732292 1.45709 0.741276 0.556258 -0.162581 -0.814951 + 0.814631 1.53065 0.792669 0.0196056 -0.0447594 -0.998805 + 0.879882 1.58502 0.755306 -0.45102 -0.287418 -0.844969 + 0.968919 1.59273 0.660141 -0.522094 -0.393728 -0.756569 + 1.00422 1.52625 0.67009 0.0161814 -0.621083 -0.783577 + 0.715451 1.49768 0.719977 0.646056 -0.0668012 -0.760361 + 0.797789 1.57132 0.771421 0.329567 -0.603551 -0.726024 + 0.939812 1.7023 0.659358 -0.0514133 -0.616475 -0.785694 + 0.649712 1.43033 0.669226 0.703275 0.12043 -0.700643 + 0.703075 1.58181 0.701463 0.567189 -0.551004 -0.61212 + 0.830301 1.58874 0.707657 0.436486 -0.872244 -0.220615 + 0.972324 1.71963 0.595543 0.746934 -0.631206 0.208969 + 0.939812 1.7023 0.659358 0.747034 -0.630996 0.209247 + 0.596406 1.32859 0.547445 0.713354 0.233755 -0.66067 + 0.637336 1.51437 0.650661 0.734461 -0.0990238 -0.671388 + 0.593646 0.769686 1.2893 0.92627 -0.201533 0.318446 + 0.614436 0.825338 1.27931 0.0199751 -0.18394 -0.982734 + 0.660776 0.847515 1.2761 0.309724 -0.941107 0.135601 + 0.596975 0.776023 1.30872 0.907173 -0.310714 -0.283714 + 0.604949 0.61793 1.29995 0.942752 -0.0708002 -0.325892 + 0.604988 0.683733 1.27397 0.973905 -0.224235 0.0350467 + 0.625778 0.7393 1.26393 0.675428 -0.202503 0.709077 + 0.614436 0.825338 1.27931 0.362314 -0.173322 0.915799 + 0.661762 0.840666 1.29316 0.237359 -0.93121 -0.276602 + 0.618764 0.825271 1.31522 0.705172 -0.704806 -0.077339 + 0.618328 0.70856 1.35137 0.695864 -0.0389635 -0.717116 + 0.608278 0.624182 1.31932 0.972629 0.0113972 -0.232082 + 0.812578 0.820227 1.26856 -0.348042 -0.885505 -0.30781 + 0.738021 0.83597 1.32369 -0.209302 -0.864843 -0.456333 + 0.695024 0.820489 1.34571 0.0542812 -0.660843 -0.748559 + 0.640117 0.757809 1.35787 0.480275 -0.300903 -0.823889 + 0.617934 0.632076 1.35425 0.959473 -0.173992 -0.221674 + 0.811592 0.827076 1.2515 -0.343823 -0.810948 -0.473445 + 0.928995 0.766171 1.25519 -0.467682 -0.712154 -0.523556 + 0.854439 0.781914 1.31032 -0.439701 -0.678319 -0.588683 + 0.815221 0.742389 1.35778 -0.303508 -0.436673 -0.846876 + 0.708284 0.770454 1.36997 -0.0187659 -0.394964 -0.918505 + 0.734317 0.862237 1.2566 0.0939015 -0.876588 -0.471991 + 0.785162 0.85908 1.22446 -0.365618 -0.847624 -0.384521 + 0.862438 0.824007 1.21941 -0.406828 -0.822903 -0.396638 + 0.948354 0.796696 1.19172 -0.410287 -0.848688 -0.333757 + 0.687977 0.839975 1.25976 0.474716 -0.542805 0.692826 + 0.712689 0.835707 1.21915 0.62195 -0.718834 0.310574 + 0.78827 0.875179 1.17438 0.0673945 -0.996713 0.0449497 + 0.864209 0.836358 1.14702 -0.426044 -0.872168 -0.240436 + 0.950125 0.809046 1.11933 -0.323084 -0.8923 -0.315304 + 0.65049 0.735117 1.22337 0.778201 -0.626407 0.0449143 + 0.656362 0.772864 1.1512 0.598655 -0.781203 -0.177017 + 0.750817 0.830245 1.15141 0.544324 -0.822513 0.164873 + 0.826398 0.869631 1.10659 -0.0233187 -0.974607 -0.222705 + 0.867317 0.852369 1.09689 -0.419848 -0.826584 -0.374816 + 0.583394 0.700325 1.18764 0.57882 -0.707174 -0.406044 + 0.589266 0.73807 1.11546 0.489678 -0.793882 -0.360508 + 0.586773 0.765331 1.04744 0.383968 -0.868039 -0.314765 + 0.666944 0.789911 1.07887 0.440452 -0.873255 -0.208391 + 0.761399 0.847206 1.07903 0.462576 -0.868051 -0.180308 + 0.580026 0.653479 1.24218 0.807556 -0.329218 -0.489355 + 0.527962 0.712325 1.11285 0.209525 -0.843828 -0.494017 + 0.528092 0.742561 1.04268 0.171667 -0.915098 -0.364865 + 0.5256 0.769822 0.974664 0.270024 -0.896064 -0.352358 + 0.579987 0.587676 1.26815 0.662342 -0.364872 -0.654348 + 0.524594 0.665479 1.16739 0.257533 -0.708012 -0.657568 + 0.468772 0.724256 1.09359 -0.26343 -0.85706 -0.442779 + 0.468902 0.754492 1.02342 -0.204557 -0.947174 -0.247018 + 0.462395 0.767841 0.951896 0.00153005 -0.980961 -0.194197 + 0.607885 0.547698 1.32219 0.920988 -0.209194 -0.328664 + 0.565778 0.5247 1.30143 0.531529 -0.227359 -0.815956 + 0.520193 0.609434 1.22066 0.172091 -0.600808 -0.78065 + 0.455669 0.632191 1.20725 -0.328024 -0.597129 -0.732009 + 0.46007 0.688235 1.15398 -0.353447 -0.721074 -0.595926 + 0.595334 0.469248 1.31967 0.853564 -0.256671 -0.453374 + 0.553228 0.446164 1.29886 0.256957 -0.447485 -0.85658 + 0.505984 0.546459 1.25394 0.0193538 -0.536586 -0.843624 + 0.608345 0.598784 1.37451 0.901692 -0.202569 -0.38199 + 0.585745 0.435954 1.33994 0.798244 -0.553802 -0.236875 + 0.522086 0.390288 1.33083 0.176729 -0.659583 -0.73056 + 0.469447 0.503784 1.30626 -0.329217 -0.470044 -0.818948 + 0.653377 0.707774 1.38213 0.500445 -0.257571 -0.826566 + 0.620104 0.518943 1.3988 0.80884 -0.327255 -0.488551 + 0.539198 0.384676 1.38036 0.741735 -0.636758 -0.210636 + 0.475539 0.339011 1.37125 0.0516421 -0.607722 -0.792469 + 0.438306 0.447908 1.33823 -0.349948 -0.372669 -0.85945 + 0.691333 0.692201 1.39771 0.0756771 -0.324047 -0.943009 + 0.665136 0.627933 1.40642 0.480813 -0.231379 -0.845744 + 0.66784 0.546323 1.43458 0.474523 -0.315874 -0.821615 + 0.587339 0.455159 1.43027 0.720245 -0.481984 -0.498937 + 0.506433 0.320807 1.41178 0.6115 -0.747892 -0.258311 + 0.79827 0.664136 1.38552 -0.224547 -0.367723 -0.902418 + 0.792089 0.594912 1.42482 -0.191261 -0.424136 -0.885171 + 0.694037 0.61059 1.42586 0.187231 -0.320463 -0.928573 + 0.964256 0.556677 1.38184 -0.389096 -0.452307 -0.80251 + 0.958075 0.487539 1.42119 -0.369341 -0.487834 -0.790952 + 0.937526 0.429651 1.47146 -0.344313 -0.51796 -0.783049 + 0.817145 0.516214 1.45573 -0.156101 -0.468159 -0.869747 + 0.719093 0.531893 1.45677 0.121676 -0.395528 -0.910358 + 0.987842 0.616329 1.33052 -0.462038 -0.465012 -0.755172 + 1.15942 0.552757 1.26583 -0.479621 -0.489079 -0.728536 + 1.13583 0.493105 1.31715 -0.465161 -0.491342 -0.736348 + 1.08792 0.445309 1.38194 -0.447094 -0.495578 -0.744654 + 1.02706 0.655854 1.28306 -0.477108 -0.492572 -0.727833 + 1.17526 0.617706 1.20894 -0.496012 -0.507105 -0.704852 + 1.32655 0.544633 1.1463 -0.356891 -0.599697 -0.716235 + 1.31011 0.482405 1.21249 -0.317483 -0.648429 -0.691914 + 1.26219 0.434609 1.27727 -0.34923 -0.58241 -0.734055 + 1.05089 0.714985 1.22065 -0.461147 -0.64533 -0.60901 + 1.19909 0.676836 1.14652 -0.429144 -0.648771 -0.628436 + 1.33488 0.693301 1.0436 -0.396769 -0.579324 -0.71201 + 1.34239 0.60958 1.08941 -0.411784 -0.543683 -0.73133 + 1.45688 0.548566 1.10849 0.0567372 -0.730387 -0.680673 + 1.07025 0.74551 1.15717 -0.427829 -0.771936 -0.470189 + 1.14769 0.775965 1.02182 -0.426195 -0.789631 -0.441408 + 1.19143 0.74391 1.06795 -0.104974 -0.797144 -0.594594 + 1.06428 0.792158 1.09598 -0.370419 -0.79465 -0.480959 + 1.14172 0.8227 0.960676 -0.684337 -0.577558 -0.445095 + 1.19119 0.851914 0.802478 -0.182632 -0.725836 -0.66318 + 1.23493 0.81986 0.848598 0.375051 -0.773427 -0.511025 + 0.932215 0.841889 1.05884 -0.309534 -0.837981 -0.449417 + 1.04637 0.825001 1.03549 -0.251448 -0.858541 -0.446857 + 1.11972 0.886319 0.929887 -0.492359 -0.719802 -0.489354 + 0.930162 0.8877 0.986093 -0.372316 -0.845254 -0.383311 + 0.988035 0.855089 0.986578 -0.303414 -0.912191 -0.275403 + 1.06139 0.916319 0.880924 -0.372279 -0.592725 -0.714203 + 1.1441 0.982289 0.714262 -0.481174 -0.287238 -0.828231 + 1.21543 1.25463 0.632758 0.273383 -0.340805 -0.899507 + 0.865264 0.89818 1.02414 -0.219596 -0.89621 -0.385468 + 0.860678 0.922089 0.953931 0.0263632 -0.917131 -0.397713 + 0.902573 0.92971 0.921729 -0.320844 -0.866806 -0.381714 + 0.960445 0.897099 0.922214 -0.206608 -0.779844 -0.590894 + 0.821812 0.89354 1.03638 0.293648 -0.922189 -0.251672 + 0.814715 0.902242 0.955106 0.461388 -0.835719 -0.297816 + 0.838622 0.960135 0.881234 0.166373 -0.875291 -0.454076 + 0.880517 0.967757 0.849032 -0.0888985 -0.831377 -0.548552 + 0.754302 0.855908 0.997757 0.463563 -0.867508 -0.180384 + 0.749509 0.875033 0.919634 0.482272 -0.828576 -0.284386 + 0.800219 0.935087 0.882817 0.579955 -0.732049 -0.357431 + 0.824126 0.992981 0.808944 0.405311 -0.671363 -0.62048 + 0.667163 0.814158 1.00787 0.4065 -0.877395 -0.254825 + 0.662371 0.833281 0.929749 0.372905 -0.896905 -0.237703 + 0.651066 0.847683 0.855804 0.38658 -0.87276 -0.29807 + 0.75087 0.903341 0.841204 0.53932 -0.781601 -0.313424 + 0.80158 0.963308 0.804335 0.701991 -0.56239 -0.436951 + 0.586993 0.789665 0.976497 0.331114 -0.898062 -0.289566 + 0.56609 0.802554 0.906573 0.29108 -0.927231 -0.235615 + 0.554785 0.816956 0.832628 0.317929 -0.909997 -0.266134 + 0.528399 0.831478 0.762472 0.340283 -0.878914 -0.334241 + 0.638559 0.874038 0.783357 0.403963 -0.838962 -0.364632 + 0.500094 0.784327 0.913542 0.188155 -0.9475 -0.258537 + 0.479191 0.797302 0.843667 0.125233 -0.985027 -0.118485 + 0.431488 0.795235 0.775249 0.186393 -0.962749 -0.195885 + 0.405102 0.809844 0.705145 0.154431 -0.929857 -0.333941 + 0.436889 0.782346 0.890773 0.144953 -0.964497 -0.22076 + 0.405466 0.790068 0.823596 0.114393 -0.982008 -0.150246 + 0.357764 0.788001 0.755178 -0.0986554 -0.98039 -0.170593 + 0.320431 0.813892 0.691934 -0.268402 -0.920949 -0.282513 + 0.394347 0.839772 0.636909 0.161998 -0.879637 -0.447208 + 0.394418 0.77022 0.903777 -0.32008 -0.94701 0.0268429 + 0.362995 0.777856 0.83655 -0.334832 -0.939989 -0.0656432 + 0.326228 0.801844 0.780602 -0.569555 -0.815808 0.100323 + 0.288896 0.827734 0.717357 -0.650398 -0.759585 0.0035483 + 0.413333 0.776261 0.981311 -0.441724 -0.896683 -0.0289581 + 0.340494 0.839684 0.921859 -0.75494 -0.651871 0.0716227 + 0.321578 0.833643 0.844325 -0.754277 -0.610662 0.241159 + 0.284811 0.85763 0.788377 -0.834879 -0.470989 0.284862 + 0.41984 0.762912 1.05283 -0.443539 -0.863495 -0.240105 + 0.342526 0.826727 1.0007 -0.525246 -0.805011 -0.275814 + 0.399207 0.75204 1.12726 -0.438023 -0.792164 -0.424984 + 0.321893 0.815854 1.07513 -0.385493 -0.835576 -0.391418 + 0.390505 0.716019 1.18765 -0.280909 -0.715741 -0.639379 + 0.312155 0.767184 1.12703 0.047574 -0.761667 -0.64622 + 0.380768 0.667434 1.23961 -0.22867 -0.657369 -0.718036 + 0.367227 0.618077 1.2867 -0.138123 -0.569559 -0.810262 + 0.204332 1.01157 0.800351 0.140382 -0.956403 -0.256098 + 0.442128 0.582833 1.25434 -0.429512 -0.547422 -0.718226 + 0.405591 0.540158 1.30665 -0.428595 -0.459577 -0.777879 + 0.363435 0.553954 1.32656 -0.234677 -0.535858 -0.811038 + 0.372815 0.484203 1.35417 -0.4545 -0.370133 -0.810204 + 0.454742 0.286813 1.45866 0.529305 -0.829656 -0.177503 + 0.513595 0.336723 1.48201 0.547143 -0.739573 -0.392003 + 0.464944 0.274985 1.51495 0.424898 -0.791161 -0.439916 + 0.556841 0.379342 1.44819 0.660228 -0.616026 -0.429664 + 0.622733 0.398813 1.48367 0.413708 -0.545651 -0.728773 + 0.574081 0.336989 1.51655 0.3484 -0.639017 -0.685766 + 0.544624 0.274352 1.55925 0.29643 -0.707359 -0.641695 + 0.411782 0.241094 1.55345 0.304053 -0.83739 -0.454236 + 0.637341 0.470505 1.4525 0.423389 -0.400165 -0.812779 + 0.704484 0.460203 1.48794 0.235895 -0.452694 -0.859896 + 0.703252 0.385732 1.53053 0.204329 -0.571039 -0.795088 + 0.673794 0.323089 1.57323 0.23101 -0.635907 -0.736381 + 0.810897 0.450873 1.5015 -0.110266 -0.525487 -0.843626 + 0.809665 0.376401 1.54409 -0.0318477 -0.574155 -0.818127 + 0.793357 0.317255 1.59913 -0.0234177 -0.662293 -0.748879 + 0.651443 0.258561 1.6246 0.205977 -0.727571 -0.654381 + 0.931278 0.364221 1.51719 -0.348678 -0.587841 -0.729977 + 0.912571 0.310585 1.57489 -0.280475 -0.617036 -0.735255 + 0.896263 0.251439 1.62993 -0.263604 -0.727988 -0.632887 + 0.878998 0.208596 1.69633 -0.16299 -0.766043 -0.621781 + 0.771006 0.252727 1.6505 0.0630077 -0.716838 -0.694387 + 1.06737 0.38742 1.4322 -0.417632 -0.529055 -0.738705 + 1.05432 0.350224 1.46823 -0.383137 -0.593501 -0.707787 + 1.03561 0.296588 1.52593 -0.350384 -0.64611 -0.678066 + 1.06378 0.27098 1.53688 -0.30591 -0.718648 -0.624472 + 1.24914 0.397413 1.31329 -0.36142 -0.602596 -0.711515 + 1.27731 0.371808 1.32425 -0.239567 -0.659883 -0.712153 + 1.26555 0.307234 1.38929 -0.178416 -0.755017 -0.630965 + 1.04651 0.228051 1.60324 -0.243893 -0.788599 -0.564471 + 1.41823 0.435732 1.23532 0.0978256 -0.745623 -0.659148 + 1.40647 0.371246 1.30042 0.341774 -0.807519 -0.480732 + 1.2514 0.260562 1.46153 -0.117096 -0.825638 -0.551915 + 1.03236 0.181381 1.67547 -0.156214 -0.872193 -0.463547 + 0.858484 0.160513 1.75982 -0.130643 -0.879407 -0.457794 + 1.44043 0.486339 1.17467 0.0991666 -0.767305 -0.633568 + 1.52479 0.464575 1.26937 0.342517 -0.860059 -0.378127 + 1.44873 0.417293 1.32726 0.582041 -0.807053 -0.0994715 + 1.417 0.365191 1.40291 0.682119 -0.710361 -0.173495 + 1.37475 0.319144 1.37606 0.406041 -0.800521 -0.440791 + 1.54292 0.558372 1.13831 0.0788931 -0.798403 -0.596932 + 1.54699 0.515181 1.20871 0.0854089 -0.814929 -0.573233 + 1.60355 0.505276 1.20727 -0.529479 -0.807406 -0.260283 + 1.59744 0.481078 1.30738 0.00332927 -0.929065 -0.369902 + 1.52138 0.433797 1.36528 0.333371 -0.909355 -0.248871 + 1.45478 0.596872 1.05422 0.0269449 -0.68694 -0.726214 + 1.54082 0.606679 1.08404 -0.065265 -0.800736 -0.595452 + 1.5718 0.593954 1.08447 -0.72425 -0.679202 -0.118938 + 1.59948 0.548467 1.13686 -0.754554 -0.615717 -0.227026 + 1.42433 0.648577 1.01687 -0.201513 -0.554291 -0.807561 + 1.47925 0.664574 1.01176 -0.202741 -0.750115 -0.629463 + 1.51022 0.651849 1.0122 -0.606925 -0.791157 -0.0755789 + 1.57817 0.545448 1.05609 -0.901635 -0.375955 0.213802 + 1.60585 0.49996 1.10848 -0.829963 -0.556707 -0.0351931 + 1.41682 0.732298 0.971058 -0.00818089 -0.470001 -0.882628 + 1.42704 0.810131 0.938248 -0.269831 -0.386336 -0.882007 + 1.4488 0.716278 0.974406 -0.366956 -0.483879 -0.794484 + 1.50632 0.652275 0.987461 -0.685511 -0.659946 -0.307483 + 1.57426 0.545874 1.03135 -0.732346 -0.63746 -0.239403 + 1.3925 0.822365 0.933657 -0.0201024 -0.436979 -0.899247 + 1.40273 0.900198 0.900847 -0.261108 -0.310053 -0.914161 + 1.4594 0.843428 0.897777 -0.644665 -0.229194 -0.729299 + 1.48115 0.749575 0.933935 -0.586509 -0.418205 -0.693622 + 1.32722 0.760374 0.965028 -0.0412927 -0.675207 -0.736472 + 1.34742 0.893035 0.898255 0.00805139 -0.32697 -0.945 + 1.39844 1.00285 0.872652 0.0318738 -0.269614 -0.962441 + 1.45392 1.09575 0.847134 0.0879558 -0.302245 -0.949164 + 1.28214 0.831044 0.929625 0.285419 -0.655278 -0.69939 + 1.3401 1.02416 0.862932 0.263538 -0.292307 -0.919296 + 1.39111 1.13398 0.83733 -0.0701664 -0.262316 -0.962428 + 1.43569 1.16827 0.818127 -0.0359714 -0.332134 -0.942546 + 1.25658 1.00816 0.761047 0.808058 -0.242504 -0.536875 + 1.30379 1.01935 0.842075 0.706865 -0.292324 -0.644118 + 1.36663 1.3271 0.796625 0.032978 -0.310657 -0.94995 + 1.38463 1.23273 0.810888 -0.219713 -0.236823 -0.946383 + 1.42922 1.26702 0.791684 -0.521084 -0.321673 -0.790568 + 1.2275 1.01816 0.717136 0.668087 -0.322776 -0.670429 + 1.33033 1.32237 0.775818 0.361061 -0.180405 -0.914926 + 1.38744 1.42682 0.758114 -0.291341 -0.549014 -0.783392 + 1.40544 1.33244 0.772376 -0.608186 -0.300621 -0.734668 + 1.20241 1.08491 0.659711 0.821737 -0.175556 -0.542152 + 1.27955 1.43341 0.724495 0.787079 -0.2647 -0.557172 + 1.37295 1.58577 0.661806 0.603513 -0.590461 -0.535843 + 1.21543 1.25463 0.632758 0.920161 -0.135399 -0.367382 + 1.29257 1.60304 0.697493 0.833208 -0.528713 -0.161949 + 1.26299 1.58624 0.584984 0.813464 -0.56708 -0.129213 + 1.33145 1.63145 0.543685 0.543916 -0.838958 -0.0174777 + 1.36103 1.64833 0.656244 -0.298211 -0.854922 -0.424475 + 1.35441 1.57088 0.718196 -0.903337 -0.116272 -0.412872 + 1.3761 1.46992 0.725657 -0.793977 -0.33983 -0.504099 + 1.4336 1.34407 0.72804 -0.871107 -0.370603 -0.322221 + 1.45738 1.27865 0.747349 -0.632673 -0.65034 -0.420455 + 1.39315 1.39099 0.629974 -0.918886 -0.394522 0.000149688 + 1.42226 1.38717 0.695584 -0.874198 -0.485303 0.0160831 + 1.37295 1.58577 0.661806 -0.906335 -0.102063 -0.410048 + 1.41169 1.40588 0.573584 -0.890991 0.0662353 -0.449163 + 1.43263 1.30966 0.516241 -0.908723 -0.406028 -0.0967652 + 1.46161 1.25622 0.403405 -0.590293 -0.777568 0.216662 + 1.4852 1.45922 0.489986 -0.674987 0.159167 -0.720457 + 1.51961 1.39679 0.412919 -0.598489 0.554314 -0.5784 + 1.44611 1.34345 0.496517 -0.862759 0.182983 -0.471343 + 1.46161 1.25622 0.403405 -0.833932 0.384215 -0.396152 + 1.47328 1.52179 0.484423 -0.55284 0.0157892 -0.833138 + 1.55433 1.51188 0.462787 -0.0458869 0.183572 -0.981935 + 1.6279 1.51032 0.455686 0.361807 -0.319823 -0.875676 + 1.6785 1.53269 0.464743 0.0694811 0.427603 -0.901292 + 1.60378 1.4514 0.414339 -0.25211 0.68595 -0.682579 + 1.33145 1.63145 0.543685 -0.520805 -0.813476 0.258881 + 1.51069 1.33656 0.353853 -0.736409 0.451454 -0.503876 + 1.85767 1.64454 0.554005 -0.00225008 0.343957 -0.938983 + 2.02507 1.75372 0.534508 -0.210753 0.0301314 -0.977075 + 2.19506 1.79142 0.4852 0.00211821 -0.202454 -0.97929 + 1.89362 1.71493 0.55529 -0.0698114 0.222428 -0.972446 + 2.06102 1.82402 0.535743 -0.234465 -0.288846 -0.928221 + 2.23355 1.86879 0.468189 -0.0140452 -0.49414 -0.869269 + 2.29796 1.84198 0.49684 0.293068 -0.701961 -0.649124 + 2.25122 1.76773 0.509233 0.649237 -0.649562 -0.395677 + 2.17601 1.71808 0.505039 0.256217 -0.310771 -0.9153 + 1.84301 1.69247 0.546183 -0.315416 0.669603 -0.672417 + 1.92435 1.7883 0.580415 -0.245577 -0.0998971 -0.964216 + 2.0874 1.87467 0.479216 -0.100475 -0.653987 -0.749804 + 2.23386 1.9363 0.415873 0.00987048 -0.698067 -0.715965 + 1.65514 1.55474 0.517745 -0.280241 0.801455 -0.528332 + 1.68095 1.58851 0.550251 -0.22565 0.685992 -0.691735 + 1.86882 1.72633 0.57874 -0.5141 0.526502 -0.677124 + 1.58157 1.5563 0.524846 0.234794 0.617193 -0.750963 + 1.73074 1.64424 0.584322 -0.0742102 0.317076 -0.945492 + 1.78626 1.70629 0.586049 -0.101839 0.161284 -0.98164 + 1.50569 1.64402 0.533103 0.0164701 0.457677 -0.888966 + 1.63136 1.61203 0.558918 0.155741 0.390001 -0.907548 + 1.67239 1.66973 0.591372 0.0119341 0.334782 -0.94222 + 1.82528 1.77713 0.594749 -0.125755 0.00273734 -0.992058 + 1.42465 1.65393 0.554737 0.125815 0.0144747 -0.991948 + 1.54673 1.70181 0.565607 0.125471 0.235171 -0.963821 + 1.71141 1.74066 0.600124 0.0154467 0.124025 -0.992159 + 1.84873 1.84604 0.584593 -0.366665 0.109098 -0.923934 + 1.95594 1.84108 0.537384 -0.333553 -0.281617 -0.899686 + 1.33145 1.63145 0.543685 -0.007949 0.467433 -0.883993 + 0.504969 0.221988 1.60774 0.237825 -0.766746 -0.596271 + 0.475349 0.171371 1.66461 0.157695 -0.863973 -0.478208 + 0.621823 0.208035 1.68151 0.201233 -0.772149 -0.602736 + 0.594741 0.15241 1.74105 0.136813 -0.846672 -0.514226 + 0.450434 0.140476 1.73692 0.0706211 -0.9128 -0.402254 + 0.429275 0.104849 1.80763 -0.0147282 -0.948953 -0.315074 + 0.750491 0.20473 1.71403 0.0571877 -0.795196 -0.60365 + 0.72341 0.149105 1.77358 0.140004 -0.826015 -0.545983 + 0.707126 0.112246 1.84442 0.116904 -0.886261 -0.44819 + 0.573582 0.116783 1.81176 0.0858164 -0.880066 -0.467033 + 0.845283 0.132889 1.83526 -0.00712098 -0.898008 -0.439922 + 0.828999 0.095944 1.90606 0.0262662 -0.947878 -0.317548 + 0.829722 0.076875 1.98428 0.104221 -0.962419 -0.250775 + 0.685094 0.06822 1.91427 0.135809 -0.91992 -0.367835 + 0.55155 0.072756 1.88162 -0.0154271 -0.9426 -0.333566 + 1.01916 0.153671 1.75087 -0.0749727 -0.932811 -0.352481 + 1.00992 0.123663 1.83285 -0.00953909 -0.954883 -0.296828 + 1.01064 0.104512 1.91101 0.0508786 -0.973464 -0.223114 + 1.00914 0.085753 1.99731 0.0726489 -0.977996 -0.195563 + 0.833452 0.058511 2.06169 0.119228 -0.97156 -0.204585 + 1.24407 0.212977 1.53635 -0.00844745 -0.898485 -0.438923 + 1.23482 0.182879 1.61828 0.0924586 -0.951464 -0.293543 + 1.2298 0.160337 1.70752 0.152977 -0.962698 -0.223184 + 1.22831 0.141582 1.79381 0.178141 -0.965141 -0.191752 + 1.36742 0.271559 1.45088 0.552388 -0.768584 -0.322717 + 1.35807 0.237154 1.53847 0.631495 -0.747611 -0.205653 + 1.35305 0.21461 1.62772 0.639089 -0.74878 -0.175767 + 1.35462 0.194096 1.72325 0.640707 -0.752951 -0.150199 + 1.22268 0.123844 1.88473 0.177579 -0.969734 -0.167572 + 1.39068 0.324625 1.49217 0.779432 -0.616511 -0.111353 + 1.38133 0.290225 1.57975 0.797888 -0.586871 -0.137683 + 1.38355 0.264554 1.67781 0.777919 -0.607992 -0.158705 + 1.38511 0.244046 1.77334 0.763435 -0.628064 -0.150674 + 1.34899 0.176277 1.81411 0.589128 -0.791234 -0.163945 + 1.48839 0.408057 1.43006 0.44459 -0.874828 -0.192395 + 1.46206 0.367494 1.51932 0.470969 -0.846269 -0.249031 + 1.43897 0.324733 1.62698 0.480796 -0.844795 -0.234856 + 1.44119 0.299154 1.72508 0.469891 -0.862275 -0.188902 + 1.44404 0.284487 1.81029 0.493293 -0.849294 -0.188047 + 1.60783 0.439745 1.46897 0.109248 -0.932497 -0.344259 + 1.57742 0.413593 1.52927 0.220968 -0.935259 -0.276521 + 1.58031 0.394507 1.58953 0.163125 -0.903667 -0.395949 + 1.46494 0.348315 1.57954 0.318997 -0.898043 -0.302918 + 1.53758 0.337601 1.69629 0.267681 -0.934524 -0.234546 + 1.64082 0.465397 1.40414 0.046207 -0.99173 -0.11973 + 1.70716 0.451029 1.41863 -0.429796 -0.840721 -0.329337 + 1.67675 0.424968 1.47897 -0.182324 -0.929255 -0.321315 + 1.67259 0.411655 1.55043 -0.0930051 -0.932799 -0.348189 + 1.56355 0.361189 1.64884 0.218852 -0.914201 -0.341086 + 1.64747 0.455233 1.33715 -0.0884755 -0.993173 -0.0760226 + 1.70774 0.443485 1.2775 -0.373478 -0.926359 0.0487167 + 1.7011 0.453736 1.34454 -0.321336 -0.944484 0.0685023 + 1.74448 0.421888 1.2955 -0.229203 -0.973324 0.0102887 + 1.76927 0.424377 1.37059 -0.218054 -0.969941 -0.108015 + 1.62255 0.484202 1.25657 -0.529236 -0.846614 -0.0561619 + 1.67258 0.458269 1.28629 -0.384053 -0.917826 -0.100491 + 1.68785 0.453432 1.21987 -0.292349 -0.951219 0.0985656 + 1.70722 0.427067 1.15213 -0.206535 -0.977385 -0.0454132 + 1.73842 0.424595 1.22141 -0.082505 -0.995759 -0.0407002 + 1.64577 0.44771 1.21778 -0.404307 -0.906621 0.120719 + 1.66104 0.442785 1.15131 -0.327013 -0.943935 -0.0452763 + 1.68733 0.437013 1.09451 -0.2811 -0.906551 -0.314878 + 1.74607 0.451085 1.08933 0.38557 -0.844264 -0.372228 + 1.62677 0.468698 1.16843 -0.740285 -0.670151 -0.0536352 + 1.64214 0.473346 1.09438 -0.512874 -0.818667 -0.25835 + 1.66932 0.483248 1.03682 -0.267884 -0.845797 -0.461373 + 1.70803 0.526187 0.970451 0.249358 -0.749471 -0.613281 + 1.72604 0.479952 1.02813 0.224074 -0.776557 -0.588854 + 1.62122 0.504521 1.03438 -0.537848 -0.768184 -0.347293 + 1.65042 0.513721 0.979845 -0.31386 -0.785172 -0.53385 + 1.69254 0.569577 0.911697 0.164414 -0.724033 -0.669884 + 1.77926 0.596395 0.94745 -0.0748964 -0.843285 -0.532223 + 1.80408 0.558557 1.00699 -0.0652228 -0.876019 -0.477847 + 1.61372 0.556018 0.987985 -0.602199 -0.604026 -0.522023 + 1.6443 0.568153 0.923365 -0.467755 -0.649808 -0.599128 + 1.68642 0.623924 0.855168 0.0633865 -0.722658 -0.688294 + 1.76377 0.639698 0.888645 -0.148995 -0.827491 -0.541349 + 1.82641 0.596891 0.83859 -0.831164 -0.536003 -0.147874 + 1.59539 0.606046 0.942334 -0.640329 -0.465984 -0.610604 + 1.6368 0.619564 0.87692 -0.632854 -0.404949 -0.659934 + 1.68565 0.675408 0.803195 -0.370572 -0.441957 -0.816915 + 1.75074 0.675868 0.825996 -0.219666 -0.795801 -0.564312 + 1.55592 0.595988 0.985752 -0.578901 -0.614615 -0.535838 + 1.59717 0.672538 0.915164 -0.456079 -0.452806 -0.766132 + 1.65074 0.688961 0.854519 -0.768384 -0.140612 -0.624351 + 1.69959 0.744892 0.780844 -0.601941 -0.268584 -0.752017 + 1.74998 0.727353 0.774023 -0.514271 -0.579191 -0.632505 + 1.49687 0.688112 0.95859 -0.854548 -0.403535 -0.326966 + 1.54647 0.631827 0.956881 -0.409921 -0.61929 -0.66966 + 1.587 0.73028 0.874155 -0.323355 -0.404275 -0.855572 + 1.65252 0.755455 0.82735 -0.689923 -0.0795619 -0.719497 + 1.53629 0.689567 0.915871 -0.436454 -0.519615 -0.734512 + 1.52058 0.751028 0.891216 -0.514173 -0.37798 -0.769907 + 1.59075 0.801736 0.854789 -0.129658 -0.369474 -0.920151 + 1.66934 0.83939 0.830171 -0.565248 -0.0487041 -0.823482 + 1.52797 0.812986 0.854702 -0.387274 -0.378952 -0.840485 + 1.59815 0.863693 0.818274 0.00621149 -0.391408 -0.920196 + 1.67309 0.910845 0.810805 -0.389945 -0.130503 -0.911544 + 1.72873 0.895888 0.758512 -0.796035 0.0757938 -0.600486 + 1.71192 0.81204 0.755743 -0.797092 0.0510415 -0.601697 + 1.47557 0.897951 0.87434 -0.555298 -0.0447722 -0.830446 + 1.54415 0.867509 0.831265 -0.432187 -0.111064 -0.894919 + 1.7404 0.972385 0.752615 -0.772429 0.0119071 -0.634989 + 1.784 0.90576 0.660813 -0.844497 0.05193 -0.533037 + 1.76663 0.838042 0.686105 -0.83602 0.0261024 -0.548078 + 1.7543 0.770894 0.711207 -0.781265 -0.311228 -0.541075 + 1.84667 0.90357 0.570808 -0.741144 0.177801 -0.647373 + 1.82929 0.835937 0.59615 -0.846533 0.0632503 -0.528566 + 1.81694 0.764071 0.600627 -0.904114 -0.0662976 -0.422117 + 1.81262 0.720615 0.663493 -0.88331 -0.330036 -0.332925 + 1.80878 0.671025 0.710185 -0.888061 -0.380465 -0.258059 + 1.91729 0.895662 0.514904 -0.395556 0.394136 -0.829573 + 1.89324 0.815687 0.474424 -0.60156 0.290562 -0.74411 + 1.88089 0.74382 0.478903 -0.74833 0.158326 -0.644155 + 1.8728 0.652784 0.458382 -0.82356 0.0196149 -0.566889 + 1.86896 0.603195 0.505073 -0.943057 -0.196082 -0.268691 + 2.02185 0.925852 0.501813 0.0194175 0.366195 -0.930335 + 1.9978 0.845877 0.461334 -0.0378628 0.461631 -0.886264 + 1.96911 0.765755 0.420306 -0.243309 0.337251 -0.90943 + 1.96102 0.67472 0.399785 -0.45954 0.313179 -0.831109 + 1.91603 0.534961 0.413056 -0.78968 -0.27946 -0.546176 + 2.03338 1.0074 0.527763 0.109678 0.224496 -0.968283 + 2.16355 0.995014 0.561621 0.30655 0.316882 -0.89756 + 2.14033 0.913598 0.518236 0.237985 0.395526 -0.887086 + 2.11164 0.833479 0.477208 0.158222 0.508014 -0.846692 + 2.06878 0.768334 0.418843 0.0346415 0.545491 -0.8374 + 2.28565 1.13661 0.658763 0.480438 0.24021 -0.843492 + 2.29816 1.04453 0.635263 0.444883 0.297324 -0.844795 + 2.27494 0.963112 0.591876 0.410017 0.358164 -0.838812 + 2.24601 0.882803 0.540174 0.373561 0.424456 -0.824796 + 2.40167 1.17625 0.744707 0.62545 0.295034 -0.722335 + 2.41419 1.08425 0.721256 0.62007 0.266557 -0.737876 + 2.40624 0.987597 0.680067 0.619445 0.251694 -0.743598 + 2.37731 0.907288 0.628365 0.566246 0.310875 -0.763362 + 2.20315 0.817744 0.481859 0.323724 0.470376 -0.820944 + 2.35935 1.27623 0.753345 0.569768 0.376025 -0.730732 + 2.45962 1.2704 0.860231 0.746365 0.290998 -0.598548 + 2.50194 1.17043 0.851594 0.795723 0.267893 -0.543192 + 2.499 1.08753 0.812577 0.807296 0.204484 -0.553588 + 2.49105 0.990875 0.771388 0.821083 0.155633 -0.549182 + 2.29884 1.35653 0.76246 0.449463 0.529444 -0.719494 + 2.43986 1.36033 0.870073 0.60841 0.399242 -0.685888 + 2.57772 1.20514 0.996876 0.917296 0.16136 -0.364048 + 2.56484 1.11228 0.962714 0.929446 0.0686311 -0.362519 + 2.56189 1.02938 0.923698 0.934205 0.0353729 -0.354978 + 2.22158 1.4297 0.776525 0.399504 0.567108 -0.720268 + 2.36261 1.4335 0.884138 0.465973 0.403284 -0.787547 + 2.57256 1.39479 0.982791 0.549311 -0.135382 -0.824578 + 2.55796 1.29515 1.00677 0.801521 -0.0799392 -0.5926 + 2.61381 1.14019 1.11437 0.978215 -0.0848983 -0.18944 + 2.1753 1.4964 0.804189 0.35581 0.535244 -0.766103 + 2.3061 1.50942 0.869238 0.344642 0.291116 -0.892453 + 2.22982 1.57813 0.886237 0.243367 0.306875 -0.920109 + 2.45399 1.53364 0.915692 0.25468 -0.134575 -0.957616 + 2.51606 1.47071 0.967891 0.330929 -0.163916 -0.92931 + 2.58157 1.54655 0.941937 0.266095 -0.418526 -0.868349 + 2.64364 1.48362 0.994138 0.522602 -0.378271 -0.764067 + 2.69852 1.5131 1.03227 0.708694 -0.344683 -0.615587 + 2.71043 1.46155 1.07875 0.716198 -0.306736 -0.626876 + 2.5719 1.58847 0.916332 0.24231 -0.493795 -0.835136 + 2.6611 1.61844 0.948007 0.549291 -0.341806 -0.762527 + 2.71598 1.64801 0.986193 0.712945 -0.337458 -0.61468 + 2.80102 1.66446 1.09471 0.864027 -0.233586 -0.445976 + 2.81293 1.61291 1.14119 0.873009 -0.225582 -0.432398 + 2.48122 1.62578 0.875297 0.0576972 -0.586627 -0.807799 + 2.60333 1.64967 0.891728 0.39063 -0.520367 -0.75936 + 2.65143 1.66036 0.922402 0.541031 -0.461766 -0.702892 + 2.67776 1.7169 0.900876 0.615671 -0.46008 -0.639747 + 2.72185 1.72568 0.947274 0.734082 -0.373179 -0.567328 + 2.39266 1.62727 0.890711 -0.178698 -0.409407 -0.89468 + 2.32032 1.74681 0.80888 -0.080778 -0.736278 -0.671841 + 2.41817 1.76788 0.780783 0.0867385 -0.663433 -0.743192 + 2.51266 1.68707 0.850743 0.176262 -0.512871 -0.840176 + 2.33938 1.62431 0.903847 -0.0807268 -0.234746 -0.968699 + 2.1281 1.7572 0.861874 -0.191533 -0.75013 -0.632945 + 2.23175 1.7483 0.824294 -0.202616 -0.80611 -0.555997 + 2.25326 1.7895 0.740335 0.113395 -0.981665 -0.153219 + 2.07482 1.75424 0.87501 0.0678055 -0.603834 -0.794221 + 2.07002 1.79113 0.816903 0.136201 -0.976298 -0.168201 + 2.17367 1.78214 0.779273 -0.0585759 -0.993051 -0.102069 + 2.0201 1.77625 0.798888 0.28461 -0.958639 0.00302481 + 2.16063 1.76303 0.711379 0.17972 -0.950578 0.253183 + 2.24023 1.7703 0.672389 0.244021 -0.966599 0.0783627 + 2.32775 1.80176 0.63849 0.343177 -0.937812 -0.0523219 + 2.35111 1.81057 0.712237 0.202888 -0.938995 -0.277712 + 2.11072 1.74814 0.693364 0.17752 -0.928081 0.32734 + 2.16828 1.73679 0.612622 0.375287 -0.901583 0.215191 + 2.23005 1.77134 0.598377 0.433469 -0.900303 0.0394736 + 2.09294 1.7091 0.57958 0.34235 -0.883237 0.320451 + 2.18945 1.73318 0.523476 0.468924 -0.849497 0.241797 + 2.31758 1.80281 0.564478 0.393126 -0.869731 -0.298361 + 1.82181 0.634855 0.772834 -0.836211 -0.515998 -0.185735 + 1.86328 0.522468 0.640895 -0.963848 -0.213776 -0.159052 + 1.85602 0.48344 0.700494 -0.939084 -0.329717 -0.0969986 + 1.85124 0.55914 0.898177 -0.80946 -0.582162 -0.076567 + 1.85867 0.560346 0.57509 -0.942193 -0.275062 -0.191345 + 1.90574 0.492112 0.483073 -0.829741 -0.422046 -0.365249 + 1.89848 0.453085 0.542671 -0.793513 -0.534383 -0.291156 + 1.87381 0.447583 0.759598 -0.806263 -0.589642 0.0475713 + 1.86903 0.523284 0.95728 -0.803541 -0.588331 -0.0904918 + 1.9883 0.45298 0.409452 -0.417599 -0.705123 -0.573072 + 2.00954 0.415124 0.469421 -0.204335 -0.935948 -0.286789 + 1.91972 0.415229 0.60264 -0.549737 -0.81767 -0.170893 + 1.91275 0.418998 0.829711 -0.727032 -0.685426 0.0402044 + 1.94935 0.565786 0.362664 -0.617152 -0.0384118 -0.785906 + 2.02161 0.483805 0.35906 -0.03745 -0.574896 -0.817369 + 2.08366 0.48792 0.382134 0.525269 -0.420733 -0.739646 + 2.06514 0.433022 0.407221 0.26415 -0.739555 -0.619099 + 2.02637 0.400974 0.55173 -0.0700898 -0.977697 -0.197978 + 1.96117 0.623916 0.370181 -0.582338 0.309576 -0.751695 + 2.03079 0.576167 0.342284 0.0479223 -0.0215181 -0.998619 + 2.09283 0.580194 0.365307 0.48037 -0.11017 -0.870119 + 2.13465 0.524988 0.431131 0.689607 -0.423183 -0.587671 + 2.11612 0.470088 0.456217 0.721537 -0.57025 -0.392682 + 2.06893 0.717615 0.389289 0.0168197 0.449892 -0.892925 + 2.0426 0.634297 0.349801 0.0357102 0.264327 -0.963772 + 2.13163 0.660539 0.38755 0.443276 0.150754 -0.883618 + 2.19049 0.596965 0.432463 0.639774 -0.295599 -0.709444 + 2.15795 0.743771 0.426986 0.366044 0.360736 -0.857835 + 2.22929 0.677309 0.454703 0.597338 0.0398495 -0.800999 + 2.29897 0.667008 0.517943 0.739136 -0.248636 -0.625986 + 2.25055 0.615226 0.490033 0.718076 -0.437572 -0.5412 + 2.19471 0.543249 0.488701 0.681708 -0.526608 -0.507895 + 2.29095 0.754304 0.509943 0.590004 0.155228 -0.792338 + 2.36063 0.744003 0.573183 0.723767 -0.0701408 -0.68647 + 2.37781 0.693688 0.612731 0.750656 -0.375087 -0.543898 + 2.33759 0.653832 0.596765 0.73113 -0.500001 -0.464164 + 2.28918 0.60205 0.568855 0.744919 -0.480831 -0.46249 + 2.33615 0.828191 0.564767 0.559638 0.28448 -0.778381 + 2.41636 0.820637 0.631649 0.739303 0.115705 -0.663358 + 2.40083 0.774762 0.610509 0.726021 -0.0241785 -0.687247 + 2.41802 0.724447 0.650057 0.791033 -0.314137 -0.524962 + 2.39662 0.676452 0.657786 0.754001 -0.5525 -0.355283 + 2.45752 0.899734 0.695248 0.764468 0.172604 -0.621125 + 2.48254 0.845314 0.738309 0.892254 -0.0327908 -0.450342 + 2.4625 0.801927 0.699457 0.877721 -0.0342006 -0.47795 + 2.44697 0.756052 0.678316 0.86418 -0.192485 -0.464912 + 2.48473 0.934199 0.747354 0.875184 0.0846304 -0.47633 + 2.50976 0.879865 0.790465 0.92145 -0.0224679 -0.387847 + 2.49905 0.810617 0.786604 0.941661 -0.220736 -0.254069 + 2.479 0.767145 0.747704 0.921024 -0.264187 -0.286217 + 2.45367 0.732084 0.713029 0.860567 -0.394201 -0.322536 + 2.52809 0.924004 0.840815 0.942149 0.0156458 -0.33483 + 2.5386 0.896836 0.880669 0.964608 -0.082113 -0.250576 + 2.52027 0.852697 0.830319 0.949232 -0.204135 -0.239349 + 2.49331 0.781366 0.82267 0.9276 -0.364023 -0.0839421 + 2.5344 0.980681 0.864848 0.928631 -0.00801826 -0.370919 + 2.55869 0.939821 0.946216 0.951577 -0.124901 -0.280894 + 2.54014 0.858694 0.912934 0.939332 -0.313187 -0.13989 + 2.51454 0.823445 0.866386 0.904225 -0.40913 -0.122436 + 2.58618 0.988521 1.00507 0.979071 -0.140135 -0.147585 + 2.56023 0.901679 0.978481 0.954078 -0.290333 -0.0737738 + 2.53165 0.838818 1.05256 0.913538 -0.402561 0.0582432 + 2.51634 0.79982 0.971909 0.883863 -0.466957 -0.027164 + 2.49073 0.764571 0.92536 0.886831 -0.459666 -0.0473023 + 2.60092 1.04733 1.08021 0.98845 -0.138787 -0.0608608 + 2.56768 0.943084 1.07156 0.944623 -0.322299 0.0617331 + 2.5391 0.88031 1.14569 0.924055 -0.37523 0.0729709 + 2.58243 1.00189 1.14671 0.958156 -0.282252 0.0476613 + 2.54816 0.916788 1.24551 0.924885 -0.376572 0.0527289 + 2.49043 0.791906 1.25421 0.887843 -0.45236 0.0842909 + 2.48424 0.761974 1.15306 0.869378 -0.488031 0.0775038 + 2.46892 0.722888 1.07236 0.857893 -0.510084 0.0619184 + 2.59308 1.04304 1.25684 0.950486 -0.310767 0.000276595 + 2.55881 0.957931 1.35565 0.927786 -0.369289 0.0532814 + 2.51029 0.860121 1.45466 0.897745 -0.434915 0.0700224 + 2.49949 0.828385 1.35403 0.886072 -0.459019 0.0646431 + 2.42666 0.707028 1.40663 0.845744 -0.527412 0.0809584 + 2.63788 1.20703 1.1818 0.924135 -0.302237 -0.233726 + 2.61715 1.10987 1.32427 0.934838 -0.354857 -0.0124516 + 2.61877 1.12024 1.39092 0.928873 -0.346621 0.130568 + 2.56943 1.00822 1.47854 0.936878 -0.339198 0.0848845 + 2.69088 1.31879 1.16602 0.832613 -0.488627 -0.260765 + 2.68403 1.27004 1.36046 0.912318 -0.409108 -0.0174877 + 2.68566 1.28041 1.4271 0.833458 -0.458786 0.307997 + 2.69582 1.36191 1.10273 0.747763 -0.449461 -0.488707 + 2.82917 1.55684 1.26112 0.91173 -0.404572 -0.0712022 + 2.73704 1.3818 1.34469 0.898624 -0.438482 0.0144118 + 2.83411 1.59996 1.19782 0.924772 -0.25079 -0.286185 + 2.88133 1.67507 1.38653 0.916335 -0.399711 -0.023677 + 2.84279 1.60821 1.36312 0.856738 -0.490286 0.160061 + 2.75066 1.43318 1.4467 0.893546 -0.394843 0.213716 + 2.90337 1.85575 1.33597 0.949621 0.0161176 -0.312987 + 2.92455 1.84272 1.39255 0.973919 -0.0519995 -0.220858 + 2.86532 1.87264 1.20993 0.952761 0.00404706 -0.303695 + 2.95481 2.09748 1.58589 0.974836 -0.00174564 -0.222915 + 2.98303 2.14159 1.73209 0.988962 -0.0402742 -0.142589 + 2.99574 2.15389 1.85579 0.981807 -0.189344 0.014288 + 2.93726 1.8551 1.51631 0.983621 -0.15214 -0.0966632 + 2.80689 1.74221 1.05584 0.890065 -0.216512 -0.401132 + 2.81001 1.82439 1.0431 0.925427 -0.0260535 -0.37803 + 2.81581 2.05844 1.12231 0.945637 0.0702556 -0.317545 + 2.91676 2.11437 1.45984 0.958892 0.030765 -0.282098 + 2.72177 1.82364 0.876602 0.808816 -0.282963 -0.515509 + 2.72489 1.90582 0.863861 0.923415 -0.0291651 -0.382693 + 2.76051 2.01011 0.95543 0.934749 0.0349288 -0.353588 + 2.7848 2.16815 1.04528 0.950584 0.0400578 -0.307871 + 2.87667 2.11855 1.3206 0.954486 -0.0238058 -0.297303 + 2.67768 1.81486 0.830204 0.559341 -0.493534 -0.666004 + 2.67396 1.9354 0.721423 0.776952 -0.421209 -0.467898 + 2.68502 1.95172 0.749157 0.954307 -0.0233638 -0.297914 + 2.71138 1.98324 0.833165 0.938418 0.0114834 -0.345311 + 2.62967 1.7062 0.870201 0.482092 -0.492265 -0.72475 + 2.58267 1.73848 0.824504 0.270608 -0.514977 -0.81337 + 2.63068 1.84713 0.784507 0.351959 -0.618914 -0.702189 + 2.48818 1.81928 0.754544 0.206464 -0.72191 -0.660468 + 2.58025 1.85702 0.72798 0.356293 -0.776905 -0.519109 + 2.62354 1.94529 0.664895 0.485335 -0.76367 -0.425744 + 2.43108 1.83731 0.699718 0.284864 -0.921229 -0.264933 + 2.52314 1.87505 0.673153 0.380824 -0.851003 -0.361617 + 2.56371 1.90541 0.638774 0.538406 -0.813374 -0.220321 + 2.65259 1.99834 0.58761 0.855624 -0.475973 -0.203363 + 2.40771 1.82859 0.62602 0.309136 -0.916423 -0.254175 + 2.44828 1.85895 0.591641 0.425765 -0.871223 -0.244324 + 2.59276 1.95846 0.561488 0.568262 -0.78942 -0.23215 + 2.45007 1.87419 0.527834 0.393111 -0.89808 -0.197273 + 2.59456 1.9737 0.497681 0.629886 -0.764202 -0.138706 + 2.65958 2.04483 0.483687 0.897798 -0.437804 -0.0478185 + 2.66253 2.06267 0.61958 0.98472 -0.0204596 -0.17294 + 2.36711 1.85411 0.519218 0.266042 -0.869767 -0.415603 + 2.49456 1.90442 0.452076 0.427214 -0.898405 -0.101765 + 2.59875 1.98864 0.397003 0.681887 -0.731436 -0.00562154 + 2.66377 2.05986 0.383058 0.854675 -0.518882 0.0171137 + 2.3475 1.89328 0.451581 0.467733 -0.587779 -0.660107 + 2.3478 1.96087 0.399315 -0.244105 -0.794221 -0.556441 + 2.4116 1.88434 0.44346 -0.106566 -0.913771 -0.392003 + 2.42771 1.91018 0.369699 -0.251129 -0.929934 -0.268622 + 2.51789 1.91892 0.360977 0.367215 -0.928262 -0.0590254 + 2.26025 1.98695 0.359346 0.149794 -0.958924 -0.240888 + 2.36392 1.98662 0.325503 -0.436626 -0.898441 -0.046489 + 2.35463 1.97552 0.240132 -0.267618 -0.963065 0.0297682 + 2.46725 1.92879 0.287876 -0.0923059 -0.988734 -0.117834 + 2.55743 1.93752 0.279154 0.451304 -0.889987 0.0651723 + 2.11899 1.92745 0.436183 -0.150894 -0.777408 -0.610628 + 2.25096 1.97584 0.273974 0.0223312 -0.988689 -0.14831 + 1.97939 1.91008 0.527278 -0.464129 -0.153791 -0.872314 + 2.10042 1.94287 0.395095 -0.460241 -0.664172 -0.589113 + 2.23238 1.99125 0.232885 -0.0799532 -0.996497 -0.0245063 + 2.35579 1.96937 0.155186 -0.271557 -0.943545 0.18968 + 2.46841 1.92264 0.20293 -0.146599 -0.981954 0.119476 + 1.98681 1.983 0.502177 -0.561287 -0.301657 -0.770688 + 2.10785 2.01579 0.369994 -0.645005 -0.583986 -0.492878 + 2.21447 1.97213 0.146212 -0.348375 -0.936876 -0.029968 + 2.33788 1.95024 0.068513 -0.31059 -0.935433 0.168814 + 1.86395 1.92119 0.601043 -0.367421 -0.116224 -0.922764 + 1.86303 1.97649 0.569659 -0.0802777 -0.65664 -0.74992 + 1.98589 2.03839 0.470843 -0.368885 -0.695125 -0.617029 + 2.09749 2.04099 0.300132 -0.607779 -0.747658 -0.267605 + 2.20412 1.99725 0.076298 -0.464977 -0.88396 -0.0491106 + 1.72344 1.78891 0.607946 -0.0683575 0.205625 -0.97624 + 1.73866 1.86406 0.624396 0.0576267 -0.0879699 -0.994455 + 1.75061 1.91433 0.605914 0.221224 -0.551671 -0.804189 + 1.84856 2.01994 0.506199 0.275472 -0.903026 -0.329635 + 1.97685 2.07276 0.415306 -0.133399 -0.933509 -0.332815 + 1.55876 1.75007 0.57343 0.275332 0.00285728 -0.961345 + 1.62279 1.80396 0.596478 0.299484 -0.0830465 -0.95048 + 1.63474 1.85424 0.577997 0.507909 -0.636863 -0.58003 + 1.62911 1.86904 0.529369 0.574287 -0.705876 -0.41465 + 1.73614 1.95778 0.542454 0.4003 -0.775248 -0.488621 + 1.4907 1.74 0.544658 0.499719 -0.517574 -0.694549 + 1.55473 1.7939 0.567707 0.574051 -0.467155 -0.672482 + 1.5491 1.8087 0.519079 0.558113 -0.675436 -0.481971 + 1.6096 1.89578 0.469647 0.534305 -0.669692 -0.515782 + 1.42107 1.71157 0.51291 0.445146 -0.643983 -0.622198 + 1.32788 1.68917 0.501908 0.451926 -0.790947 -0.412512 + 1.3416 1.70969 0.431165 0.204113 -0.701643 -0.682668 + 1.47947 1.78026 0.487332 0.52898 -0.565696 -0.632589 + 1.48119 1.81453 0.465381 0.403264 -0.407623 -0.819281 + 1.51874 1.84632 0.463109 0.371934 -0.682713 -0.628942 + 1.33145 1.63145 0.543685 0.00577073 -0.586066 -0.810243 + 1.24213 1.58922 0.591819 0.405878 -0.653216 -0.639196 + 1.25585 1.60974 0.521077 0.733069 -0.677968 -0.054492 + 0.202299 1.02452 0.721508 0.907211 -0.410738 -0.0908981 + 0.15157 1.06403 0.643287 -0.979472 -0.0908809 0.179929 + 0.234082 0.897133 0.710156 -0.837062 -0.441437 0.323203 + 0.244229 0.870941 0.669123 -0.690048 -0.721132 -0.0616642 + 0.309676 0.843906 0.623748 -0.233073 -0.871502 -0.431464 + 0.152736 0.978969 0.620009 -0.937993 -0.318667 0.136454 + 0.189415 0.940339 0.661921 -0.794578 -0.0695574 0.603164 + 0.219009 0.907591 0.61584 -0.646218 -0.744772 -0.166487 + 0.284455 0.880559 0.570464 -0.312537 -0.845145 -0.433648 + 0.162528 1.00458 0.544659 -0.823551 -0.121026 -0.55418 + 0.182329 0.946137 0.57388 -0.708726 -0.630776 -0.315958 + 0.268357 0.921192 0.510286 -0.309738 -0.667453 -0.677177 + 0.360002 0.911817 0.510322 0.1237 -0.734881 -0.66682 + 0.3761 0.87127 0.570549 0.125586 -0.844819 -0.520105 + 0.336879 0.960448 0.457692 0.042657 -0.633968 -0.772182 + 0.50752 0.852181 0.689413 0.332563 -0.852478 -0.403341 + 0.796318 1.05165 0.751717 0.461918 -0.535962 -0.706666 + 0.836418 1.08358 0.728015 0.175088 -0.526333 -0.832057 + 0.864226 1.02491 0.785242 0.0570301 -0.699887 -0.711974 + 0.819133 1.15034 0.699185 0.171875 -0.0589575 -0.983353 + 0.925343 1.0704 0.750837 0.388301 -0.512821 -0.765661 + 0.912503 1.00653 0.803681 0.233334 -0.666625 -0.707931 + 0.928794 0.949375 0.867469 0.170093 -0.679648 -0.713545 + 0.908058 1.13717 0.722007 0.270862 -0.250709 -0.929397 + 1.01464 1.15234 0.772115 0.64582 -0.423266 -0.635423 + 1.0018 1.08846 0.824958 0.486827 -0.327264 -0.809875 + 1.02022 1.0493 0.8338 0.226322 -0.394117 -0.890758 + 1.05187 0.99702 0.888545 -0.297698 -0.357201 -0.885315 + 0.998934 1.2881 0.724183 0.333965 -0.129558 -0.933639 + 1.00783 1.21606 0.740162 0.499355 -0.244388 -0.831215 + 1.10713 1.32608 0.795797 0.538744 -0.38091 -0.75144 + 1.13606 1.2957 0.832614 0.218669 -0.351567 -0.910266 + 1.15449 1.25662 0.841506 -0.553634 0.133807 -0.82194 + 0.970805 1.34472 0.708509 0.0412451 0.0257167 -0.998818 + 1.09286 1.46508 0.74365 -0.00318308 -0.228903 -0.973444 + 1.10032 1.38979 0.763845 0.283601 -0.326596 -0.901613 + 1.18554 1.48162 0.722401 0.110353 -0.648594 -0.753092 + 1.06473 1.5217 0.727976 0.180033 -0.508141 -0.842248 + 1.18281 1.61753 0.660593 -0.386171 -0.553711 -0.73775 + 1.19027 1.54224 0.680788 -0.646054 -0.296844 -0.703205 + 1.25585 1.60974 0.521077 -0.855804 -0.245678 -0.455239 + 1.26058 1.67037 0.479465 -0.707525 -0.12166 -0.696137 + 1.11069 1.64925 0.566047 0.182669 -0.850071 -0.493975 + 1.17119 1.6447 0.623934 0.239739 -0.799342 -0.550979 + 1.27974 1.74305 0.504183 0.116358 -0.779946 -0.614935 + 1.26813 1.77022 0.467524 0.53658 -0.827109 -0.167254 + 1.40002 1.84843 0.43166 0.318277 -0.808561 -0.494902 + 1.08987 1.68747 0.501654 -0.334451 -0.709302 -0.620511 + 1.27714 1.73384 0.36654 0.362731 -0.922568 -0.131513 + 1.0847 1.76643 0.448892 -0.646018 -0.37113 -0.667026 + 1.25633 1.77205 0.302146 -0.280083 -0.705534 -0.65098 + 1.39581 1.80816 0.253611 0.464538 -0.795514 -0.389053 + 1.3723 1.80029 0.286041 0.62763 -0.711542 0.315894 + 1.36329 1.83676 0.387075 0.505454 -0.851617 0.138795 + 0.963748 1.67169 0.607379 -0.755497 -0.22715 -0.614513 + 1.02368 1.78898 0.51143 -0.892864 0.190919 -0.407853 + 1.07689 1.85796 0.419351 -0.887376 0.140668 -0.439063 + 1.20666 1.87117 0.272668 -0.581059 -0.371834 -0.723955 + 0.939812 1.7023 0.659358 -0.88657 0.0803309 -0.455567 + 1.27974 1.74305 0.504183 -0.8219 0.38494 -0.419883 + 1.36248 1.81655 0.433883 -0.427988 0.603869 -0.672435 + 1.34332 1.74387 0.409165 -0.172196 -0.0570466 -0.98341 + 1.25585 1.60974 0.521077 -0.220231 -0.536248 -0.814823 + 1.40002 1.84843 0.43166 -0.645561 0.762778 0.0376797 + 1.49371 1.87369 0.4009 0.34234 -0.911475 -0.228071 + 1.58458 1.92315 0.407439 0.557262 -0.750147 -0.356003 + 1.71664 1.98444 0.482681 0.278229 -0.831885 -0.480163 + 1.45697 1.86202 0.356314 0.354918 -0.929497 0.10034 + 1.48049 1.86989 0.323885 0.53095 -0.844942 -0.0645404 + 1.56568 1.92661 0.343843 0.60291 -0.771357 -0.203735 + 1.70041 2.01636 0.421399 0.301257 -0.875416 -0.378009 + 1.45717 1.86774 0.25622 0.503959 -0.747068 -0.433491 + 1.54235 1.92454 0.276228 0.504036 -0.863544 -0.0154657 + 1.68151 2.01991 0.357853 0.49261 -0.870166 -0.0121202 + 1.80615 2.05582 0.310851 -0.247213 -0.930943 -0.268756 + 1.35107 1.82046 0.2205 0.0308679 -0.583249 -0.811707 + 1.41242 1.88004 0.223108 0.296819 -0.475157 -0.828326 + 1.42618 1.90793 0.206004 0.0559549 -0.788487 -0.6125 + 1.52271 1.90991 0.211981 0.331174 -0.897673 -0.2907 + 1.66635 1.9747 0.290952 0.460207 -0.837403 0.294899 + 1.3014 1.91958 0.191021 -0.260683 -0.473029 -0.841599 + 1.31516 1.94747 0.173917 0.0440153 -0.697839 -0.7149 + 1.40595 1.93105 0.152164 -0.156965 -0.870254 -0.466927 + 1.50248 1.93302 0.15814 0.0554339 -0.941576 -0.332208 + 1.64671 1.96006 0.226704 0.431689 -0.899067 0.0729549 + 1.19886 1.96262 0.243077 -0.732002 -0.213603 -0.646952 + 1.26321 2.0167 0.155612 -0.652699 -0.227075 -0.722787 + 1.30196 1.97625 0.143271 -0.467895 -0.51246 -0.720041 + 1.39275 1.95991 0.121567 -0.25105 -0.663083 -0.705191 + 1.47766 1.95416 0.101329 -0.0823218 -0.749088 -0.657335 + 1.12415 1.9304 0.389289 -0.904072 0.337209 -0.26257 + 1.17438 2.06327 0.257947 -0.908346 0.140968 -0.393745 + 1.23873 2.11735 0.170481 -0.741687 -0.0562635 -0.668382 + 1.33453 2.06406 0.095774 -0.60626 -0.214866 -0.76569 + 1.37329 2.02361 0.083435 -0.334344 -0.352648 -0.873987 + 1.07094 1.86142 0.481368 -0.784607 0.114513 -0.609327 + 1.13327 1.96877 0.413429 -0.869528 0.493876 0.00283459 + 0.972324 1.71963 0.595543 -0.851201 0.516356 -0.0939909 + 1.02369 1.81801 0.518748 -0.38825 -0.321218 -0.86376 + 1.4582 2.01786 0.063199 -0.312538 -0.605407 -0.731986 + 1.59463 1.94725 0.1013 0.0663678 -0.876901 -0.476067 + 1.61945 1.92603 0.15806 0.243899 -0.969305 0.0310103 + 1.43484 2.0693 0.0235 -0.451963 -0.743282 -0.493215 + 1.57347 1.98018 0.03807 -0.0562376 -0.816198 -0.575029 + 1.66293 2.07241 -0.037486 0.258456 -0.663051 -0.702541 + 1.68409 2.03939 0.025701 0.27263 -0.727827 -0.629238 + 1.70857 1.99641 0.074348 0.490401 -0.804537 -0.335002 + 1.38042 2.10717 0.002718 -0.424909 -0.664467 -0.614765 + 1.55011 2.03162 -0.001628 -0.214168 -0.595484 -0.774294 + 1.63216 2.12829 -0.077678 -0.0197043 -0.489115 -0.871997 + 1.71628 2.29053 -0.143889 -0.350455 -0.527353 -0.774003 + 1.74988 2.21936 -0.135015 -0.0760398 -0.581662 -0.809869 + 1.33928 2.16376 -0.010112 -0.422975 -0.278949 -0.862137 + 1.53196 2.1008 -0.030862 -0.256697 -0.418164 -0.871347 + 1.61401 2.19748 -0.106921 -0.108177 -0.517776 -0.848649 + 1.68551 2.34651 -0.184032 0.0644446 -0.625817 -0.777303 + 1.70192 2.42975 -0.265816 -0.571784 -0.719947 -0.393369 + 1.31168 2.22762 -0.000509 -0.476709 -0.374344 -0.795371 + 1.49081 2.1574 -0.043692 -0.286219 -0.444091 -0.849036 + 1.56252 2.23009 -0.131389 -0.180634 -0.605685 -0.774931 + 1.62659 2.36279 -0.226046 0.192369 -0.61118 -0.767759 + 1.27698 2.27543 -0.022522 -0.270669 -0.862189 -0.428214 + 1.44143 2.21733 -0.061887 -0.372907 -0.561533 -0.738661 + 1.51313 2.29001 -0.149574 -0.289754 -0.611365 -0.736394 + 1.5751 2.3954 -0.250513 -0.0542794 -0.696207 -0.715786 + 1.58421 2.4825 -0.34479 0.0710746 -0.822369 -0.564498 + 1.40673 2.26514 -0.0839 -0.311667 -0.645853 -0.696949 + 1.45249 2.32849 -0.170436 -0.270604 -0.687699 -0.673679 + 1.50702 2.42195 -0.279312 -0.110617 -0.738128 -0.665531 + 1.44772 2.53598 -0.412815 0.0751554 -0.845197 -0.529144 + 1.5158 2.50943 -0.384024 -0.0406863 -0.823733 -0.565516 + 1.39437 2.37983 -0.191359 -0.171735 -0.742652 -0.647283 + 1.44638 2.46044 -0.300165 -0.189766 -0.796118 -0.574618 + 1.38229 2.53653 -0.460558 0.176715 -0.802337 -0.570111 + 1.32563 2.61155 -0.555713 0.316298 -0.76934 -0.555042 + 1.40544 2.59553 -0.522956 0.0654508 -0.851329 -0.520533 + 1.33181 2.40193 -0.223025 -0.00531729 -0.786412 -0.617679 + 1.38039 2.48423 -0.321586 -0.0946595 -0.858646 -0.503752 + 1.3163 2.56033 -0.481979 0.0610148 -0.944679 -0.322272 + 1.2602 2.61211 -0.603465 0.784775 -0.617647 -0.051381 + 1.39026 2.63554 -0.586252 -0.133654 -0.97668 0.168024 + 1.26661 2.4303 -0.253176 0.137693 -0.836198 -0.530861 + 1.31783 2.50633 -0.353252 0.185982 -0.873261 -0.450361 + 1.27251 2.55329 -0.502787 0.338238 -0.92525 -0.171777 + 1.25085 2.53548 -0.642347 0.440322 -0.876021 0.196731 + 1.20572 2.43121 -0.29614 0.252556 -0.874902 -0.413233 + 1.25834 2.48932 -0.404594 0.408645 -0.831082 -0.377243 + 1.21302 2.53637 -0.554078 0.0101246 -0.981543 -0.190975 + 1.20705 2.52844 -0.663154 -0.32234 -0.924094 -0.205299 + 1.29075 2.53949 -0.6781 0.234468 -0.96012 0.152295 + 1.19745 2.49031 -0.447509 0.294009 -0.88254 -0.366991 + 1.13696 2.56225 -0.572121 0.24055 -0.816552 -0.524765 + 1.13498 2.58815 -0.664973 -0.34989 -0.869559 -0.348488 + 1.1783 2.60535 -0.717757 -0.228783 -0.445422 -0.865596 + 1.25037 2.54564 -0.715938 0.00630611 -0.546052 -0.837727 + 1.14564 2.48276 -0.502637 0.414545 -0.783728 -0.462518 + 1.08515 2.55479 -0.6272 0.321934 -0.602177 -0.730576 + 1.05893 2.61404 -0.683015 -0.248084 -0.66334 -0.705999 + 1.09197 2.49324 -0.547582 0.0228098 -0.863729 -0.50344 + 1.00774 2.56423 -0.626535 -0.213493 -0.706061 -0.675202 + 0.952736 2.65753 -0.671346 -0.133289 -0.534675 -0.83448 + 0.995094 2.70139 -0.709304 -0.182556 -0.0647531 -0.981061 + 1.10128 2.65798 -0.720924 -0.190865 -0.241193 -0.951523 + 0.935983 2.58446 -0.605581 -0.0900865 -0.66383 -0.742438 + 0.875326 2.66696 -0.670681 -0.0999409 -0.421074 -0.901503 + 0.923069 2.74734 -0.688105 -0.11676 0.0871691 -0.989327 + 1.18747 2.72598 -0.714907 -0.121215 0.263575 -0.956993 + 1.26096 2.67633 -0.738505 -0.0684365 0.00595046 -0.997638 + 0.870966 2.57111 -0.610862 0.295643 -0.26993 -0.916369 + 0.778787 2.66576 -0.665798 0.0984849 -0.344216 -0.933711 + 0.826531 2.74605 -0.683273 -0.0455286 0.0476413 -0.997826 + 1.11545 2.77194 -0.693708 -0.167445 0.248483 -0.954054 + 1.33308 2.79385 -0.727258 -0.0948411 -0.200281 -0.975137 + 0.798624 2.54457 -0.643083 0.509149 0.133604 -0.850246 + 0.713771 2.65233 -0.67113 0.477435 -0.197945 -0.85608 + 0.779571 2.78279 -0.673504 0.0612776 0.0646197 -0.996027 + 1.04311 2.83942 -0.656181 -0.165697 0.189405 -0.967817 + 0.887914 2.47712 -0.585663 0.573875 -0.0462899 -0.817633 + 0.765683 2.50322 -0.683475 0.594998 0.295082 -0.747599 + 0.673895 2.61527 -0.694348 0.748482 -0.092454 -0.656678 + 0.640955 2.57392 -0.734732 0.967448 0.156922 -0.198544 + 0.650081 2.67466 -0.739609 0.874451 -0.485098 -0.00393705 + 0.9257 2.91973 -0.647078 0.419638 -0.628224 -0.655164 + 0.996149 2.87607 -0.646464 -0.083087 0.000552148 -0.996542 + 0.673952 2.50458 -0.790829 0.967494 0.252412 0.0155832 + 0.683078 2.60532 -0.795705 0.769421 -0.286839 0.570714 + 0.836086 2.84874 -0.689923 0.671471 -0.611283 -0.418879 + 1.04073 2.97995 -0.685998 -0.0815139 -0.694347 -0.715009 + 0.734671 2.39274 -0.790508 0.82232 0.427947 -0.375036 + 1.23082 2.97775 -0.795581 -0.366035 -0.589373 -0.720179 + 1.11118 2.9363 -0.685384 -0.323937 -0.417107 -0.849168 + 1.1885 2.88821 -0.697087 -0.404972 -0.207456 -0.890483 + 1.19572 3.04732 -0.839083 -0.0829407 -0.901272 -0.42524 + 1.31198 3.01028 -0.86213 -0.148386 -0.670049 -0.727335 + 1.3905 3.00163 -0.85515 -0.03438 -0.334962 -0.941604 + 1.30814 2.92966 -0.807285 -0.340962 -0.474834 -0.811343 + 1.36325 3.06702 -0.907792 0.155057 -0.833908 -0.529674 + 1.43413 3.09074 -0.915481 0.502967 -0.851769 -0.146675 + 1.38286 3.03391 -0.869861 0.260468 -0.545147 -0.796851 + 1.47907 3.14352 -0.870306 0.666408 -0.700049 -0.256579 + 1.48671 3.11124 -0.855587 0.593306 -0.175406 -0.785634 + 1.46456 2.96133 -0.856744 0.433671 -0.509201 -0.7434 + 1.3822 2.88936 -0.80888 -0.125509 -0.464528 -0.876619 + 1.59496 3.20381 -0.955135 0.63392 -0.726842 0.264284 + 1.54549 3.15754 -0.791375 0.887634 -0.370916 -0.272996 + 1.52334 3.00771 -0.792474 0.837472 -0.281624 -0.468326 + 1.45443 2.86248 -0.801524 0.44711 -0.59702 -0.666078 + 1.26084 2.82082 -0.734563 -0.277489 -0.275354 -0.920424 + 1.77508 3.28657 -1.06087 0.487567 -0.717152 0.497967 + 1.86176 3.43631 -0.971036 0.518958 -0.61624 0.592394 + 1.68164 3.35355 -0.865289 0.67825 -0.554468 0.482227 + 1.91688 3.30485 -1.13414 0.239255 -0.697744 0.675212 + 1.97363 3.439 -1.04168 0.29723 -0.583833 0.755509 + 2.00552 3.64988 -0.887349 0.457435 -0.53112 0.713208 + 2.03489 3.31849 -1.14235 -0.0182706 -0.615519 0.78791 + 2.09165 3.45262 -1.04988 0.054304 -0.457319 0.887643 + 2.11739 3.65256 -0.957993 0.2582 -0.660345 0.705179 + 2.09605 3.15024 -1.26755 -0.263228 -0.305557 0.915066 + 2.13632 3.2951 -1.13945 -0.266846 -0.550978 0.790706 + 2.1816 3.33755 -1.09758 -0.132174 -0.416136 0.899645 + 2.18006 3.48536 -1.04378 0.0413162 -0.370108 0.92807 + 2.20581 3.68529 -0.95188 0.271468 -0.417502 0.867178 + 2.14282 3.05528 -1.26346 -0.49629 -0.218851 0.840119 + 2.21833 3.15421 -1.17961 -0.500217 -0.336075 0.798021 + 2.2636 3.19658 -1.1378 -0.107978 -0.319223 0.941508 + 2.27696 3.31872 -1.10056 0.050101 -0.323185 0.945009 + 2.27543 3.46653 -1.04677 0.264821 -0.305753 0.914541 + 2.11149 2.90972 -1.33014 -0.521176 -0.281282 0.805764 + 2.32373 2.91548 -1.12313 -0.587964 0.0175507 0.808697 + 2.2651 3.05915 -1.17558 -0.537321 -0.084115 0.839173 + 2.32326 3.04155 -1.14509 0.0336512 0.195202 0.980186 + 2.30229 3.14979 -1.15956 0.552687 0.0674438 0.830656 + 2.25441 2.49434 -1.34129 -0.694787 -0.245086 0.676169 + 2.29241 2.76992 -1.18981 -0.719133 -0.212029 0.661733 + 2.43192 2.81345 -1.02221 -0.700339 0.244804 0.670519 + 2.3819 2.89788 -1.09264 -0.184813 0.50216 0.844795 + 2.19343 2.3614 -1.44902 -0.673294 -0.429962 0.601505 + 2.38166 2.37619 -1.23645 -0.780582 -0.2705 0.56349 + 2.41966 2.65186 -1.08493 -0.812118 -0.190649 0.551468 + 2.19141 2.26339 -1.55927 -0.590204 -0.681517 0.432659 + 2.28861 2.25875 -1.43763 -0.594287 -0.646519 0.478368 + 2.40446 2.27752 -1.25614 -0.677232 -0.554043 0.484142 + 2.50558 2.41975 -1.0117 -0.859194 -0.219936 0.461967 + 2.1959 2.24044 -1.60352 -0.266858 -0.960607 0.0775979 + 2.31731 2.23023 -1.45523 -0.203759 -0.963926 0.171253 + 2.43316 2.24899 -1.27374 -0.221677 -0.938223 0.265702 + 2.56039 2.29426 -1.03674 -0.232768 -0.930696 0.282175 + 2.52838 2.32108 -1.03139 -0.717522 -0.532754 0.448704 + 2.22027 2.24431 -1.62202 0.307573 -0.839233 -0.448427 + 2.34167 2.2341 -1.47373 0.354542 -0.901958 -0.24652 + 2.45861 2.2487 -1.29362 0.378665 -0.919644 -0.104251 + 2.58585 2.29395 -1.05661 0.389559 -0.920836 -0.0174791 + 2.62979 2.32533 -0.864149 -0.241571 -0.944778 0.221443 + 2.11269 2.29132 -1.74085 0.260504 -0.675861 -0.689456 + 2.2528 2.27635 -1.62132 0.618366 -0.417079 -0.666084 + 2.37143 2.26879 -1.49442 0.671909 -0.529926 -0.517413 + 2.48837 2.28339 -1.31431 0.763623 -0.522942 -0.378697 + 2.6107 2.3166 -1.06664 0.791842 -0.547112 -0.271395 + 2.14522 2.32336 -1.74014 0.576688 -0.341687 -0.742079 + 2.20604 2.39694 -1.69919 0.702302 -0.108798 -0.703517 + 2.28302 2.33097 -1.61352 0.694617 -0.170725 -0.698827 + 2.40166 2.32341 -1.48662 0.790406 -0.196616 -0.580172 + 2.50482 2.35078 -1.32843 0.867374 -0.151911 -0.473904 + 2.05358 2.41322 -1.84278 0.495528 -0.304985 -0.813287 + 2.1144 2.48689 -1.80179 0.669009 -0.0503813 -0.741545 + 2.31438 2.50519 -1.59007 0.763922 0.0745473 -0.640988 + 2.39136 2.43913 -1.50445 0.790307 0.0546089 -0.610273 + 2.49453 2.4665 -1.34626 0.847806 0.0654729 -0.526249 + 1.94479 2.45263 -1.90705 0.336243 -0.33616 -0.879737 + 1.98576 2.53833 -1.90668 0.460474 0.023228 -0.887369 + 2.16603 2.59459 -1.75254 0.709055 0.137512 -0.691615 + 1.86195 2.54064 -1.95268 0.310542 -0.0748399 -0.947609 + 2.03739 2.64603 -1.85742 0.618068 0.076534 -0.78239 + 2.24194 2.72805 -1.6143 0.780376 0.208978 -0.589357 + 2.39029 2.63865 -1.45183 0.804111 0.212302 -0.555278 + 2.49329 2.5927 -1.31286 0.82348 0.213687 -0.525565 + 1.90627 2.66503 -1.94613 0.418474 -0.00425106 -0.908219 + 1.93489 2.81924 -1.90904 0.528604 0.120894 -0.840216 + 2.066 2.80025 -1.82034 0.693987 0.113716 -0.71095 + 2.17485 2.85109 -1.6634 0.795705 0.201428 -0.57121 + 2.38575 2.89521 -1.32322 0.838269 0.262333 -0.478002 + 1.80062 2.79505 -1.96253 0.1338 0.15225 -0.979243 + 1.8713 2.86373 -1.93829 0.294788 0.185389 -0.937406 + 1.98323 3.03521 -1.84151 0.634615 0.231175 -0.737443 + 2.03559 3.02965 -1.78487 0.734394 0.272104 -0.621792 + 2.14444 3.08049 -1.62792 0.778636 0.287473 -0.55775 + 1.7707 2.97684 -1.9164 0.133419 0.200884 -0.970487 + 1.84137 3.0456 -1.89209 0.156999 0.206819 -0.9657 + 1.91965 3.07969 -1.87075 0.373964 0.193041 -0.90713 + 1.55622 2.89886 -1.96933 0.187376 0.102362 -0.97694 + 1.68973 3.06889 -1.91844 0.229269 0.0715042 -0.970733 + 1.82756 3.12337 -1.8818 0.236797 -0.000513714 -0.971559 + 1.90584 3.15746 -1.86045 0.444827 0.201356 -0.872688 + 1.46366 2.88377 -1.98619 0.0932554 0.0330778 -0.995093 + 1.4767 3.16306 -1.97075 0.206175 0.0169078 -0.978369 + 1.48786 3.25512 -1.9694 0.107757 -0.245094 -0.963492 + 1.70089 3.16095 -1.91709 0.218922 -0.121734 -0.968119 + 1.81596 3.17598 -1.89651 0.319283 0.0327563 -0.947093 + 1.31949 3.00873 -1.98584 0.016312 -0.0207455 -0.999652 + 1.38414 3.14797 -1.98761 0.127312 -0.00612026 -0.991844 + 1.28456 2.89173 -1.99019 0.0221008 0.0463043 -0.998683 + 1.20375 2.92299 -1.98954 -0.0205017 0.0750963 -0.996966 + 1.17834 3.00699 -1.98062 -0.0720716 -0.0652024 -0.995266 + 1.17824 3.0538 -1.99369 -0.0675442 -0.27984 -0.957668 + 1.23855 3.08685 -1.99834 0.091776 -0.143728 -0.985352 + 1.16363 2.71074 -2.0043 0.108166 0.175013 -0.978607 + 1.10555 2.89233 -1.98803 0.0906666 0.125668 -0.987921 + 1.08014 2.97632 -1.97911 0.0794665 0.149379 -0.985581 + 1.06208 3.04749 -1.96857 0.144114 -0.112001 -0.983202 + 1.06198 3.0943 -1.98165 0.214222 -0.482034 -0.84956 + 1.05478 2.85312 -2.00632 0.362667 0.201661 -0.909838 + 1.02944 2.93831 -1.99707 0.352468 0.213754 -0.911085 + 1.01138 3.00948 -1.98653 0.654139 0.00684707 -0.756344 + 1.01116 3.05512 -1.99999 0.827631 -0.310653 -0.467462 + 1.07961 3.16294 -2.03154 0.414632 -0.837115 -0.356818 + 0.975299 2.85138 -2.0535 0.95144 0.238123 -0.195086 + 1.02879 3.12367 -2.04993 0.56819 -0.356565 -0.741634 + 1.13992 3.19591 -2.03624 0.229932 -0.177704 -0.956845 + 1.3032 3.226 -2.00016 0.179543 -0.063667 -0.981688 + 1.50006 2.89604 -0.702459 0.755571 -0.327893 -0.567096 + 1.40656 2.74411 -0.750897 0.231851 -0.214789 -0.948742 + 1.46196 2.7255 -0.700868 0.551622 -0.228435 -0.802204 + 1.33797 2.62378 -0.735288 0.155368 -0.278657 -0.94774 + 1.56896 3.04128 -0.69341 0.88533 -0.232284 -0.402783 + 1.61028 3.04066 -0.617947 0.802329 -0.119395 -0.584819 + 1.55546 2.87743 -0.65243 0.715171 -0.17481 -0.676736 + 1.61437 3.23854 -0.641875 0.890541 -0.182957 -0.41649 + 1.65569 3.23792 -0.566404 0.78743 -0.254906 -0.561229 + 1.67628 3.06941 -0.545148 0.726877 -0.0537266 -0.684663 + 1.62146 2.9061 -0.57968 0.718332 -0.110391 -0.686886 + 1.58849 3.30425 -0.777901 0.914292 -0.357275 0.190853 + 1.65737 3.38525 -0.628392 0.881303 -0.268859 -0.388612 + 1.72476 3.28224 -0.500178 0.733933 -0.0961806 -0.672378 + 1.74536 3.11365 -0.478972 0.67637 -0.0304491 -0.735933 + 1.70671 3.54272 -0.695131 0.871358 -0.468821 0.144717 + 1.77531 3.6815 -0.637106 0.884812 -0.462439 0.0570738 + 1.72597 3.52404 -0.570377 0.876903 -0.288922 -0.384143 + 1.79986 3.5921 -0.782469 0.615243 -0.491472 0.616386 + 1.86474 3.76767 -0.713957 0.663508 -0.494972 0.561035 + 1.84051 3.81505 -0.596833 0.861095 -0.504246 0.0652007 + 2.07039 3.82544 -0.818829 0.525064 -0.324806 0.786644 + 1.92994 3.90122 -0.673683 0.759256 -0.400809 0.512721 + 1.94943 4.01599 -0.560873 0.89014 -0.44434 -0.101061 + 1.95262 3.9314 -0.490156 0.811097 -0.424423 -0.402477 + 1.82365 3.76664 -0.537178 0.873063 -0.379806 -0.305792 + 2.14037 3.9084 -0.844915 0.519966 -0.226324 0.823658 + 1.97612 3.9831 -0.709897 0.775538 -0.28472 0.56345 + 1.99561 4.09788 -0.597096 0.902196 -0.430551 0.0258403 + 2.03259 4.06293 -0.415175 0.893177 -0.297131 -0.337561 + 2.03579 3.97842 -0.344398 0.861593 -0.0883979 -0.499843 + 2.20153 3.88538 -0.885041 0.352607 -0.269278 0.896191 + 2.13402 4.1046 -0.790138 0.520963 -0.339746 0.783052 + 2.0461 4.06606 -0.735983 0.618441 -0.330479 0.712962 + 2.02928 4.14695 -0.667097 0.75968 -0.528621 0.378743 + 2.03936 4.18336 -0.499351 0.917623 -0.374214 -0.133908 + 2.28373 3.89467 -0.903336 0.592753 -0.181143 0.784749 + 2.19518 4.08157 -0.830255 0.523382 -0.221904 0.822697 + 2.15099 4.25654 -0.721906 0.758773 -0.310386 0.572647 + 2.11721 4.18549 -0.721252 0.711338 -0.450945 0.539116 + 2.07304 4.23252 -0.569301 0.850339 -0.482751 0.209463 + 2.28801 3.69459 -0.970183 0.413654 -0.298851 0.859987 + 2.30531 3.92699 -0.930517 0.976263 0.101939 0.191098 + 2.22707 4.10422 -0.851082 0.721056 -0.093298 0.686567 + 2.18288 4.27918 -0.742733 0.833906 -0.111718 0.540482 + 2.31574 3.47529 -1.07374 0.87692 -0.128845 0.463045 + 2.32832 3.70336 -0.997166 0.960268 -0.0664704 0.271048 + 2.28632 3.94674 -0.972512 0.843449 0.245586 -0.477788 + 2.24854 4.17171 -0.91737 0.929195 0.261675 -0.261004 + 2.24864 4.13654 -0.878263 0.923726 0.0909507 0.3721 + 2.31565 3.27194 -1.12232 0.66785 -0.205359 0.715404 + 2.31988 3.32521 -1.13379 0.989768 -0.00581824 0.142569 + 2.31998 3.49107 -1.12188 0.888669 0.189445 -0.417587 + 2.30934 3.72318 -1.0391 0.77699 0.215255 -0.591568 + 2.2552 3.95093 -1.00678 0.405141 0.219637 -0.88748 + 2.32881 3.19885 -1.17333 0.823816 -0.0686056 0.562691 + 2.33304 3.25212 -1.1848 0.984546 0.104988 0.140167 + 2.33018 3.26569 -1.2177 0.91787 0.250287 -0.308011 + 2.32412 3.3409 -1.18198 0.943948 0.200673 -0.262091 + 2.26781 3.48799 -1.15554 0.408597 0.431151 -0.804461 + 2.3275 3.13582 -1.17017 0.671931 0.116824 0.731342 + 2.34791 3.10642 -1.19964 0.680376 0.194051 0.706705 + 2.34921 3.16953 -1.20275 0.921368 0.170262 0.349415 + 2.34636 3.18301 -1.2357 0.915542 0.285872 -0.28295 + 2.25961 3.25755 -1.32101 0.679149 0.4543 -0.576513 + 2.34847 3.02759 -1.15571 0.476697 0.44267 0.759476 + 2.37953 3.0253 -1.16654 0.465635 0.494731 0.733774 + 2.38695 3.07967 -1.21551 0.913632 0.392814 0.104758 + 2.31866 3.01833 -1.37227 0.830747 0.239178 -0.502646 + 2.27807 3.12168 -1.39247 0.814822 0.293371 -0.499998 + 2.39088 2.92679 -1.11191 0.284346 0.538619 0.793118 + 2.42194 2.92441 -1.12279 0.114789 0.646593 0.754149 + 2.41857 2.99846 -1.18245 0.866542 0.48193 0.129802 + 2.44091 2.84227 -1.04153 -0.237021 0.666068 0.70723 + 2.46684 2.86717 -1.05965 -0.190559 0.726383 0.660345 + 2.46885 2.93672 -1.12491 -0.138387 0.655284 0.742598 + 2.48508 2.80086 -0.963391 -0.378377 0.74819 0.545016 + 2.51101 2.82575 -0.98151 -0.340047 0.770053 0.539803 + 2.51375 2.87948 -1.06177 0.492291 0.844218 0.212004 + 2.48379 2.76838 -0.917348 -0.710214 0.417356 0.566931 + 2.52439 2.73342 -0.844986 -0.644861 0.43255 0.630123 + 2.52569 2.76589 -0.891029 -0.370329 0.735316 0.567598 + 2.552 2.7856 -0.893959 -0.394705 0.725965 0.56319 + 2.55657 2.85204 -0.988248 0.322281 0.935296 0.146135 + 2.44962 2.72882 -0.999425 -0.903528 -0.118642 0.411778 + 2.50149 2.68375 -0.894552 -0.912315 -0.144965 0.382971 + 2.538 2.62912 -0.825736 -0.850754 -0.123915 0.510747 + 2.57436 2.70811 -0.786946 -0.640341 0.399221 0.65619 + 2.60068 2.72773 -0.789934 -0.530689 0.609118 0.58936 + 2.53554 2.49671 -0.9262 -0.904868 -0.172496 0.389177 + 2.57205 2.442 -0.857433 -0.944306 -0.192886 0.266609 + 2.58797 2.60381 -0.767704 -0.882255 -0.0338123 0.469556 + 2.63265 2.58495 -0.671634 -0.796042 0.209686 0.567758 + 2.64759 2.66422 -0.691526 -0.617391 0.408196 0.672461 + 2.62735 2.77706 -0.803569 -0.610821 0.50002 0.613904 + 2.59777 2.35215 -0.858812 -0.794912 -0.551824 0.2522 + 2.5772 2.45282 -0.751176 -0.967617 -0.0713522 0.242127 + 2.62188 2.43396 -0.655106 -0.954579 0.0582228 0.292214 + 2.60292 2.36289 -0.752614 -0.753798 -0.632932 0.176596 + 2.61197 2.36466 -0.665269 -0.859328 -0.500528 0.105009 + 2.64071 2.41751 -0.577825 -0.865074 0.291459 0.408286 + 2.72643 2.48661 -0.533697 -0.677356 0.38995 0.623801 + 2.74137 2.56587 -0.553589 -0.678793 0.311168 0.665142 + 2.64821 2.34852 -0.75112 -0.12657 -0.984292 0.123079 + 2.65726 2.35028 -0.663776 -0.0882357 -0.994597 -0.0546845 + 2.6308 2.34821 -0.587988 -0.886231 -0.452376 -0.099749 + 2.62461 2.29891 -0.474391 -0.966054 0.234751 0.107849 + 2.6713 2.33883 -0.461941 -0.641501 0.594047 0.48537 + 2.66423 2.32665 -0.868442 0.40228 -0.913666 0.0581781 + 2.68265 2.34984 -0.755413 0.321865 -0.945319 0.052682 + 2.69973 2.35576 -0.656064 0.361262 -0.92819 -0.0891837 + 2.65478 2.33721 -0.59174 -0.145298 -0.935081 -0.323284 + 2.68909 2.3493 -0.878472 0.770395 -0.624307 -0.129355 + 2.71754 2.37223 -0.759195 0.746177 -0.661869 -0.0717628 + 2.73462 2.37815 -0.659845 0.711008 -0.684692 -0.1602 + 2.69726 2.3427 -0.584036 0.333435 -0.889399 -0.312715 + 2.65599 2.29595 -0.515472 -0.0595492 -0.822488 -0.565656 + 2.62716 2.384 -1.08077 0.877351 -0.262665 -0.401576 + 2.7039 2.38727 -0.910439 0.880404 -0.385332 -0.27642 + 2.73235 2.41021 -0.791162 0.93514 -0.318611 -0.154919 + 2.75386 2.42636 -0.691736 0.946918 -0.272978 -0.169795 + 2.75602 2.37044 -0.572693 0.674232 -0.674298 -0.301221 + 2.64252 2.47677 -1.10226 0.888004 -0.0482117 -0.4573 + 2.71926 2.48005 -0.931931 0.882656 0.335253 -0.329429 + 2.74077 2.4962 -0.832505 0.980408 0.0271144 -0.195102 + 2.77823 2.47099 -0.568038 0.987616 0.135624 -0.0788729 + 2.77526 2.41856 -0.604634 0.954101 -0.198244 -0.224478 + 2.64128 2.60297 -1.06884 0.875854 0.217192 -0.430937 + 2.53903 2.78753 -1.1267 0.832415 0.367805 -0.414493 + 2.58184 2.76009 -1.05317 0.83692 0.406029 -0.367021 + 2.63086 2.78461 -0.927457 0.806485 0.566707 -0.168599 + 2.6903 2.62741 -0.943175 0.92401 0.242122 -0.295944 + 2.72259 2.56669 -0.860208 0.956179 0.231644 -0.179059 + 2.43603 2.83347 -1.26568 0.831561 0.299208 -0.467954 + 2.46885 2.93672 -1.12491 0.844887 0.357665 -0.397795 + 2.79322 2.409 -0.417882 -0.730368 0.292555 0.617231 + 2.79322 2.409 -0.417882 0.995577 0.00890332 -0.0935304 + 2.79025 2.35658 -0.454487 0.935687 -0.281566 -0.212626 + 2.75511 2.32544 -0.485146 0.633574 -0.668455 -0.389553 + 2.69635 2.29778 -0.49643 0.372962 -0.776324 -0.508153 + 2.80482 2.30012 -0.301482 0.896726 -0.40283 -0.183331 + 2.7775 2.26562 -0.336527 0.814235 -0.518397 -0.261314 + 2.74236 2.23447 -0.367186 0.645912 -0.65418 -0.393504 + 2.68513 2.23031 -0.417569 0.41328 -0.727264 -0.547983 + 2.64477 2.22857 -0.436561 0.126321 -0.737578 -0.663342 + 2.77295 2.19257 -0.167609 0.892697 -0.445818 -0.0658623 + 2.74564 2.15807 -0.202654 0.781382 -0.588638 -0.207236 + 2.70354 2.14469 -0.271672 0.601803 -0.695448 -0.392665 + 2.64631 2.14052 -0.322056 0.462091 -0.736858 -0.49347 + 2.62055 2.15769 -0.36899 0.20344 -0.722506 -0.660755 + 2.77928 2.20864 -0.082238 0.984586 0.110243 0.135782 + 2.70267 2.07318 0.003376 0.836514 -0.547754 0.014477 + 2.6949 2.06228 -0.099938 0.767693 -0.627281 -0.131019 + 2.6528 2.0488 -0.168998 0.569824 -0.742112 -0.352945 + 2.57747 2.04533 -0.243775 0.226749 -0.82943 -0.51052 + 2.55172 2.0625 -0.290718 -0.351892 -0.666295 -0.657436 + 2.709 2.08926 0.088737 0.856384 -0.510245 0.0790959 + 2.63892 1.99185 0.107248 0.755261 -0.652355 0.0633558 + 2.63115 1.98094 0.00394 0.684966 -0.724785 -0.0742184 + 2.59691 1.97242 -0.081094 0.529917 -0.802109 -0.275335 + 2.76211 2.1813 0.071503 0.905551 0.287613 0.311858 + 2.7167 2.13753 0.17632 0.898473 0.237665 0.369136 + 2.6847 2.09356 0.268876 0.909643 -0.405524 0.0900051 + 2.677 2.04529 0.181292 0.818587 -0.573067 0.0388578 + 2.63136 1.99719 0.2026 0.722923 -0.685561 0.0859597 + 2.7715 2.24308 -0.168698 -0.275405 0.906716 0.319404 + 2.75433 2.21575 -0.014957 0.21925 0.951198 0.217145 + 2.72403 2.18316 0.102286 0.0398625 0.92883 0.368355 + 2.76861 2.29912 -0.301354 -0.223355 0.8396 0.495161 + 2.68124 2.21888 -0.191575 -0.231281 0.92765 0.293213 + 2.68391 2.19877 -0.072337 -0.266334 0.949399 0.166457 + 2.65361 2.16627 0.044948 -0.285331 0.934935 0.210909 + 2.67862 2.13939 0.207102 -0.00424041 0.996266 0.0862374 + 2.80482 2.30012 -0.301482 -0.0213744 0.837882 0.545433 + 2.75702 2.40792 -0.417813 -0.356776 0.698251 0.62061 + 2.67835 2.27482 -0.324272 -0.464578 0.825742 0.319871 + 2.57225 2.19177 -0.160632 -0.156026 0.980244 0.121564 + 2.57493 2.17175 -0.041352 -0.13483 0.96413 0.228636 + 2.79322 2.409 -0.417882 -0.0217758 0.77056 0.636995 + 2.63166 2.23499 -0.336672 -0.772075 0.630387 0.0807016 + 2.58701 2.17446 -0.264832 -0.78381 0.566506 -0.254388 + 2.54034 2.19516 -0.206485 -0.179878 0.933812 -0.309254 + 2.39313 2.16016 -0.026063 0.0860057 0.994129 0.0656515 + 2.62087 2.22263 -0.399276 -0.921776 0.387633 0.00839225 + 2.57622 2.1621 -0.327435 -0.910889 0.318364 -0.262537 + 2.52389 2.06481 -0.24912 -0.574172 -0.34192 -0.74392 + 2.47436 2.13853 -0.208818 -0.558872 0.310508 -0.768925 + 2.42769 2.15923 -0.150462 -0.448132 0.726509 -0.520925 + 2.63201 2.30695 -0.511721 -0.66717 -0.619317 -0.413922 + 2.62827 2.23067 -0.436606 -0.635642 -0.504043 -0.584722 + 2.60405 2.15979 -0.369034 -0.495276 -0.455891 -0.739503 + 2.52158 1.96885 -0.155921 0.213752 -0.812116 -0.542934 + 2.46026 1.99781 -0.192677 -0.286723 -0.4782 -0.83013 + 2.41073 2.07162 -0.152324 -0.429304 -0.0775828 -0.899822 + 2.35036 2.11422 -0.142509 -0.317898 0.250277 -0.914495 + 2.4752 1.90394 -0.065482 0.153994 -0.935207 -0.318862 + 2.41388 1.93289 -0.102239 -0.101387 -0.787323 -0.608147 + 2.34741 1.98765 -0.137876 -0.211049 -0.356109 -0.910299 + 2.28704 2.03016 -0.128111 -0.0725027 0.0370631 -0.996679 + 2.52785 1.90878 0.011527 0.323965 -0.942463 -0.082528 + 2.43748 1.90232 0.037117 -0.144141 -0.982497 0.118 + 2.38482 1.89739 -0.039944 -0.283936 -0.958485 -0.0262235 + 2.32532 1.93473 -0.091815 -0.28481 -0.833993 -0.472587 + 2.25885 1.98948 -0.127453 -0.366669 -0.608295 -0.70394 + 2.56209 1.91731 0.096564 0.424164 -0.904233 0.0494767 + 2.46552 1.90768 0.115641 -0.105461 -0.984845 0.137689 + 2.30984 1.9448 -0.010065 -0.341642 -0.939437 0.027197 + 2.26235 1.96594 -0.076878 -0.458021 -0.888087 -0.0389571 + 2.20285 2.00328 -0.128748 -0.300277 -0.684294 -0.664511 + 2.56499 1.93226 0.183852 0.436985 -0.892297 0.113354 + 2.62208 2.00313 0.305904 0.710348 -0.69746 0.0946306 + 2.66772 2.05132 0.284646 0.852719 -0.514268 0.0916429 + 2.68075 2.1021 0.367288 0.991928 0.067784 0.107161 + 2.66952 2.10925 0.515707 0.963936 0.238587 0.11791 + 2.65377 2.14534 0.36779 0.613387 0.789717 0.0101416 + 2.64254 2.15241 0.516157 0.765157 0.642382 -0.0433546 + 2.64936 2.17764 0.618455 0.835803 0.443509 -0.323624 + 2.69067 2.14011 0.697648 0.958104 0.0577956 -0.280527 + 2.67358 2.07899 0.647313 0.958496 -0.0365627 -0.282751 + 2.63114 2.14084 0.289597 0.123464 0.983379 -0.133126 + 2.54722 2.20302 0.444687 0.443546 0.878704 -0.176481 + 2.55403 2.22825 0.546984 0.691815 0.636579 -0.340822 + 2.68134 2.24606 0.776546 0.811488 0.410337 -0.416066 + 2.72266 2.20854 0.855739 0.941793 0.107823 -0.318435 + 2.55226 2.13436 0.203219 0.173224 0.975412 -0.136256 + 2.52459 2.19852 0.366494 0.329327 0.920197 -0.211615 + 2.4744 2.21408 0.359742 0.617685 0.68527 -0.385837 + 2.54716 2.2602 0.573062 0.858658 0.267007 -0.437508 + 2.59974 2.13291 0.120721 -0.124145 0.986088 0.110534 + 2.52106 2.13839 0.03443 -0.0365716 0.979023 0.200441 + 2.50208 2.14992 0.196468 0.292599 0.929108 -0.226149 + 2.34077 2.15746 0.061211 0.640804 0.767535 0.016146 + 2.46869 2.13569 0.121704 0.0926142 0.985538 -0.141904 + 2.43045 2.20281 0.262053 0.612645 0.694194 -0.377837 + 2.29868 2.23092 0.067564 0.712179 0.505665 -0.486932 + 2.39707 2.18859 0.187288 0.578834 0.703298 -0.412702 + 2.40148 2.26853 0.27863 0.855918 0.261603 -0.446058 + 2.23721 2.19597 -0.019299 0.475875 0.54311 -0.691791 + 2.26939 2.33052 0.091463 0.700012 0.215634 -0.680798 + 2.33965 2.40641 0.178006 0.821898 0.0280302 -0.568945 + 2.35498 2.26205 0.193641 0.849162 0.254372 -0.462839 + 2.28297 2.14801 -0.042428 0.0463855 0.823618 -0.565245 + 2.18137 2.18104 -0.066045 0.605212 0.452975 -0.654623 + 2.15423 2.26975 -0.072682 0.723278 0.152528 -0.673501 + 2.20792 2.29565 0.00465 0.76011 0.214829 -0.613255 + 2.36122 2.16345 -0.071967 -0.206332 0.976315 -0.0650779 + 2.34944 2.14371 -0.120982 -0.304404 0.780206 -0.546458 + 2.22713 2.133 -0.089233 0.105905 0.700789 -0.705464 + 2.22806 2.10343 -0.11081 0.108157 0.451318 -0.885784 + 2.11644 2.21114 -0.126378 0.731918 0.290401 -0.616411 + 2.21245 2.05762 -0.140074 0.293347 0.193593 -0.936199 + 2.15347 2.13089 -0.122772 0.617527 0.444233 -0.64909 + 2.04131 2.30483 -0.180655 0.322644 -0.040949 -0.945634 + 2.00494 2.38241 -0.200613 0.402568 -0.110055 -0.90875 + 2.0893 2.29985 -0.133016 0.705511 0.139444 -0.694845 + 2.11 2.13872 -0.166128 -0.223537 -0.273811 -0.935446 + 2.07835 2.22458 -0.177049 0.222904 -0.0150988 -0.974723 + 1.99528 2.25385 -0.159746 -0.159199 -0.427504 -0.889885 + 2.1564 2.07049 -0.153557 -0.269975 -0.424126 -0.864425 + 2.05462 2.14025 -0.122982 -0.620185 -0.543127 -0.566024 + 2.02297 2.22611 -0.133903 -0.311538 -0.629409 -0.71189 + 2.13094 2.03961 -0.057868 -0.623805 -0.751981 -0.213052 + 2.08449 2.10682 -0.082678 -0.60021 -0.740754 -0.301714 + 2.01921 2.08801 0.063897 0.192739 -0.952173 -0.237105 + 2.00431 2.06925 -0.007613 0.27448 -0.884077 -0.378244 + 1.97662 2.09698 -0.033448 0.181554 -0.809946 -0.557697 + 2.15662 2.01839 0.009485 -0.53482 -0.844965 -0.00153331 + 2.06277 2.09659 0.177241 0.0345612 -0.98921 0.142371 + 2.04908 2.05457 0.10421 0.114904 -0.992838 -0.0327054 + 1.96677 2.02569 0.223428 0.477653 -0.864619 0.155825 + 1.95187 2.00685 0.151867 0.291033 -0.949605 -0.116403 + 2.08845 2.07537 0.244596 -0.561086 -0.802972 -0.201041 + 1.98985 2.08774 0.344357 0.133315 -0.991069 -0.00316876 + 1.97616 2.04573 0.271322 0.57649 -0.770898 0.270878 + 1.85216 2.01488 0.387357 0.22185 -0.975078 -0.00215842 + 1.86155 2.03492 0.43525 0.595665 -0.802821 0.0257183 + 1.82237 2.0239 0.372133 -0.209197 -0.925756 -0.314981 + 1.92207 2.01587 0.136644 -0.285996 -0.923519 -0.255575 + 1.96388 2.12008 -0.102051 0.383241 -0.669611 -0.636198 + 1.9589 2.33142 -0.179704 0.157719 -0.352588 -0.922392 + 1.90933 2.03897 0.06804 -0.0732252 -0.965012 -0.251771 + 1.88992 2.05432 0.003641 -0.0878354 -0.908832 -0.407811 + 1.92201 2.1794 -0.143392 0.0832893 -0.543582 -0.835214 + 1.91703 2.39073 -0.221035 0.219575 -0.241535 -0.945224 + 1.98115 2.45802 -0.212777 0.327904 -0.0646981 -0.942493 + 1.78673 2.07109 0.246399 0.191047 -0.979735 0.0601637 + 1.77158 2.02597 0.179548 0.487079 -0.873037 0.0236991 + 1.84277 2.10366 -0.031417 -0.0444197 -0.853981 -0.518405 + 1.87486 2.22874 -0.178448 0.13811 -0.510781 -0.848545 + 1.73583 2.03045 0.142995 0.460923 -0.870142 -0.174365 + 1.80703 2.10814 -0.067965 -0.0507253 -0.767378 -0.639185 + 1.81538 2.28023 -0.219246 -0.14234 -0.458795 -0.877067 + 1.84323 2.43208 -0.244655 0.335595 -0.220068 -0.91594 + 1.90735 2.49937 -0.236397 0.319533 -0.295997 -0.900158 + 1.77436 2.17638 -0.086369 -0.272964 -0.631253 -0.725955 + 1.78271 2.34839 -0.23769 -0.00108266 -0.490935 -0.871196 + 1.78375 2.48358 -0.285453 0.530831 -0.422237 -0.734802 + 1.85647 2.54302 -0.277405 0.425011 -0.439625 -0.791262 + 2.06646 2.47435 -0.164459 0.558592 -0.0959796 -0.823871 + 2.06551 2.37554 -0.14513 0.632379 -0.019087 -0.774424 + 1.73552 2.35858 -0.256944 -0.345065 -0.632219 -0.693707 + 1.71636 2.46933 -0.339962 0.366166 -0.430568 -0.824944 + 1.78909 2.52885 -0.331856 0.473067 -0.45834 -0.752418 + 1.66918 2.47952 -0.359216 0.248827 -0.632041 -0.7339 + 1.72547 2.55667 -0.373052 0.397253 -0.410256 -0.820902 + 1.96138 2.55454 -0.257564 0.492616 -0.264569 -0.829055 + 2.01559 2.518 -0.205467 0.463192 -0.337747 -0.819378 + 1.59493 2.48724 -0.400794 -0.120042 -0.851474 -0.510472 + 1.65122 2.5644 -0.41463 0.436506 -0.305601 -0.84621 + 1.89776 2.58237 -0.29876 0.443604 -0.112468 -0.889138 + 2.07411 2.58682 -0.186068 0.619794 -0.161113 -0.768048 + 1.64313 2.46621 -0.302767 -0.150048 -0.900168 -0.40888 + 1.53613 2.52362 -0.437803 -0.149909 -0.833341 -0.532042 + 1.56169 2.57668 -0.468498 0.378568 -0.409723 -0.829948 + 1.83671 2.6434 -0.321467 0.464005 -0.00484815 -0.885819 + 1.47384 2.56861 -0.483722 0.0647009 -0.740861 -0.668535 + 1.49939 2.62158 -0.514475 0.196966 -0.887411 -0.416781 + 1.74718 2.65567 -0.375326 0.59154 -0.453897 -0.666376 + 1.97576 2.71731 -0.247687 0.489134 -0.00884625 -0.872164 + 2.03681 2.65629 -0.224989 0.544192 0.00825355 -0.83892 + 1.47007 2.61951 -0.553496 0.329449 -0.634657 -0.699052 + 1.68026 2.62964 -0.442434 0.293168 -0.955949 0.0146108 + 1.85564 2.74393 -0.352592 0.676137 -0.38411 -0.628728 + 1.92255 2.76996 -0.285484 0.622414 -0.341049 -0.704476 + 1.65093 2.62757 -0.481455 0.438934 -0.873153 -0.21199 + 1.78511 2.74542 -0.40958 0.648768 -0.141008 -0.747808 + 1.98228 2.94105 -0.25362 0.557283 0.0576714 -0.828317 + 2.06155 2.88886 -0.219218 0.533516 0.0293455 -0.845281 + 2.11476 2.83612 -0.18147 0.61413 -0.0603336 -0.786895 + 1.58602 2.58657 -0.536845 -0.330109 -0.535194 0.777557 + 1.3001 2.61612 -0.639218 0.158389 -0.744872 0.648134 + 1.49586 2.56716 -0.58981 0.251919 -0.959865 0.123272 + 1.42854 2.55889 -0.649095 0.411288 -0.808744 -0.420446 + 1.57837 2.67193 -0.59068 0.656824 -0.297302 -0.69296 + 1.6457 2.68019 -0.531396 0.674596 -0.346656 -0.651728 + 1.72019 2.70443 -0.464969 0.718341 -0.33754 -0.608319 + 1.58602 2.58657 -0.536845 0.545597 -0.114853 -0.83014 + 1.38816 2.56512 -0.686883 0.338592 -0.644105 -0.685918 + 1.51214 2.66684 -0.652472 0.611047 -0.308178 -0.729142 + 1.68768 2.91127 -0.51784 0.673445 -0.0674876 -0.73615 + 1.76571 2.93102 -0.450034 0.669853 -0.0675107 -0.739419 + 1.84021 2.95533 -0.383549 0.689191 -0.0886898 -0.719132 + 2.1422 2.46302 -0.099236 0.729548 -0.141788 -0.669071 + 2.14124 2.36422 -0.079906 0.742069 -0.0321544 -0.669552 + 2.12832 2.55027 -0.13397 0.709349 -0.0465191 -0.70332 + 2.19766 2.49044 -0.027537 0.816983 -0.128346 -0.562197 + 2.19493 2.39012 -0.002574 0.819446 -0.0415006 -0.571652 + 2.18378 2.5777 -0.062271 0.78814 -0.140912 -0.599149 + 2.2479 2.5128 0.042531 0.820571 -0.153507 -0.550544 + 2.24517 2.41248 0.067503 0.806741 -0.0430421 -0.589335 + 2.17394 2.66979 -0.105973 0.744964 -0.0918837 -0.660746 + 2.25661 2.70147 -0.002845 0.79699 -0.149316 -0.585245 + 2.26645 2.60929 0.040805 0.811439 -0.174013 -0.55793 + 2.31542 2.48829 0.153996 0.689504 -0.100045 -0.717339 + 2.13664 2.73934 -0.144843 0.663402 -0.0794197 -0.744037 + 2.24246 2.81351 -0.048503 0.765735 -0.118426 -0.63216 + 2.35465 2.74652 0.130519 0.834302 -0.146591 -0.531461 + 2.33397 2.58486 0.15232 0.826652 -0.140575 -0.544872 + 2.22058 2.91029 -0.08513 0.727762 -0.036209 -0.684873 + 2.30051 2.97377 0.008911 0.791971 -0.0317916 -0.609731 + 2.3405 2.85856 0.084861 0.82764 -0.101053 -0.552087 + 2.41569 2.92662 0.189185 0.853095 -0.0861966 -0.514587 + 2.43035 2.76938 0.249128 0.86287 -0.144026 -0.48447 + 2.16776 3.0049 -0.139603 0.62296 0.0553234 -0.780295 + 2.24769 3.06839 -0.04557 0.731941 0.0314938 -0.68064 + 2.31727 3.15669 0.028492 0.77088 0.0143478 -0.636819 + 2.3757 3.04183 0.113235 0.829544 -0.0391125 -0.55707 + 2.08849 3.05709 -0.174005 0.543878 0.0537137 -0.837443 + 2.18174 3.16605 -0.10933 0.658782 0.0528224 -0.750477 + 2.25132 3.25444 -0.035226 0.704798 0.0233697 -0.709023 + 2.00248 3.10754 -0.242777 0.658333 -0.0938043 -0.746859 + 2.09573 3.2165 -0.178102 0.636156 -0.0218363 -0.771251 + 2.14051 3.33694 -0.144314 0.67452 -0.012615 -0.738148 + 2.28491 3.35096 0.002008 0.762419 0.0577815 -0.644499 + 1.91175 2.94255 -0.310608 0.664754 -0.0562678 -0.744941 + 1.93094 3.12032 -0.315726 0.676071 -0.0459393 -0.735403 + 1.9646 3.24855 -0.283013 0.649527 -0.0104225 -0.760267 + 2.00939 3.36899 -0.249225 0.65077 -0.0521406 -0.757483 + 1.82339 3.13348 -0.411117 0.664302 -0.0175406 -0.747258 + 1.85705 3.26162 -0.378462 0.667157 -0.0338128 -0.744149 + 1.89281 3.42958 -0.364967 0.671593 -0.0810416 -0.736475 + 2.05219 3.5238 -0.228167 0.699825 -0.0415494 -0.713105 + 2.1741 3.43345 -0.107079 0.718241 0.0416658 -0.694546 + 1.76052 3.45011 -0.486733 0.770802 -0.147746 -0.619705 + 1.93562 3.58438 -0.343901 0.698702 -0.124206 -0.704549 + 2.05642 3.6944 -0.238661 0.733739 -0.11795 -0.669114 + 2.13928 3.60563 -0.129109 0.747983 -0.0367563 -0.6627 + 2.26119 3.51529 -0.008028 0.775921 0.162528 -0.609534 + 1.8582 3.6928 -0.453484 0.761915 -0.218033 -0.609874 + 1.979 3.80282 -0.348244 0.728048 -0.218968 -0.649614 + 2.2237 3.73838 -0.061223 0.756632 -0.109457 -0.644614 + 2.30656 3.64969 0.04838 0.775991 -0.159366 -0.610279 + 2.36045 3.55681 0.151055 0.820168 0.00568968 -0.572095 + 1.93576 3.88298 -0.430492 0.718831 -0.507093 -0.47554 + 2.15021 3.81314 -0.163911 0.75771 -0.171942 -0.629532 + 2.29439 3.94375 -0.001943 0.799453 -0.0889737 -0.594104 + 2.36788 3.86899 0.100744 0.81727 -0.0560707 -0.57352 + 2.42075 3.77541 0.197428 0.842863 -0.0853154 -0.531322 + 2.10696 3.8933 -0.246158 0.769274 -0.176576 -0.614034 + 2.24075 4.03992 -0.09271 0.793767 -0.0897396 -0.601565 + 2.42688 4.18807 0.142888 0.851078 -0.090122 -0.517246 + 2.46344 4.08564 0.234104 0.859779 -0.0734938 -0.50535 + 2.51631 3.99197 0.330737 0.860001 -0.0464279 -0.508175 + 2.16957 4.12504 -0.190949 0.799653 -0.109481 -0.590397 + 2.37324 4.28423 0.052122 0.827923 -0.0756678 -0.555713 + 2.47784 4.52184 0.207375 0.883496 -0.0131345 -0.468256 + 2.5216 4.41592 0.286831 0.884281 -0.0259611 -0.466233 + 2.55816 4.3135 0.378037 0.885542 -0.0526453 -0.461567 + 2.13786 4.23703 -0.268518 0.866291 -0.227695 -0.44463 + 2.34308 4.40835 -0.01565 0.844415 -0.0961144 -0.526997 + 2.44768 4.64596 0.139603 0.884656 0.0187437 -0.465867 + 2.54224 4.74606 0.357013 0.906903 0.105023 -0.408041 + 2.586 4.64014 0.436469 0.892505 0.0860047 -0.442762 + 2.14463 4.35754 -0.352645 0.926542 -0.216957 -0.307328 + 2.31137 4.52042 -0.093169 0.866354 -0.073893 -0.493933 + 2.40095 4.75493 0.063448 0.890888 0.0414994 -0.452323 + 2.48569 4.84565 0.275923 0.898858 0.143565 -0.414057 + 2.10681 4.30357 -0.569965 0.944924 -0.28984 0.152024 + 2.13134 4.47389 -0.427379 0.973045 -0.158952 -0.167088 + 2.27085 4.63874 -0.164498 0.894784 -0.0543149 -0.443184 + 2.36043 4.87316 -0.00793 0.887318 0.0862932 -0.453013 + 2.43896 4.95463 0.199769 0.912753 0.166223 -0.373164 + 2.13782 4.43884 -0.629461 0.980683 -0.0642449 0.184751 + 2.16234 4.60916 -0.486875 0.973389 -0.0749846 -0.216544 + 2.25756 4.75509 -0.239223 0.93838 -0.0194372 -0.345058 + 2.30296 4.96977 -0.093867 0.90418 0.115896 -0.411128 + 2.19346 4.36427 -0.7931 0.965098 0.126119 0.229522 + 2.1484 4.52392 -0.679827 0.984557 0.0944007 0.147428 + 2.13064 4.7121 -0.564763 0.977112 0.0765348 -0.19848 + 2.2028 4.84339 -0.336761 0.922989 0.0950288 -0.372909 + 2.2482 5.05807 -0.191405 0.875215 0.205219 -0.438045 + 2.19335 4.39952 -0.832166 0.969171 0.244961 -0.0264674 + 2.12695 4.65774 -0.736409 0.961873 0.244117 -0.123321 + 2.10918 4.84592 -0.621343 0.903046 0.253359 -0.346866 + 2.17109 4.94632 -0.414649 0.912672 0.201131 -0.355776 + 2.17387 5.1368 -0.282967 0.840234 0.298315 -0.452786 + 2.15185 4.49786 -0.87628 0.939317 0.299347 -0.167557 + 2.08545 4.75607 -0.780523 0.871822 0.415455 -0.259467 + 2.03206 4.93082 -0.7006 0.790891 0.414522 -0.450181 + 2.08717 5.00564 -0.514393 0.815822 0.368693 -0.445533 + 2.08995 5.19612 -0.382712 0.789791 0.359419 -0.49704 + 2.21742 4.1759 -0.951634 0.835344 0.251404 -0.488872 + 2.17726 4.38166 -0.952832 0.952819 0.23426 -0.193026 + 2.09335 4.67413 -0.890592 0.854799 0.421801 -0.30233 + 1.98499 4.84801 -0.845362 0.756128 0.517099 -0.401099 + 1.9316 5.02276 -0.765438 0.703633 0.471571 -0.531528 + 2.19199 4.18336 -1.01116 0.713774 0.109885 -0.691702 + 2.15183 4.38913 -1.01236 0.833741 0.260787 -0.486689 + 2.08058 4.50017 -1.05329 0.740992 0.287426 -0.606892 + 2.11876 4.55803 -0.967101 0.86123 0.338772 -0.378835 + 1.9959 4.7827 -0.94005 0.72393 0.539124 -0.43043 + 2.1757 3.92894 -1.00148 0.188805 0.122559 -0.974337 + 2.12779 3.92912 -1.0268 0.48462 0.06873 -0.872021 + 2.14408 4.18354 -1.03648 0.496091 -0.0212207 -0.868011 + 2.12014 4.34516 -1.06081 0.662663 0.046567 -0.747468 + 2.25716 3.7201 -1.07276 0.190899 0.30479 -0.933092 + 2.17766 3.69811 -1.06748 0.0745438 0.343137 -0.936323 + 2.10814 3.70056 -1.08372 0.352806 0.321139 -0.878861 + 2.09368 3.92411 -1.04812 0.215585 0.0446019 -0.975466 + 2.15277 3.49152 -1.19185 0.237933 0.547742 -0.802101 + 2.08324 3.49396 -1.20809 0.390461 0.567218 -0.725123 + 2.03674 3.52417 -1.2188 0.205763 0.679839 -0.703904 + 2.07403 3.69546 -1.10509 0.131744 0.40823 -0.903323 + 2.25356 3.33286 -1.28525 0.520445 0.462624 -0.717716 + 2.13852 3.33639 -1.32156 0.474176 0.653367 -0.590143 + 2.04657 3.34112 -1.43756 0.650325 0.64725 -0.397673 + 2.02722 3.40521 -1.36935 0.549537 0.694587 -0.464282 + 2.12598 3.21637 -1.55647 0.672972 0.560008 -0.483218 + 2.03403 3.22111 -1.67248 0.638922 0.568877 -0.517838 + 1.98168 3.22667 -1.72912 0.725695 0.44367 -0.525855 + 1.94243 3.33731 -1.68535 0.7295 0.535439 -0.425599 + 1.92308 3.40147 -1.61709 0.654967 0.659739 -0.36846 + 1.90506 3.21602 -1.84167 0.595112 0.370107 -0.713346 + 1.81518 3.23462 -1.87768 0.404401 0.31082 -0.860146 + 1.79251 3.29908 -1.86053 0.435239 0.485815 -0.757991 + 1.86581 3.32674 -1.79784 0.557168 0.540749 -0.630202 + 1.83363 3.39129 -1.76046 0.436406 0.713703 -0.547884 + 1.9152 3.43695 -1.56133 0.389217 0.897077 -0.209196 + 1.68929 3.21364 -1.93175 0.26303 -0.129465 -0.956062 + 1.68544 3.26274 -1.93739 0.387176 0.119901 -0.914177 + 1.66277 3.3272 -1.92024 0.478758 0.511757 -0.713369 + 1.76033 3.36363 -1.82314 0.360017 0.675397 -0.643604 + 1.49576 3.28867 -1.9863 0.125192 -0.279595 -0.951921 + 1.49191 3.33776 -1.99193 0.203632 -0.172483 -0.963734 + 1.49567 3.38455 -2.00338 0.376293 0.248437 -0.892571 + 1.4769 3.4259 -1.974 0.340544 0.874706 -0.344848 + 1.644 3.36855 -1.89087 0.402154 0.723094 -0.561611 + 1.33921 3.31982 -2.00306 0.0694265 -0.282559 -0.956734 + 1.34711 3.35336 -2.01996 -0.0106783 -0.386564 -0.922201 + 1.35098 3.38003 -2.02934 0.0591444 -0.279377 -0.958358 + 1.35474 3.42673 -2.04084 0.132508 0.383839 -0.913843 + 1.28209 3.29816 -2.00954 0.182039 -0.0719823 -0.980653 + 1.21141 3.39852 -2.02938 0.113984 -0.260802 -0.95864 + 1.21528 3.4251 -2.03882 0.132837 0.343165 -0.929834 + 1.21849 3.44081 -2.01302 0.103066 0.899404 -0.424794 + 1.35795 3.44244 -2.01504 0.114224 0.947508 -0.298632 + 1.1188 3.26806 -2.04562 0.341523 -0.0242842 -0.93956 + 1.15429 3.37695 -2.03582 0.298403 -0.215147 -0.929875 + 1.04122 3.27733 -2.08167 0.430542 -0.205054 -0.878969 + 1.07671 3.38622 -2.07188 0.431787 -0.0470074 -0.90075 + 0.983008 3.23697 -2.08837 0.254391 -0.358082 -0.898367 + 0.97195 3.33475 -2.15373 0.454453 -0.14448 -0.878975 + 0.945587 3.3738 -2.16275 0.139275 0.337838 -0.930843 + 1.05035 3.42518 -2.08095 0.347749 0.418256 -0.839126 + 0.98818 3.1422 -2.07001 0.230539 -0.116354 -0.966082 + 0.843467 3.22363 -2.09885 0.167231 -0.254299 -0.952557 + 0.913735 3.29439 -2.16042 0.0756546 -0.445483 -0.892088 + 0.887221 3.33249 -2.16981 -0.362102 0.0797176 -0.928723 + 0.935487 3.43206 -2.11846 0.0676357 0.560195 -0.825595 + 0.934466 2.91554 -2.08703 0.430653 0.110974 -0.895669 + 0.848639 3.12885 -2.08049 0.353131 -0.0254059 -0.935229 + 0.816953 3.26172 -2.10824 -0.367019 -0.0012002 -0.930213 + 0.877121 3.39075 -2.12552 -0.415379 0.373403 -0.829476 + 0.85133 2.46952 -2.4015 0.862951 0.265682 -0.429801 + 0.849243 2.29637 -2.54819 0.807398 0.432155 -0.401686 + 0.818076 2.32609 -2.59188 0.808228 0.418766 -0.414007 + 0.877783 2.22032 -2.58847 0.801398 0.474667 -0.363941 + 0.851235 2.13087 -2.76174 0.766622 0.493752 -0.410486 + 0.816371 2.15362 -2.79594 0.756566 0.50377 -0.416923 + 0.807259 2.10921 -2.87383 0.829617 0.434969 -0.350053 + 0.932255 2.02172 -2.75308 0.791971 0.450252 -0.412377 + 0.879776 2.05483 -2.80203 0.745879 0.47917 -0.462666 + 0.83271 2.03751 -2.89384 0.796911 0.429877 -0.424428 + 0.746748 2.17122 -2.93763 0.726052 0.505953 -0.465681 + 0.957339 2.00159 -2.71642 0.882347 0.379622 -0.278119 + 0.943743 1.95252 -2.79183 0.813502 0.37476 -0.444713 + 0.891264 1.98563 -2.84077 0.589267 -0.307134 -0.747284 + 0.976666 1.92511 -2.73795 0.908901 0.308609 -0.280464 + 0.772199 2.09951 -2.95763 0.794364 0.407588 -0.450398 + 0.745388 2.12484 -2.9707 0.652646 0.418271 -0.631746 + 0.711933 2.12546 -3.00077 0.519362 -0.323774 -0.790844 + 0.640049 2.12566 -3.02751 0.400574 -0.144019 -0.904875 + 0.61934 2.10536 -3.02356 0.555988 -0.321682 -0.766419 + 0.61008 2.09215 -3.03068 0.631621 -0.181779 -0.753665 + 0.598376 2.08982 -3.03804 0.0815207 -0.310188 -0.947174 + 0.588527 2.10963 -3.04155 0.728356 0.248811 -0.638429 + 0.679143 2.09519 -2.95214 0.56536 -0.725893 -0.391724 + 0.658435 2.0749 -2.94819 0.71944 -0.477175 -0.504688 + 0.643091 2.04482 -2.95809 0.822419 -0.282537 -0.493761 + 0.633831 2.03161 -2.96522 0.786452 -0.33594 -0.518302 + 0.70134 2.1124 -2.93695 0.482688 -0.831769 -0.274175 + 0.706703 2.08199 -2.88367 0.556804 -0.624279 -0.547947 + 0.684506 2.06486 -2.89881 0.73812 -0.499445 -0.453579 + 0.671639 2.04904 -2.90701 0.824072 -0.361371 -0.436252 + 0.656295 2.01888 -2.91696 0.848419 -0.344976 -0.401468 + 0.745388 2.12484 -2.9707 -0.105507 -0.985152 -0.135438 + 0.734795 2.11178 -2.90688 0.184212 -0.897888 -0.39983 + 0.723426 2.08469 -2.87455 0.318083 -0.661349 -0.679295 + 0.683922 2.01546 -2.85125 0.636825 -0.589376 -0.497082 + 0.671055 1.99973 -2.8594 0.814312 -0.545859 -0.197317 + 0.766295 2.10833 -2.8953 -0.326633 -0.876409 -0.353862 + 0.754926 2.08123 -2.86297 0.0371263 -0.679432 -0.732798 + 0.700645 2.01817 -2.84213 0.322544 -0.57093 -0.754986 + 0.772199 2.09951 -2.95763 -0.706113 -0.706894 0.0413043 + 0.793106 2.08309 -2.88218 -0.608152 -0.721755 -0.330486 + 0.771606 2.06407 -2.84745 -0.0984308 -0.641747 -0.760574 + 0.717325 2.00101 -2.82661 0.193981 -0.528656 -0.826374 + 0.83271 2.03751 -2.89384 -0.748264 -0.618737 -0.239301 + 0.811958 2.03572 -2.84774 -0.589538 -0.643534 -0.488168 + 0.790458 2.01671 -2.81301 -0.0403747 -0.617337 -0.785662 + 0.794947 1.99192 -2.79688 0.00616252 -0.487049 -0.873353 + 0.721814 1.97613 -2.81053 0.173875 -0.479318 -0.860245 + 0.846357 1.99908 -2.85287 -0.995004 -0.0687249 0.0724176 + 0.825605 1.99729 -2.80678 -0.633736 -0.413234 -0.653924 + 0.78705 1.9583 -2.78003 0.00757615 -0.409941 -0.91208 + 0.780231 1.9333 -2.76934 -0.00211998 -0.356229 -0.934396 + 0.714996 1.95114 -2.79984 0.0717885 -0.542636 -0.836895 + 0.683296 1.9433 -2.78645 -0.079781 -0.848488 -0.523167 + 0.817707 1.96366 -2.78993 -0.654148 -0.163456 -0.738494 + 0.811185 1.93751 -2.78023 -0.690024 -0.0724013 -0.720156 + 0.768366 1.89371 -2.75537 -0.0197988 -0.739615 -0.672739 + 0.736666 1.88587 -2.74199 -0.165716 -0.850028 -0.499991 + 0.839834 1.97284 -2.84323 -0.957504 0.152359 -0.244894 + 0.799319 1.89792 -2.76627 -0.0716306 -0.696446 -0.714025 + 0.808198 1.87303 -2.70255 0.247209 -0.952377 -0.17851 + 0.756233 1.86791 -2.70109 -0.0602847 -0.982099 -0.17846 + 0.654392 1.90403 -2.71624 -0.150379 -0.886649 -0.43731 + 0.83271 2.03751 -2.89384 -0.69545 0.393795 0.601062 + 0.642788 1.97122 -2.85022 0.53712 -0.840362 -0.0727665 + 0.66024 1.98387 -2.86694 0.707074 -0.697049 -0.119032 + 0.64548 2.00311 -2.92446 0.795927 -0.435207 -0.420828 + 0.573469 1.94957 -2.85811 0.303614 -0.910307 -0.281355 + 0.614905 1.97986 -2.91918 0.284136 -0.891277 -0.3534 + 0.632357 1.99251 -2.93589 0.500886 -0.719912 -0.480458 + 0.620708 2.02101 -2.97665 0.638933 -0.480235 -0.600949 + 0.52042 1.93869 -2.87167 0.261246 -0.750124 -0.607507 + 0.54074 1.94898 -2.8761 0.208281 -0.856071 -0.473034 + 0.582176 1.97927 -2.93717 0.146442 -0.866962 -0.476373 + 0.609004 2.01859 -2.98406 0.334369 -0.65819 -0.674525 + 0.504744 1.95583 -2.89736 0.0657213 -0.784127 -0.617111 + 0.561231 1.9846 -2.94719 0.00479849 -0.827016 -0.562158 + 0.588059 2.02391 -2.99407 -0.0529281 -0.592872 -0.803555 + 0.57821 2.04381 -2.99755 -0.511442 -0.268182 -0.816398 + 0.588527 2.10963 -3.04155 -0.799168 -0.326007 -0.505025 + 0.484424 1.94553 -2.89293 0.0698482 -0.507247 -0.858966 + 0.44583 1.96623 -2.90117 -0.0076664 -0.382206 -0.924045 + 2.67151 2.02914 0.71846 0.99686 0.0589322 -0.0528951 + 2.6886 2.09035 0.768845 0.943737 -0.200669 -0.262855 + 2.73773 2.11713 0.891059 0.950885 -0.00242421 -0.309534 + 2.76974 2.25956 1.00996 0.948322 0.0343029 -0.31545 + 2.84566 2.22835 1.24362 0.940422 -0.003093 -0.339996 + 2.91431 2.40647 1.3995 0.948849 -0.0790274 -0.305681 + 2.93623 2.33865 1.51157 0.964898 -0.0674303 -0.253821 + 2.73842 2.35373 0.931246 0.894006 0.174965 -0.412481 + 2.81256 2.32573 1.13535 0.938734 -0.0297848 -0.343353 + 2.88121 2.50385 1.29123 0.936162 -0.0799716 -0.342353 + 2.99463 2.69059 1.5504 0.959938 -0.0896236 -0.265495 + 3.01655 2.62285 1.66252 0.979102 -0.125827 -0.159772 + 2.67447 2.278 0.802623 0.720593 0.411058 -0.558369 + 2.68578 2.38143 0.851482 0.888723 0.0336841 -0.457206 + 2.78124 2.41982 1.05658 0.92132 -0.0243742 -0.38804 + 2.85952 2.61477 1.20352 0.925873 -0.0842115 -0.36833 + 2.98441 2.8109 1.47462 0.955422 -0.0749462 -0.285574 + 2.62183 2.30578 0.72291 0.877114 0.0831774 -0.473025 + 2.64802 2.47483 0.752111 0.900968 -0.0820684 -0.426053 + 2.75872 2.54239 0.975685 0.911529 -0.0870234 -0.401923 + 2.837 2.73734 1.12262 0.92231 -0.092091 -0.375318 + 2.96272 2.92172 1.38686 0.945961 -0.0635739 -0.317986 + 2.51401 2.31489 0.503919 0.910713 0.03266 -0.411745 + 2.58868 2.36048 0.653766 0.895251 -0.056553 -0.441959 + 2.60116 2.6108 0.624196 0.898823 -0.110475 -0.424161 + 2.72096 2.63579 0.876314 0.906586 -0.104319 -0.408925 + 2.81207 2.84551 1.03226 0.921419 -0.109802 -0.372733 + 2.46937 2.34416 0.416232 0.86826 0.038163 -0.49464 + 2.54182 2.49645 0.525852 0.888207 -0.0924309 -0.45005 + 2.58091 2.74515 0.544287 0.887911 -0.121179 -0.443767 + 2.7072 2.76244 0.798548 0.906629 -0.127132 -0.40232 + 2.79831 2.97216 0.954499 0.920891 -0.101816 -0.376288 + 2.44543 2.27979 0.37632 0.718057 0.275031 -0.639337 + 2.41009 2.47716 0.302859 0.871211 -0.0786243 -0.484571 + 2.49718 2.52572 0.438165 0.86603 -0.0963212 -0.490626 + 2.38615 2.4128 0.262939 0.879806 -0.00167563 -0.475331 + 2.40968 2.60772 0.270929 0.857919 -0.13133 -0.496717 + 2.49677 2.65618 0.406191 0.867706 -0.125355 -0.481013 + 2.49429 2.81905 0.355288 0.875115 -0.120078 -0.468781 + 2.57843 2.90803 0.493386 0.884851 -0.103434 -0.454246 + 2.68696 2.89679 0.71864 0.901603 -0.106367 -0.419283 + 2.76845 3.07492 0.860518 0.915697 -0.0827831 -0.39325 + 2.47963 2.97629 0.295346 0.874121 -0.0784305 -0.479333 + 2.54816 3.04584 0.411292 0.879667 -0.068648 -0.47061 + 2.66019 3.0171 0.63406 0.896749 -0.0848377 -0.434332 + 2.74168 3.19523 0.775939 0.909137 -0.063492 -0.411628 + 2.43931 3.14098 0.203898 0.850076 -0.0200171 -0.526279 + 2.50785 3.21052 0.319844 0.872276 0.00426763 -0.488996 + 2.62992 3.15491 0.551967 0.886977 -0.047584 -0.459356 + 2.70095 3.29493 0.677653 0.893638 -0.0326435 -0.447599 + 2.38088 3.25584 0.119155 0.815884 0.0478805 -0.57623 + 2.44382 3.3279 0.219741 0.842162 0.110341 -0.527815 + 2.58204 3.26134 0.460024 0.874376 0.00588322 -0.485214 + 2.65307 3.40136 0.58571 0.876219 -0.0151807 -0.481674 + 2.34785 3.42302 0.102595 0.821075 0.111012 -0.559921 + 2.51801 3.37872 0.359921 0.849225 0.0558676 -0.525068 + 2.59962 3.50006 0.490758 0.846312 0.012624 -0.532538 + 2.71706 3.58728 0.688875 0.893513 -0.0167451 -0.448725 + 2.76013 3.49468 0.787875 0.911009 -0.0178989 -0.411998 + 2.44711 3.46454 0.261678 0.828567 0.0508519 -0.557576 + 2.52873 3.58587 0.392516 0.83814 -0.000561049 -0.545455 + 2.66362 3.68599 0.593915 0.860778 -0.00734568 -0.508927 + 2.73856 3.90859 0.73135 0.907451 0.013409 -0.419944 + 2.77582 3.81861 0.830804 0.933799 0.00766403 -0.357717 + 2.47465 3.68253 0.300103 0.840074 -0.0545014 -0.539727 + 2.61642 3.79249 0.510856 0.857008 -0.0257027 -0.514662 + 2.69136 4.01509 0.648292 0.897292 -0.00604435 -0.441395 + 2.80241 4.17046 0.902182 0.942138 0.000324917 -0.335226 + 2.83967 4.08039 1.00158 0.957128 -0.00431602 -0.289633 + 2.56233 3.88914 0.418443 0.854671 -0.0401501 -0.517616 + 2.64914 4.11155 0.555025 0.884611 -0.0234189 -0.465741 + 2.77019 4.2544 0.796595 0.932967 -0.0158803 -0.359612 + 2.80234 4.48734 0.914338 0.955139 0.0781334 -0.285666 + 2.83456 4.40331 1.01987 0.964872 0.0541266 -0.257084 + 2.60312 4.21438 0.46731 0.877797 -0.0286857 -0.478173 + 2.72797 4.35094 0.703387 0.912857 0.00904089 -0.40818 + 2.76089 4.56788 0.813234 0.94214 0.0981501 -0.32053 + 2.79077 4.6899 0.98689 0.949499 0.214131 -0.229346 + 2.83173 4.63089 1.0977 0.960287 0.194486 -0.200061 + 2.68542 4.4429 0.6089 0.906319 0.0123005 -0.422416 + 2.71834 4.65985 0.718739 0.927165 0.125943 -0.352849 + 2.74932 4.77044 0.885785 0.943216 0.229901 -0.23977 + 2.7084 4.97785 0.998734 0.929402 0.336078 -0.152522 + 2.74616 4.90857 1.09554 0.931632 0.33578 -0.138975 + 2.64047 4.54202 0.519628 0.897385 0.0513165 -0.438255 + 2.66822 4.75083 0.630958 0.912169 0.15659 -0.378718 + 2.70037 4.857 0.796664 0.929584 0.255633 -0.265565 + 2.65944 5.06441 0.909622 0.923181 0.341067 -0.177232 + 2.61376 4.84895 0.547808 0.899669 0.176061 -0.399498 + 2.65025 4.94798 0.708883 0.921177 0.268123 -0.282034 + 2.61138 5.14084 0.817034 0.913574 0.348811 -0.209076 + 2.60005 5.27246 1.05447 0.916325 0.391651 -0.0834139 + 2.63199 5.20228 1.15381 0.91877 0.390824 -0.0558353 + 2.55713 4.93932 0.463279 0.90167 0.189749 -0.388569 + 2.59492 5.03463 0.622196 0.908901 0.283452 -0.305867 + 2.55605 5.22749 0.730347 0.893946 0.380737 -0.236431 + 2.55198 5.34889 0.961884 0.87828 0.452994 -0.153039 + 2.50784 5.47996 1.22667 0.872213 0.488792 -0.0180771 + 2.50059 5.03891 0.382189 0.891358 0.21689 -0.398044 + 2.5383 5.125 0.537667 0.901303 0.304185 -0.308422 + 2.49893 5.29793 0.637158 0.883413 0.399328 -0.245192 + 2.49541 5.41053 0.865721 0.857535 0.482417 -0.178629 + 2.43881 5.12605 0.296857 0.896079 0.237447 -0.375049 + 2.47683 5.20264 0.447795 0.888298 0.323433 -0.326065 + 2.43747 5.37556 0.547294 0.870629 0.417207 -0.260659 + 2.4383 5.48096 0.772532 0.857675 0.482028 -0.179004 + 2.39598 5.61798 1.0342 0.827613 0.54967 -0.113666 + 2.37936 5.22093 0.213316 0.876929 0.283483 -0.388114 + 2.41505 5.28978 0.362463 0.879786 0.351102 -0.320475 + 2.37552 5.44264 0.454495 0.857017 0.435614 -0.275249 + 2.38285 5.53666 0.67206 0.846725 0.492349 -0.201616 + 2.37951 5.0495 0.116236 0.89498 0.212028 -0.392497 + 2.31038 5.30304 0.127906 0.863872 0.325878 -0.384094 + 2.34577 5.36623 0.277045 0.857304 0.38771 -0.338689 + 2.30624 5.5191 0.369077 0.841989 0.45216 -0.29429 + 2.3209 5.60374 0.579269 0.829908 0.51656 -0.210756 + 2.32204 5.14603 0.030249 0.889735 0.257918 -0.376631 + 2.23783 5.38581 0.041944 0.841278 0.357507 -0.405512 + 2.2768 5.44834 0.191635 0.850292 0.404467 -0.336764 + 2.23743 5.58643 0.280245 0.83262 0.465317 -0.300374 + 2.25917 5.66193 0.483885 0.820038 0.527487 -0.222024 + 2.24948 5.2288 -0.055713 0.850589 0.325182 -0.413225 + 2.1625 5.46109 -0.042254 0.823091 0.380725 -0.421391 + 2.20301 5.52251 0.10737 0.830445 0.42511 -0.360061 + 2.16364 5.6606 0.195989 0.817953 0.482846 -0.31275 + 2.19036 5.72927 0.395052 0.799878 0.55289 -0.233471 + 2.17516 5.30753 -0.147275 0.830827 0.351023 -0.431867 + 2.07975 5.54245 -0.121966 0.801233 0.389729 -0.454023 + 2.12768 5.59788 0.023222 0.823283 0.430212 -0.370301 + 2.08997 5.72607 0.107994 0.811367 0.491573 -0.316291 + 2.1204 5.78911 0.305796 0.788776 0.566282 -0.239077 + 2.09241 5.38889 -0.226996 0.791544 0.381486 -0.477417 + 1.99624 5.61466 -0.200255 0.774812 0.394399 -0.494081 + 2.0527 5.66198 -0.067605 0.803315 0.43225 -0.40969 + 2.015 5.79017 0.017166 0.786792 0.512218 -0.34437 + 2.04673 5.85449 0.217752 0.784342 0.569674 -0.245519 + 1.9999 5.26727 -0.465553 0.74328 0.410284 -0.528395 + 2.00236 5.46013 -0.309787 0.761803 0.391158 -0.516383 + 1.90669 5.70324 -0.265662 0.726674 0.433134 -0.533235 + 1.96919 5.7342 -0.145894 0.763189 0.464014 -0.449704 + 1.93368 5.85036 -0.06688 0.742615 0.543902 -0.390761 + 2.01005 5.09055 -0.593649 0.773849 0.415489 -0.478044 + 1.897 5.32413 -0.550839 0.699807 0.433177 -0.568003 + 1.91281 5.54861 -0.375237 0.726 0.404402 -0.556223 + 1.80394 5.77041 -0.338008 0.667209 0.460198 -0.585704 + 1.87717 5.79114 -0.227716 0.70867 0.499751 -0.498032 + 1.90715 5.14741 -0.678936 0.69296 0.474293 -0.543003 + 1.79588 5.39142 -0.619783 0.661577 0.447364 -0.601815 + 1.81169 5.61589 -0.444181 0.662366 0.439637 -0.606622 + 1.69468 5.82508 -0.409707 0.590969 0.489442 -0.641251 + 1.77442 5.8584 -0.300021 0.658857 0.520112 -0.543499 + 1.82293 5.09917 -0.833386 0.665469 0.512977 -0.542222 + 1.79847 5.22373 -0.746933 0.660948 0.48498 -0.572663 + 1.68559 5.46478 -0.67924 0.60448 0.475804 -0.638917 + 1.70243 5.67048 -0.51592 0.602893 0.471022 -0.64394 + 1.88753 4.95658 -0.89482 0.706913 0.536145 -0.461326 + 1.70753 5.17999 -0.889376 0.614641 0.525357 -0.588401 + 1.68819 5.29708 -0.806381 0.614619 0.503426 -0.607294 + 1.56957 5.52995 -0.731322 0.555854 0.502461 -0.662238 + 1.87891 4.87863 -0.985402 0.618341 0.538791 -0.572152 + 1.77214 5.03741 -0.950809 0.608016 0.529219 -0.591815 + 1.58714 5.25355 -0.942585 0.559589 0.528346 -0.638523 + 1.5678 5.37064 -0.85959 0.564117 0.52434 -0.637839 + 2.03337 4.6711 -1.00275 0.729694 0.463329 -0.502865 + 1.91638 4.76694 -1.04815 0.615698 0.543182 -0.57085 + 1.74087 4.96192 -1.04267 0.544296 0.511057 -0.665254 + 1.63409 5.12079 -1.00802 0.545805 0.50741 -0.666807 + 1.45903 5.31512 -0.996827 0.505928 0.531538 -0.679341 + 1.99519 4.61324 -1.08894 0.667133 0.366672 -0.648448 + 1.88748 4.71569 -1.13058 0.584667 0.472478 -0.659491 + 1.73303 4.82137 -1.17302 0.464421 0.502104 -0.729524 + 1.76194 4.87261 -1.09058 0.539443 0.5513 -0.636451 + 1.53142 5.08193 -1.11033 0.472589 0.491175 -0.731715 + 2.04889 4.45611 -1.10178 0.625652 0.162118 -0.763071 + 1.96621 4.56012 -1.13792 0.569859 0.226626 -0.789875 + 1.8585 4.66265 -1.17951 0.394964 0.202347 -0.896136 + 2.06534 4.30683 -1.08842 0.165726 -0.190595 -0.967579 + 2.02337 4.39865 -1.12526 0.270114 -0.208268 -0.940033 + 1.94069 4.50266 -1.1614 -0.106776 -0.315449 -0.942916 + 2.08928 4.14522 -1.06409 0.248168 -0.0934227 -0.964202 + 2.0466 4.10856 -1.0584 -0.489524 -0.0754847 -0.868717 + 2.03364 4.27968 -1.06779 -0.542495 -0.301152 -0.784224 + 1.99167 4.3715 -1.10462 -0.611108 -0.504348 -0.610065 + 2.05101 3.88745 -1.04242 -0.392203 0.118485 -0.912216 + 1.99583 3.86673 -1.01114 -0.544096 0.127998 -0.829202 + 2.02304 4.08642 -1.02005 -0.737529 0.0149861 -0.675149 + 2.01007 4.25745 -1.02949 -0.762162 -0.132344 -0.633715 + 2.03007 3.69726 -1.092 -0.411265 0.414258 -0.811943 + 1.9749 3.67645 -1.06076 -0.572579 0.400494 -0.715373 + 1.74742 3.72033 -0.871373 -0.549309 0.216261 -0.80715 + 1.77462 3.94002 -0.880283 -0.570766 0.166296 -0.804097 + 1.76261 4.05962 -0.821833 -0.647748 0.152918 -0.74635 + 1.99278 3.52588 -1.20576 -0.469362 0.695106 -0.544543 + 1.94981 3.49535 -1.17289 -0.628683 0.627639 -0.459158 + 1.74752 3.40461 -1.07452 -0.5071 0.712606 -0.484811 + 1.77261 3.58579 -0.962341 -0.555242 0.442445 -0.704236 + 1.98072 3.43541 -1.38007 0.286957 0.915062 -0.283402 + 1.94716 3.43808 -1.3497 -0.401772 0.90496 -0.140092 + 1.90418 3.40747 -1.31688 -0.490817 0.868704 -0.0667227 + 1.88163 3.43962 -1.53096 -0.195883 0.977953 0.0723714 + 1.84709 3.41146 -1.48519 -0.378316 0.913064 0.152285 + 1.68608 3.35453 -1.39578 -0.240246 0.963322 0.119554 + 1.74316 3.35054 -1.22748 -0.354105 0.930087 -0.0977177 + 1.82574 3.42676 -1.70469 0.218895 0.934977 -0.27911 + 1.79723 3.42649 -1.65382 -0.237571 0.96765 0.0849265 + 1.76269 3.39842 -1.608 -0.368893 0.914219 0.167695 + 1.72522 3.41054 -1.78059 0.148565 0.934332 -0.323964 + 1.69671 3.41036 -1.72967 -0.213004 0.957225 0.195832 + 1.66266 3.36006 -1.66077 -0.329502 0.916902 0.22521 + 1.54073 3.32302 -1.56781 -0.147083 0.986648 0.0699382 + 1.64076 3.36138 -1.51505 -0.263014 0.964016 0.0386954 + 1.6089 3.41555 -1.84827 0.161352 0.946806 -0.278429 + 1.59004 3.40451 -1.78076 -0.118379 0.935399 0.333189 + 1.556 3.35431 -1.7118 -0.112573 0.919986 0.375438 + 1.48277 3.42564 -1.88495 0.155326 0.986915 0.0432823 + 1.46391 3.41461 -1.81744 0.0333653 0.924266 0.380288 + 1.43494 3.37481 -1.76431 0.0337742 0.88904 0.456583 + 1.35307 3.35536 -1.67502 0.160271 0.958432 0.236055 + 1.47412 3.33477 -1.62255 0.0504947 0.979649 0.194263 + 1.36382 3.44218 -1.92599 0.179912 0.982135 -0.0551638 + 1.29996 3.46466 -1.90454 0.265219 0.959441 -0.095561 + 1.30519 3.45113 -1.84669 0.181437 0.884 0.430841 + 1.27622 3.41134 -1.79357 0.16241 0.852996 0.496004 + 1.15463 3.4633 -1.99157 0.297673 0.841896 -0.450113 + 1.1022 3.53356 -1.92768 0.301205 0.938207 -0.17042 + 1.10742 3.52012 -1.86978 0.31716 0.864002 0.391036 + 1.07183 3.48275 -2.01627 0.307296 0.760528 -0.571984 + 1.01939 3.55311 -1.95233 0.426555 0.803947 -0.414391 + 0.96066 3.60365 -1.92487 0.494927 0.84908 -0.18469 + 0.958648 3.58478 -1.85979 0.482183 0.77035 0.417205 + 1.11874 3.44461 -1.78761 0.278898 0.832016 0.479547 + 1.05115 3.46115 -2.05065 0.260583 0.671837 -0.693348 + 0.969432 3.54005 -2.00651 0.349835 0.726283 -0.591716 + 0.9107 3.59059 -1.97905 0.431828 0.726953 -0.533913 + 0.836274 3.68742 -1.90357 0.502162 0.861491 -0.0752784 + 0.834262 3.66848 -1.83855 0.564977 0.733019 0.378793 + 0.936296 3.46802 -2.08816 0.271225 0.618756 -0.737278 + 0.948757 3.51835 -2.04093 0.304695 0.657611 -0.688991 + 0.846731 3.62203 -1.9957 0.435322 0.661427 -0.610745 + 0.772305 3.71886 -1.92022 0.594254 0.758296 -0.268047 + 0.831081 3.52536 -2.07787 -0.00852729 0.39327 -0.919383 + 0.843542 3.57578 -2.0306 0.32367 0.578306 -0.748865 + 0.705238 3.728 -1.99306 0.44169 0.630157 -0.638602 + 0.638711 3.79866 -1.96524 0.570894 0.687529 -0.448759 + 0.705777 3.78952 -1.8924 0.674525 0.721203 -0.157738 + 0.830249 3.43662 -2.09197 -0.337322 0.152765 -0.928912 + 0.700534 3.60249 -2.02207 -0.15147 0.0801534 -0.985207 + 0.702049 3.68176 -2.02795 0.0647169 0.304795 -0.950217 + 0.620649 3.7338 -2.01269 0.0114687 0.101269 -0.994793 + 0.770081 3.3076 -2.0747 -0.188333 0.182023 -0.96509 + 0.699702 3.51375 -2.03617 -0.0713914 0.171692 -0.98256 + 0.647085 3.52642 -2.0411 0.496314 0.278766 -0.822169 + 0.591852 3.63862 -2.04383 0.618985 0.449348 -0.644162 + 0.619134 3.65462 -2.00675 0.208815 0.341377 -0.916438 + 0.717464 3.32035 -2.07958 0.430172 0.271348 -0.861001 + 0.576766 3.71804 -2.007 0.31714 0.222589 -0.921887 + 2.67427 2.71354 -0.70516 -0.585552 0.494316 0.64248 + 1.02369 1.81801 0.518748 -0.770135 0.629929 0.100407 + 0.925079 1.67623 0.632923 -0.31584 -0.363456 -0.876439 + 0.972324 1.71963 0.595543 -0.756445 0.3446 -0.555915 + 0.848978 1.62264 0.668738 0.232188 -0.827003 -0.51201 + 1.02369 1.81801 0.518748 0.487929 -0.727629 -0.482164 + 0.948408 2.01676 -0.468093 -0.0645931 -0.965585 0.251938 + 0.915514 2.00015 -0.555323 -0.344388 -0.914973 0.210287 + 1.23701 1.53076 0.60848 -0.714382 -0.153768 -0.682652 + 1.33145 1.63145 0.543685 -0.378735 -0.222833 -0.898279 + 1.21447 1.45124 0.759218 -0.521178 -0.444237 -0.728716 + 1.25585 1.60974 0.521077 0.910925 -0.408448 0.0581845 + 1.20934 1.39286 0.775928 -0.847225 0.0204599 -0.530839 + 1.1853 1.29834 0.696237 -0.449277 -0.288303 -0.845595 + 1.13045 1.1621 0.761815 -0.819103 0.172255 -0.547174 + 1.26299 1.58624 0.584984 -0.17437 -0.313641 -0.933394 + 1.13996 1.08149 0.754245 -0.871564 0.0509284 -0.48763 + 1.29257 1.60304 0.697493 -0.42515 -0.12688 -0.896186 + 1.37295 1.58577 0.661806 -0.426385 -0.136886 -0.894124 + 0.307145 1.88639 -1.30329 0.0661222 0.806585 0.587409 + 0.186089 1.88576 -1.28879 0.121439 0.805982 0.579349 + 0.099451 1.85062 -1.21534 -0.0995206 0.808565 0.579929 + 0.064756 1.84625 -1.22456 -0.24945 0.786141 0.565471 + 0.874389 1.49643 -1.23266 0.166063 -0.680019 -0.714141 + 0.792052 1.49776 -1.24696 0.1188 -0.656521 -0.744894 + 0.922122 1.44708 -1.17038 0.192259 -0.692053 -0.695772 + 0.508552 1.94894 -2.92703 -0.780217 -0.553978 0.290465 + 0.52297 1.93907 -2.90713 -0.837095 -0.524939 0.153982 + 0.531743 1.92998 -2.84378 -0.892581 -0.423164 0.155665 + 0.562042 1.91149 -2.78196 -0.880935 -0.314045 0.354018 + 0.540993 1.91304 -2.85124 -0.857508 -0.506917 0.0878356 + 0.596303 1.90966 -2.7044 -0.70092 -0.627276 0.339465 + 0.594687 1.91353 -2.65769 -0.614061 -0.784243 0.088835 + 0.596791 1.8903 -2.71226 -0.732456 -0.271992 0.624122 + 0.673959 1.88607 -2.67534 -0.224245 -0.970769 -0.0855689 + 0.645977 1.89343 -2.65109 -0.28634 -0.957263 0.0407023 + 0.644361 1.8973 -2.60438 -0.290762 -0.953806 0.0755789 + 0.733378 1.87888 -2.59848 -0.11827 -0.986878 0.109923 + 0.813326 1.87664 -2.6242 0.196596 -0.971981 0.128851 + 0.844209 1.88512 -2.61269 0.0873606 -0.961378 -0.260999 + 0.76136 1.87152 -2.62273 -0.00669117 -0.982034 0.188584 + 0.881192 1.90619 -2.68198 0.379819 -0.90383 -0.197052 + 0.912075 1.91468 -2.67049 0.113981 -0.929046 -0.351968 + 0.932709 1.90732 -2.65595 -0.061355 -0.901762 -0.427857 + 0.617677 1.90266 -2.70986 0.370197 -0.770326 -0.519184 + 0.596791 1.8903 -2.71226 0.206586 -0.511364 0.834164 + 0.568883 1.86808 -2.71898 0.20596 -0.511065 0.834501 + 0.596791 1.8903 -2.71226 0.363491 -0.456742 -0.811949 + 1.1428 1.64929 -1.72542 -0.401092 0.915994 -0.00893161 + 1.13874 1.64637 -1.84257 -0.2741 0.961098 -0.0340594 + 1.15155 1.65076 -1.79137 -0.0272506 0.996538 -0.0785461 + 0.393486 2.18026 -3.16149 0.377926 -0.716 -0.586954 + 0.372261 2.1636 -3.15483 0.464096 -0.775365 -0.42828 + 0.350348 2.16381 -3.16919 0.321523 -0.800553 -0.505705 + 0.349223 2.13195 -3.11381 0.490387 -0.595144 -0.636651 + 0.334431 2.13339 -3.12531 -0.199286 -0.454074 -0.86839 + 0.371136 2.13183 -3.0994 0.592057 -0.661129 -0.460844 + 0.38294 2.11217 -3.06315 0.804983 -0.204868 -0.556805 + 0.370895 2.08434 -3.07694 0.818381 0.00123083 -0.574674 + 0.354297 2.09602 -3.09818 0.705106 -0.0623241 -0.706357 + 0.339505 2.09737 -3.10972 0.28838 -0.190533 -0.938368 + 0.404042 2.16929 -3.06808 0.679273 -0.628524 -0.378875 + 0.415846 2.14963 -3.03183 0.675007 -0.39771 -0.621444 + 0.393486 2.18026 -3.16149 0.500982 -0.856028 -0.12741 + 0.425268 2.18595 -3.07474 0.394101 -0.887399 -0.239183 + 0.440601 2.15824 -3.01655 0.399007 -0.517363 -0.757052 + 0.443019 2.08989 -2.99497 0.353871 -0.397841 -0.846462 + 0.455932 2.1985 -3.12628 0.241862 -0.966002 -0.091344 + 0.480623 2.19749 -3.09233 -0.0588648 -0.976604 -0.206832 + 0.449959 2.18494 -3.04079 0.257136 -0.853261 -0.453682 + 0.483061 2.14963 -3.00123 0.0814883 -0.519822 -0.850379 + 0.50524 2.13919 -2.99355 0.0266964 -0.487804 -0.872545 + 0.465198 2.07954 -2.98724 0.0433964 -0.24891 -0.967554 + 0.492418 2.17623 -3.02551 -0.176385 -0.80804 -0.562102 + 0.52121 2.16814 -3.0325 -0.343357 -0.861212 -0.374726 + 0.53286 2.15391 -3.00765 -0.2372 -0.777605 -0.582295 + 0.529393 2.117 -2.98592 -0.107761 -0.266479 -0.957797 + 0.509415 2.1894 -3.09931 -0.368745 -0.90262 -0.222047 + 0.565038 2.15256 -3.06872 -0.484107 -0.846432 -0.221797 + 0.557013 2.13173 -3.00002 -0.537375 -0.499236 -0.6797 + 0.540525 2.08937 -2.98326 -0.193184 -0.0956334 -0.976491 + 0.476331 2.05182 -2.98463 -0.10682 -0.242327 -0.964296 + 0.460611 2.02282 -2.96798 -0.171443 -0.57887 -0.797193 + 0.568852 2.10302 -2.9977 -0.676759 -0.220353 -0.702454 + 0.549883 2.03016 -2.9831 -0.239556 -0.25282 -0.937387 + 0.534164 2.00115 -2.96646 -0.121044 -0.661562 -0.740057 + 0.477676 1.9723 -2.91668 -0.140817 -0.783527 -0.605191 + 0.352052 2.05087 -3.10877 0.393683 -0.245151 -0.885954 + 0.323018 2.03798 -3.10345 -0.140404 -0.466361 -0.87338 + 0.310471 2.08448 -3.1044 -0.277882 -0.115503 -0.953646 + 0.237864 2.05686 -3.07595 -0.324359 -0.349116 -0.879153 + 0.229401 2.08615 -3.07449 -0.277474 -0.133379 -0.951429 + 0.302008 2.1137 -3.10299 -0.45046 -0.048573 -0.891475 + 0.322121 2.17092 -3.11931 -0.589253 -0.493426 -0.639774 + 0.350348 2.16381 -3.16919 -0.863471 -0.209912 -0.458643 + 0.289698 2.15122 -3.09699 -0.37193 -0.235035 -0.898013 + 0.289793 2.2002 -3.13563 -0.394012 -0.817502 -0.420054 + 0.350348 2.16381 -3.16919 -0.590066 -0.775858 -0.22331 + 0.31802 2.1931 -3.18552 -0.525173 -0.822986 -0.216533 + 0.248177 2.23837 -3.20173 -0.289099 -0.909547 -0.298572 + 0.19127 2.24886 -3.2109 0.0385587 -0.964608 -0.260852 + 0.129042 2.23586 -3.21559 0.215521 -0.949493 -0.228067 + -0.924635 2.00506 -0.519026 0.958068 -0.105458 0.266429 + -0.920037 1.95183 -0.55663 0.95512 -0.151033 0.254824 + -0.914713 1.86018 -0.745692 0.313962 -0.941078 -0.125697 + -1.37295 1.58577 0.661806 0.426351 -0.136895 -0.894139 + -0.678992 1.83517 -2.44137 -0.769858 0.630129 -0.101274 + -0.661911 1.8537 -2.45587 -0.545686 0.791819 0.274315 + -0.625186 1.8998 -2.49551 -0.346166 0.754879 0.557069 + -0.693494 1.82274 -2.41123 -0.760057 0.643401 -0.0913747 + -0.639392 1.87276 -2.42967 -0.65124 0.758831 0.00788446 + -0.621012 1.88748 -2.46078 -0.656241 0.753659 -0.0366962 + -0.643531 1.86852 -2.48694 -0.614522 0.787777 -0.042064 + -0.618742 1.88277 -2.53462 -0.757163 0.650004 -0.0647919 + -0.710576 1.80419 -2.39672 -0.774003 0.622518 -0.115717 + -0.608264 1.9006 -2.4921 -0.807943 0.585964 -0.0622418 + -0.605994 1.89588 -2.56593 -0.923488 0.373686 -0.0867705 + -0.592266 1.91999 -2.61288 -0.936872 0.3344 -0.102214 + -0.221581 1.99605 -3.06703 -0.0743072 0.98154 0.176233 + -0.267675 2.00019 -3.07539 0.000131986 0.89665 0.44274 + -0.161271 1.99295 -2.99625 -0.215221 0.976479 0.0129731 + -0.136983 2.00247 -2.98235 -0.170746 0.951133 -0.257277 + -0.128457 1.99899 -2.99252 -8.67722e-005 0.998062 -0.062219 + -0.108668 1.98654 -2.98615 0.319866 0.781959 0.535001 + -0.199855 1.98061 -2.98869 -0.204715 0.977897 -0.0425444 + -0.175566 1.99014 -2.97479 -0.287902 0.946501 -0.145769 + -0.268179 1.99335 -3.07676 -0.237126 0.87706 0.417777 + -0.293134 1.98927 -3.07549 0.0324754 0.819348 0.572376 + -0.319848 1.99731 -3.11521 0.0382435 0.990886 0.12916 + -0.31628 1.99369 -3.07773 0.175231 0.978838 0.105689 + -0.325906 1.99664 -3.08165 0.2675 0.96119 0.067504 + -0.320655 1.99868 -2.96098 0.220556 0.965805 0.136293 + -0.295713 1.99981 -2.96814 -0.243513 0.969871 -0.00724026 + -0.284575 2.00426 -2.96885 -0.371288 0.928509 -0.00411823 + -0.328944 1.99242 -2.93294 0.701206 0.624414 0.344119 + -1.15152 1.65076 -1.79137 0.293997 0.955644 -0.0176318 + -1.1428 1.64929 -1.72542 0.397442 0.917063 -0.0321691 + -1.13874 1.64637 -1.84257 0.271888 0.962219 -0.0145619 + 0.012141 2.04154 -3.09621 -6.94118e-005 -0.784969 -0.619535 + -0.012102 2.04153 -3.0962 0.0120096 -0.766179 -0.642514 + -0.021961 2.02879 -3.08313 -0.371428 -0.74644 -0.552149 + 1.02369 1.81801 0.518748 -0.11541 -0.573078 -0.811334 + 0.972324 1.71963 0.595543 -0.115414 -0.573076 -0.811334 + 0.080404 2.00707 -3.02371 -0.117919 0.832655 0.541092 + 0.082735 1.99305 -3.00163 -0.117919 0.832655 0.541093 + 0.108633 1.98662 -2.9861 -0.117919 0.832655 0.541092 + 0.00729 3.0019 -1.86921 0.575951 0.709312 -0.406396 + -0.00729 3.0019 -1.86921 -0.575837 0.709395 -0.406412 + -0.00861 2.95866 -1.66912 -0.653304 0.698657 0.291672 + 0.016514 2.25648 -0.879903 0 0.48573 0.874109 + -1.02369 1.81801 0.51875 0.115235 -0.573168 -0.811295 + -0.972324 1.71963 0.59555 0.115273 -0.573153 -0.8113 + -1.07094 1.86141 0.481375 0.115234 -0.573169 -0.811294 + -0.082769 1.99305 -3.00163 0.117371 0.831776 0.542561 + -0.080403 2.00708 -3.02372 0.118004 0.832569 0.541206 + -0.108668 1.98654 -2.98615 0.116522 0.83071 0.544374 + 2.62735 2.77706 -0.803569 0.799797 0.60024 0.0060576 + 2.67427 2.71354 -0.70516 0.83897 0.541101 0.0577904 + 2.69296 2.68907 -0.747364 0.88912 0.457413 -0.015448 + 2.76006 2.54148 -0.595733 0.936886 0.349556 0.00744066 + 2.66066 2.74987 -0.83028 0.827452 0.561381 0.0132091 + 2.62735 2.77706 -0.803569 0.686197 0.716294 0.126717 + 2.59755 2.8118 -0.900746 0.17471 0.918879 0.353748 + 2.74137 2.56587 -0.553589 0.880466 0.4571 0.125856 + 2.79322 2.409 -0.417882 0.938195 0.337548 0.0764976 + 2.62735 2.77706 -0.803569 -0.747519 0.518851 0.41474 + -0.534839 1.92882 -2.85178 -0.519846 0.852994 0.0464883 + -0.52042 1.93869 -2.87167 -0.428662 0.900362 0.0748143 + -0.508552 1.94894 -2.92703 -0.0961616 0.987912 0.121582 + -0.484424 1.94554 -2.89294 -0.105183 0.980917 0.16352 + -0.517922 1.95242 -2.95826 -0.130694 0.978753 0.157993 + -0.49606 1.95866 -2.97745 -0.0723008 0.993601 0.0867757 + -0.517137 1.95856 -3.00009 -0.092774 0.992281 0.0822934 + -0.483244 1.9587 -2.99094 -0.004039 0.999992 -0.000346849 + 0.9621 1.92007 -2.69142 -0.233448 -0.918965 -0.317814 + 0.941467 1.92742 -2.70595 -0.11974 -0.936938 -0.328343 + 0.961467 1.93616 -2.75449 -0.36455 -0.904699 -0.220507 + 0.923743 1.94387 -2.74325 -0.0220769 -0.935402 -0.352896 + 0.943743 1.95252 -2.79183 -0.300675 -0.911713 -0.279954 + 0.892877 1.92997 -2.73397 0.370485 -0.850968 -0.372282 + 0.819883 1.89681 -2.75453 0.339735 -0.837637 -0.42772 + 0.860398 1.97181 -2.83144 0.276514 -0.74731 -0.604208 + 0.83271 2.03751 -2.89384 0.202295 -0.628225 -0.751272 + 0.839834 1.97284 -2.84323 0.357996 -0.639183 -0.680649 + 0.581134 3.8813 -1.91798 0.593829 0.653635 -0.469179 + 0.637317 3.86293 -1.87275 0.717414 0.661076 -0.219764 + 0.664806 3.81544 -1.79851 0.736779 0.566971 0.368375 + 0.733266 3.74195 -1.81821 0.662141 0.655561 0.363056 + 0.518448 3.97269 -1.86747 0.677603 0.623281 -0.390351 + 0.574631 3.9544 -1.82219 0.776251 0.625737 -0.0767332 + 0.595367 3.88153 -1.76637 0.757146 0.462753 0.461075 + 0.657801 3.71537 -1.71277 0.642688 0.640464 0.420427 + 0.732856 3.66747 -1.731 0.590283 0.699904 0.40212 + 0.513553 4.02222 -1.77126 0.883755 0.445905 0.141934 + 0.534289 3.94934 -1.71543 0.903596 0.288934 0.316279 + 0.588362 3.78145 -1.68063 0.752881 0.555775 0.35254 + 0.7262 3.6026 -1.49185 0.604674 0.781074 0.155863 + 0.434 4.21608 -1.68223 0.744553 0.515752 -0.423841 + 0.484016 4.13257 -1.67439 0.893866 0.367382 -0.25697 + 0.508511 4.08163 -1.62556 0.994108 0.10708 0.01682 + 0.509841 3.86933 -1.64343 0.904911 0.340212 0.25572 + 0.417436 4.27618 -1.63193 0.692139 0.535711 -0.483692 + 0.476256 4.31372 -1.51495 0.859956 0.393163 -0.325421 + 0.500752 4.26279 -1.46613 0.915907 0.192544 -0.352194 + 0.484063 4.0017 -1.55352 0.998355 0.0513136 -0.0255802 + 0.599219 3.72037 -1.38404 0.856827 0.512155 -0.0595347 + 0.388452 4.3741 -1.57972 0.742546 0.461111 -0.4858 + 0.447272 4.41163 -1.46274 0.705612 0.344537 -0.619197 + 0.477044 4.4763 -1.41355 0.689446 0.136094 -0.711437 + 0.528419 4.40693 -1.35799 0.816176 0.0886979 -0.570954 + 0.534365 4.21435 -1.42024 0.910352 0.0809521 -0.40584 + 0.391724 4.57063 -1.45214 0.545024 0.101825 -0.832214 + 0.447602 4.6426 -1.43079 0.483485 -0.0728453 -0.872316 + 0.518036 4.55291 -1.36864 0.644902 -0.0761025 -0.760467 + 0.56941 4.48354 -1.31309 0.840042 -0.116021 -0.529971 + 0.562032 4.35841 -1.31215 0.926941 0.0424404 -0.372798 + 0.497061 4.70962 -1.41126 0.424653 -0.195474 -0.884002 + 0.567495 4.62002 -1.34907 0.599758 -0.258698 -0.757209 + 0.605012 4.56017 -1.27502 0.797508 -0.319706 -0.511634 + 0.583846 4.43159 -1.2419 0.933751 -0.130155 -0.333419 + 0.552582 4.76321 -1.40448 0.392602 -0.260636 -0.882005 + 0.61529 4.69129 -1.34532 0.53872 -0.360494 -0.761462 + 0.652807 4.63153 -1.27122 0.769746 -0.459985 -0.442611 + 0.619448 4.5083 -1.20378 0.909816 -0.246648 -0.333765 + 0.649418 4.2149 -1.00639 0.974289 0.00778448 -0.225168 + 0.620436 4.83545 -1.39461 0.394019 -0.216182 -0.893317 + 0.683144 4.76353 -1.33545 0.572904 -0.397392 -0.716841 + 0.707743 4.71343 -1.26267 0.770551 -0.515583 -0.374733 + 0.650159 4.59414 -1.17185 0.869613 -0.39027 -0.302428 + 0.575173 4.91974 -1.4214 0.33075 -0.0745998 -0.940765 + 0.739039 4.91135 -1.36187 0.383517 -0.242294 -0.891183 + 0.753893 4.85831 -1.3304 0.533711 -0.444865 -0.719199 + 0.778492 4.80821 -1.25762 0.637733 -0.6082 -0.47264 + 0.705095 4.67604 -1.1633 0.749525 -0.551004 -0.366888 + 0.693776 4.99564 -1.38866 0.308646 0.0244211 -0.950863 + 0.834013 4.97092 -1.34045 0.382718 -0.164344 -0.90913 + 0.848867 4.91788 -1.30899 0.410099 -0.50902 -0.756781 + 0.858119 4.86914 -1.24797 0.445101 -0.725131 -0.525425 + 0.778795 4.75395 -1.16045 0.616234 -0.640368 -0.458459 + 0.643568 5.10455 -1.3843 0.265049 0.210269 -0.941029 + 0.758672 5.15924 -1.34083 0.279265 0.219755 -0.934729 + 0.808881 5.05033 -1.34519 0.318184 0.116385 -0.940858 + 0.922553 4.99578 -1.30592 0.245997 -0.0351257 -0.968634 + 0.648566 5.23973 -1.34764 0.185371 0.335003 -0.923802 + 0.790913 5.27267 -1.2991 0.268804 0.295902 -0.916617 + 0.874567 5.17472 -1.29805 0.283764 0.225064 -0.932107 + 0.897421 5.07519 -1.31066 0.288618 0.118343 -0.950102 + 0.729833 5.37574 -1.27601 0.174806 0.45826 -0.871459 + 0.87218 5.40876 -1.22741 0.248098 0.450374 -0.857678 + 1.019 5.38393 -1.18621 0.313164 0.421292 -0.851141 + 0.906808 5.28823 -1.25626 0.288041 0.299199 -0.909677 + 1.04436 5.15892 -1.25768 0.253852 0.263659 -0.930615 + 0.62515 5.50066 -1.20399 0.0408389 0.668229 -0.742834 + 0.76991 5.52379 -1.16626 0.124177 0.654321 -0.745952 + 0.916426 5.52384 -1.13374 0.232846 0.62923 -0.74152 + 1.06325 5.49902 -1.09254 0.328853 0.582912 -0.743014 + 1.17762 5.33694 -1.14963 0.366026 0.39186 -0.84408 + 0.61708 5.6261 -1.06225 0.000841583 0.718679 -0.695341 + 0.763906 5.64422 -1.03944 0.0901012 0.712984 -0.695367 + 0.910422 5.64417 -1.00696 0.181054 0.696969 -0.693869 + 1.05435 5.62891 -0.977733 0.293578 0.657106 -0.69428 + 0.48032 5.7741 -0.923194 0.0257597 0.677039 -0.735496 + 0.621965 5.79243 -0.899559 0.032651 0.684147 -0.728613 + 0.768791 5.81047 -0.876793 0.0821737 0.681606 -0.72709 + 0.912049 5.80252 -0.858229 0.174186 0.667657 -0.723805 + 0.498004 5.99299 -0.726127 0.0341043 0.667242 -0.74406 + 0.639649 6.01133 -0.70249 0.0485558 0.668402 -0.742213 + 0.784456 6.01127 -0.691392 0.0933853 0.669114 -0.737269 + 0.927715 6.00332 -0.672828 0.178047 0.656553 -0.732965 + 0.354184 6.1405 -0.599632 0.0420383 0.663685 -0.74683 + 0.498102 6.14672 -0.588201 0.037142 0.678084 -0.734045 + 0.641316 6.14611 -0.579735 0.0490339 0.678255 -0.733189 + 0.786124 6.14596 -0.568686 0.0892531 0.67008 -0.736903 + 0.347783 6.21394 -0.536426 0.0534637 0.700327 -0.711817 + 0.486205 6.20677 -0.532 0.0466256 0.712976 -0.699636 + 0.62942 6.20606 -0.523584 0.0430745 0.720728 -0.691878 + 0.768288 6.20634 -0.515467 0.0787484 0.717985 -0.69159 + 0.207617 6.2185 -0.54092 0.0496514 0.694268 -0.718002 + 0.205578 6.29899 -0.452748 0.0606583 0.765246 -0.640874 + 0.338572 6.28741 -0.454885 0.0592936 0.768014 -0.637682 + 0.476994 6.28015 -0.4505 0.055858 0.771129 -0.634224 + 0.613773 6.2732 -0.447271 0.0478942 0.776335 -0.628499 + 0.069681 6.23174 -0.539659 0.0300049 0.689998 -0.723189 + 0.067642 6.31215 -0.451527 0.0295687 0.773894 -0.632624 + 0.199352 6.38522 -0.341687 0.0541961 0.80811 -0.586533 + 0.332346 6.37373 -0.343783 0.0659207 0.806264 -0.587871 + 0.4634 6.355 -0.353554 0.0675952 0.809977 -0.582553 + -0.069687 6.1512 -0.605952 -0.0184895 0.648016 -0.761403 + -0.069687 6.23174 -0.539659 -0.0275494 0.691679 -0.721679 + -0.067641 6.31215 -0.451527 -0.0340309 0.776502 -0.629195 + 0.067642 6.39267 -0.339994 0.0191721 0.815805 -0.578009 + -0.207623 6.21858 -0.540869 -0.0528744 0.696325 -0.715776 + -0.205577 6.29899 -0.452748 -0.0572296 0.767845 -0.638074 + -0.067641 6.39267 -0.339994 -0.0230563 0.813379 -0.581277 + 0.072926 6.49919 -0.186687 0.0189729 0.826812 -0.562158 + -0.354189 6.14059 -0.599582 -0.0381478 0.660755 -0.749631 + -0.347788 6.21403 -0.536376 -0.04948 0.702982 -0.709484 + -0.33857 6.28741 -0.454885 -0.0583796 0.767573 -0.638297 + -0.199351 6.38522 -0.341687 -0.0496631 0.80558 -0.590403 + -0.498107 6.14672 -0.588201 -0.042035 0.675381 -0.73627 + -0.48621 6.20677 -0.532 -0.0520818 0.716616 -0.695521 + -0.476992 6.28015 -0.450509 -0.056634 0.770558 -0.634849 + -0.332344 6.37373 -0.343783 -0.0651617 0.806701 -0.587356 + -0.639652 6.01141 -0.702441 -0.046504 0.670334 -0.740601 + -0.641313 6.14602 -0.579793 -0.051567 0.680083 -0.731319 + -0.629416 6.20606 -0.523584 -0.0455203 0.719419 -0.693083 + -0.613771 6.2732 -0.447271 -0.0449501 0.774256 -0.631274 + -0.463398 6.35501 -0.353563 -0.0688198 0.810648 -0.581475 + -0.78446 6.01127 -0.691392 -0.0951146 0.67047 -0.735815 + -0.78612 6.14596 -0.568686 -0.0869705 0.671351 -0.736019 + -0.768285 6.20634 -0.515467 -0.0760132 0.715995 -0.693954 + -0.75264 6.27348 -0.439153 -0.0660012 0.77985 -0.622477 + -0.600177 6.34797 -0.350374 -0.0520031 0.820044 -0.569933 + -0.91205 5.80252 -0.858229 -0.173436 0.667096 -0.724502 + -0.927716 6.00332 -0.672828 -0.177348 0.657377 -0.732395 + -0.927557 6.13356 -0.558203 -0.175299 0.666431 -0.724665 + -0.909722 6.19394 -0.504984 -0.12974 0.699057 -0.703197 + -0.910415 5.64417 -1.00696 -0.192555 0.687661 -0.700032 + -1.05597 5.78718 -0.829051 -0.264599 0.648568 -0.713686 + -1.06648 5.96789 -0.661263 -0.265122 0.642501 -0.718959 + -1.06632 6.09813 -0.546639 -0.230281 0.603317 -0.763531 + -1.06324 5.49902 -1.09254 -0.318562 0.59338 -0.739201 + -1.05434 5.62891 -0.977733 -0.283958 0.650584 -0.704349 + -1.19187 5.58415 -0.948404 -0.379817 0.614733 -0.691262 + -1.1931 5.74158 -0.811476 -0.353448 0.619006 -0.70136 + -1.2036 5.92221 -0.643737 -0.327815 0.615515 -0.716714 + -1.019 5.38393 -1.18621 -0.31372 0.421492 -0.850837 + -1.17762 5.33694 -1.14963 -0.351813 0.42896 -0.831998 + -1.20078 5.45425 -1.0632 -0.406586 0.560646 -0.721363 + -1.06543 5.24125 -1.21968 -0.290697 0.328609 -0.898617 + -1.33486 5.16618 -1.16585 -0.353213 0.408556 -0.841619 + -1.30942 5.2666 -1.11779 -0.431476 0.477366 -0.765474 + -1.33258 5.38391 -1.03137 -0.454259 0.526779 -0.718438 + -1.31379 5.08385 -1.20386 -0.276849 0.362378 -0.889964 + -1.55248 4.99254 -1.1583 -0.431303 0.422065 -0.797395 + -1.53142 5.08193 -1.11033 -0.467322 0.488004 -0.737199 + -1.50598 5.18236 -1.06228 -0.480373 0.496365 -0.723092 + -1.28999 5.02564 -1.23883 -0.217344 0.322205 -0.921382 + -1.52868 4.93441 -1.19322 -0.356476 0.416323 -0.836421 + -1.76193 4.87261 -1.09058 -0.51979 0.552509 -0.651577 + -1.74087 4.96192 -1.04267 -0.544982 0.510329 -0.665251 + -1.07212 4.99461 -1.28169 -0.156104 0.0606465 -0.985877 + -1.29489 4.96095 -1.25018 -0.151152 0.128605 -0.980109 + -1.49436 4.89367 -1.22724 -0.235819 0.258652 -0.936743 + -1.73302 4.82137 -1.17302 -0.448347 0.531427 -0.718728 + -1.08456 4.94607 -1.27621 -0.0841637 -0.491281 -0.866925 + -1.27583 4.91587 -1.2563 -0.0111876 -0.419872 -0.907514 + -1.4753 4.84858 -1.23336 0.102244 -0.476335 -0.873299 + -1.6987 4.78061 -1.20703 -0.266966 0.219296 -0.938423 + -1.07847 4.90973 -1.22087 -0.035921 -0.896767 -0.441043 + -1.26974 4.87952 -1.20094 0.160129 -0.92125 -0.354482 + -1.46561 4.82287 -1.16843 0.321027 -0.910417 -0.260928 + -1.66633 4.75043 -1.21235 0.169585 -0.465591 -0.8686 + -1.08079 4.87115 -1.11625 -0.115012 -0.866484 -0.485775 + -1.24336 4.86956 -1.07869 0.0752373 -0.903988 -0.420886 + -1.43923 4.81291 -1.04616 0.225906 -0.878774 -0.420384 + -1.68114 4.71987 -1.00823 0.432985 -0.831728 -0.347496 + -1.65664 4.72463 -1.14746 0.500267 -0.849623 -0.166955 + -0.928875 4.63847 -0.852437 -0.252961 -0.76193 -0.596215 + -1.02178 4.6337 -0.842966 -0.0532569 -0.737417 -0.673335 + -1.18436 4.63201 -0.805442 -0.0176271 -0.674623 -0.737952 + -1.34289 4.64202 -0.837188 0.109292 -0.694404 -0.711237 + -0.867609 4.24338 -0.363923 -0.527234 -0.622152 -0.578749 + -0.960515 4.23869 -0.354402 0.480363 -0.588512 -0.650312 + -1.03739 4.11413 -0.419655 0.520031 -0.441357 -0.731281 + -1.19592 4.12414 -0.451392 -0.471933 -0.63234 -0.61435 + -0.8402 3.9418 -0.182369 -0.774752 0.224842 -0.590936 + -0.880818 4.00672 -0.136817 -0.0899295 -0.220847 -0.971153 + -0.95769 3.88224 -0.202011 0.572473 0.197903 -0.795682 + -0.966468 3.81265 -0.233661 0.193319 -0.0127319 -0.981053 + -1.12487 3.77236 -0.232082 0.474255 0.543726 -0.692419 + -1.05757 3.82089 -0.220541 -0.354538 -0.0250528 -0.934706 + -1.2339 4.17485 -0.409218 -0.329913 -0.650624 -0.683992 + -1.5848 4.54907 -0.799193 0.281534 -0.620336 -0.732067 + -1.83478 4.60951 -0.994476 0.677948 -0.639851 -0.361908 + -1.34224 3.96063 -0.422972 0.718154 0.155635 -0.678257 + -1.09555 3.87159 -0.178358 -0.221569 -0.200593 -0.95429 + -1.31292 4.05995 -0.369198 0.585482 -0.196147 -0.786598 + -1.66383 4.43409 -0.759232 0.500828 -0.395888 -0.769704 + -1.74769 4.29554 -0.775666 0.660362 -0.0850492 -0.746115 + -1.98545 4.35792 -1.0053 0.807632 -0.302662 -0.50609 + -1.91865 4.47089 -1.01097 0.784101 -0.45186 -0.42545 + -1.92485 4.48456 -1.11024 0.792089 -0.559264 -0.24458 + -1.81028 4.61427 -1.13372 0.638432 -0.748334 -0.180001 + -2.01006 4.25745 -1.02949 0.748011 -0.0552651 -0.661381 + -2.03362 4.27968 -1.06779 0.670132 -0.217338 -0.709709 + -1.99166 4.3715 -1.10463 0.608921 -0.535458 -0.585236 + -2.0653 4.30684 -1.08844 -0.160825 -0.214082 -0.963485 + -2.02333 4.39866 -1.12527 -0.225768 -0.199495 -0.953536 + -1.94069 4.50266 -1.1614 0.113139 -0.296302 -0.948369 + -1.82612 4.63246 -1.18482 0.181481 -0.432468 -0.883196 + -2.1201 4.34508 -1.06087 -0.677014 0.0410826 -0.734823 + -2.04885 4.45612 -1.10179 -0.623093 0.177164 -0.761819 + -1.96621 4.56012 -1.13792 -0.54574 0.227644 -0.80644 + -1.8585 4.66265 -1.17951 -0.402514 0.16736 -0.899985 + -2.15183 4.38913 -1.01236 -0.830673 0.204592 -0.517807 + -2.08058 4.50017 -1.05329 -0.725911 0.294137 -0.621721 + -1.99519 4.61324 -1.08894 -0.664518 0.37643 -0.645536 + -1.88748 4.71569 -1.13058 -0.591656 0.471745 -0.653759 + -2.17726 4.38166 -0.952832 -0.959257 0.218638 -0.178948 + -2.11876 4.55803 -0.967101 -0.858982 0.350757 -0.372987 + -2.03337 4.6711 -1.00275 -0.724799 0.464615 -0.508723 + -1.91638 4.76694 -1.04815 -0.620175 0.533531 -0.57509 + -2.15185 4.49786 -0.87628 -0.93645 0.308829 -0.166392 + -2.09336 4.67413 -0.890592 -0.892186 0.442235 0.091826 + -1.9959 4.7827 -0.94005 -0.723627 0.539447 -0.430537 + -1.87892 4.87863 -0.985402 -0.620665 0.541783 -0.566786 + -1.63409 5.12079 -1.00802 -0.551177 0.5135 -0.657664 + -2.24854 4.17171 -0.91737 -0.934021 0.246431 -0.258603 + -2.19335 4.39952 -0.832166 -0.968594 0.247948 -0.018657 + -2.08545 4.75607 -0.780523 -0.853189 0.384398 -0.352571 + -1.98499 4.84801 -0.845362 -0.766497 0.502366 -0.40014 + -1.88754 4.95658 -0.89482 -0.705758 0.534175 -0.465363 + -2.24864 4.13654 -0.878263 -0.932806 0.0776146 0.351922 + -2.19346 4.36427 -0.7931 -0.967214 0.137153 0.213744 + -2.12695 4.65774 -0.736409 -0.962108 0.243155 -0.123387 + -2.03206 4.93082 -0.7006 -0.788516 0.419337 -0.449888 + -2.28372 3.89467 -0.903336 -0.582355 -0.169603 0.795045 + -2.22706 4.10422 -0.851082 -0.694429 -0.0964978 0.713061 + -2.19937 4.274 -0.786762 -0.831122 -0.0775592 0.550654 + -2.1484 4.52392 -0.679827 -0.971796 0.0667655 0.226176 + -2.19517 4.08157 -0.830255 -0.56557 -0.223907 0.793723 + -2.16748 4.25127 -0.765985 -0.722121 -0.198765 0.662596 + -2.15431 4.43366 -0.67349 -0.871363 -0.0148259 0.490415 + -2.11382 4.41735 -0.623251 -0.951791 -0.149522 0.267838 + -2.13064 4.7121 -0.564763 -0.976898 0.085832 -0.19571 + -2.13402 4.10459 -0.790129 -0.498001 -0.337411 0.798842 + -2.12698 4.23505 -0.715696 -0.743746 -0.32304 0.585223 + -2.08281 4.28208 -0.563746 -0.936643 -0.345893 0.0553052 + -2.13134 4.47389 -0.427379 -0.965133 -0.160885 -0.206481 + -2.16234 4.60916 -0.486875 -0.982702 -0.0955547 -0.158638 + -2.14463 4.35754 -0.352645 -0.933539 -0.21049 -0.29017 + -2.25756 4.75509 -0.239223 -0.922096 -0.0294762 -0.385837 + -2.2028 4.84339 -0.336761 -0.92642 0.0518802 -0.372901 + -2.17109 4.94632 -0.414649 -0.899402 0.188308 -0.394481 + -2.13786 4.23703 -0.268518 -0.871772 -0.208045 -0.443545 + -2.27085 4.63874 -0.164498 -0.892174 -0.0767991 -0.445116 + -2.30296 4.96977 -0.093867 -0.901205 0.134963 -0.411844 + -2.2482 5.05807 -0.191405 -0.883957 0.209873 -0.417819 + -2.17387 5.1368 -0.282967 -0.840107 0.298649 -0.452801 + -2.31137 4.52042 -0.093169 -0.845276 -0.0774828 -0.528682 + -2.40095 4.75493 0.063448 -0.890638 0.0510447 -0.451839 + -2.36043 4.87316 -0.00793 -0.897243 0.0883171 -0.432614 + -2.32204 5.14603 0.030249 -0.881622 0.2533 -0.398223 + -2.24948 5.2288 -0.055713 -0.856936 0.306751 -0.414204 + -2.44768 4.64596 0.139603 -0.897404 0.0206002 -0.440729 + -2.43896 4.95463 0.199769 -0.906639 0.163528 -0.388926 + -2.37951 5.0495 0.116236 -0.897482 0.199988 -0.393103 + -2.31038 5.30304 0.127906 -0.862403 0.329154 -0.384602 + -2.43881 5.12605 0.296857 -0.893345 0.245788 -0.376195 + -2.37936 5.22093 0.213316 -0.885344 0.291531 -0.362181 + -2.2768 5.44834 0.191635 -0.848176 0.401769 -0.345224 + -2.20301 5.52251 0.10737 -0.83241 0.421618 -0.359628 + -2.23783 5.38581 0.041944 -0.844093 0.360321 -0.397084 + -2.50059 5.03891 0.382189 -0.895872 0.22087 -0.385524 + -2.41505 5.28978 0.362463 -0.874239 0.343795 -0.342798 + -2.34577 5.36623 0.277045 -0.861993 0.378289 -0.33744 + -2.23743 5.58643 0.280245 -0.83144 0.467443 -0.300339 + -2.47683 5.20264 0.447795 -0.89023 0.318772 -0.325383 + -2.37552 5.44264 0.454495 -0.857053 0.435546 -0.275244 + -2.30624 5.5191 0.369077 -0.841963 0.452132 -0.294407 + -2.5383 5.125 0.537667 -0.898986 0.300788 -0.318358 + -2.49893 5.29793 0.637158 -0.882619 0.401049 -0.245242 + -2.43747 5.37556 0.547294 -0.871118 0.417913 -0.257881 + -2.3209 5.60374 0.579269 -0.829943 0.516537 -0.210675 + -2.25917 5.66193 0.483885 -0.819998 0.52753 -0.222068 + -2.55605 5.22749 0.730347 -0.895686 0.383347 -0.22537 + -2.4383 5.48096 0.772532 -0.857551 0.481392 -0.181298 + -2.38285 5.53666 0.67206 -0.84802 0.490176 -0.201469 + -2.3171 5.68751 0.806972 -0.804549 0.570822 -0.163898 + -2.24643 5.76781 0.768289 -0.786241 0.59681 -0.160135 + -2.49541 5.41053 0.865721 -0.861749 0.475012 -0.178189 + -2.39597 5.61798 1.0342 -0.827314 0.551849 -0.104947 + -2.37255 5.63181 0.907443 -0.837499 0.532455 -0.122826 + -2.23624 5.85057 1.06814 -0.775175 0.626179 -0.0836794 + -2.16557 5.93087 1.02946 -0.734695 0.674446 -0.073111 + -2.55198 5.3488 0.961835 -0.877918 0.450501 -0.1622 + -2.45255 5.55625 1.13032 -0.830441 0.549581 -0.0912589 + -2.32895 5.74736 1.34111 -0.797503 0.603314 0.00140142 + -2.25966 5.83682 1.19496 -0.775072 0.630476 -0.0419944 + -2.38425 5.67106 1.43747 -0.790769 0.612015 -0.0110311 + -2.19092 5.90505 1.48339 -0.732698 0.676184 0.0769977 + -2.12164 5.99442 1.33719 -0.699589 0.714367 0.0159671 + -2.02499 6.07968 1.26831 -0.65105 0.759028 -0.00317655 + -2.22627 5.84969 1.68367 -0.717874 0.694061 0.0541761 + -2.18728 5.894 1.60172 -0.71018 0.701462 0.0599579 + -1.92557 6.13361 1.57631 -0.622916 0.775782 0.10069 + -1.82892 6.21878 1.50738 -0.580117 0.808073 0.10238 + -2.30466 5.76602 1.73179 -0.76823 0.633415 0.0927775 + -1.98527 6.0613 1.81496 -0.628439 0.761048 0.160846 + -1.92192 6.12256 1.69465 -0.601566 0.793809 0.0893619 + -1.58307 6.34482 1.72328 -0.495569 0.857439 0.1386 + -2.06366 5.97762 1.86309 -0.680883 0.711328 0.174388 + -1.72021 6.22202 1.95958 -0.531449 0.825284 0.190967 + -1.65687 6.28328 1.83927 -0.509354 0.848531 0.143367 + -2.28482 5.73189 1.88371 -0.745343 0.646386 0.163246 + -2.03019 5.98832 1.94595 -0.647969 0.733979 0.203495 + -1.76867 6.15769 2.07459 -0.559481 0.786474 0.26161 + -1.42144 6.34167 2.14354 -0.438062 0.866121 0.2407 + -2.06972 5.91293 2.05774 -0.665501 0.707765 0.237017 + -1.8082 6.0823 2.18638 -0.569094 0.765983 0.299002 + -1.50251 6.21269 2.36954 -0.489143 0.801031 0.345092 + -1.4699 6.27735 2.25855 -0.475747 0.826127 0.301957 + -2.104 5.84604 2.1598 -0.670562 0.698682 0.24938 + -1.87858 6.009 2.24893 -0.590643 0.761647 0.266524 + -2.11294 5.7944 2.27003 -0.666562 0.689565 0.283187 + -1.88752 5.95737 2.35916 -0.585268 0.739929 0.331613 + -1.57288 6.13948 2.43215 -0.520451 0.781261 0.34462 + -2.1445 5.69545 2.42503 -0.660573 0.689119 0.297924 + -1.84999 5.92615 2.48143 -0.564882 0.743964 0.356968 + -1.53535 6.10826 2.55442 -0.489147 0.785305 0.379514 + -1.23443 6.24429 2.6212 -0.395735 0.819675 0.414158 + -1.25699 6.29017 2.51054 -0.416464 0.818024 0.396729 + -2.18262 5.59851 2.57112 -0.670684 0.672163 0.313656 + -1.88811 5.8293 2.62758 -0.573635 0.734894 0.361765 + -1.53756 6.03442 2.69831 -0.487196 0.774542 0.403391 + -1.23664 6.17045 2.76509 -0.391 0.814482 0.428648 + -2.17244 5.50219 2.78196 -0.661462 0.658477 0.358993 + -1.8998 5.71355 2.82708 -0.565085 0.722115 0.399034 + -1.54926 5.91866 2.89781 -0.48609 0.763833 0.424589 + -1.25477 6.06039 2.95013 -0.39671 0.800892 0.448546 + -0.979822 6.24763 2.81382 -0.315632 0.83308 0.454263 + -2.158 5.36113 3.04749 -0.647779 0.655795 0.387705 + -1.88536 5.57239 3.09256 -0.56264 0.714356 0.416092 + -1.57754 5.7544 3.15491 -0.487216 0.755791 0.437492 + -1.28304 5.89613 3.20723 -0.407056 0.786678 0.464158 + -2.38671 5.03469 3.1669 -0.701412 0.601414 0.382522 + -2.14678 5.24937 3.24905 -0.643943 0.63825 0.42187 + -1.88054 5.45252 3.30259 -0.56554 0.700051 0.435996 + -1.57272 5.63453 3.36494 -0.484241 0.75215 0.446968 + -1.28068 5.78732 3.39111 -0.396231 0.786872 0.473111 + -2.10228 5.16854 3.42585 -0.629775 0.641628 0.437833 + -1.83605 5.37169 3.47939 -0.553281 0.684531 0.474655 + -1.55979 5.56028 3.50194 -0.48047 0.73433 0.479487 + -1.26774 5.71298 3.52805 -0.377546 0.780172 0.498788 + -2.32378 4.85822 3.53916 -0.677951 0.600146 0.424509 + -2.06904 5.08721 3.59373 -0.612011 0.641167 0.462977 + -1.7827 5.29043 3.64674 -0.538486 0.68082 0.496504 + -1.50643 5.47902 3.66929 -0.45509 0.713418 0.532849 + -1.24504 5.61941 3.67913 -0.370039 0.752409 0.544933 + -2.30518 4.77869 3.6845 -0.666593 0.588671 0.457296 + -2.04024 5.00608 3.73765 -0.592851 0.634558 0.495846 + -1.7539 5.20939 3.79071 -0.517473 0.668737 0.533866 + -1.43854 5.35952 3.86526 -0.430359 0.696739 0.573887 + -1.17714 5.49992 3.8751 -0.369731 0.731528 0.572857 + -2.48365 4.46478 3.7772 -0.721899 0.478827 0.499586 + -2.26262 4.69396 3.83745 -0.647759 0.559229 0.517369 + -1.99768 4.92135 3.8906 -0.570842 0.618521 0.539973 + -1.71986 5.09801 3.95142 -0.496235 0.654934 0.569923 + -1.4045 5.24815 4.02597 -0.430143 0.683824 0.589374 + -2.41989 4.38871 3.93257 -0.703169 0.451393 0.549361 + -2.19885 4.61797 3.99287 -0.627162 0.539792 0.561509 + -1.94895 4.80519 4.0614 -0.555678 0.590378 0.585386 + -1.67113 4.98185 4.12221 -0.477449 0.632657 0.609744 + -1.36275 5.14531 4.16988 -0.418264 0.65903 0.625087 + -2.62707 4.1322 3.83826 -0.788709 0.331007 0.518047 + -2.57458 4.05159 3.96267 -0.773564 0.310175 0.552621 + -2.3674 4.3081 4.05697 -0.689013 0.416436 0.593163 + -2.14437 4.5084 4.14646 -0.613684 0.496887 0.613593 + -1.89447 4.69571 4.21503 -0.532072 0.557875 0.636926 + -2.77752 3.86569 3.72906 -0.872701 0.18169 0.453191 + -2.73728 3.79021 3.8274 -0.861302 0.154815 0.483932 + -2.53309 3.97831 4.05781 -0.761107 0.296734 0.576771 + -2.29879 4.2055 4.1993 -0.661744 0.378805 0.646994 + -2.07576 4.40579 4.28877 -0.598627 0.463738 0.653141 + -2.82858 3.53202 3.684 -0.914763 0.00252382 0.403983 + -2.78421 3.44796 3.7778 -0.893841 -0.0361337 0.446926 + -2.69578 3.71692 3.92254 -0.84096 0.116687 0.528366 + -2.64521 3.64027 4.0067 -0.825531 0.0542281 0.561746 + -2.53323 3.86313 4.1181 -0.786901 0.226733 0.573915 + -2.81782 3.17507 3.64045 -0.912748 -0.166902 0.372873 + -2.76579 3.06917 3.70128 -0.872649 -0.217023 0.437475 + -2.73363 3.37131 3.86196 -0.839471 -0.0999628 0.534131 + -2.78998 2.87553 3.49106 -0.903807 -0.252249 0.345691 + -2.73795 2.76963 3.5519 -0.907166 -0.258982 0.331629 + -2.68565 2.64337 3.59557 -0.885289 -0.272216 0.377043 + -2.71231 2.98091 3.75194 -0.841354 -0.23272 0.487816 + -2.68015 3.28305 3.91262 -0.813042 -0.150788 0.56234 + -2.7715 2.56331 3.31005 -0.890009 -0.276129 0.362818 + -2.71027 2.44319 3.36151 -0.895795 -0.28226 0.343338 + -2.65797 2.31693 3.40519 -0.890658 -0.303943 0.338153 + -2.59067 2.20433 3.46002 -0.871856 -0.328038 0.363673 + -2.62818 2.5354 3.64319 -0.868149 -0.287172 0.404783 + -2.69228 2.10032 3.12978 -0.866146 -0.332279 0.373338 + -2.61717 1.99095 3.18921 -0.858295 -0.354371 0.371147 + -2.54987 1.87835 3.24403 -0.848873 -0.373395 0.374153 + -2.58932 1.72227 2.99017 -0.846744 -0.385045 0.367103 + -2.5124 1.62377 3.06318 -0.838015 -0.396239 0.375133 + -2.46886 1.78873 3.32206 -0.832631 -0.399723 0.383337 + -2.53005 2.083 3.50337 -0.864435 -0.352253 0.358707 + -2.56756 2.41407 3.68654 -0.840207 -0.302682 0.449929 + -2.48791 1.4137 2.88484 -0.840462 -0.45627 0.292304 + -2.40648 1.33423 2.98427 -0.815559 -0.466775 0.34203 + -2.43139 1.53425 3.14124 -0.8157 -0.4135 0.404538 + -2.34569 1.46559 3.23756 -0.80594 -0.439092 0.397063 + -2.39338 1.69648 3.39225 -0.830078 -0.413424 0.374234 + -2.31754 1.1515 2.90997 -0.771437 -0.600781 0.209635 + -2.2371 1.09047 2.99829 -0.73199 -0.598334 0.325862 + -2.32078 1.26567 3.08063 -0.761775 -0.497766 0.414642 + -2.093 0.932672 2.9956 -0.727344 -0.645048 0.234272 + -2.01009 0.871012 3.0782 -0.706425 -0.601006 0.373839 + -2.1368 1.04701 3.10196 -0.692456 -0.55539 0.460485 + -2.22049 1.22221 3.1843 -0.720047 -0.535747 0.441031 + -1.86134 0.698281 3.07398 -0.655973 -0.645351 0.391435 + -1.92477 0.837049 3.16022 -0.611667 -0.544957 0.573485 + -2.05149 1.01305 3.18398 -0.659113 -0.566861 0.494205 + -2.12533 1.1769 3.28579 -0.671819 -0.578709 0.462337 + -2.26637 1.40325 3.33934 -0.772778 -0.487055 0.406929 + -1.7962 0.650262 3.09175 -0.63669 -0.606658 0.476016 + -1.85963 0.789029 3.178 -0.612233 -0.581127 0.536155 + -1.94244 0.986556 3.28547 -0.629705 -0.577808 0.519239 + -2.01628 1.1504 3.38728 -0.646243 -0.612695 0.454944 + -2.17121 1.35793 3.44083 -0.723357 -0.534965 0.43654 + -1.73412 0.564605 3.06711 -0.515192 -0.640653 0.569333 + -1.73363 0.618536 3.1267 -0.458439 -0.6538 0.601979 + -1.77198 0.749834 3.24148 -0.46805 -0.60495 0.644177 + -1.85479 0.947356 3.34897 -0.666573 -0.594576 0.449621 + -1.66348 0.541346 3.0962 -0.560467 -0.593837 0.577265 + -1.65978 0.59553 3.13895 -0.551915 -0.567521 0.610991 + -1.69813 0.726735 3.25369 -0.538474 -0.657094 0.527517 + -1.66356 0.494942 3.03757 -0.522959 -0.698496 0.488485 + -1.5765 0.47587 3.1152 -0.582342 -0.680957 0.444043 + -1.57356 0.529691 3.20318 -0.690582 -0.549312 0.470481 + -1.56985 0.583876 3.24593 -0.796085 -0.439406 0.416138 + -1.57678 0.433581 3.05125 -0.527025 -0.741342 0.415519 + -1.48361 0.423983 3.15228 -0.54046 -0.751175 0.378997 + -1.46315 0.457696 3.25048 -0.580016 -0.712209 0.395399 + -1.46021 0.511524 3.33845 -0.622179 -0.674229 0.39788 + -1.49536 0.600462 3.45061 -0.665155 -0.655132 0.358289 + -1.58563 0.400431 2.97007 -0.453371 -0.809549 0.372942 + -1.49245 0.390835 3.07109 -0.424568 -0.845336 0.324267 + -1.39311 0.423956 3.28332 -0.466359 -0.811614 0.35184 + -1.37265 0.457671 3.38152 -0.587014 -0.716386 0.377102 + -1.37396 0.50998 3.47732 -0.608254 -0.697137 0.379509 + -1.58803 0.369629 2.90282 -0.382283 -0.861703 0.333658 + -1.50742 0.365528 2.97092 -0.357958 -0.88623 0.294047 + -1.41527 0.367643 3.09466 -0.407665 -0.864922 0.29278 + -1.40031 0.392948 3.19483 -0.34258 -0.889776 0.301559 + -1.59505 0.345333 2.8163 -0.297495 -0.915784 0.269881 + -1.51444 0.341323 2.88444 -0.288884 -0.92649 0.241167 + -1.42643 0.338359 2.99638 -0.361807 -0.897124 0.253505 + -1.31135 0.370899 3.26322 -0.455682 -0.823591 0.337717 + -1.31732 0.41586 3.35094 -0.41413 -0.839218 0.352432 + -1.5995 0.32692 2.74539 -0.241215 -0.940917 0.237678 + -1.52447 0.322081 2.78258 -0.254475 -0.941457 0.221137 + -1.43646 0.319034 2.89445 -0.400886 -0.886323 0.231778 + -1.3225 0.341615 3.16494 -0.433311 -0.844193 0.315563 + -1.60492 0.308399 2.65827 -0.240552 -0.949548 0.201229 + -1.5299 0.303479 2.69539 -0.258209 -0.937699 0.232481 + -1.45863 0.292208 2.75412 -0.398208 -0.886978 0.233882 + -1.43366 0.302875 2.84704 -0.498565 -0.835232 0.231994 + -1.3337 0.312427 3.07849 -0.500614 -0.809059 0.30791 + -1.6041 0.296972 2.58606 -0.26783 -0.951418 0.15189 + -1.53775 0.278788 2.59336 -0.276041 -0.943865 0.181437 + -1.46648 0.267522 2.65207 -0.344302 -0.91691 0.201824 + -1.38725 0.279569 2.84861 -0.413782 -0.884556 0.215276 + -1.36228 0.290151 2.94148 -0.369347 -0.907823 0.198597 + -1.61688 0.289009 2.51586 -0.28857 -0.952577 0.096562 + -1.55053 0.27074 2.5231 -0.251109 -0.961151 0.114601 + -1.6108 0.282559 2.44383 -0.307914 -0.949251 0.064123 + -1.53395 0.261698 2.47116 -0.32043 -0.939161 0.123696 + -1.459 0.23882 2.50859 -0.318432 -0.933297 0.166009 + -1.44907 0.249449 2.58998 -0.316583 -0.935513 0.156813 + -1.38554 0.257779 2.75535 -0.382951 -0.903815 0.190962 + -1.35813 0.192676 2.42711 -0.366869 -0.91929 0.142524 + -1.36248 0.214593 2.51975 -0.360373 -0.915035 0.181227 + -1.35254 0.225228 2.60113 -0.355305 -0.92384 0.142402 + -1.36812 0.239711 2.69324 -0.353859 -0.926213 0.13005 + -1.35254 0.178855 2.33105 -0.375137 -0.915107 0.147824 + -1.22502 0.1292 2.42025 -0.503715 -0.855159 0.122368 + -1.24753 0.147325 2.49866 -0.491099 -0.863072 0.118023 + -1.25187 0.169242 2.5913 -0.529094 -0.8298 0.177456 + -1.26171 0.195051 2.6764 -0.478505 -0.865507 0.148093 + -1.22639 0.11164 2.32647 -0.382186 -0.920909 0.0765589 + -1.09364 0.061061 2.56068 -0.335105 -0.942169 -0.00473835 + -1.11615 0.079097 2.63903 -0.456969 -0.87659 0.150894 + -1.13842 0.10992 2.71005 -0.500592 -0.841312 0.203964 + -1.14825 0.135812 2.7952 -0.542457 -0.7889 0.28875 + -0.896145 0.022032 2.55048 -0.214804 -0.963145 -0.161897 + -0.952262 0.022123 2.61172 -0.203659 -0.978692 -0.0261792 + -0.983929 0.03359 2.68686 -0.249332 -0.949588 0.190041 + -1.00619 0.064412 2.75787 -0.283769 -0.918875 0.274125 + -0.803247 0.008962 2.48331 -0.158851 -0.978311 -0.132942 + -0.814194 0.000593 2.56841 -0.12055 -0.992694 -0.00509737 + -0.845861 0.012058 2.64355 -0.107171 -0.984322 0.14009 + -0.866441 0.031135 2.72791 -0.112306 -0.960205 0.255722 + -0.657184 0.01911 2.37374 -0.0147508 -0.976254 -0.216126 + -0.675869 -0.000111 2.45303 -0.0695588 -0.977366 -0.199795 + -0.686816 -0.008481 2.53812 -0.0908094 -0.994179 -0.0579866 + -0.703071 -0.008483 2.62033 -0.107308 -0.991085 0.078968 + -0.499512 0.022608 2.37428 0.0102038 -0.961159 -0.275806 + -0.518198 0.003392 2.45356 -0.0204655 -0.96135 -0.274569 + -0.539283 -0.019714 2.52918 -0.0416273 -0.990242 -0.132996 + -0.555538 -0.019623 2.61142 -0.0525226 -0.996237 0.0689479 + -0.331538 0.051209 2.27994 -0.100796 -0.937161 -0.334021 + -0.352717 0.023041 2.35593 -0.103715 -0.934538 -0.340415 + -0.367796 -0.000722 2.43029 -0.0973485 -0.946152 -0.308738 + -0.388881 -0.023827 2.5059 -0.056209 -0.982144 -0.179537 + -0.198736 0.042713 2.24145 -0.078837 -0.938607 -0.33586 + -0.21426 0.01562 2.31178 -0.0900101 -0.932855 -0.348827 + -0.229339 -0.00815 2.38615 -0.0575547 -0.96312 -0.262843 + -0.23537 -0.024098 2.46137 -0.00773696 -0.989474 -0.144503 + -0.091123 0.070783 2.16104 0.184411 -0.934218 -0.305335 + -0.102384 0.045062 2.23058 0.130922 -0.939753 -0.31579 + -0.117908 0.017966 2.30092 0.16783 -0.944094 -0.283758 + -0.127574 -0.000582 2.37404 0.191788 -0.961106 -0.198729 + -0.037665 0.080134 2.17804 0.337094 -0.864903 -0.371902 + -0.048927 0.054415 2.24759 0.230597 -0.932495 -0.277991 + -0.059922 0.03462 2.32127 0.240626 -0.944363 -0.224226 + -0.069588 0.016073 2.3944 0.216533 -0.959851 -0.178325 + -0.003058 0.11597 2.14477 0.163545 -0.956035 -0.243415 + -0.010834 0.082213 2.20244 0.3746 -0.851261 -0.367462 + -0.014994 0.056002 2.26444 0.256505 -0.919409 -0.298146 + -0.025989 0.036207 2.33812 -0.15586 -0.944153 -0.290313 + 0.003058 0.11597 2.14477 -0.158852 -0.935086 -0.31683 + -0.003058 0.082127 2.21059 0.187122 -0.896754 -0.401021 + -0.007218 0.056001 2.27264 0.106277 -0.93326 -0.343121 + 0.029889 0.113896 2.12036 -0.433885 -0.852333 -0.292014 + 0.010834 0.082213 2.20244 -0.374604 -0.851261 -0.367459 + 0.003058 0.082127 2.21059 -0.18711 -0.89676 -0.401013 + 0.007227 0.056001 2.27264 -0.106401 -0.933287 -0.343009 + -0.007218 0.024066 2.34035 -0.243394 -0.909678 -0.33652 + 0.079232 0.091678 2.08985 -0.289449 -0.927352 -0.237145 + 0.037665 0.080134 2.17804 -0.359894 -0.871334 -0.333545 + 0.048925 0.054415 2.24759 -0.24533 -0.92584 -0.287459 + 0.015003 0.055997 2.26445 -0.256553 -0.919418 -0.298081 + 0.072394 0.110565 2.02133 -0.329107 -0.930207 -0.162492 + 0.161487 0.095491 2.01744 -0.0685538 -0.985789 -0.153364 + 0.171288 0.084975 2.09565 -0.0115078 -0.98139 -0.191679 + 0.091123 0.070783 2.16104 -0.143059 -0.94941 -0.279562 + 0.102382 0.045057 2.23059 -0.122777 -0.936224 -0.329257 + 0.154552 0.107445 1.94174 -0.120366 -0.984145 -0.130269 + 0.291431 0.091702 2.046 -0.0565842 -0.99577 -0.0723881 + 0.301232 0.081181 2.12422 -0.0199479 -0.992998 -0.116439 + 0.315981 0.072491 2.20528 0.0470769 -0.976937 -0.208274 + 0.183179 0.063995 2.16679 0.0456908 -0.957181 -0.285862 + 0.285543 0.092543 1.96235 -0.101498 -0.992377 -0.0699049 + 0.41841 0.078475 1.97131 -0.11929 -0.989789 -0.0780191 + 0.424298 0.077633 2.05497 -0.114148 -0.99342 -0.00929113 + 0.4416 0.074308 2.13813 -0.0853809 -0.994554 -0.0597712 + 0.42024 0.092654 1.88995 -0.115153 -0.979433 -0.165681 + 0.54972 0.058582 1.96297 -0.101911 -0.991811 -0.0769779 + 0.566166 0.059859 2.04836 -0.0992237 -0.995054 0.00470803 + 0.583467 0.056539 2.13151 -0.0993196 -0.994846 -0.0204205 + 0.688824 0.049855 1.99168 0.0382392 -0.992 -0.120303 + 0.70527 0.051219 2.07712 -0.0494202 -0.998704 -0.0121398 + 0.724318 0.045762 2.15937 -0.0411527 -0.99794 -0.0492164 + 0.615817 0.051409 2.21279 -0.0742989 -0.99312 -0.0905151 + 0.456349 0.065616 2.21918 -0.0626254 -0.989205 -0.132482 + 0.848105 0.045259 2.14045 0.0543518 -0.992657 -0.108063 + 0.867153 0.039802 2.2227 0.0499618 -0.996664 -0.0645339 + 0.867964 0.035107 2.30703 0.0568548 -0.996004 -0.0688691 + 0.756667 0.040633 2.24066 -0.0369891 -0.997551 -0.0593598 + 1.0238 0.072501 2.07606 0.103605 -0.982744 -0.153235 + 1.02656 0.061384 2.16131 0.136539 -0.986719 -0.0879906 + 1.02737 0.056695 2.24564 0.163765 -0.9859 -0.0343876 + 1.02727 0.055147 2.33272 0.203149 -0.979126 -0.00658434 + 0.879902 0.028684 2.38955 0.0652774 -0.997577 -0.0240407 + 1.22545 0.112729 1.96998 0.211976 -0.970946 -0.111036 + 1.22032 0.103022 2.0614 0.259999 -0.964237 -0.0514541 + 1.22022 0.101478 2.14847 0.320432 -0.946994 0.022916 + 1.34103 0.156335 1.88086 0.523063 -0.840983 -0.138394 + 1.33591 0.146628 1.97227 0.521473 -0.851636 -0.0527465 + 1.34864 0.1531 2.04626 0.589787 -0.807353 0.0182312 + 1.21712 0.106865 2.24234 0.333338 -0.942089 0.036791 + 1.39166 0.208942 1.93914 0.703827 -0.70643 -0.0747307 + 1.40439 0.215415 2.01313 0.62135 -0.776022 -0.108235 + 1.34554 0.158488 2.14013 0.474663 -0.880166 0.00172384 + 1.39962 0.228884 1.8724 0.705242 -0.690147 -0.162267 + 1.45855 0.269326 1.90935 0.522432 -0.840345 -0.144514 + 1.46891 0.259892 1.99509 0.49533 -0.852168 -0.168693 + 1.42509 0.205372 2.11312 0.511678 -0.852605 -0.106067 + 1.53293 0.308826 1.84893 0.330094 -0.938016 -0.105662 + 1.53307 0.306576 1.92143 0.391088 -0.916012 -0.0892856 + 1.54342 0.297145 2.00716 0.398761 -0.903806 -0.155318 + 1.48961 0.249849 2.09508 0.496919 -0.854654 -0.150455 + 1.43347 0.208092 2.21021 0.448849 -0.892884 -0.035966 + 1.53008 0.323491 1.76373 0.275938 -0.94598 -0.170235 + 1.64358 0.352114 1.74876 0.253682 -0.959063 -0.125876 + 1.64093 0.345863 1.82318 0.293477 -0.954442 -0.0539524 + 1.64107 0.343527 1.89563 0.281179 -0.957819 -0.0593381 + 1.64148 0.337272 1.96966 0.285172 -0.951481 -0.115591 + 1.65108 0.366223 1.68132 0.184431 -0.967957 -0.170423 + 1.77082 0.395977 1.66818 0.164362 -0.985771 -0.0352348 + 1.76818 0.389645 1.74255 0.185971 -0.978734 -0.0865751 + 1.771 0.382386 1.81952 0.209389 -0.975226 -0.071343 + 1.77141 0.376132 1.89355 0.225647 -0.971576 -0.0715816 + 1.65583 0.378339 1.60973 0.0257995 -0.945029 -0.325967 + 1.77005 0.395597 1.59024 0.0816358 -0.993585 -0.0782656 + 1.85044 0.398633 1.52138 -0.320957 -0.947091 0.00234549 + 1.85122 0.398931 1.59927 -0.151561 -0.987259 0.0484734 + 1.85945 0.403984 1.67471 -0.0536916 -0.998166 0.0279686 + 1.7748 0.407712 1.51866 -0.0619945 -0.989651 -0.129412 + 1.84236 0.406737 1.45075 -0.405369 -0.913879 -0.0223828 + 1.88427 0.36495 1.46772 -0.48708 -0.867401 0.101831 + 1.90111 0.374766 1.54132 -0.396612 -0.911067 0.112498 + 1.90934 0.379825 1.61676 -0.239748 -0.954517 0.177249 + 1.76511 0.411152 1.4421 -0.141135 -0.983091 -0.116677 + 1.83267 0.410092 1.37414 -0.29654 -0.925223 -0.236701 + 1.87618 0.373049 1.39709 -0.648237 -0.751997 -0.119544 + 1.93117 0.334755 1.36422 -0.483302 -0.875141 0.0234159 + 1.81919 0.433354 1.30084 0.00983121 -0.989932 -0.141205 + 1.87003 0.41583 1.3378 -0.51384 -0.795843 -0.320315 + 1.92036 0.393833 1.2301 -0.736894 -0.642779 -0.209338 + 1.92652 0.351051 1.2894 -0.703942 -0.676847 -0.215276 + 1.79441 0.430865 1.22576 0.27621 -0.931744 -0.235715 + 1.85655 0.439092 1.2645 -0.283468 -0.922398 -0.26235 + 1.90726 0.422203 1.15736 -0.792068 -0.57329 -0.209684 + 1.98696 0.346454 1.04956 -0.587609 -0.799014 -0.127645 + 1.9973 0.330459 1.13187 -0.484672 -0.864336 -0.134225 + 1.77727 0.448527 1.15856 0.422272 -0.8665 -0.266203 + 1.8535 0.482551 1.20203 -0.18739 -0.883592 -0.429126 + 1.90421 0.465661 1.09488 -0.756166 -0.637205 -0.148939 + 1.97386 0.374826 0.976819 -0.621314 -0.782562 -0.0395699 + 2.04494 0.342123 0.90966 -0.0715123 -0.991567 -0.108076 + 1.83637 0.500213 1.13484 0.0306055 -0.952491 -0.303024 + 1.88128 0.493808 1.02394 -0.756631 -0.648825 -0.0808453 + 1.93569 0.390765 0.900612 -0.651428 -0.757784 0.0374919 + 1.98702 0.367937 0.75095 -0.327691 -0.940371 -0.0912207 + 2.02519 0.351912 0.827106 -0.189255 -0.979172 -0.0735147 + 1.82411 0.52969 1.06819 -0.0578216 -0.907299 -0.416492 + 1.95867 0.386642 0.672753 -0.371384 -0.92159 -0.112893 + 2.05472 0.382269 0.629927 0.065554 -0.977113 -0.202366 + 2.07224 0.36711 0.717184 0.116856 -0.977633 -0.174868 + 2.092 0.357321 0.799737 0.323412 -0.944409 -0.0591275 + 2.0973 0.364427 0.890429 0.464803 -0.884773 -0.0336758 + 2.05528 0.326128 0.991967 0.128093 -0.985761 -0.108941 + 2.08196 0.418871 0.48953 0.407847 -0.873923 -0.264424 + 2.11199 0.414984 0.555663 0.452122 -0.842762 -0.292126 + 2.12951 0.399825 0.642919 0.387981 -0.897008 -0.211774 + 2.13558 0.38581 0.72019 0.454304 -0.884833 -0.10334 + 2.14615 0.466202 0.52235 0.629181 -0.65078 -0.424989 + 2.19668 0.44916 0.604469 0.572982 -0.750098 -0.330219 + 2.20274 0.43506 0.68169 0.580376 -0.805838 -0.117426 + 2.14088 0.392917 0.810883 0.573695 -0.819015 0.0093976 + 2.10104 0.361741 0.977082 0.600432 -0.799358 -0.0225296 + 2.19285 0.51342 0.515567 0.613053 -0.568272 -0.548847 + 2.24338 0.496376 0.597685 0.680611 -0.579277 -0.44856 + 2.28997 0.514976 0.652872 0.707388 -0.625578 -0.32902 + 2.23818 0.459144 0.727577 0.592941 -0.80241 -0.0675213 + 2.17632 0.417 0.85677 0.561185 -0.827685 -0.00306734 + 2.28732 0.572307 0.59577 0.741811 -0.45929 -0.488639 + 2.33391 0.590818 0.650907 0.779893 -0.436275 -0.448811 + 2.35739 0.555668 0.72119 0.782201 -0.553962 -0.285109 + 2.3056 0.499835 0.795894 0.616967 -0.78481 -0.0585181 + 2.3564 0.636682 0.641869 0.759233 -0.503021 -0.412959 + 2.36268 0.60947 0.695201 0.851453 -0.376784 -0.364775 + 2.40264 0.642146 0.761807 0.836375 -0.468896 -0.283925 + 2.39735 0.588344 0.787796 0.87413 -0.460995 -0.152907 + 2.38517 0.655248 0.686114 0.781124 -0.571727 -0.250944 + 2.41327 0.679275 0.713097 0.753124 -0.608838 -0.24924 + 2.4371 0.665621 0.797747 0.789215 -0.59173 -0.164303 + 2.41924 0.62912 0.887168 0.835089 -0.550095 0.0046775 + 2.42472 0.70048 0.684769 0.799056 -0.522985 -0.296641 + 2.44773 0.702749 0.749038 0.814101 -0.523923 -0.250488 + 2.4608 0.703778 0.825056 0.890907 -0.450235 -0.0597797 + 2.47306 0.737895 0.783762 0.903579 -0.409227 -0.126798 + 2.48104 0.747248 0.863964 0.914526 -0.403579 -0.0276885 + 2.44294 0.667191 0.914427 0.869972 -0.49307 -0.00555513 + 2.45262 0.684514 0.975823 0.861075 -0.507469 0.03202 + 2.3602 0.564961 1.02569 0.768668 -0.635541 0.0723629 + 2.39861 0.638763 1.21626 0.805622 -0.5874 0.0770369 + 2.38231 0.600476 1.11978 0.789314 -0.609268 0.0759963 + 2.25227 0.468723 1.25478 0.698229 -0.713451 0.0588555 + 2.22755 0.443112 1.16914 0.65457 -0.755285 0.0329122 + 2.33831 0.524184 0.926321 0.719688 -0.693494 0.0334011 + 2.42046 0.677095 1.30547 0.828536 -0.554345 0.0789334 + 2.30903 0.550103 1.42763 0.750774 -0.655896 0.0783519 + 2.27437 0.504326 1.34892 0.731443 -0.67743 0.0779699 + 2.16102 0.400339 1.41963 0.648016 -0.757781 0.0764341 + 2.33088 0.588434 1.51684 0.757616 -0.648607 0.0729866 + 2.22441 0.481562 1.57934 0.694352 -0.708428 0.12651 + 2.18975 0.4357 1.50058 0.67295 -0.732255 0.104599 + 2.36209 0.629195 1.59564 0.781334 -0.619837 0.072931 + 2.28026 0.562414 1.73771 0.692251 -0.701816 0.168054 + 2.24905 0.521653 1.65891 0.687522 -0.71591 0.121601 + 2.14602 0.429243 1.66256 0.598414 -0.77815 0.190744 + 2.12043 0.391848 1.58513 0.5609 -0.810215 0.170125 + 2.44107 0.741639 1.49588 0.858054 -0.509507 0.0643884 + 2.37651 0.663807 1.68489 0.810918 -0.571291 0.126642 + 2.28961 0.596452 1.82015 0.691577 -0.69423 0.199415 + 2.17756 0.505198 1.82421 0.626008 -0.737496 0.253404 + 2.17066 0.469328 1.74214 0.614265 -0.75993 0.212565 + 2.45187 0.773462 1.59656 0.874339 -0.47292 0.108989 + 2.37738 0.689146 1.775 0.824266 -0.540742 0.167879 + 2.29048 0.621709 1.9102 0.687285 -0.679971 0.255495 + 2.18691 0.539241 1.90664 0.616385 -0.74181 0.264171 + 2.10576 0.47921 1.92562 0.564836 -0.78536 0.253315 + 2.5209 0.910411 1.57756 0.90282 -0.421401 0.0856562 + 2.45124 0.806408 1.69129 0.875849 -0.46505 0.128908 + 2.37676 0.722098 1.86973 0.839628 -0.462381 0.285005 + 2.28774 0.657035 1.99442 0.726418 -0.57156 0.381623 + 2.19008 0.578291 1.98821 0.623762 -0.714053 0.317883 + 2.52867 0.942755 1.67753 0.912805 -0.396344 0.0984824 + 2.45901 0.838753 1.79127 0.858049 -0.484414 0.17057 + 2.35716 0.768187 1.95149 0.819581 -0.469273 0.32874 + 2.26814 0.703124 2.07619 0.753854 -0.559826 0.343947 + 2.18734 0.613617 2.07242 0.667351 -0.684937 0.292412 + 2.57475 1.08248 1.66552 0.950545 -0.295178 0.0966118 + 2.57155 1.11526 1.79054 0.944891 -0.30605 0.116247 + 2.52548 0.975537 1.80256 0.914342 -0.372792 0.158128 + 2.45238 0.870138 1.88291 0.830781 -0.50723 0.229174 + 2.35053 0.799572 2.04313 0.770175 -0.596041 0.227081 + 2.59824 1.09167 1.44121 0.950668 -0.246942 0.187751 + 2.60356 1.16593 1.62819 0.958696 -0.274437 0.0747358 + 2.62389 1.22028 1.49886 0.951311 -0.279535 0.129874 + 2.64445 1.30412 1.55343 0.939656 -0.326798 0.101239 + 2.62411 1.24978 1.68276 0.954808 -0.291124 0.0599066 + 2.64442 1.24894 1.44861 0.814674 -0.398533 0.421281 + 2.66485 1.33239 1.50287 0.812294 -0.468549 0.347333 + 2.68044 1.42697 1.65945 0.904838 -0.42075 0.0651016 + 2.67129 1.41559 1.73735 0.915336 -0.397523 0.0643014 + 2.61496 1.2384 1.76067 0.948755 -0.301931 0.093284 + 2.70609 1.36395 1.48141 0.791247 -0.472594 0.388049 + 2.70084 1.45524 1.60889 0.870726 -0.459734 0.174591 + 2.78395 1.59133 1.59757 0.787807 -0.605392 0.113405 + 2.67396 1.43038 1.80435 0.919037 -0.390839 0.0511513 + 2.60791 1.25902 1.86534 0.939973 -0.329719 0.0879526 + 2.74541 1.52447 1.57417 0.864816 -0.467209 0.183871 + 2.90461 1.70028 1.54007 0.866201 -0.499645 0.00711979 + 2.87939 1.69471 1.66272 0.793177 -0.58475 0.170111 + 2.75873 1.58567 1.72017 0.831363 -0.534576 0.151868 + 2.69898 1.49683 1.84245 0.910648 -0.407222 0.069928 + 2.96054 1.88031 1.66985 0.99253 -0.119298 -0.0255294 + 2.92564 1.84141 1.81123 0.891443 -0.40446 0.204307 + 2.78036 1.65231 1.87676 0.844401 -0.508476 0.168641 + 2.72062 1.56338 1.99899 0.922727 -0.380864 0.0593083 + 2.97736 2.1481 2.00502 0.959823 -0.24875 0.129861 + 2.94247 2.1092 2.14639 0.951548 -0.269409 0.148241 + 2.90194 2.0281 2.26247 0.92428 -0.348229 0.156342 + 2.82662 1.79901 2.02526 0.855891 -0.478772 0.195521 + 3.01987 2.36333 2.07983 0.987932 -0.144265 0.0563761 + 3.00149 2.35754 2.22905 0.965788 -0.230895 0.118072 + 2.97441 2.31554 2.36321 0.958536 -0.251 0.134936 + 2.93387 2.23443 2.47928 0.944679 -0.282818 0.166119 + 2.83818 1.92807 2.39191 0.920875 -0.365786 0.134867 + 3.02077 2.3673 1.93415 0.993387 0.0078276 -0.114545 + 3.02802 2.51664 2.20689 0.994751 -0.0950307 0.037931 + 3.01751 2.4999 2.34988 0.982252 -0.157549 0.101779 + 2.99042 2.45789 2.48404 0.965403 -0.206231 0.159581 + 2.9537 2.39974 2.60716 0.950701 -0.233574 0.203986 + 2.99255 2.32319 1.78795 0.987705 -0.0415422 -0.15071 + 3.02892 2.52052 2.06117 0.996525 -0.0829995 -0.00695802 + 3.05121 2.75296 2.22377 0.995407 -0.0916072 0.0277883 + 3.03966 2.71913 2.35896 0.992703 -0.102171 0.0640396 + 3.02916 2.70248 2.502 0.987232 -0.116406 0.108735 + 2.97632 2.33456 1.65087 0.977253 -0.0384652 -0.208559 + 3.03153 2.54161 1.91944 0.992019 -0.11236 -0.0572146 + 3.05381 2.77414 2.08209 0.996481 -0.0836835 -0.00470311 + 3.06812 3.01108 2.40629 0.99495 -0.0870433 0.0499732 + 3.05657 2.97725 2.54149 0.987999 -0.114326 0.103863 + 3.01529 2.55297 1.78236 0.986964 -0.113999 -0.113608 + 3.0561 2.83204 1.959 0.996103 -0.0805939 -0.0358342 + 3.0788 3.08234 2.28906 0.997438 -0.0693568 0.017529 + 3.08929 3.3725 2.4613 0.998344 -0.0408288 0.0405364 + 3.07861 3.30131 2.57859 0.995042 -0.0575339 0.0811209 + 3.05736 2.90192 1.83917 0.995429 -0.0615048 -0.07306 + 3.08109 3.14025 2.16597 0.99878 -0.0406927 -0.0279831 + 3.09356 3.44468 2.33028 0.999765 -0.0170492 -0.0134014 + 3.09161 3.65564 2.60148 0.995939 0.0306326 0.0846603 + 3.07773 3.62876 2.73184 0.992443 0.0296511 0.119072 + 3.05017 2.98744 1.73523 0.989288 -0.0302723 -0.142806 + 3.07647 3.21742 2.04991 0.997946 -0.0121458 -0.0629032 + 3.08895 3.52185 2.21422 0.998469 0.000277825 -0.0553154 + 3.09588 3.72791 2.47051 0.997352 0.0638767 0.0347733 + 3.03994 3.10766 1.65941 0.985201 -0.00453093 -0.171341 + 3.06928 3.30294 1.94597 0.995333 0.0101293 -0.0959642 + 3.0787 3.58771 2.08074 0.995121 0.0150615 -0.0975044 + 3.09204 3.80515 2.29671 0.996835 0.0784467 -0.0128625 + 3.02043 3.20382 1.55945 0.976201 0.0156533 -0.2163 + 3.0531 3.37906 1.83273 0.990054 0.0351806 -0.136217 + 3.06252 3.66391 1.96755 0.990079 0.0307592 -0.137101 + 3.0818 3.8711 2.16328 0.993671 0.095148 -0.0597099 + 2.99258 3.29926 1.45715 0.970068 0.0238696 -0.241657 + 3.03359 3.47522 1.73278 0.984992 0.0476094 -0.165905 + 3.04323 3.74227 1.86023 0.98532 0.0411864 -0.165676 + 3.06565 3.93467 2.04759 0.990221 0.104877 -0.0919981 + 2.93487 3.01725 1.2846 0.941673 -0.0671375 -0.329764 + 2.96473 3.39302 1.35695 0.962349 0.0396591 -0.26891 + 3.01117 3.57084 1.63576 0.979717 0.056274 -0.192322 + 3.0208 3.83789 1.76322 0.981362 0.047918 -0.186099 + 3.04636 4.01302 1.94028 0.986886 0.115689 -0.112569 + 2.90994 3.12542 1.19425 0.939049 -0.0476501 -0.340464 + 2.92822 3.48207 1.25391 0.95939 0.0344006 -0.279978 + 2.98331 3.6646 1.53557 0.975552 0.055204 -0.212723 + 2.99674 3.92558 1.66294 0.97917 0.047794 -0.197338 + 3.02354 4.08959 1.83506 0.984495 0.117468 -0.130275 + 2.87343 3.21447 1.09121 0.935428 -0.0378803 -0.351482 + 2.89598 3.56679 1.14817 0.952969 0.0394309 -0.300492 + 2.95881 3.75803 1.43673 0.97358 0.0470454 -0.223447 + 2.97224 4.01901 1.5641 0.978491 0.0493955 -0.200288 + 2.99948 4.17727 1.73478 0.98259 0.121483 -0.140567 + 2.84357 3.31723 0.997228 0.93432 -0.0300914 -0.355161 + 2.85327 3.64454 1.03711 0.95085 0.0234604 -0.308761 + 2.92656 3.84275 1.33099 0.969922 0.0374312 -0.240523 + 2.9469 4.10375 1.46152 0.978436 0.0449607 -0.201595 + 2.9735 4.26459 1.63814 0.98167 0.126259 -0.142764 + 2.80086 3.39498 0.886163 0.924 -0.0217662 -0.381773 + 2.81888 3.72601 0.929804 0.939823 0.0219247 -0.340958 + 2.90137 3.92205 1.22085 0.969124 0.0179812 -0.245919 + 2.92172 4.18305 1.35138 0.978142 0.0438218 -0.203266 + 2.94816 4.34934 1.53556 0.98211 0.125763 -0.140157 + 2.86699 4.00351 1.11354 0.961796 0.0128639 -0.273463 + 2.89466 4.25686 1.24234 0.975437 0.0416533 -0.216304 + 2.92278 4.42895 1.43246 0.979885 0.13416 -0.147738 + 2.88307 4.67932 1.54261 0.961676 0.264774 -0.0712351 + 2.90846 4.59979 1.64576 0.967398 0.248919 -0.0467011 + 2.86733 4.33374 1.13038 0.971432 0.0498883 -0.232014 + 2.89572 4.50276 1.32343 0.975306 0.151458 -0.160747 + 2.85403 4.73817 1.43067 0.953931 0.281099 -0.104879 + 2.8077 4.92047 1.67653 0.931559 0.363585 0.0020652 + 2.82123 4.86942 1.79256 0.933956 0.355987 0.031622 + 2.8645 4.56131 1.20821 0.968644 0.165196 -0.185577 + 2.8228 4.79673 1.31545 0.937833 0.320255 -0.133815 + 2.77865 4.97932 1.56459 0.900078 0.42536 -0.0944897 + 2.66938 5.20707 1.70372 0.861152 0.50567 -0.0521084 + 2.68816 5.16972 1.81502 0.881064 0.469688 0.0558559 + 2.78712 4.84956 1.20634 0.927483 0.345742 -0.142255 + 2.73246 5.02505 1.45579 0.880609 0.457721 -0.122556 + 2.62319 5.25279 1.59493 0.8607 0.503054 -0.0783006 + 2.69677 5.07788 1.34668 0.906637 0.417358 -0.0618144 + 2.59562 5.29916 1.50761 0.888302 0.459158 -0.00966126 + 2.49325 5.47997 1.76125 0.828482 0.5588 0.0368802 + 2.50869 5.45074 1.83768 0.816103 0.575279 0.0550381 + 2.52747 5.41347 1.94903 0.818354 0.566771 0.0952226 + 2.66976 5.13291 1.25057 0.916567 0.396717 -0.0501943 + 2.5686 5.35419 1.4115 0.895084 0.445878 -0.00409296 + 2.45205 5.57126 1.60493 0.855363 0.510268 0.0893337 + 2.46568 5.52634 1.67394 0.855636 0.511427 0.0795583 + 2.53978 5.40978 1.32602 0.891634 0.452755 0.00138334 + 2.42323 5.62676 1.5194 0.820668 0.571308 0.0105456 + 2.22626 5.84969 1.68367 0.715355 0.696712 0.0534761 + 2.30465 5.76602 1.73179 0.768168 0.633483 0.0928311 + 2.31828 5.7211 1.80079 0.784566 0.580301 0.21842 + 2.38425 5.67106 1.43747 0.80256 0.596463 -0.0113856 + 2.18727 5.894 1.60173 0.707731 0.703387 0.0660502 + 1.92192 6.12256 1.69465 0.603293 0.792438 0.0898832 + 1.98527 6.0613 1.81496 0.630317 0.760334 0.156816 + 2.06366 5.97762 1.86309 0.680932 0.711282 0.174382 + 2.45255 5.55625 1.13032 0.834792 0.542952 -0.0912464 + 2.32895 5.74736 1.34111 0.796858 0.604132 0.0064982 + 2.19092 5.90505 1.48339 0.73271 0.676171 0.0769918 + 2.25966 5.83674 1.19491 0.771762 0.634502 -0.0423199 + 2.12164 5.99442 1.33719 0.699671 0.714289 0.0158527 + 1.92557 6.13361 1.57631 0.622918 0.775771 0.100762 + 1.58307 6.34482 1.72328 0.494798 0.857881 0.138622 + 1.65687 6.28328 1.83928 0.508842 0.848622 0.144637 + 2.37255 5.63181 0.907443 0.837481 0.532479 -0.12285 + 2.23624 5.85057 1.06815 0.775208 0.626154 -0.0835615 + 2.02499 6.07968 1.26831 0.651464 0.758672 -0.0033258 + 1.82892 6.21878 1.50738 0.580012 0.80809 0.102846 + 2.3171 5.68751 0.806972 0.804445 0.57095 -0.163963 + 2.24643 5.76772 0.768239 0.7804 0.604823 -0.158636 + 2.16557 5.93087 1.02946 0.734497 0.674131 -0.0778547 + 1.93897 6.14683 1.14961 0.635689 0.771607 -0.0228731 + 1.74926 6.28213 1.38726 0.565457 0.822407 0.0624813 + 2.18471 5.82591 0.672854 0.771632 0.615361 -0.160982 + 2.07956 5.99811 0.910802 0.711352 0.694328 -0.10903 + 1.84073 6.22417 1.02166 0.635503 0.771967 -0.0142103 + 2.09022 5.90723 0.568006 0.747037 0.642696 -0.169937 + 1.98507 6.07943 0.805954 0.701737 0.704546 -0.10574 + 1.70047 6.33976 0.889051 0.602793 0.797458 -0.026489 + 1.54913 6.43287 1.13137 0.529964 0.84682 0.0450993 + 1.65102 6.35946 1.25932 0.558933 0.827692 0.0501974 + 2.02026 5.96716 0.478801 0.746139 0.647236 -0.156082 + 1.84481 6.19502 0.673343 0.672512 0.731975 -0.109273 + 1.56641 6.42612 0.776263 0.551043 0.833121 -0.0475507 + 1.97917 5.98423 0.353645 0.753089 0.635215 -0.171343 + 1.80372 6.21208 0.548196 0.67623 0.724477 -0.133586 + 1.90528 6.04599 0.268878 0.707469 0.675386 -0.208185 + 1.8027 6.13603 0.252724 0.664243 0.717764 -0.208796 + 1.70115 6.30212 0.532041 0.628295 0.7681 -0.123566 + 1.97283 5.91634 0.133034 0.760599 0.589064 -0.272934 + 1.89152 5.97653 0.048988 0.722804 0.620963 -0.303247 + 1.71826 6.19427 0.17425 0.637824 0.737143 -0.223161 + 1.55972 6.38729 0.440731 0.576227 0.800299 -0.165785 + 1.42498 6.51129 0.684952 0.502546 0.863928 -0.0327935 + 1.84166 5.9073 -0.148702 0.700996 0.559618 -0.442078 + 1.80708 6.03477 -0.029486 0.691803 0.63848 -0.337271 + 1.71078 6.09582 -0.096035 0.640532 0.668867 -0.377274 + 1.61436 6.25035 0.099903 0.591625 0.767005 -0.248361 + 1.74535 5.96835 -0.215251 0.652593 0.582886 -0.484114 + 1.63947 6.03127 -0.271635 0.58603 0.608977 -0.534524 + 1.60914 6.16113 -0.145152 0.588265 0.696561 -0.410788 + 1.51273 6.31567 0.050778 0.556136 0.795907 -0.23926 + 1.66853 5.92133 -0.356413 0.58496 0.548362 -0.597596 + 1.53006 6.08995 -0.313864 0.51805 0.632289 -0.576052 + 1.49973 6.2198 -0.187381 0.504857 0.729962 -0.460733 + 1.44807 6.32948 -0.029744 0.486299 0.810333 -0.326916 + 1.34707 6.48501 0.323472 0.434776 0.870944 -0.228966 + 1.5802 5.88425 -0.457982 0.508504 0.520305 -0.68608 + 1.55406 5.9805 -0.404688 0.507557 0.564844 -0.650643 + 1.41123 6.15387 -0.342177 0.429292 0.666181 -0.609845 + 1.38259 6.26348 -0.226426 0.412512 0.760641 -0.501257 + 1.33093 6.37315 -0.068788 0.368896 0.852819 -0.369614 + 1.5864 5.73574 -0.567952 0.526086 0.518095 -0.674397 + 1.4557 5.94005 -0.496631 0.427738 0.539782 -0.725035 + 1.43523 6.04441 -0.432993 0.433227 0.584038 -0.68645 + 1.28798 6.19373 -0.374023 0.358962 0.692118 -0.626194 + 1.25934 6.30343 -0.25822 0.30526 0.801726 -0.513861 + 1.44985 5.60658 -0.768845 0.48268 0.545301 -0.685323 + 1.4619 5.79162 -0.606549 0.449183 0.561326 -0.695088 + 1.33366 5.99449 -0.521319 0.373692 0.559552 -0.739768 + 1.31319 6.09876 -0.457732 0.368104 0.608093 -0.703365 + 1.15742 6.23121 -0.400348 0.255656 0.726888 -0.637395 + 1.44808 5.44719 -0.897173 0.510311 0.543693 -0.666319 + 1.32284 5.6734 -0.794788 0.426016 0.582979 -0.691842 + 1.33489 5.85845 -0.632493 0.40463 0.588736 -0.69976 + 1.20237 6.05825 -0.532572 0.295362 0.578077 -0.76065 + 1.18264 6.13625 -0.484056 0.282958 0.621704 -0.730355 + 1.33258 5.38391 -1.03137 0.458855 0.520082 -0.720393 + 1.32162 5.51597 -0.931708 0.454826 0.579427 -0.676312 + 1.19309 5.74158 -0.811476 0.347673 0.616529 -0.70641 + 1.2036 5.92221 -0.643737 0.325352 0.619168 -0.714687 + 1.06634 6.09804 -0.546688 0.240416 0.595091 -0.766855 + 1.50598 5.18236 -1.06228 0.482678 0.493962 -0.723204 + 1.30942 5.2666 -1.11779 0.390946 0.457269 -0.798791 + 1.20078 5.45425 -1.0632 0.395662 0.555692 -0.731203 + 1.19188 5.58415 -0.948395 0.375159 0.62079 -0.688386 + 1.05597 5.78718 -0.829051 0.263708 0.649597 -0.713079 + 1.33486 5.16617 -1.16584 0.341677 0.42085 -0.840323 + 1.06543 5.24125 -1.21968 0.299315 0.33008 -0.895242 + 1.55249 4.99254 -1.1583 0.409704 0.457924 -0.788954 + 1.31379 5.08385 -1.20386 0.294403 0.368036 -0.881973 + 1.52869 4.93441 -1.19322 0.316268 0.411183 -0.854929 + 1.28999 5.02564 -1.23883 0.238531 0.295858 -0.924971 + 1.06721 5.0593 -1.27034 0.184419 0.161831 -0.969433 + 1.69867 4.78061 -1.20703 0.265382 0.21928 -0.938876 + 1.49433 4.89358 -1.22729 0.236548 0.256727 -0.937089 + 1.29489 4.96095 -1.25018 0.15758 0.131234 -0.978747 + 1.07212 4.99461 -1.28169 0.150994 0.0642519 -0.986444 + 0.934992 4.94724 -1.30044 0.196123 -0.414098 -0.888852 + 1.6663 4.75043 -1.21235 -0.170863 -0.462853 -0.869812 + 1.47527 4.84858 -1.23336 -0.100133 -0.47664 -0.873377 + 1.27583 4.91587 -1.2563 0.0200935 -0.42907 -0.903048 + 1.08456 4.94607 -1.27621 0.0707411 -0.499102 -0.863651 + 1.82612 4.63246 -1.18482 -0.216228 -0.421606 -0.880621 + 1.81028 4.61436 -1.13367 -0.650008 -0.734426 -0.195213 + 1.65664 4.72463 -1.14746 -0.476344 -0.858849 -0.188348 + 1.46561 4.82287 -1.16843 -0.336567 -0.898871 -0.280631 + 1.26974 4.87952 -1.20094 -0.13413 -0.919311 -0.369967 + 1.92484 4.48456 -1.11024 -0.763068 -0.584121 -0.276639 + 1.91864 4.47097 -1.01092 -0.775277 -0.486853 -0.402392 + 1.83478 4.60951 -0.994476 -0.702383 -0.626311 -0.33822 + 1.68114 4.71987 -1.00823 -0.422589 -0.841157 -0.337451 + 1.43923 4.81291 -1.04616 -0.247781 -0.878049 -0.409433 + 1.98546 4.35791 -1.00529 -0.839535 -0.27239 -0.47009 + 1.74769 4.29554 -0.775666 -0.677963 -0.0829774 -0.730397 + 1.66383 4.43409 -0.759232 -0.502433 -0.411924 -0.760183 + 1.5848 4.54907 -0.799193 -0.260257 -0.614766 -0.744533 + 1.73801 4.16008 -0.797641 -0.689331 0.0912442 -0.718677 + 1.34224 3.96063 -0.422972 -0.709361 0.178332 -0.681912 + 1.31292 4.05995 -0.369198 -0.558391 -0.196083 -0.806071 + 1.2339 4.17485 -0.409218 0.3591 -0.757839 -0.544726 + 1.33256 3.82517 -0.444947 -0.67465 0.424733 -0.603696 + 1.06559 3.68669 -0.279894 -0.326294 0.597408 -0.732555 + 1.12487 3.77227 -0.232133 -0.468155 0.519229 -0.715005 + 1.09555 3.87159 -0.178358 0.221535 -0.200561 -0.954305 + 1.19592 4.12414 -0.451392 0.413237 -0.697956 -0.584887 + 1.25245 3.70489 -0.517631 -0.625407 0.508854 -0.591552 + 0.985481 3.56642 -0.352577 -0.308117 0.7636 -0.567432 + 0.871163 3.69651 -0.286106 0.0719273 0.458941 -0.88555 + 0.839349 3.77385 -0.251464 0.581297 0.242737 -0.776642 + 1.03377 3.76403 -0.245252 0.077416 0.391376 -0.916969 + 1.26446 3.5853 -0.576089 -0.561306 0.338549 -0.755195 + 0.928646 3.53155 -0.376982 -0.109366 0.598536 -0.793595 + 0.814329 3.66164 -0.310509 0.671868 0.357362 -0.648758 + 1.32136 3.47721 -0.677476 -0.535059 0.421699 -0.732039 + 1.043 3.33197 -0.54971 -0.121252 0.782648 -0.610541 + 0.986104 3.43997 -0.448364 -0.223074 0.575776 -0.786587 + 0.852539 3.53944 -0.380047 0.588592 0.61112 -0.529237 + 0.821278 3.60439 -0.345361 0.684352 0.512137 -0.519016 + 1.34655 3.34276 -0.768394 -0.471292 0.649683 -0.596487 + 1.09483 3.2719 -0.671261 -0.0538216 0.923937 -0.378739 + 0.955696 3.37117 -0.540198 0.572719 0.758127 -0.311829 + 0.909997 3.44794 -0.45138 0.516243 0.725989 -0.454348 + 1.41999 3.30677 -0.932065 -0.388224 0.859462 -0.332575 + 1.16827 3.23591 -0.834932 0.0315517 0.992507 -0.118042 + 1.03005 3.29611 -0.776992 0.506809 0.861345 0.0350618 + 1.00753 3.3111 -0.661758 0.56267 0.817539 -0.122609 + 0.806855 3.56984 -0.807711 0.884405 0.447961 -0.130988 + 1.41563 3.25271 -1.08502 -0.202463 0.977719 -0.0554406 + 1.21245 3.24989 -1.03014 0.280125 0.94657 0.159798 + 1.1716 3.24768 -0.926706 0.409472 0.893231 0.185664 + 1.43534 3.28172 -1.26487 -0.116243 0.985672 0.122221 + 1.23216 3.2789 -1.20999 0.297731 0.940707 0.162561 + 1.12365 3.35118 -1.21599 0.509116 0.847316 0.151184 + 1.09283 3.34785 -1.08122 0.513307 0.839191 0.179651 + 1.05197 3.34555 -0.977836 0.392107 0.86885 0.302245 + 1.39002 3.28857 -1.38413 0.00897914 0.980383 0.196899 + 1.23927 3.29413 -1.31657 0.313813 0.929036 0.195992 + 1.13075 3.36642 -1.32257 0.512054 0.844147 0.158798 + 1.11887 3.39705 -1.45464 0.421399 0.900394 0.108227 + 1.01918 3.43216 -1.38745 0.430606 0.896281 0.106105 + 1.34359 3.3214 -1.449 0.135 0.962923 0.23357 + 1.19284 3.32696 -1.38142 0.532203 0.813873 0.233175 + 1.15402 3.36187 -1.3727 0.528251 0.826333 0.195258 + 1.14214 3.39251 -1.50476 0.273871 0.956796 0.0976515 + 1.27698 3.33323 -1.50369 0.379779 0.881281 0.281268 + 1.23816 3.36814 -1.49496 0.46431 0.833696 0.298943 + 1.25705 3.37972 -1.68482 0.218195 0.955603 0.198023 + 1.09957 3.413 -1.67886 0.317427 0.929034 0.190097 + 0.999874 3.44811 -1.61167 0.465706 0.87811 0.109729 + 0.969968 3.5092 -1.77767 0.467253 0.778559 0.418951 + 0.863759 3.53291 -1.58534 0.517353 0.841872 0.153613 + 0.988359 3.42883 -1.25268 0.455706 0.881631 0.122713 + 0.925856 3.45071 -1.17737 0.318525 0.916563 0.241773 + 0.833852 3.59399 -1.75135 0.563096 0.732523 0.382535 + 0.801256 3.55478 -1.51003 0.523123 0.840922 0.138537 + 0.907259 3.41294 -1.06835 0.42178 0.880007 0.218378 + 1.03338 3.30779 -0.868825 0.457277 0.866899 0.198452 + 0.858799 3.44275 -0.997782 0.646696 0.760813 0.0542887 + 0.836276 3.45774 -0.882547 0.788437 0.598745 -0.140963 + 0.67774 3.63249 -1.42123 0.699861 0.710048 0.0776311 + 0.569798 3.83247 -1.3092 0.943311 0.192645 -0.270283 + 0.6201 4.04521 -1.17587 0.959146 0.0731005 -0.273306 + 0.761156 3.64662 -0.718893 0.934319 0.346447 -0.0838027 + 0.76866 3.74322 -0.619611 0.962712 0.260601 -0.0726095 + 0.7374 3.80817 -0.584916 0.970592 0.234355 -0.0550305 + 0.74215 3.87974 -0.541678 0.983727 0.1076 -0.14389 + 0.627604 4.1418 -1.07658 0.97003 0.0535131 -0.237019 + 0.654169 4.28647 -0.963151 0.96326 -0.0876276 -0.253871 + 0.68488 4.37231 -0.931225 0.921715 -0.217365 -0.321239 + 0.735201 3.93699 -0.506827 0.969757 -0.00188808 -0.244065 + 0.713711 4.4393 -0.891461 0.794623 -0.407201 -0.450291 + 0.764032 4.00398 -0.467072 0.945572 -0.0942645 -0.311459 + 0.848985 3.8722 -0.214011 0.62404 0.269643 -0.733394 + 0.966475 3.81264 -0.233652 -0.0997424 0.132629 -0.986134 + 0.787411 4.51721 -0.888613 0.721344 -0.515995 -0.461965 + 0.773668 4.10225 -0.429669 0.910142 -0.222538 -0.349453 + 0.826991 4.17847 -0.409485 0.842975 -0.380263 -0.380516 + 0.840212 3.94172 -0.18242 0.774758 0.225008 -0.590865 + 0.858422 4.81498 -1.15075 0.5173 -0.722629 -0.458485 + 0.840733 4.59343 -0.868419 0.647954 -0.597957 -0.471808 + 0.928875 4.63847 -0.852437 0.262761 -0.750193 -0.606768 + 0.867609 4.24338 -0.363923 0.541322 -0.633498 -0.552856 + 0.88083 4.00672 -0.136817 0.0900021 -0.220771 -0.971164 + 0.944245 4.89859 -1.23938 0.249841 -0.820847 -0.513605 + 0.946564 4.86002 -1.13477 0.301342 -0.837809 -0.455269 + 1.07847 4.90973 -1.22087 0.0153075 -0.887378 -0.460789 + 1.08079 4.87115 -1.11625 0.0744267 -0.883695 -0.462108 + 1.02178 4.6337 -0.842966 0.0797526 -0.770377 -0.632581 + 0.960515 4.23869 -0.354402 -0.424609 -0.562054 -0.70979 + 0.957702 3.88216 -0.202061 -0.572487 0.197845 -0.795686 + 1.24336 4.86956 -1.07869 -0.0533823 -0.917012 -0.39527 + 1.18436 4.63201 -0.805442 -0.0252765 -0.704625 -0.709129 + 1.03739 4.11413 -0.419655 -0.530826 -0.3916 -0.751581 + 1.34289 4.64202 -0.837188 -0.117168 -0.675489 -0.728002 + 1.05757 3.82089 -0.220541 0.354544 -0.0249305 -0.934707 + 1.06648 5.96789 -0.661263 0.264126 0.64191 -0.719853 + 0.927575 6.13356 -0.558203 0.151563 0.652038 -0.742883 + 1.04661 6.17613 -0.498132 0.213248 0.662049 -0.718482 + 0.90974 6.19394 -0.504984 0.116691 0.707369 -0.697146 + 0.888864 6.26743 -0.428478 0.102982 0.770998 -0.628456 + 1.02573 6.2497 -0.421567 0.176562 0.757605 -0.628379 + 1.1318 6.31711 -0.291521 0.210692 0.832102 -0.513045 + 0.752642 6.27348 -0.439145 0.0631153 0.78146 -0.620755 + 0.868635 6.33987 -0.329947 0.0882681 0.840034 -0.535306 + 1.0001 6.33551 -0.31279 0.155417 0.835658 -0.526803 + 1.09517 6.43098 -0.085945 0.210194 0.883545 -0.418528 + 1.22271 6.41721 -0.052703 0.262854 0.886367 -0.38113 + 0.732413 6.34592 -0.340615 0.0707171 0.829502 -0.554008 + 0.837548 6.44609 -0.14733 0.113305 0.866333 -0.486445 + 0.969017 6.44173 -0.130172 0.16837 0.877295 -0.44945 + 1.05477 6.5639 0.200029 0.253569 0.915079 -0.313582 + 0.600179 6.34797 -0.350374 0.0550388 0.81839 -0.572021 + 0.579928 6.44836 -0.194862 0.0769101 0.841008 -0.535528 + 0.712162 6.44622 -0.185152 0.109193 0.852182 -0.511725 + 0.798436 6.5756 0.080752 0.172963 0.899828 -0.400491 + 0.928617 6.57474 0.155851 0.206806 0.911084 -0.356591 + 0.464092 6.45655 -0.206243 0.100041 0.828402 -0.551127 + 0.567921 6.58042 0.016008 0.118704 0.882083 -0.455894 + 0.67305 6.57573 0.04293 0.142592 0.887274 -0.438649 + 0.631543 6.67633 0.252485 0.164598 0.929064 -0.331281 + 0.707501 6.68331 0.327598 0.187633 0.937397 -0.293395 + 0.333038 6.47527 -0.196465 0.0718994 0.823045 -0.563407 + 0.359552 6.60168 -0.006219 0.124456 0.874143 -0.469451 + 0.452085 6.58861 0.004627 0.140861 0.880194 -0.453229 + 0.401713 6.71159 0.279412 0.123813 0.93763 -0.324839 + 0.526414 6.68102 0.225571 0.0944628 0.924418 -0.369496 + 0.204636 6.49173 -0.188379 0.0542598 0.823742 -0.564363 + 0.23115 6.61823 0.001916 0.0653113 0.872478 -0.484269 + 0.309179 6.72467 0.268558 0.13867 0.941593 -0.306878 + 0.072926 6.62302 0.00042 0.0159541 0.86912 -0.494343 + 0.052708 6.71495 0.189992 0.0152879 0.93025 -0.366607 + 0.210932 6.71016 0.191489 0.0954653 0.924458 -0.36914 + 0.150956 6.82104 0.562248 0.0391639 0.980834 -0.190868 + -0.072927 6.49919 -0.186687 -0.0199643 0.827386 -0.561278 + -0.072927 6.62302 0.00042 -0.0167477 0.868659 -0.495128 + -0.052709 6.71495 0.190001 -0.0153295 0.930253 -0.366599 + 0.052708 6.80653 0.485178 0.0184563 0.973096 -0.22966 + -0.204636 6.49173 -0.188379 -0.0533229 0.824431 -0.563445 + -0.23115 6.61823 0.001916 -0.0645307 0.872168 -0.484933 + -0.210932 6.71016 0.191489 -0.0954467 0.924459 -0.369142 + -0.052709 6.80653 0.485178 -0.0178497 0.972492 -0.232251 + 0.100983 6.86309 0.880213 0.0293859 0.99735 -0.0665491 + -0.333038 6.47527 -0.196465 -0.0791032 0.826543 -0.557288 + -0.359552 6.60168 -0.006219 -0.133421 0.867632 -0.478971 + -0.309181 6.72467 0.268558 -0.130659 0.937209 -0.323369 + -0.150957 6.82104 0.562248 -0.0420738 0.980531 -0.191803 + -0.464092 6.45655 -0.206243 -0.0954008 0.832238 -0.546148 + -0.452085 6.58861 0.004627 -0.133058 0.876516 -0.462617 + -0.401714 6.71159 0.279412 -0.13257 0.933801 -0.332326 + -0.371308 6.80834 0.581647 -0.118317 0.974849 -0.188863 + -0.579927 6.44836 -0.194862 -0.0836925 0.845523 -0.52734 + -0.56792 6.58042 0.016008 -0.130094 0.875833 -0.464749 + -0.526414 6.68102 0.225571 -0.0944586 0.924423 -0.369486 + -0.71216 6.44622 -0.185152 -0.101872 0.856561 -0.505891 + -0.673048 6.57573 0.04293 -0.136295 0.883186 -0.448782 + -0.631543 6.67633 0.252485 -0.164593 0.929057 -0.331303 + -0.496008 6.77776 0.527814 -0.133023 0.963023 -0.234291 + -0.732411 6.34592 -0.340623 -0.073803 0.831437 -0.550696 + -0.837548 6.44609 -0.14733 -0.123621 0.873256 -0.471318 + -0.798436 6.5756 0.080752 -0.192901 0.890874 -0.411257 + -0.707503 6.68331 0.327598 -0.190056 0.940027 -0.283246 + -0.888862 6.26743 -0.428478 -0.107564 0.77391 -0.624094 + -0.868633 6.33987 -0.329947 -0.0923583 0.838026 -0.537756 + -0.969017 6.44173 -0.130172 -0.155915 0.884453 -0.439811 + -0.928617 6.57474 0.155851 -0.202306 0.908179 -0.366448 + -0.837684 6.68236 0.402646 -0.217927 0.946081 -0.239662 + -1.02573 6.2497 -0.421567 -0.173619 0.759717 -0.626647 + -1.0001 6.33551 -0.31279 -0.151888 0.833586 -0.531097 + -1.09517 6.43098 -0.085945 -0.216241 0.88683 -0.408377 + -1.05477 6.5639 0.200029 -0.266321 0.908536 -0.321926 + -1.04659 6.17613 -0.498132 -0.193025 0.649367 -0.73557 + -1.18263 6.13625 -0.484056 -0.284942 0.620036 -0.731002 + -1.15742 6.23121 -0.400348 -0.268276 0.734648 -0.623153 + -1.13179 6.31711 -0.291521 -0.223336 0.824761 -0.51951 + -1.20237 6.05825 -0.532572 -0.30057 0.580825 -0.756505 + -1.33366 5.99449 -0.521319 -0.372503 0.560866 -0.739372 + -1.31319 6.09876 -0.457732 -0.365083 0.606388 -0.706405 + -1.28798 6.19373 -0.374023 -0.35047 0.69982 -0.622433 + -1.3349 5.85845 -0.632493 -0.398867 0.586366 -0.705039 + -1.4619 5.79162 -0.606549 -0.454494 0.552984 -0.698315 + -1.4557 5.94013 -0.49658 -0.428492 0.540229 -0.724257 + -1.43523 6.04441 -0.432993 -0.433556 0.583714 -0.686518 + -1.32284 5.6734 -0.794788 -0.423715 0.586801 -0.690022 + -1.44985 5.60658 -0.768845 -0.491605 0.549145 -0.675844 + -1.56957 5.53004 -0.731271 -0.551994 0.509857 -0.65981 + -1.5864 5.73574 -0.567952 -0.518539 0.514297 -0.683093 + -1.5802 5.88425 -0.457982 -0.508224 0.520687 -0.685998 + -1.32162 5.51598 -0.931716 -0.442257 0.574315 -0.688891 + -1.44808 5.44719 -0.897173 -0.509501 0.544854 -0.66599 + -1.5678 5.37064 -0.85959 -0.566267 0.52526 -0.635172 + -1.68818 5.29708 -0.806381 -0.613928 0.504444 -0.607148 + -1.68559 5.46478 -0.67924 -0.604512 0.47579 -0.638897 + -1.45903 5.31513 -0.996836 -0.504378 0.530727 -0.681125 + -1.58714 5.25355 -0.942585 -0.560605 0.527016 -0.63873 + -1.70753 5.17999 -0.889376 -0.613308 0.524746 -0.590335 + -1.77214 5.03741 -0.950809 -0.608362 0.528894 -0.591748 + -1.82292 5.09917 -0.833386 -0.666087 0.512101 -0.542293 + -1.79847 5.22373 -0.746933 -0.662188 0.48557 -0.570727 + -1.79588 5.39142 -0.619783 -0.661573 0.447363 -0.60182 + -1.70243 5.67048 -0.51592 -0.602907 0.471024 -0.643925 + -1.9316 5.02276 -0.765438 -0.71001 0.474878 -0.519977 + -1.90715 5.14732 -0.678985 -0.697412 0.46766 -0.543057 + -1.897 5.32413 -0.550839 -0.695725 0.430373 -0.575105 + -1.81169 5.61589 -0.444181 -0.66235 0.439633 -0.606642 + -2.01005 5.09055 -0.593649 -0.77042 0.412825 -0.485828 + -1.9999 5.26727 -0.465553 -0.74792 0.400571 -0.5293 + -1.91281 5.54861 -0.375237 -0.722968 0.411762 -0.55477 + -1.80395 5.77041 -0.338008 -0.665327 0.462519 -0.586017 + -1.69468 5.825 -0.409757 -0.593959 0.491624 -0.636804 + -2.10918 4.84592 -0.621343 -0.935996 0.261187 -0.235995 + -2.08717 5.00564 -0.514393 -0.83689 0.320051 -0.444053 + -2.08995 5.19612 -0.382712 -0.789898 0.359498 -0.496813 + -2.00236 5.46004 -0.309838 -0.767669 0.393788 -0.505585 + -2.09241 5.38889 -0.226996 -0.791638 0.381233 -0.477464 + -1.99624 5.61467 -0.200263 -0.772364 0.398713 -0.494451 + -1.90669 5.70315 -0.265712 -0.73627 0.439559 -0.514484 + -1.77442 5.8584 -0.300021 -0.655078 0.517386 -0.550623 + -1.66854 5.92133 -0.356405 -0.586813 0.546258 -0.597705 + -2.17516 5.30753 -0.147275 -0.830692 0.350951 -0.432186 + -2.1625 5.46109 -0.042254 -0.824536 0.377936 -0.421075 + -2.07975 5.54245 -0.121966 -0.798066 0.386985 -0.46188 + -1.96919 5.7342 -0.145894 -0.758833 0.460048 -0.461008 + -1.87717 5.79115 -0.227725 -0.713284 0.493917 -0.497263 + -2.12768 5.59788 0.023222 -0.824996 0.432441 -0.363835 + -2.0527 5.66198 -0.067605 -0.801166 0.435727 -0.410213 + -1.93369 5.85036 -0.06688 -0.745557 0.539725 -0.390949 + -1.84166 5.9073 -0.148702 -0.698959 0.558146 -0.447135 + -1.74535 5.96835 -0.215251 -0.652918 0.58248 -0.484164 + -2.08997 5.72607 0.107994 -0.810185 0.493532 -0.316268 + -2.01499 5.79017 0.017166 -0.787434 0.512829 -0.341986 + -1.89153 5.97644 0.048937 -0.724223 0.622166 -0.297339 + -1.80708 6.03468 -0.029536 -0.688262 0.642608 -0.336677 + -1.71078 6.09573 -0.096085 -0.641011 0.668949 -0.376313 + -2.16364 5.6606 0.195989 -0.818788 0.483639 -0.309321 + -2.04672 5.85449 0.217752 -0.783916 0.569111 -0.248171 + -1.97283 5.91634 0.133034 -0.761952 0.587214 -0.273145 + -1.90528 6.04599 0.268878 -0.707426 0.675412 -0.208248 + -1.8027 6.13603 0.252724 -0.67177 0.709909 -0.211552 + -2.1204 5.78911 0.305796 -0.790494 0.56386 -0.239125 + -2.02026 5.96716 0.478801 -0.746 0.645657 -0.163129 + -1.97917 5.98423 0.353645 -0.753105 0.635206 -0.171304 + -1.80372 6.21208 0.548196 -0.676236 0.724473 -0.133579 + -1.70115 6.30212 0.532041 -0.629631 0.768257 -0.115527 + -2.19036 5.72927 0.395052 -0.79939 0.552234 -0.236671 + -2.09022 5.90723 0.568006 -0.751131 0.63769 -0.170745 + -1.98507 6.07943 0.805954 -0.702069 0.704841 -0.101476 + -1.84481 6.19502 0.673343 -0.670561 0.733792 -0.109075 + -2.1847 5.826 0.672904 -0.771011 0.614444 -0.16733 + -2.07955 5.99811 0.910802 -0.706213 0.699721 -0.107953 + -1.84073 6.22417 1.02166 -0.639991 0.768235 -0.0150445 + -1.70047 6.33976 0.889043 -0.602231 0.797612 -0.033674 + -1.56641 6.42612 0.776263 -0.561146 0.826161 -0.0507359 + -1.93897 6.14683 1.14961 -0.635619 0.771678 -0.0224062 + -1.65102 6.35946 1.25932 -0.558442 0.827507 0.0581008 + -1.54913 6.43287 1.13137 -0.521506 0.851986 0.046378 + -1.41507 6.51924 1.01858 -0.460664 0.886927 0.0338941 + -1.74926 6.28213 1.38726 -0.565921 0.822091 0.0624477 + -1.47639 6.44575 1.47206 -0.491568 0.861513 0.127104 + -1.3745 6.51916 1.34411 -0.444877 0.89258 0.0733865 + -1.242 6.58068 1.29897 -0.383659 0.9206 0.0728071 + -1.50341 6.40817 1.60316 -0.481719 0.864848 0.141369 + -1.17018 6.56106 1.67595 -0.397218 0.90393 0.158521 + -1.03768 6.62266 1.63085 -0.354024 0.923295 0.148973 + -1.10299 6.64171 1.17946 -0.347552 0.936491 0.0468164 + -1.27606 6.58026 0.899078 -0.393067 0.919313 0.0190205 + -1.29037 6.45835 1.91044 -0.412719 0.888633 0.199984 + -1.19721 6.52356 1.8071 -0.395055 0.898605 0.190893 + -1.36416 6.39673 2.02638 -0.416889 0.884742 0.208411 + -1.08876 6.45985 2.22505 -0.335848 0.902488 0.269669 + -1.02113 6.51363 2.13009 -0.33801 0.902417 0.267195 + -0.92797 6.57875 2.02669 -0.320919 0.915024 0.244421 + -1.14603 6.40479 2.34221 -0.327107 0.898789 0.291853 + -0.883885 6.41497 2.54317 -0.28579 0.882641 0.373188 + -0.827271 6.46639 2.46352 -0.283355 0.895909 0.342136 + -0.759644 6.52008 2.36851 -0.26753 0.911118 0.313516 + -1.22438 6.35483 2.39954 -0.382324 0.863093 0.329997 + -0.962239 6.36502 2.60049 -0.303404 0.866472 0.39645 + -0.674401 6.34161 2.83165 -0.241724 0.854591 0.459613 + -0.644018 6.42086 2.69499 -0.238509 0.871949 0.427572 + -0.587404 6.47226 2.61534 -0.212713 0.888983 0.405539 + -0.93967 6.31905 2.71111 -0.301833 0.847859 0.435926 + -0.714553 6.27018 2.93436 -0.255892 0.844764 0.469992 + -0.488797 6.21125 3.14743 -0.201175 0.856603 0.475143 + -0.45681 6.34753 2.91038 -0.181123 0.86623 0.465661 + -0.426427 6.4267 2.77367 -0.152582 0.884218 0.441449 + -0.78341 6.18987 3.04706 -0.264561 0.846344 0.462287 + -0.557654 6.13094 3.26013 -0.212371 0.845696 0.489589 + -0.327175 6.15706 3.3087 -0.176016 0.856413 0.48536 + -0.295187 6.29334 3.07165 -0.148549 0.870543 0.469135 + -0.271816 6.35498 2.96229 -0.108517 0.88473 0.453296 + -0.997952 6.13756 2.99886 -0.32085 0.828644 0.458699 + -0.788677 6.06704 3.26661 -0.267711 0.830227 0.488931 + -0.756484 5.99632 3.3973 -0.253489 0.812226 0.525387 + -0.525461 6.06022 3.39082 -0.211965 0.830137 0.515696 + -1.00322 6.01473 3.21841 -0.328164 0.816944 0.474247 + -1.00086 5.90592 3.40228 -0.320699 0.794349 0.515908 + -0.741024 5.91316 3.52434 -0.254345 0.801365 0.541408 + -0.549237 5.97989 3.50496 -0.219053 0.815843 0.535179 + -0.985395 5.82275 3.52933 -0.304387 0.788377 0.534612 + -0.729783 5.82241 3.66751 -0.259229 0.808148 0.528863 + -0.537996 5.88923 3.64818 -0.224039 0.816147 0.532644 + -0.369525 6.00461 3.53995 -0.213401 0.819164 0.532381 + -0.345749 6.08485 3.42576 -0.197699 0.837667 0.509146 + -0.962693 5.72918 3.6804 -0.300143 0.794599 0.527756 + -0.706855 5.73509 3.81456 -0.254 0.803469 0.538443 + -0.530927 5.7715 3.8319 -0.219422 0.80903 0.545275 + -0.368029 5.82088 3.82297 -0.202632 0.809693 0.55076 + -0.375098 5.93861 3.63925 -0.214364 0.818796 0.532561 + -0.939765 5.64185 3.82745 -0.309069 0.776639 0.548916 + -0.693585 5.62984 3.97047 -0.250957 0.781071 0.571794 + -0.517658 5.66625 3.9878 -0.202269 0.780697 0.591269 + -0.355791 5.75569 3.91968 -0.174539 0.789348 0.588614 + -0.148623 5.95613 3.70132 -0.0584016 0.8319 0.551844 + -1.12536 5.39736 4.04032 -0.370535 0.719613 0.587249 + -0.887986 5.53922 3.99263 -0.311417 0.757896 0.573248 + -0.661059 5.50964 4.14565 -0.229294 0.759663 0.608553 + -0.488028 5.58849 4.09428 -0.174387 0.769752 0.614061 + -0.326162 5.67794 4.02615 -0.137856 0.770393 0.622487 + -1.08361 5.29444 4.18419 -0.366161 0.688324 0.626208 + -0.85546 5.41902 4.1678 -0.306028 0.728614 0.612754 + -0.593196 5.41042 4.28431 -0.20229 0.732127 0.650438 + -0.420165 5.48927 4.23294 -0.137508 0.754184 0.642104 + -1.02628 5.18841 4.32803 -0.349541 0.649715 0.675049 + -0.798127 5.31308 4.3117 -0.287399 0.691733 0.662501 + -0.503428 5.31304 4.41678 -0.177091 0.717075 0.674124 + -0.331182 5.372 4.38366 -0.103171 0.737736 0.66716 + -1.31486 5.02819 4.31615 -0.401351 0.614235 0.679435 + -0.960334 5.09124 4.44514 -0.334607 0.611648 0.716886 + -0.708359 5.21562 4.44412 -0.272532 0.659536 0.700527 + -0.460431 5.21435 4.5285 -0.165665 0.669186 0.724392 + -1.62324 4.86473 4.26848 -0.454643 0.594602 0.663135 + -1.24892 4.93102 4.43325 -0.382474 0.594292 0.707482 + -0.884017 5.00403 4.55201 -0.317914 0.619029 0.718146 + -0.632041 5.1284 4.55099 -0.254888 0.612736 0.748055 + -1.58155 4.72317 4.41606 -0.445776 0.563813 0.695269 + -1.52887 4.62331 4.52863 -0.448044 0.536642 0.715033 + -1.19624 4.83116 4.54582 -0.379405 0.602297 0.702346 + -0.8515 4.94003 4.62545 -0.291084 0.617352 0.730853 + -0.547303 5.02682 4.65352 -0.217263 0.593083 0.775274 + -1.85277 4.55415 4.36261 -0.511905 0.519943 0.683821 + -1.83964 4.42295 4.46545 -0.501523 0.469936 0.726385 + -1.74296 4.39244 4.5459 -0.48589 0.463178 0.7412 + -1.42798 4.54238 4.6458 -0.410508 0.495965 0.765181 + -1.16372 4.76716 4.61927 -0.363869 0.564561 0.740857 + -2.06263 4.2746 4.3916 -0.617155 0.406621 0.673631 + -1.98966 4.14767 4.51646 -0.567099 0.345091 0.747871 + -1.89297 4.11716 4.5969 -0.521703 0.329784 0.786809 + -1.64207 4.31151 4.66307 -0.458005 0.413415 0.786969 + -2.20914 4.07508 4.35018 -0.653686 0.320396 0.685596 + -2.13616 3.94806 4.47499 -0.638437 0.253364 0.726777 + -2.06758 3.85189 4.55996 -0.605943 0.209711 0.767368 + -1.82588 4.03272 4.66956 -0.51226 0.286029 0.8098 + -2.29894 4.09032 4.25959 -0.663449 0.320368 0.676166 + -2.38769 3.77091 4.29422 -0.691036 0.143444 0.708444 + -2.31605 3.69854 4.37297 -0.697383 0.0957499 0.710273 + -2.24747 3.60237 4.45794 -0.691897 0.0453037 0.720574 + -2.00049 3.76746 4.63261 -0.57921 0.171054 0.79703 + -2.47749 3.78615 4.20362 -0.721096 0.139234 0.678701 + -2.52876 3.47356 4.15646 -0.763446 -0.0618433 0.642904 + -2.45712 3.40119 4.2352 -0.735795 -0.0829159 0.672109 + -2.38262 3.31487 4.29711 -0.716712 -0.133858 0.684402 + -2.16285 3.53564 4.53012 -0.654839 0.000774119 0.755768 + -2.58947 3.5633 4.09222 -0.794708 -0.0122773 0.606867 + -2.61945 3.19332 3.97685 -0.796538 -0.174258 0.578931 + -2.55453 3.08603 4.02568 -0.7719 -0.206428 0.601298 + -2.48002 2.99971 4.08758 -0.742247 -0.229747 0.629512 + -2.65484 2.87294 3.79956 -0.831109 -0.243685 0.499875 + -2.58992 2.76565 3.84838 -0.799379 -0.259682 0.54181 + -2.51848 2.65663 3.89642 -0.768489 -0.278629 0.576013 + -2.40224 2.90154 4.13742 -0.725062 -0.247261 0.642765 + -2.298 3.24814 4.36929 -0.698267 -0.155859 0.698664 + -2.49612 2.30505 3.73457 -0.793725 -0.327676 0.512474 + -2.41321 2.20392 3.79012 -0.761936 -0.340561 0.550883 + -2.4407 2.55846 3.94625 -0.741223 -0.292733 0.604065 + -2.35401 2.47291 4.00843 -0.724726 -0.300728 0.619947 + -2.32092 2.82189 4.19837 -0.715456 -0.255906 0.650104 + -2.45458 1.99083 3.57362 -0.813558 -0.380307 0.439875 + -2.37167 1.88962 3.62912 -0.787821 -0.392009 0.475043 + -2.28419 1.81926 3.71338 -0.75858 -0.395006 0.518196 + -2.32652 2.11846 3.85235 -0.737533 -0.344721 0.580699 + -2.31407 1.63413 3.49404 -0.797395 -0.432701 0.420632 + -2.22659 1.56377 3.5783 -0.765635 -0.459395 0.450287 + -2.13417 1.51403 3.67706 -0.726652 -0.468889 0.502115 + -2.18866 1.74569 3.78762 -0.723026 -0.402654 0.561341 + -2.23098 2.04488 3.9266 -0.712166 -0.351209 0.607842 + -2.07879 1.30819 3.53959 -0.703278 -0.571865 0.422339 + -1.97879 1.26809 3.64004 -0.671623 -0.573026 0.469642 + -2.03389 1.46269 3.76477 -0.683843 -0.48238 0.54742 + -2.08837 1.69435 3.87533 -0.687656 -0.407438 0.600935 + -1.91628 1.1104 3.48777 -0.691861 -0.613134 0.381307 + -1.82446 1.06329 3.59595 -0.703252 -0.586234 0.402201 + -1.87287 1.23073 3.73175 -0.678957 -0.547529 0.489111 + -1.92797 1.42525 3.85644 -0.65843 -0.475953 0.583042 + -1.76298 0.90034 3.4572 -0.703044 -0.61733 0.353033 + -1.6807 0.861303 3.54682 -0.718566 -0.607542 0.33846 + -1.72597 1.01679 3.69349 -0.738108 -0.552772 0.386834 + -1.77437 1.18415 3.82923 -0.685666 -0.506026 0.523258 + -1.61585 0.687698 3.34331 -0.700927 -0.632266 0.330063 + -1.54136 0.704368 3.54803 -0.681439 -0.65312 0.330265 + -1.59424 0.805556 3.65557 -0.707943 -0.62312 0.332472 + -1.63951 0.960962 3.8022 -0.71875 -0.519554 0.46202 + -1.40911 0.598918 3.58948 -0.595074 -0.701076 0.392911 + -1.44189 0.682476 3.68675 -0.598353 -0.702993 0.384416 + -1.49477 0.783663 3.79429 -0.62331 -0.642359 0.445938 + -1.53374 0.918068 3.89229 -0.645928 -0.5159 0.562694 + -1.66388 1.13845 3.91159 -0.661103 -0.46324 0.590213 + -1.2922 0.579149 3.71252 -0.568148 -0.694064 0.442134 + -1.32498 0.662709 3.80979 -0.537153 -0.714817 0.447776 + -1.38252 0.755475 3.88891 -0.558105 -0.650717 0.514864 + -1.42149 0.88988 3.98692 -0.592683 -0.518961 0.61596 + -1.55811 1.09555 4.00168 -0.634315 -0.445343 0.631913 + -1.29235 0.517844 3.6271 -0.609013 -0.672287 0.420873 + -1.15834 0.476777 3.72603 -0.51464 -0.737264 0.437708 + -1.15819 0.538088 3.81144 -0.517753 -0.695951 0.497577 + -1.18742 0.628462 3.90511 -0.504468 -0.708502 0.493494 + -1.24496 0.721228 3.98423 -0.504889 -0.653722 0.56368 + -1.29105 0.465531 3.53131 -0.502943 -0.796814 0.334867 + -1.16866 0.443531 3.64062 -0.475527 -0.815731 0.329327 + -0.999028 0.407612 3.78343 -0.46603 -0.769689 0.436343 + -0.990719 0.457313 3.86275 -0.469713 -0.713855 0.519405 + -1.01995 0.547601 3.95636 -0.454461 -0.691665 0.561306 + -1.31012 0.446865 3.43944 -0.288667 -0.91798 0.272 + -1.18774 0.424785 3.54869 -0.392568 -0.886534 0.244841 + -1.00935 0.374284 3.69795 -0.425504 -0.872298 0.24092 + -0.889601 0.326565 3.73001 -0.410753 -0.885395 0.217618 + -0.878866 0.352189 3.81043 -0.412184 -0.803745 0.429067 + -1.19881 0.406289 3.46332 -0.399887 -0.860391 0.315939 + -1.02128 0.372296 3.6162 -0.358309 -0.922693 0.142307 + -0.901532 0.324581 3.64824 -0.404619 -0.908649 0.103156 + -0.818256 0.295757 3.73317 -0.382532 -0.897228 0.220572 + -0.807521 0.32129 3.81354 -0.356564 -0.827608 0.433505 + -1.19284 0.361408 3.37566 -0.358705 -0.867184 0.345431 + -1.03236 0.353714 3.53078 -0.33854 -0.914424 0.221855 + -0.911372 0.317569 3.56339 -0.388958 -0.907546 0.158343 + -0.829495 0.290214 3.64637 -0.401557 -0.908886 0.112597 + -1.19868 0.33381 3.29126 -0.323772 -0.888675 0.324697 + -1.04472 0.343259 3.44889 -0.260551 -0.940243 0.219219 + -0.923729 0.307112 3.4815 -0.351057 -0.920093 0.173745 + -0.839335 0.283289 3.56156 -0.386883 -0.913465 0.12611 + -1.20987 0.304616 3.20482 -0.319033 -0.889879 0.326088 + -1.05055 0.315746 3.36455 -0.261537 -0.915099 0.306906 + -0.931271 0.292165 3.39719 -0.321118 -0.912818 0.252285 + -0.842599 0.273449 3.47381 -0.355943 -0.922549 0.149022 + -1.22724 0.281244 3.12211 -0.259298 -0.93868 0.227253 + -1.0655 0.294472 3.2842 -0.251211 -0.918822 0.304399 + -0.94622 0.270982 3.31688 -0.269348 -0.913575 0.304684 + -0.850141 0.258502 3.3895 -0.318009 -0.925426 0.20605 + -1.3309 0.296182 3.03103 -0.39134 -0.893669 0.219565 + -1.25861 0.275212 3.03255 -0.336561 -0.911648 0.235848 + -1.08286 0.271099 3.20148 -0.292172 -0.881512 0.370906 + -0.955817 0.242177 3.23497 -0.25585 -0.882947 0.39363 + -0.848922 0.240285 3.30245 -0.263867 -0.928569 0.261024 + -1.27815 0.254457 2.9473 -0.411056 -0.87378 0.259888 + -1.10375 0.236451 3.12569 -0.390361 -0.827473 0.403615 + -0.976704 0.207529 3.15919 -0.257219 -0.864092 0.432647 + -0.858519 0.211475 3.22055 -0.204674 -0.896785 0.392282 + -1.27644 0.232753 2.85409 -0.415409 -0.880744 0.22743 + -1.12329 0.215782 3.04049 -0.389423 -0.865725 0.314438 + -0.987582 0.174583 3.08025 -0.274462 -0.889022 0.366483 + -0.862611 0.172535 3.13899 -0.18557 -0.893917 0.408014 + -1.27729 0.20953 2.76852 -0.396229 -0.90494 0.155195 + -1.1375 0.190275 2.96227 -0.437359 -0.844223 0.309846 + -1.00179 0.149073 3.00203 -0.304167 -0.889565 0.340817 + -0.87349 0.139587 3.06006 -0.178451 -0.904682 0.386918 + -1.13835 0.167054 2.87669 -0.448971 -0.848297 0.280744 + -1.00819 0.121292 2.91955 -0.320266 -0.884921 0.33815 + -0.87924 0.105543 2.97703 -0.192909 -0.916111 0.351464 + -0.740831 0.076886 2.95827 -0.108706 -0.939587 0.32459 + -0.735081 0.110928 3.0413 -0.136091 -0.924316 0.356538 + -1.0181 0.09005 2.83806 -0.310583 -0.899854 0.306268 + -0.885642 0.077761 2.89455 -0.181811 -0.940328 0.287626 + -0.740988 0.051478 2.87467 -0.0965122 -0.960605 0.26062 + -0.579673 0.064888 2.94204 -0.0474531 -0.964764 0.2588 + -0.574499 0.084859 3.02466 -0.0729616 -0.954356 0.289621 + -0.878345 0.056773 2.8081 -0.151753 -0.957061 0.246994 + -0.733691 0.030489 2.78823 -0.110125 -0.967569 0.227339 + -0.579831 0.039477 2.85846 -0.0353697 -0.956076 0.290978 + -0.41875 0.027249 2.82584 -0.0136209 -0.963887 0.265964 + -0.419744 0.045337 2.90591 -0.0571255 -0.974156 0.218534 + -0.723651 0.010684 2.70473 -0.10459 -0.971748 0.211581 + -0.578916 0.01297 2.77557 -0.0522859 -0.963274 0.263381 + -0.417835 0.000743 2.74295 -0.000300291 -0.968764 0.247986 + -0.252623 0.013328 2.77215 0.00742963 -0.973262 0.229576 + -0.253617 0.031415 2.85222 -0.0556276 -0.987708 0.146079 + -0.568876 -0.006835 2.69207 -0.0506149 -0.979906 0.192931 + -0.412647 -0.015497 2.66368 -0.00305939 -0.983551 0.180604 + -0.251053 -0.004567 2.69474 0.0250989 -0.978808 0.203234 + -0.139327 -0.007745 2.68045 0.0573897 -0.991061 0.120432 + -0.140897 0.010143 2.75787 -0.0912459 -0.979674 0.178644 + -0.399308 -0.028286 2.58303 -0.0233685 -0.998705 0.0451859 + -0.245864 -0.020802 2.61547 0.0529546 -0.986704 0.153659 + -0.137669 -0.014182 2.6022 0.111937 -0.988315 0.103456 + -0.086319 0.003583 2.70243 0.0140312 -0.999222 0.0368526 + -0.084593 0.005254 2.78074 -0.139591 -0.98695 0.0802788 + -0.245797 -0.028469 2.53855 0.0323361 -0.999338 0.0166495 + -0.137601 -0.021854 2.52529 0.189968 -0.981789 -0.0016456 + -0.084661 -0.002766 2.62423 0.0693223 -0.996505 0.0466067 + -0.043617 -0.005494 2.63555 -0.372329 -0.928101 0.000368724 + -0.045034 -0.004085 2.71171 -0.40235 -0.914846 0.0342334 + -0.133605 -0.016529 2.44927 0.21348 -0.968449 -0.128582 + -0.080051 -0.001158 2.54624 0.161011 -0.985857 -0.0464948 + -0.039007 -0.003886 2.55757 -0.344754 -0.934951 -0.0837376 + -0.01377 -0.02925 2.6329 -0.323546 -0.945656 -0.0324408 + -0.015187 -0.027839 2.70906 -0.325786 -0.943135 0.0660271 + -0.076054 0.004253 2.47027 0.215494 -0.971138 -0.102244 + -0.036398 0.005475 2.48295 -0.285958 -0.948344 -0.137374 + -0.01377 -0.022748 2.55703 -0.316563 -0.942784 -0.104624 + 0.013768 -0.022748 2.55703 0.31904 -0.942303 -0.101382 + 0.013768 -0.02925 2.6329 0.32558 -0.94486 -0.0351615 + -0.029931 0.017297 2.40708 -0.227768 -0.947469 -0.224554 + -0.01116 -0.013386 2.48242 -0.302209 -0.936814 -0.176206 + 0.011169 -0.013386 2.48242 0.305559 -0.934796 -0.181082 + 0.039005 -0.003886 2.55757 0.342515 -0.936062 -0.0804491 + 0.043615 -0.005498 2.63556 0.370629 -0.928779 -0.00204399 + -0.01116 0.005243 2.40935 -0.265884 -0.930501 -0.251939 + 0.011169 0.005243 2.40935 0.273892 -0.930536 -0.243077 + 0.036407 0.005475 2.48295 0.281456 -0.948855 -0.143028 + 0.080059 -0.001158 2.54624 -0.140097 -0.989657 -0.0308614 + 0.007227 0.024152 2.3404 0.247769 -0.908647 -0.336111 + 0.02994 0.017302 2.40707 0.223806 -0.950036 -0.217585 + 0.069587 0.016073 2.3944 -0.226598 -0.956161 -0.185498 + 0.076054 0.004253 2.47027 -0.219523 -0.97096 -0.0951173 + 0.025998 0.036207 2.33812 0.154177 -0.944426 -0.290325 + 0.05992 0.03462 2.32127 -0.247528 -0.94531 -0.212413 + 0.127574 -0.000582 2.37404 -0.187255 -0.96054 -0.205666 + 0.133604 -0.016529 2.44927 -0.203643 -0.971492 -0.121378 + 0.13761 -0.021854 2.52529 -0.197223 -0.980318 0.00891414 + 0.117906 0.017966 2.30092 -0.154899 -0.948701 -0.275631 + 0.229339 -0.00815 2.38615 0.0517479 -0.961788 -0.268862 + 0.23537 -0.024098 2.46137 -0.00772249 -0.990875 -0.134565 + 0.245797 -0.028469 2.53855 -0.0291239 -0.999364 0.0205959 + 0.137677 -0.014182 2.6022 -0.138502 -0.986774 0.0842314 + 0.198737 0.042713 2.24145 0.0790131 -0.938649 -0.3357 + 0.214261 0.01562 2.31178 0.0905312 -0.93267 -0.349187 + 0.367796 -0.000722 2.43029 0.115602 -0.939701 -0.321868 + 0.388881 -0.023827 2.5059 0.0613183 -0.982643 -0.17508 + 0.399308 -0.028286 2.58303 0.0142192 -0.998566 0.0516119 + 0.331539 0.051209 2.27994 0.100364 -0.937363 -0.333584 + 0.352718 0.023041 2.35593 0.10372 -0.93444 -0.340682 + 0.518198 0.003392 2.45356 0.035725 -0.963758 -0.264377 + 0.539283 -0.019714 2.52918 0.0662853 -0.985258 -0.15771 + 0.555538 -0.019623 2.61142 0.056973 -0.995726 0.072684 + 0.478334 0.050861 2.29834 -0.0256344 -0.965309 -0.259848 + 0.499512 0.022608 2.37428 0.00516555 -0.956491 -0.291716 + 0.675869 -0.000111 2.45303 0.0499337 -0.982121 -0.181507 + 0.686816 -0.008481 2.53812 0.0755558 -0.994653 -0.0704025 + 0.703071 -0.008483 2.62033 0.100154 -0.991217 0.0863581 + 0.637802 0.036659 2.29194 -0.0313835 -0.981711 -0.187772 + 0.657184 0.019105 2.37374 0.00435097 -0.974719 -0.223391 + 0.803247 0.008962 2.48331 0.156777 -0.978263 -0.135727 + 0.814194 0.000593 2.56841 0.11018 -0.99391 0.00170079 + 0.845861 0.012058 2.64355 0.115008 -0.982319 0.147725 + 0.768605 0.034296 2.32323 0.0225806 -0.990275 -0.137281 + 0.787987 0.016661 2.40498 0.162167 -0.96757 -0.193675 + 0.896145 0.022032 2.55048 0.285048 -0.928757 -0.236977 + 0.952262 0.022123 2.61172 0.20575 -0.978294 -0.0246542 + 0.983929 0.03359 2.68686 0.212968 -0.951543 0.221832 + 0.880885 0.02973 2.47214 0.194398 -0.976968 -0.0879949 + 1.03752 0.060968 2.49944 0.23423 -0.967839 -0.0917835 + 1.09364 0.061061 2.56068 0.341591 -0.938987 -0.0402388 + 1.11615 0.079097 2.63903 0.456861 -0.876657 0.150834 + 1.00619 0.064412 2.75787 0.275065 -0.923622 0.26695 + 1.02825 0.056105 2.41526 0.228605 -0.973314 0.0199946 + 1.22639 0.111645 2.32646 0.374927 -0.922438 0.0923994 + 1.22502 0.129205 2.42024 0.429713 -0.896987 0.103732 + 1.24753 0.147325 2.49866 0.491019 -0.863128 0.11794 + 1.35392 0.161294 2.23726 0.465482 -0.882209 0.0709454 + 1.35255 0.178855 2.33105 0.397579 -0.909946 0.118018 + 1.35813 0.192681 2.4271 0.373681 -0.915699 0.147845 + 1.25187 0.169242 2.5913 0.529284 -0.829683 0.177437 + 1.13842 0.10992 2.71005 0.500446 -0.841388 0.204009 + 1.4512 0.206969 2.31095 0.366363 -0.930147 0.0245943 + 1.45678 0.220883 2.40706 0.328811 -0.935288 0.13084 + 1.36247 0.214598 2.51974 0.365674 -0.914245 0.174468 + 1.35254 0.225228 2.60113 0.355286 -0.923857 0.142338 + 1.26171 0.195051 2.6764 0.486274 -0.864128 0.129692 + 1.50397 0.242657 2.18154 0.451819 -0.884025 -0.119834 + 1.5217 0.24162 2.28234 0.434757 -0.899392 -0.0456044 + 1.53175 0.243749 2.36965 0.435367 -0.897784 0.0666279 + 1.459 0.23882 2.50859 0.312116 -0.936378 0.160564 + 1.44907 0.249449 2.58998 0.316463 -0.935557 0.156793 + 1.56516 0.281298 2.16401 0.414802 -0.897318 -0.150865 + 1.57529 0.272073 2.23359 0.384713 -0.91638 -0.110652 + 1.58533 0.274293 2.32094 0.407199 -0.913049 -0.0230182 + 1.53396 0.261693 2.47117 0.32399 -0.939241 0.113384 + 1.4665 0.267522 2.65207 0.343452 -0.91679 0.203806 + 1.5508 0.28849 2.07756 0.423082 -0.894568 -0.144047 + 1.64876 0.321749 2.11335 0.337081 -0.933681 -0.120896 + 1.65888 0.312527 2.18292 0.369771 -0.920408 -0.126962 + 1.66021 0.306524 2.25632 0.379235 -0.922868 -0.0670414 + 1.59423 0.273512 2.3919 0.263957 -0.964513 -0.00646079 + 1.64886 0.328708 2.0401 0.303443 -0.945717 -0.116365 + 1.76637 0.36327 2.04343 0.317971 -0.947264 -0.0398122 + 1.75482 0.359828 2.1202 0.360645 -0.931714 -0.0429499 + 1.75615 0.353735 2.19355 0.373931 -0.922008 -0.100382 + 1.76647 0.370235 1.97017 0.265854 -0.961691 -0.0668771 + 1.86793 0.400675 1.98045 0.314336 -0.948909 0.0276645 + 1.85638 0.397236 2.0572 0.350977 -0.936184 0.0193697 + 1.85669 0.399638 2.13244 0.376879 -0.925698 -0.0323272 + 1.75317 0.342798 2.27029 0.383221 -0.920114 -0.0808235 + 1.86879 0.401352 1.82807 0.171887 -0.98507 0.00964778 + 1.86385 0.395455 1.90469 0.247719 -0.968823 -0.00403978 + 1.94478 0.420302 1.91885 0.238577 -0.966283 0.0968396 + 1.96191 0.434751 1.99342 0.30569 -0.948553 0.0824715 + 1.96222 0.437152 2.06866 0.364602 -0.927875 0.0781899 + 1.86227 0.396727 1.75169 0.0685158 -0.997487 -0.0180336 + 1.9283 0.401439 1.76872 0.0159164 -0.99211 0.124359 + 1.9407 0.415079 1.8431 0.141149 -0.984943 0.099819 + 2.01429 0.419449 1.81933 0.130007 -0.969133 0.209472 + 1.92178 0.396725 1.69229 -0.136905 -0.984372 0.110761 + 1.98152 0.381463 1.66792 -0.17876 -0.959764 0.216558 + 1.99393 0.39519 1.74235 0.00196946 -0.970289 0.241942 + 1.95386 0.34866 1.51534 -0.40336 -0.899508 0.167887 + 1.9663 0.36556 1.59087 -0.268356 -0.930241 0.250272 + 2.01282 0.326943 1.53155 0.00321771 -0.968741 0.248053 + 2.03896 0.355975 1.61187 0.193475 -0.944943 0.263913 + 2.05932 0.380315 1.68891 0.288418 -0.920179 0.264736 + 1.948 0.344573 1.43782 -0.419415 -0.897815 0.134237 + 1.9927 0.303234 1.36722 -0.216156 -0.972486 0.0868707 + 1.9976 0.311036 1.45451 -0.149816 -0.977921 0.145691 + 2.06555 0.327452 1.42387 0.453865 -0.885257 0.101614 + 1.98685 0.299233 1.28975 -0.357079 -0.929721 -0.0900791 + 2.04357 0.304913 1.25091 0.359107 -0.93321 -0.0126455 + 2.04846 0.312631 1.33814 0.398184 -0.915475 0.0579219 + 2.00194 0.314248 1.20674 -0.465474 -0.863371 -0.19474 + 2.05901 0.323441 1.07862 0.301738 -0.952336 -0.0448411 + 2.04391 0.308428 1.16162 0.165733 -0.976004 -0.141239 + 2.10624 0.362893 1.15849 0.574491 -0.815857 -0.0658557 + 2.11922 0.35999 1.24832 0.584053 -0.811367 -0.0237886 + 2.10658 0.366494 1.06925 0.61662 -0.787077 -0.0170255 + 2.18187 0.421666 0.948888 0.549531 -0.835362 -0.0136267 + 2.17853 0.415693 1.04723 0.503162 -0.861917 -0.062667 + 2.30227 0.493861 0.894243 0.593009 -0.804802 -0.025169 + 2.19151 0.412788 1.13706 0.558891 -0.828712 -0.0296052 + 2.1363 0.374728 1.33399 0.612072 -0.789991 0.0358038 + 2.09169 0.356484 1.50419 0.520052 -0.840202 0.153645 + 2.08491 0.41771 1.76634 0.400895 -0.880288 0.253725 + 2.09887 0.44334 1.84355 0.485498 -0.837264 0.251558 + 2.03142 0.433901 1.89389 0.252587 -0.946323 0.201673 + 2.04537 0.459445 1.97105 0.371276 -0.912266 0.172987 + 2.04911 0.470755 2.04646 0.497279 -0.847802 0.184243 + 1.96596 0.448469 2.14407 0.449456 -0.891475 0.0571081 + 1.85372 0.388614 2.20914 0.411948 -0.90918 -0.0607486 + 2.10762 0.50394 2.00259 0.639358 -0.723494 0.26034 + 2.05096 0.495578 2.12347 0.612678 -0.766037 0.194455 + 1.96174 0.44608 2.2196 0.536178 -0.839903 0.0841268 + 1.84949 0.386313 2.28472 0.464605 -0.88401 -0.0516566 + 2.11079 0.542994 2.08414 0.688071 -0.678793 0.256511 + 2.03672 0.499833 2.1991 0.661382 -0.725714 0.189508 + 1.9475 0.45034 2.29522 0.604801 -0.790978 0.0925665 + 2.10428 0.561698 2.16435 0.700684 -0.679434 0.217744 + 2.03022 0.518539 2.2793 0.688775 -0.703435 0.175409 + 1.93746 0.448136 2.37084 0.662402 -0.742008 0.103185 + 1.8517 0.375213 2.36135 0.520052 -0.853017 -0.0436667 + 2.10679 0.59144 2.24863 0.723006 -0.650297 0.233189 + 2.0094 0.513188 2.35317 0.71909 -0.667688 0.192616 + 1.91665 0.442783 2.44471 0.69935 -0.694684 0.168297 + 1.84167 0.373009 2.43697 0.575044 -0.814544 0.0764418 + 1.75909 0.327635 2.42095 0.367097 -0.929696 -0.0300774 + 2.18985 0.64336 2.1567 0.722375 -0.640196 0.261387 + 2.17752 0.67142 2.2417 0.724353 -0.620771 0.299926 + 2.09014 0.602258 2.3281 0.761244 -0.579975 0.290061 + 1.99275 0.524004 2.43263 0.759045 -0.606003 0.237931 + 2.25581 0.731185 2.16119 0.739712 -0.627614 0.242746 + 2.24337 0.743196 2.25178 0.728047 -0.608041 0.316597 + 2.1581 0.695131 2.32363 0.726893 -0.572109 0.379892 + 2.07072 0.626055 2.41008 0.788761 -0.498229 0.360033 + 2.33809 0.811585 2.13373 0.775889 -0.581839 0.243843 + 2.31965 0.836749 2.22674 0.785558 -0.465103 0.408139 + 2.21491 0.766721 2.33263 0.736101 -0.481272 0.475954 + 2.12964 0.71866 2.40448 0.740635 -0.456768 0.492771 + 2.44299 0.898732 1.98359 0.825074 -0.510951 0.241211 + 2.42456 0.923891 2.07661 0.824582 -0.495084 0.273783 + 2.41365 0.955533 2.1768 0.805677 -0.516127 0.290684 + 2.27852 0.865364 2.30618 0.753947 -0.502688 0.422929 + 2.17378 0.795248 2.41202 0.716012 -0.544692 0.43662 + 2.51609 1.00412 1.90324 0.906434 -0.382993 0.178026 + 2.50013 1.00485 1.98979 0.88627 -0.414877 0.205918 + 2.48922 1.03649 2.08999 0.867051 -0.450986 0.211742 + 2.3982 0.9821 2.26839 0.759202 -0.590496 0.273727 + 2.26307 0.891843 2.39772 0.707539 -0.670395 0.223515 + 2.5645 1.13589 1.89522 0.937552 -0.312947 0.151858 + 2.54855 1.13661 1.98176 0.923831 -0.35244 0.149408 + 2.55736 1.17874 2.0464 0.888205 -0.453412 0.0742183 + 2.49803 1.0787 2.15467 0.868311 -0.45539 0.196612 + 2.39503 1.02079 2.36737 0.766934 -0.592084 0.247486 + 2.61058 1.27381 1.93234 0.913306 -0.407036 0.0139468 + 2.57253 1.20236 2.14269 0.847912 -0.525126 0.0727171 + 2.49487 1.11738 2.25367 0.816979 -0.545548 0.186875 + 2.37461 1.04129 2.47787 0.745694 -0.636125 0.198206 + 2.24738 0.891026 2.48613 0.697465 -0.693427 0.180836 + 2.62575 1.29734 2.02858 0.905788 -0.423439 0.01569 + 2.65077 1.36379 2.06668 0.931364 -0.360836 0.0485618 + 2.57453 1.23392 2.24142 0.870335 -0.471684 0.14153 + 2.49688 1.14894 2.35241 0.790432 -0.588937 0.168432 + 2.66678 1.41571 2.12635 0.930563 -0.361042 0.0608322 + 2.59055 1.28584 2.3011 0.884862 -0.436871 0.161748 + 2.47789 1.15753 2.47854 0.800817 -0.552076 0.232175 + 2.35563 1.04979 2.60395 0.721874 -0.618021 0.311366 + 2.22697 0.911444 2.59657 0.710296 -0.635696 0.302276 + 2.76286 1.69898 2.15471 0.924898 -0.372068 0.0782903 + 2.70903 1.55131 2.28208 0.931146 -0.353674 0.0887814 + 2.63475 1.40743 2.3743 0.893463 -0.414586 0.172748 + 2.52209 1.27912 2.55174 0.842105 -0.457189 0.286071 + 2.78184 1.79753 2.44243 0.925221 -0.357334 0.127585 + 2.70756 1.65364 2.53465 0.906463 -0.376509 0.19122 + 2.64147 1.51538 2.56272 0.867698 -0.419687 0.266389 + 2.53871 1.40196 2.66698 0.855162 -0.444665 0.266404 + 2.41932 1.16569 2.65599 0.761665 -0.539585 0.358768 + 2.88684 2.14071 2.57242 0.932067 -0.309508 0.188296 + 2.83049 2.01008 2.62288 0.919731 -0.333562 0.206956 + 2.77132 1.88583 2.67448 0.904144 -0.356213 0.235873 + 2.70523 1.74766 2.70259 0.884542 -0.38671 0.260845 + 2.90666 2.30602 2.7003 0.934483 -0.262375 0.240625 + 2.85299 2.1988 2.7792 0.91438 -0.292627 0.279783 + 2.79381 2.07464 2.83085 0.901854 -0.315692 0.294954 + 2.73262 1.95246 2.88208 0.882984 -0.342887 0.320574 + 2.96667 2.61474 2.76017 0.954485 -0.196217 0.224625 + 2.92343 2.55214 2.87299 0.936017 -0.227377 0.268649 + 2.86976 2.44501 2.95194 0.918081 -0.257978 0.300955 + 2.81471 2.34254 3.02704 0.902224 -0.282631 0.325749 + 3.00339 2.67289 2.63705 0.970403 -0.162995 0.178185 + 2.97642 2.9104 2.94847 0.956962 -0.1669 0.237419 + 2.93318 2.84781 3.06129 0.942228 -0.193862 0.273172 + 2.88402 2.77684 3.17041 0.921825 -0.224337 0.316088 + 2.82897 2.67436 3.24551 0.906141 -0.25235 0.339453 + 3.00934 2.93258 2.81406 0.972651 -0.138453 0.186499 + 3.01648 3.21906 2.97146 0.975071 -0.11567 0.18936 + 2.98356 3.19688 3.10587 0.962453 -0.143341 0.230518 + 2.94526 3.14078 3.22244 0.948179 -0.170598 0.268054 + 2.8961 3.06982 3.33155 0.932595 -0.197519 0.30208 + 3.03511 2.96217 2.67901 0.982085 -0.118509 0.14651 + 3.04144 3.2511 2.84297 0.983367 -0.0948271 0.154909 + 3.01927 3.52656 3.11545 0.978498 -0.0149116 0.205719 + 2.99093 3.47223 3.23235 0.966157 -0.0494565 0.253171 + 2.95263 3.41614 3.34891 0.95105 -0.0763788 0.299451 + 3.0629 3.26618 2.70544 0.989341 -0.0763806 0.123976 + 3.04423 3.55852 2.9869 0.986128 0.00244653 0.165971 + 2.99013 3.85874 3.14489 0.964082 0.163447 0.209359 + 2.9702 3.80311 3.25965 0.957335 0.127249 0.259456 + 2.94185 3.7487 3.3765 0.945998 0.100162 0.308311 + 3.06202 3.59362 2.8587 0.990462 0.0215801 0.136082 + 3.00792 3.89376 3.01664 0.969245 0.167505 0.180294 + 2.88357 4.12758 3.30345 0.921376 0.274884 0.274781 + 2.86363 4.07195 3.41821 0.903764 0.26524 0.335944 + 2.84151 4.00321 3.52207 0.890837 0.242976 0.38389 + 3.02245 3.93634 2.89569 0.970236 0.182804 0.158821 + 2.89556 4.19064 3.19443 0.922974 0.300742 0.240153 + 2.77869 4.4125 3.29715 0.850838 0.436739 0.29212 + 2.76669 4.34953 3.40622 0.835236 0.40272 0.374429 + 2.71836 4.34324 3.50512 0.79382 0.42622 0.433804 + 3.03632 3.96331 2.76538 0.973727 0.180416 0.138948 + 2.91008 4.23313 3.07343 0.924412 0.308683 0.224003 + 2.75332 4.51485 3.20068 0.832435 0.468175 0.296418 + 2.58702 4.62271 3.40426 0.753415 0.53316 0.384844 + 2.53868 4.61643 3.50315 0.740639 0.539317 0.400737 + 3.04793 4.00287 2.62426 0.975742 0.194576 0.100334 + 2.92507 4.27844 2.95516 0.931997 0.296361 0.208689 + 2.76831 4.56016 3.08241 0.838401 0.451904 0.304739 + 2.59133 4.8202 3.1034 0.759681 0.554875 0.339113 + 2.56165 4.72498 3.30773 0.743484 0.551602 0.378109 + 3.04409 4.0802 2.45051 0.976736 0.204721 0.0638477 + 2.93668 4.31809 2.81409 0.943916 0.285296 0.166219 + 2.82002 4.55769 2.95729 0.865283 0.411798 0.285845 + 3.0344 4.15634 2.33024 0.973152 0.228878 0.0242978 + 2.944 4.36891 2.69926 0.945532 0.289744 0.148386 + 2.82734 4.60859 2.84251 0.87868 0.435125 0.196435 + 2.64304 4.81781 2.97834 0.785292 0.538568 0.305387 + 3.01826 4.2199 2.21454 0.972814 0.231584 -0.000810247 + 2.93431 4.44513 2.57904 0.939594 0.320855 0.119229 + 2.7918 4.70423 2.76488 0.857076 0.466827 0.217929 + 2.6075 4.91344 2.9007 0.769773 0.556263 0.313083 + 2.39792 5.14652 2.96539 0.719119 0.603699 0.344114 + 2.99596 4.31437 2.09793 0.970352 0.241258 -0.0145129 + 2.92178 4.51901 2.47688 0.942928 0.316274 0.104198 + 2.77926 4.7781 2.66272 0.853473 0.463221 0.238767 + 2.61275 4.99135 2.73675 0.778012 0.562199 0.280409 + 2.40318 5.22443 2.80145 0.733661 0.604146 0.311045 + 2.97314 4.39094 1.99271 0.970512 0.240119 -0.0212097 + 2.89948 4.61338 2.36022 0.945029 0.318085 0.0757767 + 2.80347 4.81152 2.51723 0.876333 0.438116 0.200233 + 2.63696 5.02486 2.59132 0.788889 0.563776 0.244562 + 2.41336 5.32076 2.59061 0.743277 0.601154 0.293517 + 2.95514 4.4525 1.85547 0.972238 0.230399 -0.0408542 + 2.87809 4.72406 2.17391 0.941433 0.333482 0.0499389 + 2.78208 4.9222 2.33093 0.869906 0.475416 0.131313 + 2.73025 5.03293 2.22795 0.851495 0.517468 0.0847543 + 2.58513 5.13559 2.48833 0.78646 0.567862 0.242929 + 2.92916 4.53973 1.75878 0.966881 0.251215 -0.0450822 + 2.86009 4.78554 2.03663 0.922881 0.385037 -0.00606439 + 2.84193 4.80944 1.90563 0.925108 0.379538 -0.0112586 + 2.71208 5.05683 2.09695 0.874878 0.482649 0.04049 + 2.56369 5.28679 2.23664 0.812925 0.549223 0.19367 + 2.39192 5.47197 2.33891 0.737031 0.616664 0.276605 + 2.70169 5.11875 1.9311 0.889085 0.44734 0.0970254 + 2.55329 5.34863 2.07074 0.828516 0.543798 0.133585 + 2.36036 5.57092 2.18392 0.741282 0.635063 0.217245 + 2.1445 5.69545 2.42503 0.665438 0.6831 0.300943 + 2.33453 5.63576 2.06221 0.747108 0.641041 0.175771 + 2.104 5.84604 2.1598 0.66803 0.701579 0.248037 + 2.11294 5.7944 2.27003 0.663853 0.690611 0.286975 + 2.30026 5.70265 1.96015 0.74683 0.650257 0.139322 + 2.06973 5.91293 2.05774 0.661925 0.709017 0.243206 + 1.8082 6.0823 2.18638 0.566887 0.767757 0.298645 + 1.87858 6.009 2.24893 0.590669 0.761627 0.266522 + 1.88752 5.95737 2.35916 0.585268 0.739929 0.331611 + 2.28482 5.73189 1.88371 0.749847 0.643049 0.155617 + 2.0302 5.98832 1.94595 0.645917 0.736043 0.202563 + 1.76867 6.15769 2.07459 0.558241 0.786444 0.264335 + 1.72022 6.22202 1.95958 0.530466 0.825945 0.190844 + 1.4699 6.27735 2.25855 0.478487 0.824361 0.302455 + 1.50251 6.21269 2.36954 0.49058 0.801251 0.342531 + 1.57288 6.13948 2.43215 0.520422 0.781245 0.344699 + 1.36416 6.39673 2.02638 0.418071 0.884161 0.208509 + 1.42144 6.34167 2.14354 0.438627 0.866187 0.23943 + 1.22438 6.35483 2.39954 0.382326 0.863093 0.329997 + 1.29037 6.45835 1.91044 0.413127 0.888746 0.198635 + 1.08876 6.45985 2.22505 0.337227 0.903197 0.265542 + 1.14603 6.40479 2.34221 0.333728 0.896316 0.291963 + 0.962238 6.36502 2.60049 0.303487 0.866417 0.396505 + 1.25699 6.29017 2.51054 0.416426 0.818026 0.396766 + 1.19721 6.52356 1.8071 0.395743 0.898278 0.191008 + 0.92797 6.57875 2.02669 0.320666 0.914523 0.246619 + 1.02113 6.51363 2.13009 0.335588 0.903247 0.267443 + 0.827272 6.46639 2.46352 0.2759 0.89805 0.342615 + 0.883886 6.41497 2.54317 0.283659 0.880641 0.379486 + 1.50341 6.40817 1.60316 0.481439 0.864822 0.142477 + 1.47639 6.44575 1.47206 0.491586 0.861509 0.127067 + 1.17018 6.56106 1.67595 0.397142 0.903978 0.158438 + 1.03768 6.62266 1.63085 0.354249 0.922635 0.152485 + 1.3745 6.51916 1.34411 0.444843 0.892595 0.0734048 + 1.242 6.58068 1.29897 0.38719 0.919204 0.0717442 + 1.41507 6.51924 1.01858 0.459762 0.887813 0.020166 + 1.10298 6.64171 1.17946 0.347351 0.936704 0.0439558 + 0.911761 6.6831 1.53417 0.316562 0.941743 0.113614 + 1.27606 6.58026 0.899078 0.406722 0.913409 0.016194 + 0.960672 6.69594 1.07172 0.310669 0.950148 0.0265456 + 0.769448 6.73725 1.42637 0.273924 0.95876 0.0757916 + 0.698665 6.70618 1.81299 0.269257 0.941558 0.20241 + 1.34251 6.55074 0.580817 0.451397 0.886043 -0.105678 + 1.19359 6.61972 0.794943 0.361378 0.932412 -0.00367437 + 1.05861 6.66359 0.798562 0.306181 0.951637 -0.025301 + 0.734752 6.76539 0.984238 0.275986 0.961056 0.0142514 + 0.664641 6.76811 1.36752 0.252908 0.965384 0.0638015 + 1.45582 6.44337 0.366384 0.500004 0.834441 -0.231745 + 1.23376 6.59237 0.537905 0.342467 0.923487 -0.172881 + 1.09878 6.63633 0.541574 0.296987 0.943048 -0.149862 + 0.832688 6.73303 0.711083 0.266769 0.960664 -0.0771992 + 0.593452 6.80476 0.946639 0.241569 0.970304 -0.0124353 + 1.28241 6.49882 0.24295 0.391359 0.886621 -0.246457 + 1.17419 6.54288 0.259035 0.314415 0.913465 -0.25831 + 0.979355 6.65734 0.482576 0.267833 0.943903 -0.193167 + 0.837682 6.68236 0.402646 0.22827 0.942763 -0.243087 + 0.691015 6.75805 0.631154 0.240113 0.96354 -0.118057 + 0.571966 6.78465 0.602867 0.157263 0.975067 -0.156566 + 0.474402 6.83137 0.918353 0.173058 0.983976 -0.0429265 + 0.435957 6.83259 1.30843 0.190581 0.979422 0.0664219 + 0.523341 6.80757 1.32997 0.246637 0.965911 0.0786573 + 0.533797 6.77079 1.67088 0.175863 0.975253 0.133994 + 0.496008 6.77776 0.527806 0.133089 0.963008 -0.234315 + 0.371306 6.80834 0.581647 0.114747 0.974147 -0.194603 + 0.321333 6.85039 0.899611 0.0956722 0.993856 -0.0556407 + 0.100983 6.86306 1.27106 0.0305822 0.999006 0.0324287 + 0.282888 6.85153 1.28964 0.0888201 0.995273 0.0392824 + 0.242537 6.83233 1.5989 0.0966845 0.986142 0.134818 + 0.325972 6.80725 1.68334 0.171629 0.965591 0.195392 + 0.413356 6.78223 1.70487 0.172374 0.969258 0.175573 + -0.100983 6.86309 0.880213 -0.0301542 0.997468 -0.0644153 + -0.100983 6.86306 1.27106 -0.0311355 0.999008 0.031849 + -0.060632 6.84387 1.58031 -0.0238566 0.991803 0.125525 + 0.060632 6.84387 1.58031 0.023854 0.991803 0.125527 + -0.321333 6.85039 0.899611 -0.0952661 0.993922 -0.0551612 + -0.282888 6.85153 1.28964 -0.0884482 0.99533 0.0386617 + -0.242537 6.83233 1.5989 -0.0966814 0.986149 0.134768 + -0.060632 6.77963 1.91316 -0.0333648 0.975356 0.218101 + 0.060632 6.77963 1.91316 0.0331918 0.975788 0.216185 + -0.474402 6.83137 0.918353 -0.174478 0.983844 -0.0400988 + -0.435957 6.83259 1.30843 -0.19441 0.978914 0.0626998 + -0.325972 6.80725 1.68334 -0.166641 0.969998 0.177017 + -0.144067 6.75447 1.99756 -0.0560148 0.970728 0.23356 + 0.050108 6.70567 2.20727 0.0191598 0.94888 0.315055 + -0.571968 6.78465 0.602867 -0.165925 0.972859 -0.16129 + -0.593452 6.80476 0.946639 -0.238817 0.971014 -0.00991598 + -0.523341 6.80757 1.32997 -0.2448 0.966687 0.0747638 + -0.413356 6.78223 1.70487 -0.184286 0.968488 0.16754 + -0.294177 6.73724 2.02838 -0.116182 0.964747 0.236148 + -0.691017 6.75805 0.631154 -0.234265 0.962265 -0.138439 + -0.832686 6.73303 0.711083 -0.274443 0.958242 -0.0803349 + -0.734753 6.76539 0.984238 -0.275625 0.961175 0.0131982 + -0.664642 6.76811 1.36752 -0.2502 0.965978 0.0654683 + -0.533797 6.77079 1.67088 -0.175863 0.975253 0.133995 + -0.979353 6.65735 0.482567 -0.273644 0.946061 -0.17346 + -1.05861 6.66359 0.798562 -0.302155 0.952641 -0.0343206 + -0.960673 6.69594 1.07172 -0.311622 0.949848 0.0260678 + -0.769449 6.73725 1.42637 -0.274441 0.958434 0.0780185 + -0.638605 6.73993 1.72974 -0.250156 0.954856 0.160226 + -1.09878 6.63633 0.541574 -0.276758 0.950898 -0.138558 + -1.23376 6.59237 0.537905 -0.342433 0.923507 -0.172844 + -1.19359 6.61972 0.794943 -0.361331 0.93243 -0.00374486 + -1.17419 6.54288 0.259035 -0.310508 0.912125 -0.267606 + -1.28241 6.49882 0.24295 -0.39136 0.886621 -0.246455 + -1.34707 6.48501 0.323472 -0.424825 0.876972 -0.224598 + -1.34251 6.55074 0.580817 -0.451397 0.886043 -0.10568 + -1.42498 6.51129 0.684952 -0.49995 0.864578 -0.050538 + -1.22271 6.41721 -0.052703 -0.252991 0.892369 -0.373729 + -1.33093 6.37315 -0.068788 -0.368897 0.852815 -0.369623 + -1.44807 6.32948 -0.029744 -0.486297 0.810333 -0.326919 + -1.51273 6.31567 0.050778 -0.551009 0.792421 -0.261646 + -1.45582 6.44337 0.366384 -0.504725 0.837727 -0.208485 + -1.25933 6.30343 -0.25822 -0.296176 0.796449 -0.527209 + -1.38258 6.26348 -0.226426 -0.417446 0.756406 -0.503576 + -1.49973 6.2198 -0.187381 -0.500136 0.727892 -0.469082 + -1.60914 6.16113 -0.145152 -0.587997 0.696925 -0.410556 + -1.61436 6.25035 0.099903 -0.599716 0.759521 -0.251929 + -1.41123 6.15387 -0.342177 -0.436526 0.669571 -0.600932 + -1.53005 6.08995 -0.313864 -0.514859 0.636253 -0.574545 + -1.63947 6.03127 -0.271635 -0.585603 0.608756 -0.535242 + -1.55406 5.9805 -0.404688 -0.506626 0.564371 -0.651778 + -1.55972 6.38729 0.440731 -0.571692 0.803866 -0.164217 + -1.71826 6.19427 0.17425 -0.636188 0.735213 -0.233939 + -0.911762 6.6831 1.53417 -0.320456 0.940593 0.112216 + -0.824584 6.64574 1.90967 -0.340674 0.910563 0.234127 + -0.698665 6.70618 1.81299 -0.269471 0.942128 0.199449 + -0.414618 6.72581 1.99439 -0.172457 0.958678 0.226262 + -0.822126 6.61587 2.016 -0.296806 0.916931 0.266727 + -0.531952 6.66896 2.12045 -0.216813 0.939927 0.263683 + -0.474679 6.69206 2.07765 -0.18791 0.948779 0.253983 + -0.269292 6.67497 2.26263 -0.0982188 0.937131 0.334871 + -0.200218 6.68836 2.23805 -0.0539781 0.943883 0.325838 + -0.581012 6.59979 2.28966 -0.258779 0.903052 0.342826 + -0.529493 6.63918 2.22683 -0.206439 0.928025 0.310086 + -0.349068 6.61759 2.37783 -0.140586 0.909918 0.390237 + -0.326565 6.65188 2.30544 -0.147469 0.921502 0.359285 + -0.686856 6.56267 2.30035 -0.269102 0.911541 0.31093 + -0.499961 6.55393 2.46969 -0.173136 0.921233 0.348358 + -0.400587 6.57829 2.44071 -0.159405 0.911399 0.379396 + -0.572748 6.51135 2.53785 -0.227197 0.897176 0.378757 + -0.373621 6.51423 2.60505 -0.120892 0.903409 0.411385 + -0.274247 6.53868 2.5761 -0.0639589 0.911777 0.405674 + -0.141685 6.57025 2.50863 -0.0249631 0.911647 0.410215 + -0.119182 6.60453 2.43624 -0.0373573 0.909668 0.413653 + -0.388277 6.47524 2.68259 -0.121005 0.897519 0.42405 + -0.176785 6.43005 2.81825 -0.0228194 0.905372 0.424005 + -0.044223 6.46171 2.75082 -0.000832044 0.906535 0.42213 + 0.044223 6.46171 2.75082 0.000973426 0.905695 0.423929 + -0.050108 6.61792 2.41166 -0.0153402 0.913002 0.407666 + -0.233666 6.40344 2.87116 -0.0584052 0.901238 0.429371 + -0.044223 6.18267 3.32274 -0.00301525 0.895771 0.444507 + 0.044223 6.18267 3.32274 -0.000375389 0.883408 0.468604 + -0.101104 6.15596 3.37559 -0.0433475 0.880086 0.472831 + -0.124475 6.09432 3.48496 -0.0505963 0.858728 0.509928 + -0.14305 6.0222 3.60207 -0.0458803 0.838137 0.543526 + -0.136385 5.89102 3.79808 -0.0231056 0.815036 0.578949 + -0.096861 5.82595 3.88378 -0.00610063 0.798814 0.601546 + -0.033595 5.77673 3.94804 -0.0139803 0.7893 0.613849 + 0.033595 5.77673 3.94804 0.0141317 0.790106 0.612808 + 0.096861 5.82595 3.88378 -0.000654557 0.802035 0.597277 + 0.136385 5.89102 3.79808 0.00216317 0.818883 0.573956 + 0.148623 5.95613 3.70132 0.0301867 0.834556 0.550095 + 0.143051 6.0222 3.60207 -0.0164265 0.836582 0.547595 + 0.124475 6.09432 3.48496 -0.00245258 0.855128 0.518411 + 0.101105 6.15596 3.37559 0.0263383 0.877671 0.478539 + 0.176785 6.43005 2.81825 0.0228409 0.905335 0.424085 + -0.286638 5.61296 4.1119 -0.106085 0.761138 0.639855 + -0.197655 5.49568 4.26263 -0.0848229 0.748889 0.657245 + -0.134389 5.44638 4.32683 -0.0988236 0.7263 0.680237 + -0.033595 5.41581 4.36878 -0.0330103 0.725782 0.687132 + 0.033595 5.41581 4.36878 0.0330103 0.725782 0.687132 + -0.288186 5.27331 4.49538 -0.0325709 0.704378 0.709077 + -0.237468 5.2187 4.54617 -0.0183962 0.672358 0.739997 + -0.158013 5.22322 4.54455 -0.0644347 0.680698 0.729725 + -0.057219 5.19265 4.58649 -0.0441369 0.651127 0.757684 + -0.375693 5.11286 4.63109 -0.125624 0.626574 0.769171 + -0.324975 5.05817 4.68183 -0.0774454 0.606328 0.791435 + -0.257627 4.99574 4.73155 -0.0446107 0.574868 0.817029 + -0.178172 5.00026 4.72992 -0.00741539 0.578774 0.815455 + -0.551165 4.9418 4.71679 -0.210525 0.561817 0.800025 + -0.449579 4.90913 4.76317 -0.164434 0.535735 0.82822 + -0.38223 4.84671 4.81289 -0.136734 0.522014 0.841905 + -0.332603 4.78451 4.85881 -0.0824376 0.486759 0.869638 + -0.203725 4.79747 4.85657 -0.00671893 0.478783 0.877908 + -0.855362 4.85492 4.68866 -0.282521 0.544077 0.790039 + -0.770678 4.77739 4.76376 -0.247181 0.491926 0.834812 + -0.669092 4.74481 4.81019 -0.23065 0.485812 0.843082 + -0.572613 4.68144 4.87434 -0.217462 0.483731 0.84777 + -0.522986 4.61924 4.92026 -0.175539 0.407963 0.895964 + -1.07525 4.67905 4.71547 -0.319774 0.496196 0.807176 + -0.990563 4.60152 4.79056 -0.277527 0.448864 0.849411 + -0.88492 4.49976 4.87041 -0.266447 0.430218 0.862507 + -0.788441 4.43648 4.93462 -0.225488 0.36933 0.901527 + -1.33951 4.45427 4.74201 -0.37003 0.442199 0.81703 + -1.22576 4.32411 4.85146 -0.321498 0.388917 0.863355 + -1.12011 4.22243 4.93136 -0.275099 0.33054 0.902809 + -1.55192 4.20397 4.75893 -0.425889 0.36072 0.829759 + -1.43817 4.07381 4.86839 -0.37616 0.307449 0.874059 + -1.33197 3.94823 4.94689 -0.323093 0.246229 0.913774 + -1.0017 4.09007 5.00022 -0.214451 0.252546 0.943521 + -1.73573 3.92518 4.76543 -0.498636 0.260969 0.826594 + -1.65182 3.80226 4.84653 -0.456603 0.201046 0.866657 + -1.54562 3.67677 4.92508 -0.406468 0.136203 0.903456 + -1.21356 3.81596 5.0158 -0.253457 0.185034 0.949485 + -1.91851 3.68226 4.70637 -0.571773 0.150984 0.806399 + -1.8346 3.55934 4.78748 -0.524896 0.090492 0.846342 + -1.80006 3.43825 4.8144 -0.519398 0.0106398 0.854466 + -1.70185 3.41556 4.86911 -0.46405 0.011331 0.885737 + -1.42499 3.56737 4.98257 -0.348271 0.0874058 0.93331 + -2.08087 3.45036 4.60384 -0.656406 -0.0199555 0.754144 + -2.00319 3.36563 4.66239 -0.645437 -0.0447652 0.7625 + -1.96864 3.24454 4.68932 -0.671268 -0.0820945 0.736654 + -1.89171 3.14942 4.73467 -0.571543 -0.156056 0.805596 + -1.79349 3.12682 4.78942 -0.495968 -0.163429 0.852823 + -2.21668 3.16849 4.43025 -0.69954 -0.16886 0.694356 + -2.13899 3.08376 4.4888 -0.69583 -0.186715 0.693512 + -2.05366 3.01292 4.5517 -0.686012 -0.20679 0.697585 + -1.97672 2.9178 4.59705 -0.65711 -0.255404 0.709207 + -1.87899 2.85807 4.65711 -0.571738 -0.287899 0.768265 + -2.23071 2.75267 4.26706 -0.705719 -0.266491 0.656463 + -2.14538 2.68183 4.32996 -0.688711 -0.285678 0.666382 + -2.04499 2.64384 4.41137 -0.652489 -0.309448 0.691737 + -1.94726 2.5841 4.47144 -0.605363 -0.340779 0.719309 + -2.2638 2.40369 4.07712 -0.703425 -0.309465 0.639863 + -2.16569 2.34754 4.15417 -0.680711 -0.320905 0.658523 + -2.06529 2.30954 4.23558 -0.647659 -0.3342 0.684725 + -1.95764 2.27166 4.3132 -0.60289 -0.347635 0.718104 + -1.83623 2.54914 4.541 -0.554325 -0.360572 0.750141 + -2.13287 1.98865 4.00359 -0.679998 -0.357046 0.640407 + -2.02705 1.9426 4.08575 -0.647034 -0.363228 0.670383 + -1.9194 1.90472 4.16336 -0.609956 -0.367102 0.702275 + -1.80501 1.87262 4.24177 -0.577531 -0.366554 0.729449 + -1.8466 2.2367 4.38276 -0.566467 -0.355253 0.743579 + -1.98256 1.64831 3.95749 -0.654883 -0.411626 0.633792 + -1.87276 1.60828 4.04202 -0.622294 -0.40827 0.667882 + -1.75837 1.57617 4.12042 -0.594053 -0.396851 0.699722 + -1.64331 1.53754 4.19673 -0.571927 -0.388873 0.722272 + -1.69093 1.83115 4.30698 -0.550829 -0.362976 0.751555 + -1.81817 1.38522 3.94096 -0.643166 -0.457579 0.613969 + -1.70767 1.33952 4.02331 -0.623372 -0.439719 0.646571 + -1.59261 1.30081 4.09957 -0.596504 -0.417843 0.685266 + -1.47608 1.25865 4.17559 -0.577431 -0.406186 0.708228 + -1.52366 1.5029 4.26593 -0.552043 -0.375918 0.744267 + -1.57128 1.79651 4.37618 -0.520854 -0.35673 0.775535 + -1.73252 2.19524 4.44797 -0.536168 -0.356916 0.764941 + -1.44158 1.0534 4.07769 -0.590086 -0.436629 0.679083 + -1.32338 1.02894 4.16285 -0.563054 -0.437388 0.701186 + -1.35746 1.22365 4.248 -0.558534 -0.397408 0.728084 + -1.40504 1.46782 4.33829 -0.549269 -0.363803 0.752297 + -1.3033 0.865423 4.07208 -0.540708 -0.525265 0.657063 + -1.17891 0.862822 4.16378 -0.500702 -0.532997 0.682064 + -1.2026 1.0051 4.24194 -0.530501 -0.446044 0.720842 + -1.23668 1.19981 4.3271 -0.529513 -0.393947 0.75128 + -1.12057 0.718627 4.07593 -0.452997 -0.630202 0.630587 + -1.00324 0.698969 4.13638 -0.417269 -0.645693 0.639506 + -1.05235 0.848683 4.24327 -0.460874 -0.549519 0.696867 + -1.07604 0.990964 4.32143 -0.496606 -0.450763 0.741751 + -0.902619 0.527941 4.01681 -0.342193 -0.679927 0.648539 + -0.823602 0.487744 4.00924 -0.312669 -0.706346 0.63507 + -0.870688 0.690466 4.21011 -0.346131 -0.651755 0.67484 + -0.919796 0.840262 4.31706 -0.395413 -0.570516 0.719833 + -0.870557 0.401885 3.88975 -0.376331 -0.732886 0.566792 + -0.79154 0.361685 3.88218 -0.308815 -0.748816 0.586436 + -0.684415 0.310778 3.87075 -0.315437 -0.755333 0.574432 + -0.698136 0.433094 4.01169 -0.310837 -0.717754 0.623064 + -0.745222 0.635818 4.21257 -0.29312 -0.676987 0.675107 + -0.700396 0.270386 3.80211 -0.346508 -0.848789 0.399361 + -0.546162 0.240623 3.85626 -0.231824 -0.813878 0.532785 + -0.559883 0.362934 3.99721 -0.236413 -0.730003 0.641253 + -0.713744 0.250686 3.72123 -0.369742 -0.907429 0.199658 + -0.567089 0.212172 3.77694 -0.293639 -0.897084 0.330176 + -0.405594 0.146043 3.72688 -0.245452 -0.920474 0.304107 + -0.384667 0.174489 3.80621 -0.151287 -0.855381 0.495415 + -0.724983 0.245138 3.63444 -0.376323 -0.921602 0.0950334 + -0.580437 0.192389 3.69601 -0.330343 -0.9276 0.174448 + -0.419806 0.130899 3.64511 -0.305112 -0.940942 0.14675 + -0.222854 0.076814 3.64279 -0.260964 -0.916226 0.304019 + -0.727814 0.237982 3.54944 -0.362894 -0.925756 0.106225 + -0.579758 0.186964 3.61221 -0.346074 -0.9356 0.0698891 + -0.419127 0.125386 3.56126 -0.333597 -0.94194 0.0382462 + -0.237066 0.061669 3.56102 -0.337644 -0.936637 0.0933161 + -0.731078 0.228144 3.46168 -0.353132 -0.928178 0.117401 + -0.582589 0.17972 3.52715 -0.328464 -0.940223 0.0899577 + -0.41847 0.122742 3.48064 -0.307707 -0.949606 0.0597099 + -0.235534 0.064179 3.48367 -0.346292 -0.937974 -0.0169581 + -0.729601 0.216277 3.37663 -0.325913 -0.931132 0.163626 + -0.579692 0.171394 3.44337 -0.316242 -0.943453 0.099434 + -0.415573 0.114329 3.39681 -0.291532 -0.954205 0.0670897 + -0.234877 0.061445 3.40301 -0.287831 -0.95746 0.0206024 + -0.728382 0.197971 3.28954 -0.300918 -0.931631 0.203743 + -0.578215 0.159527 3.35832 -0.290687 -0.948393 0.126698 + -0.416776 0.109762 3.31652 -0.265352 -0.959941 0.0900068 + -0.240011 0.062836 3.3258 -0.268919 -0.962853 0.0244205 + -0.727645 0.176995 3.20547 -0.240519 -0.908464 0.341826 + -0.572743 0.148067 3.27457 -0.261168 -0.951636 0.161806 + -0.411303 0.098302 3.23277 -0.246099 -0.964385 0.096937 + -0.241214 0.058268 3.24551 -0.232564 -0.971402 0.0478737 + -0.731737 0.138056 3.12391 -0.183317 -0.917877 0.351989 + -0.572005 0.127007 3.19045 -0.192548 -0.954332 0.228419 + -0.413808 0.091427 3.15228 -0.197864 -0.970177 0.14002 + -0.251182 0.05854 3.16844 -0.213808 -0.975344 0.0546902 + -0.571155 0.111987 3.10727 -0.135003 -0.963711 0.230294 + -0.412958 0.07632 3.06904 -0.164885 -0.97552 0.145512 + -0.253687 0.051659 3.08796 -0.17859 -0.981442 0.0698416 + -0.136247 0.029047 3.06873 -0.177746 -0.983472 0.0344942 + -0.128314 0.029368 3.14517 -0.192969 -0.980971 0.0213986 + -0.41457 0.065308 2.98852 -0.0994723 -0.975113 0.198139 + -0.257193 0.049803 3.01057 -0.147046 -0.985872 0.0802129 + -0.139753 0.0271 2.9913 -0.176826 -0.983373 0.0413576 + -0.057365 0.016899 3.09136 -0.189413 -0.981345 0.0329282 + -0.049432 0.017313 3.16785 -0.220177 -0.975448 0.00477787 + -0.258805 0.038703 2.93 -0.094602 -0.987831 0.123453 + -0.144791 0.024377 2.91461 -0.154305 -0.985154 0.075238 + -0.067193 0.015366 3.01382 -0.194394 -0.979884 0.0451481 + -0.022521 0.005565 3.0174 -0.234458 -0.971898 0.0210687 + -0.012693 0.007103 3.09493 -0.545909 -0.836837 0.0410699 + -0.139603 0.017087 2.83684 -0.121366 -0.989332 0.0805702 + -0.072231 0.012645 2.93713 -0.189703 -0.980776 0.0457299 + -0.028391 0.003156 2.93997 -0.208115 -0.977209 0.0418421 + -0.005468 0.001829 3.01207 -0.105693 -0.994375 -0.0068918 + -0.005468 -0.002888 3.08724 -0.415117 -0.909698 0.011265 + -0.083299 0.012198 2.85971 -0.15622 -0.986313 0.0527342 + -0.03946 0.002704 2.86255 -0.327407 -0.941418 0.0808473 + -0.011338 -0.000585 2.93465 -0.122615 -0.989707 0.0738005 + 0.005478 0.001819 3.01208 0.104796 -0.99447 -0.00693339 + -0.043309 -0.002418 2.79002 -0.336811 -0.939596 0.0609669 + -0.011338 -0.012557 2.85838 -0.232525 -0.965861 0.114213 + 0.011342 -0.012567 2.8584 0.224626 -0.969097 0.101952 + 0.011342 -0.000595 2.93466 0.0928812 -0.990405 0.102329 + -0.015187 -0.017678 2.78586 -0.259508 -0.961864 0.0864487 + 0.015202 -0.017673 2.78585 0.243163 -0.964262 0.105216 + 0.039464 0.002694 2.86257 0.339633 -0.938111 0.0678075 + 0.028396 0.003146 2.93999 0.219049 -0.973626 0.063803 + 0.022531 0.005555 3.01741 0.234615 -0.971859 0.0211035 + 0.015202 -0.027834 2.70905 0.317365 -0.946797 0.0534323 + 0.043324 -0.002408 2.79001 0.346204 -0.935126 0.0753743 + 0.083303 0.012198 2.85971 0.172472 -0.982808 0.0658886 + 0.072235 0.012645 2.93713 0.193501 -0.980241 0.0410494 + 0.067193 0.015366 3.01382 0.192719 -0.980283 0.0436479 + 0.045049 -0.00408 2.7117 0.413914 -0.910105 0.0195777 + 0.086319 0.003583 2.70243 0.0410699 -0.996078 0.0783683 + 0.084593 0.005254 2.78074 0.153332 -0.986439 0.0585433 + 0.139607 0.017087 2.83684 0.117096 -0.98928 0.0872591 + 0.144795 0.024377 2.91461 0.144259 -0.987215 0.0677871 + 0.084669 -0.002766 2.62423 -0.0617981 -0.997488 0.0346231 + 0.139327 -0.007745 2.68045 -0.0714778 -0.987192 0.142629 + 0.140897 0.010143 2.75787 0.0428646 -0.988731 0.143434 + 0.253621 0.03142 2.85222 0.0631227 -0.985984 0.15444 + 0.251053 -0.004552 2.69472 -0.0205557 -0.977852 0.208287 + 0.252623 0.013338 2.77213 0.00454647 -0.974858 0.222781 + 0.419748 0.045343 2.9059 0.0382705 -0.972933 0.227898 + 0.414573 0.065225 2.98846 0.0925768 -0.977508 0.189494 + 0.258808 0.038709 2.92999 0.119044 -0.986881 0.109061 + 0.245864 -0.020802 2.61547 -0.0450001 -0.987796 0.149111 + 0.417835 0.000753 2.74293 -0.0102218 -0.967138 0.254046 + 0.41875 0.027259 2.82582 0.009627 -0.965158 0.26149 + 0.579673 0.064888 2.94204 0.0597813 -0.960795 0.270737 + 0.412647 -0.015497 2.66368 0.000161769 -0.984052 0.177879 + 0.578916 0.01297 2.77557 0.0462489 -0.96505 0.257953 + 0.579831 0.039477 2.85846 0.0267341 -0.954405 0.297314 + 0.568876 -0.006835 2.69207 0.058004 -0.980775 0.186324 + 0.733691 0.030489 2.78823 0.118975 -0.968217 0.220002 + 0.740988 0.051478 2.87467 0.10199 -0.958757 0.265297 + 0.740831 0.076886 2.95827 0.0930372 -0.937445 0.335471 + 0.723651 0.010684 2.70473 0.100899 -0.972782 0.2086 + 0.878345 0.056773 2.8081 0.161779 -0.952639 0.257502 + 0.885642 0.077761 2.89455 0.209306 -0.940553 0.26749 + 0.879242 0.105538 2.97704 0.190034 -0.918028 0.348011 + 0.735081 0.110928 3.0413 0.12501 -0.929839 0.346081 + 0.866441 0.031135 2.72791 0.14127 -0.962327 0.232314 + 1.0181 0.09005 2.83806 0.288674 -0.901849 0.321459 + 1.00819 0.121292 2.91955 0.309697 -0.893407 0.325442 + 1.00179 0.149068 3.00204 0.31055 -0.888948 0.336645 + 1.14825 0.135812 2.7952 0.477761 -0.836376 0.268737 + 1.13835 0.167054 2.87669 0.43871 -0.847828 0.29786 + 1.1375 0.190275 2.96227 0.404007 -0.865537 0.296013 + 0.987585 0.174579 3.08026 0.277919 -0.88612 0.370879 + 0.873492 0.139581 3.06007 0.171449 -0.904088 0.391445 + 1.27729 0.20953 2.76852 0.447254 -0.87839 0.168505 + 1.27644 0.232753 2.85409 0.419725 -0.880691 0.219577 + 1.27815 0.254457 2.9473 0.433511 -0.860289 0.268275 + 1.12329 0.215782 3.04049 0.383657 -0.865379 0.322376 + 1.36812 0.239706 2.69325 0.35387 -0.92621 0.130043 + 1.38555 0.257779 2.75535 0.401543 -0.894754 0.195395 + 1.38726 0.279569 2.84861 0.415337 -0.884371 0.213033 + 1.25862 0.275212 3.03255 0.34458 -0.911028 0.226479 + 1.10376 0.236451 3.12569 0.337351 -0.862155 0.377999 + 1.45865 0.292208 2.75412 0.377058 -0.897711 0.227907 + 1.43366 0.302875 2.84704 0.498047 -0.835579 0.231855 + 1.36228 0.290151 2.94148 0.369389 -0.907805 0.198601 + 1.22725 0.281244 3.12211 0.336045 -0.900284 0.2767 + 1.53776 0.278788 2.59336 0.289635 -0.937107 0.194788 + 1.52991 0.303479 2.69539 0.263006 -0.938207 0.224936 + 1.52448 0.322081 2.78258 0.239668 -0.947407 0.212085 + 1.43646 0.319034 2.89445 0.402411 -0.886375 0.228921 + 1.3309 0.296182 3.03103 0.391174 -0.893738 0.219579 + 1.55052 0.27074 2.5231 0.251055 -0.961182 0.114455 + 1.60411 0.296972 2.58606 0.255773 -0.952171 0.167186 + 1.60493 0.308399 2.65827 0.215367 -0.958995 0.184244 + 1.5995 0.32692 2.74539 0.244897 -0.9413 0.232335 + 1.61079 0.282559 2.44383 0.307897 -0.949251 0.0641983 + 1.61687 0.289009 2.51586 0.288656 -0.95256 0.0964765 + 1.68044 0.311601 2.54813 0.280225 -0.954062 0.106022 + 1.68126 0.323028 2.62033 0.290887 -0.93879 0.184549 + 1.67697 0.338785 2.69304 0.347961 -0.902702 0.253084 + 1.67283 0.301677 2.40131 0.326744 -0.944974 -0.0162184 + 1.67891 0.30813 2.47334 0.294815 -0.954304 0.0488664 + 1.76063 0.331107 2.49574 0.393415 -0.916542 0.0719432 + 1.75666 0.338295 2.57209 0.421724 -0.892274 0.161231 + 1.75237 0.35405 2.6448 0.473063 -0.833312 0.286012 + 1.66911 0.305741 2.32728 0.358539 -0.931453 -0.0620026 + 1.75689 0.338735 2.34433 0.370444 -0.922719 -0.106588 + 1.8377 0.380109 2.51327 0.619263 -0.770963 0.14876 + 1.90183 0.448913 2.5195 0.720918 -0.663364 0.200564 + 1.82288 0.386233 2.58806 0.629101 -0.736658 0.248124 + 1.74226 0.381653 2.72039 0.523959 -0.785853 0.328483 + 1.67252 0.357199 2.76395 0.407948 -0.861818 0.301411 + 1.59506 0.345333 2.8163 0.318901 -0.905614 0.27958 + 1.88033 0.447599 2.59177 0.735914 -0.618859 0.274672 + 1.81277 0.413835 2.66365 0.638111 -0.697144 0.326811 + 1.80017 0.435389 2.73712 0.64469 -0.686637 0.336012 + 1.73703 0.409576 2.79283 0.551789 -0.754433 0.355471 + 1.66729 0.385121 2.83638 0.460618 -0.814041 0.353791 + 1.97125 0.522689 2.50491 0.783444 -0.544054 0.300367 + 1.94391 0.538627 2.57991 0.824773 -0.422136 0.376233 + 1.86774 0.469151 2.66524 0.74995 -0.572201 0.331906 + 2.04338 0.641992 2.48507 0.8003 -0.356393 0.482186 + 2.00156 0.671104 2.55665 0.815761 -0.367652 0.446504 + 1.9252 0.559805 2.65102 0.853673 -0.381397 0.354654 + 1.84902 0.490325 2.73637 0.765963 -0.540033 0.348804 + 2.08783 0.747855 2.47611 0.728122 -0.512401 0.455283 + 2.05961 0.759091 2.55805 0.676199 -0.714293 0.180389 + 1.97589 0.68658 2.63224 0.807879 -0.554937 0.198437 + 1.89952 0.575276 2.72663 0.835641 -0.416735 0.35782 + 2.14557 0.806572 2.49401 0.636439 -0.741605 0.212056 + 2.12988 0.805667 2.58238 0.633329 -0.758526 0.153404 + 2.04427 0.746279 2.64364 0.668605 -0.734754 0.114475 + 1.96054 0.673768 2.71784 0.776055 -0.602021 0.187908 + 2.12532 0.8343 2.67978 0.703705 -0.635687 0.317335 + 2.03971 0.774912 2.74105 0.727287 -0.637899 0.253256 + 1.97095 0.723982 2.81546 0.73085 -0.638748 0.240539 + 1.88301 0.61507 2.7967 0.801144 -0.499889 0.329058 + 2.1098 0.896364 2.79808 0.781095 -0.582923 0.22381 + 2.07563 0.857085 2.85552 0.770821 -0.608836 0.187495 + 2.00687 0.806154 2.92993 0.730264 -0.637064 0.246706 + 1.89342 0.665197 2.89428 0.740708 -0.622613 0.252396 + 1.82403 0.563674 2.87752 0.818069 -0.479014 0.318289 + 2.21145 0.973508 2.71487 0.709761 -0.578447 0.402042 + 2.27515 1.08941 2.76691 0.716988 -0.627549 0.303496 + 2.20761 1.03299 2.84985 0.757698 -0.64678 0.087003 + 2.17343 0.993706 2.90729 0.755539 -0.640832 0.135995 + 2.4665 1.2873 2.72756 0.824175 -0.499171 0.267515 + 2.39896 1.23088 2.81049 0.780419 -0.592657 0.19926 + 2.31753 1.15141 2.90992 0.768974 -0.608232 0.196809 + 2.2371 1.09047 2.99829 0.727608 -0.602398 0.328182 + 2.093 0.932672 2.9956 0.73203 -0.621668 0.278677 + 2.63704 1.62676 2.7512 0.879415 -0.415083 0.233099 + 2.56483 1.51211 2.81178 0.861252 -0.429022 0.272368 + 2.48791 1.4137 2.88484 0.839807 -0.455684 0.295089 + 2.40648 1.33423 2.98427 0.816887 -0.464329 0.342191 + 2.66443 1.83164 2.93074 0.862754 -0.373821 0.34046 + 2.58932 1.72218 2.99012 0.848903 -0.385681 0.361406 + 2.5124 1.62377 3.06318 0.837052 -0.398514 0.374873 + 2.43139 1.53416 3.14119 0.817052 -0.414312 0.400963 + 2.75351 2.22044 3.07832 0.887369 -0.304368 0.34632 + 2.69228 2.10032 3.12978 0.872048 -0.335766 0.356081 + 2.61717 1.99095 3.18921 0.856066 -0.360912 0.369992 + 2.54987 1.87835 3.24403 0.852742 -0.377318 0.361196 + 2.7715 2.56331 3.31005 0.888469 -0.275229 0.367249 + 2.71027 2.44319 3.36151 0.897166 -0.27624 0.344651 + 2.65797 2.31693 3.40519 0.882 -0.30097 0.362619 + 2.59067 2.20433 3.46002 0.873434 -0.322625 0.364728 + 2.84745 2.98667 3.42657 0.919023 -0.228203 0.321433 + 2.78998 2.87553 3.49106 0.902217 -0.25822 0.345438 + 2.73795 2.76963 3.5519 0.903081 -0.256803 0.344235 + 2.68565 2.64337 3.59557 0.885822 -0.270075 0.377331 + 2.86219 3.25922 3.54671 0.931082 -0.125918 0.342391 + 2.81782 3.17507 3.64045 0.908045 -0.161303 0.386569 + 2.76579 3.06917 3.70128 0.871917 -0.220282 0.437307 + 2.71231 2.98091 3.75194 0.846006 -0.23613 0.478034 + 2.91085 3.34236 3.45169 0.932995 -0.109232 0.342912 + 2.86882 3.6075 3.58566 0.918821 0.0191131 0.394212 + 2.82858 3.53202 3.684 0.915992 0.00166416 0.401192 + 2.78421 3.44796 3.7778 0.893693 -0.0386005 0.447016 + 2.73363 3.37131 3.86196 0.849296 -0.103629 0.517646 + 2.91061 3.68128 3.48288 0.932271 0.0574913 0.357162 + 2.77752 3.86569 3.72906 0.869644 0.183478 0.458317 + 2.73728 3.79021 3.8274 0.860969 0.157561 0.48364 + 2.69578 3.71683 3.92249 0.839304 0.117564 0.530798 + 2.64521 3.64027 4.0067 0.825363 0.0655243 0.560787 + 2.81027 3.93579 3.62845 0.881263 0.221044 0.417749 + 2.65981 4.2023 3.73764 0.800813 0.365353 0.474568 + 2.62706 4.1322 3.83826 0.788217 0.33311 0.517447 + 2.57458 4.05159 3.96266 0.774472 0.309838 0.551538 + 2.53309 3.97831 4.05781 0.761553 0.295189 0.576975 + 2.69624 4.2745 3.60898 0.811777 0.390578 0.434128 + 2.48365 4.46478 3.7772 0.722277 0.477387 0.500417 + 2.41988 4.38871 3.93257 0.70421 0.451007 0.548344 + 2.3674 4.3081 4.05697 0.688713 0.417396 0.592836 + 2.52007 4.5369 3.64849 0.744217 0.509115 0.432369 + 2.30518 4.77869 3.6845 0.668764 0.58469 0.459231 + 2.26262 4.69396 3.83745 0.650303 0.558412 0.515056 + 2.19885 4.61797 3.99287 0.629096 0.535358 0.563587 + 2.32379 4.85822 3.53916 0.681875 0.598803 0.420096 + 2.06904 5.08721 3.59373 0.609577 0.645066 0.460767 + 2.04024 5.00608 3.73765 0.588631 0.635531 0.499614 + 1.99768 4.92135 3.8906 0.569334 0.621192 0.538497 + 2.35703 4.93946 3.37123 0.691627 0.597259 0.40612 + 2.10228 5.16854 3.42585 0.624334 0.643193 0.443294 + 1.83605 5.37169 3.47939 0.5523 0.686016 0.473653 + 1.7827 5.29043 3.64674 0.528337 0.682205 0.505427 + 2.38671 5.03469 3.1669 0.705799 0.599771 0.376992 + 2.14678 5.24937 3.24905 0.639582 0.645464 0.417506 + 1.88054 5.45252 3.30259 0.564334 0.700318 0.437129 + 2.15799 5.36113 3.04749 0.644118 0.656742 0.392176 + 1.88536 5.57239 3.09256 0.562162 0.71492 0.415768 + 1.57272 5.63453 3.36494 0.485663 0.750627 0.447985 + 1.55978 5.56028 3.50194 0.482617 0.734066 0.477731 + 1.50643 5.47902 3.66929 0.459996 0.706389 0.537976 + 2.17244 5.50219 2.78196 0.660012 0.660936 0.357137 + 1.8998 5.71355 2.82708 0.564536 0.722204 0.399651 + 1.54926 5.91866 2.89781 0.486488 0.76343 0.424859 + 1.57754 5.7544 3.15491 0.487899 0.755819 0.436683 + 1.28068 5.78732 3.39111 0.404312 0.786735 0.466454 + 2.18262 5.59851 2.57112 0.684506 0.666897 0.294448 + 1.8881 5.8293 2.62758 0.574272 0.734283 0.361994 + 1.53756 6.03442 2.69831 0.486178 0.774635 0.40444 + 1.25476 6.06039 2.95013 0.393231 0.80018 0.452858 + 1.28304 5.89613 3.20723 0.40484 0.788817 0.462464 + 1.84999 5.92615 2.48144 0.565953 0.743822 0.355564 + 1.53535 6.10826 2.55442 0.488287 0.786093 0.378989 + 1.23443 6.24429 2.6212 0.396847 0.819859 0.412728 + 1.23664 6.17045 2.76509 0.392648 0.813214 0.429547 + 0.997951 6.13756 2.99886 0.324617 0.825652 0.461434 + 0.939671 6.31905 2.71111 0.300156 0.848784 0.435285 + 0.979823 6.24763 2.81382 0.313377 0.83241 0.457044 + 0.783409 6.18987 3.04706 0.264558 0.846345 0.462287 + 1.00322 6.01473 3.21841 0.332757 0.8177 0.469723 + 1.00086 5.90592 3.40229 0.315086 0.799533 0.511339 + 0.674401 6.34161 2.83165 0.238381 0.852093 0.465954 + 0.714553 6.27018 2.93436 0.245672 0.848341 0.469002 + 0.557653 6.13094 3.26013 0.212372 0.845695 0.489589 + 0.788676 6.06704 3.26661 0.267708 0.830228 0.488932 + 0.756484 5.99632 3.3973 0.250507 0.811743 0.52756 + 0.644018 6.42086 2.69499 0.235396 0.873096 0.426957 + 0.45681 6.34753 2.91038 0.186247 0.864038 0.467707 + 0.488798 6.21125 3.14743 0.201918 0.857328 0.473516 + 0.327174 6.15706 3.3087 0.176032 0.85643 0.485325 + 0.525461 6.06022 3.39082 0.213677 0.828862 0.517039 + 0.587404 6.47226 2.61534 0.210112 0.887176 0.410819 + 0.388277 6.47524 2.68259 0.124825 0.896385 0.425339 + 0.426427 6.4267 2.77367 0.154748 0.885724 0.437659 + 0.271817 6.35498 2.96229 0.108529 0.884751 0.453252 + 0.295187 6.29334 3.07165 0.148546 0.870544 0.469135 + 0.759644 6.52008 2.36851 0.268079 0.912171 0.309962 + 0.572748 6.51135 2.53785 0.227254 0.897194 0.37868 + 0.373621 6.51423 2.60505 0.120753 0.903521 0.411179 + 0.233667 6.40344 2.87116 0.0585024 0.901215 0.429406 + 0.686856 6.56267 2.30035 0.272553 0.910747 0.310249 + 0.49996 6.55393 2.46969 0.173065 0.921237 0.348384 + 0.400587 6.57829 2.44071 0.13517 0.914495 0.381351 + 0.274247 6.53868 2.5761 0.0635051 0.919083 0.388912 + 0.822127 6.61587 2.016 0.296922 0.916884 0.266759 + 0.581013 6.59979 2.28966 0.258678 0.903077 0.342836 + 0.349068 6.61759 2.37783 0.136546 0.902966 0.407439 + 0.141685 6.57025 2.50863 0.037565 0.911875 0.408745 + 0.824584 6.64574 1.90967 0.338734 0.911209 0.23443 + 0.529494 6.63918 2.22683 0.206397 0.927995 0.310203 + 0.531951 6.66896 2.12045 0.217955 0.941752 0.256122 + 0.326565 6.65188 2.30544 0.147469 0.921502 0.359287 + 0.119182 6.60453 2.43624 0.0389747 0.91035 0.412 + 0.474678 6.69206 2.07765 0.193211 0.948023 0.252828 + 0.638605 6.73993 1.72974 0.250156 0.954855 0.160228 + 0.414618 6.72581 1.99439 0.172462 0.958677 0.226265 + 0.269292 6.67497 2.26263 0.0982191 0.937131 0.334871 + 0.200218 6.68836 2.23805 0.0540197 0.94385 0.325928 + 0.050108 6.61792 2.41166 0.0148797 0.913553 0.406449 + 0.294177 6.73724 2.02838 0.112282 0.967813 0.225233 + -0.050108 6.70567 2.20727 -0.0185939 0.950177 0.311156 + 0.144067 6.75447 1.99756 0.0674644 0.97135 0.227878 + 0.345751 6.08485 3.42576 0.197929 0.837581 0.509198 + 0.549237 5.97989 3.50496 0.223845 0.817178 0.531144 + 0.741024 5.91316 3.52434 0.2526 0.803107 0.53964 + 0.369527 6.00461 3.53995 0.21342 0.819175 0.532357 + 0.537997 5.88923 3.64818 0.223215 0.816817 0.531963 + 0.729784 5.82241 3.66751 0.26094 0.808392 0.527648 + 0.985396 5.82275 3.52933 0.295445 0.787513 0.540865 + 0.375098 5.93861 3.63925 0.214275 0.818843 0.532525 + 0.530928 5.7715 3.8319 0.218166 0.808617 0.546391 + 0.706856 5.73509 3.81456 0.255343 0.802228 0.539657 + 0.939765 5.64185 3.82746 0.32104 0.776834 0.541722 + 0.962693 5.72918 3.6804 0.305318 0.789086 0.533033 + 0.368029 5.82088 3.82297 0.202782 0.809691 0.550709 + 0.517657 5.66625 3.9878 0.196518 0.786404 0.585619 + 0.693585 5.62984 3.97047 0.255292 0.782145 0.568397 + 0.887986 5.53922 3.99263 0.313606 0.754968 0.575912 + 1.17714 5.49992 3.8751 0.366756 0.73621 0.568757 + 0.355791 5.75569 3.91968 0.174558 0.789322 0.588643 + 0.488028 5.58849 4.09428 0.165202 0.768102 0.61865 + 0.661059 5.50964 4.14565 0.231286 0.756949 0.611175 + 0.85546 5.41902 4.1678 0.312914 0.72923 0.608529 + 0.326162 5.67794 4.02615 0.137714 0.770415 0.622492 + 0.420165 5.48927 4.23294 0.136756 0.7557 0.640481 + 0.593196 5.41042 4.28431 0.204667 0.732211 0.649598 + 0.798127 5.31308 4.3117 0.28831 0.689753 0.664167 + 1.08361 5.29444 4.18419 0.363359 0.692846 0.622843 + 0.286638 5.61296 4.1119 0.106079 0.761158 0.639833 + 0.331182 5.372 4.38366 0.101051 0.737328 0.667934 + 0.503427 5.31304 4.41678 0.178207 0.714874 0.676164 + 0.708359 5.21562 4.44412 0.274202 0.659676 0.699743 + 0.197655 5.49568 4.26263 0.0849289 0.748852 0.657273 + 0.288186 5.27331 4.49538 0.0325703 0.704415 0.709041 + 0.460431 5.21435 4.5285 0.165698 0.669112 0.724453 + 0.632041 5.1284 4.55099 0.249119 0.622421 0.741979 + 0.960334 5.09124 4.44514 0.333484 0.613815 0.715555 + 0.13439 5.44638 4.32683 0.0988213 0.726283 0.680255 + 0.158013 5.22322 4.54455 0.0596786 0.673818 0.736483 + 0.237468 5.2187 4.54617 0.0182112 0.672397 0.739966 + 0.375694 5.11286 4.63109 0.125884 0.626533 0.769162 + 0.547303 5.02682 4.65352 0.211203 0.592295 0.777547 + 0.057219 5.19265 4.58649 0.0661675 0.636753 0.768224 + 0.057219 4.99359 4.73147 -0.000951834 0.568615 0.822603 + 0.178172 5.00026 4.72992 -0.00246085 0.587644 0.809116 + 0.257627 4.99574 4.73155 0.0446175 0.574868 0.817029 + 0.324975 5.05817 4.68183 0.0774402 0.606287 0.791466 + -0.057219 4.99359 4.73147 0.009684 0.55878 0.82926 + -0.082772 4.79088 4.85818 0.00792762 0.471989 0.881569 + 0.082772 4.79088 4.85818 -0.00729618 0.471345 0.881918 + 0.203725 4.79746 4.85658 0.00614009 0.477745 0.878477 + -0.285444 4.61442 4.94182 -0.00909633 0.34753 0.937625 + -0.082772 4.60556 4.94236 0.00584276 0.338859 0.940819 + 0.082772 4.60556 4.94237 -0.00550107 0.339355 0.940642 + -0.414322 4.60138 4.944 -0.0730218 0.350262 0.933801 + -0.543759 4.3414 5.00711 -0.096371 0.255155 0.962085 + -0.32929 4.34471 5.01577 -0.0174748 0.231047 0.972786 + -0.126618 4.33594 5.01637 0.00453156 0.223685 0.974651 + 0.126618 4.33593 5.01637 -0.0036363 0.222666 0.974888 + -0.652423 4.35926 4.98337 -0.163386 0.293037 0.942037 + -0.865682 4.01294 5.04901 -0.158428 0.20174 0.966541 + -0.630538 3.96772 5.07934 -0.0683377 0.159628 0.984809 + -0.416069 3.97103 5.08801 -0.0130168 0.152022 0.988291 + -0.993086 3.68812 5.07863 -0.145179 0.109087 0.983373 + -0.757941 3.64289 5.10896 -0.0829358 0.0858739 0.992848 + -0.68639 3.5435 5.12112 -0.0908882 0.0567809 0.994241 + -0.617987 3.54915 5.12692 -0.0555106 0.0607834 0.996606 + -0.458076 3.63911 5.12571 -0.00482345 0.0729424 0.997324 + -1.14611 3.67064 5.05489 -0.209345 0.114193 0.971151 + -1.07239 3.31675 5.08426 -0.149515 -0.0227936 0.988497 + -0.958763 3.27031 5.09969 -0.155883 -0.0308165 0.987295 + -0.887212 3.17091 5.11186 -0.186098 -0.111764 0.976154 + -1.35755 3.42205 5.02166 -0.347305 0.0322172 0.937199 + -1.22541 3.29936 5.06057 -0.221265 -0.0421611 0.974302 + -1.21843 3.01113 5.0242 -0.237574 -0.211563 0.94805 + -1.46484 3.21364 4.96944 -0.391974 -0.0899445 0.915569 + -1.33271 3.09095 5.00835 -0.319776 -0.162291 0.933491 + -1.35202 2.81481 4.92064 -0.243946 -0.370148 0.896371 + -1.10481 2.96469 5.03964 -0.147728 -0.250786 0.956704 + -1.58122 3.30616 4.9266 -0.418372 -0.049682 0.906916 + -1.57552 2.96247 4.87328 -0.445247 -0.222031 0.867443 + -1.46629 2.89463 4.90478 -0.373747 -0.274154 0.886088 + -1.44593 2.60017 4.80041 -0.265986 -0.404283 0.875104 + -1.24339 2.76206 4.9082 -0.186225 -0.427257 0.884744 + -1.6919 3.05489 4.8304 -0.476125 -0.19396 0.857721 + -1.66799 2.72722 4.74575 -0.486702 -0.323524 0.811451 + -1.55875 2.65939 4.77724 -0.411929 -0.357509 0.838154 + -1.7774 2.78615 4.69809 -0.525407 -0.309852 0.792426 + -1.72681 2.49021 4.58866 -0.523177 -0.367512 0.768909 + -1.61373 2.43179 4.63605 -0.456024 -0.379509 0.804994 + -1.50091 2.37249 4.65916 -0.365956 -0.379789 0.84961 + -1.61944 2.1369 4.49541 -0.503119 -0.355866 0.787548 + -1.50006 2.09219 4.54966 -0.42656 -0.33998 0.838129 + -1.37672 2.32352 4.68958 -0.306188 -0.35425 0.883604 + -1.33731 2.54742 4.78797 -0.181192 -0.390987 0.902385 + -1.4519 1.7518 4.43043 -0.517268 -0.343495 0.783865 + -1.33155 1.71384 4.49857 -0.466253 -0.310613 0.828329 + -1.37586 2.04314 4.58001 -0.364773 -0.302321 0.880649 + -1.24894 2.0079 4.62565 -0.342694 -0.280648 0.896547 + -1.25794 2.27592 4.70703 -0.27795 -0.313926 0.907851 + -1.28469 1.42995 4.40648 -0.523484 -0.356986 0.773645 + -1.16026 1.40077 4.47283 -0.448639 -0.329041 0.830936 + -1.20462 1.67869 4.54425 -0.388639 -0.278691 0.878232 + -1.11225 1.17063 4.39344 -0.502591 -0.390755 0.771176 + -0.985985 1.14855 4.46448 -0.417304 -0.361795 0.833644 + -1.0296 1.369 4.51986 -0.364949 -0.290132 0.884667 + -1.07396 1.64692 4.59128 -0.327578 -0.257932 0.908935 + -0.949773 0.968969 4.39253 -0.42568 -0.467572 0.774708 + -0.811769 0.938248 4.43574 -0.304831 -0.47348 0.826374 + -0.851214 1.11841 4.50649 -0.295048 -0.344777 0.891109 + -0.89483 1.33894 4.56192 -0.278806 -0.270597 0.921436 + -0.781792 0.809541 4.36027 -0.291312 -0.588875 0.753899 + -0.640455 0.753492 4.35995 -0.218559 -0.616575 0.756351 + -0.671365 0.901889 4.45952 -0.187984 -0.477371 0.858358 + -0.71081 1.08213 4.53032 -0.203492 -0.340799 0.917849 + -0.603886 0.57968 4.2122 -0.204478 -0.682206 0.701985 + -0.457249 0.502509 4.16846 -0.181902 -0.706786 0.683641 + -0.505232 0.693511 4.34644 -0.146638 -0.628048 0.764234 + -0.536142 0.841995 4.44606 -0.114587 -0.508646 0.853316 + -0.413246 0.285763 3.95348 -0.112729 -0.759461 0.640712 + -0.227673 0.222295 3.88321 -0.114031 -0.794323 0.596697 + -0.336282 0.412749 4.11293 -0.221337 -0.757548 0.614109 + -0.384266 0.603749 4.29091 -0.126542 -0.650435 0.748947 + -0.199094 0.111016 3.73595 -0.16742 -0.856193 0.488779 + -0.081146 0.054032 3.68825 -0.160018 -0.818297 0.552073 + -0.118188 0.172667 3.84657 -0.0611245 -0.789582 0.610593 + -0.226797 0.363122 4.07629 -0.155787 -0.757273 0.634246 + -0.104906 0.019918 3.59514 -0.49197 -0.81746 0.299542 + -0.032368 -0.044339 3.60443 -0.279536 -0.828981 0.484407 + -0.032368 0.030536 3.65695 0.0757885 -0.682439 0.727003 + -0.069411 0.149083 3.81521 -0.162708 -0.821924 0.545864 + -0.109104 0.005884 3.52904 -0.53606 -0.840783 0.0756582 + -0.036567 -0.058374 3.53834 -0.300194 -0.948498 -0.10117 + 0.036568 -0.058369 3.53833 0.331794 -0.933619 -0.135158 + 0.032373 -0.044339 3.60443 0.307896 -0.79988 0.515162 + -0.107572 0.008307 3.45165 -0.399618 -0.902064 -0.163052 + -0.036567 -0.018551 3.47337 -0.110209 -0.917471 -0.382232 + 0.036568 -0.018547 3.47336 0.21938 -0.926087 -0.306977 + 0.109105 0.005889 3.52904 0.485817 -0.873742 0.0235984 + 0.10491 0.019918 3.59514 0.438857 -0.827357 0.350549 + -0.107747 0.02312 3.37639 -0.334062 -0.940766 -0.0579841 + -0.036742 -0.00374 3.39811 -0.13722 -0.974925 -0.175192 + 0.036742 -0.00374 3.39811 0.150444 -0.969559 -0.193188 + 0.107573 0.008312 3.45164 0.368661 -0.921873 -0.119331 + -0.112881 0.02451 3.29918 -0.238683 -0.970165 -0.0425471 + -0.036742 0.011515 3.32289 -0.0877069 -0.990913 -0.101977 + 0.036742 0.011515 3.32289 0.127384 -0.989278 -0.0714273 + 0.107747 0.02312 3.37639 0.295661 -0.951092 -0.089489 + 0.235538 0.064179 3.48367 0.349687 -0.936789 -0.0120809 + -0.118346 0.029102 3.22223 -0.206854 -0.978367 0.00299602 + -0.042206 0.01602 3.24589 -0.224925 -0.974235 -0.0165609 + 0.001808 0.003301 3.25612 -0.152057 -0.987796 0.0337263 + -0.00902 0.004506 3.17803 -0.6074 -0.794312 -0.0115841 + -0.001795 -0.013757 3.24666 -0.565669 -0.725684 0.391666 + 0.001808 0.003301 3.25612 -0.000334 -0.484823 0.874612 + 0.001808 -0.013762 3.24667 -0.0023907 -0.887409 0.460977 + -0.001795 -0.005478 3.17033 -0.457664 -0.888022 -0.0442719 + 0.005478 -0.002898 3.08726 0.414386 -0.91003 0.0113895 + 0.009033 0.004594 3.17808 0.571837 -0.819982 0.0251326 + 0.001808 0.003301 3.25612 0.327917 -0.944672 -0.00810761 + 0.012703 0.007093 3.09495 0.545859 -0.836854 0.041393 + 0.049429 0.017318 3.16784 0.223219 -0.974734 0.00823755 + 0.042204 0.016025 3.24588 0.230259 -0.972959 -0.0181781 + 0.112881 0.02451 3.29918 0.225763 -0.973854 -0.025298 + 0.057365 0.016899 3.09136 0.188742 -0.981457 0.0334541 + 0.128312 0.029374 3.14516 0.191887 -0.981143 0.0231842 + 0.118344 0.029107 3.22222 0.202844 -0.979211 -0.000587482 + 0.240013 0.062841 3.32579 0.27246 -0.961723 0.0292462 + 0.234878 0.06145 3.403 0.297965 -0.954448 0.0156532 + 0.136247 0.029047 3.06873 0.179538 -0.983107 0.0355803 + 0.251182 0.05854 3.16844 0.217895 -0.97409 0.0605827 + 0.241214 0.058268 3.24551 0.243353 -0.968986 0.0429475 + 0.415574 0.114334 3.3968 0.28046 -0.957062 0.0733089 + 0.418471 0.122747 3.48063 0.305017 -0.95071 0.0558167 + 0.139753 0.0271 2.9913 0.177521 -0.983276 0.0406776 + 0.257193 0.049803 3.01057 0.153721 -0.984058 0.0894388 + 0.253687 0.051659 3.08796 0.199049 -0.978195 0.0592768 + 0.411303 0.098302 3.23277 0.232739 -0.966894 0.104638 + 0.416776 0.109762 3.31652 0.262048 -0.961217 0.0859871 + 0.412958 0.07632 3.06904 0.143879 -0.976982 0.157498 + 0.413808 0.091427 3.15228 0.192239 -0.972347 0.132612 + 0.572745 0.148072 3.27457 0.266854 -0.949124 0.167191 + 0.578218 0.159532 3.35832 0.300646 -0.946352 0.118451 + 0.579692 0.171394 3.44337 0.318611 -0.942383 0.101989 + 0.57116 0.111997 3.10725 0.1552 -0.955842 0.249555 + 0.57201 0.127017 3.19044 0.22425 -0.952895 0.204211 + 0.728385 0.197976 3.28953 0.291852 -0.93287 0.211131 + 0.729604 0.216282 3.37662 0.320706 -0.933856 0.158303 + 0.731078 0.228144 3.46168 0.349335 -0.929241 0.120313 + 0.574499 0.084859 3.02466 0.0898395 -0.956272 0.278338 + 0.731742 0.138062 3.12391 0.153541 -0.915014 0.37306 + 0.727649 0.177005 3.20545 0.222837 -0.919064 0.325061 + 0.848913 0.240285 3.30245 0.271862 -0.923503 0.270617 + 0.862604 0.172535 3.13899 0.187145 -0.892695 0.409966 + 0.858511 0.211475 3.22055 0.208629 -0.897126 0.389408 + 0.946212 0.270982 3.31688 0.254217 -0.914281 0.315379 + 0.931263 0.292165 3.39719 0.310634 -0.92007 0.238699 + 0.850132 0.258502 3.3895 0.334571 -0.922842 0.190852 + 0.976696 0.207529 3.15919 0.253914 -0.86402 0.434737 + 0.95581 0.242177 3.23497 0.253761 -0.884774 0.390871 + 1.0655 0.294472 3.2842 0.262135 -0.913895 0.309971 + 1.08288 0.271099 3.20148 0.28156 -0.879744 0.383112 + 1.20987 0.304616 3.20482 0.31726 -0.88963 0.328486 + 1.19868 0.33381 3.29126 0.315343 -0.893151 0.320686 + 1.05055 0.315746 3.36455 0.263823 -0.915205 0.304627 + 1.3337 0.312427 3.07849 0.447854 -0.841028 0.303477 + 1.3225 0.341615 3.16494 0.431964 -0.843568 0.319061 + 1.31136 0.370904 3.26321 0.426614 -0.83856 0.338849 + 1.19284 0.361408 3.37566 0.347059 -0.865253 0.361784 + 1.04472 0.343259 3.44889 0.312963 -0.916589 0.248833 + 1.42643 0.338359 2.99638 0.419544 -0.869238 0.261549 + 1.41528 0.367649 3.09465 0.408669 -0.865376 0.290023 + 1.40032 0.392958 3.19481 0.422256 -0.851119 0.311923 + 1.31733 0.415865 3.35093 0.41307 -0.838289 0.35587 + 1.19881 0.406289 3.46332 0.374615 -0.875478 0.305289 + 1.51444 0.341323 2.88444 0.287252 -0.926237 0.244072 + 1.50741 0.365523 2.97093 0.31599 -0.907338 0.277286 + 1.49244 0.390831 3.07109 0.422317 -0.844767 0.328659 + 1.39312 0.42388 3.28325 0.465354 -0.811461 0.35352 + 1.31013 0.446875 3.43942 0.395502 -0.870851 0.291885 + 1.58802 0.369624 2.90283 0.386405 -0.863202 0.324921 + 1.58562 0.400512 2.97013 0.491139 -0.783373 0.380931 + 1.57678 0.433576 3.05126 0.529764 -0.742832 0.409329 + 1.4836 0.423983 3.15228 0.509998 -0.775846 0.371437 + 1.37266 0.457595 3.38146 0.528131 -0.762577 0.373569 + 1.66489 0.416009 2.90369 0.501145 -0.772422 0.390151 + 1.66384 0.452729 2.97368 0.511262 -0.749391 0.420742 + 1.57649 0.475865 3.11521 0.602225 -0.663438 0.444044 + 1.46315 0.457696 3.25048 0.578553 -0.711724 0.398404 + 1.73252 0.44351 2.86665 0.570408 -0.727361 0.381551 + 1.73147 0.480144 2.9366 0.576297 -0.726158 0.374935 + 1.73419 0.51828 3.00855 0.551899 -0.700002 0.453216 + 1.66355 0.495025 3.03763 0.513986 -0.696268 0.501028 + 1.79567 0.469321 2.81095 0.671908 -0.645368 0.363372 + 1.78719 0.502876 2.88203 0.714444 -0.602467 0.355814 + 1.78991 0.540926 2.95392 0.749658 -0.58429 0.310834 + 1.7967 0.596245 3.03211 0.704553 -0.589816 0.394615 + 1.73411 0.56452 3.06706 0.530344 -0.646039 0.54897 + 1.84054 0.52388 2.80745 0.79937 -0.467143 0.37787 + 1.83081 0.618993 2.95571 0.790551 -0.555546 0.257676 + 1.86135 0.698286 3.07397 0.673053 -0.620744 0.402091 + 1.7962 0.650267 3.09174 0.595544 -0.597516 0.536937 + 1.73362 0.618536 3.1267 0.474475 -0.634289 0.61037 + 1.66347 0.54126 3.09615 0.540523 -0.618665 0.570166 + 1.57356 0.529691 3.20318 0.67781 -0.536753 0.502463 + 1.92395 0.74449 3.01254 0.72532 -0.639365 0.255192 + 2.01009 0.871012 3.0782 0.711283 -0.596358 0.372067 + 1.92477 0.837049 3.16022 0.629837 -0.572718 0.524689 + 1.85963 0.789033 3.17799 0.608632 -0.585414 0.535591 + 2.1368 1.04701 3.10196 0.693286 -0.573013 0.437049 + 2.05149 1.01305 3.18398 0.661839 -0.564429 0.493345 + 1.94244 0.986556 3.28547 0.628497 -0.573755 0.525164 + 1.85479 0.947356 3.34897 0.687797 -0.570221 0.449203 + 1.77198 0.749834 3.24148 0.515624 -0.656931 0.550066 + 2.32079 1.26567 3.08063 0.766598 -0.503798 0.39814 + 2.22049 1.22221 3.1843 0.705785 -0.554902 0.440399 + 2.12533 1.1769 3.28579 0.676659 -0.585434 0.446541 + 2.01628 1.1504 3.38728 0.628891 -0.63108 0.454129 + 2.34569 1.46559 3.23756 0.816545 -0.418963 0.397144 + 2.26637 1.40325 3.33934 0.766578 -0.480165 0.426379 + 2.17121 1.35793 3.44083 0.73695 -0.515792 0.43688 + 2.07879 1.30819 3.53959 0.697343 -0.564514 0.441629 + 2.46886 1.78873 3.32206 0.82969 -0.406358 0.382736 + 2.39338 1.69648 3.39225 0.8291 -0.411664 0.37832 + 2.31407 1.63413 3.49404 0.799174 -0.42957 0.420465 + 2.22659 1.56377 3.5783 0.764632 -0.457583 0.453824 + 2.53005 2.083 3.50337 0.855668 -0.34827 0.382805 + 2.45458 1.99083 3.57362 0.812611 -0.382608 0.439629 + 2.37167 1.88962 3.62912 0.791261 -0.394638 0.467083 + 2.28419 1.81926 3.71338 0.757369 -0.397263 0.518242 + 2.62818 2.5354 3.64319 0.865408 -0.285657 0.411666 + 2.56756 2.41416 3.68659 0.840556 -0.301375 0.450154 + 2.49612 2.30505 3.73457 0.793605 -0.327569 0.512728 + 2.41321 2.20392 3.79012 0.761967 -0.340472 0.550895 + 2.65484 2.87294 3.79956 0.830736 -0.245185 0.499761 + 2.58992 2.76565 3.84838 0.802469 -0.261549 0.536317 + 2.51848 2.65663 3.89642 0.768456 -0.278719 0.576013 + 2.4407 2.55846 3.94625 0.741408 -0.292855 0.60378 + 2.68016 3.28305 3.91262 0.812082 -0.160733 0.56097 + 2.61945 3.19332 3.97685 0.800725 -0.175365 0.572788 + 2.55453 3.08603 4.02567 0.771505 -0.209914 0.600596 + 2.48002 2.99971 4.08758 0.743641 -0.230198 0.6277 + 2.58947 3.5633 4.09222 0.787395 -0.00880562 0.616386 + 2.52876 3.47356 4.15646 0.763872 -0.0565466 0.642886 + 2.45712 3.40119 4.2352 0.732608 -0.0814041 0.675765 + 2.38262 3.31487 4.29711 0.716988 -0.13199 0.684476 + 2.53323 3.86313 4.1181 0.786897 0.226721 0.573925 + 2.47749 3.78616 4.20362 0.721098 0.139239 0.678698 + 2.38769 3.77091 4.29422 0.678831 0.148692 0.719083 + 2.31605 3.69854 4.37297 0.697025 0.112261 0.708204 + 2.29894 4.09032 4.25959 0.663444 0.320361 0.676173 + 2.20914 4.07508 4.35018 0.655043 0.312588 0.6879 + 2.13616 3.94806 4.47499 0.648276 0.251111 0.718805 + 2.06758 3.85189 4.55996 0.606905 0.203086 0.768389 + 2.24747 3.60237 4.45794 0.687574 0.0469488 0.724595 + 2.29879 4.2055 4.1993 0.661144 0.378913 0.647544 + 2.07576 4.40579 4.28877 0.599153 0.462425 0.653589 + 2.06263 4.2746 4.3916 0.61716 0.406574 0.673655 + 1.98965 4.14767 4.51646 0.567154 0.345086 0.747831 + 2.14437 4.5084 4.14646 0.614424 0.496759 0.612955 + 1.89447 4.69571 4.21503 0.531597 0.558655 0.636639 + 1.85277 4.55415 4.36261 0.511037 0.519867 0.684528 + 1.83964 4.42295 4.46545 0.501522 0.469933 0.726387 + 1.94895 4.80519 4.0614 0.552897 0.590676 0.587713 + 1.67113 4.98185 4.12221 0.478723 0.630739 0.610731 + 1.62324 4.86473 4.26848 0.457166 0.594734 0.66128 + 1.58155 4.72317 4.41606 0.446919 0.561858 0.696117 + 1.74296 4.39244 4.5459 0.486243 0.455029 0.746001 + 1.71986 5.09801 3.95141 0.497743 0.654933 0.568608 + 1.4045 5.24815 4.02597 0.428489 0.685969 0.588084 + 1.36275 5.14532 4.16988 0.416279 0.658873 0.626577 + 1.31486 5.02819 4.31615 0.399374 0.617523 0.677617 + 1.7539 5.20939 3.79071 0.509878 0.6792 0.527932 + 1.43854 5.35952 3.86526 0.43637 0.696795 0.569261 + 1.12536 5.39737 4.04032 0.362671 0.719854 0.591845 + 1.24504 5.61941 3.67913 0.364099 0.752389 0.548947 + 1.26774 5.71298 3.52805 0.38281 0.774771 0.503175 + 1.02628 5.18841 4.32803 0.347347 0.649667 0.676227 + 1.24892 4.93102 4.43325 0.379631 0.594307 0.708999 + 1.19624 4.83116 4.54582 0.381561 0.598503 0.704419 + 1.52887 4.62331 4.52863 0.445921 0.537041 0.716059 + 0.884016 5.00403 4.55201 0.330896 0.619984 0.711426 + 1.16372 4.76716 4.61927 0.369696 0.564099 0.738321 + 1.42798 4.54238 4.6458 0.409611 0.499168 0.763577 + 1.64207 4.31151 4.66307 0.46973 0.408967 0.782368 + 0.8515 4.94003 4.62545 0.301013 0.60428 0.737724 + 0.85536 4.85492 4.68867 0.282565 0.544035 0.790053 + 1.07525 4.67906 4.71546 0.320392 0.493399 0.808645 + 1.33951 4.45427 4.74201 0.367867 0.442547 0.817818 + 1.55192 4.20397 4.75893 0.426267 0.356838 0.831242 + 0.551163 4.94179 4.7168 0.210461 0.561688 0.800133 + 0.770676 4.77739 4.76376 0.247134 0.491921 0.834828 + 0.990565 4.60152 4.79056 0.280788 0.44819 0.848696 + 1.22576 4.32411 4.85146 0.3211 0.390445 0.862813 + 1.43817 4.07381 4.86839 0.381876 0.306349 0.871964 + 0.449577 4.90912 4.76318 0.16314 0.541058 0.82501 + 0.66909 4.74481 4.81019 0.234444 0.485341 0.842307 + 0.884919 4.49976 4.87041 0.267078 0.41303 0.870675 + 1.12011 4.22235 4.93131 0.258373 0.334263 0.906373 + 1.33197 3.94823 4.94689 0.323482 0.242215 0.914708 + 0.382229 4.84671 4.81289 0.130663 0.522575 0.842521 + 0.572612 4.68144 4.87435 0.21802 0.478742 0.850455 + 0.788441 4.43648 4.93462 0.244569 0.362726 0.899231 + 1.0017 4.09007 5.00022 0.214301 0.261916 0.940997 + 1.21356 3.81596 5.0158 0.258702 0.184379 0.948197 + 0.332602 4.78452 4.8588 0.0823826 0.48666 0.869699 + 0.522985 4.61924 4.92026 0.175513 0.407951 0.895975 + 0.652423 4.35927 4.98336 0.15821 0.277783 0.947526 + 0.414322 4.60138 4.944 0.0730142 0.350317 0.933781 + 0.54376 4.3414 5.00711 0.105858 0.24824 0.962897 + 0.630538 3.96772 5.07934 0.0711827 0.165669 0.983609 + 0.865683 4.01294 5.04901 0.154586 0.204109 0.966666 + 0.285445 4.61442 4.94183 0.00888124 0.347949 0.937471 + 0.32929 4.34471 5.01578 0.0166305 0.229806 0.973094 + 0.126618 4.00777 5.07718 -0.00899253 0.145264 0.989352 + 0.416069 3.97102 5.08802 0.0125617 0.152476 0.988227 + -0.126618 4.00777 5.07718 0.00857274 0.148449 0.988883 + -0.168625 3.67585 5.11488 0.0335816 0.0700883 0.996975 + -0.036021 3.60958 5.11106 0.0340239 0.0444754 0.998431 + 0.036019 3.60958 5.11106 -0.0312578 0.0527594 0.998118 + 0.168625 3.67585 5.11488 -0.0475263 0.0797874 0.995678 + -0.453675 3.28342 5.13379 0.0184732 -0.0443496 0.998845 + -0.276569 3.30822 5.13443 0.00945991 -0.0334062 0.999397 + -0.143965 3.24195 5.13062 0.0491112 -0.0919628 0.994551 + -0.036021 3.22358 5.11523 0.0606462 -0.0963806 0.993495 + 0.036019 3.22358 5.11523 -0.0606653 -0.0963602 0.993496 + -0.613586 3.19338 5.13494 -0.01899 -0.0926544 0.995517 + -0.481604 2.89141 5.07997 -0.00407933 -0.246547 0.969122 + -0.304498 2.9162 5.08063 0.048865 -0.210134 0.976451 + -0.169009 2.89863 5.06505 0.0828932 -0.225449 0.970722 + -0.061064 2.88035 5.04972 0.0588927 -0.255182 0.965098 + -0.739636 3.19127 5.1252 -0.0767826 -0.0885667 0.993106 + -0.748806 2.8824 5.05998 -0.0827097 -0.275901 0.957621 + -0.622755 2.88451 5.06972 -0.0657268 -0.26867 0.960987 + -0.460761 2.49748 4.94567 -0.0748446 -0.294213 0.952805 + -0.808039 3.18561 5.11939 -0.0806067 -0.0878201 0.99287 + -0.861885 2.89341 5.05169 -0.0737692 -0.280627 0.956978 + -0.731464 2.51883 4.92969 -0.104952 -0.332579 0.937217 + -0.601912 2.49058 4.93542 -0.0903038 -0.320347 0.942986 + -0.941057 2.87871 5.04416 -0.131866 -0.28773 0.94859 + -0.966131 2.6097 4.9291 -0.187203 -0.355123 0.915884 + -0.844543 2.52985 4.92141 -0.141239 -0.34552 0.927722 + -0.729918 2.25879 4.83789 -0.145149 -0.336756 0.930337 + -1.0351 2.88445 5.02402 -0.208229 -0.303092 0.929933 + -1.06018 2.61545 4.90895 -0.274133 -0.352606 0.894718 + -0.98127 2.37989 4.83674 -0.220625 -0.358481 0.907092 + -0.859682 2.30012 4.82911 -0.172967 -0.350769 0.920349 + -1.17369 2.68191 4.89262 -0.279532 -0.365124 0.888001 + -1.21853 2.49981 4.80543 -0.296156 -0.35098 0.888316 + -1.10502 2.43343 4.8218 -0.29743 -0.352398 0.887328 + -1.00337 2.1928 4.755 -0.230279 -0.314649 0.920852 + -0.872669 2.14869 4.76999 -0.186075 -0.305523 0.933826 + -1.12712 2.24625 4.74002 -0.280957 -0.318961 0.905167 + -0.985657 1.94226 4.68794 -0.232328 -0.247505 0.940619 + -0.854955 1.89815 4.70294 -0.193071 -0.235839 0.95242 + -0.719277 1.86649 4.72337 -0.184152 -0.223843 0.95707 + -0.742904 2.10736 4.77878 -0.164809 -0.286427 0.943821 + -1.11812 1.97832 4.65868 -0.283296 -0.257614 0.923785 + -0.941492 1.61095 4.6206 -0.243542 -0.23446 0.941125 + -0.802828 1.5775 4.64393 -0.20175 -0.228845 0.952327 + -0.66715 1.54584 4.66436 -0.204871 -0.234155 0.950368 + -0.756166 1.30549 4.58525 -0.187959 -0.253758 0.94883 + -0.618234 1.26053 4.59593 -0.182971 -0.276477 0.943441 + -0.533475 1.49319 4.68135 -0.175303 -0.239478 0.954945 + -0.585319 1.85745 4.74583 -0.163337 -0.216363 0.962553 + -0.608946 2.09832 4.80124 -0.157941 -0.272977 0.948967 + -0.572878 1.03708 4.54095 -0.083161 -0.345928 0.934568 + -0.436992 0.976107 4.51797 -0.0559284 -0.412472 0.909252 + -0.484559 1.20779 4.61287 -0.127697 -0.322557 0.937897 + -0.356444 1.14556 4.59446 -0.0443588 -0.350538 0.935497 + -0.399265 1.46708 4.69638 -0.0729508 -0.240995 0.967781 + -0.400256 0.781019 4.42307 -0.0106649 -0.510206 0.859986 + -0.284118 0.698607 4.36901 0.000932436 -0.554439 0.832224 + -0.308877 0.91388 4.49955 0.0485728 -0.432285 0.900428 + -0.268127 0.521252 4.2368 -0.0753403 -0.663891 0.744025 + -0.16076 0.430421 4.16132 -0.0072755 -0.674685 0.73807 + -0.175686 0.614286 4.31086 0.137063 -0.556624 0.81938 + -0.200446 0.82956 4.44139 0.0596473 -0.491286 0.868953 + -0.11943 0.272204 4.00076 -0.208514 -0.783694 0.585103 + -0.06733 0.225955 3.95507 0.0178055 -0.790443 0.612277 + -0.078383 0.34054 4.076 0.30374 -0.635554 0.709798 + -0.093309 0.524492 4.22559 0.189826 -0.594423 0.781427 + -0.017312 0.102744 3.76948 -0.124459 -0.883564 0.451469 + -0.017312 0.136658 3.83734 -0.204271 -0.829768 0.519383 + -0.028364 0.251335 3.95831 0.19298 -0.696101 0.691521 + -0.028364 0.420627 4.12849 -0.0175842 -0.674384 0.738171 + -0.037326 0.63723 4.28972 0.128472 -0.58124 0.803527 + -0.102271 0.741095 4.38682 0.239922 -0.504773 0.829241 + 0.017312 0.102744 3.76948 0.0866434 -0.844051 0.529216 + 0.017312 0.136658 3.83734 0.20427 -0.82977 0.51938 + 0.028357 0.251335 3.95831 -0.193868 -0.698862 0.688482 + 0.028357 0.420627 4.12849 -0.108218 -0.639865 0.76083 + 0.037325 0.63723 4.28972 -0.129928 -0.586594 0.799391 + 0.06733 0.225955 3.95507 -0.0173498 -0.790553 0.612148 + 0.078376 0.340545 4.07599 -0.14255 -0.696546 0.703209 + 0.093302 0.524492 4.22559 -0.18882 -0.591303 0.784033 + 0.10227 0.741095 4.38682 -0.0782281 -0.572254 0.816337 + 0.069407 0.149078 3.81522 0.168529 -0.826828 0.536613 + 0.119425 0.272204 4.00076 0.170351 -0.771974 0.612403 + 0.16076 0.430421 4.16132 0.00605378 -0.676566 0.736357 + 0.175687 0.614286 4.31086 -0.158377 -0.544376 0.823754 + 0.200447 0.82956 4.44139 -0.0635871 -0.498487 0.864562 + 0.032373 0.030536 3.65695 0.145489 -0.757769 0.636096 + 0.118184 0.172667 3.84657 0.121926 -0.819007 0.56068 + 0.226793 0.363122 4.07629 0.15692 -0.755885 0.63562 + 0.268128 0.521252 4.2368 0.100941 -0.672467 0.733212 + 0.08115 0.054032 3.68825 0.137498 -0.854595 0.500761 + 0.227669 0.22229 3.88322 0.108977 -0.798666 0.591825 + 0.336278 0.412744 4.11294 0.136049 -0.721329 0.679099 + 0.413241 0.285763 3.95348 0.147936 -0.77677 0.612163 + 0.457244 0.502509 4.16846 0.187171 -0.699479 0.689707 + 0.505232 0.693511 4.34644 0.168456 -0.636767 0.752429 + 0.384265 0.603749 4.29091 0.125167 -0.652449 0.747424 + 0.284118 0.698607 4.36901 0.000405746 -0.551966 0.833866 + 0.199095 0.111021 3.73594 0.168197 -0.856183 0.488529 + 0.384668 0.174494 3.8062 0.151031 -0.855663 0.495005 + 0.559882 0.362934 3.99721 0.236794 -0.729579 0.641594 + 0.603885 0.57968 4.2122 0.205733 -0.683039 0.700807 + 0.640456 0.753492 4.35995 0.215102 -0.619996 0.754543 + 0.222855 0.076819 3.64278 0.261264 -0.916036 0.304334 + 0.405595 0.146048 3.72687 0.244611 -0.920584 0.30445 + 0.5671 0.212172 3.77694 0.303262 -0.889085 0.342871 + 0.546173 0.240623 3.85626 0.249228 -0.814257 0.524281 + 0.698136 0.433094 4.01169 0.309269 -0.71703 0.624677 + 0.23707 0.061669 3.56102 0.350144 -0.932646 0.0870095 + 0.41981 0.130899 3.64511 0.302144 -0.942544 0.142547 + 0.580437 0.192389 3.69601 0.336802 -0.926155 0.169712 + 0.700407 0.270469 3.80217 0.325902 -0.850786 0.412252 + 0.684426 0.310778 3.87075 0.306681 -0.766432 0.564384 + 0.419131 0.125386 3.56126 0.322002 -0.945693 0.0444952 + 0.579758 0.186964 3.61221 0.349233 -0.934132 0.0737142 + 0.713744 0.250686 3.72123 0.366499 -0.909607 0.195686 + 0.807504 0.32129 3.81354 0.355221 -0.82918 0.4316 + 0.582589 0.17972 3.52715 0.332727 -0.939061 0.0863546 + 0.724983 0.245138 3.63444 0.371342 -0.92324 0.0986587 + 0.829485 0.290214 3.64637 0.398504 -0.910746 0.108332 + 0.818245 0.295757 3.73317 0.379328 -0.89781 0.223714 + 0.727814 0.237982 3.54944 0.360635 -0.926939 0.103568 + 0.839325 0.283289 3.56156 0.39462 -0.911153 0.118643 + 0.901522 0.324581 3.64824 0.407885 -0.907555 0.0998716 + 0.889591 0.326565 3.73001 0.414165 -0.882604 0.222434 + 0.87885 0.352189 3.81043 0.413976 -0.803967 0.426921 + 0.842589 0.273449 3.47381 0.36121 -0.919414 0.155581 + 0.911362 0.317569 3.56339 0.382289 -0.911803 0.149903 + 1.02128 0.372296 3.6162 0.38698 -0.907799 0.1617 + 1.00935 0.374284 3.69795 0.434578 -0.870421 0.231321 + 0.999038 0.407612 3.78343 0.467217 -0.768616 0.436963 + 0.92372 0.307112 3.4815 0.343319 -0.92175 0.180303 + 1.03236 0.353714 3.53078 0.350733 -0.913232 0.207349 + 1.18774 0.424785 3.54869 0.385461 -0.887364 0.252992 + 1.16866 0.443531 3.64062 0.455006 -0.833079 0.314562 + 1.29106 0.465541 3.5313 0.503585 -0.797351 0.332616 + 1.29236 0.517844 3.6271 0.567315 -0.70587 0.424149 + 1.15835 0.476777 3.72603 0.513923 -0.737074 0.438867 + 1.37396 0.509985 3.47731 0.609641 -0.699364 0.373132 + 1.40912 0.598923 3.58947 0.611471 -0.687514 0.391699 + 1.29221 0.579154 3.71251 0.56437 -0.691397 0.451061 + 1.1582 0.538174 3.81149 0.51694 -0.69684 0.497179 + 1.46022 0.511524 3.33845 0.661922 -0.640609 0.389204 + 1.49537 0.600548 3.45065 0.666996 -0.659474 0.346715 + 1.54136 0.704368 3.54803 0.666631 -0.666083 0.33457 + 1.44189 0.682476 3.68675 0.597719 -0.702049 0.387115 + 1.32498 0.662709 3.80979 0.54056 -0.712473 0.447413 + 1.56986 0.583876 3.24593 0.712371 -0.530732 0.459186 + 1.61585 0.687698 3.34331 0.701167 -0.6334 0.327367 + 1.59424 0.805556 3.65557 0.705947 -0.620175 0.342085 + 1.49477 0.783668 3.79428 0.620268 -0.645179 0.446106 + 1.38252 0.755475 3.88891 0.559501 -0.652639 0.510903 + 1.65977 0.595445 3.1389 0.530351 -0.559547 0.636895 + 1.69813 0.726735 3.25369 0.508273 -0.691615 0.513155 + 1.6807 0.861303 3.54682 0.725403 -0.599312 0.338549 + 1.72597 1.01679 3.69349 0.729961 -0.54229 0.416028 + 1.63951 0.960962 3.8022 0.738618 -0.491797 0.461064 + 1.76298 0.90034 3.4572 0.697311 -0.607765 0.379972 + 1.82446 1.06329 3.59596 0.717629 -0.568598 0.402125 + 1.77437 1.18415 3.82923 0.666476 -0.531775 0.522519 + 1.66388 1.13845 3.91158 0.676316 -0.478514 0.560019 + 1.91628 1.1104 3.48777 0.687528 -0.607123 0.39838 + 1.87287 1.23073 3.73175 0.685338 -0.555294 0.471126 + 1.92797 1.42525 3.85644 0.65931 -0.474878 0.582925 + 1.81817 1.38522 3.94096 0.638687 -0.451324 0.623206 + 1.97879 1.26809 3.64004 0.657222 -0.589996 0.469002 + 2.03389 1.46269 3.76477 0.683295 -0.481485 0.548889 + 1.98256 1.64831 3.95749 0.655709 -0.412744 0.632209 + 1.87276 1.60828 4.04202 0.617402 -0.414599 0.668522 + 2.13417 1.51403 3.67706 0.728469 -0.466285 0.501908 + 2.08837 1.69435 3.87533 0.686929 -0.408522 0.601032 + 2.13287 1.98865 4.00359 0.680107 -0.357191 0.640209 + 2.02705 1.9426 4.08575 0.64693 -0.363393 0.670393 + 2.18866 1.74569 3.78762 0.725366 -0.405236 0.556442 + 2.23098 2.04488 3.9266 0.71235 -0.350831 0.607845 + 2.16569 2.34754 4.15417 0.680814 -0.32071 0.658512 + 2.06529 2.30954 4.23558 0.647547 -0.334039 0.684909 + 2.32652 2.11846 3.85235 0.737179 -0.34434 0.581375 + 2.2638 2.40369 4.07712 0.703857 -0.309903 0.639176 + 2.23071 2.75267 4.26706 0.704848 -0.269927 0.655994 + 2.14538 2.68183 4.32996 0.690635 -0.287135 0.66376 + 2.35401 2.47291 4.00843 0.724547 -0.301144 0.619955 + 2.32092 2.82189 4.19837 0.717417 -0.256977 0.647515 + 2.13899 3.08376 4.4888 0.693077 -0.185557 0.696573 + 2.05366 3.01292 4.5517 0.686493 -0.203207 0.698165 + 2.40224 2.90154 4.13742 0.724859 -0.248558 0.642493 + 2.21668 3.16849 4.43025 0.69993 -0.165775 0.694706 + 2.08087 3.45036 4.60384 0.648443 -0.0183955 0.761041 + 2.00318 3.36563 4.6624 0.645155 -0.0330288 0.763338 + 2.298 3.24814 4.36929 0.6972 -0.155298 0.699853 + 2.16285 3.53564 4.53012 0.655194 0.00920751 0.755404 + 1.91851 3.68226 4.70637 0.572735 0.143768 0.807035 + 2.00049 3.76746 4.63261 0.585234 0.169721 0.792903 + 1.82588 4.03272 4.66956 0.511661 0.297051 0.806203 + 1.73573 3.92518 4.76543 0.490588 0.26284 0.830806 + 1.8346 3.55934 4.78748 0.532126 0.0899927 0.841869 + 1.89297 4.11716 4.5969 0.500414 0.338098 0.797042 + 1.65182 3.80226 4.84653 0.456126 0.205762 0.865801 + 1.54562 3.67677 4.92508 0.401523 0.13732 0.905496 + 1.70185 3.41556 4.86911 0.463396 0.00673877 0.886126 + 1.80006 3.43825 4.8144 0.519388 0.0106047 0.854472 + 1.96864 3.24454 4.68932 0.671263 -0.0821063 0.736658 + 1.42499 3.56737 4.98257 0.348177 0.0926658 0.932837 + 1.58122 3.30616 4.9266 0.425314 -0.0520848 0.903546 + 1.6919 3.0549 4.83039 0.477747 -0.186797 0.858408 + 1.7935 3.12682 4.78942 0.488323 -0.159843 0.857899 + 1.8917 3.14942 4.73467 0.571543 -0.156039 0.8056 + 1.14611 3.67064 5.05489 0.209351 0.114225 0.971146 + 1.35754 3.42205 5.02166 0.347281 0.0322239 0.937207 + 1.46485 3.21364 4.96944 0.39152 -0.0939165 0.915364 + 0.993089 3.68812 5.07862 0.145085 0.108972 0.9834 + 1.22541 3.29936 5.06057 0.221278 -0.0421704 0.974298 + 1.33272 3.09095 5.00835 0.325064 -0.163369 0.931474 + 1.4663 2.89464 4.90477 0.37536 -0.26665 0.887695 + 1.57553 2.96239 4.87323 0.439571 -0.220094 0.870825 + 0.757944 3.6429 5.10895 0.0830556 0.0858306 0.992842 + 0.958766 3.27031 5.09969 0.155946 -0.0305617 0.987293 + 1.07239 3.31675 5.08426 0.149254 -0.0226684 0.988539 + 1.21843 3.01113 5.0242 0.23259 -0.235513 0.943629 + 0.68639 3.5435 5.12112 0.0909173 0.0567912 0.994238 + 0.887212 3.17091 5.11186 0.186094 -0.111762 0.976155 + 0.941054 2.87871 5.04416 0.144061 -0.272918 0.95119 + 1.0351 2.88445 5.02402 0.208241 -0.303094 0.92993 + 1.10481 2.96469 5.03964 0.160819 -0.255759 0.95327 + 0.617988 3.54915 5.12692 0.0554546 0.060742 0.996612 + 0.808039 3.18561 5.11939 0.0806072 -0.0878199 0.99287 + 0.861881 2.89341 5.05169 0.0674412 -0.271256 0.960142 + 0.458076 3.63911 5.12571 0.00855743 0.0767953 0.99701 + 0.613587 3.19338 5.13494 0.0189589 -0.092632 0.99552 + 0.739637 3.19127 5.1252 0.0767833 -0.0885661 0.993106 + 0.748809 2.8824 5.05998 0.0851551 -0.272994 0.958239 + 0.84454 2.52985 4.92141 0.139294 -0.349418 0.926555 + 0.276569 3.30822 5.13443 -0.015804 -0.041527 0.999012 + 0.453675 3.28342 5.13378 -0.0148087 -0.0487054 0.998703 + 0.481604 2.89141 5.07997 0.0128763 -0.237057 0.97141 + 0.622758 2.88451 5.06972 0.0635068 -0.265686 0.961966 + 0.143964 3.24195 5.13062 -0.0490992 -0.091944 0.994553 + 0.169004 2.89863 5.06505 -0.0896965 -0.236381 0.967512 + 0.304498 2.91621 5.08062 -0.0544776 -0.202464 0.977773 + 0.06106 2.88035 5.04972 -0.0461286 -0.269083 0.962012 + 0.06106 2.47763 4.90566 -0.129033 -0.277718 0.951958 + 0.194119 2.46558 4.94153 -0.165542 -0.268496 0.94895 + 0.329613 2.48315 4.9571 0.0125246 -0.292442 0.956201 + -0.061064 2.47763 4.90566 0.136515 -0.287229 0.948084 + -0.066662 2.22117 4.84245 0.130976 -0.0255291 0.991057 + 0.06666 2.22117 4.84245 -0.093112 -0.0629048 0.993667 + 0.199719 2.20912 4.87832 -0.124011 -0.21396 0.968939 + 0.338014 2.20633 4.87336 0.0798532 -0.237676 0.968056 + -0.194123 2.46558 4.94153 0.158418 -0.277759 0.947499 + -0.199721 2.20904 4.87827 0.0723522 -0.165933 0.983479 + -0.066662 2.10356 4.86675 0.0153311 -0.0531574 0.998469 + 0.06666 2.10357 4.86674 0.0296002 -0.0118345 0.999492 + 0.205331 2.10297 4.85859 -0.000590693 -0.163757 0.986501 + -0.329613 2.48315 4.9571 -0.0209634 -0.280896 0.959509 + -0.338025 2.20633 4.87336 -0.0623166 -0.223014 0.972821 + -0.205333 2.10297 4.85859 -0.0433549 -0.203224 0.978172 + -0.193778 1.81952 4.79314 -0.0359448 -0.251317 0.967237 + -0.055108 1.82012 4.80129 -0.0273549 -0.264827 0.963908 + -0.469173 2.22066 4.86194 -0.13962 -0.283734 0.948684 + -0.343636 2.10026 4.85368 -0.113288 -0.220933 0.968687 + -0.316992 1.84324 4.79504 -0.124844 -0.24625 0.961132 + -0.143478 1.37916 4.67886 0.111431 -0.284868 0.952068 + -0.055108 1.27413 4.62718 0.0615891 -0.339909 0.938439 + -0.600366 2.23063 4.84367 -0.132611 -0.311944 0.9408 + -0.477753 2.08844 4.81955 -0.182925 -0.261751 0.947642 + -0.451109 1.83142 4.76091 -0.172841 -0.228024 0.958192 + -0.266692 1.40288 4.68077 -0.0301442 -0.285015 0.958049 + -0.125696 0.992824 4.52421 0.0830763 -0.419569 0.903914 + -0.223871 1.08129 4.57879 0.0707025 -0.372905 0.925172 + -0.037326 0.887793 4.47253 -0.0786295 -0.513223 0.854646 + 0.055106 1.27413 4.62717 -0.0633069 -0.345381 0.936325 + 0.037325 0.887793 4.47253 -0.0045344 -0.478726 0.877952 + 0.143476 1.37917 4.67885 -0.0549522 -0.317859 0.946544 + 0.055106 1.82012 4.80129 0.0198876 -0.254714 0.966812 + 0.125695 0.992824 4.52421 -0.080558 -0.412653 0.907319 + 0.266694 1.40288 4.68077 0.0250415 -0.293139 0.955742 + 0.193777 1.8196 4.79319 0.0436417 -0.241895 0.969321 + 0.343625 2.10025 4.85369 0.13296 -0.202518 0.97021 + 0.223872 1.08129 4.57879 -0.102943 -0.345231 0.932855 + 0.399267 1.46708 4.69638 0.0996345 -0.266208 0.958753 + 0.316994 1.84324 4.79504 0.116424 -0.232371 0.965634 + 0.477742 2.08844 4.81956 0.172771 -0.25193 0.952198 + 0.308878 0.91388 4.49955 0.0230627 -0.476866 0.878673 + 0.356445 1.14556 4.59446 0.0504753 -0.341489 0.938529 + 0.533477 1.49319 4.68135 0.176178 -0.238344 0.955067 + 0.451111 1.83142 4.76091 0.185346 -0.21502 0.95886 + 0.437002 0.976107 4.51797 0.0473672 -0.423403 0.904702 + 0.484569 1.20779 4.61287 0.0907409 -0.286699 0.953714 + 0.667151 1.54584 4.66436 0.201888 -0.231096 0.951754 + 0.585321 1.85745 4.74583 0.164995 -0.21864 0.961755 + 0.608959 2.09832 4.80123 0.165594 -0.264029 0.950193 + 0.400256 0.781019 4.42307 -0.000185284 -0.503147 0.864201 + 0.572888 1.03708 4.54095 0.132448 -0.387693 0.912223 + 0.618244 1.26053 4.59593 0.19345 -0.262811 0.945255 + 0.802826 1.57758 4.64398 0.202981 -0.227326 0.952429 + 0.719279 1.86649 4.72337 0.182769 -0.225335 0.956984 + 0.536141 0.841995 4.44606 0.116833 -0.505686 0.85477 + 0.71081 1.08213 4.53032 0.203883 -0.340475 0.917883 + 0.756166 1.30549 4.58525 0.188774 -0.254654 0.948428 + 0.941491 1.61095 4.6206 0.241126 -0.231558 0.942465 + 0.854954 1.89815 4.70294 0.196229 -0.239324 0.950904 + 0.671365 0.901889 4.45952 0.179325 -0.470172 0.864165 + 0.851214 1.11841 4.50649 0.294277 -0.34399 0.891668 + 0.89483 1.33894 4.56192 0.278438 -0.270967 0.921439 + 1.07396 1.64692 4.59128 0.331799 -0.252466 0.908939 + 0.985656 1.94234 4.68799 0.231211 -0.249054 0.940486 + 0.781792 0.809541 4.36027 0.303734 -0.596549 0.742882 + 0.811769 0.938248 4.43574 0.309418 -0.468492 0.827512 + 0.985987 1.14855 4.46448 0.426726 -0.351933 0.833095 + 1.0296 1.369 4.51986 0.378869 -0.306808 0.873113 + 0.745222 0.635818 4.21257 0.292696 -0.677525 0.674751 + 0.919797 0.840262 4.31706 0.388128 -0.576277 0.719209 + 0.949774 0.968969 4.39253 0.420456 -0.461927 0.780923 + 1.11225 1.17063 4.39344 0.493681 -0.378198 0.7831 + 0.823599 0.487744 4.00924 0.308141 -0.711242 0.631811 + 0.870685 0.690466 4.21011 0.34351 -0.64817 0.679615 + 1.05235 0.848769 4.24332 0.464676 -0.553747 0.69097 + 1.07604 0.990964 4.32143 0.502603 -0.444474 0.741507 + 0.791524 0.361599 3.88213 0.306478 -0.748676 0.58784 + 0.902616 0.527941 4.01681 0.364105 -0.695754 0.619156 + 1.00323 0.698969 4.13638 0.422654 -0.641398 0.640291 + 1.17891 0.862822 4.16378 0.497765 -0.53561 0.682167 + 0.87054 0.401797 3.8897 0.377166 -0.731788 0.567655 + 1.01995 0.547596 3.95637 0.458437 -0.688446 0.562031 + 1.12057 0.718627 4.07593 0.456855 -0.63689 0.62101 + 1.3033 0.865423 4.07208 0.541695 -0.526554 0.655215 + 1.2026 1.0051 4.24194 0.528858 -0.444225 0.723169 + 0.990729 0.457313 3.86275 0.47081 -0.713856 0.518409 + 1.18742 0.628457 3.90512 0.493701 -0.700614 0.515169 + 1.24496 0.721223 3.98424 0.493019 -0.662374 0.564086 + 1.42149 0.889875 3.98692 0.598697 -0.512145 0.615848 + 1.32338 1.02894 4.16285 0.565193 -0.434894 0.701017 + 1.53374 0.918068 3.89229 0.64322 -0.512676 0.568711 + 1.44158 1.0534 4.07769 0.594718 -0.441061 0.672142 + 1.47608 1.25865 4.17559 0.581269 -0.401202 0.707929 + 1.35746 1.22365 4.248 0.557483 -0.395859 0.729731 + 1.23668 1.19981 4.3271 0.530777 -0.392507 0.751142 + 1.55811 1.09555 4.00168 0.629852 -0.451547 0.631974 + 1.59261 1.30081 4.09957 0.591983 -0.411903 0.692743 + 1.52366 1.5029 4.26593 0.556874 -0.382205 0.737435 + 1.40504 1.46782 4.33829 0.54822 -0.365178 0.752396 + 1.28469 1.42995 4.40648 0.524964 -0.358875 0.771765 + 1.70767 1.33952 4.02331 0.627781 -0.433967 0.646192 + 1.64331 1.53754 4.19673 0.567878 -0.394118 0.722624 + 1.69093 1.83115 4.30698 0.549143 -0.360751 0.753857 + 1.57128 1.79651 4.37618 0.522358 -0.354602 0.775499 + 1.4519 1.7518 4.43043 0.505121 -0.327733 0.798401 + 1.75837 1.57626 4.12047 0.598716 -0.403378 0.691973 + 1.80501 1.87262 4.24177 0.578622 -0.364946 0.729391 + 1.73252 2.19524 4.44797 0.535026 -0.35886 0.764831 + 1.61944 2.1369 4.49541 0.506039 -0.35889 0.784298 + 1.50006 2.09219 4.54966 0.418901 -0.351467 0.837253 + 1.9194 1.90472 4.16336 0.608974 -0.365701 0.703856 + 1.8466 2.2367 4.38276 0.567671 -0.356841 0.741899 + 1.83623 2.54914 4.541 0.55545 -0.358178 0.750456 + 1.72681 2.49021 4.58866 0.519334 -0.365533 0.772449 + 1.61373 2.43179 4.63605 0.458219 -0.3744 0.806139 + 1.95764 2.27166 4.3132 0.601845 -0.349297 0.718174 + 1.94726 2.5841 4.47144 0.604456 -0.340142 0.720373 + 1.7774 2.78615 4.69809 0.527126 -0.310637 0.790976 + 1.66799 2.72722 4.74575 0.48511 -0.3282 0.810526 + 1.55876 2.65939 4.77724 0.417146 -0.359934 0.834528 + 2.04499 2.64384 4.41137 0.650129 -0.31547 0.691238 + 1.87899 2.85807 4.65711 0.571262 -0.2896 0.767979 + 1.97672 2.9178 4.59705 0.65247 -0.253819 0.714044 + 1.44593 2.60017 4.80041 0.257662 -0.42463 0.867929 + 1.50091 2.37257 4.65921 0.345915 -0.36824 0.862985 + 1.37587 2.04314 4.58001 0.385219 -0.323978 0.864086 + 1.35201 2.81481 4.92064 0.228274 -0.365585 0.902352 + 1.33731 2.54742 4.78797 0.215805 -0.409421 0.886455 + 1.37672 2.32352 4.68958 0.31693 -0.332352 0.888312 + 1.24894 2.0079 4.62565 0.338407 -0.286289 0.896393 + 1.33155 1.71384 4.49857 0.475129 -0.298176 0.827855 + 1.24339 2.76206 4.9082 0.18998 -0.40872 0.892667 + 1.21853 2.49981 4.80543 0.297067 -0.348958 0.888808 + 1.25794 2.27592 4.70703 0.280022 -0.315419 0.906697 + 1.11812 1.97832 4.65868 0.290981 -0.266915 0.918742 + 1.20462 1.67869 4.54425 0.381834 -0.270176 0.88386 + 1.17369 2.68191 4.89262 0.279532 -0.365117 0.888004 + 1.10502 2.43335 4.82176 0.293681 -0.350358 0.889382 + 1.12712 2.24625 4.74002 0.279282 -0.321578 0.904759 + 1.06018 2.61545 4.90895 0.274134 -0.352617 0.894713 + 0.981271 2.37989 4.83674 0.219137 -0.361744 0.906157 + 1.00337 2.1928 4.755 0.22438 -0.310985 0.923549 + 0.87267 2.14869 4.76999 0.188975 -0.300815 0.934772 + 0.966128 2.6097 4.9291 0.199935 -0.363202 0.910006 + 0.859683 2.30012 4.82911 0.183215 -0.355693 0.916468 + 0.72993 2.25879 4.83789 0.139526 -0.344087 0.928513 + 0.742917 2.10736 4.77878 0.1578 -0.280602 0.946764 + 0.731467 2.51883 4.92969 0.108072 -0.3359 0.935677 + 0.600378 2.23063 4.84367 0.14269 -0.319469 0.936792 + 0.469162 2.22066 4.86194 0.126716 -0.297719 0.946206 + 0.601915 2.49058 4.93542 0.088653 -0.322623 0.942367 + 0.460761 2.49748 4.94567 0.0856858 -0.306807 0.947907 + 1.16027 1.40077 4.47282 0.44072 -0.338532 0.831362 + -0.251458 2.05987 -3.28899 -0.218359 0.538832 -0.813621 + -0.23245 2.17267 -3.20717 -0.21192 0.731562 -0.648002 + -0.152461 2.19752 -3.16676 0.172897 0.865061 -0.470931 + -0.267721 1.89853 -3.37668 -0.307719 0.373517 -0.875097 + -0.310818 1.90591 -3.35837 -0.343209 0.388145 -0.855308 + -0.294555 2.06726 -3.27068 -0.396886 0.55638 -0.730016 + -0.248572 1.81892 -3.40553 -0.299508 -0.421526 -0.855927 + -0.284143 1.82119 -3.39091 -0.352686 -0.476198 -0.805511 + -0.31065 1.83131 -3.38534 -0.541482 -0.328912 -0.773702 + -0.327769 1.9222 -3.34395 -0.545759 0.401431 -0.735527 + -0.329604 2.02374 -3.2783 -0.64101 0.442267 -0.6273 + -0.206741 1.81786 -3.41565 -0.168602 -0.426708 -0.888535 + -0.235338 1.79851 -3.3656 -0.0778444 -0.991165 -0.107389 + -0.281294 1.8027 -3.34962 -0.238713 -0.968073 -0.0764938 + -0.307801 1.81282 -3.34405 -0.507137 -0.84637 -0.162696 + -0.327601 1.8476 -3.37092 -0.780887 -0.129977 -0.611001 + -0.145802 1.79423 -3.3803 -0.00251803 -0.980512 -0.196443 + -0.193506 1.79745 -3.37572 -0.0631678 -0.991158 -0.116684 + -0.090409 1.79758 -3.38053 0.105152 -0.957042 -0.270212 + -0.083178 1.80368 -3.33461 0.0607932 -0.928123 0.367277 + -0.127022 1.80633 -3.32918 -0.00742429 -0.894547 0.446911 + -0.174726 1.80955 -3.3246 0.00547908 -0.909947 0.414689 + -0.033943 1.80588 -3.37903 0.540004 -0.804734 -0.246575 + -0.026712 1.81199 -3.33312 0.564218 -0.798804 0.208735 + -0.026712 1.83793 -3.28811 0.440511 -0.756404 0.483531 + -0.077097 1.85489 -3.27132 -0.0232801 -0.805646 0.59194 + -0.120941 1.85754 -3.26589 0.0676383 -0.836412 0.543911 + 0 1.88767 -3.35525 0.922265 -0.319494 -0.217603 + -0.016252 1.87696 -3.22971 0.521247 -0.694291 0.496248 + -0.066636 1.89392 -3.21292 0.0744862 -0.873026 0.481952 + -0.101804 1.89658 -3.19232 0.119764 -0.914255 0.387032 + -0.141762 1.85626 -3.26403 0.09413 -0.846341 0.524259 + -0.016252 1.92627 -3.17244 0.72321 -0.621892 0.300361 + -0.030875 1.92357 -3.14486 0.480746 -0.803582 0.350913 + -0.066043 1.92622 -3.12427 0.19493 -0.912793 0.358903 + -0.122625 1.89529 -3.19047 0.141095 -0.924313 0.354596 + -0.160705 1.86355 -3.24917 0.177591 -0.870128 0.459716 + -0.011183 1.96532 -3.12314 0.906192 -0.313133 0.284191 + -0.025806 1.96262 -3.09556 0.74708 -0.470955 0.46912 + -0.057187 1.95648 -3.06427 0.495356 -0.693643 0.522954 + -0.120883 1.92386 -3.08813 0.217273 -0.90909 0.355454 + -0.011183 2.00908 -3.09637 0.962129 -0.0397052 0.269686 + -0.041291 1.9961 -3.05045 0.760701 -0.354126 0.543994 + -0.072672 1.98996 -3.01916 0.589456 -0.527498 0.611791 + -0.112028 1.95411 -3.02813 0.351856 -0.794393 0.495113 + -0.147395 1.9172 -3.09252 0.147189 -0.929507 0.338159 + -0.025536 2.06202 -3.04565 0.912294 -0.121763 0.391015 + -0.055645 2.04904 -2.99974 0.795514 -0.294027 0.529816 + -0.080386 2.03729 -2.9747 0.64465 -0.446693 0.620396 + -0.098622 1.98346 -3.00363 0.479707 -0.62103 0.619841 + -0.011587 2.07808 -3.08639 0.98191 0.0245926 0.187744 + -0.051364 2.13434 -2.97331 0.918314 -0.121087 0.376879 + -0.071744 2.11124 -2.94107 0.821001 -0.273425 0.501194 + -0.096485 2.0995 -2.91603 0.555575 -0.471126 0.685111 + -0.106336 2.03079 -2.95916 0.427257 -0.537206 0.727228 + -0.032105 2.15701 -3.05363 0.961641 0.273533 0.0206299 + -0.037415 2.1504 -3.01405 0.970944 0.0436742 0.235287 + -0.061569 2.19045 -2.92543 0.925257 -0.188719 0.329067 + -0.081949 2.16734 -2.89318 0.82727 -0.292898 0.479411 + -0.102944 2.15383 -2.872 0.557112 -0.467825 0.686125 + -0.043906 2.17882 -3.07158 0.808843 0.533337 -0.247638 + -0.044375 2.21465 -3.00057 0.984043 0.173808 -0.0380833 + -0.049685 2.20804 -2.96099 0.980836 -0.0527312 0.187566 + -0.060198 2.2336 -2.89595 0.925279 -0.217824 0.310503 + -0.081358 2.25834 -3.01682 0.422646 0.610891 -0.669464 + -0.054531 2.22951 -3.02005 0.782685 0.464533 -0.414263 + -0.048481 2.27233 -2.96812 0.972569 0.205606 -0.108789 + -0.048313 2.25119 -2.93151 0.991396 -0.0412564 0.124226 + -0.097358 2.23148 -3.06218 0.303969 0.759977 -0.574489 + -0.104256 2.26771 -3.01851 0.221836 0.665219 -0.712932 + -0.077574 2.29006 -2.99257 0.315715 0.665445 -0.676392 + -0.058636 2.28719 -2.9876 0.638596 0.557015 -0.530969 + -0.120311 2.23474 -3.06283 0.230218 0.833097 -0.50294 + -0.127209 2.27097 -3.01915 0.0880916 0.680018 -0.727884 + -0.123349 2.30196 -2.99864 0.11593 0.713936 -0.690547 + -0.100472 2.29943 -2.99426 0.26694 0.718151 -0.642653 + -0.089494 2.35141 -2.90314 0.23161 0.853124 -0.467479 + -0.106736 2.2085 -3.12135 0.490261 0.809485 -0.323075 + -0.138848 2.22171 -3.11437 0.227633 0.891642 -0.391353 + -0.152423 2.24796 -3.05585 0.0904188 0.866021 -0.491764 + -0.154284 2.27313 -3.01843 -0.0152724 0.704336 -0.709703 + -0.184307 2.23498 -3.10511 0.019555 0.937109 -0.348489 + -0.181421 2.25134 -3.04883 -0.0847387 0.893436 -0.441125 + -0.183282 2.27651 -3.01141 -0.194604 0.648238 -0.73615 + -0.183897 2.30362 -2.99704 -0.165107 0.675695 -0.718454 + -0.150424 2.30412 -2.99792 0.00673593 0.721367 -0.692521 + -0.197921 2.21078 -3.1575 -0.0182108 0.862449 -0.505817 + -0.227363 2.23092 -3.09344 -0.287568 0.907389 -0.306512 + -0.224477 2.24728 -3.03716 -0.282637 0.876315 -0.390113 + -0.219971 2.27262 -3.00065 -0.350766 0.62678 -0.69578 + -0.267374 2.17265 -3.19234 -0.427205 0.717835 -0.549735 + -0.232845 2.21076 -3.14267 -0.291392 0.876131 -0.384037 + -0.278273 2.20844 -3.08421 -0.537864 0.794916 -0.280733 + -0.271332 2.2369 -3.01597 -0.513607 0.774855 -0.368521 + -0.266826 2.26223 -2.97946 -0.503052 0.544678 -0.671017 + -0.293459 2.14228 -3.20248 -0.553463 0.636752 -0.536867 + -0.283755 2.18828 -3.13344 -0.581465 0.760323 -0.289495 + -0.30984 2.1579 -3.14358 -0.811951 0.536674 -0.229599 + -0.308809 2.18477 -3.07768 -0.812183 0.552145 -0.188402 + -0.301868 2.21323 -3.00943 -0.781573 0.576371 -0.238622 + -0.328509 2.09876 -3.2101 -0.794375 0.496494 -0.349946 + -0.348331 2.00741 -3.25833 -0.909443 0.262462 -0.322533 + -0.346668 2.05602 -3.20424 -0.944 0.301425 -0.134194 + -0.322175 2.12033 -3.14958 -0.934475 0.348612 -0.0722897 + -0.321143 2.14719 -3.08367 -0.944076 0.31689 -0.0911142 + -0.313911 2.189 -3.00771 -0.931044 0.352826 -0.0931184 + -0.346496 1.90587 -3.32399 -0.884811 0.193 -0.4241 + -0.361012 1.96411 -3.22222 -0.997379 0.035581 -0.0630031 + -0.35935 2.01272 -3.16812 -0.991915 0.0996217 0.0786141 + -0.352907 2.03101 -3.14275 -0.983721 0.110054 0.142062 + -0.340334 2.07758 -3.14371 -0.948807 0.313783 -0.0361418 + -0.33517 1.84774 -3.34792 -0.843722 -0.409428 -0.347134 + -0.345178 1.86107 -3.34457 -0.564471 0.0283059 -0.824968 + -0.35672 1.91106 -3.28705 -0.983636 0.0990789 -0.15048 + -0.353513 1.88831 -3.25743 -0.991042 -0.118767 0.0610789 + -0.357805 1.94136 -3.1926 -0.942532 -0.234948 0.237558 + -0.31537 1.81296 -3.32104 -0.457844 -0.885437 -0.0798684 + -0.340923 1.83189 -3.29333 -0.699523 -0.713746 0.0351388 + -0.350931 1.84522 -3.28997 -0.891516 -0.449983 0.0520898 + -0.355402 1.86627 -3.30763 -0.982489 -0.123404 -0.139592 + -0.349042 1.86726 -3.23978 -0.851427 -0.423322 0.309629 + -0.305358 1.81202 -3.29945 -0.127702 -0.941155 0.31292 + -0.330911 1.83094 -3.27173 -0.348666 -0.83127 0.432923 + -0.277517 1.8115 -3.30338 0.000438635 -0.920624 0.390449 + -0.295121 1.84395 -3.26153 0.092684 -0.82821 0.552701 + -0.296138 1.86434 -3.22731 0.0621897 -0.875939 0.478397 + -0.331928 1.85133 -3.23751 -0.294864 -0.809359 0.50793 + -0.326539 1.90949 -3.16483 -0.716455 -0.513282 0.472476 + -0.231561 1.80731 -3.31936 0.10679 -0.942221 0.317513 + -0.242772 1.84949 -3.25356 0.0126169 -0.859353 0.511228 + -0.267281 1.84343 -3.26547 -0.0228817 -0.812728 0.582194 + -0.272701 1.87554 -3.20482 0.00579415 -0.903613 0.42831 + -0.309425 1.89356 -3.16257 -0.310998 -0.809053 0.498712 + -0.208394 1.81534 -3.30799 0.106514 -0.908215 0.404721 + -0.219605 1.85752 -3.24219 0.0331016 -0.885616 0.463237 + -0.215573 1.88599 -3.1778 -0.015708 -0.930334 0.366377 + -0.248192 1.8816 -3.19291 -0.0110217 -0.919205 0.393625 + -0.193669 1.81684 -3.30973 0.0946689 -0.889434 0.447152 + -0.197347 1.8591 -3.23793 0.0616154 -0.887548 0.456577 + -0.193315 1.88757 -3.17354 0.0470639 -0.93674 0.346847 + -0.182622 1.86061 -3.23967 0.217704 -0.877168 0.427998 + -0.171053 1.8857 -3.18537 0.182903 -0.925894 0.330556 + -0.169656 1.91908 -3.08069 0.07424 -0.933414 0.351037 + -0.222994 1.91107 -3.10367 -0.0173308 -0.941348 0.336991 + -0.255613 1.90667 -3.11878 -0.124156 -0.921583 0.367792 + -0.149137 1.88864 -3.19486 0.215088 -0.92054 0.326103 + -0.165125 1.94022 -3.02443 0.108313 -0.907134 0.406666 + -0.218463 1.93221 -3.04741 -0.111582 -0.898779 0.423964 + -0.253433 1.93131 -3.06382 -0.264142 -0.837594 0.47819 + -0.225351 1.9563 -3.00877 -0.219118 -0.830583 0.511977 + -0.282463 1.94866 -3.05916 -0.49023 -0.724139 0.485075 + -0.283809 1.9294 -3.08511 -0.437836 -0.758427 0.482792 + -0.285988 1.90476 -3.14008 -0.0758485 -0.913571 0.399544 + -0.19038 1.9572 -2.99237 -0.145514 -0.763983 0.628614 + -0.17514 2.01276 -2.94363 0.135703 -0.5745 0.807177 + -0.221486 1.96884 -2.98288 0.121068 -0.834987 0.536786 + -0.142878 1.95267 -3.0086 0.273699 -0.812213 0.515169 + -0.168133 1.96965 -2.97654 0.0953047 -0.689024 0.718445 + -0.129472 1.98201 -2.9841 0.381677 -0.614563 0.690388 + -0.136479 2.02512 -2.9512 0.316344 -0.540863 0.779355 + -0.149155 2.08945 -2.9016 0.195232 -0.562646 0.803314 + -0.182592 2.09 -2.89932 0.0299881 -0.556464 0.83033 + -0.215792 2.08846 -2.89973 -0.117927 -0.545613 0.829698 + -0.20834 2.01122 -2.94405 -0.0712762 -0.585065 0.807848 + -0.119012 2.09512 -2.90956 0.317708 -0.556568 0.767655 + -0.12547 2.14946 -2.86554 0.334991 -0.576663 0.745144 + -0.151331 2.14541 -2.85801 0.174117 -0.61988 0.765135 + -0.184768 2.14596 -2.85572 0.0400575 -0.669956 0.741319 + -0.212844 2.14683 -2.85505 -0.135856 -0.668473 0.731223 + -0.103209 2.20056 -2.84094 0.673171 -0.477386 0.564751 + -0.122263 2.19353 -2.82877 0.460513 -0.614541 0.640521 + -0.148124 2.18949 -2.82124 0.293896 -0.690206 0.661242 + -0.176551 2.18416 -2.81201 0.176259 -0.748459 0.63933 + -0.204628 2.18504 -2.81134 -0.107222 -0.750932 0.651616 + -0.082215 2.21407 -2.86212 0.826353 -0.337796 0.450593 + -0.11137 2.27078 -2.76348 0.680305 -0.514465 0.522025 + -0.130423 2.26376 -2.75131 0.504414 -0.626712 0.593968 + -0.15082 2.25873 -2.74261 0.377074 -0.68718 0.620966 + -0.071664 2.30111 -2.81601 0.924252 -0.212027 0.317494 + -0.093681 2.28158 -2.78219 0.819853 -0.380389 0.427955 + -0.131873 2.36449 -2.64017 0.649771 -0.551772 0.522823 + -0.145505 2.36013 -2.63263 0.471492 -0.659434 0.585528 + -0.165902 2.35511 -2.62392 0.362104 -0.703069 0.612025 + -0.062194 2.31767 -2.84469 0.986158 0.0186609 0.164755 + -0.098132 2.38756 -2.68012 0.90883 -0.248176 0.335314 + -0.114185 2.37528 -2.65887 0.798363 -0.414673 0.436649 + -0.145322 2.44721 -2.53414 0.631681 -0.575774 0.519099 + -0.062361 2.3388 -2.8813 0.945746 0.322243 -0.0415247 + -0.088682 2.4174 -2.73182 0.943167 0.331759 -0.0193032 + -0.088662 2.40411 -2.7088 0.98495 0.021417 0.171507 + -0.117082 2.4663 -2.56721 0.903317 -0.268488 0.334564 + -0.133134 2.45403 -2.54596 0.781937 -0.444957 0.436564 + -0.070556 2.34854 -2.89817 0.610668 0.713171 -0.344199 + -0.096877 2.42714 -2.74869 0.575422 0.75827 -0.306456 + -0.110511 2.49009 -2.60842 0.939899 0.339659 -0.0349542 + -0.110491 2.47681 -2.5854 0.98469 -0.00573657 0.174221 + -0.134346 2.53153 -2.4672 0.892657 -0.0892953 0.441802 + -0.110532 2.42881 -2.75158 0.198245 0.879829 -0.431972 + -0.129787 2.4979 -2.62194 0.189268 0.874336 -0.446894 + -0.116132 2.49623 -2.61905 0.571454 0.754259 -0.323316 + -0.127775 2.55059 -2.50022 0.879144 0.47098 0.0726899 + -0.127755 2.54203 -2.48539 0.94369 0.184184 0.274819 + -0.107449 2.35357 -2.90688 0.192312 0.863848 -0.465599 + -0.128487 2.43097 -2.75532 0.175695 0.883329 -0.434582 + -0.142106 2.49922 -2.62423 0.167668 0.877041 -0.450207 + -0.142187 2.55777 -2.51265 0.171822 0.922607 -0.345359 + -0.133396 2.55673 -2.51085 0.53549 0.814638 -0.222746 + -0.130326 2.3561 -2.91125 0.121261 0.870736 -0.476565 + -0.14484 2.43253 -2.75802 0.107021 0.889835 -0.443555 + -0.158459 2.50078 -2.62693 0.104357 0.882685 -0.458233 + -0.16498 2.56009 -2.51667 0.100141 0.926764 -0.362049 + -0.154506 2.55909 -2.51493 0.155437 0.923946 -0.349517 + -0.154514 2.35691 -2.91266 0.0160742 0.873493 -0.486572 + -0.169028 2.43334 -2.75942 0.0153302 0.892056 -0.451664 + -0.175038 2.50128 -2.6278 0.013682 0.884916 -0.46555 + -0.187987 2.3564 -2.91177 -0.113945 0.863086 -0.492036 + -0.193077 2.43299 -2.75882 -0.106923 0.884529 -0.454067 + -0.199087 2.50094 -2.6272 -0.103096 0.878995 -0.465553 + -0.196999 2.56038 -2.51717 -0.0930509 0.922979 -0.373433 + -0.181559 2.5606 -2.51754 0.0126849 0.92831 -0.37159 + -0.220585 2.29972 -2.98628 -0.327904 0.640685 -0.694263 + -0.218494 2.35289 -2.90569 -0.271071 0.832024 -0.484 + -0.223585 2.42948 -2.75274 -0.248741 0.85982 -0.445911 + -0.220089 2.49869 -2.62331 -0.242939 0.857078 -0.45431 + -0.258012 2.29166 -2.97232 -0.464643 0.583242 -0.666285 + -0.255921 2.34483 -2.89174 -0.400385 0.788459 -0.466931 + -0.250666 2.42435 -2.74386 -0.36815 0.824968 -0.428827 + -0.247171 2.49356 -2.61442 -0.35535 0.82708 -0.435506 + -0.284352 2.27957 -2.96062 -0.637382 0.507025 -0.580232 + -0.275893 2.33922 -2.88201 -0.592933 0.69556 -0.405743 + -0.270638 2.41874 -2.73413 -0.561015 0.737811 -0.375363 + -0.260889 2.49002 -2.60827 -0.54621 0.748479 -0.376076 + -0.235442 2.55483 -2.50754 -0.327434 0.884796 -0.331547 + -0.293166 2.25013 -2.96776 -0.714989 0.465898 -0.521278 + -0.29339 2.27383 -2.95069 -0.849928 0.409895 -0.331072 + -0.28493 2.33348 -2.87208 -0.821451 0.503148 -0.26844 + -0.276981 2.41524 -2.72802 -0.795645 0.548389 -0.257327 + -0.267232 2.48651 -2.60215 -0.780405 0.571807 -0.252992 + -0.305209 2.2259 -2.96604 -0.913315 0.355514 -0.198661 + -0.312744 2.21232 -2.94996 -0.969967 0.232273 -0.0722071 + -0.300925 2.26025 -2.93461 -0.940963 0.29954 -0.157686 + -0.292781 2.32328 -2.85759 -0.922847 0.348015 -0.165039 + -0.284832 2.40503 -2.71352 -0.908802 0.386021 -0.158323 + -0.323131 2.16066 -3.00182 -0.977091 0.21184 -0.0204442 + -0.312674 2.20736 -2.92309 -0.973595 -0.0340987 0.22572 + -0.310056 2.24086 -2.9088 -0.992727 0.0721936 0.0963434 + -0.301912 2.30389 -2.83178 -0.997784 0.0452835 0.0487576 + -0.291723 2.39286 -2.69742 -0.996212 0.0758862 0.0424683 + -0.330363 2.11885 -3.07778 -0.960276 0.276503 -0.0376346 + -0.32306 2.1557 -2.97495 -0.97942 -0.018849 0.200951 + -0.306553 2.13106 -2.94589 -0.797598 -0.354726 0.48786 + -0.298173 2.1898 -2.89418 -0.822847 -0.285061 0.491592 + -0.295555 2.2233 -2.87989 -0.888521 -0.221718 0.401711 + -0.342936 2.07228 -3.07681 -0.986382 0.00243778 0.16445 + -0.326429 2.04764 -3.04775 -0.886975 -0.235309 0.397371 + -0.272273 2.10669 -2.92795 -0.665415 -0.415155 0.620379 + -0.263892 2.16543 -2.87623 -0.632123 -0.513739 0.58008 + -0.262774 2.2018 -2.83487 -0.705051 -0.508618 0.494177 + -0.344862 1.99285 -3.11945 -0.914913 -0.197597 0.351979 + -0.332527 1.99984 -3.08785 -0.866712 -0.279936 0.412851 + -0.282181 2.02501 -2.97729 -0.750679 -0.319663 0.578184 + -0.247373 2.01184 -2.95231 -0.410357 -0.502208 0.761179 + -0.237464 2.09352 -2.90297 -0.44558 -0.482307 0.754214 + -0.351305 1.97457 -3.14482 -0.908708 -0.239193 0.342106 + -0.320039 1.9427 -3.11706 -0.736999 -0.506047 0.448049 + -0.318694 1.96196 -3.09111 -0.768869 -0.482946 0.419052 + -0.306359 1.96895 -3.05951 -0.738873 -0.52726 0.419598 + -0.28828 1.97721 -3.01739 -0.721224 -0.506276 0.472781 + -0.278599 1.9612 -3.03327 -0.437857 -0.798916 0.412329 + -0.260519 1.96946 -2.99115 -0.385691 -0.750131 0.537165 + -0.234516 2.1519 -2.85829 -0.440538 -0.601958 0.666013 + -0.233398 2.18826 -2.81693 -0.414741 -0.68348 0.600703 + -0.259031 2.26576 -2.75796 -0.722329 -0.524375 0.450856 + -0.203814 2.25251 -2.73182 -0.070152 -0.75801 0.64846 + -0.232584 2.25573 -2.73741 -0.424254 -0.69214 0.58391 + -0.257984 2.36276 -2.64031 -0.702431 -0.546811 0.45562 + -0.291812 2.28726 -2.80297 -0.896974 -0.322994 0.301847 + -0.179248 2.2534 -2.73338 0.203954 -0.735972 0.64556 + -0.210942 2.35081 -2.61647 -0.054758 -0.766176 0.640293 + -0.231537 2.35273 -2.61976 -0.406037 -0.703988 0.582696 + -0.249046 2.4439 -2.53038 -0.688999 -0.542046 0.48111 + -0.281624 2.37623 -2.66861 -0.87677 -0.360605 0.318179 + -0.186376 2.35171 -2.61803 0.185515 -0.747591 0.637724 + -0.210276 2.43566 -2.51411 -0.051602 -0.769134 0.637001 + -0.230871 2.43758 -2.5174 -0.395312 -0.700434 0.59424 + -0.240977 2.5156 -2.44155 -0.720253 -0.307776 0.621698 + -0.272686 2.45737 -2.55869 -0.880328 -0.327252 0.343407 + -0.172947 2.43967 -2.52109 0.34674 -0.718014 0.603513 + -0.193421 2.43627 -2.5152 0.182407 -0.756081 0.628545 + -0.2096 2.50807 -2.42651 -0.0610164 -0.596689 0.80015 + -0.222802 2.50928 -2.42857 -0.410159 -0.503335 0.760542 + -0.158954 2.44285 -2.52659 0.455179 -0.677123 0.5782 + -0.179594 2.51086 -2.4314 0.360863 -0.562574 0.743834 + -0.192744 2.50868 -2.4276 0.194926 -0.59648 0.778598 + -0.196838 2.55676 -2.40464 0.0615659 0.247304 0.96698 + -0.21004 2.55797 -2.4067 -0.329769 0.34857 0.877355 + -0.156885 2.51682 -2.44171 0.645516 -0.408913 0.645058 + -0.165601 2.51404 -2.43691 0.476431 -0.514593 0.712887 + -0.183688 2.55895 -2.40844 0.282714 0.313734 0.906446 + -0.225304 2.56665 -2.42497 -0.602512 0.56139 0.567293 + -0.256241 2.52427 -2.45982 -0.873282 -0.109365 0.474782 + -0.144697 2.52364 -2.45353 0.793967 -0.260513 0.549318 + -0.174971 2.56172 -2.41324 0.449796 0.386425 0.805208 + -0.199345 2.58 -2.44491 -0.082826 0.991591 0.0994351 + -0.216786 2.57669 -2.43918 -0.242803 0.959411 0.143451 + -0.220791 2.57447 -2.43529 -0.411202 0.861011 0.299286 + -0.16462 2.56961 -2.42691 0.561152 0.569587 0.600566 + -0.16464 2.57817 -2.44174 0.418249 0.882048 0.216932 + -0.173431 2.57921 -2.44353 0.0786092 0.986949 0.140543 + -0.183906 2.58021 -2.44528 0.0294615 0.993422 0.110656 + -0.218001 2.55814 -2.51328 -0.228921 0.905474 -0.357368 + -0.24916 2.55128 -2.50139 -0.509127 0.82027 -0.260665 + -0.253165 2.54906 -2.4975 -0.717118 0.686214 -0.121872 + -0.258603 2.54263 -2.4884 -0.828347 0.560103 -0.011234 + -0.263116 2.53481 -2.47807 -0.942069 0.269214 0.200073 + -0.27267 2.48008 -2.59304 -0.895014 0.419745 -0.150879 + -0.279561 2.46791 -2.57694 -0.993344 0.0904817 0.0712806 + 1.70947 2.207 -1.0732 -0.932897 0.0215028 0.359501 + 1.68994 2.06329 -1.11309 -0.928746 0.0378035 0.368784 + 1.70339 1.9893 -1.07574 -0.891568 0.0270818 0.452076 + 1.7066 2.25074 -1.08775 -0.946906 0.0705403 0.313677 + 1.68707 2.10694 -1.1277 -0.975667 0.0565817 0.211832 + 1.6801 1.96246 -1.12805 -0.952446 0.0480972 0.300888 + 1.69354 1.88847 -1.0907 -0.887855 0.0584277 0.456399 + 1.72999 1.82017 -1.02458 -0.824997 0.0814265 0.559241 + 1.67403 1.97548 -1.1624 -0.980483 0.0776943 0.180599 + 1.66549 1.89627 -1.1742 -0.963869 0.0805697 0.253901 + 1.67156 1.88333 -1.13979 -0.949116 0.0939896 0.300574 + 1.67721 1.82691 -1.10747 -0.904603 0.0904892 0.416541 + 1.71157 1.78383 -1.04185 -0.835431 0.120999 0.536111 + 1.67457 2.027 -1.19043 -0.994833 0.0992431 0.0214194 + 1.65095 1.83516 -1.20736 -0.986529 0.144783 0.0761403 + 1.65795 1.81516 -1.16071 -0.960089 0.102713 0.260151 + 1.6636 1.75882 -1.12833 -0.91532 0.161804 0.368793 + 1.69524 1.72227 -1.05862 -0.837344 0.205978 0.506387 + 1.67051 1.94782 -1.27149 -0.967205 0.167548 -0.1909 + 1.66079 1.88651 -1.2351 -0.988105 0.13857 -0.0666898 + 1.63079 1.69475 -1.26975 -0.969797 0.24063 -0.0398943 + 1.61944 1.69088 -1.21046 -0.963271 0.262642 0.0559363 + 1.64341 1.75406 -1.19388 -0.903505 0.190167 0.384077 + 1.64871 1.78512 -1.32169 -0.959819 0.202309 -0.194467 + 1.64063 1.74601 -1.29754 -0.981592 0.188498 -0.030748 + 1.61323 1.63098 -1.2815 -0.945025 0.326675 0.0145108 + 1.60187 1.62711 -1.22221 -0.943088 0.33252 -0.00401347 + 1.61773 1.64263 -1.16089 -0.909241 0.305563 0.282688 + 1.65962 1.79027 -1.34981 -0.800425 0.27522 -0.532517 + 1.6578 1.70994 -1.38728 -0.685265 0.39361 -0.612767 + 1.61771 1.62371 -1.39571 -0.925311 0.300882 -0.230802 + 1.60964 1.58459 -1.37157 -0.942423 0.300413 -0.146939 + 1.60154 1.60372 -1.30009 -0.91387 0.387585 -0.120914 + 1.6865 1.80988 -1.36317 -0.0330141 0.40307 -0.914574 + 1.68468 1.72955 -1.40063 0.00451311 0.429125 -0.903234 + 1.67945 1.64718 -1.44516 0.139863 0.500127 -0.854582 + 1.66448 1.57375 -1.48918 0.22822 0.537852 -0.811561 + 1.64283 1.63651 -1.43129 -0.642365 0.485275 -0.593191 + 1.73367 1.82544 -1.32353 0.632844 0.274154 -0.724119 + 1.73005 1.73866 -1.36081 0.654193 0.279369 -0.70284 + 1.73301 1.64749 -1.3925 0.696074 0.278801 -0.661627 + 1.72777 1.56512 -1.43703 0.722036 0.287675 -0.629212 + 1.72826 1.47856 -1.47591 0.749976 0.311276 -0.583646 + 1.8073 1.59501 -1.329 0.790291 0.234705 -0.565998 + 1.81026 1.50393 -1.36065 0.761352 0.208606 -0.613862 + 1.81855 1.40599 -1.38161 0.809609 0.219224 -0.544494 + 1.81903 1.31935 -1.42054 0.824329 0.232015 -0.516383 + 1.88805 1.42946 -1.26487 0.862473 0.198283 -0.465644 + 1.88883 1.33396 -1.29624 0.848639 0.16815 -0.501535 + 1.89712 1.23602 -1.31722 0.89229 0.157549 -0.423081 + 1.89403 1.14413 -1.35127 0.900486 0.162554 -0.403361 + 1.82824 1.22532 -1.44989 0.857478 0.240547 -0.454827 + 1.9662 1.25106 -1.18427 0.897749 0.174042 -0.404667 + 1.96698 1.15547 -1.2157 0.851342 0.0861279 -0.517492 + 1.95399 1.05227 -1.23915 0.88509 0.0718771 -0.459836 + 1.95089 0.960473 -1.27315 0.922425 0.103655 -0.372004 + 2.02124 1.12376 -1.10058 0.943906 0.107475 -0.312234 + 2.01002 1.03308 -1.14751 0.912561 0.0248311 -0.408186 + 1.99703 0.929877 -1.17096 0.921965 0.013977 -0.387022 + 1.97952 0.841297 -1.22353 0.943093 0.0450062 -0.32947 + 1.93121 0.894901 -1.34518 0.937188 0.0959741 -0.335362 + 2.04402 1.04975 -1.03439 0.970161 0.0366551 -0.239675 + 2.0328 0.959071 -1.08132 0.962936 -0.042258 -0.266397 + 2.01409 0.862541 -1.12133 0.963861 -0.0557323 -0.260511 + 1.99658 0.774051 -1.17386 0.972629 -0.0280371 -0.230665 + 2.06051 1.00499 -0.955058 0.988196 -0.0555689 -0.142761 + 2.04378 0.902897 -0.995826 0.982864 -0.124274 -0.136139 + 2.02508 0.806365 -1.03583 0.983887 -0.123265 -0.129508 + 2.00857 0.707927 -1.07553 0.987845 -0.100335 -0.118719 + 1.98022 0.694353 -1.24222 0.968275 -0.0336522 -0.247611 + 2.0661 0.987656 -0.861234 0.991255 -0.121944 -0.0504304 + 2.04937 0.885481 -0.902062 0.986152 -0.155723 -0.0570551 + 2.02757 0.760312 -0.902864 0.986576 -0.157178 -0.0443059 + 2.01107 0.661873 -0.942562 0.992309 -0.118422 -0.0360296 + 2.0847 1.11063 -0.690828 0.99095 -0.134231 -0.00102659 + 2.07118 1.00891 -0.747247 0.989535 -0.14429 0.000143634 + 2.05499 0.905722 -0.797122 0.985056 -0.171725 0.0132001 + 2.03319 0.780641 -0.797873 0.983153 -0.175636 0.0506217 + 2.08462 1.14167 -0.528789 0.972804 -0.21493 0.0863571 + 2.07631 1.0583 -0.619392 0.981467 -0.177007 0.0734189 + 2.06012 0.955113 -0.669267 0.965319 -0.235701 0.112269 + 2.03629 0.845114 -0.720743 0.968054 -0.21256 0.133004 + 2.09548 1.25584 -0.32634 0.905461 -0.382988 0.18292 + 2.07182 1.16429 -0.403371 0.899717 -0.378018 0.2182 + 2.06351 1.08092 -0.493969 0.928445 -0.306689 0.209597 + 2.04628 0.984262 -0.563157 0.914629 -0.324169 0.241595 + 2.11872 1.34714 -0.246282 0.894526 -0.425495 0.137028 + 2.07553 1.27638 -0.230928 0.803187 -0.506288 0.313947 + 2.05188 1.18475 -0.308008 0.827498 -0.457483 0.325509 + 2.03179 1.08707 -0.384218 0.850049 -0.40973 0.330965 + 2.01455 0.990413 -0.453411 0.843974 -0.395673 0.362146 + 2.12035 1.37266 -0.167875 0.830063 -0.497557 0.251857 + 2.09296 1.37722 -0.106179 0.691283 -0.550943 0.467536 + 2.04814 1.28086 -0.169283 0.714323 -0.569529 0.406669 + 2.0211 1.18058 -0.248183 0.73405 -0.526722 0.428642 + 2.001 1.0829 -0.324393 0.698443 -0.519557 0.492177 + 2.15469 1.46887 -0.097327 0.813106 -0.497315 0.302551 + 2.11209 1.46856 -0.032783 0.645814 -0.555379 0.523907 + 2.02482 1.34524 -0.069792 0.392895 -0.628094 0.671663 + 2.01546 1.25513 -0.152315 0.470969 -0.639135 0.608025 + 1.98841 1.15476 -0.231266 0.369836 -0.638807 0.674646 + 2.18873 1.57082 -0.033902 0.766863 -0.523109 0.371858 + 2.14613 1.57059 0.030692 0.668491 -0.511082 0.540291 + 2.04396 1.43658 0.003602 0.426998 -0.634943 0.643832 + 1.97634 1.39651 -0.013797 -0.191043 -0.67037 0.717012 + 1.97747 1.30843 -0.088838 -0.161013 -0.65685 0.736629 + 2.2366 1.67118 0.022866 0.711958 -0.602968 0.359923 + 2.15405 1.65995 0.099917 0.588529 -0.620177 0.518666 + 2.03495 1.51832 0.092235 0.386357 -0.612656 0.689478 + 1.96733 1.47825 0.074836 -0.183369 -0.713998 0.675709 + 2.30028 1.76094 0.076794 0.743493 -0.577635 0.336981 + 2.21773 1.74971 0.153845 0.511923 -0.621409 0.593116 + 2.04287 1.60776 0.161511 0.364529 -0.561598 0.742782 + 1.93928 1.55924 0.143957 -0.180167 -0.693776 0.697291 + 1.92104 1.44646 -0.019105 -0.739905 -0.527243 0.417799 + 2.32127 1.79285 -0.010067 0.840246 -0.535624 -0.0842239 + 2.33657 1.81891 0.081796 0.830153 -0.507981 0.229784 + 2.3157 1.79518 -0.041913 0.8125 -0.373584 -0.447526 + 2.35674 1.84633 -0.008909 0.96658 -0.193091 -0.168636 + 2.36546 1.88611 0.038201 0.987746 -0.155841 0.00845147 + 2.34528 1.85868 0.128906 0.848888 -0.431477 0.305315 + 2.28027 1.75988 -0.080374 0.887248 -0.211176 -0.410117 + 2.32537 1.91211 -0.01503 0.274366 0.425895 -0.862169 + 2.34897 1.93992 0.013602 0.631987 0.451472 -0.629893 + 2.36724 1.92857 0.042453 0.962657 0.182794 -0.199693 + 2.35617 1.95194 0.178382 0.93798 -0.170716 0.301743 + 2.26153 2.01042 0.037081 0.0306458 0.537382 -0.842782 + 2.28513 2.03823 0.065712 0.32017 0.729768 -0.604094 + 2.33417 2.04014 0.1172 0.623085 0.714893 -0.317321 + 2.35243 2.02888 0.146103 0.850756 0.52553 -0.00571994 + 2.35795 1.99449 0.182684 0.938337 0.177979 0.296391 + 2.21586 2.04588 0.063268 -0.0889614 0.6397 -0.763459 + 2.23229 2.08064 0.109466 0.135533 0.889422 -0.436531 + 2.28133 2.08255 0.160956 0.396365 0.911942 -0.1061 + 2.30384 2.06634 0.207823 0.58321 0.754691 0.300513 + 2.15972 2.09474 0.138633 -0.0465934 0.918884 -0.391766 + 2.19296 2.10671 0.200114 0.138424 0.990254 0.0153814 + 2.21547 2.09059 0.247031 0.308259 0.840799 0.44501 + 2.22548 2.04512 0.287584 0.386278 0.573091 0.722742 + 2.30936 2.03194 0.244404 0.667677 0.466693 0.580004 + 2.06722 2.07637 0.125264 -0.213807 0.715928 -0.66463 + 2.06868 2.09668 0.172282 -0.154962 0.955069 -0.252647 + 2.10191 2.10864 0.233762 -0.0297638 0.996132 0.082677 + 2.11664 2.09202 0.285745 0.126242 0.846815 0.516689 + 1.99034 2.06431 0.145555 -0.349591 0.712653 -0.608204 + 1.99179 2.08462 0.192572 -0.281934 0.926048 -0.250896 + 1.97828 2.09008 0.273113 -0.201683 0.971979 0.120754 + 1.99301 2.07346 0.325096 -0.0465262 0.841273 0.538605 + 2.12665 2.04664 0.326349 0.246298 0.530786 0.810927 + 1.97494 1.98465 0.109118 -0.33246 0.566044 -0.754364 + 1.92688 2.02509 0.144879 -0.284269 0.599323 -0.748333 + 1.86678 2.02229 0.164923 -0.340007 0.709316 -0.617467 + 1.88359 2.04991 0.211892 -0.35373 0.90158 -0.249056 + 1.81352 1.9195 0.12256 -0.322076 0.547825 -0.77211 + 1.75341 1.9167 0.142605 -0.438961 0.414584 -0.79714 + 1.73438 1.97249 0.188775 -0.572091 0.647194 -0.503838 + 1.7512 2.00011 0.235745 -0.534351 0.839487 -0.0986473 + 1.87008 2.05545 0.292484 -0.360957 0.922306 0.138063 + 1.77848 1.88161 0.104993 -0.479598 0.76479 -0.430211 + 1.72363 1.8572 0.131276 -0.922634 0.0408691 -0.383505 + 1.71488 1.87816 0.156571 -0.917652 0.0475583 -0.394528 + 1.69585 1.93395 0.202742 -0.924586 0.208421 -0.318907 + 1.78656 1.8729 0.074278 -0.450833 0.632716 -0.629618 + 1.73172 1.84849 0.100561 -0.859066 0.215164 -0.464445 + 1.72141 1.84774 0.19585 -0.919133 -0.393719 -0.0133936 + 1.71266 1.8687 0.221145 -0.920921 -0.383631 0.0687863 + 1.80597 1.83923 0.042994 -0.4178 0.411838 -0.809835 + 1.75682 1.79571 0.071374 -0.862163 -0.117462 -0.492825 + 1.74652 1.79497 0.166664 -0.90685 -0.420786 0.0237309 + 1.71044 1.88591 0.258945 -0.894354 -0.39077 0.217782 + 1.69363 1.95115 0.240542 -0.930314 0.366292 -0.0185871 + 1.80707 1.70358 0.008356 -0.884428 -0.0258417 -0.465961 + 1.84763 1.61518 -0.058342 -0.939199 -0.0838011 -0.33299 + 1.79353 1.68774 0.086183 -0.915349 -0.400036 -0.0459052 + 1.86913 1.54697 -0.119202 -0.968741 -0.071143 -0.237656 + 1.83409 1.59935 0.019485 -0.904695 -0.425944 0.00991559 + 1.85245 1.60663 0.108876 -0.728893 -0.609277 0.312243 + 1.80713 1.67712 0.149785 -0.770186 -0.583953 0.256538 + 1.88609 1.47278 -0.186297 -0.998635 0.0506971 -0.0125523 + 1.87462 1.52017 -0.039378 -0.898153 -0.427624 0.102274 + 1.89298 1.52745 0.050015 -0.705448 -0.608514 0.363392 + 1.8862 1.64258 0.21421 -0.27612 -0.720871 0.635691 + 1.84087 1.71298 0.255069 -0.651491 -0.635158 0.414891 + 1.87618 1.42189 -0.268346 -0.996064 0.016844 0.0870237 + 1.89158 1.44598 -0.106472 -0.942362 -0.289633 0.16753 + 1.86885 1.35294 -0.337923 -0.979877 0.00763949 0.199458 + 1.90639 1.358 -0.168095 -0.9417 -0.229522 0.246012 + 1.93585 1.35848 -0.080729 -0.733469 -0.461113 0.499398 + 1.93698 1.27049 -0.155721 -0.741454 -0.401711 0.53747 + 1.85871 1.43788 -0.420448 -0.961644 0.205777 0.181372 + 1.85085 1.29307 -0.412823 -0.968556 0.0391518 0.245698 + 1.89905 1.28905 -0.237671 -0.943827 -0.129409 0.304046 + 1.92234 1.18614 -0.219015 -0.69095 -0.372551 0.619511 + 1.96811 1.21832 -0.17136 -0.0948823 -0.646467 0.757019 + 1.84298 1.48933 -0.552965 -0.912855 0.300427 0.276476 + 1.84071 1.37809 -0.49529 -0.966285 0.11132 0.232166 + 1.82658 1.23187 -0.486835 -0.962105 0.0355134 0.270355 + 1.88441 1.2047 -0.300965 -0.937289 -0.0666557 0.342119 + 1.89832 1.10095 -0.296262 -0.726026 -0.295838 0.620779 + 1.82859 1.54464 -0.664366 -0.853786 0.424573 0.30131 + 1.81373 1.44579 -0.625345 -0.91646 0.219698 0.334416 + 1.81147 1.33455 -0.567678 -0.951584 0.096741 0.29177 + 1.80398 1.18699 -0.568694 -0.958656 0.0965626 0.267685 + 1.86015 1.14351 -0.374978 -0.929323 0.0243971 0.368461 + 1.78188 1.54323 -0.805916 -0.828759 0.447392 0.336152 + 1.74035 1.49789 -0.858394 -0.864628 0.355173 0.355346 + 1.78706 1.49931 -0.716844 -0.873598 0.343412 0.344811 + 1.77308 1.39422 -0.689219 -0.920959 0.123895 0.369439 + 1.78887 1.28967 -0.649536 -0.948651 0.0275966 0.315117 + 1.79768 1.63054 -0.869151 -0.8072 0.338824 0.48335 + 1.74955 1.58263 -0.912958 -0.810723 0.334747 0.480283 + 1.70359 1.5243 -0.951933 -0.83526 0.265906 0.481285 + 1.70034 1.44373 -0.903383 -0.877824 0.306469 0.368106 + 1.74642 1.44774 -0.780717 -0.897925 0.23803 0.370234 + 1.75647 1.70315 -0.956914 -0.80009 0.198643 0.566036 + 1.73805 1.66673 -0.974234 -0.817519 0.214121 0.534617 + 1.70923 1.65183 -1.00802 -0.766276 0.265323 0.58517 + 1.72073 1.56773 -0.946754 -0.785855 0.263163 0.559623 + 1.68522 1.62034 -1.02008 -0.76353 0.279533 0.582137 + 1.66809 1.577 -1.02521 -0.795263 0.243144 0.555372 + 1.66357 1.47014 -0.99693 -0.835576 0.210523 0.507437 + 1.66068 1.38386 -0.951877 -0.886614 0.265384 0.378797 + 1.67123 1.69079 -1.07069 -0.805884 0.286591 0.51809 + 1.64934 1.63786 -1.08662 -0.85063 0.271332 0.450341 + 1.63962 1.53542 -1.04439 -0.793347 0.215067 0.569514 + 1.60744 1.48643 -1.07733 -0.816076 0.175225 0.550742 + 1.63139 1.42106 -1.02992 -0.848007 0.169924 0.502006 + 1.64171 1.7058 -1.1443 -0.906867 0.266878 0.326141 + 1.62087 1.59636 -1.10574 -0.845629 0.314286 0.431435 + 1.59827 1.55151 -1.12345 -0.866794 0.292173 0.404108 + 1.98978 1.6911 0.231766 0.262485 -0.587353 0.765584 + 1.98945 1.75703 0.288962 0.357307 -0.655906 0.66492 + 1.8863 1.73845 0.328145 0.0159542 -0.745426 0.666398 + 1.8458 1.74 0.305064 -0.526804 -0.688234 0.49881 + 2.2174 1.81556 0.210993 0.426864 -0.604969 0.672161 + 2.14869 1.86319 0.301296 0.402667 -0.549092 0.732365 + 2.03042 1.82386 0.333414 0.38261 -0.563965 0.731815 + 1.92727 1.80528 0.372597 0.278413 -0.51425 0.811192 + 2.31566 1.8655 0.18929 0.664612 -0.516192 0.540219 + 2.24695 1.91313 0.279592 0.500297 -0.44567 0.742348 + 2.22239 1.94999 0.310547 0.441435 -0.206128 0.873296 + 2.13676 1.92875 0.342738 0.35553 -0.227517 0.906551 + 2.32655 1.95876 0.238765 0.766278 -0.176219 0.617871 + 2.30199 1.99562 0.269721 0.649086 0.102996 0.75371 + 2.21811 2.00879 0.3129 0.395035 0.248026 0.884551 + 2.13248 1.98755 0.345091 0.308353 0.136688 0.9414 + 2.01849 1.88934 0.374807 0.327816 -0.276444 0.903391 + 2.02889 1.97432 0.382406 0.234953 0.116625 0.964985 + 1.95482 1.94111 0.397731 0.212943 0.0215192 0.976828 + 1.94442 1.85613 0.390132 0.216446 -0.262399 0.940371 + 1.86725 1.78376 0.373066 -0.111711 -0.563103 0.818801 + 2.02307 2.03341 0.363662 0.135103 0.530452 0.83688 + 1.91758 1.99965 0.388944 -0.0136993 0.499708 0.866085 + 1.92943 1.95493 0.405201 0.24524 0.181315 0.952356 + 1.8844 1.83461 0.3906 0.0565497 -0.312228 0.948323 + 1.88753 2.03961 0.350326 -0.248674 0.779322 0.575169 + 1.78108 1.97992 0.360723 -0.478586 0.63171 0.609835 + 1.83084 1.95588 0.403754 -0.270964 0.449504 0.85119 + 1.84269 1.91125 0.420061 -0.107942 -0.0450639 0.993135 + 1.85901 1.84842 0.398071 -0.0344053 -0.398678 0.916445 + 1.76363 1.99576 0.302879 -0.534506 0.803617 0.26173 + 1.70607 1.9468 0.307678 -0.897708 0.252123 0.361323 + 1.72681 1.93728 0.344367 -0.776633 0.065298 0.62656 + 1.77658 1.91316 0.387347 -0.630922 -0.0637786 0.77322 + 1.79859 1.88451 0.394568 -0.53452 -0.331479 0.777438 + 1.73118 1.87639 0.295635 -0.789293 -0.469433 0.39579 + 1.75319 1.84774 0.302855 -0.776952 -0.480615 0.406638 + 1.81491 1.82177 0.372629 -0.527449 -0.4648 0.711168 + 1.82675 1.78531 0.349985 -0.555107 -0.631421 0.541446 + 1.76504 1.81136 0.280262 -0.792617 -0.509043 0.335608 + 1.76011 1.78434 0.230267 -0.864917 -0.42226 0.27132 + 1.58453 1.45584 -1.09935 -0.802301 0.163224 0.57417 + 1.59609 1.36052 -1.07345 -0.839104 0.14781 0.523504 + 1.62538 1.32332 -0.99542 -0.890444 0.265153 0.369868 + 1.57536 1.52092 -1.14547 -0.878333 0.317695 0.357213 + 1.55389 1.48278 -1.17341 -0.895957 0.331959 0.295066 + 1.55777 1.43811 -1.13185 -0.825413 0.220356 0.519746 + 1.58134 1.56168 -1.19528 -0.921888 0.3531 0.159505 + 1.55987 1.52346 -1.22328 -0.918088 0.380083 0.11248 + 1.53859 1.4778 -1.26239 -0.907779 0.412614 0.0754066 + 1.5267 1.44186 -1.20255 -0.901004 0.362714 0.237974 + 1.53059 1.39729 -1.16094 -0.86159 0.171245 0.477847 + 1.59512 1.59787 -1.17855 -0.924556 0.325277 0.198473 + 1.58809 1.59093 -1.23894 -0.9231 0.384251 -0.0154084 + 1.5764 1.56368 -1.25754 -0.903209 0.4291 -0.00931362 + 1.55512 1.51801 -1.29664 -0.89359 0.437548 -0.100239 + 1.5168 1.43611 -1.29238 -0.914226 0.403938 -0.0320071 + 1.50491 1.40026 -1.23249 -0.910542 0.356512 0.209312 + 1.51426 1.3487 -1.17618 -0.839164 0.154629 0.521435 + 1.56933 1.34288 -1.10591 -0.785845 0.0716688 0.614257 + 1.58824 1.56145 -1.33468 -0.864739 0.441311 -0.239729 + 1.54182 1.47566 -1.33128 -0.863572 0.438451 -0.249004 + 1.49947 1.38977 -1.32112 -0.887005 0.458013 -0.0587064 + 1.482 1.36422 -1.25526 -0.895911 0.40474 0.183106 + 1.49135 1.31266 -1.19896 -0.831164 0.159119 0.532773 + 1.5376 1.42074 -1.39016 -0.804266 0.480961 -0.349045 + 1.52449 1.42932 -1.36002 -0.806215 0.502831 -0.311736 + 1.47664 1.34482 -1.35347 -0.873371 0.474939 -0.107961 + 1.45918 1.31928 -1.28762 -0.910555 0.393848 0.125594 + 1.45892 1.26563 -1.2397 -0.86702 0.148839 0.475524 + 1.55899 1.44397 -1.42699 -0.867956 0.423709 -0.259082 + 1.53418 1.34028 -1.51799 -0.775167 0.564166 -0.284311 + 1.50517 1.32765 -1.47451 -0.693466 0.6526 -0.305315 + 1.51048 1.35755 -1.41971 -0.742662 0.584706 -0.326452 + 1.49738 1.36613 -1.38956 -0.781909 0.537167 -0.316338 + 1.59651 1.47515 -1.4948 -0.838945 0.433246 -0.329347 + 1.5717 1.37146 -1.5858 -0.780036 0.504412 -0.370287 + 1.56679 1.29244 -1.68873 -0.615639 0.681116 -0.39632 + 1.50726 1.26305 -1.64863 -0.619662 0.728836 -0.291233 + 1.47825 1.25041 -1.60514 -0.622239 0.734984 -0.269477 + 1.62162 1.48795 -1.53037 -0.6741 0.515948 -0.52857 + 1.61249 1.3985 -1.60824 -0.597468 0.605622 -0.525599 + 1.60758 1.31948 -1.71117 -0.331996 0.708153 -0.623136 + 1.60007 1.21433 -1.83044 0.171037 0.802544 -0.571549 + 1.54917 1.22917 -1.80395 -0.316075 0.83959 -0.441797 + 1.65498 1.50123 -1.54717 0.118303 0.602727 -0.789129 + 1.64584 1.41169 -1.62508 0.180601 0.667739 -0.722155 + 1.63913 1.34099 -1.68663 0.485408 0.577644 -0.656283 + 1.64138 1.28281 -1.74627 0.499445 0.59676 -0.628038 + 1.60984 1.26131 -1.77081 0.354721 0.662943 -0.659302 + 1.71876 1.40596 -1.53395 0.759519 0.328406 -0.561499 + 1.71504 1.32517 -1.58463 0.800481 0.321174 -0.506041 + 1.70833 1.25447 -1.64618 0.834385 0.320584 -0.44836 + 1.69567 1.18769 -1.7125 0.856598 0.299539 -0.420138 + 1.6395 1.21314 -1.80858 0.639438 0.540823 -0.546471 + 1.82453 1.14454 -1.50056 0.854569 0.227015 -0.467093 + 1.80562 1.07001 -1.56648 0.868029 0.226457 -0.441863 + 1.79295 1.00322 -1.6328 0.882549 0.22458 -0.413123 + 1.7691 0.950287 -1.71131 0.899067 0.22975 -0.372685 + 1.69378 1.11793 -1.77487 0.876339 0.305138 -0.372721 + 1.90324 1.05011 -1.38061 0.940898 0.159919 -0.298558 + 1.88766 0.978483 -1.44294 0.908477 0.130693 -0.396974 + 1.86874 0.903956 -1.50886 0.919014 0.113824 -0.377436 + 1.84544 0.846043 -1.58295 0.923027 0.116013 -0.366827 + 1.91563 0.823272 -1.40751 0.925274 0.0637843 -0.373899 + 1.88919 0.755559 -1.47603 0.93202 0.0461949 -0.35945 + 1.86589 0.69756 -1.55017 0.946661 0.0574913 -0.317061 + 1.84155 0.660377 -1.63517 0.95274 0.0719376 -0.295147 + 1.82158 0.793109 -1.66147 0.933142 0.131926 -0.334428 + 1.95983 0.77573 -1.29557 0.943286 0.050874 -0.32806 + 1.9371 0.70295 -1.36411 0.933537 0.016757 -0.35809 + 1.91065 0.635231 -1.43262 0.940694 0.0153696 -0.338908 + 1.8863 0.579432 -1.50997 0.952915 0.0469511 -0.299582 + 1.95748 0.621574 -1.31076 0.951806 -0.0396771 -0.304122 + 1.92874 0.541985 -1.37811 0.953258 -0.0440531 -0.298928 + 1.90438 0.486181 -1.45545 0.964023 0.0614641 -0.258617 + 1.88613 0.445995 -1.54445 0.960478 0.103117 -0.258551 + 1.86197 0.542251 -1.59497 0.95571 0.0853998 -0.281646 + 1.99221 0.628315 -1.14384 0.987686 -0.0739775 -0.137858 + 1.97947 0.54448 -1.21083 0.978644 -0.0415123 -0.201329 + 1.95073 0.464891 -1.27818 0.963453 0.014457 -0.267487 + 1.94019 0.396175 -1.36396 0.957087 0.164188 -0.238802 + 2.00034 0.561665 -0.990198 0.993099 -0.108892 -0.0435471 + 1.9876 0.477829 -1.05719 0.998822 -9.28516e-005 -0.0485147 + 1.99081 0.394963 -1.14666 0.993859 0.013095 -0.109873 + 1.98028 0.326333 -1.23239 0.980332 0.132749 -0.146041 + 2.01226 0.657475 -0.819343 0.987232 -0.15183 0.0481693 + 2.00153 0.557266 -0.866979 0.993478 -0.108648 0.0346047 + 1.99419 0.452858 -0.919338 0.998614 -0.0452626 0.0268432 + 1.99741 0.369992 -1.00881 0.999767 -0.00279491 0.0214261 + 2.01535 0.722029 -0.742154 0.972088 -0.178786 0.151921 + 1.99507 0.593357 -0.747888 0.976081 -0.155522 0.151918 + 1.98773 0.488861 -0.800298 0.986084 -0.113757 0.121233 + 1.98427 0.380212 -0.861711 0.986503 -0.106008 0.124799 + 2.02245 0.874262 -0.614633 0.929315 -0.276767 0.244488 + 2.00529 0.764217 -0.656829 0.944617 -0.210281 0.251951 + 1.98501 0.635545 -0.662561 0.948275 -0.171097 0.267396 + 1.97703 0.517647 -0.708554 0.954295 -0.165996 0.24853 + 1.9935 0.882653 -0.514565 0.862711 -0.332253 0.381233 + 1.97634 0.772609 -0.556762 0.851082 -0.287047 0.439617 + 1.96969 0.657329 -0.607493 0.855888 -0.236219 0.460061 + 1.96171 0.539344 -0.653536 0.791871 -0.31462 0.523406 + 1.97703 0.986076 -0.393898 0.663247 -0.524674 0.533686 + 1.95598 0.878317 -0.455052 0.538996 -0.472276 0.697452 + 1.94212 0.77194 -0.513802 0.503137 -0.428994 0.750212 + 1.93547 0.65666 -0.564533 0.487376 -0.39072 0.780899 + 1.93571 0.964666 -0.374015 0.129455 -0.613249 0.779209 + 1.90827 0.87039 -0.446126 -0.0730224 -0.535608 0.841304 + 1.89441 0.764101 -0.504826 -0.209419 -0.432517 0.876968 + 1.89444 0.652219 -0.557439 -0.221493 -0.452192 0.863981 + 1.95968 1.0614 -0.30456 0.291985 -0.632291 0.717601 + 1.88088 0.964924 -0.39846 -0.495392 -0.451569 0.742073 + 1.85344 0.870648 -0.470571 -0.542136 -0.458412 0.704235 + 1.83094 0.790462 -0.543286 -0.660761 -0.340721 0.668807 + 1.94409 1.13304 -0.248657 -0.191081 -0.597667 0.778641 + 1.91535 1.03977 -0.321901 -0.27071 -0.614998 0.740604 + 1.822 0.968071 -0.452114 -0.813169 -0.191859 0.549496 + 1.78124 0.914346 -0.53626 -0.861443 -0.148911 0.485531 + 1.75873 0.834162 -0.608975 -0.86638 -0.201307 0.457013 + 1.85647 1.04292 -0.375554 -0.799086 -0.19388 0.569098 + 1.81829 1.08548 -0.45427 -0.929991 0.0950057 0.355091 + 1.78834 1.03441 -0.536214 -0.943985 0.106347 0.312381 + 1.74758 0.980684 -0.62036 -0.948823 0.151941 0.276855 + 1.77403 1.13592 -0.650637 -0.973769 0.0566799 0.220368 + 1.76018 1.08757 -0.733287 -0.975327 0.108805 0.192092 + 1.73504 1.03363 -0.812257 -0.964946 0.12261 0.232047 + 1.72244 0.926738 -0.699321 -0.969064 0.0966896 0.227081 + 1.75903 1.23639 -0.718449 -0.933234 -0.0317795 0.357862 + 1.74518 1.18803 -0.801099 -0.879111 -0.198859 0.433151 + 1.71522 1.12579 -0.863086 -0.791667 -0.201756 0.576678 + 1.71302 0.976869 -0.880152 -0.966437 0.102223 0.235689 + 1.74325 1.34093 -0.758132 -0.880187 0.0909851 0.465824 + 1.69942 1.27075 -0.806761 -0.836947 -0.0703456 0.542745 + 1.66946 1.2085 -0.86874 -0.732137 -0.145528 0.66543 + 1.63217 1.13485 -0.91298 -0.624685 -0.244123 0.741737 + 1.69319 1.06903 -0.930981 -0.682886 -0.308829 0.662036 + 1.70676 1.38777 -0.829262 -0.8727 0.240032 0.425181 + 1.66294 1.31767 -0.877841 -0.88034 0.206199 0.427181 + 1.62401 1.25131 -0.923105 -0.857357 0.165391 0.487427 + 1.58673 1.17767 -0.967345 -0.864335 0.0943314 0.493991 + 1.60233 1.06256 -0.96058 -0.593298 -0.332617 0.733051 + 1.58645 1.25696 -1.04068 -0.881474 0.28495 0.376574 + 1.54824 1.19931 -1.08523 -0.894809 0.200963 0.398661 + 1.51747 1.13409 -1.13427 -0.898731 0.153436 0.410781 + 1.55596 1.11245 -1.01639 -0.888552 -0.0141568 0.458557 + 1.55301 1.29429 -1.12115 -0.82964 0.142834 0.539718 + 1.51479 1.23664 -1.16569 -0.83315 0.124071 0.53895 + 1.48237 1.18961 -1.20643 -0.843278 0.0572872 0.534416 + 1.48367 1.07867 -1.18368 -0.878202 0.0399063 0.476623 + 1.44856 1.13419 -1.25584 -0.812248 0.0665417 0.579505 + 1.46009 1.01299 -1.23031 -0.835144 0.044783 0.548205 + 1.54043 1.03896 -1.07509 -0.863095 -0.131112 0.487726 + 1.58681 0.989069 -1.01928 -0.710331 -0.192575 0.677012 + 1.42778 1.21479 -1.28065 -0.85326 0.157485 0.497137 + 1.46073 1.30484 -1.39622 -0.813722 0.57069 -0.110313 + 1.44974 1.26479 -1.51845 -0.594693 0.768678 -0.23553 + 1.48146 1.32614 -1.4323 -0.725099 0.641886 -0.249429 + 1.47615 1.29624 -1.48712 -0.566957 0.752009 -0.336217 + 1.45184 1.21897 -1.63648 -0.559207 0.780175 -0.280383 + 1.48964 1.19978 -1.76384 -0.47794 0.83265 -0.279763 + 1.43979 1.18462 -1.73799 -0.447951 0.873471 -0.190759 + 1.41602 1.19716 -1.6283 -0.620747 0.728048 -0.290895 + 1.38771 1.1672 -1.63161 -0.743786 0.559587 -0.365574 + 1.38119 1.19504 -1.56743 -0.775228 0.596055 -0.209141 + 1.5387 1.17114 -1.89964 -0.106165 0.916496 -0.385699 + 1.41362 1.14503 -1.86862 -0.319305 0.934196 -0.15913 + 1.37663 1.14592 -1.80136 -0.41811 0.903719 -0.09207 + 1.40397 1.16281 -1.72981 -0.539043 0.838513 -0.0795562 + 1.58961 1.1563 -1.92613 0.371172 0.790447 -0.487262 + 1.62973 1.16616 -1.86822 0.701789 0.539025 -0.465773 + 1.62799 1.10638 -1.93907 0.76729 0.497841 -0.404252 + 1.63031 1.05287 -2.00698 0.798148 0.485847 -0.356248 + 1.6801 1.06513 -1.84902 0.884092 0.315177 -0.345029 + 1.67836 1.00543 -1.91982 0.907555 0.3063 -0.287269 + 1.75542 0.897488 -1.78546 0.909556 0.230262 -0.34596 + 1.7298 0.86485 -1.87113 0.922923 0.230535 -0.308328 + 1.71425 0.833595 -1.95099 0.936017 0.2267 -0.269218 + 1.74214 0.723213 -1.93861 0.938724 0.19566 -0.28375 + 1.79718 0.760102 -1.7523 0.938004 0.156933 -0.309064 + 1.77156 0.727377 -1.83802 0.925709 0.203147 -0.319051 + 1.76037 0.623595 -1.94926 0.937715 0.153794 -0.311508 + 1.72877 0.620289 -2.03794 0.944454 0.133595 -0.300264 + 1.81715 0.627372 -1.726 0.963781 0.101073 -0.2468 + 1.78979 0.627846 -1.84862 0.953463 0.141691 -0.266142 + 1.81014 0.522261 -1.81735 0.965712 0.0847973 -0.245377 + 1.78193 0.519971 -1.91998 0.952571 0.0837122 -0.292575 + 1.75033 0.516578 -2.0087 0.942768 0.0952932 -0.319544 + 1.83749 0.521787 -1.69473 0.964391 0.103509 -0.243383 + 1.83638 0.413125 -1.73832 0.959552 0.108642 -0.259726 + 1.80817 0.410835 -1.84095 0.961632 0.0819259 -0.261825 + 1.77306 0.429219 -1.96599 0.951472 0.069319 -0.299828 + 1.7397 0.435529 -2.06672 0.9414 0.0153384 -0.336944 + 1.86166 0.425444 -1.64426 0.956767 0.120679 -0.264637 + 1.90282 0.328456 -1.54907 0.946218 0.190039 -0.261833 + 1.87754 0.316044 -1.64317 0.945123 0.163967 -0.282591 + 1.8437 0.321936 -1.74858 0.952746 0.0741091 -0.29459 + 1.80858 0.340319 -1.87362 0.946973 -0.0228189 -0.320502 + 1.92194 0.355984 -1.45294 0.948587 0.183001 -0.258252 + 1.96 0.235763 -1.42632 0.963929 0.0755163 -0.255224 + 1.93246 0.229713 -1.52304 0.954348 0.00484252 -0.298657 + 1.89862 0.235606 -1.62845 0.920979 -0.0812703 -0.381042 + 1.85498 0.253233 -1.72317 0.916886 -0.102173 -0.385852 + 1.97913 0.263295 -1.33021 0.980224 0.0763599 -0.182566 + 1.9978 0.223203 -1.19056 0.999099 0.00454468 -0.042206 + 1.99354 0.170387 -1.28388 0.987074 -0.0353957 -0.156306 + 1.966 0.164338 -1.38061 0.966422 -0.0921063 -0.239884 + 1.94276 0.159406 -1.48706 0.938742 -0.107998 -0.32726 + 1.99895 0.286242 -1.09275 0.999457 0.0299574 -0.0137188 + 1.99281 0.211628 -1.03391 0.978934 -0.174571 0.10589 + 1.98855 0.158812 -1.12723 0.994071 -0.0975026 0.0481312 + 1.99174 0.109062 -1.23506 0.875254 -0.479624 -0.0623798 + 1.9685 0.104039 -1.34156 0.932262 -0.290786 -0.215244 + 1.98581 0.296467 -0.94566 0.991516 -0.0642481 0.112993 + 1.97373 0.305143 -0.850089 0.93049 -0.243527 0.273649 + 1.98072 0.220307 -0.938347 0.877151 -0.355734 0.322583 + 1.98151 0.146584 -1.03386 0.863007 -0.413602 0.290091 + 1.9847 0.096749 -1.14174 0.857099 -0.495846 0.139706 + 1.97356 0.409 -0.769973 0.951985 -0.185096 0.243854 + 1.96402 0.330958 -0.8036 0.719105 -0.455412 0.524869 + 1.96047 0.238716 -0.887436 0.544927 -0.623345 0.560799 + 1.96125 0.164999 -0.98295 0.480761 -0.701365 0.526266 + 1.95846 0.09336 -1.08147 0.398876 -0.843646 0.359388 + 1.96385 0.434814 -0.723485 0.783438 -0.36088 0.505956 + 1.9379 0.44258 -0.694537 0.445 -0.519247 0.729628 + 1.93977 0.349149 -0.769906 0.383093 -0.609971 0.693668 + 1.93622 0.256907 -0.853742 0.176949 -0.707156 0.684558 + 1.93193 0.175897 -0.951427 0.113965 -0.791755 0.600113 + 1.93576 0.547198 -0.624538 0.428931 -0.455461 0.780111 + 1.9005 0.439095 -0.683499 -0.228906 -0.580071 0.781741 + 1.90237 0.345576 -0.758919 -0.242611 -0.669729 0.701857 + 1.9044 0.264829 -0.84866 -0.385373 -0.672833 0.631493 + 1.90011 0.183817 -0.946346 -0.403227 -0.72259 0.561491 + 1.89473 0.542755 -0.617445 -0.270596 -0.498903 0.823331 + 1.82821 0.591857 -0.65849 -0.743771 -0.37207 0.55531 + 1.83398 0.488284 -0.724495 -0.756749 -0.40291 0.514775 + 1.83552 0.40161 -0.795575 -0.767168 -0.449772 0.457338 + 1.83097 0.678666 -0.59585 -0.696655 -0.366538 0.616703 + 1.73189 0.688842 -0.755276 -0.88312 -0.268487 0.384726 + 1.73691 0.605799 -0.81344 -0.881337 -0.306718 0.359401 + 1.73845 0.519127 -0.884519 -0.848222 -0.325539 0.417785 + 1.83755 0.320778 -0.885367 -0.750635 -0.477231 0.456943 + 1.73465 0.775569 -0.692687 -0.905329 -0.20541 0.371734 + 1.69835 0.868144 -0.783033 -0.971914 0.0823167 0.22047 + 1.67673 0.798432 -0.840487 -0.95697 -0.0222398 0.289333 + 1.68175 0.715383 -0.898643 -0.920956 -0.192014 0.339072 + 1.69139 0.907156 -0.937606 -0.86201 0.1953 0.467757 + 1.64391 0.823498 -0.957905 -0.897776 0.0385864 0.438759 + 1.62864 0.74213 -1.01337 -0.908609 -0.141116 0.393086 + 1.66647 0.634013 -0.954109 -0.887547 -0.197212 0.416374 + 1.73373 0.435792 -0.954179 -0.823002 -0.366495 0.433992 + 1.66335 0.996747 -0.978581 -0.595002 -0.162131 0.787202 + 1.61587 0.913088 -0.998879 -0.716985 -0.0043455 0.697075 + 1.59302 0.838534 -1.04755 -0.841369 -0.174901 0.511379 + 1.61581 0.67097 -1.08032 -0.919365 -0.196055 0.341073 + 1.66176 0.550679 -1.02377 -0.893757 -0.258638 0.366475 + 1.56395 0.914514 -1.06795 -0.817058 -0.159239 0.55413 + 1.54895 0.846936 -1.1179 -0.832362 -0.242245 0.498488 + 1.58019 0.76737 -1.11449 -0.856175 -0.252863 0.450583 + 1.60549 0.600545 -1.15254 -0.907584 -0.23119 0.350488 + 1.51686 0.973193 -1.12178 -0.846371 -0.0954106 0.523978 + 1.50185 0.905609 -1.17173 -0.794253 -0.206077 0.571572 + 1.53037 0.782376 -1.18348 -0.767121 -0.279822 0.577257 + 1.56162 0.702814 -1.18007 -0.816341 -0.303426 0.491447 + 1.47412 0.841002 -1.21862 -0.731233 -0.211109 0.648638 + 1.49902 0.723297 -1.24875 -0.717535 -0.378423 0.584756 + 1.44277 0.781924 -1.2839 -0.700884 -0.320116 0.637407 + 1.46561 0.683379 -1.31781 -0.657722 -0.428735 0.619344 + 1.55015 0.641811 -1.25441 -0.787389 -0.377322 0.48749 + 1.59402 0.539542 -1.22688 -0.908403 -0.238131 0.343653 + 1.65143 0.480345 -1.09594 -0.885784 -0.269028 0.378167 + 1.39914 0.743891 -1.34262 -0.661716 -0.339201 0.668636 + 1.41728 0.657188 -1.38505 -0.633818 -0.499654 0.590441 + 1.51673 0.601888 -1.32347 -0.718708 -0.40455 0.565507 + 1.57501 0.491937 -1.30862 -0.85682 -0.216954 0.46775 + 1.63884 0.413147 -1.17516 -0.883952 -0.289295 0.367339 + 1.35082 0.717703 -1.40986 -0.659248 -0.463665 0.591952 + 1.36445 0.647105 -1.45278 -0.645063 -0.510812 0.568299 + 1.47172 0.58636 -1.39737 -0.693542 -0.477079 0.53981 + 1.52999 0.476495 -1.38248 -0.822814 -0.331198 0.461827 + 1.61983 0.365541 -1.2569 -0.869424 -0.356363 0.34221 + 1.21154 0.769462 -1.53291 -0.730088 -0.589616 0.345433 + 1.29789 0.714715 -1.48249 -0.688886 -0.481824 0.541555 + 1.41889 0.576279 -1.46511 -0.645059 -0.497596 0.579911 + 1.49544 0.45761 -1.46457 -0.751038 -0.351266 0.559065 + 1.16249 0.822434 -1.57186 -0.836205 -0.343661 0.427386 + 1.17212 0.792308 -1.63148 -0.828446 -0.447297 0.337049 + 1.12307 0.845368 -1.67038 -0.836426 -0.447318 0.316699 + 1.09485 0.870919 -1.70684 -0.80139 -0.493808 0.337534 + 1.43477 0.463087 -1.52806 -0.727208 -0.445268 0.522402 + 1.57685 0.307882 -1.43463 -0.788277 -0.459401 0.409352 + 1.6114 0.326762 -1.35253 -0.831172 -0.443992 0.334699 + 1.69386 0.205535 -1.30996 -0.792732 -0.537131 0.288213 + 1.70229 0.244309 -1.21432 -0.797824 -0.506063 0.327684 + 1.55043 0.284485 -1.52791 -0.764261 -0.500115 0.407174 + 1.64693 0.15814 -1.50387 -0.716971 -0.606196 0.344208 + 1.67335 0.181537 -1.41059 -0.762058 -0.56271 0.32035 + 1.79129 0.099711 -1.27507 -0.711496 -0.635652 0.299535 + 1.74022 0.073938 -1.48243 -0.65837 -0.709218 0.252109 + 1.77078 0.075799 -1.37565 -0.693189 -0.677378 0.246269 + 1.86011 0.040048 -1.25573 -0.455616 -0.847977 0.27083 + 1.80779 0.132344 -1.16719 -0.712253 -0.610894 0.345694 + 1.70267 0.06714 -1.57905 -0.601434 -0.748713 0.278758 + 1.76223 0.029679 -1.57477 -0.345 -0.931193 0.117703 + 1.80415 0.023321 -1.47176 -0.389471 -0.915324 0.102441 + 1.83471 0.025187 -1.36499 -0.440512 -0.879021 0.182404 + 1.79512 0.025571 -1.58045 0.106565 -0.985244 -0.133933 + 1.83704 0.019212 -1.47744 0.12631 -0.988382 -0.0845405 + 1.86908 0.015865 -1.36964 0.126595 -0.990912 0.0454667 + 1.89448 0.030728 -1.26038 0.0266796 -0.98352 0.178819 + 1.77127 0.05782 -1.70511 0.358809 -0.895134 -0.264559 + 1.8215 0.041109 -1.60877 0.441333 -0.846886 -0.296662 + 1.8638 0.034655 -1.50779 0.509336 -0.82995 -0.227507 + 1.89584 0.03122 -1.40004 0.543211 -0.827716 -0.140745 + 1.72048 0.064447 -1.80299 0.355504 -0.906246 -0.22877 + 1.78786 0.081215 -1.75983 0.604423 -0.718133 -0.344902 + 1.83784 0.07849 -1.66291 0.696546 -0.612632 -0.373504 + 1.88013 0.072038 -1.56194 0.766398 -0.552423 -0.327815 + 1.91872 0.068677 -1.45832 0.838603 -0.4831 -0.251711 + 1.73707 0.087843 -1.85771 0.551596 -0.767886 -0.325718 + 1.72202 0.125014 -1.9457 0.802322 -0.412461 -0.431457 + 1.76963 0.12724 -1.84895 0.854101 -0.297045 -0.426937 + 1.81961 0.124515 -1.75203 0.856929 -0.288681 -0.427008 + 1.86571 0.123374 -1.65405 0.882445 -0.269715 -0.385415 + 1.66667 0.12824 -2.04308 0.835569 -0.388266 -0.388681 + 1.6716 0.181256 -2.06591 0.873684 -0.292629 -0.388645 + 1.71921 0.18357 -1.96911 0.881119 -0.203479 -0.42688 + 1.76707 0.188831 -1.87443 0.880938 -0.198953 -0.429379 + 1.81318 0.18769 -1.77645 0.882777 -0.183771 -0.432358 + 1.73059 0.259704 -1.99498 0.863772 -0.295049 -0.408466 + 1.76911 0.263281 -1.91358 0.870296 -0.266004 -0.414521 + 1.86033 0.185653 -1.68272 0.908296 -0.134305 -0.396183 + 1.90429 0.120099 -1.55038 0.905735 -0.239975 -0.349366 + 1.94675 0.0711 -1.35412 0.780844 -0.586923 -0.214018 + 1.73522 0.35624 -2.06279 0.90498 -0.19652 -0.377347 + 1.76987 0.348244 -1.97034 0.911582 -0.16943 -0.374581 + 1.81627 0.261243 -1.81985 0.883376 -0.231303 -0.407609 + 1.89912 0.177033 -1.58179 0.882229 -0.23454 -0.408245 + 1.94308 0.111478 -1.44945 0.843749 -0.440494 -0.306679 + 1.97217 0.063662 -1.24623 0.807091 -0.590304 -0.012087 + 1.92387 0.033643 -1.29584 0.411073 -0.910514 -0.0445405 + 1.91655 0.057357 -1.15051 0.0733815 -0.934442 0.348472 + 1.94593 0.060274 -1.18596 0.422043 -0.884609 0.198362 + 1.92914 0.104259 -1.04994 -0.00254531 -0.856029 0.516921 + 1.87661 0.072687 -1.14786 -0.494284 -0.785778 0.3718 + 1.8892 0.11967 -1.04724 -0.482991 -0.733323 0.478495 + 1.8204 0.18254 -1.07113 -0.722261 -0.552088 0.416578 + 1.71489 0.294507 -1.11826 -0.79533 -0.443032 0.413731 + 1.83131 0.24669 -0.970242 -0.734923 -0.511781 0.444935 + 1.72749 0.361699 -1.03904 -0.810573 -0.397433 0.430138 + 1.38447 1.12618 -1.96176 -0.114715 0.985001 -0.128893 + 1.38749 1.12929 -1.92676 -0.278228 0.957846 -0.0715501 + 1.35051 1.13018 -1.8595 -0.258671 0.963354 -0.070976 + 1.35498 1.13465 -1.76183 -0.680226 0.730672 0.0583947 + 1.33 1.12081 -1.96346 -0.159644 0.984173 -0.0769253 + 1.33303 1.12393 -1.92846 -0.213748 0.975039 -0.0600933 + 1.32053 1.12089 -1.905 -0.453605 0.888262 0.0723449 + 1.33802 1.12715 -1.83604 -0.750727 0.65288 0.100786 + 1.28648 1.11256 -1.96577 -0.249703 0.968222 0.0139225 + 1.30604 1.11478 -1.92621 -0.346332 0.93557 0.0690164 + 1.26087 1.10138 -1.96022 -0.254065 0.942033 0.219144 + 1.28043 1.1036 -1.92066 -0.277523 0.956721 0.0875538 + 1.32299 1.11005 -1.85383 -0.422881 0.901229 0.0946451 + 1.33748 1.11624 -1.83255 -0.784888 0.605502 0.131596 + 1.3456 1.12534 -1.78452 -0.939363 0.316012 0.133168 + 1.18596 1.09 -1.9349 -0.0767119 0.994353 0.0733291 + 1.22858 1.09393 -1.9143 -0.137347 0.989618 0.0423287 + 1.25696 1.09743 -1.88518 -0.170066 0.985021 0.0284881 + 1.29951 1.1038 -1.8184 -0.213624 0.97669 0.0209931 + 1.34507 1.11445 -1.78104 -0.769977 0.632049 0.0874601 + 1.18366 1.08628 -1.81346 -0.0815065 0.996623 -0.00999 + 1.21204 1.08971 -1.78439 -0.116009 0.993231 -0.00582218 + 1.22826 1.0919 -1.7346 -0.115033 0.993305 -0.0106372 + 1.31574 1.10599 -1.7686 -0.215214 0.97637 0.019584 + 1.35105 1.11454 -1.69881 -0.579294 0.815113 -0.00308249 + 1.22871 1.09286 -1.69385 -0.305127 0.94344 0.129688 + 1.32172 1.1061 -1.68638 -0.24173 0.970171 -0.0182939 + 1.36043 1.12385 -1.67613 -0.643485 0.764167 0.0444444 + 1.38231 1.15154 -1.69029 -0.711543 0.702625 -0.00493221 + 1.20826 1.07264 -1.66304 -0.415146 0.859061 0.299444 + 1.31783 1.10964 -1.60512 -0.369736 0.927105 0.0614085 + 1.32217 1.10705 -1.64564 -0.22033 0.973962 -0.053412 + 1.36011 1.12005 -1.63475 -0.590569 0.805355 -0.0513001 + 1.24022 1.02623 -1.52285 -0.478502 0.862266 0.165929 + 1.29738 1.08942 -1.5743 -0.56295 0.792059 0.236071 + 1.33367 1.11267 -1.54156 -0.77242 0.604664 -0.194292 + 1.35577 1.12264 -1.59423 -0.659742 0.738045 -0.14153 + 1.38199 1.14774 -1.6489 -0.816197 0.573819 -0.0674902 + 1.18976 1.00904 -1.53268 -0.0624446 0.995592 0.0699848 + 1.27652 1.04939 -1.49016 -0.700979 0.70817 -0.0844012 + 1.1173 1.02629 -1.55774 0.294382 0.932429 -0.209558 + 1.36149 1.14219 -1.57689 -0.863237 0.418501 -0.282274 + -1.70337 1.98922 -1.07579 0.891611 0.0298264 0.451819 + -1.6801 1.96255 -1.12801 0.952713 0.0524449 0.299312 + -1.68994 2.0633 -1.1131 0.938931 0.0320593 0.34261 + -1.72145 2.09212 -1.04902 0.901242 0.00129184 0.433315 + -1.72998 1.82017 -1.02458 0.804155 0.0712945 0.590129 + -1.67403 1.97548 -1.1624 0.979369 0.0811721 0.185062 + -1.68707 2.10694 -1.1277 0.975783 0.0546045 0.211815 + -1.7066 2.25074 -1.08775 0.96142 0.0621275 0.267977 + -1.70947 2.207 -1.0732 0.933052 0.0165296 0.359362 + -1.66549 1.89627 -1.1742 0.963879 0.0805039 0.253882 + -1.68761 2.15846 -1.15573 0.98872 0.0635271 0.135634 + -1.70018 2.27683 -1.12034 0.973309 0.0739352 0.217262 + -1.73003 2.38788 -1.0561 0.974417 0.106487 0.19792 + -1.73501 2.3795 -1.01098 0.961666 0.0476262 0.270056 + -1.74699 2.26462 -0.986805 0.885762 -0.0339763 0.462894 + -1.74805 1.92307 -0.997825 0.783753 0.0445339 0.619474 + -1.7916 1.75351 -0.929734 0.771075 0.182649 0.609985 + -1.72361 2.41406 -1.08864 0.944074 0.0660568 0.323049 + -1.73941 2.52038 -1.0578 0.950436 0.0423528 0.308022 + -1.74771 2.50862 -1.02162 0.979238 0.0813547 0.185672 + -1.71219 2.43192 -1.11818 0.98004 0.110151 0.165491 + -1.728 2.53833 -1.08728 0.985819 0.104593 0.131228 + -1.74105 2.63265 -1.05765 0.984489 0.129136 0.118763 + -1.75246 2.61995 -1.02745 0.950897 0.0438008 0.306393 + -1.76075 2.60818 -0.991272 0.972825 0.0989987 0.20931 + -1.69968 2.35382 -1.15051 0.993282 0.10702 0.0440168 + -1.70418 2.37334 -1.1703 0.985378 0.154616 -0.0715803 + -1.7167 2.45151 -1.13791 0.853954 0.272302 -0.443412 + -1.7312 2.54263 -1.10692 0.847461 0.271339 -0.456272 + -1.68711 2.23536 -1.18593 0.992992 0.0891708 -0.0775557 + -1.69619 2.27211 -1.20117 0.564763 0.283507 -0.775027 + -1.69337 2.12496 -1.24211 0.64998 0.232885 -0.723388 + -1.7067 2.15597 -1.23462 -0.279038 0.259524 -0.924546 + -1.71276 2.24476 -1.2068 -0.407443 0.252831 -0.877535 + -1.72075 2.34607 -1.17588 -0.389299 0.227154 -0.892663 + -1.70418 2.37334 -1.1703 -0.226178 0.325351 -0.918145 + -1.69304 2.04842 -1.26673 0.635359 0.313566 -0.705688 + -1.70637 2.07934 -1.25929 -0.253434 0.304553 -0.91816 + -1.75185 2.08692 -1.21682 -0.667682 0.212853 -0.713369 + -1.75791 2.17579 -1.18895 -0.668498 0.198866 -0.716632 + -1.76262 2.26646 -1.1568 -0.705615 0.16858 -0.68825 + -1.70174 1.99203 -1.29306 -0.152096 0.337167 -0.929078 + -1.73589 1.91402 -1.28954 -0.633696 0.238057 -0.736042 + -1.74052 2.00132 -1.25576 -0.665436 0.235665 -0.708278 + -1.8141 1.95582 -1.19674 -0.771143 0.175993 -0.611854 + -1.83533 2.04016 -1.14442 -0.805799 0.167127 -0.568117 + -1.69013 1.89667 -1.32589 -0.182584 0.357967 -0.915709 + -1.73367 1.82544 -1.32353 -0.632928 0.274196 -0.724029 + -1.7962 1.78133 -1.27253 -0.774322 0.200739 -0.600107 + -1.80276 1.87013 -1.23573 -0.774089 0.18849 -0.604365 + -1.88335 1.79572 -1.12164 -0.880744 0.124553 -0.456921 + -1.73005 1.73866 -1.36081 -0.654207 0.279361 -0.70283 + -1.79399 1.69277 -1.30653 -0.783721 0.223039 -0.579685 + -1.87107 1.61838 -1.20367 -0.874201 0.181608 -0.450324 + -1.87763 1.70717 -1.16687 -0.875535 0.149056 -0.459588 + -1.73301 1.64749 -1.3925 -0.6948 0.283038 -0.661168 + -1.8073 1.59501 -1.329 -0.790297 0.234706 -0.565988 + -1.88805 1.42946 -1.26487 -0.863437 0.198477 -0.46377 + -1.87474 1.52722 -1.2424 -0.870276 0.218614 -0.441393 + -1.81026 1.50393 -1.36065 -0.785988 0.211472 -0.58095 + -1.88883 1.33387 -1.29629 -0.84692 0.174672 -0.502211 + -1.9662 1.25106 -1.18427 -0.897676 0.174362 -0.404693 + -1.96847 1.33642 -1.13131 -0.9132 0.196119 -0.357215 + -1.96479 1.42748 -1.09262 -0.917288 0.211393 -0.337485 + -1.81855 1.40599 -1.38161 -0.810558 0.216017 -0.544364 + -1.89712 1.23594 -1.31727 -0.861848 0.154234 -0.483145 + -1.96698 1.15547 -1.2157 -0.874299 0.0864331 -0.477629 + -2.02124 1.12376 -1.10058 -0.940833 0.106489 -0.321703 + -1.81903 1.31935 -1.42054 -0.833639 0.232664 -0.500913 + -1.89403 1.14413 -1.35127 -0.899525 0.167263 -0.403581 + -1.95399 1.05227 -1.23915 -0.886003 0.0653478 -0.459051 + -1.99703 0.929877 -1.17096 -0.922634 0.0143854 -0.385408 + -2.01002 1.03308 -1.14751 -0.91261 0.0244684 -0.408099 + -1.82824 1.22532 -1.44989 -0.858232 0.238178 -0.454653 + -1.90324 1.05011 -1.38061 -0.920302 0.164658 -0.35487 + -1.95089 0.960473 -1.27315 -0.928163 0.0991291 -0.35873 + -1.82453 1.14454 -1.50056 -0.860847 0.22471 -0.45656 + -1.88766 0.978483 -1.44294 -0.908312 0.134507 -0.396077 + -1.93121 0.894901 -1.34518 -0.937381 0.0888712 -0.336777 + -1.95983 0.77573 -1.29557 -0.944314 0.050614 -0.32513 + -1.97952 0.841297 -1.22353 -0.9431 0.0422474 -0.329815 + -1.80562 1.07001 -1.56648 -0.869394 0.219808 -0.442537 + -1.86874 0.903956 -1.50886 -0.912923 0.118603 -0.39052 + -1.91563 0.823277 -1.40752 -0.929996 0.0592713 -0.362761 + -1.69567 1.18769 -1.7125 -0.854825 0.305633 -0.419359 + -1.79295 1.00322 -1.6328 -0.886963 0.221574 -0.405219 + -1.84544 0.846043 -1.58295 -0.922975 0.113518 -0.367737 + -1.88919 0.755559 -1.47603 -0.931817 0.0420228 -0.360486 + -1.69378 1.11793 -1.77487 -0.869063 0.308485 -0.386737 + -1.7691 0.950287 -1.71131 -0.900283 0.221805 -0.374558 + -1.82158 0.793109 -1.66147 -0.935243 0.129371 -0.32952 + -1.86589 0.69756 -1.55017 -0.945273 0.0597576 -0.320763 + -1.91065 0.635231 -1.43262 -0.939002 0.0160366 -0.343539 + -1.6801 1.06513 -1.84902 -0.881764 0.323823 -0.342974 + -1.75542 0.897488 -1.78546 -0.914065 0.225605 -0.337028 + -1.79718 0.760102 -1.7523 -0.93734 0.141684 -0.318307 + -1.84155 0.660377 -1.63517 -0.952917 0.0749478 -0.293824 + -1.67836 1.00534 -1.91987 -0.899867 0.312027 -0.304759 + -1.7298 0.86485 -1.87113 -0.924424 0.217459 -0.313292 + -1.77156 0.727377 -1.83802 -0.938751 0.181689 -0.292807 + -1.81715 0.627372 -1.726 -0.960318 0.10939 -0.25656 + -1.86197 0.542246 -1.59496 -0.958595 0.0820601 -0.272693 + -1.6628 0.974096 -1.99975 -0.911455 0.30585 -0.275147 + -1.71425 0.833595 -1.95099 -0.936695 0.225613 -0.267771 + -1.74214 0.723213 -1.93861 -0.939716 0.203829 -0.274566 + -1.78979 0.627846 -1.84862 -0.954913 0.155289 -0.253033 + -1.63031 1.05278 -2.00703 -0.79804 0.48585 -0.356486 + -1.65644 0.92519 -2.07784 -0.917015 0.295446 -0.267945 + -1.68686 0.842111 -2.04174 -0.941348 0.222886 -0.253348 + -1.71475 0.731724 -2.02935 -0.943961 0.179191 -0.277177 + -1.76037 0.623595 -1.94926 -0.9418 0.144527 -0.303522 + -1.62395 1.00388 -2.08513 -0.802861 0.474627 -0.360754 + -1.60888 0.957783 -2.17709 -0.788335 0.493322 -0.367644 + -1.63942 0.904651 -2.16327 -0.898923 0.326404 -0.292229 + -1.66984 0.821567 -2.12716 -0.946163 0.21842 -0.238889 + -1.6034 1.00377 -2.11935 -0.690982 0.596727 -0.407997 + -1.55387 1.00544 -2.20244 -0.617303 0.669101 -0.413813 + -1.59304 0.919411 -2.25863 -0.775756 0.500543 -0.384263 + -1.62358 0.866281 -2.2448 -0.878785 0.366838 -0.305233 + -1.46671 1.04008 -2.25685 -0.389992 0.848392 -0.357962 + -1.52471 0.991998 -2.27056 -0.612036 0.677482 -0.407958 + -1.56387 0.906056 -2.3267 -0.721933 0.548584 -0.421745 + -1.60236 0.841891 -2.33416 -0.83178 0.403929 -0.380766 + -1.65077 0.820142 -2.21909 -0.926539 0.292141 -0.237023 + -1.37522 1.05239 -2.28095 -0.277282 0.920443 -0.2755 + -1.35936 1.03642 -2.36629 -0.38834 0.884189 -0.259619 + -1.43014 0.994897 -2.38438 -0.483021 0.803818 -0.347228 + -1.48814 0.946809 -2.39809 -0.644772 0.656604 -0.391332 + -1.53679 0.879425 -2.40737 -0.736605 0.535769 -0.412752 + -1.30013 1.0588 -2.37107 -0.413034 0.903358 -0.115531 + -1.27743 1.06971 -2.41596 -0.596696 0.798163 -0.0830052 + -1.32284 1.02151 -2.47507 -0.523589 0.830042 -0.192055 + -1.39362 0.979989 -2.49315 -0.564237 0.774675 -0.285509 + -1.45177 0.922027 -2.49836 -0.688375 0.625886 -0.366615 + -1.27948 1.08729 -2.31361 -0.477194 0.853377 -0.209844 + -1.26248 1.08908 -2.34071 -0.50428 0.835202 -0.219407 + -1.24392 1.09539 -2.36524 -0.612632 0.790124 -0.0196539 + -1.28157 1.06511 -2.39559 -0.386614 0.920236 0.0607796 + -1.31626 1.08384 -2.24124 -0.539697 0.832647 -0.1242 + -1.27975 1.09644 -2.26906 -0.373528 0.917056 -0.139588 + -1.25706 1.10469 -2.26695 -0.51825 0.850804 -0.0868846 + -1.2456 1.11119 -2.3016 -0.55435 0.813754 -0.174641 + -1.22861 1.11298 -2.32871 -0.526312 0.826119 -0.201303 + -1.28398 1.0983 -2.21747 -0.327419 0.944631 -0.0216478 + -1.22424 1.13141 -2.28583 -0.415646 0.902694 -0.111275 + -1.20242 1.13319 -2.31351 -0.397821 0.913572 -0.0844049 + -1.21181 1.12119 -2.34793 -0.623263 0.78189 0.0138067 + -1.24071 1.1016 -2.37999 -0.671903 0.734678 0.0937815 + -1.23658 1.10612 -2.40041 -0.662028 0.74935 0.0139587 + -1.18562 1.14149 -2.33268 -0.565484 0.814708 0.128369 + -1.2086 1.12749 -2.36263 -0.658181 0.741127 0.132398 + -1.19759 1.13864 -2.37475 -0.645347 0.760108 0.0759098 + -1.20962 1.1297 -2.39806 -0.654382 0.755825 0.0226384 + -1.22658 1.11436 -2.44609 -0.68521 0.725387 -0.0655798 + -1.17383 1.1383 -2.28255 -0.194727 0.971349 0.136242 + -1.1585 1.1462 -2.29345 -0.472865 0.828992 0.298616 + -1.16163 1.16328 -2.33763 -0.504202 0.826222 0.251274 + -1.15063 1.17453 -2.34971 -0.36474 0.873196 0.323253 + -1.19565 1.13651 -2.25487 -0.109197 0.982267 0.152406 + -1.13323 1.12325 -2.19868 -0.202951 0.936813 0.284941 + -1.08239 1.17791 -2.33317 0.0467369 0.985681 0.162016 + -1.12323 1.18488 -2.35804 -0.121405 0.97306 0.195995 + -1.15926 1.17136 -2.38481 -0.514572 0.856113 0.0478178 + -1.1713 1.16232 -2.40817 -0.65713 0.753116 0.0315561 + -1.19962 1.13795 -2.44375 -0.663176 0.748434 0.00659296 + -0.968399 1.15384 -2.29328 0.202304 0.95554 0.214516 + -1.04735 1.17306 -2.38357 0.140036 0.988195 0.0621329 + -1.08819 1.18004 -2.40845 0.127357 0.990857 -0.044536 + -1.13186 1.18171 -2.39315 -0.167956 0.985579 -0.0206364 + -1.15944 1.1735 -2.41832 -0.511552 0.856371 0.0703066 + -0.936631 1.15101 -2.30577 0.419649 0.881265 0.217411 + -0.955186 1.16676 -2.38306 0.358932 0.930285 0.0757467 + -1.01558 1.17032 -2.39601 0.0984417 0.990638 0.0945756 + -0.932578 1.14581 -2.36357 0.836361 0.547373 -0.029708 + -0.931757 1.14517 -2.41466 0.816887 0.576744 0.00785208 + -0.959034 1.1691 -2.41991 0.352482 0.933536 -0.0653192 + -1.01943 1.17257 -2.43292 0.1906 0.981061 0.03452 + -1.04987 1.18209 -2.46681 0.143806 0.979138 0.143559 + -0.920012 1.10707 -2.34487 0.991735 0.123413 0.0350695 + -0.919192 1.10644 -2.39597 0.958062 0.285307 0.0267738 + -0.925154 1.13651 -2.44707 0.83272 0.530471 0.158676 + -0.952431 1.16044 -2.45231 0.437461 0.897856 -0.0498172 + -0.98287 1.16997 -2.4862 0.271842 0.94942 0.157177 + -0.929802 1.09338 -2.29976 0.987913 -0.148206 0.0454186 + -0.923815 1.03796 -2.30816 0.980927 0.0807736 0.176798 + -0.914026 1.05165 -2.35327 0.97129 0.111056 0.210386 + -0.909485 1.07044 -2.39242 0.975036 0.202639 0.0907886 + -0.914214 1.0936 -2.44394 0.951115 0.251325 0.179487 + -0.913802 0.9689 -2.31155 0.976617 0.0560245 0.207558 + -0.898638 0.993068 -2.38241 0.972779 0.0847546 0.215679 + -0.894097 1.01186 -2.42156 0.947415 0.250139 0.199586 + -0.904507 1.05752 -2.44045 0.951095 0.272874 0.144766 + -0.915551 0.821097 -2.30175 0.967868 -0.0135223 0.251094 + -0.900387 0.845177 -2.37266 0.968886 0.00923174 0.247334 + -0.882188 1.00437 -2.45918 0.947986 0.167926 0.270412 + -0.892598 1.05003 -2.47807 0.902205 0.273671 0.333364 + -0.900778 1.09393 -2.4795 0.903358 0.217654 0.369556 + -0.914433 0.563609 -2.32156 0.899078 -0.127257 0.418884 + -0.876889 1.05242 -2.5152 0.889144 0.246558 0.385527 + -0.967405 0.395445 -2.30669 0.570663 -0.556743 0.60364 + -1.04052 0.334882 -2.34079 0.619429 -0.682168 0.388528 + -1.11079 0.244901 -2.36655 0.703855 -0.607116 0.368781 + -1.17036 0.148551 -2.40006 0.66486 -0.649604 0.368748 + -1.12487 0.148312 -2.48305 0.663812 -0.645286 0.3781 + -1.1865 0.076404 -2.5217 0.517336 -0.79615 0.313861 + -1.21585 0.15262 -2.31431 0.638596 -0.65645 0.401583 + -1.27615 0.086092 -2.34228 0.554654 -0.766439 0.323928 + -1.23066 0.082109 -2.42798 0.534141 -0.789679 0.301829 + -1.31981 0.091549 -2.24473 0.59906 -0.735708 0.316007 + -1.33237 0.04906 -2.35634 0.443284 -0.863344 0.241114 + -1.29002 0.043919 -2.45923 0.419095 -0.877292 0.23392 + -1.24587 0.0383 -2.5529 0.392885 -0.888393 0.237485 + -1.37603 0.054431 -2.25884 0.463887 -0.856336 0.226932 + -1.4169 0.033245 -2.26275 0.208912 -0.972733 0.100728 + -1.36682 0.030486 -2.36717 0.198967 -0.971232 0.130842 + -1.32447 0.025344 -2.47006 0.277403 -0.945532 0.170342 + -1.27791 0.019255 -2.57732 0.259595 -0.951121 0.167271 + -1.46302 0.031072 -2.16318 0.15235 -0.983932 0.0930932 + -1.42859 0.03363 -2.26721 -0.223407 -0.967988 -0.114405 + -1.37851 0.030783 -2.37168 -0.268104 -0.959969 -0.0811185 + -1.33261 0.023419 -2.47613 -0.196511 -0.980076 -0.0288872 + -1.28605 0.01733 -2.58338 -0.195131 -0.980299 -0.0306362 + -1.51392 0.035698 -2.0638 0.120761 -0.986976 0.106278 + -1.4868 0.035107 -2.16957 -0.297794 -0.946035 -0.127816 + -1.50602 0.052899 -2.20699 -0.437889 -0.86945 -0.228715 + -1.44781 0.051335 -2.30468 -0.456397 -0.858905 -0.232344 + -1.4009 0.050985 -2.40587 -0.516667 -0.83205 -0.201862 + -1.5377 0.03982 -2.07013 -0.282159 -0.955628 -0.0846247 + -1.55839 0.054865 -2.10739 -0.4377 -0.878496 -0.191476 + -1.52924 0.081407 -2.26176 -0.515163 -0.808473 -0.284568 + -1.48243 0.090151 -2.36191 -0.534614 -0.795466 -0.285344 + -1.43552 0.089799 -2.4631 -0.611384 -0.749514 -0.253845 + -1.59725 0.050773 -1.9709 -0.287284 -0.9526 -0.100105 + -1.61793 0.06573 -2.00821 -0.471077 -0.85864 -0.202049 + -1.5816 0.083373 -2.16217 -0.614495 -0.742501 -0.266625 + -1.53613 0.121343 -2.34574 -0.66917 -0.663885 -0.333867 + -1.67245 0.068455 -1.90453 -0.430918 -0.87444 -0.222854 + -1.62721 0.088345 -2.05878 -0.626175 -0.728733 -0.277223 + -1.62369 0.123851 -2.14248 -0.809031 -0.485348 -0.331521 + -1.57809 0.118879 -2.24587 -0.749995 -0.579813 -0.318315 + -1.68172 0.091068 -1.9551 -0.595255 -0.735456 -0.32369 + -1.66666 0.12824 -2.04308 -0.755778 -0.53652 -0.375428 + -1.59088 0.16895 -2.26439 -0.908197 -0.257935 -0.329617 + -1.55774 0.164852 -2.3651 -0.857896 -0.397119 -0.326055 + -1.51578 0.167229 -2.46501 -0.778409 -0.505108 -0.372754 + -1.73708 0.087843 -1.85771 -0.537741 -0.776549 -0.328338 + -1.72202 0.125014 -1.9457 -0.804256 -0.413509 -0.426828 + -1.63385 0.173256 -2.16505 -0.892198 -0.284677 -0.35063 + -1.57455 0.233216 -2.3713 -0.897305 -0.314701 -0.309528 + -1.78785 0.081215 -1.75983 -0.602447 -0.714889 -0.354953 + -1.76961 0.12724 -1.84895 -0.848033 -0.313932 -0.42695 + -1.6716 0.181256 -2.06591 -0.907151 -0.163127 -0.3879 + -1.64677 0.245073 -2.17824 -0.906566 -0.262149 -0.330782 + -1.60902 0.237071 -2.27738 -0.899618 -0.300264 -0.317062 + -1.83783 0.078495 -1.66292 -0.731957 -0.578616 -0.359781 + -1.81959 0.124515 -1.75203 -0.857016 -0.289019 -0.426605 + -1.71919 0.183482 -1.96917 -0.880981 -0.203089 -0.427348 + -1.88014 0.072038 -1.56194 -0.767076 -0.55394 -0.323643 + -1.8657 0.123287 -1.6541 -0.906288 -0.185652 -0.379704 + -1.76705 0.188831 -1.87443 -0.883857 -0.186407 -0.42901 + -1.73059 0.259704 -1.99498 -0.864404 -0.295783 -0.406593 + -1.68272 0.254356 -2.08972 -0.885282 -0.269026 -0.379342 + -1.91872 0.068677 -1.45832 -0.824943 -0.501848 -0.260033 + -1.90428 0.120012 -1.55043 -0.904734 -0.239795 -0.352072 + -1.81316 0.187605 -1.7765 -0.883902 -0.18487 -0.429582 + -1.94676 0.071188 -1.35406 -0.78137 -0.592719 -0.195308 + -1.94308 0.111483 -1.44946 -0.918032 -0.263003 -0.296726 + -1.86032 0.185567 -1.68277 -0.889791 -0.216255 -0.401877 + -1.8163 0.261243 -1.81985 -0.884339 -0.231715 -0.40528 + -1.76915 0.263281 -1.91358 -0.857215 -0.303184 -0.416248 + -1.97218 0.063662 -1.24623 -0.657513 -0.749939 -0.0725779 + -1.9685 0.104044 -1.34157 -0.931463 -0.290266 -0.219367 + -1.89912 0.177033 -1.58179 -0.88379 -0.23562 -0.404226 + -1.98469 0.096754 -1.14175 -0.856678 -0.494602 0.146529 + -1.99175 0.109062 -1.23506 -0.921411 -0.378697 -0.0871208 + -1.94276 0.159406 -1.48706 -0.867182 -0.354308 -0.349945 + -1.89862 0.235611 -1.62845 -0.922587 -0.0831037 -0.376731 + -1.85498 0.253237 -1.72318 -0.875598 -0.250563 -0.412973 + -1.9815 0.146589 -1.03387 -0.756034 -0.578494 0.306198 + -1.98856 0.158812 -1.12723 -0.994374 -0.0986883 0.0384729 + -1.96601 0.164424 -1.38056 -0.968948 -0.093475 -0.228914 + -1.98072 0.220307 -0.938348 -0.877316 -0.356528 0.321254 + -1.99281 0.211628 -1.03391 -0.984552 -0.147455 0.0944188 + -1.99355 0.170473 -1.28383 -0.875953 -0.46704 -0.120749 + -1.96 0.235677 -1.42637 -0.96396 0.0753148 -0.255163 + -1.93247 0.229627 -1.52309 -0.954284 0.00366101 -0.29888 + -1.97373 0.305144 -0.85009 -0.949834 -0.192936 0.246152 + -1.98581 0.296467 -0.94566 -0.99183 -0.0657703 0.109308 + -1.9978 0.223203 -1.19056 -0.999247 0.00558986 -0.0383945 + -1.96385 0.434813 -0.723484 -0.791408 -0.351018 0.500459 + -1.97356 0.409 -0.769972 -0.951961 -0.184389 0.244482 + -1.98427 0.380217 -0.861719 -0.98546 -0.111371 0.128314 + -1.99895 0.286242 -1.09275 -0.999664 -0.024943 0.00706155 + -1.96171 0.539431 -0.653485 -0.792064 -0.315157 0.522792 + -1.97703 0.517646 -0.708553 -0.952197 -0.172335 0.252232 + -1.98773 0.488861 -0.800298 -0.986037 -0.11302 0.122301 + -1.9974 0.369992 -1.00881 -0.999786 -0.00325218 0.0204195 + -1.98028 0.326333 -1.23239 -0.978903 0.132828 -0.155258 + -1.96969 0.65733 -0.607494 -0.848082 -0.247574 0.468469 + -1.98501 0.635545 -0.662562 -0.948366 -0.174676 0.264745 + -1.99507 0.593357 -0.747888 -0.975685 -0.156634 0.153314 + -1.99419 0.452858 -0.919338 -0.999438 -0.0288507 0.0170785 + -1.97634 0.772609 -0.556763 -0.850695 -0.285233 0.441543 + -2.00529 0.764217 -0.656829 -0.94617 -0.206749 0.249032 + -2.01535 0.722029 -0.742154 -0.972116 -0.178315 0.152296 + -2.00153 0.557266 -0.866979 -0.993446 -0.109064 0.034209 + -1.9876 0.477829 -1.05719 -0.99718 -0.0037107 -0.0749563 + -1.95598 0.878317 -0.455052 -0.559245 -0.496608 0.663796 + -1.99349 0.882653 -0.514565 -0.861348 -0.334405 0.38243 + -2.02245 0.874262 -0.614633 -0.929341 -0.277309 0.243772 + -2.03629 0.845109 -0.720735 -0.947825 -0.255022 0.19129 + -2.01226 0.657475 -0.819343 -0.988316 -0.146658 0.0415088 + -1.93571 0.964666 -0.374015 -0.10366 -0.579508 0.808347 + -1.97703 0.986076 -0.393898 -0.676771 -0.503894 0.536723 + -2.01455 0.990413 -0.453411 -0.843885 -0.395258 0.362808 + -2.04627 0.984262 -0.563157 -0.915534 -0.322419 0.240508 + -2.06012 0.955113 -0.669267 -0.965758 -0.232337 0.115463 + -1.95968 1.0614 -0.304562 -0.286001 -0.63837 0.714623 + -2.001 1.0829 -0.324395 -0.703933 -0.524519 0.478913 + -2.0318 1.08707 -0.384218 -0.848563 -0.412 0.331958 + -2.06352 1.08092 -0.493969 -0.928484 -0.306902 0.209113 + -1.91534 1.03977 -0.321901 0.298187 -0.584626 0.754518 + -1.98842 1.15476 -0.231268 -0.359145 -0.62848 0.689947 + -2.0211 1.18058 -0.248185 -0.738508 -0.518872 0.430555 + -2.05189 1.18475 -0.308008 -0.827528 -0.457102 0.325968 + -1.85646 1.04292 -0.375555 0.795385 -0.19138 0.575096 + -1.94408 1.13313 -0.248607 0.194199 -0.601948 0.774562 + -2.01546 1.25513 -0.152315 -0.480432 -0.627259 0.612969 + -2.04814 1.28086 -0.169283 -0.702556 -0.559663 0.439536 + -1.89832 1.10095 -0.296262 0.585955 -0.505802 0.633104 + -1.92234 1.18614 -0.219013 0.693387 -0.377439 0.613804 + -1.96811 1.21832 -0.171359 0.0206645 -0.679714 0.733186 + -2.02483 1.34524 -0.069792 -0.399811 -0.633933 0.662027 + -1.86015 1.14351 -0.374978 0.923293 0.0230016 0.383408 + -1.88441 1.2047 -0.300965 0.937177 -0.0676176 0.34224 + -1.93698 1.27049 -0.155719 0.801202 -0.320647 0.505233 + -1.97748 1.30843 -0.088837 0.159109 -0.653027 0.740433 + -1.82658 1.23187 -0.486835 0.959575 0.0779347 0.270447 + -1.85085 1.29307 -0.412823 0.968752 0.0391377 0.244924 + -1.86885 1.35294 -0.337923 0.9799 0.00934479 0.199271 + -1.89905 1.28905 -0.237671 0.943557 -0.129305 0.304926 + -1.93585 1.35848 -0.080727 0.734889 -0.467839 0.490983 + -1.81146 1.33455 -0.567678 0.959934 0.109406 0.257987 + -1.84072 1.37809 -0.49529 0.959493 0.148617 0.239345 + -1.85872 1.43788 -0.420448 0.968057 0.219129 0.121856 + -1.88469 1.48434 -0.340922 0.960459 0.271951 0.0596735 + -1.87618 1.42189 -0.268346 0.99453 0.0176527 0.102947 + -1.84299 1.48933 -0.552965 0.905606 0.28427 0.314752 + -1.88307 1.51248 -0.474651 0.920278 0.342515 0.189135 + -1.90903 1.55894 -0.395126 0.913094 0.387587 0.126632 + -1.86867 1.56779 -0.586052 0.844163 0.453842 0.285335 + -1.91179 1.60975 -0.524332 0.884484 0.421175 0.200747 + -1.94178 1.60443 -0.321116 0.915049 0.402104 -0.0315978 + -1.89459 1.53524 -0.258873 0.950323 0.30069 -0.0804451 + -1.88608 1.47278 -0.186297 0.999663 -0.025758 -0.00321867 + -1.87313 1.63301 -0.700431 0.824208 0.475242 0.307937 + -1.92189 1.68619 -0.662742 0.874562 0.387361 0.291708 + -1.94454 1.65515 -0.450362 0.891517 0.426598 0.152355 + -1.97724 1.697 -0.383658 0.924263 0.375769 0.0673527 + -1.95085 1.65504 -0.247183 0.89539 0.435085 -0.0947499 + -1.83282 1.6809 -0.841971 0.806269 0.33302 0.488906 + -1.88157 1.734 -0.804341 0.79783 0.347586 0.492596 + -1.95459 1.72805 -0.596037 0.880661 0.420793 0.217645 + -1.8156 1.80599 -0.914837 0.738931 0.133514 0.66042 + -1.85829 1.83954 -0.872349 0.712938 0.172409 0.679702 + -1.92426 1.76755 -0.761844 0.804968 0.445729 0.391602 + -1.98855 1.76204 -0.532305 0.835529 0.513459 0.195577 + -1.77205 1.97564 -0.98287 0.710944 -0.0156977 0.703073 + -1.78843 2.05003 -0.946326 0.823193 -0.0835351 0.561582 + -1.82242 1.95205 -0.922019 0.597077 0.00829871 0.802141 + -1.93524 1.83504 -0.803141 0.833598 0.211904 0.510108 + -1.95822 1.80145 -0.698161 0.913507 0.240093 0.32842 + -1.76337 2.3391 -0.950211 0.922975 -0.0429746 0.382453 + -1.78249 2.30397 -0.901962 0.855773 -0.0775873 0.511501 + -1.81647 2.2059 -0.877697 0.814325 -0.118375 0.56821 + -1.89937 1.94763 -0.852761 0.777452 -0.0752609 0.624423 + -1.93269 1.9349 -0.794719 0.938156 -0.168714 0.302323 + -1.75957 2.46879 -0.943036 0.945399 0.0245559 0.324987 + -1.77868 2.43366 -0.894787 0.862175 -0.0345068 0.505434 + -1.83865 2.42426 -0.82771 0.70206 -0.0359695 0.711209 + -1.84979 2.19327 -0.819613 0.869369 -0.115066 0.480581 + -1.95567 1.90131 -0.689739 0.912627 -0.0905058 0.398649 + -1.75268 2.50016 -0.976565 0.9771 0.0824444 0.196159 + -1.77315 2.56887 -0.917576 0.924301 0.071436 0.374919 + -1.78795 2.61693 -0.89583 0.881218 0.0900881 0.464047 + -1.79348 2.48173 -0.873041 0.788265 0.0169569 0.615102 + -1.76627 2.60023 -0.951096 0.966019 0.119021 0.229435 + -1.78613 2.67697 -0.915407 0.927593 0.161559 0.336852 + -1.81909 2.66232 -0.855642 0.752669 0.107855 0.649505 + -1.86426 2.60485 -0.810302 0.721259 0.0397575 0.691524 + -1.78062 2.68492 -0.955583 0.956455 0.129544 0.261555 + -1.80134 2.74089 -0.909921 0.885734 0.219629 0.408947 + -1.81727 2.72244 -0.875169 0.830836 0.180625 0.52639 + -1.84106 2.75625 -0.851922 0.677954 0.368343 0.636162 + -1.76931 2.69654 -0.989714 0.936114 0.0566238 0.347108 + -1.79004 2.7526 -0.944002 0.908019 0.158139 0.387935 + -1.82513 2.77478 -0.886624 0.729699 0.436906 0.525979 + -1.7579 2.70925 -1.01992 0.963718 0.258817 0.0652807 + -1.77862 2.76509 -0.974238 0.90547 0.407531 0.118499 + -1.8052 2.79816 -0.938525 0.646307 0.729636 0.223426 + -1.81661 2.78567 -0.908291 0.743381 0.454403 0.490819 + -1.86775 2.79455 -0.86387 0.537195 0.581952 0.610535 + -1.74425 2.63695 -1.0773 0.626532 0.427098 -0.651955 + -1.76305 2.71127 -1.03682 0.463925 0.596348 -0.655089 + -1.78378 2.76702 -0.991191 0.395354 0.742639 -0.540539 + -1.80795 2.79902 -0.949217 0.187592 0.917222 -0.351445 + -1.74268 2.5277 -1.12287 -0.0488763 0.305199 -0.951034 + -1.76503 2.61621 -1.08778 -0.368311 0.31913 -0.873214 + -1.78383 2.69045 -1.04735 -0.444662 0.382017 -0.810147 + -1.80458 2.75174 -1.00111 -0.460354 0.477401 -0.74844 + -1.82875 2.78366 -0.959199 -0.561231 0.5448 -0.623067 + -1.72818 2.43651 -1.15392 0.0153373 0.273364 -0.961788 + -1.7724 2.45598 -1.10924 -0.734968 0.123263 -0.666804 + -1.79475 2.54449 -1.07414 -0.772937 0.107699 -0.625276 + -1.81161 2.64031 -1.02712 -0.822024 0.133012 -0.5537 + -1.83236 2.70152 -0.98093 -0.843192 0.116224 -0.524898 + -1.77005 2.3569 -1.13484 -0.715717 0.134452 -0.685326 + -1.83396 2.32389 -1.05426 -0.836003 0.121886 -0.535017 + -1.82428 2.46176 -1.03646 -0.845391 0.0969951 -0.525267 + -1.84113 2.55759 -0.989435 -0.879065 0.0968489 -0.46676 + -1.8688 2.64369 -0.913372 -0.89814 0.0772281 -0.432874 + -1.8316 2.22491 -1.07981 -0.843554 0.163224 -0.511638 + -1.89966 2.06103 -0.988568 -0.933401 0.14116 -0.329902 + -1.87904 2.2611 -0.990313 -0.876503 0.089622 -0.472981 + -1.86937 2.39898 -0.972513 -0.873943 0.123206 -0.470153 + -1.87537 2.47364 -0.941231 -0.880607 0.111525 -0.460536 + -1.84003 2.13082 -1.11226 -0.839926 0.195803 -0.506148 + -1.90809 1.96695 -1.02102 -0.932285 0.169191 -0.319717 + -1.9045 2.14994 -0.949971 -0.92276 0.0636023 -0.38009 + -1.90458 1.88014 -1.06926 -0.900005 0.118722 -0.419399 + -1.97308 1.77805 -0.900439 -0.955821 0.156521 -0.248812 + -1.96957 1.69115 -0.948727 -0.937747 0.132989 -0.32085 + -2.02579 1.55705 -0.839262 -0.947964 0.15376 -0.278787 + -1.96564 1.60198 -0.996678 -0.925672 0.134525 -0.353601 + -2.02186 1.46779 -0.887253 -0.943343 0.137763 -0.301869 + -2.06228 1.48826 -0.746906 -0.959362 0.133604 -0.248546 + -2.09122 1.45139 -0.640447 -0.974431 0.0962247 -0.20304 + -1.95992 1.51335 -1.04196 -0.923642 0.178625 -0.339085 + -2.02129 1.37888 -0.937849 -0.94504 0.182911 -0.271004 + -2.06073 1.38864 -0.790966 -0.960796 0.118039 -0.250875 + -2.08967 1.35177 -0.684508 -0.980061 0.065485 -0.187594 + -2.11859 1.4276 -0.499441 -0.983277 0.0389271 -0.177909 + -2.02617 1.29301 -0.988521 -0.947385 0.177116 -0.266628 + -2.06017 1.29964 -0.841612 -0.964425 0.136427 -0.226433 + -2.08309 1.26324 -0.753163 -0.979789 0.0907949 -0.17824 + -2.10357 1.35566 -0.589833 -0.988026 0.0150411 -0.153556 + -2.02351 1.20911 -1.04761 -0.944788 0.160515 -0.285676 + -2.05816 1.21379 -0.905509 -0.96694 0.130825 -0.21889 + -2.08108 1.17739 -0.817061 -0.987623 0.0473868 -0.149515 + -2.09699 1.26712 -0.658488 -0.993989 0.00114169 -0.109477 + -2.12631 1.36968 -0.449128 -0.98963 -0.0982745 -0.104761 + -2.05549 1.1299 -0.964603 -0.972881 0.0812402 -0.216569 + -2.07198 1.08522 -0.885216 -0.990384 -0.0118836 -0.137833 + -2.08871 1.18155 -0.736669 -0.996322 -0.0308005 -0.0799573 + -2.09774 1.19902 -0.611331 -0.993967 -0.107858 -0.0199089 + -2.10602 1.28468 -0.5331 -0.992525 -0.103797 -0.0641862 + -2.04402 1.04975 -1.03439 -0.970439 0.030296 -0.239437 + -2.06051 1.00508 -0.955007 -0.987998 -0.0560364 -0.143945 + -2.07962 1.08938 -0.804825 -0.995261 -0.0763985 -0.0601538 + -2.0328 0.959071 -1.08132 -0.962637 -0.0424637 -0.267444 + -2.04378 0.902897 -0.995826 -0.983016 -0.121232 -0.13778 + -2.0661 0.987661 -0.861243 -0.990934 -0.125045 -0.0491213 + -2.07118 1.00899 -0.747187 -0.989622 -0.143696 0.000826782 + -2.08471 1.11063 -0.690828 -0.990304 -0.138888 0.0027783 + -2.01409 0.862541 -1.12133 -0.963874 -0.0552808 -0.260559 + -2.02508 0.806365 -1.03583 -0.983527 -0.124181 -0.131357 + -2.04937 0.885476 -0.902053 -0.98657 -0.153917 -0.0546657 + -1.99658 0.774051 -1.17386 -0.971801 -0.0279902 -0.234136 + -2.00857 0.707927 -1.07553 -0.986996 -0.112858 -0.114464 + -2.02757 0.760312 -0.902864 -0.986431 -0.158308 -0.0435122 + -2.03319 0.780641 -0.797873 -0.982325 -0.181062 0.0474664 + -2.05499 0.905722 -0.797122 -0.986957 -0.16097 -0.00194736 + -1.98022 0.694353 -1.24222 -0.968386 -0.0316358 -0.247441 + -1.99221 0.628315 -1.14384 -0.988532 -0.0728051 -0.132303 + -2.01107 0.661873 -0.942562 -0.991753 -0.120767 -0.042911 + -1.9371 0.70295 -1.36411 -0.933596 0.0203236 -0.357751 + -1.95748 0.621574 -1.31076 -0.953344 -0.0400655 -0.299216 + -1.97947 0.54448 -1.21083 -0.977391 -0.104149 -0.184012 + -2.00034 0.561665 -0.990198 -0.993735 -0.101515 -0.0467479 + -1.92874 0.541985 -1.37811 -0.953065 -0.0468341 -0.299122 + -1.95073 0.464891 -1.27818 -0.97211 0.0194808 -0.233714 + -1.8863 0.579432 -1.50997 -0.952219 0.0337673 -0.303544 + -1.90438 0.486181 -1.45545 -0.961391 0.064499 -0.267521 + -1.94019 0.396175 -1.36396 -0.963416 0.121826 -0.23872 + -1.99081 0.395049 -1.14661 -0.989561 0.0761923 -0.122326 + -1.88613 0.445995 -1.54445 -0.960159 0.115062 -0.254667 + -1.92194 0.355984 -1.45294 -0.951354 0.181882 -0.248686 + -1.83749 0.521787 -1.69473 -0.964718 0.118015 -0.235353 + -1.86166 0.425444 -1.64426 -0.958609 0.117814 -0.259208 + -1.90282 0.328364 -1.54911 -0.94618 0.190271 -0.261801 + -1.97912 0.263295 -1.33021 -0.977919 0.100252 -0.183366 + -1.81013 0.522261 -1.81735 -0.964761 0.0864903 -0.248507 + -1.83638 0.413125 -1.73832 -0.959356 0.0927667 -0.266516 + -1.87754 0.315958 -1.64322 -0.945104 0.164066 -0.282596 + -1.78193 0.519976 -1.91999 -0.950571 0.057625 -0.305113 + -1.80817 0.410835 -1.84095 -0.960484 0.0840346 -0.265345 + -1.8437 0.321936 -1.74858 -0.948369 0.178105 -0.26244 + -1.75033 0.516583 -2.00871 -0.945673 0.0907224 -0.312206 + -1.77306 0.429219 -1.96599 -0.95427 0.0938365 -0.283836 + -1.80858 0.340319 -1.87362 -0.945998 -0.0213889 -0.323466 + -1.72877 0.620289 -2.03794 -0.943108 0.126186 -0.30761 + -1.70205 0.619774 -2.12764 -0.950979 0.10299 -0.291603 + -1.71697 0.522889 -2.10943 -0.94546 0.0895083 -0.313198 + -1.7397 0.435529 -2.06672 -0.942173 0.0140033 -0.334835 + -1.68803 0.731209 -2.11905 -0.956964 0.154947 -0.245381 + -1.66896 0.729781 -2.21098 -0.961123 0.122954 -0.247236 + -1.67234 0.614464 -2.21745 -0.954832 0.0675853 -0.289359 + -1.68726 0.517582 -2.19924 -0.942297 0.055448 -0.330155 + -1.62954 0.79567 -2.3085 -0.916133 0.262274 -0.303172 + -1.64705 0.719534 -2.29283 -0.958629 0.105311 -0.264463 + -1.65044 0.604129 -2.29935 -0.958592 0.0284245 -0.283361 + -1.66056 0.507282 -2.271 -0.944086 0.0219805 -0.328965 + -1.70504 0.443523 -2.15917 -0.937578 -0.00732861 -0.347698 + -1.57527 0.815265 -2.41484 -0.786469 0.463635 -0.408055 + -1.60796 0.770587 -2.39906 -0.883805 0.304206 -0.355453 + -1.62548 0.694363 -2.38344 -0.944528 0.0736135 -0.320073 + -1.63512 0.575657 -2.34903 -0.945393 -0.00628874 -0.325871 + -1.64524 0.478729 -2.32075 -0.939555 -0.0369874 -0.340395 + -1.54246 0.793947 -2.49812 -0.778423 0.444319 -0.443439 + -1.57515 0.749187 -2.48239 -0.854523 0.262989 -0.447915 + -1.59698 0.67167 -2.45753 -0.908288 0.0341742 -0.416948 + -1.60662 0.552963 -2.42312 -0.920288 -0.0260881 -0.390371 + -1.50042 0.854638 -2.50764 -0.755032 0.504357 -0.418987 + -1.50328 0.780374 -2.57541 -0.772967 0.380888 -0.507392 + -1.53243 0.730259 -2.56481 -0.822976 0.207752 -0.528725 + -1.55426 0.652742 -2.53995 -0.869186 0.0190255 -0.494118 + -1.40873 0.913059 -2.60623 -0.707436 0.582214 -0.400701 + -1.46124 0.841065 -2.58493 -0.773094 0.446835 -0.450182 + -1.43613 0.819446 -2.65289 -0.798962 0.360914 -0.481042 + -1.45803 0.764403 -2.64455 -0.795105 0.293892 -0.530504 + -1.48719 0.714293 -2.63396 -0.751387 0.0945052 -0.653059 + -1.35057 0.970934 -2.60107 -0.634369 0.702594 -0.322394 + -1.38363 0.891352 -2.67423 -0.716114 0.510931 -0.475532 + -1.39239 0.812546 -2.72934 -0.74291 0.323901 -0.585809 + -1.41428 0.75751 -2.72101 -0.7928 0.0651492 -0.60599 + -1.28516 1.0287 -2.58513 -0.594154 0.769993 -0.232576 + -1.23603 1.03277 -2.68117 -0.654781 0.69439 -0.298471 + -1.30145 0.975091 -2.69707 -0.664642 0.642797 -0.380873 + -1.33585 0.903728 -2.71987 -0.681349 0.452028 -0.575703 + -1.27319 1.0645 -2.46373 -0.662391 0.733103 -0.154267 + -1.23551 1.07169 -2.57379 -0.714719 0.672558 -0.191943 + -1.20058 1.08523 -2.66683 -0.793243 0.509164 -0.333941 + -1.18471 1.04321 -2.75686 -0.666151 0.649363 -0.366838 + -1.22233 1.10923 -2.49381 -0.729059 0.666569 -0.155428 + -1.21201 1.11193 -2.53548 -0.773572 0.619555 -0.133186 + -1.19013 1.12891 -2.58389 -0.826646 0.554456 -0.0960993 + -1.21363 1.08867 -2.62219 -0.867134 0.446604 -0.220507 + -1.19159 1.14556 -2.48434 -0.731957 0.678813 -0.0587482 + -1.18126 1.14826 -2.52601 -0.815828 0.569804 -0.098732 + -1.17209 1.15831 -2.57441 -0.84457 0.531328 -0.0662785 + -1.18088 1.1429 -2.63392 -0.839225 0.5182 -0.164836 + -1.16783 1.13946 -2.67856 -0.872127 0.381376 -0.306507 + -1.18777 1.14912 -2.45389 -0.690687 0.722938 0.0176511 + -1.16542 1.17131 -2.46853 -0.560574 0.828096 0.00376736 + -1.17085 1.16932 -2.51908 -0.694251 0.719653 -0.0107273 + -1.16168 1.17937 -2.56748 -0.763728 0.645469 -0.00946441 + -1.1616 1.17478 -2.43814 -0.537117 0.841758 0.0543007 + -1.1403 1.18208 -2.45458 -0.148686 0.988614 -0.0231118 + -1.14573 1.18009 -2.50514 -0.300884 0.948428 0.0997637 + -1.14055 1.18732 -2.53386 -0.431706 0.876175 0.214351 + -1.14094 1.20304 -2.60229 -0.572271 0.817286 0.0674576 + -1.13768 1.18233 -2.43142 -0.129509 0.990662 0.0426188 + -1.09447 1.17921 -2.45001 -0.0558176 0.993542 0.0987885 + -1.08928 1.18644 -2.47874 -0.0957059 0.969905 0.223885 + -1.11981 1.21108 -2.56861 -0.168447 0.98564 0.0118046 + -1.13552 1.18105 -2.41161 -0.145418 0.988941 0.0291549 + -1.09184 1.17938 -2.4269 0.109258 0.99367 -0.0261175 + -1.0804 1.20673 -2.55668 0.0681394 0.981004 0.181625 + -0.967913 1.176 -2.52145 0.158523 0.9292 0.333852 + -1.06545 1.21285 -2.59188 0.0449928 0.973577 0.223881 + -1.09838 1.22453 -2.63391 -0.134256 0.981751 0.134686 + -1.13079 1.21216 -2.64528 -0.583304 0.812253 0.00105262 + -1.16283 1.17229 -2.62444 -0.833004 0.548775 -0.0703607 + -0.911718 1.13693 -2.48258 0.675808 0.505001 0.536896 + -0.926335 1.16779 -2.50524 -0.011886 0.735221 0.677723 + -0.990116 1.20637 -2.60766 0.0790973 0.956466 0.28092 + -1.02305 1.21805 -2.64968 0.0225568 0.986295 0.163444 + -0.885069 1.09631 -2.51663 0.889157 0.0688556 0.452392 + -0.884528 1.14908 -2.50443 0.676666 0.2882 0.677542 + -0.899145 1.17995 -2.5271 0.253383 0.832005 0.493522 + -0.948538 1.19817 -2.59145 0.0255572 0.950254 0.310427 + -0.94738 1.22467 -2.66936 0.0601982 0.925018 0.375122 + -0.856004 1.06934 -2.57092 0.861692 0.116377 0.493905 + -0.867959 1.10431 -2.55008 0.87148 -0.0567673 0.487134 + -0.867418 1.15699 -2.53792 0.856337 0.330428 0.396868 + -0.88845 1.18671 -2.54941 0.422347 0.85005 0.314702 + -0.937843 1.20493 -2.61377 0.078891 0.955981 0.282623 + -0.84669 1.11707 -2.58139 0.896595 0.100933 0.431195 + -0.862438 1.16515 -2.58307 0.834094 0.470844 0.287389 + -0.88347 1.19496 -2.5945 0.413193 0.867419 0.277229 + -0.834108 1.13159 -2.62274 0.899935 0.258385 0.351218 + -0.849857 1.17975 -2.62436 0.765879 0.512534 0.38825 + -0.876853 1.2022 -2.62483 0.345542 0.878935 0.328747 + -0.931226 1.21225 -2.64405 0.157951 0.938008 0.308532 + -0.941463 1.25178 -2.72611 0.0463528 0.911807 0.407994 + -0.980939 1.25611 -2.73802 -0.124525 0.955234 0.268369 + -0.986855 1.22901 -2.68127 -0.0860182 0.929966 0.357442 + -0.855869 1.243 -2.7345 0.149777 0.897169 0.415517 + -0.91914 1.26648 -2.76477 0.0567207 0.916672 0.395594 + -1.0015 1.25512 -2.76769 -0.274863 0.961474 -0.00433306 + -1.03613 1.2458 -2.74336 -0.199231 0.950363 0.23899 + -0.880748 1.29581 -2.84857 -0.00167506 0.960918 0.276828 + -0.941826 1.27882 -2.78935 -0.105791 0.914751 0.38992 + -0.882594 1.29958 -2.8801 -0.162982 0.983306 0.0809091 + -0.94672 1.29238 -2.83283 -0.160976 0.960792 0.225757 + -0.988215 1.27832 -2.83389 -0.466197 0.873957 0.137331 + -0.983321 1.26477 -2.79041 -0.400141 0.892953 0.20621 + -0.850377 1.31449 -2.91732 -0.282936 0.919806 0.271854 + -0.877135 1.30123 -2.90596 -0.300999 0.948933 0.0944764 + -0.949167 1.29401 -2.91546 -0.275316 0.96128 -0.0118887 + -0.948567 1.29623 -2.86431 -0.221607 0.974469 0.0360735 + -0.899956 1.31617 -2.97904 -0.428834 0.890801 0.150248 + -0.926715 1.30291 -2.96768 -0.404979 0.914011 0.0239883 + -0.943709 1.29575 -2.94127 -0.333011 0.942891 -0.0077541 + -0.981064 1.27856 -2.9257 -0.675549 0.704626 -0.217107 + -0.980463 1.28078 -2.87453 -0.512733 0.857576 -0.0408408 + -0.909608 1.31262 -3.01408 -0.524969 0.825447 -0.207473 + -0.949326 1.28635 -2.99379 -0.704705 0.666207 -0.244047 + -0.96632 1.27919 -2.96738 -0.744648 0.609156 -0.272815 + -0.986988 1.24749 -2.93948 -0.835253 0.356501 -0.41864 + -1.01219 1.25533 -2.89466 -0.787824 0.568261 -0.237514 + -0.889411 1.29932 -3.05886 -0.526052 0.749129 -0.402584 + -0.913215 1.27735 -3.065 -0.633356 0.477886 -0.608675 + -0.933412 1.29065 -3.02023 -0.669073 0.636878 -0.383051 + -0.956513 1.25574 -3.01736 -0.84996 0.354623 -0.389629 + -0.972244 1.24811 -2.98116 -0.89113 0.307196 -0.333943 + -0.836077 1.34062 -3.04639 -0.736355 0.622526 -0.265035 + -0.879112 1.29481 -3.08344 -0.670374 0.630444 -0.39133 + -0.906593 1.25503 -3.07875 -0.689439 0.168004 -0.704592 + -0.940599 1.25994 -3.04386 -0.77263 0.321629 -0.547355 + -0.9681 1.2197 -3.01414 -0.860102 0.0940931 -0.50137 + -0.828288 1.35158 -3.05058 -0.624178 0.777037 -0.0813382 + -0.867142 1.29652 -3.11001 -0.834016 0.520162 -0.18398 + -0.880425 1.25738 -3.12241 -0.895863 0.120374 -0.427714 + -0.892395 1.25566 -3.09584 -0.837736 0.200515 -0.507929 + -0.848405 1.33885 -3.10093 -0.805847 0.585174 0.0904521 + -0.859353 1.30749 -3.11421 -0.88592 0.463174 -0.0248135 + -0.861481 1.29584 -3.15123 -0.909019 0.257874 -0.327393 + -0.860701 1.25353 -3.15314 -0.847179 -0.0782314 -0.525516 + -0.891311 1.19161 -3.0945 -0.764881 0.317403 -0.560547 + -0.822393 1.35025 -3.13007 -0.335236 0.940074 -0.062271 + -0.842034 1.33802 -3.14948 -0.73097 0.654264 -0.193963 + -0.850533 1.32721 -3.13796 -0.88922 0.425233 -0.168716 + -0.837007 1.30443 -3.1987 -0.866915 0.155506 -0.473578 + -0.836227 1.26211 -3.20061 -0.794169 -0.140755 -0.591172 + -0.807774 1.35332 -3.17719 -0.343641 0.937186 -0.0599436 + -0.827415 1.34108 -3.19659 -0.710348 0.603132 -0.362819 + -0.828508 1.31515 -3.21027 -0.780578 0.211785 -0.588086 + -0.788135 1.35976 -3.19374 -0.344028 0.933357 -0.102414 + -0.803897 1.3462 -3.21505 -0.433188 0.670717 -0.602069 + -0.80499 1.32035 -3.22868 -0.383956 0.26671 -0.883993 + -0.810492 1.2834 -3.23168 -0.423018 -0.0677639 -0.903583 + -0.824198 1.20238 -3.18974 -0.746425 -0.103299 -0.657404 + -0.759647 1.36245 -3.21781 -0.352857 0.757129 -0.549771 + -0.775426 1.33123 -3.23053 -0.314824 0.336035 -0.887675 + -0.780928 1.29429 -3.23354 -0.308369 0.0410189 -0.950382 + -0.798463 1.22376 -3.22077 -0.571091 -0.225615 -0.789274 + -0.734881 1.36517 -3.22991 -0.510718 0.679211 -0.527105 + -0.75066 1.33395 -3.24263 -0.56923 0.372221 -0.733095 + -0.758515 1.28489 -3.24766 -0.628664 0.0801214 -0.773538 + -0.77605 1.21436 -3.23489 -0.650392 -0.0290112 -0.759044 + -0.724005 1.3358 -3.27084 -0.611347 0.357093 -0.706215 + -0.731861 1.28674 -3.27586 -0.746686 0.145284 -0.649116 + -0.740077 1.21133 -3.26985 -0.758034 0.0150473 -0.652041 + -0.703222 1.28398 -3.31608 -0.871041 0.128482 -0.474111 + -0.711438 1.20857 -3.31007 -0.827377 0.0219875 -0.561216 + -0.729951 1.09364 -3.2816 -0.799537 0.024507 -0.600116 + -0.756525 1.13848 -3.25267 -0.71915 -0.0116248 -0.694757 + -0.692139 1.32737 -3.32723 -0.863614 0.367076 -0.345582 + -0.679091 1.27673 -3.37073 -0.768159 -0.0132553 -0.640122 + -0.685683 1.19519 -3.35049 -0.753651 -0.0625606 -0.654291 + -0.704195 1.08025 -3.32202 -0.713854 -0.0462183 -0.698768 + -0.631037 1.25434 -3.39814 -0.489264 -0.235466 -0.839747 + -0.657607 1.23794 -3.38175 -0.477437 -0.192609 -0.857296 + -0.664199 1.15631 -3.36156 -0.161871 -0.204568 -0.965375 + -0.667673 1.07883 -3.34755 -0.0804065 -0.16128 -0.983628 + -0.583594 1.12337 -3.3677 -0.413194 -0.305865 -0.85774 + -0.606508 1.1171 -3.35144 -0.448663 -0.257233 -0.855881 + -0.633078 1.1007 -3.33504 -0.023857 -0.220987 -0.974985 + -0.636552 1.02322 -3.32103 0.0327785 -0.128015 -0.99123 + -0.541689 1.23037 -3.43524 -0.317245 -0.420334 -0.850103 + -0.554759 1.09699 -3.36781 -0.191171 -0.237253 -0.952452 + -0.590393 0.98949 -3.34181 -0.485612 0.0171394 -0.874006 + -0.613308 0.983305 -3.3255 -0.376048 0.0441672 -0.925547 + -0.525923 1.10772 -3.37419 -0.351974 -0.259034 -0.899453 + -0.523938 1.00931 -3.36355 -0.410158 0.0258807 -0.911647 + -0.552774 0.998588 -3.35717 -0.312055 0.0387584 -0.949273 + -0.59256 0.886387 -3.36023 -0.447357 0.20609 -0.870286 + -0.516806 0.905132 -3.3851 -0.440406 0.167995 -0.881941 + -0.554941 0.895571 -3.37554 -0.353946 0.217305 -0.909671 + -0.549588 0.807847 -3.4032 -0.434649 0.27002 -0.859168 + -0.613945 0.801257 -3.36938 -0.465565 0.196425 -0.86294 + -0.648242 0.887851 -3.33037 -0.238582 0.156511 -0.958427 + -0.483313 0.9457 -3.40716 -0.352928 0.129484 -0.926647 + -0.478446 0.842036 -3.41942 -0.343401 0.347352 -0.872595 + -0.511454 0.817408 -3.41276 -0.373646 0.39511 -0.839212 + -0.449075 0.857102 -3.41871 -0.181931 0.337697 -0.923505 + -1.15269 1.18141 -2.66743 -0.871896 0.470712 -0.135007 + -1.153 1.14253 -2.72549 -0.915223 0.211874 -0.342748 + -1.14926 1.09558 -2.74257 -0.82447 0.379249 -0.420022 + -1.13193 1.21032 -2.7013 -0.71007 0.693272 -0.123184 + -1.13785 1.1844 -2.71441 -0.891173 0.360217 -0.275779 + -1.12906 1.16266 -2.76575 -0.89021 0.221673 -0.397979 + -1.12532 1.1158 -2.78279 -0.82497 -0.0490651 -0.563043 + -1.09691 1.11595 -2.82104 -0.805106 0.309681 -0.505868 + -1.09952 1.22269 -2.68993 -0.188756 0.981753 0.0230639 + -1.09078 1.2261 -2.71603 -0.236185 0.96295 0.130168 + -1.1157 1.21894 -2.74322 -0.668408 0.703396 -0.241793 + -1.12163 1.19302 -2.75634 -0.864647 0.383575 -0.324431 + -1.10832 1.18096 -2.80125 -0.784085 0.256464 -0.565187 + -1.01432 1.22146 -2.67579 -0.154738 0.968056 0.197288 + -1.06359 1.23826 -2.73789 -0.251442 0.943282 0.216784 + -1.08851 1.23109 -2.76508 -0.509744 0.844013 -0.166745 + -1.10089 1.21141 -2.79179 -0.643317 0.553659 -0.528777 + -1.05669 1.24472 -2.77308 -0.264462 0.935019 -0.236217 + -1.06907 1.22495 -2.79984 -0.463944 0.800522 -0.379369 + -1.09432 1.18106 -2.81722 -0.684007 0.204102 -0.700341 + -1.11132 1.1158 -2.79879 -0.539026 0.721 -0.435442 + -1.00108 1.25237 -2.77993 -0.484721 0.873235 -0.050064 + -1.06865 1.22229 -2.81203 -0.698494 0.68337 -0.212396 + -1.08073 1.19248 -2.8274 -0.779709 0.356109 -0.515014 + -1.06632 1.19253 -2.8497 -0.78751 0.313911 -0.530365 + -1.05505 1.23363 -2.82227 -0.65206 0.745344 -0.138853 + -1.0373 1.24602 -2.83274 -0.637136 0.760528 -0.12512 + -1.04896 1.19939 -2.87096 -0.808506 0.321565 -0.492864 + -1.04076 1.13677 -2.8959 -0.802866 0.287136 -0.522454 + -1.01994 1.25288 -2.85401 -0.690285 0.692207 -0.21061 + -1.02282 1.22287 -2.90504 -0.844319 0.311836 -0.435756 + -1.01462 1.16025 -2.92998 -0.847699 0.0952491 -0.521856 + -0.98606 1.14559 -2.97619 -0.807124 0.140914 -0.573318 + -1.06735 1.08183 -2.90755 -0.71221 0.557681 -0.426321 + -0.997624 1.21503 -2.94985 -0.843424 0.255487 -0.472612 + -0.983832 1.21207 -2.97794 -0.900273 0.212269 -0.380067 + -1.00083 1.1573 -2.95806 -0.874113 -0.195654 -0.444575 + -0.953329 1.20799 -3.03226 -0.761881 -0.082279 -0.64247 + -0.924861 1.16125 -3.05211 -0.759065 0.0913809 -0.64457 + -0.94158 1.11554 -3.05993 -0.671967 0.478682 -0.565087 + -1.00278 1.09979 -2.98406 -0.715202 0.509992 -0.477906 + -0.933976 1.23772 -3.05755 -0.724362 0.0473782 -0.68779 + -0.905509 1.19098 -3.0774 -0.756984 -0.0196027 -0.653139 + -0.871586 1.18768 -3.12528 -0.819592 -0.0165358 -0.572709 + -0.878753 1.11692 -3.12013 -0.743617 0.354148 -0.56711 + -0.831364 1.13163 -3.1846 -0.693751 0.0361876 -0.719306 + -0.906013 1.05988 -3.15032 -0.511791 0.295604 -0.806652 + -0.96884 1.05849 -3.09012 -0.670227 0.442286 -0.595968 + -1.03934 1.04783 -3.00726 -0.70953 0.480407 -0.515534 + -1.10391 1.02987 -2.93075 -0.700279 0.522208 -0.486732 + -0.792498 1.14151 -3.21772 -0.668955 -0.0403599 -0.742206 + -0.844477 1.01909 -3.16388 -0.435912 0.0641955 -0.897697 + -0.862737 0.911411 -3.17597 -0.314487 0.204616 -0.926947 + -0.924274 0.952194 -3.16241 -0.401295 0.14305 -0.904709 + -0.981885 0.970853 -3.11573 -0.692672 0.171191 -0.700642 + -0.805611 1.02897 -3.19699 -0.673897 0.0307071 -0.738187 + -0.779037 0.984124 -3.22592 -0.685824 0.0585476 -0.725408 + -0.807312 0.8757 -3.21712 -0.561078 0.201036 -0.802979 + -0.888474 0.773687 -3.21123 -0.563203 0.163526 -0.809976 + -0.708009 0.929185 -3.30036 -0.640215 0.0185042 -0.767973 + -0.736285 0.820761 -3.29156 -0.579149 0.206094 -0.788741 + -0.770918 0.732946 -3.30046 -0.565777 0.276 -0.776994 + -0.833049 0.737981 -3.25239 -0.538052 0.232206 -0.810297 + -0.671487 0.927766 -3.3259 -0.305046 0.0231465 -0.952056 + -0.669628 0.802808 -3.33947 -0.467802 0.19936 -0.861055 + -0.704261 0.714906 -3.34842 -0.437763 0.323929 -0.838709 + -0.729677 0.650131 -3.36422 -0.429278 0.544317 -0.720722 + -0.784197 0.647313 -3.32094 -0.656441 0.549434 -0.516922 + -0.791553 0.658465 -3.30266 -0.763638 0.201061 -0.61354 + -0.853684 0.663413 -3.25463 -0.650272 -0.0904644 -0.754296 + -0.824094 0.620744 -3.32732 -0.689668 0.667002 -0.281899 + -0.835219 0.606485 -3.26263 -0.793486 0.461746 -0.396448 + -0.842575 0.617554 -3.2444 -0.680987 0.225742 -0.696633 + -0.881885 0.624614 -3.20543 -0.71574 0.01508 -0.698204 + -0.892993 0.670473 -3.21566 -0.728335 -0.127559 -0.673244 + -0.839508 0.585837 -3.34066 -0.767933 0.434601 -0.470532 + -0.850633 0.571579 -3.27597 -0.699861 0.656442 -0.281565 + -0.891828 0.577886 -3.21909 -0.516642 0.648426 -0.559128 + -0.917453 0.547777 -3.26174 -0.481756 0.711617 -0.511383 + -0.970307 0.566982 -3.19821 -0.398424 0.769379 -0.499313 + -0.930771 0.581369 -3.17973 -0.457876 0.689703 -0.560945 + -0.920827 0.628098 -3.16606 -0.668567 0.0729528 -0.740065 + -0.943938 0.49023 -3.28707 -0.644385 0.410786 -0.644998 + -0.996791 0.50944 -3.22354 -0.632229 0.445744 -0.633719 + -1.05221 0.499862 -3.17235 -0.648677 0.374187 -0.662723 + -1.03412 0.568928 -3.14917 -0.543396 0.784954 -0.297604 + -0.994583 0.583223 -3.13074 -0.406932 0.601124 -0.68779 + -1.01994 0.404621 -3.25099 -0.682462 0.276672 -0.676534 + -1.07535 0.395043 -3.1998 -0.685545 0.259637 -0.68016 + -1.13457 0.383945 -3.14298 -0.694294 0.232501 -0.681101 + -1.11179 0.457364 -3.13654 -0.655355 0.3179 -0.685164 + -1.0937 0.52643 -3.11337 -0.59319 0.365523 -0.717299 + -1.04263 0.322675 -3.25645 -0.703613 0.169594 -0.690049 + -1.10444 0.320445 -3.19199 -0.710552 0.154784 -0.686409 + -1.16366 0.309347 -3.13517 -0.729849 0.084507 -0.678365 + -1.22401 0.308672 -3.0596 -0.772003 0.0621487 -0.632574 + -1.19471 0.371712 -3.08779 -0.707413 0.13203 -0.69436 + -1.13614 0.255278 -3.16932 -0.736031 -0.048465 -0.675211 + -1.19799 0.257929 -3.09751 -0.771599 -0.0537367 -0.633836 + -1.25835 0.25717 -3.02199 -0.825489 -0.0769077 -0.559154 + -1.17071 0.195581 -3.11292 -0.775988 -0.151882 -0.612188 + -1.23257 0.198234 -3.04111 -0.796209 -0.240811 -0.555032 + -1.28577 0.197006 -2.94879 -0.82635 -0.272375 -0.492907 + -1.31288 0.247537 -2.92751 -0.837482 -0.174951 -0.517703 + -1.3159 0.131596 -2.85429 -0.813168 -0.425584 -0.397033 + -1.3605 0.135637 -2.75069 -0.785636 -0.511692 -0.347776 + -1.34029 0.187375 -2.85431 -0.811358 -0.375442 -0.448042 + -1.30803 0.080062 -2.77604 -0.657718 -0.697751 -0.283814 + -1.35263 0.084103 -2.67244 -0.676531 -0.689855 -0.257693 + -1.39589 0.088496 -2.56864 -0.650732 -0.720374 -0.24002 + -1.40652 0.13393 -2.65054 -0.787216 -0.523908 -0.325286 + -1.38632 0.185582 -2.7542 -0.835594 -0.376829 -0.399728 + -1.26687 0.033708 -2.71875 -0.527483 -0.821637 -0.216043 + -1.31176 0.039233 -2.61412 -0.542936 -0.817674 -0.191389 + -1.35501 0.043626 -2.51033 -0.541844 -0.819614 -0.186114 + -1.44616 0.135233 -2.545 -0.71925 -0.622187 -0.309132 + -1.48932 0.129995 -2.44592 -0.627934 -0.70319 -0.3335 + -1.43091 0.182214 -2.65897 -0.802916 -0.458224 -0.381257 + -1.41122 0.246872 -2.74796 -0.851353 -0.282496 -0.442033 + -1.36663 0.250236 -2.84319 -0.859513 -0.20662 -0.467489 + -1.47407 0.177061 -2.55984 -0.774972 -0.505297 -0.379597 + -1.46101 0.248108 -2.6577 -0.842072 -0.32881 -0.42755 + -1.39707 0.331328 -2.82164 -0.842121 -0.163062 -0.514045 + -1.33472 0.319051 -2.90858 -0.829021 -0.0990452 -0.550377 + -1.28097 0.316267 -2.99295 -0.803522 -0.0413684 -0.593836 + -1.50272 0.238276 -2.56287 -0.84679 -0.344521 -0.405281 + -1.44686 0.33257 -2.73139 -0.851905 -0.201614 -0.483332 + -1.37354 0.397148 -2.86464 -0.818817 0.0195779 -0.573721 + -1.31119 0.384784 -2.95163 -0.779952 0.0353195 -0.624842 + -1.25167 0.379392 -3.02109 -0.750007 0.127781 -0.64897 + -1.54141 0.229118 -2.47201 -0.878911 -0.321167 -0.352658 + -1.49748 0.340717 -2.6479 -0.876334 -0.194716 -0.440596 + -1.47845 0.415515 -2.70086 -0.872163 0.0408533 -0.487507 + -1.42783 0.407368 -2.78435 -0.842552 -0.00890266 -0.538541 + -1.53617 0.331558 -2.55704 -0.880085 -0.235715 -0.412175 + -1.52509 0.411422 -2.61477 -0.910456 0.0523829 -0.410276 + -1.45261 0.472207 -2.72205 -0.847584 0.222339 -0.481837 + -1.40063 0.465663 -2.81112 -0.820573 0.182764 -0.541532 + -1.34634 0.455443 -2.89141 -0.772425 0.145223 -0.618279 + -1.57128 0.306542 -2.47251 -0.835394 -0.370571 -0.405948 + -1.5602 0.386404 -2.53023 -0.910678 -0.0614836 -0.408516 + -1.49925 0.468028 -2.63601 -0.869102 0.155199 -0.469655 + -1.43292 0.53521 -2.72537 -0.822372 0.245145 -0.513427 + -1.60575 0.310399 -2.37859 -0.920906 -0.250653 -0.298506 + -1.59543 0.38301 -2.44856 -0.932298 -0.0776528 -0.353257 + -1.54397 0.462983 -2.55687 -0.894162 0.0689012 -0.442411 + -1.52708 0.537637 -2.57338 -0.856026 0.0321084 -0.515935 + -1.48236 0.542768 -2.65247 -0.830761 0.187923 -0.523947 + -1.63363 0.327312 -2.28708 -0.933057 -0.197409 -0.300721 + -1.62331 0.400011 -2.357 -0.941493 -0.10647 -0.319773 + -1.5792 0.459672 -2.47514 -0.914495 0.0123474 -0.404409 + -1.66959 0.336595 -2.19856 -0.898147 -0.253989 -0.358917 + -1.65123 0.417072 -2.28535 -0.920044 -0.146869 -0.363247 + -1.61732 0.461668 -2.39239 -0.919441 -0.0799871 -0.385007 + -1.5685 0.550967 -2.50587 -0.883756 -0.0422909 -0.466032 + -1.6967 0.352746 -2.14414 -0.887069 -0.25059 -0.387702 + -1.67834 0.433221 -2.23093 -0.924063 -0.0900735 -0.371476 + -1.73525 0.356326 -2.06274 -0.904216 -0.195466 -0.379718 + -1.76991 0.348332 -1.97029 -0.923692 -0.111495 -0.366554 + -1.51283 0.639411 -2.60746 -0.747482 -0.0418051 -0.662965 + -1.46558 0.611434 -2.6398 -0.735773 0.0833317 -0.672082 + -1.41613 0.603874 -2.71271 -0.812837 0.249557 -0.526324 + -1.43993 0.686228 -2.66635 -0.701385 -0.130788 -0.700681 + -1.39955 0.667331 -2.71382 -0.806797 0.0380626 -0.589602 + -1.37089 0.599904 -2.79263 -0.806693 0.251944 -0.534576 + -1.38094 0.528752 -2.81439 -0.805135 0.251071 -0.537327 + -1.37391 0.738612 -2.76848 -0.636777 -0.0527125 -0.769244 + -1.32933 0.706247 -2.79182 -0.676599 0.20304 -0.707805 + -1.35431 0.66336 -2.79374 -0.767904 0.325738 -0.55156 + -1.30118 0.653066 -2.85931 -0.724483 0.340029 -0.599587 + -1.31941 0.593228 -2.86727 -0.749196 0.296524 -0.592266 + -1.34461 0.824924 -2.77497 -0.411356 0.40117 -0.818443 + -1.30003 0.792471 -2.79836 -0.618966 0.188194 -0.762538 + -1.2762 0.695953 -2.85739 -0.741885 0.343054 -0.576125 + -1.26662 0.915059 -2.81249 -0.753054 0.313349 -0.578552 + -1.21134 0.912351 -2.875 -0.729015 0.258014 -0.634008 + -1.24475 0.789848 -2.86082 -0.767324 0.187833 -0.613133 + -1.22635 0.705679 -2.92404 -0.747082 0.262215 -0.610828 + -1.23221 0.986335 -2.78975 -0.674975 0.608715 -0.416983 + -1.17101 1.00413 -2.86558 -0.688502 0.55266 -0.469608 + -1.14424 0.938086 -2.94017 -0.725606 0.288729 -0.624605 + -1.1949 0.799579 -2.92748 -0.754747 0.20571 -0.622929 + -1.12351 1.06101 -2.83269 -0.701325 0.593726 -0.394505 + -1.05238 0.960199 -3.03288 -0.726634 0.219754 -0.65093 + -1.10361 0.92803 -2.98836 -0.712459 0.205663 -0.670898 + -1.15427 0.789519 -2.97565 -0.701545 0.205512 -0.682349 + -1.17045 0.712744 -2.98307 -0.696069 0.236238 -0.677997 + -1.24529 0.638654 -2.93015 -0.718489 0.283709 -0.635045 + -0.981962 0.837958 -3.12715 -0.648643 0.086705 -0.756138 + -1.04096 0.835841 -3.07488 -0.676754 0.135161 -0.723696 + -1.09219 0.803672 -3.03036 -0.669838 0.166998 -0.723484 + -1.10836 0.726897 -3.03779 -0.624304 0.219397 -0.749739 + -1.18938 0.64572 -2.98918 -0.69001 0.263171 -0.674261 + -0.92435 0.819293 -3.17382 -0.649633 0.0631261 -0.757623 + -0.928869 0.716082 -3.17825 -0.668462 -0.0290365 -0.74318 + -0.980501 0.730595 -3.13999 -0.596225 0.010625 -0.802747 + -1.03949 0.728479 -3.08773 -0.63342 0.171974 -0.754456 + -1.12758 0.661112 -3.04244 -0.623165 0.247104 -0.742028 + -0.972459 0.64252 -3.12784 -0.49703 0.0221792 -0.86745 + -1.05871 0.662694 -3.09238 -0.507377 0.168821 -0.845025 + -1.14228 0.592368 -3.05418 -0.6203 0.267425 -0.737368 + -1.20409 0.576976 -3.00092 -0.681562 0.267929 -0.680946 + -1.26352 0.578902 -2.93805 -0.708927 0.284702 -0.645265 + -1.08084 0.603397 -3.09528 -0.462074 0.24442 -0.852494 + -1.15515 0.515401 -3.07226 -0.618284 0.259328 -0.741939 + -1.21596 0.512611 -3.01483 -0.687406 0.257678 -0.679026 + -1.2754 0.514542 -2.95198 -0.711823 0.238095 -0.660771 + -1.32947 0.522163 -2.88898 -0.753782 0.249189 -0.608044 + -1.17193 0.445132 -3.08136 -0.670714 0.267724 -0.691712 + -1.23275 0.442429 -3.02388 -0.703146 0.21641 -0.677312 + -1.29227 0.447909 -2.95436 -0.739324 0.196686 -0.643984 + -2.07631 1.05829 -0.619383 -0.984776 -0.161989 0.0630468 + -2.08462 1.14167 -0.528789 -0.972802 -0.215204 0.0856987 + -2.09766 1.23015 -0.449251 -0.96778 -0.24505 0.0579026 + -2.07183 1.16429 -0.40337 -0.90215 -0.373365 0.216157 + -2.09548 1.25584 -0.32634 -0.904996 -0.386754 0.17721 + -2.1209 1.32137 -0.369243 -0.96768 -0.251537 0.0180005 + -2.1412 1.40637 -0.285263 -0.964817 -0.26175 -0.0248056 + -2.07553 1.27638 -0.230928 -0.778319 -0.533494 0.331065 + -2.12035 1.37266 -0.167875 -0.831185 -0.492366 0.258278 + -2.11872 1.34714 -0.246282 -0.930117 -0.355499 0.0922128 + -2.15307 1.44336 -0.175734 -0.923882 -0.376226 0.0699626 + -2.17486 1.4999 -0.209276 -0.957722 -0.281004 -0.0616842 + -2.09296 1.37722 -0.106179 -0.686569 -0.557314 0.46693 + -2.11209 1.46856 -0.032785 -0.646813 -0.556234 0.521764 + -2.1547 1.46887 -0.097327 -0.826761 -0.481316 0.291204 + -2.18874 1.57082 -0.033902 -0.766564 -0.524893 0.369955 + -2.18673 1.53689 -0.099744 -0.870768 -0.469572 0.145828 + -2.04395 1.43658 0.003601 -0.425691 -0.636428 0.643232 + -2.03494 1.51832 0.092234 -0.385641 -0.612214 0.690272 + -2.14612 1.57059 0.03069 -0.668946 -0.510348 0.540422 + -1.97635 1.39651 -0.013794 0.0907708 -0.70271 0.705663 + -1.96734 1.47825 0.074839 0.181619 -0.708776 0.681652 + -2.04287 1.60776 0.161511 -0.408368 -0.500057 0.763662 + -2.15405 1.65995 0.099917 -0.546278 -0.586471 0.598024 + -2.2366 1.67118 0.022866 -0.638983 -0.645383 0.418547 + -1.92104 1.44646 -0.019103 0.780813 -0.482862 0.396455 + -1.89298 1.52745 0.050015 0.705753 -0.604032 0.370214 + -1.93928 1.55924 0.143957 0.207741 -0.688047 0.695295 + -1.98979 1.6911 0.231766 -0.283109 -0.594299 0.752767 + -1.90639 1.358 -0.168095 0.948273 -0.205625 0.24186 + -1.89158 1.44598 -0.106472 0.943949 -0.296139 0.145811 + -1.87462 1.52017 -0.039377 0.914213 -0.394759 0.0915382 + -1.85245 1.60663 0.108876 0.704914 -0.629211 0.327399 + -1.8862 1.64258 0.21421 0.276049 -0.725521 0.63041 + -1.86913 1.54697 -0.119201 0.973441 -0.0658189 -0.21927 + -1.84762 1.61518 -0.058341 0.937781 -0.141336 -0.317161 + -1.83409 1.59935 0.019485 0.901535 -0.432666 -0.00585471 + -1.79353 1.68774 0.086182 0.903663 -0.426788 -0.0352704 + -1.80712 1.67712 0.149782 0.770121 -0.584024 0.256575 + -1.90366 1.58585 -0.184941 0.900212 0.304796 -0.310995 + -1.88215 1.65406 -0.124082 0.734553 0.357577 -0.576689 + -1.80707 1.70358 0.008356 0.879021 -0.0303957 -0.475814 + -1.96656 1.69425 -0.164886 0.815085 0.494977 -0.301056 + -1.98548 1.76989 -0.0955 0.587809 0.688393 -0.424966 + -1.90107 1.7297 -0.054687 0.416509 0.642809 -0.642897 + -1.85621 1.7471 -0.020024 0.479751 0.468105 -0.742103 + -1.75682 1.79571 0.071374 0.860873 -0.0825552 -0.502078 + -2.04625 1.81044 -0.084535 0.29823 0.796599 -0.525822 + -2.00417 1.89569 0.025604 0.345333 0.624215 -0.700786 + -1.95931 1.91309 0.060267 0.320098 0.539902 -0.778488 + -1.80597 1.83923 0.042994 0.417825 0.411959 -0.809761 + -2.01202 1.78593 -0.505692 0.647339 0.745688 0.157802 + -2.02144 1.80659 -0.573062 0.685061 0.658367 0.311841 + -2.05701 1.81152 -0.487006 0.605798 0.768393 0.206351 + -2.05367 1.84205 -0.544286 0.817012 0.443929 0.367991 + -2.01739 1.83902 -0.609851 0.801432 0.276919 0.530116 + -2.04962 1.87449 -0.581074 0.807571 0.346906 0.476953 + -2.04145 1.94214 -0.633849 0.508707 0.297805 0.807793 + -1.97133 1.92451 -0.662711 0.664323 0.110262 0.739268 + -1.99539 2.02754 -0.686759 0.450854 0.240487 0.859591 + -1.86546 2.21637 -0.792627 0.671205 0.0809145 0.736842 + -1.86537 2.28969 -0.80982 0.100236 0.135708 0.985665 + -1.97007 2.21519 -0.731793 0.441884 0.0308854 0.89654 + -2.00125 2.13916 -0.723096 -0.909366 0.200364 0.364564 + -1.94335 2.34968 -0.749733 0.602343 -0.0633986 0.795716 + -1.9866 2.29243 -0.724362 0.495295 -0.00991002 0.868668 + -1.92042 2.52582 -0.743409 0.632544 -0.0129348 0.774417 + -1.96367 2.46847 -0.718087 -0.522958 0.087648 0.84784 + -1.87463 2.72542 -0.804338 0.70776 0.274569 0.650913 + -1.93079 2.6463 -0.737493 0.108039 0.0688432 0.99176 + -1.93692 2.63864 -0.741815 -0.967517 0.129701 0.217 + -1.94728 2.53942 -0.740764 -0.942284 0.120314 -0.312449 + -1.98055 2.3106 -0.758235 -0.964562 0.107045 -0.241166 + -1.9866 2.29243 -0.724362 -0.987131 0.106807 -0.119016 + -1.90132 2.76373 -0.816285 0.528351 0.56562 0.633181 + -1.9324 2.7268 -0.741515 -0.133289 0.598016 0.790323 + -1.93854 2.71913 -0.745837 -0.955142 0.192124 0.225371 + -2.14399 1.89124 -0.011488 0.426955 0.672227 -0.604831 + -2.06494 1.93633 0.036612 0.195836 0.646167 -0.737643 + -1.93989 1.94675 0.091568 0.284015 0.614345 -0.73615 + -2.15986 1.95106 0.0341 0.269388 0.585078 -0.764927 + -2.0808 1.99615 0.082202 0.248486 0.50442 -0.826931 + -2.19351 1.9624 0.028866 0.198285 0.533191 -0.822429 + -2.10963 2.04865 0.097671 0.238839 0.542194 -0.805594 + -2.06721 2.07636 0.125269 0.213802 0.715921 -0.664639 + -2.03838 2.02386 0.109799 0.271657 0.449616 -0.85091 + -2.23917 1.92694 0.002679 -0.000378154 0.505122 -0.863048 + -2.21586 2.04588 0.063268 0.0890033 0.639748 -0.763414 + -2.14329 2.05998 0.092438 0.250808 0.672469 -0.696334 + -2.15972 2.09474 0.138641 0.0354119 0.920513 -0.389104 + -2.24964 1.89447 -0.013284 -0.0940971 0.614787 -0.78306 + -2.32536 1.91211 -0.01503 -0.274091 0.4257 -0.862354 + -2.26152 2.01042 0.037081 -0.0305131 0.537276 -0.842854 + -2.28514 2.03824 0.065703 -0.320131 0.729777 -0.604103 + -2.23229 2.08063 0.109474 -0.131286 0.898211 -0.419501 + -2.30144 1.86929 -0.036272 -0.147104 0.603321 -0.783814 + -2.33583 1.87963 -0.030984 -0.497391 0.502262 -0.707344 + -2.35673 1.84625 -0.008958 -0.96642 -0.193908 -0.168619 + -2.34898 1.93992 0.013602 -0.632048 0.451421 -0.629869 + -2.25277 1.80374 -0.126729 -0.744028 0.255098 -0.617533 + -2.31679 1.83824 -0.046093 -0.406846 0.181152 -0.895355 + -2.35118 1.84867 -0.040755 -0.740287 0.0530725 -0.670193 + -2.20712 1.69775 -0.19395 -0.83829 -0.0221298 -0.544775 + -2.28134 1.80294 -0.084555 -0.80772 -0.123241 -0.576541 + -2.3157 1.79518 -0.041913 -0.812506 -0.373635 -0.447471 + -2.32125 1.79285 -0.010065 -0.840183 -0.535749 -0.0840558 + -2.28025 1.75988 -0.080374 -0.887256 -0.211078 -0.41015 + -2.28498 1.73488 -0.015069 -0.882903 -0.461293 -0.0876999 + -2.33655 1.81891 0.081797 -0.830046 -0.508139 0.229823 + -2.25308 1.68695 -0.118641 -0.922409 -0.241731 -0.301209 + -2.23459 1.63726 -0.042976 -0.866257 -0.491669 0.0886564 + -2.30028 1.76094 0.076794 -0.746337 -0.569201 0.344952 + -2.21773 1.74971 0.153845 -0.494162 -0.635582 0.59316 + -2.34528 1.85868 0.128905 -0.84888 -0.431524 0.305269 + -2.20269 1.58923 -0.146599 -0.944752 -0.300742 -0.130379 + -2.14133 1.44162 -0.358728 -0.979075 -0.0336256 -0.200702 + -1.98942 1.75695 0.288917 -0.356772 -0.656255 0.664864 + -2.21737 1.81556 0.210996 -0.427094 -0.604982 0.672003 + -2.31566 1.8655 0.189291 -0.664597 -0.516207 0.540222 + -2.35617 1.95194 0.178382 -0.937982 -0.170715 0.301738 + -2.36546 1.88611 0.038201 -0.987757 -0.155769 0.00846897 + -1.8863 1.73845 0.328145 -0.0158764 -0.745407 0.666421 + -2.03039 1.82377 0.333367 -0.381333 -0.563144 0.733113 + -2.14866 1.86319 0.301299 -0.403642 -0.547401 0.733093 + -2.24695 1.91313 0.279594 -0.500256 -0.445701 0.742358 + -2.32655 1.95876 0.238766 -0.76628 -0.176209 0.617872 + -1.8458 1.74 0.305064 0.52681 -0.688237 0.498799 + -1.86725 1.78376 0.373066 0.111726 -0.563128 0.818782 + -1.92727 1.80528 0.372597 -0.278403 -0.514301 0.811163 + -1.94441 1.85603 0.390103 -0.216515 -0.262564 0.940309 + -2.0185 1.88934 0.374807 -0.322445 -0.281857 0.903651 + -1.84087 1.71298 0.255067 0.651502 -0.63517 0.414853 + -1.76504 1.81136 0.280262 0.792631 -0.509071 0.335533 + -1.82675 1.78531 0.349985 0.555052 -0.631462 0.541454 + -1.81491 1.82177 0.372629 0.527454 -0.464782 0.711175 + -1.88439 1.83451 0.390573 -0.0563916 -0.312353 0.948291 + -1.76011 1.78434 0.230264 0.864915 -0.42226 0.271326 + -1.74652 1.79497 0.166664 0.908399 -0.416978 0.0306689 + -1.75319 1.84774 0.302856 0.777004 -0.480524 0.406646 + -1.73164 1.84857 0.10061 0.858913 0.21563 -0.464513 + -1.72133 1.84783 0.1959 0.911492 -0.410839 0.0198552 + -1.71044 1.88591 0.258945 0.894286 -0.39135 0.217018 + -1.73118 1.87639 0.295633 0.789309 -0.46938 0.395821 + -1.79859 1.8846 0.394619 0.534401 -0.330996 0.777726 + -1.78655 1.87289 0.074295 0.450527 0.632341 -0.630214 + -1.72356 1.85728 0.131326 0.922665 0.0418918 -0.383321 + -1.71488 1.87816 0.156571 0.917837 0.0483912 -0.393997 + -1.71266 1.8687 0.221145 0.901692 -0.422774 0.0906235 + -1.77846 1.88169 0.105061 0.479172 0.764593 -0.431034 + -1.81352 1.9195 0.12256 0.322027 0.547946 -0.772045 + -1.75341 1.9167 0.142605 0.43893 0.414666 -0.797115 + -1.69585 1.93395 0.202742 0.924585 0.208427 -0.318907 + -1.69363 1.95115 0.240542 0.930307 0.366312 -0.0185843 + -1.97494 1.98465 0.109118 0.33233 0.565857 -0.754561 + -1.92688 2.02509 0.144879 0.284258 0.599303 -0.748353 + -1.86677 2.02229 0.164923 0.340009 0.709329 -0.617451 + -1.73438 1.97249 0.188775 0.5721 0.6472 -0.503819 + -1.7512 2.00011 0.235748 0.509114 0.857031 -0.0793692 + -1.99032 2.0643 0.14556 0.34963 0.712652 -0.608183 + -1.99179 2.08462 0.19257 0.282208 0.925875 -0.251225 + -1.88359 2.0499 0.211896 0.37028 0.89876 -0.234783 + -1.76364 1.99576 0.302883 0.515872 0.823652 0.235529 + -1.70607 1.9468 0.307678 0.897687 0.252079 0.361406 + -2.06867 2.09668 0.17228 0.154743 0.954999 -0.253045 + -1.97827 2.09008 0.273111 0.201643 0.971959 0.120974 + -1.87008 2.05545 0.292487 0.39163 0.913235 0.112371 + -1.88752 2.03961 0.350326 0.241186 0.790539 0.562918 + -1.78108 1.97992 0.360723 0.487772 0.628816 0.605532 + -2.10191 2.10864 0.233761 0.0295365 0.996133 0.0827478 + -2.11664 2.09202 0.285748 -0.130634 0.849911 0.510476 + -1.99301 2.07346 0.325098 0.0538973 0.842256 0.536377 + -2.19296 2.1067 0.200123 -0.143025 0.98971 0.00429181 + -2.21547 2.09059 0.247028 -0.303141 0.843637 0.44315 + -2.12665 2.04664 0.326351 -0.25651 0.524742 0.811695 + -2.02307 2.03341 0.363666 -0.129289 0.522003 0.843088 + -1.91758 1.99965 0.388943 -0.00327734 0.49643 0.86807 + -2.28133 2.08254 0.160965 -0.38893 0.914944 -0.107751 + -2.30384 2.06635 0.20782 -0.586204 0.755072 0.293651 + -2.30936 2.03195 0.244401 -0.672984 0.459557 0.579569 + -2.22548 2.04512 0.287581 -0.382665 0.570306 0.726855 + -2.33417 2.04015 0.1172 -0.62313 0.714879 -0.317265 + -2.35243 2.02888 0.146103 -0.850768 0.52551 -0.00573434 + -2.35795 1.99449 0.182684 -0.938336 0.177983 0.296392 + -2.30199 1.99562 0.269721 -0.649089 0.103014 0.753705 + -2.36724 1.92857 0.042453 -0.96268 0.182775 -0.1996 + -1.85923 2.80544 -0.885537 -0.0566575 0.92097 0.385491 + -1.86198 2.8063 -0.896229 -0.517549 0.834665 -0.188356 + -1.88113 2.77837 -0.880441 -0.887676 0.347976 -0.301568 + -1.86775 2.79455 -0.86387 -0.756149 0.653669 -0.0309293 + -1.90746 2.75606 -0.820608 -0.904711 0.358815 -0.229673 + -1.90132 2.76373 -0.816285 -0.760978 0.645608 -0.0640537 + -1.84789 2.75571 -0.943404 -0.840199 0.151155 -0.520786 + -1.88434 2.69789 -0.875845 -0.907581 0.0217136 -0.419316 + -1.91067 2.6755 -0.816061 -0.931754 0.0461627 -0.360143 + -1.92103 2.57619 -0.81506 -0.933255 0.123665 -0.337255 + -1.96416 2.38154 -0.780912 -0.945125 0.137365 -0.29643 + -1.90304 2.55966 -0.865218 -0.903307 0.130846 -0.408553 + -1.94617 2.36492 -0.83112 -0.907722 0.112067 -0.404328 + -1.94017 2.29025 -0.862401 -0.903977 0.083575 -0.419334 + -1.96563 2.17909 -0.822059 -0.910114 0.0404193 -0.412383 + -1.9952 2.15733 -0.756969 -0.959982 0.0516612 -0.275255 + -2.21811 2.00879 0.3129 -0.395003 0.247979 0.884579 + -2.22239 1.94999 0.310547 -0.441301 -0.206085 0.873374 + -2.13677 1.92867 0.342689 -0.371068 -0.23758 0.897699 + -2.13249 1.98755 0.345092 -0.317924 0.147624 0.936553 + -2.0289 1.97432 0.382406 -0.221898 0.126425 0.966839 + -1.95482 1.94101 0.397702 -0.213087 0.0210479 0.976806 + -1.92943 1.95493 0.405201 -0.24607 0.181724 0.952064 + -1.83084 1.95588 0.403753 0.275392 0.424646 0.862459 + -1.85901 1.84842 0.398071 0.0344284 -0.398228 0.91664 + -1.84269 1.91125 0.420061 0.107803 -0.0448686 0.993159 + -1.77658 1.91316 0.387345 0.631121 -0.0633982 0.773089 + -1.72682 1.93728 0.344364 0.776531 0.065288 0.626688 + 0.265668 1.59394 -3.44147 -0.667019 0.166743 -0.726142 + 0.284447 1.53902 -3.46994 -0.563875 0.0938647 -0.820508 + 0.26512 1.48501 -3.45027 -0.794046 -0.0651636 -0.604355 + 0.252745 1.5134 -3.43101 -0.970392 -0.0302874 -0.239628 + 0.304657 1.58899 -3.46638 -0.221908 0.303297 -0.926697 + 0.314833 1.51845 -3.48435 -0.220254 0.0978511 -0.970522 + 0.293155 1.47025 -3.46951 -0.519442 -0.0479388 -0.85316 + 0.346372 1.58946 -3.46489 0.107909 0.325204 -0.939467 + 0.356547 1.51892 -3.48286 0.107521 0.208874 -0.972014 + 0.356556 1.43658 -3.49537 -0.064939 0.0445557 -0.996894 + 0.323541 1.44968 -3.48392 -0.390399 -0.0312012 -0.920117 + 0.373982 1.66906 -3.42415 0.264824 0.45265 -0.851456 + 0.387188 1.59292 -3.45548 0.297383 0.343534 -0.890813 + 0.392478 1.51526 -3.47722 0.283267 0.214176 -0.93482 + 0.36635 1.72855 -3.39056 0.291239 0.554463 -0.779584 + 0.413459 1.67197 -3.40473 0.501149 0.410395 -0.761856 + 0.421977 1.58169 -3.44311 0.534741 0.319278 -0.782377 + 0.427267 1.50404 -3.46484 0.518054 0.172092 -0.837857 + 0.392487 1.43292 -3.48973 0.328875 0.0593423 -0.942507 + 0.342152 1.73389 -3.39425 0.0705888 0.584627 -0.808226 + 0.369377 1.76876 -3.3558 0.299537 0.925098 -0.233389 + 0.393999 1.76282 -3.34131 0.171309 0.970884 -0.167442 + 0.405828 1.73146 -3.37114 0.367337 0.605201 -0.706255 + 0.319147 1.76774 -3.36248 -0.363273 0.88824 -0.281182 + 0.345179 1.7741 -3.35949 0.0515844 0.981405 -0.184885 + 0.337551 1.76806 -3.34796 -0.201914 0.661603 0.722158 + 0.363175 1.76019 -3.33739 -0.215014 0.620562 0.754103 + 0.337265 1.70187 -3.33755 -0.347902 0.210406 0.913615 + 0.387798 1.75425 -3.32289 -0.319804 0.552437 0.769765 + 0.418806 1.75845 -3.31183 -0.164774 0.642272 0.748557 + 0.419446 1.76383 -3.32485 0.134831 0.987542 -0.0811213 + 0.431275 1.73247 -3.35469 0.486535 0.577384 -0.655677 + 0.332826 1.64955 -3.32398 -0.425334 0.293407 0.856156 + 0.397704 1.70673 -3.31366 -0.351565 0.176201 0.919432 + 0.428712 1.71092 -3.3026 -0.311634 0.164589 0.935839 + 0.452985 1.74807 -3.30283 0.393021 0.548492 0.738032 + 0.453626 1.75346 -3.31585 0.603686 0.793128 -0.0806897 + 0.298838 1.64784 -3.34424 -0.609866 0.173755 0.773222 + 0.346895 1.59923 -3.29364 -0.383659 0.251729 0.888503 + 0.377439 1.60125 -3.28521 -0.306163 0.253198 0.91769 + 0.393265 1.6544 -3.30009 -0.326688 0.302077 0.895558 + 0.437086 1.67696 -3.29285 -0.316021 0.238812 0.918205 + 0.312908 1.59752 -3.31389 -0.642238 0.142921 0.753063 + 0.352689 1.52951 -3.28365 -0.419835 0.000676443 0.9076 + 0.383233 1.53154 -3.27522 -0.225939 -0.0242077 0.973841 + 0.407894 1.59371 -3.27293 -0.236023 0.191441 0.952703 + 0.423719 1.64686 -3.28781 -0.264426 0.294095 0.91847 + 0.316661 1.5396 -3.31073 -0.707172 -0.0350756 0.706171 + 0.362191 1.44278 -3.28154 -0.298055 -0.0522237 0.953119 + 0.398662 1.44285 -3.2826 -0.069011 -0.0751676 0.99478 + 0.423191 1.45776 -3.27781 0.289214 -0.189953 0.938229 + 0.407762 1.54644 -3.27043 -0.177209 -0.0131404 0.984086 + 0.326163 1.45287 -3.30861 -0.719861 -0.0786141 0.689652 + 0.333676 1.38795 -3.30941 -0.705045 -0.130222 0.697103 + 0.367138 1.38005 -3.28699 -0.276767 -0.156631 0.948086 + 0.403609 1.38012 -3.28805 0.349415 -0.208838 0.913398 + 0.289828 1.47013 -3.35786 -0.834231 -0.104086 0.541502 + 0.29734 1.40521 -3.35865 -0.844975 -0.130331 0.518681 + 0.303945 1.36472 -3.36017 -0.845094 -0.0826799 0.528186 + 0.333694 1.3502 -3.31774 -0.718814 -0.0813498 0.690426 + 0.367156 1.34229 -3.29532 -0.275882 -0.129906 0.952373 + 0.254886 1.56206 -3.39721 -0.930224 -0.05773 0.362424 + 0.268812 1.46739 -3.39265 -0.892278 -0.125632 0.433656 + 0.275158 1.41654 -3.39595 -0.901246 -0.144495 0.408505 + 0.256625 1.47467 -3.42362 -0.991866 -0.126913 0.00975066 + 0.26297 1.42381 -3.42693 -0.988636 -0.141041 0.052024 + 0.271304 1.38229 -3.42404 -0.987434 -0.136579 0.0794979 + 0.281762 1.37604 -3.39747 -0.904888 -0.0941318 0.41511 + 0.267812 1.42086 -3.44995 -0.841517 -0.112645 -0.528355 + 0.276146 1.37933 -3.44706 -0.878157 -0.125465 -0.461627 + 0.281624 1.29572 -3.43696 -0.912371 -0.112645 -0.393562 + 0.278449 1.29525 -3.41344 -0.991527 -0.0594747 0.115489 + 0.288907 1.28901 -3.38686 -0.895488 -0.00221955 0.44508 + 0.295847 1.40611 -3.46918 -0.546644 -0.06583 -0.834773 + 0.290122 1.36875 -3.46237 -0.644234 -0.0933342 -0.759112 + 0.295601 1.28513 -3.45226 -0.645878 -0.131112 -0.752098 + 0.323849 1.39324 -3.48339 -0.4014 -0.0628578 -0.913743 + 0.318124 1.35588 -3.47658 -0.413183 -0.123718 -0.902205 + 0.320655 1.28102 -3.46597 -0.406774 -0.140159 -0.902713 + 0.305931 1.16446 -3.44053 -0.660656 -0.161543 -0.733102 + 0.356864 1.38014 -3.49484 -0.126362 -0.104413 -0.986474 + 0.355104 1.34286 -3.48744 -0.124435 -0.162046 -0.978906 + 0.357635 1.26799 -3.47682 -0.100965 -0.154143 -0.982876 + 0.364915 1.16385 -3.46031 -0.0166002 -0.170351 -0.985244 + 0.330986 1.16034 -3.45424 -0.328372 -0.167938 -0.929499 + 0.390251 1.37789 -3.49104 0.323731 -0.107509 -0.940021 + 0.388491 1.34061 -3.48364 0.322521 -0.169001 -0.931353 + 0.388798 1.26766 -3.47239 0.336895 -0.133383 -0.932046 + 0.424454 1.38712 -3.47086 0.637503 -0.106994 -0.762982 + 0.41784 1.34853 -3.46632 0.644539 -0.161419 -0.747338 + 0.418147 1.27557 -3.45507 0.674683 -0.102163 -0.731003 + 0.420471 1.16378 -3.43851 0.69635 -0.123519 -0.706994 + 0.396078 1.16351 -3.45588 0.369856 -0.156008 -0.915897 + 0.42669 1.44214 -3.46954 0.57362 0.0147284 -0.818989 + 0.450724 1.40273 -3.44467 0.809558 -0.13664 -0.570917 + 0.44411 1.36414 -3.44013 0.819897 -0.167748 -0.547384 + 0.437236 1.28207 -3.43037 0.847101 -0.10886 -0.520163 + 0.451868 1.50135 -3.44542 0.75674 0.145404 -0.63734 + 0.451292 1.43946 -3.45012 0.746997 -0.0444644 -0.663338 + 0.473075 1.42713 -3.40846 0.977177 -0.124535 -0.172094 + 0.463289 1.38508 -3.40906 0.967762 -0.176429 -0.179751 + 0.456415 1.303 -3.3993 0.982106 -0.107288 -0.154783 + 0.452003 1.56124 -3.42383 0.773725 0.237624 -0.587269 + 0.473642 1.46386 -3.41391 0.960039 0.0136139 -0.279535 + 0.473777 1.52375 -3.39233 0.955927 0.0753839 -0.283763 + 0.468309 1.42442 -3.36681 0.957288 -0.169204 0.234457 + 0.443485 1.65151 -3.38545 0.708183 0.304848 -0.636824 + 0.467549 1.61552 -3.37163 0.90485 0.194828 -0.378534 + 0.443239 1.71002 -3.36003 0.648642 0.379142 -0.659935 + 0.467302 1.67403 -3.34621 0.90668 0.181422 -0.380812 + 0.471733 1.65052 -3.32651 0.999425 0.0229898 0.024907 + 0.47438 1.60094 -3.34175 0.998348 0.0525115 0.0233387 + 0.46559 1.73101 -3.32119 0.900692 0.383895 -0.203416 + 0.470021 1.70751 -3.30149 0.930142 0.184118 0.317704 + 0.460963 1.61601 -3.28124 0.860879 -0.0208798 0.508381 + 0.463609 1.56642 -3.29648 0.915187 -0.0595862 0.398601 + 0.480608 1.50917 -3.36245 0.992185 -0.121239 -0.0295068 + 0.461359 1.71412 -3.29308 0.361682 0.314186 0.877766 + 0.452301 1.62262 -3.27282 0.280367 0.15948 0.946552 + 0.438802 1.54524 -3.26529 0.335463 -0.0716281 0.939326 + 0.454815 1.52576 -3.28556 0.818003 -0.145224 0.55658 + 0.471814 1.4685 -3.35154 0.966979 -0.154681 0.202545 + 0.438935 1.59252 -3.26779 0.0108353 0.129298 0.991547 + 0.439204 1.43827 -3.29809 0.751344 -0.257961 0.607403 + 0.435699 1.3942 -3.31337 0.788243 -0.238693 0.567185 + 0.43054 1.35643 -3.32155 0.782094 -0.155106 0.603549 + 0.458523 1.38237 -3.36741 0.946408 -0.164189 0.278126 + 0.450909 1.30012 -3.36699 0.942797 -0.0712561 0.325664 + 0.398451 1.34236 -3.29623 0.354706 -0.16248 0.920752 + 0.397157 1.26612 -3.30336 0.329467 -0.0687138 0.941663 + 0.422927 1.27418 -3.32113 0.735323 -0.0603398 0.675025 + 0.365862 1.26606 -3.30244 -0.204552 -0.0618665 0.976899 + 0.367918 1.14997 -3.30638 -0.119159 -0.00973971 0.992827 + 0.395067 1.15279 -3.31141 0.388679 -0.030788 0.920859 + 0.420837 1.16085 -3.32918 0.681105 -0.0179885 0.731965 + 0.33703 1.26882 -3.31568 -0.632024 -0.0120533 0.774855 + 0.339085 1.15273 -3.31962 -0.469592 0.00475506 0.882871 + 0.344819 1.04559 -3.31039 -0.377088 0.0431288 0.925173 + 0.367929 1.04705 -3.30553 -0.0184225 0.0426845 0.998919 + 0.395078 1.04987 -3.31056 0.340251 0.0451459 0.93925 + 0.307281 1.28333 -3.3581 -0.828768 0.0211548 0.559192 + 0.311948 1.15213 -3.33605 -0.710893 0.0245632 0.702872 + 0.317682 1.04499 -3.32682 -0.682288 0.014202 0.730945 + 0.293574 1.15781 -3.36481 -0.925671 0.00561856 0.378289 + 0.303511 1.04582 -3.34643 -0.916007 -0.047497 0.39834 + 0.329822 0.954448 -3.31498 -0.676156 -0.00282454 0.736753 + 0.348894 0.95487 -3.30343 -0.371924 0.0454988 0.927148 + 0.372004 0.956326 -3.29858 -0.0154366 0.0687572 0.997514 + 0.287422 1.16036 -3.39442 -0.997203 -0.065219 0.0364992 + 0.297359 1.04837 -3.37604 -0.992668 -0.120871 0.000150586 + 0.311327 0.95707 -3.3554 -0.987401 -0.158198 0.00336663 + 0.31565 0.955279 -3.33459 -0.915218 -0.0813393 0.394663 + 0.290597 1.16082 -3.41794 -0.921012 -0.134551 -0.365558 + 0.301268 1.051 -3.39826 -0.90197 -0.188114 -0.388668 + 0.315236 0.959704 -3.37762 -0.890033 -0.23234 -0.39225 + 0.328431 0.873081 -3.3548 -0.886415 -0.254119 -0.386901 + 0.325983 0.871432 -3.34088 -0.981615 -0.190785 -0.00569755 + 0.316602 1.05464 -3.42085 -0.638082 -0.236829 -0.732641 + 0.326013 0.962261 -3.3935 -0.63212 -0.281234 -0.722033 + 0.339208 0.875641 -3.37068 -0.62173 -0.300516 -0.723285 + 0.337573 1.05768 -3.43306 -0.308942 -0.251902 -0.917115 + 0.346984 0.965303 -3.4057 -0.295352 -0.300099 -0.907032 + 0.352342 0.877546 -3.37832 -0.298787 -0.310867 -0.902268 + 0.351308 0.793622 -3.34521 -0.585632 -0.423575 -0.6911 + 0.371502 1.06119 -3.43913 0.0309075 -0.247693 -0.968346 + 0.37083 0.967765 -3.40997 0.0277507 -0.296955 -0.954488 + 0.376188 0.880008 -3.38259 0.0347298 -0.304417 -0.951905 + 0.376782 0.796802 -3.35506 0.035141 -0.412539 -0.910262 + 0.364442 0.795528 -3.35285 -0.263673 -0.424739 -0.866068 + 0.39633 1.06279 -3.43432 0.387835 -0.228971 -0.892836 + 0.395658 0.969371 -3.40516 0.391539 -0.274302 -0.878326 + 0.391738 0.881014 -3.37958 0.38545 -0.279704 -0.879314 + 0.392332 0.79781 -3.35205 0.384028 -0.387575 -0.838039 + 0.382539 0.754393 -3.32904 0.181054 -0.791563 -0.58365 + 0.420724 1.06306 -3.41696 0.734404 -0.181368 -0.654031 + 0.412802 0.969561 -3.39296 0.723538 -0.225647 -0.652362 + 0.408883 0.881203 -3.36738 0.727975 -0.226399 -0.647144 + 0.401204 0.797906 -3.34574 0.695371 -0.345796 -0.629988 + 0.432571 1.06185 -3.3955 0.940653 -0.13046 -0.313293 + 0.424649 0.968343 -3.3715 0.941315 -0.152493 -0.301117 + 0.416303 0.880442 -3.35394 0.938142 -0.159108 -0.30753 + 0.408624 0.797144 -3.3323 0.912442 -0.283093 -0.295479 + 0.391411 0.754491 -3.32273 0.561809 -0.759451 -0.328031 + 0.439561 1.17028 -3.41382 0.930157 -0.0724923 -0.359933 + 0.436006 1.05872 -3.36246 0.995432 -0.0690331 0.0659534 + 0.427063 0.966141 -3.34828 0.994488 -0.0852665 0.0610133 + 0.418717 0.87824 -3.33072 0.993833 -0.0883535 0.0669986 + 0.409874 0.796004 -3.32028 0.971425 -0.23337 0.0432731 + 0.442996 1.16715 -3.38078 0.997977 -0.0625481 0.011358 + 0.430379 1.05593 -3.34019 0.892014 -0.0178645 0.451655 + 0.421436 0.963358 -3.32601 0.88581 -0.0133015 0.463858 + 0.415192 0.876496 -3.31677 0.889175 -0.0271198 0.456762 + 0.43749 1.16426 -3.34847 0.902508 -0.0270727 0.429822 + 0.413725 1.05252 -3.32091 0.627153 0.0315384 0.778257 + 0.409732 0.960962 -3.31246 0.627747 0.0405266 0.777361 + 0.403488 0.8741 -3.30322 0.625487 0.0261601 0.779796 + 0.406349 0.794262 -3.30633 0.87843 -0.178117 0.443436 + 0.391084 0.958309 -3.30211 0.327523 0.0676271 0.94242 + 0.391809 0.872439 -3.29673 0.334886 0.0463619 0.941117 + 0.400293 0.793021 -3.29932 0.642422 -0.139952 0.753464 + 0.392661 0.753352 -3.31071 0.647935 -0.74603 0.153683 + 0.372728 0.870455 -3.2932 -0.019793 0.0439646 0.998837 + 0.388614 0.791359 -3.29284 0.343248 -0.117086 0.931918 + 0.386604 0.752111 -3.3037 0.377316 -0.761029 0.5277 + 0.3702 0.753119 -3.32683 -0.235483 -0.821502 -0.519309 + 0.358254 0.869543 -3.29624 -0.36548 0.0180216 0.930645 + 0.378739 0.790332 -3.29101 0.00538248 -0.12188 0.99253 + 0.37673 0.751086 -3.30187 -0.0604947 -0.782837 0.61928 + 0.339181 0.869123 -3.3078 -0.681102 -0.036879 0.731259 + 0.354396 0.789204 -3.30003 -0.659567 -0.201385 0.724165 + 0.364265 0.78942 -3.29405 -0.36391 -0.150492 0.919196 + 0.36686 0.750868 -3.30785 -0.464317 -0.814603 0.347609 + 0.330306 0.869642 -3.32007 -0.910449 -0.11033 0.398635 + 0.34552 0.789724 -3.31231 -0.886416 -0.281632 0.367356 + 0.343283 0.79065 -3.32308 -0.938966 -0.343858 -0.010273 + 0.364623 0.751795 -3.31862 -0.525326 -0.836273 -0.157102 + 0.345731 0.792301 -3.33699 -0.829666 -0.399699 -0.389737 + -0.47438 1.60094 -3.34175 -0.998548 0.0478403 0.0247741 + -0.471733 1.65052 -3.32651 -0.998958 0.0267621 0.0369747 + -0.470021 1.70751 -3.30149 -0.930142 0.184117 0.317705 + -0.460963 1.61601 -3.28124 -0.840998 -0.0602027 0.537679 + -0.452301 1.62262 -3.27282 -0.285647 0.127585 0.949804 + -0.450724 1.40273 -3.44467 -0.822092 -0.154132 -0.548096 + -0.44411 1.36414 -3.44013 -0.822268 -0.162143 -0.545514 + -0.463289 1.38508 -3.40906 -0.967857 -0.173152 -0.182406 + -0.424454 1.38712 -3.47086 -0.63199 -0.11611 -0.766229 + -0.41784 1.34853 -3.46632 -0.637304 -0.152999 -0.755271 + -0.418147 1.27557 -3.45507 -0.67149 -0.107858 -0.733122 + -0.437236 1.28207 -3.43037 -0.836829 -0.094783 -0.539196 + -0.456415 1.303 -3.3993 -0.983046 -0.0984923 -0.154663 + -0.390251 1.37789 -3.49104 -0.320413 -0.102923 -0.94167 + -0.388491 1.34061 -3.48364 -0.325017 -0.165811 -0.931059 + -0.388798 1.26766 -3.47239 -0.335987 -0.132759 -0.932463 + -0.355104 1.34286 -3.48744 0.122498 -0.165151 -0.978631 + -0.357635 1.26799 -3.47682 0.0907829 -0.143128 -0.985532 + -0.396078 1.16351 -3.45588 -0.368948 -0.157235 -0.916054 + -0.420471 1.16378 -3.43851 -0.694889 -0.121614 -0.708759 + -0.439561 1.17028 -3.41382 -0.920821 -0.0992477 -0.377145 + -0.320655 1.28102 -3.46597 0.410875 -0.133275 -0.901898 + -0.330986 1.16034 -3.45424 0.334008 -0.177682 -0.925671 + -0.364915 1.16385 -3.46031 0.00839878 -0.178721 -0.983864 + -0.371502 1.06119 -3.43913 -0.0279949 -0.251818 -0.96737 + -0.39633 1.06279 -3.43432 -0.390612 -0.232627 -0.890678 + -0.305931 1.16446 -3.44053 0.663043 -0.157854 -0.731749 + -0.316602 1.05464 -3.42085 0.638639 -0.238218 -0.731705 + -0.337573 1.05768 -3.43306 0.307337 -0.253666 -0.917168 + -0.301268 1.051 -3.39826 0.900542 -0.191215 -0.390462 + -0.315236 0.959704 -3.37762 0.890032 -0.232343 -0.392249 + -0.326013 0.962261 -3.3935 0.632114 -0.281237 -0.722037 + -0.346984 0.965303 -3.4057 0.295358 -0.30009 -0.907034 + -0.297359 1.04837 -3.37604 0.992453 -0.122614 0.00156549 + -0.311327 0.95707 -3.3554 0.987401 -0.158204 0.00336517 + -0.325983 0.871432 -3.34088 0.981615 -0.190784 -0.00569855 + -0.328431 0.873081 -3.3548 0.886413 -0.254123 -0.386902 + -0.339208 0.875641 -3.37068 0.621727 -0.300518 -0.723287 + -0.31565 0.955279 -3.33459 0.91522 -0.0813439 0.394659 + -0.330306 0.869642 -3.32007 0.910452 -0.110335 0.398628 + -0.34552 0.789724 -3.31231 0.886415 -0.281638 0.367354 + -0.343283 0.79065 -3.32308 0.938965 -0.34386 -0.0102755 + -0.345731 0.792301 -3.33699 0.829667 -0.399694 -0.38974 + -0.329822 0.954448 -3.31498 0.676153 -0.0028278 0.736756 + -0.339181 0.869123 -3.3078 0.681096 -0.0368787 0.731265 + -0.354396 0.789204 -3.30003 0.659564 -0.201387 0.724167 + -0.36686 0.750868 -3.30785 0.464297 -0.814623 0.347587 + -0.364623 0.751795 -3.31862 0.525295 -0.836294 -0.15709 + -0.358254 0.869543 -3.29624 0.365474 0.0180213 0.930647 + -0.364265 0.78942 -3.29405 0.363908 -0.150485 0.919198 + -0.37673 0.751086 -3.30187 0.0604816 -0.782851 0.619263 + -0.3702 0.753119 -3.32683 0.23548 -0.821508 -0.519301 + -0.351308 0.793622 -3.34521 0.585636 -0.423567 -0.691101 + -0.372728 0.870455 -3.2932 0.0198033 0.0439575 0.998837 + -0.378739 0.790332 -3.29101 -0.00537795 -0.121875 0.992531 + -0.386604 0.752111 -3.3037 -0.377289 -0.761048 0.527693 + -0.391411 0.754491 -3.32273 -0.561795 -0.759461 -0.328034 + -0.372004 0.956326 -3.29858 0.0154422 0.0687606 0.997514 + -0.391809 0.872439 -3.29673 -0.334895 0.0463577 0.941115 + -0.388614 0.791359 -3.29284 -0.343249 -0.117084 0.931918 + -0.400293 0.793021 -3.29932 -0.642421 -0.139949 0.753465 + -0.392661 0.753352 -3.31071 -0.647973 -0.745994 0.153699 + -0.391084 0.958309 -3.30211 -0.327529 0.0676302 0.942418 + -0.403488 0.8741 -3.30322 -0.625483 0.0261647 0.779799 + -0.406349 0.794262 -3.30633 -0.87843 -0.178117 0.443436 + -0.409874 0.796004 -3.32028 -0.971425 -0.23337 0.0432729 + -0.413725 1.05252 -3.32091 -0.63141 0.0243428 0.775067 + -0.409732 0.960962 -3.31246 -0.627746 0.0405256 0.777363 + -0.415192 0.876496 -3.31677 -0.889174 -0.027121 0.456764 + -0.418717 0.87824 -3.33072 -0.993833 -0.0883571 0.066996 + -0.408624 0.797144 -3.3323 -0.912442 -0.283092 -0.29548 + -0.420837 1.16085 -3.32918 -0.675561 -0.0286615 0.736747 + -0.430379 1.05593 -3.34019 -0.890612 -0.0217687 0.454244 + -0.421436 0.963358 -3.32601 -0.885809 -0.0132984 0.46386 + -0.427063 0.966141 -3.34828 -0.994488 -0.0852656 0.0610127 + -0.416303 0.880442 -3.35394 -0.938142 -0.159109 -0.30753 + -0.43749 1.16426 -3.34847 -0.906926 -0.0422804 0.419162 + -0.436006 1.05872 -3.36246 -0.995242 -0.0756892 0.0613517 + -0.424649 0.968343 -3.3715 -0.941315 -0.152494 -0.301117 + -0.408883 0.881203 -3.36738 -0.727975 -0.226398 -0.647145 + -0.401204 0.797906 -3.34574 -0.695371 -0.345795 -0.629987 + -0.442996 1.16715 -3.38078 -0.996657 -0.0780272 0.0242265 + -0.432571 1.06185 -3.3955 -0.9415 -0.136262 -0.308238 + -0.420724 1.06306 -3.41696 -0.728733 -0.19097 -0.657631 + -0.412802 0.969561 -3.39296 -0.723536 -0.22565 -0.652363 + -0.395658 0.969371 -3.40516 -0.391539 -0.274303 -0.878325 + -0.391738 0.881014 -3.37958 -0.385449 -0.279706 -0.879314 + -0.392332 0.79781 -3.35205 -0.384025 -0.387571 -0.838041 + -0.382539 0.754393 -3.32904 -0.181055 -0.791577 -0.583631 + -0.37083 0.967765 -3.40997 -0.0277503 -0.296946 -0.954491 + -0.376188 0.880008 -3.38259 -0.0347356 -0.304427 -0.951902 + -0.376782 0.796802 -3.35506 -0.0351403 -0.412532 -0.910265 + -0.364442 0.795528 -3.35285 0.263674 -0.424733 -0.86607 + -0.352342 0.877546 -3.37832 0.298794 -0.310871 -0.902265 + 1.05998 1.28532 -1.98015 -0.500479 0.759671 0.415235 + 1.06342 1.2998 -2.01482 -0.517699 0.831014 0.203478 + 1.03233 1.27353 -2.02089 -0.633506 0.767002 0.101876 + 1.0713 1.23734 -1.91791 -0.0643823 0.603396 0.794839 + 1.08209 1.28719 -1.9671 -0.214468 0.799704 0.560782 + 1.09271 1.31195 -2.01471 -0.13582 0.96152 0.238813 + 1.06884 1.30877 -2.05737 -0.537622 0.838544 0.088352 + 1.0919 1.23816 -1.92563 0.420318 0.490951 0.763086 + 1.09677 1.28702 -1.96546 0.298827 0.738398 0.604542 + 1.10739 1.31177 -2.01308 0.352868 0.901107 0.251974 + 1.12879 1.30312 -2.07197 0.626266 0.763814 0.156139 + 1.09813 1.32091 -2.05726 0.111312 0.977553 0.178884 + 1.12 1.21675 -1.93469 0.599104 0.437506 0.670569 + 1.12487 1.26561 -1.97452 0.690203 0.521998 0.501135 + 1.13795 1.28203 -2.02425 0.75444 0.588814 0.290031 + 1.1713 1.20323 -1.99566 0.833927 0.388517 0.391945 + 1.18439 1.21965 -2.04539 0.870532 0.398339 0.288964 + 1.18982 1.23474 -2.09363 0.871282 0.439525 0.218367 + 1.15935 1.27338 -2.08314 0.762269 0.6116 0.211874 + 1.19506 1.154 -2.01062 0.920235 0.20978 0.330394 + 1.2081 1.16085 -2.06177 0.955203 0.204545 0.21389 + 1.21353 1.17594 -2.11001 0.970073 0.197506 0.141242 + 1.21609 1.18911 -2.15515 0.976443 0.180113 0.118824 + 1.19843 1.24064 -2.13741 0.885469 0.425197 0.187491 + 1.20655 1.08999 -2.02667 0.937487 -0.0336583 0.346388 + 1.21959 1.09684 -2.07782 0.988019 0.0576245 0.14317 + 1.22 1.10578 -2.12788 0.996792 0.0579571 0.0552058 + 1.22256 1.11894 -2.17302 0.998966 0.0334086 0.0308387 + 1.18376 1.04641 -1.99763 0.722806 -0.372566 0.582019 + 1.20943 1.0394 -2.05198 0.908588 -0.233349 0.346433 + 1.22159 1.03917 -2.09959 0.983991 -0.117904 0.133641 + 1.222 1.04811 -2.14965 0.999124 -0.0418097 0.00180435 + 1.18223 0.997715 -2.03899 0.729089 -0.380592 0.56884 + 1.20455 0.99636 -2.08217 0.900865 -0.276688 0.334495 + 1.21671 0.996135 -2.12977 0.977165 -0.187159 0.100602 + 1.14002 0.999492 -2.00372 0.425208 -0.488246 0.762112 + 1.14063 0.93424 -2.03183 0.470183 -0.250193 0.846364 + 1.17278 0.933552 -2.05711 0.754682 -0.220611 0.617889 + 1.19509 0.932198 -2.10029 0.923103 -0.217563 0.317091 + 1.08136 0.999866 -1.98372 0.0634823 -0.564175 0.823211 + 1.08197 0.934614 -2.01182 0.0409518 -0.313055 0.948852 + 1.09487 0.851658 -2.03071 0.0281718 -0.123912 0.991893 + 1.12967 0.851577 -2.03907 0.426521 -0.090523 0.899936 + 1.16182 0.850889 -2.06436 0.784998 -0.118003 0.608156 + 1.03277 1.04274 -1.95099 -0.33406 -0.624074 0.706354 + 1.03478 0.996049 -1.99593 -0.512928 -0.514025 0.687519 + 1.04575 0.934113 -2.02012 -0.533249 -0.314454 0.785344 + 0.99361 1.0303 -2.00338 -0.592228 -0.645924 0.481715 + 1.0085 0.994477 -2.03599 -0.718557 -0.48874 0.494781 + 1.01947 0.932542 -2.06017 -0.809346 -0.243989 0.534254 + 1.03355 0.850267 -2.06046 -0.757823 -0.144672 0.636219 + 1.05866 0.851156 -2.039 -0.441995 -0.170734 0.880619 + 0.965412 1.07295 -1.98369 -0.613215 -0.625939 0.481837 + 0.933796 1.08842 -2.01277 -0.716398 -0.644078 0.268213 + 0.941223 1.0742 -2.03529 -0.766172 -0.600485 0.228906 + 0.963119 1.03383 -2.04639 -0.737233 -0.550657 0.391489 + 0.881459 1.1607 -1.98568 -0.818843 -0.322511 0.47485 + 0.878107 1.14727 -2.04762 -0.86756 -0.488698 0.0922717 + 0.885534 1.13305 -2.07014 -0.824237 -0.565784 0.0228514 + 0.911168 1.10379 -2.07578 -0.810394 -0.580309 0.0806388 + 0.933064 1.06342 -2.08687 -0.864379 -0.449233 0.225916 + 0.866728 1.19559 -2.00045 -0.965484 -0.0195621 0.259728 + 0.863375 1.18217 -2.06239 -0.991553 -0.127445 0.0240845 + 0.860076 1.20167 -2.10609 -0.973416 0.0488518 0.223772 + 0.855496 1.19582 -2.12385 -0.981997 -0.165933 0.090262 + 0.869982 1.15731 -2.1148 -0.873213 -0.484643 -0.051195 + 0.874871 1.22801 -2.07185 -0.94291 0.313074 0.113599 + 0.871571 1.24751 -2.11555 -0.81898 0.455663 0.348774 + 0.85353 1.2736 -2.17525 -0.857345 0.418926 0.299099 + 0.84895 1.26775 -2.19301 -0.98093 0.134181 -0.140613 + 0.88557 1.27604 -2.1347 -0.380004 0.772985 0.508026 + 0.867528 1.30213 -2.1944 -0.653736 0.737199 0.170783 + 0.877653 1.31105 -2.22518 -0.54257 0.787879 -0.291314 + 0.862907 1.29195 -2.22695 -0.826247 0.292857 -0.481197 + 0.853252 1.22412 -2.18659 -0.924319 -0.253923 -0.284881 + 0.893679 1.25709 -2.07569 0.0220694 0.998675 0.0464986 + 0.898511 1.25175 -2.09719 0.449089 0.871824 0.195555 + 0.91314 1.26874 -2.12118 0.021591 0.790447 0.61215 + 0.91607 1.31578 -2.18266 -0.17146 0.904902 0.389556 + 0.926195 1.32469 -2.21344 -0.121501 0.992012 0.0339035 + 0.917472 1.25296 -2.06952 0.14029 0.958992 -0.246279 + 0.922304 1.24762 -2.09102 0.146563 0.989199 0.00198903 + 0.926001 1.24885 -2.0985 0.0781883 0.90069 0.42737 + 0.940629 1.26583 -2.12249 0.121554 0.768717 0.627933 + 0.94364 1.30847 -2.16914 0.135608 0.817423 0.559849 + 0.932343 1.24639 -2.08904 0.0239433 0.997775 -0.0622208 + 0.93604 1.24762 -2.09652 0.012227 0.936827 0.349578 + 0.938666 1.24684 -2.08927 -0.0369945 0.996177 -0.0791387 + 0.950931 1.24801 -2.0982 0.0329205 0.94512 0.325061 + 0.952937 1.25444 -2.11069 0.144166 0.841326 0.520947 + 0.975395 1.27283 -2.13765 0.00538565 0.796846 0.604158 + 0.963088 1.28421 -2.14945 0.158221 0.74151 0.65202 + 0.953558 1.24724 -2.09095 -0.0209443 0.998688 -0.0467285 + 0.978095 1.2481 -2.099 -0.0331501 0.962586 0.268941 + 0.980101 1.25453 -2.11149 -0.0531189 0.850111 0.523917 + 0.979279 1.24761 -2.09173 -0.0563735 0.996304 -0.0648139 + 0.994803 1.24965 -2.09998 -0.224654 0.906298 0.357987 + 0.991501 1.26042 -2.1175 -0.270358 0.780272 0.563988 + 0.986795 1.27872 -2.14366 -0.254009 0.772631 0.581825 + 0.98358 1.289 -2.15871 -0.126906 0.760235 0.637133 + 0.995988 1.24916 -2.09271 -0.0851331 0.996341 -0.0075334 + 1.00349 1.2501 -2.09354 -0.434017 0.87176 0.227296 + 1.00125 1.25445 -2.10147 -0.511975 0.684279 0.519272 + 0.997946 1.26522 -2.11898 -0.516598 0.662751 0.542114 + 0.992867 1.28516 -2.14769 -0.517531 0.654433 0.551252 + 1.00656 1.2514 -2.06805 -0.397021 0.917475 -0.0247556 + 1.02759 1.27069 -2.09037 -0.659037 0.69473 0.288132 + 1.02535 1.27504 -2.0983 -0.603356 0.608743 0.515163 + 1.01366 1.28604 -2.12274 -0.622116 0.563451 0.543594 + 1.02814 1.26851 -2.06481 -0.663078 0.74807 0.0268115 + 1.06829 1.31095 -2.08292 -0.552074 0.827128 0.105229 + 1.0671 1.31137 -2.09074 -0.55557 0.745859 0.367472 + 1.02682 1.28381 -2.10704 -0.585811 0.600035 0.544778 + 1.09933 1.3241 -2.08277 0.103469 0.990292 0.092818 + 1.09813 1.32451 -2.09058 0.0774698 0.989796 0.119592 + 1.06857 1.32014 -2.09948 -0.357598 0.793443 0.492516 + 1.0547 1.32472 -2.11767 -0.399745 0.758346 0.514892 + 1.04153 1.32695 -2.13338 -0.438641 0.683399 0.583575 + 1.12999 1.30631 -2.09748 0.402923 0.905217 0.135041 + 1.10025 1.32588 -2.1048 0.21047 0.959276 0.188393 + 1.08638 1.33047 -2.12299 0.081562 0.927425 0.365007 + 1.07524 1.34267 -2.14156 0.0262889 0.851369 0.523909 + 1.13211 1.30768 -2.11169 0.598068 0.748019 0.287719 + 1.13483 1.32016 -2.13533 0.542154 0.780571 0.31109 + 1.12368 1.33237 -2.1539 0.493946 0.820482 0.287796 + 1.10077 1.35398 -2.1694 0.27772 0.95455 0.108191 + 1.06475 1.35282 -2.1585 -0.171872 0.961852 0.21284 + 1.16797 1.27928 -2.12693 0.761453 0.586076 0.276956 + 1.17068 1.29177 -2.15056 0.77724 0.586511 0.227824 + 1.1614 1.30587 -2.17791 0.729902 0.683551 -0.000959145 + 1.20333 1.24534 -2.18178 0.904887 0.423654 0.0411874 + 1.19404 1.25944 -2.20913 0.843087 0.504866 -0.185241 + 1.17222 1.27705 -2.23502 0.701489 0.584242 -0.408135 + 1.13848 1.32748 -2.19342 0.605265 0.780558 -0.156151 + 1.22099 1.1938 -2.19952 0.984256 0.171117 -0.0442632 + 1.21118 1.20584 -2.23352 0.897353 0.248278 -0.364851 + 1.18935 1.22346 -2.2594 0.716623 0.315702 -0.62192 + 1.16151 1.23532 -2.27643 0.445482 0.349786 -0.824133 + 1.15208 1.28048 -2.25538 0.457027 0.584309 -0.670604 + 1.22206 1.14287 -2.21088 0.992774 0.0491199 -0.10949 + 1.21225 1.15491 -2.24488 0.892032 0.106052 -0.439353 + 1.19043 1.15683 -2.27277 0.686954 0.15626 -0.709702 + 1.16259 1.1687 -2.28979 0.479238 0.194392 -0.855887 + 1.22178 1.05825 -2.19106 0.998525 -0.0463214 -0.0283155 + 1.22129 1.08217 -2.22892 0.985702 0.00100377 -0.168497 + 1.21091 1.09261 -2.25966 0.883572 0.077633 -0.461816 + 1.18908 1.09453 -2.28755 0.709144 0.147439 -0.689475 + 1.21672 1.00479 -2.21402 0.981893 -0.179261 -0.0612473 + 1.21572 1.01392 -2.24892 0.972811 -0.11192 -0.202762 + 1.20533 1.02435 -2.27965 0.874005 -0.00766102 -0.485856 + 1.21694 0.994661 -2.17261 0.987063 -0.159318 -0.0180065 + 1.20229 0.929581 -2.1775 0.897026 -0.340019 -0.282367 + 1.18536 0.92208 -2.19428 0.684215 -0.566058 -0.459814 + 1.18263 0.925247 -2.21716 0.800222 -0.577455 0.161837 + 1.19733 0.936526 -2.23764 0.914921 -0.381313 0.132361 + 1.20206 0.931056 -2.13466 0.96795 -0.229049 0.102999 + 1.18161 0.848802 -2.12835 0.9718 -0.232379 -0.0400575 + 1.17411 0.848005 -2.15023 0.831795 -0.331734 -0.445049 + 1.15718 0.840503 -2.16701 0.636737 -0.24471 -0.731221 + 1.17464 0.849946 -2.09397 0.941004 -0.149959 0.303355 + 1.16603 0.768546 -2.09129 0.964699 -0.0548629 0.257579 + 1.16863 0.769838 -2.11595 0.988116 -0.109205 -0.108175 + 1.16113 0.769041 -2.13784 0.881889 -0.134174 -0.451961 + 1.15321 0.769489 -2.06168 0.791262 -0.0205788 0.611131 + 1.15215 0.686861 -2.05711 0.785551 -0.0148813 0.618618 + 1.16406 0.690491 -2.08423 0.964006 -0.00472616 0.265839 + 1.16666 0.691784 -2.10889 0.99467 -0.00626989 -0.102915 + 1.13029 0.768856 -2.04348 0.441823 -0.000572975 0.897102 + 1.12924 0.686226 -2.03891 0.428056 -0.0320119 0.903185 + 1.13621 0.587613 -2.05397 0.432606 -0.165015 0.886353 + 1.15403 0.589054 -2.06807 0.78537 -0.0896097 0.612506 + 1.16595 0.592685 -2.09518 0.965714 -0.0177749 0.258999 + 1.0955 0.768938 -2.03512 0.0102689 -0.00240859 0.999944 + 1.09711 0.686301 -2.0312 0.0065365 -0.0522498 0.998613 + 1.10408 0.587688 -2.04625 -0.0021076 -0.225797 0.974172 + 1.06671 0.769714 -2.04136 -0.441448 -0.018945 0.897087 + 1.06833 0.687077 -2.03744 -0.448153 -0.0774159 0.890598 + 1.08172 0.589274 -2.05105 -0.44449 -0.257877 0.857862 + 1.12386 0.47308 -2.08207 0.00682784 -0.426215 0.904596 + 1.0416 0.768826 -2.06282 -0.764613 -0.039805 0.64326 + 1.04521 0.690924 -2.05702 -0.760811 -0.0866785 0.643159 + 1.05861 0.59312 -2.07063 -0.757637 -0.257227 0.59985 + 1.08718 0.477048 -2.099 -0.716519 -0.446145 0.536242 + 1.1015 0.474666 -2.08687 -0.434988 -0.45779 0.775379 + 1.02846 0.770206 -2.08467 -0.944289 -0.0839063 0.318242 + 1.03207 0.692305 -2.07887 -0.945825 -0.103693 0.307675 + 1.04842 0.596061 -2.08753 -0.931336 -0.235435 0.277819 + 1.077 0.479988 -2.11589 -0.885545 -0.409333 0.219671 + 1.11186 0.421268 -2.1308 -0.520964 -0.842644 0.136188 + 1.01351 0.849065 -2.09167 -0.934 -0.155291 0.32176 + 1.02616 0.76936 -2.10888 -0.992172 -0.121291 -0.0297297 + 1.03002 0.695723 -2.10101 -0.99381 -0.106443 -0.0317969 + 1.04637 0.599478 -2.10967 -0.978798 -0.197055 -0.0558987 + 1.07573 0.482105 -2.12961 -0.929249 -0.360717 -0.0798702 + 0.999435 0.931338 -2.09138 -0.808717 -0.275684 0.519591 + 1.01121 0.848216 -2.11588 -0.963468 -0.266946 0.0216602 + 1.02911 0.770366 -2.12836 -0.940629 -0.146486 -0.306199 + 1.03297 0.696732 -2.12049 -0.945599 -0.11165 -0.305575 + 1.04869 0.601661 -2.12474 -0.934774 -0.158737 -0.317805 + 0.978011 0.997999 -2.079 -0.709799 -0.511257 0.484564 + 0.972961 0.929833 -2.1305 -0.920958 -0.348939 0.173427 + 0.979065 0.922293 -2.15239 -0.848147 -0.495076 -0.188536 + 1.01732 0.840676 -2.13777 -0.901475 -0.317098 -0.294604 + 0.951538 0.996494 -2.11812 -0.860916 -0.408472 0.303272 + 0.978927 0.926189 -2.17924 -0.747799 -0.64023 0.175791 + 1.02388 0.894998 -2.16015 -0.401774 -0.577137 -0.710979 + 1.02568 0.840159 -2.15425 -0.599736 -0.22659 -0.767446 + 1.03748 0.769849 -2.14484 -0.695031 -0.167143 -0.699282 + 0.917717 1.07644 -2.13672 -0.924901 -0.373323 0.0720254 + 0.936191 1.00951 -2.16796 -0.938098 -0.339544 0.0684168 + 0.963497 0.938828 -2.19881 -0.879676 -0.463391 0.106956 + 0.895616 1.12806 -2.12044 -0.850682 -0.522942 -0.0535753 + 0.914917 1.08625 -2.20238 -0.939312 -0.26993 -0.211734 + 0.934132 1.02369 -2.22206 -0.948817 -0.241037 -0.204075 + 0.961437 0.953005 -2.25291 -0.931587 -0.308391 -0.192461 + 0.867738 1.18561 -2.17754 -0.865158 -0.410179 -0.288539 + 0.892817 1.13787 -2.1861 -0.898418 -0.36582 -0.242943 + 0.912048 1.16244 -2.2362 -0.741425 -0.199704 -0.640631 + 0.931123 1.09699 -2.24512 -0.793727 -0.121234 -0.59607 + 0.886969 1.21019 -2.22764 -0.697033 -0.253338 -0.670794 + 0.931082 1.25449 -2.2667 -0.496383 -0.0603342 -0.866004 + 0.949901 1.17835 -2.26912 -0.549463 -0.0739628 -0.832238 + 0.968976 1.1129 -2.27805 -0.502827 -0.04349 -0.863292 + 0.867208 1.24832 -2.22053 -0.739263 -0.192247 -0.645393 + 0.911322 1.29262 -2.25959 -0.458741 0.154976 -0.874951 + 0.95385 1.31284 -2.26747 -0.175347 0.690413 -0.701843 + 0.96008 1.28314 -2.28307 -0.261777 0.222177 -0.939207 + 0.978899 1.20701 -2.2855 -0.239876 0.0117626 -0.970732 + 0.926069 1.31171 -2.25781 -0.30531 0.70978 -0.634821 + 0.953976 1.32582 -2.2231 0.0342874 0.996947 -0.0701552 + 0.988777 1.31557 -2.2638 0.260973 0.793595 -0.549637 + 0.995008 1.28587 -2.2794 0.155317 0.385048 -0.909733 + 0.960743 1.32387 -2.20375 0.234705 0.934046 0.269205 + 0.995544 1.31361 -2.24446 0.0722315 0.958511 0.275753 + 1.01332 1.3184 -2.2382 -0.41811 0.862893 -0.283899 + 1.03281 1.27082 -2.2821 0.0358828 0.357108 -0.933374 + 0.980918 1.30501 -2.19008 0.402933 0.839999 0.363383 + 1.00405 1.30768 -2.23924 -0.281354 0.823435 0.492743 + 0.963815 1.28962 -2.15547 0.192433 0.761993 0.618333 + 0.984307 1.29441 -2.16473 -0.11699 0.889984 0.440729 + 0.989425 1.29907 -2.18486 0.103819 0.970214 0.218876 + 0.994769 1.30012 -2.18287 -0.530824 0.846309 0.0445665 + 1.00404 1.31084 -2.18183 -0.762132 0.645132 0.0543976 + 0.989652 1.29545 -2.16274 -0.485407 0.791507 0.371345 + 1.00858 1.30598 -2.15145 -0.702517 0.597802 0.386137 + 1.03105 1.3371 -2.15031 -0.520343 0.761098 0.387264 + 1.02651 1.34196 -2.1807 -0.463705 0.885612 0.0258765 + 1.05061 1.34378 -2.1937 -0.156115 0.946896 -0.281098 + 1.03742 1.32022 -2.25119 -0.0504328 0.766035 -0.640818 + 1.08663 1.34494 -2.2046 0.0211869 0.883564 -0.46783 + 1.07665 1.30058 -2.25546 0.135038 0.654696 -0.743732 + 1.07203 1.25118 -2.28636 0.0414754 0.317842 -0.947236 + 1.0167 1.19196 -2.28819 -0.0603842 0.114855 -0.991545 + 1.11835 1.3309 -2.21378 0.341041 0.797469 -0.497729 + 1.10837 1.28654 -2.26464 0.105259 0.564383 -0.818775 + 1.1178 1.24139 -2.28569 0.144738 0.343141 -0.928065 + 1.09284 1.20037 -2.29555 -0.0275252 0.162899 -0.986259 + 1.13861 1.19058 -2.29487 0.21427 0.212422 -0.953396 + 1.14382 1.12486 -2.30849 0.180341 0.202571 -0.962519 + 1.09754 1.1286 -2.30501 -0.0863768 0.163649 -0.98273 + 1.0214 1.12019 -2.29765 -0.234945 0.0613805 -0.970069 + 1.1678 1.10298 -2.30341 0.513874 0.193492 -0.83576 + 1.16584 1.03957 -2.31782 0.508209 0.128806 -0.851547 + 1.14473 1.04282 -2.32601 0.171387 0.175421 -0.969461 + 1.09845 1.04656 -2.32253 -0.16029 0.156543 -0.974578 + 1.18713 1.03112 -2.30196 0.706941 0.0671098 -0.704082 + 1.17165 0.958611 -2.31734 0.715925 -0.0592651 -0.695658 + 1.15719 0.962818 -2.33057 0.533968 0.0190873 -0.845289 + 1.13607 0.966066 -2.33875 0.147679 0.105123 -0.983433 + 1.18985 0.951844 -2.29503 0.857141 -0.159269 -0.48984 + 1.1573 0.873995 -2.31263 0.89054 -0.175441 -0.419713 + 1.14982 0.878091 -2.32685 0.775457 -0.0886108 -0.625152 + 1.13536 0.882297 -2.34008 0.628111 -0.00830906 -0.778079 + 1.19632 0.945651 -2.27253 0.939227 -0.262051 -0.22177 + 1.16377 0.867801 -2.29013 0.945305 -0.270189 -0.182747 + 1.14423 0.789423 -2.31181 0.985597 -0.125514 -0.113334 + 1.1409 0.791504 -2.32781 0.936473 -0.0553848 -0.34634 + 1.13343 0.795599 -2.34203 0.828379 0.00282698 -0.560161 + 1.16295 0.863015 -2.27155 0.914036 -0.377747 0.147802 + 1.14342 0.784636 -2.29323 0.965048 -0.194038 0.176158 + 1.13797 0.70623 -2.31128 0.981378 -0.0362149 0.188641 + 1.13845 0.705678 -2.32895 0.995329 -0.00336656 -0.0964816 + 1.13513 0.707759 -2.34495 0.936861 0.0132466 -0.349451 + 1.14825 0.851736 -2.25108 0.793352 -0.418347 0.442242 + 1.13618 0.782888 -2.27523 0.851006 -0.250532 0.461543 + 1.13074 0.704483 -2.29328 0.871564 -0.0617221 0.486381 + 1.1363 0.615698 -2.29634 0.876214 0.10804 0.469655 + 1.14159 0.612412 -2.30958 0.978392 0.100237 0.180833 + 1.13375 0.847744 -2.23277 0.535838 -0.43715 0.722341 + 1.12168 0.778896 -2.25693 0.567932 -0.297964 0.767248 + 1.11761 0.705719 -2.27586 0.585761 -0.117022 0.801991 + 1.12317 0.616935 -2.27891 0.585473 0.0943926 0.805178 + 1.13814 0.898036 -2.20703 0.438425 -0.799892 0.409824 + 1.10266 0.89077 -2.19775 0.171176 -0.891553 0.419323 + 1.09827 0.840477 -2.22349 0.139698 -0.415647 0.898733 + 1.09638 0.779218 -2.24812 0.147142 -0.315785 0.937352 + 1.14087 0.89487 -2.18415 0.181535 -0.651745 -0.736392 + 1.10379 0.887968 -2.17995 -0.056183 -0.669864 -0.740355 + 1.05801 0.890812 -2.18881 -0.0683178 -0.921668 0.381917 + 1.06003 0.842575 -2.22376 -0.0370483 -0.466899 0.883534 + 1.05814 0.781314 -2.24839 -0.118949 -0.308103 0.943888 + 1.14119 0.839975 -2.17954 0.290378 -0.135224 -0.947309 + 1.10412 0.833077 -2.17534 -0.147752 -0.117206 -0.982055 + 1.05913 0.888012 -2.17101 -0.257002 -0.666987 -0.699342 + 1.02374 0.898894 -2.187 -0.312877 -0.853588 0.416529 + 1.14987 0.770103 -2.1543 0.720032 -0.147736 -0.678033 + 1.13389 0.769575 -2.16683 0.322624 -0.153736 -0.933959 + 1.10545 0.770067 -2.16789 -0.096934 -0.1288 -0.986922 + 1.06094 0.833172 -2.1651 -0.271326 -0.115415 -0.955543 + 1.14854 0.696128 -2.14536 0.728905 -0.0266264 -0.684096 + 1.13383 0.698417 -2.15678 0.339681 -0.0545352 -0.938958 + 1.10539 0.69891 -2.15785 -0.103199 -0.0689841 -0.992266 + 1.06227 0.770162 -2.15765 -0.332669 -0.141325 -0.932394 + 1.1598 0.695065 -2.1289 0.895542 -0.0176321 -0.444628 + 1.16114 0.598766 -2.13427 0.896834 0.0679929 -0.437111 + 1.1524 0.601022 -2.147 0.735166 0.0813882 -0.672984 + 1.13769 0.60331 -2.15842 0.343561 0.0724325 -0.936333 + 1.16799 0.595484 -2.11426 0.994751 0.0322279 -0.0971157 + 1.17101 0.479522 -2.13682 0.984385 -0.113959 -0.134164 + 1.16676 0.481555 -2.14921 0.888762 -0.0654523 -0.453672 + 1.15803 0.483812 -2.16194 0.720971 -0.0421243 -0.691684 + 1.16896 0.476723 -2.11774 0.954935 -0.182944 0.23373 + 1.15345 0.42109 -2.14024 0.643304 -0.760109 -0.0916182 + 1.1492 0.423124 -2.15263 0.513027 -0.709054 -0.483783 + 1.14009 0.424542 -2.15971 0.129355 -0.650965 -0.748006 + 1.14892 0.485228 -2.16902 0.351338 -0.0311114 -0.935731 + 1.16158 0.474473 -2.10095 0.783568 -0.266171 0.561404 + 1.14607 0.418842 -2.12345 0.415155 -0.834931 0.361299 + 1.12617 0.418888 -2.11867 -0.143097 -0.873927 0.464516 + 1.14375 0.473033 -2.08685 0.413466 -0.365003 0.834158 + 1.02577 0.850658 -2.22195 -0.383354 -0.55021 0.741828 + 1.03522 0.783103 -2.25302 -0.470771 -0.306281 0.827385 + 1.05701 0.707977 -2.2673 -0.116851 -0.16208 0.979835 + 1.01641 0.853552 -2.23117 -0.754539 -0.485275 0.44179 + 1.02586 0.785997 -2.26224 -0.820055 -0.239906 0.519572 + 1.03409 0.709764 -2.27193 -0.494739 -0.174611 0.851319 + 1.00098 0.866192 -2.25074 -0.871518 -0.440288 0.215877 + 1.01861 0.788239 -2.27782 -0.938213 -0.176467 0.297683 + 1.02532 0.709987 -2.2807 -0.823235 -0.152377 0.546869 + 1.04215 0.62187 -2.28487 -0.789832 -0.192263 0.582409 + 1.05092 0.621647 -2.2761 -0.479042 -0.111171 0.870724 + 0.995492 0.872387 -2.27345 -0.951575 -0.292723 -0.0939096 + 1.01313 0.794434 -2.30052 -0.986528 -0.13705 0.0893289 + 1.01268 0.711888 -2.31788 -0.987929 -0.106946 0.11207 + 1.01807 0.712229 -2.29628 -0.940514 -0.124627 0.316073 + 1.03636 0.619611 -2.29634 -0.907596 -0.225532 0.354126 + 0.968884 0.959752 -2.28037 -0.780075 -0.105775 -0.61668 + 1.00294 0.879134 -2.30091 -0.925343 -0.168031 -0.339861 + 1.013 0.796612 -2.3188 -0.980697 -0.0319422 -0.192904 + 0.950337 1.03443 -2.26481 -0.743805 -0.0289728 -0.667769 + 1.00071 0.962823 -2.29867 -0.456441 0.10721 -0.883271 + 1.00844 0.882676 -2.31566 -0.698545 0.0236632 -0.715174 + 1.0185 0.800157 -2.33354 -0.750151 0.0916483 -0.654885 + 0.982165 1.0375 -2.28311 -0.452766 0.0518603 -0.89012 + 1.03711 0.965133 -2.31498 -0.349584 0.138326 -0.926637 + 1.04484 0.884987 -2.33197 -0.337747 0.168016 -0.92612 + 1.0424 0.800438 -2.34678 -0.371493 0.168365 -0.913042 + 1.01742 0.713383 -2.35019 -0.762061 -0.0197523 -0.647204 + 1.03459 1.04479 -2.30271 -0.326657 0.0684687 -0.94266 + 1.10097 0.9669 -2.3348 -0.197787 0.142765 -0.969793 + 1.08924 0.885849 -2.34433 -0.192659 0.160198 -0.968101 + 1.0868 0.801298 -2.35914 -0.167292 0.177914 -0.969722 + 1.12434 0.885013 -2.34828 0.264996 0.092495 -0.959803 + 1.11343 0.800102 -2.36117 0.279094 0.135057 -0.950719 + 1.08213 0.711068 -2.3752 -0.179845 0.0387804 -0.98293 + 1.04131 0.713664 -2.36342 -0.382405 0.0322836 -0.923431 + 1.12445 0.797383 -2.35297 0.695644 0.0563259 -0.716175 + 1.11905 0.709535 -2.36943 0.687185 0.0367277 -0.725553 + 1.10876 0.709872 -2.37723 0.264532 0.041797 -0.963471 + 1.11486 0.60827 -2.36842 0.258883 -0.159847 -0.95259 + 1.09444 0.609757 -2.36693 -0.185086 -0.210049 -0.960012 + 1.12802 0.707751 -2.35849 0.829758 0.0260422 -0.557515 + 1.13219 0.609351 -2.35256 0.821458 -0.024545 -0.56974 + 1.12515 0.607935 -2.36061 0.677186 -0.0720334 -0.732277 + 1.1393 0.60936 -2.33903 0.932486 0.020612 -0.360618 + 1.15191 0.500329 -2.31369 0.929786 -0.122929 -0.346967 + 1.14743 0.496383 -2.32059 0.815537 -0.217254 -0.536376 + 1.14039 0.494966 -2.32864 0.669375 -0.25898 -0.696323 + 1.14208 0.61186 -2.32725 0.991352 0.0600068 -0.116704 + 1.15469 0.502829 -2.30192 0.993291 -0.0827761 -0.0807485 + 1.14351 0.450377 -2.29177 0.659772 -0.727186 0.189476 + 1.13903 0.446433 -2.29866 0.516083 -0.853316 -0.0742224 + 1.15469 0.508324 -2.29292 0.982488 0.00623827 0.186223 + 1.14352 0.455873 -2.28276 0.614539 -0.584816 0.529463 + 1.13594 0.461731 -2.2739 0.284404 -0.474977 0.832773 + 1.13274 0.444378 -2.30264 0.110688 -0.94111 -0.319467 + 1.13409 0.49291 -2.33262 0.268242 -0.385113 -0.883025 + 1.1494 0.511608 -2.27968 0.856033 0.0202964 0.516522 + 1.14182 0.517466 -2.27081 0.587188 0.053829 0.807659 + 1.12253 0.520015 -2.26434 0.155237 -0.00723777 0.987851 + 1.11479 0.462892 -2.27405 -0.179241 -0.531526 0.82786 + 1.10388 0.619483 -2.27244 0.160199 0.0342834 0.986489 + 1.10138 0.521175 -2.26449 -0.096181 -0.0634202 0.993341 + 1.08372 0.521401 -2.2679 -0.386055 -0.157544 0.908923 + 1.07832 0.518992 -2.27237 -0.694707 -0.302119 0.652768 + 1.10939 0.460482 -2.27852 -0.423215 -0.645372 0.635911 + 1.09232 0.706041 -2.26706 0.148063 -0.150144 0.977514 + 1.06858 0.62142 -2.27269 -0.104782 -0.0165703 0.994357 + 1.07254 0.516733 -2.28383 -0.815608 -0.336935 0.470382 + 1.06895 0.510228 -2.29484 -0.867531 -0.398146 0.298111 + 1.10581 0.453976 -2.28953 -0.541841 -0.740233 0.398074 + 1.03097 0.61927 -2.31794 -0.958479 -0.239242 0.155182 + 1.03061 0.616257 -2.33139 -0.95443 -0.272163 -0.122433 + 1.0686 0.507215 -2.30829 -0.904745 -0.425569 0.0181301 + 1.07128 0.502696 -2.31543 -0.753701 -0.5066 -0.418677 + 1.10849 0.449455 -2.29667 -0.435324 -0.89232 -0.119407 + 1.01255 0.714067 -2.33616 -0.981893 -0.065473 -0.177761 + 1.03548 0.615573 -2.34542 -0.7422 -0.269034 -0.613807 + 1.05363 0.612355 -2.35515 -0.393364 -0.240066 -0.887487 + 1.08943 0.499476 -2.32516 -0.389011 -0.453864 -0.801672 + 1.11368 0.494398 -2.33113 -0.203735 -0.437988 -0.87559 + 1.04073 0.698706 -2.13558 -0.713148 -0.104059 -0.693247 + 1.05645 0.603637 -2.13983 -0.704541 -0.0801143 -0.705127 + 1.06553 0.699021 -2.1484 -0.349855 -0.0813898 -0.933261 + 1.07573 0.604393 -2.14977 -0.35183 0.0035847 -0.936057 + 1.08285 0.485512 -2.15402 -0.681325 -0.204194 -0.702923 + 1.07804 0.484288 -2.14468 -0.889979 -0.307988 -0.336274 + 1.1156 0.604282 -2.15922 -0.0967296 0.0416103 -0.99444 + 1.12682 0.4862 -2.16981 -0.102032 -0.050279 -0.99351 + 1.10213 0.486269 -2.16396 -0.339421 -0.0902369 -0.936296 + 1.1154 0.424609 -2.15386 -0.371155 -0.692349 -0.618786 + 1.11059 0.423385 -2.14451 -0.561708 -0.79476 -0.229869 + -0.997946 1.26522 -2.11898 0.513961 0.664279 0.54275 + -1.00125 1.25445 -2.10147 0.49388 0.722412 0.483947 + -0.995988 1.24916 -2.09271 0.137383 0.988455 0.0638961 + -0.992867 1.28516 -2.14769 0.517531 0.654433 0.551252 + -1.01366 1.28604 -2.12274 0.618266 0.564757 0.546623 + -1.02682 1.28381 -2.10704 0.605076 0.584117 0.541008 + -1.02535 1.27504 -2.0983 0.618559 0.607946 0.497781 + -0.98358 1.289 -2.15871 0.12037 0.770654 0.625782 + -0.989652 1.29545 -2.16274 0.485407 0.791507 0.371345 + -1.00858 1.30598 -2.15145 0.679477 0.608474 0.409963 + -1.04153 1.32695 -2.13338 0.471476 0.673538 0.569261 + -1.0547 1.32472 -2.11767 0.399746 0.758346 0.514892 + -0.963815 1.28962 -2.15547 -0.183418 0.76356 0.61914 + -0.984307 1.29441 -2.16473 0.184608 0.909914 0.371453 + -0.994769 1.30012 -2.18287 0.530824 0.846309 0.0445665 + -1.00404 1.31084 -2.18183 0.762133 0.645131 0.0543958 + -1.03105 1.3371 -2.15031 0.545055 0.711874 0.442889 + -0.94364 1.30847 -2.16914 -0.129731 0.826017 0.548513 + -0.960743 1.32387 -2.20375 -0.24203 0.92725 0.285708 + -0.980918 1.30501 -2.19008 -0.409937 0.822185 0.394923 + -0.989425 1.29907 -2.18486 -0.0279772 0.965028 0.26065 + -1.00405 1.30768 -2.23924 0.00391974 0.973144 -0.230163 + -0.91607 1.31578 -2.18266 0.146177 0.911733 0.383894 + -0.926195 1.32469 -2.21344 0.147343 0.988701 0.0275828 + -0.953976 1.32582 -2.2231 -0.0476521 0.994555 -0.0926787 + -0.995544 1.31361 -2.24446 -0.480832 0.87652 0.0226444 + -0.867528 1.30213 -2.1944 0.64391 0.737506 0.203627 + -0.877653 1.31105 -2.22518 0.52307 0.79705 -0.301842 + -0.926069 1.31171 -2.25781 0.30531 0.70978 -0.634821 + -0.95385 1.31284 -2.26747 0.142053 0.726263 -0.672579 + -0.988777 1.31557 -2.2638 -0.284012 0.824853 -0.48883 + -0.85353 1.2736 -2.17525 0.858587 0.42444 0.28754 + -0.862907 1.29195 -2.22695 0.811404 0.257808 -0.524556 + -0.911322 1.29262 -2.25959 0.503629 0.168112 -0.847406 + -0.96008 1.28314 -2.28307 0.17252 0.194486 -0.965615 + -0.860076 1.20167 -2.10609 0.977829 0.0527667 0.202649 + -0.855496 1.19582 -2.12385 0.978324 -0.177524 0.106618 + -0.84895 1.26775 -2.19301 0.979329 0.151404 -0.134134 + -0.867208 1.24832 -2.22053 0.739929 -0.204522 -0.640839 + -0.863375 1.18217 -2.06239 0.993131 -0.0925709 0.0715634 + -0.869982 1.15731 -2.1148 0.884538 -0.464575 -0.0419891 + -0.853252 1.22412 -2.18659 0.910534 -0.270865 -0.312346 + -0.867738 1.18561 -2.17754 0.87106 -0.384364 -0.30581 + -0.886969 1.21019 -2.22764 0.715305 -0.245911 -0.654115 + -0.881459 1.1607 -1.98568 0.836032 -0.418033 0.355386 + -0.878107 1.14727 -2.04762 0.861581 -0.493556 0.11866 + -0.895625 1.19651 -1.94679 0.679581 0.0758583 0.729668 + -0.919078 1.1614 -1.93562 0.592096 -0.306943 0.745123 + -0.913074 1.14522 -1.9566 0.648751 -0.560217 0.515052 + -0.933796 1.08842 -2.01277 0.695637 -0.667017 0.26679 + -0.965973 1.17276 -1.91092 0.227956 0.232167 0.945587 + -0.989426 1.13764 -1.89975 0.246311 -0.112053 0.962692 + -1.01057 1.10156 -1.91032 0.289681 -0.495879 0.81865 + -1.00457 1.08538 -1.93131 0.531615 -0.606849 0.590863 + -0.965412 1.07295 -1.98369 0.62144 -0.626088 0.470984 + -0.980129 1.18837 -1.91784 -0.155311 0.546138 0.823172 + -1.05117 1.12715 -1.90057 -0.0720222 -0.172502 0.982373 + -1.07232 1.09107 -1.91115 -0.167933 -0.338119 0.925999 + -1.07934 1.04655 -1.93878 -0.0952247 -0.598105 0.79574 + -1.03277 1.04274 -1.95099 0.337861 -0.646305 0.684207 + -0.968084 1.25517 -1.97953 -0.387692 0.803678 0.451438 + -0.995964 1.18457 -1.9229 -0.352308 0.648609 0.674675 + -0.994254 1.24243 -1.98218 -0.313337 0.772476 0.552359 + -1.00474 1.23713 -1.98197 -0.164995 0.700408 0.69441 + -1.00645 1.17926 -1.92269 0.17016 0.608507 0.77509 + -1.00371 1.25545 -2.02439 0.0514151 0.998662 0.00544936 + -1.00651 1.25674 -2.00165 0.345471 0.887877 0.303849 + -1.01179 1.25355 -1.99836 0.302508 0.6774 0.670536 + -1.01002 1.23395 -1.97869 0.313765 0.690069 0.652194 + -0.999056 1.25046 -2.06722 -0.00821282 0.996386 -0.0845421 + -1.00656 1.2514 -2.06805 0.397023 0.917475 -0.0247581 + -1.01075 1.25642 -2.02412 0.39108 0.91962 -0.0368103 + -1.01355 1.2577 -2.00138 0.396477 0.847567 0.352755 + -1.00349 1.2501 -2.09354 0.379706 0.883014 0.275881 + -1.02759 1.27069 -2.09037 0.666809 0.684758 0.294061 + -1.02814 1.26851 -2.06481 0.657845 0.752402 0.0336234 + -1.03233 1.27353 -2.02089 0.621997 0.778144 0.0872426 + -1.02889 1.25904 -1.98622 0.587514 0.689515 0.423552 + -1.06829 1.31095 -2.08292 0.542167 0.832557 0.113592 + -1.06884 1.30877 -2.05737 0.545276 0.832817 0.0953446 + -1.06342 1.2998 -2.01482 0.52789 0.827737 0.190221 + -1.05998 1.28532 -1.98015 0.500475 0.759674 0.415236 + -1.02713 1.2549 -1.9832 0.604321 0.609386 0.513268 + -1.0671 1.31137 -2.09074 0.543852 0.75975 0.356376 + -1.09813 1.32451 -2.09058 -0.0774698 0.989796 0.119592 + -1.09933 1.3241 -2.08277 -0.103469 0.990292 0.0928181 + -1.09813 1.32091 -2.05726 -0.0662083 0.990246 0.122598 + -1.09271 1.31195 -2.01471 0.192334 0.93755 0.289841 + -1.06857 1.32014 -2.09948 0.357598 0.793443 0.492516 + -1.10025 1.32588 -2.1048 -0.21047 0.959276 0.188393 + -1.12999 1.30631 -2.09748 -0.583818 0.800172 0.137405 + -1.12879 1.30312 -2.07197 -0.634952 0.759198 0.143021 + -1.10739 1.31177 -2.01308 -0.37813 0.865314 0.329014 + -1.08638 1.33047 -2.12299 -0.0815611 0.927425 0.365008 + -1.13483 1.32016 -2.13533 -0.546919 0.78092 0.301735 + -1.13211 1.30768 -2.11169 -0.602332 0.741187 0.296374 + -1.16797 1.27928 -2.12693 -0.741695 0.596655 0.306418 + -1.15935 1.27338 -2.08314 -0.766914 0.602076 0.222145 + -1.07524 1.34267 -2.14156 -0.0555998 0.875751 0.479551 + -1.12368 1.33237 -2.1539 -0.487332 0.824377 0.287941 + -1.17068 1.29177 -2.15056 -0.756138 0.618157 0.214795 + -1.19843 1.24064 -2.13741 -0.8893 0.4146 0.193011 + -1.18982 1.23474 -2.09363 -0.863451 0.44763 0.232551 + -1.06475 1.35282 -2.1585 0.101397 0.965176 0.241151 + -1.10077 1.35398 -2.1694 -0.265897 0.951102 0.157173 + -1.13848 1.32748 -2.19342 -0.592972 0.789267 -0.159502 + -1.1614 1.30587 -2.17791 -0.728637 0.684893 0.00321937 + -1.20333 1.24534 -2.18178 -0.907637 0.418511 0.0323098 + -1.02651 1.34196 -2.1807 0.542868 0.839361 -0.0277047 + -1.05061 1.34378 -2.1937 0.165444 0.948647 -0.269625 + -1.08663 1.34494 -2.2046 -0.102595 0.902739 -0.417776 + -1.01332 1.3184 -2.2382 0.547404 0.720786 -0.425225 + -1.03742 1.32022 -2.25119 0.117719 0.732925 -0.670047 + -1.07665 1.30058 -2.25546 -0.14845 0.629303 -0.762851 + -1.10837 1.28654 -2.26464 -0.148225 0.589922 -0.793739 + -1.11835 1.3309 -2.21378 -0.335664 0.820271 -0.463125 + -1.03281 1.27082 -2.2821 -0.0395279 0.360896 -0.931768 + -1.07203 1.25118 -2.28636 -0.0492017 0.326226 -0.94401 + -1.1178 1.24139 -2.28569 -0.153469 0.33296 -0.930368 + -1.15208 1.28048 -2.25538 -0.445637 0.593702 -0.670019 + -1.17222 1.27705 -2.23502 -0.703084 0.590601 -0.396059 + -0.995008 1.28587 -2.2794 -0.0708546 0.313121 -0.947066 + -1.0167 1.19196 -2.28819 0.145802 0.063277 -0.987288 + -1.09284 1.20037 -2.29555 0.0156244 0.15068 -0.988459 + -1.13861 1.19058 -2.29487 -0.199552 0.197976 -0.959679 + -1.16151 1.23532 -2.27643 -0.4365 0.339639 -0.833135 + -0.978899 1.20701 -2.2855 0.214445 -0.105507 -0.971021 + -0.949901 1.17835 -2.26912 0.487822 -0.0853515 -0.86876 + -1.0214 1.12019 -2.29765 0.226025 0.0597328 -0.972288 + -1.09754 1.1286 -2.30501 0.0923096 0.155919 -0.983447 + -0.931082 1.25449 -2.2667 0.502481 -0.101082 -0.858659 + -0.912048 1.16244 -2.2362 0.742272 -0.204591 -0.638103 + -0.931123 1.09699 -2.24512 0.800447 -0.114848 -0.588298 + -0.968976 1.1129 -2.27805 0.489197 -0.0102413 -0.872113 + -0.892817 1.13787 -2.1861 0.889539 -0.374692 -0.261394 + -0.914917 1.08625 -2.20238 0.938747 -0.273717 -0.209362 + -0.950337 1.03443 -2.26481 0.756223 -0.0757755 -0.649911 + -0.982165 1.0375 -2.28311 0.431807 0.0327135 -0.901373 + -1.03459 1.04479 -2.30271 0.305288 0.0956658 -0.947442 + -0.895616 1.12806 -2.12044 0.830532 -0.556333 -0.0266369 + -0.917717 1.07644 -2.13672 0.926829 -0.364878 0.0886172 + -0.936191 1.00951 -2.16796 0.938149 -0.340312 0.0637488 + -0.934132 1.02369 -2.22206 0.945119 -0.246923 -0.213961 + -0.961437 0.953005 -2.25291 0.932227 -0.305135 -0.194536 + -0.963497 0.938828 -2.19881 0.880176 -0.456005 0.131715 + -1.00098 0.866192 -2.25074 0.886738 -0.412694 0.208279 + -0.995492 0.872387 -2.27345 0.953943 -0.288193 -0.0832949 + -1.00294 0.879134 -2.30091 0.925387 -0.111381 -0.36229 + -0.968884 0.959752 -2.28037 0.77473 -0.113828 -0.621962 + -0.978927 0.926189 -2.17924 0.752956 -0.639752 0.154192 + -1.01641 0.853552 -2.23117 0.753174 -0.482156 0.447498 + -1.02586 0.785997 -2.26224 0.815901 -0.248553 0.522042 + -1.01861 0.788239 -2.27782 0.939258 -0.18201 0.290975 + -1.01313 0.794434 -2.30052 0.99075 -0.111301 0.0776356 + -0.979065 0.922293 -2.15239 0.807931 -0.559457 -0.185083 + -1.02374 0.898894 -2.187 0.312873 -0.85359 0.416526 + -1.02577 0.850658 -2.22195 0.388857 -0.542864 0.744371 + -1.03522 0.783103 -2.25302 0.481767 -0.320266 0.815678 + -0.972961 0.929833 -2.1305 0.900174 -0.380436 0.212027 + -1.01732 0.840676 -2.13777 0.899668 -0.248521 -0.358937 + -1.02388 0.894998 -2.16015 0.462293 -0.62034 -0.633611 + -1.05913 0.888012 -2.17101 0.251894 -0.67017 -0.698155 + -1.05801 0.890812 -2.18881 0.0859891 -0.913209 0.398315 + -0.951538 0.996494 -2.11812 0.859201 -0.369314 0.354092 + -0.999435 0.931338 -2.09138 0.804647 -0.246179 0.540315 + -1.01351 0.849065 -2.09167 0.913003 -0.197079 0.35719 + -1.01121 0.848216 -2.11588 0.945877 -0.324019 -0.0181096 + -0.933064 1.06342 -2.08687 0.858895 -0.460662 0.223808 + -0.978011 0.997999 -2.079 0.758528 -0.453955 0.467504 + -1.01947 0.932542 -2.06017 0.795258 -0.263178 0.54617 + -0.911168 1.10379 -2.07578 0.80663 -0.588071 0.0593278 + -0.963119 1.03383 -2.04639 0.748008 -0.578389 0.3255 + -0.99361 1.0303 -2.00338 0.615135 -0.625954 0.479364 + -1.0085 0.994477 -2.03599 0.722616 -0.497106 0.480324 + -0.885534 1.13305 -2.07014 0.797171 -0.603043 0.0292839 + -0.941223 1.0742 -2.03529 0.771318 -0.587966 0.243647 + -1.03478 0.996049 -1.99593 0.468903 -0.551507 0.689906 + -1.08136 0.999866 -1.98372 -0.0548452 -0.570719 0.819312 + -1.08197 0.934614 -2.01182 -0.0357968 -0.30742 0.9509 + -1.04575 0.934113 -2.02012 0.540151 -0.332626 0.773044 + -1.05866 0.851156 -2.039 0.465684 -0.1441 0.87314 + -1.03355 0.850267 -2.06046 0.744675 -0.111229 0.658094 + -1.14002 0.999492 -2.00372 -0.428208 -0.490105 0.759233 + -1.14063 0.93424 -2.03183 -0.472585 -0.247653 0.845773 + -1.12967 0.851577 -2.03907 -0.435333 -0.102752 0.894387 + -1.09487 0.851658 -2.03071 -0.0171549 -0.138014 0.990282 + -1.14155 1.04819 -1.96235 -0.444964 -0.499886 0.743049 + -1.18376 1.04641 -1.99763 -0.72388 -0.373934 0.579802 + -1.18223 0.997715 -2.03899 -0.731642 -0.377332 0.567733 + -1.17278 0.933552 -2.05711 -0.757249 -0.227732 0.612137 + -1.13452 1.09271 -1.93472 -0.473356 -0.29061 0.831553 + -1.18087 1.097 -1.97232 -0.786382 -0.145549 0.600349 + -1.20943 1.0394 -2.05198 -0.907324 -0.236158 0.347839 + -1.20455 0.99636 -2.08217 -0.90108 -0.279217 0.331802 + -1.19509 0.932198 -2.10029 -0.924229 -0.21468 0.315773 + -1.12806 1.13932 -1.92108 -0.47885 -0.113127 0.870577 + -1.17441 1.14361 -1.95867 -0.801984 0.0666919 0.593611 + -1.19506 1.154 -2.01062 -0.920036 0.189181 0.343139 + -1.20655 1.08999 -2.02667 -0.935891 -0.0299462 0.351015 + -1.22159 1.03917 -2.09959 -0.98391 -0.117636 0.134473 + -1.04301 1.16262 -1.8932 0.133149 -0.0513431 0.989765 + -1.1199 1.17478 -1.91371 -0.493117 0.0888113 0.865418 + -1.15065 1.19284 -1.94371 -0.71697 0.309258 0.624751 + -1.01556 1.17173 -1.90419 0.760199 -0.0698092 0.645929 + -1.06864 1.19787 -1.89697 -0.0668883 0.269033 0.960805 + -1.08924 1.19869 -1.90469 -0.396321 0.285385 0.872631 + -1.12 1.21675 -1.93469 -0.551201 0.431076 0.714388 + -1.01913 1.22641 -1.96018 0.627543 0.583386 0.515606 + -1.04118 1.20698 -1.90796 0.402937 0.535494 0.742218 + -1.04919 1.23547 -1.93097 0.51686 0.609857 0.600775 + -1.0713 1.23734 -1.91791 0.102608 0.579982 0.808142 + -1.0919 1.23816 -1.92563 -0.405117 0.512916 0.756834 + -1.08209 1.28719 -1.9671 0.201602 0.787771 0.582042 + -1.09677 1.28702 -1.96546 -0.269858 0.725272 0.63337 + -1.12487 1.26561 -1.97452 -0.688063 0.521079 0.505022 + -1.1713 1.20323 -1.99566 -0.841512 0.383715 0.38029 + -1.13795 1.28203 -2.02425 -0.762557 0.584175 0.277931 + -1.18439 1.21965 -2.04539 -0.866383 0.413741 0.279642 + -1.2081 1.16085 -2.06177 -0.952283 0.209359 0.222093 + -1.21353 1.17594 -2.11001 -0.969684 0.200845 0.139194 + -1.21959 1.09684 -2.07782 -0.987542 0.0428089 0.151421 + -1.21609 1.18911 -2.15515 -0.976556 0.180552 0.117213 + -1.22 1.10578 -2.12788 -0.998328 0.0453873 0.0357814 + -1.222 1.04811 -2.14965 -0.999567 -0.0291064 -0.0042963 + -1.21694 0.994661 -2.17261 -0.985818 -0.165691 -0.0266178 + -1.21671 0.996135 -2.12977 -0.974455 -0.197491 0.106937 + -1.22099 1.1938 -2.19952 -0.981535 0.183936 -0.052501 + -1.22256 1.11894 -2.17302 -0.999135 0.0174052 0.037759 + -1.22178 1.05825 -2.19106 -0.99895 -0.0413191 -0.0198028 + -1.19404 1.25944 -2.20913 -0.842281 0.506105 -0.185525 + -1.21118 1.20584 -2.23352 -0.898297 0.250219 -0.361183 + -1.22206 1.14287 -2.21088 -0.990419 0.0363191 -0.13323 + -1.22129 1.08217 -2.22892 -0.98527 0.00674648 -0.170875 + -1.18935 1.22346 -2.2594 -0.719424 0.310921 -0.621094 + -1.21225 1.15491 -2.24488 -0.894669 0.0980596 -0.435835 + -1.21091 1.09261 -2.25966 -0.885664 0.0811615 -0.457179 + -1.21572 1.01392 -2.24892 -0.973416 -0.110442 -0.200661 + -1.21672 1.00479 -2.21402 -0.984798 -0.163603 -0.0583763 + -1.19043 1.15683 -2.27277 -0.690651 0.159853 -0.7053 + -1.18908 1.09453 -2.28755 -0.712265 0.140421 -0.687722 + -1.18713 1.03112 -2.30196 -0.710449 0.0709391 -0.700164 + -1.20533 1.02435 -2.27965 -0.87336 -0.00392701 -0.487059 + -1.16259 1.1687 -2.28979 -0.476371 0.199149 -0.856394 + -1.1678 1.10298 -2.30341 -0.508134 0.186461 -0.840852 + -1.16584 1.03957 -2.31782 -0.506369 0.133145 -0.851976 + -1.15719 0.962818 -2.33057 -0.535158 0.0205648 -0.844501 + -1.17165 0.958611 -2.31734 -0.715913 -0.0580579 -0.695771 + -1.14382 1.12486 -2.30849 -0.171817 0.212831 -0.961864 + -1.14473 1.04282 -2.32601 -0.167486 0.17144 -0.970854 + -1.13607 0.966066 -2.33875 -0.138194 0.121932 -0.982871 + -1.09845 1.04656 -2.32253 0.179509 0.174572 -0.968143 + -1.10097 0.9669 -2.3348 0.191406 0.149956 -0.969988 + -1.12434 0.885013 -2.34828 -0.253533 0.0805339 -0.963969 + -1.13536 0.882297 -2.34008 -0.632201 -0.0214727 -0.774507 + -1.14982 0.878091 -2.32685 -0.769442 -0.0947641 -0.631647 + -1.03711 0.965133 -2.31498 0.356648 0.1458 -0.922792 + -1.04484 0.884987 -2.33197 0.344746 0.158787 -0.925169 + -1.08924 0.885849 -2.34433 0.191035 0.15841 -0.968717 + -1.0868 0.801298 -2.35914 0.169472 0.175315 -0.969816 + -1.11343 0.800102 -2.36117 -0.281418 0.130983 -0.950604 + -1.00071 0.962823 -2.29867 0.46774 0.0829306 -0.879967 + -1.00844 0.882676 -2.31566 0.731944 0.0655467 -0.678204 + -1.0185 0.800157 -2.33354 0.746164 0.10086 -0.658078 + -1.0424 0.800438 -2.34678 0.376242 0.174763 -0.90989 + -1.013 0.796612 -2.3188 0.984096 -0.0173709 -0.176788 + -1.01255 0.714067 -2.33616 0.981993 -0.0676485 -0.176391 + -1.01742 0.713383 -2.35019 0.761943 -0.0199871 -0.647335 + -1.04131 0.713664 -2.36342 0.383081 0.0313276 -0.923183 + -1.01268 0.711888 -2.31788 0.987855 -0.108988 0.110743 + -1.03097 0.61927 -2.31794 0.958563 -0.239018 0.155006 + -1.03061 0.616257 -2.33139 0.955511 -0.269124 -0.120714 + -1.03548 0.615573 -2.34542 0.742011 -0.268425 -0.614302 + -1.01807 0.712229 -2.29628 0.940291 -0.125168 0.316522 + -1.03636 0.619611 -2.29634 0.907352 -0.22889 0.352592 + -1.07254 0.516733 -2.28383 0.823433 -0.33009 0.461518 + -1.06895 0.510228 -2.29484 0.869973 -0.390427 0.301186 + -1.0686 0.507215 -2.30829 0.904745 -0.425569 0.0181301 + -1.02532 0.709987 -2.2807 0.824082 -0.15566 0.544664 + -1.04215 0.62187 -2.28487 0.791337 -0.190151 0.581058 + -1.07832 0.518992 -2.27237 0.694781 -0.297948 0.654604 + -1.10939 0.460482 -2.27852 0.423204 -0.645375 0.635916 + -1.10581 0.453976 -2.28953 0.541849 -0.740229 0.398071 + -1.03409 0.709764 -2.27193 0.494388 -0.175086 0.851425 + -1.05092 0.621647 -2.2761 0.479625 -0.113771 0.870067 + -1.08372 0.521401 -2.2679 0.389703 -0.154769 0.907843 + -1.11479 0.462892 -2.27405 0.179231 -0.531548 0.827848 + -1.14352 0.455873 -2.28276 -0.614396 -0.584942 0.529491 + -1.05814 0.781314 -2.24839 0.106915 -0.323176 0.94028 + -1.05701 0.707977 -2.2673 0.117343 -0.162842 0.979649 + -1.06858 0.62142 -2.27269 0.105327 -0.0159405 0.99431 + -1.10138 0.521175 -2.26449 0.0961818 -0.0634178 0.993341 + -1.13594 0.461731 -2.2739 -0.284397 -0.475026 0.832748 + -1.06003 0.842575 -2.22376 0.0480452 -0.477106 0.877531 + -1.09638 0.779218 -2.24812 -0.146904 -0.316047 0.937301 + -1.09232 0.706041 -2.26706 -0.147655 -0.149629 0.977655 + -1.10388 0.619483 -2.27244 -0.159453 0.0332052 0.986647 + -1.12253 0.520015 -2.26434 -0.155235 -0.00723967 0.987851 + -1.09827 0.840477 -2.22349 -0.160293 -0.437186 0.884972 + -1.12168 0.778896 -2.25693 -0.567481 -0.297125 0.767908 + -1.11761 0.705719 -2.27586 -0.585134 -0.117937 0.802315 + -1.12317 0.616935 -2.27891 -0.586304 0.0930942 0.804724 + -1.14182 0.517466 -2.27081 -0.588514 0.0556494 0.806569 + -1.10266 0.89077 -2.19775 -0.197894 -0.879598 0.432603 + -1.13814 0.898036 -2.20703 -0.464844 -0.809113 0.359521 + -1.13375 0.847744 -2.23277 -0.574906 -0.38876 0.719965 + -1.13618 0.782888 -2.27523 -0.856429 -0.239476 0.457362 + -1.13074 0.704483 -2.29328 -0.87211 -0.063217 0.485208 + -1.10379 0.887968 -2.17995 0.060497 -0.673013 -0.737153 + -1.14087 0.89487 -2.18415 -0.0875418 -0.608867 -0.788427 + -1.18263 0.925247 -2.21716 -0.622278 -0.778185 0.0848483 + -1.14825 0.851736 -2.25108 -0.786011 -0.394068 0.476337 + -1.14342 0.784636 -2.29323 -0.964957 -0.187838 0.183233 + -1.06094 0.833172 -2.1651 0.279115 -0.124189 -0.952193 + -1.10412 0.833077 -2.17534 0.161889 -0.102368 -0.981485 + -1.14119 0.839975 -2.17954 -0.229248 -0.208736 -0.950723 + -1.18536 0.92208 -2.19428 -0.57468 -0.717364 -0.393868 + -1.02568 0.840159 -2.15425 0.655604 -0.151227 -0.739806 + -1.03748 0.769849 -2.14484 0.687521 -0.151285 -0.710231 + -1.06227 0.770162 -2.15765 0.34487 -0.126877 -0.930036 + -1.10545 0.770067 -2.16789 0.106903 -0.140537 -0.984287 + -1.02911 0.770366 -2.12836 0.942205 -0.142091 -0.303413 + -1.03297 0.696732 -2.12049 0.945662 -0.111886 -0.305296 + -1.04073 0.698706 -2.13558 0.712414 -0.10528 -0.693817 + -1.06553 0.699021 -2.1484 0.349788 -0.081262 -0.933298 + -1.02616 0.76936 -2.10888 0.992449 -0.118358 -0.032174 + -1.03002 0.695723 -2.10101 0.993768 -0.106764 -0.0320364 + -1.04637 0.599478 -2.10967 0.978674 -0.197789 -0.0554709 + -1.04869 0.601661 -2.12474 0.934463 -0.159424 -0.318376 + -1.05645 0.603637 -2.13983 0.704596 -0.080267 -0.705054 + -1.02846 0.770206 -2.08467 0.944851 -0.0875422 0.315585 + -1.03207 0.692305 -2.07887 0.945868 -0.103481 0.307612 + -1.04842 0.596061 -2.08753 0.931367 -0.236396 0.276896 + -1.0416 0.768826 -2.06282 0.762627 -0.0432898 0.645388 + -1.04521 0.690924 -2.05702 0.760141 -0.0851726 0.644152 + -1.05861 0.59312 -2.07063 0.757117 -0.258057 0.60015 + -1.077 0.479988 -2.11589 0.885547 -0.409332 0.219669 + -1.06671 0.769714 -2.04136 0.441229 -0.018642 0.897201 + -1.06833 0.687077 -2.03744 0.44869 -0.0766497 0.890394 + -1.08172 0.589274 -2.05105 0.444696 -0.258233 0.857648 + -1.1015 0.474666 -2.08687 0.434987 -0.457791 0.77538 + -1.08718 0.477048 -2.099 0.716515 -0.446151 0.536242 + -1.0955 0.768938 -2.03512 -0.0096505 -0.00163475 0.999952 + -1.09711 0.686301 -2.0312 -0.00672013 -0.0519661 0.998626 + -1.10408 0.587688 -2.04625 0.00189308 -0.226072 0.974109 + -1.12386 0.47308 -2.08207 -0.00682588 -0.426211 0.904598 + -1.12617 0.418888 -2.11867 0.143104 -0.873915 0.464536 + -1.13029 0.768856 -2.04348 -0.442236 6.37393e-006 0.896899 + -1.12924 0.686226 -2.03891 -0.428091 -0.032047 0.903167 + -1.13621 0.587613 -2.05397 -0.432652 -0.164941 0.886344 + -1.14375 0.473033 -2.08685 -0.413464 -0.365003 0.834158 + -1.14607 0.418842 -2.12345 -0.415151 -0.834933 0.361298 + -1.15321 0.769489 -2.06168 -0.790741 -0.0193701 0.611845 + -1.15215 0.686861 -2.05711 -0.785308 -0.0153978 0.618914 + -1.15403 0.589054 -2.06807 -0.785343 -0.0895455 0.612551 + -1.16158 0.474473 -2.10095 -0.783567 -0.26617 0.561405 + -1.16182 0.850889 -2.06436 -0.789171 -0.111564 0.603956 + -1.16603 0.768546 -2.09129 -0.966794 -0.0468868 0.25122 + -1.16406 0.690491 -2.08423 -0.964123 -0.0053059 0.265404 + -1.16595 0.592685 -2.09518 -0.965689 -0.0179263 0.259082 + -1.16896 0.476723 -2.11774 -0.954937 -0.18294 0.233728 + -1.17464 0.849946 -2.09397 -0.940809 -0.148815 0.304521 + -1.16863 0.769838 -2.11595 -0.989999 -0.098763 -0.100731 + -1.16666 0.691784 -2.10889 -0.994627 -0.00561677 -0.103375 + -1.16799 0.595484 -2.11426 -0.994743 0.032077 -0.0972466 + -1.20206 0.931056 -2.13466 -0.965125 -0.24409 0.0946233 + -1.18161 0.848802 -2.12835 -0.975642 -0.210354 -0.0622393 + -1.16113 0.769041 -2.13784 -0.883528 -0.140874 -0.446691 + -1.1598 0.695065 -2.1289 -0.895884 -0.0166744 -0.443975 + -1.16114 0.598766 -2.13427 -0.896871 0.0678782 -0.437052 + -1.20229 0.929581 -2.1775 -0.910707 -0.382372 -0.156217 + -1.17411 0.848005 -2.15023 -0.855011 -0.2943 -0.427018 + -1.14987 0.770103 -2.1543 -0.714222 -0.15701 -0.682081 + -1.14854 0.696128 -2.14536 -0.728383 -0.0255434 -0.684694 + -1.1524 0.601022 -2.147 -0.7351 0.0812548 -0.673072 + -1.19733 0.936526 -2.23764 -0.910781 -0.412197 -0.0239214 + -1.15718 0.840503 -2.16701 -0.664751 -0.3096 -0.679893 + -1.19632 0.945651 -2.27253 -0.938886 -0.264204 -0.220656 + -1.16377 0.867801 -2.29013 -0.944612 -0.271212 -0.184802 + -1.16295 0.863015 -2.27155 -0.908683 -0.389057 0.151425 + -1.18985 0.951844 -2.29503 -0.858413 -0.157394 -0.488215 + -1.1573 0.873995 -2.31263 -0.890423 -0.18813 -0.414433 + -1.1409 0.791504 -2.32781 -0.934481 -0.0598672 -0.350944 + -1.14423 0.789423 -2.31181 -0.985035 -0.132769 -0.109896 + -1.13343 0.795599 -2.34203 -0.830751 -0.00657771 -0.556605 + -1.12802 0.707751 -2.35849 -0.829548 0.0253955 -0.557858 + -1.13513 0.707759 -2.34495 -0.936996 0.0127874 -0.349106 + -1.13845 0.705678 -2.32895 -0.995218 -0.00478094 -0.0975668 + -1.13797 0.70623 -2.31128 -0.981244 -0.0370933 0.189168 + -1.12445 0.797383 -2.35297 -0.69148 0.0503562 -0.720639 + -1.11905 0.709535 -2.36943 -0.687322 0.0365727 -0.725432 + -1.12515 0.607935 -2.36061 -0.677289 -0.0719191 -0.732193 + -1.13219 0.609351 -2.35256 -0.821535 -0.024576 -0.569628 + -1.1393 0.60936 -2.33903 -0.932397 0.0198639 -0.36089 + -1.10876 0.709872 -2.37723 -0.264773 0.0421609 -0.963389 + -1.11486 0.60827 -2.36842 -0.25921 -0.160316 -0.952423 + -1.13409 0.49291 -2.33262 -0.268775 -0.384067 -0.883319 + -1.14039 0.494966 -2.32864 -0.668861 -0.258289 -0.697073 + -1.14743 0.496383 -2.32059 -0.816314 -0.21488 -0.536151 + -1.08213 0.711068 -2.3752 0.1795 0.038333 -0.983011 + -1.09444 0.609757 -2.36693 0.18542 -0.210577 -0.959832 + -1.11368 0.494398 -2.33113 0.20415 -0.437528 -0.875724 + -1.13274 0.444378 -2.30264 -0.110693 -0.941104 -0.319485 + -1.13903 0.446433 -2.29866 -0.516098 -0.853304 -0.0742616 + -1.05363 0.612355 -2.35515 0.393394 -0.239989 -0.887494 + -1.08943 0.499476 -2.32516 0.388475 -0.452992 -0.802425 + -1.10849 0.449455 -2.29667 0.435325 -0.89232 -0.119399 + -1.14351 0.450377 -2.29177 -0.659804 -0.72715 0.189505 + -1.07128 0.502696 -2.31543 0.753702 -0.506603 -0.418673 + -1.15469 0.502829 -2.30192 -0.993581 -0.0799511 -0.0800288 + -1.15191 0.500329 -2.31369 -0.929023 -0.120917 -0.349708 + -1.14208 0.61186 -2.32725 -0.991341 0.0601525 -0.116724 + -1.15469 0.508324 -2.29292 -0.983315 0.00974674 0.181647 + -1.14159 0.612412 -2.30958 -0.978726 0.0985513 0.179955 + -1.1363 0.615698 -2.29634 -0.876296 0.108311 0.469441 + -1.1494 0.511608 -2.27968 -0.85582 0.0211998 0.516839 + -1.13389 0.769575 -2.16683 -0.332162 -0.167181 -0.928288 + -1.13383 0.698417 -2.15678 -0.340758 -0.0530967 -0.93865 + -1.13769 0.60331 -2.15842 -0.343528 0.0724807 -0.936341 + -1.10539 0.69891 -2.15785 0.103182 -0.0690151 -0.992265 + -1.1156 0.604282 -2.15922 0.09669 0.0416671 -0.994442 + -1.14892 0.485228 -2.16902 -0.351338 -0.0311122 -0.935732 + -1.15803 0.483812 -2.16194 -0.72097 -0.0421274 -0.691685 + -1.16676 0.481555 -2.14921 -0.888763 -0.0654538 -0.45367 + -1.07573 0.604393 -2.14977 0.35174 0.0034731 -0.936091 + -1.10213 0.486269 -2.16396 0.339424 -0.0902265 -0.936296 + -1.12682 0.4862 -2.16981 0.102029 -0.0502667 -0.993511 + -1.14009 0.424542 -2.15971 -0.129369 -0.650949 -0.748016 + -1.1492 0.423124 -2.15263 -0.51305 -0.709021 -0.483806 + -1.08285 0.485512 -2.15402 0.681322 -0.204196 -0.702925 + -1.1154 0.424609 -2.15386 0.371179 -0.692332 -0.61879 + -1.15345 0.42109 -2.14024 -0.643329 -0.760089 -0.0916043 + -1.17101 0.479522 -2.13682 -0.984385 -0.113959 -0.134165 + -1.07804 0.484288 -2.14468 0.889978 -0.307993 -0.336272 + -1.11059 0.423385 -2.14451 0.561725 -0.794749 -0.229867 + -1.07573 0.482105 -2.12961 0.92925 -0.360716 -0.0798683 + -1.11186 0.421268 -2.1308 0.520977 -0.842635 0.136198 + -0.82689 1.29929 -2.95643 0.617033 0.112407 -0.778867 + -0.803656 1.18343 -2.94072 0.894638 0.0821922 -0.439167 + -0.830034 1.19612 -2.97807 0.575668 0.130191 -0.807252 + -0.863031 1.19676 -2.98754 0.0166199 0.127931 -0.991644 + -0.807811 1.06184 -2.97689 0.813349 0.110984 -0.571092 + -0.829019 1.06609 -2.99239 0.448895 0.146127 -0.881556 + -0.862015 1.06673 -3.00185 0.0786585 0.166031 -0.982978 + -0.849719 0.941343 -3.02531 0.0819267 0.201683 -0.976018 + -0.794835 1.04874 -2.94176 0.979301 0.0348408 -0.199389 + -0.798052 0.929471 -2.98389 0.970016 0.0461573 -0.238617 + -0.807629 0.936939 -3.00444 0.786653 0.140009 -0.601311 + -0.828837 0.941197 -3.01994 0.43165 0.200252 -0.879533 + -0.843533 0.816506 -3.05207 0.0783337 0.171048 -0.982144 + -0.795305 0.91505 -2.94799 0.995247 -0.057503 0.0785865 + -0.798724 0.797702 -2.99535 0.996104 -0.0539096 0.0697939 + -0.800369 0.806341 -3.01686 0.969461 0.0372879 -0.242393 + -0.809946 0.813808 -3.03741 0.778168 0.12367 -0.61576 + -0.822651 0.81636 -3.04669 0.433601 0.172667 -0.884407 + -0.804682 0.788575 -2.97448 0.872766 -0.186689 0.451029 + -0.805048 0.714447 -3.00096 0.881252 -0.124899 0.455846 + -0.801237 0.720285 -3.01431 0.99601 -0.0639239 0.0622769 + -0.802882 0.728925 -3.03582 0.957643 -0.0363168 -0.285659 + -0.809008 0.733702 -3.04896 0.761482 -0.0171783 -0.647958 + -0.815622 0.709411 -2.99118 0.654729 -0.166238 0.737356 + -0.807446 0.681117 -3.00185 0.834553 -0.416012 0.361185 + -0.803635 0.686956 -3.0152 0.92744 -0.370181 -0.0531234 + -0.804799 0.693068 -3.03042 0.872678 -0.351701 -0.338731 + -0.810925 0.697845 -3.04357 0.669432 -0.359414 -0.650141 + -0.823056 0.706647 -2.98622 0.458703 -0.203063 0.865076 + -0.814927 0.677555 -2.99494 0.659907 -0.466328 0.589118 + -0.819794 0.667873 -3.01333 0.486103 -0.860276 -0.15372 + -0.820959 0.673984 -3.02855 0.422828 -0.775228 -0.469296 + -0.829896 0.705212 -2.98435 0.077535 -0.248857 0.965432 + -0.822361 0.674792 -2.98997 0.462891 -0.501642 0.730813 + -0.827276 0.664309 -3.00642 0.317967 -0.947171 0.0420035 + -0.829948 0.675789 -3.03512 0.171503 -0.756659 -0.630915 + -0.819914 0.699651 -3.05013 0.37952 -0.37678 -0.844986 + -0.838616 0.673413 -2.9905 -0.194177 -0.541105 0.818231 + -0.827201 0.673775 -2.98865 0.11899 -0.537847 0.834603 + -0.832115 0.663293 -3.0051 0.0671628 -0.987654 0.141525 + -0.848286 0.671955 -3.03015 -0.208749 -0.833694 -0.511251 + -0.852695 0.673826 -2.99489 -0.408041 -0.55183 0.727314 + -0.846194 0.663707 -3.00949 -0.21056 -0.976556 0.0447526 + -0.864359 0.676199 -3.00349 -0.69588 -0.578278 0.425847 + -0.851447 0.667225 -3.01935 -0.318841 -0.903232 -0.287251 + -0.869612 0.679716 -3.01335 -0.820938 -0.567324 0.0648371 + -0.870874 0.684691 -3.02581 -0.789372 -0.543081 -0.286279 + -0.867713 0.689422 -3.03662 -0.685388 -0.5203 -0.509442 + -0.862675 0.693595 -3.0456 -0.533849 -0.493039 -0.686963 + -0.843098 0.674141 -3.03424 -0.0384283 -0.784368 -0.619105 + -0.857487 0.695782 -3.0497 -0.296759 -0.452413 -0.840985 + -0.846422 0.698094 -3.0527 -0.0778333 -0.423467 -0.902562 + -0.833272 0.699745 -3.05357 0.107 -0.398343 -0.910974 + -0.864723 0.731701 -3.05745 -0.413359 -0.105227 -0.904468 + -0.853658 0.734015 -3.06045 -0.154796 -0.063681 -0.985892 + -0.835072 0.736347 -3.06168 0.096749 -0.0343065 -0.994717 + -0.821714 0.736253 -3.05825 0.4175 -0.0164649 -0.908528 + -0.86212 0.814174 -3.05083 -0.183754 0.14366 -0.972418 + -0.070894 2.02181 -3.02604 -0.351185 -0.486508 -0.799987 + -0.040846 2.03476 -3.07187 -0.372013 -0.802254 -0.4669 + -0.080403 2.00708 -3.02372 -0.558122 0.235277 -0.795704 + -0.030826 2.04626 -3.10218 -0.309191 -0.850815 -0.424871 + -1.1518 1.21652 -1.61535 0.813943 0.53967 0.215065 + -1.16328 1.23237 -1.62663 0.616382 0.766541 0.180245 + -1.17721 1.24002 -1.59409 0.691274 0.67049 0.269413 + -1.14452 1.22624 -1.65987 0.710171 0.627744 0.318738 + -1.17429 1.24694 -1.67216 0.188218 0.975681 0.11234 + -1.19304 1.25307 -1.63892 0.083585 0.996385 0.015198 + -1.19615 1.24703 -1.59924 0.0373945 0.968421 0.246499 + -1.18233 1.23731 -1.58105 0.412191 0.831347 0.372773 + -1.16573 1.22416 -1.58282 0.700347 0.634798 0.326414 + -1.14814 1.19983 -1.59413 0.864129 0.455547 0.213911 + -1.12654 1.17353 -1.6363 0.875409 0.430507 0.219824 + -1.14016 1.21833 -1.66015 0.831478 0.448836 0.327399 + -1.16642 1.2016 -1.54698 0.717277 0.584391 0.379476 + -1.15433 1.20203 -1.57527 0.828044 0.486586 0.278527 + -1.13279 1.16309 -1.58257 0.864448 0.461387 0.199629 + -1.12289 1.15684 -1.61507 0.867814 0.459347 0.18947 + -1.17154 1.19889 -1.53394 0.721351 0.623456 0.301588 + -1.15501 1.17947 -1.53944 0.797235 0.557655 0.231165 + -1.1396 1.16384 -1.55976 0.828252 0.508773 0.234838 + -1.13898 1.16529 -1.56371 0.841758 0.469011 0.267341 + -1.18622 1.21333 -1.53064 0.144157 0.779501 0.609587 + -1.17515 1.19341 -1.50857 0.166792 0.669407 0.72393 + -1.16047 1.17898 -1.51187 0.726234 0.6837 0.0716787 + -1.14895 1.16741 -1.52325 0.744014 0.665116 0.0637527 + -1.13354 1.15178 -1.54357 0.741743 0.66919 0.0447282 + -1.20004 1.22305 -1.54884 -0.245882 0.825386 0.508213 + -1.22353 1.20559 -1.54599 -0.492435 0.631944 0.59846 + -1.1988 1.18236 -1.51373 -0.413272 0.316245 0.853929 + -1.17096 1.17815 -1.50282 -0.236947 0.209962 0.948563 + -1.13805 1.15763 -1.49276 0.478373 0.620586 0.621315 + -1.2268 1.23779 -1.60672 -0.462326 0.854276 0.237628 + -1.2503 1.22033 -1.60387 -0.595991 0.753614 0.277239 + -1.26994 1.18244 -1.56291 -0.607054 0.584953 0.53788 + -1.24521 1.15922 -1.53065 -0.467365 0.262882 0.844075 + -1.2237 1.24384 -1.6464 -0.351053 0.935219 0.0461254 + -1.25515 1.22844 -1.65651 -0.595962 0.800467 0.0638908 + -1.27484 1.19579 -1.60417 -0.685577 0.687122 0.240517 + -1.21478 1.24832 -1.69966 -0.218898 0.975726 -0.0064918 + -1.24624 1.23292 -1.70978 -0.563604 0.821039 -0.0908034 + -1.27969 1.20389 -1.65681 -0.731631 0.680197 0.045267 + -1.30767 1.16744 -1.61603 -0.748444 0.646171 0.149315 + -1.15936 1.24648 -1.6915 0.0740504 0.994067 0.0796742 + -1.19986 1.24786 -1.719 0.135244 0.981135 0.13814 + -1.19101 1.25262 -1.75145 -0.245512 0.969061 -0.0253769 + -1.22682 1.23532 -1.76812 -0.520721 0.822891 -0.227374 + -1.27636 1.20376 -1.71496 -0.724124 0.678678 -0.122643 + -1.14441 1.24339 -1.68242 0.475142 0.795742 0.375546 + -1.14064 1.24395 -1.68931 0.632451 0.766567 -0.111269 + -1.15559 1.24705 -1.69839 0.233247 0.968775 0.0840832 + -1.14674 1.25181 -1.73084 0.124247 0.938051 0.323456 + -1.14005 1.23548 -1.6827 0.773546 0.460447 0.435449 + -1.1216 1.21657 -1.69108 0.683372 0.55418 0.475276 + -1.11538 1.23673 -1.7187 0.460284 0.699311 0.546903 + -1.12011 1.26981 -1.78105 0.0104717 0.993792 0.110756 + -1.12101 1.20809 -1.68446 0.735095 0.457936 0.49993 + -1.08343 1.1595 -1.69198 0.731326 0.491405 0.472951 + -1.0772 1.17965 -1.71961 0.780871 0.436186 0.447193 + -1.08338 1.23484 -1.76714 0.861807 0.388328 0.326329 + -1.08874 1.25473 -1.76892 0.693427 0.627103 0.354825 + -1.12257 1.19901 -1.67431 0.765491 0.439672 0.4698 + -1.08845 1.16054 -1.68583 0.702295 0.491362 0.515116 + -1.10764 1.15354 -1.6541 0.743204 0.493837 0.451412 + -1.09001 1.15145 -1.67567 0.666241 0.516837 0.53759 + -1.07935 1.13428 -1.67115 0.558308 0.73313 0.388346 + -1.06831 1.13347 -1.6858 0.559514 0.731183 0.390275 + -1.12523 1.17286 -1.63994 0.843722 0.440262 0.307087 + -1.10786 1.13774 -1.63375 0.676676 0.692175 0.251005 + -1.09697 1.13638 -1.64958 0.572945 0.733106 0.366456 + -1.09287 1.13322 -1.6451 0.234372 0.967523 0.0947054 + -1.07244 1.1308 -1.6701 0.214581 0.972135 0.0943862 + -1.10917 1.13841 -1.6301 0.744588 0.64682 0.164962 + -1.10375 1.13459 -1.62927 0.313406 0.946367 0.0785241 + -1.11518 1.14157 -1.61069 0.795907 0.588065 0.143917 + -1.10792 1.13486 -1.61614 0.396428 0.916976 0.0447292 + -1.09318 1.13501 -1.59889 -0.0225756 0.998791 -0.0436686 + -1.06772 1.13385 -1.63014 -0.0166203 0.996653 -0.0800437 + -1.12508 1.14782 -1.57819 0.802741 0.578767 0.143649 + -1.11393 1.13803 -1.59673 0.516961 0.854926 0.0430419 + -1.09734 1.13528 -1.58575 0.00605762 0.999704 -0.0235447 + -1.05145 1.14076 -1.55772 0.0269644 0.997118 0.0709071 + -1.026 1.1396 -1.58897 0.0133328 0.998487 -0.0533424 + -1.13034 1.15099 -1.56329 0.768774 0.601694 0.216682 + -1.12257 1.14348 -1.56836 0.685363 0.723943 0.0786301 + -1.11314 1.13602 -1.57487 0.342866 0.939144 0.0212346 + -1.10211 1.13791 -1.52383 0.0537726 0.994806 0.0864288 + -1.13097 1.14954 -1.55934 0.581345 0.772665 0.255004 + -1.12783 1.14665 -1.55347 0.646818 0.76134 0.0445799 + -1.12178 1.14147 -1.54651 0.60311 0.797592 0.0102085 + -1.11791 1.13865 -1.51295 0.427715 0.898547 0.0983524 + -1.1046 1.13139 -1.49304 0.434298 0.415728 0.799096 + -1.1304 1.14888 -1.5377 0.672577 0.739937 -0.01153 + -1.12653 1.14606 -1.50415 0.775354 0.591616 0.220947 + -1.13386 1.14237 -1.48701 0.221928 0.293768 0.929757 + -1.11446 1.10698 -1.49489 0.29937 -0.314541 0.9008 + -1.05394 1.13424 -1.52692 0.428142 0.558098 0.710789 + -1.14372 1.11795 -1.48887 -0.186679 -0.223078 0.956759 + -1.12869 1.08069 -1.50374 0.232113 -0.536397 0.81142 + -1.09287 1.10325 -1.50889 0.492498 -0.3841 0.780969 + -1.03235 1.13051 -1.54092 0.552382 0.337196 0.762347 + -0.999891 1.13813 -1.5774 0.481411 0.796235 0.366406 + -1.17155 1.12216 -1.49978 -0.30745 -0.0241445 0.951258 + -1.17813 1.08863 -1.50066 -0.136299 -0.130837 0.98199 + -1.17566 1.04028 -1.52032 0.171254 -0.555759 0.813513 + -1.05405 1.09393 -1.54388 0.439416 -0.581948 0.684288 + -1.01822 1.11649 -1.54903 0.625466 -0.141629 0.76729 + -1.25178 1.12568 -1.53153 -0.390272 0.0428611 0.919701 + -1.2251 1.04822 -1.51723 -0.21691 -0.174327 0.9605 + -1.26669 0.996962 -1.53783 -0.257195 -0.133228 0.957132 + -1.15987 1.02611 -1.5406 0.331425 -0.504712 0.797134 + -1.28649 1.12987 -1.54719 -0.534693 0.204524 0.819922 + -1.2598 1.05241 -1.5329 -0.440201 -0.00444185 0.897888 + -1.30278 1.15409 -1.57476 -0.672972 0.52839 0.517602 + -1.31696 1.10538 -1.56332 -0.643491 0.133371 0.753745 + -1.32384 1.04994 -1.56825 -0.636775 -0.00811588 0.771007 + -1.33324 1.12961 -1.59089 -0.837511 0.404491 0.367372 + -1.35127 1.06406 -1.60065 -0.9218 0.108571 0.372151 + -1.3307 0.948515 -1.57777 -0.655872 -0.0559886 0.752793 + -1.33758 1.12621 -1.6301 -0.909445 0.414581 0.032126 + -1.35561 1.06066 -1.63986 -0.987661 0.155767 0.0161997 + -1.36051 0.965594 -1.63921 -0.999318 0.0347534 0.0124411 + -1.35813 0.962637 -1.61017 -0.92529 0.0114431 0.379088 + -1.30765 1.16858 -1.66663 -0.79448 0.607075 -0.0161678 + -1.33756 1.12735 -1.6807 -0.909474 0.413124 -0.0467562 + -1.353 1.05999 -1.68694 -0.986757 0.139214 -0.083241 + -1.30432 1.16844 -1.72478 -0.784255 0.599512 -0.159781 + -1.33158 1.12212 -1.74451 -0.892684 0.393691 -0.219369 + -1.34702 1.05476 -1.75074 -0.965512 0.104425 -0.2385 + -1.3467 0.967896 -1.74254 -0.955544 -0.0526543 -0.290109 + -1.35789 0.964919 -1.68628 -0.991809 0.0181614 -0.126428 + -1.25695 1.20615 -1.7733 -0.691642 0.673097 -0.261861 + -1.28331 1.16656 -1.78776 -0.753806 0.587742 -0.29383 + -1.31057 1.12024 -1.80749 -0.837042 0.364792 -0.407784 + -1.32535 1.05232 -1.80703 -0.887057 0.0773299 -0.455137 + -1.19359 1.23505 -1.82475 -0.419456 0.854243 -0.307125 + -1.22478 1.21164 -1.8386 -0.582233 0.722302 -0.373208 + -1.25114 1.17205 -1.85306 -0.701379 0.518325 -0.489292 + -1.26801 1.1126 -1.87214 -0.745186 0.26811 -0.610586 + -1.28279 1.04467 -1.87168 -0.763994 0.0206289 -0.644893 + -1.15778 1.25235 -1.80808 -0.310736 0.925767 -0.215405 + -1.13853 1.24819 -1.84913 -0.215625 0.874465 -0.434531 + -1.16126 1.22772 -1.86882 -0.294339 0.773852 -0.560819 + -1.19245 1.20432 -1.88267 -0.40641 0.656733 -0.635242 + -1.21375 1.16608 -1.89675 -0.521956 0.457768 -0.719729 + -1.10086 1.26565 -1.8221 0.078099 0.936389 -0.342164 + -1.10685 1.23112 -1.87862 0.137703 0.772327 -0.62012 + -1.12959 1.21066 -1.89831 -0.109243 0.611496 -0.78367 + -1.16024 1.18686 -1.90753 -0.181874 0.482633 -0.856731 + -1.18154 1.14862 -1.92161 -0.221684 0.362805 -0.905112 + -1.08652 1.26484 -1.8125 0.662975 0.739671 -0.115547 + -1.09251 1.23031 -1.86901 0.523146 0.726083 -0.446231 + -1.08924 1.199 -1.90521 0.226763 0.361181 -0.904504 + -1.1199 1.1752 -1.91443 0.0693779 0.255317 -0.964365 + -1.12806 1.14005 -1.92234 0.143658 0.236854 -0.960865 + -1.08115 1.24495 -1.81071 0.913911 0.403845 -0.0409388 + -1.07628 1.23323 -1.82709 0.716987 0.673658 -0.179208 + -1.08764 1.2186 -1.8854 -0.0570125 0.793379 -0.606052 + -1.06864 1.19837 -1.89783 0.479789 0.439876 -0.759152 + -1.07014 1.21301 -1.77236 0.885817 0.393767 0.24551 + -1.06911 1.22632 -1.80518 0.872861 0.475095 0.111347 + -1.05986 1.21106 -1.85611 0.805129 0.593015 -0.0100665 + -1.06703 1.21797 -1.87802 0.62398 0.680078 -0.384894 + -1.06396 1.15782 -1.72483 0.827478 0.429376 0.361824 + -1.05999 1.17763 -1.76494 0.910434 0.353712 0.21447 + -1.05896 1.19094 -1.79776 0.929684 0.342674 0.135138 + -1.05943 1.14206 -1.71456 0.366442 0.819707 0.440228 + -1.05545 1.16187 -1.75467 0.590011 0.717794 0.369674 + -1.05414 1.17831 -1.79423 0.653776 0.706785 0.270245 + -1.05504 1.19843 -1.85259 0.541744 0.647105 0.53644 + -1.06328 1.13243 -1.69196 0.321215 0.903325 0.284297 + -1.05648 1.14191 -1.71326 -0.373283 0.869794 0.322675 + -1.05115 1.15936 -1.75153 -0.231955 0.894033 0.383278 + -1.04984 1.1758 -1.7911 0.138394 0.940918 0.309065 + -1.06034 1.13228 -1.69065 -0.0676292 0.936335 0.344534 + -1.04408 1.15099 -1.71148 -0.525715 0.74924 0.40282 + -1.03874 1.16844 -1.74975 -0.590614 0.781073 0.202731 + -1.03559 1.17519 -1.79432 -0.106554 0.992456 0.0606458 + -1.04079 1.19782 -1.85581 0.622197 0.782675 -0.0170445 + -1.0614 1.12998 -1.68476 0.128998 0.96563 0.225652 + -1.03405 1.1332 -1.68362 -0.214049 0.838197 0.501606 + -1.03005 1.14648 -1.69451 -0.391976 0.650539 0.650502 + -1.00964 1.18895 -1.7286 -0.388124 0.874277 0.291546 + -1.00648 1.1957 -1.77317 -0.1889 0.97201 -0.139694 + -1.04729 1.13142 -1.65514 -0.0217426 0.996611 -0.0793298 + -1.03512 1.1309 -1.67772 -0.09636 0.98406 0.149465 + -0.986618 1.13712 -1.671 -0.200551 0.802443 0.562019 + -0.982616 1.1504 -1.68189 -0.144633 0.674377 0.724084 + -0.995607 1.18444 -1.71163 -0.203481 0.773205 0.600623 + -0.999435 1.13483 -1.64199 0.0095085 0.998627 -0.051512 + -0.98726 1.13431 -1.66458 -0.0946696 0.976705 0.192575 + -0.961984 1.1384 -1.66464 0.176129 0.824478 0.537786 + -0.960015 1.15492 -1.68632 0.244961 0.722833 0.646147 + -0.973007 1.18895 -1.71607 0.162 0.881003 0.44451 + -0.973326 1.13336 -1.63041 0.460189 0.8677 0.187942 + -0.962626 1.13559 -1.65822 0.419187 0.849423 0.320568 + -1.04301 1.16369 -1.89506 0.641505 0.209774 -0.737879 + -1.05117 1.12854 -1.90297 0.46863 0.0867594 -0.879124 + -1.01517 1.16314 -1.85303 0.560835 0.672519 -0.482889 + -0.988936 1.16213 -1.8385 0.40744 0.716395 -0.566366 + -0.977838 1.14693 -1.8422 0.723758 0.222992 -0.65303 + -0.998882 1.12702 -1.86773 0.690737 0.0460577 -0.721638 + -1.07232 1.0927 -1.91396 0.428812 -0.130145 -0.89397 + -0.980251 1.19469 -1.75863 0.12658 0.989644 -0.0676923 + -0.94695 1.18602 -1.7729 0.48833 0.832204 -0.262622 + -0.935851 1.17081 -1.7766 0.878816 0.325905 -0.348523 + -0.935857 1.13387 -1.77346 0.92725 -0.19477 -0.319799 + -0.956901 1.11396 -1.79899 0.821214 -0.339429 -0.45869 + -0.939705 1.18028 -1.73033 0.675076 0.686576 0.269973 + -0.931083 1.16012 -1.73146 0.960105 0.197341 0.198129 + -0.931089 1.12317 -1.72831 0.980433 -0.174479 0.091144 + -0.961336 1.05217 -1.72489 0.895242 -0.440978 -0.0638771 + -0.957499 1.15374 -1.6868 0.63839 0.543671 0.544868 + -0.948877 1.13357 -1.68792 0.894693 0.164174 0.415416 + -0.9502 1.09972 -1.68082 0.931964 -0.189302 0.309205 + -0.980447 1.02872 -1.6774 0.856722 -0.427014 0.289285 + -0.959468 1.13722 -1.66512 0.757239 0.449467 0.473888 + -0.958693 1.12583 -1.66401 0.923881 0.0713782 0.375965 + -0.960016 1.09198 -1.65691 0.935204 -0.231583 0.267885 + -1.00444 1.01455 -1.64558 0.757798 -0.465029 0.4577 + -1.03712 0.93285 -1.67943 0.807823 -0.506017 0.302273 + -0.961898 1.13456 -1.65811 0.8641 0.342155 0.369136 + -0.961123 1.12317 -1.657 0.93835 0.0745864 0.337544 + -0.966322 1.11954 -1.63973 0.943453 0.125872 0.30668 + -0.965214 1.08835 -1.63965 0.922635 -0.248744 0.294739 + -0.972599 1.13233 -1.6303 0.852504 0.403099 0.332789 + -0.979487 1.11131 -1.59494 0.883959 -0.0678965 0.462608 + -0.992963 1.08999 -1.58691 0.679336 -0.410759 0.608095 + -0.97869 1.06703 -1.63161 0.808976 -0.460306 0.365617 + -0.985764 1.1241 -1.58551 0.819341 0.247266 0.517242 + -1.03826 1.07976 -1.56416 0.446988 -0.513588 0.732413 + -1.02023 1.03424 -1.60761 0.592786 -0.493577 0.636385 + -1.06552 1.02402 -1.58486 0.431567 -0.465307 0.772812 + -1.1043 0.977292 -1.58919 0.430605 -0.403009 0.807566 + -1.04598 0.98177 -1.62157 0.593446 -0.47395 0.650533 + -1.08365 0.92021 -1.6318 0.484688 -0.463338 0.741886 + -1.06112 0.918685 -1.64761 0.650244 -0.484492 0.585192 + -1.19864 0.979392 -1.54493 0.212781 -0.24088 0.946943 + -1.21682 0.926985 -1.55393 0.249666 -0.307984 0.918048 + -1.14197 0.915734 -1.59942 0.445605 -0.417303 0.792019 + -1.28486 0.944555 -1.54683 -0.292539 -0.120495 0.948632 + -1.29003 0.878772 -1.56184 -0.235722 -0.31146 0.920558 + -1.24364 0.873129 -1.56804 0.22376 -0.41958 0.879707 + -1.1688 0.861879 -1.61352 0.511217 -0.572815 0.640734 + -1.33586 0.882732 -1.59277 -0.6367 -0.158724 0.754599 + -1.3311 0.828058 -1.60292 -0.506381 -0.235732 0.829463 + -1.29043 0.824147 -1.59318 -0.0849646 -0.394886 0.914793 + -1.24404 0.818505 -1.59938 0.313648 -0.456375 0.832674 + -1.36025 0.886229 -1.61648 -0.900588 -0.0728978 0.428518 + -1.35549 0.831554 -1.62663 -0.843479 -0.0971261 0.528308 + -1.36057 0.765387 -1.63744 -0.802727 -0.0312921 0.595525 + -1.33929 0.763181 -1.62236 -0.42135 -0.169906 0.89084 + -1.29862 0.759271 -1.61262 -0.0593078 -0.262465 0.963117 + -1.36263 0.889184 -1.64552 -0.999225 0.0302591 -0.0251901 + -1.36415 0.834711 -1.65179 -0.996871 0.0135084 0.0778825 + -1.36923 0.768544 -1.66259 -0.992765 0.0931242 0.0758048 + -1.35755 0.891501 -1.68179 -0.981983 -0.00598264 -0.188876 + -1.35907 0.837027 -1.68806 -0.940961 0.0707402 -0.331041 + -1.36453 0.767713 -1.6887 -0.933128 0.12783 -0.336053 + -1.37998 0.688661 -1.67276 -0.986713 0.147294 0.0685649 + -1.34636 0.894477 -1.73805 -0.846224 -0.129515 -0.516847 + -1.3389 0.837203 -1.72269 -0.792548 -0.0575711 -0.607086 + -1.34436 0.767888 -1.72333 -0.747919 0.110828 -0.654473 + -1.36143 0.682262 -1.7248 -0.748795 0.126558 -0.650607 + -1.37528 0.68783 -1.69886 -0.922368 0.161823 -0.350787 + -1.32271 0.888801 -1.75658 -0.475248 -0.267235 -0.838287 + -1.31525 0.831528 -1.74122 -0.391519 -0.128805 -0.91111 + -1.32367 0.764451 -1.74011 -0.380362 0.0609298 -0.922828 + -1.31465 0.889273 -1.76194 -0.76204 -0.580068 -0.287778 + -1.28797 0.866962 -1.73616 0.258117 -0.439166 -0.860528 + -1.28675 0.827511 -1.74491 0.248239 0.0274827 -0.968309 + -1.29517 0.760435 -1.74379 0.126475 -0.0316701 -0.991464 + -1.31543 0.895608 -1.78808 -0.883307 -0.348088 -0.314012 + -1.27992 0.832313 -1.76981 -0.964941 -0.20549 0.163289 + -1.27991 0.867435 -1.74151 -0.589249 -0.786826 0.183549 + -1.25538 0.857214 -1.71958 0.433939 -0.370166 -0.821385 + -1.32503 0.965453 -1.79882 -0.882958 -0.118448 -0.454264 + -1.2885 0.895743 -1.82849 -0.752232 -0.272463 -0.599926 + -1.26984 0.839253 -1.81832 -0.793728 -0.203505 -0.57322 + -1.2807 0.838646 -1.79595 -0.925832 -0.275072 -0.259172 + -1.2981 0.965589 -1.83923 -0.774983 -0.144185 -0.615314 + -1.26695 0.894931 -1.8507 -0.594654 -0.273573 -0.756006 + -1.24829 0.838441 -1.84053 -0.616306 -0.186162 -0.765187 + -1.25826 0.763103 -1.82955 -0.652943 0.0485137 -0.755852 + -1.26993 0.764796 -1.81515 -0.835315 0.0870977 -0.542828 + -1.24683 1.04103 -1.90683 -0.579888 -0.078901 -0.810866 + -1.26214 0.961948 -1.87438 -0.582076 -0.219862 -0.782847 + -1.23521 0.892172 -1.86625 -0.265912 -0.28973 -0.919428 + -1.23163 0.837205 -1.85103 -0.283736 -0.199385 -0.937944 + -1.24161 0.761868 -1.84005 -0.304829 -0.0524921 -0.950959 + -1.23062 1.10662 -1.91583 -0.562408 0.209926 -0.799768 + -1.20421 1.03673 -1.9268 -0.219289 -0.219022 -0.950759 + -1.23039 0.959189 -1.88993 -0.254691 -0.320733 -0.912284 + -1.20377 0.888107 -1.86701 0.0862194 -0.299128 -0.95031 + -1.188 1.10233 -1.93581 -0.199873 0.123153 -0.972051 + -1.15876 1.03287 -1.92612 0.13594 -0.327879 -0.934888 + -1.18494 0.955324 -1.88926 0.107907 -0.402031 -0.909245 + -1.13452 1.09375 -1.93653 0.180881 0.00568228 -0.983489 + -1.09656 1.03181 -1.90356 0.446193 -0.406472 -0.797303 + -1.13972 0.947954 -1.87361 0.402614 -0.437176 -0.804226 + -1.15854 0.880738 -1.85136 0.417151 -0.295916 -0.859313 + -1.04309 1.03272 -1.86026 0.649039 -0.459616 -0.606219 + -1.08625 0.948863 -1.83031 0.612569 -0.45869 -0.64371 + -1.12481 0.87388 -1.82472 0.645294 -0.321917 -0.692795 + -1.16808 0.828247 -1.84439 0.405757 -0.224436 -0.885996 + -1.20019 0.833142 -1.85179 0.0821968 -0.211977 -0.973812 + -1.02003 1.09118 -1.87873 0.652416 -0.306213 -0.693244 + -0.979965 1.0555 -1.78051 0.807229 -0.44619 -0.386389 + -1.04295 0.938143 -1.77506 0.769567 -0.458511 -0.444449 + -1.0815 0.863159 -1.76947 0.779966 -0.454658 -0.430046 + -1.02432 0.934806 -1.71944 0.867248 -0.497598 -0.0166589 + -1.07187 0.858508 -1.73225 0.820758 -0.570805 -0.0231943 + -1.12004 0.816937 -1.78948 0.818467 -0.401411 -0.411072 + -1.13435 0.821389 -1.81775 0.729012 -0.276011 -0.626386 + -1.08468 0.856552 -1.69225 0.725396 -0.61261 0.313864 + -1.11669 0.810805 -1.72692 0.740051 -0.617224 0.267132 + -1.11041 0.812285 -1.75226 0.821316 -0.566217 -0.0695551 + -1.15065 0.7456 -1.76694 0.878009 -0.478635 -0.00302057 + -1.15429 0.746264 -1.79033 0.849647 -0.425348 -0.311735 + -1.09781 0.856221 -1.66961 0.564729 -0.625645 0.538191 + -1.12983 0.810472 -1.70429 0.596127 -0.63071 0.496827 + -1.16417 0.74514 -1.72641 0.688353 -0.475692 0.547619 + -1.15693 0.74412 -1.7416 0.817737 -0.497499 0.289486 + -1.12035 0.857744 -1.65381 0.210287 -0.553266 0.806025 + -1.14075 0.811055 -1.6949 0.286026 -0.604535 0.743456 + -1.17509 0.745721 -1.71702 0.425244 -0.389938 0.816771 + -1.14508 0.857131 -1.65365 0.185317 -0.774849 0.604373 + -1.16548 0.81044 -1.69474 0.0133857 -0.469183 0.883 + -1.1907 0.748059 -1.71192 0.149476 -0.258656 0.954334 + -1.21592 0.662056 -1.72454 0.442536 -0.276745 0.85298 + -1.15275 0.856415 -1.64339 0.518608 -0.821939 0.235503 + -1.18493 0.849387 -1.68039 -0.296294 -0.760227 0.578156 + -1.19112 0.813612 -1.69258 -0.260851 -0.283671 0.922761 + -1.21634 0.751233 -1.70976 -0.130893 -0.128592 0.983021 + -1.2038 0.80959 -1.64923 0.816235 -0.526653 0.23748 + -1.19259 0.848672 -1.67012 0.533736 -0.749676 -0.391296 + -1.21685 0.851241 -1.69701 -0.205818 -0.924368 0.32122 + -1.22304 0.815468 -1.70921 -0.534893 -0.078298 0.841284 + -1.23805 0.754552 -1.71673 -0.456727 0.0331711 0.888988 + -1.21985 0.815055 -1.61937 0.579261 -0.552402 0.599423 + -1.24668 0.751744 -1.6372 0.65626 -0.420439 0.626541 + -1.23437 0.748589 -1.65778 0.83242 -0.434956 0.343353 + -1.1988 0.810177 -1.67648 0.923295 -0.245162 -0.295673 + -1.27087 0.755194 -1.61721 0.33568 -0.362953 0.869244 + -1.29516 0.680623 -1.63684 0.356918 -0.302108 0.883934 + -1.27825 0.67452 -1.65169 0.664624 -0.3768 0.64521 + -1.26595 0.671366 -1.67227 0.838794 -0.410489 0.357664 + -1.22937 0.749173 -1.68503 0.917546 -0.35948 -0.169954 + -1.32291 0.684698 -1.63226 -0.0565957 -0.176729 0.982631 + -1.34395 0.612136 -1.64165 -0.0384887 -0.0723164 0.996639 + -1.3278 0.606846 -1.64451 0.361937 -0.225801 0.904442 + -1.31089 0.600744 -1.65936 0.662737 -0.347735 0.66322 + -1.35212 0.687546 -1.639 -0.411111 -0.0666491 0.909145 + -1.37316 0.614981 -1.64839 -0.411776 0.0551519 0.909614 + -1.38826 0.545838 -1.64715 -0.41253 -0.000709895 0.910944 + -1.37589 0.541235 -1.64422 -0.0791485 -0.11612 0.990077 + -1.35974 0.535943 -1.64708 0.303378 -0.251926 0.918964 + -1.3734 0.68975 -1.65408 -0.805994 0.0598112 0.588894 + -1.38608 0.61591 -1.65754 -0.79111 0.145988 0.593997 + -1.40118 0.546766 -1.6563 -0.791716 0.0694493 0.606929 + -1.39819 0.503755 -1.65766 -0.618787 -0.395946 0.678476 + -1.38582 0.499151 -1.65473 -0.133645 -0.54085 0.830434 + -1.39266 0.61482 -1.67623 -0.983018 0.173513 0.0597387 + -1.4047 0.544119 -1.66455 -0.98952 0.0496573 0.135587 + -1.40171 0.501108 -1.66591 -0.874062 -0.442184 0.201219 + -1.39721 0.492211 -1.67724 -0.732737 -0.647838 -0.208333 + -1.39059 0.610268 -1.69228 -0.933316 0.131539 -0.334094 + -1.40264 0.539568 -1.6806 -0.965288 0.018016 -0.260567 + -1.39814 0.53067 -1.69193 -0.843184 -0.101343 -0.527987 + -1.37674 0.604702 -1.71822 -0.76852 0.0508278 -0.637804 + -1.36507 0.59865 -1.72853 -0.434249 -0.103099 -0.894873 + -1.38647 0.524618 -1.70224 -0.526548 -0.260895 -0.809124 + -1.37838 0.519222 -1.70333 -0.083132 -0.473219 -0.877013 + -1.38912 0.486813 -1.67833 -0.229277 -0.925448 -0.301625 + -1.34073 0.678825 -1.74158 -0.384824 0.0306201 -0.922482 + -1.3448 0.594307 -1.7314 0.0631948 -0.274048 -0.959638 + -1.32047 0.67448 -1.74446 0.0937599 -0.105011 -0.990041 + -1.32986 0.59129 -1.72547 0.436207 -0.387375 -0.812197 + -1.36343 0.516208 -1.69739 0.366982 -0.587052 -0.721591 + -1.37942 0.486098 -1.66976 0.209021 -0.969626 0.127025 + -1.27009 0.75642 -1.73415 0.505485 -0.107906 -0.856061 + -1.29539 0.670466 -1.73482 0.488378 -0.22358 -0.843504 + -1.30815 0.589689 -1.70631 0.711051 -0.461767 -0.530263 + -1.35373 0.515493 -1.68883 0.616047 -0.636111 -0.464596 + -1.25415 0.817762 -1.72833 0.574157 0.0596323 -0.816571 + -1.24023 0.75033 -1.70818 0.772867 -0.203311 -0.601116 + -1.27368 0.668865 -1.71566 0.742142 -0.314891 -0.591667 + -1.30116 0.591384 -1.69213 0.870314 -0.485337 -0.0836741 + -1.34673 0.517187 -1.67464 0.777869 -0.626086 0.0541774 + -1.22429 0.811672 -1.70237 0.682156 -0.0598078 -0.728756 + -1.26282 0.667708 -1.69251 0.906823 -0.40609 -0.112972 + -1.30428 0.59504 -1.67189 0.815265 -0.427575 0.390541 + -1.34704 0.522626 -1.66585 0.734782 -0.502853 0.455229 + -1.21809 0.850167 -1.696 0.526666 -0.446044 -0.723649 + -1.25413 0.858289 -1.72059 0.208099 -0.786046 -0.582088 + -1.35365 0.528329 -1.65332 0.556322 -0.412501 0.721352 + -1.37972 0.491535 -1.66098 0.124974 -0.762276 0.635072 + -1.24979 0.66784 -1.71765 -0.112638 -0.0326382 0.9931 + -1.23153 0.664393 -1.71944 0.176531 -0.155192 0.971984 + -1.2715 0.671159 -1.72463 -0.450643 0.109135 0.886008 + -1.29816 0.588448 -1.72706 -0.443615 0.119314 0.88824 + -1.28508 0.586268 -1.72283 -0.113897 -0.00515318 0.993479 + -1.26683 0.582821 -1.72462 0.184181 -0.129991 0.974258 + -1.25756 0.580225 -1.72786 0.446164 -0.251055 0.859017 + -1.28955 0.672873 -1.73814 -0.674392 0.189741 0.713578 + -1.31621 0.590162 -1.74058 -0.685128 0.197335 0.701184 + -1.33453 0.50927 -1.73622 -0.693294 0.0812979 0.716054 + -1.32646 0.508505 -1.73018 -0.464583 0.0186473 0.885333 + -1.31338 0.506325 -1.72595 -0.129231 -0.101578 0.986398 + -1.26296 0.759495 -1.73507 -0.68021 0.13025 0.721353 + -1.27643 0.761618 -1.75234 -0.86222 0.148656 0.48423 + -1.30303 0.674996 -1.75542 -0.862277 0.245344 0.44304 + -1.32451 0.590198 -1.75123 -0.867476 0.231661 0.440248 + -1.24795 0.820411 -1.72754 -0.624756 -0.0924609 0.775327 + -1.27373 0.829557 -1.74847 -0.8414 -0.121963 0.52647 + -1.28262 0.764374 -1.77369 -0.983958 0.150091 0.0964282 + -1.30777 0.674078 -1.7713 -0.961895 0.259908 0.0848916 + -1.32925 0.58928 -1.76711 -0.971299 0.226082 0.0739249 + -1.25413 0.858289 -1.72059 -0.61572 -0.238468 0.751013 + -1.28079 0.764191 -1.79278 -0.955152 0.134387 -0.263863 + -1.30594 0.673894 -1.79039 -0.934884 0.230209 -0.270178 + -1.32841 0.587097 -1.77896 -0.947175 0.175993 -0.268117 + -1.34511 0.507897 -1.75403 -0.990582 0.0831378 0.108793 + -1.34282 0.509307 -1.74687 -0.886829 0.110661 0.448652 + -1.29853 0.670716 -1.80716 -0.827046 0.17455 -0.534348 + -1.321 0.583919 -1.79573 -0.84331 0.108462 -0.526368 + -1.34128 0.502486 -1.77348 -0.879601 -0.0519997 -0.472861 + -1.34427 0.505713 -1.76588 -0.972061 0.0335479 -0.23232 + -1.28687 0.669023 -1.82156 -0.660963 0.100971 -0.743594 + -1.31422 0.580905 -1.80472 -0.683627 0.0211274 -0.729525 + -1.3345 0.499472 -1.78246 -0.727215 -0.133726 -0.673257 + -1.34018 0.460173 -1.75922 -0.721267 -0.662777 -0.201248 + -1.34317 0.463401 -1.75163 -0.83499 -0.535898 0.124922 + -1.27515 0.666054 -1.82951 -0.330546 -0.033392 -0.943199 + -1.3025 0.577936 -1.81267 -0.353727 -0.124803 -0.926985 + -1.3295 0.496792 -1.78609 -0.421067 -0.291774 -0.858819 + -1.33518 0.457491 -1.76285 -0.387157 -0.813576 -0.433825 + -1.32506 0.454956 -1.76054 0.126224 -0.945408 -0.300452 + -1.22073 0.758715 -1.84149 0.0617394 -0.146667 -0.987257 + -1.25427 0.662903 -1.83094 0.0529423 -0.17021 -0.983985 + -1.29003 0.575013 -1.81366 0.0185095 -0.259151 -0.965659 + -1.31703 0.493869 -1.78709 -0.0330283 -0.419408 -0.907197 + -1.18862 0.753823 -1.83409 0.393387 -0.24493 -0.886147 + -1.23124 0.659392 -1.82564 0.368974 -0.283606 -0.885113 + -1.26701 0.571504 -1.80835 0.362422 -0.371118 -0.85494 + -1.30691 0.491333 -1.78477 0.284784 -0.517688 -0.806782 + -1.1686 0.750717 -1.8186 0.687829 -0.348035 -0.636995 + -1.21123 0.656288 -1.81015 0.693421 -0.398107 -0.600565 + -1.25483 0.570414 -1.79884 0.672462 -0.457695 -0.581644 + -1.29473 0.490244 -1.77525 0.630615 -0.591165 -0.50284 + -1.20059 0.656724 -1.78915 0.84698 -0.449841 -0.283315 + -1.24419 0.570849 -1.77784 0.839321 -0.487404 -0.240787 + -1.28979 0.491493 -1.7658 0.781526 -0.592364 -0.19576 + -1.32012 0.456206 -1.75109 0.339759 -0.928743 0.148326 + -1.19694 0.656058 -1.76576 0.883955 -0.464723 0.0515346 + -1.2417 0.572741 -1.76335 0.876001 -0.476175 0.0766831 + -1.2873 0.493385 -1.75131 0.809403 -0.570089 0.140946 + -1.32163 0.459255 -1.74252 0.246058 -0.835561 0.491216 + -1.33281 0.464045 -1.73842 -0.364345 -0.550672 0.751008 + -1.20104 0.658888 -1.74681 0.834271 -0.442455 0.328976 + -1.24579 0.575573 -1.74439 0.826078 -0.437528 0.355195 + -1.28881 0.496432 -1.74274 0.763788 -0.516423 0.387214 + -1.29293 0.498939 -1.73328 0.632428 -0.4608 0.622655 + -1.32487 0.461252 -1.73929 0.00788462 -0.705532 0.708634 + -1.20827 0.65991 -1.73162 0.709103 -0.393732 0.584934 + -1.24991 0.578077 -1.73494 0.704896 -0.375251 0.60192 + -1.29617 0.500936 -1.73006 0.393521 -0.330076 0.858016 + -1.30544 0.503532 -1.72682 0.146181 -0.223438 0.963694 + -1.34088 0.46481 -1.74447 -0.701639 -0.490977 0.516377 + 1.21809 0.850167 -1.696 -0.548293 -0.43388 -0.714929 + 1.21685 0.851241 -1.69701 0.197383 -0.922357 0.332112 + 1.25413 0.858289 -1.72059 -0.208099 -0.786046 -0.582088 + 1.19259 0.848672 -1.67012 -0.511167 -0.623797 -0.591258 + 1.18493 0.849387 -1.68039 0.190407 -0.815477 0.546573 + 1.22304 0.815468 -1.70921 0.518788 -0.107786 0.848081 + 1.25413 0.858289 -1.72059 0.625772 -0.225621 0.746662 + 1.25538 0.857214 -1.71958 -0.421665 -0.35137 -0.835905 + 1.25415 0.817762 -1.72833 -0.549194 0.0365944 -0.834893 + 1.22429 0.811672 -1.70237 -0.681171 -0.0501868 -0.730402 + 1.1988 0.810177 -1.67648 -0.857195 -0.332449 -0.393312 + 1.15275 0.856415 -1.64339 -0.626169 -0.72323 0.291291 + 1.27991 0.867435 -1.74151 0.569222 -0.764404 0.302774 + 1.28797 0.866962 -1.73616 -0.109099 -0.49856 -0.859962 + 1.28675 0.827511 -1.74491 -0.196893 0.0947836 -0.975833 + 1.29517 0.760435 -1.74379 -0.135655 -0.0233792 -0.99048 + 1.27009 0.75642 -1.73415 -0.499556 -0.0934479 -0.861226 + 1.24023 0.75033 -1.70818 -0.753126 -0.224603 -0.618348 + 1.31465 0.889273 -1.76194 0.710133 -0.618406 -0.336579 + 1.32271 0.888801 -1.75658 0.443989 -0.469326 -0.763287 + 1.31525 0.831528 -1.74122 0.311686 -0.0395906 -0.94936 + 1.32367 0.764451 -1.74011 0.381067 0.0621822 -0.922454 + 1.27373 0.829557 -1.74847 0.810154 -0.176227 0.559102 + 1.27992 0.832313 -1.76981 0.961408 -0.254101 0.105481 + 1.2807 0.838646 -1.79595 0.927453 -0.249346 -0.278671 + 1.31543 0.895608 -1.78808 0.913532 -0.304259 -0.269972 + 1.32503 0.965453 -1.79882 0.87695 -0.113739 -0.466928 + 1.24795 0.820411 -1.72754 0.62223 -0.0906251 0.777571 + 1.26296 0.759495 -1.73507 0.671479 0.10361 0.733744 + 1.27643 0.761618 -1.75234 0.873216 0.130011 0.469672 + 1.28262 0.764374 -1.77369 0.984603 0.141256 0.102976 + 1.23805 0.754552 -1.71673 0.443221 0.0446638 0.895299 + 1.2715 0.671159 -1.72463 0.449938 0.10697 0.886631 + 1.28955 0.672873 -1.73814 0.674795 0.189325 0.713308 + 1.30303 0.674996 -1.75542 0.862185 0.243559 0.444204 + 1.21634 0.751233 -1.70976 0.141813 -0.104214 0.984392 + 1.24979 0.66784 -1.71765 0.112364 -0.0324403 0.993137 + 1.28508 0.586268 -1.72283 0.113872 -0.00523079 0.993482 + 1.29816 0.588448 -1.72706 0.443642 0.119288 0.88823 + 1.31621 0.590162 -1.74058 0.684747 0.195752 0.701999 + 1.19112 0.813612 -1.69258 0.202745 -0.241276 0.949042 + 1.1907 0.748059 -1.71192 -0.16271 -0.248935 0.954755 + 1.23153 0.664393 -1.71944 -0.17639 -0.154736 0.972082 + 1.26683 0.582821 -1.72462 -0.184172 -0.129999 0.974259 + 1.16548 0.81044 -1.69474 0.0226165 -0.417339 0.908469 + 1.17509 0.745721 -1.71702 -0.419574 -0.369373 0.829169 + 1.21592 0.662056 -1.72454 -0.441814 -0.277283 0.853179 + 1.25756 0.580225 -1.72786 -0.446223 -0.251636 0.858816 + 1.14508 0.857131 -1.65365 -0.124138 -0.77728 0.616786 + 1.12035 0.857744 -1.65381 -0.267113 -0.640483 0.720022 + 1.14075 0.811055 -1.6949 -0.279355 -0.609574 0.741876 + 1.16417 0.74514 -1.72641 -0.690738 -0.473472 0.54654 + 1.20827 0.65991 -1.73162 -0.709149 -0.393261 0.585195 + 1.14197 0.915734 -1.59942 -0.448773 -0.443226 0.775986 + 1.08365 0.92021 -1.6318 -0.469013 -0.469758 0.7479 + 1.09781 0.856221 -1.66961 -0.556509 -0.631063 0.540424 + 1.12983 0.810472 -1.70429 -0.595984 -0.631843 0.495557 + 1.15693 0.74412 -1.7416 -0.818988 -0.492915 0.293757 + 1.1688 0.861879 -1.61352 -0.560633 -0.545675 0.622839 + 1.21682 0.926985 -1.55393 -0.255195 -0.305567 0.917335 + 1.19864 0.979392 -1.54493 -0.218822 -0.246223 0.944188 + 1.1043 0.977292 -1.58919 -0.422671 -0.407423 0.809541 + 1.04598 0.98177 -1.62157 -0.573951 -0.437501 0.692223 + 1.21985 0.815055 -1.61937 -0.576147 -0.51818 0.632095 + 1.24364 0.873129 -1.56804 -0.221803 -0.41454 0.882587 + 1.28486 0.944555 -1.54683 0.276366 -0.148209 0.949556 + 1.2038 0.80959 -1.64923 -0.736277 -0.600769 0.311404 + 1.23437 0.748589 -1.65778 -0.832457 -0.434978 0.343233 + 1.24668 0.751744 -1.6372 -0.655125 -0.421254 0.627181 + 1.24404 0.818505 -1.59938 -0.348707 -0.430911 0.832297 + 1.22937 0.749173 -1.68503 -0.906507 -0.398512 -0.139406 + 1.26282 0.667708 -1.69251 -0.9062 -0.407158 -0.114123 + 1.26595 0.671366 -1.67227 -0.836919 -0.412759 0.359439 + 1.27825 0.67452 -1.65169 -0.664823 -0.376757 0.645031 + 1.27087 0.755194 -1.61721 -0.333621 -0.357892 0.87213 + 1.27368 0.668865 -1.71566 -0.742318 -0.316019 -0.590843 + 1.30815 0.589689 -1.70631 -0.709063 -0.463714 -0.531224 + 1.30116 0.591384 -1.69213 -0.868888 -0.488436 -0.080394 + 1.30428 0.59504 -1.67189 -0.814595 -0.430454 0.388774 + 1.29539 0.670466 -1.73482 -0.48673 -0.224985 -0.844083 + 1.32986 0.59129 -1.72547 -0.436227 -0.387501 -0.812126 + 1.36343 0.516208 -1.69739 -0.366981 -0.587045 -0.721598 + 1.35373 0.515493 -1.68883 -0.616046 -0.636111 -0.464597 + 1.34673 0.517187 -1.67464 -0.777869 -0.626087 0.054178 + 1.32047 0.67448 -1.74446 -0.0934206 -0.10416 -0.990163 + 1.3448 0.594307 -1.7314 -0.0611467 -0.27569 -0.9593 + 1.37838 0.519222 -1.70333 0.0842907 -0.468101 -0.879646 + 1.38912 0.486813 -1.67833 0.225362 -0.925361 -0.304828 + 1.37942 0.486098 -1.66976 -0.211728 -0.969301 0.125008 + 1.34073 0.678825 -1.74158 0.385073 0.0304306 -0.922384 + 1.36507 0.59865 -1.72853 0.433895 -0.10473 -0.894855 + 1.38647 0.524618 -1.70224 0.520707 -0.25766 -0.813926 + 1.39721 0.492211 -1.67724 0.735598 -0.640528 -0.220498 + 1.34436 0.767888 -1.72333 0.746827 0.112378 -0.655455 + 1.36143 0.682262 -1.7248 0.74854 0.125395 -0.651125 + 1.37674 0.604702 -1.71822 0.768535 0.0509314 -0.637777 + 1.39814 0.53067 -1.69193 0.843978 -0.0967356 -0.527583 + 1.40171 0.501108 -1.66591 0.87014 -0.446797 0.207916 + 1.3389 0.837203 -1.72269 0.759674 -0.111511 -0.640673 + 1.36453 0.767713 -1.6887 0.932446 0.123349 -0.3396 + 1.37528 0.68783 -1.69886 0.922372 0.161819 -0.350778 + 1.39059 0.610268 -1.69228 0.933247 0.128924 -0.335304 + 1.40264 0.539568 -1.6806 0.963166 0.0223621 -0.267975 + 1.34636 0.894477 -1.73805 0.86535 -0.165577 -0.473027 + 1.35907 0.837027 -1.68806 0.955833 0.0249475 -0.292851 + 1.36923 0.768544 -1.66259 0.992958 0.0878036 0.0795294 + 1.37998 0.688661 -1.67276 0.986852 0.146617 0.0680247 + 1.39266 0.61482 -1.67623 0.982998 0.173677 0.0595979 + 1.3467 0.967896 -1.74254 0.960473 -0.0256225 -0.277191 + 1.35755 0.891501 -1.68179 0.986235 0.0156398 -0.164607 + 1.36263 0.889184 -1.64552 0.999993 -0.00243655 -0.00293139 + 1.36415 0.834711 -1.65179 0.994039 0.037213 0.102476 + 1.34702 1.05476 -1.75074 0.964219 0.107724 -0.242232 + 1.35789 0.964919 -1.68628 0.992226 0.0148382 -0.123562 + 1.36051 0.965594 -1.63921 0.99908 0.0394581 0.0167727 + 1.36025 0.886229 -1.61648 0.903254 -0.0813383 0.421327 + 1.35549 0.831554 -1.62663 0.849166 -0.0854645 0.521165 + 1.32535 1.05232 -1.80703 0.885253 0.0719435 -0.459513 + 1.31057 1.12024 -1.80749 0.807813 0.398079 -0.434709 + 1.33158 1.12212 -1.74451 0.89117 0.403837 -0.206715 + 1.353 1.05999 -1.68694 0.986423 0.142722 -0.0812388 + 1.35561 1.06066 -1.63986 0.988684 0.148389 0.0220381 + 1.28279 1.04467 -1.87168 0.769698 0.0132059 -0.638272 + 1.26801 1.1126 -1.87214 0.756012 0.297679 -0.582952 + 1.28331 1.16656 -1.78776 0.753863 0.573264 -0.321029 + 1.30432 1.16844 -1.72478 0.79082 0.592522 -0.153365 + 1.2981 0.965589 -1.83923 0.772878 -0.148182 -0.61701 + 1.26214 0.961948 -1.87438 0.582068 -0.220083 -0.78279 + 1.24683 1.04103 -1.90683 0.570824 -0.0947412 -0.815588 + 1.23062 1.10662 -1.91583 0.562232 0.208256 -0.800328 + 1.25114 1.17205 -1.85306 0.724346 0.49767 -0.477125 + 1.2885 0.895743 -1.82849 0.753784 -0.280068 -0.59445 + 1.26695 0.894931 -1.8507 0.592787 -0.275484 -0.756778 + 1.23039 0.959189 -1.88993 0.253063 -0.323021 -0.91193 + 1.20421 1.03673 -1.9268 0.223994 -0.222487 -0.948855 + 1.188 1.10233 -1.93581 0.196024 0.118531 -0.973409 + 1.26984 0.839253 -1.81832 0.801169 -0.1953 -0.565673 + 1.24829 0.838441 -1.84053 0.611811 -0.176999 -0.770946 + 1.23521 0.892172 -1.86625 0.265435 -0.291855 -0.918893 + 1.18494 0.955324 -1.88926 -0.114054 -0.398877 -0.909884 + 1.28079 0.764191 -1.79278 0.954485 0.125052 -0.270779 + 1.26993 0.764796 -1.81515 0.831109 0.0944805 -0.548024 + 1.25826 0.763103 -1.82955 0.656106 0.0562471 -0.75257 + 1.23163 0.837205 -1.85103 0.291033 -0.192085 -0.937232 + 1.30594 0.673894 -1.79039 0.934947 0.230086 -0.270064 + 1.29853 0.670716 -1.80716 0.826929 0.173397 -0.534903 + 1.28687 0.669023 -1.82156 0.660613 0.101342 -0.743855 + 1.24161 0.761868 -1.84005 0.301939 -0.0496857 -0.952031 + 1.20019 0.833142 -1.85179 -0.0964308 -0.198477 -0.97535 + 1.30777 0.674078 -1.7713 0.962334 0.258563 0.0840204 + 1.32925 0.58928 -1.76711 0.971405 0.225445 0.074475 + 1.32841 0.587097 -1.77896 0.947238 0.174707 -0.268732 + 1.321 0.583919 -1.79573 0.843154 0.108687 -0.526573 + 1.32451 0.590198 -1.75123 0.867958 0.230823 0.439739 + 1.34282 0.509307 -1.74687 0.886698 0.110139 0.449039 + 1.34511 0.507897 -1.75403 0.990643 0.0826856 0.108576 + 1.34427 0.505713 -1.76588 0.971849 0.0342016 -0.23311 + 1.33453 0.50927 -1.73622 0.693299 0.081291 0.71605 + 1.34088 0.46481 -1.74447 0.701632 -0.490993 0.51637 + 1.34317 0.463401 -1.75163 0.834988 -0.535899 0.124931 + 1.34128 0.502486 -1.77348 0.879749 -0.0511724 -0.472677 + 1.32646 0.508505 -1.73018 0.464579 0.0186363 0.885336 + 1.33281 0.464045 -1.73842 0.36434 -0.550687 0.750999 + 1.32487 0.461252 -1.73929 -0.00786567 -0.705549 0.708618 + 1.34018 0.460173 -1.75922 0.721272 -0.662768 -0.201258 + 1.3345 0.499472 -1.78246 0.726094 -0.132574 -0.674694 + 1.31338 0.506325 -1.72595 0.129204 -0.101559 0.986404 + 1.30544 0.503532 -1.72682 -0.146174 -0.223403 0.963703 + 1.29617 0.500936 -1.73006 -0.394578 -0.329484 0.857758 + 1.29293 0.498939 -1.73328 -0.632603 -0.459841 0.623185 + 1.32163 0.459255 -1.74252 -0.24603 -0.835576 0.491205 + 1.24991 0.578077 -1.73494 -0.702934 -0.376909 0.603178 + 1.24579 0.575573 -1.74439 -0.825597 -0.439372 0.354038 + 1.28881 0.496432 -1.74274 -0.763788 -0.516423 0.387214 + 1.2873 0.493385 -1.75131 -0.809403 -0.570089 0.140946 + 1.32012 0.456206 -1.75109 -0.339764 -0.928738 0.14834 + 1.20104 0.658888 -1.74681 -0.83228 -0.444679 0.331014 + 1.2417 0.572741 -1.76335 -0.874146 -0.479077 0.0797117 + 1.24419 0.570849 -1.77784 -0.837363 -0.48997 -0.242391 + 1.28979 0.491493 -1.7658 -0.781526 -0.592364 -0.19576 + 1.19694 0.656058 -1.76576 -0.883318 -0.466063 0.0503526 + 1.20059 0.656724 -1.78915 -0.846339 -0.45279 -0.280518 + 1.25483 0.570414 -1.79884 -0.672513 -0.459272 -0.580341 + 1.29473 0.490244 -1.77525 -0.630615 -0.591166 -0.50284 + 1.32506 0.454956 -1.76054 -0.126233 -0.945401 -0.300469 + 1.15065 0.7456 -1.76694 -0.871576 -0.49022 0.00625768 + 1.15429 0.746264 -1.79033 -0.844154 -0.43147 -0.31818 + 1.21123 0.656288 -1.81015 -0.690879 -0.400442 -0.601941 + 1.26701 0.571504 -1.80835 -0.361255 -0.372013 -0.855045 + 1.30691 0.491333 -1.78477 -0.284784 -0.517688 -0.806782 + 1.11669 0.810805 -1.72692 -0.746864 -0.610341 0.263964 + 1.11041 0.812285 -1.75226 -0.827491 -0.558442 -0.0583179 + 1.12004 0.816937 -1.78948 -0.810732 -0.443788 -0.381794 + 1.1686 0.750717 -1.8186 -0.687723 -0.344695 -0.638923 + 1.08468 0.856552 -1.69225 -0.722899 -0.621558 0.301797 + 1.07187 0.858508 -1.73225 -0.81501 -0.579183 -0.0174824 + 1.0815 0.863159 -1.76947 -0.784326 -0.452098 -0.424783 + 1.13435 0.821389 -1.81775 -0.698072 -0.302654 -0.648919 + 1.18862 0.753823 -1.83409 -0.393365 -0.244961 -0.886148 + 1.06112 0.918685 -1.64761 -0.648941 -0.505591 0.568554 + 1.03712 0.93285 -1.67943 -0.803525 -0.510116 0.306804 + 1.02432 0.934806 -1.71944 -0.861644 -0.50683 -0.0263222 + 1.04295 0.938143 -1.77506 -0.77018 -0.432909 -0.468414 + 1.12481 0.87388 -1.82472 -0.637052 -0.293299 -0.712839 + 1.00444 1.01455 -1.64558 -0.746856 -0.47727 0.463054 + 0.980447 1.02872 -1.6774 -0.856365 -0.450425 0.252501 + 0.961336 1.05217 -1.72489 -0.901465 -0.426153 -0.07586 + 0.979965 1.0555 -1.78051 -0.80676 -0.44746 -0.385897 + 1.08625 0.948863 -1.83031 -0.6332 -0.44364 -0.634224 + 1.02023 1.03424 -1.60761 -0.594641 -0.491949 0.635916 + 0.97869 1.06703 -1.63161 -0.791135 -0.441865 0.422918 + 0.965214 1.08835 -1.63965 -0.922307 -0.214208 0.321658 + 0.960016 1.09198 -1.65691 -0.943323 -0.173494 0.282914 + 0.9502 1.09972 -1.68082 -0.93635 -0.178899 0.302067 + 1.06552 1.02402 -1.58486 -0.428089 -0.457374 0.779454 + 0.992963 1.08999 -1.58691 -0.626555 -0.264091 0.73327 + 0.979487 1.11131 -1.59494 -0.843646 -0.079108 0.531039 + 0.966322 1.11954 -1.63973 -0.942605 0.107551 0.316115 + 1.15987 1.02611 -1.5406 -0.27684 -0.50029 0.820408 + 1.03826 1.07976 -1.56416 -0.472331 -0.504813 0.722542 + 0.985764 1.1241 -1.58551 -0.808884 0.152459 0.567858 + 0.972599 1.13233 -1.6303 -0.850327 0.404567 0.336556 + 1.2598 1.05241 -1.5329 0.346077 -0.101342 0.932717 + 1.2251 1.04822 -1.51723 0.302238 -0.561291 0.770458 + 1.17566 1.04028 -1.52032 -0.074169 -0.659413 0.748113 + 1.05405 1.09393 -1.54388 -0.435095 -0.581989 0.687009 + 1.01822 1.11649 -1.54903 -0.668494 -0.18548 0.720217 + 1.26669 0.996962 -1.53783 0.191982 -0.0791861 0.978199 + 1.31696 1.10538 -1.56332 0.666769 0.11968 0.735592 + 1.28649 1.12987 -1.54719 0.435305 0.353619 0.827927 + 1.25178 1.12568 -1.53153 0.431625 0.0910794 0.897443 + 1.32384 1.04994 -1.56825 0.642907 0.00888994 0.765893 + 1.33324 1.12961 -1.59089 0.818431 0.471312 0.328689 + 1.30278 1.15409 -1.57476 0.682287 0.52096 0.512919 + 1.24521 1.15922 -1.53065 0.498784 0.239579 0.832956 + 1.17813 1.08863 -1.50066 0.1363 -0.130833 0.98199 + 1.3307 0.948515 -1.57777 0.67135 -0.0722876 0.737607 + 1.35813 0.962637 -1.61017 0.923359 0.00169523 0.383934 + 1.35127 1.06406 -1.60065 0.915402 0.118461 0.384716 + 1.33758 1.12621 -1.6301 0.898998 0.43401 0.0586277 + 1.29003 0.878772 -1.56184 0.250202 -0.330333 0.910098 + 1.33586 0.882732 -1.59277 0.61858 -0.181907 0.764375 + 1.29043 0.824147 -1.59318 0.12362 -0.355734 0.926375 + 1.3311 0.828058 -1.60292 0.473589 -0.19945 0.857866 + 1.29862 0.759271 -1.61262 0.0570947 -0.26075 0.963717 + 1.33929 0.763181 -1.62236 0.432294 -0.151859 0.888853 + 1.36057 0.765387 -1.63744 0.795157 -0.0192338 0.606098 + 1.32291 0.684698 -1.63226 0.0576233 -0.174582 0.982955 + 1.35212 0.687546 -1.639 0.410493 -0.066075 0.909467 + 1.3734 0.68975 -1.65408 0.805779 0.0590131 0.589269 + 1.38608 0.61591 -1.65754 0.791353 0.145577 0.593775 + 1.29516 0.680623 -1.63684 -0.354644 -0.30368 0.884311 + 1.3278 0.606846 -1.64451 -0.362319 -0.227353 0.9039 + 1.34395 0.612136 -1.64165 0.0398257 -0.0732493 0.996518 + 1.37316 0.614981 -1.64839 0.411718 0.0550103 0.90965 + 1.40118 0.546766 -1.6563 0.792155 0.0704706 0.606238 + 1.31089 0.600744 -1.65936 -0.659093 -0.350419 0.665434 + 1.35974 0.535943 -1.64708 -0.303379 -0.251928 0.918963 + 1.37589 0.541235 -1.64422 0.0791505 -0.116121 0.990076 + 1.38826 0.545838 -1.64715 0.41253 -0.000709368 0.910944 + 1.35365 0.528329 -1.65332 -0.556322 -0.412501 0.721352 + 1.38582 0.499151 -1.65473 0.134339 -0.539775 0.831021 + 1.39819 0.503755 -1.65766 0.617782 -0.403418 0.674981 + 1.4047 0.544119 -1.66455 0.989441 0.0503563 0.135904 + 1.34704 0.522626 -1.66585 -0.734782 -0.502853 0.45523 + 1.37972 0.491535 -1.66098 -0.130943 -0.7598 0.636834 + 1.33756 1.12735 -1.6807 0.899008 0.433057 -0.0651639 + 1.30767 1.16744 -1.61603 0.751556 0.642952 0.14757 + 1.27484 1.19579 -1.60417 0.676003 0.692793 0.251113 + 1.26994 1.18244 -1.56291 0.594763 0.609173 0.524562 + 1.30765 1.16858 -1.66663 0.789852 0.613264 -0.00639229 + 1.27969 1.20389 -1.65681 0.750076 0.657762 0.06881 + 1.2503 1.22033 -1.60387 0.614372 0.724107 0.313396 + 1.22353 1.20559 -1.54599 0.490416 0.63407 0.597869 + 1.1988 1.18236 -1.51373 0.414068 0.322931 0.851037 + 1.27636 1.20376 -1.71496 0.727289 0.673415 -0.132524 + 1.25515 1.22844 -1.65651 0.599518 0.798301 0.0573963 + 1.2268 1.23779 -1.60672 0.443813 0.858264 0.257707 + 1.20004 1.22305 -1.54884 0.250062 0.813578 0.524937 + 1.25695 1.20615 -1.7733 0.709569 0.659615 -0.247832 + 1.24624 1.23292 -1.70978 0.563551 0.82102 -0.0913027 + 1.21478 1.24832 -1.69966 0.221589 0.973985 -0.0474401 + 1.2237 1.24384 -1.6464 0.380929 0.922439 0.0632341 + 1.19615 1.24703 -1.59924 0.00214134 0.971592 0.236654 + 1.22478 1.21164 -1.8386 0.583801 0.705317 -0.402125 + 1.22682 1.23532 -1.76812 0.509135 0.83909 -0.191594 + 1.19986 1.24786 -1.719 0.117689 0.993019 -0.00784904 + 1.17429 1.24694 -1.67216 -0.287387 0.954447 0.0802453 + 1.19304 1.25307 -1.63892 -0.113058 0.989083 0.0945102 + 1.21375 1.16608 -1.89675 0.525675 0.470143 -0.708965 + 1.19245 1.20432 -1.88267 0.427158 0.649849 -0.628675 + 1.19359 1.23505 -1.82475 0.382408 0.865841 -0.32262 + 1.15778 1.25235 -1.80808 0.309068 0.932818 -0.185276 + 1.19101 1.25262 -1.75145 0.222814 0.974623 -0.0215485 + 1.18154 1.14862 -1.92161 0.211974 0.368095 -0.905303 + 1.16024 1.18686 -1.90753 0.191426 0.484875 -0.853377 + 1.12959 1.21066 -1.89831 0.0964721 0.611775 -0.785127 + 1.16126 1.22772 -1.86882 0.293262 0.79612 -0.52933 + 1.13452 1.09375 -1.93653 -0.173957 0.000954272 -0.984753 + 1.12806 1.14005 -1.92234 -0.145607 0.229769 -0.962291 + 1.1199 1.1752 -1.91443 -0.0879885 0.265306 -0.960141 + 1.08924 1.199 -1.90521 -0.195084 0.408978 -0.891448 + 1.10685 1.23112 -1.87862 -0.10731 0.783951 -0.611479 + 1.15876 1.03287 -1.92612 -0.1449 -0.34348 -0.927914 + 1.07232 1.0927 -1.91396 -0.433302 -0.141605 -0.890055 + 1.05117 1.12854 -1.90297 -0.439325 0.0584886 -0.896422 + 1.04301 1.16369 -1.89506 -0.564069 0.298349 -0.769944 + 1.09656 1.03181 -1.90356 -0.430267 -0.417745 -0.800224 + 1.02003 1.09118 -1.87873 -0.662863 -0.295883 -0.687798 + 0.998882 1.12702 -1.86773 -0.717754 0.0474396 -0.694678 + 1.01517 1.16314 -1.85303 -0.622892 0.599402 -0.502715 + 1.06864 1.19837 -1.89783 -0.480862 0.453194 -0.750591 + 1.13972 0.947954 -1.87361 -0.401986 -0.434215 -0.806142 + 1.04309 1.03272 -1.86026 -0.659759 -0.491604 -0.568369 + 0.956901 1.11396 -1.79899 -0.830602 -0.345704 -0.436564 + 1.20377 0.888107 -1.86701 -0.0877738 -0.299745 -0.949973 + 1.15854 0.880738 -1.85136 -0.418316 -0.296385 -0.858584 + 1.16808 0.828247 -1.84439 -0.397459 -0.211075 -0.893014 + 1.22073 0.758715 -1.84149 -0.0593844 -0.141982 -0.988086 + 1.25427 0.662903 -1.83094 -0.052426 -0.170628 -0.98394 + 1.23124 0.659392 -1.82564 -0.368729 -0.282576 -0.885544 + 1.27515 0.666054 -1.82951 0.330582 -0.0332534 -0.943191 + 1.3025 0.577936 -1.81267 0.353378 -0.124558 -0.927151 + 1.29003 0.575013 -1.81366 -0.0180117 -0.257694 -0.966059 + 1.31703 0.493869 -1.78709 0.0330283 -0.419408 -0.907197 + 1.31422 0.580905 -1.80472 0.683558 0.0207569 -0.729601 + 1.3295 0.496792 -1.78609 0.421723 -0.289783 -0.859172 + 0.931089 1.12317 -1.72831 -0.978758 -0.194938 0.0634939 + 0.935857 1.13387 -1.77346 -0.919801 -0.247786 -0.304249 + 0.977838 1.14693 -1.8422 -0.713433 0.226004 -0.663276 + 0.931083 1.16012 -1.73146 -0.960069 0.198083 0.197561 + 0.935851 1.17081 -1.7766 -0.878816 0.325906 -0.348523 + 0.94695 1.18602 -1.7729 -0.48833 0.832204 -0.262623 + 0.988936 1.16213 -1.8385 -0.402617 0.708069 -0.580119 + 0.948877 1.13357 -1.68792 -0.892675 0.166538 0.418804 + 0.957499 1.15374 -1.6868 -0.638327 0.543842 0.54477 + 0.939705 1.18028 -1.73033 -0.675073 0.686574 0.269985 + 0.980251 1.19469 -1.75863 -0.12658 0.989644 -0.067691 + 1.00648 1.1957 -1.77317 0.157047 0.984631 -0.0764015 + 0.958693 1.12583 -1.66401 -0.923881 0.0713783 0.375965 + 0.959468 1.13722 -1.66512 -0.763965 0.448867 0.463547 + 0.961984 1.1384 -1.66464 -0.150821 0.847836 0.508357 + 0.960015 1.15492 -1.68632 -0.231263 0.714546 0.660259 + 0.973007 1.18895 -1.71607 -0.146352 0.885847 0.44029 + 0.961123 1.12317 -1.657 -0.944149 0.0637159 0.3233 + 0.961898 1.13456 -1.65811 -0.86494 0.328445 0.379478 + 0.962626 1.13559 -1.65822 -0.384087 0.851115 0.357884 + 0.98726 1.13431 -1.66458 0.0946759 0.976704 0.192577 + 0.986618 1.13712 -1.671 0.171918 0.817894 0.549084 + 0.973326 1.13336 -1.63041 -0.460195 0.867698 0.187938 + 0.999435 1.13483 -1.64199 -0.00800085 0.998667 -0.0509874 + 1.03512 1.1309 -1.67772 0.0963545 0.98406 0.149475 + 0.999891 1.13813 -1.5774 -0.449345 0.806446 0.384361 + 1.026 1.1396 -1.58897 -0.0212212 0.999774 0.00117188 + 1.04729 1.13142 -1.65514 0.0204046 0.996962 -0.0751674 + 1.0614 1.12998 -1.68476 -0.107709 0.976572 0.186297 + 1.03405 1.1332 -1.68362 0.191697 0.818682 0.541306 + 1.03235 1.13051 -1.54092 -0.497561 0.542741 0.676657 + 1.05145 1.14076 -1.55772 -0.105228 0.99035 0.0901874 + 1.06772 1.13385 -1.63014 0.00884612 0.99668 -0.0809341 + 1.07244 1.1308 -1.6701 -0.214586 0.972134 0.0943835 + 1.09287 1.10325 -1.50889 -0.492499 -0.384104 0.780967 + 1.05394 1.13424 -1.52692 -0.446676 0.563416 0.695013 + 1.10211 1.13791 -1.52383 -0.0537607 0.994807 0.0864238 + 1.09734 1.13528 -1.58575 -0.00605762 0.999704 -0.0235447 + 1.09318 1.13501 -1.59889 0.022918 0.998904 -0.0407987 + 1.12869 1.08069 -1.50374 -0.232114 -0.536396 0.81142 + 1.11446 1.10698 -1.49489 -0.29937 -0.314541 0.9008 + 1.1046 1.13139 -1.49304 -0.458934 0.390508 0.798049 + 1.11791 1.13865 -1.51295 -0.446601 0.894469 0.0217219 + 1.11314 1.13602 -1.57487 -0.342866 0.939144 0.0212346 + 1.17155 1.12216 -1.49978 0.307449 -0.0241423 0.951258 + 1.14372 1.11795 -1.48887 0.186679 -0.223078 0.956759 + 1.13386 1.14237 -1.48701 -0.186214 0.291295 0.938334 + 1.12653 1.14606 -1.50415 -0.647431 0.753133 0.116726 + 1.17096 1.17815 -1.50282 0.236949 0.209959 0.948563 + 1.13805 1.15763 -1.49276 -0.478373 0.620586 0.621315 + 1.14895 1.16741 -1.52325 -0.744014 0.665116 0.0637527 + 1.1304 1.14888 -1.5377 -0.672577 0.739937 -0.01153 + 1.12178 1.14147 -1.54651 -0.60311 0.797593 0.0102085 + 1.17515 1.19341 -1.50857 -0.165826 0.67002 0.723585 + 1.16047 1.17898 -1.51187 -0.726234 0.6837 0.0716787 + 1.15501 1.17947 -1.53944 -0.797237 0.557654 0.231161 + 1.13354 1.15178 -1.54357 -0.741743 0.66919 0.0447282 + 1.12783 1.14665 -1.55347 -0.646818 0.76134 0.0445799 + 1.18622 1.21333 -1.53064 -0.11433 0.781566 0.613256 + 1.17154 1.19889 -1.53394 -0.721351 0.623456 0.301588 + 1.18233 1.23731 -1.58105 -0.372176 0.833383 0.408606 + 1.16642 1.2016 -1.54698 -0.717277 0.584391 0.379476 + 1.15433 1.20203 -1.57527 -0.828045 0.486584 0.278528 + 1.13898 1.16529 -1.56371 -0.841731 0.46904 0.267378 + 1.1396 1.16384 -1.55976 -0.828227 0.508822 0.234821 + 1.17721 1.24002 -1.59409 -0.507342 0.841389 0.186192 + 1.16573 1.22416 -1.58282 -0.700347 0.634798 0.326414 + 1.14814 1.19983 -1.59413 -0.864127 0.455548 0.213915 + 1.13279 1.16309 -1.58257 -0.864448 0.461387 0.199629 + 1.13034 1.15099 -1.56329 -0.768774 0.601694 0.216682 + 1.16328 1.23237 -1.62663 -0.61144 0.773041 0.168965 + 1.1518 1.21652 -1.61535 -0.814916 0.539121 0.212746 + 1.12289 1.15684 -1.61507 -0.859806 0.468007 0.204214 + 1.12508 1.14782 -1.57819 -0.802741 0.578767 0.143649 + 1.14452 1.22624 -1.65987 -0.706122 0.636983 0.309264 + 1.12523 1.17286 -1.63994 -0.843051 0.441654 0.306933 + 1.12654 1.17353 -1.6363 -0.875013 0.431726 0.219009 + 1.11518 1.14157 -1.61069 -0.797432 0.584675 0.149189 + 1.15936 1.24648 -1.6915 -0.0984614 0.978831 0.179428 + 1.14441 1.24339 -1.68242 -0.331272 0.812617 0.479492 + 1.14005 1.23548 -1.6827 -0.773546 0.460447 0.435449 + 1.14016 1.21833 -1.66015 -0.806717 0.448639 0.384619 + 1.15559 1.24705 -1.69839 -0.0439641 0.990115 0.13319 + 1.14064 1.24395 -1.68931 -0.571651 0.786284 0.234463 + 1.1216 1.21657 -1.69108 -0.697917 0.530416 0.481218 + 1.12101 1.20809 -1.68446 -0.733733 0.458449 0.501458 + 1.12257 1.19901 -1.67431 -0.765486 0.439666 0.469813 + 1.14674 1.25181 -1.73084 -0.102324 0.967737 0.230249 + 1.11538 1.23673 -1.7187 -0.460284 0.699311 0.546903 + 1.08343 1.1595 -1.69198 -0.731771 0.490975 0.47271 + 1.08845 1.16054 -1.68583 -0.704059 0.484914 0.518805 + 1.12011 1.26981 -1.78105 0.0548266 0.989651 0.132607 + 1.08874 1.25473 -1.76892 -0.693427 0.627103 0.354825 + 1.08338 1.23484 -1.76714 -0.855613 0.392694 0.337221 + 1.0772 1.17965 -1.71961 -0.78087 0.436185 0.447197 + 1.13853 1.24819 -1.84913 0.252862 0.868842 -0.425647 + 1.10086 1.26565 -1.8221 -0.0780995 0.936389 -0.342164 + 1.08652 1.26484 -1.8125 -0.662975 0.739671 -0.115547 + 1.08115 1.24495 -1.81071 -0.910834 0.409938 -0.0483 + 1.09251 1.23031 -1.86901 -0.530404 0.739301 -0.414857 + 1.07628 1.23323 -1.82709 -0.716986 0.673658 -0.179208 + 1.06911 1.22632 -1.80518 -0.884144 0.459173 0.0863142 + 1.07014 1.21301 -1.77236 -0.888492 0.383056 0.252684 + 1.06396 1.15782 -1.72483 -0.827479 0.429374 0.361824 + 1.08764 1.2186 -1.8854 -0.276174 0.767923 -0.577946 + 1.06703 1.21797 -1.87802 -0.512825 0.767519 -0.38461 + 1.05986 1.21106 -1.85611 -0.890276 0.450345 -0.0678118 + 1.05896 1.19094 -1.79776 -0.929683 0.342675 0.13514 + 1.05999 1.17763 -1.76494 -0.910434 0.353713 0.214469 + 1.04079 1.19782 -1.85581 -0.544305 0.834781 -0.0829051 + 1.05504 1.19843 -1.85259 -0.564073 0.763002 0.315673 + 1.05414 1.17831 -1.79423 -0.653776 0.706785 0.270245 + 1.05545 1.16187 -1.75467 -0.590011 0.717794 0.369674 + 1.05943 1.14206 -1.71456 -0.366442 0.819707 0.440228 + 1.03559 1.17519 -1.79432 0.317053 0.912267 0.259317 + 1.04984 1.1758 -1.7911 -0.138394 0.940918 0.309064 + 1.05115 1.15936 -1.75153 0.231955 0.894033 0.383278 + 1.05648 1.14191 -1.71326 0.321558 0.868807 0.37653 + 1.06328 1.13243 -1.69196 -0.337153 0.854265 0.395677 + 1.00964 1.18895 -1.7286 0.318432 0.90407 0.285059 + 1.03874 1.16844 -1.74975 0.590607 0.78108 0.202727 + 1.04408 1.15099 -1.71148 0.560772 0.694133 0.451347 + 1.03005 1.14648 -1.69451 0.338196 0.687524 0.642599 + 1.06034 1.13228 -1.69065 0.173358 0.90809 0.381208 + 0.995607 1.18444 -1.71163 0.195642 0.805308 0.559646 + 0.982616 1.1504 -1.68189 0.092698 0.640677 0.762195 + 1.06831 1.13347 -1.6858 -0.575276 0.724091 0.38046 + 1.09001 1.15145 -1.67567 -0.685546 0.508367 0.521142 + 1.10764 1.15354 -1.6541 -0.743202 0.49384 0.451412 + 1.07935 1.13428 -1.67115 -0.556622 0.739256 0.37904 + 1.09697 1.13638 -1.64958 -0.572935 0.733111 0.36646 + 1.10786 1.13774 -1.63375 -0.676676 0.692175 0.251005 + 1.10917 1.13841 -1.6301 -0.747052 0.644488 0.162936 + 1.09287 1.13322 -1.6451 -0.233288 0.968642 0.0854976 + 1.10375 1.13459 -1.62927 -0.296519 0.951917 0.0770099 + 1.10792 1.13486 -1.61614 -0.396428 0.916976 0.0447292 + 1.11393 1.13803 -1.59673 -0.516961 0.854926 0.043042 + 1.12257 1.14348 -1.56836 -0.685363 0.723943 0.07863 + 1.13097 1.14954 -1.55934 -0.581345 0.772665 0.255004 + 1.33518 0.457491 -1.76285 0.387157 -0.813576 -0.433825 + -0.700788 1.60693 -3.09201 0.87201 0.456421 0.176857 + -0.700286 1.60496 -3.09226 0.792166 0.124176 0.597539 + -0.696261 1.60389 -3.09632 0.75288 0.497834 -0.430503 + -0.713785 1.62766 -3.06485 0.678695 0.713623 -0.173537 + -0.702351 1.60795 -3.09721 0.764365 0.640976 -0.0699637 + -0.721527 1.63887 -3.08342 0.817512 0.56768 -0.0970227 + -0.719965 1.63784 -3.07821 0.830319 0.549856 -0.0907127 + -0.714287 1.62963 -3.06459 0.919042 0.367061 0.143628 + -0.698218 1.60237 -3.10074 0.882124 0.319834 -0.345778 + -0.710325 1.62074 -3.11096 0.879372 0.475631 -0.0219134 + -0.714458 1.62632 -3.10743 0.825694 0.563981 0.012463 + -0.762133 1.69675 -3.08184 0.679542 0.710222 -0.183868 + -0.697173 1.59291 -3.09688 0.817646 0.0776346 -0.570463 + -0.695999 1.5703 -3.11698 0.986147 0.1404 -0.0883226 + -0.713731 1.62839 -3.14112 0.839795 0.437362 -0.32165 + -0.755063 1.6842 -3.10586 0.730315 0.675564 -0.10126 + -0.688751 1.58509 -3.09346 0.483798 0.0783854 -0.871662 + -0.689663 1.57411 -3.09402 0.741627 0.0952044 -0.664023 + -0.694954 1.56084 -3.11312 0.978316 0.0897861 -0.186645 + -0.699405 1.57794 -3.14714 0.891748 0.207378 -0.402218 + -0.697311 1.61823 -3.08077 -0.197968 0.57859 -0.791229 + -0.674551 1.60644 -3.08384 0.623596 0.245119 -0.742324 + -0.683668 1.49664 -3.08943 0.938475 -0.0149984 -0.345021 + -0.68896 1.48336 -3.10853 0.984847 0.0140192 -0.172859 + -0.694389 1.50268 -3.15615 0.900856 0.0805795 -0.426573 + -0.700286 1.60496 -3.09226 -0.421139 0.65229 -0.630206 + -0.701336 1.61931 -3.07671 -0.328939 0.679388 -0.655921 + -0.683112 1.63959 -3.07115 0.224761 0.653228 -0.723032 + -0.666173 1.60744 -3.06324 0.955854 0.117313 -0.269409 + -0.67529 1.49763 -3.06883 0.964503 -0.0654329 -0.255836 + -0.686728 1.39615 -3.08333 0.977257 -0.0740926 -0.198693 + -0.723359 1.65031 -3.03058 -0.138716 0.81918 -0.556508 + -0.726764 1.6649 -3.00715 0.0886504 0.983024 -0.160638 + -0.686517 1.65418 -3.04772 0.11062 0.929914 -0.350747 + -0.671291 1.64734 -3.04513 0.759615 0.620625 -0.194446 + -0.660742 1.59762 -3.01491 0.998512 0.0457029 -0.0297487 + -0.735808 1.65866 -3.01872 0.666743 0.734097 -0.128668 + -0.762929 1.68282 -2.988 0.661077 0.346894 0.665314 + -0.76146 1.66694 -2.97721 0.502776 0.643523 0.577144 + -0.744332 1.65545 -2.97188 0.149607 0.885156 0.440587 + -0.710988 1.66406 -2.99897 0.186712 0.974499 0.124456 + -0.740829 1.67833 -3.01615 0.863698 0.403629 0.301843 + -0.76795 1.70249 -2.98543 0.604639 0.564535 0.561882 + -0.810379 1.70534 -2.96548 0.234079 0.696843 0.677951 + -0.80891 1.68947 -2.95469 0.316091 0.624754 0.713981 + -0.746507 1.68655 -3.02977 0.764846 0.644089 -0.0126078 + -0.784145 1.71184 -2.99598 0.309967 0.926418 0.213707 + -0.826574 1.71469 -2.97603 -0.0946936 0.911122 0.40111 + -0.848521 1.68754 -2.95309 -0.531113 0.545634 0.64823 + -0.790836 1.72448 -3.07206 0.277811 0.945056 -0.172307 + -0.77521 1.71429 -3.01999 0.481611 0.861845 0.158979 + -0.827708 1.72022 -3.03019 -0.140146 0.986951 0.0792854 + -0.8513 1.71244 -3.03504 -0.559275 0.828597 -0.0252733 + -0.850166 1.70692 -2.98088 -0.588849 0.746378 0.310125 + -0.80354 1.71436 -3.10247 0.0154224 0.882826 -0.469447 + -0.818774 1.72266 -3.0542 -0.165976 0.985525 -0.0345319 + -0.854737 1.70418 -3.06709 -0.635124 0.741478 -0.216395 + -0.878514 1.68074 -3.01539 -0.885677 0.449688 0.115577 + -0.876869 1.66136 -2.98761 -0.881197 0.294044 0.370176 + -0.773682 1.70236 -3.1145 0.415285 0.887866 -0.198074 + -0.805723 1.6918 -3.12458 -0.0900347 0.638744 -0.764134 + -0.840653 1.68224 -3.12658 -0.394434 0.629292 -0.669637 + -0.831478 1.71254 -3.0846 -0.398061 0.861189 -0.31607 + -0.73235 1.64655 -3.14976 0.513004 0.593254 -0.620384 + -0.775865 1.6798 -3.13661 0.0795118 0.603871 -0.793106 + -0.811574 1.65329 -3.14786 -0.102929 0.430473 -0.896716 + -0.733622 1.62154 -3.16383 0.350697 0.329787 -0.8765 + -0.777137 1.65479 -3.15069 -0.00986803 0.439864 -0.89801 + -0.813206 1.60082 -3.16797 -0.161349 0.265461 -0.950525 + -0.85692 1.595 -3.15879 -0.477052 0.227239 -0.848989 + -0.846504 1.64373 -3.14987 -0.360266 0.361162 -0.860099 + -0.724048 1.56911 -3.1729 0.411711 0.179164 -0.893529 + -0.778768 1.60233 -3.1708 -0.0260258 0.256338 -0.966236 + -0.813673 1.53427 -3.17938 -0.128089 0.119226 -0.98457 + -0.719033 1.49384 -3.18192 0.404354 0.0846973 -0.910673 + -0.769195 1.54989 -3.17987 0.0139145 0.128051 -0.99167 + -0.808316 1.45694 -3.18447 -0.0547645 0.046343 -0.997423 + -0.852566 1.44075 -3.18167 -0.393856 0.030329 -0.918672 + -0.857387 1.52845 -3.17019 -0.4561 0.122059 -0.881518 + -0.693939 1.4298 -3.16189 0.897554 -0.0132109 -0.440707 + -0.716485 1.43006 -3.18433 0.416663 0.00902267 -0.909016 + -0.763838 1.47256 -3.18497 0.00751894 0.0515189 -0.998644 + -0.76129 1.40878 -3.18738 0.0179453 -0.015389 -0.999721 + -0.801582 1.39762 -3.18654 -0.0330196 -0.0281901 -0.999057 + -0.68851 1.41049 -3.11426 0.993445 -0.0466734 -0.104351 + -0.694726 1.36325 -3.12214 0.991643 -0.0796369 -0.1015 + -0.69819 1.36955 -3.16113 0.901623 -0.0574822 -0.428686 + -0.720736 1.36981 -3.18358 0.383088 -0.057623 -0.921913 + -0.692944 1.34892 -3.0912 0.988056 -0.150464 -0.0332515 + -0.698909 1.27668 -3.09442 0.995134 -0.0496643 0.0850939 + -0.698506 1.28133 -3.1216 0.998452 -0.0355661 -0.0427657 + -0.70197 1.28763 -3.1606 0.89746 -0.0489395 -0.438373 + -0.684572 1.36835 -3.06714 0.953507 -0.295606 0.0586556 + -0.696866 1.34501 -3.07027 0.914862 -0.299159 0.271168 + -0.70283 1.27277 -3.07349 0.941181 -0.0619246 0.332179 + -0.679223 1.43047 -3.06729 0.92128 0.018115 -0.388478 + -0.677067 1.40267 -3.05111 0.970728 -0.214989 0.107085 + -0.703187 1.35996 -3.03439 0.790129 -0.399228 0.465095 + -0.715481 1.33661 -3.03751 0.823762 -0.289854 0.487238 + -0.717646 1.267 -3.04741 0.83722 -0.0679653 0.542626 + -0.675092 1.47307 -3.05471 0.984177 -0.0643738 -0.165081 + -0.669514 1.46659 -3.01935 0.966297 -0.190461 0.173189 + -0.688425 1.47104 -2.98324 0.753977 -0.323037 0.571984 + -0.695978 1.40712 -3.015 0.770471 -0.342081 0.537916 + -0.660545 1.57306 -3.00079 0.990586 -0.0330301 0.132844 + -0.665383 1.50919 -3.00677 0.984457 -0.120521 0.127743 + -0.675449 1.52296 -2.97583 0.830708 -0.177822 0.527544 + -0.728331 1.47624 -2.93836 0.664829 -0.308652 0.680247 + -0.665861 1.63752 -2.9968 0.852699 0.476346 0.214474 + -0.678778 1.63089 -2.96438 0.74837 0.433046 0.502407 + -0.683725 1.60477 -2.95156 0.800462 0.0485411 0.597414 + -0.670611 1.58683 -2.96985 0.909758 0.226955 0.347608 + -0.715355 1.52815 -2.93095 0.699701 -0.20971 0.682965 + -0.695763 1.65722 -2.99638 0.454934 0.8663 0.206297 + -0.70868 1.65059 -2.96396 0.341868 0.822353 0.45482 + -0.722961 1.62083 -2.91547 0.463381 0.545157 0.698629 + -0.727908 1.5947 -2.90265 0.633652 0.0798204 0.769489 + -0.728557 1.65461 -2.9637 0.0113152 0.90852 0.417688 + -0.742838 1.62485 -2.91521 -0.037868 0.83699 0.545906 + -0.752843 1.61059 -2.89508 0.0477925 0.635702 0.770454 + -0.750816 1.58804 -2.88577 0.300055 0.114677 0.947004 + -0.72847 1.54609 -2.91265 0.672044 -0.190225 0.715661 + -0.750278 1.63944 -2.94596 -0.0419403 0.82293 0.566594 + -0.750129 1.63638 -2.94029 -0.196128 0.856373 0.47766 + -0.760134 1.62211 -2.92016 -0.272601 0.828617 0.488961 + -0.777383 1.60064 -2.89336 -0.0725441 0.524825 0.848113 + -0.767406 1.65093 -2.95128 0.464054 0.686469 0.559834 + -0.759055 1.63552 -2.94107 0.235389 0.788655 0.567992 + -0.758906 1.63246 -2.93541 -0.0561691 0.788152 0.612912 + -0.76136 1.63146 -2.93523 0.0293959 0.697708 0.715779 + -0.762588 1.62112 -2.91999 -0.0550318 0.817711 0.572993 + -0.772151 1.65318 -2.94903 0.50303 0.628038 0.593741 + -0.7638 1.63777 -2.93882 0.437651 0.643943 0.627535 + -0.780306 1.6323 -2.92608 0.362909 0.634026 0.682868 + -0.795101 1.61183 -2.89945 0.0527002 0.497856 0.865657 + -0.819506 1.67489 -2.93533 0.0561581 0.616276 0.785525 + -0.782747 1.63861 -2.92967 0.424833 0.578091 0.696655 + -0.815706 1.62228 -2.90612 -0.178331 0.424784 0.887556 + -0.812919 1.58737 -2.89387 -0.329742 -0.00853355 0.944033 + -0.775356 1.57809 -2.88406 -0.0982588 0.0244805 0.99486 + -0.844721 1.63493 -2.92389 -0.610742 0.334372 0.717767 + -0.833524 1.59783 -2.90054 -0.501494 0.00354065 0.865154 + -0.856485 1.57603 -2.93009 -0.739695 -0.15111 0.655757 + -0.853575 1.52989 -2.94193 -0.728686 -0.230587 0.644861 + -0.810009 1.54124 -2.90571 -0.505813 -0.202465 0.838547 + -0.883256 1.63656 -2.98772 -0.932027 0.164436 0.322934 + -0.851108 1.61012 -2.92401 -0.798286 0.13481 0.586997 + -0.874069 1.58832 -2.95356 -0.88325 0.00170727 0.4689 + -0.883002 1.55814 -2.981 -0.944823 -0.13053 0.30045 + -0.844819 1.45278 -2.96066 -0.762443 -0.236235 0.602389 + -0.892188 1.60638 -3.01517 -0.979897 0.0684396 0.187397 + -0.88195 1.67248 -3.04744 -0.903471 0.421792 -0.0763669 + -0.892555 1.63829 -3.06061 -0.96299 0.264708 -0.0507928 + -0.899933 1.55969 -3.04404 -0.977814 -0.00851941 0.209302 + -0.874246 1.48103 -2.99973 -0.895229 -0.163218 0.414637 + -0.863912 1.67388 -3.10907 -0.735786 0.533196 -0.417517 + -0.874516 1.63969 -3.12224 -0.805323 0.351388 -0.477473 + -0.9003 1.5916 -3.08948 -0.976471 0.154134 -0.15082 + -0.902105 1.51138 -3.06534 -0.985345 -0.0566175 0.1609 + -0.884932 1.59097 -3.13117 -0.833899 0.194448 -0.51653 + -0.886875 1.52234 -3.145 -0.828293 0.0661672 -0.556374 + -0.902243 1.52298 -3.10331 -0.983168 0.0133235 -0.182215 + -0.896536 1.41999 -3.07138 -0.969009 -0.152395 0.194414 + -0.876418 1.43272 -3.02103 -0.872716 -0.171951 0.456947 + -0.882054 1.43465 -3.15648 -0.834092 -0.0343469 -0.550555 + -0.896673 1.43159 -3.10936 -0.981895 -0.088221 -0.167628 + -0.886844 1.37081 -3.11415 -0.946378 -0.294861 -0.13201 + -0.883944 1.37025 -3.07144 -0.901172 -0.352952 0.251623 + -0.863826 1.38298 -3.02108 -0.797005 -0.327477 0.507485 + -0.845832 1.38144 -3.18374 -0.365779 -0.13663 -0.920618 + -0.872225 1.37387 -3.16127 -0.788234 -0.246012 -0.564062 + -0.859534 1.34392 -3.15667 -0.77261 -0.284055 -0.567791 + -0.870607 1.33676 -3.1204 -0.942007 -0.299468 -0.151464 + -0.867707 1.3362 -3.07768 -0.91754 -0.325362 0.228605 + -0.797511 1.35535 -3.18285 -0.0383612 -0.0950201 -0.994736 + -0.833141 1.35149 -3.17915 -0.33025 -0.201621 -0.922108 + -0.757219 1.36651 -3.18369 0.00559388 -0.0770702 -0.99701 + -0.756405 1.28568 -3.17829 -0.0128796 -0.0767177 -0.99697 + -0.788812 1.28247 -3.17667 -0.0668274 -0.0866222 -0.993997 + -0.824442 1.2786 -3.17296 -0.375244 -0.117156 -0.919492 + -0.845429 1.27364 -3.155 -0.806172 -0.15623 -0.570682 + -0.719922 1.28898 -3.17817 0.382609 -0.0673176 -0.921455 + -0.721898 1.17826 -3.1696 0.381692 -0.0653494 -0.921976 + -0.750995 1.17563 -3.16969 -0.0169892 -0.0626134 -0.997893 + -0.783401 1.17241 -3.16807 -0.0691604 -0.0628298 -0.995625 + -0.703946 1.17691 -3.15202 0.903222 -0.0484222 -0.426432 + -0.707888 1.07356 -3.14842 0.923046 -0.0505435 -0.381355 + -0.72109 1.07123 -3.16464 0.441413 -0.0515657 -0.895821 + -0.750186 1.0686 -3.16473 1.25246e-005 -0.0283135 -0.999599 + -0.701184 1.17188 -3.12093 0.998569 -0.0326852 -0.0423313 + -0.705125 1.06853 -3.11732 0.998025 -0.049581 -0.0385655 + -0.710884 0.972315 -3.11638 0.997622 -0.0573218 -0.038262 + -0.713241 0.976547 -3.1442 0.924653 -0.0672904 -0.374817 + -0.726443 0.974225 -3.16042 0.551747 -0.042467 -0.832929 + -0.701586 1.16723 -3.09375 0.993363 -0.0320286 0.110476 + -0.705752 1.06448 -3.09411 0.992459 -0.0490947 0.112318 + -0.711511 0.968265 -3.09316 0.991759 -0.0566243 0.114921 + -0.716751 0.87302 -3.09366 0.990209 -0.0530098 0.12914 + -0.715786 0.876178 -3.11125 0.998434 -0.0512606 -0.0224004 + -0.705499 1.16387 -3.07604 0.936145 -0.0328721 0.350075 + -0.709665 1.06112 -3.07641 0.941353 -0.0471569 0.334113 + -0.715225 0.964675 -3.07691 0.941111 -0.053516 0.333834 + -0.720464 0.869428 -3.07741 0.948357 -0.0567908 0.312079 + -0.720315 1.1581 -3.04997 0.833103 -0.0337943 0.552084 + -0.720112 1.05203 -3.05692 0.845269 -0.04334 0.532581 + -0.725672 0.955581 -3.05743 0.859626 -0.0495315 0.508517 + -0.726842 0.85972 -3.0645 0.874302 -0.0569026 0.482035 + -0.72532 0.775814 -3.08118 0.935201 -0.0985868 0.340116 + -0.742695 1.15122 -3.02139 0.553754 -0.0650853 0.830133 + -0.742493 1.04514 -3.02834 0.494536 -0.0672188 0.866554 + -0.737453 0.933047 -3.04199 0.534197 -0.0828218 0.841293 + -0.738623 0.837186 -3.04907 0.48591 -0.0853355 0.869833 + -0.746692 1.25807 -3.01032 0.552602 -0.09964 0.827467 + -0.775955 1.25415 -3.0029 -0.1075 -0.151712 0.982561 + -0.771958 1.1473 -3.01397 -0.122854 -0.111231 0.986172 + -0.764642 1.03836 -3.02585 -0.175392 -0.124385 0.976609 + -0.744527 1.32767 -3.00042 0.569215 -0.276986 0.774127 + -0.783702 1.33029 -2.9878 -0.108099 -0.376409 0.920126 + -0.812463 1.25423 -3.02293 -0.611576 -0.165372 0.77371 + -0.801073 1.14736 -3.02995 -0.607806 -0.119498 0.785043 + -0.793758 1.03842 -3.04183 -0.597205 -0.143892 0.789076 + -0.746833 1.36701 -2.97759 0.50708 -0.430176 0.746872 + -0.786007 1.36963 -2.96497 -0.146804 -0.558744 0.816243 + -0.82021 1.33037 -3.00783 -0.591072 -0.326004 0.737804 + -0.836586 1.25639 -3.04862 -0.825053 -0.166857 0.539857 + -0.739624 1.41418 -2.9582 0.61681 -0.390308 0.683524 + -0.784733 1.39524 -2.94443 0.0154982 -0.666832 0.745047 + -0.833503 1.38189 -2.98836 -0.592472 -0.454608 0.665062 + -0.850533 1.33146 -3.04056 -0.808966 -0.298991 0.506141 + -0.75727 1.49267 -2.90546 0.478589 -0.229456 0.847527 + -0.768564 1.43061 -2.9253 0.547875 -0.475624 0.688197 + -0.792961 1.41006 -2.92624 -0.171974 -0.606727 0.776085 + -0.832229 1.40751 -2.96782 -0.642983 -0.420387 0.640194 + -0.751378 1.53942 -2.89578 0.401628 -0.223447 0.888125 + -0.781249 1.53134 -2.89374 -0.161111 -0.182067 0.969997 + -0.776791 1.44544 -2.90711 0.1735 -0.356821 0.91792 + -0.805551 1.45534 -2.91908 -0.583928 -0.211372 0.783805 + -0.85376 1.26113 -3.08574 -0.960066 -0.167307 0.224236 + -0.838893 1.1533 -3.08524 -0.962806 -0.122283 0.240939 + -0.825197 1.14953 -3.05563 -0.828872 -0.120879 0.546223 + -0.856502 1.26648 -3.11872 -0.977335 -0.16589 -0.131519 + -0.841635 1.15865 -3.11822 -0.98418 -0.122884 -0.127629 + -0.829853 1.05014 -3.11636 -0.987791 -0.100641 -0.118913 + -0.82755 1.04513 -3.0913 -0.964916 -0.105535 0.240416 + -0.813854 1.04135 -3.06169 -0.814651 -0.125386 0.566235 + -0.832804 1.16437 -3.14715 -0.822315 -0.115083 -0.557273 + -0.821023 1.05585 -3.14529 -0.833394 -0.0887406 -0.545508 + -0.81167 0.946961 -3.14421 -0.831525 -0.101834 -0.546074 + -0.819573 0.942088 -3.11833 -0.985849 -0.111316 -0.125341 + -0.81727 0.937079 -3.09327 -0.936686 -0.125531 0.326895 + -0.811817 1.16932 -3.16512 -0.379046 -0.0868437 -0.921294 + -0.803682 1.05969 -3.16112 -0.406789 -0.0495096 -0.912179 + -0.794329 0.950801 -3.16004 -0.452282 -0.0774234 -0.888508 + -0.786447 0.851142 -3.15179 -0.440704 -0.160811 -0.883131 + -0.79914 0.848498 -3.14022 -0.814523 -0.168243 -0.5552 + -0.775266 1.06278 -3.16408 -0.0622994 -0.0139068 -0.997961 + -0.770114 0.952483 -3.16563 -0.113135 -0.0522288 -0.992206 + -0.762232 0.852825 -3.15737 -0.0708876 -0.156051 -0.985202 + -0.745035 0.958311 -3.16628 0.165553 -0.042963 -0.985265 + -0.745119 0.859859 -3.15731 0.220004 -0.131641 -0.966576 + -0.758657 0.762938 -3.13818 0.0550191 -0.328372 -0.942945 + -0.772999 0.76158 -3.13749 -0.313277 -0.317313 -0.895081 + -0.785692 0.758936 -3.12592 -0.779879 -0.303734 -0.547297 + -0.726527 0.875771 -3.15145 0.637624 -0.0976846 -0.764129 + -0.73024 0.779145 -3.13746 0.579893 -0.229939 -0.78157 + -0.741544 0.769971 -3.13812 0.226529 -0.320206 -0.919866 + -0.740176 0.721669 -3.11429 0.417408 -0.711078 -0.565807 + -0.755709 0.715314 -3.11404 0.172148 -0.797448 -0.578309 + -0.718143 0.880408 -3.13907 0.939885 -0.0677119 -0.33471 + -0.721855 0.783783 -3.12507 0.940257 -0.12797 -0.315498 + -0.728872 0.730843 -3.11363 0.755628 -0.465799 -0.460497 + -0.727586 0.728534 -3.09845 0.8942 -0.447648 0.00409192 + -0.737605 0.715827 -3.07849 0.597383 -0.684818 0.417323 + -0.720568 0.781473 -3.10989 0.994763 -0.0961954 -0.0345439 + -0.721533 0.778315 -3.0923 0.979906 -0.0915413 0.177214 + -0.731373 0.726032 -3.08733 0.918867 -0.247338 0.307421 + -0.73793 0.755901 -3.05943 0.541771 -0.217753 0.81183 + -0.752399 0.748231 -3.05953 -0.118103 -0.297788 0.947298 + -0.753137 0.709472 -3.07824 0.0544323 -0.869105 0.491624 + -0.774364 0.711295 -3.09923 -0.605963 -0.794246 -0.044521 + -0.770051 0.713956 -3.11335 -0.357824 -0.752905 -0.552355 + -0.731699 0.766105 -3.06827 0.893625 -0.114176 0.434048 + -0.753092 0.829517 -3.04917 -0.267056 -0.108626 0.957539 + -0.76694 0.74808 -3.06611 -0.541848 -0.236166 0.806614 + -0.759602 0.926263 -3.03951 -0.241779 -0.119321 0.962967 + -0.778414 0.831733 -3.06725 -0.639391 -0.0982445 0.76258 + -0.793113 0.83416 -3.08097 -0.755826 -0.117781 0.644092 + -0.78164 0.750508 -3.07983 -0.804877 -0.215327 0.552999 + -0.767678 0.70932 -3.08482 -0.432226 -0.826862 0.359834 + -0.784924 0.928477 -3.05759 -0.64256 -0.129857 0.755151 + -0.80502 0.931409 -3.07746 -0.760192 -0.133541 0.635827 + -0.805363 0.839829 -3.09679 -0.933723 -0.150671 0.324746 + -0.788325 0.752482 -3.09424 -0.942382 -0.245713 0.227026 + -0.807043 0.843624 -3.11434 -0.978575 -0.16081 -0.128571 + -0.790005 0.756277 -3.1118 -0.946458 -0.280709 -0.159433 + -0.106343 0.878927 -3.34614 0.362612 -0.0130587 0.931849 + -0.118475 0.842721 -3.34595 0.166227 -0.123161 0.978366 + -0.110367 0.844247 -3.35106 0.516151 -0.813737 0.267245 + -0.124122 0.879198 -3.34372 -0.0237039 0.0262078 0.999375 + -0.133302 0.844537 -3.34848 -0.418236 -0.77872 0.467625 + -0.098235 0.880453 -3.35125 0.620088 -0.0692167 0.781473 + -0.082945 0.960539 -3.37009 0.599546 0.0773708 0.796591 + -0.105239 0.956342 -3.35604 0.327362 0.126304 0.936419 + -0.123019 0.956611 -3.35362 -0.0428739 0.14651 0.98828 + -0.138949 0.881012 -3.34624 -0.349957 -0.0045157 0.936755 + -0.088223 0.883575 -3.36059 0.861612 -0.23212 0.451381 + -0.072933 0.963663 -3.37943 0.773581 0.011667 0.63359 + -0.057545 1.05444 -3.40151 0.769322 0.0293213 0.638188 + -0.074516 1.04927 -3.38601 0.590202 0.0879483 0.802451 + -0.09681 1.04507 -3.37197 0.331846 0.132761 0.933945 + -0.108929 0.846051 -3.35592 0.531956 -0.796498 -0.287425 + -0.086785 0.885379 -3.36544 0.924554 -0.376917 -0.0559803 + -0.064728 0.968621 -3.39278 0.974747 -0.17852 0.134159 + -0.04934 1.0594 -3.41486 0.978964 -0.1059 0.174397 + -0.133971 0.849398 -3.36091 -0.374838 -0.728683 -0.573164 + -0.124687 0.850417 -3.36488 -0.0825503 -0.726829 -0.681839 + -0.113113 0.848798 -3.36239 0.224854 -0.747704 -0.624804 + -0.088296 0.889645 -3.37606 0.76816 -0.449907 -0.455536 + -0.066239 0.972886 -3.4034 0.847901 -0.310072 -0.430021 + -0.118475 0.842721 -3.34595 -0.0524469 -0.93101 -0.361206 + -0.136798 0.847063 -3.35448 -0.644376 -0.753483 -0.13055 + -0.15653 0.892167 -3.37189 -0.890448 -0.359363 -0.279214 + -0.153703 0.894503 -3.37832 -0.674709 -0.410682 -0.613277 + -0.14235 0.897646 -3.38808 -0.417194 -0.439866 -0.795278 + -0.152406 0.885082 -3.35423 -0.741875 -0.129474 0.65792 + -0.155902 0.88761 -3.36023 -0.946909 -0.249627 0.202609 + -0.17198 0.972621 -3.38504 -0.9643 -0.0919351 0.248343 + -0.172608 0.977179 -3.3967 -0.945945 -0.215313 -0.242544 + -0.162365 0.965675 -3.36855 -0.699381 0.0543021 0.712683 + -0.173576 1.05657 -3.38854 -0.70759 0.0642443 0.703697 + -0.18319 1.06351 -3.40504 -0.966261 -0.0545806 0.251715 + -0.183701 1.07108 -3.42438 -0.954115 -0.168561 -0.247492 + -0.164834 0.983602 -3.4144 -0.715077 -0.306015 -0.628507 + -0.148908 0.961604 -3.36056 -0.363474 0.127128 0.92289 + -0.151989 1.05016 -3.37509 -0.362219 0.1422 0.921182 + -0.182779 1.15464 -3.4068 -0.744595 0.0048785 0.667499 + -0.192791 1.16341 -3.42762 -0.977179 -0.0950015 0.18999 + -0.193301 1.17098 -3.44696 -0.954633 -0.154396 -0.254632 + -0.126099 1.04517 -3.36815 -0.0556157 0.15951 0.985628 + -0.120362 1.14332 -3.38379 -0.0355452 0.101679 0.994182 + -0.161192 1.14824 -3.39335 -0.374325 0.0748327 0.924273 + -0.166337 1.23463 -3.39624 -0.36861 -0.0912887 0.925091 + -0.196173 1.24694 -3.41281 -0.763863 -0.176581 0.620752 + -0.091073 1.14322 -3.38761 0.332416 0.0869823 0.939113 + -0.082343 1.22998 -3.39421 0.376697 -0.0499367 0.92499 + -0.125506 1.22972 -3.38668 -0.0387002 -0.0562603 0.997666 + -0.062932 1.14852 -3.40534 0.602212 0.0456936 0.797028 + -0.054202 1.23528 -3.41194 0.635332 -0.0503034 0.770599 + -0.039483 1.31898 -3.41339 0.690144 -0.142272 0.709549 + -0.079466 1.29589 -3.38419 0.412329 -0.155274 0.897705 + -0.122629 1.29563 -3.37666 0.00508542 -0.179858 0.98368 + -0.045961 1.1537 -3.42083 0.788275 0.00197918 0.615321 + -0.03486 1.24243 -3.43173 0.820211 -0.0729481 0.56739 + -0.020141 1.32613 -3.43318 0.907723 -0.15571 0.389608 + -0.011027 1.37809 -3.43342 0.904738 -0.252158 0.343314 + -0.033067 1.36756 -3.40765 0.720628 -0.225701 0.655556 + -0.03672 1.15996 -3.43768 0.984746 -0.101403 0.141399 + -0.025619 1.24869 -3.44858 0.992954 -0.0971488 0.0678533 + -0.020138 1.3201 -3.44856 0.984085 -0.132565 -0.118338 + -0.011025 1.37206 -3.4488 0.954851 -0.235054 -0.181681 + -0.051485 1.06648 -3.43248 0.880501 -0.236271 -0.410967 + -0.038864 1.16704 -3.4553 0.901422 -0.170848 -0.397805 + -0.030731 1.24856 -3.46418 0.885025 -0.089912 -0.456778 + -0.02525 1.31997 -3.46416 0.752804 -0.052248 -0.656168 + -0.019385 1.36442 -3.4612 0.71315 -0.158792 -0.68279 + -0.062989 1.07403 -3.45028 0.62977 -0.285083 -0.722576 + -0.053384 1.17657 -3.47777 0.658552 -0.200392 -0.725363 + -0.045251 1.2581 -3.48665 0.687995 0.0143905 -0.725573 + -0.040422 1.30972 -3.47184 0.527488 0.0333045 -0.84891 + -0.034557 1.35416 -3.46888 0.504975 -0.0713019 -0.860184 + -0.077743 0.980436 -3.4212 0.585176 -0.365 -0.724116 + -0.083243 1.08047 -3.46442 0.358027 -0.305043 -0.882477 + -0.073639 1.18301 -3.49191 0.382668 -0.207642 -0.90025 + -0.070166 1.25611 -3.50245 0.424421 -0.0109552 -0.905399 + -0.09248 0.89239 -3.38254 0.533952 -0.469653 -0.70308 + -0.104595 0.89648 -3.39094 0.260587 -0.476158 -0.839862 + -0.089859 0.984527 -3.4296 0.330789 -0.380542 -0.863578 + -0.104442 1.08492 -3.47127 0.0839557 -0.308391 -0.947548 + -0.107434 1.18723 -3.50136 0.0833086 -0.217474 -0.972504 + -0.116169 0.898099 -3.39343 0.0201028 -0.469621 -0.882639 + -0.111057 0.988976 -3.43646 0.0608176 -0.382686 -0.921874 + -0.132096 1.08551 -3.46917 -0.216844 -0.304605 -0.927467 + -0.133066 0.898663 -3.39205 -0.207426 -0.453354 -0.866859 + -0.127953 0.989541 -3.43507 -0.20885 -0.370352 -0.905108 + -0.157624 1.08271 -3.45826 -0.473128 -0.286403 -0.833141 + -0.165186 1.18429 -3.48549 -0.504392 -0.21294 -0.836806 + -0.135089 1.18782 -3.49926 -0.232552 -0.226026 -0.945955 + -0.153481 0.986745 -3.42415 -0.453962 -0.345674 -0.821236 + -0.175927 1.0775 -3.44208 -0.745893 -0.244613 -0.619523 + -0.183489 1.17908 -3.4693 -0.758234 -0.190554 -0.623514 + -0.192842 1.26553 -3.47934 -0.762133 -0.0916269 -0.640904 + -0.168579 1.25838 -3.49837 -0.517788 -0.0802621 -0.851736 + -0.202654 1.25742 -3.457 -0.940079 -0.141508 -0.310204 + -0.217438 1.34522 -3.45249 -0.913601 -0.1639 -0.372116 + -0.198307 1.32203 -3.4742 -0.704839 -0.0588379 -0.706923 + -0.174044 1.31488 -3.49323 -0.536643 -0.0347598 -0.843093 + -0.138482 1.26191 -3.51215 -0.215974 -0.0617531 -0.974444 + -0.206185 1.25572 -3.43363 -0.981405 -0.174053 0.0809284 + -0.220969 1.34351 -3.42911 -0.97659 -0.20886 -0.0514645 + -0.235157 1.39875 -3.42348 -0.938221 -0.330245 -0.103346 + -0.227261 1.39459 -3.45194 -0.896375 -0.298373 -0.32785 + -0.208129 1.3714 -3.47365 -0.75561 -0.241405 -0.608915 + -0.216163 1.33037 -3.4005 -0.834021 -0.251043 0.491311 + -0.23035 1.38562 -3.39487 -0.846167 -0.397572 0.354878 + -0.240846 1.40782 -3.38741 -0.853154 -0.306734 0.421951 + -0.246637 1.42629 -3.42525 -0.972225 -0.215448 -0.0914337 + -0.238741 1.42212 -3.45371 -0.88983 -0.204054 -0.408122 + -0.186326 1.31806 -3.38394 -0.380923 -0.241721 0.892451 + -0.193244 1.36576 -3.37333 -0.420574 -0.359847 0.832843 + -0.203739 1.38796 -3.36587 -0.440712 -0.314686 0.840682 + -0.233773 1.47268 -3.36828 -0.568142 -0.0261557 0.822515 + -0.247411 1.47396 -3.38664 -0.925928 -0.0468269 0.374787 + -0.129546 1.34333 -3.36606 -0.0229383 -0.380094 0.924663 + -0.129607 1.36256 -3.35343 -0.018699 -0.351372 0.936049 + -0.122787 1.41055 -3.34648 0.0740658 -0.0906146 0.993128 + -0.196918 1.43595 -3.35892 -0.247167 -0.0614541 0.967022 + -0.07305 1.34448 -3.37845 0.479049 -0.312017 0.820462 + -0.073112 1.36371 -3.36582 0.453341 -0.297844 0.840101 + -0.069783 1.41068 -3.36405 0.4847 -0.0663472 0.87216 + -0.117553 1.48198 -3.34654 0.0960616 -0.0144337 0.995271 + -0.164313 1.51504 -3.35114 -0.151542 0.0317332 0.987941 + -0.024941 1.39305 -3.40588 0.734603 -0.180485 0.654052 + -0.021612 1.44002 -3.40411 0.722868 -0.0173732 0.690768 + -0.064549 1.48211 -3.36411 0.542368 -0.0188203 0.83993 + -0.094516 1.52942 -3.34775 0.219293 0.0386151 0.974894 + -0.002901 1.40358 -3.43164 0.92223 -0.184969 0.339527 + 0.001168 1.44139 -3.43087 0.933247 -0.0297194 0.358005 + -0.021597 1.51175 -3.41137 0.748304 0.0181527 0.663108 + -0.013123 1.57046 -3.41925 0.914963 -0.040804 0.401468 + -0.056075 1.54083 -3.37199 0.71383 -0.0931773 0.694093 + -0.002896 1.3993 -3.45006 0.955614 -0.188155 -0.226717 + 0.001172 1.43711 -3.44928 0.955307 -0.0328413 -0.293784 + 0.001183 1.51311 -3.43813 0.989659 0.138968 0.0355261 + -0.011257 1.39166 -3.46246 0.703873 -0.169762 -0.689742 + -0.011073 1.44453 -3.46711 0.620548 0.046224 -0.782804 + -0.011063 1.52054 -3.45595 0.863862 0.088788 -0.495841 + -0.029536 1.38166 -3.47059 0.522139 -0.138507 -0.841538 + -0.029353 1.43453 -3.47524 0.575167 -0.06648 -0.81533 + -0.041779 1.51527 -3.50199 0.720635 -0.0311367 -0.692616 + -0.039756 1.59678 -3.49803 0.671506 0.042351 -0.739788 + -0.009039 1.60204 -3.45199 0.934666 -0.0735715 -0.347833 + -0.057839 1.37151 -3.48744 0.550857 -0.158949 -0.819324 + -0.054059 1.41429 -3.49364 0.595397 -0.144842 -0.790268 + -0.066486 1.49502 -3.5204 0.455704 -0.0515371 -0.888638 + -0.046079 1.64023 -3.49797 0.366265 0.195073 -0.909833 + -0.009016 1.72638 -3.45139 0.791461 0.0559912 -0.60865 + -0.06286 1.34401 -3.48573 0.544074 -0.0714078 -0.835993 + -0.101424 1.36259 -3.51539 0.317609 -0.165723 -0.933628 + -0.097644 1.40537 -3.52159 0.312029 -0.151729 -0.937879 + -0.065337 1.30773 -3.48765 0.526927 0.0953753 -0.844542 + -0.099036 1.33258 -3.50934 0.348894 -0.0589408 -0.935307 + -0.139275 1.33491 -3.513 -0.210491 -0.127275 -0.969275 + -0.141663 1.36492 -3.51906 -0.186031 -0.171324 -0.967492 + -0.101513 1.29631 -3.51126 0.253415 0.0453247 -0.966295 + -0.136033 1.29788 -3.51151 -0.209251 -0.0067073 -0.977839 + -0.177285 1.35191 -3.49472 -0.567322 -0.207713 -0.796869 + -0.184847 1.37756 -3.50042 -0.561368 -0.242097 -0.791363 + -0.103962 1.26034 -3.5119 0.131742 -0.0675522 -0.98898 + -0.215691 1.39704 -3.47935 -0.761032 -0.232816 -0.605497 + -0.241301 1.48495 -3.45658 -0.863912 -0.018531 -0.503302 + -0.218252 1.45987 -3.48222 -0.722114 -0.0439708 -0.690375 + -0.191368 1.42331 -3.50452 -0.556715 -0.0956094 -0.825183 + -0.148184 1.41067 -3.52316 -0.23442 -0.113724 -0.96546 + -0.123403 1.43634 -3.52897 -0.00501192 -0.0748548 -0.997182 + -0.253202 1.49243 -3.42449 -0.993295 -0.0314111 -0.111258 + -0.241996 1.59388 -3.44778 -0.857664 0.0824427 -0.507558 + -0.208758 1.54906 -3.49504 -0.634685 0.103079 -0.765865 + -0.181874 1.51251 -3.51734 -0.455282 0.0289566 -0.889876 + -0.157093 1.53818 -3.52316 -0.221255 0.149735 -0.963652 + -0.251002 1.57982 -3.39807 -0.922518 0.0173927 0.385562 + -0.253897 1.60135 -3.41568 -0.993631 0.0333873 -0.107627 + -0.238164 1.68532 -3.43339 -0.814071 0.214718 -0.539616 + -0.237364 1.57854 -3.37971 -0.615142 0.0878097 0.783511 + -0.234255 1.66947 -3.3863 -0.26206 -0.0333192 0.964476 + -0.249449 1.65451 -3.39346 -0.782252 -0.0145871 0.622791 + -0.252343 1.67604 -3.41108 -0.976304 0.130603 -0.17255 + -0.201168 1.55176 -3.3605 -0.296178 0.079298 0.951835 + -0.191027 1.58842 -3.36185 -0.195249 0.225642 0.954444 + -0.227224 1.6152 -3.38105 -0.197949 0.162864 0.966587 + -0.141276 1.56247 -3.35235 -0.0350407 0.18479 0.982153 + -0.143849 1.5932 -3.36212 0.00507204 0.329282 0.944218 + -0.193209 1.61933 -3.37365 -0.13668 0.296282 0.94527 + -0.225862 1.63376 -3.38559 0.167431 0.158994 0.972979 + -0.077163 1.57536 -3.35946 0.187325 0.222172 0.956843 + -0.079736 1.60609 -3.36923 0.102458 0.32863 0.938885 + -0.146032 1.62411 -3.37392 0.0161638 0.312995 0.949617 + -0.154579 1.64638 -3.37962 0.0426798 0.158979 0.986359 + -0.191848 1.63789 -3.37818 -0.123865 0.178654 0.976084 + -0.064608 1.54626 -3.36014 0.563743 -0.176207 0.806936 + -0.047256 1.5922 -3.37184 0.597639 0.0307288 0.801176 + -0.03764 1.62064 -3.38122 0.521036 0.141413 0.841739 + -0.068242 1.64546 -3.38563 0.114253 0.32247 0.939659 + -0.076789 1.66772 -3.39133 0.126788 0.181867 0.975115 + -0.021648 1.62986 -3.40189 0.798985 -0.086193 0.595142 + -0.012032 1.65829 -3.41127 0.769181 -0.0241418 0.638574 + -0.026146 1.66 -3.39762 0.465442 0.150505 0.872188 + -0.046152 1.69277 -3.39845 0.189343 0.128388 0.973481 + -0.148311 1.67115 -3.38142 0.0817894 0.0698268 0.994201 + -0.013115 1.62442 -3.41374 0.799651 -0.0706683 0.596291 + -0.003494 1.68935 -3.41994 0.782296 -0.0420202 0.621488 + -0.017607 1.69106 -3.4063 0.502039 0.0614457 0.862659 + -0.03203 1.74658 -3.40808 0.241514 0.0497681 0.96912 + -0.117674 1.6962 -3.38854 0.186673 0.0520213 0.981044 + 0.001204 1.6343 -3.43293 0.99647 -0.0624539 0.0560929 + 0.001212 1.68825 -3.42743 0.957973 -0.0297576 0.285309 + 0.00122 1.74377 -3.42341 0.952214 0.0484955 0.301557 + -0.003485 1.74487 -3.41593 0.633891 0.0715405 0.770106 + -0.041176 1.76728 -3.40588 0.299384 -0.0336773 0.953538 + 0.001227 1.75864 -3.43234 0.967184 0.197943 -0.159293 + -0.012625 1.78903 -3.41537 0.642229 0.234497 0.729762 + -0.082733 1.7756 -3.38966 0.234333 0.0185598 0.971979 + -0.126819 1.71691 -3.38634 0.1818 -0.0311398 0.982842 + -0.185579 1.66266 -3.37999 -0.0478121 0.0405391 0.998033 + -0.015339 1.76984 -3.45134 0.516497 0.33758 -0.786938 + -0.018947 1.81086 -3.42742 0.528296 0.839127 -0.129493 + -0.012619 1.80389 -3.4243 0.810861 0.573147 0.118353 + -0.054183 1.79735 -3.39915 0.312284 0.311382 0.897508 + -0.034331 1.77586 -3.45177 0.0653851 0.434678 -0.898209 + -0.037939 1.81688 -3.42785 0.170847 0.959794 -0.222725 + -0.060512 1.80431 -3.40227 0.146369 0.7268 0.671072 + -0.090427 1.62068 -3.50581 0.0462415 0.238949 -0.96993 + -0.078679 1.75631 -3.45961 0.00857797 0.384404 -0.923125 + -0.092595 1.81509 -3.42965 -0.0471287 0.921497 -0.385516 + -0.073656 1.81358 -3.41959 -0.0212948 0.938497 0.344631 + -0.096229 1.801 -3.39401 0.0430479 0.644191 0.763652 + -0.092244 1.526 -3.52778 0.200049 0.1253 -0.971741 + -0.155275 1.63286 -3.50119 -0.185561 0.254511 -0.9491 + -0.158067 1.74829 -3.46422 -0.144246 0.355974 -0.923296 + -0.171983 1.80707 -3.43425 -0.201026 0.862613 -0.464207 + -0.204926 1.6405 -3.48065 -0.546569 0.196231 -0.814098 + -0.207717 1.75593 -3.44368 -0.625529 0.318462 -0.712247 + -0.205488 1.79827 -3.42416 -0.563403 0.744809 -0.357542 + -0.180756 1.79915 -3.40445 -0.14267 0.948382 0.283227 + -0.228842 1.73752 -3.40879 -0.894368 0.327622 -0.304582 + -0.226613 1.77986 -3.38927 -0.699862 0.483846 0.52544 + -0.21426 1.79034 -3.39435 -0.354112 0.752381 0.555453 + -0.161817 1.79763 -3.39439 -0.0671082 0.738359 0.67106 + -0.243022 1.72825 -3.38648 -0.86226 0.338485 0.376743 + -0.227827 1.7432 -3.37932 -0.465084 0.283924 0.838501 + -0.215475 1.75369 -3.38439 0.0842919 0.184764 0.979161 + -0.184037 1.77387 -3.38475 -0.0551369 0.242618 0.968554 + -0.118449 1.77725 -3.38438 0.0616458 0.176749 0.982323 + -0.193972 1.69836 -3.3807 -0.037276 0.00223762 0.999302 + -0.162534 1.71855 -3.38106 0.0579043 0.00773888 0.998292 + 0.136798 0.847063 -3.35448 0.644273 -0.753569 -0.130558 + 0.133302 0.844537 -3.34848 0.418209 -0.778785 0.467541 + 0.118475 0.842721 -3.34595 0.0524625 -0.930993 -0.361248 + 0.152406 0.885082 -3.35423 0.741876 -0.129478 0.657917 + 0.138949 0.881012 -3.34624 0.345055 0.00308332 0.938577 + 0.124122 0.879198 -3.34372 0.0272044 0.0313708 0.999137 + 0.118475 0.842721 -3.34595 -0.166227 -0.123161 0.978366 + 0.133971 0.849398 -3.36091 0.374832 -0.728703 -0.573143 + 0.15653 0.892167 -3.37189 0.890448 -0.359363 -0.279214 + 0.155902 0.88761 -3.36023 0.946909 -0.249627 0.202609 + 0.162365 0.965675 -3.36855 0.698251 0.0564672 0.713622 + 0.148908 0.961604 -3.36056 0.362444 0.125742 0.923485 + 0.124687 0.850417 -3.36488 0.0825573 -0.726833 -0.681835 + 0.14235 0.897646 -3.38808 0.417194 -0.439866 -0.795278 + 0.153703 0.894503 -3.37832 0.674709 -0.410682 -0.613277 + 0.172608 0.977179 -3.3967 0.945946 -0.215314 -0.242543 + 0.17198 0.972621 -3.38504 0.964299 -0.0919315 0.248345 + 0.113113 0.848798 -3.36239 -0.224884 -0.747657 -0.624849 + 0.104595 0.89648 -3.39094 -0.259116 -0.473458 -0.841841 + 0.116169 0.898099 -3.39343 -0.0231674 -0.466681 -0.884122 + 0.133066 0.898663 -3.39205 0.207424 -0.453352 -0.866861 + 0.110367 0.844247 -3.35106 -0.51614 -0.813736 0.267271 + 0.108929 0.846051 -3.35592 -0.532043 -0.796446 -0.287409 + 0.088296 0.889645 -3.37606 -0.76816 -0.449908 -0.455535 + 0.09248 0.89239 -3.38254 -0.533949 -0.469652 -0.703082 + 0.089859 0.984527 -3.4296 -0.329647 -0.38184 -0.863441 + 0.088223 0.883575 -3.36059 -0.864952 -0.22641 0.447881 + 0.086785 0.885379 -3.36544 -0.933112 -0.357289 -0.0405903 + 0.064728 0.968621 -3.39278 -0.974249 -0.180286 0.135409 + 0.066239 0.972886 -3.4034 -0.847902 -0.310072 -0.430021 + 0.077743 0.980436 -3.4212 -0.585075 -0.364686 -0.724355 + 0.098235 0.880453 -3.35125 -0.620086 -0.0692159 0.781475 + 0.072933 0.963663 -3.37943 -0.776025 0.00563757 0.630677 + 0.057545 1.05444 -3.40151 -0.768709 0.0279504 0.638987 + 0.04934 1.0594 -3.41486 -0.979012 -0.109645 0.171793 + 0.051485 1.06648 -3.43248 -0.880498 -0.236275 -0.410971 + 0.106343 0.878927 -3.34614 -0.362615 -0.0130616 0.931847 + 0.105239 0.956342 -3.35604 -0.326999 0.126899 0.936466 + 0.082945 0.960539 -3.37009 -0.599746 0.0777342 0.796406 + 0.074516 1.04927 -3.38601 -0.59053 0.0874151 0.802267 + 0.045961 1.1537 -3.42083 -0.789501 -0.000536091 0.613749 + 0.123019 0.956611 -3.35362 0.0459985 0.143033 0.988648 + 0.126099 1.04517 -3.36815 0.054473 0.157725 0.985979 + 0.09681 1.04507 -3.37197 -0.331635 0.132492 0.934058 + 0.091073 1.14322 -3.38761 -0.335557 0.0824387 0.938406 + 0.062932 1.14852 -3.40534 -0.600801 0.0431508 0.798233 + 0.151989 1.05016 -3.37509 0.364926 0.138766 0.920637 + 0.161192 1.14824 -3.39335 0.373293 0.0729476 0.924841 + 0.120362 1.14332 -3.38379 0.0377029 0.0986842 0.994404 + 0.173576 1.05657 -3.38854 0.708296 0.0659715 0.702826 + 0.182779 1.15464 -3.4068 0.750561 -0.0066001 0.660768 + 0.196173 1.24694 -3.41281 0.77225 -0.159824 0.614887 + 0.166337 1.23463 -3.39624 0.375199 -0.0994423 0.921595 + 0.125506 1.22972 -3.38668 0.0332146 -0.0631781 0.997449 + 0.18319 1.06351 -3.40504 0.965254 -0.0474452 0.25697 + 0.192791 1.16341 -3.42762 0.977809 -0.0918353 0.188295 + 0.206185 1.25572 -3.43363 0.982062 -0.157466 0.103726 + 0.183701 1.07108 -3.42438 0.954114 -0.168562 -0.247493 + 0.193301 1.17098 -3.44696 0.958867 -0.143556 -0.244877 + 0.202654 1.25742 -3.457 0.940065 -0.13318 -0.313912 + 0.220969 1.34351 -3.42911 0.975769 -0.21253 -0.0520201 + 0.175927 1.0775 -3.44208 0.746257 -0.244036 -0.619312 + 0.183489 1.17908 -3.4693 0.75846 -0.191307 -0.623009 + 0.192842 1.26553 -3.47934 0.776011 -0.074095 -0.626352 + 0.198307 1.32203 -3.4742 0.726964 -0.0842817 -0.681484 + 0.217438 1.34522 -3.45249 0.915272 -0.162842 -0.368456 + 0.164834 0.983602 -3.4144 0.715204 -0.30648 -0.628135 + 0.157624 1.08271 -3.45826 0.473671 -0.287328 -0.832513 + 0.165186 1.18429 -3.48549 0.50443 -0.212649 -0.836858 + 0.168579 1.25838 -3.49837 0.516899 -0.079055 -0.852388 + 0.153481 0.986745 -3.42415 0.45316 -0.346539 -0.821314 + 0.132096 1.08551 -3.46917 0.215124 -0.306558 -0.927224 + 0.135089 1.18782 -3.49926 0.226565 -0.218286 -0.949221 + 0.138482 1.26191 -3.51215 0.212535 -0.0665339 -0.974886 + 0.127953 0.989541 -3.43507 0.208443 -0.369834 -0.905414 + 0.104442 1.08492 -3.47127 -0.082372 -0.310089 -0.947132 + 0.107434 1.18723 -3.50136 -0.0774923 -0.209999 -0.974626 + 0.103962 1.26034 -3.5119 -0.165686 -0.0385802 -0.985424 + 0.136033 1.29788 -3.51151 0.197503 0.00587325 -0.980285 + 0.111057 0.988976 -3.43646 -0.0611133 -0.383501 -0.921516 + 0.083243 1.08047 -3.46442 -0.358615 -0.306165 -0.88185 + 0.073639 1.18301 -3.49191 -0.38366 -0.20649 -0.900093 + 0.070166 1.25611 -3.50245 -0.40029 0.0243961 -0.916064 + 0.062989 1.07403 -3.45028 -0.629491 -0.285434 -0.722681 + 0.053384 1.17657 -3.47777 -0.658474 -0.200181 -0.725493 + 0.045251 1.2581 -3.48665 -0.663545 -0.01177 -0.748044 + 0.065337 1.30773 -3.48765 -0.513251 0.0778075 -0.854705 + 0.101513 1.29631 -3.51126 -0.289925 0.0125623 -0.956967 + 0.038864 1.16704 -3.4553 -0.896698 -0.179268 -0.404716 + 0.030731 1.24856 -3.46418 -0.886965 -0.107098 -0.449247 + 0.02525 1.31997 -3.46416 -0.762912 -0.0254145 -0.646002 + 0.040422 1.30972 -3.47184 -0.441165 0.123454 -0.888894 + 0.03672 1.15996 -3.43768 -0.984215 -0.10424 0.143019 + 0.025619 1.24869 -3.44858 -0.992268 -0.113612 0.0499617 + 0.020138 1.3201 -3.44856 -0.983841 -0.105445 -0.1447 + 0.019385 1.36442 -3.4612 -0.71315 -0.158792 -0.68279 + 0.034557 1.35416 -3.46888 -0.506327 -0.069517 -0.859535 + 0.03486 1.24243 -3.43173 -0.81622 -0.0825906 0.571808 + 0.020141 1.32613 -3.43318 -0.91029 -0.149717 0.38595 + 0.011025 1.37206 -3.4488 -0.954851 -0.235054 -0.181681 + 0.011257 1.39166 -3.46246 -0.705798 -0.165854 -0.688725 + 0.029536 1.38166 -3.47059 -0.50628 -0.123329 -0.853505 + 0.054202 1.23528 -3.41194 -0.642404 -0.0605293 0.763972 + 0.039483 1.31898 -3.41339 -0.688684 -0.144229 0.710571 + 0.033067 1.36756 -3.40765 -0.729707 -0.229854 0.643968 + 0.011027 1.37809 -3.43342 -0.906878 -0.247609 0.340972 + 0.002896 1.3993 -3.45006 -0.954732 -0.179947 -0.236867 + 0.082343 1.22998 -3.39421 -0.371166 -0.0581707 0.926743 + 0.079466 1.29589 -3.38419 -0.406767 -0.150988 0.900968 + 0.07305 1.34448 -3.37845 -0.476082 -0.317518 0.820078 + 0.073112 1.36371 -3.36582 -0.455116 -0.307591 0.835618 + 0.024941 1.39305 -3.40588 -0.73676 -0.177454 0.652453 + 0.122629 1.29563 -3.37666 -0.00834578 -0.178819 0.983847 + 0.129546 1.34333 -3.36606 0.0326732 -0.370994 0.92806 + 0.129607 1.36256 -3.35343 0.0419869 -0.366039 0.929652 + 0.122787 1.41055 -3.34648 -0.0563654 -0.068589 0.996051 + 0.069783 1.41068 -3.36405 -0.503245 -0.0429086 0.863078 + 0.186326 1.31806 -3.38394 0.386595 -0.234423 0.891959 + 0.193244 1.36576 -3.37333 0.411674 -0.355328 0.839206 + 0.203739 1.38796 -3.36587 0.449204 -0.297792 0.842339 + 0.196918 1.43595 -3.35892 0.323566 -0.0701775 0.9436 + 0.216163 1.33037 -3.4005 0.835803 -0.264212 0.481274 + 0.23035 1.38562 -3.39487 0.844753 -0.400001 0.355516 + 0.240846 1.40782 -3.38741 0.842707 -0.272854 0.464108 + 0.235157 1.39875 -3.42348 0.936443 -0.33423 -0.106606 + 0.246637 1.42629 -3.42525 0.973179 -0.207393 -0.0995559 + 0.253202 1.49243 -3.42449 0.992725 -0.0366179 -0.114701 + 0.247411 1.47396 -3.38664 0.901998 -0.0992285 0.420182 + 0.227261 1.39459 -3.45194 0.896336 -0.305675 -0.321162 + 0.238741 1.42212 -3.45371 0.893249 -0.19723 -0.403988 + 0.241301 1.48495 -3.45658 0.85445 -0.00846099 -0.519464 + 0.253897 1.60135 -3.41568 0.995215 0.0188373 -0.0958803 + 0.208129 1.3714 -3.47365 0.75453 -0.243187 -0.609545 + 0.215691 1.39704 -3.47935 0.745912 -0.216412 -0.629905 + 0.218252 1.45987 -3.48222 0.722687 -0.0414908 -0.689929 + 0.241996 1.59388 -3.44778 0.854788 0.0715361 -0.514023 + 0.177285 1.35191 -3.49472 0.554495 -0.198112 -0.808261 + 0.184847 1.37756 -3.50042 0.560997 -0.240097 -0.792234 + 0.191368 1.42331 -3.50452 0.598302 -0.122097 -0.791914 + 0.208758 1.54906 -3.49504 0.673867 0.0754104 -0.734994 + 0.174044 1.31488 -3.49323 0.538996 -0.0313707 -0.841724 + 0.139275 1.33491 -3.513 0.208385 -0.128411 -0.96958 + 0.141663 1.36492 -3.51906 0.204341 -0.191438 -0.959998 + 0.148184 1.41067 -3.52316 0.281806 -0.0985886 -0.954393 + 0.181874 1.51251 -3.51734 0.453933 0.0225164 -0.890751 + 0.099036 1.33258 -3.50934 -0.33649 -0.0718157 -0.938945 + 0.101424 1.36259 -3.51539 -0.315509 -0.164939 -0.934478 + 0.123403 1.43634 -3.52897 0.00318025 -0.053921 -0.99854 + 0.06286 1.34401 -3.48573 -0.544687 -0.0711034 -0.835619 + 0.057839 1.37151 -3.48744 -0.560434 -0.144803 -0.815442 + 0.054059 1.41429 -3.49364 -0.619498 -0.16478 -0.767509 + 0.097644 1.40537 -3.52159 -0.335099 -0.150186 -0.930136 + 0.029353 1.43453 -3.47524 -0.549058 -0.133942 -0.824982 + 0.066486 1.49502 -3.5204 -0.464117 -0.0279521 -0.885333 + 0.092244 1.526 -3.52778 -0.201548 0.125674 -0.971383 + 0.157093 1.53818 -3.52316 0.219024 0.148888 -0.964293 + 0.011073 1.44453 -3.46711 -0.701663 -0.0462202 -0.711008 + 0.041779 1.51527 -3.50199 -0.659504 0.0362806 -0.750825 + 0.090427 1.62068 -3.50581 -0.0789496 0.214656 -0.973494 + 0.155275 1.63286 -3.50119 0.181658 0.25687 -0.94922 + 0.204926 1.6405 -3.48065 0.553611 0.213123 -0.805042 + -0.001172 1.43711 -3.44928 -0.953563 -0.0380412 -0.298782 + 0.011063 1.52054 -3.45595 -0.832286 0.0430625 -0.552671 + 0.009039 1.60204 -3.45199 -0.857011 0.00284538 -0.515291 + 0.039756 1.59678 -3.49803 -0.547017 0.0302118 -0.836576 + 0.002901 1.40358 -3.43164 -0.923075 -0.188257 0.335399 + -0.001168 1.44139 -3.43087 -0.934062 -0.0272306 0.35607 + -0.001183 1.51311 -3.43813 -0.997473 0.0436565 0.0560497 + -0.001204 1.6343 -3.43293 -0.997772 -0.0301779 0.0594994 + 0.009016 1.72638 -3.45139 -0.792856 0.0694456 -0.605439 + 0.021612 1.44002 -3.40411 -0.697793 0.00819096 0.716253 + 0.021597 1.51175 -3.41137 -0.743377 0.00729435 0.668832 + 0.064549 1.48211 -3.36411 -0.54446 -0.0033888 0.83878 + 0.056075 1.54083 -3.37199 -0.71319 -0.108131 0.692581 + 0.013123 1.57046 -3.41925 -0.736621 -0.0302573 0.675628 + 0.117553 1.48198 -3.34654 -0.0977576 -0.0105094 0.995155 + 0.064608 1.54626 -3.36014 -0.575365 -0.11508 0.80976 + 0.013115 1.62442 -3.41374 -0.798984 -0.0661801 0.597699 + -0.001212 1.68825 -3.42743 -0.957608 -0.0312965 0.28637 + 0.164313 1.51504 -3.35114 0.149745 0.0264483 0.988371 + 0.141276 1.56247 -3.35235 0.0652717 0.203226 0.976954 + 0.094516 1.52942 -3.34775 -0.230284 -0.00764833 0.973093 + 0.047256 1.5922 -3.37184 -0.618391 0.00652165 0.785844 + 0.021648 1.62986 -3.40189 -0.801785 -0.0833689 0.591769 + 0.233773 1.47268 -3.36828 0.605837 -0.21071 0.767178 + 0.201168 1.55176 -3.3605 0.277501 0.0926896 0.956244 + 0.143849 1.5932 -3.36212 0.0172028 0.307579 0.951367 + 0.077163 1.57536 -3.35946 -0.184267 0.217304 0.958553 + 0.03764 1.62064 -3.38122 -0.523824 0.144665 0.839452 + 0.237364 1.57854 -3.37971 0.60568 0.0752778 0.79214 + 0.227224 1.6152 -3.38105 0.490765 0.229968 0.840395 + 0.191027 1.58842 -3.36185 0.15985 0.189648 0.968753 + 0.251002 1.57982 -3.39807 0.928625 -0.00304574 0.371007 + 0.249449 1.65451 -3.39346 0.781966 0.00512945 0.6233 + 0.225862 1.63376 -3.38559 0.23243 0.123383 0.964755 + 0.193209 1.61933 -3.37365 0.1369 0.296086 0.9453 + 0.146032 1.62411 -3.37392 -0.0189266 0.311497 0.950059 + 0.252343 1.67604 -3.41108 0.977085 0.145859 -0.155013 + 0.243022 1.72825 -3.38648 0.862257 0.338479 0.376756 + 0.227827 1.7432 -3.37932 0.465086 0.283922 0.838501 + 0.234255 1.66947 -3.3863 0.262314 -0.0480649 0.963785 + 0.238164 1.68532 -3.43339 0.721099 0.315619 -0.616767 + 0.228842 1.73752 -3.40879 0.884248 0.298036 -0.359554 + 0.226613 1.77986 -3.38927 0.699862 0.483846 0.52544 + 0.215475 1.75369 -3.38439 -0.101678 0.212118 0.97194 + 0.193972 1.69836 -3.3807 0.0147462 -0.000807294 0.999891 + 0.207717 1.75593 -3.44368 0.639032 0.293813 -0.710853 + 0.205488 1.79827 -3.42416 0.557475 0.742844 -0.37068 + 0.21426 1.79034 -3.39435 0.240132 0.743464 0.624178 + 0.158067 1.74829 -3.46422 0.149806 0.361443 -0.920281 + 0.171983 1.80707 -3.43425 0.210681 0.857248 -0.469829 + 0.180756 1.79915 -3.40445 0.186924 0.858491 0.477549 + 0.184037 1.77387 -3.38475 0.185257 0.36676 0.911683 + 0.078679 1.75631 -3.45961 -0.0180836 0.408411 -0.912619 + 0.092595 1.81509 -3.42965 -0.0998686 0.905177 -0.413135 + 0.073656 1.81358 -3.41959 -0.0489731 0.989422 -0.136549 + 0.161817 1.79763 -3.39439 0.117239 0.72963 0.673717 + 0.046079 1.64023 -3.49797 -0.35891 0.17425 -0.916963 + 0.034331 1.77586 -3.45177 -0.0388783 0.452067 -0.891136 + 0.015339 1.76984 -3.45134 -0.622701 0.309822 -0.718508 + 0.018947 1.81086 -3.42742 -0.516286 0.847025 -0.126479 + 0.037939 1.81688 -3.42785 -0.0844579 0.962918 -0.256235 + 0.060512 1.80431 -3.40227 -0.119611 0.685296 0.718375 + 0.096229 1.801 -3.39401 -0.0685941 0.624635 0.777898 + 0.012619 1.80389 -3.4243 -0.808603 0.564728 0.165056 + 0.054183 1.79735 -3.39915 -0.274466 0.318251 0.907405 + -0.001227 1.75864 -3.43234 -0.923257 0.257088 -0.285486 + 0.012625 1.78903 -3.41537 -0.64193 0.232742 0.730587 + 0.041176 1.76728 -3.40588 -0.304434 -0.0354456 0.951874 + 0.082733 1.7756 -3.38966 -0.232686 0.0457158 0.971477 + 0.118449 1.77725 -3.38438 -0.064762 0.178125 0.981874 + -0.00122 1.74377 -3.42341 -0.952216 0.0484923 0.30155 + 0.003485 1.74487 -3.41593 -0.632229 0.0733501 0.771302 + 0.03203 1.74658 -3.40808 -0.245848 0.0569166 0.967636 + 0.126819 1.71691 -3.38634 -0.177767 -0.045177 0.983035 + 0.162534 1.71855 -3.38106 -0.0562797 -0.0297123 0.997973 + 0.003494 1.68935 -3.41994 -0.78273 -0.0442299 0.620788 + 0.017607 1.69106 -3.4063 -0.488889 0.0536665 0.870694 + 0.046152 1.69277 -3.39845 -0.216602 0.0555768 0.974677 + 0.117674 1.6962 -3.38854 -0.154953 0.0559571 0.986336 + 0.012032 1.65829 -3.41127 -0.811477 -0.0666819 0.580567 + 0.026146 1.66 -3.39762 -0.4667 0.160985 0.869641 + 0.068242 1.64546 -3.38563 -0.108861 0.314174 0.943103 + 0.076789 1.66772 -3.39133 -0.125249 0.187527 0.974241 + 0.148311 1.67115 -3.38142 -0.0959864 0.0838564 0.991844 + 0.079736 1.60609 -3.36923 -0.0877122 0.33747 0.937241 + 0.154579 1.64638 -3.37962 -0.0428927 0.159269 0.986303 + 0.185579 1.66266 -3.37999 0.0509642 0.0400256 0.997898 + 0.191848 1.63789 -3.37818 0.124288 0.178936 0.975979 + -0.599647 0.53971 -3.10657 -0.395676 -0.882245 0.255117 + -0.586175 0.537351 -3.1025 0.0382405 -0.36898 0.92865 + -0.595384 0.580943 -3.08802 -0.141179 -0.173689 0.974629 + -0.576324 0.581513 -3.08902 0.232008 -0.168986 0.957923 + -0.59542 0.685736 -3.08962 -0.121704 0.0199639 0.992366 + -0.608855 0.583301 -3.0921 -0.40878 -0.186391 0.893396 + -0.621625 0.587169 -3.09879 -0.660344 -0.229308 0.715097 + -0.604914 0.543026 -3.11231 -0.598562 -0.793658 -0.108764 + -0.586175 0.537351 -3.1025 -0.000228404 -0.865987 -0.500066 + -0.571676 0.540546 -3.10803 0.494248 -0.846384 0.198376 + -0.561824 0.584708 -3.09456 0.558671 -0.186206 0.808216 + -0.551338 0.69182 -3.10017 0.52954 -0.0151439 0.84815 + -0.57636 0.686306 -3.09062 0.203849 0.0121425 0.978927 + -0.548117 0.591963 -3.10712 0.851263 -0.231359 0.470982 + -0.53763 0.699075 -3.11274 0.829607 -0.0636566 0.554708 + -0.523051 0.832381 -3.11654 0.778822 -0.0757542 0.622653 + -0.546327 0.812116 -3.10224 0.450073 -0.0204718 0.892757 + -0.571349 0.806601 -3.09268 0.137602 0.00995666 0.990437 + -0.566059 0.547996 -3.12093 0.607158 -0.724393 -0.326519 + -0.542499 0.599414 -3.12001 0.964921 -0.256918 0.0540361 + -0.527938 0.711931 -3.13499 0.986514 -0.114807 0.11666 + -0.513358 0.845238 -3.1388 0.981421 -0.121584 0.148425 + -0.605372 0.551679 -3.12737 -0.504871 -0.67326 -0.540209 + -0.591256 0.557566 -3.13757 -0.130253 -0.617476 -0.775731 + -0.577719 0.556843 -3.13631 0.13361 -0.639392 -0.757183 + -0.572659 0.555143 -3.13333 0.351091 -0.658123 -0.66604 + -0.54317 0.60936 -3.13725 0.876287 -0.286262 -0.387524 + -0.528608 0.721878 -3.15223 0.930118 -0.147194 -0.336475 + -0.511998 0.863474 -3.1584 0.945316 -0.118789 -0.303755 + -0.489735 1.01464 -3.13553 0.901997 -0.0358544 0.43025 + -0.513404 0.976579 -3.11442 0.590583 0.0166264 0.806806 + -0.536681 0.956314 -3.10013 0.301924 0.0503119 0.952004 + -0.539998 0.734214 -3.17363 0.788439 -0.157609 -0.594578 + -0.523388 0.875809 -3.1798 0.838502 -0.0856873 -0.538119 + -0.504907 1.04257 -3.16877 0.705771 -0.141211 -0.694224 + -0.488374 1.03288 -3.15513 0.894771 -0.120026 -0.430093 + -0.54977 0.616509 -3.14965 0.721342 -0.297364 -0.625492 + -0.557715 0.622536 -3.16013 0.549172 -0.304284 -0.778345 + -0.547943 0.740242 -3.18411 0.605163 -0.172563 -0.777174 + -0.53772 0.8772 -3.20066 0.671627 -0.123976 -0.730443 + -0.562775 0.624236 -3.16311 0.296171 -0.306305 -0.904688 + -0.556674 0.743174 -3.18924 0.337225 -0.194882 -0.921032 + -0.546451 0.880131 -3.2058 0.532273 -0.163371 -0.83066 + -0.539913 1.02456 -3.23291 0.784993 -0.168188 -0.596237 + -0.519239 1.04396 -3.18963 0.864432 -0.133117 -0.484806 + -0.575448 0.625885 -3.166 0.122911 -0.305821 -0.944122 + -0.569347 0.744823 -3.19213 0.135442 -0.219633 -0.966135 + -0.568121 0.873315 -3.22124 0.357146 -0.20475 -0.911331 + -0.588986 0.626609 -3.16726 -0.0837429 -0.299688 -0.950355 + -0.59271 0.746072 -3.19432 -0.0911789 -0.225703 -0.96992 + -0.591484 0.874562 -3.22342 -0.0441116 -0.246588 -0.968116 + -0.595496 1.0057 -3.25953 0.0893871 -0.245153 -0.965355 + -0.561584 1.01774 -3.24835 0.499579 -0.220708 -0.837681 + -0.60783 0.623089 -3.16117 -0.369648 -0.296901 -0.88046 + -0.611554 0.742554 -3.18823 -0.387965 -0.223543 -0.894154 + -0.620733 0.865637 -3.21597 -0.347217 -0.240953 -0.906301 + -0.621945 0.617204 -3.15097 -0.634042 -0.296573 -0.714167 + -0.635913 0.732394 -3.17062 -0.682062 -0.203838 -0.702311 + -0.645092 0.855476 -3.19836 -0.667173 -0.225454 -0.709966 + -0.660103 0.982023 -3.22652 -0.700863 -0.177584 -0.690837 + -0.624745 0.996771 -3.25208 -0.349333 -0.23417 -0.907266 + -0.631252 0.607295 -3.13376 -0.89556 -0.282222 -0.343979 + -0.64522 0.722485 -3.15341 -0.93676 -0.164801 -0.308741 + -0.659537 0.840098 -3.17165 -0.938084 -0.166875 -0.303565 + -0.630794 0.598641 -3.1187 -0.961021 -0.276293 -0.0100051 + -0.644429 0.707551 -3.12743 -0.989904 -0.109532 0.089957 + -0.658747 0.825165 -3.14567 -0.990262 -0.108617 0.0870886 + -0.673401 0.944969 -3.16209 -0.992213 -0.0530139 0.112706 + -0.674548 0.966645 -3.1998 -0.954531 -0.106706 -0.278361 + -0.626892 0.590484 -3.10453 -0.894568 -0.257589 0.365233 + -0.640528 0.699396 -3.11326 -0.88819 -0.0642961 0.454956 + -0.652691 0.812505 -3.12367 -0.883752 -0.0458961 0.4657 + -0.631437 0.693674 -3.10335 -0.61341 -0.0107478 0.789691 + -0.643601 0.806782 -3.11376 -0.630678 0.012058 0.775951 + -0.654151 0.924001 -3.12571 -0.622811 0.0443697 0.781113 + -0.667346 0.932309 -3.14009 -0.882415 -0.0134584 0.470278 + -0.618668 0.689806 -3.09666 -0.377197 0.0148861 0.926013 + -0.623781 0.803205 -3.10198 -0.402424 0.0313399 0.914917 + -0.634331 0.920423 -3.11392 -0.467161 0.0675622 0.881587 + -0.633643 1.04941 -3.12692 -0.40268 0.106096 0.909171 + -0.656342 1.0555 -3.13793 -0.585255 0.0550094 0.808981 + -0.600533 0.799135 -3.09494 -0.187967 0.0320471 0.981652 + -0.600585 0.924214 -3.09811 -0.254847 0.0736175 0.964175 + -0.599897 1.0532 -3.11111 -0.197205 0.168661 0.965745 + -0.571401 0.931682 -3.09585 -0.011632 0.0780312 0.996883 + -0.565238 1.05913 -3.11408 0.028076 0.184629 0.982407 + -0.590086 1.18348 -3.14239 0.138166 0.106386 0.984679 + -0.6301 1.19278 -3.13251 -0.0959655 0.0186021 0.995211 + -0.652799 1.19887 -3.14352 -0.784218 0.0287844 0.619817 + -0.530518 1.08377 -3.11835 0.165178 0.233346 0.958262 + -0.525271 1.19402 -3.15892 0.345001 0.213429 0.914014 + -0.555427 1.18942 -3.14536 0.225628 0.164157 0.960284 + -0.550287 1.27386 -3.15673 0.358751 -0.0906592 0.92902 + -0.59209 1.27668 -3.14199 0.268557 -0.134915 0.953769 + -0.504713 1.10571 -3.13411 0.439081 0.202716 0.875279 + -0.499466 1.21596 -3.17468 0.597109 0.190043 0.779323 + -0.492573 1.29355 -3.19233 0.78127 -0.0963477 0.616713 + -0.520131 1.27847 -3.17029 0.539567 -0.0830959 0.837832 + -0.481043 1.14377 -3.15522 0.72075 0.231674 0.653335 + -0.484796 1.23645 -3.19877 0.908286 0.105071 0.404941 + -0.477903 1.31404 -3.21642 0.962426 -0.177176 0.205777 + -0.4776 1.16244 -3.18029 0.947886 -0.0993064 -0.302738 + -0.481353 1.25512 -3.22384 0.99649 -0.0675314 -0.0494694 + -0.473405 1.33018 -3.25521 0.967246 -0.224523 -0.118427 + -0.460659 1.3721 -3.21381 0.947386 -0.201999 0.248306 + -0.494132 1.17213 -3.19393 0.621326 -0.407455 -0.669279 + -0.489383 1.26154 -3.26528 0.904318 -0.265871 -0.333947 + -0.481436 1.3366 -3.29665 0.919086 -0.253146 -0.30199 + -0.467885 1.3967 -3.30982 0.926739 -0.178114 -0.330802 + -0.456161 1.38825 -3.2526 0.973562 -0.205812 -0.0990929 + -0.51007 1.16584 -3.22143 0.878434 -0.250658 -0.406847 + -0.505321 1.25524 -3.29279 0.807945 -0.354259 -0.470878 + -0.497544 1.32711 -3.32836 0.81523 -0.298071 -0.496543 + -0.530744 1.14643 -3.26471 0.800967 -0.259368 -0.539611 + -0.523834 1.23336 -3.30446 0.711637 -0.361869 -0.602182 + -0.516057 1.30523 -3.34003 0.574913 -0.369233 -0.730166 + -0.510161 1.35627 -3.35803 0.521897 -0.224078 -0.823051 + -0.483994 1.38721 -3.34153 0.779375 -0.155347 -0.606994 + -0.554839 1.13258 -3.27977 0.492474 -0.292327 -0.819765 + -0.547929 1.21951 -3.31952 0.234365 -0.381114 -0.894329 + -0.54183 1.29023 -3.34464 0.127748 -0.388829 -0.91241 + -0.588752 1.12054 -3.29094 0.060928 -0.246485 -0.96723 + -0.571211 1.21744 -3.31362 -0.193696 -0.296705 -0.935119 + -0.565112 1.28817 -3.33874 -0.250429 -0.354414 -0.900931 + -0.571065 1.33621 -3.3588 -0.207175 -0.273593 -0.939268 + -0.535934 1.34128 -3.36264 0.136599 -0.265788 -0.954305 + -0.620091 1.11109 -3.28075 -0.396794 -0.180007 -0.900084 + -0.60255 1.20799 -3.30343 -0.364755 -0.194845 -0.910488 + -0.599507 1.281 -3.32394 -0.365231 -0.331205 -0.870005 + -0.655449 1.09635 -3.25519 -0.736141 -0.084263 -0.671562 + -0.635353 1.19906 -3.28293 -0.711862 -0.0973557 -0.695538 + -0.63231 1.27207 -3.30345 -0.668897 -0.302297 -0.679112 + -0.651824 1.31642 -3.31503 -0.68029 -0.350574 -0.643664 + -0.60546 1.32904 -3.344 -0.384072 -0.2997 -0.873309 + -0.673716 1.09031 -3.22162 -0.974606 0.0245032 -0.222582 + -0.65362 1.19303 -3.24936 -0.944054 0.0317371 -0.328261 + -0.655198 1.28001 -3.25948 -0.945845 -0.236045 -0.222844 + -0.672569 1.06863 -3.1839 -0.99552 0.0529502 0.0783397 + -0.659673 1.21423 -3.19885 -0.999563 0.0254922 -0.0149709 + -0.661251 1.30121 -3.20897 -0.979716 -0.200277 -0.00677262 + -0.681044 1.35648 -3.19517 -0.957619 -0.286415 0.030529 + -0.674712 1.32436 -3.27106 -0.92112 -0.353839 -0.162284 + -0.669537 1.06381 -3.15232 -0.911409 0.0557262 0.407711 + -0.65664 1.2094 -3.16726 -0.991558 0.015298 0.128755 + -0.661988 1.30826 -3.16319 -0.97416 -0.221999 0.0415746 + -0.681781 1.36353 -3.1494 -0.965138 -0.258043 0.0438349 + -0.69142 1.39961 -3.20542 -0.989456 -0.144563 -0.00880469 + -0.658146 1.29773 -3.13945 -0.805085 -0.301235 0.510975 + -0.676183 1.34892 -3.11645 -0.770492 -0.343897 0.536728 + -0.688456 1.41574 -3.10452 -0.792945 -0.183318 0.581062 + -0.694053 1.43035 -3.13747 -0.990135 -0.120375 0.0717083 + -0.632104 1.28597 -3.13211 -0.056002 -0.210062 0.976083 + -0.650141 1.33717 -3.10911 -0.123922 -0.362223 0.923817 + -0.663083 1.43514 -3.08933 -0.162551 -0.104915 0.981106 + -0.694699 1.50129 -3.10261 -0.830008 0.0232654 0.557266 + -0.595426 1.3246 -3.12652 0.274753 -0.25648 0.926676 + -0.592426 1.37152 -3.1152 0.34967 -0.208938 0.913278 + -0.647141 1.3841 -3.09778 0.0446279 -0.20144 0.978483 + -0.610696 1.49529 -3.0929 0.257429 -0.0587408 0.96451 + -0.669327 1.52069 -3.08742 -0.321728 0.0169348 0.946681 + -0.553622 1.32178 -3.14126 0.359052 -0.207137 0.910042 + -0.553749 1.3855 -3.13142 0.409103 -0.159627 0.898418 + -0.594754 1.44425 -3.10136 0.321298 -0.1072 0.940891 + -0.559255 1.52791 -3.11476 0.525865 -0.00144729 0.850567 + -0.630192 1.55703 -3.08185 0.100977 0.00421621 0.99488 + -0.511293 1.3278 -3.15936 0.556579 -0.206374 0.804754 + -0.511419 1.39152 -3.14952 0.546418 -0.0832728 0.833362 + -0.556076 1.45823 -3.11757 0.498239 -0.0479288 0.865714 + -0.518278 1.5461 -3.14755 0.615737 0.0208376 0.787676 + -0.578752 1.58965 -3.10371 0.481484 0.0939817 0.871402 + -0.483735 1.34288 -3.1814 0.78377 -0.196626 0.589103 + -0.476746 1.40784 -3.17703 0.747944 -0.0508529 0.661811 + -0.515098 1.47642 -3.15036 0.618598 0.015804 0.785548 + -0.45367 1.43706 -3.20944 0.918614 -0.0757433 0.387829 + -0.480425 1.49274 -3.17787 0.649703 -0.0134271 0.76007 + -0.48108 1.54865 -3.17669 0.625375 0.0117252 0.780236 + -0.505491 1.60545 -3.16036 0.59917 0.120357 0.791524 + -0.445592 1.45761 -3.24887 0.994259 -0.0965756 -0.0460731 + -0.448117 1.50459 -3.20464 0.867023 -0.0560747 0.495103 + -0.448771 1.5605 -3.20346 0.825698 -0.0102778 0.564019 + -0.468293 1.608 -3.18951 0.651428 0.105774 0.751301 + -0.511716 1.65707 -3.16855 0.560681 0.227697 0.79611 + -0.457315 1.46607 -3.30609 0.927942 -0.0428979 -0.370247 + -0.451384 1.55784 -3.28539 0.917649 0.0563454 -0.393377 + -0.440038 1.52514 -3.24407 0.997817 -0.0386578 -0.0535343 + -0.44228 1.59049 -3.2147 0.911159 0.0678879 0.406424 + -0.461802 1.63799 -3.20075 0.718727 0.172063 0.673665 + -0.479175 1.46326 -3.34309 0.709444 0.0159014 -0.704582 + -0.473244 1.55503 -3.32238 0.735131 0.147445 -0.661697 + -0.478094 1.62457 -3.30764 0.610939 0.257808 -0.748524 + -0.451207 1.62985 -3.27541 0.89141 0.0858259 -0.444996 + -0.439861 1.59715 -3.23409 0.997209 0.0732936 -0.0142172 + -0.505342 1.43232 -3.35958 0.470989 0.00252229 -0.882135 + -0.511446 1.53358 -3.35532 0.429737 0.164057 -0.887925 + -0.516295 1.60312 -3.34057 0.416979 0.309491 -0.854602 + -0.537834 1.40705 -3.37375 0.182857 -0.0822492 -0.979693 + -0.543937 1.50831 -3.36949 0.303683 0.0899715 -0.948516 + -0.537023 1.60222 -3.34832 0.184123 0.368034 -0.9114 + -0.511614 1.6777 -3.29858 0.28937 0.526455 -0.799444 + -0.572964 1.40198 -3.36991 -0.202334 -0.168695 -0.964678 + -0.574402 1.46469 -3.38058 -0.0760759 -0.0126248 -0.997022 + -0.579204 1.5192 -3.3771 -0.193519 0.176511 -0.965088 + -0.548739 1.56282 -3.36601 0.316272 0.24226 -0.917214 + -0.613389 1.3855 -3.35319 -0.410076 -0.176219 -0.894866 + -0.614827 1.44822 -3.36385 -0.511316 -0.027955 -0.858938 + -0.61217 1.51388 -3.35691 -0.602245 0.206249 -0.771208 + -0.57272 1.58157 -3.35632 -0.320473 0.419932 -0.84909 + -0.561004 1.62097 -3.33863 -0.333849 0.508427 -0.793755 + -0.659754 1.37288 -3.32422 -0.703646 -0.128658 -0.698806 + -0.664568 1.44361 -3.31868 -0.778445 0.0472612 -0.625931 + -0.66191 1.50927 -3.31174 -0.759013 0.167191 -0.629243 + -0.605686 1.57624 -3.33613 -0.557732 0.40186 -0.726253 + -0.685088 1.36749 -3.28131 -0.94787 -0.157782 -0.276854 + -0.689902 1.43823 -3.27578 -0.953167 -0.00851331 -0.302326 + -0.689713 1.50917 -3.26688 -0.934219 0.121313 -0.335437 + -0.651512 1.5761 -3.29962 -0.691041 0.356942 -0.628533 + -0.695203 1.43541 -3.17712 -0.996594 -0.0814507 -0.0129031 + -0.693685 1.47402 -3.24747 -0.994809 -0.00486001 -0.101647 + -0.696247 1.54582 -3.18751 -0.98585 0.153649 -0.0670154 + -0.679315 1.57599 -3.25476 -0.892513 0.288802 -0.346431 + -0.64218 1.63361 -3.26286 -0.620717 0.576953 -0.530882 + -0.700219 1.51068 -3.1681 -0.999331 0.0341685 -0.0130322 + -0.699069 1.50562 -3.12845 -0.992633 0.0457791 0.112181 + -0.68932 1.58412 -3.16583 -0.966944 0.254928 0.0055216 + -0.672388 1.61429 -3.23308 -0.864085 0.404913 -0.299003 + -0.681454 1.58115 -3.10895 -0.855246 0.300638 0.422103 + -0.685824 1.58547 -3.1348 -0.93901 0.297114 0.173158 + -0.662005 1.66235 -3.18016 -0.789805 0.607915 -0.0815297 + -0.631797 1.68167 -3.20994 -0.577602 0.725212 -0.374758 + -0.596354 1.63375 -3.29937 -0.509814 0.600107 -0.61641 + -0.669976 1.57825 -3.09243 -0.573563 0.209215 0.791994 + -0.644528 1.66153 -3.13093 -0.566316 0.625387 0.536821 + -0.658509 1.6637 -3.14912 -0.761311 0.573747 0.302028 + -0.616199 1.70786 -3.17339 -0.466202 0.884441 0.0204983 + -0.586291 1.68653 -3.23816 -0.442823 0.760081 -0.47559 + -0.630841 1.61459 -3.08686 -0.0659155 0.32616 0.943014 + -0.63305 1.65863 -3.1144 -0.293166 0.660131 0.691578 + -0.587185 1.68532 -3.13944 0.142529 0.609273 0.780046 + -0.602219 1.70569 -3.1552 -0.13366 0.816413 0.561787 + -0.584976 1.64128 -3.1119 0.369978 0.364401 0.854592 + -0.527694 1.69846 -3.172 0.405885 0.534781 0.741125 + -0.542727 1.71883 -3.18776 0.0864944 0.93909 0.332609 + -0.570693 1.71273 -3.20162 -0.280839 0.926943 -0.248809 + -0.55558 1.6976 -3.25378 -0.517705 0.769314 -0.37435 + -0.473636 1.66762 -3.19725 0.65203 0.228858 0.722828 + -0.489614 1.70901 -3.2007 0.430944 0.54735 0.717423 + -0.505275 1.72271 -3.2178 0.0235698 0.984215 0.1754 + -0.53324 1.7166 -3.23165 -0.302276 0.938104 -0.169085 + -0.455115 1.66861 -3.22165 0.891253 0.240903 0.384231 + -0.466949 1.69824 -3.21814 0.778274 0.294762 0.554442 + -0.486203 1.72094 -3.212 0.293686 0.834376 0.466439 + -0.479063 1.71713 -3.24826 0.180208 0.931448 -0.316118 + -0.514641 1.71965 -3.26057 -0.104614 0.921259 -0.374616 + -0.452697 1.67527 -3.24104 0.934911 0.205384 0.28941 + -0.463538 1.71018 -3.22945 0.79587 0.39513 0.458763 + -0.459991 1.71537 -3.24245 0.685288 0.726361 -0.0527265 + -0.462616 1.69921 -3.26817 0.580206 0.523166 -0.624226 + -0.44915 1.68046 -3.25404 0.968713 0.217705 -0.119158 + -0.464674 1.6486 -3.28953 0.645647 0.253095 -0.720474 + -0.498194 1.70173 -3.28048 0.14585 0.642187 -0.752545 + -0.536981 1.70065 -3.28269 -0.317241 0.762649 -0.56367 + -0.565644 1.64481 -3.31499 -0.496902 0.601337 -0.625685 + -0.532342 1.6768 -3.30633 -0.0263397 0.614403 -0.788553 + 0.586175 0.537351 -3.1025 0.000243815 -0.866319 -0.499491 + 0.571676 0.540546 -3.10803 -0.494402 -0.846208 0.19874 + 0.577719 0.556843 -3.13631 -0.133621 -0.639282 -0.757274 + 0.566059 0.547996 -3.12093 -0.607597 -0.724037 -0.326491 + 0.572659 0.555143 -3.13333 -0.351091 -0.658123 -0.66604 + 0.557715 0.622536 -3.16013 -0.549172 -0.304283 -0.778345 + 0.562775 0.624236 -3.16311 -0.296171 -0.306302 -0.904689 + 0.575448 0.625885 -3.166 -0.122914 -0.30581 -0.944125 + 0.591256 0.557566 -3.13757 0.130257 -0.617514 -0.775699 + 0.599647 0.53971 -3.10657 0.39564 -0.88214 0.255535 + 0.548117 0.591963 -3.10712 -0.851261 -0.231359 0.470985 + 0.542499 0.599414 -3.12001 -0.96492 -0.256926 0.0540289 + 0.54317 0.60936 -3.13725 -0.876285 -0.286263 -0.387527 + 0.54977 0.616509 -3.14965 -0.721344 -0.297361 -0.625491 + 0.547943 0.740242 -3.18411 -0.610035 -0.1674 -0.77449 + 0.561824 0.584708 -3.09456 -0.55867 -0.186201 0.808219 + 0.53763 0.699075 -3.11274 -0.823995 -0.0514958 0.564251 + 0.527938 0.711931 -3.13499 -0.986741 -0.113444 0.116068 + 0.528608 0.721878 -3.15223 -0.931691 -0.144223 -0.333394 + 0.539998 0.734214 -3.17363 -0.788 -0.154734 -0.595913 + 0.576324 0.581513 -3.08902 -0.232011 -0.168985 0.957922 + 0.57636 0.686306 -3.09062 -0.19836 0.0200232 0.979925 + 0.551338 0.69182 -3.10017 -0.53232 -0.00919047 0.846493 + 0.546327 0.812116 -3.10224 -0.448823 -0.0142062 0.893508 + 0.523051 0.832381 -3.11654 -0.781541 -0.0682296 0.620112 + 0.586175 0.537351 -3.1025 -0.0382405 -0.36898 0.92865 + 0.595384 0.580943 -3.08802 0.14118 -0.173692 0.974628 + 0.59542 0.685736 -3.08962 0.116646 0.0276129 0.99279 + 0.600533 0.799135 -3.09494 0.188462 0.0350788 0.981454 + 0.571349 0.806601 -3.09268 -0.142137 0.0174456 0.989693 + 0.608855 0.583301 -3.0921 0.408782 -0.186392 0.893395 + 0.618668 0.689806 -3.09666 0.378271 0.0167921 0.925543 + 0.623781 0.803205 -3.10198 0.394585 0.0423474 0.917883 + 0.621625 0.587169 -3.09879 0.660343 -0.229307 0.715098 + 0.631437 0.693674 -3.10335 0.61122 -0.00708814 0.791429 + 0.643601 0.806782 -3.11376 0.630021 0.0108439 0.776503 + 0.634331 0.920423 -3.11392 0.460695 0.0582786 0.885643 + 0.604914 0.543026 -3.11231 0.599491 -0.793042 -0.10814 + 0.626892 0.590484 -3.10453 0.894568 -0.257591 0.365234 + 0.640528 0.699396 -3.11326 0.888186 -0.0642877 0.454964 + 0.652691 0.812505 -3.12367 0.883749 -0.0458952 0.465705 + 0.605372 0.551679 -3.12737 0.504876 -0.673182 -0.540301 + 0.630794 0.598641 -3.1187 0.96102 -0.276298 -0.0100097 + 0.644429 0.707551 -3.12743 0.989905 -0.109532 0.0899532 + 0.658747 0.825165 -3.14567 0.990262 -0.108622 0.0870825 + 0.667346 0.932309 -3.14009 0.883841 -0.00785025 0.467721 + 0.60783 0.623089 -3.16117 0.369652 -0.296886 -0.880464 + 0.621945 0.617204 -3.15097 0.634053 -0.296556 -0.714165 + 0.631252 0.607295 -3.13376 0.895559 -0.282223 -0.343981 + 0.64522 0.722485 -3.15341 0.936761 -0.164802 -0.30874 + 0.659537 0.840098 -3.17165 0.938084 -0.166874 -0.303564 + 0.588986 0.626609 -3.16726 0.0837446 -0.299678 -0.950358 + 0.611554 0.742554 -3.18823 0.385992 -0.219779 -0.89594 + 0.635913 0.732394 -3.17062 0.682056 -0.203846 -0.702315 + 0.569347 0.744823 -3.19213 -0.153065 -0.198109 -0.968155 + 0.59271 0.746072 -3.19432 0.095782 -0.220521 -0.970668 + 0.591484 0.874562 -3.22342 0.0317438 -0.231361 -0.97235 + 0.620733 0.865637 -3.21597 0.343933 -0.244555 -0.906589 + 0.645092 0.855476 -3.19836 0.667174 -0.225451 -0.709966 + 0.556674 0.743174 -3.18924 -0.327316 -0.176342 -0.928314 + 0.546451 0.880131 -3.2058 -0.569295 -0.120708 -0.813224 + 0.568121 0.873315 -3.22124 -0.354692 -0.199356 -0.913483 + 0.53772 0.8772 -3.20066 -0.66086 -0.0869969 -0.74545 + 0.519239 1.04396 -3.18963 -0.865697 -0.130476 -0.483265 + 0.539913 1.02456 -3.23291 -0.790094 -0.178882 -0.586305 + 0.561584 1.01774 -3.24835 -0.494967 -0.229583 -0.838033 + 0.523388 0.875809 -3.1798 -0.828502 -0.099929 -0.550999 + 0.504907 1.04257 -3.16877 -0.701565 -0.125339 -0.701496 + 0.494132 1.17213 -3.19393 -0.702786 -0.297564 -0.646179 + 0.51007 1.16584 -3.22143 -0.883429 -0.260642 -0.389383 + 0.530744 1.14643 -3.26471 -0.793758 -0.276857 -0.541571 + 0.511998 0.863474 -3.1584 -0.945307 -0.128199 -0.299932 + 0.488374 1.03288 -3.15513 -0.907395 -0.0970555 -0.408919 + 0.4776 1.16244 -3.18029 -0.942434 -0.0736707 -0.326177 + 0.513358 0.845238 -3.1388 -0.980347 -0.103779 0.167779 + 0.489735 1.01464 -3.13553 -0.901546 -0.0392282 0.430902 + 0.481043 1.14377 -3.15522 -0.784117 0.158754 0.599965 + 0.481353 1.25512 -3.22384 -0.987784 -0.134563 -0.0785871 + 0.513404 0.976579 -3.11442 -0.620808 -0.00632017 0.783937 + 0.504713 1.10571 -3.13411 -0.43755 0.197514 0.877233 + 0.499466 1.21596 -3.17468 -0.560644 0.224104 0.797155 + 0.484796 1.23645 -3.19877 -0.909717 0.11299 0.39956 + 0.536681 0.956314 -3.10013 -0.299688 0.0448607 0.952982 + 0.530518 1.08377 -3.11835 -0.212246 0.192842 0.958 + 0.525271 1.19402 -3.15892 -0.354516 0.225312 0.907498 + 0.520131 1.27847 -3.17029 -0.522122 -0.06221 0.850599 + 0.492573 1.29355 -3.19233 -0.785878 -0.0859075 0.612386 + 0.571401 0.931682 -3.09585 -0.0186609 0.0506652 0.998541 + 0.565238 1.05913 -3.11408 -0.0270512 0.17978 0.983335 + 0.555427 1.18942 -3.14536 -0.22573 0.16772 0.959643 + 0.550287 1.27386 -3.15673 -0.377021 -0.0697977 0.923571 + 0.600585 0.924214 -3.09811 0.26355 0.0591017 0.962834 + 0.599897 1.0532 -3.11111 0.172546 0.132078 0.976106 + 0.590086 1.18348 -3.14239 -0.159698 0.122843 0.979493 + 0.59209 1.27668 -3.14199 -0.260878 -0.122862 0.957522 + 0.553622 1.32178 -3.14126 -0.370477 -0.22021 0.90236 + 0.633643 1.04941 -3.12692 0.424491 0.0719949 0.902565 + 0.6301 1.19278 -3.13251 0.110953 0.0452532 0.992795 + 0.632104 1.28597 -3.13211 0.0597121 -0.214011 0.975004 + 0.650141 1.33717 -3.10911 0.130295 -0.352698 0.926621 + 0.595426 1.3246 -3.12652 -0.269633 -0.261987 0.92664 + 0.656342 1.0555 -3.13793 0.591563 0.0726874 0.802976 + 0.652799 1.19887 -3.14352 0.805247 -0.0103013 0.59285 + 0.658146 1.29773 -3.13945 0.807861 -0.295182 0.510125 + 0.676183 1.34892 -3.11645 0.76637 -0.33731 0.546716 + 0.647141 1.3841 -3.09778 0.0196004 -0.208752 0.977772 + 0.654151 0.924001 -3.12571 0.625688 0.0396191 0.779066 + 0.669537 1.06381 -3.15232 0.902329 0.0752977 0.42442 + 0.65664 1.2094 -3.16726 0.9916 0.0126026 0.128726 + 0.661988 1.30826 -3.16319 0.972988 -0.22795 0.0365212 + 0.681781 1.36353 -3.1494 0.967543 -0.250185 0.0355947 + 0.672569 1.06863 -3.1839 0.995392 0.0595037 0.0751907 + 0.659673 1.21423 -3.19885 0.999634 0.0247544 -0.0109318 + 0.661251 1.30121 -3.20897 0.976592 -0.214797 0.011416 + 0.673401 0.944969 -3.16209 0.990919 -0.0358034 0.129608 + 0.673716 1.09031 -3.22162 0.981413 0.0772892 -0.175653 + 0.65362 1.19303 -3.24936 0.951391 0.015203 -0.307611 + 0.655198 1.28001 -3.25948 0.945373 -0.237076 -0.223751 + 0.674548 0.966645 -3.1998 0.954604 -0.107671 -0.277738 + 0.655449 1.09635 -3.25519 0.734716 -0.0814427 -0.673469 + 0.635353 1.19906 -3.28293 0.702803 -0.113193 -0.702321 + 0.63231 1.27207 -3.30345 0.667225 -0.299354 -0.682054 + 0.674712 1.32436 -3.27106 0.922116 -0.337831 -0.188608 + 0.660103 0.982023 -3.22652 0.698063 -0.181005 -0.69278 + 0.620091 1.11109 -3.28075 0.407212 -0.167293 -0.897881 + 0.60255 1.20799 -3.30343 0.37079 -0.203717 -0.906098 + 0.599507 1.281 -3.32394 0.37684 -0.318738 -0.869711 + 0.624745 0.996771 -3.25208 0.350796 -0.236701 -0.906044 + 0.588752 1.12054 -3.29094 -0.0477699 -0.263829 -0.963386 + 0.571211 1.21744 -3.31362 0.221806 -0.250833 -0.942276 + 0.565112 1.28817 -3.33874 0.235505 -0.334477 -0.912503 + 0.60546 1.32904 -3.344 0.381397 -0.294914 -0.876106 + 0.595496 1.0057 -3.25953 -0.105458 -0.262441 -0.959168 + 0.554839 1.13258 -3.27977 -0.518927 -0.321927 -0.791883 + 0.547929 1.21951 -3.31952 -0.249059 -0.359619 -0.899246 + 0.54183 1.29023 -3.34464 -0.0740494 -0.338382 -0.938091 + 0.523834 1.23336 -3.30446 -0.697298 -0.358713 -0.620564 + 0.516057 1.30523 -3.34003 -0.582081 -0.354316 -0.731876 + 0.535934 1.34128 -3.36264 -0.137462 -0.260306 -0.955691 + 0.571065 1.33621 -3.3588 0.201581 -0.280311 -0.938505 + 0.505321 1.25524 -3.29279 -0.818346 -0.327323 -0.472408 + 0.497544 1.32711 -3.32836 -0.816902 -0.301401 -0.49176 + 0.483994 1.38721 -3.34153 -0.775746 -0.161629 -0.609995 + 0.510161 1.35627 -3.35803 -0.488695 -0.194202 -0.850566 + 0.489383 1.26154 -3.26528 -0.904968 -0.270941 -0.328062 + 0.481436 1.3366 -3.29665 -0.915867 -0.261005 -0.305063 + 0.467885 1.3967 -3.30982 -0.928441 -0.188584 -0.320053 + 0.457315 1.46607 -3.30609 -0.927096 -0.0425561 -0.372401 + 0.479175 1.46326 -3.34309 -0.658218 0.0666085 -0.749875 + 0.473405 1.33018 -3.25521 -0.967109 -0.225588 -0.117519 + 0.456161 1.38825 -3.2526 -0.976451 -0.197322 -0.087216 + 0.445592 1.45761 -3.24887 -0.993196 -0.110171 -0.0377359 + 0.477903 1.31404 -3.21642 -0.960145 -0.167453 0.223787 + 0.460659 1.3721 -3.21381 -0.94851 -0.199063 0.246379 + 0.45367 1.43706 -3.20944 -0.939605 -0.120269 0.320434 + 0.440038 1.52514 -3.24407 -0.998748 -0.0292534 -0.0405875 + 0.483735 1.34288 -3.1814 -0.7891 -0.202178 0.580039 + 0.476746 1.40784 -3.17703 -0.74284 -0.0650878 0.666298 + 0.448117 1.50459 -3.20464 -0.872914 -0.0389951 0.486313 + 0.439861 1.59715 -3.23409 -0.998251 0.0590164 -0.00333648 + 0.451384 1.55784 -3.28539 -0.923745 0.0418626 -0.380713 + 0.511293 1.3278 -3.15936 -0.555793 -0.207193 0.805087 + 0.511419 1.39152 -3.14952 -0.521974 -0.0549894 0.851187 + 0.480425 1.49274 -3.17787 -0.626794 0.0123308 0.779088 + 0.48108 1.54865 -3.17669 -0.625956 0.0126517 0.779755 + 0.448771 1.5605 -3.20346 -0.827301 0.0108676 0.561654 + 0.553749 1.3855 -3.13142 -0.438725 -0.116221 0.891074 + 0.515098 1.47642 -3.15036 -0.60825 -0.00548743 0.793726 + 0.518278 1.5461 -3.14755 -0.617348 0.0191448 0.786457 + 0.468293 1.608 -3.18951 -0.655544 0.0993218 0.748597 + 0.592426 1.37152 -3.1152 -0.329543 -0.19098 0.924623 + 0.556076 1.45823 -3.11757 -0.529834 -0.0763028 0.844662 + 0.559255 1.52791 -3.11476 -0.52542 -0.0022562 0.85084 + 0.505491 1.60545 -3.16036 -0.596333 0.115572 0.794374 + 0.461802 1.63799 -3.20075 -0.728222 0.170082 0.663902 + 0.594754 1.44425 -3.10136 -0.320473 -0.108846 0.940983 + 0.610696 1.49529 -3.0929 -0.300197 -0.069006 0.951378 + 0.578752 1.58965 -3.10371 -0.455998 0.109159 0.883261 + 0.663083 1.43514 -3.08933 0.1661 -0.119303 0.978865 + 0.630192 1.55703 -3.08185 -0.10993 0.030537 0.99347 + 0.584976 1.64128 -3.1119 -0.376148 0.36761 0.850515 + 0.511716 1.65707 -3.16855 -0.528292 0.248882 0.811767 + 0.473636 1.66762 -3.19725 -0.654973 0.238546 0.717012 + 0.688456 1.41574 -3.10452 0.785701 -0.191776 0.588129 + 0.669327 1.52069 -3.08742 0.343381 0.0137743 0.939095 + 0.669976 1.57825 -3.09243 0.545064 0.242442 0.802575 + 0.630841 1.61459 -3.08686 0.0365782 0.313114 0.949011 + 0.587185 1.68532 -3.13944 -0.243375 0.578913 0.778221 + 0.694053 1.43035 -3.13747 0.98998 -0.126578 0.062592 + 0.699069 1.50562 -3.12845 0.992826 0.0512256 0.108035 + 0.694699 1.50129 -3.10261 0.831711 0.0149211 0.555008 + 0.681454 1.58115 -3.10895 0.85654 0.306446 0.415247 + 0.63305 1.65863 -3.1144 0.303509 0.605713 0.735523 + 0.695203 1.43541 -3.17712 0.994445 -0.105055 -0.00647968 + 0.700219 1.51068 -3.1681 0.999117 0.0413441 -0.00750497 + 0.685824 1.58547 -3.1348 0.953066 0.263568 0.148983 + 0.658509 1.6637 -3.14912 0.758979 0.576913 0.301865 + 0.644528 1.66153 -3.13093 0.593316 0.610819 0.524287 + 0.681044 1.35648 -3.19517 0.96115 -0.273334 0.0384635 + 0.69142 1.39961 -3.20542 0.988231 -0.150775 0.025803 + 0.693685 1.47402 -3.24747 0.984788 -0.00702456 -0.173617 + 0.685088 1.36749 -3.28131 0.939304 -0.178376 -0.293071 + 0.689902 1.43823 -3.27578 0.945442 0.0647043 -0.3193 + 0.664568 1.44361 -3.31868 0.772747 0.0315309 -0.633931 + 0.689713 1.50917 -3.26688 0.936623 0.0982223 -0.336288 + 0.659754 1.37288 -3.32422 0.700141 -0.11796 -0.704193 + 0.613389 1.3855 -3.35319 0.438298 -0.151212 -0.886019 + 0.614827 1.44822 -3.36385 0.520671 -0.036705 -0.852968 + 0.61217 1.51388 -3.35691 0.583947 0.183285 -0.79083 + 0.66191 1.50927 -3.31174 0.762714 0.1616 -0.626221 + 0.651824 1.31642 -3.31503 0.692214 -0.337772 -0.637769 + 0.572964 1.40198 -3.36991 0.180221 -0.134421 -0.974398 + 0.574402 1.46469 -3.38058 -0.0310583 -0.0582377 -0.997819 + 0.537834 1.40705 -3.37375 -0.178854 -0.0681361 -0.981514 + 0.543937 1.50831 -3.36949 -0.294815 0.0607852 -0.953619 + 0.548739 1.56282 -3.36601 -0.170037 0.270589 -0.947559 + 0.579204 1.5192 -3.3771 0.20674 0.158669 -0.965444 + 0.505342 1.43232 -3.35958 -0.470406 0.00257515 -0.882446 + 0.511446 1.53358 -3.35532 -0.48973 0.124315 -0.862966 + 0.537023 1.60222 -3.34832 -0.177116 0.384811 -0.905842 + 0.57272 1.58157 -3.35632 0.313933 0.408095 -0.857266 + 0.605686 1.57624 -3.33613 0.552667 0.405386 -0.728163 + 0.473244 1.55503 -3.32238 -0.72584 0.125452 -0.676327 + 0.478094 1.62457 -3.30764 -0.543061 0.294721 -0.786272 + 0.516295 1.60312 -3.34057 -0.420779 0.315638 -0.850481 + 0.532342 1.6768 -3.30633 0.048752 0.589195 -0.806519 + 0.561004 1.62097 -3.33863 0.273532 0.518614 -0.810074 + 0.451207 1.62985 -3.27541 -0.90451 0.100457 -0.414452 + 0.464674 1.6486 -3.28953 -0.642418 0.275969 -0.71494 + 0.511614 1.6777 -3.29858 -0.347331 0.436341 -0.830041 + 0.498194 1.70173 -3.28048 -0.230112 0.644323 -0.729312 + 0.536981 1.70065 -3.28269 0.370334 0.757388 -0.537788 + 0.44915 1.68046 -3.25404 -0.968714 0.217707 -0.119152 + 0.462616 1.69921 -3.26817 -0.580206 0.523167 -0.624225 + 0.452697 1.67527 -3.24104 -0.934911 0.205382 0.289412 + 0.459991 1.71537 -3.24245 -0.685288 0.726361 -0.0527265 + 0.479063 1.71713 -3.24826 -0.15561 0.937762 -0.310464 + 0.514641 1.71965 -3.26057 0.0862263 0.949963 -0.300226 + 0.44228 1.59049 -3.2147 -0.92994 0.0129552 0.367484 + 0.455115 1.66861 -3.22165 -0.891256 0.240899 0.384227 + 0.466949 1.69824 -3.21814 -0.778274 0.294762 0.554442 + 0.463538 1.71018 -3.22945 -0.79587 0.39513 0.458763 + 0.486203 1.72094 -3.212 -0.361332 0.839313 0.406194 + 0.489614 1.70901 -3.2007 -0.53588 0.426681 0.728544 + 0.527694 1.69846 -3.172 -0.387392 0.504702 0.771494 + 0.505275 1.72271 -3.2178 0.0152854 0.997239 0.0726618 + 0.53324 1.7166 -3.23165 0.277026 0.943507 -0.1818 + 0.55558 1.6976 -3.25378 0.525324 0.776818 -0.347259 + 0.565644 1.64481 -3.31499 0.489238 0.61329 -0.620099 + 0.602219 1.70569 -3.1552 0.117109 0.851477 0.511149 + 0.542727 1.71883 -3.18776 -0.0753783 0.939426 0.334361 + 0.570693 1.71273 -3.20162 0.284602 0.933741 -0.217093 + 0.586291 1.68653 -3.23816 0.434657 0.765782 -0.473975 + 0.596354 1.63375 -3.29937 0.515409 0.604416 -0.607483 + 0.616199 1.70786 -3.17339 0.424719 0.90491 0.0274165 + 0.662005 1.66235 -3.18016 0.83368 0.541835 -0.106734 + 0.631797 1.68167 -3.20994 0.564281 0.719699 -0.4045 + 0.64218 1.63361 -3.26286 0.61592 0.582273 -0.530661 + 0.651512 1.5761 -3.29962 0.694891 0.364893 -0.619661 + 0.68932 1.58412 -3.16583 0.968412 0.249146 0.0102062 + 0.672388 1.61429 -3.23308 0.864893 0.406283 -0.294778 + 0.696247 1.54582 -3.18751 0.986079 0.153325 -0.0643388 + 0.679315 1.57599 -3.25476 0.894676 0.284279 -0.344587 + -0.791942 1.67972 -2.78532 0.57781 0.0178925 -0.815975 + -0.814274 1.75317 -2.76932 0.5203 0.360047 -0.774374 + -0.806332 1.74827 -2.76421 0.525217 0.247992 -0.814031 + -0.798455 1.68053 -2.78978 0.573549 0.0465163 -0.817849 + -0.821988 1.74942 -2.77501 0.392105 0.393541 -0.831492 + -0.839872 1.7517 -2.78167 0.324098 0.346841 -0.880149 + -0.783999 1.67483 -2.78021 0.520899 0.00297169 -0.853613 + -0.790093 1.63509 -2.76291 0.0406251 -0.657813 -0.752085 + -0.796606 1.6359 -2.76737 0.556685 -0.551575 -0.621182 + -0.806169 1.67678 -2.79547 0.58398 0.0337181 -0.811068 + -0.766685 1.66096 -2.76934 0.516122 0.0149379 -0.856385 + -0.771053 1.63108 -2.76692 0.0382173 -0.475519 -0.878875 + -0.798681 1.59594 -2.70875 -0.0721774 -0.809432 -0.582761 + -0.806055 1.59391 -2.7076 0.346035 -0.808587 -0.475865 + -0.785028 1.76407 -2.74993 0.397479 0.181623 -0.899457 + -0.745381 1.67676 -2.75506 0.406251 0.141869 -0.902681 + -0.753738 1.61722 -2.75605 0.0231711 -0.459699 -0.887772 + -0.779641 1.59193 -2.71276 -0.331518 -0.754291 -0.566692 + -0.801867 1.57579 -2.67967 -0.0110228 -0.910444 -0.413485 + -0.790993 1.80279 -2.74591 0.275007 0.172826 -0.945782 + -0.698784 1.73801 -2.7231 0.50199 0.185631 -0.844717 + -0.679217 1.69936 -2.72044 0.629685 0.134055 -0.765197 + -0.725814 1.6381 -2.75241 0.355598 -0.0303209 -0.934147 + -0.734684 1.58857 -2.74297 0.0327962 -0.619907 -0.78399 + -0.853578 1.78375 -2.77168 0.220067 0.407499 -0.886293 + -0.844884 1.82745 -2.74932 0.163304 0.275887 -0.947216 + -0.769243 1.83163 -2.73897 0.27562 0.220377 -0.935664 + -0.70475 1.77673 -2.71907 0.421994 0.128815 -0.8974 + -0.658122 1.69592 -2.69818 0.752723 0.0196255 -0.658044 + -0.891408 1.71798 -2.81212 -0.0288314 0.365883 -0.930214 + -0.895508 1.7952 -2.77479 -0.0844793 0.454784 -0.886586 + -0.886814 1.83889 -2.75243 -0.0429062 0.443317 -0.895338 + -0.823133 1.85629 -2.74238 0.0960795 0.302845 -0.948184 + -0.747032 1.84454 -2.72582 0.413157 0.274891 -0.86818 + -0.877702 1.68593 -2.82211 0.0811858 0.173054 -0.981561 + -0.92314 1.70255 -2.80862 -0.434134 0.205941 -0.876993 + -0.92724 1.77977 -2.77129 -0.408501 0.381335 -0.829283 + -0.930033 1.84529 -2.73959 -0.358719 0.425365 -0.830895 + -0.896273 1.88951 -2.72178 -0.13649 0.4492 -0.882944 + -0.840681 1.667 -2.81473 0.317423 0.0409339 -0.9474 + -0.862381 1.6295 -2.81421 0.133586 -0.421408 -0.896978 + -0.899401 1.64843 -2.82158 -0.219311 -0.271845 -0.937018 + -0.959759 1.68877 -2.78486 -0.66129 0.110325 -0.741973 + -0.822798 1.66471 -2.80807 0.497409 -0.0407565 -0.866558 + -0.828764 1.61901 -2.79522 0.533216 -0.552134 -0.640959 + -0.886801 1.59359 -2.78687 -0.0550033 -0.675752 -0.735074 + -0.93602 1.63465 -2.79782 -0.445682 -0.311752 -0.839153 + -0.812135 1.63108 -2.78261 0.700325 -0.474183 -0.533568 + -0.853184 1.5831 -2.76788 0.363031 -0.782004 -0.506634 + -0.912271 1.57791 -2.76563 -0.193856 -0.75236 -0.629582 + -0.96149 1.61897 -2.77657 -0.630373 -0.365855 -0.684675 + -0.821584 1.58909 -2.72284 0.582354 -0.740776 -0.334836 + -0.835961 1.56237 -2.67765 0.502603 -0.853749 -0.136023 + -0.867561 1.55638 -2.72269 0.331162 -0.864951 -0.377081 + -0.907131 1.55762 -2.73451 -0.126398 -0.87775 -0.462145 + -0.967511 1.58868 -2.74568 -0.695097 -0.574968 -0.431569 + -0.80924 1.57376 -2.67852 0.270974 -0.922729 -0.274124 + -0.815939 1.57227 -2.6585 0.29356 -0.955485 0.0294999 + -0.846625 1.56037 -2.63923 0.499598 -0.859789 0.105657 + -0.880536 1.52939 -2.66746 0.362825 -0.921217 -0.140417 + -0.920106 1.53063 -2.67928 -0.314388 -0.874317 -0.369771 + -0.801583 1.5752 -2.67731 -0.0205262 -0.985793 -0.166709 + -0.808282 1.57371 -2.65728 -0.0105827 -0.997689 -0.0671084 + -0.826604 1.57027 -2.62008 0.279188 -0.959767 0.0300253 + -0.858967 1.55925 -2.59536 0.443394 -0.850433 0.283133 + -0.772061 1.57169 -2.68612 -0.196182 -0.958584 -0.206469 + -0.773179 1.56623 -2.65844 -0.205305 -0.967011 -0.150798 + -0.819686 1.57149 -2.61797 -0.0290257 -0.996849 -0.0738163 + -0.831381 1.56927 -2.59942 0.216451 -0.966743 0.136227 + -0.772345 1.57227 -2.68849 -0.261866 -0.892961 -0.366123 + -0.708951 1.55867 -2.69122 0.297745 -0.893899 -0.335102 + -0.710069 1.55321 -2.66353 0.179969 -0.963283 -0.199239 + -0.784583 1.564 -2.61912 -0.247033 -0.951614 -0.182772 + -0.727387 1.56891 -2.7187 0.0782802 -0.839601 -0.537534 + -0.685665 1.60601 -2.71707 0.685552 -0.337869 -0.644875 + -0.667228 1.59578 -2.68959 0.745192 -0.437352 -0.5034 + -0.659861 1.57763 -2.65526 0.747017 -0.635531 -0.195105 + -0.721856 1.54442 -2.62195 0.0933065 -0.989797 -0.107679 + -0.706759 1.60945 -2.73933 0.543491 -0.296007 -0.785492 + -0.635948 1.67068 -2.66666 0.875226 -0.1293 -0.466112 + -0.628581 1.65253 -2.63233 0.938848 -0.25293 -0.233646 + -0.671648 1.56884 -2.61368 0.655234 -0.754728 0.0324623 + -0.73635 1.54179 -2.59341 0.0294985 -0.999311 -0.0225176 + -0.799076 1.56137 -2.59059 -0.27454 -0.929179 -0.247497 + -0.824463 1.57049 -2.59732 -0.065448 -0.989332 -0.130146 + -0.825704 1.57004 -2.59471 -0.15939 -0.987205 0.00451154 + -0.837516 1.57337 -2.58611 0.1607 -0.924362 0.346021 + -0.691584 1.55657 -2.57761 0.495977 -0.831434 0.250447 + -0.769892 1.54273 -2.56278 -0.114509 -0.986836 0.114198 + -0.800317 1.56093 -2.58798 -0.336817 -0.92085 -0.196442 + -0.819805 1.56833 -2.57142 -0.461571 -0.886975 0.0151249 + -0.831839 1.57414 -2.58139 -0.293109 -0.940601 0.171338 + -0.647869 1.61192 -2.55956 0.751836 -0.537037 0.382536 + -0.725127 1.55751 -2.54698 0.322835 -0.844862 0.426597 + -0.78938 1.55013 -2.54623 -0.279208 -0.925488 0.255957 + -0.836968 1.58108 -2.53408 -0.531703 -0.77134 0.349752 + -0.849002 1.58689 -2.54405 -0.198611 -0.853073 0.482514 + -0.627933 1.62419 -2.59563 0.895932 -0.443789 -0.0188942 + -0.607579 1.71319 -2.55455 0.961848 -0.209037 0.176497 + -0.632771 1.68983 -2.52035 0.796637 -0.332407 0.504851 + -0.682931 1.59906 -2.52419 0.595678 -0.623201 0.506742 + -0.608227 1.74153 -2.59125 0.988661 -0.093604 -0.117422 + -0.598621 1.84131 -2.53434 0.995656 -0.0682184 0.0633647 + -0.610765 1.83919 -2.48811 0.915465 -0.179423 0.360182 + -0.635957 1.81583 -2.45391 0.735505 -0.293353 0.610718 + -0.667834 1.67697 -2.48499 0.608988 -0.369415 0.701901 + -0.612124 1.75432 -2.62735 0.93876 -0.0190606 -0.344043 + -0.602519 1.85409 -2.57044 0.990159 -0.0120693 -0.139424 + -0.59704 1.91508 -2.53562 0.991416 0.110059 -0.070574 + -0.599069 1.91403 -2.49513 0.986942 0.0314197 0.157982 + -0.611212 1.91192 -2.4489 0.926831 -0.158407 0.340429 + -0.634298 1.77956 -2.65887 0.81776 0.0940477 -0.567824 + -0.60743 1.84952 -2.60037 0.919925 0.10691 -0.377237 + -0.601951 1.91051 -2.56554 0.916953 0.183154 -0.354474 + -0.652085 1.79466 -2.67979 0.700277 0.195223 -0.686659 + -0.625217 1.86462 -2.62128 0.745472 0.264673 -0.611734 + -0.62568 1.9042 -2.60259 0.726355 0.303311 -0.616774 + -0.609082 1.94796 -2.55421 0.843702 0.381512 -0.377644 + -0.682539 1.78964 -2.70592 0.54287 0.185755 -0.819016 + -0.671696 1.85946 -2.66719 0.610272 0.334825 -0.717955 + -0.672159 1.89904 -2.64849 0.61009 0.351035 -0.710327 + -0.671718 1.93004 -2.63245 0.56861 0.44856 -0.689548 + -0.63281 1.94165 -2.59125 0.661195 0.429934 -0.6148 + -0.70215 1.85444 -2.69333 0.547532 0.325593 -0.770842 + -0.717728 1.89175 -2.68815 0.546454 0.346397 -0.762494 + -0.717287 1.92276 -2.6721 0.533751 0.454755 -0.712958 + -0.681147 1.97629 -2.60161 0.508432 0.569605 -0.645791 + -0.76261 1.88185 -2.72064 0.346042 0.291973 -0.891632 + -0.769293 1.92029 -2.7111 0.336904 0.418033 -0.843649 + -0.774611 1.97526 -2.67192 0.326314 0.606909 -0.724693 + -0.722605 1.97773 -2.63292 0.49186 0.57027 -0.657925 + -0.821635 1.89349 -2.72653 0.0229753 0.337679 -0.940981 + -0.828318 1.93192 -2.71699 -0.0504029 0.400772 -0.91479 + -0.827004 1.98142 -2.67858 0.0468778 0.647493 -0.760628 + -0.775786 2.05593 -2.59694 0.316922 0.644763 -0.695587 + -0.894775 1.92671 -2.70593 -0.163856 0.429055 -0.888292 + -0.894387 1.95759 -2.68967 -0.166821 0.526362 -0.833734 + -0.893074 2.0071 -2.65126 -0.132478 0.695714 -0.705997 + -0.88035 2.0551 -2.5984 -0.182775 0.717491 -0.672161 + -0.828179 2.06209 -2.6036 -0.00471381 0.692041 -0.721843 + -0.939981 1.93761 -2.6864 -0.445685 0.415391 -0.792979 + -0.939594 1.96849 -2.67014 -0.444465 0.534299 -0.71901 + -0.932038 2.00774 -2.6362 -0.434742 0.68001 -0.590412 + -0.919314 2.05575 -2.58333 -0.452493 0.701658 -0.550387 + -0.865733 2.12251 -2.53207 -0.223287 0.710371 -0.66747 + -0.939493 1.89591 -2.70895 -0.425375 0.416242 -0.803616 + -0.960655 1.93025 -2.67183 -0.775159 0.30184 -0.554996 + -0.960536 1.96055 -2.6545 -0.772933 0.411177 -0.483228 + -0.952981 1.9998 -2.62055 -0.747207 0.551452 -0.370921 + -0.93599 2.04759 -2.57125 -0.748226 0.579306 -0.323362 + -0.960167 1.88856 -2.69438 -0.715761 0.349496 -0.604598 + -0.975678 1.9163 -2.64574 -0.933873 0.210408 -0.289154 + -0.975559 1.9466 -2.6284 -0.934795 0.261847 -0.23999 + -0.966714 1.98608 -2.59648 -0.907364 0.393622 -0.147483 + -0.967167 1.83358 -2.72033 -0.678341 0.340172 -0.651258 + -0.98876 1.82 -2.69461 -0.843179 0.265588 -0.467453 + -0.98176 1.87498 -2.66866 -0.889918 0.319809 -0.32522 + -0.984638 1.89665 -2.60977 -0.995455 0.0869279 -0.0388972 + -0.985072 1.92573 -2.59022 -0.992825 0.118331 -0.0172081 + -0.964374 1.76805 -2.75202 -0.660491 0.281924 -0.695895 + -0.989218 1.75021 -2.72527 -0.8451 0.167064 -0.507835 + -1.00836 1.80441 -2.66154 -0.972147 0.198398 -0.124776 + -0.99072 1.85533 -2.63269 -0.973704 0.224957 0.0359918 + -0.982019 1.86931 -2.57694 -0.977464 -0.0539966 0.204077 + -0.984603 1.67093 -2.75811 -0.882443 -0.0137757 -0.470218 + -0.990624 1.64064 -2.72722 -0.946781 -0.20896 -0.244827 + -1.00882 1.73461 -2.6922 -0.964303 0.0181394 -0.264178 + -1.00914 1.71738 -2.65557 -0.981669 -0.122694 0.145849 + -1.00693 1.78301 -2.62707 -0.9627 0.040933 0.267458 + -0.96237 1.56839 -2.71456 -0.62331 -0.755816 -0.200568 + -0.990947 1.6234 -2.69058 -0.945689 -0.321992 -0.0446497 + -0.986209 1.61679 -2.64923 -0.930161 -0.305232 0.204042 + -0.989555 1.70095 -2.61435 -0.901705 -0.174052 0.39577 + -0.987338 1.76658 -2.58585 -0.864124 -0.0264926 0.502581 + -0.957632 1.56178 -2.6732 -0.748753 -0.643059 -0.160759 + -0.920658 1.52071 -2.64289 -0.235248 -0.971297 -0.0352134 + -0.958184 1.55185 -2.63682 -0.828443 -0.556163 0.0660652 + -0.960761 1.58365 -2.61395 -0.861433 -0.259178 0.43676 + -0.969637 1.61842 -2.61355 -0.837963 -0.221706 0.498663 + -0.972983 1.70257 -2.57868 -0.802892 -0.206512 0.559212 + -0.892878 1.52828 -2.6236 0.341683 -0.91388 0.219261 + -0.9349 1.53172 -2.60313 -0.485599 -0.779924 0.394858 + -0.937477 1.56351 -2.58027 -0.713627 -0.37592 0.591118 + -0.930964 1.6479 -2.55143 -0.742944 -0.186842 0.642748 + -0.93984 1.68266 -2.55103 -0.690224 -0.213433 0.691402 + -0.907121 1.53929 -2.58384 0.0272401 -0.829286 0.55816 + -0.917493 1.56796 -2.55886 -0.414358 -0.493459 0.764726 + -0.91098 1.65235 -2.53002 -0.598383 -0.165821 0.783863 + -0.870453 1.57278 -2.5533 0.204894 -0.767801 0.607042 + -0.880826 1.60145 -2.52833 -0.260776 -0.499113 0.826367 + -0.853085 1.62012 -2.50619 -0.442946 -0.440621 0.780802 + -0.883239 1.67101 -2.50788 -0.538309 -0.215685 0.81468 + -0.82717 1.59283 -2.50967 -0.414279 -0.631358 0.65556 + -0.806529 1.64262 -2.4703 -0.390172 -0.333282 0.858306 + -0.808238 1.67943 -2.46158 -0.41718 -0.25338 0.872788 + -0.884948 1.70783 -2.49917 -0.578255 -0.137293 0.804221 + -0.932378 1.72366 -2.53138 -0.623133 -0.107127 0.774745 + -0.779582 1.56188 -2.52182 -0.112349 -0.809437 0.576358 + -0.780614 1.61533 -2.47378 -0.184575 -0.537896 0.822557 + -0.753714 1.67357 -2.44263 0.0275537 -0.358409 0.933158 + -0.825457 1.74618 -2.44792 -0.484789 -0.329762 0.810085 + -0.749654 1.56542 -2.51827 0.163701 -0.804854 0.570449 + -0.750687 1.61887 -2.47023 0.154318 -0.531271 0.833029 + -0.710487 1.66167 -2.46787 0.421 -0.37668 0.825149 + -0.732821 1.75039 -2.41834 0.189249 -0.403489 0.895199 + -0.770933 1.74032 -2.42897 -0.255983 -0.367724 0.894009 + -0.707459 1.60697 -2.49548 0.435904 -0.558892 0.705427 + -0.690167 1.76568 -2.43545 0.509453 -0.355384 0.783684 + -0.697106 1.83315 -2.39531 0.528657 -0.461935 0.712136 + -0.743447 1.80265 -2.39067 0.156302 -0.545101 0.823671 + -0.642895 1.8833 -2.41377 0.723963 -0.353518 0.592371 + -0.643676 1.91163 -2.39283 0.72154 -0.326284 0.610671 + -0.698558 1.86001 -2.37167 0.521743 -0.457078 0.720322 + -0.744899 1.82951 -2.36703 0.169652 -0.550515 0.817405 + -0.78156 1.79259 -2.4013 -0.232799 -0.568733 0.78889 + -0.611993 1.94024 -2.42795 0.940178 -0.0642109 0.334577 + -0.64878 1.9439 -2.37416 0.691696 -0.153799 0.705622 + -0.703661 1.89229 -2.35301 0.442762 -0.317334 0.838606 + -0.747448 1.87221 -2.34499 0.0964543 -0.380229 0.919849 + -0.783061 1.81933 -2.37746 -0.238089 -0.558351 0.794706 + -0.606495 1.95083 -2.4826 0.97823 0.177073 0.108223 + -0.615318 1.98028 -2.46401 0.952364 0.286998 0.10313 + -0.620815 1.96969 -2.40936 0.904435 0.131668 0.405784 + -0.660547 1.96443 -2.36165 0.677487 -0.244718 0.693631 + -0.604467 1.95189 -2.52309 0.956868 0.281856 -0.0704339 + -0.616228 1.99017 -2.50007 0.922045 0.382861 -0.0570147 + -0.63063 2.01243 -2.43561 0.977425 0.195109 0.0810696 + -0.632582 1.99022 -2.39685 0.927693 0.0367494 0.371531 + -0.620843 1.98625 -2.53119 0.794554 0.503069 -0.340008 + -0.638015 2.03301 -2.49136 0.816237 0.485109 -0.31373 + -0.631541 2.02232 -2.47167 0.948275 0.315435 -0.0357073 + -0.633538 2.0472 -2.40539 0.999548 -0.0195783 -0.0228 + -0.64224 1.9879 -2.56041 0.611052 0.567786 -0.551574 + -0.659411 2.03466 -2.52058 0.626613 0.591763 -0.507122 + -0.642004 2.07463 -2.4519 0.874311 0.319315 -0.365538 + -0.63553 2.06394 -2.43221 0.984795 0.0972452 -0.143952 + -0.695002 2.04605 -2.54545 0.526019 0.600353 -0.602396 + -0.697051 2.09976 -2.49575 0.568416 0.54089 -0.619953 + -0.66146 2.08837 -2.47088 0.684603 0.4793 -0.549173 + -0.633207 2.11924 -2.40512 0.886307 0.235552 -0.398717 + -0.73646 2.04749 -2.57676 0.482143 0.597229 -0.64098 + -0.731765 2.11448 -2.51369 0.514485 0.554786 -0.653848 + -0.683014 2.15348 -2.43972 0.593593 0.509452 -0.622981 + -0.652663 2.13298 -2.42409 0.706599 0.4343 -0.55866 + -0.771091 2.12291 -2.53387 0.311195 0.636454 -0.705751 + -0.751319 2.1867 -2.46873 0.34495 0.628141 -0.697459 + -0.717728 2.16819 -2.45766 0.538277 0.537825 -0.648847 + -0.665825 2.23238 -2.35891 0.606256 0.498854 -0.619354 + -0.813562 2.1295 -2.53728 0.00273403 0.701855 -0.712315 + -0.79379 2.19329 -2.47214 0.0409115 0.709869 -0.703144 + -0.729772 2.26941 -2.38266 0.364625 0.625057 -0.690183 + -0.696182 2.2509 -2.37159 0.549229 0.532916 -0.643699 + -0.838586 2.19968 -2.45973 -0.189411 0.723393 -0.663947 + -0.811783 2.28762 -2.36961 -0.164354 0.733101 -0.659963 + -0.766986 2.28123 -2.38203 0.0618663 0.711739 -0.699714 + -0.701887 2.37513 -2.27055 0.373886 0.648147 -0.663412 + -0.897743 2.11935 -2.52144 -0.467667 0.688372 -0.554465 + -0.870596 2.19652 -2.4491 -0.442411 0.697236 -0.564034 + -0.839885 2.28881 -2.35764 -0.421895 0.710917 -0.562673 + -0.779373 2.3927 -2.25875 -0.148816 0.764298 -0.627456 + -0.739101 2.38695 -2.26991 0.0684736 0.739947 -0.669171 + -0.914418 2.11119 -2.50936 -0.754422 0.569669 -0.326073 + -0.884993 2.19264 -2.4363 -0.735518 0.583563 -0.34419 + -0.854282 2.28493 -2.34484 -0.731699 0.588301 -0.344265 + -0.820418 2.3904 -2.23527 -0.713451 0.628584 -0.309628 + -0.807475 2.39389 -2.24678 -0.409072 0.746312 -0.525051 + -0.949723 2.03387 -2.54718 -0.896401 0.428703 -0.112598 + -0.925867 2.09974 -2.48881 -0.896788 0.42718 -0.115278 + -0.896442 2.1812 -2.41575 -0.897487 0.424849 -0.118412 + -0.864403 2.27556 -2.32598 -0.897659 0.422328 -0.125891 + -0.957524 2.01599 -2.51681 -0.955873 0.283779 0.0760023 + -0.933667 2.08186 -2.45844 -0.955482 0.288736 0.0607038 + -0.903362 2.16533 -2.38881 -0.955779 0.289147 0.0536657 + -0.871323 2.25969 -2.29903 -0.961071 0.272168 0.0476102 + -0.976227 1.96522 -2.5583 -0.969524 0.239674 0.0507815 + -0.97488 1.94291 -2.52665 -0.965659 0.054861 0.253954 + -0.956177 1.99368 -2.48517 -0.958448 0.136292 0.250603 + -0.933468 2.06511 -2.43129 -0.962056 0.14511 0.231065 + -0.982453 1.8984 -2.55738 -0.978913 -0.0512429 0.197746 + -0.960645 1.90798 -2.49709 -0.903533 -0.108241 0.414622 + -0.947709 1.97814 -2.45671 -0.913408 -0.0244175 0.406312 + -0.925 2.04957 -2.40284 -0.92221 0.0065995 0.386634 + -0.968217 1.86347 -2.52782 -0.913737 -0.190978 0.358624 + -0.951119 1.83526 -2.50792 -0.817247 -0.303458 0.489919 + -0.946745 1.88814 -2.47632 -0.80619 -0.218147 0.549972 + -0.933809 1.95831 -2.43594 -0.816448 -0.163882 0.553674 + -0.967303 1.83543 -2.5493 -0.906375 -0.180192 0.382119 + -0.950205 1.80722 -2.5294 -0.804771 -0.291616 0.517014 + -0.931499 1.81302 -2.49631 -0.68208 -0.41811 0.59996 + -0.927125 1.86591 -2.46471 -0.675243 -0.315787 0.666578 + -0.920535 1.95166 -2.42247 -0.696359 -0.265959 0.666596 + -0.989285 1.83393 -2.59822 -0.949426 0.0785087 0.304017 + -0.974569 1.80005 -2.57059 -0.854614 -0.0328341 0.518224 + -0.952752 1.77705 -2.54377 -0.725919 -0.154795 0.670135 + -0.930384 1.78543 -2.5186 -0.669148 -0.361581 0.64923 + -0.96552 1.74357 -2.55903 -0.734927 -0.0970597 0.671164 + -0.932931 1.75525 -2.53296 -0.622377 -0.13721 0.770598 + -0.890599 1.77759 -2.4862 -0.592495 -0.434254 0.678508 + -0.891714 1.80518 -2.46391 -0.591678 -0.458083 0.663383 + -0.890927 1.85616 -2.43603 -0.624096 -0.337144 0.704867 + -0.885501 1.73942 -2.50075 -0.614311 -0.143049 0.775989 + -0.830554 1.78436 -2.43336 -0.486673 -0.493024 0.721164 + -0.832056 1.8111 -2.40953 -0.479915 -0.510504 0.713489 + -0.831269 1.86208 -2.38165 -0.54148 -0.345909 0.766255 + -0.78561 1.86204 -2.35542 -0.303951 -0.391738 0.868421 + -0.832096 1.92589 -2.35851 -0.543115 -0.325954 0.773809 + -0.884337 1.94192 -2.39379 -0.618329 -0.312631 0.721063 + -0.901706 2.03045 -2.37084 -0.693712 -0.270323 0.667599 + -0.753861 1.92561 -2.32744 0.0779647 -0.387109 0.918732 + -0.786437 1.92585 -2.33228 -0.313226 -0.378699 0.870906 + -0.819125 1.9989 -2.31556 -0.528493 -0.371839 0.763172 + -0.871366 2.01493 -2.35083 -0.613353 -0.325804 0.719479 + -0.710074 1.94569 -2.33546 0.434301 -0.365764 0.823164 + -0.747227 1.9851 -2.29544 0.0956462 -0.547987 0.831001 + -0.779803 1.98534 -2.30028 -0.303947 -0.458488 0.835108 + -0.799907 2.06345 -2.26903 -0.528842 -0.417472 0.738947 + -0.659523 2.00784 -2.33464 0.700719 -0.468635 0.537935 + -0.70905 1.98909 -2.30845 0.427835 -0.54444 0.721486 + -0.732671 2.0413 -2.25464 0.0843659 -0.616527 0.782801 + -0.760585 2.04989 -2.25375 -0.305038 -0.525347 0.794331 + -0.635489 2.025 -2.36662 0.94458 -0.239428 0.224594 + -0.651803 2.05132 -2.29745 0.677115 -0.546148 0.493192 + -0.694494 2.04529 -2.26765 0.413323 -0.619917 0.666983 + -0.711221 2.12707 -2.18568 0.0531025 -0.645284 0.762095 + -0.625806 2.09016 -2.36259 0.991254 -0.107836 -0.0760717 + -0.62777 2.06848 -2.32943 0.934487 -0.315185 0.165504 + -0.634814 2.13241 -2.22826 0.664094 -0.56651 0.487899 + -0.677505 2.12639 -2.19846 0.37949 -0.648561 0.659815 + -0.627798 2.10689 -2.38942 0.981496 0.00857287 -0.191293 + -0.611454 2.16777 -2.28951 0.990879 -0.109259 -0.0788736 + -0.613417 2.14609 -2.25635 0.927569 -0.332111 0.171223 + -0.613735 2.24551 -2.12377 0.646305 -0.527545 0.551349 + -0.618498 2.19627 -2.32841 0.888655 0.225263 -0.399435 + -0.613089 2.18393 -2.31271 0.980988 0.00482185 -0.194007 + -0.590573 2.27868 -2.18168 0.996485 -0.0678742 -0.0490926 + -0.592338 2.25919 -2.15187 0.936746 -0.283858 0.20477 + -0.635474 2.21187 -2.34328 0.711877 0.421106 -0.562051 + -0.597071 2.30593 -2.21899 0.893656 0.252396 -0.371047 + -0.592208 2.29483 -2.20487 0.985199 0.0430999 -0.165908 + -0.587719 2.34945 -2.12243 0.977946 0.174291 0.115079 + -0.641333 2.33997 -2.24791 0.611847 0.519943 -0.596073 + -0.614047 2.32153 -2.23386 0.715105 0.444631 -0.539377 + -0.593858 2.37316 -2.15465 0.882743 0.422712 -0.205132 + -0.588996 2.36206 -2.14054 0.966483 0.256705 0.00364073 + -0.671689 2.35849 -2.26059 0.553377 0.556708 -0.619557 + -0.634396 2.40377 -2.18031 0.621311 0.639082 -0.453372 + -0.60711 2.38534 -2.16626 0.723068 0.575599 -0.381914 + -0.607734 2.39539 -2.13214 0.694396 0.703007 0.153606 + -0.688289 2.43487 -2.20017 0.392066 0.765047 -0.510869 + -0.658091 2.41823 -2.19021 0.56824 0.670697 -0.476727 + -0.63869 2.41953 -2.15286 0.547702 0.836432 -0.020122 + -0.620986 2.40756 -2.14374 0.601163 0.798868 0.0203085 + -0.717338 2.4441 -2.19967 0.122588 0.855893 -0.502413 + -0.68198 2.44478 -2.16922 0.410428 0.909111 -0.0711744 + -0.662386 2.43398 -2.16276 0.510841 0.858766 -0.0395177 + -0.672795 2.42573 -2.1222 0.342374 0.84465 0.411516 + -0.655091 2.41377 -2.11308 0.376578 0.818919 0.433082 + -0.75761 2.44985 -2.18851 -0.0810503 0.891235 -0.44624 + -0.737161 2.45774 -2.16148 0.100596 0.99492 0.00386728 + -0.711029 2.45401 -2.16872 0.212976 0.97597 -0.0460878 + -0.69239 2.43653 -2.12866 0.290984 0.865544 0.40763 + -0.651936 2.40657 -2.10392 0.381553 0.775628 0.502811 + -0.779546 2.45078 -2.17917 -0.30742 0.891579 -0.332536 + -0.759097 2.45867 -2.15214 -0.0370713 0.995453 0.0877433 + -0.718521 2.44026 -2.12142 0.219071 0.868666 0.444328 + -0.792489 2.44729 -2.16766 -0.577158 0.808936 -0.111851 + -0.767495 2.4564 -2.14467 -0.187437 0.952816 0.238767 + -0.72692 2.43799 -2.11395 0.16542 0.847576 0.504233 + -0.694778 2.39405 -2.07133 0.223661 0.664216 0.713297 + -0.830539 2.38103 -2.21641 -0.881533 0.462726 -0.0937226 + -0.800389 2.43997 -2.15293 -0.723763 0.684222 0.0894853 + -0.775395 2.44909 -2.12994 -0.27419 0.883387 0.380063 + -0.779433 2.43983 -2.11423 -0.312894 0.82097 0.477604 + -0.730957 2.42874 -2.09823 0.159078 0.813555 0.559305 + -0.836761 2.36676 -2.19219 -0.946661 0.313167 0.0758939 + -0.806611 2.42571 -2.12871 -0.791968 0.554141 0.256348 + -0.871261 2.24376 -2.27541 -0.969185 0.108523 0.221141 + -0.836699 2.35083 -2.16856 -0.957604 0.144603 0.24917 + -0.806563 2.41327 -2.11027 -0.808616 0.411995 0.420001 + -0.779384 2.4274 -2.09579 -0.330332 0.736373 0.590454 + -0.903163 2.14858 -2.36166 -0.963085 0.132569 0.23429 + -0.86421 2.22607 -2.25259 -0.929285 -0.0416828 0.367004 + -0.83036 2.33492 -2.14804 -0.919975 -0.00651979 0.391924 + -0.800224 2.39736 -2.08975 -0.779297 0.271983 0.564554 + -0.775271 2.41707 -2.08247 -0.313604 0.665206 0.677608 + -0.896112 2.13089 -2.33884 -0.923206 -0.00632996 0.384253 + -0.886092 2.11841 -2.32031 -0.829607 -0.163921 0.533744 + -0.855504 2.2129 -2.23729 -0.836295 -0.202665 0.509448 + -0.821654 2.32176 -2.13275 -0.82778 -0.171744 0.53412 + -0.793428 2.38709 -2.07782 -0.701245 0.119225 0.702881 + -0.91498 2.03709 -2.3843 -0.831333 -0.140003 0.537851 + -0.874805 2.10837 -2.31093 -0.69172 -0.305455 0.654385 + -0.844218 2.20286 -2.22791 -0.693835 -0.354028 0.627102 + -0.811507 2.31273 -2.12431 -0.686514 -0.326457 0.649711 + -0.783282 2.37806 -2.06938 -0.551401 -0.0454096 0.833003 + -0.844465 2.09285 -2.29092 -0.615169 -0.367549 0.697477 + -0.817902 2.18362 -2.21486 -0.614205 -0.411344 0.67346 + -0.785192 2.29349 -2.11126 -0.579815 -0.40725 0.705664 + -0.773344 2.15422 -2.19296 -0.529769 -0.458467 0.713549 + -0.745921 2.26495 -2.09875 -0.494194 -0.451275 0.74305 + -0.72364 2.33405 -2.04824 -0.34988 -0.199049 0.915403 + -0.762911 2.36258 -2.06075 -0.438923 -0.143965 0.886916 + -0.739134 2.13566 -2.18479 -0.308667 -0.559451 0.769245 + -0.711712 2.24639 -2.09058 -0.294868 -0.527391 0.796813 + -0.697108 2.3191 -2.04342 -0.181196 -0.257626 0.949103 + -0.689506 2.352 -2.04349 0.0490756 0.28227 0.958079 + -0.716039 2.36695 -2.04832 -0.0397312 0.315207 0.948191 + -0.686618 2.23868 -2.09138 0.0611307 -0.603543 0.794984 + -0.672013 2.31139 -2.04422 0.122587 -0.307639 0.943574 + -0.673224 2.347 -2.04401 0.195474 0.259964 0.945626 + -0.678495 2.38904 -2.07185 0.225076 0.653767 0.722447 + -0.652901 2.23799 -2.10415 0.360663 -0.604149 0.710582 + -0.645524 2.31131 -2.05263 0.378136 -0.301161 0.875394 + -0.646734 2.34692 -2.05243 0.341751 0.27979 0.897175 + -0.653081 2.39392 -2.08458 0.320756 0.702836 0.634931 + -0.606357 2.31883 -2.07225 0.656619 -0.213063 0.723502 + -0.62132 2.3518 -2.06515 0.49193 0.326543 0.807077 + -0.604448 2.36293 -2.08553 0.692662 0.468086 0.54874 + -0.589485 2.32996 -2.09262 0.916922 -0.0124601 0.398871 + -0.603302 2.37558 -2.10487 0.725618 0.571427 0.383339 + -0.604579 2.38819 -2.12298 0.728045 0.614623 0.303626 + -0.741521 2.38546 -2.05643 -0.0821952 0.34911 0.93347 + -0.761891 2.40094 -2.06506 -0.175504 0.445567 0.877877 + -0.768476 2.4068 -2.07054 -0.274707 0.563677 0.778976 + -0.72026 2.41256 -2.07945 0.308817 0.760275 0.571501 + -0.726844 2.41842 -2.08492 0.191441 0.782105 0.59301 + 0.866811 1.38322 -1.52127 -0.509732 -0.270871 0.81658 + 0.888762 1.33938 -1.5282 -0.391881 -0.471329 0.790113 + 0.921874 1.33846 -1.52023 -0.116059 -0.65072 0.750396 + 0.828588 1.32435 -1.58429 -0.60527 -0.562075 0.563667 + 0.898161 1.30431 -1.5557 -0.316667 -0.763451 0.562908 + 0.924805 1.30314 -1.54361 0.135117 -0.744381 0.653942 + 0.915406 1.33821 -1.5161 0.00953819 -0.626113 0.779674 + 0.89667 1.41305 -1.49754 -0.495776 -0.133595 0.858113 + 0.814774 1.46235 -1.54842 -0.737016 -0.0651564 0.672727 + 0.806637 1.36818 -1.57736 -0.752968 -0.298712 0.586353 + 0.824142 1.30322 -1.61679 -0.629169 -0.6642 0.403714 + 0.898225 1.28984 -1.57942 -0.208773 -0.833488 0.511578 + 0.926761 1.34633 -1.50425 -0.600554 -0.62624 0.49715 + 0.936756 1.35346 -1.48437 -0.504794 -0.492368 0.709053 + 0.9392 1.36879 -1.48052 -0.402691 -0.122078 0.907158 + 0.929411 1.3979 -1.48212 -0.410404 -0.0659627 0.909515 + 0.926071 1.48754 -1.48244 -0.401241 -0.0239835 0.915658 + 0.844632 1.49219 -1.52469 -0.510054 -0.104623 0.853756 + 0.95556 1.31203 -1.54408 -0.379859 -0.790566 0.480325 + 0.965624 1.33399 -1.49664 -0.395119 -0.790783 0.467486 + 0.975619 1.34114 -1.47677 -0.380523 -0.763947 0.52114 + 0.995526 1.34064 -1.46447 -0.293498 -0.438771 0.849316 + 0.99797 1.35597 -1.46064 -0.150647 -0.106925 0.982788 + 0.950673 1.30417 -1.56006 -0.114048 -0.778626 0.617036 + 0.977756 1.2971 -1.54699 -0.506473 -0.73627 0.448767 + 0.987821 1.31907 -1.49956 -0.48958 -0.730349 0.476342 + 0.99798 1.32681 -1.47853 -0.436769 -0.698436 0.566939 + 1.01789 1.32631 -1.46624 0.0174018 -0.50152 0.864971 + 0.946034 1.30264 -1.56046 0.192164 -0.772265 0.605541 + 0.957355 1.29046 -1.57453 -0.0499628 -0.979301 0.196147 + 0.961993 1.29199 -1.57414 -0.198049 -0.657096 0.727325 + 0.939566 1.30239 -1.55634 0.407837 -0.71324 0.57005 + 0.946222 1.29217 -1.58454 0.394508 -0.91883 -0.0107361 + 0.959124 1.30255 -1.59204 0.133294 -0.838926 -0.52767 + 0.965185 1.29072 -1.57667 0.0689261 -0.849407 -0.523218 + 0.964165 1.28973 -1.57497 -0.181322 -0.982719 -0.0372109 + 0.931461 1.29292 -1.57181 0.134422 -0.885844 0.444084 + 0.931525 1.27846 -1.59554 0.384723 -0.896589 0.219353 + 0.95154 1.31375 -1.61899 0.641728 -0.736824 -0.212781 + 0.964442 1.32413 -1.62648 0.567989 -0.741769 -0.356607 + 0.966954 1.3028 -1.59418 0.0595751 -0.82353 -0.564136 + 0.924869 1.27115 -1.61975 0.540982 -0.82872 0.143394 + 0.944885 1.30645 -1.6432 0.803033 -0.582996 -0.123504 + 0.967505 1.3371 -1.64616 0.658293 -0.689032 -0.303126 + 0.972093 1.32925 -1.62651 0.337234 -0.790846 -0.510721 + 0.893779 1.26871 -1.61192 -0.098346 -0.873571 0.476656 + 0.906429 1.25446 -1.66273 0.462154 -0.886723 0.0116895 + 0.946496 1.31028 -1.64912 0.802415 -0.579369 -0.143043 + 0.969116 1.34092 -1.65209 0.561264 -0.812192 -0.159142 + 0.975156 1.34222 -1.6462 0.251508 -0.916943 -0.309773 + 0.875339 1.25203 -1.6549 -0.228851 -0.95378 0.194758 + 0.903505 1.25667 -1.6932 0.446769 -0.886119 -0.123247 + 0.943571 1.31249 -1.6796 0.809917 -0.571829 -0.130559 + 0.964555 1.33979 -1.67305 0.586218 -0.807387 -0.0668959 + 0.975047 1.343 -1.65421 0.138191 -0.990111 -0.0241573 + 0.80321 1.31023 -1.65291 -0.783326 -0.588685 0.199623 + 0.854407 1.25904 -1.69102 -0.440659 -0.897492 -0.0181088 + 0.902844 1.26036 -1.73079 0.40965 -0.878652 -0.24527 + 0.933747 1.30773 -1.71638 0.824156 -0.551179 -0.130266 + 0.95473 1.33503 -1.70984 0.621941 -0.775626 -0.107677 + 0.777832 1.37883 -1.62356 -0.930319 -0.211131 0.299885 + 0.792378 1.31083 -1.73172 -0.84136 -0.534063 -0.0830089 + 0.853746 1.26272 -1.72861 -0.369615 -0.928217 -0.0424014 + 0.906507 1.2704 -1.74915 0.423343 -0.821167 -0.382708 + 0.785969 1.473 -1.59462 -0.846604 -0.16432 0.506223 + 0.767001 1.37943 -1.70236 -0.957579 -0.275349 0.0849986 + 0.805334 1.30464 -1.76866 -0.703685 -0.638823 -0.311018 + 0.836232 1.54024 -1.52202 -0.559196 -0.213109 0.801177 + 0.786667 1.5553 -1.557 -0.72738 -0.247653 0.63999 + 0.757383 1.48395 -1.636 -0.930436 -0.203747 0.304592 + 0.917671 1.53559 -1.47976 -0.330372 -0.162615 0.929737 + 0.909642 1.57166 -1.47418 -0.333655 -0.250322 0.908853 + 0.837401 1.59422 -1.50277 -0.534312 -0.213828 0.817795 + 0.787836 1.60928 -1.53775 -0.701103 -0.178686 0.690308 + 0.758081 1.56626 -1.59838 -0.905764 -0.162278 0.391481 + 0.975695 1.53644 -1.46807 0.0978063 -0.0286618 0.994793 + 0.967667 1.5725 -1.4625 0.142435 -0.198551 0.969685 + 0.96191 1.62178 -1.44692 0.143792 -0.300523 0.942873 + 0.921571 1.62542 -1.45391 -0.301745 -0.277767 0.912028 + 0.958812 1.47239 -1.46701 -0.220395 0.0473985 0.974258 + 0.992002 1.49626 -1.47072 0.224827 0.0821256 0.970932 + 1.01241 1.55797 -1.48345 0.517338 0.113537 0.848216 + 0.99954 1.58436 -1.4781 0.580086 -0.0410519 0.81352 + 0.993784 1.63365 -1.46253 0.654745 -0.211883 0.725544 + 0.975596 1.43157 -1.46301 -0.125646 0.0106064 0.992018 + 1.00879 1.45545 -1.46672 0.252986 0.135154 0.957983 + 1.04955 1.45545 -1.48666 0.541948 0.172206 0.82258 + 1.02872 1.5178 -1.48609 0.503214 0.153758 0.850373 + 0.985385 1.40246 -1.46142 -0.126807 0.023592 0.991647 + 1.02388 1.41698 -1.46886 0.34373 0.106926 0.932961 + 1.06464 1.41698 -1.4888 0.587574 0.0937868 0.803717 + 1.10336 1.42596 -1.53069 0.769865 0.0661277 0.634772 + 1.0881 1.47372 -1.5253 0.705216 0.195286 0.681567 + 1.02708 1.35498 -1.46118 0.346921 -0.0640374 0.935706 + 1.01449 1.40147 -1.46196 0.216544 0.182118 0.959136 + 1.06501 1.38033 -1.48959 0.608449 -0.018807 0.79337 + 1.08948 1.37162 -1.51283 0.772983 -0.116767 0.623588 + 1.08911 1.40826 -1.51204 0.750265 0.0419963 0.659803 + 1.03833 1.32715 -1.47631 0.529763 -0.351632 0.77182 + 1.05562 1.36483 -1.48268 0.615018 -0.0358755 0.787697 + 1.06688 1.337 -1.49782 0.708889 -0.282648 0.64621 + 1.09143 1.34996 -1.52572 0.810164 -0.310612 0.497146 + 1.12177 1.38211 -1.56183 0.8468 -0.146448 0.511353 + 1.02621 1.29607 -1.4915 -0.0305767 -0.765769 0.642388 + 1.04665 1.2969 -1.50157 0.535785 -0.689587 0.487242 + 1.01605 1.28833 -1.51252 -0.334495 -0.876337 0.346622 + 1.03297 1.28272 -1.52354 0.194203 -0.97962 0.0512818 + 1.05531 1.2967 -1.54347 0.455162 -0.868409 -0.196707 + 1.06899 1.31088 -1.52149 0.709269 -0.612839 0.348377 + 1.09355 1.32383 -1.54939 0.748358 -0.648722 0.138276 + 0.979928 1.29485 -1.54782 -0.413328 -0.844 0.341795 + 0.996851 1.28924 -1.55885 0.0130213 -0.987396 -0.157735 + 0.99787 1.29022 -1.56055 0.21101 -0.874689 -0.436342 + 1.00113 1.30466 -1.58525 0.193832 -0.827729 -0.526587 + 1.05856 1.31114 -1.56816 0.337129 -0.861516 -0.379649 + 1.00627 1.33112 -1.61759 0.15531 -0.831116 -0.53397 + 1.0743 1.32636 -1.59466 0.262229 -0.894482 -0.36213 + 1.10928 1.33905 -1.57589 0.653786 -0.737074 0.171127 + 1.12372 1.36045 -1.57473 0.840681 -0.361592 0.403122 + 1.01313 1.34151 -1.63528 0.0540003 -0.955113 -0.291278 + 1.08116 1.33676 -1.61236 0.105224 -0.962444 -0.25026 + 1.12029 1.3413 -1.59924 0.546743 -0.824729 0.14455 + 1.13473 1.36269 -1.59807 0.869037 -0.356882 0.342651 + 1.01302 1.3423 -1.6433 -0.0787759 -0.994839 0.0639435 + 1.08388 1.33706 -1.61943 -0.0128107 -0.993122 0.116384 + 1.123 1.3416 -1.60631 0.496762 -0.83345 0.242051 + 1.14358 1.35647 -1.62877 0.844084 -0.425937 0.32573 + 1.13601 1.3998 -1.58048 0.861222 -0.160689 0.482158 + 0.970486 1.34187 -1.67517 0.0973232 -0.99146 0.0868046 + 1.01772 1.33528 -1.66846 -0.181854 -0.956707 0.227246 + 1.08858 1.33004 -1.64459 -0.0611224 -0.950204 0.305576 + 1.13185 1.33538 -1.63701 0.458953 -0.809627 0.365878 + 0.960991 1.33745 -1.70855 0.106363 -0.993829 0.0314786 + 1.00822 1.33085 -1.70182 -0.205089 -0.964112 0.168598 + 1.09911 1.30895 -1.69599 0.000168908 -0.993586 0.11308 + 1.14238 1.31428 -1.68841 0.53171 -0.829166 0.172534 + 0.957626 1.33829 -1.72863 0.22033 -0.861657 -0.457167 + 0.990595 1.33114 -1.72509 -0.136992 -0.88613 -0.442726 + 1.08148 1.30923 -1.71925 0.0157102 -0.955463 -0.294693 + 1.08335 1.31185 -1.72254 -0.0535052 -0.954854 -0.292217 + 0.951365 1.33587 -1.72993 0.680666 -0.684464 -0.261157 + 0.954266 1.34206 -1.73489 0.641603 -0.690388 -0.334229 + 0.960751 1.3446 -1.73259 0.203137 -0.7347 -0.647264 + 0.99372 1.33744 -1.72904 -0.0845932 -0.640538 -0.763253 + 0.995594 1.34006 -1.73234 -0.173426 -0.844825 -0.506155 + 0.93741 1.31778 -1.73474 0.828706 -0.538748 -0.151651 + 0.940311 1.32397 -1.7397 0.825138 -0.555887 -0.100681 + 0.942035 1.32651 -1.74363 0.811014 -0.581756 0.0617797 + 0.95694 1.34591 -1.74022 0.612021 -0.784068 -0.103283 + 0.963425 1.34844 -1.73791 0.140448 -0.919039 -0.368295 + 0.908231 1.27295 -1.75308 0.68021 -0.723059 0.120418 + 0.944279 1.32802 -1.75012 0.77189 -0.60442 0.197136 + 0.959184 1.34741 -1.74669 0.5284 -0.828906 0.183597 + 0.965886 1.35 -1.74384 0.0307256 -0.999527 -0.00144085 + 0.998055 1.34162 -1.73825 -0.217014 -0.957713 -0.188921 + 0.905776 1.26502 -1.76626 0.486282 -0.873507 0.0227194 + 0.941823 1.32009 -1.7633 0.754334 -0.588451 0.291044 + 0.962841 1.34356 -1.76123 0.45567 -0.809372 0.370515 + 0.969543 1.34615 -1.75837 -0.0101898 -0.956427 0.291793 + 1.01234 1.33979 -1.75085 -0.198914 -0.978947 0.0457937 + 0.866702 1.25654 -1.76555 -0.179958 -0.967861 -0.175672 + 0.873374 1.26773 -1.7878 -0.171095 -0.797875 -0.578033 + 0.912448 1.27623 -1.78851 0.481969 -0.849188 -0.215839 + 0.94631 1.31106 -1.78594 0.741521 -0.652515 0.156112 + 0.967328 1.33454 -1.78386 0.495941 -0.83553 0.2365 + 0.79685 1.32324 -1.78111 -0.790395 -0.426187 -0.440045 + 0.86489 1.28634 -1.80025 -0.354786 -0.651905 -0.670184 + 0.918915 1.28339 -1.80822 0.379433 -0.805714 -0.454814 + 0.952777 1.31823 -1.80566 0.666774 -0.741382 -0.0759342 + 0.76183 1.39164 -1.74576 -0.947077 -0.179023 -0.266452 + 0.814222 1.33839 -1.80653 -0.64372 -0.302701 -0.702848 + 0.864718 1.29753 -1.81167 -0.346094 -0.613928 -0.709444 + 0.918743 1.29457 -1.81965 0.224238 -0.692603 -0.685579 + 0.752212 1.49618 -1.6794 -0.995593 -0.0876368 0.033378 + 0.753606 1.5029 -1.71989 -0.961439 0.0233884 -0.27402 + 0.779201 1.40679 -1.77117 -0.832177 -0.0421317 -0.552907 + 0.829046 1.35425 -1.82431 -0.571572 -0.223133 -0.789631 + 0.879542 1.31338 -1.82945 -0.258196 -0.505559 -0.823253 + 0.74596 1.57993 -1.63403 -0.990521 -0.0607009 0.123224 + 0.747354 1.58665 -1.67453 -0.978295 0.0855167 -0.188749 + 0.770913 1.51923 -1.75069 -0.859402 0.0941858 -0.502551 + 0.796508 1.42312 -1.80198 -0.742 0.0132376 -0.670269 + 0.851056 1.36611 -1.83951 -0.444579 -0.16388 -0.880621 + 0.750401 1.64607 -1.60312 -0.990187 -0.00110638 0.139745 + 0.752199 1.66051 -1.6355 -0.975527 0.141205 -0.168546 + 0.76879 1.67356 -1.67546 -0.878867 0.253999 -0.403828 + 0.763945 1.5997 -1.71449 -0.884763 0.196587 -0.422549 + 0.762522 1.6324 -1.56747 -0.887756 -0.122147 0.443812 + 0.754476 1.71575 -1.57263 -0.984377 -0.0015908 0.176066 + 0.756274 1.73021 -1.60501 -0.980692 0.114585 -0.158469 + 0.791203 1.67569 -1.51711 -0.541301 -0.153592 0.826682 + 0.765889 1.69882 -1.54682 -0.859758 -0.0853924 0.503511 + 0.758561 1.78796 -1.55009 -0.982815 0.0079859 0.184422 + 0.818692 1.67483 -1.51004 -0.258377 0.0298413 0.965583 + 0.79282 1.75793 -1.50947 -0.467429 -0.178363 0.86585 + 0.769974 1.77104 -1.52429 -0.796549 -0.132821 0.589804 + 0.849331 1.64797 -1.4825 -0.590317 -0.0861354 0.802562 + 0.832232 1.66576 -1.50159 -0.23267 0.674029 0.701106 + 0.856572 1.70761 -1.52333 0.21422 0.202849 0.955491 + 0.84636 1.76001 -1.5058 0.351995 -0.201517 0.914051 + 0.820309 1.75707 -1.50241 -0.0505897 -0.183514 0.981714 + 0.924839 1.70033 -1.42998 -0.396303 -0.26986 0.877564 + 0.89595 1.71482 -1.44879 -0.662965 -0.0660972 0.745727 + 0.878852 1.73262 -1.46788 -0.912664 0.153712 0.378705 + 0.870112 1.69854 -1.51488 -0.575398 0.769583 0.276873 + 0.884407 1.72657 -1.53545 0.16572 0.351825 0.921279 + 0.965178 1.6967 -1.42299 0.0971641 -0.366115 0.925483 + 0.962515 1.76197 -1.39159 0.0494668 -0.456948 0.888117 + 0.940631 1.76602 -1.39685 -0.45406 -0.382372 0.804749 + 0.911742 1.78053 -1.41565 -0.702718 -0.271822 0.657495 + 0.986358 1.70191 -1.42978 0.60395 -0.293491 0.741018 + 0.983694 1.76718 -1.39836 0.632074 -0.331551 0.700397 + 0.977586 1.82251 -1.36353 0.632742 -0.390931 0.668439 + 0.962017 1.81868 -1.35854 0.0486928 -0.536832 0.842283 + 0.940133 1.82274 -1.3638 -0.475986 -0.476836 0.738962 + 1.01744 1.65185 -1.48818 0.82055 -0.083874 0.565388 + 1.01002 1.72012 -1.45543 0.90937 -0.0896113 0.406221 + 0.995673 1.77835 -1.41304 0.915394 -0.101612 0.389524 + 1.03451 1.61165 -1.51412 0.752299 0.0800696 0.653938 + 1.04836 1.68864 -1.53604 0.907406 0.138091 0.396919 + 1.01623 1.74048 -1.4822 0.956033 0.113264 0.270504 + 1.00188 1.79872 -1.4398 0.984819 0.0772673 0.155437 + 1.04738 1.58525 -1.51946 0.706893 0.198983 0.678754 + 1.06543 1.64843 -1.56198 0.834485 0.137703 0.533547 + 1.04813 1.70852 -1.55514 0.845394 0.424976 0.323581 + 1.01599 1.76034 -1.50129 0.901143 0.432403 -0.031131 + 1.00151 1.80988 -1.45507 0.932042 0.33166 -0.145943 + 1.06727 1.53607 -1.52473 0.708083 0.225767 0.669065 + 1.08274 1.6196 -1.57935 0.802613 0.210258 0.558215 + 1.10264 1.57041 -1.58462 0.770191 0.26683 0.579316 + 1.1061 1.64277 -1.62382 0.850943 0.239853 0.467297 + 1.08878 1.67161 -1.60646 0.851207 0.17636 0.494311 + 1.06948 1.72195 -1.58796 0.804773 0.154899 0.573015 + 1.05153 1.72021 -1.57018 0.653806 0.253555 0.712915 + 1.1312 1.49015 -1.58202 0.766807 0.236065 0.596892 + 1.15929 1.49629 -1.62432 0.888797 0.159086 0.429804 + 1.13073 1.57656 -1.62691 0.822449 0.302319 0.481851 + 1.14646 1.44239 -1.58743 0.863653 0.0225176 0.503583 + 1.16822 1.44519 -1.65465 0.974154 -0.0688945 0.215121 + 1.17284 1.51873 -1.66879 0.944891 0.177707 0.274956 + 1.16836 1.5483 -1.68293 0.926131 0.321747 0.196877 + 1.12625 1.60613 -1.64105 0.867512 0.311741 0.387608 + 1.15087 1.38488 -1.61849 0.892281 -0.270739 0.361296 + 1.16132 1.42747 -1.62544 0.953786 -0.0460698 0.296934 + 1.16281 1.36629 -1.68276 0.955738 -0.252189 0.151544 + 1.16971 1.38401 -1.71198 0.985208 -0.168634 -0.030454 + 1.16897 1.41515 -1.74191 0.97297 -0.133001 -0.188784 + 1.18177 1.46764 -1.69911 0.995487 -0.083494 0.0451023 + 1.17501 1.53132 -1.71119 0.956087 0.246035 -0.15926 + 1.15551 1.33786 -1.69304 0.921014 -0.380675 0.0825778 + 1.15435 1.34214 -1.73898 0.867569 -0.408862 -0.283118 + 1.1536 1.37329 -1.7689 0.806537 -0.338132 -0.484938 + 1.14166 1.3961 -1.79896 0.716646 -0.309902 -0.624803 + 1.16209 1.43471 -1.77781 0.894252 -0.0437264 -0.445423 + 1.14122 1.31857 -1.73434 0.537613 -0.77381 -0.33495 + 1.12081 1.34121 -1.76961 0.351543 -0.678879 -0.644625 + 1.10887 1.36402 -1.79966 0.451306 -0.65054 -0.610836 + 1.12082 1.41464 -1.82495 0.716457 -0.19234 -0.670593 + 1.14125 1.45325 -1.8038 0.776066 0.0901003 -0.624182 + 1.09764 1.31002 -1.73515 -0.00304124 -0.960758 -0.277372 + 1.07722 1.33266 -1.77041 0.0673833 -0.886457 -0.457879 + 1.06411 1.34048 -1.79374 0.184022 -0.869776 -0.457848 + 1.06981 1.35429 -1.81241 0.260993 -0.787811 -0.557886 + 1.09939 1.39036 -1.83797 0.587326 -0.491057 -0.643359 + 1.01752 1.33057 -1.77356 -0.0327945 -0.998722 0.0384657 + 1.00441 1.33839 -1.79689 0.0841538 -0.910443 -0.404983 + 1.01555 1.35052 -1.81807 0.106838 -0.847384 -0.520121 + 1.02125 1.36435 -1.83674 0.116995 -0.785207 -0.60808 + 1.06033 1.38065 -1.85071 0.264508 -0.734201 -0.625288 + 0.974722 1.33694 -1.78108 0.0378411 -0.981341 0.188514 + 0.98251 1.3384 -1.80245 0.194066 -0.954064 -0.228256 + 0.993649 1.35055 -1.82362 0.225469 -0.841464 -0.491021 + 0.99208 1.36275 -1.84143 0.224675 -0.731475 -0.64379 + 0.996414 1.38162 -1.86005 0.114721 -0.768803 -0.629111 + 0.975116 1.33601 -1.80524 0.504604 -0.860644 -0.0683099 + 0.985499 1.34774 -1.8249 0.414596 -0.790654 -0.450529 + 0.98393 1.35994 -1.8427 0.31843 -0.674411 -0.666162 + 0.967246 1.38002 -1.86474 0.122181 -0.64373 -0.755436 + 0.988765 1.39406 -1.87874 -0.00797693 -0.589412 -0.807793 + 0.963161 1.32996 -1.82532 0.533264 -0.708512 -0.462212 + 0.960586 1.34898 -1.84185 0.343788 -0.601851 -0.720822 + 0.943902 1.36906 -1.86388 0.0775461 -0.468257 -0.880183 + 0.935798 1.39002 -1.87222 -0.179161 0.289045 -0.940401 + 0.916168 1.3136 -1.83618 0.0631166 -0.548984 -0.833447 + 0.91712 1.35833 -1.85396 -0.174175 -0.385521 -0.906111 + 0.909016 1.37928 -1.86229 -0.235678 -0.29067 -0.927344 + 0.879577 1.38728 -1.85458 -0.356619 0.0186646 -0.934063 + 0.977897 1.39575 -1.87826 -0.162868 -0.130107 -0.978032 + 0.880494 1.35811 -1.84722 -0.260736 -0.32044 -0.910678 + 0.818518 1.43499 -1.81718 -0.53672 0.102321 -0.837533 + 0.905572 1.40079 -1.86012 -0.28874 0.137098 -0.947541 + 0.803685 1.53284 -1.79816 -0.635609 0.163136 -0.754578 + 0.86351 1.54431 -1.82219 -0.276032 0.278569 -0.919894 + 0.878343 1.44646 -1.8412 -0.332643 0.155606 -0.930126 + 0.905215 1.41419 -1.85732 -0.321859 0.203044 -0.924759 + 0.796717 1.61331 -1.76195 -0.639976 0.338044 -0.690042 + 0.860608 1.62202 -1.78844 -0.25166 0.441123 -0.861439 + 0.964636 1.5442 -1.83363 -0.0582802 0.404076 -0.912867 + 0.9756 1.49514 -1.85648 -0.131803 0.335862 -0.932644 + 1.00247 1.46289 -1.8726 -0.190298 0.414101 -0.890116 + 0.798428 1.69134 -1.71503 -0.636144 0.392341 -0.664371 + 0.862319 1.70005 -1.74151 -0.24999 0.501494 -0.828257 + 0.961734 1.6219 -1.79988 -0.00855115 0.473337 -0.88084 + 1.03632 1.56513 -1.82489 0.26045 0.469349 -0.843728 + 1.04729 1.51607 -1.84774 0.24433 0.475268 -0.845235 + 0.766351 1.73233 -1.63718 -0.897547 0.206641 -0.389499 + 0.795989 1.7501 -1.67675 -0.765693 0.326224 -0.55434 + 0.805752 1.77556 -1.67281 -0.333036 0.580864 -0.742754 + 0.769426 1.80185 -1.60854 -0.85964 0.279734 -0.427514 + 0.779188 1.82732 -1.60459 -0.698909 0.455559 -0.551355 + 0.805421 1.83416 -1.62143 -0.203184 0.643701 -0.737811 + 0.827982 1.82389 -1.62545 0.262275 0.564566 -0.782609 + 0.828313 1.76528 -1.67683 0.209881 0.771557 -0.600541 + 0.759348 1.79972 -1.57636 -0.980372 0.136129 -0.142617 + 0.765688 1.86275 -1.54751 -0.95088 0.246581 -0.187147 + 0.777499 1.87088 -1.56637 -0.730178 0.446996 -0.516753 + 0.803731 1.87773 -1.5832 -0.368998 0.576876 -0.728735 + 0.764901 1.85098 -1.52125 -0.973073 0.0188829 0.229721 + 0.774462 1.90805 -1.49188 -0.973258 0.0249355 0.228355 + 0.77504 1.9167 -1.51119 -0.947347 0.270956 -0.170635 + 0.786851 1.92484 -1.53005 -0.711056 0.476532 -0.517027 + 0.774543 1.8401 -1.50329 -0.790856 -0.158585 0.591098 + 0.784104 1.89718 -1.47393 -0.785578 -0.20298 0.584522 + 0.789559 1.94929 -1.44557 -0.797212 -0.245721 0.55143 + 0.782274 1.95751 -1.45914 -0.975601 -0.00475762 0.219498 + 0.782852 1.96615 -1.47846 -0.944843 0.275386 -0.177298 + 0.797389 1.827 -1.48848 -0.458213 -0.274597 0.845362 + 0.800897 1.88754 -1.46304 -0.472918 -0.349431 0.808855 + 0.806352 1.93965 -1.43468 -0.475561 -0.412114 0.777177 + 0.818764 1.82256 -1.48349 -0.0645829 -0.326339 0.943044 + 0.822272 1.88311 -1.45804 -0.0592591 -0.417456 0.906763 + 0.8225 1.93631 -1.43091 -0.0673611 -0.486741 0.870945 + 0.824935 1.98148 -1.40299 -0.0595168 -0.479643 0.875443 + 0.808788 1.98483 -1.40677 -0.478088 -0.401238 0.781306 + 0.844815 1.82551 -1.48689 0.368747 -0.302957 0.878774 + 0.841422 1.88527 -1.46055 0.369227 -0.39024 0.843436 + 0.84165 1.93848 -1.43341 0.378912 -0.454753 0.805993 + 0.840044 1.98319 -1.40497 0.370029 -0.44517 0.815415 + 0.82469 2.01045 -1.38907 -0.0618344 -0.16525 0.984311 + 0.8628 1.83228 -1.49721 0.69882 -0.193724 0.688565 + 0.859408 1.89205 -1.47086 0.719024 -0.273931 0.638722 + 0.855242 1.94359 -1.44121 0.718737 -0.328703 0.612676 + 0.853636 1.98831 -1.41276 0.719534 -0.311942 0.620453 + 0.874195 1.77897 -1.51791 0.676469 -0.125144 0.725761 + 0.877897 1.84482 -1.5174 0.939806 0.00209016 0.341701 + 0.870505 1.90126 -1.4857 0.947571 -0.0761223 0.310346 + 0.86634 1.95281 -1.45605 0.952866 -0.103574 0.285165 + 0.862391 1.99558 -1.42447 0.946617 -0.0891164 0.309796 + 0.889292 1.79151 -1.53811 0.884927 0.139111 0.444469 + 0.879305 1.85613 -1.5382 0.975399 0.206905 -0.0760704 + 0.871914 1.91258 -1.5065 0.980783 0.170718 -0.0944488 + 0.867404 1.96136 -1.47176 0.982856 0.158859 -0.0935781 + 0.863455 2.00413 -1.44018 0.978324 0.192191 -0.0771038 + 0.913283 1.74562 -1.54745 0.224599 0.679926 0.698037 + 0.91404 1.75833 -1.57116 0.444114 0.870108 0.213715 + 0.890048 1.80422 -1.56183 0.936161 0.350899 -0.0217378 + 0.867427 1.86948 -1.56556 0.823437 0.37336 -0.427263 + 0.863182 1.92239 -1.52662 0.831641 0.370929 -0.413261 + 0.894918 1.72132 -1.52531 -0.588939 0.801163 0.106246 + 0.923794 1.74036 -1.53732 -0.38094 0.924197 -0.0272937 + 0.952938 1.74542 -1.54417 -0.00632487 0.993386 -0.114652 + 0.903651 1.76204 -1.48842 -0.702699 0.533287 -0.470976 + 0.925882 1.77462 -1.50761 -0.514275 0.588201 -0.624133 + 0.955026 1.77968 -1.51447 -0.0257015 0.676512 -0.735984 + 0.878845 1.73927 -1.47799 -0.907971 0.386447 -0.162008 + 0.899087 1.79644 -1.43839 -0.935934 0.318857 -0.149525 + 0.908816 1.80483 -1.45121 -0.777495 0.459167 -0.42973 + 0.931047 1.81741 -1.4704 -0.516242 0.596004 -0.61504 + 0.899094 1.78978 -1.42827 -0.925104 -0.0390471 0.3777 + 0.906243 1.84754 -1.39768 -0.951968 0.259491 -0.162547 + 0.915972 1.85595 -1.4105 -0.7745 0.461961 -0.432136 + 0.906249 1.84265 -1.39025 -0.942177 -0.120717 0.312617 + 0.911958 1.89358 -1.35878 -0.950611 0.262794 -0.165158 + 0.919284 1.89993 -1.36844 -0.773901 0.477597 -0.415907 + 0.932314 1.86519 -1.42462 -0.525027 0.602043 -0.601574 + 0.918897 1.8334 -1.37762 -0.707853 -0.371746 0.600623 + 0.911964 1.88869 -1.35134 -0.943951 -0.153564 0.292189 + 0.915968 1.93204 -1.31999 -0.95007 0.28164 -0.134336 + 0.923294 1.9384 -1.32966 -0.767422 0.509113 -0.389702 + 0.935626 1.90917 -1.38255 -0.51493 0.630635 -0.580643 + 0.942731 1.87105 -1.32796 -0.470611 -0.536769 0.700289 + 0.921495 1.8817 -1.34177 -0.713131 -0.417184 0.563385 + 0.915973 1.92818 -1.31413 -0.9417 -0.13543 0.307993 + 0.921242 1.95604 -1.29783 -0.888689 0.45838 0.0109117 + 0.926466 1.96057 -1.30472 -0.729134 0.636521 -0.251405 + 0.959263 1.86798 -1.32398 0.0407104 -0.60349 0.79633 + 0.942258 1.91278 -1.29366 -0.474826 -0.529396 0.703051 + 0.925505 1.92119 -1.30457 -0.708821 -0.410939 0.573326 + 0.921247 1.95218 -1.29197 -0.87881 0.0971644 0.467175 + 0.974832 1.87181 -1.32896 0.641662 -0.441204 0.627383 + 0.971073 1.91275 -1.29362 0.629866 -0.437903 0.641489 + 0.95879 1.90972 -1.28968 0.0502157 -0.596327 0.801169 + 0.983883 1.88026 -1.34004 0.927611 -0.177112 0.32889 + 0.980124 1.92119 -1.3047 0.926811 -0.161075 0.339229 + 0.975262 1.94566 -1.28323 0.861922 0.0563042 0.503905 + 0.968843 1.93965 -1.27537 0.593637 -0.156446 0.78938 + 0.956559 1.93662 -1.27144 0.0317551 -0.296395 0.954537 + 0.989565 1.83369 -1.3782 0.927127 -0.141926 0.346831 + 0.988447 1.89522 -1.35972 0.993572 0.019941 0.111432 + 0.983726 1.933 -1.32021 0.990768 0.035094 0.130949 + 0.978864 1.95746 -1.29875 0.932867 0.239561 0.269015 + 0.994129 1.84866 -1.39787 0.991489 0.0328007 0.12599 + 0.988169 1.90367 -1.37124 0.9366 0.300031 -0.181001 + 0.983448 1.94144 -1.33175 0.932314 0.326099 -0.156365 + 0.978738 1.9634 -1.30719 0.874662 0.484722 -0.00345886 + 0.993755 1.85983 -1.41314 0.936184 0.299037 -0.184759 + 0.982981 1.90748 -1.37727 0.62084 0.594711 -0.510761 + 0.979354 1.94445 -1.3365 0.620038 0.623844 -0.475785 + 0.974644 1.9664 -1.31195 0.572848 0.746418 -0.338683 + 0.988567 1.86364 -1.41917 0.628031 0.57067 -0.529069 + 0.971735 1.91015 -1.38211 0.330232 0.696066 -0.637526 + 0.968108 1.94712 -1.34135 0.322806 0.729585 -0.602911 + 0.966579 1.96839 -1.31515 0.302928 0.828847 -0.470369 + 0.969805 1.9715 -1.30236 0.434397 0.899283 -0.0508902 + 0.994451 1.81507 -1.46328 0.618416 0.597983 -0.50988 + 0.979564 1.81863 -1.46965 0.323729 0.665091 -0.672943 + 0.97368 1.8672 -1.42555 0.331487 0.667147 -0.667107 + 0.95189 1.91233 -1.3868 -0.0400755 0.730379 -0.681865 + 0.952452 1.94884 -1.34504 -0.0328945 0.763208 -0.645315 + 1.00893 1.76552 -1.50949 0.509336 0.67916 -0.528506 + 0.982022 1.77671 -1.5081 0.240849 0.671748 -0.700533 + 0.952568 1.8216 -1.47601 -0.040789 0.682803 -0.729463 + 0.953835 1.86938 -1.43022 -0.031336 0.700593 -0.712873 + 1.01475 1.72657 -1.54594 0.392391 0.91356 -0.106943 + 0.987834 1.73775 -1.54454 0.313461 0.941122 -0.126613 + 1.01815 1.73827 -1.56097 0.333278 0.293653 0.895932 + 0.988572 1.74562 -1.55695 0.176454 0.371544 0.911492 + 1.0327 1.79865 -1.56084 0.604262 -0.0691682 0.793778 + 1.01567 1.7933 -1.55082 0.325016 -0.171933 0.929948 + 0.986097 1.80064 -1.54679 -0.0383162 -0.199551 0.979138 + 0.953676 1.75329 -1.55657 -0.141179 0.479831 0.865928 + 1.05065 1.80039 -1.57863 0.823027 0.076056 0.562887 + 1.02393 1.86315 -1.54429 0.670406 -0.146151 0.727458 + 1.0069 1.85779 -1.53428 0.33041 -0.252079 0.909552 + 0.98619 1.85613 -1.53234 -0.0360483 -0.296041 0.954495 + 0.955781 1.8022 -1.55238 -0.367072 -0.147251 0.918464 + 1.05823 1.80894 -1.59774 0.943709 0.18023 0.277363 + 1.04226 1.87778 -1.57615 0.957066 0.075958 0.279741 + 1.03468 1.86924 -1.55703 0.863438 -0.0279794 0.503678 + 1.01649 1.92288 -1.51957 0.68078 -0.233348 0.694325 + 1.08344 1.73643 -1.6203 0.922525 0.23309 0.307599 + 1.08388 1.74579 -1.64166 0.9155 0.365741 -0.167607 + 1.05867 1.81829 -1.61909 0.962981 0.269164 0.0147819 + 1.0442 1.88418 -1.5904 0.982566 0.183879 0.0274396 + 1.03281 1.93526 -1.54636 0.966128 0.0083907 0.257928 + 1.10274 1.68609 -1.6388 0.928477 0.285324 0.237742 + 1.10032 1.68885 -1.67007 0.844187 0.489356 -0.218812 + 1.06756 1.75407 -1.66038 0.735995 0.409781 -0.53888 + 1.05554 1.82437 -1.63257 0.854704 0.351647 -0.381871 + 1.04108 1.89025 -1.60387 0.87975 0.337209 -0.335155 + 1.12121 1.65122 -1.66364 0.905436 0.387623 0.173016 + 1.11879 1.65398 -1.69492 0.765653 0.540044 -0.349468 + 1.084 1.69714 -1.68879 0.660941 0.508547 -0.551849 + 1.04663 1.76377 -1.67854 0.640029 0.411969 -0.648571 + 1.14137 1.61459 -1.68087 0.896607 0.422757 0.131803 + 1.14801 1.59761 -1.70914 0.845088 0.449594 -0.289295 + 1.12827 1.60294 -1.7296 0.628582 0.502555 -0.593568 + 1.09857 1.6381 -1.72614 0.558262 0.535911 -0.633358 + 1.15283 1.53819 -1.75413 0.793974 0.346618 -0.499462 + 1.13309 1.54353 -1.7746 0.585097 0.46513 -0.664316 + 1.10532 1.53438 -1.79755 0.488058 0.479183 -0.729509 + 1.10805 1.58706 -1.76083 0.578885 0.469159 -0.66692 + 1.0696 1.63577 -1.75368 0.52483 0.515647 -0.677246 + 1.17489 1.48719 -1.73501 0.946845 0.0903226 -0.30875 + 1.15272 1.49406 -1.77795 0.81882 0.196125 -0.539507 + 1.12311 1.49763 -1.80977 0.610504 0.350364 -0.710303 + 1.11164 1.45681 -1.83562 0.647869 0.179895 -0.740205 + 1.09534 1.48847 -1.83271 0.513726 0.392367 -0.762977 + 1.07225 1.49111 -1.84717 0.507356 0.398034 -0.764303 + 1.0753 1.52508 -1.82485 0.489936 0.46432 -0.737814 + 1.07804 1.57775 -1.78813 0.494471 0.485232 -0.721144 + 1.09737 1.43149 -1.85176 0.629567 0.0139265 -0.776821 + 1.06557 1.4637 -1.86328 0.52843 0.279584 -0.80162 + 1.04247 1.46635 -1.87773 0.193359 0.303913 -0.932871 + 1.04423 1.48211 -1.87005 0.177522 0.470682 -0.86426 + 1.07593 1.40723 -1.86478 0.535037 -0.298819 -0.790217 + 1.05129 1.43838 -1.87943 0.321225 0.11378 -0.940143 + 1.00071 1.44711 -1.88027 -0.182705 0.30798 -0.933685 + 1.05268 1.39308 -1.8694 0.307762 -0.665634 -0.679863 + 1.05412 1.41394 -1.88015 0.38233 -0.112089 -0.917202 + 1.00389 1.40927 -1.88379 -0.0913485 -0.0431159 -0.994885 + 1.00107 1.43371 -1.88308 -0.108481 0.116047 -0.987302 + 1.03086 1.39979 -1.88477 0.114306 -0.409271 -0.905225 + 1.02788 1.62315 -1.79044 0.301681 0.519481 -0.799455 + 1.01937 1.70534 -1.74027 0.356645 0.504052 -0.786597 + 1.05503 1.69481 -1.71634 0.578423 0.494647 -0.648654 + 0.95322 1.70409 -1.74971 -0.00172616 0.500178 -0.865921 + 0.965472 1.76805 -1.71504 0.0389043 0.468356 -0.882683 + 1.01097 1.77429 -1.70247 0.388503 0.449961 -0.804115 + 0.874571 1.76401 -1.70684 -0.215765 0.50595 -0.835141 + 0.96322 1.83567 -1.68111 -0.0164933 0.516224 -0.856295 + 1.00872 1.84191 -1.66855 0.387605 0.458023 -0.799986 + 1.03461 1.83407 -1.65072 0.649079 0.390356 -0.652931 + 0.861683 1.78372 -1.68945 -0.597936 0.623598 -0.503586 + 0.950332 1.85538 -1.66374 -0.317726 0.610017 -0.725899 + 0.975267 1.90391 -1.6352 -0.208535 0.561856 -0.800519 + 1.0025 1.90419 -1.63537 0.298996 0.514333 -0.803781 + 1.02839 1.89634 -1.61754 0.674428 0.430963 -0.599515 + 0.844417 1.76425 -1.68043 -0.452432 0.794534 -0.404995 + 0.913921 1.84691 -1.6455 -0.614085 0.644286 -0.455846 + 0.938856 1.89544 -1.61696 -0.542202 0.550342 -0.634933 + 0.859869 1.76859 -1.6341 0.445026 0.793956 -0.41423 + 0.875973 1.76755 -1.63771 -0.527664 0.752669 0.393777 + 0.893836 1.82196 -1.6254 -0.896356 0.299268 0.327085 + 0.896655 1.82743 -1.63648 -0.824761 0.562959 -0.0533535 + 0.921707 1.88933 -1.60415 -0.823308 0.447233 -0.349494 + 0.853077 1.821 -1.61849 0.512321 0.398105 -0.760947 + 0.87817 1.81756 -1.5892 0.818018 0.351029 -0.455659 + 0.884962 1.76516 -1.6048 0.466176 0.828904 -0.309189 + 0.896729 1.76634 -1.60699 -0.550414 0.680166 0.484168 + 0.82617 1.87946 -1.58753 0.0376388 0.588746 -0.807441 + 0.851265 1.87658 -1.58058 0.511033 0.515434 -0.687876 + 0.828572 1.93161 -1.54674 0.0456439 0.622702 -0.781127 + 0.84702 1.92949 -1.54163 0.501914 0.544805 -0.671766 + 0.806134 1.92987 -1.54242 -0.381639 0.587692 -0.713421 + 0.811053 1.97734 -1.50506 -0.37163 0.616737 -0.693921 + 0.828013 1.97864 -1.50834 0.0387334 0.652557 -0.756749 + 0.84646 1.97652 -1.50322 0.504421 0.566935 -0.651264 + 0.858672 1.97117 -1.49188 0.825376 0.387123 -0.410963 + 0.79177 1.97231 -1.49268 -0.712301 0.491453 -0.501101 + 0.797628 2.01363 -1.45839 -0.700366 0.532269 -0.475582 + 0.812841 2.01759 -1.46816 -0.372757 0.654729 -0.657558 + 0.829801 2.0189 -1.47144 0.045444 0.692976 -0.719527 + 0.844355 2.01723 -1.4674 0.493983 0.609319 -0.620251 + 0.78871 2.00747 -1.44416 -0.942371 0.300011 -0.148091 + 0.801572 2.03748 -1.43537 -0.64767 0.688258 -0.32684 + 0.816785 2.04146 -1.44513 -0.326553 0.793927 -0.512877 + 0.828873 2.04234 -1.44754 0.0308448 0.823181 -0.566941 + 0.788254 2.00064 -1.42894 -0.972322 0.0246197 0.232345 + 0.795223 2.03311 -1.42523 -0.855234 0.517342 -0.0305192 + 0.809004 2.04415 -1.42744 -0.459798 0.881304 -0.109035 + 0.817901 2.04647 -1.43316 -0.259383 0.937276 -0.232882 + 0.829989 2.04737 -1.43556 0.0498086 0.96876 -0.242947 + 0.795539 1.99244 -1.41536 -0.787446 -0.233218 0.570559 + 0.794767 2.02627 -1.40999 -0.883441 0.280727 0.375132 + 0.802389 2.03578 -1.4084 -0.586227 0.657626 0.473145 + 0.802656 2.03978 -1.4173 -0.609266 0.770668 0.186721 + 0.813198 2.01283 -1.39175 -0.406642 -0.104597 0.90758 + 0.799949 2.02044 -1.40034 -0.713163 0.0680816 0.697684 + 0.807571 2.02994 -1.39874 -0.452224 0.47853 0.752663 + 0.813367 2.04193 -1.40993 -0.224276 0.858176 0.461773 + 0.813634 2.04593 -1.41883 -0.252492 0.939872 0.229973 + 0.826811 2.02311 -1.39104 -0.0227871 0.272833 0.961792 + 0.815319 2.0255 -1.39372 -0.278669 0.332357 0.901045 + 0.817687 2.0367 -1.40026 -0.17387 0.738249 0.651734 + 0.819485 2.04025 -1.40646 0.00673967 0.884454 0.466579 + 0.831042 2.04727 -1.42219 0.0951323 0.973182 0.209445 + 0.835646 2.02411 -1.39219 0.227234 0.297828 0.92718 + 0.825435 2.03225 -1.39523 -0.0522344 0.571525 0.818921 + 0.83427 2.03325 -1.39638 0.170607 0.635874 0.7527 + 0.83939 2.03751 -1.40323 0.261961 0.77336 0.577314 + 0.839799 2.01216 -1.39104 0.346306 -0.12512 0.929741 + 0.849475 2.0158 -1.3966 0.653227 -0.0182164 0.756943 + 0.845322 2.02775 -1.39775 0.484766 0.411856 0.771606 + 0.85823 2.02307 -1.40831 0.880558 0.187929 0.435087 + 0.850442 2.032 -1.4046 0.6102 0.563452 0.556936 + 0.858992 2.02914 -1.41954 0.910346 0.407234 0.0736904 + 0.851204 2.03807 -1.41583 0.640972 0.726727 0.247025 + 0.841188 2.04106 -1.40945 0.311558 0.836697 0.45041 + 0.837159 2.04559 -1.41873 0.214142 0.939507 0.26734 + 0.852103 2.03688 -1.43541 0.7541 0.607915 -0.24854 + 0.847176 2.0426 -1.42511 0.551476 0.833615 0.0309872 + 0.856566 2.01188 -1.45606 0.825309 0.417335 -0.38039 + 0.843427 2.04067 -1.44351 0.465508 0.753491 -0.464277 + 0.8385 2.04639 -1.43321 0.312172 0.937369 -0.154554 + 0.822531 2.04825 -1.42455 -0.0694684 0.992306 0.102483 + 0.925807 1.75951 -1.57334 -0.411299 0.597867 0.688032 + 0.927912 1.80841 -1.56914 -0.726434 -0.0335528 0.686417 + 0.914592 1.82073 -1.59468 -0.849276 0.0526088 0.525322 + 0.955874 1.85768 -1.53792 -0.411358 -0.254141 0.875327 + 0.936802 1.86374 -1.55152 -0.772608 -0.123482 0.622759 + 0.923481 1.87607 -1.57706 -0.918817 0.0106625 0.394539 + 0.918888 1.88385 -1.59307 -0.970753 0.209136 0.117899 + 0.983264 1.91729 -1.51026 -0.0385597 -0.374533 0.926412 + 0.96098 1.91842 -1.51437 -0.409665 -0.333792 0.848975 + 0.941907 1.9245 -1.52797 -0.783661 -0.194019 0.590112 + 0.932115 1.93356 -1.54674 -0.936473 -0.062891 0.345054 + 0.927522 1.94134 -1.56276 -0.992672 0.104155 0.0612658 + 1.00397 1.91895 -1.51221 0.346889 -0.336199 0.875579 + 0.999619 1.97261 -1.48749 0.344914 -0.403702 0.847384 + 0.984005 1.97135 -1.48604 -0.0315257 -0.444023 0.895461 + 0.96172 1.97249 -1.49016 -0.416772 -0.39788 0.817308 + 0.947307 1.97706 -1.50044 -0.781325 -0.248361 0.57258 + 1.01214 1.97655 -1.49485 0.686758 -0.286408 0.668082 + 1.00749 2.02171 -1.46826 0.680776 -0.273483 0.679523 + 0.997615 2.0186 -1.46245 0.347852 -0.391195 0.852036 + 0.982001 2.01733 -1.46101 -0.0372974 -0.434504 0.899897 + 1.0203 1.98114 -1.50452 0.877327 -0.151467 0.455362 + 1.01565 2.02629 -1.47792 0.875941 -0.130227 0.464509 + 1.00985 2.05379 -1.4624 0.810516 0.146105 0.567201 + 1.00404 2.05053 -1.45548 0.635856 0.0333121 0.771089 + 0.994161 2.04743 -1.44967 0.306196 -0.0730943 0.949158 + 1.02724 1.92897 -1.53232 0.875826 -0.108865 0.470189 + 1.02586 1.98743 -1.51856 0.969797 -0.0168192 0.243333 + 1.02004 2.03125 -1.48901 0.965931 0.00602489 0.258728 + 1.01424 2.05876 -1.47348 0.896998 0.265072 0.353739 + 1.02733 1.99224 -1.52935 0.991211 0.1318 0.0113461 + 1.02151 2.03608 -1.49979 0.98602 0.164408 0.0271031 + 1.01517 2.06224 -1.48085 0.908245 0.392535 0.144937 + 1.0074 2.07084 -1.47634 0.60545 0.731745 0.313018 + 1.00647 2.06735 -1.46898 0.589432 0.661352 0.463879 + 1.03476 1.94165 -1.56062 0.989212 0.145646 0.015722 + 1.02503 1.99671 -1.53925 0.881103 0.341627 -0.32703 + 1.01969 2.03959 -1.5076 0.87834 0.3744 -0.297227 + 1.01336 2.06577 -1.48866 0.805969 0.568291 -0.165708 + 1.00634 2.0729 -1.48091 0.568049 0.818645 0.0845042 + 1.03246 1.94612 -1.57052 0.884622 0.332104 -0.327339 + 1.01545 2.00132 -1.54956 0.671293 0.478968 -0.565645 + 1.01011 2.04419 -1.51791 0.662039 0.520592 -0.539155 + 1.00661 2.06898 -1.49627 0.617417 0.681319 -0.393193 + 1.01978 1.9522 -1.58419 0.672125 0.459333 -0.580742 + 0.99642 2.00708 -1.56267 0.296671 0.590118 -0.750831 + 0.995099 2.04874 -1.52825 0.305392 0.630297 -0.713766 + 0.991595 2.07352 -1.50661 0.261216 0.78147 -0.566631 + 1.00074 1.95798 -1.5973 0.309374 0.560855 -0.767938 + 0.975847 2.00687 -1.56253 -0.244207 0.588952 -0.770389 + 0.974527 2.04854 -1.52813 -0.253411 0.629372 -0.734625 + 0.976944 2.0734 -1.50646 -0.216389 0.782104 -0.58437 + 0.990813 2.07877 -1.49456 0.23579 0.934527 -0.266576 + 0.973509 1.9577 -1.59711 -0.25647 0.558232 -0.78905 + 0.949082 2.00065 -1.54913 -0.554 0.512349 -0.656187 + 0.95341 2.04363 -1.51755 -0.546134 0.555732 -0.626817 + 0.946743 1.95147 -1.58371 -0.553467 0.488961 -0.674233 + 0.936118 1.99604 -1.53943 -0.83747 0.369265 -0.402848 + 0.940447 2.03902 -1.50785 -0.838137 0.404328 -0.366122 + 0.946611 2.0652 -1.48899 -0.766267 0.605144 -0.215955 + 0.955827 2.06849 -1.4959 -0.513041 0.716547 -0.472599 + 0.929595 1.94537 -1.5709 -0.841353 0.358811 -0.404203 + 0.934046 1.99201 -1.53129 -0.995019 0.0836439 0.0542248 + 0.938812 2.03584 -1.50142 -0.990397 0.117413 0.0729926 + 0.937515 1.98613 -1.51921 -0.940343 -0.096062 0.326385 + 0.942281 2.02995 -1.48935 -0.936737 -0.0728499 0.342369 + 0.944975 2.06202 -1.48256 -0.90688 0.366934 0.20719 + 0.953641 2.07063 -1.47757 -0.585212 0.724342 0.364494 + 0.954597 2.07248 -1.48133 -0.51175 0.85593 0.0741257 + 0.950006 2.02281 -1.47453 -0.783276 -0.227617 0.578506 + 0.947446 2.05783 -1.47398 -0.867967 0.213803 0.448244 + 0.956111 2.06645 -1.46899 -0.591633 0.615421 0.520794 + 0.969766 2.07362 -1.47095 -0.17785 0.90143 0.394705 + 0.970723 2.07549 -1.47471 -0.160577 0.906602 0.390241 + 0.964419 2.01823 -1.46426 -0.407496 -0.389513 0.82597 + 0.955171 2.05069 -1.45916 -0.720075 0.0676277 0.690593 + 0.960629 2.06227 -1.46033 -0.546737 0.492337 0.677261 + 0.967214 2.07131 -1.46621 -0.300105 0.858053 0.416751 + 0.965424 2.04743 -1.45186 -0.402195 -0.0619763 0.913454 + 0.970882 2.059 -1.45302 -0.286665 0.355037 0.889816 + 0.971731 2.06713 -1.45755 -0.223775 0.703876 0.674154 + 0.982013 2.06661 -1.45565 0.00366276 0.709287 0.704911 + 0.987789 2.06842 -1.45905 0.154454 0.806582 0.570587 + 0.983006 2.04653 -1.44862 -0.033658 -0.108566 0.993519 + 0.981163 2.05847 -1.45113 -0.0549915 0.337246 0.939809 + 0.992319 2.05937 -1.45218 0.229077 0.414214 0.880881 + 0.998095 2.06118 -1.45558 0.42272 0.510028 0.749119 + 0.990342 2.07074 -1.46379 0.162296 0.858346 0.486725 + 0.992911 2.07364 -1.47028 0.173208 0.87531 0.451476 + 0.972252 2.07813 -1.48049 -0.178992 0.958553 0.221672 + 1.00391 2.06445 -1.46249 0.541523 0.599848 0.589012 + 0.99444 2.07629 -1.47606 0.207902 0.891464 0.402577 + 0.993381 2.07834 -1.48062 0.216081 0.949075 0.229271 + 0.984601 2.08101 -1.48667 0.0231545 0.998041 0.0581277 + 0.976162 2.07864 -1.49442 -0.209449 0.939131 -0.27233 + 0.963814 2.07577 -1.48824 -0.367743 0.913219 -0.175487 + 0.999594 2.0761 -1.48852 0.450022 0.882156 -0.138853 + 0.936187 1.94568 -1.34079 -0.520259 0.657385 -0.545139 + 0.939359 1.96785 -1.31586 -0.480165 0.770993 -0.418343 + 0.950922 1.97011 -1.31884 -0.0508115 0.857391 -0.512151 + 0.93348 1.96797 -1.29823 -0.545887 0.837769 0.0122377 + 0.94102 1.97224 -1.30474 -0.384694 0.918542 -0.0910491 + 0.952584 1.9745 -1.30772 -0.0324882 0.983424 -0.178388 + 0.96174 1.9735 -1.30556 0.206319 0.96462 -0.164136 + 0.928256 1.96346 -1.29133 -0.661678 0.710269 0.240211 + 0.937365 1.96768 -1.28845 -0.283502 0.862474 0.419243 + 0.944905 1.97195 -1.29496 -0.157603 0.927137 0.339969 + 0.954131 1.97383 -1.29744 -0.0301258 0.953895 0.298624 + 0.963287 1.97281 -1.29528 0.142587 0.936476 0.320439 + 0.928259 1.9612 -1.2879 -0.651478 0.469036 0.596306 + 0.937368 1.96542 -1.28502 -0.27234 0.691559 0.669011 + 0.947165 1.96051 -1.27864 -0.139935 0.633509 0.760976 + 0.951054 1.97051 -1.29305 -0.00989646 0.810656 0.585439 + 0.963575 1.96415 -1.28342 0.266397 0.715895 0.645389 + 0.928037 1.94721 -1.28517 -0.678027 -0.143787 0.720837 + 0.935049 1.95622 -1.2811 -0.489486 0.261186 0.831977 + 0.944847 1.95131 -1.27473 -0.337323 0.215754 0.916332 + 0.953314 1.95908 -1.27673 -0.0168759 0.606118 0.795196 + 0.960497 1.96084 -1.27902 0.193969 0.65272 0.732347 + 0.94479 1.9388 -1.27427 -0.429763 -0.253205 0.866713 + 0.956616 1.94912 -1.2719 0.0406909 0.213526 0.976089 + 0.963799 1.9509 -1.2742 0.405407 0.292528 0.866067 + 0.970218 1.95691 -1.28205 0.654834 0.419877 0.628407 + 0.972324 1.96381 -1.29113 0.718078 0.511066 0.472414 + 0.965681 1.97106 -1.2925 0.297962 0.813113 0.500065 + 0.972199 1.96974 -1.29958 0.659057 0.721784 0.211354 + -0.899092 1.49376 -2.24544 0.347716 0.20168 -0.915652 + -0.886486 1.45631 -2.24676 0.411627 -0.152926 -0.89843 + -0.927139 1.43888 -2.25177 0.296551 -0.376099 -0.877842 + -0.848608 1.46705 -2.22149 0.566933 0.0178786 -0.82357 + -0.871592 1.43878 -2.22644 0.360939 -0.50584 -0.783485 + -0.887581 1.43198 -2.23119 0.350441 -0.71197 -0.608514 + -0.902475 1.44951 -2.25152 0.336819 -0.586789 -0.736363 + -0.95769 1.49484 -2.26045 0.215931 0.188097 -0.95812 + -0.924909 1.56648 -2.22949 0.338979 0.369488 -0.865201 + -0.861214 1.50451 -2.22016 0.485139 0.278077 -0.829043 + -0.954314 1.44138 -2.26401 0.319065 -0.257022 -0.912216 + -1.03233 1.48352 -2.27793 0.0674862 0.214674 -0.974351 + -1.04491 1.57445 -2.23899 0.000782238 0.376687 -0.92634 + -0.983508 1.56755 -2.24452 0.0830266 0.318008 -0.944446 + -1.0136 1.39205 -2.2446 0.0963116 -0.826824 -0.554154 + -1.02895 1.43006 -2.28148 0.0655307 -0.332016 -0.940995 + -1.0787 1.49585 -2.27286 -0.224748 0.226038 -0.947837 + -1.09129 1.58679 -2.23392 -0.109045 0.414363 -0.903555 + -1.0558 1.63596 -2.21233 -0.0471832 0.478576 -0.876777 + -0.986422 1.38955 -2.23237 0.208585 -0.792402 -0.573229 + -1.05482 1.38207 -2.20798 -0.410894 -0.870223 -0.271806 + -1.04752 1.38995 -2.23971 -0.286681 -0.846133 -0.449303 + -1.06288 1.42796 -2.27657 -0.383985 -0.436768 -0.813504 + -0.920256 1.42007 -2.23255 0.326465 -0.727625 -0.60331 + -0.920522 1.4091 -2.21389 0.375115 -0.848851 -0.372479 + -0.986688 1.37858 -2.21372 0.192482 -0.924479 -0.329073 + -0.895592 1.4307 -2.23229 0.263162 -0.746972 -0.610555 + -0.895922 1.41692 -2.20714 0.2813 -0.882887 -0.376006 + -0.928203 1.39501 -2.17716 0.324915 -0.938226 -0.119002 + -0.958305 1.38611 -2.16114 0.239838 -0.965313 0.103189 + -1.01679 1.36969 -2.19769 -0.0104022 -0.97555 -0.219531 + -0.887911 1.4182 -2.20603 0.0154502 -0.854308 -0.519537 + -0.903603 1.40282 -2.17041 0.118208 -0.958889 -0.257991 + -0.915701 1.39729 -2.13927 -0.029742 -0.999541 -0.00581299 + -0.940077 1.39375 -2.14157 0.176815 -0.968049 0.177812 + -0.87123 1.41119 -2.20415 -0.0824662 -0.779439 -0.621027 + -0.896651 1.40107 -2.16767 -0.226856 -0.910269 -0.346333 + -0.908748 1.39554 -2.13654 -0.427898 -0.867193 -0.254716 + -0.930671 1.40194 -2.11612 -0.0845671 -0.988612 0.12448 + -0.848054 1.43546 -2.2199 0.426623 -0.310922 -0.849306 + -0.847692 1.40788 -2.19762 0.19371 -0.655241 -0.730162 + -0.87997 1.39407 -2.16579 -0.432775 -0.744314 -0.508628 + -0.828642 1.45837 -2.20087 0.71805 -0.0727985 -0.692174 + -0.828088 1.42677 -2.19929 0.716303 -0.313041 -0.623631 + -0.830224 1.39283 -2.17614 0.624853 -0.447201 -0.639976 + -0.849827 1.37393 -2.17447 -0.0464246 -0.709832 -0.70284 + -0.824036 1.48986 -2.20217 0.636989 0.0877634 -0.765861 + -0.809707 1.45721 -2.1801 0.8428 -0.128338 -0.522701 + -0.799637 1.43961 -2.15706 0.777028 -0.169717 -0.606155 + -0.820154 1.37524 -2.1531 0.688939 -0.52652 -0.498136 + -0.85573 1.3557 -2.14582 -0.207085 -0.775424 -0.596518 + -0.813156 1.51146 -2.18697 0.688529 0.276065 -0.670609 + -0.805101 1.4887 -2.1814 0.89159 -0.0452952 -0.450573 + -0.791442 1.54012 -2.13914 0.866171 0.159485 -0.473616 + -0.850334 1.5261 -2.20495 0.504239 0.355548 -0.786974 + -0.799498 1.56287 -2.14471 0.744863 0.249575 -0.618782 + -0.916339 1.61308 -2.20198 0.354047 0.483464 -0.800571 + -0.841764 1.57271 -2.17745 0.550908 0.341102 -0.761676 + -0.789347 1.64319 -2.10231 0.809707 0.176438 -0.559683 + -0.994392 1.62906 -2.21786 0.11842 0.507327 -0.853578 + -0.92079 1.6404 -2.18212 0.305759 0.493066 -0.814492 + -0.831614 1.65302 -2.13505 0.528621 0.326104 -0.783719 + -0.998842 1.65637 -2.198 0.120238 0.517731 -0.847053 + -0.980605 1.70774 -2.17046 0.111612 0.414575 -0.903145 + -0.917688 1.70239 -2.15691 0.312348 0.331844 -0.890123 + -0.828512 1.71502 -2.10984 0.505614 0.222222 -0.83365 + -1.05076 1.68208 -2.18405 -0.0544873 0.516237 -0.854711 + -1.03252 1.73344 -2.15652 -0.112033 0.492671 -0.862974 + -0.999865 1.7905 -2.12876 -0.118145 0.530815 -0.839212 + -0.953246 1.792 -2.13158 0.0717505 0.465315 -0.882232 + -0.890328 1.78665 -2.11804 0.304835 0.362288 -0.880808 + -1.10063 1.64679 -2.2006 -0.163567 0.499036 -0.851004 + -1.09559 1.6929 -2.17231 -0.146371 0.547252 -0.82407 + -1.07481 1.74248 -2.14068 -0.193684 0.595922 -0.779335 + -1.04216 1.79953 -2.11292 -0.403665 0.681592 -0.610317 + -0.972288 1.8385 -2.09677 -0.170103 0.76314 -0.623443 + -1.13472 1.63559 -2.19829 -0.528753 0.406951 -0.744857 + -1.13202 1.7126 -2.15023 -0.518974 0.539562 -0.662977 + -1.11124 1.76217 -2.11859 -0.383798 0.765009 -0.517166 + -1.07684 1.78557 -2.08856 -0.500082 0.800928 -0.329291 + -1.12538 1.57558 -2.23162 -0.478761 0.307786 -0.822226 + -1.14556 1.56771 -2.21169 -0.924732 0.0127687 -0.380405 + -1.15054 1.62825 -2.18043 -0.94355 0.149282 -0.295684 + -1.14784 1.70525 -2.13236 -0.93001 0.311295 -0.19539 + -1.12989 1.75606 -2.09305 -0.802141 0.597122 -0.00389197 + -1.08355 1.46722 -2.27512 -0.436262 -0.104335 -0.89375 + -1.13023 1.54695 -2.23386 -0.734542 0.00769043 -0.67852 + -1.12601 1.49299 -2.22076 -0.922489 -0.292095 -0.252379 + -1.14477 1.55028 -2.18632 -0.983483 -0.176684 -0.0393022 + -1.14975 1.61081 -2.15505 -0.999238 -0.0371698 0.0119378 + -1.11068 1.47223 -2.24293 -0.844428 -0.314825 -0.433389 + -1.09001 1.43298 -2.24439 -0.757829 -0.511739 -0.404745 + -1.12245 1.47471 -2.19044 -0.928743 -0.347266 -0.129775 + -1.1412 1.532 -2.156 -0.978863 -0.204467 -0.00462601 + -1.0973 1.42511 -2.21268 -0.809678 -0.528579 -0.255001 + -1.1238 1.4619 -2.14593 -0.955007 -0.280978 -0.0949409 + -1.1384 1.52996 -2.09554 -0.984644 -0.174196 0.0114794 + -1.14607 1.58662 -2.06973 -0.992666 -0.0603977 0.104715 + -1.14887 1.58865 -2.13019 -0.996988 -0.0766038 0.0120895 + -1.09865 1.4123 -2.16816 -0.817352 -0.52306 -0.241544 + -1.1117 1.39962 -2.10918 -0.880765 -0.418878 -0.220893 + -1.12189 1.4465 -2.09138 -0.982189 -0.169339 -0.0814219 + -1.13649 1.51456 -2.04099 -0.990881 -0.0860551 0.103681 + -1.078 1.38547 -2.16349 -0.560756 -0.776008 -0.288729 + -1.10301 1.40494 -2.14053 -0.674597 -0.676213 -0.296066 + -1.09355 1.37119 -2.09712 -0.555811 -0.775705 -0.298924 + -1.12052 1.38342 -2.03799 -0.925874 -0.376859 0.0270859 + -1.13071 1.43029 -2.0202 -0.981496 -0.15405 0.113725 + -1.03997 1.37308 -2.15319 -0.00310849 -0.999983 0.0049718 + -1.072 1.36994 -2.13355 -0.182406 -0.949212 -0.256367 + -1.08236 1.37812 -2.13585 -0.63064 -0.703357 -0.327997 + -1.08487 1.3765 -2.12848 -0.639089 -0.69553 -0.328335 + -1.02978 1.37531 -2.15087 0.183394 -0.96671 0.178434 + -1.06181 1.37216 -2.13123 0.22663 -0.973001 0.0436826 + -1.07451 1.36833 -2.12618 -0.192974 -0.95056 -0.243304 + -1.01155 1.38294 -2.1313 0.197974 -0.957821 0.208292 + -1.03001 1.38062 -2.12265 0.242302 -0.967651 0.0702951 + -1.04271 1.37679 -2.1176 0.30303 -0.928481 -0.214701 + -1.04961 1.36119 -2.08699 0.152833 -0.914261 -0.375193 + -0.955048 1.39841 -2.11842 0.172716 -0.955008 0.241098 + -0.973508 1.39608 -2.10977 0.238834 -0.96828 0.0734327 + -0.976448 1.39491 -2.1025 0.292233 -0.931926 -0.214739 + -0.983343 1.37932 -2.07189 0.297877 -0.864302 -0.405279 + -0.940627 1.40425 -2.10236 0.0119251 -0.999809 0.0154635 + -0.943567 1.40308 -2.09509 0.0806325 -0.946819 -0.3115 + -0.949257 1.38472 -2.06144 0.0515516 -0.875933 -0.47967 + -0.995344 1.34393 -2.00981 0.267433 -0.876904 -0.399398 + -1.05697 1.33738 -2.04067 0.00316493 -0.938374 -0.345607 + -0.925917 1.4005 -2.11096 -0.465319 -0.868053 -0.173098 + -0.935873 1.40281 -2.09718 -0.372385 -0.871111 -0.320149 + -0.941563 1.38446 -2.06353 -0.386165 -0.779534 -0.493156 + -0.95376 1.34832 -1.99973 -0.369016 -0.776274 -0.511102 + -0.961258 1.34933 -1.99936 0.0632665 -0.877436 -0.475503 + -0.903042 1.38081 -2.11155 -0.642412 -0.674715 -0.363411 + -0.914566 1.36855 -2.07365 -0.624128 -0.648387 -0.435957 + -0.926763 1.33242 -2.00984 -0.490945 -0.811288 -0.317466 + -0.961228 1.33076 -1.96753 -0.169257 -0.984944 -0.035164 + -0.968726 1.33177 -1.96715 -0.0120355 -0.992256 -0.123627 + -0.885873 1.37584 -2.13714 -0.591827 -0.709596 -0.382381 + -0.855708 1.33141 -2.11817 -0.109685 -0.882587 -0.457176 + -0.867232 1.31915 -2.08026 -0.244785 -0.896655 -0.368904 + -0.820131 1.35095 -2.12545 0.509325 -0.684733 -0.521276 + -0.805212 1.33538 -2.08529 0.580008 -0.755738 -0.304057 + -0.869015 1.31044 -2.04502 -0.125359 -0.972412 -0.196723 + -0.864873 1.304 -1.99944 -0.0532372 -0.997076 0.0548167 + -0.922622 1.32598 -1.96426 -0.182374 -0.961751 0.20439 + -0.77699 1.42361 -2.13262 0.758175 -0.255066 -0.600093 + -0.762071 1.40805 -2.09246 0.839452 -0.341345 -0.422852 + -0.806994 1.32668 -2.05006 0.49444 -0.842977 -0.211944 + -0.782071 1.50568 -2.13663 0.721418 0.143125 -0.677548 + -0.759425 1.48967 -2.11219 0.853145 0.0876704 -0.514253 + -0.737945 1.48817 -2.06393 0.922728 0.0628149 -0.380298 + -0.734565 1.38336 -2.02192 0.84881 -0.469183 -0.243698 + -0.762784 1.59643 -2.05332 0.881025 0.21473 -0.421529 + -0.741304 1.59492 -2.00506 0.900503 0.170746 -0.399924 + -0.710439 1.46348 -1.99338 0.975812 -0.0635473 -0.209172 + -0.739676 1.37208 -1.97537 0.778311 -0.611871 0.140875 + -0.812106 1.3154 -2.0035 0.401367 -0.915608 0.0237888 + -0.772155 1.63086 -2.05582 0.914181 0.10517 -0.391424 + -0.739236 1.6697 -1.97481 0.893909 0.0177221 -0.447898 + -0.710255 1.56845 -1.95041 0.971957 0.0764396 -0.222389 + -0.710269 1.54832 -1.89964 0.951423 -0.12042 0.28336 + -0.710452 1.44335 -1.94262 0.931513 -0.282433 0.22916 + -0.776665 1.70487 -2.06958 0.810363 0.0258287 -0.585358 + -0.759473 1.69255 -2.0231 0.922959 -0.0681686 -0.378814 + -0.729217 1.71242 -1.96378 0.913225 -0.00884209 -0.407359 + -0.708187 1.64323 -1.92017 0.97974 0.0129378 -0.199856 + -0.758738 1.75839 -2.05214 0.823093 0.0326935 -0.566965 + -0.749453 1.73526 -2.01205 0.935118 -0.0904782 -0.342591 + -0.739652 1.76789 -1.98901 0.962083 0.022823 -0.271801 + -0.727109 1.75134 -1.95088 0.944277 0.104782 -0.312027 + -0.705916 1.68333 -1.91339 0.979498 -0.00719142 -0.201327 + -0.810585 1.76854 -2.09241 0.488766 0.221227 -0.8439 + -0.791228 1.81115 -2.06378 0.557852 0.537038 -0.632764 + -0.748937 1.79101 -2.02909 0.851041 0.319981 -0.416343 + -0.870971 1.82926 -2.08941 0.308356 0.544939 -0.779717 + -0.848521 1.85072 -2.05959 0.381558 0.567316 -0.729771 + -0.786292 1.81982 -2.03777 0.606728 0.612492 -0.50669 + -0.744001 1.79968 -2.00307 0.896375 0.304134 -0.322514 + -0.925669 1.84 -2.09959 0.0886677 0.660748 -0.745352 + -0.903219 1.86146 -2.06977 0.117257 0.633783 -0.764572 + -0.889381 1.90294 -2.04387 0.134329 0.422129 -0.896528 + -0.85084 1.88291 -2.04043 0.394515 0.426646 -0.813837 + -0.939863 1.861 -2.06729 -0.174519 0.730715 -0.659999 + -0.926026 1.90248 -2.04141 -0.198054 0.430141 -0.880769 + -0.924929 1.9648 -2.02233 -0.145931 0.346733 -0.926542 + -0.892353 1.96327 -2.02012 0.220558 0.385362 -0.896019 + -0.853812 1.94323 -2.01666 0.443739 0.460189 -0.768975 + -1.01063 1.83274 -2.08394 -0.39026 0.82766 -0.403332 + -0.978204 1.85524 -2.05445 -0.368115 0.76447 -0.529223 + -0.957905 1.89687 -2.03116 -0.438548 0.465725 -0.768619 + -1.04531 1.81879 -2.05957 -0.59268 0.777709 -0.209522 + -1.01618 1.84657 -2.03436 -0.595286 0.722832 -0.350924 + -0.995883 1.8882 -2.01106 -0.646086 0.509964 -0.5679 + -0.975807 1.94944 -1.98993 -0.766071 0.32879 -0.552297 + -0.956808 1.9592 -2.01208 -0.589911 0.296411 -0.751096 + -1.06679 1.80356 -2.03872 -0.714434 0.694392 0.0860424 + -1.03766 1.83134 -2.0135 -0.796864 0.603949 -0.0159384 + -1.01403 1.8742 -1.9934 -0.8602 0.465125 -0.209081 + -1.09549 1.77946 -2.06302 -0.643207 0.761377 0.0811836 + -1.06837 1.78834 -2.0124 -0.757219 0.570832 0.317442 + -1.0501 1.80483 -1.99789 -0.817893 0.509632 0.267071 + -1.02647 1.84769 -1.9778 -0.882684 0.309897 0.353317 + -1.09708 1.76425 -2.0367 -0.761274 0.548182 0.34635 + -1.06596 1.7651 -1.96907 -0.789962 0.506357 0.345777 + -1.12907 1.73891 -2.06777 -0.889246 0.352855 0.291091 + -1.12418 1.7134 -2.0251 -0.869672 0.365851 0.331397 + -1.09218 1.73874 -1.99404 -0.791561 0.482669 0.374782 + -1.14702 1.68809 -2.10709 -0.988099 0.110558 0.106949 + -1.14066 1.67979 -2.04604 -0.959844 0.190917 0.205548 + -1.11048 1.67767 -1.96451 -0.871971 0.241375 0.425916 + -1.08523 1.7041 -1.93404 -0.82439 0.345556 0.448299 + -1.05901 1.73045 -1.90908 -0.79467 0.37722 0.475611 + -1.14614 1.66593 -2.08223 -0.994723 0.0386123 0.0950579 + -1.14059 1.60047 -2.03354 -0.974829 -0.0492873 0.21744 + -1.12697 1.64406 -1.98544 -0.932018 0.0984178 0.348792 + -1.08672 1.64681 -1.9115 -0.826502 0.118699 0.550277 + -1.06147 1.67324 -1.88104 -0.765794 0.13863 0.627965 + -1.12764 1.56808 -1.99769 -0.964985 -0.0361345 0.259805 + -1.11401 1.61167 -1.94958 -0.894939 0.0504442 0.443328 + -1.05772 1.62163 -1.86933 -0.753993 0.0847421 0.651393 + -1.01885 1.64567 -1.83592 -0.630773 0.126082 0.765655 + -1.11346 1.54151 -1.94398 -0.897603 -0.0242042 0.44014 + -1.08501 1.58649 -1.90741 -0.801013 0.00445237 0.59863 + -1.03918 1.60236 -1.84948 -0.646277 -0.109597 0.755192 + -1.12231 1.48799 -1.98729 -0.958534 -0.0410942 0.281998 + -1.106 1.4838 -1.94016 -0.787083 -0.19816 0.584152 + -1.08758 1.52264 -1.91138 -0.696611 -0.1574 0.699971 + -1.05913 1.56764 -1.87481 -0.670339 -0.144468 0.727856 + -1.11441 1.4261 -1.97307 -0.832293 -0.237944 0.50067 + -1.06537 1.47382 -1.91368 -0.604304 -0.279018 0.746301 + -1.04694 1.51267 -1.8849 -0.486776 -0.296557 0.821646 + -1.03598 1.56173 -1.86204 -0.448857 -0.302856 0.840718 + -1.01603 1.59645 -1.83673 -0.364481 -0.398658 0.841561 + -1.10104 1.3795 -1.98664 -0.736316 -0.47224 0.48459 + -1.09989 1.41162 -1.9656 -0.648861 -0.346348 0.677512 + -1.05085 1.45934 -1.90621 -0.591681 -0.206393 0.779305 + -1.00846 1.50637 -1.86986 -0.363339 -0.247272 0.898244 + -1.08144 1.34347 -1.99944 -0.612244 -0.705318 0.357328 + -1.04294 1.35016 -1.9651 -0.455384 -0.62214 0.636841 + -1.04907 1.39376 -1.9313 -0.532662 -0.50549 0.678786 + -1.04792 1.42587 -1.91027 -0.575188 -0.282947 0.767528 + -1.00553 1.4729 -1.87392 -0.386326 -0.206374 0.898978 + -1.10092 1.34738 -2.0508 -0.597087 -0.781405 -0.181368 + -1.05999 1.32342 -2.00723 -0.314764 -0.949148 -0.00648119 + -1.02149 1.3301 -1.97289 -0.187316 -0.880038 0.436401 + -1.00874 1.35683 -1.93603 -0.363404 -0.642582 0.674556 + -1.01487 1.40043 -1.90222 -0.40065 -0.450113 0.798046 + -0.976767 1.38693 -1.89556 -0.212181 -0.516547 0.829553 + -0.955031 1.42883 -1.87211 -0.134559 -0.352529 0.926076 + -0.993137 1.44233 -1.87877 -0.309951 -0.286288 0.906625 + -0.992956 1.34349 -1.94269 -0.126707 -0.816649 0.563054 + -0.960983 1.37358 -1.90222 -0.183924 -0.580943 0.792892 + -0.897501 1.43092 -1.87013 0.0120944 -0.367199 0.930064 + -0.921796 1.52442 -1.84221 -0.128176 -0.282323 0.950718 + -0.998746 1.33032 -1.97424 0.0103125 -0.961874 0.273297 + -0.970212 1.3437 -1.94403 -0.122453 -0.856635 0.501181 + -0.948804 1.35617 -1.91136 -0.25078 -0.702371 0.666172 + -0.893374 1.36083 -1.90056 -0.0224523 -0.58474 0.81091 + -0.905553 1.37825 -1.89143 -0.0392813 -0.425965 0.903886 + -0.998363 1.32996 -1.97637 0.113476 -0.989752 -0.0866871 + -0.969109 1.33213 -1.96502 -0.0793471 -0.941174 0.328475 + -0.962097 1.33641 -1.9534 -0.13941 -0.895945 0.421719 + -0.940689 1.34888 -1.92073 -0.143787 -0.858118 0.492908 + -0.954216 1.33504 -1.9559 -0.0982329 -0.912804 0.396409 + -0.909096 1.33982 -1.92908 -0.13624 -0.850832 0.507467 + -0.848994 1.34274 -1.91206 0.121809 -0.651268 0.749007 + -0.805417 1.37274 -1.90596 0.342821 -0.493843 0.79912 + -0.864716 1.32173 -1.94058 -0.0353278 -0.903518 0.427092 + -0.811948 1.33311 -1.94464 0.377319 -0.826003 0.418747 + -0.768371 1.36311 -1.93854 0.560555 -0.661809 0.497782 + -0.797364 1.42541 -1.88466 0.265085 -0.440463 0.857743 + -0.739147 1.43438 -1.90578 0.614423 -0.424512 0.665036 + -0.800958 1.50662 -1.84181 0.164989 -0.388572 0.906527 + -0.864266 1.5265 -1.84023 -0.0492242 -0.327377 0.943611 + -0.742741 1.5156 -1.86294 0.614545 -0.321978 0.720184 + -0.743671 1.58188 -1.83554 0.641008 -0.270021 0.718468 + -0.787413 1.572 -1.81563 0.205742 -0.347698 0.914755 + -0.85072 1.59187 -1.81405 -0.0574968 -0.37744 0.924247 + -0.711199 1.61461 -1.87225 0.935213 -0.109471 0.336739 + -0.708928 1.65471 -1.86548 0.942386 -0.0692211 0.327286 + -0.741793 1.62937 -1.82166 0.655061 -0.159911 0.73846 + -0.785535 1.61948 -1.80175 0.232587 -0.247171 0.940643 + -0.703809 1.72224 -1.90049 0.992577 0.103451 -0.0639395 + -0.711709 1.70214 -1.8583 0.904742 0.0544195 0.422468 + -0.744575 1.67681 -1.81449 0.660655 -0.0312616 0.750038 + -0.780673 1.66025 -1.79405 0.296559 -0.121798 0.947216 + -0.842039 1.62036 -1.79979 -0.0169634 -0.318493 0.947774 + -0.724012 1.78422 -1.92417 0.948119 0.167234 -0.270374 + -0.713326 1.77037 -1.89423 0.98975 0.140091 -0.0277306 + -0.721226 1.75027 -1.85204 0.903527 0.0572023 0.424697 + -0.751963 1.73191 -1.81056 0.672115 -0.0263851 0.739977 + -0.788062 1.71535 -1.79012 0.199623 -0.0654664 0.977683 + -0.736555 1.80077 -1.96229 0.967159 0.133638 -0.216206 + -0.736368 1.83852 -1.93163 0.961441 0.140857 -0.236199 + -0.726314 1.83497 -1.90204 0.945646 0.155665 -0.285521 + -0.715627 1.82111 -1.87211 0.999403 0.0345378 -0.000400484 + -0.725543 1.80598 -1.84147 0.912115 -0.0939597 0.399021 + -0.743814 1.83743 -1.97241 0.723326 0.456486 -0.518093 + -0.736551 1.89566 -1.90307 0.794033 0.364331 -0.486594 + -0.726497 1.89212 -1.87348 0.944126 0.154961 -0.290884 + -0.717133 1.8795 -1.84616 0.999894 0.0117124 -0.00861892 + -0.727049 1.86436 -1.81551 0.857643 -0.161196 0.488327 + -0.761862 1.84348 -1.975 0.351154 0.757904 -0.549792 + -0.749461 1.89927 -1.91012 0.410827 0.60628 -0.680915 + -0.748343 1.96032 -1.86717 0.346225 0.506933 -0.789397 + -0.735433 1.95672 -1.86013 0.72398 0.339969 -0.600228 + -0.725891 1.95057 -1.84504 0.913436 0.168941 -0.370261 + -0.778005 1.84923 -1.98921 0.738713 0.659058 0.141227 + -0.791416 1.85339 -1.94798 -0.189425 0.894161 -0.405703 + -0.792228 1.90588 -1.91082 -0.309004 0.590827 -0.745279 + -0.76751 1.90531 -1.91271 0.131846 0.653479 -0.745374 + -0.76429 1.96284 -1.86876 0.0632462 0.563842 -0.823457 + -0.784655 1.86838 -2.00259 0.829928 0.510829 -0.224218 + -0.828373 1.92925 -1.96297 0.899974 0.332641 0.281773 + -0.807559 1.85914 -1.96219 0.577452 0.640379 0.506423 + -0.818141 1.85194 -1.92974 -0.297812 0.919837 -0.255359 + -0.788611 1.85201 -2.0186 0.615083 0.429164 -0.661431 + -0.849856 1.95961 -2.00064 0.66663 0.488395 -0.563093 + -0.835023 1.94841 -1.97634 0.888805 0.447232 -0.100042 + -0.892646 2.02482 -1.99562 0.302756 0.388906 -0.87011 + -0.87111 2.01902 -1.98352 0.705783 0.361712 -0.609126 + -0.856278 2.00783 -1.95922 0.922003 0.285453 -0.261586 + -0.851627 1.99948 -1.94063 0.980289 0.17805 0.0856201 + -0.832983 1.92248 -1.94618 0.828313 0.154885 0.538431 + -0.925222 2.02636 -1.99782 -0.162053 0.389442 -0.906683 + -0.921799 2.08898 -1.96949 -0.153016 0.451938 -0.878828 + -0.895326 2.08771 -1.96769 0.308953 0.432891 -0.846849 + -0.873791 2.08192 -1.9556 0.725954 0.333154 -0.601663 + -0.948669 2.02264 -1.98866 -0.597721 0.346066 -0.723165 + -0.945246 2.08526 -1.96032 -0.608751 0.38613 -0.693056 + -0.939173 2.14027 -1.93175 -0.59624 0.47166 -0.649642 + -0.921589 2.14313 -1.93873 -0.160704 0.54685 -0.821663 + -0.895116 2.14186 -1.93694 0.317027 0.525182 -0.789733 + -0.967668 2.01288 -1.9665 -0.843969 0.273105 -0.46166 + -0.960694 2.07717 -1.94198 -0.843239 0.292986 -0.450674 + -0.954621 2.13217 -1.91341 -0.835798 0.359526 -0.414949 + -0.976243 2.00544 -1.95092 -0.963318 0.211039 -0.165772 + -0.969269 2.06972 -1.92641 -0.970206 0.185074 -0.156359 + -0.961027 2.12683 -1.90189 -0.961423 0.236467 -0.140529 + -0.944656 2.18136 -1.88442 -0.823786 0.424218 -0.376054 + -0.993954 1.93544 -1.97227 -0.923256 0.334014 -0.189825 + -0.975963 1.99982 -1.93825 -0.953652 0.074504 0.291542 + -0.969034 2.06551 -1.91693 -0.965248 0.022212 0.26039 + -0.960792 2.12263 -1.8924 -0.961549 0.0362511 0.272229 + -0.951062 2.17602 -1.8729 -0.952511 0.289073 -0.0957111 + -0.993675 1.92983 -1.9596 -0.914322 0.188608 0.35839 + -0.981995 1.92345 -1.94256 -0.76866 0.0297373 0.638966 + -0.967909 1.99389 -1.92317 -0.833792 -0.0381279 0.55076 + -0.96098 2.05958 -1.90185 -0.842948 -0.0899276 0.530426 + -0.954734 2.11813 -1.88125 -0.844093 -0.0971345 0.527325 + -1.01479 1.84131 -1.96075 -0.733716 0.382931 0.56127 + -0.972792 1.85284 -1.93957 -0.47498 0.395604 0.786061 + -0.964709 1.91481 -1.92212 -0.601728 -0.124145 0.788994 + -0.950622 1.98525 -1.90273 -0.611008 -0.132087 0.780527 + -0.946914 2.05248 -1.88496 -0.630339 -0.180557 0.755031 + -1.01408 1.83106 -1.94101 -0.402072 0.911785 -0.0835868 + -0.972088 1.84258 -1.91983 -0.0493733 0.97005 -0.237836 + -0.937711 1.85232 -1.92473 -0.310743 0.412287 0.856422 + -0.929628 1.91428 -1.90729 -0.228028 -0.178993 0.95706 + -0.929162 1.98119 -1.89321 -0.226462 -0.213016 0.950441 + -1.02479 1.83536 -1.92346 -0.7718 0.626895 -0.106433 + -0.980764 1.88526 -1.86563 -0.438602 0.762872 -0.475032 + -0.960507 1.89046 -1.87556 -0.113201 0.727348 -0.676868 + -0.925232 1.8928 -1.86607 0.252741 0.618774 -0.743802 + -0.936812 1.84492 -1.91034 0.058177 0.982972 -0.174304 + -1.04769 1.78159 -1.95457 -0.846836 0.445254 0.29089 + -1.03028 1.81533 -1.93018 -0.908675 0.135185 0.395011 + -0.998351 1.88183 -1.83149 -0.95513 0.235038 0.180233 + -0.991474 1.88956 -1.84808 -0.703425 0.640085 -0.309006 + -1.03082 1.77568 -1.89927 -0.852478 0.290877 0.434363 + -1.01341 1.80942 -1.87489 -0.906329 0.0132432 0.422365 + -1.00384 1.8618 -1.83821 -0.92452 0.0180254 0.380707 + -1.03131 1.70976 -1.86119 -0.699678 0.256514 0.666822 + -1.00313 1.75498 -1.85138 -0.737897 0.156586 0.656497 + -0.987221 1.80629 -1.83345 -0.786645 -0.128956 0.603788 + -0.977649 1.85867 -1.79678 -0.790764 -0.239965 0.563125 + -0.988692 1.68218 -1.81608 -0.534021 0.0845056 0.841237 + -0.959144 1.73527 -1.80948 -0.546456 0.0397479 0.836544 + -0.94324 1.78657 -1.79155 -0.577563 -0.223854 0.785055 + -0.94535 1.84504 -1.7678 -0.595817 -0.341886 0.726716 + -0.943913 1.66603 -1.7953 -0.239564 -0.0683772 0.96847 + -0.914365 1.71912 -1.78871 -0.168197 -0.112645 0.979296 + -0.906958 1.77198 -1.77752 -0.190975 -0.25599 0.947627 + -0.960783 1.62859 -1.80535 -0.227515 -0.27877 0.933019 + -0.887647 1.66415 -1.79206 -0.0331019 -0.0842228 0.995897 + -0.870092 1.70105 -1.79431 0.0448651 -0.0469819 0.997888 + -0.862685 1.75391 -1.78312 0.400713 -0.187489 0.896815 + -1.00031 1.62638 -1.81606 -0.378879 0.0463277 0.924286 + -0.976505 1.59867 -1.82601 -0.180738 -0.434372 0.882414 + -0.904516 1.62672 -1.80212 -0.0723308 -0.33345 0.939989 + -0.837177 1.66114 -1.7921 0.00625998 -0.0740852 0.997232 + -0.997493 1.55542 -1.847 -0.275753 -0.329017 0.903166 + -0.913198 1.59822 -1.81636 -0.118441 -0.379362 0.917636 + -0.934186 1.55499 -1.83735 -0.232062 -0.309494 0.92215 + -0.819622 1.69804 -1.79435 -0.0387735 -0.0124649 0.99917 + -0.847077 1.76163 -1.79512 0.402029 0.219578 0.888908 + -0.890218 1.83336 -1.76077 0.479761 -0.214307 0.850824 + -0.909069 1.83044 -1.75378 -0.0338413 -0.37442 0.926642 + -0.783995 1.77461 -1.7851 0.238725 -0.120581 0.963572 + -0.815555 1.75729 -1.78932 -0.208152 -0.0193717 0.977905 + -0.833175 1.76433 -1.79935 -0.247763 0.510755 0.823251 + -0.855159 1.79369 -1.81726 0.695281 0.54204 0.471992 + -0.87461 1.84108 -1.77277 0.786497 -0.0558778 0.615061 + -0.75628 1.78762 -1.79999 0.66541 -0.112653 0.737929 + -0.783561 1.84073 -1.77594 0.200331 -0.173153 0.964306 + -0.800585 1.84202 -1.77801 -0.327447 -0.106802 0.938814 + -0.818206 1.84905 -1.78803 -0.57954 -0.0510728 0.813342 + -0.755847 1.85374 -1.79084 0.611386 -0.19037 0.768092 + -0.753817 1.91743 -1.77039 0.584204 -0.278586 0.762296 + -0.773635 1.91234 -1.76087 0.180416 -0.265426 0.9471 + -0.790659 1.91362 -1.76293 -0.309668 -0.191506 0.93136 + -0.725019 1.92805 -1.79507 0.842438 -0.206819 0.497519 + -0.723834 1.99148 -1.76811 0.833647 -0.213473 0.509374 + -0.745486 1.98371 -1.75005 0.581502 -0.294912 0.75821 + -0.765304 1.97862 -1.74053 0.162009 -0.305813 0.938207 + -0.775719 1.9795 -1.74215 -0.316414 -0.230686 0.920145 + -0.716527 1.93795 -1.81772 0.999876 -0.0118021 0.0103936 + -0.715341 2.00138 -1.79076 0.999976 0.00545464 -0.00425521 + -0.716837 2.05794 -1.76226 0.99738 0.0615047 0.0380841 + -0.722807 2.05105 -1.74667 0.837025 -0.159141 0.523511 + -0.744459 2.04328 -1.72861 0.580613 -0.259033 0.771875 + -0.722661 2.01034 -1.81018 0.910634 0.185386 -0.369294 + -0.724157 2.0669 -1.78166 0.905955 0.242654 -0.346937 + -0.728679 2.11732 -1.75165 0.898159 0.300915 -0.320562 + -0.723833 2.11158 -1.73951 0.990132 0.132257 0.046338 + -0.729803 2.1047 -1.72392 0.82113 -0.108661 0.560301 + -0.732204 2.0165 -1.82526 0.708452 0.339918 -0.618508 + -0.730445 2.07118 -1.79156 0.711197 0.378445 -0.592434 + -0.734966 2.1216 -1.76153 0.694493 0.435892 -0.572431 + -0.734305 2.14794 -1.73562 0.82005 0.543113 -0.180403 + -0.72946 2.1422 -1.72349 0.909871 0.37377 0.180084 + -0.740157 2.01864 -1.82947 0.348781 0.478228 -0.806008 + -0.738398 2.07332 -1.79576 0.336615 0.500332 -0.797721 + -0.739627 2.12288 -1.76388 0.331996 0.53867 -0.774347 + -0.73814 2.15072 -1.74126 0.641562 0.656093 -0.397416 + -0.756103 2.02117 -1.83105 0.063508 0.533867 -0.84318 + -0.749025 2.07478 -1.79672 0.0591768 0.53596 -0.842167 + -0.750255 2.12433 -1.76486 0.0568512 0.563051 -0.824464 + -0.742801 2.152 -1.74362 0.307206 0.74766 -0.588752 + -0.773934 2.02176 -1.82983 -0.232359 0.554955 -0.798771 + -0.766856 2.07537 -1.79551 -0.234625 0.542753 -0.806455 + -0.761515 2.12477 -1.7641 -0.227951 0.558949 -0.797254 + -0.749178 2.1527 -1.74422 0.0699498 0.767372 -0.637375 + -0.745359 2.15596 -1.73553 0.212772 0.96367 -0.161454 + -0.789008 1.96341 -1.86688 -0.258714 0.57469 -0.776401 + -0.807276 1.96045 -1.8583 -0.58624 0.522215 -0.619366 + -0.792203 2.0188 -1.82125 -0.58549 0.521059 -0.621047 + -0.779339 2.07346 -1.78972 -0.581931 0.493149 -0.646653 + -0.818952 1.90443 -1.89258 -0.611658 0.497217 -0.615345 + -0.824707 1.95308 -1.84008 -0.839777 0.421408 -0.342331 + -0.804526 2.01368 -1.80835 -0.832331 0.429817 -0.349976 + -0.791662 2.06835 -1.77682 -0.846286 0.38395 -0.3693 + -0.849933 1.84528 -1.90432 -0.442666 0.896629 0.0102066 + -0.836383 1.89708 -1.87436 -0.836863 0.412073 -0.360355 + -0.831377 1.94503 -1.82226 -0.959859 0.28037 -0.00798095 + -0.811196 2.00563 -1.79054 -0.95888 0.283788 0.00376616 + -0.796166 2.06289 -1.76471 -0.971396 0.235862 -0.0275504 + -0.828463 1.85617 -1.9411 0.457776 0.63637 0.620866 + -0.860255 1.8495 -1.91568 0.25669 0.654807 0.710871 + -0.891764 1.84878 -1.90985 -0.0265467 0.540643 0.840833 + -0.890865 1.84138 -1.89545 0.264813 0.962688 -0.0557235 + -0.868025 1.83181 -1.87504 0.480848 0.868278 0.12198 + -0.859635 1.83394 -1.87879 -0.572641 0.751897 0.326701 + -0.853887 1.91951 -1.92509 0.681865 0.0276575 0.730955 + -0.868325 1.91479 -1.91271 0.436889 -0.0447324 0.898403 + -0.899833 1.91406 -1.90688 0.0856429 -0.115061 0.98966 + -0.856237 1.99271 -1.92384 0.898733 0.0264964 0.437696 + -0.864832 1.98759 -1.91067 0.763181 -0.0754142 0.641769 + -0.879269 1.98287 -1.89829 0.472665 -0.168787 0.864927 + -0.899367 1.98098 -1.89281 0.133559 -0.226189 0.964884 + -0.857158 2.06436 -1.91706 0.995708 0.0793665 0.0476076 + -0.860908 2.05907 -1.90378 0.918178 -0.0545638 0.392392 + -0.869502 2.05395 -1.89061 0.772328 -0.142413 0.619055 + -0.880929 2.05021 -1.88067 0.495327 -0.225271 0.83899 + -0.901027 2.04832 -1.87518 0.132524 -0.270489 0.953558 + -0.861808 2.0727 -1.93566 0.931351 0.210518 -0.2971 + -0.867014 2.12826 -1.90784 0.927464 0.263012 -0.265772 + -0.863574 2.12212 -1.8939 0.991933 0.113423 0.0566146 + -0.867324 2.11682 -1.88062 0.916317 -0.0513061 0.397153 + -0.87367 2.11305 -1.87094 0.77529 -0.154392 0.612444 + -0.878996 2.13748 -1.92777 0.715735 0.41222 -0.563736 + -0.883524 2.18432 -1.89326 0.719656 0.474219 -0.50716 + -0.875746 2.17829 -1.88002 0.917037 0.323776 -0.232834 + -0.872306 2.17216 -1.86609 0.983122 0.156257 0.0951539 + -0.874821 2.1688 -1.85752 0.909935 -0.0128292 0.414553 + -0.899644 2.1887 -1.90242 0.303733 0.602417 -0.738133 + -0.899835 2.21595 -1.87905 0.29912 0.768633 -0.565447 + -0.889857 2.21324 -1.87334 0.648607 0.66545 -0.369439 + -0.882079 2.20722 -1.8601 0.845047 0.525506 -0.0986827 + -0.879976 2.2035 -1.85141 0.900993 0.392586 0.184629 + -0.916994 2.18952 -1.9036 -0.145667 0.624458 -0.767355 + -0.917186 2.21677 -1.88024 -0.148733 0.79045 -0.594195 + -0.913686 2.22178 -1.86936 -0.0757237 0.959204 -0.272385 + -0.904212 2.22133 -1.86872 0.199324 0.946208 -0.254874 + -0.894234 2.21862 -1.86301 0.491371 0.869143 -0.0560893 + -0.934578 2.18666 -1.89663 -0.60088 0.537352 -0.591773 + -0.92809 2.21496 -1.87591 -0.531203 0.721473 -0.444186 + -0.92459 2.21998 -1.86504 -0.401493 0.908865 -0.11299 + -0.91427 2.22287 -1.85953 -0.0943551 0.987527 0.126045 + -0.904796 2.22242 -1.85888 0.167034 0.975496 0.143206 + -0.938168 2.20966 -1.86371 -0.751742 0.617742 -0.23082 + -0.930047 2.21705 -1.85831 -0.508322 0.860752 0.0267324 + -0.919726 2.21994 -1.85279 -0.199258 0.93073 0.306655 + -0.900609 2.2191 -1.8516 0.24828 0.911126 0.328947 + -0.890047 2.21531 -1.85573 0.581041 0.804545 0.122876 + -0.942085 2.20654 -1.85644 -0.861492 0.507481 0.0171726 + -0.933964 2.21393 -1.85105 -0.563602 0.794978 0.224414 + -0.919546 2.21771 -1.84761 -0.154374 0.905053 0.396292 + -0.900429 2.21687 -1.84642 0.225836 0.89461 0.385579 + -0.887945 2.21159 -1.84705 0.606595 0.726205 0.323526 + -0.950847 2.17345 -1.86696 -0.952334 0.078585 0.294762 + -0.941871 2.20398 -1.85051 -0.864557 0.320035 0.387451 + -0.933822 2.2126 -1.84796 -0.559385 0.693128 0.454601 + -0.919404 2.21638 -1.84453 -0.161879 0.912198 0.376417 + -0.944789 2.16896 -1.85581 -0.837255 -0.0691901 0.542417 + -0.938143 2.20116 -1.84379 -0.771091 0.19883 0.604885 + -0.930094 2.20979 -1.84125 -0.532186 0.60023 0.597078 + -0.940668 2.11102 -1.86436 -0.628058 -0.206575 0.750247 + -0.935579 2.16434 -1.84469 -0.631606 -0.184478 0.753021 + -0.928933 2.19654 -1.83267 -0.57054 0.0866882 0.816682 + -0.925103 2.20724 -1.83516 -0.44788 0.487353 0.749593 + -0.920719 2.2149 -1.84083 -0.294218 0.865521 0.405351 + -0.924527 2.10799 -1.85717 -0.233295 -0.298719 0.925387 + -0.919437 2.16131 -1.8375 -0.219988 -0.290115 0.931364 + -0.918901 2.19468 -1.82816 -0.221872 0.0014846 0.975074 + -0.915071 2.20537 -1.83064 -0.141283 0.377201 0.915292 + -0.915728 2.21235 -1.83474 -0.144588 0.722509 0.676073 + -0.925454 2.04843 -1.87543 -0.224325 -0.259764 0.939256 + -0.9001 2.10789 -1.85691 0.138099 -0.312533 0.939815 + -0.903484 2.16126 -1.83738 0.131391 -0.302029 0.944201 + -0.902948 2.19464 -1.82803 0.135924 -0.00864692 0.990682 + -0.906382 2.20538 -1.83059 0.089429 0.38116 0.920173 + -0.885096 2.10931 -1.861 0.492325 -0.257347 0.831498 + -0.888481 2.16268 -1.84146 0.494971 -0.237133 0.835926 + -0.893706 2.19554 -1.83051 0.451474 0.0490219 0.890937 + -0.89714 2.20628 -1.83307 0.352343 0.484708 0.80057 + -0.881167 2.16503 -1.84784 0.768296 -0.127721 0.627223 + -0.886392 2.19788 -1.83688 0.715913 0.154928 0.680784 + -0.893239 2.20754 -1.8365 0.49748 0.577045 0.647713 + -0.903138 2.21362 -1.83813 0.220427 0.843785 0.489325 + -0.907039 2.21236 -1.8347 0.096214 0.748224 0.656433 + -0.882491 2.20014 -1.84284 0.835106 0.247086 0.491473 + -0.889338 2.20981 -1.84245 0.563963 0.650341 0.508924 + -0.901823 2.2151 -1.84183 0.202977 0.883083 0.423042 + -0.898077 1.8886 -1.8564 0.518111 0.556197 -0.649774 + -0.875236 1.87903 -1.83599 0.846299 0.387714 -0.365316 + -0.92575 1.94566 -1.82462 0.171458 0.593205 -0.786581 + -0.898595 1.94146 -1.81495 0.542702 0.516385 -0.662435 + -0.883017 1.93465 -1.80089 0.847656 0.360433 -0.389317 + -0.868018 1.8683 -1.81446 0.971283 0.213673 -0.104658 + -0.947222 1.9451 -1.82456 -0.227698 0.618468 -0.752098 + -0.926855 2.00147 -1.78457 0.173959 0.564206 -0.8071 + -0.904837 1.99813 -1.77673 0.537006 0.499941 -0.679473 + -0.889259 1.99131 -1.76266 0.854599 0.344783 -0.38831 + -0.875799 1.92392 -1.77936 0.98336 0.176696 -0.0422115 + -0.967479 1.93991 -1.81463 -0.59938 0.549396 -0.582158 + -0.964441 1.99668 -1.77653 -0.612914 0.458499 -0.643518 + -0.948327 2.00093 -1.78451 -0.264128 0.550108 -0.792223 + -0.929849 2.05409 -1.74962 0.168641 0.545752 -0.820801 + -0.907831 2.05075 -1.74177 0.544322 0.479941 -0.688019 + -0.979742 1.93388 -1.803 -0.82864 0.422735 -0.366948 + -0.976704 1.99065 -1.76489 -0.840179 0.333522 -0.427624 + -0.971109 2.04514 -1.73312 -0.833151 0.349815 -0.428356 + -0.961994 2.04944 -1.74159 -0.611665 0.45846 -0.644733 + -0.94588 2.05369 -1.74957 -0.258507 0.539275 -0.801471 + -0.986619 1.92615 -1.78642 -0.990239 0.0496371 0.130245 + -0.982223 1.9849 -1.75249 -0.996053 0.0474061 0.0750426 + -0.976628 2.03938 -1.72072 -0.991546 0.0751098 0.105804 + -0.967821 2.09275 -1.6951 -0.984165 0.139841 0.108922 + -0.964161 2.09645 -1.70299 -0.825811 0.386307 -0.410856 + -0.974871 1.91696 -1.76556 -0.80809 -0.248648 0.534008 + -0.970475 1.97571 -1.73163 -0.803979 -0.234041 0.546665 + -0.967581 2.03238 -1.70531 -0.80249 -0.182964 0.567921 + -0.942573 1.90333 -1.73659 -0.575579 -0.362017 0.733247 + -0.943649 1.96439 -1.70755 -0.581096 -0.3389 0.739915 + -0.940755 2.02107 -1.68121 -0.577969 -0.280643 0.766284 + -0.94082 2.07818 -1.66356 -0.583374 -0.22183 0.781324 + -0.958773 2.08575 -1.67969 -0.792195 -0.133038 0.59559 + -0.919433 1.89794 -1.72668 -0.0542489 -0.408274 0.911246 + -0.92051 1.959 -1.69764 -0.0193238 -0.407389 0.91305 + -0.923508 2.01709 -1.67346 -0.0343958 -0.340261 0.939702 + -0.900583 1.90086 -1.73367 0.534187 -0.289061 0.79441 + -0.906322 1.96132 -1.70327 0.542863 -0.31848 0.777091 + -0.90932 2.01941 -1.6791 0.551249 -0.263009 0.791802 + -0.914512 2.0758 -1.65953 0.549208 -0.200559 0.811262 + -0.923574 2.07421 -1.65581 -0.0139618 -0.270927 0.962499 + -0.887602 1.90638 -1.74452 0.78684 -0.161921 0.595537 + -0.893341 1.96685 -1.71412 0.78975 -0.200115 0.57987 + -0.899932 2.02347 -1.68723 0.788215 -0.162624 0.593524 + -0.877244 1.91512 -1.76182 0.952226 0.00601591 0.305335 + -0.885018 1.97388 -1.72792 0.953755 -0.0384077 0.298121 + -0.891609 2.03049 -1.70102 0.951921 -0.0154722 0.305951 + -0.899657 2.08452 -1.67669 0.944719 0.0220269 0.327141 + -0.905124 2.07985 -1.66766 0.786176 -0.108657 0.608376 + -0.864252 1.84981 -1.79008 0.966876 0.0489869 0.250502 + -0.883573 1.98269 -1.74545 0.987444 0.152307 -0.0419132 + -0.890487 2.03708 -1.71403 0.987584 0.1536 -0.0329262 + -0.858926 1.81218 -1.84164 0.664845 0.675499 0.318875 + -0.841258 1.79639 -1.82149 -0.61065 0.425129 0.66811 + -0.850536 1.81431 -1.84539 -0.607895 0.5645 0.558393 + -0.834888 1.8565 -1.80171 -0.826924 -0.00906901 0.562241 + -0.844166 1.87442 -1.82561 -0.962704 0.0740148 0.260237 + -0.846085 1.88573 -1.84883 -0.973236 0.229664 -0.00818601 + -0.804706 1.91816 -1.76949 -0.561861 -0.120121 0.818464 + -0.821388 1.92561 -1.78316 -0.789027 -0.0112169 0.614255 + -0.829458 1.93372 -1.79905 -0.936361 0.121828 0.32922 + -0.789766 1.98404 -1.74871 -0.561475 -0.147216 0.814293 + -0.801708 1.9894 -1.75827 -0.777055 -0.03013 0.628711 + -0.809777 1.99751 -1.77415 -0.934908 0.128643 0.330754 + -0.794748 2.05477 -1.74833 -0.945186 0.0750444 0.317791 + -0.777267 2.04384 -1.72806 -0.571272 -0.174297 0.80204 + -0.789209 2.04921 -1.73761 -0.787247 -0.069725 0.612683 + -0.779755 2.10356 -1.71724 -0.783138 -0.0685071 0.618063 + -0.785294 2.10913 -1.72796 -0.948193 0.0738797 0.308985 + -0.78617 2.11424 -1.73815 -0.973798 0.226272 -0.0227727 + -0.768143 2.0409 -1.72353 -0.332436 -0.23951 0.912207 + -0.763122 2.09719 -1.70674 -0.340436 -0.212928 0.915841 + -0.772245 2.10013 -1.71128 -0.573704 -0.159394 0.803404 + -0.766734 2.1336 -1.70203 -0.508138 0.111972 0.853966 + -0.774245 2.13703 -1.70799 -0.708054 0.190319 0.680028 + -0.757729 2.04002 -1.72191 0.178542 -0.291066 0.939895 + -0.757071 2.09656 -1.70567 0.150243 -0.246523 0.95742 + -0.75523 2.13133 -1.69808 0.152532 0.0355986 0.987657 + -0.761281 2.13195 -1.69915 -0.310536 0.0692003 0.948039 + -0.743801 2.09981 -1.71239 0.579289 -0.207903 0.788163 + -0.74713 2.13302 -1.70226 0.527554 0.0640502 0.847103 + -0.755835 2.14043 -1.70129 0.0990452 0.516459 0.850565 + -0.759235 2.14083 -1.70197 -0.171923 0.532972 0.828482 + -0.764689 2.14247 -1.70485 -0.328024 0.515329 0.79173 + -0.733132 2.13791 -1.7138 0.77269 0.169625 0.6117 + -0.739654 2.14489 -1.71206 0.539825 0.511604 0.668469 + -0.747735 2.14211 -1.70547 0.367001 0.499715 0.784598 + -0.754787 2.14898 -1.7107 0.0287611 0.813766 0.58048 + -0.735982 2.14919 -1.72174 0.660969 0.69888 0.273288 + -0.741885 2.15134 -1.71689 0.366379 0.80411 0.468159 + -0.749965 2.14857 -1.71031 0.121882 0.75127 0.648644 + -0.738873 2.15246 -1.72863 0.591972 0.802438 0.0752545 + -0.744775 2.15462 -1.72378 0.250857 0.930569 0.26667 + -0.747427 2.15531 -1.72503 0.102425 0.964875 0.241921 + -0.752249 2.15573 -1.72543 0.0567275 0.966348 0.250906 + -0.742707 2.15526 -1.73428 0.426068 0.902384 -0.0645667 + -0.751736 2.15664 -1.73613 0.064452 0.980341 -0.186489 + -0.758081 2.15687 -1.73569 -0.0867116 0.979051 -0.184228 + -0.758594 2.15595 -1.72499 0.0179766 0.970601 0.240022 + -0.760438 2.15313 -1.74346 -0.200144 0.761241 -0.616809 + -0.768046 2.15199 -1.74006 -0.515642 0.704922 -0.487029 + -0.765689 2.15572 -1.73229 -0.331076 0.93559 -0.122717 + -0.762939 2.15581 -1.72408 -0.0825165 0.974132 0.210374 + -0.758188 2.14939 -1.71139 0.0361829 0.838524 0.543662 + -0.773998 2.12286 -1.75831 -0.590362 0.494304 -0.638073 + -0.781665 2.11969 -1.75026 -0.844155 0.382533 -0.375594 + -0.775713 2.14882 -1.73203 -0.773952 0.592416 -0.2237 + -0.769972 2.15396 -1.7278 -0.517527 0.85566 0.00334636 + -0.778422 2.14553 -1.72462 -0.884606 0.458474 0.0852825 + -0.772681 2.15067 -1.72039 -0.6473 0.715473 0.262872 + -0.767222 2.15404 -1.71959 -0.264127 0.903473 0.337598 + -0.766757 2.15118 -1.71388 -0.249765 0.81174 0.527917 + -0.762532 2.14923 -1.71048 -0.0513883 0.783867 0.618798 + -0.777547 2.14042 -1.71443 -0.85531 0.30921 0.415733 + -0.772216 2.14781 -1.71469 -0.625173 0.616445 0.478701 + -0.768914 2.14442 -1.70824 -0.461629 0.545008 0.699903 + -0.896173 2.04571 -1.73124 0.852378 0.33821 -0.39883 + -0.902247 2.09678 -1.70099 0.853588 0.353568 -0.382593 + -0.898535 2.0911 -1.6897 0.982411 0.18483 -0.0265714 + -0.913905 2.10183 -1.71152 0.534685 0.493855 -0.685725 + -0.915885 2.1311 -1.69088 0.512512 0.679784 -0.524619 + -0.908567 2.12793 -1.68416 0.789026 0.558116 -0.256796 + -0.904856 2.12225 -1.67287 0.914534 0.39122 0.102834 + -0.928436 2.10401 -1.71672 0.17659 0.556279 -0.812016 + -0.930417 2.13328 -1.69608 0.143695 0.746448 -0.649743 + -0.928869 2.13787 -1.6866 0.130476 0.937204 -0.323457 + -0.920691 2.13664 -1.68365 0.369071 0.896298 -0.245837 + -0.913373 2.13348 -1.67694 0.594563 0.803065 0.0397582 + -0.944467 2.1036 -1.71668 -0.265249 0.55625 -0.787546 + -0.940495 2.13301 -1.69609 -0.238828 0.748553 -0.61857 + -0.938947 2.1376 -1.68661 -0.203807 0.950276 -0.235453 + -0.930782 2.13926 -1.67936 -0.00554265 0.994069 0.108607 + -0.922603 2.13803 -1.67642 0.21954 0.957616 0.18648 + -0.955045 2.10075 -1.71145 -0.603677 0.485447 -0.632388 + -0.951073 2.13016 -1.69085 -0.558143 0.689945 -0.460926 + -0.944925 2.13601 -1.68367 -0.388554 0.915155 -0.107322 + -0.93676 2.13768 -1.67643 -0.167905 0.95056 0.261235 + -0.920523 2.13485 -1.67008 0.222289 0.894467 0.387965 + -0.956856 2.1275 -1.68586 -0.747685 0.606096 -0.271319 + -0.950708 2.13335 -1.67869 -0.505349 0.861755 0.0447305 + -0.941192 2.13458 -1.67025 -0.18028 0.922367 0.34167 + -0.935932 2.13522 -1.67151 -0.00962236 0.895916 0.44412 + -0.960516 2.1238 -1.67797 -0.903379 0.365592 0.224163 + -0.952845 2.13125 -1.67428 -0.622023 0.705203 0.340259 + -0.943329 2.13249 -1.66584 -0.33745 0.772634 0.53774 + -0.933078 2.12816 -1.65663 -0.149264 0.699564 0.698806 + -0.928012 2.12912 -1.65881 0.066609 0.816345 0.573711 + -0.954746 2.11933 -1.66807 -0.752944 0.118138 0.647394 + -0.947075 2.12678 -1.66438 -0.588024 0.406755 0.699127 + -0.936824 2.12246 -1.65517 -0.45541 0.349474 0.818822 + -0.92593 2.12005 -1.65015 0.0135759 0.440806 0.897499 + -0.936793 2.11176 -1.65195 -0.528903 0.0184661 0.848481 + -0.925899 2.10935 -1.64693 -0.0298801 -0.00698216 0.999529 + -0.916837 2.11094 -1.65066 0.515214 0.0619137 0.854822 + -0.920864 2.121 -1.65233 0.34043 0.495817 0.79892 + -0.922753 2.12975 -1.66006 0.159706 0.786187 0.596996 + -0.919695 2.13239 -1.66517 0.249706 0.844514 0.473754 + -0.911034 2.11345 -1.65579 0.719545 0.133633 0.681467 + -0.915061 2.12352 -1.65745 0.509886 0.52847 0.678775 + -0.912004 2.12616 -1.66256 0.611037 0.59839 0.518231 + -0.911292 2.13029 -1.6706 0.652367 0.709064 0.267667 + -0.905567 2.11812 -1.66483 0.875649 0.252918 0.411426 + 1.04961 1.36119 -2.08699 -0.131768 -0.902901 -0.409154 + 1.04271 1.37679 -2.1176 -0.250658 -0.939358 -0.234046 + 1.08487 1.3765 -2.12848 0.533065 -0.771504 -0.347309 + 0.976448 1.39491 -2.1025 -0.287715 -0.931588 -0.222181 + 1.03001 1.38062 -2.12265 -0.242302 -0.967651 0.0702951 + 1.06181 1.37216 -2.13123 -0.22663 -0.973001 0.0436826 + 1.07451 1.36833 -2.12618 0.16456 -0.954374 -0.249179 + 1.09355 1.37119 -2.09712 0.46366 -0.80056 -0.379636 + 1.05697 1.33738 -2.04067 -0.0863122 -0.907604 -0.410859 + 0.995344 1.34393 -2.00981 -0.275708 -0.879949 -0.386879 + 0.983343 1.37932 -2.07189 -0.295348 -0.865756 -0.404025 + 1.1117 1.39962 -2.10918 0.894676 -0.351076 -0.276225 + 1.10092 1.34738 -2.0508 0.601411 -0.777036 -0.185796 + 1.05999 1.32342 -2.00723 0.20829 -0.974853 0.0792307 + 0.998363 1.32996 -1.97637 -0.128317 -0.9871 -0.0957466 + 0.961258 1.34933 -1.99936 -0.052712 -0.881542 -0.469153 + 1.10301 1.40494 -2.14053 0.848584 -0.463426 -0.255227 + 1.12189 1.4465 -2.09138 0.981421 -0.174417 -0.0799454 + 1.12052 1.38342 -2.03799 0.931466 -0.358136 0.0641006 + 1.10104 1.3795 -1.98664 0.776029 -0.415731 0.474285 + 1.08144 1.34347 -1.99944 0.627897 -0.648194 0.430801 + 1.08236 1.37812 -2.13585 0.564459 -0.731405 -0.382665 + 1.078 1.38547 -2.16349 0.54335 -0.80397 -0.241668 + 1.09865 1.4123 -2.16816 0.835809 -0.506503 -0.211843 + 1.1238 1.4619 -2.14593 0.95782 -0.27263 -0.0908475 + 1.072 1.36994 -2.13355 0.190886 -0.904042 -0.382455 + 1.03997 1.37308 -2.15319 0.0163271 -0.999835 0.00795208 + 1.05482 1.38207 -2.20798 0.451542 -0.858432 -0.243319 + 1.0973 1.42511 -2.21268 0.803472 -0.541293 -0.24786 + 1.12245 1.47471 -2.19044 0.935144 -0.336898 -0.10957 + 1.02978 1.37531 -2.15087 -0.183818 -0.967505 0.173624 + 1.01679 1.36969 -2.19769 -0.00580261 -0.991659 -0.128757 + 1.04752 1.38995 -2.23971 0.323173 -0.811759 -0.486421 + 1.09001 1.43298 -2.24439 0.74219 -0.521644 -0.420764 + 1.11068 1.47223 -2.24293 0.844709 -0.298068 -0.444548 + 1.01155 1.38294 -2.1313 -0.197945 -0.957816 0.208344 + 0.958305 1.38611 -2.16114 -0.236594 -0.966147 0.102877 + 0.928203 1.39501 -2.17716 -0.334852 -0.935599 -0.111925 + 0.986688 1.37858 -2.21372 -0.246594 -0.923243 -0.294642 + 1.0136 1.39205 -2.2446 -0.0996887 -0.773555 -0.62584 + 0.973508 1.39608 -2.10977 -0.238834 -0.96828 0.0734327 + 0.955048 1.39841 -2.11842 -0.172716 -0.955008 0.241098 + 0.940077 1.39375 -2.14157 -0.191601 -0.966244 0.172228 + 0.903603 1.40282 -2.17041 -0.0885365 -0.967359 -0.237438 + 0.920522 1.4091 -2.21389 -0.378917 -0.845978 -0.375157 + 0.943567 1.40308 -2.09509 -0.0862686 -0.945055 -0.315323 + 0.940627 1.40425 -2.10236 -0.0119251 -0.999809 0.0154635 + 0.930671 1.40194 -2.11612 0.0881901 -0.988164 0.125516 + 0.915701 1.39729 -2.13927 0.0471119 -0.998054 -0.0408384 + 0.949257 1.38472 -2.06144 -0.055475 -0.878471 -0.474565 + 0.941563 1.38446 -2.06353 0.387593 -0.780663 -0.490242 + 0.935873 1.40281 -2.09718 0.418348 -0.846774 -0.32857 + 0.925917 1.4005 -2.11096 0.473359 -0.856025 -0.207731 + 0.95376 1.34832 -1.99973 0.326307 -0.834517 -0.443965 + 0.926763 1.33242 -2.00984 0.502812 -0.809181 -0.303985 + 0.914566 1.36855 -2.07365 0.611121 -0.669775 -0.421821 + 0.903042 1.38081 -2.11155 0.647879 -0.671728 -0.359214 + 0.961228 1.33076 -1.96753 -0.231518 -0.965319 -0.120657 + 0.954216 1.33504 -1.9559 0.0567867 -0.973061 0.223446 + 0.922622 1.32598 -1.96426 0.265338 -0.949518 0.167367 + 0.869015 1.31044 -2.04502 0.203827 -0.946168 -0.251438 + 0.968726 1.33177 -1.96715 0.0193318 -0.990625 -0.135232 + 0.969109 1.33213 -1.96502 0.0525341 -0.955666 0.289728 + 0.962097 1.33641 -1.9534 0.105094 -0.897294 0.428742 + 0.940689 1.34888 -1.92073 0.130125 -0.851872 0.507328 + 0.909096 1.33982 -1.92908 0.149481 -0.834531 0.530296 + 0.998746 1.33032 -1.97424 -0.00829376 -0.962241 0.272072 + 0.970212 1.3437 -1.94403 0.089345 -0.898757 0.429248 + 0.948804 1.35617 -1.91136 0.175166 -0.708052 0.68409 + 0.893374 1.36083 -1.90056 0.0448855 -0.599964 0.798767 + 0.864716 1.32173 -1.94058 0.0047596 -0.896294 0.443434 + 1.02149 1.3301 -1.97289 0.187403 -0.875971 0.444471 + 0.992956 1.34349 -1.94269 0.16134 -0.821775 0.546494 + 0.960983 1.37358 -1.90222 0.191438 -0.565118 0.802492 + 0.905553 1.37825 -1.89143 0.0205218 -0.444223 0.895681 + 0.848994 1.34274 -1.91206 -0.123856 -0.657224 0.743449 + 1.04294 1.35016 -1.9651 0.438506 -0.631287 0.639679 + 1.00874 1.35683 -1.93603 0.364965 -0.651724 0.664873 + 0.976767 1.38693 -1.89556 0.215561 -0.517039 0.828374 + 0.955031 1.42883 -1.87211 0.152066 -0.332594 0.93073 + 1.04907 1.39376 -1.9313 0.520519 -0.487289 0.701148 + 1.01487 1.40043 -1.90222 0.450038 -0.412157 0.792208 + 0.993137 1.44233 -1.87877 0.29903 -0.286766 0.910135 + 1.09989 1.41162 -1.9656 0.717945 -0.359919 0.595829 + 1.04792 1.42587 -1.91027 0.446156 -0.373659 0.813218 + 1.00553 1.4729 -1.87392 0.392448 -0.225212 0.891776 + 0.921796 1.52442 -1.84221 0.0999696 -0.232572 0.967428 + 1.13071 1.43029 -2.0202 0.989073 -0.102223 0.106236 + 1.11441 1.4261 -1.97307 0.825519 -0.358387 0.435977 + 1.05085 1.45934 -1.90621 0.593301 -0.167812 0.787295 + 1.00846 1.50637 -1.86986 0.580374 -0.226143 0.782321 + 1.12231 1.48799 -1.98729 0.967294 -0.0513573 0.248405 + 1.106 1.4838 -1.94016 0.818237 -0.0995733 0.566192 + 1.06537 1.47382 -1.91368 0.574682 -0.272768 0.771582 + 1.04694 1.51267 -1.8849 0.47682 -0.326702 0.816032 + 0.997493 1.55542 -1.847 0.271337 -0.334732 0.902403 + 1.13649 1.51456 -2.04099 0.983587 -0.142519 0.110659 + 1.12764 1.56808 -1.99769 0.952457 -0.0314376 0.303048 + 1.11346 1.54151 -1.94398 0.897598 -0.00508183 0.440786 + 1.08758 1.52264 -1.91138 0.716932 -0.166609 0.676941 + 1.03598 1.56173 -1.86204 0.467024 -0.312896 0.827034 + 1.1384 1.52996 -2.09554 0.985516 -0.168419 0.0198111 + 1.14059 1.60047 -2.03354 0.976671 -0.0318639 0.212362 + 1.11401 1.61167 -1.94958 0.891091 -0.0355853 0.452428 + 1.08501 1.58649 -1.90741 0.824324 -0.00211003 0.566115 + 1.05913 1.56764 -1.87481 0.663177 -0.174442 0.727851 + 1.1412 1.532 -2.156 0.970231 -0.241954 0.0105141 + 1.14887 1.58865 -2.13019 0.997047 -0.071887 0.0270195 + 1.14607 1.58662 -2.06973 0.984424 -0.110699 0.136586 + 1.14066 1.67979 -2.04604 0.965172 0.162581 0.204963 + 1.12697 1.64406 -1.98544 0.933678 0.097892 0.344475 + 1.12601 1.49299 -2.22076 0.922224 -0.292944 -0.252363 + 1.14477 1.55028 -2.18632 0.982319 -0.180492 -0.0497236 + 1.14975 1.61081 -2.15505 0.999523 -0.0288958 0.0108836 + 1.14614 1.66593 -2.08223 0.991982 0.0749081 0.101791 + 1.14556 1.56771 -2.21169 0.899218 0.0634379 -0.432878 + 1.15054 1.62825 -2.18043 0.941677 0.144045 -0.30413 + 1.14702 1.68809 -2.10709 0.987258 0.107658 0.117178 + 1.12907 1.73891 -2.06777 0.877959 0.386478 0.282528 + 1.12418 1.7134 -2.0251 0.855721 0.369959 0.361762 + 1.13023 1.54695 -2.23386 0.737889 0.0181865 -0.674677 + 1.13472 1.63559 -2.19829 0.534063 0.397288 -0.746284 + 1.14784 1.70525 -2.13236 0.930519 0.309847 -0.195269 + 1.12989 1.75606 -2.09305 0.79998 0.599973 0.00799541 + 1.08355 1.46722 -2.27512 0.49076 -0.106603 -0.864749 + 1.0787 1.49585 -2.27286 0.228593 0.23567 -0.944566 + 1.12538 1.57558 -2.23162 0.527381 0.300771 -0.794611 + 1.06288 1.42796 -2.27657 0.387442 -0.455687 -0.801398 + 1.02895 1.43006 -2.28148 -0.0718649 -0.335529 -0.939285 + 1.03233 1.48352 -2.27793 -0.0574481 0.196585 -0.978802 + 1.09129 1.58679 -2.23392 0.0858916 0.436199 -0.895742 + 1.10063 1.64679 -2.2006 0.157825 0.492696 -0.85577 + 0.954314 1.44138 -2.26401 -0.264294 -0.290317 -0.919709 + 0.95769 1.49484 -2.26045 -0.220935 0.189697 -0.956662 + 0.983508 1.56755 -2.24452 -0.125779 0.370253 -0.920376 + 1.04491 1.57445 -2.23899 0.0250319 0.401769 -0.915399 + 0.986422 1.38955 -2.23237 -0.266731 -0.759487 -0.593324 + 0.927139 1.43888 -2.25177 -0.278707 -0.624851 -0.729304 + 0.902475 1.44951 -2.25152 -0.307582 -0.287589 -0.90702 + 0.886486 1.45631 -2.24676 -0.451423 -0.138814 -0.881446 + 0.899092 1.49376 -2.24544 -0.364987 0.230434 -0.902045 + 0.920256 1.42007 -2.23255 -0.331344 -0.728773 -0.599251 + 0.895592 1.4307 -2.23229 -0.261028 -0.749166 -0.608781 + 0.887581 1.43198 -2.23119 -0.350441 -0.71197 -0.608514 + 0.895922 1.41692 -2.20714 -0.271922 -0.878812 -0.392106 + 0.887911 1.4182 -2.20603 -0.0235074 -0.849692 -0.526755 + 0.871592 1.43878 -2.22644 -0.360939 -0.50584 -0.783485 + 0.848608 1.46705 -2.22149 -0.631461 0.0930117 -0.769809 + 0.861214 1.50451 -2.22016 -0.501608 0.260556 -0.824924 + 0.896651 1.40107 -2.16767 0.250692 -0.885279 -0.391707 + 0.87123 1.41119 -2.20415 0.132127 -0.714936 -0.686592 + 0.848054 1.43546 -2.2199 -0.426623 -0.310922 -0.849306 + 0.828642 1.45837 -2.20087 -0.697863 -0.0299321 -0.715606 + 0.908748 1.39554 -2.13654 0.451296 -0.861089 -0.234217 + 0.885873 1.37584 -2.13714 0.60735 -0.672591 -0.422785 + 0.87997 1.39407 -2.16579 0.433408 -0.748956 -0.50122 + 0.849827 1.37393 -2.17447 0.00936951 -0.75254 -0.65848 + 0.847692 1.40788 -2.19762 -0.303254 -0.567248 -0.765681 + 0.855708 1.33141 -2.11817 0.165908 -0.852228 -0.496168 + 0.85573 1.3557 -2.14582 0.178927 -0.766808 -0.616433 + 0.867232 1.31915 -2.08026 0.304715 -0.901031 -0.308695 + 0.805212 1.33538 -2.08529 -0.534241 -0.772149 -0.344053 + 0.820131 1.35095 -2.12545 -0.514085 -0.672283 -0.532684 + 0.820154 1.37524 -2.1531 -0.597739 -0.559523 -0.574145 + 0.830224 1.39283 -2.17614 -0.624861 -0.447197 -0.639971 + 0.806994 1.32668 -2.05006 -0.452102 -0.873865 -0.178784 + 0.734565 1.38336 -2.02192 -0.851573 -0.466162 -0.239826 + 0.762071 1.40805 -2.09246 -0.841218 -0.317852 -0.437405 + 0.77699 1.42361 -2.13262 -0.786059 -0.231106 -0.573325 + 0.812106 1.3154 -2.0035 -0.407687 -0.912606 0.0306993 + 0.739676 1.37208 -1.97537 -0.764618 -0.62717 0.148381 + 0.710452 1.44335 -1.94262 -0.930888 -0.275506 0.239881 + 0.710439 1.46348 -1.99338 -0.975935 -0.0621682 -0.209013 + 0.737945 1.48817 -2.06393 -0.919145 0.0581182 -0.389608 + 0.864873 1.304 -1.99944 0.0540454 -0.997151 0.0526146 + 0.811948 1.33311 -1.94464 -0.373796 -0.826429 0.42106 + 0.768371 1.36311 -1.93854 -0.56393 -0.669294 0.483765 + 0.739147 1.43438 -1.90578 -0.620506 -0.418801 0.663007 + 0.805417 1.37274 -1.90596 -0.306034 -0.517645 0.798991 + 0.797364 1.42541 -1.88466 -0.231579 -0.402922 0.885452 + 0.742741 1.5156 -1.86294 -0.617854 -0.326273 0.715403 + 0.710269 1.54832 -1.89964 -0.953683 -0.108947 0.280392 + 0.710255 1.56845 -1.95041 -0.975956 0.087641 -0.199573 + 0.897501 1.43092 -1.87013 -0.0429599 -0.343876 0.938032 + 0.864266 1.5265 -1.84023 0.0512776 -0.341215 0.938586 + 0.800958 1.50662 -1.84181 -0.11434 -0.430144 0.89549 + 0.787413 1.572 -1.81563 -0.202424 -0.344449 0.916722 + 0.743671 1.58188 -1.83554 -0.64638 -0.260911 0.71702 + 0.934186 1.55499 -1.83735 0.12861 -0.315775 0.940077 + 0.85072 1.59187 -1.81405 0.0914737 -0.395346 0.913966 + 0.842039 1.62036 -1.79979 0.0335323 -0.298541 0.953808 + 0.785535 1.61948 -1.80175 -0.237605 -0.245062 0.939941 + 0.741793 1.62937 -1.82166 -0.661079 -0.167372 0.73141 + 0.976505 1.59867 -1.82601 0.176379 -0.430619 0.885131 + 0.913198 1.59822 -1.81636 0.0915963 -0.421893 0.902007 + 0.904516 1.62672 -1.80212 0.0674758 -0.330093 0.941534 + 0.887647 1.66415 -1.79206 0.0163266 -0.114962 0.993236 + 0.837177 1.66114 -1.7921 -0.0135795 -0.0687643 0.99754 + 1.01603 1.59645 -1.83673 0.396192 -0.345262 0.85078 + 0.960783 1.62859 -1.80535 0.20275 -0.281948 0.937762 + 0.943913 1.66603 -1.7953 0.244554 -0.072172 0.966946 + 1.03918 1.60236 -1.84948 0.639783 -0.108202 0.760901 + 1.00031 1.62638 -1.81606 0.432675 -0.148971 0.889157 + 0.988692 1.68218 -1.81608 0.529352 0.130746 0.838267 + 0.914365 1.71912 -1.78871 0.175173 -0.0901935 0.980398 + 1.05772 1.62163 -1.86933 0.754501 0.0404257 0.655053 + 1.01885 1.64567 -1.83592 0.672378 0.124962 0.729584 + 1.03131 1.70976 -1.86119 0.706374 0.254549 0.660485 + 1.00313 1.75498 -1.85138 0.738261 0.158549 0.655617 + 0.959144 1.73527 -1.80948 0.549438 0.0376273 0.834686 + 1.08672 1.64681 -1.9115 0.833922 0.118009 0.539118 + 1.06147 1.67324 -1.88104 0.762678 0.199765 0.615156 + 1.08523 1.7041 -1.93404 0.82692 0.346528 0.442856 + 1.05901 1.73045 -1.90908 0.797211 0.368281 0.478356 + 1.11048 1.67767 -1.96451 0.866277 0.271214 0.419533 + 1.09218 1.73874 -1.99404 0.794826 0.475509 0.377017 + 1.06596 1.7651 -1.96907 0.7875 0.507225 0.350095 + 1.04769 1.78159 -1.95457 0.851349 0.423118 0.310122 + 1.03082 1.77568 -1.89927 0.858434 0.286772 0.425268 + 1.09708 1.76425 -2.0367 0.761803 0.548151 0.345234 + 1.06837 1.78834 -2.0124 0.769436 0.550463 0.323972 + 1.0501 1.80483 -1.99789 0.825668 0.496217 0.268407 + 1.03028 1.81533 -1.93018 0.91773 0.353515 0.181102 + 1.01341 1.80942 -1.87489 0.90755 0.0206805 0.419434 + 1.09549 1.77946 -2.06302 0.672094 0.735425 0.0862512 + 1.06679 1.80356 -2.03872 0.710694 0.694644 0.111284 + 1.03766 1.83134 -2.0135 0.796052 0.605024 -0.0157297 + 1.01403 1.8742 -1.9934 0.858363 0.456876 -0.233403 + 1.02647 1.84769 -1.9778 0.86251 0.431032 0.265119 + 1.11124 1.76217 -2.11859 0.467288 0.724432 -0.506793 + 1.07684 1.78557 -2.08856 0.512797 0.833744 -0.204717 + 1.04531 1.81879 -2.05957 0.567436 0.796265 -0.209709 + 1.01618 1.84657 -2.03436 0.58554 0.706496 -0.397501 + 0.995883 1.8882 -2.01106 0.664036 0.489033 -0.5656 + 1.13202 1.7126 -2.15023 0.51832 0.538245 -0.664558 + 1.07481 1.74248 -2.14068 0.188278 0.55397 -0.810968 + 1.04216 1.79953 -2.11292 0.33298 0.722024 -0.606469 + 1.01063 1.83274 -2.08394 0.384714 0.821899 -0.420092 + 0.978204 1.85524 -2.05445 0.38405 0.755937 -0.530155 + 1.09559 1.6929 -2.17231 0.161811 0.538864 -0.826706 + 1.03252 1.73344 -2.15652 0.10317 0.497943 -0.861051 + 0.999865 1.7905 -2.12876 0.133453 0.56295 -0.815646 + 0.972288 1.8385 -2.09677 0.188299 0.754744 -0.628415 + 1.0558 1.63596 -2.21233 0.0817682 0.450228 -0.889162 + 1.05076 1.68208 -2.18405 0.0516619 0.509271 -0.859054 + 0.980605 1.70774 -2.17046 -0.107032 0.418275 -0.901992 + 0.953246 1.792 -2.13158 -0.0773757 0.468702 -0.879961 + 0.925669 1.84 -2.09959 -0.0907293 0.658803 -0.746825 + 0.994392 1.62906 -2.21786 -0.128752 0.49772 -0.857728 + 0.998842 1.65637 -2.198 -0.141639 0.527294 -0.837794 + 0.917688 1.70239 -2.15691 -0.311428 0.330996 -0.89076 + 0.890328 1.78665 -2.11804 -0.289286 0.384223 -0.876748 + 0.870971 1.82926 -2.08941 -0.321082 0.546554 -0.773424 + 0.916339 1.61308 -2.20198 -0.392093 0.504401 -0.769313 + 0.92079 1.6404 -2.18212 -0.35224 0.456584 -0.816981 + 0.828512 1.71502 -2.10984 -0.526938 0.193591 -0.827562 + 0.810585 1.76854 -2.09241 -0.507016 0.231429 -0.830286 + 0.791228 1.81115 -2.06378 -0.527558 0.582797 -0.618086 + 0.924909 1.56648 -2.22949 -0.332458 0.377131 -0.864433 + 0.841764 1.57271 -2.17745 -0.527686 0.378091 -0.760654 + 0.831614 1.65302 -2.13505 -0.520594 0.319383 -0.791818 + 0.776665 1.70487 -2.06958 -0.815377 0.0302016 -0.578142 + 0.850334 1.5261 -2.20495 -0.490665 0.347792 -0.79893 + 0.813156 1.51146 -2.18697 -0.696756 0.253608 -0.670979 + 0.799498 1.56287 -2.14471 -0.777025 0.258523 -0.573933 + 0.789347 1.64319 -2.10231 -0.814045 0.161517 -0.557891 + 0.824036 1.48986 -2.20217 -0.588341 0.0462795 -0.807288 + 0.805101 1.4887 -2.1814 -0.831474 -0.0140934 -0.555385 + 0.791442 1.54012 -2.13914 -0.864894 0.196373 -0.461948 + 0.772155 1.63086 -2.05582 -0.87607 0.108306 -0.469863 + 0.759473 1.69255 -2.0231 -0.920174 -0.0291921 -0.39042 + 0.809707 1.45721 -2.1801 -0.819657 -0.154198 -0.551712 + 0.782071 1.50568 -2.13663 -0.831698 0.136923 -0.538081 + 0.762784 1.59643 -2.05332 -0.880222 0.198039 -0.431266 + 0.828088 1.42677 -2.19929 -0.716303 -0.313041 -0.623631 + 0.799637 1.43961 -2.15706 -0.77218 -0.162138 -0.614368 + 0.759425 1.48967 -2.11219 -0.851914 0.0911327 -0.515691 + 0.741304 1.59492 -2.00506 -0.900082 0.175812 -0.398675 + 0.739236 1.6697 -1.97481 -0.907583 0.0297168 -0.41882 + 0.749453 1.73526 -2.01205 -0.93301 -0.0940985 -0.34733 + 0.758738 1.75839 -2.05214 -0.818666 0.0477827 -0.572279 + 0.708187 1.64323 -1.92017 -0.978804 0.0175715 -0.204042 + 0.705916 1.68333 -1.91339 -0.980359 -0.00673064 -0.197104 + 0.729217 1.71242 -1.96378 -0.913426 -0.00944856 -0.406895 + 0.727109 1.75134 -1.95088 -0.94254 0.10088 -0.318499 + 0.739652 1.76789 -1.98901 -0.963745 0.00697495 -0.266732 + 0.711199 1.61461 -1.87225 -0.941705 -0.118846 0.314748 + 0.708928 1.65471 -1.86548 -0.946007 -0.052359 0.319889 + 0.711709 1.70214 -1.8583 -0.917127 0.0404303 0.396538 + 0.703809 1.72224 -1.90049 -0.994198 0.0904608 -0.0582032 + 0.744575 1.67681 -1.81449 -0.666117 -0.0195497 0.745591 + 0.751963 1.73191 -1.81056 -0.668395 -0.0232224 0.743444 + 0.721226 1.75027 -1.85204 -0.902406 0.0478873 0.428218 + 0.713326 1.77037 -1.89423 -0.990421 0.124422 -0.0598802 + 0.780673 1.66025 -1.79405 -0.271075 -0.10147 0.957195 + 0.788062 1.71535 -1.79012 -0.200506 -0.0641711 0.977588 + 0.783995 1.77461 -1.7851 -0.236756 -0.118803 0.964278 + 0.75628 1.78762 -1.79999 -0.674165 -0.0951991 0.73242 + 0.819622 1.69804 -1.79435 0.0485028 0.00473611 0.998812 + 0.815555 1.75729 -1.78932 0.309013 -0.0623261 0.949013 + 0.800585 1.84202 -1.77801 0.32229 -0.117136 0.939366 + 0.783561 1.84073 -1.77594 -0.198504 -0.174913 0.964366 + 0.755847 1.85374 -1.79084 -0.630083 -0.210916 0.747335 + 0.870092 1.70105 -1.79431 -0.0810427 -0.0310603 0.996226 + 0.833175 1.76433 -1.79935 0.249001 0.177868 0.95203 + 0.818206 1.84905 -1.78803 0.614126 -0.0835115 0.784777 + 0.804706 1.91816 -1.76949 0.563755 -0.114943 0.817905 + 0.790659 1.91362 -1.76293 0.305111 -0.187189 0.933739 + 0.906958 1.77198 -1.77752 0.215707 -0.280146 0.935408 + 0.862685 1.75391 -1.78312 -0.354468 -0.168924 0.919683 + 0.847077 1.76163 -1.79512 -0.356989 0.598706 0.717015 + 0.855159 1.79369 -1.81726 -0.736962 0.546199 0.398187 + 0.841258 1.79639 -1.82149 0.550371 0.433013 0.713856 + 0.94324 1.78657 -1.79155 0.579369 -0.218619 0.785198 + 0.909069 1.83044 -1.75378 0.0654777 -0.338629 0.938639 + 0.890218 1.83336 -1.76077 -0.505792 -0.156398 0.84836 + 0.87461 1.84108 -1.77277 -0.753847 -0.0273371 0.656481 + 0.864252 1.84981 -1.79008 -0.96432 0.122361 0.234765 + 0.987221 1.80629 -1.83345 0.787426 -0.129193 0.602719 + 0.977649 1.85867 -1.79678 0.77756 -0.252236 0.576001 + 0.94535 1.84504 -1.7678 0.594435 -0.340595 0.728452 + 0.942573 1.90333 -1.73659 0.577675 -0.358421 0.733366 + 0.919433 1.89794 -1.72668 0.0523185 -0.405825 0.912452 + 1.00384 1.8618 -1.83821 0.936587 -0.00700767 0.350366 + 0.986619 1.92615 -1.78642 0.989079 0.060796 0.134264 + 0.974871 1.91696 -1.76556 0.807561 -0.248096 0.535064 + 1.02479 1.83536 -1.92346 0.800739 0.551633 -0.233494 + 0.998351 1.88183 -1.83149 0.930695 0.362723 -0.0473265 + 1.01408 1.83106 -1.94101 0.502432 0.86199 0.0673412 + 0.991474 1.88956 -1.84808 0.718025 0.624288 -0.307741 + 0.979742 1.93388 -1.803 0.830766 0.42629 -0.357918 + 1.01479 1.84131 -1.96075 0.549778 0.561393 0.618532 + 0.972088 1.84258 -1.91983 0.128016 0.976777 -0.171811 + 0.980764 1.88526 -1.86563 0.414956 0.735274 -0.535895 + 0.967479 1.93991 -1.81463 0.59376 0.557094 -0.580599 + 0.976704 1.99065 -1.76489 0.840678 0.332292 -0.427601 + 0.981995 1.92345 -1.94256 0.777505 0.0759679 0.624272 + 0.964709 1.91481 -1.92212 0.564554 -0.0897525 0.820502 + 0.972792 1.85284 -1.93957 0.443915 0.344486 0.827205 + 0.993675 1.92983 -1.9596 0.906861 0.197278 0.372404 + 0.967909 1.99389 -1.92317 0.830085 -0.0334193 0.556634 + 0.950622 1.98525 -1.90273 0.608777 -0.137099 0.781405 + 0.929628 1.91428 -1.90729 0.198376 -0.21833 0.955499 + 0.937711 1.85232 -1.92473 0.283853 0.429933 0.857079 + 0.993954 1.93544 -1.97227 0.919246 0.34275 -0.193675 + 0.976243 2.00544 -1.95092 0.96373 0.224933 -0.143631 + 0.975963 1.99982 -1.93825 0.953762 0.0821907 0.289106 + 0.96098 2.05958 -1.90185 0.84267 -0.0909533 0.530693 + 0.975807 1.94944 -1.98993 0.778914 0.357394 -0.515327 + 0.967668 2.01288 -1.9665 0.837103 0.28847 -0.464805 + 0.969269 2.06972 -1.92641 0.970206 0.185074 -0.156359 + 0.969034 2.06551 -1.91693 0.965329 0.022023 0.260104 + 0.956808 1.9592 -2.01208 0.564425 0.333935 -0.754925 + 0.948669 2.02264 -1.98866 0.600319 0.349677 -0.719266 + 0.945246 2.08526 -1.96032 0.608493 0.386501 -0.693075 + 0.960694 2.07717 -1.94198 0.843505 0.293524 -0.449826 + 0.957905 1.89687 -2.03116 0.416051 0.439163 -0.796265 + 0.926026 1.90248 -2.04141 0.186541 0.442705 -0.877049 + 0.924929 1.9648 -2.02233 0.131254 0.330282 -0.934712 + 0.925222 2.02636 -1.99782 0.158286 0.393945 -0.905402 + 0.939863 1.861 -2.06729 0.172178 0.727475 -0.66418 + 0.889381 1.90294 -2.04387 -0.129103 0.42459 -0.896134 + 0.892353 1.96327 -2.02012 -0.187615 0.373806 -0.908333 + 0.892646 2.02482 -1.99562 -0.314878 0.374548 -0.872104 + 0.903219 1.86146 -2.06977 -0.122963 0.636648 -0.761288 + 0.85084 1.88291 -2.04043 -0.376885 0.418507 -0.826323 + 0.853812 1.94323 -2.01666 -0.459155 0.420616 -0.78247 + 0.87111 2.01902 -1.98352 -0.695745 0.350758 -0.626823 + 0.895326 2.08771 -1.96769 -0.30918 0.433095 -0.846662 + 0.848521 1.85072 -2.05959 -0.405127 0.522966 -0.749919 + 0.788611 1.85201 -2.0186 -0.64903 0.450425 -0.613088 + 0.784655 1.86838 -2.00259 -0.876543 0.418205 -0.23828 + 0.849856 1.95961 -2.00064 -0.754811 0.451659 -0.475673 + 0.786292 1.81982 -2.03777 -0.580243 0.61506 -0.533873 + 0.744001 1.79968 -2.00307 -0.912313 0.24411 -0.328778 + 0.743814 1.83743 -1.97241 -0.794396 0.460891 -0.395619 + 0.761862 1.84348 -1.975 -0.25849 0.922216 -0.287577 + 0.778005 1.84923 -1.98921 -0.610409 0.790295 0.0532384 + 0.748937 1.79101 -2.02909 -0.846565 0.317533 -0.427201 + 0.736555 1.80077 -1.96229 -0.965925 0.131235 -0.223082 + 0.736368 1.83852 -1.93163 -0.9573 0.158464 -0.241797 + 0.724012 1.78422 -1.92417 -0.953863 0.142895 -0.264056 + 0.726314 1.83497 -1.90204 -0.947127 0.159876 -0.27819 + 0.736551 1.89566 -1.90307 -0.792095 0.360144 -0.492831 + 0.749461 1.89927 -1.91012 -0.414055 0.60128 -0.683389 + 0.76751 1.90531 -1.91271 -0.0971631 0.622788 -0.776334 + 0.715627 1.82111 -1.87211 -0.998546 0.0534961 -0.00655442 + 0.717133 1.8795 -1.84616 -0.999897 0.0132344 -0.00559226 + 0.726497 1.89212 -1.87348 -0.948664 0.136484 -0.285321 + 0.725891 1.95057 -1.84504 -0.917238 0.176364 -0.35717 + 0.735433 1.95672 -1.86013 -0.714273 0.360113 -0.600111 + 0.725543 1.80598 -1.84147 -0.894003 -0.068371 0.442813 + 0.727049 1.86436 -1.81551 -0.846168 -0.192158 0.497066 + 0.725019 1.92805 -1.79507 -0.844133 -0.209695 0.493424 + 0.716527 1.93795 -1.81772 -0.999717 -0.0202522 0.0124381 + 0.753817 1.91743 -1.77039 -0.580353 -0.285006 0.762864 + 0.745486 1.98371 -1.75005 -0.58294 -0.296831 0.756355 + 0.723834 1.99148 -1.76811 -0.833189 -0.214658 0.509626 + 0.715341 2.00138 -1.79076 -0.999973 0.00719864 -0.00103465 + 0.773635 1.91234 -1.76087 -0.187794 -0.274986 0.94293 + 0.765304 1.97862 -1.74053 -0.161586 -0.306435 0.938076 + 0.757729 2.04002 -1.72191 -0.177307 -0.289303 0.940673 + 0.744459 2.04328 -1.72861 -0.581416 -0.257542 0.771769 + 0.722807 2.05105 -1.74667 -0.837077 -0.159195 0.523411 + 0.775719 1.9795 -1.74215 0.316008 -0.231557 0.920065 + 0.768143 2.0409 -1.72353 0.331014 -0.238025 0.913112 + 0.763122 2.09719 -1.70674 0.339834 -0.214049 0.915804 + 0.757071 2.09656 -1.70567 -0.149467 -0.247627 0.957257 + 0.743801 2.09981 -1.71239 -0.579808 -0.208486 0.787627 + 0.789766 1.98404 -1.74871 0.561519 -0.147349 0.814238 + 0.777267 2.04384 -1.72806 0.571743 -0.172917 0.802004 + 0.772245 2.10013 -1.71128 0.573608 -0.159297 0.803491 + 0.761281 2.13195 -1.69915 0.309632 0.0701278 0.948267 + 0.75523 2.13133 -1.69808 -0.151824 0.0365892 0.98773 + 0.801708 1.9894 -1.75827 0.777185 -0.029527 0.628579 + 0.789209 2.04921 -1.73761 0.787039 -0.0694886 0.612977 + 0.779755 2.10356 -1.71724 0.783201 -0.0682216 0.618015 + 0.766734 2.1336 -1.70203 0.508286 0.112287 0.853837 + 0.759235 2.14083 -1.70197 0.177648 0.542294 0.821193 + 0.821388 1.92561 -1.78316 0.78452 -0.00693025 0.620065 + 0.829458 1.93372 -1.79905 0.936034 0.129826 0.327087 + 0.809777 1.99751 -1.77415 0.934855 0.128683 0.330889 + 0.794748 2.05477 -1.74833 0.945182 0.075546 0.317685 + 0.834888 1.8565 -1.80171 0.816972 -0.0563333 0.573919 + 0.844166 1.87442 -1.82561 0.957298 0.0828217 0.276984 + 0.831377 1.94503 -1.82226 0.959814 0.280534 -0.0075723 + 0.811196 2.00563 -1.79054 0.958774 0.284147 0.0036961 + 0.796166 2.06289 -1.76471 0.971383 0.235931 -0.027415 + 0.850536 1.81431 -1.84539 0.611634 0.551724 0.567013 + 0.859635 1.83394 -1.87879 0.567337 0.754982 0.328832 + 0.846085 1.88573 -1.84883 0.967324 0.253153 -0.01407 + 0.824707 1.95308 -1.84008 0.83936 0.422156 -0.34243 + 0.858926 1.81218 -1.84164 -0.660746 0.680623 0.316491 + 0.868025 1.83181 -1.87504 -0.478892 0.86608 0.143415 + 0.890865 1.84138 -1.89545 -0.279342 0.95786 -0.0668777 + 0.860255 1.8495 -1.91568 -0.240463 0.636096 0.733185 + 0.849933 1.84528 -1.90432 0.446095 0.89494 0.00901771 + 0.868018 1.8683 -1.81446 -0.971487 0.2145 -0.10101 + 0.875236 1.87903 -1.83599 -0.851069 0.377747 -0.364676 + 0.898077 1.8886 -1.8564 -0.523654 0.560859 -0.641267 + 0.877244 1.91512 -1.76182 -0.957147 -0.00180678 0.289598 + 0.875799 1.92392 -1.77936 -0.98671 0.157721 -0.0390768 + 0.883017 1.93465 -1.80089 -0.847461 0.360132 -0.390018 + 0.898595 1.94146 -1.81495 -0.543497 0.515266 -0.662655 + 0.925232 1.8928 -1.86607 -0.25583 0.616446 -0.744678 + 0.887602 1.90638 -1.74452 -0.786311 -0.163794 0.595724 + 0.893341 1.96685 -1.71412 -0.790203 -0.200638 0.579071 + 0.885018 1.97388 -1.72792 -0.953747 -0.0384268 0.298145 + 0.883573 1.98269 -1.74545 -0.987445 0.152247 -0.0421075 + 0.900583 1.90086 -1.73367 -0.53599 -0.290869 0.792534 + 0.906322 1.96132 -1.70327 -0.543394 -0.31746 0.777137 + 0.90932 2.01941 -1.6791 -0.550898 -0.262686 0.792153 + 0.899932 2.02347 -1.68723 -0.788573 -0.16142 0.593377 + 0.891609 2.03049 -1.70102 -0.951993 -0.0156148 0.305721 + 0.92051 1.959 -1.69764 0.0210432 -0.40515 0.914008 + 0.923508 2.01709 -1.67346 0.0357212 -0.342055 0.939001 + 0.923574 2.07421 -1.65581 0.0142829 -0.270472 0.962622 + 0.914512 2.0758 -1.65953 -0.549411 -0.200134 0.81123 + 0.905124 2.07985 -1.66766 -0.786453 -0.108989 0.607959 + 0.943649 1.96439 -1.70755 0.580547 -0.338264 0.740637 + 0.940755 2.02107 -1.68121 0.577304 -0.281991 0.76629 + 0.94082 2.07818 -1.66356 0.583681 -0.222137 0.781007 + 0.925899 2.10935 -1.64693 0.029823 -0.00713463 0.99953 + 0.916837 2.11094 -1.65066 -0.515326 0.0618104 0.854763 + 0.970475 1.97571 -1.73163 0.803525 -0.235237 0.546819 + 0.967581 2.03238 -1.70531 0.801857 -0.182254 0.569042 + 0.958773 2.08575 -1.67969 0.792263 -0.132821 0.595549 + 0.954746 2.11933 -1.66807 0.753159 0.117968 0.647174 + 0.936793 2.11176 -1.65195 0.529231 0.0192267 0.84826 + 0.982223 1.9849 -1.75249 0.996304 0.0460889 0.0724849 + 0.976628 2.03938 -1.72072 0.9914 0.0774988 0.105446 + 0.967821 2.09275 -1.6951 0.984288 0.139482 0.108269 + 0.960516 2.1238 -1.67797 0.903246 0.36591 0.224178 + 0.971109 2.04514 -1.73312 0.833021 0.349648 -0.428745 + 0.964161 2.09645 -1.70299 0.825535 0.386871 -0.41088 + 0.956856 2.1275 -1.68586 0.747496 0.605392 -0.273407 + 0.950708 2.13335 -1.67869 0.498957 0.865425 0.045627 + 0.952845 2.13125 -1.67428 0.622953 0.705195 0.33857 + 0.961994 2.04944 -1.74159 0.612238 0.457524 -0.644854 + 0.955045 2.10075 -1.71145 0.604372 0.486384 -0.631003 + 0.951073 2.13016 -1.69085 0.559774 0.688294 -0.461416 + 0.944925 2.13601 -1.68367 0.388572 0.916539 -0.094704 + 0.941192 2.13458 -1.67025 0.182079 0.925098 0.333228 + 0.964441 1.99668 -1.77653 0.613458 0.459099 -0.642572 + 0.94588 2.05369 -1.74957 0.258464 0.539225 -0.801519 + 0.944467 2.1036 -1.71668 0.265112 0.556414 -0.787476 + 0.940495 2.13301 -1.69609 0.238927 0.748629 -0.61844 + 0.938947 2.1376 -1.68661 0.204473 0.950056 -0.235765 + 0.948327 2.00093 -1.78451 0.263794 0.550583 -0.792004 + 0.926855 2.00147 -1.78457 -0.173881 0.56434 -0.807022 + 0.929849 2.05409 -1.74962 -0.168649 0.54576 -0.820795 + 0.928436 2.10401 -1.71672 -0.176536 0.556341 -0.811985 + 0.930417 2.13328 -1.69608 -0.143699 0.746423 -0.649771 + 0.947222 1.9451 -1.82456 0.241432 0.632124 -0.736295 + 0.92575 1.94566 -1.82462 -0.184273 0.60462 -0.774905 + 0.904837 1.99813 -1.77673 -0.537046 0.499979 -0.679414 + 0.907831 2.05075 -1.74177 -0.544256 0.480037 -0.688004 + 0.913905 2.10183 -1.71152 -0.534856 0.494059 -0.685445 + 0.960507 1.89046 -1.87556 0.165345 0.686349 -0.708227 + 0.936812 1.84492 -1.91034 -0.0543891 0.98242 -0.178588 + 0.891764 1.84878 -1.90985 0.0324371 0.55205 0.83318 + 0.899833 1.91406 -1.90688 -0.0479227 -0.162398 0.985561 + 0.868325 1.91479 -1.91271 -0.443809 -0.0519622 0.894614 + 0.853887 1.91951 -1.92509 -0.676503 0.0106423 0.736363 + 0.828463 1.85617 -1.9411 -0.456195 0.637005 0.621378 + 0.929162 1.98119 -1.89321 0.230535 -0.217435 0.94846 + 0.899367 1.98098 -1.89281 -0.126952 -0.218565 0.967529 + 0.879269 1.98287 -1.89829 -0.478062 -0.15888 0.863837 + 0.864832 1.98759 -1.91067 -0.75344 -0.0640075 0.654394 + 0.832983 1.92248 -1.94618 -0.810904 0.1688 0.560304 + 0.925454 2.04843 -1.87543 0.224618 -0.259326 0.939306 + 0.901027 2.04832 -1.87518 -0.132784 -0.270145 0.953619 + 0.880929 2.05021 -1.88067 -0.495057 -0.224936 0.839239 + 0.946914 2.05248 -1.88496 0.630728 -0.180969 0.754608 + 0.940668 2.11102 -1.86436 0.628021 -0.206684 0.750247 + 0.924527 2.10799 -1.85717 0.233477 -0.298934 0.925271 + 0.9001 2.10789 -1.85691 -0.138219 -0.312687 0.939746 + 0.954734 2.11813 -1.88125 0.843894 -0.0968828 0.527689 + 0.944789 2.16896 -1.85581 0.837255 -0.0691901 0.542417 + 0.935579 2.16434 -1.84469 0.631484 -0.184358 0.753153 + 0.919437 2.16131 -1.8375 0.220317 -0.289643 0.931433 + 0.960792 2.12263 -1.8924 0.961567 0.0367741 0.272098 + 0.950847 2.17345 -1.86696 0.952334 0.078585 0.294762 + 0.941871 2.20398 -1.85051 0.864669 0.319585 0.387574 + 0.938143 2.20116 -1.84379 0.770907 0.198926 0.605087 + 0.928933 2.19654 -1.83267 0.570529 0.0865833 0.816701 + 0.961027 2.12683 -1.90189 0.961423 0.236467 -0.140529 + 0.951062 2.17602 -1.8729 0.952518 0.289049 -0.0957081 + 0.942085 2.20654 -1.85644 0.861593 0.507321 0.0168428 + 0.933964 2.21393 -1.85105 0.553784 0.802768 0.221106 + 0.933822 2.2126 -1.84796 0.568285 0.691198 0.446428 + 0.954621 2.13217 -1.91341 0.83602 0.359056 -0.414908 + 0.944656 2.18136 -1.88442 0.823919 0.424527 -0.375412 + 0.938168 2.20966 -1.86371 0.752221 0.617217 -0.230665 + 0.930047 2.21705 -1.85831 0.501655 0.863752 0.0476899 + 0.919546 2.21771 -1.84761 0.17016 0.908978 0.380533 + 0.939173 2.14027 -1.93175 0.596336 0.471743 -0.649493 + 0.934578 2.18666 -1.89663 0.600289 0.538164 -0.591635 + 0.92809 2.21496 -1.87591 0.530881 0.721187 -0.445033 + 0.92459 2.21998 -1.86504 0.399588 0.909732 -0.112772 + 0.919726 2.21994 -1.85279 0.230901 0.918102 0.322139 + 0.921589 2.14313 -1.93873 0.160283 0.547275 -0.821462 + 0.916994 2.18952 -1.9036 0.145744 0.624578 -0.767242 + 0.917186 2.21677 -1.88024 0.148921 0.790319 -0.594321 + 0.913686 2.22178 -1.86936 0.0757486 0.95921 -0.272357 + 0.91427 2.22287 -1.85953 0.0940792 0.987495 0.1265 + 0.921799 2.08898 -1.96949 0.152714 0.451574 -0.879067 + 0.895116 2.14186 -1.93694 -0.317397 0.524734 -0.789881 + 0.899644 2.1887 -1.90242 -0.303831 0.602517 -0.73801 + 0.899835 2.21595 -1.87905 -0.299331 0.768468 -0.56556 + 0.904212 2.22133 -1.86872 -0.199345 0.946212 -0.254843 + 0.878996 2.13748 -1.92777 -0.715695 0.412176 -0.563818 + 0.883524 2.18432 -1.89326 -0.720061 0.473578 -0.507184 + 0.889857 2.21324 -1.87334 -0.648738 0.665584 -0.368968 + 0.894234 2.21862 -1.86301 -0.493346 0.868025 -0.0560627 + 0.904796 2.22242 -1.85888 -0.166693 0.975492 0.143627 + 0.873791 2.08192 -1.9556 -0.726092 0.332862 -0.601659 + 0.867014 2.12826 -1.90784 -0.927344 0.263403 -0.265803 + 0.875746 2.17829 -1.88002 -0.916976 0.323491 -0.233472 + 0.882079 2.20722 -1.8601 -0.844685 0.526049 -0.098896 + 0.890047 2.21531 -1.85573 -0.58156 0.804469 0.120906 + 0.861808 2.0727 -1.93566 -0.931239 0.210147 -0.29771 + 0.863574 2.12212 -1.8939 -0.991948 0.11335 0.056486 + 0.872306 2.17216 -1.86609 -0.983111 0.156341 0.0951378 + 0.879976 2.2035 -1.85141 -0.900921 0.392675 0.184789 + 0.887945 2.21159 -1.84705 -0.607071 0.725596 0.323999 + 0.856278 2.00783 -1.95922 -0.92024 0.289877 -0.262926 + 0.851627 1.99948 -1.94063 -0.979133 0.181526 0.0913567 + 0.857158 2.06436 -1.91706 -0.995731 0.0790079 0.0477189 + 0.860908 2.05907 -1.90378 -0.918356 -0.0549317 0.391925 + 0.867324 2.11682 -1.88062 -0.916341 -0.0511572 0.397118 + 0.835023 1.94841 -1.97634 -0.889433 0.443063 -0.112271 + 0.828373 1.92925 -1.96297 -0.891338 0.365361 0.268382 + 0.856237 1.99271 -1.92384 -0.900809 0.0466987 0.431696 + 0.869502 2.05395 -1.89061 -0.772457 -0.142099 0.618966 + 0.87367 2.11305 -1.87094 -0.775228 -0.154306 0.612545 + 0.874821 2.1688 -1.85752 -0.909935 -0.0128292 0.414553 + 0.807559 1.85914 -1.96219 -0.577743 0.604271 0.548698 + 0.818141 1.85194 -1.92974 0.302951 0.921965 -0.241248 + 0.836383 1.89708 -1.87436 0.831891 0.401223 -0.383376 + 0.791416 1.85339 -1.94798 0.123175 0.915019 -0.384146 + 0.818952 1.90443 -1.89258 0.632706 0.468125 -0.61688 + 0.807276 1.96045 -1.8583 0.58967 0.526938 -0.612067 + 0.792228 1.90588 -1.91082 0.284287 0.566471 -0.773493 + 0.789008 1.96341 -1.86688 0.25191 0.581649 -0.773451 + 0.792203 2.0188 -1.82125 0.585316 0.521297 -0.62101 + 0.804526 2.01368 -1.80835 0.832291 0.42969 -0.350226 + 0.76429 1.96284 -1.86876 -0.0581199 0.570618 -0.819156 + 0.756103 2.02117 -1.83105 -0.0623032 0.532735 -0.843986 + 0.773934 2.02176 -1.82983 0.232007 0.554454 -0.799221 + 0.766856 2.07537 -1.79551 0.234987 0.542396 -0.80659 + 0.779339 2.07346 -1.78972 0.581655 0.492699 -0.647245 + 0.748343 1.96032 -1.86717 -0.351489 0.51174 -0.783949 + 0.740157 2.01864 -1.82947 -0.34869 0.478313 -0.805998 + 0.738398 2.07332 -1.79576 -0.3372 0.500836 -0.797157 + 0.749025 2.07478 -1.79672 -0.0584302 0.537012 -0.841548 + 0.732204 2.0165 -1.82526 -0.708769 0.340289 -0.61794 + 0.730445 2.07118 -1.79156 -0.711328 0.378164 -0.592456 + 0.734966 2.1216 -1.76153 -0.69487 0.436483 -0.571522 + 0.739627 2.12288 -1.76388 -0.33169 0.539084 -0.774189 + 0.750255 2.12433 -1.76486 -0.0566549 0.562851 -0.824615 + 0.722661 2.01034 -1.81018 -0.909772 0.188637 -0.369772 + 0.724157 2.0669 -1.78166 -0.905764 0.242222 -0.347735 + 0.728679 2.11732 -1.75165 -0.897377 0.302976 -0.320811 + 0.73814 2.15072 -1.74126 -0.643105 0.654374 -0.397757 + 0.742801 2.152 -1.74362 -0.30661 0.74703 -0.589861 + 0.716837 2.05794 -1.76226 -0.997465 0.0599044 0.0384125 + 0.723833 2.11158 -1.73951 -0.989987 0.132896 0.0475782 + 0.72946 2.1422 -1.72349 -0.910106 0.37306 0.18037 + 0.734305 2.14794 -1.73562 -0.819941 0.542475 -0.182804 + 0.742707 2.15526 -1.73428 -0.426477 0.902393 -0.0616823 + 0.729803 2.1047 -1.72392 -0.820825 -0.109767 0.560533 + 0.733132 2.13791 -1.7138 -0.772121 0.169991 0.612318 + 0.735982 2.14919 -1.72174 -0.659354 0.699094 0.276622 + 0.738873 2.15246 -1.72863 -0.589454 0.80434 0.0747119 + 0.74713 2.13302 -1.70226 -0.527838 0.0644643 0.846895 + 0.747735 2.14211 -1.70547 -0.393081 0.478583 0.78514 + 0.739654 2.14489 -1.71206 -0.539771 0.510412 0.669423 + 0.741885 2.15134 -1.71689 -0.36697 0.80375 0.468315 + 0.744775 2.15462 -1.72378 -0.252655 0.930683 0.264564 + 0.755835 2.14043 -1.70129 -0.0906096 0.506884 0.857238 + 0.749965 2.14857 -1.71031 -0.15674 0.777761 0.608704 + 0.747427 2.15531 -1.72503 -0.100544 0.965803 0.238989 + 0.745359 2.15596 -1.73553 -0.209376 0.964792 -0.159177 + 0.749178 2.1527 -1.74422 -0.0701187 0.767268 -0.637482 + 0.754787 2.14898 -1.7107 -0.00569586 0.830362 0.557195 + 0.752249 2.15573 -1.72543 -0.0574738 0.966419 0.250462 + 0.751736 2.15664 -1.73613 -0.0661334 0.980626 -0.184387 + 0.760438 2.15313 -1.74346 0.20133 0.760372 -0.617495 + 0.761515 2.12477 -1.7641 0.228157 0.559199 -0.79702 + 0.758188 2.14939 -1.71139 -0.0235534 0.830253 0.556888 + 0.758594 2.15595 -1.72499 -0.0195186 0.970111 0.241873 + 0.758081 2.15687 -1.73569 0.0870593 0.979106 -0.183771 + 0.768046 2.15199 -1.74006 0.515266 0.704438 -0.488126 + 0.773998 2.12286 -1.75831 0.589916 0.494925 -0.638003 + 0.764689 2.14247 -1.70485 0.298738 0.537768 0.788392 + 0.762532 2.14923 -1.71048 0.0175476 0.755446 0.654976 + 0.762939 2.15581 -1.72408 0.0822876 0.974278 0.209788 + 0.765689 2.15572 -1.73229 0.331157 0.93556 -0.12273 + 0.768914 2.14442 -1.70824 0.461596 0.544316 0.700464 + 0.766757 2.15118 -1.71388 0.255066 0.808469 0.530396 + 0.767222 2.15404 -1.71959 0.269103 0.903174 0.334457 + 0.769972 2.15396 -1.7278 0.517533 0.855657 0.00326413 + 0.775713 2.14882 -1.73203 0.773721 0.592705 -0.223731 + 0.774245 2.13703 -1.70799 0.707927 0.19039 0.68014 + 0.777547 2.14042 -1.71443 0.855317 0.309276 0.415669 + 0.772216 2.14781 -1.71469 0.625895 0.616268 0.477985 + 0.772681 2.15067 -1.72039 0.647825 0.714857 0.263253 + 0.785294 2.10913 -1.72796 0.948142 0.0739607 0.309122 + 0.78617 2.11424 -1.73815 0.973838 0.226102 -0.0227383 + 0.778422 2.14553 -1.72462 0.884421 0.458702 0.0859739 + 0.791662 2.06835 -1.77682 0.846224 0.384069 -0.369317 + 0.781665 2.11969 -1.75026 0.844128 0.382453 -0.375736 + 0.885096 2.10931 -1.861 -0.492323 -0.25735 0.831498 + 0.881167 2.16503 -1.84784 -0.768296 -0.127721 0.627223 + 0.882491 2.20014 -1.84284 -0.83509 0.247449 0.491319 + 0.888481 2.16268 -1.84146 -0.49489 -0.237045 0.835998 + 0.886392 2.19788 -1.83688 -0.716074 0.154806 0.680641 + 0.889338 2.20981 -1.84245 -0.564553 0.650166 0.508492 + 0.900429 2.21687 -1.84642 -0.227003 0.894601 0.384914 + 0.903484 2.16126 -1.83738 -0.131675 -0.301653 0.944281 + 0.902948 2.19464 -1.82803 -0.136214 -0.00892645 0.990639 + 0.893706 2.19554 -1.83051 -0.451247 0.0485204 0.891079 + 0.89714 2.20628 -1.83307 -0.35182 0.48497 0.800642 + 0.893239 2.20754 -1.8365 -0.497469 0.577537 0.647283 + 0.918901 2.19468 -1.82816 0.222272 0.00112368 0.974984 + 0.915071 2.20537 -1.83064 0.14154 0.377498 0.915129 + 0.906382 2.20538 -1.83059 -0.0896858 0.381444 0.920031 + 0.925103 2.20724 -1.83516 0.448575 0.487065 0.749366 + 0.915728 2.21235 -1.83474 0.140901 0.72642 0.672653 + 0.907039 2.21236 -1.8347 -0.0912971 0.754418 0.650014 + 0.903138 2.21362 -1.83813 -0.218948 0.843849 0.489879 + 0.901823 2.2151 -1.84183 -0.204192 0.882249 0.424197 + 0.930094 2.20979 -1.84125 0.546616 0.568964 0.614403 + 0.920719 2.2149 -1.84083 0.242641 0.857192 0.454254 + 0.919404 2.21638 -1.84453 0.135654 0.921799 0.363159 + 0.900609 2.2191 -1.8516 -0.248187 0.91117 0.328896 + 0.889259 1.99131 -1.76266 -0.85481 0.344293 -0.388281 + 0.896173 2.04571 -1.73124 -0.852418 0.338285 -0.39868 + 0.902247 2.09678 -1.70099 -0.85347 0.353831 -0.382613 + 0.890487 2.03708 -1.71403 -0.98762 0.153378 -0.0328996 + 0.898535 2.0911 -1.6897 -0.982408 0.184851 -0.0265324 + 0.904856 2.12225 -1.67287 -0.914644 0.390943 0.102908 + 0.908567 2.12793 -1.68416 -0.78897 0.557867 -0.25751 + 0.915885 2.1311 -1.69088 -0.512878 0.679409 -0.524748 + 0.899657 2.08452 -1.67669 -0.944725 0.0221626 0.327113 + 0.905567 2.11812 -1.66483 -0.875972 0.252655 0.410899 + 0.912004 2.12616 -1.66256 -0.610862 0.59892 0.517825 + 0.911292 2.13029 -1.6706 -0.652341 0.709068 0.267719 + 0.913373 2.13348 -1.67694 -0.594521 0.803097 0.0397485 + 0.911034 2.11345 -1.65579 -0.71961 0.134254 0.681276 + 0.915061 2.12352 -1.65745 -0.509172 0.528733 0.679106 + 0.922753 2.12975 -1.66006 -0.159706 0.786187 0.596996 + 0.919695 2.13239 -1.66517 -0.249706 0.844514 0.473754 + 0.920523 2.13485 -1.67008 -0.222632 0.89424 0.38829 + 0.920864 2.121 -1.65233 -0.341149 0.497431 0.797609 + 0.928012 2.12912 -1.65881 -0.0659301 0.816484 0.573592 + 0.935932 2.13522 -1.67151 0.00962237 0.895916 0.44412 + 0.93676 2.13768 -1.67643 0.179858 0.948193 0.261878 + 0.922603 2.13803 -1.67642 -0.222073 0.957394 0.184606 + 0.92593 2.12005 -1.65015 -0.0114474 0.442266 0.896811 + 0.933078 2.12816 -1.65663 0.149333 0.700705 0.697648 + 0.943329 2.13249 -1.66584 0.335832 0.77314 0.538026 + 0.936824 2.12246 -1.65517 0.455469 0.349439 0.818804 + 0.947075 2.12678 -1.66438 0.588022 0.406693 0.699164 + 0.930782 2.13926 -1.67936 0.00629828 0.994425 0.105257 + 0.920691 2.13664 -1.68365 -0.368899 0.896251 -0.246268 + 0.928869 2.13787 -1.6866 -0.13089 0.93705 -0.323736 + 0 1.98306 -3.19152 -0.99528 -0.010888 0.0964296 + 0 1.9393 -3.21829 -0.940716 -0.259577 0.218341 + 0.011183 1.96532 -3.12314 -0.905221 -0.310724 0.289873 + 0.016252 1.92627 -3.17244 -0.857915 -0.416422 0.300957 + 0.025806 1.96262 -3.09556 -0.724444 -0.507575 0.466421 + 0.041291 1.9961 -3.05045 -0.764239 -0.356634 0.537355 + 0.011183 2.00908 -3.09637 -0.939303 -0.144079 0.311371 + 0.011587 2.07808 -3.08639 -0.980061 0.0792124 0.182224 + 0 2.00459 -3.23674 -0.973679 0.196861 -0.11487 + 0.016252 1.87696 -3.22971 -0.535559 -0.712149 0.453895 + 0.030875 1.92357 -3.14486 -0.461445 -0.77026 0.440191 + 0.066043 1.92622 -3.12427 -0.260557 -0.883968 0.388215 + 0.057187 1.95648 -3.06427 -0.507634 -0.703139 0.497899 + 0 1.88998 -3.27556 -0.875856 -0.426886 0.225044 + 0.026712 1.83793 -3.28811 -0.400048 -0.7914 0.46222 + 0.066636 1.89392 -3.21292 -0.0503872 -0.878531 0.475021 + 0.101804 1.89658 -3.19232 -0.126564 -0.917524 0.377002 + 0.120883 1.92386 -3.08813 -0.231901 -0.911108 0.340741 + 0.112028 1.95411 -3.02813 -0.359108 -0.787007 0.501659 + 0.026712 1.81199 -3.33312 -0.545924 -0.802074 0.242167 + 0.077097 1.85489 -3.27132 0.00157891 -0.826563 0.562842 + 0.120941 1.85754 -3.26589 -0.0603898 -0.839102 0.540611 + 0.122625 1.89529 -3.19047 -0.131006 -0.929045 0.345995 + 0 1.86404 -3.32057 -0.894591 -0.441082 0.0717885 + 0.033943 1.80588 -3.37903 -0.547599 -0.802874 -0.235647 + 0.083178 1.80368 -3.33461 -0.0615579 -0.92657 0.37105 + 0.127022 1.80633 -3.32918 -0.0079336 -0.904958 0.425426 + 0.141762 1.85626 -3.26403 -0.0875726 -0.841725 0.532757 + 0.149137 1.88864 -3.19486 -0.20373 -0.917412 0.341832 + 0.033943 1.8295 -3.41372 -0.500882 -0.310218 -0.808011 + 0.090409 1.79758 -3.38053 -0.08195 -0.966312 -0.243976 + 0.145802 1.79423 -3.3803 0.0072954 -0.980094 -0.198399 + 0.174726 1.80955 -3.3246 0.0311282 -0.915235 0.401715 + 0 1.88767 -3.35525 -0.96781 -0.142006 -0.207794 + 0.00609 1.89928 -3.38721 -0.721413 0.195641 -0.664295 + 0.049274 1.91604 -3.38694 -0.12575 0.450442 -0.883906 + 0.113252 1.82668 -3.4212 -0.0559755 -0.293479 -0.954325 + 0.168645 1.82333 -3.42097 0.0508069 -0.332007 -0.941908 + 0.193506 1.79745 -3.37572 0.0426891 -0.989388 -0.138884 + 0.00609 1.92264 -3.37029 -0.982665 0.114872 -0.145516 + 0 1.91102 -3.33833 -0.982417 0.118768 -0.144051 + 0.00609 1.93619 -3.35816 -0.981516 0.131151 -0.139377 + 0 1.92457 -3.32621 -0.981236 0.134574 -0.13808 + 0.00609 1.98847 -3.30463 -0.872749 0.354069 -0.336073 + 0 1.97685 -3.27268 -0.971776 0.195948 -0.13136 + 0.014034 2.05323 -3.24402 -0.843647 0.422991 -0.330663 + 0.036542 2.02576 -3.30766 -0.464882 0.588192 -0.661752 + 0.079725 2.04251 -3.30739 -0.194271 0.591029 -0.782907 + 0.128582 1.91321 -3.39442 -0.0139732 0.422247 -0.906373 + 0.014034 2.08098 -3.20808 -0.828285 0.472356 -0.301369 + 0.03972 2.11125 -3.19831 -0.630499 0.681409 -0.371689 + 0.044486 2.09052 -3.24705 -0.586181 0.630257 -0.509086 + 0.0805 2.12506 -3.23831 -0.419995 0.695904 -0.582513 + 0.136609 2.08013 -3.29146 -0.0614619 0.587716 -0.806729 + 0.011587 2.09962 -3.13161 -0.965461 0.260081 -0.0155791 + 0.023387 2.12143 -3.14955 -0.804061 0.549432 -0.227179 + 0.049073 2.1517 -3.13979 -0.614227 0.698253 -0.367652 + 0.075698 2.17553 -3.13363 -0.579977 0.716229 -0.388127 + 0.075734 2.14578 -3.18957 -0.59953 0.710085 -0.369247 + 0.037415 2.1504 -3.01405 -0.971596 0.0427349 0.232755 + 0.032105 2.15701 -3.05363 -0.966259 0.256482 0.0236783 + 0.043906 2.17882 -3.07158 -0.808726 0.533994 -0.246602 + 0.070733 2.20765 -3.06834 -0.58317 0.68184 -0.441595 + 0.097358 2.23148 -3.06218 -0.366643 0.790961 -0.489851 + 0.025536 2.06202 -3.04565 -0.906932 -0.11691 0.40473 + 0.051364 2.13434 -2.97331 -0.920072 -0.106101 0.377108 + 0.049685 2.20804 -2.96099 -0.976256 -0.0867732 0.198479 + 0.044375 2.21465 -3.00057 -0.9845 0.167476 -0.0520691 + 0.054531 2.22951 -3.02005 -0.785559 0.457976 -0.416119 + 0.055645 2.04904 -2.99974 -0.795289 -0.293652 0.530361 + 0.071744 2.11124 -2.94107 -0.816098 -0.270674 0.510607 + 0.081949 2.16734 -2.89318 -0.827892 -0.292275 0.478716 + 0.061569 2.19045 -2.92543 -0.923689 -0.18738 0.334195 + 0.048313 2.25119 -2.93151 -0.989208 -0.0356674 0.142113 + 0.080386 2.03729 -2.9747 -0.634606 -0.439718 0.63555 + 0.096485 2.0995 -2.91603 -0.5474 -0.489529 0.67876 + 0.102944 2.15383 -2.872 -0.574535 -0.483042 0.660742 + 0.082215 2.21407 -2.86212 -0.828354 -0.339528 0.44559 + 0.060198 2.2336 -2.89595 -0.923701 -0.222862 0.311625 + 0.072672 1.98996 -3.01916 -0.595095 -0.51768 0.614711 + 0.106336 2.03079 -2.95916 -0.425211 -0.539635 0.726629 + 0.119012 2.09512 -2.90956 -0.328898 -0.564679 0.756944 + 0.12547 2.14946 -2.86554 -0.317259 -0.597508 0.736431 + 0.098622 1.98346 -3.00363 -0.463877 -0.607233 0.645047 + 0.136479 2.02512 -2.9512 -0.311761 -0.53891 0.782547 + 0.149155 2.08945 -2.9016 -0.17283 -0.59087 0.788036 + 0.151331 2.14541 -2.85801 -0.195786 -0.639847 0.743144 + 0.122263 2.19353 -2.82877 -0.443179 -0.599339 0.666622 + 0.142878 1.95267 -3.0086 -0.270855 -0.804568 0.528496 + 0.129472 1.98201 -2.9841 -0.404392 -0.59007 0.698773 + 0.17514 2.01276 -2.94363 -0.165022 -0.532694 0.830063 + 0.182592 2.09 -2.89932 -0.0485238 -0.573594 0.817701 + 0.184768 2.14596 -2.85572 -0.0173365 -0.686329 0.727084 + 0.165125 1.94022 -3.02443 -0.0854405 -0.901983 0.423234 + 0.168133 1.96965 -2.97654 -0.132315 -0.700096 0.701682 + 0.20834 2.01122 -2.94405 0.088305 -0.57761 0.811523 + 0.215792 2.08846 -2.89973 0.123167 -0.550777 0.825515 + 0.147395 1.9172 -3.09252 -0.145158 -0.940262 0.307955 + 0.169656 1.91908 -3.08069 -0.0464452 -0.941227 0.334567 + 0.218463 1.93221 -3.04741 0.11532 -0.900849 0.418535 + 0.19038 1.9572 -2.99237 0.108938 -0.801353 0.588189 + 0.171053 1.8857 -3.18537 -0.182418 -0.926094 0.330263 + 0.193315 1.88757 -3.17354 -0.0469233 -0.936726 0.346904 + 0.222994 1.91107 -3.10367 0.0353866 -0.935889 0.350513 + 0.253433 1.93131 -3.06382 0.228484 -0.860089 0.456117 + 0.225351 1.9563 -3.00877 0.225062 -0.829787 0.510686 + 0.160705 1.86355 -3.24917 -0.156846 -0.878514 0.451235 + 0.182622 1.86061 -3.23967 -0.217331 -0.876959 0.428614 + 0.197347 1.8591 -3.23793 -0.0620503 -0.887299 0.457001 + 0.215573 1.88599 -3.1778 0.0195867 -0.932825 0.359796 + 0.193669 1.81684 -3.30973 -0.105814 -0.892904 0.437637 + 0.208394 1.81534 -3.30799 -0.10561 -0.894851 0.433692 + 0.219605 1.85752 -3.24219 -0.00433524 -0.875537 0.483132 + 0.248192 1.8816 -3.19291 0.0234285 -0.916136 0.400183 + 0.255613 1.90667 -3.11878 0.124299 -0.923002 0.364167 + 0.231561 1.80731 -3.31936 -0.058717 -0.932487 0.3564 + 0.242772 1.84949 -3.25356 -0.00824802 -0.863014 0.505113 + 0.272701 1.87554 -3.20482 -0.0106207 -0.898285 0.439285 + 0.285988 1.90476 -3.14008 0.233641 -0.858608 0.456294 + 0.283809 1.9294 -3.08511 0.452937 -0.767087 0.45434 + 0.235338 1.79851 -3.3656 0.090422 -0.988383 -0.122159 + 0.277517 1.8115 -3.30338 -0.0569388 -0.899895 0.432374 + 0.267281 1.84343 -3.26547 -0.0257778 -0.836133 0.547921 + 0.296138 1.86434 -3.22731 -0.0895534 -0.88083 0.464886 + 0.248572 1.81892 -3.40553 0.299515 -0.421536 -0.855919 + 0.281294 1.8027 -3.34962 0.216724 -0.970377 -0.106766 + 0.305358 1.81202 -3.29945 0.152238 -0.925993 0.345486 + 0.295121 1.84395 -3.26153 -0.101654 -0.821508 0.561062 + 0.206741 1.81786 -3.41565 0.143199 -0.441032 -0.885994 + 0.232151 1.89626 -3.39129 0.243695 0.511986 -0.823701 + 0.284143 1.82119 -3.39091 0.371882 -0.455109 -0.809061 + 0.31065 1.83131 -3.38534 0.511998 -0.299473 -0.805093 + 0.307801 1.81282 -3.34405 0.537248 -0.82021 -0.196521 + 0.194055 1.90173 -3.39661 0.12717 0.394011 -0.910266 + 0.267721 1.89853 -3.37668 0.307938 0.369786 -0.876603 + 0.310818 1.90591 -3.35837 0.334714 0.372684 -0.86549 + 0.327601 1.8476 -3.37092 0.758231 -0.144147 -0.635851 + 0.202082 2.06864 -3.29366 0.125529 0.556933 -0.821016 + 0.251458 2.05987 -3.28899 0.221157 0.542595 -0.810358 + 0.294555 2.06726 -3.27068 0.390434 0.56245 -0.728843 + 0.327769 1.9222 -3.34395 0.571264 0.376209 -0.729468 + 0.183074 2.18144 -3.21184 0.00165362 0.778244 -0.627959 + 0.23245 2.17267 -3.20717 0.232169 0.716735 -0.657562 + 0.267374 2.17265 -3.19234 0.426883 0.733695 -0.528642 + 0.293459 2.14228 -3.20248 0.625964 0.613739 -0.481138 + 0.329604 2.02374 -3.2783 0.659824 0.450233 -0.6016 + 0.137384 2.16267 -3.22238 -0.219062 0.743651 -0.63166 + 0.152461 2.19752 -3.16676 -0.210607 0.866301 -0.452954 + 0.197921 2.21078 -3.1575 0.0375035 0.889359 -0.455669 + 0.232845 2.21076 -3.14267 0.296118 0.873431 -0.386566 + 0.106772 2.17875 -3.1773 -0.427461 0.790057 -0.439417 + 0.106736 2.2085 -3.12135 -0.426032 0.811318 -0.400325 + 0.138848 2.22171 -3.11437 -0.234384 0.886546 -0.398873 + 0.184307 2.23498 -3.10511 -0.00357815 0.932072 -0.362256 + 0.120311 2.23474 -3.06283 -0.193911 0.860723 -0.470697 + 0.152423 2.24796 -3.05585 -0.14364 0.885115 -0.44265 + 0.181421 2.25134 -3.04883 0.0985539 0.90078 -0.422945 + 0.224477 2.24728 -3.03716 0.298593 0.866268 -0.400528 + 0.227363 2.23092 -3.09344 0.299926 0.908853 -0.28988 + 0.104256 2.26771 -3.01851 -0.22022 0.666688 -0.71206 + 0.127209 2.27097 -3.01915 -0.0826443 0.674335 -0.733786 + 0.154284 2.27313 -3.01843 0.01283 0.70368 -0.710401 + 0.183282 2.27651 -3.01141 0.176401 0.660773 -0.729563 + 0.219971 2.27262 -3.00065 0.356232 0.630064 -0.690013 + 0.081358 2.25834 -3.01682 -0.384387 0.596691 -0.704419 + 0.077574 2.29006 -2.99257 -0.298043 0.685559 -0.664213 + 0.100472 2.29943 -2.99426 -0.264599 0.717063 -0.644832 + 0.123349 2.30196 -2.99864 -0.127208 0.703607 -0.69911 + 0.150424 2.30412 -2.99792 0.00570241 0.713725 -0.700403 + 0.058636 2.28719 -2.9876 -0.646188 0.564057 -0.514082 + 0.070556 2.34854 -2.89817 -0.609092 0.714759 -0.343694 + 0.089494 2.35141 -2.90314 -0.22653 0.849564 -0.476367 + 0.107449 2.35357 -2.90688 -0.199395 0.858703 -0.472091 + 0.048481 2.27233 -2.96812 -0.968842 0.220467 -0.112871 + 0.062361 2.3388 -2.8813 -0.945728 0.322515 -0.0397923 + 0.096877 2.42714 -2.74869 -0.576003 0.758634 -0.304459 + 0.110532 2.42881 -2.75158 -0.19695 0.880716 -0.430755 + 0.128487 2.43097 -2.75532 -0.176351 0.883779 -0.433398 + 0.062194 2.31767 -2.84469 -0.986202 0.0171115 0.164661 + 0.088662 2.40411 -2.7088 -0.985079 0.0213175 0.170777 + 0.088682 2.4174 -2.73182 -0.942924 0.33246 -0.0190805 + 0.116132 2.49623 -2.61905 -0.572733 0.752949 -0.324105 + 0.071664 2.30111 -2.81601 -0.923915 -0.211881 0.318571 + 0.098132 2.38756 -2.68012 -0.907022 -0.257442 0.333218 + 0.110491 2.47681 -2.5854 -0.984614 -0.00297979 0.17472 + 0.110511 2.49009 -2.60842 -0.939902 0.339566 -0.0357608 + 0.093681 2.28158 -2.78219 -0.821189 -0.376285 0.429021 + 0.114185 2.37528 -2.65887 -0.79993 -0.415573 0.432911 + 0.133134 2.45403 -2.54596 -0.783163 -0.441784 0.437586 + 0.117082 2.4663 -2.56721 -0.903004 -0.268295 0.335562 + 0.127755 2.54203 -2.48539 -0.943685 0.184185 0.274834 + 0.103209 2.20056 -2.84094 -0.688975 -0.449882 0.56826 + 0.11137 2.27078 -2.76348 -0.679841 -0.514178 0.522912 + 0.131873 2.36449 -2.64017 -0.647215 -0.556778 0.520683 + 0.145322 2.44721 -2.53414 -0.630956 -0.575294 0.520511 + 0.144697 2.52364 -2.45353 -0.793994 -0.260526 0.549272 + 0.130423 2.26376 -2.75131 -0.499731 -0.633473 0.590746 + 0.145505 2.36013 -2.63263 -0.472907 -0.660406 0.583287 + 0.158954 2.44285 -2.52659 -0.456109 -0.67579 0.579027 + 0.165601 2.51404 -2.43691 -0.47646 -0.51462 0.712848 + 0.156885 2.51682 -2.44171 -0.645485 -0.408996 0.645036 + 0.148124 2.18949 -2.82124 -0.326076 -0.658011 0.678746 + 0.15082 2.25873 -2.74261 -0.380528 -0.689831 0.615899 + 0.165902 2.35511 -2.62392 -0.360201 -0.705527 0.610317 + 0.172947 2.43967 -2.52109 -0.346157 -0.717571 0.604373 + 0.176551 2.18416 -2.81201 -0.151618 -0.726648 0.670071 + 0.179248 2.2534 -2.73338 -0.201631 -0.738453 0.643454 + 0.186376 2.35171 -2.61803 -0.186437 -0.748343 0.636572 + 0.193421 2.43627 -2.5152 -0.182371 -0.756111 0.62852 + 0.212844 2.14683 -2.85505 0.133067 -0.672037 0.728463 + 0.204628 2.18504 -2.81134 0.101424 -0.746688 0.657396 + 0.203814 2.25251 -2.73182 0.0662125 -0.761723 0.64451 + 0.210942 2.35081 -2.61647 0.0537737 -0.765219 0.64152 + 0.234516 2.1519 -2.85829 0.446414 -0.60538 0.658961 + 0.233398 2.18826 -2.81693 0.416562 -0.681186 0.602048 + 0.232584 2.25573 -2.73741 0.42393 -0.691837 0.584503 + 0.231537 2.35273 -2.61976 0.408628 -0.700848 0.584667 + 0.237464 2.09352 -2.90297 0.444641 -0.484327 0.753473 + 0.272273 2.10669 -2.92795 0.629365 -0.397285 0.667881 + 0.263892 2.16543 -2.87623 0.65527 -0.474676 0.587625 + 0.262774 2.2018 -2.83487 0.719145 -0.515406 0.466033 + 0.259031 2.26576 -2.75796 0.721058 -0.526535 0.450373 + 0.247373 2.01184 -2.95231 0.403912 -0.497653 0.767591 + 0.282181 2.02501 -2.97729 0.736136 -0.348947 0.579949 + 0.306553 2.13106 -2.94589 0.810757 -0.307662 0.498014 + 0.298173 2.1898 -2.89418 0.778725 -0.264114 0.569061 + 0.295555 2.2233 -2.87989 0.864391 -0.287674 0.412397 + 0.221486 1.96884 -2.98288 -0.484795 -0.751198 0.447968 + 0.260519 1.96946 -2.99115 0.370745 -0.762606 0.530075 + 0.28828 1.97721 -3.01739 0.724165 -0.508492 0.465854 + 0.326429 2.04764 -3.04775 0.88662 -0.239082 0.395909 + 0.278599 1.9612 -3.03327 0.439232 -0.799267 0.410181 + 0.306359 1.96895 -3.05951 0.729328 -0.544323 0.414479 + 0.332527 1.99984 -3.08785 0.891649 -0.243803 0.381474 + 0.342936 2.07228 -3.07681 0.985922 0.0249179 0.165339 + 0.32306 2.1557 -2.97495 0.978776 -0.0177249 0.204163 + 0.282463 1.94866 -3.05916 0.509809 -0.707417 0.489547 + 0.318694 1.96196 -3.09111 0.760424 -0.483414 0.433666 + 0.344862 1.99285 -3.11945 0.916704 -0.145094 0.372292 + 0.352907 2.03101 -3.14275 0.982521 0.0985971 0.157897 + 0.320039 1.9427 -3.11706 0.694908 -0.56921 0.439435 + 0.351305 1.97457 -3.14482 0.919293 -0.236531 0.314569 + 0.35935 2.01272 -3.16812 0.993852 0.081452 0.0749959 + 0.340334 2.07758 -3.14371 0.946487 0.321179 -0.0317194 + 0.330363 2.11885 -3.07778 0.956347 0.284882 -0.0651359 + 0.309425 1.89356 -3.16257 0.302947 -0.791075 0.531436 + 0.326539 1.90949 -3.16483 0.727698 -0.514849 0.453195 + 0.357805 1.94136 -3.1926 0.940288 -0.249177 0.23188 + 0.361012 1.96411 -3.22222 0.998481 0.0372942 -0.040564 + 0.346668 2.05602 -3.20424 0.937829 0.30651 -0.162877 + 0.331928 1.85133 -3.23751 0.306091 -0.812713 0.495788 + 0.349042 1.86726 -3.23978 0.870889 -0.358238 0.336477 + 0.353513 1.88831 -3.25743 0.985139 -0.119263 0.123603 + 0.35672 1.91106 -3.28705 0.989724 0.0466327 -0.135173 + 0.348331 2.00741 -3.25833 0.903131 0.287127 -0.319236 + 0.330911 1.83094 -3.27173 0.358215 -0.823468 0.43998 + 0.350931 1.84522 -3.28997 0.890751 -0.450789 0.0578904 + 0.355402 1.86627 -3.30763 0.98249 -0.123401 -0.139594 + 0.346496 1.90587 -3.32399 0.883539 0.195579 -0.425567 + 0.340923 1.83189 -3.29333 0.699523 -0.713746 0.0351388 + 0.345178 1.86107 -3.34457 0.892365 -0.124907 -0.433685 + 0.31537 1.81296 -3.32104 0.457845 -0.885437 -0.0798701 + 0.33517 1.84774 -3.34792 0.779244 -0.574442 -0.25059 + 0.328509 2.09876 -3.2101 0.790439 0.512685 -0.335203 + 0.322175 2.12033 -3.14958 0.90517 0.399851 -0.144176 + 0.30984 2.1579 -3.14358 0.821859 0.504243 -0.265115 + 0.308809 2.18477 -3.07768 0.825271 0.541897 -0.158983 + 0.321143 2.14719 -3.08367 0.94544 0.31208 -0.0935356 + 0.283755 2.18828 -3.13344 0.564403 0.765534 -0.308881 + 0.278273 2.20844 -3.08421 0.523013 0.809301 -0.267374 + 0.301868 2.21323 -3.00943 0.788454 0.563203 -0.247271 + 0.313911 2.189 -3.00771 0.924042 0.360955 -0.125928 + 0.323131 2.16066 -3.00182 0.971173 0.237335 -0.0222277 + 0.271332 2.2369 -3.01597 0.497154 0.772586 -0.394903 + 0.293166 2.25013 -2.96776 0.722421 0.469087 -0.508001 + 0.305209 2.2259 -2.96604 0.910251 0.363985 -0.197375 + 0.312744 2.21232 -2.94996 0.968041 0.247167 -0.0424808 + 0.266826 2.26223 -2.97946 0.488189 0.561875 -0.667808 + 0.284352 2.27957 -2.96062 0.639842 0.501999 -0.581893 + 0.29339 2.27383 -2.95069 0.848913 0.409085 -0.334657 + 0.300925 2.26025 -2.93461 0.947726 0.279217 -0.154444 + 0.312674 2.20736 -2.92309 0.977756 0.00806135 0.209591 + 0.220585 2.29972 -2.98628 0.340832 0.629452 -0.6983 + 0.258012 2.29166 -2.97232 0.450733 0.571723 -0.685546 + 0.275893 2.33922 -2.88201 0.595605 0.697231 -0.398904 + 0.28493 2.33348 -2.87208 0.817844 0.51008 -0.266364 + 0.292781 2.32328 -2.85759 0.923464 0.348876 -0.159686 + 0.183897 2.30362 -2.99704 0.150005 0.66498 -0.731642 + 0.218494 2.35289 -2.90569 0.273723 0.833447 -0.480043 + 0.255921 2.34483 -2.89174 0.393057 0.795372 -0.4614 + 0.270638 2.41874 -2.73413 0.562921 0.735598 -0.376851 + 0.154514 2.35691 -2.91266 -0.0158405 0.873646 -0.486305 + 0.187987 2.3564 -2.91177 0.111028 0.86511 -0.48914 + 0.223585 2.42948 -2.75274 0.250266 0.858612 -0.447385 + 0.250666 2.42435 -2.74386 0.366872 0.824302 -0.431198 + 0.130326 2.3561 -2.91125 -0.121138 0.870615 -0.476818 + 0.169028 2.43334 -2.75942 -0.0153648 0.892081 -0.451615 + 0.193077 2.43299 -2.75882 0.107115 0.884647 -0.45379 + 0.199087 2.50094 -2.6272 0.103591 0.878641 -0.466111 + 0.220089 2.49869 -2.62331 0.242581 0.856881 -0.454872 + 0.14484 2.43253 -2.75802 -0.106327 0.890275 -0.442837 + 0.175038 2.50128 -2.6278 -0.0138048 0.884837 -0.465695 + 0.181559 2.5606 -2.51754 -0.0126555 0.928296 -0.371626 + 0.196999 2.56038 -2.51717 0.0930237 0.922967 -0.373468 + 0.218001 2.55814 -2.51328 0.228898 0.905491 -0.35734 + 0.142106 2.49922 -2.62423 -0.168129 0.876718 -0.450663 + 0.158459 2.50078 -2.62693 -0.104242 0.882604 -0.458414 + 0.16498 2.56009 -2.51667 -0.100165 0.926753 -0.362072 + 0.183906 2.58021 -2.44528 -0.0294621 0.993425 0.110624 + 0.199345 2.58 -2.44491 0.0828306 0.991592 0.0994189 + 0.129787 2.4979 -2.62194 -0.188868 0.874047 -0.447627 + 0.154506 2.55909 -2.51493 -0.155421 0.923938 -0.349547 + 0.173431 2.57921 -2.44353 -0.0786497 0.987 0.140158 + 0.16462 2.56961 -2.42691 -0.558005 0.570445 0.60268 + 0.133396 2.55673 -2.51085 -0.535557 0.814656 -0.222517 + 0.142187 2.55777 -2.51265 -0.171673 0.92269 -0.345211 + 0.16464 2.57817 -2.44174 -0.418282 0.882038 0.216908 + 0.127775 2.55059 -2.50022 -0.879124 0.471016 0.0726969 + 0.134346 2.53153 -2.4672 -0.892653 -0.089424 0.441785 + 0.174971 2.56172 -2.41324 -0.449944 0.386282 0.805194 + 0.196838 2.55676 -2.40464 -0.0523309 0.265583 0.962667 + 0.225304 2.56665 -2.42497 0.590286 0.572147 0.569395 + 0.220791 2.57447 -2.43529 0.403568 0.859036 0.314943 + 0.216786 2.57669 -2.43918 0.243009 0.959452 0.142824 + 0.183688 2.55895 -2.40844 -0.287777 0.310995 0.905796 + 0.192744 2.50868 -2.4276 -0.194902 -0.596464 0.778617 + 0.2096 2.50807 -2.42651 0.0609267 -0.5966 0.800222 + 0.21004 2.55797 -2.4067 0.321175 0.359835 0.875994 + 0.179594 2.51086 -2.4314 -0.360888 -0.562538 0.743849 + 0.210276 2.43566 -2.51411 0.0515216 -0.769203 0.636925 + 0.222802 2.50928 -2.42857 0.410237 -0.503183 0.7606 + 0.230871 2.43758 -2.5174 0.396325 -0.701317 0.592521 + 0.249046 2.4439 -2.53038 0.68725 -0.545273 0.479963 + 0.240977 2.5156 -2.44155 0.720232 -0.307771 0.621725 + 0.256241 2.52427 -2.45982 0.873291 -0.109277 0.474786 + 0.263116 2.53481 -2.47807 0.942119 0.269204 0.199852 + 0.257984 2.36276 -2.64031 0.700476 -0.545316 0.460395 + 0.272686 2.45737 -2.55869 0.88059 -0.32745 0.342545 + 0.281624 2.37623 -2.66861 0.880159 -0.35035 0.320274 + 0.291723 2.39286 -2.69742 0.996291 0.0757537 0.0407992 + 0.279561 2.46791 -2.57694 0.993548 0.0884857 0.0709342 + 0.258603 2.54263 -2.4884 0.828547 0.559805 -0.0113391 + 0.291812 2.28726 -2.80297 0.895909 -0.322015 0.306028 + 0.301912 2.30389 -2.83178 0.996739 0.0627705 0.0506977 + 0.284832 2.40503 -2.71352 0.910551 0.381245 -0.159843 + 0.27267 2.48008 -2.59304 0.895134 0.419879 -0.14979 + 0.310056 2.24086 -2.9088 0.997111 0.056401 0.0508826 + 0.276981 2.41524 -2.72802 0.795297 0.548125 -0.258963 + 0.267232 2.48651 -2.60215 0.779501 0.573323 -0.252347 + 0.260889 2.49002 -2.60827 0.546615 0.748691 -0.375064 + 0.24916 2.55128 -2.50139 0.509127 0.820271 -0.260664 + 0.253165 2.54906 -2.4975 0.717119 0.686213 -0.121872 + 0.247171 2.49356 -2.61442 0.354357 0.827964 -0.434635 + 0.235442 2.55483 -2.50754 0.327443 0.884803 -0.331518 + 0.851447 0.667225 -3.01935 0.318816 -0.903238 -0.287258 + 0.869612 0.679716 -3.01335 0.820938 -0.567324 0.0648372 + 0.864359 0.676199 -3.00349 0.69588 -0.578278 0.425847 + 0.870874 0.684691 -3.02581 0.789372 -0.543081 -0.286279 + 0.8803 0.712776 -3.01494 0.944125 -0.288983 0.158482 + 0.872875 0.707806 -3.00101 0.774018 -0.30433 0.555229 + 0.846194 0.663707 -3.00949 0.210564 -0.976555 0.0447499 + 0.820959 0.673984 -3.02855 -0.422815 -0.775235 -0.469295 + 0.829948 0.675789 -3.03512 -0.171502 -0.756667 -0.630905 + 0.843098 0.674141 -3.03424 0.0384074 -0.784413 -0.619048 + 0.848286 0.671955 -3.03015 0.20868 -0.833725 -0.511229 + 0.852695 0.673826 -2.99489 0.408041 -0.55183 0.727314 + 0.838616 0.673413 -2.9905 0.194177 -0.541105 0.818231 + 0.832115 0.663293 -3.0051 -0.0671604 -0.987652 0.141536 + 0.861211 0.705433 -2.99241 0.469274 -0.289306 0.834317 + 0.841311 0.704848 -2.9862 0.220978 -0.267279 0.937939 + 0.829896 0.705212 -2.98435 -0.077535 -0.248857 0.965432 + 0.827201 0.673775 -2.98865 -0.11899 -0.537847 0.834603 + 0.827276 0.664309 -3.00642 -0.317975 -0.947168 0.0420103 + 0.889696 0.781507 -2.97762 0.762165 -0.364953 0.53471 + 0.871462 0.777799 -2.96418 0.445755 -0.408123 0.796704 + 0.851562 0.777212 -2.95797 0.210513 -0.411461 0.886783 + 0.897121 0.78648 -2.99155 0.94341 -0.276691 0.182812 + 0.923644 0.903215 -2.94988 0.945482 -0.26884 0.183818 + 0.91125 0.894913 -2.92662 0.754541 -0.378117 0.536372 + 0.893016 0.891206 -2.91318 0.448379 -0.439797 0.778161 + 0.899094 0.794259 -3.01104 0.97018 -0.174067 -0.168677 + 0.925618 0.910994 -2.96936 0.976833 -0.151923 -0.150722 + 0.948089 1.0292 -2.93081 0.982228 -0.13104 -0.134372 + 0.945272 1.01735 -2.90117 0.951211 -0.234074 0.201014 + 0.932878 1.00905 -2.87791 0.790174 -0.366975 0.490871 + 0.881562 0.717753 -3.02741 0.947249 -0.24901 -0.201777 + 0.894626 0.800945 -3.02631 0.902356 -0.0911452 -0.421244 + 0.918159 0.922154 -2.99485 0.911002 -0.0636841 -0.407455 + 0.94063 1.04036 -2.9563 0.938728 -0.0819218 -0.334782 + 0.867713 0.689422 -3.03662 0.685388 -0.5203 -0.509442 + 0.877095 0.72444 -3.04267 0.859736 -0.209409 -0.465835 + 0.886751 0.807467 -3.04036 0.75314 -0.0109769 -0.657768 + 0.910284 0.928679 -3.0089 0.764004 0.0181506 -0.644956 + 0.932832 1.0504 -2.97894 0.812524 -0.0100643 -0.58284 + 0.862675 0.693595 -3.0456 0.533849 -0.493039 -0.686963 + 0.872057 0.728612 -3.05166 0.701856 -0.167027 -0.692459 + 0.864723 0.731701 -3.05745 0.413359 -0.105228 -0.904467 + 0.879417 0.810558 -3.04614 0.465475 0.0842015 -0.881047 + 0.898042 0.933835 -3.01856 0.474358 0.118234 -0.872356 + 0.857487 0.695782 -3.0497 0.296759 -0.452413 -0.840985 + 0.846422 0.698094 -3.0527 0.077843 -0.423482 -0.902554 + 0.853658 0.734015 -3.06045 0.154806 -0.063675 -0.985891 + 0.86212 0.814174 -3.05083 0.183754 0.143665 -0.972417 + 0.833272 0.699745 -3.05357 -0.107014 -0.398356 -0.910967 + 0.835072 0.736347 -3.06168 -0.0967604 -0.0342941 -0.994717 + 0.843533 0.816506 -3.05207 -0.0783359 0.171052 -0.982143 + 0.849719 0.941343 -3.02531 -0.0830815 0.203479 -0.975548 + 0.880745 0.937452 -3.02325 0.191597 0.174301 -0.965873 + 0.819914 0.699651 -3.05013 -0.37952 -0.37678 -0.844986 + 0.821714 0.736253 -3.05825 -0.4175 -0.0164593 -0.908528 + 0.822651 0.81636 -3.04669 -0.4336 0.172664 -0.884408 + 0.810925 0.697845 -3.04357 -0.669432 -0.359414 -0.650141 + 0.809008 0.733702 -3.04896 -0.761481 -0.0171776 -0.64796 + 0.809946 0.813808 -3.03741 -0.778167 0.123668 -0.615762 + 0.807629 0.936939 -3.00444 -0.789425 0.144693 -0.59655 + 0.828837 0.941197 -3.01994 -0.43045 0.202061 -0.879707 + 0.804799 0.693068 -3.03042 -0.872678 -0.351701 -0.338731 + 0.802882 0.728925 -3.03582 -0.957643 -0.0363178 -0.285658 + 0.800369 0.806341 -3.01686 -0.969461 0.0372871 -0.242394 + 0.803635 0.686956 -3.0152 -0.92744 -0.370181 -0.0531234 + 0.801237 0.720285 -3.01431 -0.99601 -0.0639219 0.0622794 + 0.798724 0.797702 -2.99535 -0.996103 -0.0539146 0.069792 + 0.795305 0.91505 -2.94799 -0.995219 -0.0570797 0.0792543 + 0.798052 0.929471 -2.98389 -0.969257 0.0522117 -0.240448 + 0.819794 0.667873 -3.01333 -0.486103 -0.860276 -0.15372 + 0.807446 0.681117 -3.00185 -0.834553 -0.416012 0.361185 + 0.805048 0.714447 -3.00096 -0.881252 -0.124895 0.455846 + 0.804682 0.788575 -2.97448 -0.872765 -0.186694 0.451028 + 0.814927 0.677555 -2.99494 -0.659907 -0.466328 0.589118 + 0.815622 0.709411 -2.99118 -0.65473 -0.166237 0.737356 + 0.815256 0.783538 -2.96471 -0.665398 -0.278073 0.692763 + 0.818915 0.897514 -2.9108 -0.665063 -0.307959 0.680333 + 0.801264 0.905924 -2.92711 -0.874384 -0.202992 0.440735 + 0.822361 0.674792 -2.98997 -0.462891 -0.501642 0.730813 + 0.823056 0.706647 -2.98622 -0.458703 -0.203063 0.865076 + 0.826877 0.779219 -2.95694 -0.466963 -0.338022 0.817121 + 0.833718 0.777782 -2.95507 -0.0954386 -0.399931 0.911563 + 0.841954 0.890798 -2.89992 -0.0969014 -0.441116 0.892203 + 0.830536 0.893194 -2.90304 -0.470514 -0.373588 0.799405 + 0.836878 1.00552 -2.84532 -0.477814 -0.391402 0.786446 + 0.8192 1.01195 -2.85771 -0.672451 -0.319296 0.667728 + 0.859798 0.890231 -2.90282 0.202751 -0.452229 0.868551 + 0.875466 1.00218 -2.84643 0.200141 -0.477651 0.855449 + 0.848297 1.00313 -2.84221 -0.105753 -0.466369 0.878246 + 0.908684 1.00316 -2.85679 0.470976 -0.464217 0.750123 + 0.931966 1.11365 -2.80007 0.488923 -0.465928 0.737472 + 0.885064 1.11308 -2.78374 0.204333 -0.488674 0.848201 + 0.857895 1.11402 -2.77952 -0.139748 -0.468734 0.872215 + 0.95616 1.11954 -2.82119 0.869869 -0.337797 0.359473 + 0.971665 1.21119 -2.77979 0.891112 -0.313301 0.328271 + 0.944055 1.19838 -2.75499 0.5148 -0.458275 0.724545 + 0.897154 1.19781 -2.73866 0.200184 -0.475786 0.856478 + 0.960425 1.13325 -2.85572 0.981694 -0.184667 0.0466304 + 0.975929 1.22491 -2.81432 0.982269 -0.183722 0.0373476 + 0.988035 1.29495 -2.78707 0.984449 -0.169569 0.0458892 + 0.983141 1.28138 -2.74361 0.887274 -0.273865 0.371138 + 0.955531 1.26856 -2.7188 0.500711 -0.389928 0.772816 + 0.963241 1.14511 -2.88537 0.987696 -0.155803 0.0135023 + 0.978886 1.23475 -2.85543 0.983966 -0.178071 0.0100942 + 0.990991 1.30479 -2.82818 0.985617 -0.167205 0.0245254 + 1.0024 1.37945 -2.80967 0.985122 -0.168223 0.035168 + 0.998719 1.37202 -2.76552 0.985564 -0.147887 0.0824256 + 0.965306 1.15935 -2.92069 0.974438 -0.121203 -0.189156 + 0.98095 1.249 -2.89075 0.981216 -0.151818 -0.119026 + 0.991593 1.30264 -2.87929 0.983173 -0.146881 -0.108614 + 1.003 1.3773 -2.86079 0.988694 -0.0982873 -0.113239 + 0.957508 1.16939 -2.94333 0.884532 -0.0546885 -0.463262 + 0.973979 1.25621 -2.92398 0.908274 -0.0804567 -0.410566 + 0.984621 1.30985 -2.91253 0.9153 -0.069382 -0.396751 + 0.994655 1.36584 -2.89536 0.92607 -0.01737 -0.376951 + 0.94395 1.17894 -2.96344 0.635193 0.0479606 -0.770863 + 0.960421 1.26577 -2.94409 0.657157 0.014158 -0.753621 + 0.967627 1.31704 -2.93891 0.655652 0.0455098 -0.753691 + 0.977661 1.37303 -2.92174 0.726886 0.066789 -0.683503 + 0.920591 1.05555 -2.98861 0.523067 0.092324 -0.847276 + 0.893041 1.06284 -2.99979 0.250513 0.13904 -0.958077 + 0.916401 1.18623 -2.97462 0.331534 0.119403 -0.935857 + 0.923632 1.28072 -2.96087 0.333564 0.0919017 -0.938237 + 0.930838 1.33198 -2.95569 0.32228 0.100601 -0.941284 + 0.862015 1.06673 -3.00185 -0.0930138 0.149708 -0.984345 + 0.863031 1.19676 -2.98754 -0.0262476 0.142536 -0.989442 + 0.870262 1.29124 -2.97378 -0.0348798 0.14459 -0.988877 + 0.867606 1.36449 -2.96342 -0.0869442 0.168138 -0.981922 + 0.829019 1.06609 -2.99239 -0.466055 0.1694 -0.868387 + 0.830034 1.19612 -2.97807 -0.578483 0.123211 -0.806335 + 0.82689 1.29929 -2.95643 -0.622048 0.116936 -0.774198 + 0.824235 1.37254 -2.94607 -0.619418 0.136247 -0.773148 + 0.878915 1.42316 -2.95133 -0.0380619 0.219382 -0.974896 + 0.807811 1.06184 -2.97689 -0.804075 0.136537 -0.578637 + 0.803656 1.18343 -2.94072 -0.892393 0.0765409 -0.444721 + 0.800511 1.2866 -2.91908 -0.905135 0.056257 -0.421386 + 0.79373 1.37437 -2.89337 -0.91074 -0.00292007 -0.412971 + 0.794835 1.04874 -2.94176 -0.979457 0.0351137 -0.198571 + 0.79068 1.17034 -2.9056 -0.98229 0.0251107 -0.185674 + 0.787186 1.25993 -2.87321 -0.988512 -0.00607771 -0.151021 + 0.792088 1.03432 -2.90586 -0.995417 -0.0572252 0.0766229 + 0.789111 1.14932 -2.85386 -0.992042 -0.0730683 0.102535 + 0.785618 1.23892 -2.82147 -0.991297 -0.0667583 0.113465 + 0.785555 1.27293 -2.80579 -0.987158 -0.13056 0.0920463 + 0.780405 1.34771 -2.8475 -0.977326 -0.0775253 -0.197035 + 0.801549 1.02036 -2.87402 -0.869399 -0.215553 0.444615 + 0.798572 1.13536 -2.82202 -0.875234 -0.210778 0.43536 + 0.799455 1.2115 -2.78489 -0.864011 -0.211666 0.456818 + 0.823078 1.12337 -2.79861 -0.676623 -0.321179 0.66259 + 0.823961 1.19951 -2.76147 -0.680204 -0.303292 0.667336 + 0.826657 1.2436 -2.73972 -0.655104 -0.327709 0.680768 + 0.799393 1.24551 -2.7692 -0.852055 -0.262258 0.453015 + 0.840756 1.11695 -2.78622 -0.510907 -0.384712 0.768746 + 0.8458 1.19538 -2.74415 -0.512158 -0.366866 0.776598 + 0.848495 1.23947 -2.7224 -0.525255 -0.346325 0.777281 + 0.848341 1.31858 -2.68862 -0.427432 -0.373272 0.823389 + 0.814154 1.31359 -2.71211 -0.596345 -0.401894 0.694877 + 0.862939 1.19246 -2.73746 -0.151772 -0.451115 0.879466 + 0.86694 1.2398 -2.71272 -0.156535 -0.411 0.898096 + 0.866786 1.3189 -2.67895 -0.147481 -0.343734 0.927414 + 0.901155 1.24515 -2.71393 0.176547 -0.412627 0.893627 + 0.910615 1.32677 -2.68468 0.203045 -0.35524 0.912457 + 0.88467 1.4419 -2.63615 0.0975733 -0.29901 0.949248 + 0.823145 1.42055 -2.64281 -0.254054 -0.36839 0.894285 + 0.788958 1.41557 -2.6663 -0.658524 -0.357761 0.662083 + 0.964992 1.35018 -2.68955 0.541089 -0.285627 0.790974 + 0.928499 1.44977 -2.64188 0.372655 -0.23721 0.89714 + 0.993825 1.35845 -2.72205 0.911373 -0.171806 0.374007 + 0.969471 1.43614 -2.67626 0.68521 -0.154782 0.711709 + 0.971492 1.50371 -2.66235 0.686943 -0.0475973 0.725151 + 0.93052 1.51733 -2.62797 0.380104 0.0317999 0.924397 + 0.998304 1.44441 -2.70876 0.883783 -0.132819 0.44865 + 0.983836 1.51751 -2.67543 0.757126 0.0418961 0.651924 + 0.940298 1.55651 -2.64549 0.447017 0.349456 0.823442 + 0.912714 1.52633 -2.6262 -0.240188 0.318376 0.917031 + 1.01339 1.45412 -2.75603 0.978367 -0.121227 0.167636 + 1.01435 1.51286 -2.74407 0.982578 0.0926606 0.161106 + 0.999264 1.50315 -2.6968 0.879387 -0.0311814 0.475086 + 0.979896 1.57252 -2.68028 0.716569 0.396413 0.573922 + 0.952642 1.57031 -2.65857 0.464902 0.418634 0.780135 + 1.01708 1.46156 -2.80018 0.998404 -0.0315648 -0.0468365 + 1.0123 1.53068 -2.77243 0.967634 0.250998 -0.0261525 + 0.995324 1.55816 -2.70165 0.900846 0.277037 0.334255 + 0.993265 1.57599 -2.73001 0.866177 0.485478 0.118526 + 0.965057 1.60113 -2.69687 0.535909 0.752794 0.382234 + 1.01122 1.47018 -2.83495 0.973282 0.0795468 -0.215392 + 1.00644 1.53931 -2.8072 0.930777 0.311429 -0.191484 + 1.00287 1.45872 -2.86952 0.917485 0.0800331 -0.389635 + 0.990762 1.54811 -2.84422 0.841094 0.39288 -0.371762 + 0.983454 1.59551 -2.77394 0.794316 0.604476 -0.0605886 + 0.955245 1.62066 -2.7408 0.484304 0.859181 0.165101 + 0.937803 1.59891 -2.67516 0.247132 0.744325 0.620408 + 0.971629 1.40838 -2.92362 0.655861 0.129806 -0.743637 + 0.996841 1.49407 -2.87139 0.903119 0.203476 -0.378119 + 0.964448 1.56129 -2.87568 0.546169 0.541281 -0.639308 + 0.967775 1.60432 -2.81096 0.657387 0.695881 -0.289123 + 0.942147 1.39065 -2.9436 0.374446 0.141876 -0.91633 + 0.970527 1.50724 -2.90286 0.590546 0.324545 -0.738868 + 0.941046 1.48951 -2.92284 0.286459 0.288637 -0.913581 + 0.934877 1.53478 -2.90699 0.18499 0.476648 -0.85941 + 0.947043 1.59822 -2.84888 0.316259 0.758959 -0.569175 + 0.872747 1.46842 -2.93547 0.154293 0.365492 -0.917938 + 0.917472 1.57171 -2.88019 0.184943 0.609851 -0.770634 + 0.925879 1.62295 -2.81582 0.0718792 0.909705 -0.408988 + 0.946612 1.62905 -2.77789 0.371293 0.925037 -0.0802927 + 0.911681 1.62195 -2.7056 0.117381 0.907897 0.402425 + 0.854955 1.47201 -2.93872 0.0327013 0.263722 -0.964044 + 0.89968 1.5753 -2.88344 0.280801 0.555829 -0.782435 + 0.905845 1.6127 -2.8457 0.327695 0.84772 -0.417117 + 0.910225 1.62389 -2.80914 -0.0735407 0.960341 -0.268956 + 0.903047 1.63034 -2.7427 0.0882651 0.99462 0.054223 + 0.827063 1.478 -2.93291 -0.480537 0.0809781 -0.873228 + 0.863711 1.54912 -2.92 0.268319 0.380992 -0.884788 + 0.869875 1.58653 -2.88225 0.057822 0.809352 -0.584471 + 0.879614 1.62164 -2.78774 -0.187019 0.951832 -0.242983 + 0.883994 1.63283 -2.75118 -0.0812795 0.994301 -0.0689816 + 0.805951 1.4555 -2.91233 -0.744406 0.0263358 -0.667208 + 0.792252 1.56646 -2.87796 -0.642678 0.398049 -0.654616 + 0.812857 1.57691 -2.88462 -0.389562 0.605829 -0.693695 + 0.835818 1.55511 -2.91418 -0.324844 0.469796 -0.820834 + 0.850232 1.58508 -2.88458 -0.0153157 0.804865 -0.59326 + 0.775446 1.45734 -2.85964 -0.898482 -0.0583242 -0.435118 + 0.77114 1.54396 -2.85738 -0.81786 0.134304 -0.559524 + 0.775063 1.59265 -2.82945 -0.513242 0.749024 -0.418982 + 0.795668 1.6031 -2.83612 -0.345461 0.910066 -0.22899 + 0.827271 1.60687 -2.85503 -0.0618566 0.900525 -0.430381 + 0.768206 1.41808 -2.82947 -0.948919 -0.135946 -0.284729 + 0.746557 1.53971 -2.81573 -0.906071 0.00205724 -0.42312 + 0.73274 1.58453 -2.77975 -0.825055 0.557522 -0.0919416 + 0.757324 1.58878 -2.8214 -0.614104 0.647941 -0.450609 + 0.769096 1.59685 -2.77483 -0.114859 0.990661 0.0734657 + 0.773356 1.3433 -2.78776 -0.966627 -0.238336 -0.0939651 + 0.739316 1.50045 -2.78555 -0.944983 -0.133906 -0.298457 + 0.726742 1.56403 -2.75754 -0.931549 0.260433 0.253754 + 0.751357 1.59298 -2.76679 -0.240599 0.890541 0.386068 + 0.78689 1.3155 -2.7416 -0.840496 -0.346318 0.416689 + 0.765923 1.35168 -2.76479 -0.936364 -0.35089 0.00990299 + 0.731883 1.50883 -2.76259 -0.984198 -0.114301 -0.135238 + 0.733332 1.50676 -2.73257 -0.943657 -0.00553194 0.33088 + 0.745359 1.57248 -2.74458 -0.697359 0.536889 0.474806 + 0.75944 1.41539 -2.71442 -0.852801 -0.309414 0.420705 + 0.738473 1.45156 -2.73762 -0.96379 -0.19406 0.18289 + 0.741668 1.50855 -2.71809 -0.909563 0.0675171 0.410045 + 0.753695 1.57426 -2.7301 -0.816777 0.482081 0.316975 + 0.772282 1.59501 -2.73269 -0.30776 0.942392 0.131077 + 0.777016 1.48688 -2.64992 -0.745128 -0.120863 0.655879 + 0.747498 1.4867 -2.69804 -0.93 -0.0932768 0.355526 + 0.760085 1.57115 -2.69963 -0.771774 0.448889 0.450404 + 0.778672 1.5919 -2.70222 -0.355355 0.879471 0.316628 + 0.793833 1.59155 -2.73908 0.0471479 0.99863 0.0226985 + 0.79043 1.50192 -2.63522 -0.601224 0.0167222 0.798906 + 0.765915 1.5493 -2.67958 -0.838299 0.223582 0.497258 + 0.779329 1.56435 -2.66489 -0.6216 0.494891 0.607204 + 0.796501 1.58053 -2.67512 -0.124875 0.83979 0.528354 + 0.811174 1.5928 -2.7105 0.00448316 0.984772 0.17379 + 0.814638 1.48823 -2.62312 -0.301328 -0.130506 0.944547 + 0.801154 1.54689 -2.63927 -0.382496 0.43066 0.817453 + 0.876163 1.50957 -2.61646 0.122089 0.0101106 0.992468 + 0.825363 1.5332 -2.62717 -0.192875 0.325132 0.925791 + 0.818326 1.56307 -2.64951 0.0231986 0.761024 0.648309 + 0.829003 1.58143 -2.6834 0.139615 0.876151 0.461375 + 0.891883 1.52196 -2.6212 0.294532 0.437669 0.849528 + 0.841083 1.54559 -2.63191 0.0869169 0.673175 0.734357 + 0.854762 1.55527 -2.65968 0.246094 0.802935 0.542894 + 0.849585 1.5812 -2.68906 0.028948 0.799637 0.599785 + 0.828368 1.59373 -2.71497 -0.146724 0.943731 0.296383 + 0.906756 1.51837 -2.62531 0.241505 0.178512 0.953839 + 0.892392 1.53419 -2.64619 0.365591 0.808455 0.461241 + 0.877519 1.53779 -2.64208 0.3016 0.825909 0.476352 + 0.875344 1.55504 -2.66534 0.0528466 0.701093 0.711109 + 0.900577 1.5312 -2.64834 -0.139518 0.805828 0.575479 + 0.898192 1.53722 -2.65553 -0.107253 0.322486 0.940478 + 0.890007 1.54021 -2.65338 0.225765 0.663121 0.713653 + 0.882551 1.55726 -2.66602 -0.230452 0.497604 0.836231 + 0.855766 1.58495 -2.69256 -0.287616 0.642058 0.710661 + 0.906535 1.53917 -2.64923 -0.819228 0.0445195 0.571737 + 0.897214 1.54243 -2.65405 -0.345225 0.0770661 0.93535 + 0.894531 1.56815 -2.66602 -0.482399 0.359026 0.798994 + 0.867746 1.59585 -2.69256 -0.452473 0.486781 0.747203 + 0.905557 1.54438 -2.64776 -0.730401 0.130773 0.670383 + 0.922492 1.56551 -2.64372 -0.0548526 0.535001 0.843069 + 0.911465 1.58928 -2.66198 -0.213208 0.576573 0.788737 + 0.885343 1.61232 -2.69242 -0.270854 0.684834 0.676492 + 0.867521 1.62475 -2.71665 -0.380702 0.828308 0.411063 + 0.849924 1.60828 -2.71679 -0.566754 0.663429 0.488521 + 0.834549 1.59748 -2.71847 -0.444904 0.799796 0.402973 + 0.887393 1.63128 -2.73602 -0.00295766 0.9891 0.147214 + 0.864122 1.6263 -2.73181 -0.418768 0.898419 0.132196 + 0.834941 1.60577 -2.74159 -0.591739 0.774122 0.224898 + 0.819566 1.59496 -2.74326 -0.424025 0.889941 0.16795 + 0.811027 1.59247 -2.74355 -0.158013 0.985071 0.0683118 + 0.859971 1.62019 -2.79007 -0.00638076 0.975498 -0.219917 + 0.85349 1.62504 -2.76183 -0.225497 0.974133 0.0147131 + 0.824309 1.60451 -2.7716 -0.574778 0.802247 0.161339 + 0.811736 1.59684 -2.77495 -0.409385 0.900436 0.147034 + 0.82079 1.61174 -2.82678 -0.344921 0.935104 -0.0813087 + 0.808217 1.60406 -2.83014 -0.287445 0.956637 0.0471191 + 0.803196 1.59435 -2.77524 -0.197297 0.972608 0.122916 + 0.790647 1.59339 -2.78122 0.0407557 0.991065 0.127002 + -0.987946 0.54202 -2.82794 -0.314751 -0.758104 -0.571148 + -0.992571 0.541618 -2.82296 -0.569927 -0.754823 -0.324693 + -1.00242 0.583273 -2.8373 -0.815654 -0.202245 -0.542039 + -0.976634 0.541924 -2.83037 0.100624 -0.766488 -0.634327 + -0.994128 0.540551 -2.81285 -0.642338 -0.764717 0.0510794 + -1.00847 0.581138 -2.81623 -0.983805 -0.178851 -0.0118184 + -1.00691 0.582204 -2.82634 -0.943677 -0.181814 -0.276437 + -0.997797 0.583674 -2.84229 -0.571961 -0.227226 -0.788181 + -0.986215 0.583895 -2.84767 -0.304596 -0.252698 -0.918349 + -1.00283 0.663444 -2.84326 -0.835847 -0.00616028 -0.548928 + -0.994011 0.664209 -2.85276 -0.576813 0.0030646 -0.816871 + -0.98243 0.664431 -2.85815 -0.313747 0.00128624 -0.949506 + -0.974903 0.583799 -2.8501 0.0217153 -0.287315 -0.95759 + -1.00732 0.662375 -2.83229 -0.959787 -0.0229856 -0.279786 + -1.01479 0.756517 -2.81332 -0.95891 -0.0201159 -0.282998 + -1.00774 0.761453 -2.82961 -0.833612 0.0594109 -0.549146 + -0.998922 0.76222 -2.83911 -0.577752 0.132626 -0.805366 + -1.01029 0.66034 -2.81301 -0.998687 -0.0512168 -0.00136146 + -1.01776 0.754481 -2.79404 -0.994497 -0.10342 -0.0167141 + -1.03214 0.858538 -2.75211 -0.985839 -0.16284 -0.0400509 + -1.02803 0.86965 -2.77662 -0.948941 -0.0583881 -0.310003 + -1.02098 0.874586 -2.79292 -0.830327 0.0456073 -0.555407 + -1.0061 0.579608 -2.80309 -0.923809 -0.190563 0.332058 + -1.00792 0.65881 -2.79987 -0.938901 -0.0955369 0.330663 + -1.01401 0.748649 -2.77438 -0.929067 -0.20081 0.310661 + -1.00127 0.578569 -2.79511 -0.709695 -0.217832 0.669986 + -0.998712 0.656831 -2.78467 -0.70851 -0.156058 0.688229 + -1.0048 0.746669 -2.75918 -0.699229 -0.308102 0.645098 + -1.01553 0.844499 -2.71281 -0.693573 -0.408079 0.593657 + -1.02839 0.852705 -2.73245 -0.922258 -0.280452 0.266057 + -0.989302 0.539512 -2.80488 -0.405061 -0.796087 0.449633 + -0.987738 0.577242 -2.78706 -0.369587 -0.249088 0.895187 + -0.985181 0.655504 -2.77662 -0.378359 -0.202362 0.903269 + -0.983544 0.743223 -2.74693 -0.368515 -0.363068 0.855791 + -0.964997 0.54048 -2.8207 0.474206 -0.819737 -0.321187 + -0.965146 0.539398 -2.81088 0.491292 -0.86562 0.0966106 + -0.969837 0.538851 -2.80456 0.327982 -0.876319 0.352835 + -0.975509 0.538725 -2.80177 0.0185124 -0.842729 0.53802 + -0.958226 0.58268 -2.84484 0.432045 -0.335508 -0.837121 + -0.946589 0.581236 -2.83517 0.676192 -0.372969 -0.635342 + -0.93824 0.5794 -2.82101 0.867774 -0.417927 -0.268896 + -0.93839 0.578319 -2.81119 0.895972 -0.43483 0.0903149 + -0.944182 0.663127 -2.85751 0.467419 -0.0700287 -0.881258 + -0.921991 0.660374 -2.83908 0.74617 -0.123118 -0.654273 + -0.913643 0.658539 -2.82492 0.937074 -0.192651 -0.291167 + -0.96086 0.664247 -2.86277 0.0563659 -0.0250413 -0.998096 + -0.959166 0.764559 -2.85158 0.0537748 0.187621 -0.980768 + -0.932966 0.762391 -2.84343 0.485805 0.152339 -0.860689 + -0.910775 0.759637 -2.825 0.756753 0.0901468 -0.647456 + -0.980736 0.764743 -2.84695 -0.304099 0.179204 -0.935633 + -0.990514 0.882944 -2.81263 -0.30217 0.236289 -0.923505 + -0.960445 0.886619 -2.81796 0.0612607 0.275325 -0.959397 + -0.934244 0.884451 -2.80981 0.476268 0.247302 -0.843807 + -1.0087 0.88042 -2.8048 -0.569491 0.158833 -0.806506 + -1.02948 0.984916 -2.773 -0.513901 0.119045 -0.849549 + -0.999928 0.98995 -2.78141 -0.246516 0.216802 -0.944577 + -0.969859 0.993627 -2.78674 0.0678551 0.286352 -0.955719 + -1.04177 0.979082 -2.76111 -0.809357 -0.0504991 -0.585142 + -1.07819 1.07044 -2.72921 -0.786941 -0.0644471 -0.613653 + -1.05317 1.08021 -2.74869 -0.467517 0.108565 -0.877292 + -1.02362 1.08524 -2.75711 -0.136557 0.231771 -0.963138 + -1.05198 0.967463 -2.73606 -0.93176 -0.161194 -0.32533 + -1.0884 1.05881 -2.70415 -0.934144 -0.221527 -0.279822 + -1.1102 1.13024 -2.67529 -0.962788 -0.170737 -0.209495 + -1.09758 1.13993 -2.71023 -0.803817 -0.0485517 -0.592892 + -1.07256 1.1497 -2.72971 -0.451082 0.111016 -0.885551 + -1.05609 0.956349 -2.71154 -0.959942 -0.271394 -0.0696948 + -1.08784 1.03906 -2.65981 -0.927381 -0.334875 -0.1668 + -1.10964 1.11049 -2.63095 -0.973536 -0.159467 -0.1637 + -1.04433 0.934346 -2.68809 -0.884365 -0.395589 0.247806 + -1.07608 1.01706 -2.63636 -0.757746 -0.613392 -0.222645 + -1.10668 1.01755 -2.59929 -0.828392 -0.202933 -0.522097 + -1.11904 1.09943 -2.58885 -0.927921 -0.0735344 -0.365452 + -1.11888 1.17747 -2.60983 -0.982429 -0.141328 -0.121902 + -1.03147 0.926142 -2.66845 -0.694617 -0.511805 0.505532 + -1.03839 0.968117 -2.63106 -0.684226 -0.727598 0.0493492 + -1.0459 0.957702 -2.60835 -0.184515 -0.37947 -0.906618 + -1.0836 1.00664 -2.61366 -0.592849 -0.434478 -0.678056 + -0.999984 0.910055 -2.65635 -0.372424 -0.582502 0.72249 + -1.00689 0.95203 -2.61896 -0.331301 -0.938719 0.0951107 + -1.01399 0.943052 -2.6019 0.129016 -0.445886 -0.885743 + -1.04918 0.898729 -2.61392 -0.0529593 0.0569046 -0.996974 + -1.07173 0.899269 -2.60639 -0.405539 -0.00624258 -0.914056 + -0.994271 0.841053 -2.70056 -0.365717 -0.47914 0.797919 + -0.963302 0.907958 -2.64809 -0.151555 -0.634684 0.757764 + -0.968171 0.946924 -2.60376 0.0340642 -0.987818 0.151841 + -0.97527 0.937947 -2.5867 0.418812 -0.50291 -0.756094 + -1.01727 0.884079 -2.60747 0.307674 0.0320804 -0.950951 + -0.957588 0.838956 -2.6923 -0.118971 -0.495253 0.860564 + -0.935371 0.839004 -2.69171 0.208339 -0.498087 0.841727 + -0.930745 0.916726 -2.63758 0.198954 -0.67443 0.711028 + -0.935615 0.955693 -2.59324 0.395482 -0.858067 0.32759 + -0.957243 0.741721 -2.74101 -0.124383 -0.381788 0.915842 + -0.935026 0.741769 -2.74041 0.211622 -0.38868 0.896741 + -0.920299 0.842552 -2.6982 0.549024 -0.438814 0.711347 + -0.915673 0.920278 -2.64408 0.57365 -0.56935 0.588868 + -0.895865 0.994424 -2.56815 0.752412 -0.588411 0.296054 + -0.958881 0.654004 -2.7707 -0.120793 -0.232502 0.965066 + -0.944736 0.653521 -2.77047 0.216364 -0.27377 0.937143 + -0.924211 0.742007 -2.74573 0.54312 -0.34933 0.763537 + -0.973945 0.576454 -2.78396 -0.130357 -0.2819 0.950547 + -0.9598 0.575973 -2.78373 0.206821 -0.349201 0.913938 + -0.954129 0.576099 -2.78652 0.518299 -0.395967 0.758008 + -0.933921 0.65376 -2.77579 0.54817 -0.289151 0.784793 + -0.91239 0.745039 -2.75548 0.723318 -0.306289 0.618869 + -0.946598 0.576588 -2.79314 0.686164 -0.416993 0.596068 + -0.92639 0.654249 -2.78241 0.720128 -0.286822 0.631783 + -0.903445 0.746082 -2.76754 0.884646 -0.241201 0.399029 + -0.896025 0.852877 -2.72309 0.891074 -0.267069 0.366963 + -0.908478 0.845585 -2.70795 0.727199 -0.366495 0.580398 + -0.941907 0.577135 -2.79946 0.819992 -0.429957 0.377822 + -0.917445 0.655293 -2.79446 0.875863 -0.274623 0.396796 + -0.897932 0.751349 -2.78499 0.98174 -0.150554 0.116279 + -0.913927 0.656476 -2.8062 0.962182 -0.246831 0.11524 + -0.897648 0.753411 -2.80372 0.961171 -0.0370835 -0.273451 + -0.890144 0.868814 -2.76442 0.960253 0.0147177 -0.278741 + -0.890512 0.858144 -2.74054 0.983523 -0.144417 0.108748 + -0.903272 0.875039 -2.78571 0.760855 0.163609 -0.627959 + -0.896103 0.980307 -2.74972 0.735065 0.154117 -0.660248 + -0.877059 0.968103 -2.72052 0.9489 -0.0632538 -0.309173 + -0.877426 0.957433 -2.69664 0.977035 -0.203195 0.0641377 + -0.885224 0.944204 -2.66774 0.895272 -0.314113 0.315945 + -0.927075 0.98972 -2.77383 0.483844 0.279546 -0.829306 + -0.929983 1.08219 -2.74118 0.396745 0.276298 -0.875359 + -0.870745 1.07144 -2.71135 0.692486 0.143328 -0.707051 + -0.8517 1.05924 -2.68214 0.973654 -0.115735 -0.196477 + -0.972767 1.0861 -2.75409 0.18173 0.303736 -0.935264 + -0.982147 1.15875 -2.73476 0.176171 0.238138 -0.95512 + -0.92431 1.14823 -2.71871 0.39196 0.236135 -0.889161 + -0.865072 1.13749 -2.68888 0.675691 0.15232 -0.721276 + -1.033 1.1579 -2.73778 -0.0890978 0.208882 -0.973874 + -1.04063 1.20456 -2.72877 -0.0802344 0.17825 -0.980709 + -0.985439 1.21494 -2.72337 0.171817 0.205438 -0.96347 + -0.927602 1.20442 -2.70733 0.379789 0.193926 -0.904518 + -1.08019 1.19637 -2.72071 -0.446707 0.1081 -0.888125 + -1.05709 1.25883 -2.71753 -0.13398 0.195056 -0.971598 + -1.0019 1.26921 -2.71213 0.0225795 0.210716 -0.977286 + -0.984992 1.30116 -2.70562 0.140018 0.185003 -0.972712 + -1.10738 1.18459 -2.69952 -0.805599 -0.0198727 -0.592128 + -1.11733 1.24921 -2.68462 -0.794659 0.0311664 -0.606255 + -1.09014 1.26099 -2.7058 -0.485336 0.12697 -0.865059 + -1.07067 1.34969 -2.69638 -0.180003 0.238498 -0.954315 + -1.05377 1.38164 -2.68987 -0.106737 0.242077 -0.964368 + -1.12001 1.17491 -2.66458 -0.972212 -0.163175 -0.167862 + -1.13216 1.23954 -2.65219 -0.974899 -0.0986769 -0.199586 + -1.12611 1.3255 -2.66586 -0.836427 0.12502 -0.533629 + -1.10373 1.35185 -2.68466 -0.564978 0.229499 -0.792546 + -1.13103 1.2421 -2.59744 -0.966651 -0.194082 -0.167089 + -1.14094 1.31582 -2.63344 -0.948642 0.019755 -0.315733 + -1.12174 1.38945 -2.64227 -0.842108 0.353837 -0.407005 + -1.09936 1.4158 -2.66107 -0.672427 0.52691 -0.519815 + -1.07108 1.41769 -2.67773 -0.276262 0.482141 -0.831396 + -1.14208 1.23005 -2.55351 -0.871477 -0.182165 -0.45535 + -1.15182 1.31268 -2.59848 -0.95788 -0.0562028 -0.281614 + -1.14786 1.37391 -2.57907 -0.920862 0.340431 -0.190051 + -1.13698 1.37706 -2.61403 -0.904803 0.30131 -0.300904 + -1.12827 1.16642 -2.56773 -0.916539 -0.061185 -0.395238 + -1.16281 1.20696 -2.51987 -0.92866 -0.141896 -0.342717 + -1.16287 1.30063 -2.55454 -0.953061 -0.0623715 -0.296284 + -1.14901 1.14333 -2.53409 -0.931537 -0.0856704 -0.353411 + -1.16746 1.19466 -2.47423 -0.981166 -0.192589 -0.0149439 + -1.17659 1.27611 -2.50215 -0.980289 -0.0477509 -0.191711 + -1.17577 1.33363 -2.48915 -0.97345 0.196955 -0.116637 + -1.16205 1.35816 -2.54154 -0.934091 0.318295 -0.16175 + -1.13759 1.0955 -2.55319 -0.933664 -0.0882777 -0.347099 + -1.14487 1.08771 -2.51268 -0.982363 -0.17545 -0.0646565 + -1.15628 1.13553 -2.49358 -0.979493 -0.197892 -0.0378522 + -1.16203 1.19729 -2.42483 -0.96313 -0.212242 0.165327 + -1.18124 1.2638 -2.45652 -0.995258 -0.0882707 0.0408512 + -1.12524 1.01362 -2.56363 -0.932185 -0.114105 -0.343527 + -1.13119 1.0094 -2.5323 -0.985767 -0.153511 -0.0685375 + -1.14009 1.08092 -2.46934 -0.968452 -0.216815 0.122851 + -1.15085 1.13817 -2.44417 -0.960275 -0.239364 0.143447 + -1.09481 0.910179 -2.59202 -0.704523 -0.0747894 -0.705729 + -1.10833 0.908268 -2.57246 -0.913468 -0.0840931 -0.398127 + -1.11428 0.904054 -2.54113 -0.991308 -0.12334 -0.0457847 + -1.12641 1.00262 -2.48896 -0.966953 -0.200898 0.156975 + -1.13367 1.07878 -2.43703 -0.929554 -0.265516 0.255794 + -1.08755 0.812336 -2.59548 -0.716041 0.0111244 -0.697969 + -1.10107 0.810427 -2.57592 -0.918004 -0.0165467 -0.396226 + -1.10538 0.80779 -2.55604 -0.997308 -0.0511498 -0.052539 + -1.11079 0.899823 -2.51437 -0.972073 -0.15423 0.176883 + -1.07207 0.812925 -2.60711 -0.464603 0.0257185 -0.885145 + -1.08934 0.722745 -2.59886 -0.72634 0.0638837 -0.68436 + -1.09904 0.721375 -2.58483 -0.919626 0.0253502 -0.391975 + -1.10334 0.71874 -2.56495 -0.998755 -0.0314128 -0.0387619 + -1.10189 0.803559 -2.52927 -0.964486 -0.0998696 0.244527 + -1.04952 0.812386 -2.61464 -0.0957679 0.0246049 -0.9951 + -1.05769 0.722945 -2.61589 -0.11051 0.0712287 -0.991319 + -1.07386 0.723332 -2.61049 -0.464771 0.0795255 -0.881852 + -1.07647 0.635409 -2.62083 -0.465279 0.146974 -0.872877 + -1.08626 0.635036 -2.61347 -0.722362 0.10618 -0.683315 + -1.02754 0.810431 -2.61238 0.256405 0.00952811 -0.966522 + -1.03571 0.720992 -2.61362 0.265148 0.0393083 -0.963406 + -1.0464 0.633785 -2.62479 0.26744 0.132617 -0.954405 + -1.0603 0.635021 -2.62623 -0.0989332 0.158532 -0.982385 + -0.998872 0.806418 -2.59956 0.546377 -0.037292 -0.836709 + -1.01516 0.718116 -2.60443 0.548501 -0.00795568 -0.836112 + -1.02585 0.630909 -2.6156 0.561694 0.0751344 -0.823927 + -0.988605 0.880068 -2.59465 0.48462 -0.0115258 -0.874649 + -0.982965 0.80307 -2.58489 0.797365 -0.1232 -0.590789 + -0.999249 0.714768 -2.58976 0.818729 -0.0850094 -0.567853 + -1.01579 0.628792 -2.60633 0.824133 -0.0222502 -0.565959 + -1.04 0.546065 -2.63712 0.544353 -0.00889895 -0.838809 + -0.946387 0.944402 -2.56808 0.641839 -0.436344 -0.630593 + -0.959722 0.886523 -2.57604 0.732243 -0.142287 -0.666014 + -0.974575 0.799283 -2.56353 0.934766 -0.196028 -0.296286 + -0.993234 0.71205 -2.57445 0.945974 -0.146481 -0.289268 + -1.00978 0.626076 -2.59102 0.952396 -0.113574 -0.282919 + -0.906638 0.983132 -2.54299 0.872801 -0.483719 -0.0650645 + -0.951332 0.882736 -2.55468 0.919928 -0.28694 -0.267203 + -0.971928 0.796861 -2.54853 0.971119 -0.235169 -0.0403012 + -0.990587 0.70963 -2.55944 0.97929 -0.200358 -0.0291048 + -1.0081 0.624545 -2.58153 0.980802 -0.192545 -0.0308896 + -0.868778 1.06759 -2.53626 0.949754 -0.235756 0.20588 + -0.901376 0.991044 -2.52247 0.858472 -0.389563 0.333567 + -0.94607 0.890647 -2.53416 0.936379 -0.35099 0.00107427 + -0.974151 0.795004 -2.53492 0.901483 -0.272687 0.33611 + -0.992181 0.708298 -2.54969 0.903423 -0.259877 0.341015 + -0.87787 1.01106 -2.57668 0.878134 -0.395548 0.269114 + -0.86407 1.08456 -2.57384 0.979385 -0.173585 0.103312 + -0.861687 1.11392 -2.56091 0.978598 -0.167926 0.11894 + -0.866668 1.10639 -2.51694 0.947761 -0.203811 0.245379 + -0.882104 1.09696 -2.48575 0.784606 -0.298018 0.543672 + -0.884215 1.05816 -2.50507 0.791205 -0.320051 0.521116 + -0.897678 0.936912 -2.6526 0.773609 -0.457386 0.438552 + -0.873162 1.02803 -2.61425 0.965281 -0.241889 0.098597 + -0.854529 1.09843 -2.61509 0.956135 -0.22225 0.190814 + -0.865363 1.04126 -2.64315 0.950426 -0.257208 0.174742 + -0.840866 1.11642 -2.65408 0.982724 -0.0997397 -0.155904 + -0.837332 1.14079 -2.6466 0.979192 -0.0863826 -0.183631 + -0.852146 1.12779 -2.60216 0.956995 -0.206165 0.204099 + -0.861538 1.16186 -2.68141 0.692888 0.152478 -0.704738 + -0.868219 1.24203 -2.66812 0.574125 0.158542 -0.803271 + -0.833628 1.23334 -2.64018 0.855648 0.0787174 -0.511537 + -0.831071 1.17745 -2.63209 0.988874 -0.12975 -0.0727619 + -0.845885 1.16446 -2.58764 0.947227 -0.255703 0.193329 + -0.934282 1.28459 -2.69404 0.364794 0.175382 -0.914422 + -0.938761 1.37007 -2.67991 0.370436 0.210525 -0.904686 + -0.890704 1.39669 -2.64796 0.555286 0.257318 -0.790851 + -0.856113 1.388 -2.62003 0.800786 0.230611 -0.552776 + -0.989471 1.38663 -2.69149 0.118226 0.249029 -0.961253 + -0.94975 1.43807 -2.66388 0.28463 0.384371 -0.878205 + -0.901693 1.4647 -2.63194 0.39648 0.78005 -0.484072 + -0.880149 1.47123 -2.59456 0.309016 0.882258 -0.355148 + -0.860366 1.44322 -2.59861 0.765271 0.403725 -0.501364 + -1.00678 1.42268 -2.67934 -0.00878301 0.438802 -0.898541 + -0.984619 1.43677 -2.67203 0.091524 0.393432 -0.914787 + -0.947564 1.47536 -2.64032 0.317784 0.868931 -0.379435 + -0.920867 1.45928 -2.62568 0.00754016 0.935387 0.353545 + -0.899324 1.46581 -2.5883 -0.338502 0.940963 0.00201027 + -1.05423 1.44533 -2.65705 -0.257718 0.683011 -0.68343 + -1.03207 1.45942 -2.64973 -0.172442 0.66318 -0.728324 + -0.982433 1.47406 -2.64846 0.0170604 0.710272 -0.70372 + -0.968794 1.48219 -2.62952 0.131853 0.980579 0.145185 + -0.942097 1.46611 -2.61488 0.339007 0.806508 0.484375 + -1.08251 1.44345 -2.64039 -0.528518 0.689857 -0.494738 + -1.06681 1.46496 -2.62013 -0.320482 0.885042 -0.337626 + -1.04387 1.46803 -2.63609 -0.297217 0.870988 -0.391206 + -0.994238 1.48267 -2.63483 -0.113418 0.983473 -0.141127 + -1.00639 1.47073 -2.61217 0.0165182 0.857013 0.51503 + -1.09875 1.45047 -2.60848 -0.700871 0.635293 -0.324317 + -1.08305 1.47199 -2.58823 -0.251531 0.967592 -0.0223144 + -1.05477 1.46814 -2.60152 0.0747224 0.986398 0.146409 + -1.03184 1.47121 -2.61748 -0.137016 0.985399 0.101065 + -1.11399 1.43808 -2.58024 -0.851421 0.515949 -0.0942342 + -1.09815 1.46439 -2.55821 -0.427883 0.864768 0.262854 + -1.07211 1.46623 -2.58029 0.266523 0.90494 0.331737 + -1.12543 1.41096 -2.55294 -0.858748 0.512325 0.00866501 + -1.10958 1.43727 -2.53091 -0.809966 0.586366 -0.0113725 + -1.0872 1.45862 -2.55028 0.092161 0.902814 0.420039 + -1.05158 1.44868 -2.55174 0.311533 0.870532 0.380948 + -1.13962 1.39521 -2.51541 -0.823225 0.544266 -0.161477 + -1.12271 1.42414 -2.49449 -0.77304 0.612434 -0.165331 + -1.10257 1.4502 -2.51064 -0.299789 0.941673 0.152899 + -1.08047 1.43007 -2.47989 0.376654 0.853787 0.359415 + -1.0651 1.43849 -2.51953 0.365384 0.852791 0.373151 + -1.16035 1.38697 -2.47996 -0.880904 0.437562 -0.180407 + -1.14345 1.41591 -2.45904 -0.746913 0.66481 -0.0122075 + -1.1157 1.43707 -2.47422 -0.296097 0.947993 0.11677 + -1.17934 1.31858 -2.44536 -0.986818 0.127857 0.0992117 + -1.16392 1.37191 -2.43618 -0.923474 0.334044 0.188704 + -1.14797 1.4016 -2.42365 -0.817402 0.519555 0.248833 + -1.12068 1.42832 -2.43095 -0.202895 0.94604 0.252669 + -1.16889 1.31433 -2.39827 -0.94343 0.166749 0.286592 + -1.1542 1.34868 -2.39596 -0.866943 0.32898 0.374409 + -1.13825 1.37837 -2.38343 -0.881053 0.316462 0.351563 + -1.12732 1.39703 -2.37291 -0.529964 0.647941 0.547092 + -1.12521 1.41402 -2.39556 -0.350048 0.839598 0.415381 + -1.17078 1.25956 -2.40942 -0.969906 -0.093237 0.22492 + -1.16267 1.24834 -2.38147 -0.931278 -0.153555 0.330367 + -1.16159 1.27016 -2.37019 -0.912586 -0.0845404 0.400049 + -1.16229 1.3028 -2.37069 -0.907364 0.131461 0.39926 + -1.1476 1.33715 -2.36837 -0.883226 0.307158 0.354352 + -1.15392 1.18608 -2.39687 -0.932328 -0.232701 0.276793 + -1.14588 1.18477 -2.37766 -0.793191 -0.286797 0.537211 + -1.1448 1.20659 -2.36638 -0.662665 -0.263007 0.701215 + -1.14957 1.27336 -2.35176 -0.668089 -0.106751 0.736383 + -1.15027 1.30599 -2.35226 -0.788477 0.0708074 0.610974 + -1.14443 1.13603 -2.41186 -0.924183 -0.273419 0.266698 + -1.1364 1.13472 -2.39265 -0.623701 -0.392 0.676264 + -1.11827 1.21179 -2.35083 -0.32055 -0.321119 0.89114 + -1.12305 1.27855 -2.33621 -0.444598 -0.212916 0.870057 + -1.12625 1.07567 -2.41973 -0.638675 -0.380241 0.668963 + -1.0902 1.07266 -2.41137 -0.121017 -0.383263 0.915677 + -1.10035 1.13172 -2.38429 -0.129938 -0.43067 0.893107 + -1.09442 1.18844 -2.3562 -0.116724 -0.426738 0.896811 + -1.05547 1.29095 -2.308 -0.219863 -0.323458 0.920345 + -1.11906 0.99834 -2.46379 -0.926896 -0.238494 0.289801 + -1.11163 0.995224 -2.44649 -0.649722 -0.320546 0.689283 + -1.08301 0.991956 -2.43864 -0.147539 -0.316111 0.93718 + -1.02824 1.06834 -2.41296 0.11534 -0.358159 0.926509 + -1.03359 1.12844 -2.38576 0.0974313 -0.429509 0.897791 + -1.10344 0.895543 -2.48919 -0.855178 -0.230617 0.464205 + -1.08971 0.892558 -2.47588 -0.501698 -0.292002 0.814269 + -1.06108 0.889287 -2.46803 -0.176379 -0.264115 0.948227 + -1.02105 0.987635 -2.44024 0.144667 -0.28957 0.946161 + -0.976925 1.05923 -2.42945 0.406835 -0.341488 0.847273 + -1.0945 0.800461 -2.51207 -0.82724 -0.159649 0.538689 + -1.08077 0.797475 -2.49876 -0.528353 -0.206582 0.823509 + -1.0614 0.795053 -2.49203 -0.219275 -0.227354 0.948804 + -1.0297 0.886628 -2.46568 0.0942056 -0.248579 0.96402 + -1.09345 0.712609 -2.52855 -0.824138 -0.154251 0.54498 + -1.08361 0.710468 -2.51901 -0.537036 -0.224478 0.813143 + -1.06424 0.708045 -2.51229 -0.220167 -0.267298 0.938125 + -1.03002 0.792394 -2.48968 0.124432 -0.250754 0.96002 + -0.991862 0.88563 -2.47769 0.498035 -0.264229 0.82592 + -1.10084 0.715706 -2.54576 -0.963889 -0.0867551 0.251777 + -1.09617 0.628966 -2.56769 -0.958431 -0.1488 0.24345 + -1.0915 0.627008 -2.55681 -0.820519 -0.238549 0.519464 + -1.08166 0.624867 -2.54726 -0.530318 -0.328996 0.78136 + -1.09868 0.632 -2.58687 -0.99689 -0.0619289 -0.0487431 + -1.09027 0.546235 -2.61337 -0.976583 -0.203776 -0.069003 + -1.08899 0.544675 -2.60351 -0.934365 -0.294292 0.200884 + -1.08432 0.542717 -2.59263 -0.791189 -0.393918 0.467813 + -1.09595 0.633667 -2.59945 -0.921519 0.0295332 -0.38721 + -1.08755 0.547902 -2.62594 -0.906116 -0.0936438 -0.412535 + -1.0736 0.503052 -2.63077 -0.657908 -0.698812 -0.280747 + -1.07232 0.501492 -2.6209 -0.5838 -0.803005 0.119837 + -1.08257 0.548607 -2.63315 -0.722697 -0.00993852 -0.691093 + -1.06862 0.503757 -2.63797 -0.43344 -0.630561 -0.643834 + -1.04974 0.502079 -2.63603 0.422817 -0.686014 -0.592124 + -1.06726 0.500393 -2.61599 -0.293236 -0.877788 0.378816 + -1.07925 0.541618 -2.58772 -0.521292 -0.480551 0.705213 + -1.07278 0.548979 -2.6405 -0.460169 0.0463358 -0.886622 + -1.06447 0.54878 -2.64328 -0.112793 0.0671714 -0.991345 + -1.06031 0.503558 -2.64075 -0.00466644 -0.612756 -0.790258 + -1.05057 0.547545 -2.64185 0.268025 0.0477428 -0.962228 + -1.02995 0.543948 -2.62785 0.809955 -0.125096 -0.572995 + -1.04665 0.500682 -2.62816 0.554375 -0.805866 -0.207959 + -1.02685 0.542552 -2.61998 0.926257 -0.225626 -0.301896 + -1.02518 0.541021 -2.61049 0.947032 -0.316871 -0.0521857 + -1.04747 0.499998 -2.62314 0.470175 -0.872482 0.133079 + -1.026 0.540337 -2.60548 0.860336 -0.419876 0.28901 + -1.03266 0.539402 -2.59588 0.688047 -0.48246 0.542055 + -1.05569 0.499412 -2.61513 0.147088 -0.899721 0.410934 + -1.05544 0.539107 -2.5826 0.0808372 -0.541862 0.836571 + -1.06701 0.540086 -2.58347 -0.222008 -0.524589 0.8219 + -1.0097 0.623214 -2.57178 0.895208 -0.292463 0.336255 + -1.01635 0.62228 -2.56218 0.730253 -0.346055 0.589048 + -1.04087 0.538816 -2.58787 0.468018 -0.521577 0.713384 + -1.04691 0.621429 -2.54133 0.105559 -0.398375 0.911128 + -1.06941 0.623335 -2.54301 -0.227649 -0.374916 0.898674 + -1.00271 0.706819 -2.53452 0.740571 -0.287232 0.607497 + -1.03234 0.621138 -2.54659 0.488824 -0.386642 0.782023 + -1.01869 0.705681 -2.51892 0.508876 -0.303807 0.805448 + -1.04174 0.706138 -2.5106 0.108581 -0.296112 0.948961 + -0.984676 0.793525 -2.51975 0.742323 -0.268092 0.61407 + -0.948293 0.888791 -2.52055 0.845078 -0.322484 0.426435 + -0.969564 0.887221 -2.49944 0.684999 -0.270924 0.676296 + -1.00697 0.791935 -2.498 0.51377 -0.263712 0.816392 + -0.926244 0.989602 -2.50043 0.660527 -0.31281 0.682535 + -0.947515 0.988032 -2.47932 0.635129 -0.288974 0.716313 + -0.909084 1.05672 -2.48303 0.614267 -0.367071 0.698524 + -0.94123 1.06063 -2.45651 0.56421 -0.377053 0.734506 + -0.983211 0.986638 -2.45225 0.443925 -0.279269 0.851434 + -0.909294 1.08518 -2.46457 0.606607 -0.376106 0.700409 + -0.941441 1.08909 -2.43805 0.532076 -0.394407 0.749226 + -0.871687 1.15593 -2.47057 0.810704 -0.268079 0.520473 + -0.898877 1.14416 -2.44938 0.669766 -0.327231 0.666583 + -0.929246 1.15389 -2.41 0.563535 -0.376751 0.735178 + -0.982273 1.11932 -2.40225 0.312706 -0.407609 0.857945 + -0.856009 1.16132 -2.50709 0.945087 -0.228352 0.233808 + -0.855299 1.23129 -2.46941 0.894735 -0.194911 0.401819 + -0.875496 1.23743 -2.42759 0.796799 -0.267322 0.541895 + -0.905865 1.24716 -2.38821 0.690921 -0.389738 0.608878 + -0.970078 1.18412 -2.3742 0.384688 -0.480377 0.788196 + -0.851029 1.16885 -2.55106 0.961848 -0.248345 0.114771 + -0.829275 1.24505 -2.54502 0.97641 -0.118939 0.180213 + -0.839621 1.23668 -2.50593 0.950809 -0.132504 0.280009 + -0.85271 1.29318 -2.44602 0.953834 -0.0165858 0.299875 + -0.824131 1.24066 -2.58161 0.994979 -0.0936058 0.0354266 + -0.831513 1.32636 -2.53217 0.980253 0.0789056 0.181322 + -0.841858 1.31798 -2.49307 0.951932 0.0791292 0.295911 + -0.85511 1.31488 -2.44981 0.952903 0.156852 0.259565 + -0.826689 1.29654 -2.58971 0.982066 0.109822 -0.153249 + -0.830941 1.35176 -2.56829 0.982874 0.16182 -0.0881616 + -0.851209 1.42879 -2.51838 0.929606 0.220327 0.295445 + -0.869253 1.38921 -2.46263 0.833821 0.316261 0.452463 + -0.882504 1.38611 -2.41937 0.905215 0.348195 0.24361 + -0.850637 1.45419 -2.5545 0.914089 0.399522 -0.0694501 + -0.869045 1.47487 -2.50963 0.450371 0.815023 0.36456 + -0.870421 1.4822 -2.55045 0.265064 0.96055 -0.0841732 + -0.896257 1.46308 -2.48865 -0.22154 0.858129 0.463178 + -0.887089 1.43529 -2.45388 0.299955 0.446597 0.842958 + -0.897632 1.47042 -2.52947 -0.390441 0.91849 0.0627135 + -0.920107 1.45833 -2.51853 -0.542513 0.832476 0.112527 + -0.925061 1.44439 -2.48453 -0.512913 0.744366 0.427597 + -0.915893 1.4166 -2.44975 -0.0692827 0.607753 0.791098 + -0.921798 1.45373 -2.57736 -0.519678 0.852963 -0.0488796 + -0.953587 1.43266 -2.53555 -0.581827 0.808137 0.0916093 + -0.958541 1.41872 -2.50155 -0.567659 0.787052 0.241481 + -0.967459 1.40174 -2.46741 -0.469628 0.78452 0.404941 + -0.934989 1.44534 -2.58484 -0.3171 0.864272 0.390489 + -0.966778 1.42428 -2.54303 -0.389897 0.896888 0.208741 + -0.983379 1.4083 -2.51108 -0.357696 0.877568 0.319262 + -0.992297 1.39131 -2.47694 -0.270847 0.886126 0.376061 + -0.976856 1.38687 -2.4505 -0.376359 0.853842 0.359594 + -0.945825 1.4539 -2.59787 0.00862971 0.854386 0.519567 + -0.97287 1.42479 -2.54844 -0.0404514 0.90323 0.427246 + -0.989471 1.40881 -2.51649 -0.00380139 0.904273 0.426938 + -1.00051 1.38963 -2.47497 0.0981652 0.898424 0.428016 + -0.996782 1.38135 -2.45573 -0.215565 0.906702 0.362523 + -1.01012 1.45852 -2.59516 0.111829 0.831013 0.544896 + -0.983706 1.43335 -2.56148 0.110045 0.853486 0.509364 + -1.00783 1.42542 -2.53927 0.226335 0.85279 0.470661 + -1.03424 1.45059 -2.57296 0.242654 0.877825 0.412967 + -1.01887 1.40624 -2.49774 0.29741 0.849331 0.436101 + -1.03239 1.39605 -2.46553 0.355674 0.821062 0.44649 + -1.00499 1.37967 -2.45376 0.0919162 0.894453 0.437612 + -0.999376 1.37777 -2.44788 -0.206506 0.923662 0.322806 + -0.979449 1.38329 -2.44266 -0.34661 0.918114 0.192165 + -0.925289 1.40173 -2.43285 -0.0513829 0.945575 0.321322 + -1.04273 1.38481 -2.43909 0.429836 0.801685 0.415382 + -1.01192 1.37339 -2.43923 0.121277 0.893529 0.432317 + -1.0063 1.37149 -2.43335 -0.233676 0.931842 0.277609 + -0.980221 1.38175 -2.42299 -0.371224 0.917588 0.142217 + -1.08827 1.42286 -2.45185 0.426117 0.859083 0.283552 + -1.05053 1.3776 -2.41105 0.568071 0.769255 0.292475 + -1.02226 1.36215 -2.41278 0.155148 0.896973 0.413967 + -1.01648 1.3611 -2.40822 -0.265174 0.926222 0.267946 + -0.990394 1.37137 -2.39786 -0.464011 0.87689 0.125531 + -1.09325 1.41411 -2.40858 0.415229 0.863528 0.286189 + -1.05104 1.3772 -2.40825 0.622306 0.746965 0.23405 + -1.02852 1.35678 -2.39971 0.28 0.90287 0.32623 + -1.02274 1.35574 -2.39516 -0.194354 0.944319 0.265495 + -1.00467 1.35807 -2.36786 -0.560909 0.798007 0.220376 + -1.09274 1.4032 -2.37737 0.320379 0.825035 0.465483 + -1.05053 1.3663 -2.37704 0.560245 0.79439 0.234669 + -1.02904 1.35638 -2.39692 0.355279 0.908303 0.220823 + -1.026 1.35042 -2.37727 0.289123 0.927375 0.237451 + -1.0197 1.34977 -2.37551 -0.30177 0.900714 0.312488 + -1.09486 1.38622 -2.35472 0.171952 0.832809 0.526176 + -1.04089 1.3488 -2.32091 0.425237 0.813488 0.39675 + -1.01635 1.33292 -2.32115 -0.0999424 0.994492 0.03158 + -1.12788 1.37252 -2.34763 -0.633704 0.60949 0.476384 + -1.10435 1.37495 -2.33329 -0.135443 0.802191 0.581503 + -1.05038 1.33753 -2.29949 0.06645 0.512045 0.856385 + -1.00133 1.34122 -2.31349 -0.338204 0.889775 0.306462 + -1.1388 1.35386 -2.35816 -0.912977 0.308797 0.266679 + -1.13502 1.34588 -2.32554 -0.785912 0.247448 0.566667 + -1.11149 1.3483 -2.31119 -0.291618 0.4455 0.846457 + -1.14148 1.32271 -2.34204 -0.858726 0.0330041 0.511372 + -1.12248 1.30853 -2.32584 -0.532563 -0.299047 0.7918 + -1.11603 1.3317 -2.30933 -0.439293 -0.140627 0.887269 + -1.05491 1.32093 -2.29762 -0.134271 -0.0906387 0.986791 + -0.999054 1.29229 -2.29894 -0.0651794 -0.270499 0.960511 + -0.98857 1.33391 -2.29523 -0.0910672 0.402129 0.911043 + -0.965906 1.38361 -2.34665 -0.464614 0.819483 0.335532 + -1.03163 1.2676 -2.31336 -0.0915104 -0.415923 0.904784 + -0.995083 1.20985 -2.34325 0.151109 -0.564242 0.811663 + -0.964126 1.2872 -2.29852 0.219764 -0.340606 0.914162 + -0.953642 1.32882 -2.2948 0.231449 0.138884 0.962882 + -0.953148 1.3763 -2.32838 -0.177089 0.709115 0.682492 + -1.02766 1.18516 -2.35767 0.0769188 -0.490747 0.8679 + -0.939121 1.26148 -2.32947 0.581246 -0.483077 0.65482 + -0.923982 1.32046 -2.31195 0.674161 -0.168656 0.71907 + -0.934902 1.34106 -2.30356 0.369274 0.260791 0.891978 + -0.890725 1.30614 -2.37069 0.828578 -0.213496 0.517569 + -0.902689 1.36227 -2.33865 0.836963 0.104198 0.537249 + -0.913609 1.38287 -2.33026 0.432614 0.508049 0.744803 + -0.934407 1.38854 -2.33714 -0.142712 0.75657 0.638149 + -0.925721 1.40547 -2.36051 -0.125967 0.953721 0.273036 + -0.872908 1.29932 -2.4042 0.872746 -0.143765 0.466525 + -0.884871 1.35545 -2.37217 0.908713 0.0655302 0.412246 + -0.88727 1.37715 -2.37596 0.902866 0.301393 0.306588 + -0.904923 1.3998 -2.35364 0.546583 0.695006 0.467133 + -0.900157 1.40875 -2.39705 0.37271 0.927874 0.0116933 + -0.926061 1.40019 -2.41319 -0.211593 0.973755 -0.0838376 + -0.951625 1.39691 -2.37665 -0.432442 0.901477 -0.0182436 + 0.987946 0.54202 -2.82794 0.314747 -0.758113 -0.571138 + 0.997797 0.583674 -2.84229 0.57196 -0.227225 -0.788182 + 1.00242 0.583273 -2.8373 0.815654 -0.202245 -0.542038 + 0.986215 0.583895 -2.84767 0.304597 -0.252697 -0.918349 + 0.994011 0.664209 -2.85276 0.576401 0.00390892 -0.817158 + 1.00283 0.663444 -2.84326 0.836168 -0.00551554 -0.548446 + 0.992571 0.541618 -2.82296 0.569947 -0.754798 -0.324716 + 0.969837 0.538851 -2.80456 -0.327952 -0.876351 0.352783 + 0.965146 0.539398 -2.81088 -0.49127 -0.865631 0.0966238 + 0.964997 0.54048 -2.8207 -0.47421 -0.819732 -0.321191 + 0.976634 0.541924 -2.83037 -0.100627 -0.76649 -0.634324 + 1.00691 0.582204 -2.82634 0.943677 -0.181814 -0.276437 + 1.00847 0.581138 -2.81623 0.983805 -0.178851 -0.0118181 + 0.994128 0.540551 -2.81285 0.64231 -0.764739 0.0511094 + 1.00732 0.662375 -2.83229 0.959681 -0.0220629 -0.280224 + 1.01029 0.66034 -2.81301 0.998707 -0.0508264 -0.000970925 + 1.00792 0.65881 -2.79987 0.939053 -0.0949233 0.330406 + 1.0061 0.579608 -2.80309 0.923809 -0.190563 0.332058 + 1.00774 0.761453 -2.82961 0.833553 0.059638 -0.549211 + 1.01479 0.756517 -2.81332 0.959144 -0.0194904 -0.282245 + 1.01776 0.754481 -2.79404 0.994713 -0.101179 -0.0175988 + 0.998922 0.76222 -2.83911 0.577709 0.132539 -0.80541 + 1.0087 0.88042 -2.8048 0.56572 0.167668 -0.807371 + 1.02098 0.874586 -2.79292 0.829802 0.0448848 -0.55625 + 1.02803 0.86965 -2.77662 0.948995 -0.0606477 -0.309405 + 0.980736 0.764743 -2.84695 0.304326 0.178861 -0.935625 + 0.990514 0.882944 -2.81263 0.307028 0.241703 -0.920496 + 0.999928 0.98995 -2.78141 0.232054 0.24215 -0.94208 + 1.02948 0.984916 -2.773 0.516343 0.120489 -0.847863 + 1.04177 0.979082 -2.76111 0.808312 -0.0403719 -0.587369 + 0.98243 0.664431 -2.85815 0.314251 0.00198932 -0.949338 + 0.959166 0.764559 -2.85158 -0.0536553 0.187806 -0.980739 + 0.960445 0.886619 -2.81796 -0.060877 0.274796 -0.959573 + 0.969859 0.993627 -2.78674 -0.0467908 0.309176 -0.949853 + 0.974903 0.583799 -2.8501 -0.0217184 -0.287312 -0.957591 + 0.96086 0.664247 -2.86277 -0.0562559 -0.0251938 -0.998098 + 0.932966 0.762391 -2.84343 -0.485838 0.152383 -0.860663 + 0.934244 0.884451 -2.80981 -0.476559 0.246822 -0.843783 + 0.927075 0.98972 -2.77383 -0.465841 0.261126 -0.845461 + 0.958226 0.58268 -2.84484 -0.432043 -0.335505 -0.837123 + 0.944182 0.663127 -2.85751 -0.467496 -0.0702007 -0.881203 + 0.910775 0.759637 -2.825 -0.75646 0.0909882 -0.64768 + 0.903272 0.875039 -2.78571 -0.760424 0.163012 -0.628636 + 0.896103 0.980307 -2.74972 -0.746515 0.121203 -0.654237 + 0.946589 0.581236 -2.83517 -0.67619 -0.372972 -0.635342 + 0.921991 0.660374 -2.83908 -0.745374 -0.12414 -0.654986 + 0.897648 0.753411 -2.80372 -0.961171 -0.0370587 -0.273452 + 0.890144 0.868814 -2.76442 -0.960313 0.0142307 -0.27856 + 0.877059 0.968103 -2.72052 -0.958223 -0.0487882 -0.28183 + 0.93824 0.5794 -2.82101 -0.867769 -0.417936 -0.268899 + 0.913643 0.658539 -2.82492 -0.937 -0.194307 -0.290302 + 0.897932 0.751349 -2.78499 -0.981591 -0.151304 0.116561 + 0.890512 0.858144 -2.74054 -0.983584 -0.146602 0.105215 + 0.877426 0.957433 -2.69664 -0.984458 -0.166027 0.0572543 + 0.93839 0.578319 -2.81119 -0.895967 -0.43484 0.0903148 + 0.913927 0.656476 -2.8062 -0.962066 -0.247728 0.114276 + 0.903445 0.746082 -2.76754 -0.884753 -0.241502 0.39861 + 0.896025 0.852877 -2.72309 -0.889135 -0.272227 0.367874 + 0.885224 0.944204 -2.66774 -0.902343 -0.331362 0.275638 + 0.941907 0.577135 -2.79946 -0.819989 -0.429965 0.377819 + 0.917445 0.655293 -2.79446 -0.875195 -0.276001 0.397313 + 0.91239 0.745039 -2.75548 -0.722376 -0.307996 0.619121 + 0.908478 0.845585 -2.70795 -0.728064 -0.367845 0.578457 + 0.897678 0.936912 -2.6526 -0.746277 -0.50435 0.434397 + 0.946598 0.576588 -2.79314 -0.68616 -0.416997 0.596069 + 0.92639 0.654249 -2.78241 -0.720316 -0.287327 0.631338 + 0.924211 0.742007 -2.74573 -0.543434 -0.349792 0.763102 + 0.920299 0.842552 -2.6982 -0.546813 -0.44217 0.710972 + 0.915673 0.920278 -2.64408 -0.571542 -0.567879 0.592328 + 0.954129 0.576099 -2.78652 -0.518299 -0.395967 0.758008 + 0.933921 0.65376 -2.77579 -0.547721 -0.289795 0.78487 + 0.935026 0.741769 -2.74041 -0.210655 -0.389935 0.896423 + 0.935371 0.839004 -2.69171 -0.213408 -0.503343 0.837319 + 0.930745 0.916726 -2.63758 -0.200866 -0.671679 0.713091 + 0.9598 0.575973 -2.78373 -0.206821 -0.349201 0.913938 + 0.944736 0.653521 -2.77047 -0.216427 -0.27386 0.937102 + 0.957243 0.741721 -2.74101 0.124426 -0.381724 0.915863 + 0.957588 0.838956 -2.6923 0.124447 -0.501602 0.856101 + 0.975509 0.538725 -2.80177 -0.0185124 -0.842729 0.53802 + 0.973945 0.576454 -2.78396 0.13036 -0.281896 0.950548 + 0.958881 0.654004 -2.7707 0.12086 -0.232587 0.965037 + 0.983544 0.743223 -2.74693 0.368552 -0.363115 0.855755 + 0.994271 0.841053 -2.70056 0.367816 -0.476657 0.798442 + 0.989302 0.539512 -2.80488 0.40503 -0.796139 0.44957 + 0.987738 0.577242 -2.78706 0.369585 -0.249085 0.895189 + 0.985181 0.655504 -2.77662 0.378428 -0.202257 0.903263 + 1.0048 0.746669 -2.75918 0.700584 -0.305787 0.64473 + 1.00127 0.578569 -2.79511 0.709695 -0.217832 0.669987 + 0.998712 0.656831 -2.78467 0.708462 -0.155975 0.688297 + 1.01401 0.748649 -2.77438 0.928875 -0.199865 0.31184 + 1.02839 0.852705 -2.73245 0.918584 -0.290291 0.268205 + 1.01553 0.844499 -2.71281 0.693033 -0.407387 0.594761 + 1.03214 0.858538 -2.75211 0.984747 -0.167407 -0.0474118 + 1.05609 0.956349 -2.71154 0.955449 -0.287842 -0.0653049 + 1.04433 0.934346 -2.68809 0.882035 -0.387309 0.268338 + 1.03147 0.926142 -2.66845 0.705381 -0.496106 0.506277 + 0.999984 0.910055 -2.65635 0.387036 -0.59509 0.704323 + 1.05198 0.967463 -2.73606 0.925331 -0.168578 -0.339625 + 1.0884 1.05881 -2.70415 0.93478 -0.2186 -0.280001 + 1.08784 1.03906 -2.65981 0.946229 -0.323299 0.011355 + 1.07608 1.01706 -2.63636 0.88807 -0.437073 -0.142472 + 1.03839 0.968117 -2.63106 0.690054 -0.723252 0.0270575 + 1.07819 1.07044 -2.72921 0.780503 -0.0701201 -0.621207 + 1.09758 1.13993 -2.71023 0.802931 -0.0429362 -0.594524 + 1.1102 1.13024 -2.67529 0.958558 -0.177376 -0.222946 + 1.10964 1.11049 -2.63095 0.969999 -0.177352 -0.166275 + 1.0836 1.00664 -2.61366 0.639169 -0.303516 -0.706641 + 1.05317 1.08021 -2.74869 0.465188 0.112529 -0.87803 + 1.07256 1.1497 -2.72971 0.446705 0.107534 -0.888195 + 1.08019 1.19637 -2.72071 0.441207 0.118918 -0.889491 + 1.10738 1.18459 -2.69952 0.810642 -0.014027 -0.585374 + 1.12001 1.17491 -2.66458 0.973171 -0.137212 -0.184691 + 1.02362 1.08524 -2.75711 0.130927 0.226315 -0.965215 + 1.033 1.1579 -2.73778 0.0918917 0.203959 -0.974657 + 1.04063 1.20456 -2.72877 0.0883932 0.184283 -0.97889 + 1.09014 1.26099 -2.7058 0.484544 0.125036 -0.865785 + 1.11733 1.24921 -2.68462 0.795821 0.0283972 -0.604866 + 0.972767 1.0861 -2.75409 -0.170756 0.289218 -0.941911 + 0.982147 1.15875 -2.73476 -0.175982 0.238265 -0.955123 + 0.985439 1.21494 -2.72337 -0.188342 0.232976 -0.95407 + 1.0019 1.26921 -2.71213 -0.119223 0.198162 -0.972891 + 1.05709 1.25883 -2.71753 0.146855 0.176704 -0.973247 + 0.929983 1.08219 -2.74118 -0.385176 0.292744 -0.87518 + 0.92431 1.14823 -2.71871 -0.391233 0.235568 -0.889631 + 0.927602 1.20442 -2.70733 -0.372542 0.201684 -0.905834 + 0.870745 1.07144 -2.71135 -0.699818 0.150315 -0.698327 + 0.865072 1.13749 -2.68888 -0.675653 0.152855 -0.721199 + 0.861538 1.16186 -2.68141 -0.682124 0.143505 -0.717017 + 0.868219 1.24203 -2.66812 -0.580575 0.15414 -0.799483 + 0.934282 1.28459 -2.69404 -0.353678 0.168968 -0.919979 + 0.8517 1.05924 -2.68214 -0.971742 -0.136094 -0.192859 + 0.840866 1.11642 -2.65408 -0.983871 -0.0973136 -0.150093 + 0.837332 1.14079 -2.6466 -0.979924 -0.0931913 -0.176251 + 0.831071 1.17745 -2.63209 -0.978199 -0.0947031 -0.18482 + 0.865363 1.04126 -2.64315 -0.951262 -0.264788 0.158077 + 0.854529 1.09843 -2.61509 -0.957178 -0.218926 0.189424 + 0.852146 1.12779 -2.60216 -0.957166 -0.20616 0.203302 + 0.845885 1.16446 -2.58764 -0.945983 -0.25868 0.195448 + 0.873162 1.02803 -2.61425 -0.972441 -0.212683 0.0955218 + 0.86407 1.08456 -2.57384 -0.979238 -0.172113 0.107099 + 0.861687 1.11392 -2.56091 -0.977969 -0.170595 0.120308 + 0.851029 1.16885 -2.55106 -0.963132 -0.237416 0.126533 + 0.824131 1.24066 -2.58161 -0.995574 -0.083762 0.0426153 + 0.87787 1.01106 -2.57668 -0.90883 -0.377834 0.17683 + 0.868778 1.06759 -2.53626 -0.949647 -0.230657 0.212056 + 0.866668 1.10639 -2.51694 -0.948296 -0.206688 0.240863 + 0.856009 1.16132 -2.50709 -0.949884 -0.216402 0.225587 + 0.895865 0.994424 -2.56815 -0.695386 -0.694595 0.184325 + 0.901376 0.991044 -2.52247 -0.8106 -0.424983 0.402886 + 0.884215 1.05816 -2.50507 -0.796943 -0.331244 0.505133 + 0.882104 1.09696 -2.48575 -0.787024 -0.292682 0.543076 + 0.871687 1.15593 -2.47057 -0.792053 -0.221006 0.569042 + 0.935615 0.955693 -2.59324 -0.389208 -0.860238 0.329405 + 0.946387 0.944402 -2.56808 -0.679977 -0.499001 -0.537242 + 0.906638 0.983132 -2.54299 -0.8216 -0.565443 -0.0724466 + 0.963302 0.907958 -2.64809 0.140922 -0.643664 0.752222 + 0.968171 0.946924 -2.60376 -0.0518793 -0.982319 0.179883 + 0.97527 0.937947 -2.5867 -0.423606 -0.498285 -0.756485 + 0.959722 0.886523 -2.57604 -0.762568 -0.106516 -0.638079 + 0.951332 0.882736 -2.55468 -0.924249 -0.24845 -0.289889 + 1.00689 0.95203 -2.61896 0.35333 -0.92978 0.10328 + 1.01399 0.943052 -2.6019 -0.132118 -0.450158 -0.883121 + 0.988605 0.880068 -2.59465 -0.472837 0.00799295 -0.881114 + 0.998872 0.806418 -2.59956 -0.536595 -0.0478441 -0.842483 + 0.982965 0.80307 -2.58489 -0.800322 -0.138274 -0.583408 + 1.0459 0.957702 -2.60835 0.0874554 -0.346659 -0.933905 + 1.01727 0.884079 -2.60747 -0.320112 0.0429812 -0.946404 + 1.02754 0.810431 -2.61238 -0.262063 -0.00013178 -0.965051 + 1.04918 0.898729 -2.61392 0.0245274 0.017327 -0.999549 + 1.04952 0.812386 -2.61464 0.103179 0.0159324 -0.994535 + 1.03571 0.720992 -2.61362 -0.265146 0.0393099 -0.963407 + 1.01516 0.718116 -2.60443 -0.548501 -0.00795235 -0.836112 + 0.999249 0.714768 -2.58976 -0.81873 -0.085002 -0.567852 + 1.07173 0.899269 -2.60639 0.429908 -0.0426861 -0.901863 + 1.07207 0.812925 -2.60711 0.461009 0.0202921 -0.887164 + 1.07386 0.723332 -2.61049 0.46477 0.0795256 -0.881853 + 1.05769 0.722945 -2.61589 0.11051 0.0712288 -0.991319 + 1.10668 1.01755 -2.59929 0.772028 -0.15355 -0.616761 + 1.09481 0.910179 -2.59202 0.699479 -0.0814139 -0.710001 + 1.08755 0.812336 -2.59548 0.718718 0.00540434 -0.695281 + 1.11904 1.09943 -2.58885 0.935383 -0.0609495 -0.348344 + 1.12524 1.01362 -2.56363 0.934191 -0.109256 -0.339634 + 1.10833 0.908268 -2.57246 0.915023 -0.0934332 -0.392433 + 1.10107 0.810427 -2.57592 0.917366 -0.0182307 -0.397626 + 1.12827 1.16642 -2.56773 0.916495 -0.0637501 -0.394933 + 1.13759 1.0955 -2.55319 0.932415 -0.075096 -0.353501 + 1.13119 1.0094 -2.5323 0.985605 -0.154897 -0.0677514 + 1.11428 0.904054 -2.54113 0.991718 -0.120902 -0.0433471 + 1.10538 0.80779 -2.55604 0.997264 -0.053058 -0.0514714 + 1.11888 1.17747 -2.60983 0.984639 -0.134004 -0.111936 + 1.13103 1.2421 -2.59744 0.963626 -0.22808 -0.139301 + 1.14208 1.23005 -2.55351 0.900858 -0.150553 -0.407171 + 1.14901 1.14333 -2.53409 0.924846 -0.0943328 -0.368457 + 1.13216 1.23954 -2.65219 0.965927 -0.123771 -0.227299 + 1.15182 1.31268 -2.59848 0.966166 -0.0273945 -0.256462 + 1.16287 1.30063 -2.55454 0.955692 -0.096258 -0.278186 + 1.17659 1.27611 -2.50215 0.971841 -0.0666209 -0.226025 + 1.16281 1.20696 -2.51987 0.927666 -0.101556 -0.359335 + 1.14094 1.31582 -2.63344 0.936773 0.0667136 -0.34352 + 1.13698 1.37706 -2.61403 0.907712 0.317374 -0.274468 + 1.14786 1.37391 -2.57907 0.892462 0.397913 -0.212549 + 1.16205 1.35816 -2.54154 0.931142 0.308527 -0.194385 + 1.12611 1.3255 -2.66586 0.828528 0.117144 -0.547557 + 1.12174 1.38945 -2.64227 0.847024 0.342069 -0.406866 + 1.11399 1.43808 -2.58024 0.869691 0.485386 -0.0896594 + 1.12543 1.41096 -2.55294 0.863571 0.502391 -0.0429885 + 1.13962 1.39521 -2.51541 0.783226 0.594915 -0.180646 + 1.10373 1.35185 -2.68466 0.558573 0.241557 -0.793503 + 1.09936 1.4158 -2.66107 0.63565 0.483752 -0.601609 + 1.09875 1.45047 -2.60848 0.698105 0.641172 -0.318666 + 1.09815 1.46439 -2.55821 0.424709 0.862599 0.274855 + 1.07067 1.34969 -2.69638 0.181525 0.227355 -0.956744 + 1.07108 1.41769 -2.67773 0.295818 0.468546 -0.83244 + 1.08251 1.44345 -2.64039 0.47912 0.716705 -0.506732 + 1.06681 1.46496 -2.62013 0.324433 0.889911 -0.320627 + 1.08305 1.47199 -2.58823 0.233902 0.971903 -0.0263657 + 0.984992 1.30116 -2.70562 -0.15007 0.150493 -0.977155 + 1.05377 1.38164 -2.68987 0.0639528 0.246367 -0.967064 + 1.00678 1.42268 -2.67934 0.0303983 0.440531 -0.897223 + 1.05423 1.44533 -2.65705 0.25189 0.674749 -0.693733 + 1.04387 1.46803 -2.63609 0.281663 0.877357 -0.388472 + 0.989471 1.38663 -2.69149 -0.129266 0.252697 -0.958872 + 0.984619 1.43677 -2.67203 -0.0806959 0.452751 -0.887978 + 1.03207 1.45942 -2.64973 0.172443 0.663187 -0.728318 + 0.994238 1.48267 -2.63483 0.113418 0.983473 -0.141127 + 1.03184 1.47121 -2.61748 0.122801 0.972111 0.199798 + 0.938761 1.37007 -2.67991 -0.370233 0.213149 -0.904154 + 0.94975 1.43807 -2.66388 -0.299035 0.398689 -0.866963 + 0.982433 1.47406 -2.64846 -0.0170661 0.710269 -0.703724 + 0.968794 1.48219 -2.62952 -0.131853 0.980579 0.145185 + 1.00639 1.47073 -2.61217 -0.00772869 0.860127 0.510021 + 0.890704 1.39669 -2.64796 -0.546375 0.237799 -0.803073 + 0.901693 1.4647 -2.63194 -0.248292 0.809819 -0.531549 + 0.920867 1.45928 -2.62568 -0.0361548 0.971886 -0.232661 + 0.947564 1.47536 -2.64032 -0.427905 0.810497 -0.399991 + 0.942097 1.46611 -2.61488 -0.136237 0.922781 0.360437 + 0.833628 1.23334 -2.64018 -0.844625 0.0435963 -0.53358 + 0.856113 1.388 -2.62003 -0.803156 0.231255 -0.549055 + 0.880149 1.47123 -2.59456 -0.322878 0.874982 -0.360773 + 0.899324 1.46581 -2.5883 0.313253 0.949669 0.0014485 + 0.826689 1.29654 -2.58971 -0.985476 0.105748 -0.132868 + 0.830941 1.35176 -2.56829 -0.983881 0.156422 -0.0866655 + 0.860366 1.44322 -2.59861 -0.707207 0.393229 -0.587562 + 0.870421 1.4822 -2.55045 -0.321848 0.946217 -0.0329823 + 0.829275 1.24505 -2.54502 -0.977149 -0.117161 0.177352 + 0.831513 1.32636 -2.53217 -0.979601 0.0821127 0.183413 + 0.850637 1.45419 -2.5545 -0.901783 0.432183 -0.00239404 + 0.839621 1.23668 -2.50593 -0.949246 -0.134066 0.284532 + 0.841858 1.31798 -2.49307 -0.954846 0.101224 0.279325 + 0.869253 1.38921 -2.46263 -0.909505 0.226027 0.348873 + 0.851209 1.42879 -2.51838 -0.927781 0.236296 0.288768 + 0.855299 1.23129 -2.46941 -0.894114 -0.187062 0.4069 + 0.85271 1.29318 -2.44602 -0.943243 -0.05159 0.328073 + 0.85511 1.31488 -2.44981 -0.939949 0.187947 0.284906 + 0.882504 1.38611 -2.41937 -0.796883 0.548155 0.253977 + 0.887089 1.43529 -2.45388 -0.315207 0.615308 0.722524 + 0.898877 1.14416 -2.44938 -0.704967 -0.285147 0.649395 + 0.875496 1.23743 -2.42759 -0.797324 -0.276447 0.536518 + 0.872908 1.29932 -2.4042 -0.854907 -0.177021 0.487645 + 0.884871 1.35545 -2.37217 -0.912129 0.0578571 0.4058 + 0.88727 1.37715 -2.37596 -0.904135 0.306716 0.297431 + 0.909294 1.08518 -2.46457 -0.608674 -0.388468 0.691815 + 0.929246 1.15389 -2.41 -0.565243 -0.396482 0.723396 + 0.905865 1.24716 -2.38821 -0.75964 -0.321651 0.565233 + 0.890725 1.30614 -2.37069 -0.832401 -0.226854 0.505615 + 0.902689 1.36227 -2.33865 -0.828869 0.0837425 0.55314 + 0.909084 1.05672 -2.48303 -0.595346 -0.388792 0.703138 + 0.94123 1.06063 -2.45651 -0.555259 -0.370464 0.744609 + 0.941441 1.08909 -2.43805 -0.436782 -0.466273 0.769293 + 0.970078 1.18412 -2.3742 -0.38829 -0.493812 0.778062 + 0.939121 1.26148 -2.32947 -0.574656 -0.442021 0.688758 + 0.926244 0.989602 -2.50043 -0.660747 -0.319605 0.679166 + 0.947515 0.988032 -2.47932 -0.640773 -0.281272 0.71435 + 0.976925 1.05923 -2.42945 -0.427862 -0.319987 0.845306 + 0.982273 1.11932 -2.40225 -0.323441 -0.428492 0.843671 + 0.995083 1.20985 -2.34325 -0.157687 -0.516432 0.841684 + 0.94607 0.890647 -2.53416 -0.94841 -0.314742 0.0381689 + 0.948293 0.888791 -2.52055 -0.866167 -0.286237 0.409663 + 0.969564 0.887221 -2.49944 -0.68352 -0.268036 0.678939 + 0.983211 0.986638 -2.45225 -0.445047 -0.282407 0.849811 + 1.02824 1.06834 -2.41296 -0.117636 -0.360854 0.925174 + 0.974575 0.799283 -2.56353 -0.935873 -0.193842 -0.294221 + 0.971928 0.796861 -2.54853 -0.971737 -0.232327 -0.0418498 + 0.974151 0.795004 -2.53492 -0.90073 -0.261043 0.347191 + 0.984676 0.793525 -2.51975 -0.749839 -0.256518 0.609869 + 0.991862 0.88563 -2.47769 -0.505107 -0.255457 0.824383 + 0.993234 0.71205 -2.57445 -0.945975 -0.146477 -0.289266 + 0.990587 0.70963 -2.55944 -0.97929 -0.200358 -0.0291079 + 0.992181 0.708298 -2.54969 -0.903422 -0.259878 0.341015 + 1.00271 0.706819 -2.53452 -0.740571 -0.287228 0.607499 + 1.00697 0.791935 -2.498 -0.512016 -0.260521 0.818516 + 1.01579 0.628792 -2.60633 -0.824134 -0.0222522 -0.565958 + 1.00978 0.626076 -2.59102 -0.952397 -0.113574 -0.282916 + 1.0081 0.624545 -2.58153 -0.980802 -0.192541 -0.0308912 + 1.0097 0.623214 -2.57178 -0.895208 -0.292463 0.336256 + 1.02585 0.630909 -2.6156 -0.561691 0.0751339 -0.823928 + 1.02995 0.543948 -2.62785 -0.809956 -0.125098 -0.572994 + 1.02685 0.542552 -2.61998 -0.926257 -0.225626 -0.301896 + 1.02518 0.541021 -2.61049 -0.947032 -0.316871 -0.0521857 + 1.026 0.540337 -2.60548 -0.860336 -0.419876 0.28901 + 1.0464 0.633785 -2.62479 -0.267439 0.132618 -0.954405 + 1.05057 0.547545 -2.64185 -0.268027 0.0477455 -0.962227 + 1.04 0.546065 -2.63712 -0.544351 -0.00889653 -0.83881 + 1.04974 0.502079 -2.63603 -0.422816 -0.686006 -0.592134 + 1.04665 0.500682 -2.62816 -0.554379 -0.805867 -0.207947 + 1.0603 0.635021 -2.62623 0.0989327 0.158535 -0.982384 + 1.06447 0.54878 -2.64328 0.112793 0.0671725 -0.991345 + 1.06031 0.503558 -2.64075 0.00466642 -0.612756 -0.790258 + 1.07647 0.635409 -2.62083 0.465277 0.146974 -0.872878 + 1.07278 0.548979 -2.6405 0.460168 0.0463376 -0.886622 + 1.06862 0.503757 -2.63797 0.433434 -0.630586 -0.643814 + 1.04747 0.499998 -2.62314 -0.470179 -0.872482 0.133066 + 1.03266 0.539402 -2.59588 -0.688048 -0.482461 0.542053 + 1.08626 0.635036 -2.61347 0.722361 0.106177 -0.683317 + 1.08257 0.548607 -2.63315 0.722697 -0.00993789 -0.691094 + 1.0736 0.503052 -2.63077 0.65789 -0.698827 -0.280752 + 1.05569 0.499412 -2.61513 -0.147125 -0.899693 0.410983 + 1.08934 0.722745 -2.59886 0.72634 0.0638904 -0.68436 + 1.09595 0.633667 -2.59945 0.92152 0.0295302 -0.387206 + 1.08755 0.547902 -2.62594 0.906116 -0.0936436 -0.412535 + 1.09027 0.546235 -2.61337 0.976583 -0.203776 -0.0690043 + 1.07232 0.501492 -2.6209 0.583831 -0.802985 0.11982 + 1.09904 0.721375 -2.58483 0.919627 0.0253546 -0.391973 + 1.09868 0.632 -2.58687 0.99689 -0.0619245 -0.0487428 + 1.08899 0.544675 -2.60351 0.934364 -0.294293 0.200884 + 1.08432 0.542717 -2.59263 0.791187 -0.393912 0.467821 + 1.06726 0.500393 -2.61599 0.293305 -0.877701 0.378963 + 1.10334 0.71874 -2.56495 0.998754 -0.031418 -0.0387635 + 1.09617 0.628966 -2.56769 0.958432 -0.148798 0.243447 + 1.0915 0.627008 -2.55681 0.820517 -0.23856 0.519462 + 1.07925 0.541618 -2.58772 0.521297 -0.480539 0.705217 + 1.10084 0.715706 -2.54576 0.963889 -0.0867574 0.251776 + 1.09345 0.712609 -2.52855 0.824137 -0.154241 0.544984 + 1.08166 0.624867 -2.54726 0.530313 -0.329002 0.781362 + 1.06941 0.623335 -2.54301 0.227654 -0.374912 0.898674 + 1.06701 0.540086 -2.58347 0.22201 -0.524586 0.821901 + 1.10189 0.803559 -2.52927 0.963508 -0.0936371 0.250766 + 1.0945 0.800461 -2.51207 0.830416 -0.152188 0.535956 + 1.08361 0.710468 -2.51901 0.537032 -0.224469 0.813148 + 1.11079 0.899823 -2.51437 0.971224 -0.157704 0.178472 + 1.10344 0.895543 -2.48919 0.852377 -0.221128 0.473873 + 1.08077 0.797475 -2.49876 0.531209 -0.210876 0.820578 + 1.0614 0.795053 -2.49203 0.216387 -0.231473 0.948471 + 1.06424 0.708045 -2.51229 0.220171 -0.267296 0.938124 + 1.12641 1.00262 -2.48896 0.966955 -0.19798 0.160628 + 1.11906 0.99834 -2.46379 0.923091 -0.248697 0.293349 + 1.08971 0.892558 -2.47588 0.513149 -0.276033 0.812701 + 1.14487 1.08771 -2.51268 0.981384 -0.178742 -0.0702674 + 1.14009 1.08092 -2.46934 0.964278 -0.230723 0.13013 + 1.13367 1.07878 -2.43703 0.929718 -0.269078 0.251437 + 1.11163 0.995224 -2.44649 0.656345 -0.339259 0.67388 + 1.15628 1.13553 -2.49358 0.97966 -0.196767 -0.039355 + 1.15085 1.13817 -2.44417 0.960349 -0.237198 0.146514 + 1.14443 1.13603 -2.41186 0.924564 -0.272338 0.266483 + 1.12625 1.07567 -2.41973 0.63928 -0.37914 0.66901 + 1.08301 0.991956 -2.43864 0.148433 -0.315211 0.937342 + 1.16746 1.19466 -2.47423 0.983086 -0.183135 -0.00209252 + 1.16203 1.19729 -2.42483 0.967483 -0.199114 0.155979 + 1.15392 1.18608 -2.39687 0.932199 -0.23209 0.277739 + 1.1364 1.13472 -2.39265 0.612832 -0.36903 0.698751 + 1.18124 1.2638 -2.45652 0.994293 -0.0962252 0.0460668 + 1.17078 1.25956 -2.40942 0.97265 -0.104292 0.207548 + 1.16267 1.24834 -2.38147 0.927814 -0.166154 0.333996 + 1.14588 1.18477 -2.37766 0.679575 -0.334967 0.652667 + 1.10035 1.13172 -2.38429 0.143664 -0.416404 0.897758 + 1.17934 1.31858 -2.44536 0.984294 0.13707 0.111249 + 1.16889 1.31433 -2.39827 0.9439 0.193923 0.267294 + 1.16229 1.3028 -2.37069 0.906753 0.132379 0.400344 + 1.16159 1.27016 -2.37019 0.904673 -0.0830735 0.41793 + 1.1448 1.20659 -2.36638 0.634223 -0.301725 0.711845 + 1.17577 1.33363 -2.48915 0.981536 0.163274 -0.0996451 + 1.16392 1.37191 -2.43618 0.927317 0.317474 0.198224 + 1.1542 1.34868 -2.39596 0.889209 0.310727 0.335792 + 1.1476 1.33715 -2.36837 0.885633 0.29452 0.359044 + 1.16035 1.38697 -2.47996 0.874099 0.472542 -0.112492 + 1.14797 1.4016 -2.42365 0.816306 0.520095 0.251286 + 1.13825 1.37837 -2.38343 0.879846 0.321204 0.350283 + 1.1388 1.35386 -2.35816 0.908964 0.309905 0.278824 + 1.12271 1.42414 -2.49449 0.77297 0.613209 -0.162766 + 1.14345 1.41591 -2.45904 0.745012 0.666919 -0.0132562 + 1.12521 1.41402 -2.39556 0.350047 0.839597 0.415385 + 1.12732 1.39703 -2.37291 0.529964 0.647941 0.547092 + 1.12788 1.37252 -2.34763 0.633704 0.60949 0.476384 + 1.10958 1.43727 -2.53091 0.807849 0.589261 -0.0123 + 1.10257 1.4502 -2.51064 0.299789 0.941673 0.152899 + 1.1157 1.43707 -2.47422 0.296098 0.947993 0.116767 + 1.12068 1.42832 -2.43095 0.202895 0.94604 0.252669 + 1.0872 1.45862 -2.55028 -0.101398 0.902043 0.419567 + 1.0651 1.43849 -2.51953 -0.365941 0.850762 0.377215 + 1.08047 1.43007 -2.47989 -0.400776 0.844491 0.355264 + 1.08827 1.42286 -2.45185 -0.426107 0.859088 0.283549 + 1.09325 1.41411 -2.40858 -0.415227 0.863527 0.286196 + 1.07211 1.46623 -2.58029 -0.266725 0.903942 0.334284 + 1.05158 1.44868 -2.55174 -0.321343 0.865676 0.383853 + 1.03239 1.39605 -2.46553 -0.310864 0.836032 0.452122 + 1.04273 1.38481 -2.43909 -0.428083 0.807162 0.406491 + 1.05053 1.3776 -2.41105 -0.56815 0.769207 0.292449 + 1.05477 1.46814 -2.60152 -0.0989378 0.98452 0.144679 + 1.03424 1.45059 -2.57296 -0.239177 0.872383 0.426313 + 1.01887 1.40624 -2.49774 -0.296905 0.851189 0.43281 + 1.01012 1.45852 -2.59516 -0.193792 0.797486 0.571367 + 1.00783 1.42542 -2.53927 -0.193781 0.858121 0.475477 + 0.989471 1.40881 -2.51649 0.00476487 0.906329 0.422545 + 1.00051 1.38963 -2.47497 -0.0955533 0.897131 0.431307 + 0.945825 1.4539 -2.59787 -0.0250903 0.822875 0.567669 + 0.983706 1.43335 -2.56148 -0.110033 0.853487 0.509366 + 0.97287 1.42479 -2.54844 0.0404528 0.903227 0.427253 + 0.966778 1.42428 -2.54303 0.380226 0.893452 0.239106 + 0.983379 1.4083 -2.51108 0.336158 0.889576 0.309279 + 0.934989 1.44534 -2.58484 0.390867 0.828509 0.400994 + 0.953587 1.43266 -2.53555 0.603205 0.790734 0.104323 + 0.958541 1.41872 -2.50155 0.537446 0.790063 0.294878 + 0.992297 1.39131 -2.47694 0.263415 0.883641 0.387029 + 0.921798 1.45373 -2.57736 0.507489 0.845633 0.165406 + 0.920107 1.45833 -2.51853 0.542512 0.832478 0.112524 + 0.925061 1.44439 -2.48453 0.558694 0.691864 0.457368 + 0.915893 1.4166 -2.44975 0.316288 0.703462 0.636477 + 0.967459 1.40174 -2.46741 0.423473 0.820583 0.383816 + 0.897632 1.47042 -2.52947 0.392928 0.916927 0.0696626 + 0.896257 1.46308 -2.48865 0.221543 0.858125 0.463184 + 0.925289 1.40173 -2.43285 0.137979 0.919375 0.36839 + 0.869045 1.47487 -2.50963 -0.481698 0.812999 0.327109 + 0.976856 1.38687 -2.4505 0.376357 0.853843 0.359594 + 0.979449 1.38329 -2.44266 0.323786 0.929389 0.177196 + 0.996782 1.38135 -2.45573 0.215565 0.906702 0.362523 + 0.926061 1.40019 -2.41319 0.10809 0.988204 -0.108484 + 0.980221 1.38175 -2.42299 0.400273 0.912347 0.0860484 + 0.999376 1.37777 -2.44788 0.224358 0.929167 0.293788 + 1.00499 1.37967 -2.45376 -0.0919162 0.894453 0.437612 + 0.900157 1.40875 -2.39705 -0.392869 0.91051 -0.128943 + 0.951625 1.39691 -2.37665 0.405354 0.911567 0.0687989 + 0.990394 1.37137 -2.39786 0.505034 0.851674 0.139969 + 1.0063 1.37149 -2.43335 0.249941 0.925642 0.284107 + 1.01192 1.37339 -2.43923 -0.121277 0.893529 0.432317 + 0.904923 1.3998 -2.35364 -0.546584 0.695006 0.467132 + 0.925721 1.40547 -2.36051 0.166479 0.943247 0.287351 + 0.934407 1.38854 -2.33714 0.154179 0.776337 0.611171 + 0.965906 1.38361 -2.34665 0.442761 0.835566 0.325258 + 0.913609 1.38287 -2.33026 -0.427888 0.509488 0.746548 + 0.934902 1.34106 -2.30356 -0.36947 0.224604 0.90169 + 0.953642 1.32882 -2.2948 -0.261363 0.113784 0.95851 + 0.953148 1.3763 -2.32838 0.178339 0.705545 0.685858 + 1.00133 1.34122 -2.31349 0.581175 0.611366 0.537091 + 1.00467 1.35807 -2.36786 0.560645 0.797741 0.222008 + 0.923982 1.32046 -2.31195 -0.564815 -0.21977 0.795415 + 0.964126 1.2872 -2.29852 -0.272026 -0.322621 0.906596 + 0.98857 1.33391 -2.29523 0.3075 0.366199 0.878261 + 0.999054 1.29229 -2.29894 0.202249 -0.194391 0.959848 + 1.03163 1.2676 -2.31336 0.0884451 -0.287302 0.953748 + 1.01635 1.33292 -2.32115 0.246751 0.578691 0.777323 + 1.0197 1.34977 -2.37551 0.301769 0.900714 0.312488 + 1.02274 1.35574 -2.39516 0.202451 0.942425 0.266175 + 1.02766 1.18516 -2.35767 0.0305372 -0.452893 0.891042 + 1.09442 1.18844 -2.3562 0.157629 -0.433256 0.88738 + 1.11827 1.21179 -2.35083 0.331964 -0.368864 0.868182 + 1.05547 1.29095 -2.308 -0.0301127 -0.185052 0.982267 + 1.04089 1.3488 -2.32091 -0.507567 0.665734 0.546968 + 1.03359 1.12844 -2.38576 -0.0801297 -0.444578 0.892149 + 1.12305 1.27855 -2.33621 0.393966 -0.259332 0.881781 + 1.0902 1.07266 -2.41137 0.119314 -0.380754 0.916946 + 1.02105 0.987635 -2.44024 -0.154308 -0.278709 0.947898 + 1.0297 0.886628 -2.46568 -0.103472 -0.260766 0.959841 + 1.06108 0.889287 -2.46803 0.183974 -0.274038 0.943958 + 1.03002 0.792394 -2.48968 -0.12729 -0.247442 0.960505 + 1.04174 0.706138 -2.5106 -0.108579 -0.29611 0.948962 + 1.04691 0.621429 -2.54133 -0.105556 -0.398376 0.911128 + 1.01869 0.705681 -2.51892 -0.508879 -0.303801 0.805449 + 1.03234 0.621138 -2.54659 -0.488823 -0.386644 0.782022 + 1.05544 0.539107 -2.5826 -0.0808367 -0.541862 0.836571 + 1.01635 0.62228 -2.56218 -0.730254 -0.346054 0.589046 + 1.04087 0.538816 -2.58787 -0.468016 -0.521579 0.713384 + 1.02226 1.36215 -2.41278 -0.155148 0.896973 0.413967 + 1.02852 1.35678 -2.39971 -0.28 0.90287 0.32623 + 1.05104 1.3772 -2.40825 -0.622327 0.746934 0.23409 + 1.01648 1.3611 -2.40822 0.267526 0.927142 0.26237 + 1.02904 1.35638 -2.39692 -0.355279 0.908303 0.220823 + 1.05053 1.3663 -2.37704 -0.604503 0.774731 0.185385 + 1.09274 1.4032 -2.37737 -0.291054 0.854274 0.430702 + 1.09486 1.38622 -2.35472 -0.0296707 0.815359 0.578194 + 1.10435 1.37495 -2.33329 0.135446 0.80219 0.581503 + 1.13502 1.34588 -2.32554 0.785912 0.247448 0.566667 + 1.05038 1.33753 -2.29949 -0.531035 0.271629 0.802633 + 1.11149 1.3483 -2.31119 0.291618 0.4455 0.846457 + 1.026 1.35042 -2.37727 -0.289128 0.927375 0.237444 + 1.11603 1.3317 -2.30933 0.439293 -0.140627 0.887269 + 1.05491 1.32093 -2.29762 -0.377026 -0.174552 0.909606 + 1.12248 1.30853 -2.32584 0.517317 -0.279085 0.809008 + 1.14148 1.32271 -2.34204 0.858726 0.0330041 0.511372 + 1.15027 1.30599 -2.35226 0.805698 0.0997527 0.583866 + 1.14957 1.27336 -2.35176 0.685183 -0.13648 0.71547 + -0.872043 1.89298 -1.22862 0.906308 0.309655 -0.287609 + -0.870466 1.89166 -1.22009 0.991227 0.124971 0.0430212 + -0.875993 1.86509 -1.23433 0.963138 -0.268909 -0.00727253 + -0.878416 1.90396 -1.21984 0.682344 0.718651 -0.133966 + -0.876839 1.90264 -1.21131 0.798859 0.588623 0.123882 + -0.873278 1.89039 -1.20845 0.877273 -0.0865625 0.472121 + -0.878806 1.86382 -1.22269 0.80529 -0.438182 0.39938 + -0.878324 1.8668 -1.24714 0.923999 -0.0316581 -0.381081 + -0.878844 1.8951 -1.23876 0.630611 0.522384 -0.573974 + -0.881941 1.90506 -1.22509 0.505147 0.792278 -0.342232 + -0.890991 1.82377 -1.25843 0.98238 -0.186885 0.00167389 + -0.893321 1.82549 -1.27123 0.92697 0.0239723 -0.374368 + -0.885126 1.86893 -1.25728 0.665671 0.256176 -0.700896 + -0.887826 1.89661 -1.24271 0.263853 0.670355 -0.693546 + -0.890922 1.90658 -1.22905 0.207468 0.850413 -0.483482 + -0.89469 1.82278 -1.24289 0.816384 -0.373652 0.440341 + -0.896376 1.771 -1.26494 0.873595 -0.112767 0.473409 + -0.892676 1.772 -1.28048 0.997121 0.0667434 0.035995 + -0.895936 1.77431 -1.29849 0.912621 0.230447 -0.337665 + -0.902286 1.82802 -1.2849 0.63934 0.29314 -0.710854 + -0.904845 1.82269 -1.23241 0.494555 -0.435937 0.751914 + -0.910577 1.77123 -1.25016 0.535428 -0.248437 0.807215 + -0.886475 1.71007 -1.2832 0.871928 -0.0515183 0.486916 + -0.88112 1.71182 -1.3056 0.990685 0.130028 0.0404335 + -0.88438 1.71413 -1.3236 0.912671 0.289861 -0.288119 + -0.88896 1.86373 -1.21221 0.483747 -0.495917 0.721148 + -0.903325 1.86447 -1.20606 0.132739 -0.436019 0.890094 + -0.924168 1.82424 -1.22396 0.108913 -0.391933 0.913524 + -0.9299 1.77278 -1.24171 0.142829 -0.285525 0.947668 + -0.880026 1.89016 -1.20144 0.579182 -0.214051 0.786594 + -0.89439 1.89091 -1.19529 0.162861 -0.23394 0.958514 + -0.90428 1.89206 -1.19567 -0.285973 -0.110498 0.951845 + -0.918214 1.86636 -1.2066 -0.333127 -0.221324 0.916538 + -0.878296 1.90197 -1.20528 0.783152 0.41717 0.461132 + -0.885044 1.90176 -1.19827 0.539733 0.162079 0.826086 + -0.89249 1.90214 -1.19508 0.214635 0.115231 0.969873 + -0.902379 1.90329 -1.19545 -0.289263 0.279122 0.915651 + -0.915198 1.89422 -1.20284 -0.647449 0.106059 0.754693 + -0.885643 1.90921 -1.20591 0.42256 0.901865 0.0898981 + -0.8871 1.90855 -1.19987 0.43175 0.7354 0.522282 + -0.894546 1.90894 -1.19668 0.0793515 0.716269 0.693298 + -0.900206 1.91005 -1.20039 -0.135364 0.87971 0.455837 + -0.908039 1.90442 -1.19917 -0.53612 0.404426 0.740955 + -0.889304 1.90999 -1.20868 0.215372 0.972149 0.0924182 + -0.887159 1.91034 -1.21301 0.493206 0.851323 0.178879 + -0.902818 1.91189 -1.21188 -0.138249 0.990397 -0.000590168 + -0.904962 1.91155 -1.20754 -0.246723 0.962109 0.116081 + -0.903867 1.91083 -1.20316 -0.236963 0.89282 0.383042 + -0.913211 1.9058 -1.20534 -0.67462 0.574165 0.463921 + -0.890685 1.91144 -1.21827 0.242829 0.956785 -0.159989 + -0.899021 1.91234 -1.21824 -0.0579772 0.985062 -0.162145 + -0.912241 1.90737 -1.21786 -0.545397 0.824269 -0.152059 + -0.914307 1.90651 -1.20973 -0.679593 0.722295 0.128231 + -0.899259 1.90748 -1.22901 -0.0452893 0.874012 -0.48379 + -0.908445 1.90781 -1.22421 -0.382049 0.863201 -0.330035 + -0.920418 1.89784 -1.2256 -0.698801 0.678636 -0.226122 + -0.922484 1.89698 -1.21745 -0.821951 0.564428 0.0762759 + -0.920371 1.8956 -1.209 -0.811236 0.318425 0.490409 + -0.903908 1.89837 -1.24266 -0.0996361 0.746249 -0.658168 + -0.913094 1.8987 -1.23785 -0.449539 0.75322 -0.480181 + -0.935862 1.8728 -1.2436 -0.734935 0.627395 -0.257385 + -0.938796 1.87199 -1.23129 -0.856756 0.510932 0.070134 + -0.936683 1.87061 -1.22284 -0.833461 0.274293 0.479694 + -0.898674 1.87111 -1.26329 0.247186 0.504264 -0.827416 + -0.914757 1.87286 -1.26323 -0.126644 0.629636 -0.766498 + -0.928538 1.87366 -1.25585 -0.512226 0.675654 -0.530204 + -0.961024 1.83316 -1.2666 -0.810346 0.510056 -0.288413 + -0.963958 1.83235 -1.2543 -0.919178 0.391394 0.0438425 + -0.915835 1.83019 -1.29091 0.233277 0.472791 -0.849736 + -0.937617 1.83285 -1.29074 -0.171827 0.568522 -0.804524 + -0.951398 1.83367 -1.28336 -0.572521 0.576395 -0.583084 + -0.904902 1.77684 -1.31216 0.636783 0.383808 -0.668729 + -0.923847 1.78005 -1.32045 0.226508 0.47211 -0.851943 + -0.94563 1.78271 -1.32028 -0.181963 0.492792 -0.850909 + -0.964985 1.78391 -1.3099 -0.639266 0.428759 -0.638361 + -0.897349 1.7179 -1.34324 0.626536 0.441472 -0.642305 + -0.916294 1.72112 -1.35154 0.237272 0.482735 -0.843012 + -0.947541 1.72482 -1.35133 -0.21631 0.420502 -0.881129 + -0.966896 1.726 -1.34095 -0.635336 0.344638 -0.691067 + -0.974611 1.7834 -1.29314 -0.883852 0.322957 -0.338385 + -0.869117 1.64944 -1.35508 0.96164 0.229512 -0.150244 + -0.882085 1.65322 -1.37472 0.737273 0.457839 -0.496801 + -0.898097 1.66592 -1.38022 0.34574 0.527152 -0.776257 + -0.929344 1.6696 -1.38002 -0.174811 0.420133 -0.890466 + -0.875055 1.65277 -1.32577 0.976768 0.0268427 0.212611 + -0.861878 1.58725 -1.38164 0.810577 0.58253 0.0601896 + -0.847109 1.57183 -1.41682 0.606951 0.544404 -0.578994 + -0.863122 1.58453 -1.42233 0.2779 0.460555 -0.843007 + -0.88041 1.65102 -1.30338 0.863869 -0.111854 0.491141 + -0.884443 1.60108 -1.31182 0.726892 0.579662 0.368266 + -0.867816 1.59058 -1.35233 0.791151 0.604791 0.0911428 + -0.838959 1.57718 -1.37458 -0.0929606 0.915269 -0.39197 + -0.904427 1.65354 -1.28173 0.504421 -0.221484 0.834568 + -0.90846 1.6036 -1.29017 0.351924 0.557286 0.752052 + -0.880133 1.59288 -1.26871 0.437136 0.885603 -0.156908 + -0.86893 1.59311 -1.27569 -0.345372 0.881904 0.320881 + -0.870447 1.59662 -1.30624 -0.182747 0.976742 -0.112155 + -0.900676 1.7103 -1.26843 0.566795 -0.183282 0.803213 + -0.932203 1.65554 -1.26966 0.248465 -0.263881 0.932004 + -0.950853 1.59833 -1.28282 0.0634073 0.500791 0.863243 + -0.908318 1.60006 -1.27887 0.0903891 0.971264 -0.220174 + -0.928452 1.71229 -1.25636 0.179959 -0.215087 0.959871 + -0.966784 1.65206 -1.26669 -0.179798 -0.0784023 0.980574 + -0.985434 1.59485 -1.27985 0.0396224 0.37881 0.924626 + -0.95071 1.59479 -1.27152 -0.189605 0.935081 -0.299456 + -0.950772 1.77543 -1.24251 -0.353209 -0.232864 0.9061 + -0.949324 1.71495 -1.25716 -0.30387 -0.149123 0.94097 + -0.987782 1.65617 -1.28064 -0.572072 0.200185 0.795399 + -1.02909 1.58369 -1.27341 -0.486597 0.588652 0.645532 + -0.986353 1.58749 -1.26568 -0.283168 0.945129 -0.162931 + -0.939057 1.82614 -1.2245 -0.353492 -0.224564 0.908083 + -0.95363 1.82897 -1.23424 -0.681336 -0.0257633 0.731517 + -0.965345 1.77828 -1.25224 -0.682496 -0.133003 0.718686 + -0.970322 1.71906 -1.2711 -0.666648 -0.0469242 0.743895 + -1.00127 1.65438 -1.2915 -0.823559 0.305949 0.477646 + -0.929133 1.86853 -1.21377 -0.659105 0.0268868 0.75157 + -0.96118 1.83107 -1.24331 -0.869195 0.177609 0.46147 + -0.976077 1.78081 -1.26509 -0.896511 0.00725937 0.442961 + -0.981054 1.7216 -1.28396 -0.886765 0.072845 0.456445 + -0.978855 1.78209 -1.27609 -0.982353 0.185872 0.0208488 + -0.985075 1.72368 -1.29993 -0.97906 0.203571 0.00074545 + -1.00529 1.65647 -1.30746 -0.954991 0.288837 -0.0675579 + -1.02939 1.58151 -1.30581 -0.802917 0.410275 -0.432433 + -1.04258 1.58189 -1.28426 -0.819923 0.552277 0.150722 + -0.980832 1.72499 -1.31697 -0.891432 0.267849 -0.36552 + -0.993663 1.65649 -1.33417 -0.860176 0.273327 -0.430569 + -0.979727 1.6575 -1.35814 -0.677031 0.312093 -0.666503 + -0.99587 1.58131 -1.37529 -0.700148 0.312471 -0.641993 + -1.01775 1.58153 -1.33251 -0.862554 0.302415 -0.405643 + -0.945141 1.64544 -1.38566 -0.364868 0.352261 -0.861849 + -0.961283 1.56924 -1.40281 -0.412822 0.280314 -0.866603 + -0.959292 1.50938 -1.42342 -0.340609 0.325865 -0.881928 + -1.01072 1.52239 -1.39266 -0.605649 0.402589 -0.686376 + -1.03261 1.52261 -1.34987 -0.674224 0.515633 -0.528719 + -0.878919 1.56037 -1.42798 -0.195071 0.310706 -0.930274 + -0.876928 1.5005 -1.44858 -0.144409 0.311681 -0.939149 + -0.91434 1.41689 -1.47011 -0.156472 0.311528 -0.937266 + -0.963096 1.45929 -1.44114 -0.315615 0.356528 -0.87936 + -1.01453 1.4723 -1.41038 -0.425182 0.364873 -0.828304 + -0.846034 1.46578 -1.46154 0.233616 0.241625 -0.941828 + -0.883447 1.38217 -1.48305 0.124474 0.13202 -0.983401 + -0.898388 1.34766 -1.48767 0.123335 -0.0950757 -0.9878 + -0.917624 1.35307 -1.48944 -0.00480222 -0.000494099 -0.999988 + -0.931404 1.37385 -1.48235 -0.146305 0.292848 -0.944899 + -0.825578 1.46091 -1.45214 0.562182 0.189546 -0.804999 + -0.858552 1.35956 -1.47319 0.409302 -0.0362143 -0.91168 + -0.873494 1.32504 -1.47781 0.291707 -0.289544 -0.911631 + -0.905805 1.32772 -1.47999 0.00711285 -0.419096 -0.907914 + -0.800462 1.47952 -1.42216 0.661257 0.205826 -0.72137 + -0.801622 1.36272 -1.44547 0.660726 -0.0894884 -0.745274 + -0.838096 1.3547 -1.4638 0.431881 -0.0956025 -0.896849 + -0.847121 1.30088 -1.4556 0.404243 -0.428369 -0.808139 + -0.878787 1.29238 -1.45967 0.135536 -0.536607 -0.832876 + -0.82419 1.56177 -1.40977 0.337066 0.553259 -0.761768 + -0.797539 1.54957 -1.40402 0.52542 0.33391 -0.782584 + -0.747944 1.46971 -1.36831 0.844839 0.0521338 -0.532475 + -0.776506 1.38133 -1.41549 0.844492 -0.077987 -0.52986 + -0.81319 1.62786 -1.33727 -0.337585 0.68048 -0.650372 + -0.796629 1.62009 -1.34554 0.206189 0.637418 -0.742418 + -0.769978 1.60789 -1.33978 0.543432 0.457793 -0.703638 + -0.745021 1.53976 -1.35016 0.834634 0.182101 -0.519833 + -0.853821 1.58612 -1.34676 -0.128819 0.933463 -0.334743 + -0.828052 1.63679 -1.30945 -0.693575 0.576219 -0.432348 + -0.810805 1.6878 -1.27831 -0.72497 0.464106 -0.508944 + -0.799337 1.68411 -1.29216 -0.350305 0.581457 -0.734298 + -0.782775 1.67633 -1.30044 0.167974 0.577252 -0.799103 + -0.838414 1.63727 -1.28553 -0.833488 0.531842 -0.149804 + -0.821167 1.68827 -1.25439 -0.948822 0.280937 -0.144264 + -0.815791 1.74438 -1.22561 -0.951264 0.268122 -0.152338 + -0.808645 1.74381 -1.24229 -0.747752 0.428121 -0.507523 + -0.797176 1.7401 -1.25615 -0.399648 0.532433 -0.746188 + -0.836896 1.63376 -1.25498 -0.888111 0.302075 0.346423 + -0.820232 1.68161 -1.23398 -0.957166 0.0693887 0.281101 + -0.824419 1.61758 -1.23136 -0.776615 0.159603 0.609423 + -0.807755 1.66545 -1.21036 -0.814483 -0.0830342 0.574216 + -0.806145 1.72636 -1.18875 -0.832721 -0.106153 0.543422 + -0.814856 1.73774 -1.2052 -0.961599 0.0447122 0.270793 + -0.850108 1.57875 -1.2451 -0.318682 0.693232 0.64643 + -0.835122 1.56096 -1.22364 -0.173449 0.690433 0.702295 + -0.809434 1.59979 -1.20989 -0.461089 -0.0244787 0.887016 + -0.796131 1.65424 -1.19988 -0.500294 -0.183112 0.846272 + -0.861311 1.57852 -1.23812 0.733863 0.679289 -0.00336986 + -0.849239 1.56173 -1.2133 0.777123 0.629332 0.0044704 + -0.8172 1.54075 -1.19538 0.0108935 0.571457 0.82056 + -0.794672 1.59027 -1.20888 -0.164164 0.049896 0.98517 + -0.781369 1.64472 -1.19888 0.0255952 -0.226581 0.973656 + -0.87211 1.63319 -1.23201 0.695116 0.40654 -0.592907 + -0.857655 1.61714 -1.21114 0.903617 0.223761 -0.365251 + -0.845582 1.60035 -1.18631 0.984695 0.170564 -0.0358382 + -0.831316 1.54152 -1.18504 0.775414 0.236603 0.58545 + -0.900294 1.64037 -1.24217 0.225142 0.590236 -0.775198 + -0.895755 1.68979 -1.20754 0.258425 0.552647 -0.792336 + -0.873755 1.68132 -1.19933 0.706402 0.434756 -0.558555 + -0.8593 1.66527 -1.17846 0.935592 0.270435 -0.227009 + -0.937101 1.64394 -1.24057 -0.1319 0.592101 -0.794996 + -0.932562 1.69336 -1.20595 -0.127838 0.56311 -0.816434 + -0.929618 1.74917 -1.16933 -0.134395 0.560104 -0.817448 + -0.903856 1.7466 -1.17053 0.228236 0.535647 -0.813013 + -0.881855 1.73813 -1.16231 0.695428 0.406208 -0.592768 + -0.972744 1.63665 -1.23472 -0.516066 0.56559 -0.64326 + -0.95376 1.69237 -1.19926 -0.514852 0.532319 -0.671985 + -0.950816 1.74817 -1.16265 -0.54821 0.518082 -0.656549 + -0.921356 1.79703 -1.13685 -0.137817 0.605058 -0.784163 + -0.895594 1.79447 -1.13804 0.230032 0.510906 -0.828288 + -0.985381 1.63085 -1.22063 -0.705974 0.603704 -0.370328 + -0.966397 1.68657 -1.18517 -0.872173 0.383358 -0.303894 + -0.95951 1.7442 -1.1529 -0.878662 0.362855 -0.310305 + -0.945054 1.79252 -1.1222 -0.826534 0.520191 -0.215043 + -0.93636 1.7965 -1.13195 -0.517403 0.627547 -0.581789 + -1.03001 1.57633 -1.25923 -0.575224 0.816809 -0.044055 + -1.0336 1.58068 -1.23618 -0.825629 0.542276 0.155799 + -0.988965 1.63519 -1.19758 -0.863934 0.503604 -0.0010976 + -0.970598 1.67943 -1.1668 -0.972993 0.229908 0.0206435 + -1.0855 1.52355 -1.28503 -0.72666 0.68691 0.0109257 + -1.07278 1.5156 -1.24957 -0.700988 0.495403 0.513022 + -1.03741 1.56026 -1.23476 -0.691879 0.213944 0.689588 + -0.986193 1.62416 -1.16889 -0.877818 0.208357 0.431304 + -0.967825 1.6684 -1.13811 -0.926718 0.0253183 0.374902 + -1.07231 1.52317 -1.30657 -0.63163 0.658588 -0.409031 + -1.1273 1.48199 -1.31873 -0.739385 0.631231 -0.234218 + -1.13437 1.47422 -1.2827 -0.842878 0.500701 0.19712 + -1.12165 1.46626 -1.24724 -0.689001 0.49929 0.525345 + -1.06195 1.51683 -1.33241 -0.530995 0.650958 -0.542492 + -1.11694 1.47565 -1.34457 -0.570321 0.593929 -0.567435 + -1.14774 1.43202 -1.33843 -0.881684 0.283683 -0.377038 + -1.15481 1.42424 -1.30241 -0.959185 0.275677 -0.0629799 + -1.07912 1.46677 -1.37376 -0.469743 0.541887 -0.696921 + -1.08654 1.42099 -1.39583 -0.492779 0.340748 -0.800662 + -1.12435 1.42987 -1.36663 -0.631998 0.330444 -0.700989 + -1.13619 1.36352 -1.37206 -0.836011 0.0723177 -0.543926 + -1.15203 1.37176 -1.33905 -0.949427 0.00150368 -0.313985 + -1.04978 1.47254 -1.39122 -0.510367 0.488991 -0.707399 + -1.05458 1.42328 -1.4134 -0.461849 0.324665 -0.825402 + -1.07643 1.36615 -1.41705 -0.456017 0.238863 -0.857317 + -1.11281 1.36137 -1.40025 -0.631286 0.163749 -0.758066 + -1.01932 1.42304 -1.43253 -0.428746 0.335059 -0.838995 + -1.04447 1.36845 -1.43462 -0.44154 0.212789 -0.871644 + -1.06289 1.32996 -1.4339 -0.433489 0.0534646 -0.899572 + -1.09927 1.32518 -1.4171 -0.566949 -0.13472 -0.812662 + -1.124 1.32265 -1.39441 -0.748603 -0.231306 -0.621362 + -0.999749 1.41196 -1.44675 -0.424941 0.315738 -0.848372 + -1.02934 1.36782 -1.44163 -0.450422 0.213904 -0.866813 + -1.04776 1.32933 -1.44091 -0.303422 -0.169625 -0.937637 + -1.0756 1.31095 -1.42544 -0.359296 -0.502092 -0.786645 + -1.10033 1.30842 -1.40275 -0.512621 -0.65194 -0.558743 + -0.98016 1.41624 -1.45338 -0.313735 0.356921 -0.879874 + -0.983801 1.36316 -1.47119 -0.44886 0.0466153 -0.892385 + -1.00976 1.35673 -1.45584 -0.476266 0.0428696 -0.878255 + -1.0232 1.32438 -1.44257 -0.164124 -0.561058 -0.811343 + -1.05104 1.306 -1.4271 -0.0461919 -0.735399 -0.676058 + -0.964212 1.36744 -1.47782 -0.278073 0.249054 -0.927711 + -0.950432 1.34667 -1.48492 -0.232695 -0.107729 -0.966565 + -0.959516 1.32626 -1.47543 -0.356838 -0.346624 -0.867478 + -0.975488 1.31856 -1.45992 -0.631631 -0.347653 -0.69295 + -0.986845 1.32558 -1.45128 -0.397712 -0.560167 -0.726662 + -0.997242 1.33079 -1.45792 -0.129543 -0.505558 -0.853012 + -0.92504 1.33313 -1.48176 -0.0503172 -0.374275 -0.925951 + -0.934125 1.31272 -1.47229 -0.0393786 -0.431432 -0.901286 + -0.953963 1.27147 -1.45152 -0.264284 -0.525873 -0.808462 + -0.969935 1.26377 -1.436 -0.5675 -0.62204 -0.539453 + -0.998013 1.28192 -1.41023 -0.681843 -0.57079 -0.457481 + -0.911098 1.29504 -1.46185 0.0410974 -0.496129 -0.867276 + -0.930936 1.2538 -1.44108 -0.0590664 -0.697573 -0.714075 + -0.956661 1.2448 -1.41453 -0.432946 -0.8877 -0.15667 + -0.893346 1.23712 -1.42343 0.13856 -0.841047 -0.522915 + -0.919071 1.22812 -1.39687 -0.226062 -0.973651 -0.030003 + -0.964953 1.26802 -1.36961 -0.365829 -0.845304 0.389398 + -0.984739 1.26295 -1.38875 -0.470922 -0.870186 0.144946 + -0.86168 1.24562 -1.41937 0.371123 -0.764703 -0.52678 + -0.89989 1.22817 -1.37247 -0.159891 -0.981796 0.102529 + -0.945771 1.26806 -1.34521 -0.4441 -0.803746 0.39594 + -0.988898 1.28436 -1.35462 -0.193064 -0.899432 0.392108 + -1.00868 1.27929 -1.37378 -0.205944 -0.946629 0.247952 + -0.810647 1.30891 -1.43728 0.663836 -0.38671 -0.640139 + -0.797745 1.30144 -1.40886 0.786186 -0.463423 -0.408841 + -0.848779 1.23816 -1.39094 0.408277 -0.865968 -0.288807 + -0.884292 1.22887 -1.33956 -0.202803 -0.96004 0.192857 + -0.940004 1.27931 -1.31705 -0.474272 -0.783072 0.402324 + -0.781434 1.29574 -1.36206 0.810838 -0.512512 -0.282618 + -0.833181 1.23887 -1.35803 0.484309 -0.865139 -0.130303 + -0.868618 1.23326 -1.31297 -0.10185 -0.938913 0.328737 + -0.92433 1.28369 -1.29046 -0.48995 -0.794124 0.359606 + -0.969913 1.30349 -1.30289 -0.26035 -0.878781 0.399952 + -0.760195 1.37562 -1.3687 0.893713 -0.185094 -0.408676 + -0.744214 1.35836 -1.33319 0.945043 -0.275886 -0.175448 + -0.769769 1.30105 -1.3271 0.854378 -0.519446 -0.014623 + -0.821516 1.24417 -1.32307 0.499518 -0.864519 0.0555766 + -0.731964 1.45244 -1.3328 0.992013 -0.0319239 -0.122028 + -0.742543 1.37551 -1.30253 0.966831 -0.210614 0.144497 + -0.768097 1.31819 -1.29644 0.892271 -0.438289 0.108423 + -0.804387 1.25859 -1.2947 0.630796 -0.774476 0.0477846 + -0.851488 1.24768 -1.28461 -0.067139 -0.931338 0.357913 + -0.731258 1.53341 -1.31358 0.998527 -0.0148241 0.0521915 + -0.741959 1.47673 -1.30362 0.901197 -0.00626066 0.433365 + -0.737625 1.4509 -1.30698 0.948698 0.0533647 0.311649 + -0.748204 1.37398 -1.2767 0.956536 -0.145545 0.252698 + -0.73042 1.58921 -1.28664 0.996852 -0.0416892 -0.0674328 + -0.754843 1.53399 -1.27322 0.864178 -0.240312 0.442093 + -0.765543 1.47731 -1.26327 0.86311 0.0311546 0.504054 + -0.771192 1.37805 -1.22652 0.854608 0.073574 0.514034 + -0.766858 1.35223 -1.22987 0.887648 -0.0364215 0.459079 + -0.744183 1.59556 -1.32321 0.797809 0.277038 -0.535491 + -0.73886 1.65542 -1.28029 0.804516 0.334796 -0.490577 + -0.729767 1.64655 -1.26158 0.988651 0.118691 -0.0920931 + -0.735051 1.58088 -1.25955 0.924088 -0.288213 0.250988 + -0.764655 1.66775 -1.29685 0.51872 0.478771 -0.708313 + -0.767748 1.72589 -1.25841 0.507052 0.46029 -0.728719 + -0.749705 1.71721 -1.2469 0.781544 0.341015 -0.522396 + -0.740612 1.70835 -1.2282 0.98953 0.115902 -0.0860029 + -0.734398 1.63822 -1.23451 0.936057 -0.0757107 0.343605 + -0.785869 1.73448 -1.26199 0.104175 0.541907 -0.833957 + -0.775806 1.7833 -1.22897 0.112083 0.538153 -0.835361 + -0.762937 1.77707 -1.22652 0.484678 0.387595 -0.784129 + -0.744894 1.76839 -1.21501 0.779226 0.193029 -0.596278 + -0.787113 1.78893 -1.22313 -0.34934 0.613948 -0.707834 + -0.755451 1.82303 -1.20038 0.1374 0.551877 -0.822528 + -0.742583 1.81679 -1.19792 0.497042 0.347328 -0.795181 + -0.729409 1.81058 -1.18933 0.77529 0.121646 -0.619781 + -0.73841 1.76216 -1.20164 0.97978 -0.0917826 -0.177783 + -0.795407 1.79133 -1.21336 -0.658041 0.586085 -0.472744 + -0.764379 1.82667 -1.19626 -0.277715 0.681506 -0.677069 + -0.741745 1.84601 -1.18167 0.204181 0.659839 -0.723134 + -0.733057 1.84215 -1.17988 0.514365 0.496153 -0.699472 + -0.802553 1.79192 -1.19667 -0.882195 0.461421 -0.0939292 + -0.772673 1.82908 -1.18649 -0.579913 0.69253 -0.429073 + -0.750673 1.84965 -1.17755 -0.188094 0.794018 -0.578062 + -0.743052 1.85483 -1.16918 0.00447195 0.913352 -0.407147 + -0.738424 1.85294 -1.17131 0.27292 0.812698 -0.514817 + -0.801975 1.78702 -1.18221 -0.911946 0.234796 0.336491 + -0.778137 1.82888 -1.1742 -0.800014 0.597594 -0.0534719 + -0.756334 1.85098 -1.17113 -0.449576 0.819039 -0.35645 + -0.793264 1.77565 -1.16576 -0.782719 0.0284441 0.621725 + -0.777559 1.82398 -1.15972 -0.844614 0.357656 0.398383 + -0.761798 1.85078 -1.15885 -0.657911 0.752358 0.0333343 + -0.751545 1.85605 -1.1564 -0.326852 0.940235 0.0955249 + -0.748713 1.85615 -1.16277 -0.217755 0.957264 -0.190338 + -0.784826 1.76798 -1.15815 -0.511949 -0.171132 0.841797 + -0.771158 1.81581 -1.14754 -0.725054 0.144512 0.673359 + -0.761438 1.84749 -1.14925 -0.684288 0.573735 0.450087 + -0.794522 1.71516 -1.17827 -0.534363 -0.246129 0.808626 + -0.774765 1.76119 -1.15758 -0.0640767 -0.360595 0.930519 + -0.754731 1.8035 -1.13919 -0.0356894 -0.330692 0.943064 + -0.76272 1.80815 -1.13993 -0.445973 -0.098756 0.889581 + -0.78446 1.70838 -1.1777 -0.0523457 -0.337575 0.939842 + -0.763914 1.75726 -1.16133 0.283687 -0.432456 0.855864 + -0.74388 1.79956 -1.14295 0.298472 -0.448309 0.842576 + -0.734015 1.8273 -1.13362 0.388158 -0.136265 0.911463 + -0.741401 1.82964 -1.13126 0.107301 -0.0399785 0.993422 + -0.766167 1.63927 -1.20409 0.390237 -0.20961 0.896537 + -0.769258 1.70293 -1.18292 0.332011 -0.329471 0.883865 + -0.74944 1.75483 -1.17051 0.626237 -0.428749 0.651154 + -0.733049 1.79826 -1.14971 0.615789 -0.479637 0.625101 + -0.774195 1.59321 -1.20828 0.302909 -0.051395 0.951633 + -0.745318 1.63607 -1.21726 0.715067 -0.168922 0.67834 + -0.754784 1.7005 -1.1921 0.668835 -0.257342 0.697448 + -0.796723 1.54369 -1.19477 0.41874 0.0558634 0.906386 + -0.753347 1.59002 -1.22145 0.722071 -0.200015 0.662275 + -0.743863 1.70264 -1.20935 0.934175 -0.0959354 0.343675 + -0.865981 1.48471 -1.16314 0.40967 -0.0576064 0.910413 + -0.823026 1.46197 -1.17892 0.487505 0.0327931 0.872504 + -0.804852 1.47827 -1.19603 0.789687 -0.00834706 0.613453 + -0.796371 1.52699 -1.20372 0.878679 -0.194765 0.435878 + -0.850865 1.53594 -1.16128 0.655846 -0.118078 0.745603 + -0.926244 1.49054 -1.13347 0.22992 -0.104114 0.967624 + -0.957644 1.41559 -1.13398 0.174036 -0.0592022 0.982958 + -0.896919 1.43523 -1.15219 0.300657 -0.0208961 0.953503 + -0.853963 1.41249 -1.16796 0.30365 -0.0227408 0.952512 + -0.871136 1.58554 -1.14314 0.621126 -0.119351 0.774569 + -0.911128 1.54176 -1.13161 0.227288 -0.127485 0.965447 + -0.959461 1.50028 -1.13282 -0.360415 0.0938556 0.928058 + -0.990861 1.42533 -1.13332 -0.302588 0.130339 0.944168 + -0.976872 1.35841 -1.13414 0.101286 -0.115824 0.988092 + -0.851587 1.59112 -1.1669 0.861823 0.0620139 0.503404 + -0.876677 1.64231 -1.1261 0.62087 -0.184222 0.76196 + -0.900081 1.58792 -1.12604 0.266269 -0.213279 0.940007 + -0.937216 1.59524 -1.12558 -0.298504 -0.193999 0.934484 + -0.948263 1.54908 -1.13115 -0.399725 0.0225855 0.916357 + -0.855673 1.6544 -1.1612 0.983547 0.13168 0.123674 + -0.861678 1.64516 -1.14179 0.859872 -0.0649668 0.506359 + -0.887343 1.7067 -1.10138 0.59639 -0.26688 0.75703 + -0.905622 1.64469 -1.10901 0.241066 -0.27587 0.930474 + -0.868179 1.71596 -1.13054 0.994723 0.0547532 0.0867635 + -0.872343 1.70956 -1.11707 0.867025 -0.132453 0.480337 + -0.871456 1.76321 -1.09177 0.847421 -0.340439 0.407405 + -0.882147 1.76099 -1.0807 0.567752 -0.422483 0.706517 + -0.90756 1.70853 -1.08935 0.233078 -0.324331 0.916779 + -0.871806 1.72683 -1.1478 0.93999 0.223535 -0.25778 + -0.869894 1.77725 -1.11761 0.927553 0.0460175 -0.370847 + -0.867292 1.76962 -1.10525 0.988085 -0.150058 -0.0342125 + -0.879943 1.78854 -1.13211 0.668 0.295993 -0.682762 + -0.863138 1.82711 -1.10443 0.686355 0.24909 -0.68328 + -0.855652 1.81903 -1.09362 0.914461 -0.0115536 -0.404508 + -0.85305 1.8114 -1.08127 0.973057 -0.221965 -0.0623749 + -0.856177 1.80659 -1.07119 0.842332 -0.399671 0.361579 + -0.878788 1.83304 -1.11036 0.244258 0.523043 -0.816556 + -0.867431 1.85564 -1.09128 0.298002 0.713316 -0.634331 + -0.857132 1.85179 -1.0873 0.700486 0.527575 -0.480608 + -0.849646 1.84372 -1.07649 0.937572 0.293633 -0.186383 + -0.897558 1.83475 -1.10967 -0.1086 0.648312 -0.75359 + -0.886201 1.85735 -1.09059 -0.0874498 0.798326 -0.595842 + -0.880174 1.86256 -1.08044 -0.0212004 0.947889 -0.317893 + -0.870445 1.86166 -1.0808 0.230179 0.915618 -0.329637 + -0.860146 1.85782 -1.07682 0.607765 0.788699 -0.0925984 + -0.912562 1.83421 -1.10477 -0.476359 0.708658 -0.520467 + -0.896175 1.85682 -1.08738 -0.408271 0.816717 -0.407784 + -0.890148 1.86201 -1.07722 -0.294137 0.949637 -0.108037 + -0.878847 1.864 -1.07216 0.00391151 0.988105 0.153731 + -0.869117 1.86311 -1.07252 0.275387 0.948594 0.155986 + -0.91926 1.83109 -1.09737 -0.760482 0.631842 -0.149811 + -0.902873 1.85371 -1.07998 -0.686894 0.723839 -0.0650683 + -0.89362 1.8604 -1.07339 -0.46137 0.879973 0.113075 + -0.882319 1.86238 -1.06833 -0.109051 0.905853 0.409314 + -0.865237 1.85893 -1.06692 0.370934 0.853788 0.365314 + -0.948172 1.78724 -1.10924 -0.919925 0.3827 0.0853091 + -0.922378 1.82582 -1.0844 -0.85215 0.502488 0.146106 + -0.904925 1.85022 -1.07134 -0.767874 0.612468 0.187758 + -0.895672 1.85692 -1.06475 -0.510303 0.809169 0.291266 + -0.8803 1.85971 -1.0642 0.0638386 0.904216 0.422277 + -0.963711 1.73707 -1.13453 -0.979912 0.198758 0.0163388 + -0.946256 1.77957 -1.08917 -0.888549 0.20346 0.4112 + -0.920922 1.82009 -1.06974 -0.830829 0.32796 0.449628 + -0.903469 1.84451 -1.05668 -0.736943 0.455267 0.499646 + -0.894917 1.85396 -1.05715 -0.514719 0.71296 0.476184 + -0.961795 1.7294 -1.11447 -0.937814 0.0362235 0.345242 + -0.937389 1.77329 -1.07643 -0.674792 -0.0327488 0.737281 + -0.912055 1.81381 -1.057 -0.626707 0.0496546 0.777671 + -0.897618 1.84035 -1.04833 -0.547161 0.254233 0.797484 + -0.955425 1.65951 -1.12022 -0.686783 -0.168119 0.707153 + -0.949395 1.72051 -1.09659 -0.69239 -0.15808 0.703993 + -0.919181 1.76651 -1.0674 -0.272467 -0.264192 0.925183 + -0.898515 1.80898 -1.05025 -0.247126 -0.216284 0.944537 + -0.963392 1.60487 -1.13858 -0.64414 -0.148649 0.750325 + -0.929249 1.64988 -1.10723 -0.243327 -0.282701 0.927832 + -0.931187 1.71372 -1.08756 -0.279694 -0.290582 0.915059 + -0.902365 1.76281 -1.06867 0.194324 -0.405529 0.893188 + -0.990011 1.60374 -1.16747 -0.790188 0.0614481 0.609776 + -0.97759 1.55466 -1.16298 -0.70395 0.0336149 0.709453 + -1.00421 1.55353 -1.19186 -0.753481 0.145523 0.641163 + -1.03957 1.50887 -1.20666 -0.644419 0.380784 0.66312 + -0.988788 1.50586 -1.16464 -0.645305 0.220088 0.731534 + -1.09297 1.44319 -1.20978 -0.589007 0.397904 0.70338 + -1.06975 1.42015 -1.1794 -0.539634 0.343438 0.768665 + -1.01636 1.48583 -1.17629 -0.548849 0.35996 0.754449 + -1.15167 1.42218 -1.25256 -0.857123 0.312085 0.409808 + -1.12299 1.39912 -1.2151 -0.700725 0.1988 0.685173 + -1.11115 1.37852 -1.19769 -0.719032 0.175663 0.67241 + -1.08528 1.38534 -1.17552 -0.595048 0.27492 0.755207 + -1.01843 1.40529 -1.14496 -0.434601 0.216568 0.874197 + -1.1603 1.41239 -1.27724 -0.971525 0.219627 0.0889032 + -1.14928 1.36379 -1.24717 -0.884151 -0.0473791 0.464792 + -1.13744 1.34319 -1.22976 -0.844491 -0.0214769 0.535139 + -1.10434 1.33974 -1.18294 -0.69842 -0.0383065 0.714662 + -1.07848 1.34656 -1.16078 -0.535038 -0.0589606 0.842768 + -1.15752 1.35991 -1.31387 -0.987781 -0.0721246 -0.138155 + -1.15791 1.354 -1.27186 -0.979507 -0.109869 0.168806 + -1.14028 1.32026 -1.23683 -0.87522 -0.17426 0.451247 + -1.10719 1.31682 -1.19002 -0.672604 -0.271434 0.688424 + -1.05663 1.3173 -1.15837 -0.303517 -0.441757 0.844232 + -1.13984 1.33089 -1.36139 -0.919016 -0.152475 -0.36354 + -1.14995 1.32335 -1.3271 -0.951244 -0.250584 -0.179842 + -1.15034 1.31745 -1.28508 -0.966005 -0.258375 -0.00879001 + -1.14609 1.30588 -1.26206 -0.932197 -0.295606 0.208866 + -1.12251 1.28682 -1.22596 -0.711889 -0.462359 0.528619 + -1.12878 1.30845 -1.37287 -0.717244 -0.572547 -0.397179 + -1.1389 1.30092 -1.33857 -0.809437 -0.473829 -0.346839 + -1.13466 1.27087 -1.31396 -0.76777 -0.560942 -0.309632 + -1.13041 1.25932 -1.29094 -0.547328 -0.832256 0.0882171 + -1.12832 1.27245 -1.2512 -0.556755 -0.761701 0.331414 + -1.10613 1.29619 -1.37587 -0.386289 -0.848846 -0.360889 + -1.10453 1.28748 -1.35446 -0.379836 -0.767747 -0.516032 + -1.1003 1.25744 -1.32985 -0.13971 -0.905314 -0.401109 + -1.09158 1.25722 -1.30268 0.184173 -0.976334 0.11337 + -1.07767 1.29616 -1.40574 -0.256972 -0.864061 -0.432855 + -1.0541 1.28699 -1.38359 -0.20425 -0.941605 -0.267698 + -1.0525 1.27827 -1.36219 0.00662837 -0.964312 -0.264685 + -1.03138 1.2821 -1.34221 0.195588 -0.979978 -0.0372543 + -1.02267 1.2819 -1.31504 0.312634 -0.939515 0.139894 + -1.05239 1.28725 -1.38674 -0.144581 -0.938619 -0.313194 + -1.02715 1.28029 -1.38065 -0.147197 -0.986975 -0.0649175 + -1.01639 1.28195 -1.37049 -0.0297525 -0.977967 0.206628 + -0.995269 1.28579 -1.35051 0.0726601 -0.976132 0.20466 + -1.02576 1.29708 -1.4081 -0.0238752 -0.836328 -0.54771 + -1.02544 1.28055 -1.3838 -0.290863 -0.850832 -0.437588 + -1.01945 1.27762 -1.38393 -0.213561 -0.962452 -0.167564 + -1.01536 1.29187 -1.40145 -0.20208 -0.76181 -0.615475 + -1.00937 1.28894 -1.4016 -0.543251 -0.532229 -0.649315 + -0.975681 1.29224 -1.33105 -0.237009 -0.882469 0.406295 + -0.982052 1.29366 -1.32695 0.158455 -0.94054 0.30046 + -1.01727 1.29321 -1.28847 0.357158 -0.914166 0.191672 + -1.08949 1.27036 -1.26294 0.175018 -0.96174 0.21077 + -0.976651 1.30498 -1.30037 0.143032 -0.925213 0.351458 + -0.97443 1.31079 -1.28553 0.111352 -0.989558 0.0915218 + -1.00854 1.29778 -1.2616 0.267142 -0.95562 -0.124199 + -1.08077 1.27493 -1.23607 0.117449 -0.991031 0.0637386 + -1.10087 1.27697 -1.21521 -0.289717 -0.842208 0.454697 + -0.967692 1.30929 -1.28807 -0.283755 -0.931474 0.227685 + -0.972711 1.31055 -1.28343 -0.0629002 -0.98014 -0.188068 + -1.00682 1.29754 -1.2595 0.13348 -0.93992 -0.314219 + -1.03364 1.27882 -1.21467 0.0470027 -0.991369 -0.122387 + -1.05374 1.28086 -1.19382 -0.11955 -0.891196 0.437582 + -0.951437 1.30384 -1.27738 -0.391854 -0.912337 0.118712 + -0.956456 1.30509 -1.27275 -0.171368 -0.957468 -0.23214 + -0.973217 1.29523 -1.24871 0.00416175 -0.919687 -0.392631 + -1.00003 1.27652 -1.20389 -0.15396 -0.971044 -0.182677 + -0.921645 1.2939 -1.25628 -0.349703 -0.934104 0.0718102 + -0.928007 1.29472 -1.25153 -0.148986 -0.943339 -0.296506 + -0.944768 1.28487 -1.2275 -0.075795 -0.884943 -0.459491 + -0.894538 1.27375 -1.26936 -0.424659 -0.805226 0.413854 + -0.873612 1.2749 -1.24928 -0.359625 -0.856121 0.371114 + -0.890082 1.28386 -1.24262 -0.316667 -0.947785 0.0377581 + -0.896444 1.28468 -1.23787 -0.183211 -0.919789 -0.347019 + -0.907848 1.27721 -1.22204 -0.128606 -0.849989 -0.510862 + -0.830563 1.24882 -1.26453 0.0500492 -0.973579 0.222797 + -0.824941 1.26014 -1.23715 0.134504 -0.954576 0.265882 + -0.841411 1.2691 -1.23049 -0.440981 -0.86615 -0.235201 + -0.852815 1.26164 -1.21466 -0.0481074 -0.976155 -0.211675 + -0.804118 1.26001 -1.27021 0.639207 -0.761723 0.105795 + -0.798497 1.27132 -1.24282 0.657952 -0.709903 0.25127 + -0.792617 1.28394 -1.22778 0.722049 -0.624145 0.298476 + -0.830468 1.26529 -1.20629 0.368574 -0.830541 0.417558 + -0.767829 1.31962 -1.27193 0.87545 -0.481816 0.0379594 + -0.761949 1.33225 -1.25689 0.934551 -0.326203 0.142147 + -0.780603 1.31049 -1.21006 0.790034 -0.326356 0.518978 + -0.818454 1.29184 -1.18857 0.474744 -0.42833 0.768864 + -0.80509 1.36213 -1.18251 0.528553 -0.0371004 0.848089 + -0.830741 1.31746 -1.17781 0.312874 -0.149178 0.938006 + -0.913342 1.25765 -1.1709 0.157883 -0.755623 0.635694 + -0.935689 1.254 -1.17927 -0.149671 -0.978562 0.141473 + -0.97261 1.26164 -1.18472 -0.194946 -0.980533 0.0234855 + -0.786916 1.37844 -1.19961 0.795651 -0.0962921 0.598053 + -0.879614 1.36781 -1.16327 0.252023 -0.0747617 0.964829 + -0.925629 1.28328 -1.16015 0.232275 -0.209838 0.949745 + -0.781268 1.4777 -1.23637 0.862814 0.0326103 0.504469 + -0.772786 1.52642 -1.24407 0.842236 -0.253051 0.47603 + -0.752994 1.57331 -1.2304 0.795897 -0.349974 0.49403 + -0.916147 1.37805 -1.15235 0.2884 -0.10794 0.951407 + -0.962162 1.29351 -1.14923 0.11506 -0.380154 0.917738 + -0.997406 1.27631 -1.15377 -0.28009 -0.711521 0.644428 + -1.01212 1.34121 -1.13867 -0.187961 -0.197365 0.962142 + -1.02483 1.29119 -1.17293 -0.333986 -0.746365 0.575667 + -1.08555 1.30697 -1.17926 -0.430371 -0.486571 0.760283 + -1.03396 1.37048 -1.14108 -0.276228 0.0983286 0.956049 + -0.881699 1.8053 -1.05151 0.224009 -0.41161 0.883401 + -0.884078 1.83552 -1.04158 -0.147377 0.043993 0.988101 + -0.866868 1.80436 -1.06011 0.560762 -0.461412 0.687492 + -0.872943 1.83326 -1.04231 0.280845 -0.0786284 0.956527 + -0.870912 1.84504 -1.04603 0.346052 0.388959 0.853791 + -0.882047 1.8473 -1.0453 -0.0799213 0.439578 0.894642 + -0.889066 1.8498 -1.0488 -0.354846 0.543174 0.760951 + -0.851051 1.83385 -1.05827 0.861569 -0.0510504 0.505067 + -0.858111 1.83233 -1.05092 0.628433 -0.114909 0.76933 + -0.863225 1.84456 -1.05049 0.539952 0.391118 0.745304 + -0.869399 1.85334 -1.05423 0.335924 0.772242 0.539256 + -0.877086 1.85383 -1.04977 0.164155 0.747204 0.644002 + -0.847924 1.83866 -1.06835 0.985729 0.12353 0.114364 + -0.854544 1.84856 -1.06307 0.763419 0.544449 0.347515 + -0.856165 1.84608 -1.05784 0.693148 0.44524 0.56684 + -0.86484 1.85376 -1.05757 0.395155 0.744711 0.537827 + -0.856266 1.85362 -1.07121 0.738622 0.66465 0.112596 + -0.863219 1.85625 -1.06279 0.427837 0.802477 0.415915 + -0.884859 1.8593 -1.06086 -0.100546 0.974081 0.202626 + -0.884105 1.85633 -1.05326 -0.120769 0.838497 0.531355 + -0.741661 1.75646 -1.18278 0.901418 -0.322646 0.288696 + -0.72527 1.79989 -1.16198 0.882191 -0.401839 0.245487 + -0.722925 1.80436 -1.17595 0.960255 -0.19539 -0.199333 + -0.715678 1.83173 -1.16247 0.992216 0.0606605 -0.108756 + -0.718023 1.82726 -1.14849 0.927909 -0.120958 0.352639 + -0.723183 1.82601 -1.14039 0.699441 -0.170049 0.694166 + -0.719883 1.83594 -1.17128 0.812393 0.29715 -0.501716 + -0.722907 1.84586 -1.16508 0.738021 0.601064 -0.306672 + -0.718702 1.84165 -1.15626 0.904508 0.422866 0.0552204 + -0.719918 1.83933 -1.14902 0.884694 0.276454 0.375354 + -0.725078 1.83808 -1.14091 0.670735 0.225041 0.706733 + -0.729735 1.84908 -1.16954 0.540625 0.683133 -0.490973 + -0.727286 1.85203 -1.15864 0.668437 0.742372 0.0455698 + -0.727866 1.85081 -1.15354 0.505989 0.833739 0.221031 + -0.72402 1.8482 -1.15171 0.65874 0.729355 0.184669 + -0.725235 1.84589 -1.14446 0.627696 0.584031 0.514689 + -0.734115 1.85525 -1.16309 0.404735 0.885162 -0.229518 + -0.738743 1.85714 -1.16096 0.175885 0.981258 -0.0787225 + -0.741575 1.85703 -1.15459 0.111935 0.981126 0.157681 + -0.742155 1.85581 -1.14948 0.0830682 0.919877 0.383309 + -0.738837 1.85158 -1.14317 0.165112 0.81137 0.560729 + -0.734991 1.84898 -1.14134 0.28898 0.734137 0.614438 + -0.73085 1.84656 -1.14096 0.41381 0.578669 0.702783 + -0.730692 1.83876 -1.1374 0.461874 0.259079 0.848263 + -0.751185 1.85277 -1.14682 -0.338569 0.797565 0.49926 + -0.747867 1.84854 -1.14049 -0.240256 0.671139 0.70132 + -0.742219 1.8435 -1.13543 -0.00154157 0.516416 0.856336 + -0.738078 1.84109 -1.13504 0.251153 0.363366 0.897155 + -0.755037 1.83934 -1.13707 -0.550152 0.370944 0.748153 + -0.749389 1.83431 -1.13199 -0.282888 0.174373 0.943169 + 0.872043 1.89298 -1.22862 -0.906308 0.309655 -0.287609 + 0.878324 1.8668 -1.24714 -0.923999 -0.0316581 -0.381081 + 0.875993 1.86509 -1.23433 -0.963138 -0.268909 -0.00727253 + 0.878844 1.8951 -1.23876 -0.630611 0.522384 -0.573974 + 0.885126 1.86893 -1.25728 -0.665671 0.256176 -0.700896 + 0.893321 1.82549 -1.27123 -0.92697 0.0239723 -0.374368 + 0.890991 1.82377 -1.25843 -0.98238 -0.186885 0.00167389 + 0.870466 1.89166 -1.22009 -0.991227 0.124971 0.0430212 + 0.878416 1.90396 -1.21984 -0.68511 0.715364 -0.137398 + 0.881941 1.90506 -1.22509 -0.505147 0.792278 -0.342232 + 0.890922 1.90658 -1.22905 -0.207644 0.850486 -0.483278 + 0.887826 1.89661 -1.24271 -0.263922 0.670285 -0.693587 + 0.878806 1.86382 -1.22269 -0.805291 -0.438182 0.39938 + 0.873278 1.89039 -1.20845 -0.877273 -0.0865625 0.472121 + 0.876839 1.90264 -1.21131 -0.797739 0.590288 0.123178 + 0.887159 1.91034 -1.21301 -0.368141 0.929522 0.0214756 + 0.890685 1.91144 -1.21827 -0.242699 0.956851 -0.159792 + 0.89469 1.82278 -1.24289 -0.816301 -0.373796 0.440374 + 0.904845 1.82269 -1.23241 -0.494589 -0.436018 0.751845 + 0.88896 1.86373 -1.21221 -0.483747 -0.495917 0.721148 + 0.880026 1.89016 -1.20144 -0.579202 -0.214069 0.786574 + 0.878296 1.90197 -1.20528 -0.783152 0.41717 0.461132 + 0.896376 1.771 -1.26494 -0.873527 -0.112645 0.473562 + 0.910577 1.77123 -1.25016 -0.535568 -0.248242 0.807182 + 0.924168 1.82424 -1.22396 -0.108986 -0.391865 0.913545 + 0.903325 1.86447 -1.20606 -0.132739 -0.436019 0.890094 + 0.89439 1.89091 -1.19529 -0.162816 -0.233976 0.958512 + 0.892676 1.772 -1.28048 -0.997109 0.066978 0.0358879 + 0.88112 1.71182 -1.3056 -0.987083 0.147237 0.0631539 + 0.886475 1.71007 -1.2832 -0.875618 -0.0391503 0.481415 + 0.900676 1.7103 -1.26843 -0.562681 -0.176691 0.807571 + 0.9299 1.77278 -1.24171 -0.142804 -0.28556 0.947661 + 0.895936 1.77431 -1.29849 -0.912612 0.230391 -0.337727 + 0.88438 1.71413 -1.3236 -0.894988 0.328628 -0.301662 + 0.869117 1.64944 -1.35508 -0.960438 0.257667 -0.105674 + 0.875055 1.65277 -1.32577 -0.976358 0.0243469 0.214784 + 0.88041 1.65102 -1.30338 -0.857546 -0.096681 0.505241 + 0.902286 1.82802 -1.2849 -0.63934 0.29314 -0.710854 + 0.904902 1.77684 -1.31216 -0.63683 0.383698 -0.668748 + 0.897349 1.7179 -1.34324 -0.632185 0.451788 -0.629468 + 0.882085 1.65322 -1.37472 -0.699378 0.503023 -0.507778 + 0.898674 1.87111 -1.26329 -0.247416 0.504394 -0.827268 + 0.915835 1.83019 -1.29091 -0.233422 0.47246 -0.84988 + 0.923847 1.78005 -1.32045 -0.22648 0.472037 -0.851991 + 0.916294 1.72112 -1.35154 -0.228769 0.490876 -0.840658 + 0.898097 1.66592 -1.38022 -0.32626 0.507299 -0.797623 + 0.903908 1.89837 -1.24266 0.100322 0.745915 -0.658442 + 0.914757 1.87286 -1.26323 0.126985 0.630355 -0.765851 + 0.937617 1.83285 -1.29074 0.171946 0.568439 -0.804557 + 0.94563 1.78271 -1.32028 0.181882 0.492761 -0.850944 + 0.947541 1.72482 -1.35133 0.216111 0.426551 -0.878265 + 0.899259 1.90748 -1.22901 0.0454413 0.874112 -0.483594 + 0.913094 1.8987 -1.23785 0.449427 0.75285 -0.480867 + 0.928538 1.87366 -1.25585 0.511887 0.675928 -0.530182 + 0.951398 1.83367 -1.28336 0.572537 0.57642 -0.583045 + 0.964985 1.78391 -1.3099 0.639097 0.429007 -0.638363 + 0.899021 1.91234 -1.21824 0.057848 0.985096 -0.161983 + 0.908445 1.90781 -1.22421 0.382049 0.863201 -0.330035 + 0.920418 1.89784 -1.2256 0.698801 0.678636 -0.226122 + 0.935862 1.8728 -1.2436 0.734935 0.627395 -0.257385 + 0.961024 1.83316 -1.2666 0.810346 0.510054 -0.288416 + 0.902818 1.91189 -1.21188 0.156502 0.987667 0.00451603 + 0.912241 1.90737 -1.21786 0.542561 0.827549 -0.14419 + 0.922484 1.89698 -1.21745 0.821951 0.564428 0.0762759 + 0.938796 1.87199 -1.23129 0.856756 0.510932 0.070134 + 0.963958 1.83235 -1.2543 0.919178 0.391394 0.0438425 + 0.889304 1.90999 -1.20868 -0.107866 0.985112 0.133863 + 0.904962 1.91155 -1.20754 0.258502 0.961302 0.0952659 + 0.914307 1.90651 -1.20973 0.672262 0.729944 0.12347 + 0.920371 1.8956 -1.209 0.811236 0.318425 0.490409 + 0.936683 1.87061 -1.22284 0.833461 0.274293 0.479694 + 0.885643 1.90921 -1.20591 -0.431256 0.890088 0.147522 + 0.900206 1.91005 -1.20039 0.13545 0.879705 0.455821 + 0.903867 1.91083 -1.20316 0.236963 0.89282 0.383042 + 0.913211 1.9058 -1.20534 0.67462 0.574165 0.463921 + 0.8871 1.90855 -1.19987 -0.432099 0.735092 0.522427 + 0.894546 1.90894 -1.19668 -0.0791984 0.71599 0.693603 + 0.902379 1.90329 -1.19545 0.28921 0.279154 0.915659 + 0.908039 1.90442 -1.19917 0.53613 0.404511 0.740902 + 0.915198 1.89422 -1.20284 0.647464 0.10605 0.754681 + 0.885044 1.90176 -1.19827 -0.539796 0.162203 0.826021 + 0.89249 1.90214 -1.19508 -0.214567 0.115304 0.969879 + 0.90428 1.89206 -1.19567 0.285952 -0.110533 0.951848 + 0.918214 1.86636 -1.2066 0.333127 -0.221324 0.916538 + 0.929133 1.86853 -1.21377 0.659105 0.0268868 0.75157 + 0.95363 1.82897 -1.23424 0.681336 -0.0257633 0.731517 + 0.96118 1.83107 -1.24331 0.869195 0.177609 0.46147 + 0.939057 1.82614 -1.2245 0.35354 -0.224459 0.90809 + 0.950772 1.77543 -1.24251 0.353381 -0.233111 0.90597 + 0.965345 1.77828 -1.25224 0.682393 -0.133226 0.718742 + 0.976077 1.78081 -1.26509 0.896513 0.00726872 0.442958 + 0.978855 1.78209 -1.27609 0.982352 0.185873 0.0208511 + 0.949324 1.71495 -1.25716 0.292957 -0.170495 0.940802 + 0.970322 1.71906 -1.2711 0.671748 -0.0529879 0.738882 + 0.981054 1.7216 -1.28396 0.885054 0.0616257 0.46139 + 0.928452 1.71229 -1.25636 -0.164525 -0.231082 0.958923 + 0.932203 1.65554 -1.26966 -0.223342 -0.225336 0.948336 + 0.966784 1.65206 -1.26669 0.232722 -0.11764 0.965402 + 0.987782 1.65617 -1.28064 0.55103 0.113918 0.826673 + 0.904427 1.65354 -1.28173 -0.519262 -0.205645 0.829504 + 0.90846 1.6036 -1.29017 -0.405016 0.511616 0.757767 + 0.950853 1.59833 -1.28282 -0.0497196 0.491563 0.869421 + 0.985434 1.59485 -1.27985 0.0444115 0.467994 0.882615 + 0.884443 1.60108 -1.31182 -0.727831 0.557227 0.399701 + 0.870447 1.59662 -1.30624 0.221189 0.971373 -0.0866567 + 0.908318 1.60006 -1.27887 -0.0959085 0.971723 -0.215768 + 0.95071 1.59479 -1.27152 0.165589 0.943181 -0.288081 + 0.867816 1.59058 -1.35233 -0.78464 0.61236 0.0967258 + 0.861878 1.58725 -1.38164 -0.861407 0.481143 0.162726 + 0.853821 1.58612 -1.34676 0.123938 0.937864 -0.324115 + 0.847109 1.57183 -1.41682 -0.55664 0.415593 -0.719329 + 0.82419 1.56177 -1.40977 -0.312548 0.545862 -0.777398 + 0.838959 1.57718 -1.37458 0.0167008 0.918155 -0.395869 + 0.828052 1.63679 -1.30945 0.661584 0.604942 -0.443116 + 0.863122 1.58453 -1.42233 -0.300306 0.376533 -0.876378 + 0.878919 1.56037 -1.42798 0.000490382 0.28073 -0.959786 + 0.797539 1.54957 -1.40402 -0.521969 0.331794 -0.785787 + 0.796629 1.62009 -1.34554 -0.152186 0.621972 -0.768108 + 0.81319 1.62786 -1.33727 0.332519 0.657284 -0.676319 + 0.929344 1.6696 -1.38002 0.104402 0.416431 -0.903153 + 0.945141 1.64544 -1.38566 0.358129 0.318716 -0.87759 + 0.979727 1.6575 -1.35814 0.695454 0.298398 -0.653683 + 0.961283 1.56924 -1.40281 0.387895 0.301147 -0.871119 + 0.966896 1.726 -1.34095 0.635205 0.344313 -0.691349 + 0.993663 1.65649 -1.33417 0.860705 0.275485 -0.428129 + 1.01775 1.58153 -1.33251 0.825631 0.358422 -0.435738 + 0.99587 1.58131 -1.37529 0.704373 0.325369 -0.630867 + 0.980832 1.72499 -1.31697 0.899691 0.251182 -0.35702 + 0.985075 1.72368 -1.29993 0.981643 0.190319 -0.012446 + 1.00529 1.65647 -1.30746 0.933858 0.341612 -0.10588 + 0.974611 1.7834 -1.29314 0.883863 0.323067 -0.338252 + 1.00127 1.65438 -1.2915 0.783175 0.352818 0.512013 + 1.04258 1.58189 -1.28426 0.803695 0.593714 0.0397228 + 1.02939 1.58151 -1.30581 0.807925 0.41078 -0.422513 + 1.07231 1.52317 -1.30657 0.666608 0.636141 -0.388534 + 1.06195 1.51683 -1.33241 0.557698 0.624062 -0.547284 + 1.03261 1.52261 -1.34987 0.649056 0.453575 -0.610734 + 1.02909 1.58369 -1.27341 0.37508 0.682689 0.627097 + 1.03741 1.56026 -1.23476 0.828056 0.359635 0.4301 + 1.0855 1.52355 -1.28503 0.760083 0.648752 -0.0373316 + 0.986353 1.58749 -1.26568 0.255703 0.940471 -0.223896 + 1.03001 1.57633 -1.25923 0.556939 0.822223 0.11734 + 0.972744 1.63665 -1.23472 0.4639 0.61487 -0.637755 + 0.985381 1.63085 -1.22063 0.711481 0.636714 -0.297304 + 0.988965 1.63519 -1.19758 0.87874 0.477179 0.0107998 + 1.0336 1.58068 -1.23618 0.902987 0.425588 0.0590622 + 0.937101 1.64394 -1.24057 0.108348 0.564176 -0.818514 + 0.932562 1.69336 -1.20595 0.125424 0.565252 -0.815328 + 0.95376 1.69237 -1.19926 0.516272 0.534465 -0.669186 + 0.966397 1.68657 -1.18517 0.864679 0.398109 -0.306332 + 0.900294 1.64037 -1.24217 -0.203537 0.578861 -0.789616 + 0.895755 1.68979 -1.20754 -0.262848 0.546604 -0.795069 + 0.903856 1.7466 -1.17053 -0.228396 0.53578 -0.812881 + 0.929618 1.74917 -1.16933 0.134549 0.560237 -0.817332 + 0.950816 1.74817 -1.16265 0.548122 0.518158 -0.656562 + 0.880133 1.59288 -1.26871 -0.440186 0.888957 -0.126459 + 0.87211 1.63319 -1.23201 -0.692026 0.412763 -0.592222 + 0.873755 1.68132 -1.19933 -0.702369 0.431544 -0.566081 + 0.86893 1.59311 -1.27569 0.333308 0.88666 0.320531 + 0.850108 1.57875 -1.2451 0.31737 0.70288 0.636581 + 0.861311 1.57852 -1.23812 -0.724329 0.689417 -0.00716767 + 0.857655 1.61714 -1.21114 -0.908471 0.230149 -0.348871 + 0.8593 1.66527 -1.17846 -0.942939 0.245602 -0.224824 + 0.836896 1.63376 -1.25498 0.887013 0.30805 0.343966 + 0.824419 1.61758 -1.23136 0.7879 0.153334 0.596408 + 0.809434 1.59979 -1.20989 0.468844 0.0923743 0.878437 + 0.835122 1.56096 -1.22364 0.2324 0.689456 0.686033 + 0.849239 1.56173 -1.2133 -0.76983 0.631154 0.0949045 + 0.838414 1.63727 -1.28553 0.829743 0.542126 -0.132761 + 0.820232 1.68161 -1.23398 0.958758 0.0668034 0.276261 + 0.807755 1.66545 -1.21036 0.817494 -0.06223 0.572566 + 0.810805 1.6878 -1.27831 0.723873 0.458609 -0.515447 + 0.821167 1.68827 -1.25439 0.951288 0.273571 -0.142159 + 0.814856 1.73774 -1.2052 0.961599 0.044988 0.270747 + 0.799337 1.68411 -1.29216 0.368262 0.568784 -0.735436 + 0.808645 1.74381 -1.24229 0.747747 0.428131 -0.507521 + 0.815791 1.74438 -1.22561 0.951262 0.268211 -0.152195 + 0.782775 1.67633 -1.30044 -0.167767 0.577624 -0.798877 + 0.785869 1.73448 -1.26199 -0.104131 0.541873 -0.833985 + 0.797176 1.7401 -1.25615 0.399636 0.532444 -0.746187 + 0.787113 1.78893 -1.22313 0.34934 0.613948 -0.707834 + 0.795407 1.79133 -1.21336 0.658041 0.586085 -0.472744 + 0.764655 1.66775 -1.29685 -0.519034 0.478927 -0.707978 + 0.767748 1.72589 -1.25841 -0.506997 0.460352 -0.728718 + 0.762937 1.77707 -1.22652 -0.485036 0.387786 -0.783812 + 0.775806 1.7833 -1.22897 -0.112055 0.538206 -0.835331 + 0.769978 1.60789 -1.33978 -0.530959 0.481728 -0.697151 + 0.73886 1.65542 -1.28029 -0.801528 0.341671 -0.490728 + 0.749705 1.71721 -1.2469 -0.781608 0.341088 -0.522253 + 0.744894 1.76839 -1.21501 -0.779076 0.193733 -0.596245 + 0.744183 1.59556 -1.32321 -0.806924 0.284152 -0.517813 + 0.729767 1.64655 -1.26158 -0.988843 0.121566 -0.0860849 + 0.740612 1.70835 -1.2282 -0.989546 0.115787 -0.085973 + 0.73841 1.76216 -1.20164 -0.979651 -0.0920684 -0.178347 + 0.729409 1.81058 -1.18933 -0.774944 0.121421 -0.620257 + 0.745021 1.53976 -1.35016 -0.857666 0.140928 -0.494518 + 0.731258 1.53341 -1.31358 -0.992166 -0.120595 -0.032611 + 0.73042 1.58921 -1.28664 -0.99532 0.0286265 -0.0922976 + 0.734398 1.63822 -1.23451 -0.93395 -0.0838859 0.347418 + 0.743863 1.70264 -1.20935 -0.93418 -0.0959446 0.343659 + 0.800462 1.47952 -1.42216 -0.654995 0.201962 -0.728143 + 0.747944 1.46971 -1.36831 -0.821622 0.0109213 -0.569928 + 0.731964 1.45244 -1.3328 -0.994701 0.0114356 -0.102175 + 0.737625 1.4509 -1.30698 -0.950366 0.0642186 0.304435 + 0.741959 1.47673 -1.30362 -0.951476 0.0479465 0.303965 + 0.825578 1.46091 -1.45214 -0.554062 0.229852 -0.800114 + 0.776506 1.38133 -1.41549 -0.878261 -0.00475248 -0.478157 + 0.760195 1.37562 -1.3687 -0.886336 -0.153831 -0.436743 + 0.744214 1.35836 -1.33319 -0.927914 -0.30871 -0.208981 + 0.846034 1.46578 -1.46154 -0.251322 0.276228 -0.92765 + 0.838096 1.3547 -1.4638 -0.415187 -0.111923 -0.902825 + 0.801622 1.36272 -1.44547 -0.651956 -0.0785874 -0.754173 + 0.810647 1.30891 -1.43728 -0.651862 -0.39695 -0.646148 + 0.797745 1.30144 -1.40886 -0.78557 -0.469365 -0.403207 + 0.876928 1.5005 -1.44858 0.132816 0.318797 -0.938471 + 0.883447 1.38217 -1.48305 -0.172928 0.145219 -0.97417 + 0.858552 1.35956 -1.47319 -0.415022 -0.074743 -0.906736 + 0.878787 1.29238 -1.45967 -0.187484 -0.482284 -0.855717 + 0.847121 1.30088 -1.4556 -0.344237 -0.382087 -0.857619 + 0.959292 1.50938 -1.42342 0.335554 0.318392 -0.886583 + 0.963096 1.45929 -1.44114 0.316869 0.355454 -0.879344 + 0.91434 1.41689 -1.47011 0.15869 0.319272 -0.934282 + 1.01072 1.52239 -1.39266 0.689735 0.308729 -0.654944 + 1.01453 1.4723 -1.41038 0.461231 0.414974 -0.784259 + 0.98016 1.41624 -1.45338 0.317951 0.362398 -0.876114 + 0.931404 1.37385 -1.48235 0.150924 0.292162 -0.944385 + 1.04978 1.47254 -1.39122 0.453557 0.540576 -0.708564 + 1.05458 1.42328 -1.4134 0.465144 0.328523 -0.822018 + 1.01932 1.42304 -1.43253 0.431923 0.331593 -0.838742 + 0.999749 1.41196 -1.44675 0.422067 0.320541 -0.848005 + 0.964212 1.36744 -1.47782 0.2982 0.188931 -0.935618 + 1.07912 1.46677 -1.37376 0.46458 0.535617 -0.705181 + 1.08654 1.42099 -1.39583 0.507833 0.322928 -0.798638 + 1.04447 1.36845 -1.43462 0.433339 0.224583 -0.8728 + 1.02934 1.36782 -1.44163 0.443659 0.159694 -0.881853 + 1.00976 1.35673 -1.45584 0.530498 0.0172642 -0.84751 + 1.11694 1.47565 -1.34457 0.615662 0.561044 -0.553345 + 1.12435 1.42987 -1.36663 0.633974 0.337756 -0.695699 + 1.07643 1.36615 -1.41705 0.46611 0.247746 -0.849331 + 1.06289 1.32996 -1.4339 0.433489 0.0534647 -0.899572 + 1.04776 1.32933 -1.44091 0.254579 -0.142309 -0.956524 + 1.1273 1.48199 -1.31873 0.730982 0.646021 -0.219823 + 1.14774 1.43202 -1.33843 0.886451 0.265743 -0.378927 + 1.11281 1.36137 -1.40025 0.602261 0.218063 -0.767939 + 1.09927 1.32518 -1.4171 0.557531 -0.140522 -0.818176 + 1.0756 1.31095 -1.42544 0.359296 -0.502092 -0.786645 + 1.13437 1.47422 -1.2827 0.801884 0.580395 0.141858 + 1.15481 1.42424 -1.30241 0.961423 0.240654 -0.133238 + 1.13619 1.36352 -1.37206 0.845504 0.0866211 -0.526896 + 1.124 1.32265 -1.39441 0.752232 -0.259531 -0.605633 + 1.10033 1.30842 -1.40275 0.512621 -0.65194 -0.558743 + 1.07278 1.5156 -1.24957 0.686427 0.548963 0.476925 + 1.12165 1.46626 -1.24724 0.671236 0.507542 0.540226 + 1.15167 1.42218 -1.25256 0.851174 0.254951 0.458806 + 1.1603 1.41239 -1.27724 0.983932 0.155433 0.0878491 + 1.15203 1.37176 -1.33905 0.929861 0.0917609 -0.356285 + 1.03957 1.50887 -1.20666 0.635208 0.390244 0.666498 + 1.09297 1.44319 -1.20978 0.589965 0.380588 0.712105 + 1.12299 1.39912 -1.2151 0.714026 0.198628 0.671352 + 1.14928 1.36379 -1.24717 0.888024 -0.0493068 0.457146 + 1.15791 1.354 -1.27186 0.960906 -0.173744 0.215576 + 1.00421 1.55353 -1.19186 0.737266 0.0997922 0.668191 + 1.01636 1.48583 -1.17629 0.554872 0.331603 0.762992 + 1.06975 1.42015 -1.1794 0.531778 0.347786 0.772177 + 1.08528 1.38534 -1.17552 0.582804 0.25968 0.770004 + 1.11115 1.37852 -1.19769 0.731748 0.138143 0.667429 + 0.990011 1.60374 -1.16747 0.810996 0.0240756 0.584556 + 0.963392 1.60487 -1.13858 0.646056 -0.107365 0.755701 + 0.97759 1.55466 -1.16298 0.733845 0.00551385 0.679294 + 0.988788 1.50586 -1.16464 0.63886 0.238227 0.73151 + 1.01843 1.40529 -1.14496 0.379943 0.231609 0.895545 + 0.986193 1.62416 -1.16889 0.920829 0.262327 0.288544 + 0.967825 1.6684 -1.13811 0.925109 0.026811 0.378754 + 0.955425 1.65951 -1.12022 0.689505 -0.170272 0.703982 + 0.937216 1.59524 -1.12558 0.255904 -0.164941 0.952527 + 0.948263 1.54908 -1.13115 0.376309 -0.0268754 0.926104 + 0.970598 1.67943 -1.1668 0.971454 0.235007 0.0323743 + 0.963711 1.73707 -1.13453 0.979887 0.198885 0.0163293 + 0.961795 1.7294 -1.11447 0.937887 0.0361091 0.345057 + 0.949395 1.72051 -1.09659 0.69234 -0.15825 0.704004 + 0.929249 1.64988 -1.10723 0.246628 -0.276896 0.928711 + 0.95951 1.7442 -1.1529 0.878679 0.362987 -0.310103 + 0.945054 1.79252 -1.1222 0.826759 0.519852 -0.214996 + 0.948172 1.78724 -1.10924 0.920011 0.382565 0.0849929 + 0.946256 1.77957 -1.08917 0.888531 0.203626 0.411155 + 0.93636 1.7965 -1.13195 0.517344 0.627447 -0.581949 + 0.91926 1.83109 -1.09737 0.760489 0.631822 -0.149855 + 0.922378 1.82582 -1.0844 0.852175 0.502442 0.146117 + 0.920922 1.82009 -1.06974 0.830829 0.32796 0.449628 + 0.937389 1.77329 -1.07643 0.674702 -0.0326782 0.737367 + 0.921356 1.79703 -1.13685 0.137795 0.605047 -0.784175 + 0.912562 1.83421 -1.10477 0.476359 0.708658 -0.520467 + 0.902873 1.85371 -1.07998 0.686777 0.723948 -0.0650869 + 0.904925 1.85022 -1.07134 0.76785 0.612483 0.187805 + 0.895594 1.79447 -1.13804 -0.229959 0.511102 -0.828187 + 0.878788 1.83304 -1.11036 -0.244041 0.52293 -0.816693 + 0.897558 1.83475 -1.10967 0.108401 0.647948 -0.753932 + 0.896175 1.85682 -1.08738 0.408285 0.81675 -0.407705 + 0.879943 1.78854 -1.13211 -0.667891 0.295933 -0.682894 + 0.863138 1.82711 -1.10443 -0.686341 0.249155 -0.683271 + 0.867431 1.85564 -1.09128 -0.297956 0.713357 -0.634306 + 0.886201 1.85735 -1.09059 0.0874 0.798347 -0.595821 + 0.890148 1.86201 -1.07722 0.294309 0.949582 -0.10806 + 0.881855 1.73813 -1.16231 -0.695486 0.406079 -0.59279 + 0.869894 1.77725 -1.11761 -0.927555 0.0460724 -0.370837 + 0.855652 1.81903 -1.09362 -0.91446 -0.0115547 -0.404512 + 0.857132 1.85179 -1.0873 -0.700516 0.527592 -0.480545 + 0.871806 1.72683 -1.1478 -0.939929 0.223364 -0.258151 + 0.867292 1.76962 -1.10525 -0.988095 -0.150014 -0.0341174 + 0.85305 1.8114 -1.08127 -0.973045 -0.222022 -0.0623643 + 0.847924 1.83866 -1.06835 -0.985721 0.123547 0.114415 + 0.849646 1.84372 -1.07649 -0.937522 0.293781 -0.186399 + 0.855673 1.6544 -1.1612 -0.987949 0.121134 0.0963535 + 0.868179 1.71596 -1.13054 -0.994725 0.054719 0.0867662 + 0.871456 1.76321 -1.09177 -0.847421 -0.340439 0.407405 + 0.856177 1.80659 -1.07119 -0.842373 -0.399871 0.361263 + 0.851051 1.83385 -1.05827 -0.861721 -0.0505548 0.504858 + 0.845582 1.60035 -1.18631 -0.998571 0.0519338 -0.0125878 + 0.861678 1.64516 -1.14179 -0.862892 -0.0525943 0.502644 + 0.872343 1.70956 -1.11707 -0.867016 -0.132437 0.480358 + 0.851587 1.59112 -1.1669 -0.910225 0.0169641 0.413766 + 0.871136 1.58554 -1.14314 -0.632264 -0.102075 0.767999 + 0.876677 1.64231 -1.1261 -0.616535 -0.179227 0.766657 + 0.887343 1.7067 -1.10138 -0.596558 -0.266608 0.756993 + 0.831316 1.54152 -1.18504 -0.668939 0.574605 0.47154 + 0.850865 1.53594 -1.16128 -0.598038 -0.059599 0.799249 + 0.900081 1.58792 -1.12604 -0.25884 -0.202557 0.944443 + 0.905622 1.64469 -1.10901 -0.247844 -0.268388 0.930882 + 0.90756 1.70853 -1.08935 -0.232993 -0.324206 0.916845 + 0.8172 1.54075 -1.19538 -0.222111 0.448176 0.865913 + 0.796371 1.52699 -1.20372 -0.6791 -0.17792 0.712157 + 0.865981 1.48471 -1.16314 -0.429084 -0.0594261 0.901308 + 0.911128 1.54176 -1.13161 -0.218763 -0.134349 0.966485 + 0.794672 1.59027 -1.20888 0.0241634 0.111627 0.993456 + 0.796723 1.54369 -1.19477 -0.298448 -0.136837 0.944566 + 0.781369 1.64472 -1.19888 -0.0332926 -0.246044 0.968687 + 0.766167 1.63927 -1.20409 -0.3666 -0.229803 0.901552 + 0.774195 1.59321 -1.20828 -0.284964 -0.0249724 0.958213 + 0.753347 1.59002 -1.22145 -0.748606 -0.191462 0.634768 + 0.752994 1.57331 -1.2304 -0.799915 -0.341954 0.493158 + 0.796131 1.65424 -1.19988 0.475111 -0.168223 0.863696 + 0.78446 1.70838 -1.1777 0.0523447 -0.337577 0.939841 + 0.769258 1.70293 -1.18292 -0.332044 -0.329531 0.88383 + 0.745318 1.63607 -1.21726 -0.718234 -0.176283 0.6731 + 0.794522 1.71516 -1.17827 0.534357 -0.246125 0.808632 + 0.774765 1.76119 -1.15758 0.0640766 -0.360595 0.930519 + 0.763914 1.75726 -1.16133 -0.282903 -0.432999 0.855849 + 0.74944 1.75483 -1.17051 -0.626443 -0.429482 0.650473 + 0.754784 1.7005 -1.1921 -0.668803 -0.257403 0.697457 + 0.806145 1.72636 -1.18875 0.8327 -0.106115 0.543462 + 0.784826 1.76798 -1.15815 0.511949 -0.171132 0.841797 + 0.754731 1.8035 -1.13919 0.0353615 -0.330528 0.943134 + 0.74388 1.79956 -1.14295 -0.298056 -0.446937 0.843451 + 0.801975 1.78702 -1.18221 0.912047 0.23468 0.336295 + 0.793264 1.77565 -1.16576 0.782726 0.0284399 0.621717 + 0.771158 1.81581 -1.14754 0.72509 0.144497 0.673324 + 0.76272 1.80815 -1.13993 0.445967 -0.0988095 0.889579 + 0.741401 1.82964 -1.13126 -0.10746 -0.0404948 0.993384 + 0.802553 1.79192 -1.19667 0.882359 0.461122 -0.0938562 + 0.778137 1.82888 -1.1742 0.800014 0.597594 -0.0534719 + 0.777559 1.82398 -1.15972 0.844614 0.357656 0.398383 + 0.761438 1.84749 -1.14925 0.684258 0.573743 0.450123 + 0.755037 1.83934 -1.13707 0.550136 0.371064 0.748106 + 0.772673 1.82908 -1.18649 0.579913 0.69253 -0.429073 + 0.756334 1.85098 -1.17113 0.449574 0.819048 -0.356432 + 0.761798 1.85078 -1.15885 0.657893 0.752374 0.0333235 + 0.751545 1.85605 -1.1564 0.318978 0.941965 0.104663 + 0.751185 1.85277 -1.14682 0.333104 0.803652 0.493138 + 0.764379 1.82667 -1.19626 0.277715 0.681506 -0.677069 + 0.750673 1.84965 -1.17755 0.187976 0.794057 -0.578047 + 0.743052 1.85483 -1.16918 -0.00451143 0.913251 -0.407371 + 0.748713 1.85615 -1.16277 0.217819 0.957252 -0.190325 + 0.741575 1.85703 -1.15459 -0.0977939 0.980734 0.169109 + 0.755451 1.82303 -1.20038 -0.1374 0.551877 -0.822528 + 0.741745 1.84601 -1.18167 -0.204156 0.659915 -0.723072 + 0.738424 1.85294 -1.17131 -0.272659 0.812695 -0.51496 + 0.734115 1.85525 -1.16309 -0.401512 0.893973 -0.199001 + 0.738743 1.85714 -1.16096 -0.208965 0.976508 -0.0525801 + 0.742583 1.81679 -1.19792 -0.497364 0.34637 -0.795397 + 0.733057 1.84215 -1.17988 -0.514376 0.496156 -0.699462 + 0.729735 1.84908 -1.16954 -0.540659 0.683093 -0.49099 + 0.727286 1.85203 -1.15864 -0.57471 0.818156 -0.0181353 + 0.719883 1.83594 -1.17128 -0.812385 0.297167 -0.501719 + 0.722907 1.84586 -1.16508 -0.73852 0.592507 -0.321752 + 0.718702 1.84165 -1.15626 -0.907116 0.417053 0.056634 + 0.72402 1.8482 -1.15171 -0.667438 0.706083 0.236586 + 0.727866 1.85081 -1.15354 -0.412949 0.86115 0.296467 + 0.722925 1.80436 -1.17595 -0.960445 -0.19422 -0.199558 + 0.715678 1.83173 -1.16247 -0.992218 0.0606729 -0.108729 + 0.719918 1.83933 -1.14902 -0.884731 0.276412 0.375296 + 0.72527 1.79989 -1.16198 -0.882196 -0.401556 0.245931 + 0.718023 1.82726 -1.14849 -0.928105 -0.120268 0.352358 + 0.725078 1.83808 -1.14091 -0.670801 0.225145 0.706637 + 0.725235 1.84589 -1.14446 -0.608543 0.606769 0.511378 + 0.741661 1.75646 -1.18278 -0.901015 -0.323545 0.288946 + 0.733049 1.79826 -1.14971 -0.616365 -0.47901 0.625015 + 0.723183 1.82601 -1.14039 -0.699206 -0.169596 0.694513 + 0.735051 1.58088 -1.25955 -0.916573 -0.241584 0.318641 + 0.754843 1.53399 -1.27322 -0.837855 -0.282676 0.467004 + 0.772786 1.52642 -1.24407 -0.842439 -0.254015 0.475156 + 0.765543 1.47731 -1.26327 -0.862801 0.0320055 0.504529 + 0.781268 1.4777 -1.23637 -0.863051 0.0330505 0.504035 + 0.804852 1.47827 -1.19603 -0.765667 0.0301711 0.64253 + 0.823026 1.46197 -1.17892 -0.485722 0.0725922 0.871094 + 0.771192 1.37805 -1.22652 -0.864946 0.0852553 0.494571 + 0.786916 1.37844 -1.19961 -0.763687 0.0299913 0.64489 + 0.80509 1.36213 -1.18251 -0.602154 -0.177118 0.778486 + 0.853963 1.41249 -1.16796 -0.298656 -0.0246048 0.954044 + 0.896919 1.43523 -1.15219 -0.342073 -0.0846641 0.935852 + 0.766858 1.35223 -1.22987 -0.884744 -0.0354246 0.464729 + 0.780603 1.31049 -1.21006 -0.777689 -0.318832 0.541799 + 0.818454 1.29184 -1.18857 -0.485622 -0.407024 0.77363 + 0.830741 1.31746 -1.17781 -0.362327 -0.138754 0.921665 + 0.748204 1.37398 -1.2767 -0.955035 -0.0941958 0.281133 + 0.761949 1.33225 -1.25689 -0.928583 -0.335763 0.158102 + 0.792617 1.28394 -1.22778 -0.682674 -0.668313 0.295491 + 0.830468 1.26529 -1.20629 -0.392183 -0.886371 0.246048 + 0.742543 1.37551 -1.30253 -0.972277 -0.195585 0.128157 + 0.767829 1.31962 -1.27193 -0.881021 -0.471925 0.0329901 + 0.798497 1.27132 -1.24282 -0.614543 -0.717929 0.326979 + 0.841411 1.2691 -1.23049 0.0483444 -0.99745 0.0524926 + 0.769769 1.30105 -1.3271 -0.84912 -0.528196 0.00219716 + 0.768097 1.31819 -1.29644 -0.877566 -0.470584 0.0918125 + 0.804118 1.26001 -1.27021 -0.609436 -0.788784 0.0800402 + 0.824941 1.26014 -1.23715 -0.140329 -0.717787 0.681974 + 0.781434 1.29574 -1.36206 -0.828096 -0.492192 -0.268334 + 0.821516 1.24417 -1.32307 -0.513552 -0.855765 0.0626942 + 0.804387 1.25859 -1.2947 -0.655639 -0.754998 -0.0107978 + 0.851488 1.24768 -1.28461 0.0906039 -0.930692 0.354406 + 0.830563 1.24882 -1.26453 -0.0780739 -0.985026 0.153713 + 0.848779 1.23816 -1.39094 -0.425209 -0.860416 -0.280859 + 0.833181 1.23887 -1.35803 -0.482021 -0.867208 -0.12492 + 0.884292 1.22887 -1.33956 0.185294 -0.962391 0.198668 + 0.868618 1.23326 -1.31297 0.106269 -0.931696 0.347347 + 0.86168 1.24562 -1.41937 -0.373122 -0.754965 -0.539267 + 0.919071 1.22812 -1.39687 0.211984 -0.976651 -0.0348715 + 0.89989 1.22817 -1.37247 0.165118 -0.979979 0.111251 + 0.893346 1.23712 -1.42343 -0.150887 -0.857482 -0.491892 + 0.956661 1.2448 -1.41453 0.428213 -0.870625 -0.242168 + 0.984739 1.26295 -1.38875 0.484595 -0.863757 0.138175 + 0.964953 1.26802 -1.36961 0.371698 -0.807456 0.4581 + 0.945771 1.26806 -1.34521 0.484522 -0.788113 0.379627 + 0.930936 1.2538 -1.44108 0.0917345 -0.701302 -0.706937 + 0.953963 1.27147 -1.45152 0.265328 -0.542998 -0.796714 + 0.969935 1.26377 -1.436 0.54423 -0.636801 -0.546166 + 0.911098 1.29504 -1.46185 -0.027406 -0.472332 -0.880994 + 0.934125 1.31272 -1.47229 0.0393782 -0.431434 -0.901285 + 0.959516 1.32626 -1.47543 0.333047 -0.34087 -0.87914 + 0.975488 1.31856 -1.45992 0.641872 -0.290741 -0.709556 + 0.998013 1.28192 -1.41023 0.705395 -0.566574 -0.425925 + 0.873494 1.32504 -1.47781 -0.515247 -0.358328 -0.778538 + 0.905805 1.32772 -1.47999 -0.00710404 -0.419085 -0.907919 + 0.92504 1.33313 -1.48176 0.0503172 -0.374276 -0.925951 + 0.898388 1.34766 -1.48767 -0.142098 -0.143099 -0.979454 + 0.917624 1.35307 -1.48944 0.0449983 -0.0314999 -0.99849 + 0.950432 1.34667 -1.48492 0.288354 -0.105204 -0.951727 + 0.983801 1.36316 -1.47119 0.427236 0.0722023 -0.901253 + 0.997242 1.33079 -1.45792 0.338374 -0.520203 -0.78415 + 0.986845 1.32558 -1.45128 0.402605 -0.714741 -0.571887 + 1.00937 1.28894 -1.4016 0.472226 -0.650258 -0.595119 + 1.0232 1.32438 -1.44257 0.404531 -0.0596138 -0.91258 + 1.05104 1.306 -1.4271 0.0790811 -0.738515 -0.669584 + 1.02576 1.29708 -1.4081 0.0205149 -0.849385 -0.527375 + 1.01536 1.29187 -1.40145 0.20208 -0.76181 -0.615475 + 1.01945 1.27762 -1.38393 0.346569 -0.921783 -0.173801 + 1.07767 1.29616 -1.40574 0.25697 -0.864048 -0.432882 + 1.05239 1.28725 -1.38674 0.144398 -0.938631 -0.313242 + 1.02544 1.28055 -1.3838 0.290863 -0.850832 -0.437588 + 1.10613 1.29619 -1.37587 0.386258 -0.84887 -0.360866 + 1.0541 1.28699 -1.38359 0.204119 -0.941706 -0.267443 + 1.02715 1.28029 -1.38065 0.147197 -0.986975 -0.0649175 + 1.01639 1.28195 -1.37049 0.0297525 -0.977967 0.206628 + 1.00868 1.27929 -1.37378 0.220717 -0.885921 0.407955 + 1.12878 1.30845 -1.37287 0.717244 -0.572547 -0.397179 + 1.10453 1.28748 -1.35446 0.319302 -0.807367 -0.496191 + 1.0525 1.27827 -1.36219 0.10893 -0.99363 -0.0288568 + 1.03138 1.2821 -1.34221 -0.175038 -0.98392 -0.0355458 + 0.995269 1.28579 -1.35051 -0.0469675 -0.966821 0.2511 + 1.13984 1.33089 -1.36139 0.917546 -0.153986 -0.366603 + 1.1389 1.30092 -1.33857 0.809431 -0.473841 -0.346838 + 1.1003 1.25744 -1.32985 0.136053 -0.906038 -0.40073 + 1.14995 1.32335 -1.3271 0.95016 -0.256995 -0.176491 + 1.15034 1.31745 -1.28508 0.970828 -0.237921 0.0297829 + 1.13466 1.27087 -1.31396 0.726152 -0.622382 -0.292138 + 1.09158 1.25722 -1.30268 -0.128954 -0.987603 0.0895049 + 1.15752 1.35991 -1.31387 0.988885 -0.0691208 -0.131642 + 1.14609 1.30588 -1.26206 0.942912 -0.258518 0.209964 + 1.13041 1.25932 -1.29094 0.521823 -0.852761 0.0223515 + 0.734015 1.8273 -1.13362 -0.38767 -0.136647 0.911613 + 0.730692 1.83876 -1.1374 -0.461778 0.259218 0.848273 + 0.73085 1.84656 -1.14096 -0.42357 0.611243 0.668559 + 0.738078 1.84109 -1.13504 -0.251027 0.36332 0.897209 + 0.734991 1.84898 -1.14134 -0.27851 0.735778 0.617303 + 0.742219 1.8435 -1.13543 0.000378643 0.525177 0.850993 + 0.747867 1.84854 -1.14049 0.230892 0.671632 0.703988 + 0.738837 1.85158 -1.14317 -0.160839 0.793045 0.587547 + 0.749389 1.83431 -1.13199 0.282749 0.17442 0.943202 + 0.742155 1.85581 -1.14948 -0.0534366 0.930321 0.362833 + 1.08949 1.27036 -1.26294 -0.156516 -0.960898 0.228423 + 1.01727 1.29321 -1.28847 -0.336425 -0.923691 0.18334 + 1.02267 1.2819 -1.31504 -0.329628 -0.937452 0.11193 + 0.982052 1.29366 -1.32695 -0.134854 -0.947086 0.291276 + 1.12832 1.27245 -1.2512 0.488962 -0.768771 0.412198 + 1.12251 1.28682 -1.22596 0.646731 -0.599199 0.47191 + 1.10087 1.27697 -1.21521 0.338222 -0.85436 0.394557 + 1.08077 1.27493 -1.23607 -0.133126 -0.988798 0.0675028 + 1.14028 1.32026 -1.23683 0.914638 -0.114474 0.387727 + 1.10719 1.31682 -1.19002 0.682683 -0.280201 0.674857 + 1.08555 1.30697 -1.17926 0.426656 -0.506852 0.749043 + 1.05374 1.28086 -1.19382 0.0737402 -0.896939 0.435963 + 1.03364 1.27882 -1.21467 -0.0694869 -0.996927 -0.0361688 + 1.13744 1.34319 -1.22976 0.852005 -0.0366785 0.522247 + 1.10434 1.33974 -1.18294 0.720211 -0.0105243 0.693675 + 1.07848 1.34656 -1.16078 0.52262 -0.0298057 0.852044 + 1.05663 1.3173 -1.15837 0.359655 -0.420748 0.832838 + 1.02483 1.29119 -1.17293 0.375889 -0.877397 0.298131 + 1.03396 1.37048 -1.14108 0.326725 0.0856427 0.941231 + 1.01212 1.34121 -1.13867 0.1634 -0.155607 0.974211 + 0.997406 1.27631 -1.15377 0.25638 -0.731277 0.632063 + 0.97261 1.26164 -1.18472 0.163784 -0.986261 0.0215399 + 1.00003 1.27652 -1.20389 0.204927 -0.964084 -0.168955 + 0.957644 1.41559 -1.13398 -0.129767 -0.0796128 0.988343 + 0.976872 1.35841 -1.13414 -0.0756399 -0.0869513 0.993337 + 0.962162 1.29351 -1.14923 -0.140313 -0.292265 0.945988 + 0.925629 1.28328 -1.16015 -0.131081 -0.334809 0.933124 + 0.990861 1.42533 -1.13332 0.295741 -0.0188302 0.955082 + 0.926244 1.49054 -1.13347 -0.217439 -0.081181 0.972692 + 0.916147 1.37805 -1.15235 -0.293647 -0.10503 0.950127 + 0.879614 1.36781 -1.16327 -0.248977 -0.0661522 0.966247 + 0.959461 1.50028 -1.13282 0.359934 0.0942121 0.928209 + 0.931187 1.71372 -1.08756 0.279745 -0.290635 0.915027 + 0.902365 1.76281 -1.06867 -0.194326 -0.405531 0.893186 + 0.882147 1.76099 -1.0807 -0.567749 -0.422487 0.706517 + 0.919181 1.76651 -1.0674 0.272466 -0.264192 0.925184 + 0.898515 1.80898 -1.05025 0.247126 -0.216284 0.944537 + 0.881699 1.8053 -1.05151 -0.224009 -0.41161 0.883401 + 0.866868 1.80436 -1.06011 -0.560519 -0.461661 0.687523 + 0.912055 1.81381 -1.057 0.626707 0.0496546 0.777671 + 0.897618 1.84035 -1.04833 0.547167 0.254229 0.797481 + 0.884078 1.83552 -1.04158 0.147373 0.0439851 0.988102 + 0.872943 1.83326 -1.04231 -0.280863 -0.0786144 0.956523 + 0.858111 1.83233 -1.05092 -0.628119 -0.114445 0.769655 + 0.903469 1.84451 -1.05668 0.736949 0.455244 0.499659 + 0.894917 1.85396 -1.05715 0.514668 0.712968 0.476228 + 0.889066 1.8498 -1.0488 0.354849 0.543194 0.760936 + 0.882047 1.8473 -1.0453 0.0798997 0.439588 0.894639 + 0.870912 1.84504 -1.04603 -0.346091 0.388921 0.853792 + 0.895672 1.85692 -1.06475 0.520328 0.803319 0.289719 + 0.884859 1.8593 -1.06086 0.0866897 0.92823 0.361766 + 0.884105 1.85633 -1.05326 0.102357 0.844771 0.525247 + 0.877086 1.85383 -1.04977 -0.163248 0.759263 0.629976 + 0.89362 1.8604 -1.07339 0.46141 0.879977 0.112877 + 0.882319 1.86238 -1.06833 0.0863302 0.933093 0.349118 + 0.8803 1.85971 -1.0642 -0.183544 0.880091 0.437895 + 0.869399 1.85334 -1.05423 -0.332736 0.773294 0.539725 + 0.863225 1.84456 -1.05049 -0.539929 0.391074 0.745344 + 0.878847 1.864 -1.07216 0.0074882 0.990518 0.13718 + 0.869117 1.86311 -1.07252 -0.28309 0.948041 0.145182 + 0.865237 1.85893 -1.06692 -0.372999 0.852487 0.366248 + 0.863219 1.85625 -1.06279 -0.427837 0.802477 0.415915 + 0.86484 1.85376 -1.05757 -0.395155 0.744711 0.537827 + 0.880174 1.86256 -1.08044 0.0210911 0.947838 -0.318054 + 0.870445 1.86166 -1.0808 -0.230059 0.9156 -0.329773 + 0.860146 1.85782 -1.07682 -0.607892 0.7886 -0.092616 + 0.856266 1.85362 -1.07121 -0.738656 0.664643 0.112411 + 0.854544 1.84856 -1.06307 -0.763381 0.544531 0.347471 + 0.856165 1.84608 -1.05784 -0.69307 0.445276 0.566906 + 0.913342 1.25765 -1.1709 -0.108216 -0.744451 0.658849 + 0.935689 1.254 -1.17927 0.187011 -0.952847 0.238977 + 0.944768 1.28487 -1.2275 0.0501451 -0.883317 -0.466086 + 0.973217 1.29523 -1.24871 -0.00638026 -0.920206 -0.391384 + 0.852815 1.26164 -1.21466 -0.0344646 -0.967893 -0.248989 + 0.907848 1.27721 -1.22204 0.132768 -0.844577 -0.518712 + 0.896444 1.28468 -1.23787 0.189388 -0.919245 -0.345138 + 0.928007 1.29472 -1.25153 0.146829 -0.945375 -0.291044 + 0.890082 1.28386 -1.24262 0.315179 -0.944327 0.0943839 + 0.921645 1.2939 -1.25628 0.355093 -0.932088 0.0715549 + 0.951437 1.30384 -1.27738 0.392175 -0.908203 0.14617 + 0.956456 1.30509 -1.27275 0.153834 -0.959353 -0.236595 + 1.00682 1.29754 -1.2595 -0.128268 -0.940916 -0.313409 + 0.873612 1.2749 -1.24928 0.34608 -0.860455 0.37396 + 0.894538 1.27375 -1.26936 0.418576 -0.850683 0.318014 + 0.92433 1.28369 -1.29046 0.46639 -0.806028 0.364415 + 0.940004 1.27931 -1.31705 0.476945 -0.780841 0.403498 + 0.969913 1.30349 -1.30289 0.272122 -0.87837 0.392958 + 0.967692 1.30929 -1.28807 0.302757 -0.923166 0.236858 + 0.972711 1.31055 -1.28343 0.0634832 -0.975958 -0.208507 + 0.975681 1.29224 -1.33105 0.232301 -0.89181 0.388214 + 0.976651 1.30498 -1.30037 -0.163974 -0.931391 0.324997 + 0.97443 1.31079 -1.28553 -0.158101 -0.98158 0.107263 + 1.00854 1.29778 -1.2616 -0.260384 -0.959425 -0.108187 + 0.988898 1.28436 -1.35462 0.162558 -0.90241 0.399038 + 0.662234 2.30119 -1.93689 -0.700089 0.712293 -0.0501403 + 0.671906 2.30149 -1.91584 -0.479282 0.787934 0.386586 + 0.691178 2.31766 -1.92781 -0.413431 0.84002 0.351343 + 0.647785 2.28544 -1.92234 -0.783983 0.614324 0.0893147 + 0.668617 2.29306 -1.90509 -0.481967 0.723909 0.493623 + 0.703591 2.30482 -1.89977 -0.188053 0.735071 0.651388 + 0.681506 2.31737 -1.94886 -0.622821 0.77692 -0.0921334 + 0.686797 2.31231 -1.96761 -0.63471 0.57292 -0.518561 + 0.656699 2.28706 -1.94892 -0.783715 0.435917 -0.442455 + 0.64225 2.2713 -1.93437 -0.917245 0.287327 -0.27587 + 0.644497 2.27701 -1.91159 -0.813221 0.500292 0.297287 + 0.701295 2.32979 -1.95471 -0.407999 0.909046 -0.0846932 + 0.706586 2.32474 -1.97346 -0.349319 0.770202 -0.533635 + 0.707219 2.26081 -2.02254 -0.612769 0.434793 -0.659901 + 0.67712 2.23555 -2.00384 -0.75054 0.302052 -0.587754 + 0.655268 2.21173 -1.98184 -0.897819 0.111924 -0.425904 + 0.702805 2.32088 -1.92498 -0.270463 0.870784 0.410591 + 0.712922 2.33301 -1.95189 -0.152197 0.988241 0.0147135 + 0.724745 2.32977 -1.96905 0.0727982 0.913513 -0.400243 + 0.755307 2.28464 -2.02698 0.157231 0.801729 -0.576636 + 0.737148 2.2796 -2.03139 -0.292383 0.657319 -0.694581 + 0.70993 2.31707 -1.91436 -0.201646 0.844682 0.495834 + 0.732056 2.32883 -1.93265 0.165328 0.941452 0.293827 + 0.724931 2.33264 -1.94327 0.0686308 0.982874 0.171022 + 0.736754 2.3294 -1.96044 0.394043 0.900366 -0.184581 + 0.710472 2.31279 -1.90741 -0.164522 0.784902 0.597379 + 0.737508 2.31936 -1.91445 0.294043 0.749937 0.592564 + 0.736966 2.32364 -1.92139 0.244051 0.874902 0.418313 + 0.752792 2.31826 -1.93259 0.680277 0.703568 0.205465 + 0.747882 2.32345 -1.94384 0.580389 0.814059 0.0213778 + 0.726568 2.30354 -1.89746 0.241862 0.496269 0.833798 + 0.733448 2.31151 -1.9051 0.284337 0.59437 0.752248 + 0.749578 2.30373 -1.9124 0.689121 0.259375 0.676637 + 0.753638 2.31157 -1.92174 0.735604 0.484882 0.47305 + 0.709599 2.28836 -1.88548 0.183861 0.433306 0.882293 + 0.721864 2.27609 -1.88848 0.530826 0.00852059 0.847438 + 0.738832 2.29127 -1.90046 0.603796 0.0915974 0.791859 + 0.775984 2.23927 -1.94341 0.714757 -0.0973038 0.692571 + 0.78673 2.25172 -1.95535 0.811373 0.0620712 0.581223 + 0.683977 2.28909 -1.88871 -0.261317 0.69527 0.669562 + 0.689985 2.27263 -1.87442 0.111999 0.404332 0.907729 + 0.691231 2.25153 -1.8712 0.399406 -0.0528014 0.915252 + 0.719688 2.19174 -1.90802 0.53058 -0.273297 0.802368 + 0.75032 2.21631 -1.92529 0.63366 -0.191532 0.749527 + 0.677903 2.28876 -1.89228 -0.417846 0.701722 0.577054 + 0.673534 2.26235 -1.86962 -0.222932 0.348037 0.910589 + 0.67478 2.24124 -1.86641 -0.0906435 -0.201483 0.975289 + 0.694806 2.17619 -1.90076 0.0208483 -0.4975 0.867213 + 0.762482 2.08295 -1.97761 0.537573 -0.292529 0.790849 + 0.648337 2.26887 -1.89649 -0.7402 0.401833 0.539106 + 0.657623 2.26457 -1.88368 -0.659817 0.377533 0.6497 + 0.66746 2.26203 -1.87319 -0.563192 0.358048 0.744725 + 0.665293 2.24074 -1.87198 -0.61694 -0.22991 0.75268 + 0.637114 2.25814 -1.91758 -0.996338 0.0638111 0.056914 + 0.640954 2.24999 -1.90248 -0.914357 -0.116577 0.387766 + 0.655456 2.24329 -1.88247 -0.779515 -0.194685 0.59536 + 0.685319 2.17569 -1.90633 -0.545464 -0.553322 0.629527 + 0.650131 2.19857 -1.96504 -0.980034 -0.161747 -0.115636 + 0.65594 2.18625 -1.94222 -0.879701 -0.405931 0.247681 + 0.670442 2.17954 -1.9222 -0.731532 -0.506676 0.456224 + 0.723551 2.06666 -1.9786 -0.546446 -0.554346 0.627772 + 0.737599 2.0674 -1.97035 0.0459017 -0.505137 0.861818 + 0.688997 2.11225 -2.0718 -0.894282 0.123659 -0.430078 + 0.681391 2.09276 -2.04693 -0.981672 -0.15543 -0.110278 + 0.687199 2.08044 -2.0241 -0.88522 -0.395371 0.245087 + 0.708674 2.0705 -1.99447 -0.730846 -0.50479 0.459403 + 0.751927 1.96167 -2.03831 -0.570912 -0.469382 0.673602 + 0.710849 2.13608 -2.09381 -0.750137 0.29866 -0.589997 + 0.708769 2.01287 -2.1491 -0.899456 0.175576 -0.400191 + 0.701163 1.99338 -2.12423 -0.995136 -0.0689562 -0.070356 + 0.708922 1.97778 -2.09036 -0.903962 -0.306828 0.29784 + 0.730396 1.96785 -2.06072 -0.757159 -0.414667 0.504739 + 0.75542 2.17348 -2.12149 -0.603776 0.431726 -0.670125 + 0.78673 2.07714 -2.21228 -0.596372 0.440829 -0.670828 + 0.742159 2.03974 -2.18461 -0.741328 0.338106 -0.579756 + 0.718511 1.91654 -2.22502 -0.891145 0.244126 -0.382443 + 0.785349 2.19226 -2.13034 -0.281568 0.635452 -0.718972 + 0.831632 2.09707 -2.22876 -0.251725 0.627628 -0.736694 + 0.820298 1.97496 -2.31063 -0.571162 0.460803 -0.679289 + 0.751901 1.94341 -2.26053 -0.726163 0.374811 -0.576371 + 0.812239 2.19972 -2.1238 0.188133 0.768188 -0.611958 + 0.858522 2.10453 -2.22223 0.211752 0.733062 -0.64636 + 0.904952 1.99817 -2.32179 0.262376 0.678786 -0.685864 + 0.8652 1.99489 -2.32711 -0.219965 0.608386 -0.76255 + 0.830036 1.89047 -2.37428 -0.546517 0.425606 -0.721234 + 0.773471 2.28407 -2.01394 0.529883 0.778731 -0.33586 + 0.830403 2.19916 -2.11077 0.558014 0.738237 -0.378981 + 0.885057 2.10202 -2.20443 0.597761 0.687941 -0.411606 + 0.931487 1.99567 -2.304 0.613714 0.639803 -0.46261 + 0.930646 1.90147 -2.39814 0.226818 0.609783 -0.75942 + 0.784599 2.27812 -1.99735 0.723945 0.679322 -0.120109 + 0.846882 2.19034 -2.0862 0.758185 0.633255 -0.15538 + 0.901535 2.09321 -2.17986 0.786074 0.585602 -0.197883 + 0.954505 1.98373 -2.26926 0.809839 0.540711 -0.227581 + 0.792025 2.27028 -1.98033 0.831936 0.548373 0.0846659 + 0.854308 2.1825 -2.06918 0.861191 0.505947 0.0486537 + 0.911928 2.08291 -2.15493 0.887771 0.460059 0.0144161 + 0.964897 1.97343 -2.24433 0.902781 0.429595 -0.0208545 + 0.99123 1.89345 -2.33937 0.815671 0.516376 -0.260839 + 0.79287 2.26359 -1.96948 0.877851 0.312938 0.362557 + 0.855559 2.1726 -2.05312 0.901852 0.271475 0.336101 + 0.91318 2.07301 -2.13887 0.92096 0.240574 0.306524 + 0.965719 1.96289 -2.21997 0.93116 0.223686 0.287935 + 0.849419 2.16073 -2.03899 0.829023 0.0346302 0.558142 + 0.903487 2.05914 -2.11689 0.839363 0.0165293 0.543321 + 0.956027 1.94903 -2.19799 0.844699 0.0120483 0.535106 + 1.0056 1.87237 -2.28108 0.934882 0.198655 0.294163 + 1.00478 1.88291 -2.30544 0.913272 0.405469 -0.0391094 + 0.833506 2.14229 -2.0213 0.725894 -0.122797 0.676757 + 0.887574 2.04071 -2.0992 0.730839 -0.12894 0.67026 + 0.931095 1.93246 -2.16816 0.731589 -0.1219 0.670759 + 0.965064 1.835 -2.2212 0.736589 -0.0954219 0.669576 + 0.989996 1.85156 -2.25103 0.82632 -0.00260556 0.563195 + 0.807843 2.11933 -2.00318 0.64524 -0.210103 0.734521 + 0.848662 2.01527 -2.06917 0.6443 -0.211368 0.734984 + 0.892183 1.90702 -2.13813 0.643306 -0.187598 0.74227 + 0.911749 1.82007 -2.17394 0.650473 -0.131969 0.747977 + 0.978848 1.7391 -2.24915 0.708725 -0.114661 0.696105 + 0.803301 1.97889 -2.0436 0.538112 -0.279418 0.795212 + 0.822741 1.87667 -2.09111 0.525186 -0.248529 0.813888 + 0.842307 1.78971 -2.12691 0.526758 -0.0699772 0.84713 + 0.843826 1.74823 -2.12572 0.53618 -0.104514 0.837609 + 0.925533 1.72417 -2.20189 0.663526 -0.150284 0.732904 + 0.765975 1.96241 -2.03005 0.0228253 -0.454682 0.890361 + 0.785415 1.86019 -2.07757 0.0106474 -0.372981 0.927778 + 0.793324 1.79183 -2.10113 0.0268625 -0.142978 0.989361 + 0.764965 1.86176 -2.08775 -0.591649 -0.372034 0.715221 + 0.772874 1.7934 -2.11132 -0.599304 -0.107782 0.793232 + 0.770512 1.76357 -2.10983 -0.574246 -0.0769935 0.815054 + 0.794844 1.75036 -2.09994 0.00249596 -0.151938 0.988387 + 0.743434 1.86794 -2.11017 -0.773143 -0.32292 0.545868 + 0.745097 1.80715 -2.13932 -0.7821 -0.101872 0.614769 + 0.742735 1.77732 -2.13783 -0.768007 -0.0310783 0.639687 + 0.757929 1.69175 -2.14181 -0.646067 -0.254363 0.719651 + 0.713282 1.88189 -2.15177 -0.919171 -0.21556 0.329633 + 0.714945 1.8211 -2.18093 -0.908906 0.0141856 0.41676 + 0.706562 1.80358 -2.18817 -0.905076 0.0886619 0.415905 + 0.696911 1.73294 -2.22085 -0.941771 -0.0615691 0.33057 + 0.733084 1.70668 -2.17051 -0.811331 -0.152904 0.564236 + 0.705524 1.89749 -2.18565 -0.999159 0.00731655 -0.0403444 + 0.705046 1.83516 -2.22793 -0.973747 0.227527 -0.0069306 + 0.696663 1.81764 -2.23517 -0.962601 0.27088 0.00478115 + 0.690782 1.74648 -2.26215 -0.99685 0.0690316 -0.0390361 + 0.718033 1.85421 -2.2673 -0.868714 0.318007 -0.379747 + 0.710402 1.81461 -2.29184 -0.863541 0.328343 -0.382737 + 0.704521 1.74345 -2.31883 -0.930635 0.170969 -0.323555 + 0.761639 1.85892 -2.32418 -0.678895 0.418539 -0.603264 + 0.754009 1.81933 -2.34872 -0.642565 0.443453 -0.624868 + 0.719399 1.73808 -2.35506 -0.80952 0.246333 -0.532914 + 0.696827 1.64032 -2.34079 -0.950187 0.090559 -0.298235 + 0.833309 1.79061 -2.43007 -0.516089 0.41206 -0.750905 + 0.827699 1.73417 -2.4562 -0.547419 0.351054 -0.759667 + 0.748398 1.76289 -2.37486 -0.658395 0.341972 -0.670501 + 0.745485 1.659 -2.4139 -0.717426 0.197369 -0.668091 + 0.711705 1.63495 -2.37702 -0.860826 0.114814 -0.495779 + 0.890894 1.89819 -2.40346 -0.188617 0.537879 -0.821651 + 0.894168 1.79832 -2.45924 -0.254788 0.460794 -0.850148 + 0.862776 1.70508 -2.49231 -0.430393 0.308177 -0.848404 + 0.774483 1.6838 -2.4337 -0.63756 0.246803 -0.729798 + 0.95015 1.82306 -2.44983 0.176843 0.539151 -0.823433 + 0.962286 1.76365 -2.48349 0.209413 0.433209 -0.876628 + 0.906304 1.73891 -2.4929 -0.209751 0.427739 -0.879229 + 0.968212 1.90539 -2.37411 0.592635 0.59902 -0.538478 + 0.987716 1.82698 -2.4258 0.57409 0.53914 -0.616237 + 1.00159 1.77161 -2.46045 0.608269 0.398638 -0.686365 + 0.964559 1.72626 -2.49555 0.329537 0.341156 -0.880351 + 0.929799 1.71694 -2.50798 -0.0314069 0.389298 -0.920576 + 1.01923 1.82657 -2.37916 0.807799 0.478478 -0.344266 + 1.0331 1.77121 -2.41381 0.783063 0.450379 -0.428918 + 1.00386 1.73423 -2.47251 0.52275 0.357287 -0.774002 + 0.972498 1.66507 -2.51892 0.338263 0.347848 -0.874403 + 1.03278 1.81604 -2.34523 0.933579 0.358352 -0.00378537 + 1.05161 1.76093 -2.37974 0.955417 0.284174 -0.0801475 + 1.0388 1.73244 -2.44884 0.706026 0.416678 -0.572631 + 1.03766 1.66368 -2.47911 0.743369 0.220584 -0.631463 + 1.00271 1.66546 -2.50279 0.492539 0.322597 -0.808292 + 1.03164 1.79677 -2.31524 0.92868 0.139109 0.343806 + 1.05047 1.74166 -2.34976 0.946588 0.106863 0.304224 + 1.05732 1.72216 -2.41478 0.935485 0.249442 -0.250294 + 1.01603 1.77596 -2.28519 0.814951 -0.0213268 0.579137 + 1.02877 1.71446 -2.30948 0.817695 -0.0764495 0.570552 + 1.06608 1.70247 -2.37884 0.98671 0.0764947 0.143359 + 1.06358 1.62938 -2.41404 0.99761 -0.0690584 -0.00230886 + 1.05483 1.64907 -2.44998 0.935142 0.0744831 -0.346356 + 0.991591 1.6776 -2.27344 0.722945 -0.170166 0.669622 + 0.987141 1.64227 -2.27943 0.721815 -0.203222 0.661577 + 1.04438 1.67527 -2.33857 0.849455 -0.135481 0.509972 + 0.928917 1.65604 -2.22124 0.654501 -0.1902 0.731746 + 0.84721 1.6801 -2.14508 0.527051 -0.253871 0.811028 + 0.924466 1.62071 -2.22722 0.622346 -0.244183 0.74368 + 0.800543 1.65759 -2.12917 -0.0247224 -0.361444 0.932066 + 0.849891 1.58028 -2.18976 0.479407 -0.337192 0.810229 + 0.847353 1.52504 -2.20593 0.252695 -0.351903 0.901282 + 0.921928 1.56547 -2.2434 0.564408 -0.195119 0.802105 + 0.78226 1.67854 -2.13192 -0.493658 -0.315895 0.810254 + 0.779096 1.55243 -2.18899 -0.485447 -0.488332 0.725171 + 0.803225 1.55777 -2.17385 0.0303811 -0.497011 0.867212 + 0.809967 1.50612 -2.21306 -0.113894 -0.627807 0.769991 + 0.858232 1.50344 -2.22114 0.321648 -0.523018 0.7893 + 0.729885 1.58097 -2.2126 -0.703871 -0.362518 0.610857 + 0.760813 1.57338 -2.19175 -0.567238 -0.393033 0.723717 + 0.763128 1.50201 -2.24492 -0.484207 -0.696389 0.529703 + 0.785838 1.50078 -2.2282 -0.339161 -0.732162 0.590685 + 0.705041 1.5959 -2.2413 -0.896007 -0.260487 0.359607 + 0.727552 1.50758 -2.29468 -0.815277 -0.566922 0.117993 + 0.732201 1.5096 -2.26577 -0.768822 -0.534011 0.351773 + 0.79173 1.45366 -2.31689 -0.400011 -0.886361 0.233142 + 0.81444 1.45243 -2.30017 -0.179193 -0.917239 0.355757 + 0.697095 1.60853 -2.27505 -0.975359 -0.177916 0.13046 + 0.719606 1.52022 -2.32843 -0.85424 -0.509483 0.103445 + 0.77798 1.45808 -2.36581 -0.542994 -0.839117 0.0322331 + 0.787081 1.45164 -2.3458 -0.471582 -0.880553 0.0472935 + 0.690965 1.62207 -2.31635 -0.997444 -0.0628849 -0.033923 + 0.714012 1.52048 -2.35343 -0.793156 -0.580599 0.18387 + 0.772387 1.45834 -2.39081 -0.459482 -0.888067 0.0146262 + 0.821425 1.44275 -2.39031 0.148141 -0.908183 -0.391481 + 0.830525 1.43631 -2.3703 0.170821 -0.965349 -0.197284 + 0.70237 1.56553 -2.37354 -0.919136 0.0165323 -0.393594 + 0.696508 1.54728 -2.34911 -0.888356 -0.330987 0.318233 + 0.739204 1.4759 -2.4068 -0.691215 -0.710952 -0.129493 + 0.768963 1.46795 -2.4262 -0.166699 -0.821156 -0.545815 + 0.802146 1.45039 -2.41021 -0.00244717 -0.858773 -0.51235 + 0.719395 1.57264 -2.40035 -0.822621 0.0772144 -0.563324 + 0.721699 1.50269 -2.40248 -0.885696 -0.348539 -0.306698 + 0.738725 1.5098 -2.42928 -0.774139 -0.165761 -0.610927 + 0.756482 1.47811 -2.43653 -0.416224 -0.613345 -0.671242 + 0.753175 1.59668 -2.43723 -0.76287 0.129119 -0.633528 + 0.752344 1.53175 -2.44773 -0.755237 -0.0412167 -0.654154 + 0.767666 1.59787 -2.45405 -0.587676 0.212831 -0.780602 + 0.766835 1.53293 -2.46456 -0.568832 -0.0943899 -0.817019 + 0.770101 1.50006 -2.45498 -0.286893 -0.491131 -0.822485 + 0.802688 1.48985 -2.43791 0.105407 -0.689741 -0.716343 + 0.787825 1.60187 -2.46326 -0.533387 0.17952 -0.826602 + 0.775175 1.53447 -2.46828 -0.407422 -0.0929335 -0.908499 + 0.783568 1.50665 -2.4605 -0.132566 -0.583799 -0.801002 + 0.816156 1.49644 -2.44343 0.0263318 -0.810131 -0.585658 + 0.815169 1.47968 -2.42758 0.105876 -0.607886 -0.786934 + 0.80956 1.65472 -2.4698 -0.585929 0.192644 -0.787131 + 0.834381 1.57937 -2.49915 -0.527979 -0.00901256 -0.849209 + 0.795335 1.53847 -2.47749 -0.379415 -0.0965355 -0.920177 + 0.799746 1.50878 -2.47087 -0.314491 -0.660004 -0.682268 + 0.791909 1.50818 -2.46422 -0.287499 -0.728917 -0.621308 + 0.856116 1.63222 -2.50569 -0.508646 0.182654 -0.841378 + 0.881593 1.58963 -2.53022 -0.500878 0.0741193 -0.862338 + 0.873375 1.55246 -2.51634 -0.599841 -0.147045 -0.786491 + 0.823302 1.53265 -2.48298 -0.344404 -0.261738 -0.901598 + 0.886271 1.68311 -2.50739 -0.339354 0.282606 -0.897202 + 0.911747 1.64053 -2.53192 -0.305904 0.280891 -0.909683 + 0.906936 1.54814 -2.54853 -0.663379 -0.0685556 -0.745136 + 0.898718 1.51097 -2.53465 -0.606455 -0.350795 -0.713552 + 0.862296 1.50574 -2.50017 -0.575435 -0.420625 -0.701391 + 0.937738 1.65575 -2.53135 0.0331199 0.344394 -0.938241 + 0.91826 1.55614 -2.56075 -0.45608 0.0795948 -0.886372 + 0.938077 1.51208 -2.56524 -0.208019 -0.339887 -0.917172 + 0.926752 1.50408 -2.55302 -0.463644 -0.477295 -0.746474 + 0.918406 1.46792 -2.50923 -0.527312 -0.596774 -0.604817 + 0.971973 1.56406 -2.55641 0.32753 0.173357 -0.928801 + 0.944251 1.57137 -2.56018 0.0427712 0.23108 -0.971994 + 0.965799 1.50478 -2.56146 0.17225 -0.313621 -0.933794 + 0.94644 1.46103 -2.5276 -0.194366 -0.720725 -0.665416 + 0.908384 1.45247 -2.48527 -0.463667 -0.826135 -0.320178 + 1.00219 1.56445 -2.54027 0.590486 0.130656 -0.796401 + 1.02563 1.56577 -2.51562 0.794473 0.0464434 -0.605522 + 1.01213 1.50124 -2.52694 0.72676 -0.313253 -0.611304 + 0.988691 1.49992 -2.55159 0.497268 -0.350932 -0.793455 + 1.04279 1.55116 -2.48648 0.926479 -0.07608 -0.368575 + 1.02045 1.48892 -2.50796 0.760931 -0.387235 -0.520608 + 0.969331 1.45617 -2.51773 0.300105 -0.695323 -0.653041 + 0.967231 1.42517 -2.48034 -0.0577114 -0.910767 -0.408869 + 0.934111 1.43808 -2.46427 -0.466483 -0.875083 -0.128933 + 1.04434 1.51289 -2.45419 0.968865 -0.236268 -0.0740094 + 1.02199 1.45065 -2.47566 0.765352 -0.543841 -0.344198 + 0.977657 1.44386 -2.49875 0.381989 -0.697831 -0.605901 + 1.05303 1.60998 -2.37494 0.900478 -0.194567 0.388951 + 1.03378 1.49348 -2.41509 0.992777 -0.119957 -0.00224613 + 1.01157 1.43196 -2.45725 0.598278 -0.744309 -0.296761 + 0.978751 1.41416 -2.43431 0.00739088 -0.999733 -0.0218946 + 0.945631 1.42706 -2.41825 -0.512825 -0.852041 0.105055 + 0.995792 1.57698 -2.3158 0.814002 -0.169589 0.555555 + 1.03849 1.50683 -2.38608 0.951259 0.306815 0.0311561 + 1.03263 1.45201 -2.41087 0.884312 -0.430984 0.17957 + 1.02792 1.43867 -2.43989 0.847379 -0.409527 -0.337988 + 0.978323 1.56018 -2.29297 0.769817 -0.174749 0.613877 + 1.02102 1.49003 -2.36325 0.778311 -0.263564 0.569882 + 1.02274 1.45627 -2.3887 0.703907 -0.528014 0.475096 + 0.9951 1.42087 -2.41695 0.402973 -0.893083 0.200042 + 0.985216 1.42513 -2.39478 0.233794 -0.893681 0.382981 + 0.957668 1.56216 -2.26916 0.654388 -0.16491 0.737958 + 0.986659 1.48947 -2.32574 0.698985 -0.326803 0.636097 + 0.988383 1.4557 -2.35119 0.448933 -0.670597 0.590558 + 0.938402 1.49795 -2.268 0.552054 -0.445063 0.705092 + 0.966005 1.49145 -2.30192 0.652621 -0.41273 0.635405 + 0.957587 1.46986 -2.31696 0.157069 -0.863637 0.479019 + 0.965733 1.4575 -2.3428 -0.0787737 -0.871895 0.483315 + 0.962566 1.42692 -2.38639 -0.203534 -0.909628 0.362148 + 0.902662 1.50126 -2.24224 0.42143 -0.450761 0.786899 + 0.895943 1.47159 -2.27488 0.229536 -0.931329 0.282736 + 0.916757 1.47828 -2.28659 0.143584 -0.964206 0.222912 + 0.929985 1.47636 -2.28303 0.0357375 -0.826778 0.561391 + 0.851514 1.47378 -2.25377 0.17846 -0.865555 0.467938 + 0.883863 1.47083 -2.31947 0.387042 -0.922057 -0.0029441 + 0.904677 1.47752 -2.33118 0.127075 -0.988903 -0.0769601 + 0.91077 1.47773 -2.33286 -0.147609 -0.984598 0.093687 + 0.923997 1.47581 -2.32931 -0.21377 -0.956465 0.198686 + 0.820847 1.48452 -2.22826 -0.251544 -0.757459 0.602479 + 0.845107 1.44169 -2.32568 0.270701 -0.949947 0.155957 + 0.869282 1.46545 -2.36408 0.594121 -0.753967 -0.280275 + 0.886052 1.48002 -2.36785 0.268451 -0.941958 -0.201619 + 0.892145 1.48023 -2.36953 -0.253546 -0.965472 0.0598149 + 0.860427 1.48621 -2.41366 -0.200694 -0.979229 -0.0288473 + 0.88349 1.46958 -2.43114 -0.485173 -0.865108 0.127257 + 0.915207 1.4636 -2.38701 -0.519909 -0.826232 0.216876 + 0.855315 1.48492 -2.40979 0.312712 -0.879647 -0.358375 + 0.837786 1.48875 -2.43245 0.0879896 -0.845276 -0.527035 + 0.842899 1.49004 -2.43632 -0.260622 -0.942107 -0.210977 + 0.857762 1.48397 -2.45214 -0.511883 -0.85835 -0.0347977 + 0.838544 1.47036 -2.40602 0.475879 -0.690743 -0.544438 + 0.819265 1.478 -2.42592 0.202534 -0.646646 -0.735411 + 0.833691 1.49043 -2.4341 0.00796357 -0.763876 -0.645313 + 0.839337 1.49281 -2.43923 -0.298526 -0.896703 -0.326812 + 0.8542 1.48674 -2.45505 -0.515067 -0.849626 -0.113324 + 0.821802 1.49881 -2.44856 -0.105673 -0.922353 -0.371616 + 0.829639 1.49942 -2.45521 -0.302403 -0.935282 -0.183849 + 0.852274 1.49029 -2.4762 -0.537337 -0.739943 -0.404663 + 0.827713 1.50296 -2.47636 -0.289065 -0.662239 -0.69129 + 0.932143 1.46345 -2.35515 -0.39054 -0.855965 0.338825 + -0.477956 2.44876 -2.42829 -0.713782 -0.394723 0.578541 + -0.467398 2.44058 -2.42085 -0.524332 -0.503582 0.686644 + -0.455121 2.49752 -2.38613 -0.168457 0.0900533 0.981587 + -0.48166 2.36212 -2.53005 -0.723287 -0.5024 0.473762 + -0.464037 2.34847 -2.51762 -0.53005 -0.616581 0.58213 + -0.447121 2.34366 -2.51467 -0.0655915 -0.719394 0.691498 + -0.450482 2.43577 -2.4179 -0.046679 -0.601423 0.797566 + -0.465679 2.5057 -2.39357 -0.383277 0.30033 0.873442 + -0.492046 2.45967 -2.43823 -0.713777 -0.394727 0.578544 + -0.495751 2.37304 -2.53998 -0.723126 -0.502265 0.474151 + -0.484332 2.25592 -2.64186 -0.720373 -0.483533 0.497251 + -0.440329 2.49849 -2.38915 0.316756 0.157133 0.935401 + -0.476236 2.51388 -2.40102 -0.566382 0.416233 0.71131 + -0.502604 2.46785 -2.44568 -0.829634 -0.25995 0.494099 + -0.513374 2.38669 -2.55241 -0.843808 -0.375323 0.383565 + -0.43569 2.43673 -2.42093 0.302498 -0.558936 0.772065 + -0.418756 2.44069 -2.42749 0.521749 -0.469847 0.712054 + -0.429745 2.50345 -2.39596 0.461368 0.283595 0.840662 + -0.424327 2.51521 -2.40944 0.601343 0.599238 0.528489 + -0.467152 2.52407 -2.41326 -0.203465 0.952545 0.226404 + -0.474164 2.52076 -2.40874 -0.44632 0.824317 0.348282 + -0.422429 2.34527 -2.51972 0.298635 -0.675887 0.673791 + -0.405496 2.34923 -2.52628 0.515755 -0.591514 0.619764 + -0.408173 2.44566 -2.43429 0.639148 -0.39315 0.661001 + -0.398907 2.45053 -2.44081 0.703453 -0.336243 0.626175 + -0.426444 2.50578 -2.39893 0.585456 0.381841 0.715149 + -0.440365 2.23543 -2.62505 -0.048931 -0.705347 0.707172 + -0.415673 2.23704 -2.6301 0.297261 -0.667154 0.683039 + -0.389712 2.24311 -2.64016 0.518166 -0.584773 0.624134 + -0.387829 2.35752 -2.53764 0.639941 -0.516832 0.568648 + -0.378564 2.36239 -2.54416 0.707258 -0.463213 0.53406 + -0.466709 2.24227 -2.62943 -0.523434 -0.600563 0.604434 + -0.44074 2.1104 -2.74687 -0.0493188 -0.687421 0.724583 + -0.404898 2.11274 -2.75421 0.302735 -0.655908 0.691474 + -0.378937 2.1188 -2.76427 0.517269 -0.583588 0.625986 + -0.372046 2.2514 -2.65151 0.639663 -0.514842 0.570761 + -0.4943 2.13491 -2.76878 -0.696929 -0.476595 0.535861 + -0.467083 2.11724 -2.75126 -0.489428 -0.592811 0.639558 + -0.442331 2.02299 -2.82772 -0.0314512 -0.640199 0.767565 + -0.40649 2.02533 -2.83506 0.318501 -0.62997 0.708305 + -0.374365 2.03609 -2.84565 0.530869 -0.575813 0.621786 + -0.505944 2.2722 -2.65711 -0.721319 -0.48383 0.495588 + -0.515912 2.15119 -2.78403 -0.733482 -0.445994 0.512926 + -0.502179 2.0455 -2.85321 -0.690503 -0.424785 0.58546 + -0.474962 2.02784 -2.83569 -0.487818 -0.526032 0.696652 + -0.452376 1.96882 -2.8685 -0.00947196 -0.619013 0.785324 + -0.523567 2.28586 -2.66954 -0.840828 -0.363677 0.400933 + -0.539896 2.17133 -2.80264 -0.852082 -0.322402 0.412326 + -0.553113 2.08232 -2.89334 -0.841536 -0.268257 0.468887 + -0.529129 2.06217 -2.87472 -0.725858 -0.391548 0.565526 + -0.513307 1.9881 -2.90143 -0.704606 -0.30485 0.640778 + -0.519036 2.39674 -2.56253 -0.993684 -0.0101956 0.111752 + -0.532252 2.30126 -2.68505 -0.993001 -0.000787938 0.118101 + -0.548581 2.18674 -2.81815 -0.988103 -0.0106538 0.153427 + -0.564027 2.1075 -2.90947 -0.977349 0.0339309 0.208896 + -0.568557 2.0192 -2.94789 -0.822824 -0.216137 0.52559 + -0.508266 2.4779 -2.45579 -0.964535 0.124737 0.23262 + -0.515576 2.40822 -2.57542 -0.924263 0.345164 -0.163094 + -0.528792 2.31274 -2.69794 -0.932179 0.328645 -0.15177 + -0.545174 2.20307 -2.83628 -0.939959 0.316103 -0.128668 + -0.56062 2.12383 -2.92759 -0.948636 0.316125 0.0124357 + -0.506193 2.48478 -2.46351 -0.887713 0.459375 -0.0306548 + -0.500131 2.49158 -2.47168 -0.702651 0.676886 -0.219333 + -0.509514 2.41502 -2.58358 -0.737999 0.578881 -0.346776 + -0.520503 2.32296 -2.7101 -0.751494 0.56082 -0.347473 + -0.536884 2.21329 -2.84844 -0.767794 0.551236 -0.326545 + -0.493119 2.4949 -2.47621 -0.490723 0.802906 -0.338427 + -0.49781 2.42055 -2.59114 -0.516982 0.720761 -0.461771 + -0.508799 2.32849 -2.71765 -0.52511 0.704602 -0.477279 + -0.522297 2.22082 -2.85854 -0.538309 0.705294 -0.461285 + -0.477694 2.49933 -2.48308 -0.36364 0.848718 -0.383984 + -0.482385 2.42499 -2.59801 -0.391614 0.770759 -0.502562 + -0.486967 2.33492 -2.72754 -0.398568 0.753249 -0.523219 + -0.500465 2.22725 -2.86843 -0.400833 0.761233 -0.509762 + -0.535618 2.15706 -2.94556 -0.526022 0.814297 -0.245401 + -0.461591 2.50266 -2.48885 -0.290495 0.869366 -0.399768 + -0.455504 2.43055 -2.60765 -0.313959 0.794689 -0.519518 + -0.460086 2.34048 -2.73717 -0.31707 0.776471 -0.544572 + -0.466308 2.23432 -2.88067 -0.314123 0.788051 -0.529435 + -0.451048 2.52741 -2.41903 -0.0854002 0.974261 0.208619 + -0.443246 2.50551 -2.4944 -0.210098 0.889037 -0.406783 + -0.437159 2.43339 -2.6132 -0.234496 0.814507 -0.53065 + -0.433981 2.34442 -2.74496 -0.236167 0.794165 -0.559934 + -0.439661 2.52833 -2.42158 0.06001 0.981835 0.179995 + -0.431859 2.50643 -2.49695 -0.0612857 0.912063 -0.405445 + -0.418151 2.43494 -2.61744 -0.075994 0.839986 -0.53726 + -0.414973 2.34596 -2.7492 -0.0696229 0.814534 -0.575923 + -0.4286 2.5258 -2.42033 0.448094 0.854593 0.262455 + -0.416879 2.50535 -2.49781 0.149029 0.915236 -0.374345 + -0.403171 2.43386 -2.61831 0.140231 0.841267 -0.522117 + -0.393462 2.34401 -2.75001 0.15221 0.807642 -0.56969 + -0.415832 2.23983 -2.89347 -0.0594768 0.811874 -0.580796 + -0.391312 2.48349 -2.47758 0.926959 0.357546 0.11361 + -0.395585 2.49407 -2.48847 0.823627 0.565352 -0.0449028 + -0.405817 2.50282 -2.49657 0.495461 0.826532 -0.26714 + -0.384707 2.42964 -2.61623 0.522457 0.743262 -0.417852 + -0.374997 2.33978 -2.74793 0.532501 0.698704 -0.47776 + -0.389873 2.47013 -2.4633 0.952587 0.195579 0.233082 + -0.367343 2.40322 -2.58996 0.972079 0.234349 -0.0119956 + -0.374474 2.42088 -2.60813 0.864561 0.465673 -0.188901 + -0.39199 2.4607 -2.45278 0.939376 0.0621409 0.33721 + -0.369437 2.37412 -2.55811 0.970087 -0.0648975 0.233922 + -0.365904 2.38986 -2.57567 0.989964 0.0803018 0.116288 + -0.352711 2.30859 -2.71715 0.96659 0.236506 -0.0988375 + -0.395605 2.45286 -2.44378 0.853254 -0.153288 0.498458 + -0.373052 2.36627 -2.54911 0.87559 -0.272512 0.398848 + -0.350354 2.27359 -2.679 0.985335 -0.0106209 0.170298 + -0.346821 2.28933 -2.69655 0.993311 0.107274 0.0427142 + -0.357841 2.25887 -2.66151 0.707496 -0.462844 0.534064 + -0.35233 2.26275 -2.66646 0.91187 -0.217126 0.348351 + -0.329112 2.15478 -2.81047 0.991712 0.127836 -0.0128568 + -0.338253 2.17287 -2.83091 0.962373 0.234008 -0.138124 + -0.344143 2.19213 -2.8515 0.967022 0.220721 -0.127082 + -0.339088 2.13831 -2.79074 0.707338 -0.467927 0.529828 + -0.331088 2.14395 -2.79793 0.914263 -0.230053 0.333465 + -0.319993 2.06227 -2.90625 0.997595 0.0415473 -0.0554786 + -0.329134 2.08035 -2.92669 0.967249 0.207806 -0.145763 + -0.353293 2.13085 -2.78075 0.639947 -0.51686 0.568615 + -0.331183 2.05649 -2.87513 0.703264 -0.491482 0.513678 + -0.323182 2.06213 -2.88232 0.911156 -0.269459 0.311748 + -0.323851 2.01424 -2.94759 0.992628 -0.0747521 0.0954014 + -0.348721 2.04813 -2.86213 0.640271 -0.53231 0.553804 + -0.335699 2.01663 -2.91063 0.649697 -0.540085 0.534979 + -0.327041 2.0141 -2.92366 0.857244 -0.379026 0.348528 + -0.381088 1.98997 -2.88234 0.532462 -0.585967 0.610842 + -0.353237 2.00827 -2.89763 0.65041 -0.539372 0.534831 + -0.338162 1.98742 -2.93632 0.65371 -0.528527 0.541592 + -0.329504 1.9849 -2.94935 0.831056 -0.389802 0.396738 + -0.413213 1.9792 -2.87175 0.331722 -0.638423 0.694534 + -0.422761 1.94126 -2.90427 0.297743 -0.670594 0.67945 + -0.383209 1.9579 -2.91144 0.523002 -0.591302 0.613865 + -0.355358 1.9762 -2.92673 0.648929 -0.531535 0.544392 + -0.461924 1.93088 -2.90102 0.0978693 -0.695188 0.712134 + -0.482886 1.89872 -2.93538 0.194687 -0.808608 0.555202 + -0.423224 1.92193 -2.92251 0.283896 -0.751676 0.595303 + -0.383672 1.93857 -2.92968 0.521782 -0.682096 0.512337 + -0.352138 1.95325 -2.95268 0.634726 -0.640366 0.432497 + -0.499306 1.93196 -2.90716 -0.480046 -0.286154 0.82926 + -0.49686 1.91642 -2.91029 -0.178898 -0.514258 0.838769 + -0.517822 1.88427 -2.94465 0.0771349 -0.809935 0.581426 + -0.520296 1.84983 -3.0054 0.147517 -0.871697 0.467315 + -0.489461 1.86738 -2.9882 0.240102 -0.863495 0.44354 + -0.485006 1.97367 -2.87647 -0.504201 -0.427606 0.75029 + -0.527606 1.94638 -2.93211 -0.713167 -0.134316 0.688006 + -0.540477 1.89771 -2.94495 -0.668362 -0.157002 0.727078 + -0.538031 1.88218 -2.94808 -0.457874 -0.632475 0.624762 + -0.540505 1.84774 -3.00883 0.044525 -0.793317 0.607178 + -0.540257 2.00477 -2.92293 -0.712884 -0.319851 0.624093 + -0.550425 1.95592 -2.95582 -0.717065 -0.137263 0.683357 + -0.563295 1.90724 -2.96866 -0.778807 -0.187871 0.598468 + -0.567529 1.8399 -3.00697 -0.104567 -0.651089 0.751764 + -0.535155 1.79806 -3.09115 0.340148 -0.840625 0.421483 + -0.578725 1.97035 -2.98078 -0.856759 -0.160377 0.490146 + -0.579954 1.94416 -2.99674 -0.905186 -0.104193 0.412046 + -0.599692 1.88911 -3.03888 -0.925468 0.00617519 0.378775 + -0.583033 1.85218 -3.0108 -0.714014 -0.257658 0.650996 + -0.589618 1.99987 -2.99685 -0.958446 -0.0246769 0.284204 + -0.590847 1.97369 -3.01281 -0.93631 -0.0896753 0.339532 + -0.579471 2.04438 -2.96402 -0.95826 -0.00316714 0.285881 + -0.584399 2.04968 -2.99969 -0.9862 0.146474 0.077163 + -0.59468 1.9906 -3.02123 -0.984201 0.0671927 0.163807 + -0.609711 1.92795 -3.07071 -0.97534 0.0723991 0.208497 + -0.605878 1.91104 -3.06229 -0.954416 -0.00805304 0.298371 + -0.574252 2.09419 -2.96686 -0.964908 0.251883 0.0742159 + -0.578828 2.08162 -3.00726 -0.931109 0.357932 -0.070149 + -0.58911 2.02254 -3.02881 -0.985573 0.159402 0.0568875 + -0.608203 1.94353 -3.09701 -0.979045 0.179536 0.0961097 + -0.637013 1.84059 -3.16702 -0.989931 0.0571008 0.129519 + -0.550205 2.14953 -2.93546 -0.813702 0.558485 -0.161193 + -0.563837 2.11988 -2.97473 -0.882279 0.460366 -0.0982188 + -0.560378 2.11072 -3.00768 -0.785948 0.55163 -0.279265 + -0.586662 2.05445 -3.04743 -0.913065 0.377179 -0.155077 + -0.605755 1.97545 -3.11563 -0.912638 0.369376 -0.17508 + -0.545387 2.14899 -2.97514 -0.661954 0.723716 -0.195068 + -0.533728 2.13537 -3.02469 -0.558143 0.735336 -0.384393 + -0.560011 2.0791 -3.06445 -0.729394 0.562423 -0.389442 + -0.576123 1.99168 -3.14484 -0.719048 0.536651 -0.44156 + -0.508183 2.17016 -2.95508 -0.398298 0.861567 -0.31474 + -0.517952 2.16209 -2.98466 -0.386136 0.884778 -0.260897 + -0.491183 2.14407 -3.04 -0.266413 0.856064 -0.44292 + -0.516853 2.10795 -3.09817 -0.470965 0.730318 -0.494801 + -0.532964 2.02054 -3.17856 -0.54834 0.591358 -0.591286 + -0.474026 2.17723 -2.96733 -0.19824 0.90362 -0.3797 + -0.475407 2.1708 -2.99997 -0.150471 0.936653 -0.316291 + -0.452411 2.14003 -3.06474 0.13632 0.845895 -0.515633 + -0.478081 2.10392 -3.12291 -0.0964758 0.803228 -0.587807 + -0.440204 2.23825 -2.88846 -0.218931 0.800731 -0.557583 + -0.441222 2.17234 -2.98279 -0.0221138 0.893085 -0.449343 + -0.442603 2.16591 -3.01543 0.329022 0.885641 -0.327695 + -0.422268 2.10312 -3.09402 0.426462 0.765735 -0.481436 + -0.41685 2.17391 -2.9878 0.0676328 0.792689 -0.605863 + -0.41246 2.12899 -3.04471 0.39343 0.758927 -0.518886 + -0.386349 2.06833 -3.10966 0.584743 0.673021 -0.4529 + -0.438839 2.08711 -3.14356 0.237809 0.786797 -0.569558 + -0.39432 2.23788 -2.89427 0.187654 0.788698 -0.585441 + -0.389817 2.15261 -2.99969 0.337419 0.731922 -0.591979 + -0.385427 2.10769 -3.0566 0.506834 0.693966 -0.511401 + -0.356933 2.02515 -3.1269 0.744423 0.553287 -0.373775 + -0.40292 2.05232 -3.15919 0.498005 0.678042 -0.540601 + -0.370119 2.2312 -2.89033 0.55757 0.66381 -0.498469 + -0.365615 2.14594 -2.99574 0.580164 0.6196 -0.528683 + -0.356011 2.06451 -3.07384 0.730735 0.537446 -0.420926 + -0.359842 2.32626 -2.73533 0.881773 0.405898 -0.240257 + -0.354964 2.21767 -2.87772 0.879801 0.390288 -0.271342 + -0.346571 2.11936 -2.98543 0.898082 0.354904 -0.259793 + -0.336966 2.03794 -3.06353 0.903413 0.351656 -0.245321 + -0.33575 2.09382 -2.95921 0.964039 0.230572 -0.132159 + -0.325227 2.00706 -3.03519 0.97344 0.195244 -0.119562 + -0.318612 1.99359 -3.00267 0.999024 0.0441667 0.000984841 + -0.321743 1.93023 -3.0794 0.923229 -0.337234 0.184178 + -0.319477 1.95721 -3.08768 0.993013 0.115719 0.0230935 + -0.331216 1.98809 -3.11602 0.909569 0.348049 -0.227037 + -0.358045 2.01003 -3.15456 0.726752 0.554167 -0.40587 + -0.324871 1.97717 -2.97205 0.932115 -0.277305 0.232944 + -0.319632 1.95652 -3.02713 0.961816 -0.252597 0.105375 + -0.334942 1.96447 -2.96227 0.726288 -0.560023 0.398598 + -0.33031 1.95675 -2.98498 0.753021 -0.580483 0.309837 + -0.332421 1.93045 -3.03725 0.716742 -0.641948 0.272365 + -0.362896 1.9105 -3.02897 0.579969 -0.751693 0.313997 + -0.34472 1.86875 -3.17277 0.67375 -0.714126 0.189961 + -0.317757 1.91413 -3.10763 0.770193 -0.558397 0.308213 + -0.31549 1.94111 -3.11592 0.989176 0.135782 -0.0556295 + -0.332328 1.97298 -3.14368 0.882671 0.379849 -0.27678 + -0.39443 1.89582 -3.00597 0.504745 -0.794646 0.337297 + -0.375195 1.84879 -3.16449 0.555768 -0.786484 0.269377 + -0.351296 1.8498 -3.23371 0.795118 -0.606203 -0.0174379 + -0.324332 1.89519 -3.16858 0.943972 -0.319452 -0.0828742 + -0.320957 1.92094 -3.15613 0.975908 0.0775858 -0.203921 + -0.4298 1.89059 -2.97533 0.340549 -0.843884 0.414593 + -0.427918 1.82882 -3.13141 0.439417 -0.839304 0.320127 + -0.441853 1.79071 -3.20774 0.415366 -0.848534 0.327813 + -0.38913 1.81069 -3.24081 0.605902 -0.736656 0.300367 + -0.361202 1.8383 -3.26571 0.940777 -0.274952 0.198343 + -0.463288 1.82359 -3.10077 0.344215 -0.874378 0.342021 + -0.494123 1.80604 -3.11798 0.365028 -0.861032 0.354088 + -0.489767 1.77749 -3.19558 0.294228 -0.919954 0.259065 + -0.460883 1.78007 -3.21531 0.294097 -0.914398 0.278177 + -0.422959 1.78291 -3.25752 0.447344 -0.881616 0.150454 + -0.530799 1.76951 -3.16875 0.324337 -0.918588 0.225834 + -0.540533 1.76076 -3.22843 0.11771 -0.991447 -0.0563651 + -0.494135 1.76554 -3.25139 0.10449 -0.994485 0.0090278 + -0.465251 1.76812 -3.27113 0.118759 -0.99217 -0.0386631 + -0.441989 1.77227 -3.2651 0.359206 -0.933256 0.00197985 + -0.558435 1.76325 -3.1555 0.293737 -0.920608 0.257293 + -0.568169 1.7545 -3.21518 0.0503074 -0.985755 -0.160488 + -0.587769 1.76593 -3.24254 -0.312762 -0.882471 -0.351318 + -0.554822 1.76938 -3.27247 -0.175481 -0.8986 -0.402149 + -0.508423 1.77416 -3.29543 -0.113135 -0.912836 -0.392339 + -0.573037 1.77082 -3.12331 0.180184 -0.906545 0.381721 + -0.580638 1.74965 -3.18292 0.0527998 -0.998467 0.0166229 + -0.600238 1.76109 -3.21029 -0.421898 -0.876679 -0.231162 + -0.562179 1.79022 -3.08929 0.225778 -0.856873 0.463457 + -0.610853 1.77971 -3.09411 -0.470898 -0.791309 0.389981 + -0.614004 1.77602 -3.11247 -0.397612 -0.832013 0.386857 + -0.595239 1.75722 -3.15073 -0.0711713 -0.950787 0.301559 + -0.599995 1.7991 -3.06009 -0.234115 -0.753129 0.614806 + -0.615499 1.81139 -3.06392 -0.866322 -0.235792 0.440327 + -0.618651 1.8077 -3.08228 -0.976566 -0.0945631 0.19333 + -0.624255 1.77598 -3.12444 -0.803737 -0.542337 0.244699 + -0.605489 1.75718 -3.16271 -0.458868 -0.884725 0.0818619 + -0.621003 1.81115 -3.103 -0.983966 0.0241603 0.176711 + -0.626607 1.77943 -3.14516 -0.914191 -0.396809 0.0824398 + -0.630666 1.78308 -3.1656 -0.897546 -0.423464 0.122836 + -0.609548 1.76084 -3.18315 -0.552403 -0.829464 -0.0827085 + -0.631179 1.79085 -3.23334 -0.847462 -0.372282 -0.378436 + -0.627189 1.83308 -3.12642 -0.971678 -0.00707808 0.236202 + -0.640489 1.7906 -3.20621 -0.926867 -0.352008 -0.130414 + -0.635505 1.85617 -3.19331 -0.953631 0.243531 -0.176862 + -0.613937 1.79682 -3.27088 -0.740642 -0.283997 -0.608929 + -0.618263 1.86215 -3.23085 -0.821367 0.35397 -0.447281 + -0.58863 1.87838 -3.26006 -0.580097 0.468114 -0.666601 + -0.58099 1.80027 -3.30081 -0.514348 -0.234756 -0.824825 + -0.532948 1.87658 -3.28699 -0.37928 0.454166 -0.806152 + -0.525308 1.79846 -3.32774 -0.282127 -0.243749 -0.927896 + -0.48922 1.79653 -3.33282 -0.0552429 -0.355778 -0.932936 + -0.472335 1.77223 -3.30051 0.10049 -0.896944 -0.430574 + -0.48838 2.02688 -3.19909 -0.257283 0.649077 -0.715894 + -0.488365 1.88292 -3.30753 -0.317856 0.41292 -0.853501 + -0.468522 1.81279 -3.33568 0.0380865 -0.158595 -0.986609 + -0.449139 2.01008 -3.21974 -0.0256102 0.686103 -0.727054 + -0.448111 1.89804 -3.30834 -0.169706 0.506088 -0.845621 + -0.428268 1.82792 -3.3365 0.158438 -0.403155 -0.901312 + -0.420566 1.99496 -3.23476 0.177246 0.670731 -0.720211 + -0.419538 1.88293 -3.32336 -0.0389268 0.42072 -0.906355 + -0.406468 1.84413 -3.33754 0.288276 -0.158864 -0.944277 + -0.390086 1.82357 -3.29044 0.532366 -0.645625 -0.547499 + -0.403222 2.00625 -3.21301 0.470228 0.653122 -0.593564 + -0.393954 1.89485 -3.30799 0.404817 0.51302 -0.756924 + -0.380884 1.85606 -3.32217 0.653747 -0.0107281 -0.756637 + -0.368286 1.83979 -3.29148 0.654441 -0.599344 -0.460971 + -0.358347 1.96397 -3.20837 0.70129 0.516857 -0.490969 + -0.368483 1.91092 -3.27321 0.7171 0.437002 -0.542952 + -0.376611 1.90614 -3.28625 0.597778 0.485397 -0.638005 + -0.36934 1.85773 -3.30622 0.807147 0.00516889 -0.590328 + -0.356741 1.84146 -3.27553 0.997983 -0.061069 0.0173252 + -0.337794 1.95281 -3.18389 0.850943 0.383801 -0.358599 + -0.347931 1.89976 -3.24873 0.881533 0.202841 -0.426328 + -0.351306 1.87401 -3.26118 0.94511 -0.0207821 -0.326092 + -0.361212 1.86251 -3.29318 0.892142 0.0802041 -0.444579 + -0.365609 1.82155 -3.26492 0.83111 -0.546298 -0.103993 + -0.428375 1.79264 -3.29734 0.48171 -0.587432 -0.650292 + -0.449073 1.77638 -3.29447 0.352737 -0.821275 -0.448424 + -0.370069 1.81839 -3.25511 0.747716 -0.381009 0.543831 + -0.403898 1.79062 -3.27181 0.558526 -0.807993 -0.187608 + 0.465679 2.5057 -2.39357 0.383464 0.300067 0.87345 + 0.455121 2.49752 -2.38613 0.168342 0.0901796 0.981595 + 0.467398 2.44058 -2.42085 0.524332 -0.503585 0.686643 + 0.474164 2.52076 -2.40874 0.446181 0.824383 0.348303 + 0.424327 2.51521 -2.40944 -0.601315 0.599213 0.528549 + 0.426444 2.50578 -2.39893 -0.585541 0.381774 0.715116 + 0.429745 2.50345 -2.39596 -0.461452 0.283428 0.840673 + 0.440329 2.49849 -2.38915 -0.316583 0.157404 0.935414 + 0.43569 2.43673 -2.42093 -0.302496 -0.558937 0.772066 + 0.450482 2.43577 -2.4179 0.0466769 -0.601423 0.797566 + 0.477956 2.44876 -2.42829 0.713783 -0.394725 0.578538 + 0.492046 2.45967 -2.43823 0.713778 -0.394725 0.578543 + 0.476236 2.51388 -2.40102 0.56647 0.416188 0.711265 + 0.464037 2.34847 -2.51762 0.530505 -0.615793 0.582549 + 0.48166 2.36212 -2.53005 0.723126 -0.502302 0.474111 + 0.495751 2.37304 -2.53998 0.723281 -0.501903 0.474297 + 0.502604 2.46785 -2.44568 0.829633 -0.259951 0.4941 + 0.508266 2.4779 -2.45579 0.964536 0.124737 0.232619 + 0.447121 2.34366 -2.51467 0.0649277 -0.718758 0.692222 + 0.466709 2.24227 -2.62943 0.525797 -0.602265 0.600678 + 0.484332 2.25592 -2.64186 0.718824 -0.487143 0.495967 + 0.505944 2.2722 -2.65711 0.720384 -0.483322 0.49744 + 0.513374 2.38669 -2.55241 0.843805 -0.375318 0.383574 + 0.422429 2.34527 -2.51972 -0.298634 -0.675886 0.673792 + 0.415673 2.23704 -2.6301 -0.297262 -0.667155 0.683037 + 0.440365 2.23543 -2.62505 0.0485824 -0.705731 0.706812 + 0.467083 2.11724 -2.75126 0.491269 -0.589695 0.641026 + 0.418756 2.44069 -2.42749 -0.521748 -0.469846 0.712056 + 0.405496 2.34923 -2.52628 -0.515754 -0.591516 0.619763 + 0.389712 2.24311 -2.64016 -0.518166 -0.584775 0.624133 + 0.404898 2.11274 -2.75421 -0.301854 -0.655118 0.692607 + 0.44074 2.1104 -2.74687 0.0485278 -0.686716 0.725304 + 0.408173 2.44566 -2.43429 -0.639148 -0.393146 0.661004 + 0.387829 2.35752 -2.53764 -0.639941 -0.516836 0.568644 + 0.372046 2.2514 -2.65151 -0.639663 -0.51484 0.570763 + 0.353293 2.13085 -2.78075 -0.640012 -0.516908 0.568498 + 0.378937 2.1188 -2.76427 -0.518318 -0.581978 0.626616 + 0.398907 2.45053 -2.44081 -0.703453 -0.33624 0.626176 + 0.378564 2.36239 -2.54416 -0.707258 -0.463217 0.534056 + 0.357841 2.25887 -2.66151 -0.707496 -0.462841 0.534066 + 0.339088 2.13831 -2.79074 -0.707264 -0.468092 0.529781 + 0.348721 2.04813 -2.86213 -0.637327 -0.536612 0.553048 + 0.395605 2.45286 -2.44378 -0.853254 -0.153287 0.498458 + 0.373052 2.36627 -2.54911 -0.874014 -0.271512 0.402965 + 0.35233 2.26275 -2.66646 -0.911269 -0.221579 0.347118 + 0.331088 2.14395 -2.79793 -0.914335 -0.230114 0.333224 + 0.39199 2.4607 -2.45278 -0.939377 0.0621389 0.337209 + 0.369437 2.37412 -2.55811 -0.970159 -0.0588267 0.235225 + 0.350354 2.27359 -2.679 -0.988654 -0.0142267 0.149537 + 0.329112 2.15478 -2.81047 -0.989325 0.145438 -0.00917028 + 0.323182 2.06213 -2.88232 -0.909419 -0.276355 0.310781 + 0.389873 2.47013 -2.4633 -0.952587 0.195578 0.233081 + 0.365904 2.38986 -2.57567 -0.989218 0.0809957 0.122012 + 0.346821 2.28933 -2.69655 -0.996135 0.0796166 0.0371043 + 0.338253 2.17287 -2.83091 -0.96365 0.236449 -0.12438 + 0.391312 2.48349 -2.47758 -0.926958 0.357549 0.113613 + 0.367343 2.40322 -2.58996 -0.970324 0.241592 -0.0101971 + 0.352711 2.30859 -2.71715 -0.966257 0.23593 -0.103361 + 0.395585 2.49407 -2.48847 -0.823625 0.565355 -0.0449006 + 0.374474 2.42088 -2.60813 -0.864413 0.465584 -0.189794 + 0.359842 2.32626 -2.73533 -0.881861 0.405688 -0.240289 + 0.354964 2.21767 -2.87772 -0.87871 0.389522 -0.275936 + 0.344143 2.19213 -2.8515 -0.967179 0.219972 -0.127186 + 0.4286 2.5258 -2.42033 -0.448167 0.85458 0.262371 + 0.405817 2.50282 -2.49657 -0.495462 0.826531 -0.26714 + 0.384707 2.42964 -2.61623 -0.523026 0.74259 -0.418334 + 0.374997 2.33978 -2.74793 -0.533984 0.69952 -0.474903 + 0.439661 2.52833 -2.42158 -0.060127 0.98191 0.179549 + 0.416879 2.50535 -2.49781 -0.149029 0.915236 -0.374344 + 0.403171 2.43386 -2.61831 -0.139572 0.840839 -0.522982 + 0.393462 2.34401 -2.75001 -0.150557 0.809282 -0.567799 + 0.451048 2.52741 -2.41903 0.0862815 0.974705 0.20617 + 0.443246 2.50551 -2.4944 0.2101 0.889036 -0.406784 + 0.431859 2.50643 -2.49695 0.0612857 0.912063 -0.405445 + 0.418151 2.43494 -2.61744 0.0754965 0.839603 -0.537929 + 0.467152 2.52407 -2.41326 0.203434 0.952476 0.226723 + 0.477694 2.49933 -2.48308 0.363639 0.848718 -0.383985 + 0.461591 2.50266 -2.48885 0.290495 0.869365 -0.399772 + 0.437159 2.43339 -2.6132 0.234317 0.814669 -0.53048 + 0.500131 2.49158 -2.47168 0.702651 0.676885 -0.219334 + 0.493119 2.4949 -2.47621 0.490724 0.802906 -0.338426 + 0.482385 2.42499 -2.59801 0.391382 0.770999 -0.502375 + 0.455504 2.43055 -2.60765 0.314064 0.794766 -0.519337 + 0.506193 2.48478 -2.46351 0.887714 0.459374 -0.0306559 + 0.509514 2.41502 -2.58358 0.737313 0.580051 -0.346281 + 0.49781 2.42055 -2.59114 0.517101 0.720842 -0.461512 + 0.486967 2.33492 -2.72754 0.398478 0.75318 -0.523389 + 0.460086 2.34048 -2.73717 0.317193 0.776348 -0.544676 + 0.519036 2.39674 -2.56253 0.993684 -0.0101844 0.111755 + 0.515576 2.40822 -2.57542 0.924382 0.345337 -0.16205 + 0.520503 2.32296 -2.7101 0.751029 0.560399 -0.349153 + 0.508799 2.32849 -2.71765 0.526003 0.703496 -0.477927 + 0.500465 2.22725 -2.86843 0.396569 0.765459 -0.50676 + 0.532252 2.30126 -2.68505 0.993247 -0.00113793 0.116011 + 0.528792 2.31274 -2.69794 0.933213 0.325278 -0.152669 + 0.536884 2.21329 -2.84844 0.761954 0.561361 -0.322955 + 0.522297 2.22082 -2.85854 0.540792 0.707033 -0.455685 + 0.523567 2.28586 -2.66954 0.841516 -0.361218 0.401712 + 0.548581 2.18674 -2.81815 0.988053 -0.00889096 0.153856 + 0.545174 2.20307 -2.83628 0.940753 0.317705 -0.118523 + 0.550205 2.14953 -2.93546 0.797245 0.555925 -0.235262 + 0.515912 2.15119 -2.78403 0.733084 -0.447089 0.512542 + 0.539896 2.17133 -2.80264 0.852708 -0.322727 0.410776 + 0.564027 2.1075 -2.90947 0.982603 0.031333 0.183055 + 0.56062 2.12383 -2.92759 0.95932 0.282243 0.00663171 + 0.4943 2.13491 -2.76878 0.695511 -0.475713 0.538481 + 0.529129 2.06217 -2.87472 0.728156 -0.392582 0.561843 + 0.553113 2.08232 -2.89334 0.840567 -0.272223 0.46834 + 0.579471 2.04438 -2.96402 0.957588 0.00358822 0.28812 + 0.474962 2.02784 -2.83569 0.482724 -0.523383 0.702173 + 0.502179 2.0455 -2.85321 0.693874 -0.417087 0.587007 + 0.540257 2.00477 -2.92293 0.710967 -0.324395 0.623934 + 0.568557 2.0192 -2.94789 0.820231 -0.21499 0.530094 + 0.442331 2.02299 -2.82772 0.0282829 -0.643783 0.764685 + 0.485006 1.97367 -2.87647 0.486894 -0.450797 0.748142 + 0.513307 1.9881 -2.90143 0.712533 -0.309086 0.629891 + 0.550425 1.95592 -2.95582 0.743826 -0.15307 0.65061 + 0.578725 1.97035 -2.98078 0.83414 -0.22848 0.502003 + 0.40649 2.02533 -2.83506 -0.314874 -0.633726 0.706573 + 0.413213 1.9792 -2.87175 -0.323645 -0.632704 0.703519 + 0.452376 1.96882 -2.8685 0.0186772 -0.625472 0.780023 + 0.374365 2.03609 -2.84565 -0.534402 -0.578503 0.616237 + 0.381088 1.98997 -2.88234 -0.538388 -0.578161 0.613082 + 0.383209 1.9579 -2.91144 -0.527345 -0.593125 0.608367 + 0.422761 1.94126 -2.90427 -0.30955 -0.658637 0.685839 + 0.461924 1.93088 -2.90102 -0.0944718 -0.667806 0.738316 + 0.353237 2.00827 -2.89763 -0.647689 -0.53793 0.539565 + 0.355358 1.9762 -2.92673 -0.649371 -0.530818 0.544563 + 0.352138 1.95325 -2.95268 -0.631407 -0.639341 0.438826 + 0.383672 1.93857 -2.92968 -0.518595 -0.686122 0.510193 + 0.423224 1.92193 -2.92251 -0.317513 -0.759529 0.567715 + 0.331183 2.05649 -2.87513 -0.706079 -0.494343 0.507028 + 0.335699 2.01663 -2.91063 -0.659364 -0.528935 0.534291 + 0.338162 1.98742 -2.93632 -0.653415 -0.528365 0.542106 + 0.327041 2.0141 -2.92366 -0.856837 -0.37716 0.35154 + 0.329504 1.9849 -2.94935 -0.831056 -0.389802 0.396738 + 0.334942 1.96447 -2.96227 -0.730143 -0.552643 0.401842 + 0.332421 1.93045 -3.03725 -0.718248 -0.64155 0.269319 + 0.362896 1.9105 -3.02897 -0.571065 -0.761074 0.307656 + 0.319993 2.06227 -2.90625 -0.998576 0.0508423 -0.0161631 + 0.323851 2.01424 -2.94759 -0.966206 -0.201075 0.161291 + 0.324871 1.97717 -2.97205 -0.932115 -0.277305 0.232944 + 0.33031 1.95675 -2.98498 -0.735857 -0.599684 0.314473 + 0.329134 2.08035 -2.92669 -0.959403 0.242602 -0.143843 + 0.318612 1.99359 -3.00267 -0.999245 0.0363079 -0.0137993 + 0.319632 1.95652 -3.02713 -0.968928 -0.224482 0.103861 + 0.321743 1.93023 -3.0794 -0.917648 -0.357241 0.174069 + 0.33575 2.09382 -2.95921 -0.96425 0.231084 -0.129701 + 0.325227 2.00706 -3.03519 -0.974958 0.191433 -0.113185 + 0.319477 1.95721 -3.08768 -0.992596 0.121279 -0.00670317 + 0.346571 2.11936 -2.98543 -0.896873 0.358838 -0.258561 + 0.336966 2.03794 -3.06353 -0.903769 0.351223 -0.244631 + 0.331216 1.98809 -3.11602 -0.900398 0.373777 -0.222653 + 0.31549 1.94111 -3.11592 -0.991997 0.111723 -0.0588171 + 0.370119 2.2312 -2.89033 -0.561163 0.658409 -0.501592 + 0.365615 2.14594 -2.99574 -0.599545 0.630378 -0.493122 + 0.356011 2.06451 -3.07384 -0.731845 0.533857 -0.423555 + 0.356933 2.02515 -3.1269 -0.755486 0.545516 -0.362839 + 0.332328 1.97298 -3.14368 -0.881472 0.379587 -0.280928 + 0.39432 2.23788 -2.89427 -0.174521 0.77983 -0.601172 + 0.389817 2.15261 -2.99969 -0.318464 0.754588 -0.57374 + 0.385427 2.10769 -3.0566 -0.480978 0.6926 -0.537555 + 0.386349 2.06833 -3.10966 -0.585664 0.671772 -0.453564 + 0.358045 2.01003 -3.15456 -0.72638 0.554229 -0.406451 + 0.414973 2.34596 -2.7492 0.0685461 0.815429 -0.574785 + 0.415832 2.23983 -2.89347 0.0498165 0.803606 -0.593073 + 0.41685 2.17391 -2.9878 -0.174051 0.838852 -0.515785 + 0.41246 2.12899 -3.04471 -0.394787 0.756238 -0.521774 + 0.422268 2.10312 -3.09402 -0.485888 0.743637 -0.459256 + 0.433981 2.34442 -2.74496 0.236487 0.794435 -0.559416 + 0.440204 2.23825 -2.88846 0.227816 0.793079 -0.564912 + 0.441222 2.17234 -2.98279 0.0827411 0.927144 -0.365455 + 0.442603 2.16591 -3.01543 -0.122953 0.890915 -0.43721 + 0.452411 2.14003 -3.06474 -0.129889 0.862102 -0.489805 + 0.466308 2.23432 -2.88067 0.308979 0.784427 -0.53778 + 0.474026 2.17723 -2.96733 0.186901 0.909097 -0.372305 + 0.475407 2.1708 -2.99997 0.145123 0.932714 -0.330127 + 0.491183 2.14407 -3.04 0.2971 0.83821 -0.457314 + 0.508183 2.17016 -2.95508 0.396365 0.860939 -0.31887 + 0.517952 2.16209 -2.98466 0.415619 0.867041 -0.274773 + 0.533728 2.13537 -3.02469 0.551186 0.717458 -0.425968 + 0.535618 2.15706 -2.94556 0.588208 0.759652 -0.277381 + 0.545387 2.14899 -2.97514 0.68128 0.705538 -0.195127 + 0.560378 2.11072 -3.00768 0.780776 0.558476 -0.280166 + 0.560011 2.0791 -3.06445 0.704083 0.595278 -0.387184 + 0.563837 2.11988 -2.97473 0.880972 0.46392 -0.0930985 + 0.578828 2.08162 -3.00726 0.888715 0.348437 -0.297956 + 0.58911 2.02254 -3.02881 0.981821 0.180999 0.0571482 + 0.586662 2.05445 -3.04743 0.916753 0.393011 -0.0714607 + 0.574252 2.09419 -2.96686 0.967748 0.246266 0.0530802 + 0.584399 2.04968 -2.99969 0.984454 0.156511 0.0797096 + 0.59468 1.9906 -3.02123 0.984021 0.0671062 0.16492 + 0.609711 1.92795 -3.07071 0.9743 0.0797177 0.210678 + 0.608203 1.94353 -3.09701 0.982589 0.178461 0.0516783 + 0.589618 1.99987 -2.99685 0.959156 -0.0248068 0.281788 + 0.590847 1.97369 -3.01281 0.935666 -0.10425 0.337136 + 0.605878 1.91104 -3.06229 0.94264 -0.00330866 0.333796 + 0.579954 1.94416 -2.99674 0.878459 -0.0938714 0.468506 + 0.599692 1.88911 -3.03888 0.926364 -0.0041942 0.376605 + 0.627189 1.83308 -3.12642 0.971195 -0.0175188 0.237643 + 0.637013 1.84059 -3.16702 0.993609 0.0480325 0.102144 + 0.635505 1.85617 -3.19331 0.945681 0.271976 -0.178088 + 0.563295 1.90724 -2.96866 0.79862 -0.0668863 0.598108 + 0.583033 1.85218 -3.0108 0.697145 -0.29103 0.655202 + 0.621003 1.81115 -3.103 0.979705 0.033747 0.197582 + 0.626607 1.77943 -3.14516 0.914192 -0.396809 0.0824398 + 0.630666 1.78308 -3.1656 0.897543 -0.42347 0.122837 + 0.527606 1.94638 -2.93211 0.717319 -0.119366 0.686443 + 0.540477 1.89771 -2.94495 0.664981 -0.153377 0.730941 + 0.499306 1.93196 -2.90716 0.678483 -0.214103 0.702724 + 0.49686 1.91642 -2.91029 0.20049 -0.56045 0.803554 + 0.538031 1.88218 -2.94808 0.386241 -0.607282 0.694281 + 0.517822 1.88427 -2.94465 -0.076252 -0.809571 0.582048 + 0.520296 1.84983 -3.0054 -0.128805 -0.891481 0.434363 + 0.540505 1.84774 -3.00883 -0.0731721 -0.843703 0.5318 + 0.567529 1.8399 -3.00697 0.059863 -0.39891 0.915034 + 0.615499 1.81139 -3.06392 0.900657 -0.0611883 0.430202 + 0.482886 1.89872 -2.93538 -0.190985 -0.81101 0.55298 + 0.489461 1.86738 -2.9882 -0.241588 -0.863665 0.442401 + 0.494123 1.80604 -3.11798 -0.344642 -0.862688 0.370123 + 0.535155 1.79806 -3.09115 -0.357319 -0.827483 0.433123 + 0.562179 1.79022 -3.08929 -0.236796 -0.861985 0.44823 + 0.4298 1.89059 -2.97533 -0.349195 -0.83856 0.418186 + 0.463288 1.82359 -3.10077 -0.342999 -0.86568 0.364622 + 0.441853 1.79071 -3.20774 -0.421799 -0.8487 0.319051 + 0.460883 1.78007 -3.21531 -0.294596 -0.916755 0.269766 + 0.489767 1.77749 -3.19558 -0.305673 -0.914792 0.264043 + 0.39443 1.89582 -3.00597 -0.50588 -0.795311 0.334016 + 0.427918 1.82882 -3.13141 -0.46362 -0.823519 0.326915 + 0.38913 1.81069 -3.24081 -0.522032 -0.800828 0.293527 + 0.422959 1.78291 -3.25752 -0.456297 -0.884217 0.0997665 + 0.441989 1.77227 -3.2651 -0.359205 -0.933256 0.00197763 + 0.375195 1.84879 -3.16449 -0.540362 -0.784873 0.303287 + 0.370069 1.81839 -3.25511 -0.711498 -0.68577 0.153266 + 0.403898 1.79062 -3.27181 -0.513455 -0.833937 -0.20227 + 0.428375 1.79264 -3.29734 -0.471256 -0.709989 -0.523292 + 0.449073 1.77638 -3.29447 -0.381119 -0.814187 -0.438004 + 0.34472 1.86875 -3.17277 -0.687105 -0.696643 0.206338 + 0.351296 1.8498 -3.23371 -0.90718 -0.414301 -0.073333 + 0.361202 1.8383 -3.26571 -0.969213 -0.231546 0.0837408 + 0.365609 1.82155 -3.26492 -0.826156 -0.558216 -0.0765548 + 0.390086 1.82357 -3.29044 -0.540085 -0.644964 -0.540675 + 0.317757 1.91413 -3.10763 -0.770193 -0.558397 0.308213 + 0.324332 1.89519 -3.16858 -0.943974 -0.319444 -0.0828771 + 0.351306 1.87401 -3.26118 -0.94511 -0.0207816 -0.326092 + 0.361212 1.86251 -3.29318 -0.892142 0.0802041 -0.444579 + 0.356741 1.84146 -3.27553 -0.99919 -0.0183303 0.0358235 + 0.320957 1.92094 -3.15613 -0.975908 0.0775768 -0.203923 + 0.347931 1.89976 -3.24873 -0.881531 0.20285 -0.426328 + 0.368483 1.91092 -3.27321 -0.711821 0.444313 -0.543964 + 0.376611 1.90614 -3.28625 -0.598068 0.486209 -0.637114 + 0.36934 1.85773 -3.30622 -0.807147 0.00516891 -0.590328 + 0.337794 1.95281 -3.18389 -0.860206 0.35781 -0.363342 + 0.358347 1.96397 -3.20837 -0.697123 0.514911 -0.498885 + 0.403222 2.00625 -3.21301 -0.48681 0.639599 -0.59492 + 0.420566 1.99496 -3.23476 -0.182199 0.653628 -0.734558 + 0.393954 1.89485 -3.30799 -0.404817 0.51302 -0.756924 + 0.40292 2.05232 -3.15919 -0.535239 0.676635 -0.505652 + 0.438839 2.08711 -3.14356 -0.24278 0.770125 -0.589886 + 0.449139 2.01008 -3.21974 0.0836736 0.6568 -0.749408 + 0.419538 1.88293 -3.32336 0.0169297 0.440701 -0.897494 + 0.478081 2.10392 -3.12291 0.145707 0.789356 -0.596395 + 0.48838 2.02688 -3.19909 0.254254 0.645091 -0.720564 + 0.488365 1.88292 -3.30753 0.289611 0.449635 -0.844958 + 0.448111 1.89804 -3.30834 0.176563 0.512221 -0.840509 + 0.516853 2.10795 -3.09817 0.495025 0.750287 -0.4382 + 0.532964 2.02054 -3.17856 0.572164 0.556786 -0.602178 + 0.576123 1.99168 -3.14484 0.703388 0.52433 -0.47992 + 0.532948 1.87658 -3.28699 0.413036 0.489111 -0.768226 + 0.525308 1.79846 -3.32774 0.30126 -0.271825 -0.913977 + 0.48922 1.79653 -3.33282 0.0262133 -0.390716 -0.920138 + 0.468522 1.81279 -3.33568 -0.0195938 -0.163252 -0.98639 + 0.605755 1.97545 -3.11563 0.922118 0.340633 -0.183487 + 0.58863 1.87838 -3.26006 0.557067 0.501212 -0.662165 + 0.58099 1.80027 -3.30081 0.535555 -0.220468 -0.815215 + 0.618263 1.86215 -3.23085 0.821617 0.357311 -0.444155 + 0.613937 1.79682 -3.27088 0.738998 -0.26562 -0.619134 + 0.554822 1.76938 -3.27247 0.177147 -0.900383 -0.397404 + 0.508423 1.77416 -3.29543 0.099608 -0.91513 -0.390661 + 0.472335 1.77223 -3.30051 -0.106219 -0.892306 -0.438757 + 0.631179 1.79085 -3.23334 0.853445 -0.369386 -0.367675 + 0.600238 1.76109 -3.21029 0.423074 -0.874949 -0.235527 + 0.587769 1.76593 -3.24254 0.35698 -0.865769 -0.350725 + 0.568169 1.7545 -3.21518 -0.03959 -0.991969 -0.120124 + 0.540533 1.76076 -3.22843 -0.135904 -0.989401 -0.0511395 + 0.640489 1.7906 -3.20621 0.94394 -0.289701 -0.158275 + 0.609548 1.76084 -3.18315 0.552403 -0.829464 -0.0827067 + 0.580638 1.74965 -3.18292 -0.0528003 -0.998467 0.0166281 + 0.558435 1.76325 -3.1555 -0.301912 -0.9153 0.2666 + 0.530799 1.76951 -3.16875 -0.317559 -0.917524 0.239387 + 0.605489 1.75718 -3.16271 0.458868 -0.884725 0.0818619 + 0.595239 1.75722 -3.15073 0.0709899 -0.954808 0.288621 + 0.573037 1.77082 -3.12331 -0.225378 -0.896046 0.382501 + 0.624255 1.77598 -3.12444 0.803737 -0.542336 0.244699 + 0.614004 1.77602 -3.11247 0.525441 -0.773302 0.354846 + 0.610853 1.77971 -3.09411 0.476413 -0.775423 0.414428 + 0.599995 1.7991 -3.06009 0.234117 -0.753126 0.614809 + 0.618651 1.8077 -3.08228 0.976578 -0.0944165 0.19334 + 0.494135 1.76554 -3.25139 -0.107306 -0.994213 0.00500804 + 0.465251 1.76812 -3.27113 -0.132568 -0.990637 -0.0326267 + 0.428268 1.82792 -3.3365 -0.176466 -0.290291 -0.940527 + 0.406468 1.84413 -3.33754 -0.302134 -0.164667 -0.938936 + 0.368286 1.83979 -3.29148 -0.655701 -0.550843 -0.516361 + 0.380884 1.85606 -3.32217 -0.653746 -0.0107272 -0.756638 + -0.557574 1.95467 -2.75219 0.90941 -0.0278976 0.414965 + -0.591195 1.94736 -2.68493 0.685719 -0.153302 0.711539 + -0.582635 1.9028 -2.69995 0.672119 -0.0751704 0.736618 + -0.576773 2.03351 -2.69323 0.87722 -0.209859 0.431792 + -0.603725 2.00268 -2.66108 0.651073 -0.313118 0.691419 + -0.65083 1.99416 -2.64194 0.100098 -0.505881 0.856776 + -0.6383 1.93884 -2.66579 0.086709 -0.348989 0.933107 + -0.6215 1.87741 -2.6876 0.125868 -0.266063 0.955703 + -0.549014 1.91012 -2.7672 0.94613 -0.00324097 0.323771 + -0.540029 1.95215 -2.79381 0.986923 0.106444 0.121046 + -0.559228 2.03099 -2.73484 0.984424 0.10089 0.14398 + -0.582231 2.12162 -2.61887 0.942312 -0.202078 0.266856 + -0.563942 1.87344 -2.71651 0.785614 -0.0785967 0.613705 + -0.560132 1.84076 -2.74265 0.891084 -0.336763 0.304238 + -0.545204 1.87744 -2.79335 0.959721 -0.112755 0.257337 + -0.536207 1.89321 -2.82428 0.998619 0.00428827 0.0523511 + -0.542424 1.9554 -2.81462 0.959283 0.232865 -0.159846 + -0.602807 1.84804 -2.70416 0.37489 -0.240105 0.895437 + -0.593886 1.81248 -2.71632 0.563545 -0.436019 0.701644 + -0.584623 1.81375 -2.72933 0.732246 -0.52654 0.431938 + -0.578252 1.79374 -2.78086 0.756421 -0.565337 0.328971 + -0.648715 1.7972 -2.70334 -0.0223477 -0.185469 0.982396 + -0.639794 1.76164 -2.7155 0.426045 -0.565836 0.705915 + -0.641574 1.74647 -2.75072 0.591306 -0.75103 0.293787 + -0.632311 1.74775 -2.76373 0.544872 -0.76406 0.345435 + -0.602743 1.76674 -2.76753 0.651479 -0.677267 0.341884 + -0.698685 1.85599 -2.71767 -0.362385 -0.180903 0.914304 + -0.731885 1.82353 -2.72971 -0.430119 -0.0689101 0.900138 + -0.681915 1.76474 -2.71539 -0.276162 -0.262936 0.924446 + -0.665852 1.74009 -2.72235 0.138845 -0.690283 0.710093 + -0.715485 1.91742 -2.69586 -0.347155 -0.423126 0.836927 + -0.777419 1.86789 -2.75917 -0.645701 -0.160296 0.746576 + -0.753448 1.83334 -2.74042 -0.543407 -0.0223325 0.839172 + -0.71418 1.75095 -2.73674 -0.490167 -0.397708 0.775606 + -0.698117 1.7263 -2.7437 -0.140991 -0.713704 0.686111 + -0.701491 2.01968 -2.63472 -0.302852 -0.519986 0.798683 + -0.745543 2.03331 -2.65112 -0.626794 -0.376569 0.682148 + -0.759537 1.93105 -2.71226 -0.604477 -0.351736 0.714765 + -0.644579 2.08591 -2.57095 0.0991367 -0.646994 0.756023 + -0.69524 2.11143 -2.56373 -0.36146 -0.588378 0.723296 + -0.727539 2.12957 -2.57257 -0.646524 -0.442853 0.621198 + -0.767489 2.04796 -2.67431 -0.822872 -0.221839 0.523134 + -0.785949 1.96684 -2.73182 -0.822726 -0.198455 0.53267 + -0.609183 2.09079 -2.58673 0.652594 -0.501539 0.567962 + -0.637776 2.19722 -2.46583 0.0609133 -0.678577 0.731999 + -0.678501 2.20954 -2.46987 -0.381566 -0.599171 0.703847 + -0.7108 2.22767 -2.47871 -0.678731 -0.43337 0.592887 + -0.749485 2.14421 -2.59576 -0.834976 -0.264766 0.482405 + -0.579138 2.22859 -2.5094 0.945477 -0.24025 0.219893 + -0.60238 2.20209 -2.48161 0.654067 -0.534983 0.53478 + -0.625194 2.30896 -2.36457 0.0832905 -0.657513 0.748825 + -0.66592 2.32128 -2.36861 -0.40161 -0.578409 0.710037 + -0.688934 2.3344 -2.37654 -0.691224 -0.413747 0.592472 + -0.576987 2.15463 -2.65067 0.994317 0.0949441 -0.0481533 + -0.573893 2.2616 -2.54119 0.996191 0.0534127 -0.0689259 + -0.572847 2.36653 -2.42594 0.996661 0.0662524 -0.0477294 + -0.576804 2.3416 -2.40205 0.947136 -0.219572 0.233928 + -0.600047 2.3151 -2.37426 0.659253 -0.51116 0.551454 + -0.570883 2.07068 -2.72723 0.939214 0.290662 -0.182735 + -0.592754 2.19486 -2.6868 0.910156 0.29793 -0.287845 + -0.587346 2.29606 -2.5723 0.914533 0.287886 -0.284168 + -0.5863 2.40099 -2.45705 0.913618 0.30641 -0.267237 + -0.55408 1.99509 -2.80701 0.929924 0.321134 -0.179204 + -0.58665 2.11092 -2.76336 0.89976 0.35383 -0.255412 + -0.616992 2.12624 -2.81177 0.640275 0.582698 -0.500511 + -0.612134 2.21989 -2.70614 0.683011 0.530756 -0.50179 + -0.606726 2.32109 -2.59164 0.683378 0.538591 -0.492863 + -0.554558 1.92862 -2.88943 0.907005 0.299255 -0.29629 + -0.562318 1.98001 -2.854 0.879112 0.354949 -0.318079 + -0.594889 2.09583 -2.81035 0.814339 0.455069 -0.360227 + -0.538602 1.89646 -2.8451 0.984215 0.0743721 -0.160589 + -0.545167 1.89124 -2.8865 0.976989 0.0944499 -0.191237 + -0.563849 1.89026 -2.95209 0.880184 0.282394 -0.381485 + -0.596077 1.95895 -2.95063 0.791354 0.433904 -0.430681 + -0.603837 2.01035 -2.9152 0.772773 0.443957 -0.453568 + -0.537723 1.8242 -2.8348 0.979183 -0.201119 -0.0274185 + -0.545798 1.83268 -2.864 0.965192 -0.126982 -0.228648 + -0.552363 1.82746 -2.9054 0.962773 -0.238395 -0.127421 + -0.554457 1.85289 -2.94916 0.960343 0.0362309 -0.276455 + -0.579126 1.88838 -2.98191 0.799307 0.300351 -0.520478 + -0.54672 1.80842 -2.80386 0.821386 -0.380042 0.425316 + -0.573284 1.75936 -2.86084 0.702268 -0.700419 0.127406 + -0.563727 1.77151 -2.88367 0.86613 -0.47246 -0.163098 + -0.571803 1.77999 -2.91288 0.890954 -0.373242 -0.258636 + -0.604816 1.74469 -2.83784 0.602023 -0.760474 0.243409 + -0.634648 1.70481 -2.92819 0.710141 -0.703781 -0.0198286 + -0.630071 1.71904 -2.9497 0.762702 -0.632085 -0.136945 + -0.620515 1.73118 -2.97252 0.726169 -0.685072 -0.0579214 + -0.626104 1.73156 -2.82037 0.59418 -0.774158 0.218241 + -0.655936 1.69168 -2.91072 0.531648 -0.826498 0.185071 + -0.67741 1.66562 -2.96674 0.566761 -0.812379 0.137197 + -0.667234 1.67281 -2.98919 0.737882 -0.66847 -0.093157 + -0.662657 1.68703 -3.01069 0.783699 -0.620388 -0.0305707 + -0.655672 1.71257 -2.81656 0.470155 -0.84746 0.246507 + -0.675411 1.68708 -2.88916 0.442259 -0.864809 0.237724 + -0.696884 1.66102 -2.94518 0.535717 -0.821316 0.196078 + -0.71439 1.63416 -3.0018 0.491678 -0.868581 -0.0618075 + -0.704214 1.64134 -3.02425 0.455574 -0.85629 -0.243353 + -0.691288 1.70242 -2.79813 0.336486 -0.896316 0.288783 + -0.711027 1.67694 -2.87073 0.396841 -0.86886 0.295971 + -0.720272 1.65889 -2.90357 0.518363 -0.781804 0.34653 + -0.712321 1.65017 -2.94006 0.613486 -0.759573 0.216065 + -0.667632 1.72493 -2.75756 0.432372 -0.860979 0.267899 + -0.68558 1.71445 -2.77081 0.232079 -0.886915 0.399401 + -0.743351 1.68614 -2.80264 0.0837186 -0.904358 0.418483 + -0.752385 1.67622 -2.81787 0.157499 -0.854919 0.494275 + -0.761631 1.65818 -2.8507 0.301615 -0.858643 0.414439 + -0.716065 1.71582 -2.75695 -0.0793514 -0.659711 0.747318 + -0.737643 1.69816 -2.77531 -0.0770784 -0.786541 0.612709 + -0.774219 1.69796 -2.79495 -0.531175 -0.531719 0.659642 + -0.783253 1.68804 -2.81018 -0.542748 -0.546194 0.638041 + -0.781818 1.65907 -2.84148 -0.312299 -0.809132 0.497771 + -0.735743 1.76076 -2.74744 -0.500528 -0.249321 0.829042 + -0.737034 1.73069 -2.75591 -0.343014 -0.309937 0.886724 + -0.758612 1.71303 -2.77428 -0.513006 -0.381767 0.768817 + -0.785062 1.75884 -2.78734 -0.785536 -0.170354 0.594906 + -0.768164 1.80399 -2.7582 -0.650416 -0.165031 0.741433 + -0.769455 1.77391 -2.76666 -0.644992 -0.187123 0.740926 + -0.792135 1.83855 -2.77695 -0.776888 -0.126564 0.616787 + -0.805177 1.78506 -2.81554 -0.85547 -0.142984 0.497721 + -0.802457 1.69142 -2.83538 -0.822484 -0.344203 0.452818 + -0.803831 1.90368 -2.77872 -0.843747 -0.114244 0.524443 + -0.82819 1.86377 -2.8299 -0.897452 -0.0935231 0.431085 + -0.841232 1.81029 -2.8685 -0.94383 -0.0815744 0.320205 + -0.822571 1.71764 -2.86359 -0.906432 -0.243485 0.345104 + -0.819798 1.9372 -2.81047 -0.911377 -0.0355782 0.410032 + -0.844157 1.89729 -2.86166 -0.978818 0.0351742 0.201689 + -0.849986 1.82833 -2.91261 -0.999344 -0.00411076 0.0359906 + -0.836928 1.73303 -2.90586 -0.958848 -0.221468 0.177658 + -0.801696 1.99261 -2.7507 -0.90194 -0.118134 0.415389 + -0.827717 1.9709 -2.82736 -0.974883 0.101854 0.198061 + -0.837639 1.93666 -2.89927 -0.983112 0.166995 -0.0748587 + -0.843468 1.8677 -2.95023 -0.957006 0.163848 -0.23936 + -0.845683 1.75107 -2.94998 -0.990866 -0.124945 -0.0507323 + -0.783236 2.07373 -2.69319 -0.907264 -0.114002 0.404816 + -0.809615 2.02631 -2.76759 -0.969992 0.0729852 0.231922 + -0.820122 2.0107 -2.8405 -0.963493 0.266953 0.0204414 + -0.830043 1.97645 -2.91241 -0.939583 0.28446 -0.190437 + -0.82513 1.87171 -2.99403 -0.880289 0.188788 -0.43526 + -0.762063 2.1617 -2.61279 -0.916748 -0.142246 0.373283 + -0.789946 2.09269 -2.7091 -0.973877 0.0676066 0.216778 + -0.786084 2.12532 -2.73327 -0.969274 0.245629 0.0131943 + -0.805753 2.05895 -2.79176 -0.964472 0.262928 0.0257243 + -0.801246 2.05817 -2.875 -0.883436 0.4276 -0.191569 + -0.73924 2.26522 -2.5111 -0.919386 -0.153615 0.362121 + -0.768773 2.18065 -2.6287 -0.980017 0.0452351 0.193705 + -0.766666 2.2036 -2.64979 -0.973657 0.227875 0.00802571 + -0.774881 2.15574 -2.76266 -0.888346 0.424037 -0.176162 + -0.786876 2.10642 -2.82626 -0.87499 0.449723 -0.179282 + -0.726663 2.24773 -2.49406 -0.854989 -0.255992 0.451067 + -0.714466 2.36952 -2.40378 -0.917555 -0.155807 0.36581 + -0.745029 2.28153 -2.5248 -0.981192 0.0368969 0.189472 + -0.742922 2.30448 -2.54589 -0.973479 0.22872 0.00503501 + -0.755463 2.23402 -2.67918 -0.889083 0.417508 -0.187666 + -0.704796 2.35446 -2.39188 -0.851793 -0.2565 0.456789 + -0.689272 2.47895 -2.29452 -0.88547 -0.0613379 0.460631 + -0.720255 2.38584 -2.41748 -0.98056 0.0410558 0.191874 + -0.718676 2.4032 -2.43332 -0.972384 0.232999 0.0134098 + -0.733201 2.33058 -2.57124 -0.889196 0.418412 -0.185099 + -0.666223 2.45027 -2.27264 -0.622171 -0.331825 0.709081 + -0.679602 2.46388 -2.28262 -0.78906 -0.196564 0.58202 + -0.654271 2.5352 -2.24488 -0.455756 0.357844 0.815006 + -0.692919 2.48925 -2.30308 -0.947203 0.126682 0.294547 + -0.69134 2.50661 -2.31892 -0.939614 0.322157 0.115499 + -0.643209 2.43715 -2.26472 -0.356077 -0.448493 0.819795 + -0.640891 2.52159 -2.2349 -0.260414 0.183163 0.947964 + -0.618804 2.5151 -2.23258 0.297855 0.0935705 0.950014 + -0.657918 2.5455 -2.25344 -0.535416 0.559567 0.632625 + -0.621121 2.43066 -2.2624 0.0927458 -0.506198 0.857416 + -0.595973 2.4368 -2.27209 0.659874 -0.359071 0.660026 + -0.60427 2.53197 -2.24989 0.686074 0.447887 0.573324 + -0.581439 2.45367 -2.28939 0.926129 -0.10229 0.363074 + -0.577483 2.4786 -2.31328 0.982456 0.175701 0.0625236 + -0.612769 2.55385 -2.26927 0.579746 0.771434 0.262266 + -0.585982 2.50048 -2.33267 0.907511 0.394451 -0.144336 + -0.600589 2.51935 -2.34722 0.685012 0.64206 -0.344264 + -0.626817 2.56116 -2.27229 0.302716 0.924591 0.231287 + -0.600907 2.41987 -2.4716 0.688193 0.554461 -0.467935 + -0.614638 2.52666 -2.35024 0.424 0.789962 -0.442926 + -0.632574 2.5333 -2.35231 0.268719 0.841433 -0.468808 + -0.640409 2.56396 -2.27254 0.0596477 0.97778 0.200968 + -0.623337 2.43172 -2.47629 0.407308 0.705702 -0.579729 + -0.641273 2.43835 -2.47837 0.25651 0.753121 -0.605815 + -0.646166 2.5361 -2.35256 0.0847524 0.876576 -0.473741 + -0.662438 2.53685 -2.3505 -0.14152 0.88569 -0.442181 + -0.651889 2.56221 -2.26917 -0.387354 0.864684 0.319811 + -0.629155 2.33295 -2.59633 0.403918 0.687019 -0.604033 + -0.652948 2.34175 -2.59907 0.251386 0.733471 -0.631526 + -0.662951 2.44292 -2.47871 0.0652099 0.787272 -0.613149 + -0.679223 2.44367 -2.47664 -0.159763 0.792598 -0.588442 + -0.673919 2.5351 -2.34713 -0.543304 0.784142 -0.299902 + -0.638004 2.23347 -2.71156 0.40011 0.677521 -0.617153 + -0.661796 2.24227 -2.7143 0.249581 0.721971 -0.645343 + -0.686989 2.24749 -2.71481 0.054629 0.756829 -0.651326 + -0.674625 2.34631 -2.59941 0.0535402 0.765986 -0.640624 + -0.642862 2.13981 -2.8172 0.385694 0.674261 -0.629772 + -0.66832 2.15902 -2.80953 0.242971 0.707254 -0.663895 + -0.693513 2.16424 -2.81003 0.132661 0.751706 -0.646017 + -0.72417 2.17647 -2.79772 -0.114863 0.784211 -0.60977 + -0.71035 2.24921 -2.71041 -0.172622 0.764017 -0.621675 + -0.62594 2.04075 -2.91662 0.397854 0.662912 -0.63424 + -0.639089 2.05134 -2.90518 0.132592 0.706807 -0.694869 + -0.664548 2.07055 -2.8975 0.317957 0.664696 -0.676079 + -0.70217 2.11799 -2.87233 0.243338 0.723504 -0.646009 + -0.732827 2.13022 -2.86002 -0.129863 0.763007 -0.633211 + -0.633091 1.98217 -2.98009 0.398518 0.645396 -0.65165 + -0.64624 1.99277 -2.96864 0.10887 0.734336 -0.669999 + -0.680429 2.01413 -2.95621 0.179709 0.67802 -0.712736 + -0.718051 2.06157 -2.93104 0.0714772 0.661859 -0.746213 + -0.611355 1.95708 -2.98045 0.686247 0.487926 -0.539438 + -0.637404 1.9462 -3.00835 0.390239 0.518796 -0.760634 + -0.665356 1.96838 -3.00144 0.167982 0.623371 -0.763669 + -0.699545 1.98975 -2.98901 0.0575373 0.688263 -0.723176 + -0.757578 1.995 -2.9828 -0.113592 0.618749 -0.777333 + -0.615668 1.92111 -3.00871 0.640755 0.393981 -0.658947 + -0.628382 1.87494 -3.04685 0.629016 0.354429 -0.691895 + -0.646766 1.88913 -3.04918 0.31548 0.484313 -0.816035 + -0.674717 1.9113 -3.04227 0.106511 0.542112 -0.833529 + -0.713644 1.91231 -3.04069 -0.0536119 0.528878 -0.847003 + -0.574841 1.84957 -2.99428 0.824434 0.14509 -0.547044 + -0.611383 1.8823 -3.02108 0.746249 0.255239 -0.614789 + -0.62545 1.80917 -3.06735 0.936792 0.0537605 -0.345732 + -0.628602 1.80548 -3.08571 0.778873 0.208287 -0.591586 + -0.646986 1.81966 -3.08803 0.348425 0.41703 -0.839456 + -0.55886 1.83319 -2.95833 0.945288 -0.186222 -0.267866 + -0.579244 1.82987 -3.00346 0.830313 0.0130896 -0.557144 + -0.608451 1.81652 -3.04159 0.812581 0.0343134 -0.581838 + -0.607899 1.78621 -3.03232 0.857571 -0.192391 -0.477029 + -0.626676 1.77042 -3.0709 0.961313 -0.107693 -0.253534 + -0.572194 1.79384 -2.94126 0.894994 -0.406265 -0.184213 + -0.578691 1.79957 -2.99419 0.878506 -0.321653 -0.353223 + -0.610714 1.75622 -3.01849 0.876862 -0.376808 -0.298544 + -0.629491 1.74042 -3.05707 0.936372 -0.288158 -0.200432 + -0.610323 1.74237 -2.99011 0.809745 -0.573259 -0.125249 + -0.636893 1.71667 -3.04421 0.852395 -0.520264 -0.0524109 + -0.641123 1.70815 -3.06481 0.771026 -0.547568 -0.325098 + -0.633721 1.73191 -3.07768 0.839998 -0.379005 -0.388276 + -0.629827 1.76674 -3.08925 0.889746 -0.119215 -0.440614 + -0.647085 1.70548 -3.02662 0.774087 -0.632234 0.0327205 + -0.653828 1.68914 -3.05635 0.674865 -0.680502 -0.285437 + -0.679261 1.69753 -3.08295 0.288505 -0.608058 -0.739615 + -0.666556 1.71654 -3.09141 0.342584 -0.569633 -0.747097 + -0.648761 1.73238 -3.09523 0.525446 -0.498374 -0.689587 + -0.6694 1.6707 -3.04041 0.632742 -0.757309 -0.16162 + -0.701236 1.67604 -3.07083 0.246896 -0.672 -0.698182 + -0.732385 1.72797 -3.10979 -0.219813 -0.267371 -0.938187 + -0.70419 1.74452 -3.12064 -0.0828964 -0.259953 -0.962057 + -0.686395 1.76035 -3.12446 0.0478373 -0.00262665 -0.998852 + -0.73605 1.64668 -3.05466 0.0382262 -0.790154 -0.611715 + -0.766549 1.68541 -3.08471 -0.385052 -0.464277 -0.79761 + -0.75436 1.70648 -3.09767 -0.287688 -0.315132 -0.904393 + -0.755636 1.79727 -3.09326 -0.47889 0.233674 -0.846204 + -0.754643 1.63341 -3.02767 -0.260362 -0.905142 -0.33605 + -0.785142 1.67213 -3.05771 -0.629832 -0.526763 -0.570818 + -0.80043 1.74889 -3.06583 -0.778712 -0.051527 -0.625262 + -0.788241 1.76996 -3.0788 -0.651549 0.0998846 -0.752002 + -0.729827 1.62331 -2.99668 0.236524 -0.960203 -0.148551 + -0.763973 1.63233 -2.97724 -0.466552 -0.881515 -0.0725268 + -0.803181 1.67052 -3.02929 -0.767807 -0.537371 -0.348862 + -0.818469 1.74728 -3.03741 -0.880974 -0.0545623 -0.470009 + -0.739157 1.62223 -2.94625 0.183848 -0.972274 0.144513 + -0.781466 1.64126 -2.93816 -0.550098 -0.835065 -0.0076684 + -0.820674 1.67945 -2.99021 -0.837698 -0.513628 -0.185605 + -0.836807 1.74327 -2.9936 -0.949727 -0.10786 -0.293914 + -0.747108 1.63095 -2.90975 0.264774 -0.925529 0.270724 + -0.767295 1.63184 -2.90053 -0.227959 -0.959113 0.167738 + -0.815193 1.67187 -2.90431 -0.815049 -0.566475 0.121658 + -0.82955 1.68726 -2.94658 -0.883619 -0.468202 0.0022076 + -0.801022 1.66245 -2.86669 -0.738001 -0.621782 0.262185 + -0.804283 1.89025 -3.02002 -0.731289 0.281872 -0.6211 + -0.815445 1.98414 -2.93955 -0.832256 0.392559 -0.391469 + -0.794598 2.00269 -2.96554 -0.595379 0.579553 -0.556455 + -0.771678 1.91756 -3.03448 -0.339907 0.451845 -0.824802 + -0.786647 2.06586 -2.90214 -0.595149 0.568378 -0.568105 + -0.755071 2.06926 -2.91379 -0.285953 0.661055 -0.693713 + -0.764403 2.12682 -2.84837 -0.553939 0.681562 -0.478148 + -0.752407 2.17614 -2.78478 -0.557694 0.691893 -0.458542 + -0.738588 2.24888 -2.69747 -0.570708 0.670019 -0.474729 + -0.716326 2.34544 -2.58953 -0.562853 0.677362 -0.473685 + -0.697987 2.34803 -2.59502 -0.175162 0.768317 -0.615635 + -0.697562 2.44109 -2.47116 -0.580256 0.688482 -0.43508 + -0.708955 2.4293 -2.45867 -0.894523 0.417737 -0.159138 + -0.685311 2.52331 -2.33464 -0.863245 0.503124 -0.0409141 + -0.727441 1.81382 -3.10411 -0.29665 0.377363 -0.877266 + -0.688514 1.81281 -3.10569 0.112141 0.401656 -0.908899 + -0.644867 1.76721 -3.1068 0.547638 -0.0186949 -0.836507 + 0.549014 1.91012 -2.7672 -0.984284 0.12032 0.12926 + 0.582635 1.9028 -2.69995 -0.669006 -0.0734864 0.739615 + 0.591195 1.94736 -2.68493 -0.698662 -0.123012 0.704797 + 0.563942 1.87344 -2.71651 -0.776688 -0.12469 0.617421 + 0.602807 1.84804 -2.70416 -0.311947 -0.272558 0.910165 + 0.6215 1.87741 -2.6876 -0.0889264 -0.375767 0.922438 + 0.6383 1.93884 -2.66579 -0.103685 -0.360115 0.927128 + 0.557574 1.95467 -2.75219 -0.913303 -0.0406652 0.405246 + 0.545204 1.87744 -2.79335 -0.96965 -0.0373939 0.241621 + 0.560132 1.84076 -2.74265 -0.841935 -0.30809 0.442974 + 0.603725 2.00268 -2.66108 -0.672136 -0.324644 0.665462 + 0.576773 2.03351 -2.69323 -0.918948 -0.116325 0.376832 + 0.559228 2.03099 -2.73484 -0.970389 0.146713 0.191889 + 0.540029 1.95215 -2.79381 -0.986709 0.0598402 0.151075 + 0.536207 1.89321 -2.82428 -0.998262 0.00129864 0.0589168 + 0.65083 1.99416 -2.64194 -0.131342 -0.47987 0.867453 + 0.609183 2.09079 -2.58673 -0.652399 -0.501865 0.567897 + 0.582231 2.12162 -2.61887 -0.947589 -0.207469 0.242964 + 0.576987 2.15463 -2.65067 -0.995985 0.0730764 -0.0517066 + 0.570883 2.07068 -2.72723 -0.983129 0.181351 0.0238725 + 0.701491 2.01968 -2.63472 0.305489 -0.515511 0.800578 + 0.69524 2.11143 -2.56373 0.354199 -0.584732 0.729816 + 0.644579 2.08591 -2.57095 -0.098464 -0.645845 0.757093 + 0.60238 2.20209 -2.48161 -0.653687 -0.534556 0.53567 + 0.715485 1.91742 -2.69586 0.341287 -0.418115 0.841845 + 0.759537 1.93105 -2.71226 0.616324 -0.306288 0.725488 + 0.745543 2.03331 -2.65112 0.6294 -0.378401 0.678726 + 0.727539 2.12957 -2.57257 0.650472 -0.43314 0.623921 + 0.678501 2.20954 -2.46987 0.379118 -0.603495 0.701472 + 0.698685 1.85599 -2.71767 0.237737 -0.204068 0.949651 + 0.648715 1.7972 -2.70334 0.0146635 -0.118088 0.992895 + 0.681915 1.76474 -2.71539 0.284735 -0.261406 0.922276 + 0.731885 1.82353 -2.72971 0.407925 -0.172844 0.896505 + 0.593886 1.81248 -2.71632 -0.636707 -0.339494 0.69235 + 0.639794 1.76164 -2.7155 -0.437006 -0.565265 0.699643 + 0.665852 1.74009 -2.72235 -0.13692 -0.695432 0.705427 + 0.71418 1.75095 -2.73674 0.426291 -0.320638 0.845853 + 0.584623 1.81375 -2.72933 -0.737073 -0.444665 0.508918 + 0.641574 1.74647 -2.75072 -0.598462 -0.737459 0.313046 + 0.667632 1.72493 -2.75756 -0.378946 -0.860555 0.34036 + 0.698117 1.7263 -2.7437 0.100129 -0.720514 0.686173 + 0.602743 1.76674 -2.76753 -0.641636 -0.673453 0.367103 + 0.632311 1.74775 -2.76373 -0.561822 -0.751114 0.346674 + 0.655672 1.71257 -2.81656 -0.47005 -0.85029 0.236769 + 0.68558 1.71445 -2.77081 -0.266447 -0.888021 0.374733 + 0.578252 1.79374 -2.78086 -0.701199 -0.630529 0.332796 + 0.604816 1.74469 -2.83784 -0.611485 -0.767432 0.192702 + 0.626104 1.73156 -2.82037 -0.58202 -0.783918 0.216158 + 0.54672 1.80842 -2.80386 -0.851015 -0.441567 0.284241 + 0.573284 1.75936 -2.86084 -0.673664 -0.729542 0.118091 + 0.630071 1.71904 -2.9497 -0.768607 -0.631468 -0.102424 + 0.634648 1.70481 -2.92819 -0.762872 -0.646528 -0.00526637 + 0.655936 1.69168 -2.91072 -0.534027 -0.828216 0.169922 + 0.537723 1.8242 -2.8348 -0.982672 -0.182463 -0.0325847 + 0.563727 1.77151 -2.88367 -0.866779 -0.471762 -0.161659 + 0.620515 1.73118 -2.97252 -0.703479 -0.70778 -0.0645406 + 0.647085 1.70548 -3.02662 -0.77346 -0.632644 0.0389986 + 0.662657 1.68703 -3.01069 -0.783826 -0.620231 -0.0305102 + 0.545798 1.83268 -2.864 -0.9674 -0.121431 -0.222243 + 0.571803 1.77999 -2.91288 -0.920957 -0.288673 -0.261737 + 0.610323 1.74237 -2.99011 -0.805913 -0.573224 -0.148047 + 0.636893 1.71667 -3.04421 -0.863633 -0.50186 -0.0476784 + 0.538602 1.89646 -2.8451 -0.989077 0.042865 -0.141026 + 0.545167 1.89124 -2.8865 -0.976249 0.0934415 -0.195463 + 0.552363 1.82746 -2.9054 -0.955981 -0.270213 -0.114393 + 0.572194 1.79384 -2.94126 -0.894126 -0.406437 -0.188011 + 0.542424 1.9554 -2.81462 -0.952158 0.243726 -0.18437 + 0.55408 1.99509 -2.80701 -0.930638 0.316891 -0.18301 + 0.562318 1.98001 -2.854 -0.88973 0.335911 -0.309103 + 0.554558 1.92862 -2.88943 -0.917363 0.300563 -0.260974 + 0.554457 1.85289 -2.94916 -0.961892 0.0318981 -0.271561 + 0.58665 2.11092 -2.76336 -0.934307 0.28971 -0.207698 + 0.594889 2.09583 -2.81035 -0.819504 0.428236 -0.380825 + 0.603837 2.01035 -2.9152 -0.781359 0.446163 -0.436367 + 0.596077 1.95895 -2.95063 -0.817915 0.401187 -0.412389 + 0.563849 1.89026 -2.95209 -0.880828 0.289969 -0.374245 + 0.592754 2.19486 -2.6868 -0.913407 0.300285 -0.274802 + 0.612134 2.21989 -2.70614 -0.678529 0.540584 -0.497361 + 0.616992 2.12624 -2.81177 -0.597247 0.583082 -0.550738 + 0.62594 2.04075 -2.91662 -0.393634 0.675562 -0.623432 + 0.611355 1.95708 -2.98045 -0.686796 0.451121 -0.569913 + 0.573893 2.2616 -2.54119 -0.996181 0.0533981 -0.0690851 + 0.587346 2.29606 -2.5723 -0.914569 0.287738 -0.284201 + 0.606726 2.32109 -2.59164 -0.683334 0.538572 -0.492945 + 0.638004 2.23347 -2.71156 -0.400008 0.677465 -0.61728 + 0.642862 2.13981 -2.8172 -0.390747 0.666457 -0.634943 + 0.579138 2.22859 -2.5094 -0.945474 -0.240265 0.219892 + 0.576804 2.3416 -2.40205 -0.947163 -0.219598 0.233795 + 0.572847 2.36653 -2.42594 -0.996664 0.066203 -0.0477373 + 0.5863 2.40099 -2.45705 -0.913605 0.306404 -0.267288 + 0.600907 2.41987 -2.4716 -0.688218 0.554409 -0.46796 + 0.600047 2.3151 -2.37426 -0.658353 -0.512858 0.550951 + 0.595973 2.4368 -2.27209 -0.659755 -0.35898 0.660195 + 0.581439 2.45367 -2.28939 -0.926143 -0.102081 0.363096 + 0.577483 2.4786 -2.31328 -0.98245 0.175707 0.0625927 + 0.637776 2.19722 -2.46583 -0.0590804 -0.68011 0.730725 + 0.625194 2.30896 -2.36457 -0.0842026 -0.658642 0.74773 + 0.621121 2.43066 -2.2624 -0.0928065 -0.506128 0.857451 + 0.618804 2.5151 -2.23258 -0.297719 0.0939191 0.950022 + 0.60427 2.53197 -2.24989 -0.682101 0.452262 0.574628 + 0.66592 2.32128 -2.36861 0.399618 -0.577219 0.712126 + 0.643209 2.43715 -2.26472 0.356109 -0.44842 0.819821 + 0.640891 2.52159 -2.2349 0.258997 0.189058 0.947195 + 0.612769 2.55385 -2.26927 -0.575663 0.772802 0.267189 + 0.585982 2.50048 -2.33267 -0.907487 0.394512 -0.144316 + 0.7108 2.22767 -2.47871 0.683211 -0.435451 0.586178 + 0.688934 2.3344 -2.37654 0.690992 -0.414727 0.592057 + 0.666223 2.45027 -2.27264 0.618234 -0.329916 0.713402 + 0.654271 2.5352 -2.24488 0.44901 0.363471 0.816259 + 0.726663 2.24773 -2.49406 0.85417 -0.260787 0.449872 + 0.704796 2.35446 -2.39188 0.853745 -0.257361 0.452642 + 0.679602 2.46388 -2.28262 0.78958 -0.191073 0.583142 + 0.689272 2.47895 -2.29452 0.885445 -0.0613291 0.46068 + 0.657918 2.5455 -2.25344 0.530299 0.561257 0.635432 + 0.749485 2.14421 -2.59576 0.833167 -0.263514 0.486202 + 0.762063 2.1617 -2.61279 0.916813 -0.141575 0.373377 + 0.73924 2.26522 -2.5111 0.919297 -0.153564 0.362369 + 0.714466 2.36952 -2.40378 0.91753 -0.156153 0.365726 + 0.692919 2.48925 -2.30308 0.947193 0.126733 0.294556 + 0.767489 2.04796 -2.67431 0.822472 -0.223583 0.523021 + 0.783236 2.07373 -2.69319 0.907812 -0.114247 0.403515 + 0.768773 2.18065 -2.6287 0.980203 0.0451205 0.192783 + 0.745029 2.28153 -2.5248 0.981188 0.0369572 0.189486 + 0.720255 2.38584 -2.41748 0.980578 0.0410447 0.191788 + 0.785949 1.96684 -2.73182 0.809728 -0.195122 0.553414 + 0.801696 1.99261 -2.7507 0.902906 -0.0985288 0.418394 + 0.789946 2.09269 -2.7091 0.973876 0.0675064 0.216816 + 0.786084 2.12532 -2.73327 0.969087 0.245989 0.0189807 + 0.766666 2.2036 -2.64979 0.973806 0.227241 0.00792497 + 0.777419 1.86789 -2.75917 0.7657 -0.163234 0.62214 + 0.803831 1.90368 -2.77872 0.839231 -0.163904 0.518485 + 0.819798 1.9372 -2.81047 0.941424 -0.0259053 0.33623 + 0.809615 2.02631 -2.76759 0.968965 0.072907 0.2362 + 0.805753 2.05895 -2.79176 0.964401 0.263179 0.0258432 + 0.753448 1.83334 -2.74042 0.612595 -0.195606 0.765811 + 0.792135 1.83855 -2.77695 0.787746 -0.0899971 0.609391 + 0.82819 1.86377 -2.8299 0.877799 -0.0868702 0.471087 + 0.844157 1.89729 -2.86166 0.971741 0.107343 0.21023 + 0.735743 1.76076 -2.74744 0.525423 -0.207513 0.825148 + 0.768164 1.80399 -2.7582 0.676137 -0.174936 0.715706 + 0.805177 1.78506 -2.81554 0.850898 -0.147504 0.504197 + 0.841232 1.81029 -2.8685 0.931471 -0.147372 0.33263 + 0.737034 1.73069 -2.75591 0.424886 -0.34653 0.836295 + 0.769455 1.77391 -2.76666 0.680699 -0.161788 0.714474 + 0.785062 1.75884 -2.78734 0.789779 -0.118538 0.601829 + 0.822571 1.71764 -2.86359 0.923573 -0.185293 0.335677 + 0.836928 1.73303 -2.90586 0.955423 -0.207571 0.209954 + 0.716065 1.71582 -2.75695 0.0695719 -0.699572 0.711167 + 0.737643 1.69816 -2.77531 0.140438 -0.800231 0.583016 + 0.758612 1.71303 -2.77428 0.504171 -0.442634 0.741543 + 0.774219 1.69796 -2.79495 0.499399 -0.534125 0.682137 + 0.802457 1.69142 -2.83538 0.819097 -0.342598 0.460116 + 0.691288 1.70242 -2.79813 -0.32445 -0.901512 0.28637 + 0.743351 1.68614 -2.80264 -0.0654722 -0.888995 0.453211 + 0.752385 1.67622 -2.81787 -0.157498 -0.854917 0.494279 + 0.783253 1.68804 -2.81018 0.550407 -0.533286 0.642385 + 0.711027 1.67694 -2.87073 -0.403975 -0.871298 0.278647 + 0.720272 1.65889 -2.90357 -0.547251 -0.764205 0.341331 + 0.761631 1.65818 -2.8507 -0.301597 -0.85865 0.414438 + 0.781818 1.65907 -2.84148 0.312298 -0.809132 0.49777 + 0.801022 1.66245 -2.86669 0.728979 -0.632091 0.262775 + 0.675411 1.68708 -2.88916 -0.408762 -0.884918 0.223233 + 0.696884 1.66102 -2.94518 -0.519993 -0.821012 0.235681 + 0.712321 1.65017 -2.94006 -0.632162 -0.737903 0.236368 + 0.747108 1.63095 -2.90975 -0.305723 -0.909531 0.28158 + 0.767295 1.63184 -2.90053 0.239336 -0.946983 0.214342 + 0.67741 1.66562 -2.96674 -0.582521 -0.80071 0.139761 + 0.71439 1.63416 -3.0018 -0.520992 -0.851917 -0.0529496 + 0.729827 1.62331 -2.99668 -0.225954 -0.969403 -0.0959314 + 0.739157 1.62223 -2.94625 -0.150652 -0.976093 0.156674 + 0.763973 1.63233 -2.97724 0.468076 -0.879589 -0.0850188 + 0.667234 1.67281 -2.98919 -0.738943 -0.668196 -0.0864664 + 0.704214 1.64134 -3.02425 -0.434164 -0.867534 -0.242663 + 0.73605 1.64668 -3.05466 -0.0408443 -0.788118 -0.614167 + 0.754643 1.63341 -3.02767 0.346965 -0.87892 -0.327283 + 0.6694 1.6707 -3.04041 -0.633511 -0.754661 -0.170739 + 0.701236 1.67604 -3.07083 -0.254173 -0.670281 -0.697223 + 0.75436 1.70648 -3.09767 0.287692 -0.323204 -0.901539 + 0.766549 1.68541 -3.08471 0.384265 -0.464444 -0.797893 + 0.785142 1.67213 -3.05771 0.634145 -0.548943 -0.544538 + 0.653828 1.68914 -3.05635 -0.659393 -0.693103 -0.291219 + 0.679261 1.69753 -3.08295 -0.293756 -0.630656 -0.718318 + 0.732385 1.72797 -3.10979 0.219546 -0.268859 -0.937824 + 0.788241 1.76996 -3.0788 0.658577 0.10265 -0.745479 + 0.80043 1.74889 -3.06583 0.779611 -0.0495978 -0.624297 + 0.641123 1.70815 -3.06481 -0.770568 -0.551637 -0.319251 + 0.666556 1.71654 -3.09141 -0.350205 -0.56881 -0.744185 + 0.70419 1.74452 -3.12064 0.0900232 -0.266866 -0.95952 + 0.727441 1.81382 -3.10411 0.255883 0.342015 -0.904184 + 0.755636 1.79727 -3.09326 0.492668 0.197896 -0.847417 + 0.629491 1.74042 -3.05707 -0.936978 -0.289343 -0.195839 + 0.633721 1.73191 -3.07768 -0.86158 -0.346916 -0.37058 + 0.648761 1.73238 -3.09523 -0.517603 -0.456057 -0.723946 + 0.686395 1.76035 -3.12446 -0.126139 -0.0451415 -0.990985 + 0.610714 1.75622 -3.01849 -0.892413 -0.349026 -0.285971 + 0.626676 1.77042 -3.0709 -0.958337 -0.117576 -0.260318 + 0.629827 1.76674 -3.08925 -0.878585 -0.0664066 -0.472946 + 0.644867 1.76721 -3.1068 -0.57333 0.0117399 -0.81924 + 0.607899 1.78621 -3.03232 -0.885647 -0.220565 -0.408632 + 0.608451 1.81652 -3.04159 -0.820529 0.0580835 -0.568646 + 0.62545 1.80917 -3.06735 -0.925097 0.0770647 -0.371829 + 0.628602 1.80548 -3.08571 -0.71194 0.141799 -0.687775 + 0.646986 1.81966 -3.08803 -0.368301 0.385008 -0.84624 + 0.578691 1.79957 -2.99419 -0.810243 -0.480429 -0.3357 + 0.579244 1.82987 -3.00346 -0.830311 0.0130861 -0.557146 + 0.611383 1.8823 -3.02108 -0.746254 0.255242 -0.614782 + 0.628382 1.87494 -3.04685 -0.628016 0.358793 -0.690553 + 0.646766 1.88913 -3.04918 -0.337487 0.493804 -0.801411 + 0.55886 1.83319 -2.95833 -0.945288 -0.186223 -0.267866 + 0.574841 1.84957 -2.99428 -0.822734 0.141529 -0.550526 + 0.579126 1.88838 -2.98191 -0.792407 0.308772 -0.526072 + 0.615668 1.92111 -3.00871 -0.635237 0.39336 -0.664637 + 0.633091 1.98217 -2.98009 -0.362506 0.645152 -0.672584 + 0.637404 1.9462 -3.00835 -0.390901 0.516721 -0.761706 + 0.674717 1.9113 -3.04227 -0.100272 0.552101 -0.827726 + 0.688514 1.81281 -3.10569 -0.129446 0.42285 -0.896907 + 0.64624 1.99277 -2.96864 -0.106922 0.737932 -0.666351 + 0.665356 1.96838 -3.00144 -0.156582 0.619203 -0.76946 + 0.713644 1.91231 -3.04069 0.0249015 0.554894 -0.831549 + 0.771678 1.91756 -3.03448 0.394279 0.500449 -0.770776 + 0.639089 2.05134 -2.90518 -0.176378 0.719694 -0.671514 + 0.680429 2.01413 -2.95621 -0.274626 0.678414 -0.681421 + 0.699545 1.98975 -2.98901 -0.0893502 0.632676 -0.769244 + 0.757578 1.995 -2.9828 0.176583 0.578985 -0.795986 + 0.804283 1.89025 -3.02002 0.724997 0.299677 -0.620139 + 0.66832 2.15902 -2.80953 -0.265073 0.720217 -0.641111 + 0.664548 2.07055 -2.8975 -0.321556 0.655354 -0.683456 + 0.718051 2.06157 -2.93104 -0.0644764 0.685328 -0.725374 + 0.755071 2.06926 -2.91379 0.232986 0.696261 -0.678925 + 0.794598 2.00269 -2.96554 0.567044 0.521304 -0.637733 + 0.661796 2.24227 -2.7143 -0.249679 0.721832 -0.64546 + 0.693513 2.16424 -2.81003 -0.115482 0.772102 -0.624918 + 0.70217 2.11799 -2.87233 -0.180041 0.710531 -0.680244 + 0.732827 2.13022 -2.86002 0.126589 0.755794 -0.642457 + 0.786647 2.06586 -2.90214 0.613934 0.613305 -0.496933 + 0.652948 2.34175 -2.59907 -0.251377 0.733465 -0.631537 + 0.674625 2.34631 -2.59941 -0.0533376 0.766246 -0.640329 + 0.686989 2.24749 -2.71481 -0.0489092 0.75303 -0.656166 + 0.71035 2.24921 -2.71041 0.169442 0.760574 -0.626751 + 0.72417 2.17647 -2.79772 0.11058 0.786538 -0.607561 + 0.629155 2.33295 -2.59633 -0.403955 0.686956 -0.604079 + 0.641273 2.43835 -2.47837 -0.256526 0.753098 -0.605836 + 0.662951 2.44292 -2.47871 -0.0646949 0.786927 -0.613645 + 0.697987 2.34803 -2.59502 0.174809 0.768606 -0.615374 + 0.623337 2.43172 -2.47629 -0.407274 0.705687 -0.57977 + 0.632574 2.5333 -2.35231 -0.268762 0.84145 -0.468751 + 0.646166 2.5361 -2.35256 -0.0847157 0.876607 -0.473691 + 0.662438 2.53685 -2.3505 0.141376 0.885775 -0.442058 + 0.679223 2.44367 -2.47664 0.159384 0.792206 -0.589072 + 0.600589 2.51935 -2.34722 -0.685051 0.642073 -0.344162 + 0.614638 2.52666 -2.35024 -0.42396 0.790017 -0.442867 + 0.626817 2.56116 -2.27229 -0.287078 0.912462 0.291545 + 0.640409 2.56396 -2.27254 -0.0666836 0.972072 0.225009 + 0.651889 2.56221 -2.26917 0.380173 0.865309 0.326663 + 0.673919 2.5351 -2.34713 0.543364 0.784178 -0.299702 + 0.697562 2.44109 -2.47116 0.581835 0.686478 -0.436137 + 0.716326 2.34544 -2.58953 0.56339 0.677932 -0.472228 + 0.738588 2.24888 -2.69747 0.571243 0.669361 -0.475013 + 0.69134 2.50661 -2.31892 0.93955 0.322188 0.11593 + 0.685311 2.52331 -2.33464 0.863028 0.503507 -0.040793 + 0.708955 2.4293 -2.45867 0.894238 0.417316 -0.16182 + 0.733201 2.33058 -2.57124 0.888569 0.419915 -0.184707 + 0.718676 2.4032 -2.43332 0.97246 0.232687 0.0133409 + 0.742922 2.30448 -2.54589 0.973484 0.228702 0.00487676 + 0.755463 2.23402 -2.67918 0.889004 0.417398 -0.188284 + 0.752407 2.17614 -2.78478 0.557229 0.691422 -0.459816 + 0.774881 2.15574 -2.76266 0.886149 0.428971 -0.17528 + 0.764403 2.12682 -2.84837 0.553754 0.681939 -0.477824 + 0.786876 2.10642 -2.82626 0.873886 0.449182 -0.185898 + 0.801246 2.05817 -2.875 0.881539 0.431406 -0.191777 + 0.815445 1.98414 -2.93955 0.865807 0.333068 -0.373422 + 0.82513 1.87171 -2.99403 0.87668 0.18386 -0.444553 + 0.820122 2.0107 -2.8405 0.963403 0.267659 0.0146105 + 0.830043 1.97645 -2.91241 0.942145 0.221111 -0.251937 + 0.837639 1.93666 -2.89927 0.981306 0.183179 -0.0590205 + 0.843468 1.8677 -2.95023 0.963375 0.135425 -0.231447 + 0.818469 1.74728 -3.03741 0.879163 -0.0480265 -0.474094 + 0.827717 1.9709 -2.82736 0.983188 0.0436214 0.177307 + 0.849986 1.82833 -2.91261 0.999864 -0.0122529 0.0110046 + 0.836807 1.74327 -2.9936 0.952236 -0.101471 -0.28801 + 0.845683 1.75107 -2.94998 0.99173 -0.115351 -0.0562623 + 0.82955 1.68726 -2.94658 0.888007 -0.45982 0.00279802 + 0.820674 1.67945 -2.99021 0.836294 -0.517847 -0.180129 + 0.803181 1.67052 -3.02929 0.726909 -0.581746 -0.364932 + 0.815193 1.67187 -2.90431 0.815013 -0.566879 0.120007 + 0.781466 1.64126 -2.93816 0.600422 -0.799324 -0.0239625 +} +TriangleList +{ + 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 88 + 92 93 94 + 95 96 94 + 97 98 99 + 100 101 102 + 103 104 105 + 3 106 107 + 108 109 110 + 111 112 113 + 114 115 116 + 117 118 119 + 120 21 121 + 122 123 124 + 125 126 127 + 128 129 130 + 131 132 133 + 134 135 136 + 137 138 139 + 140 97 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 30 + 246 247 248 + 249 250 251 + 252 253 254 + 255 256 257 + 258 259 260 + 259 258 261 + 261 262 259 + 262 261 263 + 262 263 264 + 264 265 262 + 265 264 266 + 267 268 269 + 269 268 270 + 270 271 269 + 269 271 272 + 273 269 272 + 274 269 273 + 270 268 275 + 275 276 270 + 277 270 276 + 270 277 271 + 271 277 278 + 278 279 271 + 271 279 272 + 280 275 268 + 225 275 280 + 268 281 280 + 282 278 277 + 283 278 282 + 278 283 279 + 279 283 284 + 279 284 272 + 282 285 283 + 286 283 285 + 283 286 284 + 285 282 287 + 287 288 285 + 285 288 289 + 289 290 285 + 285 290 286 + 287 282 291 + 291 292 287 + 293 291 282 + 294 289 288 + 288 295 294 + 296 294 295 + 295 297 296 + 298 296 297 + 299 296 298 + 296 299 300 + 301 295 288 + 295 301 302 + 302 297 295 + 297 302 303 + 303 304 297 + 297 304 298 + 288 287 301 + 305 301 287 + 302 301 305 + 305 306 302 + 302 306 307 + 307 303 302 + 308 303 307 + 304 303 308 + 309 305 287 + 310 305 309 + 305 310 306 + 306 310 311 + 311 307 306 + 307 311 312 + 312 313 307 + 307 313 308 + 314 309 287 + 315 309 314 + 309 315 316 + 309 316 310 + 311 310 316 + 317 311 316 + 312 311 317 + 287 318 314 + 319 314 318 + 320 314 319 + 314 320 315 + 315 320 321 + 321 322 315 + 316 315 322 + 322 323 316 + 316 323 317 + 318 324 319 + 325 319 324 + 326 319 325 + 319 326 320 + 320 326 327 + 327 321 320 + 328 321 327 + 321 328 329 + 329 322 321 + 324 330 325 + 331 325 330 + 332 325 331 + 325 332 326 + 327 326 332 + 332 333 327 + 334 327 333 + 327 334 328 + 330 335 331 + 336 331 335 + 337 331 336 + 331 337 332 + 332 337 338 + 338 333 332 + 339 333 338 + 336 340 337 + 338 337 340 + 340 336 226 + 333 341 334 + 342 334 341 + 328 334 342 + 342 343 328 + 328 343 344 + 344 329 328 + 345 329 344 + 322 329 345 + 345 323 322 + 346 343 342 + 343 346 347 + 347 344 343 + 344 347 348 + 348 349 344 + 344 349 345 + 342 350 346 + 346 350 351 + 351 352 346 + 346 352 353 + 353 347 346 + 348 347 353 + 350 342 354 + 354 355 350 + 350 355 356 + 356 351 350 + 357 351 356 + 352 351 357 + 358 354 342 + 359 354 358 + 355 354 359 + 359 360 355 + 355 360 361 + 361 356 355 + 356 361 362 + 356 362 357 + 358 363 359 + 359 363 364 + 364 365 359 + 360 359 365 + 365 366 360 + 361 360 366 + 366 367 361 + 362 361 367 + 367 368 362 + 362 368 369 + 370 364 363 + 363 371 370 + 340 370 371 + 371 363 372 + 373 374 375 + 374 373 376 + 376 377 374 + 374 377 378 + 373 379 376 + 376 379 380 + 381 376 380 + 379 373 382 + 383 379 382 + 380 379 384 + 385 377 376 + 386 387 388 + 388 387 389 + 389 390 388 + 388 390 391 + 389 387 392 + 392 393 389 + 393 394 389 + 389 394 390 + 390 394 395 + 395 396 390 + 390 396 397 + 387 398 392 + 399 392 398 + 399 393 392 + 393 399 400 + 400 401 393 + 394 393 401 + 402 394 401 + 398 387 403 + 404 398 403 + 405 398 404 + 398 405 399 + 399 405 406 + 406 400 399 + 400 406 407 + 408 400 407 + 400 408 401 + 408 409 401 + 401 409 402 + 409 410 402 + 404 411 405 + 405 411 412 + 412 406 405 + 411 404 413 + 404 414 413 + 414 415 413 + 413 415 416 + 416 417 413 + 413 417 418 + 419 414 404 + 415 414 419 + 419 420 415 + 421 419 404 + 422 421 404 + 423 417 416 + 416 424 423 + 423 424 425 + 425 426 423 + 425 427 426 + 427 425 428 + 428 429 427 + 424 416 430 + 430 431 424 + 425 424 431 + 431 432 425 + 432 428 425 + 433 430 416 + 433 434 430 + 434 435 430 + 431 430 435 + 431 435 436 + 436 437 431 + 438 437 436 + 433 439 434 + 434 439 440 + 440 441 434 + 434 441 442 + 435 434 442 + 439 433 443 + 443 444 439 + 439 444 445 + 440 439 445 + 445 446 440 + 447 440 446 + 440 447 441 + 441 447 448 + 448 449 441 + 441 449 442 + 444 419 445 + 419 450 445 + 445 450 451 + 445 451 452 + 452 446 445 + 453 446 452 + 446 453 447 + 448 447 453 + 454 419 444 + 452 451 455 + 451 450 456 + 456 388 451 + 451 388 457 + 428 432 458 + 459 428 458 + 428 459 460 + 460 429 428 + 429 460 461 + 460 462 461 + 462 460 463 + 460 459 464 + 464 463 460 + 465 463 464 + 464 466 465 + 464 459 467 + 416 415 468 + 416 468 469 + 408 407 470 + 471 470 407 + 470 471 472 + 472 473 470 + 474 470 473 + 475 474 473 + 474 475 476 + 407 477 471 + 471 477 478 + 471 478 479 + 472 471 479 + 477 407 480 + 478 481 479 + 395 482 396 + 396 482 380 + 380 483 396 + 484 485 486 + 485 484 487 + 487 488 485 + 489 488 487 + 489 487 490 + 490 224 489 + 276 224 490 + 224 276 275 + 275 491 224 + 490 487 492 + 277 490 492 + 276 490 277 + 493 494 495 + 496 493 495 + 497 496 495 + 498 496 497 + 496 498 499 + 499 500 496 + 501 496 500 + 502 497 495 + 497 502 503 + 498 497 503 + 499 498 503 + 503 504 499 + 505 499 504 + 500 499 505 + 500 505 506 + 506 507 500 + 500 507 508 + 509 503 502 + 503 509 510 + 510 504 503 + 504 510 511 + 504 511 505 + 502 512 509 + 509 512 466 + 512 513 466 + 514 515 364 + 364 515 516 + 516 365 364 + 366 365 516 + 516 517 366 + 366 517 518 + 518 367 366 + 516 515 519 + 519 520 516 + 517 516 520 + 520 521 517 + 518 517 521 + 521 522 518 + 523 518 522 + 367 518 523 + 523 368 367 + 524 519 515 + 519 524 525 + 525 526 519 + 519 526 527 + 527 520 519 + 521 520 527 + 515 528 524 + 529 524 528 + 525 524 529 + 529 530 525 + 531 525 530 + 526 525 531 + 531 532 526 + 526 532 533 + 527 526 533 + 528 534 529 + 535 529 534 + 529 535 536 + 536 530 529 + 530 536 537 + 537 538 530 + 530 538 531 + 539 531 538 + 532 531 539 + 534 540 535 + 540 534 340 + 340 534 541 + 541 179 340 + 542 543 544 + 544 545 542 + 542 545 546 + 546 547 542 + 548 542 547 + 549 542 548 + 548 308 549 + 545 544 550 + 550 551 545 + 546 545 551 + 551 552 546 + 553 546 552 + 553 547 546 + 550 544 554 + 554 555 550 + 556 550 555 + 550 556 557 + 557 551 550 + 551 557 558 + 558 552 551 + 559 554 544 + 559 560 554 + 554 560 561 + 561 555 554 + 555 561 562 + 562 563 555 + 555 563 556 + 544 564 559 + 308 548 304 + 304 548 565 + 565 298 304 + 566 298 565 + 298 566 299 + 567 299 566 + 568 299 567 + 547 565 548 + 569 565 547 + 565 569 566 + 566 569 570 + 570 571 566 + 566 571 567 + 572 567 571 + 573 567 572 + 567 573 568 + 568 573 574 + 547 553 569 + 570 569 553 + 575 570 553 + 576 570 575 + 570 576 577 + 577 571 570 + 571 577 572 + 553 578 575 + 579 575 578 + 575 579 580 + 575 580 576 + 581 576 580 + 577 576 581 + 581 582 577 + 572 577 582 + 552 578 553 + 558 578 552 + 578 558 579 + 579 558 583 + 584 579 583 + 585 579 584 + 579 585 580 + 580 585 586 + 586 587 580 + 580 587 581 + 558 557 583 + 588 583 557 + 583 588 589 + 583 589 590 + 590 591 583 + 583 591 584 + 557 556 588 + 592 588 556 + 589 588 592 + 592 593 589 + 589 593 594 + 590 589 594 + 594 595 590 + 596 590 595 + 591 590 596 + 556 563 592 + 597 592 563 + 592 597 593 + 593 597 598 + 598 594 593 + 594 598 599 + 594 599 600 + 600 595 594 + 563 562 597 + 598 597 562 + 562 601 598 + 595 600 96 + 96 602 595 + 595 602 596 + 603 596 602 + 591 596 603 + 603 584 591 + 604 584 603 + 584 604 585 + 602 96 140 + 140 605 602 + 602 605 603 + 606 603 605 + 603 606 604 + 604 606 607 + 607 608 604 + 585 604 608 + 608 586 585 + 605 140 609 + 609 610 605 + 605 610 606 + 607 606 610 + 610 611 607 + 612 607 611 + 607 612 613 + 613 608 607 + 609 140 614 + 614 615 609 + 616 609 615 + 610 609 616 + 616 611 610 + 611 616 617 + 617 618 611 + 611 618 612 + 614 140 619 + 620 621 622 + 621 620 623 + 623 228 621 + 228 623 624 + 625 623 620 + 626 627 228 + 228 627 536 + 536 535 228 + 228 535 628 + 536 627 629 + 629 537 536 + 630 537 629 + 538 537 630 + 630 631 538 + 538 631 539 + 632 629 627 + 629 632 633 + 627 624 632 + 632 624 634 + 634 635 632 + 633 632 635 + 636 634 624 + 637 634 636 + 634 637 638 + 638 635 634 + 635 638 639 + 639 640 635 + 635 640 633 + 624 623 636 + 641 636 623 + 642 636 641 + 636 642 637 + 637 642 643 + 643 644 637 + 637 644 645 + 645 638 637 + 639 638 645 + 646 641 623 + 647 641 646 + 647 648 641 + 641 648 642 + 643 642 648 + 649 643 648 + 650 643 649 + 644 643 650 + 274 646 623 + 273 646 274 + 651 646 273 + 646 651 647 + 651 652 647 + 652 653 647 + 648 647 653 + 653 654 648 + 648 654 655 + 655 649 648 + 651 273 656 + 656 652 651 + 657 652 656 + 652 657 658 + 658 659 652 + 656 273 272 + 660 656 272 + 657 656 660 + 660 661 657 + 657 661 658 + 661 662 658 + 654 658 662 + 658 654 653 + 663 660 272 + 664 660 663 + 664 661 660 + 662 661 664 + 665 662 664 + 662 665 666 + 662 666 654 + 667 663 272 + 668 663 667 + 668 669 663 + 663 669 664 + 664 669 665 + 669 670 665 + 671 665 670 + 272 672 667 + 673 667 672 + 673 674 667 + 667 674 668 + 668 674 675 + 675 676 668 + 676 677 668 + 678 672 272 + 678 679 672 + 672 679 673 + 272 680 678 + 681 678 680 + 678 681 682 + 679 678 682 + 673 679 682 + 574 680 272 + 680 574 573 + 573 683 680 + 680 683 684 + 684 681 680 + 685 681 684 + 682 681 685 + 574 272 284 + 284 686 574 + 574 686 687 + 687 688 574 + 665 689 666 + 572 683 573 + 683 572 690 + 690 684 683 + 684 690 691 + 691 692 684 + 684 692 685 + 693 685 692 + 682 685 693 + 693 694 682 + 682 694 673 + 582 690 572 + 691 690 582 + 582 695 691 + 691 695 696 + 696 697 691 + 692 691 697 + 697 698 692 + 692 698 693 + 695 582 581 + 581 699 695 + 695 699 700 + 700 696 695 + 701 696 700 + 696 701 702 + 702 697 696 + 698 697 702 + 699 581 587 + 587 703 699 + 700 699 703 + 703 704 700 + 705 700 704 + 700 705 701 + 701 705 706 + 706 707 701 + 702 701 707 + 708 703 587 + 703 708 709 + 709 704 703 + 704 709 710 + 710 711 704 + 704 711 705 + 706 705 711 + 587 586 708 + 708 586 608 + 608 613 708 + 708 613 712 + 712 709 708 + 710 709 712 + 712 713 710 + 710 713 714 + 714 715 710 + 711 710 715 + 716 712 613 + 713 712 716 + 716 717 713 + 713 717 718 + 718 714 713 + 719 714 718 + 714 719 720 + 720 715 714 + 613 612 716 + 716 612 618 + 618 721 716 + 717 716 721 + 721 722 717 + 717 722 723 + 723 718 717 + 719 718 723 + 723 724 719 + 720 719 724 + 725 721 618 + 721 725 726 + 726 722 721 + 722 726 727 + 727 728 722 + 722 728 723 + 618 617 725 + 725 617 729 + 729 730 725 + 726 725 730 + 730 731 726 + 727 726 731 + 731 732 727 + 733 727 732 + 728 727 733 + 734 729 617 + 735 729 734 + 729 735 736 + 736 730 729 + 730 736 737 + 737 731 730 + 731 737 738 + 738 732 731 + 617 616 734 + 615 734 616 + 739 734 615 + 734 739 735 + 735 739 740 + 740 741 735 + 735 741 742 + 742 736 735 + 737 736 742 + 615 743 739 + 740 739 743 + 743 744 740 + 745 740 744 + 741 740 745 + 745 746 741 + 741 746 747 + 747 742 741 + 743 615 614 + 614 748 743 + 743 748 749 + 749 744 743 + 744 749 750 + 750 751 744 + 744 751 745 + 748 614 752 + 752 753 748 + 749 748 753 + 753 754 749 + 750 749 754 + 95 752 614 + 755 752 95 + 753 752 755 + 755 756 753 + 753 756 757 + 757 754 753 + 754 757 758 + 754 758 750 + 95 759 755 + 755 759 760 + 761 755 760 + 756 755 761 + 761 762 756 + 757 756 762 + 763 757 762 + 758 757 763 + 764 759 95 + 761 765 762 + 762 765 766 + 766 767 762 + 762 767 763 + 768 763 767 + 763 768 769 + 763 769 758 + 750 758 769 + 770 750 769 + 751 750 770 + 771 766 765 + 772 766 771 + 767 766 772 + 767 772 768 + 773 768 772 + 769 768 773 + 773 774 769 + 769 774 775 + 775 770 769 + 776 771 765 + 777 677 676 + 676 778 777 + 779 777 778 + 778 676 780 + 778 780 781 + 781 782 778 + 778 782 783 + 783 784 778 + 784 779 778 + 780 676 675 + 675 785 780 + 780 785 786 + 781 780 786 + 787 781 786 + 788 781 787 + 788 782 781 + 782 788 789 + 789 783 782 + 675 790 785 + 785 790 791 + 791 792 785 + 785 792 786 + 790 675 674 + 674 673 790 + 791 790 673 + 694 791 673 + 793 791 694 + 791 793 792 + 792 793 794 + 794 795 792 + 792 795 786 + 694 796 793 + 794 793 796 + 796 797 794 + 798 794 797 + 794 798 795 + 795 798 799 + 799 800 795 + 795 800 786 + 796 694 693 + 693 801 796 + 796 801 802 + 802 797 796 + 803 797 802 + 797 803 798 + 799 798 803 + 803 804 799 + 805 799 804 + 799 805 800 + 801 693 698 + 698 806 801 + 802 801 806 + 807 802 806 + 802 807 804 + 803 802 804 + 702 806 698 + 806 702 808 + 808 809 806 + 806 809 807 + 810 807 809 + 807 810 811 + 811 804 807 + 804 811 805 + 812 805 811 + 800 805 812 + 812 786 800 + 707 808 702 + 813 808 707 + 809 808 813 + 813 814 809 + 809 814 810 + 815 810 814 + 811 810 815 + 815 816 811 + 811 816 812 + 817 812 816 + 812 817 786 + 707 818 813 + 813 818 819 + 819 820 813 + 814 813 820 + 820 821 814 + 814 821 815 + 818 707 706 + 818 706 822 + 822 819 818 + 823 819 822 + 819 823 824 + 824 820 819 + 821 820 824 + 824 825 821 + 821 825 826 + 826 815 821 + 822 706 711 + 711 827 822 + 828 822 827 + 822 828 823 + 823 828 829 + 829 830 823 + 824 823 830 + 830 831 824 + 825 824 831 + 715 827 711 + 827 715 720 + 720 832 827 + 827 832 828 + 829 828 832 + 832 833 829 + 834 829 833 + 829 834 835 + 835 830 829 + 830 835 836 + 836 831 830 + 832 720 837 + 837 833 832 + 833 837 838 + 838 839 833 + 833 839 834 + 840 834 839 + 835 834 840 + 840 841 835 + 836 835 841 + 724 837 720 + 838 837 724 + 724 842 838 + 838 842 843 + 843 844 838 + 839 838 844 + 844 845 839 + 839 845 840 + 842 724 723 + 723 846 842 + 842 846 847 + 847 843 842 + 848 843 847 + 843 848 849 + 849 844 843 + 845 844 849 + 846 723 728 + 728 850 846 + 846 850 851 + 851 847 846 + 848 847 851 + 851 852 848 + 849 848 852 + 852 853 849 + 854 849 853 + 849 854 845 + 733 850 728 + 850 733 855 + 855 856 850 + 850 856 851 + 857 851 856 + 851 857 858 + 858 852 851 + 852 858 859 + 859 853 852 + 855 733 860 + 860 861 855 + 862 855 861 + 856 855 862 + 862 863 856 + 856 863 857 + 732 860 733 + 864 860 732 + 860 864 865 + 865 861 860 + 861 865 866 + 866 867 861 + 861 867 862 + 868 862 867 + 863 862 868 + 732 738 864 + 864 738 869 + 869 870 864 + 864 870 871 + 871 865 864 + 866 865 871 + 869 738 737 + 737 872 869 + 872 873 869 + 874 869 873 + 870 869 874 + 742 872 737 + 872 742 747 + 747 875 872 + 872 875 876 + 876 873 872 + 873 876 877 + 873 877 874 + 875 747 878 + 878 879 875 + 876 875 879 + 879 880 876 + 877 876 880 + 880 881 877 + 874 877 881 + 882 878 747 + 883 878 882 + 878 883 884 + 884 879 878 + 879 884 885 + 885 880 879 + 880 885 886 + 886 881 880 + 747 746 882 + 887 882 746 + 888 882 887 + 882 888 883 + 889 883 888 + 884 883 889 + 889 890 884 + 884 890 891 + 891 885 884 + 886 885 891 + 746 745 887 + 892 887 745 + 893 887 892 + 887 893 888 + 888 893 894 + 894 895 888 + 888 895 889 + 896 889 895 + 890 889 896 + 745 751 892 + 770 892 751 + 897 892 770 + 892 897 893 + 894 893 897 + 897 898 894 + 899 894 898 + 895 894 899 + 899 900 895 + 895 900 896 + 770 901 897 + 897 901 902 + 902 898 897 + 898 902 903 + 903 904 898 + 898 904 899 + 901 770 775 + 775 905 901 + 901 905 906 + 902 901 906 + 906 907 902 + 903 902 907 + 907 908 903 + 909 903 908 + 904 903 909 + 910 905 775 + 905 910 911 + 911 906 905 + 911 912 906 + 906 912 913 + 913 907 906 + 907 913 914 + 914 908 907 + 910 775 774 + 774 915 910 + 911 910 915 + 915 916 911 + 912 911 916 + 916 917 912 + 912 917 918 + 918 913 912 + 914 913 918 + 915 774 773 + 773 919 915 + 915 919 920 + 920 916 915 + 916 920 921 + 921 917 916 + 917 921 922 + 922 918 917 + 919 773 923 + 923 924 919 + 919 924 925 + 925 920 919 + 921 920 925 + 925 926 921 + 921 926 927 + 922 921 927 + 772 923 773 + 771 923 772 + 923 771 928 + 928 924 923 + 924 928 929 + 929 925 924 + 925 929 926 + 926 929 930 + 930 927 926 + 928 771 931 + 931 932 928 + 928 932 930 + 930 929 928 + 933 932 931 + 932 933 934 + 934 935 932 + 934 933 936 + 936 937 934 + 938 934 937 + 939 934 938 + 940 936 933 + 941 936 940 + 936 941 942 + 942 937 936 + 937 942 943 + 943 944 937 + 937 944 938 + 933 945 940 + 946 940 945 + 947 940 946 + 940 947 941 + 941 947 948 + 948 949 941 + 942 941 949 + 950 945 933 + 932 951 930 + 952 930 951 + 930 952 927 + 927 952 953 + 953 954 927 + 927 954 922 + 951 955 952 + 952 955 956 + 956 953 952 + 957 953 956 + 954 953 957 + 957 958 954 + 954 958 959 + 959 922 954 + 918 922 959 + 960 956 955 + 956 960 961 + 961 962 956 + 956 962 957 + 957 962 963 + 963 964 957 + 958 957 964 + 955 938 960 + 960 938 944 + 944 965 960 + 961 960 965 + 965 966 961 + 967 961 966 + 962 961 967 + 938 955 968 + 629 969 630 + 970 630 969 + 631 630 970 + 970 971 631 + 539 631 971 + 972 539 971 + 532 539 972 + 969 973 970 + 974 970 973 + 971 970 974 + 974 975 971 + 971 975 976 + 976 977 971 + 971 977 972 + 978 972 977 + 979 973 969 + 973 979 980 + 980 981 973 + 973 981 974 + 974 981 982 + 982 983 974 + 975 974 983 + 969 633 979 + 984 979 633 + 980 979 984 + 984 985 980 + 980 985 986 + 986 987 980 + 981 980 987 + 987 982 981 + 633 969 988 + 633 640 984 + 989 984 640 + 984 989 990 + 990 985 984 + 985 990 991 + 991 986 985 + 640 639 989 + 989 639 992 + 992 993 989 + 990 989 993 + 993 994 990 + 991 990 994 + 994 995 991 + 996 991 995 + 986 991 996 + 645 992 639 + 992 645 997 + 997 998 992 + 992 998 999 + 999 993 992 + 994 993 999 + 999 1000 994 + 994 1000 1001 + 1001 995 994 + 997 645 644 + 644 1002 997 + 997 1002 1003 + 1003 1004 997 + 998 997 1004 + 1004 1005 998 + 998 1005 1006 + 1006 999 998 + 1000 999 1006 + 650 1002 644 + 1002 650 1007 + 1007 1003 1002 + 1003 1007 1008 + 1003 1008 1009 + 1009 1004 1003 + 1005 1004 1009 + 1009 1010 1005 + 1005 1010 1011 + 1011 1006 1005 + 1007 650 1012 + 1012 1013 1007 + 1008 1007 1013 + 1013 234 1008 + 649 1012 650 + 1012 649 1014 + 1012 1014 1015 + 1015 1013 1012 + 234 1013 1015 + 1015 779 234 + 234 779 784 + 784 1016 234 + 234 1016 1009 + 1014 649 655 + 655 671 1014 + 1015 1014 1017 + 977 1018 978 + 1018 977 976 + 976 1019 1018 + 1018 1019 1020 + 1020 1021 1018 + 1022 1018 1021 + 1019 976 1023 + 1023 1024 1019 + 1019 1024 1025 + 1026 1025 1024 + 1027 1025 1026 + 1023 976 975 + 975 1028 1023 + 1028 1029 1023 + 1030 1023 1029 + 1023 1030 1024 + 1024 1030 1026 + 983 1028 975 + 1028 983 1031 + 1031 1032 1028 + 1028 1032 1033 + 1033 1029 1028 + 1029 1033 1034 + 1029 1034 1030 + 1026 1030 1034 + 1031 983 982 + 982 1035 1031 + 1031 1035 1036 + 1036 1037 1031 + 1032 1031 1037 + 1037 1038 1032 + 1033 1032 1038 + 1038 1039 1033 + 1034 1033 1039 + 1040 1035 982 + 1035 1040 1041 + 1041 1036 1035 + 1036 1041 1042 + 1042 1043 1036 + 1036 1043 1044 + 1044 1037 1036 + 1038 1037 1044 + 982 987 1040 + 1040 987 986 + 986 1045 1040 + 1040 1045 1046 + 1046 1041 1040 + 1042 1041 1046 + 1046 1047 1042 + 1042 1047 1048 + 1048 1049 1042 + 1043 1042 1049 + 996 1045 986 + 1045 996 1050 + 1050 1046 1045 + 1046 1050 1051 + 1051 1047 1046 + 1047 1051 1052 + 1052 1048 1047 + 1053 1050 996 + 1051 1050 1053 + 1053 1054 1051 + 1051 1054 1055 + 1055 1052 1051 + 1056 1052 1055 + 1048 1052 1056 + 996 1057 1053 + 1058 1053 1057 + 1058 1054 1053 + 1054 1058 1059 + 1059 1055 1054 + 1060 1055 1059 + 1055 1060 1056 + 995 1057 996 + 1057 995 1001 + 1001 1061 1057 + 1057 1061 1058 + 1059 1058 1061 + 1061 1062 1059 + 1062 1063 1059 + 1064 1059 1063 + 1059 1064 1060 + 1061 1001 1065 + 1065 1062 1061 + 1066 1062 1065 + 1062 1066 1067 + 1067 1063 1062 + 1063 1067 1068 + 1063 1068 1064 + 1069 1064 1068 + 1060 1064 1069 + 1065 1001 1000 + 1000 1070 1065 + 1071 1065 1070 + 1065 1071 1066 + 1066 1071 1072 + 1072 1073 1066 + 1067 1066 1073 + 1073 1074 1067 + 1068 1067 1074 + 1006 1070 1000 + 1070 1006 1011 + 1011 1075 1070 + 1070 1075 1071 + 1071 1075 1076 + 1076 1072 1071 + 1077 1072 1076 + 1073 1072 1077 + 1077 1078 1073 + 1073 1078 1079 + 1079 1074 1073 + 1075 1011 1080 + 1080 1081 1075 + 1075 1081 1076 + 1081 1082 1076 + 1083 1076 1082 + 1083 1084 1076 + 1076 1084 1077 + 1085 1080 1011 + 1086 1080 1085 + 1081 1080 1086 + 1081 1086 1087 + 1087 1082 1081 + 1088 1082 1087 + 1082 1088 1083 + 1011 1010 1085 + 1089 1085 1010 + 1085 1089 1090 + 1090 1091 1085 + 1085 1091 1086 + 1086 1091 1092 + 1092 1093 1086 + 1093 1087 1086 + 1088 1087 1093 + 1010 1009 1089 + 1094 1089 1009 + 1090 1089 1094 + 1094 1095 1090 + 1090 1095 1096 + 1096 1097 1090 + 1097 1098 1090 + 1091 1090 1098 + 1098 1092 1091 + 1099 1094 1009 + 1100 1094 1099 + 1100 1095 1094 + 1095 1100 1101 + 1101 1096 1095 + 1101 1102 1096 + 1096 1102 1103 + 1103 1097 1096 + 1016 1099 1009 + 1104 1099 1016 + 1099 1104 1105 + 1099 1105 1100 + 1100 1105 1106 + 1016 1107 1104 + 1108 1104 1107 + 1105 1104 1108 + 1108 103 1105 + 1105 103 1109 + 784 1107 1016 + 1107 784 783 + 783 1110 1107 + 1107 1110 1108 + 783 789 1110 + 1110 789 1111 + 1111 1112 1110 + 1111 789 788 + 788 1113 1111 + 1114 1111 1113 + 1113 1115 1114 + 1116 1114 1115 + 1112 1114 1116 + 1116 1117 1112 + 787 1113 788 + 1115 1113 787 + 1115 787 1118 + 1118 1119 1115 + 1115 1119 1116 + 1120 1116 1119 + 1117 1116 1120 + 1117 1120 1121 + 1121 1108 1117 + 1108 1121 1122 + 1122 103 1108 + 1118 787 786 + 1123 1118 786 + 1124 1118 1123 + 1124 1119 1118 + 1119 1124 1120 + 1121 1120 1124 + 1124 1125 1121 + 1122 1121 1125 + 1125 1126 1122 + 1127 1122 1126 + 103 1122 1127 + 786 1128 1123 + 1128 1129 1123 + 1126 1123 1129 + 1126 1125 1123 + 1123 1125 1124 + 1130 1128 786 + 1130 1131 1128 + 1128 1131 1132 + 1132 1129 1128 + 1132 1133 1129 + 1129 1133 1126 + 786 817 1130 + 1134 1130 817 + 1131 1130 1134 + 1134 1135 1131 + 1132 1131 1135 + 1135 1136 1132 + 1136 1137 1132 + 1137 1138 1132 + 1133 1132 1138 + 817 1139 1134 + 1140 1134 1139 + 1135 1134 1140 + 1135 1140 1141 + 1141 1136 1135 + 816 1139 817 + 1139 816 815 + 815 826 1139 + 1139 826 1140 + 1140 826 825 + 825 1142 1140 + 1142 1143 1140 + 831 1142 825 + 1142 831 836 + 836 1144 1142 + 1142 1144 1145 + 1145 1146 1142 + 1144 836 1147 + 1147 1148 1144 + 1144 1148 1149 + 1149 1145 1144 + 841 1147 836 + 1150 1147 841 + 1148 1147 1150 + 1150 1151 1148 + 1148 1151 1152 + 1152 1149 1148 + 841 1153 1150 + 1150 1153 1154 + 1154 1155 1150 + 1151 1150 1155 + 1155 1156 1151 + 1151 1156 1157 + 1157 1152 1151 + 1153 841 840 + 840 1158 1153 + 1153 1158 1159 + 1159 1154 1153 + 1160 1154 1159 + 1154 1160 1161 + 1161 1155 1154 + 1156 1155 1161 + 1158 840 845 + 845 854 1158 + 1159 1158 854 + 854 1162 1159 + 1163 1159 1162 + 1159 1163 1160 + 1160 1163 1164 + 1164 1165 1160 + 1161 1160 1165 + 853 1162 854 + 1162 853 859 + 859 1166 1162 + 1162 1166 1163 + 1164 1163 1166 + 1166 1167 1164 + 1168 1164 1167 + 1164 1168 1169 + 1169 1165 1164 + 1166 859 1170 + 1170 1167 1166 + 1167 1170 1171 + 1171 1172 1167 + 1167 1172 1168 + 1168 1172 1173 + 1173 1174 1168 + 1169 1168 1174 + 1175 1170 859 + 1171 1170 1175 + 1175 1176 1171 + 1171 1176 1177 + 1177 1178 1171 + 1172 1171 1178 + 1178 1179 1172 + 1172 1179 1173 + 859 858 1175 + 1180 1175 858 + 1176 1175 1180 + 1176 1180 1181 + 1181 1177 1176 + 1182 1177 1181 + 1177 1182 1183 + 1183 1178 1177 + 1179 1178 1183 + 858 857 1180 + 1181 1180 857 + 1184 1181 857 + 1182 1181 1184 + 1184 1185 1182 + 1183 1182 1185 + 1185 1186 1183 + 1187 1183 1186 + 1183 1187 1179 + 1179 1187 1188 + 1188 1173 1179 + 1189 1184 857 + 1190 1184 1189 + 1190 1185 1184 + 1185 1190 1191 + 1191 1186 1185 + 1192 1186 1191 + 1186 1192 1187 + 1187 1192 1193 + 1188 1187 1193 + 857 863 1189 + 863 1194 1189 + 1195 1189 1194 + 1189 1195 1196 + 1196 1197 1189 + 1189 1197 1190 + 1191 1190 1197 + 868 1194 863 + 1194 868 1198 + 1198 1199 1194 + 1194 1199 1195 + 1200 1195 1199 + 1196 1195 1200 + 1200 1201 1196 + 1202 1196 1201 + 1197 1196 1202 + 1198 868 1203 + 1203 1204 1198 + 1205 1198 1204 + 1199 1198 1205 + 1205 1206 1199 + 1199 1206 1200 + 867 1203 868 + 1207 1203 867 + 1203 1207 1208 + 1208 1204 1203 + 1204 1208 1209 + 1209 1210 1204 + 1204 1210 1205 + 1211 1205 1210 + 1206 1205 1211 + 867 866 1207 + 1212 1207 866 + 1208 1207 1212 + 1212 1213 1208 + 1208 1213 1214 + 1214 1209 1208 + 1215 1209 1214 + 1210 1209 1215 + 1215 1216 1210 + 1210 1216 1211 + 866 1217 1212 + 1217 1218 1212 + 1218 1219 1212 + 1219 1220 1212 + 1221 1212 1220 + 1213 1212 1221 + 871 1217 866 + 1217 871 1222 + 1222 1223 1217 + 1217 1223 1224 + 1224 1218 1217 + 1218 1224 1225 + 1218 1225 1226 + 1226 1219 1218 + 1222 871 1227 + 1227 1228 1222 + 1222 1228 1229 + 1229 1230 1222 + 1223 1222 1230 + 1230 1231 1223 + 1224 1223 1231 + 870 1227 871 + 1232 1227 870 + 1227 1232 1228 + 1228 1232 1233 + 1233 1229 1228 + 1234 1229 1233 + 1229 1234 1235 + 1235 1230 1229 + 1230 1235 1236 + 1236 1231 1230 + 870 1237 1232 + 1232 1237 1238 + 1238 1233 1232 + 1239 1233 1238 + 1233 1239 1234 + 874 1237 870 + 1237 874 1240 + 1240 1238 1237 + 1241 1238 1240 + 1238 1241 1239 + 1242 1239 1241 + 1234 1239 1242 + 1242 1243 1234 + 1234 1243 1244 + 1244 1235 1234 + 1236 1235 1244 + 881 1240 874 + 1245 1240 881 + 1240 1245 1241 + 1241 1245 1246 + 1246 1247 1241 + 1241 1247 1242 + 1248 1242 1247 + 1243 1242 1248 + 881 886 1245 + 1246 1245 886 + 886 1249 1246 + 1250 1246 1249 + 1247 1246 1250 + 1250 1251 1247 + 1247 1251 1248 + 891 1249 886 + 1249 891 1252 + 1252 1253 1249 + 1249 1253 1250 + 1250 1253 1254 + 1254 1255 1250 + 1251 1250 1255 + 1255 1256 1251 + 1248 1251 1256 + 1252 891 1257 + 1257 1258 1252 + 1252 1258 1259 + 1259 1260 1252 + 1253 1252 1260 + 1260 1254 1253 + 890 1257 891 + 1261 1257 890 + 1257 1261 1258 + 1258 1261 1262 + 1262 1259 1258 + 1263 1259 1262 + 1259 1263 1264 + 1264 1260 1259 + 1260 1264 1265 + 1265 1254 1260 + 890 1266 1261 + 1261 1266 1267 + 1267 1262 1261 + 1268 1262 1267 + 1262 1268 1263 + 896 1266 890 + 1266 896 1269 + 1269 1267 1266 + 1270 1267 1269 + 1267 1270 1268 + 1271 1268 1270 + 1263 1268 1271 + 1271 1272 1263 + 1263 1272 1273 + 1273 1264 1263 + 1265 1264 1273 + 1274 1269 896 + 1275 1269 1274 + 1269 1275 1270 + 1270 1275 1276 + 1276 1277 1270 + 1270 1277 1271 + 896 900 1274 + 1278 1274 900 + 1279 1274 1278 + 1274 1279 1275 + 1276 1275 1279 + 1279 1280 1276 + 1281 1276 1280 + 1277 1276 1281 + 900 899 1278 + 1282 1278 899 + 1283 1278 1282 + 1278 1283 1279 + 1279 1283 1284 + 1284 1280 1279 + 1280 1284 1285 + 1280 1285 1281 + 899 904 1282 + 909 1282 904 + 1286 1282 909 + 1282 1286 1283 + 1283 1286 1287 + 1284 1283 1287 + 1287 1288 1284 + 1285 1284 1288 + 1288 1289 1285 + 1285 1289 1290 + 1281 1285 1290 + 909 1291 1286 + 1286 1291 1292 + 1292 1287 1286 + 1293 1287 1292 + 1287 1293 1294 + 1294 1288 1287 + 1294 1289 1288 + 1289 1294 1295 + 1295 1290 1289 + 1291 909 1296 + 1296 1297 1291 + 1292 1291 1297 + 1297 1298 1292 + 1298 1299 1292 + 1293 1292 1299 + 908 1296 909 + 1300 1296 908 + 1296 1300 1301 + 908 914 1300 + 1302 1300 914 + 1303 1300 1302 + 1302 132 1303 + 1304 132 1302 + 132 1304 1305 + 1305 1306 132 + 914 1307 1302 + 1308 1302 1307 + 1302 1308 1304 + 1304 1308 1309 + 1309 1310 1304 + 1304 1310 1311 + 918 1307 914 + 959 1307 918 + 1307 959 1308 + 1308 959 958 + 958 1309 1308 + 964 1309 958 + 1309 964 1310 + 1310 964 963 + 963 1312 1310 + 1310 1312 1313 + 963 1314 1312 + 1312 1314 1315 + 1315 1316 1312 + 1312 1316 1311 + 1317 1311 1316 + 1314 963 1318 + 1318 1319 1314 + 1314 1319 1320 + 1320 1315 1314 + 1321 1315 1320 + 1316 1315 1321 + 1321 1322 1316 + 1316 1322 1317 + 962 1318 963 + 967 1318 962 + 1318 967 1323 + 1323 1319 1318 + 1319 1323 1324 + 1324 1320 1319 + 1320 1324 1325 + 1325 1326 1320 + 1320 1326 1321 + 1327 1321 1326 + 1322 1321 1327 + 1323 967 1328 + 1328 1329 1323 + 1324 1323 1329 + 1329 1330 1324 + 1325 1324 1330 + 1330 1331 1325 + 1332 1325 1331 + 1326 1325 1332 + 966 1328 967 + 1333 1328 966 + 1328 1333 1334 + 1334 1329 1328 + 1329 1334 1335 + 1335 1330 1329 + 1330 1335 1336 + 1336 1331 1330 + 966 1337 1333 + 1333 1337 1338 + 1338 1339 1333 + 1334 1333 1339 + 1339 1340 1334 + 1335 1334 1340 + 1340 1341 1335 + 1336 1335 1341 + 1337 966 965 + 965 1342 1337 + 1337 1342 1343 + 1343 1338 1337 + 1343 1344 1338 + 1338 1344 1345 + 1345 1339 1338 + 1340 1339 1345 + 1342 965 944 + 944 943 1342 + 1342 943 1346 + 1346 1343 1342 + 1344 1343 1346 + 1346 1347 1344 + 1345 1344 1347 + 1348 1345 1347 + 1349 1345 1348 + 1345 1349 1340 + 1340 1349 1350 + 1350 1341 1340 + 1351 1346 943 + 1347 1346 1351 + 1351 1352 1347 + 1347 1352 1353 + 1353 1354 1347 + 1347 1354 1348 + 943 942 1351 + 949 1351 942 + 1352 1351 949 + 949 1355 1352 + 1355 1353 1352 + 1356 1353 1355 + 1353 1356 1357 + 1357 1354 1353 + 1354 1357 1358 + 1358 1348 1354 + 1359 1355 949 + 1355 1359 1356 + 1356 1359 1360 + 1360 1361 1356 + 1357 1356 1361 + 1361 1362 1357 + 1358 1357 1362 + 949 948 1359 + 1359 948 1363 + 1363 1364 1359 + 1359 1364 1360 + 1363 948 947 + 947 1365 1363 + 1366 1363 1365 + 1364 1363 1366 + 1366 1367 1364 + 1364 1367 1368 + 1368 1360 1364 + 946 1365 947 + 1369 1365 946 + 1365 1369 1366 + 1366 1369 1370 + 1370 1371 1366 + 1367 1366 1371 + 1371 1372 1367 + 1368 1367 1372 + 946 1373 1369 + 1369 1373 1374 + 1374 1370 1369 + 1374 1375 1370 + 1370 1375 1376 + 1376 1371 1370 + 1372 1371 1376 + 1373 946 1377 + 1377 1378 1373 + 1373 1378 1379 + 1379 1380 1373 + 1380 1374 1373 + 945 1377 946 + 1381 1377 945 + 1378 1377 1381 + 1381 1382 1378 + 1378 1382 1383 + 1383 1379 1378 + 945 1384 1381 + 1381 1384 1385 + 1385 1386 1381 + 1382 1381 1386 + 1386 1387 1382 + 1382 1387 1388 + 1388 1389 1382 + 1389 1390 1382 + 1391 1386 1385 + 1386 1391 1392 + 1392 1387 1386 + 1387 1392 1393 + 1393 1388 1387 + 1388 1393 1394 + 1388 1394 1395 + 1395 1389 1388 + 1385 1396 1391 + 1391 1396 760 + 760 1397 1391 + 1392 1391 1397 + 1397 1398 1392 + 1392 1398 1399 + 1393 1392 1399 + 1399 1400 1393 + 1394 1393 1400 + 1400 1401 1394 + 1395 1394 1401 + 1402 1397 760 + 1398 1397 1402 + 1402 1403 1398 + 1398 1403 1404 + 1404 1405 1398 + 1398 1405 1399 + 760 1406 1402 + 1406 1407 1402 + 1403 1402 1407 + 1407 1408 1403 + 1403 1408 1409 + 1406 760 1410 + 1410 1411 1406 + 1406 1411 1412 + 1412 1407 1406 + 1407 1412 1408 + 1408 1412 1413 + 1413 1414 1408 + 1408 1414 1415 + 1410 760 1416 + 1416 1417 1410 + 1410 1417 1418 + 1418 1419 1410 + 1411 1410 1419 + 1419 1413 1411 + 1411 1413 1412 + 759 1416 760 + 111 1416 759 + 1417 1416 111 + 111 1420 1417 + 1417 1420 1421 + 1421 1418 1417 + 759 1422 111 + 1404 1403 1423 + 1424 1383 1382 + 1127 1425 103 + 1426 1101 1100 + 20 1421 1420 + 1420 111 20 + 20 111 1427 + 1375 1374 1428 + 1428 1429 1375 + 1375 1429 1430 + 1430 1376 1375 + 1431 1376 1430 + 1376 1431 1372 + 1432 1429 1428 + 1429 1432 1433 + 1433 1434 1429 + 1429 1434 1430 + 1432 1428 1435 + 1435 1436 1432 + 1432 1436 1437 + 1433 1432 1437 + 1438 1433 1437 + 1439 1433 1438 + 1433 1439 1434 + 1434 1439 1440 + 1440 1430 1434 + 1436 1435 1441 + 1436 1441 1390 + 1390 1442 1436 + 1436 1442 1437 + 1442 1390 1443 + 1442 1443 1444 + 1444 1445 1442 + 1442 1445 1437 + 1443 1390 1389 + 1389 1446 1443 + 1444 1443 1446 + 1447 1444 1446 + 1448 1444 1447 + 1445 1444 1448 + 1445 1448 1449 + 1449 1450 1445 + 1445 1450 1437 + 1446 1389 1395 + 1446 1395 1451 + 1451 1452 1446 + 1446 1452 1453 + 1453 1447 1446 + 1454 1447 1453 + 1455 1447 1454 + 1447 1455 1448 + 1448 1455 1456 + 1451 1395 1401 + 1457 1451 1401 + 1458 1451 1457 + 1458 1452 1451 + 1452 1458 1459 + 1459 1453 1452 + 1460 1453 1459 + 1453 1460 1454 + 1461 1457 1401 + 1462 1457 1461 + 1463 1457 1462 + 1457 1463 1458 + 1458 1463 1464 + 1464 1465 1458 + 1465 1459 1458 + 1466 1461 1401 + 1467 1461 1466 + 1468 1461 1467 + 1461 1468 1462 + 1469 1462 1468 + 1463 1462 1469 + 1469 1464 1463 + 1401 1470 1466 + 1471 1466 1470 + 1466 1471 1472 + 1466 1472 1467 + 1473 1467 1472 + 1468 1467 1473 + 1473 1474 1468 + 1468 1474 1469 + 1475 1470 1401 + 1470 1475 1476 + 1470 1476 1471 + 1477 1471 1476 + 1472 1471 1477 + 1477 1478 1472 + 1472 1478 1479 + 1479 1473 1472 + 1401 1480 1475 + 1475 1480 1481 + 1482 1475 1481 + 1476 1475 1482 + 1401 1400 1480 + 1480 1400 1399 + 1399 1483 1480 + 1480 1483 1481 + 1483 1399 1484 + 1484 1485 1483 + 1483 1485 1486 + 1486 1481 1483 + 1484 1399 1405 + 1405 1487 1484 + 1484 1487 1488 + 1487 1405 1404 + 1404 1489 1487 + 1487 1489 1490 + 1490 1491 1487 + 1487 1491 1492 + 1489 1404 1493 + 1493 1494 1489 + 1490 1489 1494 + 1494 1495 1490 + 155 1490 1495 + 1491 1490 155 + 155 1427 1491 + 1496 1493 1404 + 1449 1448 1497 + 1495 1498 155 + 1498 1495 1499 + 1499 1500 1498 + 1498 1500 1501 + 1501 156 1498 + 1499 1495 1494 + 1494 1502 1499 + 1503 1499 1502 + 1500 1499 1503 + 1503 1504 1500 + 1504 1501 1500 + 1505 1501 1504 + 156 1501 1505 + 1505 1506 156 + 156 1506 1427 + 1493 1502 1494 + 1502 1493 1507 + 1507 1503 1502 + 1504 1503 1508 + 1455 1509 1456 + 1510 1509 1455 + 1455 1454 1510 + 1511 1510 1454 + 1454 1460 1511 + 1512 1511 1460 + 1460 1513 1512 + 1512 1513 1514 + 1459 1513 1460 + 1513 1459 1465 + 1465 1514 1513 + 1514 1465 1515 + 1514 1515 1516 + 1516 1517 1514 + 1514 1517 1518 + 1515 1465 1464 + 1464 1519 1515 + 1515 1519 1520 + 1520 1521 1515 + 1521 1516 1515 + 1522 1516 1521 + 1516 1522 1523 + 1523 1517 1516 + 1519 1464 1469 + 1519 1469 1474 + 1474 1524 1519 + 1519 1524 1520 + 1474 1473 1524 + 1524 1473 1479 + 1479 1525 1524 + 1524 1525 1520 + 1525 1526 1520 + 1527 1520 1526 + 1520 1527 1528 + 1520 1528 1529 + 1529 1521 1520 + 1525 1479 1530 + 1525 1530 1531 + 1531 1526 1525 + 1532 1526 1531 + 1526 1532 1527 + 1527 1532 1533 + 1533 1534 1527 + 1528 1527 1534 + 1530 1479 1478 + 1478 1535 1530 + 1530 1535 1536 + 1537 1536 1535 + 1535 1538 1537 + 1537 1538 1539 + 1539 1540 1537 + 1535 1478 1477 + 1477 1538 1535 + 1538 1477 1541 + 1541 1539 1538 + 1539 1541 1542 + 1539 1542 1543 + 1543 1540 1539 + 1541 1477 1476 + 1544 1541 1476 + 1542 1541 1544 + 1544 1545 1542 + 1542 1545 1546 + 1546 1543 1542 + 1476 1547 1544 + 1548 1544 1547 + 1545 1544 1548 + 1545 1548 1549 + 1549 1550 1545 + 1545 1550 1551 + 1550 1552 1551 + 1482 1547 1476 + 1547 1482 1553 + 1547 1553 1548 + 1548 1553 1554 + 1554 1549 1548 + 1555 1549 1554 + 1555 1550 1549 + 1550 1555 1556 + 1556 1557 1550 + 1553 1482 1558 + 1558 1559 1553 + 1553 1559 1554 + 1558 1560 1559 + 1559 1560 1561 + 1561 1562 1559 + 1559 1562 1554 + 1561 1563 1562 + 1562 1563 1564 + 1564 1565 1562 + 1562 1565 1554 + 1563 1561 1566 + 1566 1567 1563 + 1563 1567 1568 + 1568 1564 1563 + 1569 1564 1568 + 1564 1569 1565 + 1565 1569 1570 + 1570 1571 1565 + 1565 1571 1554 + 1572 1567 1566 + 1567 1572 1573 + 1573 1574 1567 + 1567 1574 1568 + 1575 1568 1574 + 1576 1568 1575 + 1568 1576 1569 + 1572 1566 1577 + 1577 1578 1572 + 1572 1578 1579 + 1579 1573 1572 + 1580 1573 1579 + 1573 1580 1581 + 1581 1574 1573 + 1574 1581 1575 + 1577 1566 1582 + 1582 1583 1577 + 1583 1584 1577 + 1585 1577 1584 + 1577 1585 1586 + 1586 1578 1577 + 1578 1586 1587 + 1587 1579 1578 + 1588 1579 1587 + 1579 1588 1580 + 1481 1584 1583 + 1589 1584 1481 + 1584 1589 1585 + 1585 1589 1590 + 1590 1591 1585 + 1586 1585 1591 + 1591 1592 1586 + 1587 1586 1592 + 1583 1593 1481 + 1481 1593 1594 + 1595 1531 1530 + 1596 1590 1589 + 1589 1486 1596 + 1481 1486 1589 + 1597 1556 1555 + 1555 1598 1597 + 1598 1599 1597 + 1600 1599 1598 + 1598 1601 1600 + 1602 1600 1601 + 1554 1598 1555 + 1601 1598 1554 + 1601 1554 1603 + 1603 1604 1601 + 1601 1604 1602 + 1571 1603 1554 + 1605 1603 1571 + 1605 1604 1603 + 1604 1605 1606 + 1606 1607 1604 + 1604 1607 1602 + 1571 1608 1605 + 1605 1608 1609 + 1606 1605 1609 + 1610 1606 1609 + 1611 1606 1610 + 1607 1606 1611 + 1570 1608 1571 + 1608 1570 1612 + 1612 1609 1608 + 1609 1612 1613 + 1613 1614 1609 + 1609 1614 1615 + 1615 1616 1609 + 1609 1616 1610 + 1617 1612 1570 + 1613 1612 1617 + 1617 1618 1613 + 1619 1613 1618 + 1614 1613 1619 + 1619 1620 1614 + 1615 1614 1620 + 1570 1569 1617 + 1569 1576 1617 + 1621 1617 1576 + 1617 1621 1618 + 1618 1621 1622 + 1622 1623 1618 + 1618 1623 1619 + 1624 1619 1623 + 1620 1619 1624 + 1576 1625 1621 + 1621 1625 1626 + 1626 1627 1621 + 1627 1622 1621 + 1628 1622 1627 + 1623 1622 1628 + 1628 1629 1623 + 1623 1629 1624 + 1575 1625 1576 + 1625 1575 1630 + 1630 1626 1625 + 1626 1630 1631 + 1631 1632 1626 + 1626 1632 1633 + 1633 1627 1626 + 1633 1634 1627 + 1627 1634 1628 + 1630 1575 1581 + 1581 1635 1630 + 1631 1630 1635 + 1635 1636 1631 + 1637 1631 1636 + 1632 1631 1637 + 1637 1638 1632 + 1632 1638 1639 + 1639 1633 1632 + 1634 1633 1639 + 1640 1635 1581 + 1635 1640 1641 + 1641 1636 1635 + 1636 1641 1642 + 1642 1643 1636 + 1636 1643 1637 + 1644 1637 1643 + 1638 1637 1644 + 1581 1580 1640 + 1645 1640 1580 + 1641 1640 1645 + 1645 1646 1641 + 1641 1646 1647 + 1647 1642 1641 + 1648 1642 1647 + 1580 1588 1645 + 1649 1645 1588 + 1645 1649 1650 + 1650 1646 1645 + 1646 1650 1651 + 1651 1647 1646 + 1647 1651 1652 + 1652 1653 1647 + 1647 1653 1648 + 1588 1654 1649 + 1649 1654 1655 + 1655 1656 1649 + 1656 1657 1649 + 1650 1649 1657 + 1657 1658 1650 + 1651 1650 1658 + 1587 1654 1588 + 1654 1587 1659 + 1659 1655 1654 + 1660 1655 1659 + 1655 1660 1661 + 1661 1656 1655 + 1592 1659 1587 + 1662 1659 1592 + 1659 1662 1660 + 1660 1662 1663 + 1663 1664 1660 + 1660 1664 1661 + 1665 1661 1664 + 1656 1661 1665 + 1592 1666 1662 + 1662 1666 1667 + 1667 1663 1662 + 1668 1663 1667 + 1664 1663 1668 + 1668 1669 1664 + 1664 1669 1665 + 1670 1666 1592 + 1666 1670 1671 + 1671 1667 1666 + 1667 1671 1672 + 1672 1673 1667 + 1667 1673 1668 + 1592 1591 1670 + 1670 1591 1590 + 1590 1674 1670 + 1670 1674 1675 + 1675 1671 1670 + 1672 1671 1675 + 1675 1676 1672 + 1672 1676 1677 + 1677 1678 1672 + 1673 1672 1678 + 1679 1674 1590 + 1674 1679 1680 + 1680 1675 1674 + 1675 1680 1681 + 1681 1676 1675 + 1676 1681 1682 + 1682 1677 1676 + 1590 1683 1679 + 1332 1684 1326 + 1326 1684 1327 + 1685 1327 1684 + 1686 1327 1685 + 1327 1686 1322 + 1317 1322 1686 + 1686 1687 1317 + 1688 1687 1686 + 1684 1689 1685 + 1690 1685 1689 + 1691 1685 1690 + 1685 1691 1686 + 1686 1691 1688 + 1688 1691 1692 + 1693 1689 1684 + 1691 1694 1692 + 1694 1695 1692 + 1696 1692 1695 + 1697 1692 1696 + 1692 1697 1698 + 1698 1699 1692 + 1698 1700 1699 + 1695 1701 1696 + 1702 1696 1701 + 1697 1696 1702 + 1702 1703 1697 + 1697 1703 1704 + 1704 1698 1697 + 1700 1698 1704 + 1704 1705 1700 + 1706 1705 1704 + 1701 1695 1707 + 1707 1695 1708 + 1708 1709 1707 + 1690 1710 1691 + 1710 1690 1711 + 1711 1690 1712 + 1712 1713 1711 + 1714 1711 1713 + 1715 1711 1714 + 1711 1715 1716 + 1717 1712 1690 + 1718 1712 1717 + 1712 1718 1719 + 1719 1713 1712 + 1713 1719 1720 + 1720 1721 1713 + 1713 1721 1714 + 1717 1722 1718 + 1718 1722 1723 + 1723 1724 1718 + 1719 1718 1724 + 1724 1725 1719 + 1720 1719 1725 + 1725 1726 1720 + 1727 1720 1726 + 1721 1720 1727 + 1728 1723 1722 + 1729 1723 1728 + 1723 1729 1730 + 1730 1724 1723 + 1724 1730 1731 + 1731 1725 1724 + 1725 1731 1732 + 1732 1726 1725 + 1722 1332 1728 + 1331 1728 1332 + 1733 1728 1331 + 1728 1733 1729 + 1729 1733 1734 + 1734 1735 1729 + 1730 1729 1735 + 1736 1332 1722 + 1331 1336 1733 + 1734 1733 1336 + 1336 1737 1734 + 1738 1734 1737 + 1738 1735 1734 + 1735 1738 1739 + 1739 1740 1735 + 1735 1740 1730 + 1731 1730 1740 + 1740 1741 1731 + 1732 1731 1741 + 1341 1737 1336 + 1737 1341 1350 + 1350 1742 1737 + 1737 1742 1738 + 1738 1742 1743 + 1743 1744 1738 + 1745 1744 1743 + 1744 1745 1746 + 1742 1350 1747 + 1747 1743 1742 + 1748 1743 1747 + 1743 1748 1745 + 1745 1748 1749 + 1749 1750 1745 + 1746 1745 1750 + 1750 1751 1746 + 1747 1350 1349 + 1349 1752 1747 + 1753 1747 1752 + 1747 1753 1748 + 1748 1753 1754 + 1754 1749 1748 + 1755 1749 1754 + 1749 1755 1756 + 1756 1750 1749 + 1348 1752 1349 + 1757 1752 1348 + 1752 1757 1753 + 1753 1757 1758 + 1758 1754 1753 + 1759 1754 1758 + 1754 1759 1755 + 1755 1759 1760 + 1760 1761 1755 + 1756 1755 1761 + 1348 1358 1757 + 1757 1358 1762 + 1762 1758 1757 + 1763 1758 1762 + 1758 1763 1759 + 1759 1763 1764 + 1764 1760 1759 + 1765 1760 1764 + 1760 1765 1766 + 1766 1761 1760 + 1362 1762 1358 + 1767 1762 1362 + 1762 1767 1763 + 1763 1767 1768 + 1768 1764 1763 + 1769 1764 1768 + 1764 1769 1765 + 1765 1769 1770 + 1770 1771 1765 + 1766 1765 1771 + 1362 1772 1767 + 1767 1772 1773 + 1773 1768 1767 + 1774 1768 1773 + 1768 1774 1769 + 1769 1774 1775 + 1775 1770 1769 + 1772 1362 1361 + 1361 1776 1772 + 1772 1776 1777 + 1777 1773 1772 + 1778 1773 1777 + 1773 1778 1774 + 1774 1778 1779 + 1779 1775 1774 + 1776 1361 1360 + 1360 1780 1776 + 1776 1780 1781 + 1781 1777 1776 + 1782 1777 1781 + 1777 1782 1778 + 1778 1782 1783 + 1783 1779 1778 + 1784 1780 1360 + 1780 1784 1785 + 1785 1781 1780 + 1781 1785 1786 + 1786 1787 1781 + 1781 1787 1782 + 1782 1787 1788 + 1788 1783 1782 + 1360 1368 1784 + 1784 1368 1789 + 1789 1790 1784 + 1785 1784 1790 + 1790 1791 1785 + 1786 1785 1791 + 1372 1789 1368 + 1792 1789 1372 + 1789 1792 1793 + 1793 1790 1789 + 1790 1793 1794 + 1794 1791 1790 + 1795 1791 1794 + 1791 1795 1786 + 1372 1431 1792 + 1796 1792 1431 + 1793 1792 1796 + 1796 1797 1793 + 1793 1797 1798 + 1798 1794 1793 + 1799 1794 1798 + 1794 1799 1795 + 1795 1799 1800 + 1800 1801 1795 + 1431 1802 1796 + 1803 1796 1802 + 1796 1803 1804 + 1804 1797 1796 + 1797 1804 1805 + 1805 1798 1797 + 1430 1802 1431 + 1806 1802 1430 + 1802 1806 1803 + 1803 1806 1807 + 1808 1803 1807 + 1804 1803 1808 + 1808 1809 1804 + 1804 1809 1810 + 1805 1804 1810 + 1430 1440 1806 + 1806 1440 1811 + 1811 1807 1806 + 1812 1807 1811 + 1807 1812 1813 + 1813 1814 1807 + 1807 1814 1808 + 1815 1808 1814 + 1808 1815 1809 + 1811 1440 1439 + 1439 1816 1811 + 1816 1817 1811 + 1812 1811 1817 + 1817 1818 1812 + 1812 1818 1819 + 1819 1813 1812 + 1820 1813 1819 + 1814 1813 1820 + 1438 1816 1439 + 1438 1821 1816 + 1816 1821 1822 + 1822 1817 1816 + 1817 1822 1823 + 1823 1818 1817 + 1818 1823 1824 + 1824 1819 1818 + 1821 1438 1825 + 1825 1826 1821 + 1822 1821 1826 + 1826 1827 1822 + 1827 1828 1822 + 1828 1829 1822 + 1823 1822 1829 + 1437 1825 1438 + 1830 1825 1437 + 1825 1830 1826 + 1826 1830 1831 + 1831 1827 1826 + 1832 1827 1831 + 1827 1832 1833 + 1833 1828 1827 + 1437 1834 1830 + 1830 1834 1835 + 1831 1830 1835 + 1836 1831 1835 + 1832 1831 1836 + 1836 1837 1832 + 1832 1837 1838 + 1833 1832 1838 + 1437 1839 1834 + 1834 1839 1840 + 1840 1841 1834 + 1834 1841 1835 + 1839 1437 1450 + 1450 1842 1839 + 1839 1842 1843 + 1843 1840 1839 + 1450 1449 1842 + 1842 1449 1844 + 1844 1845 1842 + 1842 1845 1843 + 1846 1844 1449 + 1456 1846 1449 + 1838 1847 1833 + 1848 1833 1847 + 1848 1828 1833 + 1828 1848 1849 + 1849 1829 1828 + 1849 1850 1829 + 1829 1850 1823 + 1847 1851 1848 + 1849 1848 1851 + 1852 1849 1851 + 1850 1849 1852 + 1852 1853 1850 + 1850 1853 1824 + 1824 1823 1850 + 1854 1852 1851 + 1855 1852 1854 + 1852 1855 1853 + 1853 1855 1856 + 1856 1824 1853 + 1819 1824 1856 + 1856 1857 1819 + 1819 1857 1820 + 1858 1854 1851 + 1859 1854 1858 + 1859 1860 1854 + 1854 1860 1855 + 1855 1860 1861 + 1861 1856 1855 + 1857 1856 1861 + 1861 1862 1857 + 1857 1862 1863 + 1820 1857 1863 + 1858 1864 1859 + 1865 1859 1864 + 1860 1859 1865 + 1865 1866 1860 + 1860 1866 1861 + 1866 1867 1861 + 1868 1861 1867 + 1868 1862 1861 + 1864 1869 1865 + 1869 1870 1865 + 1871 1865 1870 + 1871 1866 1865 + 1866 1871 1872 + 1872 1867 1866 + 1872 1873 1867 + 1867 1873 1868 + 1868 1873 1874 + 1875 1868 1874 + 1862 1868 1875 + 1870 1876 1871 + 1872 1871 1876 + 1877 1872 1876 + 1873 1872 1877 + 1877 1878 1873 + 1873 1878 1874 + 1879 1877 1876 + 1880 1877 1879 + 1880 1878 1877 + 1878 1880 1881 + 1881 1882 1878 + 1878 1882 1874 + 1876 1883 1879 + 1883 1884 1879 + 1884 1885 1879 + 1885 1886 1879 + 1887 1879 1886 + 1879 1887 1888 + 1879 1888 1880 + 1883 1876 1889 + 1890 1883 1889 + 1890 1891 1883 + 1892 1883 1891 + 1893 1892 1891 + 1893 1894 1892 + 1895 1889 1876 + 1889 1895 1896 + 1896 1897 1889 + 1889 1897 1898 + 1898 1890 1889 + 1891 1890 1898 + 1898 1899 1891 + 1893 1891 1899 + 1900 1895 1876 + 1895 1900 1901 + 1901 1902 1895 + 1896 1895 1902 + 1902 1903 1896 + 1904 1896 1903 + 1904 1897 1896 + 1897 1904 1905 + 1905 1898 1897 + 1905 1899 1898 + 1906 1902 1901 + 1902 1906 1907 + 1907 1903 1902 + 1908 1903 1907 + 1903 1908 1904 + 1904 1908 1909 + 1905 1904 1909 + 1910 1905 1909 + 1899 1905 1910 + 1906 1901 1911 + 1911 1912 1906 + 1907 1906 1912 + 1912 1913 1907 + 1913 1914 1907 + 1908 1907 1914 + 1914 1915 1908 + 1908 1915 1909 + 1858 1912 1911 + 1912 1858 1916 + 1916 1913 1912 + 1917 1913 1916 + 1913 1917 1918 + 1918 1914 1913 + 1915 1914 1918 + 1915 1918 1919 + 1919 1920 1915 + 1915 1920 1909 + 1921 1916 1858 + 1917 1916 1921 + 1921 1922 1917 + 1918 1917 1922 + 1922 1923 1918 + 1923 1924 1918 + 1924 1919 1918 + 1925 1919 1924 + 1920 1919 1925 + 1926 1921 1858 + 1927 1921 1926 + 1927 1922 1921 + 1922 1927 1928 + 1928 1923 1922 + 1929 1923 1928 + 1923 1929 1930 + 1930 1924 1923 + 1931 1926 1858 + 1932 1926 1931 + 1932 1933 1926 + 1926 1933 1927 + 1927 1933 1934 + 1928 1927 1934 + 1929 1928 1934 + 1931 1935 1932 + 1936 1932 1935 + 1933 1932 1936 + 1936 1934 1933 + 1937 1934 1936 + 1934 1937 1929 + 1929 1937 1938 + 1938 1939 1929 + 1939 1930 1929 + 1935 1931 1940 + 1940 1941 1935 + 1935 1941 1942 + 1942 1943 1935 + 1935 1943 1936 + 1937 1936 1943 + 1943 1944 1937 + 1937 1944 1938 + 1941 1940 1945 + 1945 1946 1941 + 1942 1941 1946 + 1946 1947 1942 + 1944 1942 1947 + 1944 1943 1942 + 1948 1946 1945 + 1946 1948 1949 + 1949 1947 1946 + 1950 1947 1949 + 1947 1950 1944 + 1944 1950 1938 + 1948 1945 1951 + 1951 1952 1948 + 1949 1948 1952 + 1952 1953 1949 + 1950 1949 1953 + 1953 1954 1950 + 1950 1954 1938 + 1952 1951 1836 + 1836 1955 1952 + 1952 1955 1956 + 1956 1953 1952 + 1954 1953 1956 + 1954 1956 1957 + 1957 1958 1954 + 1954 1958 1938 + 1955 1836 1959 + 1959 1960 1955 + 1956 1955 1960 + 1960 1957 1956 + 1961 1957 1960 + 1958 1957 1961 + 1958 1961 1962 + 1962 1963 1958 + 1958 1963 1938 + 1964 1959 1836 + 1965 1959 1964 + 1959 1965 1960 + 1960 1965 1961 + 1961 1965 1962 + 1965 1966 1962 + 1967 1962 1966 + 1963 1962 1967 + 1968 1964 1836 + 1969 1964 1968 + 1964 1969 1966 + 1964 1966 1965 + 1970 1968 1836 + 1971 1968 1970 + 1968 1971 1972 + 1968 1972 1969 + 1969 1972 1973 + 1967 1969 1973 + 1966 1969 1967 + 1835 1970 1836 + 1974 1970 1835 + 1970 1974 1975 + 1970 1975 1971 + 1971 1975 1976 + 1976 1977 1971 + 1972 1971 1977 + 1977 1973 1972 + 1835 1978 1974 + 1979 1974 1978 + 1975 1974 1979 + 1979 1980 1975 + 1975 1980 1976 + 1981 1978 1835 + 1978 1981 1982 + 1982 1983 1978 + 1978 1983 1979 + 1984 1979 1983 + 1984 1980 1979 + 1980 1984 1985 + 1985 1976 1980 + 1981 1835 1986 + 1986 1987 1981 + 1982 1981 1987 + 1987 1988 1982 + 1988 1989 1982 + 1990 1982 1989 + 1990 1983 1982 + 1983 1990 1984 + 1991 1987 1986 + 1987 1991 1992 + 1992 1988 1987 + 1992 1993 1988 + 1988 1993 1994 + 1994 1989 1988 + 1995 1989 1994 + 1989 1995 1990 + 1990 1995 1996 + 1984 1990 1996 + 1996 1997 1984 + 1997 1985 1984 + 1993 1992 1998 + 1998 1999 1993 + 1994 1993 1999 + 1999 2000 1994 + 2000 2001 1994 + 1995 1994 2001 + 2001 2002 1995 + 1995 2002 1996 + 1998 2003 1999 + 1999 2003 1846 + 1846 2000 1999 + 1846 2004 2000 + 2000 2004 2005 + 2005 2001 2000 + 2002 2001 2005 + 2002 2005 2006 + 2006 2007 2002 + 2002 2007 1996 + 2004 1846 2008 + 2008 2009 2004 + 2004 2009 2010 + 2005 2004 2010 + 2010 2006 2005 + 2011 2006 2010 + 2007 2006 2011 + 2007 2011 2012 + 2012 2013 2007 + 2007 2013 1996 + 2014 2009 2008 + 2009 2014 2015 + 2015 2010 2009 + 2015 2016 2010 + 2010 2016 2011 + 2011 2016 2017 + 2017 2012 2011 + 2018 2012 2017 + 2013 2012 2018 + 2019 2015 2014 + 2016 2015 2019 + 2019 2020 2016 + 2016 2020 2017 + 2021 2017 2020 + 2021 2022 2017 + 2017 2022 2018 + 2014 2023 2019 + 2024 2019 2023 + 2024 2020 2019 + 2020 2024 2021 + 2025 2023 2014 + 2026 2023 2025 + 2023 2026 2024 + 2024 2026 2027 + 2021 2024 2027 + 2014 2028 2025 + 2025 2028 2029 + 2029 2030 2025 + 2026 2025 2030 + 2030 2027 2026 + 2028 2014 2031 + 1881 1880 1888 + 2032 1881 1888 + 2033 1881 2032 + 2033 1882 1881 + 1882 2033 2034 + 2034 1874 1882 + 1888 2035 2032 + 2035 2036 2032 + 2036 2037 2032 + 2038 2032 2037 + 2032 2038 2039 + 2039 2040 2032 + 2032 2040 2033 + 2041 2035 1888 + 2041 2042 2035 + 2043 2035 2042 + 2044 2043 2042 + 2044 2045 2043 + 1888 1887 2041 + 2046 2041 1887 + 2042 2041 2046 + 2046 2047 2042 + 2042 2047 2048 + 2048 2044 2042 + 2045 2044 2048 + 2048 2049 2045 + 2050 2045 2049 + 2036 2045 2050 + 2050 2037 2036 + 1887 2051 2046 + 2051 2052 2046 + 2053 2046 2052 + 2053 2047 2046 + 2047 2053 2054 + 2054 2048 2047 + 2054 2049 2048 + 1886 2051 1887 + 2055 2051 1886 + 2051 2055 2056 + 2056 2052 2051 + 2057 2052 2056 + 2052 2057 2053 + 2053 2057 2058 + 2054 2053 2058 + 2059 2054 2058 + 2049 2054 2059 + 2055 1886 1885 + 1885 2060 2055 + 2056 2055 2060 + 2060 2061 2056 + 2057 2056 2061 + 2061 2062 2057 + 2057 2062 2058 + 2063 2060 1885 + 2060 2063 2064 + 2064 2061 2060 + 2062 2061 2064 + 2062 2064 2065 + 2065 2066 2062 + 2062 2066 2058 + 2063 1885 1884 + 1884 2067 2063 + 2063 2067 2068 + 2064 2063 2068 + 2068 2069 2064 + 2069 2065 2064 + 2070 2065 2069 + 2066 2065 2070 + 2066 2070 2071 + 2071 2072 2066 + 2066 2072 2058 + 2073 2068 2067 + 1910 2068 2073 + 2068 1910 2074 + 2074 2069 2068 + 2074 2075 2069 + 2069 2075 2070 + 2067 1893 2073 + 2073 1893 1899 + 1910 2073 1899 + 2074 1910 1909 + 1909 2076 2074 + 2076 2077 2074 + 2075 2074 2077 + 2077 2078 2075 + 2070 2075 2078 + 2078 2079 2070 + 2079 2080 2070 + 2080 2071 2070 + 2081 2076 1909 + 2076 2081 2082 + 2076 2082 2083 + 2083 2077 2076 + 2077 2083 2078 + 2078 2083 2084 + 2084 2079 2078 + 1909 2085 2081 + 2086 2081 2085 + 2082 2081 2086 + 2086 2087 2082 + 2082 2087 2088 + 2088 2084 2082 + 2084 2083 2082 + 1909 2089 2085 + 2085 2089 2090 + 2090 2091 2085 + 2085 2091 2086 + 2092 2086 2091 + 2091 2093 2092 + 2089 1909 2094 + 2094 2095 2089 + 2089 2095 2096 + 2096 2090 2089 + 2097 2090 2096 + 1920 2094 1909 + 2098 2094 1920 + 2094 2098 2095 + 2095 2098 2099 + 2099 2096 2095 + 2096 2099 2100 + 2100 2101 2096 + 2096 2101 2097 + 1920 1925 2098 + 2099 2098 1925 + 2102 2099 1925 + 2100 2099 2102 + 2102 2103 2100 + 2103 2104 2100 + 2091 2090 144 + 2034 2033 2040 + 2105 2034 2040 + 2106 2034 2105 + 1874 2034 2106 + 1874 2106 2107 + 2107 2108 1874 + 1874 2108 1875 + 2109 2105 2040 + 2110 2105 2109 + 2105 2110 2111 + 2105 2111 2106 + 2107 2106 2111 + 2111 2112 2107 + 2113 2107 2112 + 2108 2107 2113 + 2114 2109 2040 + 2115 2109 2114 + 2109 2115 2116 + 2109 2116 2110 + 2110 2116 2117 + 2118 2110 2117 + 2111 2110 2118 + 2118 2112 2111 + 2119 2114 2040 + 2120 2114 2119 + 2121 2114 2120 + 2114 2121 2115 + 2115 2121 2122 + 2122 2123 2115 + 2116 2115 2123 + 2123 2117 2116 + 2119 2124 2120 + 2125 2120 2124 + 2121 2120 2125 + 2125 2126 2121 + 2121 2126 2122 + 2127 2122 2126 + 2128 2122 2127 + 2122 2128 2129 + 2129 2123 2122 + 2130 2125 2124 + 2131 2125 2130 + 2131 2126 2125 + 2126 2131 2127 + 2132 2127 2131 + 2133 2127 2132 + 2127 2133 2128 + 2124 2134 2130 + 2134 2135 2130 + 2135 2136 2130 + 2137 2130 2136 + 2130 2137 2138 + 2130 2138 2131 + 2131 2138 2132 + 2139 2134 2124 + 2139 2140 2134 + 2141 2134 2140 + 33 2141 2140 + 2142 33 2140 + 2143 33 2142 + 2124 2144 2139 + 2145 2139 2144 + 2139 2145 2146 + 2140 2139 2146 + 2140 2146 2142 + 2147 2142 2146 + 2147 2148 2142 + 2142 2148 2143 + 2144 2124 2149 + 1741 1740 1739 + 1739 2150 1741 + 1741 2150 2151 + 2151 2152 1741 + 1741 2152 1732 + 2153 1732 2152 + 1726 1732 2153 + 2150 1739 2154 + 2154 2155 2150 + 2150 2155 2156 + 2156 2151 2150 + 2157 2151 2156 + 2151 2157 2158 + 2158 2152 2151 + 2152 2158 2153 + 2154 1739 1738 + 2159 2155 2154 + 2155 2159 2160 + 2160 2156 2155 + 2156 2160 2161 + 2161 2162 2156 + 2156 2162 2157 + 2163 2157 2162 + 2158 2157 2163 + 2163 2164 2158 + 2153 2158 2164 + 2160 2159 1751 + 1751 2165 2160 + 2161 2160 2165 + 2165 2166 2161 + 2167 2161 2166 + 2162 2161 2167 + 2167 2168 2162 + 2162 2168 2163 + 2169 2163 2168 + 2164 2163 2169 + 2170 2165 1751 + 2165 2170 2171 + 1751 2172 2170 + 2170 2172 2173 + 2173 2174 2170 + 2175 2170 2174 + 2174 2176 2175 + 2172 1751 1750 + 1750 1756 2172 + 2172 1756 2177 + 2177 2173 2172 + 2178 2173 2177 + 2173 2178 2179 + 2179 2174 2173 + 2174 2179 2180 + 2180 2176 2174 + 1761 2177 1756 + 2181 2177 1761 + 2177 2181 2178 + 2178 2181 2182 + 2182 2183 2178 + 2179 2178 2183 + 2183 2184 2179 + 2180 2179 2184 + 1761 1766 2181 + 2181 1766 2185 + 2185 2182 2181 + 2186 2182 2185 + 2182 2186 2187 + 2187 2183 2182 + 2183 2187 2188 + 2188 2184 2183 + 1771 2185 1766 + 2189 2185 1771 + 2185 2189 2186 + 2186 2189 2190 + 2190 2191 2186 + 2187 2186 2191 + 2191 2192 2187 + 2188 2187 2192 + 1771 2193 2189 + 2189 2193 2194 + 2194 2190 2189 + 2195 2190 2194 + 2190 2195 2196 + 2196 2191 2190 + 2191 2196 2197 + 2197 2192 2191 + 2193 1771 1770 + 1770 2198 2193 + 2193 2198 2199 + 2199 2194 2193 + 2200 2194 2199 + 2194 2200 2195 + 2195 2200 2201 + 2201 2202 2195 + 2196 2195 2202 + 2198 1770 1775 + 1775 2203 2198 + 2198 2203 2204 + 2204 2199 2198 + 2205 2199 2204 + 2199 2205 2200 + 2200 2205 2206 + 2206 2201 2200 + 2203 1775 1779 + 1779 2207 2203 + 2203 2207 2208 + 2208 2204 2203 + 2209 2204 2208 + 2204 2209 2205 + 2205 2209 2210 + 2210 2206 2205 + 2207 1779 1783 + 1783 2211 2207 + 2207 2211 2212 + 2212 2208 2207 + 2213 2208 2212 + 2208 2213 2209 + 2209 2213 2214 + 2214 2210 2209 + 2211 1783 1788 + 1788 2215 2211 + 2211 2215 2216 + 2216 2212 2211 + 2217 2212 2216 + 2212 2217 2213 + 2213 2217 2218 + 2218 2214 2213 + 2219 2215 1788 + 2215 2219 2220 + 2220 2216 2215 + 2216 2220 2221 + 2221 2222 2216 + 2216 2222 2217 + 2217 2222 2223 + 2218 2217 2223 + 2219 1788 1787 + 1787 1786 2219 + 2220 2219 1786 + 1786 1795 2220 + 1795 2224 2220 + 2221 2220 2225 + 2225 2226 2221 + 2227 2221 2226 + 2222 2221 2227 + 2227 2223 2222 + 2226 2228 2227 + 2229 2227 2228 + 2223 2227 2229 + 2230 2228 2226 + 2228 2230 2231 + 2231 2232 2228 + 2228 2232 2229 + 2229 2232 2233 + 2234 2229 2233 + 2229 2234 2223 + 2226 2235 2230 + 2236 2230 2235 + 2231 2230 2236 + 2236 2237 2231 + 2231 2237 2238 + 2238 2239 2231 + 2232 2231 2239 + 2239 2233 2232 + 1800 2235 2226 + 2235 1800 2240 + 2240 2241 2235 + 2235 2241 2236 + 2242 2236 2241 + 2236 2242 2243 + 2243 2237 2236 + 2226 2244 1800 + 2240 1800 1799 + 1799 2245 2240 + 2246 2240 2245 + 2240 2246 2247 + 2247 2241 2240 + 2241 2247 2242 + 2242 2247 2248 + 2248 2249 2242 + 2243 2242 2249 + 1798 2245 1799 + 2250 2245 1798 + 2245 2250 2246 + 2246 2250 2251 + 2252 2246 2251 + 2247 2246 2252 + 2252 2248 2247 + 2252 2253 2248 + 2248 2253 2254 + 2254 2249 2248 + 1798 1805 2250 + 2250 1805 2255 + 2255 2251 2250 + 2251 2255 2256 + 2256 2257 2251 + 2251 2257 2258 + 2258 2259 2251 + 2251 2259 2252 + 2253 2252 2259 + 1810 2255 1805 + 2256 2255 1810 + 1810 2260 2256 + 2256 2260 2261 + 2261 2262 2256 + 2257 2256 2262 + 2262 2263 2257 + 2257 2263 2264 + 2264 2258 2257 + 2265 2258 2264 + 2266 2260 1810 + 2260 2266 2267 + 2267 2268 2260 + 2260 2268 2261 + 2266 1810 1809 + 1809 1815 2266 + 2266 1815 2269 + 2267 2266 2269 + 2270 2267 2269 + 2271 2267 2270 + 2271 2268 2267 + 2268 2271 2272 + 2272 2261 2268 + 1814 2269 1815 + 1820 2269 1814 + 2269 1820 2273 + 2273 2274 2269 + 2269 2274 2275 + 2275 2270 2269 + 2276 2270 2275 + 2276 2277 2270 + 2270 2277 2271 + 1863 2273 1820 + 2278 2273 1863 + 2273 2278 2274 + 2274 2278 2279 + 2279 2275 2274 + 2279 2280 2275 + 2275 2280 2276 + 2276 2280 2281 + 2281 2282 2276 + 2277 2276 2282 + 1863 2283 2278 + 2278 2283 2284 + 2279 2278 2284 + 2285 2279 2284 + 2280 2279 2285 + 2285 2281 2280 + 2281 2285 2286 + 2281 2286 2287 + 2287 2282 2281 + 2283 1863 2288 + 2283 2288 2289 + 2289 2290 2283 + 2283 2290 2284 + 2288 1863 2291 + 2291 2292 2288 + 2288 2292 2293 + 2293 2289 2288 + 2294 2289 2293 + 2294 2290 2289 + 2290 2294 2295 + 2295 2284 2290 + 2296 2291 1863 + 2297 2291 2296 + 2291 2297 2292 + 2292 2297 2298 + 2298 2293 2292 + 2298 2299 2293 + 2293 2299 2294 + 2294 2299 2300 + 2300 2295 2294 + 2301 2296 1863 + 2302 2296 2301 + 2302 2303 2296 + 2296 2303 2297 + 2298 2297 2303 + 2303 2304 2298 + 2299 2298 2304 + 2304 2305 2299 + 2299 2305 2300 + 1862 2301 1863 + 1875 2301 1862 + 2301 1875 2306 + 2301 2306 2302 + 2302 2306 2307 + 2307 2308 2302 + 2303 2302 2308 + 2308 2304 2303 + 2308 2305 2304 + 2305 2308 2307 + 2307 2309 2305 + 2305 2309 2300 + 2306 1875 2108 + 2108 2310 2306 + 2306 2310 2307 + 2310 2311 2307 + 2312 2307 2311 + 2312 2309 2307 + 2309 2312 2313 + 2313 2300 2309 + 2113 2310 2108 + 2310 2113 2314 + 2314 2311 2310 + 2311 2314 2315 + 2315 2316 2311 + 2311 2316 2312 + 2312 2316 2317 + 2313 2312 2317 + 2318 2314 2113 + 2315 2314 2318 + 2318 2319 2315 + 2320 2315 2319 + 2316 2315 2320 + 2320 2321 2316 + 2316 2321 2317 + 2113 2322 2318 + 2323 2318 2322 + 2318 2323 2324 + 2324 2319 2318 + 2319 2324 2325 + 2325 2326 2319 + 2319 2326 2320 + 2112 2322 2113 + 2112 2118 2322 + 2322 2118 2323 + 2117 2323 2118 + 2324 2323 2117 + 2117 2327 2324 + 2324 2327 2328 + 2328 2325 2324 + 2329 2325 2328 + 2325 2329 2330 + 2330 2326 2325 + 2326 2330 2331 + 2331 2320 2326 + 2327 2117 2123 + 2123 2129 2327 + 2327 2129 2332 + 2332 2328 2327 + 2328 2332 2333 + 2333 2334 2328 + 2328 2334 2329 + 2329 2334 2335 + 2335 2336 2329 + 2330 2329 2336 + 2332 2129 2337 + 2337 2338 2332 + 2333 2332 2338 + 2338 2339 2333 + 2340 2333 2339 + 2334 2333 2340 + 2340 2335 2334 + 2129 2128 2337 + 2341 2337 2128 + 2337 2341 2342 + 2337 2342 2343 + 2343 2338 2337 + 2338 2343 2339 + 2339 2343 2344 + 2344 2345 2339 + 2339 2345 2340 + 2128 2133 2341 + 2346 2341 2133 + 2342 2341 2346 + 2346 2347 2342 + 2342 2347 2344 + 2344 2343 2342 + 2133 2348 2346 + 2349 2346 2348 + 2347 2346 2349 + 2349 2350 2347 + 2347 2350 2351 + 2351 2352 2347 + 2347 2352 2344 + 2132 2348 2133 + 2348 2132 2353 + 2353 2354 2348 + 2348 2354 2349 + 2349 2354 2355 + 2355 2356 2349 + 2350 2349 2356 + 2356 2357 2350 + 2351 2350 2357 + 2353 2132 2358 + 2358 2359 2353 + 2360 2353 2359 + 2354 2353 2360 + 2360 2355 2354 + 2355 2360 2361 + 2361 2362 2355 + 2355 2362 2363 + 2363 2356 2355 + 2357 2356 2363 + 2358 2364 2359 + 2359 2364 2365 + 2365 2366 2359 + 2359 2366 2360 + 2361 2360 2366 + 2364 2358 145 + 145 2367 2364 + 2364 2367 2368 + 2368 2365 2364 + 2369 2365 2368 + 2366 2365 2369 + 2369 2370 2366 + 2366 2370 2361 + 2367 145 2371 + 2371 2372 2367 + 2367 2372 2373 + 2373 2368 2367 + 2373 2374 2368 + 2368 2374 2369 + 2371 145 2375 + 2375 2376 2371 + 2371 2376 2377 + 2377 2378 2371 + 2379 2378 2377 + 2377 2380 2379 + 2375 145 2132 + 2138 2375 2132 + 2381 2375 2138 + 2375 2381 2376 + 2376 2381 2382 + 2382 2383 2376 + 2376 2383 2377 + 2383 2384 2377 + 2385 2377 2384 + 2385 2380 2377 + 2138 2137 2381 + 2381 2137 2386 + 2382 2381 2386 + 2136 2386 2137 + 2387 2386 2136 + 2386 2387 2388 + 2388 2389 2386 + 2388 2390 2389 + 2391 2389 2390 + 2392 2391 2390 + 2136 2393 2387 + 2387 2393 2394 + 2394 2395 2387 + 2387 2395 2396 + 2396 2388 2387 + 2390 2388 2396 + 2396 2397 2390 + 2392 2390 2397 + 2393 2136 2398 + 2398 2399 2393 + 2394 2393 2399 + 2372 2371 2400 + 2400 2401 2372 + 2372 2401 2402 + 2373 2372 2402 + 2402 2403 2373 + 2374 2373 2403 + 2400 2404 2401 + 2403 2405 2374 + 2374 2405 2406 + 2369 2374 2406 + 2406 2407 2369 + 2370 2369 2407 + 2407 2408 2370 + 2361 2370 2408 + 2405 2409 2406 + 2410 2406 2409 + 2411 2406 2410 + 2406 2411 2412 + 2412 2407 2406 + 2407 2412 2413 + 2413 2408 2407 + 2409 2414 2410 + 2410 2414 2415 + 2416 2410 2415 + 2411 2410 2416 + 2416 2417 2411 + 2414 2409 2418 + 2419 2418 2409 + 2420 2418 2419 + 2421 2418 2420 + 2420 2415 2421 + 2422 2415 2420 + 2415 2422 2423 + 2423 2416 2415 + 2423 2424 2416 + 2425 2419 2409 + 2426 2419 2425 + 2419 2426 2427 + 2427 2428 2419 + 2419 2428 2420 + 2422 2420 2428 + 2428 2429 2422 + 2422 2429 1293 + 2423 2422 1293 + 2425 2430 2426 + 2412 2411 2431 + 2429 2428 2427 + 2429 2427 2432 + 2432 2433 2429 + 2429 2433 1293 + 2433 1295 1293 + 1295 1294 1293 + 2427 2426 2432 + 2426 2434 2432 + 2435 2432 2434 + 2433 2432 2435 + 2433 2435 2436 + 2436 1295 2433 + 1295 2436 1290 + 2426 2403 2434 + 2403 2402 2434 + 2437 2434 2402 + 2434 2437 2435 + 2435 2437 2438 + 2438 2436 2435 + 1290 2436 2438 + 2438 2439 1290 + 1290 2439 2440 + 2440 1281 1290 + 2441 2437 2402 + 2401 2441 2402 + 2437 2442 2438 + 2442 2380 2438 + 2443 2438 2380 + 2443 2439 2438 + 2439 2443 2444 + 2444 2440 2439 + 2444 2445 2440 + 2440 2445 2446 + 2446 1281 2440 + 1281 2446 1277 + 2380 2385 2443 + 2443 2385 2447 + 2447 2448 2443 + 2448 2449 2443 + 2449 2444 2443 + 2445 2444 2449 + 2449 2450 2445 + 2446 2445 2450 + 2450 2451 2446 + 1277 2446 2451 + 2385 2452 2447 + 2452 2453 2447 + 2453 2454 2447 + 2454 2455 2447 + 2455 2456 2447 + 2456 2457 2447 + 2458 2447 2457 + 2447 2458 2459 + 2447 2459 2460 + 2460 2448 2447 + 2384 2452 2385 + 2452 2384 2461 + 2452 2461 2462 + 2462 2453 2452 + 2453 2462 2463 + 2453 2463 2397 + 2397 2454 2453 + 2461 2384 2383 + 2383 2464 2461 + 2461 2464 2465 + 2465 2462 2461 + 2463 2462 2465 + 2465 2392 2463 + 2463 2392 2397 + 2382 2464 2383 + 2464 2382 2465 + 2382 2391 2465 + 2454 2397 2396 + 2454 2396 2395 + 2395 2455 2454 + 2455 2395 2394 + 2455 2394 2466 + 2466 2456 2455 + 2456 2466 2467 + 2456 2467 2468 + 2468 2457 2456 + 2457 2468 2469 + 2457 2469 2458 + 2470 2466 2394 + 2467 2466 2470 + 2470 2471 2467 + 2467 2471 2472 + 2472 2473 2467 + 2473 2474 2467 + 2474 2468 2467 + 2469 2468 2474 + 2475 2470 2394 + 2476 2470 2475 + 2476 2471 2470 + 2471 2476 2477 + 2477 2472 2471 + 2477 2478 2472 + 2472 2478 206 + 206 2473 2472 + 2479 2475 2394 + 2480 2475 2479 + 2481 2475 2480 + 2475 2481 2476 + 2476 2481 2482 + 2482 2477 2476 + 2478 2477 2482 + 2482 2483 2478 + 206 2478 2483 + 2483 2484 206 + 2485 206 2484 + 2479 2143 2480 + 2480 2143 2148 + 2481 2480 2148 + 2148 2147 2481 + 2481 2147 2482 + 2147 2486 2482 + 2486 2487 2482 + 2487 2488 2482 + 2488 2489 2482 + 2489 2490 2482 + 2490 2491 2482 + 2491 2492 2482 + 2493 2482 2492 + 2482 2493 2483 + 2146 2486 2147 + 2486 2146 2145 + 2486 2145 2494 + 2494 2487 2486 + 2487 2494 2495 + 2487 2495 2496 + 2496 2488 2487 + 2488 2496 2497 + 2488 2497 2498 + 2498 2489 2488 + 2144 2494 2145 + 2495 2494 2144 + 2144 31 2495 + 2495 31 2499 + 2499 2496 2495 + 2497 2496 2499 + 2499 2500 2497 + 2497 2500 2039 + 2039 2498 2497 + 2501 2498 2039 + 2489 2498 2501 + 2489 2501 2502 + 2502 2490 2489 + 31 2503 2499 + 2503 245 2499 + 2500 2499 245 + 2039 2038 2501 + 2501 2038 2504 + 2504 2502 2501 + 2505 2502 2504 + 2490 2502 2505 + 2490 2505 2506 + 2506 2491 2490 + 2491 2506 2507 + 2491 2507 2508 + 2508 2492 2491 + 2037 2504 2038 + 2050 2504 2037 + 2504 2050 2505 + 2505 2050 2049 + 2049 2509 2505 + 2509 2506 2505 + 2507 2506 2509 + 2509 2510 2507 + 2507 2510 2511 + 2511 2512 2507 + 2512 2513 2507 + 2513 2508 2507 + 2059 2509 2049 + 2059 2510 2509 + 2510 2059 2514 + 2514 2511 2510 + 2514 2515 2511 + 2511 2515 2516 + 2516 2512 2511 + 2517 2514 2059 + 2515 2514 2517 + 2517 2518 2515 + 2515 2518 2519 + 2516 2515 2519 + 2520 2516 2519 + 2521 2516 2520 + 2522 2516 2521 + 2058 2517 2059 + 2523 2517 2058 + 2517 2523 2518 + 2518 2523 2524 + 2524 2519 2518 + 2519 2524 2525 + 2519 2525 2526 + 2526 2520 2519 + 2527 2520 2526 + 2526 2528 2527 + 2058 2529 2523 + 2529 2524 2523 + 2525 2524 2529 + 2529 2530 2525 + 2531 2525 2530 + 2525 2531 2526 + 2528 2526 2531 + 2058 2530 2529 + 2532 2530 2058 + 2530 2532 2533 + 2531 2530 2533 + 2534 2531 2533 + 2531 2534 2528 + 2072 2532 2058 + 2072 2071 2532 + 2532 2071 2533 + 2071 2080 2533 + 2533 2080 2535 + 2533 2535 2534 + 2534 2535 2536 + 2536 2537 2534 + 2528 2534 2537 + 2537 2538 2528 + 2528 2538 2539 + 2539 2540 2528 + 2541 2537 2536 + 2537 2541 2542 + 2542 2538 2537 + 2538 2542 2543 + 2543 2539 2538 + 2536 2544 2541 + 2541 2544 2545 + 2545 2546 2541 + 2542 2541 2546 + 2546 2547 2542 + 2543 2542 2547 + 2544 2536 2548 + 2548 2549 2544 + 2544 2549 2550 + 2550 2545 2544 + 2551 2545 2550 + 2545 2551 2552 + 2552 2546 2545 + 2547 2546 2552 + 2548 2536 2553 + 2553 2554 2548 + 2548 2554 2555 + 2555 2556 2548 + 2549 2548 2556 + 2557 2553 2536 + 2520 2558 2521 + 2520 2559 2558 + 2040 2039 2500 + 2500 2560 2040 + 2484 2561 2485 + 2562 2561 2484 + 2484 2563 2562 + 2562 2563 2564 + 2564 2565 2562 + 2566 2562 2565 + 2567 2562 2566 + 2563 2484 2483 + 2483 2493 2563 + 2564 2563 2493 + 2493 2568 2564 + 2513 2564 2568 + 2564 2513 2565 + 2513 2569 2565 + 2565 2569 2570 + 2570 2571 2565 + 2565 2571 2566 + 2492 2568 2493 + 2492 2508 2568 + 2568 2508 2513 + 2569 2513 2512 + 2512 2572 2569 + 2569 2572 2573 + 2573 2570 2569 + 2574 2570 2573 + 2570 2574 2575 + 2575 2571 2570 + 2571 2575 2576 + 2576 2566 2571 + 2577 2572 2512 + 2572 2577 2578 + 2578 2573 2572 + 2579 2573 2578 + 2573 2579 2574 + 2574 2579 2580 + 2580 2581 2574 + 2575 2574 2581 + 2581 2582 2575 + 2576 2575 2582 + 2583 2578 2577 + 2584 2578 2583 + 2578 2584 2579 + 2579 2584 2585 + 2585 2580 2579 + 2577 2586 2583 + 2539 2583 2586 + 2587 2583 2539 + 2583 2587 2584 + 2584 2587 2588 + 2588 2585 2584 + 2589 2585 2588 + 2580 2585 2589 + 2586 2590 2539 + 2539 2543 2587 + 2587 2543 2591 + 2591 2588 2587 + 2592 2588 2591 + 2588 2592 2589 + 2589 2592 2593 + 2594 2589 2593 + 2595 2589 2594 + 2589 2595 2580 + 2547 2591 2543 + 2592 2591 2547 + 2547 2593 2592 + 2552 2593 2547 + 2593 2552 2596 + 2596 2597 2593 + 2593 2597 2594 + 2598 2594 2597 + 2594 2598 2599 + 2599 2600 2594 + 2594 2600 2595 + 2596 2552 2601 + 2601 2602 2596 + 2603 2596 2602 + 2596 2603 2604 + 2604 2597 2596 + 2597 2604 2598 + 2552 2551 2601 + 2605 2601 2551 + 2606 2601 2605 + 2601 2606 2607 + 2607 2602 2601 + 2608 2602 2607 + 2602 2608 2603 + 2551 2550 2605 + 2605 2550 2549 + 2549 2609 2605 + 2610 2605 2609 + 2605 2610 2606 + 2606 2610 2611 + 2611 2612 2606 + 2606 2612 2613 + 2607 2606 2613 + 2556 2609 2549 + 2609 2556 142 + 142 2614 2609 + 2609 2614 2610 + 2611 2610 2614 + 2614 2615 2611 + 2616 2611 2615 + 2612 2611 2616 + 2612 2616 2617 + 2617 2613 2612 + 142 2556 2555 + 2555 2618 142 + 2619 2259 2258 + 2259 2619 2253 + 2254 2253 2619 + 2620 2254 2619 + 2621 2254 2620 + 2254 2621 2622 + 2622 2249 2254 + 2249 2622 2243 + 2619 2623 2620 + 2624 2620 2623 + 2620 2624 2625 + 2620 2625 2621 + 2626 2621 2625 + 2622 2621 2626 + 2627 2623 2619 + 2623 2627 2628 + 2628 2629 2623 + 2623 2629 2624 + 2630 2624 2629 + 2625 2624 2630 + 2630 2631 2625 + 2625 2631 2626 + 2619 2265 2627 + 2632 2627 2265 + 2628 2627 2632 + 2632 2633 2628 + 2628 2633 2634 + 2634 2635 2628 + 2629 2628 2635 + 2636 2265 2619 + 2637 2166 2165 + 2166 2637 2638 + 2638 2639 2166 + 2166 2639 2167 + 2640 2167 2639 + 2168 2167 2640 + 2640 2641 2168 + 2168 2641 2169 + 2639 2642 2640 + 2643 2640 2642 + 2641 2640 2643 + 2643 2644 2641 + 2641 2644 2645 + 2645 2169 2641 + 2646 2169 2645 + 2169 2646 2164 + 2647 2642 2639 + 2642 2647 2648 + 2648 2649 2642 + 2642 2649 2643 + 2650 2643 2649 + 2644 2643 2650 + 2650 2651 2644 + 2644 2651 2652 + 2652 2645 2644 + 2653 2648 2647 + 2654 2648 2653 + 2648 2654 2649 + 2649 2654 2650 + 2650 2654 2655 + 2656 2650 2655 + 2651 2650 2656 + 2647 2657 2653 + 2657 2658 2653 + 2659 2653 2658 + 2659 2660 2653 + 2653 2660 2654 + 2661 2657 2647 + 2662 2657 2661 + 2657 2662 2663 + 2663 2658 2657 + 2663 2664 2658 + 2658 2664 2659 + 2659 2664 16 + 2647 2638 2661 + 2176 2661 2638 + 2665 2661 2176 + 2661 2665 2662 + 2666 2638 2647 + 2638 2667 2176 + 2176 2180 2665 + 2665 2180 2668 + 2668 2669 2665 + 2662 2665 2669 + 2669 2670 2662 + 2662 2670 2671 + 2663 2662 2671 + 2672 2663 2671 + 2671 2673 2672 + 2184 2668 2180 + 2674 2668 2184 + 2668 2674 2675 + 2675 2669 2668 + 2669 2675 2676 + 2676 2670 2669 + 2670 2676 2677 + 2677 2671 2670 + 2184 2188 2674 + 2674 2188 2678 + 2678 2679 2674 + 2675 2674 2679 + 2679 2680 2675 + 2676 2675 2680 + 2680 2681 2676 + 2677 2676 2681 + 2192 2678 2188 + 2682 2678 2192 + 2678 2682 2683 + 2683 2679 2678 + 2679 2683 2684 + 2684 2680 2679 + 2680 2684 2685 + 2685 2681 2680 + 2192 2197 2682 + 2682 2197 2686 + 2686 2687 2682 + 2683 2682 2687 + 2687 2688 2683 + 2683 2688 2689 + 2684 2683 2689 + 2689 2690 2684 + 2685 2684 2690 + 2691 2686 2197 + 2692 2686 2691 + 2686 2692 2693 + 2693 2687 2686 + 2693 2688 2687 + 2688 2693 2694 + 2694 2689 2688 + 2197 2196 2691 + 2202 2691 2196 + 2695 2691 2202 + 2691 2695 2692 + 2692 2695 2696 + 2696 2697 2692 + 2692 2697 2694 + 2694 2693 2692 + 2202 2698 2695 + 2695 2698 2699 + 2699 2696 2695 + 2700 2696 2699 + 2696 2700 2701 + 2698 2202 2201 + 2201 2702 2698 + 2698 2702 2703 + 2703 2699 2698 + 2704 2699 2703 + 2699 2704 2700 + 2700 2704 2705 + 2705 2706 2700 + 2701 2700 2706 + 2702 2201 2206 + 2206 2707 2702 + 2702 2707 2708 + 2708 2703 2702 + 2709 2703 2708 + 2703 2709 2704 + 2704 2709 2710 + 2710 2705 2704 + 2707 2206 2210 + 2210 2711 2707 + 2707 2711 2712 + 2712 2708 2707 + 2713 2708 2712 + 2708 2713 2709 + 2709 2713 2714 + 2714 2710 2709 + 2711 2210 2214 + 2214 2715 2711 + 2711 2715 2716 + 2716 2712 2711 + 2717 2712 2716 + 2712 2717 2713 + 2713 2717 2718 + 2718 2714 2713 + 2715 2214 2218 + 2218 2719 2715 + 2715 2719 2720 + 2720 2716 2715 + 2721 2716 2720 + 2716 2721 2717 + 2717 2721 2722 + 2722 2718 2717 + 2719 2218 2723 + 2723 2724 2719 + 2719 2724 2725 + 2725 2720 2719 + 2726 2720 2725 + 2720 2726 2721 + 2721 2726 2727 + 2727 2722 2721 + 2723 2218 2223 + 2728 2723 2223 + 2729 2723 2728 + 2729 2724 2723 + 2724 2729 2730 + 2730 2725 2724 + 2730 2731 2725 + 2725 2731 2726 + 2726 2731 2732 + 2223 2733 2728 + 2734 2728 2733 + 2734 2735 2728 + 2728 2735 2729 + 2729 2735 2736 + 2736 2730 2729 + 2737 2730 2736 + 2738 2733 2223 + 2738 2739 2733 + 2733 2739 2734 + 2740 2734 2739 + 2735 2734 2740 + 2740 2741 2735 + 2735 2741 2736 + 2223 2234 2738 + 2742 2738 2234 + 2739 2738 2742 + 2742 2743 2739 + 2739 2743 2740 + 2743 2744 2740 + 2744 2745 2740 + 2746 2740 2745 + 2746 2741 2740 + 2234 2747 2742 + 2748 2742 2747 + 2742 2748 2749 + 2749 2743 2742 + 2743 2749 2750 + 2750 2744 2743 + 2233 2747 2234 + 2751 2747 2233 + 2747 2751 2748 + 2752 2748 2751 + 2749 2748 2752 + 2752 2753 2749 + 2749 2753 2754 + 2754 2750 2749 + 2755 2750 2754 + 2744 2750 2755 + 2233 2239 2751 + 2751 2239 2238 + 2238 2756 2751 + 2751 2756 2752 + 2757 2752 2756 + 2752 2757 2758 + 2758 2753 2752 + 2753 2758 2759 + 2759 2754 2753 + 2760 2756 2238 + 2756 2760 2757 + 2757 2760 2761 + 2761 2762 2757 + 2758 2757 2762 + 2762 2763 2758 + 2758 2763 2764 + 2764 2759 2758 + 2238 2765 2760 + 2760 2765 2766 + 2766 2761 2760 + 2761 2766 2626 + 2626 2767 2761 + 2761 2767 2768 + 2768 2762 2761 + 2763 2762 2768 + 2765 2238 2237 + 2237 2243 2765 + 2765 2243 2622 + 2622 2766 2765 + 2626 2766 2622 + 2727 2726 2769 + 2767 2626 2631 + 2631 2770 2767 + 2767 2770 2771 + 2771 2768 2767 + 2772 2768 2771 + 2768 2772 2763 + 2763 2772 2773 + 2773 2764 2763 + 2770 2631 2630 + 2630 2774 2770 + 2770 2774 2775 + 2775 2771 2770 + 2776 2771 2775 + 2771 2776 2772 + 2772 2776 2777 + 2777 2773 2772 + 2774 2630 2778 + 2778 2779 2774 + 2774 2779 2780 + 2780 2775 2774 + 2781 2775 2780 + 2775 2781 2776 + 2776 2781 2782 + 2782 2777 2776 + 2778 2630 2629 + 2629 2783 2778 + 2784 2778 2783 + 2784 2779 2778 + 2779 2784 2785 + 2785 2780 2779 + 2786 2780 2785 + 2780 2786 2781 + 2781 2786 2787 + 2787 2782 2781 + 2635 2783 2629 + 2788 2783 2635 + 2783 2788 2784 + 2784 2788 2789 + 2789 2790 2784 + 2790 2791 2784 + 2791 2785 2784 + 2792 2785 2791 + 2785 2792 2786 + 2635 2793 2788 + 2788 2793 2794 + 2794 2789 2788 + 2795 2789 2794 + 2789 2795 2796 + 2796 2790 2789 + 2793 2635 2634 + 2634 2797 2793 + 2794 2793 2797 + 2797 2798 2794 + 2799 2794 2798 + 2794 2799 2795 + 2800 2797 2634 + 2797 2800 2801 + 2801 2798 2797 + 2801 2802 2798 + 2798 2802 2799 + 2799 2802 2803 + 2803 2804 2799 + 2795 2799 2804 + 2634 2805 2800 + 2800 2805 2806 + 2806 2807 2800 + 2801 2800 2807 + 2808 2801 2807 + 2802 2801 2808 + 2808 2809 2802 + 2802 2809 2803 + 2805 2634 2810 + 2810 2811 2805 + 2805 2811 2812 + 2812 2806 2805 + 2813 2806 2812 + 2813 2807 2806 + 2633 2810 2634 + 2814 2810 2633 + 2814 2811 2810 + 2811 2814 2815 + 2815 2812 2811 + 2812 2815 2816 + 2816 2817 2812 + 2812 2817 2813 + 2633 2818 2814 + 2814 2818 2819 + 2819 2815 2814 + 2816 2815 2819 + 2819 2820 2816 + 2816 2820 2821 + 2821 2822 2816 + 2817 2816 2822 + 2818 2633 2632 + 2632 2823 2818 + 2818 2823 2824 + 2824 2819 2818 + 2820 2819 2824 + 2824 2825 2820 + 2820 2825 2826 + 2826 2821 2820 + 2823 2632 2827 + 2827 2828 2823 + 2823 2828 2829 + 2829 2824 2823 + 2825 2824 2829 + 2829 2830 2825 + 2825 2830 2831 + 2831 2826 2825 + 2265 2827 2632 + 2264 2827 2265 + 2828 2827 2264 + 2264 2832 2828 + 2828 2832 2833 + 2833 2829 2828 + 2829 2833 2834 + 2834 2830 2829 + 2830 2834 2835 + 2835 2831 2830 + 2832 2264 2263 + 2263 2836 2832 + 2832 2836 2837 + 2837 2833 2832 + 2834 2833 2837 + 2837 2838 2834 + 2834 2838 2839 + 2839 2835 2834 + 2262 2836 2263 + 2836 2262 2261 + 2261 2840 2836 + 2836 2840 2837 + 2841 2837 2840 + 2841 2838 2837 + 2838 2841 2842 + 2842 2843 2838 + 2838 2843 2839 + 2844 2840 2261 + 2840 2844 2841 + 2841 2844 2845 + 2842 2841 2845 + 2845 2846 2842 + 2847 2842 2846 + 2847 2843 2842 + 2843 2847 2848 + 2848 2839 2843 + 2261 2272 2844 + 2844 2272 2849 + 2849 2845 2844 + 2845 2849 2850 + 2845 2850 2851 + 2851 2846 2845 + 2852 2846 2851 + 2846 2852 2847 + 2847 2852 2853 + 2853 2848 2847 + 2854 2849 2272 + 2850 2849 2854 + 2854 2287 2850 + 2850 2287 2855 + 2851 2850 2855 + 2856 2851 2855 + 2852 2851 2856 + 2856 2857 2852 + 2852 2857 2853 + 2272 2271 2854 + 2271 2277 2854 + 2282 2854 2277 + 2854 2282 2287 + 2287 2286 2855 + 2286 2858 2855 + 2858 2859 2855 + 2860 2855 2859 + 2860 2861 2855 + 2855 2861 2862 + 2862 2863 2855 + 2855 2863 2856 + 2864 2858 2286 + 2864 2865 2858 + 2858 2865 2866 + 2866 2859 2858 + 2866 2867 2859 + 2859 2867 2860 + 2286 2285 2864 + 2284 2864 2285 + 2865 2864 2284 + 2284 2868 2865 + 2865 2868 2869 + 2869 2866 2865 + 2867 2866 2869 + 2869 2870 2867 + 2860 2867 2870 + 2870 2871 2860 + 2861 2860 2871 + 2295 2868 2284 + 2868 2295 2300 + 2300 2872 2868 + 2868 2872 2869 + 2872 2873 2869 + 2874 2869 2873 + 2869 2874 2875 + 2875 2870 2869 + 2870 2875 2876 + 2876 2871 2870 + 2313 2872 2300 + 2872 2313 2877 + 2877 2873 2872 + 2877 2878 2873 + 2873 2878 2874 + 2879 2874 2878 + 2875 2874 2879 + 2879 2880 2875 + 2875 2880 2881 + 2881 2876 2875 + 2317 2877 2313 + 2878 2877 2317 + 2317 2882 2878 + 2878 2882 2879 + 2882 2883 2879 + 2884 2879 2883 + 2884 2880 2879 + 2880 2884 2885 + 2885 2881 2880 + 2886 2882 2317 + 2882 2886 2887 + 2887 2883 2882 + 2887 2888 2883 + 2883 2888 2884 + 2884 2888 2889 + 2885 2884 2889 + 2886 2317 2321 + 2321 2890 2886 + 2886 2890 2891 + 2887 2886 2891 + 2891 2892 2887 + 2888 2887 2892 + 2892 2889 2888 + 2890 2321 2320 + 2320 2331 2890 + 2890 2331 2893 + 2893 2891 2890 + 2891 2893 2894 + 2894 2895 2891 + 2891 2895 2896 + 2896 2892 2891 + 2892 2896 2897 + 2897 2889 2892 + 2898 2893 2331 + 2894 2893 2898 + 2898 2899 2894 + 2894 2899 2900 + 2900 2901 2894 + 2895 2894 2901 + 2331 2330 2898 + 2336 2898 2330 + 2898 2336 2902 + 2902 2899 2898 + 2899 2902 2903 + 2903 2900 2899 + 2900 2903 2904 + 2904 2905 2900 + 2900 2905 2906 + 2906 2901 2900 + 2902 2336 2335 + 2335 2907 2902 + 2902 2907 2908 + 2908 2903 2902 + 2904 2903 2908 + 2908 2909 2904 + 2910 2904 2909 + 2905 2904 2910 + 2910 2911 2905 + 2906 2905 2911 + 2907 2335 2340 + 2340 2912 2907 + 2907 2912 2913 + 2913 2908 2907 + 2908 2913 2914 + 2914 2909 2908 + 2909 2914 2915 + 2915 2916 2909 + 2909 2916 2910 + 2912 2340 2917 + 2917 2918 2912 + 2913 2912 2918 + 2918 2919 2913 + 2914 2913 2919 + 2919 2920 2914 + 2914 2920 2921 + 2921 2915 2914 + 2345 2917 2340 + 2922 2917 2345 + 2917 2922 2923 + 2923 2918 2917 + 2918 2923 2924 + 2924 2919 2918 + 2924 2920 2919 + 2920 2924 2925 + 2925 2921 2920 + 2345 2926 2922 + 2927 2922 2926 + 2923 2922 2927 + 2927 2928 2923 + 2924 2923 2928 + 2928 2925 2924 + 2929 2925 2928 + 2925 2929 2930 + 2930 2921 2925 + 2344 2926 2345 + 2926 2344 2931 + 2931 2932 2926 + 2926 2932 2927 + 2933 2927 2932 + 2927 2933 2934 + 2934 2928 2927 + 2928 2934 2929 + 2352 2931 2344 + 2935 2931 2352 + 2931 2935 2936 + 2936 2932 2931 + 2932 2936 2933 + 2933 2936 2937 + 2938 2933 2937 + 2934 2933 2938 + 2938 2939 2934 + 2929 2934 2939 + 2352 2940 2935 + 2935 2940 2941 + 2941 2942 2935 + 2936 2935 2942 + 2942 2937 2936 + 2943 2940 2352 + 2940 2943 2944 + 2944 2941 2940 + 2945 2941 2944 + 2941 2945 2946 + 2946 2942 2941 + 2942 2946 2947 + 2947 2937 2942 + 2352 2351 2943 + 2943 2351 2948 + 2948 2949 2943 + 2943 2949 2950 + 2950 2944 2943 + 2945 2944 2950 + 2950 2951 2945 + 2945 2951 2952 + 2952 2946 2945 + 2947 2946 2952 + 2357 2948 2351 + 2953 2948 2357 + 2949 2948 2953 + 2953 2954 2949 + 2949 2954 2955 + 2955 2956 2949 + 2949 2956 2950 + 2957 2950 2956 + 2951 2950 2957 + 2357 2958 2953 + 2959 2953 2958 + 2954 2953 2959 + 2959 2960 2954 + 2955 2954 2960 + 2960 2961 2955 + 2962 2955 2961 + 2955 2962 2956 + 2956 2962 2957 + 2363 2958 2357 + 2958 2363 2963 + 2963 2964 2958 + 2958 2964 2959 + 2965 2959 2964 + 2959 2965 2966 + 2966 2960 2959 + 2960 2966 2967 + 2967 2961 2960 + 2963 2363 2362 + 2362 2968 2963 + 2969 2963 2968 + 2963 2969 2970 + 2970 2964 2963 + 2964 2970 2965 + 2965 2970 2971 + 2971 2972 2965 + 2966 2965 2972 + 2973 2968 2362 + 2974 2968 2973 + 2968 2974 2969 + 2969 2974 2975 + 2975 2976 2969 + 2970 2969 2976 + 2976 2971 2970 + 2362 2361 2973 + 2408 2973 2361 + 2977 2973 2408 + 2973 2977 2974 + 2974 2977 2978 + 2978 2975 2974 + 2979 2975 2978 + 2975 2979 2980 + 2980 2976 2975 + 2976 2980 2981 + 2981 2971 2976 + 2408 2413 2977 + 2978 2977 2413 + 2413 2982 2978 + 2983 2978 2982 + 2978 2983 2979 + 2979 2983 2984 + 2984 2985 2979 + 2979 2985 2986 + 2986 2980 2979 + 2981 2980 2986 + 2987 2982 2413 + 2988 2982 2987 + 2982 2988 2983 + 2983 2988 2989 + 2989 2984 2983 + 2990 2984 2989 + 2984 2990 2991 + 2991 2985 2984 + 2413 2412 2987 + 2987 2412 2992 + 2993 2987 2992 + 2664 2663 2994 + 2663 2995 2994 + 1714 2996 1715 + 2996 1714 2997 + 2997 2989 2996 + 2996 2989 2988 + 2988 134 2996 + 2998 2996 134 + 2997 1714 1721 + 1721 2999 2997 + 2997 2999 3000 + 3000 2990 2997 + 2989 2997 2990 + 1727 2999 1721 + 2999 1727 3001 + 3001 3000 2999 + 3002 3000 3001 + 3000 3002 2991 + 2991 2990 3000 + 13 3001 1727 + 3002 3001 13 + 13 3003 3002 + 1727 3004 13 + 3004 3005 13 + 3006 13 3005 + 3005 3007 3006 + 1726 3004 1727 + 2153 3004 1726 + 3004 2153 3008 + 3008 3005 3004 + 3005 3008 3009 + 3009 3007 3005 + 3007 3009 3010 + 3010 3011 3007 + 3012 3007 3011 + 2164 3008 2153 + 3009 3008 2164 + 2164 2646 3009 + 3009 2646 3013 + 3013 3010 3009 + 3014 3010 3013 + 3011 3010 3014 + 3014 3015 3011 + 3011 3015 3016 + 3016 3017 3011 + 3011 3017 3018 + 2645 3013 2646 + 3013 2645 2652 + 2652 3019 3013 + 3013 3019 3014 + 3014 3019 3020 + 3020 3021 3014 + 3015 3014 3021 + 3021 3022 3015 + 3015 3022 3023 + 3016 3015 3023 + 3019 2652 3024 + 3024 3020 3019 + 3025 3020 3024 + 3020 3025 3026 + 3026 3021 3020 + 3021 3026 3027 + 3027 3022 3021 + 3022 3027 3028 + 3028 3023 3022 + 3024 2652 2651 + 2651 3029 3024 + 3030 3024 3029 + 3029 3031 3030 + 3030 3031 3032 + 2656 3029 2651 + 3029 2656 3033 + 3033 3031 3029 + 3031 3033 3034 + 3034 3032 3031 + 3033 2656 3035 + 3035 3036 3033 + 3034 3033 3036 + 3036 3037 3034 + 3038 3034 3037 + 3032 3034 3038 + 3039 3036 3035 + 3036 3039 3040 + 3040 3037 3036 + 3040 3041 3037 + 3037 3041 3038 + 3042 3040 3039 + 3041 3040 3042 + 3042 3043 3041 + 3038 3041 3043 + 3043 3044 3038 + 3044 3045 3038 + 3046 3038 3045 + 3038 3046 3032 + 3039 3047 3042 + 3047 3048 3042 + 3049 3042 3048 + 3049 3043 3042 + 3043 3049 3050 + 3050 3044 3043 + 3050 3051 3044 + 3044 3051 3052 + 3052 3045 3044 + 3053 3048 3047 + 3048 3053 3054 + 3054 3053 3055 + 3055 3056 3054 + 3047 3057 3053 + 3053 3057 3058 + 3055 3053 3058 + 3058 3059 3055 + 3060 3055 3059 + 3055 3060 3061 + 3061 3056 3055 + 3057 3047 3062 + 3057 3062 3063 + 3063 3058 3057 + 3064 3058 3063 + 3058 3064 3065 + 3065 3059 3058 + 3066 3059 3065 + 3059 3066 3060 + 3062 3047 3067 + 3067 3068 3062 + 3062 3068 2659 + 3063 3062 2659 + 3069 3063 2659 + 3070 3068 3067 + 3068 3070 2660 + 2660 2659 3068 + 2660 3070 3071 + 3052 3051 3072 + 3028 3027 3073 + 3024 3074 3025 + 3064 3063 3075 + 3075 3076 3064 + 3064 3076 3077 + 3077 3065 3064 + 3078 3065 3077 + 3065 3078 3066 + 3066 3078 3079 + 3079 3080 3066 + 3060 3066 3080 + 3080 3081 3060 + 3061 3060 3081 + 3077 3082 3078 + 3078 3082 3083 + 3079 3078 3083 + 3083 3084 3079 + 3085 3079 3084 + 3079 3085 3086 + 3086 3080 3079 + 3082 3077 2673 + 3082 2673 2671 + 2671 3083 3082 + 2677 3083 2671 + 3083 2677 3087 + 3087 3084 3083 + 3088 3084 3087 + 3084 3088 3085 + 2673 3077 15 + 15 3089 2673 + 2681 3087 2677 + 3090 3087 2681 + 3087 3090 3088 + 3088 3090 3091 + 3091 3092 3088 + 3085 3088 3092 + 3092 3093 3085 + 3086 3085 3093 + 2681 2685 3090 + 3090 2685 3094 + 3094 3091 3090 + 3095 3091 3094 + 3091 3095 3096 + 3096 3092 3091 + 3092 3096 3097 + 3097 3093 3092 + 2690 3094 2685 + 3098 3094 2690 + 3094 3098 3095 + 3095 3098 3099 + 3099 3100 3095 + 3096 3095 3100 + 3100 3101 3096 + 3097 3096 3101 + 2690 3102 3098 + 3098 3102 3103 + 3103 3099 3098 + 3104 3099 3103 + 3099 3104 3105 + 3105 3100 3099 + 3100 3105 3106 + 3106 3101 3100 + 3102 2690 2689 + 2689 3107 3102 + 3103 3102 3107 + 3107 3108 3103 + 3109 3103 3108 + 3103 3109 3104 + 3104 3109 3110 + 3110 3111 3104 + 3105 3104 3111 + 3107 2689 2694 + 3107 2694 3112 + 3112 3108 3107 + 3113 3108 3112 + 3108 3113 3109 + 3109 3113 3114 + 3114 3110 3109 + 3115 3110 3114 + 3110 3115 3116 + 3116 3111 3110 + 2697 3112 2694 + 3112 2697 2701 + 3117 3112 2701 + 3112 3117 3118 + 3117 2701 3119 + 3119 3120 3117 + 3113 3117 3120 + 3120 3114 3113 + 3121 3114 3120 + 3114 3121 3115 + 3115 3121 3122 + 3122 3123 3115 + 3116 3115 3123 + 2706 3119 2701 + 3124 3119 2706 + 3119 3124 3125 + 3125 3120 3119 + 3120 3125 3121 + 3121 3125 3126 + 3126 3122 3121 + 3126 3127 3122 + 3122 3127 3128 + 3128 3123 3122 + 2706 3129 3124 + 3124 3129 3130 + 3130 3131 3124 + 3124 3131 3126 + 3126 3125 3124 + 3129 2706 2705 + 2705 3132 3129 + 3130 3129 3132 + 3132 3133 3130 + 3134 3130 3133 + 3130 3134 3135 + 3135 3131 3130 + 3132 2705 2710 + 2710 3136 3132 + 3132 3136 3137 + 3137 3133 3132 + 3138 3133 3137 + 3133 3138 3134 + 3139 3134 3138 + 3135 3134 3139 + 3136 2710 2714 + 2714 3140 3136 + 3137 3136 3140 + 3140 3141 3137 + 3142 3137 3141 + 3137 3142 3138 + 3138 3142 3143 + 3143 3144 3138 + 3138 3144 3139 + 3140 2714 2718 + 2718 3145 3140 + 3140 3145 3146 + 3146 3141 3140 + 3147 3141 3146 + 3141 3147 3142 + 3143 3142 3147 + 3145 2718 2722 + 2722 3148 3145 + 3146 3145 3148 + 3148 3149 3146 + 3150 3146 3149 + 3146 3150 3147 + 3147 3150 3151 + 3151 3152 3147 + 3147 3152 3143 + 3148 2722 2727 + 2727 3153 3148 + 3148 3153 3154 + 3154 3149 3148 + 3155 3149 3154 + 3149 3155 3150 + 3151 3150 3155 + 3153 2727 115 + 115 3156 3153 + 3154 3153 3156 + 3156 3157 3154 + 3158 3154 3157 + 3154 3158 3155 + 115 2727 3159 + 3160 3026 3025 + 3027 3026 3160 + 3160 3161 3027 + 2987 134 2988 + 134 2987 3162 + 3162 1707 134 + 3163 1305 1304 + 3164 1305 3163 + 3164 3165 1305 + 3166 3165 3164 + 3167 3166 3164 + 3163 3168 3164 + 3169 3164 3168 + 3170 3169 3168 + 3168 3171 3170 + 3172 3170 3171 + 3171 3173 3172 + 3174 3168 3163 + 3168 3174 3175 + 3175 3171 3168 + 3173 3171 3175 + 3173 3175 1703 + 1703 150 3173 + 1703 3175 3174 + 150 1703 1702 + 150 1702 3176 + 3176 3177 150 + 150 3177 1293 + 1293 3172 150 + 1299 3172 1293 + 1701 3176 1702 + 138 3176 1701 + 1701 3178 138 + 3179 3178 1701 + 3177 2423 1293 + 2423 3177 3180 + 3181 2423 3180 + 3177 3176 3180 + 1272 1271 3182 + 3182 1271 3183 + 3183 3184 3182 + 3185 3182 3184 + 3182 3185 2460 + 3186 3182 2460 + 3182 3186 3187 + 1277 3183 1271 + 2451 3183 1277 + 3183 2451 3184 + 3184 2451 2450 + 2450 3188 3184 + 3184 3188 3185 + 2448 3185 3188 + 2448 2460 3185 + 2449 3188 2450 + 3188 2449 2448 + 3186 2460 2459 + 2459 3189 3186 + 1272 3186 3189 + 3189 1273 1272 + 3190 1273 3189 + 1273 3190 1265 + 3191 3189 2459 + 3189 3191 3190 + 3190 3191 3192 + 3192 3193 3190 + 1265 3190 3193 + 3194 1265 3193 + 1254 1265 3194 + 3194 1255 1254 + 2459 2458 3191 + 3192 3191 2458 + 2458 2469 3192 + 2474 3192 2469 + 3193 3192 2474 + 3193 2474 2473 + 2473 3195 3193 + 3193 3195 3194 + 3196 3194 3195 + 1255 3194 3196 + 3196 1256 1255 + 1256 3196 3197 + 3197 3198 1256 + 1256 3198 1248 + 3199 3195 2473 + 3195 3200 3196 + 3196 3200 2567 + 2567 3197 3196 + 2566 3197 2567 + 3198 3197 2566 + 2566 2576 3198 + 3198 2576 3201 + 3201 1248 3198 + 1248 3201 1243 + 1243 3201 2582 + 2582 1244 1243 + 3202 1244 2582 + 1244 3202 1236 + 2582 3201 2576 + 2582 2581 3202 + 3202 2581 2580 + 2580 2595 3202 + 1236 3202 2595 + 2595 2600 1236 + 1231 1236 2600 + 2600 2599 1231 + 1231 2599 1224 + 1225 1224 2599 + 2599 2598 1225 + 1226 1225 2598 + 2598 2604 1226 + 3203 1226 2604 + 1219 1226 3203 + 1219 3203 3204 + 3204 1220 1219 + 1220 3204 3205 + 1220 3205 1221 + 2604 2603 3203 + 3204 3203 2603 + 2603 2608 3204 + 3205 3204 2608 + 2608 3206 3205 + 1221 3205 3206 + 3206 3207 1221 + 3208 1221 3207 + 1221 3208 1213 + 1213 3208 3209 + 3209 1214 1213 + 2607 3206 2608 + 3206 2607 3210 + 3210 3207 3206 + 3207 3210 3211 + 3211 3212 3207 + 3207 3212 3208 + 3209 3208 3212 + 2613 3210 2607 + 3211 3210 2613 + 2613 3213 3211 + 3211 3213 3214 + 3214 3215 3211 + 3212 3211 3215 + 3215 3216 3212 + 3212 3216 3209 + 3213 2613 2617 + 2617 3217 3213 + 3213 3217 3218 + 3218 3214 3213 + 3219 3214 3218 + 3214 3219 3220 + 3220 3215 3214 + 3216 3215 3220 + 3217 2617 3221 + 3221 3222 3217 + 3218 3217 3222 + 3222 3223 3218 + 3224 3218 3223 + 3218 3224 3219 + 3225 3221 2617 + 3226 3221 3225 + 3221 3226 3227 + 3227 3222 3221 + 3222 3227 3228 + 3228 3223 3222 + 2617 2616 3225 + 2615 3225 2616 + 3229 3225 2615 + 3225 3229 3226 + 3226 3229 2097 + 3230 3226 2097 + 3227 3226 3230 + 3230 3231 3227 + 3228 3227 3231 + 2615 3232 3229 + 3229 3232 3233 + 3233 2097 3229 + 3232 2615 2614 + 2614 142 3232 + 3233 3232 142 + 2097 2101 3230 + 3234 3230 2101 + 3231 3230 3234 + 3234 3235 3231 + 3231 3235 3236 + 3236 3237 3231 + 3231 3237 3228 + 3238 3228 3237 + 3223 3228 3238 + 2101 2100 3234 + 3239 3234 2100 + 3235 3234 3239 + 3239 3240 3235 + 3235 3240 3241 + 3235 3241 3236 + 3241 3242 3236 + 3243 3236 3242 + 3236 3243 3244 + 3244 3237 3236 + 3237 3244 3238 + 3245 3238 3244 + 3246 3238 3245 + 3238 3246 3223 + 3241 3247 3242 + 3247 3248 3242 + 3242 3248 3249 + 3242 3249 3243 + 3243 3249 3250 + 3250 3251 3243 + 3251 3252 3243 + 3244 3243 3252 + 3252 3253 3244 + 3244 3253 3245 + 3254 3245 3253 + 3255 3245 3254 + 3245 3255 3246 + 3251 3256 3252 + 3256 3257 3252 + 3252 3257 3258 + 3258 3253 3252 + 3253 3258 3254 + 3259 3254 3258 + 3260 3254 3259 + 3254 3260 3255 + 3257 3256 3261 + 3223 3246 3224 + 3262 3224 3246 + 3219 3224 3262 + 3262 3263 3219 + 3219 3263 3264 + 3220 3219 3264 + 3246 3255 3262 + 3265 3262 3255 + 3263 3262 3265 + 3263 3265 3266 + 3266 3264 3263 + 3255 3260 3265 + 3266 3265 3260 + 3260 3267 3266 + 3268 3266 3267 + 3264 3266 3268 + 3268 3269 3264 + 3264 3269 3270 + 3270 3271 3264 + 3264 3271 3220 + 3259 3267 3260 + 3267 3259 3272 + 3272 3273 3267 + 3267 3273 3268 + 3268 3273 3274 + 3274 3275 3268 + 3269 3268 3275 + 3272 3259 3276 + 3276 3277 3272 + 3272 3277 3278 + 3279 3272 3278 + 3273 3272 3279 + 3279 3274 3273 + 3258 3276 3259 + 3280 3276 3258 + 3277 3276 3280 + 3280 3281 3277 + 3277 3281 3282 + 3282 3278 3277 + 3258 3257 3280 + 3283 3280 3257 + 1102 1101 1109 + 1109 3284 1102 + 1102 3284 3285 + 1103 1102 3285 + 3286 1103 3285 + 3287 1103 3286 + 3287 1097 1103 + 1097 3287 3288 + 3288 1098 1097 + 1092 1098 3288 + 3289 3286 3285 + 3290 3286 3289 + 3290 3291 3286 + 3286 3291 3287 + 3288 3287 3291 + 3285 3292 3289 + 3293 3289 3292 + 3294 3289 3293 + 3289 3294 3290 + 3290 3294 3295 + 3295 3296 3290 + 3291 3290 3296 + 3297 3292 3285 + 3297 3298 3292 + 3292 3298 3293 + 3285 3299 3297 + 3297 3299 3300 + 3300 3301 3297 + 3298 3297 3301 + 3301 3302 3298 + 3293 3298 3302 + 3303 3299 3285 + 3299 3303 3304 + 3304 3305 3299 + 3299 3305 3306 + 3305 3307 3306 + 3308 3307 3305 + 3285 3309 3303 + 3303 3309 3310 + 3310 3311 3303 + 3304 3303 3311 + 3311 3312 3304 + 3313 3304 3312 + 3305 3304 3313 + 3305 3313 3308 + 3309 3285 3314 + 3314 3315 3309 + 3309 3315 3316 + 3316 3310 3309 + 3317 3310 3316 + 3311 3310 3317 + 3311 3317 3318 + 3318 3312 3311 + 3319 3312 3318 + 3312 3319 3313 + 3308 3313 3319 + 3315 3320 3316 + 3320 3321 3316 + 3316 3321 3322 + 3316 3322 3317 + 3317 3322 3323 + 3318 3317 3323 + 3324 3318 3323 + 3319 3318 3324 + 3325 3320 3315 + 3320 3325 3326 + 3326 3327 3320 + 3321 3320 3327 + 3328 3321 3327 + 3322 3321 3328 + 3328 3329 3322 + 3322 3329 3323 + 3326 3325 3330 + 3327 3326 3331 + 1020 1019 3332 + 3332 3333 1020 + 3334 1020 3333 + 1020 3334 3335 + 3335 1021 1020 + 3336 3333 3332 + 3333 3336 3337 + 3337 3338 3333 + 3333 3338 3334 + 3334 3338 3339 + 3339 3340 3334 + 3335 3334 3340 + 3332 1027 3336 + 1027 3341 3336 + 3337 3336 3342 + 3342 3343 3337 + 3344 3337 3343 + 3338 3337 3344 + 3344 3339 3338 + 3339 3344 3345 + 3345 3346 3339 + 3339 3346 3347 + 3347 3340 3339 + 3340 3347 3348 + 3348 3349 3340 + 3340 3349 3335 + 3350 3335 3349 + 1021 3335 3350 + 3346 3345 3351 + 3351 3352 3346 + 3347 3346 3352 + 3353 3347 3352 + 3348 3347 3353 + 3353 3354 3348 + 3348 3354 3355 + 3355 3356 3348 + 3349 3348 3356 + 3357 3352 3351 + 3352 3357 3358 + 3358 3359 3352 + 3352 3359 3353 + 3360 3353 3359 + 3353 3360 3361 + 3361 3354 3353 + 3354 3361 3362 + 3362 3355 3354 + 3363 3358 3357 + 3364 3358 3363 + 3358 3364 3365 + 3365 3359 3358 + 3359 3365 3360 + 3360 3365 3366 + 3366 3367 3360 + 3361 3360 3367 + 3363 3368 3364 + 3369 3364 3368 + 3365 3364 3369 + 3369 3370 3365 + 3371 3370 3369 + 3368 3363 3372 + 3372 3373 3368 + 3368 3373 3374 + 3374 3375 3368 + 3368 3375 3369 + 3376 3369 3375 + 3372 3363 3377 + 3377 3378 3372 + 3379 3372 3378 + 3373 3372 3379 + 3379 3380 3373 + 3373 3380 3381 + 3381 3374 3373 + 3382 3374 3381 + 3375 3374 3382 + 3375 3382 3376 + 3376 3382 3383 + 3384 3376 3383 + 3378 3385 3379 + 3386 3379 3385 + 3380 3379 3386 + 3386 3387 3380 + 3380 3387 3388 + 3388 3389 3380 + 3380 3389 3381 + 3390 3385 3378 + 3391 3385 3390 + 3385 3391 3386 + 3386 3391 3392 + 3392 3393 3386 + 3387 3386 3393 + 3393 3394 3387 + 3387 3394 3395 + 3378 3396 3390 + 3397 3390 3396 + 3398 3390 3397 + 3390 3398 3391 + 3391 3398 3399 + 3399 3392 3391 + 3396 3378 3400 + 3401 3388 3387 + 3381 3383 3382 + 3383 3381 3402 + 3383 3402 3403 + 3403 3404 3383 + 3383 3404 3384 + 3402 3381 3389 + 3389 3405 3402 + 3402 3405 3406 + 3403 3402 3406 + 3406 3407 3403 + 3408 3403 3407 + 3403 3408 3409 + 3409 3404 3403 + 3389 3388 3405 + 3405 3388 3410 + 3410 3406 3405 + 972 533 532 + 3411 533 972 + 3412 3413 3414 + 3414 3415 3412 + 3412 3415 3416 + 3416 3417 3412 + 3418 3417 3416 + 3418 3416 3419 + 3419 3420 3418 + 3418 3420 3421 + 3420 3419 3422 + 3420 3422 3423 + 3422 3424 3423 + 3425 3426 181 + 181 3426 3427 + 3427 3428 181 + 3427 3429 3428 + 3430 3431 3432 + 3430 3432 3433 + 3433 3434 3430 + 3430 3434 3435 + 3436 3430 3435 + 3437 3430 3436 + 3436 3438 3437 + 3437 3438 3439 + 3440 3434 3433 + 3434 3440 3441 + 3441 3435 3434 + 3433 3442 3440 + 3440 3442 3443 + 3443 3444 3440 + 3445 3440 3444 + 3445 3441 3440 + 3443 3442 3446 + 3443 3446 410 + 410 409 3443 + 3447 3443 409 + 409 408 3447 + 3448 3447 408 + 3442 3449 3446 + 3450 3444 3443 + 3444 3450 3451 + 3444 3451 3445 + 3452 3445 3451 + 3452 3453 3445 + 3445 3453 3454 + 3454 3455 3445 + 3456 3455 3454 + 3450 3457 3451 + 3458 3451 3457 + 3451 3458 3452 + 3452 3458 472 + 3459 3452 472 + 3453 3452 3459 + 473 3457 3450 + 3458 3457 473 + 473 472 3458 + 3460 3461 3462 + 3460 3462 3463 + 3463 3464 3460 + 3460 3464 3465 + 3466 3463 3462 + 3467 3463 3466 + 3464 3463 3467 + 3464 3467 3468 + 3468 3469 3464 + 3469 3468 3470 + 3470 3471 3469 + 3472 3466 3462 + 3473 3466 3472 + 3474 3466 3473 + 3466 3474 3467 + 3474 3475 3467 + 3475 3468 3467 + 3470 3468 3475 + 3462 3476 3472 + 3476 3477 3472 + 3472 3477 3478 + 3472 3478 3473 + 3473 3478 3479 + 3480 3473 3479 + 3474 3473 3480 + 3480 3475 3474 + 3481 3475 3480 + 3475 3481 3470 + 3477 3476 3482 + 3483 3477 3482 + 3478 3477 3483 + 3483 3484 3478 + 3478 3484 3479 + 3476 3485 3482 + 3486 3482 3485 + 3482 3486 3487 + 3482 3487 3488 + 3488 3489 3482 + 3482 3489 3483 + 3490 3485 3476 + 3490 3491 3485 + 3485 3491 3486 + 3492 3486 3491 + 3487 3486 3492 + 3492 3493 3487 + 3488 3487 3493 + 3476 3494 3490 + 3490 3494 3495 + 3496 3490 3495 + 3491 3490 3496 + 3496 3497 3491 + 3491 3497 3492 + 3498 3492 3497 + 3492 3498 3493 + 3499 3496 3495 + 3500 3496 3499 + 3496 3500 3497 + 3497 3500 3498 + 3501 3498 3500 + 3493 3498 3501 + 3501 3502 3493 + 3493 3502 3503 + 3503 3504 3493 + 3504 3488 3493 + 3499 3505 3500 + 3500 3505 3501 + 3505 3506 3501 + 3507 3501 3506 + 3501 3507 3502 + 3502 3507 3508 + 3508 3509 3502 + 3502 3509 3503 + 3510 3505 3499 + 3505 3510 3511 + 3511 3506 3505 + 3511 3512 3506 + 3506 3512 3507 + 3508 3507 3512 + 3512 3513 3508 + 3514 3508 3513 + 3508 3514 3509 + 3509 3514 3515 + 3515 3516 3509 + 3509 3516 3503 + 3512 3511 3517 + 3517 3513 3512 + 3517 3308 3513 + 3513 3308 3514 + 3514 3308 3319 + 3515 3514 3319 + 3319 3518 3515 + 3519 3515 3518 + 3515 3519 3516 + 3517 3511 3520 + 3324 3518 3319 + 3521 3518 3324 + 3518 3521 3519 + 3522 3519 3521 + 3516 3519 3522 + 3522 3523 3516 + 3516 3523 3503 + 3521 3324 3524 + 3524 3525 3521 + 3521 3525 3526 + 3526 182 3521 + 182 3522 3521 + 3527 3522 182 + 3522 3527 3523 + 3323 3524 3324 + 3528 3524 3323 + 3528 3525 3524 + 3525 3528 3529 + 3529 3526 3525 + 3526 3529 1157 + 1157 3530 3526 + 182 3526 3530 + 3531 182 3530 + 3323 3532 3528 + 3529 3528 3532 + 3532 3533 3529 + 1157 3529 3533 + 3533 1152 1157 + 1149 1152 3533 + 3534 3532 3323 + 3532 3534 3535 + 3535 3533 3532 + 3533 3535 1149 + 1149 3535 3536 + 3536 3537 1149 + 3538 3537 3536 + 3536 1136 3538 + 3534 3323 3539 + 3539 3540 3534 + 3534 3540 3536 + 3536 3535 3534 + 3541 3539 3323 + 1137 3539 3541 + 1137 3540 3539 + 3540 1137 1136 + 1136 3536 3540 + 3542 3541 3323 + 3543 3541 3542 + 3543 1138 3541 + 3541 1138 1137 + 3544 3542 3323 + 3545 3542 3544 + 3545 3546 3542 + 3542 3546 3543 + 3543 3546 1126 + 1126 1133 3543 + 1138 3543 1133 + 3547 3544 3323 + 3548 3544 3547 + 3548 3549 3544 + 3544 3549 3545 + 3545 3549 3550 + 3550 1127 3545 + 1127 3546 3545 + 3546 1127 1126 + 3329 3547 3323 + 3551 3547 3329 + 3551 3552 3547 + 3547 3552 3548 + 3548 3552 3553 + 3548 3553 3554 + 3549 3548 3554 + 3554 3550 3549 + 3550 3554 3555 + 3329 3556 3551 + 3551 3556 3557 + 3552 3551 3557 + 3557 3553 3552 + 3558 3553 3557 + 3553 3558 1425 + 1425 3554 3553 + 3328 3556 3329 + 3556 3328 3327 + 3327 3559 3556 + 3556 3559 3557 + 3558 3557 3559 + 3559 3560 3558 + 3561 3559 3327 + 3530 1157 1156 + 1156 3562 3530 + 3530 3562 3563 + 3563 3564 3530 + 3565 3564 3563 + 1161 3562 1156 + 3562 1161 3566 + 3566 3563 3562 + 3563 3566 3567 + 3567 3568 3563 + 3563 3568 3565 + 3565 3568 3569 + 3569 3570 3565 + 3571 3570 3569 + 1165 3566 1161 + 3567 3566 1165 + 1165 1169 3567 + 3567 1169 3572 + 3572 3573 3567 + 3568 3567 3573 + 3573 3569 3568 + 3569 3573 3574 + 3574 3575 3569 + 3569 3575 3571 + 1174 3572 1169 + 3576 3572 1174 + 3572 3576 3574 + 3574 3573 3572 + 3576 1174 1173 + 1173 3577 3576 + 3574 3576 3577 + 3577 3578 3574 + 3575 3574 3578 + 3578 3579 3575 + 3575 3579 3580 + 3580 3571 3575 + 3571 3580 3581 + 3582 3571 3581 + 3583 3577 1173 + 3577 3583 3584 + 3584 3578 3577 + 3579 3578 3584 + 3584 3585 3579 + 3579 3585 3586 + 3586 3587 3579 + 3579 3587 3580 + 1173 1188 3583 + 3583 1188 3588 + 3588 3589 3583 + 3584 3583 3589 + 3589 3590 3584 + 3585 3584 3590 + 3590 3591 3585 + 3586 3585 3591 + 3591 3592 3586 + 3593 3592 3591 + 1193 3588 1188 + 3594 3588 1193 + 3594 3589 3588 + 3589 3594 3595 + 3595 3590 3589 + 3591 3590 3595 + 3595 3596 3591 + 3591 3596 3593 + 3597 3593 3596 + 3596 3598 3597 + 3599 3597 3598 + 1193 3600 3594 + 3595 3594 3600 + 3600 3601 3595 + 3596 3595 3601 + 3601 3598 3596 + 3598 3601 3602 + 3602 231 3598 + 3598 231 3599 + 3603 3600 1193 + 3600 3603 3602 + 3602 3601 3600 + 1193 3604 3603 + 3603 3604 3605 + 3605 3606 3603 + 3602 3603 3606 + 3606 3607 3602 + 231 3602 3607 + 3607 3608 231 + 231 3608 3609 + 3604 1193 1192 + 1192 3610 3604 + 3604 3610 3611 + 3611 3605 3604 + 3612 3605 3611 + 3612 3606 3605 + 3606 3612 3613 + 3613 3607 3606 + 3608 3607 3613 + 1191 3610 1192 + 3610 1191 3614 + 3614 3615 3610 + 3610 3615 3611 + 3616 3611 3615 + 3611 3616 3617 + 3617 3618 3611 + 3611 3618 3612 + 3613 3612 3618 + 1197 3614 1191 + 1202 3614 1197 + 3615 3614 1202 + 1202 3619 3615 + 3615 3619 3616 + 3620 3616 3619 + 3617 3616 3620 + 3620 3621 3617 + 3622 3617 3621 + 3618 3617 3622 + 3622 3623 3618 + 3618 3623 3613 + 3619 1202 3624 + 3624 3625 3619 + 3619 3625 3620 + 3626 3620 3625 + 3620 3626 3627 + 3627 3621 3620 + 1201 3624 1202 + 3628 3624 1201 + 3625 3624 3628 + 3628 3629 3625 + 3625 3629 3626 + 3626 3629 3630 + 3630 3631 3626 + 3627 3626 3631 + 1201 3632 3628 + 3628 3632 3633 + 3633 3634 3628 + 3629 3628 3634 + 3634 3635 3629 + 3629 3635 3630 + 3632 1201 1200 + 1200 3636 3632 + 3632 3636 3637 + 3637 3633 3632 + 3638 3633 3637 + 3633 3638 3639 + 3639 3634 3633 + 3635 3634 3639 + 3636 1200 1206 + 1206 3640 3636 + 3637 3636 3640 + 3640 3641 3637 + 3641 3642 3637 + 3638 3637 3642 + 3642 3643 3638 + 3638 3643 3644 + 3644 3639 3638 + 1211 3640 1206 + 3640 1211 3645 + 3645 3641 3640 + 3641 3645 3646 + 3646 3647 3641 + 3641 3647 3648 + 3648 3642 3641 + 3642 3648 3649 + 3649 3643 3642 + 3645 1211 1216 + 1216 3650 3645 + 3646 3645 3650 + 3650 3651 3646 + 3651 3652 3646 + 3652 3647 3646 + 3647 3652 3653 + 3648 3647 3653 + 3649 3648 3653 + 3654 3650 1216 + 3650 3654 3652 + 3652 3655 3650 + 1216 1215 3654 + 3654 1215 3656 + 3656 3657 3654 + 3652 3654 3657 + 3657 3653 3652 + 3653 3657 3658 + 3658 3659 3653 + 3653 3659 3649 + 1215 3660 3656 + 3661 3656 3660 + 3656 3661 3662 + 3656 3662 3658 + 3658 3657 3656 + 1214 3660 1215 + 3660 1214 3209 + 3209 3663 3660 + 3660 3663 3661 + 3661 3663 3664 + 3664 3665 3661 + 3662 3661 3665 + 3665 3666 3662 + 3662 3666 3667 + 3667 3658 3662 + 3659 3658 3667 + 3663 3209 3216 + 3216 3664 3663 + 3220 3664 3216 + 3664 3220 3271 + 3271 3665 3664 + 3665 3271 3270 + 3270 3666 3665 + 3666 3270 3668 + 3668 3667 3666 + 3667 3668 3669 + 3669 3670 3667 + 3667 3670 3659 + 3649 3659 3670 + 3670 3671 3649 + 3643 3649 3671 + 3668 3270 3269 + 3672 3668 3269 + 3669 3668 3672 + 3672 3673 3669 + 3669 3673 3674 + 3674 3675 3669 + 3670 3669 3675 + 3675 3671 3670 + 3269 3676 3672 + 3677 3672 3676 + 3672 3677 3678 + 3678 3673 3672 + 3673 3678 3679 + 3679 3674 3673 + 3275 3676 3269 + 3676 3275 3680 + 3676 3680 3677 + 3681 3677 3680 + 3678 3677 3681 + 3681 3682 3678 + 3679 3678 3682 + 3682 3683 3679 + 3684 3679 3683 + 3674 3679 3684 + 3680 3275 3274 + 3274 3685 3680 + 3680 3685 3681 + 3686 3681 3685 + 3681 3686 3687 + 3687 3682 3681 + 3682 3687 3688 + 3688 3683 3682 + 3689 3685 3274 + 3685 3689 3686 + 3686 3689 3690 + 3690 3691 3686 + 3687 3686 3691 + 3691 3692 3687 + 3687 3692 3693 + 3688 3687 3693 + 3274 3279 3689 + 3689 3279 3694 + 3694 3690 3689 + 3695 3690 3694 + 3690 3695 3696 + 3696 3691 3690 + 3692 3691 3696 + 3697 3694 3279 + 3695 3694 3697 + 3697 3698 3695 + 3698 3699 3695 + 3699 3700 3695 + 3700 3701 3695 + 3278 3697 3279 + 3702 3697 3278 + 3702 3698 3697 + 3698 3702 3703 + 3703 3699 3698 + 3704 3699 3703 + 3699 3704 3705 + 3705 3700 3699 + 3706 3700 3705 + 3700 3706 3701 + 3706 3707 3701 + 3278 3708 3702 + 3708 3703 3702 + 3708 3278 3282 + 3282 3709 3708 + 3708 3709 3710 + 3710 3711 3708 + 3711 3710 3712 + 3709 3282 3713 + 3713 3714 3709 + 3709 3714 3715 + 3716 3713 3282 + 3282 3281 3716 + 3281 3717 3716 + 3717 3281 3280 + 3718 3717 3280 + 3719 3714 3713 + 3705 3720 3706 + 3706 3720 3721 + 3721 3722 3706 + 3707 3706 3722 + 3723 3707 3722 + 3721 3724 3722 + 3722 3724 3723 + 3724 3725 3723 + 3723 3725 3726 + 3723 3726 3692 + 3692 3727 3723 + 3696 3727 3692 + 3726 3725 3438 + 3438 3693 3726 + 3692 3726 3693 + 3693 3438 3436 + 3693 3436 3456 + 3456 3728 3693 + 3693 3728 3688 + 3729 3688 3728 + 3683 3688 3729 + 3729 3730 3683 + 3683 3730 3684 + 3454 3728 3456 + 3728 3454 3729 + 3729 3454 3453 + 3453 3731 3729 + 3730 3729 3731 + 3731 3732 3730 + 3730 3732 3733 + 3733 3684 3730 + 3734 3684 3733 + 3684 3734 3674 + 3459 3731 3453 + 3732 3731 3459 + 3459 3735 3732 + 3732 3735 3736 + 3736 3733 3732 + 3733 3736 3737 + 3733 3737 3734 + 3734 3737 3738 + 3739 3734 3738 + 3674 3734 3739 + 3739 3675 3674 + 3735 3459 3740 + 3740 3741 3735 + 3735 3741 3742 + 3742 3736 3735 + 3737 3736 3742 + 3742 3738 3737 + 3740 3459 472 + 472 3743 3740 + 3744 3740 3743 + 3741 3740 3744 + 3744 3745 3741 + 3741 3745 3746 + 3746 3742 3741 + 3738 3742 3746 + 479 3743 472 + 3747 3743 479 + 3743 3747 3744 + 3744 3747 3748 + 3748 3749 3744 + 3745 3744 3749 + 3749 3750 3745 + 3746 3745 3750 + 479 3751 3747 + 3747 3751 3752 + 3752 3748 3747 + 3753 3748 3752 + 3748 3753 3754 + 3754 3749 3748 + 3750 3749 3754 + 3751 479 3755 + 3755 3756 3751 + 3752 3751 3757 + 3671 3675 3739 + 3739 3644 3671 + 3671 3644 3643 + 3644 3739 3758 + 3758 3639 3644 + 3639 3758 3635 + 3635 3758 3738 + 3738 3630 3635 + 3738 3758 3739 + 3746 3630 3738 + 3630 3746 3759 + 3759 3631 3630 + 3759 3760 3631 + 3631 3760 3627 + 3761 3627 3760 + 3621 3627 3761 + 3750 3759 3746 + 3760 3759 3750 + 3750 3762 3760 + 3760 3762 3761 + 3763 3761 3762 + 3761 3763 3764 + 3764 3765 3761 + 3761 3765 3621 + 3621 3765 3622 + 3754 3762 3750 + 3762 3754 3763 + 3766 3763 3754 + 3764 3763 3766 + 3766 3767 3764 + 3764 3767 3768 + 3768 3769 3764 + 3765 3764 3769 + 3769 3622 3765 + 3622 3769 3770 + 3770 3623 3622 + 3754 3753 3766 + 3771 3766 3753 + 3767 3766 3771 + 3771 3772 3767 + 3767 3772 3773 + 3773 3768 3767 + 3774 3768 3773 + 3768 3774 3770 + 3770 3769 3768 + 3753 3775 3771 + 3771 3775 3776 + 3776 3777 3771 + 3777 3778 3771 + 3772 3771 3778 + 3778 3779 3772 + 3773 3772 3779 + 3779 3780 3773 + 3752 3775 3753 + 3775 3752 3781 + 3781 3776 3775 + 3782 3781 3752 + 3778 3783 3779 + 3779 3783 3784 + 3784 3785 3779 + 3786 3609 3608 + 3608 3787 3786 + 3786 3787 3770 + 3770 3774 3786 + 3774 3788 3786 + 3789 3786 3788 + 3613 3787 3608 + 3787 3613 3623 + 3623 3770 3787 + 3790 3582 3581 + 3527 3790 3581 + 182 3790 3527 + 3581 3791 3527 + 3523 3527 3791 + 3791 3792 3523 + 3523 3792 3503 + 3793 3791 3581 + 3791 3793 3792 + 3792 3793 3794 + 3794 3503 3792 + 3794 3795 3503 + 3503 3795 3796 + 3796 3504 3503 + 3581 3797 3793 + 3797 3794 3793 + 3794 3797 3798 + 3795 3794 3798 + 3796 3795 3798 + 3799 3796 3798 + 3800 3796 3799 + 3796 3800 3504 + 3504 3800 3801 + 3801 3488 3504 + 3798 3797 3581 + 3581 3580 3798 + 3802 3798 3580 + 3798 3802 3799 + 3803 3799 3802 + 3803 3804 3799 + 3799 3804 3800 + 3801 3800 3804 + 3587 3802 3580 + 3587 3586 3802 + 3802 3586 3803 + 3805 3803 3586 + 3804 3806 3801 + 3806 3807 3801 + 3807 3808 3801 + 3489 3801 3808 + 3801 3489 3488 + 3809 3807 3806 + 3807 3809 3810 + 3807 3810 3484 + 3484 3808 3807 + 3483 3808 3484 + 3808 3483 3489 + 3806 3811 3809 + 3812 3809 3811 + 3810 3809 3812 + 3812 3813 3810 + 3810 3813 3479 + 3484 3810 3479 + 3811 3814 3812 + 3814 3815 3812 + 3816 3812 3815 + 3812 3816 3813 + 3813 3816 3817 + 3817 3479 3813 + 3815 3414 3816 + 3817 3816 3414 + 3414 3818 3817 + 3819 3817 3818 + 3817 3819 3479 + 3414 3820 3818 + 3820 3821 3818 + 3822 3823 3824 + 3822 3824 779 + 779 1015 3822 + 3825 3822 1015 + 3826 3822 3825 + 3825 3827 3826 + 3825 1015 671 + 670 3825 671 + 3825 670 3827 + 3827 670 669 + 669 668 3827 + 3828 3827 668 + 3829 3830 3831 + 3831 3830 3832 + 3832 3833 3831 + 3831 3833 3834 + 3834 3835 3831 + 3836 3831 3835 + 3832 3837 3833 + 3833 3837 3838 + 3838 3834 3833 + 3839 3834 3838 + 3834 3839 3840 + 3840 3835 3834 + 3837 3832 3841 + 3841 3842 3837 + 3837 3842 3843 + 3843 3838 3837 + 3844 3838 3843 + 3838 3844 3839 + 3841 3832 3845 + 3846 3847 3848 + 3847 3846 3849 + 3849 3850 3847 + 3847 3850 3851 + 3852 3849 3846 + 3853 3849 3852 + 3850 3849 3853 + 3853 3854 3850 + 3850 3854 3855 + 3855 3856 3850 + 3857 3852 3846 + 3858 3852 3857 + 3859 3852 3858 + 3852 3859 3853 + 3860 3853 3859 + 3854 3853 3860 + 3860 3861 3854 + 196 3854 3861 + 3862 3857 3846 + 3863 3857 3862 + 3857 3863 3864 + 3864 3865 3857 + 3857 3865 3858 + 3858 3865 3866 + 3859 3858 3866 + 3846 3867 3862 + 3868 3862 3867 + 3862 3868 3869 + 3862 3869 3863 + 3870 3863 3869 + 3864 3863 3870 + 3871 3867 3846 + 11 3867 3871 + 3867 11 3868 + 3872 3868 11 + 3869 3868 3872 + 3872 3873 3869 + 3869 3873 3870 + 3846 3874 3871 + 3871 3874 3875 + 3876 3871 3875 + 3877 3871 3876 + 3878 3874 3846 + 3874 3878 3879 + 3879 3875 3874 + 3880 3875 3879 + 3875 3880 3881 + 3881 3882 3875 + 3875 3882 3883 + 3883 3884 3875 + 3884 3876 3875 + 3880 3879 3885 + 3885 3886 3880 + 3880 3886 3887 + 3887 3881 3880 + 3888 3881 3887 + 3881 3888 3882 + 3882 3888 235 + 235 3883 3882 + 3889 3886 3885 + 3886 3889 27 + 27 3887 3886 + 237 3887 27 + 3885 3890 3889 + 3889 3890 3891 + 3891 3892 3889 + 27 3889 3892 + 3893 27 3892 + 3894 27 3893 + 3893 3895 3894 + 3890 3885 125 + 125 3896 3890 + 3891 3890 3896 + 3896 3897 3891 + 3898 3891 3897 + 3898 3892 3891 + 3892 3898 3899 + 3899 3900 3892 + 3892 3900 3893 + 3901 3896 125 + 3896 3901 3902 + 3902 3897 3896 + 3897 3902 3903 + 3903 3904 3897 + 3897 3904 3898 + 3898 3904 3899 + 125 3905 3901 + 3901 3905 3906 + 3906 3907 3901 + 3902 3901 3907 + 3907 3908 3902 + 3903 3902 3908 + 3905 125 3909 + 3909 3910 3905 + 3906 3905 3910 + 3910 3911 3906 + 3912 3906 3911 + 3906 3912 3913 + 3913 3907 3906 + 3909 125 3914 + 3887 3915 3888 + 3861 3916 196 + 3917 3916 3861 + 3918 3916 3917 + 3916 3918 197 + 197 3919 3916 + 3861 3920 3917 + 3917 3920 3921 + 3861 3860 3920 + 3920 3860 3922 + 3922 3923 3920 + 3922 3860 3859 + 3924 3922 3859 + 3925 3922 3924 + 3922 3925 3923 + 3923 3925 3926 + 3926 3927 3923 + 3923 3927 3928 + 3928 3917 3923 + 3859 3929 3924 + 3930 3924 3929 + 3924 3930 3931 + 3931 3932 3924 + 3924 3932 3925 + 3925 3932 3933 + 3933 3926 3925 + 3866 3929 3859 + 3934 3929 3866 + 3929 3934 3930 + 3930 3934 3935 + 3935 3936 3930 + 3931 3930 3936 + 3936 3937 3931 + 3938 3931 3937 + 3932 3931 3938 + 3866 3939 3934 + 3934 3939 3940 + 3940 3941 3934 + 3934 3941 3935 + 3939 3866 3865 + 3865 3864 3939 + 3940 3939 3864 + 3864 3942 3940 + 3943 3940 3942 + 3941 3940 3943 + 3943 3944 3941 + 3941 3944 3945 + 3945 3946 3941 + 3941 3946 3935 + 3870 3942 3864 + 3942 3870 3947 + 3947 3948 3942 + 3942 3948 3943 + 3943 3948 3949 + 3949 3950 3943 + 3944 3943 3950 + 3950 3951 3944 + 3945 3944 3951 + 3947 3870 3873 + 3873 3952 3947 + 3947 3952 3953 + 3953 3954 3947 + 3948 3947 3954 + 3954 3949 3948 + 3955 3949 3954 + 3949 3955 3956 + 3956 3950 3949 + 3952 3873 3872 + 3872 3957 3952 + 3952 3957 3958 + 3958 3953 3952 + 3959 3953 3958 + 3953 3959 3960 + 3960 3954 3953 + 3954 3960 3955 + 3957 3872 3961 + 3961 3962 3957 + 3957 3962 3963 + 3963 3964 3957 + 3964 3965 3957 + 3965 3958 3957 + 11 3961 3872 + 3966 3961 11 + 3966 3962 3961 + 3962 3966 3967 + 3967 3963 3962 + 3876 3963 3967 + 3963 3876 3884 + 3884 3964 3963 + 11 3877 3966 + 3877 3967 3966 + 3876 3967 3877 + 3968 3969 3970 + 3969 3968 3971 + 3971 3972 3969 + 3969 3972 3973 + 3973 3974 3969 + 3974 3975 3969 + 3976 3969 3975 + 3977 3971 3968 + 3978 3971 3977 + 3972 3971 3978 + 3978 3979 3972 + 3972 3979 3980 + 3980 3973 3972 + 3968 3981 3977 + 3982 3977 3981 + 3983 3977 3982 + 3977 3983 3978 + 3984 3978 3983 + 3979 3978 3984 + 3984 3985 3979 + 3980 3979 3985 + 3986 3981 3968 + 3987 3981 3986 + 3981 3987 3982 + 3982 3987 3988 + 3988 3989 3982 + 3983 3982 3989 + 3968 3976 3986 + 3990 3991 3992 + 3990 3992 3993 + 3993 3994 3990 + 3990 3994 3995 + 3995 3996 3990 + 3997 3990 3996 + 3998 3993 3992 + 3999 3993 3998 + 3993 3999 4000 + 4000 3994 3993 + 3994 4000 4001 + 4001 3995 3994 + 3049 3998 3992 + 3048 3998 3049 + 4002 3998 3048 + 3998 4002 3999 + 3999 4002 3056 + 3056 4003 3999 + 4000 3999 4003 + 3992 3050 3049 + 3051 3050 3992 + 3992 3997 3051 + 4004 4005 4006 + 4005 4004 4007 + 4007 4008 4005 + 4009 4005 4008 + 4010 4005 4009 + 4009 3028 4010 + 4009 4011 3028 + 4007 4004 4012 + 4013 4007 4012 + 4014 4007 4013 + 4014 4008 4007 + 4008 4014 4015 + 4015 4016 4008 + 4008 4016 4009 + 4016 4017 4009 + 4017 4018 4009 + 4011 4009 4018 + 4013 4019 4014 + 4015 4014 4019 + 4019 4020 4015 + 4021 4015 4020 + 4015 4021 4022 + 4022 4016 4015 + 4016 4022 4023 + 4023 4017 4016 + 4024 4019 4013 + 4019 4024 4025 + 4025 4020 4019 + 4026 4020 4025 + 4020 4026 4021 + 4021 4026 4027 + 4027 4028 4021 + 4022 4021 4028 + 4013 4029 4024 + 4024 4029 4030 + 4030 4031 4024 + 4024 4031 4032 + 4032 4025 4024 + 4033 4025 4032 + 4025 4033 4026 + 4029 4013 3829 + 3829 3836 4029 + 3836 4030 4029 + 3835 4030 3836 + 4031 4030 3835 + 3835 3840 4031 + 4031 3840 4034 + 4034 4032 4031 + 4035 4032 4034 + 4032 4035 4033 + 4033 4035 4036 + 4036 4037 4033 + 4026 4033 4037 + 4037 4027 4026 + 4038 4034 3840 + 4039 4034 4038 + 4034 4039 4035 + 4035 4039 4040 + 4040 4036 4035 + 4041 4036 4040 + 4036 4041 4042 + 4042 4037 4036 + 3840 3839 4038 + 4043 4038 3839 + 4044 4038 4043 + 4038 4044 4039 + 4039 4044 4045 + 4045 4040 4039 + 4046 4040 4045 + 4040 4046 4041 + 3839 3844 4043 + 4047 4043 3844 + 4048 4043 4047 + 4043 4048 4044 + 4044 4048 4049 + 4049 4045 4044 + 4050 4045 4049 + 4045 4050 4046 + 3844 4051 4047 + 4052 4047 4051 + 4053 4047 4052 + 4047 4053 4048 + 4048 4053 4054 + 4054 4049 4048 + 4055 4049 4054 + 4049 4055 4050 + 3843 4051 3844 + 4051 3843 4056 + 4056 4057 4051 + 4051 4057 4052 + 4052 4057 4058 + 4059 4052 4058 + 4060 4052 4059 + 4052 4060 4053 + 4056 3843 3842 + 3842 4061 4056 + 4062 4056 4061 + 4057 4056 4062 + 4062 4058 4057 + 4062 4063 4058 + 4058 4063 4064 + 4064 4065 4058 + 4058 4065 4059 + 4066 4061 3842 + 4061 4066 4067 + 4067 4068 4061 + 4061 4068 4062 + 4063 4062 4068 + 3842 3841 4066 + 4066 3841 3032 + 3032 3046 4066 + 4066 3046 4069 + 4069 4067 4066 + 4070 4067 4069 + 4067 4070 4071 + 4071 4068 4067 + 4068 4071 4063 + 3032 3841 4072 + 3045 4069 3046 + 4069 3045 3052 + 3052 4073 4069 + 4069 4073 4070 + 4074 4070 4073 + 4071 4070 4074 + 4074 4075 4071 + 4063 4071 4075 + 4075 4076 4063 + 4076 4064 4063 + 4077 4064 4076 + 4064 4077 4065 + 4073 3052 4078 + 4078 4079 4073 + 4073 4079 4074 + 4080 4074 4079 + 4074 4080 4081 + 4081 4075 4074 + 4075 4081 4082 + 4082 4076 4075 + 4078 3052 4083 + 4084 4085 4086 + 4086 4085 4087 + 4087 4088 4086 + 4089 4088 4087 + 4088 4089 4090 + 4090 4091 4088 + 4092 4088 4091 + 4093 4087 4085 + 4094 4087 4093 + 4087 4094 4089 + 4089 4094 4095 + 4095 4096 4089 + 4090 4089 4096 + 4085 4097 4093 + 4098 4093 4097 + 4099 4093 4098 + 4093 4099 4094 + 4094 4099 4100 + 4095 4094 4100 + 4101 4097 4085 + 4097 4101 4102 + 4102 4103 4097 + 4097 4103 4098 + 4104 4098 4103 + 4105 4098 4104 + 4098 4105 4099 + 4085 4106 4101 + 4091 4107 4092 + 4108 4109 4110 + 4110 4109 4111 + 4111 4112 4110 + 4113 4110 4112 + 4114 4110 4113 + 4110 4114 4115 + 4116 4111 4109 + 4117 4111 4116 + 4111 4117 4118 + 4118 4112 4111 + 4112 4118 4119 + 4119 4120 4112 + 4112 4120 4113 + 4109 4121 4116 + 4122 4116 4121 + 4123 4116 4122 + 4116 4123 4117 + 4124 4117 4123 + 4118 4117 4124 + 4124 4125 4118 + 4119 4118 4125 + 4126 4121 4109 + 4109 4127 4126 + 4126 4127 4128 + 4128 4129 4126 + 4130 4126 4129 + 4131 4126 4130 + 3946 4129 4128 + 4129 3946 3945 + 4129 3945 4130 + 3951 4130 3945 + 4132 4130 3951 + 4130 4132 4121 + 4121 4132 4122 + 4128 3935 3946 + 3935 4128 4133 + 3935 4133 4134 + 4134 3936 3935 + 3936 4134 4135 + 4135 3937 3936 + 4133 4128 4136 + 4136 4114 4133 + 4133 4114 4137 + 4137 4134 4133 + 4135 4134 4137 + 4137 4138 4135 + 4139 4135 4138 + 3937 4135 4139 + 4139 4140 3937 + 3937 4140 3938 + 4113 4137 4114 + 4137 4113 4141 + 4141 4138 4137 + 4138 4141 4142 + 4142 4143 4138 + 4138 4143 4139 + 4144 4139 4143 + 4140 4139 4144 + 4141 4113 4120 + 4120 4145 4141 + 4142 4141 4145 + 4145 4146 4142 + 4147 4142 4146 + 4143 4142 4147 + 4147 4148 4143 + 4143 4148 4144 + 4149 4145 4120 + 4145 4149 4150 + 4150 4146 4145 + 4146 4150 4151 + 4151 4152 4146 + 4146 4152 4147 + 4153 4147 4152 + 4148 4147 4153 + 4120 4119 4149 + 4149 4119 4154 + 4154 4155 4149 + 4150 4149 4155 + 4155 4156 4150 + 4151 4150 4156 + 4156 4157 4151 + 4158 4151 4157 + 4152 4151 4158 + 4154 4119 4125 + 4125 4159 4154 + 4160 4154 4159 + 4154 4160 4161 + 4161 4155 4154 + 4155 4161 4162 + 4162 4156 4155 + 4156 4162 4163 + 4163 4157 4156 + 4164 4159 4125 + 4159 4164 4165 + 4159 4165 4160 + 4160 4165 4166 + 4167 4160 4166 + 4161 4160 4167 + 4167 4168 4161 + 4162 4161 4168 + 4125 4169 4164 + 4170 4164 4169 + 4165 4164 4170 + 4170 4166 4165 + 4124 4169 4125 + 4169 4124 4171 + 4171 4172 4169 + 4169 4172 4170 + 4172 4173 4170 + 4174 4170 4173 + 4166 4170 4174 + 4123 4171 4124 + 4175 4171 4123 + 4172 4171 4175 + 4175 4176 4172 + 4172 4176 4177 + 4177 4173 4172 + 4173 4177 4178 + 4178 4179 4173 + 4173 4179 4174 + 4123 4180 4175 + 4181 4175 4180 + 4176 4175 4181 + 4181 4182 4176 + 4177 4176 4182 + 4182 4183 4177 + 4183 4184 4177 + 4178 4177 4184 + 4122 4180 4123 + 4180 4122 4185 + 4185 4186 4180 + 4180 4186 4181 + 4187 4181 4186 + 4182 4181 4187 + 4187 4188 4182 + 4182 4188 4189 + 4189 4183 4182 + 4185 4122 4132 + 4132 4190 4185 + 4191 4185 4190 + 4186 4185 4191 + 4191 4192 4186 + 4186 4192 4187 + 4193 4187 4192 + 4188 4187 4193 + 3951 4190 4132 + 4190 3951 3950 + 3950 3956 4190 + 4190 3956 4191 + 4194 4191 3956 + 4192 4191 4194 + 4194 4195 4192 + 4192 4195 4193 + 4196 4193 4195 + 4197 4193 4196 + 4193 4197 4188 + 4188 4197 4198 + 4198 4189 4188 + 3956 3955 4194 + 4199 4194 3955 + 4195 4194 4199 + 4199 4200 4195 + 4195 4200 4196 + 4201 4196 4200 + 4202 4196 4201 + 4196 4202 4197 + 4197 4202 4203 + 4203 4198 4197 + 3955 3960 4199 + 4204 4199 3960 + 4200 4199 4204 + 4204 4205 4200 + 4200 4205 4201 + 4206 4201 4205 + 4207 4201 4206 + 4201 4207 4202 + 4202 4207 4208 + 4203 4202 4208 + 3960 3959 4204 + 4209 4204 3959 + 4205 4204 4209 + 4209 4210 4205 + 4205 4210 4206 + 4211 4206 4210 + 4212 4206 4211 + 4206 4212 4207 + 4207 4212 4213 + 4213 4208 4207 + 3959 4214 4209 + 4215 4209 4214 + 4210 4209 4215 + 4215 4216 4210 + 4210 4216 4211 + 4217 4211 4216 + 4218 4211 4217 + 4211 4218 4212 + 4213 4212 4218 + 3958 4214 3959 + 4214 3958 3965 + 3965 4219 4214 + 4214 4219 4215 + 4220 4215 4219 + 4216 4215 4220 + 4220 4221 4216 + 4216 4221 4217 + 4219 3965 4222 + 4222 4223 4219 + 4219 4223 4220 + 4224 4220 4223 + 4221 4220 4224 + 4224 4225 4221 + 4221 4225 4226 + 4217 4221 4226 + 4222 3965 3964 + 3964 4227 4222 + 4222 4227 4228 + 4229 4222 4228 + 4223 4222 4229 + 4229 4230 4223 + 4223 4230 4224 + 4231 4224 4230 + 4225 4224 4231 + 3884 4227 3964 + 4227 3884 3883 + 3883 4228 4227 + 235 4228 3883 + 4228 235 4232 + 4232 4233 4228 + 4228 4233 4229 + 4234 4229 4233 + 4230 4229 4234 + 4234 4235 4230 + 4230 4235 4231 + 4231 4235 4236 + 4237 4232 235 + 4238 4239 4240 + 4240 4241 4238 + 4238 4241 4242 + 4242 4243 4238 + 4244 4238 4243 + 4245 4238 4244 + 4244 4246 4245 + 4241 4240 4247 + 4247 4248 4241 + 4241 4248 4249 + 4249 4242 4241 + 4250 4242 4249 + 4242 4250 4251 + 4251 4243 4242 + 4247 4240 4252 + 4252 4253 4247 + 4254 4247 4253 + 4248 4247 4254 + 4254 4255 4248 + 4248 4255 4256 + 4256 4249 4248 + 4257 4252 4240 + 4258 4252 4257 + 4252 4258 4259 + 4259 4253 4252 + 4253 4259 4260 + 4260 4261 4253 + 4253 4261 4254 + 4240 238 4257 + 4262 4263 4246 + 4263 4262 4264 + 4264 4265 4263 + 4263 4265 4266 + 4266 4267 4263 + 4268 4263 4267 + 4267 240 4268 + 4264 4262 4269 + 4269 4270 4264 + 4271 4264 4270 + 4265 4264 4271 + 4271 4272 4265 + 4265 4272 4273 + 4273 4266 4265 + 4274 4269 4262 + 4275 4269 4274 + 4269 4275 4276 + 4276 4270 4269 + 4270 4276 4277 + 4277 4278 4270 + 4270 4278 4271 + 4262 4244 4274 + 4243 4274 4244 + 4279 4274 4243 + 4274 4279 4275 + 4275 4279 4280 + 4280 4281 4275 + 4276 4275 4281 + 4282 4244 4262 + 4243 4251 4279 + 4279 4251 4283 + 4283 4280 4279 + 4284 4280 4283 + 4280 4284 4285 + 4285 4281 4280 + 4281 4285 4286 + 4286 4287 4281 + 4281 4287 4276 + 4277 4276 4287 + 4288 4283 4251 + 4289 4283 4288 + 4283 4289 4284 + 4284 4289 4290 + 4290 4291 4284 + 4285 4284 4291 + 4291 4292 4285 + 4286 4285 4292 + 4251 4250 4288 + 4293 4288 4250 + 4294 4288 4293 + 4288 4294 4289 + 4289 4294 4295 + 4295 4290 4289 + 4296 4290 4295 + 4290 4296 4297 + 4297 4291 4290 + 4250 4298 4293 + 4299 4293 4298 + 4300 4293 4299 + 4293 4300 4294 + 4294 4300 4301 + 4301 4295 4294 + 4302 4295 4301 + 4295 4302 4296 + 4249 4298 4250 + 4298 4249 4256 + 4256 4303 4298 + 4298 4303 4299 + 4304 4299 4303 + 4305 4299 4304 + 4299 4305 4300 + 4300 4305 4306 + 4306 4301 4300 + 4307 4301 4306 + 4301 4307 4302 + 4303 4256 4308 + 4308 4309 4303 + 4303 4309 4304 + 4310 4304 4309 + 4311 4304 4310 + 4304 4311 4305 + 4305 4311 4312 + 4312 4306 4305 + 4308 4256 4255 + 4255 4313 4308 + 4314 4308 4313 + 4309 4308 4314 + 4314 4315 4309 + 4309 4315 4310 + 4316 4310 4315 + 4317 4310 4316 + 4310 4317 4311 + 4318 4313 4255 + 4313 4318 4319 + 4319 4320 4313 + 4313 4320 4314 + 4321 4314 4320 + 4315 4314 4321 + 4321 4322 4315 + 4315 4322 4316 + 4255 4254 4318 + 4318 4254 4261 + 4261 4323 4318 + 4319 4318 4323 + 4323 4324 4319 + 4325 4319 4324 + 4320 4319 4325 + 4325 4326 4320 + 4320 4326 4321 + 4327 4321 4326 + 4322 4321 4327 + 4328 4323 4261 + 4323 4328 4329 + 4329 4324 4323 + 4324 4329 4330 + 4330 4331 4324 + 4324 4331 4325 + 4332 4325 4331 + 4326 4325 4332 + 4261 4260 4328 + 4328 4260 4333 + 4333 4334 4328 + 4329 4328 4334 + 4334 4335 4329 + 4330 4329 4335 + 4335 4336 4330 + 4337 4330 4336 + 4331 4330 4337 + 4338 4333 4260 + 4333 4338 4339 + 4333 4339 4340 + 4340 4334 4333 + 4335 4334 4340 + 4340 4341 4335 + 4335 4341 4342 + 4342 4336 4335 + 4260 4259 4338 + 4343 4338 4259 + 4339 4338 4343 + 4343 4344 4339 + 4340 4339 4344 + 4345 4340 4344 + 4341 4340 4345 + 4259 4258 4343 + 4346 4343 4258 + 4343 4346 4347 + 4347 4344 4343 + 4344 4347 4348 + 4348 4349 4344 + 4344 4349 4350 + 4350 4345 4344 + 4258 4351 4346 + 4352 4346 4351 + 4347 4346 4352 + 4352 4353 4347 + 4348 4347 4353 + 4257 4351 4258 + 4351 4257 240 + 240 4354 4351 + 4351 4354 4352 + 4355 4352 4354 + 4353 4352 4355 + 240 4257 4356 + 4354 240 4267 + 4267 4357 4354 + 4354 4357 4355 + 4355 4357 4358 + 4358 4359 4355 + 4360 4355 4359 + 4355 4360 4353 + 4357 4267 4266 + 4266 4358 4357 + 4358 4266 4273 + 4273 4361 4358 + 4358 4361 4362 + 4362 4359 4358 + 4359 4362 4363 + 4363 4364 4359 + 4359 4364 4360 + 4361 4273 4365 + 4365 4366 4361 + 4361 4366 4367 + 4367 4362 4361 + 4363 4362 4367 + 4367 4368 4363 + 4369 4363 4368 + 4364 4363 4369 + 4365 4273 4272 + 4272 4370 4365 + 4371 4365 4370 + 4366 4365 4371 + 4371 4372 4366 + 4366 4372 4373 + 4373 4367 4366 + 4367 4373 4374 + 4374 4368 4367 + 4375 4370 4272 + 4370 4375 4376 + 4376 4377 4370 + 4370 4377 4371 + 4378 4371 4377 + 4372 4371 4378 + 4272 4271 4375 + 4375 4271 4278 + 4278 4379 4375 + 4376 4375 4379 + 4379 4380 4376 + 4381 4376 4380 + 4377 4376 4381 + 4381 4382 4377 + 4377 4382 4378 + 4383 4379 4278 + 4379 4383 4384 + 4384 4380 4379 + 4380 4384 4385 + 4385 4386 4380 + 4380 4386 4381 + 4387 4381 4386 + 4382 4381 4387 + 4278 4277 4383 + 4383 4277 4388 + 4388 4389 4383 + 4384 4383 4389 + 4389 4390 4384 + 4385 4384 4390 + 4390 4391 4385 + 4392 4385 4391 + 4393 4385 4392 + 4287 4388 4277 + 4394 4388 4287 + 4388 4394 4395 + 4395 4389 4388 + 4389 4395 4396 + 4396 4390 4389 + 4390 4396 4397 + 4397 4391 4390 + 4287 4286 4394 + 4394 4286 4398 + 4398 4399 4394 + 4395 4394 4399 + 4399 4400 4395 + 4396 4395 4400 + 4400 4401 4396 + 4397 4396 4401 + 4292 4398 4286 + 4402 4398 4292 + 4398 4402 4403 + 4403 4399 4398 + 4399 4403 4404 + 4404 4400 4399 + 4400 4404 4405 + 4405 4401 4400 + 4292 4406 4402 + 4407 4402 4406 + 4403 4402 4407 + 4407 4408 4403 + 4404 4403 4408 + 4409 4404 4408 + 4405 4404 4409 + 4406 4292 4291 + 4291 4297 4406 + 4406 4297 4410 + 4410 4411 4406 + 4406 4411 4407 + 4412 4407 4411 + 4407 4412 4408 + 4410 4297 4296 + 4296 4413 4410 + 4414 4410 4413 + 4411 4410 4414 + 4414 4415 4411 + 4411 4415 4412 + 4412 4415 4416 + 4416 4417 4412 + 4417 4418 4412 + 4419 4413 4296 + 4413 4419 4420 + 4420 4421 4413 + 4413 4421 4414 + 4414 4421 4422 + 4422 4423 4414 + 4415 4414 4423 + 4423 4416 4415 + 4296 4302 4419 + 4419 4302 4307 + 4307 4424 4419 + 4420 4419 4424 + 4424 4425 4420 + 4420 4425 4080 + 4080 4426 4420 + 4426 4427 4420 + 4421 4420 4427 + 4428 4424 4307 + 4428 4425 4424 + 4425 4428 4081 + 4081 4080 4425 + 4307 4429 4428 + 4428 4429 4082 + 4082 4081 4428 + 4306 4429 4307 + 4429 4306 4312 + 4312 4082 4429 + 4082 4312 4430 + 4430 4076 4082 + 4076 4430 4077 + 4077 4430 4317 + 4317 4431 4077 + 4065 4077 4431 + 4430 4312 4311 + 4311 4317 4430 + 4431 4059 4065 + 4432 4059 4431 + 4059 4432 4060 + 4060 4432 4433 + 4433 4434 4060 + 4053 4060 4434 + 4434 4054 4053 + 4431 4316 4432 + 4432 4316 4322 + 4322 4433 4432 + 4327 4433 4322 + 4433 4327 4435 + 4435 4434 4433 + 4434 4435 4436 + 4436 4054 4434 + 4054 4436 4055 + 4316 4431 4317 + 4079 4426 4080 + 4437 4426 4079 + 4426 4437 4438 + 4438 4427 4426 + 4438 4439 4427 + 4427 4439 4421 + 4421 4439 4422 + 4079 4078 4437 + 4437 4078 4440 + 4440 4441 4437 + 4437 4441 4442 + 4442 4438 4437 + 4439 4438 4442 + 4442 4422 4439 + 4443 4422 4442 + 4422 4443 4444 + 4444 4423 4422 + 3997 4440 4078 + 3996 4440 3997 + 4440 3996 4445 + 4445 4441 4440 + 4441 4445 4446 + 4446 4447 4441 + 4441 4447 4442 + 4443 4442 4447 + 4447 4448 4443 + 4443 4448 4449 + 4449 4444 4443 + 4445 3996 3995 + 3995 4450 4445 + 4446 4445 4450 + 4450 4451 4446 + 4452 4446 4451 + 4447 4446 4452 + 4452 4448 4447 + 4448 4452 4453 + 4453 4449 4448 + 4454 4450 3995 + 4450 4454 4455 + 4455 4451 4450 + 4451 4455 4456 + 4456 4457 4451 + 4451 4457 4452 + 4453 4452 4457 + 3995 4001 4454 + 4454 4001 4458 + 4458 4459 4454 + 4455 4454 4459 + 4459 4460 4455 + 4456 4455 4460 + 4460 4461 4456 + 4462 4456 4461 + 4457 4456 4462 + 4463 4458 4001 + 4464 4458 4463 + 4458 4464 4465 + 4465 4459 4458 + 4459 4465 4466 + 4466 4460 4459 + 4460 4466 4467 + 4467 4461 4460 + 4001 4000 4463 + 4003 4463 4000 + 4468 4463 4003 + 4463 4468 4464 + 4464 4468 4469 + 4469 4470 4464 + 4465 4464 4470 + 4470 4471 4465 + 4466 4465 4471 + 4471 4472 4466 + 4467 4466 4472 + 4003 4473 4468 + 4468 4473 4474 + 4474 4469 4468 + 4475 4469 4474 + 4469 4475 4476 + 4476 4470 4469 + 4470 4476 4477 + 4477 4471 4470 + 4473 4003 3056 + 3056 3061 4473 + 4473 3061 4478 + 4478 4474 4473 + 4479 4474 4478 + 4474 4479 4475 + 4475 4479 4480 + 4480 4481 4475 + 4476 4475 4481 + 4481 4482 4476 + 4477 4476 4482 + 3081 4478 3061 + 4483 4478 3081 + 4478 4483 4479 + 4479 4483 4484 + 4484 4480 4479 + 4485 4480 4484 + 4480 4485 4486 + 4486 4481 4480 + 4481 4486 4487 + 4487 4482 4481 + 3081 4488 4483 + 4483 4488 4489 + 4489 4484 4483 + 4490 4484 4489 + 4484 4490 4485 + 4485 4490 4491 + 4491 4492 4485 + 4486 4485 4492 + 4488 3081 3080 + 3080 3086 4488 + 4488 3086 4493 + 4493 4489 4488 + 4494 4489 4493 + 4489 4494 4490 + 4490 4494 4495 + 4495 4491 4490 + 4496 4491 4495 + 4491 4496 4497 + 4497 4492 4491 + 3093 4493 3086 + 4498 4493 3093 + 4493 4498 4494 + 4494 4498 4499 + 4499 4495 4494 + 4500 4495 4499 + 4495 4500 4496 + 4496 4500 4501 + 4501 4502 4496 + 4497 4496 4502 + 3093 3097 4498 + 4498 3097 4503 + 4503 4499 4498 + 4504 4499 4503 + 4499 4504 4500 + 4500 4504 4505 + 4505 4501 4500 + 4506 4501 4505 + 4501 4506 4507 + 4507 4502 4501 + 3101 4503 3097 + 4508 4503 3101 + 4503 4508 4504 + 4504 4508 4509 + 4509 4505 4504 + 4510 4505 4509 + 4505 4510 4506 + 4511 4506 4510 + 4507 4506 4511 + 3101 3106 4508 + 4508 3106 4512 + 4512 4509 4508 + 4513 4509 4512 + 4509 4513 4510 + 4510 4513 4514 + 4514 4515 4510 + 4510 4515 4511 + 4516 4512 3106 + 4517 4512 4516 + 4512 4517 4513 + 4514 4513 4517 + 4517 4518 4514 + 4519 4514 4518 + 4514 4519 4520 + 4520 4515 4514 + 3106 3105 4516 + 3111 4516 3105 + 4521 4516 3111 + 4516 4521 4517 + 4517 4521 4522 + 4522 4518 4517 + 4523 4518 4522 + 4518 4523 4519 + 4524 4519 4523 + 4520 4519 4524 + 3111 3116 4521 + 4522 4521 3116 + 3116 4525 4522 + 4526 4522 4525 + 4522 4526 4523 + 4523 4526 4527 + 4527 4528 4523 + 4523 4528 4524 + 3123 4525 3116 + 4529 4525 3123 + 4525 4529 4526 + 4527 4526 4529 + 4529 4530 4527 + 4531 4527 4530 + 4527 4531 4532 + 4532 4528 4527 + 4528 4532 4533 + 4533 4524 4528 + 3123 3128 4529 + 4529 3128 4534 + 4534 4530 4529 + 4535 4530 4534 + 4530 4535 4531 + 4536 4531 4535 + 4532 4531 4536 + 4536 4537 4532 + 4533 4532 4537 + 4534 3128 3127 + 4538 4534 3127 + 4539 4534 4538 + 4534 4539 4535 + 4535 4539 4540 + 4540 4541 4535 + 4535 4541 4536 + 4542 4536 4541 + 4542 4537 4536 + 3127 4543 4538 + 4544 4538 4543 + 4545 4538 4544 + 4538 4545 4539 + 4540 4539 4545 + 4546 4543 3127 + 4547 4543 4546 + 4543 4547 4544 + 4544 4547 3135 + 3135 4548 4544 + 4549 4544 4548 + 4544 4549 4545 + 3127 3126 4546 + 3131 4546 3126 + 4547 4546 3131 + 3131 3135 4547 + 3139 4548 3135 + 4550 4548 3139 + 4548 4550 4549 + 4551 4549 4550 + 4545 4549 4551 + 4551 4552 4545 + 4545 4552 4540 + 4553 4540 4552 + 4540 4553 4554 + 4554 4541 4540 + 4541 4554 4542 + 3139 4555 4550 + 4550 4555 4556 + 4556 4557 4550 + 4550 4557 4551 + 4558 4551 4557 + 4551 4558 4559 + 4559 4552 4551 + 4552 4559 4553 + 4555 3139 3144 + 3144 4560 4555 + 4556 4555 4560 + 4560 4561 4556 + 4562 4556 4561 + 4556 4562 4563 + 4563 4557 4556 + 4557 4563 4558 + 4564 4558 4563 + 4559 4558 4564 + 4560 3144 3143 + 3143 4565 4560 + 4560 4565 4566 + 4566 4561 4560 + 4567 4561 4566 + 4561 4567 4562 + 4568 4562 4567 + 4563 4562 4568 + 4568 4569 4563 + 4563 4569 4564 + 4565 3143 3152 + 3152 4570 4565 + 4566 4565 4570 + 4570 4571 4566 + 4572 4566 4571 + 4566 4572 4567 + 4567 4572 4573 + 4573 4574 4567 + 4567 4574 4568 + 4570 3152 3151 + 3151 4575 4570 + 4570 4575 4576 + 4576 4571 4570 + 4577 4571 4576 + 4571 4577 4572 + 4573 4572 4577 + 4575 3151 4578 + 4578 4579 4575 + 4576 4575 4579 + 4579 4580 4576 + 4581 4576 4580 + 4576 4581 4577 + 3155 4578 3151 + 4582 4578 3155 + 4579 4578 4582 + 4582 4583 4579 + 4579 4583 4584 + 4584 4580 4579 + 4585 4580 4584 + 4580 4585 4581 + 4586 4581 4585 + 4577 4581 4586 + 3155 3158 4582 + 4582 3158 4587 + 4587 4588 4582 + 4583 4582 4588 + 4588 4589 4583 + 4584 4583 4589 + 4589 4590 4584 + 4591 4584 4590 + 4584 4591 4585 + 3158 4592 4587 + 4592 2746 4587 + 2746 4593 4587 + 4594 4587 4593 + 4595 4587 4594 + 4587 4595 4596 + 4596 4588 4587 + 3157 4592 3158 + 4592 3157 4597 + 4592 4597 2741 + 2741 2746 4592 + 4597 3157 3156 + 3156 2736 4597 + 2741 4597 2736 + 3156 115 2736 + 2736 115 2737 + 2737 115 4598 + 2745 4593 2746 + 4593 2745 4599 + 4593 4599 4594 + 4594 4599 4600 + 4600 4601 4594 + 4602 4594 4601 + 4594 4602 4595 + 4599 2745 2744 + 2744 4600 4599 + 2755 4600 2744 + 4600 2755 4603 + 4603 4601 4600 + 4601 4603 4604 + 4604 4605 4601 + 4601 4605 4602 + 4602 4605 4606 + 4595 4602 4606 + 4603 2755 4607 + 4607 4608 4603 + 4604 4603 4608 + 4608 4609 4604 + 4610 4604 4609 + 4605 4604 4610 + 4610 4606 4605 + 2754 4607 2755 + 4611 4607 2754 + 4607 4611 4612 + 4612 4608 4607 + 4608 4612 4613 + 4613 4609 4608 + 4609 4613 4614 + 4614 4615 4609 + 4609 4615 4610 + 2754 2759 4611 + 4611 2759 2764 + 2764 4616 4611 + 4611 4616 4617 + 4617 4612 4611 + 4613 4612 4617 + 4617 4618 4613 + 4613 4618 4619 + 4619 4614 4613 + 4620 4614 4619 + 4615 4614 4620 + 4616 2764 2773 + 2773 4621 4616 + 4616 4621 4622 + 4622 4617 4616 + 4618 4617 4622 + 4622 4623 4618 + 4618 4623 4624 + 4624 4619 4618 + 4625 4619 4624 + 4619 4625 4620 + 4621 2773 2777 + 2777 4626 4621 + 4622 4621 4626 + 4626 4627 4622 + 4623 4622 4627 + 4627 4628 4623 + 4623 4628 4629 + 4629 4624 4623 + 4630 4624 4629 + 4624 4630 4625 + 4626 2777 2782 + 2782 4631 4626 + 4626 4631 4632 + 4632 4627 4626 + 4628 4627 4632 + 4632 4633 4628 + 4628 4633 4634 + 4634 4629 4628 + 4629 4634 4635 + 4629 4635 4630 + 4631 2782 2787 + 2787 4636 4631 + 4632 4631 4636 + 4636 4637 4632 + 4633 4632 4637 + 4637 4638 4633 + 4633 4638 4639 + 4639 4634 4633 + 4635 4634 4639 + 4636 2787 4640 + 4640 4641 4636 + 4636 4641 4642 + 4642 4637 4636 + 4638 4637 4642 + 4638 4642 4643 + 4643 4644 4638 + 4638 4644 4639 + 4640 2787 2786 + 2786 2792 4640 + 4645 4640 2792 + 4641 4640 4645 + 4645 4646 4641 + 4642 4641 4646 + 4646 4647 4642 + 4647 4648 4642 + 4648 4643 4642 + 4649 4643 4648 + 4644 4643 4649 + 2792 4650 4645 + 4651 4645 4650 + 4645 4651 4646 + 4646 4651 4652 + 4652 4647 4646 + 4653 4647 4652 + 4647 4653 4654 + 4654 4648 4647 + 2791 4650 2792 + 2791 4655 4650 + 4650 4655 4651 + 4652 4651 4655 + 4655 4656 4652 + 4657 4652 4656 + 4652 4657 4653 + 4653 4657 4658 + 4658 4659 4653 + 4654 4653 4659 + 4655 2791 2790 + 2790 4656 4655 + 4660 4656 2790 + 4656 4660 4657 + 4658 4657 4660 + 4660 4661 4658 + 4662 4658 4661 + 4658 4662 4663 + 4663 4659 4658 + 2790 2796 4660 + 4660 2796 4664 + 4664 4661 4660 + 4665 4661 4664 + 4661 4665 4662 + 4666 4662 4665 + 4663 4662 4666 + 4666 4667 4663 + 4668 4663 4667 + 4659 4663 4668 + 4664 2796 2795 + 2795 4669 4664 + 4670 4664 4669 + 4664 4670 4665 + 4665 4670 4671 + 4671 4672 4665 + 4665 4672 4666 + 2804 4669 2795 + 4669 2804 4673 + 4673 4674 4669 + 4669 4674 4670 + 4671 4670 4674 + 4674 4675 4671 + 4676 4671 4675 + 4671 4676 4677 + 4677 4672 4671 + 4673 2804 2803 + 2803 4678 4673 + 4679 4673 4678 + 4674 4673 4679 + 4679 4675 4674 + 4680 4675 4679 + 4675 4680 4676 + 4681 4676 4680 + 4677 4676 4681 + 4682 4678 2803 + 4678 4682 4683 + 4683 4684 4678 + 4678 4684 4679 + 4684 4685 4679 + 4686 4679 4685 + 4679 4686 4680 + 2803 4687 4682 + 4682 4687 4688 + 4688 4689 4682 + 4682 4689 4690 + 4690 4683 4682 + 4687 2803 2809 + 2809 4691 4687 + 4688 4687 4691 + 4691 4692 4688 + 4693 4688 4692 + 4688 4693 4694 + 4694 4689 4688 + 4689 4694 4695 + 4695 4690 4689 + 4691 2809 2808 + 4691 2808 4696 + 4696 4692 4691 + 4697 4692 4696 + 4692 4697 4693 + 4693 4697 4698 + 4698 4699 4693 + 4694 4693 4699 + 4699 4700 4694 + 4695 4694 4700 + 2807 4696 2808 + 4701 4696 2807 + 4696 4701 4697 + 4697 4701 4702 + 4702 4698 4697 + 4703 4698 4702 + 4698 4703 4704 + 4704 4699 4698 + 4699 4704 4705 + 4705 4700 4699 + 2807 2813 4701 + 4701 2813 4706 + 4706 4702 4701 + 4707 4702 4706 + 4702 4707 4703 + 4703 4707 4708 + 4708 4709 4703 + 4704 4703 4709 + 4709 4710 4704 + 4705 4704 4710 + 2813 2817 4706 + 2822 4706 2817 + 4711 4706 2822 + 4706 4711 4707 + 4707 4711 4712 + 4712 4708 4707 + 4713 4708 4712 + 4708 4713 4714 + 4714 4709 4708 + 4709 4714 4715 + 4715 4710 4709 + 2822 4716 4711 + 4711 4716 4717 + 4717 4712 4711 + 4718 4712 4717 + 4712 4718 4713 + 4713 4718 4719 + 4719 4720 4713 + 4714 4713 4720 + 4716 2822 2821 + 2821 4721 4716 + 4716 4721 4722 + 4722 4717 4716 + 4723 4717 4722 + 4717 4723 4718 + 4718 4723 4724 + 4724 4719 4718 + 4721 2821 2826 + 2826 4725 4721 + 4721 4725 4726 + 4726 4722 4721 + 4727 4722 4726 + 4722 4727 4723 + 4723 4727 4728 + 4728 4724 4723 + 4729 4724 4728 + 4719 4724 4729 + 4725 2826 2831 + 2831 4730 4725 + 4725 4730 4731 + 4731 4726 4725 + 4732 4726 4731 + 4726 4732 4727 + 4727 4732 4733 + 4733 4728 4727 + 4730 2831 2835 + 2835 4734 4730 + 4730 4734 4735 + 4735 4731 4730 + 4736 4731 4735 + 4731 4736 4732 + 4733 4732 4736 + 4736 4737 4733 + 4738 4733 4737 + 4728 4733 4738 + 4734 2835 2839 + 2839 4739 4734 + 4735 4734 4739 + 4739 4740 4735 + 4741 4735 4740 + 4735 4741 4736 + 4736 4741 4742 + 4742 4737 4736 + 4743 4737 4742 + 4737 4743 4738 + 4739 2839 2848 + 2848 4744 4739 + 4739 4744 4745 + 4745 4740 4739 + 4746 4740 4745 + 4740 4746 4741 + 4741 4746 4747 + 4747 4742 4741 + 4743 4742 4747 + 4747 4748 4743 + 4738 4743 4748 + 4744 2848 2853 + 2853 4749 4744 + 4744 4749 4750 + 4750 4745 4744 + 4751 4745 4750 + 4745 4751 4746 + 4746 4751 4752 + 4752 4747 4746 + 4747 4752 4753 + 4753 4748 4747 + 4749 2853 4754 + 4754 4755 4749 + 4749 4755 4756 + 4756 4750 4749 + 4757 4750 4756 + 4750 4757 4751 + 4752 4751 4757 + 4757 4758 4752 + 4753 4752 4758 + 4754 2853 2857 + 2857 4759 4754 + 4760 4754 4759 + 4755 4754 4760 + 4760 4761 4755 + 4755 4761 4762 + 4762 4756 4755 + 4763 4756 4762 + 4759 2857 2856 + 4759 2856 2863 + 2863 4764 4759 + 4759 4764 4760 + 4764 4765 4760 + 4766 4760 4765 + 4761 4760 4766 + 4766 4767 4761 + 4761 4767 4768 + 4768 4762 4761 + 2862 4764 2863 + 4764 2862 4769 + 4769 4765 4764 + 4770 4765 4769 + 4765 4770 4766 + 4771 4766 4770 + 4767 4766 4771 + 4771 4772 4767 + 4767 4772 4773 + 4773 4768 4767 + 4769 2862 2861 + 2861 4774 4769 + 4775 4769 4774 + 4769 4775 4770 + 4770 4775 4776 + 4776 4777 4770 + 4770 4777 4771 + 4778 4771 4777 + 4772 4771 4778 + 2871 4774 2861 + 4779 4774 2871 + 4774 4779 4775 + 4776 4775 4779 + 4779 4780 4776 + 4781 4776 4780 + 4776 4781 4782 + 4782 4777 4776 + 4777 4782 4778 + 2871 2876 4779 + 4779 2876 2881 + 2881 4780 4779 + 4783 4780 2881 + 4780 4783 4781 + 4781 4783 4784 + 4784 4785 4781 + 4782 4781 4785 + 4785 4786 4782 + 4782 4786 4787 + 4787 4778 4782 + 2881 2885 4783 + 4783 2885 4788 + 4788 4784 4783 + 4784 4788 4789 + 4789 4790 4784 + 4784 4790 4791 + 4791 4785 4784 + 4785 4791 4792 + 4792 4786 4785 + 2889 4788 2885 + 4789 4788 2889 + 2889 2897 4789 + 4789 2897 4793 + 4793 4794 4789 + 4790 4789 4794 + 4794 4795 4790 + 4790 4795 4796 + 4796 4791 4790 + 4792 4791 4796 + 4797 4793 2897 + 4793 4797 4798 + 4798 4799 4793 + 4793 4799 4800 + 4800 4794 4793 + 4794 4800 4801 + 4801 4795 4794 + 2897 2896 4797 + 4802 4797 2896 + 4798 4797 4802 + 4802 4803 4798 + 4804 4798 4803 + 4799 4798 4804 + 4804 4805 4799 + 4800 4799 4805 + 4805 4806 4800 + 4801 4800 4806 + 2896 2895 4802 + 2895 4807 4802 + 4808 4802 4807 + 4802 4808 4809 + 4809 4803 4802 + 4803 4809 4810 + 4810 4811 4803 + 4803 4811 4804 + 2901 4807 2895 + 4807 2901 2906 + 2906 4812 4807 + 4807 4812 4808 + 4813 4808 4812 + 4809 4808 4813 + 4813 4814 4809 + 4810 4809 4814 + 4812 2906 4815 + 4815 4816 4812 + 4812 4816 4813 + 4816 4817 4813 + 4818 4813 4817 + 4813 4818 4819 + 4819 4814 4813 + 2911 4815 2906 + 4820 4815 2911 + 4816 4815 4820 + 4816 4820 4821 + 4821 4817 4816 + 4822 4817 4821 + 4817 4822 4818 + 4818 4822 4823 + 4824 4818 4823 + 4819 4818 4824 + 2911 4825 4820 + 4821 4820 4825 + 4825 4826 4821 + 4827 4821 4826 + 4821 4827 4822 + 4822 4827 4828 + 4828 4829 4822 + 4822 4829 4823 + 4830 4825 2911 + 4825 4830 4831 + 4831 4826 4825 + 4826 4831 4832 + 4832 4833 4826 + 4826 4833 4827 + 4827 4833 4834 + 4834 4828 4827 + 2911 2910 4830 + 4830 2910 2916 + 2916 4835 4830 + 4830 4835 4836 + 4836 4831 4830 + 4832 4831 4836 + 4836 4837 4832 + 4832 4837 4838 + 4838 4839 4832 + 4833 4832 4839 + 4839 4834 4833 + 4840 4835 2916 + 4835 4840 4841 + 4841 4836 4835 + 4836 4841 4842 + 4842 4837 4836 + 4837 4842 4843 + 4843 4838 4837 + 2916 2915 4840 + 4840 2915 2921 + 2921 2930 4840 + 4840 2930 4844 + 4844 4841 4840 + 4842 4841 4844 + 4844 4845 4842 + 4842 4845 4846 + 4846 4843 4842 + 4847 4843 4846 + 4843 4847 4848 + 4848 4838 4843 + 2930 4849 4844 + 4850 4844 4849 + 4845 4844 4850 + 4845 4850 4851 + 4851 4852 4845 + 4845 4852 4846 + 4853 4849 2930 + 4854 4849 4853 + 4849 4854 4850 + 4850 4854 4855 + 4855 4851 4850 + 4856 4851 4855 + 4851 4856 4852 + 4852 4856 4857 + 4857 4846 4852 + 2930 2929 4853 + 2939 4853 2929 + 4858 4853 2939 + 4853 4858 4854 + 4854 4858 4859 + 4859 4860 4854 + 4854 4860 4855 + 2939 4861 4858 + 4859 4858 4861 + 4861 4862 4859 + 4862 4863 4859 + 4864 4859 4863 + 4859 4864 4860 + 4861 2939 2938 + 2938 4865 4861 + 4861 4865 4866 + 4866 4862 4861 + 4867 4862 4866 + 4862 4867 4868 + 4868 4863 4862 + 4868 4869 4863 + 4863 4869 4864 + 4865 2938 4870 + 4870 4871 4865 + 4865 4871 4872 + 4872 4866 4865 + 4873 4866 4872 + 4866 4873 4867 + 2937 4870 2938 + 4874 4870 2937 + 4870 4874 4875 + 4875 4871 4870 + 4871 4875 4876 + 4876 4872 4871 + 4872 4876 4877 + 4877 4878 4872 + 4872 4878 4873 + 2937 2947 4874 + 4874 2947 4879 + 4879 4880 4874 + 4875 4874 4880 + 4880 4881 4875 + 4876 4875 4881 + 4882 4876 4881 + 4877 4876 4882 + 2952 4879 2947 + 4879 2952 4883 + 4883 4884 4879 + 4879 4884 4885 + 4885 4880 4879 + 4881 4880 4885 + 4883 2952 2951 + 2951 4886 4883 + 4883 4886 4887 + 4887 4888 4883 + 4884 4883 4888 + 4888 4889 4884 + 4884 4889 4890 + 4890 4885 4884 + 2957 4886 2951 + 4886 2957 4891 + 4891 4887 4886 + 4892 4887 4891 + 4887 4892 4893 + 4893 4888 4887 + 4888 4893 4894 + 4894 4889 4888 + 4889 4894 4895 + 4895 4890 4889 + 4896 4891 2957 + 4897 4891 4896 + 4891 4897 4892 + 4892 4897 4898 + 4898 4899 4892 + 4893 4892 4899 + 4899 4900 4893 + 4894 4893 4900 + 2957 2962 4896 + 2961 4896 2962 + 4901 4896 2961 + 4896 4901 4897 + 4897 4901 4902 + 4902 4898 4897 + 4903 4898 4902 + 4898 4903 4904 + 4904 4899 4898 + 4899 4904 4905 + 4905 4900 4899 + 2961 2967 4901 + 4901 2967 4906 + 4906 4902 4901 + 4907 4902 4906 + 4902 4907 4903 + 4903 4907 4908 + 4908 4909 4903 + 4904 4903 4909 + 4909 4042 4904 + 4905 4904 4042 + 4910 4906 2967 + 4911 4906 4910 + 4906 4911 4907 + 4907 4911 4912 + 4912 4908 4907 + 4028 4908 4912 + 4908 4028 4027 + 4027 4909 4908 + 2967 2966 4910 + 2972 4910 2966 + 4913 4910 2972 + 4910 4913 4911 + 4911 4913 4914 + 4914 4912 4911 + 4915 4912 4914 + 4912 4915 4028 + 4028 4915 4022 + 4023 4022 4915 + 2972 4916 4913 + 4913 4916 4917 + 4917 4914 4913 + 4918 4914 4917 + 4914 4918 4915 + 4915 4918 4023 + 4919 4023 4918 + 4017 4023 4919 + 4916 2972 2971 + 2971 2981 4916 + 4916 2981 4920 + 4920 4917 4916 + 4921 4917 4920 + 4917 4921 4918 + 4918 4921 4919 + 4922 4919 4921 + 4017 4919 4922 + 4922 4018 4017 + 4923 4018 4922 + 4018 4923 4011 + 2986 4920 2981 + 4924 4920 2986 + 4920 4924 4921 + 4921 4924 4922 + 4924 4925 4922 + 4923 4922 4925 + 4925 3016 4923 + 4011 4923 3016 + 2986 4926 4924 + 4924 4926 4927 + 4927 4925 4924 + 3016 4925 4927 + 4927 3017 3016 + 3017 4927 3003 + 3003 4928 3017 + 4926 2986 2985 + 2985 2991 4926 + 4926 2991 4929 + 3003 4927 4926 + 4909 4027 4037 + 4037 4042 4909 + 4042 4041 4905 + 4930 4905 4041 + 4900 4905 4930 + 4930 4931 4900 + 4900 4931 4894 + 4895 4894 4931 + 4041 4046 4930 + 4932 4930 4046 + 4931 4930 4932 + 4932 4933 4931 + 4931 4933 4895 + 4934 4895 4933 + 4890 4895 4934 + 4046 4050 4932 + 4935 4932 4050 + 4933 4932 4935 + 4935 4936 4933 + 4933 4936 4934 + 4937 4934 4936 + 4938 4934 4937 + 4934 4938 4890 + 4890 4938 4939 + 4939 4885 4890 + 4050 4055 4935 + 4940 4935 4055 + 4936 4935 4940 + 4940 4941 4936 + 4936 4941 4937 + 4942 4937 4941 + 4943 4937 4942 + 4937 4943 4938 + 4939 4938 4943 + 4055 4436 4940 + 4944 4940 4436 + 4941 4940 4944 + 4944 4945 4941 + 4941 4945 4942 + 4946 4942 4945 + 4947 4942 4946 + 4942 4947 4943 + 4436 4435 4944 + 4948 4944 4435 + 4945 4944 4948 + 4948 4332 4945 + 4945 4332 4946 + 4331 4946 4332 + 4337 4946 4331 + 4946 4337 4947 + 4435 4327 4948 + 4326 4948 4327 + 4332 4948 4326 + 4885 4939 4881 + 4881 4939 4949 + 4949 4950 4881 + 4881 4950 4882 + 4951 4882 4950 + 4882 4951 4952 + 4882 4952 4877 + 4943 4949 4939 + 4953 4949 4943 + 4949 4953 4950 + 4950 4953 4951 + 4954 4951 4953 + 4952 4951 4954 + 4954 4342 4952 + 4952 4342 4341 + 4877 4952 4341 + 4955 4877 4341 + 4878 4877 4955 + 4943 4947 4953 + 4953 4947 4954 + 4947 4337 4954 + 4336 4954 4337 + 4954 4336 4342 + 4956 4417 4416 + 4416 4957 4956 + 4958 4956 4957 + 4957 4959 4958 + 4959 4960 4958 + 4961 4960 4959 + 4960 4961 4962 + 4957 4416 4423 + 4423 4444 4957 + 4957 4444 4449 + 4449 4959 4957 + 4963 4959 4449 + 4959 4963 4961 + 4961 4963 4964 + 4964 4965 4961 + 4962 4961 4965 + 4965 4966 4962 + 4449 4453 4963 + 4963 4453 4967 + 4967 4968 4963 + 4963 4968 4964 + 4969 4964 4968 + 4969 4970 4964 + 4964 4970 4971 + 4971 4965 4964 + 4971 4966 4965 + 4457 4967 4453 + 4462 4967 4457 + 4967 4462 4972 + 4972 4968 4967 + 4968 4972 4969 + 4969 4972 4973 + 4973 4974 4969 + 4970 4969 4974 + 4974 4975 4970 + 4970 4975 4976 + 4971 4970 4976 + 4972 4462 4977 + 4977 4973 4972 + 4978 4973 4977 + 4973 4978 4979 + 4979 4974 4973 + 4974 4979 4980 + 4980 4975 4974 + 4975 4980 4981 + 4981 4976 4975 + 4461 4977 4462 + 4982 4977 4461 + 4977 4982 4978 + 4978 4982 4983 + 4983 4984 4978 + 4979 4978 4984 + 4984 4985 4979 + 4980 4979 4985 + 4985 4986 4980 + 4981 4980 4986 + 4461 4467 4982 + 4982 4467 4987 + 4987 4983 4982 + 4988 4983 4987 + 4983 4988 4989 + 4989 4984 4983 + 4984 4989 4990 + 4990 4985 4984 + 4985 4990 4991 + 4991 4986 4985 + 4472 4987 4467 + 4992 4987 4472 + 4987 4992 4988 + 4988 4992 4993 + 4993 4994 4988 + 4989 4988 4994 + 4994 4995 4989 + 4990 4989 4995 + 4995 4996 4990 + 4991 4990 4996 + 4472 4997 4992 + 4992 4997 4998 + 4998 4999 4992 + 4992 4999 4993 + 4997 4472 4471 + 4471 4477 4997 + 4997 4477 5000 + 5000 4998 4997 + 5001 4998 5000 + 4998 5001 5002 + 5002 4999 4998 + 4999 5002 5003 + 5003 4993 4999 + 4482 5000 4477 + 5004 5000 4482 + 5000 5004 5001 + 5001 5004 5005 + 5005 5006 5001 + 5002 5001 5006 + 5006 5007 5002 + 5003 5002 5007 + 4482 4487 5004 + 5004 4487 5008 + 5008 5005 5004 + 5009 5005 5008 + 5005 5009 5010 + 5010 5006 5005 + 5006 5010 5011 + 5011 5007 5006 + 5012 5008 4487 + 5013 5008 5012 + 5008 5013 5009 + 5009 5013 5014 + 5014 5015 5009 + 5010 5009 5015 + 5015 5016 5010 + 5011 5010 5016 + 4487 4486 5012 + 4492 5012 4486 + 5017 5012 4492 + 5012 5017 5013 + 5013 5017 5018 + 5018 5014 5013 + 5019 5014 5018 + 5014 5019 5020 + 5020 5015 5014 + 5015 5020 5021 + 5021 5016 5015 + 4492 4497 5017 + 5017 4497 5022 + 5022 5018 5017 + 5023 5018 5022 + 5018 5023 5019 + 5024 5019 5023 + 5020 5019 5024 + 5024 5025 5020 + 5020 5025 5026 + 5026 5021 5020 + 4502 5022 4497 + 5027 5022 4502 + 5022 5027 5023 + 5023 5027 5028 + 5028 5029 5023 + 5023 5029 5024 + 5030 5024 5029 + 5024 5030 5031 + 5031 5025 5024 + 4502 4507 5027 + 5028 5027 4507 + 4507 5032 5028 + 5033 5028 5032 + 5028 5033 5034 + 5034 5029 5028 + 5029 5034 5030 + 5035 5030 5034 + 5031 5030 5035 + 4511 5032 4507 + 5036 5032 4511 + 5032 5036 5033 + 5037 5033 5036 + 5034 5033 5037 + 5037 5038 5034 + 5034 5038 5035 + 4511 5039 5036 + 5036 5039 5040 + 5040 5041 5036 + 5036 5041 5037 + 5042 5037 5041 + 5037 5042 5043 + 5043 5038 5037 + 5039 4511 4515 + 4515 4520 5039 + 5040 5039 4520 + 4520 5044 5040 + 5045 5040 5044 + 5040 5045 5046 + 5046 5041 5040 + 5041 5046 5042 + 5047 5042 5046 + 5043 5042 5047 + 4524 5044 4520 + 5048 5044 4524 + 5044 5048 5045 + 5049 5045 5048 + 5046 5045 5049 + 5049 5050 5046 + 5046 5050 5047 + 4524 4533 5048 + 5048 4533 5051 + 5051 5052 5048 + 5048 5052 5049 + 5053 5049 5052 + 5049 5053 5054 + 5054 5050 5049 + 5050 5054 5055 + 5055 5047 5050 + 5051 4533 4537 + 4537 5056 5051 + 5057 5051 5056 + 5051 5057 5058 + 5058 5052 5051 + 5052 5058 5053 + 5053 5058 5059 + 3409 5053 5059 + 5054 5053 3409 + 5060 5056 4537 + 5060 5061 5056 + 5056 5061 5057 + 5062 5057 5061 + 5058 5057 5062 + 5062 5059 5058 + 4537 4542 5060 + 5063 5060 4542 + 5064 5063 4542 + 5065 5064 4542 + 5066 5064 5065 + 5066 5067 5064 + 5064 5067 5068 + 5068 5069 5064 + 4542 4554 5065 + 5070 5065 4554 + 5071 5065 5070 + 5065 5071 5066 + 5072 5066 5071 + 5067 5066 5072 + 5072 5073 5067 + 5074 5067 5073 + 5075 5074 5073 + 4554 4553 5070 + 5070 4553 4559 + 4559 5076 5070 + 5077 5070 5076 + 5070 5077 5071 + 5071 5077 5078 + 5078 5079 5071 + 5071 5079 5072 + 4564 5076 4559 + 5080 5076 4564 + 5076 5080 5077 + 5078 5077 5080 + 5080 5081 5078 + 5082 5078 5081 + 5078 5082 5083 + 5083 5079 5078 + 4564 5084 5080 + 5080 5084 5085 + 5085 5081 5080 + 5086 5081 5085 + 5081 5086 5082 + 5087 5082 5086 + 5083 5082 5087 + 5084 4564 4569 + 4569 5088 5084 + 5085 5084 5088 + 5088 5089 5085 + 5090 5085 5089 + 5085 5090 5086 + 5086 5090 5091 + 5091 5092 5086 + 5086 5092 5087 + 5088 4569 4568 + 4568 5093 5088 + 5088 5093 5094 + 5094 5089 5088 + 5095 5089 5094 + 5089 5095 5090 + 5091 5090 5095 + 5095 5096 5091 + 5093 4568 4574 + 4574 5097 5093 + 5094 5093 5097 + 5097 5098 5094 + 5099 5094 5098 + 5094 5099 5095 + 5095 5099 168 + 168 5100 5095 + 5097 4574 4573 + 4573 5101 5097 + 5097 5101 5102 + 5102 5098 5097 + 5103 5098 5102 + 5098 5103 5099 + 168 5099 5103 + 5103 5104 168 + 5105 168 5104 + 5101 4573 5106 + 5106 5107 5101 + 5102 5101 5107 + 5107 5108 5102 + 5109 5102 5108 + 5102 5109 5103 + 5103 5109 5110 + 5110 5104 5103 + 4577 5106 4573 + 4586 5106 4577 + 5107 5106 4586 + 4586 5111 5107 + 5107 5111 5112 + 5112 5108 5107 + 5113 5108 5112 + 5108 5113 5109 + 5110 5109 5113 + 5111 4586 5114 + 5114 5115 5111 + 5112 5111 5115 + 5115 5116 5112 + 5117 5112 5116 + 5112 5117 5113 + 4585 5114 4586 + 5118 5114 4585 + 5115 5114 5118 + 5118 5119 5115 + 5115 5119 1658 + 1658 5116 5115 + 5120 5116 1658 + 5116 5120 5117 + 5121 5117 5120 + 5113 5117 5121 + 4585 4591 5118 + 5118 4591 5122 + 5122 1652 5118 + 5119 5118 1652 + 1652 1651 5119 + 1658 5119 1651 + 4590 5122 4591 + 5122 4590 5123 + 5122 5123 1653 + 1653 1652 5122 + 5123 4590 4589 + 4589 5124 5123 + 1653 5123 5124 + 1648 1653 5124 + 5124 5125 1648 + 5124 4589 4588 + 4588 4596 5124 + 5124 4596 5126 + 5126 5125 5124 + 5125 5126 5127 + 5127 5128 5125 + 5125 5128 5129 + 5129 5130 5125 + 1642 5130 5129 + 5126 4596 4595 + 4595 5131 5126 + 5127 5126 5131 + 5131 5132 5127 + 5127 5132 5133 + 5133 5134 5127 + 5128 5127 5134 + 5134 5135 5128 + 5129 5128 5135 + 4606 5131 4595 + 5132 5131 4606 + 4606 4610 5132 + 5132 4610 4615 + 4615 5133 5132 + 4620 5133 4615 + 5133 4620 5136 + 5136 5134 5133 + 5134 5136 5137 + 5137 5135 5134 + 5135 5137 5138 + 5138 1644 5135 + 5135 1644 5129 + 1643 5129 1644 + 5129 1643 1642 + 5139 5136 4620 + 5137 5136 5139 + 5139 5140 5137 + 5137 5140 5141 + 5141 5138 5137 + 1638 5138 5141 + 1644 5138 1638 + 4620 4625 5139 + 5142 5139 4625 + 5139 5142 5140 + 5140 5142 5143 + 5143 5144 5140 + 5140 5144 5141 + 5145 5141 5144 + 5146 5141 5145 + 5141 5146 1638 + 1638 5146 1639 + 4625 4630 5142 + 5143 5142 4630 + 4630 4635 5143 + 4635 5147 5143 + 5148 5143 5147 + 5144 5143 5148 + 5148 5149 5144 + 5144 5149 5145 + 4639 5147 4635 + 5150 5147 4639 + 5147 5150 5148 + 5148 5150 5151 + 5151 5152 5148 + 5149 5148 5152 + 5152 5153 5149 + 5145 5149 5153 + 4639 5154 5150 + 5150 5154 5155 + 5155 5151 5150 + 5156 5151 5155 + 5151 5156 5157 + 5157 5152 5151 + 5152 5157 5158 + 5158 5153 5152 + 5154 4639 4644 + 4644 5159 5154 + 5154 5159 5160 + 5155 5154 5160 + 5160 5161 5155 + 5162 5155 5161 + 5155 5162 5156 + 4649 5159 4644 + 5159 4649 5163 + 5163 5160 5159 + 5164 5160 5163 + 5160 5164 5165 + 5165 5161 5160 + 5161 5165 5166 + 5161 5166 5162 + 5167 5162 5166 + 5156 5162 5167 + 5163 4649 5168 + 5168 5169 5163 + 5170 5163 5169 + 5163 5170 5164 + 4648 5168 4649 + 5171 5168 4648 + 5168 5171 5172 + 5172 5169 5168 + 5169 5172 5173 + 5169 5173 5170 + 5174 5170 5173 + 5164 5170 5174 + 4648 4654 5171 + 5171 4654 5175 + 5175 5176 5171 + 5171 5176 5177 + 5172 5171 5177 + 5177 5178 5172 + 5173 5172 5178 + 5178 5179 5173 + 5173 5179 5174 + 4659 5175 4654 + 4668 5175 4659 + 5176 5175 4668 + 4668 5180 5176 + 5176 5180 5181 + 5181 5177 5176 + 5182 5177 5181 + 5177 5182 5183 + 5183 5178 5177 + 5179 5178 5183 + 5180 4668 5184 + 5184 5185 5180 + 5181 5180 5185 + 5186 5181 5185 + 5187 5181 5186 + 5181 5187 5182 + 4667 5184 4668 + 5188 5184 4667 + 5184 5188 5189 + 5189 5185 5184 + 5185 5189 5190 + 5190 5191 5185 + 5185 5191 5186 + 4667 5192 5188 + 5188 5192 5193 + 5193 5194 5188 + 5189 5188 5194 + 5194 5195 5189 + 5190 5189 5195 + 5192 4667 4666 + 4666 5196 5192 + 5192 5196 5197 + 5197 5193 5192 + 5198 5193 5197 + 5193 5198 5199 + 5199 5194 5193 + 5194 5199 5200 + 5200 5195 5194 + 5196 4666 4672 + 4672 4677 5196 + 5197 5196 4677 + 4677 5201 5197 + 5202 5197 5201 + 5197 5202 5198 + 5198 5202 5203 + 5203 5204 5198 + 5199 5198 5204 + 5204 5205 5199 + 5200 5199 5205 + 4681 5201 4677 + 5206 5201 4681 + 5201 5206 5202 + 5203 5202 5206 + 5206 5207 5203 + 5208 5203 5207 + 5203 5208 5209 + 5209 5204 5203 + 5204 5209 5210 + 5210 5205 5204 + 4681 5211 5206 + 5206 5211 5212 + 5212 5207 5206 + 5213 5207 5212 + 5207 5213 5208 + 5214 5208 5213 + 5209 5208 5214 + 5214 5215 5209 + 5210 5209 5215 + 5211 4681 5216 + 5216 5217 5211 + 5212 5211 5217 + 5217 5218 5212 + 5219 5212 5218 + 5212 5219 5213 + 4680 5216 4681 + 5220 5216 4680 + 5217 5216 5220 + 5220 5221 5217 + 5217 5221 5222 + 5222 5218 5217 + 5223 5218 5222 + 5218 5223 5219 + 5224 5219 5223 + 5213 5219 5224 + 4680 4686 5220 + 5220 4686 5225 + 5225 5226 5220 + 5221 5220 5226 + 5226 5227 5221 + 5222 5221 5227 + 5227 5228 5222 + 5229 5222 5228 + 5222 5229 5223 + 4685 5225 4686 + 5225 4685 5230 + 5230 5231 5225 + 5225 5231 5232 + 5232 5226 5225 + 5227 5226 5232 + 5232 5233 5227 + 5227 5233 5234 + 5234 5228 5227 + 5230 4685 4684 + 4684 5235 5230 + 5230 5235 5236 + 5236 5237 5230 + 5231 5230 5237 + 5237 5238 5231 + 5232 5231 5238 + 5238 5239 5232 + 5233 5232 5239 + 5235 4684 4683 + 4683 5240 5235 + 5235 5240 5241 + 5241 5236 5235 + 5242 5236 5241 + 5236 5242 5243 + 5243 5237 5236 + 5238 5237 5243 + 5240 4683 4690 + 4690 5244 5240 + 5240 5244 5245 + 5245 5241 5240 + 5246 5241 5245 + 5241 5246 5242 + 5242 5246 5247 + 5247 5248 5242 + 5243 5242 5248 + 5249 5244 4690 + 5244 5249 5250 + 5250 5245 5244 + 5245 5250 5251 + 5251 5252 5245 + 5245 5252 5246 + 5247 5246 5252 + 4690 4695 5249 + 5249 4695 5253 + 5253 5254 5249 + 5250 5249 5254 + 5254 5255 5250 + 5251 5250 5255 + 4700 5253 4695 + 5256 5253 4700 + 5253 5256 5257 + 5257 5254 5253 + 5254 5257 5258 + 5258 5255 5254 + 5255 5258 5259 + 5259 5260 5255 + 5255 5260 5251 + 4700 4705 5256 + 5256 4705 5261 + 5261 5262 5256 + 5257 5256 5262 + 5262 5263 5257 + 5258 5257 5263 + 5263 5264 5258 + 5259 5258 5264 + 4710 5261 4705 + 5265 5261 4710 + 5261 5265 5266 + 5266 5262 5261 + 5262 5266 5267 + 5267 5263 5262 + 5263 5267 5268 + 5268 5264 5263 + 4710 4715 5265 + 5265 4715 5269 + 5269 5270 5265 + 5266 5265 5270 + 5270 5271 5266 + 5267 5266 5271 + 5271 5272 5267 + 5268 5267 5272 + 5269 4715 4714 + 4714 5273 5269 + 5274 5269 5273 + 5270 5269 5274 + 5274 5275 5270 + 5270 5275 5276 + 5276 5271 5270 + 5272 5271 5276 + 4720 5273 4714 + 5273 4720 5277 + 5273 5277 5274 + 5274 5277 5278 + 5278 5279 5274 + 5279 5280 5274 + 5275 5274 5280 + 5277 4720 4719 + 4719 5278 5277 + 4729 5278 4719 + 5278 4729 5281 + 5281 5279 5278 + 5282 5279 5281 + 5279 5282 5283 + 5283 5280 5279 + 5280 5283 5284 + 5284 5285 5280 + 5280 5285 5275 + 5281 4729 5286 + 5286 5287 5281 + 5288 5281 5287 + 5281 5288 5282 + 5282 5288 5289 + 5289 5290 5282 + 5283 5282 5290 + 4728 5286 4729 + 4738 5286 4728 + 5286 4738 5291 + 5291 5287 5286 + 5292 5287 5291 + 5287 5292 5288 + 5288 5292 5293 + 5293 5289 5288 + 5294 5289 5293 + 5290 5289 5294 + 5295 5291 4738 + 5296 5291 5295 + 5291 5296 5292 + 5292 5296 5297 + 5297 5293 5292 + 5298 5293 5297 + 5293 5298 5294 + 4748 5295 4738 + 5299 5295 4748 + 5300 5295 5299 + 5295 5300 5296 + 5296 5300 5301 + 5301 5297 5296 + 5302 5297 5301 + 5297 5302 5298 + 4748 4753 5299 + 5303 5299 4753 + 5304 5299 5303 + 5299 5304 5300 + 5300 5304 5305 + 5305 5301 5300 + 5306 5301 5305 + 5301 5306 5302 + 4753 5307 5303 + 5308 5303 5307 + 5309 5303 5308 + 5303 5309 5304 + 5304 5309 5310 + 5310 5305 5304 + 4787 5305 5310 + 5305 4787 5306 + 4758 5307 4753 + 5311 5307 4758 + 5307 5311 5308 + 5311 5312 5308 + 4773 5308 5312 + 5308 4773 5309 + 5309 4773 4772 + 4772 5310 5309 + 4778 5310 4772 + 5310 4778 4787 + 4758 5313 5311 + 5311 5313 5314 + 5314 5312 5311 + 4768 5312 5314 + 5312 4768 4773 + 5313 4758 4757 + 4757 4763 5313 + 5313 4763 5314 + 4762 5314 4763 + 5314 4762 4768 + 5306 4787 4786 + 4786 4792 5306 + 5302 5306 4792 + 4792 5315 5302 + 5298 5302 5315 + 5315 5316 5298 + 5294 5298 5316 + 4796 5315 4792 + 5316 5315 4796 + 4796 5317 5316 + 5316 5317 5318 + 5318 5319 5316 + 5316 5319 5294 + 5320 5294 5319 + 5294 5320 5290 + 5317 4796 5321 + 5321 5322 5317 + 5318 5317 5322 + 5322 5323 5318 + 5324 5318 5323 + 5318 5324 5325 + 5325 5319 5318 + 5319 5325 5320 + 4795 5321 4796 + 5326 5321 4795 + 5321 5326 5327 + 5327 5322 5321 + 5322 5327 5328 + 5328 5323 5322 + 5323 5328 5329 + 5329 5330 5323 + 5323 5330 5324 + 4795 4801 5326 + 5326 4801 5331 + 5331 5332 5326 + 5327 5326 5332 + 5332 5333 5327 + 5328 5327 5333 + 5333 5334 5328 + 5329 5328 5334 + 4806 5331 4801 + 5331 4806 5335 + 5335 5336 5331 + 5331 5336 5337 + 5337 5332 5331 + 5332 5337 5338 + 5338 5333 5332 + 5333 5338 5339 + 5339 5334 5333 + 5335 4806 4805 + 4805 5340 5335 + 5341 5335 5340 + 5336 5335 5341 + 5341 5342 5336 + 5337 5336 5342 + 5343 5337 5342 + 5338 5337 5343 + 5343 5344 5338 + 5339 5338 5344 + 5345 5340 4805 + 5340 5345 5346 + 5346 5341 5340 + 5342 5341 5346 + 5346 5347 5342 + 5342 5347 5348 + 5348 5349 5342 + 5342 5349 5343 + 4805 4804 5345 + 5345 4804 4811 + 4811 5350 5345 + 5345 5350 5351 + 5351 5346 5345 + 5347 5346 5351 + 5351 5352 5347 + 5348 5347 5352 + 4869 5348 5352 + 5353 5348 4869 + 5349 5348 5353 + 5350 4811 4810 + 4810 5354 5350 + 5350 5354 5355 + 5355 5351 5350 + 5351 5355 5356 + 5356 5352 5351 + 5352 5356 4860 + 4860 4864 5352 + 5352 4864 4869 + 5354 4810 5357 + 5357 5358 5354 + 5354 5358 5359 + 5359 5355 5354 + 5356 5355 5359 + 5359 4855 5356 + 4860 5356 4855 + 4814 5357 4810 + 5360 5357 4814 + 5358 5357 5360 + 5360 5361 5358 + 5358 5361 5362 + 5362 5359 5358 + 5359 5362 5363 + 5363 4855 5359 + 4855 5363 4856 + 4857 4856 5363 + 4814 4819 5360 + 5360 4819 5364 + 5364 5365 5360 + 5361 5360 5365 + 5365 5366 5361 + 5362 5361 5366 + 5366 5367 5362 + 5363 5362 5367 + 5367 5368 5363 + 5363 5368 4857 + 4824 5364 4819 + 5369 5364 4824 + 5364 5369 5370 + 5370 5365 5364 + 5366 5365 5370 + 5370 5371 5366 + 5366 5371 5372 + 5372 5367 5366 + 5372 5368 5367 + 5368 5372 5373 + 5373 4857 5368 + 5369 4824 5374 + 5374 5375 5369 + 5370 5369 5375 + 5375 5376 5370 + 5377 5376 5375 + 5375 5378 5377 + 5377 5378 5379 + 4823 5374 4824 + 5378 5374 4823 + 5378 5375 5374 + 4823 5380 5378 + 5378 5380 5379 + 5381 5380 4823 + 5380 5381 5382 + 5382 5383 5380 + 5383 5382 5384 + 5384 5385 5383 + 4823 5386 5381 + 5381 5386 5387 + 5387 5388 5381 + 5382 5381 5388 + 5388 5389 5382 + 5384 5382 5389 + 5386 4823 4829 + 4829 5390 5386 + 5387 5386 5390 + 5390 5391 5387 + 5392 5387 5391 + 5388 5387 5392 + 5392 5393 5388 + 5388 5393 5394 + 5394 5389 5388 + 4828 5390 4829 + 5390 4828 4834 + 4834 5391 5390 + 5391 4834 4839 + 4839 5395 5391 + 5391 5395 5392 + 5396 5392 5395 + 5393 5392 5396 + 5396 5397 5393 + 5393 5397 5398 + 5398 5394 5393 + 5395 4839 4838 + 4838 4848 5395 + 5395 4848 5396 + 5399 5396 4848 + 5397 5396 5399 + 5399 5400 5397 + 5397 5400 5401 + 5401 5398 5397 + 5402 5398 5401 + 5398 5402 5403 + 5403 5394 5398 + 4848 4847 5399 + 5404 5399 4847 + 5400 5399 5404 + 5404 5405 5400 + 5400 5405 5406 + 5406 5401 5400 + 5407 5401 5406 + 5401 5407 5402 + 4847 5408 5404 + 5409 5404 5408 + 5404 5409 5410 + 5410 5405 5404 + 5405 5410 5411 + 5411 5412 5405 + 5405 5412 5406 + 4846 5408 4847 + 5408 4846 4857 + 4857 5373 5408 + 5408 5373 5409 + 5409 5373 5372 + 5413 5409 5372 + 5410 5409 5413 + 5413 5414 5410 + 5410 5414 5415 + 5372 5371 5413 + 5416 5413 5371 + 5413 5416 5414 + 5371 5370 5416 + 5417 5411 5410 + 5418 5411 5417 + 5411 5418 5419 + 5419 5412 5411 + 5412 5419 5420 + 5420 5406 5412 + 5421 5406 5420 + 5406 5421 5407 + 5417 5422 5418 + 5423 5418 5422 + 5419 5418 5423 + 5423 5424 5419 + 5419 5424 4174 + 5420 5419 4174 + 4174 4179 5420 + 5421 5420 4179 + 4179 4178 5421 + 5407 5421 4178 + 5425 5423 5422 + 5426 5423 5425 + 5424 5423 5426 + 5426 5427 5424 + 5424 5427 5428 + 5428 4174 5424 + 4174 5428 4166 + 5425 5429 5426 + 5426 5429 5430 + 5430 5431 5426 + 5427 5426 5431 + 5431 5432 5427 + 5428 5427 5432 + 5432 5433 5428 + 4166 5428 5433 + 5429 5425 5434 + 5429 5434 4208 + 4208 5430 5429 + 5435 5430 4208 + 5430 5435 5436 + 5436 5431 5430 + 5431 5436 5437 + 5437 5432 5431 + 5434 5425 5438 + 5438 4203 5434 + 4208 5434 4203 + 5385 5438 5425 + 5439 5438 5385 + 5438 5439 4198 + 4198 4203 5438 + 5385 5384 5439 + 5440 5439 5384 + 4198 5439 5440 + 5440 4189 4198 + 4183 4189 5440 + 5440 5441 4183 + 4183 5441 5442 + 5442 4184 4183 + 5384 5443 5440 + 5441 5440 5443 + 5443 5403 5441 + 5442 5441 5403 + 5403 5402 5442 + 5444 5442 5402 + 5444 4184 5442 + 4184 5444 4178 + 4178 5444 5407 + 5389 5443 5384 + 5443 5389 5394 + 5394 5403 5443 + 5402 5407 5444 + 4208 4213 5435 + 5435 4213 5445 + 5445 5446 5435 + 5435 5446 5447 + 5447 5448 5435 + 5448 5436 5435 + 4218 5445 4213 + 5449 5445 4218 + 5445 5449 5450 + 5450 5446 5445 + 5446 5450 5451 + 5451 5447 5446 + 5447 5451 5452 + 5447 5452 5453 + 5453 5448 5447 + 4218 5454 5449 + 5455 5449 5454 + 5450 5449 5455 + 5455 5456 5450 + 5451 5450 5456 + 5457 5451 5456 + 5452 5451 5457 + 4217 5454 4218 + 5454 4217 5458 + 5458 5459 5454 + 5454 5459 5455 + 5459 5460 5455 + 5461 5455 5460 + 5456 5455 5461 + 5458 4217 4226 + 4226 5462 5458 + 5463 5458 5462 + 5458 5463 5459 + 5459 5463 5464 + 5464 5460 5459 + 5460 5464 5465 + 5460 5465 5461 + 5466 5462 4226 + 5466 5467 5462 + 5462 5467 5463 + 5463 5467 5468 + 5468 5464 5463 + 5465 5464 5468 + 5468 5469 5465 + 5461 5465 5469 + 4226 5470 5466 + 5471 5466 5470 + 5467 5466 5471 + 5471 5468 5467 + 5468 5471 5472 + 5472 5469 5468 + 5469 5472 5473 + 5473 5474 5469 + 5469 5474 5461 + 5470 4226 5475 + 5475 5476 5470 + 5470 5476 5477 + 5477 5478 5470 + 5470 5478 5471 + 5472 5471 5478 + 5475 4226 4225 + 4225 5479 5475 + 5480 5475 5479 + 5476 5475 5480 + 5480 5481 5476 + 5476 5481 5482 + 5482 5477 5476 + 4231 5479 4225 + 5479 4231 5483 + 5483 5484 5479 + 5479 5484 5480 + 5484 5485 5480 + 5486 5480 5485 + 5480 5486 5481 + 5481 5486 5487 + 5487 5482 5481 + 3976 5483 4231 + 3975 5483 3976 + 5483 3975 5484 + 5484 3975 3974 + 3974 5485 5484 + 5485 3974 5488 + 5488 5489 5485 + 5485 5489 5486 + 5486 5489 5490 + 5490 5487 5486 + 5491 5487 5490 + 5487 5491 5482 + 5482 5491 5492 + 5492 5477 5482 + 5488 3974 3973 + 3973 5493 5488 + 5488 5493 5494 + 5494 5495 5488 + 5489 5488 5495 + 5495 5490 5489 + 5495 5496 5490 + 5490 5496 5491 + 5491 5496 5497 + 5492 5491 5497 + 3980 5493 3973 + 5493 3980 5498 + 5498 5499 5493 + 5493 5499 5494 + 5500 5494 5499 + 5500 5497 5494 + 5494 5497 5496 + 5496 5495 5494 + 3985 5498 3980 + 5501 5498 3985 + 5499 5498 5501 + 5501 5502 5499 + 5499 5502 5500 + 5500 5502 5503 + 5503 5504 5500 + 5497 5500 5504 + 3985 5505 5501 + 5501 5505 5506 + 5506 5507 5501 + 5502 5501 5507 + 5507 5503 5502 + 5503 5507 5508 + 5503 5508 5509 + 5509 5504 5503 + 5510 5505 3985 + 5505 5510 5511 + 5511 5512 5505 + 5505 5512 5506 + 3985 3984 5510 + 5510 3984 5513 + 5513 5514 5510 + 5511 5510 5514 + 5514 5515 5511 + 5516 5511 5515 + 5512 5511 5516 + 5513 3984 3983 + 5517 5513 3983 + 5518 5513 5517 + 5518 5514 5513 + 5514 5518 5519 + 5519 5515 5514 + 5515 5519 5520 + 5520 5521 5515 + 5515 5521 5516 + 5522 5517 3983 + 5523 5517 5522 + 5523 5524 5517 + 5517 5524 5518 + 5519 5518 5524 + 5525 5519 5524 + 5520 5519 5525 + 3983 5526 5522 + 5527 5522 5526 + 5528 5522 5527 + 5522 5528 5523 + 5523 5528 5529 + 5530 5523 5529 + 5524 5523 5530 + 3989 5526 3983 + 5526 3989 5531 + 5526 5531 5527 + 5532 5527 5531 + 5528 5527 5532 + 5532 5529 5528 + 5531 3989 3988 + 3988 5532 5531 + 5532 3988 5529 + 5529 3988 5533 + 5533 5534 5529 + 5529 5534 5535 + 5535 5530 5529 + 5536 5530 5535 + 5537 5530 5536 + 5530 5537 5524 + 5538 5533 3988 + 5539 5533 5538 + 5534 5533 5539 + 5534 5539 5540 + 5540 5535 5534 + 5541 5535 5540 + 5535 5541 5536 + 5542 5538 3988 + 5543 5538 5542 + 5538 5543 5544 + 5538 5544 5539 + 5539 5544 5545 + 5546 5542 3988 + 5547 5542 5546 + 5547 5548 5542 + 5542 5548 5543 + 5543 5548 5549 + 5549 5550 5543 + 5544 5543 5550 + 4234 5546 3988 + 4233 5546 4234 + 5551 5546 4233 + 5546 5551 5547 + 5547 5551 5552 + 3987 4234 3988 + 4235 4234 3987 + 3987 3986 4235 + 4235 3986 5553 + 5554 5540 5539 + 4233 4232 5551 + 5551 4232 237 + 237 5555 5551 + 5541 5540 5545 + 5545 5556 5541 + 5541 5556 5557 + 5557 5536 5541 + 5558 5536 5557 + 5536 5558 5537 + 5556 5545 5559 + 5559 5560 5556 + 5556 5560 5561 + 5561 5557 5556 + 5562 5557 5561 + 5557 5562 5558 + 5559 5545 5563 + 5563 5564 5559 + 5565 5559 5564 + 5560 5559 5565 + 5565 5566 5560 + 5566 5561 5560 + 5567 5561 5566 + 5561 5567 5562 + 5568 5563 5545 + 5569 5563 5568 + 5569 5564 5563 + 5564 5569 5570 + 5570 5565 5564 + 5565 5570 5571 + 5571 5566 5565 + 5566 5571 5567 + 5572 5567 5571 + 5562 5567 5572 + 5544 5568 5545 + 5550 5568 5544 + 5568 5550 5573 + 5573 5574 5568 + 5568 5574 5569 + 5570 5569 5574 + 5574 5575 5570 + 5575 5576 5570 + 5576 5571 5570 + 5571 5576 5572 + 5573 5550 5549 + 5549 5577 5573 + 5577 5578 5573 + 5574 5573 5578 + 5578 5575 5574 + 5575 5578 5579 + 5576 5575 5579 + 5576 5579 5580 + 5580 5572 5576 + 5581 5577 5549 + 5577 5581 5579 + 5579 5578 5577 + 5549 5582 5581 + 5581 5582 5583 + 5583 5584 5581 + 5581 5584 5580 + 5580 5579 5581 + 5582 5549 5585 + 5585 5586 5582 + 5583 5582 5586 + 5586 5587 5583 + 5587 5588 5583 + 5589 5583 5588 + 5583 5589 5584 + 5548 5585 5549 + 5590 5585 5548 + 5586 5585 5590 + 5590 5591 5586 + 5586 5591 5592 + 5592 5587 5586 + 5593 5587 5592 + 5587 5593 5594 + 5594 5588 5587 + 5548 5547 5590 + 3895 5590 5547 + 5591 5590 3895 + 3895 5595 5591 + 5592 5591 5595 + 5595 5596 5592 + 5593 5592 5596 + 5596 5597 5593 + 5593 5597 5598 + 5598 5594 5593 + 5599 3895 5547 + 5508 5507 5506 + 5506 5600 5508 + 5508 5600 5601 + 5601 5509 5508 + 5602 5509 5601 + 5504 5509 5602 + 5600 5506 5603 + 5603 5604 5600 + 5600 5604 5605 + 5605 5601 5600 + 5601 5605 5606 + 5606 5607 5601 + 5601 5607 5602 + 5603 5506 5512 + 5512 5608 5603 + 5603 5608 5609 + 5609 5610 5603 + 5604 5603 5610 + 5610 5611 5604 + 5605 5604 5611 + 5611 5612 5605 + 5606 5605 5612 + 5516 5608 5512 + 5608 5516 5613 + 5613 5609 5608 + 5609 5613 5614 + 5614 5615 5609 + 5609 5615 5616 + 5616 5610 5609 + 5611 5610 5616 + 5613 5516 5521 + 5521 5617 5613 + 5614 5613 5617 + 5617 5618 5614 + 5619 5614 5618 + 5615 5614 5619 + 5619 5620 5615 + 5616 5615 5620 + 5621 5617 5521 + 5617 5621 5622 + 5622 5618 5617 + 5618 5622 5623 + 5623 5624 5618 + 5618 5624 5619 + 5625 5619 5624 + 5620 5619 5625 + 5521 5520 5621 + 5621 5520 5626 + 5626 5627 5621 + 5622 5621 5627 + 5627 5628 5622 + 5623 5622 5628 + 5628 5629 5623 + 5630 5623 5629 + 5624 5623 5630 + 5525 5626 5520 + 5631 5626 5525 + 5626 5631 5632 + 5632 5627 5626 + 5627 5632 5633 + 5633 5628 5627 + 5628 5633 5634 + 5634 5629 5628 + 5525 5635 5631 + 5631 5635 5636 + 5636 5637 5631 + 5632 5631 5637 + 5637 5638 5632 + 5633 5632 5638 + 5638 5639 5633 + 5634 5633 5639 + 5635 5525 5640 + 5640 5641 5635 + 5636 5635 5641 + 5642 5636 5641 + 5643 5636 5642 + 5636 5643 5644 + 5644 5637 5636 + 5640 5525 5524 + 5524 5537 5640 + 5645 5640 5537 + 5641 5640 5645 + 5645 5646 5641 + 5641 5646 5647 + 5647 5648 5641 + 5641 5648 5642 + 5537 5558 5645 + 5649 5645 5558 + 5646 5645 5649 + 5649 5650 5646 + 5647 5646 5650 + 5650 5589 5647 + 5588 5647 5589 + 5647 5588 5594 + 5594 5648 5647 + 5558 5562 5649 + 5572 5649 5562 + 5650 5649 5572 + 5572 5580 5650 + 5650 5580 5584 + 5584 5589 5650 + 5648 5594 5598 + 5598 5642 5648 + 5651 5642 5598 + 5642 5651 5643 + 5643 5651 5652 + 5652 5653 5643 + 5644 5643 5653 + 5653 5654 5644 + 5655 5644 5654 + 5637 5644 5655 + 5598 5656 5651 + 5651 5656 5657 + 5657 5652 5651 + 5652 5657 5658 + 5652 5658 5659 + 5659 5653 5652 + 5654 5653 5659 + 5656 5598 5597 + 5597 5660 5656 + 5656 5660 5661 + 5661 5657 5656 + 5658 5657 5661 + 5661 5662 5658 + 5659 5658 5662 + 5663 5659 5662 + 5654 5659 5663 + 5663 5664 5654 + 5654 5664 5655 + 5660 5597 5596 + 5596 5665 5660 + 5660 5665 5666 + 5666 5661 5660 + 5661 5666 5667 + 5667 5662 5661 + 5665 5596 5595 + 5595 5668 5665 + 5665 5668 5669 + 5669 5666 5665 + 5667 5666 5669 + 5669 5670 5667 + 5671 5667 5670 + 5662 5667 5671 + 5668 5595 3895 + 3895 3893 5668 + 5668 3893 3900 + 3900 5669 5668 + 5669 3900 3899 + 3899 5670 5669 + 5670 3899 3904 + 3904 3903 5670 + 5670 3903 5671 + 3908 5671 3903 + 5672 5671 3908 + 5671 5672 5662 + 5662 5672 5673 + 5673 5663 5662 + 5674 5663 5673 + 5663 5674 5675 + 5675 5664 5663 + 5664 5675 5676 + 5676 5655 5664 + 3908 5677 5672 + 5672 5677 5678 + 5678 5673 5672 + 5679 5673 5678 + 5673 5679 5674 + 5680 5674 5679 + 5675 5674 5680 + 5677 3908 3907 + 3907 3913 5677 + 5677 3913 5681 + 5681 5678 5677 + 5682 5678 5681 + 5678 5682 5679 + 5679 5682 5683 + 5683 5684 5679 + 5679 5684 5685 + 5685 5680 5679 + 5686 5681 3913 + 5687 5681 5686 + 5681 5687 5682 + 5683 5682 5687 + 5688 5683 5687 + 5689 5683 5688 + 5684 5683 5689 + 3913 3912 5686 + 5686 3912 5690 + 5690 5691 5686 + 5691 5692 5686 + 5693 5686 5692 + 5686 5693 5687 + 3911 5690 3912 + 5690 3911 5694 + 5694 5695 5690 + 5690 5695 5696 + 5696 5691 5690 + 5697 5691 5696 + 5691 5697 5698 + 5698 5692 5691 + 5694 3911 3910 + 3910 5699 5694 + 3909 5699 3910 + 5699 3909 5700 + 5700 5701 5699 + 5655 5638 5637 + 5638 5655 5676 + 5676 5639 5638 + 5639 5676 5702 + 5702 5703 5639 + 5639 5703 5634 + 5704 5634 5703 + 5629 5634 5704 + 5702 5676 5675 + 5675 5705 5702 + 5706 5702 5705 + 5703 5702 5706 + 5706 5707 5703 + 5703 5707 5704 + 5708 5704 5707 + 5709 5704 5708 + 5704 5709 5629 + 5629 5709 5630 + 5680 5705 5675 + 5705 5680 5710 + 5705 5710 5706 + 5706 5710 5711 + 5711 5712 5706 + 5707 5706 5712 + 5712 5713 5707 + 5707 5713 5708 + 5710 5680 5685 + 5685 5711 5710 + 5711 5685 5714 + 5711 5714 5715 + 5715 5712 5711 + 5713 5712 5715 + 5715 5716 5713 + 5713 5716 5717 + 5717 5708 5713 + 5718 5708 5717 + 5708 5718 5709 + 5714 5685 5719 + 5719 5720 5714 + 5714 5720 5721 + 5721 5722 5714 + 5722 5715 5714 + 5716 5715 5722 + 5684 5719 5685 + 5723 5719 5684 + 5720 5719 5723 + 5720 5723 5724 + 5724 5721 5720 + 5725 5721 5724 + 5721 5725 5726 + 5726 5722 5721 + 5727 5722 5726 + 5722 5727 5716 + 5684 5689 5723 + 5723 5689 5728 + 5728 5724 5723 + 5729 5724 5728 + 5724 5729 5725 + 5725 5729 5730 + 5730 5731 5725 + 5725 5731 5732 + 5732 5726 5725 + 5688 5728 5689 + 5733 5728 5688 + 5728 5733 5729 + 5729 5733 5734 + 5734 5735 5729 + 5735 5730 5729 + 5736 5730 5735 + 5736 5731 5730 + 5731 5736 5737 + 5737 5732 5731 + 5688 5738 5733 + 5733 5738 5739 + 5739 5734 5733 + 5740 5734 5739 + 5734 5740 5741 + 5741 5735 5734 + 5738 5688 5742 + 5742 5743 5738 + 5738 5743 5744 + 5739 5738 5744 + 5745 5739 5744 + 5746 5739 5745 + 5739 5746 5740 + 5687 5742 5688 + 5747 5742 5687 + 5742 5747 5748 + 5748 5743 5742 + 5743 5748 5749 + 5749 5744 5743 + 5687 5693 5747 + 5750 5747 5693 + 5748 5747 5750 + 5750 5751 5748 + 5749 5748 5751 + 5751 5752 5749 + 5753 5749 5752 + 5753 5744 5749 + 5693 5754 5750 + 5755 5750 5754 + 5750 5755 5756 + 5756 5751 5750 + 5751 5756 5757 + 5757 5752 5751 + 5692 5754 5693 + 5758 5754 5692 + 5754 5758 5755 + 5755 5758 5759 + 5759 5760 5755 + 5756 5755 5760 + 5760 5761 5756 + 5757 5756 5761 + 5692 5698 5758 + 5758 5698 5762 + 5762 5763 5758 + 5758 5763 5759 + 5764 5759 5763 + 5765 5759 5764 + 5759 5765 5766 + 5766 5760 5759 + 5767 5762 5698 + 5768 5762 5767 + 5768 5763 5762 + 5763 5768 5764 + 5764 5768 5769 + 5770 5764 5769 + 5765 5764 5770 + 5698 5697 5767 + 5697 5771 5767 + 5772 5767 5771 + 5769 5767 5772 + 5767 5769 5768 + 5773 5771 5697 + 5774 5771 5773 + 5771 5774 5772 + 5772 5774 5775 + 5775 5776 5772 + 5776 5777 5772 + 5769 5772 5777 + 5777 5778 5769 + 5697 5779 5773 + 5780 5773 5779 + 5774 5773 5780 + 5780 5775 5774 + 5775 5780 5781 + 5696 5779 5697 + 5779 5696 5782 + 5782 5783 5779 + 5779 5783 5780 + 5781 5780 5783 + 5783 5784 5781 + 5785 5781 5784 + 5786 5781 5785 + 5782 5696 5695 + 5695 5787 5782 + 5788 5782 5787 + 5783 5782 5788 + 5788 5784 5783 + 5784 5788 5789 + 5789 5790 5784 + 5784 5790 5785 + 5791 5787 5695 + 5787 5791 5792 + 5792 5793 5787 + 5787 5793 5788 + 5789 5788 5793 + 5793 5794 5789 + 5795 5789 5794 + 5790 5789 5795 + 5695 5694 5791 + 5701 5791 5694 + 5792 5791 5701 + 5701 5796 5792 + 5796 5797 5792 + 5797 5798 5792 + 5793 5792 5798 + 5798 5794 5793 + 5694 5799 5701 + 5796 5701 5800 + 5437 5436 5448 + 5448 5801 5437 + 5437 5801 5802 + 5802 5803 5437 + 5432 5437 5803 + 5803 5433 5432 + 5801 5448 5453 + 5801 5453 5804 + 5804 5805 5801 + 5801 5805 5802 + 5806 5802 5805 + 5807 5802 5806 + 5802 5807 5808 + 5808 5803 5802 + 5433 5803 5808 + 5433 5808 4166 + 5804 5453 5452 + 5452 5809 5804 + 5809 5810 5804 + 5810 5811 5804 + 5811 5812 5804 + 5812 5813 5804 + 5814 5804 5813 + 5814 5805 5804 + 5457 5809 5452 + 5457 5815 5809 + 5809 5815 5816 + 5816 5810 5809 + 5816 5817 5810 + 5810 5817 5818 + 5818 5811 5810 + 5815 5457 5819 + 5819 5820 5815 + 5815 5820 5821 + 5821 5816 5815 + 5817 5816 5821 + 5821 5822 5817 + 5817 5822 5823 + 5823 5818 5817 + 5456 5819 5457 + 5824 5819 5456 + 5820 5819 5824 + 5824 5825 5820 + 5820 5825 5826 + 5826 5827 5820 + 5820 5827 5821 + 5456 5828 5824 + 5828 5829 5824 + 5825 5824 5829 + 5829 5830 5825 + 5826 5825 5830 + 5461 5828 5456 + 5828 5461 5831 + 5831 5829 5828 + 5829 5831 5832 + 5832 5830 5829 + 5830 5832 5833 + 5833 5834 5830 + 5830 5834 5826 + 5835 5831 5461 + 5832 5831 5835 + 5835 5836 5832 + 5833 5832 5836 + 5474 5835 5461 + 5837 5835 5474 + 5835 5837 5836 + 5836 5837 5838 + 5838 5839 5836 + 5836 5839 5833 + 5474 5840 5837 + 5838 5837 5840 + 5840 5841 5838 + 5841 5842 5838 + 5843 5838 5842 + 5839 5838 5843 + 5840 5474 5473 + 5840 5473 5844 + 5844 5841 5840 + 5841 5844 5845 + 5841 5845 5846 + 5846 5842 5841 + 5842 5846 5847 + 5842 5847 5843 + 5844 5473 5472 + 5472 5848 5844 + 5845 5844 5848 + 5848 5492 5845 + 5845 5492 5497 + 5846 5845 5497 + 5497 5849 5846 + 5847 5846 5849 + 5478 5848 5472 + 5848 5478 5477 + 5477 5492 5848 + 5504 5849 5497 + 5602 5849 5504 + 5849 5602 5847 + 5847 5602 5607 + 5843 5847 5607 + 5607 5850 5843 + 5839 5843 5850 + 5850 5851 5839 + 5839 5851 5833 + 5852 5850 5607 + 5850 5852 5853 + 5853 5851 5850 + 5851 5853 5854 + 5854 5855 5851 + 5851 5855 5833 + 5607 5606 5852 + 5856 5852 5606 + 5853 5852 5856 + 5856 5857 5853 + 5853 5857 5858 + 5854 5853 5858 + 5859 5856 5606 + 5860 5856 5859 + 5857 5856 5860 + 5857 5860 5861 + 5861 5862 5857 + 5857 5862 5858 + 5863 5859 5606 + 5864 5859 5863 + 5865 5859 5864 + 5859 5865 5860 + 5860 5865 5866 + 5861 5860 5866 + 5606 5867 5863 + 5868 5863 5867 + 5869 5863 5868 + 5863 5869 5864 + 5870 5864 5869 + 5865 5864 5870 + 5870 5866 5865 + 5612 5867 5606 + 5871 5867 5612 + 5867 5871 5868 + 5872 5868 5871 + 5873 5868 5872 + 5868 5873 5869 + 5869 5873 5874 + 5874 5875 5869 + 5869 5875 5870 + 5612 5876 5871 + 5871 5876 5877 + 5877 5878 5871 + 5871 5878 5872 + 5879 5872 5878 + 5880 5872 5879 + 5872 5880 5873 + 5874 5873 5880 + 5876 5612 5611 + 5611 5881 5876 + 5876 5881 5882 + 5882 5877 5876 + 5883 5877 5882 + 5877 5883 5884 + 5884 5878 5877 + 5878 5884 5879 + 5616 5881 5611 + 5881 5616 5885 + 5885 5882 5881 + 5882 5885 5886 + 5886 5887 5882 + 5882 5887 5883 + 5620 5885 5616 + 5886 5885 5620 + 5620 5888 5886 + 5889 5886 5888 + 5887 5886 5889 + 5889 5890 5887 + 5883 5887 5890 + 5890 5891 5883 + 5891 5892 5883 + 5884 5883 5892 + 5625 5888 5620 + 5888 5625 5893 + 5893 5894 5888 + 5888 5894 5889 + 5895 5889 5894 + 5889 5895 5896 + 5896 5890 5889 + 5890 5896 5897 + 5897 5891 5890 + 5893 5625 5898 + 5898 5899 5893 + 5900 5893 5899 + 5894 5893 5900 + 5900 5901 5894 + 5894 5901 5895 + 5624 5898 5625 + 5630 5898 5624 + 5898 5630 5902 + 5902 5899 5898 + 5899 5902 5903 + 5903 5904 5899 + 5899 5904 5900 + 5900 5904 5905 + 5906 5900 5905 + 5901 5900 5906 + 5902 5630 5709 + 5709 5718 5902 + 5903 5902 5718 + 5718 5907 5903 + 5908 5903 5907 + 5904 5903 5908 + 5908 5909 5904 + 5904 5909 5905 + 5717 5907 5718 + 5907 5717 5910 + 5910 5911 5907 + 5907 5911 5908 + 5912 5908 5911 + 5909 5908 5912 + 5912 5913 5909 + 5909 5913 5914 + 5914 5905 5909 + 5910 5717 5716 + 5716 5727 5910 + 5915 5910 5727 + 5911 5910 5915 + 5915 5916 5911 + 5911 5916 5912 + 5917 5912 5916 + 5913 5912 5917 + 5917 5918 5913 + 5914 5913 5918 + 5727 5919 5915 + 5920 5915 5919 + 5916 5915 5920 + 5920 5921 5916 + 5916 5921 5917 + 5922 5917 5921 + 5918 5917 5922 + 5726 5919 5727 + 5919 5726 5732 + 5732 5923 5919 + 5919 5923 5920 + 5924 5920 5923 + 5921 5920 5924 + 5924 5925 5921 + 5921 5925 5922 + 5926 5922 5925 + 5927 5922 5926 + 5922 5927 5918 + 5923 5732 5737 + 5737 5928 5923 + 5923 5928 5924 + 5929 5924 5928 + 5925 5924 5929 + 5929 5930 5925 + 5925 5930 5926 + 5931 5926 5930 + 5932 5926 5931 + 5926 5932 5927 + 5928 5737 5933 + 5933 5934 5928 + 5928 5934 5929 + 5935 5929 5934 + 5930 5929 5935 + 5935 5936 5930 + 5930 5936 5931 + 5933 5737 5736 + 5736 5937 5933 + 5938 5933 5937 + 5937 5939 5938 + 5940 5938 5939 + 5941 5938 5940 + 5938 5941 5934 + 5934 5941 5935 + 5735 5937 5736 + 5939 5937 5735 + 5735 5741 5939 + 5939 5741 5942 + 5942 5943 5939 + 5939 5943 5940 + 5944 5940 5943 + 5945 5940 5944 + 5940 5945 5941 + 5941 5945 5946 + 5946 5935 5941 + 5936 5935 5946 + 5947 5942 5741 + 5948 5942 5947 + 5942 5948 5949 + 5949 5943 5942 + 5943 5949 5944 + 5950 5944 5949 + 5951 5944 5950 + 5944 5951 5945 + 5741 5740 5947 + 5952 5947 5740 + 5953 5947 5952 + 5947 5953 5948 + 5948 5953 5954 + 5954 5955 5948 + 5955 5956 5948 + 5949 5948 5956 + 5740 5746 5952 + 5957 5952 5746 + 5958 5952 5957 + 5952 5958 5953 + 5953 5958 5959 + 5959 5954 5953 + 5960 5954 5959 + 5954 5960 5961 + 5961 5955 5954 + 5746 5962 5957 + 5963 5957 5962 + 5957 5963 5964 + 5964 5965 5957 + 5957 5965 5958 + 5958 5965 5966 + 5966 5959 5958 + 5745 5962 5746 + 5967 5962 5745 + 5962 5967 5963 + 5963 5967 5968 + 5968 5969 5963 + 5964 5963 5969 + 5969 5970 5964 + 5971 5964 5970 + 5965 5964 5971 + 5971 5966 5965 + 5745 5972 5967 + 5967 5972 5973 + 5973 5968 5967 + 5974 5968 5973 + 5968 5974 5975 + 5975 5969 5968 + 5969 5975 5976 + 5976 5970 5969 + 5972 5745 5977 + 5977 5978 5972 + 5972 5978 5979 + 5979 5973 5972 + 5980 5973 5979 + 5973 5980 5974 + 5744 5977 5745 + 5981 5977 5744 + 5978 5977 5981 + 5978 5981 5982 + 5982 5979 5978 + 5983 5979 5982 + 5979 5983 5980 + 5980 5983 5984 + 5984 5985 5980 + 5974 5980 5985 + 5744 5753 5981 + 5982 5981 5753 + 5753 5986 5982 + 5987 5982 5986 + 5982 5987 5983 + 5983 5987 5988 + 5988 5984 5983 + 5989 5984 5988 + 5984 5989 5990 + 5990 5985 5984 + 5752 5986 5753 + 5991 5986 5752 + 5986 5991 5987 + 5987 5991 5992 + 5992 5988 5987 + 5993 5988 5992 + 5988 5993 5989 + 5989 5993 5994 + 5994 5995 5989 + 5990 5989 5995 + 5752 5757 5991 + 5991 5757 5996 + 5996 5992 5991 + 5997 5992 5996 + 5992 5997 5993 + 5993 5997 5998 + 5998 5994 5993 + 5999 5994 5998 + 5994 5999 6000 + 6000 5995 5994 + 5761 5996 5757 + 6001 5996 5761 + 5996 6001 5997 + 5997 6001 6002 + 6002 5998 5997 + 6003 5998 6002 + 5998 6003 5999 + 5999 6003 6004 + 6004 6005 5999 + 6000 5999 6005 + 5761 6006 6001 + 6001 6006 6007 + 6007 6002 6001 + 6008 6002 6007 + 6002 6008 6003 + 6003 6008 6009 + 6009 6004 6003 + 6006 5761 5760 + 5760 5766 6006 + 6006 5766 6010 + 6010 6007 6006 + 6011 6007 6010 + 6007 6011 6008 + 6008 6011 6012 + 6012 6009 6008 + 6013 6009 6012 + 6009 6013 6014 + 6014 6004 6009 + 6015 6010 5766 + 6016 6010 6015 + 6010 6016 6011 + 6011 6016 6017 + 6017 6012 6011 + 6018 6012 6017 + 6012 6018 6013 + 5766 5765 6015 + 5765 6019 6015 + 6020 6015 6019 + 6021 6015 6020 + 6015 6021 6016 + 6017 6016 6021 + 6021 6022 6017 + 6023 6017 6022 + 6017 6023 6018 + 5770 6019 5765 + 6024 6019 5770 + 6019 6024 6020 + 6020 6024 6025 + 6025 6026 6020 + 6026 6027 6020 + 6021 6020 6027 + 6027 6022 6021 + 6028 6022 6027 + 6022 6028 6023 + 6024 5770 6029 + 6029 6025 6024 + 6025 6029 6030 + 6025 6030 6031 + 6031 6026 6025 + 6032 6026 6031 + 6026 6032 6033 + 6033 6027 6026 + 6027 6033 6028 + 6029 5770 5769 + 5769 6034 6029 + 6030 6029 5778 + 5778 6035 6030 + 6030 6035 6036 + 6036 6037 6030 + 6037 6031 6030 + 6038 6031 6037 + 6031 6038 6032 + 6035 5778 5777 + 6035 5777 5776 + 5776 6036 6035 + 6036 5776 6039 + 6039 6040 6036 + 6036 6040 6041 + 6041 6037 6036 + 6042 6037 6041 + 6037 6042 6038 + 6039 5776 5775 + 5775 5786 6039 + 6043 6039 5786 + 6040 6039 6043 + 6043 6044 6040 + 6040 6044 6045 + 6045 6041 6040 + 6046 6041 6045 + 6041 6046 6042 + 6047 5786 5775 + 5805 5814 5806 + 5806 5814 6048 + 6048 6049 5806 + 5807 5806 6049 + 6049 4167 5807 + 5807 4167 4166 + 4166 5808 5807 + 5813 6048 5814 + 6050 6048 5813 + 6048 6050 6051 + 6051 6049 6048 + 6049 6051 4168 + 4168 4167 6049 + 6050 5813 5812 + 5812 6052 6050 + 6051 6050 6052 + 6052 6053 6051 + 6053 6054 6051 + 6054 6055 6051 + 4168 6051 6055 + 6055 6056 4168 + 4168 6056 4162 + 6057 6052 5812 + 6052 6057 6058 + 6058 6053 6052 + 6059 6053 6058 + 6053 6059 6060 + 6060 6054 6053 + 6057 5812 5811 + 5811 6061 6057 + 6057 6061 6062 + 6062 6058 6057 + 6063 6058 6062 + 6058 6063 6059 + 6059 6063 6064 + 6064 6065 6059 + 6060 6059 6065 + 5818 6061 5811 + 6061 5818 5823 + 5823 6066 6061 + 6061 6066 6062 + 6067 6062 6066 + 6062 6067 6068 + 6068 6069 6062 + 6062 6069 6063 + 6063 6069 6070 + 6070 6064 6063 + 6071 6066 5823 + 6066 6071 6067 + 6072 6067 6071 + 6068 6067 6072 + 6072 6073 6068 + 6068 6073 6074 + 6074 6075 6068 + 6069 6068 6075 + 6075 6070 6069 + 5823 6076 6071 + 6071 6076 6077 + 6077 6078 6071 + 6071 6078 6072 + 6079 6072 6078 + 6072 6079 6080 + 6080 6073 6072 + 6076 5823 5822 + 5822 6081 6076 + 6077 6076 6081 + 6081 6082 6077 + 6083 6077 6082 + 6077 6083 6084 + 6084 6078 6077 + 6078 6084 6079 + 6085 6079 6084 + 6080 6079 6085 + 6081 5822 5821 + 5821 6086 6081 + 6081 6086 6087 + 6087 6082 6081 + 6088 6082 6087 + 6082 6088 6083 + 6089 6083 6088 + 6084 6083 6089 + 6089 6090 6084 + 6084 6090 6085 + 6086 5821 5827 + 5827 6091 6086 + 6087 6086 6091 + 6091 6092 6087 + 6093 6087 6092 + 6087 6093 6088 + 6088 6093 6094 + 6094 6095 6088 + 6088 6095 6089 + 6091 5827 5826 + 5826 6096 6091 + 6091 6096 6097 + 6097 6092 6091 + 6098 6092 6097 + 6092 6098 6093 + 6094 6093 6098 + 6096 5826 5834 + 5834 6099 6096 + 6097 6096 6099 + 6099 6100 6097 + 6101 6097 6100 + 6097 6101 6098 + 6098 6101 6102 + 6102 6103 6098 + 6098 6103 6094 + 6099 5834 5833 + 5833 6104 6099 + 6099 6104 6105 + 6105 6100 6099 + 6106 6100 6105 + 6100 6106 6101 + 6102 6101 6106 + 6104 5833 5855 + 5855 6107 6104 + 6105 6104 6107 + 6107 6108 6105 + 6109 6105 6108 + 6105 6109 6106 + 6106 6109 6110 + 6110 6111 6106 + 6106 6111 6102 + 6107 5855 5854 + 5854 6112 6107 + 6107 6112 6113 + 6113 6108 6107 + 6114 6108 6113 + 6108 6114 6109 + 6110 6109 6114 + 6112 5854 6115 + 6115 6116 6112 + 6113 6112 6116 + 6116 6117 6113 + 6118 6113 6117 + 6113 6118 6114 + 5858 6115 5854 + 6119 6115 5858 + 6116 6115 6119 + 6119 6120 6116 + 6116 6120 6121 + 6121 6117 6116 + 6122 6117 6121 + 6117 6122 6118 + 6123 6118 6122 + 6114 6118 6123 + 5858 6124 6119 + 6125 6119 6124 + 6120 6119 6125 + 6125 6126 6120 + 6121 6120 6126 + 6126 6127 6121 + 6128 6121 6127 + 6121 6128 6122 + 6124 5858 6129 + 6124 6129 6130 + 6130 6131 6124 + 6124 6131 6125 + 6132 6125 6131 + 6126 6125 6132 + 6129 5858 5862 + 5862 6133 6129 + 6129 6133 6134 + 6134 6135 6129 + 6135 6136 6129 + 6136 6137 6129 + 6137 6138 6129 + 6138 6130 6129 + 6133 5862 5861 + 6133 5861 6139 + 6139 6134 6133 + 6134 6139 6140 + 6134 6140 6141 + 6141 6135 6134 + 6135 6141 6142 + 6135 6142 6143 + 6143 6136 6135 + 5866 6139 5861 + 6140 6139 5866 + 5866 6144 6140 + 6141 6140 6144 + 6144 6145 6141 + 6142 6141 6145 + 6145 6146 6142 + 6142 6146 6147 + 6147 6143 6142 + 6148 6143 6147 + 6136 6143 6148 + 6144 5866 5870 + 6144 5870 6149 + 6149 6145 6144 + 6145 6149 6146 + 6146 6149 6150 + 6150 6151 6146 + 6146 6151 6147 + 6152 6147 6151 + 6153 6147 6152 + 6147 6153 6148 + 6150 6149 5870 + 5875 6150 5870 + 6154 6150 5875 + 6151 6150 6154 + 6154 6155 6151 + 6151 6155 6152 + 6152 6155 6156 + 6156 6157 6152 + 6158 6152 6157 + 6152 6158 6153 + 5875 6159 6154 + 6154 6159 6160 + 6160 6161 6154 + 6155 6154 6161 + 6161 6156 6155 + 6162 6156 6161 + 6156 6162 6163 + 6163 6157 6156 + 6164 6159 5875 + 6159 6164 6165 + 6165 6160 6159 + 6166 6160 6165 + 6160 6166 6167 + 6167 6161 6160 + 6161 6167 6162 + 5875 5874 6164 + 6164 5874 6168 + 6168 6169 6164 + 6164 6169 6170 + 6170 6165 6164 + 6171 6165 6170 + 6165 6171 6166 + 5880 6168 5874 + 6172 6168 5880 + 6168 6172 6173 + 6173 6169 6168 + 6169 6173 6174 + 6174 6170 6169 + 6175 6170 6174 + 6170 6175 6171 + 5880 6176 6172 + 6172 6176 6177 + 6177 6178 6172 + 6173 6172 6178 + 6178 6179 6173 + 6173 6179 6180 + 6180 6174 6173 + 5879 6176 5880 + 6176 5879 6181 + 6181 6177 6176 + 6182 6177 6181 + 6177 6182 6183 + 6183 6178 6177 + 6178 6183 6184 + 6184 6179 6178 + 6179 6184 6185 + 6185 6180 6179 + 6181 5879 5884 + 5884 6186 6181 + 6187 6181 6186 + 6181 6187 6182 + 6182 6187 6188 + 6188 6189 6182 + 6183 6182 6189 + 6189 6190 6183 + 6184 6183 6190 + 5892 6186 5884 + 6191 6186 5892 + 6186 6191 6187 + 6188 6187 6191 + 6191 6192 6188 + 6193 6188 6192 + 6188 6193 6194 + 6194 6189 6188 + 6189 6194 6195 + 6195 6190 6189 + 6191 5892 5891 + 5891 6192 6191 + 6196 6192 5891 + 6192 6196 6193 + 6197 6193 6196 + 6194 6193 6197 + 6197 6198 6194 + 6195 6194 6198 + 6198 6199 6195 + 6200 6195 6199 + 6195 6200 6190 + 6190 6200 6184 + 5891 5897 6196 + 6196 5897 6201 + 6201 6202 6196 + 6196 6202 6197 + 6203 6197 6202 + 6198 6197 6203 + 6203 6204 6198 + 6198 6204 6205 + 6205 6199 6198 + 6206 6201 5897 + 6207 6201 6206 + 6207 6202 6201 + 6202 6207 6203 + 6208 6203 6207 + 6204 6203 6208 + 6208 6209 6204 + 6205 6204 6209 + 6210 6206 5897 + 6211 6206 6210 + 6206 6211 6212 + 6212 6213 6206 + 6206 6213 6207 + 6207 6213 6208 + 6214 6208 6213 + 6208 6214 6209 + 5897 5896 6210 + 6215 6210 5896 + 6210 6215 6216 + 6216 6217 6210 + 6210 6217 6211 + 6211 6217 6218 + 6218 6219 6211 + 6212 6211 6219 + 5896 5895 6215 + 6220 6215 5895 + 6216 6215 6220 + 6220 6221 6216 + 6216 6221 6222 + 6222 6223 6216 + 6217 6216 6223 + 6223 6218 6217 + 5895 5901 6220 + 5906 6220 5901 + 5906 6221 6220 + 6221 5906 6224 + 6224 6222 6221 + 6222 6224 6225 + 6222 6225 6226 + 6226 6223 6222 + 6218 6223 6226 + 6226 6227 6218 + 6218 6227 6228 + 6228 6219 6218 + 5905 6224 5906 + 6225 6224 5905 + 5905 6229 6225 + 6226 6225 6229 + 6230 6226 6229 + 6227 6226 6230 + 6230 6231 6227 + 6228 6227 6231 + 6229 5905 5914 + 5914 6232 6229 + 6229 6232 6233 + 6233 6234 6229 + 6229 6234 6230 + 6235 6230 6234 + 6235 6231 6230 + 6232 5914 5918 + 5918 5927 6232 + 6232 5927 5932 + 5932 6233 6232 + 6236 6233 5932 + 6234 6233 6236 + 6236 6237 6234 + 6234 6237 6235 + 6235 6237 6238 + 6238 6239 6235 + 6231 6235 6239 + 6239 6240 6231 + 6231 6240 6228 + 5932 6241 6236 + 6242 6236 6241 + 6237 6236 6242 + 6242 6238 6237 + 6238 6242 6243 + 6243 6244 6238 + 6238 6244 6245 + 6245 6239 6238 + 6240 6239 6245 + 5931 6241 5932 + 6241 5931 6246 + 6246 6247 6241 + 6241 6247 6242 + 6243 6242 6247 + 6247 6248 6243 + 6249 6243 6248 + 6244 6243 6249 + 6249 6250 6244 + 6245 6244 6250 + 6246 5931 5936 + 5936 6251 6246 + 6252 6246 6251 + 6247 6246 6252 + 6252 6248 6247 + 6248 6252 6253 + 6253 6254 6248 + 6248 6254 6249 + 6255 6249 6254 + 6250 6249 6255 + 5946 6251 5936 + 6251 5946 6256 + 6256 6257 6251 + 6251 6257 6252 + 6253 6252 6257 + 6257 6258 6253 + 6259 6253 6258 + 6254 6253 6259 + 6259 6260 6254 + 6254 6260 6255 + 6256 5946 5945 + 5945 5951 6256 + 6261 6256 5951 + 6257 6256 6261 + 6261 6258 6257 + 6258 6261 6262 + 6262 6263 6258 + 6258 6263 6259 + 6264 6259 6263 + 6260 6259 6264 + 5951 6265 6261 + 6262 6261 6265 + 6265 6266 6262 + 6267 6262 6266 + 6263 6262 6267 + 6267 6268 6263 + 6263 6268 6264 + 5950 6265 5951 + 6265 5950 6269 + 6269 6266 6265 + 6266 6269 6270 + 6270 6271 6266 + 6266 6271 6267 + 6272 6267 6271 + 6268 6267 6272 + 6269 5950 6273 + 6273 6274 6269 + 6270 6269 6274 + 6274 6275 6270 + 6276 6270 6275 + 6271 6270 6276 + 6276 6277 6271 + 6271 6277 6272 + 5949 6273 5950 + 5956 6273 5949 + 6274 6273 5956 + 6274 5956 5955 + 5955 6275 6274 + 6278 6275 5955 + 6275 6278 6276 + 6276 6278 6279 + 6279 6280 6276 + 6277 6276 6280 + 6280 6281 6277 + 6277 6281 6282 + 6282 6272 6277 + 5955 5961 6278 + 6278 5961 6283 + 6283 6279 6278 + 6284 6279 6283 + 6279 6284 6285 + 6285 6280 6279 + 6281 6280 6285 + 6285 6286 6281 + 6281 6286 6287 + 6287 6282 6281 + 6283 5961 5960 + 5960 6288 6283 + 6289 6283 6288 + 6283 6289 6284 + 6284 6289 6290 + 6290 6291 6284 + 6284 6291 6292 + 6292 6285 6284 + 6286 6285 6292 + 6293 6288 5960 + 6294 6288 6293 + 6288 6294 6289 + 6289 6294 6295 + 6295 6296 6289 + 6296 6290 6289 + 5960 6297 6293 + 6293 6297 6298 + 6298 6299 6293 + 6300 6293 6299 + 6293 6300 6294 + 6294 6300 6301 + 6301 6295 6294 + 5959 6297 5960 + 6297 5959 5966 + 5966 6298 6297 + 6302 6298 5966 + 6298 6302 6303 + 6303 6299 6298 + 6299 6303 6304 + 6304 6305 6299 + 6299 6305 6300 + 6301 6300 6305 + 5966 5971 6302 + 6302 5971 6306 + 6306 6307 6302 + 6303 6302 6307 + 6307 6308 6303 + 6304 6303 6308 + 6308 6309 6304 + 6310 6304 6309 + 6305 6304 6310 + 5970 6306 5971 + 6311 6306 5970 + 6306 6311 6312 + 6312 6307 6306 + 6307 6312 6313 + 6313 6308 6307 + 6308 6313 6314 + 6314 6309 6308 + 5970 5976 6311 + 6311 5976 6315 + 6315 6316 6311 + 6312 6311 6316 + 6316 6317 6312 + 6313 6312 6317 + 6317 6318 6313 + 6314 6313 6318 + 6319 6315 5976 + 6320 6315 6319 + 6315 6320 6321 + 6321 6316 6315 + 6316 6321 6322 + 6322 6317 6316 + 6317 6322 6323 + 6323 6318 6317 + 5976 5975 6319 + 6324 6319 5975 + 6325 6319 6324 + 6319 6325 6320 + 6320 6325 6326 + 6326 6327 6320 + 6321 6320 6327 + 6327 6328 6321 + 6322 6321 6328 + 5975 5974 6324 + 5985 6324 5974 + 6329 6324 5985 + 6324 6329 6325 + 6325 6329 6330 + 6330 6326 6325 + 6331 6326 6330 + 6326 6331 6332 + 6332 6327 6326 + 6327 6332 6333 + 6333 6328 6327 + 5985 5990 6329 + 6329 5990 6334 + 6334 6330 6329 + 6335 6330 6334 + 6330 6335 6331 + 6336 6331 6335 + 6332 6331 6336 + 6336 6337 6332 + 6333 6332 6337 + 5995 6334 5990 + 6338 6334 5995 + 6334 6338 6335 + 6335 6338 6339 + 6339 6340 6335 + 6335 6340 6336 + 6341 6336 6340 + 6341 6337 6336 + 5995 6000 6338 + 6338 6000 6342 + 6342 6339 6338 + 6343 6339 6342 + 6339 6343 6344 + 6344 6340 6339 + 6340 6344 6341 + 6345 6341 6344 + 6346 6341 6345 + 6341 6346 6337 + 6005 6342 6000 + 6347 6342 6005 + 6342 6347 6343 + 6343 6347 6348 + 6348 6349 6343 + 6344 6343 6349 + 6349 6350 6344 + 6344 6350 6345 + 6005 6351 6347 + 6347 6351 6352 + 6352 6348 6347 + 6353 6348 6352 + 6348 6353 6354 + 6354 6349 6348 + 6349 6354 6350 + 6351 6005 6004 + 6004 6014 6351 + 6351 6014 6355 + 6355 6352 6351 + 6356 6352 6355 + 6352 6356 6353 + 6353 6356 6357 + 6357 6358 6353 + 6354 6353 6358 + 6358 6359 6354 + 6350 6354 6359 + 6360 6355 6014 + 6361 6355 6360 + 6355 6361 6356 + 6356 6361 6362 + 6357 6356 6362 + 6014 6013 6360 + 6363 6360 6013 + 6364 6360 6363 + 6360 6364 6361 + 6361 6364 6365 + 6365 6366 6361 + 6361 6366 6362 + 6013 6018 6363 + 6367 6363 6018 + 6368 6363 6367 + 6363 6368 6364 + 6365 6364 6368 + 6369 6365 6368 + 6366 6365 6369 + 6369 6370 6366 + 6366 6370 6371 + 6371 6362 6366 + 6018 6023 6367 + 6372 6367 6023 + 6373 6367 6372 + 6367 6373 6368 + 6368 6373 6369 + 6374 6369 6373 + 6370 6369 6374 + 6374 6375 6370 + 6371 6370 6375 + 6023 6028 6372 + 6376 6372 6028 + 6377 6372 6376 + 6372 6377 6373 + 6373 6377 6374 + 6378 6374 6377 + 6377 6379 6378 + 6378 6379 6380 + 6381 6378 6380 + 6028 6033 6376 + 6382 6376 6033 + 6379 6376 6382 + 6376 6379 6377 + 6033 6032 6382 + 6383 6382 6032 + 6380 6382 6383 + 6382 6380 6379 + 6032 6038 6383 + 6384 6383 6038 + 6385 6383 6384 + 6383 6385 6380 + 6380 6385 6381 + 6381 6385 6386 + 6386 6387 6381 + 6375 6381 6387 + 6381 6375 6374 + 6038 6042 6384 + 6388 6384 6042 + 6386 6384 6388 + 6384 6386 6385 + 6042 6046 6388 + 6389 6388 6046 + 6390 6388 6389 + 6388 6390 6386 + 6386 6390 6391 + 6391 6387 6386 + 6387 6391 6392 + 6392 6393 6387 + 6387 6393 6375 + 6046 6394 6389 + 6395 6389 6394 + 6396 6389 6395 + 6389 6396 6390 + 6391 6390 6396 + 6392 6391 6396 + 6045 6394 6046 + 6394 6045 6397 + 6397 6398 6394 + 6394 6398 6395 + 6399 6395 6398 + 6400 6395 6399 + 6395 6400 6396 + 6396 6400 6392 + 6397 6045 6044 + 6044 6401 6397 + 6402 6397 6401 + 6398 6397 6402 + 6402 6403 6398 + 6398 6403 6399 + 6404 6399 6403 + 6405 6399 6404 + 6399 6405 6400 + 6392 6400 6405 + 6406 6401 6044 + 6401 6406 6407 + 6407 6408 6401 + 6401 6408 6402 + 6409 6402 6408 + 6403 6402 6409 + 6409 6410 6403 + 6403 6410 6404 + 6044 6043 6406 + 6406 6043 6411 + 6411 6412 6406 + 6407 6406 6412 + 6412 6413 6407 + 6414 6407 6413 + 6408 6407 6414 + 6414 6415 6408 + 6408 6415 6409 + 5786 6411 6043 + 5785 6411 5786 + 6411 5785 6416 + 6416 6412 6411 + 6412 6416 6417 + 6417 6413 6412 + 6413 6417 6418 + 6418 6419 6413 + 6413 6419 6414 + 6420 6414 6419 + 6415 6414 6420 + 6416 5785 5790 + 5790 6421 6416 + 6417 6416 6421 + 6421 6422 6417 + 6418 6417 6422 + 6422 6423 6418 + 6424 6418 6423 + 6419 6418 6424 + 6424 6425 6419 + 6419 6425 6420 + 5795 6421 5790 + 6421 5795 6426 + 6426 6422 6421 + 6422 6426 6427 + 6427 6423 6422 + 6423 6427 6428 + 6428 6429 6423 + 6423 6429 6424 + 6430 6424 6429 + 6425 6424 6430 + 6426 5795 6431 + 6431 6432 6426 + 6427 6426 6432 + 6432 6433 6427 + 6428 6427 6433 + 6433 6434 6428 + 6435 6428 6434 + 6429 6428 6435 + 5794 6431 5795 + 6436 6431 5794 + 6431 6436 6437 + 6437 6432 6431 + 6432 6437 6438 + 6438 6433 6432 + 6433 6438 6439 + 6439 6434 6433 + 5794 5798 6436 + 6436 5798 5797 + 5797 6440 6436 + 6437 6436 6440 + 6440 198 6437 + 6440 5797 6441 + 6440 6441 6442 + 6442 6443 6440 + 6441 5797 5796 + 5796 123 6441 + 5700 123 5796 + 123 5700 3848 + 3848 6444 123 + 6442 6441 6445 + 6438 6437 6446 + 6446 197 6438 + 6439 6438 197 + 197 3918 6439 + 6447 6439 3918 + 6434 6439 6447 + 6447 6448 6434 + 6434 6448 6435 + 3918 6449 6447 + 6450 6447 6449 + 6448 6447 6450 + 6450 6451 6448 + 6448 6451 6452 + 6452 6435 6448 + 6453 6435 6452 + 6435 6453 6429 + 3917 6449 3918 + 6449 3917 3928 + 3928 6454 6449 + 6449 6454 6450 + 6455 6450 6454 + 6451 6450 6455 + 6455 6456 6451 + 6451 6456 6457 + 6457 6452 6451 + 6458 6452 6457 + 6452 6458 6453 + 6454 3928 6459 + 6459 4104 6454 + 6454 4104 6455 + 4103 6455 4104 + 6456 6455 4103 + 4103 4102 6456 + 6456 4102 6460 + 6460 6457 6456 + 6458 6457 6460 + 6459 3928 3927 + 3927 6461 6459 + 6459 6461 6462 + 4105 6459 6462 + 4104 6459 4105 + 3926 6461 3927 + 6461 3926 3933 + 3933 6462 6461 + 3933 6463 6462 + 6462 6463 6464 + 6464 6465 6462 + 6462 6465 4105 + 4099 4105 6465 + 6465 4100 4099 + 6463 3933 6466 + 6466 6467 6463 + 6463 6467 6468 + 6468 6469 6463 + 6469 6464 6463 + 4100 6464 6469 + 4100 6465 6464 + 3932 6466 3933 + 3938 6466 3932 + 6466 3938 6470 + 6470 6467 6466 + 6467 6470 6471 + 6471 6468 6467 + 6468 6471 6472 + 6472 6473 6468 + 6468 6473 6474 + 6474 6469 6468 + 6470 3938 4140 + 4140 6475 6470 + 6471 6470 6475 + 6475 6476 6471 + 6472 6471 6476 + 6476 4397 6472 + 4401 6472 4397 + 6473 6472 4401 + 4401 4405 6473 + 6474 6473 4405 + 4144 6475 4140 + 6475 4144 6477 + 6477 6476 6475 + 6476 6477 4391 + 4391 4397 6476 + 6477 4144 4148 + 4148 4392 6477 + 4391 6477 4392 + 4153 4392 4148 + 4392 4153 4386 + 4386 4153 4387 + 4152 4387 4153 + 4158 4387 4152 + 4387 4158 4382 + 4382 4158 6478 + 6478 4378 4382 + 6479 4378 6478 + 4378 6479 4372 + 4372 6479 6480 + 6480 4373 4372 + 4157 6478 4158 + 6481 6478 4157 + 6478 6481 6479 + 6479 6481 6482 + 6482 6480 6479 + 6480 6482 6054 + 6054 6060 6480 + 6480 6060 4374 + 4374 4373 6480 + 4157 4163 6481 + 6481 4163 6483 + 6483 6482 6481 + 6054 6482 6483 + 6483 6055 6054 + 6483 6056 6055 + 6056 6483 4163 + 4163 4162 6056 + 6065 4374 6060 + 4368 4374 6065 + 6065 6484 4368 + 4368 6484 4369 + 6485 4369 6484 + 6486 4369 6485 + 4369 6486 4364 + 4360 4364 6486 + 6484 6065 6064 + 6064 6487 6484 + 6484 6487 6485 + 6488 6485 6487 + 6489 6485 6488 + 6485 6489 6486 + 6486 6489 6490 + 6490 6491 6486 + 6486 6491 4360 + 4353 4360 6491 + 6487 6064 6070 + 6070 6492 6487 + 6487 6492 6488 + 6493 6488 6492 + 6488 6493 6494 + 6494 6495 6488 + 6488 6495 6489 + 6489 6495 6496 + 6496 6490 6489 + 6497 6492 6070 + 6492 6497 6493 + 6498 6493 6497 + 6494 6493 6498 + 6498 6499 6494 + 6494 6499 6500 + 6500 6501 6494 + 6495 6494 6501 + 6501 6496 6495 + 6070 6075 6497 + 6497 6075 6074 + 6074 6502 6497 + 6497 6502 6498 + 6503 6498 6502 + 6498 6503 6504 + 6504 6499 6498 + 6499 6504 6505 + 6505 6500 6499 + 6506 6502 6074 + 6502 6506 6503 + 6507 6503 6506 + 6504 6503 6507 + 6507 6508 6504 + 6504 6508 6509 + 6509 6505 6504 + 6510 6505 6509 + 6500 6505 6510 + 6074 6511 6506 + 6506 6511 6512 + 6512 6513 6506 + 6506 6513 6507 + 6514 6507 6513 + 6507 6514 6515 + 6515 6508 6507 + 6511 6074 6073 + 6073 6080 6511 + 6512 6511 6080 + 6080 6516 6512 + 6517 6512 6516 + 6512 6517 6518 + 6518 6513 6512 + 6513 6518 6514 + 6519 6514 6518 + 6515 6514 6519 + 6085 6516 6080 + 6520 6516 6085 + 6516 6520 6517 + 6521 6517 6520 + 6518 6517 6521 + 6521 6522 6518 + 6518 6522 6519 + 6085 6523 6520 + 6520 6523 6524 + 6524 6525 6520 + 6520 6525 6521 + 6526 6521 6525 + 6521 6526 6527 + 6527 6522 6521 + 6523 6085 6090 + 6090 6528 6523 + 6524 6523 6528 + 6528 6529 6524 + 6530 6524 6529 + 6524 6530 6531 + 6531 6525 6524 + 6525 6531 6526 + 6532 6526 6531 + 6527 6526 6532 + 6528 6090 6089 + 6089 6533 6528 + 6528 6533 6534 + 6534 6529 6528 + 6535 6529 6534 + 6529 6535 6530 + 6536 6530 6535 + 6531 6530 6536 + 6536 6537 6531 + 6531 6537 6532 + 6533 6089 6095 + 6095 6538 6533 + 6534 6533 6538 + 6538 6539 6534 + 6540 6534 6539 + 6534 6540 6535 + 6535 6540 6541 + 6541 6542 6535 + 6535 6542 6536 + 6538 6095 6094 + 6094 6543 6538 + 6538 6543 6544 + 6544 6539 6538 + 6545 6539 6544 + 6539 6545 6540 + 6541 6540 6545 + 6543 6094 6103 + 6103 6546 6543 + 6544 6543 6546 + 6546 6547 6544 + 6548 6544 6547 + 6544 6548 6545 + 6545 6548 6549 + 6549 6550 6545 + 6545 6550 6541 + 6546 6103 6102 + 6102 6551 6546 + 6546 6551 6552 + 6552 6547 6546 + 6553 6547 6552 + 6547 6553 6548 + 6549 6548 6553 + 6551 6102 6111 + 6111 6554 6551 + 6552 6551 6554 + 6554 6555 6552 + 6556 6552 6555 + 6552 6556 6553 + 6553 6556 6557 + 6557 6558 6553 + 6553 6558 6549 + 6554 6111 6110 + 6110 6559 6554 + 6554 6559 6560 + 6560 6555 6554 + 6561 6555 6560 + 6555 6561 6556 + 6557 6556 6561 + 6559 6110 6562 + 6562 6563 6559 + 6560 6559 6563 + 6563 6564 6560 + 6565 6560 6564 + 6560 6565 6561 + 6114 6562 6110 + 6123 6562 6114 + 6563 6562 6123 + 6123 6566 6563 + 6563 6566 6567 + 6567 6564 6563 + 6568 6564 6567 + 6564 6568 6565 + 6569 6565 6568 + 6561 6565 6569 + 6569 6570 6561 + 6561 6570 6557 + 6566 6123 6571 + 6571 6572 6566 + 6567 6566 6572 + 6572 6573 6567 + 6574 6567 6573 + 6567 6574 6568 + 6122 6571 6123 + 6575 6571 6122 + 6572 6571 6575 + 6575 6576 6572 + 6572 6576 6577 + 6577 6573 6572 + 6578 6573 6577 + 6573 6578 6574 + 6579 6574 6578 + 6568 6574 6579 + 6122 6128 6575 + 6575 6128 6580 + 6580 6581 6575 + 6576 6575 6581 + 6581 6582 6576 + 6577 6576 6582 + 6582 6583 6577 + 6584 6577 6583 + 6577 6584 6578 + 6127 6580 6128 + 6580 6127 6585 + 6585 6586 6580 + 6580 6586 6587 + 6587 6581 6580 + 6582 6581 6587 + 6587 6588 6582 + 6582 6588 6589 + 6589 6583 6582 + 6585 6127 6126 + 6126 6590 6585 + 6585 6590 6591 + 6591 6592 6585 + 6586 6585 6592 + 6592 6593 6586 + 6587 6586 6593 + 6593 6594 6587 + 6588 6587 6594 + 6132 6590 6126 + 6590 6132 6595 + 6595 6591 6590 + 6591 6595 6596 + 6596 6597 6591 + 6591 6597 6598 + 6598 6592 6591 + 6593 6592 6598 + 6599 6595 6132 + 6596 6595 6599 + 6599 6600 6596 + 6596 6600 6601 + 6601 6602 6596 + 6597 6596 6602 + 6602 6603 6597 + 6598 6597 6603 + 6132 6604 6599 + 6138 6599 6604 + 6599 6138 6605 + 6605 6600 6599 + 6600 6605 6606 + 6606 6601 6600 + 6131 6604 6132 + 6130 6604 6131 + 6604 6130 6138 + 6605 6138 6137 + 6137 6607 6605 + 6605 6607 6608 + 6608 6606 6605 + 6609 6606 6608 + 6601 6606 6609 + 6609 6610 6601 + 6601 6610 6611 + 6611 6602 6601 + 6603 6602 6611 + 6607 6137 6612 + 6607 6612 6613 + 6613 6608 6607 + 6608 6613 6614 + 6614 6615 6608 + 6608 6615 6609 + 6616 6609 6615 + 6610 6609 6616 + 6612 6137 6136 + 6136 6148 6612 + 6612 6148 6617 + 6617 6613 6612 + 6614 6613 6617 + 6617 6618 6614 + 6619 6614 6618 + 6615 6614 6619 + 6619 6620 6615 + 6615 6620 6616 + 6148 6153 6617 + 6621 6617 6153 + 6621 6618 6617 + 6618 6621 6622 + 6622 6623 6618 + 6618 6623 6619 + 6624 6619 6623 + 6619 6624 6625 + 6625 6620 6619 + 6153 6158 6621 + 6621 6158 6626 + 6626 6622 6621 + 6627 6622 6626 + 6622 6627 6628 + 6628 6623 6622 + 6623 6628 6624 + 6624 6628 6629 + 6629 6630 6624 + 6625 6624 6630 + 6157 6626 6158 + 6631 6626 6157 + 6626 6631 6627 + 6627 6631 6632 + 6632 6633 6627 + 6628 6627 6633 + 6633 6629 6628 + 6634 6629 6633 + 6629 6634 6635 + 6635 6630 6629 + 6157 6163 6631 + 6631 6163 6636 + 6636 6632 6631 + 6637 6632 6636 + 6632 6637 6638 + 6638 6633 6632 + 6633 6638 6634 + 6634 6638 6639 + 6639 6640 6634 + 6635 6634 6640 + 6641 6636 6163 + 6642 6636 6641 + 6636 6642 6637 + 6637 6642 6643 + 6643 6644 6637 + 6638 6637 6644 + 6644 6639 6638 + 6163 6162 6641 + 6645 6641 6162 + 6646 6641 6645 + 6641 6646 6642 + 6642 6646 6647 + 6647 6643 6642 + 6648 6643 6647 + 6643 6648 6649 + 6649 6644 6643 + 6162 6167 6645 + 6650 6645 6167 + 6651 6645 6650 + 6645 6651 6646 + 6646 6651 6652 + 6652 6647 6646 + 6653 6647 6652 + 6647 6653 6648 + 6167 6166 6650 + 6654 6650 6166 + 6655 6650 6654 + 6650 6655 6651 + 6651 6655 6656 + 6656 6652 6651 + 6657 6652 6656 + 6652 6657 6653 + 6166 6171 6654 + 6658 6654 6171 + 6659 6654 6658 + 6654 6659 6655 + 6655 6659 6660 + 6660 6656 6655 + 6661 6656 6660 + 6656 6661 6657 + 6171 6175 6658 + 6662 6658 6175 + 6663 6658 6662 + 6658 6663 6659 + 6659 6663 6664 + 6664 6660 6659 + 6665 6660 6664 + 6660 6665 6661 + 6175 6666 6662 + 6667 6662 6666 + 6668 6662 6667 + 6662 6668 6663 + 6663 6668 6669 + 6669 6664 6663 + 6670 6664 6669 + 6664 6670 6665 + 6174 6666 6175 + 6666 6174 6180 + 6180 6671 6666 + 6666 6671 6667 + 6672 6667 6671 + 6673 6667 6672 + 6667 6673 6668 + 6668 6673 6674 + 6674 6669 6668 + 6675 6669 6674 + 6669 6675 6670 + 6671 6180 6185 + 6185 6676 6671 + 6671 6676 6672 + 6677 6672 6676 + 6678 6672 6677 + 6672 6678 6673 + 6673 6678 6679 + 6679 6674 6673 + 6680 6674 6679 + 6674 6680 6675 + 6676 6185 6681 + 6681 6682 6676 + 6676 6682 6677 + 6683 6677 6682 + 6684 6677 6683 + 6677 6684 6678 + 6678 6684 6685 + 6685 6679 6678 + 6681 6185 6184 + 6686 6681 6184 + 6687 6681 6686 + 6682 6681 6687 + 6687 6688 6682 + 6682 6688 6683 + 6689 6683 6688 + 6690 6683 6689 + 6683 6690 6684 + 6184 6200 6686 + 6199 6686 6200 + 6691 6686 6199 + 6686 6691 6687 + 6692 6687 6691 + 6688 6687 6692 + 6692 6693 6688 + 6688 6693 6689 + 6694 6689 6693 + 6695 6689 6694 + 6689 6695 6690 + 6199 6205 6691 + 6691 6205 6696 + 6696 6697 6691 + 6691 6697 6698 + 6698 6692 6691 + 6699 6692 6698 + 6693 6692 6699 + 6693 6699 6694 + 6209 6696 6205 + 6700 6696 6209 + 6696 6700 6701 + 6701 6697 6696 + 6697 6701 6702 + 6702 6698 6697 + 6703 6698 6702 + 6698 6703 6699 + 6694 6699 6703 + 6209 6214 6700 + 6700 6214 6212 + 6704 6700 6212 + 6701 6700 6704 + 6704 6705 6701 + 6701 6705 6706 + 6706 6707 6701 + 6707 6702 6701 + 6213 6212 6214 + 6429 6453 6430 + 6708 6430 6453 + 6709 6430 6708 + 6430 6709 6425 + 6425 6709 6710 + 6710 6420 6425 + 6453 6458 6708 + 6458 6711 6708 + 6711 6712 6708 + 6713 6708 6712 + 6714 6708 6713 + 6708 6714 6709 + 6710 6709 6714 + 6460 6711 6458 + 6715 6711 6460 + 6711 6715 6716 + 6716 6712 6711 + 6717 6712 6716 + 6712 6717 6713 + 6715 6460 6718 + 6718 6719 6715 + 6715 6719 6720 + 6720 6716 6715 + 6717 6716 6720 + 6720 6721 6717 + 6717 6721 6722 + 6713 6717 6722 + 6723 6718 6460 + 6724 6718 6723 + 6719 6718 6724 + 6719 6724 6725 + 6725 6720 6719 + 6721 6720 6725 + 6721 6725 6726 + 6726 6722 6721 + 4102 6723 6460 + 6727 6723 4102 + 6728 6723 6727 + 6723 6728 6724 + 6724 6728 6726 + 6726 6725 6724 + 4102 4101 6727 + 6729 6727 4101 + 6728 6727 6729 + 6729 6730 6728 + 6728 6730 6726 + 6730 6731 6726 + 6732 6726 6731 + 6732 6722 6726 + 4101 6733 6729 + 6375 6393 6371 + 6393 6734 6371 + 6734 6735 6371 + 6735 6736 6371 + 6736 6737 6371 + 6737 6738 6371 + 6738 6739 6371 + 6740 6371 6739 + 6371 6740 6741 + 6741 6362 6371 + 6742 6734 6393 + 6743 6734 6742 + 6734 6743 6744 + 6744 6735 6734 + 6393 6392 6742 + 6405 6742 6392 + 6745 6742 6405 + 6742 6745 6743 + 6743 6745 6746 + 6746 6747 6743 + 6743 6747 6748 + 6748 6744 6743 + 6749 6744 6748 + 6744 6749 6750 + 6405 6751 6745 + 6745 6751 6746 + 6752 6746 6751 + 6746 6752 6753 + 6753 6747 6746 + 6747 6753 6754 + 6754 6748 6747 + 6404 6751 6405 + 6751 6404 6752 + 6752 6404 6410 + 6410 6755 6752 + 6753 6752 6755 + 6755 6756 6753 + 6754 6753 6756 + 6756 6757 6754 + 6758 6754 6757 + 6748 6754 6758 + 6758 6759 6748 + 6748 6759 6749 + 6760 6755 6410 + 6755 6760 6761 + 6761 6756 6755 + 6756 6761 6762 + 6762 6757 6756 + 6757 6762 6763 + 6763 6764 6757 + 6757 6764 6758 + 6410 6409 6760 + 6760 6409 6415 + 6415 6765 6760 + 6761 6760 6765 + 6765 6766 6761 + 6762 6761 6766 + 6766 6767 6762 + 6763 6762 6767 + 6767 6768 6763 + 6769 6763 6768 + 6764 6763 6769 + 6420 6765 6415 + 6765 6420 6710 + 6710 6766 6765 + 6766 6710 6770 + 6770 6767 6766 + 6767 6770 6771 + 6771 6768 6767 + 6768 6771 6772 + 6772 6773 6768 + 6768 6773 6769 + 6714 6770 6710 + 6771 6770 6714 + 6714 6713 6771 + 6772 6771 6713 + 6722 6772 6713 + 6774 6772 6722 + 6773 6772 6774 + 6774 6775 6773 + 6773 6775 6776 + 6776 6769 6773 + 6777 6769 6776 + 6769 6777 6764 + 6764 6777 6778 + 6778 6758 6764 + 6722 6732 6774 + 6774 6732 6779 + 6779 6780 6774 + 6775 6774 6780 + 6780 6781 6775 + 6775 6781 6782 + 6782 6776 6775 + 6783 6776 6782 + 6776 6783 6777 + 6732 6784 6779 + 4976 6779 6784 + 4981 6779 4976 + 6779 4981 6785 + 6785 6780 6779 + 6781 6780 6785 + 6731 6784 6732 + 6784 6731 6786 + 6784 6786 4976 + 4976 6786 6787 + 6787 4971 4976 + 4966 4971 6787 + 6787 6788 4966 + 4966 6788 6789 + 6786 6731 6730 + 6730 6787 6786 + 6788 6787 6730 + 6730 6729 6788 + 6788 6729 6790 + 6790 6789 6788 + 4986 6785 4981 + 6791 6785 4986 + 6785 6791 6781 + 6781 6791 6792 + 6792 6782 6781 + 6793 6782 6792 + 6782 6793 6783 + 6783 6793 6794 + 6794 6795 6783 + 6777 6783 6795 + 4986 4991 6791 + 6791 4991 6796 + 6796 6792 6791 + 6797 6792 6796 + 6792 6797 6793 + 6793 6797 6798 + 6798 6794 6793 + 6799 6794 6798 + 6794 6799 6800 + 6800 6795 6794 + 4996 6796 4991 + 6801 6796 4996 + 6796 6801 6797 + 6797 6801 6802 + 6802 6798 6797 + 6736 6798 6802 + 6798 6736 6799 + 6799 6736 6735 + 6735 6750 6799 + 6750 6800 6799 + 4996 6803 6801 + 6801 6803 6804 + 6804 6802 6801 + 6737 6802 6804 + 6802 6737 6736 + 6803 4996 4995 + 4995 6805 6803 + 6803 6805 6806 + 6804 6803 6806 + 6806 6807 6804 + 6808 6804 6807 + 6804 6808 6737 + 6737 6808 6809 + 6809 6738 6737 + 6805 4995 4994 + 6805 4994 4993 + 4993 6806 6805 + 5003 6806 4993 + 6806 5003 6810 + 6810 6807 6806 + 6811 6807 6810 + 6807 6811 6808 + 6808 6811 6812 + 6812 6809 6808 + 6813 6809 6812 + 6809 6813 6814 + 6814 6738 6809 + 5007 6810 5003 + 6815 6810 5007 + 6810 6815 6811 + 6811 6815 6816 + 6816 6812 6811 + 6817 6812 6816 + 6812 6817 6813 + 6813 6817 6818 + 6819 6813 6818 + 6814 6813 6819 + 5007 5011 6815 + 6815 5011 6820 + 6820 6816 6815 + 6821 6816 6820 + 6816 6821 6817 + 6817 6821 6822 + 6822 6818 6817 + 5016 6820 5011 + 6823 6820 5016 + 6820 6823 6821 + 6822 6821 6823 + 6823 6824 6822 + 6825 6822 6824 + 6825 6818 6822 + 6818 6825 6826 + 6826 6827 6818 + 6818 6827 6819 + 5016 5021 6823 + 6823 5021 5026 + 5026 6824 6823 + 6828 6824 5026 + 6824 6828 6825 + 6825 6828 6829 + 6829 6830 6825 + 6830 6826 6825 + 6831 6826 6830 + 6826 6831 6827 + 6827 6831 6832 + 6832 6819 6827 + 5026 6833 6828 + 6828 6833 6834 + 6834 6829 6828 + 6835 6829 6834 + 6829 6835 6836 + 6836 6830 6829 + 6833 5026 5025 + 5025 5031 6833 + 6834 6833 5031 + 5031 6837 6834 + 6838 6834 6837 + 6834 6838 6835 + 6835 6838 6839 + 6839 6840 6835 + 6835 6840 6841 + 6841 6836 6835 + 5035 6837 5031 + 6842 6837 5035 + 6837 6842 6838 + 6839 6838 6842 + 6842 6843 6839 + 6844 6839 6843 + 6839 6844 6845 + 6845 6840 6839 + 6840 6845 6846 + 6846 6841 6840 + 5035 6847 6842 + 6842 6847 6848 + 6848 6843 6842 + 6849 6843 6848 + 6843 6849 6844 + 6850 6844 6849 + 6845 6844 6850 + 6847 5035 5038 + 5038 5043 6847 + 6848 6847 5043 + 5043 6851 6848 + 6852 6848 6851 + 6848 6852 6849 + 6849 6852 6853 + 6853 6854 6849 + 6849 6854 6850 + 5047 6851 5043 + 6855 6851 5047 + 6851 6855 6852 + 6853 6852 6855 + 6855 6856 6853 + 6857 6853 6856 + 6853 6857 6858 + 6858 6854 6853 + 6854 6858 6859 + 6859 6850 6854 + 5047 5055 6855 + 6855 5055 6860 + 6860 6856 6855 + 6861 6856 6860 + 6856 6861 6857 + 6857 6861 6862 + 6862 6863 6857 + 6858 6857 6863 + 6860 5055 5054 + 5054 3408 6860 + 3407 6860 3408 + 6860 3407 6861 + 6861 3407 3406 + 3406 6862 6861 + 3406 6864 6862 + 3409 3408 5054 + 6750 6735 6865 + 6795 6778 6777 + 6866 6778 6795 + 6778 6866 6759 + 6759 6758 6778 + 6795 6800 6866 + 6866 6800 6750 + 6750 6749 6866 + 6749 6759 6866 + 4869 4868 5353 + 5353 4868 4867 + 4867 6867 5353 + 6867 6868 5353 + 5349 5353 6868 + 6868 5343 5349 + 5343 6868 6869 + 6869 5344 5343 + 6870 6867 4867 + 6871 6867 6870 + 6867 6871 6869 + 6869 6868 6867 + 4867 4873 6870 + 6870 4873 4878 + 4878 6872 6870 + 6871 6870 6872 + 6872 6873 6871 + 6869 6871 6873 + 6873 6874 6869 + 6874 6875 6869 + 6875 6876 6869 + 5344 6869 6876 + 4955 6872 4878 + 6872 4955 6877 + 6877 6873 6872 + 6873 6877 6878 + 6878 6874 6873 + 6879 6874 6878 + 6874 6879 6880 + 6880 6875 6874 + 6877 4955 6881 + 6881 6882 6877 + 6878 6877 6882 + 6882 6883 6878 + 6884 6878 6883 + 6878 6884 6879 + 4341 6881 4955 + 4345 6881 4341 + 4345 6882 6881 + 6882 4345 4350 + 4350 6883 6882 + 6883 4350 6885 + 6885 6886 6883 + 6883 6886 6884 + 6887 6884 6886 + 6879 6884 6887 + 6887 6888 6879 + 6879 6888 6889 + 6889 6880 6879 + 6885 4350 4349 + 4349 6890 6885 + 6891 6885 6890 + 6886 6885 6891 + 6891 6892 6886 + 6886 6892 6887 + 6893 6887 6892 + 6887 6893 6894 + 6894 6888 6887 + 6890 4349 4348 + 4348 6895 6890 + 6890 6895 6896 + 6896 6897 6890 + 6890 6897 6891 + 6898 6891 6897 + 6891 6898 6899 + 6899 6892 6891 + 6892 6899 6893 + 6895 4348 6900 + 6900 6901 6895 + 6896 6895 6901 + 6901 6902 6896 + 6903 6896 6902 + 6896 6903 6904 + 6904 6897 6896 + 6897 6904 6898 + 4353 6900 4348 + 6491 6900 4353 + 6900 6491 6490 + 6490 6901 6900 + 6901 6490 6496 + 6496 6902 6901 + 6905 6902 6496 + 6902 6905 6903 + 6906 6903 6905 + 6904 6903 6906 + 6906 6907 6904 + 6904 6907 6908 + 6908 6898 6904 + 6899 6898 6908 + 6496 6501 6905 + 6905 6501 6500 + 6500 6909 6905 + 6905 6909 6906 + 6910 6906 6909 + 6906 6910 6911 + 6911 6907 6906 + 6907 6911 6912 + 6912 6908 6907 + 6510 6909 6500 + 6909 6510 6910 + 6913 6910 6510 + 6911 6910 6913 + 6913 6914 6911 + 6911 6914 6915 + 6915 6912 6911 + 6916 6912 6915 + 6908 6912 6916 + 6916 6917 6908 + 6908 6917 6899 + 6510 6918 6913 + 6919 6913 6918 + 6913 6919 6920 + 6920 6914 6913 + 6914 6920 6921 + 6921 6915 6914 + 6509 6918 6510 + 6922 6918 6509 + 6918 6922 6919 + 6923 6919 6922 + 6920 6919 6923 + 6923 6924 6920 + 6920 6924 6925 + 6925 6921 6920 + 6926 6921 6925 + 6915 6921 6926 + 6509 6927 6922 + 6922 6927 6928 + 6928 6929 6922 + 6922 6929 6923 + 6930 6923 6929 + 6923 6930 6931 + 6931 6924 6923 + 6927 6509 6508 + 6508 6515 6927 + 6928 6927 6515 + 6515 6932 6928 + 6933 6928 6932 + 6928 6933 6934 + 6934 6929 6928 + 6929 6934 6930 + 6935 6930 6934 + 6931 6930 6935 + 6519 6932 6515 + 6936 6932 6519 + 6932 6936 6933 + 6937 6933 6936 + 6934 6933 6937 + 6937 6938 6934 + 6934 6938 6935 + 6519 6939 6936 + 6936 6939 6940 + 6940 6941 6936 + 6936 6941 6937 + 6942 6937 6941 + 6937 6942 6943 + 6943 6938 6937 + 6939 6519 6522 + 6522 6527 6939 + 6940 6939 6527 + 6527 6944 6940 + 6945 6940 6944 + 6940 6945 6946 + 6946 6941 6940 + 6941 6946 6942 + 6947 6942 6946 + 6943 6942 6947 + 6532 6944 6527 + 6948 6944 6532 + 6944 6948 6945 + 6949 6945 6948 + 6946 6945 6949 + 6949 6950 6946 + 6946 6950 6947 + 6951 6947 6950 + 6952 6947 6951 + 6947 6952 6943 + 6532 6953 6948 + 6948 6953 6954 + 6954 6955 6948 + 6948 6955 6949 + 6956 6949 6955 + 6950 6949 6956 + 6956 6957 6950 + 6950 6957 6951 + 6953 6532 6537 + 6537 6958 6953 + 6954 6953 6958 + 6958 6959 6954 + 6960 6954 6959 + 6955 6954 6960 + 6960 6961 6955 + 6955 6961 6956 + 6962 6956 6961 + 6957 6956 6962 + 6958 6537 6536 + 6536 6963 6958 + 6958 6963 6964 + 6964 6959 6958 + 6959 6964 6965 + 6965 6966 6959 + 6959 6966 6960 + 6967 6960 6966 + 6961 6960 6967 + 6963 6536 6542 + 6542 6968 6963 + 6964 6963 6968 + 6968 6969 6964 + 6965 6964 6969 + 6969 6970 6965 + 6971 6965 6970 + 6966 6965 6971 + 6971 6972 6966 + 6966 6972 6967 + 6968 6542 6541 + 6541 6973 6968 + 6968 6973 6974 + 6974 6969 6968 + 6969 6974 6975 + 6975 6970 6969 + 6970 6975 6976 + 6976 6977 6970 + 6970 6977 6971 + 6973 6541 6550 + 6550 6978 6973 + 6974 6973 6978 + 6978 6979 6974 + 6975 6974 6979 + 6979 6980 6975 + 6976 6975 6980 + 6978 6550 6549 + 6549 6981 6978 + 6978 6981 6982 + 6982 6979 6978 + 6982 6980 6979 + 6980 6982 6983 + 6983 6984 6980 + 6980 6984 6976 + 6981 6549 6558 + 6558 6985 6981 + 6982 6981 6985 + 6985 6983 6982 + 6986 6983 6985 + 6983 6986 6987 + 6987 6984 6983 + 6984 6987 6988 + 6988 6989 6984 + 6984 6989 6976 + 6985 6558 6557 + 6557 6990 6985 + 6985 6990 6986 + 6986 6990 6991 + 6991 6992 6986 + 6987 6986 6992 + 6992 6993 6987 + 6988 6987 6993 + 6990 6557 6570 + 6570 6991 6990 + 6991 6570 6569 + 6569 6994 6991 + 6991 6994 6995 + 6995 6992 6991 + 6995 6993 6992 + 6993 6995 6996 + 6996 6997 6993 + 6993 6997 6988 + 6994 6569 6998 + 6998 6999 6994 + 6995 6994 6999 + 6999 6996 6995 + 7000 6996 6999 + 6996 7000 7001 + 7001 6997 6996 + 6568 6998 6569 + 6579 6998 6568 + 6999 6998 6579 + 6579 7002 6999 + 6999 7002 7000 + 7000 7002 7003 + 7003 7004 7000 + 7001 7000 7004 + 7004 7005 7001 + 7006 7001 7005 + 6997 7001 7006 + 7002 6579 7007 + 7007 7003 7002 + 7003 7007 7008 + 7008 7009 7003 + 7003 7009 7010 + 7010 7004 7003 + 7010 7005 7004 + 6578 7007 6579 + 7008 7007 6578 + 6578 6584 7008 + 7008 6584 7011 + 7011 7012 7008 + 7009 7008 7012 + 7012 7013 7009 + 7010 7009 7013 + 7013 7014 7010 + 7005 7010 7014 + 7014 7015 7005 + 7005 7015 7006 + 6583 7011 6584 + 7011 6583 6589 + 6589 7016 7011 + 7011 7016 7017 + 7017 7012 7011 + 7013 7012 7017 + 7017 7018 7013 + 7013 7018 7019 + 7019 7014 7013 + 7014 7019 7020 + 7020 7015 7014 + 7016 6589 7021 + 7021 7022 7016 + 7017 7016 7022 + 7022 7023 7017 + 7018 7017 7023 + 7023 7024 7018 + 7019 7018 7024 + 7024 7025 7019 + 7020 7019 7025 + 7026 7021 6589 + 7027 7021 7026 + 7022 7021 7027 + 7027 7028 7022 + 7022 7028 7029 + 7029 7023 7022 + 7024 7023 7029 + 6589 6588 7026 + 6594 7026 6588 + 7026 6594 7030 + 7030 7031 7026 + 7026 7031 7027 + 7027 7031 7032 + 7032 7033 7027 + 7028 7027 7033 + 7033 7034 7028 + 7029 7028 7034 + 7030 6594 6593 + 6593 7035 7030 + 7030 7035 7036 + 7036 7037 7030 + 7031 7030 7037 + 7037 7032 7031 + 6598 7035 6593 + 7035 6598 7038 + 7038 7036 7035 + 7036 7038 7039 + 7039 7040 7036 + 7036 7040 7041 + 7041 7037 7036 + 7032 7037 7041 + 6603 7038 6598 + 7039 7038 6603 + 6603 7042 7039 + 7039 7042 7043 + 7043 7044 7039 + 7040 7039 7044 + 7044 7045 7040 + 7041 7040 7045 + 6611 7042 6603 + 7042 6611 7046 + 7046 7043 7042 + 7043 7046 7047 + 7047 7048 7043 + 7043 7048 7049 + 7049 7044 7043 + 7045 7044 7049 + 7050 7046 6611 + 7047 7046 7050 + 7050 7051 7047 + 7047 7051 7052 + 7052 7053 7047 + 7048 7047 7053 + 7053 7054 7048 + 7049 7048 7054 + 6611 6610 7050 + 6616 7050 6610 + 7051 7050 6616 + 6616 7055 7051 + 7051 7055 7056 + 7056 7052 7051 + 7057 7052 7056 + 7052 7057 7058 + 7058 7053 7052 + 7054 7053 7058 + 7055 6616 6620 + 6620 6625 7055 + 7055 6625 7059 + 7059 7056 7055 + 7060 7056 7059 + 7056 7060 7057 + 7057 7060 7061 + 7061 7062 7057 + 7058 7057 7062 + 6630 7059 6625 + 7063 7059 6630 + 7059 7063 7060 + 7060 7063 7064 + 7064 7061 7060 + 7065 7061 7064 + 7061 7065 7066 + 7066 7062 7061 + 6630 6635 7063 + 7063 6635 7067 + 7067 7064 7063 + 7068 7064 7067 + 7064 7068 7065 + 7065 7068 7069 + 7069 7070 7065 + 7066 7065 7070 + 6640 7067 6635 + 7071 7067 6640 + 7067 7071 7068 + 7068 7071 7072 + 7072 7069 7068 + 7073 7069 7072 + 7069 7073 7074 + 7074 7070 7069 + 6640 7075 7071 + 7071 7075 7076 + 7076 7072 7071 + 7077 7072 7076 + 7072 7077 7073 + 7073 7077 7078 + 7078 7079 7073 + 7074 7073 7079 + 7075 6640 6639 + 6639 7080 7075 + 7075 7080 7081 + 7081 7076 7075 + 7082 7076 7081 + 7076 7082 7077 + 7077 7082 7083 + 7083 7078 7077 + 7080 6639 6644 + 6644 6649 7080 + 7080 6649 7084 + 7084 7081 7080 + 7085 7081 7084 + 7081 7085 7082 + 7082 7085 7086 + 7086 7083 7082 + 7087 7083 7086 + 7083 7087 7088 + 7088 7078 7083 + 7089 7084 6649 + 7090 7084 7089 + 7084 7090 7085 + 7085 7090 7091 + 7091 7086 7085 + 7092 7086 7091 + 7086 7092 7087 + 6649 6648 7089 + 7093 7089 6648 + 7094 7089 7093 + 7089 7094 7090 + 7090 7094 7095 + 7095 7091 7090 + 7096 7091 7095 + 7091 7096 7092 + 6648 6653 7093 + 7097 7093 6653 + 7098 7093 7097 + 7093 7098 7094 + 7094 7098 7099 + 7099 7095 7094 + 7100 7095 7099 + 7095 7100 7096 + 6653 6657 7097 + 7101 7097 6657 + 7102 7097 7101 + 7097 7102 7098 + 7098 7102 7103 + 7103 7099 7098 + 7104 7099 7103 + 7099 7104 7100 + 6657 6661 7101 + 7105 7101 6661 + 7106 7101 7105 + 7101 7106 7102 + 7102 7106 7107 + 7107 7103 7102 + 7108 7103 7107 + 7103 7108 7104 + 6661 6665 7105 + 7109 7105 6665 + 7110 7105 7109 + 7105 7110 7106 + 7106 7110 7111 + 7111 7107 7106 + 7112 7107 7111 + 7107 7112 7108 + 6665 6670 7109 + 7113 7109 6670 + 7114 7109 7113 + 7109 7114 7110 + 7110 7114 7115 + 7115 7111 7110 + 7116 7111 7115 + 7111 7116 7112 + 6670 6675 7113 + 7117 7113 6675 + 7118 7113 7117 + 7113 7118 7114 + 7114 7118 7119 + 7119 7115 7114 + 7120 7115 7119 + 7115 7120 7116 + 6675 6680 7117 + 7121 7117 6680 + 7122 7117 7121 + 7117 7122 7118 + 7118 7122 7123 + 7123 7119 7118 + 7124 7119 7123 + 7119 7124 7120 + 6680 7125 7121 + 7126 7121 7125 + 7127 7121 7126 + 7121 7127 7122 + 7122 7127 7128 + 7128 7123 7122 + 7129 7123 7128 + 7123 7129 7124 + 6679 7125 6680 + 7125 6679 6685 + 6685 7130 7125 + 7125 7130 7126 + 7131 7126 7130 + 7132 7126 7131 + 7126 7132 7127 + 7127 7132 7133 + 7133 7128 7127 + 7134 7128 7133 + 7128 7134 7129 + 7130 6685 7135 + 7135 7136 7130 + 7130 7136 7131 + 7137 7131 7136 + 7138 7131 7137 + 7131 7138 7132 + 7132 7138 7139 + 7139 7133 7132 + 7135 6685 6684 + 6684 6690 7135 + 7140 7135 6690 + 7136 7135 7140 + 7140 7141 7136 + 7136 7141 7137 + 7142 7137 7141 + 6287 7137 7142 + 7137 6287 7138 + 7138 6287 6286 + 6286 7139 7138 + 6690 6695 7140 + 7143 7140 6695 + 7141 7140 7143 + 7143 7144 7141 + 7141 7144 7142 + 7145 7142 7144 + 6282 7142 7145 + 7142 6282 6287 + 6695 7146 7143 + 7147 7143 7146 + 7144 7143 7147 + 7147 7148 7144 + 7144 7148 7145 + 6268 7145 7148 + 6272 7145 6268 + 7145 6272 6282 + 6694 7146 6695 + 7146 6694 7149 + 7149 7150 7146 + 7146 7150 7147 + 7151 7147 7150 + 7148 7147 7151 + 7151 6264 7148 + 7148 6264 6268 + 6703 7149 6694 + 7152 7149 6703 + 7150 7149 7152 + 7152 7153 7150 + 7150 7153 7151 + 6260 7151 7153 + 6264 7151 6260 + 6703 7154 7152 + 7152 7154 7155 + 7155 7156 7152 + 7153 7152 7156 + 7156 6255 7153 + 7153 6255 6260 + 6702 7154 6703 + 7154 6702 6707 + 6707 7155 7154 + 7155 6707 7157 + 7155 7157 6250 + 6250 7156 7155 + 6255 7156 6250 + 7157 6707 6706 + 6706 6245 7157 + 6250 7157 6245 + 6245 6706 6240 + 6240 6706 6705 + 6705 7158 6240 + 6240 7158 6228 + 7159 6228 7158 + 6228 7159 6219 + 6219 7159 6212 + 6212 7159 6704 + 7158 6705 6704 + 7158 6704 7159 + 6292 7139 6286 + 7139 6292 7160 + 7160 7133 7139 + 7133 7160 7134 + 7134 7160 7161 + 7161 7162 7134 + 7129 7134 7162 + 7160 6292 6291 + 6291 7161 7160 + 7161 6291 6290 + 6290 7163 7161 + 7161 7163 7164 + 7164 7162 7161 + 7165 7162 7164 + 7162 7165 7129 + 7124 7129 7165 + 7165 7166 7124 + 7120 7124 7166 + 7163 6290 6296 + 6296 7167 7163 + 7163 7167 7168 + 7168 7164 7163 + 7169 7164 7168 + 7164 7169 7165 + 7165 7169 7170 + 7170 7166 7165 + 7171 7166 7170 + 7166 7171 7120 + 7116 7120 7171 + 7167 6296 7172 + 7172 7173 7167 + 7167 7173 7174 + 7174 7168 7167 + 7175 7168 7174 + 7168 7175 7169 + 7169 7175 7176 + 7176 7170 7169 + 7172 6296 6295 + 6295 7177 7172 + 7172 7177 7178 + 7178 7179 7172 + 7173 7172 7179 + 7179 7180 7173 + 7174 7173 7180 + 6301 7177 6295 + 7177 6301 7181 + 7181 7178 7177 + 7182 7178 7181 + 7178 7182 7183 + 7183 7179 7178 + 7179 7183 7184 + 7184 7180 7179 + 6305 7181 6301 + 6310 7181 6305 + 7181 6310 7182 + 7182 6310 7185 + 7185 7186 7182 + 7183 7182 7186 + 7186 7187 7183 + 7184 7183 7187 + 7187 7188 7184 + 7189 7184 7188 + 7180 7184 7189 + 6309 7185 6310 + 7190 7185 6309 + 7185 7190 7191 + 7191 7186 7185 + 7186 7191 7192 + 7192 7187 7186 + 7187 7192 7193 + 7193 7188 7187 + 6309 6314 7190 + 7190 6314 7194 + 7194 7195 7190 + 7191 7190 7195 + 7195 7196 7191 + 7192 7191 7196 + 7196 7197 7192 + 7193 7192 7197 + 6318 7194 6314 + 7198 7194 6318 + 7194 7198 7199 + 7199 7195 7194 + 7195 7199 7200 + 7200 7196 7195 + 7196 7200 7201 + 7201 7197 7196 + 6318 6323 7198 + 7198 6323 7202 + 7202 7203 7198 + 7199 7198 7203 + 7203 7204 7199 + 7200 7199 7204 + 7204 7205 7200 + 7201 7200 7205 + 7206 7202 6323 + 7207 7202 7206 + 7202 7207 7208 + 7208 7203 7202 + 7203 7208 7209 + 7209 7204 7203 + 7204 7209 7210 + 7210 7205 7204 + 6323 6322 7206 + 6328 7206 6322 + 7211 7206 6328 + 7206 7211 7207 + 7212 7207 7211 + 7208 7207 7212 + 7212 7213 7208 + 7208 7213 7214 + 7214 7209 7208 + 7210 7209 7214 + 6328 6333 7211 + 7211 6333 7215 + 7215 7216 7211 + 7211 7216 7212 + 7217 7212 7216 + 7213 7212 7217 + 7217 7218 7213 + 7213 7218 7219 + 7219 7214 7213 + 7215 6333 6337 + 6337 7220 7215 + 7221 7215 7220 + 7216 7215 7221 + 7221 7222 7216 + 7216 7222 7217 + 7223 7217 7222 + 7218 7217 7223 + 7223 7224 7218 + 7219 7218 7224 + 7225 7220 6337 + 7220 7225 7226 + 7220 7226 7221 + 7221 7226 7227 + 7227 7228 7221 + 7222 7221 7228 + 7228 7229 7222 + 7222 7229 7223 + 6337 6346 7225 + 7230 7225 6346 + 7226 7225 7230 + 7230 7227 7226 + 7227 7230 7231 + 7227 7231 7232 + 7232 7228 7227 + 7229 7228 7232 + 7232 7233 7229 + 7229 7233 7234 + 7234 7223 7229 + 7224 7223 7234 + 7235 7230 6346 + 7231 7230 7235 + 7235 7236 7231 + 7232 7231 7236 + 7237 7232 7236 + 7233 7232 7237 + 7237 7238 7233 + 7234 7233 7238 + 6345 7235 6346 + 7235 6345 7239 + 7239 7236 7235 + 7236 7239 7240 + 7240 7241 7236 + 7236 7241 7237 + 7242 7237 7241 + 7237 7242 7243 + 7243 7238 7237 + 7239 6345 7244 + 7244 7245 7239 + 7239 7245 7246 + 7246 7240 7239 + 7247 7240 7246 + 7240 7247 7248 + 7248 7241 7240 + 7241 7248 7242 + 7249 7244 6345 + 7250 7244 7249 + 7245 7244 7250 + 7250 7251 7245 + 7245 7251 7252 + 7252 7246 7245 + 7253 7246 7252 + 7246 7253 7247 + 6350 7249 6345 + 6359 7249 6350 + 7249 6359 7254 + 7249 7254 7250 + 7250 7254 7255 + 7255 7256 7250 + 7251 7250 7256 + 7256 7257 7251 + 7252 7251 7257 + 7254 6359 6358 + 6358 7255 7254 + 7255 6358 6357 + 6357 7258 7255 + 7255 7258 7259 + 7259 7256 7255 + 7257 7256 7259 + 7259 7260 7257 + 7257 7260 7261 + 7261 7262 7257 + 7257 7262 7252 + 7258 6357 7263 + 7263 7264 7258 + 7259 7258 7264 + 7264 7265 7259 + 7260 7259 7265 + 7265 7266 7260 + 7261 7260 7266 + 6362 7263 6357 + 7267 7263 6362 + 7264 7263 7267 + 7267 7268 7264 + 7264 7268 7269 + 7269 7265 7264 + 7266 7265 7269 + 6362 6741 7267 + 7267 6741 7270 + 7270 7271 7267 + 7268 7267 7271 + 7271 7272 7268 + 7269 7268 7272 + 7272 7273 7269 + 7274 7269 7273 + 7269 7274 7266 + 7275 7270 6741 + 7270 7275 7276 + 7276 7277 7270 + 7270 7277 7278 + 7278 7271 7270 + 7272 7271 7278 + 6741 6740 7275 + 7275 6740 7279 + 6740 7280 7279 + 6739 7280 6740 + 7281 7280 6739 + 7280 7281 7282 + 7282 7283 7280 + 7280 7283 7284 + 6739 7285 7281 + 7281 7285 7286 + 7286 7287 7281 + 7281 7287 7288 + 7288 7282 7281 + 7289 7282 7288 + 7283 7282 7289 + 7285 6739 6738 + 6738 6814 7285 + 7286 7285 6814 + 6814 7290 7286 + 7291 7286 7290 + 7286 7291 7292 + 7292 7287 7286 + 7287 7292 7293 + 7293 7288 7287 + 6819 7290 6814 + 7294 7290 6819 + 7290 7294 7291 + 7295 7291 7294 + 7292 7291 7295 + 7295 7296 7292 + 7292 7296 7297 + 7297 7293 7292 + 7298 7293 7297 + 7288 7293 7298 + 6819 6832 7294 + 7294 6832 7299 + 7299 7300 7294 + 7294 7300 7295 + 7301 7295 7300 + 7295 7301 7302 + 7302 7296 7295 + 7296 7302 7303 + 7303 7297 7296 + 7299 6832 6831 + 6831 7304 7299 + 7305 7299 7304 + 7299 7305 7306 + 7306 7300 7299 + 7300 7306 7301 + 7307 7301 7306 + 7302 7301 7307 + 7307 7308 7302 + 7303 7302 7308 + 6830 7304 6831 + 7309 7304 6830 + 7304 7309 7305 + 7310 7305 7309 + 7306 7305 7310 + 7310 7311 7306 + 7306 7311 7307 + 7312 7307 7311 + 7312 7308 7307 + 6830 6836 7309 + 7309 6836 6841 + 6841 7313 7309 + 7309 7313 7310 + 7314 7310 7313 + 7310 7314 7315 + 7315 7311 7310 + 7311 7315 7312 + 7316 7313 6841 + 7313 7316 7314 + 7317 7314 7316 + 7315 7314 7317 + 7317 7318 7315 + 7312 7315 7318 + 6841 6846 7316 + 7316 6846 7319 + 7319 7320 7316 + 7316 7320 7317 + 7321 7317 7320 + 7321 7318 7317 + 7318 7321 7322 + 7322 7323 7318 + 7318 7323 7312 + 7319 6846 6845 + 6845 7324 7319 + 7325 7319 7324 + 7319 7325 7326 + 7326 7320 7319 + 7320 7326 7321 + 7321 7326 7327 + 7327 7328 7321 + 7328 7322 7321 + 6850 7324 6845 + 7329 7324 6850 + 7324 7329 7325 + 7330 7325 7329 + 7326 7325 7330 + 7330 7327 7326 + 7331 7327 7330 + 7327 7331 247 + 247 7328 7327 + 7328 247 7332 + 6850 6859 7329 + 7329 6859 7333 + 7333 7334 7329 + 7329 7334 7330 + 7335 7330 7334 + 7330 7335 7331 + 7333 6859 6858 + 6858 7336 7333 + 7337 7333 7336 + 7333 7337 7338 + 7338 7334 7333 + 7334 7338 7335 + 7335 7338 7339 + 7339 7340 7335 + 7331 7335 7340 + 6863 7336 6858 + 7341 7336 6863 + 7336 7341 7337 + 7342 7337 7341 + 7338 7337 7342 + 7342 7339 7338 + 7342 7343 7339 + 7339 7343 7344 + 7344 7340 7339 + 6863 7345 7341 + 7341 7345 3394 + 3394 7346 7341 + 7341 7346 7342 + 7346 7347 7342 + 7343 7342 7347 + 7345 6863 6862 + 6862 3410 7345 + 3394 7345 3410 + 7348 247 7331 + 7331 7349 7348 + 7349 7350 7348 + 7351 7350 7349 + 7340 7349 7331 + 7352 7349 7340 + 7349 7352 7351 + 7353 7351 7352 + 7354 7351 7353 + 7351 7354 7355 + 7355 7354 7356 + 7356 248 7355 + 7340 7344 7352 + 7352 7344 7357 + 7357 7358 7352 + 7352 7358 7359 + 7359 7353 7352 + 7360 7353 7359 + 7360 7361 7353 + 7353 7361 7354 + 7356 7354 7361 + 7357 7344 7343 + 7362 7357 7343 + 7363 7357 7362 + 7358 7357 7363 + 7363 7364 7358 + 7358 7364 7365 + 7365 7359 7358 + 7366 7359 7365 + 7359 7366 7360 + 7343 7367 7362 + 7368 7362 7367 + 7362 7368 7369 + 7369 7370 7362 + 7362 7370 7363 + 7347 7367 7343 + 7371 7367 7347 + 7367 7371 7368 + 7368 7371 7372 + 7372 7373 7368 + 7373 7374 7368 + 7369 7368 7374 + 7371 7347 7346 + 7346 7372 7371 + 7372 7346 3394 + 3394 3393 7372 + 7372 3393 3392 + 3392 7373 7372 + 7373 3392 3399 + 3399 7375 7373 + 7373 7375 7376 + 7376 7374 7373 + 7377 7374 7376 + 7374 7377 7369 + 7369 7377 7378 + 7378 7379 7369 + 7370 7369 7379 + 7375 3399 7380 + 7380 7381 7375 + 7376 7375 7381 + 7381 7382 7376 + 7377 7376 7382 + 7382 7378 7377 + 7383 7378 7382 + 7378 7383 7384 + 7384 7379 7378 + 7380 3399 7385 + 7385 7386 7380 + 7387 7380 7386 + 7380 7387 7388 + 7388 7381 7380 + 7381 7388 7389 + 7389 7382 7381 + 7382 7389 7383 + 3399 3398 7385 + 3397 7385 3398 + 7390 7385 3397 + 7385 7390 7391 + 7391 7386 7385 + 7391 7392 7386 + 7386 7392 7387 + 7393 7387 7392 + 7388 7387 7393 + 7390 3397 7394 + 7394 7395 7390 + 7390 7395 7396 + 7396 7397 7390 + 7397 7391 7390 + 7392 7391 7397 + 7397 7398 7392 + 7392 7398 7393 + 3396 7394 3397 + 7399 7394 3396 + 7395 7394 7399 + 7399 7400 7395 + 7395 7400 7401 + 7401 7396 7395 + 7402 7396 7401 + 7396 7402 7403 + 7403 7397 7396 + 3396 7404 7399 + 7399 7404 7405 + 7405 7406 7399 + 7400 7399 7406 + 7406 7407 7400 + 7401 7400 7407 + 7408 7404 3396 + 7404 7408 7409 + 7409 7405 7404 + 7410 7405 7409 + 7405 7410 7411 + 7411 7406 7405 + 7407 7406 7411 + 7411 7412 7407 + 7407 7412 7413 + 7413 7414 7407 + 7407 7414 7401 + 7410 7409 7415 + 7415 7416 7410 + 7411 7410 7416 + 7416 7417 7411 + 7412 7411 7417 + 7417 7418 7412 + 7413 7412 7418 + 7418 7419 7413 + 7420 7413 7419 + 7413 7420 7421 + 7421 7414 7413 + 7422 7417 7416 + 7418 7417 7422 + 7422 7423 7418 + 7418 7423 7424 + 7424 7419 7418 + 7425 7419 7424 + 7419 7425 7420 + 7426 7420 7425 + 7421 7420 7426 + 7416 7427 7422 + 7428 7422 7427 + 7423 7422 7428 + 7428 7429 7423 + 7424 7423 7429 + 7429 7430 7424 + 7431 7424 7430 + 7424 7431 7425 + 7427 7416 7432 + 7427 7433 7428 + 7434 7428 7433 + 7428 7434 7435 + 7435 7429 7428 + 7429 7435 7436 + 7436 7430 7429 + 7437 7430 7436 + 7430 7437 7431 + 7438 7431 7437 + 7425 7431 7438 + 7433 7439 7434 + 7440 7434 7439 + 7435 7434 7440 + 7440 7441 7435 + 7435 7441 7442 + 7442 7436 7435 + 7443 7436 7442 + 7436 7443 7437 + 7444 7440 7439 + 7445 7440 7444 + 7440 7445 7441 + 7441 7445 7446 + 7446 7442 7441 + 7447 7442 7446 + 7442 7447 7443 + 7448 7443 7447 + 7437 7443 7448 + 7448 7449 7437 + 7437 7449 7438 + 7444 7450 7445 + 7445 7450 1026 + 7446 7445 1026 + 1034 7446 1026 + 1039 7446 1034 + 7446 1039 7447 + 7451 7450 7444 + 7447 1039 1038 + 1038 7452 7447 + 7447 7452 7448 + 7453 7448 7452 + 7448 7453 7454 + 7454 7449 7448 + 7449 7454 7455 + 7455 7438 7449 + 1044 7452 1038 + 7452 1044 7453 + 7456 7453 1044 + 7454 7453 7456 + 7456 7457 7454 + 7454 7457 7458 + 7458 7455 7454 + 7459 7455 7458 + 7438 7455 7459 + 1044 1043 7456 + 1049 7456 1043 + 7456 1049 7460 + 7460 7457 7456 + 7457 7460 7461 + 7461 7458 7457 + 7458 7461 7462 + 7462 7463 7458 + 7458 7463 7459 + 7460 1049 1048 + 1048 7464 7460 + 7460 7464 7465 + 7465 7461 7460 + 7462 7461 7465 + 7465 7466 7462 + 7462 7466 7467 + 7467 7468 7462 + 7463 7462 7468 + 1056 7464 1048 + 7464 1056 7469 + 7469 7465 7464 + 7465 7469 7470 + 7470 7466 7465 + 7466 7470 7471 + 7471 7467 7466 + 7472 7469 1056 + 7470 7469 7472 + 7472 7473 7470 + 7471 7470 7473 + 7473 7474 7471 + 7475 7471 7474 + 7467 7471 7475 + 1056 1060 7472 + 1069 7472 1060 + 7473 7472 1069 + 1069 7476 7473 + 7473 7476 7477 + 7477 7474 7473 + 7478 7474 7477 + 7474 7478 7475 + 7479 7475 7478 + 7480 7475 7479 + 7475 7480 7467 + 7476 1069 7481 + 7481 7482 7476 + 7476 7482 7483 + 7483 7477 7476 + 7484 7477 7483 + 7477 7484 7478 + 1068 7481 1069 + 1074 7481 1068 + 7481 1074 1079 + 1079 7482 7481 + 7482 1079 7485 + 7485 7483 7482 + 7483 7485 7486 + 7486 7487 7483 + 7483 7487 7484 + 7488 7485 1079 + 7486 7485 7488 + 7488 7489 7486 + 7490 7486 7489 + 7487 7486 7490 + 7490 7491 7487 + 7484 7487 7491 + 7492 7488 1079 + 7493 7488 7492 + 7489 7488 7493 + 7493 7494 7489 + 7489 7494 7495 + 7495 7496 7489 + 7489 7496 7490 + 1079 1078 7492 + 7497 7492 1078 + 7492 7497 7498 + 7498 7499 7492 + 7492 7499 7493 + 7493 7499 7500 + 7500 7501 7493 + 7494 7493 7501 + 1078 1077 7497 + 7497 1077 1084 + 1084 7502 7497 + 7498 7497 7502 + 7502 7503 7498 + 7498 7503 7504 + 7504 7505 7498 + 7499 7498 7505 + 7505 7500 7499 + 7506 7502 1084 + 7502 7506 7507 + 7507 7503 7502 + 7503 7507 7508 + 7508 7504 7503 + 7508 7509 7504 + 7504 7509 7510 + 7510 7505 7504 + 7500 7505 7510 + 1084 1083 7506 + 7511 7506 1083 + 7507 7506 7511 + 7511 7512 7507 + 7507 7512 7513 + 7513 7508 7507 + 7509 7508 7513 + 7513 7514 7509 + 7510 7509 7514 + 1083 1088 7511 + 1088 7515 7511 + 7516 7511 7515 + 7512 7511 7516 + 7516 7517 7512 + 7512 7517 7518 + 7518 7513 7512 + 7513 7518 7519 + 7519 7514 7513 + 1093 7515 1088 + 7520 7515 1093 + 7515 7520 7516 + 7516 7520 7521 + 7521 7522 7516 + 7517 7516 7522 + 7522 7523 7517 + 7518 7517 7523 + 7523 7524 7518 + 7519 7518 7524 + 1093 7525 7520 + 7520 7525 7526 + 7526 7521 7520 + 7521 7526 7527 + 7527 7528 7521 + 7521 7528 7529 + 7529 7522 7521 + 7525 1093 1092 + 1092 7530 7525 + 7525 7530 7531 + 7531 7526 7525 + 7527 7526 7531 + 7531 7532 7527 + 7533 7527 7532 + 7528 7527 7533 + 7533 7534 7528 + 7529 7528 7534 + 3288 7530 1092 + 7530 3288 7535 + 7535 7531 7530 + 7532 7531 7535 + 7535 7536 7532 + 7532 7536 7537 + 7537 7538 7532 + 7532 7538 7533 + 7539 7533 7538 + 7534 7533 7539 + 7540 7535 3288 + 7536 7535 7540 + 7540 7541 7536 + 7536 7541 7542 + 7542 7537 7536 + 7543 7537 7542 + 7537 7543 7544 + 7544 7538 7537 + 7538 7544 7539 + 3291 7540 3288 + 3296 7540 3291 + 7541 7540 3296 + 7541 3296 3295 + 3295 7542 7541 + 7545 7542 3295 + 7542 7545 7543 + 7546 7543 7545 + 7544 7543 7546 + 7546 7547 7544 + 7544 7547 7548 + 7548 7539 7544 + 7549 7539 7548 + 7539 7549 7534 + 3295 7550 7545 + 7545 7550 7551 + 7551 7552 7545 + 7545 7552 7546 + 7550 3295 3294 + 3294 3293 7550 + 7551 7550 3293 + 7553 7551 3293 + 7554 7551 7553 + 7552 7551 7554 + 7552 7554 7555 + 7555 7556 7552 + 7552 7556 7546 + 7557 7553 3293 + 7558 7553 7557 + 7558 7559 7553 + 7553 7559 7554 + 7554 7559 7560 + 7555 7554 7560 + 3302 7557 3293 + 7561 7557 3302 + 7562 7557 7561 + 7557 7562 7558 + 3302 7563 7561 + 7561 7563 7564 + 7564 7565 7561 + 7562 7561 7565 + 7565 7566 7562 + 7558 7562 7566 + 7563 3302 3301 + 7563 3301 3300 + 3300 3499 7563 + 7563 3499 7564 + 1027 1026 7450 + 7450 7567 1027 + 1658 1657 5120 + 5120 1657 1656 + 1656 7568 5120 + 5120 7568 5121 + 7569 5121 7568 + 5121 7569 7570 + 7570 7571 5121 + 5121 7571 5113 + 1665 7568 1656 + 7568 1665 7569 + 7569 1665 1669 + 7572 7569 1669 + 7570 7569 7572 + 7572 7573 7570 + 7574 7570 7573 + 7571 7570 7574 + 7574 5110 7571 + 5113 7571 5110 + 1669 7575 7572 + 7576 7572 7575 + 7573 7572 7576 + 7576 353 7573 + 7573 353 352 + 352 7577 7573 + 7573 7577 7574 + 7578 7575 1669 + 7579 7575 7578 + 7575 7579 7576 + 348 7576 7579 + 353 7576 348 + 1669 1668 7578 + 7580 7578 1668 + 7579 7578 7580 + 7580 7581 7579 + 7579 7581 348 + 349 348 7581 + 7581 7582 349 + 345 349 7582 + 1668 1673 7580 + 1678 7580 1673 + 7580 1678 7582 + 7582 7581 7580 + 7582 1678 1677 + 1677 7583 7582 + 7582 7583 345 + 323 345 7583 + 7583 317 323 + 317 7583 1677 + 1677 1682 317 + 317 1682 312 + 7584 312 1682 + 313 312 7584 + 7584 7585 313 + 308 313 7585 + 7586 308 7585 + 7585 559 7586 + 1682 1681 7584 + 7587 7584 1681 + 7585 7584 7587 + 7585 7587 560 + 560 559 7585 + 1681 7588 7587 + 7587 7588 1679 + 1679 561 7587 + 561 560 7587 + 562 561 1679 + 1679 7589 562 + 357 7577 352 + 7577 357 7590 + 7590 7574 7577 + 5110 7574 7590 + 7590 5104 5110 + 5104 7590 5105 + 5105 7590 362 + 7590 357 362 + 5061 7591 5062 + 5075 5062 7591 + 5075 5059 5062 + 5059 5075 7592 + 7592 7593 5059 + 5059 7593 3409 + 3404 3409 7593 + 7591 7594 5075 + 7593 3384 3404 + 7592 3384 7593 + 3384 7592 7595 + 7595 7596 3384 + 7597 7596 7595 + 5073 7595 7592 + 7598 7595 5073 + 5073 7599 7598 + 7600 7598 7599 + 7592 5075 5073 + 5072 7599 5073 + 7599 5072 7601 + 7601 3367 7599 + 7602 3367 7601 + 3367 7602 3361 + 3361 7602 5083 + 5083 3362 3361 + 5079 7601 5072 + 7602 7601 5079 + 5079 5083 7602 + 5087 3362 5083 + 3355 3362 5087 + 5087 7603 3355 + 3355 7603 7604 + 7604 3356 3355 + 7605 3356 7604 + 3356 7605 3349 + 3349 7605 3350 + 7603 5087 5092 + 5092 7606 7603 + 7604 7603 7606 + 7606 7607 7604 + 7608 7604 7607 + 7604 7608 7605 + 7605 7608 7609 + 7609 3350 7605 + 7610 3350 7609 + 3350 7610 1021 + 7606 5092 5091 + 5091 7611 7606 + 7606 7611 7612 + 7612 7607 7606 + 7607 7612 522 + 522 7613 7607 + 7607 7613 7608 + 7608 7613 7614 + 7614 7609 7608 + 7611 5091 7615 + 7615 166 7611 + 7611 166 523 + 523 7612 7611 + 522 7612 523 + 368 523 166 + 166 369 368 + 7616 369 166 + 1021 7610 7617 + 7613 522 521 + 521 7614 7613 + 527 7614 521 + 7614 527 7618 + 7618 7609 7614 + 7609 7618 7610 + 7610 7618 533 + 533 7619 7610 + 533 7618 527 + 5061 5060 7620 + 7620 254 5061 + 4408 4412 7621 + 7621 7622 4408 + 4408 7622 7623 + 7623 4409 4408 + 7624 4409 7623 + 4409 7624 7625 + 4409 7625 4405 + 7621 7626 7622 + 7622 7626 4096 + 4096 7623 7622 + 4096 4095 7623 + 7623 4095 7624 + 7624 4095 4100 + 4100 7627 7624 + 7625 7624 7627 + 7626 7621 4417 + 4417 7628 7626 + 7626 7628 4090 + 4096 7626 4090 + 7629 7628 4417 + 7628 7629 7630 + 7630 4090 7628 + 4091 4090 7630 + 4091 7630 23 + 23 7631 4091 + 6469 7627 4100 + 6474 7627 6469 + 7627 6474 7625 + 4405 7625 6474 + 148 7632 7633 + 7633 7632 7634 + 7634 7635 7633 + 7636 7635 7634 + 7636 7634 7637 + 7637 7638 7636 + 7639 7636 7638 + 7638 7637 7640 + 7641 7642 7643 + 7642 7641 7644 + 7644 7645 7642 + 7645 7646 7642 + 7646 7647 7642 + 7648 7642 7647 + 7647 7649 7648 + 7644 7641 2021 + 7650 7644 2021 + 7651 7644 7650 + 7644 7651 7645 + 7645 7651 7652 + 7652 7646 7645 + 7641 7653 2021 + 2022 2021 7653 + 7653 7654 2022 + 2018 2022 7654 + 7653 7641 7655 + 7656 7653 7655 + 7653 7656 7654 + 7654 7656 7657 + 7657 7658 7654 + 7654 7658 2018 + 7658 7659 2018 + 2013 2018 7659 + 7659 7660 2013 + 2013 7660 1996 + 7658 7657 7661 + 7659 7658 7662 + 7663 7659 7662 + 7660 7659 7663 + 7660 7663 7664 + 7664 1996 7660 + 1996 7664 7665 + 1996 7665 7666 + 7666 1997 1996 + 7664 7663 7667 + 7667 7668 7664 + 7668 7665 7664 + 7665 7668 7669 + 7665 7669 7670 + 7669 7671 7670 + 7672 7670 7671 + 7673 7668 7667 + 7668 7673 7674 + 7674 7669 7668 + 7674 7675 7669 + 7669 7675 7676 + 7676 7671 7669 + 7677 7671 7676 + 7671 7677 7672 + 7678 7673 7667 + 7678 7667 7679 + 7679 7680 7678 + 7678 7680 7681 + 7682 7679 7667 + 7683 7682 7667 + 1997 7666 7672 + 1997 7672 7684 + 7684 1985 1997 + 1985 7684 1976 + 1976 7684 7685 + 7685 1977 1976 + 1973 1977 7685 + 7672 7677 7684 + 7677 7686 7684 + 7686 7685 7684 + 7685 7686 7687 + 7688 7685 7687 + 7685 7688 1973 + 1973 7688 7689 + 7689 7690 1973 + 1973 7690 1967 + 1963 1967 7690 + 7688 7687 7691 + 7689 7688 7691 + 7691 7692 7689 + 7693 7689 7692 + 7693 7690 7689 + 7690 7693 1963 + 1963 7693 1938 + 7692 7691 7694 + 7695 7692 7694 + 7696 7692 7695 + 7692 7696 7693 + 7693 7696 1938 + 7694 7691 3240 + 7650 7697 7651 + 7650 7698 7697 + 7698 7650 7699 + 7650 7700 7699 + 7700 7701 7699 + 7699 7701 7702 + 7702 7703 7699 + 7700 7650 2021 + 7704 7700 2021 + 7701 7700 7704 + 7704 7705 7701 + 7705 7702 7701 + 7706 7702 7705 + 7702 7706 7707 + 7704 2021 2027 + 2027 7708 7704 + 7708 7709 7704 + 7709 7710 7704 + 7710 7711 7704 + 7711 7712 7704 + 7713 7704 7712 + 7704 7713 7705 + 7714 7708 2027 + 7708 7714 7715 + 7708 7715 7716 + 7716 7709 7708 + 7709 7716 7717 + 7709 7717 7718 + 7718 7710 7709 + 2027 7719 7714 + 7720 7714 7719 + 7715 7714 7720 + 7720 7721 7715 + 7715 7721 1523 + 1523 7716 7715 + 7717 7716 1523 + 2027 2030 7719 + 7719 2030 2029 + 2029 7722 7719 + 7719 7722 7720 + 7723 7720 7722 + 7721 7720 7723 + 7723 7724 7721 + 7725 7722 2029 + 7722 7725 7723 + 2029 7726 7725 + 7726 2029 2028 + 2028 7727 7726 + 1523 1522 7717 + 7717 1522 7728 + 7728 7718 7717 + 7729 7718 7728 + 7710 7718 7729 + 7710 7729 7730 + 7730 7711 7710 + 7711 7730 7731 + 1521 7728 1522 + 1529 7728 1521 + 7728 1529 7729 + 7729 1529 7732 + 7730 7729 7732 + 7732 7733 7730 + 7731 7730 7733 + 7733 7734 7731 + 7734 151 7731 + 1529 1528 7732 + 1534 7732 1528 + 7732 1534 7735 + 7732 7735 7736 + 7736 7733 7732 + 7734 7733 7736 + 7734 7736 7737 + 7737 151 7734 + 7738 151 7737 + 151 7738 3432 + 3432 7739 151 + 7735 1534 1533 + 1533 7740 7735 + 7735 7740 382 + 7740 7741 382 + 7741 7742 382 + 1533 7743 7740 + 7740 7743 7744 + 7744 7741 7740 + 7744 7745 7741 + 7741 7745 7746 + 7746 7742 7741 + 7743 1533 1532 + 1532 7747 7743 + 7744 7743 7747 + 7747 7748 7744 + 7745 7744 7748 + 7748 7749 7745 + 7746 7745 7749 + 7749 7750 7746 + 7751 7746 7750 + 7746 7751 7742 + 1531 7747 1532 + 7747 1531 7752 + 7752 7748 7747 + 7749 7748 7752 + 7753 3432 7738 + 374 7753 7738 + 391 374 7738 + 7738 7737 391 + 391 7737 7735 + 7737 7736 7735 + 1517 1523 7721 + 7721 7754 1517 + 7705 7713 7706 + 7755 7706 7713 + 2103 7756 7757 + 2103 7757 7758 + 7758 7759 2103 + 2103 7759 7760 + 7759 7758 7761 + 7759 7761 7694 + 7694 7762 7759 + 7763 7762 7694 + 7761 7758 7764 + 7764 7765 7761 + 7765 7694 7761 + 7765 7695 7694 + 7696 7695 7765 + 7765 1938 7696 + 7764 7758 7766 + 7766 7767 7764 + 1938 7764 7767 + 1938 7765 7764 + 7766 7768 7767 + 7768 7769 7767 + 1939 7767 7769 + 7767 1939 1938 + 1939 7769 7770 + 7770 1930 1939 + 1930 7770 1924 + 1924 7770 1925 + 1925 7770 7769 + 7769 7771 1925 + 7772 7773 7774 + 7774 7775 7772 + 7776 7772 7775 + 7776 7777 7772 + 7777 7778 7772 + 7779 7772 7778 + 7779 7778 7780 + 7775 7774 7781 + 7781 7782 7775 + 7775 7782 7783 + 7783 7776 7775 + 7777 7776 7783 + 7784 7781 7774 + 7781 7784 7785 + 7786 7781 7785 + 7782 7781 7786 + 7786 7787 7782 + 7783 7782 7787 + 7788 7784 7774 + 7789 7784 7788 + 7784 7789 7790 + 7790 7785 7784 + 7790 7791 7785 + 7792 7785 7791 + 7792 7786 7785 + 7788 7774 7793 + 7780 7794 7773 + 7794 7780 7795 + 7795 7796 7794 + 7797 7794 7796 + 7797 7798 7794 + 7798 7799 7794 + 7794 7799 7800 + 7795 7780 7801 + 7802 7795 7801 + 7795 7802 7803 + 7803 7804 7795 + 7804 7796 7795 + 7796 7804 7805 + 7805 7797 7796 + 7798 7797 7805 + 7801 7780 7778 + 7806 7801 7778 + 7801 7806 7807 + 7807 7808 7801 + 7801 7808 7802 + 7809 7802 7808 + 7803 7802 7809 + 7777 7806 7778 + 7807 7806 7777 + 7777 7810 7807 + 7811 7807 7810 + 7808 7807 7811 + 7811 7812 7808 + 7808 7812 7809 + 7783 7810 7777 + 7810 7783 7813 + 7813 7814 7810 + 7810 7814 7811 + 7814 7815 7811 + 7815 7816 7811 + 7816 7817 7811 + 7812 7811 7817 + 7813 7783 7787 + 7787 7818 7813 + 7819 7813 7818 + 7819 7814 7813 + 7814 7819 7820 + 7820 7815 7814 + 7816 7815 7820 + 7818 7787 7821 + 7822 7818 7821 + 7822 7823 7818 + 7818 7823 7819 + 7819 7823 7824 + 7820 7819 7824 + 7787 7786 7821 + 7821 7786 7825 + 7825 7826 7821 + 7821 7826 7827 + 7822 7821 7827 + 7828 7822 7827 + 7823 7822 7828 + 7828 7824 7823 + 7792 7825 7786 + 7829 7825 7792 + 7829 7826 7825 + 7829 7830 7826 + 7826 7830 7831 + 7831 7827 7826 + 7792 7832 7829 + 7833 7829 7832 + 7829 7833 7834 + 7830 7829 7834 + 7831 7830 7834 + 7835 7831 7834 + 7831 7835 7836 + 7836 7827 7831 + 7832 7792 7837 + 7838 7832 7837 + 7832 7838 7833 + 7838 7839 7833 + 7834 7833 7839 + 7839 7840 7834 + 7834 7840 7835 + 7837 7792 7791 + 7841 7837 7791 + 7842 7837 7841 + 7838 7837 7842 + 7843 7838 7842 + 7843 7839 7838 + 7840 7839 7843 + 7843 7844 7840 + 7844 7835 7840 + 7845 7835 7844 + 7835 7845 7836 + 7791 7846 7841 + 7847 7841 7846 + 7841 7847 7848 + 7841 7848 7842 + 7842 7848 7849 + 7850 7842 7849 + 7850 7843 7842 + 7844 7843 7850 + 7846 7791 7790 + 7851 7846 7790 + 7851 7852 7846 + 7846 7852 7847 + 7853 7847 7852 + 7848 7847 7853 + 7853 7849 7848 + 7851 7790 7789 + 7854 7851 7789 + 7852 7851 7854 + 7854 7855 7852 + 7852 7855 7856 + 7856 7853 7852 + 7857 7853 7856 + 7853 7857 7849 + 7789 7858 7854 + 7859 7854 7858 + 7859 7855 7854 + 7855 7859 7860 + 7860 7861 7855 + 7855 7861 7856 + 7789 7862 7858 + 7862 7798 7858 + 7805 7858 7798 + 7858 7805 7859 + 7860 7859 7805 + 7863 7860 7805 + 7864 7860 7863 + 7860 7864 7861 + 7788 7862 7789 + 7862 7788 7800 + 7800 7799 7862 + 7862 7799 7798 + 7805 7804 7863 + 7804 7865 7863 + 7865 7866 7863 + 7867 7863 7866 + 7863 7867 7868 + 7863 7868 7864 + 7869 7865 7804 + 7865 7869 7870 + 7870 7871 7865 + 7865 7871 7872 + 7872 7866 7865 + 7873 7866 7872 + 7866 7873 7867 + 7804 7803 7869 + 7874 7869 7803 + 7870 7869 7874 + 7874 7875 7870 + 7870 7875 7876 + 7876 7877 7870 + 7871 7870 7877 + 7877 7878 7871 + 7872 7871 7878 + 7803 7879 7874 + 7880 7874 7879 + 7874 7880 7881 + 7881 7875 7874 + 7875 7881 7882 + 7882 7876 7875 + 7809 7879 7803 + 7883 7879 7809 + 7879 7883 7880 + 7884 7880 7883 + 7881 7880 7884 + 7884 7885 7881 + 7881 7885 7886 + 7886 7882 7881 + 7887 7882 7886 + 7876 7882 7887 + 7809 7888 7883 + 7883 7888 7889 + 7889 7890 7883 + 7883 7890 7884 + 7891 7884 7890 + 7884 7891 7892 + 7892 7885 7884 + 7888 7809 7893 + 7893 7894 7888 + 7888 7894 7895 + 7895 7889 7888 + 7896 7889 7895 + 7890 7889 7896 + 7896 7897 7890 + 7890 7897 7891 + 7812 7893 7809 + 7898 7893 7812 + 7898 7894 7893 + 7894 7898 7899 + 7899 7895 7894 + 7895 7899 7900 + 7900 7901 7895 + 7895 7901 7896 + 7812 7817 7898 + 7898 7817 7816 + 7898 7816 7899 + 7900 7899 7816 + 7816 7902 7900 + 7900 7902 7903 + 7903 7904 7900 + 7901 7900 7904 + 7904 7905 7901 + 7896 7901 7905 + 7905 7906 7896 + 7897 7896 7906 + 7820 7902 7816 + 7902 7820 7907 + 7907 7903 7902 + 7908 7903 7907 + 7903 7908 7909 + 7909 7904 7903 + 7905 7904 7909 + 7909 7910 7905 + 7905 7910 7911 + 7911 7906 7905 + 7824 7907 7820 + 7908 7907 7824 + 7824 7912 7908 + 7909 7908 7912 + 7912 7913 7909 + 7913 7914 7909 + 7914 7915 7909 + 7910 7909 7915 + 7915 7916 7910 + 7911 7910 7916 + 7912 7824 7828 + 7912 7828 7917 + 7917 7913 7912 + 7918 7913 7917 + 7913 7918 7919 + 7919 7914 7913 + 7920 7914 7919 + 7914 7920 7921 + 7921 7915 7914 + 7916 7915 7921 + 7827 7917 7828 + 7918 7917 7827 + 7827 7836 7918 + 7919 7918 7836 + 7836 7922 7919 + 7920 7919 7922 + 7922 7923 7920 + 7921 7920 7923 + 7923 7924 7921 + 7925 7921 7924 + 7921 7925 7916 + 7926 7922 7836 + 7926 7923 7922 + 7923 7926 7927 + 7927 7924 7923 + 7924 7927 7928 + 7928 7929 7924 + 7924 7929 7925 + 7930 7925 7929 + 7916 7925 7930 + 7836 7845 7926 + 7926 7845 7931 + 7931 7927 7926 + 7928 7927 7931 + 7931 7932 7928 + 7933 7928 7932 + 7929 7928 7933 + 7933 7934 7929 + 7929 7934 7930 + 7845 7935 7931 + 7935 7936 7931 + 7937 7931 7936 + 7931 7937 7938 + 7938 7932 7931 + 7932 7938 7933 + 7938 7939 7933 + 7934 7933 7939 + 7844 7935 7845 + 7850 7935 7844 + 7935 7850 7940 + 7940 7936 7935 + 7940 7941 7936 + 7936 7941 7937 + 7937 7941 7857 + 7857 7942 7937 + 7942 7943 7937 + 7938 7937 7943 + 7940 7850 7849 + 7941 7940 7849 + 7849 7857 7941 + 7856 7942 7857 + 7856 7944 7942 + 7942 7944 7945 + 7945 7943 7942 + 7946 7943 7945 + 7943 7946 7938 + 7938 7946 7947 + 7947 7948 7938 + 7948 7939 7938 + 7934 7939 7948 + 7944 7856 7861 + 7861 7864 7944 + 7945 7944 7864 + 7864 7868 7945 + 7949 7945 7868 + 7945 7949 7946 + 7946 7949 7950 + 7950 7947 7946 + 7947 7950 7951 + 7951 7952 7947 + 7947 7952 7953 + 7953 7948 7947 + 7868 7867 7949 + 7949 7867 7873 + 7873 7950 7949 + 7950 7873 7954 + 7951 7950 7954 + 7951 7954 7955 + 7955 7956 7951 + 7952 7951 7956 + 7956 7957 7952 + 7953 7952 7957 + 7872 7954 7873 + 7954 7872 7958 + 7958 7955 7954 + 7955 7958 7959 + 7959 7960 7955 + 7955 7960 7961 + 7961 7956 7955 + 7957 7956 7961 + 7878 7958 7872 + 7959 7958 7878 + 7878 7962 7959 + 7959 7962 7963 + 7963 7964 7959 + 7960 7959 7964 + 7964 7965 7960 + 7961 7960 7965 + 7966 7962 7878 + 7962 7966 7967 + 7967 7963 7962 + 7963 7967 7968 + 7968 7969 7963 + 7963 7969 7970 + 7970 7964 7963 + 7965 7964 7970 + 7878 7877 7966 + 7966 7877 7876 + 7876 7971 7966 + 7966 7971 7972 + 7972 7967 7966 + 7968 7967 7972 + 7972 7973 7968 + 7968 7973 7974 + 7974 7975 7968 + 7969 7968 7975 + 7887 7971 7876 + 7971 7887 7976 + 7976 7972 7971 + 7972 7976 7977 + 7977 7973 7972 + 7973 7977 7978 + 7978 7974 7973 + 7979 7976 7887 + 7977 7976 7979 + 7979 7980 7977 + 7977 7980 7981 + 7981 7978 7977 + 7982 7978 7981 + 7974 7978 7982 + 7887 7983 7979 + 7984 7979 7983 + 7979 7984 7985 + 7985 7980 7979 + 7980 7985 7986 + 7986 7981 7980 + 7886 7983 7887 + 7987 7983 7886 + 7983 7987 7984 + 7988 7984 7987 + 7985 7984 7988 + 7988 7989 7985 + 7985 7989 7990 + 7990 7986 7985 + 7991 7986 7990 + 7981 7986 7991 + 7886 7992 7987 + 7987 7992 7993 + 7993 7994 7987 + 7987 7994 7988 + 7995 7988 7994 + 7988 7995 7996 + 7996 7989 7988 + 7992 7886 7885 + 7885 7892 7992 + 7993 7992 7892 + 7892 7997 7993 + 7998 7993 7997 + 7993 7998 7999 + 7999 7994 7993 + 7994 7999 7995 + 8000 7995 7999 + 7996 7995 8000 + 8001 7997 7892 + 8002 7997 8001 + 7997 8002 7998 + 8003 7998 8002 + 7999 7998 8003 + 8003 8004 7999 + 7999 8004 8000 + 7892 7891 8001 + 8001 7891 7897 + 7897 8005 8001 + 8006 8001 8005 + 8001 8006 8002 + 8002 8006 8007 + 8007 8008 8002 + 8002 8008 8003 + 7906 8005 7897 + 8005 7906 7911 + 7911 8009 8005 + 8005 8009 8006 + 8007 8006 8009 + 8009 8010 8007 + 8011 8007 8010 + 8007 8011 8012 + 8012 8008 8007 + 8008 8012 8013 + 8013 8003 8008 + 8009 7911 8014 + 8014 8010 8009 + 7930 8010 8014 + 8010 7930 8011 + 8015 8011 7930 + 8012 8011 8015 + 8015 8016 8012 + 8012 8016 8017 + 8017 8013 8012 + 7916 8014 7911 + 7930 8014 7916 + 7934 8015 7930 + 7948 8015 7934 + 8015 7948 7953 + 7953 8016 8015 + 8016 7953 8018 + 8018 8017 8016 + 8017 8018 8019 + 8019 8020 8017 + 8017 8020 8021 + 8021 8013 8017 + 8003 8013 8021 + 8021 8004 8003 + 7957 8018 7953 + 8019 8018 7957 + 7957 8022 8019 + 8019 8022 8023 + 8023 8024 8019 + 8020 8019 8024 + 8024 8025 8020 + 8021 8020 8025 + 8025 8026 8021 + 8004 8021 8026 + 8026 8000 8004 + 7961 8022 7957 + 8022 7961 8027 + 8027 8023 8022 + 8023 8027 8028 + 8028 8029 8023 + 8023 8029 8030 + 8030 8024 8023 + 8025 8024 8030 + 7965 8027 7961 + 8028 8027 7965 + 7965 8031 8028 + 8028 8031 8032 + 8032 8033 8028 + 8029 8028 8033 + 8033 8034 8029 + 8030 8029 8034 + 7970 8031 7965 + 8031 7970 8035 + 8035 8032 8031 + 8032 8035 8036 + 8036 8037 8032 + 8032 8037 8038 + 8038 8033 8032 + 8034 8033 8038 + 8039 8035 7970 + 8036 8035 8039 + 8039 8040 8036 + 8041 8036 8040 + 8037 8036 8041 + 8041 8042 8037 + 8042 8038 8037 + 8043 8038 8042 + 8038 8043 8034 + 7970 7969 8039 + 7975 8039 7969 + 8039 7975 8044 + 8044 8040 8039 + 8040 8044 8045 + 8045 8041 8040 + 8042 8041 8045 + 8045 8046 8042 + 8046 8047 8042 + 8042 8047 8043 + 8048 8043 8047 + 8034 8043 8048 + 8044 7975 7974 + 7974 8049 8044 + 8045 8044 8049 + 8045 8049 7982 + 8046 8045 7982 + 8046 7982 8050 + 8051 8046 8050 + 8047 8046 8051 + 8051 8052 8047 + 8047 8052 8048 + 7982 8049 7974 + 7981 8050 7982 + 7991 8050 7981 + 8051 8050 7991 + 8053 8051 7991 + 8051 8053 8054 + 8054 8052 8051 + 8052 8054 8055 + 8055 8048 8052 + 8048 8055 8056 + 8056 8057 8048 + 8048 8057 8034 + 8053 7991 8058 + 8053 8058 8059 + 8060 8053 8059 + 8053 8060 8054 + 8054 8060 8061 + 8054 8061 8055 + 8056 8055 8061 + 7990 8058 7991 + 8059 8058 7990 + 7990 8062 8059 + 8059 8062 8063 + 8063 8064 8059 + 8060 8059 8064 + 8060 8064 8061 + 8061 8064 8063 + 8063 8065 8061 + 8061 8065 8056 + 8062 7990 7989 + 7989 7996 8062 + 8063 8062 7996 + 7996 8066 8063 + 8065 8063 8066 + 8066 8067 8065 + 8056 8065 8067 + 8067 8068 8056 + 8057 8056 8068 + 8068 8030 8057 + 8034 8057 8030 + 8000 8066 7996 + 8067 8066 8000 + 8000 8026 8067 + 8067 8026 8025 + 8025 8068 8067 + 8030 8068 8025 + 8069 8070 8071 + 8072 8070 8069 + 8070 8072 8073 + 8074 8070 8073 + 8070 8074 8075 + 8069 8076 8072 + 8077 8072 8076 + 8072 8077 8078 + 8073 8072 8078 + 8078 8079 8073 + 8079 8074 8073 + 8069 8080 8076 + 8076 8080 8081 + 8081 8082 8076 + 8082 8083 8076 + 8083 8077 8076 + 8080 8069 8084 + 8084 8085 8080 + 8080 8085 8086 + 8086 8081 8080 + 8081 8086 8087 + 8088 8081 8087 + 8082 8081 8088 + 8084 8069 8075 + 8084 8075 8089 + 8089 8090 8084 + 8091 8084 8090 + 8084 8091 8085 + 8085 8091 8092 + 8092 8086 8085 + 8086 8092 8087 + 8093 8089 8075 + 8094 8089 8093 + 8089 8094 8095 + 8095 8090 8089 + 8096 8090 8095 + 8090 8096 8091 + 8091 8096 8097 + 8092 8091 8097 + 8075 8098 8093 + 8093 8098 8099 + 8099 8100 8093 + 8100 8101 8093 + 8102 8093 8101 + 8093 8102 8094 + 8098 8075 8103 + 8098 8103 8104 + 8104 8099 8098 + 8099 8104 8105 + 8099 8105 8106 + 8106 8100 8099 + 8103 8075 8074 + 8074 8107 8103 + 8103 8107 8108 + 8104 8103 8108 + 8108 8109 8104 + 8105 8104 8109 + 8109 8110 8105 + 8106 8105 8110 + 8107 8074 8079 + 8079 8111 8107 + 8107 8111 8112 + 8112 8108 8107 + 8108 8112 8113 + 8113 8114 8108 + 8108 8114 8115 + 8115 8109 8108 + 8110 8109 8115 + 8111 8079 8116 + 8111 8116 8112 + 8116 8117 8112 + 8113 8112 8117 + 8117 8118 8113 + 8113 8118 8119 + 8113 8119 8120 + 8114 8113 8120 + 8115 8114 8120 + 8079 8078 8116 + 8116 8078 8077 + 8117 8116 8077 + 8083 8117 8077 + 8118 8117 8083 + 8083 8121 8118 + 8118 8121 8122 + 8122 8123 8118 + 8118 8123 8119 + 8124 8119 8123 + 8119 8124 8125 + 8120 8119 8125 + 8121 8083 8082 + 8082 8126 8121 + 8122 8121 8126 + 8127 8122 8126 + 8128 8122 8127 + 8122 8128 8129 + 8129 8123 8122 + 8123 8129 8124 + 8088 8126 8082 + 8126 8088 8130 + 8130 8127 8126 + 8131 8127 8130 + 8131 8132 8127 + 8127 8132 8128 + 8133 8128 8132 + 8133 8134 8128 + 8134 8129 8128 + 8130 8088 8087 + 8135 8130 8087 + 8130 8135 8136 + 8131 8130 8136 + 8131 8136 8137 + 8137 8138 8131 + 8132 8131 8138 + 8138 8139 8132 + 8139 8133 8132 + 8087 8140 8135 + 8141 8135 8140 + 8135 8141 8136 + 8136 8141 8142 + 8142 8143 8136 + 8136 8143 8137 + 8144 8140 8087 + 8140 8144 8145 + 8140 8145 8141 + 8142 8141 8145 + 8146 8142 8145 + 8147 8142 8146 + 8143 8142 8147 + 8137 8143 8147 + 8087 8092 8144 + 8097 8144 8092 + 8145 8144 8097 + 8097 8148 8145 + 8145 8148 8146 + 8149 8146 8148 + 8146 8149 8150 + 8146 8150 8147 + 8147 8150 8151 + 8151 8152 8147 + 8152 8137 8147 + 8153 8148 8097 + 8148 8153 8149 + 8149 8153 8154 + 8155 8149 8154 + 8150 8149 8155 + 8155 8156 8150 + 8150 8156 8151 + 8097 8157 8153 + 8153 8157 8158 + 8158 8154 8153 + 8157 8097 8096 + 8096 8159 8157 + 8157 8159 8160 + 8160 8158 8157 + 8161 8158 8160 + 8154 8158 8161 + 8095 8159 8096 + 8159 8095 8162 + 8162 8160 8159 + 8160 8162 8163 + 8163 8164 8160 + 8160 8164 8161 + 8165 8162 8095 + 8163 8162 8165 + 8165 8166 8163 + 8163 8166 8167 + 8167 8168 8163 + 8164 8163 8168 + 8168 8169 8164 + 8161 8164 8169 + 8095 8094 8165 + 8170 8165 8094 + 8165 8170 8171 + 8171 8166 8165 + 8166 8171 8172 + 8172 8167 8166 + 8094 8102 8170 + 8173 8170 8102 + 8171 8170 8173 + 8173 8174 8171 + 8171 8174 8175 + 8175 8172 8171 + 8176 8172 8175 + 8167 8172 8176 + 8102 8177 8173 + 8178 8173 8177 + 8173 8178 8179 + 8179 8174 8173 + 8174 8179 8180 + 8180 8175 8174 + 8101 8177 8102 + 8177 8101 8181 + 8181 8182 8177 + 8177 8182 8178 + 8183 8178 8182 + 8179 8178 8183 + 8183 8184 8179 + 8179 8184 8185 + 8185 8180 8179 + 8181 8101 8100 + 8100 8186 8181 + 8181 8186 8187 + 8187 8188 8181 + 8182 8181 8188 + 8188 8189 8182 + 8182 8189 8183 + 8106 8186 8100 + 8186 8106 8190 + 8190 8187 8186 + 8187 8190 8191 + 8191 8192 8187 + 8187 8192 8193 + 8193 8188 8187 + 8189 8188 8193 + 8110 8190 8106 + 8191 8190 8110 + 8110 8194 8191 + 8191 8194 8195 + 8195 8196 8191 + 8192 8191 8196 + 8196 8197 8192 + 8193 8192 8197 + 8115 8194 8110 + 8194 8115 8198 + 8198 8195 8194 + 8198 8199 8195 + 8195 8199 8200 + 8200 8196 8195 + 8197 8196 8200 + 8201 8198 8115 + 8201 8202 8198 + 8202 8199 8198 + 8199 8202 8203 + 8200 8199 8203 + 8120 8201 8115 + 8201 8120 8125 + 8204 8201 8125 + 8202 8201 8204 + 8202 8204 8205 + 8205 8203 8202 + 8205 8206 8203 + 8203 8206 8207 + 8207 8208 8203 + 8203 8208 8200 + 8204 8125 8209 + 8204 8209 8205 + 8209 8210 8205 + 8206 8205 8210 + 8210 8211 8206 + 8206 8211 8207 + 8211 8212 8207 + 8213 8207 8212 + 8207 8213 8208 + 8125 8124 8209 + 8124 8214 8209 + 8215 8209 8214 + 8209 8215 8216 + 8216 8210 8209 + 8216 8211 8210 + 8211 8216 8217 + 8217 8212 8211 + 8124 8129 8214 + 8129 8134 8214 + 8215 8214 8134 + 8134 8218 8215 + 8216 8215 8218 + 8218 8217 8216 + 8218 8219 8217 + 8220 8217 8219 + 8212 8217 8220 + 8220 8221 8212 + 8212 8221 8213 + 8218 8134 8133 + 8218 8133 8139 + 8139 8219 8218 + 8222 8219 8139 + 8219 8222 8220 + 8223 8220 8222 + 8221 8220 8223 + 8223 8224 8221 + 8221 8224 8225 + 8213 8221 8225 + 8226 8213 8225 + 8208 8213 8226 + 8139 8138 8222 + 8222 8138 8227 + 8222 8227 8223 + 8151 8223 8227 + 8224 8223 8151 + 8151 8228 8224 + 8224 8228 8229 + 8229 8225 8224 + 8138 8137 8227 + 8137 8152 8227 + 8227 8152 8151 + 8228 8151 8156 + 8156 8230 8228 + 8228 8230 8231 + 8231 8229 8228 + 8232 8229 8231 + 8225 8229 8232 + 8156 8155 8230 + 8230 8155 8233 + 8233 8231 8230 + 8231 8233 8234 + 8234 8235 8231 + 8231 8235 8232 + 8154 8233 8155 + 8234 8233 8154 + 8154 8236 8234 + 8234 8236 8237 + 8237 8238 8234 + 8235 8234 8238 + 8238 8239 8235 + 8232 8235 8239 + 8161 8236 8154 + 8236 8161 8240 + 8240 8237 8236 + 8237 8240 8241 + 8241 8242 8237 + 8237 8242 8243 + 8243 8238 8237 + 8239 8238 8243 + 8169 8240 8161 + 8241 8240 8169 + 8169 8244 8241 + 8241 8244 8245 + 8245 8246 8241 + 8242 8241 8246 + 8246 8247 8242 + 8243 8242 8247 + 8248 8244 8169 + 8244 8248 8249 + 8249 8245 8244 + 8245 8249 8250 + 8250 8251 8245 + 8245 8251 8252 + 8252 8246 8245 + 8247 8246 8252 + 8169 8168 8248 + 8248 8168 8167 + 8167 8253 8248 + 8248 8253 8254 + 8254 8249 8248 + 8250 8249 8254 + 8176 8253 8167 + 8253 8176 8255 + 8255 8254 8253 + 8254 8255 8256 + 8256 8257 8254 + 8254 8257 8250 + 8258 8255 8176 + 8256 8255 8258 + 8258 8259 8256 + 8256 8259 8260 + 8260 8261 8256 + 8257 8256 8261 + 8261 8262 8257 + 8262 8250 8257 + 8176 8263 8258 + 8264 8258 8263 + 8258 8264 8265 + 8265 8259 8258 + 8259 8265 8266 + 8266 8260 8259 + 8175 8263 8176 + 8267 8263 8175 + 8263 8267 8264 + 8268 8264 8267 + 8265 8264 8268 + 8268 8269 8265 + 8265 8269 8270 + 8270 8266 8265 + 8175 8180 8267 + 8267 8180 8185 + 8185 8271 8267 + 8267 8271 8268 + 8272 8268 8271 + 8268 8272 8273 + 8273 8269 8268 + 8269 8273 8274 + 8274 8270 8269 + 8275 8271 8185 + 8271 8275 8272 + 8276 8272 8275 + 8273 8272 8276 + 8276 8277 8273 + 8273 8277 8278 + 8278 8274 8273 + 8185 8279 8275 + 8275 8279 8280 + 8280 8281 8275 + 8275 8281 8276 + 8282 8276 8281 + 8276 8282 8283 + 8283 8277 8276 + 8279 8185 8184 + 8184 8284 8279 + 8280 8279 8284 + 8284 8285 8280 + 8286 8280 8285 + 8280 8286 8287 + 8287 8281 8280 + 8281 8287 8282 + 8288 8282 8287 + 8283 8282 8288 + 8284 8184 8183 + 8183 8289 8284 + 8284 8289 8290 + 8290 8285 8284 + 8291 8285 8290 + 8285 8291 8286 + 8292 8286 8291 + 8287 8286 8292 + 8292 8293 8287 + 8287 8293 8288 + 8289 8183 8189 + 8189 8294 8289 + 8290 8289 8294 + 8294 8295 8290 + 8296 8290 8295 + 8290 8296 8291 + 8291 8296 8297 + 8297 8298 8291 + 8291 8298 8292 + 8193 8294 8189 + 8294 8193 8299 + 8299 8295 8294 + 8299 8300 8295 + 8295 8300 8296 + 8296 8300 8301 + 8301 8297 8296 + 8302 8297 8301 + 8297 8302 8303 + 8303 8298 8297 + 8304 8299 8193 + 8300 8299 8304 + 8304 8305 8300 + 8300 8305 8301 + 8306 8301 8305 + 8307 8301 8306 + 8301 8307 8302 + 8197 8304 8193 + 8308 8304 8197 + 8308 8305 8304 + 8305 8308 8306 + 8309 8306 8308 + 8307 8306 8309 + 8309 8226 8307 + 8302 8307 8226 + 8225 8302 8226 + 8303 8302 8225 + 8197 8310 8308 + 8308 8310 8309 + 8311 8309 8310 + 8226 8309 8311 + 8226 8311 8208 + 8208 8311 8200 + 8310 8200 8311 + 8200 8310 8197 + 8312 8313 8314 + 8315 8314 8313 + 8315 8316 8314 + 8314 8316 8317 + 8317 8318 8314 + 8314 8318 8319 + 8319 8320 8314 + 8320 42 8314 + 8313 8321 8315 + 8315 8321 8322 + 8322 8323 8315 + 8323 8324 8315 + 8316 8315 8324 + 8325 8321 8313 + 8321 8325 8326 + 8326 8322 8321 + 8322 8326 8327 + 8327 8328 8322 + 8322 8328 8329 + 8329 8323 8322 + 8325 8313 8330 + 8330 8331 8325 + 8325 8331 8332 + 8332 8326 8325 + 8327 8326 8332 + 8332 8333 8327 + 8333 8334 8327 + 8334 8335 8327 + 8335 8328 8327 + 8328 8335 8329 + 8330 8336 8331 + 8331 8336 8332 + 8336 8337 8332 + 8333 8332 8337 + 8333 8337 8338 + 8338 8339 8333 + 8333 8339 8334 + 8338 8337 8336 + 8340 8338 8336 + 8341 8338 8340 + 8339 8338 8341 + 8342 8339 8341 + 8339 8342 8334 + 8342 8343 8334 + 8334 8343 8344 + 8344 8335 8334 + 8340 8336 8345 + 8346 8340 8345 + 8347 8340 8346 + 8340 8347 8341 + 8341 8347 8348 + 8348 8349 8341 + 8342 8341 8349 + 42 8345 8336 + 8350 8345 42 + 8345 8350 8346 + 8351 8346 8350 + 8351 8348 8346 + 8348 8347 8346 + 8336 8352 42 + 8353 8354 8355 + 8356 8354 8353 + 8357 8354 8356 + 8357 8358 8354 + 8354 8358 8359 + 8359 46 8354 + 8353 8360 8356 + 8356 8360 8361 + 8361 8362 8356 + 8357 8356 8362 + 8360 8353 8363 + 8363 8364 8360 + 8360 8364 8365 + 8365 8361 8360 + 8363 8353 8366 + 8366 8367 8363 + 8363 8367 8368 + 8369 8363 8368 + 8364 8363 8369 + 8369 8370 8364 + 8365 8364 8370 + 8366 8353 8371 + 8371 8372 8366 + 8373 8366 8372 + 8373 8367 8366 + 8367 8373 8374 + 8374 8368 8367 + 8375 8372 8371 + 8375 8376 8372 + 8372 8376 8373 + 8374 8373 8376 + 8371 8377 8375 + 8375 8377 8378 + 8376 8375 8378 + 8378 8379 8376 + 8376 8379 8374 + 8380 8377 8371 + 8377 8380 8381 + 8381 8382 8377 + 8377 8382 8378 + 8382 8383 8378 + 8384 8378 8383 + 8384 8379 8378 + 8380 8371 8385 + 8385 8386 8380 + 8380 8386 8387 + 8380 8387 8381 + 8388 8381 8387 + 8381 8388 8389 + 8389 8382 8381 + 8383 8382 8389 + 8390 8385 8371 + 8385 8390 8391 + 8392 8385 8391 + 8392 8386 8385 + 8386 8392 8393 + 8393 8387 8386 + 8387 8393 8394 + 8394 8395 8387 + 8387 8395 8388 + 8396 8391 8390 + 8391 8396 8397 + 8397 8398 8391 + 8392 8391 8398 + 8392 8398 8393 + 8398 8399 8393 + 8393 8399 8400 + 8394 8393 8400 + 8401 8396 8390 + 8396 8401 8402 + 8402 8397 8396 + 8402 8403 8397 + 8403 8404 8397 + 8398 8397 8404 + 8398 8404 8405 + 8405 8399 8398 + 46 8401 8390 + 46 8359 8401 + 8401 8359 8406 + 8406 8402 8401 + 8403 8402 8406 + 46 8390 8407 + 8408 8409 8410 + 8411 8408 8410 + 8408 8411 8412 + 8412 8413 8408 + 8408 8413 8414 + 8414 8415 8408 + 8408 8415 8416 + 8417 8411 8410 + 8412 8411 8417 + 8417 8418 8412 + 8419 8412 8418 + 8413 8412 8419 + 8420 8417 8410 + 8421 8417 8420 + 8418 8417 8421 + 8418 8421 8422 + 8422 8423 8418 + 8418 8423 8419 + 8410 8424 8420 + 8425 8420 8424 + 8425 8426 8420 + 8420 8426 8421 + 8422 8421 8426 + 8427 8424 8410 + 8424 8427 8428 + 8424 8428 8425 + 8425 8428 8429 + 8429 8430 8425 + 8426 8425 8430 + 8430 8431 8426 + 8426 8431 8422 + 8410 8432 8427 + 8427 8432 8433 + 8433 8434 8427 + 8428 8427 8434 + 8434 8435 8428 + 8428 8435 8429 + 8432 8410 8436 + 8432 8437 8415 + 8415 8438 8432 + 8432 8438 8433 + 8415 8414 8438 + 8438 8414 8439 + 8439 8440 8438 + 8438 8440 8433 + 8439 8414 8413 + 8441 8439 8413 + 8442 8439 8441 + 8442 8440 8439 + 8440 8442 8443 + 8443 8433 8440 + 8413 8444 8441 + 8444 8445 8441 + 8446 8441 8445 + 8446 8447 8441 + 8441 8447 8442 + 8442 8447 8448 + 8448 8443 8442 + 8419 8444 8413 + 8449 8444 8419 + 8444 8449 8450 + 8450 8445 8444 + 8451 8445 8450 + 8445 8451 8446 + 8446 8451 8452 + 8452 8453 8446 + 8447 8446 8453 + 8449 8419 8454 + 8454 8455 8449 + 8450 8449 8455 + 8455 8456 8450 + 8457 8450 8456 + 8450 8457 8451 + 8451 8457 8458 + 8458 8452 8451 + 8423 8454 8419 + 8459 8454 8423 + 8455 8454 8459 + 8459 8460 8455 + 8455 8460 8461 + 8461 8456 8455 + 8462 8456 8461 + 8456 8462 8457 + 8457 8462 8463 + 8463 8458 8457 + 8423 8464 8459 + 8465 8459 8464 + 8460 8459 8465 + 8465 8466 8460 + 8460 8466 8467 + 8467 8461 8460 + 8468 8461 8467 + 8461 8468 8462 + 8464 8423 8422 + 8422 8469 8464 + 8464 8469 8470 + 8470 8471 8464 + 8464 8471 8465 + 8471 8472 8465 + 8473 8465 8472 + 8466 8465 8473 + 8469 8422 8474 + 8469 8474 8475 + 8475 8470 8469 + 8470 8475 8476 + 8477 8470 8476 + 8471 8470 8477 + 8471 8477 8478 + 8478 8472 8471 + 8422 8431 8474 + 8479 8474 8431 + 8474 8479 8480 + 8480 8475 8474 + 8480 8476 8475 + 8476 8480 8481 + 8481 8482 8476 + 8477 8476 8482 + 8478 8477 8482 + 8431 8430 8479 + 8479 8430 8429 + 8429 8483 8479 + 8479 8483 8484 + 8484 8481 8479 + 8481 8480 8479 + 8485 8483 8429 + 8483 8485 8486 + 8486 8484 8483 + 8484 8486 8487 + 8487 8488 8484 + 8484 8488 8489 + 8489 8481 8484 + 8481 8489 8482 + 8429 8490 8485 + 8485 8490 8491 + 8491 8492 8485 + 8485 8492 8493 + 8493 8486 8485 + 8487 8486 8493 + 8490 8429 8435 + 8435 8494 8490 + 8491 8490 8494 + 8494 8495 8491 + 8496 8491 8495 + 8491 8496 8497 + 8497 8492 8491 + 8492 8497 8498 + 8498 8493 8492 + 8494 8435 8434 + 8434 8499 8494 + 8494 8499 8500 + 8500 8495 8494 + 8495 8500 8501 + 8501 8502 8495 + 8495 8502 8496 + 8499 8434 8433 + 8433 8503 8499 + 8500 8499 8503 + 8501 8500 8503 + 8503 8504 8501 + 8501 8504 8505 + 8505 8506 8501 + 8502 8501 8506 + 8506 8507 8502 + 8496 8502 8507 + 8504 8503 8433 + 8433 8443 8504 + 8504 8443 8448 + 8448 8505 8504 + 8505 8448 8508 + 8508 8509 8505 + 8505 8509 8510 + 8510 8506 8505 + 8507 8506 8510 + 8508 8448 8511 + 8511 8512 8508 + 8508 8512 8513 + 8513 8514 8508 + 8509 8508 8514 + 8514 8515 8509 + 8510 8509 8515 + 8447 8511 8448 + 8453 8511 8447 + 8511 8453 8516 + 8516 8512 8511 + 8512 8516 8517 + 8517 8513 8512 + 8513 8517 8518 + 8518 8519 8513 + 8513 8519 8520 + 8520 8514 8513 + 8515 8514 8520 + 8516 8453 8452 + 8452 8521 8516 + 8516 8521 8522 + 8522 8517 8516 + 8518 8517 8522 + 8522 8523 8518 + 8518 8523 8524 + 8524 8525 8518 + 8519 8518 8525 + 8526 8521 8452 + 8521 8526 8527 + 8527 8522 8521 + 8522 8527 8528 + 8528 8523 8522 + 8523 8528 8529 + 8529 8524 8523 + 8452 8458 8526 + 8526 8458 8463 + 8463 8530 8526 + 8526 8530 8531 + 8531 8527 8526 + 8528 8527 8531 + 8531 8532 8528 + 8528 8532 8533 + 8533 8529 8528 + 8534 8529 8533 + 8524 8529 8534 + 8535 8530 8463 + 8530 8535 8536 + 8536 8531 8530 + 8531 8536 8537 + 8537 8532 8531 + 8532 8537 8538 + 8538 8533 8532 + 8463 8539 8535 + 8535 8539 8540 + 8540 8541 8535 + 8535 8541 8542 + 8542 8536 8535 + 8537 8536 8542 + 8539 8463 8462 + 8462 8468 8539 + 8539 8468 8543 + 8543 8540 8539 + 8544 8540 8543 + 8540 8544 8545 + 8545 8541 8540 + 8541 8545 8546 + 8546 8542 8541 + 8468 8547 8543 + 8548 8543 8547 + 8543 8548 8549 + 8543 8549 8544 + 8544 8549 8550 + 8550 8551 8544 + 8545 8544 8551 + 8467 8547 8468 + 8547 8467 8552 + 8547 8552 8548 + 8548 8552 8473 + 8553 8548 8473 + 8549 8548 8553 + 8553 8554 8549 + 8549 8554 8550 + 8552 8467 8466 + 8466 8473 8552 + 8555 8556 8557 + 8558 8557 8556 + 8557 8558 8559 + 8559 8560 8557 + 8557 8560 8561 + 8561 8562 8557 + 8557 8562 8563 + 8556 8564 8558 + 8565 8566 8567 + 8566 8568 8567 + 8568 8569 8567 + 8567 8569 8559 + 8559 8558 8567 + 8570 8567 8558 + 8568 8566 8571 + 8572 8568 8571 + 8569 8568 8572 + 8572 8573 8569 + 8569 8573 8574 + 8574 8575 8569 + 8575 8559 8569 + 8560 8559 8575 + 8563 8571 8566 + 8576 8571 8563 + 8571 8576 8577 + 8577 8578 8571 + 8571 8578 8572 + 8566 8579 8563 + 8580 8579 8566 + 8581 8582 8583 + 8584 8582 8581 + 8584 8585 8582 + 8582 8585 8586 + 8586 8587 8582 + 8582 8587 8588 + 8581 8589 8584 + 8584 8589 8590 + 8591 8584 8590 + 8585 8584 8591 + 8591 8592 8585 + 8585 8592 8593 + 8593 8586 8585 + 8581 8594 8589 + 8589 8594 8595 + 8595 8590 8589 + 8594 8581 8596 + 8596 8597 8594 + 8594 8597 8598 + 8598 8595 8594 + 8599 8595 8598 + 8590 8595 8599 + 8597 8596 8600 + 8597 8600 8601 + 8601 8602 8597 + 8597 8602 8598 + 8602 8601 8603 + 8602 8603 8604 + 8604 8605 8602 + 8602 8605 8598 + 8606 8604 8603 + 8607 8604 8606 + 8607 8605 8604 + 8605 8607 8608 + 8608 8609 8605 + 8605 8609 8598 + 8606 8610 8607 + 8607 8610 8611 + 8608 8607 8611 + 8612 8608 8611 + 8613 8608 8612 + 8608 8613 8609 + 8609 8613 8614 + 8614 8598 8609 + 8610 8606 8615 + 8610 8615 8616 + 8616 8611 8610 + 8615 8606 8617 + 8617 8618 8615 + 8615 8618 8619 + 8619 8616 8615 + 8620 8616 8619 + 8616 8620 8621 + 8621 8611 8616 + 8622 8617 8606 + 8623 8617 8622 + 8617 8623 8624 + 8624 8618 8617 + 8618 8624 8625 + 8625 8626 8618 + 8626 8625 8627 + 8628 8622 8606 + 8629 8622 8628 + 8622 8629 8630 + 8622 8630 8623 + 8631 8623 8630 + 8624 8623 8631 + 8631 8632 8624 + 8625 8624 8632 + 8628 8633 8629 + 8629 8633 8634 + 8630 8629 8634 + 8634 8635 8630 + 8630 8635 8636 + 8636 8637 8630 + 8637 8631 8630 + 8638 8631 8637 + 8632 8631 8638 + 8633 8639 8634 + 8640 8634 8639 + 8639 58 8640 + 8619 8641 8620 + 8641 8642 8620 + 8642 8643 8620 + 8643 8644 8620 + 8621 8620 8644 + 8644 8645 8621 + 8621 8645 8646 + 8647 8621 8646 + 8611 8621 8647 + 8643 8648 8644 + 8648 8649 8644 + 8648 8650 8649 + 8650 8651 8649 + 8648 8643 8652 + 8652 8650 8648 + 8650 8652 8653 + 8653 8654 8650 + 8651 8650 8654 + 8652 8643 8655 + 8655 8656 8652 + 8652 8656 8657 + 8657 8653 8652 + 8658 8653 8657 + 8653 8658 8654 + 8659 8656 8655 + 8656 8659 8660 + 8660 8661 8656 + 8656 8661 8657 + 8662 8657 8661 + 8663 8657 8662 + 8657 8663 8658 + 8659 8655 8627 + 8627 8625 8659 + 8660 8659 8625 + 8664 8660 8625 + 8665 8660 8664 + 8660 8665 8661 + 8661 8665 8662 + 8666 8662 8665 + 8667 8662 8666 + 8662 8667 8663 + 8632 8664 8625 + 8668 8664 8632 + 8664 8668 8669 + 8664 8669 8665 + 8665 8669 8666 + 8670 8666 8669 + 8671 8666 8670 + 8666 8671 8667 + 8632 8638 8668 + 8668 8638 8672 + 8670 8668 8672 + 8669 8668 8670 + 8637 8672 8638 + 8672 8637 8673 + 8673 8674 8672 + 8672 8674 8675 + 8675 8676 8672 + 8672 8676 8670 + 8677 8670 8676 + 8670 8677 8671 + 8673 8637 8636 + 8636 8678 8673 + 8679 8673 8678 + 8674 8673 8679 + 8679 8680 8674 + 8674 8680 8681 + 8681 8675 8674 + 8682 8678 8636 + 8678 8682 8683 + 8683 8684 8678 + 8678 8684 8679 + 8685 8679 8684 + 8680 8679 8685 + 8636 8686 8682 + 8682 8686 8687 + 8687 8688 8682 + 8683 8682 8688 + 8688 8689 8683 + 8690 8683 8689 + 8684 8683 8690 + 8686 8636 8635 + 8635 8691 8686 + 8687 8686 8691 + 8691 8692 8687 + 8693 8687 8692 + 8687 8693 8694 + 8694 8688 8687 + 8688 8694 8695 + 8695 8689 8688 + 8691 8635 8634 + 8634 57 8691 + 8696 8697 8698 + 8699 8696 8698 + 8700 8696 8699 + 8700 8701 8696 + 8696 8701 61 + 61 8702 8696 + 8703 8699 8698 + 8704 8699 8703 + 8705 8699 8704 + 8699 8705 8700 + 8700 8705 8706 + 8707 8700 8706 + 8701 8700 8707 + 8698 8708 8703 + 8709 8703 8708 + 8710 8703 8709 + 8703 8710 8704 + 8711 8704 8710 + 8712 8704 8711 + 8704 8712 8705 + 8713 8708 8698 + 8708 8713 8714 + 8708 8714 8709 + 8715 8709 8714 + 8716 8709 8715 + 8709 8716 8710 + 8698 8717 8713 + 8718 8713 8717 + 8714 8713 8718 + 8718 8719 8714 + 8714 8719 8715 + 8717 8698 8720 + 8720 8721 8717 + 8717 8721 8722 + 8722 8723 8717 + 8717 8723 8718 + 8720 8698 8724 + 8724 8725 8720 + 8720 8725 8726 + 8726 8727 8720 + 8727 8728 8720 + 8728 8729 8720 + 8721 8720 8729 + 8730 8724 8698 + 8724 8731 8725 + 8725 8731 8732 + 8732 8726 8725 + 8726 8732 8733 + 8726 8733 8734 + 8734 8727 8726 + 8727 8734 8735 + 8727 8735 8736 + 8736 8728 8727 + 8733 8732 8737 + 8737 8738 8733 + 8734 8733 8738 + 8739 8734 8738 + 8735 8734 8739 + 8739 8740 8735 + 8735 8740 8741 + 8741 8736 8735 + 8737 8732 8742 + 8743 8744 8745 + 8744 8746 8745 + 8747 8745 8746 + 8747 8748 8745 + 8745 8748 8749 + 8749 8750 8745 + 8745 8750 8751 + 8751 48 8745 + 8752 8746 8744 + 8752 8753 8746 + 8746 8753 8747 + 8747 8753 8754 + 8754 8755 8747 + 8748 8747 8755 + 8755 8756 8748 + 8749 8748 8756 + 8744 8757 8752 + 8752 8757 8758 + 8758 8759 8752 + 8753 8752 8759 + 8759 8754 8753 + 8760 8754 8759 + 8754 8760 8761 + 8761 8755 8754 + 8762 8757 8744 + 8757 8762 8763 + 8763 8758 8757 + 8764 8758 8763 + 8759 8758 8764 + 8765 8759 8764 + 8759 8765 8760 + 8762 8744 8766 + 8766 8767 8762 + 8762 8767 8768 + 8768 8769 8762 + 8769 8763 8762 + 8764 8763 8769 + 8769 8770 8764 + 8764 8770 8771 + 8765 8764 8771 + 8771 8772 8765 + 8760 8765 8772 + 8767 8773 8768 + 8773 8774 8768 + 8775 8768 8774 + 8768 8775 8776 + 8776 8769 8768 + 8770 8769 8776 + 8770 8776 8777 + 8777 8771 8770 + 8773 8767 8778 + 8773 8778 48 + 48 8779 8773 + 8774 8773 8779 + 8779 8780 8774 + 8775 8774 8780 + 8780 8781 8775 + 8775 8781 8782 + 8776 8775 8782 + 8782 8777 8776 + 8783 8777 8782 + 8771 8777 8783 + 8784 8779 48 + 8779 8784 8780 + 8784 8785 8780 + 8781 8780 8785 + 8785 8786 8781 + 8781 8786 8787 + 8787 8782 8781 + 8788 8782 8787 + 8782 8788 8783 + 8784 48 8751 + 8751 8789 8784 + 8784 8789 8790 + 8790 8791 8784 + 8791 8785 8784 + 8786 8785 8791 + 8791 8792 8786 + 8787 8786 8792 + 8793 8787 8792 + 8787 8793 8788 + 8794 8789 8751 + 8789 8794 8795 + 8795 8796 8789 + 8789 8796 8790 + 8794 8751 8797 + 8797 8798 8794 + 8794 8798 8799 + 8795 8794 8799 + 8800 8797 8751 + 8801 8797 8800 + 8801 8798 8797 + 8798 8801 8802 + 8802 8799 8798 + 8803 8800 8751 + 8804 8800 8803 + 8804 8805 8800 + 8800 8805 8801 + 8801 8805 8806 + 8806 8807 8801 + 8807 8802 8801 + 8808 8803 8751 + 8809 8803 8808 + 8809 8810 8803 + 8803 8810 8804 + 8804 8810 8811 + 8811 8812 8804 + 8805 8804 8812 + 8812 8806 8805 + 8750 8808 8751 + 8813 8808 8750 + 8813 8814 8808 + 8808 8814 8809 + 8809 8814 8815 + 8815 8816 8809 + 8810 8809 8816 + 8816 8811 8810 + 8750 8817 8813 + 8818 8813 8817 + 8814 8813 8818 + 8818 8815 8814 + 8819 8815 8818 + 8815 8819 8820 + 8820 8816 8815 + 8816 8820 8821 + 8821 8811 8816 + 8749 8817 8750 + 8817 8749 8822 + 8822 8823 8817 + 8817 8823 8824 + 8824 8825 8817 + 8825 8818 8817 + 8826 8818 8825 + 8818 8826 8819 + 8822 8749 8756 + 8827 8822 8756 + 8828 8822 8827 + 8823 8822 8828 + 8823 8828 8829 + 8829 8830 8823 + 8823 8830 8824 + 8756 8831 8827 + 8832 8827 8831 + 8827 8832 8833 + 8827 8833 8828 + 8834 8831 8756 + 8831 8834 8835 + 8835 8836 8831 + 8831 8836 8832 + 8837 8832 8836 + 8833 8832 8837 + 8756 8838 8834 + 8834 8838 8839 + 8839 8840 8834 + 8835 8834 8840 + 8840 8841 8835 + 8842 8835 8841 + 8836 8835 8842 + 8838 8756 8755 + 8755 8761 8838 + 8838 8761 8843 + 8843 8839 8838 + 8839 8843 8844 + 8844 8845 8839 + 8839 8845 8846 + 8846 8840 8839 + 8840 8846 8841 + 8847 8843 8761 + 8844 8843 8847 + 8847 8848 8844 + 8844 8848 8849 + 8850 8844 8849 + 8845 8844 8850 + 8761 8760 8847 + 8772 8847 8760 + 8772 8848 8847 + 8848 8772 8771 + 8771 8849 8848 + 8783 8849 8771 + 8849 8783 8851 + 8851 8852 8849 + 8849 8852 8850 + 8853 8850 8852 + 8850 8853 8854 + 8854 8855 8850 + 8850 8855 8845 + 8851 8783 8856 + 8856 8857 8851 + 8858 8851 8857 + 8851 8858 8859 + 8859 8852 8851 + 8852 8859 8853 + 8783 8788 8856 + 8860 8856 8788 + 8861 8856 8860 + 8856 8861 8862 + 8862 8857 8856 + 8863 8857 8862 + 8857 8863 8858 + 8788 8793 8860 + 8860 8793 8864 + 8864 8865 8860 + 8866 8860 8865 + 8860 8866 8861 + 8792 8864 8793 + 8864 8792 8791 + 8864 8791 8790 + 8790 8865 8864 + 8865 8790 8867 + 8867 8868 8865 + 8865 8868 8866 + 8869 8866 8868 + 8861 8866 8869 + 8869 8870 8861 + 8861 8870 8871 + 8862 8861 8871 + 8867 8790 8872 + 8872 8873 8867 + 8874 8867 8873 + 8868 8867 8874 + 8874 8875 8868 + 8868 8875 8869 + 8796 8872 8790 + 8876 8872 8796 + 8873 8872 8876 + 8873 8876 8877 + 8877 8878 8873 + 8873 8878 8879 + 8879 8874 8873 + 8796 8880 8876 + 8876 8880 8881 + 8877 8876 8881 + 8882 8877 8881 + 8883 8877 8882 + 8883 8878 8877 + 8878 8883 8884 + 8884 8879 8878 + 8796 8795 8880 + 8880 8795 8885 + 8885 8881 8880 + 8885 8886 8881 + 8881 8886 8887 + 8887 8888 8881 + 8881 8888 8889 + 8889 8882 8881 + 8890 8885 8795 + 8886 8885 8890 + 8890 8891 8886 + 8887 8886 8891 + 8891 8892 8887 + 8892 8893 8887 + 8894 8887 8893 + 8887 8894 8888 + 8895 8890 8795 + 8896 8890 8895 + 8896 8891 8890 + 8891 8896 8897 + 8897 8892 8891 + 8898 8892 8897 + 8892 8898 8899 + 8899 8893 8892 + 8799 8895 8795 + 8900 8895 8799 + 8901 8895 8900 + 8895 8901 8896 + 8896 8901 8902 + 8902 8897 8896 + 8898 8897 8902 + 8902 8903 8898 + 8899 8898 8903 + 8799 8904 8900 + 8905 8900 8904 + 8901 8900 8905 + 8905 8906 8901 + 8901 8906 8902 + 8907 8902 8906 + 8903 8902 8907 + 8904 8799 8802 + 8904 8802 8807 + 8807 8908 8904 + 8904 8908 8909 + 8909 8905 8904 + 8910 8905 8909 + 8910 8906 8905 + 8906 8910 8907 + 8911 8908 8807 + 8908 8911 8912 + 8912 8909 8908 + 8912 8913 8909 + 8909 8913 8910 + 8910 8913 8914 + 8907 8910 8914 + 8911 8807 8806 + 8806 8915 8911 + 8911 8915 8916 + 8916 8912 8911 + 8913 8912 8916 + 8916 8914 8913 + 8915 8806 8812 + 8812 8917 8915 + 8915 8917 8918 + 8918 8919 8915 + 8915 8919 8916 + 8920 8916 8919 + 8920 8914 8916 + 8917 8812 8811 + 8811 8821 8917 + 8918 8917 8821 + 8821 8921 8918 + 8922 8918 8921 + 8922 8919 8918 + 8919 8922 8920 + 8920 8922 8923 + 8923 8924 8920 + 8924 8925 8920 + 8914 8920 8925 + 8926 8921 8821 + 8927 8921 8926 + 8921 8927 8922 + 8922 8927 8923 + 8928 8923 8927 + 8929 8923 8928 + 8923 8929 8930 + 8930 8924 8923 + 8821 8820 8926 + 8926 8820 8819 + 8819 8928 8926 + 8927 8926 8928 + 8931 8928 8819 + 8928 8931 8929 + 8929 8931 8932 + 8932 8933 8929 + 8929 8933 8934 + 8934 8930 8929 + 8819 8826 8931 + 8931 8826 8935 + 8935 8932 8931 + 8935 8936 8932 + 8936 8937 8932 + 8933 8932 8937 + 8933 8937 8938 + 8938 8939 8933 + 8933 8939 8934 + 8825 8935 8826 + 8935 8825 8936 + 8936 8825 8940 + 8936 8940 8941 + 8937 8936 8941 + 8941 8938 8937 + 8942 8938 8941 + 8939 8938 8942 + 8939 8942 8943 + 8943 8944 8939 + 8939 8944 8934 + 8825 8824 8940 + 8940 8824 8945 + 8940 8945 8946 + 8946 8941 8940 + 8941 8946 8947 + 8947 8948 8941 + 8941 8948 8942 + 8942 8948 8949 + 8949 8943 8942 + 8945 8824 8830 + 8830 8950 8945 + 8946 8945 8950 + 8950 8951 8946 + 8947 8946 8951 + 8951 8952 8947 + 8953 8947 8952 + 8948 8947 8953 + 8953 8949 8948 + 8950 8830 8829 + 8950 8829 8954 + 8954 8951 8950 + 8952 8951 8954 + 8952 8954 8955 + 8955 8956 8952 + 8952 8956 8953 + 8957 8953 8956 + 8949 8953 8957 + 8954 8829 8828 + 8955 8954 8828 + 8958 8955 8828 + 8959 8955 8958 + 8959 8956 8955 + 8956 8959 8957 + 8960 8957 8959 + 8961 8957 8960 + 8957 8961 8949 + 8949 8961 8962 + 8962 8943 8949 + 8828 8833 8958 + 8833 8963 8958 + 8963 8964 8958 + 8965 8958 8964 + 8965 8966 8958 + 8958 8966 8959 + 8959 8966 8960 + 8837 8963 8833 + 8837 8967 8963 + 8963 8967 8968 + 8968 8964 8963 + 8968 8969 8964 + 8964 8969 8965 + 8965 8969 8970 + 8971 8965 8970 + 8966 8965 8971 + 8967 8837 8972 + 8972 8973 8967 + 8968 8967 8973 + 8973 8974 8968 + 8969 8968 8974 + 8974 8970 8969 + 8836 8972 8837 + 8842 8972 8836 + 8972 8842 8975 + 8975 8973 8972 + 8973 8975 8976 + 8976 8974 8973 + 8974 8976 8977 + 8977 8970 8974 + 8975 8842 8978 + 8978 8979 8975 + 8976 8975 8979 + 8979 8980 8976 + 8977 8976 8980 + 8980 8981 8977 + 8982 8977 8981 + 8970 8977 8982 + 8841 8978 8842 + 8983 8978 8841 + 8979 8978 8983 + 8983 8984 8979 + 8979 8984 8985 + 8985 8980 8979 + 8981 8980 8985 + 8841 8846 8983 + 8983 8846 8845 + 8986 8983 8845 + 8984 8983 8986 + 8986 8987 8984 + 8984 8987 8988 + 8988 8985 8984 + 8989 8985 8988 + 8985 8989 8981 + 8845 8855 8986 + 8990 8986 8855 + 8986 8990 8991 + 8991 8987 8986 + 8987 8991 8992 + 8992 8988 8987 + 8988 8992 8993 + 8993 8994 8988 + 8988 8994 8989 + 8855 8854 8990 + 8990 8854 8995 + 8995 8996 8990 + 8991 8990 8996 + 8996 8997 8991 + 8992 8991 8997 + 8997 8998 8992 + 8993 8992 8998 + 8999 8995 8854 + 9000 8995 8999 + 8995 9000 9001 + 9001 8996 8995 + 8996 9001 9002 + 9002 8997 8996 + 8997 9002 9003 + 9003 8998 8997 + 8854 8853 8999 + 9004 8999 8853 + 9005 8999 9004 + 8999 9005 9000 + 9000 9005 9006 + 9006 9007 9000 + 9001 9000 9007 + 9007 9008 9001 + 9002 9001 9008 + 8853 8859 9004 + 9009 9004 8859 + 9010 9004 9009 + 9004 9010 9005 + 9005 9010 9011 + 9011 9006 9005 + 9012 9006 9011 + 9006 9012 9013 + 9013 9007 9006 + 8859 8858 9009 + 9014 9009 8858 + 9015 9009 9014 + 9009 9015 9010 + 9010 9015 9016 + 9016 9011 9010 + 9017 9011 9016 + 9011 9017 9012 + 8858 8863 9014 + 9018 9014 8863 + 9019 9014 9018 + 9014 9019 9015 + 9015 9019 9020 + 9020 9016 9015 + 9021 9016 9020 + 9016 9021 9017 + 8863 9022 9018 + 9023 9018 9022 + 9024 9018 9023 + 9018 9024 9019 + 9019 9024 9025 + 9025 9020 9019 + 9026 9020 9025 + 9020 9026 9021 + 8862 9022 8863 + 9022 8862 9027 + 9027 9028 9022 + 9022 9028 9023 + 9029 9023 9028 + 9030 9023 9029 + 9023 9030 9024 + 9024 9030 9031 + 9031 9025 9024 + 8871 9027 8862 + 9032 9027 8871 + 9028 9027 9032 + 9032 9033 9028 + 9028 9033 9029 + 9034 9029 9033 + 9035 9029 9034 + 9029 9035 9030 + 9030 9035 9036 + 9036 9031 9030 + 8871 9037 9032 + 9032 9037 9038 + 9038 9039 9032 + 9033 9032 9039 + 9039 9040 9033 + 9033 9040 9034 + 9037 8871 9041 + 9041 9042 9037 + 9037 9042 9043 + 9043 9044 9037 + 9037 9044 9038 + 9041 8871 8870 + 8870 9045 9041 + 9041 9045 9046 + 9042 9041 9046 + 9046 9047 9042 + 9043 9042 9047 + 9047 9048 9043 + 9049 9043 9048 + 9049 9044 9043 + 9045 8870 8869 + 9050 9045 8869 + 9045 9050 9046 + 9050 9051 9046 + 9052 9046 9051 + 9046 9052 9053 + 9053 9047 9046 + 9047 9053 9054 + 9054 9048 9047 + 8875 9050 8869 + 8875 8874 9050 + 9050 8874 9051 + 8874 8879 9051 + 8879 8884 9051 + 9051 8884 9052 + 9052 8884 9055 + 9053 9052 9055 + 9055 9056 9053 + 9054 9053 9056 + 8884 8883 9055 + 8882 9055 8883 + 9056 9055 8882 + 9056 8882 8889 + 8889 9057 9056 + 9056 9057 9054 + 9057 9058 9054 + 9058 9059 9054 + 9060 9054 9059 + 9048 9054 9060 + 9060 9061 9048 + 9048 9061 9049 + 9062 9057 8889 + 9057 9062 9063 + 9063 9058 9057 + 9058 9063 9064 + 9058 9064 9065 + 9065 9059 9058 + 9066 9059 9065 + 9059 9066 9060 + 9062 8889 9067 + 9067 9068 9062 + 9062 9068 9069 + 9063 9062 9069 + 9069 9070 9063 + 9064 9063 9070 + 9071 9067 8889 + 9072 9067 9071 + 9072 9068 9067 + 9068 9072 9073 + 9073 9069 9068 + 9074 9069 9073 + 9069 9074 9075 + 9075 9070 9069 + 8888 9071 8889 + 9076 9071 8888 + 9076 9077 9071 + 9071 9077 9072 + 9073 9072 9077 + 9077 9078 9073 + 9078 9079 9073 + 9080 9073 9079 + 9073 9080 9074 + 8888 8894 9076 + 9081 9076 8894 + 9077 9076 9081 + 9081 9078 9077 + 9082 9078 9081 + 9078 9082 9083 + 9083 9079 9078 + 9083 9084 9079 + 9079 9084 9080 + 9085 9081 8894 + 9081 9085 8899 + 9086 9081 8899 + 9081 9086 9082 + 8893 9085 8894 + 8899 9085 8893 + 9086 8899 8903 + 9087 9086 8903 + 9082 9086 9087 + 9087 9088 9082 + 9082 9088 9089 + 9089 9083 9082 + 9084 9083 9089 + 9089 9090 9084 + 9080 9084 9090 + 9091 9087 8903 + 9091 9088 9087 + 9088 9091 9092 + 9092 9089 9088 + 9090 9089 9092 + 9092 9093 9090 + 9090 9093 9094 + 9094 9095 9090 + 9090 9095 9080 + 8903 9096 9091 + 9091 9096 9097 + 9092 9091 9097 + 9097 9098 9092 + 9093 9092 9098 + 9098 9099 9093 + 9093 9099 9100 + 9100 9094 9093 + 8907 9096 8903 + 9096 8907 9101 + 9101 9097 9096 + 9102 9097 9101 + 9097 9102 9103 + 9103 9098 9097 + 9099 9098 9103 + 9099 9103 9104 + 9104 9100 9099 + 9101 8907 8914 + 8914 9105 9101 + 9106 9101 9105 + 9101 9106 9102 + 9102 9106 9107 + 9107 9108 9102 + 9103 9102 9108 + 9104 9103 9108 + 8925 9105 8914 + 9109 9105 8925 + 9105 9109 9106 + 9106 9109 9110 + 9110 9107 9106 + 9111 9107 9110 + 9108 9107 9111 + 8925 9112 9109 + 9109 9112 9113 + 9113 9110 9109 + 9110 9113 9114 + 9114 9115 9110 + 9110 9115 9111 + 9112 8925 8924 + 8924 9116 9112 + 9112 9116 9117 + 9113 9112 9117 + 9117 9118 9113 + 9114 9113 9118 + 9118 9119 9114 + 9120 9114 9119 + 9115 9114 9120 + 9116 8924 8930 + 8930 9121 9116 + 9116 9121 9122 + 9122 9117 9116 + 9117 9122 9123 + 9123 9124 9117 + 9117 9124 9125 + 9125 9118 9117 + 9118 9125 9119 + 9121 8930 8934 + 8934 9126 9121 + 9121 9126 9127 + 9127 9122 9121 + 9123 9122 9127 + 9127 9128 9123 + 9129 9123 9128 + 9124 9123 9129 + 9126 8934 9130 + 9130 9131 9126 + 9126 9131 9132 + 9132 9127 9126 + 9127 9132 9133 + 9133 9128 9127 + 9130 8934 8944 + 8944 9134 9130 + 9130 9134 9135 + 9135 9136 9130 + 9131 9130 9136 + 9136 9137 9131 + 9131 9137 9138 + 9138 9132 9131 + 9133 9132 9138 + 9134 8944 8943 + 8943 8962 9134 + 9134 8962 9139 + 9139 9140 9134 + 9134 9140 9135 + 9141 9135 9140 + 9142 9135 9141 + 9135 9142 9143 + 9143 9136 9135 + 9137 9136 9143 + 9144 9139 8962 + 9145 9139 9144 + 9140 9139 9145 + 9140 9145 9141 + 9141 9145 9146 + 9146 9147 9141 + 9148 9141 9147 + 9141 9148 9142 + 8962 8961 9144 + 8960 9144 8961 + 9144 8960 9149 + 9149 9146 9144 + 9144 9146 9145 + 9149 8960 9150 + 9150 9151 9149 + 9152 9149 9151 + 9146 9149 9152 + 9152 9147 9146 + 9147 9152 9153 + 9153 9154 9147 + 9147 9154 9148 + 9155 9150 8960 + 9156 9150 9155 + 9151 9150 9156 + 9151 9156 9157 + 9157 9158 9151 + 9151 9158 9152 + 9153 9152 9158 + 8966 9155 8960 + 8971 9155 8966 + 9155 8971 9159 + 9155 9159 9156 + 9157 9156 9159 + 9160 9157 9159 + 9161 9157 9160 + 9161 9158 9157 + 9158 9161 9153 + 9162 9153 9161 + 9154 9153 9162 + 9159 8971 9163 + 9163 9164 9159 + 9159 9164 9165 + 9165 9166 9159 + 9166 9167 9159 + 9167 9160 9159 + 9163 8971 8970 + 8970 9168 9163 + 9169 9163 9168 + 9163 9169 9164 + 9164 9169 9170 + 9170 9165 9164 + 9170 9171 9165 + 9165 9171 9172 + 9172 9166 9165 + 8982 9168 8970 + 9173 9168 8982 + 9168 9173 9169 + 9170 9169 9173 + 9173 9174 9170 + 9171 9170 9174 + 9174 9175 9171 + 9172 9171 9175 + 9176 9172 9175 + 9177 9172 9176 + 9172 9177 9166 + 8982 9178 9173 + 9173 9178 9179 + 9179 9174 9173 + 9174 9179 9180 + 9180 9175 9174 + 9178 8982 9181 + 9181 9182 9178 + 9179 9178 9182 + 9182 9183 9179 + 9180 9179 9183 + 9183 9184 9180 + 9185 9180 9184 + 9175 9180 9185 + 8981 9181 8982 + 9186 9181 8981 + 9181 9186 9182 + 9182 9186 9187 + 9187 9183 9182 + 9184 9183 9187 + 9187 9188 9184 + 9184 9188 9189 + 9189 9190 9184 + 9184 9190 9185 + 8981 8989 9186 + 9187 9186 8989 + 9191 9187 8989 + 9188 9187 9191 + 9191 9192 9188 + 9188 9192 9193 + 9193 9189 9188 + 9194 9189 9193 + 9189 9194 9195 + 9195 9190 9189 + 8989 8994 9191 + 9196 9191 8994 + 9191 9196 9197 + 9197 9192 9191 + 9192 9197 9198 + 9198 9193 9192 + 9193 9198 9199 + 9199 9200 9193 + 9193 9200 9194 + 8994 8993 9196 + 9196 8993 9201 + 9201 9202 9196 + 9197 9196 9202 + 9202 9203 9197 + 9198 9197 9203 + 9203 9204 9198 + 9199 9198 9204 + 8998 9201 8993 + 9205 9201 8998 + 9201 9205 9206 + 9206 9202 9201 + 9202 9206 9207 + 9207 9203 9202 + 9203 9207 9208 + 9208 9204 9203 + 8998 9003 9205 + 9205 9003 9209 + 9209 9210 9205 + 9206 9205 9210 + 9210 9211 9206 + 9207 9206 9211 + 9211 9212 9207 + 9208 9207 9212 + 9213 9209 9003 + 9214 9209 9213 + 9209 9214 9215 + 9215 9210 9209 + 9210 9215 9216 + 9216 9211 9210 + 9211 9216 9217 + 9217 9212 9211 + 9003 9002 9213 + 9008 9213 9002 + 9218 9213 9008 + 9213 9218 9214 + 9214 9218 9219 + 9219 9220 9214 + 9215 9214 9220 + 9220 9221 9215 + 9216 9215 9221 + 9221 9222 9216 + 9217 9216 9222 + 9008 9223 9218 + 9218 9223 9224 + 9224 9219 9218 + 9219 9224 9225 + 9225 9226 9219 + 9219 9226 9227 + 9227 9220 9219 + 9221 9220 9227 + 9223 9008 9007 + 9007 9013 9223 + 9223 9013 9228 + 9228 9224 9223 + 9225 9224 9228 + 9228 9229 9225 + 9230 9225 9229 + 9226 9225 9230 + 9230 9231 9226 + 9226 9231 9232 + 9232 9227 9226 + 9233 9228 9013 + 9228 9233 9234 + 9234 9229 9228 + 9229 9234 9235 + 9235 9236 9229 + 9229 9236 9230 + 9013 9012 9233 + 9237 9233 9012 + 9234 9233 9237 + 9237 9238 9234 + 9235 9234 9238 + 9238 9239 9235 + 9240 9235 9239 + 9235 9240 9241 + 9241 9236 9235 + 9012 9017 9237 + 9242 9237 9017 + 9237 9242 9243 + 9243 9238 9237 + 9238 9243 9244 + 9244 9239 9238 + 9245 9239 9244 + 9239 9245 9240 + 9017 9021 9242 + 9246 9242 9021 + 9243 9242 9246 + 9246 9247 9243 + 9244 9243 9247 + 9247 9248 9244 + 9249 9244 9248 + 9244 9249 9245 + 9021 9026 9246 + 9250 9246 9026 + 9246 9250 9251 + 9251 9247 9246 + 9247 9251 9252 + 9252 9248 9247 + 9253 9248 9252 + 9248 9253 9249 + 9026 9254 9250 + 9255 9250 9254 + 9251 9250 9255 + 9255 9256 9251 + 9252 9251 9256 + 9256 9257 9252 + 9258 9252 9257 + 9252 9258 9253 + 9025 9254 9026 + 9254 9025 9031 + 9031 9259 9254 + 9254 9259 9255 + 9260 9255 9259 + 9255 9260 9261 + 9261 9256 9255 + 9256 9261 9262 + 9262 9257 9256 + 9263 9257 9262 + 9257 9263 9258 + 9259 9031 9036 + 9036 9264 9259 + 9259 9264 9260 + 9265 9260 9264 + 9261 9260 9265 + 9265 9266 9261 + 9262 9261 9266 + 9266 9267 9262 + 9268 9262 9267 + 9262 9268 9263 + 9264 9036 9269 + 9269 9270 9264 + 9264 9270 9265 + 9271 9265 9270 + 9265 9271 9272 + 9272 9266 9265 + 9266 9272 9273 + 9273 9267 9266 + 9269 9036 9035 + 9035 9274 9269 + 9275 9269 9274 + 9270 9269 9275 + 9275 9276 9270 + 9270 9276 9271 + 9277 9271 9276 + 9272 9271 9277 + 9277 9278 9272 + 9273 9272 9278 + 9034 9274 9035 + 9274 9034 9279 + 9279 9280 9274 + 9274 9280 9275 + 9281 9275 9280 + 9276 9275 9281 + 9281 9282 9276 + 9276 9282 9277 + 9279 9034 9040 + 9040 9283 9279 + 9284 9279 9283 + 9280 9279 9284 + 9284 9285 9280 + 9280 9285 9281 + 9286 9281 9285 + 9282 9281 9286 + 9287 9283 9040 + 9283 9287 9288 + 9288 9289 9283 + 9283 9289 9284 + 9290 9284 9289 + 9285 9284 9290 + 9290 9291 9285 + 9285 9291 9286 + 9040 9039 9287 + 9287 9039 9038 + 9038 9292 9287 + 9287 9292 9293 + 9293 9288 9287 + 9294 9288 9293 + 9289 9288 9294 + 9294 9295 9289 + 9289 9295 9290 + 9296 9290 9295 + 9291 9290 9296 + 9292 9038 9297 + 9297 9298 9292 + 9292 9298 9299 + 9299 9300 9292 + 9292 9300 9293 + 9297 9038 9044 + 9044 9049 9297 + 9297 9049 9061 + 9061 9301 9297 + 9298 9297 9301 + 9301 9302 9298 + 9299 9298 9302 + 9302 9303 9299 + 9304 9299 9303 + 9304 9300 9299 + 9305 9301 9061 + 9301 9305 9306 + 9306 9302 9301 + 9302 9306 9307 + 9307 9303 9302 + 9303 9307 9308 + 9308 9309 9303 + 9303 9309 9304 + 9061 9060 9305 + 9305 9060 9066 + 9066 9310 9305 + 9306 9305 9310 + 9310 9311 9306 + 9306 9311 9312 + 9307 9306 9312 + 9312 9313 9307 + 9313 9308 9307 + 9314 9310 9066 + 9311 9310 9314 + 9311 9314 9315 + 9315 9312 9311 + 9066 9065 9314 + 9314 9065 9064 + 9315 9314 9064 + 9316 9315 9064 + 9313 9315 9316 + 9313 9317 9315 + 9064 9318 9316 + 9318 9319 9316 + 9319 9320 9316 + 9320 9321 9316 + 9322 9316 9321 + 9322 9323 9316 + 9316 9323 9313 + 9070 9318 9064 + 9070 9075 9318 + 9318 9075 9324 + 9324 9319 9318 + 9324 9325 9319 + 9319 9325 9326 + 9326 9320 9319 + 9326 9327 9320 + 9320 9327 9328 + 9328 9321 9320 + 9324 9075 9074 + 9329 9324 9074 + 9325 9324 9329 + 9329 9330 9325 + 9326 9325 9330 + 9330 9331 9326 + 9327 9326 9331 + 9331 9332 9327 + 9328 9327 9332 + 9074 9333 9329 + 9334 9329 9333 + 9329 9334 9335 + 9335 9330 9329 + 9330 9335 9336 + 9336 9331 9330 + 9331 9336 9337 + 9337 9332 9331 + 9338 9333 9074 + 9339 9333 9338 + 9333 9339 9334 + 9340 9334 9339 + 9335 9334 9340 + 9340 9341 9335 + 9335 9341 9342 + 9342 9336 9335 + 9337 9336 9342 + 9074 9080 9338 + 9095 9338 9080 + 9339 9338 9095 + 9095 9343 9339 + 9339 9343 9340 + 9343 9344 9340 + 9345 9340 9344 + 9341 9340 9345 + 9343 9095 9094 + 9094 9346 9343 + 9343 9346 9347 + 9347 9344 9343 + 9348 9344 9347 + 9344 9348 9345 + 9346 9094 9100 + 9100 9349 9346 + 9346 9349 9350 + 9350 9347 9346 + 9348 9347 9350 + 9350 9351 9348 + 9345 9348 9351 + 9351 9352 9345 + 9353 9345 9352 + 9345 9353 9341 + 9354 9349 9100 + 9349 9354 9355 + 9355 9350 9349 + 9350 9355 9351 + 9351 9355 9356 + 9356 9352 9351 + 9357 9352 9356 + 9352 9357 9353 + 9358 9353 9357 + 9341 9353 9358 + 9100 9104 9354 + 9354 9104 9359 + 9359 9360 9354 + 9355 9354 9360 + 9360 9361 9355 + 9361 9356 9355 + 9362 9356 9361 + 9356 9362 9357 + 9108 9359 9104 + 9363 9359 9108 + 9360 9359 9363 + 9363 9364 9360 + 9360 9364 9365 + 9365 9361 9360 + 9366 9361 9365 + 9361 9366 9362 + 9108 9367 9363 + 9368 9363 9367 + 9364 9363 9368 + 9368 9369 9364 + 9364 9369 9370 + 9370 9371 9364 + 9371 9365 9364 + 9111 9367 9108 + 9367 9111 9372 + 9372 9373 9367 + 9367 9373 9368 + 9374 9368 9373 + 9369 9368 9374 + 9369 9374 9375 + 9375 9370 9369 + 9372 9111 9115 + 9115 9376 9372 + 9377 9372 9376 + 9372 9377 9378 + 9378 9373 9372 + 9373 9378 9374 + 9374 9378 9379 + 9375 9374 9379 + 9120 9376 9115 + 9380 9376 9120 + 9376 9380 9377 + 9377 9380 9381 + 9381 9382 9377 + 9378 9377 9382 + 9382 9379 9378 + 9120 9383 9380 + 9380 9383 9384 + 9384 9381 9380 + 9385 9381 9384 + 9381 9385 9386 + 9386 9382 9381 + 9382 9386 9387 + 9387 9379 9382 + 9383 9120 9388 + 9388 9389 9383 + 9383 9389 9390 + 9390 9384 9383 + 9391 9384 9390 + 9384 9391 9385 + 9119 9388 9120 + 9392 9388 9119 + 9389 9388 9392 + 9392 9393 9389 + 9389 9393 9394 + 9394 9390 9389 + 9395 9390 9394 + 9390 9395 9391 + 9119 9125 9392 + 9392 9125 9124 + 9124 9396 9392 + 9393 9392 9396 + 9396 9397 9393 + 9393 9397 9398 + 9398 9394 9393 + 9399 9394 9398 + 9394 9399 9395 + 9129 9396 9124 + 9397 9396 9129 + 9129 9400 9397 + 9397 9400 9401 + 9401 9398 9397 + 9402 9398 9401 + 9398 9402 9399 + 9399 9402 9403 + 9403 9404 9399 + 9395 9399 9404 + 9400 9129 9405 + 9405 9406 9400 + 9400 9406 9407 + 9407 9401 9400 + 9408 9401 9407 + 9401 9408 9402 + 9402 9408 9409 + 9409 9403 9402 + 9128 9405 9129 + 9410 9405 9128 + 9406 9405 9410 + 9410 9411 9406 + 9406 9411 9412 + 9412 9407 9406 + 9413 9407 9412 + 9407 9413 9408 + 9408 9413 9414 + 9414 9409 9408 + 9128 9133 9410 + 9410 9133 9415 + 9415 9416 9410 + 9411 9410 9416 + 9416 9417 9411 + 9411 9417 9418 + 9418 9412 9411 + 9419 9412 9418 + 9412 9419 9413 + 9138 9415 9133 + 9138 9420 9415 + 9415 9420 9421 + 9421 9416 9415 + 9417 9416 9421 + 9421 9422 9417 + 9417 9422 9423 + 9423 9418 9417 + 9424 9418 9423 + 9418 9424 9419 + 9420 9138 9425 + 9425 9426 9420 + 9420 9426 9427 + 9427 9421 9420 + 9422 9421 9427 + 9427 9428 9422 + 9422 9428 9429 + 9429 9423 9422 + 9137 9425 9138 + 9430 9425 9137 + 9426 9425 9430 + 9430 9431 9426 + 9426 9431 9432 + 9432 9427 9426 + 9428 9427 9432 + 9432 9433 9428 + 9428 9433 9434 + 9434 9429 9428 + 9137 9435 9430 + 9436 9430 9435 + 9431 9430 9436 + 9436 9437 9431 + 9432 9431 9437 + 9437 9438 9432 + 9433 9432 9438 + 9143 9435 9137 + 9435 9143 9439 + 9439 9440 9435 + 9435 9440 9436 + 9441 9436 9440 + 9436 9441 9442 + 9442 9437 9436 + 9437 9442 9443 + 9443 9438 9437 + 9439 9143 9444 + 9444 9445 9439 + 9445 9446 9439 + 9447 9439 9446 + 9440 9439 9447 + 9447 9448 9440 + 9440 9448 9441 + 9143 9142 9444 + 9449 9444 9142 + 9444 9449 9450 + 9444 9450 9451 + 9451 9445 9444 + 9445 9451 9452 + 9445 9452 9453 + 9453 9446 9445 + 9142 9148 9449 + 9449 9148 9154 + 9154 9454 9449 + 9454 9455 9449 + 9450 9449 9455 + 9455 9456 9450 + 9450 9456 9457 + 9457 9451 9450 + 9457 9458 9451 + 9458 9452 9451 + 9162 9454 9154 + 9454 9162 9459 + 9454 9459 9460 + 9460 9455 9454 + 9455 9460 9456 + 9456 9460 9461 + 9461 9462 9456 + 9456 9462 9457 + 9463 9457 9462 + 9458 9457 9463 + 9459 9162 9464 + 9464 9465 9459 + 9459 9465 9461 + 9461 9460 9459 + 9161 9464 9162 + 9160 9464 9161 + 9465 9464 9160 + 9465 9160 9167 + 9167 9466 9465 + 9465 9466 9461 + 9467 9461 9466 + 9462 9461 9467 + 9462 9467 9463 + 9468 9466 9167 + 9466 9468 9467 + 9467 9468 9177 + 9463 9467 9177 + 9177 9469 9463 + 9469 9470 9463 + 9471 9463 9470 + 9463 9471 9458 + 9468 9167 9166 + 9166 9177 9468 + 9176 9469 9177 + 9469 9176 9472 + 9469 9472 9473 + 9473 9470 9469 + 9474 9470 9473 + 9470 9474 9471 + 9475 9471 9474 + 9458 9471 9475 + 9472 9176 9476 + 9476 9477 9472 + 9472 9477 9478 + 9478 9479 9472 + 9479 9480 9472 + 9480 9481 9472 + 9481 9482 9472 + 9482 9483 9472 + 9483 9484 9472 + 9484 9473 9472 + 9476 9176 9175 + 9175 9485 9476 + 9486 9476 9485 + 9476 9486 9477 + 9477 9486 9487 + 9487 9478 9477 + 9487 9488 9478 + 9478 9488 9489 + 9489 9479 9478 + 9185 9485 9175 + 9485 9185 9490 + 9490 9491 9485 + 9485 9491 9486 + 9487 9486 9491 + 9491 9492 9487 + 9488 9487 9492 + 9492 9493 9488 + 9489 9488 9493 + 9490 9185 9190 + 9190 9195 9490 + 9494 9490 9195 + 9491 9490 9494 + 9494 9492 9491 + 9492 9494 9495 + 9495 9493 9492 + 9493 9495 9496 + 9496 9497 9493 + 9493 9497 9498 + 9498 9489 9493 + 9195 9499 9494 + 9495 9494 9499 + 9499 9500 9495 + 9496 9495 9500 + 9500 9501 9496 + 9502 9496 9501 + 9496 9502 9497 + 9497 9502 9503 + 9503 9498 9497 + 9504 9499 9195 + 9499 9504 9500 + 9500 9504 9505 + 9505 9501 9500 + 9506 9501 9505 + 9501 9506 9502 + 9502 9506 9507 + 9503 9502 9507 + 9195 9194 9504 + 9505 9504 9194 + 9508 9505 9194 + 9509 9505 9508 + 9505 9509 9506 + 9506 9509 9510 + 9510 9511 9506 + 9506 9511 9507 + 9194 9200 9508 + 9512 9508 9200 + 9508 9512 9513 + 9513 9514 9508 + 9508 9514 9509 + 9509 9514 9515 + 9515 9510 9509 + 9516 9510 9515 + 9511 9510 9516 + 9200 9199 9512 + 9512 9199 9517 + 9517 9518 9512 + 9513 9512 9518 + 9518 9519 9513 + 9520 9513 9519 + 9514 9513 9520 + 9520 9515 9514 + 9204 9517 9199 + 9521 9517 9204 + 9517 9521 9522 + 9522 9518 9517 + 9518 9522 9523 + 9523 9519 9518 + 9519 9523 9524 + 9524 9525 9519 + 9519 9525 9520 + 9204 9208 9521 + 9521 9208 9526 + 9526 9527 9521 + 9522 9521 9527 + 9527 9528 9522 + 9523 9522 9528 + 9528 9529 9523 + 9524 9523 9529 + 9212 9526 9208 + 9530 9526 9212 + 9526 9530 9531 + 9531 9527 9526 + 9527 9531 9532 + 9532 9528 9527 + 9528 9532 9533 + 9533 9529 9528 + 9212 9217 9530 + 9530 9217 9534 + 9534 9535 9530 + 9531 9530 9535 + 9535 9536 9531 + 9532 9531 9536 + 9536 9537 9532 + 9533 9532 9537 + 9222 9534 9217 + 9534 9222 9538 + 9538 9539 9534 + 9534 9539 9540 + 9540 9535 9534 + 9536 9535 9540 + 9540 9541 9536 + 9536 9541 9542 + 9542 9537 9536 + 9538 9222 9221 + 9221 9543 9538 + 9544 9538 9543 + 9539 9538 9544 + 9544 9545 9539 + 9539 9545 9546 + 9546 9540 9539 + 9541 9540 9546 + 9227 9543 9221 + 9543 9227 9232 + 9232 9547 9543 + 9543 9547 9544 + 9548 9544 9547 + 9544 9548 9549 + 9549 9545 9544 + 9545 9549 9550 + 9550 9546 9545 + 9551 9547 9232 + 9547 9551 9548 + 9548 9551 9552 + 9552 9553 9548 + 9549 9548 9553 + 9553 9554 9549 + 9550 9549 9554 + 9232 9555 9551 + 9551 9555 9556 + 9556 9552 9551 + 9557 9552 9556 + 9552 9557 9558 + 9558 9553 9552 + 9553 9558 9559 + 9559 9554 9553 + 9555 9232 9231 + 9231 9560 9555 + 9555 9560 9561 + 9561 9556 9555 + 9562 9556 9561 + 9556 9562 9557 + 9557 9562 9563 + 9563 9564 9557 + 9558 9557 9564 + 9560 9231 9230 + 9230 9565 9560 + 9560 9565 9566 + 9566 9561 9560 + 9567 9561 9566 + 9561 9567 9562 + 9562 9567 9568 + 9568 9563 9562 + 9565 9230 9236 + 9236 9241 9565 + 9565 9241 9569 + 9569 9566 9565 + 9570 9566 9569 + 9566 9570 9567 + 9567 9570 9571 + 9571 9568 9567 + 9572 9568 9571 + 9568 9572 9573 + 9573 9563 9568 + 9574 9569 9241 + 9575 9569 9574 + 9569 9575 9570 + 9570 9575 9576 + 9576 9571 9570 + 9577 9571 9576 + 9571 9577 9572 + 9241 9240 9574 + 9578 9574 9240 + 9579 9574 9578 + 9574 9579 9575 + 9575 9579 9580 + 9580 9576 9575 + 9581 9576 9580 + 9576 9581 9577 + 9240 9245 9578 + 9582 9578 9245 + 9583 9578 9582 + 9578 9583 9579 + 9579 9583 9584 + 9584 9580 9579 + 9585 9580 9584 + 9580 9585 9581 + 9245 9249 9582 + 9586 9582 9249 + 9587 9582 9586 + 9582 9587 9583 + 9583 9587 9588 + 9588 9584 9583 + 9589 9584 9588 + 9584 9589 9585 + 9249 9253 9586 + 9590 9586 9253 + 9591 9586 9590 + 9586 9591 9587 + 9587 9591 9592 + 9592 9588 9587 + 9593 9588 9592 + 9588 9593 9589 + 9253 9258 9590 + 9594 9590 9258 + 9595 9590 9594 + 9590 9595 9591 + 9591 9595 9596 + 9596 9592 9591 + 9597 9592 9596 + 9592 9597 9593 + 9258 9263 9594 + 9598 9594 9263 + 9599 9594 9598 + 9594 9599 9595 + 9595 9599 9600 + 9600 9596 9595 + 9601 9596 9600 + 9596 9601 9597 + 9263 9268 9598 + 9602 9598 9268 + 9603 9598 9602 + 9598 9603 9599 + 9599 9603 9604 + 9604 9600 9599 + 9605 9600 9604 + 9600 9605 9601 + 9268 9606 9602 + 9607 9602 9606 + 9608 9602 9607 + 9602 9608 9603 + 9603 9608 9609 + 9609 9604 9603 + 9610 9604 9609 + 9604 9610 9605 + 9267 9606 9268 + 9606 9267 9273 + 9273 9611 9606 + 9606 9611 9607 + 9612 9607 9611 + 9613 9607 9612 + 9607 9613 9608 + 9608 9613 9614 + 9614 9609 9608 + 9615 9609 9614 + 9609 9615 9610 + 9611 9273 9616 + 9616 9617 9611 + 9611 9617 9612 + 9618 9612 9617 + 9619 9612 9618 + 9612 9619 9613 + 9613 9619 9620 + 9620 9614 9613 + 9278 9616 9273 + 9621 9616 9278 + 9617 9616 9621 + 9621 9622 9617 + 9617 9622 9618 + 9623 9618 9622 + 9624 9618 9623 + 9618 9624 9619 + 9619 9624 9625 + 9625 9620 9619 + 9278 9626 9621 + 9627 9621 9626 + 9622 9621 9627 + 9627 9628 9622 + 9622 9628 9623 + 9629 9623 9628 + 9630 9623 9629 + 9623 9630 9624 + 9626 9278 9277 + 9277 9631 9626 + 9626 9631 9632 + 9632 9633 9626 + 9626 9633 9627 + 9634 9627 9633 + 9628 9627 9634 + 9634 9635 9628 + 9628 9635 9629 + 9631 9277 9282 + 9282 9636 9631 + 9631 9636 9637 + 9637 9632 9631 + 9638 9632 9637 + 9632 9638 9639 + 9639 9633 9632 + 9633 9639 9634 + 9640 9634 9639 + 9635 9634 9640 + 9286 9636 9282 + 9636 9286 9641 + 9641 9637 9636 + 9637 9641 9642 + 9642 9643 9637 + 9637 9643 9638 + 9638 9643 9644 + 9644 9645 9638 + 9639 9638 9645 + 9641 9286 9291 + 9291 9646 9641 + 9642 9641 9646 + 9646 9647 9642 + 9648 9642 9647 + 9643 9642 9648 + 9648 9644 9643 + 9296 9646 9291 + 9646 9296 9649 + 9649 9647 9646 + 9647 9649 9650 + 9650 9651 9647 + 9647 9651 9648 + 9652 9648 9651 + 9644 9648 9652 + 9649 9296 9653 + 9653 9654 9649 + 9650 9649 9654 + 9654 9655 9650 + 9656 9650 9655 + 9651 9650 9656 + 9656 9657 9651 + 9651 9657 9652 + 9295 9653 9296 + 9658 9653 9295 + 9653 9658 9659 + 9659 9654 9653 + 9654 9659 9660 + 9660 9655 9654 + 9655 9660 9661 + 9661 9662 9655 + 9655 9662 9656 + 9295 9294 9658 + 9658 9294 9663 + 9663 9664 9658 + 9659 9658 9664 + 9664 9665 9659 + 9660 9659 9665 + 9665 9666 9660 + 9661 9660 9666 + 9294 9667 9663 + 9668 9663 9667 + 9669 9663 9668 + 9663 9669 9670 + 9670 9664 9663 + 9665 9664 9670 + 9293 9667 9294 + 9671 9667 9293 + 9667 9671 9668 + 9668 9671 9672 + 9672 9673 9668 + 9669 9668 9673 + 9673 9674 9669 + 9669 9674 9675 + 9675 9670 9669 + 9676 9671 9293 + 9672 9671 9676 + 9677 9672 9676 + 9672 9677 9678 + 9672 9678 9679 + 9679 9673 9672 + 9673 9679 9680 + 9680 9674 9673 + 9676 9293 9681 + 9681 9682 9676 + 9676 9682 9683 + 9683 9684 9676 + 9684 9677 9676 + 9678 9677 9684 + 9685 9681 9293 + 9686 9681 9685 + 9682 9681 9686 + 9682 9686 9687 + 9687 9683 9682 + 9688 9683 9687 + 9683 9688 9689 + 9689 9684 9683 + 9300 9685 9293 + 9690 9685 9300 + 9691 9685 9690 + 9685 9691 9686 + 9686 9691 9692 + 9692 9687 9686 + 9693 9687 9692 + 9687 9693 9688 + 9300 9304 9690 + 9690 9304 9309 + 9309 9694 9690 + 9691 9690 9694 + 9694 9692 9691 + 9695 9692 9694 + 9692 9695 9693 + 9693 9695 9696 + 9696 9697 9693 + 9688 9693 9697 + 9697 9698 9688 + 9689 9688 9698 + 9699 9694 9309 + 9694 9699 9695 + 9695 9699 9700 + 9700 9696 9695 + 9696 9700 9701 + 9696 9701 9702 + 9702 9697 9696 + 9698 9697 9702 + 9309 9308 9699 + 9699 9308 9323 + 9323 9703 9699 + 9703 9700 9699 + 9701 9700 9703 + 9703 9704 9701 + 9701 9704 9705 + 9702 9701 9705 + 9308 9313 9323 + 9474 9473 9484 + 9484 9706 9474 + 9474 9706 9475 + 9707 9475 9706 + 9708 9475 9707 + 9475 9708 9458 + 9452 9458 9708 + 9709 9706 9484 + 9706 9709 9707 + 9710 9707 9709 + 9711 9707 9710 + 9707 9711 9708 + 9708 9711 9712 + 9712 9453 9708 + 9708 9453 9452 + 9709 9484 9483 + 9483 9713 9709 + 9709 9713 9710 + 9714 9710 9713 + 9715 9710 9714 + 9710 9715 9711 + 9712 9711 9715 + 9715 9716 9712 + 9717 9712 9716 + 9453 9712 9717 + 9717 9446 9453 + 9718 9713 9483 + 9713 9718 9714 + 9719 9714 9718 + 9720 9714 9719 + 9714 9720 9715 + 9715 9720 9721 + 9721 9716 9715 + 9722 9716 9721 + 9716 9722 9717 + 9718 9483 9482 + 9482 9723 9718 + 9718 9723 9719 + 9724 9719 9723 + 9725 9719 9724 + 9719 9725 9720 + 9721 9720 9725 + 9725 9726 9721 + 9722 9721 9726 + 9727 9723 9482 + 9723 9727 9724 + 9728 9724 9727 + 9729 9724 9728 + 9724 9729 9725 + 9725 9729 9730 + 9730 9726 9725 + 9731 9726 9730 + 9726 9731 9722 + 9727 9482 9481 + 9481 9732 9727 + 9727 9732 9728 + 9733 9728 9732 + 9734 9728 9733 + 9728 9734 9729 + 9729 9734 9735 + 9730 9729 9735 + 9735 9736 9730 + 9731 9730 9736 + 9737 9732 9481 + 9732 9737 9733 + 9738 9733 9737 + 9734 9733 9738 + 9738 9735 9734 + 9735 9738 9739 + 9735 9739 9740 + 9740 9736 9735 + 9737 9481 9480 + 9480 9741 9737 + 9737 9741 9742 + 9742 9738 9737 + 9739 9738 9742 + 9742 9743 9739 + 9740 9739 9743 + 9743 9744 9740 + 9745 9740 9744 + 9736 9740 9745 + 9746 9741 9480 + 9741 9746 9747 + 9747 9748 9741 + 9741 9748 9742 + 9746 9480 9479 + 9479 9749 9746 + 9746 9749 9750 + 9747 9746 9750 + 9751 9747 9750 + 9752 9747 9751 + 9748 9747 9752 + 9489 9749 9479 + 9749 9489 9498 + 9498 9750 9749 + 9503 9750 9498 + 9750 9503 9753 + 9753 9754 9750 + 9750 9754 9755 + 9755 9751 9750 + 9756 9751 9755 + 9751 9756 9757 + 9751 9757 9752 + 9758 9753 9503 + 9759 9753 9758 + 9759 9754 9753 + 9754 9759 9760 + 9760 9755 9754 + 9760 9761 9755 + 9755 9761 9756 + 9762 9756 9761 + 9757 9756 9762 + 9507 9758 9503 + 9763 9758 9507 + 9763 9764 9758 + 9758 9764 9759 + 9760 9759 9764 + 9764 9765 9760 + 9765 9766 9760 + 9761 9760 9766 + 9766 9767 9761 + 9761 9767 9762 + 9507 9768 9763 + 9769 9763 9768 + 9769 9765 9763 + 9765 9764 9763 + 9768 9507 9770 + 9768 9770 9771 + 9771 9772 9768 + 9768 9772 9769 + 9773 9769 9772 + 9769 9773 9765 + 9765 9773 8740 + 8740 9766 9765 + 9767 9766 8740 + 9770 9507 9511 + 9511 9516 9770 + 9770 9516 9774 + 9774 9775 9770 + 9775 9771 9770 + 9776 9771 9775 + 9771 9776 8741 + 8741 9772 9771 + 9772 8741 9773 + 8740 9773 8741 + 9515 9774 9516 + 9777 9774 9515 + 9774 9777 9778 + 9778 9775 9774 + 9775 9778 9779 + 9779 9780 9775 + 9775 9780 9776 + 9515 9520 9777 + 9777 9520 9525 + 9525 9781 9777 + 9778 9777 9781 + 9781 9782 9778 + 9779 9778 9782 + 9782 9783 9779 + 9784 9779 9783 + 9780 9779 9784 + 9785 9781 9525 + 9781 9785 9786 + 9786 9782 9781 + 9782 9786 9787 + 9787 9783 9782 + 9783 9787 9788 + 9788 9789 9783 + 9783 9789 9784 + 9525 9524 9785 + 9785 9524 9790 + 9790 9791 9785 + 9786 9785 9791 + 9791 9792 9786 + 9787 9786 9792 + 9792 9793 9787 + 9788 9787 9793 + 9529 9790 9524 + 9794 9790 9529 + 9790 9794 9795 + 9795 9791 9790 + 9791 9795 9796 + 9796 9792 9791 + 9792 9796 9797 + 9797 9793 9792 + 9529 9533 9794 + 9798 9794 9533 + 9795 9794 9798 + 9798 9799 9795 + 9796 9795 9799 + 9799 9800 9796 + 9797 9796 9800 + 9533 9801 9798 + 9802 9798 9801 + 9798 9802 9803 + 9803 9799 9798 + 9799 9803 9804 + 9804 9800 9799 + 9805 9800 9804 + 9800 9805 9797 + 9537 9801 9533 + 9801 9537 9542 + 9542 9806 9801 + 9801 9806 9802 + 9802 9806 9807 + 9807 9808 9802 + 9803 9802 9808 + 9808 9809 9803 + 9803 9809 9810 + 9810 9804 9803 + 9806 9542 9811 + 9811 9807 9806 + 9812 9807 9811 + 9807 9812 9813 + 9813 9808 9807 + 9808 9813 9814 + 9814 9809 9808 + 9809 9814 9815 + 9815 9810 9809 + 9811 9542 9541 + 9541 9816 9811 + 9817 9811 9816 + 9811 9817 9812 + 9812 9817 9818 + 9818 9819 9812 + 9813 9812 9819 + 9819 9820 9813 + 9814 9813 9820 + 9546 9816 9541 + 9821 9816 9546 + 9816 9821 9817 + 9817 9821 9822 + 9822 9818 9817 + 9823 9818 9822 + 9818 9823 9824 + 9824 9819 9818 + 9819 9824 9825 + 9825 9820 9819 + 9546 9550 9821 + 9821 9550 9826 + 9826 9822 9821 + 9827 9822 9826 + 9822 9827 9823 + 9823 9827 9828 + 9828 9829 9823 + 9824 9823 9829 + 9829 9830 9824 + 9825 9824 9830 + 9554 9826 9550 + 9831 9826 9554 + 9826 9831 9827 + 9827 9831 9832 + 9832 9828 9827 + 9833 9828 9832 + 9828 9833 9834 + 9834 9829 9828 + 9829 9834 9835 + 9835 9830 9829 + 9554 9559 9831 + 9831 9559 9836 + 9836 9832 9831 + 9837 9832 9836 + 9832 9837 9833 + 9833 9837 9838 + 9838 9839 9833 + 9834 9833 9839 + 9839 9840 9834 + 9835 9834 9840 + 9841 9836 9559 + 9842 9836 9841 + 9836 9842 9837 + 9837 9842 9843 + 9843 9838 9837 + 9844 9838 9843 + 9838 9844 9845 + 9845 9839 9838 + 9559 9558 9841 + 9564 9841 9558 + 9846 9841 9564 + 9841 9846 9842 + 9842 9846 9847 + 9847 9843 9842 + 9848 9843 9847 + 9843 9848 9844 + 9844 9848 9849 + 9849 9850 9844 + 9845 9844 9850 + 9564 9851 9846 + 9846 9851 9852 + 9852 9847 9846 + 9853 9847 9852 + 9847 9853 9848 + 9848 9853 9854 + 9854 9849 9848 + 9851 9564 9563 + 9563 9573 9851 + 9851 9573 9855 + 9855 9852 9851 + 9856 9852 9855 + 9852 9856 9853 + 9853 9856 9857 + 9857 9854 9853 + 9403 9854 9857 + 9854 9403 9409 + 9409 9849 9854 + 9858 9855 9573 + 9859 9855 9858 + 9855 9859 9856 + 9856 9859 9860 + 9860 9857 9856 + 9404 9857 9860 + 9857 9404 9403 + 9573 9572 9858 + 9861 9858 9572 + 9862 9858 9861 + 9858 9862 9859 + 9859 9862 9863 + 9863 9860 9859 + 9864 9860 9863 + 9860 9864 9404 + 9404 9864 9395 + 9391 9395 9864 + 9572 9577 9861 + 9865 9861 9577 + 9866 9861 9865 + 9861 9866 9862 + 9862 9866 9867 + 9867 9863 9862 + 9868 9863 9867 + 9863 9868 9864 + 9864 9868 9391 + 9385 9391 9868 + 9577 9581 9865 + 9869 9865 9581 + 9870 9865 9869 + 9865 9870 9866 + 9866 9870 9871 + 9871 9867 9866 + 9872 9867 9871 + 9867 9872 9868 + 9868 9872 9385 + 9386 9385 9872 + 9581 9585 9869 + 9873 9869 9585 + 9874 9869 9873 + 9869 9874 9870 + 9870 9874 9875 + 9875 9871 9870 + 9876 9871 9875 + 9871 9876 9872 + 9872 9876 9386 + 9387 9386 9876 + 9585 9589 9873 + 9877 9873 9589 + 9878 9873 9877 + 9873 9878 9874 + 9874 9878 9879 + 9879 9875 9874 + 9880 9875 9879 + 9875 9880 9876 + 9876 9880 9387 + 9881 9387 9880 + 9379 9387 9881 + 9589 9593 9877 + 9882 9877 9593 + 9883 9877 9882 + 9877 9883 9878 + 9878 9883 9884 + 9884 9879 9878 + 9885 9879 9884 + 9879 9885 9880 + 9880 9885 9881 + 9593 9597 9882 + 9886 9882 9597 + 9887 9882 9886 + 9882 9887 9883 + 9883 9887 9888 + 9888 9884 9883 + 9889 9884 9888 + 9884 9889 9885 + 9885 9889 9890 + 9890 9881 9885 + 9597 9601 9886 + 9891 9886 9601 + 9892 9886 9891 + 9886 9892 9887 + 9887 9892 9893 + 9893 9888 9887 + 9894 9888 9893 + 9888 9894 9889 + 9889 9894 9895 + 9895 9890 9889 + 9601 9605 9891 + 9896 9891 9605 + 9897 9891 9896 + 9891 9897 9892 + 9892 9897 9898 + 9898 9893 9892 + 9899 9893 9898 + 9893 9899 9894 + 9894 9899 9900 + 9900 9895 9894 + 9605 9610 9896 + 9901 9896 9610 + 9902 9896 9901 + 9896 9902 9897 + 9897 9902 9903 + 9903 9898 9897 + 9904 9898 9903 + 9898 9904 9899 + 9899 9904 9905 + 9905 9900 9899 + 9610 9615 9901 + 9906 9901 9615 + 9907 9901 9906 + 9901 9907 9902 + 9902 9907 9908 + 9908 9903 9902 + 9909 9903 9908 + 9903 9909 9904 + 9904 9909 9910 + 9910 9905 9904 + 9615 9911 9906 + 9912 9906 9911 + 9913 9906 9912 + 9906 9913 9907 + 9907 9913 9914 + 9914 9908 9907 + 9915 9908 9914 + 9908 9915 9909 + 9614 9911 9615 + 9911 9614 9620 + 9620 9916 9911 + 9911 9916 9912 + 9917 9912 9916 + 9918 9912 9917 + 9912 9918 9913 + 9913 9918 9919 + 9919 9914 9913 + 9920 9914 9919 + 9914 9920 9915 + 9916 9620 9625 + 9625 9921 9916 + 9916 9921 9917 + 9922 9917 9921 + 9923 9917 9922 + 9917 9923 9918 + 9918 9923 9924 + 9924 9919 9918 + 9925 9919 9924 + 9919 9925 9920 + 9921 9625 9926 + 9926 9927 9921 + 9921 9927 9922 + 9928 9922 9927 + 9929 9922 9928 + 9922 9929 9923 + 9923 9929 9930 + 9930 9924 9923 + 9926 9625 9624 + 9624 9630 9926 + 9931 9926 9630 + 9927 9926 9931 + 9931 9932 9927 + 9927 9932 9928 + 9933 9928 9932 + 9934 9928 9933 + 9928 9934 9929 + 9929 9934 9935 + 9935 9930 9929 + 9630 9936 9931 + 9937 9931 9936 + 9932 9931 9937 + 9937 9938 9932 + 9932 9938 9933 + 9939 9933 9938 + 9940 9933 9939 + 9933 9940 9934 + 9629 9936 9630 + 9936 9629 9941 + 9941 9942 9936 + 9936 9942 9937 + 9943 9937 9942 + 9938 9937 9943 + 9943 9944 9938 + 9938 9944 9939 + 9941 9629 9635 + 9635 9945 9941 + 9946 9941 9945 + 9942 9941 9946 + 9946 9947 9942 + 9942 9947 9943 + 9943 9947 9948 + 9948 9949 9943 + 9944 9943 9949 + 9640 9945 9635 + 9945 9640 9950 + 9950 9951 9945 + 9945 9951 9946 + 9946 9951 9952 + 9952 9953 9946 + 9947 9946 9953 + 9953 9948 9947 + 9950 9640 9954 + 9954 9955 9950 + 9950 9955 9956 + 9956 9957 9950 + 9951 9950 9957 + 9957 9952 9951 + 9639 9954 9640 + 9645 9954 9639 + 9955 9954 9645 + 9645 9958 9955 + 9955 9958 9959 + 9959 9956 9955 + 9960 9956 9959 + 9956 9960 9961 + 9961 9957 9956 + 9952 9957 9961 + 9958 9645 9644 + 9644 9962 9958 + 9959 9958 9962 + 9962 9963 9959 + 9964 9959 9963 + 9959 9964 9960 + 9652 9962 9644 + 9962 9652 9965 + 9965 9963 9962 + 9963 9965 9966 + 9966 9967 9963 + 9963 9967 9964 + 9964 9967 9968 + 9968 9969 9964 + 9960 9964 9969 + 9970 9965 9652 + 9966 9965 9970 + 9970 9971 9966 + 9966 9971 9972 + 9972 9973 9966 + 9967 9966 9973 + 9973 9968 9967 + 9652 9657 9970 + 9974 9970 9657 + 9970 9974 9975 + 9975 9971 9970 + 9971 9975 9976 + 9976 9972 9971 + 9657 9656 9974 + 9977 9974 9656 + 9975 9974 9977 + 9977 9978 9975 + 9975 9978 9979 + 9979 9976 9975 + 9980 9976 9979 + 9972 9976 9980 + 9656 9662 9977 + 9981 9977 9662 + 9977 9981 9982 + 9982 9978 9977 + 9978 9982 9983 + 9983 9979 9978 + 9979 9983 9984 + 9984 9985 9979 + 9979 9985 9980 + 9662 9661 9981 + 9981 9661 9986 + 9986 9987 9981 + 9982 9981 9987 + 9987 9988 9982 + 9983 9982 9988 + 9989 9983 9988 + 9984 9983 9989 + 9661 9990 9986 + 9991 9986 9990 + 9992 9986 9991 + 9986 9992 9993 + 9993 9987 9986 + 9988 9987 9993 + 9666 9990 9661 + 9990 9666 9994 + 9994 9995 9990 + 9990 9995 9991 + 9991 9995 9996 + 9996 9997 9991 + 9992 9991 9997 + 9994 9666 9665 + 9665 9998 9994 + 9999 9994 9998 + 9995 9994 9999 + 9999 9996 9995 + 10000 9996 9999 + 9996 10000 10001 + 10001 9997 9996 + 9670 9998 9665 + 9998 9670 9675 + 9675 10002 9998 + 9998 10002 9999 + 10003 9999 10002 + 9999 10003 10000 + 10000 10003 10004 + 10004 10005 10000 + 10000 10005 10006 + 10006 10001 10000 + 10007 10002 9675 + 10002 10007 10003 + 10004 10003 10007 + 10008 10004 10007 + 10004 10008 10009 + 10010 10004 10009 + 10010 10005 10004 + 10005 10010 10011 + 10011 10006 10005 + 9675 10012 10007 + 10007 10012 10013 + 10013 10014 10007 + 10007 10014 10008 + 10012 9675 9674 + 9674 9680 10012 + 10012 9680 10015 + 10015 10013 10012 + 10016 10013 10015 + 10014 10013 10016 + 10014 10016 10017 + 10017 10018 10014 + 10014 10018 10008 + 10019 10015 9680 + 10015 10019 10020 + 10015 10020 10016 + 10016 10020 10021 + 10017 10016 10021 + 9680 9679 10019 + 10022 10019 9679 + 10020 10019 10022 + 10022 10021 10020 + 10022 10023 10021 + 10021 10023 10024 + 10024 10025 10021 + 10021 10025 10017 + 9679 9678 10022 + 9678 10026 10022 + 10026 10027 10022 + 10027 10028 10022 + 10023 10022 10028 + 10028 10029 10023 + 10024 10023 10029 + 9684 10026 9678 + 9684 9689 10026 + 10027 10026 9689 + 10030 10027 9689 + 9698 10030 9689 + 10031 10030 9698 + 9698 9702 10031 + 10032 10031 9702 + 10027 10031 10032 + 10027 10033 10031 + 10032 9702 9705 + 9705 10034 10032 + 10034 10035 10032 + 10029 10032 10035 + 10029 10028 10032 + 10032 10028 10027 + 10036 10034 9705 + 10036 10037 10034 + 10034 10037 10038 + 10038 10035 10034 + 10038 10039 10035 + 10035 10039 10029 + 10029 10039 10040 + 10040 10024 10029 + 9705 10041 10036 + 10036 10041 10042 + 10042 10043 10036 + 10037 10036 10043 + 10043 10044 10037 + 10044 10045 10037 + 10045 10038 10037 + 10046 10041 9705 + 10041 10046 10047 + 10047 10042 10041 + 10048 10042 10047 + 10042 10048 10049 + 10049 10043 10042 + 10043 10049 10050 + 10050 10044 10043 + 10046 9705 10051 + 10051 10052 10046 + 10046 10052 10053 + 10053 10047 10046 + 10054 10047 10053 + 10048 10047 10054 + 9704 10051 9705 + 10055 10051 9704 + 10055 10052 10051 + 10052 10055 10056 + 10056 10053 10052 + 10057 10053 10056 + 10053 10057 10054 + 10058 10054 10057 + 10048 10054 10058 + 9704 10059 10055 + 10056 10055 10059 + 10060 10056 10059 + 10061 10056 10060 + 10056 10061 10057 + 10057 10061 10062 + 10062 10063 10057 + 10057 10063 10058 + 9703 10059 9704 + 10059 9703 9323 + 9323 9322 10059 + 10059 9322 10060 + 9322 10064 10060 + 10065 10060 10064 + 10066 10060 10065 + 10060 10066 10061 + 10062 10061 10066 + 10066 10067 10062 + 10068 10062 10067 + 10068 10063 10062 + 9321 10064 9322 + 9328 10064 9321 + 10064 9328 10065 + 9332 10065 9328 + 10069 10065 9332 + 10065 10069 10066 + 10066 10069 10070 + 10070 10067 10066 + 10071 10067 10070 + 10067 10071 10068 + 10068 10071 10072 + 10073 10068 10072 + 10063 10068 10073 + 10073 10058 10063 + 9332 9337 10069 + 10070 10069 9337 + 9337 10074 10070 + 10071 10070 10074 + 10074 10075 10071 + 10071 10075 10072 + 9342 10074 9337 + 10074 9342 10076 + 10076 10075 10074 + 10075 10076 10077 + 10077 10072 10075 + 10076 9342 10078 + 10078 10079 10076 + 10076 10079 10080 + 10080 10077 10076 + 10081 10077 10080 + 10072 10077 10081 + 9341 10078 9342 + 9358 10078 9341 + 10079 10078 9358 + 10079 9358 10082 + 10082 10080 10079 + 10080 10082 10083 + 10083 10084 10080 + 10080 10084 10081 + 10085 10081 10084 + 10086 10081 10085 + 10081 10086 10072 + 9357 10082 9358 + 10083 10082 9357 + 9357 9362 10083 + 10087 10083 9362 + 10084 10083 10087 + 10087 10088 10084 + 10084 10088 10085 + 10089 10085 10088 + 10085 10089 10090 + 10085 10090 10086 + 9362 9366 10087 + 10091 10087 9366 + 10088 10087 10091 + 10091 10092 10088 + 10088 10092 10089 + 10093 10089 10092 + 10090 10089 10093 + 10093 10094 10090 + 10086 10090 10094 + 10094 10095 10086 + 10072 10086 10095 + 9366 10096 10091 + 10097 10091 10096 + 10092 10091 10097 + 10097 10098 10092 + 10092 10098 10099 + 10099 10100 10092 + 10100 10093 10092 + 9365 10096 9366 + 10096 9365 9371 + 9371 10101 10096 + 10096 10101 10097 + 10102 10097 10101 + 10097 10102 10103 + 10103 10098 10097 + 10098 10103 10104 + 10104 10099 10098 + 10105 10101 9371 + 10101 10105 10102 + 10102 10105 10106 + 10106 10107 10102 + 10103 10102 10107 + 10107 10108 10103 + 10104 10103 10108 + 9371 10109 10105 + 10105 10109 10110 + 10110 10106 10105 + 9900 10106 10110 + 10106 9900 9905 + 9905 10107 10106 + 10107 9905 9910 + 9910 10108 10107 + 10109 9371 9370 + 9370 10111 10109 + 10110 10109 10111 + 10111 10112 10110 + 9895 10110 10112 + 10110 9895 9900 + 9370 9375 10111 + 10111 9375 10113 + 10113 10112 10111 + 9890 10112 10113 + 10112 9890 9895 + 9379 10113 9375 + 9881 10113 9379 + 10113 9881 9890 + 10039 10038 10040 + 10038 10045 10040 + 10114 10040 10045 + 10040 10114 10115 + 10115 10116 10040 + 10040 10116 10024 + 10117 10024 10116 + 10024 10117 10025 + 10045 10118 10114 + 10114 10118 10119 + 10119 10120 10114 + 10121 10114 10120 + 10121 10115 10114 + 10118 10045 10044 + 10044 10050 10118 + 10119 10118 10050 + 10050 10122 10119 + 10123 10119 10122 + 10120 10119 10123 + 10123 10124 10120 + 10120 10124 10125 + 10125 10121 10120 + 10126 10122 10050 + 10122 10126 10127 + 10127 10128 10122 + 10122 10128 10123 + 10050 10049 10126 + 10126 10049 10048 + 10048 10129 10126 + 10127 10126 10129 + 10129 10130 10127 + 10131 10127 10130 + 10128 10127 10131 + 10131 10132 10128 + 10128 10132 10133 + 10123 10128 10133 + 10058 10129 10048 + 10129 10058 10073 + 10073 10130 10129 + 10130 10073 10134 + 10134 10135 10130 + 10130 10135 10131 + 10136 10131 10135 + 10131 10136 10137 + 10137 10132 10131 + 10132 10137 10138 + 10138 10133 10132 + 10072 10134 10073 + 10095 10134 10072 + 10135 10134 10095 + 10095 10139 10135 + 10135 10139 10136 + 10136 10139 10140 + 10140 10141 10136 + 10137 10136 10141 + 10141 10142 10137 + 10138 10137 10142 + 10139 10095 10094 + 10094 10140 10139 + 10094 10093 10140 + 10140 10093 10100 + 10100 10141 10140 + 10142 10141 10100 + 10100 10143 10142 + 10142 10143 10144 + 10144 10145 10142 + 10142 10145 10138 + 10146 10138 10145 + 10133 10138 10146 + 10143 10100 10099 + 10099 10147 10143 + 10144 10143 10147 + 10148 10144 10147 + 10149 10144 10148 + 10145 10144 10149 + 10145 10149 10146 + 10146 10149 10150 + 10150 10151 10146 + 10133 10146 10151 + 10152 10147 10099 + 10147 10152 10153 + 10153 10154 10147 + 10147 10154 10148 + 10099 10104 10152 + 10152 10104 10155 + 10155 10156 10152 + 10153 10152 10156 + 10156 10157 10153 + 10158 10153 10157 + 10154 10153 10158 + 10108 10155 10104 + 10159 10155 10108 + 10155 10159 10160 + 10160 10156 10155 + 10156 10160 10161 + 10161 10157 10156 + 10157 10161 10162 + 10162 10163 10157 + 10157 10163 10158 + 10108 9910 10159 + 10159 9910 9909 + 9909 9915 10159 + 10160 10159 9915 + 9915 9920 10160 + 10161 10160 9920 + 9920 9925 10161 + 10162 10161 9925 + 9925 10164 10162 + 10165 10162 10164 + 10163 10162 10165 + 10165 10166 10163 + 10163 10166 10167 + 10167 10158 10163 + 10168 10158 10167 + 10158 10168 10154 + 9924 10164 9925 + 10164 9924 9930 + 9930 10169 10164 + 10164 10169 10165 + 10170 10165 10169 + 10166 10165 10170 + 10170 10171 10166 + 10166 10171 10172 + 10172 10167 10166 + 10173 10167 10172 + 10167 10173 10168 + 10169 9930 9935 + 9935 10174 10169 + 10169 10174 10170 + 10175 10170 10174 + 10171 10170 10175 + 10175 10176 10171 + 10171 10176 10177 + 10177 10172 10171 + 10178 10172 10177 + 10172 10178 10173 + 10174 9935 10179 + 10179 10180 10174 + 10174 10180 10175 + 10181 10175 10180 + 10176 10175 10181 + 10181 10182 10176 + 10176 10182 10183 + 10183 10177 10176 + 10179 9935 9934 + 9934 9940 10179 + 10184 10179 9940 + 10180 10179 10184 + 10184 10185 10180 + 10180 10185 10181 + 10181 10185 10186 + 10186 10187 10181 + 10182 10181 10187 + 10187 10188 10182 + 10183 10182 10188 + 9940 10189 10184 + 10184 10189 10190 + 10190 10191 10184 + 10185 10184 10191 + 10191 10186 10185 + 9939 10189 9940 + 10189 9939 10192 + 10192 10190 10189 + 10190 10192 10193 + 10193 10194 10190 + 10190 10194 10195 + 10195 10191 10190 + 10186 10191 10195 + 10196 10192 9939 + 10193 10192 10196 + 10196 10197 10193 + 10193 10197 10198 + 10198 10199 10193 + 10194 10193 10199 + 10199 10200 10194 + 10195 10194 10200 + 9939 9944 10196 + 9949 10196 9944 + 10196 9949 10201 + 10201 10197 10196 + 10197 10201 10202 + 10202 10198 10197 + 10198 10202 10203 + 10203 10204 10198 + 10198 10204 10205 + 10205 10199 10198 + 10200 10199 10205 + 10201 9949 9948 + 9948 10206 10201 + 10201 10206 10207 + 10207 10202 10201 + 10203 10202 10207 + 10207 10208 10203 + 10203 10208 10209 + 10209 10210 10203 + 10204 10203 10210 + 10211 10206 9948 + 10206 10211 10212 + 10212 10207 10206 + 10207 10212 10213 + 10213 10208 10207 + 10208 10213 10214 + 10214 10209 10208 + 9948 9953 10211 + 10211 9953 9952 + 9952 10215 10211 + 10211 10215 10216 + 10216 10212 10211 + 10213 10212 10216 + 10216 10217 10213 + 10213 10217 10218 + 10218 10214 10213 + 10219 10214 10218 + 10209 10214 10219 + 9961 10215 9952 + 10215 9961 10220 + 10220 10216 10215 + 10216 10220 10221 + 10221 10217 10216 + 10217 10221 10222 + 10222 10218 10217 + 10218 10222 10223 + 10223 10224 10218 + 10218 10224 10219 + 10220 9961 9960 + 9960 10225 10220 + 10221 10220 10225 + 10225 10226 10221 + 10222 10221 10226 + 10226 10227 10222 + 10223 10222 10227 + 10227 10228 10223 + 10229 10223 10228 + 10224 10223 10229 + 9969 10225 9960 + 10226 10225 9969 + 9969 10230 10226 + 10226 10230 10231 + 10231 10227 10226 + 10228 10227 10231 + 10231 10232 10228 + 10228 10232 10233 + 10233 10234 10228 + 10228 10234 10229 + 10230 9969 9968 + 9968 10235 10230 + 10230 10235 10236 + 10236 10231 10230 + 10232 10231 10236 + 10236 10237 10232 + 10232 10237 10238 + 10238 10233 10232 + 10239 10235 9968 + 10235 10239 10240 + 10240 10236 10235 + 10236 10240 10241 + 10241 10237 10236 + 10237 10241 10242 + 10242 10238 10237 + 9968 9973 10239 + 10239 9973 9972 + 9972 10243 10239 + 10239 10243 10244 + 10244 10240 10239 + 10241 10240 10244 + 10244 10245 10241 + 10241 10245 10246 + 10246 10242 10241 + 10247 10242 10246 + 10238 10242 10247 + 9980 10243 9972 + 10243 9980 10248 + 10248 10244 10243 + 10244 10248 10249 + 10249 10245 10244 + 10245 10249 10250 + 10250 10246 10245 + 10246 10250 10251 + 10251 10252 10246 + 10246 10252 10247 + 10253 10248 9980 + 10249 10248 10253 + 10253 10254 10249 + 10249 10254 10255 + 10255 10250 10249 + 10251 10250 10255 + 9980 9985 10253 + 10256 10253 9985 + 10253 10256 10257 + 10257 10254 10253 + 10254 10257 10258 + 10258 10255 10254 + 10255 10258 10259 + 10259 10260 10255 + 10255 10260 10251 + 9985 9984 10256 + 10256 9984 10261 + 10262 10256 10261 + 10257 10256 10262 + 10262 10263 10257 + 10258 10257 10263 + 10263 10264 10258 + 10264 10265 10258 + 10259 10258 10265 + 9989 10261 9984 + 10261 9989 10266 + 10266 10267 10261 + 10261 10267 10268 + 10268 10269 10261 + 10261 10269 10262 + 10270 10262 10269 + 10263 10262 10270 + 10266 9989 10271 + 10271 10272 10266 + 10273 10266 10272 + 10267 10266 10273 + 10273 10274 10267 + 10267 10274 10275 + 10275 10268 10267 + 10276 10271 9989 + 10277 10271 10276 + 10272 10271 10277 + 10278 10272 10277 + 10272 10278 10273 + 10279 10273 10278 + 10273 10279 10280 + 10280 10274 10273 + 10281 10276 9989 + 10282 10276 10281 + 10283 10276 10282 + 10276 10283 10277 + 10284 10277 10283 + 10284 10278 10277 + 10285 10278 10284 + 10278 10285 10279 + 9988 10281 9989 + 10286 10281 9988 + 10287 10281 10286 + 10281 10287 10282 + 10288 10282 10287 + 10283 10282 10288 + 10288 10289 10283 + 10283 10289 10284 + 10290 10284 10289 + 10284 10290 10285 + 9988 10291 10286 + 10292 10286 10291 + 10287 10286 10292 + 10292 10293 10287 + 10287 10293 10288 + 10294 10288 10293 + 10288 10294 10295 + 10295 10289 10288 + 10289 10295 10290 + 9993 10291 9988 + 10291 9993 10296 + 10296 10297 10291 + 10291 10297 10292 + 10297 10298 10292 + 10299 10292 10298 + 10292 10299 10300 + 10300 10293 10292 + 10293 10300 10294 + 10296 9993 9992 + 9992 10301 10296 + 10302 10296 10301 + 10302 10297 10296 + 10297 10302 10298 + 10302 10303 10298 + 10303 10304 10298 + 10298 10304 10299 + 10305 10299 10304 + 10300 10299 10305 + 9997 10301 9992 + 10306 10301 9997 + 10301 10306 10302 + 10303 10302 10306 + 10307 10303 10306 + 10304 10303 10307 + 10307 10308 10304 + 10304 10308 10305 + 9997 10001 10306 + 10306 10001 10006 + 10006 10309 10306 + 10306 10309 10310 + 10310 10307 10306 + 10307 10310 10311 + 10312 10307 10311 + 10312 10313 10307 + 10011 10309 10006 + 10309 10011 10314 + 10314 10315 10309 + 10309 10315 10310 + 10316 10310 10315 + 10311 10310 10316 + 10314 10011 10009 + 10009 10317 10314 + 10317 10318 10314 + 10318 10319 10314 + 10319 10320 10314 + 10320 10321 10314 + 10321 10322 10314 + 10314 10322 10315 + 10011 10010 10009 + 10315 10322 10316 + 10323 10316 10322 + 10311 10316 10323 + 10324 10323 10322 + 10325 10323 10324 + 10326 10323 10325 + 10323 10326 10311 + 10322 10321 10324 + 10321 10327 10324 + 10328 10324 10327 + 10324 10328 10329 + 10329 10330 10324 + 10324 10330 10325 + 10331 10325 10330 + 10326 10325 10331 + 10321 10332 10327 + 10332 10333 10327 + 10334 10327 10333 + 10327 10334 10328 + 10328 10334 10335 + 10335 10336 10328 + 10329 10328 10336 + 10320 10332 10321 + 10332 10320 10319 + 10319 10337 10332 + 10332 10337 10338 + 10333 10332 10338 + 10339 10333 10338 + 10333 10339 10334 + 10334 10339 10340 + 10340 10335 10334 + 10319 10341 10337 + 10337 10341 10342 + 10337 10342 10338 + 10343 10338 10342 + 10344 10338 10343 + 10338 10344 10339 + 10339 10344 10345 + 10345 10340 10339 + 10346 10341 10319 + 10347 10341 10346 + 10341 10347 10342 + 10342 10347 10348 + 10342 10348 10343 + 10343 10348 10349 + 10350 10343 10349 + 10344 10343 10350 + 10350 10345 10344 + 10318 10346 10319 + 10318 10351 10346 + 10346 10351 10352 + 10352 10353 10346 + 10346 10353 10347 + 10348 10347 10353 + 10353 10349 10348 + 10351 10318 10317 + 10317 10354 10351 + 10351 10354 10355 + 10352 10351 10355 + 10355 10356 10352 + 10356 10357 10352 + 10352 10357 10349 + 10349 10353 10352 + 10317 10358 10354 + 10354 10358 10359 + 10359 10355 10354 + 10355 10359 10360 + 10356 10355 10360 + 10358 10317 10009 + 10009 10361 10358 + 10358 10361 10362 + 10363 10358 10362 + 10363 10359 10358 + 10360 10359 10363 + 10009 10008 10361 + 10361 10008 10362 + 10008 10018 10362 + 10362 10018 10017 + 10364 10362 10017 + 10362 10364 10363 + 10364 10365 10363 + 10365 10366 10363 + 10367 10363 10366 + 10363 10367 10360 + 10368 10364 10017 + 10365 10364 10368 + 10365 10368 10369 + 10366 10365 10369 + 10370 10366 10369 + 10371 10366 10370 + 10366 10371 10367 + 10367 10371 10372 + 10372 10360 10367 + 10373 10368 10017 + 10368 10373 10369 + 10374 10369 10373 + 10369 10374 10370 + 10374 10375 10370 + 10376 10370 10375 + 10370 10376 10371 + 10377 10373 10017 + 10374 10373 10377 + 10377 10378 10374 + 10374 10378 10379 + 10379 10375 10374 + 10375 10379 10380 + 10381 10375 10380 + 10375 10381 10376 + 10025 10377 10017 + 10377 10025 10117 + 10382 10377 10117 + 10382 10378 10377 + 10378 10382 10383 + 10383 10379 10378 + 10380 10379 10383 + 10384 10380 10383 + 10380 10384 10385 + 10385 10386 10380 + 10386 10381 10380 + 10382 10117 10387 + 10387 10388 10382 + 10388 10383 10382 + 10388 10384 10383 + 10384 10388 10389 + 10384 10389 10390 + 10390 10391 10384 + 10384 10391 10385 + 10116 10387 10117 + 10387 10116 10115 + 10392 10387 10115 + 10388 10387 10392 + 10389 10388 10392 + 10390 10389 10392 + 10392 10393 10390 + 10394 10390 10393 + 10391 10390 10394 + 10394 10395 10391 + 10391 10395 10396 + 10396 10385 10391 + 10392 10115 10121 + 10121 10393 10392 + 10125 10393 10121 + 10393 10125 10394 + 10394 10125 10124 + 10124 10397 10394 + 10397 10398 10394 + 10395 10394 10398 + 10398 10399 10395 + 10396 10395 10399 + 10399 10400 10396 + 10401 10396 10400 + 10401 10385 10396 + 10402 10397 10124 + 10403 10397 10402 + 10397 10403 10404 + 10404 10398 10397 + 10398 10404 10405 + 10405 10399 10398 + 10399 10405 10406 + 10406 10400 10399 + 10124 10123 10402 + 10407 10402 10123 + 10408 10402 10407 + 10402 10408 10403 + 10403 10408 10409 + 10409 10410 10403 + 10404 10403 10410 + 10410 10411 10404 + 10405 10404 10411 + 10133 10407 10123 + 10151 10407 10133 + 10407 10151 10412 + 10407 10412 10408 + 10408 10412 10413 + 10413 10409 10408 + 10414 10409 10413 + 10409 10414 10410 + 10410 10414 10415 + 10415 10411 10410 + 10416 10411 10415 + 10411 10416 10405 + 10406 10405 10416 + 10412 10151 10150 + 10150 10413 10412 + 10413 10150 10148 + 10413 10148 10414 + 10415 10414 10148 + 10154 10415 10148 + 10417 10415 10154 + 10415 10417 10416 + 10416 10417 10418 + 10418 10419 10416 + 10416 10419 10406 + 10148 10150 10149 + 10154 10168 10417 + 10417 10168 10173 + 10173 10420 10417 + 10420 10418 10417 + 10421 10418 10420 + 10419 10418 10421 + 10419 10421 10422 + 10422 10406 10419 + 10400 10406 10422 + 10423 10420 10173 + 10420 10423 10424 + 10424 10425 10420 + 10420 10425 10421 + 10421 10425 10426 + 10426 10422 10421 + 10427 10422 10426 + 10422 10427 10400 + 10400 10427 10401 + 10173 10178 10423 + 10423 10178 10428 + 10428 10429 10423 + 10424 10423 10429 + 10429 10430 10424 + 10424 10430 10431 + 10431 10432 10424 + 10425 10424 10432 + 10432 10426 10425 + 10177 10428 10178 + 10428 10177 10183 + 10183 10433 10428 + 10428 10433 10434 + 10434 10429 10428 + 10429 10434 10435 + 10435 10430 10429 + 10430 10435 10436 + 10436 10431 10430 + 10433 10183 10437 + 10437 10438 10433 + 10433 10438 10439 + 10434 10433 10439 + 10439 10440 10434 + 10435 10434 10440 + 10440 10441 10435 + 10436 10435 10441 + 10188 10437 10183 + 10442 10437 10188 + 10438 10437 10442 + 10442 10443 10438 + 10438 10443 10444 + 10444 10439 10438 + 10188 10445 10442 + 10442 10445 10446 + 10446 10447 10442 + 10443 10442 10447 + 10448 10445 10188 + 10445 10448 10449 + 10449 10446 10445 + 10446 10449 10450 + 10450 10451 10446 + 10446 10451 10452 + 10452 10447 10446 + 10188 10187 10448 + 10448 10187 10186 + 10186 10453 10448 + 10448 10453 10454 + 10454 10449 10448 + 10450 10449 10454 + 10454 10455 10450 + 10450 10455 10456 + 10456 10457 10450 + 10451 10450 10457 + 10195 10453 10186 + 10453 10195 10458 + 10458 10454 10453 + 10454 10458 10459 + 10459 10455 10454 + 10455 10459 10460 + 10460 10456 10455 + 10200 10458 10195 + 10459 10458 10200 + 10200 10461 10459 + 10459 10461 10462 + 10462 10460 10459 + 10463 10460 10462 + 10456 10460 10463 + 10463 10464 10456 + 10456 10464 10465 + 10465 10457 10456 + 10205 10461 10200 + 10461 10205 10466 + 10466 10462 10461 + 10462 10466 10467 + 10467 10468 10462 + 10462 10468 10463 + 10463 10468 10469 + 10469 10470 10463 + 10464 10463 10470 + 10471 10466 10205 + 10467 10466 10471 + 10471 10472 10467 + 10467 10472 10473 + 10473 10474 10467 + 10468 10467 10474 + 10474 10469 10468 + 10205 10204 10471 + 10210 10471 10204 + 10471 10210 10475 + 10475 10472 10471 + 10472 10475 10476 + 10476 10473 10472 + 10473 10476 10477 + 10477 10478 10473 + 10473 10478 10479 + 10479 10474 10473 + 10469 10474 10479 + 10475 10210 10209 + 10209 10480 10475 + 10475 10480 10481 + 10481 10476 10475 + 10477 10476 10481 + 10481 10482 10477 + 10477 10482 10483 + 10483 10484 10477 + 10478 10477 10484 + 10219 10480 10209 + 10480 10219 10485 + 10485 10481 10480 + 10481 10485 10486 + 10486 10482 10481 + 10482 10486 10487 + 10487 10483 10482 + 10488 10485 10219 + 10486 10485 10488 + 10488 10489 10486 + 10486 10489 10490 + 10490 10487 10486 + 10491 10487 10490 + 10483 10487 10491 + 10219 10224 10488 + 10229 10488 10224 + 10488 10229 10492 + 10492 10489 10488 + 10489 10492 10493 + 10493 10490 10489 + 10490 10493 10494 + 10494 10495 10490 + 10490 10495 10491 + 10492 10229 10234 + 10234 10496 10492 + 10493 10492 10496 + 10496 10497 10493 + 10494 10493 10497 + 10497 10498 10494 + 10499 10494 10498 + 10495 10494 10499 + 10499 10500 10495 + 10491 10495 10500 + 10496 10234 10233 + 10233 10501 10496 + 10496 10501 10502 + 10502 10497 10496 + 10498 10497 10502 + 10502 10503 10498 + 10498 10503 10504 + 10504 10505 10498 + 10498 10505 10499 + 10501 10233 10238 + 10238 10506 10501 + 10501 10506 10507 + 10507 10502 10501 + 10503 10502 10507 + 10507 10508 10503 + 10503 10508 10509 + 10509 10504 10503 + 10247 10506 10238 + 10506 10247 10510 + 10510 10507 10506 + 10507 10510 10511 + 10511 10508 10507 + 10508 10511 10512 + 10512 10509 10508 + 10513 10510 10247 + 10511 10510 10513 + 10513 10514 10511 + 10511 10514 10515 + 10515 10512 10511 + 10516 10512 10515 + 10509 10512 10516 + 10247 10252 10513 + 10517 10513 10252 + 10513 10517 10518 + 10518 10514 10513 + 10514 10518 10519 + 10519 10515 10514 + 10515 10519 10520 + 10520 10521 10515 + 10515 10521 10516 + 10252 10251 10517 + 10522 10517 10251 + 10518 10517 10522 + 10522 10523 10518 + 10518 10523 10524 + 10524 10519 10518 + 10520 10519 10524 + 10251 10260 10522 + 10525 10522 10260 + 10522 10525 10526 + 10526 10523 10522 + 10523 10526 10527 + 10527 10524 10523 + 10524 10527 10528 + 10528 10529 10524 + 10524 10529 10520 + 10260 10259 10525 + 10525 10259 10530 + 10531 10525 10530 + 10526 10525 10531 + 10531 10532 10526 + 10527 10526 10532 + 10532 10533 10527 + 10533 10534 10527 + 10528 10527 10534 + 10265 10530 10259 + 10530 10265 10535 + 10535 10536 10530 + 10530 10536 10537 + 10537 10538 10530 + 10530 10538 10531 + 10539 10531 10538 + 10532 10531 10539 + 10535 10265 10264 + 10264 10540 10535 + 10541 10535 10540 + 10536 10535 10541 + 10541 10542 10536 + 10536 10542 10543 + 10543 10537 10536 + 10543 10544 10537 + 10544 10545 10537 + 10540 10264 10546 + 10540 10546 10547 + 10547 10548 10540 + 10540 10548 10541 + 10549 10541 10548 + 10541 10549 10550 + 10550 10542 10541 + 10546 10264 10263 + 10263 10551 10546 + 10547 10546 10551 + 10552 10547 10551 + 10553 10547 10552 + 10547 10553 10548 + 10548 10553 10549 + 10270 10551 10263 + 10551 10270 10554 + 10554 10555 10551 + 10551 10555 10552 + 10556 10552 10555 + 10552 10556 10557 + 10552 10557 10553 + 10549 10553 10557 + 10554 10270 10558 + 10558 10559 10554 + 10560 10554 10559 + 10554 10560 10561 + 10561 10555 10554 + 10555 10561 10556 + 10269 10558 10270 + 10558 10269 10268 + 10558 10268 10275 + 10275 10559 10558 + 10562 10559 10275 + 10559 10562 10560 + 10563 10560 10562 + 10561 10560 10563 + 10563 10564 10561 + 10561 10564 10556 + 10564 10565 10556 + 10565 10566 10556 + 10566 10557 10556 + 10557 10566 10549 + 10275 10567 10562 + 10562 10567 10568 + 10568 10569 10562 + 10562 10569 10570 + 10570 10571 10562 + 10571 10563 10562 + 10567 10275 10274 + 10274 10280 10567 + 10568 10567 10280 + 10280 10572 10568 + 10573 10568 10572 + 10573 10569 10568 + 10569 10573 10574 + 10574 10570 10569 + 10574 10575 10570 + 10570 10575 10576 + 10576 10571 10570 + 10577 10572 10280 + 10578 10572 10577 + 10572 10578 10573 + 10573 10578 10579 + 10574 10573 10579 + 10580 10574 10579 + 10575 10574 10580 + 10280 10279 10577 + 10577 10279 10285 + 10285 10581 10577 + 10577 10581 10582 + 10578 10577 10582 + 10578 10582 10579 + 10583 10581 10285 + 10285 10290 10583 + 10583 10290 10295 + 10584 10583 10295 + 10582 10583 10584 + 10582 10585 10583 + 10295 10586 10584 + 10586 10587 10584 + 10588 10584 10587 + 10579 10584 10588 + 10584 10579 10582 + 10589 10586 10295 + 10590 10586 10589 + 10586 10590 10591 + 10591 10587 10586 + 10591 10592 10587 + 10587 10592 10588 + 10593 10588 10592 + 10579 10588 10593 + 10295 10294 10589 + 10589 10294 10300 + 10300 10594 10589 + 10590 10589 10594 + 10594 10595 10590 + 10590 10595 10311 + 10591 10590 10311 + 10596 10591 10311 + 10592 10591 10596 + 10305 10594 10300 + 10595 10594 10305 + 10595 10305 10312 + 10595 10312 10311 + 10305 10308 10312 + 10311 10326 10596 + 10326 10597 10596 + 10597 10598 10596 + 10599 10596 10598 + 10596 10599 10600 + 10596 10600 10592 + 10592 10600 10601 + 10601 10593 10592 + 10331 10597 10326 + 10597 10331 10602 + 10597 10602 10603 + 10603 10598 10597 + 10598 10603 10604 + 10598 10604 10599 + 10605 10599 10604 + 10600 10599 10605 + 10605 10606 10600 + 10600 10606 10601 + 10602 10331 10607 + 10607 10608 10602 + 10603 10602 10608 + 10609 10603 10608 + 10604 10603 10609 + 10609 10610 10604 + 10604 10610 10605 + 10607 10331 10330 + 10611 10607 10330 + 10608 10607 10611 + 10612 10608 10611 + 10608 10612 10613 + 10613 10609 10608 + 10609 10613 10614 + 10614 10610 10609 + 10610 10614 10615 + 10615 10605 10610 + 10330 10329 10611 + 10611 10329 10616 + 10616 10617 10611 + 10612 10611 10617 + 10617 10618 10612 + 10613 10612 10618 + 10618 10619 10613 + 10614 10613 10619 + 10619 10620 10614 + 10615 10614 10620 + 10336 10616 10329 + 10616 10336 10621 + 10621 10622 10616 + 10616 10622 10623 + 10623 10617 10616 + 10618 10617 10623 + 10623 10624 10618 + 10618 10624 10625 + 10625 10619 10618 + 10620 10619 10625 + 10621 10336 10335 + 10335 10626 10621 + 10621 10626 10627 + 10628 10621 10627 + 10622 10621 10628 + 10628 10629 10622 + 10622 10629 10630 + 10623 10622 10630 + 10335 10340 10626 + 10626 10340 10345 + 10345 10627 10626 + 10631 10627 10345 + 10627 10631 10632 + 10632 10633 10627 + 10627 10633 10628 + 10634 10628 10633 + 10628 10634 10635 + 10635 10629 10628 + 10345 10350 10631 + 10631 10350 10636 + 10636 10637 10631 + 10632 10631 10637 + 10637 10638 10632 + 10639 10632 10638 + 10632 10639 10640 + 10640 10633 10632 + 10633 10640 10634 + 10636 10350 10349 + 10349 10641 10636 + 10642 10636 10641 + 10637 10636 10642 + 10637 10642 10643 + 10643 10638 10637 + 10644 10638 10643 + 10638 10644 10639 + 10645 10639 10644 + 10640 10639 10645 + 10646 10641 10349 + 10641 10646 10647 + 10641 10647 10642 + 10642 10647 10648 + 10648 10643 10642 + 10649 10643 10648 + 10643 10649 10644 + 10349 10357 10646 + 10646 10357 10356 + 10646 10356 10650 + 10647 10646 10650 + 10650 10651 10647 + 10647 10651 10648 + 10652 10648 10651 + 10436 10648 10652 + 10648 10436 10649 + 10441 10649 10436 + 10644 10649 10441 + 10653 10650 10356 + 10650 10653 10654 + 10654 10651 10650 + 10651 10654 10652 + 10652 10654 10655 + 10655 10656 10652 + 10431 10652 10656 + 10652 10431 10436 + 10356 10360 10653 + 10372 10653 10360 + 10654 10653 10372 + 10372 10655 10654 + 10657 10655 10372 + 10655 10657 10658 + 10658 10656 10655 + 10432 10656 10658 + 10656 10432 10431 + 10372 10659 10657 + 10657 10659 10660 + 10657 10660 10401 + 10658 10657 10401 + 10401 10427 10658 + 10426 10658 10427 + 10658 10426 10432 + 10371 10659 10372 + 10661 10659 10371 + 10659 10661 10660 + 10660 10661 10386 + 10660 10386 10385 + 10385 10401 10660 + 10371 10376 10661 + 10376 10381 10661 + 10381 10386 10661 + 10662 10538 10537 + 10538 10662 10539 + 10663 10539 10662 + 10664 10539 10663 + 10539 10664 10532 + 10532 10664 10665 + 10665 10533 10532 + 10662 10666 10663 + 10666 10667 10663 + 10668 10663 10667 + 10663 10668 10669 + 10663 10669 10664 + 10664 10669 10670 + 10670 10665 10664 + 10671 10666 10662 + 10672 10666 10671 + 10666 10672 10673 + 10673 10667 10666 + 10673 10674 10667 + 10667 10674 10668 + 10662 10545 10671 + 10545 10544 10671 + 10671 10544 10675 + 10676 10671 10675 + 10671 10676 10672 + 10672 10676 10677 + 10677 10678 10672 + 10673 10672 10678 + 10678 10679 10673 + 10674 10673 10679 + 10675 10544 10543 + 10675 10543 10542 + 10542 10550 10675 + 10676 10675 10550 + 10677 10676 10550 + 10680 10677 10550 + 10681 10677 10680 + 10681 10678 10677 + 10679 10678 10681 + 10682 10679 10681 + 10682 10683 10679 + 10679 10683 10674 + 10674 10683 10668 + 10684 10680 10550 + 10685 10680 10684 + 10686 10680 10685 + 10680 10686 10681 + 10682 10681 10686 + 10687 10682 10686 + 10683 10682 10687 + 10687 10688 10683 + 10683 10688 10668 + 10550 10689 10684 + 10690 10684 10689 + 10690 10691 10684 + 10684 10691 10685 + 10685 10691 10692 + 10692 10693 10685 + 10686 10685 10693 + 10694 10689 10550 + 10695 10689 10694 + 10689 10695 10690 + 10690 10695 10696 + 10697 10690 10696 + 10691 10690 10697 + 10697 10698 10691 + 10691 10698 10692 + 10550 10549 10694 + 10566 10694 10549 + 10695 10694 10566 + 10566 10699 10695 + 10695 10699 10696 + 10699 10566 10565 + 10699 10565 10700 + 10699 10700 10696 + 10565 10564 10700 + 10700 10564 10563 + 10700 10563 10571 + 10571 10696 10700 + 10696 10571 10576 + 10696 10576 10701 + 10701 10702 10696 + 10696 10702 10703 + 10703 10697 10696 + 10704 10697 10703 + 10697 10704 10698 + 10705 10701 10576 + 10706 10701 10705 + 10702 10701 10706 + 10702 10706 10707 + 10707 10708 10702 + 10702 10708 10703 + 10576 10575 10705 + 10575 10709 10705 + 10710 10705 10709 + 10705 10710 10711 + 10711 10712 10705 + 10705 10712 10706 + 10707 10706 10712 + 10580 10709 10575 + 10580 10713 10709 + 10709 10713 10710 + 10710 10713 10714 + 10714 10715 10710 + 10715 10716 10710 + 10711 10710 10716 + 10713 10580 10717 + 10717 10714 10713 + 10717 10718 10714 + 10714 10718 10719 + 10719 10715 10714 + 10720 10715 10719 + 10715 10720 10721 + 10721 10716 10715 + 10717 10580 10579 + 10579 10722 10717 + 10722 10723 10717 + 10718 10717 10723 + 10723 10724 10718 + 10719 10718 10724 + 10724 10725 10719 + 10726 10719 10725 + 10719 10726 10720 + 10593 10722 10579 + 10722 10593 10727 + 10722 10727 10728 + 10728 10723 10722 + 10723 10728 10724 + 10724 10728 10729 + 10729 10725 10724 + 10730 10725 10729 + 10725 10730 10726 + 10727 10593 10601 + 10601 10731 10727 + 10728 10727 10731 + 10729 10728 10731 + 10732 10729 10731 + 10729 10732 10730 + 10730 10732 10733 + 10733 10734 10730 + 10726 10730 10734 + 10735 10726 10734 + 10720 10726 10735 + 10736 10731 10601 + 10731 10736 10732 + 10732 10736 10737 + 10737 10733 10732 + 10738 10733 10737 + 10734 10733 10738 + 10601 10739 10736 + 10736 10739 10740 + 10740 10737 10736 + 10737 10740 10741 + 10737 10741 10738 + 10742 10738 10741 + 10743 10738 10742 + 10738 10743 10734 + 10739 10601 10606 + 10606 10744 10739 + 10739 10744 10745 + 10745 10740 10739 + 10740 10745 10746 + 10741 10740 10746 + 10741 10746 10742 + 10744 10606 10605 + 10605 10615 10744 + 10744 10615 10747 + 10747 10745 10744 + 10745 10747 10746 + 10746 10747 10620 + 10620 10748 10746 + 10746 10748 10742 + 10620 10747 10615 + 10625 10748 10620 + 10748 10625 10749 + 10749 10750 10748 + 10748 10750 10742 + 10751 10742 10750 + 10752 10742 10751 + 10742 10752 10743 + 10753 10749 10625 + 10754 10749 10753 + 10750 10749 10754 + 10754 10755 10750 + 10750 10755 10751 + 10625 10624 10753 + 10756 10753 10624 + 10757 10753 10756 + 10753 10757 10754 + 10758 10754 10757 + 10755 10754 10758 + 10758 10759 10755 + 10751 10755 10759 + 10624 10623 10756 + 10630 10756 10623 + 10760 10756 10630 + 10756 10760 10757 + 10757 10760 10761 + 10761 10762 10757 + 10757 10762 10758 + 10763 10758 10762 + 10758 10763 10759 + 10630 10764 10760 + 10761 10760 10764 + 10764 10765 10761 + 10766 10761 10765 + 10762 10761 10766 + 10766 10767 10762 + 10762 10767 10763 + 10768 10763 10767 + 10759 10763 10768 + 10769 10764 10630 + 10764 10769 10770 + 10770 10765 10764 + 10770 10771 10765 + 10765 10771 10766 + 10766 10771 10772 + 10773 10766 10772 + 10767 10766 10773 + 10769 10630 10774 + 10774 10775 10769 + 10769 10775 10776 + 10776 10770 10769 + 10771 10770 10776 + 10776 10772 10771 + 10629 10774 10630 + 10777 10774 10629 + 10777 10775 10774 + 10775 10777 10778 + 10778 10776 10775 + 10772 10776 10778 + 10772 10778 10779 + 10779 10780 10772 + 10772 10780 10443 + 10443 10773 10772 + 10629 10635 10777 + 10778 10777 10635 + 10635 10779 10778 + 10781 10779 10635 + 10781 10780 10779 + 10780 10781 10782 + 10782 10444 10780 + 10780 10444 10443 + 10635 10634 10781 + 10781 10634 10640 + 10640 10782 10781 + 10645 10782 10640 + 10782 10645 10439 + 10439 10444 10782 + 10439 10645 10783 + 10783 10440 10439 + 10441 10440 10783 + 10441 10783 10644 + 10644 10783 10645 + 10447 10773 10443 + 10773 10447 10452 + 10452 10784 10773 + 10773 10784 10767 + 10767 10784 10785 + 10785 10768 10767 + 10784 10452 10786 + 10786 10787 10784 + 10784 10787 10785 + 10788 10786 10452 + 10789 10786 10788 + 10787 10786 10789 + 10789 10790 10787 + 10787 10790 10791 + 10791 10785 10787 + 10452 10451 10788 + 10457 10788 10451 + 10788 10457 10465 + 10465 10792 10788 + 10788 10792 10789 + 10789 10792 10793 + 10793 10794 10789 + 10790 10789 10794 + 10794 10795 10790 + 10790 10795 10796 + 10796 10791 10790 + 10792 10465 10797 + 10797 10793 10792 + 10793 10797 10798 + 10798 10799 10793 + 10793 10799 10800 + 10800 10794 10793 + 10795 10794 10800 + 10801 10797 10465 + 10798 10797 10801 + 10801 10802 10798 + 10798 10802 10803 + 10803 10804 10798 + 10799 10798 10804 + 10465 10464 10801 + 10470 10801 10464 + 10801 10470 10805 + 10805 10802 10801 + 10802 10805 10806 + 10806 10803 10802 + 10803 10806 10807 + 10807 10808 10803 + 10803 10808 10809 + 10809 10804 10803 + 10805 10470 10469 + 10469 10810 10805 + 10805 10810 10811 + 10811 10806 10805 + 10807 10806 10811 + 10811 10812 10807 + 10807 10812 10813 + 10813 10814 10807 + 10808 10807 10814 + 10479 10810 10469 + 10810 10479 10815 + 10815 10811 10810 + 10811 10815 10816 + 10816 10812 10811 + 10812 10816 10817 + 10817 10813 10812 + 10818 10815 10479 + 10816 10815 10818 + 10818 10819 10816 + 10816 10819 10820 + 10820 10817 10816 + 10821 10817 10820 + 10813 10817 10821 + 10479 10478 10818 + 10484 10818 10478 + 10818 10484 10822 + 10822 10819 10818 + 10819 10822 10823 + 10823 10820 10819 + 10820 10823 10824 + 10824 10825 10820 + 10820 10825 10821 + 10822 10484 10483 + 10483 10826 10822 + 10822 10826 10827 + 10827 10823 10822 + 10824 10823 10827 + 10827 10828 10824 + 10824 10828 10829 + 10829 10830 10824 + 10825 10824 10830 + 10491 10826 10483 + 10826 10491 10831 + 10831 10827 10826 + 10827 10831 10832 + 10832 10828 10827 + 10828 10832 10833 + 10833 10829 10828 + 10500 10831 10491 + 10832 10831 10500 + 10500 10834 10832 + 10832 10834 10835 + 10835 10833 10832 + 10836 10833 10835 + 10829 10833 10836 + 10836 10837 10829 + 10829 10837 10838 + 10838 10830 10829 + 10839 10834 10500 + 10834 10839 10840 + 10840 10835 10834 + 10835 10840 10841 + 10841 10842 10835 + 10835 10842 10836 + 10500 10499 10839 + 10839 10499 10505 + 10505 10843 10839 + 10840 10839 10843 + 10843 10844 10840 + 10841 10840 10844 + 10844 10845 10841 + 10846 10841 10845 + 10842 10841 10846 + 10846 10847 10842 + 10836 10842 10847 + 10843 10505 10504 + 10504 10848 10843 + 10843 10848 10849 + 10849 10844 10843 + 10845 10844 10849 + 10849 10850 10845 + 10845 10850 10851 + 10851 10852 10845 + 10845 10852 10846 + 10848 10504 10509 + 10509 10853 10848 + 10848 10853 10854 + 10854 10849 10848 + 10850 10849 10854 + 10854 10855 10850 + 10850 10855 10856 + 10856 10851 10850 + 10516 10853 10509 + 10853 10516 10857 + 10857 10854 10853 + 10854 10857 10858 + 10858 10855 10854 + 10855 10858 10859 + 10859 10856 10855 + 10860 10857 10516 + 10858 10857 10860 + 10860 10861 10858 + 10858 10861 10862 + 10862 10859 10858 + 10863 10859 10862 + 10856 10859 10863 + 10516 10521 10860 + 10864 10860 10521 + 10860 10864 10865 + 10865 10861 10860 + 10861 10865 10866 + 10866 10862 10861 + 10862 10866 10867 + 10867 10868 10862 + 10862 10868 10863 + 10521 10520 10864 + 10869 10864 10520 + 10865 10864 10869 + 10869 10870 10865 + 10865 10870 10871 + 10871 10866 10865 + 10867 10866 10871 + 10520 10529 10869 + 10872 10869 10529 + 10869 10872 10873 + 10873 10870 10869 + 10870 10873 10874 + 10874 10871 10870 + 10871 10874 10875 + 10875 10876 10871 + 10871 10876 10867 + 10529 10528 10872 + 10872 10528 10877 + 10877 10878 10872 + 10878 10879 10872 + 10873 10872 10879 + 10879 10880 10873 + 10874 10873 10880 + 10880 10881 10874 + 10875 10874 10881 + 10534 10877 10528 + 10877 10534 10882 + 10882 10883 10877 + 10877 10883 10884 + 10884 10878 10877 + 10885 10878 10884 + 10878 10885 10886 + 10886 10879 10878 + 10880 10879 10886 + 10882 10534 10533 + 10533 10887 10882 + 10888 10882 10887 + 10883 10882 10888 + 10888 10889 10883 + 10883 10889 10890 + 10890 10884 10883 + 10885 10884 10890 + 10887 10533 10665 + 10887 10665 10670 + 10670 10891 10887 + 10887 10891 10888 + 10892 10888 10891 + 10888 10892 10893 + 10893 10889 10888 + 10889 10893 10894 + 10894 10890 10889 + 10895 10891 10670 + 10891 10895 10892 + 10896 10892 10895 + 10893 10892 10896 + 10896 10897 10893 + 10893 10897 10898 + 10898 10899 10893 + 10899 10894 10893 + 10670 10900 10895 + 10895 10900 10901 + 10901 10902 10895 + 10895 10902 10896 + 10903 10896 10902 + 10903 10897 10896 + 10900 10670 10904 + 10904 10905 10900 + 10901 10900 10905 + 10905 10906 10901 + 10907 10901 10906 + 10907 10902 10901 + 10902 10907 10903 + 10669 10904 10670 + 10908 10904 10669 + 10908 10905 10904 + 10905 10908 10688 + 10688 10906 10905 + 10687 10906 10688 + 10906 10687 10907 + 10907 10687 10686 + 10903 10907 10686 + 10909 10903 10686 + 10897 10903 10909 + 10669 10668 10908 + 10688 10908 10668 + 9849 9409 9414 + 9414 9850 9849 + 9850 9414 10910 + 10910 10911 9850 + 9850 10911 9845 + 10912 9845 10911 + 9839 9845 10912 + 10912 9840 9839 + 10910 9414 9413 + 9413 9419 10910 + 10913 10910 9419 + 10911 10910 10913 + 10913 10914 10911 + 10911 10914 10912 + 10915 10912 10914 + 9840 10912 10915 + 10915 10916 9840 + 9840 10916 9835 + 9419 9424 10913 + 10917 10913 9424 + 10914 10913 10917 + 10917 10918 10914 + 10914 10918 10915 + 10919 10915 10918 + 10916 10915 10919 + 10919 10920 10916 + 10916 10920 10921 + 10921 9835 10916 + 9830 9835 10921 + 9424 10922 10917 + 10923 10917 10922 + 10918 10917 10923 + 10923 10924 10918 + 10918 10924 10919 + 10925 10919 10924 + 10920 10919 10925 + 9423 10922 9424 + 10922 9423 9429 + 9429 10926 10922 + 10922 10926 10923 + 10927 10923 10926 + 10924 10923 10927 + 10927 10928 10924 + 10924 10928 10925 + 10929 10925 10928 + 10930 10925 10929 + 10925 10930 10920 + 10926 9429 9434 + 9434 10931 10926 + 10926 10931 10927 + 10932 10927 10931 + 10928 10927 10932 + 10932 10933 10928 + 10928 10933 10929 + 10934 10929 10933 + 10935 10929 10934 + 10929 10935 10930 + 10931 9434 10936 + 10936 10937 10931 + 10931 10937 10932 + 10938 10932 10937 + 10933 10932 10938 + 10938 10939 10933 + 10933 10939 10934 + 10936 9434 9433 + 9433 10940 10936 + 10941 10936 10940 + 10937 10936 10941 + 10941 10942 10937 + 10937 10942 10938 + 10943 10938 10942 + 10939 10938 10943 + 9438 10940 9433 + 10940 9438 9443 + 9443 10944 10940 + 10940 10944 10941 + 10945 10941 10944 + 10942 10941 10945 + 10945 10946 10942 + 10942 10946 10943 + 10947 10943 10946 + 10948 10943 10947 + 10943 10948 10939 + 10944 9443 10949 + 10949 10950 10944 + 10944 10950 10945 + 10951 10945 10950 + 10946 10945 10951 + 10951 10952 10946 + 10946 10952 10947 + 10953 10949 9443 + 10954 10949 10953 + 10950 10949 10954 + 10954 10955 10950 + 10950 10955 10951 + 10956 10951 10955 + 10952 10951 10956 + 9443 9442 10953 + 10957 10953 9442 + 10953 10957 10958 + 10953 10958 10954 + 10959 10954 10958 + 10955 10954 10959 + 10959 10960 10955 + 10955 10960 10956 + 9442 9441 10957 + 10957 9441 9448 + 9448 10961 10957 + 10961 10962 10957 + 10958 10957 10962 + 10962 10963 10958 + 10958 10963 10964 + 10964 10959 10958 + 10965 10959 10964 + 10960 10959 10965 + 10966 10961 9448 + 10961 10966 10967 + 10967 10968 10961 + 10961 10968 10969 + 10969 10962 10961 + 10963 10962 10969 + 10963 10969 10970 + 10970 10964 10963 + 9448 9447 10966 + 10966 9447 9717 + 10971 10966 9717 + 10967 10966 10971 + 10971 9745 10967 + 10972 10967 9745 + 10968 10967 10972 + 9446 9717 9447 + 9745 10971 9736 + 9736 10971 9731 + 9722 9731 10971 + 9717 9722 10971 + 8740 8739 9767 + 9767 8739 10973 + 10973 9762 9767 + 9762 10973 10974 + 9762 10974 9757 + 9752 9757 10974 + 8738 10973 8739 + 10974 10973 8738 + 8738 10975 10974 + 10974 10975 9752 + 8738 8737 10975 + 10975 8737 10976 + 10976 10977 10975 + 10975 10977 9752 + 10976 8737 10978 + 10978 10979 10976 + 10980 10981 10982 + 10983 10981 10980 + 10981 10983 10984 + 10981 10984 10985 + 10985 10986 10981 + 10981 10986 10987 + 10980 10988 10983 + 10983 10988 10989 + 10989 10990 10983 + 10984 10983 10990 + 10990 10991 10984 + 10984 10991 10992 + 10992 10985 10984 + 10980 10993 10988 + 10988 10993 10994 + 10994 10989 10988 + 10989 10994 10995 + 10989 10995 10996 + 10996 10990 10989 + 10991 10990 10996 + 10993 10980 10997 + 10997 10998 10993 + 10994 10993 10998 + 10999 10994 10998 + 10995 10994 10999 + 10999 11000 10995 + 10996 10995 11000 + 11001 10997 10980 + 11002 10997 11001 + 10998 10997 11002 + 11002 11003 10998 + 10998 11003 11004 + 11004 11005 10998 + 10998 11005 10999 + 11006 10999 11005 + 10999 11006 11000 + 11001 11007 11002 + 11008 11002 11007 + 11003 11002 11008 + 11008 11009 11003 + 11003 11009 11010 + 11004 11003 11010 + 11011 11007 11001 + 11007 11011 11012 + 11012 11013 11007 + 11007 11013 11008 + 11014 11008 11013 + 11009 11008 11014 + 11014 11015 11009 + 11009 11015 11016 + 11016 11010 11009 + 11012 11011 11017 + 11018 11012 11017 + 11019 11012 11018 + 11013 11012 11019 + 11019 11020 11013 + 11013 11020 11014 + 11021 11017 11011 + 11017 11021 11022 + 11017 11022 11023 + 11023 11024 11017 + 11017 11024 11025 + 11025 11018 11017 + 11011 11026 11021 + 11021 11026 11027 + 11027 11028 11021 + 11022 11021 11028 + 11028 11029 11022 + 11022 11029 11030 + 11030 11023 11022 + 53 11026 11011 + 52 11027 11026 + 11026 11001 52 + 11031 11032 11033 + 11032 11034 11033 + 11034 11035 11033 + 11035 11036 11033 + 11037 11033 11036 + 11033 11037 11038 + 11038 11039 11033 + 11033 11039 11040 + 11040 11041 11033 + 11033 11041 11042 + 11043 11034 11032 + 11034 11043 11044 + 11044 11045 11034 + 11034 11045 11046 + 11046 11035 11034 + 11032 11047 11043 + 11048 11043 11047 + 11044 11043 11048 + 11048 11049 11044 + 11050 11044 11049 + 11045 11044 11050 + 11050 11051 11045 + 11046 11045 11051 + 11032 11052 11047 + 11047 11052 11053 + 11053 11054 11047 + 11047 11054 11048 + 11052 11032 11055 + 11055 64 11052 + 11053 11052 64 + 11056 11053 64 + 11057 11053 11056 + 11053 11057 11054 + 11054 11057 11058 + 11058 11059 11054 + 11054 11059 11048 + 64 11060 11056 + 11061 11056 11060 + 11061 11062 11056 + 11056 11062 11057 + 11057 11062 11063 + 11063 11064 11057 + 11064 11058 11057 + 11065 11060 64 + 11066 11060 11065 + 11060 11066 11061 + 11061 11066 11067 + 11068 11061 11067 + 11062 11061 11068 + 11068 11063 11062 + 64 11069 11065 + 11040 11070 11041 + 11070 11040 11071 + 11071 11072 11070 + 11073 11072 11071 + 11072 11073 11074 + 11074 11075 11072 + 11076 11072 11075 + 11071 11040 11039 + 11077 11071 11039 + 11073 11071 11077 + 11077 11078 11073 + 11073 11078 11079 + 11074 11073 11079 + 11079 11080 11074 + 11081 11074 11080 + 11081 11075 11074 + 11082 11077 11039 + 11083 11077 11082 + 11083 11078 11077 + 11078 11083 11084 + 11084 11079 11078 + 11039 11085 11082 + 11086 11082 11085 + 11082 11086 11087 + 11082 11087 11083 + 11083 11087 11088 + 11088 11089 11083 + 11089 11084 11083 + 11090 11085 11039 + 11091 11085 11090 + 11085 11091 11086 + 11092 11086 11091 + 11087 11086 11092 + 11092 11088 11087 + 11093 11088 11092 + 11088 11093 11094 + 11094 11089 11088 + 11039 11038 11090 + 11095 11090 11038 + 11091 11090 11095 + 11095 11096 11091 + 11091 11096 11097 + 11097 11092 11091 + 11098 11092 11097 + 11092 11098 11093 + 11038 11099 11095 + 11100 11095 11099 + 11095 11100 11101 + 11101 11096 11095 + 11096 11101 11102 + 11102 11097 11096 + 11103 11099 11038 + 11104 11099 11103 + 11099 11104 11100 + 11105 11100 11104 + 11101 11100 11105 + 11105 11106 11101 + 11101 11106 11107 + 11107 11102 11101 + 11038 11037 11103 + 11108 11103 11037 + 11109 11103 11108 + 11103 11109 11104 + 11104 11109 11110 + 11110 11111 11104 + 11104 11111 11105 + 11037 11112 11108 + 11113 11108 11112 + 11114 11108 11113 + 11108 11114 11109 + 11110 11109 11114 + 11036 11112 11037 + 11115 11112 11036 + 11112 11115 11113 + 11116 11113 11115 + 11117 11113 11116 + 11113 11117 11114 + 11114 11117 11118 + 11118 11119 11114 + 11114 11119 11110 + 11115 11036 11035 + 11035 11120 11115 + 11115 11120 11116 + 11121 11116 11120 + 11122 11116 11121 + 11116 11122 11117 + 11118 11117 11122 + 11123 11120 11035 + 11120 11123 11121 + 11124 11121 11123 + 11125 11121 11124 + 11121 11125 11122 + 11122 11125 11126 + 11126 11127 11122 + 11122 11127 11118 + 11035 11046 11123 + 11123 11046 11128 + 11128 11129 11123 + 11123 11129 11124 + 11130 11124 11129 + 11131 11124 11130 + 11124 11131 11125 + 11126 11125 11131 + 11051 11128 11046 + 11132 11128 11051 + 11128 11132 11133 + 11133 11129 11128 + 11129 11133 11130 + 11134 11130 11133 + 11135 11130 11134 + 11130 11135 11131 + 11051 11136 11132 + 11132 11136 11137 + 11137 11138 11132 + 11133 11132 11138 + 11138 11139 11133 + 11133 11139 11134 + 11140 11136 11051 + 11136 11140 11141 + 11141 11137 11136 + 11137 11141 11142 + 11142 11143 11137 + 11137 11143 11144 + 11144 11138 11137 + 11051 11050 11140 + 11140 11050 11145 + 11145 11146 11140 + 11140 11146 11147 + 11147 11141 11140 + 11142 11141 11147 + 11049 11145 11050 + 11148 11145 11049 + 11146 11145 11148 + 11146 11148 11149 + 11149 11147 11146 + 11147 11149 11150 + 11150 11151 11147 + 11147 11151 11142 + 11049 11152 11148 + 11149 11148 11152 + 11153 11149 11152 + 11150 11149 11153 + 11153 11154 11150 + 11155 11150 11154 + 11151 11150 11155 + 11155 11156 11151 + 11142 11151 11156 + 11157 11152 11049 + 11152 11157 11158 + 11158 11159 11152 + 11152 11159 11153 + 11160 11153 11159 + 11153 11160 11161 + 11161 11154 11153 + 11049 11048 11157 + 11157 11048 11162 + 11162 11163 11157 + 11157 11163 11164 + 11164 11165 11157 + 11165 11158 11157 + 11059 11162 11048 + 11166 11162 11059 + 11162 11166 11163 + 11163 11166 11167 + 11167 11164 11163 + 11168 11164 11167 + 11164 11168 11169 + 11169 11165 11164 + 11059 11170 11166 + 11167 11166 11170 + 11170 11171 11167 + 11171 11172 11167 + 11173 11167 11172 + 11167 11173 11168 + 11059 11058 11170 + 11170 11058 11064 + 11064 11171 11170 + 11064 11174 11171 + 11171 11174 11175 + 11175 11172 11171 + 11172 11175 11176 + 11172 11176 11173 + 11177 11173 11176 + 11168 11173 11177 + 11174 11064 11063 + 11063 11178 11174 + 11174 11178 11179 + 11179 11180 11174 + 11180 11175 11174 + 11176 11175 11180 + 11180 11181 11176 + 11176 11181 11177 + 11068 11178 11063 + 11178 11068 11182 + 11182 11179 11178 + 11182 11183 11179 + 11179 11183 11184 + 11184 11180 11179 + 11180 11184 11181 + 11181 11184 11185 + 11185 11186 11181 + 11181 11186 11177 + 11182 11068 11067 + 11187 11182 11067 + 11183 11182 11187 + 11187 11188 11183 + 11184 11183 11188 + 11188 11189 11184 + 11189 11185 11184 + 11190 11185 11189 + 11186 11185 11190 + 11186 11190 11191 + 11191 11177 11186 + 11067 11192 11187 + 11193 11187 11192 + 11187 11193 11188 + 11188 11193 11194 + 11194 11189 11188 + 11189 11194 11195 + 11189 11195 11190 + 11191 11190 11195 + 11196 11192 11067 + 11192 11196 11197 + 11192 11197 11193 + 11194 11193 11197 + 11197 11198 11194 + 11195 11194 11198 + 11198 11199 11195 + 11195 11199 11200 + 11200 11191 11195 + 11067 11201 11196 + 11202 11196 11201 + 11197 11196 11202 + 11202 11198 11197 + 11198 11202 11203 + 11203 11199 11198 + 11199 11203 11204 + 11204 11200 11199 + 11067 11205 11201 + 11201 11205 11206 + 11206 11207 11201 + 11201 11207 11202 + 11205 11067 11208 + 11208 11209 11205 + 11205 11209 11210 + 11206 11205 11210 + 11210 11211 11206 + 11212 11206 11211 + 11212 11207 11206 + 11213 11208 11067 + 11214 11208 11213 + 11208 11214 11209 + 11209 11214 11215 + 11215 11216 11209 + 11209 11216 11210 + 11081 11213 11067 + 11080 11213 11081 + 11213 11080 11217 + 11213 11217 11214 + 11215 11214 11217 + 11217 11218 11215 + 11219 11215 11218 + 11216 11215 11219 + 11066 11081 11067 + 11075 11081 11066 + 11066 11065 11075 + 11075 11065 11220 + 11065 11221 11220 + 11217 11080 11079 + 11079 11218 11217 + 11222 11218 11079 + 11218 11222 11219 + 11219 11222 11223 + 11223 11224 11219 + 11224 11225 11219 + 11216 11219 11225 + 11225 11226 11216 + 11216 11226 11210 + 11079 11084 11222 + 11222 11084 11089 + 11089 11223 11222 + 11223 11089 11094 + 11223 11094 11227 + 11227 11224 11223 + 11228 11224 11227 + 11224 11228 11229 + 11229 11225 11224 + 11229 11226 11225 + 11226 11229 11230 + 11230 11210 11226 + 11227 11094 11093 + 11231 11227 11093 + 11228 11227 11231 + 11231 11232 11228 + 11229 11228 11232 + 11230 11229 11232 + 11233 11230 11232 + 11234 11230 11233 + 11234 11210 11230 + 11210 11234 11235 + 11235 11211 11210 + 11236 11231 11093 + 11236 11232 11231 + 11232 11236 11237 + 11237 11238 11232 + 11232 11238 11239 + 11239 11233 11232 + 11093 11098 11236 + 11236 11098 11240 + 11240 11241 11236 + 11241 11237 11236 + 11242 11237 11241 + 11237 11242 11238 + 11238 11242 11243 + 11243 11239 11238 + 11097 11240 11098 + 11244 11240 11097 + 11240 11244 11245 + 11245 11241 11240 + 11241 11245 11246 + 11246 11247 11241 + 11241 11247 11242 + 11243 11242 11247 + 11097 11102 11244 + 11244 11102 11107 + 11107 11248 11244 + 11244 11248 11249 + 11249 11245 11244 + 11246 11245 11249 + 11249 11250 11246 + 11246 11250 11251 + 11251 11252 11246 + 11247 11246 11252 + 11253 11248 11107 + 11248 11253 11254 + 11254 11249 11248 + 11249 11254 11255 + 11255 11250 11249 + 11250 11255 11256 + 11256 11251 11250 + 11107 11257 11253 + 11253 11257 11258 + 11258 11259 11253 + 11253 11259 11260 + 11260 11254 11253 + 11255 11254 11260 + 11257 11107 11106 + 11106 11261 11257 + 11258 11257 11261 + 11261 11262 11258 + 11263 11258 11262 + 11258 11263 11264 + 11264 11259 11258 + 11259 11264 11265 + 11265 11260 11259 + 11261 11106 11105 + 11105 11266 11261 + 11261 11266 11267 + 11267 11262 11261 + 11268 11262 11267 + 11262 11268 11263 + 11263 11268 11269 + 11269 11270 11263 + 11264 11263 11270 + 11266 11105 11111 + 11111 11271 11266 + 11267 11266 11271 + 11271 11272 11267 + 11273 11267 11272 + 11267 11273 11268 + 11268 11273 11274 + 11274 11269 11268 + 11271 11111 11110 + 11110 11275 11271 + 11271 11275 11276 + 11276 11272 11271 + 11277 11272 11276 + 11272 11277 11273 + 11274 11273 11277 + 11277 11278 11274 + 11279 11274 11278 + 11269 11274 11279 + 11275 11110 11119 + 11119 11280 11275 + 11276 11275 11280 + 11280 11281 11276 + 11282 11276 11281 + 11276 11282 11277 + 11277 11282 11283 + 11283 11278 11277 + 11280 11119 11118 + 11118 11284 11280 + 11280 11284 11285 + 11285 11281 11280 + 11286 11281 11285 + 11281 11286 11282 + 11283 11282 11286 + 11286 11287 11283 + 11288 11283 11287 + 11278 11283 11288 + 11284 11118 11127 + 11127 11289 11284 + 11285 11284 11289 + 11289 11290 11285 + 11291 11285 11290 + 11285 11291 11286 + 11286 11291 11292 + 11292 11287 11286 + 11289 11127 11126 + 11126 11293 11289 + 11289 11293 11294 + 11294 11290 11289 + 11295 11290 11294 + 11290 11295 11291 + 11292 11291 11295 + 11295 11296 11292 + 11297 11292 11296 + 11287 11292 11297 + 11293 11126 11298 + 11298 11299 11293 + 11294 11293 11299 + 11299 11300 11294 + 11301 11294 11300 + 11294 11301 11295 + 11295 11301 11302 + 11302 11296 11295 + 11131 11298 11126 + 11303 11298 11131 + 11299 11298 11303 + 11303 11304 11299 + 11299 11304 11305 + 11305 11300 11299 + 11306 11300 11305 + 11300 11306 11301 + 11302 11301 11306 + 11131 11135 11303 + 11303 11135 11307 + 11307 11308 11303 + 11304 11303 11308 + 11308 11309 11304 + 11305 11304 11309 + 11309 11310 11305 + 11311 11305 11310 + 11305 11311 11306 + 11134 11307 11135 + 11307 11134 11312 + 11312 11313 11307 + 11307 11313 11314 + 11314 11308 11307 + 11309 11308 11314 + 11314 11315 11309 + 11309 11315 11316 + 11316 11310 11309 + 11312 11134 11139 + 11139 11317 11312 + 11312 11317 11318 + 11318 11319 11312 + 11313 11312 11319 + 11319 11320 11313 + 11314 11313 11320 + 11320 11321 11314 + 11315 11314 11321 + 11317 11139 11138 + 11138 11144 11317 + 11317 11144 11322 + 11322 11323 11317 + 11317 11323 11318 + 11324 11318 11323 + 11325 11318 11324 + 11318 11325 11326 + 11326 11319 11318 + 11320 11319 11326 + 11327 11322 11144 + 11328 11322 11327 + 11328 11323 11322 + 11323 11328 11324 + 11324 11328 11329 + 11329 11330 11324 + 11331 11324 11330 + 11324 11331 11325 + 11144 11143 11327 + 11332 11327 11143 + 11327 11332 11333 + 11333 11329 11327 + 11327 11329 11328 + 11143 11142 11332 + 11156 11332 11142 + 11333 11332 11156 + 11156 11334 11333 + 11335 11333 11334 + 11329 11333 11335 + 11335 11330 11329 + 11330 11335 11336 + 11336 11337 11330 + 11330 11337 11331 + 11338 11331 11337 + 11325 11331 11338 + 11334 11156 11155 + 11334 11155 11339 + 11339 11340 11334 + 11334 11340 11335 + 11336 11335 11340 + 11340 11341 11336 + 11342 11336 11341 + 11337 11336 11342 + 11342 11343 11337 + 11337 11343 11338 + 11344 11339 11155 + 11341 11339 11344 + 11341 11340 11339 + 11345 11344 11155 + 11346 11344 11345 + 11344 11346 11347 + 11347 11348 11344 + 11344 11348 11341 + 11341 11348 11342 + 11349 11342 11348 + 11343 11342 11349 + 11154 11345 11155 + 11350 11345 11154 + 11345 11350 11351 + 11351 11352 11345 + 11345 11352 11346 + 11154 11161 11350 + 11350 11161 11353 + 11353 11354 11350 + 11351 11350 11354 + 11354 11355 11351 + 11356 11351 11355 + 11352 11351 11356 + 11356 11357 11352 + 11346 11352 11357 + 11161 11358 11353 + 11359 11353 11358 + 11360 11353 11359 + 11353 11360 11361 + 11361 11354 11353 + 11355 11354 11361 + 11362 11358 11161 + 11363 11358 11362 + 11358 11363 11359 + 11359 11363 11364 + 11364 11365 11359 + 11360 11359 11365 + 11161 11160 11362 + 11362 11160 11366 + 11366 11367 11362 + 11368 11362 11367 + 11362 11368 11363 + 11363 11368 11369 + 11369 11364 11363 + 11159 11366 11160 + 11366 11159 11158 + 11158 11370 11366 + 11366 11370 11371 + 11371 11367 11366 + 11367 11371 11372 + 11372 11373 11367 + 11367 11373 11368 + 11368 11373 11374 + 11374 11369 11368 + 11370 11158 11165 + 11165 11375 11370 + 11370 11375 11376 + 11371 11370 11376 + 11376 11377 11371 + 11372 11371 11377 + 11377 11378 11372 + 11379 11372 11378 + 11373 11372 11379 + 11379 11374 11373 + 11375 11165 11169 + 11169 11380 11375 + 11375 11380 11381 + 11381 11376 11375 + 11376 11381 11382 + 11382 11383 11376 + 11376 11383 11384 + 11384 11377 11376 + 11378 11377 11384 + 11380 11169 11385 + 11385 11386 11380 + 11381 11380 11386 + 11386 11387 11381 + 11387 11388 11381 + 11382 11381 11388 + 11389 11385 11169 + 11390 11385 11389 + 11386 11385 11390 + 11390 11391 11386 + 11386 11391 11392 + 11392 11387 11386 + 11169 11168 11389 + 11168 11393 11389 + 11393 11394 11389 + 11395 11389 11394 + 11396 11389 11395 + 11389 11396 11390 + 11177 11393 11168 + 11177 11191 11393 + 11393 11191 11200 + 11200 11394 11393 + 11200 11204 11394 + 11394 11204 11395 + 11395 11204 11203 + 11203 11397 11395 + 11398 11395 11397 + 11395 11398 11396 + 11396 11398 11399 + 11399 11400 11396 + 11396 11400 11401 + 11390 11396 11401 + 11402 11397 11203 + 11397 11402 11403 + 11397 11403 11398 + 11399 11398 11403 + 11403 11404 11399 + 11404 11405 11399 + 11406 11399 11405 + 11399 11406 11400 + 11203 11202 11402 + 11407 11402 11202 + 11403 11402 11407 + 11407 11404 11403 + 11407 11408 11404 + 11404 11408 11409 + 11409 11405 11404 + 11405 11409 11410 + 11410 11411 11405 + 11405 11411 11406 + 11412 11407 11202 + 11408 11407 11412 + 11412 11413 11408 + 11408 11413 11414 + 11414 11409 11408 + 11410 11409 11414 + 11207 11412 11202 + 11415 11412 11207 + 11415 11413 11412 + 11413 11415 11416 + 11416 11414 11413 + 11416 11417 11414 + 11414 11417 11410 + 11410 11417 11418 + 11418 11419 11410 + 11411 11410 11419 + 11207 11212 11415 + 11415 11212 11420 + 11416 11415 11420 + 11421 11416 11420 + 11417 11416 11421 + 11421 11418 11417 + 11421 11422 11418 + 11418 11422 11423 + 11423 11419 11418 + 11424 11419 11423 + 11419 11424 11411 + 11212 11425 11420 + 11425 11426 11420 + 11426 11427 11420 + 11428 11420 11427 + 11420 11428 11429 + 11420 11429 11430 + 11430 11431 11420 + 11420 11431 11421 + 11211 11425 11212 + 11425 11211 11235 + 11425 11235 11432 + 11432 11426 11425 + 11426 11432 11433 + 11426 11433 11434 + 11434 11427 11426 + 11427 11434 11435 + 11427 11435 11428 + 11436 11432 11235 + 11433 11432 11436 + 11436 11437 11433 + 11433 11437 11438 + 11438 11434 11433 + 11435 11434 11438 + 11438 11439 11435 + 11435 11439 11440 + 11428 11435 11440 + 11235 11234 11436 + 11234 11441 11436 + 11442 11436 11441 + 11436 11442 11443 + 11443 11437 11436 + 11437 11443 11444 + 11444 11438 11437 + 11438 11444 11445 + 11445 11439 11438 + 11233 11441 11234 + 11441 11233 11446 + 11441 11446 11442 + 11447 11442 11446 + 11443 11442 11447 + 11447 11448 11443 + 11443 11448 11449 + 11449 11444 11443 + 11445 11444 11449 + 11446 11233 11239 + 11239 11450 11446 + 11446 11450 11447 + 11451 11447 11450 + 11447 11451 11448 + 11448 11451 11452 + 11452 11449 11448 + 11453 11449 11452 + 11449 11453 11445 + 11450 11239 11243 + 11243 11454 11450 + 11450 11454 11451 + 11451 11454 11455 + 11452 11451 11455 + 11455 11456 11452 + 11457 11452 11456 + 11452 11457 11453 + 11454 11243 11458 + 11458 11455 11454 + 11459 11455 11458 + 11455 11459 11460 + 11460 11456 11455 + 11456 11460 11461 + 11461 11462 11456 + 11456 11462 11457 + 11247 11458 11243 + 11252 11458 11247 + 11458 11252 11459 + 11459 11252 11251 + 11251 11463 11459 + 11459 11463 11464 + 11464 11460 11459 + 11461 11460 11464 + 11464 11465 11461 + 11461 11465 11466 + 11466 11467 11461 + 11462 11461 11467 + 11468 11463 11251 + 11463 11468 11469 + 11469 11464 11463 + 11464 11469 11470 + 11470 11465 11464 + 11465 11470 11471 + 11471 11466 11465 + 11251 11256 11468 + 11468 11256 11472 + 11472 11473 11468 + 11468 11473 11474 + 11474 11469 11468 + 11470 11469 11474 + 11474 11475 11470 + 11470 11475 11476 + 11476 11471 11470 + 11472 11256 11255 + 11255 11477 11472 + 11478 11472 11477 + 11472 11478 11479 + 11479 11473 11472 + 11473 11479 11480 + 11480 11474 11473 + 11474 11480 11481 + 11481 11475 11474 + 11260 11477 11255 + 11482 11477 11260 + 11477 11482 11478 + 11478 11482 11483 + 11483 11484 11478 + 11479 11478 11484 + 11484 11485 11479 + 11479 11485 11486 + 11486 11480 11479 + 11481 11480 11486 + 11260 11265 11482 + 11482 11265 11487 + 11487 11483 11482 + 11488 11483 11487 + 11483 11488 11489 + 11489 11484 11483 + 11485 11484 11489 + 11489 11490 11485 + 11485 11490 11491 + 11491 11486 11485 + 11487 11265 11264 + 11264 11492 11487 + 11493 11487 11492 + 11487 11493 11488 + 11488 11493 11494 + 11494 11495 11488 + 11488 11495 11496 + 11496 11489 11488 + 11490 11489 11496 + 11270 11492 11264 + 11492 11270 11497 + 11497 11498 11492 + 11492 11498 11493 + 11493 11498 11499 + 11499 11494 11493 + 11500 11494 11499 + 11494 11500 11501 + 11501 11495 11494 + 11497 11270 11269 + 11269 11502 11497 + 11503 11497 11502 + 11498 11497 11503 + 11503 11499 11498 + 11504 11499 11503 + 11499 11504 11500 + 11505 11500 11504 + 11501 11500 11505 + 11279 11502 11269 + 11502 11279 11506 + 11506 11507 11502 + 11502 11507 11503 + 11508 11503 11507 + 11503 11508 11504 + 11504 11508 11509 + 11509 11510 11504 + 11504 11510 11505 + 11511 11506 11279 + 11512 11506 11511 + 11506 11512 11513 + 11513 11507 11506 + 11507 11513 11508 + 11509 11508 11513 + 11279 11514 11511 + 11515 11511 11514 + 11516 11511 11515 + 11511 11516 11512 + 11517 11512 11516 + 11513 11512 11517 + 11517 11518 11513 + 11513 11518 11509 + 11278 11514 11279 + 11288 11514 11278 + 11514 11288 11515 + 11519 11515 11288 + 11520 11515 11519 + 11515 11520 11516 + 11516 11520 11521 + 11521 11522 11516 + 11516 11522 11517 + 11288 11523 11519 + 11524 11519 11523 + 11525 11519 11524 + 11519 11525 11520 + 11521 11520 11525 + 11287 11523 11288 + 11297 11523 11287 + 11523 11297 11524 + 11526 11524 11297 + 11527 11524 11526 + 11524 11527 11525 + 11525 11527 11528 + 11528 11529 11525 + 11525 11529 11521 + 11297 11530 11526 + 11531 11526 11530 + 11532 11526 11531 + 11526 11532 11527 + 11528 11527 11532 + 11296 11530 11297 + 11533 11530 11296 + 11530 11533 11531 + 11534 11531 11533 + 11535 11531 11534 + 11531 11535 11532 + 11532 11535 11536 + 11536 11537 11532 + 11532 11537 11528 + 11296 11302 11533 + 11533 11302 11538 + 11538 11539 11533 + 11533 11539 11534 + 11540 11534 11539 + 11541 11534 11540 + 11534 11541 11535 + 11536 11535 11541 + 11306 11538 11302 + 11542 11538 11306 + 11538 11542 11543 + 11543 11539 11538 + 11539 11543 11540 + 11544 11540 11543 + 11545 11540 11544 + 11540 11545 11541 + 11306 11311 11542 + 11542 11311 11546 + 11546 11547 11542 + 11543 11542 11547 + 11547 11548 11543 + 11543 11548 11544 + 11549 11544 11548 + 11550 11544 11549 + 11544 11550 11545 + 11310 11546 11311 + 11546 11310 11316 + 11316 11551 11546 + 11546 11551 11552 + 11552 11547 11546 + 11547 11552 11553 + 11553 11548 11547 + 11548 11553 11549 + 11554 11549 11553 + 11555 11549 11554 + 11549 11555 11550 + 11551 11316 11556 + 11556 11557 11551 + 11552 11551 11557 + 11557 11558 11552 + 11553 11552 11558 + 11558 11559 11553 + 11553 11559 11554 + 11560 11556 11316 + 11561 11556 11560 + 11557 11556 11561 + 11561 11562 11557 + 11557 11562 11563 + 11563 11558 11557 + 11558 11563 11564 + 11564 11559 11558 + 11316 11315 11560 + 11321 11560 11315 + 11560 11321 11565 + 11565 11566 11560 + 11560 11566 11561 + 11561 11566 11567 + 11567 11568 11561 + 11562 11561 11568 + 11568 11569 11562 + 11563 11562 11569 + 11565 11321 11320 + 11320 11570 11565 + 11565 11570 11571 + 11571 11572 11565 + 11566 11565 11572 + 11572 11567 11566 + 11326 11570 11320 + 11570 11326 11573 + 11573 11571 11570 + 11571 11573 11574 + 11574 11575 11571 + 11571 11575 11576 + 11576 11572 11571 + 11567 11572 11576 + 11577 11573 11326 + 11574 11573 11577 + 11577 11578 11574 + 11579 11574 11578 + 11575 11574 11579 + 11579 11580 11575 + 11576 11575 11580 + 11326 11325 11577 + 11338 11577 11325 + 11578 11577 11338 + 11338 11581 11578 + 11578 11581 11582 + 11582 11583 11578 + 11578 11583 11584 + 11584 11579 11578 + 11585 11579 11584 + 11580 11579 11585 + 11581 11338 11343 + 11343 11586 11581 + 11581 11586 11587 + 11587 11582 11581 + 11588 11582 11587 + 11588 11583 11582 + 11583 11588 11589 + 11589 11584 11583 + 11590 11584 11589 + 11584 11590 11585 + 11349 11586 11343 + 11586 11349 11591 + 11591 11587 11586 + 11587 11591 11592 + 11592 11593 11587 + 11587 11593 11588 + 11588 11593 11594 + 11594 11589 11588 + 11595 11589 11594 + 11589 11595 11590 + 11591 11349 11347 + 11347 11596 11591 + 11592 11591 11596 + 11596 11597 11592 + 11598 11592 11597 + 11593 11592 11598 + 11598 11594 11593 + 11348 11347 11349 + 11599 8724 11600 + 11600 11601 11599 + 11041 11602 11603 + 11603 11604 11041 + 8644 11605 8651 + 8651 8645 8644 + 8645 8651 11606 + 11606 8646 8645 + 8646 11606 11607 + 8646 11607 11608 + 11608 11609 8646 + 8646 11609 8647 + 11606 8651 8654 + 8654 11610 11606 + 11610 11611 11606 + 11607 11606 11611 + 11611 11612 11607 + 11607 11612 11613 + 11613 11608 11607 + 11614 11608 11613 + 11609 11608 11614 + 11615 11610 8654 + 11616 11610 11615 + 11610 11616 11617 + 11617 11611 11610 + 11617 11612 11611 + 11612 11617 11618 + 11618 11613 11612 + 8654 8658 11615 + 11615 8658 8663 + 8663 11619 11615 + 11616 11615 11619 + 11619 11620 11616 + 11616 11620 11618 + 11617 11616 11618 + 11621 11619 8663 + 11619 11621 11622 + 11622 11620 11619 + 11620 11622 11623 + 11623 11618 11620 + 11613 11618 11623 + 11623 11624 11613 + 11613 11624 11614 + 8663 8667 11621 + 11625 11621 8667 + 11622 11621 11625 + 11625 11626 11622 + 11623 11622 11626 + 11626 11627 11623 + 11624 11623 11627 + 11627 11628 11624 + 11624 11628 11629 + 11629 11614 11624 + 8667 8671 11625 + 11630 11625 8671 + 11625 11630 11631 + 11631 11626 11625 + 11626 11631 11632 + 11632 11627 11626 + 11628 11627 11632 + 11632 11633 11628 + 11628 11633 11634 + 11634 11629 11628 + 8671 8677 11630 + 11635 11630 8677 + 11631 11630 11635 + 11635 11636 11631 + 11632 11631 11636 + 11636 11637 11632 + 11633 11632 11637 + 11637 11638 11633 + 11633 11638 11639 + 11639 11634 11633 + 8677 11640 11635 + 11641 11635 11640 + 11635 11641 11642 + 11642 11636 11635 + 11636 11642 11643 + 11643 11637 11636 + 11638 11637 11643 + 8676 11640 8677 + 11640 8676 8675 + 8675 11644 11640 + 11640 11644 11641 + 11645 11641 11644 + 11642 11641 11645 + 11645 11646 11642 + 11643 11642 11646 + 11646 11647 11643 + 11648 11643 11647 + 11643 11648 11638 + 11644 8675 8681 + 8681 11649 11644 + 11644 11649 11645 + 11650 11645 11649 + 11645 11650 11651 + 11651 11646 11645 + 11646 11651 11652 + 11652 11647 11646 + 11653 11647 11652 + 11647 11653 11648 + 11649 8681 11654 + 11654 11655 11649 + 11649 11655 11650 + 11656 11650 11655 + 11651 11650 11656 + 11656 11657 11651 + 11651 11657 11658 + 11652 11651 11658 + 11654 8681 8680 + 8680 11659 11654 + 11660 11654 11659 + 11655 11654 11660 + 11660 11661 11655 + 11655 11661 11656 + 11662 11656 11661 + 11662 11657 11656 + 11657 11662 11663 + 11663 11658 11657 + 8685 11659 8680 + 11659 8685 11664 + 11664 11665 11659 + 11659 11665 11660 + 11666 11660 11665 + 11661 11660 11666 + 11666 11667 11661 + 11661 11667 11662 + 11663 11662 11667 + 11664 8685 11668 + 11668 11669 11664 + 11670 11664 11669 + 11665 11664 11670 + 11670 11671 11665 + 11665 11671 11666 + 11672 11666 11671 + 11667 11666 11672 + 8684 11668 8685 + 8690 11668 8684 + 11668 8690 11673 + 11673 11669 11668 + 11669 11673 11674 + 11674 11675 11669 + 11669 11675 11670 + 11676 11670 11675 + 11671 11670 11676 + 11676 11677 11671 + 11671 11677 11672 + 11673 8690 11678 + 11678 11679 11673 + 11674 11673 11679 + 11679 11680 11674 + 11681 11674 11680 + 11675 11674 11681 + 11681 11682 11675 + 11675 11682 11676 + 8689 11678 8690 + 11683 11678 8689 + 11678 11683 11684 + 11684 11679 11678 + 11679 11684 11685 + 11685 11680 11679 + 11680 11685 11686 + 11686 11687 11680 + 11680 11687 11681 + 8689 8695 11683 + 11683 8695 11688 + 11688 11689 11683 + 11684 11683 11689 + 11689 11690 11684 + 11685 11684 11690 + 11690 11691 11685 + 11686 11685 11691 + 11692 11688 8695 + 11693 11688 11692 + 11688 11693 11694 + 11694 11689 11688 + 11689 11694 11695 + 11695 11690 11689 + 11690 11695 11696 + 11696 11691 11690 + 8695 8694 11692 + 11697 11692 8694 + 11698 11692 11697 + 11692 11698 11693 + 11693 11698 11699 + 11699 11700 11693 + 11694 11693 11700 + 11700 11701 11694 + 11695 11694 11701 + 8694 8693 11697 + 11697 8693 11702 + 11702 11703 11697 + 11703 11704 11697 + 11705 11697 11704 + 11697 11705 11698 + 11698 11705 11706 + 11706 11699 11698 + 8692 11702 8693 + 11702 8692 11707 + 11707 11708 11702 + 11702 11708 11709 + 11709 11703 11702 + 11703 11709 11710 + 11703 11710 11711 + 11711 11704 11703 + 11707 8692 8691 + 8691 8640 11707 + 8587 11707 8640 + 11708 11707 8587 + 8587 11712 11708 + 11708 11712 11713 + 11713 11714 11708 + 11714 11709 11708 + 11710 11709 11714 + 8586 11712 8587 + 11712 8586 8593 + 8593 11713 11712 + 11715 11713 8593 + 11713 11715 11716 + 11716 11714 11713 + 11716 11717 11714 + 11714 11717 11710 + 11710 11717 11718 + 11718 11719 11710 + 11719 11711 11710 + 11715 8593 8592 + 8592 11720 11715 + 11716 11715 11720 + 11721 11716 11720 + 11717 11716 11721 + 11721 11718 11717 + 11721 11722 11718 + 11718 11722 11723 + 11723 11719 11718 + 11720 8592 8591 + 11720 8591 11724 + 11724 11725 11720 + 11720 11725 11726 + 11726 11727 11720 + 11727 11728 11720 + 11728 11721 11720 + 11722 11721 11728 + 11724 8591 8590 + 11729 11724 8590 + 11730 11724 11729 + 11725 11724 11730 + 11725 11730 11731 + 11731 11726 11725 + 11726 11731 11732 + 11726 11732 11733 + 11733 11727 11726 + 8590 11734 11729 + 11735 11729 11734 + 11729 11735 11736 + 11729 11736 11730 + 11730 11736 11737 + 11731 11730 11737 + 11738 11731 11737 + 11732 11731 11738 + 11739 11734 8590 + 11740 11734 11739 + 11734 11740 11735 + 11741 11735 11740 + 11736 11735 11741 + 11741 11742 11736 + 11736 11742 11737 + 8590 11743 11739 + 11744 11739 11743 + 11745 11739 11744 + 11739 11745 11740 + 8599 11743 8590 + 11743 8599 11746 + 11746 11747 11743 + 11743 11747 11744 + 11748 11744 11747 + 11749 11744 11748 + 11744 11749 11745 + 11750 11746 8599 + 11751 11746 11750 + 11747 11746 11751 + 11751 11752 11747 + 11747 11752 11748 + 11753 11748 11752 + 11754 11748 11753 + 11748 11754 11749 + 8599 11755 11750 + 11756 11750 11755 + 11757 11750 11756 + 11750 11757 11751 + 11758 11751 11757 + 11752 11751 11758 + 11758 11759 11752 + 11752 11759 11753 + 8598 11755 8599 + 11760 11755 8598 + 11755 11760 11756 + 11756 11760 11761 + 11761 11762 11756 + 11762 11763 11756 + 11764 11756 11763 + 11756 11764 11757 + 8598 8614 11760 + 11760 8614 11765 + 11765 11761 11760 + 8612 11761 11765 + 11761 8612 11766 + 11766 11762 11761 + 11766 11767 11762 + 11762 11767 11768 + 11768 11763 11762 + 8614 8613 11765 + 8612 11765 8613 + 11766 8612 8611 + 11769 11766 8611 + 11767 11766 11769 + 11769 11770 11767 + 11767 11770 11771 + 11771 11768 11767 + 11772 11768 11771 + 11763 11768 11772 + 11772 11773 11763 + 11763 11773 11764 + 8611 11774 11769 + 11775 11769 11774 + 11769 11775 11770 + 11770 11775 11776 + 11776 11777 11770 + 11770 11777 11771 + 8647 11774 8611 + 11774 8647 11778 + 11774 11778 11775 + 11776 11775 11778 + 11778 11779 11776 + 11629 11776 11779 + 11776 11629 11634 + 11634 11777 11776 + 11777 11634 11639 + 11639 11771 11777 + 11778 8647 11609 + 11609 11779 11778 + 11614 11779 11609 + 11779 11614 11629 + 11780 11781 11782 + 11783 11780 11782 + 11784 11780 11783 + 11780 11784 11785 + 11780 11785 11786 + 11786 11787 11780 + 11782 11788 11783 + 11788 11789 11783 + 11790 11783 11789 + 11791 11783 11790 + 11783 11791 11784 + 11792 11784 11791 + 11785 11784 11792 + 11793 11788 11782 + 11794 11788 11793 + 11788 11794 11795 + 11795 11789 11788 + 11796 11789 11795 + 11789 11796 11790 + 11782 11797 11793 + 11798 11793 11797 + 11799 11793 11798 + 11793 11799 11794 + 11794 11799 11800 + 11800 11801 11794 + 11795 11794 11801 + 11797 11782 11802 + 11802 11803 11797 + 11797 11803 11804 + 11804 11805 11797 + 11797 11805 11798 + 11802 11782 11787 + 11787 11806 11802 + 11807 11802 11806 + 11807 11808 11802 + 11808 11809 11802 + 11803 11802 11809 + 11809 11810 11803 + 11810 11804 11803 + 11806 11787 11786 + 11806 11786 11811 + 11811 11807 11806 + 11807 11811 11812 + 11807 11812 11808 + 11812 11813 11808 + 11813 11814 11808 + 11808 11814 11815 + 11815 11809 11808 + 11811 11786 11785 + 11816 11811 11785 + 11812 11811 11816 + 11816 11817 11812 + 11813 11812 11817 + 11818 11813 11817 + 11814 11813 11818 + 11818 11819 11814 + 11814 11819 11815 + 11785 11820 11816 + 11821 11816 11820 + 11821 11817 11816 + 11817 11821 11822 + 11822 11823 11817 + 11817 11823 11818 + 11792 11820 11785 + 11792 11824 11820 + 11820 11824 11821 + 11821 11824 11825 + 11822 11821 11825 + 11825 11826 11822 + 11827 11822 11826 + 11822 11827 11828 + 11828 11823 11822 + 11824 11792 11829 + 11829 11825 11824 + 11829 11830 11825 + 11825 11830 11831 + 11831 11826 11825 + 11831 11832 11826 + 11826 11832 11827 + 11833 11827 11832 + 11828 11827 11833 + 11791 11829 11792 + 11830 11829 11791 + 11791 11834 11830 + 11830 11834 11835 + 11831 11830 11835 + 11835 11836 11831 + 11832 11831 11836 + 11836 11837 11832 + 11832 11837 11838 + 11838 11833 11832 + 11790 11834 11791 + 11834 11790 11839 + 11839 11835 11834 + 11835 11839 11840 + 11840 11841 11835 + 11835 11841 11842 + 11842 11836 11835 + 11836 11842 11837 + 11843 11839 11790 + 11840 11839 11843 + 11843 11844 11840 + 11840 11844 11845 + 11845 11846 11840 + 11841 11840 11846 + 11846 11847 11841 + 11842 11841 11847 + 11790 11796 11843 + 11848 11843 11796 + 11843 11848 11849 + 11849 11844 11843 + 11844 11849 11850 + 11850 11845 11844 + 11796 11851 11848 + 11848 11851 11852 + 11852 11853 11848 + 11849 11848 11853 + 11853 11854 11849 + 11850 11849 11854 + 11795 11851 11796 + 11851 11795 11855 + 11855 11852 11851 + 11852 11855 11856 + 11856 11857 11852 + 11852 11857 11858 + 11858 11853 11852 + 11854 11853 11858 + 11801 11855 11795 + 11856 11855 11801 + 11801 11859 11856 + 11860 11856 11859 + 11857 11856 11860 + 11860 11861 11857 + 11857 11861 11862 + 11862 11858 11857 + 11863 11858 11862 + 11858 11863 11854 + 11864 11859 11801 + 11859 11864 11865 + 11865 11866 11859 + 11859 11866 11860 + 11867 11860 11866 + 11861 11860 11867 + 11801 11800 11864 + 11864 11800 11868 + 11868 11869 11864 + 11865 11864 11869 + 11869 11870 11865 + 11871 11865 11870 + 11866 11865 11871 + 11871 11872 11866 + 11866 11872 11867 + 11873 11868 11800 + 11874 11868 11873 + 11869 11868 11874 + 11875 11869 11874 + 11869 11875 11876 + 11876 11870 11869 + 11800 11799 11873 + 11799 11877 11873 + 11878 11873 11877 + 11879 11873 11878 + 11873 11879 11874 + 11874 11879 11880 + 11880 11881 11874 + 11875 11874 11881 + 11798 11877 11799 + 11798 11882 11877 + 11877 11882 11878 + 11878 11882 11883 + 11883 11884 11878 + 11885 11878 11884 + 11878 11885 11879 + 11879 11885 11886 + 11886 11880 11879 + 11882 11798 11805 + 11805 11883 11882 + 11883 11805 11804 + 11804 11887 11883 + 11883 11887 11888 + 11888 11884 11883 + 11888 11889 11884 + 11884 11889 11885 + 11886 11885 11889 + 11889 11890 11886 + 11891 11886 11890 + 11880 11886 11891 + 11887 11804 11810 + 11810 11892 11887 + 11888 11887 11892 + 11893 11888 11892 + 11889 11888 11893 + 11893 11890 11889 + 11894 11890 11893 + 11890 11894 11891 + 11892 11810 11809 + 11809 11815 11892 + 11892 11815 11895 + 11895 11896 11892 + 11892 11896 11893 + 11897 11893 11896 + 11893 11897 11894 + 11819 11895 11815 + 11898 11895 11819 + 11895 11898 11899 + 11899 11896 11895 + 11896 11899 11897 + 11900 11897 11899 + 11894 11897 11900 + 11900 11901 11894 + 11894 11901 11902 + 11891 11894 11902 + 11819 11903 11898 + 11903 11904 11898 + 11904 11905 11898 + 11899 11898 11905 + 11905 11906 11899 + 11899 11906 11900 + 11907 11900 11906 + 11900 11907 11901 + 11903 11819 11818 + 11903 11818 11908 + 11904 11903 11908 + 11909 11904 11908 + 11904 11909 11910 + 11910 11911 11904 + 11905 11904 11911 + 11912 11905 11911 + 11906 11905 11912 + 11908 11818 11823 + 11823 11828 11908 + 11913 11908 11828 + 11913 11909 11908 + 11913 11914 11909 + 11914 11910 11909 + 11910 11914 11915 + 11915 11916 11910 + 11911 11910 11916 + 11916 11917 11911 + 11912 11911 11917 + 11833 11913 11828 + 11913 11833 11918 + 11918 11914 11913 + 11914 11918 11915 + 11918 11919 11915 + 11915 11919 11920 + 11915 11920 11916 + 11920 11921 11916 + 11916 11921 11917 + 11918 11833 11838 + 11838 11922 11918 + 11919 11918 11922 + 11923 11919 11922 + 11920 11919 11923 + 11923 11924 11920 + 11921 11920 11924 + 11925 11921 11924 + 11926 11921 11925 + 11921 11926 11917 + 11927 11922 11838 + 11922 11927 11928 + 11928 11923 11922 + 11923 11928 11929 + 11929 11924 11923 + 11924 11929 11930 + 11930 11925 11924 + 11931 11925 11930 + 11925 11931 11926 + 11838 11932 11927 + 11927 11932 11933 + 11933 11934 11927 + 11927 11934 11935 + 11935 11928 11927 + 11929 11928 11935 + 11935 11936 11929 + 11930 11929 11936 + 11932 11838 11937 + 11937 11938 11932 + 11938 11933 11932 + 11938 11939 11933 + 11939 11940 11933 + 11934 11933 11940 + 11941 11937 11838 + 11942 11937 11941 + 11942 11939 11937 + 11939 11938 11937 + 11837 11941 11838 + 11943 11941 11837 + 11943 11944 11941 + 11941 11944 11942 + 11945 11942 11944 + 11939 11942 11945 + 11945 11946 11939 + 11939 11946 11940 + 11947 11940 11946 + 11940 11947 11934 + 11837 11842 11943 + 11847 11943 11842 + 11944 11943 11847 + 11847 11948 11944 + 11944 11948 11945 + 11949 11945 11948 + 11946 11945 11949 + 11949 11950 11946 + 11946 11950 11947 + 11951 11947 11950 + 11934 11947 11951 + 11951 11935 11934 + 11936 11935 11951 + 11952 11948 11847 + 11948 11952 11949 + 11953 11949 11952 + 11950 11949 11953 + 11953 11954 11950 + 11950 11954 11951 + 11955 11951 11954 + 11951 11955 11936 + 11847 11846 11952 + 11952 11846 11845 + 11845 11956 11952 + 11952 11956 11953 + 11957 11953 11956 + 11953 11957 11958 + 11958 11954 11953 + 11954 11958 11955 + 11959 11955 11958 + 11936 11955 11959 + 11960 11956 11845 + 11956 11960 11957 + 11957 11960 11961 + 11961 11962 11957 + 11958 11957 11962 + 11962 11963 11958 + 11958 11963 11964 + 11964 11959 11958 + 11845 11850 11960 + 11960 11850 11965 + 11965 11961 11960 + 11961 11965 11966 + 11966 11967 11961 + 11961 11967 11968 + 11968 11962 11961 + 11963 11962 11968 + 11854 11965 11850 + 11966 11965 11854 + 11854 11863 11966 + 11969 11966 11863 + 11967 11966 11969 + 11969 11970 11967 + 11967 11970 11971 + 11971 11968 11967 + 11972 11968 11971 + 11968 11972 11963 + 11963 11972 11973 + 11973 11964 11963 + 11863 11974 11969 + 11975 11969 11974 + 11970 11969 11975 + 11975 11976 11970 + 11970 11976 11977 + 11977 11971 11970 + 11978 11971 11977 + 11971 11978 11972 + 11862 11974 11863 + 11974 11862 11979 + 11979 11980 11974 + 11974 11980 11975 + 11981 11975 11980 + 11976 11975 11981 + 11981 11982 11976 + 11977 11976 11982 + 11979 11862 11861 + 11861 11983 11979 + 11984 11979 11983 + 11980 11979 11984 + 11984 11985 11980 + 11980 11985 11981 + 11986 11981 11985 + 11982 11981 11986 + 11867 11983 11861 + 11983 11867 11987 + 11987 11988 11983 + 11983 11988 11984 + 11989 11984 11988 + 11985 11984 11989 + 11989 11990 11985 + 11985 11990 11986 + 11987 11867 11872 + 11872 11991 11987 + 11992 11987 11991 + 11988 11987 11992 + 11992 11993 11988 + 11988 11993 11989 + 11994 11989 11993 + 11989 11994 11995 + 11990 11989 11995 + 11996 11991 11872 + 11991 11996 11997 + 11997 11998 11991 + 11991 11998 11992 + 11992 11998 11999 + 11999 12000 11992 + 11993 11992 12000 + 11872 11871 11996 + 11996 11871 12001 + 12001 12002 11996 + 11997 11996 12002 + 12002 12003 11997 + 12004 11997 12003 + 11998 11997 12004 + 12004 11999 11998 + 11870 12001 11871 + 12005 12001 11870 + 12001 12005 12006 + 12006 12002 12001 + 12002 12006 12007 + 12007 12003 12002 + 12003 12007 12008 + 12008 12009 12003 + 12003 12009 12004 + 11870 11876 12005 + 12005 11876 12010 + 12010 12011 12005 + 12006 12005 12011 + 12011 12012 12006 + 12007 12006 12012 + 12012 12013 12007 + 12008 12007 12013 + 12014 12010 11876 + 12015 12010 12014 + 12010 12015 12016 + 12016 12011 12010 + 12011 12016 12017 + 12017 12012 12011 + 12012 12017 12018 + 12018 12013 12012 + 11876 11875 12014 + 11881 12014 11875 + 12019 12014 11881 + 12014 12019 12015 + 12020 12015 12019 + 12016 12015 12020 + 12020 12021 12016 + 12017 12016 12021 + 12021 12022 12017 + 12018 12017 12022 + 11881 12023 12019 + 12019 12023 12024 + 12024 12025 12019 + 12019 12025 12020 + 12026 12020 12025 + 12020 12026 12027 + 12027 12021 12020 + 12023 11881 11880 + 11880 12028 12023 + 12024 12023 12028 + 12028 12029 12024 + 12030 12024 12029 + 12025 12024 12030 + 12031 12025 12030 + 12025 12031 12026 + 11891 12028 11880 + 12028 11891 12032 + 12032 12029 12028 + 12033 12029 12032 + 12029 12033 12030 + 12030 12033 12034 + 12034 12035 12030 + 12031 12030 12035 + 12035 12036 12031 + 12026 12031 12036 + 11902 12032 11891 + 12037 12032 11902 + 12032 12037 12033 + 12033 12037 12038 + 12038 12039 12033 + 12033 12039 12034 + 11902 12040 12037 + 12038 12037 12040 + 12040 12041 12038 + 12042 12038 12041 + 12038 12042 12039 + 12039 12042 12043 + 12043 12034 12039 + 12040 11902 12044 + 12040 12044 12045 + 12045 12041 12040 + 12046 12041 12045 + 12041 12046 12042 + 12043 12042 12046 + 11936 12043 12046 + 11959 12043 11936 + 11959 12034 12043 + 12044 11902 11901 + 11901 11907 12044 + 12045 12044 11907 + 12047 12045 11907 + 12048 12045 12047 + 12045 12048 12046 + 12046 12048 11931 + 11931 11930 12046 + 12046 11930 11936 + 12049 12047 11907 + 12050 12047 12049 + 12051 12047 12050 + 12047 12051 12048 + 11931 12048 12051 + 12051 11926 11931 + 12051 12050 11926 + 12050 11917 11926 + 11917 12050 11912 + 11906 12049 11907 + 11912 12049 11906 + 12049 11912 12050 + 12034 11959 11964 + 11964 12035 12034 + 12035 11964 11973 + 11973 12036 12035 + 12036 11973 12052 + 12052 12053 12036 + 12036 12053 12026 + 12027 12026 12053 + 12052 11973 11972 + 11972 11978 12052 + 12054 12052 11978 + 12053 12052 12054 + 12054 12055 12053 + 12053 12055 12027 + 12056 12027 12055 + 12021 12027 12056 + 12056 12022 12021 + 11978 12057 12054 + 12058 12054 12057 + 12055 12054 12058 + 12058 12059 12055 + 12055 12059 12056 + 12060 12056 12059 + 12022 12056 12060 + 12060 12061 12022 + 12022 12061 12018 + 11977 12057 11978 + 12057 11977 12062 + 12062 12063 12057 + 12057 12063 12058 + 12064 12058 12063 + 12059 12058 12064 + 12064 12065 12059 + 12059 12065 12060 + 12066 12060 12065 + 12061 12060 12066 + 11982 12062 11977 + 12067 12062 11982 + 12063 12062 12067 + 12067 12068 12063 + 12063 12068 12064 + 12069 12064 12068 + 12065 12064 12069 + 12069 12070 12065 + 12065 12070 12066 + 11982 12071 12067 + 12072 12067 12071 + 12068 12067 12072 + 12072 12073 12068 + 12068 12073 12069 + 12073 12074 12069 + 12074 12075 12069 + 12075 12070 12069 + 11986 12071 11982 + 12071 11986 12076 + 12076 12077 12071 + 12071 12077 12072 + 12078 12072 12077 + 12078 12073 12072 + 12078 12074 12073 + 12074 12078 12079 + 12079 12080 12074 + 12075 12074 12080 + 12076 11986 11990 + 11990 11995 12076 + 12081 12076 11995 + 12081 12077 12076 + 12081 12082 12077 + 12077 12082 12078 + 12079 12078 12082 + 11995 12083 12081 + 12084 12081 12083 + 12084 12079 12081 + 12079 12082 12081 + 12083 11995 11994 + 12085 12083 11994 + 12084 12083 12085 + 12086 12084 12085 + 12084 12086 12087 + 12079 12084 12087 + 12087 12088 12079 + 12088 12080 12079 + 12080 12088 12089 + 12089 12075 12080 + 12075 12089 12070 + 12085 11994 12090 + 12090 12091 12085 + 12086 12085 12091 + 12086 12091 12092 + 12093 12086 12092 + 12086 12093 12087 + 11993 12090 11994 + 12000 12090 11993 + 12091 12090 12000 + 12092 12091 12000 + 12092 12000 11999 + 11999 12094 12092 + 12093 12092 12094 + 12095 12093 12094 + 12093 12095 12087 + 12096 12094 11999 + 12094 12096 12095 + 12095 12096 12097 + 12098 12095 12097 + 12095 12098 12087 + 12096 11999 12004 + 12097 12096 12004 + 12009 12097 12004 + 12099 12097 12009 + 12097 12099 12098 + 12098 12099 12100 + 12098 12100 12101 + 12087 12098 12101 + 12087 12101 12102 + 12087 12102 12103 + 12088 12087 12103 + 12088 12103 12089 + 12070 12089 12103 + 12099 12009 12008 + 12099 12008 12104 + 12104 12100 12099 + 12101 12100 12104 + 12101 12104 12105 + 12101 12105 12106 + 12106 12102 12101 + 12102 12106 12066 + 12103 12102 12066 + 12103 12066 12070 + 12013 12104 12008 + 12105 12104 12013 + 12013 12018 12105 + 12105 12018 12061 + 12061 12106 12105 + 12066 12106 12061 + 12107 12108 12109 + 12110 12109 12108 + 12109 12110 12111 + 12111 12112 12109 + 12109 12112 12113 + 12113 12114 12109 + 12109 12114 12115 + 12115 12116 12109 + 12116 12117 12109 + 12108 12118 12110 + 12119 12110 12118 + 12111 12110 12119 + 12119 12120 12111 + 12111 12120 12121 + 12121 12122 12111 + 12112 12111 12122 + 12108 12123 12118 + 12118 12123 12124 + 12124 12125 12118 + 12118 12125 12119 + 12123 12108 12126 + 12124 12123 12126 + 12126 12127 12124 + 12128 12124 12127 + 12128 12125 12124 + 12125 12128 12129 + 12129 12130 12125 + 12125 12130 12119 + 12108 12117 12126 + 12126 12117 12131 + 12126 12131 12132 + 12132 12127 12126 + 12127 12132 12133 + 12133 12134 12127 + 12127 12134 12128 + 12129 12128 12134 + 12131 12117 12116 + 12116 12135 12131 + 12131 12135 12136 + 12132 12131 12136 + 12136 12137 12132 + 12133 12132 12137 + 12137 12138 12133 + 12139 12133 12138 + 12134 12133 12139 + 12140 12135 12116 + 12135 12140 12141 + 12141 12136 12135 + 12141 12142 12136 + 12136 12142 12143 + 12143 12137 12136 + 12138 12137 12143 + 12140 12116 12115 + 12115 12144 12140 + 12140 12144 12145 + 12141 12140 12145 + 12145 12146 12141 + 12142 12141 12146 + 12146 12147 12142 + 12143 12142 12147 + 12148 12144 12115 + 12144 12148 12149 + 12149 12145 12144 + 12145 12149 12150 + 12150 12151 12145 + 12145 12151 12152 + 12152 12146 12145 + 12147 12146 12152 + 12148 12115 12114 + 12114 12153 12148 + 12148 12153 12154 + 12154 12149 12148 + 12150 12149 12154 + 12154 12155 12150 + 12150 12155 12156 + 12156 12157 12150 + 12151 12150 12157 + 12113 12153 12114 + 12153 12113 12158 + 12158 12159 12153 + 12153 12159 12154 + 12159 12160 12154 + 12161 12154 12160 + 12154 12161 12162 + 12162 12155 12154 + 12156 12155 12162 + 12163 12158 12113 + 12164 12158 12163 + 12158 12164 12159 + 12159 12164 12165 + 12165 12160 12159 + 12165 12166 12160 + 12160 12166 12161 + 12113 12112 12163 + 12122 12163 12112 + 12163 12122 12167 + 12163 12167 12164 + 12164 12167 12168 + 12165 12164 12168 + 12168 12169 12165 + 12166 12165 12169 + 12169 12170 12166 + 12161 12166 12170 + 12170 12171 12161 + 12162 12161 12171 + 12167 12122 12121 + 12121 12168 12167 + 12172 12168 12121 + 12168 12172 12173 + 12173 12169 12168 + 12170 12169 12173 + 12173 12174 12170 + 12170 12174 12175 + 12175 12171 12170 + 12121 12176 12172 + 12172 12176 12177 + 12177 12178 12172 + 12173 12172 12178 + 12178 12179 12173 + 12174 12173 12179 + 12179 12180 12174 + 12175 12174 12180 + 12176 12121 12120 + 12120 12181 12176 + 12176 12181 12182 + 12182 12177 12176 + 12183 12177 12182 + 12177 12183 12178 + 12178 12183 12184 + 12184 12179 12178 + 12180 12179 12184 + 12181 12120 12119 + 12119 12185 12181 + 12181 12185 12186 + 12186 12187 12181 + 12181 12187 12182 + 12185 12119 12130 + 12130 12188 12185 + 12188 12186 12185 + 12188 12189 12186 + 12189 12190 12186 + 12191 12186 12190 + 12186 12191 12192 + 12192 12187 12186 + 12188 12130 12129 + 12188 12129 12193 + 12188 12193 12189 + 12193 12194 12189 + 12189 12194 12195 + 12190 12189 12195 + 12196 12190 12195 + 12197 12190 12196 + 12190 12197 12191 + 12193 12129 12198 + 12198 12199 12193 + 12194 12193 12199 + 12200 12194 12199 + 12195 12194 12200 + 12200 12201 12195 + 12196 12195 12201 + 12198 12129 12134 + 12139 12198 12134 + 12199 12198 12139 + 12139 12202 12199 + 12199 12202 12203 + 12203 12200 12199 + 12200 12203 12204 + 12204 12201 12200 + 12201 12204 12205 + 12205 12206 12201 + 12201 12206 12196 + 12202 12139 12207 + 12207 12208 12202 + 12203 12202 12208 + 12208 12209 12203 + 12204 12203 12209 + 12209 12210 12204 + 12204 12210 12211 + 12211 12205 12204 + 12138 12207 12139 + 12212 12207 12138 + 12208 12207 12212 + 12212 12213 12208 + 12208 12213 12214 + 12214 12209 12208 + 12210 12209 12214 + 12214 12215 12210 + 12210 12215 12216 + 12216 12211 12210 + 12138 12217 12212 + 12212 12217 12218 + 12218 12219 12212 + 12213 12212 12219 + 12219 12220 12213 + 12214 12213 12220 + 12220 12221 12214 + 12215 12214 12221 + 12143 12217 12138 + 12217 12143 12222 + 12222 12218 12217 + 12218 12222 12223 + 12223 12224 12218 + 12218 12224 12225 + 12225 12219 12218 + 12220 12219 12225 + 12147 12222 12143 + 12223 12222 12147 + 12147 12226 12223 + 12223 12226 12227 + 12227 12228 12223 + 12224 12223 12228 + 12228 12229 12224 + 12225 12224 12229 + 12152 12226 12147 + 12226 12152 12230 + 12230 12227 12226 + 12227 12230 12231 + 12231 12232 12227 + 12227 12232 12233 + 12233 12228 12227 + 12229 12228 12233 + 12234 12230 12152 + 12231 12230 12234 + 12234 12235 12231 + 12236 12231 12235 + 12232 12231 12236 + 12236 12237 12232 + 12232 12237 12238 + 12238 12233 12232 + 12152 12151 12234 + 12157 12234 12151 + 12234 12157 12239 + 12239 12235 12234 + 12235 12239 12240 + 12240 12241 12235 + 12235 12241 12236 + 12242 12236 12241 + 12237 12236 12242 + 12239 12157 12156 + 12156 12243 12239 + 12240 12239 12243 + 12243 12244 12240 + 12245 12240 12244 + 12241 12240 12245 + 12245 12246 12241 + 12241 12246 12242 + 12247 12243 12156 + 12243 12247 12248 + 12248 12244 12243 + 12244 12248 12249 + 12249 12250 12244 + 12244 12250 12245 + 12251 12245 12250 + 12246 12245 12251 + 12156 12252 12247 + 12247 12252 12253 + 12253 12254 12247 + 12248 12247 12254 + 12254 12255 12248 + 12249 12248 12255 + 12252 12156 12162 + 12253 12252 12162 + 12162 12256 12253 + 12257 12253 12256 + 12253 12257 12258 + 12258 12254 12253 + 12254 12258 12259 + 12259 12255 12254 + 12171 12256 12162 + 12260 12256 12171 + 12256 12260 12257 + 12261 12257 12260 + 12258 12257 12261 + 12261 12262 12258 + 12259 12258 12262 + 12262 12263 12259 + 12264 12259 12263 + 12255 12259 12264 + 12171 12175 12260 + 12260 12175 12265 + 12265 12266 12260 + 12260 12266 12261 + 12267 12261 12266 + 12261 12267 12268 + 12268 12262 12261 + 12262 12268 12269 + 12269 12263 12262 + 12180 12265 12175 + 12270 12265 12180 + 12266 12265 12270 + 12270 12271 12266 + 12266 12271 12267 + 12272 12267 12271 + 12268 12267 12272 + 12272 12273 12268 + 12269 12268 12273 + 12180 12274 12270 + 12275 12270 12274 + 12271 12270 12275 + 12275 12276 12271 + 12271 12276 12272 + 12277 12272 12276 + 12272 12277 12278 + 12278 12273 12272 + 12184 12274 12180 + 12274 12184 12279 + 12279 12280 12274 + 12274 12280 12275 + 12281 12275 12280 + 12275 12281 12282 + 12282 12276 12275 + 12276 12282 12277 + 12283 12277 12282 + 12278 12277 12283 + 12284 12279 12184 + 12285 12279 12284 + 12280 12279 12285 + 12285 12286 12280 + 12280 12286 12281 + 12281 12286 12287 + 12287 12288 12281 + 12282 12281 12288 + 12184 12183 12284 + 12182 12284 12183 + 12289 12284 12182 + 12284 12289 12285 + 12290 12285 12289 + 12286 12285 12290 + 12290 12287 12286 + 12290 12291 12287 + 12287 12291 12292 + 12292 12288 12287 + 12293 12288 12292 + 12288 12293 12282 + 12282 12293 12283 + 12182 12294 12289 + 12289 12294 12295 + 12295 12296 12289 + 12289 12296 12290 + 12291 12290 12296 + 12296 12297 12291 + 12291 12297 12298 + 12292 12291 12298 + 12294 12182 12187 + 12187 12192 12294 + 12192 12299 12294 + 12299 12295 12294 + 12297 12295 12299 + 12295 12297 12296 + 12300 12299 12192 + 12299 12300 12301 + 12299 12301 12297 + 12297 12301 12298 + 12192 12191 12300 + 12300 12191 12197 + 12197 12302 12300 + 12301 12300 12302 + 12302 12303 12301 + 12303 12302 12304 + 12303 12304 12305 + 12303 12305 12298 + 12304 12302 12197 + 12197 12306 12304 + 12307 12304 12306 + 12304 12307 12305 + 12305 12307 12308 + 12305 12308 12309 + 12309 12298 12305 + 12196 12306 12197 + 12306 12196 12206 + 12206 12310 12306 + 12310 12307 12306 + 12308 12307 12310 + 12310 12311 12308 + 12308 12311 12312 + 12312 12309 12308 + 12313 12309 12312 + 12298 12309 12313 + 12310 12206 12205 + 12205 12311 12310 + 12311 12205 12211 + 12211 12312 12311 + 12216 12312 12211 + 12312 12216 12313 + 12313 12216 12314 + 12315 12313 12314 + 12298 12313 12315 + 12315 12316 12298 + 12298 12316 12292 + 12216 12215 12314 + 12221 12314 12215 + 12314 12221 12317 + 12317 12318 12314 + 12314 12318 12319 + 12319 12320 12314 + 12314 12320 12315 + 12317 12221 12220 + 12220 12321 12317 + 12317 12321 12322 + 12322 12323 12317 + 12318 12317 12323 + 12323 12324 12318 + 12319 12318 12324 + 12225 12321 12220 + 12321 12225 12325 + 12325 12322 12321 + 12322 12325 12326 + 12326 12327 12322 + 12322 12327 12328 + 12328 12323 12322 + 12324 12323 12328 + 12229 12325 12225 + 12326 12325 12229 + 12229 12329 12326 + 12330 12326 12329 + 12327 12326 12330 + 12330 12331 12327 + 12328 12327 12331 + 12331 12332 12328 + 12333 12328 12332 + 12328 12333 12324 + 12233 12329 12229 + 12329 12233 12238 + 12238 12334 12329 + 12329 12334 12330 + 12335 12330 12334 + 12331 12330 12335 + 12335 12336 12331 + 12331 12336 12337 + 12337 12332 12331 + 12338 12332 12337 + 12332 12338 12333 + 12334 12238 12339 + 12339 12340 12334 + 12334 12340 12335 + 12341 12335 12340 + 12336 12335 12341 + 12341 12342 12336 + 12336 12342 12343 + 12343 12337 12336 + 12339 12238 12237 + 12237 12344 12339 + 12345 12339 12344 + 12340 12339 12345 + 12345 12346 12340 + 12340 12346 12341 + 12347 12341 12346 + 12342 12341 12347 + 12242 12344 12237 + 12344 12242 12348 + 12348 12349 12344 + 12344 12349 12345 + 12350 12345 12349 + 12346 12345 12350 + 12350 12351 12346 + 12346 12351 12347 + 12348 12242 12246 + 12246 12352 12348 + 12353 12348 12352 + 12349 12348 12353 + 12353 12354 12349 + 12349 12354 12350 + 12355 12350 12354 + 12351 12350 12355 + 12251 12352 12246 + 12352 12251 12356 + 12356 12357 12352 + 12352 12357 12353 + 12358 12353 12357 + 12354 12353 12358 + 12358 12359 12354 + 12354 12359 12355 + 12356 12251 12360 + 12360 12361 12356 + 12362 12356 12361 + 12357 12356 12362 + 12362 12363 12357 + 12357 12363 12358 + 12364 12358 12363 + 12359 12358 12364 + 12250 12360 12251 + 12365 12360 12250 + 12360 12365 12366 + 12366 12361 12360 + 12361 12366 12367 + 12367 12368 12361 + 12361 12368 12362 + 12369 12362 12368 + 12363 12362 12369 + 12250 12249 12365 + 12365 12249 12370 + 12370 12371 12365 + 12366 12365 12371 + 12371 12372 12366 + 12367 12366 12372 + 12372 12373 12367 + 12374 12367 12373 + 12368 12367 12374 + 12255 12370 12249 + 12264 12370 12255 + 12370 12264 12375 + 12375 12371 12370 + 12371 12375 12376 + 12376 12372 12371 + 12372 12376 12377 + 12377 12373 12372 + 12373 12377 12378 + 12378 12379 12373 + 12373 12379 12374 + 12375 12264 12380 + 12380 12381 12375 + 12376 12375 12381 + 12381 12382 12376 + 12376 12382 12383 + 12383 12377 12376 + 12378 12377 12383 + 12263 12380 12264 + 12384 12380 12263 + 12380 12384 12385 + 12385 12381 12380 + 12381 12385 12386 + 12386 12382 12381 + 12382 12386 12387 + 12387 12383 12382 + 12263 12269 12384 + 12384 12269 12388 + 12388 12389 12384 + 12385 12384 12389 + 12389 12390 12385 + 12386 12385 12390 + 12390 12391 12386 + 12387 12386 12391 + 12273 12388 12269 + 12392 12388 12273 + 12388 12392 12393 + 12393 12389 12388 + 12389 12393 12394 + 12394 12390 12389 + 12390 12394 12395 + 12395 12391 12390 + 12273 12278 12392 + 12392 12278 12396 + 12396 12397 12392 + 12393 12392 12397 + 12397 12398 12393 + 12394 12393 12398 + 12398 12399 12394 + 12395 12394 12399 + 12283 12396 12278 + 12400 12396 12283 + 12396 12400 12401 + 12401 12397 12396 + 12397 12401 12402 + 12402 12398 12397 + 12398 12402 12403 + 12403 12399 12398 + 12283 12404 12400 + 12400 12404 12405 + 12405 12406 12400 + 12401 12400 12406 + 12406 12407 12401 + 12402 12401 12407 + 12404 12283 12293 + 12293 12408 12404 + 12404 12408 12409 + 12405 12404 12409 + 12409 12410 12405 + 12411 12405 12410 + 12405 12411 12412 + 12412 12406 12405 + 12292 12408 12293 + 12408 12292 12316 + 12316 12409 12408 + 12316 12315 12409 + 12409 12315 12413 + 12413 12410 12409 + 12413 12414 12410 + 12410 12414 12411 + 12415 12411 12414 + 12412 12411 12415 + 12415 12416 12412 + 12417 12412 12416 + 12406 12412 12417 + 12417 12407 12406 + 12320 12413 12315 + 12414 12413 12320 + 12320 12418 12414 + 12414 12418 12415 + 12419 12415 12418 + 12415 12419 12420 + 12420 12416 12415 + 12416 12420 12421 + 12421 12422 12416 + 12416 12422 12417 + 12319 12418 12320 + 12418 12319 12419 + 12324 12419 12319 + 12420 12419 12324 + 12324 12333 12420 + 12421 12420 12333 + 12333 12338 12421 + 12423 12421 12338 + 12422 12421 12423 + 12423 12424 12422 + 12422 12424 12425 + 12425 12417 12422 + 12407 12417 12425 + 12425 12426 12407 + 12407 12426 12402 + 12338 12427 12423 + 12428 12423 12427 + 12424 12423 12428 + 12428 12429 12424 + 12424 12429 12430 + 12430 12425 12424 + 12426 12425 12430 + 12430 12431 12426 + 12402 12426 12431 + 12431 12403 12402 + 12337 12427 12338 + 12427 12337 12343 + 12343 12432 12427 + 12427 12432 12428 + 12433 12428 12432 + 12429 12428 12433 + 12433 12434 12429 + 12429 12434 12435 + 12435 12430 12429 + 12431 12430 12435 + 12432 12343 12436 + 12436 12437 12432 + 12432 12437 12433 + 12438 12433 12437 + 12434 12433 12438 + 12438 12439 12434 + 12434 12439 12440 + 12440 12435 12434 + 12436 12343 12342 + 12342 12441 12436 + 12442 12436 12441 + 12437 12436 12442 + 12442 12443 12437 + 12437 12443 12438 + 12444 12438 12443 + 12439 12438 12444 + 12347 12441 12342 + 12441 12347 12445 + 12445 12446 12441 + 12441 12446 12442 + 12447 12442 12446 + 12443 12442 12447 + 12447 12448 12443 + 12443 12448 12444 + 12445 12347 12351 + 12351 12449 12445 + 12450 12445 12449 + 12446 12445 12450 + 12450 12451 12446 + 12446 12451 12447 + 12452 12447 12451 + 12448 12447 12452 + 12355 12449 12351 + 12449 12355 12453 + 12453 12454 12449 + 12449 12454 12450 + 12455 12450 12454 + 12451 12450 12455 + 12455 12456 12451 + 12451 12456 12452 + 12453 12355 12359 + 12359 12457 12453 + 12458 12453 12457 + 12454 12453 12458 + 12458 12459 12454 + 12454 12459 12455 + 12460 12455 12459 + 12456 12455 12460 + 12460 12461 12456 + 12452 12456 12461 + 12364 12457 12359 + 12457 12364 12462 + 12462 12463 12457 + 12457 12463 12458 + 12464 12458 12463 + 12459 12458 12464 + 12464 12465 12459 + 12459 12465 12460 + 12460 12465 12466 + 12461 12460 12466 + 12467 12462 12364 + 12468 12462 12467 + 12462 12468 12469 + 12463 12462 12469 + 12463 12469 12464 + 12464 12469 12470 + 12465 12464 12470 + 12470 12466 12465 + 12364 12471 12467 + 12472 12467 12471 + 12467 12472 12473 + 12473 12474 12467 + 12467 12474 12468 + 12363 12471 12364 + 12369 12471 12363 + 12471 12369 12472 + 12472 12369 12475 + 12475 12476 12472 + 12476 12477 12472 + 12477 12473 12472 + 12473 12477 12478 + 12474 12473 12478 + 12478 12479 12474 + 12468 12474 12479 + 12368 12475 12369 + 12374 12475 12368 + 12475 12374 12480 + 12480 12476 12475 + 12476 12480 12481 + 12481 12477 12476 + 12477 12481 12482 + 12482 12478 12477 + 12478 12482 12483 + 12479 12478 12483 + 12470 12479 12483 + 12468 12479 12470 + 12469 12468 12470 + 12480 12374 12379 + 12379 12484 12480 + 12484 12485 12480 + 12485 12481 12480 + 12481 12485 12482 + 12483 12482 12485 + 12486 12484 12379 + 12484 12486 12487 + 12487 12485 12484 + 12485 12487 12483 + 12379 12378 12486 + 12486 12378 12488 + 12488 12489 12486 + 12489 12490 12486 + 12490 12487 12486 + 12487 12490 12483 + 12383 12488 12378 + 12491 12488 12383 + 12488 12491 12492 + 12492 12489 12488 + 12489 12492 12493 + 12493 12490 12489 + 12490 12493 12494 + 12494 12483 12490 + 12383 12387 12491 + 12491 12387 12495 + 12495 12496 12491 + 12492 12491 12496 + 12496 12497 12492 + 12497 12498 12492 + 12498 12493 12492 + 12493 12498 12494 + 12391 12495 12387 + 12499 12495 12391 + 12495 12499 12500 + 12500 12496 12495 + 12496 12500 12501 + 12501 12497 12496 + 12497 12501 12502 + 12502 12498 12497 + 12498 12502 12494 + 12391 12395 12499 + 12499 12395 12503 + 12503 12504 12499 + 12500 12499 12504 + 12504 12505 12500 + 12501 12500 12505 + 12505 12506 12501 + 12502 12501 12506 + 12399 12503 12395 + 12507 12503 12399 + 12503 12507 12508 + 12508 12504 12503 + 12504 12508 12509 + 12509 12505 12504 + 12505 12509 12510 + 12510 12506 12505 + 12399 12403 12507 + 12507 12403 12431 + 12431 12511 12507 + 12508 12507 12511 + 12511 12512 12508 + 12509 12508 12512 + 12512 12513 12509 + 12510 12509 12513 + 12513 12514 12510 + 12515 12510 12514 + 12506 12510 12515 + 12435 12511 12431 + 12511 12435 12440 + 12440 12512 12511 + 12512 12440 12516 + 12516 12513 12512 + 12513 12516 12517 + 12517 12514 12513 + 12514 12517 12518 + 12518 12519 12514 + 12514 12519 12515 + 12516 12440 12439 + 12439 12520 12516 + 12517 12516 12520 + 12520 12521 12517 + 12521 12522 12517 + 12522 12518 12517 + 12523 12518 12522 + 12518 12523 12524 + 12519 12518 12524 + 12515 12519 12524 + 12444 12520 12439 + 12520 12444 12525 + 12525 12521 12520 + 12521 12525 12526 + 12526 12522 12521 + 12522 12526 12527 + 12527 12523 12522 + 12525 12444 12448 + 12448 12528 12525 + 12528 12529 12525 + 12529 12526 12525 + 12526 12529 12527 + 12530 12527 12529 + 12527 12530 12466 + 12523 12527 12466 + 12452 12528 12448 + 12528 12452 12531 + 12531 12529 12528 + 12529 12531 12530 + 12531 12461 12530 + 12466 12530 12461 + 12531 12452 12461 + 12466 12470 12483 + 12523 12466 12483 + 12483 12494 12523 + 12494 12532 12523 + 12532 12524 12523 + 12524 12532 12533 + 12533 12515 12524 + 12515 12533 12506 + 12506 12533 12502 + 12502 12532 12494 + 12502 12533 12532 + 12534 12535 12536 + 12537 12535 12534 + 12537 12538 12535 + 12538 12539 12535 + 12535 12539 12540 + 12540 12541 12535 + 12535 12541 12542 + 12534 12543 12537 + 12537 12543 12544 + 12544 12545 12537 + 12545 12546 12537 + 12546 12538 12537 + 12547 12538 12546 + 12539 12538 12547 + 12543 12534 12548 + 12543 12548 12549 + 12549 12544 12543 + 12544 12549 12550 + 12550 12551 12544 + 12544 12551 12552 + 12552 12545 12544 + 12552 12546 12545 + 12548 12534 12553 + 12553 12554 12548 + 12548 12554 12555 + 12555 12556 12548 + 12556 12549 12548 + 12550 12549 12556 + 12553 12534 12542 + 12557 12553 12542 + 12558 12553 12557 + 12558 12554 12553 + 12554 12558 12559 + 12559 12555 12554 + 12560 12555 12559 + 12555 12560 12561 + 12561 12556 12555 + 12542 12562 12557 + 12563 12557 12562 + 12564 12557 12563 + 12557 12564 12558 + 12559 12558 12564 + 12564 12565 12559 + 12566 12559 12565 + 12559 12566 12560 + 12567 12562 12542 + 12562 12567 12568 + 12568 12569 12562 + 12562 12569 12563 + 12542 12570 12567 + 12571 12567 12570 + 12568 12567 12571 + 12571 12572 12568 + 12568 12572 12573 + 12573 12574 12568 + 12569 12568 12574 + 12575 12570 12542 + 12570 12575 12576 + 12576 12577 12570 + 12570 12577 12571 + 12578 12571 12577 + 12571 12578 12579 + 12579 12572 12571 + 12575 12542 12580 + 12580 12581 12575 + 12575 12581 12582 + 12576 12575 12582 + 12541 12580 12542 + 12583 12580 12541 + 12583 12581 12580 + 12581 12583 12584 + 12584 12582 12581 + 12541 12585 12583 + 12583 12585 12586 + 12586 12584 12583 + 12587 12584 12586 + 12582 12584 12587 + 12588 12585 12541 + 12585 12588 12589 + 12589 12586 12585 + 12586 12589 12590 + 12590 12591 12586 + 12586 12591 12587 + 12541 12540 12588 + 12588 12540 12592 + 12592 12593 12588 + 12589 12588 12593 + 12593 12594 12589 + 12590 12589 12594 + 12592 12540 12539 + 12539 12595 12592 + 12596 12592 12595 + 12592 12596 12597 + 12597 12593 12592 + 12593 12597 12598 + 12598 12594 12593 + 12547 12595 12539 + 12599 12595 12547 + 12595 12599 12596 + 12600 12596 12599 + 12597 12596 12600 + 12600 12601 12597 + 12597 12601 12602 + 12602 12598 12597 + 12603 12598 12602 + 12594 12598 12603 + 12547 12604 12599 + 12599 12604 12605 + 12605 12606 12599 + 12599 12606 12607 + 12607 12600 12599 + 12604 12547 12608 + 12608 12609 12604 + 12605 12604 12609 + 12609 12610 12605 + 12611 12605 12610 + 12605 12611 12612 + 12612 12606 12605 + 12546 12608 12547 + 12613 12608 12546 + 12609 12608 12613 + 12613 12614 12609 + 12609 12614 12615 + 12615 12610 12609 + 12616 12610 12615 + 12610 12616 12611 + 12617 12611 12616 + 12612 12611 12617 + 12546 12618 12613 + 12619 12613 12618 + 12614 12613 12619 + 12619 12620 12614 + 12615 12614 12620 + 12620 12621 12615 + 12622 12615 12621 + 12615 12622 12616 + 12552 12618 12546 + 12618 12552 12623 + 12623 12624 12618 + 12618 12624 12619 + 12624 12625 12619 + 12625 12626 12619 + 12620 12619 12626 + 12626 12627 12620 + 12621 12620 12627 + 12628 12623 12552 + 12623 12628 12629 + 12630 12623 12629 + 12624 12623 12630 + 12630 12625 12624 + 12625 12630 12631 + 12631 12632 12625 + 12626 12625 12632 + 12552 12551 12628 + 12633 12628 12551 + 12628 12633 12634 + 12634 12629 12628 + 12629 12634 12635 + 12635 12636 12629 + 12630 12629 12636 + 12636 12631 12630 + 12637 12631 12636 + 12637 12632 12631 + 12551 12550 12633 + 12638 12633 12550 + 12634 12633 12638 + 12638 12639 12634 + 12634 12639 12640 + 12640 12635 12634 + 12635 12640 12641 + 12642 12635 12641 + 12642 12636 12635 + 12550 12643 12638 + 12644 12638 12643 + 12638 12644 12645 + 12645 12639 12638 + 12640 12639 12645 + 12646 12640 12645 + 12647 12640 12646 + 12647 12641 12640 + 12556 12643 12550 + 12648 12643 12556 + 12643 12648 12644 + 12649 12644 12648 + 12645 12644 12649 + 12649 12650 12645 + 12646 12645 12650 + 12650 12651 12646 + 12651 12652 12646 + 12652 12647 12646 + 12556 12561 12648 + 12648 12561 12653 + 12653 12654 12648 + 12648 12654 12649 + 12649 12654 12655 + 12656 12649 12655 + 12650 12649 12656 + 12657 12650 12656 + 12651 12650 12657 + 12653 12561 12560 + 12560 12658 12653 + 12659 12653 12658 + 12654 12653 12659 + 12655 12654 12659 + 12655 12659 12660 + 12660 12661 12655 + 12655 12661 12656 + 12661 12662 12656 + 12657 12656 12662 + 12663 12658 12560 + 12664 12658 12663 + 12658 12664 12659 + 12660 12659 12664 + 12664 12665 12660 + 12666 12660 12665 + 12660 12666 12667 + 12667 12661 12660 + 12662 12661 12667 + 12560 12566 12663 + 12663 12566 12668 + 12668 12669 12663 + 12670 12663 12669 + 12663 12670 12664 + 12664 12670 12671 + 12671 12665 12664 + 12672 12665 12671 + 12665 12672 12666 + 12565 12668 12566 + 12668 12565 12673 + 12673 12674 12668 + 12668 12674 12675 + 12675 12669 12668 + 12676 12669 12675 + 12669 12676 12670 + 12671 12670 12676 + 12673 12565 12564 + 12564 12677 12673 + 12673 12677 12678 + 12678 12679 12673 + 12674 12673 12679 + 12679 12680 12674 + 12675 12674 12680 + 12563 12677 12564 + 12677 12563 12681 + 12681 12678 12677 + 12678 12681 12682 + 12682 12683 12678 + 12678 12683 12684 + 12684 12679 12678 + 12679 12684 12685 + 12685 12680 12679 + 12686 12681 12563 + 12682 12681 12686 + 12563 12569 12686 + 12574 12686 12569 + 12686 12574 12687 + 12687 12688 12686 + 12686 12688 12682 + 12687 12574 12573 + 12573 12689 12687 + 12687 12689 12690 + 12690 12691 12687 + 12688 12687 12691 + 12691 12692 12688 + 12682 12688 12692 + 12689 12573 12693 + 12693 12694 12689 + 12689 12694 12695 + 12695 12690 12689 + 12696 12690 12695 + 12690 12696 12697 + 12697 12691 12690 + 12692 12691 12697 + 12693 12573 12572 + 12572 12579 12693 + 12698 12693 12579 + 12694 12693 12698 + 12698 12699 12694 + 12694 12699 12700 + 12700 12701 12694 + 12701 12695 12694 + 12702 12695 12701 + 12702 12696 12695 + 12579 12703 12698 + 12704 12698 12703 + 12698 12704 12705 + 12705 12699 12698 + 12699 12705 12706 + 12706 12700 12699 + 12707 12703 12579 + 12708 12703 12707 + 12703 12708 12704 + 12704 12708 12709 + 12709 12710 12704 + 12705 12704 12710 + 12579 12578 12707 + 12711 12707 12578 + 12712 12707 12711 + 12707 12712 12708 + 12708 12712 12713 + 12713 12714 12708 + 12708 12714 12709 + 12578 12715 12711 + 12716 12711 12715 + 12717 12711 12716 + 12711 12717 12712 + 12712 12717 12718 + 12713 12712 12718 + 12577 12715 12578 + 12715 12577 12576 + 12576 12719 12715 + 12715 12719 12716 + 12716 12719 12720 + 12720 12721 12716 + 12722 12716 12721 + 12716 12722 12717 + 12719 12576 12723 + 12723 12720 12719 + 12720 12723 12724 + 12724 12725 12720 + 12720 12725 12726 + 12726 12721 12720 + 12727 12721 12726 + 12721 12727 12722 + 12582 12723 12576 + 12724 12723 12582 + 12582 12728 12724 + 12724 12728 12729 + 12729 12730 12724 + 12725 12724 12730 + 12730 12731 12725 + 12726 12725 12731 + 12587 12728 12582 + 12728 12587 12732 + 12732 12729 12728 + 12729 12732 12733 + 12733 12734 12729 + 12730 12729 12734 + 12735 12730 12734 + 12731 12730 12735 + 12736 12732 12587 + 12732 12736 12737 + 12733 12732 12737 + 12738 12733 12737 + 12734 12733 12738 + 12738 12739 12734 + 12735 12734 12739 + 12587 12591 12736 + 12740 12736 12591 + 12737 12736 12740 + 12741 12737 12740 + 12742 12737 12741 + 12737 12742 12738 + 12742 12743 12738 + 12743 12744 12738 + 12744 12739 12738 + 12591 12590 12740 + 12745 12740 12590 + 12741 12740 12745 + 12745 12746 12741 + 12741 12746 12747 + 12747 12742 12741 + 12748 12742 12747 + 12748 12743 12742 + 12590 12749 12745 + 12750 12745 12749 + 12745 12750 12751 + 12751 12746 12745 + 12752 12746 12751 + 12746 12752 12747 + 12748 12747 12752 + 12594 12749 12590 + 12603 12749 12594 + 12749 12603 12750 + 12753 12750 12603 + 12751 12750 12753 + 12753 12754 12751 + 12751 12754 12755 + 12755 12752 12751 + 12756 12752 12755 + 12756 12757 12752 + 12752 12757 12748 + 12603 12758 12753 + 12759 12753 12758 + 12754 12753 12759 + 12760 12754 12759 + 12761 12754 12760 + 12754 12761 12755 + 12755 12761 12762 + 12756 12755 12762 + 12602 12758 12603 + 12763 12758 12602 + 12758 12763 12759 + 12764 12759 12763 + 12760 12759 12764 + 12764 12765 12760 + 12760 12765 12766 + 12766 12767 12760 + 12767 12761 12760 + 12602 12768 12763 + 12763 12768 12769 + 12769 12770 12763 + 12763 12770 12764 + 12771 12764 12770 + 12772 12764 12771 + 12772 12765 12764 + 12768 12602 12601 + 12601 12773 12768 + 12769 12768 12773 + 12773 12774 12769 + 12775 12769 12774 + 12769 12775 12776 + 12776 12770 12769 + 12770 12776 12771 + 12773 12601 12600 + 12600 12777 12773 + 12773 12777 12778 + 12778 12774 12773 + 12779 12774 12778 + 12774 12779 12775 + 12727 12775 12779 + 12776 12775 12727 + 12727 12780 12776 + 12771 12776 12780 + 12777 12600 12781 + 12781 12782 12777 + 12782 12778 12777 + 12778 12782 12718 + 12783 12778 12718 + 12778 12783 12779 + 12600 12607 12781 + 12781 12607 12784 + 12784 12785 12781 + 12781 12785 12786 + 12786 12782 12781 + 12718 12782 12786 + 12784 12607 12787 + 12787 12788 12784 + 12784 12788 12789 + 12789 12790 12784 + 12785 12784 12790 + 12790 12791 12785 + 12786 12785 12791 + 12606 12787 12607 + 12606 12612 12787 + 12612 12792 12787 + 12787 12792 12793 + 12793 12788 12787 + 12788 12793 12794 + 12794 12789 12788 + 12792 12612 12795 + 12796 12792 12795 + 12793 12792 12796 + 12796 12797 12793 + 12793 12797 12798 + 12798 12794 12793 + 12799 12794 12798 + 12789 12794 12799 + 12617 12795 12612 + 12800 12795 12617 + 12795 12800 12801 + 12801 12796 12795 + 12802 12796 12801 + 12802 12797 12796 + 12798 12797 12802 + 12803 12798 12802 + 12804 12798 12803 + 12798 12804 12799 + 12617 12805 12800 + 12800 12805 12672 + 12672 12806 12800 + 12800 12806 12807 + 12801 12800 12807 + 12808 12801 12807 + 12802 12801 12808 + 12805 12617 12809 + 12809 12810 12805 + 12805 12810 12666 + 12666 12672 12805 + 12616 12809 12617 + 12811 12809 12616 + 12811 12810 12809 + 12811 12812 12810 + 12810 12812 12667 + 12667 12666 12810 + 12616 12622 12811 + 12811 12622 12813 + 12813 12814 12811 + 12814 12815 12811 + 12815 12812 12811 + 12667 12812 12815 + 12815 12816 12667 + 12816 12662 12667 + 12621 12813 12622 + 12813 12621 12817 + 12817 12818 12813 + 12813 12818 12819 + 12819 12814 12813 + 12819 12820 12814 + 12820 12815 12814 + 12815 12820 12821 + 12821 12816 12815 + 12817 12621 12627 + 12817 12627 12822 + 12822 12823 12817 + 12818 12817 12823 + 12823 12824 12818 + 12819 12818 12824 + 12824 12825 12819 + 12825 12826 12819 + 12826 12820 12819 + 12827 12822 12627 + 12828 12822 12827 + 12828 12829 12822 + 12823 12822 12829 + 12830 12823 12829 + 12830 12824 12823 + 12627 12626 12827 + 12632 12827 12626 + 12827 12632 12831 + 12828 12827 12831 + 12832 12828 12831 + 12829 12828 12832 + 12832 12833 12829 + 12830 12829 12833 + 12833 12834 12830 + 12834 12835 12830 + 12830 12835 12824 + 12637 12831 12632 + 12831 12637 12836 + 12836 12837 12831 + 12832 12831 12837 + 12838 12832 12837 + 12833 12832 12838 + 12838 12834 12833 + 12834 12838 12839 + 12839 12835 12834 + 12824 12835 12839 + 12839 12825 12824 + 12839 12826 12825 + 12637 12840 12836 + 12840 12841 12836 + 12842 12836 12841 + 12836 12842 12843 + 12843 12837 12836 + 12837 12843 12838 + 12844 12838 12843 + 12838 12844 12839 + 12839 12844 12826 + 12636 12840 12637 + 12642 12840 12636 + 12840 12642 12841 + 12642 12845 12841 + 12841 12845 12846 + 12846 12847 12841 + 12841 12847 12842 + 12641 12845 12642 + 12846 12845 12641 + 12641 12647 12846 + 12846 12647 12652 + 12847 12846 12652 + 12652 12848 12847 + 12842 12847 12848 + 12848 12849 12842 + 12842 12849 12850 + 12843 12842 12850 + 12850 12844 12843 + 12850 12851 12844 + 12851 12826 12844 + 12820 12826 12851 + 12848 12652 12651 + 12848 12651 12852 + 12848 12852 12853 + 12853 12849 12848 + 12850 12849 12853 + 12850 12853 12851 + 12851 12853 12821 + 12821 12820 12851 + 12852 12651 12657 + 12657 12854 12852 + 12854 12853 12852 + 12853 12854 12821 + 12821 12854 12816 + 12854 12662 12816 + 12662 12854 12657 + 12671 12806 12672 + 12806 12671 12855 + 12855 12807 12806 + 12676 12855 12671 + 12856 12855 12676 + 12807 12855 12856 + 12856 12857 12807 + 12807 12857 12858 + 12858 12859 12807 + 12807 12859 12808 + 12676 12860 12856 + 12861 12856 12860 + 12857 12856 12861 + 12861 12862 12857 + 12858 12857 12862 + 12675 12860 12676 + 12860 12675 12863 + 12863 12864 12860 + 12860 12864 12861 + 12864 12865 12861 + 12866 12861 12865 + 12862 12861 12866 + 12680 12863 12675 + 12867 12863 12680 + 12863 12867 12868 + 12868 12864 12863 + 12864 12868 12869 + 12869 12865 12864 + 12869 12870 12865 + 12865 12870 12866 + 12680 12685 12867 + 12871 12867 12685 + 12868 12867 12871 + 12871 12872 12868 + 12868 12872 12873 + 12873 12869 12868 + 12870 12869 12873 + 12873 12874 12870 + 12866 12870 12874 + 12875 12866 12874 + 12862 12866 12875 + 12685 12876 12871 + 12877 12871 12876 + 12871 12877 12878 + 12878 12872 12871 + 12872 12878 12879 + 12879 12873 12872 + 12873 12879 12880 + 12880 12874 12873 + 12881 12876 12685 + 12881 12882 12876 + 12876 12882 12877 + 12877 12882 12883 + 12883 12884 12877 + 12878 12877 12884 + 12884 12885 12878 + 12879 12878 12885 + 12685 12684 12881 + 12881 12684 12683 + 12683 12886 12881 + 12882 12881 12886 + 12886 12887 12882 + 12882 12887 12883 + 12888 12883 12887 + 12889 12883 12888 + 12883 12889 12890 + 12890 12884 12883 + 12885 12884 12890 + 12891 12886 12683 + 12887 12886 12891 + 12887 12891 12888 + 12888 12891 12682 + 12892 12888 12682 + 12889 12888 12892 + 12892 12893 12889 + 12893 12894 12889 + 12894 12890 12889 + 12683 12682 12891 + 12892 12895 12893 + 12895 12892 12896 + 12896 12897 12895 + 12895 12897 12898 + 12899 12895 12898 + 12892 12692 12896 + 12697 12896 12692 + 12896 12697 12900 + 12900 12897 12896 + 12897 12900 12901 + 12901 12898 12897 + 12902 12898 12901 + 12692 12892 12682 + 12899 12898 12903 + 12903 12904 12899 + 12893 12899 12904 + 12904 12894 12893 + 12894 12904 12905 + 12894 12905 12890 + 12905 12906 12890 + 12890 12906 12885 + 12905 12904 12903 + 12903 12907 12905 + 12906 12905 12907 + 12907 12908 12906 + 12885 12906 12908 + 12908 12909 12885 + 12885 12909 12879 + 12880 12879 12909 + 12910 12907 12903 + 12907 12910 12911 + 12911 12908 12907 + 12908 12911 12912 + 12912 12909 12908 + 12909 12912 12880 + 12880 12912 12913 + 12913 12914 12880 + 12874 12880 12914 + 12903 12915 12910 + 12910 12915 12916 + 12916 12917 12910 + 12910 12917 12918 + 12918 12911 12910 + 12912 12911 12918 + 12918 12913 12912 + 12919 12915 12903 + 12920 12915 12919 + 12920 12916 12915 + 12921 12916 12920 + 12917 12916 12921 + 12917 12921 12922 + 12922 12923 12917 + 12917 12923 12918 + 12902 12919 12903 + 12924 12919 12902 + 12919 12924 12925 + 12925 12920 12919 + 12926 12920 12925 + 12920 12926 12921 + 12921 12926 12927 + 12927 12922 12921 + 12924 12902 12901 + 12925 12924 12901 + 12901 12928 12925 + 12929 12925 12928 + 12925 12929 12926 + 12926 12929 12927 + 12930 12928 12901 + 12931 12928 12930 + 12928 12931 12929 + 12932 12929 12931 + 12929 12932 12927 + 12901 12900 12930 + 12930 12900 12697 + 12697 12696 12930 + 12933 12930 12696 + 12930 12933 12931 + 12931 12933 12934 + 12931 12934 12932 + 12932 12934 12935 + 12936 12932 12935 + 12932 12936 12927 + 12696 12702 12933 + 12937 12933 12702 + 12933 12937 12934 + 12935 12934 12937 + 12937 12938 12935 + 12935 12938 12939 + 12939 12940 12935 + 12936 12935 12940 + 12702 12941 12937 + 12938 12937 12941 + 12941 12942 12938 + 12938 12942 12943 + 12943 12944 12938 + 12944 12945 12938 + 12945 12939 12938 + 12701 12941 12702 + 12942 12941 12701 + 12942 12701 12700 + 12700 12943 12942 + 12946 12943 12700 + 12943 12946 12947 + 12947 12944 12943 + 12944 12947 12948 + 12948 12949 12944 + 12944 12949 12950 + 12950 12945 12944 + 12700 12706 12946 + 12946 12706 12951 + 12951 12952 12946 + 12946 12952 12953 + 12953 12947 12946 + 12948 12947 12953 + 12954 12951 12706 + 12955 12951 12954 + 12955 12952 12951 + 12952 12955 12956 + 12956 12953 12952 + 12957 12953 12956 + 12953 12957 12948 + 12706 12705 12954 + 12705 12958 12954 + 12959 12954 12958 + 12960 12954 12959 + 12954 12960 12955 + 12960 12961 12955 + 12961 12956 12955 + 12962 12956 12961 + 12956 12962 12957 + 12710 12958 12705 + 12958 12710 12963 + 12958 12963 12959 + 12964 12959 12963 + 12965 12959 12964 + 12959 12965 12960 + 12960 12965 12966 + 12966 12961 12960 + 12963 12710 12709 + 12709 12967 12963 + 12963 12967 12964 + 12967 12709 12968 + 12967 12968 12969 + 12969 12970 12967 + 12967 12970 12964 + 12968 12709 12714 + 12714 12971 12968 + 12968 12971 12972 + 12972 12969 12968 + 12973 12969 12972 + 12973 12970 12969 + 12970 12973 12974 + 12974 12975 12970 + 12970 12975 12964 + 12971 12714 12713 + 12713 12976 12971 + 12971 12976 12977 + 12977 12978 12971 + 12971 12978 12972 + 12979 12972 12978 + 12980 12972 12979 + 12972 12980 12973 + 12974 12973 12980 + 12976 12713 12981 + 12981 12982 12976 + 12977 12976 12982 + 12982 12983 12977 + 12984 12977 12983 + 12977 12984 12985 + 12985 12978 12977 + 12978 12985 12979 + 12718 12981 12713 + 12986 12981 12718 + 12982 12981 12986 + 12986 12987 12982 + 12982 12987 12988 + 12988 12983 12982 + 12989 12983 12988 + 12983 12989 12984 + 12990 12984 12989 + 12985 12984 12990 + 12718 12991 12986 + 12986 12991 12992 + 12992 12993 12986 + 12987 12986 12993 + 12993 12994 12987 + 12988 12987 12994 + 12786 12991 12718 + 12991 12786 12995 + 12995 12992 12991 + 12992 12995 12996 + 12996 12997 12992 + 12992 12997 12998 + 12998 12993 12992 + 12994 12993 12998 + 12791 12995 12786 + 12996 12995 12791 + 12791 12999 12996 + 13000 12996 12999 + 12997 12996 13000 + 13000 13001 12997 + 12998 12997 13001 + 13001 13002 12998 + 13003 12998 13002 + 12998 13003 12994 + 13004 12999 12791 + 12999 13004 13005 + 13005 13006 12999 + 12999 13006 13000 + 13006 13007 13000 + 13007 13008 13000 + 13001 13000 13008 + 12791 12790 13004 + 13004 12790 12789 + 12789 13009 13004 + 13004 13009 13010 + 13010 13005 13004 + 13005 13010 13011 + 13012 13005 13011 + 13006 13005 13012 + 13012 13007 13006 + 12799 13009 12789 + 13009 12799 13013 + 13013 13010 13009 + 13011 13010 13013 + 13014 13011 13013 + 13015 13011 13014 + 13012 13011 13015 + 13015 13016 13012 + 13007 13012 13016 + 13016 13017 13007 + 13008 13007 13017 + 13018 13013 12799 + 13014 13013 13018 + 13018 13019 13014 + 13014 13019 13020 + 13020 13015 13014 + 13021 13015 13020 + 13021 13022 13015 + 13016 13015 13022 + 12799 12804 13018 + 13018 12804 13023 + 13024 13018 13023 + 13019 13018 13024 + 13025 13019 13024 + 13026 13019 13025 + 13019 13026 13020 + 13020 13026 13027 + 13021 13020 13027 + 13023 12804 12803 + 13023 12803 13028 + 13028 13029 13023 + 13023 13029 13030 + 13030 13024 13023 + 13025 13024 13030 + 13030 13031 13025 + 13032 13025 13031 + 13032 13026 13025 + 13028 12803 12802 + 12802 13033 13028 + 13034 13028 13033 + 13028 13034 13035 + 13035 13029 13028 + 13029 13035 13036 + 13036 13030 13029 + 13030 13036 13037 + 13037 13031 13030 + 12808 13033 12802 + 13038 13033 12808 + 13033 13038 13034 + 13034 13038 13039 + 13039 13040 13034 + 13035 13034 13040 + 13040 13041 13035 + 13035 13041 13042 + 13042 13036 13035 + 13037 13036 13042 + 12808 13043 13038 + 13038 13043 12989 + 12989 13039 13038 + 12988 13039 12989 + 13039 12988 13044 + 13044 13040 13039 + 13040 13044 13045 + 13045 13041 13040 + 13043 12808 12859 + 12859 12990 13043 + 12989 13043 12990 + 12990 12859 12858 + 12858 13046 12990 + 12990 13046 12985 + 12979 12985 13046 + 13046 13047 12979 + 13048 12979 13047 + 12979 13048 12980 + 13046 12858 13049 + 13049 13047 13046 + 13047 13049 13050 + 13050 13051 13047 + 13047 13051 13048 + 13048 13051 13052 + 13052 13053 13048 + 12980 13048 13053 + 13049 12858 12862 + 12862 13054 13049 + 13050 13049 13054 + 13054 13055 13050 + 13050 13055 13056 + 13056 13057 13050 + 13057 13058 13050 + 13051 13050 13058 + 12875 13054 12862 + 12875 13055 13054 + 13055 12875 13059 + 13059 13056 13055 + 13060 13056 13059 + 13056 13060 13061 + 13061 13057 13056 + 13062 13057 13061 + 13057 13062 13063 + 13063 13058 13057 + 12874 13059 12875 + 12914 13059 12874 + 13059 12914 13060 + 13060 12914 12913 + 12913 13064 13060 + 13060 13064 13065 + 13065 13061 13060 + 13062 13061 13065 + 13065 13066 13062 + 13062 13066 13067 + 13067 13063 13062 + 13068 13063 13067 + 13068 13058 13063 + 13058 13068 13051 + 13051 13068 13052 + 13064 12913 12918 + 12918 13069 13064 + 13064 13069 13070 + 13070 13065 13064 + 13065 13070 13071 + 13071 13066 13065 + 13066 13071 13072 + 13072 13073 13066 + 13066 13073 13067 + 13069 12918 12923 + 12923 13074 13069 + 13069 13074 13075 + 13075 13076 13069 + 13076 13070 13069 + 13071 13070 13076 + 13076 13077 13071 + 13071 13077 13078 + 13078 13072 13071 + 13074 12923 12922 + 12922 13079 13074 + 13074 13079 13080 + 13080 13081 13074 + 13074 13081 13075 + 13079 12922 12927 + 12927 13082 13079 + 13079 13082 13080 + 13082 13083 13080 + 13084 13080 13083 + 13080 13084 13081 + 13081 13084 13075 + 12936 13082 12927 + 13082 12936 13085 + 13085 13083 13082 + 13083 13085 13086 + 13083 13086 13084 + 13087 13084 13086 + 13084 13087 13075 + 13075 13087 13088 + 13075 13088 13089 + 13089 13076 13075 + 13077 13076 13089 + 13085 12936 12940 + 13090 13085 12940 + 13085 13090 13086 + 13086 13090 13091 + 13086 13091 13087 + 13088 13087 13091 + 13091 13092 13088 + 13088 13092 13093 + 13093 13089 13088 + 13094 13089 13093 + 13089 13094 13077 + 12940 13095 13090 + 13096 13090 13095 + 13090 13096 13091 + 13092 13091 13096 + 13096 13097 13092 + 13092 13097 13098 + 13098 13093 13092 + 13099 13093 13098 + 13093 13099 13094 + 13095 12940 12939 + 13095 12939 13100 + 13100 13096 13095 + 13097 13096 13100 + 13100 12950 13097 + 13098 13097 12950 + 12950 12949 13098 + 13101 13098 12949 + 13098 13101 13099 + 13099 13101 13102 + 13094 13099 13102 + 12939 12945 13100 + 12945 12950 13100 + 12949 12948 13101 + 13103 13101 12948 + 13101 13103 13102 + 13102 13103 13104 + 13105 13102 13104 + 13102 13105 13094 + 13077 13094 13105 + 13105 13078 13077 + 12948 12957 13103 + 13106 13103 12957 + 13103 13106 13104 + 13107 13104 13106 + 13104 13107 13108 + 13108 13109 13104 + 13109 13105 13104 + 13109 13078 13105 + 12957 12962 13106 + 13106 12962 13110 + 13110 13111 13106 + 13111 13107 13106 + 13112 13107 13111 + 13107 13112 13113 + 13113 13108 13107 + 12961 13110 12962 + 13114 13110 12961 + 13110 13114 13115 + 13115 13111 13110 + 13111 13115 13112 + 13112 13115 13116 + 13113 13112 13116 + 13116 13117 13113 + 13118 13113 13117 + 13108 13113 13118 + 12961 12966 13114 + 13114 12966 13119 + 13114 13119 13120 + 13120 13115 13114 + 13115 13120 13116 + 13121 13116 13120 + 13121 13122 13116 + 13116 13122 13123 + 13123 13117 13116 + 12966 13124 13119 + 13124 12964 13119 + 13119 12964 13125 + 13125 13126 13119 + 13119 13126 13120 + 13126 13127 13120 + 13127 13121 13120 + 13124 12966 12965 + 12964 13124 12965 + 13127 13126 13125 + 13127 13125 13128 + 13121 13127 13128 + 13128 13129 13121 + 13122 13121 13129 + 13129 13130 13122 + 13130 13123 13122 + 13131 13123 13130 + 13117 13123 13131 + 13132 13117 13131 + 13117 13132 13118 + 13125 13133 13128 + 13134 13128 13133 + 13128 13134 13135 + 13135 13129 13128 + 13130 13129 13135 + 13136 13130 13135 + 13130 13136 13131 + 13136 13137 13131 + 13132 13131 13137 + 13133 13125 12964 + 13138 13133 12964 + 13134 13133 13138 + 13138 13139 13134 + 13135 13134 13139 + 13139 13140 13135 + 13136 13135 13140 + 13140 13141 13136 + 13136 13141 13137 + 12975 13138 12964 + 13142 13138 12975 + 13139 13138 13142 + 13139 13142 13140 + 13142 13143 13140 + 13140 13143 13141 + 13141 13143 13144 + 13144 13137 13141 + 13145 13137 13144 + 13137 13145 13132 + 13118 13132 13145 + 12975 13146 13142 + 13142 13146 13147 + 13143 13142 13147 + 13147 13144 13143 + 13148 13144 13147 + 13144 13148 13145 + 13145 13148 13149 + 13149 13150 13145 + 13145 13150 13118 + 12975 12974 13146 + 13146 12974 13151 + 13151 13147 13146 + 13147 13151 13152 + 13147 13152 13148 + 13149 13148 13152 + 13153 13151 12974 + 13152 13151 13153 + 13153 13154 13152 + 13152 13154 13149 + 13154 13155 13149 + 13156 13149 13155 + 13149 13156 13157 + 13157 13150 13149 + 12980 13153 12974 + 13053 13153 12980 + 13153 13053 13154 + 13154 13053 13052 + 13052 13155 13154 + 13067 13155 13052 + 13155 13067 13156 + 13073 13156 13067 + 13073 13158 13156 + 13158 13157 13156 + 13157 13158 13159 + 13159 13160 13157 + 13150 13157 13160 + 13160 13118 13150 + 13118 13160 13108 + 13067 13052 13068 + 13108 13160 13159 + 13159 13109 13108 + 13109 13159 13078 + 13078 13159 13158 + 13158 13072 13078 + 13072 13158 13073 + 12994 13044 12988 + 13045 13044 12994 + 12994 13003 13045 + 13045 13003 13161 + 13161 13162 13045 + 13041 13045 13162 + 13162 13042 13041 + 13163 13042 13162 + 13042 13163 13037 + 13002 13161 13003 + 13161 13002 13164 + 13164 13165 13161 + 13162 13161 13165 + 13166 13162 13165 + 13166 13163 13162 + 13167 13163 13166 + 13037 13163 13167 + 13164 13002 13168 + 13164 13168 13169 + 13169 13170 13164 + 13165 13164 13170 + 13170 13171 13165 + 13166 13165 13171 + 13171 13172 13166 + 13172 13167 13166 + 13002 13001 13168 + 13008 13168 13001 + 13168 13008 13173 + 13173 13169 13168 + 13174 13169 13173 + 13174 13175 13169 + 13170 13169 13175 + 13176 13170 13175 + 13176 13171 13170 + 13017 13173 13008 + 13174 13173 13017 + 13017 13177 13174 + 13174 13177 13178 + 13175 13174 13178 + 13178 13179 13175 + 13176 13175 13179 + 13179 13180 13176 + 13180 13181 13176 + 13176 13181 13171 + 13182 13177 13017 + 13177 13182 13183 + 13183 13178 13177 + 13178 13183 13180 + 13180 13179 13178 + 13182 13017 13016 + 13182 13016 13022 + 13183 13182 13022 + 13184 13183 13022 + 13180 13183 13184 + 13184 13185 13180 + 13181 13180 13185 + 13185 13186 13181 + 13171 13181 13186 + 13186 13172 13171 + 13186 13167 13172 + 13022 13187 13184 + 13187 13188 13184 + 13188 13189 13184 + 13184 13189 13185 + 13185 13189 13190 + 13190 13186 13185 + 13186 13190 13167 + 13191 13167 13190 + 13167 13191 13037 + 13187 13022 13021 + 13192 13187 13021 + 13187 13192 13193 + 13193 13188 13187 + 13188 13193 13194 + 13194 13195 13188 + 13189 13188 13195 + 13195 13190 13189 + 13195 13191 13190 + 13195 13196 13191 + 13191 13196 13037 + 13196 13031 13037 + 13021 13027 13192 + 13192 13027 13197 + 13193 13192 13197 + 13197 13194 13193 + 13196 13194 13197 + 13195 13194 13196 + 13197 13027 13026 + 13197 13026 13032 + 13197 13032 13196 + 13031 13196 13032 + 12717 12783 12718 + 12779 12783 12717 + 12717 12722 12779 + 12779 12722 12727 + 12726 12780 12727 + 12780 12726 13198 + 13198 13199 12780 + 12780 13199 12771 + 12772 12771 13199 + 12731 13198 12726 + 13198 12731 13200 + 13201 13198 13200 + 13201 13199 13198 + 13201 13202 13199 + 13199 13202 12772 + 12772 13202 13203 + 13203 13204 12772 + 12765 12772 13204 + 12735 13200 12731 + 13200 12735 13205 + 13205 13206 13200 + 13201 13200 13206 + 13206 13207 13201 + 13207 13203 13201 + 13203 13202 13201 + 12739 13205 12735 + 13205 12739 13208 + 13209 13205 13208 + 13209 13206 13205 + 13209 13210 13206 + 13206 13210 13211 + 13211 13207 13206 + 13211 13203 13207 + 12744 13208 12739 + 13208 12744 13212 + 13212 13213 13208 + 13209 13208 13213 + 13213 13214 13209 + 13214 13210 13209 + 13210 13214 13215 + 13215 13216 13210 + 13216 13211 13210 + 12744 12743 13212 + 13217 13212 12743 + 13212 13217 13214 + 13214 13213 13212 + 12743 12748 13217 + 13218 13217 12748 + 13217 13218 13215 + 13214 13217 13215 + 12748 12757 13218 + 12757 12756 13218 + 12756 13219 13218 + 13215 13218 13219 + 13215 13219 13220 + 13220 13216 13215 + 13221 13216 13220 + 13216 13221 13222 + 13222 13211 13216 + 13211 13222 13203 + 13219 12756 12762 + 12762 13220 13219 + 13220 12762 13223 + 13224 13220 13223 + 13220 13224 13221 + 13221 13224 13225 + 13225 13226 13221 + 13226 13222 13221 + 13203 13222 13226 + 13226 13204 13203 + 13223 12762 12761 + 13223 12761 12767 + 13223 12767 13225 + 13223 13225 13224 + 12767 12766 13225 + 13226 13225 12766 + 13226 12766 13204 + 13204 12766 12765 + 13227 13228 13229 + 13230 13227 13229 + 13230 13229 13231 + 13232 13230 13231 + 13233 13232 13231 + 13231 13234 13233 + 13233 13234 13235 + 13236 13233 13235 + 13237 13234 13231 + 13234 13237 13238 + 13238 13235 13234 + 13239 13235 13238 + 13235 13239 13236 + 13236 13239 13240 + 13240 13241 13236 + 13242 13236 13241 + 13231 13228 13237 + 13237 13228 13243 + 13243 13244 13237 + 13237 13244 13245 + 13245 13238 13237 + 13246 13238 13245 + 13238 13246 13239 + 13239 13246 13247 + 13247 13240 13239 + 13248 13244 13243 + 13244 13248 13249 + 13249 13245 13244 + 13250 13245 13249 + 13245 13250 13246 + 13247 13246 13250 + 13250 13251 13247 + 13252 13247 13251 + 13240 13247 13252 + 13243 13253 13248 + 13248 13253 13254 + 13254 13255 13248 + 13249 13248 13255 + 13255 13256 13249 + 13257 13249 13256 + 13249 13257 13250 + 13253 13243 13258 + 13258 13259 13253 + 13254 13253 13259 + 13259 13260 13254 + 13261 13254 13260 + 13255 13254 13261 + 13227 13258 13243 + 13242 13262 13263 + 13236 13242 13263 + 13233 13236 13263 + 13232 13233 13263 + 13230 13232 13263 + 13227 13230 13263 + 13263 13264 13227 + 13265 13266 13267 + 13266 13268 13267 + 98 13269 2731 + 13269 13270 2731 + 13271 13272 13273 + 13274 13272 13271 + 13272 13274 13275 + 13272 13275 13276 + 13276 13277 13272 + 13271 13278 13274 + 13274 13278 13279 + 13280 13274 13279 + 13275 13274 13280 + 13280 13281 13275 + 13275 13281 13282 + 13282 13276 13275 + 13271 13283 13278 + 13278 13283 13284 + 13284 13279 13278 + 13283 13271 13285 + 13285 13286 13283 + 13284 13283 13286 + 13285 13271 13277 + 13287 13285 13277 + 13288 13285 13287 + 13285 13288 13286 + 13286 13288 13289 + 13289 13290 13286 + 13286 13290 13284 + 13277 13291 13287 + 13292 13287 13291 + 13293 13287 13292 + 13287 13293 13288 + 13288 13293 13294 + 13289 13288 13294 + 13295 13291 13277 + 13291 13295 13296 + 13291 13296 13292 + 13297 13292 13296 + 13298 13292 13297 + 13292 13298 13293 + 13293 13298 13299 + 13299 13294 13293 + 13277 13300 13295 + 13301 13295 13300 + 13296 13295 13301 + 13301 13297 13296 + 13297 13301 13302 + 13302 13303 13297 + 13297 13303 13298 + 13303 13299 13298 + 13304 13300 13277 + 13300 13304 13305 + 13305 13306 13300 + 13277 13276 13304 + 13304 13276 13282 + 13282 13307 13304 + 13307 13305 13304 + 13308 13305 13307 + 13305 13308 13309 + 13309 13310 13305 + 13311 13307 13282 + 13307 13311 13308 + 13312 13308 13311 + 13309 13308 13312 + 13312 13313 13309 + 13302 13309 13313 + 13309 13302 13301 + 13314 13309 13301 + 13282 13315 13311 + 13311 13315 13316 + 13316 13312 13311 + 13313 13312 13316 + 13316 13317 13313 + 13313 13317 13318 + 13318 13319 13313 + 13313 13319 13302 + 13315 13282 13281 + 13281 13320 13315 + 13316 13315 13320 + 13320 13321 13316 + 13317 13316 13321 + 13321 13322 13317 + 13317 13322 13323 + 13323 13318 13317 + 13324 13318 13323 + 13319 13318 13324 + 13320 13281 13280 + 13280 13325 13320 + 13320 13325 13326 + 13326 13321 13320 + 13322 13321 13326 + 13326 13327 13322 + 13322 13327 13328 + 13328 13323 13322 + 13329 13323 13328 + 13323 13329 13324 + 13325 13280 13330 + 13330 13331 13325 + 13326 13325 13331 + 13332 13326 13331 + 13327 13326 13332 + 13330 13280 13279 + 13279 13333 13330 + 13334 13330 13333 + 13334 13331 13330 + 13331 13334 13335 + 13335 13336 13331 + 13331 13336 13337 + 13337 13332 13331 + 13338 13333 13279 + 13338 13339 13333 + 13333 13339 13334 + 13334 13339 13340 + 13335 13334 13340 + 13341 13335 13340 + 13342 13335 13341 + 13335 13342 13336 + 13279 13343 13338 + 13343 13344 13338 + 13339 13338 13344 + 13344 13345 13339 + 13339 13345 13340 + 13279 13284 13343 + 13343 13284 13346 + 13346 13344 13343 + 13344 13346 13345 + 13345 13346 13347 + 13347 13340 13345 + 13347 13348 13340 + 13340 13348 13349 + 13349 13350 13340 + 13340 13350 13341 + 13347 13346 13284 + 13351 13347 13284 + 13348 13347 13351 + 13351 13352 13348 + 13348 13352 13349 + 13352 13353 13349 + 13354 13349 13353 + 13349 13354 13355 + 13355 13350 13349 + 13356 13351 13284 + 13357 13351 13356 + 13357 13352 13351 + 13352 13357 13358 + 13358 13353 13352 + 13359 13356 13284 + 13360 13356 13359 + 13361 13356 13360 + 13356 13361 13357 + 13362 13357 13361 + 13290 13359 13284 + 13363 13359 13290 + 13359 13363 13364 + 13364 13365 13359 + 13359 13365 13360 + 13290 13366 13363 + 13367 13363 13366 + 13290 13289 13366 + 13366 13289 13368 + 13368 13369 13366 + 13366 13369 13370 + 13370 13371 13366 + 13294 13368 13289 + 13372 13368 13294 + 13368 13372 13373 + 13373 13369 13368 + 13369 13373 13374 + 13374 13370 13369 + 13375 13370 13374 + 13370 13375 13376 + 13376 13377 13370 + 13294 13378 13372 + 13372 13378 13324 + 13379 13372 13324 + 13373 13372 13379 + 13379 13380 13373 + 13374 13373 13380 + 13378 13294 13299 + 13299 13381 13378 + 13378 13381 13319 + 13319 13324 13378 + 13381 13299 13303 + 13303 13302 13381 + 13319 13381 13302 + 13300 13382 13301 + 13324 13329 13379 + 13383 13379 13329 + 13380 13379 13383 + 13380 13383 13384 + 13384 13385 13380 + 13380 13385 13374 + 13386 13374 13385 + 13374 13386 13375 + 13329 13387 13383 + 13383 13387 13388 + 13388 13384 13383 + 13389 13384 13388 + 13384 13389 13390 + 13390 13385 13384 + 13385 13390 13386 + 13391 13386 13390 + 13375 13386 13391 + 13328 13387 13329 + 13387 13328 13392 + 13392 13388 13387 + 13393 13388 13392 + 13388 13393 13389 + 13394 13389 13393 + 13390 13389 13394 + 13394 13395 13390 + 13390 13395 13391 + 13392 13328 13327 + 13396 13392 13327 + 13397 13392 13396 + 13392 13397 13393 + 13393 13397 13398 + 13398 13399 13393 + 13393 13399 13394 + 13400 13394 13399 + 13395 13394 13400 + 13327 13401 13396 + 13402 13396 13401 + 13403 13396 13402 + 13396 13403 13397 + 13398 13397 13403 + 13403 13404 13398 + 13405 13398 13404 + 13405 13399 13398 + 13399 13405 13400 + 13332 13401 13327 + 13401 13332 13406 + 13406 13407 13401 + 13401 13407 13402 + 13402 13407 13408 + 13408 13409 13402 + 13410 13402 13409 + 13402 13410 13403 + 13406 13332 13337 + 13337 13411 13406 + 13406 13411 13412 + 13412 13413 13406 + 13407 13406 13413 + 13413 13408 13407 + 13414 13411 13337 + 13411 13414 13415 + 13415 13412 13411 + 13412 13415 13416 + 13416 13417 13412 + 13412 13417 13418 + 13418 13413 13412 + 13408 13413 13418 + 13337 13419 13414 + 13414 13419 13420 + 13420 13421 13414 + 13414 13421 13422 + 13422 13415 13414 + 13416 13415 13422 + 13419 13337 13336 + 13336 13342 13419 + 13420 13419 13342 + 13342 13423 13420 + 13424 13420 13423 + 13420 13424 13425 + 13425 13421 13420 + 13421 13425 13426 + 13426 13422 13421 + 13341 13423 13342 + 13427 13423 13341 + 13423 13427 13424 + 13428 13424 13427 + 13425 13424 13428 + 13428 13429 13425 + 13426 13425 13429 + 13429 13430 13426 + 13431 13426 13430 + 13422 13426 13431 + 13341 13432 13427 + 13427 13432 13433 + 13433 13434 13427 + 13427 13434 13428 + 13432 13341 13350 + 13350 13355 13432 + 13432 13355 13435 + 13435 13433 13432 + 13436 13433 13435 + 13433 13436 13437 + 13437 13434 13433 + 13434 13437 13438 + 13438 13439 13434 + 13434 13439 13428 + 13440 13435 13355 + 13440 13441 13435 + 13435 13441 13436 + 13442 13436 13441 + 13437 13436 13442 + 13442 13443 13437 + 13438 13437 13443 + 13355 13354 13440 + 13440 13354 13444 + 13445 13440 13444 + 13441 13440 13445 + 13445 13446 13441 + 13441 13446 13442 + 13446 13447 13442 + 13448 13442 13447 + 13442 13448 13443 + 13353 13444 13354 + 13449 13444 13353 + 13364 13363 13450 + 13450 13451 13364 + 13452 13364 13451 + 13365 13364 13452 + 13452 13453 13365 + 13360 13365 13453 + 13451 13454 13452 + 13455 13456 13457 + 13458 13455 13457 + 13459 13455 13458 + 13459 13460 13455 + 13455 13460 13461 + 13461 13462 13455 + 13463 13458 13457 + 13464 13458 13463 + 13465 13458 13464 + 13458 13465 13459 + 13466 13459 13465 + 13460 13459 13466 + 13457 13467 13463 + 13468 13463 13467 + 13463 13468 7297 + 7297 7303 13463 + 13463 7303 13464 + 13469 13467 13457 + 13470 13467 13469 + 13467 13470 13468 + 7298 13468 13470 + 7297 13468 7298 + 13457 13471 13469 + 13472 13469 13471 + 13473 13469 13472 + 13469 13473 13470 + 13470 13473 13474 + 13474 13475 13470 + 13470 13475 7298 + 13457 13476 13471 + 13471 13476 13477 + 13477 13478 13471 + 13471 13478 13472 + 13479 13472 13478 + 13480 13472 13479 + 13472 13480 13473 + 13474 13473 13480 + 13476 13457 13481 + 13481 13482 13476 + 13476 13482 13483 + 13483 13484 13476 + 13484 13485 13476 + 13485 13477 13476 + 13486 13477 13485 + 13478 13477 13486 + 13486 13487 13478 + 13478 13487 13479 + 13488 13483 13482 + 13489 13483 13488 + 13483 13489 13490 + 13490 13484 13483 + 13490 13491 13484 + 13484 13491 13492 + 13492 13485 13484 + 13482 13461 13488 + 13488 13461 13460 + 13460 13493 13488 + 13489 13488 13493 + 13461 13482 13494 + 13466 13493 13460 + 13466 13495 13493 + 13493 13495 13489 + 13489 13495 13496 + 13496 13497 13489 + 13497 13498 13489 + 13498 13490 13489 + 13491 13490 13498 + 13495 13466 13499 + 13499 13496 13495 + 13500 13496 13499 + 13496 13500 13501 + 13501 13497 13496 + 13502 13497 13501 + 13497 13502 13503 + 13503 13498 13497 + 13499 13466 13465 + 13504 13499 13465 + 13500 13499 13504 + 13504 13505 13500 + 13501 13500 13505 + 13505 13506 13501 + 13465 13507 13504 + 13508 13504 13507 + 13505 13504 13508 + 13508 13509 13505 + 13505 13509 13510 + 13510 13511 13505 + 13512 13507 13465 + 13513 13507 13512 + 13507 13513 13508 + 13508 13513 7312 + 7323 13508 7312 + 13509 13508 7323 + 13465 13464 13512 + 7308 13512 13464 + 13513 13512 7308 + 7308 7312 13513 + 13464 7303 7308 + 13514 13515 13516 + 13517 13514 13516 + 13518 13514 13517 + 13519 13514 13518 + 13514 13519 13520 + 13520 13521 13514 + 13516 13522 13517 + 13522 13523 13517 + 13524 13517 13523 + 13517 13524 13525 + 13517 13525 13518 + 13526 13522 13516 + 13526 13527 13522 + 13522 13527 13528 + 13528 13523 13522 + 13523 13528 13529 + 13523 13529 13524 + 13530 13524 13529 + 13525 13524 13530 + 13516 13531 13526 + 13532 13526 13531 + 13527 13526 13532 + 13532 13533 13527 + 13528 13527 13533 + 13533 13534 13528 + 13534 13535 13528 + 13529 13528 13535 + 13536 13531 13516 + 13531 13536 13537 + 13537 13538 13531 + 13531 13538 13539 + 13539 13532 13531 + 13536 13516 13521 + 13521 13540 13536 + 13536 13540 13541 + 13541 13542 13536 + 13542 13537 13536 + 13543 13537 13542 + 13543 13538 13537 + 13538 13543 13544 + 13544 13539 13538 + 13540 13521 13520 + 13540 13520 13545 + 13545 13541 13540 + 13541 13545 13546 + 13546 13547 13541 + 13541 13547 13548 + 13548 13542 13541 + 13549 13542 13548 + 13542 13549 13543 + 13544 13543 13549 + 13545 13520 13519 + 13550 13545 13519 + 13546 13545 13550 + 13550 13551 13546 + 13546 13551 13552 + 13552 13553 13546 + 13547 13546 13553 + 13553 13554 13547 + 13548 13547 13554 + 13519 13555 13550 + 13556 13550 13555 + 13550 13556 13557 + 13557 13551 13550 + 13551 13557 13558 + 13558 13552 13551 + 13559 13555 13519 + 13560 13555 13559 + 13555 13560 13556 + 13561 13556 13560 + 13557 13556 13561 + 13561 13562 13557 + 13557 13562 13563 + 13563 13558 13557 + 13519 13518 13559 + 13559 13518 13564 + 13564 13565 13559 + 13566 13559 13565 + 13559 13566 13560 + 13560 13566 13567 + 13567 13568 13560 + 13560 13568 13561 + 13518 13525 13564 + 13530 13564 13525 + 13564 13530 13569 + 13564 13569 13570 + 13570 13565 13564 + 13571 13565 13570 + 13565 13571 13566 + 13567 13566 13571 + 13569 13530 13572 + 13572 13573 13569 + 13569 13573 13574 + 13574 13570 13569 + 13575 13570 13574 + 13570 13575 13571 + 13576 13572 13530 + 13577 13572 13576 + 13573 13572 13577 + 13577 13578 13573 + 13573 13578 13579 + 13579 13574 13573 + 13580 13574 13579 + 13574 13580 13575 + 13529 13576 13530 + 13535 13576 13529 + 13576 13535 13581 + 13581 13582 13576 + 13576 13582 13577 + 13577 13582 13583 + 13583 13584 13577 + 13578 13577 13584 + 13584 13585 13578 + 13579 13578 13585 + 13581 13535 13534 + 13534 13586 13581 + 13581 13586 13587 + 13587 13588 13581 + 13582 13581 13588 + 13588 13583 13582 + 13589 13586 13534 + 13586 13589 13590 + 13590 13587 13586 + 13587 13590 13591 + 13591 13592 13587 + 13587 13592 13593 + 13593 13588 13587 + 13583 13588 13593 + 13534 13594 13589 + 13589 13594 13595 + 13595 13596 13589 + 13589 13596 13597 + 13597 13590 13589 + 13591 13590 13597 + 13594 13534 13533 + 13533 13598 13594 + 13594 13598 13599 + 13599 13595 13594 + 13600 13595 13599 + 13595 13600 13601 + 13601 13596 13595 + 13596 13601 13602 + 13602 13597 13596 + 13598 13533 13532 + 13532 13603 13598 + 13598 13603 13604 + 13604 13599 13598 + 13599 13604 13605 + 13605 13606 13599 + 13599 13606 13600 + 13607 13600 13606 + 13601 13600 13607 + 13603 13532 13539 + 13539 13608 13603 + 13604 13603 13608 + 13608 13609 13604 + 13609 13610 13604 + 13605 13604 13610 + 13608 13539 13544 + 13544 13611 13608 + 13608 13611 13612 + 13612 13609 13608 + 13613 13609 13612 + 13609 13613 13614 + 13614 13610 13609 + 13611 13544 13615 + 13615 13616 13611 + 13612 13611 13616 + 13616 13617 13612 + 216 13612 13617 + 13612 216 13613 + 13549 13615 13544 + 13618 13615 13549 + 13616 13615 13618 + 13618 13619 13616 + 13616 13619 13620 + 13620 13617 13616 + 13621 13617 13620 + 13617 13621 216 + 216 13621 13622 + 13549 13623 13618 + 13618 13623 13624 + 13624 13625 13618 + 13619 13618 13625 + 13625 13626 13619 + 13620 13619 13626 + 13548 13623 13549 + 13623 13548 13627 + 13627 13624 13623 + 13624 13627 13628 + 13628 13629 13624 + 13624 13629 13630 + 13630 13625 13624 + 13626 13625 13630 + 13554 13627 13548 + 13628 13627 13554 + 13554 13631 13628 + 13628 13631 13632 + 13632 13633 13628 + 13629 13628 13633 + 13633 13634 13629 + 13630 13629 13634 + 13635 13631 13554 + 13631 13635 13636 + 13636 13632 13631 + 13632 13636 13637 + 13637 13638 13632 + 13632 13638 13639 + 13639 13633 13632 + 13634 13633 13639 + 13554 13553 13635 + 13635 13553 13552 + 13552 13640 13635 + 13635 13640 13641 + 13641 13636 13635 + 13637 13636 13641 + 13641 13642 13637 + 13637 13642 13643 + 13643 13644 13637 + 13638 13637 13644 + 13645 13640 13552 + 13640 13645 13646 + 13646 13641 13640 + 13641 13646 13647 + 13647 13642 13641 + 13642 13647 13648 + 13648 13643 13642 + 13552 13558 13645 + 13645 13558 13563 + 13563 13649 13645 + 13645 13649 13650 + 13650 13646 13645 + 13647 13646 13650 + 13650 13651 13647 + 13647 13651 13652 + 13652 13648 13647 + 13653 13648 13652 + 13643 13648 13653 + 13654 13649 13563 + 13649 13654 13655 + 13655 13650 13649 + 13650 13655 13656 + 13656 13651 13650 + 13651 13656 13657 + 13657 13652 13651 + 13563 13658 13654 + 13654 13658 13659 + 13659 13660 13654 + 13660 13655 13654 + 13656 13655 13660 + 13660 13661 13656 + 13657 13656 13661 + 13658 13563 13562 + 13562 13662 13658 + 13659 13658 13662 + 13662 13663 13659 + 7284 13659 13663 + 13659 7284 13661 + 13661 13660 13659 + 13662 13562 13561 + 13561 13664 13662 + 13662 13664 13665 + 13665 13663 13662 + 13664 13561 13568 + 13568 13666 13664 + 13665 13664 13666 + 13667 13665 13666 + 13666 13568 13567 + 13567 13668 13666 + 13666 13668 13667 + 13667 13668 13669 + 13669 7276 13667 + 13670 13667 7276 + 13667 13670 13663 + 13663 13670 7284 + 13668 13567 13671 + 13671 13669 13668 + 13669 13671 13672 + 13672 13673 13669 + 13669 13673 7277 + 7277 7276 13669 + 13571 13671 13567 + 13672 13671 13571 + 13571 13575 13672 + 13672 13575 13580 + 13580 13674 13672 + 13673 13672 13674 + 13674 7278 13673 + 7277 13673 7278 + 7272 13674 13580 + 7278 13674 7272 + 13580 7273 7272 + 13579 7273 13580 + 7273 13579 7274 + 13585 7274 13579 + 7266 7274 13585 + 13585 13675 7266 + 7266 13675 7261 + 13676 7261 13675 + 7261 13676 13677 + 13677 7262 7261 + 13678 13675 13585 + 13675 13678 13676 + 13679 13676 13678 + 13677 13676 13679 + 13679 13680 13677 + 13677 13680 13681 + 13681 13682 13677 + 7262 13677 13682 + 13682 7252 7262 + 13585 13584 13678 + 13678 13584 13583 + 13583 13683 13678 + 13678 13683 13679 + 13684 13679 13683 + 13679 13684 13685 + 13685 13680 13679 + 13680 13685 13686 + 13686 13681 13680 + 13593 13683 13583 + 13683 13593 13684 + 13687 13684 13593 + 13685 13684 13687 + 13687 13688 13685 + 13685 13688 13689 + 13689 13686 13685 + 13690 13686 13689 + 13681 13686 13690 + 13593 13592 13687 + 13691 13687 13592 + 13687 13691 13692 + 13692 13688 13687 + 13688 13692 13693 + 13693 13689 13688 + 13689 13693 13694 + 13694 13695 13689 + 13689 13695 13690 + 13592 13591 13691 + 13691 13591 13696 + 13696 13697 13691 + 13692 13691 13697 + 13697 13698 13692 + 13692 13698 13699 + 13699 13693 13692 + 13694 13693 13699 + 13597 13696 13591 + 13597 13602 13696 + 13696 13602 13700 + 13700 13697 13696 + 13697 13700 13698 + 13698 13700 13701 + 13701 13699 13698 + 13699 13701 13702 + 13702 13703 13699 + 13699 13703 13694 + 13701 13700 13602 + 13704 13701 13602 + 13702 13701 13704 + 13704 13705 13702 + 13706 13702 13705 + 13703 13702 13706 + 13706 13707 13703 + 13694 13703 13707 + 13707 13708 13694 + 13695 13694 13708 + 13709 13704 13602 + 13710 13704 13709 + 13705 13704 13710 + 13710 13711 13705 + 13705 13711 13712 + 13712 13713 13705 + 13705 13713 13706 + 13602 13601 13709 + 13607 13709 13601 + 13709 13607 13714 + 13714 13715 13709 + 13709 13715 13710 + 13710 13715 13716 + 13717 13710 13716 + 13711 13710 13717 + 13717 13718 13711 + 13712 13711 13718 + 13714 13607 13719 + 13719 13720 13714 + 13714 13720 13721 + 13721 13722 13714 + 13715 13714 13722 + 13722 13716 13715 + 13719 13607 13606 + 13606 13723 13719 + 13724 13719 13723 + 13720 13719 13724 + 13720 13724 13725 + 13725 13721 13720 + 13721 13725 13726 + 13721 13726 13727 + 13727 13722 13721 + 13716 13722 13727 + 13728 13723 13606 + 13723 13728 13729 + 13729 13730 13723 + 13723 13730 13724 + 13724 13730 13731 + 13731 13725 13724 + 13726 13725 13731 + 13731 13732 13726 + 13727 13726 13732 + 13606 13605 13728 + 13733 13728 13605 + 13729 13728 13733 + 13733 13734 13729 + 13729 13734 13400 + 13735 13729 13400 + 13730 13729 13735 + 13735 13736 13730 + 13730 13736 13731 + 13605 13737 13733 + 13738 13733 13737 + 13733 13738 13739 + 13739 13734 13733 + 13734 13739 13740 + 13740 13400 13734 + 13400 13740 13395 + 13610 13737 13605 + 13741 13737 13610 + 13737 13741 13738 + 13742 13738 13741 + 13739 13738 13742 + 13742 13743 13739 + 13739 13743 13744 + 13744 13740 13739 + 13395 13740 13744 + 13744 13391 13395 + 13610 13614 13741 + 13741 13614 13745 + 13745 13746 13741 + 13741 13746 13742 + 13747 13742 13746 + 13742 13747 13748 + 13748 13743 13742 + 13743 13748 13749 + 13749 13744 13743 + 13750 13745 13614 + 222 13745 13750 + 13745 222 13751 + 13751 13746 13745 + 13746 13751 13747 + 13752 13747 13751 + 13748 13747 13752 + 13752 13753 13748 + 13753 13749 13748 + 13614 13613 13750 + 13754 13750 13613 + 13750 13754 13755 + 13750 13755 222 + 222 13755 13756 + 13613 216 13754 + 13755 13754 13757 + 13757 13758 13755 + 13759 13758 13757 + 13758 13759 13760 + 13760 13761 13758 + 13751 222 13762 + 13762 13763 13751 + 13751 13763 13752 + 13764 13752 13763 + 13752 13764 13753 + 13753 13764 13765 + 13765 13749 13753 + 13744 13749 13765 + 13765 13391 13744 + 13391 13765 13375 + 13763 13762 13766 + 13766 13767 13763 + 13763 13767 13764 + 13764 13767 13376 + 13376 13375 13764 + 13375 13765 13764 + 13766 13762 13768 + 13768 13769 13766 + 13770 13766 13769 + 13767 13766 13770 + 13770 13376 13767 + 13771 13376 13770 + 13768 13772 13769 + 13769 13772 13773 + 13773 13774 13769 + 13769 13774 13770 + 13451 13770 13774 + 13770 13451 13775 + 13772 13768 13761 + 13761 13776 13772 + 13772 13776 13777 + 13777 13778 13772 + 13778 13779 13772 + 13779 13780 13772 + 13780 13773 13772 + 13776 13761 13781 + 13774 13782 13451 + 13773 13782 13774 + 13782 13773 13780 + 13780 13452 13782 + 13780 13453 13452 + 13453 13780 13779 + 13779 13783 13453 + 13453 13783 13784 + 13784 13360 13453 + 13785 13360 13784 + 13360 13785 13361 + 13786 13783 13779 + 13783 13786 13787 + 13787 13784 13783 + 13788 13784 13787 + 13784 13788 13785 + 13789 13785 13788 + 13361 13785 13789 + 13789 13790 13361 + 13361 13790 13791 + 13786 13779 13778 + 13778 13792 13786 + 13786 13792 13793 + 13787 13786 13793 + 13793 13794 13787 + 13795 13787 13794 + 13787 13795 13788 + 13796 13792 13778 + 13792 13796 13797 + 13797 13798 13792 + 13792 13798 13793 + 13796 13778 13777 + 13777 13799 13796 + 13799 13797 13796 + 13800 13797 13799 + 13800 13798 13797 + 13798 13800 13801 + 13801 13793 13798 + 13799 13777 13802 + 13802 13803 13799 + 13799 13803 13800 + 13801 13800 13803 + 13803 13804 13801 + 13805 13801 13804 + 13793 13801 13805 + 13802 13777 13776 + 13776 13806 13802 + 13807 13802 13806 + 13803 13802 13807 + 13807 13804 13803 + 13808 13804 13807 + 13804 13808 13805 + 13809 13805 13808 + 13810 13805 13809 + 13805 13810 13793 + 13811 13806 13776 + 7252 13682 7253 + 7253 13682 13681 + 13681 13812 7253 + 7253 13812 13813 + 13813 7247 7253 + 7248 7247 13813 + 13690 13812 13681 + 13812 13690 13814 + 13814 13813 13812 + 13813 13814 13815 + 13815 13816 13813 + 13813 13816 7248 + 7248 13816 13817 + 13817 7242 7248 + 7243 7242 13817 + 13818 13814 13690 + 13815 13814 13818 + 13818 13819 13815 + 13815 13819 13820 + 13820 13821 13815 + 13816 13815 13821 + 13821 13817 13816 + 13690 13695 13818 + 13708 13818 13695 + 13818 13708 13822 + 13822 13819 13818 + 13819 13822 13823 + 13823 13820 13819 + 13820 13823 13824 + 13824 13825 13820 + 13820 13825 13826 + 13826 13821 13820 + 13817 13821 13826 + 13822 13708 13707 + 13707 13827 13822 + 13822 13827 13828 + 13828 13823 13822 + 13824 13823 13828 + 13828 13829 13824 + 13824 13829 13830 + 13830 13831 13824 + 13825 13824 13831 + 13832 13827 13707 + 13827 13832 13833 + 13833 13828 13827 + 13828 13833 13834 + 13834 13829 13828 + 13829 13834 13835 + 13835 13830 13829 + 13707 13706 13832 + 13832 13706 13713 + 13713 13836 13832 + 13833 13832 13836 + 13836 13837 13833 + 13834 13833 13837 + 13837 13838 13834 + 13834 13838 13839 + 13839 13835 13834 + 13840 13835 13839 + 13830 13835 13840 + 13836 13713 13712 + 13712 13841 13836 + 13836 13841 13842 + 13842 13837 13836 + 13838 13837 13842 + 13842 13843 13838 + 13838 13843 13844 + 13844 13839 13838 + 13845 13839 13844 + 13839 13845 13840 + 13841 13712 13846 + 13846 13847 13841 + 13842 13841 13847 + 13848 13842 13847 + 13843 13842 13848 + 13848 13849 13843 + 13843 13849 13850 + 13850 13844 13843 + 13718 13846 13712 + 13851 13846 13718 + 13847 13846 13851 + 13851 13852 13847 + 13847 13852 13853 + 13853 13854 13847 + 13847 13854 13848 + 13855 13848 13854 + 13849 13848 13855 + 13718 13856 13851 + 13857 13851 13856 + 13852 13851 13857 + 13857 13858 13852 + 13852 13858 13859 + 13859 13853 13852 + 13860 13853 13859 + 13854 13853 13860 + 13854 13860 13855 + 13861 13856 13718 + 13856 13861 13862 + 13862 13863 13856 + 13856 13863 13857 + 13864 13857 13863 + 13857 13864 13865 + 13865 13858 13857 + 13718 13717 13861 + 13861 13717 13866 + 13866 13867 13861 + 13862 13861 13867 + 13867 13868 13862 + 13869 13862 13868 + 13862 13869 13870 + 13870 13863 13862 + 13863 13870 13864 + 13716 13866 13717 + 13871 13866 13716 + 13866 13871 13867 + 13867 13871 13872 + 13872 13868 13867 + 13873 13868 13872 + 13868 13873 13869 + 13874 13869 13873 + 13870 13869 13874 + 13716 13875 13871 + 13872 13871 13875 + 13875 13876 13872 + 13877 13872 13876 + 13872 13877 13873 + 13873 13877 13878 + 13878 13879 13873 + 13873 13879 13874 + 13727 13875 13716 + 13875 13727 13880 + 13880 13876 13875 + 13881 13876 13880 + 13876 13881 13877 + 13878 13877 13881 + 13881 13882 13878 + 13883 13878 13882 + 13878 13883 13884 + 13884 13879 13878 + 13880 13727 13732 + 13732 13885 13880 + 13886 13880 13885 + 13880 13886 13881 + 13881 13886 13887 + 13887 13882 13881 + 13888 13882 13887 + 13882 13888 13883 + 13889 13883 13888 + 13884 13883 13889 + 13890 13885 13732 + 13891 13885 13890 + 13885 13891 13886 + 13887 13886 13891 + 13891 13892 13887 + 13893 13887 13892 + 13887 13893 13888 + 13732 13894 13890 + 13895 13890 13894 + 13896 13890 13895 + 13890 13896 13891 + 13891 13896 13897 + 13897 13892 13891 + 13898 13892 13897 + 13892 13898 13893 + 13732 13731 13894 + 13894 13731 13899 + 13899 13900 13894 + 13894 13900 13895 + 13901 13895 13900 + 13902 13895 13901 + 13895 13902 13896 + 13897 13896 13902 + 13736 13899 13731 + 13903 13899 13736 + 13900 13899 13903 + 13900 13903 13901 + 13901 13903 13904 + 13904 13905 13901 + 13906 13901 13905 + 13901 13906 13902 + 13736 13904 13903 + 13907 13904 13736 + 13904 13907 13908 + 13908 13905 13904 + 13909 13905 13908 + 13905 13909 13906 + 13910 13906 13909 + 13902 13906 13910 + 13910 13911 13902 + 13902 13911 13897 + 13736 13735 13907 + 13907 13735 13912 + 13912 13913 13907 + 13908 13907 13913 + 13913 13410 13908 + 13409 13908 13410 + 13908 13409 13909 + 13912 13735 13400 + 13400 13405 13912 + 13404 13912 13405 + 13912 13404 13913 + 13913 13404 13403 + 13403 13410 13913 + 13909 13409 13408 + 13408 13914 13909 + 13909 13914 13910 + 13915 13910 13914 + 13910 13915 13916 + 13916 13911 13910 + 13911 13916 13917 + 13917 13897 13911 + 13897 13917 13898 + 13418 13914 13408 + 13914 13418 13915 + 13918 13915 13418 + 13916 13915 13918 + 13918 13919 13916 + 13916 13919 13920 + 13920 13917 13916 + 13898 13917 13920 + 13920 13921 13898 + 13898 13921 13922 + 13922 13893 13898 + 13418 13417 13918 + 13923 13918 13417 + 13918 13923 13924 + 13924 13919 13918 + 13919 13924 13925 + 13925 13920 13919 + 13920 13925 13926 + 13926 13921 13920 + 13921 13926 13927 + 13927 13922 13921 + 13417 13416 13923 + 13928 13923 13416 + 13924 13923 13928 + 13928 13929 13924 + 13924 13929 13930 + 13930 13925 13924 + 13926 13925 13930 + 13930 13931 13926 + 13926 13931 13932 + 13932 13927 13926 + 13416 13933 13928 + 13934 13928 13933 + 13928 13934 13935 + 13935 13929 13928 + 13929 13935 13936 + 13936 13930 13929 + 13930 13936 13937 + 13937 13931 13930 + 13422 13933 13416 + 13431 13933 13422 + 13933 13431 13934 + 13934 13431 13938 + 13938 13939 13934 + 13935 13934 13939 + 13939 13940 13935 + 13935 13940 13941 + 13941 13936 13935 + 13937 13936 13941 + 13430 13938 13431 + 13942 13938 13430 + 13938 13942 13943 + 13943 13939 13938 + 13939 13943 13944 + 13944 13940 13939 + 13940 13944 13945 + 13945 13941 13940 + 13946 13941 13945 + 13941 13946 13937 + 13430 13947 13942 + 13942 13947 13948 + 13948 13949 13942 + 13943 13942 13949 + 13949 13950 13943 + 13944 13943 13950 + 13950 13951 13944 + 13945 13944 13951 + 13947 13430 13429 + 13429 13952 13947 + 13947 13952 13953 + 13953 13948 13947 + 13954 13948 13953 + 13949 13948 13954 + 13954 13955 13949 + 13949 13955 13956 + 13956 13950 13949 + 13951 13950 13956 + 13952 13429 13428 + 13428 13957 13952 + 13952 13957 13958 + 13958 13953 13952 + 13953 13958 13959 + 13959 13960 13953 + 13953 13960 13954 + 13961 13954 13960 + 13955 13954 13961 + 13957 13428 13439 + 13439 13962 13957 + 13958 13957 13962 + 13962 13963 13958 + 13959 13958 13963 + 13962 13439 13438 + 13962 13438 13964 + 13964 13963 13962 + 13963 13964 13965 + 13965 13966 13963 + 13963 13966 13959 + 13443 13964 13438 + 13965 13964 13443 + 13443 13448 13965 + 13967 13965 13448 + 13966 13965 13967 + 13967 13968 13966 + 13959 13966 13968 + 13968 13969 13959 + 13969 13970 13959 + 13960 13959 13970 + 13971 13967 13448 + 13972 13967 13971 + 13968 13967 13972 + 13968 13972 13973 + 13973 13969 13968 + 13969 13973 13974 + 13969 13974 13975 + 13975 13970 13969 + 13976 13971 13448 + 13977 13971 13976 + 13971 13977 13978 + 13971 13978 13972 + 13973 13972 13978 + 13978 13979 13973 + 13979 13980 13973 + 13974 13973 13980 + 13981 13976 13448 + 13982 13976 13981 + 13976 13982 13983 + 13983 13984 13976 + 13976 13984 13977 + 13448 13985 13981 + 13986 13981 13985 + 13987 13981 13986 + 13981 13987 13982 + 13988 13982 13987 + 13983 13982 13988 + 13447 13985 13448 + 13989 13985 13447 + 13985 13989 13986 + 13990 13986 13989 + 13987 13986 13990 + 13990 13991 13987 + 13987 13991 13988 + 13989 13447 13446 + 13446 13992 13989 + 13989 13992 13990 + 13993 13990 13992 + 13991 13990 13993 + 13991 13993 13994 + 13994 13988 13991 + 13988 13994 13995 + 13995 13996 13988 + 13988 13996 13983 + 13992 13446 13445 + 13445 13997 13992 + 13992 13997 13993 + 13993 13997 13998 + 13998 13999 13993 + 13999 13994 13993 + 13995 13994 13999 + 13997 13445 14000 + 14000 13998 13997 + 13998 14000 14001 + 13998 14001 13790 + 13790 13999 13998 + 13999 13790 13789 + 13789 14002 13999 + 13999 14002 13995 + 13444 14000 13445 + 14001 14000 13444 + 13444 13358 14001 + 13790 14001 13358 + 13888 13893 13922 + 13922 14003 13888 + 13888 14003 13889 + 14004 13889 14003 + 13889 14004 14005 + 14005 14006 13889 + 13889 14006 13884 + 14007 14003 13922 + 14003 14007 14004 + 14008 14004 14007 + 14005 14004 14008 + 14008 14009 14005 + 14010 14005 14009 + 14006 14005 14010 + 14010 14011 14006 + 13884 14006 14011 + 13922 13927 14007 + 14007 13927 13932 + 13932 14008 14007 + 14008 13932 14012 + 14009 14008 14012 + 14009 14012 14013 + 14013 14014 14009 + 14009 14014 14010 + 14015 14010 14014 + 14011 14010 14015 + 14012 13932 14016 + 14016 14017 14012 + 14012 14017 14018 + 14018 14019 14012 + 14019 14013 14012 + 14020 14013 14019 + 14014 14013 14020 + 14021 14016 13932 + 14022 14016 14021 + 14017 14016 14022 + 14017 14022 14023 + 14023 14018 14017 + 14024 14018 14023 + 14018 14024 14025 + 14025 14019 14018 + 13931 14021 13932 + 14026 14021 13931 + 14026 14027 14021 + 14021 14027 14022 + 14022 14027 14028 + 14028 14023 14022 + 14029 14023 14028 + 14023 14029 14024 + 13931 13937 14026 + 14026 13937 13946 + 13946 14030 14026 + 14027 14026 14030 + 14030 14028 14027 + 14031 14028 14030 + 14028 14031 14029 + 14029 14031 14032 + 14032 14033 14029 + 14024 14029 14033 + 14033 14034 14024 + 14025 14024 14034 + 14035 14030 13946 + 14030 14035 14031 + 14031 14035 14036 + 14036 14032 14031 + 14032 14036 14037 + 14037 14038 14032 + 14032 14038 14039 + 14039 14033 14032 + 14033 14039 14034 + 13946 14040 14035 + 14035 14040 14041 + 14036 14035 14041 + 14041 14042 14036 + 14037 14036 14042 + 14042 14043 14037 + 14044 14037 14043 + 14038 14037 14044 + 13945 14040 13946 + 14040 13945 14045 + 14045 14041 14040 + 14041 14045 14046 + 14046 14047 14041 + 14041 14047 14048 + 14048 14042 14041 + 14042 14048 14043 + 14045 13945 13951 + 13951 14049 14045 + 14046 14045 14049 + 14049 14050 14046 + 14051 14046 14050 + 14047 14046 14051 + 14051 14052 14047 + 14047 14052 14053 + 14053 14048 14047 + 14043 14048 14053 + 14054 14049 13951 + 14049 14054 14050 + 14050 14054 14055 + 14055 14056 14050 + 14050 14056 14051 + 14057 14051 14056 + 14052 14051 14057 + 13951 14058 14054 + 14055 14054 14058 + 14058 14059 14055 + 14060 14055 14059 + 14056 14055 14060 + 14060 14061 14056 + 14056 14061 14057 + 13956 14058 13951 + 14058 13956 14062 + 14062 14059 14058 + 14063 14059 14062 + 14059 14063 14060 + 14060 14063 14064 + 14064 14065 14060 + 14061 14060 14065 + 14065 14066 14061 + 14057 14061 14066 + 14062 13956 13955 + 13955 14067 14062 + 14068 14062 14067 + 14062 14068 14063 + 14063 14068 14069 + 14069 14064 14063 + 13961 14067 13955 + 14070 14067 13961 + 14067 14070 14068 + 14068 14070 14071 + 14071 14069 14068 + 14072 14069 14071 + 14064 14069 14072 + 14072 14073 14064 + 14064 14073 14074 + 14074 14065 14064 + 14066 14065 14074 + 13961 14075 14070 + 14070 14075 14076 + 14076 14071 14070 + 14071 14076 14077 + 14077 14078 14071 + 14071 14078 14072 + 14079 14072 14078 + 14073 14072 14079 + 14075 13961 14080 + 14080 14081 14075 + 14075 14081 14082 + 14076 14075 14082 + 14083 14076 14082 + 14077 14076 14083 + 14080 13961 13960 + 14084 14080 13960 + 14085 14080 14084 + 14081 14080 14085 + 14081 14085 14086 + 14086 14082 14081 + 13960 14087 14084 + 14088 14084 14087 + 14089 14084 14088 + 14084 14089 14085 + 14086 14085 14089 + 13970 14087 13960 + 14087 13970 13975 + 13975 14090 14087 + 14087 14090 14088 + 14088 14090 14091 + 14091 14092 14088 + 14089 14088 14092 + 14092 14093 14089 + 14089 14093 14086 + 14090 13975 14094 + 14094 14095 14090 + 14090 14095 14091 + 14096 14094 13975 + 14097 14094 14096 + 14094 14097 14098 + 14098 14095 14094 + 14095 14098 14099 + 14099 14100 14095 + 14095 14100 14091 + 13975 13974 14096 + 13974 14101 14096 + 14101 14102 14096 + 14103 14096 14102 + 14104 14096 14103 + 14096 14104 14097 + 13980 14101 13974 + 14101 13980 14105 + 14101 14105 14106 + 14106 14102 14101 + 14107 14102 14106 + 14102 14107 14103 + 14108 14103 14107 + 14109 14103 14108 + 14103 14109 14104 + 14105 13980 13979 + 13979 14110 14105 + 14105 14110 14111 + 14106 14105 14111 + 14111 14112 14106 + 14113 14106 14112 + 14106 14113 14107 + 14114 14110 13979 + 14110 14114 14115 + 14115 14116 14110 + 14110 14116 14111 + 14114 13979 13978 + 13978 13977 14114 + 14115 14114 13977 + 13977 13984 14115 + 14117 14115 13984 + 14116 14115 14117 + 14117 14118 14116 + 14116 14118 14119 + 14119 14111 14116 + 13984 13983 14117 + 14117 13983 13996 + 13996 14120 14117 + 14118 14117 14120 + 14120 14121 14118 + 14119 14118 14121 + 14121 14122 14119 + 14123 14119 14122 + 14111 14119 14123 + 14124 14120 13996 + 14124 14121 14120 + 14121 14124 14125 + 14125 14122 14121 + 14126 14122 14125 + 14122 14126 14123 + 13996 13995 14124 + 14125 14124 13995 + 14127 14125 13995 + 14126 14125 14127 + 14127 14128 14126 + 14123 14126 14128 + 14128 14129 14123 + 14130 14123 14129 + 14123 14130 14111 + 14131 14127 13995 + 14132 14127 14131 + 14128 14127 14132 + 14132 14133 14128 + 14128 14133 14134 + 14134 14129 14128 + 13995 14002 14131 + 14135 14131 14002 + 14131 14135 14136 + 14136 14137 14131 + 14131 14137 14132 + 14132 14137 14138 + 14138 14139 14132 + 14133 14132 14139 + 14002 13789 14135 + 13788 14135 13789 + 14136 14135 13788 + 13788 13795 14136 + 14136 13795 14140 + 14140 14141 14136 + 14137 14136 14141 + 14141 14138 14137 + 14138 14141 14142 + 14142 14143 14138 + 14138 14143 14144 + 14144 14139 14138 + 13794 14140 13795 + 14140 13794 14145 + 14145 14146 14140 + 14140 14146 14142 + 14142 14141 14140 + 14145 13794 13793 + 13793 13810 14145 + 14145 13810 14147 + 14147 14148 14145 + 14146 14145 14148 + 14148 14149 14146 + 14142 14146 14149 + 14149 14150 14142 + 14143 14142 14150 + 14150 14151 14143 + 14144 14143 14151 + 13809 14147 13810 + 14152 14147 13809 + 14147 14152 14153 + 14153 14148 14147 + 14149 14148 14153 + 14153 14154 14149 + 14149 14154 14155 + 14155 14150 14149 + 14151 14150 14155 + 13809 14156 14152 + 14152 14156 14157 + 14157 14158 14152 + 14153 14152 14158 + 14158 14159 14153 + 14154 14153 14159 + 14159 14160 14154 + 14155 14154 14160 + 14156 13809 14161 + 14161 14162 14156 + 14157 14156 14162 + 14162 14163 14157 + 14164 14157 14163 + 14157 14164 14165 + 14165 14158 14157 + 13808 14161 13809 + 14166 14161 13808 + 14161 14166 14167 + 14167 14162 14161 + 14162 14167 14168 + 14168 14163 14162 + 14163 14168 14169 + 14169 14170 14163 + 14163 14170 14164 + 13808 13807 14166 + 14166 13807 13806 + 14171 14166 13806 + 14167 14166 14171 + 14171 14172 14167 + 14172 14168 14167 + 14169 14168 14172 + 14172 14173 14169 + 14174 14169 14173 + 14170 14169 14174 + 13806 14175 14171 + 14173 14171 14175 + 14172 14171 14173 + 14176 14175 13806 + 14175 14176 14177 + 14177 14178 14175 + 14175 14178 14173 + 14173 14178 14179 + 14179 14180 14173 + 14180 14174 14173 + 13806 14181 14176 + 14182 14176 14181 + 14177 14176 14182 + 14182 14183 14177 + 7276 7275 13670 + 14184 13670 7275 + 13661 7284 14185 + 14185 14186 13661 + 13661 14186 13657 + 14187 13657 14186 + 13652 13657 14187 + 14187 14188 13652 + 13652 14188 13653 + 14186 14185 14189 + 14189 14190 14186 + 14186 14190 14187 + 14190 14191 14187 + 14188 14187 14191 + 14191 14192 14188 + 13653 14188 14192 + 14189 14185 7283 + 7283 14193 14189 + 14189 14193 14194 + 14190 14189 14194 + 14194 14191 14190 + 14192 14191 14194 + 14194 14195 14192 + 14192 14195 14196 + 14196 14197 14192 + 14192 14197 13653 + 7289 14193 7283 + 14193 7289 14195 + 14195 14194 14193 + 14196 14195 7289 + 7289 14198 14196 + 13475 14196 14198 + 14196 13475 13474 + 13474 14197 14196 + 14197 13474 14199 + 14199 13653 14197 + 13653 14199 13643 + 7288 14198 7289 + 7298 14198 7288 + 14198 7298 13475 + 13480 14199 13474 + 13643 14199 13480 + 13480 13644 13643 + 13479 13644 13480 + 13644 13479 13638 + 13639 13638 13479 + 13479 13487 13639 + 14200 13639 13487 + 13639 14200 13634 + 13634 14200 14201 + 14201 14202 13634 + 13634 14202 13630 + 13487 13486 14200 + 14201 14200 13486 + 13486 14203 14201 + 14204 14201 14203 + 14201 14204 14205 + 14205 14202 14201 + 14202 14205 14206 + 14206 13630 14202 + 13630 14206 13626 + 13485 14203 13486 + 14207 14203 13485 + 14203 14207 14204 + 14208 14204 14207 + 14205 14204 14208 + 14208 14209 14205 + 14205 14209 14210 + 14210 14206 14205 + 13626 14206 14210 + 14210 14211 13626 + 13626 14211 13620 + 13485 13492 14207 + 14207 13492 14212 + 14212 14213 14207 + 14207 14213 14208 + 14214 14208 14213 + 14208 14214 14215 + 14215 14209 14208 + 14209 14215 14216 + 14216 14210 14209 + 14212 13492 13491 + 13491 14217 14212 + 14218 14212 14217 + 14212 14218 14219 + 14219 14213 14212 + 14213 14219 14214 + 14220 14214 14219 + 14215 14214 14220 + 13498 14217 13491 + 14221 14217 13498 + 14217 14221 14218 + 14222 14218 14221 + 14219 14218 14222 + 14222 14223 14219 + 14219 14223 14220 + 14224 14220 14223 + 14223 14225 14224 + 13498 13503 14221 + 14221 13503 14226 + 14226 14227 14221 + 14221 14227 14222 + 14228 14222 14227 + 14227 14229 14228 + 14228 14229 14230 + 14226 13503 13502 + 13502 14231 14226 + 14232 14226 14231 + 14226 14232 14229 + 14229 14227 14226 + 14233 14231 13502 + 14234 14231 14233 + 14231 14234 14232 + 14232 14234 14235 + 14235 14236 14232 + 14229 14232 14236 + 14236 14237 14229 + 14229 14237 14230 + 13502 14238 14233 + 14233 14238 14239 + 14239 14240 14233 + 14241 14233 14240 + 14233 14241 14234 + 13501 14238 13502 + 14238 13501 14242 + 14242 14239 14238 + 14225 14223 14222 + 14222 14243 14225 + 14225 14243 14244 + 14244 14245 14225 + 14246 14225 14245 + 14245 14177 14246 + 14178 14177 14245 + 14247 14244 14243 + 14245 14179 14178 + 14244 14179 14245 + 14179 14244 14230 + 14230 14180 14179 + 14230 14248 14180 + 14180 14248 14249 + 14249 14174 14180 + 14250 14174 14249 + 14174 14250 14170 + 14248 14230 14237 + 14237 14251 14248 + 14248 14251 14252 + 14249 14248 14252 + 14252 14253 14249 + 14254 14249 14253 + 14249 14254 14250 + 14237 14236 14251 + 14251 14236 14235 + 14235 14252 14251 + 14235 14255 14252 + 14252 14255 14256 + 14256 14253 14252 + 14257 14253 14256 + 14253 14257 14254 + 14258 14254 14257 + 14250 14254 14258 + 14255 14235 14259 + 14259 14260 14255 + 14255 14260 14261 + 14261 14262 14255 + 14262 14256 14255 + 14263 14256 14262 + 14256 14263 14257 + 14234 14259 14235 + 14264 14259 14234 + 14260 14259 14264 + 14260 14264 14265 + 14265 14261 14260 + 14261 14265 14266 + 14261 14266 14267 + 14267 14262 14261 + 14268 14262 14267 + 14262 14268 14263 + 14234 14241 14264 + 14264 14241 14269 + 14269 14270 14264 + 14270 14271 14264 + 14271 14265 14264 + 14266 14265 14271 + 14271 14272 14266 + 14266 14272 14273 + 14273 14267 14266 + 14240 14269 14241 + 14269 14240 14274 + 14274 14275 14269 + 14269 14275 14276 + 14276 14270 14269 + 14277 14270 14276 + 14270 14277 14278 + 14278 14271 14270 + 14272 14271 14278 + 14274 14240 14239 + 14239 14279 14274 + 14280 14274 14279 + 14275 14274 14280 + 14280 7356 14275 + 14276 14275 7356 + 7361 14276 7356 + 14277 14276 7361 + 14281 14279 14239 + 14279 14282 14280 + 7361 7360 14277 + 14277 7360 7366 + 14278 14277 7366 + 14283 14278 7366 + 14272 14278 14283 + 14283 14273 14272 + 14284 14273 14283 + 14273 14284 14285 + 14285 14267 14273 + 14267 14285 14268 + 7366 14286 14283 + 14287 14283 14286 + 14283 14287 14284 + 14284 14287 14288 + 14288 14289 14284 + 14284 14289 14290 + 14290 14285 14284 + 14268 14285 14290 + 14291 14286 7366 + 14292 14286 14291 + 14286 14292 14287 + 14288 14287 14292 + 14292 14293 14288 + 14294 14288 14293 + 14288 14294 14295 + 14295 14289 14288 + 7366 7365 14291 + 14296 14291 7365 + 14297 14291 14296 + 14291 14297 14292 + 14292 14297 14298 + 14298 14293 14292 + 14299 14293 14298 + 14293 14299 14294 + 14300 14294 14299 + 14295 14294 14300 + 7365 7364 14296 + 14301 14296 7364 + 14302 14296 14301 + 14296 14302 14297 + 14298 14297 14302 + 14302 14303 14298 + 14304 14298 14303 + 14298 14304 14299 + 7364 7363 14301 + 14305 14301 7363 + 14306 14301 14305 + 14301 14306 14302 + 14302 14306 14307 + 14307 14303 14302 + 14308 14303 14307 + 14303 14308 14304 + 14309 14304 14308 + 14299 14304 14309 + 7363 7370 14305 + 7379 14305 7370 + 14310 14305 7379 + 14305 14310 14306 + 14307 14306 14310 + 14310 14311 14307 + 14312 14307 14311 + 14307 14312 14308 + 14308 14312 14313 + 14313 14314 14308 + 14308 14314 14309 + 7379 7384 14310 + 14310 7384 14315 + 14315 14311 14310 + 14316 14311 14315 + 14311 14316 14312 + 14313 14312 14316 + 14316 14317 14313 + 14318 14313 14317 + 14313 14318 14319 + 14319 14314 14313 + 14315 7384 7383 + 7383 14320 14315 + 14321 14315 14320 + 14315 14321 14316 + 14316 14321 14322 + 14322 14317 14316 + 14323 14317 14322 + 14317 14323 14318 + 14324 14318 14323 + 14319 14318 14324 + 14325 14320 7383 + 14326 14320 14325 + 14320 14326 14321 + 14322 14321 14326 + 14326 14327 14322 + 14328 14322 14327 + 14322 14328 14323 + 7383 7389 14325 + 14325 7389 7388 + 7388 14329 14325 + 14330 14325 14329 + 14325 14330 14326 + 14326 14330 14331 + 14331 14327 14326 + 14332 14327 14331 + 14327 14332 14328 + 14333 14328 14332 + 14323 14328 14333 + 7393 14329 7388 + 14334 14329 7393 + 14329 14334 14330 + 14331 14330 14334 + 14334 14335 14331 + 14336 14331 14335 + 14331 14336 14332 + 14332 14336 14337 + 14337 14338 14332 + 14332 14338 14333 + 7393 14339 14334 + 14334 14339 14340 + 14340 14335 14334 + 14341 14335 14340 + 14335 14341 14336 + 14337 14336 14341 + 14339 7393 7398 + 7398 14342 14339 + 14340 14339 14342 + 14342 14343 14340 + 14344 14340 14343 + 14340 14344 14341 + 14341 14344 14345 + 14345 14346 14341 + 14341 14346 14337 + 14342 7398 7397 + 7397 7403 14342 + 14342 7403 14347 + 14347 14343 14342 + 14348 14343 14347 + 14343 14348 14344 + 14345 14344 14348 + 14348 14349 14345 + 14350 14345 14349 + 14345 14350 14351 + 14351 14346 14345 + 14347 7403 7402 + 7402 14352 14347 + 14353 14347 14352 + 14347 14353 14348 + 14348 14353 14354 + 14354 14349 14348 + 14355 14349 14354 + 14349 14355 14350 + 14356 14350 14355 + 14351 14350 14356 + 14357 14352 7402 + 14358 14352 14357 + 14352 14358 14353 + 14354 14353 14358 + 14358 14359 14354 + 14360 14354 14359 + 14354 14360 14355 + 7402 14361 14357 + 14357 14361 7421 + 7421 14362 14357 + 14363 14357 14362 + 14357 14363 14358 + 14358 14363 171 + 171 14359 14358 + 7401 14361 7402 + 14361 7401 7414 + 7414 7421 14361 + 7426 14362 7421 + 14364 14362 7426 + 14362 14364 14363 + 171 14363 14364 + 14364 14365 171 + 14366 171 14365 + 171 14366 14367 + 7426 14368 14364 + 14364 14368 14369 + 14369 14365 14364 + 14370 14365 14369 + 14365 14370 14366 + 14371 14366 14370 + 14367 14366 14371 + 14368 7426 14372 + 14372 7459 14368 + 14369 14368 7459 + 7459 7463 14369 + 7468 14369 7463 + 14369 7468 14370 + 7425 14372 7426 + 7438 14372 7425 + 7459 14372 7438 + 14370 7468 7467 + 7467 7480 14370 + 14370 7480 14371 + 7479 14371 7480 + 14371 7479 14373 + 14373 14374 14371 + 14371 14374 14367 + 14367 14374 14375 + 14375 14360 14367 + 14359 14367 14360 + 14373 7479 14376 + 14376 14377 14373 + 14373 14377 14378 + 14378 14379 14373 + 14374 14373 14379 + 14379 14375 14374 + 7478 14376 7479 + 14380 14376 7478 + 14380 14377 14376 + 14377 14380 14381 + 14381 14382 14377 + 14377 14382 14378 + 7478 7484 14380 + 14381 14380 7484 + 7491 14381 7484 + 14383 14381 7491 + 14383 14382 14381 + 14382 14383 14384 + 14384 14378 14382 + 14384 14385 14378 + 14378 14385 14386 + 14386 14379 14378 + 14375 14379 14386 + 7491 14387 14383 + 14383 14387 14388 + 14388 14384 14383 + 14385 14384 14388 + 14388 14389 14385 + 14386 14385 14389 + 14389 14390 14386 + 14391 14386 14390 + 14386 14391 14375 + 14392 14387 7491 + 14387 14392 14393 + 14393 14394 14387 + 14387 14394 14388 + 7491 7490 14392 + 14392 7490 7496 + 7496 14395 14392 + 14392 14395 14396 + 14396 14393 14392 + 14397 14393 14396 + 14394 14393 14397 + 14395 7496 7495 + 7495 14398 14395 + 14395 14398 14399 + 14399 14396 14395 + 14396 14399 14400 + 14396 14400 14397 + 14398 7495 14401 + 14401 14402 14398 + 14398 14402 14403 + 14399 14398 14403 + 14403 14404 14399 + 14400 14399 14404 + 14404 14405 14400 + 14397 14400 14405 + 14406 14401 7495 + 14407 14401 14406 + 14401 14407 14402 + 14402 14407 14408 + 14408 14403 14402 + 14403 14408 14409 + 14403 14409 14410 + 14410 14404 14403 + 7495 7494 14406 + 7494 14411 14406 + 14412 14406 14411 + 14412 14413 14406 + 14406 14413 14407 + 14407 14413 14414 + 14408 14407 14414 + 14414 14415 14408 + 14409 14408 14415 + 7501 14411 7494 + 14411 7501 14416 + 14416 14417 14411 + 14411 14417 14412 + 14412 14417 14418 + 14418 14419 14412 + 14413 14412 14419 + 14419 14414 14413 + 14416 7501 7500 + 7500 14420 14416 + 14421 14416 14420 + 14417 14416 14421 + 14421 14422 14417 + 14417 14422 14418 + 7510 14420 7500 + 14420 7510 14423 + 14423 14424 14420 + 14420 14424 14421 + 14424 14425 14421 + 14426 14421 14425 + 14422 14421 14426 + 7514 14423 7510 + 14427 14423 7514 + 14423 14427 14428 + 14428 14424 14423 + 14424 14428 14429 + 14429 14425 14424 + 14425 14429 14430 + 14430 14431 14425 + 14425 14431 14426 + 7514 7519 14427 + 14432 14427 7519 + 14428 14427 14432 + 14432 14433 14428 + 14429 14428 14433 + 14433 14434 14429 + 14430 14429 14434 + 14434 14435 14430 + 14436 14430 14435 + 14431 14430 14436 + 7519 14437 14432 + 14438 14432 14437 + 14432 14438 14439 + 14439 14433 14432 + 14433 14439 14440 + 14440 14434 14433 + 14434 14440 14441 + 14441 14435 14434 + 7524 14437 7519 + 14442 14437 7524 + 14437 14442 14438 + 14438 14442 14443 + 14443 14444 14438 + 14439 14438 14444 + 14444 14445 14439 + 14439 14445 14446 + 14446 14440 14439 + 14441 14440 14446 + 7524 14447 14442 + 14442 14447 14448 + 14448 14443 14442 + 14449 14443 14448 + 14443 14449 14450 + 14450 14444 14443 + 14445 14444 14450 + 14445 14450 14451 + 14451 14446 14445 + 14447 7524 7523 + 7523 14452 14447 + 14447 14452 14453 + 14453 14448 14447 + 14454 14448 14453 + 14448 14454 14449 + 14452 7523 7522 + 7522 7529 14452 + 14452 7529 14455 + 14455 14453 14452 + 14456 14453 14455 + 14453 14456 14454 + 14457 14454 14456 + 14449 14454 14457 + 14457 14458 14449 + 14449 14458 14459 + 14450 14449 14459 + 14459 14451 14450 + 7534 14455 7529 + 14460 14455 7534 + 14455 14460 14456 + 14456 14460 14461 + 14461 14462 14456 + 14456 14462 14457 + 14462 14463 14457 + 14464 14457 14463 + 14458 14457 14464 + 7534 7549 14460 + 14460 7549 14465 + 14465 14466 14460 + 14466 14461 14460 + 14467 14461 14466 + 14462 14461 14467 + 14467 14468 14462 + 14462 14468 14469 + 14469 14463 14462 + 7548 14465 7549 + 7548 14470 14465 + 14465 14470 14471 + 14471 14466 14465 + 14471 14472 14466 + 14466 14472 14467 + 14470 7548 14473 + 14473 14474 14470 + 14470 14474 14475 + 14475 14471 14470 + 14472 14471 14475 + 14475 14476 14472 + 14467 14472 14476 + 14477 14473 7548 + 14478 14473 14477 + 14478 14474 14473 + 14474 14478 14479 + 14479 14480 14474 + 14474 14480 14475 + 14481 14475 14480 + 14475 14481 14476 + 7547 14477 7548 + 14482 14477 7547 + 14482 14483 14477 + 14477 14483 14478 + 14479 14478 14483 + 7547 14484 14482 + 14482 14484 14485 + 14485 14486 14482 + 14486 14487 14482 + 14487 14488 14482 + 14483 14482 14488 + 7546 14484 7547 + 14484 7546 14489 + 14489 14485 14484 + 14490 14485 14489 + 14485 14490 14491 + 14491 14486 14485 + 14492 14486 14491 + 14486 14492 14493 + 14493 14487 14486 + 7556 14489 7546 + 14490 14489 7556 + 7556 14494 14490 + 14491 14490 14494 + 14494 14495 14491 + 14492 14491 14495 + 14495 14496 14492 + 14492 14496 14497 + 14497 14493 14492 + 14498 14493 14497 + 14493 14498 14487 + 7555 14494 7556 + 14494 7555 14499 + 14499 14495 14494 + 14496 14495 14499 + 14496 14499 7560 + 7560 14497 14496 + 14497 7560 14500 + 14497 14500 14498 + 14501 14498 14500 + 14487 14498 14501 + 14501 14488 14487 + 14501 14502 14488 + 14488 14502 14483 + 14483 14502 14479 + 7560 14499 7555 + 14355 14360 14375 + 14375 14391 14355 + 14355 14391 14356 + 14390 14356 14391 + 14356 14390 14503 + 14503 14504 14356 + 14356 14504 14351 + 14351 14504 14505 + 14505 14506 14351 + 14346 14351 14506 + 14503 14390 14389 + 14389 14507 14503 + 14503 14507 14508 + 14508 14509 14503 + 14504 14503 14509 + 14509 14505 14504 + 14507 14389 14388 + 14388 14510 14507 + 14507 14510 14511 + 14511 14508 14507 + 14511 14512 14508 + 14508 14512 14513 + 14513 14509 14508 + 14505 14509 14513 + 14510 14388 14514 + 14514 14515 14510 + 14510 14515 14516 + 14516 14511 14510 + 14512 14511 14516 + 14516 14517 14512 + 14513 14512 14517 + 14394 14514 14388 + 14518 14514 14394 + 14514 14518 14515 + 14515 14518 14519 + 14519 14520 14515 + 14515 14520 14516 + 14394 14521 14518 + 14518 14521 14522 + 14522 14519 14518 + 14523 14519 14522 + 14520 14519 14523 + 14397 14521 14394 + 14521 14397 14524 + 14524 14522 14521 + 14525 14522 14524 + 14522 14525 14523 + 14523 14525 14526 + 14526 14527 14523 + 14528 14523 14527 + 14523 14528 14520 + 14524 14397 14405 + 14529 14524 14405 + 14530 14524 14529 + 14524 14530 14525 + 14525 14530 14531 + 14531 14526 14525 + 14532 14526 14531 + 14526 14532 14533 + 14533 14527 14526 + 14405 14534 14529 + 14535 14529 14534 + 14529 14535 14536 + 14529 14536 14530 + 14530 14536 14537 + 14537 14531 14530 + 14538 14531 14537 + 14531 14538 14532 + 14539 14534 14405 + 14540 14534 14539 + 14534 14540 14535 + 14535 14540 14541 + 14541 14542 14535 + 14536 14535 14542 + 14542 14537 14536 + 14543 14537 14542 + 14537 14543 14538 + 14405 14544 14539 + 14545 14539 14544 + 14546 14539 14545 + 14539 14546 14540 + 14540 14546 14547 + 14547 14541 14540 + 14544 14405 14404 + 14404 14410 14544 + 14544 14410 14548 + 14548 14549 14544 + 14544 14549 14545 + 14550 14545 14549 + 14545 14550 14551 + 14551 14552 14545 + 14545 14552 14546 + 14547 14546 14552 + 14548 14410 14553 + 14553 14554 14548 + 14555 14548 14554 + 14548 14555 14556 + 14556 14549 14548 + 14549 14556 14550 + 14557 14550 14556 + 14551 14550 14557 + 14410 14409 14553 + 14415 14553 14409 + 14558 14553 14415 + 14553 14558 14559 + 14559 14554 14553 + 14554 14559 14560 + 14560 14561 14554 + 14554 14561 14555 + 14562 14555 14561 + 14556 14555 14562 + 14415 14563 14558 + 14558 14563 14564 + 14564 14565 14558 + 14558 14565 14559 + 14560 14559 14565 + 14565 14566 14560 + 14567 14560 14566 + 14561 14560 14567 + 14563 14415 14414 + 14414 14568 14563 + 14564 14563 14568 + 14568 14569 14564 + 14570 14564 14569 + 14565 14564 14570 + 14570 14566 14565 + 14566 14570 14571 + 14571 14572 14566 + 14566 14572 14567 + 14573 14568 14414 + 14568 14573 14574 + 14574 14569 14568 + 14575 14569 14574 + 14569 14575 14570 + 14570 14575 14464 + 14464 14571 14570 + 14463 14571 14464 + 14572 14571 14463 + 14414 14419 14573 + 14573 14419 14418 + 14418 14576 14573 + 14574 14573 14576 + 14576 14577 14574 + 14578 14574 14577 + 14574 14578 14575 + 14579 14576 14418 + 14576 14579 14580 + 14580 14577 14576 + 14581 14577 14580 + 14577 14581 14578 + 14418 14582 14579 + 14579 14582 14583 + 14583 14584 14579 + 14579 14584 14585 + 14585 14580 14579 + 14586 14580 14585 + 14580 14586 14581 + 14582 14418 14587 + 14587 14588 14582 + 14582 14588 14589 + 14589 14583 14582 + 14590 14583 14589 + 14584 14583 14590 + 14584 14590 14591 + 14591 14585 14584 + 14422 14587 14418 + 14592 14587 14422 + 14592 14588 14587 + 14588 14592 14593 + 14593 14589 14588 + 14594 14589 14593 + 14589 14594 14590 + 14590 14594 14595 + 14595 14596 14590 + 14596 14591 14590 + 14597 14591 14596 + 14422 14426 14592 + 14593 14592 14426 + 14426 14431 14593 + 14431 14598 14593 + 14599 14593 14598 + 14593 14599 14594 + 14594 14599 14600 + 14600 14595 14594 + 14436 14598 14431 + 14601 14598 14436 + 14598 14601 14599 + 14600 14599 14601 + 14601 14602 14600 + 14603 14600 14602 + 14595 14600 14603 + 14603 14604 14595 + 14595 14604 14605 + 14605 14596 14595 + 14436 14606 14601 + 14601 14606 14607 + 14607 14602 14601 + 14608 14602 14607 + 14602 14608 14603 + 14603 14608 14609 + 14609 14610 14603 + 14604 14603 14610 + 14606 14436 14611 + 14611 14612 14606 + 14607 14606 14612 + 14612 14613 14607 + 14614 14607 14613 + 14607 14614 14608 + 14435 14611 14436 + 14615 14611 14435 + 14612 14611 14615 + 14615 14616 14612 + 14612 14616 14617 + 14617 14613 14612 + 14618 14613 14617 + 14613 14618 14614 + 14619 14614 14618 + 14608 14614 14619 + 14435 14441 14615 + 14615 14441 14620 + 14620 14621 14615 + 14616 14615 14621 + 14621 14622 14616 + 14617 14616 14622 + 14622 14623 14617 + 14624 14617 14623 + 14617 14624 14618 + 14446 14620 14441 + 14620 14446 14451 + 14451 14625 14620 + 14620 14625 14626 + 14626 14621 14620 + 14626 14622 14621 + 14622 14626 14627 + 14627 14623 14622 + 14623 14627 14628 + 14628 14629 14623 + 14623 14629 14624 + 14625 14451 14459 + 14459 14630 14625 + 14625 14630 14627 + 14627 14626 14625 + 14630 14459 14631 + 14631 14632 14630 + 14630 14632 14633 + 14633 14634 14630 + 14630 14634 14627 + 14634 14635 14627 + 14628 14627 14635 + 14631 14459 14458 + 14458 14636 14631 + 14631 14636 14637 + 14637 14581 14631 + 14632 14631 14581 + 14581 14586 14632 + 14633 14632 14586 + 14464 14636 14458 + 14636 14464 14575 + 14575 14637 14636 + 14605 14604 14638 + 14629 14628 14639 + 14639 14640 14629 + 14624 14629 14640 + 14640 14641 14624 + 14618 14624 14641 + 14641 14642 14618 + 14618 14642 14619 + 14640 14639 14643 + 14643 14644 14640 + 14640 14644 14645 + 14645 14641 14640 + 14641 14645 14646 + 14646 14642 14641 + 14642 14646 14647 + 14647 14619 14642 + 14644 14643 14648 + 14648 14649 14644 + 14644 14649 14650 + 14650 14645 14644 + 14646 14645 14650 + 14650 14651 14646 + 14646 14651 14652 + 14652 14647 14646 + 14653 14648 14643 + 14654 14648 14653 + 14649 14648 14654 + 14654 14655 14649 + 14649 14655 14656 + 14656 14650 14649 + 14651 14650 14656 + 14656 14657 14651 + 14651 14657 14658 + 14658 14652 14651 + 14653 14659 14654 + 14660 14654 14659 + 14655 14654 14660 + 14660 14661 14655 + 14655 14661 14662 + 14662 14656 14655 + 14657 14656 14662 + 14659 14653 14663 + 14663 14664 14659 + 14659 14664 14665 + 14665 14666 14659 + 14659 14666 14667 + 14667 14660 14659 + 14663 14653 14668 + 14668 14669 14663 + 14663 14669 14670 + 14664 14663 14670 + 14671 14668 14653 + 14672 14668 14671 + 14668 14672 14673 + 14673 14669 14668 + 14669 14673 14674 + 14674 14670 14669 + 14675 14670 14674 + 14670 14675 14664 + 14676 14671 14653 + 14677 14671 14676 + 14671 14677 14610 + 14610 14678 14671 + 14671 14678 14672 + 14679 14672 14678 + 14673 14672 14679 + 14679 14680 14673 + 14680 14674 14673 + 14676 14681 14677 + 14604 14677 14681 + 14610 14677 14604 + 14678 14610 14609 + 14609 14682 14678 + 14678 14682 14679 + 14682 14683 14679 + 14683 14684 14679 + 14685 14679 14684 + 14680 14679 14685 + 14682 14609 14686 + 14682 14686 14687 + 14687 14683 14682 + 14683 14687 14688 + 14688 14689 14683 + 14683 14689 14690 + 14690 14684 14683 + 14686 14609 14691 + 14691 14692 14686 + 14687 14686 14692 + 14692 14693 14687 + 14688 14687 14693 + 14608 14691 14609 + 14619 14691 14608 + 14692 14691 14619 + 14619 14647 14692 + 14692 14647 14652 + 14652 14693 14692 + 14652 14658 14693 + 14693 14658 14688 + 14688 14658 14657 + 14657 14694 14688 + 14694 14695 14688 + 14689 14688 14695 + 14695 14696 14689 + 14689 14696 14697 + 14690 14689 14697 + 14662 14694 14657 + 14698 14694 14662 + 14694 14698 14699 + 14699 14695 14694 + 14695 14699 14700 + 14700 14696 14695 + 14696 14700 14701 + 14701 14697 14696 + 14662 14702 14698 + 14698 14702 14703 + 14703 14704 14698 + 14698 14704 14705 + 14705 14699 14698 + 14700 14699 14705 + 14705 14706 14700 + 14701 14700 14706 + 14702 14662 14661 + 14661 14707 14702 + 14703 14702 14707 + 14707 14708 14703 + 14709 14703 14708 + 14703 14709 14710 + 14710 14704 14703 + 14704 14710 14711 + 14711 14705 14704 + 14707 14661 14660 + 14660 14712 14707 + 14707 14712 14151 + 14151 14708 14707 + 14155 14708 14151 + 14708 14155 14709 + 14160 14709 14155 + 14710 14709 14160 + 14712 14660 14667 + 14667 14144 14712 + 14151 14712 14144 + 14144 14667 14713 + 14713 14139 14144 + 14139 14713 14133 + 14133 14713 14714 + 14714 14134 14133 + 14713 14667 14666 + 14666 14714 14713 + 14665 14714 14666 + 14714 14665 14715 + 14715 14134 14714 + 14129 14134 14715 + 14715 14716 14129 + 14129 14716 14130 + 14715 14665 14664 + 14717 14715 14664 + 14716 14715 14717 + 14717 14718 14716 + 14130 14716 14718 + 14718 14719 14130 + 14719 14720 14130 + 14720 14721 14130 + 14111 14130 14721 + 14722 14717 14664 + 14723 14717 14722 + 14723 14718 14717 + 14718 14723 14724 + 14724 14719 14718 + 14724 14725 14719 + 14719 14725 14726 + 14726 14720 14719 + 14664 14675 14722 + 14727 14722 14675 + 14728 14722 14727 + 14722 14728 14723 + 14723 14728 14729 + 14724 14723 14729 + 14730 14724 14729 + 14725 14724 14730 + 14675 14731 14727 + 14727 14731 14732 + 14733 14727 14732 + 14728 14727 14733 + 14733 14729 14728 + 14674 14731 14675 + 14731 14674 14680 + 14680 14732 14731 + 14685 14732 14680 + 14732 14685 14734 + 14734 14735 14732 + 14732 14735 14733 + 14736 14733 14735 + 14729 14733 14736 + 14737 14734 14685 + 14738 14734 14737 + 14738 14735 14734 + 14735 14738 14736 + 14739 14736 14738 + 14729 14736 14739 + 14740 14737 14685 + 14741 14737 14740 + 14737 14741 14742 + 14742 14743 14737 + 14737 14743 14738 + 14738 14743 14739 + 14744 14740 14685 + 14745 14740 14744 + 14740 14745 14746 + 14746 14747 14740 + 14740 14747 14741 + 14685 14748 14744 + 14749 14744 14748 + 14744 14749 14750 + 14744 14750 14745 + 14745 14750 14751 + 14752 14745 14751 + 14746 14745 14752 + 14684 14748 14685 + 14684 14690 14748 + 14748 14690 14749 + 14697 14749 14690 + 14750 14749 14697 + 14697 14751 14750 + 14751 14697 14701 + 14751 14701 14753 + 14753 14754 14751 + 14751 14754 14752 + 14755 14752 14754 + 14752 14755 14756 + 14756 14757 14752 + 14752 14757 14746 + 14706 14753 14701 + 14758 14753 14706 + 14753 14758 14759 + 14759 14754 14753 + 14754 14759 14755 + 14760 14755 14759 + 14756 14755 14760 + 14706 14761 14758 + 14762 14758 14761 + 14759 14758 14762 + 14762 14763 14759 + 14759 14763 14760 + 14761 14706 14705 + 14705 14711 14761 + 14761 14711 14764 + 14764 14765 14761 + 14761 14765 14762 + 14766 14762 14765 + 14762 14766 14767 + 14767 14763 14762 + 14763 14767 14768 + 14768 14760 14763 + 14764 14711 14710 + 14710 14769 14764 + 14770 14764 14769 + 14764 14770 14771 + 14771 14765 14764 + 14765 14771 14766 + 14772 14766 14771 + 14767 14766 14772 + 14772 14773 14767 + 14768 14767 14773 + 14160 14769 14710 + 14774 14769 14160 + 14769 14774 14770 + 14775 14770 14774 + 14771 14770 14775 + 14775 14776 14771 + 14771 14776 14772 + 14777 14772 14776 + 14773 14772 14777 + 14160 14159 14774 + 14774 14159 14158 + 14158 14165 14774 + 14774 14165 14775 + 14778 14775 14165 + 14775 14778 14776 + 14776 14778 14777 + 14777 14778 14164 + 14164 14170 14777 + 14170 14250 14777 + 14250 14779 14777 + 14773 14777 14779 + 14165 14164 14778 + 14258 14779 14250 + 14780 14779 14258 + 14779 14780 14773 + 14773 14780 14768 + 14781 14768 14780 + 14760 14768 14781 + 14781 14782 14760 + 14760 14782 14756 + 14258 14783 14780 + 14780 14783 14781 + 14781 14783 14784 + 14784 14785 14781 + 14782 14781 14785 + 14785 14786 14782 + 14756 14782 14786 + 14786 14787 14756 + 14757 14756 14787 + 14783 14258 14788 + 14788 14784 14783 + 14784 14788 14789 + 14789 14790 14784 + 14784 14790 14791 + 14791 14785 14784 + 14786 14785 14791 + 14257 14788 14258 + 14789 14788 14257 + 14257 14263 14789 + 14789 14263 14268 + 14268 14792 14789 + 14790 14789 14792 + 14792 14793 14790 + 14791 14790 14793 + 14793 14794 14791 + 14795 14791 14794 + 14791 14795 14786 + 14786 14795 14796 + 14796 14787 14786 + 14290 14792 14268 + 14793 14792 14290 + 14290 14797 14793 + 14793 14797 14798 + 14798 14794 14793 + 14799 14794 14798 + 14794 14799 14795 + 14796 14795 14799 + 14799 14800 14796 + 14801 14796 14800 + 14796 14801 14802 + 14797 14290 14289 + 14289 14295 14797 + 14798 14797 14295 + 14295 14803 14798 + 14804 14798 14803 + 14798 14804 14799 + 14799 14804 14805 + 14805 14800 14799 + 14300 14803 14295 + 14806 14803 14300 + 14803 14806 14804 + 14805 14804 14806 + 14806 14807 14805 + 14808 14805 14807 + 14805 14808 14809 + 14300 14810 14806 + 14806 14810 14811 + 14811 14807 14806 + 14812 14807 14811 + 14807 14812 14808 + 14813 14808 14812 + 14809 14808 14813 + 14810 14300 14814 + 14814 14815 14810 + 14811 14810 14815 + 14815 14816 14811 + 14817 14811 14816 + 14811 14817 14812 + 14299 14814 14300 + 14309 14814 14299 + 14815 14814 14309 + 14309 14818 14815 + 14815 14818 14819 + 14819 14816 14815 + 14820 14816 14819 + 14816 14820 14817 + 14821 14817 14820 + 14812 14817 14821 + 14821 14822 14812 + 14812 14822 14813 + 14818 14309 14314 + 14314 14319 14818 + 14819 14818 14319 + 14319 14823 14819 + 14824 14819 14823 + 14819 14824 14820 + 14820 14824 14825 + 14825 14826 14820 + 14820 14826 14821 + 14324 14823 14319 + 14827 14823 14324 + 14823 14827 14824 + 14825 14824 14827 + 14827 14828 14825 + 14829 14825 14828 + 14825 14829 14830 + 14830 14826 14825 + 14826 14830 14831 + 14831 14821 14826 + 14324 14832 14827 + 14832 14324 14833 + 14833 14834 14832 + 14323 14833 14324 + 14333 14833 14323 + 14834 14833 14333 + 14333 14835 14834 + 14834 14835 14836 + 14836 14837 14834 + 14834 14837 14838 + 14838 14839 14834 + 14827 14839 14838 + 14838 14828 14827 + 14835 14333 14338 + 14338 14840 14835 + 14836 14835 14840 + 14840 14841 14836 + 14842 14836 14841 + 14836 14842 14843 + 14843 14837 14836 + 14837 14843 14844 + 14844 14838 14837 + 14840 14338 14337 + 14337 14506 14840 + 14840 14506 14505 + 14505 14841 14840 + 14513 14841 14505 + 14841 14513 14842 + 14517 14842 14513 + 14843 14842 14517 + 14506 14337 14346 + 14800 14809 14801 + 14845 14801 14809 + 14802 14801 14845 + 14845 14846 14802 + 14802 14846 14746 + 14746 14757 14802 + 14787 14802 14757 + 14809 14847 14845 + 14848 14845 14847 + 14845 14848 14849 + 14849 14846 14845 + 14846 14849 14747 + 14747 14746 14846 + 14813 14847 14809 + 14850 14847 14813 + 14847 14850 14848 + 14851 14848 14850 + 14849 14848 14851 + 14851 14852 14849 + 14849 14852 14741 + 14741 14747 14849 + 14813 14853 14850 + 14850 14853 14854 + 14854 14855 14850 + 14850 14855 14851 + 14856 14851 14855 + 14856 14852 14851 + 14852 14856 14742 + 14742 14741 14852 + 14853 14813 14822 + 14822 14857 14853 + 14854 14853 14857 + 14857 14858 14854 + 14859 14854 14858 + 14855 14854 14859 + 14859 14860 14855 + 14855 14860 14856 + 14742 14856 14860 + 14857 14822 14821 + 14821 14831 14857 + 14857 14831 14861 + 14861 14858 14857 + 14858 14861 14862 + 14862 14863 14858 + 14858 14863 14859 + 14859 14863 14864 + 14864 14865 14859 + 14860 14859 14865 + 14861 14831 14830 + 14830 14866 14861 + 14862 14861 14866 + 14866 14867 14862 + 14862 14867 14868 + 14868 14869 14862 + 14863 14862 14869 + 14869 14864 14863 + 14870 14866 14830 + 14866 14870 14871 + 14871 14867 14866 + 14867 14871 14872 + 14872 14868 14867 + 14830 14829 14870 + 14873 14870 14829 + 14871 14870 14873 + 14873 14874 14871 + 14872 14871 14874 + 14874 14875 14872 + 14876 14872 14875 + 14868 14872 14876 + 14829 14877 14873 + 14878 14873 14877 + 14874 14873 14878 + 14878 14879 14874 + 14874 14879 14880 + 14880 14875 14874 + 14828 14877 14829 + 14877 14828 14838 + 14838 14844 14877 + 14877 14844 14878 + 14878 14844 14843 + 14843 14881 14878 + 14879 14878 14881 + 14881 14882 14879 + 14879 14882 14883 + 14883 14880 14879 + 14884 14880 14883 + 14875 14880 14884 + 14884 14885 14875 + 14875 14885 14876 + 14517 14881 14843 + 14881 14517 14516 + 14516 14882 14881 + 14882 14516 14886 + 14886 14883 14882 + 14887 14883 14886 + 14883 14887 14884 + 14884 14887 14888 + 14888 14889 14884 + 14885 14884 14889 + 14889 14890 14885 + 14876 14885 14890 + 14520 14886 14516 + 14891 14886 14520 + 14886 14891 14887 + 14887 14891 14892 + 14892 14888 14887 + 14893 14888 14892 + 14888 14893 14894 + 14894 14889 14888 + 14889 14894 14895 + 14895 14890 14889 + 14520 14528 14891 + 14891 14528 14896 + 14896 14892 14891 + 14897 14892 14896 + 14892 14897 14893 + 14893 14897 14898 + 14898 14899 14893 + 14894 14893 14899 + 14899 14900 14894 + 14895 14894 14900 + 14527 14896 14528 + 14901 14896 14527 + 14896 14901 14897 + 14897 14901 14902 + 14902 14898 14897 + 14903 14898 14902 + 14898 14903 14904 + 14904 14899 14898 + 14899 14904 14905 + 14905 14900 14899 + 14527 14533 14901 + 14901 14533 14906 + 14906 14902 14901 + 14907 14902 14906 + 14902 14907 14903 + 14903 14907 14908 + 14908 14909 14903 + 14904 14903 14909 + 14909 14910 14904 + 14905 14904 14910 + 14911 14906 14533 + 14912 14906 14911 + 14906 14912 14907 + 14907 14912 14913 + 14913 14908 14907 + 14914 14908 14913 + 14908 14914 14915 + 14915 14909 14908 + 14533 14532 14911 + 14916 14911 14532 + 14917 14911 14916 + 14911 14917 14912 + 14912 14917 14918 + 14918 14913 14912 + 14919 14913 14918 + 14913 14919 14914 + 14532 14538 14916 + 14916 14538 14920 + 14920 14921 14916 + 14922 14916 14921 + 14916 14922 14917 + 14917 14922 14923 + 14923 14918 14917 + 14924 14918 14923 + 14918 14924 14919 + 14538 14543 14920 + 14541 14920 14543 + 14925 14920 14541 + 14920 14925 14926 + 14926 14921 14920 + 14927 14921 14926 + 14921 14927 14922 + 14922 14927 14928 + 14928 14923 14922 + 14543 14542 14541 + 14541 14547 14925 + 14925 14547 14929 + 14929 14930 14925 + 14925 14930 14931 + 14931 14926 14925 + 14932 14926 14931 + 14926 14932 14927 + 14927 14932 14933 + 14933 14928 14927 + 14552 14929 14547 + 14934 14929 14552 + 14930 14929 14934 + 14934 14935 14930 + 14930 14935 14936 + 14936 14931 14930 + 14937 14931 14936 + 14931 14937 14932 + 14932 14937 14938 + 14938 14933 14932 + 14552 14551 14934 + 14939 14934 14551 + 14935 14934 14939 + 14939 14940 14935 + 14935 14940 14941 + 14941 14936 14935 + 14942 14936 14941 + 14936 14942 14937 + 14937 14942 14943 + 14943 14938 14937 + 14551 14944 14939 + 14944 14945 14939 + 14946 14939 14945 + 14940 14939 14946 + 14946 14947 14940 + 14940 14947 14948 + 14948 14941 14940 + 14557 14944 14551 + 14949 14944 14557 + 14944 14949 14950 + 14950 14945 14944 + 14945 14950 14951 + 14951 14952 14945 + 14945 14952 14946 + 14953 14946 14952 + 14947 14946 14953 + 14557 14954 14949 + 14949 14954 14955 + 14955 14956 14949 + 14950 14949 14956 + 14956 14957 14950 + 14951 14950 14957 + 14954 14557 14958 + 14958 14959 14954 + 14955 14954 14959 + 14959 14960 14955 + 14961 14955 14960 + 14956 14955 14961 + 14556 14958 14557 + 14562 14958 14556 + 14959 14958 14562 + 14562 14962 14959 + 14959 14962 14963 + 14963 14960 14959 + 14960 14963 14964 + 14964 14965 14960 + 14960 14965 14961 + 14962 14562 14966 + 14966 14967 14962 + 14963 14962 14967 + 14967 14968 14963 + 14968 14969 14963 + 14964 14963 14969 + 14561 14966 14562 + 14567 14966 14561 + 14967 14966 14567 + 14567 14970 14967 + 14967 14970 14971 + 14971 14968 14967 + 14968 14971 14972 + 14972 14973 14968 + 14968 14973 14974 + 14974 14969 14968 + 14970 14567 14572 + 14572 14469 14970 + 14971 14970 14469 + 14469 14468 14971 + 14972 14971 14468 + 14468 14467 14972 + 14975 14972 14467 + 14973 14972 14975 + 14463 14469 14572 + 14476 14975 14467 + 14976 14975 14476 + 14975 14976 14977 + 14977 14978 14975 + 14975 14978 14973 + 14973 14978 14979 + 14979 14974 14973 + 14980 14974 14979 + 14969 14974 14980 + 14476 14481 14976 + 14976 14481 14981 + 14981 14982 14976 + 14977 14976 14982 + 14982 14983 14977 + 14984 14977 14983 + 14978 14977 14984 + 14984 14979 14978 + 14480 14981 14481 + 14985 14981 14480 + 14981 14985 14986 + 14986 14982 14981 + 14982 14986 14987 + 14987 14983 14982 + 14983 14987 14988 + 14988 14989 14983 + 14983 14989 14984 + 14480 14479 14985 + 14985 14479 14990 + 14990 14991 14985 + 14985 14991 14992 + 14992 14986 14985 + 14987 14986 14992 + 14992 14993 14987 + 14988 14987 14993 + 14994 14990 14479 + 14995 14990 14994 + 14995 14991 14990 + 14991 14995 14996 + 14996 14992 14991 + 14996 14993 14992 + 14993 14996 14997 + 14997 14998 14993 + 14993 14998 14988 + 14502 14994 14479 + 14999 14994 14502 + 15000 14994 14999 + 14994 15000 14995 + 14996 14995 15000 + 14502 14501 14999 + 15001 14999 14501 + 15000 14999 15001 + 15001 15002 15000 + 15000 15002 14996 + 15003 15001 14501 + 15004 15001 15003 + 15002 15001 15004 + 15002 15004 15005 + 15005 15006 15002 + 15002 15006 14996 + 15007 15003 14501 + 15008 15003 15007 + 15008 15009 15003 + 15003 15009 15004 + 15004 15009 15010 + 15010 15005 15004 + 15011 15005 15010 + 15006 15005 15011 + 14500 15007 14501 + 15012 15007 14500 + 15013 15007 15012 + 15007 15013 15008 + 15008 15013 1628 + 15014 15008 1628 + 15009 15008 15014 + 15014 15010 15009 + 15014 15015 15010 + 15010 15015 15011 + 14500 7560 15012 + 1629 15012 7560 + 15013 15012 1629 + 1629 1628 15013 + 1624 1629 7560 + 7559 1624 7560 + 15016 1624 7559 + 1624 15016 1620 + 1620 15016 15017 + 15017 15018 1620 + 1620 15018 1615 + 7559 7558 15016 + 15017 15016 7558 + 15019 15017 7558 + 15020 15017 15019 + 15018 15017 15020 + 15018 15020 15021 + 15021 1615 15018 + 1616 1615 15021 + 1616 15021 15022 + 15022 1610 1616 + 7566 15019 7558 + 15023 15019 7566 + 15024 15019 15023 + 15019 15024 15020 + 15020 15024 15025 + 15021 15020 15025 + 15025 15022 15021 + 15026 15022 15025 + 15026 1610 15022 + 1610 15026 1611 + 7566 15027 15023 + 15028 15023 15027 + 15024 15023 15028 + 15028 15029 15024 + 15024 15029 15025 + 15027 7566 7565 + 15027 7565 7564 + 7564 15030 15027 + 15027 15030 15028 + 15025 15031 15026 + 15026 15031 15032 + 1611 15026 15032 + 15032 15033 1611 + 1607 1611 15033 + 15033 15034 1607 + 1607 15034 1602 + 15034 15035 1602 + 15035 15036 1602 + 15036 15037 1602 + 15037 15038 1602 + 15039 15034 15033 + 15034 15039 15040 + 15040 15035 15034 + 15040 15041 15035 + 15035 15041 15042 + 15042 15036 15035 + 15033 15043 15039 + 15039 15043 15044 + 15044 15045 15039 + 15040 15039 15045 + 15045 15046 15040 + 15041 15040 15046 + 15046 15047 15041 + 15042 15041 15047 + 15043 15033 15048 + 15048 15049 15043 + 15043 15049 15050 + 15050 15044 15043 + 15051 15044 15050 + 15045 15044 15051 + 15045 15051 15052 + 15052 15046 15045 + 15047 15046 15052 + 15048 15053 15049 + 15049 15053 15054 + 15054 15050 15049 + 15050 15054 15055 + 15050 15055 15051 + 15051 15055 505 + 15052 15051 505 + 15053 15048 15056 + 15056 15057 15053 + 15054 15053 15057 + 15058 15054 15057 + 15055 15054 15058 + 15058 15059 15055 + 15055 15059 505 + 15057 15056 15060 + 15060 15061 15057 + 15057 15061 15062 + 15062 15058 15057 + 15058 15062 15059 + 15059 15062 15063 + 15063 15064 15059 + 15059 15064 505 + 15061 15060 15065 + 15065 15066 15061 + 15062 15061 15066 + 15063 15062 15066 + 15067 15063 15066 + 15063 15067 15064 + 15064 15067 15068 + 15068 15069 15064 + 15064 15069 505 + 15069 15070 505 + 15070 506 505 + 15065 15071 15066 + 15066 15071 15067 + 15067 15071 15072 + 15068 15067 15072 + 15073 15068 15072 + 15068 15073 15069 + 15069 15073 15074 + 15074 15070 15069 + 15071 15065 15075 + 15075 15072 15071 + 15075 15076 15072 + 15072 15076 15073 + 15073 15076 15077 + 15074 15073 15077 + 15077 15078 15074 + 15079 15074 15078 + 15074 15079 15070 + 15075 15065 15080 + 505 511 15052 + 511 15081 15052 + 15081 15082 15052 + 15047 15052 15082 + 15082 15083 15047 + 15047 15083 15042 + 15084 15081 511 + 15084 15085 15081 + 15081 15085 15086 + 15086 15082 15081 + 15086 15083 15082 + 15042 15083 15086 + 15087 15042 15086 + 15042 15087 15036 + 511 510 15084 + 15084 510 509 + 509 15088 15084 + 15088 15089 15084 + 15085 15084 15089 + 15089 15090 15085 + 15085 15090 15091 + 15086 15085 15091 + 15091 15087 15086 + 15036 15087 15091 + 15091 15037 15036 + 15092 15089 15088 + 15089 15092 15093 + 15093 15090 15089 + 15090 15093 15094 + 15094 15091 15090 + 15091 15094 15037 + 15037 15094 15095 + 15095 15096 15037 + 15088 15097 15092 + 15092 15097 15098 + 14721 14112 14111 + 14721 15099 14112 + 14112 15099 14113 + 15099 15100 14113 + 14107 14113 15100 + 15100 15101 14107 + 14107 15101 14108 + 15099 14721 14720 + 14720 15100 15099 + 15101 15100 14720 + 14720 14726 15101 + 15101 14726 15102 + 15102 14108 15101 + 15103 14108 15102 + 14108 15103 14109 + 14109 15103 15104 + 15104 15105 14109 + 14104 14109 15105 + 15106 15102 14726 + 15107 15102 15106 + 15102 15107 15103 + 15103 15107 15108 + 15108 15104 15103 + 15109 15104 15108 + 15104 15109 15110 + 15110 15105 15104 + 14726 14725 15106 + 14725 15111 15106 + 15112 15106 15111 + 15113 15106 15112 + 15106 15113 15107 + 15107 15113 15114 + 15114 15108 15107 + 15115 15108 15114 + 15108 15115 15109 + 14730 15111 14725 + 14730 15116 15111 + 15111 15116 15112 + 15117 15112 15116 + 15118 15112 15117 + 15112 15118 15113 + 15113 15118 15119 + 15119 15114 15113 + 15120 15114 15119 + 15114 15120 15115 + 15116 14730 15121 + 15121 15122 15116 + 15116 15122 15117 + 15123 15117 15122 + 15124 15117 15123 + 15117 15124 15118 + 15118 15124 15125 + 15125 15119 15118 + 15121 14730 14729 + 15126 15121 14729 + 15127 15121 15126 + 15121 15127 15122 + 15122 15127 15123 + 15128 15123 15127 + 15129 15123 15128 + 15123 15129 15124 + 15124 15129 15130 + 15130 15125 15124 + 14729 15131 15126 + 15132 15126 15131 + 15126 15132 15133 + 15126 15133 15127 + 15127 15133 15128 + 14739 15131 14729 + 15131 14739 15134 + 15131 15134 15132 + 15132 15134 14742 + 15135 15132 14742 + 15133 15132 15135 + 15135 15136 15133 + 15133 15136 15128 + 15134 14739 14743 + 14743 14742 15134 + 14860 15135 14742 + 14865 15135 14860 + 15135 14865 15137 + 15137 15136 15135 + 15136 15137 15138 + 15138 15128 15136 + 15139 15128 15138 + 15128 15139 15129 + 15129 15139 15140 + 15140 15130 15129 + 15137 14865 14864 + 14864 15141 15137 + 15137 15141 15142 + 15142 15138 15137 + 15143 15138 15142 + 15138 15143 15139 + 15139 15143 15144 + 15144 15140 15139 + 15145 15141 14864 + 15141 15145 15146 + 15146 15142 15141 + 15147 15142 15146 + 15142 15147 15143 + 15143 15147 15148 + 15148 15144 15143 + 14864 14869 15145 + 15145 14869 14868 + 14868 15149 15145 + 15145 15149 15150 + 15150 15146 15145 + 15151 15146 15150 + 15146 15151 15147 + 15147 15151 15152 + 15152 15148 15147 + 14876 15149 14868 + 15149 14876 15153 + 15153 15150 15149 + 15154 15150 15153 + 15150 15154 15151 + 15151 15154 15155 + 15155 15152 15151 + 15156 15152 15155 + 15152 15156 15157 + 15157 15148 15152 + 14890 15153 14876 + 15158 15153 14890 + 15153 15158 15154 + 15154 15158 15159 + 15159 15155 15154 + 15160 15155 15159 + 15155 15160 15156 + 15156 15160 15161 + 15161 15162 15156 + 15157 15156 15162 + 14890 14895 15158 + 15158 14895 15163 + 15163 15159 15158 + 15164 15159 15163 + 15159 15164 15160 + 15160 15164 15165 + 15165 15161 15160 + 15166 15161 15165 + 15161 15166 15167 + 15167 15162 15161 + 14900 15163 14895 + 15168 15163 14900 + 15163 15168 15164 + 15164 15168 15169 + 15169 15165 15164 + 15170 15165 15169 + 15165 15170 15166 + 15166 15170 15171 + 15171 15172 15166 + 15167 15166 15172 + 14900 14905 15168 + 15168 14905 15173 + 15173 15169 15168 + 15174 15169 15173 + 15169 15174 15170 + 15170 15174 15175 + 15175 15171 15170 + 15176 15171 15175 + 15171 15176 15177 + 15177 15172 15171 + 14910 15173 14905 + 15178 15173 14910 + 15173 15178 15174 + 15174 15178 15179 + 15179 15175 15174 + 15180 15175 15179 + 15175 15180 15176 + 15176 15180 15181 + 15181 15182 15176 + 15177 15176 15182 + 14910 15183 15178 + 15178 15183 15184 + 15184 15179 15178 + 15185 15179 15184 + 15179 15185 15180 + 15180 15185 15186 + 15186 15181 15180 + 15183 14910 14909 + 14909 14915 15183 + 15183 14915 15187 + 15187 15184 15183 + 15188 15184 15187 + 15184 15188 15185 + 15185 15188 15189 + 15189 15186 15185 + 15190 15186 15189 + 15186 15190 15191 + 15191 15181 15186 + 15192 15187 14915 + 15193 15187 15192 + 15187 15193 15188 + 15188 15193 15194 + 15194 15189 15188 + 15195 15189 15194 + 15189 15195 15190 + 15196 15190 15195 + 15191 15190 15196 + 14915 14914 15192 + 15197 15192 14914 + 15198 15192 15197 + 15192 15198 15193 + 15193 15198 15199 + 15199 15194 15193 + 15200 15194 15199 + 15194 15200 15195 + 14914 14919 15197 + 15201 15197 14919 + 15202 15197 15201 + 15197 15202 15198 + 15198 15202 15203 + 15203 15199 15198 + 15204 15199 15203 + 15199 15204 15200 + 15205 15200 15204 + 15195 15200 15205 + 14919 14924 15201 + 15206 15201 14924 + 15207 15201 15206 + 15201 15207 15202 + 15202 15207 15208 + 15208 15203 15202 + 15209 15203 15208 + 15203 15209 15204 + 14924 15210 15206 + 15211 15206 15210 + 15212 15206 15211 + 15206 15212 15207 + 15207 15212 15213 + 15213 15208 15207 + 15214 15208 15213 + 15208 15214 15209 + 14923 15210 14924 + 15210 14923 14928 + 14928 15215 15210 + 15210 15215 15211 + 15216 15211 15215 + 15217 15211 15216 + 15211 15217 15212 + 15212 15217 15218 + 15218 15213 15212 + 15219 15213 15218 + 15213 15219 15214 + 15215 14928 14933 + 14933 15220 15215 + 15215 15220 15216 + 15221 15216 15220 + 15222 15216 15221 + 15216 15222 15217 + 15217 15222 15223 + 15223 15218 15217 + 15224 15218 15223 + 15218 15224 15219 + 15220 14933 14938 + 14938 15225 15220 + 15220 15225 15221 + 15226 15221 15225 + 15227 15221 15226 + 15221 15227 15222 + 15222 15227 15228 + 15228 15223 15222 + 15229 15223 15228 + 15223 15229 15224 + 15225 14938 14943 + 14943 15230 15225 + 15225 15230 15226 + 15231 15226 15230 + 15232 15226 15231 + 15226 15232 15227 + 15227 15232 15233 + 15233 15228 15227 + 15234 15228 15233 + 15228 15234 15229 + 15230 14943 15235 + 15235 15236 15230 + 15230 15236 15231 + 15237 15231 15236 + 15238 15231 15237 + 15231 15238 15232 + 15232 15238 15239 + 15239 15233 15232 + 15235 14943 14942 + 14942 15240 15235 + 15241 15235 15240 + 15236 15235 15241 + 15241 15242 15236 + 15236 15242 15237 + 15243 15237 15242 + 15244 15237 15243 + 15237 15244 15238 + 14941 15240 14942 + 15240 14941 14948 + 14948 15245 15240 + 15240 15245 15241 + 15246 15241 15245 + 15242 15241 15246 + 15246 15247 15242 + 15242 15247 15243 + 15248 15243 15247 + 15249 15243 15248 + 15243 15249 15244 + 15245 14948 15250 + 15250 15251 15245 + 15245 15251 15246 + 15252 15246 15251 + 15247 15246 15252 + 15252 15253 15247 + 15247 15253 15248 + 15250 14948 14947 + 14947 15254 15250 + 15255 15250 15254 + 15251 15250 15255 + 15255 15256 15251 + 15251 15256 15252 + 15257 15252 15256 + 15253 15252 15257 + 14953 15254 14947 + 15254 14953 15258 + 15258 15259 15254 + 15254 15259 15255 + 15260 15255 15259 + 15256 15255 15260 + 15260 15261 15256 + 15256 15261 15257 + 15258 14953 15262 + 15262 15263 15258 + 15264 15258 15263 + 15259 15258 15264 + 15264 15265 15259 + 15259 15265 15260 + 15266 15260 15265 + 15261 15260 15266 + 14952 15262 14953 + 15267 15262 14952 + 15262 15267 15268 + 15268 15263 15262 + 15263 15268 15269 + 15269 15270 15263 + 15263 15270 15264 + 15271 15264 15270 + 15265 15264 15271 + 14952 14951 15267 + 15267 14951 15272 + 15272 15273 15267 + 15268 15267 15273 + 15273 15274 15268 + 15269 15268 15274 + 14957 15272 14951 + 15272 14957 15275 + 15275 15276 15272 + 15272 15276 15277 + 15277 15273 15272 + 15274 15273 15277 + 15275 14957 14956 + 14956 15278 15275 + 15275 15278 15279 + 15279 15280 15275 + 15276 15275 15280 + 15280 15281 15276 + 15277 15276 15281 + 14961 15278 14956 + 15278 14961 15282 + 15282 15279 15278 + 15279 15282 15283 + 15283 15284 15279 + 15279 15284 15285 + 15285 15280 15279 + 15281 15280 15285 + 15282 14961 14965 + 14965 15286 15282 + 15283 15282 15286 + 15286 15287 15283 + 15288 15283 15287 + 15284 15283 15288 + 15288 15289 15284 + 15284 15289 15290 + 15290 15285 15284 + 15291 15286 14965 + 15287 15286 15291 + 15291 15292 15287 + 15287 15292 15293 + 15293 15294 15287 + 15287 15294 15288 + 14965 14964 15291 + 15291 14964 15295 + 15295 15296 15291 + 15292 15291 15296 + 15296 15297 15292 + 15293 15292 15297 + 14969 15295 14964 + 14980 15295 14969 + 15295 14980 15298 + 15298 15296 15295 + 15297 15296 15298 + 15298 15299 15297 + 15297 15299 15300 + 15300 15301 15297 + 15297 15301 15293 + 15298 14980 15302 + 15302 15303 15298 + 15299 15298 15303 + 15303 15304 15299 + 15300 15299 15304 + 14979 15302 14980 + 15305 15302 14979 + 15302 15305 15306 + 15306 15303 15302 + 15304 15303 15306 + 15306 15307 15304 + 15304 15307 15308 + 15308 15309 15304 + 15304 15309 15300 + 14979 14984 15305 + 15305 14984 14989 + 14989 15310 15305 + 15306 15305 15310 + 15310 15311 15306 + 15307 15306 15311 + 15311 15312 15307 + 15308 15307 15312 + 15313 15310 14989 + 15310 15313 15314 + 15314 15311 15310 + 15312 15311 15314 + 15314 15315 15312 + 15312 15315 15316 + 15316 15317 15312 + 15312 15317 15308 + 14989 14988 15313 + 15313 14988 14998 + 14998 15318 15313 + 15314 15313 15318 + 15318 15319 15314 + 15319 15320 15314 + 15315 15314 15320 + 15320 15321 15315 + 15316 15315 15321 + 14997 15318 14998 + 15318 14997 15322 + 15322 15319 15318 + 15322 15323 15319 + 15319 15323 15324 + 15324 15320 15319 + 15321 15320 15324 + 15322 14997 14996 + 15325 15322 14996 + 15323 15322 15325 + 15325 15326 15323 + 15324 15323 15326 + 15326 15327 15324 + 15327 15328 15324 + 15329 15324 15328 + 15324 15329 15321 + 15330 15325 14996 + 15331 15325 15330 + 15325 15331 15326 + 15326 15331 15332 + 15332 15327 15326 + 15332 15333 15327 + 15327 15333 15334 + 15334 15328 15327 + 15006 15330 14996 + 15335 15330 15006 + 15330 15335 15336 + 15330 15336 15331 + 15332 15331 15336 + 15337 15332 15336 + 15333 15332 15337 + 15337 15338 15333 + 15334 15333 15338 + 15006 15011 15335 + 15339 15335 15011 + 15336 15335 15339 + 15339 15340 15336 + 15336 15340 15337 + 15341 15337 15340 + 15341 15338 15337 + 15338 15341 15342 + 15342 15343 15338 + 15338 15343 15334 + 15344 15339 15011 + 15345 15339 15344 + 15339 15345 15346 + 15346 15340 15339 + 15340 15346 15341 + 15341 15346 15347 + 15347 5158 15341 + 5158 15342 15341 + 15011 15015 15344 + 15348 15344 15015 + 15348 15349 15344 + 15344 15349 15345 + 15345 15349 15350 + 15350 15351 15345 + 15351 15352 15345 + 15346 15345 15352 + 15352 15347 15346 + 15015 15014 15348 + 15348 15014 1628 + 15353 15348 1628 + 15349 15348 15353 + 15353 15350 15349 + 1639 15350 15353 + 15350 1639 5146 + 5146 15351 15350 + 5145 15351 5146 + 15351 5145 15354 + 15354 15352 15351 + 15354 15347 15352 + 1628 1634 15353 + 1639 15353 1634 + 5153 15354 5145 + 15347 15354 5153 + 5153 5158 15347 + 14605 15355 14596 + 14596 15355 14597 + 248 7356 14280 + 248 14280 15356 + 15357 15358 13509 + 15359 15357 13509 + 7328 15357 15359 + 15360 15357 7328 + 7323 15359 13509 + 7322 15359 7323 + 15359 7322 7328 + 7409 15361 3363 + 15362 7409 3363 + 15363 14182 15364 + 15365 14182 15363 + 14182 15365 14220 + 14220 15366 14182 + 15363 15367 15365 + 14215 15365 15367 + 14220 15365 14215 + 15363 15368 15367 + 15367 15368 15369 + 15369 14216 15367 + 15367 14216 14215 + 15368 15363 15370 + 15370 250 15368 + 15369 15368 250 + 250 15371 15369 + 14211 15369 15371 + 15369 14211 14210 + 14210 14216 15369 + 13621 15371 250 + 13620 15371 13621 + 15371 13620 14211 + 250 214 13621 + 13755 15372 15373 + 15372 13761 15373 + 15374 1486 15375 + 1486 1485 15375 + 15376 15375 1485 + 1485 1484 15376 + 15377 15376 1484 + 15378 336 15379 + 15380 336 15378 + 15378 621 15380 + 15381 15382 3773 + 15383 3773 15382 + 3773 15383 3774 + 3774 15383 15384 + 15384 3788 3774 + 15382 15385 15383 + 15383 15385 495 + 495 15384 15383 + 15386 15384 495 + 3788 15384 15386 + 15386 15387 3788 + 3788 15387 3789 + 3819 3789 15387 + 3818 3789 3819 + 3789 3818 229 + 495 15388 15386 + 15386 15388 15389 + 15389 15390 15386 + 15387 15386 15390 + 15390 15391 15387 + 15387 15391 3819 + 3479 3819 15391 + 15392 15390 15389 + 15391 15390 15392 + 15391 15392 3479 + 3479 15392 15393 + 15393 15394 3479 + 15394 3480 3479 + 3481 3480 15394 + 15389 15395 15392 + 15392 15395 15393 + 15077 15393 15395 + 15077 15396 15393 + 15393 15396 15397 + 15397 15394 15393 + 15397 15398 15394 + 15394 15398 3481 + 3481 15398 3470 + 15389 15078 15395 + 15395 15078 15077 + 15078 15389 15079 + 15399 15079 15389 + 15070 15079 15399 + 15399 506 15070 + 15399 507 506 + 507 15399 15400 + 15400 15401 507 + 15402 15399 15389 + 15403 6 15404 + 6 15405 15404 + 15406 15407 15408 + 15409 15408 15407 + 15408 15409 15410 + 15407 15411 15409 + 15409 15411 15412 + 15412 15413 15409 + 15413 15414 15409 + 15414 15415 15409 + 15415 15410 15409 + 15416 15411 15407 + 15411 15416 15417 + 15417 15412 15411 + 15412 15417 442 + 15412 442 449 + 449 15413 15412 + 15416 15407 15418 + 15418 15419 15416 + 15416 15419 15420 + 15420 15417 15416 + 442 15417 15420 + 15420 15421 442 + 442 15421 435 + 15419 15418 15422 + 15419 15422 15423 + 15423 15424 15419 + 15419 15424 15420 + 15425 15420 15424 + 15420 15425 15421 + 15421 15425 15426 + 15426 15427 15421 + 15421 15427 435 + 15428 15424 15423 + 15424 15428 15425 + 15425 15428 15429 + 15426 15425 15429 + 15429 15430 15426 + 15431 15426 15430 + 15426 15431 15427 + 15428 15423 15432 + 15432 15429 15428 + 15433 15429 15432 + 15429 15433 1602 + 1602 15430 15429 + 1602 15434 15430 + 15430 15434 15431 + 15435 15431 15434 + 15427 15431 15435 + 15435 15436 15427 + 15427 15436 435 + 15436 15437 435 + 15437 436 435 + 438 436 15437 + 15434 1602 15096 + 15096 15438 15434 + 15434 15438 15435 + 15439 15435 15438 + 15435 15439 15436 + 15436 15439 15440 + 15440 15437 15436 + 15440 15441 15437 + 15437 15441 438 + 438 15441 15092 + 15093 15092 15441 + 15095 15438 15096 + 15438 15095 15439 + 15439 15095 15094 + 15440 15439 15094 + 15094 15093 15440 + 15441 15440 15093 + 448 15413 449 + 15413 448 15442 + 15442 15414 15413 + 15414 15442 15415 + 15415 15442 15443 + 15443 15444 15415 + 15410 15415 15444 + 15442 448 453 + 453 15443 15442 + 15445 15443 453 + 15444 15443 15445 + 15444 15445 15446 + 15446 15447 15444 + 15444 15447 15410 + 15448 15410 15447 + 15410 15448 15449 + 453 452 15445 + 15445 452 391 + 15446 15445 375 + 7742 15446 375 + 15450 15446 7742 + 15450 15447 15446 + 15447 15450 15448 + 15451 15448 15450 + 15452 15448 15451 + 15451 15453 15452 + 15453 15451 7750 + 7750 15454 15453 + 7742 7751 15450 + 15450 7751 15451 + 7750 15451 7751 + 15454 7750 7749 + 7749 15455 15454 + 15456 15455 7749 + 15457 15458 3030 + 3025 3030 15458 + 15458 186 3025 + 3025 186 15459 + 5800 3909 15460 + 15460 3878 5800 + 15461 15462 15463 + 15464 15462 15461 + 15464 15465 15462 + 15462 15465 15466 + 15466 15467 15462 + 15466 15468 15467 + 15461 15469 15464 + 15468 15466 15470 + 15470 15471 15468 + 15470 2086 15471 + 2086 15472 15471 + 3715 15473 15474 + 3704 15473 3715 + 3715 15475 3704 + 3704 15475 15476 + 15476 15477 3704 + 15477 3705 3704 + 15477 15478 3705 + 15479 15475 3715 + 15475 15479 15480 + 15480 15476 15475 + 3715 15481 15479 + 15479 15481 15482 + 15482 7652 15479 + 15479 7652 7651 + 15480 15479 7651 + 15481 3715 3714 + 3714 15483 15481 + 15483 15484 15481 + 15484 15482 15481 + 7646 15482 15484 + 7646 7652 15482 + 15484 15483 15485 + 7681 15484 15485 + 7647 15484 7681 + 15484 7647 7646 + 7681 7649 7647 + 7649 7681 7680 + 7680 15486 7649 + 7649 15486 15487 + 15488 7649 15487 + 7680 7679 15486 + 7657 15486 7679 + 15486 7657 15487 + 15489 7657 7679 + 15490 38 15491 + 15492 15490 15491 + 15493 15494 7731 + 15494 15495 7731 + 15357 15496 14279 + 14279 15497 15357 + 3442 15498 15499 + 15499 15500 3442 + 15501 1423 1414 + 1414 15502 15501 + 15501 15502 15503 + 15503 1505 15501 + 1504 15501 1505 + 1507 15501 1504 + 15502 1414 1413 + 1413 1419 15502 + 15502 1419 1418 + 1418 15503 15502 + 20 15503 1418 + 15503 20 1506 + 1506 1505 15503 + 15504 1506 20 + 15505 4962 15506 + 15506 15507 15505 + 15508 15509 3705 + 15510 15508 3705 + 15511 15512 15513 + 15514 15513 15512 + 14635 15513 15514 + 15513 14635 14634 + 14634 15515 15513 + 15513 15515 15516 + 15517 15516 15515 + 15512 15518 15514 + 15514 15518 15519 + 15519 14628 15514 + 14635 15514 14628 + 14634 14633 15515 + 15515 14633 15517 + 14586 15517 14633 + 14585 15517 14586 + 15517 14585 14591 + 14591 15520 15517 + 7763 15521 15522 + 15522 15523 7763 + 15523 15522 15524 + 15525 15523 15524 + 15525 15524 7677 + 7677 15526 15525 + 15527 15525 15526 + 15528 15527 15526 + 15526 7676 15528 + 7676 15526 7677 + 15398 15529 3470 + 15530 15529 15398 + 15531 15529 15530 + 15529 15531 3471 + 3471 3470 15529 + 15398 15397 15530 + 15532 15530 15397 + 15531 15530 15532 + 15532 15533 15531 + 3471 15531 15533 + 15534 15532 15397 + 15029 15532 15534 + 15533 15532 15029 + 15397 15396 15534 + 15535 15534 15396 + 15536 15534 15535 + 15534 15536 15029 + 15029 15536 15537 + 15536 15538 15537 + 15076 15538 15536 + 15396 15077 15535 + 15076 15535 15077 + 15536 15535 15076 + 15539 15342 5158 + 15342 15539 15540 + 15540 15343 15342 + 15343 15540 15541 + 15541 15542 15343 + 15343 15542 15334 + 5158 5157 15539 + 15539 5157 5156 + 5156 15543 15539 + 15540 15539 15543 + 15543 15544 15540 + 15541 15540 15544 + 15544 15545 15541 + 15546 15541 15545 + 15541 15546 15547 + 15547 15542 15541 + 5167 15543 5156 + 15544 15543 5167 + 5167 15548 15544 + 15544 15548 15549 + 15549 15545 15544 + 15550 15545 15549 + 15545 15550 15546 + 15551 15546 15550 + 15547 15546 15551 + 15548 5167 15552 + 15552 15553 15548 + 15549 15548 15553 + 15553 15554 15549 + 15555 15549 15554 + 15549 15555 15550 + 5166 15552 5167 + 15556 15552 5166 + 15552 15556 15557 + 15557 15553 15552 + 15553 15557 15558 + 15558 15554 15553 + 15559 15554 15558 + 15554 15559 15555 + 15560 15555 15559 + 15550 15555 15560 + 5166 5165 15556 + 15556 5165 5164 + 5164 15561 15556 + 15557 15556 15561 + 15561 15562 15557 + 15558 15557 15562 + 15562 15563 15558 + 15563 15564 15558 + 15565 15558 15564 + 15558 15565 15559 + 5174 15561 5164 + 15561 5174 15562 + 15562 5174 15566 + 15566 15563 15562 + 15563 15566 15567 + 15567 15568 15563 + 15563 15568 15569 + 15569 15564 15563 + 15570 15564 15569 + 15564 15570 15565 + 5179 15566 5174 + 15567 15566 5179 + 5179 5183 15567 + 15571 15567 5183 + 15568 15567 15571 + 15571 15572 15568 + 15569 15568 15572 + 15572 15573 15569 + 15574 15569 15573 + 15569 15574 15570 + 5183 5182 15571 + 15575 15571 5182 + 15572 15571 15575 + 15575 15576 15572 + 15572 15576 15577 + 15577 15573 15572 + 15578 15573 15577 + 15573 15578 15574 + 15579 15574 15578 + 15570 15574 15579 + 5182 5187 15575 + 15580 15575 5187 + 15576 15575 15580 + 15580 15581 15576 + 15577 15576 15581 + 15581 15582 15577 + 15583 15577 15582 + 15577 15583 15578 + 5187 15584 15580 + 15585 15580 15584 + 15581 15580 15585 + 15585 15586 15581 + 15581 15586 15587 + 15587 15582 15581 + 15588 15582 15587 + 15582 15588 15583 + 5186 15584 5187 + 15589 15584 5186 + 15584 15589 15585 + 15590 15585 15589 + 15586 15585 15590 + 15590 15591 15586 + 15587 15586 15591 + 15591 15592 15587 + 15593 15587 15592 + 15587 15593 15588 + 5186 15594 15589 + 15589 15594 15595 + 15595 15596 15589 + 15589 15596 15590 + 15597 15590 15596 + 15591 15590 15597 + 15594 5186 5191 + 5191 15598 15594 + 15595 15594 15598 + 15598 15599 15595 + 15600 15595 15599 + 15595 15600 15601 + 15601 15596 15595 + 15596 15601 15597 + 15602 15598 5191 + 15598 15602 15603 + 15603 15599 15598 + 15599 15603 15604 + 15604 15605 15599 + 15599 15605 15600 + 15606 15600 15605 + 15601 15600 15606 + 5191 5190 15602 + 15602 5190 15607 + 15607 15608 15602 + 15603 15602 15608 + 15608 15609 15603 + 15604 15603 15609 + 15609 15610 15604 + 15611 15604 15610 + 15605 15604 15611 + 5195 15607 5190 + 15612 15607 5195 + 15607 15612 15613 + 15613 15608 15607 + 15608 15613 15614 + 15614 15609 15608 + 15609 15614 15615 + 15615 15610 15609 + 5195 5200 15612 + 15612 5200 15616 + 15616 15617 15612 + 15613 15612 15617 + 15617 15618 15613 + 15614 15613 15618 + 15618 15619 15614 + 15615 15614 15619 + 5205 15616 5200 + 15620 15616 5205 + 15616 15620 15621 + 15621 15617 15616 + 15617 15621 15622 + 15622 15618 15617 + 15618 15622 15623 + 15623 15619 15618 + 5205 5210 15620 + 15620 5210 15624 + 15624 15625 15620 + 15621 15620 15625 + 15625 15626 15621 + 15622 15621 15626 + 15626 15627 15622 + 15623 15622 15627 + 5215 15624 5210 + 15628 15624 5215 + 15624 15628 15629 + 15629 15625 15624 + 15625 15629 15630 + 15630 15626 15625 + 15626 15630 15631 + 15631 15627 15626 + 5215 15632 15628 + 15628 15632 15633 + 15633 15634 15628 + 15629 15628 15634 + 15634 15635 15629 + 15630 15629 15635 + 15635 15636 15630 + 15631 15630 15636 + 15632 5215 5214 + 5214 15637 15632 + 15632 15637 15638 + 15638 15633 15632 + 15639 15633 15638 + 15633 15639 15640 + 15640 15634 15633 + 15634 15640 15641 + 15641 15635 15634 + 15637 5214 15642 + 15642 15643 15637 + 15638 15637 15643 + 15643 15644 15638 + 15645 15638 15644 + 15638 15645 15639 + 5213 15642 5214 + 5224 15642 5213 + 15643 15642 5224 + 5224 15646 15643 + 15643 15646 15647 + 15647 15644 15643 + 15648 15644 15647 + 15644 15648 15645 + 15649 15645 15648 + 15639 15645 15649 + 15646 5224 15650 + 15650 15651 15646 + 15647 15646 15651 + 15651 15652 15647 + 15653 15647 15652 + 15647 15653 15648 + 5223 15650 5224 + 15654 15650 5223 + 15651 15650 15654 + 15654 15655 15651 + 15651 15655 15656 + 15656 15652 15651 + 15657 15652 15656 + 15652 15657 15653 + 5223 5229 15654 + 15654 5229 15658 + 15658 15659 15654 + 15655 15654 15659 + 15659 15660 15655 + 15656 15655 15660 + 15660 15661 15656 + 15662 15656 15661 + 15656 15662 15657 + 5228 15658 5229 + 15658 5228 5234 + 5234 15663 15658 + 15658 15663 15664 + 15664 15659 15658 + 15660 15659 15664 + 15664 15665 15660 + 15660 15665 15666 + 15666 15661 15660 + 15667 15661 15666 + 15661 15667 15662 + 15663 5234 15668 + 15668 15669 15663 + 15664 15663 15669 + 15669 15670 15664 + 15665 15664 15670 + 15670 15671 15665 + 15666 15665 15671 + 15672 15668 5234 + 15673 15668 15672 + 15669 15668 15673 + 15673 15674 15669 + 15669 15674 15675 + 15675 15670 15669 + 15671 15670 15675 + 5234 5233 15672 + 5239 15672 5233 + 15672 5239 15676 + 15676 15677 15672 + 15672 15677 15673 + 15673 15677 15678 + 15678 15679 15673 + 15674 15673 15679 + 15679 15680 15674 + 15675 15674 15680 + 15676 5239 5238 + 5238 15681 15676 + 15676 15681 15682 + 15682 15683 15676 + 15677 15676 15683 + 15683 15678 15677 + 5243 15681 5238 + 15681 5243 15684 + 15684 15682 15681 + 15682 15684 15685 + 15685 15686 15682 + 15682 15686 15687 + 15687 15683 15682 + 15678 15683 15687 + 5248 15684 5243 + 15685 15684 5248 + 5248 15688 15685 + 15685 15688 15689 + 15689 15690 15685 + 15686 15685 15690 + 15690 15691 15686 + 15687 15686 15691 + 15688 5248 5247 + 5247 15692 15688 + 15688 15692 15693 + 15693 15689 15688 + 15694 15689 15693 + 15689 15694 15695 + 15695 15690 15689 + 15691 15690 15695 + 15692 5247 15696 + 15696 15697 15692 + 15692 15697 15698 + 15698 15693 15692 + 15699 15693 15698 + 15693 15699 15694 + 5252 15696 5247 + 15700 15696 5252 + 15697 15696 15700 + 15700 15701 15697 + 15697 15701 15702 + 15702 15698 15697 + 15703 15698 15702 + 15698 15703 15699 + 5252 5251 15700 + 15704 15700 5251 + 15701 15700 15704 + 15704 15705 15701 + 15701 15705 15706 + 15706 15702 15701 + 15707 15702 15706 + 15702 15707 15703 + 5251 5260 15704 + 15708 15704 5260 + 15704 15708 15709 + 15709 15705 15704 + 15705 15709 15710 + 15710 15706 15705 + 15706 15710 15711 + 15711 15712 15706 + 15706 15712 15707 + 5260 5259 15708 + 15708 5259 15713 + 15713 15714 15708 + 15709 15708 15714 + 15714 15715 15709 + 15710 15709 15715 + 15715 15716 15710 + 15711 15710 15716 + 5264 15713 5259 + 15717 15713 5264 + 15713 15717 15718 + 15718 15714 15713 + 15714 15718 15719 + 15719 15715 15714 + 15715 15719 15720 + 15720 15716 15715 + 5264 5268 15717 + 15717 5268 15721 + 15721 15722 15717 + 15722 15718 15717 + 15719 15718 15722 + 15722 15723 15719 + 15719 15723 15724 + 15720 15719 15724 + 5272 15721 5268 + 15723 15721 5272 + 15722 15721 15723 + 5272 15724 15723 + 5276 15724 5272 + 15724 5276 15725 + 15725 15726 15724 + 15724 15726 15720 + 15727 15720 15726 + 15716 15720 15727 + 15727 15728 15716 + 15716 15728 15711 + 15729 15711 15728 + 15712 15711 15729 + 15725 5276 5275 + 15730 15725 5275 + 15731 15725 15730 + 15731 15726 15725 + 15726 15731 15727 + 15731 15732 15727 + 15728 15727 15732 + 15732 15733 15728 + 15728 15733 15729 + 5275 5285 15730 + 15734 15730 5285 + 15730 15734 15733 + 15733 15732 15730 + 15730 15732 15731 + 5285 5284 15734 + 15734 5284 15735 + 15735 15736 15734 + 15733 15734 15736 + 15736 15729 15733 + 15729 15736 15737 + 15737 15738 15729 + 15729 15738 15712 + 15707 15712 15738 + 15739 15735 5284 + 15735 15739 15740 + 15740 15741 15735 + 15735 15741 15737 + 15737 15736 15735 + 5284 5283 15739 + 5290 15739 5283 + 15740 15739 5290 + 5290 5320 15740 + 15742 15740 5320 + 15741 15740 15742 + 15742 15743 15741 + 15741 15743 15744 + 15744 15737 15741 + 15738 15737 15744 + 15744 15745 15738 + 15738 15745 15707 + 15703 15707 15745 + 5320 5325 15742 + 15746 15742 5325 + 15743 15742 15746 + 15746 15747 15743 + 15743 15747 15748 + 15748 15744 15743 + 15745 15744 15748 + 15748 15749 15745 + 15745 15749 15703 + 15699 15703 15749 + 5325 5324 15746 + 15750 15746 5324 + 15747 15746 15750 + 15750 15751 15747 + 15747 15751 15752 + 15752 15748 15747 + 15749 15748 15752 + 15752 15753 15749 + 15749 15753 15699 + 15694 15699 15753 + 5324 5330 15750 + 15754 15750 5330 + 15750 15754 15755 + 15755 15751 15750 + 15751 15755 15756 + 15756 15752 15751 + 15752 15756 15757 + 15757 15753 15752 + 15753 15757 15694 + 15695 15694 15757 + 5330 5329 15754 + 15758 15754 5329 + 15755 15754 15758 + 15758 15759 15755 + 15755 15759 15760 + 15760 15756 15755 + 15757 15756 15760 + 15760 15761 15757 + 15757 15761 15695 + 15762 15695 15761 + 15695 15762 15691 + 5329 15763 15758 + 15763 15764 15758 + 15765 15758 15764 + 15758 15765 15766 + 15766 15759 15758 + 15759 15766 15767 + 15767 15760 15759 + 5334 15763 5329 + 15768 15763 5334 + 15763 15768 15769 + 15769 15764 15763 + 15770 15764 15769 + 15764 15770 15765 + 15771 15765 15770 + 15766 15765 15771 + 5334 5339 15768 + 15768 5339 15772 + 15772 15773 15768 + 15768 15773 15774 + 15774 15769 15768 + 15775 15769 15774 + 15769 15775 15770 + 5344 15772 5339 + 6876 15772 5344 + 15773 15772 6876 + 6876 15776 15773 + 15773 15776 15777 + 15777 15774 15773 + 15778 15774 15777 + 15774 15778 15775 + 15775 15778 15779 + 15780 15775 15779 + 15770 15775 15780 + 15776 6876 6875 + 6875 15781 15776 + 15776 15781 15782 + 15782 15777 15776 + 15778 15777 15782 + 15782 15779 15778 + 15783 15779 15782 + 15779 15783 15784 + 15784 15785 15779 + 15779 15785 15780 + 6880 15781 6875 + 15781 6880 6889 + 6889 15782 15781 + 15782 6889 15783 + 15783 6889 6888 + 6888 6894 15783 + 15783 6894 15786 + 15786 15784 15783 + 15787 15784 15786 + 15784 15787 15788 + 15788 15785 15784 + 15785 15788 15789 + 15789 15780 15785 + 15790 15786 6894 + 15791 15786 15790 + 15786 15791 15787 + 15792 15787 15791 + 15788 15787 15792 + 15792 15793 15788 + 15788 15793 15794 + 15794 15789 15788 + 6894 6893 15790 + 15790 6893 6899 + 6899 6917 15790 + 15795 15790 6917 + 15790 15795 15791 + 15791 15795 15796 + 15796 15797 15791 + 15791 15797 15792 + 15798 15792 15797 + 15792 15798 15799 + 15799 15793 15792 + 6917 6916 15795 + 15796 15795 6916 + 6916 15800 15796 + 15801 15796 15800 + 15796 15801 15802 + 15802 15797 15796 + 15797 15802 15798 + 15803 15798 15802 + 15799 15798 15803 + 6915 15800 6916 + 6926 15800 6915 + 15800 6926 15801 + 15804 15801 6926 + 15802 15801 15804 + 15804 15805 15802 + 15802 15805 15803 + 15806 15803 15805 + 15803 15806 15807 + 15807 15808 15803 + 15803 15808 15799 + 6926 15809 15804 + 15810 15804 15809 + 15804 15810 15811 + 15811 15805 15804 + 15805 15811 15806 + 15812 15806 15811 + 15807 15806 15812 + 6925 15809 6926 + 15813 15809 6925 + 15809 15813 15810 + 15814 15810 15813 + 15811 15810 15814 + 15814 15815 15811 + 15811 15815 15812 + 6925 15816 15813 + 15813 15816 15817 + 15817 15818 15813 + 15813 15818 15814 + 15819 15814 15818 + 15814 15819 15820 + 15820 15815 15814 + 15816 6925 6924 + 6924 6931 15816 + 15817 15816 6931 + 6931 15821 15817 + 15822 15817 15821 + 15817 15822 15823 + 15823 15818 15817 + 15818 15823 15819 + 15819 15823 15824 + 15824 15825 15819 + 15820 15819 15825 + 6935 15821 6931 + 15826 15821 6935 + 15821 15826 15822 + 15822 15826 15827 + 15827 15828 15822 + 15823 15822 15828 + 15828 15824 15823 + 15824 15828 15829 + 15824 15829 15830 + 15830 15825 15824 + 6935 15831 15826 + 15826 15831 15832 + 15832 15827 15826 + 15827 15832 15833 + 15833 15834 15827 + 15827 15834 15829 + 15829 15828 15827 + 15831 6935 6938 + 6938 6943 15831 + 15831 6943 6952 + 6952 15832 15831 + 15833 15832 6952 + 6952 15835 15833 + 15836 15833 15835 + 15834 15833 15836 + 15836 15837 15834 + 15834 15837 15838 + 15829 15834 15838 + 15838 15830 15829 + 6951 15835 6952 + 15835 6951 15839 + 15839 15840 15835 + 15835 15840 15836 + 15841 15836 15840 + 15836 15841 15837 + 15837 15841 15842 + 15842 15838 15837 + 15839 6951 6957 + 6957 15843 15839 + 15844 15839 15843 + 15840 15839 15844 + 15844 15845 15840 + 15840 15845 15841 + 15841 15845 15846 + 15846 15842 15841 + 6962 15843 6957 + 6962 15847 15843 + 15843 15847 15844 + 15848 15844 15847 + 15845 15844 15848 + 15848 15849 15845 + 15845 15849 15846 + 15847 6962 15850 + 15850 15851 15847 + 15847 15851 15848 + 15851 15852 15848 + 15853 15848 15852 + 15849 15848 15853 + 6961 15850 6962 + 6967 15850 6961 + 15850 6967 15854 + 15854 15851 15850 + 15851 15854 15855 + 15855 15852 15851 + 15852 15855 15856 + 15856 15857 15852 + 15852 15857 15853 + 15854 6967 6972 + 6972 15858 15854 + 15855 15854 15858 + 15858 15859 15855 + 15856 15855 15859 + 15860 15858 6972 + 15858 15860 15861 + 15861 15859 15858 + 15861 15862 15859 + 15859 15862 15856 + 6972 6971 15860 + 15860 6971 6977 + 6977 15863 15860 + 15861 15860 15863 + 15863 15864 15861 + 15862 15861 15864 + 15864 15865 15862 + 15856 15862 15865 + 15865 15866 15856 + 15866 15867 15856 + 15857 15856 15867 + 15868 15863 6977 + 15863 15868 15869 + 15869 15864 15863 + 15864 15869 15870 + 15870 15865 15864 + 15865 15870 15871 + 15871 15866 15865 + 6977 6976 15868 + 15868 6976 6989 + 6989 15872 15868 + 15869 15868 15872 + 15872 15873 15869 + 15870 15869 15873 + 15873 15874 15870 + 15870 15874 15875 + 15875 15871 15870 + 15876 15871 15875 + 15866 15871 15876 + 15877 15872 6989 + 15872 15877 15878 + 15878 15873 15872 + 15873 15878 15879 + 15879 15874 15873 + 15874 15879 15880 + 15880 15875 15874 + 6989 6988 15877 + 15877 6988 15881 + 15881 15882 15877 + 15878 15877 15882 + 15882 15883 15878 + 15879 15878 15883 + 15883 15884 15879 + 15879 15884 15885 + 15885 15880 15879 + 6997 15881 6988 + 7006 15881 6997 + 15881 7006 15886 + 15886 15882 15881 + 15882 15886 15887 + 15887 15883 15882 + 15883 15887 15888 + 15888 15884 15883 + 15884 15888 15889 + 15889 15885 15884 + 15886 7006 15890 + 15890 15891 15886 + 15887 15886 15891 + 15891 15892 15887 + 15888 15887 15892 + 15892 15893 15888 + 15888 15893 15894 + 15894 15889 15888 + 7015 15890 7006 + 15895 15890 7015 + 15890 15895 15896 + 15896 15891 15890 + 15891 15896 15897 + 15897 15892 15891 + 15893 15892 15897 + 15897 15898 15893 + 15893 15898 15899 + 15899 15894 15893 + 7015 7020 15895 + 15895 7020 15900 + 15900 15901 15895 + 15896 15895 15901 + 15901 15902 15896 + 15896 15902 15903 + 15903 15897 15896 + 15898 15897 15903 + 15903 15904 15898 + 15899 15898 15904 + 7025 15900 7020 + 15905 15900 7025 + 15900 15905 15906 + 15906 15901 15900 + 15901 15906 15907 + 15907 15902 15901 + 15902 15907 15908 + 15908 15903 15902 + 15903 15908 15909 + 15909 15904 15903 + 7025 15910 15905 + 15905 15910 15911 + 15911 15912 15905 + 15906 15905 15912 + 15912 15913 15906 + 15907 15906 15913 + 15913 15914 15907 + 15908 15907 15914 + 15910 7025 7024 + 7024 15915 15910 + 15910 15915 15916 + 15916 15911 15910 + 15917 15911 15916 + 15911 15917 15918 + 15918 15912 15911 + 15912 15918 15919 + 15919 15913 15912 + 7029 15915 7024 + 15915 7029 15920 + 15920 15916 15915 + 15916 15920 15921 + 15921 15922 15916 + 15916 15922 15917 + 15917 15922 15923 + 15923 15924 15917 + 15918 15917 15924 + 7034 15920 7029 + 15921 15920 7034 + 7034 15925 15921 + 15921 15925 15926 + 15926 15927 15921 + 15922 15921 15927 + 15927 15923 15922 + 15928 15925 7034 + 15925 15928 15929 + 15929 15926 15925 + 15926 15929 15930 + 15930 15931 15926 + 15926 15931 15932 + 15932 15927 15926 + 15923 15927 15932 + 7034 7033 15928 + 15928 7033 7032 + 7032 15933 15928 + 15928 15933 15934 + 15934 15929 15928 + 15930 15929 15934 + 15934 15935 15930 + 15930 15935 15936 + 15936 15937 15930 + 15931 15930 15937 + 7041 15933 7032 + 15933 7041 15938 + 15938 15934 15933 + 15934 15938 15939 + 15939 15935 15934 + 15935 15939 15940 + 15940 15936 15935 + 7045 15938 7041 + 15939 15938 7045 + 7045 15941 15939 + 15939 15941 15942 + 15942 15940 15939 + 15943 15940 15942 + 15936 15940 15943 + 15943 15944 15936 + 15936 15944 15945 + 15945 15937 15936 + 7049 15941 7045 + 15941 7049 15946 + 15946 15942 15941 + 15942 15946 15947 + 15947 15948 15942 + 15942 15948 15943 + 15943 15948 15949 + 15949 15950 15943 + 15944 15943 15950 + 7054 15946 7049 + 15947 15946 7054 + 7054 15951 15947 + 15947 15951 15952 + 15952 15953 15947 + 15948 15947 15953 + 15953 15949 15948 + 7058 15951 7054 + 15951 7058 15954 + 15954 15952 15951 + 15952 15954 15955 + 15955 15956 15952 + 15952 15956 15957 + 15957 15953 15952 + 15949 15953 15957 + 7062 15954 7058 + 15955 15954 7062 + 7062 7066 15955 + 15955 7066 15958 + 15958 15959 15955 + 15956 15955 15959 + 15959 15960 15956 + 15957 15956 15960 + 15960 15961 15957 + 15962 15957 15961 + 15957 15962 15949 + 7070 15958 7066 + 15963 15958 7070 + 15958 15963 15964 + 15964 15959 15958 + 15960 15959 15964 + 15964 15965 15960 + 15960 15965 15966 + 15966 15961 15960 + 15967 15961 15966 + 15961 15967 15962 + 7070 7074 15963 + 15963 7074 15968 + 15968 15969 15963 + 15964 15963 15969 + 15969 15970 15964 + 15965 15964 15970 + 15970 15971 15965 + 15966 15965 15971 + 7079 15968 7074 + 15972 15968 7079 + 15968 15972 15973 + 15973 15969 15968 + 15969 15973 15974 + 15974 15970 15969 + 15971 15970 15974 + 7079 15975 15972 + 15972 15975 15976 + 15976 15977 15972 + 15973 15972 15977 + 15977 15978 15973 + 15974 15973 15978 + 15975 7079 7078 + 7078 7088 15975 + 15975 7088 15979 + 15979 15976 15975 + 15976 15979 15980 + 15980 15981 15976 + 15976 15981 15982 + 15982 15977 15976 + 15977 15982 15983 + 15983 15978 15977 + 15984 15979 7088 + 15980 15979 15984 + 15984 15985 15980 + 15986 15980 15985 + 15981 15980 15986 + 15986 15987 15981 + 15981 15987 15988 + 15988 15982 15981 + 15983 15982 15988 + 7088 7087 15984 + 15989 15984 7087 + 15984 15989 15990 + 15990 15985 15984 + 15985 15990 15991 + 15991 15992 15985 + 15985 15992 15986 + 7087 7092 15989 + 15993 15989 7092 + 15990 15989 15993 + 15993 15994 15990 + 15991 15990 15994 + 15994 15995 15991 + 15996 15991 15995 + 15991 15996 15997 + 15997 15992 15991 + 7092 7096 15993 + 15998 15993 7096 + 15993 15998 15999 + 15999 15994 15993 + 15994 15999 16000 + 16000 15995 15994 + 16001 15995 16000 + 15995 16001 15996 + 7096 7100 15998 + 16002 15998 7100 + 15999 15998 16002 + 16002 16003 15999 + 15999 16003 16004 + 16000 15999 16004 + 16004 16005 16000 + 16006 16000 16005 + 16000 16006 16001 + 7100 7104 16002 + 16007 16002 7104 + 16002 16007 16008 + 16008 16003 16002 + 16003 16008 16009 + 16009 16004 16003 + 16010 16004 16009 + 16004 16010 16011 + 16011 16005 16004 + 7104 7108 16007 + 16012 16007 7108 + 16008 16007 16012 + 16012 16013 16008 + 16009 16008 16013 + 7108 7112 16012 + 16014 16012 7112 + 16012 16014 16013 + 16013 16014 7171 + 7171 16015 16013 + 16013 16015 16009 + 7112 7116 16014 + 7171 16014 7116 + 7170 16015 7171 + 16015 7170 7176 + 7176 16016 16015 + 16015 16016 16009 + 16016 16017 16009 + 16018 16009 16017 + 16009 16018 16010 + 16016 7176 16019 + 16019 16020 16016 + 16016 16020 16021 + 16021 16017 16016 + 16021 16022 16017 + 16017 16022 16018 + 16019 7176 7175 + 7175 16023 16019 + 16019 16023 16024 + 16024 16025 16019 + 16020 16019 16025 + 16025 16026 16020 + 16021 16020 16026 + 16026 16027 16021 + 16022 16021 16027 + 7174 16023 7175 + 16023 7174 16028 + 16028 16024 16023 + 16029 16024 16028 + 16024 16029 16030 + 16030 16025 16024 + 16025 16030 16031 + 16031 16026 16025 + 16026 16031 16032 + 16032 16027 16026 + 7180 16028 7174 + 7189 16028 7180 + 16028 7189 16029 + 16029 7189 16033 + 16033 16034 16029 + 16030 16029 16034 + 16034 16035 16030 + 16031 16030 16035 + 16035 16036 16031 + 16032 16031 16036 + 7188 16033 7189 + 16037 16033 7188 + 16033 16037 16038 + 16038 16034 16033 + 16034 16038 16039 + 16039 16035 16034 + 16035 16039 16040 + 16040 16036 16035 + 7188 7193 16037 + 16037 7193 16041 + 16041 16042 16037 + 16038 16037 16042 + 16042 16043 16038 + 16039 16038 16043 + 16043 16044 16039 + 16040 16039 16044 + 7197 16041 7193 + 16045 16041 7197 + 16041 16045 16046 + 16046 16042 16041 + 16042 16046 16047 + 16047 16043 16042 + 16043 16047 16048 + 16048 16044 16043 + 7197 7201 16045 + 16045 7201 16049 + 16049 16050 16045 + 16046 16045 16050 + 16050 16051 16046 + 16047 16046 16051 + 16051 16052 16047 + 16048 16047 16052 + 7205 16049 7201 + 16053 16049 7205 + 16049 16053 16054 + 16054 16050 16049 + 16050 16054 16055 + 16055 16051 16050 + 16051 16055 16056 + 16056 16052 16051 + 7205 7210 16053 + 16053 7210 16057 + 16057 16058 16053 + 16054 16053 16058 + 16058 16059 16054 + 16055 16054 16059 + 16059 16060 16055 + 16056 16055 16060 + 7214 16057 7210 + 16057 7214 7219 + 7219 16061 16057 + 16057 16061 16062 + 16062 16058 16057 + 16058 16062 16063 + 16063 16059 16058 + 16059 16063 16064 + 16064 16060 16059 + 16061 7219 16065 + 16065 16066 16061 + 16062 16061 16066 + 16066 16067 16062 + 16063 16062 16067 + 16067 16068 16063 + 16064 16063 16068 + 16069 16065 7219 + 16070 16065 16069 + 16066 16065 16070 + 16067 16066 16070 + 16071 16067 16070 + 16067 16071 16068 + 16069 7219 7224 + 7224 16072 16069 + 16073 16069 16072 + 16074 16069 16073 + 16069 16074 16070 + 16071 16070 16074 + 16074 16075 16071 + 16076 16071 16075 + 16071 16076 16068 + 16077 16072 7224 + 16078 16072 16077 + 16072 16078 16073 + 16073 16078 16079 + 16079 16080 16073 + 16074 16073 16080 + 16080 16075 16074 + 7224 16081 16077 + 16077 16081 16082 + 16082 16083 16077 + 16084 16077 16083 + 16077 16084 16078 + 16078 16084 16085 + 16085 16079 16078 + 7234 16081 7224 + 16081 7234 16086 + 16086 16082 16081 + 16087 16082 16086 + 16082 16087 16088 + 16088 16083 16082 + 16083 16088 16089 + 16089 16090 16083 + 16083 16090 16084 + 7238 16086 7234 + 16091 16086 7238 + 16086 16091 16087 + 16087 16091 16092 + 16092 16093 16087 + 16087 16093 16094 + 16094 16088 16087 + 16089 16088 16094 + 7238 7243 16091 + 16092 16091 7243 + 7243 16095 16092 + 16096 16092 16095 + 16092 16096 16097 + 16097 16093 16092 + 16093 16097 16098 + 16098 16094 16093 + 13817 16095 7243 + 13826 16095 13817 + 16095 13826 16096 + 16099 16096 13826 + 16097 16096 16099 + 16099 16100 16097 + 16097 16100 16101 + 16101 16098 16097 + 16102 16098 16101 + 16094 16098 16102 + 16102 16103 16094 + 16094 16103 16089 + 13826 13825 16099 + 13831 16099 13825 + 16099 13831 16104 + 16104 16100 16099 + 16100 16104 16105 + 16105 16101 16100 + 16101 16105 16106 + 16106 16107 16101 + 16101 16107 16102 + 16104 13831 13830 + 13830 16108 16104 + 16104 16108 16109 + 16109 16105 16104 + 16106 16105 16109 + 16109 16110 16106 + 16106 16110 16111 + 16111 16112 16106 + 16107 16106 16112 + 13840 16108 13830 + 16108 13840 16113 + 16113 16109 16108 + 16109 16113 16114 + 16114 16110 16109 + 16110 16114 16115 + 16115 16111 16110 + 16116 16113 13840 + 16114 16113 16116 + 16116 16117 16114 + 16114 16117 16118 + 16118 16115 16114 + 16119 16115 16118 + 16111 16115 16119 + 13840 13845 16116 + 16120 16116 13845 + 16120 16117 16116 + 16117 16120 16121 + 16121 16118 16117 + 16122 16118 16121 + 16118 16122 16119 + 13845 16123 16120 + 16120 16123 16124 + 16121 16120 16124 + 16124 16125 16121 + 16126 16121 16125 + 16121 16126 16122 + 13844 16123 13845 + 16123 13844 13850 + 13850 16124 16123 + 16124 13850 16127 + 16127 16128 16124 + 16124 16128 16129 + 16129 16125 16124 + 16130 16125 16129 + 16125 16130 16126 + 16131 16126 16130 + 16122 16126 16131 + 16127 13850 13849 + 13849 16132 16127 + 16127 16132 16133 + 16133 16134 16127 + 16128 16127 16134 + 16134 16135 16128 + 16128 16135 16136 + 16136 16129 16128 + 13855 16132 13849 + 16132 13855 16137 + 16137 16133 16132 + 16138 16133 16137 + 16133 16138 16139 + 16139 16134 16133 + 16134 16139 16140 + 16140 16135 16134 + 16135 16140 16141 + 16141 16136 16135 + 16137 13855 13860 + 13860 16142 16137 + 16143 16137 16142 + 16137 16143 16138 + 16138 16143 16144 + 16144 16145 16138 + 16138 16145 16146 + 16146 16139 16138 + 16140 16139 16146 + 13859 16142 13860 + 16147 16142 13859 + 16142 16147 16143 + 16144 16143 16147 + 16147 16148 16144 + 16149 16144 16148 + 16144 16149 16150 + 16150 16145 16144 + 16145 16150 16151 + 16151 16146 16145 + 13859 16152 16147 + 16147 16152 16153 + 16153 16148 16147 + 16154 16148 16153 + 16148 16154 16149 + 16155 16149 16154 + 16150 16149 16155 + 16152 13859 13858 + 13858 13865 16152 + 16153 16152 13865 + 13865 16156 16153 + 16157 16153 16156 + 16153 16157 16154 + 16154 16157 16158 + 16158 16159 16154 + 16154 16159 16155 + 16160 16156 13865 + 16161 16156 16160 + 16156 16161 16157 + 16158 16157 16161 + 16161 16162 16158 + 16163 16158 16162 + 16158 16163 16164 + 16164 16159 16158 + 13865 13864 16160 + 16160 13864 13870 + 13870 16165 16160 + 16166 16160 16165 + 16160 16166 16161 + 16161 16166 16167 + 16167 16162 16161 + 16168 16162 16167 + 16162 16168 16163 + 16169 16163 16168 + 16164 16163 16169 + 13874 16165 13870 + 16170 16165 13874 + 16165 16170 16166 + 16167 16166 16170 + 16170 16171 16167 + 16172 16167 16171 + 16167 16172 16168 + 16168 16172 16173 + 16173 16174 16168 + 16168 16174 16169 + 13874 16175 16170 + 16170 16175 14011 + 14011 16171 16170 + 14015 16171 14011 + 16171 14015 16172 + 16173 16172 14015 + 16175 13874 13879 + 13879 13884 16175 + 14011 16175 13884 + 14015 16176 16173 + 14014 16176 14015 + 14020 16176 14014 + 16176 14020 16177 + 16177 16173 16176 + 16173 16177 16178 + 16178 16174 16173 + 16174 16178 16179 + 16179 16169 16174 + 16169 16179 16180 + 16180 16181 16169 + 16169 16181 16164 + 16177 14020 16182 + 16182 16183 16177 + 16178 16177 16183 + 16183 16184 16178 + 16179 16178 16184 + 16184 16185 16179 + 16180 16179 16185 + 14019 16182 14020 + 14019 14025 16182 + 16182 14025 16186 + 16186 16183 16182 + 16183 16186 16187 + 16187 16184 16183 + 16184 16187 16188 + 16188 16185 16184 + 16185 16188 16189 + 16185 16189 16180 + 16190 16180 16189 + 16181 16180 16190 + 16186 14025 14034 + 14034 16191 16186 + 16187 16186 16191 + 16191 16192 16187 + 16187 16192 16193 + 16188 16187 16193 + 16193 16194 16188 + 16189 16188 16194 + 16194 16195 16189 + 16189 16195 16190 + 16196 16191 14034 + 16196 16192 16191 + 16192 16196 16197 + 16197 16193 16192 + 16198 16193 16197 + 16193 16198 16199 + 16199 16194 16193 + 16195 16194 16199 + 14034 14039 16196 + 16196 14039 14038 + 16197 16196 14038 + 14038 16200 16197 + 16201 16197 16200 + 16197 16201 16198 + 16198 16201 16202 + 16202 16203 16198 + 16199 16198 16203 + 14044 16200 14038 + 16204 16200 14044 + 16200 16204 16201 + 16202 16201 16204 + 16204 16205 16202 + 16206 16202 16205 + 16202 16206 16207 + 16207 16203 16202 + 16204 14044 16208 + 16208 16205 16204 + 16205 16208 14053 + 14053 16209 16205 + 16205 16209 16206 + 16210 16206 16209 + 16207 16206 16210 + 14043 16208 14044 + 14053 16208 14043 + 16209 14053 14052 + 14052 16211 16209 + 16209 16211 16210 + 16212 16210 16211 + 16212 16213 16210 + 16210 16213 16207 + 16207 16213 16214 + 16215 16207 16214 + 16203 16207 16215 + 14057 16211 14052 + 16211 14057 16212 + 14066 16212 14057 + 16213 16212 14066 + 14066 16214 16213 + 14074 16214 14066 + 16214 14074 16216 + 16216 16217 16214 + 16214 16217 16215 + 16218 16215 16217 + 16215 16218 16219 + 16219 16220 16215 + 16215 16220 16203 + 16216 14074 14073 + 14073 16221 16216 + 16222 16216 16221 + 16216 16222 16223 + 16223 16217 16216 + 16217 16223 16218 + 16224 16218 16223 + 16219 16218 16224 + 14079 16221 14073 + 16225 16221 14079 + 16221 16225 16222 + 16226 16222 16225 + 16223 16222 16226 + 16226 16227 16223 + 16223 16227 16224 + 14079 16228 16225 + 16225 16228 16229 + 16229 16230 16225 + 16225 16230 16226 + 16231 16226 16230 + 16226 16231 16232 + 16232 16227 16226 + 16228 14079 16233 + 16233 16234 16228 + 16229 16228 16234 + 16234 16235 16229 + 16236 16229 16235 + 16229 16236 16237 + 16237 16230 16229 + 16230 16237 16231 + 14078 16233 14079 + 16238 16233 14078 + 16234 16233 16238 + 16238 16239 16234 + 16234 16239 16240 + 16240 16235 16234 + 16241 16235 16240 + 16235 16241 16236 + 16242 16236 16241 + 16237 16236 16242 + 14078 14077 16238 + 16238 14077 16243 + 16243 16244 16238 + 16239 16238 16244 + 16244 16245 16239 + 16240 16239 16245 + 16245 16246 16240 + 16247 16240 16246 + 16240 16247 16241 + 14083 16243 14077 + 16248 16243 14083 + 16243 16248 16249 + 16249 16244 16243 + 16245 16244 16249 + 16249 16250 16245 + 16245 16250 16251 + 16251 16246 16245 + 16252 16246 16251 + 16246 16252 16247 + 14083 16253 16248 + 16248 16253 16254 + 16254 16255 16248 + 16249 16248 16255 + 16255 16256 16249 + 16250 16249 16256 + 16256 16257 16250 + 16251 16250 16257 + 16253 14083 16258 + 16258 16259 16253 + 16254 16253 16259 + 14082 16258 14083 + 16260 16258 14082 + 16259 16258 16260 + 16259 16260 16261 + 16261 16262 16259 + 16259 16262 16254 + 14082 16263 16260 + 16261 16260 16263 + 16263 16264 16261 + 16265 16261 16264 + 16262 16261 16265 + 16262 16265 16266 + 16266 16267 16262 + 16262 16267 16254 + 14082 14086 16263 + 16263 14086 16268 + 16268 16264 16263 + 16264 16268 16269 + 16264 16269 16265 + 16265 16269 16270 + 16266 16265 16270 + 16271 16266 16270 + 16272 16266 16271 + 16272 16267 16266 + 14093 16268 14086 + 16269 16268 14093 + 14093 16273 16269 + 16269 16273 16270 + 14093 14092 16273 + 16273 14092 14091 + 14091 16270 16273 + 16270 14091 16274 + 16270 16274 16275 + 16275 16276 16270 + 16270 16276 16277 + 16277 16271 16270 + 16274 14091 14100 + 14100 16278 16274 + 16274 16278 16279 + 16279 16275 16274 + 16280 16275 16279 + 16275 16280 16276 + 16276 16280 16281 + 16281 16277 16276 + 16282 16278 14100 + 16278 16282 16283 + 16283 16279 16278 + 16279 16283 16284 + 16284 16285 16279 + 16279 16285 16280 + 16281 16280 16285 + 14100 14099 16282 + 16282 14099 16286 + 16286 16287 16282 + 16283 16282 16287 + 16287 16288 16283 + 16284 16283 16288 + 16288 16289 16284 + 16290 16284 16289 + 16285 16284 16290 + 16291 16286 14099 + 16292 16286 16291 + 16286 16292 16293 + 16293 16287 16286 + 16287 16293 16294 + 16294 16288 16287 + 16288 16294 16295 + 16295 16289 16288 + 14099 14098 16291 + 16296 16291 14098 + 16297 16291 16296 + 16291 16297 16292 + 16292 16297 16298 + 16298 16299 16292 + 16293 16292 16299 + 16299 16300 16293 + 16294 16293 16300 + 14098 14097 16296 + 16301 16296 14097 + 16302 16296 16301 + 16296 16302 16297 + 16297 16302 16303 + 16303 16298 16297 + 16304 16298 16303 + 16298 16304 16305 + 16305 16299 16298 + 14097 14104 16301 + 15105 16301 14104 + 16306 16301 15105 + 16301 16306 16302 + 16302 16306 16307 + 16307 16303 16302 + 16308 16303 16307 + 16303 16308 16304 + 16304 16308 16309 + 16309 16310 16304 + 16305 16304 16310 + 15105 15110 16306 + 16306 15110 16311 + 16311 16307 16306 + 16312 16307 16311 + 16307 16312 16308 + 16308 16312 16313 + 16313 16309 16308 + 16314 16309 16313 + 16309 16314 16315 + 16315 16310 16309 + 16316 16311 15110 + 16317 16311 16316 + 16311 16317 16312 + 16312 16317 16318 + 16318 16313 16312 + 16319 16313 16318 + 16313 16319 16314 + 15110 15109 16316 + 16320 16316 15109 + 16321 16316 16320 + 16316 16321 16317 + 16317 16321 16322 + 16322 16318 16317 + 16323 16318 16322 + 16318 16323 16319 + 15109 15115 16320 + 16324 16320 15115 + 16325 16320 16324 + 16320 16325 16321 + 16321 16325 16326 + 16326 16322 16321 + 16327 16322 16326 + 16322 16327 16323 + 15115 15120 16324 + 16328 16324 15120 + 16329 16324 16328 + 16324 16329 16325 + 16325 16329 16330 + 16330 16326 16325 + 16331 16326 16330 + 16326 16331 16327 + 15120 16332 16328 + 16333 16328 16332 + 16334 16328 16333 + 16328 16334 16329 + 16329 16334 16335 + 16335 16330 16329 + 16336 16330 16335 + 16330 16336 16331 + 15119 16332 15120 + 16332 15119 15125 + 15125 16337 16332 + 16332 16337 16333 + 16338 16333 16337 + 16339 16333 16338 + 16333 16339 16334 + 16334 16339 16340 + 16340 16335 16334 + 16341 16335 16340 + 16335 16341 16336 + 16337 15125 15130 + 15130 16342 16337 + 16337 16342 16338 + 16343 16338 16342 + 16344 16338 16343 + 16338 16344 16339 + 16339 16344 16345 + 16345 16340 16339 + 16346 16340 16345 + 16340 16346 16341 + 16342 15130 15140 + 15140 16347 16342 + 16342 16347 16343 + 16348 16343 16347 + 16349 16343 16348 + 16343 16349 16344 + 16344 16349 16350 + 16350 16345 16344 + 16351 16345 16350 + 16345 16351 16346 + 16347 15140 15144 + 15144 16352 16347 + 16347 16352 16348 + 16353 16348 16352 + 16354 16348 16353 + 16348 16354 16349 + 16349 16354 16355 + 16355 16350 16349 + 16356 16350 16355 + 16350 16356 16351 + 16352 15144 15148 + 15148 15157 16352 + 16352 15157 16353 + 15162 16353 15157 + 16357 16353 15162 + 16353 16357 16354 + 16354 16357 16358 + 16358 16355 16354 + 16359 16355 16358 + 16355 16359 16356 + 16356 16359 16360 + 16360 16361 16356 + 16351 16356 16361 + 15162 15167 16357 + 16357 15167 16362 + 16362 16358 16357 + 16363 16358 16362 + 16358 16363 16359 + 16359 16363 16364 + 16364 16360 16359 + 16365 16360 16364 + 16360 16365 16366 + 16366 16361 16360 + 15172 16362 15167 + 16367 16362 15172 + 16362 16367 16363 + 16363 16367 16368 + 16368 16364 16363 + 16369 16364 16368 + 16364 16369 16365 + 16365 16369 16370 + 16370 16371 16365 + 16366 16365 16371 + 15172 15177 16367 + 16367 15177 16372 + 16372 16368 16367 + 16373 16368 16372 + 16368 16373 16369 + 16369 16373 16374 + 16374 16370 16369 + 15182 16372 15177 + 16375 16372 15182 + 16372 16375 16373 + 16373 16375 16376 + 16376 16374 16373 + 16377 16374 16376 + 16370 16374 16377 + 16377 16378 16370 + 16370 16378 16379 + 16379 16371 16370 + 15182 16380 16375 + 16375 16380 16381 + 16381 16376 16375 + 16376 16381 16382 + 16382 16383 16376 + 16376 16383 16377 + 16380 15182 15181 + 15181 15191 16380 + 16380 15191 16384 + 16384 16381 16380 + 16382 16381 16384 + 16384 16385 16382 + 16382 16385 16386 + 16386 16387 16382 + 16383 16382 16387 + 16387 16388 16383 + 16377 16383 16388 + 15196 16384 15191 + 16384 15196 16389 + 16389 16385 16384 + 16385 16389 16390 + 16390 16386 16385 + 16386 16390 16391 + 16391 16392 16386 + 16386 16392 16393 + 16393 16387 16386 + 16387 16393 16388 + 16389 15196 16394 + 16394 16395 16389 + 16389 16395 16396 + 16396 16390 16389 + 16391 16390 16396 + 15195 16394 15196 + 15205 16394 15195 + 16394 15205 16397 + 16397 16395 16394 + 16395 16397 16398 + 16398 16396 16395 + 16398 16399 16396 + 16396 16399 16391 + 16391 16399 16400 + 16400 16401 16391 + 16392 16391 16401 + 16397 15205 16402 + 16402 16403 16397 + 16397 16403 16404 + 16404 16398 16397 + 16399 16398 16404 + 16404 16405 16399 + 16399 16405 16400 + 15204 16402 15205 + 16406 16402 15204 + 16403 16402 16406 + 16403 16406 16407 + 16407 16408 16403 + 16403 16408 16404 + 16409 16404 16408 + 16404 16409 16410 + 16410 16405 16404 + 15204 15209 16406 + 16406 15209 15214 + 15214 16407 16406 + 16411 16407 15214 + 16407 16411 16412 + 16412 16408 16407 + 16408 16412 16409 + 16413 16409 16412 + 16410 16409 16413 + 15214 15219 16411 + 16411 15219 15224 + 15224 16414 16411 + 16412 16411 16414 + 16414 16415 16412 + 16412 16415 16413 + 16416 16413 16415 + 16413 16416 16417 + 16417 16418 16413 + 16413 16418 16410 + 16419 16414 15224 + 16414 16419 16420 + 16420 16415 16414 + 16415 16420 16416 + 16421 16416 16420 + 16417 16416 16421 + 15224 15229 16419 + 16419 15229 15234 + 15234 16422 16419 + 16420 16419 16422 + 16422 16423 16420 + 16420 16423 16421 + 16424 16422 15234 + 16423 16422 16424 + 16423 16424 16425 + 16425 16426 16423 + 16423 16426 16421 + 15234 16427 16424 + 16424 16427 16428 + 16428 16425 16424 + 16429 16425 16428 + 16425 16429 16430 + 16430 16426 16425 + 16426 16430 16431 + 16431 16421 16426 + 15233 16427 15234 + 16427 15233 15239 + 15239 16428 16427 + 16428 15239 16432 + 16432 16433 16428 + 16428 16433 16429 + 16429 16433 16434 + 16434 16435 16429 + 16430 16429 16435 + 16432 15239 15238 + 15238 15244 16432 + 16436 16432 15244 + 16433 16432 16436 + 16436 16434 16433 + 16434 16436 16437 + 16437 16438 16434 + 16434 16438 16439 + 16439 16435 16434 + 15244 15249 16436 + 16437 16436 15249 + 15249 16440 16437 + 16441 16437 16440 + 16438 16437 16441 + 16441 16442 16438 + 16439 16438 16442 + 16442 16443 16439 + 16444 16439 16443 + 16435 16439 16444 + 15248 16440 15249 + 16440 15248 16445 + 16445 16446 16440 + 16440 16446 16441 + 16447 16441 16446 + 16442 16441 16447 + 16447 16448 16442 + 16442 16448 16449 + 16449 16443 16442 + 16445 15248 15253 + 15253 16450 16445 + 16451 16445 16450 + 16446 16445 16451 + 16451 16452 16446 + 16446 16452 16447 + 16453 16447 16452 + 16448 16447 16453 + 16453 16454 16448 + 16449 16448 16454 + 15257 16450 15253 + 16450 15257 16455 + 16455 16456 16450 + 16450 16456 16451 + 16457 16451 16456 + 16452 16451 16457 + 16457 16458 16452 + 16452 16458 16453 + 16459 16453 16458 + 16454 16453 16459 + 16455 15257 15261 + 15261 16460 16455 + 16461 16455 16460 + 16456 16455 16461 + 16461 16462 16456 + 16456 16462 16457 + 16463 16457 16462 + 16458 16457 16463 + 16463 16464 16458 + 16458 16464 16459 + 15266 16460 15261 + 16460 15266 16465 + 16465 16466 16460 + 16460 16466 16461 + 16467 16461 16466 + 16462 16461 16467 + 16467 16468 16462 + 16462 16468 16463 + 16469 16463 16468 + 16464 16463 16469 + 16465 15266 16470 + 16470 16471 16465 + 16472 16465 16471 + 16466 16465 16472 + 16472 16473 16466 + 16466 16473 16467 + 16474 16467 16473 + 16468 16467 16474 + 15265 16470 15266 + 15271 16470 15265 + 16470 15271 16475 + 16475 16471 16470 + 16471 16475 16476 + 16476 15611 16471 + 16471 15611 16472 + 15610 16472 15611 + 16473 16472 15610 + 15610 15615 16473 + 16473 15615 16474 + 16475 15271 16477 + 16477 16478 16475 + 16476 16475 16478 + 16478 15606 16476 + 15605 16476 15606 + 15611 16476 15605 + 15270 16477 15271 + 16477 15270 15269 + 15269 16479 16477 + 16477 16479 16480 + 16480 16478 16477 + 15606 16478 16480 + 16480 16481 15606 + 15606 16481 15601 + 15597 15601 16481 + 16479 15269 16482 + 16482 16483 16479 + 16480 16479 16483 + 16483 16484 16480 + 16481 16480 16484 + 16484 16485 16481 + 16481 16485 15597 + 16486 15597 16485 + 15597 16486 15591 + 15274 16482 15269 + 16487 16482 15274 + 16483 16482 16487 + 16487 16488 16483 + 16483 16488 16489 + 16489 16484 16483 + 16485 16484 16489 + 16489 16490 16485 + 16485 16490 16486 + 15274 16491 16487 + 16487 16491 16492 + 16492 16493 16487 + 16488 16487 16493 + 16493 16494 16488 + 16489 16488 16494 + 16494 16495 16489 + 16490 16489 16495 + 15277 16491 15274 + 16491 15277 16496 + 16496 16492 16491 + 16492 16496 16497 + 16497 16498 16492 + 16492 16498 16499 + 16499 16493 16492 + 16493 16499 16500 + 16500 16494 16493 + 15281 16496 15277 + 16497 16496 15281 + 15281 16501 16497 + 16502 16497 16501 + 16498 16497 16502 + 16502 16503 16498 + 16498 16503 16504 + 16504 16499 16498 + 16500 16499 16504 + 15285 16501 15281 + 16501 15285 15290 + 15290 16505 16501 + 16501 16505 16502 + 16506 16502 16505 + 16502 16506 16507 + 16507 16503 16502 + 16503 16507 16508 + 16508 16504 16503 + 16509 16505 15290 + 16505 16509 16506 + 16506 16509 16510 + 16511 16506 16510 + 16507 16506 16511 + 16511 16512 16507 + 16512 16508 16507 + 16513 16508 16512 + 16504 16508 16513 + 15290 16514 16509 + 16509 16514 16515 + 16515 16510 16509 + 16516 16510 16515 + 16510 16516 16517 + 16517 16518 16510 + 16510 16518 16511 + 16514 15290 15289 + 15289 16519 16514 + 16514 16519 16520 + 16520 16515 16514 + 16516 16515 16520 + 16520 16521 16516 + 16517 16516 16521 + 16519 15289 15288 + 15288 16522 16519 + 16519 16522 16523 + 16523 16524 16519 + 16519 16524 16520 + 16525 16520 16524 + 16520 16525 16526 + 16526 16521 16520 + 16522 15288 15294 + 15294 16527 16522 + 16522 16527 16528 + 16528 16523 16522 + 16529 16523 16528 + 16524 16523 16529 + 16529 16530 16524 + 16524 16530 16525 + 16527 15294 15293 + 15293 16531 16527 + 16527 16531 16532 + 16532 16528 16527 + 16528 16532 16533 + 16533 16534 16528 + 16528 16534 16529 + 16535 16529 16534 + 16530 16529 16535 + 16531 15293 15301 + 15301 16536 16531 + 16532 16531 16536 + 16536 16537 16532 + 16537 16538 16532 + 16533 16532 16538 + 16536 15301 15300 + 15300 16539 16536 + 16536 16539 16540 + 16540 16537 16536 + 16537 16540 16541 + 16541 16542 16537 + 16537 16542 16543 + 16543 16538 16537 + 16539 15300 15309 + 15309 16544 16539 + 16540 16539 16544 + 16544 16545 16540 + 16541 16540 16545 + 16545 16546 16541 + 16541 16546 16547 + 16547 16548 16541 + 16542 16541 16548 + 16544 15309 15308 + 15308 16549 16544 + 16544 16549 16550 + 16550 16545 16544 + 16545 16550 16551 + 16551 16546 16545 + 16546 16551 16552 + 16552 16547 16546 + 16549 15308 15317 + 15317 16553 16549 + 16550 16549 16553 + 16551 16550 16553 + 16553 16554 16551 + 16551 16554 16552 + 16555 16552 16554 + 16552 16555 16556 + 16556 16547 16552 + 16547 16556 16557 + 16557 16548 16547 + 16553 15317 15316 + 15316 16554 16553 + 16554 15316 16555 + 15321 16555 15316 + 16556 16555 15321 + 15321 15329 16556 + 16556 15329 16558 + 16558 16557 16556 + 16559 16557 16558 + 16548 16557 16559 + 16559 16560 16548 + 16548 16560 16542 + 16542 16560 16561 + 16561 16543 16542 + 15328 16558 15329 + 16558 15328 15334 + 15334 16562 16558 + 16558 16562 16559 + 16563 16559 16562 + 16560 16559 16563 + 16563 16561 16560 + 16561 16563 15551 + 15551 16564 16561 + 16561 16564 16565 + 16565 16543 16561 + 16543 16565 16538 + 16562 15334 15542 + 15542 15547 16562 + 16562 15547 16563 + 15551 16563 15547 + 16538 16565 16533 + 16533 16565 16564 + 16564 16566 16533 + 16534 16533 16566 + 16566 16567 16534 + 16534 16567 16535 + 16568 16566 16564 + 16566 16568 15560 + 15560 16567 16566 + 16567 15560 16569 + 16569 16535 16567 + 16535 16569 16570 + 16570 16571 16535 + 16535 16571 16530 + 16564 15551 16568 + 15550 16568 15551 + 15560 16568 15550 + 16525 16530 16571 + 16571 16572 16525 + 16526 16525 16572 + 16572 16573 16526 + 16526 16573 16574 + 16521 16526 16574 + 16575 16572 16571 + 16572 16575 15579 + 15579 16573 16572 + 16573 15579 16576 + 16576 16574 16573 + 16574 16576 16577 + 16577 16578 16574 + 16574 16578 16521 + 16571 16570 16575 + 15570 16575 16570 + 15579 16575 15570 + 16570 15565 15570 + 15559 15565 16570 + 16570 16569 15559 + 15559 16569 15560 + 15578 16576 15579 + 16577 16576 15578 + 15578 15583 16577 + 16577 15583 15588 + 15588 16579 16577 + 16578 16577 16579 + 16579 16580 16578 + 16521 16578 16580 + 16580 16517 16521 + 16581 16517 16580 + 16517 16581 16582 + 16582 16518 16517 + 16583 16579 15588 + 16580 16579 16583 + 16583 16584 16580 + 16580 16584 16581 + 16581 16584 16585 + 16585 16586 16581 + 16582 16581 16586 + 15588 15593 16583 + 16583 15593 16587 + 16587 16588 16583 + 16584 16583 16588 + 16588 16585 16584 + 16585 16588 16589 + 16589 16590 16585 + 16585 16590 16591 + 16591 16586 16585 + 15592 16587 15593 + 16587 15592 16592 + 16592 16593 16587 + 16587 16593 16589 + 16589 16588 16587 + 16592 15592 15591 + 15591 16486 16592 + 16594 16592 16486 + 16593 16592 16594 + 16594 16595 16593 + 16589 16593 16595 + 16595 16596 16589 + 16590 16589 16596 + 16596 16597 16590 + 16591 16590 16597 + 16598 16591 16597 + 16598 16586 16591 + 16586 16598 16582 + 16486 16490 16594 + 16495 16594 16490 + 16595 16594 16495 + 16495 16599 16595 + 16595 16599 16600 + 16600 16596 16595 + 16597 16596 16600 + 16600 16601 16597 + 16597 16601 16598 + 16582 16598 16601 + 16599 16495 16494 + 16494 16500 16599 + 16600 16599 16500 + 16500 16602 16600 + 16601 16600 16602 + 16602 16513 16601 + 16601 16513 16582 + 16513 16603 16582 + 16518 16582 16603 + 16603 16511 16518 + 16511 16603 16512 + 16504 16602 16500 + 16513 16602 16504 + 16512 16603 16513 + 15619 16474 15615 + 16604 16474 15619 + 16474 16604 16468 + 16468 16604 16469 + 16605 16469 16604 + 16606 16469 16605 + 16469 16606 16464 + 15619 15623 16604 + 16604 15623 16605 + 15627 16605 15623 + 16607 16605 15627 + 16605 16607 16606 + 16606 16607 16608 + 16608 16609 16606 + 16464 16606 16609 + 16609 16459 16464 + 16610 16459 16609 + 16459 16610 16454 + 15627 15631 16607 + 16607 15631 16611 + 16611 16608 16607 + 16612 16608 16611 + 16608 16612 16613 + 16613 16609 16608 + 16609 16613 16610 + 16614 16610 16613 + 16454 16610 16614 + 16614 16615 16454 + 16454 16615 16449 + 15636 16611 15631 + 16616 16611 15636 + 16611 16616 16612 + 16617 16612 16616 + 16613 16612 16617 + 16617 16618 16613 + 16613 16618 16614 + 16619 16614 16618 + 16615 16614 16619 + 15636 16620 16616 + 16616 16620 16621 + 16621 16622 16616 + 16616 16622 16617 + 16623 16617 16622 + 16618 16617 16623 + 16623 16624 16618 + 16618 16624 16619 + 16620 15636 15635 + 15635 15641 16620 + 16621 16620 15641 + 15641 16625 16621 + 16626 16621 16625 + 16622 16621 16626 + 16626 16627 16622 + 16622 16627 16623 + 16623 16627 16628 + 16628 16629 16623 + 16624 16623 16629 + 16630 16625 15641 + 16625 16630 16631 + 16631 16632 16625 + 16625 16632 16626 + 16626 16632 16633 + 16633 16634 16626 + 16627 16626 16634 + 16634 16628 16627 + 15641 15640 16630 + 16630 15640 15639 + 15639 16635 16630 + 16631 16630 16635 + 16635 16636 16631 + 16637 16631 16636 + 16632 16631 16637 + 16637 16633 16632 + 15649 16635 15639 + 16636 16635 15649 + 15649 16638 16636 + 16636 16638 16639 + 16639 16640 16636 + 16636 16640 16637 + 16641 16637 16640 + 16633 16637 16641 + 16638 15649 16642 + 16642 16643 16638 + 16639 16638 16643 + 16643 16644 16639 + 16645 16639 16644 + 16639 16645 16640 + 16640 16645 16641 + 15648 16642 15649 + 16646 16642 15648 + 16643 16642 16646 + 16646 16647 16643 + 16643 16647 16648 + 16648 16644 16643 + 16648 16649 16644 + 16644 16649 16645 + 16645 16649 16650 + 16650 16641 16645 + 15648 15653 16646 + 16651 16646 15653 + 16647 16646 16651 + 16651 16652 16647 + 16647 16652 16653 + 16653 16648 16647 + 16649 16648 16653 + 16653 16654 16649 + 16649 16654 16650 + 15653 15657 16651 + 16655 16651 15657 + 16651 16655 16656 + 16656 16652 16651 + 16652 16656 16657 + 16657 16653 16652 + 16653 16657 16658 + 16658 16654 16653 + 15657 15662 16655 + 16659 16655 15662 + 16656 16655 16659 + 16659 16660 16656 + 16657 16656 16660 + 16660 16661 16657 + 16658 16657 16661 + 15662 15667 16659 + 16662 16659 15667 + 16659 16662 16663 + 16663 16660 16659 + 16660 16663 16664 + 16664 16661 16660 + 16664 16665 16661 + 16661 16665 16658 + 15667 16666 16662 + 16667 16662 16666 + 16663 16662 16667 + 16667 16668 16663 + 16664 16663 16668 + 16668 16669 16664 + 16665 16664 16669 + 15666 16666 15667 + 16666 15666 16670 + 16670 16671 16666 + 16666 16671 16667 + 16672 16667 16671 + 16667 16672 16673 + 16673 16668 16667 + 16668 16673 16674 + 16674 16669 16668 + 15671 16670 15666 + 16675 16670 15671 + 16671 16670 16675 + 16675 16676 16671 + 16671 16676 16672 + 16677 16672 16676 + 16673 16672 16677 + 16677 16678 16673 + 16674 16673 16678 + 15671 16679 16675 + 16675 16679 16680 + 16680 16681 16675 + 16676 16675 16681 + 16681 16682 16676 + 16676 16682 16677 + 15675 16679 15671 + 16679 15675 16683 + 16683 16680 16679 + 16680 16683 16684 + 16684 16685 16680 + 16680 16685 16686 + 16686 16681 16680 + 16682 16681 16686 + 15680 16683 15675 + 16684 16683 15680 + 15680 16687 16684 + 16684 16687 16688 + 16688 16689 16684 + 16685 16684 16689 + 16689 16690 16685 + 16686 16685 16690 + 16691 16687 15680 + 16687 16691 16692 + 16692 16688 16687 + 16688 16692 16693 + 16693 16694 16688 + 16688 16694 16695 + 16695 16689 16688 + 16690 16689 16695 + 15680 15679 16691 + 16691 15679 15678 + 15678 16696 16691 + 16691 16696 16697 + 16697 16692 16691 + 16693 16692 16697 + 16697 16698 16693 + 16693 16698 16699 + 16699 16700 16693 + 16694 16693 16700 + 15687 16696 15678 + 16696 15687 16701 + 16701 16697 16696 + 16697 16701 16702 + 16702 16698 16697 + 16698 16702 16703 + 16703 16699 16698 + 15691 16701 15687 + 16702 16701 15691 + 15691 15762 16702 + 16702 15762 16704 + 16704 16703 16702 + 16705 16703 16704 + 16699 16703 16705 + 16705 16706 16699 + 16699 16706 16707 + 16707 16700 16699 + 16708 16700 16707 + 16700 16708 16694 + 16695 16694 16708 + 15761 16704 15762 + 16704 15761 15760 + 15760 15767 16704 + 16704 15767 16705 + 16705 15767 15766 + 15766 16709 16705 + 16706 16705 16709 + 16709 16710 16706 + 16707 16706 16710 + 16710 16711 16707 + 16712 16707 16711 + 16707 16712 16708 + 15771 16709 15766 + 16710 16709 15771 + 15771 16713 16710 + 16710 16713 16714 + 16714 16711 16710 + 16715 16711 16714 + 16711 16715 16712 + 16716 16712 16715 + 16708 16712 16716 + 16716 16717 16708 + 16708 16717 16695 + 16713 15771 16718 + 16718 16719 16713 + 16714 16713 16719 + 16719 16720 16714 + 16721 16714 16720 + 16714 16721 16715 + 15770 16718 15771 + 15780 16718 15770 + 16719 16718 15780 + 15780 15789 16719 + 16719 15789 15794 + 15794 16720 16719 + 16722 16720 15794 + 16720 16722 16721 + 16723 16721 16722 + 16715 16721 16723 + 16723 16724 16715 + 16715 16724 16716 + 16725 16716 16724 + 16716 16725 16726 + 16726 16717 16716 + 15794 16727 16722 + 16722 16727 16728 + 16728 16729 16722 + 16722 16729 16723 + 16730 16723 16729 + 16723 16730 16731 + 16731 16724 16723 + 16724 16731 16725 + 16727 15794 15793 + 15793 15799 16727 + 16728 16727 15799 + 15799 15808 16728 + 16732 16728 15808 + 16728 16732 16733 + 16733 16729 16728 + 16729 16733 16730 + 16734 16730 16733 + 16731 16730 16734 + 16734 16735 16731 + 16731 16735 16736 + 16736 16725 16731 + 16726 16725 16736 + 15808 15807 16732 + 16737 16732 15807 + 16733 16732 16737 + 16737 16738 16733 + 16733 16738 16734 + 16739 16734 16738 + 16734 16739 16740 + 16740 16735 16734 + 16735 16740 16741 + 16741 16736 16735 + 15807 16742 16737 + 16743 16737 16742 + 16737 16743 16744 + 16744 16738 16737 + 16738 16744 16739 + 16739 16744 16745 + 16745 16746 16739 + 16740 16739 16746 + 15812 16742 15807 + 16747 16742 15812 + 16742 16747 16743 + 16743 16747 16748 + 16748 16749 16743 + 16744 16743 16749 + 16749 16745 16744 + 16745 16749 16750 + 16745 16750 16751 + 16751 16746 16745 + 15812 16752 16747 + 16747 16752 16753 + 16753 16748 16747 + 16748 16753 16754 + 16754 16755 16748 + 16748 16755 16750 + 16750 16749 16748 + 16752 15812 15815 + 15815 15820 16752 + 16752 15820 16756 + 16756 16753 16752 + 16754 16753 16756 + 16756 16757 16754 + 16758 16754 16757 + 16755 16754 16758 + 16758 16759 16755 + 16755 16759 16760 + 16750 16755 16760 + 16760 16751 16750 + 15825 16756 15820 + 16756 15825 15830 + 15830 16757 16756 + 16757 15830 15838 + 15838 16761 16757 + 16757 16761 16758 + 16762 16758 16761 + 16759 16758 16762 + 16762 16763 16759 + 16759 16763 16764 + 16764 16760 16759 + 16761 15838 15842 + 15842 16765 16761 + 16761 16765 16762 + 16766 16762 16765 + 16763 16762 16766 + 16766 16767 16763 + 16763 16767 16768 + 16768 16764 16763 + 16765 15842 15846 + 15846 16769 16765 + 16765 16769 16766 + 16770 16766 16769 + 16766 16770 16767 + 16767 16770 16771 + 16771 16768 16767 + 16772 16768 16771 + 16768 16772 16773 + 16773 16764 16768 + 16769 15846 16774 + 16774 16775 16769 + 16769 16775 16770 + 16771 16770 16775 + 16774 15846 15849 + 15849 16776 16774 + 16774 16776 16777 + 16777 16778 16774 + 16775 16774 16778 + 16778 16779 16775 + 16775 16779 16771 + 15853 16776 15849 + 16776 15853 16780 + 16780 16777 16776 + 16777 16780 16781 + 16781 16782 16777 + 16777 16782 16783 + 16783 16778 16777 + 16779 16778 16783 + 16784 16780 15853 + 16781 16780 16784 + 16784 16785 16781 + 16781 16785 16786 + 16786 16787 16781 + 16782 16781 16787 + 16787 16788 16782 + 16783 16782 16788 + 15853 15857 16784 + 15867 16784 15857 + 15867 16785 16784 + 16785 15867 15866 + 15866 16789 16785 + 16785 16789 16786 + 16790 16786 16789 + 16786 16790 16791 + 16791 16792 16786 + 16786 16792 16793 + 16793 16787 16786 + 16788 16787 16793 + 15876 16789 15866 + 16789 15876 16790 + 16794 16790 15876 + 16791 16790 16794 + 16794 16795 16791 + 16796 16791 16795 + 16792 16791 16796 + 16796 16797 16792 + 16792 16797 16798 + 16798 16793 16792 + 15876 16799 16794 + 16800 16794 16799 + 16794 16800 16795 + 16795 16800 16801 + 16801 16802 16795 + 16795 16802 16796 + 15875 16799 15876 + 16803 16799 15875 + 16799 16803 16800 + 16801 16800 16803 + 16803 16804 16801 + 16805 16801 16804 + 16801 16805 16806 + 16806 16802 16801 + 15875 15880 16803 + 16803 15880 15885 + 15885 16804 16803 + 16807 16804 15885 + 16804 16807 16805 + 16808 16805 16807 + 16806 16805 16808 + 16808 16809 16806 + 16810 16806 16809 + 16802 16806 16810 + 16810 16811 16802 + 16802 16811 16796 + 15885 15889 16807 + 16807 15889 15894 + 15894 16812 16807 + 16807 16812 16808 + 16813 16808 16812 + 16808 16813 16814 + 16814 16809 16808 + 16809 16814 16815 + 16815 16816 16809 + 16809 16816 16810 + 16817 16812 15894 + 16812 16817 16813 + 16818 16813 16817 + 16814 16813 16818 + 16818 16819 16814 + 16815 16814 16819 + 16819 16820 16815 + 16821 16815 16820 + 16815 16821 16816 + 15894 15899 16817 + 16817 15899 16822 + 16822 16823 16817 + 16817 16823 16818 + 16824 16818 16823 + 16818 16824 16825 + 16825 16819 16818 + 16819 16825 16826 + 16826 16820 16819 + 15904 16822 15899 + 16827 16822 15904 + 16822 16827 16828 + 16828 16823 16822 + 16823 16828 16824 + 16829 16824 16828 + 16825 16824 16829 + 16829 16830 16825 + 16826 16825 16830 + 15904 15909 16827 + 16831 16827 15909 + 16828 16827 16831 + 16831 16832 16828 + 16828 16832 16829 + 16833 16829 16832 + 16829 16833 16834 + 16834 16830 16829 + 15909 16835 16831 + 16836 16831 16835 + 16831 16836 16837 + 16837 16832 16831 + 16832 16837 16833 + 16838 16833 16837 + 16834 16833 16838 + 16839 16835 15909 + 16840 16835 16839 + 16835 16840 16836 + 16841 16836 16840 + 16837 16836 16841 + 16841 16842 16837 + 16837 16842 16838 + 15909 15908 16839 + 15914 16839 15908 + 16843 16839 15914 + 16839 16843 16840 + 16840 16843 16844 + 16844 16845 16840 + 16840 16845 16841 + 16846 16841 16845 + 16841 16846 16847 + 16847 16842 16841 + 15914 16848 16843 + 16843 16848 16849 + 16849 16850 16843 + 16850 16844 16843 + 16851 16844 16850 + 16844 16851 16852 + 16852 16845 16844 + 16845 16852 16846 + 16848 15914 15913 + 15913 15919 16848 + 16848 15919 16853 + 16853 16849 16848 + 16854 16849 16853 + 16849 16854 16855 + 16855 16850 16849 + 16856 16850 16855 + 16850 16856 16851 + 16857 16853 15919 + 16854 16853 16857 + 16857 16858 16854 + 16854 16858 16859 + 16859 16855 16854 + 16860 16855 16859 + 16855 16860 16856 + 16861 16857 15919 + 16862 16857 16861 + 16858 16857 16862 + 16862 16863 16858 + 16858 16863 16864 + 16864 16859 16858 + 16865 16859 16864 + 16859 16865 16860 + 15919 15918 16861 + 15924 16861 15918 + 16866 16861 15924 + 16861 16866 16862 + 16867 16862 16866 + 16863 16862 16867 + 16867 16868 16863 + 16863 16868 16869 + 16869 16864 16863 + 16870 16864 16869 + 16864 16870 16865 + 16866 15924 15923 + 15923 16871 16866 + 16866 16871 16867 + 16872 16867 16871 + 16867 16872 16873 + 16873 16868 16867 + 16868 16873 16874 + 16874 16869 16868 + 15932 16871 15923 + 16871 15932 16872 + 16875 16872 15932 + 16873 16872 16875 + 16875 16876 16873 + 16873 16876 16877 + 16877 16874 16873 + 16878 16874 16877 + 16869 16874 16878 + 16878 16879 16869 + 16869 16879 16870 + 15932 15931 16875 + 15937 16875 15931 + 16875 15937 15945 + 15945 16876 16875 + 16876 15945 16880 + 16880 16877 16876 + 16877 16880 16881 + 16881 16882 16877 + 16877 16882 16878 + 16878 16882 16883 + 16883 16884 16878 + 16879 16878 16884 + 16885 16880 15945 + 16881 16880 16885 + 16885 16886 16881 + 16881 16886 16887 + 16887 16888 16881 + 16882 16881 16888 + 16888 16883 16882 + 15945 15944 16885 + 15950 16885 15944 + 16885 15950 16889 + 16889 16886 16885 + 16886 16889 16890 + 16890 16887 16886 + 16887 16890 16891 + 16891 16892 16887 + 16887 16892 16893 + 16893 16888 16887 + 16883 16888 16893 + 16889 15950 15949 + 15949 15962 16889 + 16889 15962 15967 + 15967 16890 16889 + 16891 16890 15967 + 15967 16894 16891 + 16891 16894 16895 + 16895 16896 16891 + 16892 16891 16896 + 16896 16897 16892 + 16893 16892 16897 + 15966 16894 15967 + 16894 15966 16898 + 16898 16895 16894 + 16895 16898 16899 + 16899 16900 16895 + 16895 16900 16901 + 16901 16896 16895 + 16897 16896 16901 + 15971 16898 15966 + 16899 16898 15971 + 15971 16902 16899 + 16899 16902 16903 + 16903 16904 16899 + 16900 16899 16904 + 16904 16905 16900 + 16901 16900 16905 + 15974 16902 15971 + 16902 15974 16906 + 16906 16903 16902 + 16903 16906 16907 + 16907 16908 16903 + 16903 16908 16909 + 16909 16904 16903 + 16905 16904 16909 + 15978 16906 15974 + 16907 16906 15978 + 15978 15983 16907 + 16907 15983 16910 + 16910 16911 16907 + 16908 16907 16911 + 16911 16912 16908 + 16909 16908 16912 + 16912 16913 16909 + 16914 16909 16913 + 16909 16914 16905 + 15988 16910 15983 + 16915 16910 15988 + 16910 16915 16916 + 16916 16911 16910 + 16912 16911 16916 + 16916 16917 16912 + 16912 16917 16918 + 16918 16913 16912 + 16919 16913 16918 + 16913 16919 16914 + 15988 16920 16915 + 16915 16920 16921 + 16921 16922 16915 + 16916 16915 16922 + 16922 16923 16916 + 16917 16916 16923 + 16923 16924 16917 + 16918 16917 16924 + 16920 15988 15987 + 15987 16925 16920 + 16920 16925 16926 + 16926 16921 16920 + 16927 16921 16926 + 16921 16927 16928 + 16928 16922 16921 + 16922 16928 16929 + 16929 16923 16922 + 16924 16923 16929 + 16925 15987 15986 + 15986 16930 16925 + 16925 16930 16931 + 16931 16926 16925 + 16932 16926 16931 + 16926 16932 16927 + 16927 16932 16933 + 16933 16934 16927 + 16928 16927 16934 + 16930 15986 15992 + 15992 15997 16930 + 16930 15997 16935 + 16935 16931 16930 + 16936 16931 16935 + 16931 16936 16932 + 16932 16936 16937 + 16937 16933 16932 + 16938 16933 16937 + 16933 16938 16939 + 16939 16934 16933 + 16940 16935 15997 + 16941 16935 16940 + 16935 16941 16936 + 16936 16941 16942 + 16942 16937 16936 + 16943 16937 16942 + 16937 16943 16938 + 15997 15996 16940 + 16944 16940 15996 + 16945 16940 16944 + 16940 16945 16941 + 16941 16945 16946 + 16946 16942 16941 + 16947 16942 16946 + 16942 16947 16943 + 15996 16001 16944 + 16948 16944 16001 + 16949 16944 16948 + 16944 16949 16945 + 16945 16949 16950 + 16950 16946 16945 + 16951 16946 16950 + 16946 16951 16947 + 16001 16006 16948 + 16952 16948 16006 + 16953 16948 16952 + 16948 16953 16949 + 16949 16953 16954 + 16954 16950 16949 + 16955 16950 16954 + 16950 16955 16951 + 16006 16956 16952 + 16957 16952 16956 + 16958 16952 16957 + 16952 16958 16953 + 16953 16958 16959 + 16959 16954 16953 + 16960 16954 16959 + 16954 16960 16955 + 16005 16956 16006 + 16956 16005 16011 + 16956 16011 16957 + 16957 16011 16010 + 16010 16961 16957 + 16962 16957 16961 + 16957 16962 16958 + 16958 16962 16963 + 16963 16959 16958 + 16964 16959 16963 + 16959 16964 16960 + 16965 16961 16010 + 16966 16961 16965 + 16961 16966 16962 + 16962 16966 16967 + 16967 16963 16962 + 16968 16963 16967 + 16963 16968 16964 + 16010 16018 16965 + 16969 16965 16018 + 16970 16965 16969 + 16965 16970 16966 + 16966 16970 16971 + 16971 16967 16966 + 16972 16967 16971 + 16967 16972 16968 + 16018 16022 16969 + 16027 16969 16022 + 16973 16969 16027 + 16969 16973 16970 + 16970 16973 16974 + 16974 16971 16970 + 16975 16971 16974 + 16971 16975 16972 + 16972 16975 16976 + 16976 16977 16972 + 16968 16972 16977 + 16027 16032 16973 + 16973 16032 16978 + 16978 16974 16973 + 16979 16974 16978 + 16974 16979 16975 + 16975 16979 16980 + 16980 16976 16975 + 16981 16976 16980 + 16976 16981 16982 + 16982 16977 16976 + 16036 16978 16032 + 16983 16978 16036 + 16978 16983 16979 + 16979 16983 16984 + 16984 16980 16979 + 16985 16980 16984 + 16980 16985 16981 + 16981 16985 16986 + 16986 16987 16981 + 16982 16981 16987 + 16036 16040 16983 + 16983 16040 16988 + 16988 16984 16983 + 16989 16984 16988 + 16984 16989 16985 + 16985 16989 16990 + 16990 16986 16985 + 16991 16986 16990 + 16986 16991 16992 + 16992 16987 16986 + 16044 16988 16040 + 16993 16988 16044 + 16988 16993 16989 + 16989 16993 16994 + 16994 16990 16989 + 16995 16990 16994 + 16990 16995 16991 + 16991 16995 16996 + 16996 16997 16991 + 16992 16991 16997 + 16044 16048 16993 + 16993 16048 16998 + 16998 16994 16993 + 16999 16994 16998 + 16994 16999 16995 + 16995 16999 17000 + 17000 16996 16995 + 17001 16996 17000 + 16996 17001 17002 + 17002 16997 16996 + 16052 16998 16048 + 17003 16998 16052 + 16998 17003 16999 + 16999 17003 17004 + 17004 17000 16999 + 17005 17000 17004 + 17000 17005 17001 + 17001 17005 17006 + 17006 17007 17001 + 17002 17001 17007 + 16052 16056 17003 + 17003 16056 17008 + 17008 17004 17003 + 17009 17004 17008 + 17004 17009 17005 + 17005 17009 17010 + 17010 17006 17005 + 17011 17006 17010 + 17006 17011 17012 + 17012 17007 17006 + 16060 17008 16056 + 17013 17008 16060 + 17008 17013 17009 + 17009 17013 17014 + 17014 17010 17009 + 17015 17010 17014 + 17010 17015 17011 + 17011 17015 17016 + 17016 17017 17011 + 17012 17011 17017 + 16060 16064 17013 + 17013 16064 17018 + 17018 17014 17013 + 17019 17014 17018 + 17014 17019 17015 + 17015 17019 17020 + 17020 17016 17015 + 17021 17016 17020 + 17016 17021 17022 + 17022 17017 17016 + 16068 17018 16064 + 17023 17018 16068 + 17018 17023 17019 + 17019 17023 17024 + 17024 17020 17019 + 17025 17020 17024 + 17020 17025 17021 + 17026 17021 17025 + 17022 17021 17026 + 16068 16076 17023 + 17023 16076 17027 + 17027 17024 17023 + 17028 17024 17027 + 17024 17028 17025 + 17025 17028 17029 + 17029 17030 17025 + 17025 17030 17026 + 16075 17027 16076 + 17031 17027 16075 + 17027 17031 17028 + 17029 17028 17031 + 17031 17032 17029 + 17033 17029 17032 + 17029 17033 17034 + 17034 17030 17029 + 17030 17034 17035 + 17035 17026 17030 + 16075 16080 17031 + 17031 16080 16079 + 16079 17032 17031 + 17036 17032 16079 + 17032 17036 17033 + 17037 17033 17036 + 17034 17033 17037 + 17037 17038 17034 + 17034 17038 17039 + 17039 17035 17034 + 17040 17035 17039 + 17026 17035 17040 + 16079 16085 17036 + 17036 16085 17041 + 17041 17042 17036 + 17036 17042 17037 + 17043 17037 17042 + 17037 17043 17044 + 17044 17038 17037 + 17038 17044 17045 + 17045 17039 17038 + 17041 16085 16084 + 16084 16090 17041 + 17046 17041 16090 + 17041 17046 17047 + 17047 17042 17041 + 17042 17047 17043 + 17048 17043 17047 + 17044 17043 17048 + 17048 17049 17044 + 17044 17049 17050 + 17050 17045 17044 + 16090 16089 17046 + 17051 17046 16089 + 17047 17046 17051 + 17051 17052 17047 + 17047 17052 17048 + 17053 17048 17052 + 17048 17053 17054 + 17054 17049 17048 + 17049 17054 17055 + 17055 17050 17049 + 16089 16103 17051 + 17056 17051 16103 + 17051 17056 17057 + 17057 17052 17051 + 17052 17057 17053 + 17058 17053 17057 + 17054 17053 17058 + 17058 17059 17054 + 17054 17059 17060 + 17060 17055 17054 + 16103 16102 17056 + 17061 17056 16102 + 17057 17056 17061 + 17061 17062 17057 + 17057 17062 17058 + 17063 17058 17062 + 17058 17063 17064 + 17064 17059 17058 + 17059 17064 17065 + 17065 17060 17059 + 16102 16107 17061 + 16112 17061 16107 + 17061 16112 17066 + 17066 17062 17061 + 17062 17066 17063 + 17067 17063 17066 + 17064 17063 17067 + 17067 17068 17064 + 17064 17068 17069 + 17069 17065 17064 + 17070 17065 17069 + 17060 17065 17070 + 17066 16112 16111 + 16111 17071 17066 + 17066 17071 17067 + 17072 17067 17071 + 17067 17072 17073 + 17073 17068 17067 + 17068 17073 17074 + 17074 17069 17068 + 16119 17071 16111 + 17071 16119 17072 + 17075 17072 16119 + 17073 17072 17075 + 17075 17076 17073 + 17073 17076 17077 + 17077 17074 17073 + 17078 17074 17077 + 17069 17074 17078 + 17078 17079 17069 + 17069 17079 17070 + 16119 16122 17075 + 16131 17075 16122 + 17076 17075 16131 + 16131 17080 17076 + 17076 17080 17081 + 17081 17077 17076 + 17082 17077 17081 + 17077 17082 17078 + 17078 17082 17083 + 17083 17084 17078 + 17079 17078 17084 + 17080 16131 17085 + 17085 17086 17080 + 17081 17080 17086 + 17086 17087 17081 + 17088 17081 17087 + 17081 17088 17082 + 17082 17088 17089 + 17089 17083 17082 + 16130 17085 16131 + 17090 17085 16130 + 17086 17085 17090 + 17090 17091 17086 + 17086 17091 17092 + 17092 17087 17086 + 17093 17087 17092 + 17087 17093 17088 + 17088 17093 17094 + 17094 17089 17088 + 16130 17095 17090 + 17096 17090 17095 + 17091 17090 17096 + 17096 17097 17091 + 17091 17097 17098 + 17098 17092 17091 + 17099 17092 17098 + 17092 17099 17093 + 16129 17095 16130 + 17095 16129 16136 + 16136 17100 17095 + 17095 17100 17096 + 17101 17096 17100 + 17096 17101 17102 + 17102 17097 17096 + 17097 17102 17103 + 17103 17098 17097 + 17104 17100 16136 + 17100 17104 17101 + 17105 17101 17104 + 17102 17101 17105 + 17105 17106 17102 + 17102 17106 17107 + 17107 17103 17102 + 17108 17103 17107 + 17098 17103 17108 + 16136 16141 17104 + 17104 16141 17109 + 17109 17110 17104 + 17104 17110 17105 + 17111 17105 17110 + 17105 17111 17112 + 17112 17106 17105 + 17106 17112 17113 + 17113 17107 17106 + 17109 16141 16140 + 16140 17114 17109 + 17115 17109 17114 + 17109 17115 17116 + 17116 17110 17109 + 17110 17116 17111 + 17117 17111 17116 + 17112 17111 17117 + 16146 17114 16140 + 17118 17114 16146 + 17114 17118 17115 + 17119 17115 17118 + 17116 17115 17119 + 17119 17120 17116 + 17116 17120 17117 + 16146 16151 17118 + 17118 16151 17121 + 17121 17122 17118 + 17118 17122 17119 + 17123 17119 17122 + 17119 17123 17124 + 17124 17120 17119 + 17120 17124 17125 + 17125 17117 17120 + 17121 16151 16150 + 16150 17126 17121 + 17127 17121 17126 + 17121 17127 17128 + 17128 17122 17121 + 17122 17128 17123 + 17129 17123 17128 + 17124 17123 17129 + 16155 17126 16150 + 17130 17126 16155 + 17126 17130 17127 + 17131 17127 17130 + 17128 17127 17131 + 17131 17132 17128 + 17128 17132 17129 + 16155 17133 17130 + 17130 17133 17134 + 17134 17135 17130 + 17130 17135 17131 + 17136 17131 17135 + 17131 17136 17137 + 17137 17132 17131 + 17133 16155 16159 + 16159 16164 17133 + 17134 17133 16164 + 16164 16181 17134 + 16190 17134 16181 + 17134 16190 17138 + 17138 17135 17134 + 17135 17138 17136 + 17136 17138 17139 + 17139 17140 17136 + 17137 17136 17140 + 17138 16190 16195 + 16195 17139 17138 + 16199 17139 16195 + 17139 16199 17141 + 17141 17140 17139 + 17140 17141 17142 + 17140 17142 17137 + 17137 17142 16219 + 16219 17143 17137 + 17132 17137 17143 + 17143 17129 17132 + 17141 16199 16203 + 16203 16220 17141 + 17142 17141 16220 + 16220 16219 17142 + 16224 17143 16219 + 17129 17143 16224 + 16224 17144 17129 + 17129 17144 17124 + 17124 17144 16232 + 16232 17125 17124 + 17145 17125 16232 + 17117 17125 17145 + 17144 16224 16227 + 16227 16232 17144 + 16232 16231 17145 + 17145 16231 16237 + 16237 17146 17145 + 17147 17145 17146 + 17145 17147 17117 + 17117 17147 17112 + 17112 17147 17148 + 17148 17113 17112 + 16242 17146 16237 + 17148 17146 16242 + 17146 17148 17147 + 16242 17149 17148 + 17148 17149 17150 + 17150 17113 17148 + 17107 17113 17150 + 17150 17151 17107 + 17107 17151 17108 + 17149 16242 17152 + 17152 17153 17149 + 17150 17149 17153 + 17153 17154 17150 + 17151 17150 17154 + 17154 17155 17151 + 17108 17151 17155 + 16241 17152 16242 + 17156 17152 16241 + 17153 17152 17156 + 17156 17157 17153 + 17153 17157 17158 + 17158 17154 17153 + 17155 17154 17158 + 16241 16247 17156 + 17156 16247 16252 + 16252 17159 17156 + 17157 17156 17159 + 17159 17160 17157 + 17158 17157 17160 + 17160 17161 17158 + 17162 17158 17161 + 17158 17162 17155 + 17163 17159 16252 + 17160 17159 17163 + 17163 17164 17160 + 17160 17164 17165 + 17165 17161 17160 + 17166 17161 17165 + 17161 17166 17162 + 17167 17162 17166 + 17155 17162 17167 + 16252 17168 17163 + 17163 17168 17169 + 17169 17170 17163 + 17164 17163 17170 + 17170 17171 17164 + 17165 17164 17171 + 16251 17168 16252 + 17168 16251 17172 + 17172 17169 17168 + 17169 17172 17173 + 17173 17174 17169 + 17169 17174 17175 + 17175 17170 17169 + 17171 17170 17175 + 16257 17172 16251 + 17173 17172 16257 + 16257 17176 17173 + 17173 17176 17177 + 17177 17178 17173 + 17174 17173 17178 + 17178 17179 17174 + 17175 17174 17179 + 17180 17176 16257 + 17176 17180 17181 + 17181 17177 17176 + 17177 17181 17182 + 17182 17183 17177 + 17177 17183 17184 + 17184 17178 17177 + 17179 17178 17184 + 16257 16256 17180 + 17180 16256 16255 + 16255 17185 17180 + 17180 17185 17186 + 17186 17181 17180 + 17182 17181 17186 + 17186 17187 17182 + 17188 17182 17187 + 17183 17182 17188 + 17188 17189 17183 + 17184 17183 17189 + 17185 16255 16254 + 16254 17190 17185 + 17185 17190 17191 + 17191 17186 17185 + 17191 17187 17186 + 17187 17191 17192 + 17192 17193 17187 + 17187 17193 17188 + 17194 17188 17193 + 17189 17188 17194 + 17190 16254 16267 + 16267 16272 17190 + 17191 17190 16272 + 16272 17195 17191 + 17195 17192 17191 + 17196 17192 17195 + 17192 17196 17197 + 17197 17193 17192 + 17193 17197 17194 + 17198 17194 17197 + 17199 17194 17198 + 17194 17199 17189 + 16271 17195 16272 + 17195 16271 17200 + 17195 17200 17196 + 17196 17200 17201 + 17201 17202 17196 + 17197 17196 17202 + 17202 17203 17197 + 17197 17203 17198 + 17200 16271 16277 + 16277 17201 17200 + 17204 17201 16277 + 17201 17204 17205 + 17205 17202 17201 + 17202 17205 17206 + 17206 17203 17202 + 17203 17206 17207 + 17207 17198 17203 + 17208 17198 17207 + 17198 17208 17199 + 16277 16281 17204 + 17204 16281 17209 + 17209 17210 17204 + 17205 17204 17210 + 17210 17211 17205 + 17206 17205 17211 + 17211 17212 17206 + 17207 17206 17212 + 16285 17209 16281 + 16290 17209 16285 + 17209 16290 17213 + 17213 17210 17209 + 17210 17213 17214 + 17214 17211 17210 + 17211 17214 17215 + 17215 17212 17211 + 17212 17215 17216 + 17216 17217 17212 + 17212 17217 17207 + 17213 16290 17218 + 17218 17219 17213 + 17214 17213 17219 + 17219 17220 17214 + 17215 17214 17220 + 17220 17221 17215 + 17216 17215 17221 + 16289 17218 16290 + 17222 17218 16289 + 17218 17222 17223 + 17223 17219 17218 + 17219 17223 17224 + 17224 17220 17219 + 17220 17224 17225 + 17225 17221 17220 + 16289 16295 17222 + 17222 16295 17226 + 17226 17227 17222 + 17223 17222 17227 + 17227 17228 17223 + 17224 17223 17228 + 17228 17229 17224 + 17225 17224 17229 + 17230 17226 16295 + 17231 17226 17230 + 17226 17231 17232 + 17232 17227 17226 + 17227 17232 17233 + 17233 17228 17227 + 17228 17233 17234 + 17234 17229 17228 + 16295 16294 17230 + 16300 17230 16294 + 17235 17230 16300 + 17230 17235 17231 + 17231 17235 17236 + 17236 17237 17231 + 17232 17231 17237 + 17237 17238 17232 + 17233 17232 17238 + 17238 17239 17233 + 17234 17233 17239 + 16300 17240 17235 + 17235 17240 17241 + 17241 17236 17235 + 17242 17236 17241 + 17236 17242 17243 + 17243 17237 17236 + 17237 17243 17244 + 17244 17238 17237 + 17240 16300 16299 + 16299 16305 17240 + 17240 16305 17245 + 17245 17241 17240 + 17246 17241 17245 + 17241 17246 17242 + 17242 17246 17247 + 17247 17248 17242 + 17243 17242 17248 + 17248 17249 17243 + 17244 17243 17249 + 16310 17245 16305 + 17250 17245 16310 + 17245 17250 17246 + 17246 17250 17251 + 17251 17247 17246 + 17252 17247 17251 + 17247 17252 17253 + 17253 17248 17247 + 17248 17253 17254 + 17254 17249 17248 + 16310 16315 17250 + 17250 16315 17255 + 17255 17251 17250 + 17256 17251 17255 + 17251 17256 17252 + 17252 17256 17257 + 17257 17258 17252 + 17253 17252 17258 + 17258 17259 17253 + 17254 17253 17259 + 17260 17255 16315 + 17261 17255 17260 + 17255 17261 17256 + 17256 17261 17262 + 17262 17257 17256 + 17263 17257 17262 + 17257 17263 17258 + 17258 17263 17264 + 17264 17259 17258 + 16315 16314 17260 + 17265 17260 16314 + 17266 17260 17265 + 17260 17266 17261 + 17261 17266 17267 + 17267 17262 17261 + 17262 17267 17268 + 17268 17269 17262 + 17262 17269 17263 + 16314 16319 17265 + 17270 17265 16319 + 17271 17265 17270 + 17265 17271 17266 + 17266 17271 17272 + 17272 17267 17266 + 17268 17267 17272 + 16319 16323 17270 + 17273 17270 16323 + 17274 17270 17273 + 17270 17274 17271 + 17271 17274 17275 + 17275 17272 17271 + 17275 17276 17272 + 17272 17276 17268 + 16323 16327 17273 + 17277 17273 16327 + 17278 17273 17277 + 17273 17278 17274 + 17274 17278 17279 + 17279 17275 17274 + 17276 17275 17279 + 17279 17280 17276 + 17276 17280 17281 + 17268 17276 17281 + 16327 16331 17277 + 17282 17277 16331 + 17283 17277 17282 + 17277 17283 17278 + 17278 17283 17284 + 17284 17279 17278 + 17279 17284 17285 + 17285 17280 17279 + 17280 17285 17286 + 17286 17281 17280 + 16331 16336 17282 + 17287 17282 16336 + 17288 17282 17287 + 17282 17288 17283 + 17283 17288 17289 + 17289 17284 17283 + 17285 17284 17289 + 17289 17290 17285 + 17285 17290 17291 + 17291 17286 17285 + 16336 16341 17287 + 17292 17287 16341 + 17293 17287 17292 + 17287 17293 17288 + 17288 17293 17294 + 17294 17289 17288 + 17294 17290 17289 + 17290 17294 17295 + 17295 17296 17290 + 17290 17296 17291 + 16341 16346 17292 + 17297 17292 16346 + 17298 17292 17297 + 17292 17298 17293 + 17293 17298 17295 + 17295 17294 17293 + 16346 16351 17297 + 16361 17297 16351 + 17299 17297 16361 + 17297 17299 17298 + 17298 17299 17300 + 17300 17295 17298 + 17295 17300 17301 + 17301 17296 17295 + 17296 17301 17302 + 17302 17291 17296 + 16361 16366 17299 + 17299 16366 17303 + 17303 17300 17299 + 17301 17300 17303 + 17303 17304 17301 + 17301 17304 17305 + 17305 17302 17301 + 17306 17302 17305 + 17291 17302 17306 + 16371 17303 16366 + 17303 16371 16379 + 16379 17304 17303 + 17304 16379 17307 + 17307 17305 17304 + 17305 17307 17308 + 17308 17309 17305 + 17305 17309 17306 + 17310 17307 16379 + 17308 17307 17310 + 17310 17311 17308 + 17308 17311 17312 + 17312 17313 17308 + 17309 17308 17313 + 17313 17314 17309 + 17306 17309 17314 + 16379 16378 17310 + 17315 17310 16378 + 17310 17315 17316 + 17316 17311 17310 + 17311 17316 17317 + 17317 17312 17311 + 16378 16377 17315 + 16388 17315 16377 + 17316 17315 16388 + 16388 16393 17316 + 17316 16393 17318 + 17318 17317 17316 + 17319 17317 17318 + 17312 17317 17319 + 17319 17320 17312 + 17312 17320 17321 + 17321 17313 17312 + 17313 17321 17314 + 16393 16392 17318 + 16401 17318 16392 + 17318 16401 17322 + 17322 17323 17318 + 17318 17323 17319 + 17324 17319 17323 + 17320 17319 17324 + 17322 16401 16400 + 16400 17325 17322 + 17326 17322 17325 + 17323 17322 17326 + 17326 17327 17323 + 17323 17327 17324 + 17328 17324 17327 + 17324 17328 17329 + 17324 17329 17320 + 17330 17325 16400 + 17325 17330 17331 + 17331 17332 17325 + 17325 17332 17326 + 17333 17326 17332 + 17327 17326 17333 + 17333 17334 17327 + 17327 17334 17328 + 16400 17335 17330 + 17330 17335 17336 + 17336 17337 17330 + 17330 17337 17338 + 17331 17330 17338 + 17335 16400 16405 + 16405 16410 17335 + 17336 17335 16410 + 16410 16418 17336 + 17339 17336 16418 + 17339 17337 17336 + 17337 17339 17340 + 17340 17338 17337 + 16418 16417 17339 + 17340 17339 16417 + 16417 17341 17340 + 17342 17340 17341 + 17340 17342 17343 + 17343 17338 17340 + 16421 17341 16417 + 17344 17341 16421 + 17341 17344 17342 + 17345 17342 17344 + 17343 17342 17345 + 17345 17346 17343 + 17347 17343 17346 + 17338 17343 17347 + 16421 16431 17344 + 17344 16431 17348 + 17348 17349 17344 + 17344 17349 17345 + 17349 17350 17345 + 17351 17345 17350 + 17345 17351 17352 + 17352 17346 17345 + 17348 16431 16430 + 16430 17353 17348 + 17354 17348 17353 + 17354 17349 17348 + 17349 17354 17355 + 17355 17350 17349 + 17356 17350 17355 + 17350 17356 17351 + 17357 17351 17356 + 17352 17351 17357 + 16435 17353 16430 + 16444 17353 16435 + 17353 16444 17354 + 17355 17354 16444 + 16444 17358 17355 + 17358 17359 17355 + 17360 17355 17359 + 17355 17360 17356 + 17356 17360 17361 + 17361 17362 17356 + 17356 17362 17357 + 16443 17358 16444 + 16443 16449 17358 + 17358 16449 16615 + 16615 17359 17358 + 16619 17359 16615 + 17359 16619 17360 + 17361 17360 16619 + 16619 16624 17361 + 16629 17361 16624 + 17361 16629 17363 + 17363 17362 17361 + 17362 17363 17364 + 17364 17357 17362 + 17357 17364 17365 + 17365 17366 17357 + 17357 17366 17352 + 17367 17352 17366 + 17346 17352 17367 + 17363 16629 16628 + 16628 17368 17363 + 17364 17363 17368 + 17368 17369 17364 + 17369 17370 17364 + 17365 17364 17370 + 16634 17368 16628 + 17368 16634 16633 + 16633 17369 17368 + 16641 17369 16633 + 17369 16641 16650 + 16650 17370 17369 + 17370 16650 17371 + 17371 17372 17370 + 17370 17372 17365 + 17365 17372 17373 + 17373 17374 17365 + 17366 17365 17374 + 17374 17375 17366 + 17366 17375 17367 + 17371 16650 17376 + 17376 17377 17371 + 17371 17377 17378 + 17378 17379 17371 + 17372 17371 17379 + 17379 17373 17372 + 16654 17376 16650 + 17380 17376 16654 + 17376 17380 17381 + 17381 17377 17376 + 17377 17381 17382 + 17382 17378 17377 + 17382 17383 17378 + 17378 17383 17384 + 17384 17379 17378 + 17379 17384 17373 + 16654 16658 17380 + 17385 17380 16658 + 17381 17380 17385 + 17385 17386 17381 + 17382 17381 17386 + 17386 17387 17382 + 17383 17382 17387 + 17387 17388 17383 + 17383 17388 17389 + 17384 17383 17389 + 16658 16665 17385 + 16665 17390 17385 + 17391 17385 17390 + 17385 17391 17392 + 17392 17386 17385 + 17386 17392 17393 + 17393 17387 17386 + 17387 17393 17394 + 17394 17388 17387 + 16669 17390 16665 + 17395 17390 16669 + 17390 17395 17391 + 17391 17395 17396 + 17396 17397 17391 + 17392 17391 17397 + 17397 17398 17392 + 17392 17398 17399 + 17399 17393 17392 + 17394 17393 17399 + 16669 16674 17395 + 17395 16674 17400 + 17400 17396 17395 + 17401 17396 17400 + 17396 17401 17402 + 17402 17397 17396 + 17397 17402 17403 + 17403 17398 17397 + 17398 17403 17404 + 17404 17399 17398 + 16678 17400 16674 + 17405 17400 16678 + 17400 17405 17401 + 17401 17405 17406 + 17406 17407 17401 + 17402 17401 17407 + 17407 16773 17402 + 16773 16772 17402 + 17403 17402 16772 + 16678 17408 17405 + 17405 17408 17409 + 17409 17410 17405 + 17410 17406 17405 + 17411 17406 17410 + 17411 17407 17406 + 17407 17411 17412 + 17412 16773 17407 + 16764 16773 17412 + 17408 16678 16677 + 16677 17413 17408 + 17408 17413 17414 + 17414 17409 17408 + 17409 17414 17415 + 17409 17415 17416 + 17416 17410 17409 + 17417 17410 17416 + 17410 17417 17411 + 17413 16677 16682 + 16682 17418 17413 + 17414 17413 17418 + 17418 17419 17414 + 17415 17414 17419 + 17419 17420 17415 + 17416 17415 17420 + 17420 17421 17416 + 17422 17416 17421 + 17416 17422 17417 + 16686 17418 16682 + 17418 16686 17423 + 17423 17419 17418 + 17419 17423 17424 + 17424 17420 17419 + 17420 17424 17425 + 17425 17421 17420 + 17421 17425 16736 + 16736 16741 17421 + 17421 16741 17422 + 16690 17423 16686 + 17424 17423 16690 + 16690 17426 17424 + 17424 17426 16726 + 16726 17425 17424 + 16736 17425 16726 + 16695 17426 16690 + 17426 16695 16717 + 16717 16726 17426 + 17412 16760 16764 + 16760 17412 17427 + 17427 16751 16760 + 16751 17427 17428 + 17428 16746 16751 + 16746 17428 16740 + 16741 16740 17428 + 17428 17422 16741 + 17417 17422 17428 + 17427 17412 17411 + 17411 17417 17427 + 17428 17427 17417 + 16772 17429 17403 + 16771 17429 16772 + 17429 16771 17430 + 17430 17431 17429 + 17403 17429 17431 + 17431 17404 17403 + 17432 17404 17431 + 17404 17432 17399 + 17399 17432 17394 + 17433 17430 16771 + 17434 17430 17433 + 17431 17430 17434 + 17434 17435 17431 + 17431 17435 17432 + 17432 17435 17436 + 17394 17432 17436 + 17436 17437 17394 + 17388 17394 17437 + 16779 17433 16771 + 17438 17433 16779 + 17438 17439 17433 + 17433 17439 17434 + 17434 17439 17440 + 17440 17441 17434 + 17435 17434 17441 + 17441 17436 17435 + 16779 17442 17438 + 17438 17442 17443 + 17443 17444 17438 + 17439 17438 17444 + 17444 17440 17439 + 16783 17442 16779 + 17442 16783 17445 + 17445 17443 17442 + 17443 17445 17446 + 17443 17446 17447 + 17447 17444 17443 + 17440 17444 17447 + 17447 17448 17440 + 17440 17448 17449 + 17449 17441 17440 + 17436 17441 17449 + 16788 17445 16783 + 17446 17445 16788 + 16788 17450 17446 + 17446 17450 17451 + 17451 17447 17446 + 17448 17447 17451 + 17451 17452 17448 + 17448 17452 17453 + 17449 17448 17453 + 17454 17449 17453 + 17436 17449 17454 + 17454 17437 17436 + 16793 17450 16788 + 17450 16793 16798 + 16798 17455 17450 + 17450 17455 17451 + 17456 17451 17455 + 17451 17456 17452 + 17452 17456 17457 + 17457 17453 17452 + 16798 17458 17455 + 17455 17458 17456 + 17457 17456 17458 + 17458 16798 16797 + 16797 17459 17458 + 17458 17459 17457 + 16796 17459 16797 + 17459 16796 16811 + 16811 17460 17459 + 17459 17460 17457 + 16810 17460 16811 + 17460 16810 16816 + 16816 16821 17460 + 17460 16821 17457 + 16821 17461 17457 + 17461 17462 17457 + 17462 17463 17457 + 17463 17464 17457 + 17464 17465 17457 + 17465 17466 17457 + 17466 17467 17457 + 17467 17468 17457 + 17468 17469 17457 + 17469 17470 17457 + 17471 17457 17470 + 17453 17457 17471 + 16820 17461 16821 + 16826 17461 16820 + 17461 16826 17472 + 17472 17462 17461 + 17473 17462 17472 + 17462 17473 17474 + 17474 17463 17462 + 17475 17463 17474 + 17463 17475 17476 + 17476 17464 17463 + 16830 17472 16826 + 17473 17472 16830 + 16830 16834 17473 + 17473 16834 17477 + 17477 17478 17473 + 17478 17479 17473 + 17479 17474 17473 + 17475 17474 17479 + 17479 17480 17475 + 17476 17475 17480 + 16838 17477 16834 + 16838 17481 17477 + 17477 17481 17482 + 17482 17478 17477 + 17482 17483 17478 + 17478 17483 17484 + 17484 17479 17478 + 17480 17479 17484 + 17481 16838 16842 + 16842 16847 17481 + 17482 17481 16847 + 16847 17485 17482 + 17485 17486 17482 + 17483 17482 17486 + 17486 17487 17483 + 17483 17487 17488 + 17488 17489 17483 + 17489 17484 17483 + 17490 17485 16847 + 17491 17485 17490 + 17485 17491 17492 + 17492 17486 17485 + 17487 17486 17492 + 17492 17493 17487 + 17487 17493 17494 + 17494 17488 17487 + 16847 16846 17490 + 17490 16846 16852 + 16852 17495 17490 + 17491 17490 17495 + 17495 17496 17491 + 17492 17491 17496 + 17496 17497 17492 + 17493 17492 17497 + 17497 17498 17493 + 17494 17493 17498 + 17499 17495 16852 + 17496 17495 17499 + 17499 17500 17496 + 17496 17500 17501 + 17501 17497 17496 + 17498 17497 17501 + 16852 16851 17499 + 17502 17499 16851 + 17500 17499 17502 + 17502 17503 17500 + 17500 17503 17504 + 17504 17501 17500 + 17505 17501 17504 + 17501 17505 17498 + 16851 16856 17502 + 17506 17502 16856 + 17503 17502 17506 + 17506 17507 17503 + 17503 17507 17508 + 17508 17504 17503 + 17509 17504 17508 + 17504 17509 17505 + 16856 16860 17506 + 17510 17506 16860 + 17507 17506 17510 + 17510 17511 17507 + 17507 17511 17512 + 17512 17513 17507 + 17513 17508 17507 + 17514 17508 17513 + 17508 17514 17509 + 16860 16865 17510 + 17515 17510 16865 + 17511 17510 17515 + 17515 17516 17511 + 17511 17516 17517 + 17517 17512 17511 + 17518 17512 17517 + 17512 17518 17519 + 17519 17513 17512 + 16865 16870 17515 + 17520 17515 16870 + 17516 17515 17520 + 17520 17521 17516 + 17516 17521 17522 + 17522 17517 17516 + 17518 17517 17522 + 17522 17523 17518 + 17518 17523 17524 + 17524 17519 17518 + 16870 16879 17520 + 16884 17520 16879 + 17520 16884 17525 + 17525 17521 17520 + 17521 17525 17526 + 17526 17522 17521 + 17522 17526 17527 + 17527 17523 17522 + 17523 17527 17528 + 17528 17524 17523 + 17525 16884 16883 + 16883 17529 17525 + 17525 17529 17530 + 17530 17526 17525 + 17527 17526 17530 + 17530 17531 17527 + 17527 17531 17532 + 17532 17528 17527 + 17533 17528 17532 + 17524 17528 17533 + 16893 17529 16883 + 17529 16893 17534 + 17534 17530 17529 + 17530 17534 17535 + 17535 17531 17530 + 17531 17535 17536 + 17536 17532 17531 + 17532 17536 17537 + 17537 17538 17532 + 17532 17538 17533 + 16897 17534 16893 + 17535 17534 16897 + 16897 17539 17535 + 17535 17539 17540 + 17540 17536 17535 + 17537 17536 17540 + 17540 17541 17537 + 17537 17541 17542 + 17542 17543 17537 + 17538 17537 17543 + 16901 17539 16897 + 17539 16901 17544 + 17544 17540 17539 + 17540 17544 17545 + 17545 17541 17540 + 17541 17545 17546 + 17546 17542 17541 + 16905 17544 16901 + 17545 17544 16905 + 16905 16914 17545 + 17545 16914 16919 + 16919 17546 17545 + 17547 17546 16919 + 17542 17546 17547 + 17547 17548 17542 + 17542 17548 17549 + 17549 17543 17542 + 17550 17543 17549 + 17543 17550 17538 + 17533 17538 17550 + 16919 17551 17547 + 17547 17551 17552 + 17552 17553 17547 + 17548 17547 17553 + 17553 17554 17548 + 17549 17548 17554 + 16918 17551 16919 + 17551 16918 17555 + 17555 17552 17551 + 17552 17555 17556 + 17556 17557 17552 + 17552 17557 17558 + 17558 17553 17552 + 17554 17553 17558 + 16924 17555 16918 + 17556 17555 16924 + 16924 17559 17556 + 17556 17559 17560 + 17560 17561 17556 + 17557 17556 17561 + 17561 17562 17557 + 17558 17557 17562 + 16929 17559 16924 + 17559 16929 17563 + 17563 17560 17559 + 17560 17563 17564 + 17564 17565 17560 + 17560 17565 17566 + 17566 17561 17560 + 17562 17561 17566 + 17567 17563 16929 + 17564 17563 17567 + 17567 17568 17564 + 17564 17568 17569 + 17569 17570 17564 + 17565 17564 17570 + 17570 17571 17565 + 17566 17565 17571 + 16929 16928 17567 + 16934 17567 16928 + 17568 17567 16934 + 16934 16939 17568 + 17568 16939 17572 + 17572 17569 17568 + 17573 17569 17572 + 17569 17573 17574 + 17574 17570 17569 + 17571 17570 17574 + 17575 17572 16939 + 17576 17572 17575 + 17572 17576 17573 + 17573 17576 17577 + 17577 17578 17573 + 17574 17573 17578 + 16939 16938 17575 + 17579 17575 16938 + 17580 17575 17579 + 17575 17580 17576 + 17576 17580 17581 + 17581 17577 17576 + 17582 17577 17581 + 17578 17577 17582 + 16938 16943 17579 + 17583 17579 16943 + 17584 17579 17583 + 17579 17584 17580 + 17580 17584 17585 + 17585 17581 17580 + 17586 17581 17585 + 17581 17586 17582 + 16943 16947 17583 + 17587 17583 16947 + 17588 17583 17587 + 17583 17588 17584 + 17584 17588 17589 + 17589 17585 17584 + 17590 17585 17589 + 17585 17590 17586 + 16947 16951 17587 + 17591 17587 16951 + 17592 17587 17591 + 17587 17592 17588 + 17588 17592 17593 + 17593 17589 17588 + 17594 17589 17593 + 17589 17594 17590 + 16951 16955 17591 + 17595 17591 16955 + 17596 17591 17595 + 17591 17596 17592 + 17592 17596 17597 + 17597 17593 17592 + 17598 17593 17597 + 17593 17598 17594 + 16955 16960 17595 + 17599 17595 16960 + 17600 17595 17599 + 17595 17600 17596 + 17596 17600 17601 + 17601 17597 17596 + 17602 17597 17601 + 17597 17602 17598 + 16960 16964 17599 + 17603 17599 16964 + 17604 17599 17603 + 17599 17604 17600 + 17600 17604 17605 + 17605 17601 17600 + 17606 17601 17605 + 17601 17606 17602 + 16964 16968 17603 + 16977 17603 16968 + 17607 17603 16977 + 17603 17607 17604 + 17604 17607 17608 + 17608 17605 17604 + 17609 17605 17608 + 17605 17609 17606 + 17606 17609 17610 + 17610 17611 17606 + 17602 17606 17611 + 16977 16982 17607 + 17607 16982 17612 + 17612 17608 17607 + 17613 17608 17612 + 17608 17613 17609 + 17609 17613 17614 + 17614 17610 17609 + 17615 17610 17614 + 17610 17615 17616 + 17616 17611 17610 + 16987 17612 16982 + 17617 17612 16987 + 17612 17617 17613 + 17613 17617 17618 + 17618 17614 17613 + 17619 17614 17618 + 17614 17619 17615 + 17615 17619 17620 + 17620 17621 17615 + 17616 17615 17621 + 16987 16992 17617 + 17617 16992 17622 + 17622 17618 17617 + 17623 17618 17622 + 17618 17623 17619 + 17619 17623 17624 + 17624 17620 17619 + 17625 17620 17624 + 17620 17625 17626 + 17626 17621 17620 + 16997 17622 16992 + 17627 17622 16997 + 17622 17627 17623 + 17623 17627 17628 + 17628 17624 17623 + 17629 17624 17628 + 17624 17629 17625 + 17630 17625 17629 + 17626 17625 17630 + 16997 17002 17627 + 17627 17002 17631 + 17631 17628 17627 + 17632 17628 17631 + 17628 17632 17629 + 17629 17632 17633 + 17633 17634 17629 + 17634 17630 17629 + 17007 17631 17002 + 17635 17631 17007 + 17631 17635 17632 + 17632 17635 17636 + 17636 17633 17632 + 17637 17633 17636 + 17633 17637 17638 + 17638 17634 17633 + 17634 17638 17639 + 17639 17630 17634 + 17007 17012 17635 + 17635 17012 17640 + 17640 17636 17635 + 17641 17636 17640 + 17636 17641 17637 + 17642 17637 17641 + 17638 17637 17642 + 17642 17643 17638 + 17638 17643 17644 + 17644 17639 17638 + 17017 17640 17012 + 17645 17640 17017 + 17640 17645 17641 + 17641 17645 17646 + 17646 17647 17641 + 17641 17647 17642 + 17648 17642 17647 + 17642 17648 17649 + 17649 17643 17642 + 17017 17022 17645 + 17646 17645 17022 + 17022 17650 17646 + 17651 17646 17650 + 17646 17651 17652 + 17652 17647 17646 + 17647 17652 17648 + 17653 17648 17652 + 17649 17648 17653 + 17026 17650 17022 + 17040 17650 17026 + 17650 17040 17651 + 17654 17651 17040 + 17652 17651 17654 + 17654 17655 17652 + 17652 17655 17653 + 17656 17653 17655 + 17653 17656 17657 + 17657 17658 17653 + 17653 17658 17649 + 17040 17659 17654 + 17660 17654 17659 + 17654 17660 17661 + 17661 17655 17654 + 17655 17661 17656 + 17662 17656 17661 + 17657 17656 17662 + 17039 17659 17040 + 17663 17659 17039 + 17659 17663 17660 + 17664 17660 17663 + 17661 17660 17664 + 17664 17665 17661 + 17661 17665 17662 + 17039 17045 17663 + 17663 17045 17050 + 17050 17666 17663 + 17663 17666 17664 + 17667 17664 17666 + 17664 17667 17668 + 17668 17665 17664 + 17665 17668 17669 + 17669 17662 17665 + 17670 17666 17050 + 17666 17670 17667 + 17671 17667 17670 + 17668 17667 17671 + 17671 17672 17668 + 17668 17672 17673 + 17673 17669 17668 + 17674 17669 17673 + 17662 17669 17674 + 17050 17055 17670 + 17670 17055 17060 + 17060 17675 17670 + 17670 17675 17671 + 17676 17671 17675 + 17671 17676 17677 + 17677 17672 17671 + 17672 17677 17678 + 17678 17673 17672 + 17070 17675 17060 + 17675 17070 17676 + 17679 17676 17070 + 17677 17676 17679 + 17679 17680 17677 + 17677 17680 17681 + 17681 17678 17677 + 17682 17678 17681 + 17673 17678 17682 + 17682 17683 17673 + 17673 17683 17674 + 17070 17079 17679 + 17084 17679 17079 + 17679 17084 17684 + 17684 17680 17679 + 17680 17684 17685 + 17685 17681 17680 + 17681 17685 17686 + 17686 17687 17681 + 17681 17687 17682 + 17684 17084 17083 + 17083 17688 17684 + 17684 17688 17689 + 17689 17685 17684 + 17686 17685 17689 + 17689 17690 17686 + 17691 17686 17690 + 17687 17686 17691 + 17691 17692 17687 + 17682 17687 17692 + 17089 17688 17083 + 17688 17089 17094 + 17094 17689 17688 + 17689 17094 17693 + 17693 17690 17689 + 17690 17693 17694 + 17694 17695 17690 + 17690 17695 17691 + 17696 17691 17695 + 17692 17691 17696 + 17693 17094 17697 + 17697 17698 17693 + 17693 17698 17699 + 17699 17700 17693 + 17700 17694 17693 + 17701 17694 17700 + 17695 17694 17701 + 17695 17701 17696 + 17702 17697 17094 + 17703 17697 17702 + 17698 17697 17703 + 17703 17704 17698 + 17698 17704 17705 + 17705 17699 17698 + 17093 17702 17094 + 17706 17702 17093 + 17702 17706 17707 + 17702 17707 17703 + 17708 17703 17707 + 17704 17703 17708 + 17708 17709 17704 + 17704 17709 17710 + 17710 17705 17704 + 17093 17099 17706 + 17711 17706 17099 + 17707 17706 17711 + 17711 17712 17707 + 17707 17712 17708 + 17713 17708 17712 + 17708 17713 17714 + 17714 17709 17708 + 17709 17714 17715 + 17715 17710 17709 + 17099 17716 17711 + 17717 17711 17716 + 17711 17717 17167 + 17167 17712 17711 + 17712 17167 17713 + 17166 17713 17167 + 17714 17713 17166 + 17098 17716 17099 + 17108 17716 17098 + 17716 17108 17717 + 17155 17717 17108 + 17167 17717 17155 + 17166 17718 17714 + 17165 17718 17166 + 17718 17165 17719 + 17719 17720 17718 + 17714 17718 17720 + 17720 17715 17714 + 17721 17715 17720 + 17710 17715 17721 + 17721 17722 17710 + 17710 17722 17723 + 17723 17705 17710 + 17171 17719 17165 + 17724 17719 17171 + 17720 17719 17724 + 17724 17725 17720 + 17720 17725 17721 + 17721 17725 17726 + 17726 17727 17721 + 17722 17721 17727 + 17727 17728 17722 + 17723 17722 17728 + 17171 17729 17724 + 17724 17729 17730 + 17730 17731 17724 + 17725 17724 17731 + 17731 17726 17725 + 17175 17729 17171 + 17729 17175 17732 + 17732 17730 17729 + 17730 17732 17733 + 17733 17734 17730 + 17730 17734 17735 + 17735 17731 17730 + 17726 17731 17735 + 17179 17732 17175 + 17733 17732 17179 + 17179 17736 17733 + 17733 17736 17737 + 17737 17738 17733 + 17734 17733 17738 + 17738 17739 17734 + 17735 17734 17739 + 17184 17736 17179 + 17736 17184 17740 + 17740 17737 17736 + 17737 17740 17741 + 17741 17742 17737 + 17737 17742 17743 + 17743 17738 17737 + 17739 17738 17743 + 17189 17740 17184 + 17741 17740 17189 + 17189 17199 17741 + 17741 17199 17208 + 17208 17744 17741 + 17742 17741 17744 + 17744 17745 17742 + 17743 17742 17745 + 17745 17746 17743 + 17747 17743 17746 + 17743 17747 17739 + 17748 17744 17208 + 17745 17744 17748 + 17748 17749 17745 + 17745 17749 17750 + 17750 17746 17745 + 17751 17746 17750 + 17746 17751 17747 + 17752 17747 17751 + 17739 17747 17752 + 17208 17753 17748 + 17748 17753 17754 + 17754 17755 17748 + 17749 17748 17755 + 17755 17756 17749 + 17750 17749 17756 + 17207 17753 17208 + 17753 17207 17217 + 17217 17754 17753 + 17757 17754 17217 + 17754 17757 17758 + 17758 17755 17754 + 17755 17758 17759 + 17759 17756 17755 + 17756 17759 17760 + 17760 17761 17756 + 17756 17761 17750 + 17217 17216 17757 + 17757 17216 17762 + 17762 17763 17757 + 17758 17757 17763 + 17763 17764 17758 + 17759 17758 17764 + 17764 17765 17759 + 17760 17759 17765 + 17221 17762 17216 + 17766 17762 17221 + 17762 17766 17767 + 17767 17763 17762 + 17763 17767 17768 + 17768 17764 17763 + 17764 17768 17769 + 17769 17765 17764 + 17221 17225 17766 + 17766 17225 17770 + 17770 17771 17766 + 17767 17766 17771 + 17771 17772 17767 + 17768 17767 17772 + 17772 17773 17768 + 17769 17768 17773 + 17229 17770 17225 + 17774 17770 17229 + 17770 17774 17775 + 17775 17771 17770 + 17771 17775 17776 + 17776 17772 17771 + 17772 17776 17777 + 17777 17773 17772 + 17229 17234 17774 + 17774 17234 17778 + 17778 17779 17774 + 17775 17774 17779 + 17779 17780 17775 + 17776 17775 17780 + 17780 17781 17776 + 17777 17776 17781 + 17239 17778 17234 + 17782 17778 17239 + 17778 17782 17783 + 17783 17779 17778 + 17779 17783 17784 + 17784 17780 17779 + 17780 17784 17785 + 17785 17781 17780 + 17239 17786 17782 + 17782 17786 17787 + 17787 17788 17782 + 17783 17782 17788 + 17788 17789 17783 + 17784 17783 17789 + 17789 17790 17784 + 17785 17784 17790 + 17786 17239 17238 + 17238 17244 17786 + 17786 17244 17791 + 17791 17787 17786 + 17792 17787 17791 + 17787 17792 17793 + 17793 17788 17787 + 17788 17793 17794 + 17794 17789 17788 + 17789 17794 17795 + 17795 17790 17789 + 17249 17791 17244 + 17796 17791 17249 + 17791 17796 17792 + 17792 17796 17797 + 17797 17798 17792 + 17793 17792 17798 + 17798 17799 17793 + 17794 17793 17799 + 17799 17800 17794 + 17795 17794 17800 + 17249 17254 17796 + 17796 17254 17801 + 17801 17797 17796 + 17802 17797 17801 + 17798 17797 17802 + 17802 17803 17798 + 17798 17803 17804 + 17804 17799 17798 + 17800 17799 17804 + 17259 17801 17254 + 17801 17259 17264 + 17264 17805 17801 + 17801 17805 17802 + 17802 17805 17806 + 17806 17807 17802 + 17803 17802 17807 + 17807 17808 17803 + 17804 17803 17808 + 17805 17264 17809 + 17809 17806 17805 + 17806 17809 17810 + 17810 17811 17806 + 17806 17811 17812 + 17812 17807 17806 + 17808 17807 17812 + 17813 17809 17264 + 17810 17809 17813 + 17813 17814 17810 + 17810 17814 17815 + 17815 17816 17810 + 17811 17810 17816 + 17264 17263 17813 + 17263 17269 17813 + 17817 17813 17269 + 17813 17817 17818 + 17818 17814 17813 + 17814 17818 17819 + 17819 17815 17814 + 17269 17268 17817 + 17281 17817 17268 + 17818 17817 17281 + 17281 17820 17818 + 17818 17820 17821 + 17821 17819 17818 + 17822 17819 17821 + 17815 17819 17822 + 17822 17823 17815 + 17815 17823 17824 + 17824 17816 17815 + 17825 17820 17281 + 17820 17825 17826 + 17826 17821 17820 + 17821 17826 17827 + 17827 17828 17821 + 17821 17828 17822 + 17829 17822 17828 + 17823 17822 17829 + 17281 17286 17825 + 17825 17286 17291 + 17291 17830 17825 + 17825 17830 17831 + 17831 17826 17825 + 17827 17826 17831 + 17831 17832 17827 + 17833 17827 17832 + 17828 17827 17833 + 17833 17834 17828 + 17828 17834 17829 + 17306 17830 17291 + 17830 17306 17835 + 17835 17831 17830 + 17831 17835 17836 + 17836 17832 17831 + 17832 17836 17837 + 17837 17838 17832 + 17832 17838 17833 + 17839 17833 17838 + 17834 17833 17839 + 17314 17835 17306 + 17836 17835 17314 + 17314 17321 17836 + 17836 17321 17320 + 17837 17836 17320 + 17320 17329 17837 + 17840 17837 17329 + 17838 17837 17840 + 17840 17841 17838 + 17838 17841 17839 + 17842 17839 17841 + 17843 17839 17842 + 17839 17843 17834 + 17834 17843 17844 + 17844 17829 17834 + 17329 17328 17840 + 17845 17840 17328 + 17841 17840 17845 + 17845 17846 17841 + 17841 17846 17842 + 17847 17842 17846 + 17847 17848 17842 + 17842 17848 17843 + 17843 17848 17849 + 17849 17844 17843 + 17328 17334 17845 + 17334 17850 17845 + 17851 17845 17850 + 17846 17845 17851 + 17851 17852 17846 + 17846 17852 17847 + 17847 17852 17853 + 17854 17847 17853 + 17848 17847 17854 + 17854 17849 17848 + 17855 17850 17334 + 17850 17855 17856 + 17856 17857 17850 + 17850 17857 17851 + 17851 17857 17858 + 17858 17859 17851 + 17852 17851 17859 + 17859 17853 17852 + 17334 17333 17855 + 17855 17333 17860 + 17860 17861 17855 + 17856 17855 17861 + 17861 17862 17856 + 17856 17862 17471 + 17471 17863 17856 + 17857 17856 17863 + 17863 17858 17857 + 17332 17860 17333 + 17864 17860 17332 + 17860 17864 17865 + 17865 17861 17860 + 17862 17861 17865 + 17862 17865 17866 + 17866 17867 17862 + 17862 17867 17471 + 17453 17471 17867 + 17332 17331 17864 + 17864 17331 17868 + 17868 17869 17864 + 17865 17864 17869 + 17869 17866 17865 + 17870 17866 17869 + 17866 17870 17871 + 17871 17867 17866 + 17867 17871 17453 + 17868 17331 17338 + 17338 17872 17868 + 17873 17868 17872 + 17868 17873 17869 + 17869 17873 17870 + 17870 17873 17874 + 17874 17875 17870 + 17871 17870 17875 + 17875 17876 17871 + 17453 17871 17876 + 17347 17872 17338 + 17872 17347 17877 + 17877 17874 17872 + 17872 17874 17873 + 17877 17347 17878 + 17878 17879 17877 + 17880 17877 17879 + 17874 17877 17880 + 17880 17875 17874 + 17876 17875 17880 + 17876 17880 17881 + 17881 17882 17876 + 17876 17882 17453 + 17882 17454 17453 + 17346 17878 17347 + 17367 17878 17346 + 17367 17879 17878 + 17879 17367 17375 + 17375 17883 17879 + 17879 17883 17880 + 17883 17881 17880 + 17389 17881 17883 + 17882 17881 17389 + 17882 17389 17884 + 17884 17454 17882 + 17884 17437 17454 + 17437 17884 17388 + 17388 17884 17389 + 17885 17883 17375 + 17883 17885 17389 + 17389 17885 17384 + 17373 17384 17885 + 17885 17374 17373 + 17375 17374 17885 + 17470 17863 17471 + 17863 17470 17858 + 17858 17470 17469 + 17469 17859 17858 + 17859 17469 17853 + 17853 17469 17468 + 17468 17886 17853 + 17853 17886 17854 + 17887 17854 17886 + 17854 17887 17888 + 17888 17849 17854 + 17886 17468 17889 + 17886 17889 17887 + 17890 17887 17889 + 17888 17887 17890 + 17890 17891 17888 + 17892 17888 17891 + 17849 17888 17892 + 17892 17844 17849 + 17889 17468 17467 + 17467 17893 17889 + 17889 17893 17890 + 17894 17890 17893 + 17890 17894 17895 + 17895 17891 17890 + 17891 17895 17896 + 17896 17897 17891 + 17891 17897 17892 + 17893 17467 17898 + 17893 17898 17894 + 17899 17894 17898 + 17895 17894 17899 + 17899 17900 17895 + 17896 17895 17900 + 17900 17901 17896 + 17902 17896 17901 + 17897 17896 17902 + 17898 17467 17466 + 17466 17903 17898 + 17898 17903 17899 + 17904 17899 17903 + 17899 17904 17905 + 17905 17900 17899 + 17900 17905 17906 + 17906 17901 17900 + 17903 17466 17907 + 17903 17907 17904 + 17908 17904 17907 + 17905 17904 17908 + 17908 17909 17905 + 17906 17905 17909 + 17909 17910 17906 + 17911 17906 17910 + 17901 17906 17911 + 17907 17466 17465 + 17465 17912 17907 + 17907 17912 17908 + 17913 17908 17912 + 17908 17913 17914 + 17914 17909 17908 + 17909 17914 17915 + 17915 17910 17909 + 17912 17465 17916 + 17912 17916 17913 + 17917 17913 17916 + 17914 17913 17917 + 17917 17918 17914 + 17915 17914 17918 + 17918 17919 17915 + 17920 17915 17919 + 17910 17915 17920 + 17916 17465 17464 + 17464 17921 17916 + 17916 17921 17922 + 17922 17923 17916 + 17923 17917 17916 + 17924 17917 17923 + 17917 17924 17918 + 17918 17924 17925 + 17925 17919 17918 + 17921 17464 17476 + 17921 17476 17926 + 17926 17922 17921 + 17922 17926 17927 + 17927 17928 17922 + 17922 17928 17929 + 17929 17923 17922 + 17923 17929 17930 + 17923 17930 17924 + 17925 17924 17930 + 17480 17926 17476 + 17927 17926 17480 + 17480 17931 17927 + 17927 17931 17932 + 17932 17933 17927 + 17928 17927 17933 + 17933 17934 17928 + 17929 17928 17934 + 17484 17931 17480 + 17931 17484 17489 + 17489 17932 17931 + 17932 17489 17935 + 17935 17936 17932 + 17932 17936 17937 + 17937 17933 17932 + 17934 17933 17937 + 17935 17489 17488 + 17488 17938 17935 + 17935 17938 17939 + 17939 17940 17935 + 17936 17935 17940 + 17940 17941 17936 + 17936 17941 17942 + 17942 17937 17936 + 17938 17488 17494 + 17938 17494 17943 + 17943 17939 17938 + 17939 17943 17944 + 17944 17945 17939 + 17939 17945 17946 + 17946 17940 17939 + 17941 17940 17946 + 17498 17943 17494 + 17944 17943 17498 + 17498 17505 17944 + 17947 17944 17505 + 17945 17944 17947 + 17947 17948 17945 + 17945 17948 17949 + 17949 17950 17945 + 17950 17951 17945 + 17951 17946 17945 + 17952 17947 17505 + 17953 17947 17952 + 17948 17947 17953 + 17953 17954 17948 + 17948 17954 17955 + 17955 17949 17948 + 17505 17509 17952 + 17956 17952 17509 + 17957 17952 17956 + 17952 17957 17953 + 17958 17953 17957 + 17954 17953 17958 + 17509 17514 17956 + 17959 17956 17514 + 17957 17956 17959 + 17959 17960 17957 + 17957 17960 17958 + 17961 17958 17960 + 17962 17958 17961 + 17958 17962 17954 + 17514 17963 17959 + 17964 17959 17963 + 17960 17959 17964 + 17964 17965 17960 + 17960 17965 17961 + 17966 17961 17965 + 17967 17961 17966 + 17961 17967 17962 + 17513 17963 17514 + 17963 17513 17519 + 17519 17968 17963 + 17963 17968 17964 + 17969 17964 17968 + 17965 17964 17969 + 17969 17970 17965 + 17965 17970 17966 + 17968 17519 17524 + 17524 17971 17968 + 17968 17971 17969 + 17972 17969 17971 + 17969 17972 17973 + 17973 17970 17969 + 17970 17973 17974 + 17974 17966 17970 + 17533 17971 17524 + 17971 17533 17972 + 17550 17972 17533 + 17973 17972 17550 + 17550 17975 17973 + 17973 17975 17976 + 17976 17974 17973 + 17977 17974 17976 + 17966 17974 17977 + 17977 17978 17966 + 17966 17978 17967 + 17549 17975 17550 + 17975 17549 17979 + 17979 17976 17975 + 17976 17979 17980 + 17980 17981 17976 + 17976 17981 17977 + 17977 17981 17982 + 17982 17983 17977 + 17978 17977 17983 + 17554 17979 17549 + 17980 17979 17554 + 17554 17984 17980 + 17980 17984 17985 + 17985 17986 17980 + 17981 17980 17986 + 17986 17982 17981 + 17558 17984 17554 + 17984 17558 17987 + 17987 17985 17984 + 17985 17987 17988 + 17988 17989 17985 + 17985 17989 17990 + 17990 17986 17985 + 17982 17986 17990 + 17562 17987 17558 + 17988 17987 17562 + 17562 17991 17988 + 17988 17991 17992 + 17992 17993 17988 + 17989 17988 17993 + 17993 17994 17989 + 17990 17989 17994 + 17566 17991 17562 + 17991 17566 17995 + 17995 17992 17991 + 17992 17995 17996 + 17996 17997 17992 + 17992 17997 17998 + 17998 17993 17992 + 17994 17993 17998 + 17571 17995 17566 + 17996 17995 17571 + 17571 17999 17996 + 17996 17999 18000 + 18000 18001 17996 + 17997 17996 18001 + 18001 18002 17997 + 17998 17997 18002 + 17574 17999 17571 + 17999 17574 18003 + 18003 18000 17999 + 18000 18003 18004 + 18004 18005 18000 + 18000 18005 18006 + 18006 18001 18000 + 18002 18001 18006 + 17578 18003 17574 + 18004 18003 17578 + 17578 18007 18004 + 18004 18007 18008 + 18008 18009 18004 + 18005 18004 18009 + 18009 18010 18005 + 18006 18005 18010 + 17582 18007 17578 + 18007 17582 18011 + 18011 18008 18007 + 18008 18011 18012 + 18012 18013 18008 + 18008 18013 18014 + 18014 18009 18008 + 18010 18009 18014 + 18015 18011 17582 + 18012 18011 18015 + 18015 18016 18012 + 18012 18016 18017 + 18017 18018 18012 + 18013 18012 18018 + 17582 17586 18015 + 18019 18015 17586 + 18016 18015 18019 + 18019 18020 18016 + 18016 18020 18021 + 18021 18017 18016 + 18022 18017 18021 + 18017 18022 18023 + 18023 18018 18017 + 17586 17590 18019 + 18024 18019 17590 + 18020 18019 18024 + 18024 18025 18020 + 18020 18025 18026 + 18026 18021 18020 + 18027 18021 18026 + 18021 18027 18022 + 17590 17594 18024 + 18028 18024 17594 + 18025 18024 18028 + 18028 18029 18025 + 18025 18029 18030 + 18030 18026 18025 + 18031 18026 18030 + 18026 18031 18027 + 18032 18027 18031 + 18022 18027 18032 + 17594 17598 18028 + 18033 18028 17598 + 18029 18028 18033 + 18033 18034 18029 + 18029 18034 18035 + 18030 18029 18035 + 17598 17602 18033 + 17611 18033 17602 + 18034 18033 17611 + 17611 17616 18034 + 18034 17616 18036 + 18036 118 18034 + 18037 118 18036 + 118 18037 18038 + 18037 18039 18038 + 257 18039 18037 + 17621 18036 17616 + 18040 18036 17621 + 18036 18040 18037 + 18037 18040 257 + 257 18040 17626 + 18041 257 17626 + 18042 257 18041 + 257 18042 18043 + 17621 17626 18040 + 17630 18041 17626 + 18041 17630 17639 + 18044 18041 17639 + 18041 18044 18042 + 18045 18042 18044 + 18043 18042 18045 + 18045 18046 18043 + 18043 18046 18030 + 18047 18030 18046 + 18030 18047 18031 + 18044 17639 17644 + 17644 18048 18044 + 18044 18048 18045 + 18049 18045 18048 + 18045 18049 18050 + 18050 18046 18045 + 18046 18050 18047 + 18051 18047 18050 + 18031 18047 18051 + 18051 18052 18031 + 18031 18052 18032 + 18053 18048 17644 + 18048 18053 18049 + 18054 18049 18053 + 18050 18049 18054 + 18054 18055 18050 + 18050 18055 18051 + 18056 18051 18055 + 18051 18056 18057 + 18057 18052 18051 + 17644 18058 18053 + 18053 18058 18059 + 18059 18060 18053 + 18053 18060 18054 + 18061 18054 18060 + 18054 18061 18062 + 18062 18055 18054 + 18055 18062 18056 + 18058 17644 17643 + 17643 17649 18058 + 18059 18058 17649 + 17649 17658 18059 + 18063 18059 17658 + 18059 18063 18064 + 18064 18060 18059 + 18060 18064 18061 + 18065 18061 18064 + 18062 18061 18065 + 18065 18066 18062 + 18062 18066 18067 + 18067 18056 18062 + 18057 18056 18067 + 17658 17657 18063 + 18068 18063 17657 + 18064 18063 18068 + 18068 18069 18064 + 18064 18069 18065 + 18070 18065 18069 + 18065 18070 18071 + 18071 18066 18065 + 18066 18071 18072 + 18072 18067 18066 + 17657 18073 18068 + 18074 18068 18073 + 18068 18074 18075 + 18075 18069 18068 + 18069 18075 18070 + 18076 18070 18075 + 18071 18070 18076 + 17662 18073 17657 + 17674 18073 17662 + 18073 17674 18074 + 18077 18074 17674 + 18075 18074 18077 + 18077 18078 18075 + 18075 18078 18076 + 18079 18076 18078 + 18076 18079 18080 + 18080 18081 18076 + 18076 18081 18071 + 17674 17683 18077 + 18082 18077 17683 + 18077 18082 18083 + 18083 18078 18077 + 18078 18083 18079 + 18084 18079 18083 + 18080 18079 18084 + 17683 17682 18082 + 17692 18082 17682 + 18083 18082 17692 + 17692 18085 18083 + 18083 18085 18084 + 18086 18084 18085 + 18084 18086 18087 + 18087 18088 18084 + 18084 18088 18080 + 17696 18085 17692 + 18085 17696 18086 + 18089 18086 17696 + 18087 18086 18089 + 18089 18090 18087 + 18087 18090 18091 + 18091 18092 18087 + 18088 18087 18092 + 18092 18093 18088 + 18080 18088 18093 + 17696 17701 18089 + 17700 18089 17701 + 18089 17700 18094 + 18094 18090 18089 + 18090 18094 18095 + 18095 18091 18090 + 18091 18095 18096 + 18096 18097 18091 + 18091 18097 18098 + 18098 18092 18091 + 18093 18092 18098 + 18094 17700 17699 + 17699 18099 18094 + 18095 18094 18099 + 18099 18100 18095 + 18096 18095 18100 + 18100 18101 18096 + 18102 18096 18101 + 18097 18096 18102 + 18102 18103 18097 + 18098 18097 18103 + 18099 17699 17705 + 17705 17723 18099 + 18099 17723 18104 + 18104 18100 18099 + 18101 18100 18104 + 18104 18105 18101 + 18101 18105 18106 + 18106 18107 18101 + 18101 18107 18102 + 18108 18102 18107 + 18103 18102 18108 + 17728 18104 17723 + 18105 18104 17728 + 17728 18109 18105 + 18105 18109 18110 + 18110 18106 18105 + 18111 18106 18110 + 18106 18111 18112 + 18112 18107 18106 + 18107 18112 18108 + 18113 18109 17728 + 18109 18113 18114 + 18114 18110 18109 + 18110 18114 18115 + 18115 18116 18110 + 18110 18116 18111 + 17728 17727 18113 + 18113 17727 17726 + 17726 18117 18113 + 18113 18117 18118 + 18118 18114 18113 + 18115 18114 18118 + 18118 18119 18115 + 18115 18119 18120 + 18120 18121 18115 + 18116 18115 18121 + 17735 18117 17726 + 18117 17735 18122 + 18122 18118 18117 + 18118 18122 17752 + 17752 18119 18118 + 18119 17752 18123 + 18123 18120 18119 + 17739 18122 17735 + 17752 18122 17739 + 17751 18123 17752 + 18124 18123 17751 + 18120 18123 18124 + 18124 18125 18120 + 18120 18125 18126 + 18126 18121 18120 + 18127 18121 18126 + 18121 18127 18116 + 18111 18116 18127 + 18127 18128 18111 + 18112 18111 18128 + 17751 18129 18124 + 18124 18129 18130 + 18130 18131 18124 + 18125 18124 18131 + 18131 18132 18125 + 18126 18125 18132 + 17750 18129 17751 + 18129 17750 17761 + 17761 18130 18129 + 18133 18130 17761 + 18130 18133 18134 + 18134 18131 18130 + 18131 18134 18135 + 18135 18132 18131 + 18132 18135 18136 + 18136 18137 18132 + 18132 18137 18126 + 17761 17760 18133 + 18133 17760 18138 + 18138 18139 18133 + 18134 18133 18139 + 18139 18140 18134 + 18135 18134 18140 + 18140 18141 18135 + 18136 18135 18141 + 17765 18138 17760 + 18142 18138 17765 + 18138 18142 18143 + 18143 18139 18138 + 18139 18143 18144 + 18144 18140 18139 + 18140 18144 18145 + 18145 18141 18140 + 17765 17769 18142 + 18142 17769 18146 + 18146 18147 18142 + 18143 18142 18147 + 18147 18148 18143 + 18144 18143 18148 + 18148 18149 18144 + 18145 18144 18149 + 17773 18146 17769 + 18150 18146 17773 + 18146 18150 18151 + 18151 18147 18146 + 18147 18151 18152 + 18152 18148 18147 + 18148 18152 18153 + 18153 18149 18148 + 17773 17777 18150 + 18150 17777 18154 + 18154 18155 18150 + 18151 18150 18155 + 18155 18156 18151 + 18152 18151 18156 + 18156 18157 18152 + 18153 18152 18157 + 17781 18154 17777 + 18158 18154 17781 + 18154 18158 18159 + 18159 18155 18154 + 18155 18159 18160 + 18160 18156 18155 + 18156 18160 18161 + 18161 18157 18156 + 17781 17785 18158 + 18158 17785 18162 + 18162 18163 18158 + 18159 18158 18163 + 18163 18164 18159 + 18160 18159 18164 + 18164 18165 18160 + 18161 18160 18165 + 17790 18162 17785 + 18166 18162 17790 + 18162 18166 18167 + 18167 18163 18162 + 18163 18167 18168 + 18168 18164 18163 + 18164 18168 18169 + 18169 18165 18164 + 17790 17795 18166 + 18166 17795 18170 + 18170 18171 18166 + 18167 18166 18171 + 18171 18172 18167 + 18168 18167 18172 + 18172 18173 18168 + 18169 18168 18173 + 17800 18170 17795 + 18174 18170 17800 + 18170 18174 18171 + 18171 18174 18175 + 18175 18172 18171 + 18173 18172 18175 + 18175 18176 18173 + 18173 18176 18177 + 18177 18178 18173 + 18173 18178 18169 + 17800 18179 18174 + 18174 18179 18180 + 18175 18174 18180 + 18180 18181 18175 + 18176 18175 18181 + 18181 18182 18176 + 18177 18176 18182 + 17804 18179 17800 + 18179 17804 18183 + 18183 18180 18179 + 18180 18183 18184 + 18184 18185 18180 + 18180 18185 18186 + 18186 18181 18180 + 18181 18186 18182 + 17808 18183 17804 + 18184 18183 17808 + 17808 18187 18184 + 18184 18187 18188 + 18188 18189 18184 + 18185 18184 18189 + 18189 18190 18185 + 18186 18185 18190 + 18191 18186 18190 + 18182 18186 18191 + 17812 18187 17808 + 18187 17812 18192 + 18192 18188 18187 + 18188 18192 18193 + 18193 18194 18188 + 18188 18194 18195 + 18195 18189 18188 + 18190 18189 18195 + 18192 17812 17811 + 17811 18196 18192 + 18193 18192 18196 + 18196 18197 18193 + 18193 18197 17902 + 17902 18198 18193 + 18194 18193 18198 + 17816 18196 17811 + 18197 18196 17816 + 17816 17824 18197 + 18197 17824 18199 + 18199 17902 18197 + 17902 18199 17897 + 17897 18199 18200 + 18200 17892 17897 + 17844 17892 18200 + 18200 17829 17844 + 18199 17824 17823 + 17823 18200 18199 + 17829 18200 17823 + 17901 18198 17902 + 17911 18198 17901 + 18198 17911 18194 + 18194 17911 18201 + 18201 18195 18194 + 18202 18195 18201 + 18195 18202 18190 + 18190 18202 18203 + 18203 18204 18190 + 18190 18204 18191 + 17910 18201 17911 + 17920 18201 17910 + 18201 17920 18202 + 18202 17920 18205 + 18205 18203 18202 + 18206 18203 18205 + 18203 18206 18207 + 18207 18204 18203 + 18204 18207 18208 + 18208 18191 18204 + 17919 18205 17920 + 18209 18205 17919 + 18205 18209 18206 + 18206 18209 18210 + 18210 18211 18206 + 18207 18206 18211 + 18211 18212 18207 + 18207 18212 18213 + 18213 18208 18207 + 17919 17925 18209 + 18209 17925 18214 + 18214 18210 18209 + 18210 18214 18215 + 18210 18215 18216 + 18216 18211 18210 + 18211 18216 18217 + 18217 18212 18211 + 18212 18217 18218 + 18218 18213 18212 + 18214 17925 17930 + 17930 18219 18214 + 18215 18214 18219 + 18219 18220 18215 + 18216 18215 18220 + 18220 18221 18216 + 18217 18216 18221 + 18221 18222 18217 + 18217 18222 18223 + 18223 18218 18217 + 18224 18219 17930 + 18219 18224 18225 + 18225 18220 18219 + 18220 18225 18226 + 18226 18221 18220 + 18221 18226 18227 + 18227 18222 18221 + 18222 18227 18228 + 18228 18223 18222 + 17930 17929 18224 + 18229 18224 17929 + 18225 18224 18229 + 18229 18230 18225 + 18226 18225 18230 + 18230 18231 18226 + 18227 18226 18231 + 17934 18229 17929 + 18232 18229 17934 + 18230 18229 18232 + 18230 18232 18233 + 18233 18231 18230 + 18231 18233 18234 + 18234 18235 18231 + 18231 18235 18227 + 17934 18236 18232 + 18233 18232 18236 + 18236 18237 18233 + 18234 18233 18237 + 17937 18236 17934 + 18236 17937 17942 + 17942 18237 18236 + 18237 17942 18238 + 18238 18239 18237 + 18237 18239 18234 + 18238 17942 17941 + 17941 18240 18238 + 18238 18240 18241 + 18241 18242 18238 + 18242 18243 18238 + 18243 18244 18238 + 18239 18238 18244 + 17946 18240 17941 + 18240 17946 17951 + 17951 18241 18240 + 18241 17951 18245 + 18245 18246 18241 + 18241 18246 18247 + 18247 18242 18241 + 18248 18242 18247 + 18242 18248 18249 + 18249 18243 18242 + 18245 17951 17950 + 17950 18250 18245 + 18251 18245 18250 + 18246 18245 18251 + 18251 18252 18246 + 18246 18252 18253 + 18253 18247 18246 + 18248 18247 18253 + 18253 18254 18248 + 18249 18248 18254 + 18250 17950 18255 + 18250 18255 18256 + 18256 18257 18250 + 18250 18257 18251 + 18258 18251 18257 + 18252 18251 18258 + 18255 17950 17949 + 17949 18259 18255 + 18256 18255 18259 + 18259 18260 18256 + 18261 18256 18260 + 18257 18256 18261 + 18261 18262 18257 + 18257 18262 18258 + 18259 17949 17955 + 18259 17955 18263 + 18263 18260 18259 + 18260 18263 18264 + 18264 18265 18260 + 18260 18265 18261 + 18266 18261 18265 + 18262 18261 18266 + 18263 17955 17954 + 18267 18263 17954 + 18264 18263 18267 + 18267 18268 18264 + 18269 18264 18268 + 18265 18264 18269 + 18269 18270 18265 + 18265 18270 18266 + 17954 17962 18267 + 18271 18267 17962 + 18268 18267 18271 + 18268 18271 18272 + 18272 18273 18268 + 18268 18273 18269 + 18274 18269 18273 + 18269 18274 18275 + 18275 18270 18269 + 17962 17967 18271 + 18272 18271 17967 + 17967 17978 18272 + 17983 18272 17978 + 18272 17983 18276 + 18276 18273 18272 + 18273 18276 18274 + 18277 18274 18276 + 18275 18274 18277 + 18277 18278 18275 + 18275 18278 18279 + 18279 18280 18275 + 18270 18275 18280 + 18280 18266 18270 + 18276 17983 17982 + 17982 18281 18276 + 18276 18281 18277 + 18282 18277 18281 + 18277 18282 18283 + 18283 18278 18277 + 18278 18283 18284 + 18284 18279 18278 + 17990 18281 17982 + 18281 17990 18282 + 17994 18282 17990 + 18283 18282 17994 + 17994 18285 18283 + 18283 18285 18286 + 18286 18284 18283 + 18287 18284 18286 + 18279 18284 18287 + 18287 18288 18279 + 18279 18288 18289 + 18289 18280 18279 + 18266 18280 18289 + 17998 18285 17994 + 18285 17998 18290 + 18290 18286 18285 + 18286 18290 18291 + 18291 18292 18286 + 18286 18292 18287 + 18287 18292 18293 + 18293 18294 18287 + 18288 18287 18294 + 18002 18290 17998 + 18291 18290 18002 + 18002 18295 18291 + 18291 18295 18296 + 18296 18297 18291 + 18292 18291 18297 + 18297 18293 18292 + 18006 18295 18002 + 18295 18006 18298 + 18298 18296 18295 + 18296 18298 18299 + 18299 18300 18296 + 18296 18300 18301 + 18301 18297 18296 + 18293 18297 18301 + 18010 18298 18006 + 18299 18298 18010 + 18010 18302 18299 + 18299 18302 18303 + 18303 18304 18299 + 18300 18299 18304 + 18304 18305 18300 + 18301 18300 18305 + 18014 18302 18010 + 18302 18014 18306 + 18306 18303 18302 + 18303 18306 18307 + 18303 18307 18308 + 18308 18304 18303 + 18305 18304 18308 + 18308 18309 18305 + 18305 18309 18310 + 18310 18311 18305 + 18305 18311 18301 + 18307 18306 18312 + 18312 18313 18307 + 18308 18307 18313 + 18313 18314 18308 + 18309 18308 18314 + 18314 18315 18309 + 18309 18315 18316 + 18316 18310 18309 + 18313 18312 18317 + 18313 18317 18318 + 18318 18314 18313 + 18315 18314 18318 + 18318 18319 18315 + 18315 18319 18320 + 18320 18316 18315 + 18317 18312 18321 + 18321 18322 18317 + 18317 18322 18323 + 18323 18318 18317 + 18319 18318 18323 + 18323 18324 18319 + 18319 18324 18325 + 18325 18320 18319 + 18326 18321 18312 + 18327 18321 18326 + 18322 18321 18327 + 18327 18328 18322 + 18322 18328 18329 + 18329 18323 18322 + 18324 18323 18329 + 18013 18326 18312 + 18018 18326 18013 + 18326 18018 18023 + 18023 18330 18326 + 18326 18330 18327 + 18331 18327 18330 + 18328 18327 18331 + 18014 18013 18312 + 18331 18332 18328 + 18332 18331 18333 + 18333 18334 18332 + 18332 18334 18335 + 18335 18336 18332 + 18328 18332 18336 + 18336 18329 18328 + 18337 18329 18336 + 18329 18337 18324 + 18333 18331 18338 + 18338 18339 18333 + 18340 18333 18339 + 18334 18333 18340 + 18340 18341 18334 + 18334 18341 18342 + 18342 18335 18334 + 18330 18338 18331 + 18343 18338 18330 + 18338 18343 18344 + 18344 18339 18338 + 18339 18344 18345 + 18345 18346 18339 + 18339 18346 18340 + 18347 18340 18346 + 18341 18340 18347 + 18330 18023 18343 + 18343 18023 18022 + 18022 18348 18343 + 18344 18343 18348 + 18348 18349 18344 + 18345 18344 18349 + 18349 18350 18345 + 18351 18345 18350 + 18345 18351 18352 + 18352 18346 18345 + 18346 18352 18347 + 18032 18348 18022 + 18349 18348 18032 + 18032 18353 18349 + 18349 18353 18354 + 18354 18350 18349 + 18355 18350 18354 + 18350 18355 18351 + 18356 18351 18355 + 18352 18351 18356 + 18353 18032 18052 + 18052 18057 18353 + 18354 18353 18057 + 18057 18357 18354 + 18358 18354 18357 + 18354 18358 18355 + 18355 18358 18359 + 18359 18360 18355 + 18355 18360 18356 + 18067 18357 18057 + 18361 18357 18067 + 18357 18361 18358 + 18359 18358 18361 + 18361 18362 18359 + 18363 18359 18362 + 18359 18363 18364 + 18364 18360 18359 + 18360 18364 18365 + 18365 18356 18360 + 18067 18072 18361 + 18361 18072 18366 + 18366 18362 18361 + 18367 18362 18366 + 18362 18367 18363 + 18368 18363 18367 + 18364 18363 18368 + 18368 18369 18364 + 18364 18369 18370 + 18370 18365 18364 + 18366 18072 18071 + 18071 18081 18366 + 18371 18366 18081 + 18366 18371 18367 + 18367 18371 18093 + 18093 18372 18367 + 18367 18372 18368 + 18373 18368 18372 + 18368 18373 18374 + 18374 18369 18368 + 18081 18080 18371 + 18093 18371 18080 + 18098 18372 18093 + 18372 18098 18373 + 18103 18373 18098 + 18374 18373 18103 + 18103 18375 18374 + 18374 18375 18376 + 18376 18377 18374 + 18369 18374 18377 + 18377 18370 18369 + 18108 18375 18103 + 18375 18108 18378 + 18378 18376 18375 + 18376 18378 18379 + 18379 18380 18376 + 18376 18380 18381 + 18381 18377 18376 + 18370 18377 18381 + 18378 18108 18112 + 18112 18382 18378 + 18379 18378 18382 + 18382 18383 18379 + 18379 18383 18384 + 18384 18385 18379 + 18380 18379 18385 + 18385 18386 18380 + 18381 18380 18386 + 18128 18382 18112 + 18382 18128 18387 + 18387 18383 18382 + 18383 18387 18388 + 18388 18384 18383 + 18389 18384 18388 + 18384 18389 18390 + 18390 18385 18384 + 18385 18390 18391 + 18391 18386 18385 + 18387 18128 18127 + 18127 18392 18387 + 18387 18392 18393 + 18393 18388 18387 + 18394 18388 18393 + 18388 18394 18389 + 18389 18394 18395 + 18395 18396 18389 + 18390 18389 18396 + 18126 18392 18127 + 18392 18126 18137 + 18137 18393 18392 + 18397 18393 18137 + 18393 18397 18394 + 18394 18397 18398 + 18398 18395 18394 + 18399 18395 18398 + 18395 18399 18400 + 18400 18396 18395 + 18137 18136 18397 + 18397 18136 18401 + 18401 18398 18397 + 18402 18398 18401 + 18398 18402 18399 + 18399 18402 18403 + 18403 18404 18399 + 18400 18399 18404 + 18141 18401 18136 + 18405 18401 18141 + 18401 18405 18402 + 18402 18405 18406 + 18406 18403 18402 + 18407 18403 18406 + 18403 18407 18408 + 18408 18404 18403 + 18141 18145 18405 + 18405 18145 18409 + 18409 18406 18405 + 18410 18406 18409 + 18406 18410 18407 + 18407 18410 18411 + 18411 18412 18407 + 18408 18407 18412 + 18149 18409 18145 + 18413 18409 18149 + 18409 18413 18410 + 18410 18413 18414 + 18414 18411 18410 + 18415 18411 18414 + 18411 18415 18416 + 18416 18412 18411 + 18149 18153 18413 + 18413 18153 18417 + 18417 18414 18413 + 18418 18414 18417 + 18414 18418 18415 + 18415 18418 18419 + 18419 18420 18415 + 18416 18415 18420 + 18157 18417 18153 + 18421 18417 18157 + 18417 18421 18418 + 18418 18421 18422 + 18422 18419 18418 + 18423 18419 18422 + 18419 18423 18424 + 18424 18420 18419 + 18157 18161 18421 + 18421 18161 18425 + 18425 18422 18421 + 18426 18422 18425 + 18422 18426 18423 + 18423 18426 18427 + 18427 18428 18423 + 18424 18423 18428 + 18165 18425 18161 + 18429 18425 18165 + 18425 18429 18426 + 18426 18429 18430 + 18430 18427 18426 + 18431 18427 18430 + 18428 18427 18431 + 18165 18169 18429 + 18429 18169 18178 + 18178 18430 18429 + 18430 18178 18177 + 18177 18432 18430 + 18430 18432 18431 + 18431 18432 18433 + 18433 18434 18431 + 18435 18431 18434 + 18431 18435 18428 + 18432 18177 18436 + 18436 18433 18432 + 18433 18436 18191 + 18191 18208 18433 + 18433 18208 18213 + 18213 18434 18433 + 18437 18434 18213 + 18434 18437 18435 + 18182 18436 18177 + 18191 18436 18182 + 18213 18218 18437 + 18437 18218 18223 + 18223 18438 18437 + 18437 18438 18439 + 18439 18440 18437 + 18440 18435 18437 + 18428 18435 18440 + 18440 18441 18428 + 18428 18441 18424 + 18442 18438 18223 + 18438 18442 18443 + 18443 18439 18438 + 18439 18443 18444 + 18444 18445 18439 + 18439 18445 18446 + 18446 18440 18439 + 18441 18440 18446 + 18223 18228 18442 + 18442 18228 18447 + 18447 18448 18442 + 18442 18448 18449 + 18449 18443 18442 + 18444 18443 18449 + 18447 18228 18227 + 18450 18447 18227 + 18451 18447 18450 + 18448 18447 18451 + 18448 18451 18452 + 18452 18449 18448 + 18449 18452 18453 + 18453 18454 18449 + 18449 18454 18444 + 18227 18235 18450 + 18455 18450 18235 + 18450 18455 18456 + 18456 18457 18450 + 18450 18457 18451 + 18451 18457 18458 + 18458 18452 18451 + 18453 18452 18458 + 18235 18234 18455 + 18459 18455 18234 + 18456 18455 18459 + 18459 18460 18456 + 18456 18460 18461 + 18461 18462 18456 + 18462 18463 18456 + 18457 18456 18463 + 18463 18458 18457 + 18464 18459 18234 + 18465 18459 18464 + 18460 18459 18465 + 18460 18465 18466 + 18466 18461 18460 + 18467 18464 18234 + 18468 18464 18467 + 18469 18464 18468 + 18464 18469 18465 + 18465 18469 18470 + 18470 18466 18465 + 18471 18466 18470 + 18461 18466 18471 + 18234 18239 18467 + 18244 18467 18239 + 18467 18244 18472 + 18472 18473 18467 + 18467 18473 18468 + 18468 18473 18474 + 18474 18475 18468 + 18469 18468 18475 + 18475 18470 18469 + 18472 18244 18243 + 18243 18476 18472 + 18472 18476 18477 + 18477 18478 18472 + 18473 18472 18478 + 18478 18474 18473 + 18476 18243 18249 + 18476 18249 18479 + 18479 18477 18476 + 18477 18479 18480 + 18480 18481 18477 + 18477 18481 18482 + 18482 18478 18477 + 18474 18478 18482 + 18254 18479 18249 + 18480 18479 18254 + 18254 18483 18480 + 18480 18483 18484 + 18484 18485 18480 + 18481 18480 18485 + 18485 18486 18481 + 18481 18486 18487 + 18487 18482 18481 + 18488 18483 18254 + 18483 18488 18489 + 18489 18484 18483 + 18490 18484 18489 + 18484 18490 18491 + 18491 18485 18484 + 18485 18491 18492 + 18492 18486 18485 + 18254 18253 18488 + 18488 18253 18252 + 18252 18493 18488 + 18488 18493 18494 + 18494 18489 18488 + 18495 18489 18494 + 18489 18495 18490 + 18490 18495 18496 + 18496 18497 18490 + 18491 18490 18497 + 18258 18493 18252 + 18493 18258 18498 + 18498 18494 18493 + 18499 18494 18498 + 18494 18499 18495 + 18496 18495 18499 + 18499 18500 18496 + 18501 18496 18500 + 18496 18501 18502 + 18502 18497 18496 + 18498 18258 18262 + 18262 18503 18498 + 18504 18498 18503 + 18498 18504 18499 + 18499 18504 18505 + 18505 18500 18499 + 18506 18500 18505 + 18500 18506 18501 + 18507 18501 18506 + 18502 18501 18507 + 18266 18503 18262 + 18289 18503 18266 + 18503 18289 18504 + 18505 18504 18289 + 18289 18288 18505 + 18294 18505 18288 + 18505 18294 18506 + 18506 18294 18293 + 18293 18508 18506 + 18506 18508 18507 + 18311 18507 18508 + 18507 18311 18310 + 18310 18509 18507 + 18507 18509 18502 + 18510 18502 18509 + 18497 18502 18510 + 18301 18508 18293 + 18508 18301 18311 + 18509 18310 18316 + 18316 18511 18509 + 18509 18511 18510 + 18512 18510 18511 + 18513 18510 18512 + 18510 18513 18497 + 18497 18513 18491 + 18492 18491 18513 + 18511 18316 18320 + 18320 18514 18511 + 18511 18514 18512 + 18515 18512 18514 + 18516 18512 18515 + 18512 18516 18513 + 18513 18516 18492 + 18517 18492 18516 + 18486 18492 18517 + 18517 18487 18486 + 18514 18320 18325 + 18325 18518 18514 + 18514 18518 18515 + 18519 18515 18518 + 18520 18515 18519 + 18515 18520 18516 + 18516 18520 18517 + 18521 18517 18520 + 18487 18517 18521 + 18518 18325 18522 + 18522 18523 18518 + 18518 18523 18519 + 18524 18519 18523 + 18525 18519 18524 + 18519 18525 18520 + 18520 18525 18521 + 18522 18325 18324 + 18324 18337 18522 + 18526 18522 18337 + 18523 18522 18526 + 18526 18527 18523 + 18523 18527 18524 + 18528 18524 18527 + 18529 18524 18528 + 18524 18529 18525 + 18525 18529 18530 + 18530 18521 18525 + 18337 18531 18526 + 18532 18526 18531 + 18527 18526 18532 + 18532 18533 18527 + 18527 18533 18528 + 18534 18528 18533 + 18535 18528 18534 + 18528 18535 18529 + 18336 18531 18337 + 18531 18336 18335 + 18335 18536 18531 + 18531 18536 18532 + 18537 18532 18536 + 18533 18532 18537 + 18537 18538 18533 + 18533 18538 18534 + 18539 18534 18538 + 18540 18534 18539 + 18534 18540 18535 + 18536 18335 18342 + 18342 18541 18536 + 18536 18541 18537 + 18542 18537 18541 + 18538 18537 18542 + 18542 18543 18538 + 18538 18543 18539 + 18544 18539 18543 + 18545 18539 18544 + 18539 18545 18540 + 18541 18342 18546 + 18546 18547 18541 + 18541 18547 18542 + 18548 18542 18547 + 18543 18542 18548 + 18548 18549 18543 + 18543 18549 18544 + 18546 18342 18341 + 18341 18550 18546 + 18551 18546 18550 + 18547 18546 18551 + 18551 18552 18547 + 18547 18552 18548 + 18553 18548 18552 + 18549 18548 18553 + 18347 18550 18341 + 18550 18347 18554 + 18554 18555 18550 + 18550 18555 18551 + 18556 18551 18555 + 18552 18551 18556 + 18556 18557 18552 + 18552 18557 18553 + 18554 18347 18352 + 18352 18558 18554 + 18559 18554 18558 + 18555 18554 18559 + 18559 18560 18555 + 18555 18560 18556 + 18561 18556 18560 + 18557 18556 18561 + 18356 18558 18352 + 18562 18558 18356 + 18558 18562 18559 + 18563 18559 18562 + 18560 18559 18563 + 18563 18564 18560 + 18560 18564 18561 + 18565 18561 18564 + 18566 18561 18565 + 18561 18566 18557 + 18356 18365 18562 + 18562 18365 18370 + 18370 18567 18562 + 18562 18567 18563 + 18568 18563 18567 + 18564 18563 18568 + 18568 18569 18564 + 18564 18569 18565 + 18570 18565 18569 + 18571 18565 18570 + 18565 18571 18566 + 18381 18567 18370 + 18567 18381 18568 + 18386 18568 18381 + 18569 18568 18386 + 18386 18391 18569 + 18569 18391 18570 + 18572 18570 18391 + 18573 18570 18572 + 18570 18573 18571 + 18571 18573 18574 + 18574 18575 18571 + 18566 18571 18575 + 18575 18576 18566 + 18557 18566 18576 + 18391 18390 18572 + 18396 18572 18390 + 18577 18572 18396 + 18572 18577 18573 + 18573 18577 18578 + 18578 18574 18573 + 18579 18574 18578 + 18574 18579 18580 + 18580 18575 18574 + 18575 18580 18581 + 18581 18576 18575 + 18396 18400 18577 + 18577 18400 18582 + 18582 18578 18577 + 18583 18578 18582 + 18578 18583 18579 + 18579 18583 18584 + 18584 18585 18579 + 18580 18579 18585 + 18585 18586 18580 + 18581 18580 18586 + 18404 18582 18400 + 18587 18582 18404 + 18582 18587 18583 + 18583 18587 18588 + 18588 18584 18583 + 18589 18584 18588 + 18584 18589 18590 + 18590 18585 18584 + 18585 18590 18591 + 18591 18586 18585 + 18404 18408 18587 + 18587 18408 18592 + 18592 18588 18587 + 18593 18588 18592 + 18588 18593 18589 + 18589 18593 18594 + 18594 18595 18589 + 18590 18589 18595 + 18595 18596 18590 + 18591 18590 18596 + 18412 18592 18408 + 18597 18592 18412 + 18592 18597 18593 + 18593 18597 18598 + 18598 18594 18593 + 18599 18594 18598 + 18594 18599 18600 + 18600 18595 18594 + 18595 18600 18601 + 18601 18596 18595 + 18412 18416 18597 + 18597 18416 18602 + 18602 18598 18597 + 18603 18598 18602 + 18598 18603 18599 + 18599 18603 18445 + 18445 18444 18599 + 18600 18599 18444 + 18444 18454 18600 + 18601 18600 18454 + 18420 18602 18416 + 18604 18602 18420 + 18602 18604 18603 + 18603 18604 18446 + 18446 18445 18603 + 18420 18424 18604 + 18604 18424 18441 + 18441 18446 18604 + 18454 18453 18601 + 18605 18601 18453 + 18596 18601 18605 + 18605 18606 18596 + 18596 18606 18591 + 18607 18591 18606 + 18586 18591 18607 + 18453 18608 18605 + 18609 18605 18608 + 18606 18605 18609 + 18609 18610 18606 + 18606 18610 18607 + 18611 18607 18610 + 18612 18607 18611 + 18607 18612 18586 + 18586 18612 18581 + 18458 18608 18453 + 18613 18608 18458 + 18608 18613 18609 + 18614 18609 18613 + 18610 18609 18614 + 18614 18615 18610 + 18610 18615 18611 + 18616 18611 18615 + 18617 18611 18616 + 18611 18617 18612 + 18458 18463 18613 + 18613 18463 18462 + 18462 18618 18613 + 18613 18618 18614 + 18619 18614 18618 + 18615 18614 18619 + 18619 18620 18615 + 18615 18620 18616 + 18545 18616 18620 + 18544 18616 18545 + 18616 18544 18617 + 18618 18462 18621 + 18618 18621 18619 + 18622 18619 18621 + 18620 18619 18622 + 18622 18623 18620 + 18620 18623 18545 + 18540 18545 18623 + 18623 18624 18540 + 18535 18540 18624 + 18621 18462 18461 + 18461 18625 18621 + 18621 18625 18622 + 18626 18622 18625 + 18623 18622 18626 + 18626 18624 18623 + 18624 18626 18627 + 18627 18628 18624 + 18624 18628 18535 + 18529 18535 18628 + 18628 18530 18529 + 18471 18625 18461 + 18625 18471 18626 + 18627 18626 18471 + 18471 18629 18627 + 18630 18627 18629 + 18628 18627 18630 + 18630 18530 18628 + 18530 18630 18631 + 18631 18521 18530 + 18521 18631 18487 + 18470 18629 18471 + 18632 18629 18470 + 18629 18632 18630 + 18631 18630 18632 + 18632 18633 18631 + 18487 18631 18633 + 18633 18482 18487 + 18482 18633 18474 + 18474 18633 18632 + 18632 18475 18474 + 18470 18475 18632 + 18617 18544 18549 + 18549 18634 18617 + 18612 18617 18634 + 18634 18581 18612 + 18576 18581 18634 + 18634 18553 18576 + 18576 18553 18557 + 18553 18634 18549 + 18635 13255 13261 + 13255 18635 18636 + 18636 13256 13255 + 18637 13256 18636 + 13256 18637 13257 + 13261 18638 18635 + 18635 18638 18639 + 18639 18640 18635 + 18636 18635 18640 + 18638 13261 18641 + 18641 18642 18638 + 18638 18642 18643 + 18643 18639 18638 + 18644 18639 18643 + 18639 18644 18645 + 18645 18640 18639 + 13261 18646 18641 + 18647 18641 18646 + 18642 18641 18647 + 18647 18648 18642 + 18642 18648 18649 + 18649 18643 18642 + 18650 18643 18649 + 18643 18650 18644 + 13260 18646 13261 + 18646 13260 18651 + 18651 18652 18646 + 18646 18652 18647 + 18651 13260 13259 + 13259 18653 18651 + 18651 18653 18654 + 18654 18655 18651 + 18652 18651 18655 + 18655 18656 18652 + 18647 18652 18656 + 18657 18653 13259 + 18653 18657 18658 + 18658 18654 18653 + 18654 18658 18659 + 18659 18660 18654 + 18654 18660 18661 + 18661 18655 18654 + 18656 18655 18661 + 13259 13258 18657 + 18657 13258 18662 + 18662 13264 18657 + 13264 18658 18657 + 18659 18658 13264 + 13264 13263 18659 + 13263 18663 18659 + 18660 18659 18663 + 18663 18664 18660 + 18661 18660 18664 + 18664 18665 18661 + 18666 18661 18665 + 18661 18666 18656 + 18667 18663 13263 + 18664 18663 18667 + 18667 18668 18664 + 18664 18668 18669 + 18669 18665 18664 + 18670 18665 18669 + 18665 18670 18666 + 18671 18666 18670 + 18656 18666 18671 + 13263 13262 18667 + 18672 18667 13262 + 18668 18667 18672 + 18672 18673 18668 + 18668 18673 18674 + 18674 18669 18668 + 18675 18669 18674 + 18669 18675 18670 + 18676 18672 13262 + 18673 18672 18676 + 18676 18677 18673 + 18673 18677 18678 + 18678 18674 18673 + 18679 18674 18678 + 18674 18679 18675 + 18680 18675 18679 + 18670 18675 18680 + 13262 13242 18676 + 18681 18676 13242 + 18677 18676 18681 + 18681 18682 18677 + 18678 18677 18682 + 18682 18683 18678 + 18684 18678 18683 + 18678 18684 18679 + 13242 18685 18681 + 18686 18681 18685 + 18682 18681 18686 + 18686 18687 18682 + 18682 18687 18688 + 18688 18683 18682 + 18689 18683 18688 + 18683 18689 18684 + 13241 18685 13242 + 18685 13241 18690 + 18690 18691 18685 + 18685 18691 18686 + 18692 18686 18691 + 18687 18686 18692 + 18692 18693 18687 + 18687 18693 18694 + 18694 18688 18687 + 18690 13241 13240 + 13240 18695 18690 + 18696 18690 18695 + 18691 18690 18696 + 18696 18697 18691 + 18691 18697 18692 + 18698 18692 18697 + 18693 18692 18698 + 13252 18695 13240 + 18695 13252 18699 + 18699 18700 18695 + 18695 18700 18696 + 18701 18696 18700 + 18697 18696 18701 + 18701 18702 18697 + 18697 18702 18698 + 18699 13252 18703 + 18703 18704 18699 + 18705 18699 18704 + 18700 18699 18705 + 18705 18706 18700 + 18700 18706 18701 + 13251 18703 13252 + 18707 18703 13251 + 18703 18707 18708 + 18708 18704 18703 + 18704 18708 18709 + 18709 18710 18704 + 18704 18710 18705 + 18711 18705 18710 + 18706 18705 18711 + 13251 18712 18707 + 18707 18712 18713 + 18713 18714 18707 + 18708 18707 18714 + 18714 18715 18708 + 18709 18708 18715 + 18712 13251 13250 + 13250 13257 18712 + 18713 18712 13257 + 13257 18637 18713 + 18716 18713 18637 + 18713 18716 18717 + 18717 18714 18713 + 18714 18717 18718 + 18718 18715 18714 + 18715 18718 18719 + 18719 18720 18715 + 18715 18720 18709 + 18637 18721 18716 + 18722 18716 18721 + 18717 18716 18722 + 18722 18723 18717 + 18718 18717 18723 + 18723 18724 18718 + 18719 18718 18724 + 18636 18721 18637 + 18721 18636 18725 + 18725 18726 18721 + 18721 18726 18722 + 18727 18722 18726 + 18722 18727 18728 + 18728 18723 18722 + 18723 18728 18729 + 18729 18724 18723 + 18730 18725 18636 + 18731 18725 18730 + 18731 18726 18725 + 18726 18731 18727 + 18727 18731 18732 + 18732 18733 18727 + 18728 18727 18733 + 18733 18734 18728 + 18729 18728 18734 + 18640 18730 18636 + 18735 18730 18640 + 18732 18730 18735 + 18730 18732 18731 + 18640 18645 18735 + 18735 18645 18736 + 18736 18737 18735 + 18738 18735 18737 + 18735 18738 18732 + 18732 18738 18739 + 18739 18733 18732 + 18733 18739 18740 + 18740 18734 18733 + 18741 18736 18645 + 18742 18736 18741 + 18736 18742 18743 + 18743 18737 18736 + 18737 18743 18744 + 18744 18745 18737 + 18737 18745 18738 + 18739 18738 18745 + 18645 18644 18741 + 18741 18644 18650 + 18650 18746 18741 + 18746 18747 18741 + 18748 18741 18747 + 18741 18748 18742 + 18742 18748 18749 + 18749 18750 18742 + 18743 18742 18750 + 18751 18746 18650 + 18746 18751 18752 + 18746 18752 18747 + 18752 18753 18747 + 18753 18754 18747 + 18747 18754 18748 + 18748 18754 18749 + 18755 18749 18754 + 18750 18749 18755 + 18650 18649 18751 + 18756 18751 18649 + 18752 18751 18756 + 18756 18757 18752 + 18753 18752 18757 + 18755 18753 18757 + 18754 18753 18755 + 18758 18756 18649 + 18759 18756 18758 + 18756 18759 18757 + 18757 18759 18760 + 18760 18761 18757 + 18757 18761 18755 + 18762 18755 18761 + 18755 18762 18750 + 18649 18648 18758 + 18763 18758 18648 + 18758 18763 18764 + 18764 18765 18758 + 18758 18765 18759 + 18759 18765 18766 + 18766 18760 18759 + 18767 18760 18766 + 18767 18761 18760 + 18761 18767 18762 + 18648 18647 18763 + 18768 18763 18647 + 18764 18763 18768 + 18768 18769 18764 + 18764 18769 18770 + 18770 18771 18764 + 18765 18764 18771 + 18771 18766 18765 + 18772 18768 18647 + 18773 18768 18772 + 18768 18773 18769 + 18769 18773 18774 + 18774 18770 18769 + 18656 18772 18647 + 18671 18772 18656 + 18772 18671 18775 + 18772 18775 18773 + 18773 18775 18776 + 18776 18774 18773 + 18777 18774 18776 + 18770 18774 18777 + 18777 18778 18770 + 18770 18778 18779 + 18779 18771 18770 + 18766 18771 18779 + 18775 18671 18780 + 18780 18776 18775 + 18776 18780 18680 + 18776 18680 18777 + 18777 18680 18679 + 18781 18777 18679 + 18778 18777 18781 + 18781 18782 18778 + 18779 18778 18782 + 18670 18780 18671 + 18680 18780 18670 + 18782 18783 18779 + 18784 18783 18782 + 18783 18784 18785 + 18785 18786 18783 + 18783 18786 18787 + 18787 18779 18783 + 18779 18787 18766 + 18766 18787 18767 + 18782 18788 18784 + 18784 18788 18789 + 18790 18784 18789 + 18785 18784 18790 + 18782 18781 18788 + 18788 18781 18791 + 18791 18792 18788 + 18788 18792 18789 + 18679 18791 18781 + 18793 18791 18679 + 18791 18793 18792 + 18792 18793 18794 + 18794 18789 18792 + 18679 18684 18793 + 18793 18684 18689 + 18689 18794 18793 + 18795 18794 18689 + 18789 18794 18795 + 18795 18796 18789 + 18789 18796 18797 + 18797 18798 18789 + 18789 18798 18790 + 18689 18799 18795 + 18795 18799 18800 + 18800 18801 18795 + 18796 18795 18801 + 18801 18802 18796 + 18796 18802 18803 + 18803 18797 18796 + 18688 18799 18689 + 18799 18688 18694 + 18694 18800 18799 + 18800 18694 18804 + 18804 18805 18800 + 18800 18805 18806 + 18806 18801 18800 + 18802 18801 18806 + 18806 18807 18802 + 18802 18807 18808 + 18808 18803 18802 + 18804 18694 18693 + 18693 18809 18804 + 18810 18804 18809 + 18805 18804 18810 + 18810 18811 18805 + 18805 18811 18812 + 18812 18806 18805 + 18807 18806 18812 + 18698 18809 18693 + 18809 18698 18813 + 18813 18814 18809 + 18809 18814 18810 + 18815 18810 18814 + 18811 18810 18815 + 18815 18816 18811 + 18811 18816 18817 + 18817 18812 18811 + 18813 18698 18702 + 18702 18818 18813 + 18819 18813 18818 + 18814 18813 18819 + 18819 18820 18814 + 18814 18820 18815 + 18821 18815 18820 + 18816 18815 18821 + 18822 18818 18702 + 18818 18822 18823 + 18823 18824 18818 + 18818 18824 18819 + 18825 18819 18824 + 18820 18819 18825 + 18825 18826 18820 + 18820 18826 18821 + 18702 18701 18822 + 18827 18822 18701 + 18823 18822 18827 + 18827 18828 18823 + 18829 18823 18828 + 18824 18823 18829 + 18829 18830 18824 + 18824 18830 18825 + 18831 18825 18830 + 18826 18825 18831 + 18701 18706 18827 + 18711 18827 18706 + 18827 18711 18832 + 18832 18828 18827 + 18828 18832 18833 + 18833 18834 18828 + 18828 18834 18829 + 18835 18829 18834 + 18830 18829 18835 + 18835 18836 18830 + 18830 18836 18831 + 18832 18711 18837 + 18837 18838 18832 + 18833 18832 18838 + 18838 18839 18833 + 18840 18833 18839 + 18834 18833 18840 + 18840 18841 18834 + 18834 18841 18835 + 18710 18837 18711 + 18842 18837 18710 + 18837 18842 18843 + 18843 18838 18837 + 18838 18843 18844 + 18844 18839 18838 + 18839 18844 18845 + 18845 18846 18839 + 18839 18846 18840 + 18710 18709 18842 + 18842 18709 18720 + 18720 18847 18842 + 18843 18842 18847 + 18847 18848 18843 + 18844 18843 18848 + 18848 18849 18844 + 18845 18844 18849 + 18850 18847 18720 + 18847 18850 18851 + 18851 18848 18847 + 18848 18851 18852 + 18852 18849 18848 + 18849 18852 18853 + 18853 18854 18849 + 18849 18854 18845 + 18720 18719 18850 + 18850 18719 18855 + 18855 18856 18850 + 18851 18850 18856 + 18856 18857 18851 + 18851 18857 18858 + 18858 18852 18851 + 18853 18852 18858 + 18724 18855 18719 + 18859 18855 18724 + 18855 18859 18860 + 18860 18856 18855 + 18856 18860 18861 + 18861 18857 18856 + 18857 18861 18862 + 18862 18858 18857 + 18724 18729 18859 + 18863 18859 18729 + 18860 18859 18863 + 18863 18864 18860 + 18861 18860 18864 + 18864 18865 18861 + 18862 18861 18865 + 18865 18866 18862 + 18867 18862 18866 + 18858 18862 18867 + 18868 18863 18729 + 18869 18863 18868 + 18863 18869 18870 + 18870 18864 18863 + 18864 18870 18871 + 18871 18865 18864 + 18865 18871 18872 + 18872 18866 18865 + 18734 18868 18729 + 18873 18868 18734 + 18868 18873 18869 + 18869 18873 18874 + 18874 18875 18869 + 18870 18869 18875 + 18875 18876 18870 + 18871 18870 18876 + 18876 18877 18871 + 18872 18871 18877 + 18734 18740 18873 + 18873 18740 18878 + 18878 18874 18873 + 18879 18874 18878 + 18874 18879 18880 + 18880 18875 18874 + 18875 18880 18881 + 18881 18876 18875 + 18876 18881 18882 + 18882 18877 18876 + 18883 18878 18740 + 18884 18878 18883 + 18878 18884 18879 + 18879 18884 18885 + 18885 18886 18879 + 18880 18879 18886 + 18886 18887 18880 + 18881 18880 18887 + 18740 18739 18883 + 18745 18883 18739 + 18888 18883 18745 + 18883 18888 18884 + 18884 18888 18889 + 18889 18885 18884 + 18890 18885 18889 + 18885 18890 18891 + 18891 18886 18885 + 18886 18891 18892 + 18892 18887 18886 + 18745 18744 18888 + 18889 18888 18744 + 18744 18893 18889 + 18893 18894 18889 + 18895 18889 18894 + 18889 18895 18890 + 18890 18895 18896 + 18896 18897 18890 + 18891 18890 18897 + 18898 18893 18744 + 18893 18898 18899 + 18899 18900 18893 + 18893 18900 18901 + 18901 18894 18893 + 18901 18902 18894 + 18894 18902 18895 + 18896 18895 18902 + 18744 18743 18898 + 18750 18898 18743 + 18899 18898 18750 + 18750 18762 18899 + 18786 18899 18762 + 18900 18899 18786 + 18786 18785 18900 + 18901 18900 18785 + 18785 18903 18901 + 18902 18901 18903 + 18903 18904 18902 + 18902 18904 18896 + 18762 18767 18786 + 18767 18787 18786 + 18790 18903 18785 + 18903 18790 18904 + 18904 18790 18798 + 18798 18896 18904 + 18896 18798 18797 + 18797 18897 18896 + 18897 18797 18803 + 18803 18905 18897 + 18897 18905 18891 + 18892 18891 18905 + 18905 18906 18892 + 18907 18892 18906 + 18887 18892 18907 + 18905 18803 18808 + 18808 18906 18905 + 18906 18808 18908 + 18908 18909 18906 + 18906 18909 18907 + 18910 18907 18909 + 18911 18907 18910 + 18907 18911 18887 + 18887 18911 18881 + 18882 18881 18911 + 18908 18808 18807 + 18807 18912 18908 + 18913 18908 18912 + 18909 18908 18913 + 18913 18914 18909 + 18909 18914 18910 + 18915 18910 18914 + 18916 18910 18915 + 18910 18916 18911 + 18911 18916 18882 + 18812 18912 18807 + 18912 18812 18817 + 18817 18917 18912 + 18912 18917 18913 + 18918 18913 18917 + 18914 18913 18918 + 18918 18919 18914 + 18914 18919 18915 + 18920 18915 18919 + 18921 18915 18920 + 18915 18921 18916 + 18917 18817 18922 + 18922 18923 18917 + 18917 18923 18918 + 18924 18918 18923 + 18919 18918 18924 + 18924 18925 18919 + 18919 18925 18920 + 18922 18817 18816 + 18816 18926 18922 + 18927 18922 18926 + 18923 18922 18927 + 18927 18928 18923 + 18923 18928 18924 + 18924 18928 18929 + 18929 18930 18924 + 18930 18925 18924 + 18930 18920 18925 + 18821 18926 18816 + 18926 18821 18931 + 18931 18932 18926 + 18926 18932 18927 + 18933 18927 18932 + 18928 18927 18933 + 18933 18929 18928 + 18930 18929 18933 + 18934 18930 18933 + 18930 18934 18935 + 18935 18920 18930 + 18920 18935 18921 + 18931 18821 18826 + 18826 18936 18931 + 18937 18931 18936 + 18932 18931 18937 + 18937 18933 18932 + 18933 18937 18938 + 18938 18939 18933 + 18939 18940 18933 + 18940 18934 18933 + 18831 18936 18826 + 18936 18831 18941 + 18941 18937 18936 + 18937 18941 18938 + 18941 18831 18836 + 18942 18941 18836 + 18941 18942 18938 + 18836 18835 18942 + 18942 18835 18841 + 18942 18841 18840 + 18943 18942 18840 + 18942 18943 18938 + 18943 18944 18938 + 18938 18944 18854 + 18854 18853 18938 + 18938 18853 18945 + 18939 18938 18945 + 18943 18840 18846 + 18943 18846 18845 + 18944 18943 18845 + 18944 18845 18854 + 18858 18945 18853 + 18867 18945 18858 + 18945 18867 18939 + 18939 18867 18946 + 18939 18946 18947 + 18940 18939 18947 + 18940 18947 18948 + 18940 18948 18949 + 18934 18940 18949 + 18934 18949 18935 + 18866 18946 18867 + 18946 18866 18872 + 18947 18946 18872 + 18947 18872 18950 + 18950 18948 18947 + 18949 18948 18950 + 18950 18951 18949 + 18949 18951 18921 + 18921 18935 18949 + 18877 18950 18872 + 18951 18950 18877 + 18877 18882 18951 + 18951 18882 18916 + 18916 18921 18951 + 18952 11771 11639 + 11771 18952 11772 + 11772 18952 18953 + 18953 18954 11772 + 11773 11772 18954 + 11639 18955 18952 + 18952 18955 18956 + 18956 18953 18952 + 18957 18953 18956 + 18953 18957 18958 + 18958 18954 18953 + 18959 18954 18958 + 18954 18959 11773 + 11764 11773 18959 + 18955 11639 11638 + 11638 11648 18955 + 18956 18955 11648 + 11648 11653 18956 + 18960 18956 11653 + 18956 18960 18957 + 18957 18960 18961 + 18961 18962 18957 + 18958 18957 18962 + 18962 18963 18958 + 18964 18958 18963 + 18958 18964 18959 + 11653 18965 18960 + 18960 18965 18966 + 18966 18961 18960 + 18967 18961 18966 + 18961 18967 18962 + 18962 18967 18968 + 18968 18963 18962 + 18969 18963 18968 + 18963 18969 18964 + 11652 18965 11653 + 18965 11652 18970 + 18970 18971 18965 + 18965 18971 18966 + 18972 18966 18971 + 18966 18972 18973 + 18973 18974 18966 + 18966 18974 18967 + 18968 18967 18974 + 11658 18970 11652 + 18975 18970 11658 + 18971 18970 18975 + 18975 18976 18971 + 18971 18976 18972 + 18977 18972 18976 + 18973 18972 18977 + 18977 18978 18973 + 18979 18973 18978 + 18974 18973 18979 + 11658 18980 18975 + 18975 18980 18981 + 18982 18975 18981 + 18976 18975 18982 + 18982 18983 18976 + 18976 18983 18984 + 18984 18977 18976 + 18980 11658 11663 + 11663 18985 18980 + 18980 18985 18986 + 18986 18981 18980 + 18987 18981 18986 + 18981 18987 18988 + 18988 18989 18981 + 18981 18989 18982 + 18985 11663 18990 + 18990 18991 18985 + 18986 18985 18991 + 18991 18992 18986 + 18987 18986 18992 + 18992 18993 18987 + 18987 18993 18994 + 18994 18988 18987 + 11667 18990 11663 + 11672 18990 11667 + 18990 11672 18995 + 18995 18991 18990 + 18991 18995 18996 + 18996 18992 18991 + 18992 18996 18997 + 18997 18993 18992 + 18993 18997 18998 + 18998 18994 18993 + 18995 11672 11677 + 11677 18999 18995 + 18996 18995 18999 + 18999 19000 18996 + 18997 18996 19000 + 19000 19001 18997 + 18998 18997 19001 + 19001 19002 18998 + 19003 18998 19002 + 18994 18998 19003 + 19004 18999 11677 + 18999 19004 19005 + 19005 19000 18999 + 19000 19005 19006 + 19006 19001 19000 + 19001 19006 19007 + 19007 19002 19001 + 11677 11676 19004 + 19004 11676 11682 + 11682 19008 19004 + 19005 19004 19008 + 19008 19009 19005 + 19006 19005 19009 + 19009 19010 19006 + 19007 19006 19010 + 19010 19011 19007 + 19012 19007 19011 + 19002 19007 19012 + 19013 19008 11682 + 19008 19013 19014 + 19014 19009 19008 + 19009 19014 19015 + 19015 19010 19009 + 19010 19015 19016 + 19016 19011 19010 + 11682 11681 19013 + 19013 11681 11687 + 11687 19017 19013 + 19014 19013 19017 + 19017 19018 19014 + 19015 19014 19018 + 19018 19019 19015 + 19016 19015 19019 + 19019 19020 19016 + 19021 19016 19020 + 19011 19016 19021 + 19022 19017 11687 + 19017 19022 19023 + 19023 19018 19017 + 19018 19023 19024 + 19024 19019 19018 + 19019 19024 19025 + 19025 19020 19019 + 11687 11686 19022 + 19022 11686 19026 + 19026 19027 19022 + 19023 19022 19027 + 19027 19028 19023 + 19024 19023 19028 + 19028 19029 19024 + 19025 19024 19029 + 11691 19026 11686 + 19030 19026 11691 + 19026 19030 19031 + 19031 19027 19026 + 19027 19031 19032 + 19032 19028 19027 + 19028 19032 19033 + 19033 19029 19028 + 11691 11696 19030 + 19030 11696 19034 + 19034 19035 19030 + 19031 19030 19035 + 19035 19036 19031 + 19032 19031 19036 + 19036 19037 19032 + 19033 19032 19037 + 19038 19034 11696 + 19039 19034 19038 + 19034 19039 19040 + 19040 19035 19034 + 19035 19040 19041 + 19041 19036 19035 + 19036 19041 19042 + 19042 19037 19036 + 11696 11695 19038 + 11701 19038 11695 + 19043 19038 11701 + 19038 19043 19039 + 19039 19043 19044 + 19044 19045 19039 + 19040 19039 19045 + 19045 19046 19040 + 19041 19040 19046 + 19046 19047 19041 + 19042 19041 19047 + 11701 19048 19043 + 19043 19048 19049 + 19049 19044 19043 + 19050 19044 19049 + 19044 19050 19051 + 19051 19045 19044 + 19045 19051 19052 + 19052 19046 19045 + 19048 11701 11700 + 11700 19053 19048 + 19048 19053 19054 + 19054 19049 19048 + 19055 19049 19054 + 19049 19055 19050 + 19050 19055 19056 + 19056 19057 19050 + 19051 19050 19057 + 19053 11700 11699 + 11699 19058 19053 + 19053 19058 19059 + 19059 19054 19053 + 19060 19054 19059 + 19054 19060 19055 + 19055 19060 19061 + 19061 19056 19055 + 19058 11699 11706 + 11706 19062 19058 + 19058 19062 19063 + 19063 19059 19058 + 19064 19059 19063 + 19059 19064 19060 + 19061 19060 19064 + 19064 19065 19061 + 19066 19061 19065 + 19056 19061 19066 + 19062 11706 19067 + 19067 19068 19062 + 19063 19062 19068 + 19069 19067 11706 + 19070 19067 19069 + 19068 19067 19070 + 19068 19070 19071 + 19071 19072 19068 + 19068 19072 19063 + 19073 19069 11706 + 11719 19069 19073 + 11723 19069 11719 + 19069 11723 19070 + 11706 11705 19073 + 11704 19073 11705 + 11711 19073 11704 + 19073 11711 11719 + 19070 11723 11722 + 11722 19074 19070 + 19074 19075 19070 + 19075 19076 19070 + 19076 19071 19070 + 19077 19071 19076 + 19071 19077 19072 + 11728 19074 11722 + 11728 19078 19074 + 19074 19078 19079 + 19079 19075 19074 + 19080 19075 19079 + 19075 19080 19081 + 19081 19076 19075 + 19082 19076 19081 + 19076 19082 19077 + 19078 11728 11727 + 11727 19083 19078 + 19079 19078 19083 + 19083 19084 19079 + 19080 19079 19084 + 19084 19085 19080 + 19080 19085 19086 + 19086 19081 19080 + 19082 19081 19086 + 11727 11733 19083 + 19083 11733 19087 + 19087 19084 19083 + 19084 19087 19088 + 19088 19085 19084 + 19085 19088 19089 + 19089 19086 19085 + 19086 19089 19090 + 19090 19091 19086 + 19086 19091 19082 + 19087 11733 11732 + 11732 19092 19087 + 19092 19093 19087 + 19088 19087 19093 + 19093 19094 19088 + 19088 19094 19095 + 19095 19089 19088 + 19090 19089 19095 + 11738 19092 11732 + 11738 19096 19092 + 19092 19096 19097 + 19097 19093 19092 + 19094 19093 19097 + 19097 19098 19094 + 19094 19098 19099 + 19099 19095 19094 + 19100 19095 19099 + 19095 19100 19090 + 19096 11738 19101 + 19101 19102 19096 + 19097 19096 19102 + 19102 19103 19097 + 19103 19104 19097 + 19098 19097 19104 + 11737 19101 11738 + 19105 19101 11737 + 19101 19105 19102 + 19102 19105 19106 + 19106 19103 19102 + 19103 19106 19107 + 19103 19107 19108 + 19108 19104 19103 + 19109 19104 19108 + 19104 19109 19098 + 11737 19110 19105 + 19105 19110 19111 + 19106 19105 19111 + 19111 19112 19106 + 19107 19106 19112 + 19112 19113 19107 + 19108 19107 19113 + 11737 19114 19110 + 19110 19114 19115 + 19115 19111 19110 + 19111 19115 19116 + 19111 19116 19117 + 19117 19112 19111 + 19112 19117 19113 + 19114 11737 11742 + 11742 19118 19114 + 19114 19118 19119 + 19119 19115 19114 + 19116 19115 19119 + 19119 19120 19116 + 19117 19116 19120 + 19121 19117 19120 + 19113 19117 19121 + 19121 19122 19113 + 19113 19122 19108 + 11741 19118 11742 + 19118 11741 19123 + 19123 19119 19118 + 19120 19119 19123 + 19123 11741 11740 + 11740 19124 19123 + 19125 19123 19124 + 19123 19125 19120 + 19126 19124 11740 + 19127 19124 19126 + 19124 19127 19125 + 19125 19127 19128 + 19128 19129 19125 + 19120 19125 19129 + 11740 11745 19126 + 19130 19126 11745 + 19131 19126 19130 + 19126 19131 19127 + 19127 19131 19132 + 19132 19128 19127 + 19133 19128 19132 + 19128 19133 19134 + 19134 19129 19128 + 11745 11749 19130 + 19135 19130 11749 + 19136 19130 19135 + 19130 19136 19131 + 19131 19136 19066 + 19066 19132 19131 + 19065 19132 19066 + 19132 19065 19133 + 11749 11754 19135 + 19137 19135 11754 + 19138 19135 19137 + 19135 19138 19136 + 19136 19138 19139 + 19139 19066 19136 + 19066 19139 19056 + 19056 19139 19140 + 19140 19057 19056 + 11754 19141 19137 + 19142 19137 19141 + 19143 19137 19142 + 19137 19143 19138 + 19139 19138 19143 + 19143 19140 19139 + 19144 19140 19143 + 19140 19144 19145 + 19145 19057 19140 + 19057 19145 19051 + 11753 19141 11754 + 19141 11753 19146 + 19146 19147 19141 + 19141 19147 19142 + 19148 19142 19147 + 19149 19142 19148 + 19142 19149 19143 + 19143 19149 19144 + 19150 19144 19149 + 19145 19144 19150 + 19146 11753 11759 + 11759 19151 19146 + 19152 19146 19151 + 19147 19146 19152 + 19152 19153 19147 + 19147 19153 19148 + 19154 19148 19153 + 19155 19148 19154 + 19148 19155 19149 + 19149 19155 19150 + 19156 19151 11759 + 19151 19156 19157 + 19157 19158 19151 + 19151 19158 19152 + 19159 19152 19158 + 19153 19152 19159 + 19159 19160 19153 + 19153 19160 19154 + 11759 11758 19156 + 19156 11758 19161 + 19161 19162 19156 + 19156 19162 19163 + 19163 19157 19156 + 19164 19157 19163 + 19158 19157 19164 + 19164 19165 19158 + 19158 19165 19159 + 11757 19161 11758 + 19166 19161 11757 + 19162 19161 19166 + 19166 19167 19162 + 19162 19167 19168 + 19168 19169 19162 + 19162 19169 19163 + 11757 11764 19166 + 18959 19166 11764 + 19167 19166 18959 + 18959 18964 19167 + 19168 19167 18964 + 18964 18969 19168 + 19170 19168 18969 + 19170 19169 19168 + 19169 19170 19171 + 19171 19163 19169 + 19172 19163 19171 + 19163 19172 19164 + 19173 19164 19172 + 19165 19164 19173 + 18969 19174 19170 + 19171 19170 19174 + 19174 19175 19171 + 19176 19171 19175 + 19171 19176 19172 + 19172 19176 19177 + 19177 19178 19172 + 19172 19178 19173 + 18968 19174 18969 + 19174 18968 19179 + 19179 19175 19174 + 19175 19179 18979 + 18979 19180 19175 + 19175 19180 19176 + 19176 19180 19181 + 19181 19177 19176 + 18974 19179 18968 + 18979 19179 18974 + 19133 19065 19064 + 19064 19182 19133 + 19133 19182 19183 + 19183 19184 19133 + 19184 19185 19133 + 19185 19134 19133 + 19063 19182 19064 + 19182 19063 19186 + 19186 19183 19182 + 19183 19186 19187 + 19187 19188 19183 + 19183 19188 19189 + 19189 19184 19183 + 19190 19186 19063 + 19187 19186 19190 + 19190 19191 19187 + 19187 19191 19192 + 19192 19193 19187 + 19188 19187 19193 + 19072 19190 19063 + 19194 19190 19072 + 19191 19190 19194 + 19191 19194 19195 + 19195 19192 19191 + 19192 19195 19196 + 19192 19196 19197 + 19197 19193 19192 + 19198 19193 19197 + 19193 19198 19188 + 19072 19077 19194 + 19194 19077 19082 + 19082 19091 19194 + 19091 19195 19194 + 19196 19195 19091 + 19091 19090 19196 + 19196 19090 19100 + 19100 19197 19196 + 19199 19197 19100 + 19197 19199 19198 + 19198 19199 19200 + 19200 19201 19198 + 19188 19198 19201 + 19201 19189 19188 + 19202 19189 19201 + 19202 19184 19189 + 19100 19203 19199 + 19200 19199 19203 + 19203 19204 19200 + 19204 19205 19200 + 19206 19200 19205 + 19206 19201 19200 + 19201 19206 19202 + 19099 19203 19100 + 19203 19099 19207 + 19207 19204 19203 + 19204 19207 19208 + 19208 19209 19204 + 19204 19209 19210 + 19210 19205 19204 + 19211 19205 19210 + 19205 19211 19206 + 19207 19099 19098 + 19098 19109 19207 + 19208 19207 19109 + 19109 19212 19208 + 19208 19212 19213 + 19213 19214 19208 + 19209 19208 19214 + 19214 19215 19209 + 19210 19209 19215 + 19215 19216 19210 + 19211 19210 19216 + 19108 19212 19109 + 19212 19108 19122 + 19122 19213 19212 + 19121 19213 19122 + 19213 19121 19217 + 19217 19214 19213 + 19214 19217 19215 + 19215 19217 19218 + 19218 19216 19215 + 19219 19216 19218 + 19216 19219 19211 + 19206 19211 19219 + 19202 19206 19219 + 19219 19220 19202 + 19184 19202 19220 + 19217 19121 19120 + 19218 19217 19120 + 19221 19218 19120 + 19219 19218 19221 + 19221 19220 19219 + 19220 19221 19185 + 19220 19185 19184 + 19120 19222 19221 + 19185 19221 19222 + 19222 19134 19185 + 19222 19129 19134 + 19129 19222 19120 + 19223 19177 19181 + 19177 19223 19224 + 19224 19178 19177 + 19178 19224 19225 + 19225 19173 19178 + 19181 19226 19223 + 19223 19226 19227 + 19227 19228 19223 + 19224 19223 19228 + 19229 19226 19181 + 19226 19229 19230 + 19230 19227 19226 + 19227 19230 19231 + 19231 19232 19227 + 19227 19232 19233 + 19233 19228 19227 + 19181 19234 19229 + 19229 19234 18978 + 18978 19235 19229 + 19229 19235 19236 + 19236 19230 19229 + 19231 19230 19236 + 19234 19181 19180 + 19180 18979 19234 + 18978 19234 18979 + 18977 19235 18978 + 19235 18977 18984 + 18984 19236 19235 + 18984 19237 19236 + 19236 19237 19231 + 19238 19231 19237 + 19232 19231 19238 + 19238 19239 19232 + 19232 19239 19240 + 19240 19233 19232 + 19241 19233 19240 + 19233 19241 19228 + 19228 19241 19224 + 19237 18984 19242 + 19242 19243 19237 + 19237 19243 19238 + 19244 19238 19243 + 19239 19238 19244 + 19244 19245 19239 + 19239 19245 19246 + 19246 19240 19239 + 18983 19242 18984 + 19247 19242 18983 + 19243 19242 19247 + 19247 19248 19243 + 19243 19248 19244 + 19249 19244 19248 + 19245 19244 19249 + 19249 19250 19245 + 19245 19250 19251 + 19251 19246 19245 + 18983 19252 19247 + 19247 19252 19253 + 19253 19254 19247 + 19254 19255 19247 + 19248 19247 19255 + 19255 19256 19248 + 19248 19256 19249 + 19257 19252 18983 + 19252 19257 19258 + 19258 19253 19252 + 19253 19258 19259 + 19259 19260 19253 + 19253 19260 19261 + 19261 19254 19253 + 18983 18982 19257 + 19257 18982 18989 + 18989 19262 19257 + 19258 19257 19262 + 19262 19263 19258 + 19259 19258 19263 + 19263 19264 19259 + 19259 19264 19265 + 19265 19266 19259 + 19260 19259 19266 + 19267 19262 18989 + 19262 19267 19268 + 19268 19263 19262 + 19264 19263 19268 + 19268 19269 19264 + 19264 19269 19270 + 19270 19271 19264 + 19264 19271 19265 + 18989 18988 19267 + 19267 18988 18994 + 18994 19272 19267 + 19267 19272 19273 + 19273 19268 19267 + 19269 19268 19273 + 19273 19274 19269 + 19270 19269 19274 + 19274 19275 19270 + 19276 19270 19275 + 19276 19271 19270 + 19003 19272 18994 + 19272 19003 19277 + 19277 19273 19272 + 19273 19277 19278 + 19278 19274 19273 + 19274 19278 19279 + 19279 19275 19274 + 19275 19279 19280 + 19280 19281 19275 + 19275 19281 19276 + 19277 19003 19282 + 19282 19283 19277 + 19278 19277 19283 + 19283 19284 19278 + 19279 19278 19284 + 19284 19285 19279 + 19280 19279 19285 + 19002 19282 19003 + 19012 19282 19002 + 19282 19012 19286 + 19286 19283 19282 + 19283 19286 19287 + 19287 19284 19283 + 19284 19287 19288 + 19288 19285 19284 + 19285 19288 19289 + 19289 19290 19285 + 19285 19290 19280 + 19286 19012 19291 + 19291 19292 19286 + 19287 19286 19292 + 19292 19293 19287 + 19288 19287 19293 + 19293 19294 19288 + 19289 19288 19294 + 19011 19291 19012 + 19021 19291 19011 + 19291 19021 19295 + 19295 19292 19291 + 19292 19295 19296 + 19296 19293 19292 + 19293 19296 19297 + 19297 19294 19293 + 19294 19297 19298 + 19298 19299 19294 + 19294 19299 19289 + 19295 19021 19300 + 19300 19301 19295 + 19296 19295 19301 + 19301 19302 19296 + 19297 19296 19302 + 19302 19303 19297 + 19298 19297 19303 + 19020 19300 19021 + 19304 19300 19020 + 19300 19304 19305 + 19305 19301 19300 + 19301 19305 19306 + 19306 19302 19301 + 19302 19306 19307 + 19307 19303 19302 + 19020 19025 19304 + 19304 19025 19308 + 19308 19309 19304 + 19305 19304 19309 + 19309 19310 19305 + 19306 19305 19310 + 19310 19311 19306 + 19307 19306 19311 + 19029 19308 19025 + 19312 19308 19029 + 19308 19312 19313 + 19313 19309 19308 + 19309 19313 19314 + 19314 19310 19309 + 19310 19314 19315 + 19315 19311 19310 + 19029 19033 19312 + 19312 19033 19316 + 19316 19317 19312 + 19313 19312 19317 + 19317 19318 19313 + 19314 19313 19318 + 19318 19319 19314 + 19315 19314 19319 + 19037 19316 19033 + 19320 19316 19037 + 19316 19320 19321 + 19321 19317 19316 + 19317 19321 19322 + 19322 19318 19317 + 19318 19322 19323 + 19323 19319 19318 + 19037 19042 19320 + 19320 19042 19324 + 19324 19325 19320 + 19321 19320 19325 + 19325 19326 19321 + 19322 19321 19326 + 19326 19327 19322 + 19323 19322 19327 + 19047 19324 19042 + 19328 19324 19047 + 19324 19328 19329 + 19329 19325 19324 + 19325 19329 19330 + 19330 19326 19325 + 19326 19330 19331 + 19331 19327 19326 + 19047 19332 19328 + 19333 19328 19332 + 19329 19328 19333 + 19333 19334 19329 + 19329 19334 19335 + 19335 19330 19329 + 19331 19330 19335 + 19332 19047 19046 + 19046 19052 19332 + 19332 19052 19336 + 19336 19337 19332 + 19332 19337 19333 + 19338 19333 19337 + 19334 19333 19338 + 19338 19339 19334 + 19334 19339 19340 + 19340 19335 19334 + 19336 19052 19051 + 19051 19145 19336 + 19150 19336 19145 + 19337 19336 19150 + 19150 19341 19337 + 19337 19341 19338 + 19338 19341 19342 + 19342 19343 19338 + 19339 19338 19343 + 19343 19344 19339 + 19340 19339 19344 + 19341 19150 19155 + 19155 19342 19341 + 19154 19342 19155 + 19342 19154 19345 + 19345 19343 19342 + 19343 19345 19346 + 19346 19344 19343 + 19344 19346 19347 + 19347 19348 19344 + 19344 19348 19340 + 19345 19154 19160 + 19160 19349 19345 + 19346 19345 19349 + 19349 19350 19346 + 19347 19346 19350 + 19350 19351 19347 + 19352 19347 19351 + 19348 19347 19352 + 19353 19349 19160 + 19349 19353 19354 + 19354 19350 19349 + 19350 19354 19355 + 19355 19351 19350 + 19351 19355 19356 + 19356 19357 19351 + 19351 19357 19352 + 19160 19159 19353 + 19353 19159 19165 + 19165 19358 19353 + 19354 19353 19358 + 19358 19359 19354 + 19355 19354 19359 + 19359 19360 19355 + 19356 19355 19360 + 19360 19361 19356 + 19362 19356 19361 + 19357 19356 19362 + 19173 19358 19165 + 19358 19173 19225 + 19225 19359 19358 + 19359 19225 19363 + 19363 19360 19359 + 19360 19363 19364 + 19364 19361 19360 + 19361 19364 19365 + 19365 19366 19361 + 19361 19366 19362 + 19363 19225 19224 + 19367 19363 19224 + 19364 19363 19367 + 19367 19368 19364 + 19364 19368 19369 + 19369 19365 19364 + 19370 19365 19369 + 19366 19365 19370 + 19224 19241 19367 + 19240 19367 19241 + 19368 19367 19240 + 19240 19246 19368 + 19368 19246 19251 + 19251 19369 19368 + 19371 19369 19251 + 19369 19371 19370 + 19370 19371 8716 + 8716 19372 19370 + 19373 19370 19372 + 19370 19373 19366 + 19366 19373 19374 + 19374 19362 19366 + 19251 19375 19371 + 19371 19375 8710 + 8710 8716 19371 + 19375 19251 19250 + 19250 8711 19375 + 8710 19375 8711 + 19376 8711 19250 + 8711 19376 8712 + 19377 8712 19376 + 8705 8712 19377 + 19377 8706 8705 + 19250 19249 19376 + 19376 19249 19256 + 19256 19378 19376 + 19376 19378 19377 + 19378 19379 19377 + 19380 19377 19379 + 8706 19377 19380 + 19255 19378 19256 + 19378 19255 19254 + 19254 19379 19378 + 19379 19254 19261 + 19379 19261 19380 + 19380 19261 19260 + 19260 19381 19380 + 19381 19382 19380 + 19383 19380 19382 + 19380 19383 8706 + 8706 19383 19384 + 19384 19385 8706 + 8706 19385 8707 + 19266 19381 19260 + 19381 19266 19386 + 19386 10972 19381 + 19381 10972 19387 + 19387 19382 19381 + 19382 19387 19388 + 19388 19389 19382 + 19382 19389 19383 + 19386 19266 19265 + 19265 19390 19386 + 10968 19386 19390 + 10972 19386 10968 + 19390 19265 19391 + 19391 19392 19390 + 19390 19392 19393 + 19393 10970 19390 + 19390 10970 10969 + 10969 10968 19390 + 19391 19265 19271 + 19271 19276 19391 + 19391 19276 19281 + 19281 19394 19391 + 19392 19391 19394 + 19394 19395 19392 + 19392 19395 10965 + 10965 19393 19392 + 10964 19393 10965 + 10964 10970 19393 + 19396 19394 19281 + 19394 19396 19397 + 19397 19395 19394 + 19395 19397 19398 + 19398 10965 19395 + 10965 19398 10960 + 10960 19398 19399 + 19399 10956 10960 + 19281 19280 19396 + 19396 19280 19290 + 19290 19400 19396 + 19397 19396 19400 + 19400 19401 19397 + 19398 19397 19401 + 19401 19399 19398 + 19402 19399 19401 + 19399 19402 19403 + 19403 10956 19399 + 10956 19403 10952 + 19404 19400 19290 + 19400 19404 19405 + 19405 19401 19400 + 19401 19405 19402 + 19402 19405 19406 + 19406 19407 19402 + 19403 19402 19407 + 19407 19408 19403 + 10952 19403 19408 + 19408 10947 10952 + 19290 19289 19404 + 19404 19289 19299 + 19299 19409 19404 + 19405 19404 19409 + 19409 19406 19405 + 19410 19406 19409 + 19406 19410 19411 + 19411 19407 19406 + 19407 19411 19412 + 19412 19408 19407 + 19408 19412 19413 + 19413 10947 19408 + 10947 19413 10948 + 19414 19409 19299 + 19409 19414 19410 + 19410 19414 19415 + 19415 19416 19410 + 19411 19410 19416 + 19416 19417 19411 + 19412 19411 19417 + 19417 19418 19412 + 19413 19412 19418 + 19299 19298 19414 + 19414 19298 19419 + 19419 19415 19414 + 19420 19415 19419 + 19415 19420 19421 + 19421 19416 19415 + 19416 19421 19422 + 19422 19417 19416 + 19417 19422 19423 + 19423 19418 19417 + 19303 19419 19298 + 19424 19419 19303 + 19419 19424 19420 + 19420 19424 19425 + 19425 19426 19420 + 19421 19420 19426 + 19426 19427 19421 + 19422 19421 19427 + 19427 19428 19422 + 19423 19422 19428 + 19303 19307 19424 + 19424 19307 19429 + 19429 19425 19424 + 19430 19425 19429 + 19425 19430 19431 + 19431 19426 19425 + 19426 19431 19432 + 19432 19427 19426 + 19427 19432 19433 + 19433 19428 19427 + 19311 19429 19307 + 19434 19429 19311 + 19429 19434 19430 + 19430 19434 19435 + 19435 19436 19430 + 19431 19430 19436 + 19436 19437 19431 + 19432 19431 19437 + 19437 19438 19432 + 19433 19432 19438 + 19311 19315 19434 + 19434 19315 19439 + 19439 19435 19434 + 19440 19435 19439 + 19435 19440 19441 + 19441 19436 19435 + 19436 19441 19442 + 19442 19437 19436 + 19437 19442 19443 + 19443 19438 19437 + 19319 19439 19315 + 19444 19439 19319 + 19439 19444 19440 + 19440 19444 19445 + 19445 19446 19440 + 19441 19440 19446 + 19446 19447 19441 + 19442 19441 19447 + 19447 19448 19442 + 19443 19442 19448 + 19319 19323 19444 + 19444 19323 19449 + 19449 19445 19444 + 19450 19445 19449 + 19445 19450 19451 + 19451 19446 19445 + 19446 19451 19452 + 19452 19447 19446 + 19447 19452 19453 + 19453 19448 19447 + 19327 19449 19323 + 19454 19449 19327 + 19449 19454 19450 + 19450 19454 19455 + 19455 19456 19450 + 19450 19456 19457 + 19457 19451 19450 + 19452 19451 19457 + 19327 19331 19454 + 19455 19454 19331 + 19331 19458 19455 + 19459 19455 19458 + 19456 19455 19459 + 19459 19460 19456 + 19456 19460 19461 + 19461 19457 19456 + 19462 19457 19461 + 19457 19462 19452 + 19335 19458 19331 + 19458 19335 19340 + 19340 19463 19458 + 19458 19463 19459 + 19459 19463 19464 + 19464 19465 19459 + 19460 19459 19465 + 19465 19466 19460 + 19461 19460 19466 + 19463 19340 19348 + 19348 19464 19463 + 19352 19464 19348 + 19464 19352 19467 + 19467 19465 19464 + 19465 19467 19468 + 19468 19466 19465 + 19466 19468 19469 + 19469 19470 19466 + 19466 19470 19461 + 19471 19461 19470 + 19461 19471 19462 + 19467 19352 19357 + 19357 19472 19467 + 19468 19467 19472 + 19472 19473 19468 + 19469 19468 19473 + 19473 19474 19469 + 19475 19469 19474 + 19470 19469 19475 + 19475 19476 19470 + 19470 19476 19471 + 19362 19472 19357 + 19472 19362 19374 + 19374 19473 19472 + 19473 19374 19477 + 19477 19474 19473 + 19474 19477 19478 + 19478 19479 19474 + 19474 19479 19475 + 19480 19475 19479 + 19476 19475 19480 + 19477 19374 19373 + 19373 19481 19477 + 19478 19477 19481 + 19481 19482 19478 + 19483 19478 19482 + 19479 19478 19483 + 19483 19484 19479 + 19479 19484 19480 + 19372 19481 19373 + 19481 19372 8715 + 8715 19482 19481 + 19482 8715 8719 + 8719 19485 19482 + 19482 19485 19483 + 19486 19483 19485 + 19484 19483 19486 + 8715 19372 8716 + 19485 8719 8718 + 8718 19487 19485 + 19485 19487 19486 + 19488 19486 19487 + 19489 19486 19488 + 19486 19489 19484 + 19484 19489 19490 + 19490 19480 19484 + 19491 19480 19490 + 19480 19491 19476 + 19487 8718 8723 + 8723 19492 19487 + 19487 19492 19488 + 19493 19488 19492 + 19494 19488 19493 + 19488 19494 19489 + 19489 19494 19495 + 19495 19490 19489 + 19496 19490 19495 + 19490 19496 19491 + 19492 8723 8722 + 8722 19497 19492 + 19492 19497 19493 + 19498 19493 19497 + 19499 19493 19498 + 19493 19499 19494 + 19494 19499 19500 + 19500 19495 19494 + 19501 19495 19500 + 19495 19501 19496 + 19497 8722 19502 + 19502 19503 19497 + 19497 19503 19498 + 9789 19498 19503 + 19504 19498 9789 + 19498 19504 19499 + 19499 19504 19505 + 19505 19500 19499 + 19502 8722 8721 + 8721 19506 19502 + 19507 19502 19506 + 19503 19502 19507 + 19507 9784 19503 + 19503 9784 9789 + 8729 19506 8721 + 19506 8729 19508 + 19506 19508 19507 + 9780 19507 19508 + 9784 19507 9780 + 19508 8729 8728 + 8728 19509 19508 + 19508 19509 9776 + 9776 9780 19508 + 8736 19509 8728 + 19509 8736 8741 + 8741 9776 19509 + 9789 9788 19504 + 19504 9788 19510 + 19510 19505 19504 + 19511 19505 19510 + 19505 19511 19512 + 19512 19500 19505 + 19500 19512 19501 + 19501 19512 19513 + 19513 19514 19501 + 19496 19501 19514 + 9793 19510 9788 + 19515 19510 9793 + 19510 19515 19511 + 19511 19515 19516 + 19516 19517 19511 + 19512 19511 19517 + 19517 19513 19512 + 19518 19513 19517 + 19514 19513 19518 + 9793 9797 19515 + 19516 19515 9797 + 9797 9805 19516 + 19519 19516 9805 + 19517 19516 19519 + 19519 19520 19517 + 19517 19520 19518 + 19521 19518 19520 + 19522 19518 19521 + 19518 19522 19514 + 9805 19523 19519 + 19519 19523 19524 + 19524 19525 19519 + 19520 19519 19525 + 19525 19526 19520 + 19520 19526 19521 + 9804 19523 9805 + 19523 9804 9810 + 9810 19524 19523 + 19527 19524 9810 + 19524 19527 19528 + 19528 19525 19524 + 19525 19528 19529 + 19529 19526 19525 + 19526 19529 19530 + 19530 19521 19526 + 9810 9815 19527 + 19527 9815 19531 + 19531 19532 19527 + 19528 19527 19532 + 19532 19533 19528 + 19529 19528 19533 + 19533 19534 19529 + 19530 19529 19534 + 19535 19531 9815 + 19536 19531 19535 + 19531 19536 19537 + 19537 19532 19531 + 19532 19537 19538 + 19538 19533 19532 + 19533 19538 19539 + 19539 19534 19533 + 9815 9814 19535 + 9820 19535 9814 + 19540 19535 9820 + 19535 19540 19536 + 19536 19540 19541 + 19541 19542 19536 + 19537 19536 19542 + 19542 19543 19537 + 19538 19537 19543 + 19543 19544 19538 + 19539 19538 19544 + 9820 9825 19540 + 19540 9825 19545 + 19545 19541 19540 + 19546 19541 19545 + 19541 19546 19547 + 19547 19542 19541 + 19542 19547 19548 + 19548 19543 19542 + 19543 19548 19549 + 19549 19544 19543 + 9830 19545 9825 + 10921 19545 9830 + 19545 10921 19546 + 19546 10921 10920 + 10920 10930 19546 + 19547 19546 10930 + 10930 10935 19547 + 19548 19547 10935 + 10935 19550 19548 + 19549 19548 19550 + 19550 19551 19549 + 19552 19549 19551 + 19544 19549 19552 + 19552 19553 19544 + 19544 19553 19539 + 19554 19539 19553 + 19534 19539 19554 + 10934 19550 10935 + 19550 10934 19555 + 19555 19551 19550 + 19551 19555 19556 + 19556 19557 19551 + 19551 19557 19552 + 19558 19552 19557 + 19553 19552 19558 + 19558 19559 19553 + 19553 19559 19554 + 19555 10934 10939 + 10939 10948 19555 + 19556 19555 10948 + 10948 19413 19556 + 19418 19556 19413 + 19557 19556 19418 + 19418 19423 19557 + 19557 19423 19558 + 19428 19558 19423 + 19559 19558 19428 + 19428 19433 19559 + 19559 19433 19560 + 19560 19554 19559 + 19561 19554 19560 + 19554 19561 19534 + 19534 19561 19530 + 19562 19530 19561 + 19521 19530 19562 + 19438 19560 19433 + 19563 19560 19438 + 19560 19563 19561 + 19561 19563 19562 + 19564 19562 19563 + 19565 19562 19564 + 19562 19565 19521 + 19521 19565 19522 + 19438 19443 19563 + 19563 19443 19564 + 19448 19564 19443 + 19566 19564 19448 + 19564 19566 19565 + 19522 19565 19566 + 19566 19567 19522 + 19514 19522 19567 + 19567 19568 19514 + 19514 19568 19496 + 19491 19496 19568 + 19448 19453 19566 + 19566 19453 19569 + 19569 19567 19566 + 19567 19569 19570 + 19570 19568 19567 + 19568 19570 19491 + 19476 19491 19570 + 19570 19471 19476 + 19462 19471 19570 + 19569 19453 19452 + 19452 19462 19569 + 19570 19569 19462 + 19387 10972 9745 + 9745 19571 19387 + 19571 19572 19387 + 19388 19387 19572 + 19572 19573 19388 + 19574 19388 19573 + 19389 19388 19574 + 9744 19571 9745 + 19571 9744 19575 + 19571 19575 19576 + 19576 19572 19571 + 19572 19576 19573 + 19573 19576 19577 + 19577 19578 19573 + 19573 19578 19574 + 19575 9744 9743 + 9743 19579 19575 + 19575 19579 19580 + 19580 19577 19575 + 19577 19576 19575 + 19579 9743 9742 + 9742 19581 19579 + 19579 19581 19582 + 19582 19580 19579 + 19580 19582 19583 + 19577 19580 19583 + 19584 19577 19583 + 19577 19584 19578 + 19578 19584 19585 + 19578 19585 19574 + 19581 9742 19586 + 19586 19587 19581 + 19582 19581 19587 + 19587 19588 19582 + 19583 19582 19588 + 19588 19589 19583 + 19584 19583 19589 + 19590 19584 19589 + 19584 19590 19585 + 9748 19586 9742 + 19591 19586 9748 + 19587 19586 19591 + 19587 19591 19592 + 19592 19588 19587 + 19589 19588 19592 + 19589 19592 19593 + 19593 19594 19589 + 19589 19594 19590 + 19595 19590 19594 + 19585 19590 19595 + 9748 9752 19591 + 19592 19591 9752 + 19593 19592 9752 + 19596 19593 9752 + 19597 19593 19596 + 19597 19594 19593 + 19594 19597 19595 + 19598 19595 19597 + 19585 19595 19598 + 19598 19574 19585 + 19574 19598 19599 + 19574 19599 19389 + 19600 19596 9752 + 19601 19596 19600 + 19601 19602 19596 + 19596 19602 19597 + 19597 19602 19603 + 19603 19598 19597 + 19599 19598 19603 + 10977 19600 9752 + 19604 19600 10977 + 19604 19605 19600 + 19600 19605 19601 + 19601 19605 19606 + 19607 19601 19606 + 19602 19601 19607 + 19607 19603 19602 + 19608 19603 19607 + 19603 19608 19599 + 10977 19609 19604 + 19604 19609 61 + 19610 19604 61 + 19605 19604 19610 + 19610 19606 19605 + 10976 19609 10977 + 19609 10976 19611 + 19611 61 19609 + 61 8701 19610 + 8707 19610 8701 + 8707 19606 19610 + 19606 8707 19385 + 19385 19612 19606 + 19606 19612 19607 + 19608 19607 19612 + 19612 19384 19608 + 19608 19384 19383 + 19599 19608 19383 + 19383 19389 19599 + 19384 19612 19385 + 11594 11598 19613 + 19613 11598 19614 + 19614 19615 19613 + 19616 19613 19615 + 19617 19613 19616 + 19613 19617 11594 + 11594 19617 11595 + 11597 19614 11598 + 19618 19614 11597 + 19615 19614 19618 + 19618 19619 19615 + 19615 19619 19620 + 19620 19621 19615 + 19615 19621 19616 + 11597 19622 19618 + 19618 19622 11346 + 11357 19618 11346 + 19619 19618 11357 + 11357 19623 19619 + 19619 19623 19624 + 19624 19620 19619 + 11597 11596 19622 + 19622 11596 11347 + 11347 11346 19622 + 19625 19620 19624 + 19620 19625 19626 + 19626 19621 19620 + 19621 19626 19627 + 19627 19616 19621 + 19628 19616 19627 + 19616 19628 19617 + 19617 19628 19629 + 19629 11595 19617 + 11590 11595 19629 + 19624 19630 19625 + 19625 19630 19631 + 19631 19632 19625 + 19626 19625 19632 + 19633 19630 19624 + 19630 19633 19634 + 19634 19631 19630 + 19631 19634 19635 + 19635 19636 19631 + 19631 19636 19637 + 19637 19632 19631 + 19624 19638 19633 + 19633 19638 19639 + 19639 19640 19633 + 19634 19633 19640 + 19640 19641 19634 + 19635 19634 19641 + 19638 19624 19623 + 19623 19642 19638 + 19638 19642 19643 + 19643 19639 19638 + 19642 19623 11357 + 11357 11356 19642 + 19642 11356 19644 + 19644 19643 19642 + 19643 19644 19645 + 19645 19646 19643 + 19643 19646 19647 + 19647 19648 19643 + 19640 19648 19647 + 19649 19644 11356 + 19645 19644 19649 + 19649 19650 19645 + 19651 19645 19650 + 19646 19645 19651 + 19651 19652 19646 + 19646 19652 19653 + 19653 19647 19646 + 11355 19649 11356 + 19654 19649 11355 + 19650 19649 19654 + 19650 19654 19655 + 19655 19656 19650 + 19650 19656 19651 + 19657 19651 19656 + 19651 19657 19658 + 19658 19652 19651 + 11355 19659 19654 + 19655 19654 19659 + 19659 19660 19655 + 19661 19655 19660 + 19655 19661 19662 + 19662 19656 19655 + 19656 19662 19657 + 19663 19657 19662 + 19658 19657 19663 + 11361 19659 11355 + 19659 11361 19664 + 19664 19660 19659 + 19665 19660 19664 + 19660 19665 19661 + 19666 19661 19665 + 19662 19661 19666 + 19666 19667 19662 + 19662 19667 19663 + 19664 11361 11360 + 11360 19668 19664 + 19669 19664 19668 + 19664 19669 19665 + 19665 19669 19670 + 19670 19671 19665 + 19665 19671 19666 + 11365 19668 11360 + 19672 19668 11365 + 19668 19672 19669 + 19670 19669 19672 + 19672 19673 19670 + 19674 19670 19673 + 19670 19674 19675 + 19675 19671 19670 + 19671 19675 19676 + 19676 19666 19671 + 11365 19677 19672 + 19672 19677 19678 + 19678 19673 19672 + 19679 19673 19678 + 19673 19679 19674 + 19680 19674 19679 + 19675 19674 19680 + 19677 11365 11364 + 11364 19681 19677 + 19678 19677 19681 + 19681 19682 19678 + 19683 19678 19682 + 19678 19683 19679 + 19679 19683 19684 + 19684 19685 19679 + 19679 19685 19680 + 19681 11364 11369 + 11369 19686 19681 + 19681 19686 19687 + 19687 19682 19681 + 19688 19682 19687 + 19682 19688 19683 + 19684 19683 19688 + 19686 11369 11374 + 11374 19689 19686 + 19687 19686 19689 + 19689 19690 19687 + 19691 19687 19690 + 19687 19691 19688 + 19688 19691 19692 + 19692 19693 19688 + 19688 19693 19684 + 19689 11374 11379 + 11379 19694 19689 + 19689 19694 19695 + 19695 19690 19689 + 19696 19690 19695 + 19690 19696 19691 + 19692 19691 19696 + 19694 11379 19697 + 19697 19698 19694 + 19695 19694 19698 + 19698 19699 19695 + 19700 19695 19699 + 19695 19700 19696 + 11378 19697 11379 + 19701 19697 11378 + 19698 19697 19701 + 19701 19702 19698 + 19698 19702 19703 + 19703 19699 19698 + 19704 19699 19703 + 19699 19704 19700 + 19705 19700 19704 + 19696 19700 19705 + 11378 11384 19701 + 19701 11384 11383 + 11383 19706 19701 + 19702 19701 19706 + 19706 19707 19702 + 19703 19702 19707 + 19707 19708 19703 + 19709 19703 19708 + 19703 19709 19704 + 19710 19706 11383 + 19707 19706 19710 + 19710 19711 19707 + 19707 19711 19712 + 19712 19708 19707 + 19713 19708 19712 + 19708 19713 19709 + 19714 19709 19713 + 19704 19709 19714 + 11383 11382 19710 + 19715 19710 11382 + 19711 19710 19715 + 19715 19716 19711 + 19712 19711 19716 + 19716 19717 19712 + 19718 19712 19717 + 19712 19718 19713 + 11382 19719 19715 + 19720 19715 19719 + 19716 19715 19720 + 19720 19721 19716 + 19716 19721 19722 + 19722 19717 19716 + 19723 19717 19722 + 19717 19723 19718 + 11388 19719 11382 + 19719 11388 19724 + 19719 19724 19720 + 19720 19724 19725 + 19725 19726 19720 + 19721 19720 19726 + 19726 19727 19721 + 19722 19721 19727 + 19724 11388 11387 + 11387 19728 19724 + 19724 19728 19725 + 19729 19725 19728 + 19725 19729 19730 + 19725 19730 19731 + 19731 19726 19725 + 19727 19726 19731 + 11387 11392 19728 + 19728 11392 19729 + 19729 11392 11391 + 11391 19732 19729 + 19732 19733 19729 + 19730 19729 19733 + 19733 19734 19730 + 19730 19734 19735 + 19735 19731 19730 + 19736 19731 19735 + 19731 19736 19727 + 19737 19732 11391 + 19732 19737 19738 + 19738 19739 19732 + 19732 19739 19740 + 19740 19733 19732 + 19733 19740 19741 + 19741 19734 19733 + 11391 11390 19737 + 11401 19737 11390 + 19738 19737 11401 + 11401 19742 19738 + 19738 19742 19743 + 19744 19738 19743 + 19739 19738 19744 + 19744 19745 19739 + 19740 19739 19745 + 19745 19746 19740 + 19741 19740 19746 + 19742 11401 19747 + 19747 19748 19742 + 19742 19748 19749 + 19749 19750 19742 + 19742 19750 19743 + 19747 11401 19751 + 19751 19752 19747 + 19747 19752 19753 + 19753 19754 19747 + 19748 19747 19754 + 19754 19755 19748 + 19749 19748 19755 + 11400 19751 11401 + 19756 19751 11400 + 19756 19752 19751 + 19752 19756 11424 + 11424 19753 19752 + 11423 19753 11424 + 19753 11423 19757 + 19757 19754 19753 + 19754 19757 19758 + 19758 19755 19754 + 11400 11406 19756 + 19756 11406 11411 + 19756 11411 11424 + 19759 19755 19758 + 19755 19759 19749 + 19760 19749 19759 + 19749 19760 19750 + 19750 19760 19761 + 19761 19743 19750 + 19762 19759 19758 + 19763 19759 19762 + 19759 19763 19760 + 19760 19763 19764 + 19761 19760 19764 + 19764 19765 19761 + 19766 19761 19765 + 19761 19766 19743 + 19758 19767 19762 + 19767 19768 19762 + 19769 19762 19768 + 19762 19769 19763 + 19763 19769 19770 + 19770 19764 19763 + 19771 19767 19758 + 19772 19767 19771 + 19767 19772 11431 + 11431 19768 19767 + 11431 11430 19768 + 19768 11430 19769 + 19758 19757 19771 + 19771 19757 11423 + 11423 11422 19771 + 19772 19771 11422 + 11422 11421 19772 + 11431 19772 11421 + 19769 11430 11429 + 11429 19773 19769 + 19773 19774 19769 + 19774 19770 19769 + 19775 19770 19774 + 19770 19775 19764 + 19764 19775 19776 + 19776 19765 19764 + 19765 19776 19777 + 19765 19777 19766 + 19778 19773 11429 + 19779 19773 19778 + 19773 19779 19780 + 19780 19774 19773 + 19780 19781 19774 + 19774 19781 19775 + 19775 19781 19782 + 19782 19776 19775 + 11429 11428 19778 + 19778 11428 11440 + 11440 19783 19778 + 19779 19778 19783 + 19784 19783 11440 + 19785 19783 19784 + 19783 19785 19779 + 11440 19786 19784 + 19784 19786 19787 + 19787 19788 19784 + 19785 19784 19788 + 19788 19789 19785 + 19785 19789 19790 + 19779 19785 19790 + 19791 19786 11440 + 19786 19791 19792 + 19792 19787 19786 + 19793 19787 19792 + 19787 19793 19794 + 19794 19788 19787 + 19789 19788 19794 + 19789 19794 19795 + 19795 19790 19789 + 11440 19796 19791 + 19791 19796 19797 + 19797 19798 19791 + 19791 19798 19799 + 19799 19792 19791 + 19800 19792 19799 + 19792 19800 19793 + 19796 11440 11439 + 11439 11445 19796 + 19797 19796 11445 + 11445 11453 19797 + 19801 19797 11453 + 19798 19797 19801 + 19801 19802 19798 + 19798 19802 19803 + 19803 19799 19798 + 19799 19803 19804 + 19799 19804 19800 + 11453 11457 19801 + 19801 11457 11462 + 11462 19805 19801 + 19802 19801 19805 + 19805 19806 19802 + 19802 19806 19807 + 19807 19803 19802 + 19804 19803 19807 + 19807 19808 19804 + 19800 19804 19808 + 19808 19809 19800 + 19793 19800 19809 + 11467 19805 11462 + 19805 11467 19810 + 19810 19806 19805 + 19806 19810 10876 + 10876 10875 19806 + 19806 10875 19807 + 10881 19807 10875 + 19807 10881 19811 + 19811 19808 19807 + 19810 11467 11466 + 11466 19812 19810 + 19810 19812 10867 + 10867 10876 19810 + 19813 19812 11466 + 19812 19813 10868 + 10868 10867 19812 + 11466 11471 19813 + 19813 11471 11476 + 11476 19814 19813 + 19813 19814 10863 + 10863 10868 19813 + 19815 19814 11476 + 19814 19815 19816 + 19816 10863 19814 + 10863 19816 10856 + 10856 19816 19817 + 19817 10851 10856 + 11476 19818 19815 + 19815 19818 19819 + 19819 19820 19815 + 19815 19820 19817 + 19817 19816 19815 + 19818 11476 11475 + 11475 11481 19818 + 19819 19818 11481 + 11481 19821 19819 + 19822 19819 19821 + 19820 19819 19822 + 19822 19823 19820 + 19820 19823 19824 + 19824 19817 19820 + 10851 19817 19824 + 19824 10852 10851 + 11486 19821 11481 + 19821 11486 11491 + 11491 19825 19821 + 19821 19825 19822 + 19822 19825 19826 + 19826 19827 19822 + 19823 19822 19827 + 19827 19828 19823 + 19824 19823 19828 + 19828 19829 19824 + 10852 19824 19829 + 19829 10846 10852 + 19825 11491 19830 + 19830 19826 19825 + 19831 19826 19830 + 19826 19831 19832 + 19832 19827 19826 + 19827 19832 19833 + 19833 19828 19827 + 19828 19833 19834 + 19834 19829 19828 + 19835 19830 11491 + 19836 19830 19835 + 19830 19836 19831 + 19831 19836 19837 + 19837 19838 19831 + 19831 19838 19839 + 19839 19832 19831 + 19833 19832 19839 + 11491 11490 19835 + 11496 19835 11490 + 19840 19835 11496 + 19835 19840 19836 + 19837 19836 19840 + 19840 19841 19837 + 19842 19837 19841 + 19837 19842 19843 + 19843 19838 19837 + 19838 19843 19844 + 19844 19839 19838 + 11496 19845 19840 + 19840 19845 19846 + 19846 19841 19840 + 19847 19841 19846 + 19841 19847 19842 + 19848 19842 19847 + 19843 19842 19848 + 19845 11496 11495 + 11495 11501 19845 + 19846 19845 11501 + 11501 19849 19846 + 19850 19846 19849 + 19846 19850 19847 + 19847 19850 19851 + 19851 19852 19847 + 19847 19852 19848 + 11505 19849 11501 + 19853 19849 11505 + 19849 19853 19850 + 19851 19850 19853 + 19853 19854 19851 + 19855 19851 19854 + 19851 19855 19856 + 19856 19852 19851 + 19852 19856 19857 + 19857 19848 19852 + 11505 19858 19853 + 19853 19858 19859 + 19859 19854 19853 + 19860 19854 19859 + 19854 19860 19855 + 19861 19855 19860 + 19856 19855 19861 + 19858 11505 11510 + 11510 19862 19858 + 19859 19858 19862 + 19862 19863 19859 + 19864 19859 19863 + 19859 19864 19860 + 19860 19864 19865 + 19865 19866 19860 + 19860 19866 19861 + 19862 11510 11509 + 11509 19867 19862 + 19862 19867 19868 + 19868 19863 19862 + 19869 19863 19868 + 19863 19869 19864 + 19865 19864 19869 + 19867 11509 11518 + 11518 19870 19867 + 19868 19867 19870 + 19870 19871 19868 + 19872 19868 19871 + 19868 19872 19869 + 19869 19872 19873 + 19873 19874 19869 + 19869 19874 19865 + 19870 11518 11517 + 11517 19875 19870 + 19870 19875 19876 + 19876 19871 19870 + 19877 19871 19876 + 19871 19877 19872 + 19873 19872 19877 + 19875 11517 11522 + 11522 19878 19875 + 19876 19875 19878 + 19878 19879 19876 + 19880 19876 19879 + 19876 19880 19877 + 19877 19880 19881 + 19881 19882 19877 + 19877 19882 19873 + 19878 11522 11521 + 11521 19883 19878 + 19878 19883 19884 + 19884 19879 19878 + 19885 19879 19884 + 19879 19885 19880 + 19881 19880 19885 + 19883 11521 11529 + 11529 19886 19883 + 19884 19883 19886 + 19886 19887 19884 + 19888 19884 19887 + 19884 19888 19885 + 19885 19888 19889 + 19889 19890 19885 + 19885 19890 19881 + 19886 11529 11528 + 11528 19891 19886 + 19886 19891 19892 + 19892 19887 19886 + 19893 19887 19892 + 19887 19893 19888 + 19889 19888 19893 + 19891 11528 11537 + 11537 19894 19891 + 19892 19891 19894 + 19894 19895 19892 + 19896 19892 19895 + 19892 19896 19893 + 19893 19896 19897 + 19897 19898 19893 + 19893 19898 19889 + 19894 11537 11536 + 11536 19899 19894 + 19894 19899 19900 + 19900 19895 19894 + 19901 19895 19900 + 19895 19901 19896 + 19897 19896 19901 + 19899 11536 19902 + 19902 19903 19899 + 19900 19899 19903 + 19903 19904 19900 + 19905 19900 19904 + 19900 19905 19901 + 11541 19902 11536 + 19906 19902 11541 + 19903 19902 19906 + 19906 19907 19903 + 19903 19907 19908 + 19908 19904 19903 + 19909 19904 19908 + 19904 19909 19905 + 19910 19905 19909 + 19901 19905 19910 + 11541 11545 19906 + 19906 11545 11550 + 11550 19911 19906 + 19907 19906 19911 + 19911 19912 19907 + 19908 19907 19912 + 19912 19913 19908 + 19914 19908 19913 + 19908 19914 19909 + 19915 19911 11550 + 19912 19911 19915 + 19915 19916 19912 + 19912 19916 19917 + 19917 19913 19912 + 19918 19913 19917 + 19913 19918 19914 + 19919 19914 19918 + 19909 19914 19919 + 11550 11555 19915 + 19915 11555 19920 + 19920 19921 19915 + 19916 19915 19921 + 19921 19922 19916 + 19917 19916 19922 + 19922 19923 19917 + 19924 19917 19923 + 19917 19924 19918 + 11554 19920 11555 + 19920 11554 19925 + 19925 19926 19920 + 19920 19926 19927 + 19927 19921 19920 + 19922 19921 19927 + 19927 19928 19922 + 19922 19928 19929 + 19929 19923 19922 + 19925 11554 11559 + 11559 11564 19925 + 19930 19925 11564 + 19926 19925 19930 + 19930 19931 19926 + 19927 19926 19931 + 19931 19932 19927 + 19928 19927 19932 + 19932 19933 19928 + 19929 19928 19933 + 11564 19934 19930 + 19935 19930 19934 + 19931 19930 19935 + 19935 19936 19931 + 19931 19936 19937 + 19937 19932 19931 + 19933 19932 19937 + 19938 19934 11564 + 19939 19934 19938 + 19934 19939 19935 + 19940 19935 19939 + 19936 19935 19940 + 19940 19941 19936 + 19937 19936 19941 + 11564 11563 19938 + 11569 19938 11563 + 19942 19938 11569 + 19938 19942 19939 + 19939 19942 19943 + 19943 19944 19939 + 19939 19944 19940 + 19945 19940 19944 + 19941 19940 19945 + 11569 19946 19942 + 19942 19946 19947 + 19947 19943 19942 + 19948 19943 19947 + 19943 19948 19949 + 19949 19944 19943 + 19944 19949 19945 + 19950 19946 11569 + 19946 19950 19951 + 19951 19947 19946 + 19947 19951 19952 + 19952 19953 19947 + 19947 19953 19948 + 19954 19948 19953 + 19949 19948 19954 + 11569 11568 19950 + 19950 11568 11567 + 11567 19955 19950 + 19950 19955 19956 + 19956 19951 19950 + 19952 19951 19956 + 19956 19957 19952 + 19952 19957 19958 + 19958 19959 19952 + 19953 19952 19959 + 11576 19955 11567 + 19955 11576 19960 + 19960 19956 19955 + 19956 19960 19961 + 19961 19957 19956 + 19957 19961 19962 + 19962 19958 19957 + 11580 19960 11576 + 19961 19960 11580 + 11580 19963 19961 + 19961 19963 19964 + 19964 19962 19961 + 19965 19962 19964 + 19958 19962 19965 + 19965 19966 19958 + 19958 19966 19967 + 19967 19959 19958 + 11585 19963 11580 + 19963 11585 19968 + 19968 19964 19963 + 19964 19968 19969 + 19969 19970 19964 + 19964 19970 19965 + 19965 19970 19971 + 19971 19972 19965 + 19966 19965 19972 + 19973 19968 11585 + 19969 19968 19973 + 19973 19974 19969 + 19975 19969 19974 + 19970 19969 19975 + 19975 19971 19970 + 11585 11590 19973 + 19629 19973 11590 + 19974 19973 19629 + 19629 19976 19974 + 19974 19976 19977 + 19977 19978 19974 + 19974 19978 19975 + 19979 19975 19978 + 19971 19975 19979 + 19976 19629 19628 + 19628 19980 19976 + 19976 19980 19981 + 19981 19982 19976 + 19982 19977 19976 + 19983 19977 19982 + 19978 19977 19983 + 19983 19984 19978 + 19978 19984 19979 + 19627 19980 19628 + 19980 19627 19985 + 19985 19981 19980 + 19981 19985 19986 + 19981 19986 19987 + 19987 19982 19981 + 19988 19982 19987 + 19982 19988 19983 + 19983 19988 19989 + 19984 19983 19989 + 19985 19627 19626 + 19990 19985 19626 + 19986 19985 19990 + 19990 19991 19986 + 19986 19991 19992 + 19987 19986 19992 + 19993 19987 19992 + 19988 19987 19993 + 19993 19989 19988 + 19994 19989 19993 + 19989 19994 19984 + 19626 19995 19990 + 19996 19990 19995 + 19990 19996 19991 + 19991 19996 19997 + 19997 19998 19991 + 19991 19998 19992 + 19632 19995 19626 + 19995 19632 19637 + 19637 19999 19995 + 19995 19999 19996 + 19997 19996 19999 + 19999 20000 19997 + 20001 19997 20000 + 19997 20001 19998 + 19998 20001 20002 + 20002 19992 19998 + 19999 19637 20003 + 20003 20000 19999 + 20000 20003 20004 + 20004 20005 20000 + 20000 20005 20001 + 20001 20005 20006 + 20002 20001 20006 + 20007 20003 19637 + 20004 20003 20007 + 20007 20008 20004 + 20009 20004 20008 + 20005 20004 20009 + 20009 20006 20005 + 19637 19636 20007 + 20010 20007 19636 + 20007 20010 20011 + 20011 20008 20007 + 20008 20011 20012 + 20012 20013 20008 + 20008 20013 20009 + 20014 20009 20013 + 20009 20014 20006 + 19636 19635 20010 + 20010 19635 20015 + 20015 20016 20010 + 20011 20010 20016 + 20016 20017 20011 + 20011 20017 20018 + 20012 20011 20018 + 19641 20015 19635 + 20015 19641 20019 + 20019 20020 20015 + 20015 20020 20021 + 20021 20016 20015 + 20017 20016 20021 + 20021 20022 20017 + 20017 20022 20023 + 20023 20018 20017 + 20019 19641 19640 + 19640 20024 20019 + 20025 20019 20024 + 20020 20019 20025 + 20025 20026 20020 + 20020 20026 20027 + 20027 20021 20020 + 20022 20021 20027 + 20027 20028 20022 + 20023 20022 20028 + 19647 20024 19640 + 20024 19647 19653 + 19653 20029 20024 + 20024 20029 20025 + 20030 20025 20029 + 20025 20030 20031 + 20031 20026 20025 + 20026 20031 20032 + 20032 20027 20026 + 20027 20032 20033 + 20033 20028 20027 + 20034 20029 19653 + 20029 20034 20030 + 20030 20034 20035 + 20036 20030 20035 + 20031 20030 20036 + 20036 20037 20031 + 20031 20037 20038 + 20038 20032 20031 + 20033 20032 20038 + 19653 20039 20034 + 20034 20039 20040 + 20040 20035 20034 + 11018 20035 20040 + 20035 11018 11025 + 11025 20041 20035 + 20035 20041 20036 + 20039 19653 19652 + 19652 19658 20039 + 20040 20039 19658 + 19658 20042 20040 + 20043 20040 20042 + 20040 20043 11018 + 11018 20043 11019 + 11019 20043 20044 + 20044 20045 11019 + 11020 11019 20045 + 19663 20042 19658 + 20044 20042 19663 + 20042 20044 20043 + 19663 20046 20044 + 20044 20046 20047 + 20047 20045 20044 + 20048 20045 20047 + 20045 20048 11020 + 11014 11020 20048 + 20048 20049 11014 + 11015 11014 20049 + 20046 19663 19667 + 19667 20050 20046 + 20047 20046 20050 + 20050 20051 20047 + 20052 20047 20051 + 20047 20052 20048 + 20048 20052 20053 + 20053 20049 20048 + 20054 20049 20053 + 20049 20054 11015 + 11016 11015 20054 + 20050 19667 19666 + 19666 19676 20050 + 20050 19676 20055 + 20055 20051 20050 + 20056 20051 20055 + 20051 20056 20052 + 20053 20052 20056 + 20056 20057 20053 + 20058 20053 20057 + 20053 20058 20054 + 20055 19676 19675 + 19675 20059 20055 + 20060 20055 20059 + 20055 20060 20056 + 20056 20060 20061 + 20061 20057 20056 + 20062 20057 20061 + 20057 20062 20058 + 20063 20058 20062 + 20054 20058 20063 + 19680 20059 19675 + 20064 20059 19680 + 20059 20064 20060 + 20061 20060 20064 + 20064 20065 20061 + 20066 20061 20065 + 20061 20066 20062 + 20062 20066 20067 + 20067 20068 20062 + 20062 20068 20063 + 19680 20069 20064 + 20064 20069 20070 + 20070 20065 20064 + 20071 20065 20070 + 20065 20071 20066 + 20067 20066 20071 + 20069 19680 19685 + 19685 20072 20069 + 20070 20069 20072 + 20072 20073 20070 + 20074 20070 20073 + 20070 20074 20071 + 20071 20074 20075 + 20075 20076 20071 + 20071 20076 20067 + 20072 19685 19684 + 19684 20077 20072 + 20072 20077 20078 + 20078 20073 20072 + 20079 20073 20078 + 20073 20079 20074 + 20075 20074 20079 + 20077 19684 19693 + 19693 20080 20077 + 20078 20077 20080 + 20080 20081 20078 + 20082 20078 20081 + 20078 20082 20079 + 20079 20082 20083 + 20083 20084 20079 + 20079 20084 20075 + 20080 19693 19692 + 19692 20085 20080 + 20080 20085 20086 + 20086 20081 20080 + 20087 20081 20086 + 20081 20087 20082 + 20083 20082 20087 + 20085 19692 20088 + 20088 20089 20085 + 20086 20085 20089 + 20089 20090 20086 + 20091 20086 20090 + 20086 20091 20087 + 19696 20088 19692 + 19705 20088 19696 + 20089 20088 19705 + 19705 20092 20089 + 20089 20092 20093 + 20093 20090 20089 + 19919 20090 20093 + 20090 19919 20091 + 19918 20091 19919 + 20087 20091 19918 + 19918 19924 20087 + 20087 19924 20083 + 20092 19705 20094 + 20094 20095 20092 + 20093 20092 20095 + 20095 20096 20093 + 20097 20093 20096 + 20093 20097 19919 + 19919 20097 19909 + 19909 20097 19910 + 19704 20094 19705 + 19714 20094 19704 + 20095 20094 19714 + 19714 20098 20095 + 20095 20098 20099 + 20099 20096 20095 + 19910 20096 20099 + 20096 19910 20097 + 20098 19714 20100 + 20100 20101 20098 + 20099 20098 20101 + 20101 20102 20099 + 20103 20099 20102 + 20099 20103 19910 + 19910 20103 19901 + 19901 20103 19897 + 19713 20100 19714 + 20104 20100 19713 + 20101 20100 20104 + 20104 20105 20101 + 20101 20105 20106 + 20106 20102 20101 + 19897 20102 20106 + 20102 19897 20103 + 19713 19718 20104 + 20104 19718 19723 + 19723 20107 20104 + 20105 20104 20107 + 20107 20108 20105 + 20106 20105 20108 + 20108 20109 20106 + 19898 20106 20109 + 20106 19898 19897 + 20110 20107 19723 + 20108 20107 20110 + 20110 20111 20108 + 20108 20111 20112 + 20112 20109 20108 + 19889 20109 20112 + 20109 19889 19898 + 19723 20113 20110 + 20110 20113 20114 + 20114 20115 20110 + 20111 20110 20115 + 20115 20116 20111 + 20112 20111 20116 + 19722 20113 19723 + 20113 19722 20117 + 20117 20114 20113 + 20114 20117 20118 + 20118 20119 20114 + 20114 20119 20120 + 20120 20115 20114 + 20116 20115 20120 + 19727 20117 19722 + 20118 20117 19727 + 19727 19736 20118 + 20118 19736 20121 + 20121 20122 20118 + 20119 20118 20122 + 20122 20123 20119 + 20120 20119 20123 + 20123 20124 20120 + 20125 20120 20124 + 20120 20125 20116 + 19735 20121 19736 + 20121 19735 20126 + 20126 20127 20121 + 20121 20127 20128 + 20128 20122 20121 + 20123 20122 20128 + 20128 20129 20123 + 20123 20129 20130 + 20130 20124 20123 + 20126 19735 19734 + 19734 19741 20126 + 20131 20126 19741 + 20127 20126 20131 + 20131 20132 20127 + 20128 20127 20132 + 20132 20133 20128 + 20129 20128 20133 + 20133 20134 20129 + 20130 20129 20134 + 19741 20135 20131 + 20136 20131 20135 + 20132 20131 20136 + 20136 20137 20132 + 20132 20137 20138 + 20138 20133 20132 + 20134 20133 20138 + 19746 20135 19741 + 20135 19746 20139 + 20139 20140 20135 + 20135 20140 20136 + 20136 20140 20141 + 20141 20142 20136 + 20137 20136 20142 + 20142 20143 20137 + 20138 20137 20143 + 20139 19746 19745 + 19745 20144 20139 + 20145 20139 20144 + 20140 20139 20145 + 20145 20141 20140 + 20146 20141 20145 + 20141 20146 20147 + 20147 20142 20141 + 20143 20142 20147 + 20148 20144 19745 + 20144 20148 20149 + 20149 20150 20144 + 20144 20150 20145 + 20150 20151 20145 + 20146 20145 20151 + 19745 19744 20148 + 20148 19744 20152 + 20152 20153 20148 + 20149 20148 20153 + 20154 20149 20153 + 20155 20149 20154 + 20150 20149 20155 + 19743 20152 19744 + 20156 20152 19743 + 20153 20152 20156 + 20156 20157 20153 + 20153 20157 20158 + 20158 20159 20153 + 20153 20159 20154 + 19743 19766 20156 + 20160 20156 19766 + 20157 20156 20160 + 20160 20161 20157 + 20157 20161 20162 + 20162 20158 20157 + 20163 20158 20162 + 20158 20163 20159 + 20159 20163 20164 + 20164 20154 20159 + 19766 19777 20160 + 19777 20165 20160 + 20166 20160 20165 + 20160 20166 20167 + 20167 20161 20160 + 20161 20167 20168 + 20168 20162 20161 + 19777 19776 20165 + 19776 19782 20165 + 19782 20169 20165 + 20165 20169 20166 + 20170 20166 20169 + 20167 20166 20170 + 20170 20171 20167 + 20167 20171 20172 + 20172 20168 20167 + 20173 20168 20172 + 20162 20168 20173 + 20174 20169 19782 + 20169 20174 20170 + 20175 20170 20174 + 20175 20171 20170 + 20171 20175 20176 + 20176 20172 20171 + 20176 20177 20172 + 20172 20177 20173 + 20178 20174 19782 + 20179 20174 20178 + 20174 20179 20175 + 20175 20179 19779 + 20176 20175 19779 + 19790 20176 19779 + 20177 20176 19790 + 19790 20180 20177 + 20173 20177 20180 + 19781 20178 19782 + 20178 19781 19780 + 20179 20178 19780 + 20179 19780 19779 + 19790 19795 20180 + 20180 19795 20181 + 20181 20182 20180 + 20180 20182 20173 + 20182 20183 20173 + 20183 20184 20173 + 20185 20173 20184 + 20173 20185 20162 + 20181 19795 20186 + 20186 20187 20181 + 20188 20181 20187 + 20188 20182 20181 + 20182 20188 20189 + 20189 20183 20182 + 19795 19794 20186 + 19794 19793 20186 + 19809 20186 19793 + 20186 19809 20190 + 20190 20191 20186 + 20186 20191 20192 + 20192 20187 20186 + 20193 20187 20192 + 20187 20193 20188 + 20188 20193 20194 + 20189 20188 20194 + 20190 19809 19808 + 19808 19811 20190 + 20190 19811 20195 + 20195 20196 20190 + 20191 20190 20196 + 20196 20197 20191 + 20192 20191 20197 + 20197 20198 20192 + 20193 20192 20198 + 20198 20199 20193 + 20193 20199 20194 + 10880 20195 19811 + 10886 20195 10880 + 20195 10886 20200 + 20200 20196 20195 + 20197 20196 20200 + 20200 20201 20197 + 20197 20201 20202 + 20202 20198 20197 + 20199 20198 20202 + 19811 10881 10880 + 20200 10886 10885 + 10885 20203 20200 + 20201 20200 20203 + 20203 20204 20201 + 20202 20201 20204 + 20204 20205 20202 + 20199 20202 20205 + 20205 20206 20199 + 20199 20206 20194 + 10890 20203 10885 + 20204 20203 10890 + 10890 10894 20204 + 20204 10894 10899 + 10899 20205 20204 + 20206 20205 10899 + 20206 10899 10898 + 10898 20194 20206 + 20194 10898 20207 + 20194 20207 20208 + 20208 20209 20194 + 20194 20209 20189 + 20207 10898 20210 + 20210 20211 20207 + 20208 20207 20211 + 20212 20208 20211 + 20213 20208 20212 + 20209 20208 20213 + 10897 20210 10898 + 10909 20210 10897 + 10909 20211 20210 + 20211 10909 20214 + 20214 20215 20211 + 20211 20215 20212 + 20214 10909 10686 + 20216 20214 10686 + 20217 20214 20216 + 20214 20217 20215 + 20215 20217 20218 + 20218 20219 20215 + 20215 20219 20212 + 10686 20220 20216 + 20220 20221 20216 + 20222 20216 20221 + 20216 20222 20223 + 20216 20223 20217 + 20218 20217 20223 + 10693 20220 10686 + 20220 10693 20224 + 20220 20224 20225 + 20225 20221 20220 + 20221 20225 20226 + 20221 20226 20222 + 20227 20222 20226 + 20223 20222 20227 + 20227 20228 20223 + 20223 20228 20218 + 20224 10693 10692 + 10692 20229 20224 + 20224 20229 20230 + 20230 20225 20224 + 20226 20225 20230 + 20230 20231 20226 + 20226 20231 20227 + 20232 20227 20231 + 20227 20232 20233 + 20233 20228 20227 + 20229 10692 20234 + 20229 20234 20235 + 20235 20236 20229 + 20229 20236 20230 + 20237 20230 20236 + 20230 20237 20238 + 20238 20231 20230 + 20231 20238 20232 + 20234 10692 20239 + 20239 20240 20234 + 20235 20234 20240 + 20241 20235 20240 + 20242 20235 20241 + 20236 20235 20242 + 20236 20242 20237 + 20243 20237 20242 + 20238 20237 20243 + 20244 20239 10692 + 20245 20239 20244 + 20240 20239 20245 + 20240 20245 20246 + 20246 20247 20240 + 20240 20247 20241 + 10698 20244 10692 + 20248 20244 10698 + 20244 20248 20249 + 20244 20249 20245 + 20245 20249 20250 + 20246 20245 20250 + 20251 20246 20250 + 20252 20246 20251 + 20247 20246 20252 + 10698 10704 20248 + 20248 10704 20253 + 20253 20254 20248 + 20254 20255 20248 + 20249 20248 20255 + 20255 20250 20249 + 20250 20255 20256 + 20250 20256 20257 + 20257 20251 20250 + 10703 20253 10704 + 10703 20258 20253 + 20253 20258 20259 + 20259 20254 20253 + 20254 20259 20260 + 20254 20260 20256 + 20256 20255 20254 + 20258 10703 10708 + 10708 20261 20258 + 20258 20261 20262 + 20259 20258 20262 + 20260 20259 20262 + 20262 20263 20260 + 20260 20263 20264 + 20256 20260 20264 + 20264 20257 20256 + 20265 20257 20264 + 20251 20257 20265 + 10708 10707 20261 + 20261 10707 20266 + 20266 20262 20261 + 20263 20262 20266 + 20266 20267 20263 + 20263 20267 20268 + 20268 20264 20263 + 20264 20268 20269 + 20264 20269 20265 + 20270 20266 10707 + 20270 20271 20266 + 20271 20267 20266 + 20267 20271 20272 + 20272 20268 20267 + 20269 20268 20272 + 20272 20273 20269 + 20265 20269 20273 + 10712 20270 10707 + 20274 20270 10712 + 20270 20274 20271 + 20271 20274 20275 + 20275 20272 20271 + 20272 20275 20276 + 20276 20273 20272 + 10712 10711 20274 + 20275 20274 10711 + 20277 20275 10711 + 20276 20275 20277 + 20277 20278 20276 + 20276 20278 20279 + 20279 20280 20276 + 20273 20276 20280 + 10711 20281 20277 + 20282 20277 20281 + 20277 20282 20283 + 20283 20278 20277 + 20278 20283 20284 + 20284 20279 20278 + 10716 20281 10711 + 20281 10716 10721 + 20281 10721 20282 + 20282 10721 20285 + 20285 20286 20282 + 20283 20282 20286 + 20286 20287 20283 + 20283 20287 20288 + 20288 20284 20283 + 10721 10720 20285 + 10735 20285 10720 + 20285 10735 20289 + 20289 20290 20285 + 20285 20290 20291 + 20291 20286 20285 + 20287 20286 20291 + 20287 20291 20292 + 20292 20288 20287 + 20289 10735 20293 + 20293 20294 20289 + 20295 20289 20294 + 20290 20289 20295 + 20295 20296 20290 + 20290 20296 20292 + 20292 20291 20290 + 10734 20293 10735 + 20297 20293 10734 + 20294 20293 20297 + 20294 20297 20298 + 20298 20299 20294 + 20294 20299 20295 + 20300 20295 20299 + 20296 20295 20300 + 10734 10743 20297 + 20298 20297 10743 + 10743 10752 20298 + 20301 20298 10752 + 20299 20298 20301 + 20301 20302 20299 + 20299 20302 20300 + 20300 20302 20303 + 20303 20304 20300 + 20305 20300 20304 + 20300 20305 20296 + 10752 20306 20301 + 20301 20306 20307 + 20307 20308 20301 + 20302 20301 20308 + 20308 20303 20302 + 10751 20306 10752 + 20306 10751 20309 + 20309 20307 20306 + 20309 10768 20307 + 20307 10768 10785 + 10785 20308 20307 + 20303 20308 10785 + 10785 10791 20303 + 20303 10791 10796 + 10796 20304 20303 + 10759 20309 10751 + 10768 20309 10759 + 20162 20185 20163 + 20164 20163 20185 + 20185 20310 20164 + 20311 20164 20310 + 20164 20311 20312 + 20312 20154 20164 + 20154 20312 20155 + 20184 20310 20185 + 20310 20184 20313 + 20313 20314 20310 + 20310 20314 20311 + 20315 20311 20314 + 20312 20311 20315 + 20315 20316 20312 + 20312 20316 20317 + 20155 20312 20317 + 20313 20184 20183 + 20183 20318 20313 + 20313 20318 20319 + 20319 20320 20313 + 20314 20313 20320 + 20320 20321 20314 + 20314 20321 20315 + 20322 20315 20321 + 20315 20322 20316 + 20189 20318 20183 + 20318 20189 20323 + 20323 20319 20318 + 20323 20324 20319 + 20319 20324 20325 + 20325 20320 20319 + 20321 20320 20325 + 20325 20326 20321 + 20321 20326 20322 + 20209 20323 20189 + 20324 20323 20209 + 20209 20213 20324 + 20324 20213 20327 + 20325 20324 20327 + 20326 20325 20327 + 20327 20328 20326 + 20322 20326 20328 + 20329 20322 20328 + 20316 20322 20329 + 20329 20330 20316 + 20316 20330 20317 + 20212 20327 20213 + 20327 20212 20328 + 20328 20212 20331 + 20331 20332 20328 + 20328 20332 20329 + 20333 20329 20332 + 20329 20333 20330 + 20330 20333 20334 + 20334 20317 20330 + 20219 20331 20212 + 20335 20331 20219 + 20332 20331 20335 + 20332 20335 20333 + 20334 20333 20335 + 20335 20336 20334 + 20337 20334 20336 + 20334 20337 20338 + 20338 20317 20334 + 20219 20336 20335 + 20336 20219 20218 + 20218 20339 20336 + 20336 20339 20337 + 20340 20337 20339 + 20338 20337 20340 + 20340 20341 20338 + 20338 20341 20342 + 20343 20338 20342 + 20317 20338 20343 + 20339 20218 20228 + 20228 20233 20339 + 20339 20233 20340 + 20344 20340 20233 + 20340 20344 20341 + 20341 20344 20345 + 20345 20346 20341 + 20341 20346 20342 + 20233 20232 20344 + 20345 20344 20232 + 20232 20238 20345 + 20243 20345 20238 + 20345 20243 20346 + 20346 20243 20347 + 20347 20342 20346 + 20347 20348 20342 + 20342 20348 20349 + 20349 20350 20342 + 20342 20350 20343 + 20347 20243 20242 + 20242 20351 20347 + 20348 20347 20351 + 20351 20352 20348 + 20348 20352 20353 + 20353 20354 20348 + 20354 20349 20348 + 20241 20351 20242 + 20241 20352 20351 + 20352 20241 20247 + 20247 20252 20352 + 20352 20252 20353 + 20251 20353 20252 + 20265 20353 20251 + 20353 20265 20355 + 20355 20354 20353 + 20356 20354 20355 + 20354 20356 20357 + 20357 20349 20354 + 20349 20357 20358 + 20358 20350 20349 + 20350 20358 20359 + 20359 20343 20350 + 20355 20265 20273 + 20273 20360 20355 + 20361 20355 20360 + 20355 20361 20356 + 20356 20361 20362 + 20362 20363 20356 + 20356 20363 20364 + 20364 20357 20356 + 20358 20357 20364 + 20280 20360 20273 + 20365 20360 20280 + 20360 20365 20361 + 20362 20361 20365 + 20365 20366 20362 + 20366 20367 20362 + 20368 20362 20367 + 20363 20362 20368 + 20365 20280 20279 + 20279 20366 20365 + 20366 20279 20284 + 20284 20369 20366 + 20366 20369 20370 + 20370 20367 20366 + 20367 20370 20371 + 20371 20372 20367 + 20367 20372 20368 + 20369 20284 20288 + 20288 20373 20369 + 20370 20369 20373 + 20374 20370 20373 + 20371 20370 20374 + 20292 20373 20288 + 20373 20292 20296 + 20296 20305 20373 + 20373 20305 20374 + 20304 20374 20305 + 20374 20304 10796 + 10796 20375 20374 + 20374 20375 20371 + 20371 20375 20376 + 20376 20377 20371 + 20377 20378 20371 + 20372 20371 20378 + 20378 20379 20372 + 20368 20372 20379 + 20375 10796 10795 + 10795 20376 20375 + 10800 20376 10795 + 20376 10800 20380 + 20380 20377 20376 + 20380 20381 20377 + 20377 20381 20382 + 20382 20378 20377 + 20382 20379 20378 + 20379 20382 20383 + 20383 20384 20379 + 20379 20384 20368 + 20380 10800 10799 + 10799 20385 20380 + 20381 20380 20385 + 20385 20386 20381 + 20381 20386 20387 + 20387 20383 20381 + 20383 20382 20381 + 10804 20385 10799 + 20385 10804 10809 + 10809 20386 20385 + 20386 10809 20388 + 20388 20387 20386 + 20387 20388 20389 + 20389 20390 20387 + 20387 20390 20391 + 20391 20383 20387 + 20384 20383 20391 + 20392 20388 10809 + 20389 20388 20392 + 20392 20393 20389 + 20389 20393 20394 + 20394 20395 20389 + 20390 20389 20395 + 20395 20396 20390 + 20391 20390 20396 + 10809 10808 20392 + 10814 20392 10808 + 20392 10814 20397 + 20397 20393 20392 + 20393 20397 20398 + 20398 20394 20393 + 20394 20398 20399 + 20399 20400 20394 + 20394 20400 20401 + 20401 20395 20394 + 20396 20395 20401 + 20397 10814 10813 + 10813 20402 20397 + 20397 20402 20403 + 20403 20398 20397 + 20399 20398 20403 + 20403 20404 20399 + 20399 20404 20405 + 20405 20406 20399 + 20400 20399 20406 + 10821 20402 10813 + 20402 10821 20407 + 20407 20403 20402 + 20403 20407 20408 + 20408 20404 20403 + 20404 20408 20409 + 20409 20405 20404 + 20410 20407 10821 + 20408 20407 20410 + 20410 20411 20408 + 20408 20411 20412 + 20412 20409 20408 + 20413 20409 20412 + 20405 20409 20413 + 10821 10825 20410 + 10830 20410 10825 + 20410 10830 10838 + 10838 20411 20410 + 20411 10838 20414 + 20414 20412 20411 + 20412 20414 20415 + 20415 20416 20412 + 20412 20416 20413 + 20417 20414 10838 + 20415 20414 20417 + 20417 20418 20415 + 20415 20418 20419 + 20419 20420 20415 + 20416 20415 20420 + 20420 20421 20416 + 20413 20416 20421 + 10838 10837 20417 + 20422 20417 10837 + 20417 20422 20423 + 20423 20418 20417 + 20418 20423 20424 + 20424 20419 20418 + 10837 10836 20422 + 10847 20422 10836 + 20423 20422 10847 + 10847 19834 20423 + 20423 19834 19833 + 19833 20424 20423 + 19839 20424 19833 + 20419 20424 19839 + 19839 19844 20419 + 20419 19844 20425 + 20425 20420 20419 + 20421 20420 20425 + 19829 19834 10847 + 10847 10846 19829 + 20425 19844 19843 + 19843 20426 20425 + 20427 20425 20426 + 20425 20427 20421 + 20421 20427 20428 + 20428 20429 20421 + 20421 20429 20413 + 19848 20426 19843 + 20430 20426 19848 + 20426 20430 20427 + 20428 20427 20430 + 20430 20431 20428 + 20432 20428 20431 + 20428 20432 20433 + 20433 20429 20428 + 20429 20433 20434 + 20434 20413 20429 + 20413 20434 20405 + 19848 19857 20430 + 20430 19857 20435 + 20435 20431 20430 + 20436 20431 20435 + 20431 20436 20432 + 20437 20432 20436 + 20433 20432 20437 + 20437 20438 20433 + 20433 20438 20439 + 20439 20434 20433 + 20405 20434 20439 + 20439 20406 20405 + 20435 19857 19856 + 19856 20440 20435 + 20441 20435 20440 + 20435 20441 20436 + 20436 20441 20442 + 20442 20443 20436 + 20436 20443 20437 + 19861 20440 19856 + 20444 20440 19861 + 20440 20444 20441 + 20442 20441 20444 + 20444 20445 20442 + 20446 20442 20445 + 20442 20446 20447 + 20447 20443 20442 + 20443 20447 20448 + 20448 20437 20443 + 19861 20449 20444 + 20444 20449 20450 + 20450 20445 20444 + 20451 20445 20450 + 20445 20451 20446 + 20452 20446 20451 + 20447 20446 20452 + 20449 19861 19866 + 19866 20453 20449 + 20450 20449 20453 + 20453 20454 20450 + 20455 20450 20454 + 20450 20455 20451 + 20451 20455 20456 + 20456 20457 20451 + 20451 20457 20452 + 20453 19866 19865 + 19865 20458 20453 + 20453 20458 20459 + 20459 20454 20453 + 20460 20454 20459 + 20454 20460 20455 + 20456 20455 20460 + 20458 19865 19874 + 19874 20461 20458 + 20459 20458 20461 + 20461 20462 20459 + 20463 20459 20462 + 20459 20463 20460 + 20460 20463 20134 + 20134 20464 20460 + 20460 20464 20456 + 20461 19874 19873 + 19873 20465 20461 + 20461 20465 20466 + 20466 20462 20461 + 20130 20462 20466 + 20462 20130 20463 + 20134 20463 20130 + 20465 19873 19882 + 19882 20467 20465 + 20466 20465 20467 + 20467 20125 20466 + 20124 20466 20125 + 20466 20124 20130 + 20467 19882 19881 + 19881 20468 20467 + 20467 20468 20116 + 20116 20125 20467 + 20468 19881 19890 + 19890 20112 20468 + 20116 20468 20112 + 20112 19890 19889 + 20138 20464 20134 + 20464 20138 20469 + 20469 20456 20464 + 20456 20469 20470 + 20470 20457 20456 + 20457 20470 20471 + 20471 20452 20457 + 20143 20469 20138 + 20470 20469 20143 + 20143 20472 20470 + 20470 20472 20473 + 20473 20471 20470 + 20474 20471 20473 + 20452 20471 20474 + 20474 20475 20452 + 20452 20475 20447 + 20147 20472 20143 + 20472 20147 20476 + 20476 20473 20472 + 20473 20476 20477 + 20477 20478 20473 + 20473 20478 20474 + 20474 20478 20479 + 20479 20480 20474 + 20475 20474 20480 + 20476 20147 20146 + 20146 20481 20476 + 20477 20476 20481 + 20481 20482 20477 + 20483 20477 20482 + 20478 20477 20483 + 20483 20479 20478 + 20151 20481 20146 + 20482 20481 20151 + 20151 20484 20482 + 20482 20484 20485 + 20485 20486 20482 + 20482 20486 20483 + 20487 20483 20486 + 20479 20483 20487 + 20484 20151 20150 + 20150 20488 20484 + 20484 20488 20489 + 20489 20485 20484 + 20490 20485 20489 + 20485 20490 20491 + 20491 20486 20485 + 20486 20491 20487 + 20155 20488 20150 + 20488 20155 20492 + 20492 20489 20488 + 20489 20492 20343 + 20343 20359 20489 + 20489 20359 20490 + 20317 20492 20155 + 20343 20492 20317 + 20490 20359 20358 + 20358 20493 20490 + 20493 20494 20490 + 20491 20490 20494 + 20494 20495 20491 + 20491 20495 20496 + 20496 20487 20491 + 20497 20487 20496 + 20487 20497 20479 + 20364 20493 20358 + 20493 20364 20498 + 20498 20499 20493 + 20493 20499 20500 + 20500 20494 20493 + 20500 20495 20494 + 20495 20500 20501 + 20501 20496 20495 + 20502 20496 20501 + 20496 20502 20497 + 20498 20364 20363 + 20363 20503 20498 + 20498 20503 20504 + 20504 20505 20498 + 20499 20498 20505 + 20505 20506 20499 + 20500 20499 20506 + 20506 20501 20500 + 20507 20501 20506 + 20501 20507 20502 + 20368 20503 20363 + 20503 20368 20384 + 20384 20504 20503 + 20391 20504 20384 + 20504 20391 20508 + 20508 20505 20504 + 20505 20508 20509 + 20509 20506 20505 + 20506 20509 20507 + 20510 20507 20509 + 20502 20507 20510 + 20510 20511 20502 + 20502 20511 20512 + 20512 20497 20502 + 20479 20497 20512 + 20512 20480 20479 + 20396 20508 20391 + 20509 20508 20396 + 20396 20513 20509 + 20509 20513 20510 + 20514 20510 20513 + 20510 20514 20515 + 20515 20511 20510 + 20511 20515 20516 + 20516 20512 20511 + 20512 20516 20517 + 20517 20480 20512 + 20480 20517 20475 + 20401 20513 20396 + 20513 20401 20514 + 20518 20514 20401 + 20515 20514 20518 + 20518 20519 20515 + 20515 20519 20520 + 20520 20516 20515 + 20517 20516 20520 + 20520 20448 20517 + 20517 20448 20447 + 20447 20475 20517 + 20401 20400 20518 + 20406 20518 20400 + 20518 20406 20439 + 20439 20519 20518 + 20519 20439 20438 + 20438 20520 20519 + 20520 20438 20437 + 20437 20448 20520 + 19923 20083 19924 + 20083 19923 19929 + 19929 20084 20083 + 20084 19929 20521 + 20521 20075 20084 + 20075 20521 20522 + 20522 20076 20075 + 20076 20522 20523 + 20523 20067 20076 + 19933 20521 19929 + 20522 20521 19933 + 19933 20524 20522 + 20522 20524 20525 + 20525 20523 20522 + 20526 20523 20525 + 20067 20523 20526 + 20526 20068 20067 + 20068 20526 20527 + 20527 20063 20068 + 19937 20524 19933 + 20524 19937 20528 + 20528 20525 20524 + 20525 20528 20529 + 20529 20530 20525 + 20525 20530 20526 + 20526 20530 20531 + 20531 20527 20526 + 20532 20527 20531 + 20063 20527 20532 + 19941 20528 19937 + 20529 20528 19941 + 19941 20533 20529 + 20529 20533 20534 + 20534 20535 20529 + 20530 20529 20535 + 20535 20531 20530 + 20531 20535 20536 + 20536 20537 20531 + 20531 20537 20532 + 19945 20533 19941 + 20533 19945 20538 + 20538 20534 20533 + 20534 20538 20539 + 20539 20540 20534 + 20534 20540 20536 + 20536 20535 20534 + 20541 20538 19945 + 20539 20538 20541 + 20541 20542 20539 + 20543 20539 20542 + 20540 20539 20543 + 20543 20544 20540 + 20536 20540 20544 + 20544 20545 20536 + 20537 20536 20545 + 19945 19949 20541 + 19954 20541 19949 + 20542 20541 19954 + 19954 20546 20542 + 20542 20546 20547 + 20547 20548 20542 + 20542 20548 20543 + 20549 20543 20548 + 20544 20543 20549 + 20546 19954 20550 + 20550 20551 20546 + 20546 20551 20552 + 20552 20547 20546 + 20553 20547 20552 + 20548 20547 20553 + 20553 20554 20548 + 20548 20554 20549 + 19953 20550 19954 + 19959 20550 19953 + 20550 19959 19967 + 19967 20551 20550 + 20551 19967 20555 + 20555 20552 20551 + 20552 20555 20556 + 20556 20557 20552 + 20552 20557 20553 + 20553 20557 20558 + 20558 20559 20553 + 20554 20553 20559 + 20560 20555 19967 + 20556 20555 20560 + 20560 20561 20556 + 20562 20556 20561 + 20557 20556 20562 + 20562 20558 20557 + 19967 19966 20560 + 19972 20560 19966 + 20560 19972 20563 + 20563 20561 20560 + 20561 20563 20564 + 20564 20565 20561 + 20561 20565 20566 + 20566 20562 20561 + 20567 20562 20566 + 20558 20562 20567 + 20563 19972 19971 + 19971 10992 20563 + 20564 20563 10992 + 20568 20564 10992 + 20569 20564 20568 + 20569 20565 20564 + 20565 20569 20570 + 20570 20566 20565 + 20570 20571 20566 + 20566 20571 20567 + 19979 10992 19971 + 10992 19979 20572 + 20572 10985 10992 + 10985 20572 10986 + 10986 20572 20573 + 20573 20574 10986 + 20575 20574 20573 + 20572 19979 19984 + 20573 20572 19984 + 20576 20573 19984 + 20575 20573 20576 + 20576 20577 20575 + 20578 20577 20576 + 20578 20576 20579 + 20579 20580 20578 + 20578 20580 11030 + 20579 20576 19984 + 19984 19994 20579 + 20581 20579 19994 + 20580 20579 20581 + 20580 20581 20582 + 20582 11030 20580 + 20583 11030 20582 + 11030 20583 20584 + 20584 11023 11030 + 11024 11023 20584 + 19994 19993 20581 + 20581 19993 19992 + 19992 20582 20581 + 20583 20582 19992 + 19992 20585 20583 + 20583 20585 20586 + 20586 20584 20583 + 20587 20585 19992 + 20585 20587 20588 + 20588 20586 20585 + 19992 20002 20587 + 20587 20002 20589 + 20589 20590 20587 + 20588 20587 20590 + 20590 20591 20588 + 20591 20592 20588 + 20593 20588 20592 + 20588 20593 20594 + 20006 20589 20002 + 20595 20589 20006 + 20589 20595 20596 + 20596 20590 20589 + 20590 20596 20597 + 20597 20591 20590 + 20006 20014 20595 + 10991 20568 10992 + 20598 20568 10991 + 20599 20568 20598 + 20568 20599 20569 + 20569 20599 20600 + 20600 20570 20569 + 20571 20570 20600 + 10991 10996 20598 + 20601 20598 10996 + 20599 20598 20601 + 20601 20602 20599 + 20599 20602 20600 + 20603 20601 10996 + 20604 20601 20603 + 20604 20602 20601 + 20602 20604 20605 + 20605 20606 20602 + 20602 20606 20600 + 20607 20603 10996 + 20608 20603 20607 + 20608 20609 20603 + 20603 20609 20604 + 20604 20609 20610 + 20605 20604 20610 + 20611 20607 10996 + 20612 20607 20611 + 20612 20613 20607 + 20607 20613 20608 + 20608 20613 20614 + 20614 20615 20608 + 20609 20608 20615 + 20615 20610 20609 + 11000 20611 10996 + 20616 20611 11000 + 20616 20617 20611 + 20611 20617 20612 + 20612 20617 20618 + 20619 20612 20618 + 20613 20612 20619 + 20619 20614 20613 + 11000 11006 20616 + 20616 11006 20620 + 20621 20616 20620 + 20617 20616 20621 + 20621 20622 20617 + 20617 20622 20618 + 11005 20620 11006 + 20620 11005 11004 + 20620 11004 20623 + 20623 20624 20620 + 20620 20624 20621 + 20625 20621 20624 + 20621 20625 20622 + 20622 20625 20626 + 20626 20618 20622 + 11010 20623 11004 + 20627 20623 11010 + 20623 20627 20624 + 20624 20627 20625 + 20625 20627 20628 + 20628 20626 20625 + 20629 20626 20628 + 20618 20626 20629 + 11010 20630 20627 + 20627 20630 20628 + 20631 20628 20630 + 20632 20628 20631 + 20628 20632 20629 + 20629 20632 20633 + 20634 20629 20633 + 20618 20629 20634 + 20630 11010 11016 + 11016 20635 20630 + 20630 20635 20631 + 20631 20635 20532 + 20532 20537 20631 + 20545 20631 20537 + 20631 20545 20632 + 20632 20545 20544 + 20544 20633 20632 + 20635 11016 20636 + 20636 20532 20635 + 20532 20636 20063 + 20063 20636 20054 + 20054 20636 11016 + 20549 20633 20544 + 20633 20549 20637 + 20637 20638 20633 + 20633 20638 20639 + 20639 20634 20633 + 20640 20634 20639 + 20634 20640 20641 + 20634 20641 20618 + 20637 20549 20554 + 20642 20637 20554 + 20643 20637 20642 + 20638 20637 20643 + 20643 20644 20638 + 20638 20644 20645 + 20645 20639 20638 + 20646 20639 20645 + 20639 20646 20640 + 20647 20642 20554 + 20648 20642 20647 + 20649 20642 20648 + 20642 20649 20643 + 20643 20649 20650 + 20650 20651 20643 + 20644 20643 20651 + 20554 20652 20647 + 20653 20647 20652 + 20647 20653 20654 + 20647 20654 20648 + 20648 20654 20655 + 20656 20648 20655 + 20649 20648 20656 + 20656 20650 20649 + 20559 20652 20554 + 20652 20559 20657 + 20652 20657 20653 + 20653 20657 20658 + 20659 20653 20658 + 20654 20653 20659 + 20659 20655 20654 + 20657 20559 20558 + 20558 20658 20657 + 20567 20658 20558 + 20658 20567 20660 + 20660 20661 20658 + 20658 20661 20662 + 20662 20663 20658 + 20663 20659 20658 + 20664 20659 20663 + 20659 20664 20655 + 20665 20660 20567 + 20666 20660 20665 + 20661 20660 20666 + 20661 20666 20667 + 20667 20668 20661 + 20661 20668 20662 + 20567 20571 20665 + 20600 20665 20571 + 20669 20665 20600 + 20665 20669 20666 + 20666 20669 20670 + 20670 20671 20666 + 20671 20667 20666 + 20672 20667 20671 + 20672 20668 20667 + 20668 20672 20673 + 20673 20662 20668 + 20669 20600 20674 + 20674 20670 20669 + 20675 20670 20674 + 20670 20675 20676 + 20676 20671 20670 + 20677 20671 20676 + 20671 20677 20672 + 20672 20677 20678 + 20678 20673 20672 + 20606 20674 20600 + 20675 20674 20606 + 20606 20679 20675 + 20675 20679 20680 + 20676 20675 20680 + 20680 20681 20676 + 20677 20676 20681 + 20681 20678 20677 + 20682 20678 20681 + 20678 20682 20683 + 20683 20673 20678 + 20673 20683 20662 + 20605 20679 20606 + 20679 20605 20684 + 20684 20680 20679 + 20685 20680 20684 + 20680 20685 20686 + 20686 20681 20680 + 20681 20686 20682 + 20682 20686 20687 + 20687 20688 20682 + 20683 20682 20688 + 20610 20684 20605 + 20689 20684 20610 + 20684 20689 20685 + 20685 20689 20690 + 20690 20691 20685 + 20685 20691 20687 + 20687 20686 20685 + 20610 20692 20689 + 20690 20689 20692 + 20692 20693 20690 + 20694 20690 20693 + 20690 20694 20695 + 20695 20691 20690 + 20691 20695 20696 + 20696 20687 20691 + 20697 20692 20610 + 20692 20697 20698 + 20698 20693 20692 + 20693 20698 20699 + 20699 20700 20693 + 20693 20700 20694 + 20610 20615 20697 + 20697 20615 20614 + 20614 20701 20697 + 20698 20697 20701 + 20701 20702 20698 + 20699 20698 20702 + 20702 20703 20699 + 20699 20703 20646 + 20646 20704 20699 + 20700 20699 20704 + 20614 20619 20701 + 20701 20619 20705 + 20705 20702 20701 + 20702 20705 20703 + 20703 20705 20641 + 20641 20640 20703 + 20703 20640 20646 + 20705 20619 20618 + 20618 20641 20705 + 20013 20706 20014 + 20706 20013 20012 + 20707 20706 20012 + 20706 20707 20708 + 20709 20706 20708 + 20708 20710 20709 + 20710 20711 20709 + 20596 20711 20710 + 20018 20707 20012 + 20023 20707 20018 + 20707 20023 20712 + 20712 20708 20707 + 20708 20712 20713 + 20708 20713 20714 + 20714 20710 20708 + 20710 20714 20591 + 20591 20597 20710 + 20710 20597 20596 + 20028 20712 20023 + 20713 20712 20028 + 20028 20033 20713 + 20714 20713 20033 + 20715 20714 20033 + 20591 20714 20715 + 20715 20592 20591 + 20592 20715 20716 + 20592 20716 20593 + 20033 20717 20715 + 20716 20715 20717 + 20717 20718 20716 + 20593 20716 20718 + 20718 20719 20593 + 20719 20720 20593 + 20720 20721 20593 + 20594 20593 20721 + 20038 20717 20033 + 20717 20038 20718 + 20718 20038 20037 + 20037 20719 20718 + 20037 20036 20719 + 20719 20036 20041 + 20041 20720 20719 + 20041 11025 20720 + 20720 11025 11024 + 11024 20721 20720 + 20584 20721 11024 + 20721 20584 20594 + 20704 20722 20700 + 20722 20704 20723 + 20722 20723 20724 + 20724 20725 20722 + 20722 20725 20694 + 20694 20700 20722 + 20723 20704 20646 + 20646 20645 20723 + 20723 20645 20644 + 20644 20724 20723 + 20651 20724 20644 + 20724 20651 20726 + 20726 20725 20724 + 20725 20726 20695 + 20695 20694 20725 + 20726 20651 20650 + 20650 20727 20726 + 20695 20726 20727 + 20696 20695 20727 + 20727 20728 20696 + 20729 20696 20728 + 20687 20696 20729 + 20729 20688 20687 + 20727 20650 20656 + 20727 20656 20730 + 20730 20728 20727 + 20731 20728 20730 + 20728 20731 20729 + 20732 20729 20731 + 20688 20729 20732 + 20732 20733 20688 + 20688 20733 20683 + 20662 20683 20733 + 20655 20730 20656 + 20731 20730 20655 + 20655 20664 20731 + 20731 20664 20732 + 20663 20732 20664 + 20732 20663 20733 + 20733 20663 20662 + 8578 20734 8572 + 20735 20734 8578 + 20736 20734 20735 + 20734 20736 20737 + 20737 8572 20734 + 8573 8572 20737 + 8578 20738 20735 + 20735 20738 20739 + 20740 20735 20739 + 20735 20740 20736 + 20738 8578 8577 + 8577 20741 20738 + 20738 20741 20742 + 20742 20739 20738 + 20739 20742 20743 + 20743 20744 20739 + 20739 20744 20740 + 20741 8577 20745 + 20745 20746 20741 + 20742 20741 20746 + 20746 20747 20742 + 20743 20742 20747 + 20748 20745 8577 + 20749 20745 20748 + 20746 20745 20749 + 20749 20750 20746 + 20746 20750 20751 + 20751 20747 20746 + 20752 20747 20751 + 20747 20752 20743 + 20753 20748 8577 + 20754 20748 20753 + 20748 20754 20755 + 20755 20756 20748 + 20748 20756 20749 + 8577 8576 20753 + 20757 20753 8576 + 20757 20758 20753 + 20753 20758 20754 + 20754 20758 20759 + 20759 20760 20754 + 20755 20754 20760 + 8576 8563 20757 + 8562 20757 8563 + 20757 8562 20759 + 20758 20757 20759 + 20759 8562 8561 + 20759 8561 20761 + 20761 20760 20759 + 20762 20760 20761 + 20760 20762 20755 + 20755 20762 20763 + 20763 20764 20755 + 20756 20755 20764 + 20764 20765 20756 + 20749 20756 20765 + 20766 20761 8561 + 20767 20761 20766 + 20761 20767 20762 + 20762 20767 20768 + 20768 20763 20762 + 20769 20763 20768 + 20763 20769 20770 + 20770 20764 20763 + 20764 20770 20765 + 8561 8560 20766 + 8560 20771 20766 + 20772 20766 20771 + 20766 20772 20773 + 20773 20774 20766 + 20766 20774 20767 + 20767 20774 20775 + 20775 20768 20767 + 20769 20768 20775 + 8575 20771 8560 + 20771 8575 20776 + 20771 20776 20772 + 20777 20772 20776 + 20773 20772 20777 + 20777 20778 20773 + 20779 20773 20778 + 20774 20773 20779 + 20779 20780 20774 + 20774 20780 20775 + 20776 8575 8574 + 8574 20781 20776 + 20776 20781 20777 + 20782 20777 20781 + 20777 20782 20783 + 20783 20778 20777 + 20778 20783 20784 + 20784 20785 20778 + 20778 20785 20779 + 20786 20781 8574 + 20781 20786 20782 + 20782 20786 20787 + 20787 20788 20782 + 20783 20782 20788 + 20788 20789 20783 + 20784 20783 20789 + 8574 20790 20786 + 20786 20790 20791 + 20791 20787 20786 + 20787 20791 20792 + 20792 20793 20787 + 20787 20793 20794 + 20794 20788 20787 + 20789 20788 20794 + 20790 8574 20795 + 20795 20796 20790 + 20790 20796 20797 + 20797 20791 20790 + 20792 20791 20797 + 8573 20795 8574 + 20798 20795 8573 + 20795 20798 20796 + 20796 20798 20799 + 20799 20797 20796 + 20797 20799 20800 + 20800 20801 20797 + 20797 20801 20792 + 8573 20737 20798 + 20798 20737 20736 + 20799 20798 20736 + 20736 20802 20799 + 20800 20799 20802 + 20802 20803 20800 + 20800 20803 20804 + 20804 20805 20800 + 20801 20800 20805 + 20805 20806 20801 + 20792 20801 20806 + 20807 20802 20736 + 20803 20802 20807 + 20808 20803 20807 + 20803 20808 20809 + 20809 20804 20803 + 20736 20740 20807 + 20810 20807 20740 + 20808 20807 20810 + 20810 20811 20808 + 20808 20811 20812 + 20812 20809 20808 + 20813 20809 20812 + 20804 20809 20813 + 20740 20744 20810 + 20814 20810 20744 + 20810 20814 20815 + 20815 20811 20810 + 20811 20815 20816 + 20816 20812 20811 + 20812 20816 20817 + 20817 20818 20812 + 20812 20818 20813 + 20744 20743 20814 + 20819 20814 20743 + 20815 20814 20819 + 20819 20820 20815 + 20815 20820 20821 + 20821 20816 20815 + 20817 20816 20821 + 20743 20752 20819 + 20822 20819 20752 + 20819 20822 20823 + 20823 20820 20819 + 20820 20823 20824 + 20824 20821 20820 + 20821 20824 20825 + 20825 20826 20821 + 20821 20826 20817 + 20752 20827 20822 + 20828 20822 20827 + 20823 20822 20828 + 20828 20829 20823 + 20823 20829 20830 + 20830 20824 20823 + 20825 20824 20830 + 20751 20827 20752 + 20827 20751 20831 + 20831 20832 20827 + 20827 20832 20828 + 20833 20828 20832 + 20828 20833 20834 + 20834 20829 20828 + 20829 20834 20835 + 20835 20830 20829 + 20836 20831 20751 + 20837 20831 20836 + 20831 20837 20832 + 20832 20837 20833 + 20833 20837 20838 + 20839 20833 20838 + 20834 20833 20839 + 20751 20750 20836 + 20840 20836 20750 + 20836 20840 20841 + 20841 20838 20836 + 20836 20838 20837 + 20750 20749 20840 + 20842 20840 20749 + 20841 20840 20842 + 20842 20843 20841 + 20841 20843 20844 + 20844 20845 20841 + 20838 20841 20845 + 20765 20842 20749 + 20846 20842 20765 + 20846 20843 20842 + 20843 20846 20847 + 20847 20844 20843 + 20848 20844 20847 + 20844 20848 20849 + 20849 20845 20844 + 20845 20849 20850 + 20845 20850 20838 + 20765 20770 20846 + 20846 20770 20769 + 20769 20851 20846 + 20851 20847 20846 + 20848 20847 20851 + 20851 20852 20848 + 20848 20852 20853 + 20849 20848 20853 + 20853 20854 20849 + 20850 20849 20854 + 20854 20855 20850 + 20838 20850 20855 + 20855 20839 20838 + 20775 20851 20769 + 20851 20775 20852 + 20852 20775 20780 + 20780 20856 20852 + 20852 20856 20853 + 20785 20853 20856 + 20853 20785 20784 + 20853 20784 20857 + 20857 20854 20853 + 20855 20854 20857 + 20855 20857 20858 + 20858 20839 20855 + 20856 20780 20779 + 20856 20779 20785 + 20858 20857 20784 + 20789 20858 20784 + 20859 20858 20789 + 20839 20858 20859 + 20859 20860 20839 + 20839 20860 20834 + 20834 20860 20861 + 20861 20835 20834 + 20789 20862 20859 + 20859 20862 20863 + 20863 20864 20859 + 20860 20859 20864 + 20864 20861 20860 + 20794 20862 20789 + 20862 20794 20865 + 20865 20863 20862 + 20863 20865 20866 + 20866 20867 20863 + 20863 20867 20868 + 20868 20864 20863 + 20861 20864 20868 + 20869 20865 20794 + 20866 20865 20869 + 20869 20870 20866 + 20866 20870 20871 + 20871 20872 20866 + 20867 20866 20872 + 20872 20873 20867 + 20868 20867 20873 + 20794 20793 20869 + 20874 20869 20793 + 20869 20874 20875 + 20875 20870 20869 + 20870 20875 20876 + 20876 20871 20870 + 20793 20792 20874 + 20806 20874 20792 + 20875 20874 20806 + 20806 20877 20875 + 20875 20877 20878 + 20878 20876 20875 + 20879 20876 20878 + 20871 20876 20879 + 20879 20880 20871 + 20871 20880 20881 + 20881 20872 20871 + 20873 20872 20881 + 20882 20877 20806 + 20877 20882 20883 + 20883 20878 20877 + 20878 20883 20884 + 20884 20885 20878 + 20878 20885 20879 + 20806 20805 20882 + 20882 20805 20804 + 20804 20886 20882 + 20882 20886 20887 + 20887 20883 20882 + 20884 20883 20887 + 20887 20888 20884 + 20884 20888 20889 + 20889 20890 20884 + 20885 20884 20890 + 20813 20886 20804 + 20886 20813 20891 + 20891 20887 20886 + 20887 20891 20892 + 20892 20888 20887 + 20888 20892 20893 + 20893 20889 20888 + 20894 20891 20813 + 20892 20891 20894 + 20894 20895 20892 + 20892 20895 20896 + 20896 20893 20892 + 20897 20893 20896 + 20889 20893 20897 + 20813 20818 20894 + 20898 20894 20818 + 20894 20898 20899 + 20899 20895 20894 + 20895 20899 20900 + 20900 20896 20895 + 20896 20900 20901 + 20901 20902 20896 + 20896 20902 20897 + 20818 20817 20898 + 20903 20898 20817 + 20899 20898 20903 + 20903 20904 20899 + 20899 20904 20905 + 20905 20900 20899 + 20901 20900 20905 + 20905 20906 20901 + 20907 20901 20906 + 20902 20901 20907 + 20817 20826 20903 + 20908 20903 20826 + 20903 20908 20909 + 20909 20904 20903 + 20904 20909 20910 + 20910 20905 20904 + 20906 20905 20910 + 20911 20906 20910 + 20907 20906 20911 + 20826 20825 20908 + 20912 20908 20825 + 20909 20908 20912 + 20912 20913 20909 + 20909 20913 20914 + 20914 20910 20909 + 20911 20910 20914 + 20914 20915 20911 + 20916 20911 20915 + 20916 20907 20911 + 20825 20917 20912 + 20918 20912 20917 + 20912 20918 20919 + 20919 20913 20912 + 20913 20919 20920 + 20920 20914 20913 + 20915 20914 20920 + 20921 20915 20920 + 20916 20915 20921 + 20830 20917 20825 + 20922 20917 20830 + 20917 20922 20918 + 20923 20918 20922 + 20919 20918 20923 + 20923 20924 20919 + 20919 20924 20925 + 20925 20920 20919 + 20921 20920 20925 + 20830 20835 20922 + 20922 20835 20861 + 20861 20926 20922 + 20922 20926 20923 + 20927 20923 20926 + 20923 20927 20928 + 20928 20924 20923 + 20924 20928 20929 + 20929 20925 20924 + 20930 20925 20929 + 20925 20930 20921 + 20868 20926 20861 + 20926 20868 20927 + 20873 20927 20868 + 20928 20927 20873 + 20873 20931 20928 + 20928 20931 20932 + 20932 20929 20928 + 20933 20929 20932 + 20933 20930 20929 + 20934 20930 20933 + 20934 20921 20930 + 20934 20916 20921 + 20907 20916 20934 + 20881 20931 20873 + 20931 20881 20935 + 20935 20932 20931 + 20936 20932 20935 + 20932 20936 20933 + 20933 20936 20937 + 20937 20934 20933 + 20934 20937 20938 + 20938 20907 20934 + 20907 20938 20902 + 20938 20897 20902 + 20939 20935 20881 + 20940 20935 20939 + 20940 20936 20935 + 20937 20936 20940 + 20941 20937 20940 + 20937 20941 20938 + 20881 20880 20939 + 20942 20939 20880 + 20939 20942 20943 + 20943 20944 20939 + 20939 20944 20940 + 20941 20940 20944 + 20945 20941 20944 + 20941 20945 20938 + 20880 20879 20942 + 20946 20942 20879 + 20943 20942 20946 + 20946 20947 20943 + 20945 20943 20947 + 20944 20943 20945 + 20879 20885 20946 + 20890 20946 20885 + 20946 20890 20948 + 20948 20947 20946 + 20947 20948 20949 + 20949 20945 20947 + 20945 20949 20938 + 20938 20949 20950 + 20950 20897 20938 + 20897 20950 20889 + 20889 20950 20948 + 20948 20890 20889 + 20949 20948 20950 + 8554 8487 8550 + 8488 8487 8554 + 8554 20951 8488 + 8489 8488 20951 + 20951 20952 8489 + 8482 8489 20952 + 20952 20953 8482 + 20953 8478 8482 + 8554 8553 20951 + 20951 8553 20954 + 20954 20952 20951 + 20953 20952 20954 + 20953 20954 20955 + 20955 8478 20953 + 20955 8472 8478 + 8472 20955 8473 + 8473 20955 20954 + 20954 8553 8473 + 8493 8550 8487 + 8498 8550 8493 + 8550 8498 20956 + 20956 8551 8550 + 8551 20956 20957 + 20957 20958 8551 + 8551 20958 8545 + 20959 20956 8498 + 20957 20956 20959 + 20959 20960 20957 + 20957 20960 20961 + 20961 20962 20957 + 20958 20957 20962 + 20962 20963 20958 + 8545 20958 20963 + 20963 8546 8545 + 8498 8497 20959 + 20964 20959 8497 + 20959 20964 20965 + 20965 20960 20959 + 20960 20965 20966 + 20966 20961 20960 + 8497 8496 20964 + 8507 20964 8496 + 20965 20964 8507 + 8507 20967 20965 + 20965 20967 20968 + 20968 20966 20965 + 20969 20966 20968 + 20961 20966 20969 + 20969 20970 20961 + 20961 20970 20971 + 20971 20962 20961 + 20963 20962 20971 + 8510 20967 8507 + 20967 8510 20972 + 20972 20968 20967 + 20968 20972 20973 + 20973 20974 20968 + 20968 20974 20969 + 20969 20974 20975 + 20975 20976 20969 + 20970 20969 20976 + 8515 20972 8510 + 20973 20972 8515 + 8515 20977 20973 + 20973 20977 20978 + 20978 20979 20973 + 20974 20973 20979 + 20979 20975 20974 + 8520 20977 8515 + 20977 8520 20980 + 20980 20978 20977 + 20978 20980 20981 + 20981 20982 20978 + 20978 20982 20983 + 20983 20979 20978 + 20975 20979 20983 + 20984 20980 8520 + 20981 20980 20984 + 20984 20985 20981 + 20981 20985 20986 + 20986 20987 20981 + 20982 20981 20987 + 20987 20988 20982 + 20983 20982 20988 + 8520 8519 20984 + 8525 20984 8519 + 20984 8525 20989 + 20989 20985 20984 + 20985 20989 20990 + 20990 20986 20985 + 20986 20990 20991 + 20991 20992 20986 + 20986 20992 20993 + 20993 20987 20986 + 20988 20987 20993 + 20989 8525 8524 + 8524 20994 20989 + 20989 20994 20995 + 20995 20990 20989 + 20991 20990 20995 + 20995 20996 20991 + 20991 20996 20997 + 20991 20997 20998 + 20992 20991 20998 + 20993 20992 20998 + 8534 20994 8524 + 20994 8534 20999 + 20999 20995 20994 + 20995 20999 21000 + 21000 20996 20995 + 20996 21000 20997 + 21000 21001 20997 + 20998 20997 21001 + 21002 20998 21001 + 20993 20998 21002 + 21003 20993 21002 + 20993 21003 20988 + 21004 20999 8534 + 21000 20999 21004 + 21004 21005 21000 + 21000 21005 21001 + 21006 21001 21005 + 21001 21006 21007 + 21007 21002 21001 + 8534 21008 21004 + 21009 21004 21008 + 21004 21009 21010 + 21010 21005 21004 + 21005 21010 21006 + 21006 21010 21011 + 21012 21006 21011 + 21006 21012 21007 + 8533 21008 8534 + 21013 21008 8533 + 21008 21013 21009 + 21014 21009 21013 + 21010 21009 21014 + 21014 21011 21010 + 21015 21011 21014 + 21011 21015 21012 + 21015 21016 21012 + 21007 21012 21016 + 8533 8538 21013 + 21013 8538 21017 + 21017 21018 21013 + 21013 21018 21014 + 21019 21014 21018 + 21014 21019 21015 + 21015 21019 21020 + 21020 21016 21015 + 21021 21016 21020 + 21016 21021 21007 + 21017 8538 8537 + 8537 21022 21017 + 21023 21017 21022 + 21017 21023 21024 + 21024 21018 21017 + 21018 21024 21019 + 21020 21019 21024 + 21024 21025 21020 + 21026 21020 21025 + 21020 21026 21021 + 8542 21022 8537 + 21027 21022 8542 + 21022 21027 21023 + 21028 21023 21027 + 21024 21023 21028 + 21028 21025 21024 + 21029 21025 21028 + 21025 21029 21026 + 21030 21026 21029 + 21021 21026 21030 + 21030 21031 21021 + 21021 21031 21007 + 8542 8546 21027 + 21027 8546 20963 + 20963 21032 21027 + 21027 21032 21028 + 21033 21028 21032 + 21028 21033 21029 + 21029 21033 21034 + 21034 21035 21029 + 21029 21035 21030 + 20971 21032 20963 + 21032 20971 21033 + 21034 21033 20971 + 20971 20970 21034 + 20976 21034 20970 + 21034 20976 21036 + 21036 21035 21034 + 21035 21036 21037 + 21037 21030 21035 + 21030 21037 21038 + 21038 21031 21030 + 21031 21038 21039 + 21039 21007 21031 + 21007 21039 21002 + 21036 20976 20975 + 20975 21040 21036 + 21036 21040 21041 + 21041 21037 21036 + 21038 21037 21041 + 21041 21042 21038 + 21038 21042 21039 + 21042 21043 21039 + 21043 21002 21039 + 21043 21003 21002 + 20988 21003 21043 + 20983 21040 20975 + 21040 20983 21044 + 21044 21041 21040 + 21041 21044 21043 + 21043 21042 21041 + 20988 21044 20983 + 21043 21044 20988 + 21045 8403 8406 + 8403 21045 21046 + 21046 21047 8403 + 8404 8403 21047 + 21047 8405 8404 + 21045 8406 21048 + 21048 21049 21045 + 21045 21049 21050 + 21050 21046 21045 + 21051 21046 21050 + 21047 21046 21051 + 21048 8406 8359 + 8359 8358 21048 + 21048 8358 8357 + 21052 21048 8357 + 21048 21052 21053 + 21053 21049 21048 + 21050 21049 21053 + 21054 21050 21053 + 21050 21054 21055 + 21055 21056 21050 + 21050 21056 21051 + 21057 21052 8357 + 21053 21052 21057 + 21057 21058 21053 + 21053 21058 21059 + 21059 21054 21053 + 21055 21054 21059 + 8362 21057 8357 + 21057 8362 21060 + 21060 21058 21057 + 21058 21060 21061 + 21061 21059 21058 + 21059 21061 21062 + 21062 21063 21059 + 21059 21063 21055 + 21060 8362 8361 + 8361 21064 21060 + 21060 21064 21065 + 21065 21061 21060 + 21062 21061 21065 + 21065 21066 21062 + 21062 21066 21067 + 21067 21068 21062 + 21063 21062 21068 + 21069 21064 8361 + 21064 21069 21070 + 21070 21065 21064 + 21065 21070 21071 + 21071 21066 21065 + 21066 21071 21072 + 21072 21067 21066 + 8361 8365 21069 + 21069 8365 21073 + 21073 21074 21069 + 21070 21069 21074 + 21074 21075 21070 + 21071 21070 21075 + 21075 21076 21071 + 21072 21071 21076 + 8370 21073 8365 + 21077 21073 8370 + 21074 21073 21077 + 21077 21078 21074 + 21074 21078 21079 + 21079 21075 21074 + 21076 21075 21079 + 8370 21080 21077 + 21077 21080 21081 + 21081 21082 21077 + 21078 21077 21082 + 21082 21083 21078 + 21079 21078 21083 + 21084 21080 8370 + 21080 21084 21085 + 21085 21081 21080 + 21081 21085 21086 + 21086 21087 21081 + 21081 21087 21088 + 21088 21082 21081 + 21083 21082 21088 + 8370 8369 21084 + 21084 8369 21089 + 21089 21090 21084 + 21084 21090 21091 + 21091 21085 21084 + 21086 21085 21091 + 8368 21089 8369 + 21092 21089 8368 + 21089 21092 21093 + 21093 21090 21089 + 21090 21093 21094 + 21094 21091 21090 + 21091 21094 21095 + 21095 21096 21091 + 21091 21096 21086 + 8368 21097 21092 + 21092 21097 21098 + 21098 21099 21092 + 21099 21100 21092 + 21093 21092 21100 + 8374 21097 8368 + 21097 8374 21101 + 21101 21098 21097 + 21102 21098 21101 + 21098 21102 21103 + 21103 21099 21098 + 21104 21099 21103 + 21099 21104 21105 + 21105 21100 21099 + 21106 21101 8374 + 21102 21101 21106 + 21106 21107 21102 + 21103 21102 21107 + 21107 21108 21103 + 21108 21109 21103 + 21109 21110 21103 + 21104 21103 21110 + 8379 21106 8374 + 21111 21106 8379 + 21107 21106 21111 + 21107 21111 21112 + 21112 21108 21107 + 21113 21108 21112 + 21108 21113 21114 + 21114 21109 21108 + 8379 8384 21111 + 21111 8384 21115 + 21115 21112 21111 + 21113 21112 21115 + 21115 21116 21113 + 21114 21113 21116 + 21116 21117 21114 + 21117 21118 21114 + 21119 21114 21118 + 21119 21109 21114 + 8384 21120 21115 + 21120 21121 21115 + 21121 21122 21115 + 21123 21115 21122 + 21116 21115 21123 + 21116 21123 21124 + 21124 21117 21116 + 8383 21120 8384 + 21120 8383 21125 + 21120 21125 21121 + 21125 21126 21121 + 21126 21127 21121 + 21122 21121 21127 + 21128 21122 21127 + 21129 21122 21128 + 21122 21129 21123 + 21125 8383 8389 + 21125 8389 21130 + 21130 21126 21125 + 21127 21126 21130 + 21130 21131 21127 + 21128 21127 21131 + 8389 8388 21130 + 8388 21132 21130 + 21131 21130 21132 + 21131 21132 21133 + 21131 21133 21128 + 21133 21134 21128 + 21128 21134 21135 + 21136 21128 21135 + 21128 21136 21129 + 8388 8395 21132 + 8395 21137 21132 + 21132 21137 21133 + 21138 21133 21137 + 21134 21133 21138 + 21139 21134 21138 + 21135 21134 21139 + 21140 21137 8395 + 21137 21140 21138 + 21141 21138 21140 + 21139 21138 21141 + 21141 21142 21139 + 21135 21139 21142 + 21142 21143 21135 + 21135 21143 21144 + 21135 21144 21136 + 8395 8394 21140 + 21145 21140 8394 + 21145 21141 21140 + 21141 21145 21146 + 21147 21141 21146 + 21141 21147 21142 + 21147 21148 21142 + 21143 21142 21148 + 21148 21149 21143 + 21144 21143 21149 + 8394 8400 21145 + 21146 21145 8400 + 8400 21150 21146 + 21151 21146 21150 + 21147 21146 21151 + 21151 21152 21147 + 21148 21147 21152 + 21153 21148 21152 + 21149 21148 21153 + 8400 8399 21150 + 8399 8405 21150 + 21150 8405 21047 + 21047 21154 21150 + 21150 21154 21151 + 21155 21151 21154 + 21151 21155 21156 + 21156 21152 21151 + 21157 21152 21156 + 21152 21157 21153 + 21051 21154 21047 + 21154 21051 21155 + 21155 21051 21056 + 21158 21155 21056 + 21155 21158 21159 + 21156 21155 21159 + 21160 21156 21159 + 21160 21157 21156 + 21160 21161 21157 + 21157 21161 21162 + 21162 21153 21157 + 21056 21055 21158 + 21055 21163 21158 + 21159 21158 21163 + 21164 21159 21163 + 21164 21160 21159 + 21164 21165 21160 + 21165 21161 21160 + 21161 21165 21166 + 21166 21162 21161 + 21167 21163 21055 + 21167 21164 21163 + 21164 21167 21168 + 21168 21165 21164 + 21165 21168 21169 + 21169 21166 21165 + 21166 21169 21170 + 21170 21171 21166 + 21166 21171 21162 + 21172 21167 21055 + 21168 21167 21172 + 21172 21173 21168 + 21168 21173 21174 + 21174 21169 21168 + 21170 21169 21174 + 21055 21063 21172 + 21068 21172 21063 + 21172 21068 21175 + 21175 21173 21172 + 21173 21175 21176 + 21176 21174 21173 + 21174 21176 21177 + 21177 21178 21174 + 21174 21178 21170 + 21175 21068 21067 + 21067 21179 21175 + 21175 21179 21180 + 21180 21176 21175 + 21177 21176 21180 + 21180 21181 21177 + 21177 21181 21182 + 21182 21183 21177 + 21178 21177 21183 + 21184 21179 21067 + 21179 21184 21185 + 21185 21180 21179 + 21180 21185 21186 + 21186 21181 21180 + 21181 21186 21187 + 21187 21182 21181 + 21067 21072 21184 + 21184 21072 21188 + 21188 21189 21184 + 21185 21184 21189 + 21189 21190 21185 + 21186 21185 21190 + 21190 21191 21186 + 21187 21186 21191 + 21076 21188 21072 + 21192 21188 21076 + 21189 21188 21192 + 21192 21193 21189 + 21189 21193 21194 + 21194 21190 21189 + 21191 21190 21194 + 21076 21195 21192 + 21192 21195 21196 + 21196 21197 21192 + 21197 21198 21192 + 21198 21199 21192 + 21193 21192 21199 + 21079 21195 21076 + 21195 21079 21200 + 21200 21196 21195 + 21196 21200 21201 + 21201 21202 21196 + 21196 21202 21203 + 21203 21197 21196 + 21083 21200 21079 + 21201 21200 21083 + 21083 21204 21201 + 21201 21204 21205 + 21205 21206 21201 + 21202 21201 21206 + 21206 21207 21202 + 21203 21202 21207 + 21088 21204 21083 + 21204 21088 21208 + 21208 21205 21204 + 21205 21208 21209 + 21209 21210 21205 + 21205 21210 21211 + 21211 21206 21205 + 21207 21206 21211 + 21212 21208 21088 + 21209 21208 21212 + 21212 21213 21209 + 21209 21213 21214 + 21214 21215 21209 + 21210 21209 21215 + 21215 21216 21210 + 21211 21210 21216 + 21088 21087 21212 + 21217 21212 21087 + 21212 21217 21218 + 21218 21213 21212 + 21213 21218 21219 + 21219 21214 21213 + 21087 21086 21217 + 21220 21217 21086 + 21218 21217 21220 + 21220 21221 21218 + 21218 21221 21222 + 21222 21219 21218 + 21223 21219 21222 + 21214 21219 21223 + 21086 21096 21220 + 21224 21220 21096 + 21220 21224 21225 + 21225 21221 21220 + 21221 21225 21226 + 21226 21222 21221 + 21222 21226 21227 + 21227 21228 21222 + 21222 21228 21223 + 21096 21095 21224 + 21229 21224 21095 + 21225 21224 21229 + 21229 21230 21225 + 21225 21230 21231 + 21231 21226 21225 + 21227 21226 21231 + 21231 21232 21227 + 21227 21232 21233 + 21228 21227 21233 + 21095 21234 21229 + 21235 21229 21234 + 21229 21235 21236 + 21236 21230 21229 + 21230 21236 21237 + 21237 21231 21230 + 21231 21237 21238 + 21238 21232 21231 + 21233 21232 21238 + 21239 21234 21095 + 21240 21234 21239 + 21234 21240 21235 + 21241 21235 21240 + 21236 21235 21241 + 21241 21242 21236 + 21236 21242 21243 + 21243 21237 21236 + 21238 21237 21243 + 21095 21094 21239 + 21239 21094 21093 + 21093 21244 21239 + 21245 21239 21244 + 21239 21245 21240 + 21240 21245 21246 + 21246 21247 21240 + 21240 21247 21241 + 21100 21244 21093 + 21248 21244 21100 + 21244 21248 21245 + 21246 21245 21248 + 21249 21246 21248 + 21250 21246 21249 + 21246 21250 21251 + 21251 21247 21246 + 21247 21251 21252 + 21252 21241 21247 + 21100 21105 21248 + 21248 21105 21253 + 21253 21254 21248 + 21248 21254 21255 + 21255 21249 21248 + 21253 21105 21104 + 21104 21256 21253 + 21257 21253 21256 + 21253 21257 21258 + 21258 21254 21253 + 21254 21258 21259 + 21259 21255 21254 + 21110 21256 21104 + 21256 21110 21260 + 21260 21261 21256 + 21256 21261 21257 + 21257 21261 21262 + 21262 21263 21257 + 21258 21257 21263 + 21260 21110 21109 + 21109 21119 21260 + 21264 21260 21119 + 21261 21260 21264 + 21264 21262 21261 + 21262 21264 21265 + 21265 21266 21262 + 21262 21266 21267 + 21267 21263 21262 + 21119 21268 21264 + 21265 21264 21268 + 21268 21269 21265 + 21265 21269 21270 + 21270 21271 21265 + 21266 21265 21271 + 21271 21272 21266 + 21267 21266 21272 + 21118 21268 21119 + 21269 21268 21118 + 21269 21118 21117 + 21117 21273 21269 + 21269 21273 21270 + 21274 21270 21273 + 21270 21274 21275 + 21270 21275 21276 + 21276 21271 21270 + 21276 21272 21271 + 21273 21117 21124 + 21273 21124 21274 + 21274 21124 21123 + 21277 21274 21123 + 21274 21277 21278 + 21275 21274 21278 + 21275 21278 21279 + 21276 21275 21279 + 21280 21276 21279 + 21272 21276 21280 + 21123 21129 21277 + 21281 21277 21129 + 21278 21277 21281 + 21278 21281 21282 + 21278 21282 21279 + 21129 21283 21281 + 21283 21284 21281 + 21284 21285 21281 + 21281 21285 21282 + 21285 21286 21282 + 21282 21286 21287 + 21287 21279 21282 + 21136 21283 21129 + 21283 21136 21144 + 21144 21284 21283 + 21288 21284 21144 + 21284 21288 21286 + 21286 21285 21284 + 21288 21144 21149 + 21288 21149 21289 + 21287 21288 21289 + 21287 21286 21288 + 21153 21289 21149 + 21290 21289 21153 + 21289 21290 21291 + 21291 21287 21289 + 21287 21291 21279 + 21279 21291 21292 + 21292 21293 21279 + 21279 21293 21280 + 21153 21162 21290 + 21171 21290 21162 + 21290 21171 21292 + 21292 21291 21290 + 21294 21292 21171 + 21292 21294 21295 + 21295 21293 21292 + 21293 21295 21296 + 21296 21280 21293 + 21297 21280 21296 + 21280 21297 21272 + 21171 21170 21294 + 21298 21294 21170 + 21295 21294 21298 + 21298 21299 21295 + 21295 21299 21300 + 21300 21296 21295 + 21301 21296 21300 + 21296 21301 21297 + 21170 21178 21298 + 21183 21298 21178 + 21298 21183 21299 + 21299 21183 21182 + 21182 21300 21299 + 21302 21300 21182 + 21300 21302 21301 + 21301 21302 21303 + 21303 21304 21301 + 21297 21301 21304 + 21304 21305 21297 + 21272 21297 21305 + 21305 21267 21272 + 21187 21302 21182 + 21302 21187 21306 + 21306 21303 21302 + 21303 21306 21307 + 21307 21308 21303 + 21303 21308 21309 + 21309 21304 21303 + 21305 21304 21309 + 21191 21306 21187 + 21307 21306 21191 + 21191 21310 21307 + 21307 21310 21311 + 21311 21312 21307 + 21308 21307 21312 + 21312 21313 21308 + 21309 21308 21313 + 21194 21310 21191 + 21310 21194 21314 + 21314 21311 21310 + 21311 21314 21315 + 21315 21316 21311 + 21311 21316 21317 + 21317 21312 21311 + 21313 21312 21317 + 21318 21314 21194 + 21315 21314 21318 + 21318 21319 21315 + 21315 21319 21320 + 21320 21321 21315 + 21316 21315 21321 + 21321 21322 21316 + 21317 21316 21322 + 21194 21193 21318 + 21199 21318 21193 + 21318 21199 21323 + 21323 21319 21318 + 21319 21323 21324 + 21324 21320 21319 + 21320 21324 21325 + 21325 21326 21320 + 21320 21326 21327 + 21327 21321 21320 + 21322 21321 21327 + 21323 21199 21198 + 21198 21328 21323 + 21323 21328 21329 + 21329 21324 21323 + 21325 21324 21329 + 21329 21330 21325 + 21325 21330 21331 + 21331 21332 21325 + 21326 21325 21332 + 21333 21328 21198 + 21328 21333 21334 + 21334 21329 21328 + 21329 21334 21335 + 21335 21330 21329 + 21330 21335 21336 + 21336 21331 21330 + 21198 21337 21333 + 21333 21337 21338 + 21338 21339 21333 + 21333 21339 21340 + 21340 21334 21333 + 21335 21334 21340 + 21337 21198 21197 + 21197 21341 21337 + 21337 21341 21338 + 21341 21342 21338 + 21343 21338 21342 + 21338 21343 21344 + 21344 21339 21338 + 21339 21344 21345 + 21345 21340 21339 + 21341 21197 21203 + 21203 21346 21341 + 21341 21346 21347 + 21347 21342 21341 + 21348 21342 21347 + 21342 21348 21343 + 21349 21343 21348 + 21344 21343 21349 + 21346 21203 21350 + 21350 21351 21346 + 21347 21346 21351 + 21351 21352 21347 + 21353 21347 21352 + 21347 21353 21348 + 21207 21350 21203 + 21354 21350 21207 + 21351 21350 21354 + 21354 21355 21351 + 21351 21355 21356 + 21356 21352 21351 + 21357 21352 21356 + 21352 21357 21353 + 21251 21353 21357 + 21348 21353 21251 + 21207 21358 21354 + 21354 21358 21359 + 21359 21360 21354 + 21355 21354 21360 + 21360 21361 21355 + 21356 21355 21361 + 21211 21358 21207 + 21358 21211 21362 + 21362 21359 21358 + 21359 21362 21363 + 21363 21364 21359 + 21359 21364 21365 + 21365 21360 21359 + 21361 21360 21365 + 21216 21362 21211 + 21363 21362 21216 + 21216 21366 21363 + 21367 21363 21366 + 21367 21368 21363 + 21368 21364 21363 + 21368 21365 21364 + 21368 21369 21365 + 21369 21370 21365 + 21365 21370 21361 + 21371 21366 21216 + 21366 21371 21372 + 21372 21367 21366 + 21367 21372 21373 + 21368 21367 21373 + 21369 21368 21373 + 21216 21215 21371 + 21371 21215 21214 + 21214 21374 21371 + 21372 21371 21374 + 21373 21372 21374 + 21374 21223 21373 + 21373 21223 21228 + 21233 21373 21228 + 21373 21233 21369 + 21223 21374 21214 + 21251 21250 21348 + 21349 21348 21250 + 21249 21349 21250 + 21375 21349 21249 + 21349 21375 21344 + 21344 21375 21376 + 21376 21345 21344 + 21377 21345 21376 + 21340 21345 21377 + 21378 21375 21249 + 21375 21378 21379 + 21379 21376 21375 + 21380 21376 21379 + 21376 21380 21377 + 21378 21249 21255 + 21255 21381 21378 + 21378 21381 21382 + 21382 21379 21378 + 21383 21379 21382 + 21383 21380 21379 + 21380 21383 21384 + 21384 21385 21380 + 21377 21380 21385 + 21386 21381 21255 + 21381 21386 21387 + 21387 21382 21381 + 21382 21387 21388 + 21388 21389 21382 + 21382 21389 21383 + 21383 21389 21390 + 21390 21384 21383 + 21255 21259 21386 + 21386 21259 21391 + 21391 21392 21386 + 21386 21392 21393 + 21393 21387 21386 + 21388 21387 21393 + 21391 21259 21258 + 21258 21394 21391 + 21395 21391 21394 + 21391 21395 21396 + 21396 21392 21391 + 21392 21396 21397 + 21397 21393 21392 + 21263 21394 21258 + 21398 21394 21263 + 21394 21398 21395 + 21399 21395 21398 + 21396 21395 21399 + 21399 21400 21396 + 21396 21400 21401 + 21401 21397 21396 + 21402 21397 21401 + 21393 21397 21402 + 21263 21267 21398 + 21398 21267 21305 + 21305 21403 21398 + 21398 21403 21399 + 21404 21399 21403 + 21399 21404 21405 + 21405 21400 21399 + 21400 21405 21406 + 21406 21401 21400 + 21309 21403 21305 + 21403 21309 21404 + 21313 21404 21309 + 21405 21404 21313 + 21313 21407 21405 + 21405 21407 21408 + 21408 21406 21405 + 21409 21406 21408 + 21401 21406 21409 + 21409 21410 21401 + 21401 21410 21402 + 21317 21407 21313 + 21407 21317 21411 + 21411 21408 21407 + 21408 21411 21412 + 21412 21413 21408 + 21408 21413 21409 + 21409 21413 21414 + 21414 21415 21409 + 21410 21409 21415 + 21322 21411 21317 + 21412 21411 21322 + 21322 21416 21412 + 21412 21416 21417 + 21417 21418 21412 + 21413 21412 21418 + 21418 21414 21413 + 21327 21416 21322 + 21416 21327 21419 + 21419 21417 21416 + 21417 21419 21420 + 21420 21421 21417 + 21417 21421 21422 + 21422 21418 21417 + 21422 21414 21418 + 21423 21419 21327 + 21420 21419 21423 + 21423 21424 21420 + 21425 21420 21424 + 21421 21420 21425 + 21425 21426 21421 + 21426 21422 21421 + 21327 21326 21423 + 21332 21423 21326 + 21423 21332 21427 + 21427 21424 21423 + 21424 21427 21428 + 21428 21425 21424 + 21425 21428 21429 + 21426 21425 21429 + 21430 21426 21429 + 21426 21430 21422 + 21430 21431 21422 + 21422 21431 21414 + 21427 21332 21331 + 21331 21432 21427 + 21428 21427 21432 + 21429 21428 21432 + 21432 21433 21429 + 21429 21433 21434 + 21435 21429 21434 + 21429 21435 21430 + 21433 21432 21331 + 21331 21336 21433 + 21433 21336 21436 + 21436 21434 21433 + 21437 21434 21436 + 21434 21437 21435 + 21437 21438 21435 + 21435 21438 21439 + 21440 21435 21439 + 21435 21440 21430 + 21436 21336 21335 + 21335 21441 21436 + 21442 21436 21441 + 21436 21442 21437 + 21437 21442 21385 + 21385 21438 21437 + 21439 21438 21385 + 21340 21441 21335 + 21377 21441 21340 + 21441 21377 21442 + 21385 21442 21377 + 21439 21385 21384 + 21439 21384 21390 + 21390 21443 21439 + 21440 21439 21443 + 21440 21443 21444 + 21445 21440 21444 + 21440 21445 21430 + 21444 21443 21390 + 21390 21446 21444 + 21444 21446 21447 + 21447 21448 21444 + 21445 21444 21448 + 21445 21448 21449 + 21450 21445 21449 + 21445 21450 21430 + 21446 21390 21389 + 21389 21388 21446 + 21447 21446 21388 + 21388 21451 21447 + 21452 21447 21451 + 21448 21447 21452 + 21449 21448 21452 + 21449 21452 21453 + 21453 21454 21449 + 21450 21449 21454 + 21430 21450 21454 + 21454 21455 21430 + 21430 21455 21431 + 21393 21451 21388 + 21402 21451 21393 + 21451 21402 21452 + 21453 21452 21402 + 21402 21410 21453 + 21415 21453 21410 + 21453 21415 21455 + 21455 21454 21453 + 21455 21415 21414 + 21414 21431 21455 + 21357 21252 21251 + 21456 21252 21357 + 21241 21252 21456 + 21456 21242 21241 + 21242 21456 21457 + 21457 21243 21242 + 21357 21458 21456 + 21456 21458 21459 + 21459 21457 21456 + 21460 21457 21459 + 21243 21457 21460 + 21460 21461 21243 + 21243 21461 21238 + 21356 21458 21357 + 21458 21356 21462 + 21462 21459 21458 + 21459 21462 21463 + 21463 21464 21459 + 21459 21464 21460 + 21465 21460 21464 + 21465 21466 21460 + 21466 21461 21460 + 21466 21238 21461 + 21466 21233 21238 + 21361 21462 21356 + 21463 21462 21361 + 21361 21370 21463 + 21369 21463 21370 + 21464 21463 21369 + 21369 21465 21464 + 21466 21465 21369 + 21233 21466 21369 + 21467 8348 8351 + 8348 21467 21468 + 21468 8349 8348 + 21469 8349 21468 + 8349 21469 8342 + 8342 21469 8343 + 21470 21467 8351 + 21467 21470 21471 + 21467 21471 21472 + 21472 21473 21467 + 21473 21468 21467 + 21470 8351 21474 + 21474 21475 21470 + 21476 21470 21475 + 21470 21476 21471 + 21477 21471 21476 + 21471 21477 21478 + 21478 21472 21471 + 8350 21474 8351 + 21474 8350 21479 + 21480 21474 21479 + 21474 21480 21475 + 21481 21475 21480 + 21475 21481 21482 + 21476 21475 21482 + 21483 21476 21482 + 21476 21483 21477 + 21479 8350 42 + 42 21484 21479 + 21479 21484 21485 + 21485 21486 21479 + 21486 21487 21479 + 21487 21480 21479 + 21487 21481 21480 + 21488 21481 21487 + 21481 21488 21482 + 21484 42 8320 + 8320 21489 21484 + 21484 21489 21490 + 21485 21484 21490 + 21490 21491 21485 + 21492 21485 21491 + 21486 21485 21492 + 21486 21492 21488 + 21488 21487 21486 + 21489 8320 21493 + 21489 21493 21494 + 21494 21490 21489 + 21490 21494 21495 + 21490 21495 21496 + 21496 21491 21490 + 21497 21491 21496 + 21491 21497 21492 + 21488 21492 21497 + 21493 8320 8319 + 8319 21498 21493 + 21493 21498 21499 + 21499 21494 21493 + 21495 21494 21499 + 21499 21500 21495 + 21496 21495 21500 + 21501 21496 21500 + 21497 21496 21501 + 8319 21502 21498 + 21498 21502 21503 + 21503 21504 21498 + 21498 21504 21499 + 21505 21499 21504 + 21499 21505 21500 + 21502 8319 8318 + 8318 21506 21502 + 21502 21506 21507 + 21507 21503 21502 + 21508 21503 21507 + 21504 21503 21508 + 21504 21508 21505 + 21505 21508 21509 + 21509 21510 21505 + 21500 21505 21510 + 8318 8317 21506 + 21506 8317 21511 + 21511 21512 21506 + 21506 21512 21507 + 21511 8317 8316 + 8316 21513 21511 + 21513 21514 21511 + 21514 21515 21511 + 21516 21511 21515 + 21511 21516 21512 + 8324 21513 8316 + 21517 21513 8324 + 21513 21517 21518 + 21518 21514 21513 + 21518 21519 21514 + 21514 21519 21520 + 21520 21515 21514 + 21520 21521 21515 + 21515 21521 21516 + 21517 8324 8323 + 8323 21522 21517 + 21517 21522 21523 + 21523 21518 21517 + 21519 21518 21523 + 21523 21524 21519 + 21519 21524 21525 + 21525 21526 21519 + 21526 21520 21519 + 21521 21520 21526 + 21522 8323 8329 + 21522 8329 21527 + 21527 21528 21522 + 21522 21528 21523 + 8335 21527 8329 + 21529 21527 8335 + 21528 21527 21529 + 21528 21529 21530 + 21530 21531 21528 + 21528 21531 21523 + 8335 8344 21529 + 8344 21532 21529 + 21532 21533 21529 + 21533 21530 21529 + 21530 21533 21534 + 21535 21530 21534 + 21531 21530 21535 + 21536 21532 8344 + 21532 21536 21537 + 21537 21538 21532 + 21532 21538 21533 + 21538 21539 21533 + 21539 21534 21533 + 8344 8343 21536 + 21469 21536 8343 + 21536 21469 21540 + 21537 21536 21540 + 21537 21540 21541 + 21542 21537 21541 + 21538 21537 21542 + 21542 21543 21538 + 21539 21538 21543 + 21544 21539 21543 + 21534 21539 21544 + 21540 21469 21468 + 21541 21540 21468 + 21473 21541 21468 + 21473 21545 21541 + 21541 21545 21546 + 21546 21542 21541 + 21542 21546 21547 + 21547 21543 21542 + 21543 21547 21548 + 21548 21544 21543 + 21549 21544 21548 + 21544 21549 21534 + 21535 21534 21549 + 21473 21550 21545 + 21545 21550 21551 + 21551 21552 21545 + 21545 21552 21553 + 21553 21546 21545 + 21547 21546 21553 + 21553 21554 21547 + 21548 21547 21554 + 21550 21473 21472 + 21472 21555 21550 + 21551 21550 21555 + 21555 21556 21551 + 21557 21551 21556 + 21557 21552 21551 + 21552 21557 21558 + 21558 21553 21552 + 21553 21558 21559 + 21559 21554 21553 + 21472 21478 21555 + 21555 21478 21560 + 21560 21556 21555 + 21556 21560 21561 + 21562 21556 21561 + 21556 21562 21557 + 21557 21562 21563 + 21558 21557 21563 + 21564 21558 21563 + 21559 21558 21564 + 21560 21478 21565 + 21561 21560 21565 + 21565 21566 21561 + 21567 21561 21566 + 21562 21561 21567 + 21567 21563 21562 + 21568 21563 21567 + 21563 21568 21569 + 21569 21564 21563 + 21478 21477 21565 + 21570 21565 21477 + 21566 21565 21570 + 21570 21571 21566 + 21566 21571 21572 + 21572 21573 21566 + 21566 21573 21567 + 21574 21567 21573 + 21567 21574 21568 + 21477 21483 21570 + 21570 21483 21575 + 21575 21576 21570 + 21571 21570 21576 + 21576 21577 21571 + 21572 21571 21577 + 21482 21575 21483 + 21578 21575 21482 + 21575 21578 21579 + 21579 21576 21575 + 21577 21576 21579 + 21579 21580 21577 + 21577 21580 21581 + 21581 21582 21577 + 21577 21582 21572 + 21488 21578 21482 + 21579 21578 21488 + 21583 21579 21488 + 21580 21579 21583 + 21583 21584 21580 + 21581 21580 21584 + 21584 21585 21581 + 21586 21581 21585 + 21581 21586 21582 + 21582 21586 21587 + 21587 21572 21582 + 21488 21497 21583 + 21497 21588 21583 + 21589 21583 21588 + 21583 21589 21590 + 21590 21584 21583 + 21584 21590 21591 + 21591 21585 21584 + 21592 21585 21591 + 21585 21592 21586 + 21501 21588 21497 + 21501 21593 21588 + 21588 21593 21589 + 21589 21593 21594 + 21595 21589 21594 + 21590 21589 21595 + 21595 21596 21590 + 21591 21590 21596 + 21593 21501 21597 + 21597 21594 21593 + 21594 21597 21510 + 21510 21598 21594 + 21594 21598 21599 + 21599 21600 21594 + 21594 21600 21595 + 21500 21597 21501 + 21510 21597 21500 + 21598 21510 21509 + 21509 21601 21598 + 21599 21598 21601 + 21601 21602 21599 + 21603 21599 21602 + 21600 21599 21603 + 21603 21604 21600 + 21600 21604 21605 + 21605 21595 21600 + 21596 21595 21605 + 21601 21509 21507 + 21507 21606 21601 + 21601 21606 21607 + 21607 21602 21601 + 21602 21607 21608 + 21608 21609 21602 + 21602 21609 21603 + 21507 21509 21508 + 21603 21609 21610 + 21611 21610 21609 + 21610 21611 21612 + 21612 21613 21610 + 21610 21613 21614 + 21614 21615 21610 + 21610 21615 21603 + 21604 21603 21615 + 21609 21608 21611 + 21616 21611 21608 + 21612 21611 21616 + 21616 21617 21612 + 21612 21617 21618 + 21618 21619 21612 + 21613 21612 21619 + 21619 21620 21613 + 21614 21613 21620 + 21621 21616 21608 + 21622 21616 21621 + 21616 21622 21623 + 21623 21617 21616 + 21617 21623 21624 + 21624 21618 21617 + 21625 21621 21608 + 21626 21621 21625 + 21627 21621 21626 + 21621 21627 21622 + 21627 21628 21622 + 21628 21629 21622 + 21623 21622 21629 + 21608 21630 21625 + 21631 21625 21630 + 21625 21631 21632 + 21632 21633 21625 + 21625 21633 21626 + 21634 21630 21608 + 21635 21630 21634 + 21630 21635 21631 + 21636 21631 21635 + 21632 21631 21636 + 21608 21607 21634 + 21634 21607 21606 + 21606 21637 21634 + 21638 21634 21637 + 21634 21638 21635 + 21635 21638 21639 + 21639 21640 21635 + 21635 21640 21636 + 21641 21637 21606 + 21641 21642 21637 + 21637 21642 21638 + 21638 21642 21521 + 21521 21639 21638 + 21526 21639 21521 + 21639 21526 21643 + 21643 21640 21639 + 21606 21507 21641 + 21512 21641 21507 + 21642 21641 21512 + 21512 21516 21642 + 21642 21516 21521 + 21643 21526 21525 + 21525 21644 21643 + 21643 21644 21645 + 21645 21646 21643 + 21640 21643 21646 + 21646 21636 21640 + 21636 21646 21647 + 21647 21648 21636 + 21636 21648 21632 + 21649 21644 21525 + 21644 21649 21650 + 21650 21645 21644 + 21645 21650 21651 + 21651 21652 21645 + 21645 21652 21647 + 21647 21646 21645 + 21525 21653 21649 + 21649 21653 21654 + 21654 21655 21649 + 21649 21655 21656 + 21656 21650 21649 + 21651 21650 21656 + 21653 21525 21524 + 21524 21657 21653 + 21654 21653 21657 + 21657 21658 21654 + 21659 21654 21658 + 21654 21659 21660 + 21660 21655 21654 + 21655 21660 21661 + 21661 21656 21655 + 21657 21524 21523 + 21523 21662 21657 + 21657 21662 21663 + 21663 21658 21657 + 21658 21663 21664 + 21664 21665 21658 + 21658 21665 21659 + 21666 21659 21665 + 21660 21659 21666 + 21662 21523 21667 + 21667 21668 21662 + 21662 21668 21669 + 21669 21663 21662 + 21664 21663 21669 + 21670 21667 21523 + 21671 21667 21670 + 21668 21667 21671 + 21671 21672 21668 + 21668 21672 21673 + 21673 21669 21668 + 21531 21670 21523 + 21674 21670 21531 + 21674 21675 21670 + 21670 21675 21671 + 21671 21675 21676 + 21676 21677 21671 + 21672 21671 21677 + 21677 21678 21672 + 21672 21678 21673 + 21531 21535 21674 + 21674 21535 21549 + 21675 21674 21549 + 21549 21676 21675 + 21676 21549 21548 + 21676 21548 21679 + 21679 21677 21676 + 21678 21677 21679 + 21679 21680 21678 + 21678 21680 21681 + 21681 21673 21678 + 21669 21673 21681 + 21681 21682 21669 + 21669 21682 21664 + 21679 21548 21554 + 21680 21679 21554 + 21554 21559 21680 + 21681 21680 21559 + 21559 21683 21681 + 21682 21681 21683 + 21683 21684 21682 + 21664 21682 21684 + 21684 21685 21664 + 21665 21664 21685 + 21564 21683 21559 + 21684 21683 21564 + 21564 21569 21684 + 21684 21569 21686 + 21686 21685 21684 + 21687 21685 21686 + 21685 21687 21665 + 21665 21687 21666 + 21686 21569 21568 + 21568 21688 21686 + 21689 21686 21688 + 21686 21689 21687 + 21687 21689 21690 + 21690 21666 21687 + 21666 21690 21691 + 21691 21692 21666 + 21666 21692 21660 + 21693 21688 21568 + 21694 21688 21693 + 21688 21694 21689 + 21689 21694 21695 + 21695 21690 21689 + 21691 21690 21695 + 21568 21574 21693 + 21693 21574 21696 + 21696 21697 21693 + 21698 21693 21697 + 21693 21698 21694 + 21694 21698 21699 + 21699 21695 21694 + 21573 21696 21574 + 21696 21573 21572 + 21572 21587 21696 + 21696 21587 21700 + 21700 21697 21696 + 21701 21697 21700 + 21697 21701 21698 + 21698 21701 21702 + 21702 21699 21698 + 21703 21699 21702 + 21695 21699 21703 + 21703 21704 21695 + 21695 21704 21691 + 21700 21587 21586 + 21586 21592 21700 + 21705 21700 21592 + 21700 21705 21701 + 21701 21705 21706 + 21706 21702 21701 + 21702 21706 21707 + 21707 21708 21702 + 21702 21708 21703 + 21592 21709 21705 + 21705 21709 21710 + 21710 21706 21705 + 21707 21706 21710 + 21710 21711 21707 + 21707 21711 21712 + 21712 21713 21707 + 21708 21707 21713 + 21591 21709 21592 + 21709 21591 21714 + 21714 21710 21709 + 21710 21714 21715 + 21715 21711 21710 + 21711 21715 21716 + 21716 21712 21711 + 21596 21714 21591 + 21715 21714 21596 + 21596 21717 21715 + 21715 21717 21718 + 21718 21716 21715 + 21719 21716 21718 + 21712 21716 21719 + 21719 21720 21712 + 21712 21720 21721 + 21721 21713 21712 + 21605 21717 21596 + 21717 21605 21722 + 21722 21718 21717 + 21718 21722 21723 + 21723 21724 21718 + 21718 21724 21719 + 21719 21724 21725 + 21725 21726 21719 + 21720 21719 21726 + 21727 21722 21605 + 21723 21722 21727 + 21727 21728 21723 + 21723 21728 21729 + 21729 21730 21723 + 21724 21723 21730 + 21730 21725 21724 + 21605 21604 21727 + 21615 21727 21604 + 21727 21615 21614 + 21614 21728 21727 + 21728 21614 21731 + 21731 21729 21728 + 21729 21731 21732 + 21732 21733 21729 + 21729 21733 21734 + 21734 21730 21729 + 21725 21730 21734 + 21620 21731 21614 + 21732 21731 21620 + 21620 21735 21732 + 21732 21735 21736 + 21736 21737 21732 + 21733 21732 21737 + 21737 21738 21733 + 21734 21733 21738 + 21739 21735 21620 + 21735 21739 21740 + 21740 21736 21735 + 21736 21740 21741 + 21741 21742 21736 + 21736 21742 21743 + 21743 21737 21736 + 21738 21737 21743 + 21620 21619 21739 + 21739 21619 21618 + 21618 21744 21739 + 21739 21744 21745 + 21745 21740 21739 + 21741 21740 21745 + 21745 21746 21741 + 21741 21746 21747 + 21742 21741 21747 + 21747 21748 21742 + 21743 21742 21748 + 21749 21744 21618 + 21744 21749 21750 + 21750 21745 21744 + 21745 21750 21751 + 21751 21746 21745 + 21746 21751 21752 + 21752 21747 21746 + 21747 21752 21753 + 21748 21747 21753 + 21618 21624 21749 + 21749 21624 21754 + 21754 21755 21749 + 21749 21755 21756 + 21756 21750 21749 + 21751 21750 21756 + 21756 21757 21751 + 21752 21751 21757 + 21758 21752 21757 + 21752 21758 21753 + 21754 21624 21623 + 21623 21759 21754 + 21760 21754 21759 + 21754 21760 21761 + 21761 21755 21754 + 21755 21761 21762 + 21762 21756 21755 + 21756 21762 21763 + 21763 21757 21756 + 21757 21763 21758 + 21629 21759 21623 + 21764 21759 21629 + 21759 21764 21760 + 21765 21760 21764 + 21761 21760 21765 + 21765 21766 21761 + 21761 21766 21767 + 21767 21762 21761 + 21763 21762 21767 + 21767 21768 21763 + 21763 21768 21758 + 21629 21769 21764 + 21764 21769 21770 + 21770 21771 21764 + 21764 21771 21765 + 21772 21765 21771 + 21765 21772 21773 + 21773 21766 21765 + 21774 21769 21629 + 21769 21774 21775 + 21775 21770 21769 + 21776 21770 21775 + 21770 21776 21777 + 21777 21771 21770 + 21771 21777 21772 + 21778 21772 21777 + 21773 21772 21778 + 21628 21774 21629 + 21774 21628 21779 + 21779 21780 21774 + 21774 21780 21781 + 21781 21775 21774 + 21782 21775 21781 + 21775 21782 21776 + 21779 21628 21627 + 21627 21783 21779 + 21779 21783 21784 + 21784 21785 21779 + 21780 21779 21785 + 21785 21786 21780 + 21781 21780 21786 + 21626 21783 21627 + 21783 21626 21787 + 21787 21784 21783 + 21784 21787 21788 + 21788 21789 21784 + 21784 21789 21790 + 21790 21785 21784 + 21786 21785 21790 + 21791 21787 21626 + 21788 21787 21791 + 21791 21792 21788 + 21788 21792 21793 + 21793 21794 21788 + 21789 21788 21794 + 21794 21795 21789 + 21790 21789 21795 + 21626 21633 21791 + 21796 21791 21633 + 21791 21796 21797 + 21797 21792 21791 + 21792 21797 21798 + 21798 21793 21792 + 21633 21632 21796 + 21799 21796 21632 + 21797 21796 21799 + 21799 21800 21797 + 21797 21800 21801 + 21801 21798 21797 + 21802 21798 21801 + 21793 21798 21802 + 21632 21648 21799 + 21803 21799 21648 + 21799 21803 21804 + 21804 21800 21799 + 21800 21804 21805 + 21805 21801 21800 + 21801 21805 21806 + 21806 21807 21801 + 21801 21807 21802 + 21648 21647 21803 + 21808 21803 21647 + 21804 21803 21808 + 21808 21809 21804 + 21804 21809 21810 + 21810 21805 21804 + 21806 21805 21810 + 21810 21811 21806 + 21806 21811 21812 + 21807 21806 21812 + 21647 21652 21808 + 21813 21808 21652 + 21808 21813 21814 + 21814 21809 21808 + 21809 21814 21815 + 21815 21810 21809 + 21810 21815 21816 + 21816 21811 21810 + 21811 21816 21817 + 21817 21812 21811 + 21652 21651 21813 + 21818 21813 21651 + 21814 21813 21818 + 21818 21819 21814 + 21814 21819 21820 + 21820 21815 21814 + 21816 21815 21820 + 21820 21821 21816 + 21816 21821 21817 + 21651 21822 21818 + 21823 21818 21822 + 21818 21823 21824 + 21824 21819 21818 + 21819 21824 21825 + 21825 21820 21819 + 21820 21825 21826 + 21826 21821 21820 + 21656 21822 21651 + 21827 21822 21656 + 21822 21827 21823 + 21828 21823 21827 + 21824 21823 21828 + 21828 21829 21824 + 21824 21829 21830 + 21830 21825 21824 + 21826 21825 21830 + 21656 21661 21827 + 21827 21661 21831 + 21831 21832 21827 + 21827 21832 21828 + 21833 21828 21832 + 21828 21833 21834 + 21834 21829 21828 + 21829 21834 21835 + 21835 21830 21829 + 21831 21661 21660 + 21660 21692 21831 + 21836 21831 21692 + 21831 21836 21837 + 21837 21832 21831 + 21832 21837 21833 + 21838 21833 21837 + 21834 21833 21838 + 21838 21839 21834 + 21834 21839 21840 + 21840 21835 21834 + 21692 21691 21836 + 21836 21691 21841 + 21841 21776 21836 + 21776 21782 21836 + 21837 21836 21782 + 21782 21842 21837 + 21837 21842 21838 + 21691 21704 21841 + 21843 21841 21704 + 21841 21843 21844 + 21844 21845 21841 + 21841 21845 21777 + 21777 21776 21841 + 21704 21703 21843 + 21846 21843 21703 + 21844 21843 21846 + 21846 21847 21844 + 21844 21847 21848 + 21848 21849 21844 + 21845 21844 21849 + 21849 21778 21845 + 21777 21845 21778 + 21703 21708 21846 + 21713 21846 21708 + 21846 21713 21721 + 21721 21847 21846 + 21847 21721 21850 + 21850 21848 21847 + 21848 21850 21851 + 21851 21852 21848 + 21848 21852 21853 + 21853 21849 21848 + 21778 21849 21853 + 21853 21854 21778 + 21778 21854 21773 + 21855 21850 21721 + 21851 21850 21855 + 21855 21856 21851 + 21851 21856 21857 + 21857 21858 21851 + 21852 21851 21858 + 21858 21859 21852 + 21853 21852 21859 + 21721 21720 21855 + 21726 21855 21720 + 21855 21726 21860 + 21860 21856 21855 + 21856 21860 21861 + 21861 21857 21856 + 21857 21861 21862 + 21862 21863 21857 + 21857 21863 21864 + 21864 21858 21857 + 21859 21858 21864 + 21860 21726 21725 + 21725 21865 21860 + 21860 21865 21866 + 21866 21861 21860 + 21862 21861 21866 + 21866 21867 21862 + 21862 21867 21868 + 21863 21862 21868 + 21868 21869 21863 + 21864 21863 21869 + 21734 21865 21725 + 21865 21734 21870 + 21870 21866 21865 + 21866 21870 21871 + 21871 21867 21866 + 21867 21871 21872 + 21872 21868 21867 + 21868 21872 21748 + 21869 21868 21748 + 21873 21869 21748 + 21864 21869 21873 + 21738 21870 21734 + 21871 21870 21738 + 21738 21874 21871 + 21871 21874 21872 + 21748 21872 21874 + 21874 21743 21748 + 21743 21874 21738 + 21753 21873 21748 + 21875 21873 21753 + 21875 21876 21873 + 21876 21864 21873 + 21864 21876 21859 + 21859 21876 21875 + 21875 21877 21859 + 21859 21877 21853 + 21854 21853 21877 + 21878 21875 21753 + 21875 21878 21879 + 21879 21877 21875 + 21877 21879 21854 + 21773 21854 21879 + 21879 21880 21773 + 21766 21773 21880 + 21880 21767 21766 + 21881 21878 21753 + 21879 21878 21881 + 21881 21880 21879 + 21767 21880 21881 + 21881 21768 21767 + 21768 21881 21758 + 21881 21753 21758 + 21781 21842 21782 + 21842 21781 21882 + 21882 21838 21842 + 21838 21882 21883 + 21883 21839 21838 + 21839 21883 21884 + 21884 21840 21839 + 21786 21882 21781 + 21883 21882 21786 + 21786 21885 21883 + 21883 21885 21886 + 21886 21884 21883 + 21887 21884 21886 + 21840 21884 21887 + 21887 21888 21840 + 21840 21888 21889 + 21889 21835 21840 + 21790 21885 21786 + 21885 21790 21890 + 21890 21886 21885 + 21886 21890 21891 + 21891 21892 21886 + 21886 21892 21887 + 21887 21892 21893 + 21888 21887 21893 + 21893 21894 21888 + 21889 21888 21894 + 21795 21890 21790 + 21891 21890 21795 + 21795 21895 21891 + 21891 21895 21896 + 21892 21891 21896 + 21896 21893 21892 + 21894 21893 21896 + 21897 21894 21896 + 21894 21897 21898 + 21898 21889 21894 + 21889 21898 21830 + 21830 21835 21889 + 21899 21895 21795 + 21895 21899 21900 + 21900 21896 21895 + 21896 21900 21817 + 21817 21897 21896 + 21897 21817 21821 + 21821 21826 21897 + 21826 21898 21897 + 21830 21898 21826 + 21795 21794 21899 + 21899 21794 21793 + 21793 21901 21899 + 21899 21901 21900 + 21902 21900 21901 + 21900 21902 21817 + 21902 21812 21817 + 21812 21902 21807 + 21902 21802 21807 + 21802 21901 21793 + 21901 21802 21902 + 8225 21903 8303 + 8232 21903 8225 + 21903 8232 21904 + 21904 21905 21903 + 8303 21903 21905 + 21905 21906 8303 + 8298 8303 21906 + 21906 8292 8298 + 8239 21904 8232 + 21907 21904 8239 + 21905 21904 21907 + 21907 21908 21905 + 21905 21908 21909 + 21909 21906 21905 + 8292 21906 21909 + 21909 8293 8292 + 8293 21909 21910 + 21910 8288 8293 + 8239 21911 21907 + 21907 21911 21912 + 21912 21913 21907 + 21908 21907 21913 + 21913 21914 21908 + 21909 21908 21914 + 21914 21910 21909 + 21915 21910 21914 + 8288 21910 21915 + 8243 21911 8239 + 21911 8243 21916 + 21916 21912 21911 + 21912 21916 21917 + 21917 21918 21912 + 21912 21918 21919 + 21919 21913 21912 + 21914 21913 21919 + 21919 21920 21914 + 21914 21920 21915 + 8247 21916 8243 + 21917 21916 8247 + 8247 21921 21917 + 21917 21921 21922 + 21922 21923 21917 + 21918 21917 21923 + 21923 21924 21918 + 21919 21918 21924 + 21924 21925 21919 + 21920 21919 21925 + 8252 21921 8247 + 21921 8252 21926 + 21926 21922 21921 + 21922 21926 21927 + 21922 21927 21928 + 21928 21923 21922 + 21923 21928 21929 + 21924 21923 21929 + 21924 21929 21930 + 21930 21925 21924 + 21926 8252 8251 + 21931 21926 8251 + 21932 21926 21931 + 21926 21932 21927 + 21927 21932 21933 + 21928 21927 21933 + 21928 21933 21934 + 21929 21928 21934 + 21930 21929 21934 + 21931 8251 8250 + 21935 21931 8250 + 21931 21935 21936 + 21931 21936 21932 + 21932 21936 21937 + 21932 21937 21933 + 21934 21933 21937 + 21938 21934 21937 + 21930 21934 21938 + 21939 21930 21938 + 21925 21930 21939 + 8262 21935 8250 + 21935 8262 21940 + 21941 21935 21940 + 21935 21941 21936 + 21936 21941 21937 + 21941 21942 21937 + 21937 21942 21943 + 21943 21938 21937 + 21944 21940 8262 + 21940 21944 21945 + 21945 21942 21940 + 21941 21940 21942 + 8262 8261 21944 + 21944 8261 21946 + 21945 21944 21946 + 21947 21945 21946 + 21945 21947 21943 + 21942 21945 21943 + 8261 8260 21946 + 21948 21946 8260 + 21946 21948 21947 + 21948 21949 21947 + 21943 21947 21949 + 21949 21950 21943 + 21950 21951 21943 + 21952 21943 21951 + 21943 21952 21938 + 8260 8266 21948 + 21948 8266 21949 + 8266 8270 21949 + 21950 21949 8270 + 8270 8274 21950 + 21950 8274 21951 + 8274 8278 21951 + 21953 21951 8278 + 21951 21953 21952 + 21953 21954 21952 + 21938 21952 21954 + 21954 21955 21938 + 21955 21939 21938 + 8278 21956 21953 + 21953 21956 21954 + 21956 21957 21954 + 21955 21954 21957 + 21957 21958 21955 + 21955 21958 21959 + 21959 21939 21955 + 21959 21925 21939 + 21925 21959 21920 + 21956 8278 8277 + 8277 8283 21956 + 21957 21956 8283 + 8283 21960 21957 + 21958 21957 21960 + 21960 21915 21958 + 21959 21958 21915 + 21915 21920 21959 + 8288 21960 8283 + 21915 21960 8288 + 7712 21961 7713 + 7712 21962 21961 + 21961 21962 3721 + 21961 3721 21963 + 7713 21961 21963 + 21962 7712 7711 + 7711 21964 21962 + 15495 21962 21964 + 21962 15495 3721 + 21965 21966 21967 + 21968 21966 21965 + 21966 21968 21969 + 21969 21970 21966 + 21971 21966 21970 + 21971 21972 21966 + 21967 21973 21965 + 21974 21965 21973 + 21975 21965 21974 + 21965 21975 21976 + 21976 21968 21965 + 21973 21967 21977 + 21978 21973 21977 + 21973 21978 21974 + 21979 21974 21978 + 21980 21974 21979 + 21974 21980 21975 + 21977 21967 21972 + 21972 21981 21977 + 21982 21977 21981 + 21982 21978 21977 + 21982 21983 21978 + 21983 21984 21978 + 21978 21984 21979 + 21981 21972 21985 + 21981 21985 21986 + 21986 21987 21981 + 21987 21982 21981 + 21987 21988 21982 + 21982 21988 21989 + 21983 21982 21989 + 21985 21972 21990 + 21985 21990 21991 + 21986 21985 21991 + 21992 21986 21991 + 21992 21993 21986 + 21994 21986 21993 + 21987 21986 21994 + 21988 21987 21994 + 21972 21971 21990 + 21971 21995 21990 + 21990 21995 21996 + 21996 21991 21990 + 21997 21991 21996 + 21991 21997 21998 + 21998 21992 21991 + 21995 21971 21970 + 21970 21999 21995 + 21996 21995 21999 + 21999 22000 21996 + 22001 21996 22000 + 21996 22001 21997 + 21999 21970 21969 + 21969 22002 21999 + 21999 22002 22003 + 22003 22000 21999 + 22004 22000 22003 + 22000 22004 22001 + 22005 22001 22004 + 21997 22001 22005 + 22002 21969 22006 + 22006 22007 22002 + 22002 22007 22008 + 22003 22002 22008 + 22008 22009 22003 + 22010 22003 22009 + 22003 22010 22004 + 22011 22006 21969 + 22006 22011 22012 + 22013 22006 22012 + 22007 22006 22013 + 22007 22013 22014 + 22014 22008 22007 + 21969 21968 22011 + 22015 22011 21968 + 22012 22011 22015 + 22016 22012 22015 + 22013 22012 22016 + 22013 22016 22014 + 22016 22017 22014 + 22018 22014 22017 + 22008 22014 22018 + 21968 21976 22015 + 22019 22015 21976 + 22019 22016 22015 + 22020 22016 22019 + 22016 22020 22021 + 22021 22017 22016 + 22017 22021 22022 + 22022 22023 22017 + 22017 22023 22018 + 22024 22019 21976 + 22025 22019 22024 + 22019 22025 22020 + 22026 22024 21976 + 22027 22024 22026 + 22024 22027 22025 + 22025 22027 22028 + 22028 22029 22025 + 22020 22025 22029 + 21976 22030 22026 + 22026 22030 22031 + 22031 22032 22026 + 22027 22026 22032 + 22032 22028 22027 + 22028 22032 22033 + 22028 22033 22034 + 22028 22034 22029 + 21975 22030 21976 + 22030 21975 22035 + 22035 22031 22030 + 22036 22031 22035 + 22031 22036 22033 + 22033 22032 22031 + 21975 21980 22035 + 21980 22037 22035 + 22038 22035 22037 + 22035 22038 22036 + 22036 22038 22039 + 22033 22036 22039 + 22040 22033 22039 + 22034 22033 22040 + 22041 22037 21980 + 22037 22041 22042 + 22037 22042 22038 + 22043 22038 22042 + 22038 22043 22039 + 22044 22039 22043 + 22039 22044 22045 + 22045 22040 22039 + 21980 21979 22041 + 22046 22041 21979 + 22047 22041 22046 + 22041 22047 22042 + 22042 22047 22048 + 22042 22048 22043 + 22049 22043 22048 + 22043 22049 22044 + 21984 22046 21979 + 22046 21984 21983 + 22050 22046 21983 + 22046 22050 22051 + 22046 22051 22047 + 22052 22047 22051 + 22047 22052 22048 + 22052 22053 22048 + 22048 22053 22049 + 22054 22049 22053 + 22044 22049 22054 + 21989 22050 21983 + 22051 22050 21989 + 21989 22055 22051 + 22051 22055 22052 + 22053 22052 22055 + 22055 22056 22053 + 22053 22056 22057 + 22054 22053 22057 + 22058 22054 22057 + 22054 22058 22059 + 22054 22059 22044 + 22055 21989 21988 + 22056 22055 21988 + 22056 21988 21994 + 22056 21994 22057 + 21993 22057 21994 + 22057 21993 22060 + 22057 22060 22058 + 22058 22060 22061 + 22061 22062 22058 + 22059 22058 22062 + 22062 22063 22059 + 22059 22063 22064 + 22044 22059 22064 + 22060 21993 21992 + 21992 22065 22060 + 22060 22065 22061 + 22065 22066 22061 + 22067 22061 22066 + 22061 22067 22068 + 22061 22068 22069 + 22069 22062 22061 + 22063 22062 22069 + 22064 22063 22069 + 21992 21998 22065 + 22065 21998 22070 + 22070 22066 22065 + 22066 22070 22071 + 22066 22071 22067 + 22067 22071 22072 + 22073 22067 22072 + 22068 22067 22073 + 22074 22070 21998 + 22071 22070 22074 + 22074 22075 22071 + 22071 22075 22072 + 21998 21997 22074 + 21997 22076 22074 + 22077 22074 22076 + 22074 22077 22075 + 22075 22077 22078 + 22078 22072 22075 + 22005 22076 21997 + 22079 22076 22005 + 22076 22079 22077 + 22077 22079 22080 + 22080 22078 22077 + 22081 22078 22080 + 22072 22078 22081 + 22005 22082 22079 + 22079 22082 22083 + 22083 22080 22079 + 22080 22083 22084 + 22084 22085 22080 + 22080 22085 22081 + 22082 22005 22086 + 22086 22087 22082 + 22082 22087 22088 + 22088 22083 22082 + 22084 22083 22088 + 22004 22086 22005 + 22089 22086 22004 + 22087 22086 22089 + 22089 22090 22087 + 22087 22090 22091 + 22091 22088 22087 + 22088 22091 22092 + 22092 22093 22088 + 22088 22093 22084 + 22004 22010 22089 + 22089 22010 22094 + 22094 22095 22089 + 22090 22089 22095 + 22095 22096 22090 + 22090 22096 22097 + 22097 22091 22090 + 22092 22091 22097 + 22009 22094 22010 + 22094 22009 22098 + 22098 22099 22094 + 22094 22099 22100 + 22100 22095 22094 + 22096 22095 22100 + 22100 22101 22096 + 22096 22101 22102 + 22102 22097 22096 + 22098 22009 22008 + 22008 22103 22098 + 22098 22103 22104 + 22104 22105 22098 + 22099 22098 22105 + 22105 22106 22099 + 22100 22099 22106 + 22106 22107 22100 + 22101 22100 22107 + 22018 22103 22008 + 22103 22018 22108 + 22108 22104 22103 + 22109 22104 22108 + 22104 22109 22110 + 22110 22105 22104 + 22105 22110 22111 + 22111 22106 22105 + 22106 22111 22112 + 22112 22107 22106 + 22113 22108 22018 + 22113 22114 22108 + 22114 22109 22108 + 22109 22114 22115 + 22109 22115 22110 + 22111 22110 22115 + 22115 22116 22111 + 22111 22116 22117 + 22117 22112 22111 + 22018 22023 22113 + 22118 22113 22023 + 22114 22113 22118 + 22114 22118 22119 + 22119 22120 22114 + 22114 22120 22115 + 22121 22115 22120 + 22116 22115 22121 + 22023 22022 22118 + 22022 22122 22118 + 22122 22123 22118 + 22123 22119 22118 + 22123 22124 22119 + 22124 22125 22119 + 22125 22120 22119 + 22120 22125 22121 + 22126 22122 22022 + 22127 22122 22126 + 22122 22127 22128 + 22128 22123 22122 + 22124 22123 22128 + 22022 22021 22126 + 22126 22021 22020 + 22129 22126 22020 + 22129 22130 22126 + 22130 22127 22126 + 22127 22130 22131 + 22131 22128 22127 + 22131 22132 22128 + 22132 22124 22128 + 22020 22133 22129 + 22134 22129 22133 + 22129 22134 22135 + 22130 22129 22135 + 22130 22135 22136 + 22136 22131 22130 + 22132 22131 22136 + 22029 22133 22020 + 22137 22133 22029 + 22133 22137 22134 + 22138 22134 22137 + 22135 22134 22138 + 22138 22139 22135 + 22136 22135 22139 + 22140 22136 22139 + 22132 22136 22140 + 22140 22141 22132 + 22124 22132 22141 + 22137 22029 22142 + 22143 22137 22142 + 22138 22137 22143 + 22143 22144 22138 + 22145 22138 22144 + 22138 22145 22139 + 22139 22145 22146 + 22146 22140 22139 + 22034 22142 22029 + 22142 22034 22147 + 22148 22142 22147 + 22148 22143 22142 + 22149 22143 22148 + 22143 22149 22144 + 22149 22150 22144 + 22144 22150 22151 + 22144 22151 22145 + 22040 22147 22034 + 22152 22147 22040 + 22147 22152 22153 + 22153 22148 22147 + 22148 22153 22149 + 22149 22153 22154 + 22150 22149 22154 + 22154 22155 22150 + 22151 22150 22155 + 22155 22156 22151 + 22145 22151 22156 + 22146 22145 22156 + 22040 22045 22152 + 22152 22045 22064 + 22064 22157 22152 + 22153 22152 22157 + 22158 22153 22157 + 22153 22158 22154 + 22064 22045 22044 + 22121 22125 22124 + 22124 22141 22121 + 22159 22121 22141 + 22121 22159 22116 + 22116 22159 22160 + 22160 22117 22116 + 22141 22161 22159 + 22160 22159 22161 + 22161 22162 22160 + 22162 22163 22160 + 22163 22164 22160 + 22165 22160 22164 + 22117 22160 22165 + 22161 22141 22140 + 22140 22146 22161 + 22161 22146 22166 + 22166 22162 22161 + 22166 22167 22162 + 22162 22167 22168 + 22168 22163 22162 + 22168 22169 22163 + 22163 22169 22170 + 22170 22164 22163 + 22166 22146 22156 + 22167 22166 22156 + 22156 22171 22167 + 22168 22167 22171 + 22171 22172 22168 + 22169 22168 22172 + 22172 22173 22169 + 22169 22173 22174 + 22170 22169 22174 + 22156 22155 22171 + 22155 22175 22171 + 22171 22175 22176 + 22176 22172 22171 + 22173 22172 22176 + 22176 22177 22173 + 22173 22177 22178 + 22178 22174 22173 + 22175 22155 22154 + 22154 22179 22175 + 22176 22175 22179 + 22179 22180 22176 + 22177 22176 22180 + 22180 22181 22177 + 22177 22181 22182 + 22182 22178 22177 + 22183 22178 22182 + 22174 22178 22183 + 22154 22184 22179 + 22180 22179 22184 + 22185 22180 22184 + 22181 22180 22185 + 22181 22185 22186 + 22186 22187 22181 + 22181 22187 22182 + 22154 22158 22184 + 22184 22158 22188 + 22185 22184 22188 + 22188 22186 22185 + 22189 22186 22188 + 22186 22189 22187 + 22187 22189 22190 + 22190 22191 22187 + 22187 22191 22182 + 22158 22157 22188 + 22192 22188 22157 + 22188 22192 22189 + 22189 22192 22069 + 22190 22189 22069 + 22069 22068 22190 + 22068 22193 22190 + 22194 22190 22193 + 22190 22194 22191 + 22157 22064 22192 + 22192 22064 22069 + 22073 22193 22068 + 22193 22073 22195 + 22193 22195 22194 + 22194 22195 22196 + 22196 22197 22194 + 22191 22194 22197 + 22197 22182 22191 + 22182 22197 22198 + 22198 22199 22182 + 22182 22199 22183 + 22195 22073 22200 + 22200 22196 22195 + 22196 22200 22201 + 22201 22202 22196 + 22196 22202 22198 + 22198 22197 22196 + 22072 22200 22073 + 22201 22200 22072 + 22072 22203 22201 + 22201 22203 22204 + 22204 22205 22201 + 22202 22201 22205 + 22205 22206 22202 + 22198 22202 22206 + 22081 22203 22072 + 22203 22081 22207 + 22207 22204 22203 + 22204 22207 22208 + 22208 22209 22204 + 22204 22209 22210 + 22210 22205 22204 + 22206 22205 22210 + 22211 22207 22081 + 22208 22207 22211 + 22211 22212 22208 + 22208 22212 22213 + 22213 22214 22208 + 22209 22208 22214 + 22214 22215 22209 + 22210 22209 22215 + 22081 22085 22211 + 22216 22211 22085 + 22211 22216 22217 + 22217 22212 22211 + 22212 22217 22218 + 22218 22213 22212 + 22085 22084 22216 + 22219 22216 22084 + 22217 22216 22219 + 22219 22220 22217 + 22217 22220 22221 + 22221 22218 22217 + 22222 22218 22221 + 22213 22218 22222 + 22084 22093 22219 + 22223 22219 22093 + 22219 22223 22224 + 22224 22220 22219 + 22220 22224 22225 + 22225 22221 22220 + 22221 22225 22226 + 22226 22227 22221 + 22221 22227 22222 + 22093 22092 22223 + 22228 22223 22092 + 22224 22223 22228 + 22228 22229 22224 + 22224 22229 22230 + 22230 22225 22224 + 22226 22225 22230 + 22231 22228 22092 + 22232 22228 22231 + 22228 22232 22233 + 22233 22229 22228 + 22229 22233 22234 + 22234 22230 22229 + 22235 22231 22092 + 22236 22231 22235 + 22237 22231 22236 + 22231 22237 22232 + 22232 22237 22238 + 22233 22232 22238 + 22092 22239 22235 + 22240 22235 22239 + 22235 22240 22241 + 22241 22242 22235 + 22235 22242 22236 + 22097 22239 22092 + 22243 22239 22097 + 22239 22243 22240 + 22244 22240 22243 + 22241 22240 22244 + 22244 22245 22241 + 22241 22245 22246 + 22246 22247 22241 + 22242 22241 22247 + 22097 22102 22243 + 22243 22102 22248 + 22248 22249 22243 + 22243 22249 22244 + 22250 22244 22249 + 22244 22250 22251 + 22251 22245 22244 + 22245 22251 22252 + 22252 22246 22245 + 22248 22102 22101 + 22101 22253 22248 + 22254 22248 22253 + 22248 22254 22255 + 22255 22249 22248 + 22249 22255 22250 + 22256 22250 22255 + 22251 22250 22256 + 22107 22253 22101 + 22257 22253 22107 + 22253 22257 22254 + 22258 22254 22257 + 22255 22254 22258 + 22258 22259 22255 + 22255 22259 22256 + 22107 22112 22257 + 22257 22112 22117 + 22117 22260 22257 + 22257 22260 22258 + 22261 22258 22260 + 22258 22261 22262 + 22262 22259 22258 + 22259 22262 22263 + 22263 22256 22259 + 22165 22260 22117 + 22260 22165 22261 + 22264 22261 22165 + 22262 22261 22264 + 22264 22265 22262 + 22262 22265 22266 + 22266 22263 22262 + 22267 22263 22266 + 22256 22263 22267 + 22267 22268 22256 + 22256 22268 22251 + 22165 22269 22264 + 22270 22264 22269 + 22264 22270 22271 + 22271 22265 22264 + 22265 22271 22272 + 22272 22266 22265 + 22164 22269 22165 + 22164 22170 22269 + 22269 22170 22270 + 22174 22270 22170 + 22271 22270 22174 + 22174 22273 22271 + 22271 22273 22274 + 22274 22272 22271 + 22275 22272 22274 + 22266 22272 22275 + 22275 22276 22266 + 22266 22276 22267 + 22183 22273 22174 + 22273 22183 22277 + 22277 22274 22273 + 22274 22277 22278 + 22278 22279 22274 + 22274 22279 22275 + 22275 22279 22280 + 22280 22281 22275 + 22276 22275 22281 + 22282 22277 22183 + 22278 22277 22282 + 22282 22283 22278 + 22278 22283 22284 + 22284 22285 22278 + 22279 22278 22285 + 22285 22280 22279 + 22183 22199 22282 + 22286 22282 22199 + 22282 22286 22287 + 22287 22283 22282 + 22283 22287 22288 + 22288 22284 22283 + 22199 22198 22286 + 22289 22286 22198 + 22287 22286 22289 + 22289 22290 22287 + 22287 22290 22291 + 22291 22288 22287 + 22292 22288 22291 + 22284 22288 22292 + 22293 22289 22198 + 22294 22289 22293 + 22289 22294 22295 + 22295 22290 22289 + 22290 22295 22296 + 22296 22291 22290 + 22206 22293 22198 + 22297 22293 22206 + 22298 22293 22297 + 22293 22298 22294 + 22299 22294 22298 + 22295 22294 22299 + 22299 22300 22295 + 22295 22300 22301 + 22301 22296 22295 + 22206 22302 22297 + 22297 22302 22303 + 22303 22304 22297 + 22305 22297 22304 + 22297 22305 22298 + 22210 22302 22206 + 22302 22210 22306 + 22306 22303 22302 + 22303 22306 22307 + 22307 22308 22303 + 22303 22308 22309 + 22309 22304 22303 + 22310 22304 22309 + 22304 22310 22305 + 22215 22306 22210 + 22307 22306 22215 + 22215 22311 22307 + 22307 22311 22312 + 22312 22313 22307 + 22308 22307 22313 + 22313 22314 22308 + 22309 22308 22314 + 22315 22311 22215 + 22311 22315 22316 + 22316 22312 22311 + 22312 22316 22317 + 22317 22318 22312 + 22312 22318 22319 + 22319 22313 22312 + 22314 22313 22319 + 22215 22214 22315 + 22315 22214 22213 + 22213 22320 22315 + 22315 22320 22321 + 22321 22316 22315 + 22317 22316 22321 + 22321 22322 22317 + 22323 22317 22322 + 22318 22317 22323 + 22323 22324 22318 + 22319 22318 22324 + 22222 22320 22213 + 22320 22222 22325 + 22325 22321 22320 + 22321 22325 22326 + 22326 22322 22321 + 22322 22326 22323 + 22326 22327 22323 + 22323 22327 22328 + 22324 22323 22328 + 22329 22325 22222 + 22326 22325 22329 + 22329 22330 22326 + 22326 22330 22327 + 22330 22331 22327 + 22331 22328 22327 + 22222 22227 22329 + 22332 22329 22227 + 22329 22332 22331 + 22331 22330 22329 + 22227 22226 22332 + 22333 22332 22226 + 22331 22332 22333 + 22333 22334 22331 + 22331 22334 22328 + 22334 22335 22328 + 22335 22336 22328 + 22328 22336 22324 + 22226 22337 22333 + 22338 22333 22337 + 22333 22338 22335 + 22335 22334 22333 + 22230 22337 22226 + 22339 22337 22230 + 22337 22339 22338 + 22340 22338 22339 + 22335 22338 22340 + 22340 22341 22335 + 22335 22341 22336 + 22342 22336 22341 + 22336 22342 22324 + 22230 22234 22339 + 22339 22234 22343 + 22343 22344 22339 + 22339 22344 22340 + 22345 22340 22344 + 22340 22345 22346 + 22346 22341 22340 + 22341 22346 22342 + 22343 22234 22233 + 22233 22347 22343 + 22348 22343 22347 + 22343 22348 22349 + 22349 22344 22343 + 22344 22349 22345 + 22350 22345 22349 + 22346 22345 22350 + 22350 22351 22346 + 22346 22351 22342 + 22238 22347 22233 + 22352 22347 22238 + 22347 22352 22348 + 22310 22348 22352 + 22349 22348 22310 + 22310 22353 22349 + 22349 22353 22350 + 22354 22350 22353 + 22350 22354 22355 + 22355 22351 22350 + 22238 22356 22352 + 22352 22356 22298 + 22298 22305 22352 + 22352 22305 22310 + 22356 22238 22357 + 22357 22299 22356 + 22356 22299 22298 + 22237 22357 22238 + 22309 22353 22310 + 22353 22309 22354 + 22314 22354 22309 + 22355 22354 22314 + 22314 22358 22355 + 22355 22358 22359 + 22351 22355 22359 + 22359 22342 22351 + 22342 22359 22324 + 22324 22359 22358 + 22358 22319 22324 + 22319 22358 22314 + 22360 22296 22301 + 22291 22296 22360 + 22360 22361 22291 + 22291 22361 22292 + 22301 22362 22360 + 22360 22362 22363 + 22363 22364 22360 + 22361 22360 22364 + 22364 22365 22361 + 22365 22366 22361 + 22366 22292 22361 + 22367 22362 22301 + 22362 22367 22368 + 22368 22363 22362 + 22363 22368 22369 + 22369 22370 22363 + 22363 22370 22371 + 22371 22364 22363 + 22365 22364 22371 + 22301 22372 22367 + 22367 22372 22373 + 22373 22374 22367 + 22367 22374 22375 + 22375 22368 22367 + 22369 22368 22375 + 22372 22301 22300 + 22300 22376 22372 + 22373 22372 22376 + 22376 22377 22373 + 22378 22373 22377 + 22373 22378 22379 + 22379 22374 22373 + 22374 22379 22380 + 22380 22375 22374 + 22376 22300 22299 + 22299 22381 22376 + 22376 22381 22237 + 22237 22377 22376 + 22236 22377 22237 + 22377 22236 22378 + 22382 22378 22236 + 22379 22378 22382 + 22382 22383 22379 + 22379 22383 22384 + 22384 22380 22379 + 22385 22380 22384 + 22375 22380 22385 + 22385 22386 22375 + 22375 22386 22369 + 22236 22242 22382 + 22247 22382 22242 + 22382 22247 22387 + 22387 22383 22382 + 22383 22387 22388 + 22388 22384 22383 + 22384 22388 22389 + 22389 22390 22384 + 22384 22390 22385 + 22387 22247 22246 + 22246 22391 22387 + 22387 22391 22392 + 22392 22388 22387 + 22389 22388 22392 + 22392 22393 22389 + 22389 22393 22394 + 22389 22394 22395 + 22390 22389 22395 + 22385 22390 22395 + 22396 22391 22246 + 22391 22396 22397 + 22397 22392 22391 + 22392 22397 22398 + 22398 22393 22392 + 22393 22398 22399 + 22399 22394 22393 + 22394 22399 22400 + 22395 22394 22400 + 22246 22252 22396 + 22396 22252 22401 + 22401 22402 22396 + 22396 22402 22403 + 22403 22397 22396 + 22398 22397 22403 + 22403 22404 22398 + 22398 22404 22399 + 22400 22399 22404 + 22401 22252 22251 + 22251 22268 22401 + 22405 22401 22268 + 22401 22405 22406 + 22406 22402 22401 + 22402 22406 22407 + 22407 22403 22402 + 22403 22407 22408 + 22408 22404 22403 + 22404 22408 22400 + 22268 22267 22405 + 22409 22405 22267 + 22406 22405 22409 + 22409 22410 22406 + 22406 22410 22411 + 22411 22407 22406 + 22408 22407 22411 + 22411 22412 22408 + 22408 22412 22400 + 22267 22276 22409 + 22281 22409 22276 + 22409 22281 22413 + 22413 22410 22409 + 22410 22413 22414 + 22414 22411 22410 + 22411 22414 22415 + 22415 22412 22411 + 22412 22415 22416 + 22416 22400 22412 + 22413 22281 22280 + 22280 22417 22413 + 22413 22417 22418 + 22418 22414 22413 + 22415 22414 22418 + 22418 22419 22415 + 22415 22419 22416 + 22420 22416 22419 + 22416 22420 22421 + 22400 22416 22421 + 22422 22417 22280 + 22417 22422 22423 + 22423 22418 22417 + 22418 22423 22424 + 22424 22419 22418 + 22419 22424 22420 + 22420 22424 22425 + 22426 22420 22425 + 22420 22426 22421 + 22280 22285 22422 + 22422 22285 22284 + 22284 22427 22422 + 22422 22427 22428 + 22428 22423 22422 + 22423 22428 22425 + 22424 22423 22425 + 22292 22427 22284 + 22428 22427 22292 + 22366 22428 22292 + 22428 22366 22425 + 22366 22429 22425 + 22425 22429 22426 + 22429 22430 22426 + 22430 22371 22426 + 22371 22421 22426 + 22429 22366 22365 + 22365 22430 22429 + 22371 22430 22365 + 22371 22370 22421 + 22370 22369 22421 + 22369 22431 22421 + 22421 22431 22400 + 22431 22395 22400 + 22385 22395 22431 + 22386 22385 22431 + 22369 22386 22431 + 22432 22433 22434 + 22433 22432 22435 + 22435 22436 22433 + 22437 22433 22436 + 22438 22433 22437 + 22439 22432 22434 + 22432 22439 22440 + 22440 22441 22432 + 22432 22441 22442 + 22442 22435 22432 + 22443 22435 22442 + 22435 22443 22436 + 22439 22434 22444 + 22444 22445 22439 + 22440 22439 22445 + 22445 22446 22440 + 22440 22446 22447 + 22447 22448 22440 + 22441 22440 22448 + 22448 22449 22441 + 22442 22441 22449 + 22445 22444 22450 + 22451 22445 22450 + 22445 22451 22452 + 22452 22446 22445 + 22446 22452 22453 + 22453 22447 22446 + 22450 22444 22454 + 22454 22455 22450 + 22450 22455 22456 + 22456 22457 22450 + 22450 22457 22458 + 22451 22450 22458 + 22454 22444 22438 + 22438 22459 22454 + 22454 22459 22460 + 22460 22461 22454 + 22455 22454 22461 + 22461 22462 22455 + 22456 22455 22462 + 22437 22459 22438 + 22459 22437 22463 + 22463 22460 22459 + 22460 22463 22464 + 22464 22465 22460 + 22460 22465 22466 + 22466 22461 22460 + 22462 22461 22466 + 22467 22463 22437 + 22464 22463 22467 + 22467 22468 22464 + 22464 22468 22469 + 22469 22470 22464 + 22465 22464 22470 + 22470 22471 22465 + 22466 22465 22471 + 22437 22472 22467 + 22473 22467 22472 + 22467 22473 22474 + 22474 22468 22467 + 22468 22474 22475 + 22475 22469 22468 + 22436 22472 22437 + 22476 22472 22436 + 22472 22476 22473 + 22477 22473 22476 + 22474 22473 22477 + 22477 22478 22474 + 22474 22478 22479 + 22479 22475 22474 + 22436 22480 22476 + 22476 22480 22481 + 22481 22482 22476 + 22476 22482 22477 + 22483 22477 22482 + 22477 22483 22484 + 22484 22478 22477 + 22443 22480 22436 + 22480 22443 22485 + 22481 22480 22485 + 22485 22486 22481 + 22487 22481 22486 + 22482 22481 22487 + 22488 22482 22487 + 22482 22488 22483 + 22489 22483 22488 + 22484 22483 22489 + 22443 22490 22485 + 22491 22485 22490 + 22485 22491 22492 + 22492 22493 22485 + 22485 22493 22494 + 22494 22486 22485 + 22495 22490 22443 + 22496 22490 22495 + 22490 22496 22491 + 22497 22491 22496 + 22492 22491 22497 + 22443 22498 22495 + 22495 22498 22499 + 22499 22500 22495 + 22501 22495 22500 + 22495 22501 22496 + 22442 22498 22443 + 22498 22442 22502 + 22502 22499 22498 + 22499 22502 22503 + 22503 22504 22499 + 22499 22504 22505 + 22505 22500 22499 + 22506 22500 22505 + 22500 22506 22501 + 22449 22502 22442 + 22503 22502 22449 + 22449 22507 22503 + 22503 22507 22508 + 22508 22509 22503 + 22504 22503 22509 + 22509 22510 22504 + 22505 22504 22510 + 22511 22507 22449 + 22507 22511 22512 + 22512 22508 22507 + 22508 22512 22513 + 22513 22514 22508 + 22508 22514 22515 + 22515 22509 22508 + 22449 22448 22511 + 22511 22448 22447 + 22447 22516 22511 + 22511 22516 22517 + 22517 22512 22511 + 22513 22512 22517 + 22517 22518 22513 + 22519 22513 22518 + 22519 22520 22513 + 22520 22514 22513 + 22520 22515 22514 + 22521 22516 22447 + 22516 22521 22522 + 22522 22517 22516 + 22517 22522 22523 + 22523 22518 22517 + 22518 22523 22524 + 22524 22519 22518 + 22447 22453 22521 + 22521 22453 22525 + 22525 22526 22521 + 22521 22526 22527 + 22527 22522 22521 + 22523 22522 22527 + 22527 22528 22523 + 22524 22523 22528 + 22529 22524 22528 + 22519 22524 22529 + 22525 22453 22452 + 22452 22530 22525 + 22531 22525 22530 + 22525 22531 22532 + 22532 22526 22525 + 22526 22532 22533 + 22533 22527 22526 + 22527 22533 22534 + 22534 22528 22527 + 22528 22534 22529 + 22535 22530 22452 + 22536 22530 22535 + 22530 22536 22531 + 22537 22531 22536 + 22532 22531 22537 + 22537 22538 22532 + 22532 22538 22539 + 22539 22533 22532 + 22534 22533 22539 + 22452 22451 22535 + 22535 22451 22458 + 22458 22540 22535 + 22541 22535 22540 + 22535 22541 22536 + 22536 22541 22542 + 22542 22543 22536 + 22536 22543 22537 + 22544 22540 22458 + 22545 22540 22544 + 22540 22545 22541 + 22542 22541 22545 + 22545 22546 22542 + 22547 22542 22546 + 22542 22547 22548 + 22548 22543 22542 + 22458 22549 22544 + 22544 22549 22550 + 22550 22551 22544 + 22552 22544 22551 + 22544 22552 22545 + 22545 22552 22553 + 22553 22546 22545 + 22554 22549 22458 + 22549 22554 22555 + 22555 22550 22549 + 22556 22550 22555 + 22550 22556 22557 + 22557 22551 22550 + 22458 22558 22554 + 22554 22558 22559 + 22559 22560 22554 + 22554 22560 22561 + 22561 22555 22554 + 22562 22555 22561 + 22555 22562 22556 + 22558 22458 22457 + 22457 22563 22558 + 22559 22558 22563 + 22563 22564 22559 + 22565 22559 22564 + 22559 22565 22566 + 22566 22560 22559 + 22560 22566 22567 + 22567 22561 22560 + 22563 22457 22456 + 22456 22568 22563 + 22563 22568 22569 + 22569 22564 22563 + 22570 22564 22569 + 22564 22570 22565 + 22571 22565 22570 + 22566 22565 22571 + 22568 22456 22572 + 22572 22573 22568 + 22569 22568 22573 + 22573 22574 22569 + 22575 22569 22574 + 22569 22575 22570 + 22462 22572 22456 + 22576 22572 22462 + 22573 22572 22576 + 22576 22577 22573 + 22573 22577 22578 + 22578 22574 22573 + 22579 22574 22578 + 22574 22579 22575 + 22580 22575 22579 + 22570 22575 22580 + 22462 22581 22576 + 22576 22581 22582 + 22582 22583 22576 + 22577 22576 22583 + 22583 22584 22577 + 22578 22577 22584 + 22466 22581 22462 + 22581 22466 22585 + 22585 22582 22581 + 22582 22585 22586 + 22586 22587 22582 + 22582 22587 22588 + 22588 22583 22582 + 22584 22583 22588 + 22471 22585 22466 + 22586 22585 22471 + 22471 22589 22586 + 22590 22586 22589 + 22587 22586 22590 + 22590 22591 22587 + 22591 22588 22587 + 22592 22588 22591 + 22588 22592 22584 + 22593 22589 22471 + 22589 22593 22594 + 22594 22590 22589 + 22590 22594 22595 + 22591 22590 22595 + 22596 22591 22595 + 22591 22596 22592 + 22596 22597 22592 + 22584 22592 22597 + 22471 22470 22593 + 22593 22470 22469 + 22469 22598 22593 + 22594 22593 22598 + 22595 22594 22598 + 22598 22599 22595 + 22595 22599 22600 + 22595 22600 22601 + 22602 22595 22601 + 22595 22602 22596 + 22599 22598 22469 + 22599 22469 22475 + 22599 22475 22600 + 22475 22479 22600 + 22600 22479 22603 + 22601 22600 22603 + 22601 22603 22604 + 22604 22605 22601 + 22601 22605 22602 + 22602 22605 22606 + 22607 22602 22606 + 22602 22607 22596 + 22603 22479 22478 + 22478 22484 22603 + 22604 22603 22484 + 22484 22608 22604 + 22609 22604 22608 + 22605 22604 22609 + 22606 22605 22609 + 22606 22609 22610 + 22610 22611 22606 + 22607 22606 22611 + 22489 22608 22484 + 22612 22608 22489 + 22608 22612 22609 + 22610 22609 22612 + 22612 22613 22610 + 22614 22610 22613 + 22611 22610 22614 + 22615 22611 22614 + 22607 22611 22615 + 22616 22607 22615 + 22607 22616 22596 + 22489 22617 22612 + 22612 22617 22618 + 22618 22613 22612 + 22619 22613 22618 + 22613 22619 22614 + 22620 22614 22619 + 22615 22614 22620 + 22620 22621 22615 + 22616 22615 22621 + 22617 22489 22622 + 22622 22623 22617 + 22618 22617 22623 + 22623 22624 22618 + 22625 22618 22624 + 22618 22625 22619 + 22488 22622 22489 + 22626 22622 22488 + 22623 22622 22626 + 22626 22627 22623 + 22623 22627 22628 + 22628 22624 22623 + 22629 22624 22628 + 22624 22629 22625 + 22630 22625 22629 + 22619 22625 22630 + 22488 22487 22626 + 22626 22487 22631 + 22631 22632 22626 + 22627 22626 22632 + 22632 22633 22627 + 22628 22627 22633 + 22633 22634 22628 + 22635 22628 22634 + 22628 22635 22629 + 22486 22631 22487 + 22631 22486 22494 + 22494 22636 22631 + 22631 22636 22637 + 22637 22632 22631 + 22633 22632 22637 + 22637 22638 22633 + 22633 22638 22639 + 22639 22634 22633 + 22640 22634 22639 + 22634 22640 22635 + 22636 22494 22641 + 22641 22642 22636 + 22637 22636 22642 + 22642 22643 22637 + 22643 22644 22637 + 22644 22645 22637 + 22638 22637 22645 + 22646 22641 22494 + 22647 22641 22646 + 22642 22641 22647 + 22642 22647 22648 + 22648 22643 22642 + 22643 22648 22649 + 22643 22649 22644 + 22494 22493 22646 + 22650 22646 22493 + 22646 22650 22651 + 22646 22651 22647 + 22648 22647 22651 + 22652 22648 22651 + 22648 22652 22653 + 22649 22648 22653 + 22493 22492 22650 + 22650 22492 22654 + 22654 22655 22650 + 22655 22656 22650 + 22651 22650 22656 + 22656 22657 22651 + 22651 22657 22658 + 22658 22652 22651 + 22492 22659 22654 + 22660 22654 22659 + 22654 22660 22661 + 22654 22661 22662 + 22662 22655 22654 + 22497 22659 22492 + 22663 22659 22497 + 22659 22663 22660 + 22664 22660 22663 + 22661 22660 22664 + 22664 22665 22661 + 22662 22661 22665 + 22666 22662 22665 + 22667 22662 22666 + 22655 22662 22667 + 22497 22668 22663 + 22663 22668 22669 + 22669 22670 22663 + 22663 22670 22664 + 22671 22664 22670 + 22665 22664 22671 + 22668 22497 22672 + 22672 22673 22668 + 22669 22668 22673 + 22673 22547 22669 + 22546 22669 22547 + 22669 22546 22553 + 22553 22670 22669 + 22670 22553 22671 + 22496 22672 22497 + 22674 22672 22496 + 22673 22672 22674 + 22674 22675 22673 + 22673 22675 22548 + 22548 22547 22673 + 22496 22501 22674 + 22674 22501 22506 + 22506 22676 22674 + 22675 22674 22676 + 22676 22677 22675 + 22548 22675 22677 + 22677 22678 22548 + 22543 22548 22678 + 22678 22537 22543 + 22679 22676 22506 + 22677 22676 22679 + 22679 22680 22677 + 22677 22680 22681 + 22681 22678 22677 + 22537 22678 22681 + 22681 22538 22537 + 22538 22681 22682 + 22682 22539 22538 + 22506 22683 22679 + 22679 22683 22684 + 22684 22685 22679 + 22680 22679 22685 + 22685 22686 22680 + 22681 22680 22686 + 22686 22682 22681 + 22687 22682 22686 + 22539 22682 22687 + 22505 22683 22506 + 22683 22505 22688 + 22688 22684 22683 + 22689 22684 22688 + 22684 22689 22690 + 22690 22685 22684 + 22690 22691 22685 + 22691 22686 22685 + 22686 22691 22687 + 22510 22688 22505 + 22692 22688 22510 + 22692 22689 22688 + 22693 22689 22692 + 22693 22690 22689 + 22693 22694 22690 + 22694 22691 22690 + 22687 22691 22694 + 22695 22687 22694 + 22687 22695 22539 + 22539 22695 22534 + 22529 22534 22695 + 22510 22696 22692 + 22697 22692 22696 + 22697 22693 22692 + 22693 22697 22519 + 22529 22693 22519 + 22529 22694 22693 + 22694 22529 22695 + 22696 22510 22509 + 22515 22696 22509 + 22697 22696 22515 + 22520 22697 22515 + 22697 22520 22519 + 22698 22671 22553 + 22699 22671 22698 + 22671 22699 22665 + 22665 22699 22700 + 22700 22701 22665 + 22665 22701 22666 + 22553 22552 22698 + 22551 22698 22552 + 22702 22698 22551 + 22698 22702 22699 + 22700 22699 22702 + 22702 22703 22700 + 22704 22700 22703 + 22700 22704 22705 + 22705 22701 22700 + 22701 22705 22706 + 22706 22666 22701 + 22551 22557 22702 + 22702 22557 22707 + 22707 22703 22702 + 22708 22703 22707 + 22703 22708 22704 + 22709 22704 22708 + 22705 22704 22709 + 22709 22710 22705 + 22705 22710 22706 + 22707 22557 22556 + 22556 22711 22707 + 22712 22707 22711 + 22707 22712 22708 + 22708 22712 22713 + 22713 22714 22708 + 22708 22714 22709 + 22715 22709 22714 + 22710 22709 22715 + 22716 22711 22556 + 22717 22711 22716 + 22711 22717 22712 + 22713 22712 22717 + 22718 22713 22717 + 22719 22713 22718 + 22713 22719 22720 + 22720 22714 22713 + 22714 22720 22715 + 22556 22562 22716 + 22716 22562 22721 + 22721 22722 22716 + 22723 22716 22722 + 22716 22723 22717 + 22717 22723 22724 + 22724 22725 22717 + 22717 22725 22718 + 22561 22721 22562 + 22726 22721 22561 + 22721 22726 22727 + 22727 22722 22721 + 22722 22727 22728 + 22728 22729 22722 + 22722 22729 22723 + 22724 22723 22729 + 22561 22567 22726 + 22726 22567 22730 + 22730 22731 22726 + 22726 22731 22732 + 22732 22727 22726 + 22728 22727 22732 + 22732 22733 22728 + 22728 22733 22734 + 22729 22728 22734 + 22730 22567 22566 + 22566 22735 22730 + 22736 22730 22735 + 22730 22736 22737 + 22737 22731 22730 + 22731 22737 22738 + 22738 22732 22731 + 22733 22732 22738 + 22571 22735 22566 + 22739 22735 22571 + 22735 22739 22736 + 22740 22736 22739 + 22737 22736 22740 + 22740 22741 22737 + 22738 22737 22741 + 22742 22738 22741 + 22743 22738 22742 + 22738 22743 22733 + 22571 22744 22739 + 22739 22744 22640 + 22640 22745 22739 + 22739 22745 22740 + 22746 22740 22745 + 22740 22746 22741 + 22744 22571 22747 + 22747 22748 22744 + 22640 22744 22748 + 22748 22635 22640 + 22629 22635 22748 + 22748 22749 22629 + 22629 22749 22630 + 22570 22747 22571 + 22580 22747 22570 + 22748 22747 22580 + 22580 22749 22748 + 22749 22580 22750 + 22750 22630 22749 + 22630 22750 22751 + 22751 22752 22630 + 22630 22752 22619 + 22619 22752 22620 + 22579 22750 22580 + 22751 22750 22579 + 22579 22753 22751 + 22751 22753 22754 + 22754 22755 22751 + 22752 22751 22755 + 22755 22620 22752 + 22621 22620 22755 + 22756 22621 22755 + 22616 22621 22756 + 22578 22753 22579 + 22753 22578 22757 + 22757 22754 22753 + 22597 22754 22757 + 22597 22758 22754 + 22754 22758 22756 + 22756 22755 22754 + 22584 22757 22578 + 22597 22757 22584 + 22639 22745 22640 + 22745 22639 22746 + 22746 22639 22759 + 22759 22760 22746 + 22741 22746 22760 + 22760 22761 22741 + 22741 22761 22742 + 22639 22638 22759 + 22645 22759 22638 + 22762 22759 22645 + 22759 22762 22763 + 22763 22760 22759 + 22761 22760 22763 + 22761 22763 22764 + 22764 22765 22761 + 22761 22765 22742 + 22645 22766 22762 + 22762 22766 22767 + 22767 22768 22762 + 22762 22768 22763 + 22768 22764 22763 + 22769 22764 22768 + 22765 22764 22769 + 22765 22769 22770 + 22770 22742 22765 + 22766 22645 22771 + 22771 22772 22766 + 22772 22767 22766 + 22767 22772 22773 + 22774 22767 22773 + 22767 22774 22775 + 22768 22767 22775 + 22768 22775 22769 + 22770 22769 22775 + 22645 22644 22771 + 22776 22771 22644 + 22771 22776 22777 + 22777 22772 22771 + 22772 22777 22778 + 22778 22773 22772 + 22773 22778 22779 + 22779 22780 22773 + 22774 22773 22780 + 22649 22776 22644 + 22777 22776 22649 + 22649 22653 22777 + 22778 22777 22653 + 22653 22781 22778 + 22779 22778 22781 + 22781 22782 22779 + 22783 22779 22782 + 22780 22779 22783 + 22781 22653 22652 + 22652 22784 22781 + 22781 22784 22785 + 22785 22782 22781 + 22786 22782 22785 + 22782 22786 22783 + 22787 22783 22786 + 22788 22783 22787 + 22788 22780 22783 + 22784 22652 22658 + 22658 22789 22784 + 22785 22784 22789 + 22790 22785 22789 + 22791 22785 22790 + 22785 22791 22786 + 22786 22791 22792 + 22786 22792 22787 + 22658 22793 22789 + 22789 22793 22794 + 22789 22794 22790 + 22795 22790 22794 + 22795 22796 22790 + 22796 22797 22790 + 22790 22797 22791 + 22793 22658 22657 + 22657 22798 22793 + 22799 22793 22798 + 22793 22799 22794 + 22794 22799 22800 + 22794 22800 22795 + 22801 22795 22800 + 22795 22801 22802 + 22796 22795 22802 + 22657 22656 22798 + 22798 22656 22655 + 22655 22667 22798 + 22667 22803 22798 + 22803 22804 22798 + 22804 22799 22798 + 22804 22805 22799 + 22805 22800 22799 + 22805 22806 22800 + 22806 22801 22800 + 22666 22803 22667 + 22803 22666 22706 + 22803 22706 22807 + 22807 22804 22803 + 22804 22807 22805 + 22805 22807 22808 + 22805 22808 22806 + 22809 22806 22808 + 22810 22806 22809 + 22806 22810 22801 + 22810 22811 22801 + 22802 22801 22811 + 22812 22807 22706 + 22807 22812 22808 + 22808 22812 22813 + 22808 22813 22809 + 22814 22809 22813 + 22815 22809 22814 + 22809 22815 22810 + 22810 22815 22816 + 22810 22816 22811 + 22817 22812 22706 + 22817 22818 22812 + 22818 22813 22812 + 22818 22814 22813 + 22710 22817 22706 + 22819 22817 22710 + 22817 22819 22818 + 22818 22819 22820 + 22818 22820 22814 + 22821 22814 22820 + 22821 22822 22814 + 22822 22823 22814 + 22814 22823 22815 + 22710 22715 22819 + 22824 22819 22715 + 22819 22824 22820 + 22820 22824 22825 + 22820 22825 22821 + 22826 22821 22825 + 22826 22827 22821 + 22827 22822 22821 + 22828 22822 22827 + 22823 22822 22828 + 22829 22824 22715 + 22829 22830 22824 + 22830 22825 22824 + 22830 22826 22825 + 22831 22826 22830 + 22827 22826 22831 + 22827 22831 22832 + 22827 22832 22828 + 22720 22829 22715 + 22833 22829 22720 + 22830 22829 22833 + 22834 22830 22833 + 22834 22835 22830 + 22830 22835 22831 + 22836 22831 22835 + 22831 22836 22832 + 22720 22719 22833 + 22837 22833 22719 + 22837 22838 22833 + 22833 22838 22839 + 22840 22833 22839 + 22833 22840 22834 + 22718 22837 22719 + 22841 22837 22718 + 22837 22841 22842 + 22842 22838 22837 + 22839 22838 22842 + 22839 22842 22843 + 22843 22844 22839 + 22840 22839 22844 + 22844 22845 22840 + 22834 22840 22845 + 22841 22718 22725 + 22725 22846 22841 + 22842 22841 22846 + 22843 22842 22846 + 22846 22847 22843 + 22848 22843 22847 + 22849 22843 22848 + 22849 22844 22843 + 22845 22844 22849 + 22846 22725 22724 + 22724 22850 22846 + 22846 22850 22851 + 22851 22847 22846 + 22851 22852 22847 + 22852 22853 22847 + 22847 22853 22848 + 22850 22724 22854 + 22854 22855 22850 + 22855 22856 22850 + 22856 22851 22850 + 22856 22857 22851 + 22857 22852 22851 + 22729 22854 22724 + 22734 22854 22729 + 22855 22854 22734 + 22855 22734 22858 + 22858 22856 22855 + 22857 22856 22858 + 22857 22858 22859 + 22857 22859 22860 + 22857 22860 22852 + 22860 22861 22852 + 22853 22852 22861 + 22861 22862 22853 + 22853 22862 22848 + 22863 22858 22734 + 22858 22863 22859 + 22859 22863 22864 + 22859 22864 22865 + 22865 22860 22859 + 22866 22860 22865 + 22860 22866 22867 + 22867 22861 22860 + 22862 22861 22867 + 22733 22863 22734 + 22863 22733 22743 + 22864 22863 22743 + 22864 22743 22868 + 22868 22869 22864 + 22869 22865 22864 + 22866 22865 22869 + 22869 22870 22866 + 22866 22870 22867 + 22870 22871 22867 + 22862 22867 22871 + 22871 22872 22862 + 22862 22872 22848 + 22742 22868 22743 + 22868 22742 22770 + 22770 22873 22868 + 22868 22873 22869 + 22873 22874 22869 + 22874 22870 22869 + 22871 22870 22874 + 22875 22871 22874 + 22872 22871 22875 + 22875 22876 22872 + 22877 22872 22876 + 22872 22877 22848 + 22873 22770 22878 + 22878 22879 22873 + 22874 22873 22879 + 22879 22875 22874 + 22879 22880 22875 + 22880 22876 22875 + 22876 22880 22881 + 22881 22882 22876 + 22882 22877 22876 + 22883 22878 22770 + 22880 22878 22883 + 22879 22878 22880 + 22775 22883 22770 + 22884 22883 22775 + 22883 22884 22881 + 22883 22881 22880 + 22775 22774 22884 + 22780 22884 22774 + 22881 22884 22780 + 22780 22788 22881 + 22881 22788 22882 + 22787 22882 22788 + 22877 22882 22787 + 22787 22885 22877 + 22877 22885 22848 + 22885 22849 22848 + 22886 22849 22885 + 22886 22845 22849 + 22887 22845 22886 + 22845 22887 22834 + 22885 22787 22792 + 22792 22888 22885 + 22885 22888 22886 + 22886 22888 22889 + 22887 22886 22889 + 22887 22889 22890 + 22834 22887 22890 + 22834 22890 22891 + 22835 22834 22891 + 22891 22836 22835 + 22889 22888 22792 + 22792 22892 22889 + 22890 22889 22892 + 22893 22890 22892 + 22891 22890 22893 + 22894 22891 22893 + 22891 22894 22836 + 22894 22895 22836 + 22832 22836 22895 + 22791 22892 22792 + 22893 22892 22791 + 22797 22893 22791 + 22894 22893 22797 + 22797 22796 22894 + 22895 22894 22796 + 22802 22895 22796 + 22896 22895 22802 + 22895 22896 22832 + 22828 22832 22896 + 22816 22828 22896 + 22816 22897 22828 + 22828 22897 22823 + 22823 22897 22815 + 22802 22811 22896 + 22816 22896 22811 + 22815 22897 22816 + 22898 22756 22758 + 22898 22616 22756 + 22616 22898 22596 + 22596 22898 22597 + 22898 22758 22597 + 22899 22900 22901 + 22900 22899 22902 + 22903 22899 22901 + 22899 22903 22904 + 22904 22905 22899 + 22906 22899 22905 + 22899 22906 22902 + 22907 22903 22901 + 22903 22907 22908 + 22908 22909 22903 + 22903 22909 22904 + 22910 22904 22909 + 22905 22904 22910 + 22901 22911 22907 + 22907 22911 22912 + 22908 22907 22912 + 22913 22908 22912 + 22909 22908 22913 + 22909 22913 22914 + 22909 22914 22910 + 22911 22901 22915 + 22915 22916 22911 + 22917 22911 22916 + 22911 22917 22912 + 22918 22912 22917 + 22912 22918 22913 + 22915 22901 22919 + 22920 22915 22919 + 22916 22915 22920 + 22916 22920 22921 + 22916 22921 22922 + 22922 22917 22916 + 22917 22922 22923 + 22923 22918 22917 + 22901 22924 22919 + 22924 22925 22919 + 22919 22925 22926 + 22919 22926 22920 + 22927 22920 22926 + 22921 22920 22927 + 22927 22928 22921 + 22921 22928 22929 + 22922 22921 22929 + 22924 22902 22925 + 22930 22925 22902 + 22925 22930 22926 + 22926 22930 22931 + 22931 22932 22926 + 22926 22932 22933 + 22926 22933 22927 + 22934 22927 22933 + 22927 22934 22928 + 22902 22935 22930 + 22931 22930 22935 + 22935 22936 22931 + 22936 22937 22931 + 22937 22938 22931 + 22939 22931 22938 + 22931 22939 22932 + 22902 22906 22935 + 22906 22940 22935 + 22935 22940 22936 + 22940 22941 22936 + 22942 22936 22941 + 22936 22942 22943 + 22943 22937 22936 + 22940 22906 22905 + 22905 22944 22940 + 22941 22940 22944 + 22945 22941 22944 + 22942 22941 22945 + 22945 22946 22942 + 22942 22946 22947 + 22943 22942 22947 + 22905 22910 22944 + 22944 22910 22948 + 22948 22949 22944 + 22944 22949 22945 + 22950 22945 22949 + 22945 22950 22946 + 22946 22950 22951 + 22951 22952 22946 + 22946 22952 22947 + 22953 22948 22910 + 22954 22948 22953 + 22949 22948 22954 + 22949 22954 22950 + 22951 22950 22954 + 22955 22951 22954 + 22956 22951 22955 + 22952 22951 22956 + 22952 22956 22957 + 22957 22947 22952 + 22910 22914 22953 + 22914 22958 22953 + 22959 22953 22958 + 22953 22959 22960 + 22960 22961 22953 + 22953 22961 22954 + 22954 22961 22955 + 22962 22958 22914 + 22963 22958 22962 + 22958 22963 22959 + 22964 22959 22963 + 22960 22959 22964 + 22914 22913 22962 + 22965 22962 22913 + 22963 22962 22965 + 22965 22966 22963 + 22963 22966 22964 + 22967 22964 22966 + 22964 22967 22968 + 22968 22969 22964 + 22964 22969 22960 + 22913 22918 22965 + 22918 22970 22965 + 22971 22965 22970 + 22965 22971 22966 + 22966 22971 22967 + 22972 22967 22971 + 22968 22967 22972 + 22973 22970 22918 + 22974 22970 22973 + 22970 22974 22971 + 22971 22974 22972 + 22975 22972 22974 + 22972 22975 22976 + 22976 22977 22972 + 22972 22977 22968 + 22918 22923 22973 + 22973 22923 22978 + 22978 22979 22973 + 22980 22973 22979 + 22973 22980 22974 + 22974 22980 22975 + 22975 22980 22981 + 22981 22982 22975 + 22976 22975 22982 + 22983 22978 22923 + 22978 22983 22984 + 22984 22985 22978 + 22978 22985 22986 + 22986 22979 22978 + 22981 22979 22986 + 22979 22981 22980 + 22923 22922 22983 + 22929 22983 22922 + 22984 22983 22929 + 22929 22987 22984 + 22984 22987 22988 + 22988 22989 22984 + 22985 22984 22989 + 22989 22990 22985 + 22986 22985 22990 + 22929 22991 22987 + 22991 22992 22987 + 22987 22992 22993 + 22993 22988 22987 + 22991 22929 22994 + 22994 22995 22991 + 22996 22991 22995 + 22992 22991 22996 + 22996 22997 22992 + 22992 22997 22998 + 22998 22993 22992 + 22999 22994 22929 + 23000 22994 22999 + 23000 22995 22994 + 22995 23000 23001 + 23001 23002 22995 + 22995 23002 22996 + 22928 22999 22929 + 23003 22999 22928 + 23003 23004 22999 + 22999 23004 23000 + 23000 23004 23005 + 23005 23001 23000 + 23006 23001 23005 + 23002 23001 23006 + 22928 22934 23003 + 23003 22934 23007 + 23007 23008 23003 + 23008 23009 23003 + 23009 23010 23003 + 23004 23003 23010 + 23010 23005 23004 + 23011 23005 23010 + 23005 23011 23006 + 22933 23007 22934 + 23012 23007 22933 + 23007 23012 23013 + 23013 23008 23007 + 23014 23008 23013 + 23008 23014 23015 + 23015 23009 23008 + 23012 22933 22932 + 22932 22939 23012 + 23012 22939 23013 + 22939 23016 23013 + 23014 23013 23016 + 23016 23017 23014 + 23014 23017 23018 + 23015 23014 23018 + 23018 23019 23015 + 23020 23015 23019 + 23015 23020 23009 + 22938 23016 22939 + 23017 23016 22938 + 22938 23021 23017 + 23021 23022 23017 + 23017 23022 23023 + 23023 23018 23017 + 23023 23024 23018 + 23018 23024 23019 + 23025 23021 22938 + 23021 23025 23026 + 23022 23021 23026 + 23026 23027 23022 + 23022 23027 23023 + 23027 23028 23023 + 23028 23029 23023 + 23023 23029 23024 + 22937 23025 22938 + 23030 23025 22937 + 23025 23030 23031 + 23031 23026 23025 + 23027 23026 23031 + 23028 23027 23031 + 23028 23031 23032 + 23028 23032 23029 + 23032 23033 23029 + 23033 23024 23029 + 22937 22943 23030 + 23030 22943 23034 + 23034 23035 23030 + 23031 23030 23035 + 23031 23035 23032 + 23032 23035 23034 + 23033 23032 23034 + 23034 23036 23033 + 23037 23033 23036 + 23024 23033 23037 + 23038 23024 23037 + 23024 23038 23019 + 22947 23034 22943 + 23036 23034 22947 + 22947 23039 23036 + 23040 23036 23039 + 23040 23037 23036 + 23040 23041 23037 + 23037 23041 23042 + 23042 23043 23037 + 23037 23043 23038 + 22947 22957 23039 + 23039 22957 23044 + 23044 23045 23039 + 23039 23045 23040 + 23041 23040 23045 + 23045 23046 23041 + 23042 23041 23046 + 23046 23047 23042 + 23048 23042 23047 + 23043 23042 23048 + 23044 22957 22956 + 23049 23044 22956 + 23046 23044 23049 + 23045 23044 23046 + 22956 23050 23049 + 23050 23051 23049 + 23052 23049 23051 + 23049 23052 23053 + 23053 23047 23049 + 23049 23047 23046 + 22955 23050 22956 + 22955 23054 23050 + 23050 23054 23055 + 23055 23051 23050 + 23056 23051 23055 + 23051 23056 23052 + 23057 23052 23056 + 23053 23052 23057 + 23054 22955 22961 + 22961 22960 23054 + 23055 23054 22960 + 22960 22969 23055 + 23058 23055 22969 + 23055 23058 23056 + 23056 23058 23059 + 23059 23060 23056 + 23056 23060 23057 + 23061 23057 23060 + 23057 23061 23062 + 23057 23062 23053 + 22969 22968 23058 + 23059 23058 22968 + 22968 22977 23059 + 23063 23059 22977 + 23059 23063 23064 + 23064 23060 23059 + 23060 23064 23061 + 23061 23064 23065 + 23065 23066 23061 + 23062 23061 23066 + 23066 23067 23062 + 23053 23062 23067 + 22977 22976 23063 + 23063 22976 23068 + 23068 23069 23063 + 23064 23063 23069 + 23069 23065 23064 + 23065 23069 23070 + 23070 23071 23065 + 23065 23071 23072 + 23072 23066 23065 + 23067 23066 23072 + 22982 23068 22976 + 23068 22982 23073 + 23073 23074 23068 + 23068 23074 23070 + 23070 23069 23068 + 23073 22982 22981 + 22981 23075 23073 + 23073 23075 23076 + 23076 23077 23073 + 23074 23073 23077 + 23077 23078 23074 + 23070 23074 23078 + 23078 23079 23070 + 23071 23070 23079 + 22986 23075 22981 + 23075 22986 23080 + 23080 23076 23075 + 23076 23080 23081 + 23081 23082 23076 + 23076 23082 23083 + 23083 23077 23076 + 23078 23077 23083 + 22990 23080 22986 + 23081 23080 22990 + 22990 23084 23081 + 23081 23084 23085 + 23085 23086 23081 + 23082 23081 23086 + 23086 23087 23082 + 23083 23082 23087 + 23088 23084 22990 + 23084 23088 23089 + 23089 23085 23084 + 23085 23089 23090 + 23090 23091 23085 + 23085 23091 23092 + 23092 23086 23085 + 23087 23086 23092 + 22990 22989 23088 + 23088 22989 22988 + 22988 23093 23088 + 23088 23093 23094 + 23094 23089 23088 + 23090 23089 23094 + 23094 23095 23090 + 23090 23095 23096 + 23096 23097 23090 + 23091 23090 23097 + 23098 23093 22988 + 23093 23098 23099 + 23099 23094 23093 + 23094 23099 23100 + 23100 23095 23094 + 23095 23100 23101 + 23101 23096 23095 + 22988 22993 23098 + 23098 22993 22998 + 22998 23102 23098 + 23098 23102 23103 + 23103 23099 23098 + 23100 23099 23103 + 23103 23104 23100 + 23100 23104 23105 + 23105 23101 23100 + 23106 23101 23105 + 23096 23101 23106 + 23107 23102 22998 + 23102 23107 23108 + 23108 23103 23102 + 23103 23108 23109 + 23109 23104 23103 + 23104 23109 23110 + 23110 23105 23104 + 22998 23111 23107 + 23107 23111 23112 + 23112 23113 23107 + 23107 23113 23114 + 23114 23108 23107 + 23109 23108 23114 + 23111 22998 22997 + 22997 23115 23111 + 23112 23111 23115 + 23115 23116 23112 + 23117 23112 23116 + 23112 23117 23118 + 23118 23113 23112 + 23113 23118 23119 + 23119 23114 23113 + 23115 22997 22996 + 22996 23120 23115 + 23115 23120 23121 + 23121 23116 23115 + 23122 23116 23121 + 23116 23122 23117 + 23123 23117 23122 + 23118 23117 23123 + 23120 22996 23002 + 23002 23124 23120 + 23120 23124 23125 + 23125 23121 23120 + 23126 23121 23125 + 23121 23126 23122 + 23122 23126 23067 + 23067 23127 23122 + 23122 23127 23123 + 23006 23124 23002 + 23124 23006 23128 + 23128 23129 23124 + 23124 23129 23125 + 23130 23125 23129 + 23125 23130 23131 + 23125 23131 23126 + 23067 23126 23131 + 23131 23048 23067 + 23048 23053 23067 + 23132 23128 23006 + 23133 23128 23132 + 23128 23133 23134 + 23134 23129 23128 + 23129 23134 23130 + 23134 23135 23130 + 23131 23130 23135 + 23135 23048 23131 + 23048 23135 23043 + 23020 23132 23006 + 23019 23132 23020 + 23038 23132 23019 + 23132 23038 23133 + 23043 23133 23038 + 23134 23133 23043 + 23043 23135 23134 + 23006 23011 23020 + 23009 23020 23011 + 23011 23010 23009 + 23047 23053 23048 + 23072 23127 23067 + 23127 23072 23136 + 23136 23123 23127 + 23123 23136 23137 + 23137 23138 23123 + 23123 23138 23118 + 23139 23136 23072 + 23137 23136 23139 + 23139 23140 23137 + 23137 23140 23141 + 23141 23142 23137 + 23138 23137 23142 + 23142 23143 23138 + 23118 23138 23143 + 23143 23119 23118 + 23072 23071 23139 + 23079 23139 23071 + 23139 23079 23144 + 23144 23140 23139 + 23140 23144 23145 + 23145 23141 23140 + 23141 23145 23146 + 23146 23147 23141 + 23141 23147 23148 + 23148 23142 23141 + 23143 23142 23148 + 23144 23079 23078 + 23078 23149 23144 + 23144 23149 23150 + 23150 23145 23144 + 23146 23145 23150 + 23150 23151 23146 + 23146 23151 23152 + 23152 23153 23146 + 23147 23146 23153 + 23083 23149 23078 + 23149 23083 23154 + 23154 23150 23149 + 23150 23154 23155 + 23155 23151 23150 + 23151 23155 23156 + 23156 23152 23151 + 23087 23154 23083 + 23155 23154 23087 + 23087 23157 23155 + 23155 23157 23158 + 23158 23156 23155 + 23159 23156 23158 + 23152 23156 23159 + 23159 23160 23152 + 23152 23160 23161 + 23161 23153 23152 + 23092 23157 23087 + 23157 23092 23162 + 23162 23158 23157 + 23158 23162 23163 + 23163 23164 23158 + 23158 23164 23159 + 23159 23164 23165 + 23165 23166 23159 + 23160 23159 23166 + 23167 23162 23092 + 23163 23162 23167 + 23167 23168 23163 + 23163 23168 23169 + 23164 23163 23169 + 23169 23165 23164 + 23165 23169 23170 + 23170 23171 23165 + 23165 23171 23166 + 23092 23091 23167 + 23097 23167 23091 + 23167 23097 23172 + 23172 23168 23167 + 23168 23172 23169 + 23172 23170 23169 + 23172 23173 23170 + 23173 23106 23170 + 23106 23174 23170 + 23170 23174 23171 + 23172 23097 23096 + 23096 23173 23172 + 23106 23173 23096 + 23175 23171 23174 + 23171 23175 23176 + 23177 23171 23176 + 23171 23177 23166 + 23178 23166 23177 + 23178 23179 23166 + 23166 23179 23160 + 23180 23175 23174 + 23175 23180 23105 + 23105 23110 23175 + 23175 23110 23181 + 23181 23176 23175 + 23182 23176 23181 + 23176 23182 23177 + 23106 23180 23174 + 23105 23180 23106 + 23181 23110 23109 + 23109 23183 23181 + 23184 23181 23183 + 23181 23184 23182 + 23182 23184 23185 + 23185 23186 23182 + 23182 23186 23187 + 23182 23187 23177 + 23177 23187 23178 + 23114 23183 23109 + 23188 23183 23114 + 23183 23188 23184 + 23185 23184 23188 + 23188 23189 23185 + 23190 23185 23189 + 23185 23190 23191 + 23191 23186 23185 + 23186 23191 23178 + 23178 23187 23186 + 23114 23119 23188 + 23188 23119 23143 + 23143 23189 23188 + 23148 23189 23143 + 23189 23148 23190 + 23192 23190 23148 + 23191 23190 23192 + 23192 23193 23191 + 23191 23193 23178 + 23179 23178 23193 + 23193 23161 23179 + 23161 23160 23179 + 23148 23147 23192 + 23153 23192 23147 + 23192 23153 23161 + 23161 23193 23192 + 23194 23195 23196 + 23194 23197 23195 + 23198 23195 23197 + 23199 23194 23196 + 23194 23199 23200 + 23200 23201 23194 + 23194 23201 23202 + 23202 23197 23194 + 23203 23197 23202 + 23197 23203 23198 + 23204 23199 23196 + 23200 23199 23204 + 23204 23205 23200 + 23200 23205 23206 + 23206 23207 23200 + 23201 23200 23207 + 23207 23208 23201 + 23202 23201 23208 + 23204 23196 23209 + 23210 23204 23209 + 23204 23210 23211 + 23211 23205 23204 + 23205 23211 23212 + 23212 23206 23205 + 23209 23196 23213 + 23213 23214 23209 + 23214 23215 23209 + 23216 23209 23215 + 23216 23210 23209 + 23211 23210 23216 + 23216 23217 23211 + 23211 23217 23212 + 23196 23218 23213 + 23218 23198 23213 + 23198 23219 23213 + 23213 23219 23220 + 23220 23221 23213 + 23221 23222 23213 + 23214 23213 23222 + 23219 23198 23223 + 23223 23224 23219 + 23224 23220 23219 + 23224 23225 23220 + 23225 23226 23220 + 23221 23220 23226 + 23203 23223 23198 + 23227 23223 23203 + 23224 23223 23227 + 23227 23225 23224 + 23225 23227 23228 + 23228 23229 23225 + 23226 23225 23229 + 23229 23230 23226 + 23231 23226 23230 + 23226 23231 23221 + 23203 23232 23227 + 23227 23232 23233 + 23233 23228 23227 + 23234 23228 23233 + 23229 23228 23234 + 23234 23235 23229 + 23229 23235 23236 + 23236 23230 23229 + 23202 23232 23203 + 23232 23202 23237 + 23237 23233 23232 + 23233 23237 23238 + 23238 23239 23233 + 23233 23239 23234 + 23234 23239 23240 + 23240 23241 23234 + 23235 23234 23241 + 23208 23237 23202 + 23238 23237 23208 + 23208 23242 23238 + 23238 23242 23243 + 23243 23244 23238 + 23239 23238 23244 + 23244 23240 23239 + 23245 23242 23208 + 23242 23245 23246 + 23246 23243 23242 + 23243 23246 23247 + 23247 23248 23243 + 23243 23248 23249 + 23249 23244 23243 + 23240 23244 23249 + 23208 23207 23245 + 23245 23207 23206 + 23206 23250 23245 + 23245 23250 23251 + 23251 23246 23245 + 23247 23246 23251 + 23251 23252 23247 + 23247 23252 23253 + 23253 23254 23247 + 23248 23247 23254 + 23255 23250 23206 + 23250 23255 23256 + 23256 23251 23250 + 23251 23256 23257 + 23257 23252 23251 + 23252 23257 23258 + 23258 23253 23252 + 23206 23212 23255 + 23255 23212 23259 + 23259 23260 23255 + 23255 23260 23261 + 23261 23256 23255 + 23257 23256 23261 + 23261 23262 23257 + 23257 23262 23263 + 23263 23258 23257 + 23217 23259 23212 + 23264 23259 23217 + 23259 23264 23265 + 23265 23260 23259 + 23260 23265 23266 + 23266 23261 23260 + 23261 23266 23267 + 23267 23262 23261 + 23262 23267 23268 + 23268 23263 23262 + 23217 23269 23264 + 23270 23264 23269 + 23265 23264 23270 + 23270 23271 23265 + 23265 23271 23272 + 23272 23266 23265 + 23267 23266 23272 + 23269 23217 23216 + 23216 23273 23269 + 23269 23273 23274 + 23274 23275 23269 + 23269 23275 23270 + 23276 23270 23275 + 23270 23276 23277 + 23277 23271 23270 + 23273 23216 23215 + 23274 23273 23215 + 23274 23215 23214 + 23278 23274 23214 + 23274 23278 23279 + 23279 23275 23274 + 23275 23279 23276 + 23280 23276 23279 + 23277 23276 23280 + 23214 23281 23278 + 23279 23278 23281 + 23281 23282 23279 + 23279 23282 23280 + 23283 23280 23282 + 23280 23283 23284 + 23284 23285 23280 + 23280 23285 23277 + 23222 23281 23214 + 23281 23222 23286 + 23286 23282 23281 + 23282 23286 23283 + 23287 23283 23286 + 23284 23283 23287 + 23287 23288 23284 + 23284 23288 23289 + 23289 23290 23284 + 23285 23284 23290 + 23286 23222 23221 + 23221 23231 23286 + 23286 23231 23287 + 23230 23287 23231 + 23287 23230 23236 + 23236 23288 23287 + 23288 23236 23291 + 23291 23289 23288 + 23289 23291 23292 + 23292 23293 23289 + 23289 23293 23294 + 23294 23290 23289 + 23295 23290 23294 + 23290 23295 23285 + 23277 23285 23295 + 23296 23291 23236 + 23292 23291 23296 + 23296 23297 23292 + 23292 23297 23298 + 23298 23299 23292 + 23293 23292 23299 + 23299 23300 23293 + 23294 23293 23300 + 23236 23235 23296 + 23241 23296 23235 + 23296 23241 23301 + 23301 23297 23296 + 23297 23301 23302 + 23302 23298 23297 + 23298 23302 23303 + 23303 23304 23298 + 23298 23304 23305 + 23305 23299 23298 + 23301 23241 23240 + 23240 23306 23301 + 23301 23306 23307 + 23307 23302 23301 + 23303 23302 23307 + 23307 23308 23303 + 23303 23308 23309 + 23309 23310 23303 + 23304 23303 23310 + 23249 23306 23240 + 23306 23249 23311 + 23311 23307 23306 + 23307 23311 23312 + 23312 23308 23307 + 23308 23312 23313 + 23313 23314 23308 + 23308 23314 23309 + 23315 23311 23249 + 23312 23311 23315 + 23315 23316 23312 + 23312 23316 23317 + 23317 23313 23312 + 23318 23313 23317 + 23313 23318 23319 + 23319 23314 23313 + 23249 23248 23315 + 23254 23315 23248 + 23315 23254 23320 + 23320 23316 23315 + 23316 23320 23321 + 23321 23317 23316 + 23322 23317 23321 + 23317 23322 23318 + 23323 23318 23322 + 23319 23318 23323 + 23320 23254 23253 + 23253 23324 23320 + 23321 23320 23324 + 23324 23325 23321 + 23326 23321 23325 + 23321 23326 23322 + 23322 23326 23327 + 23327 23328 23322 + 23322 23328 23323 + 23329 23324 23253 + 23324 23329 23330 + 23330 23325 23324 + 23330 23331 23325 + 23325 23331 23326 + 23327 23326 23331 + 23253 23258 23329 + 23332 23329 23258 + 23330 23329 23332 + 23330 23332 23333 + 23331 23330 23333 + 23333 23334 23331 + 23331 23334 23327 + 23263 23332 23258 + 23335 23332 23263 + 23332 23335 23336 + 23336 23333 23332 + 23334 23333 23336 + 23336 23337 23334 + 23334 23337 23338 + 23338 23339 23334 + 23334 23339 23327 + 23263 23268 23335 + 23340 23335 23268 + 23335 23340 23341 + 23341 23336 23335 + 23337 23336 23341 + 23341 23342 23337 + 23338 23337 23342 + 23343 23338 23342 + 23344 23338 23343 + 23338 23344 23339 + 23345 23340 23268 + 23346 23340 23345 + 23340 23346 23347 + 23347 23341 23340 + 23341 23347 23342 + 23345 23268 23267 + 23267 23348 23345 + 23349 23345 23348 + 23345 23349 23346 + 23346 23349 23350 + 23350 23351 23346 + 23347 23346 23351 + 23272 23348 23267 + 23352 23348 23272 + 23348 23352 23349 + 23350 23349 23352 + 23352 23353 23350 + 23354 23350 23353 + 23350 23354 23355 + 23355 23351 23350 + 23272 23356 23352 + 23352 23356 23295 + 23295 23353 23352 + 23294 23353 23295 + 23353 23294 23354 + 23300 23354 23294 + 23355 23354 23300 + 23356 23272 23271 + 23271 23277 23356 + 23295 23356 23277 + 23300 23357 23355 + 23357 23300 23299 + 23305 23357 23299 + 23357 23305 23358 + 23358 23359 23357 + 23357 23359 23360 + 23360 23355 23357 + 23351 23355 23360 + 23360 23361 23351 + 23351 23361 23347 + 23361 23362 23347 + 23342 23347 23362 + 23363 23358 23305 + 23364 23358 23363 + 23358 23364 23365 + 23365 23359 23358 + 23359 23365 23366 + 23366 23360 23359 + 23361 23360 23366 + 23361 23366 23367 + 23367 23362 23361 + 23305 23304 23363 + 23310 23363 23304 + 23363 23310 23368 + 23368 23369 23363 + 23363 23369 23364 + 23370 23364 23369 + 23365 23364 23370 + 23368 23310 23309 + 23309 23371 23368 + 23368 23371 23372 + 23372 23373 23368 + 23369 23368 23373 + 23373 23374 23369 + 23369 23374 23370 + 23309 23375 23371 + 23371 23375 23376 + 23376 23377 23371 + 23371 23377 23372 + 23375 23309 23314 + 23314 23319 23375 + 23376 23375 23319 + 23319 23378 23376 + 23378 23379 23376 + 23380 23376 23379 + 23377 23376 23380 + 23377 23380 23381 + 23377 23381 23372 + 23323 23378 23319 + 23378 23323 23382 + 23378 23382 23383 + 23383 23379 23378 + 23384 23379 23383 + 23379 23384 23380 + 23380 23384 23385 + 23385 23386 23380 + 23380 23386 23381 + 23382 23323 23387 + 23387 23388 23382 + 23383 23382 23388 + 23388 23389 23383 + 23390 23383 23389 + 23383 23390 23384 + 23384 23390 23391 + 23391 23385 23384 + 23328 23387 23323 + 23392 23387 23328 + 23387 23392 23388 + 23389 23388 23392 + 23393 23389 23392 + 23389 23393 23394 + 23389 23394 23390 + 23391 23390 23394 + 23395 23391 23394 + 23396 23391 23395 + 23385 23391 23396 + 23328 23397 23392 + 23393 23392 23397 + 23398 23393 23397 + 23398 23399 23393 + 23399 23394 23393 + 23394 23399 23395 + 23400 23395 23399 + 23395 23400 23401 + 23395 23401 23396 + 23328 23327 23397 + 23397 23327 23402 + 23402 23403 23397 + 23398 23397 23403 + 23398 23403 23404 + 23405 23398 23404 + 23399 23398 23405 + 23399 23405 23400 + 23406 23400 23405 + 23401 23400 23406 + 23339 23402 23327 + 23407 23402 23339 + 23403 23402 23407 + 23407 23404 23403 + 23408 23404 23407 + 23405 23404 23408 + 23408 23406 23405 + 23409 23406 23408 + 23409 23410 23406 + 23406 23410 23401 + 23396 23401 23410 + 23411 23396 23410 + 23385 23396 23411 + 23339 23344 23407 + 23407 23344 23412 + 23412 23413 23407 + 23413 23414 23407 + 23414 23408 23407 + 23408 23414 23415 + 23408 23415 23409 + 23343 23412 23344 + 23416 23412 23343 + 23412 23416 23413 + 23416 23417 23413 + 23413 23417 23418 + 23413 23418 23415 + 23415 23414 23413 + 23416 23343 23419 + 23419 23420 23416 + 23417 23416 23420 + 23420 23421 23417 + 23421 23422 23417 + 23418 23417 23422 + 23422 23423 23418 + 23415 23418 23423 + 23409 23415 23423 + 23419 23343 23342 + 23342 23424 23419 + 23425 23419 23424 + 23420 23419 23425 + 23425 23426 23420 + 23420 23426 23427 + 23427 23421 23420 + 23362 23424 23342 + 23367 23424 23362 + 23424 23367 23425 + 23425 23367 23365 + 23365 23428 23425 + 23426 23425 23428 + 23428 23429 23426 + 23427 23426 23429 + 23429 23430 23427 + 23431 23427 23430 + 23421 23427 23431 + 23367 23366 23365 + 23370 23428 23365 + 23429 23428 23370 + 23370 23432 23429 + 23429 23432 23433 + 23433 23430 23429 + 23430 23433 23434 + 23430 23434 23431 + 23435 23431 23434 + 23421 23431 23435 + 23435 23422 23421 + 23422 23435 23423 + 23432 23370 23374 + 23374 23436 23432 + 23436 23437 23432 + 23437 23433 23432 + 23437 23438 23433 + 23438 23434 23433 + 23434 23438 23439 + 23439 23435 23434 + 23423 23435 23439 + 23439 23440 23423 + 23423 23440 23409 + 23374 23373 23436 + 23436 23373 23372 + 23372 23437 23436 + 23437 23372 23441 + 23438 23437 23441 + 23438 23441 23442 + 23442 23439 23438 + 23442 23440 23439 + 23440 23442 23410 + 23410 23409 23440 + 23441 23372 23381 + 23381 23411 23441 + 23442 23441 23411 + 23410 23442 23411 + 23386 23411 23381 + 23411 23386 23385 + 23443 23444 23445 + 23444 23443 23446 + 23444 23446 23447 + 23444 23447 23448 + 23449 23444 23448 + 23450 23443 23445 + 23443 23450 23451 + 23443 23451 23452 + 23443 23452 23446 + 23446 23452 23453 + 23446 23453 23454 + 23454 23447 23446 + 23448 23447 23454 + 23455 23450 23445 + 23450 23455 23456 + 23450 23456 23457 + 23450 23457 23451 + 23451 23457 23458 + 23451 23458 23459 + 23459 23452 23451 + 23452 23459 23453 + 23460 23455 23445 + 23455 23460 23461 + 23461 23462 23455 + 23462 23463 23455 + 23455 23463 23456 + 23445 23464 23460 + 23464 23465 23460 + 23460 23465 23466 + 23466 23467 23460 + 23460 23467 23461 + 23468 23461 23467 + 23462 23461 23468 + 23465 23464 23469 + 23469 23470 23465 + 23465 23470 23466 + 23470 23471 23466 + 23471 23472 23466 + 23467 23466 23472 + 23472 23473 23467 + 23467 23473 23468 + 23464 23474 23469 + 23475 23469 23474 + 23470 23469 23475 + 23475 23471 23470 + 23471 23475 23476 + 23476 23477 23471 + 23472 23471 23477 + 23477 23478 23472 + 23473 23472 23478 + 23479 23474 23464 + 23474 23479 23480 + 23480 23481 23474 + 23474 23481 23475 + 23475 23481 23482 + 23482 23476 23475 + 23483 23476 23482 + 23477 23476 23483 + 23464 23449 23479 + 23449 23448 23479 + 23480 23479 23448 + 23448 23484 23480 + 23480 23484 23485 + 23485 23486 23480 + 23481 23480 23486 + 23486 23482 23481 + 23482 23486 23487 + 23487 23488 23482 + 23482 23488 23483 + 23454 23484 23448 + 23484 23454 23489 + 23489 23485 23484 + 23485 23489 23490 + 23490 23491 23485 + 23485 23491 23487 + 23487 23486 23485 + 23492 23489 23454 + 23490 23489 23492 + 23492 23493 23490 + 23490 23493 23494 + 23494 23495 23490 + 23491 23490 23495 + 23495 23496 23491 + 23487 23491 23496 + 23454 23453 23492 + 23497 23492 23453 + 23492 23497 23498 + 23498 23493 23492 + 23493 23498 23499 + 23499 23494 23493 + 23453 23459 23497 + 23459 23458 23497 + 23458 23500 23497 + 23498 23497 23500 + 23500 23501 23498 + 23498 23501 23502 + 23502 23499 23498 + 23503 23499 23502 + 23494 23499 23503 + 23504 23500 23458 + 23500 23504 23505 + 23505 23501 23500 + 23501 23505 23506 + 23506 23502 23501 + 23502 23506 23507 + 23507 23508 23502 + 23502 23508 23503 + 23458 23509 23504 + 23510 23504 23509 + 23505 23504 23510 + 23510 23511 23505 + 23505 23511 23512 + 23512 23506 23505 + 23507 23506 23512 + 23457 23509 23458 + 23509 23457 23456 + 23456 23513 23509 + 23509 23513 23510 + 23514 23510 23513 + 23510 23514 23515 + 23515 23511 23510 + 23511 23515 23516 + 23516 23512 23511 + 23456 23463 23513 + 23463 23517 23513 + 23513 23517 23514 + 23518 23514 23517 + 23515 23514 23518 + 23518 23519 23515 + 23515 23519 23520 + 23520 23516 23515 + 23521 23516 23520 + 23512 23516 23521 + 23517 23463 23462 + 23462 23522 23517 + 23517 23522 23518 + 23523 23518 23522 + 23518 23523 23524 + 23524 23519 23518 + 23519 23524 23525 + 23525 23520 23519 + 23468 23522 23462 + 23522 23468 23523 + 23526 23523 23468 + 23524 23523 23526 + 23526 23527 23524 + 23524 23527 23528 + 23528 23525 23524 + 23529 23525 23528 + 23520 23525 23529 + 23529 23530 23520 + 23520 23530 23521 + 23468 23473 23526 + 23478 23526 23473 + 23526 23478 23531 + 23531 23527 23526 + 23527 23531 23532 + 23532 23528 23527 + 23528 23532 23533 + 23533 23534 23528 + 23528 23534 23529 + 23531 23478 23477 + 23477 23535 23531 + 23531 23535 23536 + 23536 23532 23531 + 23533 23532 23536 + 23536 23537 23533 + 23538 23533 23537 + 23538 23539 23533 + 23539 23534 23533 + 23529 23534 23539 + 23483 23535 23477 + 23535 23483 23540 + 23540 23536 23535 + 23536 23540 23541 + 23541 23537 23536 + 23542 23537 23541 + 23542 23538 23537 + 23543 23538 23542 + 23538 23543 23544 + 23539 23538 23544 + 23545 23540 23483 + 23541 23540 23545 + 23545 23546 23541 + 23541 23546 23547 + 23547 23548 23541 + 23548 23542 23541 + 23542 23548 23549 + 23542 23549 23543 + 23483 23488 23545 + 23550 23545 23488 + 23545 23550 23551 + 23551 23546 23545 + 23546 23551 23552 + 23552 23547 23546 + 23547 23552 23553 + 23553 23554 23547 + 23547 23554 23548 + 23488 23487 23550 + 23496 23550 23487 + 23551 23550 23496 + 23496 23555 23551 + 23551 23555 23556 + 23556 23552 23551 + 23553 23552 23556 + 23556 23557 23553 + 23553 23557 23558 + 23558 23559 23553 + 23554 23553 23559 + 23560 23555 23496 + 23555 23560 23561 + 23561 23556 23555 + 23556 23561 23562 + 23562 23557 23556 + 23557 23562 23563 + 23563 23558 23557 + 23496 23495 23560 + 23560 23495 23494 + 23494 23564 23560 + 23560 23564 23565 + 23565 23561 23560 + 23562 23561 23565 + 23565 23566 23562 + 23563 23562 23566 + 23503 23564 23494 + 23564 23503 23567 + 23567 23565 23564 + 23565 23567 23566 + 23567 23568 23566 + 23566 23568 23569 + 23569 23570 23566 + 23566 23570 23563 + 23571 23567 23503 + 23571 23572 23567 + 23572 23568 23567 + 23568 23572 23573 + 23573 23569 23568 + 23574 23569 23573 + 23570 23569 23574 + 23503 23508 23571 + 23575 23571 23508 + 23571 23575 23576 + 23576 23572 23571 + 23572 23576 23577 + 23577 23573 23572 + 23578 23573 23577 + 23573 23578 23574 + 23508 23507 23575 + 23579 23575 23507 + 23579 23580 23575 + 23580 23576 23575 + 23577 23576 23580 + 23580 23581 23577 + 23582 23577 23581 + 23577 23582 23578 + 23507 23583 23579 + 23584 23579 23583 + 23579 23584 23585 + 23585 23580 23579 + 23580 23585 23586 + 23586 23581 23580 + 23587 23581 23586 + 23581 23587 23582 + 23512 23583 23507 + 23521 23583 23512 + 23583 23521 23584 + 23588 23584 23521 + 23585 23584 23588 + 23588 23589 23585 + 23585 23589 23590 + 23590 23586 23585 + 23587 23586 23590 + 23521 23530 23588 + 23591 23588 23530 + 23588 23591 23592 + 23592 23589 23588 + 23589 23592 23593 + 23593 23594 23589 + 23589 23594 23590 + 23530 23529 23591 + 23539 23591 23529 + 23592 23591 23539 + 23539 23544 23592 + 23592 23544 23595 + 23595 23593 23592 + 23596 23593 23595 + 23596 23594 23593 + 23594 23596 23597 + 23597 23590 23594 + 23590 23597 23598 + 23590 23598 23587 + 23599 23595 23544 + 23600 23595 23599 + 23595 23600 23596 + 23597 23596 23600 + 23601 23597 23600 + 23598 23597 23601 + 23601 23602 23598 + 23587 23598 23602 + 23602 23603 23587 + 23603 23582 23587 + 23544 23543 23599 + 23599 23543 23549 + 23549 23604 23599 + 23605 23599 23604 + 23599 23605 23600 + 23600 23605 23606 + 23606 23607 23600 + 23600 23607 23601 + 23604 23549 23608 + 23609 23604 23608 + 23609 23610 23604 + 23604 23610 23605 + 23605 23610 23611 + 23611 23606 23605 + 23612 23606 23611 + 23606 23612 23607 + 23548 23608 23549 + 23554 23608 23548 + 23609 23608 23554 + 23554 23613 23609 + 23610 23609 23613 + 23613 23614 23610 + 23610 23614 23611 + 23559 23613 23554 + 23614 23613 23559 + 23559 23615 23614 + 23614 23615 23616 + 23616 23617 23614 + 23614 23617 23611 + 23615 23559 23558 + 23558 23618 23615 + 23616 23615 23618 + 23619 23616 23618 + 23620 23616 23619 + 23620 23617 23616 + 23617 23620 23621 + 23621 23611 23617 + 23618 23558 23563 + 23563 23622 23618 + 23618 23622 23623 + 23623 23624 23618 + 23618 23624 23619 + 23625 23619 23624 + 23625 23626 23619 + 23619 23626 23620 + 23621 23620 23626 + 23622 23563 23627 + 23627 23628 23622 + 23623 23622 23628 + 23629 23623 23628 + 23630 23623 23629 + 23630 23624 23623 + 23624 23630 23625 + 23631 23625 23630 + 23626 23625 23631 + 23570 23627 23563 + 23632 23627 23570 + 23632 23628 23627 + 23628 23632 23633 + 23633 23634 23628 + 23628 23634 23629 + 23570 23635 23632 + 23632 23635 23636 + 23637 23632 23636 + 23637 23633 23632 + 23638 23633 23637 + 23638 23634 23633 + 23634 23638 23639 + 23639 23629 23634 + 23574 23635 23570 + 23635 23574 23640 + 23640 23636 23635 + 23641 23636 23640 + 23636 23641 23642 + 23642 23643 23636 + 23636 23643 23637 + 23640 23574 23578 + 23578 23644 23640 + 23641 23640 23644 + 23644 23645 23641 + 23642 23641 23645 + 23645 23646 23642 + 23647 23642 23646 + 23642 23647 23648 + 23648 23643 23642 + 23603 23644 23578 + 23645 23644 23603 + 23603 23649 23645 + 23645 23649 23650 + 23650 23646 23645 + 23651 23646 23650 + 23646 23651 23647 + 23578 23582 23603 + 23649 23603 23602 + 23602 23652 23649 + 23650 23649 23652 + 23652 23653 23650 + 23653 23654 23650 + 23654 23651 23650 + 23647 23651 23654 + 23655 23647 23654 + 23648 23647 23655 + 23652 23602 23601 + 23601 23656 23652 + 23652 23656 23657 + 23657 23653 23652 + 23654 23653 23657 + 23654 23657 23658 + 23658 23659 23654 + 23654 23659 23655 + 23656 23601 23660 + 23660 23661 23656 + 23656 23661 23658 + 23658 23657 23656 + 23607 23660 23601 + 23662 23660 23607 + 23660 23662 23661 + 23661 23662 23663 + 23663 23664 23661 + 23661 23664 23658 + 23664 23665 23658 + 23665 23666 23658 + 23666 23659 23658 + 23607 23612 23662 + 23662 23612 23667 + 23667 23663 23662 + 23663 23667 23668 + 23665 23663 23668 + 23665 23664 23663 + 23612 23669 23667 + 23670 23667 23669 + 23668 23667 23670 + 23668 23670 23671 + 23671 23672 23668 + 23665 23668 23672 + 23665 23672 23673 + 23673 23666 23665 + 23659 23666 23673 + 23673 23655 23659 + 23611 23669 23612 + 23674 23669 23611 + 23669 23674 23670 + 23674 23675 23670 + 23675 23676 23670 + 23676 23671 23670 + 23677 23671 23676 + 23671 23677 23672 + 23672 23677 23678 + 23678 23673 23672 + 23655 23673 23678 + 23611 23621 23674 + 23674 23621 23679 + 23679 23675 23674 + 23675 23679 23680 + 23675 23680 23681 + 23681 23676 23675 + 23682 23676 23681 + 23676 23682 23677 + 23678 23677 23682 + 23648 23678 23682 + 23655 23678 23648 + 23683 23679 23621 + 23680 23679 23683 + 23683 23684 23680 + 23680 23684 23685 + 23685 23686 23680 + 23686 23681 23680 + 23682 23681 23686 + 23686 23687 23682 + 23682 23687 23648 + 23626 23683 23621 + 23631 23683 23626 + 23684 23683 23631 + 23684 23631 23688 + 23688 23685 23684 + 23685 23688 23629 + 23629 23639 23685 + 23685 23639 23689 + 23689 23686 23685 + 23687 23686 23689 + 23690 23687 23689 + 23687 23690 23648 + 23643 23648 23690 + 23630 23688 23631 + 23629 23688 23630 + 23690 23637 23643 + 23637 23690 23691 + 23637 23691 23638 + 23691 23639 23638 + 23691 23689 23639 + 23691 23690 23689 + 23692 23693 23694 + 23693 23695 23694 + 23696 23694 23695 + 23697 23694 23696 + 23694 23697 23692 + 23697 23698 23692 + 23699 23692 23698 + 23700 23692 23699 + 23695 23693 23701 + 23702 23695 23701 + 23695 23702 23703 + 23703 23704 23695 + 23695 23704 23696 + 23705 23702 23701 + 23703 23702 23705 + 23705 23706 23703 + 23703 23706 23707 + 23707 23708 23703 + 23704 23703 23708 + 23708 23709 23704 + 23696 23704 23709 + 23705 23701 23710 + 23711 23705 23710 + 23705 23711 23712 + 23712 23706 23705 + 23706 23712 23713 + 23713 23707 23706 + 23710 23701 23699 + 23699 23714 23710 + 23714 23715 23710 + 23715 23716 23710 + 23716 23717 23710 + 23718 23710 23717 + 23718 23711 23710 + 23701 23700 23699 + 23712 23711 23718 + 23718 23719 23712 + 23712 23719 23720 + 23720 23713 23712 + 23721 23713 23720 + 23707 23713 23721 + 23721 23722 23707 + 23707 23722 23723 + 23723 23708 23707 + 23709 23708 23723 + 23724 23719 23718 + 23719 23724 23725 + 23725 23720 23719 + 23720 23725 23726 + 23726 23727 23720 + 23720 23727 23721 + 23718 23728 23724 + 23724 23728 23729 + 23729 23730 23724 + 23724 23730 23731 + 23731 23725 23724 + 23726 23725 23731 + 23728 23718 23717 + 23729 23728 23717 + 23729 23717 23716 + 23732 23729 23716 + 23729 23732 23733 + 23733 23730 23729 + 23730 23733 23734 + 23734 23731 23730 + 23731 23734 23735 + 23735 23736 23731 + 23731 23736 23726 + 23737 23732 23716 + 23733 23732 23737 + 23737 23738 23733 + 23733 23738 23739 + 23739 23734 23733 + 23735 23734 23739 + 23740 23737 23716 + 23737 23740 23741 + 23741 23738 23737 + 23738 23741 23742 + 23742 23739 23738 + 23739 23742 23743 + 23743 23744 23739 + 23739 23744 23735 + 23716 23715 23740 + 23745 23740 23715 + 23741 23740 23745 + 23745 23746 23741 + 23741 23746 23747 + 23747 23742 23741 + 23743 23742 23747 + 23748 23745 23715 + 23745 23748 23749 + 23749 23746 23745 + 23746 23749 23750 + 23750 23747 23746 + 23747 23750 23751 + 23751 23752 23747 + 23747 23752 23743 + 23715 23714 23748 + 23753 23748 23714 + 23749 23748 23753 + 23753 23754 23749 + 23749 23754 23755 + 23755 23750 23749 + 23751 23750 23755 + 23756 23753 23714 + 23753 23756 23757 + 23757 23754 23753 + 23754 23757 23758 + 23758 23755 23754 + 23755 23758 23759 + 23759 23760 23755 + 23755 23760 23751 + 23714 23699 23756 + 23761 23756 23699 + 23757 23756 23761 + 23761 23762 23757 + 23757 23762 23763 + 23763 23758 23757 + 23759 23758 23763 + 23698 23761 23699 + 23761 23698 23764 + 23764 23762 23761 + 23762 23764 23765 + 23765 23763 23762 + 23763 23765 23766 + 23766 23767 23763 + 23763 23767 23759 + 23764 23698 23697 + 23697 23768 23764 + 23764 23768 23769 + 23769 23765 23764 + 23766 23765 23769 + 23769 23770 23766 + 23766 23770 23771 + 23771 23772 23766 + 23767 23766 23772 + 23696 23768 23697 + 23768 23696 23773 + 23773 23769 23768 + 23769 23773 23774 + 23774 23770 23769 + 23770 23774 23775 + 23775 23771 23770 + 23709 23773 23696 + 23774 23773 23709 + 23709 23776 23774 + 23774 23776 23777 + 23777 23775 23774 + 23778 23775 23777 + 23771 23775 23778 + 23778 23779 23771 + 23771 23779 23780 + 23780 23772 23771 + 23723 23776 23709 + 23776 23723 23781 + 23781 23777 23776 + 23777 23781 23782 + 23782 23783 23777 + 23777 23783 23778 + 23778 23783 23784 + 23784 23785 23778 + 23779 23778 23785 + 23786 23781 23723 + 23782 23781 23786 + 23786 23787 23782 + 23782 23787 23788 + 23788 23789 23782 + 23783 23782 23789 + 23789 23784 23783 + 23723 23722 23786 + 23790 23786 23722 + 23786 23790 23791 + 23791 23787 23786 + 23787 23791 23792 + 23792 23788 23787 + 23722 23721 23790 + 23793 23790 23721 + 23791 23790 23793 + 23793 23794 23791 + 23791 23794 23795 + 23795 23792 23791 + 23796 23792 23795 + 23788 23792 23796 + 23721 23727 23793 + 23797 23793 23727 + 23793 23797 23798 + 23798 23794 23793 + 23794 23798 23799 + 23799 23795 23794 + 23795 23799 23800 + 23800 23801 23795 + 23795 23801 23796 + 23727 23726 23797 + 23802 23797 23726 + 23798 23797 23802 + 23802 23803 23798 + 23798 23803 23804 + 23804 23799 23798 + 23800 23799 23804 + 23726 23736 23802 + 23805 23802 23736 + 23802 23805 23806 + 23806 23803 23802 + 23803 23806 23807 + 23807 23804 23803 + 23804 23807 23808 + 23808 23809 23804 + 23804 23809 23800 + 23736 23735 23805 + 23810 23805 23735 + 23806 23805 23810 + 23810 23811 23806 + 23806 23811 23812 + 23812 23807 23806 + 23808 23807 23812 + 23735 23744 23810 + 23813 23810 23744 + 23810 23813 23814 + 23814 23811 23810 + 23811 23814 23815 + 23815 23812 23811 + 23812 23815 23816 + 23816 23817 23812 + 23812 23817 23808 + 23744 23743 23813 + 23818 23813 23743 + 23814 23813 23818 + 23818 23819 23814 + 23814 23819 23820 + 23820 23815 23814 + 23816 23815 23820 + 23743 23752 23818 + 23821 23818 23752 + 23818 23821 23822 + 23822 23819 23818 + 23819 23822 23823 + 23823 23820 23819 + 23820 23823 23824 + 23824 23825 23820 + 23820 23825 23816 + 23752 23751 23821 + 23826 23821 23751 + 23822 23821 23826 + 23826 23827 23822 + 23822 23827 23828 + 23828 23823 23822 + 23824 23823 23828 + 23751 23760 23826 + 23829 23826 23760 + 23826 23829 23830 + 23830 23827 23826 + 23827 23830 23831 + 23831 23828 23827 + 23828 23831 23832 + 23832 23833 23828 + 23828 23833 23824 + 23760 23759 23829 + 23834 23829 23759 + 23830 23829 23834 + 23834 23835 23830 + 23830 23835 23836 + 23836 23831 23830 + 23832 23831 23836 + 23836 23837 23832 + 23838 23832 23837 + 23833 23832 23838 + 23759 23767 23834 + 23772 23834 23767 + 23834 23772 23780 + 23780 23835 23834 + 23835 23780 23839 + 23839 23836 23835 + 23836 23839 23840 + 23840 23837 23836 + 23837 23840 23841 + 23841 23842 23837 + 23837 23842 23838 + 23843 23839 23780 + 23840 23839 23843 + 23843 23844 23840 + 23840 23844 23845 + 23845 23841 23840 + 23846 23841 23845 + 23842 23841 23846 + 23780 23779 23843 + 23785 23843 23779 + 23843 23785 23847 + 23847 23844 23843 + 23844 23847 23848 + 23848 23849 23844 + 23844 23849 23845 + 23850 23845 23849 + 23851 23845 23850 + 23845 23851 23846 + 23847 23785 23784 + 23784 23852 23847 + 23847 23852 23853 + 23853 23848 23847 + 23854 23848 23853 + 23848 23854 23849 + 23849 23854 23850 + 23855 23850 23854 + 23856 23850 23855 + 23850 23856 23851 + 23857 23852 23784 + 23852 23857 23858 + 23858 23853 23852 + 23859 23853 23858 + 23853 23859 23854 + 23854 23859 23855 + 23860 23855 23859 + 23861 23855 23860 + 23855 23861 23856 + 23784 23789 23857 + 23857 23789 23788 + 23788 23862 23857 + 23857 23862 23863 + 23863 23858 23857 + 23864 23858 23863 + 23858 23864 23859 + 23859 23864 23860 + 23796 23862 23788 + 23862 23796 23865 + 23865 23863 23862 + 23866 23863 23865 + 23863 23866 23864 + 23860 23864 23866 + 23866 23867 23860 + 23868 23860 23867 + 23860 23868 23861 + 23869 23865 23796 + 23870 23865 23869 + 23865 23870 23866 + 23866 23870 23871 + 23871 23867 23866 + 23867 23871 23872 + 23867 23872 23868 + 23873 23868 23872 + 23861 23868 23873 + 23796 23801 23869 + 23874 23869 23801 + 23869 23874 23875 + 23875 23876 23869 + 23869 23876 23870 + 23871 23870 23876 + 23877 23871 23876 + 23872 23871 23877 + 23877 23878 23872 + 23872 23878 23873 + 23801 23800 23874 + 23879 23874 23800 + 23875 23874 23879 + 23879 23880 23875 + 23875 23880 23881 + 23882 23875 23881 + 23876 23875 23882 + 23882 23883 23876 + 23876 23883 23877 + 23800 23809 23879 + 23884 23879 23809 + 23879 23884 23885 + 23885 23880 23879 + 23880 23885 23886 + 23886 23881 23880 + 23809 23808 23884 + 23887 23884 23808 + 23885 23884 23887 + 23887 23888 23885 + 23886 23885 23888 + 23889 23886 23888 + 23890 23886 23889 + 23886 23890 23881 + 23808 23817 23887 + 23891 23887 23817 + 23887 23891 23892 + 23892 23888 23887 + 23888 23892 23893 + 23893 23894 23888 + 23888 23894 23889 + 23817 23816 23891 + 23895 23891 23816 + 23892 23891 23895 + 23895 23896 23892 + 23893 23892 23896 + 23896 23897 23893 + 23898 23893 23897 + 23893 23898 23894 + 23894 23898 23899 + 23899 23889 23894 + 23816 23825 23895 + 23900 23895 23825 + 23896 23895 23900 + 23900 23901 23896 + 23896 23901 23902 + 23902 23897 23896 + 23903 23897 23902 + 23897 23903 23898 + 23825 23824 23900 + 23904 23900 23824 + 23901 23900 23904 + 23904 23905 23901 + 23902 23901 23905 + 23906 23902 23905 + 23907 23902 23906 + 23902 23907 23903 + 23824 23833 23904 + 23838 23904 23833 + 23904 23838 23905 + 23905 23838 23908 + 23908 23909 23905 + 23905 23909 23906 + 23910 23906 23909 + 23906 23910 23911 + 23906 23911 23907 + 23912 23907 23911 + 23903 23907 23912 + 23842 23908 23838 + 23913 23908 23842 + 23909 23908 23913 + 23909 23913 23910 + 23910 23913 23914 + 23915 23910 23914 + 23911 23910 23915 + 23915 23916 23911 + 23911 23916 23912 + 23842 23914 23913 + 23846 23914 23842 + 23914 23846 23917 + 23917 23918 23914 + 23914 23918 23915 + 23919 23915 23918 + 23919 23916 23915 + 23916 23919 23920 + 23920 23912 23916 + 23921 23912 23920 + 23912 23921 23903 + 23898 23903 23921 + 23917 23846 23851 + 23851 23922 23917 + 23923 23917 23922 + 23918 23917 23923 + 23923 23924 23918 + 23918 23924 23919 + 23920 23919 23924 + 23924 23925 23920 + 23926 23920 23925 + 23920 23926 23921 + 23927 23922 23851 + 23922 23927 23928 + 23922 23928 23923 + 23923 23928 23929 + 23929 23930 23923 + 23924 23923 23930 + 23930 23925 23924 + 23851 23856 23927 + 23927 23856 23861 + 23861 23931 23927 + 23928 23927 23931 + 23931 23929 23928 + 23932 23929 23931 + 23929 23932 23933 + 23933 23930 23929 + 23925 23930 23933 + 23933 23934 23925 + 23925 23934 23926 + 23935 23926 23934 + 23921 23926 23935 + 23873 23931 23861 + 23931 23873 23932 + 23932 23873 23936 + 23936 23937 23932 + 23932 23937 23938 + 23933 23932 23938 + 23934 23933 23938 + 23938 23939 23934 + 23934 23939 23935 + 23878 23936 23873 + 23936 23878 23940 + 23941 23936 23940 + 23936 23941 23937 + 23937 23941 23942 + 23937 23942 23938 + 23943 23938 23942 + 23938 23943 23944 + 23944 23939 23938 + 23878 23877 23940 + 23940 23877 23883 + 23883 23945 23940 + 23941 23940 23945 + 23945 23946 23941 + 23941 23946 23942 + 23946 23947 23942 + 23942 23947 23943 + 23943 23947 23948 + 23944 23943 23948 + 23949 23945 23883 + 23945 23949 23947 + 23947 23946 23945 + 23883 23882 23949 + 23949 23882 23950 + 23950 23948 23949 + 23947 23949 23948 + 23881 23950 23882 + 23951 23950 23881 + 23950 23951 23948 + 23948 23951 23944 + 23944 23951 23890 + 23952 23944 23890 + 23939 23944 23952 + 23952 23935 23939 + 23953 23935 23952 + 23935 23953 23921 + 23881 23890 23951 + 23921 23953 23898 + 23953 23899 23898 + 23954 23899 23953 + 23889 23899 23954 + 23889 23954 23890 + 23890 23954 23952 + 23953 23952 23954 + 23955 23956 23957 + 23956 23958 23957 + 23958 23959 23957 + 23957 23959 23960 + 23960 23961 23957 + 23957 23961 23962 + 23963 23957 23962 + 23957 23963 23964 + 23964 23955 23957 + 23958 23956 23965 + 23965 23966 23958 + 23958 23966 23967 + 23959 23958 23967 + 23967 23968 23959 + 23959 23968 23960 + 23969 23960 23968 + 23961 23960 23969 + 23956 23970 23965 + 23971 23965 23970 + 23966 23965 23971 + 23971 23972 23966 + 23966 23972 23973 + 23973 23967 23966 + 23968 23967 23973 + 23973 23974 23968 + 23968 23974 23969 + 23975 23970 23956 + 23970 23975 23976 + 23976 23977 23970 + 23970 23977 23971 + 23971 23977 23978 + 23978 23979 23971 + 23972 23971 23979 + 23956 23980 23975 + 23981 23975 23980 + 23976 23975 23981 + 23981 23982 23976 + 23976 23982 23983 + 23983 23984 23976 + 23977 23976 23984 + 23984 23978 23977 + 23980 23964 23981 + 23964 23985 23981 + 23981 23985 23986 + 23986 23982 23981 + 23982 23986 23987 + 23987 23983 23982 + 23964 23988 23985 + 23986 23985 23988 + 23988 23989 23986 + 23986 23989 23990 + 23990 23987 23986 + 23991 23987 23990 + 23983 23987 23991 + 23964 23992 23988 + 23992 23993 23988 + 23988 23993 23989 + 23993 23994 23989 + 23989 23994 23995 + 23995 23990 23989 + 23996 23992 23964 + 23992 23996 23997 + 23992 23997 23993 + 23994 23993 23997 + 23997 23998 23994 + 23994 23998 23999 + 23999 23995 23994 + 24000 23995 23999 + 23990 23995 24000 + 23963 23996 23964 + 23996 23963 24001 + 24001 24002 23996 + 23996 24002 24003 + 23996 24003 23997 + 23997 24003 24004 + 24004 23998 23997 + 23998 24004 24005 + 24005 23999 23998 + 23963 24006 24001 + 24007 24001 24006 + 24002 24001 24007 + 24007 24008 24002 + 24002 24008 24004 + 24004 24003 24002 + 23962 24006 23963 + 24006 23962 24009 + 24009 24010 24006 + 24006 24010 24007 + 24007 24010 24011 + 24011 24012 24007 + 24008 24007 24012 + 24012 24013 24008 + 24004 24008 24013 + 24013 24005 24004 + 24009 23962 23961 + 23961 24014 24009 + 24009 24014 24015 + 24015 24016 24009 + 24010 24009 24016 + 24016 24011 24010 + 23969 24014 23961 + 24014 23969 24017 + 24017 24015 24014 + 24015 24017 24018 + 24018 24019 24015 + 24015 24019 24020 + 24020 24016 24015 + 24011 24016 24020 + 24021 24017 23969 + 24018 24017 24021 + 24021 24022 24018 + 24018 24022 24023 + 24023 24024 24018 + 24019 24018 24024 + 24024 24025 24019 + 24020 24019 24025 + 23969 23974 24021 + 24026 24021 23974 + 24021 24026 24027 + 24027 24022 24021 + 24022 24027 24028 + 24028 24023 24022 + 23974 23973 24026 + 24029 24026 23973 + 24027 24026 24029 + 24029 24030 24027 + 24027 24030 24031 + 24031 24028 24027 + 24032 24028 24031 + 24023 24028 24032 + 23973 23972 24029 + 23979 24029 23972 + 24029 23979 24033 + 24033 24030 24029 + 24030 24033 24034 + 24034 24031 24030 + 24031 24034 24035 + 24035 24036 24031 + 24031 24036 24032 + 24033 23979 23978 + 23978 24037 24033 + 24033 24037 24038 + 24038 24034 24033 + 24035 24034 24038 + 24038 24039 24035 + 24035 24039 24040 + 24040 24041 24035 + 24036 24035 24041 + 24042 24037 23978 + 24037 24042 24043 + 24043 24038 24037 + 24038 24043 24044 + 24044 24039 24038 + 24039 24044 24045 + 24045 24040 24039 + 23978 23984 24042 + 24042 23984 23983 + 23983 24046 24042 + 24042 24046 24047 + 24047 24043 24042 + 24044 24043 24047 + 24047 24048 24044 + 24044 24048 24049 + 24049 24045 24044 + 24050 24045 24049 + 24040 24045 24050 + 23991 24046 23983 + 24046 23991 24051 + 24051 24047 24046 + 24047 24051 24052 + 24052 24048 24047 + 24048 24052 24053 + 24053 24049 24048 + 24049 24053 24054 + 24054 24055 24049 + 24049 24055 24050 + 24056 24051 23991 + 24052 24051 24056 + 24056 24057 24052 + 24052 24057 24058 + 24058 24053 24052 + 24054 24053 24058 + 24058 24059 24054 + 24060 24054 24059 + 24055 24054 24060 + 23991 24061 24056 + 24062 24056 24061 + 24056 24062 24063 + 24063 24057 24056 + 24057 24063 24064 + 24064 24058 24057 + 24058 24064 24065 + 24065 24059 24058 + 23990 24061 23991 + 24000 24061 23990 + 24061 24000 24062 + 24066 24062 24000 + 24063 24062 24066 + 24066 24067 24063 + 24063 24067 24068 + 24068 24064 24063 + 24065 24064 24068 + 24000 24069 24066 + 24070 24066 24069 + 24066 24070 24071 + 24071 24067 24066 + 24067 24071 24072 + 24072 24068 24067 + 23999 24069 24000 + 24073 24069 23999 + 24069 24073 24070 + 24074 24070 24073 + 24071 24070 24074 + 24074 24075 24071 + 24071 24075 24076 + 24076 24072 24071 + 24077 24072 24076 + 24068 24072 24077 + 23999 24005 24073 + 24073 24005 24013 + 24013 24078 24073 + 24073 24078 24074 + 24079 24074 24078 + 24074 24079 24080 + 24080 24075 24074 + 24075 24080 24081 + 24081 24076 24075 + 24082 24078 24013 + 24078 24082 24079 + 24083 24079 24082 + 24080 24079 24083 + 24083 24084 24080 + 24080 24084 24085 + 24085 24081 24080 + 24086 24081 24085 + 24076 24081 24086 + 24013 24012 24082 + 24082 24012 24011 + 24011 24087 24082 + 24082 24087 24083 + 24088 24083 24087 + 24083 24088 24089 + 24089 24084 24083 + 24084 24089 24090 + 24090 24085 24084 + 24020 24087 24011 + 24087 24020 24088 + 24025 24088 24020 + 24089 24088 24025 + 24025 24091 24089 + 24089 24091 24092 + 24092 24090 24089 + 24093 24090 24092 + 24085 24090 24093 + 24093 24094 24085 + 24085 24094 24086 + 24095 24091 24025 + 24091 24095 24096 + 24096 24092 24091 + 24092 24096 24097 + 24097 24098 24092 + 24092 24098 24093 + 24025 24024 24095 + 24095 24024 24023 + 24023 24099 24095 + 24095 24099 24100 + 24100 24096 24095 + 24097 24096 24100 + 24100 24101 24097 + 24097 24101 24102 + 24102 24103 24097 + 24098 24097 24103 + 24032 24099 24023 + 24099 24032 24104 + 24104 24100 24099 + 24100 24104 24105 + 24105 24101 24100 + 24101 24105 24106 + 24106 24102 24101 + 24107 24104 24032 + 24105 24104 24107 + 24107 24108 24105 + 24105 24108 24109 + 24109 24106 24105 + 24110 24106 24109 + 24102 24106 24110 + 24032 24036 24107 + 24041 24107 24036 + 24107 24041 24111 + 24111 24108 24107 + 24108 24111 24112 + 24112 24109 24108 + 24113 24109 24112 + 24109 24113 24110 + 24114 24110 24113 + 24115 24110 24114 + 24110 24115 24102 + 24111 24041 24040 + 24040 24116 24111 + 24111 24116 24117 + 24117 24112 24111 + 24118 24112 24117 + 24112 24118 24113 + 24113 24118 24119 + 24119 24120 24113 + 24113 24120 24114 + 24050 24116 24040 + 24116 24050 24121 + 24121 24117 24116 + 24122 24117 24121 + 24117 24122 24118 + 24119 24118 24122 + 24122 24123 24119 + 24124 24119 24123 + 24124 24120 24119 + 24125 24121 24050 + 24126 24121 24125 + 24121 24126 24122 + 24122 24126 24127 + 24127 24123 24122 + 24128 24123 24127 + 24123 24128 24124 + 24129 24124 24128 + 24120 24124 24129 + 24050 24055 24125 + 24060 24125 24055 + 24060 24130 24125 + 24125 24130 24126 + 24126 24130 24131 + 24131 24127 24126 + 24132 24127 24131 + 24127 24132 24128 + 24130 24060 24133 + 24133 24131 24130 + 24134 24131 24133 + 24131 24134 24132 + 24135 24132 24134 + 24128 24132 24135 + 24135 24136 24128 + 24128 24136 24137 + 24137 24129 24128 + 24138 24133 24060 + 24139 24133 24138 + 24133 24139 24134 + 24134 24139 24140 + 24140 24141 24134 + 24134 24141 24135 + 24142 24135 24141 + 24136 24135 24142 + 24059 24138 24060 + 24143 24138 24059 + 24138 24143 24144 + 24144 24145 24138 + 24138 24145 24139 + 24140 24139 24145 + 24145 24146 24140 + 24147 24140 24146 + 24147 24141 24140 + 24141 24147 24142 + 24059 24065 24143 + 24148 24143 24065 + 24144 24143 24148 + 24148 24149 24144 + 24150 24144 24149 + 24145 24144 24150 + 24150 24146 24145 + 24146 24150 24151 + 24151 24152 24146 + 24146 24152 24147 + 24065 24153 24148 + 24153 24154 24148 + 24155 24148 24154 + 24149 24148 24155 + 24068 24153 24065 + 24077 24153 24068 + 24153 24077 24156 + 24156 24154 24153 + 24157 24154 24156 + 24154 24157 24155 + 24155 24157 24158 + 24159 24155 24158 + 24149 24155 24159 + 24160 24156 24077 + 24157 24156 24160 + 24160 24158 24157 + 24158 24160 24161 + 24161 24162 24158 + 24158 24162 24163 + 24163 24164 24158 + 24158 24164 24159 + 24077 24165 24160 + 24161 24160 24165 + 24165 24086 24161 + 24166 24161 24086 + 24162 24161 24166 + 24166 24167 24162 + 24163 24162 24167 + 24076 24165 24077 + 24086 24165 24076 + 24086 24094 24166 + 24168 24166 24094 + 24166 24168 24169 + 24169 24167 24166 + 24167 24169 24170 + 24170 24171 24167 + 24167 24171 24163 + 24094 24093 24168 + 24172 24168 24093 + 24169 24168 24172 + 24172 24173 24169 + 24170 24169 24173 + 24174 24170 24173 + 24175 24170 24174 + 24170 24175 24171 + 24171 24175 24176 + 24176 24163 24171 + 24093 24098 24172 + 24103 24172 24098 + 24172 24103 24177 + 24177 24173 24172 + 24173 24177 24178 + 24178 24179 24173 + 24173 24179 24174 + 24180 24174 24179 + 24180 24181 24174 + 24174 24181 24175 + 24176 24175 24181 + 24177 24103 24102 + 24102 24115 24177 + 24177 24115 24182 + 24182 24183 24177 + 24183 24178 24177 + 24184 24178 24183 + 24178 24184 24179 + 24179 24184 24180 + 24180 24184 24185 + 24186 24180 24185 + 24181 24180 24186 + 24114 24182 24115 + 24187 24182 24114 + 24182 24187 24188 + 24188 24183 24182 + 24188 24185 24183 + 24183 24185 24184 + 24189 24187 24114 + 24190 24187 24189 + 24188 24187 24190 + 24190 24191 24188 + 24185 24188 24191 + 24191 24192 24185 + 24185 24192 24186 + 24189 24114 24193 + 24193 24194 24189 + 24194 24195 24189 + 24195 24196 24189 + 24196 24190 24189 + 24197 24190 24196 + 24191 24190 24197 + 24120 24193 24114 + 24129 24193 24120 + 24194 24193 24129 + 24194 24129 24137 + 24137 24195 24194 + 24198 24195 24137 + 24195 24198 24197 + 24197 24196 24195 + 24198 24137 24136 + 24136 24199 24198 + 24197 24198 24199 + 24200 24197 24199 + 24200 24191 24197 + 24191 24200 24201 + 24201 24192 24191 + 24192 24201 24202 + 24202 24186 24192 + 24186 24202 24203 + 24186 24203 24181 + 24142 24199 24136 + 24199 24142 24204 + 24204 24205 24199 + 24199 24205 24200 + 24201 24200 24205 + 24205 24206 24201 + 24201 24206 24207 + 24207 24202 24201 + 24203 24202 24207 + 24207 24208 24203 + 24181 24203 24208 + 24208 24176 24181 + 24204 24142 24147 + 24147 24152 24204 + 24209 24204 24152 + 24204 24209 24206 + 24206 24205 24204 + 24152 24151 24209 + 24209 24151 24210 + 24210 24211 24209 + 24206 24209 24211 + 24211 24207 24206 + 24207 24211 24212 + 24212 24208 24207 + 24208 24212 24213 + 24213 24176 24208 + 24163 24176 24213 + 24213 24164 24163 + 24214 24210 24151 + 24214 24215 24210 + 24210 24215 24212 + 24212 24211 24210 + 24151 24150 24214 + 24214 24150 24149 + 24149 24216 24214 + 24215 24214 24216 + 24216 24217 24215 + 24215 24217 24213 + 24213 24212 24215 + 24159 24216 24149 + 24217 24216 24159 + 24217 24159 24164 + 24164 24213 24217 + 24218 24219 24220 + 24218 24221 24219 + 24222 24219 24221 + 24219 24222 24223 + 24220 24224 24218 + 24225 24218 24224 + 24225 24226 24218 + 24226 24221 24218 + 24227 24221 24226 + 24227 24222 24221 + 24228 24224 24220 + 24229 24224 24228 + 24224 24229 24225 + 24230 24225 24229 + 24225 24230 24231 + 24225 24231 24226 + 24228 24220 24232 + 24232 24233 24228 + 24234 24228 24233 + 24234 24229 24228 + 24235 24229 24234 + 24229 24235 24230 + 24236 24230 24235 + 24231 24230 24236 + 24232 24220 24223 + 24237 24232 24223 + 24238 24232 24237 + 24238 24233 24232 + 24233 24238 24239 + 24239 24240 24233 + 24233 24240 24234 + 24241 24234 24240 + 24234 24241 24235 + 24223 24242 24237 + 24242 24243 24237 + 24244 24237 24243 + 24244 24245 24237 + 24237 24245 24238 + 24238 24245 24246 + 24246 24239 24238 + 24247 24242 24223 + 24248 24242 24247 + 24242 24248 24249 + 24249 24243 24242 + 24250 24243 24249 + 24243 24250 24244 + 24251 24244 24250 + 24245 24244 24251 + 24223 24252 24247 + 24253 24247 24252 + 24248 24247 24253 + 24253 24254 24248 + 24249 24248 24254 + 24254 24255 24249 + 24256 24249 24255 + 24249 24256 24250 + 24252 24223 24257 + 24252 24257 24258 + 24258 24259 24252 + 24252 24259 24253 + 24260 24253 24259 + 24254 24253 24260 + 24257 24223 24222 + 24222 24261 24257 + 24257 24261 24262 + 24258 24257 24262 + 24263 24258 24262 + 24258 24263 24264 + 24264 24259 24258 + 24259 24264 24260 + 24222 24227 24261 + 24261 24227 24265 + 24265 24262 24261 + 24266 24262 24265 + 24262 24266 24263 + 24267 24263 24266 + 24264 24263 24267 + 24267 24268 24264 + 24260 24264 24268 + 24265 24227 24226 + 24269 24265 24226 + 24265 24269 24266 + 24266 24269 24270 + 24270 24271 24266 + 24266 24271 24272 + 24272 24267 24266 + 24273 24267 24272 + 24273 24268 24267 + 24226 24231 24269 + 24270 24269 24231 + 24231 24274 24270 + 24274 24275 24270 + 24276 24270 24275 + 24270 24276 24277 + 24277 24271 24270 + 24271 24277 24278 + 24278 24272 24271 + 24236 24274 24231 + 24236 24279 24274 + 24274 24279 24280 + 24280 24275 24274 + 24281 24275 24280 + 24275 24281 24276 + 24281 24282 24276 + 24277 24276 24282 + 24283 24279 24236 + 24279 24283 24284 + 24284 24280 24279 + 24285 24280 24284 + 24280 24285 24281 + 24286 24281 24285 + 24281 24286 24282 + 24287 24283 24236 + 24288 24283 24287 + 24283 24288 24289 + 24289 24284 24283 + 24290 24284 24289 + 24284 24290 24285 + 24235 24287 24236 + 24291 24287 24235 + 24287 24291 24288 + 24288 24291 24292 + 24292 24293 24288 + 24289 24288 24293 + 24293 24294 24289 + 24295 24289 24294 + 24289 24295 24290 + 24235 24241 24291 + 24241 24296 24291 + 24296 24292 24291 + 24246 24292 24296 + 24293 24292 24246 + 24246 24297 24293 + 24293 24297 24298 + 24298 24294 24293 + 24299 24294 24298 + 24294 24299 24295 + 24240 24296 24241 + 24296 24240 24239 + 24296 24239 24246 + 24300 24295 24299 + 24290 24295 24300 + 24300 24301 24290 + 24301 24285 24290 + 24301 24302 24285 + 24302 24286 24285 + 24303 24286 24302 + 24286 24303 24304 + 24286 24304 24282 + 24299 24305 24300 + 24306 24300 24305 + 24301 24300 24306 + 24306 24307 24301 + 24301 24307 24302 + 24307 24303 24302 + 24303 24307 24308 + 24308 24309 24303 + 24303 24309 24304 + 24310 24305 24299 + 24311 24305 24310 + 24305 24311 24306 + 24312 24306 24311 + 24307 24306 24312 + 24312 24308 24307 + 24312 24313 24308 + 24308 24313 24314 + 24314 24309 24308 + 24304 24309 24314 + 24299 24315 24310 + 24310 24315 24316 + 24316 24317 24310 + 24318 24310 24317 + 24310 24318 24311 + 24298 24315 24299 + 24315 24298 24319 + 24319 24316 24315 + 24316 24319 24320 + 24320 24321 24316 + 24316 24321 24322 + 24322 24317 24316 + 24323 24317 24322 + 24317 24323 24318 + 24324 24319 24298 + 24320 24319 24324 + 24324 24325 24320 + 24320 24325 24326 + 24326 24327 24320 + 24321 24320 24327 + 24327 24328 24321 + 24322 24321 24328 + 24298 24297 24324 + 24329 24324 24297 + 24324 24329 24330 + 24330 24325 24324 + 24325 24330 24331 + 24331 24326 24325 + 24297 24246 24329 + 24332 24329 24246 + 24330 24329 24332 + 24332 24333 24330 + 24330 24333 24334 + 24334 24331 24330 + 24335 24331 24334 + 24326 24331 24335 + 24336 24332 24246 + 24337 24332 24336 + 24332 24337 24333 + 24333 24337 24338 + 24338 24334 24333 + 24334 24338 24339 + 24339 24340 24334 + 24334 24340 24335 + 24245 24336 24246 + 24251 24336 24245 + 24251 24341 24336 + 24336 24341 24337 + 24337 24341 24342 + 24342 24338 24337 + 24339 24338 24342 + 24342 24343 24339 + 24344 24339 24343 + 24340 24339 24344 + 24341 24251 24345 + 24345 24342 24341 + 24342 24345 24346 + 24346 24343 24342 + 24343 24346 24347 + 24347 24348 24343 + 24343 24348 24344 + 24345 24251 24250 + 24250 24349 24345 + 24346 24345 24349 + 24349 24350 24346 + 24347 24346 24350 + 24350 24351 24347 + 24352 24347 24351 + 24348 24347 24352 + 24353 24349 24250 + 24349 24353 24354 + 24354 24350 24349 + 24350 24354 24355 + 24355 24351 24350 + 24351 24355 24356 + 24356 24357 24351 + 24351 24357 24352 + 24250 24256 24353 + 24358 24353 24256 + 24354 24353 24358 + 24358 24359 24354 + 24355 24354 24359 + 24359 24360 24355 + 24356 24355 24360 + 24360 24361 24356 + 24362 24356 24361 + 24357 24356 24362 + 24256 24363 24358 + 24364 24358 24363 + 24359 24358 24364 + 24365 24359 24364 + 24359 24365 24366 + 24366 24360 24359 + 24360 24366 24367 + 24367 24361 24360 + 24255 24363 24256 + 24368 24363 24255 + 24363 24368 24364 + 24369 24364 24368 + 24365 24364 24369 + 24369 24370 24365 + 24366 24365 24370 + 24370 24371 24366 + 24367 24366 24371 + 24255 24372 24368 + 24368 24372 24373 + 24373 24374 24368 + 24368 24374 24369 + 24375 24369 24374 + 24369 24375 24376 + 24376 24370 24369 + 24372 24255 24254 + 24254 24377 24372 + 24373 24372 24377 + 24377 24378 24373 + 24379 24373 24378 + 24374 24373 24379 + 24379 24380 24374 + 24374 24380 24375 + 24381 24375 24380 + 24376 24375 24381 + 24260 24377 24254 + 24377 24260 24382 + 24382 24378 24377 + 24378 24382 24383 + 24383 24384 24378 + 24378 24384 24379 + 24379 24384 24385 + 24385 24386 24379 + 24380 24379 24386 + 24268 24382 24260 + 24383 24382 24268 + 24268 24273 24383 + 24383 24273 24387 + 24387 24388 24383 + 24384 24383 24388 + 24388 24385 24384 + 24385 24388 24389 + 24389 24390 24385 + 24385 24390 24391 + 24391 24386 24385 + 24272 24387 24273 + 24392 24387 24272 + 24387 24392 24389 + 24389 24388 24387 + 24272 24278 24392 + 24392 24278 24393 + 24393 24394 24392 + 24389 24392 24394 + 24394 24395 24389 + 24395 24396 24389 + 24390 24389 24396 + 24396 24397 24390 + 24391 24390 24397 + 24393 24278 24277 + 24277 24398 24393 + 24399 24393 24398 + 24394 24393 24399 + 24394 24399 24400 + 24400 24395 24394 + 24401 24395 24400 + 24395 24401 24402 + 24402 24396 24395 + 24402 24397 24396 + 24282 24398 24277 + 24403 24398 24282 + 24398 24403 24399 + 24400 24399 24403 + 24403 24404 24400 + 24401 24400 24404 + 24404 24405 24401 + 24402 24401 24405 + 24282 24406 24403 + 24403 24406 24407 + 24407 24404 24403 + 24407 24405 24404 + 24405 24407 24408 + 24408 24409 24405 + 24405 24409 24402 + 24406 24282 24304 + 24304 24314 24406 + 24407 24406 24314 + 24408 24407 24314 + 24314 24313 24408 + 24313 24410 24408 + 24411 24408 24410 + 24408 24411 24409 + 24409 24411 24412 + 24412 24413 24409 + 24409 24413 24402 + 24413 24414 24402 + 24397 24402 24414 + 24415 24410 24313 + 24410 24415 24416 + 24410 24416 24411 + 24411 24416 24417 + 24417 24412 24411 + 24418 24412 24417 + 24413 24412 24418 + 24313 24312 24415 + 24415 24312 24311 + 24311 24419 24415 + 24416 24415 24419 + 24419 24420 24416 + 24416 24420 24417 + 24421 24417 24420 + 24417 24421 24422 + 24422 24423 24417 + 24417 24423 24418 + 24424 24419 24311 + 24419 24424 24420 + 24420 24424 24421 + 24323 24421 24424 + 24422 24421 24323 + 24323 24425 24422 + 24422 24425 24426 + 24426 24427 24422 + 24423 24422 24427 + 24311 24318 24424 + 24424 24318 24323 + 24322 24425 24323 + 24425 24322 24428 + 24428 24426 24425 + 24426 24428 24429 + 24429 24430 24426 + 24426 24430 24431 + 24431 24427 24426 + 24432 24427 24431 + 24427 24432 24423 + 24418 24423 24432 + 24328 24428 24322 + 24429 24428 24328 + 24328 24433 24429 + 24434 24429 24433 + 24430 24429 24434 + 24434 24435 24430 + 24430 24435 24436 + 24436 24431 24430 + 24437 24431 24436 + 24431 24437 24432 + 24438 24433 24328 + 24433 24438 24439 + 24439 24440 24433 + 24433 24440 24434 + 24441 24434 24440 + 24435 24434 24441 + 24328 24327 24438 + 24438 24327 24326 + 24326 24442 24438 + 24438 24442 24443 + 24443 24439 24438 + 24444 24439 24443 + 24440 24439 24444 + 24444 24445 24440 + 24440 24445 24441 + 24335 24442 24326 + 24442 24335 24446 + 24446 24443 24442 + 24443 24446 24447 + 24447 24448 24443 + 24443 24448 24444 + 24449 24444 24448 + 24445 24444 24449 + 24446 24335 24340 + 24340 24450 24446 + 24447 24446 24450 + 24450 24451 24447 + 24452 24447 24451 + 24448 24447 24452 + 24452 24453 24448 + 24448 24453 24449 + 24344 24450 24340 + 24450 24344 24454 + 24454 24451 24450 + 24451 24454 24455 + 24455 24456 24451 + 24451 24456 24452 + 24457 24452 24456 + 24453 24452 24457 + 24454 24344 24348 + 24348 24458 24454 + 24455 24454 24458 + 24458 24459 24455 + 24460 24455 24459 + 24456 24455 24460 + 24460 24461 24456 + 24456 24461 24457 + 24352 24458 24348 + 24458 24352 24462 + 24462 24459 24458 + 24459 24462 24463 + 24463 24464 24459 + 24459 24464 24460 + 24465 24460 24464 + 24461 24460 24465 + 24466 24462 24352 + 24463 24462 24466 + 24466 24467 24463 + 24468 24463 24467 + 24464 24463 24468 + 24468 24469 24464 + 24464 24469 24465 + 24352 24357 24466 + 24362 24466 24357 + 24466 24362 24470 + 24470 24467 24466 + 24467 24470 24471 + 24471 24472 24467 + 24467 24472 24468 + 24473 24468 24472 + 24469 24468 24473 + 24470 24362 24474 + 24474 24475 24470 + 24471 24470 24475 + 24475 24476 24471 + 24477 24471 24476 + 24472 24471 24477 + 24477 24478 24472 + 24472 24478 24473 + 24361 24474 24362 + 24479 24474 24361 + 24474 24479 24480 + 24480 24475 24474 + 24475 24480 24481 + 24481 24476 24475 + 24476 24481 24482 + 24482 24483 24476 + 24476 24483 24477 + 24361 24367 24479 + 24479 24367 24484 + 24484 24485 24479 + 24480 24479 24485 + 24485 24486 24480 + 24481 24480 24486 + 24486 24487 24481 + 24482 24481 24487 + 24371 24484 24367 + 24488 24484 24371 + 24484 24488 24489 + 24489 24485 24484 + 24485 24489 24490 + 24490 24486 24485 + 24486 24490 24491 + 24491 24487 24486 + 24371 24492 24488 + 24488 24492 24493 + 24493 24494 24488 + 24489 24488 24494 + 24494 24495 24489 + 24490 24489 24495 + 24492 24371 24370 + 24370 24376 24492 + 24492 24376 24496 + 24496 24493 24492 + 24497 24493 24496 + 24493 24497 24498 + 24498 24494 24493 + 24494 24498 24499 + 24499 24495 24494 + 24381 24496 24376 + 24500 24496 24381 + 24496 24500 24497 + 24497 24500 24501 + 24501 24502 24497 + 24498 24497 24502 + 24502 24503 24498 + 24499 24498 24503 + 24381 24504 24500 + 24500 24504 24505 + 24505 24501 24500 + 24506 24501 24505 + 24501 24506 24507 + 24507 24502 24501 + 24502 24507 24508 + 24508 24503 24502 + 24504 24381 24509 + 24509 24510 24504 + 24505 24504 24510 + 24510 24511 24505 + 24512 24505 24511 + 24505 24512 24506 + 24380 24509 24381 + 24386 24509 24380 + 24510 24509 24386 + 24386 24391 24510 + 24510 24391 24513 + 24513 24511 24510 + 24514 24511 24513 + 24511 24514 24512 + 24515 24512 24514 + 24506 24512 24515 + 24515 24516 24506 + 24507 24506 24516 + 24516 24517 24507 + 24508 24507 24517 + 24397 24513 24391 + 24414 24513 24397 + 24513 24414 24514 + 24514 24414 24413 + 24413 24518 24514 + 24514 24518 24515 + 24519 24515 24518 + 24515 24519 24520 + 24520 24516 24515 + 24516 24520 24521 + 24521 24517 24516 + 24418 24518 24413 + 24518 24418 24519 + 24432 24519 24418 + 24520 24519 24432 + 24432 24437 24520 + 24521 24520 24437 + 24437 24522 24521 + 24523 24521 24522 + 24517 24521 24523 + 24523 24524 24517 + 24517 24524 24508 + 24525 24508 24524 + 24503 24508 24525 + 24436 24522 24437 + 24522 24436 24526 + 24526 24527 24522 + 24522 24527 24523 + 24528 24523 24527 + 24524 24523 24528 + 24528 24529 24524 + 24524 24529 24525 + 24526 24436 24435 + 24435 24530 24526 + 24531 24526 24530 + 24527 24526 24531 + 24531 24532 24527 + 24527 24532 24528 + 24533 24528 24532 + 24529 24528 24533 + 24441 24530 24435 + 24530 24441 24534 + 24534 24535 24530 + 24530 24535 24531 + 24536 24531 24535 + 24532 24531 24536 + 24536 24537 24532 + 24532 24537 24533 + 24534 24441 24445 + 24445 24538 24534 + 24539 24534 24538 + 24535 24534 24539 + 24539 24540 24535 + 24535 24540 24536 + 24541 24536 24540 + 24537 24536 24541 + 24449 24538 24445 + 24538 24449 24542 + 24542 24543 24538 + 24538 24543 24539 + 24544 24539 24543 + 24540 24539 24544 + 24544 24545 24540 + 24540 24545 24541 + 24542 24449 24453 + 24453 24546 24542 + 24547 24542 24546 + 24543 24542 24547 + 24547 24548 24543 + 24543 24548 24544 + 24549 24544 24548 + 24545 24544 24549 + 24457 24546 24453 + 24546 24457 24550 + 24550 24551 24546 + 24546 24551 24547 + 24552 24547 24551 + 24548 24547 24552 + 24552 24553 24548 + 24548 24553 24549 + 24550 24457 24461 + 24461 24554 24550 + 24555 24550 24554 + 24551 24550 24555 + 24555 24556 24551 + 24551 24556 24552 + 24557 24552 24556 + 24553 24552 24557 + 24465 24554 24461 + 24554 24465 24558 + 24558 24559 24554 + 24554 24559 24555 + 24560 24555 24559 + 24556 24555 24560 + 24560 24561 24556 + 24556 24561 24557 + 24558 24465 24469 + 24469 24562 24558 + 24563 24558 24562 + 24559 24558 24563 + 24563 24564 24559 + 24559 24564 24560 + 24565 24560 24564 + 24565 24561 24560 + 24473 24562 24469 + 24562 24473 24566 + 24566 24567 24562 + 24562 24567 24563 + 24568 24563 24567 + 24568 24569 24563 + 24569 24564 24563 + 24564 24569 24565 + 24566 24473 24478 + 24478 24570 24566 + 24571 24566 24570 + 24571 24567 24566 + 24571 24572 24567 + 24567 24572 24568 + 24568 24572 24573 + 24573 24574 24568 + 24574 24569 24568 + 24574 24565 24569 + 24575 24570 24478 + 24576 24570 24575 + 24576 24577 24570 + 24570 24577 24571 + 24578 24571 24577 + 24572 24571 24578 + 24578 24573 24572 + 24574 24573 24578 + 24579 24574 24578 + 24574 24579 24565 + 24478 24477 24575 + 24575 24477 24483 + 24483 24580 24575 + 24580 24581 24575 + 24581 24576 24575 + 24582 24576 24581 + 24577 24576 24582 + 24582 24578 24577 + 24583 24580 24483 + 24584 24580 24583 + 24584 24581 24580 + 24581 24584 24585 + 24585 24582 24581 + 24582 24585 24586 + 24578 24582 24586 + 24483 24482 24583 + 24583 24482 24587 + 24587 24588 24583 + 24584 24583 24588 + 24588 24589 24584 + 24585 24584 24589 + 24585 24589 24590 + 24591 24585 24590 + 24585 24591 24586 + 24487 24587 24482 + 24592 24587 24487 + 24587 24592 24593 + 24593 24588 24587 + 24590 24588 24593 + 24590 24589 24588 + 24487 24491 24592 + 24592 24491 24594 + 24594 24595 24592 + 24593 24592 24595 + 24595 24596 24593 + 24590 24593 24596 + 24596 24597 24590 + 24591 24590 24597 + 24594 24491 24490 + 24490 24598 24594 + 24599 24594 24598 + 24594 24599 24600 + 24600 24595 24594 + 24595 24600 24601 + 24601 24596 24595 + 24602 24596 24601 + 24602 24597 24596 + 24591 24597 24602 + 24495 24598 24490 + 24603 24598 24495 + 24598 24603 24599 + 24599 24603 24604 + 24604 24605 24599 + 24600 24599 24605 + 24605 24606 24600 + 24601 24600 24606 + 24606 24607 24601 + 24602 24601 24607 + 24495 24499 24603 + 24603 24499 24608 + 24608 24604 24603 + 24609 24604 24608 + 24604 24609 24610 + 24610 24605 24604 + 24605 24610 24611 + 24611 24606 24605 + 24606 24611 24612 + 24612 24607 24606 + 24503 24608 24499 + 24525 24608 24503 + 24608 24525 24609 + 24609 24525 24529 + 24529 24613 24609 + 24610 24609 24613 + 24613 24614 24610 + 24611 24610 24614 + 24614 24615 24611 + 24612 24611 24615 + 24533 24613 24529 + 24613 24533 24616 + 24616 24614 24613 + 24614 24616 24617 + 24617 24615 24614 + 24615 24617 24618 + 24618 24619 24615 + 24615 24619 24612 + 24616 24533 24537 + 24537 24620 24616 + 24617 24616 24620 + 24620 24621 24617 + 24617 24621 24622 + 24622 24618 24617 + 24622 24623 24618 + 24623 24624 24618 + 24619 24618 24624 + 24541 24620 24537 + 24620 24541 24625 + 24625 24621 24620 + 24621 24625 24626 + 24626 24622 24621 + 24622 24626 24627 + 24627 24623 24622 + 24623 24627 24628 + 24628 24586 24623 + 24586 24624 24623 + 24625 24541 24545 + 24545 24629 24625 + 24626 24625 24629 + 24629 24630 24626 + 24630 24631 24626 + 24631 24627 24626 + 24628 24627 24631 + 24632 24628 24631 + 24628 24632 24578 + 24586 24628 24578 + 24549 24629 24545 + 24629 24549 24633 + 24633 24630 24629 + 24630 24633 24634 + 24634 24631 24630 + 24631 24634 24632 + 24632 24634 24635 + 24579 24632 24635 + 24632 24579 24578 + 24633 24549 24553 + 24553 24636 24633 + 24634 24633 24636 + 24636 24635 24634 + 24637 24635 24636 + 24635 24637 24579 + 24579 24637 24638 + 24579 24638 24565 + 24565 24638 24561 + 24557 24636 24553 + 24637 24636 24557 + 24637 24557 24561 + 24561 24638 24637 + 24639 24624 24586 + 24624 24639 24619 + 24619 24639 24640 + 24640 24612 24619 + 24640 24641 24612 + 24641 24607 24612 + 24586 24642 24639 + 24642 24640 24639 + 24642 24643 24640 + 24643 24641 24640 + 24643 24602 24641 + 24607 24641 24602 + 24643 24642 24586 + 24591 24643 24586 + 24643 24591 24602 + 24644 24645 24646 + 24647 24645 24644 + 24648 24645 24647 + 24645 24648 24649 + 24649 24650 24645 + 24651 24644 24646 + 24652 24644 24651 + 24644 24652 24653 + 24644 24653 24647 + 24654 24647 24653 + 24655 24647 24654 + 24647 24655 24648 + 24646 24656 24651 + 24656 24657 24651 + 24657 24658 24651 + 24658 24659 24651 + 24660 24651 24659 + 24660 24661 24651 + 24651 24661 24652 + 24662 24656 24646 + 24656 24662 24663 + 24657 24656 24663 + 24664 24657 24663 + 24665 24657 24664 + 24657 24665 24666 + 24666 24658 24657 + 24646 24667 24662 + 24668 24662 24667 + 24663 24662 24668 + 24668 24669 24663 + 24663 24669 24664 + 24669 24670 24664 + 24665 24664 24670 + 24670 24671 24665 + 24666 24665 24671 + 24646 24672 24667 + 24667 24672 24673 + 24673 24674 24667 + 24667 24674 24668 + 24675 24672 24646 + 24672 24675 24676 + 24672 24676 24673 + 24676 24677 24673 + 24678 24673 24677 + 24673 24678 24679 + 24679 24674 24673 + 24668 24674 24679 + 24650 24675 24646 + 24675 24650 24649 + 24675 24649 24680 + 24680 24676 24675 + 24676 24680 24681 + 24682 24676 24681 + 24676 24682 24677 + 24682 24683 24677 + 24684 24677 24683 + 24677 24684 24678 + 24648 24680 24649 + 24680 24648 24655 + 24681 24680 24655 + 24685 24681 24655 + 24682 24681 24685 + 24685 24686 24682 + 24683 24682 24686 + 24686 24687 24683 + 24688 24683 24687 + 24688 24684 24683 + 24689 24685 24655 + 24690 24685 24689 + 24686 24685 24690 + 24690 24691 24686 + 24686 24691 24687 + 24691 24692 24687 + 24693 24687 24692 + 24687 24693 24688 + 24654 24689 24655 + 24654 24694 24689 + 24689 24694 24690 + 24695 24690 24694 + 24691 24690 24695 + 24695 24696 24691 + 24691 24696 24697 + 24697 24692 24691 + 24698 24692 24697 + 24692 24698 24693 + 24694 24654 24699 + 24699 24700 24694 + 24694 24700 24695 + 24701 24695 24700 + 24695 24701 24702 + 24702 24696 24695 + 24696 24702 24703 + 24703 24697 24696 + 24699 24654 24653 + 24653 24704 24699 + 24705 24699 24704 + 24699 24705 24706 + 24706 24700 24699 + 24700 24706 24701 + 24707 24701 24706 + 24702 24701 24707 + 24708 24704 24653 + 24709 24704 24708 + 24704 24709 24705 + 24710 24705 24709 + 24706 24705 24710 + 24653 24652 24708 + 24708 24652 24711 + 24711 24712 24708 + 24713 24708 24712 + 24708 24713 24709 + 24652 24661 24711 + 24714 24711 24661 + 24711 24714 24715 + 24715 24716 24711 + 24711 24716 24717 + 24717 24712 24711 + 24718 24712 24717 + 24712 24718 24713 + 24661 24660 24714 + 24719 24714 24660 + 24715 24714 24719 + 24719 24720 24715 + 24715 24720 24721 + 24721 24722 24715 + 24716 24715 24722 + 24660 24723 24719 + 24723 24724 24719 + 24725 24719 24724 + 24719 24725 24726 + 24726 24720 24719 + 24720 24726 24727 + 24727 24721 24720 + 24659 24723 24660 + 24723 24659 24728 + 24723 24728 24729 + 24729 24724 24723 + 24724 24729 24730 + 24730 24731 24724 + 24724 24731 24725 + 24728 24659 24658 + 24658 24732 24728 + 24728 24732 24733 + 24733 24729 24728 + 24730 24729 24733 + 24733 24734 24730 + 24730 24734 24735 + 24735 24736 24730 + 24731 24730 24736 + 24666 24732 24658 + 24732 24666 24737 + 24737 24738 24732 + 24732 24738 24733 + 24739 24733 24738 + 24739 24734 24733 + 24734 24739 24740 + 24740 24741 24734 + 24734 24741 24735 + 24666 24671 24737 + 24671 24742 24737 + 24743 24737 24742 + 24743 24738 24737 + 24738 24743 24739 + 24739 24743 24744 + 24740 24739 24744 + 24744 24745 24740 + 24746 24740 24745 + 24741 24740 24746 + 24742 24671 24747 + 24748 24742 24747 + 24744 24742 24748 + 24742 24744 24743 + 24747 24671 24670 + 24747 24670 24669 + 24669 24749 24747 + 24747 24749 24750 + 24750 24748 24747 + 24748 24750 24751 + 24752 24748 24751 + 24748 24752 24744 + 24744 24752 24753 + 24753 24745 24744 + 24669 24668 24749 + 24668 24754 24749 + 24749 24754 24755 + 24755 24750 24749 + 24750 24755 24751 + 24754 24668 24679 + 24679 24755 24754 + 24755 24679 24678 + 24756 24755 24678 + 24755 24756 24751 + 24751 24756 24757 + 24757 24758 24751 + 24751 24758 24753 + 24753 24752 24751 + 24756 24678 24684 + 24684 24757 24756 + 24759 24757 24684 + 24757 24759 24760 + 24760 24758 24757 + 24758 24760 24761 + 24761 24753 24758 + 24753 24761 24745 + 24761 24762 24745 + 24745 24762 24746 + 24684 24688 24759 + 24763 24759 24688 + 24760 24759 24763 + 24763 24764 24760 + 24760 24764 24765 + 24765 24761 24760 + 24762 24761 24765 + 24765 24766 24762 + 24746 24762 24766 + 24688 24693 24763 + 24767 24763 24693 + 24764 24763 24767 + 24767 24768 24764 + 24764 24768 24765 + 24768 24769 24765 + 24766 24765 24769 + 24770 24766 24769 + 24766 24770 24771 + 24771 24746 24766 + 24741 24746 24771 + 24693 24698 24767 + 24767 24698 24772 + 24772 24773 24767 + 24768 24767 24773 + 24773 24774 24768 + 24769 24768 24774 + 24774 24775 24769 + 24775 24770 24769 + 24697 24772 24698 + 24776 24772 24697 + 24772 24776 24777 + 24777 24773 24772 + 24773 24777 24778 + 24778 24774 24773 + 24774 24778 24779 + 24779 24775 24774 + 24770 24775 24779 + 24776 24697 24703 + 24776 24703 24780 + 24780 24781 24776 + 24781 24777 24776 + 24778 24777 24781 + 24781 24782 24778 + 24778 24782 24783 + 24779 24778 24783 + 24703 24784 24780 + 24780 24784 24785 + 24786 24780 24785 + 24781 24780 24786 + 24787 24781 24786 + 24781 24787 24782 + 24782 24787 24788 + 24788 24783 24782 + 24784 24703 24702 + 24702 24789 24784 + 24789 24790 24784 + 24790 24785 24784 + 24785 24790 24791 + 24791 24792 24785 + 24786 24785 24792 + 24792 24793 24786 + 24787 24786 24793 + 24788 24787 24793 + 24707 24789 24702 + 24790 24789 24707 + 24790 24707 24794 + 24794 24791 24790 + 24794 24795 24791 + 24792 24791 24795 + 24796 24792 24795 + 24793 24792 24796 + 24796 24797 24793 + 24793 24797 24788 + 24797 24798 24788 + 24783 24788 24798 + 24794 24707 24706 + 24799 24794 24706 + 24799 24800 24794 + 24800 24795 24794 + 24795 24800 24801 + 24801 24796 24795 + 24801 24802 24796 + 24802 24797 24796 + 24798 24797 24802 + 24802 24803 24798 + 24783 24798 24803 + 24706 24804 24799 + 24799 24804 24805 + 24806 24799 24805 + 24799 24806 24807 + 24807 24800 24799 + 24800 24807 24808 + 24808 24801 24800 + 24710 24804 24706 + 24710 24805 24804 + 24805 24710 24809 + 24809 24810 24805 + 24805 24810 24811 + 24811 24806 24805 + 24807 24806 24811 + 24811 24812 24807 + 24808 24807 24812 + 24809 24710 24709 + 24709 24813 24809 + 24814 24809 24813 + 24809 24814 24815 + 24815 24810 24809 + 24811 24810 24815 + 24816 24811 24815 + 24812 24811 24816 + 24817 24813 24709 + 24813 24817 24818 + 24818 24819 24813 + 24813 24819 24814 + 24820 24814 24819 + 24815 24814 24820 + 24820 24821 24815 + 24815 24821 24816 + 24709 24713 24817 + 24817 24713 24718 + 24718 24822 24817 + 24818 24817 24822 + 24822 24823 24818 + 24824 24818 24823 + 24819 24818 24824 + 24824 24825 24819 + 24819 24825 24820 + 24826 24820 24825 + 24820 24826 24821 + 24827 24822 24718 + 24823 24822 24827 + 24827 24828 24823 + 24823 24828 24829 + 24829 24830 24823 + 24823 24830 24824 + 24718 24831 24827 + 24832 24827 24831 + 24828 24827 24832 + 24832 24833 24828 + 24829 24828 24833 + 24717 24831 24718 + 24831 24717 24834 + 24834 24835 24831 + 24831 24835 24832 + 24836 24832 24835 + 24833 24832 24836 + 24837 24834 24717 + 24838 24834 24837 + 24835 24834 24838 + 24838 24839 24835 + 24835 24839 24836 + 24717 24716 24837 + 24716 24840 24837 + 24840 24841 24837 + 24842 24837 24841 + 24837 24842 24843 + 24843 24844 24837 + 24837 24844 24838 + 24722 24840 24716 + 24840 24722 24845 + 24845 24846 24840 + 24840 24846 24847 + 24847 24841 24840 + 24848 24841 24847 + 24841 24848 24842 + 24849 24842 24848 + 24843 24842 24849 + 24845 24722 24721 + 24721 24850 24845 + 24845 24850 24851 + 24851 24852 24845 + 24846 24845 24852 + 24852 24853 24846 + 24847 24846 24853 + 24854 24850 24721 + 24850 24854 24855 + 24855 24851 24850 + 24851 24855 24856 + 24856 24857 24851 + 24851 24857 24858 + 24858 24852 24851 + 24853 24852 24858 + 24721 24727 24854 + 24854 24727 24859 + 24859 24860 24854 + 24855 24854 24860 + 24860 24861 24855 + 24856 24855 24861 + 24859 24727 24726 + 24726 24862 24859 + 24863 24859 24862 + 24859 24863 24864 + 24864 24860 24859 + 24860 24864 24865 + 24865 24861 24860 + 24866 24862 24726 + 24867 24862 24866 + 24862 24867 24863 + 24868 24863 24867 + 24864 24863 24868 + 24868 24869 24864 + 24864 24869 24870 + 24870 24865 24864 + 24726 24725 24866 + 24871 24866 24725 + 24872 24866 24871 + 24866 24872 24867 + 24725 24731 24871 + 24736 24871 24731 + 24873 24871 24736 + 24871 24873 24872 + 24874 24872 24873 + 24867 24872 24874 + 24874 24875 24867 + 24867 24875 24876 + 24876 24877 24867 + 24877 24868 24867 + 24736 24878 24873 + 24873 24878 24879 + 24879 24880 24873 + 24873 24880 24874 + 24878 24736 24735 + 24735 24881 24878 + 24879 24878 24881 + 24882 24879 24881 + 24883 24879 24882 + 24880 24879 24883 + 24880 24883 24884 + 24884 24885 24880 + 24880 24885 24874 + 24771 24881 24735 + 24881 24771 24886 + 24886 24887 24881 + 24881 24887 24882 + 24771 24735 24741 + 24770 24886 24771 + 24888 24886 24770 + 24888 24887 24886 + 24887 24888 24889 + 24889 24882 24887 + 24882 24889 24890 + 24890 24891 24882 + 24882 24891 24883 + 24883 24891 24892 + 24892 24884 24883 + 24770 24893 24888 + 24888 24893 24894 + 24894 24889 24888 + 24890 24889 24894 + 24894 24895 24890 + 24890 24895 24896 + 24896 24897 24890 + 24891 24890 24897 + 24779 24893 24770 + 24893 24779 24898 + 24898 24894 24893 + 24895 24894 24898 + 24898 24899 24895 + 24895 24899 24900 + 24900 24896 24895 + 24901 24896 24900 + 24896 24901 24902 + 24902 24897 24896 + 24903 24898 24779 + 24899 24898 24903 + 24903 24904 24899 + 24900 24899 24904 + 24904 24905 24900 + 24905 24906 24900 + 24907 24900 24906 + 24900 24907 24901 + 24783 24903 24779 + 24803 24903 24783 + 24904 24903 24803 + 24803 24908 24904 + 24904 24908 24909 + 24909 24905 24904 + 24909 24910 24905 + 24905 24910 24911 + 24911 24906 24905 + 24912 24906 24911 + 24906 24912 24907 + 24908 24803 24802 + 24802 24913 24908 + 24914 24908 24913 + 24914 24909 24908 + 24909 24914 24915 + 24910 24909 24915 + 24910 24915 24916 + 24916 24911 24910 + 24917 24911 24916 + 24911 24917 24912 + 24913 24802 24801 + 24801 24808 24913 + 24913 24808 24918 + 24918 24914 24913 + 24914 24918 24919 + 24915 24914 24919 + 24915 24919 24916 + 24919 24920 24916 + 24921 24916 24920 + 24916 24921 24917 + 24922 24917 24921 + 24912 24917 24922 + 24918 24808 24812 + 24812 24923 24918 + 24923 24919 24918 + 24919 24923 24924 + 24920 24919 24924 + 24921 24920 24924 + 24924 24925 24921 + 24921 24925 24926 + 24926 24922 24921 + 24923 24812 24816 + 24923 24816 24927 + 24927 24924 24923 + 24925 24924 24927 + 24927 24928 24925 + 24925 24928 24929 + 24929 24926 24925 + 24926 24929 24930 + 24931 24926 24930 + 24922 24926 24931 + 24821 24927 24816 + 24928 24927 24821 + 24821 24932 24928 + 24929 24928 24932 + 24930 24929 24932 + 24932 24826 24930 + 24930 24826 24933 + 24934 24930 24933 + 24931 24930 24934 + 24826 24932 24821 + 24825 24933 24826 + 24933 24825 24824 + 24824 24935 24933 + 24933 24935 24936 + 24936 24937 24933 + 24933 24937 24938 + 24938 24934 24933 + 24935 24824 24830 + 24830 24939 24935 + 24936 24935 24939 + 24939 24940 24936 + 24941 24936 24940 + 24936 24941 24942 + 24942 24937 24936 + 24937 24942 24943 + 24943 24938 24937 + 24939 24830 24829 + 24829 24944 24939 + 24939 24944 24945 + 24945 24940 24939 + 24946 24940 24945 + 24940 24946 24941 + 24947 24941 24946 + 24942 24941 24947 + 24947 24948 24942 + 24943 24942 24948 + 24944 24829 24949 + 24949 24950 24944 + 24944 24950 24951 + 24945 24944 24951 + 24833 24949 24829 + 24952 24949 24833 + 24950 24949 24952 + 24950 24952 24953 + 24953 24951 24950 + 24951 24953 24954 + 24951 24954 24955 + 24955 24956 24951 + 24951 24956 24945 + 24833 24957 24952 + 24952 24957 24958 + 24953 24952 24958 + 24958 24959 24953 + 24954 24953 24959 + 24959 24960 24954 + 24955 24954 24960 + 24836 24957 24833 + 24957 24836 24961 + 24961 24958 24957 + 24958 24961 24962 + 24962 24963 24958 + 24958 24963 24964 + 24964 24959 24958 + 24960 24959 24964 + 24965 24961 24836 + 24962 24961 24965 + 24965 24966 24962 + 24962 24966 24967 + 24967 24968 24962 + 24963 24962 24968 + 24968 24969 24963 + 24964 24963 24969 + 24836 24839 24965 + 24970 24965 24839 + 24965 24970 24971 + 24971 24966 24965 + 24966 24971 24972 + 24972 24967 24966 + 24839 24838 24970 + 24973 24970 24838 + 24971 24970 24973 + 24973 24974 24971 + 24972 24971 24974 + 24974 24975 24972 + 24975 24976 24972 + 24976 24977 24972 + 24967 24972 24977 + 24838 24844 24973 + 24978 24973 24844 + 24973 24978 24979 + 24979 24974 24973 + 24974 24979 24980 + 24980 24975 24974 + 24975 24980 24981 + 24981 24976 24975 + 24976 24981 24982 + 24982 24977 24976 + 24844 24843 24978 + 24983 24978 24843 + 24979 24978 24983 + 24983 24984 24979 + 24985 24979 24984 + 24985 24980 24979 + 24980 24985 24986 + 24981 24980 24986 + 24843 24987 24983 + 24988 24983 24987 + 24983 24988 24989 + 24989 24984 24983 + 24984 24989 24990 + 24990 24985 24984 + 24985 24990 24991 + 24991 24986 24985 + 24849 24987 24843 + 24992 24987 24849 + 24987 24992 24988 + 24993 24988 24992 + 24989 24988 24993 + 24993 24994 24989 + 24989 24994 24995 + 24995 24990 24989 + 24990 24995 24996 + 24991 24990 24996 + 24849 24997 24992 + 24992 24997 24998 + 24998 24999 24992 + 24992 24999 24993 + 25000 24993 24999 + 24993 25000 25001 + 25001 24994 24993 + 24997 24849 25002 + 25002 25003 24997 + 24997 25003 25004 + 24998 24997 25004 + 24848 25002 24849 + 25005 25002 24848 + 25003 25002 25005 + 25005 25006 25003 + 25003 25006 25007 + 25007 25004 25003 + 24848 25008 25005 + 25005 25008 25009 + 25009 25010 25005 + 25006 25005 25010 + 25010 25011 25006 + 25007 25006 25011 + 24847 25008 24848 + 25008 24847 25009 + 24847 25012 25009 + 25009 25012 25013 + 25009 25013 25014 + 25014 25010 25009 + 25011 25010 25014 + 24853 25012 24847 + 25015 25012 24853 + 25012 25015 25013 + 25013 25015 25016 + 25013 25016 25017 + 25017 25014 25013 + 25018 25014 25017 + 25014 25018 25011 + 24853 25019 25015 + 25020 25015 25019 + 25015 25020 25016 + 25016 25020 25021 + 25016 25021 25022 + 25022 25017 25016 + 25023 25017 25022 + 25017 25023 25018 + 24858 25019 24853 + 25019 24858 25024 + 25024 25025 25019 + 25025 25020 25019 + 25026 25020 25025 + 25020 25026 25021 + 25021 25026 25027 + 25027 25028 25021 + 25028 25022 25021 + 25029 25024 24858 + 25030 25024 25029 + 25025 25024 25030 + 25030 25031 25025 + 25025 25031 25026 + 25032 25026 25031 + 25026 25032 25027 + 24858 24857 25029 + 25033 25029 24857 + 25029 25033 25034 + 25034 25035 25029 + 25029 25035 25030 + 24857 24856 25033 + 25036 25033 24856 + 25033 25036 25037 + 25034 25033 25037 + 25038 25034 25037 + 25038 25039 25034 + 25035 25034 25039 + 25039 25040 25035 + 25040 25030 25035 + 24856 25041 25036 + 25042 25036 25041 + 25036 25042 25043 + 25043 25037 25036 + 25037 25043 25044 + 25044 25038 25037 + 24861 25041 24856 + 25045 25041 24861 + 25041 25045 25042 + 25046 25042 25045 + 25042 25046 25047 + 25043 25042 25047 + 25043 25047 25048 + 25044 25043 25048 + 24861 24865 25045 + 25045 24865 24870 + 24870 25049 25045 + 25045 25049 25046 + 25050 25046 25049 + 25046 25050 25051 + 25051 25047 25046 + 25047 25051 25052 + 25052 25048 25047 + 25053 25049 24870 + 25049 25053 25050 + 25054 25050 25053 + 25050 25054 25055 + 25051 25050 25055 + 25056 25051 25055 + 25056 25052 25051 + 25057 25052 25056 + 25048 25052 25057 + 24870 25058 25053 + 25053 25058 25059 + 25059 25060 25053 + 25053 25060 25054 + 25061 25054 25060 + 25054 25061 25062 + 25062 25055 25054 + 25058 24870 24869 + 24869 25063 25058 + 25059 25058 25063 + 25063 25064 25059 + 25065 25059 25064 + 25059 25065 25066 + 25066 25060 25059 + 25060 25066 25061 + 25023 25061 25066 + 25062 25061 25023 + 25063 24869 24868 + 24868 25067 25063 + 25063 25067 25068 + 25068 25064 25063 + 25007 25064 25068 + 25064 25007 25065 + 25011 25065 25007 + 25066 25065 25011 + 25011 25018 25066 + 25066 25018 25023 + 25067 24868 25069 + 25069 25070 25067 + 25070 25068 25067 + 25004 25068 25070 + 25068 25004 25007 + 24868 24877 25069 + 25069 24877 25071 + 25071 25072 25069 + 25069 25072 25073 + 25073 25070 25069 + 25074 25070 25073 + 25070 25074 25004 + 25004 25074 24998 + 25071 24877 24876 + 24876 25075 25071 + 25076 25071 25075 + 25072 25071 25076 + 25076 25077 25072 + 25073 25072 25077 + 25077 25078 25073 + 25079 25073 25078 + 25073 25079 25074 + 25080 25075 24876 + 25075 25080 25081 + 25081 25082 25075 + 25075 25082 25076 + 25083 25076 25082 + 25077 25076 25083 + 24876 25084 25080 + 25080 25084 25085 + 25085 25086 25080 + 25080 25086 25087 + 25087 25081 25080 + 25088 25081 25087 + 25082 25081 25088 + 25084 24876 24875 + 24875 25089 25084 + 25085 25084 25089 + 25089 25090 25085 + 25091 25085 25090 + 25085 25091 25092 + 25092 25086 25085 + 25086 25092 25093 + 25093 25087 25086 + 25089 24875 24874 + 24874 25094 25089 + 25089 25094 25095 + 25095 25090 25089 + 25096 25090 25095 + 25090 25096 25091 + 25097 25091 25096 + 25092 25091 25097 + 25094 24874 24885 + 24885 25098 25094 + 25094 25098 25099 + 25095 25094 25099 + 25099 25100 25095 + 25101 25095 25100 + 25095 25101 25096 + 24884 25098 24885 + 25098 24884 24892 + 24892 25099 25098 + 25099 24892 25102 + 25099 25102 25103 + 25103 25100 25099 + 25100 25103 25104 + 25104 25105 25100 + 25100 25105 25101 + 25106 25101 25105 + 25096 25101 25106 + 25102 24892 25107 + 25107 25108 25102 + 25102 25108 25109 + 25109 25103 25102 + 25104 25103 25109 + 24891 25107 24892 + 24897 25107 24891 + 25107 24897 24902 + 24902 25108 25107 + 25108 24902 25110 + 25110 25109 25108 + 25111 25109 25110 + 25109 25111 25104 + 25104 25111 25112 + 25112 25113 25104 + 25105 25104 25113 + 25113 25114 25105 + 25105 25114 25106 + 25110 24902 24901 + 24901 25115 25110 + 25116 25110 25115 + 25116 25111 25110 + 25111 25116 25112 + 25116 25117 25112 + 25112 25117 25118 + 25112 25118 24948 + 24948 25113 25112 + 25114 25113 24948 + 25119 25115 24901 + 25119 25120 25115 + 25115 25120 25116 + 25117 25116 25120 + 25121 25117 25120 + 25117 25121 24943 + 25118 25117 24943 + 24948 25118 24943 + 24901 24907 25119 + 25119 24907 24912 + 25122 25119 24912 + 25123 25119 25122 + 25119 25123 25120 + 25120 25123 25124 + 25124 25125 25120 + 25120 25125 25121 + 24938 25121 25125 + 24938 24943 25121 + 24922 25122 24912 + 25122 24922 25126 + 25122 25126 25123 + 25124 25123 25126 + 25126 24931 25124 + 24934 25124 24931 + 24934 25125 25124 + 25125 24934 24938 + 25126 24922 24931 + 24948 24947 25114 + 25114 24947 25127 + 25127 25106 25114 + 25106 25127 25128 + 25128 25129 25106 + 25106 25129 25096 + 24946 25127 24947 + 25128 25127 24946 + 24946 25130 25128 + 25128 25130 25131 + 25131 25132 25128 + 25129 25128 25132 + 25132 25097 25129 + 25096 25129 25097 + 24945 25130 24946 + 25130 24945 25133 + 25133 25131 25130 + 25133 25134 25131 + 25131 25134 25135 + 25135 25132 25131 + 25097 25132 25135 + 25135 25136 25097 + 25097 25136 25092 + 25137 25133 24945 + 25134 25133 25137 + 25137 25138 25134 + 25134 25138 25139 + 25135 25134 25139 + 25139 25140 25135 + 25136 25135 25140 + 25140 25141 25136 + 25092 25136 25141 + 25141 25093 25092 + 25142 25137 24945 + 25143 25137 25142 + 25138 25137 25143 + 25138 25143 25144 + 25144 25139 25138 + 24956 25142 24945 + 25142 24956 25145 + 25146 25142 25145 + 25142 25146 25147 + 25147 25148 25142 + 25142 25148 25143 + 25143 25148 25149 + 25149 25144 25143 + 25145 24956 24955 + 24955 25150 25145 + 25145 25150 25151 + 25151 25152 25145 + 25145 25152 25146 + 25152 25153 25146 + 25147 25146 25153 + 25150 24955 25154 + 25154 25155 25150 + 25150 25155 25000 + 25000 25151 25150 + 24999 25151 25000 + 25151 24999 24998 + 24998 25152 25151 + 25153 25152 24998 + 24960 25154 24955 + 25156 25154 24960 + 25155 25154 25156 + 25156 25157 25155 + 25155 25157 25001 + 25001 25000 25155 + 24960 25158 25156 + 25156 25158 25159 + 25159 25160 25156 + 25157 25156 25160 + 25160 25161 25157 + 25001 25157 25161 + 25161 25162 25001 + 24994 25001 25162 + 24964 25158 24960 + 25158 24964 25163 + 25163 25159 25158 + 25159 25163 25164 + 25164 25165 25159 + 25159 25165 25166 + 25166 25160 25159 + 25161 25160 25166 + 25166 25167 25161 + 25162 25161 25167 + 24969 25163 24964 + 25164 25163 24969 + 24969 25168 25164 + 25169 25164 25168 + 25164 25169 25170 + 25165 25164 25170 + 25165 25170 25171 + 25171 25166 25165 + 25167 25166 25171 + 25172 25168 24969 + 25168 25172 25173 + 25173 25169 25168 + 25174 25169 25173 + 25170 25169 25174 + 25174 25175 25170 + 25170 25175 25176 + 25176 25171 25170 + 24969 24968 25172 + 25172 24968 24967 + 24967 25177 25172 + 25178 25172 25177 + 25172 25178 25173 + 25173 25178 25179 + 25179 25180 25173 + 25173 25180 25174 + 24977 25177 24967 + 25177 24977 25181 + 25181 25182 25177 + 25182 25178 25177 + 25178 25182 25183 + 25179 25178 25183 + 25184 25179 25183 + 25180 25179 25184 + 25184 25185 25180 + 25185 25174 25180 + 24982 25181 24977 + 25181 24982 25186 + 25187 25181 25186 + 25182 25181 25187 + 25187 25183 25182 + 25183 25187 25188 + 25183 25188 25184 + 25188 25189 25184 + 25190 25184 25189 + 25185 25184 25190 + 25191 25186 24982 + 25186 25191 25192 + 25192 25187 25186 + 25187 25192 25188 + 25188 25192 25193 + 25193 25194 25188 + 25189 25188 25194 + 24982 25195 25191 + 25191 25195 25196 + 25196 25197 25191 + 25193 25191 25197 + 25191 25193 25192 + 24981 25195 24982 + 25196 25195 24981 + 25196 24981 24986 + 25198 25196 24986 + 25196 25198 25199 + 25199 25197 25196 + 25197 25199 25194 + 25194 25193 25197 + 24986 24991 25198 + 25200 25198 24991 + 25199 25198 25200 + 25200 25201 25199 + 25194 25199 25201 + 25201 25202 25194 + 25202 25189 25194 + 25202 25203 25189 + 25189 25203 25190 + 24991 24996 25200 + 25204 25200 24996 + 25200 25204 25205 + 25205 25201 25200 + 25201 25205 25203 + 25203 25202 25201 + 24996 25206 25204 + 25207 25204 25206 + 25204 25207 25208 + 25205 25204 25208 + 25203 25205 25208 + 25190 25203 25208 + 25208 25176 25190 + 25176 25209 25190 + 25190 25209 25185 + 25206 24996 24995 + 24995 25162 25206 + 25206 25162 25167 + 25206 25167 25207 + 25171 25207 25167 + 25207 25171 25176 + 25176 25208 25207 + 25162 24995 24994 + 25174 25185 25209 + 25175 25174 25209 + 25209 25176 25175 + 25210 25153 24998 + 25153 25210 25211 + 25211 25212 25153 + 25153 25212 25147 + 25074 25210 24998 + 25211 25210 25074 + 25074 25079 25211 + 25211 25079 25213 + 25213 25214 25211 + 25212 25211 25214 + 25214 25215 25212 + 25147 25212 25215 + 25215 25216 25147 + 25148 25147 25216 + 25216 25149 25148 + 25078 25213 25079 + 25213 25078 25217 + 25217 25218 25213 + 25213 25218 25219 + 25219 25214 25213 + 25215 25214 25219 + 25219 25220 25215 + 25215 25220 25221 + 25221 25216 25215 + 25149 25216 25221 + 25217 25078 25077 + 25077 25222 25217 + 25223 25217 25222 + 25223 25224 25217 + 25218 25217 25224 + 25224 25225 25218 + 25219 25218 25225 + 25225 25226 25219 + 25220 25219 25226 + 25083 25222 25077 + 25222 25083 25227 + 25227 25223 25222 + 25223 25227 25228 + 25228 25229 25223 + 25224 25223 25229 + 25230 25224 25229 + 25225 25224 25230 + 25231 25227 25083 + 25227 25231 25232 + 25228 25227 25232 + 25228 25232 25233 + 25233 25234 25228 + 25229 25228 25234 + 25234 25235 25229 + 25235 25230 25229 + 25083 25236 25231 + 25237 25231 25236 + 25231 25237 25238 + 25238 25232 25231 + 25232 25238 25239 + 25239 25233 25232 + 25082 25236 25083 + 25088 25236 25082 + 25236 25088 25237 + 25240 25237 25088 + 25237 25240 25241 + 25238 25237 25241 + 25238 25241 25242 + 25242 25239 25238 + 25239 25242 25243 + 25244 25239 25243 + 25233 25239 25244 + 25088 25245 25240 + 25246 25240 25245 + 25240 25246 25247 + 25247 25241 25240 + 25241 25247 25248 + 25248 25242 25241 + 25242 25248 25249 + 25249 25243 25242 + 25087 25245 25088 + 25250 25245 25087 + 25245 25250 25246 + 25251 25246 25250 + 25246 25251 25252 + 25247 25246 25252 + 25247 25252 25253 + 25248 25247 25253 + 25249 25248 25253 + 25087 25093 25250 + 25250 25093 25141 + 25141 25254 25250 + 25250 25254 25251 + 25255 25251 25254 + 25251 25255 25256 + 25256 25252 25251 + 25252 25256 25257 + 25257 25253 25252 + 25258 25254 25141 + 25254 25258 25255 + 25259 25255 25258 + 25256 25255 25259 + 25259 25260 25256 + 25261 25256 25260 + 25261 25257 25256 + 25262 25257 25261 + 25253 25257 25262 + 25141 25140 25258 + 25258 25140 25139 + 25139 25263 25258 + 25258 25263 25259 + 25264 25259 25263 + 25259 25264 25265 + 25265 25260 25259 + 25260 25265 25261 + 25266 25263 25139 + 25263 25266 25264 + 25267 25264 25266 + 25265 25264 25267 + 25267 25268 25265 + 25269 25265 25268 + 25269 25270 25265 + 25265 25270 25261 + 25139 25144 25266 + 25266 25144 25149 + 25149 25271 25266 + 25266 25271 25267 + 25271 25221 25267 + 25221 25272 25267 + 25267 25272 25268 + 25272 25273 25268 + 25268 25273 25269 + 25221 25271 25149 + 25272 25221 25220 + 25220 25274 25272 + 25273 25272 25274 + 25274 25275 25273 + 25276 25273 25275 + 25273 25276 25269 + 25269 25276 25277 + 25277 25278 25269 + 25270 25269 25278 + 25226 25274 25220 + 25274 25226 25279 + 25279 25275 25274 + 25275 25279 25280 + 25280 25276 25275 + 25277 25276 25280 + 25280 25281 25277 + 25282 25277 25281 + 25277 25282 25283 + 25278 25277 25283 + 25279 25226 25225 + 25225 25284 25279 + 25285 25279 25284 + 25279 25285 25280 + 25280 25285 25286 + 25286 25281 25280 + 25281 25286 25287 + 25281 25287 25282 + 25230 25284 25225 + 25284 25230 25288 + 25288 25285 25284 + 25286 25285 25288 + 25288 25289 25286 + 25290 25286 25289 + 25286 25290 25287 + 25287 25290 25291 + 25291 25292 25287 + 25287 25292 25282 + 25230 25293 25288 + 25288 25293 25294 + 25294 25289 25288 + 25289 25294 25291 + 25291 25290 25289 + 25235 25293 25230 + 25293 25235 25295 + 25294 25293 25295 + 25291 25294 25295 + 25292 25291 25295 + 25295 25296 25292 + 25297 25292 25296 + 25292 25297 25282 + 25282 25297 25298 + 25298 25283 25282 + 25299 25283 25298 + 25283 25299 25278 + 25296 25295 25235 + 25235 25234 25296 + 25296 25234 25233 + 25233 25300 25296 + 25297 25296 25300 + 25298 25297 25300 + 25300 25244 25298 + 25298 25244 25243 + 25243 25301 25298 + 25301 25299 25298 + 25244 25300 25233 + 25301 25243 25249 + 25302 25301 25249 + 25301 25302 25303 + 25303 25299 25301 + 25299 25303 25304 + 25304 25305 25299 + 25299 25305 25278 + 25305 25270 25278 + 25261 25270 25305 + 25249 25306 25302 + 25302 25306 25262 + 25303 25302 25262 + 25304 25303 25262 + 25261 25304 25262 + 25305 25304 25261 + 25253 25306 25249 + 25262 25306 25253 + 25023 25307 25062 + 25022 25307 25023 + 25307 25022 25308 + 25308 25062 25307 + 25308 25309 25062 + 25055 25062 25309 + 25309 25056 25055 + 25022 25028 25308 + 25308 25028 25310 + 25310 25311 25308 + 25308 25311 25312 + 25312 25309 25308 + 25056 25309 25312 + 25312 25313 25056 + 25056 25313 25057 + 25310 25028 25314 + 25315 25310 25314 + 25310 25315 25316 + 25311 25310 25316 + 25311 25316 25317 + 25317 25312 25311 + 25313 25312 25317 + 25317 25318 25313 + 25318 25057 25313 + 25028 25027 25314 + 25319 25314 25027 + 25314 25319 25315 + 25319 25320 25315 + 25316 25315 25320 + 25320 25321 25316 + 25322 25316 25321 + 25316 25322 25317 + 25323 25317 25322 + 25318 25317 25323 + 25027 25032 25319 + 25319 25032 25324 + 25324 25325 25319 + 25320 25319 25325 + 25321 25320 25325 + 25325 25326 25321 + 25321 25326 25327 + 25327 25322 25321 + 25327 25328 25322 + 25322 25328 25323 + 25324 25032 25031 + 25031 25030 25324 + 25030 25329 25324 + 25324 25329 25326 + 25326 25325 25324 + 25040 25329 25030 + 25329 25040 25330 + 25326 25329 25330 + 25326 25330 25327 + 25327 25330 25331 + 25328 25327 25331 + 25328 25331 25332 + 25323 25328 25332 + 25332 25333 25323 + 25333 25334 25323 + 25323 25334 25318 + 25331 25330 25040 + 25040 25039 25331 + 25331 25039 25038 + 25038 25332 25331 + 25333 25332 25038 + 25038 25044 25333 + 25335 25333 25044 + 25334 25333 25335 + 25318 25334 25335 + 25335 25057 25318 + 25057 25335 25048 + 25048 25335 25044 + 25336 25337 25338 + 25339 25337 25336 + 25340 25337 25339 + 25337 25340 25341 + 25341 25342 25337 + 25343 25336 25338 + 25344 25336 25343 + 25345 25336 25344 + 25336 25345 25339 + 25338 25346 25343 + 25347 25343 25346 + 25343 25347 25348 + 25348 25349 25343 + 25343 25349 25344 + 25350 25346 25338 + 25350 25351 25346 + 25346 25351 25347 + 25352 25347 25351 + 25348 25347 25352 + 25352 25353 25348 + 25354 25348 25353 + 25349 25348 25354 + 25338 25355 25350 + 25350 25355 25356 + 25356 25357 25350 + 25351 25350 25357 + 25357 25358 25351 + 25351 25358 25352 + 25355 25338 25359 + 25355 25359 25360 + 25360 25361 25355 + 25355 25361 25356 + 25362 25359 25338 + 25360 25359 25362 + 25363 25360 25362 + 25364 25360 25363 + 25361 25360 25364 + 25361 25364 25365 + 25365 25366 25361 + 25361 25366 25356 + 25342 25362 25338 + 25341 25362 25342 + 25362 25341 25363 + 25341 25367 25363 + 25368 25363 25367 + 25363 25368 25364 + 25364 25368 25369 + 25369 25370 25364 + 25370 25365 25364 + 25367 25341 25340 + 25340 25371 25367 + 25372 25367 25371 + 25367 25372 25368 + 25368 25372 25369 + 25372 25373 25369 + 25374 25369 25373 + 25369 25374 25370 + 25340 25375 25371 + 25375 25376 25371 + 25377 25371 25376 + 25371 25377 25372 + 25373 25372 25377 + 25339 25375 25340 + 25375 25339 25378 + 25378 25379 25375 + 25376 25375 25379 + 25379 25380 25376 + 25380 25381 25376 + 25376 25381 25377 + 25382 25378 25339 + 25383 25378 25382 + 25379 25378 25383 + 25380 25379 25383 + 25380 25383 25384 + 25384 25385 25380 + 25381 25380 25385 + 25386 25381 25385 + 25377 25381 25386 + 25339 25345 25382 + 25387 25382 25345 + 25382 25387 25388 + 25382 25388 25383 + 25383 25388 25389 + 25384 25383 25389 + 25345 25390 25387 + 25391 25387 25390 + 25388 25387 25391 + 25391 25389 25388 + 25390 25345 25344 + 25390 25344 25392 + 25392 25393 25390 + 25390 25393 25391 + 25394 25391 25393 + 25389 25391 25394 + 25395 25392 25344 + 25396 25392 25395 + 25392 25396 25397 + 25397 25393 25392 + 25393 25397 25394 + 25344 25349 25395 + 25354 25395 25349 + 25398 25395 25354 + 25395 25398 25396 + 25396 25398 25399 + 25399 25400 25396 + 25397 25396 25400 + 25400 25401 25397 + 25394 25397 25401 + 25354 25402 25398 + 25398 25402 25403 + 25403 25399 25398 + 25399 25403 25404 + 25404 25405 25399 + 25399 25405 25406 + 25406 25400 25399 + 25401 25400 25406 + 25402 25354 25407 + 25407 25408 25402 + 25402 25408 25409 + 25409 25403 25402 + 25404 25403 25409 + 25409 25410 25404 + 25411 25404 25410 + 25405 25404 25411 + 25353 25407 25354 + 25412 25407 25353 + 25407 25412 25413 + 25413 25408 25407 + 25408 25413 25414 + 25414 25409 25408 + 25409 25414 25415 + 25415 25410 25409 + 25353 25416 25412 + 25412 25416 25417 + 25417 25418 25412 + 25413 25412 25418 + 25418 25419 25413 + 25413 25419 25420 + 25420 25414 25413 + 25415 25414 25420 + 25416 25353 25352 + 25416 25352 25421 + 25421 25422 25416 + 25416 25422 25417 + 25423 25417 25422 + 25424 25417 25423 + 25417 25424 25425 + 25425 25418 25417 + 25419 25418 25425 + 25358 25421 25352 + 25426 25421 25358 + 25426 25422 25421 + 25422 25426 25423 + 25423 25426 25427 + 25428 25423 25427 + 25424 25423 25428 + 25428 25429 25424 + 25425 25424 25429 + 25358 25427 25426 + 25427 25358 25357 + 25427 25357 25356 + 25356 25430 25427 + 25427 25430 25428 + 25431 25428 25430 + 25429 25428 25431 + 25431 25432 25429 + 25429 25432 25433 + 25433 25434 25429 + 25429 25434 25425 + 25435 25430 25356 + 25430 25435 25431 + 25431 25435 25436 + 25436 25437 25431 + 25432 25431 25437 + 25437 25438 25432 + 25433 25432 25438 + 25356 25439 25435 + 25440 25435 25439 + 25435 25440 25436 + 25441 25436 25440 + 25442 25436 25441 + 25436 25442 25443 + 25443 25437 25436 + 25438 25437 25443 + 25439 25356 25366 + 25366 25444 25439 + 25445 25439 25444 + 25445 25446 25439 + 25446 25440 25439 + 25446 25447 25440 + 25440 25447 25441 + 25444 25366 25365 + 25365 25448 25444 + 25444 25448 25449 + 25449 25445 25444 + 25445 25449 25450 + 25445 25450 25447 + 25447 25446 25445 + 25448 25365 25370 + 25370 25451 25448 + 25451 25452 25448 + 25452 25449 25448 + 25452 25453 25449 + 25453 25450 25449 + 25450 25453 25454 + 25454 25441 25450 + 25441 25447 25450 + 25451 25370 25455 + 25451 25455 25456 + 25456 25452 25451 + 25452 25456 25457 + 25457 25453 25452 + 25453 25457 25458 + 25458 25454 25453 + 25374 25455 25370 + 25455 25374 25459 + 25459 25456 25455 + 25456 25459 25460 + 25457 25456 25460 + 25458 25457 25460 + 25460 25461 25458 + 25462 25458 25461 + 25458 25462 25463 + 25463 25454 25458 + 25374 25464 25459 + 25464 25465 25459 + 25459 25465 25460 + 25460 25465 25466 + 25466 25461 25460 + 25466 25467 25461 + 25467 25468 25461 + 25461 25468 25462 + 25373 25464 25374 + 25464 25373 25469 + 25465 25464 25469 + 25466 25465 25469 + 25469 25470 25466 + 25467 25466 25470 + 25470 25471 25467 + 25472 25467 25471 + 25468 25467 25472 + 25472 25473 25468 + 25462 25468 25473 + 25373 25474 25469 + 25469 25474 25386 + 25386 25475 25469 + 25469 25475 25476 + 25476 25470 25469 + 25471 25470 25476 + 25377 25474 25373 + 25386 25474 25377 + 25475 25386 25385 + 25385 25477 25475 + 25476 25475 25477 + 25477 25478 25476 + 25479 25476 25478 + 25476 25479 25471 + 25471 25479 25480 + 25480 25481 25471 + 25471 25481 25472 + 25477 25385 25384 + 25384 25482 25477 + 25477 25482 25483 + 25483 25478 25477 + 25484 25478 25483 + 25478 25484 25479 + 25480 25479 25484 + 25482 25384 25485 + 25485 25486 25482 + 25483 25482 25486 + 25486 25487 25483 + 25488 25483 25487 + 25483 25488 25484 + 25389 25485 25384 + 25489 25485 25389 + 25486 25485 25489 + 25486 25489 25490 + 25490 25487 25486 + 25491 25487 25490 + 25487 25491 25488 + 25492 25488 25491 + 25484 25488 25492 + 25492 25493 25484 + 25484 25493 25480 + 25389 25494 25489 + 25489 25494 25495 + 25495 25490 25489 + 25496 25490 25495 + 25490 25496 25491 + 25491 25496 25497 + 25497 25498 25491 + 25491 25498 25492 + 25394 25494 25389 + 25494 25394 25499 + 25499 25500 25494 + 25494 25500 25495 + 25501 25495 25500 + 25502 25495 25501 + 25495 25502 25496 + 25497 25496 25502 + 25401 25499 25394 + 25503 25499 25401 + 25500 25499 25503 + 25503 25504 25500 + 25500 25504 25501 + 25501 25504 25505 + 25505 25506 25501 + 25507 25501 25506 + 25501 25507 25502 + 25401 25508 25503 + 25503 25508 25509 + 25509 25510 25503 + 25504 25503 25510 + 25510 25505 25504 + 25406 25508 25401 + 25508 25406 25511 + 25511 25509 25508 + 25509 25511 25512 + 25512 25513 25509 + 25509 25513 25514 + 25514 25510 25509 + 25505 25510 25514 + 25515 25511 25406 + 25512 25511 25515 + 25515 25516 25512 + 25512 25516 25517 + 25517 25518 25512 + 25513 25512 25518 + 25406 25405 25515 + 25411 25515 25405 + 25515 25411 25519 + 25519 25516 25515 + 25516 25519 25520 + 25520 25517 25516 + 25517 25520 25521 + 25521 25522 25517 + 25517 25522 25523 + 25523 25518 25517 + 25519 25411 25524 + 25524 25525 25519 + 25519 25525 25526 + 25526 25520 25519 + 25521 25520 25526 + 25410 25524 25411 + 25527 25524 25410 + 25524 25527 25528 + 25528 25525 25524 + 25525 25528 25529 + 25529 25526 25525 + 25526 25529 25530 + 25530 25531 25526 + 25526 25531 25521 + 25410 25415 25527 + 25532 25527 25415 + 25528 25527 25532 + 25532 25533 25528 + 25528 25533 25534 + 25534 25529 25528 + 25530 25529 25534 + 25415 25535 25532 + 25536 25532 25535 + 25532 25536 25537 + 25537 25533 25532 + 25533 25537 25538 + 25538 25534 25533 + 25420 25535 25415 + 25539 25535 25420 + 25535 25539 25536 + 25540 25536 25539 + 25537 25536 25540 + 25420 25541 25539 + 25539 25541 25542 + 25542 25543 25539 + 25539 25543 25540 + 25541 25420 25419 + 25419 25544 25541 + 25542 25541 25544 + 25545 25542 25544 + 25546 25542 25545 + 25542 25546 25547 + 25547 25543 25542 + 25543 25547 25548 + 25548 25540 25543 + 25425 25544 25419 + 25544 25425 25434 + 25434 25549 25544 + 25544 25549 25545 + 25550 25545 25549 + 25551 25545 25550 + 25545 25551 25546 + 25552 25546 25551 + 25547 25546 25552 + 25552 25553 25547 + 25548 25547 25553 + 25434 25433 25549 + 25549 25433 25550 + 25554 25550 25433 + 25551 25550 25554 + 25554 25555 25551 + 25551 25555 25552 + 25556 25552 25555 + 25552 25556 25557 + 25557 25553 25552 + 25438 25554 25433 + 25558 25554 25438 + 25555 25554 25558 + 25558 25559 25555 + 25555 25559 25556 + 25560 25556 25559 + 25557 25556 25560 + 25438 25561 25558 + 25558 25561 25562 + 25562 25563 25558 + 25559 25558 25563 + 25563 25564 25559 + 25559 25564 25560 + 25443 25561 25438 + 25561 25443 25565 + 25565 25562 25561 + 25566 25562 25565 + 25562 25566 25567 + 25567 25563 25562 + 25564 25563 25567 + 25567 25568 25564 + 25564 25568 25569 + 25569 25560 25564 + 25565 25443 25442 + 25442 25570 25565 + 25570 25571 25565 + 25566 25565 25571 + 25571 25572 25566 + 25567 25566 25572 + 25572 25573 25567 + 25568 25567 25573 + 25574 25570 25442 + 25570 25574 25575 + 25575 25576 25570 + 25570 25576 25577 + 25577 25571 25570 + 25577 25572 25571 + 25572 25577 25578 + 25578 25573 25572 + 25442 25579 25574 + 25574 25579 25463 + 25463 25580 25574 + 25575 25574 25580 + 25580 25581 25575 + 25582 25575 25581 + 25576 25575 25582 + 25441 25579 25442 + 25579 25441 25454 + 25454 25463 25579 + 25582 25583 25576 + 25583 25582 25584 + 25583 25584 25585 + 25585 25586 25583 + 25583 25586 25577 + 25577 25576 25583 + 25584 25582 25587 + 25587 25588 25584 + 25584 25588 25589 + 25589 25585 25584 + 25590 25585 25589 + 25586 25585 25590 + 25581 25587 25582 + 25587 25581 25591 + 25592 25587 25591 + 25587 25592 25588 + 25592 25593 25588 + 25588 25593 25594 + 25594 25595 25588 + 25588 25595 25589 + 25596 25591 25581 + 25591 25596 25473 + 25473 25597 25591 + 25592 25591 25597 + 25597 25598 25592 + 25598 25599 25592 + 25599 25593 25592 + 25581 25580 25596 + 25596 25580 25463 + 25463 25462 25596 + 25473 25596 25462 + 25597 25473 25472 + 25598 25597 25472 + 25600 25598 25472 + 25598 25600 25599 + 25599 25600 25481 + 25481 25601 25599 + 25593 25599 25601 + 25601 25594 25593 + 25602 25594 25601 + 25594 25602 25603 + 25603 25595 25594 + 25481 25600 25472 + 25601 25481 25480 + 25480 25604 25601 + 25601 25604 25602 + 25604 25605 25602 + 25603 25602 25605 + 25605 25606 25603 + 25607 25603 25606 + 25595 25603 25607 + 25607 25589 25595 + 25604 25480 25493 + 25493 25605 25604 + 25605 25493 25492 + 25492 25606 25605 + 25606 25492 25498 + 25498 25608 25606 + 25606 25608 25607 + 25609 25607 25608 + 25589 25607 25609 + 25609 25610 25589 + 25589 25610 25590 + 25608 25498 25497 + 25497 25611 25608 + 25608 25611 25609 + 25609 25611 25612 + 25612 25613 25609 + 25610 25609 25613 + 25613 25614 25610 + 25590 25610 25614 + 25611 25497 25615 + 25615 25612 25611 + 25612 25615 25616 + 25616 25617 25612 + 25612 25617 25618 + 25618 25613 25612 + 25614 25613 25618 + 25502 25615 25497 + 25616 25615 25502 + 25502 25507 25616 + 25616 25507 25619 + 25619 25620 25616 + 25617 25616 25620 + 25620 25621 25617 + 25618 25617 25621 + 25621 25622 25618 + 25623 25618 25622 + 25618 25623 25614 + 25506 25619 25507 + 25619 25506 25624 + 25624 25625 25619 + 25619 25625 25626 + 25626 25620 25619 + 25621 25620 25626 + 25626 25627 25621 + 25621 25627 25628 + 25628 25622 25621 + 25624 25506 25505 + 25505 25629 25624 + 25624 25629 25630 + 25630 25631 25624 + 25625 25624 25631 + 25631 25632 25625 + 25625 25632 25633 + 25633 25626 25625 + 25627 25626 25633 + 25514 25629 25505 + 25629 25514 25634 + 25634 25630 25629 + 25635 25630 25634 + 25630 25635 25636 + 25636 25631 25630 + 25632 25631 25636 + 25636 25637 25632 + 25632 25637 25638 + 25638 25633 25632 + 25639 25634 25514 + 25640 25634 25639 + 25640 25635 25634 + 25635 25640 25641 + 25641 25642 25635 + 25636 25635 25642 + 25642 25643 25636 + 25637 25636 25643 + 25644 25639 25514 + 25645 25639 25644 + 25639 25645 25646 + 25646 25647 25639 + 25639 25647 25640 + 25640 25647 25648 + 25648 25641 25640 + 25649 25644 25514 + 25650 25644 25649 + 25651 25644 25650 + 25644 25651 25645 + 25652 25645 25651 + 25646 25645 25652 + 25514 25513 25649 + 25513 25653 25649 + 25654 25649 25653 + 25655 25649 25654 + 25649 25655 25650 + 25518 25653 25513 + 25518 25523 25653 + 25653 25523 25654 + 25654 25523 25522 + 25522 25656 25654 + 25656 25657 25654 + 25655 25654 25657 + 25657 25658 25655 + 25650 25655 25658 + 25658 25659 25650 + 25660 25650 25659 + 25650 25660 25651 + 25661 25656 25522 + 25656 25661 25662 + 25662 25663 25656 + 25656 25663 25664 + 25664 25657 25656 + 25658 25657 25664 + 25522 25521 25661 + 25665 25661 25521 + 25662 25661 25665 + 25665 25666 25662 + 25662 25666 25667 + 25667 25668 25662 + 25663 25662 25668 + 25668 25669 25663 + 25664 25663 25669 + 25521 25531 25665 + 25670 25665 25531 + 25665 25670 25671 + 25671 25666 25665 + 25666 25671 25672 + 25672 25667 25666 + 25531 25530 25670 + 25673 25670 25530 + 25671 25670 25673 + 25673 25674 25671 + 25671 25674 25675 + 25675 25672 25671 + 25676 25672 25675 + 25676 25667 25672 + 25530 25677 25673 + 25678 25673 25677 + 25673 25678 25679 + 25679 25674 25673 + 25674 25679 25680 + 25680 25675 25674 + 25681 25675 25680 + 25675 25681 25676 + 25534 25677 25530 + 25682 25677 25534 + 25677 25682 25678 + 25678 25682 25683 + 25683 25684 25678 + 25679 25678 25684 + 25684 25685 25679 + 25679 25685 25686 + 25686 25680 25679 + 25534 25538 25682 + 25682 25538 25687 + 25687 25683 25682 + 25683 25687 25688 + 25688 25689 25683 + 25683 25689 25690 + 25690 25684 25683 + 25684 25690 25691 + 25691 25685 25684 + 25687 25538 25537 + 25692 25687 25537 + 25688 25687 25692 + 25692 25693 25688 + 25694 25688 25693 + 25689 25688 25694 + 25694 25695 25689 + 25689 25695 25696 + 25696 25690 25689 + 25691 25690 25696 + 25697 25692 25537 + 25698 25692 25697 + 25692 25698 25699 + 25699 25693 25692 + 25693 25699 25700 + 25700 25701 25693 + 25693 25701 25694 + 25537 25702 25697 + 25702 25703 25697 + 25704 25697 25703 + 25705 25697 25704 + 25697 25705 25698 + 25540 25702 25537 + 25706 25702 25540 + 25702 25706 25707 + 25707 25703 25702 + 25707 25708 25703 + 25703 25708 25704 + 25540 25548 25706 + 25706 25548 25709 + 25709 25710 25706 + 25706 25710 25711 + 25711 25707 25706 + 25708 25707 25711 + 25711 25712 25708 + 25704 25708 25712 + 25553 25709 25548 + 25713 25709 25553 + 25709 25713 25714 + 25714 25710 25709 + 25710 25714 25715 + 25715 25711 25710 + 25711 25715 25716 + 25716 25712 25711 + 25553 25557 25713 + 25717 25713 25557 + 25714 25713 25717 + 25717 25718 25714 + 25714 25718 25719 + 25719 25715 25714 + 25716 25715 25719 + 25720 25717 25557 + 25721 25717 25720 + 25717 25721 25722 + 25722 25718 25717 + 25718 25722 25723 + 25723 25719 25718 + 25557 25724 25720 + 25725 25720 25724 + 25726 25720 25725 + 25720 25726 25721 + 25727 25721 25726 + 25722 25721 25727 + 25560 25724 25557 + 25724 25560 25569 + 25724 25569 25725 + 25725 25569 25568 + 25568 25728 25725 + 25729 25725 25728 + 25725 25729 25726 + 25726 25729 25614 + 25614 25623 25726 + 25726 25623 25727 + 25573 25728 25568 + 25730 25728 25573 + 25728 25730 25729 + 25729 25730 25590 + 25614 25729 25590 + 25573 25578 25730 + 25730 25578 25586 + 25586 25590 25730 + 25586 25578 25577 + 25622 25727 25623 + 25731 25727 25622 + 25727 25731 25722 + 25722 25731 25732 + 25732 25723 25722 + 25733 25723 25732 + 25719 25723 25733 + 25733 25734 25719 + 25719 25734 25716 + 25628 25731 25622 + 25731 25628 25735 + 25735 25736 25731 + 25731 25736 25732 + 25736 25737 25732 + 25738 25732 25737 + 25739 25732 25738 + 25732 25739 25733 + 25740 25735 25628 + 25741 25735 25740 + 25736 25735 25741 + 25741 25742 25736 + 25736 25742 25743 + 25743 25737 25736 + 25628 25627 25740 + 25633 25740 25627 + 25740 25633 25638 + 25638 25744 25740 + 25740 25744 25741 + 25741 25744 25745 + 25745 25746 25741 + 25742 25741 25746 + 25746 25747 25742 + 25743 25742 25747 + 25744 25638 25748 + 25748 25745 25744 + 25745 25748 25749 + 25749 25750 25745 + 25745 25750 25751 + 25751 25746 25745 + 25751 25752 25746 + 25752 25747 25746 + 25753 25748 25638 + 25749 25748 25753 + 25753 25754 25749 + 25749 25754 25755 + 25755 25756 25749 + 25750 25749 25756 + 25756 25757 25750 + 25751 25750 25757 + 25638 25637 25753 + 25643 25753 25637 + 25753 25643 25758 + 25758 25754 25753 + 25754 25758 25759 + 25759 25755 25754 + 25760 25755 25759 + 25760 25761 25755 + 25755 25761 25762 + 25762 25756 25755 + 25757 25756 25762 + 25758 25643 25642 + 25642 25763 25758 + 25758 25763 25764 + 25764 25759 25758 + 25759 25764 25765 + 25760 25759 25765 + 25766 25760 25765 + 25766 25767 25760 + 25767 25761 25760 + 25762 25761 25767 + 25768 25763 25642 + 25763 25768 25769 + 25769 25764 25763 + 25770 25764 25769 + 25770 25765 25764 + 25771 25765 25770 + 25765 25771 25766 + 25642 25641 25768 + 25768 25641 25648 + 25648 25772 25768 + 25768 25772 25773 + 25773 25769 25768 + 25770 25769 25773 + 25773 25774 25770 + 25770 25774 25775 + 25775 25771 25770 + 25776 25772 25648 + 25772 25776 25777 + 25777 25773 25772 + 25778 25773 25777 + 25778 25774 25773 + 25779 25774 25778 + 25774 25779 25775 + 25780 25775 25779 + 25780 25771 25775 + 25648 25781 25776 + 25776 25781 25782 + 25782 25783 25776 + 25776 25783 25784 + 25784 25777 25776 + 25778 25777 25784 + 25781 25648 25647 + 25647 25646 25781 + 25781 25646 25785 + 25785 25782 25781 + 25786 25782 25785 + 25782 25786 25787 + 25787 25783 25782 + 25783 25787 25788 + 25788 25784 25783 + 25652 25785 25646 + 25785 25652 25789 + 25789 25790 25785 + 25785 25790 25786 + 25791 25786 25790 + 25787 25786 25791 + 25791 25792 25787 + 25787 25792 25793 + 25793 25788 25787 + 25789 25652 25794 + 25794 25795 25789 + 25789 25795 25796 + 25796 25797 25789 + 25797 25798 25789 + 25798 25799 25789 + 25790 25789 25799 + 25651 25794 25652 + 25800 25794 25651 + 25794 25800 25801 + 25801 25795 25794 + 25795 25801 25802 + 25802 25796 25795 + 25651 25660 25800 + 25800 25660 25803 + 25803 25804 25800 + 25801 25800 25804 + 25804 25805 25801 + 25802 25801 25805 + 25805 25806 25802 + 25695 25802 25806 + 25796 25802 25695 + 25659 25803 25660 + 25803 25659 25807 + 25807 25808 25803 + 25803 25808 25809 + 25809 25804 25803 + 25805 25804 25809 + 25809 25810 25805 + 25805 25810 25811 + 25811 25806 25805 + 25807 25659 25658 + 25658 25812 25807 + 25807 25812 25813 + 25813 25814 25807 + 25808 25807 25814 + 25814 25815 25808 + 25808 25815 25816 + 25816 25809 25808 + 25810 25809 25816 + 25664 25812 25658 + 25812 25664 25817 + 25817 25813 25812 + 25818 25813 25817 + 25818 25819 25813 + 25814 25813 25819 + 25820 25814 25819 + 25815 25814 25820 + 25820 25821 25815 + 25815 25821 25816 + 25669 25817 25664 + 25818 25817 25669 + 25669 25822 25818 + 25818 25822 25823 + 25823 25824 25818 + 25819 25818 25824 + 25824 25825 25819 + 25820 25819 25825 + 25825 25826 25820 + 25821 25820 25826 + 25827 25822 25669 + 25822 25827 25828 + 25828 25823 25822 + 25829 25823 25828 + 25829 25830 25823 + 25824 25823 25830 + 25831 25824 25830 + 25831 25825 25824 + 25669 25668 25827 + 25827 25668 25667 + 25667 25832 25827 + 25828 25827 25832 + 25832 25833 25828 + 25833 25834 25828 + 25834 25829 25828 + 25835 25829 25834 + 25830 25829 25835 + 25835 25836 25830 + 25830 25836 25831 + 25676 25832 25667 + 25833 25832 25676 + 25837 25833 25676 + 25838 25833 25837 + 25838 25834 25833 + 25834 25838 25839 + 25839 25835 25834 + 25835 25839 25840 + 25840 25836 25835 + 25831 25836 25840 + 25841 25831 25840 + 25831 25841 25825 + 25842 25837 25676 + 25837 25842 25843 + 25838 25837 25843 + 25839 25838 25843 + 25839 25843 25844 + 25840 25839 25844 + 25844 25845 25840 + 25841 25840 25845 + 25846 25841 25845 + 25825 25841 25846 + 25676 25681 25842 + 25842 25681 25847 + 25848 25842 25847 + 25849 25842 25848 + 25849 25843 25842 + 25844 25843 25849 + 25850 25844 25849 + 25845 25844 25850 + 25847 25681 25680 + 25847 25680 25686 + 25686 25851 25847 + 25847 25851 25848 + 25851 25852 25848 + 25849 25848 25852 + 25852 25853 25849 + 25849 25853 25850 + 25851 25686 25854 + 25855 25851 25854 + 25852 25851 25855 + 25856 25852 25855 + 25857 25852 25856 + 25857 25853 25852 + 25858 25853 25857 + 25853 25858 25850 + 25854 25686 25685 + 25685 25691 25854 + 25859 25854 25691 + 25855 25854 25859 + 25859 25860 25855 + 25855 25860 25861 + 25861 25856 25855 + 25857 25856 25861 + 25861 25862 25857 + 25857 25862 25863 + 25863 25858 25857 + 25691 25864 25859 + 25865 25859 25864 + 25866 25859 25865 + 25866 25860 25859 + 25861 25860 25866 + 25867 25861 25866 + 25868 25861 25867 + 25868 25862 25861 + 25696 25864 25691 + 25811 25864 25696 + 25864 25811 25865 + 25869 25865 25811 + 25865 25869 25870 + 25866 25865 25870 + 25866 25870 25871 + 25871 25867 25866 + 25867 25871 25872 + 25868 25867 25872 + 25696 25806 25811 + 25806 25696 25695 + 25811 25810 25869 + 25816 25869 25810 + 25869 25816 25873 + 25873 25870 25869 + 25870 25873 25874 + 25874 25871 25870 + 25875 25871 25874 + 25875 25872 25871 + 25872 25875 25876 + 25876 25877 25872 + 25868 25872 25877 + 25862 25868 25877 + 25877 25863 25862 + 25858 25863 25877 + 25821 25873 25816 + 25873 25821 25878 + 25878 25874 25873 + 25874 25878 25879 + 25875 25874 25879 + 25875 25879 25880 + 25880 25876 25875 + 25880 25850 25876 + 25850 25858 25876 + 25877 25876 25858 + 25826 25878 25821 + 25846 25878 25826 + 25846 25879 25878 + 25879 25846 25845 + 25845 25880 25879 + 25850 25880 25845 + 25846 25826 25825 + 25695 25694 25796 + 25796 25694 25701 + 25701 25797 25796 + 25881 25797 25701 + 25797 25881 25882 + 25882 25798 25797 + 25701 25700 25881 + 25881 25700 25883 + 25883 25884 25881 + 25882 25881 25884 + 25884 25885 25882 + 25886 25882 25885 + 25798 25882 25886 + 25887 25883 25700 + 25888 25883 25887 + 25884 25883 25888 + 25888 25889 25884 + 25884 25889 25890 + 25890 25885 25884 + 25891 25885 25890 + 25885 25891 25886 + 25700 25699 25887 + 25892 25887 25699 + 25887 25892 25893 + 25893 25894 25887 + 25887 25894 25888 + 25895 25888 25894 + 25889 25888 25895 + 25895 25896 25889 + 25890 25889 25896 + 25699 25698 25892 + 25897 25892 25698 + 25893 25892 25897 + 25897 25898 25893 + 25893 25898 25899 + 25899 25900 25893 + 25894 25893 25900 + 25900 25901 25894 + 25894 25901 25895 + 25698 25705 25897 + 25902 25897 25705 + 25897 25902 25903 + 25903 25898 25897 + 25899 25898 25903 + 25904 25899 25903 + 25905 25899 25904 + 25905 25906 25899 + 25900 25899 25906 + 25705 25704 25902 + 25907 25902 25704 + 25903 25902 25907 + 25907 25908 25903 + 25903 25908 25909 + 25909 25904 25903 + 25905 25904 25909 + 25712 25907 25704 + 25910 25907 25712 + 25907 25910 25911 + 25911 25908 25907 + 25908 25911 25912 + 25912 25909 25908 + 25909 25912 25913 + 25913 25914 25909 + 25909 25914 25905 + 25712 25716 25910 + 25915 25910 25716 + 25911 25910 25915 + 25915 25916 25911 + 25911 25916 25917 + 25917 25912 25911 + 25913 25912 25917 + 25716 25734 25915 + 25918 25915 25734 + 25915 25918 25919 + 25919 25916 25915 + 25916 25919 25920 + 25920 25917 25916 + 25921 25917 25920 + 25921 25922 25917 + 25917 25922 25913 + 25734 25733 25918 + 25918 25733 25739 + 25739 25923 25918 + 25919 25918 25923 + 25923 25924 25919 + 25919 25924 25925 + 25925 25920 25919 + 25921 25920 25925 + 25926 25923 25739 + 25923 25926 25927 + 25927 25924 25923 + 25924 25927 25928 + 25928 25925 25924 + 25929 25925 25928 + 25929 25930 25925 + 25925 25930 25921 + 25739 25931 25926 + 25891 25926 25931 + 25927 25926 25891 + 25891 25932 25927 + 25927 25932 25933 + 25933 25928 25927 + 25929 25928 25933 + 25738 25931 25739 + 25931 25738 25934 + 25934 25886 25931 + 25931 25886 25891 + 25934 25738 25935 + 25935 25936 25934 + 25798 25934 25936 + 25886 25934 25798 + 25737 25935 25738 + 25937 25935 25737 + 25935 25937 25938 + 25938 25936 25935 + 25936 25938 25939 + 25939 25799 25936 + 25936 25799 25798 + 25737 25743 25937 + 25937 25743 25940 + 25940 25941 25937 + 25938 25937 25941 + 25941 25942 25938 + 25939 25938 25942 + 25942 25791 25939 + 25790 25939 25791 + 25799 25939 25790 + 25747 25940 25743 + 25943 25940 25747 + 25941 25940 25943 + 25943 25944 25941 + 25941 25944 25945 + 25945 25942 25941 + 25791 25942 25945 + 25945 25792 25791 + 25792 25945 25946 + 25946 25793 25792 + 25747 25752 25943 + 25947 25943 25752 + 25944 25943 25947 + 25947 25948 25944 + 25945 25944 25948 + 25948 25946 25945 + 25946 25948 25949 + 25950 25946 25949 + 25950 25793 25946 + 25950 25951 25793 + 25788 25793 25951 + 25752 25952 25947 + 25952 25953 25947 + 25953 25954 25947 + 25954 25948 25947 + 25954 25949 25948 + 25949 25954 25955 + 25955 25956 25949 + 25950 25949 25956 + 25952 25752 25751 + 25957 25952 25751 + 25958 25952 25957 + 25958 25953 25952 + 25953 25958 25959 + 25959 25960 25953 + 25954 25953 25960 + 25960 25955 25954 + 25757 25957 25751 + 25958 25957 25757 + 25757 25961 25958 + 25958 25961 25962 + 25962 25959 25958 + 25963 25959 25962 + 25963 25960 25959 + 25963 25964 25960 + 25955 25960 25964 + 25965 25955 25964 + 25965 25956 25955 + 25762 25961 25757 + 25961 25762 25966 + 25966 25962 25961 + 25967 25962 25966 + 25967 25968 25962 + 25962 25968 25963 + 25963 25968 25969 + 25964 25963 25969 + 25767 25966 25762 + 25966 25767 25970 + 25967 25966 25970 + 25970 25971 25967 + 25967 25971 25972 + 25968 25967 25972 + 25968 25972 25969 + 25973 25970 25767 + 25970 25973 25974 + 25974 25971 25970 + 25972 25971 25974 + 25974 25975 25972 + 25972 25975 25976 + 25976 25969 25972 + 25973 25767 25766 + 25977 25973 25766 + 25974 25973 25977 + 25975 25974 25977 + 25977 25780 25975 + 25975 25780 25978 + 25978 25976 25975 + 25976 25978 25979 + 25980 25976 25979 + 25969 25976 25980 + 25771 25977 25766 + 25780 25977 25771 + 25779 25978 25780 + 25979 25978 25779 + 25979 25779 25981 + 25979 25981 25982 + 25982 25983 25979 + 25979 25983 25980 + 25983 25984 25980 + 25985 25980 25984 + 25980 25985 25969 + 25969 25985 25964 + 25981 25779 25778 + 25982 25981 25778 + 25778 25986 25982 + 25982 25986 25987 + 25988 25982 25987 + 25989 25982 25988 + 25989 25983 25982 + 25984 25983 25989 + 25784 25986 25778 + 25987 25986 25784 + 25987 25784 25788 + 25987 25788 25951 + 25987 25951 25990 + 25990 25988 25987 + 25988 25990 25991 + 25989 25988 25991 + 25989 25991 25992 + 25992 25984 25989 + 25984 25992 25993 + 25993 25994 25984 + 25984 25994 25985 + 25994 25964 25985 + 25994 25965 25964 + 25995 25990 25951 + 25996 25990 25995 + 25996 25991 25990 + 25991 25996 25993 + 25993 25992 25991 + 25951 25950 25995 + 25956 25995 25950 + 25995 25956 25997 + 25996 25995 25997 + 25996 25997 25993 + 25994 25993 25997 + 25997 25965 25994 + 25965 25997 25956 + 25890 25932 25891 + 25932 25890 25998 + 25998 25933 25932 + 25999 25933 25998 + 25999 26000 25933 + 25933 26000 25929 + 25896 25998 25890 + 25999 25998 25896 + 25896 26001 25999 + 25999 26001 26002 + 26002 26003 25999 + 26003 26004 25999 + 26004 26000 25999 + 25929 26000 26004 + 26005 26001 25896 + 26001 26005 26006 + 26006 26002 26001 + 26007 26002 26006 + 26007 26008 26002 + 26002 26008 26009 + 26009 26003 26002 + 26009 26004 26003 + 26005 25896 25895 + 26010 26005 25895 + 26005 26010 26011 + 26011 26006 26005 + 26006 26011 26012 + 26007 26006 26012 + 26007 26012 26013 + 26008 26007 26013 + 26013 26014 26008 + 26009 26008 26014 + 25901 26010 25895 + 26015 26010 25901 + 26010 26015 26016 + 26016 26011 26010 + 26017 26011 26016 + 26017 26012 26011 + 26012 26017 26018 + 26018 26013 26012 + 26013 26018 26019 + 26019 26014 26013 + 26014 26019 26009 + 26015 25901 25900 + 26015 25900 25906 + 26015 25906 26020 + 26020 26016 26015 + 26016 26020 26021 + 26017 26016 26021 + 26018 26017 26021 + 26018 26021 26022 + 26022 26023 26018 + 26019 26018 26023 + 26024 26020 25906 + 26025 26020 26024 + 26025 26021 26020 + 26022 26021 26025 + 26026 26022 26025 + 26022 26026 26027 + 26027 26028 26022 + 26022 26028 26023 + 25906 25905 26024 + 26029 26024 25905 + 26025 26024 26029 + 26029 26030 26025 + 26025 26030 26026 + 26026 26030 26031 + 26027 26026 26031 + 26031 26032 26027 + 26028 26027 26032 + 25905 25914 26029 + 26029 25914 25913 + 26033 26029 25913 + 26031 26029 26033 + 26031 26030 26029 + 26033 25913 25922 + 25922 26034 26033 + 26034 26032 26033 + 26032 26031 26033 + 26034 25922 25921 + 26035 26034 25921 + 26036 26034 26035 + 26036 26032 26034 + 26032 26036 26028 + 26037 26028 26036 + 26028 26037 26023 + 26023 26037 26038 + 26023 26038 26019 + 26039 26035 25921 + 26036 26035 26039 + 26039 26040 26036 + 26036 26040 26037 + 26040 26041 26037 + 26041 26038 26037 + 26038 26041 26042 + 26042 26019 26038 + 26019 26042 26009 + 26009 26042 26004 + 25921 25930 26039 + 26039 25930 25929 + 26043 26039 25929 + 26041 26039 26043 + 26041 26040 26039 + 26004 26043 25929 + 26041 26043 26004 + 26004 26042 26041 + 26044 26045 26046 + 26047 26045 26044 + 26048 26045 26047 + 26045 26048 26049 + 26049 26050 26045 + 26046 26051 26044 + 26052 26044 26051 + 26044 26052 26053 + 26053 26054 26044 + 26044 26054 26047 + 26055 26051 26046 + 26056 26051 26055 + 26051 26056 26052 + 26057 26052 26056 + 26053 26052 26057 + 26057 26058 26053 + 26059 26053 26058 + 26054 26053 26059 + 26046 26060 26055 + 26061 26055 26060 + 26062 26055 26061 + 26055 26062 26056 + 26056 26062 26063 + 26063 26064 26056 + 26056 26064 26057 + 26060 26046 26065 + 26060 26065 26066 + 26066 26067 26060 + 26060 26067 26068 + 26068 26061 26060 + 26069 26065 26046 + 26065 26069 26070 + 26070 26066 26065 + 26071 26066 26070 + 26066 26071 26072 + 26072 26067 26066 + 26067 26072 26073 + 26073 26068 26067 + 26050 26069 26046 + 26050 26049 26069 + 26069 26049 26070 + 26049 26074 26070 + 26075 26070 26074 + 26070 26075 26071 + 26076 26071 26075 + 26072 26071 26076 + 26076 26077 26072 + 26072 26077 26078 + 26073 26072 26078 + 26074 26049 26048 + 26048 26079 26074 + 26080 26074 26079 + 26074 26080 26075 + 26075 26080 26081 + 26081 26082 26075 + 26075 26082 26083 + 26083 26076 26075 + 26079 26048 26084 + 26085 26079 26084 + 26085 26086 26079 + 26079 26086 26080 + 26080 26086 26087 + 26087 26081 26080 + 26088 26081 26087 + 26081 26088 26082 + 26084 26048 26047 + 26084 26047 26089 + 26089 26090 26084 + 26084 26090 26085 + 26090 26091 26085 + 26086 26085 26091 + 26091 26092 26086 + 26086 26092 26087 + 26093 26089 26047 + 26089 26093 26094 + 26095 26089 26094 + 26089 26095 26090 + 26090 26095 26096 + 26096 26091 26090 + 26092 26091 26096 + 26047 26054 26093 + 26059 26093 26054 + 26093 26059 26097 + 26097 26094 26093 + 26094 26097 26098 + 26098 26099 26094 + 26094 26099 26100 + 26096 26094 26100 + 26096 26095 26094 + 26101 26097 26059 + 26097 26101 26102 + 26098 26097 26102 + 26102 26103 26098 + 26104 26098 26103 + 26099 26098 26104 + 26105 26101 26059 + 26101 26105 26106 + 26101 26106 26107 + 26107 26102 26101 + 26108 26102 26107 + 26102 26108 26109 + 26109 26103 26102 + 26058 26105 26059 + 26058 26110 26105 + 26110 26106 26105 + 26107 26106 26110 + 26107 26110 26111 + 26108 26107 26111 + 26111 26112 26108 + 26108 26112 26113 + 26113 26109 26108 + 26114 26109 26113 + 26103 26109 26114 + 26115 26110 26058 + 26110 26115 26116 + 26116 26111 26110 + 26112 26111 26116 + 26117 26112 26116 + 26112 26117 26118 + 26118 26113 26112 + 26119 26113 26118 + 26113 26119 26114 + 26058 26057 26115 + 26115 26057 26064 + 26064 26120 26115 + 26116 26115 26120 + 26120 26121 26116 + 26117 26116 26121 + 26121 26122 26117 + 26117 26122 26123 + 26118 26117 26123 + 26124 26120 26064 + 26120 26124 26125 + 26125 26121 26120 + 26122 26121 26125 + 26122 26125 26126 + 26126 26123 26122 + 26064 26063 26124 + 26124 26063 26127 + 26127 26128 26124 + 26124 26128 26129 + 26125 26124 26129 + 26129 26126 26125 + 26130 26126 26129 + 26130 26123 26126 + 26127 26063 26062 + 26062 26131 26127 + 26131 26132 26127 + 26133 26127 26132 + 26127 26133 26128 + 26128 26133 26134 + 26134 26129 26128 + 26061 26131 26062 + 26135 26131 26061 + 26131 26135 26136 + 26136 26132 26131 + 26132 26136 26137 + 26132 26137 26133 + 26134 26133 26137 + 26137 26138 26134 + 26139 26134 26138 + 26129 26134 26139 + 26061 26140 26135 + 26135 26140 26141 + 26141 26142 26135 + 26135 26142 26143 + 26143 26136 26135 + 26137 26136 26143 + 26143 26138 26137 + 26144 26138 26143 + 26138 26144 26139 + 26140 26061 26068 + 26068 26145 26140 + 26140 26145 26146 + 26146 26141 26140 + 26147 26141 26146 + 26141 26147 26148 + 26148 26142 26141 + 26142 26148 26149 + 26149 26143 26142 + 26143 26149 26144 + 26145 26068 26073 + 26073 26150 26145 + 26145 26150 26151 + 26151 26152 26145 + 26145 26152 26146 + 26153 26146 26152 + 26146 26153 26154 + 26146 26154 26147 + 26150 26073 26155 + 26155 26156 26150 + 26151 26150 26156 + 26156 26157 26151 + 26158 26151 26157 + 26158 26152 26151 + 26152 26158 26153 + 26078 26155 26073 + 26159 26155 26078 + 26155 26159 26156 + 26156 26159 26160 + 26160 26157 26156 + 26161 26157 26160 + 26157 26161 26158 + 26158 26161 26162 + 26153 26158 26162 + 26162 26163 26153 + 26154 26153 26163 + 26078 26164 26159 + 26160 26159 26164 + 26165 26160 26164 + 26166 26160 26165 + 26160 26166 26161 + 26161 26166 26167 + 26167 26162 26161 + 26168 26164 26078 + 26164 26168 26169 + 26169 26170 26164 + 26164 26170 26165 + 26168 26078 26077 + 26077 26171 26168 + 26168 26171 26172 + 26172 26173 26168 + 26173 26169 26168 + 26174 26169 26173 + 26169 26174 26170 + 26170 26174 26175 + 26175 26165 26170 + 26076 26171 26077 + 26171 26076 26083 + 26083 26172 26171 + 26176 26172 26083 + 26172 26176 26177 + 26177 26173 26172 + 26173 26177 26178 + 26178 26179 26173 + 26173 26179 26174 + 26175 26174 26179 + 26176 26083 26180 + 26180 26181 26176 + 26176 26181 26182 + 26177 26176 26182 + 26182 26183 26177 + 26183 26184 26177 + 26178 26177 26184 + 26082 26180 26083 + 26185 26180 26082 + 26185 26181 26180 + 26181 26185 26186 + 26186 26182 26181 + 26182 26186 26187 + 26183 26182 26187 + 26082 26088 26185 + 26185 26088 26188 + 26186 26185 26188 + 26187 26186 26188 + 26188 26189 26187 + 26187 26189 26190 + 26190 26183 26187 + 26183 26190 26191 + 26183 26191 26192 + 26192 26184 26183 + 26087 26188 26088 + 26188 26087 26193 + 26188 26193 26189 + 26194 26189 26193 + 26189 26194 26190 + 26195 26190 26194 + 26190 26195 26191 + 26191 26195 26196 + 26192 26191 26196 + 26193 26087 26092 + 26092 26197 26193 + 26193 26197 26198 + 26198 26199 26193 + 26199 26194 26193 + 26194 26199 26200 + 26200 26201 26194 + 26194 26201 26195 + 26092 26096 26197 + 26197 26096 26100 + 26100 26198 26197 + 26198 26100 26202 + 26202 26203 26198 + 26198 26203 26200 + 26200 26199 26198 + 26202 26100 26099 + 26099 26204 26202 + 26202 26204 26205 + 26205 26206 26202 + 26203 26202 26206 + 26206 26207 26203 + 26200 26203 26207 + 26207 26208 26200 + 26201 26200 26208 + 26104 26204 26099 + 26204 26104 26209 + 26209 26205 26204 + 26205 26209 26210 + 26210 26211 26205 + 26205 26211 26212 + 26212 26206 26205 + 26207 26206 26212 + 26213 26209 26104 + 26210 26209 26213 + 26213 26214 26210 + 26210 26214 26215 + 26215 26216 26210 + 26211 26210 26216 + 26216 26217 26211 + 26212 26211 26217 + 26104 26218 26213 + 26219 26213 26218 + 26213 26219 26220 + 26220 26214 26213 + 26214 26220 26221 + 26221 26215 26214 + 26103 26218 26104 + 26114 26218 26103 + 26218 26114 26219 + 26119 26219 26114 + 26220 26219 26119 + 26119 26222 26220 + 26221 26220 26222 + 26222 26223 26221 + 26224 26221 26223 + 26215 26221 26224 + 26224 26225 26215 + 26215 26225 26226 + 26226 26216 26215 + 26217 26216 26226 + 26118 26222 26119 + 26222 26118 26227 + 26227 26223 26222 + 26223 26227 26228 + 26228 26229 26223 + 26223 26229 26224 + 26224 26229 26230 + 26230 26231 26224 + 26225 26224 26231 + 26123 26227 26118 + 26228 26227 26123 + 26123 26130 26228 + 26228 26130 26232 + 26233 26228 26232 + 26229 26228 26233 + 26233 26230 26229 + 26230 26233 26234 + 26234 26235 26230 + 26230 26235 26236 + 26236 26231 26230 + 26129 26232 26130 + 26139 26232 26129 + 26232 26139 26237 + 26237 26238 26232 + 26232 26238 26233 + 26234 26233 26238 + 26238 26239 26234 + 26234 26239 26240 + 26240 26241 26234 + 26235 26234 26241 + 26242 26237 26139 + 26243 26237 26242 + 26238 26237 26243 + 26243 26239 26238 + 26239 26243 26244 + 26244 26240 26239 + 26139 26144 26242 + 26245 26242 26144 + 26242 26245 26246 + 26242 26246 26243 + 26243 26246 26247 + 26247 26244 26243 + 26248 26244 26247 + 26240 26244 26248 + 26144 26149 26245 + 26249 26245 26149 + 26246 26245 26249 + 26249 26250 26246 + 26246 26250 26247 + 26251 26247 26250 + 26247 26251 26252 + 26252 26253 26247 + 26247 26253 26248 + 26149 26148 26249 + 26254 26249 26148 + 26249 26254 26255 + 26255 26250 26249 + 26250 26255 26251 + 26251 26255 26256 + 26256 26257 26251 + 26252 26251 26257 + 26148 26147 26254 + 26258 26254 26147 + 26255 26254 26258 + 26258 26256 26255 + 26259 26256 26258 + 26256 26259 26260 + 26260 26257 26256 + 26257 26260 26261 + 26261 26262 26257 + 26257 26262 26252 + 26147 26154 26258 + 26163 26258 26154 + 26258 26163 26259 + 26259 26163 26162 + 26162 26263 26259 + 26259 26263 26264 + 26264 26260 26259 + 26261 26260 26264 + 26264 26265 26261 + 26266 26261 26265 + 26262 26261 26266 + 26266 26267 26262 + 26252 26262 26267 + 26268 26263 26162 + 26263 26268 26269 + 26269 26264 26263 + 26264 26269 26270 + 26270 26265 26264 + 26265 26270 26271 + 26271 26272 26265 + 26265 26272 26266 + 26162 26167 26268 + 26268 26167 26273 + 26273 26274 26268 + 26268 26274 26275 + 26275 26269 26268 + 26270 26269 26275 + 26275 26276 26270 + 26270 26276 26277 + 26277 26271 26270 + 26273 26167 26166 + 26166 26278 26273 + 26279 26273 26278 + 26273 26279 26280 + 26280 26274 26273 + 26274 26280 26281 + 26281 26275 26274 + 26275 26281 26282 + 26282 26276 26275 + 26165 26278 26166 + 26283 26278 26165 + 26278 26283 26279 + 26284 26279 26283 + 26280 26279 26284 + 26284 26285 26280 + 26281 26280 26285 + 26285 26286 26281 + 26282 26281 26286 + 26165 26175 26283 + 26283 26175 26287 + 26287 26288 26283 + 26283 26288 26284 + 26289 26284 26288 + 26284 26289 26290 + 26290 26285 26284 + 26285 26290 26291 + 26291 26286 26285 + 26179 26287 26175 + 26292 26287 26179 + 26288 26287 26292 + 26292 26293 26288 + 26288 26293 26289 + 26294 26289 26293 + 26290 26289 26294 + 26294 26295 26290 + 26290 26295 26296 + 26296 26291 26290 + 26179 26178 26292 + 26297 26292 26178 + 26293 26292 26297 + 26297 26298 26293 + 26293 26298 26294 + 26299 26294 26298 + 26294 26299 26300 + 26300 26295 26294 + 26295 26300 26301 + 26301 26296 26295 + 26178 26302 26297 + 26303 26297 26302 + 26298 26297 26303 + 26303 26304 26298 + 26298 26304 26299 + 26305 26299 26304 + 26300 26299 26305 + 26184 26302 26178 + 26302 26184 26192 + 26192 26306 26302 + 26302 26306 26303 + 26303 26306 26307 + 26307 26308 26303 + 26304 26303 26308 + 26308 26309 26304 + 26304 26309 26305 + 26306 26192 26310 + 26310 26307 26306 + 26311 26307 26310 + 26307 26311 26312 + 26312 26308 26307 + 26308 26312 26313 + 26313 26309 26308 + 26309 26313 26314 + 26314 26305 26309 + 26196 26310 26192 + 26196 26315 26310 + 26315 26311 26310 + 26311 26315 26316 + 26316 26312 26311 + 26313 26312 26316 + 26316 26317 26313 + 26314 26313 26317 + 26315 26196 26318 + 26318 26208 26315 + 26315 26208 26207 + 26207 26319 26315 + 26315 26319 26316 + 26320 26316 26319 + 26317 26316 26320 + 26195 26318 26196 + 26318 26195 26201 + 26208 26318 26201 + 26212 26319 26207 + 26319 26212 26320 + 26217 26320 26212 + 26317 26320 26217 + 26217 26321 26317 + 26317 26321 26314 + 26321 26322 26314 + 26323 26314 26322 + 26305 26314 26323 + 26323 26324 26305 + 26305 26324 26300 + 26226 26321 26217 + 26321 26226 26325 + 26325 26322 26321 + 26322 26325 26326 + 26326 26327 26322 + 26322 26327 26323 + 26323 26327 26328 + 26328 26329 26323 + 26324 26323 26329 + 26330 26325 26226 + 26326 26325 26330 + 26330 26331 26326 + 26326 26331 26332 + 26332 26333 26326 + 26327 26326 26333 + 26333 26328 26327 + 26226 26225 26330 + 26231 26330 26225 + 26330 26231 26236 + 26236 26331 26330 + 26331 26236 26334 + 26334 26332 26331 + 26332 26334 26335 + 26335 26336 26332 + 26332 26336 26337 + 26337 26333 26332 + 26328 26333 26337 + 26338 26334 26236 + 26335 26334 26338 + 26338 26339 26335 + 26335 26339 26340 + 26340 26341 26335 + 26336 26335 26341 + 26236 26235 26338 + 26241 26338 26235 + 26338 26241 26342 + 26342 26339 26338 + 26339 26342 26343 + 26343 26340 26339 + 26340 26343 26344 + 26344 26345 26340 + 26340 26345 26346 + 26346 26341 26340 + 26342 26241 26240 + 26240 26347 26342 + 26342 26347 26348 + 26348 26343 26342 + 26344 26343 26348 + 26348 26349 26344 + 26344 26349 26350 + 26350 26351 26344 + 26345 26344 26351 + 26248 26347 26240 + 26347 26248 26352 + 26352 26353 26347 + 26347 26353 26348 + 26353 26354 26348 + 26354 26355 26348 + 26355 26356 26348 + 26349 26348 26356 + 26357 26352 26248 + 26358 26352 26357 + 26353 26352 26358 + 26358 26359 26353 + 26353 26359 26360 + 26360 26354 26353 + 26354 26360 26361 + 26361 26355 26354 + 26248 26253 26357 + 26362 26357 26253 + 26357 26362 26363 + 26363 26364 26357 + 26357 26364 26358 + 26358 26364 26365 + 26365 26366 26358 + 26359 26358 26366 + 26253 26252 26362 + 26267 26362 26252 + 26363 26362 26267 + 26267 26367 26363 + 26363 26367 26368 + 26368 26369 26363 + 26364 26363 26369 + 26369 26365 26364 + 26266 26367 26267 + 26367 26266 26370 + 26370 26371 26367 + 26367 26371 26368 + 26372 26370 26266 + 26373 26370 26372 + 26371 26370 26373 + 26371 26373 26374 + 26374 26368 26371 + 26375 26372 26266 + 26376 26372 26375 + 26377 26372 26376 + 26372 26377 26373 + 26373 26377 26378 + 26378 26374 26373 + 26379 26374 26378 + 26368 26374 26379 + 26272 26375 26266 + 26380 26375 26272 + 26375 26380 26381 + 26381 26382 26375 + 26375 26382 26376 + 26272 26383 26380 + 26384 26380 26383 + 26381 26380 26384 + 26384 26385 26381 + 26386 26381 26385 + 26382 26381 26386 + 26386 26387 26382 + 26376 26382 26387 + 26388 26383 26272 + 26383 26388 26389 + 26389 26390 26383 + 26383 26390 26384 + 26391 26384 26390 + 26385 26384 26391 + 26272 26271 26388 + 26388 26271 26277 + 26277 26392 26388 + 26388 26392 26393 + 26393 26389 26388 + 26394 26389 26393 + 26389 26394 26395 + 26390 26389 26395 + 26390 26395 26391 + 26396 26392 26277 + 26392 26396 26397 + 26397 26393 26392 + 26393 26397 26398 + 26398 26399 26393 + 26393 26399 26394 + 26277 26400 26396 + 26396 26400 26401 + 26401 26402 26396 + 26396 26402 26403 + 26403 26397 26396 + 26398 26397 26403 + 26400 26277 26276 + 26276 26282 26400 + 26401 26400 26282 + 26282 26404 26401 + 26405 26401 26404 + 26401 26405 26406 + 26406 26402 26401 + 26402 26406 26407 + 26407 26403 26402 + 26286 26404 26282 + 26408 26404 26286 + 26404 26408 26405 + 26409 26405 26408 + 26406 26405 26409 + 26409 26410 26406 + 26406 26410 26411 + 26411 26407 26406 + 26412 26407 26411 + 26403 26407 26412 + 26286 26291 26408 + 26408 26291 26296 + 26296 26413 26408 + 26408 26413 26409 + 26414 26409 26413 + 26414 26410 26409 + 26410 26414 26415 + 26415 26416 26410 + 26410 26416 26411 + 26417 26413 26296 + 26413 26417 26414 + 26414 26417 26418 + 26418 26419 26414 + 26419 26420 26414 + 26420 26421 26414 + 26421 26415 26414 + 26296 26301 26417 + 26417 26301 26422 + 26422 26418 26417 + 26423 26418 26422 + 26418 26423 26424 + 26424 26419 26418 + 26422 26301 26300 + 26300 26324 26422 + 26329 26422 26324 + 26422 26329 26423 + 26423 26329 26328 + 26328 26425 26423 + 26423 26425 26426 + 26426 26424 26423 + 26427 26424 26426 + 26419 26424 26427 + 26427 26428 26419 + 26419 26428 26429 + 26429 26420 26419 + 26337 26425 26328 + 26425 26337 26430 + 26430 26426 26425 + 26426 26430 26431 + 26431 26432 26426 + 26426 26432 26427 + 26427 26432 26433 + 26433 26434 26427 + 26428 26427 26434 + 26430 26337 26336 + 26336 26435 26430 + 26431 26430 26435 + 26435 26436 26431 + 26431 26436 26437 + 26437 26438 26431 + 26432 26431 26438 + 26438 26433 26432 + 26341 26435 26336 + 26435 26341 26346 + 26346 26436 26435 + 26436 26346 26439 + 26439 26437 26436 + 26437 26439 26440 + 26440 26441 26437 + 26437 26441 26442 + 26442 26438 26437 + 26433 26438 26442 + 26443 26439 26346 + 26440 26439 26443 + 26443 26444 26440 + 26440 26444 26445 + 26445 26446 26440 + 26441 26440 26446 + 26446 26447 26441 + 26442 26441 26447 + 26346 26345 26443 + 26351 26443 26345 + 26443 26351 26448 + 26448 26444 26443 + 26444 26448 26449 + 26449 26445 26444 + 26445 26449 26450 + 26450 26451 26445 + 26446 26445 26451 + 26452 26446 26451 + 26447 26446 26452 + 26448 26351 26350 + 26350 26453 26448 + 26449 26448 26453 + 26453 26454 26449 + 26450 26449 26454 + 26454 26455 26450 + 26456 26450 26455 + 26450 26456 26457 + 26451 26450 26457 + 26457 26452 26451 + 26458 26453 26350 + 26453 26458 26459 + 26459 26454 26453 + 26454 26459 26460 + 26460 26455 26454 + 26455 26460 26461 + 26455 26461 26456 + 26462 26456 26461 + 26457 26456 26462 + 26350 26463 26458 + 26458 26463 26464 + 26464 26465 26458 + 26466 26458 26465 + 26466 26459 26458 + 26460 26459 26466 + 26463 26350 26349 + 26349 26467 26463 + 26464 26463 26467 + 26467 26468 26464 + 26469 26464 26468 + 26464 26469 26470 + 26470 26465 26464 + 26465 26470 26471 + 26471 26466 26465 + 26356 26467 26349 + 26467 26356 26472 + 26472 26468 26467 + 26468 26472 26473 + 26473 26474 26468 + 26468 26474 26469 + 26475 26469 26474 + 26470 26469 26475 + 26472 26356 26476 + 26476 26477 26472 + 26477 26473 26472 + 26473 26477 26478 + 26479 26473 26478 + 26479 26480 26473 + 26474 26473 26480 + 26356 26355 26476 + 26481 26476 26355 + 26476 26481 26482 + 26482 26477 26476 + 26477 26482 26483 + 26483 26478 26477 + 26355 26361 26481 + 26481 26361 26484 + 26484 26485 26481 + 26482 26481 26485 + 26485 26486 26482 + 26483 26482 26486 + 26486 26487 26483 + 26488 26483 26487 + 26478 26483 26488 + 26489 26484 26361 + 26484 26489 26490 + 26490 26491 26484 + 26484 26491 26492 + 26492 26485 26484 + 26486 26485 26492 + 26361 26360 26489 + 26489 26360 26359 + 26359 26493 26489 + 26490 26489 26493 + 26493 26494 26490 + 26495 26490 26494 + 26495 26496 26490 + 26491 26490 26496 + 26496 26497 26491 + 26497 26492 26491 + 26366 26493 26359 + 26493 26366 26498 + 26498 26494 26493 + 26494 26498 26495 + 26498 26499 26495 + 26495 26499 26500 + 26500 26501 26495 + 26496 26495 26501 + 26502 26496 26501 + 26497 26496 26502 + 26498 26366 26365 + 26365 26503 26498 + 26498 26503 26504 + 26504 26499 26498 + 26500 26499 26504 + 26504 26505 26500 + 26506 26500 26505 + 26501 26500 26506 + 26506 26507 26501 + 26507 26502 26501 + 26508 26503 26365 + 26503 26508 26509 + 26509 26504 26503 + 26504 26509 26510 + 26510 26505 26504 + 26505 26510 26511 + 26511 26512 26505 + 26505 26512 26506 + 26365 26369 26508 + 26508 26369 26368 + 26368 26513 26508 + 26508 26513 26514 + 26514 26509 26508 + 26510 26509 26514 + 26514 26515 26510 + 26516 26510 26515 + 26516 26511 26510 + 26379 26513 26368 + 26513 26379 26517 + 26517 26514 26513 + 26514 26517 26518 + 26518 26515 26514 + 26515 26518 26516 + 26518 26519 26516 + 26516 26519 26520 + 26520 26521 26516 + 26511 26516 26521 + 26522 26517 26379 + 26518 26517 26522 + 26522 26523 26518 + 26524 26518 26523 + 26524 26519 26518 + 26520 26519 26524 + 26524 26525 26520 + 26526 26520 26525 + 26521 26520 26526 + 26522 26379 26527 + 26528 26522 26527 + 26522 26528 26529 + 26529 26523 26522 + 26523 26529 26524 + 26529 26530 26524 + 26524 26530 26531 + 26531 26525 26524 + 26378 26527 26379 + 26532 26527 26378 + 26527 26532 26528 + 26528 26532 26533 + 26533 26534 26528 + 26529 26528 26534 + 26534 26535 26529 + 26536 26529 26535 + 26536 26530 26529 + 26531 26530 26536 + 26378 26537 26532 + 26532 26537 26538 + 26538 26533 26532 + 26539 26533 26538 + 26533 26539 26540 + 26540 26534 26533 + 26534 26540 26541 + 26541 26535 26534 + 26535 26541 26536 + 26537 26378 26377 + 26377 26542 26537 + 26538 26537 26542 + 26542 26488 26538 + 26487 26538 26488 + 26538 26487 26539 + 26376 26542 26377 + 26542 26376 26543 + 26543 26488 26542 + 26488 26543 26478 + 26544 26478 26543 + 26478 26544 26479 + 26543 26376 26387 + 26387 26544 26543 + 26545 26544 26387 + 26544 26545 26546 + 26546 26479 26544 + 26479 26546 26547 + 26547 26548 26479 + 26480 26479 26548 + 26387 26386 26545 + 26545 26386 26549 + 26549 26550 26545 + 26546 26545 26550 + 26550 26551 26546 + 26547 26546 26551 + 26551 26552 26547 + 26553 26547 26552 + 26548 26547 26553 + 26385 26549 26386 + 26554 26549 26385 + 26550 26549 26554 + 26554 26555 26550 + 26550 26555 26556 + 26556 26551 26550 + 26552 26551 26556 + 26385 26557 26554 + 26554 26557 26558 + 26558 26559 26554 + 26555 26554 26559 + 26559 26560 26555 + 26560 26556 26555 + 26391 26557 26385 + 26557 26391 26561 + 26561 26558 26557 + 26558 26561 26562 + 26562 26563 26558 + 26558 26563 26564 + 26564 26559 26558 + 26560 26559 26564 + 26565 26561 26391 + 26561 26565 26566 + 26562 26561 26566 + 26562 26566 26567 + 26567 26568 26562 + 26563 26562 26568 + 26568 26569 26563 + 26569 26564 26563 + 26391 26395 26565 + 26395 26394 26565 + 26394 26570 26565 + 26565 26570 26571 + 26571 26566 26565 + 26566 26571 26572 + 26572 26567 26566 + 26567 26572 26573 + 26573 26574 26567 + 26568 26567 26574 + 26570 26394 26399 + 26575 26570 26399 + 26570 26575 26576 + 26571 26570 26576 + 26577 26571 26576 + 26577 26572 26571 + 26573 26572 26577 + 26577 26578 26573 + 26579 26573 26578 + 26574 26573 26579 + 26580 26575 26399 + 26575 26580 26581 + 26581 26576 26575 + 26576 26581 26582 + 26582 26577 26576 + 26577 26582 26583 + 26583 26578 26577 + 26584 26578 26583 + 26578 26584 26579 + 26399 26398 26580 + 26585 26580 26398 + 26581 26580 26585 + 26585 26586 26581 + 26582 26581 26586 + 26586 26587 26582 + 26583 26582 26587 + 26587 26588 26583 + 26583 26588 26589 + 26589 26584 26583 + 26398 26590 26585 + 26591 26585 26590 + 26585 26591 26592 + 26592 26586 26585 + 26586 26592 26587 + 26592 26593 26587 + 26587 26593 26594 + 26594 26588 26587 + 26589 26588 26594 + 26403 26590 26398 + 26412 26590 26403 + 26590 26412 26591 + 26595 26591 26412 + 26592 26591 26595 + 26595 26596 26592 + 26597 26592 26596 + 26597 26593 26592 + 26594 26593 26597 + 26597 26598 26594 + 26598 26599 26594 + 26599 26589 26594 + 26584 26589 26599 + 26412 26600 26595 + 26601 26595 26600 + 26595 26601 26602 + 26602 26596 26595 + 26596 26602 26597 + 26602 26603 26597 + 26597 26603 26604 + 26604 26598 26597 + 26411 26600 26412 + 26605 26600 26411 + 26600 26605 26601 + 26606 26601 26605 + 26602 26601 26606 + 26606 26607 26602 + 26608 26602 26607 + 26608 26603 26602 + 26603 26608 26609 + 26604 26603 26609 + 26411 26610 26605 + 26605 26610 26611 + 26611 26612 26605 + 26606 26605 26612 + 26612 26613 26606 + 26613 26614 26606 + 26606 26614 26607 + 26610 26411 26416 + 26416 26615 26610 + 26611 26610 26615 + 26615 26616 26611 + 26617 26611 26616 + 26611 26617 26613 + 26613 26612 26611 + 26416 26415 26615 + 26615 26415 26421 + 26421 26616 26615 + 26553 26616 26421 + 26616 26553 26617 + 26552 26617 26553 + 26613 26617 26552 + 26552 26618 26613 + 26614 26613 26618 + 26618 26619 26614 + 26620 26614 26619 + 26614 26620 26607 + 26607 26620 26608 + 26421 26621 26553 + 26553 26621 26548 + 26622 26548 26621 + 26622 26480 26548 + 26623 26480 26622 + 26480 26623 26474 + 26624 26621 26421 + 26621 26624 26622 + 26625 26622 26624 + 26622 26625 26623 + 26623 26625 26626 + 26626 26475 26623 + 26474 26623 26475 + 26420 26624 26421 + 26624 26420 26429 + 26429 26627 26624 + 26624 26627 26625 + 26626 26625 26627 + 26627 26628 26626 + 26629 26626 26628 + 26475 26626 26629 + 26629 26630 26475 + 26475 26630 26470 + 26627 26429 26631 + 26631 26628 26627 + 26628 26631 26632 + 26632 26633 26628 + 26628 26633 26629 + 26634 26629 26633 + 26634 26635 26629 + 26630 26629 26635 + 26636 26631 26429 + 26632 26631 26636 + 26636 26637 26632 + 26638 26632 26637 + 26638 26639 26632 + 26633 26632 26639 + 26639 26634 26633 + 26429 26428 26636 + 26434 26636 26428 + 26636 26434 26640 + 26640 26637 26636 + 26637 26640 26638 + 26640 26641 26638 + 26638 26641 26642 + 26642 26643 26638 + 26639 26638 26643 + 26644 26639 26643 + 26634 26639 26644 + 26640 26434 26433 + 26433 26645 26640 + 26641 26640 26645 + 26646 26641 26645 + 26642 26641 26646 + 26646 26647 26642 + 26648 26642 26647 + 26643 26642 26648 + 26648 26649 26643 + 26644 26643 26649 + 26442 26645 26433 + 26645 26442 26650 + 26650 26646 26645 + 26646 26650 26651 + 26651 26647 26646 + 26647 26651 26652 + 26652 26653 26647 + 26647 26653 26648 + 26654 26648 26653 + 26649 26648 26654 + 26447 26650 26442 + 26651 26650 26447 + 26447 26655 26651 + 26656 26651 26655 + 26656 26652 26651 + 26657 26652 26656 + 26653 26652 26657 + 26657 26658 26653 + 26653 26658 26654 + 26452 26655 26447 + 26655 26452 26656 + 26452 26659 26656 + 26656 26659 26660 + 26660 26661 26656 + 26656 26661 26657 + 26661 26662 26657 + 26662 26663 26657 + 26663 26658 26657 + 26654 26658 26663 + 26457 26659 26452 + 26659 26457 26664 + 26660 26659 26664 + 26665 26660 26664 + 26661 26660 26665 + 26665 26662 26661 + 26662 26665 26666 + 26666 26663 26662 + 26663 26666 26654 + 26666 26667 26654 + 26654 26667 26649 + 26668 26649 26667 + 26649 26668 26644 + 26462 26664 26457 + 26664 26462 26669 + 26669 26665 26664 + 26665 26669 26670 + 26666 26665 26670 + 26667 26666 26670 + 26670 26671 26667 + 26671 26668 26667 + 26672 26668 26671 + 26668 26672 26673 + 26673 26644 26668 + 26644 26673 26634 + 26462 26674 26669 + 26674 26670 26669 + 26674 26675 26670 + 26670 26675 26676 + 26676 26671 26670 + 26671 26676 26672 + 26677 26672 26676 + 26672 26677 26678 + 26672 26678 26673 + 26674 26462 26679 + 26679 26680 26674 + 26680 26681 26674 + 26681 26675 26674 + 26675 26681 26682 + 26675 26682 26676 + 26682 26677 26676 + 26461 26679 26462 + 26683 26679 26461 + 26679 26683 26680 + 26683 26684 26680 + 26680 26684 26685 + 26685 26681 26680 + 26681 26685 26686 + 26686 26682 26681 + 26682 26686 26687 + 26687 26677 26682 + 26461 26688 26683 + 26683 26688 26689 + 26689 26690 26683 + 26684 26683 26690 + 26690 26691 26684 + 26691 26685 26684 + 26685 26691 26686 + 26687 26686 26691 + 26460 26688 26461 + 26689 26688 26460 + 26689 26460 26692 + 26692 26693 26689 + 26693 26694 26689 + 26689 26694 26691 + 26691 26690 26689 + 26466 26692 26460 + 26693 26692 26466 + 26466 26471 26693 + 26693 26471 26695 + 26695 26696 26693 + 26687 26693 26696 + 26687 26694 26693 + 26691 26694 26687 + 26695 26471 26470 + 26695 26470 26630 + 26635 26695 26630 + 26695 26635 26678 + 26678 26696 26695 + 26696 26678 26677 + 26677 26687 26696 + 26678 26635 26673 + 26635 26634 26673 + 26556 26618 26552 + 26618 26556 26619 + 26556 26697 26619 + 26619 26697 26698 + 26619 26698 26620 + 26699 26620 26698 + 26620 26699 26608 + 26560 26697 26556 + 26700 26697 26560 + 26697 26700 26698 + 26698 26700 26701 + 26701 26699 26698 + 26702 26699 26701 + 26608 26699 26702 + 26702 26609 26608 + 26609 26702 26703 + 26703 26604 26609 + 26560 26704 26700 + 26705 26700 26704 + 26705 26706 26700 + 26700 26706 26701 + 26701 26706 26707 + 26707 26708 26701 + 26701 26708 26702 + 26564 26704 26560 + 26704 26564 26709 + 26709 26705 26704 + 26705 26709 26710 + 26710 26711 26705 + 26705 26711 26707 + 26707 26706 26705 + 26569 26709 26564 + 26709 26569 26712 + 26710 26709 26712 + 26713 26710 26712 + 26710 26713 26714 + 26711 26710 26714 + 26714 26707 26711 + 26707 26714 26715 + 26708 26707 26715 + 26708 26715 26716 + 26716 26702 26708 + 26702 26716 26703 + 26717 26712 26569 + 26712 26717 26718 + 26718 26713 26712 + 26713 26718 26715 + 26715 26714 26713 + 26569 26568 26717 + 26717 26568 26574 + 26718 26717 26574 + 26719 26718 26574 + 26715 26718 26719 + 26719 26716 26715 + 26716 26719 26579 + 26716 26579 26703 + 26720 26703 26579 + 26703 26720 26604 + 26598 26604 26720 + 26720 26599 26598 + 26599 26720 26584 + 26579 26719 26574 + 26584 26720 26579 + 26539 26487 26486 + 26486 26721 26539 + 26539 26721 26722 + 26722 26540 26539 + 26540 26722 26723 + 26541 26540 26723 + 26492 26721 26486 + 26721 26492 26724 + 26724 26722 26721 + 26722 26724 26725 + 26725 26723 26722 + 26723 26725 26726 + 26726 26727 26723 + 26727 26541 26723 + 26727 26728 26541 + 26541 26728 26536 + 26497 26724 26492 + 26724 26497 26729 + 26725 26724 26729 + 26730 26725 26729 + 26730 26726 26725 + 26726 26730 26731 + 26732 26726 26731 + 26727 26726 26732 + 26732 26733 26727 + 26728 26727 26733 + 26502 26729 26497 + 26729 26502 26734 + 26734 26730 26729 + 26730 26734 26735 + 26735 26731 26730 + 26731 26735 26736 + 26736 26737 26731 + 26732 26731 26737 + 26738 26732 26737 + 26733 26732 26738 + 26507 26734 26502 + 26734 26507 26739 + 26735 26734 26739 + 26736 26735 26739 + 26740 26736 26739 + 26741 26736 26740 + 26737 26736 26741 + 26737 26741 26738 + 26741 26742 26738 + 26743 26738 26742 + 26738 26743 26733 + 26744 26739 26507 + 26739 26744 26740 + 26744 26745 26740 + 26740 26745 26746 + 26746 26526 26740 + 26740 26526 26741 + 26742 26741 26526 + 26507 26506 26744 + 26744 26506 26512 + 26512 26747 26744 + 26745 26744 26747 + 26746 26745 26747 + 26747 26748 26746 + 26746 26748 26521 + 26526 26746 26521 + 26748 26747 26512 + 26512 26511 26748 + 26748 26511 26521 + 26525 26742 26526 + 26525 26531 26742 + 26531 26749 26742 + 26742 26749 26743 + 26750 26743 26749 + 26743 26750 26733 + 26750 26728 26733 + 26536 26728 26750 + 26749 26531 26751 + 26751 26750 26749 + 26750 26751 26536 + 26536 26751 26531 + 26752 26753 26754 + 26753 26755 26754 + 26756 26754 26755 + 26754 26756 26757 + 26757 26758 26754 + 26754 26758 26752 + 26759 26752 26758 + 26760 26752 26759 + 26761 26755 26753 + 26762 26755 26761 + 26755 26762 26756 + 26756 26762 26763 + 26763 26764 26756 + 26757 26756 26764 + 26753 26765 26761 + 26766 26761 26765 + 26767 26761 26766 + 26761 26767 26762 + 26762 26767 26768 + 26768 26763 26762 + 26769 26763 26768 + 26763 26769 26770 + 26770 26764 26763 + 26771 26766 26765 + 26772 26766 26771 + 26766 26772 26767 + 26768 26767 26772 + 26772 26773 26768 + 26774 26768 26773 + 26768 26774 26769 + 26765 26775 26771 + 26776 26771 26775 + 26777 26771 26776 + 26771 26777 26772 + 26772 26777 26778 + 26778 26773 26772 + 26779 26773 26778 + 26773 26779 26774 + 26780 26774 26779 + 26769 26774 26780 + 26781 26776 26775 + 26782 26776 26781 + 26776 26782 26777 + 26778 26777 26782 + 26782 26783 26778 + 26784 26778 26783 + 26778 26784 26779 + 26775 26785 26781 + 26781 26785 26786 + 26786 26787 26781 + 26788 26781 26787 + 26781 26788 26782 + 26782 26788 26789 + 26789 26783 26782 + 26790 26783 26789 + 26783 26790 26784 + 26791 26786 26785 + 26785 26792 26791 + 26793 26791 26792 + 26792 26794 26793 + 26795 26793 26794 + 26794 26796 26795 + 26797 26795 26796 + 26798 26795 26797 + 26795 26798 26786 + 26786 26798 26799 + 26799 26787 26786 + 26800 26787 26799 + 26787 26800 26788 + 26789 26788 26800 + 26801 26797 26796 + 26797 26801 26802 + 26802 26803 26797 + 26797 26803 26798 + 26799 26798 26803 + 26803 26804 26799 + 26805 26799 26804 + 26799 26805 26800 + 26796 26760 26801 + 26801 26760 26806 + 26806 26807 26801 + 26802 26801 26807 + 26807 26808 26802 + 26802 26808 26809 + 26809 26810 26802 + 26803 26802 26810 + 26810 26804 26803 + 26759 26806 26760 + 26806 26759 26811 + 26811 26812 26806 + 26806 26812 26813 + 26813 26807 26806 + 26808 26807 26813 + 26813 26814 26808 + 26808 26814 26815 + 26815 26809 26808 + 26811 26759 26816 + 26816 26817 26811 + 26818 26811 26817 + 26812 26811 26818 + 26818 26819 26812 + 26812 26819 26820 + 26820 26813 26812 + 26814 26813 26820 + 26758 26816 26759 + 26821 26816 26758 + 26816 26821 26822 + 26822 26817 26816 + 26817 26822 26823 + 26823 26824 26817 + 26817 26824 26818 + 26825 26818 26824 + 26819 26818 26825 + 26758 26757 26821 + 26826 26821 26757 + 26822 26821 26826 + 26826 26827 26822 + 26823 26822 26827 + 26827 26828 26823 + 26829 26823 26828 + 26824 26823 26829 + 26829 26830 26824 + 26824 26830 26825 + 26757 26831 26826 + 26832 26826 26831 + 26826 26832 26833 + 26833 26827 26826 + 26827 26833 26834 + 26834 26828 26827 + 26764 26831 26757 + 26835 26831 26764 + 26831 26835 26832 + 26836 26832 26835 + 26833 26832 26836 + 26836 26837 26833 + 26833 26837 26838 + 26838 26834 26833 + 26839 26834 26838 + 26828 26834 26839 + 26764 26770 26835 + 26835 26770 26840 + 26840 26841 26835 + 26835 26841 26836 + 26842 26836 26841 + 26836 26842 26843 + 26843 26837 26836 + 26837 26843 26844 + 26844 26838 26837 + 26840 26770 26769 + 26845 26840 26769 + 26846 26840 26845 + 26846 26841 26840 + 26841 26846 26842 + 26847 26842 26846 + 26843 26842 26847 + 26847 26848 26843 + 26844 26843 26848 + 26769 26849 26845 + 26849 26850 26845 + 26851 26845 26850 + 26852 26845 26851 + 26845 26852 26846 + 26846 26852 26847 + 26780 26849 26769 + 26849 26780 26853 + 26849 26853 26854 + 26854 26850 26849 + 26855 26850 26854 + 26850 26855 26851 + 26856 26851 26855 + 26852 26851 26856 + 26856 26857 26852 + 26852 26857 26847 + 26853 26780 26858 + 26858 26859 26853 + 26854 26853 26859 + 26859 26860 26854 + 26861 26854 26860 + 26854 26861 26855 + 26779 26858 26780 + 26862 26858 26779 + 26859 26858 26862 + 26859 26862 26863 + 26863 26860 26859 + 26864 26860 26863 + 26860 26864 26861 + 26865 26861 26864 + 26855 26861 26865 + 26865 26866 26855 + 26855 26866 26856 + 26779 26784 26862 + 26862 26784 26790 + 26863 26862 26790 + 26867 26863 26790 + 26864 26863 26867 + 26867 26868 26864 + 26864 26868 26865 + 26869 26865 26868 + 26865 26869 26870 + 26870 26866 26865 + 26866 26870 26871 + 26871 26856 26866 + 26857 26856 26871 + 26790 26872 26867 + 26873 26867 26872 + 26867 26873 26874 + 26874 26868 26867 + 26868 26874 26869 + 26875 26869 26874 + 26870 26869 26875 + 26876 26872 26790 + 26877 26872 26876 + 26872 26877 26873 + 26878 26873 26877 + 26874 26873 26878 + 26878 26879 26874 + 26874 26879 26875 + 26790 26880 26876 + 26876 26880 26881 + 26882 26876 26881 + 26876 26882 26877 + 26877 26882 26883 + 26883 26884 26877 + 26877 26884 26878 + 26789 26880 26790 + 26880 26789 26885 + 26885 26881 26880 + 26886 26881 26885 + 26881 26886 26882 + 26882 26886 26887 + 26887 26883 26882 + 26888 26883 26887 + 26884 26883 26888 + 26800 26885 26789 + 26889 26885 26800 + 26885 26889 26890 + 26890 26886 26885 + 26886 26890 26891 + 26891 26887 26886 + 26892 26887 26891 + 26887 26892 26888 + 26800 26805 26889 + 26893 26889 26805 + 26890 26889 26893 + 26893 26894 26890 + 26890 26894 26895 + 26891 26890 26895 + 26895 26896 26891 + 26897 26891 26896 + 26891 26897 26892 + 26805 26898 26893 + 26899 26893 26898 + 26893 26899 26900 + 26900 26894 26893 + 26894 26900 26901 + 26901 26895 26894 + 26804 26898 26805 + 26902 26898 26804 + 26898 26902 26899 + 26899 26902 26903 + 26903 26904 26899 + 26900 26899 26904 + 26904 26905 26900 + 26901 26900 26905 + 26804 26810 26902 + 26902 26810 26809 + 26809 26903 26902 + 26903 26809 26815 + 26815 26906 26903 + 26903 26906 26907 + 26907 26904 26903 + 26905 26904 26907 + 26907 26908 26905 + 26905 26908 26909 + 26909 26910 26905 + 26905 26910 26901 + 26906 26815 26911 + 26911 26912 26906 + 26906 26912 26913 + 26913 26907 26906 + 26908 26907 26913 + 26913 26914 26908 + 26908 26914 26915 + 26915 26909 26908 + 26911 26815 26814 + 26814 26916 26911 + 26916 26917 26911 + 26917 26918 26911 + 26912 26911 26918 + 26918 26919 26912 + 26912 26919 26920 + 26920 26913 26912 + 26914 26913 26920 + 26820 26916 26814 + 26916 26820 26921 + 26921 26917 26916 + 26917 26921 26922 + 26922 26923 26917 + 26917 26923 26924 + 26924 26918 26917 + 26919 26918 26924 + 26921 26820 26819 + 26819 26925 26921 + 26921 26925 26926 + 26926 26922 26921 + 26927 26922 26926 + 26923 26922 26927 + 26927 26928 26923 + 26923 26928 26929 + 26929 26924 26923 + 26825 26925 26819 + 26925 26825 26930 + 26930 26926 26925 + 26926 26930 26931 + 26931 26932 26926 + 26926 26932 26927 + 26933 26927 26932 + 26928 26927 26933 + 26930 26825 26830 + 26830 26934 26930 + 26931 26930 26934 + 26934 26935 26931 + 26936 26931 26935 + 26932 26931 26936 + 26936 26937 26932 + 26932 26937 26933 + 26938 26934 26830 + 26934 26938 26939 + 26939 26935 26934 + 26935 26939 26940 + 26940 26941 26935 + 26935 26941 26936 + 26942 26936 26941 + 26937 26936 26942 + 26830 26829 26938 + 26938 26829 26943 + 26943 26944 26938 + 26939 26938 26944 + 26944 26945 26939 + 26940 26939 26945 + 26945 26946 26940 + 26947 26940 26946 + 26941 26940 26947 + 26828 26943 26829 + 26839 26943 26828 + 26943 26839 26948 + 26948 26944 26943 + 26944 26948 26949 + 26949 26945 26944 + 26945 26949 26950 + 26950 26946 26945 + 26946 26950 26951 + 26951 26952 26946 + 26946 26952 26947 + 26948 26839 26953 + 26953 26954 26948 + 26949 26948 26954 + 26954 26955 26949 + 26950 26949 26955 + 26955 26956 26950 + 26951 26950 26956 + 26838 26953 26839 + 26957 26953 26838 + 26953 26957 26958 + 26958 26954 26953 + 26954 26958 26959 + 26959 26955 26954 + 26955 26959 26960 + 26960 26956 26955 + 26838 26844 26957 + 26957 26844 26961 + 26961 26962 26957 + 26958 26957 26962 + 26962 26963 26958 + 26959 26958 26963 + 26963 26964 26959 + 26960 26959 26964 + 26848 26961 26844 + 26965 26961 26848 + 26961 26965 26966 + 26966 26962 26961 + 26962 26966 26967 + 26967 26963 26962 + 26963 26967 26968 + 26968 26964 26963 + 26848 26969 26965 + 26965 26969 26970 + 26970 26971 26965 + 26966 26965 26971 + 26971 26972 26966 + 26967 26966 26972 + 26972 26973 26967 + 26968 26967 26973 + 26969 26848 26847 + 26847 26974 26969 + 26969 26974 26975 + 26975 26970 26969 + 26976 26970 26975 + 26970 26976 26977 + 26977 26971 26970 + 26971 26977 26978 + 26978 26972 26971 + 26974 26847 26979 + 26979 26980 26974 + 26975 26974 26980 + 26980 26981 26975 + 26982 26975 26981 + 26975 26982 26976 + 26857 26979 26847 + 26983 26979 26857 + 26980 26979 26983 + 26980 26983 26981 + 26983 26984 26981 + 26985 26981 26984 + 26981 26985 26982 + 26986 26982 26985 + 26976 26982 26986 + 26986 26987 26976 + 26977 26976 26987 + 26857 26988 26983 + 26983 26988 26989 + 26989 26984 26983 + 26985 26984 26989 + 26989 26990 26985 + 26985 26990 26991 + 26991 26986 26985 + 26871 26988 26857 + 26988 26871 26992 + 26992 26989 26988 + 26989 26992 26993 + 26993 26990 26989 + 26990 26993 26994 + 26994 26991 26990 + 26995 26991 26994 + 26991 26995 26996 + 26996 26986 26991 + 26992 26871 26870 + 26870 26997 26992 + 26997 26998 26992 + 26993 26992 26998 + 26998 26999 26993 + 26993 26999 27000 + 27000 26994 26993 + 27001 26994 27000 + 26994 27001 26995 + 26875 26997 26870 + 26875 27002 26997 + 26997 27002 27003 + 27003 26998 26997 + 26998 27003 27004 + 27004 26999 26998 + 26999 27004 27005 + 27005 27000 26999 + 27006 27000 27005 + 27000 27006 27001 + 27002 26875 26879 + 26879 27007 27002 + 27002 27007 27008 + 27008 27003 27002 + 27004 27003 27008 + 27008 27009 27004 + 27004 27009 27005 + 27010 27005 27009 + 27005 27010 27006 + 27007 26879 26878 + 27007 26878 27011 + 27007 27011 27008 + 27012 27008 27011 + 27012 27009 27008 + 27009 27012 27010 + 27010 27012 26888 + 26892 27010 26888 + 27006 27010 26892 + 26892 26897 27006 + 27001 27006 26897 + 26878 27013 27011 + 27011 27013 27014 + 27011 27014 27012 + 27012 27014 26888 + 26884 26888 27014 + 27014 27013 26884 + 26884 27013 26878 + 26897 27015 27001 + 26896 27015 26897 + 27016 27015 26896 + 27015 27016 26995 + 26995 27001 27015 + 26896 27017 27016 + 27016 27017 27018 + 27018 27019 27016 + 27016 27019 26996 + 26996 26995 27016 + 27017 26896 26895 + 26895 27020 27017 + 27018 27017 27020 + 27020 27021 27018 + 27022 27018 27021 + 27019 27018 27022 + 27022 27023 27019 + 27019 27023 27024 + 27024 26996 27019 + 26986 26996 27024 + 26895 26901 27020 + 27020 26901 26910 + 26910 27021 27020 + 27021 26910 26909 + 26909 27025 27021 + 27021 27025 27022 + 27026 27022 27025 + 27023 27022 27026 + 27026 27027 27023 + 27023 27027 27028 + 27028 27024 27023 + 26987 27024 27028 + 27024 26987 26986 + 27025 26909 26915 + 26915 27029 27025 + 27025 27029 27026 + 27030 27026 27029 + 27026 27030 27031 + 27027 27026 27031 + 27027 27031 27032 + 27032 27028 27027 + 27033 27028 27032 + 27028 27033 26987 + 26987 27033 26977 + 27029 26915 27034 + 27034 27035 27029 + 27029 27035 27030 + 27036 27030 27035 + 27031 27030 27036 + 27036 27037 27031 + 27031 27037 27038 + 27038 27032 27031 + 27034 26915 26914 + 26914 27039 27034 + 27040 27034 27039 + 27035 27034 27040 + 27040 27041 27035 + 27035 27041 27036 + 27042 27036 27041 + 27037 27036 27042 + 26920 27039 26914 + 27039 26920 27043 + 27043 27044 27039 + 27039 27044 27040 + 27045 27040 27044 + 27041 27040 27045 + 27045 27046 27041 + 27041 27046 27042 + 27043 26920 26919 + 26919 27047 27043 + 27048 27043 27047 + 27044 27043 27048 + 27048 27049 27044 + 27044 27049 27045 + 27045 27049 27050 + 27050 27051 27045 + 27046 27045 27051 + 26924 27047 26919 + 27047 26924 26929 + 26929 27052 27047 + 27047 27052 27048 + 27053 27048 27052 + 27049 27048 27053 + 27053 27050 27049 + 27050 27053 27054 + 27054 27055 27050 + 27050 27055 27056 + 27056 27051 27050 + 27052 26929 27057 + 27057 27058 27052 + 27052 27058 27053 + 27054 27053 27058 + 27058 27059 27054 + 27054 27059 27060 + 27055 27054 27060 + 27060 27061 27055 + 27056 27055 27061 + 27057 26929 26928 + 26928 27062 27057 + 27063 27057 27062 + 27058 27057 27063 + 27063 27059 27058 + 27059 27063 27064 + 27064 27060 27059 + 27060 27064 27065 + 27061 27060 27065 + 26933 27062 26928 + 27062 26933 27066 + 27066 27067 27062 + 27062 27067 27063 + 27063 27067 27064 + 27068 27064 27067 + 27064 27068 27065 + 27066 26933 26937 + 26937 27069 27066 + 27066 27069 27068 + 27067 27066 27068 + 26942 27069 26937 + 27069 26942 27065 + 27065 27068 27069 + 26942 27070 27065 + 27071 27065 27070 + 27065 27071 27072 + 27072 27073 27065 + 27073 27074 27065 + 27074 27075 27065 + 27075 27061 27065 + 26941 27070 26942 + 26947 27070 26941 + 27070 26947 27071 + 26947 26952 27071 + 26952 26951 27071 + 26951 27076 27071 + 27071 27076 27072 + 27077 27072 27076 + 27072 27077 27078 + 27079 27072 27078 + 27072 27079 27073 + 26951 27080 27076 + 27080 27077 27076 + 27077 27080 26956 + 26956 26960 27077 + 27077 26960 27081 + 27081 27078 27077 + 27082 27078 27081 + 27078 27082 27079 + 26956 27080 26951 + 26964 27081 26960 + 27083 27081 26964 + 27081 27083 27082 + 27082 27083 27084 + 27084 27085 27082 + 27082 27085 27079 + 27073 27079 27085 + 27085 27086 27073 + 27086 27087 27073 + 27074 27073 27087 + 26964 26968 27083 + 27083 26968 27088 + 27088 27084 27083 + 27089 27084 27088 + 27084 27089 27086 + 27086 27085 27084 + 26973 27088 26968 + 27090 27088 26973 + 27088 27090 27089 + 27089 27090 27091 + 27091 27092 27089 + 27086 27089 27092 + 27092 27087 27086 + 27093 27087 27092 + 27087 27093 27074 + 26973 27094 27090 + 27090 27094 27095 + 27095 27091 27090 + 27096 27091 27095 + 27091 27096 27097 + 27097 27092 27091 + 27092 27097 27093 + 27094 26973 26972 + 26972 26978 27094 + 27094 26978 27098 + 27098 27095 27094 + 27038 27095 27098 + 27095 27038 27096 + 27096 27038 27037 + 27037 27099 27096 + 27097 27096 27099 + 27099 27100 27097 + 27093 27097 27100 + 27033 27098 26978 + 27032 27098 27033 + 27098 27032 27038 + 26978 26977 27033 + 27042 27099 27037 + 27099 27042 27101 + 27101 27100 27099 + 27100 27101 27102 + 27102 27103 27100 + 27100 27103 27093 + 27093 27103 27074 + 27075 27074 27103 + 27101 27042 27046 + 27046 27104 27101 + 27102 27101 27104 + 27104 27105 27102 + 27102 27105 27075 + 27103 27102 27075 + 27051 27104 27046 + 27104 27051 27056 + 27056 27105 27104 + 27105 27056 27061 + 27061 27075 27105 + 27106 27107 27108 + 27106 27109 27107 + 27110 27107 27109 + 27107 27110 27111 + 27108 27107 27111 + 27112 27106 27108 + 27106 27112 27113 + 27113 27114 27106 + 27114 27115 27106 + 27115 27116 27106 + 27106 27116 27109 + 27108 27117 27112 + 27112 27117 27118 + 27119 27112 27118 + 27112 27119 27113 + 27120 27117 27108 + 27117 27120 27121 + 27118 27117 27121 + 27118 27121 27122 + 27122 27123 27118 + 27119 27118 27123 + 27124 27119 27123 + 27119 27124 27113 + 27108 27111 27120 + 27120 27111 27125 + 27125 27126 27120 + 27121 27120 27126 + 27126 27127 27121 + 27122 27121 27127 + 27128 27125 27111 + 27125 27128 27129 + 27129 27130 27125 + 27125 27130 27131 + 27131 27126 27125 + 27127 27126 27131 + 27111 27110 27128 + 27132 27128 27110 + 27129 27128 27132 + 27132 27133 27129 + 27129 27133 27134 + 27134 27135 27129 + 27130 27129 27135 + 27135 27136 27130 + 27131 27130 27136 + 27110 27137 27132 + 27138 27132 27137 + 27132 27138 27139 + 27139 27133 27132 + 27133 27139 27140 + 27140 27134 27133 + 27109 27137 27110 + 27109 27141 27137 + 27141 27142 27137 + 27137 27142 27138 + 27143 27138 27142 + 27139 27138 27143 + 27143 27144 27139 + 27139 27144 27145 + 27145 27140 27139 + 27116 27141 27109 + 27116 27146 27141 + 27142 27141 27146 + 27146 27147 27142 + 27142 27147 27143 + 27143 27147 27148 + 27149 27143 27148 + 27143 27149 27150 + 27150 27144 27143 + 27116 27115 27146 + 27115 27151 27146 + 27146 27151 27147 + 27151 27148 27147 + 27148 27151 27152 + 27152 27153 27148 + 27148 27153 27154 + 27148 27154 27149 + 27150 27149 27154 + 27115 27152 27151 + 27115 27114 27152 + 27114 27155 27152 + 27152 27155 27156 + 27152 27156 27153 + 27153 27156 27157 + 27157 27154 27153 + 27154 27157 27158 + 27158 27159 27154 + 27154 27159 27150 + 27114 27160 27155 + 27160 27161 27155 + 27161 27156 27155 + 27156 27161 27162 + 27162 27157 27156 + 27158 27157 27162 + 27163 27160 27114 + 27160 27163 27164 + 27164 27161 27160 + 27161 27164 27165 + 27165 27162 27161 + 27162 27165 27166 + 27166 27167 27162 + 27162 27167 27158 + 27114 27113 27163 + 27113 27168 27163 + 27168 27169 27163 + 27169 27164 27163 + 27164 27169 27170 + 27170 27165 27164 + 27166 27165 27170 + 27171 27168 27113 + 27168 27171 27172 + 27172 27169 27168 + 27169 27172 27173 + 27173 27170 27169 + 27170 27173 27174 + 27174 27175 27170 + 27170 27175 27166 + 27113 27176 27171 + 27176 27177 27171 + 27171 27177 27178 + 27172 27171 27178 + 27172 27178 27179 + 27179 27173 27172 + 27174 27173 27179 + 27124 27176 27113 + 27176 27124 27180 + 27180 27177 27176 + 27177 27180 27181 + 27181 27178 27177 + 27178 27181 27182 + 27182 27179 27178 + 27179 27182 27183 + 27183 27184 27179 + 27179 27184 27174 + 27124 27185 27180 + 27185 27186 27180 + 27186 27181 27180 + 27181 27186 27187 + 27187 27182 27181 + 27183 27182 27187 + 27123 27185 27124 + 27185 27123 27122 + 27122 27186 27185 + 27186 27122 27188 + 27188 27187 27186 + 27187 27188 27189 + 27189 27190 27187 + 27187 27190 27183 + 27183 27190 27191 + 27191 27192 27183 + 27184 27183 27192 + 27127 27188 27122 + 27189 27188 27127 + 27127 27193 27189 + 27189 27193 27194 + 27194 27195 27189 + 27190 27189 27195 + 27195 27191 27190 + 27131 27193 27127 + 27193 27131 27196 + 27196 27194 27193 + 27194 27196 27197 + 27197 27198 27194 + 27194 27198 27199 + 27199 27195 27194 + 27191 27195 27199 + 27136 27196 27131 + 27197 27196 27136 + 27136 27200 27197 + 27197 27200 27201 + 27201 27202 27197 + 27198 27197 27202 + 27202 27203 27198 + 27199 27198 27203 + 27204 27200 27136 + 27200 27204 27205 + 27205 27201 27200 + 27201 27205 27206 + 27206 27207 27201 + 27201 27207 27208 + 27208 27202 27201 + 27203 27202 27208 + 27136 27135 27204 + 27204 27135 27134 + 27134 27209 27204 + 27204 27209 27210 + 27210 27205 27204 + 27206 27205 27210 + 27210 27211 27206 + 27206 27211 27212 + 27212 27213 27206 + 27207 27206 27213 + 27214 27209 27134 + 27209 27214 27215 + 27215 27210 27209 + 27210 27215 27216 + 27216 27211 27210 + 27211 27216 27217 + 27217 27212 27211 + 27134 27140 27214 + 27214 27140 27145 + 27145 27218 27214 + 27214 27218 27219 + 27219 27215 27214 + 27216 27215 27219 + 27219 27220 27216 + 27216 27220 27221 + 27221 27217 27216 + 27222 27218 27145 + 27218 27222 27223 + 27223 27219 27218 + 27219 27223 27224 + 27224 27220 27219 + 27220 27224 27225 + 27225 27221 27220 + 27145 27226 27222 + 27222 27226 27227 + 27227 27228 27222 + 27222 27228 27229 + 27229 27223 27222 + 27224 27223 27229 + 27229 27230 27224 + 27225 27224 27230 + 27226 27145 27144 + 27144 27150 27226 + 27227 27226 27150 + 27150 27159 27227 + 27231 27227 27159 + 27227 27231 27232 + 27232 27228 27227 + 27228 27232 27233 + 27233 27229 27228 + 27229 27233 27234 + 27234 27230 27229 + 27159 27158 27231 + 27235 27231 27158 + 27232 27231 27235 + 27235 27236 27232 + 27232 27236 27237 + 27237 27233 27232 + 27234 27233 27237 + 27237 27238 27234 + 27239 27234 27238 + 27230 27234 27239 + 27158 27167 27235 + 27240 27235 27167 + 27235 27240 27241 + 27241 27236 27235 + 27236 27241 27242 + 27242 27237 27236 + 27237 27242 27243 + 27243 27238 27237 + 27167 27166 27240 + 27244 27240 27166 + 27241 27240 27244 + 27244 27245 27241 + 27241 27245 27246 + 27246 27242 27241 + 27243 27242 27246 + 27166 27175 27244 + 27247 27244 27175 + 27244 27247 27248 + 27248 27245 27244 + 27245 27248 27249 + 27249 27246 27245 + 27246 27249 27250 + 27250 27251 27246 + 27246 27251 27243 + 27175 27174 27247 + 27252 27247 27174 + 27248 27247 27252 + 27252 27253 27248 + 27248 27253 27254 + 27254 27249 27248 + 27250 27249 27254 + 27174 27184 27252 + 27192 27252 27184 + 27252 27192 27255 + 27255 27253 27252 + 27253 27255 27256 + 27256 27254 27253 + 27254 27256 27257 + 27257 27258 27254 + 27254 27258 27250 + 27255 27192 27191 + 27191 27259 27255 + 27255 27259 27260 + 27260 27256 27255 + 27257 27256 27260 + 27260 27261 27257 + 27257 27261 27262 + 27262 27263 27257 + 27258 27257 27263 + 27199 27259 27191 + 27259 27199 27264 + 27264 27260 27259 + 27260 27264 27261 + 27264 27265 27261 + 27261 27265 27266 + 27266 27262 27261 + 27203 27264 27199 + 27265 27264 27203 + 27203 27267 27265 + 27265 27267 27268 + 27268 27266 27265 + 27269 27266 27268 + 27262 27266 27269 + 27269 27270 27262 + 27262 27270 27271 + 27271 27263 27262 + 27208 27267 27203 + 27267 27208 27272 + 27272 27268 27267 + 27273 27268 27272 + 27268 27273 27269 + 27274 27272 27208 + 27275 27272 27274 + 27272 27275 27273 + 27273 27275 27276 + 27276 27277 27273 + 27269 27273 27277 + 27208 27207 27274 + 27213 27274 27207 + 27278 27274 27213 + 27274 27278 27275 + 27276 27275 27278 + 27279 27276 27278 + 27280 27276 27279 + 27280 27277 27276 + 27277 27280 27281 + 27277 27281 27269 + 27213 27282 27278 + 27278 27282 27283 + 27283 27284 27278 + 27278 27284 27279 + 27285 27279 27284 + 27285 27286 27279 + 27279 27286 27280 + 27282 27213 27212 + 27212 27287 27282 + 27283 27282 27287 + 27287 27288 27283 + 27289 27283 27288 + 27284 27283 27289 + 27284 27289 27285 + 27285 27289 27290 + 27290 27291 27285 + 27286 27285 27291 + 27287 27212 27217 + 27217 27292 27287 + 27287 27292 27293 + 27293 27288 27287 + 27290 27288 27293 + 27288 27290 27289 + 27292 27217 27221 + 27221 27294 27292 + 27293 27292 27294 + 27295 27293 27294 + 27296 27293 27295 + 27293 27296 27290 + 27290 27296 27297 + 27297 27291 27290 + 27298 27291 27297 + 27291 27298 27286 + 27280 27286 27298 + 27221 27225 27294 + 27294 27225 27299 + 27299 27300 27294 + 27294 27300 27295 + 27301 27295 27300 + 27302 27295 27301 + 27295 27302 27296 + 27297 27296 27302 + 27299 27225 27230 + 27230 27303 27299 + 27304 27299 27303 + 27300 27299 27304 + 27300 27304 27301 + 27301 27304 27305 + 27305 27306 27301 + 27307 27301 27306 + 27301 27307 27302 + 27239 27303 27230 + 27305 27303 27239 + 27303 27305 27304 + 27305 27239 27308 + 27308 27306 27305 + 27309 27306 27308 + 27306 27309 27307 + 27310 27307 27309 + 27302 27307 27310 + 27310 27311 27302 + 27302 27311 27297 + 27312 27297 27311 + 27297 27312 27298 + 27313 27308 27239 + 27309 27308 27313 + 27313 27314 27309 + 27309 27314 27315 + 27315 27316 27309 + 27316 27310 27309 + 27317 27310 27316 + 27311 27310 27317 + 27311 27317 27312 + 27318 27313 27239 + 27319 27313 27318 + 27314 27313 27319 + 27314 27319 27320 + 27320 27315 27314 + 27315 27320 27321 + 27315 27321 27322 + 27322 27316 27315 + 27323 27318 27239 + 27324 27318 27323 + 27318 27324 27325 + 27325 27326 27318 + 27318 27326 27319 + 27319 27326 27327 + 27327 27320 27319 + 27321 27320 27327 + 27238 27323 27239 + 27328 27323 27238 + 27329 27323 27328 + 27323 27329 27324 + 27330 27324 27329 + 27325 27324 27330 + 27330 27331 27325 + 27332 27325 27331 + 27326 27325 27332 + 27332 27327 27326 + 27238 27243 27328 + 27333 27328 27243 + 27334 27328 27333 + 27328 27334 27329 + 27329 27334 27335 + 27335 27336 27329 + 27336 27330 27329 + 27337 27330 27336 + 27331 27330 27337 + 27243 27251 27333 + 27338 27333 27251 + 27333 27338 27339 + 27333 27339 27334 + 27335 27334 27339 + 27340 27335 27339 + 27341 27335 27340 + 27336 27335 27341 + 27336 27341 27337 + 27251 27250 27338 + 27338 27250 27342 + 27342 27343 27338 + 27339 27338 27343 + 27343 27344 27339 + 27339 27344 27340 + 27345 27340 27344 + 27340 27345 27346 + 27340 27346 27341 + 27337 27341 27346 + 27250 27258 27342 + 27263 27342 27258 + 27347 27342 27263 + 27342 27347 27348 + 27348 27343 27342 + 27344 27343 27348 + 27344 27348 27345 + 27345 27348 27347 + 27349 27345 27347 + 27346 27345 27349 + 27349 27350 27346 + 27346 27350 27351 + 27346 27351 27337 + 27263 27271 27347 + 27347 27271 27352 + 27352 27353 27347 + 27347 27353 27349 + 27354 27349 27353 + 27350 27349 27354 + 27350 27354 27355 + 27355 27351 27350 + 27356 27351 27355 + 27351 27356 27337 + 27352 27271 27270 + 27357 27352 27270 + 27358 27352 27357 + 27353 27352 27358 + 27353 27358 27354 + 27355 27354 27358 + 27358 27359 27355 + 27359 27360 27355 + 27361 27355 27360 + 27355 27361 27356 + 27270 27362 27357 + 27363 27357 27362 + 27359 27357 27363 + 27357 27359 27358 + 27364 27362 27270 + 27365 27362 27364 + 27362 27365 27363 + 27366 27363 27365 + 27359 27363 27366 + 27366 27360 27359 + 27367 27360 27366 + 27360 27367 27361 + 27270 27269 27364 + 27368 27364 27269 + 27365 27364 27368 + 27368 27369 27365 + 27365 27369 27366 + 27370 27366 27369 + 27366 27370 27367 + 27367 27370 27371 + 27367 27371 27372 + 27372 27361 27367 + 27373 27368 27269 + 27368 27373 27374 + 27375 27368 27374 + 27375 27369 27368 + 27369 27375 27370 + 27376 27370 27375 + 27370 27376 27371 + 27281 27373 27269 + 27377 27373 27281 + 27377 27374 27373 + 27374 27377 27378 + 27378 27379 27374 + 27375 27374 27379 + 27379 27376 27375 + 27380 27376 27379 + 27371 27376 27380 + 27371 27380 27381 + 27372 27371 27381 + 27281 27382 27377 + 27377 27382 27378 + 27383 27378 27382 + 27379 27378 27383 + 27379 27383 27380 + 27384 27380 27383 + 27384 27385 27380 + 27385 27381 27380 + 27386 27382 27281 + 27382 27386 27383 + 27383 27386 27384 + 27384 27386 27387 + 27388 27384 27387 + 27384 27388 27389 + 27389 27385 27384 + 27386 27281 27387 + 27280 27387 27281 + 27388 27387 27280 + 27298 27388 27280 + 27389 27388 27298 + 27298 27312 27389 + 27390 27389 27312 + 27385 27389 27390 + 27390 27391 27385 + 27381 27385 27391 + 27391 27392 27381 + 27392 27372 27381 + 27393 27390 27312 + 27394 27390 27393 + 27391 27390 27394 + 27394 27395 27391 + 27391 27395 27392 + 27395 27396 27392 + 27372 27392 27396 + 27397 27372 27396 + 27361 27372 27397 + 27317 27393 27312 + 27316 27393 27317 + 27322 27393 27316 + 27393 27322 27394 + 27394 27322 27321 + 27321 27398 27394 + 27398 27399 27394 + 27395 27394 27399 + 27399 27400 27395 + 27396 27395 27400 + 27400 27401 27396 + 27397 27396 27401 + 27327 27398 27321 + 27398 27327 27332 + 27398 27332 27402 + 27402 27399 27398 + 27400 27399 27402 + 27400 27402 27401 + 27402 27403 27401 + 27404 27401 27403 + 27401 27404 27397 + 27397 27404 27405 + 27356 27397 27405 + 27356 27361 27397 + 27403 27402 27332 + 27331 27403 27332 + 27331 27405 27403 + 27405 27404 27403 + 27337 27405 27331 + 27356 27405 27337 + 27406 27407 27408 + 27407 27406 27409 + 27410 27407 27409 + 27407 27410 27411 + 27411 27412 27407 + 27407 27412 27408 + 27408 27413 27406 + 27413 27414 27406 + 27409 27406 27414 + 27413 27408 27415 + 27415 27416 27413 + 27413 27416 27417 + 27417 27414 27413 + 27418 27414 27417 + 27414 27418 27409 + 27419 27415 27408 + 27415 27419 27420 + 27420 27421 27415 + 27416 27415 27421 + 27421 27422 27416 + 27417 27416 27422 + 27412 27419 27408 + 27423 27419 27412 + 27419 27423 27424 + 27424 27420 27419 + 27420 27424 27425 + 27425 27426 27420 + 27420 27426 27427 + 27427 27421 27420 + 27422 27421 27427 + 27412 27411 27423 + 27423 27411 27428 + 27428 27429 27423 + 27423 27429 27430 + 27430 27424 27423 + 27425 27424 27430 + 27428 27411 27410 + 27431 27428 27410 + 27428 27431 27432 + 27432 27429 27428 + 27429 27432 27433 + 27433 27430 27429 + 27430 27433 27434 + 27434 27435 27430 + 27430 27435 27425 + 27410 27436 27431 + 27437 27431 27436 + 27432 27431 27437 + 27437 27438 27432 + 27432 27438 27439 + 27439 27433 27432 + 27434 27433 27439 + 27436 27410 27409 + 27409 27440 27436 + 27440 27441 27436 + 27441 27442 27436 + 27442 27443 27436 + 27437 27436 27443 + 27440 27409 27444 + 27444 27445 27440 + 27445 27446 27440 + 27446 27447 27440 + 27447 27441 27440 + 27418 27444 27409 + 27448 27444 27418 + 27445 27444 27448 + 27448 27449 27445 + 27445 27449 27450 + 27450 27446 27445 + 27447 27446 27450 + 27418 27451 27448 + 27448 27451 27452 + 27452 27453 27448 + 27449 27448 27453 + 27453 27454 27449 + 27450 27449 27454 + 27417 27451 27418 + 27451 27417 27455 + 27455 27452 27451 + 27452 27455 27456 + 27456 27457 27452 + 27452 27457 27458 + 27458 27453 27452 + 27454 27453 27458 + 27422 27455 27417 + 27456 27455 27422 + 27422 27459 27456 + 27456 27459 27460 + 27460 27461 27456 + 27457 27456 27461 + 27461 27462 27457 + 27458 27457 27462 + 27427 27459 27422 + 27459 27427 27463 + 27463 27460 27459 + 27460 27463 27464 + 27464 27465 27460 + 27460 27465 27466 + 27466 27461 27460 + 27462 27461 27466 + 27467 27463 27427 + 27464 27463 27467 + 27467 27468 27464 + 27464 27468 27469 + 27469 27470 27464 + 27465 27464 27470 + 27470 27471 27465 + 27466 27465 27471 + 27427 27426 27467 + 27472 27467 27426 + 27467 27472 27473 + 27473 27468 27467 + 27468 27473 27474 + 27474 27469 27468 + 27426 27425 27472 + 27475 27472 27425 + 27473 27472 27475 + 27475 27476 27473 + 27473 27476 27477 + 27477 27478 27473 + 27478 27474 27473 + 27479 27474 27478 + 27469 27474 27479 + 27425 27435 27475 + 27480 27475 27435 + 27476 27475 27480 + 27480 27481 27476 + 27476 27481 27482 + 27482 27483 27476 + 27476 27483 27477 + 27435 27434 27480 + 27484 27480 27434 + 27481 27480 27484 + 27484 27485 27481 + 27482 27481 27485 + 27485 27486 27482 + 27487 27482 27486 + 27482 27487 27488 + 27488 27483 27482 + 27434 27489 27484 + 27490 27484 27489 + 27485 27484 27490 + 27490 27491 27485 + 27485 27491 27486 + 27491 27492 27486 + 27493 27486 27492 + 27486 27493 27487 + 27439 27489 27434 + 27494 27489 27439 + 27489 27494 27490 + 27490 27494 27495 + 27495 27496 27490 + 27491 27490 27496 + 27496 27497 27491 + 27492 27491 27497 + 27439 27498 27494 + 27494 27498 27499 + 27499 27495 27494 + 27500 27495 27499 + 27495 27500 27501 + 27501 27496 27495 + 27496 27501 27502 + 27497 27496 27502 + 27498 27439 27438 + 27438 27503 27498 + 27499 27498 27503 + 27503 27504 27499 + 27505 27499 27504 + 27499 27505 27500 + 27503 27438 27437 + 27437 27506 27503 + 27503 27506 27507 + 27507 27504 27503 + 27504 27507 27508 + 27509 27504 27508 + 27504 27509 27505 + 27510 27505 27509 + 27500 27505 27510 + 27506 27437 27443 + 27507 27506 27443 + 27507 27443 27442 + 27508 27507 27442 + 27511 27508 27442 + 27509 27508 27511 + 27511 27512 27509 + 27509 27512 27510 + 27513 27510 27512 + 27510 27513 27514 + 27514 27515 27510 + 27510 27515 27500 + 27511 27442 27441 + 27516 27511 27441 + 27511 27516 27517 + 27517 27512 27511 + 27512 27517 27513 + 27518 27513 27517 + 27514 27513 27518 + 27447 27516 27441 + 27517 27516 27447 + 27447 27519 27517 + 27517 27519 27518 + 27520 27518 27519 + 27518 27520 27521 + 27521 27522 27518 + 27518 27522 27514 + 27450 27519 27447 + 27519 27450 27520 + 27454 27520 27450 + 27521 27520 27454 + 27454 27523 27521 + 27521 27523 27524 + 27524 27525 27521 + 27522 27521 27525 + 27525 27526 27522 + 27514 27522 27526 + 27526 27527 27514 + 27515 27514 27527 + 27458 27523 27454 + 27523 27458 27528 + 27528 27524 27523 + 27524 27528 27529 + 27529 27530 27524 + 27524 27530 27531 + 27531 27525 27524 + 27526 27525 27531 + 27462 27528 27458 + 27529 27528 27462 + 27462 27532 27529 + 27529 27532 27533 + 27533 27534 27529 + 27530 27529 27534 + 27534 27535 27530 + 27531 27530 27535 + 27466 27532 27462 + 27532 27466 27536 + 27536 27533 27532 + 27533 27536 27537 + 27537 27538 27533 + 27533 27538 27539 + 27539 27534 27533 + 27535 27534 27539 + 27471 27536 27466 + 27537 27536 27471 + 27471 27540 27537 + 27541 27537 27540 + 27538 27537 27541 + 27541 27542 27538 + 27538 27542 27543 + 27539 27538 27543 + 27544 27540 27471 + 27540 27544 27545 + 27545 27546 27540 + 27540 27546 27541 + 27547 27541 27546 + 27542 27541 27547 + 27542 27547 27548 + 27548 27543 27542 + 27471 27470 27544 + 27544 27470 27469 + 27469 27549 27544 + 27544 27549 27550 + 27550 27545 27544 + 27551 27545 27550 + 27545 27551 27552 + 27552 27546 27545 + 27546 27552 27547 + 27548 27547 27552 + 27479 27549 27469 + 27549 27479 27553 + 27553 27550 27549 + 27554 27550 27553 + 27550 27554 27551 + 27555 27551 27554 + 27552 27551 27555 + 27555 27556 27552 + 27552 27556 27557 + 27557 27548 27552 + 27558 27553 27479 + 27559 27553 27558 + 27553 27559 27554 + 27554 27559 27560 + 27560 27561 27554 + 27554 27561 27555 + 27479 27562 27558 + 27563 27558 27562 + 27564 27558 27563 + 27558 27564 27559 + 27560 27559 27564 + 27478 27562 27479 + 27565 27562 27478 + 27562 27565 27563 + 27566 27563 27565 + 27567 27563 27566 + 27563 27567 27564 + 27564 27567 27568 + 27568 27569 27564 + 27564 27569 27560 + 27478 27570 27565 + 27565 27570 27571 + 27571 27572 27565 + 27565 27572 27566 + 27573 27566 27572 + 27574 27566 27573 + 27566 27574 27567 + 27568 27567 27574 + 27570 27478 27477 + 27477 27575 27570 + 27571 27570 27575 + 27575 27576 27571 + 27577 27571 27576 + 27571 27577 27578 + 27578 27572 27571 + 27572 27578 27573 + 27575 27477 27579 + 27579 27580 27575 + 27575 27580 27581 + 27581 27576 27575 + 27582 27576 27581 + 27576 27582 27577 + 27583 27577 27582 + 27578 27577 27583 + 27579 27477 27483 + 27483 27488 27579 + 27584 27579 27488 + 27580 27579 27584 + 27584 27585 27580 + 27581 27580 27585 + 27585 27586 27581 + 27587 27581 27586 + 27581 27587 27582 + 27488 27588 27584 + 27589 27584 27588 + 27585 27584 27589 + 27589 27590 27585 + 27585 27590 27591 + 27591 27586 27585 + 27592 27586 27591 + 27586 27592 27587 + 27593 27588 27488 + 27588 27593 27594 + 27594 27595 27588 + 27588 27595 27589 + 27589 27595 27596 + 27596 27597 27589 + 27590 27589 27597 + 27488 27487 27593 + 27593 27487 27493 + 27493 27598 27593 + 27594 27593 27598 + 27598 27599 27594 + 27594 27599 27600 + 27600 27601 27594 + 27595 27594 27601 + 27601 27596 27595 + 27602 27598 27493 + 27598 27602 27603 + 27603 27599 27598 + 27599 27603 27604 + 27604 27600 27599 + 27493 27605 27602 + 27606 27602 27605 + 27603 27602 27606 + 27606 27607 27603 + 27603 27607 27608 + 27608 27604 27603 + 27609 27604 27608 + 27600 27604 27609 + 27492 27605 27493 + 27605 27492 27610 + 27610 27611 27605 + 27605 27611 27606 + 27612 27606 27611 + 27606 27612 27613 + 27613 27607 27606 + 27607 27613 27614 + 27614 27608 27607 + 27492 27497 27610 + 27615 27610 27497 + 27611 27610 27615 + 27615 27616 27611 + 27611 27616 27612 + 27617 27612 27616 + 27613 27612 27617 + 27617 27618 27613 + 27613 27618 27619 + 27619 27614 27613 + 27497 27502 27615 + 27615 27502 27620 + 27621 27615 27620 + 27616 27615 27621 + 27621 27622 27616 + 27616 27622 27617 + 27623 27617 27622 + 27617 27623 27624 + 27624 27618 27617 + 27502 27625 27620 + 27626 27620 27625 + 27620 27626 27627 + 27627 27628 27620 + 27620 27628 27629 + 27629 27630 27620 + 27620 27630 27621 + 27631 27625 27502 + 27632 27625 27631 + 27625 27632 27626 + 27633 27626 27632 + 27627 27626 27633 + 27502 27501 27631 + 27631 27501 27500 + 27500 27515 27631 + 27527 27631 27515 + 27631 27527 27632 + 27632 27527 27526 + 27526 27634 27632 + 27632 27634 27633 + 27635 27633 27634 + 27633 27635 27636 + 27636 27637 27633 + 27633 27637 27627 + 27531 27634 27526 + 27634 27531 27635 + 27535 27635 27531 + 27636 27635 27535 + 27535 27638 27636 + 27636 27638 27639 + 27639 27640 27636 + 27640 27641 27636 + 27637 27636 27641 + 27641 27642 27637 + 27627 27637 27642 + 27539 27638 27535 + 27638 27539 27643 + 27643 27639 27638 + 27639 27643 27644 + 27644 27645 27639 + 27639 27645 27646 + 27646 27640 27639 + 27543 27643 27539 + 27644 27643 27543 + 27543 27647 27644 + 27648 27644 27647 + 27645 27644 27648 + 27648 27649 27645 + 27645 27649 27650 + 27650 27651 27645 + 27651 27646 27645 + 27647 27543 27548 + 27647 27548 27557 + 27557 27652 27647 + 27647 27652 27648 + 27652 27653 27648 + 27654 27648 27653 + 27649 27648 27654 + 27654 27655 27649 + 27649 27655 27656 + 27656 27650 27649 + 27657 27652 27557 + 27652 27657 27658 + 27658 27653 27652 + 27658 27659 27653 + 27653 27659 27654 + 27660 27654 27659 + 27654 27660 27661 + 27655 27654 27661 + 27657 27557 27556 + 27556 27662 27657 + 27657 27662 27663 + 27663 27664 27657 + 27664 27658 27657 + 27664 27665 27658 + 27665 27659 27658 + 27659 27665 27660 + 27666 27660 27665 + 27661 27660 27666 + 27662 27556 27555 + 27555 27667 27662 + 27662 27667 27668 + 27668 27663 27662 + 27668 27669 27663 + 27663 27669 27670 + 27670 27664 27663 + 27665 27664 27670 + 27665 27670 27666 + 27667 27555 27561 + 27561 27671 27667 + 27668 27667 27671 + 27671 27672 27668 + 27673 27668 27672 + 27668 27673 27669 + 27671 27561 27560 + 27560 27674 27671 + 27671 27674 27675 + 27675 27672 27671 + 27676 27672 27675 + 27672 27676 27673 + 27677 27673 27676 + 27669 27673 27677 + 27674 27560 27569 + 27569 27678 27674 + 27675 27674 27678 + 27678 27679 27675 + 27680 27675 27679 + 27675 27680 27676 + 27676 27680 27681 + 27681 27682 27676 + 27676 27682 27677 + 27678 27569 27568 + 27568 27683 27678 + 27678 27683 27684 + 27684 27679 27678 + 27685 27679 27684 + 27679 27685 27680 + 27681 27680 27685 + 27683 27568 27686 + 27686 27687 27683 + 27684 27683 27687 + 27687 27688 27684 + 27689 27684 27688 + 27684 27689 27685 + 27574 27686 27568 + 27690 27686 27574 + 27687 27686 27690 + 27690 27691 27687 + 27687 27691 27692 + 27692 27688 27687 + 27692 27693 27688 + 27693 27694 27688 + 27688 27694 27689 + 27574 27695 27690 + 27690 27695 27696 + 27696 27697 27690 + 27697 27698 27690 + 27691 27690 27698 + 27698 27699 27691 + 27699 27692 27691 + 27573 27695 27574 + 27695 27573 27700 + 27700 27696 27695 + 27696 27700 27701 + 27696 27701 27702 + 27702 27697 27696 + 27703 27697 27702 + 27698 27697 27703 + 27704 27698 27703 + 27699 27698 27704 + 27700 27573 27578 + 27578 27705 27700 + 27701 27700 27705 + 27705 27706 27701 + 27702 27701 27706 + 27707 27702 27706 + 27703 27702 27707 + 27707 27708 27703 + 27704 27703 27708 + 27583 27705 27578 + 27706 27705 27583 + 27583 27709 27706 + 27706 27709 27710 + 27710 27711 27706 + 27706 27711 27712 + 27712 27707 27706 + 27713 27707 27712 + 27708 27707 27713 + 27709 27583 27714 + 27714 27715 27709 + 27710 27709 27715 + 27715 27716 27710 + 27717 27710 27716 + 27710 27717 27718 + 27718 27711 27710 + 27582 27714 27583 + 27719 27714 27582 + 27715 27714 27719 + 27719 27720 27715 + 27715 27720 27721 + 27721 27716 27715 + 27722 27716 27721 + 27716 27722 27717 + 27723 27717 27722 + 27718 27717 27723 + 27582 27587 27719 + 27719 27587 27592 + 27592 27724 27719 + 27720 27719 27724 + 27724 27725 27720 + 27721 27720 27725 + 27725 27726 27721 + 27727 27721 27726 + 27721 27727 27722 + 27728 27724 27592 + 27725 27724 27728 + 27728 27729 27725 + 27725 27729 27730 + 27730 27726 27725 + 27731 27726 27730 + 27726 27731 27727 + 27732 27727 27731 + 27722 27727 27732 + 27592 27733 27728 + 27728 27733 27734 + 27734 27735 27728 + 27729 27728 27735 + 27735 27736 27729 + 27730 27729 27736 + 27591 27733 27592 + 27733 27591 27737 + 27737 27734 27733 + 27734 27737 27738 + 27738 27739 27734 + 27734 27739 27740 + 27740 27735 27734 + 27736 27735 27740 + 27741 27737 27591 + 27738 27737 27741 + 27741 27742 27738 + 27738 27742 27743 + 27738 27743 27744 + 27739 27738 27744 + 27740 27739 27744 + 27591 27590 27741 + 27597 27741 27590 + 27741 27597 27745 + 27745 27742 27741 + 27742 27745 27743 + 27745 27746 27743 + 27743 27746 27747 + 27744 27743 27747 + 27748 27744 27747 + 27740 27744 27748 + 27749 27740 27748 + 27740 27749 27736 + 27745 27597 27596 + 27596 27750 27745 + 27745 27750 27746 + 27750 27751 27746 + 27751 27752 27746 + 27746 27752 27747 + 27751 27750 27596 + 27596 27601 27751 + 27751 27601 27600 + 27600 27753 27751 + 27751 27753 27752 + 27747 27752 27753 + 27753 27609 27747 + 27609 27754 27747 + 27755 27747 27754 + 27747 27755 27748 + 27609 27753 27600 + 27608 27754 27609 + 27756 27754 27608 + 27754 27756 27755 + 27756 27757 27755 + 27758 27755 27757 + 27755 27758 27748 + 27608 27614 27756 + 27756 27614 27757 + 27614 27619 27757 + 27759 27757 27619 + 27757 27759 27758 + 27758 27759 27760 + 27761 27758 27760 + 27758 27761 27748 + 27748 27761 27762 + 27762 27763 27748 + 27763 27749 27748 + 27736 27749 27763 + 27619 27764 27759 + 27759 27764 27765 + 27765 27760 27759 + 27766 27760 27765 + 27760 27766 27761 + 27766 27762 27761 + 27767 27762 27766 + 27763 27762 27767 + 27767 27768 27763 + 27763 27768 27736 + 27736 27768 27730 + 27764 27619 27618 + 27618 27624 27764 + 27765 27764 27624 + 27624 27769 27765 + 27770 27765 27769 + 27765 27770 27766 + 27766 27770 27767 + 27767 27770 27771 + 27771 27772 27767 + 27768 27767 27772 + 27772 27730 27768 + 27730 27772 27731 + 27773 27769 27624 + 27771 27769 27773 + 27769 27771 27770 + 27624 27623 27773 + 27773 27623 27774 + 27774 27775 27773 + 27776 27773 27775 + 27773 27776 27771 + 27771 27776 27731 + 27731 27772 27771 + 27622 27774 27623 + 27774 27622 27621 + 27621 27777 27774 + 27774 27777 27778 + 27778 27775 27774 + 27732 27775 27778 + 27775 27732 27776 + 27731 27776 27732 + 27777 27621 27630 + 27630 27779 27777 + 27778 27777 27779 + 27779 27780 27778 + 27781 27778 27780 + 27778 27781 27732 + 27732 27781 27722 + 27722 27781 27723 + 27779 27630 27629 + 27629 27782 27779 + 27779 27782 27783 + 27783 27780 27779 + 27723 27780 27783 + 27780 27723 27781 + 27782 27629 27784 + 27784 27785 27782 + 27783 27782 27785 + 27785 27786 27783 + 27787 27783 27786 + 27783 27787 27723 + 27723 27787 27718 + 27788 27784 27629 + 27789 27784 27788 + 27784 27789 27790 + 27790 27785 27784 + 27785 27790 27791 + 27791 27786 27785 + 27792 27786 27791 + 27786 27792 27787 + 27629 27628 27788 + 27793 27788 27628 + 27788 27793 27794 + 27794 27795 27788 + 27788 27795 27789 + 27796 27789 27795 + 27790 27789 27796 + 27628 27627 27793 + 27642 27793 27627 + 27794 27793 27642 + 27642 27797 27794 + 27798 27794 27797 + 27795 27794 27798 + 27798 27799 27795 + 27795 27799 27800 + 27800 27796 27795 + 27797 27642 27641 + 27797 27641 27640 + 27640 27801 27797 + 27797 27801 27802 + 27802 27798 27797 + 27803 27798 27802 + 27799 27798 27803 + 27803 27804 27799 + 27799 27804 27805 + 27805 27800 27799 + 27646 27801 27640 + 27801 27646 27651 + 27651 27802 27801 + 27806 27802 27651 + 27802 27806 27803 + 27807 27803 27806 + 27804 27803 27807 + 27806 27651 27650 + 27650 27808 27806 + 27806 27808 27807 + 27809 27807 27808 + 27810 27807 27809 + 27807 27810 27804 + 27811 27808 27650 + 27808 27811 27809 + 27811 27812 27809 + 27812 27813 27809 + 27810 27809 27813 + 27813 27814 27810 + 27804 27810 27814 + 27650 27656 27811 + 27811 27656 27815 + 27815 27812 27811 + 27816 27812 27815 + 27812 27816 27817 + 27817 27813 27812 + 27813 27817 27818 + 27818 27814 27813 + 27819 27815 27656 + 27816 27815 27819 + 27819 27820 27816 + 27816 27820 27821 + 27816 27821 27817 + 27818 27817 27821 + 27821 27822 27818 + 27818 27822 27823 + 27814 27818 27823 + 27824 27819 27656 + 27825 27819 27824 + 27819 27825 27820 + 27820 27825 27826 + 27826 27821 27820 + 27822 27821 27826 + 27826 27827 27822 + 27822 27827 27828 + 27822 27828 27823 + 27824 27656 27655 + 27655 27661 27824 + 27829 27824 27661 + 27824 27829 27830 + 27824 27830 27825 + 27825 27830 27831 + 27831 27826 27825 + 27827 27826 27831 + 27661 27666 27829 + 27829 27666 27669 + 27669 27832 27829 + 27830 27829 27832 + 27832 27831 27830 + 27831 27832 27677 + 27677 27833 27831 + 27831 27833 27827 + 27666 27670 27669 + 27677 27832 27669 + 27833 27677 27682 + 27682 27834 27833 + 27827 27833 27834 + 27835 27827 27834 + 27827 27835 27828 + 27836 27828 27835 + 27828 27836 27837 + 27837 27823 27828 + 27823 27837 27838 + 27823 27838 27814 + 27834 27682 27681 + 27681 27839 27834 + 27840 27834 27839 + 27834 27840 27835 + 27836 27835 27840 + 27840 27841 27836 + 27837 27836 27841 + 27837 27841 27842 + 27838 27837 27842 + 27839 27681 27843 + 27843 27844 27839 + 27845 27839 27844 + 27845 27840 27839 + 27841 27840 27845 + 27845 27846 27841 + 27841 27846 27847 + 27847 27842 27841 + 27685 27843 27681 + 27848 27843 27685 + 27848 27849 27843 + 27849 27844 27843 + 27850 27844 27849 + 27844 27850 27845 + 27846 27845 27850 + 27850 27851 27846 + 27846 27851 27852 + 27847 27846 27852 + 27685 27689 27848 + 27848 27689 27694 + 27694 27853 27848 + 27849 27848 27853 + 27853 27854 27849 + 27855 27849 27854 + 27855 27850 27849 + 27850 27855 27851 + 27851 27855 27856 + 27856 27857 27851 + 27851 27857 27852 + 27853 27694 27693 + 27858 27853 27693 + 27854 27853 27858 + 27858 27859 27854 + 27854 27859 27860 + 27860 27856 27854 + 27854 27856 27855 + 27858 27693 27861 + 27861 27862 27858 + 27859 27858 27862 + 27862 27863 27859 + 27860 27859 27863 + 27864 27860 27863 + 27857 27860 27864 + 27860 27857 27856 + 27861 27693 27692 + 27865 27861 27692 + 27866 27861 27865 + 27862 27861 27866 + 27867 27862 27866 + 27863 27862 27867 + 27699 27865 27692 + 27868 27865 27699 + 27868 27866 27865 + 27866 27868 27869 + 27869 27870 27866 + 27870 27867 27866 + 27863 27867 27870 + 27699 27704 27868 + 27869 27868 27704 + 27708 27869 27704 + 27871 27869 27708 + 27871 27870 27869 + 27870 27871 27863 + 27863 27871 27872 + 27872 27873 27863 + 27873 27864 27863 + 27874 27864 27873 + 27864 27874 27852 + 27864 27852 27857 + 27708 27713 27871 + 27871 27713 27872 + 27713 27875 27872 + 27876 27872 27875 + 27876 27877 27872 + 27872 27877 27878 + 27878 27873 27872 + 27873 27878 27879 + 27873 27879 27874 + 27712 27875 27713 + 27712 27880 27875 + 27875 27880 27876 + 27792 27876 27880 + 27877 27876 27792 + 27792 27881 27877 + 27877 27881 27882 + 27882 27883 27877 + 27883 27878 27877 + 27879 27878 27883 + 27880 27712 27711 + 27711 27718 27880 + 27880 27718 27787 + 27787 27792 27880 + 27791 27881 27792 + 27881 27791 27884 + 27884 27882 27881 + 27882 27884 27885 + 27882 27885 27886 + 27886 27883 27882 + 27883 27886 27887 + 27883 27887 27879 + 27879 27887 27888 + 27874 27879 27888 + 27884 27791 27790 + 27790 27889 27884 + 27885 27884 27889 + 27889 27890 27885 + 27886 27885 27890 + 27890 27891 27886 + 27891 27892 27886 + 27887 27886 27892 + 27892 27888 27887 + 27796 27889 27790 + 27890 27889 27796 + 27890 27796 27800 + 27800 27891 27890 + 27805 27891 27800 + 27891 27805 27893 + 27893 27892 27891 + 27888 27892 27893 + 27888 27893 27894 + 27894 27895 27888 + 27888 27895 27874 + 27852 27874 27895 + 27895 27847 27852 + 27893 27805 27804 + 27894 27893 27804 + 27838 27894 27804 + 27842 27894 27838 + 27894 27842 27847 + 27847 27895 27894 + 27814 27838 27804 + 27896 27897 27898 + 27896 27899 27897 + 27900 27897 27899 + 27897 27900 27901 + 27898 27897 27901 + 27902 27896 27898 + 27896 27902 27903 + 27903 27904 27896 + 27904 27905 27896 + 27905 27906 27896 + 27896 27906 27899 + 27898 27907 27902 + 27902 27907 27908 + 27909 27902 27908 + 27902 27909 27903 + 27910 27907 27898 + 27907 27910 27911 + 27908 27907 27911 + 27908 27911 27912 + 27912 27913 27908 + 27909 27908 27913 + 27898 27901 27910 + 27910 27901 27914 + 27914 27915 27910 + 27911 27910 27915 + 27915 27916 27911 + 27912 27911 27916 + 27917 27914 27901 + 27914 27917 27918 + 27918 27919 27914 + 27914 27919 27920 + 27920 27915 27914 + 27916 27915 27920 + 27901 27900 27917 + 27921 27917 27900 + 27918 27917 27921 + 27921 27922 27918 + 27918 27922 27923 + 27923 27924 27918 + 27919 27918 27924 + 27924 27925 27919 + 27920 27919 27925 + 27900 27926 27921 + 27927 27921 27926 + 27921 27927 27928 + 27928 27922 27921 + 27922 27928 27929 + 27929 27923 27922 + 27899 27926 27900 + 27899 27930 27926 + 27930 27931 27926 + 27926 27931 27927 + 27932 27927 27931 + 27928 27927 27932 + 27932 27933 27928 + 27928 27933 27934 + 27934 27929 27928 + 27906 27930 27899 + 27906 27935 27930 + 27931 27930 27935 + 27935 27936 27931 + 27931 27936 27932 + 27937 27932 27936 + 27932 27937 27938 + 27938 27933 27932 + 27933 27938 27939 + 27939 27934 27933 + 27906 27905 27935 + 27905 27940 27935 + 27935 27940 27941 + 27941 27936 27935 + 27936 27941 27937 + 27942 27937 27941 + 27938 27937 27942 + 27942 27943 27938 + 27938 27943 27944 + 27944 27939 27938 + 27905 27945 27940 + 27941 27940 27945 + 27945 27946 27941 + 27941 27946 27942 + 27947 27942 27946 + 27942 27947 27948 + 27948 27943 27942 + 27943 27948 27949 + 27949 27944 27943 + 27950 27945 27905 + 27945 27950 27951 + 27951 27946 27945 + 27946 27951 27947 + 27952 27947 27951 + 27948 27947 27952 + 27952 27953 27948 + 27948 27953 27954 + 27954 27949 27948 + 27905 27904 27950 + 27904 27955 27950 + 27951 27950 27955 + 27955 27956 27951 + 27951 27956 27952 + 27957 27952 27956 + 27952 27957 27958 + 27958 27953 27952 + 27953 27958 27959 + 27959 27954 27953 + 27960 27955 27904 + 27955 27960 27961 + 27961 27956 27955 + 27956 27961 27957 + 27962 27957 27961 + 27958 27957 27962 + 27962 27963 27958 + 27958 27963 27964 + 27964 27959 27958 + 27904 27903 27960 + 27903 27965 27960 + 27965 27966 27960 + 27966 27961 27960 + 27961 27966 27962 + 27967 27962 27966 + 27962 27967 27968 + 27968 27963 27962 + 27963 27968 27969 + 27969 27964 27963 + 27970 27965 27903 + 27965 27970 27971 + 27971 27966 27965 + 27966 27971 27967 + 27972 27967 27971 + 27968 27967 27972 + 27972 27973 27968 + 27969 27968 27973 + 27903 27974 27970 + 27974 27975 27970 + 27971 27970 27975 + 27975 27976 27971 + 27971 27976 27972 + 27977 27972 27976 + 27972 27977 27978 + 27978 27973 27972 + 27979 27974 27903 + 27974 27979 27980 + 27980 27975 27974 + 27975 27980 27981 + 27981 27976 27975 + 27976 27981 27977 + 27982 27977 27981 + 27978 27977 27982 + 27909 27979 27903 + 27979 27909 27983 + 27979 27983 27980 + 27981 27980 27983 + 27983 27984 27981 + 27981 27984 27982 + 27985 27982 27984 + 27982 27985 27986 + 27986 27987 27982 + 27982 27987 27978 + 27909 27913 27983 + 27983 27913 27912 + 27983 27912 27984 + 27984 27912 27985 + 27916 27985 27912 + 27986 27985 27916 + 27916 27988 27986 + 27986 27988 27989 + 27989 27990 27986 + 27987 27986 27990 + 27990 27991 27987 + 27978 27987 27991 + 27991 27992 27978 + 27973 27978 27992 + 27920 27988 27916 + 27988 27920 27993 + 27993 27989 27988 + 27989 27993 27994 + 27994 27995 27989 + 27989 27995 27996 + 27996 27990 27989 + 27990 27996 27997 + 27997 27991 27990 + 27925 27993 27920 + 27994 27993 27925 + 27925 27998 27994 + 27994 27998 27999 + 27999 28000 27994 + 27995 27994 28000 + 28000 28001 27995 + 27996 27995 28001 + 28002 27996 28001 + 27997 27996 28002 + 28003 27998 27925 + 27998 28003 28004 + 28004 27999 27998 + 27999 28004 28005 + 28005 28006 27999 + 27999 28006 28007 + 28007 28000 27999 + 28001 28000 28007 + 27925 27924 28003 + 28003 27924 27923 + 27923 28008 28003 + 28003 28008 28009 + 28009 28004 28003 + 28005 28004 28009 + 28009 28010 28005 + 28011 28005 28010 + 28006 28005 28011 + 28011 28012 28006 + 28007 28006 28012 + 28013 28008 27923 + 28008 28013 28014 + 28014 28009 28008 + 28009 28014 28015 + 28015 28010 28009 + 28010 28015 28016 + 28016 28017 28010 + 28010 28017 28011 + 27923 27929 28013 + 28013 27929 27934 + 27934 28018 28013 + 28013 28018 28019 + 28019 28014 28013 + 28015 28014 28019 + 28019 28020 28015 + 28016 28015 28020 + 28021 28018 27934 + 28018 28021 28022 + 28022 28019 28018 + 28019 28022 28023 + 28023 28020 28019 + 28020 28023 28024 + 28024 28025 28020 + 28020 28025 28016 + 27934 27939 28021 + 28021 27939 27944 + 27944 28026 28021 + 28021 28026 28027 + 28027 28022 28021 + 28023 28022 28027 + 28027 28028 28023 + 28023 28028 28029 + 28024 28023 28029 + 28030 28026 27944 + 28026 28030 28031 + 28031 28027 28026 + 28027 28031 28032 + 28032 28028 28027 + 28028 28032 28033 + 28033 28029 28028 + 27944 27949 28030 + 28030 27949 27954 + 27954 28034 28030 + 28030 28034 28035 + 28035 28031 28030 + 28032 28031 28035 + 28035 28036 28032 + 28032 28036 28037 + 28037 28033 28032 + 28038 28033 28037 + 28029 28033 28038 + 28039 28034 27954 + 28034 28039 28040 + 28040 28035 28034 + 28035 28040 28041 + 28041 28036 28035 + 28036 28041 28042 + 28042 28037 28036 + 27954 27959 28039 + 28039 27959 27964 + 27964 28043 28039 + 28039 28043 28044 + 28044 28045 28039 + 28045 28040 28039 + 28041 28040 28045 + 28045 28046 28041 + 28041 28046 28047 + 28047 28042 28041 + 28043 27964 27969 + 27969 28048 28043 + 28043 28048 28049 + 28049 28050 28043 + 28043 28050 28044 + 28048 27969 28051 + 28051 28052 28048 + 28049 28048 28052 + 28052 28053 28049 + 28054 28049 28053 + 28049 28054 28055 + 28055 28050 28049 + 27973 28051 27969 + 27992 28051 27973 + 28052 28051 27992 + 27992 28056 28052 + 28052 28056 28057 + 28057 28053 28052 + 28058 28053 28057 + 28053 28058 28054 + 28054 28058 28059 + 28059 28060 28054 + 28055 28054 28060 + 28056 27992 27991 + 27991 27997 28056 + 27997 28061 28056 + 28061 28057 28056 + 28062 28057 28061 + 28057 28062 28058 + 28058 28062 28063 + 28063 28059 28058 + 28002 28061 27997 + 28064 28061 28002 + 28061 28064 28062 + 28063 28062 28064 + 28064 28065 28063 + 28066 28063 28065 + 28059 28063 28066 + 28066 28067 28059 + 28059 28067 28068 + 28068 28060 28059 + 28002 28069 28064 + 28064 28069 28070 + 28070 28065 28064 + 28065 28070 28071 + 28071 28072 28065 + 28065 28072 28066 + 28069 28002 28073 + 28073 28074 28069 + 28070 28069 28074 + 28074 28075 28070 + 28071 28070 28075 + 28073 28002 28001 + 28001 28076 28073 + 28077 28073 28076 + 28073 28077 28078 + 28078 28074 28073 + 28074 28078 28079 + 28079 28075 28074 + 28080 28076 28001 + 28081 28076 28080 + 28076 28081 28077 + 28082 28077 28081 + 28078 28077 28082 + 28082 28083 28078 + 28078 28083 28084 + 28084 28079 28078 + 28001 28085 28080 + 28080 28085 28086 + 28086 28087 28080 + 28088 28080 28087 + 28080 28088 28081 + 28007 28085 28001 + 28085 28007 28089 + 28089 28086 28085 + 28090 28086 28089 + 28086 28090 28091 + 28091 28087 28086 + 28087 28091 28092 + 28092 28093 28087 + 28087 28093 28088 + 28012 28089 28007 + 28094 28089 28012 + 28089 28094 28090 + 28090 28094 28095 + 28095 28096 28090 + 28090 28096 28097 + 28097 28091 28090 + 28092 28091 28097 + 28012 28098 28094 + 28095 28094 28098 + 28098 28099 28095 + 28100 28095 28099 + 28095 28100 28101 + 28101 28096 28095 + 28096 28101 28102 + 28102 28097 28096 + 28098 28012 28011 + 28011 28103 28098 + 28098 28103 28104 + 28104 28099 28098 + 28105 28099 28104 + 28099 28105 28100 + 28106 28100 28105 + 28101 28100 28106 + 28103 28011 28017 + 28017 28107 28103 + 28104 28103 28107 + 28108 28104 28107 + 28109 28104 28108 + 28104 28109 28105 + 28105 28109 28110 + 28110 28111 28105 + 28105 28111 28106 + 28107 28017 28016 + 28107 28016 28112 + 28112 28113 28107 + 28107 28113 28108 + 28114 28108 28113 + 28108 28114 28115 + 28108 28115 28109 + 28116 28109 28115 + 28116 28110 28109 + 28025 28112 28016 + 28117 28112 28025 + 28113 28112 28117 + 28113 28117 28114 + 28118 28114 28117 + 28115 28114 28118 + 28118 28119 28115 + 28115 28119 28116 + 28120 28116 28119 + 28121 28116 28120 + 28116 28121 28110 + 28025 28122 28117 + 28117 28122 28118 + 28122 28123 28118 + 28124 28118 28123 + 28118 28124 28119 + 28119 28124 28120 + 28125 28120 28124 + 28120 28125 28126 + 28121 28120 28126 + 28127 28122 28025 + 28122 28127 28128 + 28128 28123 28122 + 28123 28128 28129 + 28129 28130 28123 + 28123 28130 28124 + 28130 28125 28124 + 28131 28125 28130 + 28126 28125 28131 + 28025 28024 28127 + 28127 28024 28132 + 28132 28133 28127 + 28128 28127 28133 + 28134 28128 28133 + 28134 28135 28128 + 28135 28129 28128 + 28131 28129 28135 + 28130 28129 28131 + 28029 28132 28024 + 28136 28132 28029 + 28132 28136 28133 + 28133 28136 28137 + 28137 28138 28133 + 28133 28138 28134 + 28139 28134 28138 + 28135 28134 28139 + 28029 28038 28136 + 28136 28038 28140 + 28137 28136 28140 + 28140 28141 28137 + 28142 28137 28141 + 28138 28137 28142 + 28138 28142 28139 + 28037 28140 28038 + 28143 28140 28037 + 28140 28143 28144 + 28144 28141 28140 + 28141 28144 28145 + 28145 28146 28141 + 28141 28146 28142 + 28139 28142 28146 + 28037 28042 28143 + 28143 28042 28047 + 28047 28147 28143 + 28144 28143 28147 + 28147 28148 28144 + 28148 28149 28144 + 28145 28144 28149 + 28149 28150 28145 + 28151 28145 28150 + 28146 28145 28151 + 28147 28047 28152 + 28152 28153 28147 + 28147 28153 28154 + 28154 28148 28147 + 28148 28154 28155 + 28148 28155 28156 + 28156 28149 28148 + 28149 28156 28150 + 28152 28047 28046 + 28046 28157 28152 + 28158 28152 28157 + 28153 28152 28158 + 28158 28159 28153 + 28154 28153 28159 + 28159 28160 28154 + 28155 28154 28160 + 28160 28161 28155 + 28156 28155 28161 + 28157 28046 28045 + 28045 28162 28157 + 28157 28162 28163 + 28163 28164 28157 + 28157 28164 28158 + 28165 28158 28164 + 28158 28165 28166 + 28166 28159 28158 + 28162 28045 28044 + 28044 28167 28162 + 28163 28162 28167 + 28167 28168 28163 + 28169 28163 28168 + 28163 28169 28170 + 28170 28164 28163 + 28164 28170 28165 + 28171 28165 28170 + 28166 28165 28171 + 28167 28044 28172 + 28172 28173 28167 + 28167 28173 28174 + 28174 28168 28167 + 28175 28168 28174 + 28168 28175 28169 + 28176 28169 28175 + 28170 28169 28176 + 28172 28044 28050 + 28050 28055 28172 + 28172 28055 28177 + 28177 28178 28172 + 28173 28172 28178 + 28178 28179 28173 + 28174 28173 28179 + 28179 28180 28174 + 28181 28174 28180 + 28174 28181 28175 + 28060 28177 28055 + 28177 28060 28068 + 28068 28182 28177 + 28177 28182 28183 + 28183 28178 28177 + 28179 28178 28183 + 28183 28184 28179 + 28179 28184 28185 + 28185 28180 28179 + 28186 28180 28185 + 28180 28186 28181 + 28182 28068 28187 + 28187 28188 28182 + 28183 28182 28188 + 28188 28189 28183 + 28183 28189 28190 + 28184 28183 28190 + 28185 28184 28190 + 28191 28187 28068 + 28192 28187 28191 + 28192 28193 28187 + 28193 28188 28187 + 28188 28193 28194 + 28194 28189 28188 + 28194 28195 28189 + 28195 28190 28189 + 28068 28067 28191 + 28196 28191 28067 + 28191 28196 28197 + 28197 28198 28191 + 28191 28198 28192 + 28199 28192 28198 + 28199 28200 28192 + 28200 28193 28192 + 28200 28194 28193 + 28067 28066 28196 + 28201 28196 28066 + 28197 28196 28201 + 28201 28202 28197 + 28203 28197 28202 + 28203 28199 28197 + 28199 28198 28197 + 28066 28072 28201 + 28204 28201 28072 + 28201 28204 28205 + 28205 28202 28201 + 28202 28205 28206 + 28206 28203 28202 + 28199 28203 28206 + 28200 28199 28206 + 28207 28200 28206 + 28200 28207 28194 + 28207 28195 28194 + 28208 28195 28207 + 28190 28195 28208 + 28072 28071 28204 + 28209 28204 28071 + 28205 28204 28209 + 28209 28210 28205 + 28206 28205 28210 + 28211 28206 28210 + 28206 28211 28212 + 28212 28207 28206 + 28207 28212 28208 + 28071 28213 28209 + 28214 28209 28213 + 28209 28214 28215 + 28215 28210 28209 + 28210 28215 28211 + 28211 28215 28216 + 28217 28211 28216 + 28211 28217 28212 + 28075 28213 28071 + 28218 28213 28075 + 28213 28218 28214 + 28219 28214 28218 + 28215 28214 28219 + 28219 28216 28215 + 28220 28216 28219 + 28216 28220 28217 + 28217 28220 28221 + 28222 28217 28221 + 28217 28222 28212 + 28075 28079 28218 + 28218 28079 28084 + 28084 28223 28218 + 28218 28223 28219 + 28224 28219 28223 + 28219 28224 28220 + 28220 28224 28225 + 28225 28221 28220 + 28226 28221 28225 + 28221 28226 28222 + 28227 28223 28084 + 28223 28227 28224 + 28225 28224 28227 + 28227 28228 28225 + 28229 28225 28228 + 28225 28229 28226 + 28226 28229 28230 + 28230 28231 28226 + 28222 28226 28231 + 28084 28232 28227 + 28227 28232 28233 + 28233 28228 28227 + 28234 28228 28233 + 28228 28234 28229 + 28230 28229 28234 + 28232 28084 28083 + 28083 28235 28232 + 28233 28232 28235 + 28235 28236 28233 + 28237 28233 28236 + 28233 28237 28234 + 28234 28237 28238 + 28238 28239 28234 + 28234 28239 28230 + 28235 28083 28082 + 28082 28240 28235 + 28235 28240 28241 + 28241 28236 28235 + 28242 28236 28241 + 28236 28242 28237 + 28238 28237 28242 + 28240 28082 28243 + 28243 28244 28240 + 28241 28240 28244 + 28244 28245 28241 + 28246 28241 28245 + 28241 28246 28242 + 28081 28243 28082 + 28247 28243 28081 + 28244 28243 28247 + 28247 28248 28244 + 28244 28248 28249 + 28249 28245 28244 + 28250 28245 28249 + 28245 28250 28246 + 28251 28246 28250 + 28242 28246 28251 + 28081 28088 28247 + 28247 28088 28093 + 28093 28252 28247 + 28248 28247 28252 + 28252 28253 28248 + 28249 28248 28253 + 28253 28254 28249 + 28255 28249 28254 + 28249 28255 28250 + 28256 28252 28093 + 28252 28256 28257 + 28257 28253 28252 + 28253 28257 28258 + 28258 28254 28253 + 28259 28254 28258 + 28254 28259 28255 + 28260 28255 28259 + 28250 28255 28260 + 28093 28092 28256 + 28261 28256 28092 + 28257 28256 28261 + 28261 28262 28257 + 28257 28262 28263 + 28263 28264 28257 + 28264 28258 28257 + 28258 28264 28265 + 28259 28258 28265 + 28092 28266 28261 + 28267 28261 28266 + 28261 28267 28268 + 28268 28262 28261 + 28262 28268 28269 + 28269 28263 28262 + 28097 28266 28092 + 28270 28266 28097 + 28266 28270 28267 + 28271 28267 28270 + 28268 28267 28271 + 28271 28272 28268 + 28268 28272 28273 + 28273 28269 28268 + 28097 28102 28270 + 28270 28102 28274 + 28274 28275 28270 + 28270 28275 28271 + 28276 28271 28275 + 28271 28276 28277 + 28277 28272 28271 + 28272 28277 28278 + 28278 28273 28272 + 28274 28102 28101 + 28101 28279 28274 + 28279 28280 28274 + 28280 28281 28274 + 28274 28281 28275 + 28281 28282 28275 + 28275 28282 28276 + 28106 28279 28101 + 28106 28283 28279 + 28283 28280 28279 + 28280 28283 28284 + 28284 28285 28280 + 28280 28285 28281 + 28285 28286 28281 + 28282 28281 28286 + 28286 28287 28282 + 28282 28287 28276 + 28288 28283 28106 + 28284 28283 28288 + 28288 28289 28284 + 28290 28284 28289 + 28284 28290 28291 + 28291 28285 28284 + 28285 28291 28292 + 28292 28286 28285 + 28286 28292 28287 + 28111 28288 28106 + 28293 28288 28111 + 28288 28293 28294 + 28294 28289 28288 + 28295 28289 28294 + 28289 28295 28290 + 28110 28293 28111 + 28121 28293 28110 + 28294 28293 28121 + 28121 28126 28294 + 28126 28296 28294 + 28297 28294 28296 + 28294 28297 28295 + 28295 28297 28298 + 28298 28299 28295 + 28295 28299 28290 + 28300 28296 28126 + 28301 28296 28300 + 28296 28301 28297 + 28301 28302 28297 + 28302 28298 28297 + 28298 28302 28303 + 28304 28298 28303 + 28304 28299 28298 + 28126 28131 28300 + 28305 28300 28131 + 28301 28300 28305 + 28305 28302 28301 + 28303 28302 28305 + 28306 28303 28305 + 28303 28306 28307 + 28307 28304 28303 + 28308 28304 28307 + 28304 28308 28299 + 28309 28305 28131 + 28309 28306 28305 + 28309 28310 28306 + 28306 28310 28311 + 28311 28307 28306 + 28307 28311 28312 + 28312 28313 28307 + 28307 28313 28308 + 28135 28309 28131 + 28310 28309 28135 + 28135 28314 28310 + 28310 28314 28315 + 28315 28311 28310 + 28312 28311 28315 + 28315 28151 28312 + 28312 28151 28150 + 28316 28312 28150 + 28313 28312 28316 + 28139 28314 28135 + 28314 28139 28317 + 28317 28315 28314 + 28315 28317 28151 + 28151 28317 28146 + 28146 28317 28139 + 28316 28318 28313 + 28316 28319 28318 + 28318 28319 28320 + 28318 28320 28308 + 28308 28313 28318 + 28319 28316 28321 + 28321 28322 28319 + 28323 28319 28322 + 28319 28323 28320 + 28324 28320 28323 + 28320 28324 28299 + 28299 28308 28320 + 28321 28316 28150 + 28150 28325 28321 + 28326 28321 28325 + 28322 28321 28326 + 28326 28327 28322 + 28322 28327 28328 + 28322 28328 28323 + 28323 28328 28329 + 28324 28323 28329 + 28330 28325 28150 + 28325 28330 28331 + 28325 28331 28326 + 28326 28331 28332 + 28333 28326 28332 + 28327 28326 28333 + 28150 28156 28330 + 28334 28330 28156 + 28334 28332 28330 + 28332 28331 28330 + 28161 28334 28156 + 28335 28334 28161 + 28332 28334 28335 + 28332 28335 28336 + 28336 28337 28332 + 28332 28337 28333 + 28338 28333 28337 + 28339 28333 28338 + 28333 28339 28327 + 28161 28340 28335 + 28335 28340 28166 + 28336 28335 28166 + 28166 28341 28336 + 28342 28336 28341 + 28337 28336 28342 + 28337 28342 28338 + 28161 28160 28340 + 28340 28160 28159 + 28159 28166 28340 + 28171 28341 28166 + 28343 28341 28171 + 28341 28343 28342 + 28342 28343 28344 + 28338 28342 28344 + 28345 28338 28344 + 28339 28338 28345 + 28345 28346 28339 + 28339 28346 28347 + 28339 28347 28327 + 28343 28171 28348 + 28348 28344 28343 + 28344 28348 28349 + 28344 28349 28350 + 28350 28351 28344 + 28344 28351 28352 + 28352 28345 28344 + 28353 28348 28171 + 28349 28348 28353 + 28353 28260 28349 + 28349 28260 28259 + 28259 28265 28349 + 28265 28350 28349 + 28354 28350 28265 + 28351 28350 28354 + 28170 28353 28171 + 28176 28353 28170 + 28260 28353 28176 + 28176 28355 28260 + 28260 28355 28250 + 28250 28355 28251 + 28355 28176 28356 + 28356 28251 28355 + 28251 28356 28357 + 28357 28358 28251 + 28251 28358 28242 + 28242 28358 28238 + 28175 28356 28176 + 28357 28356 28175 + 28175 28181 28357 + 28357 28181 28186 + 28186 28359 28357 + 28358 28357 28359 + 28359 28238 28358 + 28238 28359 28360 + 28360 28239 28238 + 28239 28360 28361 + 28361 28230 28239 + 28360 28359 28186 + 28186 28362 28360 + 28360 28362 28363 + 28363 28361 28360 + 28364 28361 28363 + 28230 28361 28364 + 28364 28231 28230 + 28222 28231 28364 + 28212 28222 28364 + 28185 28362 28186 + 28362 28185 28365 + 28365 28363 28362 + 28363 28365 28208 + 28208 28366 28363 + 28363 28366 28364 + 28212 28364 28366 + 28212 28366 28208 + 28190 28365 28185 + 28208 28365 28190 + 28299 28324 28290 + 28324 28329 28290 + 28291 28290 28329 + 28329 28367 28291 + 28291 28367 28292 + 28367 28368 28292 + 28369 28292 28368 + 28292 28369 28287 + 28367 28329 28328 + 28370 28367 28328 + 28368 28367 28370 + 28347 28368 28370 + 28347 28371 28368 + 28368 28371 28369 + 28369 28371 28372 + 28287 28369 28372 + 28372 28373 28287 + 28287 28373 28276 + 28327 28370 28328 + 28347 28370 28327 + 28277 28276 28373 + 28373 28374 28277 + 28277 28374 28278 + 28374 28375 28278 + 28376 28278 28375 + 28273 28278 28376 + 28352 28374 28373 + 28374 28352 28377 + 28377 28375 28374 + 28378 28375 28377 + 28375 28378 28376 + 28373 28372 28352 + 28352 28372 28379 + 28379 28345 28352 + 28379 28346 28345 + 28347 28346 28379 + 28371 28347 28379 + 28371 28379 28372 + 28376 28378 28380 + 28381 28380 28378 + 28382 28380 28381 + 28376 28380 28382 + 28383 28376 28382 + 28376 28383 28273 + 28269 28273 28383 + 28384 28269 28383 + 28384 28263 28269 + 28378 28377 28381 + 28381 28377 28352 + 28351 28381 28352 + 28382 28381 28351 + 28351 28354 28382 + 28382 28354 28385 + 28385 28384 28382 + 28384 28383 28382 + 28265 28385 28354 + 28265 28264 28385 + 28385 28264 28263 + 28263 28384 28385 + 28386 28387 28388 + 28387 28386 28389 + 28390 28387 28389 + 28391 28387 28390 + 28387 28391 28392 + 28392 28388 28387 + 28388 28393 28386 + 28394 28386 28393 + 28386 28394 28395 + 28395 28389 28386 + 28388 28396 28393 + 28396 28397 28393 + 28398 28393 28397 + 28393 28398 28394 + 28399 28394 28398 + 28394 28399 28400 + 28395 28394 28400 + 28401 28396 28388 + 28396 28401 28402 + 28402 28403 28396 + 28397 28396 28403 + 28403 28404 28397 + 28405 28397 28404 + 28397 28405 28398 + 28388 28392 28401 + 28401 28392 28406 + 28402 28401 28406 + 28406 28407 28402 + 28408 28402 28407 + 28403 28402 28408 + 28408 28409 28403 + 28403 28409 28410 + 28410 28404 28403 + 28392 28411 28406 + 28411 28412 28406 + 28412 28413 28406 + 28406 28413 28414 + 28414 28407 28406 + 28411 28392 28391 + 28391 28415 28411 + 28415 28416 28411 + 28416 28412 28411 + 28412 28416 28417 + 28418 28412 28417 + 28413 28412 28418 + 28415 28391 28419 + 28420 28415 28419 + 28420 28416 28415 + 28420 28421 28416 + 28416 28421 28422 + 28422 28417 28416 + 28422 28423 28417 + 28417 28423 28418 + 28390 28419 28391 + 28419 28390 28424 + 28424 28425 28419 + 28420 28419 28425 + 28421 28420 28425 + 28425 28426 28421 + 28422 28421 28426 + 28426 28427 28422 + 28427 28428 28422 + 28422 28428 28423 + 28424 28390 28389 + 28429 28424 28389 + 28427 28424 28429 + 28425 28424 28427 + 28427 28426 28425 + 28389 28430 28429 + 28430 28431 28429 + 28431 28432 28429 + 28429 28432 28433 + 28429 28433 28427 + 28428 28427 28433 + 28433 28434 28428 + 28423 28428 28434 + 28430 28389 28395 + 28435 28430 28395 + 28430 28435 28436 + 28436 28431 28430 + 28431 28436 28437 + 28432 28431 28437 + 28437 28438 28432 + 28438 28434 28432 + 28434 28433 28432 + 28395 28400 28435 + 28435 28400 28439 + 28436 28435 28439 + 28439 28440 28436 + 28436 28440 28437 + 28437 28440 28441 + 28437 28441 28442 + 28442 28438 28437 + 28438 28442 28443 + 28434 28438 28443 + 28434 28443 28423 + 28439 28400 28399 + 28439 28399 28444 + 28439 28444 28445 + 28445 28440 28439 + 28440 28445 28441 + 28441 28445 28446 + 28446 28447 28441 + 28447 28442 28441 + 28442 28447 28448 + 28443 28442 28448 + 28444 28399 28449 + 28449 28450 28444 + 28444 28450 28451 + 28451 28445 28444 + 28445 28451 28446 + 28446 28451 28452 + 28446 28452 28453 + 28453 28447 28446 + 28398 28449 28399 + 28398 28405 28449 + 28405 28454 28449 + 28450 28449 28454 + 28454 28455 28450 + 28450 28455 28451 + 28455 28456 28451 + 28451 28456 28452 + 28454 28405 28457 + 28457 28458 28454 + 28455 28454 28458 + 28458 28459 28455 + 28456 28455 28459 + 28459 28460 28456 + 28452 28456 28460 + 28404 28457 28405 + 28457 28404 28410 + 28410 28461 28457 + 28457 28461 28462 + 28462 28458 28457 + 28459 28458 28462 + 28462 28463 28459 + 28459 28463 28464 + 28464 28460 28459 + 28465 28460 28464 + 28460 28465 28452 + 28461 28410 28466 + 28466 28467 28461 + 28462 28461 28467 + 28467 28468 28462 + 28463 28462 28468 + 28468 28469 28463 + 28464 28463 28469 + 28470 28466 28410 + 28471 28466 28470 + 28467 28466 28471 + 28471 28472 28467 + 28467 28472 28473 + 28473 28468 28467 + 28468 28473 28469 + 28410 28409 28470 + 28474 28470 28409 + 28470 28474 28475 + 28475 28476 28470 + 28470 28476 28471 + 28471 28476 28477 + 28472 28471 28477 + 28409 28408 28474 + 28478 28474 28408 + 28475 28474 28478 + 28478 28479 28475 + 28475 28479 28480 + 28480 28481 28475 + 28481 28482 28475 + 28476 28475 28482 + 28408 28483 28478 + 28484 28478 28483 + 28478 28484 28485 + 28485 28479 28478 + 28486 28479 28485 + 28479 28486 28480 + 28407 28483 28408 + 28487 28483 28407 + 28483 28487 28484 + 28488 28484 28487 + 28485 28484 28488 + 28488 28489 28485 + 28485 28489 28490 + 28490 28486 28485 + 28407 28414 28487 + 28487 28414 28491 + 28491 28492 28487 + 28487 28492 28488 + 28493 28488 28492 + 28488 28493 28494 + 28494 28489 28488 + 28495 28489 28494 + 28489 28495 28490 + 28491 28414 28413 + 28413 28496 28491 + 28496 28497 28491 + 28497 28498 28491 + 28491 28498 28499 + 28499 28492 28491 + 28492 28499 28493 + 28500 28493 28499 + 28494 28493 28500 + 28418 28496 28413 + 28418 28501 28496 + 28501 28497 28496 + 28497 28501 28448 + 28448 28502 28497 + 28498 28497 28502 + 28503 28498 28502 + 28499 28498 28503 + 28503 28504 28499 + 28499 28504 28500 + 28423 28501 28418 + 28501 28423 28443 + 28448 28501 28443 + 28448 28447 28502 + 28447 28453 28502 + 28502 28453 28503 + 28453 28505 28503 + 28503 28505 28504 + 28505 28506 28504 + 28504 28506 28507 + 28507 28500 28504 + 28500 28507 28508 + 28508 28509 28500 + 28500 28509 28494 + 28505 28453 28452 + 28465 28505 28452 + 28506 28505 28465 + 28465 28510 28506 + 28507 28506 28510 + 28510 28511 28507 + 28508 28507 28511 + 28464 28510 28465 + 28510 28464 28512 + 28512 28511 28510 + 28511 28512 28513 + 28513 28514 28511 + 28511 28514 28508 + 28512 28464 28469 + 28469 28515 28512 + 28513 28512 28515 + 28515 28516 28513 + 28513 28516 28517 + 28517 28518 28513 + 28514 28513 28518 + 28518 28519 28514 + 28508 28514 28519 + 28520 28515 28469 + 28516 28515 28520 + 28516 28520 28521 + 28521 28517 28516 + 28517 28521 28522 + 28522 28523 28517 + 28517 28523 28524 + 28524 28518 28517 + 28469 28473 28520 + 28521 28520 28473 + 28525 28521 28473 + 28522 28521 28525 + 28525 28526 28522 + 28522 28526 28527 + 28527 28528 28522 + 28528 28529 28522 + 28523 28522 28529 + 28530 28525 28473 + 28531 28525 28530 + 28531 28526 28525 + 28526 28531 28532 + 28532 28527 28526 + 28533 28527 28532 + 28528 28527 28533 + 28534 28530 28473 + 28535 28530 28534 + 28536 28530 28535 + 28530 28536 28531 + 28531 28536 28537 + 28532 28531 28537 + 28537 28538 28532 + 28533 28532 28538 + 28473 28472 28534 + 28472 28539 28534 + 28539 28540 28534 + 28541 28534 28540 + 28542 28534 28541 + 28534 28542 28535 + 28477 28539 28472 + 28539 28477 28543 + 28543 28544 28539 + 28539 28544 28545 + 28545 28540 28539 + 28546 28540 28545 + 28540 28546 28541 + 28543 28477 28547 + 28547 28548 28543 + 28543 28548 28549 + 28549 28550 28543 + 28544 28543 28550 + 28550 28551 28544 + 28545 28544 28551 + 28476 28547 28477 + 28482 28547 28476 + 28547 28482 28552 + 28552 28548 28547 + 28548 28552 28553 + 28553 28549 28548 + 28549 28553 28554 + 28554 28555 28549 + 28549 28555 28556 + 28556 28550 28549 + 28552 28482 28481 + 28481 28557 28552 + 28553 28552 28557 + 28557 28558 28553 + 28554 28553 28558 + 28559 28557 28481 + 28557 28559 28560 + 28560 28558 28557 + 28558 28560 28561 + 28561 28562 28558 + 28558 28562 28554 + 28481 28563 28559 + 28559 28563 28564 + 28564 28565 28559 + 28559 28565 28566 + 28566 28560 28559 + 28561 28560 28566 + 28563 28481 28480 + 28480 28567 28563 + 28564 28563 28567 + 28567 28568 28564 + 28569 28564 28568 + 28570 28564 28569 + 28570 28565 28564 + 28565 28570 28571 + 28571 28566 28565 + 28567 28480 28572 + 28572 28573 28567 + 28567 28573 28574 + 28574 28568 28567 + 28575 28568 28574 + 28568 28575 28569 + 28572 28480 28486 + 28486 28576 28572 + 28572 28576 28577 + 28577 28578 28572 + 28573 28572 28578 + 28578 28579 28573 + 28574 28573 28579 + 28580 28576 28486 + 28576 28580 28581 + 28581 28577 28576 + 28577 28581 28582 + 28582 28583 28577 + 28577 28583 28584 + 28584 28578 28577 + 28579 28578 28584 + 28486 28490 28580 + 28580 28490 28495 + 28495 28585 28580 + 28580 28585 28586 + 28586 28581 28580 + 28582 28581 28586 + 28586 28587 28582 + 28588 28582 28587 + 28583 28582 28588 + 28588 28589 28583 + 28584 28583 28589 + 28590 28585 28495 + 28585 28590 28591 + 28591 28586 28585 + 28587 28586 28591 + 28592 28587 28591 + 28587 28592 28593 + 28593 28594 28587 + 28587 28594 28588 + 28495 28595 28590 + 28590 28595 28596 + 28596 28597 28590 + 28590 28597 28598 + 28598 28591 28590 + 28592 28591 28598 + 28595 28495 28494 + 28595 28494 28599 + 28596 28595 28599 + 28599 28600 28596 + 28600 28601 28596 + 28602 28596 28601 + 28597 28596 28602 + 28597 28602 28603 + 28603 28598 28597 + 28494 28509 28599 + 28604 28599 28509 + 28599 28604 28605 + 28605 28606 28599 + 28599 28606 28607 + 28607 28600 28599 + 28509 28508 28604 + 28608 28604 28508 + 28605 28604 28608 + 28608 28609 28605 + 28610 28605 28609 + 28606 28605 28610 + 28610 28611 28606 + 28607 28606 28611 + 28519 28608 28508 + 28612 28608 28519 + 28608 28612 28609 + 28609 28612 28613 + 28613 28614 28609 + 28609 28614 28610 + 28615 28610 28614 + 28610 28615 28616 + 28616 28611 28610 + 28519 28617 28612 + 28613 28612 28617 + 28617 28618 28613 + 28619 28613 28618 + 28613 28619 28620 + 28620 28614 28613 + 28614 28620 28615 + 28617 28519 28518 + 28518 28524 28617 + 28617 28524 28621 + 28621 28618 28617 + 28622 28618 28621 + 28618 28622 28619 + 28619 28622 28623 + 28620 28619 28623 + 28623 28624 28620 + 28615 28620 28624 + 28624 28625 28615 + 28616 28615 28625 + 28626 28621 28524 + 28627 28621 28626 + 28621 28627 28622 + 28622 28627 28628 + 28628 28623 28622 + 28623 28628 28629 + 28624 28623 28629 + 28624 28629 28630 + 28630 28625 28624 + 28524 28523 28626 + 28523 28631 28626 + 28632 28626 28631 + 28626 28632 28633 + 28626 28633 28627 + 28628 28627 28633 + 28633 28634 28628 + 28634 28635 28628 + 28635 28629 28628 + 28529 28631 28523 + 28636 28631 28529 + 28631 28636 28632 + 28636 28529 28637 + 28632 28636 28637 + 28637 28638 28632 + 28638 28639 28632 + 28639 28640 28632 + 28640 28641 28632 + 28633 28632 28641 + 28641 28634 28633 + 28529 28528 28637 + 28637 28528 28642 + 28637 28642 28638 + 28642 28643 28638 + 28638 28643 28644 + 28638 28644 28645 + 28645 28639 28638 + 28639 28645 28646 + 28640 28639 28646 + 28642 28528 28533 + 28643 28642 28533 + 28533 28647 28643 + 28644 28643 28647 + 28647 28648 28644 + 28645 28644 28648 + 28649 28645 28648 + 28646 28645 28649 + 28538 28647 28533 + 28647 28538 28650 + 28650 28648 28647 + 28648 28650 28651 + 28651 28649 28648 + 28649 28651 28652 + 28652 28653 28649 + 28649 28653 28646 + 28650 28538 28537 + 28537 28654 28650 + 28650 28654 28655 + 28655 28651 28650 + 28652 28651 28655 + 28655 28656 28652 + 28657 28652 28656 + 28653 28652 28657 + 28657 28658 28653 + 28646 28653 28658 + 28654 28537 28659 + 28654 28659 28660 + 28660 28661 28654 + 28654 28661 28655 + 28662 28655 28661 + 28655 28662 28663 + 28663 28656 28655 + 28659 28537 28536 + 28536 28535 28659 + 28660 28659 28535 + 28535 28542 28660 + 28664 28660 28542 + 28660 28664 28665 + 28665 28661 28660 + 28661 28665 28662 + 28666 28662 28665 + 28663 28662 28666 + 28666 28667 28663 + 28668 28663 28667 + 28656 28663 28668 + 28542 28669 28664 + 28664 28669 28670 + 28670 28671 28664 + 28665 28664 28671 + 28671 28672 28665 + 28665 28672 28666 + 28541 28669 28542 + 28669 28541 28673 + 28673 28670 28669 + 28670 28673 28674 + 28670 28674 28675 + 28675 28671 28670 + 28671 28675 28676 + 28676 28672 28671 + 28672 28676 28677 + 28677 28666 28672 + 28673 28541 28678 + 28678 28679 28673 + 28679 28680 28673 + 28674 28673 28680 + 28680 28681 28674 + 28675 28674 28681 + 28541 28546 28678 + 28682 28678 28546 + 28683 28678 28682 + 28678 28683 28684 + 28684 28679 28678 + 28679 28684 28685 + 28679 28685 28686 + 28686 28680 28679 + 28686 28681 28680 + 28546 28687 28682 + 28682 28687 28688 + 28688 28689 28682 + 28690 28682 28689 + 28682 28690 28683 + 28545 28687 28546 + 28687 28545 28691 + 28691 28688 28687 + 28688 28691 28692 + 28692 28693 28688 + 28688 28693 28694 + 28694 28689 28688 + 28695 28689 28694 + 28689 28695 28690 + 28551 28691 28545 + 28692 28691 28551 + 28551 28696 28692 + 28692 28696 28697 + 28697 28698 28692 + 28693 28692 28698 + 28698 28699 28693 + 28694 28693 28699 + 28696 28551 28550 + 28556 28696 28550 + 28697 28696 28556 + 28700 28697 28556 + 28701 28697 28700 + 28698 28697 28701 + 28702 28698 28701 + 28699 28698 28702 + 28702 28703 28699 + 28704 28699 28703 + 28699 28704 28694 + 28556 28555 28700 + 28555 28705 28700 + 28706 28700 28705 + 28706 28701 28700 + 28707 28701 28706 + 28702 28701 28707 + 28707 28708 28702 + 28703 28702 28708 + 28705 28555 28554 + 28709 28705 28554 + 28710 28705 28709 + 28705 28710 28706 + 28711 28706 28710 + 28711 28707 28706 + 28712 28707 28711 + 28712 28713 28707 + 28708 28707 28713 + 28714 28709 28554 + 28715 28709 28714 + 28715 28710 28709 + 28716 28710 28715 + 28710 28716 28711 + 28712 28711 28716 + 28554 28562 28714 + 28717 28714 28562 + 28718 28714 28717 + 28714 28718 28715 + 28715 28718 28719 + 28719 28716 28715 + 28720 28716 28719 + 28720 28721 28716 + 28716 28721 28712 + 28562 28561 28717 + 28722 28717 28561 + 28723 28717 28722 + 28723 28718 28717 + 28724 28718 28723 + 28718 28724 28719 + 28720 28719 28724 + 28561 28725 28722 + 28726 28722 28725 + 28727 28722 28726 + 28727 28728 28722 + 28722 28728 28723 + 28566 28725 28561 + 28729 28725 28566 + 28725 28729 28726 + 28730 28726 28729 + 28726 28730 28731 + 28727 28726 28731 + 28727 28731 28732 + 28732 28733 28727 + 28728 28727 28733 + 28566 28571 28729 + 28729 28571 28734 + 28734 28735 28729 + 28729 28735 28730 + 28736 28730 28735 + 28737 28730 28736 + 28737 28731 28730 + 28732 28731 28737 + 28738 28734 28571 + 28739 28734 28738 + 28734 28739 28740 + 28740 28735 28734 + 28735 28740 28736 + 28570 28738 28571 + 28741 28738 28570 + 28738 28741 28742 + 28738 28742 28739 + 28695 28739 28742 + 28740 28739 28695 + 28695 28743 28740 + 28736 28740 28743 + 28570 28569 28741 + 28741 28569 28744 + 28744 28745 28741 + 28745 28746 28741 + 28746 28747 28741 + 28742 28741 28747 + 28569 28575 28744 + 28575 28748 28744 + 28749 28744 28748 + 28744 28749 28750 + 28750 28751 28744 + 28744 28751 28752 + 28752 28745 28744 + 28753 28748 28575 + 28754 28748 28753 + 28748 28754 28749 + 28755 28749 28754 + 28750 28749 28755 + 28755 28756 28750 + 28757 28750 28756 + 28751 28750 28757 + 28575 28758 28753 + 28759 28753 28758 + 28760 28753 28759 + 28753 28760 28754 + 28754 28760 28761 + 28761 28762 28754 + 28754 28762 28755 + 28574 28758 28575 + 28758 28574 28763 + 28763 28764 28758 + 28758 28764 28759 + 28765 28759 28764 + 28766 28759 28765 + 28759 28766 28760 + 28761 28760 28766 + 28579 28763 28574 + 28767 28763 28579 + 28764 28763 28767 + 28767 28768 28764 + 28764 28768 28765 + 28765 28768 28769 + 28769 28770 28765 + 28771 28765 28770 + 28765 28771 28766 + 28579 28772 28767 + 28767 28772 28773 + 28773 28774 28767 + 28774 28769 28767 + 28769 28768 28767 + 28584 28772 28579 + 28772 28584 28775 + 28775 28773 28772 + 28773 28775 28776 + 28776 28777 28773 + 28774 28773 28777 + 28778 28774 28777 + 28778 28779 28774 + 28779 28769 28774 + 28589 28775 28584 + 28775 28589 28780 + 28776 28775 28780 + 28776 28780 28781 + 28781 28782 28776 + 28777 28776 28782 + 28782 28783 28777 + 28778 28777 28783 + 28784 28780 28589 + 28780 28784 28785 + 28785 28781 28780 + 28786 28781 28785 + 28786 28787 28781 + 28781 28787 28788 + 28788 28782 28781 + 28788 28783 28782 + 28589 28588 28784 + 28789 28784 28588 + 28784 28789 28790 + 28790 28785 28784 + 28785 28790 28791 + 28786 28785 28791 + 28786 28791 28792 + 28787 28786 28792 + 28792 28793 28787 + 28788 28787 28793 + 28594 28789 28588 + 28794 28789 28594 + 28789 28794 28795 + 28795 28790 28789 + 28796 28790 28795 + 28796 28791 28790 + 28791 28796 28797 + 28797 28792 28791 + 28792 28797 28798 + 28798 28793 28792 + 28793 28798 28788 + 28594 28593 28794 + 28794 28593 28799 + 28799 28800 28794 + 28794 28800 28801 + 28801 28795 28794 + 28796 28795 28801 + 28801 28802 28796 + 28797 28796 28802 + 28803 28797 28802 + 28798 28797 28803 + 28799 28593 28592 + 28592 28804 28799 + 28805 28799 28804 + 28800 28799 28805 + 28806 28800 28805 + 28801 28800 28806 + 28807 28801 28806 + 28808 28801 28807 + 28808 28802 28801 + 28598 28804 28592 + 28809 28804 28598 + 28804 28809 28805 + 28810 28805 28809 + 28806 28805 28810 + 28810 28811 28806 + 28806 28811 28807 + 28811 28812 28807 + 28808 28807 28812 + 28598 28603 28809 + 28809 28603 28813 + 28813 28814 28809 + 28809 28814 28810 + 28815 28810 28814 + 28811 28810 28815 + 28816 28811 28815 + 28812 28811 28816 + 28813 28603 28602 + 28817 28813 28602 + 28818 28813 28817 + 28813 28818 28819 + 28819 28814 28813 + 28814 28819 28815 + 28820 28815 28819 + 28816 28815 28820 + 28602 28821 28817 + 28822 28817 28821 + 28761 28817 28822 + 28817 28761 28818 + 28766 28818 28761 + 28819 28818 28766 + 28766 28771 28819 + 28819 28771 28820 + 28601 28821 28602 + 28823 28821 28601 + 28821 28823 28822 + 28822 28823 28824 + 28825 28822 28824 + 28762 28822 28825 + 28822 28762 28761 + 28823 28601 28600 + 28600 28824 28823 + 28826 28824 28600 + 28824 28826 28827 + 28827 28828 28824 + 28824 28828 28825 + 28756 28825 28828 + 28756 28755 28825 + 28825 28755 28762 + 28600 28607 28826 + 28826 28607 28829 + 28829 28830 28826 + 28826 28830 28831 + 28827 28826 28831 + 28831 28832 28827 + 28833 28827 28832 + 28833 28828 28827 + 28828 28833 28756 + 28834 28829 28607 + 28835 28829 28834 + 28830 28829 28835 + 28830 28835 28836 + 28836 28831 28830 + 28837 28831 28836 + 28831 28837 28838 + 28838 28832 28831 + 28611 28834 28607 + 28839 28834 28611 + 28840 28834 28839 + 28834 28840 28835 + 28836 28835 28840 + 28841 28836 28840 + 28837 28836 28841 + 28841 28842 28837 + 28837 28842 28843 + 28843 28838 28837 + 28611 28616 28839 + 28839 28616 28844 + 28844 28845 28839 + 28840 28839 28845 + 28845 28846 28840 + 28840 28846 28847 + 28847 28841 28840 + 28848 28841 28847 + 28842 28841 28848 + 28625 28844 28616 + 28844 28625 28849 + 28844 28849 28850 + 28850 28845 28844 + 28846 28845 28850 + 28850 28851 28846 + 28846 28851 28852 + 28852 28847 28846 + 28847 28852 28853 + 28847 28853 28848 + 28625 28630 28849 + 28854 28849 28630 + 28849 28854 28855 + 28850 28849 28855 + 28851 28850 28855 + 28855 28856 28851 + 28852 28851 28856 + 28856 28857 28852 + 28853 28852 28857 + 28858 28854 28630 + 28859 28854 28858 + 28854 28859 28860 + 28860 28855 28854 + 28856 28855 28860 + 28860 28861 28856 + 28856 28861 28862 + 28862 28857 28856 + 28858 28630 28629 + 28629 28635 28858 + 28863 28858 28635 + 28858 28863 28859 + 28864 28859 28863 + 28860 28859 28864 + 28864 28865 28860 + 28861 28860 28865 + 28865 28866 28861 + 28862 28861 28866 + 28635 28867 28863 + 28868 28863 28867 + 28868 28864 28863 + 28868 28869 28864 + 28865 28864 28869 + 28658 28865 28869 + 28866 28865 28658 + 28867 28635 28634 + 28634 28641 28867 + 28867 28641 28640 + 28640 28870 28867 + 28867 28870 28868 + 28869 28868 28870 + 28870 28871 28869 + 28869 28871 28646 + 28658 28869 28646 + 28871 28870 28640 + 28871 28640 28646 + 28658 28657 28866 + 28866 28657 28872 + 28872 28873 28866 + 28866 28873 28862 + 28874 28862 28873 + 28862 28874 28875 + 28875 28857 28862 + 28857 28875 28853 + 28656 28872 28657 + 28668 28872 28656 + 28872 28668 28873 + 28668 28876 28873 + 28873 28876 28874 + 28874 28876 28877 + 28877 28878 28874 + 28875 28874 28878 + 28878 28879 28875 + 28853 28875 28879 + 28879 28880 28853 + 28880 28848 28853 + 28876 28668 28881 + 28881 28877 28876 + 28882 28877 28881 + 28877 28882 28883 + 28883 28878 28877 + 28879 28878 28883 + 28883 28884 28879 + 28879 28884 28885 + 28885 28880 28879 + 28881 28668 28667 + 28667 28886 28881 + 28886 28887 28881 + 28887 28882 28881 + 28882 28887 28888 + 28888 28883 28882 + 28884 28883 28888 + 28888 28889 28884 + 28885 28884 28889 + 28890 28886 28667 + 28886 28890 28891 + 28891 28887 28886 + 28887 28891 28892 + 28892 28888 28887 + 28889 28888 28892 + 28667 28893 28890 + 28890 28893 28894 + 28894 28895 28890 + 28895 28896 28890 + 28896 28891 28890 + 28891 28896 28897 + 28897 28892 28891 + 28893 28667 28666 + 28666 28677 28893 + 28893 28677 28898 + 28898 28894 28893 + 28898 28899 28894 + 28894 28899 28900 + 28900 28895 28894 + 28896 28895 28900 + 28896 28900 28901 + 28901 28897 28896 + 28898 28677 28676 + 28676 28902 28898 + 28899 28898 28902 + 28902 28903 28899 + 28899 28903 28904 + 28899 28904 28905 + 28905 28901 28899 + 28901 28900 28899 + 28906 28902 28676 + 28903 28902 28906 + 28903 28906 28907 + 28907 28904 28903 + 28904 28907 28908 + 28904 28908 28909 + 28909 28905 28904 + 28676 28675 28906 + 28907 28906 28675 + 28681 28907 28675 + 28908 28907 28681 + 28681 28686 28908 + 28908 28686 28910 + 28909 28908 28910 + 28910 28911 28909 + 28912 28909 28911 + 28905 28909 28912 + 28905 28912 28913 + 28913 28901 28905 + 28897 28901 28913 + 28897 28913 28914 + 28914 28892 28897 + 28686 28685 28910 + 28685 28915 28910 + 28745 28910 28915 + 28745 28752 28910 + 28910 28752 28916 + 28916 28911 28910 + 28917 28911 28916 + 28911 28917 28912 + 28918 28915 28685 + 28746 28915 28918 + 28915 28746 28745 + 28685 28684 28918 + 28918 28684 28683 + 28683 28919 28918 + 28746 28918 28919 + 28919 28747 28746 + 28919 28920 28747 + 28747 28920 28742 + 28742 28920 28690 + 28742 28690 28695 + 28920 28919 28683 + 28683 28690 28920 + 28916 28752 28751 + 28751 28921 28916 + 28917 28916 28921 + 28921 28922 28917 + 28912 28917 28922 + 28913 28912 28922 + 28914 28913 28922 + 28922 28923 28914 + 28889 28914 28923 + 28892 28914 28889 + 28757 28921 28751 + 28922 28921 28757 + 28922 28757 28924 + 28924 28923 28922 + 28925 28923 28924 + 28923 28925 28889 + 28889 28925 28885 + 28926 28885 28925 + 28926 28880 28885 + 28924 28757 28756 + 28756 28833 28924 + 28833 28927 28924 + 28843 28924 28927 + 28924 28843 28925 + 28925 28843 28926 + 28842 28926 28843 + 28880 28926 28842 + 28842 28848 28880 + 28832 28927 28833 + 28838 28927 28832 + 28927 28838 28843 + 28770 28820 28771 + 28928 28820 28770 + 28820 28928 28816 + 28929 28816 28928 + 28929 28812 28816 + 28930 28928 28770 + 28931 28928 28930 + 28928 28931 28929 + 28931 28932 28929 + 28932 28933 28929 + 28933 28812 28929 + 28933 28934 28812 + 28812 28934 28808 + 28930 28770 28769 + 28769 28779 28930 + 28930 28779 28935 + 28935 28936 28930 + 28936 28931 28930 + 28937 28931 28936 + 28937 28932 28931 + 28932 28937 28938 + 28938 28939 28932 + 28933 28932 28939 + 28935 28779 28778 + 28940 28935 28778 + 28941 28935 28940 + 28941 28942 28935 + 28936 28935 28942 + 28937 28936 28942 + 28937 28942 28943 + 28943 28938 28937 + 28783 28940 28778 + 28941 28940 28783 + 28783 28944 28941 + 28945 28941 28944 + 28941 28945 28943 + 28942 28941 28943 + 28788 28944 28783 + 28798 28944 28788 + 28944 28798 28945 + 28803 28945 28798 + 28803 28943 28945 + 28938 28943 28803 + 28946 28938 28803 + 28939 28938 28946 + 28946 28947 28939 + 28939 28947 28933 + 28947 28934 28933 + 28808 28934 28947 + 28947 28946 28808 + 28946 28802 28808 + 28802 28946 28803 + 28694 28743 28695 + 28743 28694 28704 + 28704 28948 28743 + 28743 28948 28736 + 28948 28949 28736 + 28949 28737 28736 + 28948 28704 28950 + 28950 28949 28948 + 28949 28950 28951 + 28951 28952 28949 + 28737 28949 28952 + 28952 28953 28737 + 28953 28732 28737 + 28950 28704 28703 + 28950 28703 28954 + 28954 28951 28950 + 28951 28954 28955 + 28956 28951 28955 + 28956 28952 28951 + 28956 28957 28952 + 28952 28957 28958 + 28958 28953 28952 + 28958 28732 28953 + 28708 28954 28703 + 28959 28954 28708 + 28959 28955 28954 + 28960 28955 28959 + 28955 28960 28961 + 28961 28962 28955 + 28962 28956 28955 + 28957 28956 28962 + 28962 28963 28957 + 28958 28957 28963 + 28959 28708 28713 + 28959 28713 28964 + 28964 28960 28959 + 28960 28964 28965 + 28965 28966 28960 + 28960 28966 28961 + 28964 28713 28712 + 28965 28964 28712 + 28712 28721 28965 + 28966 28965 28721 + 28721 28720 28966 + 28967 28966 28720 + 28966 28967 28961 + 28961 28967 28968 + 28961 28968 28969 + 28969 28962 28961 + 28963 28962 28969 + 28969 28970 28963 + 28963 28970 28958 + 28970 28971 28958 + 28958 28971 28732 + 28720 28972 28967 + 28972 28973 28967 + 28973 28968 28967 + 28968 28973 28974 + 28974 28969 28968 + 28969 28974 28975 + 28970 28969 28975 + 28975 28971 28970 + 28732 28971 28975 + 28975 28733 28732 + 28724 28972 28720 + 28973 28972 28724 + 28973 28724 28976 + 28973 28976 28974 + 28976 28977 28974 + 28975 28974 28977 + 28975 28977 28733 + 28733 28977 28728 + 28723 28728 28977 + 28977 28976 28723 + 28976 28724 28723 + 28978 28979 28980 + 28979 28978 28981 + 28982 28979 28981 + 28983 28979 28982 + 28979 28983 28984 + 28984 28980 28979 + 28985 28978 28980 + 28986 28978 28985 + 28978 28986 28987 + 28981 28978 28987 + 28981 28987 28988 + 28988 28989 28981 + 28981 28989 28982 + 28980 28990 28985 + 28990 28991 28985 + 28985 28991 28992 + 28985 28992 28986 + 28993 28986 28992 + 28987 28986 28993 + 28993 28994 28987 + 28994 28988 28987 + 28995 28990 28980 + 28990 28995 28996 + 28996 28997 28990 + 28991 28990 28997 + 28998 28991 28997 + 28999 28991 28998 + 28991 28999 28992 + 28984 28995 28980 + 29000 28995 28984 + 28995 29000 29001 + 29001 28996 28995 + 29002 28996 29001 + 28996 29002 29003 + 29003 28997 28996 + 28997 29003 29004 + 29004 28998 28997 + 29005 29000 28984 + 29000 29005 29006 + 29006 29007 29000 + 29000 29007 29008 + 29008 29001 29000 + 29009 29001 29008 + 29001 29009 29002 + 28984 28983 29005 + 28983 29010 29005 + 29006 29005 29010 + 29010 29011 29006 + 29006 29011 29012 + 29012 29013 29006 + 29007 29006 29013 + 29013 29014 29007 + 29008 29007 29014 + 29010 28983 29015 + 29016 29010 29015 + 29010 29016 29017 + 29017 29011 29010 + 29011 29017 29018 + 29018 29012 29011 + 29015 28983 28982 + 29015 28982 29019 + 29019 29020 29015 + 29015 29020 29016 + 29020 29021 29016 + 29017 29016 29021 + 29021 29022 29017 + 29017 29022 29023 + 29023 29018 29017 + 28989 29019 28982 + 29019 28989 29024 + 29025 29019 29024 + 29019 29025 29026 + 29026 29020 29019 + 29020 29026 29027 + 29027 29021 29020 + 29021 29027 29028 + 29028 29022 29021 + 29024 28989 28988 + 28988 29029 29024 + 29024 29029 29030 + 29025 29024 29030 + 29030 29031 29025 + 29026 29025 29031 + 29031 29032 29026 + 29026 29032 29033 + 29033 29027 29026 + 29028 29027 29033 + 29029 28988 28994 + 28994 29034 29029 + 29034 29035 29029 + 29029 29035 29030 + 29036 29030 29035 + 29030 29036 29037 + 29037 29031 29030 + 29031 29037 29038 + 29038 29032 29031 + 29039 29034 28994 + 29034 29039 29040 + 29040 29035 29034 + 29035 29040 29036 + 29041 29036 29040 + 29036 29041 29042 + 29042 29037 29036 + 29042 29043 29037 + 29043 29038 29037 + 28994 28993 29039 + 29039 28993 29044 + 29044 29045 29039 + 29039 29045 29046 + 29039 29046 29040 + 29046 29041 29040 + 29047 29041 29046 + 29041 29047 29048 + 29048 29042 29041 + 29049 29044 28993 + 29044 29049 29050 + 29051 29044 29050 + 29051 29045 29044 + 29045 29051 29052 + 29052 29046 29045 + 29046 29052 29047 + 28992 29049 28993 + 28992 28999 29049 + 28999 29053 29049 + 29049 29053 29054 + 29054 29050 29049 + 29050 29054 29055 + 29055 29056 29050 + 29050 29056 29051 + 29056 29052 29051 + 29056 29057 29052 + 29057 29047 29052 + 29053 28999 29058 + 29058 29059 29053 + 29059 29054 29053 + 29054 29059 29055 + 29059 29004 29055 + 29004 29060 29055 + 29056 29055 29060 + 29060 29057 29056 + 28998 29058 28999 + 29059 29058 28998 + 28998 29004 29059 + 29060 29004 29003 + 29003 29061 29060 + 29057 29060 29061 + 29061 29062 29057 + 29047 29057 29062 + 29062 29048 29047 + 29062 29063 29048 + 29063 29064 29048 + 29042 29048 29064 + 29064 29043 29042 + 29003 29002 29061 + 29002 29065 29061 + 29062 29061 29065 + 29065 29063 29062 + 29063 29065 29066 + 29066 29067 29063 + 29064 29063 29067 + 29067 29068 29064 + 29043 29064 29068 + 29068 29069 29043 + 29038 29043 29069 + 29065 29002 29009 + 29065 29009 29066 + 29070 29066 29009 + 29067 29066 29070 + 29070 29071 29067 + 29067 29071 29072 + 29072 29068 29067 + 29069 29068 29072 + 29009 29073 29070 + 29070 29073 29074 + 29074 29075 29070 + 29071 29070 29075 + 29075 29076 29071 + 29072 29071 29076 + 29008 29073 29009 + 29073 29008 29077 + 29077 29074 29073 + 29074 29077 29078 + 29078 29079 29074 + 29074 29079 29080 + 29080 29075 29074 + 29076 29075 29080 + 29014 29077 29008 + 29078 29077 29014 + 29014 29081 29078 + 29078 29081 29082 + 29083 29078 29082 + 29079 29078 29083 + 29083 29084 29079 + 29080 29079 29084 + 29085 29081 29014 + 29081 29085 29082 + 29014 29013 29085 + 29085 29013 29012 + 29012 29086 29085 + 29087 29085 29086 + 29085 29087 29082 + 29088 29086 29012 + 29086 29088 29089 + 29089 29090 29086 + 29090 29087 29086 + 29091 29087 29090 + 29082 29087 29091 + 29012 29018 29088 + 29088 29018 29023 + 29023 29092 29088 + 29088 29092 29093 + 29089 29088 29093 + 29094 29089 29093 + 29095 29089 29094 + 29090 29089 29095 + 29095 29096 29090 + 29090 29096 29091 + 29097 29092 29023 + 29092 29097 29098 + 29098 29093 29092 + 29097 29023 29022 + 29022 29028 29097 + 29098 29097 29028 + 29099 29098 29028 + 29100 29098 29099 + 29093 29098 29100 + 29028 29101 29099 + 29102 29099 29101 + 29099 29102 29103 + 29103 29104 29099 + 29099 29104 29100 + 29033 29101 29028 + 29105 29101 29033 + 29101 29105 29102 + 29102 29105 29106 + 29106 29107 29102 + 29103 29102 29107 + 29033 29108 29105 + 29105 29108 29069 + 29069 29106 29105 + 29072 29106 29069 + 29106 29072 29109 + 29109 29107 29106 + 29108 29033 29032 + 29032 29038 29108 + 29069 29108 29038 + 29076 29109 29072 + 29110 29109 29076 + 29107 29109 29110 + 29110 29111 29107 + 29107 29111 29103 + 29103 29111 29112 + 29112 29113 29103 + 29113 29114 29103 + 29104 29103 29114 + 29076 29115 29110 + 29110 29115 29116 + 29117 29110 29116 + 29111 29110 29117 + 29117 29112 29111 + 29080 29115 29076 + 29115 29080 29118 + 29118 29119 29115 + 29115 29119 29116 + 29084 29118 29080 + 29120 29118 29084 + 29119 29118 29120 + 29120 29121 29119 + 29119 29121 29122 + 29122 29123 29119 + 29119 29123 29116 + 29084 29124 29120 + 29120 29124 29125 + 29125 29126 29120 + 29121 29120 29126 + 29126 29127 29121 + 29122 29121 29127 + 29128 29124 29084 + 29124 29128 29129 + 29129 29125 29124 + 29125 29129 29130 + 29130 29131 29125 + 29125 29131 29132 + 29132 29126 29125 + 29127 29126 29132 + 29084 29083 29128 + 29128 29083 29133 + 29133 29134 29128 + 29128 29134 29135 + 29135 29129 29128 + 29130 29129 29135 + 29136 29133 29083 + 29133 29136 29137 + 29138 29133 29137 + 29133 29138 29139 + 29139 29134 29133 + 29134 29139 29140 + 29140 29135 29134 + 29082 29136 29083 + 29141 29136 29082 + 29137 29136 29141 + 29141 29142 29137 + 29137 29142 29143 + 29143 29144 29137 + 29137 29144 29145 + 29145 29138 29137 + 29139 29138 29145 + 29082 29146 29141 + 29147 29141 29146 + 29142 29141 29147 + 29147 29148 29142 + 29143 29142 29148 + 29091 29146 29082 + 29146 29091 29149 + 29149 29150 29146 + 29146 29150 29147 + 29151 29147 29150 + 29148 29147 29151 + 29152 29149 29091 + 29153 29149 29152 + 29150 29149 29153 + 29153 29154 29150 + 29150 29154 29151 + 29091 29096 29152 + 29155 29152 29096 + 29152 29155 29156 + 29156 29157 29152 + 29152 29157 29153 + 29153 29157 29158 + 29158 29159 29153 + 29154 29153 29159 + 29096 29095 29155 + 29160 29155 29095 + 29156 29155 29160 + 29160 29161 29156 + 29156 29161 29162 + 29162 29163 29156 + 29157 29156 29163 + 29163 29158 29157 + 29095 29164 29160 + 29165 29160 29164 + 29160 29165 29166 + 29166 29161 29160 + 29161 29166 29167 + 29167 29162 29161 + 29094 29164 29095 + 29168 29164 29094 + 29164 29168 29165 + 29169 29165 29168 + 29166 29165 29169 + 29169 29170 29166 + 29167 29166 29170 + 29171 29167 29170 + 29172 29167 29171 + 29162 29167 29172 + 29094 29173 29168 + 29168 29173 29174 + 29174 29175 29168 + 29168 29175 29169 + 29176 29169 29175 + 29169 29176 29177 + 29177 29170 29169 + 29173 29094 29178 + 29178 29179 29173 + 29173 29179 29180 + 29180 29181 29173 + 29181 29182 29173 + 29182 29174 29173 + 29178 29094 29093 + 29183 29178 29093 + 29184 29178 29183 + 29178 29184 29185 + 29185 29179 29178 + 29179 29185 29186 + 29186 29180 29179 + 29187 29183 29093 + 29188 29183 29187 + 29189 29183 29188 + 29183 29189 29184 + 29184 29189 29190 + 29190 29191 29184 + 29185 29184 29191 + 29093 29192 29187 + 29193 29187 29192 + 29187 29193 29194 + 29187 29194 29188 + 29188 29194 29195 + 29195 29196 29188 + 29189 29188 29196 + 29196 29190 29189 + 29197 29192 29093 + 29192 29197 29198 + 29198 29199 29192 + 29192 29199 29193 + 29093 29100 29197 + 29200 29197 29100 + 29198 29197 29200 + 29200 29201 29198 + 29202 29198 29201 + 29199 29198 29202 + 29202 29203 29199 + 29193 29199 29203 + 29100 29104 29200 + 29114 29200 29104 + 29201 29200 29114 + 29114 29204 29201 + 29201 29204 29205 + 29205 29206 29201 + 29201 29206 29202 + 29206 29207 29202 + 29208 29202 29207 + 29203 29202 29208 + 29204 29114 29113 + 29113 29209 29204 + 29205 29204 29209 + 29209 29210 29205 + 29211 29205 29210 + 29205 29211 29212 + 29212 29206 29205 + 29206 29212 29213 + 29213 29207 29206 + 29214 29209 29113 + 29209 29214 29215 + 29215 29210 29209 + 29216 29210 29215 + 29210 29216 29211 + 29217 29211 29216 + 29211 29217 29218 + 29212 29211 29218 + 29214 29113 29112 + 29112 29219 29214 + 29215 29214 29219 + 29219 29220 29215 + 29221 29215 29220 + 29215 29221 29216 + 29216 29221 29222 + 29222 29217 29216 + 29217 29222 29223 + 29223 29218 29217 + 29224 29219 29112 + 29219 29224 29225 + 29225 29220 29219 + 29226 29220 29225 + 29220 29226 29221 + 29221 29226 29227 + 29227 29222 29221 + 29222 29227 29228 + 29223 29222 29228 + 29112 29117 29224 + 29224 29117 29229 + 29229 29230 29224 + 29224 29230 29231 + 29231 29232 29224 + 29232 29225 29224 + 29233 29225 29232 + 29225 29233 29226 + 29116 29229 29117 + 29234 29229 29116 + 29230 29229 29234 + 29234 29235 29230 + 29230 29235 29236 + 29236 29231 29230 + 29237 29231 29236 + 29231 29237 29238 + 29238 29232 29231 + 29116 29239 29234 + 29240 29234 29239 + 29235 29234 29240 + 29240 29241 29235 + 29236 29235 29241 + 29241 29242 29236 + 29242 29243 29236 + 29237 29236 29243 + 29116 29244 29239 + 29239 29244 29245 + 29245 29246 29239 + 29239 29246 29247 + 29247 29240 29239 + 29248 29240 29247 + 29241 29240 29248 + 29244 29116 29123 + 29123 29249 29244 + 29244 29249 29250 + 29245 29244 29250 + 29250 29251 29245 + 29252 29245 29251 + 29245 29252 29253 + 29253 29246 29245 + 29249 29123 29122 + 29249 29122 29254 + 29254 29250 29249 + 29250 29254 29255 + 29255 29256 29250 + 29250 29256 29257 + 29257 29251 29250 + 29258 29251 29257 + 29251 29258 29252 + 29127 29254 29122 + 29255 29254 29127 + 29127 29259 29255 + 29255 29259 29260 + 29260 29261 29255 + 29256 29255 29261 + 29261 29262 29256 + 29257 29256 29262 + 29132 29259 29127 + 29259 29132 29260 + 29132 29263 29260 + 29260 29263 29264 + 29261 29260 29264 + 29265 29261 29264 + 29262 29261 29265 + 29265 29266 29262 + 29267 29262 29266 + 29262 29267 29257 + 29263 29132 29131 + 29131 29268 29263 + 29269 29263 29268 + 29263 29269 29264 + 29264 29269 29270 + 29270 29265 29264 + 29270 29271 29265 + 29266 29265 29271 + 29272 29268 29131 + 29268 29272 29273 + 29273 29274 29268 + 29268 29274 29269 + 29275 29269 29274 + 29269 29275 29270 + 29131 29130 29272 + 29276 29272 29130 + 29273 29272 29276 + 29276 29277 29273 + 29278 29273 29277 + 29273 29278 29279 + 29274 29273 29279 + 29279 29275 29274 + 29280 29275 29279 + 29270 29275 29280 + 29130 29281 29276 + 29282 29276 29281 + 29276 29282 29283 + 29283 29277 29276 + 29277 29283 29284 + 29284 29278 29277 + 29135 29281 29130 + 29285 29281 29135 + 29281 29285 29282 + 29286 29282 29285 + 29283 29282 29286 + 29286 29287 29283 + 29288 29283 29287 + 29288 29289 29283 + 29283 29289 29284 + 29135 29140 29285 + 29285 29140 29290 + 29290 29291 29285 + 29285 29291 29286 + 29292 29286 29291 + 29286 29292 29293 + 29293 29287 29286 + 29287 29293 29294 + 29294 29288 29287 + 29290 29140 29139 + 29139 29295 29290 + 29296 29290 29295 + 29290 29296 29297 + 29297 29291 29290 + 29291 29297 29292 + 29145 29295 29139 + 29298 29295 29145 + 29295 29298 29296 + 29296 29298 29299 + 29299 29300 29296 + 29297 29296 29300 + 29300 29301 29297 + 29292 29297 29301 + 29145 29302 29298 + 29298 29302 29303 + 29303 29299 29298 + 29304 29299 29303 + 29299 29304 29305 + 29305 29300 29299 + 29300 29305 29306 + 29306 29301 29300 + 29302 29145 29307 + 29302 29307 29308 + 29303 29302 29308 + 29309 29303 29308 + 29310 29303 29309 + 29303 29310 29304 + 29145 29144 29307 + 29307 29144 29143 + 29143 29311 29307 + 29312 29307 29311 + 29307 29312 29308 + 29311 29143 29313 + 29313 29314 29311 + 29314 29315 29311 + 29315 29312 29311 + 29316 29312 29315 + 29312 29316 29317 + 29317 29308 29312 + 29143 29318 29313 + 29313 29318 29319 + 29313 29319 29320 + 29320 29314 29313 + 29321 29314 29320 + 29314 29321 29316 + 29316 29315 29314 + 29148 29318 29143 + 29322 29318 29148 + 29318 29322 29319 + 29319 29322 29323 + 29323 29324 29319 + 29324 29320 29319 + 29320 29324 29325 + 29326 29320 29325 + 29320 29326 29321 + 29148 29327 29322 + 29328 29322 29327 + 29322 29328 29323 + 29323 29328 29329 + 29323 29329 29330 + 29330 29324 29323 + 29325 29324 29330 + 29151 29327 29148 + 29327 29151 29331 + 29331 29332 29327 + 29332 29328 29327 + 29328 29332 29333 + 29334 29328 29333 + 29328 29334 29329 + 29329 29334 29335 + 29335 29330 29329 + 29336 29331 29151 + 29331 29336 29337 + 29338 29331 29337 + 29332 29331 29338 + 29338 29333 29332 + 29333 29338 29339 + 29339 29340 29333 + 29340 29334 29333 + 29151 29154 29336 + 29159 29336 29154 + 29336 29159 29341 + 29341 29337 29336 + 29337 29341 29342 + 29342 29343 29337 + 29338 29337 29343 + 29343 29339 29338 + 29339 29343 29344 + 29345 29339 29344 + 29340 29339 29345 + 29341 29159 29346 + 29341 29346 29347 + 29342 29341 29347 + 29347 29348 29342 + 29348 29349 29342 + 29343 29342 29349 + 29349 29344 29343 + 29344 29349 29350 + 29350 29345 29344 + 29159 29158 29346 + 29351 29346 29158 + 29346 29351 29352 + 29352 29347 29346 + 29347 29352 29353 + 29353 29348 29347 + 29348 29353 29354 + 29354 29355 29348 + 29355 29349 29348 + 29349 29355 29350 + 29158 29163 29351 + 29351 29163 29162 + 29162 29356 29351 + 29352 29351 29356 + 29357 29352 29356 + 29353 29352 29357 + 29357 29358 29353 + 29354 29353 29358 + 29359 29354 29358 + 29354 29359 29350 + 29350 29355 29354 + 29172 29356 29162 + 29356 29172 29357 + 29172 29360 29357 + 29357 29360 29361 + 29361 29358 29357 + 29358 29361 29359 + 29359 29361 29362 + 29362 29363 29359 + 29363 29364 29359 + 29350 29359 29364 + 29360 29172 29365 + 29366 29360 29365 + 29361 29360 29366 + 29366 29362 29361 + 29367 29362 29366 + 29362 29367 29363 + 29171 29365 29172 + 29368 29365 29171 + 29365 29368 29366 + 29368 29369 29366 + 29366 29369 29367 + 29367 29369 29370 + 29371 29367 29370 + 29367 29371 29363 + 29171 29372 29368 + 29368 29372 29325 + 29325 29373 29368 + 29374 29368 29373 + 29374 29369 29368 + 29369 29374 29370 + 29372 29171 29170 + 29170 29177 29372 + 29372 29177 29326 + 29326 29325 29372 + 29321 29326 29177 + 29177 29176 29321 + 29321 29176 29375 + 29375 29317 29321 + 29317 29316 29321 + 29175 29375 29176 + 29375 29175 29174 + 29174 29376 29375 + 29375 29376 29377 + 29377 29317 29375 + 29308 29317 29377 + 29376 29174 29182 + 29182 29378 29376 + 29377 29376 29378 + 29378 29379 29377 + 29308 29377 29379 + 29379 29380 29308 + 29308 29380 29381 + 29381 29309 29308 + 29382 29378 29182 + 29378 29382 29383 + 29383 29379 29378 + 29379 29383 29380 + 29380 29383 29384 + 29384 29381 29380 + 29384 29385 29381 + 29381 29385 29386 + 29386 29309 29381 + 29382 29182 29181 + 29181 29387 29382 + 29382 29387 29388 + 29383 29382 29388 + 29388 29389 29383 + 29389 29390 29383 + 29390 29384 29383 + 29385 29384 29390 + 29181 29391 29387 + 29387 29391 29392 + 29392 29388 29387 + 29388 29392 29393 + 29388 29393 29394 + 29394 29389 29388 + 29391 29181 29180 + 29180 29395 29391 + 29392 29391 29395 + 29396 29392 29395 + 29393 29392 29396 + 29396 29397 29393 + 29393 29397 29398 + 29394 29393 29398 + 29395 29180 29186 + 29395 29186 29399 + 29399 29400 29395 + 29395 29400 29396 + 29401 29396 29400 + 29396 29401 29397 + 29402 29397 29401 + 29397 29402 29398 + 29399 29186 29185 + 29185 29403 29399 + 29404 29399 29403 + 29400 29399 29404 + 29404 29405 29400 + 29400 29405 29401 + 29401 29405 29406 + 29406 29407 29401 + 29407 29402 29401 + 29191 29403 29185 + 29403 29191 29408 + 29408 29409 29403 + 29403 29409 29404 + 29404 29409 29410 + 29410 29411 29404 + 29405 29404 29411 + 29411 29406 29405 + 29408 29191 29190 + 29190 29412 29408 + 29408 29412 29413 + 29413 29414 29408 + 29409 29408 29414 + 29414 29410 29409 + 29190 29196 29412 + 29412 29196 29195 + 29195 29415 29412 + 29412 29415 29413 + 29416 29413 29415 + 29413 29416 29417 + 29417 29418 29413 + 29413 29418 29419 + 29419 29414 29413 + 29410 29414 29419 + 29420 29415 29195 + 29415 29420 29416 + 29420 29421 29416 + 29421 29422 29416 + 29417 29416 29422 + 29195 29423 29420 + 29420 29423 29424 + 29424 29421 29420 + 29421 29424 29425 + 29421 29425 29426 + 29426 29422 29421 + 29427 29422 29426 + 29422 29427 29417 + 29423 29195 29428 + 29428 29429 29423 + 29424 29423 29429 + 29429 29430 29424 + 29425 29424 29430 + 29194 29428 29195 + 29431 29428 29194 + 29428 29431 29429 + 29429 29431 29432 + 29432 29430 29429 + 29430 29432 29433 + 29430 29433 29425 + 29194 29193 29431 + 29432 29431 29193 + 29203 29432 29193 + 29433 29432 29203 + 29203 29208 29433 + 29425 29433 29208 + 29208 29434 29425 + 29434 29435 29425 + 29435 29436 29425 + 29436 29426 29425 + 29427 29426 29436 + 29436 29437 29427 + 29417 29427 29437 + 29207 29434 29208 + 29213 29434 29207 + 29434 29213 29435 + 29213 29438 29435 + 29435 29438 29439 + 29439 29440 29435 + 29435 29440 29436 + 29440 29441 29436 + 29436 29441 29437 + 29442 29437 29441 + 29437 29442 29417 + 29438 29213 29212 + 29212 29218 29438 + 29439 29438 29218 + 29218 29223 29439 + 29439 29223 29443 + 29440 29439 29443 + 29443 29444 29440 + 29440 29444 29445 + 29445 29441 29440 + 29445 29442 29441 + 29223 29228 29443 + 29446 29443 29228 + 29444 29443 29446 + 29446 29447 29444 + 29444 29447 29448 + 29448 29445 29444 + 29448 29442 29445 + 29442 29448 29449 + 29449 29450 29442 + 29442 29450 29417 + 29228 29451 29446 + 29452 29446 29451 + 29447 29446 29452 + 29452 29453 29447 + 29448 29447 29453 + 29449 29448 29453 + 29453 29454 29449 + 29454 29455 29449 + 29449 29455 29450 + 29451 29228 29227 + 29227 29456 29451 + 29451 29456 29457 + 29452 29451 29457 + 29458 29452 29457 + 29452 29458 29454 + 29454 29453 29452 + 29456 29227 29226 + 29226 29233 29456 + 29459 29456 29233 + 29456 29459 29457 + 29457 29459 29460 + 29461 29457 29460 + 29457 29461 29458 + 29462 29458 29461 + 29454 29458 29462 + 29233 29463 29459 + 29460 29459 29463 + 29463 29238 29460 + 29460 29238 29237 + 29464 29460 29237 + 29461 29460 29464 + 29464 29465 29461 + 29461 29465 29462 + 29232 29463 29233 + 29463 29232 29238 + 29330 29373 29325 + 29373 29330 29466 + 29466 29374 29373 + 29374 29466 29467 + 29467 29370 29374 + 29370 29467 29468 + 29468 29371 29370 + 29335 29466 29330 + 29466 29335 29469 + 29467 29466 29469 + 29468 29467 29469 + 29470 29468 29469 + 29468 29470 29363 + 29363 29371 29468 + 29471 29469 29335 + 29469 29471 29470 + 29470 29471 29472 + 29472 29473 29470 + 29473 29364 29470 + 29364 29363 29470 + 29335 29474 29471 + 29471 29474 29340 + 29340 29472 29471 + 29345 29472 29340 + 29472 29345 29475 + 29475 29473 29472 + 29473 29475 29364 + 29364 29475 29350 + 29350 29475 29345 + 29334 29474 29335 + 29340 29474 29334 + 29476 29462 29465 + 29462 29476 29477 + 29477 29478 29462 + 29462 29478 29454 + 29454 29478 29479 + 29479 29455 29454 + 29465 29480 29476 + 29476 29480 29481 + 29481 29482 29476 + 29482 29483 29476 + 29477 29476 29483 + 29480 29465 29464 + 29480 29464 29484 + 29484 29481 29480 + 29481 29484 29485 + 29481 29485 29486 + 29486 29482 29481 + 29487 29482 29486 + 29482 29487 29488 + 29488 29483 29482 + 29489 29484 29464 + 29485 29484 29489 + 29489 29490 29485 + 29485 29490 29491 + 29486 29485 29491 + 29491 29492 29486 + 29487 29486 29492 + 29492 29493 29487 + 29488 29487 29493 + 29237 29489 29464 + 29243 29489 29237 + 29489 29243 29490 + 29490 29243 29242 + 29242 29491 29490 + 29242 29494 29491 + 29491 29494 29495 + 29495 29492 29491 + 29492 29495 29496 + 29496 29493 29492 + 29493 29496 29497 + 29497 29498 29493 + 29493 29498 29488 + 29494 29242 29241 + 29241 29248 29494 + 29494 29248 29499 + 29495 29494 29499 + 29499 29500 29495 + 29496 29495 29500 + 29500 29501 29496 + 29496 29501 29502 + 29497 29496 29502 + 29248 29503 29499 + 29504 29499 29503 + 29386 29499 29504 + 29499 29386 29505 + 29505 29500 29499 + 29500 29505 29501 + 29501 29505 29506 + 29506 29502 29501 + 29247 29503 29248 + 29247 29507 29503 + 29503 29507 29504 + 29504 29507 29253 + 29253 29310 29504 + 29309 29504 29310 + 29504 29309 29386 + 29507 29247 29246 + 29246 29253 29507 + 29304 29310 29253 + 29253 29252 29304 + 29304 29252 29258 + 29258 29305 29304 + 29306 29305 29258 + 29258 29508 29306 + 29509 29306 29508 + 29301 29306 29509 + 29509 29510 29301 + 29510 29292 29301 + 29257 29508 29258 + 29508 29257 29267 + 29267 29511 29508 + 29511 29509 29508 + 29509 29511 29512 + 29513 29509 29512 + 29510 29509 29513 + 29513 29514 29510 + 29292 29510 29514 + 29293 29292 29514 + 29511 29267 29515 + 29515 29512 29511 + 29512 29515 29516 + 29516 29517 29512 + 29513 29512 29517 + 29518 29513 29517 + 29514 29513 29518 + 29518 29519 29514 + 29519 29293 29514 + 29519 29294 29293 + 29515 29267 29266 + 29515 29266 29520 + 29520 29516 29515 + 29516 29520 29521 + 29522 29516 29521 + 29517 29516 29522 + 29522 29523 29517 + 29517 29523 29524 + 29524 29518 29517 + 29519 29518 29524 + 29271 29520 29266 + 29520 29271 29525 + 29525 29521 29520 + 29521 29525 29526 + 29526 29527 29521 + 29527 29522 29521 + 29523 29522 29527 + 29527 29528 29523 + 29528 29524 29523 + 29525 29271 29529 + 29525 29529 29530 + 29530 29526 29525 + 29530 29531 29526 + 29532 29526 29531 + 29527 29526 29532 + 29532 29528 29527 + 29524 29528 29532 + 29533 29524 29532 + 29524 29533 29519 + 29271 29270 29529 + 29280 29529 29270 + 29529 29280 29530 + 29280 29534 29530 + 29530 29534 29535 + 29535 29536 29530 + 29531 29530 29536 + 29537 29531 29536 + 29537 29538 29531 + 29531 29538 29532 + 29532 29538 29533 + 29534 29280 29539 + 29539 29540 29534 + 29540 29535 29534 + 29535 29540 29541 + 29536 29535 29541 + 29541 29542 29536 + 29536 29542 29537 + 29542 29543 29537 + 29538 29537 29543 + 29279 29539 29280 + 29540 29539 29279 + 29279 29278 29540 + 29540 29278 29541 + 29278 29284 29541 + 29542 29541 29284 + 29284 29289 29542 + 29542 29289 29543 + 29289 29288 29543 + 29544 29543 29288 + 29543 29544 29538 + 29538 29544 29533 + 29519 29533 29544 + 29544 29294 29519 + 29288 29294 29544 + 29505 29386 29385 + 29385 29506 29505 + 29390 29506 29385 + 29506 29390 29502 + 29502 29390 29389 + 29389 29545 29502 + 29502 29545 29546 + 29546 29497 29502 + 29547 29497 29546 + 29497 29547 29548 + 29548 29498 29497 + 29545 29389 29394 + 29545 29394 29549 + 29549 29546 29545 + 29546 29549 29550 + 29546 29550 29547 + 29547 29550 29551 + 29551 29552 29547 + 29548 29547 29552 + 29398 29549 29394 + 29550 29549 29398 + 29398 29551 29550 + 29398 29553 29551 + 29551 29553 29554 + 29554 29552 29551 + 29552 29554 29555 + 29556 29552 29555 + 29552 29556 29548 + 29556 29557 29548 + 29498 29548 29557 + 29557 29488 29498 + 29558 29553 29398 + 29553 29558 29559 + 29559 29554 29553 + 29555 29554 29559 + 29402 29558 29398 + 29558 29402 29407 + 29558 29407 29406 + 29406 29559 29558 + 29560 29559 29406 + 29559 29560 29555 + 29555 29560 29561 + 29561 29562 29555 + 29562 29563 29555 + 29556 29555 29563 + 29563 29564 29556 + 29556 29564 29557 + 29406 29411 29560 + 29560 29411 29410 + 29410 29561 29560 + 29419 29561 29410 + 29561 29419 29565 + 29565 29562 29561 + 29562 29565 29479 + 29479 29566 29562 + 29563 29562 29566 + 29567 29563 29566 + 29563 29567 29564 + 29557 29564 29567 + 29568 29557 29567 + 29488 29557 29568 + 29568 29483 29488 + 29565 29419 29418 + 29418 29569 29565 + 29569 29455 29565 + 29455 29479 29565 + 29418 29417 29569 + 29417 29450 29569 + 29455 29569 29450 + 29483 29568 29477 + 29566 29477 29568 + 29478 29477 29566 + 29566 29479 29478 + 29568 29567 29566 + 29570 29571 29572 + 29570 29573 29571 + 29574 29571 29573 + 29571 29574 29575 + 29572 29571 29575 + 29576 29570 29572 + 29570 29576 29577 + 29577 29578 29570 + 29573 29570 29578 + 29579 29573 29578 + 29580 29573 29579 + 29573 29580 29574 + 29572 29581 29576 + 29577 29576 29581 + 29581 29582 29577 + 29583 29577 29582 + 29578 29577 29583 + 29583 29584 29578 + 29578 29584 29585 + 29585 29579 29578 + 29581 29572 29586 + 29587 29581 29586 + 29581 29587 29588 + 29588 29582 29581 + 29582 29588 29589 + 29589 29590 29582 + 29582 29590 29583 + 29591 29586 29572 + 29586 29591 29592 + 29592 29593 29586 + 29593 29587 29586 + 29587 29593 29594 + 29588 29587 29594 + 29589 29588 29594 + 29595 29591 29572 + 29591 29595 29596 + 29596 29597 29591 + 29597 29592 29591 + 29592 29597 29598 + 29599 29592 29598 + 29593 29592 29599 + 29599 29594 29593 + 29575 29595 29572 + 29595 29575 29600 + 29600 29601 29595 + 29601 29596 29595 + 29596 29601 29602 + 29603 29596 29602 + 29597 29596 29603 + 29603 29598 29597 + 29604 29600 29575 + 29600 29604 29605 + 29606 29600 29605 + 29601 29600 29606 + 29606 29602 29601 + 29602 29606 29607 + 29607 29608 29602 + 29603 29602 29608 + 29604 29575 29609 + 29610 29604 29609 + 29604 29610 29611 + 29611 29605 29604 + 29605 29611 29612 + 29612 29613 29605 + 29606 29605 29613 + 29613 29607 29606 + 29614 29609 29575 + 29615 29609 29614 + 29615 29610 29609 + 29611 29610 29615 + 29615 29616 29611 + 29612 29611 29616 + 29616 29617 29612 + 29618 29612 29617 + 29613 29612 29618 + 29574 29614 29575 + 29614 29574 29619 + 29619 29620 29614 + 29620 29621 29614 + 29621 29615 29614 + 29615 29621 29622 + 29622 29616 29615 + 29616 29622 29617 + 29580 29619 29574 + 29580 29623 29619 + 29623 29624 29619 + 29620 29619 29624 + 29624 29625 29620 + 29621 29620 29625 + 29622 29621 29625 + 29626 29622 29625 + 29622 29626 29617 + 29579 29623 29580 + 29623 29579 29585 + 29585 29627 29623 + 29623 29627 29628 + 29628 29624 29623 + 29625 29624 29628 + 29628 29629 29625 + 29625 29629 29626 + 29630 29626 29629 + 29617 29626 29630 + 29630 29631 29617 + 29617 29631 29618 + 29627 29585 29632 + 29632 29633 29627 + 29627 29633 29634 + 29634 29628 29627 + 29629 29628 29634 + 29634 29635 29629 + 29629 29635 29630 + 29636 29630 29635 + 29631 29630 29636 + 29632 29585 29584 + 29584 29637 29632 + 29638 29632 29637 + 29633 29632 29638 + 29638 29639 29633 + 29633 29639 29640 + 29640 29634 29633 + 29635 29634 29640 + 29640 29641 29635 + 29635 29641 29636 + 29642 29637 29584 + 29637 29642 29643 + 29643 29644 29637 + 29637 29644 29638 + 29645 29638 29644 + 29639 29638 29645 + 29584 29583 29642 + 29642 29583 29590 + 29590 29646 29642 + 29643 29642 29646 + 29646 29647 29643 + 29648 29643 29647 + 29644 29643 29648 + 29648 29649 29644 + 29644 29649 29645 + 29650 29646 29590 + 29646 29650 29651 + 29651 29647 29646 + 29647 29651 29652 + 29652 29653 29647 + 29647 29653 29648 + 29654 29648 29653 + 29649 29648 29654 + 29590 29589 29650 + 29650 29589 29655 + 29655 29656 29650 + 29650 29656 29657 + 29657 29651 29650 + 29652 29651 29657 + 29657 29658 29652 + 29659 29652 29658 + 29653 29652 29659 + 29594 29655 29589 + 29660 29655 29594 + 29655 29660 29661 + 29661 29656 29655 + 29656 29661 29662 + 29662 29657 29656 + 29657 29662 29663 + 29663 29658 29657 + 29594 29599 29660 + 29660 29599 29598 + 29598 29664 29660 + 29661 29660 29664 + 29664 29665 29661 + 29662 29661 29665 + 29665 29666 29662 + 29663 29662 29666 + 29666 29667 29663 + 29668 29663 29667 + 29658 29663 29668 + 29669 29664 29598 + 29664 29669 29670 + 29670 29665 29664 + 29665 29670 29671 + 29671 29666 29665 + 29666 29671 29672 + 29672 29667 29666 + 29598 29603 29669 + 29669 29603 29608 + 29670 29669 29608 + 29608 29673 29670 + 29671 29670 29673 + 29673 29674 29671 + 29672 29671 29674 + 29674 29675 29672 + 29676 29672 29675 + 29667 29672 29676 + 29676 29677 29667 + 29667 29677 29668 + 29678 29673 29608 + 29673 29678 29679 + 29679 29674 29673 + 29674 29679 29680 + 29680 29675 29674 + 29675 29680 29681 + 29681 29682 29675 + 29675 29682 29676 + 29608 29607 29678 + 29678 29607 29613 + 29613 29683 29678 + 29679 29678 29683 + 29683 29684 29679 + 29680 29679 29684 + 29684 29685 29680 + 29681 29680 29685 + 29685 29686 29681 + 29687 29681 29686 + 29682 29681 29687 + 29618 29683 29613 + 29683 29618 29688 + 29688 29684 29683 + 29684 29688 29689 + 29689 29685 29684 + 29685 29689 29690 + 29690 29686 29685 + 29686 29690 29691 + 29691 29692 29686 + 29686 29692 29687 + 29688 29618 29631 + 29631 29693 29688 + 29689 29688 29693 + 29693 29694 29689 + 29690 29689 29694 + 29694 29695 29690 + 29691 29690 29695 + 29636 29693 29631 + 29693 29636 29696 + 29696 29694 29693 + 29694 29696 29697 + 29697 29695 29694 + 29695 29697 29698 + 29698 29699 29695 + 29695 29699 29691 + 29696 29636 29641 + 29641 29700 29696 + 29697 29696 29700 + 29700 29701 29697 + 29698 29697 29701 + 29701 29702 29698 + 29703 29698 29702 + 29699 29698 29703 + 29704 29700 29641 + 29700 29704 29705 + 29705 29701 29700 + 29701 29705 29706 + 29706 29702 29701 + 29702 29706 29707 + 29707 29708 29702 + 29702 29708 29703 + 29641 29640 29704 + 29704 29640 29639 + 29639 29709 29704 + 29704 29709 29710 + 29710 29705 29704 + 29706 29705 29710 + 29710 29711 29706 + 29706 29711 29712 + 29712 29707 29706 + 29645 29709 29639 + 29709 29645 29713 + 29713 29710 29709 + 29710 29713 29714 + 29714 29711 29710 + 29711 29714 29715 + 29715 29712 29711 + 29713 29645 29649 + 29649 29716 29713 + 29714 29713 29716 + 29716 29717 29714 + 29714 29717 29718 + 29718 29715 29714 + 29719 29715 29718 + 29712 29715 29719 + 29654 29716 29649 + 29716 29654 29720 + 29720 29717 29716 + 29717 29720 29721 + 29721 29722 29717 + 29717 29722 29718 + 29723 29718 29722 + 29718 29723 29724 + 29718 29724 29719 + 29720 29654 29725 + 29725 29726 29720 + 29720 29726 29727 + 29727 29721 29720 + 29728 29721 29727 + 29728 29722 29721 + 29722 29728 29723 + 29653 29725 29654 + 29659 29725 29653 + 29725 29659 29729 + 29729 29726 29725 + 29726 29729 29730 + 29730 29731 29726 + 29726 29731 29727 + 29729 29659 29732 + 29732 29733 29729 + 29729 29733 29734 + 29734 29730 29729 + 29735 29730 29734 + 29730 29735 29736 + 29736 29731 29730 + 29658 29732 29659 + 29668 29732 29658 + 29732 29668 29737 + 29737 29733 29732 + 29733 29737 29738 + 29738 29734 29733 + 29739 29734 29738 + 29734 29739 29735 + 29740 29735 29739 + 29736 29735 29740 + 29737 29668 29677 + 29677 29741 29737 + 29737 29741 29742 + 29742 29738 29737 + 29743 29738 29742 + 29738 29743 29739 + 29739 29743 29744 + 29744 29745 29739 + 29739 29745 29740 + 29746 29741 29677 + 29741 29746 29747 + 29747 29742 29741 + 29748 29742 29747 + 29742 29748 29743 + 29744 29743 29748 + 29677 29676 29746 + 29746 29676 29682 + 29682 29749 29746 + 29746 29749 29750 + 29750 29747 29746 + 29751 29747 29750 + 29747 29751 29748 + 29748 29751 29752 + 29752 29753 29748 + 29748 29753 29744 + 29687 29749 29682 + 29749 29687 29754 + 29754 29750 29749 + 29750 29754 29755 + 29755 29756 29750 + 29750 29756 29751 + 29752 29751 29756 + 29757 29754 29687 + 29755 29754 29757 + 29687 29692 29757 + 29758 29757 29692 + 29759 29757 29758 + 29757 29759 29755 + 29692 29691 29758 + 29760 29758 29691 + 29761 29758 29760 + 29758 29761 29759 + 29759 29761 29762 + 29762 29763 29759 + 29755 29759 29763 + 29691 29699 29760 + 29699 29764 29760 + 29765 29760 29764 + 29760 29765 29766 + 29760 29766 29761 + 29761 29766 29767 + 29767 29762 29761 + 29768 29762 29767 + 29763 29762 29768 + 29703 29764 29699 + 29764 29703 29769 + 29769 29770 29764 + 29764 29770 29765 + 29765 29770 29771 + 29771 29772 29765 + 29766 29765 29772 + 29772 29767 29766 + 29769 29703 29708 + 29708 29773 29769 + 29769 29773 29774 + 29774 29775 29769 + 29770 29769 29775 + 29775 29771 29770 + 29771 29775 29776 + 29771 29776 29777 + 29777 29772 29771 + 29767 29772 29777 + 29773 29708 29707 + 29707 29778 29773 + 29773 29778 29779 + 29779 29774 29773 + 29774 29779 29780 + 29780 29781 29774 + 29774 29781 29776 + 29776 29775 29774 + 29778 29707 29712 + 29712 29782 29778 + 29778 29782 29783 + 29783 29779 29778 + 29780 29779 29783 + 29783 29784 29780 + 29780 29784 29785 + 29781 29780 29785 + 29785 29786 29781 + 29776 29781 29786 + 29777 29776 29786 + 29719 29782 29712 + 29782 29719 29787 + 29787 29788 29782 + 29782 29788 29783 + 29789 29783 29788 + 29783 29789 29784 + 29784 29789 29790 + 29790 29791 29784 + 29784 29791 29785 + 29792 29787 29719 + 29793 29787 29792 + 29793 29788 29787 + 29788 29793 29789 + 29789 29793 29794 + 29794 29795 29789 + 29795 29790 29789 + 29719 29724 29792 + 29796 29792 29724 + 29792 29796 29797 + 29797 29794 29792 + 29792 29794 29793 + 29724 29723 29796 + 29798 29796 29723 + 29797 29796 29798 + 29798 29799 29797 + 29797 29799 29800 + 29794 29797 29800 + 29800 29795 29794 + 29801 29795 29800 + 29795 29801 29790 + 29802 29798 29723 + 29803 29798 29802 + 29798 29803 29799 + 29799 29803 29804 + 29799 29804 29800 + 29801 29800 29804 + 29804 29805 29801 + 29801 29805 29806 + 29801 29806 29790 + 29807 29802 29723 + 29808 29802 29807 + 29809 29802 29808 + 29802 29809 29803 + 29809 29810 29803 + 29810 29811 29803 + 29803 29811 29804 + 29805 29804 29811 + 29723 29728 29807 + 29727 29807 29728 + 29812 29807 29727 + 29807 29812 29808 + 29808 29812 29813 + 29813 29814 29808 + 29815 29808 29814 + 29808 29815 29809 + 29810 29809 29815 + 29727 29816 29812 + 29812 29816 29817 + 29817 29813 29812 + 29818 29813 29817 + 29813 29818 29819 + 29819 29814 29813 + 29820 29814 29819 + 29814 29820 29815 + 29816 29727 29731 + 29731 29736 29816 + 29817 29816 29736 + 29736 29821 29817 + 29822 29817 29821 + 29817 29822 29818 + 29818 29822 29823 + 29823 29824 29818 + 29819 29818 29824 + 29825 29819 29824 + 29819 29825 29820 + 29740 29821 29736 + 29821 29740 29826 + 29826 29827 29821 + 29821 29827 29822 + 29822 29827 29823 + 29828 29823 29827 + 29824 29823 29828 + 29829 29824 29828 + 29824 29829 29825 + 29830 29825 29829 + 29820 29825 29830 + 29826 29740 29745 + 29745 29831 29826 + 29828 29826 29831 + 29827 29826 29828 + 29831 29745 29744 + 29744 29832 29831 + 29831 29832 29833 + 29833 29834 29831 + 29831 29834 29828 + 29829 29828 29834 + 29832 29744 29753 + 29753 29835 29832 + 29833 29832 29835 + 29835 29836 29833 + 29837 29833 29836 + 29837 29834 29833 + 29834 29837 29829 + 29829 29837 29838 + 29838 29839 29829 + 29839 29830 29829 + 29835 29753 29752 + 29752 29840 29835 + 29835 29840 29841 + 29841 29836 29835 + 29842 29836 29841 + 29836 29842 29837 + 29837 29842 29838 + 29840 29752 29843 + 29843 29844 29840 + 29841 29840 29844 + 29845 29841 29844 + 29842 29841 29845 + 29845 29838 29842 + 29846 29838 29845 + 29838 29846 29847 + 29847 29839 29838 + 29756 29843 29752 + 29848 29843 29756 + 29844 29843 29848 + 29848 29849 29844 + 29844 29849 29850 + 29850 29851 29844 + 29844 29851 29845 + 29846 29845 29851 + 29756 29755 29848 + 29852 29848 29755 + 29849 29848 29852 + 29852 29853 29849 + 29853 29854 29849 + 29854 29850 29849 + 29855 29850 29854 + 29855 29851 29850 + 29851 29855 29846 + 29846 29855 29856 + 29846 29856 29847 + 29857 29852 29755 + 29858 29852 29857 + 29858 29853 29852 + 29853 29858 29859 + 29859 29854 29853 + 29859 29856 29854 + 29854 29856 29855 + 29763 29857 29755 + 29860 29857 29763 + 29861 29857 29860 + 29857 29861 29858 + 29859 29858 29861 + 29861 29862 29859 + 29862 29863 29859 + 29856 29859 29863 + 29863 29864 29856 + 29856 29864 29847 + 29763 29865 29860 + 29860 29865 29866 + 29866 29867 29860 + 29867 29868 29860 + 29861 29860 29868 + 29868 29862 29861 + 29768 29865 29763 + 29865 29768 29869 + 29869 29866 29865 + 29870 29866 29869 + 29866 29870 29871 + 29871 29867 29866 + 29867 29871 29872 + 29867 29872 29873 + 29873 29868 29867 + 29873 29862 29868 + 29768 29874 29869 + 29875 29869 29874 + 29869 29875 29870 + 29870 29875 29786 + 29786 29876 29870 + 29870 29876 29877 + 29877 29871 29870 + 29767 29874 29768 + 29777 29874 29767 + 29874 29777 29875 + 29786 29875 29777 + 29871 29877 29878 + 29879 29878 29877 + 29878 29879 29880 + 29880 29881 29878 + 29872 29878 29881 + 29872 29871 29878 + 29877 29882 29879 + 29879 29882 29883 + 29883 29884 29879 + 29879 29884 29885 + 29880 29879 29885 + 29839 29880 29885 + 29881 29880 29839 + 29882 29877 29876 + 29876 29886 29882 + 29883 29882 29886 + 29886 29887 29883 + 29888 29883 29887 + 29883 29888 29889 + 29884 29883 29889 + 29884 29889 29890 + 29890 29885 29884 + 29886 29876 29786 + 29786 29785 29886 + 29886 29785 29791 + 29791 29887 29886 + 29887 29791 29790 + 29790 29806 29887 + 29887 29806 29888 + 29805 29888 29806 + 29805 29891 29888 + 29891 29889 29888 + 29889 29891 29892 + 29890 29889 29892 + 29893 29890 29892 + 29890 29893 29830 + 29830 29885 29890 + 29885 29830 29839 + 29811 29891 29805 + 29891 29811 29810 + 29810 29892 29891 + 29810 29894 29892 + 29892 29894 29893 + 29893 29894 29815 + 29820 29893 29815 + 29830 29893 29820 + 29894 29810 29815 + 29839 29847 29881 + 29881 29847 29864 + 29864 29895 29881 + 29881 29895 29872 + 29895 29873 29872 + 29862 29873 29895 + 29895 29863 29862 + 29863 29895 29864 + 29896 29897 29898 + 29897 29896 29899 + 29899 29900 29897 + 29897 29900 29901 + 29901 29902 29897 + 29897 29902 29898 + 29898 29903 29896 + 29903 29904 29896 + 29899 29896 29904 + 29904 29905 29899 + 29906 29899 29905 + 29900 29899 29906 + 29903 29898 29907 + 29908 29903 29907 + 29903 29908 29909 + 29909 29904 29903 + 29904 29909 29910 + 29910 29905 29904 + 29907 29898 29902 + 29902 29911 29907 + 29907 29911 29912 + 29913 29907 29912 + 29907 29913 29914 + 29907 29914 29915 + 29915 29916 29907 + 29916 29908 29907 + 29911 29902 29901 + 29901 29917 29911 + 29911 29917 29918 + 29918 29912 29911 + 29919 29912 29918 + 29912 29919 29913 + 29913 29919 29920 + 29921 29913 29920 + 29913 29921 29914 + 29917 29901 29922 + 29922 29923 29917 + 29917 29923 29924 + 29924 29918 29917 + 29925 29918 29924 + 29918 29925 29919 + 29919 29925 29926 + 29926 29920 29919 + 29922 29901 29900 + 29900 29927 29922 + 29928 29922 29927 + 29923 29922 29928 + 29928 29929 29923 + 29923 29929 29930 + 29930 29924 29923 + 29931 29924 29930 + 29924 29931 29925 + 29906 29927 29900 + 29927 29906 29932 + 29932 29933 29927 + 29927 29933 29928 + 29934 29928 29933 + 29929 29928 29934 + 29934 29935 29929 + 29929 29935 29936 + 29936 29930 29929 + 29932 29906 29937 + 29937 29938 29932 + 29939 29932 29938 + 29933 29932 29939 + 29939 29940 29933 + 29933 29940 29934 + 29941 29934 29940 + 29935 29934 29941 + 29905 29937 29906 + 29942 29937 29905 + 29937 29942 29943 + 29943 29938 29937 + 29938 29943 29944 + 29944 29945 29938 + 29938 29945 29939 + 29946 29939 29945 + 29940 29939 29946 + 29905 29910 29942 + 29942 29910 29947 + 29947 29948 29942 + 29943 29942 29948 + 29948 29949 29943 + 29944 29943 29949 + 29949 29950 29944 + 29951 29944 29950 + 29945 29944 29951 + 29952 29947 29910 + 29953 29947 29952 + 29947 29953 29954 + 29954 29948 29947 + 29948 29954 29955 + 29955 29949 29948 + 29949 29955 29956 + 29956 29950 29949 + 29910 29909 29952 + 29908 29952 29909 + 29908 29916 29952 + 29916 29957 29952 + 29952 29957 29953 + 29953 29957 29958 + 29958 29959 29953 + 29954 29953 29959 + 29959 29960 29954 + 29955 29954 29960 + 29960 29961 29955 + 29956 29955 29961 + 29916 29958 29957 + 29916 29915 29958 + 29915 29962 29958 + 29958 29962 29963 + 29963 29959 29958 + 29959 29963 29964 + 29964 29960 29959 + 29960 29964 29965 + 29965 29961 29960 + 29915 29966 29962 + 29963 29962 29966 + 29966 29967 29963 + 29964 29963 29967 + 29967 29968 29964 + 29965 29964 29968 + 29968 29969 29965 + 29970 29965 29969 + 29961 29965 29970 + 29971 29966 29915 + 29966 29971 29972 + 29972 29967 29966 + 29967 29972 29973 + 29973 29968 29967 + 29968 29973 29974 + 29974 29969 29968 + 29915 29975 29971 + 29975 29976 29971 + 29972 29971 29976 + 29976 29977 29972 + 29972 29977 29978 + 29978 29973 29972 + 29974 29973 29978 + 29979 29975 29915 + 29975 29979 29976 + 29979 29980 29976 + 29976 29980 29981 + 29981 29977 29976 + 29977 29981 29982 + 29982 29978 29977 + 29983 29979 29915 + 29979 29983 29984 + 29979 29984 29980 + 29981 29980 29984 + 29984 29985 29981 + 29982 29981 29985 + 29985 29986 29982 + 29987 29982 29986 + 29978 29982 29987 + 29914 29983 29915 + 29983 29914 29988 + 29988 29989 29983 + 29983 29989 29990 + 29983 29990 29984 + 29984 29990 29991 + 29991 29985 29984 + 29985 29991 29992 + 29992 29986 29985 + 29914 29993 29988 + 29994 29988 29993 + 29989 29988 29994 + 29994 29995 29989 + 29989 29995 29991 + 29991 29990 29989 + 29996 29993 29914 + 29993 29996 29997 + 29997 29998 29993 + 29993 29998 29994 + 29999 29994 29998 + 29995 29994 29999 + 29914 29921 29996 + 29921 30000 29996 + 29997 29996 30000 + 30000 30001 29997 + 30002 29997 30001 + 29998 29997 30002 + 30002 30003 29998 + 29998 30003 29999 + 29920 30000 29921 + 30000 29920 29926 + 29926 30001 30000 + 30001 29926 30004 + 30004 30005 30001 + 30001 30005 30002 + 30006 30002 30005 + 30003 30002 30006 + 30006 30007 30003 + 30003 30007 30008 + 30008 29999 30003 + 30004 29926 29925 + 29925 29931 30004 + 30009 30004 29931 + 30005 30004 30009 + 30009 30010 30005 + 30005 30010 30006 + 30011 30006 30010 + 30007 30006 30011 + 30011 30012 30007 + 30008 30007 30012 + 29931 30013 30009 + 30014 30009 30013 + 30010 30009 30014 + 30014 30015 30010 + 30010 30015 30011 + 30016 30011 30015 + 30012 30011 30016 + 29930 30013 29931 + 30013 29930 29936 + 29936 30017 30013 + 30013 30017 30014 + 30018 30014 30017 + 30014 30018 30019 + 30015 30014 30019 + 30015 30019 30016 + 30017 29936 30020 + 30020 30021 30017 + 30017 30021 30018 + 30022 30018 30021 + 30019 30018 30022 + 30022 30023 30019 + 30016 30019 30023 + 30020 29936 29935 + 29935 30024 30020 + 30020 30024 30025 + 30025 30026 30020 + 30021 30020 30026 + 30026 30027 30021 + 30027 30022 30021 + 29941 30024 29935 + 30024 29941 30028 + 30028 30025 30024 + 30025 30028 30029 + 30029 30030 30025 + 30025 30030 30031 + 30031 30026 30025 + 30027 30026 30031 + 30031 30032 30027 + 30027 30032 30022 + 30028 29941 30033 + 30033 30034 30028 + 30029 30028 30034 + 30034 30035 30029 + 30029 30035 30036 + 30036 30037 30029 + 30030 30029 30037 + 29941 30038 30033 + 30039 30033 30038 + 30033 30039 30040 + 30033 30040 30034 + 30040 30041 30034 + 30035 30034 30041 + 30035 30041 30042 + 30042 30036 30035 + 29940 30038 29941 + 29946 30038 29940 + 30038 29946 30039 + 30039 29946 30043 + 30043 30044 30039 + 30040 30039 30044 + 30044 30045 30040 + 30041 30040 30045 + 30042 30041 30045 + 30046 30042 30045 + 30047 30042 30046 + 30036 30042 30047 + 29945 30043 29946 + 29951 30043 29945 + 30043 29951 30048 + 30048 30044 30043 + 30045 30044 30048 + 30048 30049 30045 + 30045 30049 30050 + 30050 30051 30045 + 30045 30051 30046 + 30052 30048 29951 + 30052 30053 30048 + 30053 30049 30048 + 30050 30049 30053 + 29951 30054 30052 + 30055 30052 30054 + 30052 30055 30056 + 30053 30052 30056 + 30053 30056 30057 + 30057 30058 30053 + 30053 30058 30050 + 29950 30054 29951 + 30059 30054 29950 + 30054 30059 30055 + 30060 30055 30059 + 30056 30055 30060 + 30060 30061 30056 + 30056 30061 30062 + 30062 30057 30056 + 30063 30057 30062 + 30058 30057 30063 + 29950 29956 30059 + 30059 29956 30064 + 30064 30065 30059 + 30059 30065 30060 + 30066 30060 30065 + 30060 30066 30067 + 30067 30061 30060 + 30061 30067 30068 + 30068 30062 30061 + 29961 30064 29956 + 29970 30064 29961 + 30064 29970 30069 + 30064 30069 30065 + 30065 30069 30066 + 30070 30066 30069 + 30067 30066 30070 + 30070 30071 30067 + 30067 30071 30072 + 30072 30068 30067 + 30069 29970 30073 + 30073 30074 30069 + 30069 30074 30070 + 30075 30070 30074 + 30070 30075 30076 + 30076 30071 30070 + 30071 30076 30077 + 30077 30072 30071 + 29969 30073 29970 + 30078 30073 29969 + 30073 30078 30079 + 30079 30074 30073 + 30074 30079 30075 + 30080 30075 30079 + 30076 30075 30080 + 30080 30081 30076 + 30077 30076 30081 + 29969 29974 30078 + 30078 29974 30082 + 30082 30083 30078 + 30079 30078 30083 + 30083 30084 30079 + 30079 30084 30080 + 30085 30080 30084 + 30081 30080 30085 + 29978 30082 29974 + 29987 30082 29978 + 30082 29987 30086 + 30086 30083 30082 + 30083 30086 30087 + 30087 30084 30083 + 30084 30087 30085 + 30088 30085 30087 + 30089 30085 30088 + 30085 30089 30081 + 30086 29987 30090 + 30090 30091 30086 + 30087 30086 30091 + 30091 30092 30087 + 30087 30092 30088 + 30093 30088 30092 + 30094 30088 30093 + 30088 30094 30089 + 29986 30090 29987 + 30095 30090 29986 + 30090 30095 30096 + 30096 30091 30090 + 30091 30096 30097 + 30097 30092 30091 + 30092 30097 30093 + 29986 29992 30095 + 30095 29992 30098 + 30098 30099 30095 + 30096 30095 30099 + 30099 30100 30096 + 30097 30096 30100 + 30100 30101 30097 + 30093 30097 30101 + 29995 30098 29992 + 29999 30098 29995 + 30098 29999 30008 + 30008 30099 30098 + 30099 30008 30102 + 30102 30100 30099 + 30100 30102 30103 + 30103 30101 30100 + 29992 29991 29995 + 30012 30102 30008 + 30103 30102 30012 + 30012 30104 30103 + 30103 30104 30105 + 30105 30106 30103 + 30101 30103 30106 + 30106 30107 30101 + 30101 30107 30093 + 30108 30093 30107 + 30093 30108 30094 + 30016 30104 30012 + 30104 30016 30109 + 30109 30110 30104 + 30104 30110 30105 + 30023 30109 30016 + 30109 30023 30111 + 30112 30109 30111 + 30112 30110 30109 + 30110 30112 30113 + 30113 30105 30110 + 30111 30023 30022 + 30032 30111 30022 + 30111 30032 30114 + 30112 30111 30114 + 30114 30113 30112 + 30115 30113 30114 + 30105 30113 30115 + 30115 30116 30105 + 30105 30116 30117 + 30117 30106 30105 + 30106 30117 30118 + 30118 30107 30106 + 30107 30118 30108 + 30119 30114 30032 + 30120 30114 30119 + 30114 30120 30115 + 30121 30115 30120 + 30116 30115 30121 + 30121 30122 30116 + 30116 30122 30123 + 30123 30117 30116 + 30118 30117 30123 + 30032 30031 30119 + 30124 30119 30031 + 30125 30119 30124 + 30119 30125 30120 + 30120 30125 30126 + 30126 30127 30120 + 30120 30127 30128 + 30128 30121 30120 + 30031 30030 30124 + 30037 30124 30030 + 30124 30037 30129 + 30124 30129 30125 + 30125 30129 30130 + 30130 30131 30125 + 30131 30132 30125 + 30132 30126 30125 + 30133 30126 30132 + 30133 30127 30126 + 30129 30037 30036 + 30036 30130 30129 + 30047 30130 30036 + 30130 30047 30134 + 30134 30131 30130 + 30131 30134 30135 + 30135 30136 30131 + 30131 30136 30137 + 30137 30132 30131 + 30137 30138 30132 + 30132 30138 30133 + 30139 30134 30047 + 30135 30134 30139 + 30139 30140 30135 + 30135 30140 30141 + 30141 30142 30135 + 30136 30135 30142 + 30142 30143 30136 + 30137 30136 30143 + 30144 30139 30047 + 30145 30139 30144 + 30145 30140 30139 + 30140 30145 30146 + 30146 30141 30140 + 30047 30147 30144 + 30148 30144 30147 + 30144 30148 30149 + 30149 30150 30144 + 30144 30150 30145 + 30046 30147 30047 + 30046 30151 30147 + 30147 30151 30148 + 30152 30148 30151 + 30152 30153 30148 + 30153 30149 30148 + 30153 30154 30149 + 30150 30149 30154 + 30154 30155 30150 + 30145 30150 30155 + 30151 30046 30051 + 30051 30152 30151 + 30152 30051 30050 + 30153 30152 30050 + 30050 30156 30153 + 30153 30156 30154 + 30156 30157 30154 + 30154 30157 30155 + 30155 30157 30158 + 30158 30159 30155 + 30155 30159 30145 + 30159 30146 30145 + 30160 30146 30159 + 30141 30146 30160 + 30156 30050 30058 + 30058 30161 30156 + 30157 30156 30161 + 30158 30157 30161 + 30162 30158 30161 + 30159 30158 30162 + 30159 30162 30160 + 30163 30160 30162 + 30164 30160 30163 + 30160 30164 30141 + 30063 30161 30058 + 30161 30063 30162 + 30162 30063 30163 + 30062 30163 30063 + 30163 30062 30068 + 30068 30165 30163 + 30163 30165 30164 + 30164 30165 30166 + 30166 30167 30164 + 30141 30164 30167 + 30167 30142 30141 + 30143 30142 30167 + 30165 30068 30072 + 30072 30166 30165 + 30166 30072 30077 + 30077 30168 30166 + 30166 30168 30169 + 30169 30167 30166 + 30167 30169 30143 + 30143 30169 30170 + 30170 30171 30143 + 30143 30171 30137 + 30168 30077 30172 + 30172 30173 30168 + 30168 30173 30174 + 30174 30170 30168 + 30170 30169 30168 + 30081 30172 30077 + 30175 30172 30081 + 30172 30175 30176 + 30176 30173 30172 + 30173 30176 30177 + 30177 30174 30173 + 30081 30089 30175 + 30175 30089 30094 + 30178 30175 30094 + 30176 30175 30178 + 30178 30179 30176 + 30176 30179 30180 + 30180 30177 30176 + 30181 30177 30180 + 30174 30177 30181 + 30094 30182 30178 + 30183 30178 30182 + 30179 30178 30183 + 30179 30183 30184 + 30184 30180 30179 + 30180 30184 30185 + 30180 30185 30181 + 30186 30182 30094 + 30182 30186 30187 + 30187 30188 30182 + 30182 30188 30183 + 30188 30189 30183 + 30189 30184 30183 + 30185 30184 30189 + 30189 30190 30185 + 30181 30185 30190 + 30094 30108 30186 + 30186 30108 30118 + 30118 30191 30186 + 30187 30186 30191 + 30191 30192 30187 + 30187 30192 30193 + 30193 30194 30187 + 30188 30187 30194 + 30194 30189 30188 + 30189 30194 30190 + 30123 30191 30118 + 30191 30123 30192 + 30192 30123 30122 + 30122 30193 30192 + 30193 30122 30121 + 30193 30121 30128 + 30128 30194 30193 + 30194 30128 30190 + 30195 30190 30128 + 30190 30195 30181 + 30196 30181 30195 + 30181 30196 30174 + 30174 30196 30197 + 30197 30170 30174 + 30170 30197 30171 + 30198 30195 30128 + 30199 30195 30198 + 30195 30199 30196 + 30197 30196 30199 + 30199 30133 30197 + 30133 30138 30197 + 30197 30138 30137 + 30171 30197 30137 + 30127 30198 30128 + 30199 30198 30127 + 30127 30133 30199 + 30200 30201 30202 + 30201 30200 30203 + 30201 30203 30204 + 30204 30205 30201 + 30205 30206 30201 + 30206 30207 30201 + 30201 30207 30208 + 30208 30209 30201 + 30201 30209 30202 + 30202 30210 30200 + 30210 30211 30200 + 30212 30200 30211 + 30200 30212 30203 + 30210 30202 30213 + 30213 30214 30210 + 30210 30214 30215 + 30215 30211 30210 + 30216 30211 30215 + 30211 30216 30212 + 30216 30217 30212 + 30203 30212 30217 + 30213 30202 30209 + 30209 30218 30213 + 30219 30213 30218 + 30214 30213 30219 + 30219 30220 30214 + 30214 30220 30221 + 30221 30215 30214 + 30222 30215 30221 + 30215 30222 30216 + 30223 30218 30209 + 30218 30223 30224 + 30224 30225 30218 + 30218 30225 30219 + 30226 30219 30225 + 30220 30219 30226 + 30209 30208 30223 + 30223 30208 30227 + 30227 30228 30223 + 30224 30223 30228 + 30228 30229 30224 + 30230 30224 30229 + 30225 30224 30230 + 30230 30231 30225 + 30225 30231 30226 + 30227 30208 30207 + 30227 30207 30206 + 30232 30227 30206 + 30227 30232 30233 + 30233 30228 30227 + 30228 30233 30234 + 30234 30229 30228 + 30229 30234 30235 + 30235 30236 30229 + 30229 30236 30230 + 30237 30232 30206 + 30233 30232 30237 + 30237 30238 30233 + 30234 30233 30238 + 30238 30239 30234 + 30235 30234 30239 + 30239 30240 30235 + 30241 30235 30240 + 30236 30235 30241 + 30237 30206 30205 + 30242 30237 30205 + 30237 30242 30243 + 30243 30238 30237 + 30238 30243 30244 + 30244 30239 30238 + 30239 30244 30245 + 30245 30240 30239 + 30246 30242 30205 + 30243 30242 30246 + 30246 30247 30243 + 30244 30243 30247 + 30247 30248 30244 + 30245 30244 30248 + 30248 30249 30245 + 30250 30245 30249 + 30240 30245 30250 + 30251 30246 30205 + 30246 30251 30252 + 30252 30247 30246 + 30247 30252 30253 + 30253 30248 30247 + 30248 30253 30254 + 30254 30249 30248 + 30205 30204 30251 + 30255 30251 30204 + 30252 30251 30255 + 30255 30256 30252 + 30253 30252 30256 + 30256 30257 30253 + 30254 30253 30257 + 30258 30255 30204 + 30255 30258 30259 + 30259 30256 30255 + 30256 30259 30260 + 30260 30257 30256 + 30257 30260 30261 + 30261 30262 30257 + 30257 30262 30254 + 30204 30263 30258 + 30264 30258 30263 + 30259 30258 30264 + 30264 30265 30259 + 30260 30259 30265 + 30265 30266 30260 + 30261 30260 30266 + 30267 30263 30204 + 30263 30267 30268 + 30268 30264 30263 + 30264 30268 30269 + 30269 30265 30264 + 30265 30269 30270 + 30270 30266 30265 + 30271 30267 30204 + 30267 30271 30272 + 30272 30273 30267 + 30273 30268 30267 + 30269 30268 30273 + 30273 30274 30269 + 30270 30269 30274 + 30275 30271 30204 + 30271 30275 30276 + 30276 30277 30271 + 30277 30272 30271 + 30278 30272 30277 + 30273 30272 30278 + 30278 30274 30273 + 30203 30275 30204 + 30275 30203 30279 + 30279 30280 30275 + 30280 30276 30275 + 30281 30276 30280 + 30277 30276 30281 + 30281 30282 30277 + 30277 30282 30278 + 30283 30279 30203 + 30284 30279 30283 + 30280 30279 30284 + 30284 30285 30280 + 30280 30285 30281 + 30286 30281 30285 + 30282 30281 30286 + 30286 30287 30282 + 30278 30282 30287 + 30217 30283 30203 + 30283 30217 30288 + 30288 30289 30283 + 30283 30289 30284 + 30290 30284 30289 + 30285 30284 30290 + 30290 30291 30285 + 30285 30291 30286 + 30292 30286 30291 + 30287 30286 30292 + 30288 30217 30216 + 30216 30222 30288 + 30293 30288 30222 + 30289 30288 30293 + 30293 30294 30289 + 30289 30294 30290 + 30295 30290 30294 + 30291 30290 30295 + 30295 30296 30291 + 30291 30296 30292 + 30222 30297 30293 + 30298 30293 30297 + 30294 30293 30298 + 30298 30299 30294 + 30294 30299 30295 + 30300 30295 30299 + 30296 30295 30300 + 30221 30297 30222 + 30297 30221 30301 + 30301 30302 30297 + 30297 30302 30298 + 30303 30298 30302 + 30299 30298 30303 + 30303 30304 30299 + 30299 30304 30300 + 30301 30221 30220 + 30220 30305 30301 + 30306 30301 30305 + 30302 30301 30306 + 30306 30307 30302 + 30302 30307 30303 + 30308 30303 30307 + 30304 30303 30308 + 30226 30305 30220 + 30305 30226 30309 + 30309 30310 30305 + 30305 30310 30306 + 30311 30306 30310 + 30307 30306 30311 + 30311 30312 30307 + 30307 30312 30308 + 30309 30226 30231 + 30231 30313 30309 + 30314 30309 30313 + 30310 30309 30314 + 30314 30315 30310 + 30310 30315 30311 + 30316 30311 30315 + 30312 30311 30316 + 30316 30317 30312 + 30308 30312 30317 + 30318 30313 30231 + 30313 30318 30319 + 30319 30320 30313 + 30313 30320 30314 + 30231 30230 30318 + 30318 30230 30236 + 30236 30321 30318 + 30319 30318 30321 + 30321 30322 30319 + 30319 30322 30323 + 30323 30324 30319 + 30320 30319 30324 + 30324 30325 30320 + 30314 30320 30325 + 30241 30321 30236 + 30321 30241 30326 + 30326 30322 30321 + 30322 30326 30327 + 30327 30323 30322 + 30323 30327 30328 + 30328 30329 30323 + 30323 30329 30330 + 30330 30324 30323 + 30325 30324 30330 + 30326 30241 30331 + 30331 30332 30326 + 30326 30332 30327 + 30332 30333 30327 + 30328 30327 30333 + 30240 30331 30241 + 30250 30331 30240 + 30332 30331 30250 + 30334 30332 30250 + 30332 30334 30333 + 30334 30335 30333 + 30333 30335 30336 + 30333 30336 30328 + 30328 30336 30337 + 30337 30338 30328 + 30329 30328 30338 + 30334 30250 30339 + 30339 30340 30334 + 30335 30334 30340 + 30341 30335 30340 + 30336 30335 30341 + 30341 30342 30336 + 30336 30342 30337 + 30249 30339 30250 + 30343 30339 30249 + 30339 30343 30344 + 30344 30340 30339 + 30340 30344 30345 + 30345 30341 30340 + 30341 30345 30342 + 30342 30345 30346 + 30346 30337 30342 + 30249 30254 30343 + 30347 30343 30254 + 30344 30343 30347 + 30347 30348 30344 + 30345 30344 30348 + 30348 30349 30345 + 30349 30346 30345 + 30254 30262 30347 + 30350 30347 30262 + 30347 30350 30351 + 30351 30348 30347 + 30348 30351 30352 + 30352 30349 30348 + 30353 30349 30352 + 30349 30353 30346 + 30262 30261 30350 + 30350 30261 30354 + 30354 30355 30350 + 30351 30350 30355 + 30355 30356 30351 + 30352 30351 30356 + 30356 30357 30352 + 30358 30352 30357 + 30352 30358 30353 + 30266 30354 30261 + 30359 30354 30266 + 30354 30359 30360 + 30360 30355 30354 + 30355 30360 30361 + 30361 30356 30355 + 30356 30361 30362 + 30362 30357 30356 + 30363 30357 30362 + 30357 30363 30358 + 30266 30270 30359 + 30359 30270 30364 + 30364 30365 30359 + 30360 30359 30365 + 30365 30366 30360 + 30361 30360 30366 + 30366 30367 30361 + 30361 30367 30368 + 30368 30362 30361 + 30274 30364 30270 + 30369 30364 30274 + 30364 30369 30370 + 30370 30365 30364 + 30365 30370 30371 + 30371 30366 30365 + 30366 30371 30372 + 30372 30367 30366 + 30367 30372 30373 + 30373 30368 30367 + 30274 30278 30369 + 30287 30369 30278 + 30370 30369 30287 + 30287 30374 30370 + 30371 30370 30374 + 30374 30375 30371 + 30372 30371 30375 + 30375 30376 30372 + 30372 30376 30377 + 30377 30373 30372 + 30292 30374 30287 + 30374 30292 30378 + 30378 30375 30374 + 30375 30378 30379 + 30379 30376 30375 + 30376 30379 30380 + 30380 30377 30376 + 30378 30292 30296 + 30296 30381 30378 + 30379 30378 30381 + 30381 30382 30379 + 30379 30382 30383 + 30383 30380 30379 + 30384 30380 30383 + 30377 30380 30384 + 30300 30381 30296 + 30381 30300 30385 + 30385 30382 30381 + 30382 30385 30386 + 30386 30383 30382 + 30383 30386 30387 + 30387 30388 30383 + 30383 30388 30384 + 30385 30300 30304 + 30304 30389 30385 + 30385 30389 30390 + 30390 30386 30385 + 30387 30386 30390 + 30390 30391 30387 + 30387 30391 30392 + 30392 30393 30387 + 30388 30387 30393 + 30308 30389 30304 + 30389 30308 30394 + 30394 30390 30389 + 30391 30390 30394 + 30394 30395 30391 + 30391 30395 30396 + 30396 30392 30391 + 30317 30394 30308 + 30395 30394 30317 + 30317 30397 30395 + 30396 30395 30397 + 30397 30398 30396 + 30399 30396 30398 + 30392 30396 30399 + 30399 30400 30392 + 30392 30400 30401 + 30401 30393 30392 + 30397 30317 30316 + 30316 30402 30397 + 30397 30402 30403 + 30403 30398 30397 + 30404 30398 30403 + 30398 30404 30399 + 30399 30404 30405 + 30405 30406 30399 + 30400 30399 30406 + 30402 30316 30407 + 30407 30408 30402 + 30403 30402 30408 + 30315 30407 30316 + 30409 30407 30315 + 30408 30407 30409 + 30408 30409 30410 + 30410 30411 30408 + 30408 30411 30403 + 30315 30314 30409 + 30410 30409 30314 + 30325 30410 30314 + 30412 30410 30325 + 30411 30410 30412 + 30411 30412 30413 + 30413 30414 30411 + 30411 30414 30403 + 30414 30415 30403 + 30416 30403 30415 + 30403 30416 30404 + 30325 30417 30412 + 30412 30417 30418 + 30418 30413 30412 + 30419 30413 30418 + 30414 30413 30419 + 30419 30420 30414 + 30414 30420 30421 + 30421 30415 30414 + 30330 30417 30325 + 30417 30330 30422 + 30422 30418 30417 + 30423 30418 30422 + 30418 30423 30419 + 30419 30423 30424 + 30424 30425 30419 + 30425 30426 30419 + 30420 30419 30426 + 30427 30422 30330 + 30423 30422 30427 + 30427 30428 30423 + 30423 30428 30424 + 30429 30424 30428 + 30424 30429 30430 + 30424 30430 30431 + 30431 30425 30424 + 30330 30329 30427 + 30338 30427 30329 + 30428 30427 30338 + 30338 30432 30428 + 30428 30432 30429 + 30433 30429 30432 + 30429 30433 30434 + 30430 30429 30434 + 30430 30434 30435 + 30435 30436 30430 + 30436 30431 30430 + 30432 30338 30337 + 30337 30437 30432 + 30432 30437 30433 + 30437 30438 30433 + 30438 30439 30433 + 30440 30433 30439 + 30433 30440 30434 + 30434 30440 30441 + 30441 30435 30434 + 30337 30346 30437 + 30346 30442 30437 + 30437 30442 30443 + 30443 30438 30437 + 30438 30443 30444 + 30438 30444 30445 + 30445 30439 30438 + 30446 30439 30445 + 30439 30446 30440 + 30353 30442 30346 + 30353 30447 30442 + 30447 30443 30442 + 30444 30443 30447 + 30447 30448 30444 + 30444 30448 30449 + 30445 30444 30449 + 30445 30449 30450 + 30451 30445 30450 + 30445 30451 30446 + 30452 30447 30353 + 30448 30447 30452 + 30448 30452 30453 + 30453 30449 30448 + 30450 30449 30453 + 30453 30454 30450 + 30450 30454 30455 + 30455 30456 30450 + 30451 30450 30456 + 30353 30358 30452 + 30452 30358 30363 + 30363 30453 30452 + 30454 30453 30363 + 30363 30457 30454 + 30454 30457 30458 + 30455 30454 30458 + 30458 30459 30455 + 30460 30455 30459 + 30456 30455 30460 + 30362 30457 30363 + 30457 30362 30368 + 30368 30458 30457 + 30458 30368 30373 + 30373 30461 30458 + 30458 30461 30462 + 30462 30459 30458 + 30459 30462 30463 + 30463 30464 30459 + 30459 30464 30460 + 30461 30373 30377 + 30377 30465 30461 + 30462 30461 30465 + 30465 30466 30462 + 30463 30462 30466 + 30384 30465 30377 + 30465 30384 30467 + 30467 30466 30465 + 30468 30466 30467 + 30466 30468 30463 + 30463 30468 30469 + 30469 30470 30463 + 30470 30471 30463 + 30464 30463 30471 + 30472 30467 30384 + 30473 30467 30472 + 30467 30473 30468 + 30468 30473 30474 + 30474 30469 30468 + 30384 30388 30472 + 30393 30472 30388 + 30475 30472 30393 + 30472 30475 30473 + 30474 30473 30475 + 30475 30476 30474 + 30477 30474 30476 + 30469 30474 30477 + 30477 30478 30469 + 30469 30478 30479 + 30479 30470 30469 + 30393 30401 30475 + 30475 30401 30480 + 30480 30476 30475 + 30476 30480 30481 + 30481 30482 30476 + 30476 30482 30477 + 30477 30482 30483 + 30483 30484 30477 + 30478 30477 30484 + 30480 30401 30400 + 30400 30485 30480 + 30481 30480 30485 + 30485 30486 30481 + 30481 30486 30487 + 30482 30481 30487 + 30487 30483 30482 + 30488 30483 30487 + 30483 30488 30489 + 30489 30484 30483 + 30406 30485 30400 + 30485 30406 30486 + 30490 30486 30406 + 30486 30490 30487 + 30490 30491 30487 + 30488 30487 30491 + 30491 30492 30488 + 30488 30492 30421 + 30489 30488 30421 + 30405 30490 30406 + 30490 30405 30493 + 30491 30490 30493 + 30494 30491 30493 + 30491 30494 30495 + 30495 30492 30491 + 30492 30495 30496 + 30496 30421 30492 + 30421 30496 30415 + 30415 30496 30416 + 30493 30405 30404 + 30404 30497 30493 + 30494 30493 30497 + 30495 30494 30497 + 30497 30416 30495 + 30496 30495 30416 + 30416 30497 30404 + 30421 30420 30489 + 30426 30489 30420 + 30489 30426 30498 + 30498 30484 30489 + 30484 30498 30478 + 30479 30478 30498 + 30498 30499 30479 + 30436 30479 30499 + 30479 30436 30470 + 30498 30426 30425 + 30425 30499 30498 + 30425 30431 30499 + 30499 30431 30436 + 30470 30436 30435 + 30435 30471 30470 + 30500 30471 30435 + 30471 30500 30464 + 30460 30464 30500 + 30500 30501 30460 + 30456 30460 30501 + 30435 30441 30500 + 30500 30441 30502 + 30502 30501 30500 + 30502 30503 30501 + 30501 30503 30456 + 30456 30503 30451 + 30451 30503 30502 + 30446 30451 30502 + 30440 30446 30502 + 30502 30441 30440 + 30504 30505 30506 + 30505 30504 30507 + 30507 30508 30505 + 30505 30508 30509 + 30509 30510 30505 + 30505 30510 30511 + 30511 30506 30505 + 30506 30512 30504 + 30513 30504 30512 + 30507 30504 30513 + 30513 30514 30507 + 30515 30507 30514 + 30508 30507 30515 + 30516 30512 30506 + 30512 30516 30517 + 30517 30518 30512 + 30512 30518 30519 + 30519 30513 30512 + 30520 30513 30519 + 30514 30513 30520 + 30516 30506 30511 + 30511 30521 30516 + 30516 30521 30522 + 30522 30523 30516 + 30523 30517 30516 + 30524 30517 30523 + 30518 30517 30524 + 30525 30521 30511 + 30521 30525 30526 + 30526 30522 30521 + 30522 30526 30527 + 30522 30527 30528 + 30528 30523 30522 + 30528 30529 30523 + 30523 30529 30524 + 30511 30530 30525 + 30525 30530 30531 + 30531 30532 30525 + 30526 30525 30532 + 30532 30533 30526 + 30527 30526 30533 + 30530 30511 30510 + 30510 30534 30530 + 30530 30534 30535 + 30535 30536 30530 + 30536 30531 30530 + 30537 30531 30536 + 30537 30532 30531 + 30532 30537 30538 + 30538 30533 30532 + 30534 30510 30509 + 30509 30539 30534 + 30534 30539 30540 + 30540 30541 30534 + 30534 30541 30535 + 30539 30509 30542 + 30542 30543 30539 + 30539 30543 30544 + 30544 30540 30539 + 30545 30540 30544 + 30540 30545 30546 + 30546 30541 30540 + 30542 30509 30508 + 30508 30547 30542 + 30548 30542 30547 + 30543 30542 30548 + 30548 30549 30543 + 30543 30549 30550 + 30550 30544 30543 + 30551 30544 30550 + 30544 30551 30545 + 30515 30547 30508 + 30547 30515 30552 + 30552 30553 30547 + 30547 30553 30548 + 30554 30548 30553 + 30549 30548 30554 + 30554 30555 30549 + 30549 30555 30556 + 30556 30550 30549 + 30552 30515 30557 + 30557 30558 30552 + 30552 30558 30559 + 30559 30560 30552 + 30553 30552 30560 + 30560 30561 30553 + 30553 30561 30554 + 30557 30515 30514 + 30514 30562 30557 + 30563 30557 30562 + 30557 30563 30564 + 30564 30558 30557 + 30558 30564 30565 + 30565 30559 30558 + 30566 30562 30514 + 30562 30566 30567 + 30562 30567 30563 + 30563 30567 30568 + 30568 30569 30563 + 30564 30563 30569 + 30569 30570 30564 + 30565 30564 30570 + 30514 30520 30566 + 30566 30520 30571 + 30571 30572 30566 + 30567 30566 30572 + 30572 30573 30567 + 30567 30573 30568 + 30520 30574 30571 + 30574 30575 30571 + 30576 30571 30575 + 30577 30571 30576 + 30571 30577 30578 + 30578 30572 30571 + 30573 30572 30578 + 30519 30574 30520 + 30574 30519 30579 + 30579 30580 30574 + 30574 30580 30581 + 30581 30575 30574 + 30582 30575 30581 + 30575 30582 30576 + 30583 30576 30582 + 30577 30576 30583 + 30579 30519 30518 + 30518 30584 30579 + 30579 30584 30585 + 30585 30586 30579 + 30580 30579 30586 + 30586 30587 30580 + 30581 30580 30587 + 30524 30584 30518 + 30584 30524 30588 + 30588 30585 30584 + 30585 30588 30589 + 30589 30590 30585 + 30585 30590 30591 + 30591 30586 30585 + 30587 30586 30591 + 30592 30588 30524 + 30589 30588 30592 + 30592 30593 30589 + 30589 30593 30594 + 30594 30595 30589 + 30590 30589 30595 + 30595 30596 30590 + 30591 30590 30596 + 30524 30529 30592 + 30597 30592 30529 + 30592 30597 30598 + 30598 30593 30592 + 30593 30598 30599 + 30599 30594 30593 + 30600 30594 30599 + 30594 30600 30601 + 30601 30595 30594 + 30596 30595 30601 + 30529 30528 30597 + 30602 30597 30528 + 30598 30597 30602 + 30602 30603 30598 + 30598 30603 30604 + 30604 30605 30598 + 30605 30599 30598 + 30600 30599 30605 + 30528 30527 30602 + 30527 30606 30602 + 30606 30607 30602 + 30608 30602 30607 + 30602 30608 30603 + 30608 30609 30603 + 30603 30609 30610 + 30610 30604 30603 + 30533 30606 30527 + 30538 30606 30533 + 30607 30606 30538 + 30611 30607 30538 + 30607 30611 30612 + 30607 30612 30608 + 30608 30612 30613 + 30609 30608 30613 + 30613 30614 30609 + 30609 30614 30615 + 30615 30610 30609 + 30611 30538 30616 + 30616 30617 30611 + 30612 30611 30617 + 30617 30618 30612 + 30612 30618 30613 + 30619 30613 30618 + 30614 30613 30619 + 30538 30537 30616 + 30536 30616 30537 + 30536 30620 30616 + 30616 30620 30621 + 30621 30617 30616 + 30618 30617 30621 + 30618 30621 30619 + 30619 30621 30622 + 30622 30623 30619 + 30624 30619 30623 + 30619 30624 30614 + 30620 30536 30535 + 30535 30622 30620 + 30621 30620 30622 + 30622 30535 30625 + 30625 30626 30622 + 30622 30626 30627 + 30627 30623 30622 + 30628 30623 30627 + 30623 30628 30624 + 30625 30535 30541 + 30541 30546 30625 + 30629 30625 30546 + 30626 30625 30629 + 30629 30630 30626 + 30626 30630 30631 + 30631 30627 30626 + 30632 30627 30631 + 30627 30632 30628 + 30546 30633 30629 + 30634 30629 30633 + 30630 30629 30634 + 30634 30635 30630 + 30630 30635 30636 + 30636 30631 30630 + 30637 30631 30636 + 30631 30637 30632 + 30638 30633 30546 + 30639 30633 30638 + 30633 30639 30634 + 30640 30634 30639 + 30635 30634 30640 + 30640 30641 30635 + 30635 30641 30642 + 30642 30636 30635 + 30546 30545 30638 + 30643 30638 30545 + 30644 30638 30643 + 30638 30644 30639 + 30639 30644 30645 + 30645 30646 30639 + 30639 30646 30640 + 30647 30640 30646 + 30640 30647 30641 + 30545 30551 30643 + 30648 30643 30551 + 30649 30643 30648 + 30643 30649 30644 + 30644 30649 30650 + 30650 30645 30644 + 30651 30645 30650 + 30645 30651 30652 + 30652 30646 30645 + 30646 30652 30647 + 30551 30653 30648 + 30654 30648 30653 + 30655 30648 30654 + 30648 30655 30649 + 30649 30655 30656 + 30656 30650 30649 + 30657 30650 30656 + 30650 30657 30651 + 30550 30653 30551 + 30653 30550 30556 + 30556 30658 30653 + 30653 30658 30654 + 30659 30654 30658 + 30660 30654 30659 + 30654 30660 30655 + 30655 30660 30661 + 30661 30656 30655 + 30662 30656 30661 + 30656 30662 30657 + 30658 30556 30663 + 30663 30664 30658 + 30658 30664 30659 + 30665 30659 30664 + 30666 30659 30665 + 30659 30666 30660 + 30660 30666 30667 + 30667 30661 30660 + 30663 30556 30555 + 30555 30668 30663 + 30663 30668 30669 + 30664 30663 30669 + 30669 30665 30664 + 30665 30669 30670 + 30671 30665 30670 + 30665 30671 30666 + 30671 30667 30666 + 30672 30668 30555 + 30668 30672 30670 + 30670 30669 30668 + 30555 30554 30672 + 30672 30554 30561 + 30561 30673 30672 + 30670 30672 30673 + 30674 30670 30673 + 30670 30674 30671 + 30675 30673 30561 + 30673 30675 30674 + 30674 30675 30676 + 30677 30674 30676 + 30674 30677 30671 + 30561 30560 30675 + 30675 30560 30559 + 30559 30676 30675 + 30678 30676 30559 + 30676 30678 30677 + 30677 30678 30679 + 30680 30677 30679 + 30677 30680 30671 + 30559 30565 30678 + 30678 30565 30681 + 30681 30679 30678 + 30682 30679 30681 + 30679 30682 30680 + 30680 30682 30683 + 30684 30680 30683 + 30680 30684 30671 + 30570 30681 30565 + 30685 30681 30570 + 30681 30685 30682 + 30682 30685 30686 + 30686 30683 30682 + 30687 30683 30686 + 30683 30687 30684 + 30684 30687 30688 + 30689 30684 30688 + 30684 30689 30671 + 30570 30690 30685 + 30685 30690 30691 + 30691 30686 30685 + 30692 30686 30691 + 30686 30692 30687 + 30687 30692 30693 + 30693 30688 30687 + 30694 30688 30693 + 30688 30694 30689 + 30690 30570 30569 + 30569 30695 30690 + 30690 30695 30696 + 30696 30691 30690 + 30691 30696 30697 + 30697 30698 30691 + 30691 30698 30692 + 30693 30692 30698 + 30695 30569 30568 + 30568 30699 30695 + 30695 30699 30700 + 30700 30696 30695 + 30697 30696 30700 + 30700 30701 30697 + 30697 30701 30702 + 30702 30703 30697 + 30698 30697 30703 + 30699 30568 30704 + 30704 30705 30699 + 30699 30705 30706 + 30706 30700 30699 + 30701 30700 30706 + 30706 30707 30701 + 30701 30707 30708 + 30708 30702 30701 + 30704 30568 30573 + 30573 30578 30704 + 30709 30704 30578 + 30705 30704 30709 + 30709 30710 30705 + 30706 30705 30710 + 30710 30711 30706 + 30707 30706 30711 + 30711 30712 30707 + 30708 30707 30712 + 30578 30577 30709 + 30577 30713 30709 + 30714 30709 30713 + 30709 30714 30715 + 30715 30710 30709 + 30710 30715 30716 + 30716 30711 30710 + 30711 30716 30717 + 30717 30712 30711 + 30583 30713 30577 + 30718 30713 30583 + 30713 30718 30714 + 30714 30718 30719 + 30719 30720 30714 + 30715 30714 30720 + 30720 30721 30715 + 30716 30715 30721 + 30721 30722 30716 + 30717 30716 30722 + 30718 30583 30723 + 30723 30724 30718 + 30718 30724 30719 + 30725 30719 30724 + 30725 30726 30719 + 30719 30726 30727 + 30727 30720 30719 + 30721 30720 30727 + 30582 30723 30583 + 30582 30728 30723 + 30728 30729 30723 + 30723 30729 30724 + 30729 30730 30724 + 30724 30730 30725 + 30725 30730 30731 + 30731 30732 30725 + 30726 30725 30732 + 30581 30728 30582 + 30728 30581 30733 + 30733 30734 30728 + 30734 30729 30728 + 30730 30729 30734 + 30734 30731 30730 + 30735 30731 30734 + 30731 30735 30736 + 30736 30732 30731 + 30587 30733 30581 + 30735 30733 30587 + 30734 30733 30735 + 30587 30737 30735 + 30735 30737 30738 + 30738 30736 30735 + 30736 30738 30739 + 30740 30736 30739 + 30732 30736 30740 + 30740 30741 30732 + 30732 30741 30726 + 30591 30737 30587 + 30737 30591 30742 + 30742 30738 30737 + 30739 30738 30742 + 30743 30739 30742 + 30739 30743 30744 + 30744 30745 30739 + 30740 30739 30745 + 30745 30746 30740 + 30741 30740 30746 + 30596 30742 30591 + 30742 30596 30747 + 30743 30742 30747 + 30743 30747 30748 + 30748 30744 30743 + 30749 30744 30748 + 30745 30744 30749 + 30749 30750 30745 + 30745 30750 30751 + 30751 30746 30745 + 30601 30747 30596 + 30747 30601 30752 + 30752 30748 30747 + 30748 30752 30753 + 30753 30754 30748 + 30748 30754 30749 + 30755 30749 30754 + 30750 30749 30755 + 30756 30752 30601 + 30753 30752 30756 + 30756 30757 30753 + 30758 30753 30757 + 30754 30753 30758 + 30758 30759 30754 + 30754 30759 30755 + 30601 30600 30756 + 30600 30760 30756 + 30761 30756 30760 + 30756 30761 30762 + 30762 30757 30756 + 30757 30762 30763 + 30763 30758 30757 + 30758 30763 30642 + 30759 30758 30642 + 30605 30760 30600 + 30764 30760 30605 + 30760 30764 30761 + 30765 30761 30764 + 30762 30761 30765 + 30765 30766 30762 + 30763 30762 30766 + 30766 30767 30763 + 30642 30763 30767 + 30767 30636 30642 + 30636 30767 30637 + 30764 30605 30604 + 30604 30768 30764 + 30764 30768 30765 + 30768 30769 30765 + 30770 30765 30769 + 30765 30770 30771 + 30771 30766 30765 + 30766 30771 30637 + 30637 30767 30766 + 30768 30604 30610 + 30768 30610 30615 + 30615 30769 30768 + 30615 30772 30769 + 30769 30772 30770 + 30770 30772 30624 + 30624 30628 30770 + 30771 30770 30628 + 30628 30632 30771 + 30637 30771 30632 + 30772 30615 30614 + 30614 30624 30772 + 30642 30773 30759 + 30773 30642 30774 + 30774 30775 30773 + 30776 30773 30775 + 30759 30773 30776 + 30776 30755 30759 + 30641 30774 30642 + 30777 30774 30641 + 30774 30777 30778 + 30778 30775 30774 + 30775 30778 30712 + 30712 30717 30775 + 30775 30717 30776 + 30722 30776 30717 + 30755 30776 30722 + 30641 30647 30777 + 30777 30647 30652 + 30652 30779 30777 + 30778 30777 30779 + 30779 30708 30778 + 30712 30778 30708 + 30780 30779 30652 + 30708 30779 30780 + 30780 30702 30708 + 30702 30780 30781 + 30781 30703 30702 + 30652 30651 30780 + 30781 30780 30651 + 30651 30657 30781 + 30782 30781 30657 + 30703 30781 30782 + 30782 30783 30703 + 30703 30783 30698 + 30698 30783 30693 + 30784 30693 30783 + 30693 30784 30694 + 30657 30662 30782 + 30784 30782 30662 + 30783 30782 30784 + 30662 30785 30784 + 30694 30784 30785 + 30785 30786 30694 + 30689 30694 30786 + 30671 30689 30786 + 30786 30667 30671 + 30661 30785 30662 + 30785 30661 30667 + 30667 30786 30785 + 30722 30787 30755 + 30787 30722 30721 + 30721 30788 30787 + 30750 30787 30788 + 30755 30787 30750 + 30727 30788 30721 + 30788 30727 30789 + 30789 30751 30788 + 30788 30751 30750 + 30727 30726 30789 + 30726 30741 30789 + 30746 30789 30741 + 30751 30789 30746 + 30790 30791 30792 + 30791 30790 30793 + 30791 30793 30794 + 30794 30795 30791 + 30791 30795 30796 + 30796 30792 30791 + 30792 30797 30790 + 30798 30790 30797 + 30793 30790 30798 + 30798 30799 30793 + 30794 30793 30799 + 30797 30792 30800 + 30800 30801 30797 + 30797 30801 30802 + 30802 30803 30797 + 30797 30803 30804 + 30804 30798 30797 + 30800 30792 30796 + 30796 30805 30800 + 30806 30800 30805 + 30801 30800 30806 + 30806 30807 30801 + 30801 30807 30808 + 30808 30809 30801 + 30809 30802 30801 + 30810 30805 30796 + 30805 30810 30811 + 30811 30812 30805 + 30805 30812 30806 + 30813 30806 30812 + 30807 30806 30813 + 30796 30814 30810 + 30810 30814 30815 + 30815 30816 30810 + 30811 30810 30816 + 30816 30817 30811 + 30818 30811 30817 + 30812 30811 30818 + 30814 30796 30795 + 30795 30819 30814 + 30815 30814 30819 + 30819 30795 30794 + 30794 30820 30819 + 30819 30820 30821 + 30821 30822 30819 + 30819 30822 30815 + 30820 30794 30823 + 30823 30824 30820 + 30820 30824 30825 + 30825 30821 30820 + 30826 30821 30825 + 30822 30821 30826 + 30827 30823 30794 + 30828 30823 30827 + 30828 30824 30823 + 30824 30828 30829 + 30829 30825 30824 + 30825 30829 30830 + 30825 30830 30826 + 30799 30827 30794 + 30831 30827 30799 + 30827 30831 30832 + 30827 30832 30828 + 30828 30832 30833 + 30829 30828 30833 + 30834 30829 30833 + 30830 30829 30834 + 30799 30835 30831 + 30831 30835 30836 + 30836 30837 30831 + 30832 30831 30837 + 30837 30833 30832 + 30838 30835 30799 + 30835 30838 30839 + 30839 30836 30835 + 30836 30839 30840 + 30840 30841 30836 + 30836 30841 30842 + 30842 30837 30836 + 30833 30837 30842 + 30799 30798 30838 + 30838 30798 30804 + 30804 30843 30838 + 30838 30843 30844 + 30844 30839 30838 + 30840 30839 30844 + 30844 30845 30840 + 30840 30845 30846 + 30846 30847 30840 + 30841 30840 30847 + 30848 30843 30804 + 30843 30848 30849 + 30849 30844 30843 + 30844 30849 30850 + 30850 30845 30844 + 30845 30850 30851 + 30851 30846 30845 + 30804 30852 30848 + 30848 30852 30853 + 30853 30854 30848 + 30848 30854 30855 + 30855 30849 30848 + 30850 30849 30855 + 30852 30804 30803 + 30803 30856 30852 + 30853 30852 30856 + 30856 30857 30853 + 30857 30858 30853 + 30858 30859 30853 + 30860 30853 30859 + 30853 30860 30854 + 30856 30803 30802 + 30856 30802 30809 + 30809 30857 30856 + 30861 30857 30809 + 30857 30861 30862 + 30862 30858 30857 + 30863 30858 30862 + 30858 30863 30864 + 30864 30859 30858 + 30865 30859 30864 + 30859 30865 30860 + 30861 30809 30808 + 30808 30866 30861 + 30862 30861 30866 + 30866 30867 30862 + 30867 30868 30862 + 30863 30862 30868 + 30868 30869 30863 + 30863 30869 30870 + 30870 30864 30863 + 30865 30864 30870 + 30866 30808 30871 + 30871 30872 30866 + 30866 30872 30873 + 30873 30867 30866 + 30874 30867 30873 + 30867 30874 30875 + 30875 30868 30867 + 30871 30808 30807 + 30807 30876 30871 + 30871 30876 30877 + 30877 30878 30871 + 30872 30871 30878 + 30878 30879 30872 + 30872 30879 30880 + 30880 30873 30872 + 30813 30876 30807 + 30876 30813 30881 + 30881 30877 30876 + 30877 30881 30882 + 30882 30883 30877 + 30877 30883 30884 + 30884 30878 30877 + 30879 30878 30884 + 30881 30813 30885 + 30885 30886 30881 + 30882 30881 30886 + 30886 30887 30882 + 30882 30887 30888 + 30883 30882 30888 + 30888 30889 30883 + 30884 30883 30889 + 30812 30885 30813 + 30818 30885 30812 + 30885 30818 30890 + 30890 30886 30885 + 30886 30890 30891 + 30891 30887 30886 + 30887 30891 30892 + 30892 30888 30887 + 30889 30888 30892 + 30893 30889 30892 + 30889 30893 30894 + 30894 30884 30889 + 30884 30894 30879 + 30890 30818 30895 + 30895 30896 30890 + 30891 30890 30896 + 30896 30897 30891 + 30892 30891 30897 + 30898 30892 30897 + 30892 30898 30893 + 30817 30895 30818 + 30899 30895 30817 + 30895 30899 30900 + 30900 30896 30895 + 30896 30900 30901 + 30901 30897 30896 + 30897 30901 30898 + 30901 30902 30898 + 30903 30898 30902 + 30898 30903 30893 + 30817 30904 30899 + 30899 30904 30905 + 30905 30906 30899 + 30900 30899 30906 + 30906 30907 30900 + 30901 30900 30907 + 30907 30902 30901 + 30908 30902 30907 + 30902 30908 30903 + 30904 30817 30816 + 30816 30909 30904 + 30904 30909 30910 + 30910 30905 30904 + 30911 30905 30910 + 30905 30911 30912 + 30912 30906 30905 + 30906 30912 30913 + 30913 30907 30906 + 30907 30913 30908 + 30909 30816 30815 + 30815 30914 30909 + 30909 30914 30915 + 30915 30910 30909 + 30916 30910 30915 + 30910 30916 30911 + 30911 30916 30917 + 30917 30918 30911 + 30912 30911 30918 + 30914 30815 30919 + 30919 30920 30914 + 30915 30914 30920 + 30920 30921 30915 + 30922 30915 30921 + 30915 30922 30916 + 30916 30922 30923 + 30923 30917 30916 + 30924 30919 30815 + 30925 30919 30924 + 30919 30925 30926 + 30926 30920 30919 + 30920 30926 30927 + 30927 30921 30920 + 30822 30924 30815 + 30928 30924 30822 + 30928 30929 30924 + 30924 30929 30925 + 30930 30925 30929 + 30926 30925 30930 + 30930 30931 30926 + 30927 30926 30931 + 30822 30826 30928 + 30932 30928 30826 + 30929 30928 30932 + 30932 30933 30929 + 30929 30933 30930 + 30933 30934 30930 + 30935 30930 30934 + 30930 30935 30936 + 30936 30931 30930 + 30826 30830 30932 + 30830 30937 30932 + 30932 30937 30938 + 30939 30932 30938 + 30933 30932 30939 + 30933 30939 30940 + 30940 30934 30933 + 30941 30934 30940 + 30934 30941 30935 + 30834 30937 30830 + 30938 30937 30834 + 30938 30834 30942 + 30942 30943 30938 + 30939 30938 30943 + 30940 30939 30943 + 30940 30943 30944 + 30945 30940 30944 + 30940 30945 30941 + 30833 30942 30834 + 30946 30942 30833 + 30943 30942 30946 + 30946 30944 30943 + 30944 30946 30947 + 30947 30948 30944 + 30948 30949 30944 + 30949 30945 30944 + 30941 30945 30949 + 30949 30950 30941 + 30935 30941 30950 + 30833 30951 30946 + 30946 30951 30952 + 30952 30953 30946 + 30953 30947 30946 + 30954 30947 30953 + 30948 30947 30954 + 30948 30954 30955 + 30955 30949 30948 + 30955 30950 30949 + 30842 30951 30833 + 30951 30842 30956 + 30956 30952 30951 + 30952 30956 30957 + 30952 30957 30958 + 30958 30953 30952 + 30953 30958 30959 + 30953 30959 30954 + 30954 30959 30960 + 30955 30954 30960 + 30961 30956 30842 + 30957 30956 30961 + 30961 30962 30957 + 30957 30962 30963 + 30958 30957 30963 + 30963 30964 30958 + 30959 30958 30964 + 30964 30960 30959 + 30842 30841 30961 + 30847 30961 30841 + 30961 30847 30962 + 30847 30965 30962 + 30962 30965 30966 + 30966 30963 30962 + 30963 30966 30967 + 30967 30968 30963 + 30963 30968 30969 + 30969 30964 30963 + 30960 30964 30969 + 30965 30847 30846 + 30846 30970 30965 + 30965 30970 30971 + 30971 30966 30965 + 30967 30966 30971 + 30971 30972 30967 + 30973 30967 30972 + 30968 30967 30973 + 30973 30974 30968 + 30969 30968 30974 + 30846 30851 30970 + 30851 30975 30970 + 30970 30975 30971 + 30975 30976 30971 + 30971 30976 30977 + 30977 30972 30971 + 30972 30977 30978 + 30978 30979 30972 + 30972 30979 30973 + 30975 30851 30980 + 30980 30981 30975 + 30975 30981 30982 + 30982 30976 30975 + 30977 30976 30982 + 30982 30983 30977 + 30978 30977 30983 + 30980 30851 30850 + 30850 30984 30980 + 30985 30980 30984 + 30980 30985 30981 + 30985 30986 30981 + 30981 30986 30982 + 30986 30987 30982 + 30982 30987 30983 + 30855 30984 30850 + 30988 30984 30855 + 30984 30988 30985 + 30985 30988 30989 + 30989 30990 30985 + 30985 30990 30991 + 30986 30985 30991 + 30986 30991 30992 + 30987 30986 30992 + 30983 30987 30992 + 30855 30993 30988 + 30988 30993 30994 + 30994 30989 30988 + 30995 30989 30994 + 30989 30995 30996 + 30996 30990 30989 + 30996 30991 30990 + 30991 30996 30997 + 30997 30992 30991 + 30993 30855 30854 + 30854 30998 30993 + 30998 30994 30993 + 30999 30994 30998 + 30994 30999 30995 + 30995 30999 31000 + 31000 31001 30995 + 30996 30995 31001 + 30997 30996 31001 + 30860 30998 30854 + 30998 30860 30999 + 30999 30860 30865 + 30865 31000 30999 + 30870 31000 30865 + 31000 30870 31001 + 31001 30870 31002 + 31002 31003 31001 + 31001 31003 30997 + 31004 30997 31003 + 30997 31004 31005 + 31005 30992 30997 + 30992 31005 30983 + 30983 31005 30978 + 30869 31002 30870 + 31006 31002 30869 + 31002 31006 31007 + 31003 31002 31007 + 31003 31007 31004 + 31008 31004 31007 + 31005 31004 31008 + 31008 30978 31005 + 30978 31008 31009 + 31009 30979 30978 + 30869 31010 31006 + 31011 31006 31010 + 31007 31006 31011 + 31011 31012 31007 + 31007 31012 31008 + 31009 31008 31012 + 31012 31013 31009 + 31014 31009 31013 + 30979 31009 31014 + 31014 30973 30979 + 31010 30869 30868 + 30868 30875 31010 + 31010 30875 31015 + 31015 31016 31010 + 31010 31016 31011 + 31017 31011 31016 + 31012 31011 31017 + 31017 31013 31012 + 31013 31017 31018 + 31018 31019 31013 + 31013 31019 31014 + 31020 31015 30875 + 31021 31015 31020 + 31015 31021 31022 + 31022 31016 31015 + 31016 31022 31017 + 31018 31017 31022 + 31022 31023 31018 + 31024 31018 31023 + 31019 31018 31024 + 30875 30874 31020 + 31025 31020 30874 + 31020 31025 31026 + 31026 31027 31020 + 31020 31027 31021 + 31021 31027 31028 + 31028 31029 31021 + 31022 31021 31029 + 31029 31023 31022 + 30874 31030 31025 + 31031 31025 31030 + 31026 31025 31031 + 31031 31032 31026 + 31033 31026 31032 + 31027 31026 31033 + 31033 31028 31027 + 30873 31030 30874 + 31030 30873 30880 + 30880 31034 31030 + 31030 31034 31031 + 31035 31031 31034 + 31032 31031 31035 + 31035 31036 31032 + 31032 31036 31037 + 31037 31038 31032 + 31032 31038 31033 + 31034 30880 31039 + 31039 31040 31034 + 31034 31040 31035 + 31035 31040 31041 + 31036 31035 31041 + 31041 31042 31036 + 31037 31036 31042 + 31039 30880 30879 + 30879 30894 31039 + 31039 30894 30893 + 31040 31039 30893 + 30893 31041 31040 + 31042 31041 30893 + 31043 31042 30893 + 31042 31043 31044 + 31044 31037 31042 + 31037 31044 31045 + 31045 31038 31037 + 31038 31045 31046 + 31046 31033 31038 + 31033 31046 31047 + 31047 31028 31033 + 30903 31043 30893 + 31043 30903 31048 + 31048 31049 31043 + 31049 31044 31043 + 31045 31044 31049 + 31049 31050 31045 + 31046 31045 31050 + 31050 31051 31046 + 31047 31046 31051 + 30908 31048 30903 + 31052 31048 30908 + 31049 31048 31052 + 31052 31050 31049 + 31050 31052 31053 + 31053 31051 31050 + 31051 31053 30918 + 30918 31054 31051 + 31051 31054 31047 + 31055 31047 31054 + 31028 31047 31055 + 31055 31029 31028 + 30908 30913 31052 + 31053 31052 30913 + 30913 30912 31053 + 30918 31053 30912 + 31054 30918 30917 + 30917 31056 31054 + 31054 31056 31055 + 31057 31055 31056 + 31029 31055 31057 + 31057 31023 31029 + 31023 31057 31024 + 31056 30917 30923 + 30923 31058 31056 + 31056 31058 31057 + 31057 31058 31059 + 31059 31024 31057 + 31060 31024 31059 + 31024 31060 31019 + 31019 31060 31061 + 31061 31014 31019 + 31058 30923 31062 + 31062 31059 31058 + 31063 31059 31062 + 31059 31063 31060 + 31060 31063 31064 + 31064 31065 31060 + 31065 31061 31060 + 31066 31061 31065 + 31014 31061 31066 + 31067 31062 30923 + 31063 31062 31067 + 31067 31064 31063 + 31064 31067 30921 + 30921 30927 31064 + 31064 30927 31068 + 31068 31065 31064 + 31069 31065 31068 + 31065 31069 31066 + 30923 30922 31067 + 30921 31067 30922 + 30931 31068 30927 + 31070 31068 30931 + 31068 31070 31069 + 31069 31070 31071 + 31071 31072 31069 + 31069 31072 31073 + 31073 31066 31069 + 30974 31066 31073 + 31066 30974 31014 + 30974 30973 31014 + 30931 30936 31070 + 30936 31071 31070 + 31074 31071 30936 + 31072 31071 31074 + 31074 31075 31072 + 31072 31075 30960 + 30960 31073 31072 + 30969 31073 30960 + 31073 30969 30974 + 30936 30935 31074 + 30950 31074 30935 + 31075 31074 30950 + 30950 30955 31075 + 30960 31075 30955 +} diff --git a/Chapter 20 Shadow Mapping/Textures/bricks2.dds b/Chapter 20 Shadow Mapping/Textures/bricks2.dds new file mode 100644 index 0000000..a0fb9c3 Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/bricks2.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/bricks2_nmap.dds b/Chapter 20 Shadow Mapping/Textures/bricks2_nmap.dds new file mode 100644 index 0000000..d6c5fab Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/bricks2_nmap.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/default_nmap.dds b/Chapter 20 Shadow Mapping/Textures/default_nmap.dds new file mode 100644 index 0000000..157c7c1 Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/default_nmap.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/snowcube1024.dds b/Chapter 20 Shadow Mapping/Textures/snowcube1024.dds new file mode 100644 index 0000000..c549115 Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/snowcube1024.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/tile.dds b/Chapter 20 Shadow Mapping/Textures/tile.dds new file mode 100644 index 0000000..35ee7ef Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/tile.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/tile_nmap.dds b/Chapter 20 Shadow Mapping/Textures/tile_nmap.dds new file mode 100644 index 0000000..813cee9 Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/tile_nmap.dds differ diff --git a/Chapter 20 Shadow Mapping/Textures/white1x1.dds b/Chapter 20 Shadow Mapping/Textures/white1x1.dds new file mode 100644 index 0000000..54df118 Binary files /dev/null and b/Chapter 20 Shadow Mapping/Textures/white1x1.dds differ diff --git a/Chapter 20 Shadow Mapping/d3dUtil.h b/Chapter 20 Shadow Mapping/d3dUtil.h new file mode 100644 index 0000000..675377e --- /dev/null +++ b/Chapter 20 Shadow Mapping/d3dUtil.h @@ -0,0 +1,154 @@ +#pragma once + +#include +#include +#include "VectorMath.h" + +// ����Ũ�� +static float flFrogAlpha = 0.0f; +// �Ƿ�����׶���޳� +static bool g_openFrustumCull = true; + +// ��HLSLһ�� +struct Light +{ + DirectX::XMFLOAT3 Strength = { 0.0f, 0.0f, 0.05f }; + float FalloffStart = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Direction = { 0.0f, 0.0f, 0.0f }; // directional/spot light only + float FalloffEnd = 0.0f; // point/spot light only + DirectX::XMFLOAT3 Position = { 0.0f, 0.0f, 0.0f }; // point/spot light only + float SpotPower = 0; // spot light only +}; + +#define MaxLights 16 + +struct ObjectConstants +{ + Math::Matrix4 World = Math::Matrix4(Math::kIdentity); // �������ģ������ת������������ + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // �ö�������������ת������ + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); + UINT MaterialIndex; +}; + +struct PassConstants +{ + Math::Matrix4 viewProj = Math::Matrix4(Math::kIdentity); // ����������תΪͶӰ����ľ��� + Math::Matrix4 modelToShadow = Math::Matrix4(Math::kIdentity); // ����������ת����Ӱ������ + Math::Vector3 eyePosW = { 0.0f, 0.0f, 0.0f }; // �۲��Ҳ���������λ�� + Math::Vector4 ambientLight = { 0.0f, 0.0f, 0.0f, 1.0f }; + + Math::Vector4 FogColor = { 0.7f, 0.7f, 0.7f, flFrogAlpha }; + float gFogStart = 50.0f; + float gFogRange = 200.0f; + DirectX::XMFLOAT2 pad; + + // Indices [0, NUM_DIR_LIGHTS) are directional lights; + // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights; + // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS) + // are spot lights for a maximum of MaxLights per object. + Light Lights[MaxLights]; +}; + +struct MaterialConstants +{ + Math::Vector4 DiffuseAlbedo = { 1.0f, 1.0f, 1.0f, 1.0f }; // ռ��16�ֽ� + Math::Vector3 FresnelR0 = { 0.01f, 0.01f, 0.01f }; // ռ��16�ֽ� + float Roughness = 0.25f; + UINT DiffuseMapIndex = 0; // ���������ݶ�Ӧ��������ͼid + UINT NormalSrvHeapIndex = 0; // ���������ݶ�Ӧ������������ͼid + UINT MaterialPad1; +}; + + +// ����Ϊ����ʹ�� + +// ����ṹ +struct Vertex +{ + Vertex() = default; + + DirectX::XMFLOAT3 Pos; + DirectX::XMFLOAT3 Normal; + DirectX::XMFLOAT2 TexC; + DirectX::XMFLOAT3 TangentU; +}; + +// ÿһ����Ŀ��Ľṹ�� +struct SubmeshGeometry +{ + int IndexCount = 0; + int StartIndexLocation = 0; + int BaseVertexLocation = 0; +}; + +class StructuredBuffer; +class ByteAddressBuffer; +// ����Ŀ��ļ��νṹ +class MeshGeometry +{ +public: + MeshGeometry() = default; + virtual ~MeshGeometry() + { + + } + +public: + void createVertex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + vertexBuff.Create(name, NumElements, ElementSize, initialData); + vertexView = vertexBuff.VertexBufferView(); + } + + void createIndex(const std::wstring& name, uint32_t NumElements, uint32_t ElementSize, + const void* initialData = nullptr) + { + indexBuff.Create(name, NumElements, ElementSize, initialData); + indexView = indexBuff.IndexBufferView(); + } + + void storeVertexAndIndex(std::vector& vertex, std::vector& index) + { + vecVertex = std::move(vertex); + vecIndex = std::move(index); + } + + void destroy() + { + vertexBuff.Destroy(); + indexBuff.Destroy(); + } + +public: + std::string name; + + std::unordered_map geoMap; // ʹ�øö�������������� + + D3D12_VERTEX_BUFFER_VIEW vertexView; + D3D12_INDEX_BUFFER_VIEW indexView; + + // �洢������������� + std::vector vecVertex; + std::vector vecIndex; + +private: + StructuredBuffer vertexBuff; // ����buff + ByteAddressBuffer indexBuff; // ����buff +}; + +struct RenderItem +{ + Math::Matrix4 modeToWorld = Math::Matrix4(Math::kIdentity); // ģ������ת����������� + Math::Matrix4 texTransform = Math::Matrix4(Math::kIdentity); // ����ת��������Ҫ���ڶ����Ӧ���������� + Math::Matrix4 matTransform = Math::Matrix4(Math::kIdentity); // ����������ƾ��󣬱���ͨ�������������̬�ƶ����� + + UINT MaterialIndex = -1; // ����������Ŀ��������Ӧ���������� + + int IndexCount = 0; // �������� + int StartIndexLocation = 0; // ������ʼλ�� + int BaseVertexLocation = 0; // ������ʼλ�� + D3D12_PRIMITIVE_TOPOLOGY PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + + MeshGeometry* geo = nullptr; // ���νṹָ�룬������Ӧ�Ķ����Լ����� +}; \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/main.cpp b/Chapter 20 Shadow Mapping/main.cpp new file mode 100644 index 0000000..73a8090 --- /dev/null +++ b/Chapter 20 Shadow Mapping/main.cpp @@ -0,0 +1,15 @@ +#include "GameApp.h" + +int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, + _In_ LPSTR lpCmdLine, _In_ int nShowCmd ) +{ + // Enable run-time memory check for debug builds. +#if defined(DEBUG) | defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + GameApp* app = new GameApp(); + GameCore::RunApplication(*app, hInstance, L"CrossGate"); + delete app; + return 0; +} \ No newline at end of file diff --git a/Chapter 20 Shadow Mapping/packages.config b/Chapter 20 Shadow Mapping/packages.config new file mode 100644 index 0000000..ebd2e2a --- /dev/null +++ b/Chapter 20 Shadow Mapping/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/MiniEngin_learning.sln b/MiniEngin_learning.sln index e0f7941..fbf9b69 100644 --- a/MiniEngin_learning.sln +++ b/MiniEngin_learning.sln @@ -19,64 +19,92 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 11 Stenciling", "Ch EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 12 The Geometry Shader", "Chapter 12 The Geometry Shader\Chapter 12 The Geometry Shader.vcxproj", "{A2AA345E-C476-4F68-93FA-3C1896694EAF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 13 The Compute Shader", "Chapter 13 The Compute Shader\Chapter 13 The Compute Shader.vcxproj", "{8512BCED-E5A5-471A-9C80-B0A5D1A27B84}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 14 The Tessellation Stages", "Chapter 14 The Tessellation Stages\Chapter 14 The Tessellation Stages.vcxproj", "{F8F4C4A2-671E-4D6C-A379-2AFB1BA33651}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 15 First Person Camera and Dynamic Indexing", "Chapter 15 First Person Camera and Dynamic Indexing\Chapter 15 First Person Camera and Dynamic Indexing.vcxproj", "{3F274302-4DA6-4653-BEA7-D8A4B0284FA4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 16 Instancing and Frustum Culling", "Chapter 16 Instancing and Frustum Culling\Chapter 16 Instancing and Frustum Culling.vcxproj", "{ADD8FADA-5478-4425-904E-BEF51FAFFA77}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 17 Picking", "Chapter 17 Picking\Chapter 17 Picking.vcxproj", "{DC86DA3F-B166-464B-8147-BC18A9FA18DE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 18 Cube Mapping", "Chapter 18 Cube Mapping\Chapter 18 Cube Mapping.vcxproj", "{6B93AE6B-3432-44AA-A6DA-87065A625F00}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 19 Normal Mapping", "Chapter 19 Normal Mapping\Chapter 19 Normal Mapping.vcxproj", "{4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chapter 20 Shadow Mapping", "Chapter 20 Shadow Mapping\Chapter 20 Shadow Mapping.vcxproj", "{7258C697-EB13-4074-8774-08D812A4A2A6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Debug|x64.ActiveCfg = Debug|x64 {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Debug|x64.Build.0 = Debug|x64 - {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Debug|x86.ActiveCfg = Debug|Win32 - {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Debug|x86.Build.0 = Debug|Win32 {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Release|x64.ActiveCfg = Release|x64 {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Release|x64.Build.0 = Release|x64 - {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Release|x86.ActiveCfg = Release|Win32 - {4E0EAF7C-2F52-4571-95C6-E0C1C388AACB}.Release|x86.Build.0 = Release|Win32 {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Debug|x64.ActiveCfg = Debug|x64 {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Debug|x64.Build.0 = Debug|x64 - {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Debug|x86.ActiveCfg = Debug|x64 {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Release|x64.ActiveCfg = Release|x64 {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Release|x64.Build.0 = Release|x64 - {651FA0AE-D0A6-485F-BC12-B2DC82C26A08}.Release|x86.ActiveCfg = Release|x64 {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Debug|x64.ActiveCfg = Debug|x64 {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Debug|x64.Build.0 = Debug|x64 - {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Debug|x86.ActiveCfg = Debug|x64 {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Release|x64.ActiveCfg = Release|x64 {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Release|x64.Build.0 = Release|x64 - {30DD6C52-5B9B-4671-86DC-B33C8C185091}.Release|x86.ActiveCfg = Release|x64 {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Debug|x64.ActiveCfg = Debug|x64 {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Debug|x64.Build.0 = Debug|x64 - {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Debug|x86.ActiveCfg = Debug|x64 {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Release|x64.ActiveCfg = Release|x64 {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Release|x64.Build.0 = Release|x64 - {4D2CF6C0-73B7-4304-934E-9FF9024DE343}.Release|x86.ActiveCfg = Release|x64 {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Debug|x64.ActiveCfg = Debug|x64 {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Debug|x64.Build.0 = Debug|x64 - {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Debug|x86.ActiveCfg = Debug|x64 {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Release|x64.ActiveCfg = Release|x64 {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Release|x64.Build.0 = Release|x64 - {7B7579B2-E5A1-48D7-839E-4E28C3967990}.Release|x86.ActiveCfg = Release|x64 {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Debug|x64.ActiveCfg = Debug|x64 {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Debug|x64.Build.0 = Debug|x64 - {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Debug|x86.ActiveCfg = Debug|x64 {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Release|x64.ActiveCfg = Release|x64 {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Release|x64.Build.0 = Release|x64 - {126E73E3-B93C-4EE5-98D5-6A0A2A132AD4}.Release|x86.ActiveCfg = Release|x64 {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Debug|x64.ActiveCfg = Debug|x64 {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Debug|x64.Build.0 = Debug|x64 - {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Debug|x86.ActiveCfg = Debug|x64 {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Release|x64.ActiveCfg = Release|x64 {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Release|x64.Build.0 = Release|x64 - {0D72242D-C42E-4E86-9ED0-040FDF4D3591}.Release|x86.ActiveCfg = Release|x64 {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Debug|x64.ActiveCfg = Debug|x64 {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Debug|x64.Build.0 = Debug|x64 - {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Debug|x86.ActiveCfg = Debug|x64 {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Release|x64.ActiveCfg = Release|x64 {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Release|x64.Build.0 = Release|x64 - {A2AA345E-C476-4F68-93FA-3C1896694EAF}.Release|x86.ActiveCfg = Release|x64 + {8512BCED-E5A5-471A-9C80-B0A5D1A27B84}.Debug|x64.ActiveCfg = Debug|x64 + {8512BCED-E5A5-471A-9C80-B0A5D1A27B84}.Debug|x64.Build.0 = Debug|x64 + {8512BCED-E5A5-471A-9C80-B0A5D1A27B84}.Release|x64.ActiveCfg = Release|x64 + {8512BCED-E5A5-471A-9C80-B0A5D1A27B84}.Release|x64.Build.0 = Release|x64 + {F8F4C4A2-671E-4D6C-A379-2AFB1BA33651}.Debug|x64.ActiveCfg = Debug|x64 + {F8F4C4A2-671E-4D6C-A379-2AFB1BA33651}.Debug|x64.Build.0 = Debug|x64 + {F8F4C4A2-671E-4D6C-A379-2AFB1BA33651}.Release|x64.ActiveCfg = Release|x64 + {F8F4C4A2-671E-4D6C-A379-2AFB1BA33651}.Release|x64.Build.0 = Release|x64 + {3F274302-4DA6-4653-BEA7-D8A4B0284FA4}.Debug|x64.ActiveCfg = Debug|x64 + {3F274302-4DA6-4653-BEA7-D8A4B0284FA4}.Debug|x64.Build.0 = Debug|x64 + {3F274302-4DA6-4653-BEA7-D8A4B0284FA4}.Release|x64.ActiveCfg = Release|x64 + {3F274302-4DA6-4653-BEA7-D8A4B0284FA4}.Release|x64.Build.0 = Release|x64 + {ADD8FADA-5478-4425-904E-BEF51FAFFA77}.Debug|x64.ActiveCfg = Debug|x64 + {ADD8FADA-5478-4425-904E-BEF51FAFFA77}.Debug|x64.Build.0 = Debug|x64 + {ADD8FADA-5478-4425-904E-BEF51FAFFA77}.Release|x64.ActiveCfg = Release|x64 + {ADD8FADA-5478-4425-904E-BEF51FAFFA77}.Release|x64.Build.0 = Release|x64 + {DC86DA3F-B166-464B-8147-BC18A9FA18DE}.Debug|x64.ActiveCfg = Debug|x64 + {DC86DA3F-B166-464B-8147-BC18A9FA18DE}.Debug|x64.Build.0 = Debug|x64 + {DC86DA3F-B166-464B-8147-BC18A9FA18DE}.Release|x64.ActiveCfg = Release|x64 + {DC86DA3F-B166-464B-8147-BC18A9FA18DE}.Release|x64.Build.0 = Release|x64 + {6B93AE6B-3432-44AA-A6DA-87065A625F00}.Debug|x64.ActiveCfg = Debug|x64 + {6B93AE6B-3432-44AA-A6DA-87065A625F00}.Debug|x64.Build.0 = Debug|x64 + {6B93AE6B-3432-44AA-A6DA-87065A625F00}.Release|x64.ActiveCfg = Release|x64 + {6B93AE6B-3432-44AA-A6DA-87065A625F00}.Release|x64.Build.0 = Release|x64 + {4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00}.Debug|x64.ActiveCfg = Debug|x64 + {4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00}.Debug|x64.Build.0 = Debug|x64 + {4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00}.Release|x64.ActiveCfg = Release|x64 + {4FA9BD88-5FBD-4DE4-BBE5-0E6DDB87BA00}.Release|x64.Build.0 = Release|x64 + {7258C697-EB13-4074-8774-08D812A4A2A6}.Debug|x64.ActiveCfg = Debug|x64 + {7258C697-EB13-4074-8774-08D812A4A2A6}.Debug|x64.Build.0 = Debug|x64 + {7258C697-EB13-4074-8774-08D812A4A2A6}.Release|x64.ActiveCfg = Release|x64 + {7258C697-EB13-4074-8774-08D812A4A2A6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/packages/WinPixEventRuntime.1.0.190604001/.signature.p7s b/packages/WinPixEventRuntime.1.0.190604001/.signature.p7s new file mode 100644 index 0000000..bcda5f8 Binary files /dev/null and b/packages/WinPixEventRuntime.1.0.190604001/.signature.p7s differ diff --git a/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsCommon.h b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsCommon.h new file mode 100644 index 0000000..4006926 --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsCommon.h @@ -0,0 +1,562 @@ +/*==========================================================================; +* +* Copyright (C) Microsoft Corporation. All Rights Reserved. +* +* File: PIXEventsCommon.h +* Content: PIX include file +* Don't include this file directly - use pix3.h +* +****************************************************************************/ +#pragma once + +#ifndef _PIXEventsCommon_H_ +#define _PIXEventsCommon_H_ + +#include + +#if defined(_M_X64) || defined(_M_IX86) +#include +#endif + +struct PIXEventsBlockInfo +{ +}; + +struct PIXEventsThreadInfo +{ + PIXEventsBlockInfo* block; + UINT64* biasedLimit; + UINT64* destination; +}; + +extern "C" UINT64 WINAPI PIXEventsReplaceBlock(bool getEarliestTime); + +enum PIXEventType +{ + PIXEvent_EndEvent = 0x000, + PIXEvent_BeginEvent_VarArgs = 0x001, + PIXEvent_BeginEvent_NoArgs = 0x002, + PIXEvent_SetMarker_VarArgs = 0x007, + PIXEvent_SetMarker_NoArgs = 0x008, + + PIXEvent_EndEvent_OnContext = 0x010, + PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, + PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, + PIXEvent_SetMarker_OnContext_VarArgs = 0x017, + PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + + // Xbox and Windows store different types of events for context events. + // On Xbox these include a context argument, while on Windows they do not. + // It is important not to change the event types used on the Windows version + // as there are OS components (eg debug layer & DRED) that decode event + // structs. +#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) + PIXEvent_GPU_BeginEvent_OnContext_VarArgs = PIXEvent_BeginEvent_OnContext_VarArgs, + PIXEvent_GPU_BeginEvent_OnContext_NoArgs = PIXEvent_BeginEvent_OnContext_NoArgs, + PIXEvent_GPU_SetMarker_OnContext_VarArgs = PIXEvent_SetMarker_OnContext_VarArgs, + PIXEvent_GPU_SetMarker_OnContext_NoArgs = PIXEvent_SetMarker_OnContext_NoArgs, +#else + PIXEvent_GPU_BeginEvent_OnContext_VarArgs = PIXEvent_BeginEvent_VarArgs, + PIXEvent_GPU_BeginEvent_OnContext_NoArgs = PIXEvent_BeginEvent_NoArgs, + PIXEvent_GPU_SetMarker_OnContext_VarArgs = PIXEvent_SetMarker_VarArgs, + PIXEvent_GPU_SetMarker_OnContext_NoArgs = PIXEvent_SetMarker_NoArgs, +#endif +}; + +static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; +//this is used to make sure SSE string copy always will end 16-byte write in the current block +//this way only a check if destination < limit can be performed, instead of destination < limit - 1 +//since both these are UINT64* and SSE writes in 16 byte chunks, 8 bytes are kept in reserve +//so even if SSE overwrites 8 extra bytes, those will still belong to the correct block +//on next iteration check destination will be greater than limit +//this is used as well for fixed size UMD events and PIXEndEvent since these require less space +//than other variable length user events and do not need big reserved space +static const UINT64 PIXEventsReservedTailSpaceQwords = 2; +static const UINT64 PIXEventsSafeFastCopySpaceQwords = PIXEventsReservedRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; +static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; + +//Bits 7-19 (13 bits) +static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; + +//Bits 10-19 (10 bits) +static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; +static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; +static const UINT64 PIXEventsTypeBitShift = 10; + +//Bits 20-63 (44 bits) +static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; +static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; +static const UINT64 PIXEventsTimestampBitShift = 20; + +inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) +{ + return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); +} + +//Bits 60-63 (4) +static const UINT64 PIXEventsStringAlignmentWriteMask = 0x000000000000000F; +static const UINT64 PIXEventsStringAlignmentReadMask = 0xF000000000000000; +static const UINT64 PIXEventsStringAlignmentBitShift = 60; + +//Bits 55-59 (5) +static const UINT64 PIXEventsStringCopyChunkSizeWriteMask = 0x000000000000001F; +static const UINT64 PIXEventsStringCopyChunkSizeReadMask = 0x0F80000000000000; +static const UINT64 PIXEventsStringCopyChunkSizeBitShift = 55; + +//Bit 54 +static const UINT64 PIXEventsStringIsANSIWriteMask = 0x0000000000000001; +static const UINT64 PIXEventsStringIsANSIReadMask = 0x0040000000000000; +static const UINT64 PIXEventsStringIsANSIBitShift = 54; + +//Bit 53 +static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; +static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; +static const UINT64 PIXEventsStringIsShortcutBitShift = 53; + +inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) +{ + return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | + ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | + (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); +} + +template +inline bool PIXIsPointerAligned(T* pointer) +{ + return !(((UINT64)pointer) & (alignment - 1)); +} + +// Generic template version slower because of the additional clear write +template +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, T argument) +{ + if (destination < limit) + { + *destination = 0ull; + *((T*)destination) = argument; + ++destination; + } +} + +// int32 specialization to avoid slower double memory writes +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT32 argument) +{ + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } +} + +// unsigned int32 specialization to avoid slower double memory writes +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT32 argument) +{ + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } +} + +// int64 specialization to avoid slower double memory writes +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT64 argument) +{ + if (destination < limit) + { + *reinterpret_cast(destination) = argument; + ++destination; + } +} + +// unsigned int64 specialization to avoid slower double memory writes +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT64 argument) +{ + if (destination < limit) + { + *destination = argument; + ++destination; + } +} + +//floats must be cast to double during writing the data to be properly printed later when reading the data +//this is needed because when float is passed to varargs function it's cast to double +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, float argument) +{ + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } +} + +//char has to be cast to a longer signed integer type +//this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, char argument) +{ + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } +} + +//unsigned char has to be cast to a longer unsigned integer type +//this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) +{ + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } +} + +//bool has to be cast to an integer since it's not explicitly supported by string format routines +//there's no format specifier for bool type, but it should work with integer format specifiers +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, bool argument) +{ + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } +} + +inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 8; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 24; + c = static_cast(argument[4]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[5]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 40; + c = static_cast(argument[6]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + c = static_cast(argument[7]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 56; + *destination++ = x; + argument += 8; + } +} + +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + if (!((qword & 0xFF00000000000000) && + (qword & 0xFF000000000000) && + (qword & 0xFF0000000000) && + (qword & 0xFF00000000) && + (qword & 0xFF000000) && + (qword & 0xFF0000) && + (qword & 0xFF00) && + (qword & 0xFF))) + { + break; + } + } + } + else + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } +} + +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + if (destination < limit) + { + if (argument != nullptr) + { +#if defined(_M_X64) || defined(_M_IX86) + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + } + else +#endif // defined(_M_X64) || defined(_M_IX86) + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } +} + +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) +{ + PIXCopyEventArgument(destination, limit, (PCSTR)argument); +} + +inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + *destination++ = x; + argument += 4; + } +} + +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) + { + break; + } + } + } + else + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } +} + +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + if (destination < limit) + { + if (argument != nullptr) + { +#if defined(_M_X64) || defined(_M_IX86) + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + } + else +#endif // defined(_M_X64) || defined(_M_IX86) + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } +} + +template<> +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) +{ + PIXCopyEventArgument(destination, limit, (PCWSTR)argument); +}; + +#if defined(__d3d12_x_h__) || defined(__d3d12_h__) + +inline void PIXSetGPUMarkerOnContext(_In_ ID3D12GraphicsCommandList* commandList, _In_reads_bytes_(size) void* data, UINT size) +{ + commandList->SetMarker(D3D12_EVENT_METADATA, data, size); +} + +inline void PIXSetGPUMarkerOnContext(_In_ ID3D12CommandQueue* commandQueue, _In_reads_bytes_(size) void* data, UINT size) +{ + commandQueue->SetMarker(D3D12_EVENT_METADATA, data, size); +} + +inline void PIXBeginGPUEventOnContext(_In_ ID3D12GraphicsCommandList* commandList, _In_reads_bytes_(size) void* data, UINT size) +{ + commandList->BeginEvent(D3D12_EVENT_METADATA, data, size); +} + +inline void PIXBeginGPUEventOnContext(_In_ ID3D12CommandQueue* commandQueue, _In_reads_bytes_(size) void* data, UINT size) +{ + commandQueue->BeginEvent(D3D12_EVENT_METADATA, data, size); +} + +inline void PIXEndGPUEventOnContext(_In_ ID3D12GraphicsCommandList* commandList) +{ + commandList->EndEvent(); +} + +inline void PIXEndGPUEventOnContext(_In_ ID3D12CommandQueue* commandQueue) +{ + commandQueue->EndEvent(); +} + +#endif //__d3d12_x_h__ + +template struct PIXInferScopedEventType { typedef T Type; }; +template struct PIXInferScopedEventType { typedef T Type; }; +template struct PIXInferScopedEventType { typedef T Type; }; +template struct PIXInferScopedEventType { typedef T Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +#endif //_PIXEventsCommon_H_ diff --git a/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsGenerated.h b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsGenerated.h new file mode 100644 index 0000000..3e8361a --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/PIXEventsGenerated.h @@ -0,0 +1,10884 @@ +//This is a generated file. +#pragma once + +#ifndef _PIXEventsGenerated_H_ +#define _PIXEventsGenerated_H_ + +#ifndef _PIX3_H_ +#error Don't include this file directly - use pix3.h +#endif + +#include "PIXEventsCommon.h" + +//__declspec(noinline) is specified to stop compiler from making bad inlining decisions +//inline has to be specified for functions fully defined in header due to one definition rule + +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginEventAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXBeginEvent(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginEventAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetMarkerAllocate(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXSetMarker(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetMarkerAllocate(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXBeginCPUEventOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXBeginCPUEventOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXBeginCPUEventOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString) +{ + PIXBeginCPUEventOnContext(context, color, formatString); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString) +{ + PIXBeginCPUEventOnContext(context, color, formatString); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXBeginEvent(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXBeginCPUEventOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_BeginEvent_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = 0ull; + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +template +__declspec(noinline) inline void PIXSetCPUMarkerOnContextAllocate(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + UINT64 time = PIXEventsReplaceBlock(false); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } +} + +template +inline void PIXSetCPUMarkerOnContext(PVOID context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXStoreContextArgument(destination, limit, context); + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXSetCPUMarkerOnContextAllocate(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString) +{ + PIXSetCPUMarkerOnContext(context, color, formatString); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString) +{ + PIXSetCPUMarkerOnContext(context, color, formatString); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_NoArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +template +inline void PIXSetMarker(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) +{ + PIXSetCPUMarkerOnContext(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEvent_GPU_SetMarker_OnContext_VarArgs); + *destination++ = color; + + PIXCopyEventArgument(destination, limit, formatString); + PIXCopyEventArgument(destination, limit, a1); + PIXCopyEventArgument(destination, limit, a2); + PIXCopyEventArgument(destination, limit, a3); + PIXCopyEventArgument(destination, limit, a4); + PIXCopyEventArgument(destination, limit, a5); + PIXCopyEventArgument(destination, limit, a6); + PIXCopyEventArgument(destination, limit, a7); + PIXCopyEventArgument(destination, limit, a8); + PIXCopyEventArgument(destination, limit, a9); + PIXCopyEventArgument(destination, limit, a10); + PIXCopyEventArgument(destination, limit, a11); + PIXCopyEventArgument(destination, limit, a12); + PIXCopyEventArgument(destination, limit, a13); + PIXCopyEventArgument(destination, limit, a14); + PIXCopyEventArgument(destination, limit, a15); + PIXCopyEventArgument(destination, limit, a16); + *destination = 0ull; + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +} + +__declspec(noinline) inline void PIXEndEventAllocate() +{ + UINT64 time = PIXEventsReplaceBlock(true); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXEndEvent() +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXEndEventAllocate(); + } +} + +__declspec(noinline) inline void PIXEndCPUEventOnContextAllocate(PVOID context) +{ + UINT64 time = PIXEventsReplaceBlock(true); + if (time) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); + PIXStoreContextArgument(destination, limit, context); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + } +} + +inline void PIXEndCPUEventOnContext(PVOID context) +{ + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); + PIXStoreContextArgument(destination, limit, context); + *destination = PIXEventsBlockEndMarker; + threadInfo->destination = destination; + } + else if (limit != nullptr) + { + PIXEndCPUEventOnContextAllocate(context); + } +} + +template +inline void PIXEndEvent(TContext* context) +{ + PIXEndCPUEventOnContext(context); + PIXEndGPUEventOnContext(context); +} + +template +class PIXScopedEventObject +{ +private: + TContext* m_context; + +public: + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString) + : m_context(context) + { + PIXBeginEvent(context, color, formatString); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString) + : m_context(context) + { + PIXBeginEvent(context, color, formatString); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } + + template + PIXScopedEventObject(TContext* context, UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) + : m_context(context) + { + PIXBeginEvent(context, color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(m_context); + } +}; + +template<> +class PIXScopedEventObject +{ +public: + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString) + { + PIXBeginEvent(color, formatString); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1) + { + PIXBeginEvent(color, formatString, a1); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2) + { + PIXBeginEvent(color, formatString, a1, a2); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3) + { + PIXBeginEvent(color, formatString, a1, a2, a3); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString) + { + PIXBeginEvent(color, formatString); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1) + { + PIXBeginEvent(color, formatString, a1); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2) + { + PIXBeginEvent(color, formatString, a1, a2); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3) + { + PIXBeginEvent(color, formatString, a1, a2, a3); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + } + + template + PIXScopedEventObject(UINT64 color, _In_ PCWSTR formatString, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10, T11 a11, T12 a12, T13 a13, T14 a14, T15 a15, T16 a16) + { + PIXBeginEvent(color, formatString, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(); + } +}; + +#define PIXConcatenate(a, b) a ## b +#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) +#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) + +#endif diff --git a/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3.h b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3.h new file mode 100644 index 0000000..9d3ba30 --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3.h @@ -0,0 +1,128 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: pix3.h + * Content: PIX include file + * + ****************************************************************************/ +#pragma once + +#ifndef _PIX3_H_ +#define _PIX3_H_ + +#include + +#ifndef __cplusplus +#error "Only C++ files can include pix3.h. C is not supported." +#endif + +#if !defined(USE_PIX_SUPPORTED_ARCHITECTURE) +#if defined(_M_X64) || defined(USE_PIX_ON_ALL_ARCHITECTURES) || defined(_M_ARM64) +#define USE_PIX_SUPPORTED_ARCHITECTURE +#endif +#endif + +#if !defined(USE_PIX) +#if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(_DEBUG) || DBG || defined(PROFILE) || defined(PROFILE_BUILD)) && !defined(_PREFAST_) +#define USE_PIX +#endif +#endif + +#if defined(USE_PIX) && !defined(USE_PIX_SUPPORTED_ARCHITECTURE) +#pragma message("Warning: Pix markers are only supported on AMD64 and ARM64") +#endif + +#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) +#include "pix3_xbox.h" +#else +#include "pix3_win.h" +#endif + +// These flags are used by both PIXBeginCapture and PIXGetCaptureState +#define PIX_CAPTURE_TIMING (1 << 0) +#define PIX_CAPTURE_GPU (1 << 1) +#define PIX_CAPTURE_FUNCTION_SUMMARY (1 << 2) +#define PIX_CAPTURE_FUNCTION_DETAILS (1 << 3) +#define PIX_CAPTURE_CALLGRAPH (1 << 4) +#define PIX_CAPTURE_INSTRUCTION_TRACE (1 << 5) +#define PIX_CAPTURE_SYSTEM_MONITOR_COUNTERS (1 << 6) +#define PIX_CAPTURE_VIDEO (1 << 7) +#define PIX_CAPTURE_AUDIO (1 << 8) + +typedef union PIXCaptureParameters +{ + struct GpuCaptureParameters + { + PVOID reserved; + } GpuCaptureParameters; + + struct TimingCaptureParameters + { + BOOL CaptureCallstacks; + PWSTR FileName; + } TimingCaptureParameters; + +} PIXCaptureParameters, *PPIXCaptureParameters; + + + +#if defined(USE_PIX) && defined(USE_PIX_SUPPORTED_ARCHITECTURE) + +#define PIX_EVENTS_ARE_TURNED_ON + +#include "PIXEventsCommon.h" +#include "PIXEventsGenerated.h" + +// Starts a programmatically controlled capture. +// captureFlags uses the PIX_CAPTURE_* family of flags to specify the type of capture to take +extern "C" HRESULT WINAPI PIXBeginCapture(DWORD captureFlags, _In_opt_ const PPIXCaptureParameters captureParameters); + +// Stops a programmatically controlled capture +// If discard == TRUE, the captured data is discarded +// If discard == FALSE, the captured data is saved +extern "C" HRESULT WINAPI PIXEndCapture(BOOL discard); + +extern "C" DWORD WINAPI PIXGetCaptureState(); + +extern "C" void WINAPI PIXReportCounter(_In_ PCWSTR name, float value); + +#else + +// Eliminate these APIs when not using PIX +inline HRESULT PIXBeginCapture(DWORD, _In_opt_ const PIXCaptureParameters*) { return S_OK; } +inline HRESULT PIXEndCapture(BOOL) { return S_OK; } +inline DWORD PIXGetCaptureState() { return 0; } +inline void PIXReportCounter(_In_ PCWSTR, float) {} +inline void PIXNotifyWakeFromFenceSignal(_In_ HANDLE) {} + +inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} +inline void PIXEndEvent() {} +inline void PIXEndEvent(void*) {} +inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} +inline void PIXScopedEvent(UINT64, _In_ PCSTR, ...) {} +inline void PIXScopedEvent(UINT64, _In_ PCWSTR, ...) {} +inline void PIXScopedEvent(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXScopedEvent(void*, UINT64, _In_ PCWSTR, ...) {} + +// don't show warnings about expressions with no effect +#pragma warning(disable:4548) +#pragma warning(disable:4555) + +#endif // USE_PIX + +// Use these functions to specify colors to pass as metadata to a PIX event/marker API. +// Use PIX_COLOR() to specify a particular color for an event. +// Or, use PIX_COLOR_INDEX() to specify a set of unique event categories, and let PIX choose +// the colors to represent each category. +inline UINT PIX_COLOR(BYTE r, BYTE g, BYTE b) { return 0xff000000 | (r << 16) | (g << 8) | b; } +inline UINT PIX_COLOR_INDEX(BYTE i) { return i; } +const UINT PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); + +#endif // _PIX3_H_ diff --git a/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3_win.h b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3_win.h new file mode 100644 index 0000000..fda91b2 --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/Include/WinPixEventRuntime/pix3_win.h @@ -0,0 +1,57 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: PIX3_win.h + * Content: PIX include file + * Don't include this file directly - use pix3.h + * + ****************************************************************************/ + +#pragma once + +#ifndef _PIX3_H_ +#error Don't include this file directly - use pix3.h +#endif + +#ifndef _PIX3_WIN_H_ +#define _PIX3_WIN_H_ + + // PIXEventsThreadInfo is defined in PIXEventsCommon.h +struct PIXEventsThreadInfo; + +extern "C" PIXEventsThreadInfo* PIXGetThreadInfo(); + +#if defined(USE_PIX) && defined(USE_PIX_SUPPORTED_ARCHITECTURE) +// Notifies PIX that an event handle was set as a result of a D3D12 fence being signaled. +// The event specified must have the same handle value as the handle +// used in ID3D12Fence::SetEventOnCompletion. +extern "C" void WINAPI PIXNotifyWakeFromFenceSignal(_In_ HANDLE event); +#endif + +// The following defines denote the different metadata values that have been used +// by tools to denote how to parse pix marker event data. The first two values +// are legacy values. +#define WINPIX_EVENT_UNICODE_VERSION 0 +#define WINPIX_EVENT_ANSI_VERSION 1 +#define WINPIX_EVENT_PIX3BLOB_VERSION 2 + +#define D3D12_EVENT_METADATA WINPIX_EVENT_PIX3BLOB_VERSION + +__forceinline UINT64 PIXGetTimestampCounter() +{ + LARGE_INTEGER time = {}; + QueryPerformanceCounter(&time); + return time.QuadPart; +} + +template +void PIXCopyEventArgument(UINT64*&, const UINT64*, T); + +template +void PIXStoreContextArgument(UINT64*& destination, const UINT64* limit, T context) +{ + PIXCopyEventArgument(destination, limit, context); +}; + +#endif //_PIX3_WIN_H_ diff --git a/packages/WinPixEventRuntime.1.0.190604001/ThirdPartyNotices.txt b/packages/WinPixEventRuntime.1.0.190604001/ThirdPartyNotices.txt new file mode 100644 index 0000000..8281e7e --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/ThirdPartyNotices.txt @@ -0,0 +1,149 @@ +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION + +Note: While Microsoft is not the author of the files below, Microsoft is +offering you a license subject to the terms of the Microsoft Software License +Terms for Microsoft PIX Developer Tool (the "Microsoft Program"). Microsoft +reserves all other rights. The notices below are provided for informational +purposes only and are not the license terms under which Microsoft distributes +these files. + +The Microsoft Program includes the following third-party software: + +1. Boost v. 1.66.0 (https://sourceforge.net/projects/boost/files/boost/1.66.0) +2. fmt v4.1.0 (https://github.com/fmtlib/fmt/releases/tag/4.1.0) + + +As the recipient of the above third-party software, Microsoft sets forth a copy +of the notices and other information below. + + +BOOST NOTICES AND INFORMATION BEGIN HERE +======================================== + +Boost v. 1.66.0 +Copyright Beman Dawes, David Abrahams, 1998-2005 +Copyright Rene Rivera 2006-2007 +Provided for Informational Purposes Only +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by this +license (the "Software") to use, reproduce, display, distribute, execute, and +transmit the Software, and to prepare derivative works of the Software, and to +permit third-parties to whom the Software is furnished to do so, all subject to +the following: + +The copyright notices in the Software and this entire statement, including the +above license grant, this restriction and the following disclaimer, must be +included in all copies of the Software, in whole or in part, and all derivative +works of the Software, unless such copies or derivative works are solely in the +form of machine-executable object code generated by a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL +THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY +DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE + +END OF BOOST NOTICES AND INFORMATION +==================================== + +FMT NOTICES AND INFORMATION BEGIN HERE +====================================== + +fmt v4.1.0 +Copyright (c) 2012 - 2016, Victor Zverovich +Provided for Informational Purposes Only +BSD 2-clause + + +Copyright (c) 2012 - 2016, Victor Zverovich + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +END OF FMT NOTICES AND INFORMATION +================================== + +RETROFIT NOTICES AND INFORMATION BEGIN HERE +=========================================== + +Copyright (C) 2016 Max Delta Group + +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 MAX +DELTA GROUP 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. + +Except as contained in this notice, the name of the Max Delta Group and its +members shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization from the +Max Delta Group. + +END OF RETROFIT NOTICES AND INFORMATION +======================================= + +SQLITE3 NOTICES AND INFORMATION BEGIN HERE +========================================== + +https://www.sqlite.org/copyright.html +SQLite Is Public Domain + +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code +form or as a compiled binary, for any purpose, commercial or non-commercial, and +by any means. + +The previous paragraph applies to the deliverable code and documentation in SQLite - +those parts of the SQLite library that you actually bundle and ship with a larger +application. Some scripts used as part of the build process (for example the "configure" +scripts generated by autoconf) might fall under other open-source licenses. Nothing +from these build scripts ever reaches the final deliverable SQLite library, however, +and so the licenses associated with those scripts should not be a factor in assessing +your rights to copy and use the SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has been +taken from other projects or from the open internet. Every line of code can be traced +back to its original author, and all of those authors have public domain dedications +on file. So the SQLite code base is clean and is uncontaminated with licensed code +from other projects. + +END OF SQLITE3 NOTICES AND INFORMATION +====================================== diff --git a/packages/WinPixEventRuntime.1.0.190604001/WinPixEventRuntime.1.0.190604001.nupkg b/packages/WinPixEventRuntime.1.0.190604001/WinPixEventRuntime.1.0.190604001.nupkg new file mode 100644 index 0000000..d843de4 Binary files /dev/null and b/packages/WinPixEventRuntime.1.0.190604001/WinPixEventRuntime.1.0.190604001.nupkg differ diff --git a/packages/WinPixEventRuntime.1.0.190604001/build/WinPixEventRuntime.targets b/packages/WinPixEventRuntime.1.0.190604001/build/WinPixEventRuntime.targets new file mode 100644 index 0000000..3679cf9 --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.190604001/build/WinPixEventRuntime.targets @@ -0,0 +1,68 @@ + + + + + + + $(MSBuildThisFileDirectory)..\Include\WinPixEventRuntime;%(AdditionalIncludeDirectories) + + + + + + $(MSBuildThisFileDirectory)..\bin\x64;%(AdditionalLibraryDirectories) + WinPixEventRuntime_UAP.lib;%(AdditionalDependencies) + + + + + + $(MSBuildThisFileDirectory)..\bin\ARM64;%(AdditionalLibraryDirectories) + WinPixEventRuntime_UAP.lib;%(AdditionalDependencies) + + + + + + WinPixEventBinary + $(ProjectName) + %(Filename)%(Extension) + + + + + + WinPixEventBinary + $(ProjectName) + %(Filename)%(Extension) + + + + + + $(MSBuildThisFileDirectory)..\bin\x64;%(AdditionalLibraryDirectories) + WinPixEventRuntime.lib;%(AdditionalDependencies) + + + + + + $(MSBuildThisFileDirectory)..\bin\ARM64;%(AdditionalLibraryDirectories) + WinPixEventRuntime.lib;%(AdditionalDependencies) + + + + + + %(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + + + + + + %(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + + +